[Crosstoolchain-logs] [SCM] GNU GDB Debian packaging repository branch, upstream, updated. upstream/7.4.1-2-gc0f2a72

Hector Oron hector.oron at collabora.co.uk
Wed Feb 20 12:15:20 UTC 2013


The following commit has been merged in the upstream branch:
commit c0f2a723c8c0f5d48e914456d4013e4b9edce74f
Author: Hector Oron <hector.oron at collabora.co.uk>
Date:   Wed Feb 20 13:10:32 2013 +0100

    Imported Upstream version 7.5

diff --git a/ChangeLog b/ChangeLog
index 27e4379..f4fbf7e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,83 @@
+2012-06-28  Christophe Lyon <christophe.lyon at st.com>
+
+	* configure.ac (CFLAGS_FOR_TARGET, CXXFLAGS_FOR_TARGET): Make sure
+	they contain -O2.
+	* configure: Regenerate.
+
+2012-05-14  Catherine Moore  <clm at codesourcery.com>
+
+	* NEWS:  Mention PowerPC VLE port.
+
+2012-05-11  Mike Frysinger  <vapier at gentoo.org>
+
+	* MAINTAINERS (config/): Move to intl/ section.
+	(compile; depcomp; install-sh; missing; ylwrap): Likewise.
+
+2012-05-09  Nick Clifton  <nickc at redhat.com>
+	    Paul Smith  <psmith at gnu.org>
+
+	PR bootstrap/50461
+	* configure.ac (mpfr-dir): When using in-tree MPFR sources
+	allow for the fact that from release v3.1.0 of MPFR the source
+	files were moved into a src sub-directory.
+	* configure: Regenerate.
+
+2012-05-02  Roland McGrath  <mcgrathr at google.com>
+
+	* configure.ac (ENABLE_GOLD): Consider *-*-nacl* targets ELF.
+	* configure: Regenerate.
+
+2012-04-25  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.sub: Update to 2012-04-18 version from official repo.
+
+2012-03-19  Tristan Gingold  <gingold at adacore.com>
+
+	* configure.ac (ia64*-*-*vms*): Add support for ld.
+	* configure: Regenerate.
+
+2012-03-14  Rainer Orth  <ro at CeBiTec.Uni-Bielefeld.DE>
+
+	* configure.ac (enable_libgomp): Remove *-*-irix6*.
+	(unsupported_languages): Remove mips-sgi-irix6.*.
+	(noconfigdirs): Don't add ${libgcj} for mips*-*-irix6*.
+	(with_stabs): Remove.
+	* configure: Regenerate.
+
+2012-03-12  Rainer Orth  <ro at CeBiTec.Uni-Bielefeld.DE>
+
+	* configure.ac (enable_libgomp): Remove *-*-osf*.
+	(with_stabs): Remove alpha*-*-osf*.
+	* configure: Regenerate.
+
+2012-03-09  Jeff Johnston  <jjohnstn at redhat.com>
+
+	* COPYING.NEWLIB: Modify DJ Delorie license to include
+	modification rights in clause as permitted by DJ Delorie.
+	* COPYING.LIBGLOSS: Ditto.
+
+2012-03-09  Jeff Johnston  <jjohnstn at redhat.com>
+
+	* COPYING.NEWLIB: Remove two unused licenses.
+
+2012-03-05  Tristan Gingold  <gingold at adacore.com>
+
+	* configure.ac: Enable gdb and readline for ia64*-*-*vms*.
+	* configure: Regenerate.
+
+2012-02-21  Joern Rennecke  <joern.rennecke at embecosm.com>
+
+	* COPYING.NEWLIB: Add Adapteva notice.
+	* COPYING.LIBGLOSS: Add Adapteva notice.
+
+2011-12-18  Eric Botcazou  <ebotcazou at adacore.com>
+
+	* configure: Regenerate.
+
+2011-12-15  Jeff Johnston  <jjohnstn at redhat.com>
+
+	* COPYING.LIBGLOSS: Add GPL with exception license.
+
 2011-11-09  Roland McGrath  <mcgrathr at google.com>
 
 	* configure.ac: Add tool checks for READELF and READELF_FOR_TARGET.
@@ -46,7 +126,7 @@
 	2011-09-09  Linas Vepstas  <linasvepstas at gmail.com>
 	    Ben Elliston  <bje at gnu.org>
 
-        * config.sub (hexagon, hexagon-*): New.
+	* config.sub (hexagon, hexagon-*): New.
 
 	2011-08-23  Roland McGrath  <mcgrathr at google.com>
 
@@ -535,11 +615,11 @@
 
 	* config.guess: Update to version 2011-02-02
 	* config.sub: Update to version 2011-02-24
-	
+
 2011-03-03  Sebastian Pop  <sebastian.pop at amd.com>
 
-        * configure.ac: Adjust test of with_ppl.
-        * configure: Regenerated.
+	* configure.ac: Adjust test of with_ppl.
+	* configure: Regenerated.
 
 2011-03-02  Sebastian Pop  <sebastian.pop at amd.com>
 
@@ -1146,11 +1226,11 @@
 	* lt~obsolete.m4: Likewise.
 
 2010-01-07  Kaveh R. Ghazi  <ghazi at caip.rutgers.edu>
-            Francois-Xavier Coudert  <fxcoudert at gcc.gnu.org>
+	    Francois-Xavier Coudert  <fxcoudert at gcc.gnu.org>
 
 	PR bootstrap/42424
 	* configure.ac: Include libtool m4 files.
-        (_LT_CHECK_OBJDIR): Call it.
+	(_LT_CHECK_OBJDIR): Call it.
 	(extra_mpc_mpfr_configure_flags, extra_mpc_gmp_configure_flags,
 	gmplibs, ppllibs, clooglibs): Use $lt_cv_objdir.
 
@@ -1563,8 +1643,8 @@
 2009-06-03  Jerome Guitton  <guitton at adacore.com>
 	    Ralf Wildenhues  <Ralf.Wildenhues at gmx.de>
 
-        * Makefile.tpl (all): Avoid a trailing backslash.
-        * Makefile.in: Regenerate.
+	* Makefile.tpl (all): Avoid a trailing backslash.
+	* Makefile.in: Regenerate.
 
 2009-06-03  Ben Elliston  <bje at au.ibm.com>
 
@@ -3727,7 +3807,7 @@
 	non-ported target libraries in noconfigdirs.
 	<cris-*, crisv32-*> Ditto, except for non-aout, non-elf,
 	non-linux-gnu.  Remove libgcj_ex_libffi.
- 	<lang_frag loop>: Set add_this_lang=no if the language is in
+	<lang_frag loop>: Set add_this_lang=no if the language is in
 	unsupported_languages.
 	* configure: Regenerate.
 
@@ -5048,8 +5128,8 @@
 
 2003-12-21  Bernardo Innocenti  <bernie at develer.com>
 
- 	* configure.in (*-*-uclinux): Exclude newlib, libgloss and rda.
- 	* configure: Regenerated.
+	* configure.in (*-*-uclinux): Exclude newlib, libgloss and rda.
+	* configure: Regenerated.
 
 2003-12-19  Nathanael Nerode  <neroden at gcc.gnu.org>
 
@@ -13138,8 +13218,8 @@ Mon May 10 05:58:35 1993  Ken Raeburn  (raeburn at kr-pc.cygnus.com)
 
 Sun May  9 17:47:57 1993  Rob Savoye  (rob at darkstar.cygnus.com)
 
-       * Makefile.in: Use srcroot to find runtest rather than rootme.
-       Pass RUNTESTFLAGS and EXPECT down in BASE_FLAGS_TO_PASS.
+	* Makefile.in: Use srcroot to find runtest rather than rootme.
+	Pass RUNTESTFLAGS and EXPECT down in BASE_FLAGS_TO_PASS.
 
 Fri May  7 14:55:59 1993  Ian Lance Taylor  (ian at cygnus.com)
 
diff --git a/MAINTAINERS b/MAINTAINERS
index 046c5ea..dd8601b 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -49,7 +49,8 @@ gdb/; readline/; sim/; GDB's part of include/
 include/
 	See binutils/, gdb/, sid/, gcc/, libiberty/ etc.
 
-intl/; config.rhost; libiberty/; libiberty's part of include/ 
+intl/; config.rhost; libiberty/; libiberty's part of include/;
+compile; depcomp; install-sh; missing; ylwrap; config/
 	gcc: http://gcc.gnu.org
 	Changes need to be done in tandem with the official GCC
 	sources or submitted to the master file maintainer and brought
@@ -104,13 +105,6 @@ etc/; utils/;
 	Any global maintainer can approve changes to these
 	files and directories.
 
-compile; depcomp; install-sh; missing; ylwrap;
-config/
-	Any global maintainer can approve changes to these
-	files and directories, but they should be aware
-	that they need to be kept in sync with their
-	counterparts in the GCC repository.
-
 modules file
 	If you understand the file format (or can cut-and-paste existing
 	entries), modify it. If it scares you, get someone who does
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 65ba31d..da9e6a2 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3164 +1,2089 @@
-2012-01-05  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix zero registers core files when built by gcc-4.7.
-	* elf64-x86-64.c: Update copyright year.
-	(elf_x86_64_write_core_note): Remove variables p and size.  Call
-	elfcore_write_note for the local variables.  Remove the final
-	elfcore_write_note call.  Add NOTREACHED comments.
-
-2011-12-21  Ulrich Weigand  <ulrich.weigand at linaro.org>
-
-	* elf32-arm.c (elf32_arm_nabi_grok_psinfo): Fill in core_pid.
-
-2011-12-13  Tristan Gingold  <gingold at adacore.com>
-
-	* mach-o.c (bfd_mach_o_read_symtab_symbols): Make global.  Remove
-	prototype.
-	(bfd_mach_o_section_get_entry_size): Make global.
-	(bfd_mach_o_section_get_nbr_indirect): Likewise.
-	(bfd_mach_o_read_symtab_strtab): Likewise.
-	(struct bfd_mach_o_xlat_name): Move to mach-o.h
-	(bfd_mach_o_print_flags): Move to binutils/od-macho.c
-	(bfd_mach_o_get_name_of_null, bfd_mach_o_get_name): Likewise.
-	(bfd_mach_o_cpu_name, bfd_mach_o_filetype_name): Likewise.
-	(bfd_mach_o_header_flags_name): Likewise.
-	(bfd_mach_o_load_command_name): Likewise.
-	(bfd_mach_o_print_private_header): Likewise.
-	(bfd_mach_o_print_section_map, bfd_mach_o_print_section): Likwise.
-	(bfd_mach_o_print_segment, bfd_mach_o_print_dysymtab): Likewise.
-	(bfd_mach_o_print_dyld_info): Likewise.
-	(bfd_mach_o_print_private_bfd_data): Remove.
-	(bfd_mach_o_type_name): Make global.
-	(bfd_mach_o_section_attribute_name): Likewise.
-	* mach-o.h (bfd_mach_o_xlat_name): Added.
-	(bfd_mach_o_section_get_nbr_indirect)
-	(bfd_mach_o_section_get_entry_size)
-	(bfd_mach_o_read_symtab_symbols)
-	(bfd_mach_o_read_symtab_strtab)
-	(bfd_mach_o_section_attribute_name)
-	(bfd_mach_o_section_type_name): Likewise.
-	* mach-o-target.c (bfd_mach_o_bfd_print_private_bfd_data): Define.
-
-2011-12-13  Chung-Lin Tang  <cltang at codesourcery.com>
-
-	* elfxx-mips.c (mips_elf_calculate_relocation): Correct
-	R_MIPS16_HI16/R_MIPS16_LO16 handling of two cleared lower bits,
-	update comments.
-
-2011-12-12  Iain Sandoe  <iains at gcc.gnu.org>
-
-	* mach-o.c (bfd_mach_o_read_section_32): Null-terminate sectname.
-	(bfd_mach_o_read_section_64): Likewise.
-
-2011-12-11  John Davis Anglin  <dave.anglin at nrc-cnrc.gc.ca>
-
-	PR binutils/13476
-	* elf32-hppa.c (final_link_relocate): Convert R_PARISC_TLS_GD21L,
-	R_PARISC_TLS_LDM21L and R_PARISC_TLS_IE21L relocations to
-	R_PARISC_DPREL21L when not doing a shared link.  Likewise convert
-	R_PARISC_TLS_GD14R, R_PARISC_TLS_LDM14R and R_PARISC_TLS_IE14R to
-	R_PARISC_DPREL14R.  Handle R_PARISC_TLS_GD21L, R_PARISC_TLS_LDM21L
-	and R_PARISC_TLS_IE21L with R_PARISC_DLTIND21L.
-
-2011-12-10  David Daney  <david.daney at cavium.com>
-
-	* elfxx-mips.c (mips_elf_link_hash_table.rld_value): Remove.
-	(mips_elf_link_hash_table.rld_symbol): New field;
-	(MIPS_ELF_RLD_MAP_SIZE): New macro.
-	(_bfd_mips_elf_add_symbol_hook): Remember __rld_obj_head symbol
-	in rld_symbol.
-	(_bfd_mips_elf_create_dynamic_sections): Remember __rld_map symbol
-	in rld_symbol.
-	(_bfd_mips_elf_size_dynamic_sections): Set correct size for .rld_map.
-	(_bfd_mips_elf_finish_dynamic_symbol): Remove .rld_map handling.
-	(_bfd_mips_elf_finish_dynamic_sections): Use rld_symbol to
-	calculate DT_MIPS_RLD_MAP value.
-	(_bfd_mips_elf_link_hash_table_create): Initialize rld_symbol,
-	quit initializing rld_value.
-
-2011-12-08  Andrew Pinski  <apinski at cavium.com>
-            Adam Nemet  <anemet at caviumnetworks.com>
-
-	* archures.c (bfd_mach_mips_octeon2): New macro
-	* bfd-in2.h: Regenerate.
-	* cpu-mips.c (I_mipsocteon2): New enum value.
-	(arch_info_struct): Add bfd_mach_mips_octeon2.
-	* elfxx-mips.c (_bfd_elf_mips_mach): Support E_MIPS_MACH_OCTEON2.
-	(mips_set_isa_flags): Add bfd_mach_mips_octeon2.
-	(mips_mach_extensions): Add bfd_mach_mips_octeon2.
-
-2011-12-07  Alan Modra  <amodra at gmail.com>
-
-	PR ld/12772
-	* elflink.c (elf_gc_sweep_symbol): Discard unmarked symbols
-	defined in shared libraries.
-
-2011-12-07  Tristan Gingold  <gingold at adacore.com>
-
-	* mach-o.c (bfd_mach_o_canonicalize_symtab): Fix indentation.
-	Adjust the condition.
-	(bfd_mach_o_read_symtab_symbol): Now returns a bfd_boolean.
-	Adjust return statements.
-	(bfd_mach_o_read_symtab_strtab): Likewise.
-	(bfd_mach_o_read_symtab_symbols): Likewise.
-	(bfd_mach_o_scan_start_address): Likewise.  Make it static.
-	(bfd_mach_o_scan): Likewise.
-	(bfd_mach_o_read_dysymtab_symbol): Remove unused function.
-	(bfd_mach_o_header_p): Adjust call.
-	(bfd_mach_o_cpu_name): Make it const.
-	(bfd_mach_o_filetype_name): Likewise.
-	(bfd_mach_o_header_flags_name): Likewise.
-	(bfd_mach_o_section_type_name): Likewise.
-	(bfd_mach_o_section_attribute_name): Likewise.
-	(bfd_mach_o_load_command_name): Likewise.
-	(bfd_mach_o_get_section_type_from_name): Add a const qualifier
-	after above change.
-	(bfd_mach_o_get_section_attribute_from_name): Likewise.
-	* mach-o.h (bfd_mach_o_read_dysymtab_symbol)
-	(bfd_mach_o_scan_start_address, bfd_mach_o_scan): Remove.
-
-2011-12-06  Ulrich Weigand  <uweigand at de.ibm.com>
-
-	* elf-bfd.h (elfcore_write_s390_last_break): Add prototype.
-	(elfcore_write_s390_system_call): Likewise.
-	* elf.c (elfcore_write_s390_last_break): New function.
-	(elfcore_write_s390_system_call): Likewise.
-	(elfcore_write_register_note): Call them.
-	(elfcore_grok_s390_last_break): New function.
-	(elfcore_grok_s390_system_call): Likewise.
-	(elfcore_grok_note): Call them.
-
-2011-12-05  Tristan Gingold  <gingold at adacore.com>
-
-	* mach-o.c (bfd_mach_o_read_symtab_symbol): Accept indirect symbols.
-
-2011-12-05  Tristan Gingold  <gingold at adacore.com>
-
-	* mach-o.c (bfd_mach_o_write_contents): Handle LC_LOAD_UPWARD_DYLIB.
-	(bfd_mach_o_read_dylib): Likewise.
-	(bfd_mach_o_read_command): Likewise.
-	(bfd_mach_o_bfd_print_private_bfd_data): Likewise.
-
-2011-12-05  Tristan Gingold  <gingold at adacore.com>
-
-	* mach-o.c (bfd_mach_o_read_command): Add the bfd in the error
+2012-07-13  Andreas Krebbel  <Andreas.Krebbel at de.ibm.com>
+
+	* elf64-s390.c: Include elf-s390-common.c.
+	(R_390_IRELATIVE): New reloc.
+	(elf_s390_reloc_type_lookup): Support R_390_IRELATIVE.
+	(RELA_ENTRY_SIZE): New macro.
+	(elf_s390_link_hash_entry): New fields ifunc_resolver_address and
+	*ifunc_resolver_section.
+	(struct plt_entry): New struct.
+	(struct elf_s390_obj_tdata): New field local_plt.
+	(elf_s390_local_plt): New macro.
+	(struct elf_s390_link_hash_table): New field irelifunc.
+	(ELF64): New macro.
+	(link_hash_newfunc): Initialize new fields.
+	(elf_s390_check_relocs): Handle IFUNC symbols.
+	(elf_s390_adjust_dynamic_symbol): Don't do anything for IFUNC
+	symbols.
+	(allocate_dynrelocs): Call s390_elf_allocate_ifunc_dyn_relocs for
+	IFUNC symbols.
+	(elf_s390_size_dynamic_sections): Handle IFUNC symbols.
+	(elf_s390_relocate_section): Likewise.
+	(elf_s390_finish_dynamic_symbol): Likewise.
+	(elf_s390_finish_dynamic_sections): Handle local IFUNC symbols.
+	(elf_s390_finish_ifunc_symbol): New function.
+	(elf_s390_gc_sweep_hook): Handle local plt entries.
+	(elf_backend_add_symbol_hook): Define.
+	* elf32-s390.c: See elf64-s390.c changes.
+	* elf-s390-common.c: New file.
+	* bfd-in2.h (BFD_RELOC_390_IRELATIVE): New enum field.
+	* libbfd.h (BFD_RELOC_390_IRELATIVE): New entry for
+	BFD_RELOC_390_IRELATIVE.
+	* reloc.c (BFD_RELOC_390_IRELATIVE): Document new relocation.
+
+2012-07-13  Nick Clifton  <nickc at redhat.com>
+
+	* aix386-core.c: Remove use of PTR and PARAMS macros.
+	* archive.c: Likewise.
+	* cache.c: Likewise.
+	* cisco-core.c: Likewise.
+	* coff-alpha.c: Likewise.
+	* coff-apollo.c: Likewise.
+	* coff-aux.c: Likewise.
+	* coff-h8300.c: Likewise.
+	* coff-h8500.c: Likewise.
+	* coff-i386.c: Likewise.
+	* coff-i960.c: Likewise.
+	* coff-ia64.c: Likewise.
+	* coff-m68k.c: Likewise.
+	* coff-m88k.c: Likewise.
+	* coff-mcore.c: Likewise.
+	* coff-mips.c: Likewise.
+	* coff-or32.c: Likewise.
+	* coff-ppc.c: Likewise.
+	* coff-rs6000.c: Likewise.
+	* coff-sh.c: Likewise.
+	* coff-sparc.c: Likewise.
+	* coff-stgo32.c: Likewise.
+	* coff-tic30.c: Likewise.
+	* coff-tic4x.c: Likewise.
+	* coff-tic54x.c: Likewise.
+	* coff-tic80.c: Likewise.
+	* coff-w65.c: Likewise.
+	* cofflink.c: Likewise.
+	* cpu-arc.c: Likewise.
+	* cpu-cris.c: Likewise.
+	* cpu-h8500.c: Likewise.
+	* cpu-i960.c: Likewise.
+	* cpu-msp430.c: Likewise.
+	* cpu-ns32k.c: Likewise.
+	* cpu-powerpc.c: Likewise.
+	* cpu-rs6000.c: Likewise.
+	* cpu-tic4x.c: Likewise.
+	* cpu-w65.c: Likewise.
+	* ecoff.c: Likewise.
+	* ecofflink.c: Likewise.
+	* elf-m10200.c: Likewise.
+	* elf32-bfin.c: Likewise.
+	* elf32-cris.c: Likewise.
+	* elf32-crx.c: Likewise.
+	* elf32-fr30.c: Likewise.
+	* elf32-frv.c: Likewise.
+	* elf32-h8300.c: Likewise.
+	* elf32-i960.c: Likewise.
+	* elf32-m32c.c: Likewise.
+	* elf32-m68hc11.c: Likewise.
+	* elf32-m68hc12.c: Likewise.
+	* elf32-m68hc1x.c: Likewise.
+	* elf32-m68k.c: Likewise.
+	* elf32-mcore.c: Likewise.
+	* elf32-rl78.c: Likewise.
+	* elf32-rx.c: Likewise.
+	* elf32-s390.c: Likewise.
+	* elf32-vax.c: Likewise.
+	* elf64-alpha.c: Likewise.
+	* elf64-mmix.c: Likewise.
+	* elf64-s390.c: Likewise.
+	* elf64-sparc.c: Likewise.
+	* elfnn-ia64.c: Likewise.
+	* elfxx-mips.c: Likewise.
+	* elfxx-sparc.c: Likewise.
+	* hash.c: Likewise.
+	* hp300hpux.c: Likewise.
+	* hppabsd-core.c: Likewise.
+	* hpux-core.c: Likewise.
+	* i386dynix.c: Likewise.
+	* i386linux.c: Likewise.
+	* i386lynx.c: Likewise.
+	* i386mach3.c: Likewise.
+	* i386msdos.c: Likewise.
+	* i386os9k.c: Likewise.
+	* irix-core.c: Likewise.
+	* lynx-core.c: Likewise.
+	* m68klinux.c: Likewise.
+	* mach-o.h: Likewise.
+	* mipsbsd.c: Likewise.
+	* netbsd-core.c: Likewise.
+	* nlm32-i386.c: Likewise.
+	* osf-core.c: Likewise.
+	* pc532-mach.c: Likewise.
+	* pef.c: Likewise.
+	* ppcboot.c: Likewise.
+	* ptrace-core.c: Likewise.
+	* reloc16.c: Likewise.
+	* sco5-core.c: Likewise.
+	* som.h: Likewise.
+	* sparclinux.c: Likewise.
+	* sparclynx.c: Likewise.
+	* ticoff.h: Likewise.
+	* trad-core.c: Likewise.
+	* vms-lib.c: Likewise.
+	* xsym.h: Likewise.
+
+2012-07-09  Alan Modra  <amodra at gmail.com>
+
+	PR ld/14323
+	* elflink.c (elf_sort_symbol): Sort by size too.
+	(elf_link_add_object_symbols <weakdefs>): Simplify binary search.
+	Do not depend on ordering of symbol aliases.  Match largest size.
+
+2012-07-03  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf.c (assign_section_numbers): Check if number of sections
+	>= SHN_LORESERVE.
+	* elfcode.h (elf_object_p): Likewise.
+
+2012-07-03  Nick Clifton  <nickc at redhat.com>
+
+	* archive.c (bsd_write_armap): Catch attempts to create an archive
+	with indicies bigger than 4Gb.
+	(coff_write_armap): Likewise.
+
+2012-07-03  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR binutils/14319
+	* elf.c (_bfd_elf_make_section_from_shdr): Don't compress empty
+	debug section.
+
+2012-07-03  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/3351
+	* elflink.c (_bfd_elf_update_dynamic_flags): New.
+	(_bfd_elf_merge_symbol): Update both real and indirect symbol
+	dynamic flags.
+	(_bfd_elf_add_default_symbol): Make the real symbol dynamic if
+	the indirect symbol is defined in a shared library.
+	(elf_link_add_object_symbols): Likewise.  If the indirect
+	symbol has been forced local, don't make the real symbol
+	dynamic.
+	(elf_link_check_versioned_symbol): Check indirect symbol.
+	(elf_link_output_extsym): Use real symbol definition when
+	reporting indirect symbol error.  Check version info for
+	dynamic versioned symbol.
+
+2012-07-03  Alan Modra  <amodra at gmail.com>
+
+	PR ld/14207
+	* elf.c (assign_file_positions_for_load_sections): Remove assertions
+	that only PT_LOAD headers include file header and section headers.
+	(assign_file_positions_for_non_load_sections): Similarly don't
+	assert PT_GNU_RELRO header does not include file and section headers.
+	Compare first section vma rather than PT_LOAD p_vaddr against
+	relro_start when looking for PT_LOAD covering PT_GNU_RELRO.  Replace
+	abort with assertion.
+
+2012-07-02  Alan Modra  <amodra at gmail.com>
+
+	* elf32-m32c.c (m32c_elf_check_relocs): Use bfd_make_section
+	"anyway" variant when creating .plt.
+	(m32c_elf_relax_plt_section): Remove redundant test and unused param.
+	(m32c_elf_relax_section): Test SEC_LINKER_CREATED before calling
+	m32c_elf_relax_plt_section.
+	* elfxx-mips.c (mips_elf_create_got_section): Use make anyway variant
+	when creating .got and .got.plt.
+	(_bfd_mips_elf_final_link): Likewise for .rtproc, and use
+	bfd_get_linker_section.
+	* sunos.c: Similarly throughout.
+
+2012-07-01  Andreas Schwab  <schwab at linux-m68k.org>
+
+	* elf.c (_bfd_elf_make_section_from_shdr): Fix typo in error
 	message.
-	(bfd_mach_o_openr_next_archived_file): Use arch name as member name.
-	(bfd_mach_o_fat_extract): Ditto.
 
-2011-12-03  Alan Modra  <amodra at gmail.com>
+2012-06-29  H.J. Lu  <hongjiu.lu at intel.com>
 
-	PR ld/13468
-	* elflink.c (bfd_elf_final_link): Don't segfault when checking
-	for DT_TEXTREL and .dynamic does not exist.
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Return FALSE
+	on unresolvable relocation.
 
-2011-12-03  Alan Modra  <amodra at gmail.com>
+2012-06-29  H.J. Lu  <hongjiu.lu at intel.com>
 
-	PR ld/13470
-	* elf32-ppc.c (ppc_elf_copy_indirect_symbol): Revert substantive
-	change in 2011-07-01 commit.  Comment.
-	* elf64-ppc.c (ppc64_elf_copy_indirect_symbol): Likewise.
+	* archive.c (_bfd_compute_and_write_armap): Simplify global
+	symbol handling.
 
-2011-12-01  Mikael Pettersson  <mikpe at it.uu.se>
+2012-06-29  Nick Clifton  <nickc at redhat.com>
 
-	* elf32-m68k.c (elf_m68k_check_relocs) <R_68K_8, R68K_16, R_68K_32>: For
-	non-SEC_ALLOC sections break before GOT and PLT accounting.
+	PR ld/14189
+	* elf32-arm.c (elf32_arm_check_relocs): Do not increment refcount
+	for locally bound symbols.
 
-2011-12-01  Hans-Peter Nilsson  <hp at axis.com>
+2012-06-29  Alan Modra  <amodra at gmail.com>
 
-	* elf32-cris.c (cris_elf_check_relocs) <plt accounting for
-	R_CRIS_8, R_CRIS_16, and R_CRIS_32>: Move early break for
-	non-SEC_ALLOC sections before GOT and PLT accounting.
-
-2011-11-29  Andrew Pinski  <apinski at cavium.com>
-
-	* archures.c (bfd_mach_mips_octeonp): New macro.
+	* section.c (bfd_get_linker_section): New function.
+	* elf32-arm.c: When retrieving SEC_LINKER_CREATED sections, use
+	the above throughout rather than bfd_get_section_by_name.  Use
+	bfd_make_section_anyway rather than bfd_make_section when creating
+	them.
+	* elf32-bfin.c: Likewise.
+	* elf32-cr16.c: Likewise.
+	* elf32-cris.c: Likewise.
+	* elf32-frv.c: Likewise.
+	* elf32-hppa.c: Likewise.
+	* elf32-i370.c: Likewise.
+	* elf32-i386.c: Likewise.
+	* elf32-lm32.c: Likewise.
+	* elf32-m32c.c: Likewise.
+	* elf32-m32r.c: Likewise.
+	* elf32-m68k.c: Likewise.
+	* elf32-microblaze.c: Likewise.
+	* elf32-ppc.c: Likewise.
+	* elf32-rl78.c: Likewise.
+	* elf32-s390.c: Likewise.
+	* elf32-score.c: Likewise.
+	* elf32-score7.c: Likewise.
+	* elf32-sh.c: Likewise.
+	* elf32-tic6x.c: Likewise.
+	* elf32-tilepro.c: Likewise.
+	* elf32-vax.c: Likewise.
+	* elf32-xstormy16.c: Likewise.
+	* elf32-xtensa.c: Likewise.
+	* elf64-alpha.c: Likewise.
+	* elf64-hppa.c: Likewise.
+	* elf64-ia64-vms.c: Likewise.
+	* elf64-ppc.c: Likewise.
+	* elf64-s390.c: Likewise.
+	* elf64-sh64.c: Likewise.
+	* elf64-sparc.c: Likewise.
+	* elf64-x86-64.c: Likewise.
+	* elfnn-ia64.c: Likewise.
+	* elfxx-mips.c: Likewise.
+	* elfxx-sparc.c: Likewise.
+	* elfxx-tilegx.c: Likewise.
+	* elflink.c: Likewise.
+	* elf-vxworks.c: Likewise.
+	* elf-m10300.c: Likewise.  Also make use of htab plt, got and
+	gotplt shortcuts.
 	* bfd-in2.h: Regenerate.
-	* bfd/cpu-mips.c (I_mipsocteonp): New enum value.
-	(arch_info_struct): Add bfd_mach_mips_octeonp.
-	* elfxx-mips.c (mips_set_isa_flags): Add bfd_mach_mips_octeonp.
-	(mips_mach_extensions): Add bfd_mach_mips_octeonp.
-
-2011-11-23  Tristan Gingold  <gingold at adacore.com>
+	* elf32-lm32.c (lm32_elf_check_relocs): Use the correct bfd when
+	calling create_rofixup_section.
+	* elflink.c (bfd_elf_final_link): Simplify test for .dynstr.
 
-	* vms-lib.c (get_idxlen): Add comments.  Fix type in sizeof.
-	(vms_write_index): Add comments.
+2012-06-29  Alan Modra  <amodra at gmail.com>
 
-2011-11-22  DJ Delorie  <dj at redhat.com>
+	* elf32-sh.c (sh_elf_create_dynamic_sections): Don't create .rela
+	section for bss type sections, except for .rela.bss.
+	* elf-m10300.c (_bfd_mn10300_elf_create_dynamic_sections): Likewise.
+	* elf32-cr16.c (_bfd_cr16_elf_create_dynamic_sections): Likewise.
+	* elf32-lm32.c (lm32_elf_create_dynamic_sections): Likewise.
+	* elf32-m32r.c (m32r_elf_create_dynamic_sections): Likewise.
+	* elf64-sh64.c (sh64_elf64_create_dynamic_sections): Likewise.
 
-	* elf32-rx.c (rx_elf_object_p): Add more checks for "scanning" to
-	avoid using the special non-swapping target when not explicitly
-	requested.
+2012-06-28  Roland McGrath  <mcgrathr at google.com>
 
-2011-11-22  Daniel Calcoen  <Daniel.Calcoen at cern.ch>
+	* elf32-arm.c (elf32_arm_populate_plt_entry): Use int32_t for
+	displacement calculation in nacl_p case.
 
-	* elf32-rx.c (rx_elf_object_p): Correct typo: lma->vma.
+2012-06-28  Nick Clifton  <nickc at redhat.com>
 
-2011-11-22  Tristan Gingold  <gingold at adacore.com>
-
-	* mach-o.c (bfd_mach_o_print_symbol): Display COM for common
-	symbols.  Print section name in brackets.
-
-2011-11-21  Andreas Tobler  <andreast at fgznet.ch>
-
-	* config.bfd: Add vectors for powerpc and powerpc64-freebsd.
-	* configure.in (TDEFINES): Add rules for powerpc*-freebsd.
+	* po/uk.po: New Ukranian translation.
+	* configure.in (ALL_LINGUAS): Add uk.
 	* configure: Regenerate.
-	* elf32-ppc.c: Add powerpc-freebsd definitions.
-	* elf64-ppc.c: Add powerpc64-freebsd definitions.
-	* targets.c: Add bits for powerpc and powerpc64-freebsd.
-
-2011-11-17  Philipp Thomas  <philipp at thogro.org>
 
-	* elf32-arm.c (elf32_thumb_to_arm_stub): Sync message so that it
-	needs to be translated only once.
+2012-06-26  Alan Modra  <amodra at gmail.com>
 
-2011-11-16  Maciej W. Rozycki  <macro at codesourcery.com>
+	* elf64-ppc.c (ppc64_elf_next_toc_section): Don't error if input
+	file has multiple .got/.toc sections and all don't fit in
+	current toc group.
 
-	* elf64-mips.c (mips_elf64_howto_table_rela): Set src_mask to
-	zero throughout.
-	(mips16_elf64_howto_table_rela): Likewise.
-	(micromips_elf64_howto_table_rela): Likewise.
-	* elfn32-mips.c (elf_mips_howto_table_rela): Likewise.
-	(elf_mips16_howto_table_rela): Likewise.
-	(elf_micromips_howto_table_rela): Likewise.
+2012-06-22  Roland McGrath  <mcgrathr at google.com>
 
-2011-11-15  Alan Modra  <amodra at gmail.com>
-	    Andreas Tobler  <andreast at fgznet.ch>
+	* elf.c (assign_file_positions_for_non_load_sections): Define
+	__ehdr_start symbol if it's referenced and there's a PT_LOAD
+	segment that covers both the file and program headers.
 
-	* elflink.c (_bfd_elf_create_got_section): Replace
-	bfd_make_section_with_flags with bfd_make_section_anyway_with_flags.
-	(_bfd_elf_link_create_dynamic_sections): Likewise.
-	* elf32-ppc.c (ppc_elf_create_glink): Likewise.
-	(ppc_elf_create_dynamic_sections): Likewise.
+2012-06-22  Andreas Schwab  <schwab at linux-m68k.org>
 
-2011-11-14  Maxim Kuvyrkov  <maxim at codesourcery.com>
+	* elf32-m68k.c (elf_m68k_finish_dynamic_symbol): Don't make
+	_GLOBAL_OFFSET_TABLE_ and _DYNAMIC absolute.
 
-	* elfxx-mips.c (mips_n64_exec_plt0_entry): Use 64-bit move.
+2012-06-22  Alan Modra  <amodra at gmail.com>
 
-2011-11-08  Nick Clifton  <nickc at redhat.com>
+	* elf64-ppc.c (ppc64_elf_func_desc_adjust): Don't emit out-of-line
+	save/restore functions when relocatable.  Make "funcs" static.
 
-	* elf-m10300.c (mn10300_elf_relax_section): Fix check for an
-	immediate move into an address register.
+2012-06-18  Hans-Peter Nilsson  <hp at axis.com>
 
-2011-11-09  Alan Modra  <amodra at gmail.com>
+	* elf32-cris.c (cris_elf_plt_sym_val): Rewrite to work in presence
+	of merged .got and .got.plt entries.
 
-	* elflink.c (bfd_elf_gc_mark_dynamic_ref_symbol): Mark syms in
-	executables when export_dynamic.
+2012-06-18  John Szakmeister  <john at szakmeister.net>
 
-2011-11-08  Alan Modra  <amodra at gmail.com>
+	* elf32-arm.c (elf32_arm_final_link_relocate): Correct return value.
 
-	* elf64-ppc.c (struct ppc64_elf_obj_tdata): Rename
-	ha_relocs_not_using_r2 to unexpected_toc_insn.
-	(ok_lo_toc_insn): New function.
-	(ppc64_elf_edit_toc): Check insn on lo toc reloc.  Emit warning.
-	(ppc64_elf_relocate_section): Don't check insn on lo toc reloc here.
-	Handle addic on lo toc reloc.
+2012-06-17  Hans-Peter Nilsson  <hp at axis.com>
 
-2011-11-06  John David Anglin  <dave.anglin at nrc-cnrc.gc.ca>
+	* elf32-cris.c (cris_elf_relocate_section): <R_CRIS_32_IE>
+	<R_CRIS_32_GOT_TPREL, R_CRIS_16_GOT_TPREL>: Handle references to
+	thread common symbols.
 
-	PR ld/13387
-	* elf32-hppa.c (elf32_hppa_hide_symbol): Make STT_GNU_IFUNC symbol
-	go through PLT.  Reset plt field with init_plt_offset.
-	(elf32_hppa_adjust_dynamic_symbol): Ensure that a PLT slot is
-	allocated for symbols referenced by a plabel.
+2012-06-13  Nick Clifton  <nickc at redhat.com>
 
-2011-11-02  DJ Delorie  <dj at redhat.com>
+	* elf32-arm.c (bfd_arm_get_mach_from_attributes): New function.
+	(elf32_arm_object_p): If the machine number could not be deduced
+	from the notes, call bfd_arm_get_mach_from_attributes to get the
+	number from the attributes.
 
-	* elf32-rl78.c (rl78_elf_merge_private_bfd_data): Delete unused
-	variable.
+2012-06-12  H.J. Lu  <hongjiu.lu at intel.com>
 
-2011-11-02  Jan Beulich  <jbeulich at suse.com>
+	PR bfd/14207
+	* elf.c (assign_file_positions_for_non_load_sections): Abort if
+	PT_GNU_RELRO segment doesn't fit in PT_LOAD segment.
 
-	* coffgen.c (coff_write_alien_symbol): Make public. Add 'struct
-	internal_syment *' parameter. Extend 'dummy' to an array with two
-	elements. Set n_numaux early. Handle BSF_FILE.
-	(coff_write_symbols): Pass NULL as new third argument to
-	coff_write_alien_symbol().
-	* cofflink.c (_bfd_coff_final_link): Don't use COFF-specific
-	obj_raw_syment_count() on non-COFF input BFD. Insert local symbols
-	from non-COFF input BFDs.
-	* libcoff-in.h (coff_write_alien_symbol): Declare.
-	* libcoff.h (coff_write_alien_symbol): Re-generate.
+2012-06-12  Alan Modra  <amodra at gmail.com>
 
-2011-11-01  DJ Delorie  <dj at redhat.com>
-
-	* Makefile.am (ALL_MACHINES): Add cpu-rl78.lo.
-	(ALL_MACHINES_CFILES): Add cpu-rl78.c.
-	(BFD32_BACKENDS): Add elf32-rl78.lo.
-	(BFD32_BACKENDS_CFILES): Add elf32-rl78.c.
-	(Makefile.in): Regenerate.
-	* archures.c (bfd_architecture): Define bfd_arch_rl78.
-	(bfd_archures_list): Add bfd_rl78_arch.
-	* config.bfd: Add rl78-*-elf.
-	* configure.in: Add bfd_elf32_rl78_vec.
-	* reloc.c (bfd_reloc_code_type): Add BFD_RELOC_RL78_* relocations.
-	* targets.c (bfd_target_vector): Add bfd_elf32_rl78_vec.
-	* Makefile.in: Regenerate.
-	* bfd-in2.h: Regenerate.
-	* configure: Regenerate.
-	* libbfd.h: Regenerate.
-	* cpu-rl78.c: New file.
-	* elf32-rl78.c: New file.
-
-2011-10-26  Nick Clifton  <nickc at redhat.com>
-
-	PR ld/13049
-	* elf64-ppc.c (STUB_SUFFIX): Revert previous delta.
-	* elf32-hppa.c (STUB_SUFFIX): Likewise.
-
-2011-10-25  Joern Rennecke  <joern.rennecke at embecosm.com>
-
-	* Makefile.am (ALL_MACHINES): Add cpu-epiphany.lo.
-	(ALL_MACHINES_CFILES): Add cpu-epiphany.c.
-	(BFD32_BACKENDS): Add elf32-epiphany.lo.
-	(BFD32_BACKENDS_CFILES): Add elf32-epiphany.c.
-	* archures.c (bfd_arch_epiphany): Add.
-	(bfd_mach_epiphany16, bfd_mach_epiphany32): Define.
-	(bfd_epiphany_arch): Declare.
-	(bfd_archures_list): Add &bfd_epiphany_arch.
-	* config.bfd (epiphany-*-elf): New target case.
-	* configure.in (bfd_elf32_epiphany_vec): New target vector case.
-	* reloc.c (BFD_RELOC_EPIPHANY_SIMM8): New relocation.
-	(BFD_RELOC_EPIPHANY_SIMM24, BFD_RELOC_EPIPHANY_HIGH): Likewise.
-	(BFD_RELOC_EPIPHANY_LOW, BFD_RELOC_EPIPHANY_SIMM11): Likewise.
-	(BFD_RELOC_EPIPHANY_IMM11, BFD_RELOC_EPIPHANY_IMM8): Likewise.
-	* targets.c (bfd_elf32_epiphany_vec): Declare.
-	(_bfd_target_vector): Add bfd_elf32_epiphany_vec.
-	* Makefile.in: Regenerate.
-	* bfd-in2.h: Regenerate.
-	* configure: Regenerate.
-	* libbfd.h: Regenerate.
-	* po/SRC-POTFILES.in: Regenerate.
-	* po/bfd.pot: Regenerate.
-	* cpu-epiphany.c: New file.
-	* elf32-epiphany.c: New file.
+	PR ld/14207
+	* elf.c (_bfd_elf_map_sections_to_segments): Disregard bss type
+	sections at end of PT_LOAD segment when searching for segment
+	that contains end of relro extent.
 
-2011-10-24  Maciej W. Rozycki  <macro at codesourcery.com>
+2012-06-11  H.J. Lu  <hongjiu.lu at intel.com>
 
-	* elfxx-mips.c (_bfd_mips_elf_symbol_processing): Remove
-	assertions.
+	* elf.c (assign_file_positions_for_non_load_sections): Reindent.
 
-2011-10-24  Eugeniy Meshcheryakov  <eugen at debian.org>
+2012-06-11  H.J. Lu  <hongjiu.lu at intel.com>
 
-	PR ld/13273
-	* elf32-arm.c (elf32_arm_merge_eabi_attributes): Do not warn about
-	identical TAG_PCS_config attributes.
+	* elf.c (_bfd_elf_map_sections_to_segments): Reindent.
 
-2011-10-24  Nick Clifton  <nickc at redhat.com>
+2012-06-06  Alan Modra  <amodra at gmail.com>
 
-	* po/ja.po: Updated Japanese translation.
+	* elflink.c (elf_link_input_bfd): Provide a file symbol for
+	each input file with local syms, if the input lacks such.
+	(bfd_elf_final_link): Add a file symbol to mark end of locals
+	for which we can associate with input files.
+	(struct elf_final_link_info): Add filesym_count field.
+	(struct elf_outext_info): Add need_second_pass and second_pass.
+	(elf_link_output_extsym): Detect symbols defined in the output
+	file, emit them on second pass over locals.
 
-2011-10-24  Pau Garcia i Quiles  <pgquiles at elpauer.org>
+2012-06-04  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	PR binutils/13292
-	* bfd-in.h: Include <sys/stat.h> rather than forward defining
-	struct stat.
+	* bfd-in.h (bfd_elf_bfd_from_remote_memory): Make LEN argument
+	of target_read_memory as bfd_size_type.
 	* bfd-in2.h: Regenerate.
+	* elf-bfd.h (elf_backend_bfd_from_remote_memory): Make LEN
+	argument of target_read_memory as bfd_size_type.
+	(_bfd_elf32_bfd_from_remote_memory): Likewise.
+	(_bfd_elf64_bfd_from_remote_memory): Likewise.
+	* elf.c (bfd_elf_bfd_from_remote_memory): Likewise.
+	* elfcode.h (NAME(_bfd_elf,bfd_from_remote_memory)): Likewise.
+
+2012-06-03  Alan Modra  <amodra at gmail.com>
+
+	PR binutils/13897
+	* elf.c (elf_find_function): Cache last function sym info.
+	(_bfd_elf_maybe_function_sym): Return function size, pass in
+	section of interest.
+	* elf-bfd.h (struct elf_backend_data <maybe_function_sym>): Likewise.
+	(_bfd_elf_maybe_function_sym): Likewise.
+	* elf64-ppc.c (ppc64_elf_maybe_function_sym): Likewise.
+	(opd_entry_value): Add in_code_sec param.  Revert caching code.
+	Return -1 if in_code_sec and function found in wrong section.
+	Update all calls.
+
+2012-06-01  Siddhesh Poyarekar  <siddhesh at redhat.com>
+
+	* bfd-in.h (bfd_elf_bfd_from_remote_memory): Make LEN argument
+	of target_read_memory as size_t.
+	* bfd-in2.h: Regenerate.
+	* elf-bfd.h (elf_backend_bfd_from_remote_memory): Make LEN
+	argument of target_read_memory as size_t.
+	(_bfd_elf32_bfd_from_remote_memory): Likewise.
+	(_bfd_elf64_bfd_from_remote_memory): Likewise.
+	* elf.c (bfd_elf_bfd_from_remote_memory): Likewise.
+	* elfcode.h (NAME(_bfd_elf,bfd_from_remote_memory)): Likewise.
 
-2011-10-21  H.J. Lu  <hongjiu.lu at intel.com>
-
-	PR ld/13302
-	* elf32-i386.c (elf_i386_relocate_section): Replace
-	R_386_IRELATIVE with R_386_RELATIVE.
-
-	* elf64-x86-64.c (elf_x86_64_relocate_section): Replace
-	R_X86_64_IRELATIVE with R_X86_64_RELATIVE.
-
-2011-10-21  H.J. Lu  <hongjiu.lu at intel.com>.
-
-	* elf32-i386.c (elf_i386_relocate_section): Fix a typo in
-	comments.
-	* elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
-
-2011-10-21  H.J. Lu  <hongjiu.lu at intel.com>
-
-	PR ld/13302
-	* elf32-i386.c (elf_i386_link_hash_table): Add next_jump_slot_index
-	and next_irelative_index.
-	(elf_i386_link_hash_table_create): Initialize next_jump_slot_index
-	and next_irelative_index.
-	(elf_i386_allocate_dynrelocs): Increment reloc_count instead of
-	next_tls_desc_index.
-	(elf_i386_size_dynamic_sections): Set next_tls_desc_index and
-	next_irelative_index from reloc_count.
-	(elf_i386_finish_dynamic_symbol): Put R_386_IRELATIVE after
-	R_386_JUMP_SLOT.
-
-	* elf64-x86-64.c (elf_x86_64_link_hash_table): Add
-	next_jump_slot_index and next_irelative_index.
-	(elf_x86_64_link_hash_table_create): Initialize
-	next_jump_slot_index and next_irelative_index.
-	(elf_x86_64_size_dynamic_sections): Set next_irelative_index
-	from reloc_count.
-	(elf_x86_64_finish_dynamic_symbol): Put R_X86_64_IRELATIVE after
-	R_X86_64_JUMP_SLOT.
-
-2011-10-20  Nick Clifton  <nickc at redhat.com>
-
-	PR ld/13049
-	* elf32-arm.c (STUB_SUFFIX): Avoid collision with user namespace
-	symbol names.
-	* elf64-ppc.c (STUB_SUFFIX): Likewise.
-	* elf32-hppa.c (STUB_SUFFIX): Likewise.
-
-2011-10-20  Alan Modra  <amodra at gmail.com>
-
-	* elf32-i386.c (i386_opcode16): Delete.
-	(elf_i386_check_tls_transition): Use memcmp to compare contents.
-	* elf64-x86-64.c (x86_64_opcode16, x86_64_opcode32): Delete.
-	(elf_x86_64_check_tls_transition): Use memcmp to compare contents.
-
-2011-10-19  Alan Modra  <amodra at gmail.com>
-
-	PR ld/13177
-	* elflink.c (_bfd_elf_gc_mark_rsec): Set symbol "mark".
-	(elf_gc_sweep_symbol): Don't test plt/got refcounts, instead test
-	"mark".  Hide undefweak too.  Clear def_regular and ref_regular.
-	* elf-m10300.c (mn10300_elf_relocate_section): Ignore unresolved
-	reloc errors from garbage-collected code.
-	* elf32-arm.c (elf32_arm_relocate_section): Likewise.
-	* elf32-bfin.c (bfin_relocate_section): Likewise.
-	(bfinfdpic_relocate_section): Likewise.
-	* elf32-cris.c (cris_elf_relocate_section): Likewise.
-	* elf32-frv.c (elf32_frv_relocate_section): Likewise.
-	* elf32-i386.c (elf_i386_relocate_section): Likewise.
-	* elf32-m32r.c (m32r_elf_relocate_section): Likewise.
-	* elf32-m68k.c (elf_m68k_relocate_section): Likewise.
-	* elf32-ppc.c (ppc_elf_relocate_section): Likewise.
-	* elf32-s390.c (elf_s390_relocate_section): Likewise.
-	* elf32-sh.c (sh_elf_relocate_section): Likewise.
-	* elf32-spu.c (spu_elf_relocate_section): Likewise.
-	* elf32-tilepro.c (tilepro_elf_relocate_section): Likewise.
-	* elf32-xtensa.c (elf_xtensa_relocate_section): Likewise.
-	* elf64-alpha.c (elf64_alpha_relocate_section): Likewise.
-	* elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
-	* elf64-s390.c (elf_s390_relocate_section): Likewise.
-	* elf64-sh64.c (sh_elf64_relocate_section): Likewise.
-	* elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
-	* elfxx-sparc.c (_bfd_sparc_elf_relocate_section): Likewise.
-	* elfxx-tilegx.c (tilegx_elf_relocate_section): Likewise.
-
-2011-10-19  Alan Modra  <amodra at gmail.com>
-
-	PR ld/13311
-	* elflink.c (elf_link_output_extsym): Correct test for warning when
-	forced local executable syms are referenced from shared libraries.
-
-2011-10-19  Alan Modra  <amodra at gmail.com>
-
-	PR ld/13254
-	* elflink.c (bfd_elf_final_link): Emit error_textrel error.
+2012-06-01  Alan Modra  <amodra at gmail.com>
+
+	PR binutils/13897
+	* elf64-ppc.c (opd_entry_value): Rewrite cache code.
+
+2012-05-29  Tom Tromey  <tromey at redhat.com>
+
+	* opncls.c (bfd_fopen): Always close fd on failure.
+	(bfd_fdopenr): Likewise.
+
+2012-05-27  Alan Modra  <amodra at gmail.com>
+
+	PR ld/14170
+	* elflink.c (_bfd_elf_merge_symbol): When a symbol defined in
+	a dynamic library finds a new instance with non-default
+	visibility in a regular object, correctly handle symbols
+	already on the undefs list and undo dynamic symbol state when
+	the new symbol is hidden or internal.
+
+2012-05-25  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf32-i386.c (elf_i386_create_dynamic_sections): Don't use
+	dynamic_sec_flags to create PLT .eh_frame section.
+	* elf64-x86-64.c (elf_x86_64_create_dynamic_sections): Likewise.
+
+2012-05-25  Alan Modra  <amodra at gmail.com>
+
+	PR ld/13909
+	* elf-eh-frame.c (_bfd_elf_eh_frame_present): New function.
+	(_bfd_elf_maybe_strip_eh_frame_hdr): Use it here.
+	* elf-bfd.h (_bfd_elf_eh_frame_present): Declare.
+	* elflink.c (bfd_elf_size_dynamic_sections): Let the backend
+	size dynamic sections before stripping eh_frame_hdr.
+	(bfd_elf_gc_sections): Handle multiple .eh_frame sections.
+	* elf32-ppc.c (ppc_elf_size_dynamic_sections): Drop glink_eh_frame
+	if no other .eh_frame sections exist.
+	* elf64-ppc.c (ppc64_elf_size_stubs): Likewise.
+	* elf32-i386.c (elf_i386_create_dynamic_sections): Don't size
+	or alloc plt_eh_frame here..
+	(elf_i386_size_dynamic_sections): ..do it here instead.  Don't
+	specially keep sgotplt, iplt, tgotplt, sdynbss for symbols.
+	(elf_i386_finish_dynamic_sections): Check plt_eh_frame->contents
+	before writing plt offset.
+	* elf64-x86-64.c (elf_x86_64_create_dynamic_sections): Don't size
+	or alloc plt_eh_frame here..
+	(elf_x86_64_size_dynamic_sections): ..do it here instead.
+	(elf_x86_64_finish_dynamic_sections): Check plt_eh_frame->contents
+	before writing plt offset.
+
+2012-05-24  Alan Modra  <amodra at gmail.com>
+
+	PR ld/14158
+	* elf64-ppc.c (ppc64_elf_size_stubs): Round up glink_eh_frame
+	size to output section alignment.
+	(ppc64_elf_build_stubs): Likewise, and extend last FDE to cover.
+
+2012-05-23  Alan Modra  <amodra at gmail.com>
+
+	* elf-eh-frame.c (_bfd_elf_maybe_strip_eh_frame_hdr): Handle
+        BFDs with multiple .eh_frame sections.
+
+2012-05-23  Alan Modra  <amodra at gmail.com>
+
+	PR ld/13909
+	* elflink.c (bfd_elf_discard_info): Don't ignore dynamic BFDs.
+
+2012-05-22  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/13909
+	* elf32-i386.c (elf_i386_create_dynamic_sections): Revert the
+	last change.
+	* elf64-x86-64.c (elf_x86_64_create_dynamic_sections): Likewise.
+
+2012-05-22  Alan Modra  <amodra at gmail.com>
+
+	* elflink.c (bfd_elf_discard_info): Look for next .eh_frame if
+	first one is zero size or discarded.
+	* elf32-ppc.c (ppc_elf_size_dynamic_sections): Set most of
+	glink_eh_frame contents here..
+	(ppc_elf_finish_dynamic_sections): ..rather than here.  Just set
+	offset to .glink.
+
+2012-05-22  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/13909
+	* elf32-i386.c (elf_i386_create_dynamic_sections): Create PLT
+	eh_frame section if there is an input .eh_frame section.
+	* elf64-x86-64.c (elf_x86_64_create_dynamic_sections): Likewise.
+
+2012-05-22  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/14105
+	* elf32-i386.c (elf_i386_create_dynamic_sections): Always
+	create PLT eh_frame section with SEC_LINKER_CREATED.
+	* elf64-x86-64.c (elf_x86_64_create_dynamic_sections): Likewise.
 
-2011-10-18  David S. Miller  <davem at davemloft.net>
+2012-05-22  Alan Modra  <amodra at gmail.com>
 
-	PR binutils/13301
-	* elfxx-sparc.c (sparc_elf_find_reloc_at_ofs): New function.
-	(_bfd_sparc_elf_relocate_section): Always move the __tls_get_addr
-	call delay slot instruction forward 4 bytes when performing
-	relaxation.
+	* elflink.c (bfd_elf_discard_info): Handle multiple .eh_frame
+	sections attached to a BFD.
+	* section.c (bfd_get_section_by_name): Rewrite description.
+	(bfd_get_next_section_by_name): New function.
+	* bfd-in2.h: Regenerate.
 
-2011-10-17  Alan Modra  <amodra at gmail.com>
+2012-05-21  Andreas Schwab  <schwab at linux-m68k.org>
 
-	PR ld/12975
-	PR ld/13195
-	* elf64-ppc.c (ppc64_elf_gc_mark_dynamic_ref): Apply 2011-09-15
-	and 2011-09-29 bfd_elf_gc_mark_dynamic_ref_symbol changes here too.
+	* elf32-m68k.c (elf_m68k_grok_prstatus): New function.
+	(elf_m68k_grok_psinfo): New function.
+	(elf_backend_grok_prstatus): Define.
+	(elf_backend_grok_psinfo): Define.
 
-2011-10-14  Hans-Peter Nilsson  <hp at axis.com>
+2012-05-19  Maciej W. Rozycki  <macro at linux-mips.org>
 
-	* elf32-cris.c (cris_elf_gc_sweep_hook) <R_CRIS_16_GOTPLT>
-	<R_CRIS_32_GOTPLT>: Fix missing update of gotplt refcount for
-	global symbols.
-	<R_CRIS_8, R_CRIS_16, R_CRIS_32>: New cases for similar missing
-	updates of the plt refcount.
-	(elf_cris_adjust_gotplt_to_got): Assert integrity of the gotplt
-	refcount in relation to the plt refcount.
+	* elf64-mips.c (elf_backend_got_header_size): Correct definition.
+	* elfxx-mips.c (_bfd_mips_elf_adjust_dynamic_symbol): Use the ELF
+	backend's GOT header size instead of hardcoding it.
 
-2011-10-13  Richard Sandiford  <richard.sandiford at linaro.org>
+2012-05-19  Maciej W. Rozycki  <macro at linux-mips.org>
 
-	* elf32-arm.c (elf32_arm_final_link_relocate): Mark PLT calls via
-	stubs as resolved.
+	* elf32-vax.c (elf_vax_relocate_section)
+	<R_VAX_8, R_VAX_16, R_VAX_32>: Don't check if info->shared again.
 
-2011-10-11  Alan Modra  <amodra at gmail.com>
+2012-05-19  Maciej W. Rozycki  <macro at linux-mips.org>
 
-	PR binutils/13278
-	* archive.c (bfd_generic_archive_p): Only check first element
-	when target_defaulted.
-	(_bfd_construct_extended_name_table): Use ar_maxnamelen.
-	(_bfd_archive_bsd44_construct_extended_name_table): Likewise.
+	* elf32-vax.c (elf_vax_relocate_section)
+	<R_VAX_8, R_VAX_16, R_VAX_32>: Use section flags rather than
+	its name as the check for text sections.
 
-2011-10-11  Alan Modra  <amodra at gmail.com>
+2012-05-19  Maciej W. Rozycki  <macro at linux-mips.org>
 
-	PR binutils/13257
-	* archive.c (_bfd_find_nested_archive, _bfd_get_elt_at_filepos): Open
-	thin archive element using container target if not defaulted.
+	* elf64-mips.c (mips_elf64_be_swap_reloc_out): Also make sure
+	the third reloc offset is the same as the first.
 
-2011-10-10  Nick Clifton  <nickc at redhat.com>
+2012-05-19  Alan Modra  <amodra at gmail.com>
 
-	* po/es.po: Updated Spanish translation.
-	* po/fi.po: Updated Finnish translation.
-	* po/fr.po: Updated French translation.
-	* po/ru.po: Updated Russian translation.
+	* elf32-ppc.h (has_vle_insns, is_ppc_vle): Delete.
+	(has_tls_reloc, has_tls_get_addr_call): Move back to..
+	* elf32-ppc.c: ..here.
+	(ppc_elf_section_flags, elf_backend_section_flags): Delete.
+	(ppc_elf_modify_segment_map): Use ELF sh_flags to detect VLE sections.
 
-2011-10-10  Alan Modra  <amodra at gmail.com>
+2012-05-18  H.J. Lu  <hongjiu.lu at intel.com>
 
-	* elf64-ppc.c (ppc64_elf_howto_table): Add R_PPC64_TOCSAVE entry.
-	(struct ppc_link_hash_table): Add tocsave_htab.
-	(struct tocsave_entry): New.
-	(tocsave_htab_hash, tocsave_htab_eq, tocsave_find): New functions.
-	(ppc64_elf_link_hash_table_create): Create tocsave_htab..
-	(ppc64_elf_link_hash_table_free): ..and delete it.
-	(build_plt_stub): Always put STD_R2_40R1 first.
-	(ppc64_elf_size_stubs): Check for R_PPC64_TOCSAVE following reloc
-	on plt call.  If present add prologue nop location to tocsave_htab.
-	(ppc64_elf_relocate_section): Convert prologue nop to std.  Skip
-	first insn of plt call stub when R_PPC64_TOCSAVE present.
+	* elf32-i386.c (elf_i386_finish_dynamic_symbol): Don't make
+	_DYNAMIC nor _GLOBAL_OFFSET_TABLE_ absolute.
+	* elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Likewise.
 
-2011-10-08  H.J. Lu  <hongjiu.lu at intel.com>
+2012-05-18  Roland McGrath  <mcgrathr at google.com>
 
-	PR ld/13250
-	* elflink.c (elf_link_add_object_symbols): Preserve the maximum
-	alignment and size for common symbols.
+	* archive.c (_bfd_generic_read_ar_hdr_mag): Fix last change so as
+	not to clobber the ar_fmag field stored in ARED->arch_header.
 
-2011-10-08  Alan Modra  <amodra at gmail.com>
+2012-05-18  Pedro Alves  <palves at redhat.com>
 
-	PR ld/13229
-	PR ld/13244
-	* elflink.c (elf_link_add_object_symbols): Don't make IR symbols
-	dynamic.
+	* mach-o.h: Don't include sysdep.h.
 
-2011-10-08  Alan Modra  <amodra at gmail.com>
+2012-05-18  Nick Clifton  <nickc at redhat.com>
 
-	PR ld/13229
-	* elflink.c (elf_link_output_extsym): Strip defined plugin symbols
-	even when strip_discarded is false.
+	PR 14072
+	* bfd-in.h: Check for PACKAGE or PACKAGE_VERSION before
+	complaining about config.h not having been included.
+	* bfd-in2.h: Regenerate.
 
-2011-10-05  Kai Tietz  <ktietz at redhat.com>
+2012-05-18  Andreas Schwab  <schwab at linux-m68k.org>
 
-	* coffgen.c (coff_write_alien_symbol): Don't write
-	symbol for discarded sections, if strip_discarded isn't
-	explicit set to false.
-	(coff_write_native_symbol): Likewise.
+	* aclocal.m4: Regenerate.
+	* Makefile.in: Regenerate.
 
-2011-10-05  DJ Delorie  <dj at redhat.com>
+2012-05-17  Daniel Richard G.  <skunk at iskunk.org>
 	    Nick Clifton  <nickc at redhat.com>
 
-	* elf32-rx.c: Add support for PID mode.
-	(rx_elf_relocate_section): Add checks for unsafe PID relocations.
-	Include addend in R_RX_SYM relocations.
-
-2011-09-30  Tristan Gingold  <gingold at adacore.com>
-
-	* dwarf2.c (struct dwarf2_debug): Add field debug_sections.
-	(read_section): Add sec argument. Adjust the code to get section
-	names from it.
-	(read_indirect_string): Adjust call to read_section.
-	(read_abbrevs): Ditto.
-	(decode_line_info): Ditto.
-	(read_debug_ranges): Ditto.
-	(DWARF2_DEBUG_INFO, DWARF2_COMPRESSED_DEBUG_INFO): Remove.
-	(find_debug_info): Add debug_sections parameter.  Use it instead
-	the above macros.
-	(place_sections): Get section names from stash.
-	(find_line): Add debug_sections argument.  Initialize
-	debug_sections field of stash from it.
-	Adjust calls to find_debug_info.
-	(_bfd_dwarf2_find_nearest_line): Add debug_sections argument.
-	Adjust call to find_line.
-	(_bfd_dwarf2_find_line): Adjust call to find_line.
-	* libcoff-in.h (struct dwarf_debug_section): New declaration.
-	(coff_find_nearest_line_with_names): Likewise.
-	* libcoff.h: Regenerate.
-	* libbfd-in.h (struct dwarf_debug_section): Move declaration.
-	(dwarf_debug_sections): Likewise.
-	(_bfd_dwarf2_find_nearest_line): Add debug_sections argument.
-	* libbfd.h: Regenerate.
-	* elf.c (_bfd_elf_find_nearest_line): Adjust call to
-	_bfd_dwarf2_find_nearest_line.
-	* elfxx-mips.c (_bfd_mips_elf_find_nearest_line): Ditto.
-	* elf64-alpha.c (elf64_alpha_find_nearest_line): Ditto.
-	* elf32-arm.c (elf32_arm_find_nearest_line): Ditto.
-	* coffgen.c (coff_find_nearest_line_with_names): New function.
-	(coff_find_nearest_line): Calls coff_find_nearest_line_with_names.
-	* coff-rs6000.c (xcoff_debug_sections): New constant.
-	(xcoff_find_nearest_line): New function.
-	(rs6000coff_vec): Use xcoff_find_nearest_line.
-	(pmac_xcoff_vec): Ditto.
-
-2011-09-30  Alan Modra  <amodra at gmail.com>
-
-	PR ld/13235
-	* elf64-ppc.c (struct ppc64_elf_obj_tdata): Add ha_relocs_not_using_r2.
-	(ppc64_elf_edit_toc): Check HA relocs.
-	(ha_reloc_match): Delete function.
-	(ppc64_elf_relocate_section): Remove delayed HA nop optimization.
-	Instead do it and low part optimization based on
-	ha_relocs_not_using_r2.
-
-2011-09-29  Alan Modra  <amodra at gmail.com>
-
-	PR ld/13233
-	* elflink.c (_bfd_elf_gc_mark_extra_sections): Mark single member
-	debug and special section groups.
-
-2011-09-29  H.J. Lu  <hongjiu.lu at intel.com>
-
-	PR ld/13195
-	* elflink.c (_bfd_elf_merge_symbol): Don't set dynamic_def when
-	clearing def_dynamic.
-	(elf_link_add_object_symbols): Likewise.  Set dynamic_def when
-	setting def_dynamic.
-	(bfd_elf_gc_mark_dynamic_ref_symbol): Check if a symbol is
-	versioned.
-
-2011-09-27  Kai Tietz  <ktietz at redhat.com>
-
-	* coffcode.h (sec_to_styp_flags): Handle
-	SEC_LINK_DUPLICATES_SAME_CONTENTS, and
-	SEC_LINK_DUPLICATES_SAME_SIZE.
-
-2011-09-22  Tristan Gingold  <gingold at adacore.com>
-
-	* configure.in: Bump version to 2.22.51
+	PR 14072
+	* configure.in: Add check that sysdep.h has been included before
+	any system header files.
 	* configure: Regenerate.
+	* config.in: Regenerate.
+	* aclocal.m4: Regenerate.
+	* bfd-in.h: Generate an error if included before config.h.
+	* sysdep.h: Likewise.
+	* bfd-in2.h: Regenerate.
+	* compress.c: Remove #include "config.h".
+	* plugin.c: Likewise.
+	* elf32-m68hc1x.c: Include sysdep.h before alloca-conf.h.
+	* elf64-hppa.c: Likewise.
+	* som.c: Likewise.
+	* xsymc.c: Likewise.
 
-2011-09-21  David S. Miller  <davem at davemloft.net>
-
-	* elfxx-sparc.c (_bfd_sparc_elf_merge_private_bfd_data): New.
-	* elfxx-sparc.h: Declare it.
-	* elf32-sparc.c (elf32_sparc_merge_private_bfd_data): Call it.
-	* elf64-sparc.c (elf64_sparc_merge_private_bfd_data): Likewise.
-
-2011-09-21  Tristan Gingold  <gingold at adacore.com>
-
-	* mach-o.c (bfd_mach_o_convert_section_name_to_bfd): Add comment.
-	Deals with size limited strings.
-	(bfd_mach_o_build_commands): Initialize more fields.
-
-2011-09-15  H.J. Lu  <hongjiu.lu at intel.com>
-
-	PR ld/13177
-	* elflink.c (elf_gc_sweep_symbol): Also hide symbols without PLT
-	nor GOT references.
-
-2011-09-15  H.J. Lu  <hongjiu.lu at intel.com>
-
-	PR ld/12975
-	* bfd-in.h (bfd_elf_size_dynamic_sections): Remove pointer
-	to struct bfd_elf_version_tree.
-
-	* elflink.c (elf_info_failed): Remove verdefs.
-	(_bfd_elf_export_symbol): Updated.
-	_bfd_elf_link_assign_sym_version): Likewise.
-	(bfd_elf_size_dynamic_sections): Remove pointer to struct
-	bfd_elf_version_tree.  Updated.
-	(bfd_elf_gc_mark_dynamic_ref_symbol): Check if a symbol is hidden
-	by linker script.
-
-	* linker.c (bfd_hide_sym_by_version): New.
-
-	* bfd-in2.h: Regenerated.
-
-2011-09-12  H.J. Lu  <hongjiu.lu at intel.com>
-
-	PR ld/13178
-	* elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Use .got.plt
-	if there are no GOT relocations.
-
-2011-09-09  Kai Tietz  <ktietz at redhat.com>
-
-	* peicode.h (pe_ILF_build_a_bfd): Don't remove leading underscore
-	for targets without symbol_leading_char.
-
-2011-09-08  Bernd Jendrissek  <bernd.jendrissek at gmail.com>
-
-	* bfdwin.c (bfd_get_file_window): Fix memory leak.
-
-2011-09-07  Alan Modra  <amodra at gmail.com>
-
-	PR ld/13131
-	* bfd/elf64-ppc.c (adjust_toc_syms): Ensure ppc64_elf_howto_table
-	is initialized.
-
-2011-09-06  Alan Modra  <amodra at gmail.com>
-
-	PR ld/13131
-	* elf64-ppc.c (adjust_toc_syms): Delete redundant code.
-	(ppc64_elf_edit_toc): Fix style nit.  Report some details
-	on linker failure due to reference in debug or non-alloc
-	sections to optimized away toc entry, and don't abort.
-
-2011-09-01  Christophe Lyon  <christophe.lyon at st.com>
-
-	* elf32-arm.c (elf32_arm_output_arch_local_syms): Skip excluded
-	sections.
-
-2011-08-26  Nick Clifton  <nickc at redhat.com>
-
-	* po/es.po: Updated Spanish translation.
-
-2011-08-19  Alan Modra  <amodra at gmail.com>
+2012-05-17  Maciej W. Rozycki  <macro at linux-mips.org>
+	    Alan Modra  <amodra at gmail.com>
 
-	* elf64-ppc.c (ppc64_elf_edit_toc): Ignore can_optimize bit if
-	we haven't seen expected -mcmodel=medium/large code relocs.
+	* elf.c (ignore_section_sym): Correct comment.  Don't return
+	true for absolute section.
+	(elf_map_symbols): Move stray comment.  Adjust for above change.
+	Don't discard global section symbols.
 
-2011-08-18  Tristan Gingold  <gingold at adacore.com>
+2012-05-17  Alan Modra  <amodra at gmail.com>
 
-	* mach-o.c (bfd_mach_o_read_segment): Initialize list.
+	* elf32-ppc.c (ppc_elf_finish_dynamic_symbol): Don't make _DYNAMIC,
+	_GLOBAL_OFFSET_TABLE_ or _PROCEDURE_LINKAGE_TABLE_ absolute.
+	* elf64-ppc.c (ppc64_elf_finish_dynamic_symbol): Don't make _DYNAMIC
+	absolute.
 
-2011-08-17  Tristan Gingold  <gingold at adacore.com>
+2012-05-17  Alan Modra  <amodra at gmail.com>
 
-	* mach-o.c (bfd_mach_o_write_section_32): Fix typo.
+	* elf32-ppc.c (has_tls_reloc, has_tls_get_addr_call, has_vle_insns,
+	is_ppc_vle): Move to..
+	* elf32-ppc.h: ..here, making is_ppc_vle a macro.
 
-2011-08-17  Alan Modra  <amodra at gmail.com>
+2012-05-16  Sergio Durigan Junior  <sergiodj at redhat.com>
 
-	PR ld/12762
-	* bfd-in.h (struct bfd_section_already_linked): Forward declare.
-	(_bfd_handle_already_linked): Declare.
-	* coff-alpha.c (_bfd_ecoff_section_already_linked): Define as
-	_bfd_coff_section_already_linked.
-	* coff-mips.c (_bfd_ecoff_section_already_linked): Likewise.
-	* coffcode.h (coff_section_already_linked): Likewise.
-	* cofflink.c (coff_link_add_symbols): Revert 2011-07-09 changes.
-	* elf-bfd.h: Likewise.
-	* libbfd-in.h: Likewise.
-	* targets.c: Likewise.
-	* linker.c (bfd_section_already_linked): Likewise.
-	(bfd_section_already_linked_table_lookup): Likewise.
-	(bfd_section_already_linked_table_insert): Likewise.
-	(_bfd_generic_section_already_linked): Likewise.  Call
-	_bfd_handle_already_linked.
-	(_bfd_handle_already_linked): New function, split out from..
-	* elflink.c (_bfd_elf_section_already_linked): ..here.  Revert
-	2011-07-09 changes.  Avoid unnecessary strcmp when matching
-	already_linked_list entries.  Match plugin linkonce section.
-	(section_signature): Delete.
-	* coffgen.c (_bfd_coff_section_already_linked): New function.
-	* libcoff-in.h (_bfd_coff_section_already_linked): Declare.
-	* libbfd.h: Regenerate.
-	* libcoff.h: Regenerate.
+	* bfd-in.h (bfd_get_section_name, bfd_get_section_vma,
+	bfd_get_section_lma, bfd_get_section_alignment,
+	bfd_get_section_flags, bfd_get_section_userdata): Rewrite macros
+	in order to use the `bfd' argument.
 	* bfd-in2.h: Regenerate.
-
-2011-08-14  Alan Modra  <amodra at gmail.com>
-
-	* elf32-ppc.c (ppc_elf_select_plt_layout): Force bss-plt when
-	shared and call to _mcount will go via plt.
-
-2011-08-14  Alan Modra  <amodra at gmail.com>
-
-	* elf64-ppc.c: Prefix all einfo error strings with "%P: ".
-	* elf32-ppc.c: Likewise.
-	(ppc_elf_select_plt_layout): Use einfo rather than info to report
-	forced bss-plt.
-
-2011-08-12  H.J. Lu  <hongjiu.lu at intel.com>
-
-	PR ld/13082
-	* elf64-x86-64.c (x86_64_elf_howto_table): Add R_X86_64_RELATIVE64.
-	(elf_x86_64_relocate_section): Treat R_X86_64_64 like R_X86_64_32
-	and zero-extend it to 64bit if addend is zero for x32.  Generate
-	R_X86_64_RELATIVE64 for x32.
-
-2011-08-09  Matthew Gretton-Dann  <matthew.gretton-dann at arm.com>
-
-	* bfd-in.h (bfd_elf32_arm_set_target_relocs): Update prototype.
-	* bfd-in2.h (bfd_elf32_arm_set_target_relocs): Likewise.
-	* elf32-arm.c (elf32_arm_link_hash_table): New field.
-	(elf232_arm_link_hash_table_create): Initialise new field.
-	(check_use_blx): Change test depending on fix_arm1176.
-	(bfd_elf32_arm_set_target_relocs): Set fix_arm1176 from
-	command line options.
-
-2011-08-08  Tristan Gingold  <gingold at adacore.com>
-
-	* mach-o.c (struct mach_o_segment_name_xlat): Add comments.
-	(segsec_names_xlat): Reorder elements.
-	(bfd_mach_o_read_section_32): Fix typo.
-	(bfd_mach_o_read_section_64): Fix typo.
-
-2011-08-08  Tristan Gingold  <gingold at adacore.com>
-
-	* mach-o.h (BFD_MACH_O_SEGNAME_SIZE): New macro.
-	(BFD_MACH_O_SECTNAME_SIZE): Ditto.
-	(bfd_mach_o_section): Use them.  Add next field.
-	(bfd_mach_o_segment_command): Replace sections array by
-	sect_head and sect_tail.
-	(bfd_mach_o_get_mach_o_section): New macro.
-	(bfd_mach_o_lookup_section): Remove.
-	(bfd_mach_o_new_section_hook): New function.
-	* mach-o.c (bfd_mach_o_normalize_section_name): Use strncmp
-	instead of strcmp.
-	(bfd_mach_o_convert_section_name_to_bfd): Replaces section
-	parameter with segname and sectname parameters.  Adjust.
-	(bfd_mach_o_append_section_to_segment): New function.  Use a
-	linked list for Mach-O sections.
-	(bfd_mach_o_write_segment_32): Adjust.
-	(bfd_mach_o_write_segment_64): Ditto.
-	(bfd_mach_o_build_commands): Fix comment.  Adjust.
-	(bfd_mach_o_flatten_sections): Adjust.
-	(bfd_mach_o_print_section_map): Adjust.
-	(bfd_mach_o_set_section_flags_from_bfd): Ditto.
-	(bfd_mach_o_new_section_hook): New function.
-	(bfd_mach_o_init_section_from_mach_o): Ditto.
-	(bfd_mach_o_read_section_32): Remove section parameter.
-	Return a section instead.
-	(bfd_mach_o_read_section_64): Ditto.
-	(bfd_mach_o_read_section): Ditto.
-	(bfd_mach_o_make_bfd_section): Adjust.
-	(bfd_mach_o_read_segment): Adjust for new profile of
-	bfd_mach_o_read_section.
-	(bfd_mach_o_lookup_section): Remove.
-	* mach-o-target.c (bfd_mach_o_new_section_hook): Remove.
-
-2011-08-08  Tristan Gingold  <gingold at adacore.com>
-
-	* mach-o.h (bfd_mach_o_version_min_command): New structure.
-	(bfd_mach_o_load_command): Add version_min.
-	(mach_o_data_struct): Fix comment.
-	* mach-o.c (bfd_mach_o_read_version_min): New function.
-	(bfd_mach_o_read_command): Handle BFD_MACH_O_LC_FUNCTION_STARTS,
-	BFD_MACH_O_LC_VERSION_MIN_MACOSX and
-	BFD_MACH_O_LC_VERSION_MIN_IPHONEOS.
-	(bfd_mach_o_get_name_or_null): New function.
-	(bfd_mach_o_get_name): Use the above new one.
-	(bfd_mach_o_load_command_name): Add the above new commands.
-	(bfd_mach_o_bfd_print_private_bfd_data): Display numerically
-	unknown commands.  Handle BFD_MACH_O_LC_FUNCTION_STARTS,
-	BFD_MACH_O_LC_VERSION_MIN_MACOSX and
-	BFD_MACH_O_LC_VERSION_MIN_IPHONEOS.
-
-2011-08-08  Tristan Gingold  <gingold at adacore.com>
-
-	* mach-o.h: Move size macros to external.h
-	Move reloc macros to reloc.h and x86-64.h.
-	* mach-o-i386.c: Includes mach-o/reloc.h
-	* mach-o-x86-64.c: Ditto and includes mach-o/x86-64.h
-	* mach-o.c: Add includes.
-	(bfd_mach_o_write_header): Use structure from external.h to convert.
-	(bfd_mach_o_write_thread): Ditto.
-	(bfd_mach_o_write_relocs): Ditto.
-	(bfd_mach_o_write_section_32): Ditto.
-	(bfd_mach_o_write_section_64): Ditto.
-	(bfd_mach_o_write_segment_32): Ditto.
-	(bfd_mach_o_write_segment_64): Ditto.
-	(bfd_mach_o_write_symtab): Ditto.
-	(bfd_mach_o_write_contents): Ditto.
-	(bfd_mach_o_read_header): Ditto.
-	(bfd_mach_o_read_section_32): Ditto.
-	(bfd_mach_o_read_section_64): Ditto.
-	(bfd_mach_o_read_symtab_symbol): Ditto.
-	(bfd_mach_o_read_dylinker): Ditto.
-	(bfd_mach_o_read_dylib): Ditto.
-	(bfd_mach_o_read_dysymtab): Ditto.
-	(bfd_mach_o_read_symtab): Ditto.
-	(bfd_mach_o_read_linkedit): Ditto.
-	(bfd_mach_o_read_str): Ditto.
-	(bfd_mach_o_read_dyld_info): Ditto.
-	(bfd_mach_o_read_segment): Ditto.
-	(bfd_mach_o_read_command): Ditto.
-	(bfd_mach_o_archive_p): Ditto.
-	(bfd_mach_o_canonicalize_one_reloc): Ditto. Change the BUF parameter.
-	(bfd_mach_o_canonicalize_relocs): Adjust to call the above function.
-	(bfd_mach_o_read_dysymtab_symbol): Rename BUF variable.
-	(bfd_mach_o_read_uuid): Remove useless cast.  Use a macro instead
-	of an hard-coded value.
-
-2011-08-08  Tristan Gingold  <gingold at adacore.com>
-
-	* mach-o-x86-64.c (bfd_mach_o_x86_64_mkobject): Fix cut-and-past typos.
-	(bfd_mach_o_x86_64_swap_reloc_out): Handle BFD_RELOC_32_PCREL,
-	BFD_RELOC_MACH_O_X86_64_SUBTRACTOR64 and
-	BFD_RELOC_MACH_O_X86_64_GOT_LOAD.  Share common code.
-
-2011-08-08  Tristan Gingold  <gingold at adacore.com>
-
-	* mach-o.c (bfd_mach_o_normalize_section_name): New function.
-	(bfd_mach_o_convert_section_name_to_bfd): Use it.
-	(bfd_mach_o_get_section_type_from_name): New function.
-	(bfd_mach_o_get_section_attribute_from_name): Ditto.
-	* mach-o.h (bfd_mach_o_section): Move bfdsection field at the end.
-	Add comments.  Add prototypes for the above new functions.
-
-2011-08-05  Mark Kettenis  <kettenis at gnu.org>
-
-	* netbsd-core.c (netbsd_core_vec): Init match_priority field.
-
-2011-08-05  Alan Modra  <amodra at gmail.com>
-
-	* elf64-ppc.c (maybe_strip_output): New function.
-	(ppc64_elf_size_stubs): Use it to strip .branch_lt and .eh_frame.
-
-2011-08-05  Alan Modra  <amodra at gmail.com>
-
-	PR ld/12762
-	* elflink.c (_bfd_elf_section_already_linked): Return matched
-	status.  Remove COFF comdat section handling.
-	* linker.c (_bfd_generic_section_already_linked): Return matched
-	status.  Don't set SEC_GROUP in l_flags for plugin entries.
-	(bfd_section_already_linked): Update prototype.
-	* targets.c (_section_already_linked): Likewise.
-	* elf-bfd.h (_bfd_elf_section_already_linked): Likewise.
-	* libbfd-in.h (_bfd_generic_section_already_linked): Likewise.
-	(_bfd_nolink_section_already_linked): Update.
-	* libbfd.h: Regenerate.
+	* elf-vxworks.c (elf_vxworks_finish_dynamic_entry): Pass proper `bfd'
+	as the first argument for `bfd_get_section_alignment'.
+	* elf32-arm.c (create_ifunc_sections): Likewise, for
+	`bfd_set_section_alignment'.
+	* elf32-m32r.c (m32r_elf_relocate_section): Likewise, for
+	`bfd_get_section_name'.
+	* elf32-microblaze.c (microblaze_elf_relocate_section): Likewise.
+	* elf32-ppc.c (ppc_elf_size_dynamic_sections): Likewise.
+	(ppc_elf_relocate_section): Likewise.
+	* elf64-mmix.c (mmix_final_link_relocate): Likewise, for
+	`bfd_get_section_vma'.
+	* elf64-ppc.c (create_linkage_sections): Likewise, for
+	`bfd_set_section_alignment'.
+
+2012-05-16  Georg-Johann Lay  <avr at gjlay.de>
+
+	PR target/13503
+	* reloc.c: Rename BFD_RELOC_AVR_8_HHI to BFD_RELOC_AVR_8_HLO.
 	* bfd-in2.h: Regenerate.
-
-2011-08-05  Alan Modra  <amodra at gmail.com>
-
-	* elf32-ppc.c: Include dwarf2.h.
-	(struct ppc_elf_link_hash_table): Add glink_eh_frame.
-	(ppc_elf_create_glink): Create .eh_frame section.
-	(glink_eh_frame_cie): New array.
-	(ppc_elf_size_dynamic_sections): Size glink_eh_frame.
-	(ppc_elf_finish_dynamic_sections): Write glink_eh_frame.
-
-2011-08-04  Tristan Gingold  <gingold at adacore.com>
-
-	* vms-alpha.c (_bfd_vms_write_eeom): Round vms_linkage_index.
-	(_bfd_vms_write_etir): Initialize vms_linkage_index to 0.
-
-2011-08-03  Tristan Gingold  <gingold at adacore.com>
-
-	* mach-o.c (bfd_mach_o_canonicalize_symtab): Handle no symbols case.
-	(bfd_mach_o_read_symtab_symbols): Return if no symbols.
-
-2011-08-02  Maciej W. Rozycki  <macro at codesourcery.com>
-
-	* elfxx-mips.c (check_4byte_branch): Remove function.
-	(check_relocated_bzc): New function.
-	(_bfd_mips_elf_relax_section): Permit the relaxation of LUI
-	instructions that immediately follow a compact branch
-	instruction.
-
-2011-08-02  Alan Modra  <amodra at gmail.com>
-
-	* elf64-ppc.c (build_plt_stub): Correct emitted relocs when no
-	plt_static_chain.
-	(ppc_build_one_stub): Adjust get_relocs call to suit..
-	(ppc_size_one_stub): ..and reloc sizing.  Correct plt size corner case.
-
-2011-08-01  H.J. Lu  <hongjiu.lu at intel.com>
-
-	PR ld/13048
-	* archures.c (bfd_mach_i386_intel_syntax): New.
-	(bfd_mach_i386_i8086): Updated.
-	(bfd_mach_i386_i386): Likewise.
-	(bfd_mach_x86_64): Likewise.
-	(bfd_mach_x64_32): Likewise.
-	(bfd_mach_i386_i386_intel_syntax): Likewise.
-	(bfd_mach_x86_64_intel_syntax): Likewise.
-	(bfd_mach_x64_32_intel_syntax): Likewise.
-	(bfd_mach_l1om): Likewise.
-	(bfd_mach_l1om_intel_syntax): Likewise.
-	(bfd_mach_k1om): Likewise.
-	(bfd_mach_k1om_intel_syntax): Likewise.
-
-	* bfd-in2.h: Regenerated.
-
-	* cpu-i386.c (bfd_i386_compatible): Check mach instead of
-	bits_per_address.
-	(bfd_x64_32_arch_intel_syntax): Set bits_per_address to 64.
-	(bfd_x64_32_arch): Likewise.
-
-	* elf64-x86-64.c: Include "libiberty.h".
-	(x86_64_elf_howto_table): Append x32 R_X86_64_32.
-	(elf_x86_64_rtype_to_howto): Support x32 R_X86_64_32.
-	(elf_x86_64_reloc_type_lookup): Likewise.
-	(elf_x86_64_reloc_name_lookup): Likewise.
-	(elf_x86_64_relocate_section): Likewise.
-	(elf_x86_64_check_relocs): Allow R_X86_64_64 relocations for x32.
-
-2011-07-29  Maciej W. Rozycki  <macro at codesourcery.com>
-
-	* elfxx-mips.c (check_br32): Fix return type.
-
-2011-07-29  Maciej W. Rozycki  <macro at codesourcery.com>
-
-	* elfxx-mips.c (bz_insn_16): Correct opcode mask.
-
-2011-07-29  Maciej W. Rozycki  <macro at codesourcery.com>
-
-	* elfxx-mips.c: Adjust comments throughout.
-	(mips_elf_relax_delete_bytes): Reshape code.
-	(_bfd_mips_elf_relax_section): Remove check for
-	R_MICROMIPS_GPREL16 relocations.  Reshape code.
-
-2011-07-28  Roland McGrath  <mcgrathr at google.com>
-
-	* elf32-i386.c (NACL_PLT_ENTRY_SIZE, NACLMASK): New macros.
-	(elf_i386_nacl_plt0_entry): New variable.
-	(elf_i386_plt_entry): New variable.
-	(elf_i386_nacl_pic_plt0_entry): New variable.
-	(elf_i386_nacl_pic_plt_entry): New variable.
-	(elf_i386_nacl_plt, elf_i386_nacl_arch_bed): New variables.
-	(elf_backend_arch_data): New macro setting for elf_i386_nacl_vec stanza.
-	(elf_backend_plt_alignment): Likewise.
-
-	* config.bfd: Handle i[3-7]86-*-nacl*.
-	* elf32-i386.c (bfd_elf32_i386_nacl_vec): New backend vector stanza.
-	* targets.c: Support bfd_elf32_i386_nacl_vec.
-	* configure.in: Likewise.
-	* configure: Regenerated.
-
-	* elf32-i386.c (struct elf_i386_plt_layout): New type.
-	(GET_PLT_ENTRY_SIZE): New macro.
-	(elf_i386_plt): New variable.
-	(struct elf_i386_backend_data): New member `plt'.
-	(elf_i386_arch_bed): Add initializer for it.
-	(elf_i386_vxworks_arch_bed): Likewise.
-	(elf_i386_allocate_dynrelocs): Use GET_PLT_ENTRY_SIZE.
-	(elf_i386_plt_sym_val): Likewise.
-	(elf_i386_relocate_section): Likewise.
-	(elf_i386_finish_dynamic_symbol): Likewise.
-	Also use other elf_i386_plt_layout members for PLT details.
-	(elf_i386_finish_dynamic_sections): Likewise.
-
-	* elf32-i386.c (struct elf_i386_backend_data): New type.
-	(get_elf_i386_backend_data): New macro.
-	(elf_i386_arch_bed): New variable.
-	(elf_backend_arch_data): New macro.
-	(struct elf_i386_link_hash_table): Remove plt0_pad_byte and is_vxworks.
-	(elf_i386_link_hash_table_create): Don't initialize them.
-	(elf_i386_create_dynamic_sections): Find is_vxworks flags in
-	elf_i386_backend_data, not elf_i386_link_hash_table.
-	(elf_i386_adjust_dynamic_symbol): Likewise.
-	(elf_i386_allocate_dynrelocs): Likewise.
-	(elf_i386_readonly_dynrelocs): Likewise.
-	(elf_i386_size_dynamic_sections): Likewise.
-	(elf_i386_relocate_section): Likewise.
-	(elf_i386_finish_dynamic_symbol): Likewise.
-	(elf_i386_finish_dynamic_sections): Likewise.  Same for plt0_pad_byte.
-	(elf_i386_vxworks_link_hash_table_create): Function removed.
-	(elf_i386_vxworks_arch_bed): New variable.
-	(elf_backend_arch_data): New macro in elf32-i386-vxworks stanza.
-
-	* elf-bfd.h (elf_backend_data): New member arch_backend_data.
-	* elfxx-target.h (elf_backend_arch_data): New macro.
-	(elfNN_bed): Use it as initializer for the new member.
-
-2011-07-28  Mikulas Patocka  <mikulas at artax.karlin.mff.cuni.cz>
-
-	* elf64-hppa.c (elf_hppa_final_link_relocate): Fix handling of out
-	of range branches.
-
-2011-07-26  Jakub Jelinek  <jakub at redhat.com>
-
-	* dwarf2.c (dwarf_debug_sections): Add .debug_macro
-	and .zdebug_macro entry.
-	(dwarf_debug_section_enum): Add debug_macro.
-
-2011-07-26  Alan Modra  <amodra at gmail.com>
-
-	* elf64-ppc.c: Include dwarf2.h.
-	(struct ppc_link_hash_table): Add glink_eh_frame.
-	(create_linkage_sections): Create .eh_frame section.
-	(ppc64_elf_size_dynamic_sections): Arrange to drop unneeded
-	glink_eh_frame.
-	(glink_eh_frame_cie): New array.
-	(ppc64_elf_size_stubs): Size glink_eh_frame.
-	(ppc64_elf_build_stubs): Init glink_eh_frame contents.
-	(ppc64_elf_finish_dynamic_sections): Write glink_eh_frame.
-
-2011-07-25  Hans-Peter Nilsson  <hp at bitrange.com>
-
-	PR ld/12815
-	* elf64-mmix.c (struct _mmix_elf_section_data): New members
-	has_warned_bpo and has_warned_pushj.
-	(mmix_final_link_relocate): Remove PARAMS and PTR macros,
-	converting to ISO C.  Add new parameter error_message.  All
-	callers changed.
-	(mmix_elf_perform_relocation): Ditto.
-	<case R_MMIX_PUSHJ_STUBBABLE, case R_MMIX_BASE_PLUS_OFFSET>:
-	Handle the case where mmix_elf_check_common_relocs has not been
-	called, missing preparations for relocs of the respective type.
-
-2011-07-24  Chao-ying Fu  <fu at mips.com>
-	    Ilie Garbacea  <ilie at mips.com>
-	    Maciej W. Rozycki  <macro at codesourcery.com>
-	    Joseph Myers  <joseph at codesourcery.com>
-	    Catherine Moore  <clm at codesourcery.com>
-	    Richard Sandiford  <rdsandiford at googlemail.com>
-
-	* archures.c (bfd_mach_mips_micromips): New macro.
-	* cpu-mips.c (I_micromips): New enum value.
-	(arch_info_struct): Add bfd_mach_mips_micromips.
-	* elfxx-mips.h (_bfd_mips_elf_is_target_special_symbol): New
-	prototype.
-	(_bfd_mips_elf_relax_section): Likewise.
-	(_bfd_mips16_elf_reloc_unshuffle): Rename to...
-	(_bfd_mips_elf_reloc_unshuffle): ... this.  Handle microMIPS
-	ASE.
-	(_bfd_mips16_elf_reloc_shuffle): Rename to...
-	(_bfd_mips_elf_reloc_shuffle): ... this.  Handle microMIPS ASE.
-	(gprel16_reloc_p): Handle microMIPS ASE.
-	(literal_reloc_p): New function.
-	* elf32-mips.c (elf_micromips_howto_table_rel): New variable.
-	(_bfd_mips_elf32_gprel16_reloc): Handle microMIPS ASE.
-	(mips16_gprel_reloc): Update for _bfd_mips_elf_reloc_unshuffle
-	and _bfd_mips_elf_reloc_shuffle changes.
-	(mips_elf_gprel32_reloc): Update comment.
-	(micromips_reloc_map): New variable.
-	(bfd_elf32_bfd_reloc_type_lookup): Handle microMIPS ASE.
-	(mips_elf32_rtype_to_howto): Likewise.
-	(mips_info_to_howto_rel): Likewise.
-	(bfd_elf32_bfd_is_target_special_symbol): Define.
-	(bfd_elf32_bfd_relax_section): Likewise.
-	* elf64-mips.c (micromips_elf64_howto_table_rel): New variable.
-	(micromips_elf64_howto_table_rela): Likewise.
-	(mips16_gprel_reloc): Update for _bfd_mips_elf_reloc_unshuffle
-	and _bfd_mips_elf_reloc_shuffle changes.
-	(micromips_reloc_map): Likewise.
-	(bfd_elf64_bfd_reloc_type_lookup): Handle microMIPS ASE.
-	(bfd_elf64_bfd_reloc_name_lookup): Likewise.
-	(mips_elf64_rtype_to_howto): Likewise.
-	(bfd_elf64_bfd_is_target_special_symbol): Define.
-	* elfn32-mips.c (elf_micromips_howto_table_rel): New variable.
-	(elf_micromips_howto_table_rela): Likewise.
-	(mips16_gprel_reloc): Update for _bfd_mips_elf_reloc_unshuffle
-	and _bfd_mips_elf_reloc_shuffle changes.
-	(micromips_reloc_map): Likewise.
-	(bfd_elf32_bfd_reloc_type_lookup): Handle microMIPS ASE.
-	(bfd_elf32_bfd_reloc_name_lookup): Likewise.
-	(mips_elf_n32_rtype_to_howto): Likewise.
-	(bfd_elf32_bfd_is_target_special_symbol): Define.
-	* elfxx-mips.c (LA25_LUI_MICROMIPS_1): New macro.
-	(LA25_LUI_MICROMIPS_2): Likewise.
-	(LA25_J_MICROMIPS_1, LA25_J_MICROMIPS_2): Likewise.
-	(LA25_ADDIU_MICROMIPS_1, LA25_ADDIU_MICROMIPS_2): Likewise.
-	(TLS_RELOC_P): Handle microMIPS ASE.
-	(mips_elf_create_stub_symbol): Adjust value of stub symbol if
-	target is a microMIPS function.
-	(micromips_reloc_p): New function.
-	(micromips_reloc_shuffle_p): Likewise.
-	(got16_reloc_p, call16_reloc_p): Handle microMIPS ASE.
-	(got_disp_reloc_p, got_page_reloc_p): New functions.
-	(got_ofst_reloc_p): Likewise.
-	(got_hi16_reloc_p, got_lo16_reloc_p): Likewise.
-	(call_hi16_reloc_p, call_lo16_reloc_p): Likewise.
-	(hi16_reloc_p, lo16_reloc_p, jal_reloc_p): Handle microMIPS ASE.
-	(micromips_branch_reloc_p): New function.
-	(tls_gd_reloc_p, tls_ldm_reloc_p): Likewise.
-	(tls_gottprel_reloc_p): Likewise.
-	(_bfd_mips16_elf_reloc_unshuffle): Rename to...
-	(_bfd_mips_elf_reloc_unshuffle): ... this.  Handle microMIPS
-	ASE.
-	(_bfd_mips16_elf_reloc_shuffle): Rename to...
-	(_bfd_mips_elf_reloc_shuffle): ... this.  Handle microMIPS ASE.
-	(_bfd_mips_elf_lo16_reloc): Handle microMIPS ASE.
-	(mips_tls_got_index, mips_elf_got_page): Likewise.
-	(mips_elf_create_local_got_entry): Likewise.
-	(mips_elf_relocation_needs_la25_stub): Likewise.
-	(mips_elf_calculate_relocation): Likewise.
-	(mips_elf_perform_relocation): Likewise.
-	(_bfd_mips_elf_symbol_processing): Likewise.
-	(_bfd_mips_elf_add_symbol_hook): Likewise.
-	(_bfd_mips_elf_link_output_symbol_hook): Likewise.
-	(mips_elf_add_lo16_rel_addend): Likewise.
-	(_bfd_mips_elf_check_relocs): Likewise.
-	(mips_elf_adjust_addend): Likewise.
-	(_bfd_mips_elf_relocate_section): Likewise.
-	(mips_elf_create_la25_stub): Likewise.
-	(_bfd_mips_vxworks_finish_dynamic_symbol): Likewise.
-	(_bfd_mips_elf_gc_sweep_hook): Likewise.
-	(_bfd_mips_elf_is_target_special_symbol): New function.
-	(mips_elf_relax_delete_bytes): Likewise.
-	(opcode_descriptor): New structure.
-	(RA): New macro.
-	(OP32_SREG, OP32_TREG, OP16_VALID_REG): Likewise.
-	(b_insns_32, bc_insn_32, bz_insn_32, bzal_insn_32): New variables.
-	(beq_insn_32): Likewise.
-	(b_insn_16, bz_insn_16): New variables.
-	(BZC32_REG_FIELD): New macro.
-	(bz_rs_insns_32, bz_rt_insns_32): New variables.
-	(bzc_insns_32, bz_insns_16):Likewise.
-	(BZ16_REG, BZ16_REG_FIELD): New macros.
-	(jal_insn_32_bd16, jal_insn_32_bd32): New variables.
-	(jal_x_insn_32_bd32): Likewise.
-	(j_insn_32, jalr_insn_32): Likewise.
-	(ds_insns_32_bd16, ds_insns_32_bd32): Likewise.
-	(jalr_insn_16_bd16, jalr_insn_16_bd32, jr_insn_16): Likewise.
-	(JR16_REG): New macro.
-	(ds_insns_16_bd16): New variable.
-	(lui_insn): Likewise.
-	(addiu_insn, addiupc_insn): Likewise.
-	(ADDIUPC_REG_FIELD): New macro.
-	(MOVE32_RD, MOVE32_RS): Likewise.
-	(MOVE16_RD_FIELD, MOVE16_RS_FIELD): Likewise.
-	(move_insns_32, move_insns_16): New variables.
-	(nop_insn_32, nop_insn_16): Likewise.
-	(MATCH): New macro.
-	(find_match): New function.
-	(check_br16_dslot, check_br32_dslot): Likewise.
-	(check_br16, check_br32): Likewise.
-	(IS_BITSIZE): New macro.
-	(check_4byte_branch): New function.
-	(_bfd_mips_elf_relax_section): Likewise.
-	(_bfd_mips_elf_merge_private_bfd_data): Disallow linking MIPS16
-	and microMIPS modules together.
-	(_bfd_mips_elf_print_private_bfd_data):	Handle microMIPS ASE.
-	* reloc.c (BFD_RELOC_MICROMIPS_7_PCREL_S1): New relocation.
-	(BFD_RELOC_MICROMIPS_10_PCREL_S1): Likewise.
-	(BFD_RELOC_MICROMIPS_16_PCREL_S1): Likewise.
-	(BFD_RELOC_MICROMIPS_GPREL16): Likewise.
-	(BFD_RELOC_MICROMIPS_JMP, BFD_RELOC_MICROMIPS_HI16): Likewise.
-	(BFD_RELOC_MICROMIPS_HI16_S): Likewise.
-	(BFD_RELOC_MICROMIPS_LO16): Likewise.
-	(BFD_RELOC_MICROMIPS_LITERAL): Likewise.
-	(BFD_RELOC_MICROMIPS_GOT16): Likewise.
-	(BFD_RELOC_MICROMIPS_CALL16): Likewise.
-	(BFD_RELOC_MICROMIPS_GOT_HI16): Likewise.
-	(BFD_RELOC_MICROMIPS_GOT_LO16): Likewise.
-	(BFD_RELOC_MICROMIPS_CALL_HI16): Likewise.
-	(BFD_RELOC_MICROMIPS_CALL_LO16): Likewise.
-	(BFD_RELOC_MICROMIPS_SUB): Likewise.
-	(BFD_RELOC_MICROMIPS_GOT_PAGE): Likewise.
-	(BFD_RELOC_MICROMIPS_GOT_OFST): Likewise.
-	(BFD_RELOC_MICROMIPS_GOT_DISP): Likewise.
-	(BFD_RELOC_MICROMIPS_HIGHEST): Likewise.
-	(BFD_RELOC_MICROMIPS_HIGHER): Likewise.
-	(BFD_RELOC_MICROMIPS_SCN_DISP): Likewise.
-	(BFD_RELOC_MICROMIPS_JALR): Likewise.
-	(BFD_RELOC_MICROMIPS_TLS_GD): Likewise.
-	(BFD_RELOC_MICROMIPS_TLS_LDM): Likewise.
-	(BFD_RELOC_MICROMIPS_TLS_DTPREL_HI16): Likewise.
-	(BFD_RELOC_MICROMIPS_TLS_DTPREL_LO16): Likewise.
-	(BFD_RELOC_MICROMIPS_TLS_GOTTPREL): Likewise.
-	(BFD_RELOC_MICROMIPS_TLS_TPREL_HI16): Likewise.
-	(BFD_RELOC_MICROMIPS_TLS_TPREL_LO16): Likewise.
+	* libbfd.h: Regenrate.
+	* elf32-avr.c (elf_avr_howto_table): Rename R_AVR_8_HHI8 to
+	R_AVR_8_HLO8.
+	(avr_reloc_map): Likewise.
+
+2012-05-16  Daniel Richard G.  <skunk at iskunk.org>
+
+	PR binutils/13558
+	* bfd/aout-cris.c: Include sysdep.h before bfd.h.
+	* bfd/aout-ns32k.c: Likewise.
+	* bfd/aout-sparcle.c: Likewise.
+	* bfd/aout0.c: Likewise.
+	* bfd/bfd-in2.h: Likewise.
+	* bfd/coff-stgo32.c: Likewise.
+	* bfd/cpu-lm32.c: Likewise.
+	* bfd/cpu-microblaze.c: Likewise.
+	* bfd/cpu-score.c: Likewise.
+	* bfd/cpu-tilegx.c: Likewise.
+	* bfd/cpu-tilepro.c: Likewise.
+	* bfd/elf32-lm32.c: Likewise.
+	* bfd/elf32-microblaze.c: Likewise.
+	* bfd/elf32-score7.c: Likewise.
+	* bfd/elf32-tilepro.c: Likewise.
+	* bfd/elfxx-tilegx.c: Likewise.
+	* bfd/mach-o.h: Likewise.
+	* bfd/nlm32-ppc.c: Likewise.
+	* bfd/ns32knetbsd.c: Likewise.
+	* bfd/pef.h: Likewise.
+	* bfd/plugin.c: Likewise.
+	* bfd/stab-syms.c: Likewise.
+	* bfd/sunos.c: Likewise.
+	* bfd/syms.c: Likewise.
+	* bfd/xsym.h: Likewise.
+
+2012-05-16  Alan Modra  <amodra at gmail.com>
+
+	* elflink.c: Rename flaginfo to flinfo throughout, except..
+	(bfd_elf_lookup_section_flags): ..here, rename finfo to flaginfo.
+	Formatting, style.  Simplify flag match.
+
+2012-05-16  Alan Modra  <amodra at gmail.com>
+
+	* dwarf2.c: Formatting.
+	(arange_add): Pass in unit rather than bfd.  Update callers.
+	Ignore empty ranges.  Don't ask for cleared memory.
+	(parse_comp_unit): Only set unit->base_address if processing
+	DW_TAG_compile_unit.
+	(find_debug_info): Optimise section lookup.
+	(place_sections): Use bfd_alloc for stash->adjusted_sections.
+	(find_line): Match previously parsed comp unit addresses as we
+	do for newly parsed comp units.
+
+2012-05-16  Alan Modra  <amodra at gmail.com>
+
+	* archive.c (_bfd_generic_read_ar_hdr_mag):  Ensure sscanf
+	stops at end of ar_size field.
+
+2012-05-16  Alan Modra  <amodra at gmail.com>
+
+ 	PR ld/13962
+ 	PR ld/7023
+	* elf.c (bfd_section_from_shdr): Fail when .dynsym sh_info is
+	out of range.  As a special case, fix sh_info for zero sh_size.
+	Do the same for .symtab.
+
+2012-05-15  James Murray <jsm at jsm-net.demon.co.uk>
+	    Stephane Carrez <stcarrez at nerim.fr>
+
+	* archures.c: Add bfd_arch_m9s12x and bfd_arch_m9s12xg.
+	* config.bfd: Likewise.
+	* cpu-m9s12x.c: New.
+	* cpu-m9s12xg.c: New.
+	* elf32-m68hc12.c: Add S12X and XGATE co-processor support.
+	Add option to offset S12 addresses into XGATE memory space.
+	Fix carry bug in IMM16 (IMM8 low/high) relocate.
+	* Makefile.am (ALL_MACHINES): Add cpu-m9s12x and cpu-m9s12xg.
+	(ALL_MACHINES_CFILES): Likewise.
+	* reloc.c: Add S12X relocs.
+	* Makefile.in: Regenerate.
 	* bfd-in2.h: Regenerate.
 	* libbfd.h: Regenerate.
 
-2011-07-22  H.J. Lu  <hongjiu.lu at intel.com>
-
-	* Makefile.am (ALL_MACHINES): Add cpu-k1om.lo.
-	(ALL_MACHINES_CFILES): Add cpu-k1om.c.
-	* Makefile.in: Regenerated.
-
-	* archures.c (bfd_architecture): Add bfd_arch_k1om.
-	(bfd_k1om_arch): New.
-	(bfd_archures_list): Add &bfd_k1om_arch.
-	* bfd-in2.h: Regenerated.
-
-	* config.bfd (targ64_selvecs): Add bfd_elf64_k1om_vec if
-	bfd_elf64_x86_64_vec is supported.  Add bfd_elf64_k1om_freebsd_vec
-	if bfd_elf64_x86_64_freebsd_vec is supported.
-	(targ_selvecs): Likewise.
-
-	* configure.in: Support bfd_elf64_k1om_vec and
-	bfd_elf64_k1om_freebsd_vec.
-	* configure: Regenerated.
-
-	* cpu-k1om.c: New.
-
-	* elf64-x86-64.c (elf64_k1om_elf_object_p): New.
-	(bfd_elf64_k1om_vec): Likewise.
-	(bfd_elf64_k1om_freebsd_vec): Likewise.
-
-	* targets.c (bfd_elf64_k1om_vec): New.
-	(bfd_elf64_k1om_freebsd_vec): Likewise.
-	(_bfd_target_vector): Add bfd_elf64_k1om_vec and
-	bfd_elf64_k1om_freebsd_vec.
-
-2011-07-20  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix false coff-go32-exe matches.
-	* coff-i386.c (TARGET_SYM) <_bfd_check_format>: Conditionally use
-	COFF_CHECK_FORMAT.
-	* coff-stgo32.c (go32_check_format): New forward declaration.
-	(COFF_CHECK_FORMAT): New defintion.
-	(go32_check_format): New function.
-
-2011-07-15  Alan Modra  <amodra at gmail.com>
-
-	* configure.in: Bump version.
-	* configure: Regenerate.
-
-2011-07-14  Alan Modra  <amodra at gmail.com>
-
-	* linker.c (_bfd_generic_section_already_linked): Set l_flags.
-	* elf-bfd.h (struct already_linked): Forward declare.
-
-2011-07-14  Alan Modra  <amodra at gmail.com>
-
-	* elflink.c (_bfd_elf_fix_symbol_flags): Loop on indirect syms.
-	(_bfd_elf_adjust_dynamic_symbol): Remove FIXME.
-
-2011-07-14  Alan Modra  <amodra at gmail.com>
-
-	* elf64-ppc.c (struct ppc_link_hash_table): Add plt_static_chain.
-	(build_plt_stub): Add plt_static_chain param, don't load r11 if false.
-	(build_tls_get_addr_stub): Likewise.
-	(ppc_build_one_stub): Update calls to above.
-	(ppc_size_one_stub): Adjust stub size.
-	(ppc64_elf_size_stubs): Add plt_static_chain param, save to htab.
-	* elf64-ppc.h (ppc64_elf_size_stubs): Update prototype.
-
-2011-07-12  Nick Clifton  <nickc at redhat.com>
-
-	* elf32-arm.c (elf32_arm_section_flags): Delete.
-	(elf_backend_section_flags): Remove.
-
-2011-07-11  H.J. Lu  <hongjiu.lu at intel.com>
-
-	PR ld/12982
-	* elflink.c (bfd_elf_size_dynamic_sections): Also skip BFD_PLUGIN
-	when setting stack_flags.
-
-2011-07-11  Catherine Moore  <clm at codesourcery.com>
+2012-05-14  James Lemke  <jwlemke at codesourcery.com>
+	    Catherine Moore  <clm at codesourcery.com>
 
-	* aout-adobe.c (aout_32_bfd_lookup_section_flags): New definition.
-	* aout-target.h (MY_bfd_lookup_section_flags): New definition.
-	* aout-tic30.c (MY_bfd_lookup_section_flags): New definition.
+	* bfd.c (bfd_lookup_section_flags): Add section parm.
+	* ecoff.c (bfd_debug_section): Remove flag_info initializer.
+	* elf-bfd.h (bfd_elf_section_data): Move in section_flag_info.
+	(bfd_elf_lookup_section_flags): Add section parm.
+	* elf32-ppc.c (is_ppc_vle): New function.
+	(ppc_elf_modify_segment_map): New function.
+	(elf_backend_modify_segment_map): Define.
+	(has_vle_insns): New define.
+	* elf32-ppc.h (ppc_elf_modify_segment_map): Declare.
+	* elflink.c (bfd_elf_lookup_section_flags): Add return value & parm.
+	Move in logic to omit / include a section.
+	* libbfd-in.h (bfd_link_info): Add section parm.
+	(bfd_generic_lookup_section_flags): Likewise.
+	* reloc.c (bfd_generic_lookup_section_flags): Likewise.
+	* section.c (bfd_section): Move out section_flag_info.
+	(BFD_FAKE_SECTION): Remove flag_info initializer.
+	* targets.c (_bfd_lookup_section_flags): Add section parm.
+
+2012-05-14  Catherine Moore  <clm at codesourcery.com>
+
+	* archures.c (bfd_mach_ppc_vle): New.
 	* bfd-in2.h: Regenerated.
-	* bfd.c (bfd_lookup_section_flags): New definition.
-	* binary.c (binary_bfd_lookup_section_flags): New definition.
-	* bout.c (b_out_bfd_lookup_section_flags): New definition.
-	* coff-alpha.c (_bfd_ecoff_bfd_lookup_section_flags): New definition.
-	* coff-mips.c (_bfd_ecoff_bfd_lookup_section_flags): New definition.
-	* coff-rs6000.c (rs6000coff_vec): Include
-	bfd_generic_lookup_section_flags.
-	(pmac_xcoff_vec): Likewise.
-	* coffcode.h (coff_bfd_lookup_section_flags): New definition.
-	* coff64-rs6000.c (rs6000coff64_vec): Include
-	bfd_generic_lookup_section_flags.
-	(aix5coff64_vec): Likewise.
-	* ecoff.c (bfd_debug_section): Initialize flag_info field.
-	* elf-bfd.h (elf_backend_lookup_section_flags_hook): Declare.
-	(bfd_elf_lookup_section_flags): Declare.
-	* elflink.c (bfd_elf_lookup_section_flags): New function.
-	* elfxx-target.h (bfd_elfNN_bfd_lookup_section_flags): Define.
+	* cpu-powerpc.c (bfd_powerpc_archs): New entry for vle.
+	* elf32-ppc.c (split16_format_type): New enumeration.
+	(ppc_elf_vle_split16): New function.
+	(HOWTO): Add entries for R_PPC_VLE relocations.
+	(ppc_elf_reloc_type_lookup): Handle PPC_VLE relocations.
+	(ppc_elf_section_flags): New function.
+	(ppc_elf_lookup_section_flags): New function.
+	(ppc_elf_section_processing): New function.
+	(ppc_elf_check_relocs): Handle PPC_VLE relocations.
+	(ppc_elf_relocation_section): Likewise.
 	(elf_backend_lookup_section_flags_hook): Define.
-	(elf_backend_data): Add elf_backend_lookup_section_flags_hook.
-	* i386msdos.c (msdos_bfd_lookup_section_flags): New define.
-	* i386os9k.c (os9k_bfd_lookup_section_flags): New define.
-	* ieee.c (ieee_bfd_lookup_section_flags): New define.
-	* ihex.c (ihex_bfd_lookup_section_flags): New define.
-	* libbfd-in.h (_bfd_nolink_bfd_lookup_section_flags): Declare.
-	(bfd_generic_lookup_section_flags): Declare.
+	(elf_backend_section_flags): Define.
+	(elf_backend_section_processing): Define.
+	* elf32-ppc.h (ppc_elf_section_processing): Declare.
 	* libbfd.h: Regenerated.
-	* mach-o-target.c (bfd_mach_o_bfd_lookup_section_flags): New.
-	* mmo.c (mmo_bfd_lookup_section_flags): New definition.
-	* nlm-target.h (nlm_bfd_lookup_section_flags): New definition.
-	* oasys.c (oasys_bfd_lookup_section_flags): New definition.
-	* pef.c (bfd_pef_bfd_lookup_section_flags): New definition.
-	* plugin.c (bfd_plugin_bfd_lookup_section_flags): New definition.
-	* ppcboot.c (ppcboot_bfd_lookup_section_flags): New definition.
-	* reloc.c (bfd_generic_lookup_section_flags): New function.
-	* som.c (som_bfd_lookup_section_flags): New definition.
-	* srec.c (srec_bfd_lookup_section_flags): New definition.
-	* targets.c (flag_info): Declare.
-	(NAME##_bfd_lookup_section_flags): Add to LINK jump table.
-	(_bfd_lookup_section_flags): New.
-	* tekhex.c (tekhex_bfd_lookup_section_flags): New definition.
-	* versados.c (versados_bfd_lookup_section_flags): New definition.
-	* vms-alpha.c (alpha_vms_bfd_lookup_section_flag): New definition.
-	* xsym.c (bfd_sym_bfd_lookup_section_flags): New definition.
-
-2011-07-11  H.J. Lu  <hongjiu.lu at intel.com>
-
-	PR ld/12978
-	* elfnn-ia64.c (count_dyn_reloc): Fix a typo.
-
-2011-07-09  Alan Modra  <amodra at gmail.com>
-
-	PR ld/12942
-	* elflink.c (elf_link_add_object_symbols): Use elf_discarded_section
-	rather than kept_section to determine whether a symbol is from
-	a discarded section.
-	* cofflink.c (coff_link_add_symbols): Make symbols from discarded
-	sections appear undefined.
-
-2011-07-09  H.J. Lu  <hongjiu.lu at intel.com>
-
-	PR ld/12942
-	* elf-bfd.h (_bfd_elf_section_already_linked): Replace
-	"asection *" with "struct already_linked *".
-	* libbfd-in.h (_bfd_nolink_section_already_linked): Likewise.
-	(_bfd_generic_section_already_linked): Likewise.
-	(bfd_section_already_linked_table_insert): Likewise.
-	(struct already_linked): New.
-	(struct bfd_section_already_linked): Use it.
-	* elflink.c (_bfd_elf_section_already_linked): Replace.
-	"asection *" with "struct already_linked *".  Replace the plugin
-	dummy with the LTO output.
-	* linker.c (_bfd_generic_section_already_linked): Likewise.
-	* targets.c (struct already_linked): Add forward declaration.
-	(bfd_target): Replace "struct bfd_section *" with
-	"struct already_linked *" in _section_already_linked.
+	* reloc.c (BFD_RELOC_PPC_VLE_REL8, BFD_RELOC_PPC_VLE_REL15,
+	BFD_RELOC_PPC_VLE_REL24, BFD_RELOC_PPC_VLE_LO16A,
+	BFD_RELOC_PPC_VLE_LO16D, BFD_RELOC_PPC_VLE_HI16A,
+	BFD_RELOC_PPC_VLE_HI16D, BFD_RELOC_PPC_VLE_HA16A,
+	BFD_RELOC_PPC_VLE_HA16D, BFD_RELOC_PPC_VLE_SDA21,
+	BFD_RELOC_PPC_VLE_SDA21_LO, BFD_RELOC_PPC_VLE_SDAREL_LO16A,
+	BFD_RELOC_PPC_VLE_SDAREL_LO16D, BFD_RELOC_PPC_VLE_SDAREL_HI16A,
+	BFD_RELOC_PPC_VLE_SDAREL_HI16D, BFD_RELOC_PPC_VLE_SDAREL_HA16A,
+	BFD_RELOC_PPC_VLE_SDAREL_HA16D): New bfd relocations.
+
+2012-05-11  Georg-Johann Lay  <avr at gjlay.de>
+
+	PR target/13503
+	* reloc.c: Add new ENUM for BFD_RELOC_AVR_8_LO,
+	BFD_RELOC_AVR_8_HI, BFD_RELOC_AVR_8_HHI.
 	* bfd-in2.h: Regenerate.
-	* libbfd.h: Regenerate.
+	* libbfd.h: Regenrate.
+	* elf32-avr.c (elf_avr_howto_table): Add entries for
+	R_AVR_8_LO8, R_AVR_8_HI8, R_AVR_8_HHI8.
+	(avr_reloc_map): Add RELOC mappings for R_AVR_8_LO8, R_AVR_8_HI8,
+	R_AVR_8_HHI8.
 
-2011-07-06  Tristan Gingold  <gingold at adacore.com>
+2012-05-10  H.J. Lu  <hongjiu.lu at intel.com>
 
-	* mach-o.h: Move loader related definitions to
-	include/mach-o/loader.h.  Include it.
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Use int in x32
+	addend overflow check.
 
-2011-07-05  H.J. Lu  <hongjiu.lu at intel.com>
+2012-05-10  DJ Delorie  <dj at redhat.com>
 
-	* elf64-x86-64.c (elf_backend_post_process_headers): Always
-	define to _bfd_elf_set_osabi.
+	* elf32-rx.c (rx_elf_object_p): Ignore empty segments.
 
-2011-07-03  Samuel Thibault  <samuel.thibault at gnu.org>
-	    Thomas Schwinge  <thomas at schwinge.name>
+2012-05-10  H.J. Lu  <hongjiu.lu at intel.com>
 
-	PR binutils/12913
-	* elf.c (_bfd_elf_set_osabi): Use ELFOSABI_GNU name instead of
-	ELFOSABI_LINUX alias.
-	* elf32-hppa.c: Likewise.
-	* elf32-i370.c: Likewise.
-	* elf64-hppa.c: Likewise.
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Display signed
+	hex number in x32 addend overflow check.
 
-2011-07-01  Ian Lance Taylor  <iant at google.com>
+2012-05-10  H.J. Lu  <hongjiu.lu at intel.com>
 
-	* elf32-i386.c (elf_i386_eh_frame_plt): Correct expression: change
-	DW_OP_lit3 to DW_OP_lit2.
+	* elf64-x86-64.c (elf_x86_64_reloc_type_class): Handle
+	R_X86_64_RELATIVE64.
 
-2011-07-01  Alan Modra  <amodra at gmail.com>
+2012-05-09  H.J. Lu  <hongjiu.lu at intel.com>
 
-	* elf32-ppc.c (ppc_elf_copy_indirect_symbol): Don't look at
-	dyn relocs when called to copy flags for a weak sym.
-	* elf64-ppc.c (ppc64_elf_copy_indirect_symbol): Likewise.
-	(ppc64_elf_merge_private_bfd_data): Delete.
-	(bfd_elf64_bfd_merge_private_bfd_data): Define as
-	_bfd_generic_verify_endian_match.
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Check addend
+	overflow for R_X86_64_RELATIVE64.
 
-2011-06-30  Bernd Schmidt  <bernds at codesourcery.com>
+2012-05-08  Ben Cheng  <bccheng at google.com>
 
-	* bfd/elf32-tic6x.c (elf32_tic6x_set_osabi): Also set it if
-	link_info is NULL.
+	* elf.c: Preserve the original p_align and p_flags if they are
+	valid.
 
-2011-06-28  Tristan Gingold  <gingold at adacore.com>
+2012-05-07  Alan Modra  <amodra at gmail.com>
 
-	* vms-alpha.c (vms_private_data_struct): Make vms_linkage_index
-	unsigned int.
-	(_bfd_vms_write_etir): Write linkage index from reloc.
+	* elf64-ia64-vms.c (elf64_ia64_relocate_section): Update
+	RELOC_AGAINST_DISCARDED_SECTION invocation.
 
-2011-06-28  Fawzi Mohamed <fawzi.mohamed at nokia.com>
+2012-05-07  Hans-Peter Nilsson  <hp at axis.com>
 
-	* mach-o.c (bfd_mach_o_read_command): Also ignore
-	BFD_MACH_O_LC_ROUTINES_64.
+	* elf-bfd.h (RELOC_AGAINST_DISCARDED_SECTION): Declare and use
+	local variable i_ instead of assuming and using a variable i.
 
-2011-06-27  Tristan Gingold  <gingold at adacore.com>
+2012-05-07  Maciej W. Rozycki  <macro at linux-mips.org>
 
-	* vms-alpha.c (_bfd_vms_write_etir): Use 'section' to get current
-	section target index.
-
-2011-06-27  Nick Clifton  <nickc at redhat.com>
-
-	* cisco-core.c (cisco_core_little_vec): Add initialization of
-	match_priority field.
-
-2011-06-27  Tristan Gingold  <gingold at adacore.com>
+	* elf-bfd.h (RELOC_AGAINST_DISCARDED_SECTION): Handle compound
+	relocations.
+	* elfxx-mips.c (mips_reloc_against_discarded_section): New
+	function.
+	(_bfd_mips_elf_relocate_section): Call it, in place of
+	RELOC_AGAINST_DISCARDED_SECTION.
+	* elf-m10200.c (mn10200_elf_relocate_section): Update arguments
+	to RELOC_AGAINST_DISCARDED_SECTION.
+	* elf-m10300.c (mn10300_elf_relocate_section): Likewise.
+	* elf32-arm.c (elf32_arm_relocate_section): Likewise.
+	* elf32-avr.c (elf32_avr_relocate_section): Likewise.
+	* elf32-bfin.c (bfin_relocate_section): Likewise.
+	(bfinfdpic_relocate_section): Likewise.
+	* elf32-cr16.c (elf32_cr16_relocate_section): Likewise.
+	* elf32-cr16c.c (elf32_cr16c_relocate_section): Likewise.
+	* elf32-cris.c (cris_elf_relocate_section): Likewise.
+	* elf32-crx.c (elf32_crx_relocate_section): Likewise.
+	* elf32-d10v.c (elf32_d10v_relocate_section): Likewise.
+	* elf32-epiphany.c (epiphany_elf_relocate_section): Likewise.
+	* elf32-fr30.c (fr30_elf_relocate_section): Likewise.
+	* elf32-frv.c (elf32_frv_relocate_section): Likewise.
+	* elf32-h8300.c (elf32_h8_relocate_section): Likewise.
+	* elf32-hppa.c (elf32_hppa_relocate_section): Likewise.
+	* elf32-i370.c (i370_elf_relocate_section): Likewise.
+	* elf32-i386.c (elf_i386_relocate_section): Likewise.
+	* elf32-i860.c (elf32_i860_relocate_section): Likewise.
+	* elf32-ip2k.c (ip2k_elf_relocate_section): Likewise.
+	* elf32-iq2000.c (iq2000_elf_relocate_section): Likewise.
+	* elf32-lm32.c (lm32_elf_relocate_section): Likewise.
+	* elf32-m32c.c (m32c_elf_relocate_section): Likewise.
+	* elf32-m32r.c (m32r_elf_relocate_section): Likewise.
+	* elf32-m68hc1x.c (elf32_m68hc11_relocate_section): Likewise.
+	* elf32-m68k.c (elf_m68k_relocate_section): Likewise.
+	* elf32-mcore.c (mcore_elf_relocate_section): Likewise.
+	* elf32-mep.c (mep_elf_relocate_section): Likewise.
+	* elf32-moxie.c (moxie_elf_relocate_section): Likewise.
+	* elf32-msp430.c (elf32_msp430_relocate_section): Likewise.
+	* elf32-mt.c (mt_elf_relocate_section): Likewise.
+	* elf32-openrisc.c (openrisc_elf_relocate_section): Likewise.
+	* elf32-ppc.c (ppc_elf_relocate_section): Likewise.
+	* elf32-rl78.c (rl78_elf_relocate_section): Likewise.
+	* elf32-rx.c (rx_elf_relocate_section): Likewise.
+	* elf32-s390.c (elf_s390_relocate_section): Likewise.
+	* elf32-score.c (s3_bfd_score_elf_relocate_section): Likewise.
+	* elf32-score7.c (s7_bfd_score_elf_relocate_section): Likewise.
+	* elf32-sh.c (sh_elf_relocate_section): Likewise.
+	* elf32-spu.c (spu_elf_relocate_section): Likewise.
+	* elf32-tic6x.c (elf32_tic6x_relocate_section): Likewise.
+	* elf32-tilepro.c (tilepro_elf_relocate_section): Likewise.
+	* elf32-v850.c (v850_elf_relocate_section): Likewise.
+	* elf32-vax.c (elf_vax_relocate_section): Likewise.
+	* elf32-xc16x.c (elf32_xc16x_relocate_section): Likewise.
+	* elf32-xstormy16.c (xstormy16_elf_relocate_section): Likewise.
+	* elf32-xtensa.c (elf_xtensa_relocate_section): Likewise.
+	* elf64-alpha.c (elf64_alpha_relocate_section_r): Likewise.
+	(elf64_alpha_relocate_section): Likewise.
+	* elf64-hppa.c (elf64_hppa_relocate_section): Likewise.
+	* elf64-mmix.c (mmix_elf_relocate_section): Likewise.
+	* elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
+	* elf64-s390.c (elf_s390_relocate_section): Likewise.
+	* elf64-sh64.c (sh_elf64_relocate_section): Likewise.
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
+	* elfnn-ia64.c (elfNN_ia64_relocate_section): Likewise.
+	* elfxx-sparc.c (_bfd_sparc_elf_relocate_section): Likewise.
+	* elfxx-tilegx.c (tilegx_elf_relocate_section): Likewise.
 
-	* cache.c: Include bfd_stdint.h.
-	(cache_bmmap): Change profile.  Return region start and size.
-	* bfdio.c (struct bfd_iovec): Change bmmap profile.
-	(bfd_mmap): Change profile and adjust.   Update comment.
-	(memory_bmmap): Change profile.
-	* opncls.c (opncls_bmmap): Change profile.
-	* vms-lib.c (vms_lib_bmmap): Likewise.
-	* libbfd.h: Regenerate.
+2012-05-05  Alan Modra  <amodra at gmail.com>
+
+	PR ld/14052
+	PR ld/13621
+	* linker.c (_bfd_nearby_section): Revert 2012-02-13 change.
+
+2012-05-05  Alan Modra  <amodra at gmail.com>
+
+	* aout-arm.c: Replace all uses of bfd_abs_section, bfd_com_section,
+	bfd_und_section and bfd_ind_section with their _ptr variants, or
+	use corresponding bfd_is_* macros.
+	* aout-ns32k.c: Likewise.
+	* aout-tic30.c: Likewise.
+	* coff-arm.c: Likewise.
+	* coff-tic54x.c: Likewise.
+	* cpu-ns32k.c: Likewise.
+	* elf-attrs.c: Likewise.
+	* elfcode.h: Likewise.
+	* peicode.h: Likewise.
+	* reloc.c: Likewise.
+	* riscix.c: Likewise.
+	* versados.c: Likewise.
+	* section.c: Likewise.
+	(bfd_abs_section, bfd_ind_section, bfd_com_section,
+	bfd_ind_section): Delete.
+	(std_section): New array replacing above.
+	(bfd_abs_section_ptr, bfd_ind_section_ptr, bfd_com_section_ptr,
+	bfd_ind_section_ptr, STD_SECTION): Update.
+	(BFD_FAKE_SECTION, GLOBAL_SYM_INIT): Remove unnecessary casts.
 	* bfd-in2.h: Regenerate.
 
-2011-06-27  Tristan Gingold  <gingold at adacore.com>
-
-	* vms-misc.c (vms_time_to_time_t): Adjust overflow detection.
-	Add comment.
-
-2011-06-25  H.J. Lu  <hongjiu.lu at intel.com>
-
-	* elf64-x86-64.c (elf_backend_post_process_headers): Don't
-	define for FreeBSD/x86-64 nor FreeBSD/L1OM.  Define for L1OM.
-
-2011-06-25  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* elf64-x86-64.c (elf_x86_64_link_hash_table_create): Initialize
-	PLT_EH_FRAME.
-	* elf32-i386.c (elf_i386_link_hash_table): Likewise.
-
-2011-06-24  Richard Henderson  <rth at redhat.com>
-
-	PR ld/12928
-	* elf64-alpha.c (elf64_alpha_relax_tls_get_addr): Recover the
-	tlsgd insn before swapping adjacent insns.
-
-2011-06-24  Tristan Gingold  <gingold at adacore.com>
-
-	* vms-alpha.c (alpha_vms_slurp_relocs): Add a guard for relocs in the
-	absolute section.
-
-2011-06-24  Alan Modra  <amodra at gmail.com>
-
-	PR ld/12921
-	* elf.c (assign_file_positions_for_load_sections): Don't align
-	sh_offset for all SHT_NOBITS sections here, just .tbss sections
-	that don't get a PT_LOAD.
-
-2011-06-22  Kaz Kojima  <kkojima at rr.iij4u.or.jp>
-
-	* elf32-sh.c (sh_elf_relocate_section): Allow R_SH_TLS_LE_32 for PIE.
-	(sh_elf_check_relocs): Likewise.
-
-2011-06-22  Richard Henderson  <rth at redhat.com>
-
-	* elf64-alpha.c (elf64_alpha_check_relocs): No dynamic reloc for
-	TPREL in a PIE image.
-	(alpha_dynamic_entries_for_reloc): Likewise.
-	(elf64_alpha_relocate_section): Allow TPREL in PIE images.
-	(elf64_alpha_relax_got_load): Likewise.
-
-2011-06-22  Ramana Radhakrishnan  <ramana.radhakrishnan at linaro.org>
-
-	* elf32-arm.c (elf32_arm_final_link_relocate): Allow R_ARM_TLS_LE32
-	for PIE.
-
-2011-06-22  Alan Modra  <amodra at gmail.com>
-
-	* elflink.c (_bfd_elf_merge_symbol): Allow type changes for
-	plugin symbols.  Fix segfault on linker scrip defined syms.
-
-2011-06-20  Jakub Jelinek  <jakub at redhat.com>
-
-	PR ld/12570
-	* elf-eh-frame.c (_bfd_elf_parse_eh_frame): Allow no relocations
-	at all for linker created .eh_frame sections.
-	(_bfd_elf_discard_section_eh_frame): Handle linker created
-	.eh_frame sections with no relocations.
-	* elf64-x86-64.c: Include dwarf2.h.
-	(elf_x86_64_eh_frame_plt): New variable.
-	(PLT_CIE_LENGTH, PLT_FDE_LENGTH, PLT_FDE_START_OFFSET,
-	PLT_FDE_LEN_OFFSET): Define.
-	(struct elf_x86_64_link_hash_table): Add plt_eh_frame field.
-	(elf_x86_64_create_dynamic_sections): Create and fill in
-	.eh_frame section for .plt section.
-	(elf_x86_64_size_dynamic_sections): Write .plt section size
-	into .eh_frame FDE covering .plt section.
-	(elf_x86_64_finish_dynamic_sections): Write .plt section
-	start into .eh_frame FDE covering .plt section.  Call
-	_bfd_elf_write_section_eh_frame on htab->plt_eh_frame section.
-	(elf_backend_plt_alignment): Define to 4.
-	* elf32-i386.c: Include dwarf2.h.
-	(elf_i386_eh_frame_plt): New variable.
-	(PLT_CIE_LENGTH, PLT_FDE_LENGTH, PLT_FDE_START_OFFSET,
-	PLT_FDE_LEN_OFFSET): Define.
-	(struct elf_i386_link_hash_table): Add plt_eh_frame field.
-	(elf_i386_create_dynamic_sections): Create and fill in
-	.eh_frame section for .plt section.
-	(elf_i386_size_dynamic_sections): Write .plt section size
-	into .eh_frame FDE covering .plt section.
-	(elf_i386_finish_dynamic_sections): Write .plt section
-	start into .eh_frame FDE covering .plt section.  Call
-	_bfd_elf_write_section_eh_frame on htab->plt_eh_frame section.
-	(elf_backend_plt_alignment): Define to 4.
-
-2011-06-19  H.J. Lu  <hongjiu.lu at intel.com>
-
-	* elf64-x86-64.c (elf_backend_post_process_headers): Defined
-	for x32.
-
-2011-06-16  H.J. Lu  <hongjiu.lu at intel.com>
-
-	* elf64-x86-64.c: Include <stdarg.h> and CORE_HEADER if
-	CORE_HEADER is defined.
-	(elf_x86_64_write_core_note): New.
-	(elf_backend_write_core_note): Likewise.
-
-	* hosts/x86-64linux.h (uint64_t): New.
-	(user_regsx32_struct): Likewise.
-	(elf_gregx32_t): Likewise.
-	(ELF_NGREGX32): Likewise.
-	(elf_gregsetx32_t): Likewise.
-	(elf_prstatusx32): Likewise.
-	(prstatusx32_t): Likewise.
-	(user_fpregs32_struct): Removed.
-	(user_fpxregs32_struct): Likewise.
-	(user32): Likewise.
-	(elf_fpregset32_t): Likewise.
-	(elf_fpxregset32_t): Likewise.
-	(prgregset32_t): Likewise.
-	(prfpregset32_t): Likewise.
-
-2011-06-16  H.J. Lu  <hongjiu.lu at intel.com>
-
-	* elf64-x86-64.c (elf_x86_64_grok_prstatus): Support x32.
-	(elf_x86_64_grok_psinfo): Likewise.
-
-2011-06-16  Nick Clifton  <nickc at redhat.com>
-
-	* elf.c (elf_find_function): Fail if not provided with a symbol
-	table.
-
-2011-06-15  Ulrich Weigand  <ulrich.weigand at linaro.org>
-
-	* elf-bfd.h (elfcore_write_arm_vfp): Add prototype.
-	* elf.c (elfcore_grok_arm_vfp): New function.
-	(elfcore_grok_note): Call it to handle NT_ARM_VFP notes.
-	(elfcore_write_arm_vfp): New function.
-	(elfcore_write_register_note): Call it to handle .reg-arm-vfp.
-
-2011-06-14  Richard Henderson  <rth at redhat.com>
-
-	* elf64-alpha.c (elf64_alpha_copy_indirect_symbol): Rename from
-	elf64_alpha_merge_ind_symbols; adjust for the generic interface.
-	(elf64_alpha_always_size_sections): Don't call
-	elf64_alpha_merge_ind_symbols.
-	(elf_backend_copy_indirect_symbol): New.
-
-2011-06-14  Alan Modra  <amodra at gmail.com>
-
-	PR ld/12887
-	* elf-eh-frame.c (_bfd_elf_parse_eh_frame): Check sec_info_type
-	before doing anything.
-	(_bfd_elf_discard_section_eh_frame): Likewise.
-
-2011-06-14  Alan Modra  <amodra at gmail.com>
-
-	* Makefile.am: Formatting.
-	* Makefile.in: Regenerate.
-	* configure.in (bfd_elf64_tilegx_vec): Add elfxx-tilegx.lo.
-	* po/SRC-POTFILES.in: Regnerate.
-
-2011-06-14  Alan Modra  <amodra at gmail.com>
-
-	* elf32-tilepro.c (tilepro_elf_size_dynamic_sections): Don't use PTR.
-	(allocate_dynrelocs, readonly_dynrelocs): Replace PTR with void *.
-	Don't handle warning symbols here.
-	* elfxx-tilegx.c (tilegx_elf_size_dynamic_sections): As above.
-	(allocate_dynrelocs, readonly_dynrelocs): As above.
-
-2011-06-14  Alan Modra  <amodra at gmail.com>
-
-	PR ld/12851
-	* elflink.c (_bfd_elf_gc_mark_extra_sections): New function.
-	(elf_gc_sweep): Don't treat debug and sections like .comment
-	specially here.
-	(bfd_elf_gc_sections): Treat note sections as gc roots only when
-	not part of a group.  Always call gc_mark_extra_sections.
-	* elf-bfd.h (_bfd_elf_gc_mark_extra_sections): Declare.
-	* elfxx-target.h (elf_backend_gc_mark_extra_sections): Default to
-	_bfd_elf_gc_mark_extra_sections.
-	* elf32-arm.c (elf32_arm_gc_mark_extra_sections): Call
-	_bfd_elf_gc_mark_extra_sections.
-	* elf32-tic6x.c (elf32_tic6x_gc_mark_extra_sections): Likewise.
-
-2011-06-13  Nick Clifton  <nickc at redhat.com>
-
-	* elf32-tilepro.c (tilepro_elf_check_relocs): Delete unused local
-	variable 'local_got_offsets'.
-	* elfxx-tilegx.c (tilegx_elf_check_relocs): Likewise.
-	(tilegx_finish_dyn): Delete unused local variable 'abi_64_p'.
-
-2011-06-13  Walter Lee  <walt at tilera.com>
-
-	* Makefile.am (ALL_MACHINES): Add cpu-tilegx.lo and cpu-tilepro.lo.
-	(ALL_MACHINE_CFILES): Add cpu-tilegx.c and cpu-tilepro.c.
-	(BFD32_BACKENDS): Add elf32-tilegx.lo, elf32-tilepro.lo,
-	and elfxx-tilegx.lo.
-	(BFD32_BACKENDS_CFILES): Add elf32-tilegx.c elf32-tilepro.c, and
-	elfxx-tilegx.c.
-	(BFD64_BACKENDS): Add elf64-tilegx.lo.
-	(BFD64_BACKENDS_CFILES): Add elf64-tilegx.c.
+2012-05-03  Sean Keys  <skeys at ipdatasys.com>
+
+	* cpu-xgate.c: New file. Added XGATE support.
+	* archures.c (bfd_architecture): Add XGATE architecture.
+	(bfd_archures_list): Add reference to XGATE architecture info.
+	* elf-bfd.h (prep_headers): Handle bfd_arch_xgate.
+	* reloc.c: Add various XGATE relocation enums.
+	* targets.c (bfd_elf32_xgate_vec): Declare and add to target vector
+	list.
+	* Makefile.am: Add support for XGATE elf.
+	* configure.in: Ditto.
+	* config.bfd: Ditto.
 	* Makefile.in: Regenerate.
-	* arctures.c (bfd_architecture): Define bfd_arch_tilepro,
-	bfd_arch_tilegx, bfd_mach_tilepro, bfd_mach_tilegx.
-	(bfd_arch_info): Add bfd_tilegx_arch, bfd_tilepro_arch.
-	(bfd_archures_list): Add bfd_tilegx_arch, bfd_tilepro_arch.
-	bfd-in2.h: Regenerate.
-	* config.bfd: Handle tilegx-*-* and tilepro-*-*.
-	* configure.in: Handle bfd_elf32_tilegx_vec, bfd_elf32_tilepro_vec,
-	and bfd_elf64_tilegx_vec.
-	* configure: Regenerate.
-	* elf-bfd.h (enum elf_target_id): Define TILEGX_ELF_DATA and
-	TILEPRO_ELF_DATA.
-	* libbfd.h: Regenerate.
-	* reloc.c: Add BFD_RELOC_TILEPRO_{COPY, GLOB_DAT, JMP_SLOT,
-	RELATIVE, BROFF_X1, JOFFLONG_X1, JOFFLONG_X1_PLT, IMM8_X0,
-	IMM8_Y0, IMM8_X1, IMM8_Y1, DEST_IMM8_X1, MT_IMM15_X1, MF_IMM15_X1,
-	IMM16_X0, IMM16_X1, IMM16_X0_LO, IMM16_X1_LO, IMM16_X0_HI,
-	IMM16_X1_HI, IMM16_X0_HA, IMM16_X1_HA, IMM16_X0_PCREL,
-	IMM16_X1_PCREL, IMM16_X0_LO_PCREL, IMM16_X1_LO_PCREL,
-	IMM16_X0_HI_PCREL, IMM16_X1_HI_PCREL, IMM16_X0_HA_PCREL,
-	IMM16_X1_HA_PCREL, IMM16_X0_GOT, IMM16_X1_GOT, IMM16_X0_GOT_LO,
-	IMM16_X1_GOT_LO, IMM16_X0_GOT_HI, IMM16_X1_GOT_HI,
-	IMM16_X0_GOT_HA, IMM16_X1_GOT_HA, MMSTART_X0, MMEND_X0,
-	MMSTART_X1, MMEND_X1, SHAMT_X0, SHAMT_X1, SHAMT_Y0, SHAMT_Y1,
-	IMM16_X0_TLS_GD, IMM16_X1_TLS_GD, IMM16_X0_TLS_GD_LO,
-	IMM16_X1_TLS_GD_LO, IMM16_X0_TLS_GD_HI, IMM16_X1_TLS_GD_HI,
-	IMM16_X0_TLS_GD_HA, IMM16_X1_TLS_GD_HA, IMM16_X0_TLS_IE,
-	IMM16_X1_TLS_IE, IMM16_X0_TLS_IE_LO, IMM16_X1_TLS_IE_LO,
-	IMM16_X0_TLS_IE_HI, IMM16_X1_TLS_IE_HI, IMM16_X0_TLS_IE_HA,
-	IMM16_X1_TLS_IE_HA, TLS_DTPMOD32, TLS_DTPOFF32, TLS_TPOFF32}
-	Add BFD_RELOC_TILEGX_{HW0, HW1, HW2, HW3, HW0_LAST, HW1_LAST,
-	HW2_LAST, COPY, GLOB_DAT, JMP_SLOT, RELATIVE, BROFF_X1,
-	JUMPOFF_X1, JUMPOFF_X1_PLT, IMM8_X0, IMM8_Y0, IMM8_X1, IMM8_Y1,
-	DEST_IMM8_X1, MT_IMM14_X1, MF_IMM14_X1, MMSTART_X0, MMEND_X0,
-	SHAMT_X0, SHAMT_X1, SHAMT_Y0, SHAMT_Y1, IMM16_X0_HW0,
-	IMM16_X1_HW0, IMM16_X0_HW1, IMM16_X1_HW1, IMM16_X0_HW2,
-	IMM16_X1_HW2, IMM16_X0_HW3, IMM16_X1_HW3, IMM16_X0_HW0_LAST,
-	IMM16_X1_HW0_LAST, IMM16_X0_HW1_LAST, IMM16_X1_HW1_LAST,
-	IMM16_X0_HW2_LAST, IMM16_X1_HW2_LAST, IMM16_X0_HW0_PCREL,
-	IMM16_X1_HW0_PCREL, IMM16_X0_HW1_PCREL, IMM16_X1_HW1_PCREL,
-	IMM16_X0_HW2_PCREL, IMM16_X1_HW2_PCREL, IMM16_X0_HW3_PCREL,
-	IMM16_X1_HW3_PCREL, IMM16_X0_HW0_LAST_PCREL,
-	IMM16_X1_HW0_LAST_PCREL, IMM16_X0_HW1_LAST_PCREL,
-	IMM16_X1_HW1_LAST_PCREL, IMM16_X0_HW2_LAST_PCREL,
-	IMM16_X1_HW2_LAST_PCREL, IMM16_X0_HW0_GOT, IMM16_X1_HW0_GOT,
-	IMM16_X0_HW1_GOT, IMM16_X1_HW1_GOT, IMM16_X0_HW2_GOT,
-	IMM16_X1_HW2_GOT, IMM16_X0_HW3_GOT, IMM16_X1_HW3_GOT,
-	IMM16_X0_HW0_LAST_GOT, IMM16_X1_HW0_LAST_GOT,
-	IMM16_X0_HW1_LAST_GOT, IMM16_X1_HW1_LAST_GOT,
-	IMM16_X0_HW2_LAST_GOT, IMM16_X1_HW2_LAST_GOT, IMM16_X0_HW0_TLS_GD,
-	IMM16_X1_HW0_TLS_GD, IMM16_X0_HW1_TLS_GD, IMM16_X1_HW1_TLS_GD,
-	IMM16_X0_HW2_TLS_GD, IMM16_X1_HW2_TLS_GD, IMM16_X0_HW3_TLS_GD,
-	IMM16_X1_HW3_TLS_GD, IMM16_X0_HW0_LAST_TLS_GD,
-	IMM16_X1_HW0_LAST_TLS_GD, IMM16_X0_HW1_LAST_TLS_GD,
-	IMM16_X1_HW1_LAST_TLS_GD, IMM16_X0_HW2_LAST_TLS_GD,
-	IMM16_X1_HW2_LAST_TLS_GD, IMM16_X0_HW0_TLS_IE,
-	IMM16_X1_HW0_TLS_IE, IMM16_X0_HW1_TLS_IE, IMM16_X1_HW1_TLS_IE,
-	IMM16_X0_HW2_TLS_IE, IMM16_X1_HW2_TLS_IE, IMM16_X0_HW3_TLS_IE,
-	IMM16_X1_HW3_TLS_IE, IMM16_X0_HW0_LAST_TLS_IE,
-	IMM16_X1_HW0_LAST_TLS_IE, IMM16_X0_HW1_LAST_TLS_IE,
-	IMM16_X1_HW1_LAST_TLS_IE, IMM16_X0_HW2_LAST_TLS_IE,
-	IMM16_X1_HW2_LAST_TLS_IE, TLS_DTPMOD64, TLS_DTPOFF64, TLS_TPOFF64,
-	TLS_DTPMOD32, TLS_DTPOFF32, TLS_TPOFF32}
-	* targets.c (bfd_elf32_tilegx_vec): Declare.
-	(bfd_elf32_tilepro_vec): Declare.
-	(bfd_elf64_tilegx_vec): Declare.
-	(bfd_target_vector): Add bfd_elf32_tilegx_vec, bfd_elf32_tilepro_vec,
-	and bfd_elf64_tilegx_vec.
-	* cpu-tilegx.c: New file.
-	* cpu-tilepro.c: New file.
-	* elf32-tilepro.h: New file.
-	* elf32-tilepro.c: New file.
-	* elf32-tilegx.c: New file.
-	* elf32-tilegx.h: New file.
-	* elf64-tilegx.c: New file.
-	* elf64-tilegx.h: New file.
-	* elfxx-tilegx.c: New file.
-	* elfxx-tilegx.h: New file.
-
-2011-06-13  Alan Modra  <amodra at gmail.com>
-
-	* linker.c (bfd_link_hash_traverse): Follow warning symbol link.
-	(_bfd_generic_link_write_global_symbol, fix_syms): Don't handle
-	warning symbols here.
-	* elf-m10300.c (elf32_mn10300_finish_hash_table_entry): Likewise.
-	* elf32-arm.c (allocate_dynrelocs_for_symbol,
-	elf32_arm_readonly_dynrelocs): Likewise.
-	* elf32-bfin.c (bfin_discard_copies): Likewise.
-	* elf32-cris.c (elf_cris_adjust_gotplt_to_got,
-	elf_cris_discard_excess_dso_dynamics,
-	elf_cris_discard_excess_program_dynamics): Likewise.
-	* elf32-hppa.c (allocate_plt_static, allocate_dynrelocs,
-	clobber_millicode_symbols, readonly_dynrelocs): Likewise.
-	* elf32-i370.c (i370_elf_adjust_dynindx): Likewise.
-	* elf32-i386.c (elf_i386_allocate_dynrelocs,
-	elf_i386_readonly_dynrelocs): Likewise.
-	* elf32-lm32.c (allocate_dynrelocs, readonly_dynrelocs): Likewise.
-	* elf32-m32c.c (m32c_relax_plt_check, m32c_relax_plt_realloc): Likewise.
-	* elf32-m32r.c (allocate_dynrelocs, readonly_dynrelocs): Likewise.
-	* elf32-m68k.c (elf_m68k_discard_copies): Likewise.
-	* elf32-microblaze.c (allocate_dynrelocs): Likewise.
-	* elf32-ppc.c (allocate_dynrelocs, maybe_set_textrel): Likewise.
-	* elf32-s390.c (allocate_dynrelocs, readonly_dynrelocs): Likewise.
-	* elf32-score.c (score_elf_sort_hash_table_f): Likewise.
-	* elf32-score7.c (score_elf_sort_hash_table_f): Likewise.
-	* elf32-sh.c (allocate_dynrelocs, readonly_dynrelocs): Likewise.
-	* elf32-tic6x.c (elf32_tic6x_allocate_dynrelocs,
-	elf32_tic6x_readonly_dynrelocs): Likewise.
-	* elf32-vax.c (elf_vax_discard_copies): Likewise.
-	* elf32-xstormy16.c (xstormy16_relax_plt_check,
-	xstormy16_relax_plt_realloc): Likewise.
-	* elf32-xtensa.c (elf_xtensa_allocate_dynrelocs): Likewise.
-	* elf64-alpha.c (elf64_alpha_output_extsym,
-	elf64_alpha_calc_got_offsets_for_symbol,
-	elf64_alpha_calc_dynrel_sizes, elf64_alpha_size_rela_got_1): Likewise.
-	* elf64-hppa.c (elf64_hppa_mark_exported_functions,
-	allocate_global_data_opd, elf64_hppa_mark_milli_and_exported_functions,
-	elf_hppa_unmark_useless_dynamic_symbols,
-	elf_hppa_remark_useless_dynamic_symbols): Likewise.
-	* elf64-ppc.c (ppc64_elf_gc_mark_dynamic_ref, func_desc_adjust,
-	adjust_opd_syms, adjust_toc_syms, allocate_dynrelocs,
-	readonly_dynrelocs, merge_global_got, reallocate_got,
-	undo_symbol_twiddle): Likewise.
-	* elf64-s390.c (allocate_dynrelocs, readonly_dynrelocs): Likewise.
-	* elf64-sh64.c (sh64_elf64_discard_copies): Likewise.
-	* elf64-x86-64.c (elf_x86_64_allocate_dynrelocs,
-	elf_x86_64_readonly_dynrelocs): Likewise.
-	* elflink.c (elf_link_renumber_hash_table_dynsyms,
-	elf_link_renumber_local_hash_table_dynsyms, _bfd_elf_export_symbol,
-	_bfd_elf_link_find_version_dependencies,
-	_bfd_elf_link_assign_sym_version, _bfd_elf_adjust_dynamic_symbol,
-	_bfd_elf_link_sec_merge_syms, elf_adjust_dynstr_offsets,
-	elf_collect_hash_codes, elf_collect_gnu_hash_codes,
-	elf_renumber_gnu_hash_syms, elf_gc_sweep_symbol,
-	elf_gc_propagate_vtable_entries_used,
-	elf_gc_smash_unused_vtentry_relocs, bfd_elf_gc_mark_dynamic_ref_symbol,
-	elf_gc_allocate_got_offsets): Likewise.
-	* elfnn-ia64.c (elfNN_ia64_global_dyn_info_free,
-	elfNN_ia64_global_dyn_sym_thunk): Likewise.
-	* elfxx-mips.c (mips_elf_check_symbols, mips_elf_output_extsym,
-	mips_elf_sort_hash_table_f, allocate_dynrelocs): Likewise.
-	* elfxx-sparc.c (allocate_dynrelocs, readonly_dynrelocs): Likewise.
-	* i386linux.c (linux_tally_symbols): Likewise.
-	* m68klinux.c (linux_tally_symbols): Likewise.
-	* sparclinux.c (linux_tally_symbols): Likewise.
-	* sunos.c (sunos_scan_dynamic_symbol): Likewise.
-	* xcofflink.c (xcoff_post_gc_symbol): Likewise.
-
-	* elflink.c (elf_link_output_extsym): Make it a bfd_hash_traverse
-	function.  Update all callers.
-	* aoutx.h (aout_link_write_other_symbol): Likewise.
-	* pdp11.c (aout_link_write_other_symbol): Likewise.
-	* cofflink.c (_bfd_coff_write_global_sym): Likewise.
-	* ecoff.c (ecoff_link_write_external): Likewise.
-	* xcofflink.c (xcoff_write_global_symbol): Likewise.
-	* vms-alpha.c (alpha_vms_link_output_symbol): Likewise.  Handle
-	warning symbols.
-	* ecoff.c (ecoff_link_hash_traverse): Delete.
-	* coff-ppc.c (ppc_bfd_coff_final_link): Use bfd_hash_traverse for
-	_bfd_coff_write_global_sym.
-	* libcoff-in.h (_bfd_coff_write_global_sym): Update prototype.
-	* libcoff.h: Regenerate.
-
-2011-06-10  Nick Clifton  <nickc at redhat.com>
-
-	* elflink.c (_bfd_elf_link_create_dynamic_sections): If the
-	backend does not provide a function for creating dynamic sections
-	then fail.
-	(bfd_elf_final_link): Issue a warning message if a dynamic section
-	has the SHT_NOTE type.
-	(bfd_elf_final_link): Do not look for dynamic strings in a section
-	that does not have the SHT_STRTAB type or the name .dynstr.
-	* elf32-arm.c (elf32_arm_finish_dynamic_sections): Fail if the got
-	section is not in the output binary.
-	* elf32-hppa.c (elf32_hppa_finish_dynamic_sections): Likewise.
-
-2011-06-09  Tristan Gingold  <gingold at adacore.com>
-
-	* elfnn-ia64.c (elfNN_ia64_relax_section, elfNN_ia64_choose_gp)
-	(elfNN_ia64_relocate_section, elfNN_vms_object_p): Remove trailing
-	spaces.
-
-2011-06-09  Tristan Gingold  <gingold at adacore.com>
-
-	* bfd.c (bfd_get_sign_extend_vma): Handle aixcoff.
-
-2011-06-09  Nick Clifton  <nickc at redhat.com>
-
-	PR ld/12845
-	* elf.c (_bfd_elf_init_private_section_data): Add an assertion
-	that the output section has an allocated bfd_elf_section_data
-	structure.
-	* elfxx-mips.c (mips_elf_check_symbols): Do not create a stub for
-	symbols in sections that have been removed by garbage collection.
-
-2011-06-08  H.J. Lu  <hongjiu.lu at intel.com>
-
-	* elf64-x86-64.c (elf_x86_64_check_relocs): Allow R_X86_64_64
-	relocations in SEC_DEBUGGING sections when building shared
-	libraries.
+	* configure: Ditto.
+	* bfd-in2.h: Ditto.
+	* libbfd.h: Ditto.
+	Added files for XGATE relocations.
+	* elf32-xgate.c: Created minimal relocation file.
+	* elf32-xgate.h: Created minimal header file for elf32-xgate.
 
-2011-06-08  H.J. Lu  <hongjiu.lu at intel.com>
+2012-05-03  Tristan Gingold  <gingold at adacore.com>
 
-	PR ld/12851
-	* elflink.c (elf_gc_sweep): Don't check SHT_NOTE sections here.
-	(bfd_elf_gc_sections): Also check SHT_NOTE sections.
+	* dwarf2.c (decode_line_info): Ignore
+	DW_LNE_HP_source_file_correlation.
 
-2011-06-08  Tristan Gingold  <gingold at adacore.com>
+2012-05-01  Nick Clifton  <nickc at redhat.com>
 
-	* makefile.vms (OBJS): Add elfxx-ia64.obj
-	Remove vax case.
+	PR binutils/13121
+	* aoutx.h: Rename 'finfo' to 'flaginfo' to avoid conflicts with
+	AIX system headers.
+	* coff-ppc.c: Likewise.
+	* cofflink.c: Likewise.
+	* elf32-arm.c: Likewise.
+	* elf64-sparc.c: Likewise.
+	* elflink.c: Likewise.
+	* pdp11.c: Likewise.
+	* rescoff.c: Likewise.
+
+2012-04-26  Mark Wielaard  <mjw at redhat.com>
+
+	* dwarf2.c (scan_unit_for_symbols): Account for DW_AT_high_pc
+	possibly being relative to DW_AT_low_pc.
+	(parse_comp_unit): Likewise.
+
+2012-04-26  Andreas Schwab  <schwab at linux-m68k.org>
+
+	* elf32-m68k.c (elf_m68k_check_relocs): Mark non-GOT references
+	also when generating PIE.
+	(elf_m68k_discard_copies): Mark undefined weak symbols referenced
+	by relocations as dynamic.
+
+2012-04-26  Hans-Peter Nilsson  <hp at axis.com>
+
+	Provide a way for programs to recognize BFD_ASSERT calls.
+	* bfd.c (bfd_assert_handler_type): New API type.
+	(bfd_set_assert_handler, bfd_get_assert_handler): New API functions.
+	(_bfd_assert_handler): New variable.
+	(_bfd_default_assert_handler): New function.
+	(bfd_assert): Call _bfd_assert_handler, not _bfd_error_handler.
+	* libbfd-in.h (_bfd_assert_handler): Declare.
+	* libbfd.h, bfd-in2.h: Regenerate.
+
+2012-04-24  Hans-Peter Nilsson  <hp at axis.com>
+
+	PR ld/13990
+	* elf32-arm.c (elf32_arm_gc_sweep_hook): Handle a forced-local
+	symbol, where PLT refcount is set to -1.
+
+2012-04-24  Alan Modra  <amodra at gmail.com>
+
+	PR ld/13991
+	* elf-bfd.h (_bfd_elf_link_just_syms): Define as
+	_bfd_generic_link_just_syms.
+	* elflink.c (_bfd_elf_link_just_syms): Delete.
+	* linker.c (_bfd_generic_link_just_syms): Set sec_info_type.
+
+	* bfd-in.h (discarded_section): Renamed from elf_discarded_section.
+	* section.c (SEC_INFO_TYPE_NONE, SEC_INFO_TYPE_STABS,
+	SEC_INFO_TYPE_MERGE, SEC_INFO_TYPE_EH_FRAME,
+	SEC_INFO_TYPE_JUST_SYMS): Renamed from corresponding ELF_INFO_TYPE.
+	* elf-eh-frame.c, * elf-m10200.c, * elf-m10300.c,
+	* elf.c, * elf32-arm.c, * elf32-avr.c, * elf32-bfin.c,
+	* elf32-cr16.c, * elf32-cr16c.c, * elf32-cris.c,
+	* elf32-crx.c, * elf32-d10v.c, * elf32-epiphany.c,
+	* elf32-fr30.c, * elf32-frv.c, * elf32-h8300.c,
+	* elf32-hppa.c, * elf32-i370.c, * elf32-i386.c,
+	* elf32-i860.c, * elf32-ip2k.c, * elf32-iq2000.c,
+	* elf32-lm32.c, * elf32-m32c.c, * elf32-m32r.c,
+	* elf32-m68hc1x.c, * elf32-m68k.c, * elf32-mcore.c,
+	* elf32-mep.c, * elf32-moxie.c, * elf32-msp430.c,
+	* elf32-mt.c, * elf32-openrisc.c, * elf32-ppc.c,
+	* elf32-rl78.c, * elf32-rx.c, * elf32-s390.c,
+	* elf32-score.c, * elf32-score7.c, * elf32-sh.c,
+	* elf32-spu.c, * elf32-tic6x.c, * elf32-tilepro.c,
+	* elf32-v850.c, * elf32-vax.c, * elf32-xc16x.c,
+	* elf32-xstormy16.c, * elf32-xtensa.c, * elf64-alpha.c,
+	* elf64-hppa.c, * elf64-ia64-vms.c, * elf64-mmix.c,
+	* elf64-ppc.c, * elf64-s390.c, * elf64-sh64.c,
+	* elf64-x86-64.c, * elflink.c, * elfnn-ia64.c,
+	* elfxx-mips.c, * elfxx-sparc.c, * elfxx-tilegx.c,
+	* reloc.c: Update all references.
+	* bfd-in2.h: Regenerate.
 
-2011-06-08  Alan Modra  <amodra at gmail.com>
+2012-04-20  Andreas Krebbel  <Andreas.Krebbel at de.ibm.com>
 
-	* aix386-core.c, * cisco-core.c, * hpux-core.c, * osf-core.c,
-	* sco5-core.c: Init match_priority field.
+	* elf32-s390.c (ELF_DYNAMIC_INTERPRETER): Set to the GCC default.
+	* elf64-s390.c (ELF_DYNAMIC_INTERPRETER): Set to the GCC default.
 
-2011-06-08  Alan Modra  <amodra at gmail.com>
+2012-04-19  Thomas Schwinge  <thomas at codesourcery.com>
 
-	* elflink.c (_bfd_elf_archive_symbol_lookup): Follow warning and
-	indirect links here.
+	* elf32-sh.c (elf_sh_link_hash_entry): Specify an enum identifier for
+	got_type.
+	(allocate_dynrelocs, sh_elf_relocate_section, sh_elf_check_relocs): Use
+	it.
 
-2011-06-07  Joel Brobecker  <brobecker at adacore.com>
+2012-04-17  Kaz Kojima  <kkojima at rr.iij4u.or.jp>
 
-	* irix-core.c (irix_core_vec): Add match_priority field.
+	* elf32-sh.c (allocate_dynrelocs): Don't allocate dynamic
+	relocations when LE conversion happens on the IE tls symbol.
 
-2011-06-06  Alan Modra  <amodra at gmail.com>
+2012-04-17  Roland McGrath  <mcgrathr at google.com>
 
-	* targets.c (bfd_target): Make ar_max_namelen an unsigned char.
-	Add match_priority.
-	* configure.in: Bump bfd version.
-	* elfcode.h (elf_object_p): Delete hacks preventing match of
-	EM_NONE and ELFOSABI_NONE targets when a better match exists.
-	* elfxx-target.h (elf_match_priority): Define and use.
-	* format.c (bfd_check_format_matches): Use target match_priority
-	to choose best of multiple matching targets.  In cases with multiple
-	matches rerun _bfd_check_format if we don't choose the last match.
-	* aout-adobe.c, * aout-arm.c, * aout-target.h, * aout-tic30.c,
-	* binary.c, * bout.c, * coff-alpha.c, * coff-i386.c, * coff-i860.c,
-	* coff-i960.c, * coff-ia64.c, * coff-mips.c, * coff-or32.c,
-	* coff-ppc.c, * coff-rs6000.c, * coff-sh.c, * coff-tic30.c,
-	* coff-tic54x.c, * coff-x86_64.c, * coff64-rs6000.c, * coffcode.h,
-	* i386msdos.c, * i386os9k.c, * ieee.c, * ihex.c, * mach-o-target.c,
-	* mipsbsd.c, * mmo.c, * nlm-target.h, * oasys.c, * pdp11.c,
-	* pe-mips.c, * pef.c, * plugin.c, * ppcboot.c, * som.c, * srec.c,
-	* tekhex.c, * trad-core.c, * verilog.c, * versados.c, * vms-alpha.c,
-	* vms-lib.c, * xsym.c: Init match_priority field.
-	* configure: Regenerate.
-	* bfd-in2.h: Regenerate.
+	* elf64-x86-64.c (elf_x86_64_nacl_plt0_entry): Fix nop padding
+	so that 32-byte boundary is a proper instruction boundary.
 
-2011-06-04  H.J. Lu  <hongjiu.lu at intel.com>
+2012-04-17  Tristan Gingold  <gingold at adacore.com>
 
-	PR ld/12842
-	* elfcode.h (elf_object_p): Revert the last change.
+	* vms-lib.c (_bfd_vms_lib_get_module): Append .obj extension to
+	member of an object archive.<
 
-2011-06-04  Alan Modra  <amodra at gmail.com>
+2012-04-17  Tristan Gingold  <gingold at adacore.com>
 
-	* archures.c (bfd_arch_get_compatible): If one arch is unknown,
-	return the other arch.
-	* elfcode.h (elf_object_p): Allow explicit match to generic ELF
-	target.
+	* vms-lib.c (MAX_EKEYLEN): Define.
+	(MAX_KEYLEN): Fix value.
+	(vms_write_index): Add comments and fix indentation.
+	Adjust comparaison.  Add assertions.  Free kbn_blk.
+	(_bfd_vms_lib_write_archive_contents): Use MAX_EKEYLEN.
+	Compense MAX_KEYLEN adjustment.
 
-2011-06-03  Bertram Felgenhauer  <bertram.felgenhauer at gmail.com>
+2012-04-16  Maciej W. Rozycki  <macro at linux-mips.org>
 
-	PR ld/12682
-	* hash.c (higher_primer_number): Add more, small, prime numbers.
-	(bfd_hash_set_default_size): Likewise.
+	* elfxx-mips.c (mips16_stub_symndx): Handle n64 compound relocs.
+	(_bfd_mips_elf_check_relocs): Update accordingly.
 
-2011-06-02  Nick Clifton  <nickc at redhat.com>
+2012-04-13  Alan Modra  <amodra at gmail.com>
 
-	* coff-mcore.c: Fix spelling typo.
-	* coff-stgo32.c: Likewise.
-	* elf32-arm.c: Likewise.
-	* elf32-avr.c: Likewise.
-	* elf-m68hc1x.c: Likewise.
-	* elf32-mcore.c: Likewise.
-	* elf32-mep.c: Likewise.
-	* elf32-mt.c: Likewise.
-	* elf32-ppc.c: Likewise.
-	* elf32-xtensa.c: Likewise.
-	* elf64-ppc.c: Likewise.
-	* elfxx-mips.c: Likewise.
-	* netbsd.h: Likewise.
-	* nlmcode.h: Likewise.
-	* vms-alpha.c: Likewise.
-	* po/bfd.pot: Regenerate.
-	* po/SRC-POTFILES.in: Regenerate.
+	PR ld/13947
+	* elflink.c (bfd_elf_final_link): Set reloc_count to 0 for
+	reloc sections.
 
-2011-06-01  DJ Delorie  <dj at redhat.com>
+2012-04-12  David S. Miller  <davem at davemloft.net>
 
-	* config.bfd: Add bfd_elf32_rx_be_ns_vec.
-	* target.c: Likewise.
+	* reloc.c (BFD_RELOC_SPARC_H34, BFD_RELOC_SPARC_SIZE32,
+	BFD_RELOC_SPARC_SIZE64, BFD_RELOC_SPARC_WDISP10): New relocs.
+	* libbfd.h: Regenerate.
+	* bfd-in2.h: Likewise.
+	* elfxx-sparc.c (sparc_elf_wdisp10_reloc): New function.
+	(_bfd_sparc_elf_howto_table): Add entries for R_SPARC_H34,
+	R_SPARC_SIZE32, R_SPARC_64, and R_SPARC_WDISP10.
+	(_bfd_sparc_elf_reloc_type_lookup): Handle new relocs.
+	(_bfd_sparc_elf_check_relocs): Likewise.
+	(_bfd_sparc_elf_gc_sweep_hook): Likewise.
+	(_bfd_sparc_elf_relocate_section): Likewise.
+
+2012-04-12  Roland McGrath  <mcgrathr at google.com>
+
+	* elf32-arm.c (elf32_arm_nacl_plt0_entry, elf32_arm_nacl_plt_entry):
+	New variables.
+	(struct elf32_arm_link_hash_table): New member `nacl_p'.
+	(elf32_arm_link_hash_table_create): Initialize it.
+	(elf32_arm_nacl_link_hash_table_create): New function.
+	(arm_movw_immediate, arm_movt_immediate): New functions.
+	(elf32_arm_populate_plt_entry): Test HTAB->nacl_p.
+	(elf32_arm_finish_dynamic_sections): Likewise.
+	(elf32_arm_output_plt_map_1): Likewise.
+	(bfd_elf32_littlearm_nacl_vec, bfd_elf32_bigarm_nacl_vec):
+	New backend vector stanza.
+	(elf32_arm_nacl_modify_segment_map): New function.
+	* config.bfd: Handle arm-*-nacl*, armeb-*-nacl*.
+	* targets.c: Support bfd_elf32_{big,little}_nacl_vec.
 	* configure.in: Likewise.
-	* configure.in: Regenerate.
-	* elf32-rx.c: Add elf32-rx-be-ns target.
-	(rx_elf_object_p): Never allow the be-ns target by default,
-	only allow it if the user requests it.
-
-2011-06-01  H.J. Lu  <hongjiu.lu at intel.com>
-
-	* elf32-i386.c (elf_i386_size_dynamic_sections): Properly warn
-	relocation in readonly section in a shared object.
-	* elf64-x86-64.c (elf_x86_64_size_dynamic_sections): Likewise.
-
-2011-05-31  Nick Clifton  <nickc at redhat.com>
-
-	* archive.c (adjust_relative_path): Fix comment to prevent it
-	corrupting the auto-generated bfd.h.
-
-2011-05-31  Paul Brook  <paul at codesourcery.com>
-
-	* elf32-arm.c (elf32_arm_final_link_relocate): Only do bl conversion
-	for known functions.
-	(elf32_arm_swap_symbol_in): Only set ST_BRANCH_TO_ARM for function
-	symbols.
+	(bfd_elf32_bigarm_nacl_vec): Add elf-nacl.lo here.
+	(bfd_elf32_littlearm_nacl_vec): Likewise.
+	(bfd_elf32_bigarm_vec, bfd_elf32_littlearm_vec): Likewise.
+	(bfd_elf32_bigarm_symbian_vec): Likewise.
+	(bfd_elf32_littlearm_symbian_vec): Likewise.
+	(bfd_elf32_bigarm_vxworks_vec): Likewise.
+	(bfd_elf32_littlearm_vxworks_vec): Likewise.
+	* configure: Regenerated.
 
-2011-05-31  Paul Brook  <paul at codesourcery.com>
-
-	* elf32-arm.c (arm_stub_is_thumb): Add
-	arm_stub_long_branch_v4t_thumb_tls_pic.
-	(elf32_arm_final_link_relocate): TLS stubs are always ARM.
-	Handle Thumb stubs.
-
-2011-05-27  Nick Clifton  <nickc at redhat.com>
-
-	PR binutils/12710
-	* archive.c (_bfd_get_elt_at_filepos): Set correct error value if
-	unable to read a file pointed to by an entry in a thin archive.
-	(adjust_relative_path): Use lrealpath to canonicalize paths.
-	Handle the case where the reference path is above the current
-	path in the directory tree.
-
-2011-05-26  H.J. Lu  <hongjiu.lu at intel.com>
-
-	PR ld/12809
-	* elf64-x86-64.c (elf_x86_64_relocate_section): Handle
-	R_X86_64_TPOFF64 in executable.
-
-2011-05-26  Alan Modra  <amodra at gmail.com>
-
-	* elf-bfd.h (SYMBOL_REFERENCES_LOCAL): Remove most of comment.
-	* elflink.c (_bfd_elf_symbol_refs_local_p): Expand
-	local_protected comment.
-
-2011-05-25  Tristan Gingold  <gingold at adacore.com>
-
-	* configure.in (bfd_elf32_ia64_big_vec, bfd_elf32_ia64_hpux_big_vec)
-	(bfd_elf64_ia64_big_vec, bfd_elf64_ia64_hpux_big_vec)
-	(bfd_elf64_ia64_little_vec, bfd_elf64_ia64_vms_vec): Add elfxx-ia64.lo
-	* Makefile.am (BFD64_BACKENDS): Add elfxx-ia64.lo
-	(BFD64_BACKENDS_CFILES): Add elfxx-ia64.c
-	(elf32-ia64.c): Created from elfnn-ia64.c
-	(elf64-ia64.c): Likewise.
-	* elfxx-ia64.h: New file.
-	* elfxx-ia64.c: Split with elfnn-ia64.c.  Keep only the following
-	functions.Includes elfxx-ia64.h.
-	(elfNN_ia64_reloc): Renames to ia64_elf_reloc.  Adjust error message.
-	(IA64_HOWTO): Adjust.
-	(lookup_howto): Renames to ia64_elf_lookup_howto.  Make it public.
-	(elfNN_ia64_reloc_type_lookup): Renames to
-	ia64_elf_reloc_type_lookup. Make it public. Adjust calls.
-	(elfNN_ia64_reloc_name_lookup): Renames to
-	ia64_elf_reloc_name_lookup. Make it public.
-	(elfNN_ia64_relax_br): Renames to ia64_elf_relax_br.  Make it public.
-	(elfNN_ia64_relax_brl): Renames to ia64_elf_relax_brl. Make it
-	public.
-	(elfNN_ia64_relax_ldxmov): Renames to ia64_elf_relax_ldxmov.
-	Move it and make it public.  Move prototype to elfxx-ia64.h
-	(elfNN_ia64_install_value): Renames to ia64_elf_install_value.
-	Move prototype to elfxx-ia64.h
-	* elfnn-ia64.c: New file, split from elfxx-ia64.c.
-	(elfNN_ia64_info_to_howto): Adjust calls.
-	(elfNN_ia64_relax_section): Adjust calls.
-	(count_dyn_reloc): Fix typo.
-	(elfNN_ia64_relocate_section): Adjust calls.
-	(elfNN_ia64_finish_dynamic_symbol): Likewise.
-	(bfd_elfNN_bfd_reloc_type_lookup)
-	(bfd_elfNN_bfd_reloc_name_lookup): Adjust macros.
+2012-04-12  Tristan Gingold  <gingold at adacore.com>
+
+	* elflink.c (elf_link_output_extsym): Add a guard.
+	(bfd_elf_final_link): Remove assertion.
+	(bfd_elf_final_link): Add a guard.
+	* elfnn-ia64.c (INCLUDE_IA64_VMS): Removed.
+	(elfNN_vms_section_from_shdr, elfNN_vms_object_p)
+	(elfNN_vms_post_process_headers, elfNN_vms_section_processing)
+	(elfNN_vms_final_write_processing, elfNN_vms_close_and_cleanup):
+	Remove.
+	(elfNN-ia64-vms target): Move to ...
+	* elf64-ia64-vms.c: New file.
+	* configure.in (bfd_elf64_ia64_vms_vec): Add elf64-ia64-vms.lo
+	* Makefile.am (BFD64_BACKENDS): Add elf64-ia64-vms.lo.
+	(BFD64_BACKENDS_CFILES): Ad elf64-ia64-vms.c.
 	* configure: Regenerate.
 	* Makefile.in: Regenerate.
 
-2011-05-23  DJ Delorie  <dj at redhat.com>
-
-	* elf32-rx.c (rx_elf_object_p): When reading an RX object in, undo
-	the vma/lma swapping done in elf32_rx_modify_program_headers.
+2012-04-11  Nick Clifton  <nickc at redhat.com>
 
-2011-05-23  Nick Clifton  <nickc at redhat.com>
+	PR binutils/13897
+	* elf64-ppc.c (opd_entry_value): When dealing with sections
+	without relocs, keep the last section loaded in order to avoid
+	unnecessary reloads.
 
-	* elf-m10300.c (mn10300_elf_mkobject): New function.
-	(bfd_elf32_mkobject): Define.
+2012-04-09  Roland McGrath  <mcgrathr at google.com>
 
-2011-05-23  Alan Modra  <amodra at gmail.com>
+	* elf.c (_bfd_elf_map_sections_to_segments): Set INFO->user_phdrs.
+	* elf-nacl.c (nacl_modify_segment_map): Do nothing if INFO->user_phdrs.
+	(nacl_modify_program_headers): Likewise.
 
-	* elf-bfd.h: Comment typo fix.
-	* elf32-ppc.c (struct ppc_elf_dyn_relocs): Delete.  Replace with
-	struct elf_dyn_relocs throughout.
-	* elf64-ppc.c (struct ppc_dyn_relocs): Likewise.
+2012-04-03  Roland McGrath  <mcgrathr at google.com>
 
-2011-05-23  Alan Modra  <amodra at gmail.com>
-
-	* elf32-frv.c: Use info->callbacks->einfo throughout file in linker
-	functions rather than warning callback or _bfd_error_handler.
-	* elf32-ppc.c: Likewise.
-	* elf64-ppc.c: Likewise.
-	* elf32-ppc.c (ppc_elf_tls_optimize): Use %H in __tls_get_addr lost
-	arg error.
-	* elf64-ppc.c (ppc64_elf_tls_optimize): Likewise.
-
-2011-05-23  Alan Modra  <amodra at gmail.com>
-
-	PR 12763
-	* elf.c (assign_file_positions_for_load_sections): Set sh_offset for
-	.tbss, and page align same for all SHT_NOBITS sections.
-
-2011-05-21  Alan Modra  <amodra at gmail.com>
-
-	PR 12763
-	* elf.c (_bfd_elf_make_section_from_shdr): Set up TLS section LMAs
-	from PT_TLS header.
-	(_bfd_elf_map_sections_to_segments): Don't create a final PT_LOAD
-	segment if just for .tbss.
-	(assign_file_positions_for_load_sections): Don't report "can't
-	allocate in segment" errors for .tbss.
-	(assign_file_positions_for_non_load_sections): Don't set p_filesz
-	from SHT_NOBITS section filepos.
-
-2011-05-20  Bernd Schmidt  <bernds at codesourcery.com>
-
-	* elf32-tic6x.c (elf32_tic6x_howto_table): Add entries for
-	R_C6000_PCR_H16 and R_C6000_PCR_L16.
-	(elf32_tic6x_relocate_section): Handle them.
-
-2011-05-18  Nick Clifton  <nickc at redhat.com>
-
-	PR ld/12761
-	* elflink.c (elf_link_add_object_symbols): Process .gnu.warning
-	sections when building shared libraries.
-
-2011-05-18  Rafał Krypa  <r.krypa at samsung.com>
-
-	PR ld/12778
-	* elf32-arm.c (elf32_arm_gc_sweep_hook): Use the computed dynamic
-	reloc pointer.
-
-2011-05-18  Tristan Gingold  <gingold at adacore.com>
-
-	* xcofflink.c (xcoff_link_add_symbols): Handle C_DWARF symbols.
-	(xcoff_sweep): Always keep dwarf sections.
-	(xcoff_link_input_bfd): Handle dwarf symbols and sections.
-
-2011-05-18  Tristan Gingold  <gingold at adacore.com>
-
-	* libxcoff.h (struct xcoff_dwsect_name): New type.
-	(XCOFF_DWSECT_NBR_NAMES): New macro.
-	(xcoff_dwsect_names): Declare.
-	* coffcode.h (sec_to_styp_flags): Handle xcoff dwarf sections.
-	(styp_to_sec_flags): Ditto.
-	(coff_new_section_hook): Ditto.
-	(coff_slurp_symbol_table): Handle C_DWARF and C_INFO.
-	* coff-rs6000.c (xcoff_dwsect_name): New variable.
-
-2011-05-17  Tomohiro Kashiwada  <kikairoya at gmail.com>
-
-	PR ld/12759
-	* elf32-rx.c (ignore_lma): New variable.
-	(bfd_elf32_rx_set_target_flags): Add ignore_lma parameter.
-	(rx_modify_program_headers): Only copy the LMA into the VMA if
-	ignore_lma is true.
-
-2011-05-17  Alan Modra  <amodra at gmail.com>
-
-	PR ld/12760
-	* coff-aux.c (coff_m68k_aux_link_add_one_symbol): Adjust "notice" call.
-	* elflink.c (elf_link_add_object_symbols): Likewise.
-	* linker.c (_bfd_generic_link_add_one_symbol): Likewise.
-
-2011-05-16  Alan Modra  <amodra at gmail.com>
-
-	* linker.c (_bfd_generic_link_add_one_symbol): Don't init u.undef.weak.
-
-2011-05-15  Richard Sandiford  <rdsandiford at googlemail.com>
-
-	* elfxx-mips.c (_bfd_mips_elf_check_relocs): Record both local and
-	global GOT entries for GOT_PAGE relocations against global symbols.
-
-2011-05-13  Bernd Schmidt  <bernds at codesourcery.com>
-
-	* config.bfd (tic6x-*-elf, tic6x-*-uclinux): New.
-	(tic6x-*-*): Replaced by these.
-	* elf32-tic6x.c (elf32_tic6x_set_osabi): New static function.
-	(elf32_tic6x_check_relocs): Create dynamic sections if -shared.
-	(elf_backend_relocs_compatible, elf_backend_post_process_headers):
-	Define.
-	(elf32_bed, TARGET_LITTLE_SYM, TARGET_LITTLE_NAME, TARGET_BIG_SYM,
-	TARGET_BIG_NAME, ELF_OSABI): Redefine twice, and include
-	"elf32-target.h" two more times.
-	* configure.in: Handle bfd_elf32_tic6x_linux_be_vec,
-	bfd_elf32_tic6x_linux_le_vec, bfd_elf32_tic6x_elf_be_vec and
-	bfd_elf32_tic6x_elf_le_vec.
-	* configure: Regenerate.
-
-2011-05-13  Jan Beulich  <jbeulich at novell.com>
-
-	* config.bfd: Add targets x86_64-*-pe and x86_64-*-pep.
-
-2011-05-12  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* config.in: Regenerated.
+	* elf-nacl.c: New file.
+	* elf-nacl.h: New file.
+	* elf32-i386.c (elf_backend_modify_segment_map): Define for
+	bfd_elf32_i386_nacl_vec.
+	(elf_backend_modify_program_headers): Likewise.
+	* elf64-x86-64.c (elf_backend_modify_segment_map): Define for
+	bfd_elf64_x86_64_nacl_vec and bfd_elf32_x86_64_nacl_vec.
+	(elf_backend_modify_program_headers): Likewise.
+	* Makefile.am (BFD32_BACKENDS, BFD64_BACKENDS): Add elf-nacl.lo here.
+	(BFD32_BACKENDS_CFILES, BFD64_BACKENDS_CFILES): Add elf-nacl.c here.
+	* Makefile.in: Regenerated.
+	* configure.in (bfd_elf64_x86_64_nacl_vec): Add elf-nacl.o to tb here.
+	(bfd_elf32_x86_64_nacl_vec): Likewise.
+	(bfd_elf64_x86_64_vec, bfd_elf32_x86_64_vec): Likewise.
+	(bfd_elf64_x86_64_freebsd_vec, bfd_elf64_x86_64_sol2_vec): Likewise.
+	(bfd_elf64_l1om_vec, bfd_elf64_l1om_freebsd_vec): Likewise.
+	(bfd_elf64_k1om_vec, bfd_elf64_k1om_freebsd_vec): Likewise.
+	(bfd_elf32_i386_nacl_vec): Likewise.
+	(bfd_elf32_i386_sol2_vec, bfd_elf32_i386_freebsd_vec): Likewise.
+	(bfd_elf32_i386_vxworks_vec, bfd_elf32_i386_vec): Likewise.
 	* configure: Regenerated.
-	* configure.in: New tests for HAVE_PRPSINFO_T_PR_PID,
-	HAVE_PRPSINFO32_T_PR_PID, HAVE_PSINFO_T_PR_PID and
-	HAVE_PSINFO32_T_PR_PID.
-	* elf.c (elfcore_grok_psinfo): Protect reading psinfo.pr_pid by
-	HAVE_PRPSINFO_T_PR_PID, HAVE_PRPSINFO32_T_PR_PID, HAVE_PSINFO_T_PR_PID
-	and HAVE_PSINFO32_T_PR_PID.
-	* hosts/x86-64linux.h (HAVE_PRPSINFO32_T_PR_PID): New redefinition.
 
-2011-05-10  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-03-31  Andreas Schwab  <schwab at linux-m68k.org>
 
-	* elf.c (elfcore_grok_psinfo): Initialize CORE_PID for both native and
-	32bit psinfo.
-	* elf32-ppc.c (ppc_elf_grok_psinfo): Initialize core_pid.
-	* elf64-ppc.c (ppc64_elf_grok_psinfo): Likewise.
+	* elf32-m68k.c (elf_m68k_relocate_section): Allow
+	R_68K_TLS_LE{8,16,32} for PIE.
 
-2011-05-09  Paul Brook  <paul at codesourcery.com>
+2012-03-30  Andreas Krebbel  <Andreas.Krebbel at de.ibm.com>
 
-	* bfd-in.h (elf32_tic6x_fix_exidx_coverage): Add prototype.
-	* bfd-in2.h: Regenerate.
-	* elf32-tic6x.c: Include limits.h.
-	(tic6x_unwind_edit_type, tic6x_unwind_table_edit,
-	_tic6x_elf_section_data): New.
-	(elf32_tic6x_section_data): Define.
-	(elf32_tic6x_new_section_hook): Allocate target specific data.
-	(elf32_tic6x_add_unwind_table_edit): New function.
-	(get_tic6x_elf_section_data, elf32_tic6x_adjust_exidx_size,
-	elf32_tic6x_insert_cantunwind_after, elf32_tic6x_add_low31,
-	elf32_tic6x_copy_exidx_entry): New functions.
-	(elf_backend_write_section): Define.
-
-2011-05-09  Paul Brook  <paul at codesourcery.com>
-
-	* elf32-tic6x.c (is_tic6x_elf_unwind_section_name,
-	elf32_tic6x_fake_sections): New functions.
-	(elf_backend_fake_sections): Define.
+	* elf64-s390.c: Fix several comments regarding PLT entry
+	description.
+	* elf32-s390.c: Likewise.
 
-2011-05-09  Paul Brook  <paul at codesourcery.com>
+2012-03-30  Andreas Krebbel  <Andreas.Krebbel at de.ibm.com>
 
-	* elf32-tic6x.c (elf32_tic6x_gc_mark_extra_sections): New function.
-	(elf_backend_gc_mark_extra_sections): Define.
+	* elf64-s390.c: Use the section pointer shortcuts in
+	elf_link_hash_table and remove them from the target specific
+	variant.
+	* elf32-s390.c: Likewise.
 
-2011-05-07  Dave Korn  <dave.korn.cygwin at gmail.com>
+2012-03-30  Andreas Krebbel  <Andreas.Krebbel at de.ibm.com>
 
-	PR ld/12365
-	* cofflink.c (bfd_coff_link_input_bfd): Check for and warn about
-	references to symbols defined in discarded sections.
+	* elf64-s390.c (elf_s390x_plt_entry, elf_s390x_first_plt_entry):
+	New definitions.
+	(PLT_PIC_ENTRY_WORD*, PLT_PIC12_ENTRY_WORD*): Remove.
+	(elf_s390_finish_dynamic_symbol): Use memcpy instead of bfd_put_32.
+	(elf_s390_finish_dynamic_sections): Likewise.
+	* elf32-s390.c (elf_s390_plt_entry, elf_s390_plt_pic_entry)
+	(elf_s390_plt_pic12_entry, elf_s390_plt_pic16_entry)
+	(elf_s390_plt_first_entry, elf_s390_plt_pic_first_entry): New definitions.
+	(PLT_PIC16_ENTRY_WORD*, PLT_ENTRY_WORD*)
+	(PLT_PIC_FIRST_ENTRY_WORD*, PLT_FIRST_ENTRY_WORD*): Remove.
 
-2011-05-07  Dave Korn  <dave.korn.cygwin at gmail.com>
+2012-03-30  Andreas Krebbel  <Andreas.Krebbel at de.ibm.com>
 
-	PR ld/12365
-	* coffgen.c (coff_write_symbol): Assume input section is its own
-	output section if output_section member not set.
-	(coff_write_alien_symbol): Likewise.
+	* elf32-s390.c (struct elf_s390_dyn_relocs): Remove.
+	Rename all occurrences in the file to elf_dyn_relocs.
+	* elf64-s390.c: Likewise.
 
-2011-05-07  H.J. Lu  <hongjiu.lu at intel.com>
+2012-03-30  Alan Modra  <amodra at gmail.com>
 
-	PR ld/12730
-	* elf.c (_bfd_elf_section_offset): Check SEC_ELF_REVERSE_COPY.
-
-	* elflink.c (elf_link_input_bfd): Reverse copy .ctors/.dtors
-	sections if needed.
-
-	* section.c (SEC_ELF_REVERSE_COPY): New.
-	* bfd-in2.h: Regenerated.
+	* elflink.c (_bfd_elf_gc_mark_reloc): Don't delve into dynamic
+	libraries.
 
-2011-05-07  Anders Kaseorg  <andersk at ksplice.com>
+2012-03-29  Alan Modra  <amodra at gmail.com>
 
-	PR 12739
-	* libbfd.c (bfd_get_8, bfd_get_signed_8): Use const cast.
+	* bfd-in.h (bfd_get_arch_size, bfd_get_sign_extend_vma): Delete.
 	* bfd-in2.h: Regenerate.
 
-2011-05-06  Tristan Gingold  <gingold at adacore.com>
-
-	* vms-alpha.c (evax_section_flags): Remove SEC_IN_MEMORY.
-	(_bfd_vms_slurp_egsd): Rename old_flags to vms_flags.  Handle
-	any code section.  Add comments.
-	(alpha_vms_object_p): Use void * instead of PTR.
-	(alpha_vms_create_eisd_for_section): Fix test for setting DZRO.
-	(build_module_list): Guard against no DST section.  Add comments.
-	(alpha_vms_link_output_symbol): Discard undefined symbols.
-	(alpha_vms_get_section_contents): Simply memcpy if the section was
-	already loaded.  Fix typo.
-	(vms_new_section_hook): Use void * instead of PTR.
-	(vms_alpha_vec): Ditto.
-
-2011-05-06  Richard Sandiford  <richard.sandiford at linaro.org>
-
-	* elf32-arm.c (cortex_a8_erratum_scan): If the stub is a Thumb
-	branch to a PLT entry, redirect it to the PLT's Thumb entry point.
-
-2011-05-05  Bernd Schmidt  <bernds at codesourcery.com>
-
-	* elf32-tic6x.c (elf32_tic6x_final_link): New function.
-	(elf32_tic6x_merge_attributes): Do not warn for PID or PIC
-	mismatch.  Choose the lower of the two values.
-	(bfd_elf32_bfd_final_link): New macro.
-
-2011-04-28  Tristan Gingold  <gingold at adacore.com>
-
-	* coff-rs6000.c (_bfd_xcoff_swap_aux_in): Adjust for x_file.
-	(bfd_xcoff_swap_aux_out): Ditto.
-	* coff64-rs6000.c (_bfd_xcoff64_swap_aux_in): Ditto.
-	(bfd_xcoff64_swap_aux_out): Ditto.
-
-2011-05-04  Alan Modra  <amodra at gmail.com>
-
-	PR ld/12727
-	* elf64-ppc.c (ppc_build_one_stub <ppc_sub_plt_call>): Clear
-	was_undefined on dot-symbols.
-
-2011-05-03  Paul Brook  <paul at codesourcery.com>
-
+2012-03-23  Alan Modra  <amodra at gmail.com>
 
-	* elf32-tic6x.c (elf32_tic6x_howto_table,
-	elf32_tic6x_howto_table_rel, (elf32_tic6x_gc_sweep_hook,
-	elf32_tic6x_relocate_section, elf32_tic6x_check_relocs):
-	Add R_C6000_EHTYPE.
+	* elf.c (assign_file_positions_for_non_load_sections): Don't warn
+	on empty alloc sections.
 
-2011-05-01  Alan Modra  <amodra at gmail.com>
+2012-03-23  Alan Modra  <amodra at gmail.com>
 
-	PR ld/12718
-	* elf32-i386.c (elf_i386_check_relocs): Ensure dynobj set before
-	creating ifunc sections.
-	* elf64-x86-64.c (elf_x86_64_check_relocs): Likewise.
-
-2011-04-30  H.J. Lu  <hongjiu.lu at intel.com>
-
-	* elf64-x86-64.c (elf_x86_64_merge_symbol): Correct parameter
-	names.
-
-2011-04-28  Tom Tromey  <tromey at redhat.com>
-
-	* bfdio.c (memory_bstat): Pass correct size to memset.
-
-2011-04-28  Mike Frysinger  <vapier at gentoo.org>
+	* linker.c (_bfd_nearby_section): New function, split out from..
+	(fix_syms): ..here.
+	* bfd-in.h (_bfd_nearby_section): Declare.
+	* bfd-in2.h: Regenerate.
+	* elflink.c (elf_link_input_bfd): Don't use text_index_section or
+	data_index_section with ld -q or ld -r output relocs against
+	stripped output sections.  Instead use _bfd_nearby_section.
 
-	* dwarf2.c (dwarf_debug_sections): Mark const.
-	* elf.c (special_sections): Likewise.
-	* libbfd-in.h (dwarf_debug_sections): Likewise.
-	* libbfd.h: Regenerate.
+2012-03-23  Alan Modra  <amodra at gmail.com>
 
-2011-04-26  Kai Tietz  <ktietz at redhat.com>
+	PR binutils/13894
+	* elf64-ppc.c (opd_entry_value): Read full symbol table when
+	sym hashes unavailable.
 
-	* coffcode.h (sec_to_styp_flags): Allow linkonce for
-	debugging sections.
+2012-03-21  Eliot Dresselhaus  <eliot at sonic.net>
 
-2011-04-26  Tristan Gingold  <gingold at adacore.com>
+	* elf32-tic6x.c (elf32_tic6x_merge_private_bfd_data): Return TRUE
+	for non-C6X objects.
 
-	* coff64-rs6000.c: Convert to ISO-C.  Remove PARAMS and PTR macros.
+2012-03-20  Kai Tietz  <ktietz at redhat.com>
 
-2011-04-24  Alan Modra  <amodra at gmail.com>
+	PR ld/12742
+	* configure.in (AC_CHECK_HEADERS): Test for windows.h and dlfcn.h.
+	* plugin.c: Guard include of dlfcn.h if HAVE_DLFCN_H is defined.
+	Add windows.h header include if HAVE_WINDOWS_H is defined.
+	(dlerror): New static function if windows variant is used instead
+	of dlfcn.h.
+	(dlclose): Likewise.
+	(dlopen): Likewise.
+	(dlsym): Likewise.
+	* configure: Regenerated.
+	* config.in: Regenerated.
 
-	PR ld/12365
-	PR ld/12696
-	* coff-aux.c (coff_m68k_aux_link_add_one_symbol): Update "notice" call.
-	* linker.c (_bfd_link_hash_newfunc): Clear bitfields.
-	(_bfd_generic_link_add_one_symbol): Update "notice" call.
-	* elflink.c (_bfd_elf_merge_symbol): Don't skip weak redefs when
-	it is a redef of an IR symbol in a real BFD.
+2012-03-20  H.J. Lu  <hongjiu.lu at intel.com>
 
-2011-04-22  H.J. Lu  <hongjiu.lu at intel.com>
+	PR ld/13880
+	* elf32-i386.c (elf_i386_relocate_section): Don't issue an error
+	for R_386_GOTOFF relocation against protected function if
+	SYMBOLIC_BIND is true.
 
-	* elf32-i386.c (elf_i386_readonly_dynrelocs): Warn relocation
-	in readonly section in a shared object.
-	(elf_i386_size_dynamic_sections): Likewise.
-	* elf64-x86-64.c (elf_x86_64_readonly_dynrelocs): Likewise.
-	(elf_x86_64_size_dynamic_sections): Likewise.
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Don't issue an
+	error for R_X86_64_GOTOFF64 relocation against protected function
+	when building executable or SYMBOLIC_BIND is true.
 
-2011-04-21  H.J. Lu  <hongjiu.lu at intel.com>
+2012-03-16  Roland McGrath  <mcgrathr at google.com>
 
-	PR ld/12694
-	* elf32-i386.c (elf_i386_readonly_dynrelocs): Skip local IFUNC
-	symbols.
-	* elf64-x86-64.c (elf_x86_64_readonly_dynrelocs): Likewise.
+	* config.bfd: Handle x86_64-*-nacl*.
+	* elf64-x86-64.c (bfd_elf64_x86_64_nacl_vec): New backend vector stanza.
+	(bfd_elf32_x86_64_nacl_vec): Likewise.
+	* targets.c: Support them.
+	* configure.in: Likewise.
+	* configure: Regenerated.
 
-2011-04-21  H.J. Lu  <hongjiu.lu at intel.com>
+2012-03-16  Matthew Gretton-Dann  <matthew.gretton-dann at arm.com>
 
-	* elf32-i386.c (elf_i386_finish_dynamic_symbol): Return false
-	on dynamic symbol error.
-	* elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Likewise.
+	* elf32-arm.c (elf32_arm_attributes_accept_div): New function.
+	(elf32_arm_attributes_forbid_div): Likewise.
+	(elf32_arm_merge_eabi_attributes): Correct handling of
+	Tag_DIV_use.
 
-2011-04-20  Tristan Gingold  <gingold at adacore.com>
+2012-03-15  Roland McGrath  <mcgrathr at google.com>
 
-	* config.bfd (alpha*-*-*vms*, ia64*-*-*vms*): Define targ_selvecs.
+	* elf64-x86-64.c (elf_x86_64_create_dynamic_sections): Use
+	elf_x86_64_backend_data parameters for plt_eh_frame.
 
-2011-04-20  Alan Modra  <amodra at gmail.com>
-
-	* hash.c (bfd_default_hash_table_size): Make it an unsigned long.
-	(bfd_hash_table_init_n): Overflow checking.
-	(bfd_hash_set_default_size): Return current size.  Take unsigned long
-	arg.  Add 65537 to hash_size primes.
-	* bfd-in.h (bfd_hash_set_default_size): Update prototype.
+	* elf64-x86-64.c (struct elf_x86_64_backend_data): New type.
+	(get_elf_x86_64_backend_data, GET_PLT_ENTRY_SIZE): New macros.
+	(elf_x86_64_arch_bed): New variable.
+	(elf_backend_arch_data): New macro.
+	(elf_x86_64_adjust_dynamic_symbol): Use GET_PLT_ENTRY_SIZE.
+	(elf_x86_64_allocate_dynrelocs): Likewise.
+	(elf_x86_64_relocate_section): Likewise.
+	(elf_x86_64_plt_sym_val): Likewise.
+	(elf_x86_64_finish_dynamic_symbol): Use elf_x86_64_backend_data
+	parameters for PLT details.
+	(elf_x86_64_finish_dynamic_sections): Likewise.
+
+2012-03-14  Roland McGrath  <mcgrathr at google.com>
+
+	* elf32-i386.c (elf_i386_nacl_pic_plt0_entry): Initialize up
+	to the full size, padding out with nop instructions.
+
+2012-03-12  Alan Modra  <amodra at gmail.com>
+
+	* elf-m10300.c (_bfd_mn10300_elf_adjust_dynamic_symbol): Don't warn
+	on zero size dynbss symbol.
+	* elf32-arm.c (elf32_arm_adjust_dynamic_symbol): Likewise.
+	* elf32-cr16.c (_bfd_cr16_elf_adjust_dynamic_symbol): Likewise.
+	* elf32-cris.c (elf_cris_adjust_dynamic_symbol): Likewise.
+	* elf32-hppa.c (elf32_hppa_adjust_dynamic_symbol): Likewise.
+	* elf32-i370.c (i370_elf_adjust_dynamic_symbol): Likewise.
+	* elf32-i386.c (elf_i386_adjust_dynamic_symbol): Likewise.
+	* elf32-lm32.c (lm32_elf_adjust_dynamic_symbol): Likewise.
+	* elf32-m32r.c (m32r_elf_adjust_dynamic_symbol): Likewise.
+	* elf32-m68k.c (elf_m68k_adjust_dynamic_symbol): Likewise.
+	* elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Likewise.
+	* elf32-s390.c (elf_s390_adjust_dynamic_symbol): Likewise.
+	* elf32-sh.c (sh_elf_adjust_dynamic_symbol): Likewise.
+	* elf32-tic6x.c (elf32_tic6x_adjust_dynamic_symbol): Likewise.
+	* elf32-tilepro.c (tilepro_elf_adjust_dynamic_symbol): Likewise.
+	* elf32-vax.c (elf_vax_adjust_dynamic_symbol): Likewise.
+	* elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Likewise.
+	* elf64-s390.c (elf_s390_adjust_dynamic_symbol): Likewise.
+	* elf64-sh64.c (sh64_elf64_adjust_dynamic_symbol): Likewise.
+	* elf64-x86-64.c (elf_x86_64_adjust_dynamic_symbol): Likewise.
+	* elfxx-sparc.c (_bfd_sparc_elf_adjust_dynamic_symbol): Likewise.
+	* elfxx-tilegx.c (tilegx_elf_adjust_dynamic_symbol): Likewise.
+
+2012-03-10  Edmar Wienskoski  <edmar at freescale.com>
+
+	* archures.c: Add bfd_mach_ppc_e5500 and bfd_mach_ppc_e6500.
 	* bfd-in2.h: Regenerate.
+	* cpu-powerpc.c (bfd_powerpc_archs): Add entries for
+	bfd_mach_ppc_e5500 and bfd_mach_ppc_e6500.
 
-2011-04-20  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* elf-bfd.h (RELOC_AGAINST_DISCARDED_SECTION): Fix +1 overrun of
-	memmove elements.
-
-2011-04-20  Alan Modra  <amodra at gmail.com>
-
-	* libbfd.c (bfd_log2): Do return rounded up value.
-	* elflink.c (bfd_elf_size_dynsym_hash_dynstr): Replace bfd_log2
-	call with expanded old round down version of the function.
+2012-03-09  H.J. Lu  <hongjiu.lu at intel.com>
 
-	* archive.c (_bfd_get_elt_at_filepos): Don't release n_nfd.
-	* elflink.c (elf_link_add_object_symbols): Delete redundant code.
+	PR ld/13817
+	* elf32-i386.c (elf_i386_relocate_section): Restore
+	R_386_IRELATIVE.
 
-2011-04-20  Alan Modra  <amodra at gmail.com>
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Restore
+	R_X86_64_IRELATIVE.
 
-	PR ld/12365
-	* elfcode.h (elf_slurp_symbol_table): Put common plugin IR symbols
-	in their own common section.
-	* elflink.c (elf_link_add_object_symbols): Likewise.
-	* linker.c (generic_link_check_archive_element): Don't lose flags
-	if common section is pre-existing.
-	(_bfd_generic_link_add_one_symbol): Likewise.
+2012-03-08  Tristan Gingold  <gingold at adacore.com>
 
-2011-04-20  Alan Modra  <amodra at gmail.com>
+	* vms-lib.c (_bfd_vms_lib_write_archive_contents): Set maximum
+	keylen according to archive kind.  Set nextvbn and nextrfa lhd
+	fields.  Add comments.
 
-	PR ld/12365
-	* elflink.c (_bfd_elf_merge_symbol): Update multiple_common calls.
-	* linker.c (_bfd_generic_link_add_one_symbol): Likewise.  Call
-	multiple_definition regardless of allow_multiple_definition.
-	* simple.c (simple_dummy_multiple_definition): Update.
-	* xcofflink.c (xcoff_link_add_symbols): Update multiple_definition
-	calls.
+2012-03-07  Nick Clifton  <nickc at redhat.com>
 
-2011-04-18  Tristan Gingold  <gingold at adacore.com>
-
-	* coff-rs6000.c: Convert to ISO-C.  Remove PARAMS macro.
-
-2011-04-18  Alan Modra  <amodra at gmail.com>
-
-	PR ld/12365
-	PR ld/12672
-	* bfd.c (BFD_PLUGIN): Define.
-	(BFD_FLAGS_SAVED, BFD_FLAGS_FOR_BFD_USE_MASK): Add BFD_PLUGIN.
+	* elf-m10300.c (elf32_mn10300_link_hash_entry): Add tls_type
+	field.
+	(elf32_mn10300_link_hash_table): Add tls_ldm_got entry;
+	(elf_mn10300_tdata): Define.
+	(elf_mn10300_local_got_tls_type): Define.
+	(elf_mn10300_howto_table): Add entries for R_MN10300_TLS_GD,
+	R_MN10300_TLS_LD, R_MN10300_TLS_LDO, R_MN10300_TLS_GOTIE,
+	R_MN10300_TLS_IE, R_MN10300_TLS_LE, R_MN10300_TLS_DPTMOD,
+	R_MN10300_TLS_DTPOFF, R_MN10300_TLS_TPOFF relocs.
+	(mn10300_reloc_map): Likewise.
+	(elf_mn10300_tls_transition): New function.
+	(dtpoff, tpoff, mn10300_do_tls_transition): New functions.
+	(mn10300_elf_check_relocs): Add TLS support.
+	(mn10300_elf_final_link_relocate): Likewise.
+	(mn10300_elf_relocate_section): Likewise.
+	(mn10300_elf_relax_section): Likewise.
+	(elf32_mn10300_link_hash_newfunc): Initialise new field.
+	(_bfd_mn10300_copy_indirect_symbol): New function.
+	(elf32_mn10300_link_hash_table_create): Initialise new fields.
+	(_bfd_mn10300_elf_size_dynamic_sections): Add TLS support.
+	(_bfd_mn10300_elf_finish_dynamic_symbol): Likewise.
+	(_bfd_mn10300_elf_reloc_type_class): Allocate an
+	elf_mn10300_obj_tdata structure.
+	(elf_backend_copy_indirect_symbol): Define.
+	* reloc.c (BFD_MN10300_TLS_GD, BFD_MN10300_TLS_LD,
+	BFD_MN10300_TLS_LDO, BFD_MN10300_TLS_GOTIE, BFD_MN10300_TLS_IE,
+	BFD_MN10300_TLS_LE, BFD_MN10300_TLS_DPTMOD,
+	BFD_MN10300_TLS_DTPOFF, BFD_MN10300_TLS_TPOFF): New relocations.
+	(BFD_RELOC_MN10300_32_PCREL, BFD_RELOC_MN10300_16_PCREL): Move to
+	alongside other MN10300 relocations.
 	* bfd-in2.h: Regenerate.
-	* elflink.c (elf_link_output_extsym): Strip undefined plugin syms.
-	* opncls.c (bfd_make_readable): Don't lose original bfd flags.
-
-2011-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Do not check for
-	SEC_LOAD.
-
-2011-04-15  Sergio Durigan Junior  <sergiodj at redhat.com>
-
-	* elf-bfd.h (struct sdt_note): New struct.
-	(struct elf_obj_tdata) <sdt_note_head>: New field.
-	* elf.c (elfobj_grok_stapsdt_note_1): New function.
-	(elfobj_grok_stapsdt_note): Likewise.
-	(elf_parse_notes): Added code to treat SystemTap note
-	sections.
-
-2011-04-12  Richard Henderson  <rth at redhat.com>
-
-	* elf64-alpha.c (elf64_alpha_size_dynamic_sections): Do not
-	exclude empty .got sections.
-
-2011-04-11  H.J. Lu  <hongjiu.lu at intel.com>
-
-	* elf32-i386.c (elf_i386_reloc_type_lookup): Fix the out of bound
-	array access for BFD_RELOC_386_IRELATIVE.
-
-2011-04-11  Bernd Schmidt  <bernds at codesourcery.com>
-
-	* elf32-tic6x.c (elf32_tic6x_check_relocs): Initialize pc_count field.
-
-2011-04-11  Mark Wielaard  <mjw at redhat.com>
-
-	PR 10549
-	* elf-bfd.h (has_ifunc_symbols): Renamed to has_gnu_symbols.
-	(has_gnu_symbols): Renamed from has_ifunc_symbols.
-	* elf.c (_bfd_elf_set_osabi): Use new has_gnu_symbols name.
-	* elf32-arm.c (elf32_arm_add_symbol_hook): Set has_gnu_symbols
-	also if STB_GNU_UNIQUE symbol binding was seen.
-	* elf32-i386.c (elf_i386_add_symbol_hook): Likewise.
-	* elf32-ppc.c (ppc_elf_add_symbol_hook): Likewise.
-	* elf32-sparc.c (elf32_sparc_add_symbol_hook): Likewise.
-	* elf64-ppc.c (ppc64_elf_add_symbol_hook): Likewise.
-	* elf64-sparc.c (elf64_sparc_add_symbol_hook): Likewise.
-	* elf64-x86-64.c (elf_x86_64_add_symbol_hook): Likewise.
-
-2011-04-11  Alan Modra  <amodra at gmail.com>
+	* libbfd.h: Regenerate.
 
-	* bfd-in.h (bfd_get_section_limit): Don't use rawsize with output
-	sections.
-	* libbfd.c (_bfd_generic_get_section_contents): Likewise.
-	(_bfd_generic_get_section_contents_in_window): Likewise.
-	* section.c (bfd_get_section_contents): Likewise.
-	* compress.c (bfd_get_full_section_contents): Likewise.
-	* elf32-rx.c (rx_final_link): Ignore rawsize.
-	* elf32-microblaze.c (microblaze_elf_relocate_section): Use correct
-	bfd with bfd_get_section_limit.
-	* elfxx-ia64.c (elfNN_ia64_choose_gp): Add "final" parameter.  Use
-	os->size during final link.  Update callers.
+2012-03-06  Jakub Jelinek  <jakub at redhat.com>
+
+	* elf64-x86-64.c (elf_x86_64_relocate_section): For R_X86_64_RELATIVE
+	set relocate to TRUE.
+
+2012-03-05  Rainer Orth  <ro at CeBiTec.Uni-Bielefeld.DE>
+
+	PR ld/12152
+	* elfxx-sparc.c (_bfd_sparc_elf_relocate_section): Also ignore
+	overflows for R_SPARC_UA32 in .stab sections.
+
+2012-03-01  Alan Modra  <amodra at gmail.com>
+
+	* elfxx-tilegx.c (tilegx_elf_relocate_section): Silence bogus warning.
+
+2012-02-27  Alan Modra  <amodra at gmail.com>
+
+	* elf32-sh.c (sh_elf_osec_to_segment): Check for elf flavour bfd
+	before calling elf specific function.
+	(sh_elf_osec_readonly_p): Test for error return from above.
+
+2012-02-27  Alan Modra  <amodra at gmail.com>
+
+	* elf32-spu.c (build_stub): Fix malloc under-allocation.
+
+2012-02-25  Walter Lee  <walt at tilera.com>
+	* reloc.c: Add BFD_RELOC_TILEPRO_TLS_GD_CALL,
+	BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD,
+	BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD,
+	BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD,
+	BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD,
+	BFD_RELOC_TILEPRO_TLS_IE_LOAD, BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE,
+	BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE,
+	BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO,
+	BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO,
+	BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI,
+	BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI,
+	BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA,
+	BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA,
+	BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE,
+	BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE,
+	BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE,
+	BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE,
+	BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE,
+	BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE,
+	BFD_RELOC_TILEGX_TLS_GD_CALL, BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD,
+	BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD,
+	BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD,
+	BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD, BFD_RELOC_TILEGX_TLS_IE_LOAD,
+	BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD,
+	BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD,
+	BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD, BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD.
+	Delete BFD_RELOC_TILEGX_IMM16_X0_HW1_GOT,
+	BFD_RELOC_TILEGX_IMM16_X1_HW1_GOT,
+	BFD_RELOC_TILEGX_IMM16_X0_HW2_GOT,
+	BFD_RELOC_TILEGX_IMM16_X1_HW2_GOT,
+	BFD_RELOC_TILEGX_IMM16_X0_HW3_GOT,
+	BFD_RELOC_TILEGX_IMM16_X1_HW3_GOT,
+	BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_GOT,
+	BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_GOT,
+	BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_GD,
+	BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_GD,
+	BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_GD,
+	BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_GD,
+	BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_GD,
+	BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_GD,
+	BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_GD,
+	BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_GD,
+	BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_IE,
+	BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_IE,
+	BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_IE,
+	BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_IE,
+	BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_IE,
+	BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_IE,
+	BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_IE,
+	BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_IE.
+	* elf32-tilepro.c (tilepro_elf_howto_table): Update tilepro
+	relocations.
+	(tilepro_reloc_map): Ditto.
+	(tilepro_info_to_howto_rela): Ditto.
+	(reloc_to_create_func): Ditto.
+	(tilepro_tls_translate_to_le): New.
+	(tilepro_tls_translate_to_ie): New.
+	(tilepro_elf_tls_transition): New.
+	(tilepro_elf_check_relocs): Handle new tls relocations.
+	(tilepro_elf_gc_sweep_hook): Ditto.
+	(allocate_dynrelocs): Ditto.
+	(tilepro_elf_relocate_section): Ditto.
+	(tilepro_replace_insn): New.
+	(insn_mask_X1): New.
+	(insn_mask_X0_no_dest_no_srca): New
+	(insn_mask_X1_no_dest_no_srca): New
+	(insn_mask_Y0_no_dest_no_srca): New
+	(insn_mask_Y1_no_dest_no_srca): New
+	(srca_mask_X0): New
+	(srca_mask_X1): New
+	(insn_tls_le_move_X1): New
+	(insn_tls_le_move_zero_X0X1): New
+	(insn_tls_ie_lw_X1): New
+	(insn_tls_ie_add_X0X1): New
+	(insn_tls_ie_add_Y0Y1): New
+	(insn_tls_gd_add_X0X1): New
+	(insn_tls_gd_add_Y0Y1): New
+	* elfxx-tilegx.c (tilegx_elf_howto_table): Update tilegx
+	relocations.
+	(tilegx_reloc_map): Ditto.
+	(tilegx_info_to_howto_rela): Ditto.
+	(reloc_to_create_func): Ditto.
+	(tilegx_elf_link_hash_table): New field disable_le_transition.
+	(tilegx_tls_translate_to_le): New.
+	(tilegx_tls_translate_to_ie): New.
+	(tilegx_elf_tls_transition): New.
+	(tilegx_elf_check_relocs): Handle new tls relocations.
+	(tilegx_elf_gc_sweep_hook): Ditto.
+	(allocate_dynrelocs): Ditto.
+	(tilegx_elf_relocate_section): Ditto.
+	(tilegx_copy_bits): New.
+	(tilegx_replace_insn): New.
+	(insn_mask_X1): New.
+	(insn_mask_X0_no_dest_no_srca): New.
+	(insn_mask_X1_no_dest_no_srca): New.
+	(insn_mask_Y0_no_dest_no_srca): New.
+	(insn_mask_Y1_no_dest_no_srca): New.
+	(insn_mask_X0_no_operand): New.
+	(insn_mask_X1_no_operand): New.
+	(insn_mask_Y0_no_operand): New.
+	(insn_mask_Y1_no_operand): New.
+	(insn_tls_ie_ld_X1): New.
+	(insn_tls_ie_ld4s_X1): New.
+	(insn_tls_ie_add_X0X1): New.
+	(insn_tls_ie_add_Y0Y1): New.
+	(insn_tls_ie_addx_X0X1): New.
+	(insn_tls_ie_addx_Y0Y1): New.
+	(insn_tls_gd_add_X0X1): New.
+	(insn_tls_gd_add_Y0Y1): New.
+	(insn_move_X0X1): New.
+	(insn_move_Y0Y1): New.
+	(insn_add_X0X1): New.
+	(insn_add_Y0Y1): New.
+	(insn_addx_X0X1): New.
+	(insn_addx_Y0Y1): New.
+	* libbfd.h: Regenerate.
 	* bfd-in2.h: Regenerate.
 
-2011-04-10  Richard Sandiford  <rdsandiford at googlemail.com>
-
-	PR ld/12637
-	* elfxx-mips.c (mips_elf_merge_got_with): Use arg->global_count
-	as the number of global entries when merging with the primary GOT.
-
-2011-04-09  H.J. Lu  <hongjiu.lu at intel.com>
-
-	* elf32-i386.c: Update copyright year.
-	* elf64-x86-64.c: Likewise.
-
-2011-04-09  Kai Tietz  <ktietz at redhat.com>
-
-	* peXXigen.c (_bfd_XXi_final_link_postscripte): Sort pdata in temporary
-	buffer and use rawsize for sorting.
-	* coffcode.h (coff_compute_section_file_positions): Set rawsize
-	before doing alignment.
-
-2011-04-09  H.J. Lu  <hongjiu.lu at intel.com>
-
-	* elf32-i386.c (elf_i386_relocate_section): Return relocation
-	error on unsupported relocation.
-	* elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
-
-2011-04-09  H.J. Lu  <hongjiu.lu at intel.com>
-
-	PR binutils/12657
-	* hosts/x86-64linux.h (elf_prstatus32): Replace __pid_t with
-	pid_t.
-
-2011-04-08  H.J. Lu  <hongjiu.lu at intel.com>
-
-	PR ld/12654
-	* elf32-i386.c (elf_i386_relocate_section): Check !executable
-	instead of shared for R_386_TLS_LDO_32.
-
-2011-04-08  Tristan Gingold  <gingold at adacore.com>
-
-	* Makefile.am (SOURCE_HFILES): Remove xcoff-target.h
-	* coff-pmac: Remove
-	* xcoff-target.h: Remove
-	* Makefile.in: Regenerate.
-
-2011-04-07  Cary Coutant  <ccoutant at google.com>
-
-	* dwarf2.c (scan_unit_for_symbols): Check for DW_AT_specification.
-
-2011-04-07  Paul Brook  <paul at codesourcery.com>
-
-	* elf32-tic6x.c (elf32_tic6x_howto_table): R_C6000_PREL31 is
-	pc-relative.
-	(elf32_tic6x_howto_table_rel): Ditto.
-	(elf32_tic6x_relocate_section): Implement R_C6000_PREL31.
-	(elf32_tic6x_check_relocs): Ditto.
-
-2011-04-06  Joseph Myers  <joseph at codesourcery.com>
-
-	* config.bfd (thumb-*-oabi): Don't handle in list of obsolete
-	targets.
-	(strongarm*, thumb*, xscale*): Remove architectures.
-	(strongarm-*-kaos*, thumb-*-coff, thumb-*-elf, thumb-epoc-pe*,
-	thumb-*-pe*, strongarm-*-elf, strongarm-*-coff, xscale-*-elf,
-	xscale-*-coff): Remove targets.
-
-2011-04-01  Tristan Gingold  <gingold at adacore.com>
-
-	* elfxx-ia64.c: include bfd_stdint.h
-
-2011-03-31  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* elf32-tic6x.c (elf32_tic6x_relocate_section): Remove unused variable
-	dynobj and its initialization.
-
-2011-03-31  Tristan Gingold  <gingold at adacore.com>
-
-	* makefile.vms (DEFS): Add HAVE_bfd_elf64_ia64_vms_vec.
-	* configure.com: Set BFD_HOST_64BIT_LONG_LONG and
-	BFD_HOST_LONG_LONG to 1.
-
-2011-03-31  Tristan Gingold  <gingold at adacore.com>
-
-	* vms-alpha.c (vms_get_remaining_object_record): Fix dec-c warning.
-	(_bfd_vms_write_etir): Ditto.
-	(_bfd_vms_slurp_etir): Avoid to use intptr_t
-	* configure.com: Generate bfd_stdint.h
-
-2011-03-31  Bernd Schmidt  <bernds at codesourcery.com>
-
-	* elf32-tic6x.h (struct elf32_tic6x_params): New.
-	(elf32_tic6x_setup): Declare.
-	* elf32-tic6x.c: Include <limits.h>.
-	(ELF_DYNAMIC_LINKER, DEFAULT_STACK_SIZE, PLT_ENTRY_SIZE): Define.
-	(struct elf32_tic6x_link_hash_table, struct elf32_link_hash_entry):
-	New structures.
-	(elf32_tic6x_link_hash_table, is_tic6x_elf): New macros.
-	(tic6x_elf_scom_section, tic6x_elf_scom_symbol,
-	tic6x_elf_scom_symbol_ptr): New static variables.
-	(elf32_tic6x_howto_table, elf32_tic6x_howto_table_rel,
-	elf32_tic6x_reloc_map): Add R_C6000_JUMP_SLOT, R_C6000_EHTYPE,
-	R_C6000_PCR_H16 and R_C6000_PCR_L16.
-	(elf32_tic6x_link_hash_newfunc, elf32_tic6x_link_hash_table_create,
-	elf32_tic6x_link_hash_table_free, elf32_tic6x_setup,
-	elf32_tic6x_using_dsbt, elf32_tic6x_install_rela,
-	elf32_tic6x_create_dynamic_sections, elf32_tic6x_make_got_dynreloc,
-	elf32_tic6x_finish_dynamic_symbol, elf32_tic6x_gc_sweep_hook,
-	elf32_tic6x_adjust_dynamic_symbol): New static functions.
-	(elf32_tic6x_relocate_section): For R_C6000_PCR_S21, convert branches
-	to weak symbols as required by the ABI.
-	Handle GOT and DSBT_INDEX relocs, and copy relocs to the output file
-	as needed when generating DSBT output.
-	(elf32_tic6x_check_relocs, elf32_tic6x_add_symbol_hook,
-	elf32_tic6x_symbol_processing, elf32_tic6x_section_from_bfd_section,
-	elf32_tic6x_allocate_dynrelocs, elf32_tic6x_size_dynamic_sections,
-	elf32_tic6x_always_size_sections, elf32_tic6x_modify_program_headers,
-	elf32_tic6x_finish_dynamic_sections, elf32_tic6x_plt_sym_val,
-	elf32_tic6x_copy_private_data, elf32_tic6x_link_omit_section_dynsym):
-	New static functions.
-	(ELF_MAXPAGESIZE): Define to 0x1000.
-	(bfd_elf32_bfd_copy_private_bfd_data,
-	bfd_elf32_bfd_link_hash_table_create,
-	bfd_elf32_bfd_link_hash_table_free, elf_backend_can_refcount,
-	elf_backend_want_got_plt, elf_backend_want_dynbss,
-	elf_backend_plt_readonly, elf_backend_got_header_size,
-	elf_backend_gc_sweep_hook, elf_backend_modify_program_headers,
-	elf_backend_create_dynamic_sections, elf_backend_adjust_dynamic_symbol,
-	elf_backend_check_relocs, elf_backend_add_symbol_hook,
-	elf_backend_symbol_processing, elf_backend_link_output_symbol_hook,
-	elf_backend_section_from_bfd_section,
-	elf_backend_finish_dynamic_symbol, elf_backend_always_size_sections,
-	elf32_tic6x_size_dynamic_sections, elf_backend_finish_dynamic_sections,
-	elf_backend_omit_section_dynsym, elf_backend_plt_sym_val): Define.
-
-	* bfd/reloc.c (BFD_RELOC_C6000_JUMP_SLOT, BFD_RELOC_C6000_EHTYPE,
-	BFD_RELOC_C6000_PCR_H16, BFD_RELOC_C6000_PCR_S16): Add.
-	* bfd/bfd-in2.h: Regenerate.
-	* bfd/libbfd.h: Regenerate.
-	* config.bfd: Accept tic6x-*-* instead of tic6x-*-elf.
-
-2011-03-31  Tristan Gingold  <gingold at adacore.com>
-
-	* coffcode.h (coff_slurp_symbol_table): Silently discard C_NULL
-	entry on xcoff when value is C_NULL_VALUE.
-
-2011-03-31  Tristan Gingold  <gingold at adacore.com>
-
-	* libcoff-in.h (exec_hdr): Remove.
-	* libcoff.h: Regenerate.
-
-2011-03-30  Nick Clifton  <nickc at redhat.com>
-
-	* po/da.po: Updated Danish translation.
-
-2011-03-29  Richard Henderson  <rth at redhat.com>
-
-	* elf64-alpha.c (elf64_alpha_gc_mark_hook): New.
-	(elf64_alpha_gc_sweep_hook): New.
-	(elf_backend_gc_mark_hook, elf_backend_gc_sweep_hook): New.
-	(elf_backend_can_gc_sections): New.
-
-2011-03-26  John Marino  <binutils at marino.st>
-
-	* config.bfd: Add x86_64-*-dragonfly*, fix i386-*-dragonfly*.
-	* configure.in: Delete unused bfd_elf32_i386_dragonfly_vec.
+2012-02-25  Walter Lee  <walt at tilera.com>
+
+	* config.bfd (tilegx-*-*): rename little endian vector; add big
+	endian vector.
+	(tilegxbe-*-*): New case.
+	* configure.in (bfd_elf32_tilegx_vec): Rename...
+	(bfd_elf32_tilegx_le_vec): ... to this.
+	(bfd_elf32_tilegx_be_vec): New vector.
+	(bfd_elf64_tilegx_vec): Rename...
+	(bfd_elf64_tilegx_le_vec): ... to this.
+	(bfd_elf64_tilegx_be_vec): New vector.
 	* configure: Regenerate.
-
-2011-03-25  Michael Snyder  <msnyder at vmware.com>
-
-	* coffcode.h (coff_set_alignment_hook): Check return of bfd_seek.
-
-2011-03-25  Tristan Gingold  <gingold at adacore.com>
-
-	* vms-alpha.c (_bfd_vms_find_nearest_dst_line): Allow the use
-	of find_nearest_line on object files.
-
-2011-03-25  Tristan Gingold  <gingold at adacore.com>
-
-	* vms-alpha.c (evax_section_flags): Make $CODE$ section read-only.
-	Minor reordering.
-	(alpha_vms_create_eisd_for_section): Make code sections read-only.
-
-2011-03-24  Alan Modra  <amodra at gmail.com>
-
-	* elf32-ppc.c (ppc_elf_tls_optimize): Catch more cases where
-	old-style __tls_get_addr calls without marker relocs don't match
-	their arg setup insn one for one.  If such mismatches are found
-	report the reloc and don't do any tls optimization.
-	* elf64-ppc.c (ppc64_elf_tls_optimize): Likewise.
-
-2011-03-22  Eric B. Weddington  <eric.weddington at atmel.com>
-
+	* elf32-tilegx.c (TARGET_LITTLE_SYM): Rename.
+	(TARGET_LITTLE_NAME): Ditto.
+	(TARGET_BIG_SYM): Define.
+	(TARGET_BIG_NAME): Define.
+	* elf64-tilegx.c (TARGET_LITTLE_SYM): Rename.
+	(TARGET_LITTLE_NAME): Ditto.
+	(TARGET_BIG_SYM): Define.
+	(TARGET_BIG_NAME): Define.
+	* targets.c (bfd_elf32_tilegx_vec): Rename...
+	(bfd_elf32_tilegx_le_vec): ... to this.
+	(bfd_elf32_tilegx_be_vec): Declare.
+	(bfd_elf64_tilegx_vec): Rename...
+	(bfd_elf64_tilegx_le_vec): ... to this.
+	(bfd_elf64_tilegx_be_vec): Declare.
+	(_bfd_target_vector): Add / rename above vectors.
+	* arctures.c (bfd_architecture): Define bfd_mach_tilegx32.
 	* bfd-in2.h: Regenerate.
+	* cpu-tilegx.c (bfd_tilegx32_arch): define.
+	(bfd_tilegx_arch): link to bfd_tilegx32_arch.
 
-2011-03-22  Eric B. Weddington  <eric.weddington at atmel.com>
-
-	* archures.c: Add AVR XMEGA architecture information.
-	* cpu-avr.c (arch_info_struct): Likewise.
-	* elf32-avr.c (bfd_elf_avr_final_write_processing): Likewise.
-	(elf32_avr_object_p): Likewise.
-
-2011-03-14  Richard Sandiford  <richard.sandiford at linaro.org>
-
-	* reloc.c (BFD_RELOC_ARM_IRELATIVE): New relocation.
-	* bfd-in2.h: Regenerate.
-	* elf32-arm.c (elf32_arm_howto_table_2): Rename existing definition
-	to elf32_arm_howto_table_3 and replace with a single R_ARM_IRELATIVE
-	entry.
-	(elf32_arm_howto_from_type): Update accordingly.
-	(elf32_arm_reloc_map): Map BFD_RELOC_ARM_IRELATIVE to R_ARM_IRELATIVE.
-	(elf32_arm_reloc_name_lookup): Handle elf32_arm_howto_table_3.
-	(arm_plt_info): New structure, split out from elf32_arm_link_hash_entry
-	with an extra noncall_refcount field.
-	(arm_local_iplt_info): New structure.
-	(elf_arm_obj_tdata): Add local_iplt.
-	(elf32_arm_local_iplt): New accessor macro.
-	(elf32_arm_link_hash_entry): Replace plt_thumb_refcount,
-	plt_maybe_thumb_refcount and plt_got_offset with an arm_plt_info.
-	Change tls_type to a bitfield and add is_iplt.
-	(elf32_arm_link_hash_newfunc): Update accordingly.
-	(elf32_arm_allocate_local_sym_info): New function.
-	(elf32_arm_create_local_iplt): Likewise.
-	(elf32_arm_get_plt_info): Likewise.
-	(elf32_arm_plt_needs_thumb_stub_p): Likewise.
-	(elf32_arm_get_local_dynreloc_list): Likewise.
-	(create_ifunc_sections): Likewise.
-	(elf32_arm_copy_indirect_symbol): Update after the changes to
-	elf32_arm_link_hash_entry.  Assert the is_iplt has not yet been set.
-	(arm_type_of_stub): Add an st_type argument.  Use elf32_arm_get_plt_info
-	to get PLT information.  Assert that all STT_GNU_IFUNC references
-	are turned into PLT references.
-	(arm_build_one_stub): Pass the symbol type to
-	elf32_arm_final_link_relocate.
-	(elf32_arm_size_stubs): Pass the symbol type to arm_type_of_stub.
-	(elf32_arm_allocate_irelocs): New function.
-	(elf32_arm_add_dynreloc): In static objects, use .rel.iplt for
-	all R_ARM_IRELATIVE.
-	(elf32_arm_allocate_plt_entry): New function.
-	(elf32_arm_populate_plt_entry): Likewise.
-	(elf32_arm_final_link_relocate): Add an st_type parameter.
-	Set srelgot to null for static objects.  Use separate variables
-	to record which st_value and st_type should be used when generating
-	a dynamic relocation.  Use elf32_arm_get_plt_info to find the
-	symbol's PLT information, setting has_iplt_entry, splt,
-	plt_offset and gotplt_offset accordingly.  Check whether
-	STT_GNU_IFUNC symbols should resolve to an .iplt entry, and change
-	the relocation target accordingly.  Broaden assert to include
-	.iplts.  Don't set sreloc for static relocations.  Assert that
-	we only generate dynamic R_ARM_RELATIVE relocations for R_ARM_ABS32
-	and R_ARM_ABS32_NOI.  Generate R_ARM_IRELATIVE relocations instead
-	of R_ARM_RELATIVE relocations if the target is an STT_GNU_IFUNC
-	symbol.  Pass the symbol type to arm_type_of_stub.  Conditionally
-	resolve GOT references to the .igot.plt entry.
-	(elf32_arm_relocate_section): Update the call to
-	elf32_arm_final_link_relocate.
-	(elf32_arm_gc_sweep_hook): Use elf32_arm_get_plt_info to get PLT
-	information.  Treat R_ARM_REL32 and R_ARM_REL32_NOI as call
-	relocations in shared libraries and relocatable executables.
-	Count non-call PLT references.  Use elf32_arm_get_local_dynreloc_list
-	to get the list of dynamic relocations for a local symbol.
-	(elf32_arm_check_relocs): Always create ifunc sections.  Set isym
-	at the same time as setting h.  Use elf32_arm_allocate_local_sym_info
-	to allocate local symbol information.  Treat R_ARM_REL32 and
-	R_ARM_REL32_NOI as call relocations in shared libraries and
-	relocatable executables.  Record PLT information for local
-	STT_GNU_IFUNC functions as well as global functions.   Count
-	non-call PLT references.  Use elf32_arm_get_local_dynreloc_list
-	to get the list of dynamic relocations for a local symbol.
-	(elf32_arm_adjust_dynamic_symbol): Handle STT_GNU_IFUNC symbols.
-	Don't remove STT_GNU_IFUNC PLTs unless all references have been
-	removed.  Update after the changes to elf32_arm_link_hash_entry.
-	(allocate_dynrelocs_for_symbol): Decide whether STT_GNU_IFUNC PLT
-	entries should live in .plt or .iplt.  Check whether the .igot.plt
-	and .got entries can be combined.  Use elf32_arm_allocate_plt_entry
-	to allocate .plt and .(i)got.plt entries.  Detect which .got
-	entries will need R_ARM_IRELATIVE relocations and use
-	elf32_arm_allocate_irelocs to allocate them.  Likewise other
-	non-.got dynamic relocations.
-	(elf32_arm_size_dynamic_sections): Allocate .iplt, .igot.plt
-	and dynamic relocations for local STT_GNU_IFUNC symbols.
-	Check whether the .igot.plt and .got entries can be combined.
-	Detect which .got entries will need R_ARM_IRELATIVE relocations
-	and use elf32_arm_allocate_irelocs to allocate them.  Use stashed
-	section pointers intead of strcmp checks.  Handle iplt and igotplt.
-	(elf32_arm_finish_dynamic_symbol): Use elf32_arm_populate_plt_entry
-	to fill in .plt, .got.plt and .rel(a).plt entries.  Point
-	STT_GNU_IFUNC symbols at an .iplt entry if non-call relocations
-	resolve to it.
-	(elf32_arm_output_plt_map_1): New function, split out from
-	elf32_arm_output_plt_map.  Handle .iplt entries.  Use
-	elf32_arm_plt_needs_thumb_stub_p.
-	(elf32_arm_output_plt_map): Call it.
-	(elf32_arm_output_arch_local_syms): Add mapping symbols for
-	local .iplt entries.
-	(elf32_arm_swap_symbol_in): Handle Thumb STT_GNU_IFUNC symbols.
-	(elf32_arm_swap_symbol_out): Likewise.
-	(elf32_arm_add_symbol_hook): New function.
-	(elf_backend_add_symbol_hook): Define for all targets.
-
-2011-03-14  Richard Sandiford  <richard.sandiford at linaro.org>
-
-	* elf-bfd.h (elf_link_hash_entry): Add target_internal.
-	* elf.c (swap_out_syms): Set st_target_internal for each
-	Elf_Internal_Sym.
-	* elfcode.h (elf_swap_symbol_in): Likewise.
-	* elf32-i370.c (i370_elf_finish_dynamic_sections): Likewise.
-	* elf32-sh-symbian.c (sh_symbian_relocate_section): Likewise.
-	* elf64-sparc.c (elf64_sparc_output_arch_syms): Likewise.
-	* elfxx-sparc.c (_bfd_sparc_elf_size_dynamic_sections): Likewise.
-	* elflink.c (elf_link_output_extsym): Likewise.
-	(bfd_elf_final_link): Likewise.
-	(elf_link_add_object_symbols): Copy st_target_internal
-	to the hash table if we see a definition.
-	(_bfd_elf_copy_link_hash_symbol_type): Copy target_internal.
-	* elf32-arm.c (elf32_arm_stub_hash_entry): Replace st_type with
-	a branch_type field.
-	(a8_erratum_fix, a8_erratum_reloc): Likewise.
-	(arm_type_of_stub): Replace actual_st_type with an
-	actual_branch_type parameter.
-	(arm_build_one_stub): Use branch types rather than st_types to
-	determine the type of branch.
-	(cortex_a8_erratum_scan): Likewise.
-	(elf32_arm_size_stubs): Likewise.
-	(bfd_elf32_arm_process_before_allocation): Likewise.
-	(allocate_dynrelocs_for_symbol): Likewise.
-	(elf32_arm_finish_dynamic_sections): Likewise.
-	(elf32_arm_final_link_relocate): Replace sym_flags parameter with
-	a branch_type parameter.
-	(elf32_arm_relocate_section): Update call accordingly.
-	(elf32_arm_adjust_dynamic_symbol): Don't check STT_ARM_TFUNC.
-	(elf32_arm_output_map_sym): Initialize st_target_internal.
-	(elf32_arm_output_stub_sym): Likewise.
-	(elf32_arm_symbol_processing): Delete.
-	(elf32_arm_swap_symbol_in): Convert STT_ARM_TFUNCs into STT_FUNCs.
-	Use st_target_internal to record the branch type.
-	(elf32_arm_swap_symbol_out): Use st_target_internal to test for
-	Thumb functions.
-	(elf32_arm_is_function_type): Delete.
-	(elf_backend_symbol_processing): Likewise.
-	(elf_backend_is_function_type): Likewise.
-
-2011-03-14  Richard Sandiford  <richard.sandiford at linaro.org>
+2012-02-24  Nick Clifton  <nickc at redhat.com>
 
-	* elf32-arm.c (elf32_arm_check_relocs): Always assign a dynobj.
-	(elf32_arm_finish_dynamic_sections): Move sgot != NULL assertion
-	into the PLT block.
+	PR ld/13730
+	* reloc.c (bfd_generic_get_relocated_section_contents): Issue an
+	error message instead of aborting, when an outofrange reloc is
+	encountered.
 
-2011-03-14  Richard Sandiford  <richard.sandiford at linaro.org>
+2012-02-23  Iain Sandoe  <idsandoe at googlemail.com>
 
-	* elf32-arm.c (elf32_arm_check_relocs): Use call_reloc_p,
-	may_need_local_target_p and may_become_dynamic_p to classify
-	the relocation type.  Don't check info->symbolic or h->def_regular
-	when deciding whether to record a potential dynamic reloc.
-	Don't treat potential dynamic relocs as PLT references.
-	(elf32_arm_gc_sweep_hook): Update to match.  Assert that we don't
-	try to make the PLT reference count go negative.
+	* mach-o.c (bfd_mach_o_swap_in_non_scattered_reloc): New.
+	(bfd_mach_o_canonicalize_one_reloc):  Swap non-scattered reloc
+	bit-fields when target and host differ in endian-ness.  When
+	PAIRs are non-scattered	find the 'symbol' from the preceding
+	reloc.  Add FIXME re. reloc symbols on section boundaries.
+	(bfd_mach_o_swap_out_non_scattered_reloc): New.
+	(bfd_mach_o_write_relocs): Use bfd_mach_o_encode_non_scattered_reloc.
 
-2011-03-14  Richard Sandiford  <richard.sandiford at linaro.org>
+2012-02-17  Iain Sandoe  <idsandoe at googlemail.com>
 
-	* elf32-arm.c (elf32_arm_final_link_relocate): Always fill in the
-	GOT entry here, rather than leaving it to finish_dynamic_symbol.
-	Only create a dynamic relocation for local references if
-	info->shared.
-	(allocate_dynrelocs_for_symbol): Update dynamic relocation
-	allocation accordingly.
-	(elf32_arm_finish_dynamic_symbol): Don't initialise the GOT entry here.
+	* mach-o-i386.c (i386_howto_table): Add support for 16 bit
+	sect-diffs.
+	(bfd_mach_o_i386_swap_reloc_in): Handle 16bit sect-diffs.
+	(bfd_mach_o_i386_swap_reloc_out): Likewise.
 
-2011-03-14  Richard Sandiford  <richard.sandiford at linaro.org>
+2012-02-17  Tristan Gingold  <gingold at adacore.com>
 
-	* elf32-arm.c (elf32_arm_allocate_dynrelocs): New function.
-	(elf32_arm_add_dynreloc): Likewise.
-	(elf32_arm_adjust_dynamic_symbol): Use elf32_arm_allocate_dynrelocs
-	to allocate dynamic relocations.
-	(elf32_arm_size_dynamic_sections): Likewise.
-	(allocate_dynrelocs): Likewise.  Rename to
-	allocate_dynrelocs_for_symbol.
-	(elf32_arm_final_link_relocate): Use elf32_arm_add_dynreloc to
-	create dynamic relocations.
-	(elf32_arm_finish_dynamic_symbol): Likewise.
-
-2011-03-12  H.J. Lu  <hongjiu.lu at intel.com>
-
-	* elf64-x86-64.c (elf_x86_64_check_tls_transition): Supprt TLS
-	x32 GD->IE and GD->LE transitions.
-	(elf_x86_64_relocate_section): Supprt TLS x32 GD->IE, GD->LE
-	and LD->LE transitions.
+	* reloc.c (BFD_RELOC_MACH_O_LOCAL_SECTDIFF):
+	* libbfd.h: Regenerated.
+	* bfd-in2.h: Likewise.
+	* mach-o-i386.c (i386_howto_table): Include local sectdiff.
+	(bfd_mach_o_i386_swap_reloc_in): Update for local sectdiff.
+	(bfd_mach_o_i386_swap_reloc_out): Likewise.
 
-2011-03-10  Alan Modra  <amodra at gmail.com>
+2012-02-17  Andreas Krebbel  <Andreas.Krebbel at de.ibm.com>
 
-	* elf64-ppc.c (ppc64_elf_relocate_section): Provide section/offset
-	for LO_DS error message and correct multiple.
+	* elf32-s390.c (elf_s390_relocate_section): Support basr in the
+	GD->LE and LD->LE optimizations.
 
-2011-03-10  Alan Modra  <amodra at gmail.com>
+2012-02-16  Alan Modra  <amodra at gmail.com>
 
-	* elf64-ppc.c (bfd_elf64_bfd_link_just_syms): Define.
-	(ppc64_elf_link_just_syms): New function.
-	(opd_entry_value): Don't assume big-endian host.
-	(get_r2off): New function.
-	(ppc_build_one_stub, ppc_size_one_stub): Use it here.
+	PR binutils/13355
+	* elf32-rx.c (elf32_rx_relax_section): Correct width check.
 
-2011-03-06  Michael Snyder  <msnyder at vmware.com>
+2012-02-13  Richard Henderson  <rth at redhat.com>
 
-	* compress.c (bfd_compress_section_contents): Check for out of mem.
+	PR ld/13621
+	* linker.c (fix_syms): Force symbols outside any section into
+	bfd_abs_section_ptr.
 
-	* elf64-x86-64.c (elf_x86_64_relocate_section): Document
-	that case statement falls through intentionally.
+2012-02-13  Alan Modra  <amodra at gmail.com>
 
-	* elf32-i386.c (elf_i386_relocate_section): Document fall through.
+	* elf32-m68hc1x.c (elf32_m68hc11_merge_symbol_attribute): New function.
+	* elf32-m68hc1x.h (elf32_m68hc11_merge_symbol_attribute): Declare.
+	* elf32-m68hc11.c (elf_backend_merge_symbol_attribute): Define.
+	* elf32-m68hc12.c (elf_backend_merge_symbol_attribute): Define.
 
-2011-03-04  Alan Modra  <amodra at gmail.com>
+2012-02-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	    Nick Clifton  <nickc at redhat.com>
 
-	* archive.c (bsd_write_armap): Don't call stat in deterministic
-	mode, and don't use st_mtime if stat returns error.
+	* oasys.c (oasys_write_header): Fix compilation warning on zero-sized
+	memset.
 
-2011-03-03  Michael Snyder  <msnyder at vmware.com>
+2012-02-10  Iain Sandoe  <idsandoe at googlemail.com>
 
-	* elf64-x86-64.c (elf_x86_64_relocate_section): Remove dead code.
+	* mach-o.c (bfd_mach_o_build_seg_command): Count zerofill section
+	vma additions in their logical, rather than physical order.
 
-	* coff-x86_64.c (coff_amd64_rtype_to_howto): Fencepost error.
+2012-02-10  Iain Sandoe  <idsandoe at googlemail.com>
 
-	* aoutx.h (aout_final_link): Use sizeof int not sizeof int*.
-	(aout_link_write_other_symbol): Missing break statement.
+	* mach-o.c (mach_o_section_name_xlat): Correct eh-frame section
+	parameters.
+	* mach-o-x86-64.c (text_section_names_xlat): New.
+	(mach_o_x86_64_segsec_names_xlat): New.
+	(bfd_mach_o_tgt_seg_table): Define to mach_o_x86_64_segsec_names_xlat.
+	* mach-o-i386.c (text_section_names_xlat): Correct section parameters.
 
-	* dwarf2.c (scan_unit_for_symbols): Stop memory leak.
+2012-02-10  Tristan Gingold  <gingold at adacore.com>
 
-	* archive.c (_bfd_slurp_extended_name_table): Fail if bfd_seek fails.
+	* elfnn-ia64.c (elfNN_vms_object_p): Change comparison operator
+	to avoid infinite loop.  Add comments.
 
-2011-03-03  H.J. Lu  <hongjiu.lu at intel.com>
+2012-02-09  H.J. Lu  <hongjiu.lu at intel.com>
 
-	* elf64-x86-64.c (elf_x86_64_check_tls_transition): Supprt TLS
-	x32 IE->LE transition.
-	(elf_x86_64_relocate_section): Likewise.
+	PR ld/13675
+	* cpu-i386.c (bfd_arch_i386_fill): Updated to support multi byte
+	nop instructions.
+	(bfd_arch_i386_short_nop_fill): New.
+	(bfd_arch_i386_long_nop_fill): Likewise.
+	Use bfd_arch_i386_short_nop_fill in 32bit bfd_arch_info
+	initializers.  Use bfd_arch_i386_long_nop_fill on 64bit
+	bfd_arch_info initializers.
 
-2011-03-02  Bernd Schmidt  <bernds at codesourcery.com>
+	* cpu-k1om.c (bfd_arch_i386_fill): Renamed to ...
+	(bfd_arch_i386_short_nop_fill): This.
+	Update bfd_arch_info initializers.
+	* cpu-l1om.c: Likewise.
 
-	* elflink.c (is_reloc_section): Remove function.
-	(get_dynamic_reloc_section_name): Construct string manually.
+2012-02-08  Alan Modra  <amodra at gmail.com>
 
-2011-02-28  Kai Tietz  <kai.tietz at onevision.com>
+	* elflink.c (_bfd_elf_gc_mark_rsec): Mark weakdef syms too.
+	(_bfd_elf_fix_symbol_flags): When a weakdef is def_regular, clear
+	the correct h->u.weakdef.
 
-	* archive.c (_bfd_find_nested_archive): Use filename_(n)cmp.
-	(adjust_relative_path): Likewise.
-	(_bfd_construct_extended_name_table): Likewise.
-	* corefile.c (generic_core_file_matches_executable_p): Likewise.
-	* elf32-bfin.c (bfinfdpic_relocate_section): Likewise.
-	* elf32-frv.c (elf32_frv_relocate_section): Likewise.
-	* elf32-spu.c (sort_bfds): Likewise.
-	(spu_elf_auto_overlay): Likewise.
-	* syms.c (_bfd_stab_section_find_nearest_line): Likewise.
-	* xcofflink.c (xcoff_set_import_path): Likewise.
-	* xtensa-isa.c (xtensa_regfile_lookup): Likewise.
-	(xtensa_regfile_lookup_shortname): Likewise.
+2012-02-07  Alan Modra  <amodra at gmail.com>
 
-2011-02-28  Alan Modra  <amodra at gmail.com>
+	* elf.c (elf_find_function): Don't use internal_elf_sym.
+	(_bfd_elf_maybe_function_sym): Likewise.  Replace elf_symbol_type
+	parameter with asymbol.
+	* elf64-ppc.c (ppc64_elf_maybe_function_sym): Likewise.
+	* elf-bfd.h (_bfd_elf_maybe_function_sym): Update prototype.
+	(struct elf_backend_data <maybe_function_sym>): Likewise.
 
-	PR 12513
-	* archive.c (bfd_slurp_bsd_armap_f2): Sanity check parsed_size and
-	stringsize.  Properly sanity check symdef_count.  Remove redundant
-	bfd_release.
+2012-02-02  Vidya Praveen (vidya.praveen at atmel.com)
 
-2011-02-25  Rafael Ávila de Espíndola <respindola at mozilla.com>
+	PR bfd/13410
+	* elf32-avr.c (elf32_avr_relax_section): Correct the
+	condition that qualifies the candidates for relaxation.
 
-	* plugin.c (bfd_plugin_object_p): Correctly set the filesize
-	and handle claim_file seeking. Only try to load the plugin once.
+2012-02-02  Tristan Gingold  <gingold at adacore.com>
 
-2011-02-22  Andreas Schwab  <schwab at redhat.com>
+	* bfdio.c (real_fopen): Remove unused vms_modes variable.
 
-	* elf32-m68k.c (elf_m68k_finish_dynamic_symbol): For a TLS_GD
-	relocation read the value from the second GOT slot.
+2012-02-02  Tristan Gingold  <gingold at adacore.com>
 
-2011-02-15  Tristan Gingold  <gingold at adacore.com>
+	* mach-o.c (bfd_mach_o_read_header): Silent uninitialized
+	variable warning.
 
-	* vms-alpha.c (alpha_vms_link_add_archive_symbols): Add a comment.
+2012-02-02  Tristan Gingold  <gingold at adacore.com>
 
-2011-02-15  Alan Modra  <amodra at gmail.com>
+	* archive.c (bfd_slurp_armap): Fix thinko in cast.
 
-	* elf64-ppc.c (ppc64_elf_edit_toc): Reinstate second read of
-	toc relocs.  Fuss over free(NULL).
+2012-01-31  H.J. Lu  <hongjiu.lu at intel.com>
 
-2011-02-14  Mike Frysinger  <vapier at gentoo.org>
+	PR ld/13616
+	* archures.c (bfd_arch_info): Add fill.
+	(bfd_default_arch_struct): Add bfd_arch_default_fill.
+	(bfd_arch_default_fill): New.
 
-	* elflink.c (bfd_elf_size_dynamic_sections): Add
-	bfd_get_symbol_leading_char to the start of newname.
+	* configure.in: Set bfd version to 2.22.52.
+	* configure: Regenerated.
 
-2011-02-13  Ralf Wildenhues  <Ralf.Wildenhues at gmx.de>
+	* cpu-alpha.c: Add bfd_arch_default_fill to bfd_arch_info
+	initializer.
+	* cpu-arc.c: Likewise.
+	* cpu-arm.c: Likewise.
+	* cpu-avr.c: Likewise.
+	* cpu-bfin.c: Likewise.
+	* cpu-cr16.c: Likewise.
+	* cpu-cr16c.c: Likewise.
+	* cpu-cris.c: Likewise.
+	* cpu-crx.c: Likewise.
+	* cpu-d10v.c: Likewise.
+	* cpu-d30v.c: Likewise.
+	* cpu-dlx.c: Likewise.
+	* cpu-epiphany.c: Likewise.
+	* cpu-fr30.c: Likewise.
+	* cpu-frv.c: Likewise.
+	* cpu-h8300.c: Likewise.
+	* cpu-h8500.c: Likewise.
+	* cpu-hppa.c: Likewise.
+	* cpu-i370.c: Likewise.
+	* cpu-i860.c: Likewise.
+	* cpu-i960.c: Likewise.
+	* cpu-ia64.c: Likewise.
+	* cpu-ip2k.c: Likewise.
+	* cpu-iq2000.c: Likewise.
+	* cpu-lm32.c: Likewise.
+	* cpu-m10200.c: Likewise.
+	* cpu-m10300.c: Likewise.
+	* cpu-m32c.c: Likewise.
+	* cpu-m32r.c: Likewise.
+	* cpu-m68hc11.c: Likewise.
+	* cpu-m68hc12.c: Likewise.
+	* cpu-m68k.c: Likewise.
+	* cpu-m88k.c: Likewise.
+	* cpu-mcore.c: Likewise.
+	* cpu-mep.c: Likewise.
+	* cpu-microblaze.c: Likewise.
+	* cpu-mips.c: Likewise.
+	* cpu-mmix.c: Likewise.
+	* cpu-moxie.c: Likewise.
+	* cpu-msp430.c: Likewise.
+	* cpu-mt.c: Likewise.
+	* cpu-ns32k.c: Likewise.
+	* cpu-openrisc.c: Likewise.
+	* cpu-or32.c: Likewise.
+	* cpu-pdp11.c: Likewise.
+	* cpu-pj.c: Likewise.
+	* cpu-plugin.c: Likewise.
+	* cpu-powerpc.c: Likewise.
+	* cpu-rl78.c: Likewise.
+	* cpu-rs6000.c: Likewise.
+	* cpu-rx.c: Likewise.
+	* cpu-s390.c: Likewise.
+	* cpu-score.c: Likewise.
+	* cpu-sh.c: Likewise.
+	* cpu-sparc.c: Likewise.
+	* cpu-spu.c: Likewise.
+	* cpu-tic30.c: Likewise.
+	* cpu-tic4x.c: Likewise.
+	* cpu-tic54x.c: Likewise.
+	* cpu-tic6x.c: Likewise.
+	* cpu-tic80.c: Likewise.
+	* cpu-tilegx.c: Likewise.
+	* cpu-tilepro.c: Likewise.
+	* cpu-v850.c: Likewise.
+	* cpu-vax.c: Likewise.
+	* cpu-w65.c: Likewise.
+	* cpu-we32k.c: Likewise.
+	* cpu-xc16x.c: Likewise.
+	* cpu-xstormy16.c: Likewise.
+	* cpu-xtensa.c: Likewise.
+	* cpu-z80.c: Likewise.
+	* cpu-z8k.c: Likewise.
+
+	* cpu-i386.c: Include "libiberty.h".
+	(bfd_arch_i386_fill): New.
+	Add bfd_arch_i386_fill to  bfd_arch_info initializer.
+
+	* cpu-k1om.c: Add bfd_arch_i386_fill to  bfd_arch_info initializer.
+	* cpu-l1om.c: Likewise.
+
+	* linker.c (default_data_link_order): Call abfd->arch_info->fill
+	if fill size is 0.
 
-	* configure: Regenerate.
+	* bfd-in2.h: Regenerated.
 
-2011-02-09  Alan Modra  <amodra at gmail.com>
+2012-01-27  Michael Eager  <eager at eagercon.com>
+
+	* elf32-microblaze.c (create_got_section):
+	Reuse existing .rela.got section.
+
+2012-01-23  Alan Modra  <amodra at gmail.com>
+
+	* elf-bfd.h: Formatting.
+	(struct elf_backend_data): Add "maybe_function_sym".
+	(_bfd_elf_maybe_function_sym): Declare.
+	* elfxx-target.h (elf_backend_maybe_function_sym): Define.
+	(elfNN_bed): Init new field.
+	* elf.c (elf_find_function): Use maybe_function_sym.
+	(_bfd_elf_maybe_function_sym): New function.
+	* elf64-ppc.c (elf_backend_maybe_function_sym): Define.
+	(ppc64_elf_maybe_function_sym): New function.
+
+2012-01-20  Francois Gouget  <fgouget at codeweavers.com>
+
+	PR binutils/13534
+	* archive.c (_bfd_ar_sizepad): New function. Correctly install and
+	pad the size field in an archive header.
+	(_bfd_generic_read_ar_hdr_mag): Use the correct type and scan
+	function for the archive size field.
+	(bfd_generic_openr_next_archived_file): Likewise.
+	(do_slurp_coff_armap): Likewise.
+	(_bfd_write_archive_contents): Likewise.
+	(_bfd_bsd44_write_ar_hdr): Use the new function.
+	(bfd_ar_hdr_from_filesystem): Likewise.
+	(_bfd_write_archive_contents): Likewise.
+	(bsd_write_armap): Likewise.
+	(coff_write_armap): Likewise.
+	* archive64.c (bfd_elf64_archive_write_armap): Likewise.
+	* bfdio.c (bfd_bread): Use correct type for archive element
+	sizes.
+	* ar.c (open_inarch): Likewise.
+	(extract_file): Likewise.
+	* libbfd-in.h (struct areltdata): Use correct types for
+	parsed_size and extra_size fields.
+	Prototype _bfd_ar_sizepad function.
+	* libbfd.h: Regenerate.
 
-	* elf64-ppc.c (ppc64_elf_edit_toc): Don't free toc relocs until
-	we are done.  When optimising large toc, check that a global
-	symbol on a toc reloc is defined in a kept section.
+2012-01-20  Ulrich Weigand  <ulrich.weigand at linaro.org>
 
-2011-02-08  Nick Clifton  <nickc at redhat.com>
+	* elf.c (elfcore_write_prpsinfo): Provide unconditionally.
+	Return NULL if core file generation is unsupported.
+	(elfcore_write_prstatus): Likewise.
+	* elf32-arm.c (elf32_arm_nabi_write_core_note): New function.
+	(elf_backend_write_core_note): Define.
 
-	PR binutils/12467
-	* elf.c (assign_file_positions_for_load_sections): Set the program
-	header offset and entry size to zero if there are no program
-	headers.
+2012-01-19  Tristan Gingold  <gingold at adacore.com>
 
-2011-02-08  Alan Modra  <amodra at gmail.com>
+	* pef.c: Add a comment.
+	* xsym.c: Likewise.
 
-	* elf64-ppc.c (ppc64_elf_edit_toc): Don't segfault on NULL
-	local_syms when looking for local symbols in .toc.
+2012-01-17  Alan Modra  <amodra at gmail.com>
 
-2011-02-01  Alan Modra  <amodra at gmail.com>
+	* elf32-ppc.c (ppc_elf_write_core_note <NT_PRPSINFO>): Don't leave
+	trailing garbage in the note.
+	* elf64-ppc.c (ppc64_elf_write_core_note <NT_PRPSINFO>): Likewise.
 
-	* elf64-ppc.c (ppc64_elf_next_input_section): Use elf_gp value
-	for toc pointer on any section having makes_toc_func_call set.
-	(check_pasted_section): Ensure pasted .init/.fini fragments use
-	the same toc if any has makes_toc_func_call set.
+2012-01-16  Daniel Green  <venix1 at gmail.com>
 
-2011-01-28  Joseph Myers  <joseph at codesourcery.com>
+	PR ld/13491
+	* coff-i386.c (coff_i386_rtype_to_howto <R_SECREL32>): Test
+	h->root.type not h->type.
+	* coff-x86_64.c (coff_amd64_rtype_to_howto <R_AMD64_SECREL>): Likewise.
 
-	* elf32-ppc.c (ppc_elf_link_hash_newfunc): Initialize has_sda_refs
-	field.
+2012-01-13  Iain Sandoe  <idsandoe at googlemail.com>
 
-2011-01-22  Richard Sandiford  <rdsandiford at googlemail.com>
+	* mach-o.c (bfd_mach_o_build_dysymtab_command): Handle absolute
+	indirect symbols.
 
-	* elfxx-mips.c (_bfd_mips_elf_merge_private_bfd_data): Ignore
-	common sections too.
+2012-01-13  Iain Sandoe  <idsandoe at googlemail.com>
 
-2011-01-18  H.J. Lu  <hongjiu.lu at intel.com>
+	* mach-o.c (bfd_mach_o_write_relocs): Move computation of relocs file
+	position from here... to (bfd_mach_o_build_seg_command): Here.
 
-	* elf64-x86-64.c (elf_backend_want_plt_sym): Redefine to 0 after
-	Solaris target.
+2012-01-12  Iain Sandoe  <idsandoe at googlemail.com>
 
-2011-01-18  Pierre Muller  <muller at ics.u-strasbg.fr>
+	* mach-o.c (bfd_mach_o_count_indirect_symbols): New.
+	(bfd_mach_o_build_dysymtab_command): Populate indirect symbol table.
+	* mach-o.h (bfd_mach_o_asymbol): Move declaration to start of the
+	file. (bfd_mach_o_section): Add indirect_syms field.
 
-	Fix compilation for mingw64.
-	* coffcode.h (coff_slurp_symbol_table): Add intptr_t intermediate
-	typecast to avoid warning.
-	* elf32-rx.c: Add "bfd_stdint.h" include required for int32_t type
-	usage.
-	* elfxx-ia64.c (elfNN_ia64_relax_br): Use intptr_t typeacast instead
-	of long for pointer to avoid warning.
-	(elfNN_ia64_relax_brl): Idem.
-	(elfNN_ia64_install_value): Idem.
-	* vms-alpha.c (_bfd_vms_slurp_etir): Idem.
+2012-01-11  Iain Sandoe  <idsandoe at googlemail.com>
 
-2011-01-17  Richard Sandiford  <richard.sandiford at linaro.org>
+	* mach-o.c (bfd_mach_o_build_seg_command): Separate computation of
+	vmsize from filesize.  Don't compute offsets or file sizes for
+	zerofill sections.
 
-	* elf32-arm.c (elf32_arm_check_relocs): Check needs_plt rather than
-	h->needs_plt when deciding whether to record a possible dynamic reloc.
+2012-01-11  Iain Sandoe  <idsandoe at googlemail.com>
 
-2011-01-17  Richard Sandiford  <richard.sandiford at linaro.org>
+	* mach-o.c (bfd_mach_o_build_commands): Make the building of each
+	command type independent.
 
-	* elf32-arm.c (elf32_arm_gc_sweep_hook): Remove all registered
-	dynamic relocs for the removed section.
+2012-01-11  Alan Modra  <amodra at gmail.com>
 
-2011-01-15  H.J. Lu  <hongjiu.lu at intel.com>
+	* elf64-ppc.c: Define more insns used in plt call stubs.
+	(ppc64_elf_brtaken_reloc): Assume isa version 2 or above.
+	(ppc64_elf_relocate_section): Likewise.
+	(enum ppc_stub_type): Add ppc_stub_plt_call_r2save.
+	(struct ppc_link_hash_table): Increase size of stub_count array.
+	Add plt_stub_align and plt_thread_safe.
+	(ALWAYS_USE_FAKE_DEP, ALWAYS_EMIT_R2SAVE): Define.
+	(plt_stub_size, plt_stub_pad): New functions.
+	(build_plt_stub): Emit barriers for power7 thread safety.  Don't
+	emit needless save of r2.
+	(build_tls_get_addr_stub): Adjust params.
+	(ppc_build_one_stub): Handle ppc_stub_plt_call_r2save and aligning
+	plt stubs.  Adjust build_*plt_stub calls.
+	(ppc_size_one_stub): Similarly.
+	(ppc64_elf_size_stubs): Accept plt_thread_safe and plt_stub_align
+	params.  Choose default for plt_thread_safe based on existence of
+	calls to thread creation functions.  Modify plt_call to
+	plt_call_r2save when no tocsave reloc found.  Align tail of stub
+	sections.
+	(ppc64_elf_build_stubs): Align tail of stub sections.  Adjust
+	output of stub statistics.
+	(ppc64_elf_relocate_section): Handle ppc_stub_plt_call_r2save.
+	* elf64-ppc.h (ppc64_elf_size_stubs): Update prototype.
 
-	* elf64-x86-64.c (elf_x86_64_check_relocs): Check invalid x32
-	relocations.
+2012-01-10  H.J. Lu  <hongjiu.lu at intel.com>
 
-2011-01-14  H.J. Lu  <hongjiu.lu at intel.com>
-
-	* elf64-x86-64.c (elf_x86_64_link_hash_table): Add pointer_r_type.
-	(elf_x86_64_link_hash_table_create): Set pointer_r_type.
-	(elf_x86_64_check_relocs): Handle R_X86_64_32 like R_X86_64_64
-	for ILP32.  Remove ABI_64_P PIC check for R_X86_64_8,
-	R_X86_64_16, R_X86_64_32 and R_X86_64_32S.
-	(elf_x86_64_relocate_section):  Handle R_X86_64_32 like R_X86_64_64
-	for ILP32.
-
-2011-01-14  Alan Modra  <amodra at gmail.com>
-
-	* bfd.c (bfd_perror): Flush stdout before and stderr after printing
-	error.
-	(_bfd_default_error_handler): Likewise.
-	* elf.c (print_segment_map): Likewise.
-	* libbfd.c (warn_deprecated): Likewise.
-	* som.c (som_sizeof_headers): No need to do so here.
-	* coff-i860.c: Replace use of printf for error messages with
-	_bfd_error_handler.
-	* coff-ppc.c: Likewise.
-	* coff-sh.c: Likewise.
-	* elf32-bfin.c: Likewise.
-	* elf32-dlx.c: Likewise.
-	* elf32-mep.c: Likewise.
-	* elf32-v850.c: Likewise.
-	* mach-o.c: Likewise.
-	* pef.c: Likewise.
+	PR ld/13581
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Remove ABI_64_P
+	check on R_X86_64_PCXX.
 
-2011-01-13  H.J. Lu  <hongjiu.lu at intel.com>
+2012-01-10  Tristan Gingold  <gingold at adacore.com>
 
-	* elf64-x86-64.c (elf_x86_64_link_hash_table): Remove
-	swap_reloca_out.
-	(elf_x86_64_link_hash_table_create): Don't set swap_reloca_out.
-	(elf_x86_64_check_relocs): Align relocation section to 4 byte
-	for 32bit.
-	(elf_x86_64_gc_sweep_hook): Replace ELF64_ST_TYPE with
-	ELF_ST_TYPE.
-	(elf_x86_64_finish_dynamic_symbol): Updated.
-	(elf_x86_64_finish_dynamic_sections): Don't use
-	Elf64_External_Dyn, bfd_elf64_swap_dyn_in, nor
-	bfd_elf64_swap_dyn_out.
+	* mach-o.c (bfd_mach_o_build_commands): Avoid uninitialized false
+	warning.
 
-2011-01-14  J. Park  <grassman at gmail.com>
+2012-01-10  Tristan Gingold  <gingold at adacore.com>
 
-	PR ld/12339
-	* elf32-arm.c (allocate_dynrelocs): Don't set up eh before
-	following bfd_link_hash_warning symbol link.
+	* bfdio.c (bfd_tell): Handle nested archives.
+	(bfd_seek): Ditto.
+	* cache.c (bfd_cache_lookup_worker): Ditto.
+	* archive.c (_bfd_get_elt_at_filepos): Remove code dealing with
+	nested archives.
+	(bfd_generic_openr_next_archived_file): Likewise.
 
-2011-01-10  Nathan Sidwell  <nathan at codesourcery.com>
-	    Glauber de Oliveira Costa  <glommer at gmail.com>
+2012-01-09  Iain Sandoe  <idsandoe at googlemail.com>
 
-	* reloc.c (BFD_RELOC_ARM_TLS_GOTDESC, BFD_RELOC_ARM_TLS_CALL,
-	BFD_RELOC_ARM_THM_TLS_CALL, BFD_RELOC_ARM_TLS_DESCSEQ,
-	BFD_RELOC_ARM_THM_TLS_DESCSEQ, BFD_RELOC_ARM_TLS_DESC): New
-	relocations.
-	* libbfd.h: Rebuilt.
-	* bfd-in2.h: Rebuilt.
-	* elf32-arm.c (elf32_arm_howto_table_1): Add new relocations.
-	(elf32_arm_reloc_map): Likewise.
-	(tls_trampoline, dl_tlsdesc_lazy_trampoline): New PLT templates.
-	(elf32_arm_stub_long_branch_any_tls_pic,
-	elf32_arm_stub_long_branch_v4t_thumb_tls_pic): New stub templates.
-	(DEF_STUBS): Add new stubs.
-	(struct_elf_arm_obj_data): Add local_tlsdesc_gotent field.
-	(elf32_arm_local_tlsdesc_gotent): New.
-	(GOT_TLS_GDESC): New mask.
-	(GOT_TLS_GD_ANY): Define.
-	(struct elf32_arm_link_hash_entry): Add tlsdesc_got field.
-	(elf32_arm_compute_jump_table_size): New.
-	(struct elf32_arm_link_hash_table): Add next_tls_desc_index,
-	num_tls_desc, dt_tlsdesc_plt, dt_tlsdesc_got, tls_trampoline,
-	sgotplt_jump_table_size fields.
-	(elf32_arm_link_hash_newfunc): Initialize tlsdesc_got field.
-	(elf32_arm_link_hash_table_create): Initialize new fields.
-	(arm_type_of_stub): Check TLS desc relocs too.
-	(elf32_arm_stub_name): TLS desc relocs can be shared.
-	(elf32_arm_tls_transition): Determine relaxation.
-	(arm_stub_required_alignment): Add tls stubs.
-	(elf32_arm_size_stubs): Likewise.
-	(elf32_arm_tls_relax): Perform TLS relaxing.
-	(elf32_arm_final_link_relocate): Process TLS DESC relocations.
-	(IS_ARM_TLS_GNU_RELOC): New.
-	(IS_ARM_TLS_RELOC): Use it.
-	(elf32_arm_relocate_section): Perform TLS relaxing.
-	(elf32_arm_check_relocs): Anticipate TLS relaxing, process tls
-	desc relocations.
-	(allocate_dynrelocs): Allocate tls desc relcoations.
-	(elf32_arm_output_arch_local_syms): Emit tls trampoline mapping
-	symbols.
-	(elf32_arm_size_dynamic_sections): Allocate tls trampolines and
-	got slots.
-	(elf32_arm_always_size_sections): New. Create _TLS_MODULE_BASE
-	symbol.
-	(elf32_arm_finish_dynamic_symbol): Adjust.
-	(arm_put_trampoline): New.
-	(elf32_arm_finish_dynamic_sections): Emit new dynamic tags and tls
-	trampolines.
-	(elf_backend_always_size_sections): Define.
+	* mach-o.c (bfd_mach_o_bfd_copy_private_symbol_data): Implement.
+	(bfd_mach_o_write_symtab): Remove handling for indirect syms.
+	(bfd_mach_o_primary_symbol_sort_key): Likewise.
+	(bfd_mach_o_cf_symbols): Likewise.
+	(bfd_mach_o_sort_symbol_table): Remove.
+	(bfd_mach_o_mangle_symbols): Adjust arguments, remove handling
+	for indirect and dysymtab counts.  Do the symbol sorting here.
+	(bfd_mach_o_build_dysymtab_command): Count the symbol types here.
+	Make the indirect symbols a TODO.
+	(bfd_mach_o_build_commands): Adjust call to bfd_mach_o_mangle_symbols.
+	(bfd_mach_o_make_empty_symbol): Specifically flag unset symbols with
+	a non-zero value.
+	(bfd_mach_o_read_symtab_symbol): Record the symbol index.
+	(bfd_mach_o_read_symtab_symbol): Adjust recording of global status.
+	* mach-o.h (mach_o_data_struct): Remove indirect and dysymtab entries.
+	(IS_MACHO_INDIRECT): Remove.
+	(SYM_MACHO_FIELDS_UNSET, SYM_MACHO_FIELDS_NOT_VALIDATED): New.
 
-2011-01-06  H.J. Lu  <hongjiu.lu at intel.com>
+2012-01-06  Nick Clifton  <nickc at redhat.com>
 
-	* elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Optimized.
+	PR binutils/13121
+	* reloc.c (bfd_generic_lookup_section_flags): Rename 'finfo' to
+	'flaginfo' to avoid conflicts with AIX system headers.
 
-2011-01-06  H.J. Lu  <hongjiu.lu at intel.com>
+2012-01-06  Tristan Gingold  <gingold at adacore.com>
 
-	PR ld/12366
-	PR ld/12371
-	* elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Properly
-	handle symbols marked with regular reference, but not non-GOT
-	reference when building shared library.
+	* bfdio.c (bfd_bread): Use arelt_size macro.
 
-	* elf32-i386.c (elf_i386_gc_sweep_hook): Properly handle
-	local and global STT_GNU_IFUNC symols when building shared
-	library.
-	* elf64-x86-64.c (elf_x86_64_gc_sweep_hook): Likewise.
+2012-01-06  Tristan Gingold  <gingold at adacore.com>
 
-2011-01-05  DJ Delorie  <dj at redhat.com>
+	* config.bfd (i[3-7]86-*-darwin*): Define targ64_selvecs.
 
-	* reloc.c: Add BFD_RELOC_RX_OP_NEG.
-	* libbfd.h: Regenerate.
-	* bfd-in2.h: Regenerate.
-	* elf32-rx.c: Add it to the list, corresponding to R_RX_OPneg.
+2012-01-05  Nick Clifton  <nickc at redhat.com>
 
-2011-01-03  H.J. Lu  <hongjiu.lu at intel.com>
+	PR ld/12161
+	* elf32-avr.c (elf32_avr_relax_delete_bytes): Read in relocs if
+	necessary.
 
-	* cpu-i386.c (bfd_i386_compatible): New.
-	(bfd_x64_32_arch_intel_syntax): Replace bfd_default_compatible
-	with bfd_i386_compatible.
-	(bfd_x86_64_arch_intel_syntax): Likewise.
-	(bfd_i386_arch_intel_syntax): Likewise.
-	(i8086_arch): Likewise.
-	(bfd_x64_32_arch): Likewise.
-	(bfd_x86_64_arch): Likewise.
-	(bfd_i386_arch): Likewise.
+2012-01-05  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-For older changes see ChangeLog-2010
+	Fix zero registers core files when built by gcc-4.7.
+	* elf64-x86-64.c (elf_x86_64_write_core_note): Remove variables p and
+	size.  Call elfcore_write_note for the local variables.  Remove the
+	final elfcore_write_note call.  Add NOTREACHED comments.
+
+2012-01-04  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.c (bfd_mach_o_fat_stat_arch_elt): New function.
+	(bfd_mach_o_generic_stat_arch_elt): Adjust.
+
+2012-01-04  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.c (bfd_mach_o_fat_member_init): New function.
+	(bfd_mach_o_openr_next_archived_file): Reindent.
+	Adjust to call bfd_mach_o_fat_member_init.
+	(bfd_mach_o_fat_extract): Adjust to call bfd_mach_o_fat_member_init.
+
+2012-01-04  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o-x86-64.c (bfd_mach_o_x86_64_swap_reloc_out): Handle
+	BFD_RELOC_32, BFD_RELOC_MACH_O_X86_64_PCREL32_1,
+	BFD_RELOC_MACH_O_X86_64_PCREL32_2,
+	BFD_RELOC_MACH_O_X86_64_PCREL32_4,
+	BFD_RELOC_MACH_O_X86_64_BRANCH32,
+	BFD_RELOC_MACH_O_X86_64_SUBTRACTOR32,
+	BFD_RELOC_MACH_O_X86_64_GOT.
+
+2012-01-04  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.h (bfd_mach_o_fvmlib_command): New structure.
+	(bfd_mach_o_load_command): Add fvmlib field.
+
+	* mach-o.c (bfd_mach_o_read_fvmlib): New function.
+	(bfd_mach_o_read_command): Handle fvmlib.
+
+2012-01-04  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.c (bfd_mach_o_convert_architecture): Reindent.
+	Decode msubtype for ARM.
+
+2012-01-04  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.c (bfd_mach_o_get_synthetic_symtab): Add comments.
+
+2012-01-04  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.h: Reindent header.
+	(bfd_mach_o_encryption_info_command): New structure.
+	(bfd_mach_o_load_command): Add encryption_info field.
+
+	* mach-o.c (bfd_mach_o_read_encryption_info): New function.
+	(bfd_mach_o_read_command): Handle BFD_MACH_O_LC_ENCRYPTION_INFO.
+	(bfd_mach_o_read_command): Adjust error message.
+
+2012-01-04  Shinichiro Hamaji  <shinichiro.hamaji at gmail.com>
+
+	* dwarf2.c (_bfd_dwarf2_slurp_debug_info): Factor out the part
+	which reads DWARF2 and stores in stash from find_line.
+	(find_line) Call _bfd_dwarf2_slurp_debug_info.
+	* libbfd-in.h (_bfd_dwarf2_slurp_debug_info): Add declaration.
+	* libbfd.h (_bfd_dwarf2_slurp_debug_info): Regenerate.
+	* mach-o.c (dsym_subdir): The name of subdir where debug
+	information may be stored.
+	(bfd_mach_o_lookup_uuid_command): New. Lookup a load command whose
+	type is UUID.
+	(bfd_mach_o_dsym_for_uuid_p): New. Check if the specified BFD is
+	corresponding to the executable.
+	(bfd_mach_o_find_dsym): New. Find a debug information BFD in the
+	specified binary file.
+	(bfd_mach_o_follow_dsym): New. Find a debug information BFD for
+	the original BFD.
+	(bfd_mach_o_find_nearest_line): Check dSYM files for Mach-O
+	executables, dylibs, and bundles.
+	(bfd_mach_o_close_and_cleanup): Clean up BFDs for the dSYM file.
+	* mach-o.h (dsym_bfd): The BFD of the dSYM file.
+
+2012-01-03  Iain Sandoe  <idsandoe at googlemail.com>
+
+	* mach-o.c (bfd_mach_o_mangle_symbols): Put in the section index
+	for stabd symbols.
+	(bfd_mach_o_primary_symbol_sort_key): Adjust for stabs.
+	(bfd_mach_o_cf_symbols): Likewise.
+
+2012-01-03  Iain Sandoe  <idsandoe at googlemail.com>
+
+	* mach-o.c (bfd_mach_o_mangle_symbols): Correct typo.
+
+2012-01-03  Iain Sandoe  <idsandoe at googlemail.com>
+
+	* mach-o.c (bfd_mach_o_write_symtab): Fill in the string table index
+	as the value of an indirect symbol.  Keep the string table index in
+	non-indirect syms for reference.
+	(bfd_mach_o_write_dysymtab): New.
+	(bfd_mach_o_primary_symbol_sort_key): New.
+	(bfd_mach_o_cf_symbols): New.
+	(bfd_mach_o_sort_symbol_table): New.
+	(bfd_mach_o_mangle_symbols): Return early if no symbols.  Sort symbols.
+	If we are emitting a dysymtab, process indirect symbols and count the
+	number of each other kind.
+	(bfd_mach_o_mangle_sections): New.
+	(bfd_mach_o_write_contents): Split out some pre-requisite code into
+	the command builder. Write dysymtab if the command is present.
+	(bfd_mach_o_count_sections_for_seg): New.
+	(bfd_mach_o_build_seg_command): New.
+	(bfd_mach_o_build_dysymtab_command): New.
+	(bfd_mach_o_build_commands): Reorganize to support the fact that some
+	commands are optional and should not be emitted if there are no
+	sections or symbols.
+	(bfd_mach_o_set_section_contents): Amend comment.
+	* mach-o.h: Amend and add to comments.
+	(mach_o_data_struct): Add fields for dysymtab symbols counts and a
+	pointer to the indirects, when present.
+	(bfd_mach_o_should_emit_dysymtab): New macro.
+	(IS_MACHO_INDIRECT): Likewise.
+
+For older changes see ChangeLog-2011
 

 Local Variables:
 mode: change-log
diff --git a/bfd/ChangeLog-2011 b/bfd/ChangeLog-2011
new file mode 100644
index 0000000..9af9565
--- /dev/null
+++ b/bfd/ChangeLog-2011
@@ -0,0 +1,3383 @@
+2011-12-24  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* elf32-rl78.c (rl78_elf_relocate_section, rl78_dump_symtab)
+	(rl78_elf_relax_section): Remove debug prints.
+
+2011-12-23  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* elf32-rl78.c (rl78_elf_relocate_section, rl78_elf_relax_section): Use
+	BFD_VMA_FMT.
+
+2011-12-23  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* elf32-rl78.c (prev_alignment, sec_start): Remove unused variables.
+
+2011-12-23  Tristan Gingold  <gingold at adacore.com>
+
+	* vms-lib.c (vms_traverse_index): Move pointer update code.
+
+2011-12-22  DJ Delorie  <dj at redhat.com>
+
+	* elf32-rl78.c (rl78_elf_howto_table): Add R_RL78_RH_RELAX.
+	(rl78_reloc_map): Add BFD_RELOC_RL78_RELAX.
+	(rl78_elf_relocate_section): Add R_RL78_RH_RELAX, R_RL78_RH_SFR,
+	and R_RL78_RH_SADDR.
+	(rl78_elf_finish_dynamic_sections): Only validate PLT section if
+	we didn't relax anything, as relaxing might remove a PLT reference
+	after we've set up the table.
+	(elf32_rl78_relax_delete_bytes): New.
+	(reloc_bubblesort): New.
+	(rl78_offset_for_reloc): New.
+	(relax_addr16): New.
+	(rl78_elf_relax_section): Add support for relaxing long
+	instructions into short ones.
+
+2011-12-22  Martin Schwidefsky  <schwidefsky at de.ibm.com>
+
+	* elf32-s390.c (elf_s390_relocate_section): Add check for debugging
+	section in LD to LE linker relaxation for R_390_TLS_LDO32.
+	* elf64-s390.c (elf_s390_relocate_section): Likewise for
+	R_390_TLS_LDO64.
+
+2011-12-21  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* elf32-arm.c (elf32_arm_nabi_grok_psinfo): Fill in core_pid.
+
+2011-12-19  Iain Sandoe  <idsandoe at googlemail.com>
+
+	* mach-o-i386.c (bfd_mach_o_section_type_valid_for_tgt): Define NULL.
+	* mach-o-target.c (bfd_mach_o_backend_data): Initialize
+	bfd_mach_o_section_type_valid_for_tgt
+	* mach-o-x86-64.c (bfd_mach_o_section_type_valid_for_x86_64): New.
+	(bfd_mach_o_section_type_valid_for_tgt): Set to
+	bfd_mach_o_section_type_valid_for_x86_64.
+	* mach-o.c (bfd_mach_o_section_type_name): Reorder and eliminate dup.
+	(bfd_mach_o_section_attribute_name): Reorder.
+	(bfd_mach_o_get_section_type_from_name): If the target has defined a
+	validator for section types, then use it.
+	* mach-o.h (bfd_mach_o_get_section_type_from_name): Alter declaration
+	to include the bfd.
+
+2011-12-19  Chung-Lin Tang  <cltang at codesourcery.com>
+
+	* reloc.c (BFD_RELOC_MIPS16_TLS_GD,BFD_RELOC_MIPS16_TLS_LDM,
+	BFD_RELOC_MIPS16_TLS_DTPREL_HI16,BFD_RELOC_MIPS16_TLS_DTPREL_LO16,
+	BFD_RELOC_MIPS16_TLS_GOTTPREL,BFD_RELOC_MIPS16_TLS_TPREL_HI16,
+	BFD_RELOC_MIPS16_TLS_TPREL_LO16): New relocations for MIPS16 TLS.
+	* bfd-in2.h (bfd_reloc_code_real): Regenerate.
+	* libbfd.h (bfd_reloc_code_real_names): Regenerate.
+	* elf32-mips.c (elf_mips16_howto_table_rel): Add R_MIPS16_TLS_*
+	entries.
+	(mips16_reloc_map): Add BFD_RELOC_MIPS16_TLS_* to R_MIPS16_TLS_*
+	mappings.
+	* elfn32-mips.c (elf_mips16_howto_table_rel,
+	elf_mips16_howto_table_rela): Add R_MIPS16_TLS_* entries.
+	(mips16_reloc_map): Add BFD_RELOC_MIPS16_TLS_* to R_MIPS16_TLS_*
+	mappings.
+	* elf64-mips.c (mips16_elf64_howto_table_rel,
+	mips16_elf64_howto_table_rela): Add R_MIPS16_TLS_* entries.
+	(mips16_reloc_map): Add BFD_RELOC_MIPS16_TLS_* to R_MIPS16_TLS_*
+	mappings.
+	* elfxx-mips.c (TLS_RELOC_P,mips16_reloc_p,
+	_bfd_mips_elf_check_relocs): Add cases for R_MIPS16_TLS_* relocations.
+	(tls_gd_reloc_p): Add R_MIPS16_TLS_GD case.
+	(tls_ldm_reloc_p): Add R_MIPS16_TLS_LDM case.
+	(tls_gottprel_reloc_p): Add R_MIPS16_TLS_GOTTPREL case.
+	(mips_elf_calculate_relocation): Add cases for R_MIPS16_TLS_*,
+	R_MIPS_TLS_DTPREL32/64, and R_MIPS_TLS_TPREL32/64 relocations.
+
+2011-12-19  Chung-Lin Tang  <cltang at codesourcery.com>
+	    Catherine Moore  <clm at codesourcery.com>
+	    Sandra Loosemore  <sandra at codesourcery.com>
+	    Richard Sandiford  <rdsandiford at googlemail.com>
+
+	* elfxx-mips.c (mips_elf_local_pic_function_p): Return true when
+	H is a MIPS16 function with a kept 32-bit stub. Update comments.
+	(mips_elf_get_la25_target): New function.
+	(mips_elf_add_la25_intro): Change to use mips_elf_get_la25_target().
+	(mips_elf_add_la25_stub): Move compute of use_trampoline_p down,
+	change to use mips_elf_get_la25_target().
+	(mips_elf_relocation_needs_la25_stub): Add target_is_16_bit_code_p
+	parameter, add switch case for R_MIPS16_26.
+	(mips_elf_calculate_relocation): Redirect relocation to point to the
+	LA25 stub if it exists, instead of the MIPS16 stub. Update arguments
+	of call to mips_elf_relocation_needs_la25_stub(), don't use la25 stub
+	for mips16->mips16 calls.
+	(_bfd_mips_elf_check_relocs): Update arguments of call to
+	mips_elf_relocation_needs_la25_stub().
+	(mips_elf_create_la25_stub): Change to use mips_elf_get_la25_target().
+
+2011-12-16  Shinichiro Hamaji  <shinichiro.hamaji at gmail.com>
+
+	* mach-o-i386.c (TARGET_PRIORITY): Define as 0 (top priority)
+	* mach-o-target.c (TARGET_NAME): Use TARGET_PRIORITY
+	* mach-o-x86-64.c (TARGET_PRIORITY): Define as 0 (top priority)
+	* mach-o.c (bfd_mach_o_header_p): Remove special handling for
+	mach-o-i386.
+	(TARGET_PRIORITY) Set 1 for mach-o-be and mach-o-le, and set 0 for
+	mach-o-fat.
+
+2011-12-15  Kevin Buettner  <kevinb at redhat.com>
+
+	* elf32-am33lin.c (elf32_am33lin_grok_prstatus): Add case
+	to correspond to a smaller ELF_NGREG defined by the kernel.
+
+2011-12-15  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf64-x86-64.c (ELF32_DYNAMIC_INTERPRETER): Set to
+	 "/lib/ldx32.so.1".
+
+2011-12-15  Iain Sandoe  <iains at gcc.gnu.org>
+
+	* mach-o.c (bfd_mach_o_mkobject_init): Initialize dyn_reloc_cache.
+	(bfd_mach_o_close_and_cleanup): Only cleanup Mach-O private data
+	for object files.
+
+2011-12-15  Shinichiro Hamaji  <shinichiro.hamaji at gmail.com>
+
+	* mach-o.c (bfd_mach_o_canonicalize_reloc): Update relocation
+	table only when there isn't the cahce.
+	(bfd_mach_o_get_dynamic_reloc_upper_bound): Need one more space
+	for a pointer for the watchdog.
+	(bfd_mach_o_canonicalize_dynamic_reloc): Utilize cache like
+	bfd_mach_o_canonicalize_reloc.
+	(bfd_mach_o_close_and_cleanup): Call bfd_mach_o_free_cached_info.
+	(bfd_mach_o_free_cached_info): Free up cache data.
+	* mach-o.h (reloc_cache): A place to store cache of dynamic relocs.
+	(bfd_mach_o_free_cached_info): Add declaration.
+
+2011-12-15  Iain Sandoe  <iains at gcc.gnu.org>
+
+	* mach-o-target.c (bfd_mach_o_bfd_set_private_flags): Use
+	bfd_mach_o_bfd_set_private_flags.
+	* mach-o.c (bfd_mach_o_bfd_set_private_flags): New.
+	* mach-o.h (bfd_mach_o_bfd_set_private_flags): Declare.
+
+2011-12-14  Nick Clifton  <nickc at redhat.com>
+
+	PR ld/12451
+	* elfcode.h (elf_checksum_contents): Read in the section's
+	contents if they are not already available, and the section
+	actually has some contents.
+
+	* compress.c (bfd_get_full_section_contents): Use zmalloc to
+	allocate the buffers so that excess bytes are guaranteed to be
+	zero.
+
+2011-12-14  Iain Sandoe  <iains at gcc.gnu.org>
+
+	* mach-o-i386.c (text_section_names_xlat): New table.
+	(data_section_names_xlat): Likewise.
+	(import_section_names_xlat): Likewise.
+	(mach_o_i386_segsec_names_xlat): Likewise.
+	(bfd_mach_o_tgt_seg_table): Use new tables.
+	* mach-o-x86-64.c (bfd_mach_o_tgt_seg_table): Set NULL.
+	* mach-o.c (mach_o_section_name_xlat, mach_o_segment_name_xlat):
+	Move to mach-o.h as   typedefs.
+	(text_section_names_xlat): Update for current GCC usage.
+	(data_section_names_xlat): Likewise.
+	(dwarf_section_names_xlat): Likewise.
+	(objc_section_names_xlat): New table.
+	(segsec_names_xlat): Add objc table.
+	(bfd_mach_o_normalize_section_name):  Replace with...
+	(bfd_mach_o_section_data_for_mach_sect): New.
+	(bfd_mach_o_section_data_for_bfd_name): New.
+	(bfd_mach_o_section_data_for_bfd_name): Update to use additional data.
+	(bfd_mach_o_convert_section_name_to_mach_o): Likewise.
+	(bfd_mach_o_bfd_copy_private_section_data): Implement.
+	(bfd_mach_o_write_symtab): Write a zero-length string as the first entry
+	for compatibility with system tools.
+	(bfd_mach_o_build_commands): Update section alignment info.
+	(bfd_mach_o_new_section_hook): Use translation table data to define
+	default section flags, type, attributes and alignment, when available.
+	(bfd_mach_o_init_section_from_mach_o): Add TODO comment.
+	(bfd_mach_o_section_type_name): Add 'symbol_stubs'.
+	(bfd_mach_o_section_attribute_name): Add 'self_modifying_code'.
+	(bfd_mach_o_get_section_type_from_name): Change "not-found" return
+	value.
+	(bfd_mach_o_tgt_seg_table): Set default NULL.
+	* mach-o.h (bfd_mach_o_segment_command):  Use define for name length.
+	(bfd_mach_o_backend_data): Move until after contents are defined.
+	(bfd_mach_o_normalize_section_name): Remove.
+	(bfd_mach_o_convert_section_name_to_bfd): Declare.
+	(mach_o_section_name_xlat): Declare.
+	(mach_o_segment_name_xlat): Declare.
+	(bfd_mach_o_section_data_for_mach_sect): Declare.
+	(bfd_mach_o_section_data_for_bfd_name): Declare.
+
+2011-12-13  Shinichiro Hamaji  <shinichiro.hamaji at gmail.com>
+
+	* dwarf2.c (bfd_dwarf2_cleanup_debug_info): Accept stash as an
+	argument like other functions to support formats other than ELF.
+	* elf-bfd.h (bfd_dwarf2_cleanup_debug_info): Move to bfd-in.h.
+	* elf.c (_bfd_elf_close_and_cleanup): Pass dwarf2_find_line_info
+	in tdata as a parameter.
+	* libbfd-in.h (bfd_dwarf2_cleanup_debug_info): Move from
+	elf-bfd.h.
+	* libbfd.h (bfd_dwarf2_cleanup_debug_info): Regenerate.
+	* mach-o-target.c (bfd_mach_o_close_and_cleanup): Remove the
+	fallback macro.
+	(bfd_mach_o_find_nearest_line): Likewise.
+	* mach-o.c (bfd_mach_o_find_nearest_line): Add the definition
+	which calls _bfd_dwarf2_find_nearest_line.
+	(bfd_mach_o_close_and_cleanup): Likewise.
+	* mach-o.h (mach_o_data_struct): Add dwarf2_find_line_info.
+	(bfd_mach_o_find_nearest_line): Add declaration.
+	(bfd_mach_o_close_and_cleanup): Add declaration.
+
+2011-12-13  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.c (bfd_mach_o_read_symtab_symbols): Make global.  Remove
+	prototype.
+	(bfd_mach_o_section_get_entry_size): Make global.
+	(bfd_mach_o_section_get_nbr_indirect): Likewise.
+	(bfd_mach_o_read_symtab_strtab): Likewise.
+	(struct bfd_mach_o_xlat_name): Move to mach-o.h
+	(bfd_mach_o_print_flags): Move to binutils/od-macho.c
+	(bfd_mach_o_get_name_of_null, bfd_mach_o_get_name): Likewise.
+	(bfd_mach_o_cpu_name, bfd_mach_o_filetype_name): Likewise.
+	(bfd_mach_o_header_flags_name): Likewise.
+	(bfd_mach_o_load_command_name): Likewise.
+	(bfd_mach_o_print_private_header): Likewise.
+	(bfd_mach_o_print_section_map, bfd_mach_o_print_section): Likwise.
+	(bfd_mach_o_print_segment, bfd_mach_o_print_dysymtab): Likewise.
+	(bfd_mach_o_print_dyld_info): Likewise.
+	(bfd_mach_o_print_private_bfd_data): Remove.
+	(bfd_mach_o_type_name): Make global.
+	(bfd_mach_o_section_attribute_name): Likewise.
+	* mach-o.h (bfd_mach_o_xlat_name): Added.
+	(bfd_mach_o_section_get_nbr_indirect)
+	(bfd_mach_o_section_get_entry_size)
+	(bfd_mach_o_read_symtab_symbols)
+	(bfd_mach_o_read_symtab_strtab)
+	(bfd_mach_o_section_attribute_name)
+	(bfd_mach_o_section_type_name): Likewise.
+	* mach-o-target.c (bfd_mach_o_bfd_print_private_bfd_data): Define.
+
+2011-12-13  Chung-Lin Tang  <cltang at codesourcery.com>
+
+	* elfxx-mips.c (mips_elf_calculate_relocation): Correct
+	R_MIPS16_HI16/R_MIPS16_LO16 handling of two cleared lower bits,
+	update comments.
+
+2011-12-12  Iain Sandoe  <iains at gcc.gnu.org>
+
+	* mach-o.c (bfd_mach_o_read_section_32): Null-terminate sectname.
+	(bfd_mach_o_read_section_64): Likewise.
+
+2011-12-11  John Davis Anglin  <dave.anglin at nrc-cnrc.gc.ca>
+
+	PR binutils/13476
+	* elf32-hppa.c (final_link_relocate): Convert R_PARISC_TLS_GD21L,
+	R_PARISC_TLS_LDM21L and R_PARISC_TLS_IE21L relocations to
+	R_PARISC_DPREL21L when not doing a shared link.  Likewise convert
+	R_PARISC_TLS_GD14R, R_PARISC_TLS_LDM14R and R_PARISC_TLS_IE14R to
+	R_PARISC_DPREL14R.  Handle R_PARISC_TLS_GD21L, R_PARISC_TLS_LDM21L
+	and R_PARISC_TLS_IE21L with R_PARISC_DLTIND21L.
+
+2011-12-10  David Daney  <david.daney at cavium.com>
+
+	* elfxx-mips.c (mips_elf_link_hash_table.rld_value): Remove.
+	(mips_elf_link_hash_table.rld_symbol): New field;
+	(MIPS_ELF_RLD_MAP_SIZE): New macro.
+	(_bfd_mips_elf_add_symbol_hook): Remember __rld_obj_head symbol
+	in rld_symbol.
+	(_bfd_mips_elf_create_dynamic_sections): Remember __rld_map symbol
+	in rld_symbol.
+	(_bfd_mips_elf_size_dynamic_sections): Set correct size for .rld_map.
+	(_bfd_mips_elf_finish_dynamic_symbol): Remove .rld_map handling.
+	(_bfd_mips_elf_finish_dynamic_sections): Use rld_symbol to
+	calculate DT_MIPS_RLD_MAP value.
+	(_bfd_mips_elf_link_hash_table_create): Initialize rld_symbol,
+	quit initializing rld_value.
+
+2011-12-08  Andrew Pinski  <apinski at cavium.com>
+            Adam Nemet  <anemet at caviumnetworks.com>
+
+	* archures.c (bfd_mach_mips_octeon2): New macro
+	* bfd-in2.h: Regenerate.
+	* cpu-mips.c (I_mipsocteon2): New enum value.
+	(arch_info_struct): Add bfd_mach_mips_octeon2.
+	* elfxx-mips.c (_bfd_elf_mips_mach): Support E_MIPS_MACH_OCTEON2.
+	(mips_set_isa_flags): Add bfd_mach_mips_octeon2.
+	(mips_mach_extensions): Add bfd_mach_mips_octeon2.
+
+2011-12-07  Alan Modra  <amodra at gmail.com>
+
+	PR ld/12772
+	* elflink.c (elf_gc_sweep_symbol): Discard unmarked symbols
+	defined in shared libraries.
+
+2011-12-07  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.c (bfd_mach_o_canonicalize_symtab): Fix indentation.
+	Adjust the condition.
+	(bfd_mach_o_read_symtab_symbol): Now returns a bfd_boolean.
+	Adjust return statements.
+	(bfd_mach_o_read_symtab_strtab): Likewise.
+	(bfd_mach_o_read_symtab_symbols): Likewise.
+	(bfd_mach_o_scan_start_address): Likewise.  Make it static.
+	(bfd_mach_o_scan): Likewise.
+	(bfd_mach_o_read_dysymtab_symbol): Remove unused function.
+	(bfd_mach_o_header_p): Adjust call.
+	(bfd_mach_o_cpu_name): Make it const.
+	(bfd_mach_o_filetype_name): Likewise.
+	(bfd_mach_o_header_flags_name): Likewise.
+	(bfd_mach_o_section_type_name): Likewise.
+	(bfd_mach_o_section_attribute_name): Likewise.
+	(bfd_mach_o_load_command_name): Likewise.
+	(bfd_mach_o_get_section_type_from_name): Add a const qualifier
+	after above change.
+	(bfd_mach_o_get_section_attribute_from_name): Likewise.
+	* mach-o.h (bfd_mach_o_read_dysymtab_symbol)
+	(bfd_mach_o_scan_start_address, bfd_mach_o_scan): Remove.
+
+2011-12-06  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* elf-bfd.h (elfcore_write_s390_last_break): Add prototype.
+	(elfcore_write_s390_system_call): Likewise.
+	* elf.c (elfcore_write_s390_last_break): New function.
+	(elfcore_write_s390_system_call): Likewise.
+	(elfcore_write_register_note): Call them.
+	(elfcore_grok_s390_last_break): New function.
+	(elfcore_grok_s390_system_call): Likewise.
+	(elfcore_grok_note): Call them.
+
+2011-12-05  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.c (bfd_mach_o_read_symtab_symbol): Accept indirect symbols.
+
+2011-12-05  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.c (bfd_mach_o_write_contents): Handle LC_LOAD_UPWARD_DYLIB.
+	(bfd_mach_o_read_dylib): Likewise.
+	(bfd_mach_o_read_command): Likewise.
+	(bfd_mach_o_bfd_print_private_bfd_data): Likewise.
+
+2011-12-05  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.c (bfd_mach_o_read_command): Add the bfd in the error
+	message.
+	(bfd_mach_o_openr_next_archived_file): Use arch name as member name.
+	(bfd_mach_o_fat_extract): Ditto.
+
+2011-12-03  Alan Modra  <amodra at gmail.com>
+
+	PR ld/13468
+	* elflink.c (bfd_elf_final_link): Don't segfault when checking
+	for DT_TEXTREL and .dynamic does not exist.
+
+2011-12-03  Alan Modra  <amodra at gmail.com>
+
+	PR ld/13470
+	* elf32-ppc.c (ppc_elf_copy_indirect_symbol): Revert substantive
+	change in 2011-07-01 commit.  Comment.
+	* elf64-ppc.c (ppc64_elf_copy_indirect_symbol): Likewise.
+
+2011-12-01  Mikael Pettersson  <mikpe at it.uu.se>
+
+	* elf32-m68k.c (elf_m68k_check_relocs) <R_68K_8, R68K_16, R_68K_32>: For
+	non-SEC_ALLOC sections break before GOT and PLT accounting.
+
+2011-12-01  Hans-Peter Nilsson  <hp at axis.com>
+
+	* elf32-cris.c (cris_elf_check_relocs) <plt accounting for
+	R_CRIS_8, R_CRIS_16, and R_CRIS_32>: Move early break for
+	non-SEC_ALLOC sections before GOT and PLT accounting.
+
+2011-11-29  Andrew Pinski  <apinski at cavium.com>
+
+	* archures.c (bfd_mach_mips_octeonp): New macro.
+	* bfd-in2.h: Regenerate.
+	* bfd/cpu-mips.c (I_mipsocteonp): New enum value.
+	(arch_info_struct): Add bfd_mach_mips_octeonp.
+	* elfxx-mips.c (mips_set_isa_flags): Add bfd_mach_mips_octeonp.
+	(mips_mach_extensions): Add bfd_mach_mips_octeonp.
+
+2011-11-23  Tristan Gingold  <gingold at adacore.com>
+
+	* vms-lib.c (get_idxlen): Add comments.  Fix type in sizeof.
+	(vms_write_index): Add comments.
+
+2011-11-22  DJ Delorie  <dj at redhat.com>
+
+	* elf32-rx.c (rx_elf_object_p): Add more checks for "scanning" to
+	avoid using the special non-swapping target when not explicitly
+	requested.
+
+2011-11-22  Daniel Calcoen  <Daniel.Calcoen at cern.ch>
+
+	* elf32-rx.c (rx_elf_object_p): Correct typo: lma->vma.
+
+2011-11-22  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.c (bfd_mach_o_print_symbol): Display COM for common
+	symbols.  Print section name in brackets.
+
+2011-11-21  Andreas Tobler  <andreast at fgznet.ch>
+
+	* config.bfd: Add vectors for powerpc and powerpc64-freebsd.
+	* configure.in (TDEFINES): Add rules for powerpc*-freebsd.
+	* configure: Regenerate.
+	* elf32-ppc.c: Add powerpc-freebsd definitions.
+	* elf64-ppc.c: Add powerpc64-freebsd definitions.
+	* targets.c: Add bits for powerpc and powerpc64-freebsd.
+
+2011-11-17  Philipp Thomas  <philipp at thogro.org>
+
+	* elf32-arm.c (elf32_thumb_to_arm_stub): Sync message so that it
+	needs to be translated only once.
+
+2011-11-16  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* elf64-mips.c (mips_elf64_howto_table_rela): Set src_mask to
+	zero throughout.
+	(mips16_elf64_howto_table_rela): Likewise.
+	(micromips_elf64_howto_table_rela): Likewise.
+	* elfn32-mips.c (elf_mips_howto_table_rela): Likewise.
+	(elf_mips16_howto_table_rela): Likewise.
+	(elf_micromips_howto_table_rela): Likewise.
+
+2011-11-15  Alan Modra  <amodra at gmail.com>
+	    Andreas Tobler  <andreast at fgznet.ch>
+
+	* elflink.c (_bfd_elf_create_got_section): Replace
+	bfd_make_section_with_flags with bfd_make_section_anyway_with_flags.
+	(_bfd_elf_link_create_dynamic_sections): Likewise.
+	* elf32-ppc.c (ppc_elf_create_glink): Likewise.
+	(ppc_elf_create_dynamic_sections): Likewise.
+
+2011-11-14  Maxim Kuvyrkov  <maxim at codesourcery.com>
+
+	* elfxx-mips.c (mips_n64_exec_plt0_entry): Use 64-bit move.
+
+2011-11-08  Nick Clifton  <nickc at redhat.com>
+
+	* elf-m10300.c (mn10300_elf_relax_section): Fix check for an
+	immediate move into an address register.
+
+2011-11-09  Alan Modra  <amodra at gmail.com>
+
+	* elflink.c (bfd_elf_gc_mark_dynamic_ref_symbol): Mark syms in
+	executables when export_dynamic.
+
+2011-11-08  Alan Modra  <amodra at gmail.com>
+
+	* elf64-ppc.c (struct ppc64_elf_obj_tdata): Rename
+	ha_relocs_not_using_r2 to unexpected_toc_insn.
+	(ok_lo_toc_insn): New function.
+	(ppc64_elf_edit_toc): Check insn on lo toc reloc.  Emit warning.
+	(ppc64_elf_relocate_section): Don't check insn on lo toc reloc here.
+	Handle addic on lo toc reloc.
+
+2011-11-06  John David Anglin  <dave.anglin at nrc-cnrc.gc.ca>
+
+	PR ld/13387
+	* elf32-hppa.c (elf32_hppa_hide_symbol): Make STT_GNU_IFUNC symbol
+	go through PLT.  Reset plt field with init_plt_offset.
+	(elf32_hppa_adjust_dynamic_symbol): Ensure that a PLT slot is
+	allocated for symbols referenced by a plabel.
+
+2011-11-02  DJ Delorie  <dj at redhat.com>
+
+	* elf32-rl78.c (rl78_elf_merge_private_bfd_data): Delete unused
+	variable.
+
+2011-11-02  Jan Beulich  <jbeulich at suse.com>
+
+	* coffgen.c (coff_write_alien_symbol): Make public. Add 'struct
+	internal_syment *' parameter. Extend 'dummy' to an array with two
+	elements. Set n_numaux early. Handle BSF_FILE.
+	(coff_write_symbols): Pass NULL as new third argument to
+	coff_write_alien_symbol().
+	* cofflink.c (_bfd_coff_final_link): Don't use COFF-specific
+	obj_raw_syment_count() on non-COFF input BFD. Insert local symbols
+	from non-COFF input BFDs.
+	* libcoff-in.h (coff_write_alien_symbol): Declare.
+	* libcoff.h (coff_write_alien_symbol): Re-generate.
+
+2011-11-01  DJ Delorie  <dj at redhat.com>
+
+	* Makefile.am (ALL_MACHINES): Add cpu-rl78.lo.
+	(ALL_MACHINES_CFILES): Add cpu-rl78.c.
+	(BFD32_BACKENDS): Add elf32-rl78.lo.
+	(BFD32_BACKENDS_CFILES): Add elf32-rl78.c.
+	(Makefile.in): Regenerate.
+	* archures.c (bfd_architecture): Define bfd_arch_rl78.
+	(bfd_archures_list): Add bfd_rl78_arch.
+	* config.bfd: Add rl78-*-elf.
+	* configure.in: Add bfd_elf32_rl78_vec.
+	* reloc.c (bfd_reloc_code_type): Add BFD_RELOC_RL78_* relocations.
+	* targets.c (bfd_target_vector): Add bfd_elf32_rl78_vec.
+	* Makefile.in: Regenerate.
+	* bfd-in2.h: Regenerate.
+	* configure: Regenerate.
+	* libbfd.h: Regenerate.
+	* cpu-rl78.c: New file.
+	* elf32-rl78.c: New file.
+
+2011-10-26  Nick Clifton  <nickc at redhat.com>
+
+	PR ld/13049
+	* elf64-ppc.c (STUB_SUFFIX): Revert previous delta.
+	* elf32-hppa.c (STUB_SUFFIX): Likewise.
+
+2011-10-25  Joern Rennecke  <joern.rennecke at embecosm.com>
+
+	* Makefile.am (ALL_MACHINES): Add cpu-epiphany.lo.
+	(ALL_MACHINES_CFILES): Add cpu-epiphany.c.
+	(BFD32_BACKENDS): Add elf32-epiphany.lo.
+	(BFD32_BACKENDS_CFILES): Add elf32-epiphany.c.
+	* archures.c (bfd_arch_epiphany): Add.
+	(bfd_mach_epiphany16, bfd_mach_epiphany32): Define.
+	(bfd_epiphany_arch): Declare.
+	(bfd_archures_list): Add &bfd_epiphany_arch.
+	* config.bfd (epiphany-*-elf): New target case.
+	* configure.in (bfd_elf32_epiphany_vec): New target vector case.
+	* reloc.c (BFD_RELOC_EPIPHANY_SIMM8): New relocation.
+	(BFD_RELOC_EPIPHANY_SIMM24, BFD_RELOC_EPIPHANY_HIGH): Likewise.
+	(BFD_RELOC_EPIPHANY_LOW, BFD_RELOC_EPIPHANY_SIMM11): Likewise.
+	(BFD_RELOC_EPIPHANY_IMM11, BFD_RELOC_EPIPHANY_IMM8): Likewise.
+	* targets.c (bfd_elf32_epiphany_vec): Declare.
+	(_bfd_target_vector): Add bfd_elf32_epiphany_vec.
+	* Makefile.in: Regenerate.
+	* bfd-in2.h: Regenerate.
+	* configure: Regenerate.
+	* libbfd.h: Regenerate.
+	* po/SRC-POTFILES.in: Regenerate.
+	* po/bfd.pot: Regenerate.
+	* cpu-epiphany.c: New file.
+	* elf32-epiphany.c: New file.
+
+2011-10-24  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* elfxx-mips.c (_bfd_mips_elf_symbol_processing): Remove
+	assertions.
+
+2011-10-24  Eugeniy Meshcheryakov  <eugen at debian.org>
+
+	PR ld/13273
+	* elf32-arm.c (elf32_arm_merge_eabi_attributes): Do not warn about
+	identical TAG_PCS_config attributes.
+
+2011-10-24  Nick Clifton  <nickc at redhat.com>
+
+	* po/ja.po: Updated Japanese translation.
+
+2011-10-24  Pau Garcia i Quiles  <pgquiles at elpauer.org>
+
+	PR binutils/13292
+	* bfd-in.h: Include <sys/stat.h> rather than forward defining
+	struct stat.
+	* bfd-in2.h: Regenerate.
+
+2011-10-21  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/13302
+	* elf32-i386.c (elf_i386_relocate_section): Replace
+	R_386_IRELATIVE with R_386_RELATIVE.
+
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Replace
+	R_X86_64_IRELATIVE with R_X86_64_RELATIVE.
+
+2011-10-21  H.J. Lu  <hongjiu.lu at intel.com>.
+
+	* elf32-i386.c (elf_i386_relocate_section): Fix a typo in
+	comments.
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
+
+2011-10-21  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/13302
+	* elf32-i386.c (elf_i386_link_hash_table): Add next_jump_slot_index
+	and next_irelative_index.
+	(elf_i386_link_hash_table_create): Initialize next_jump_slot_index
+	and next_irelative_index.
+	(elf_i386_allocate_dynrelocs): Increment reloc_count instead of
+	next_tls_desc_index.
+	(elf_i386_size_dynamic_sections): Set next_tls_desc_index and
+	next_irelative_index from reloc_count.
+	(elf_i386_finish_dynamic_symbol): Put R_386_IRELATIVE after
+	R_386_JUMP_SLOT.
+
+	* elf64-x86-64.c (elf_x86_64_link_hash_table): Add
+	next_jump_slot_index and next_irelative_index.
+	(elf_x86_64_link_hash_table_create): Initialize
+	next_jump_slot_index and next_irelative_index.
+	(elf_x86_64_size_dynamic_sections): Set next_irelative_index
+	from reloc_count.
+	(elf_x86_64_finish_dynamic_symbol): Put R_X86_64_IRELATIVE after
+	R_X86_64_JUMP_SLOT.
+
+2011-10-20  Nick Clifton  <nickc at redhat.com>
+
+	PR ld/13049
+	* elf32-arm.c (STUB_SUFFIX): Avoid collision with user namespace
+	symbol names.
+	* elf64-ppc.c (STUB_SUFFIX): Likewise.
+	* elf32-hppa.c (STUB_SUFFIX): Likewise.
+
+2011-10-20  Alan Modra  <amodra at gmail.com>
+
+	* elf32-i386.c (i386_opcode16): Delete.
+	(elf_i386_check_tls_transition): Use memcmp to compare contents.
+	* elf64-x86-64.c (x86_64_opcode16, x86_64_opcode32): Delete.
+	(elf_x86_64_check_tls_transition): Use memcmp to compare contents.
+
+2011-10-19  Alan Modra  <amodra at gmail.com>
+
+	PR ld/13177
+	* elflink.c (_bfd_elf_gc_mark_rsec): Set symbol "mark".
+	(elf_gc_sweep_symbol): Don't test plt/got refcounts, instead test
+	"mark".  Hide undefweak too.  Clear def_regular and ref_regular.
+	* elf-m10300.c (mn10300_elf_relocate_section): Ignore unresolved
+	reloc errors from garbage-collected code.
+	* elf32-arm.c (elf32_arm_relocate_section): Likewise.
+	* elf32-bfin.c (bfin_relocate_section): Likewise.
+	(bfinfdpic_relocate_section): Likewise.
+	* elf32-cris.c (cris_elf_relocate_section): Likewise.
+	* elf32-frv.c (elf32_frv_relocate_section): Likewise.
+	* elf32-i386.c (elf_i386_relocate_section): Likewise.
+	* elf32-m32r.c (m32r_elf_relocate_section): Likewise.
+	* elf32-m68k.c (elf_m68k_relocate_section): Likewise.
+	* elf32-ppc.c (ppc_elf_relocate_section): Likewise.
+	* elf32-s390.c (elf_s390_relocate_section): Likewise.
+	* elf32-sh.c (sh_elf_relocate_section): Likewise.
+	* elf32-spu.c (spu_elf_relocate_section): Likewise.
+	* elf32-tilepro.c (tilepro_elf_relocate_section): Likewise.
+	* elf32-xtensa.c (elf_xtensa_relocate_section): Likewise.
+	* elf64-alpha.c (elf64_alpha_relocate_section): Likewise.
+	* elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
+	* elf64-s390.c (elf_s390_relocate_section): Likewise.
+	* elf64-sh64.c (sh_elf64_relocate_section): Likewise.
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
+	* elfxx-sparc.c (_bfd_sparc_elf_relocate_section): Likewise.
+	* elfxx-tilegx.c (tilegx_elf_relocate_section): Likewise.
+
+2011-10-19  Alan Modra  <amodra at gmail.com>
+
+	PR ld/13311
+	* elflink.c (elf_link_output_extsym): Correct test for warning when
+	forced local executable syms are referenced from shared libraries.
+
+2011-10-19  Alan Modra  <amodra at gmail.com>
+
+	PR ld/13254
+	* elflink.c (bfd_elf_final_link): Emit error_textrel error.
+
+2011-10-18  David S. Miller  <davem at davemloft.net>
+
+	PR binutils/13301
+	* elfxx-sparc.c (sparc_elf_find_reloc_at_ofs): New function.
+	(_bfd_sparc_elf_relocate_section): Always move the __tls_get_addr
+	call delay slot instruction forward 4 bytes when performing
+	relaxation.
+
+2011-10-17  Alan Modra  <amodra at gmail.com>
+
+	PR ld/12975
+	PR ld/13195
+	* elf64-ppc.c (ppc64_elf_gc_mark_dynamic_ref): Apply 2011-09-15
+	and 2011-09-29 bfd_elf_gc_mark_dynamic_ref_symbol changes here too.
+
+2011-10-14  Hans-Peter Nilsson  <hp at axis.com>
+
+	* elf32-cris.c (cris_elf_gc_sweep_hook) <R_CRIS_16_GOTPLT>
+	<R_CRIS_32_GOTPLT>: Fix missing update of gotplt refcount for
+	global symbols.
+	<R_CRIS_8, R_CRIS_16, R_CRIS_32>: New cases for similar missing
+	updates of the plt refcount.
+	(elf_cris_adjust_gotplt_to_got): Assert integrity of the gotplt
+	refcount in relation to the plt refcount.
+
+2011-10-13  Richard Sandiford  <richard.sandiford at linaro.org>
+
+	* elf32-arm.c (elf32_arm_final_link_relocate): Mark PLT calls via
+	stubs as resolved.
+
+2011-10-11  Alan Modra  <amodra at gmail.com>
+
+	PR binutils/13278
+	* archive.c (bfd_generic_archive_p): Only check first element
+	when target_defaulted.
+	(_bfd_construct_extended_name_table): Use ar_maxnamelen.
+	(_bfd_archive_bsd44_construct_extended_name_table): Likewise.
+
+2011-10-11  Alan Modra  <amodra at gmail.com>
+
+	PR binutils/13257
+	* archive.c (_bfd_find_nested_archive, _bfd_get_elt_at_filepos): Open
+	thin archive element using container target if not defaulted.
+
+2011-10-10  Nick Clifton  <nickc at redhat.com>
+
+	* po/es.po: Updated Spanish translation.
+	* po/fi.po: Updated Finnish translation.
+	* po/fr.po: Updated French translation.
+	* po/ru.po: Updated Russian translation.
+
+2011-10-10  Alan Modra  <amodra at gmail.com>
+
+	* elf64-ppc.c (ppc64_elf_howto_table): Add R_PPC64_TOCSAVE entry.
+	(struct ppc_link_hash_table): Add tocsave_htab.
+	(struct tocsave_entry): New.
+	(tocsave_htab_hash, tocsave_htab_eq, tocsave_find): New functions.
+	(ppc64_elf_link_hash_table_create): Create tocsave_htab..
+	(ppc64_elf_link_hash_table_free): ..and delete it.
+	(build_plt_stub): Always put STD_R2_40R1 first.
+	(ppc64_elf_size_stubs): Check for R_PPC64_TOCSAVE following reloc
+	on plt call.  If present add prologue nop location to tocsave_htab.
+	(ppc64_elf_relocate_section): Convert prologue nop to std.  Skip
+	first insn of plt call stub when R_PPC64_TOCSAVE present.
+
+2011-10-08  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/13250
+	* elflink.c (elf_link_add_object_symbols): Preserve the maximum
+	alignment and size for common symbols.
+
+2011-10-08  Alan Modra  <amodra at gmail.com>
+
+	PR ld/13229
+	PR ld/13244
+	* elflink.c (elf_link_add_object_symbols): Don't make IR symbols
+	dynamic.
+
+2011-10-08  Alan Modra  <amodra at gmail.com>
+
+	PR ld/13229
+	* elflink.c (elf_link_output_extsym): Strip defined plugin symbols
+	even when strip_discarded is false.
+
+2011-10-05  Kai Tietz  <ktietz at redhat.com>
+
+	* coffgen.c (coff_write_alien_symbol): Don't write
+	symbol for discarded sections, if strip_discarded isn't
+	explicit set to false.
+	(coff_write_native_symbol): Likewise.
+
+2011-10-05  DJ Delorie  <dj at redhat.com>
+	    Nick Clifton  <nickc at redhat.com>
+
+	* elf32-rx.c: Add support for PID mode.
+	(rx_elf_relocate_section): Add checks for unsafe PID relocations.
+	Include addend in R_RX_SYM relocations.
+
+2011-09-30  Tristan Gingold  <gingold at adacore.com>
+
+	* dwarf2.c (struct dwarf2_debug): Add field debug_sections.
+	(read_section): Add sec argument. Adjust the code to get section
+	names from it.
+	(read_indirect_string): Adjust call to read_section.
+	(read_abbrevs): Ditto.
+	(decode_line_info): Ditto.
+	(read_debug_ranges): Ditto.
+	(DWARF2_DEBUG_INFO, DWARF2_COMPRESSED_DEBUG_INFO): Remove.
+	(find_debug_info): Add debug_sections parameter.  Use it instead
+	the above macros.
+	(place_sections): Get section names from stash.
+	(find_line): Add debug_sections argument.  Initialize
+	debug_sections field of stash from it.
+	Adjust calls to find_debug_info.
+	(_bfd_dwarf2_find_nearest_line): Add debug_sections argument.
+	Adjust call to find_line.
+	(_bfd_dwarf2_find_line): Adjust call to find_line.
+	* libcoff-in.h (struct dwarf_debug_section): New declaration.
+	(coff_find_nearest_line_with_names): Likewise.
+	* libcoff.h: Regenerate.
+	* libbfd-in.h (struct dwarf_debug_section): Move declaration.
+	(dwarf_debug_sections): Likewise.
+	(_bfd_dwarf2_find_nearest_line): Add debug_sections argument.
+	* libbfd.h: Regenerate.
+	* elf.c (_bfd_elf_find_nearest_line): Adjust call to
+	_bfd_dwarf2_find_nearest_line.
+	* elfxx-mips.c (_bfd_mips_elf_find_nearest_line): Ditto.
+	* elf64-alpha.c (elf64_alpha_find_nearest_line): Ditto.
+	* elf32-arm.c (elf32_arm_find_nearest_line): Ditto.
+	* coffgen.c (coff_find_nearest_line_with_names): New function.
+	(coff_find_nearest_line): Calls coff_find_nearest_line_with_names.
+	* coff-rs6000.c (xcoff_debug_sections): New constant.
+	(xcoff_find_nearest_line): New function.
+	(rs6000coff_vec): Use xcoff_find_nearest_line.
+	(pmac_xcoff_vec): Ditto.
+
+2011-09-30  Alan Modra  <amodra at gmail.com>
+
+	PR ld/13235
+	* elf64-ppc.c (struct ppc64_elf_obj_tdata): Add ha_relocs_not_using_r2.
+	(ppc64_elf_edit_toc): Check HA relocs.
+	(ha_reloc_match): Delete function.
+	(ppc64_elf_relocate_section): Remove delayed HA nop optimization.
+	Instead do it and low part optimization based on
+	ha_relocs_not_using_r2.
+
+2011-09-29  Alan Modra  <amodra at gmail.com>
+
+	PR ld/13233
+	* elflink.c (_bfd_elf_gc_mark_extra_sections): Mark single member
+	debug and special section groups.
+
+2011-09-29  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/13195
+	* elflink.c (_bfd_elf_merge_symbol): Don't set dynamic_def when
+	clearing def_dynamic.
+	(elf_link_add_object_symbols): Likewise.  Set dynamic_def when
+	setting def_dynamic.
+	(bfd_elf_gc_mark_dynamic_ref_symbol): Check if a symbol is
+	versioned.
+
+2011-09-27  Kai Tietz  <ktietz at redhat.com>
+
+	* coffcode.h (sec_to_styp_flags): Handle
+	SEC_LINK_DUPLICATES_SAME_CONTENTS, and
+	SEC_LINK_DUPLICATES_SAME_SIZE.
+
+2011-09-22  Tristan Gingold  <gingold at adacore.com>
+
+	* configure.in: Bump version to 2.22.51
+	* configure: Regenerate.
+
+2011-09-21  David S. Miller  <davem at davemloft.net>
+
+	* elfxx-sparc.c (_bfd_sparc_elf_merge_private_bfd_data): New.
+	* elfxx-sparc.h: Declare it.
+	* elf32-sparc.c (elf32_sparc_merge_private_bfd_data): Call it.
+	* elf64-sparc.c (elf64_sparc_merge_private_bfd_data): Likewise.
+
+2011-09-21  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.c (bfd_mach_o_convert_section_name_to_bfd): Add comment.
+	Deals with size limited strings.
+	(bfd_mach_o_build_commands): Initialize more fields.
+
+2011-09-15  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/13177
+	* elflink.c (elf_gc_sweep_symbol): Also hide symbols without PLT
+	nor GOT references.
+
+2011-09-15  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/12975
+	* bfd-in.h (bfd_elf_size_dynamic_sections): Remove pointer
+	to struct bfd_elf_version_tree.
+
+	* elflink.c (elf_info_failed): Remove verdefs.
+	(_bfd_elf_export_symbol): Updated.
+	_bfd_elf_link_assign_sym_version): Likewise.
+	(bfd_elf_size_dynamic_sections): Remove pointer to struct
+	bfd_elf_version_tree.  Updated.
+	(bfd_elf_gc_mark_dynamic_ref_symbol): Check if a symbol is hidden
+	by linker script.
+
+	* linker.c (bfd_hide_sym_by_version): New.
+
+	* bfd-in2.h: Regenerated.
+
+2011-09-12  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/13178
+	* elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Use .got.plt
+	if there are no GOT relocations.
+
+2011-09-09  Kai Tietz  <ktietz at redhat.com>
+
+	* peicode.h (pe_ILF_build_a_bfd): Don't remove leading underscore
+	for targets without symbol_leading_char.
+
+2011-09-08  Bernd Jendrissek  <bernd.jendrissek at gmail.com>
+
+	* bfdwin.c (bfd_get_file_window): Fix memory leak.
+
+2011-09-07  Alan Modra  <amodra at gmail.com>
+
+	PR ld/13131
+	* bfd/elf64-ppc.c (adjust_toc_syms): Ensure ppc64_elf_howto_table
+	is initialized.
+
+2011-09-06  Alan Modra  <amodra at gmail.com>
+
+	PR ld/13131
+	* elf64-ppc.c (adjust_toc_syms): Delete redundant code.
+	(ppc64_elf_edit_toc): Fix style nit.  Report some details
+	on linker failure due to reference in debug or non-alloc
+	sections to optimized away toc entry, and don't abort.
+
+2011-09-01  Christophe Lyon  <christophe.lyon at st.com>
+
+	* elf32-arm.c (elf32_arm_output_arch_local_syms): Skip excluded
+	sections.
+
+2011-08-26  Nick Clifton  <nickc at redhat.com>
+
+	* po/es.po: Updated Spanish translation.
+
+2011-08-19  Alan Modra  <amodra at gmail.com>
+
+	* elf64-ppc.c (ppc64_elf_edit_toc): Ignore can_optimize bit if
+	we haven't seen expected -mcmodel=medium/large code relocs.
+
+2011-08-18  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.c (bfd_mach_o_read_segment): Initialize list.
+
+2011-08-17  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.c (bfd_mach_o_write_section_32): Fix typo.
+
+2011-08-17  Alan Modra  <amodra at gmail.com>
+
+	PR ld/12762
+	* bfd-in.h (struct bfd_section_already_linked): Forward declare.
+	(_bfd_handle_already_linked): Declare.
+	* coff-alpha.c (_bfd_ecoff_section_already_linked): Define as
+	_bfd_coff_section_already_linked.
+	* coff-mips.c (_bfd_ecoff_section_already_linked): Likewise.
+	* coffcode.h (coff_section_already_linked): Likewise.
+	* cofflink.c (coff_link_add_symbols): Revert 2011-07-09 changes.
+	* elf-bfd.h: Likewise.
+	* libbfd-in.h: Likewise.
+	* targets.c: Likewise.
+	* linker.c (bfd_section_already_linked): Likewise.
+	(bfd_section_already_linked_table_lookup): Likewise.
+	(bfd_section_already_linked_table_insert): Likewise.
+	(_bfd_generic_section_already_linked): Likewise.  Call
+	_bfd_handle_already_linked.
+	(_bfd_handle_already_linked): New function, split out from..
+	* elflink.c (_bfd_elf_section_already_linked): ..here.  Revert
+	2011-07-09 changes.  Avoid unnecessary strcmp when matching
+	already_linked_list entries.  Match plugin linkonce section.
+	(section_signature): Delete.
+	* coffgen.c (_bfd_coff_section_already_linked): New function.
+	* libcoff-in.h (_bfd_coff_section_already_linked): Declare.
+	* libbfd.h: Regenerate.
+	* libcoff.h: Regenerate.
+	* bfd-in2.h: Regenerate.
+
+2011-08-14  Alan Modra  <amodra at gmail.com>
+
+	* elf32-ppc.c (ppc_elf_select_plt_layout): Force bss-plt when
+	shared and call to _mcount will go via plt.
+
+2011-08-14  Alan Modra  <amodra at gmail.com>
+
+	* elf64-ppc.c: Prefix all einfo error strings with "%P: ".
+	* elf32-ppc.c: Likewise.
+	(ppc_elf_select_plt_layout): Use einfo rather than info to report
+	forced bss-plt.
+
+2011-08-12  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/13082
+	* elf64-x86-64.c (x86_64_elf_howto_table): Add R_X86_64_RELATIVE64.
+	(elf_x86_64_relocate_section): Treat R_X86_64_64 like R_X86_64_32
+	and zero-extend it to 64bit if addend is zero for x32.  Generate
+	R_X86_64_RELATIVE64 for x32.
+
+2011-08-09  Matthew Gretton-Dann  <matthew.gretton-dann at arm.com>
+
+	* bfd-in.h (bfd_elf32_arm_set_target_relocs): Update prototype.
+	* bfd-in2.h (bfd_elf32_arm_set_target_relocs): Likewise.
+	* elf32-arm.c (elf32_arm_link_hash_table): New field.
+	(elf232_arm_link_hash_table_create): Initialise new field.
+	(check_use_blx): Change test depending on fix_arm1176.
+	(bfd_elf32_arm_set_target_relocs): Set fix_arm1176 from
+	command line options.
+
+2011-08-08  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.c (struct mach_o_segment_name_xlat): Add comments.
+	(segsec_names_xlat): Reorder elements.
+	(bfd_mach_o_read_section_32): Fix typo.
+	(bfd_mach_o_read_section_64): Fix typo.
+
+2011-08-08  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.h (BFD_MACH_O_SEGNAME_SIZE): New macro.
+	(BFD_MACH_O_SECTNAME_SIZE): Ditto.
+	(bfd_mach_o_section): Use them.  Add next field.
+	(bfd_mach_o_segment_command): Replace sections array by
+	sect_head and sect_tail.
+	(bfd_mach_o_get_mach_o_section): New macro.
+	(bfd_mach_o_lookup_section): Remove.
+	(bfd_mach_o_new_section_hook): New function.
+	* mach-o.c (bfd_mach_o_normalize_section_name): Use strncmp
+	instead of strcmp.
+	(bfd_mach_o_convert_section_name_to_bfd): Replaces section
+	parameter with segname and sectname parameters.  Adjust.
+	(bfd_mach_o_append_section_to_segment): New function.  Use a
+	linked list for Mach-O sections.
+	(bfd_mach_o_write_segment_32): Adjust.
+	(bfd_mach_o_write_segment_64): Ditto.
+	(bfd_mach_o_build_commands): Fix comment.  Adjust.
+	(bfd_mach_o_flatten_sections): Adjust.
+	(bfd_mach_o_print_section_map): Adjust.
+	(bfd_mach_o_set_section_flags_from_bfd): Ditto.
+	(bfd_mach_o_new_section_hook): New function.
+	(bfd_mach_o_init_section_from_mach_o): Ditto.
+	(bfd_mach_o_read_section_32): Remove section parameter.
+	Return a section instead.
+	(bfd_mach_o_read_section_64): Ditto.
+	(bfd_mach_o_read_section): Ditto.
+	(bfd_mach_o_make_bfd_section): Adjust.
+	(bfd_mach_o_read_segment): Adjust for new profile of
+	bfd_mach_o_read_section.
+	(bfd_mach_o_lookup_section): Remove.
+	* mach-o-target.c (bfd_mach_o_new_section_hook): Remove.
+
+2011-08-08  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.h (bfd_mach_o_version_min_command): New structure.
+	(bfd_mach_o_load_command): Add version_min.
+	(mach_o_data_struct): Fix comment.
+	* mach-o.c (bfd_mach_o_read_version_min): New function.
+	(bfd_mach_o_read_command): Handle BFD_MACH_O_LC_FUNCTION_STARTS,
+	BFD_MACH_O_LC_VERSION_MIN_MACOSX and
+	BFD_MACH_O_LC_VERSION_MIN_IPHONEOS.
+	(bfd_mach_o_get_name_or_null): New function.
+	(bfd_mach_o_get_name): Use the above new one.
+	(bfd_mach_o_load_command_name): Add the above new commands.
+	(bfd_mach_o_bfd_print_private_bfd_data): Display numerically
+	unknown commands.  Handle BFD_MACH_O_LC_FUNCTION_STARTS,
+	BFD_MACH_O_LC_VERSION_MIN_MACOSX and
+	BFD_MACH_O_LC_VERSION_MIN_IPHONEOS.
+
+2011-08-08  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.h: Move size macros to external.h
+	Move reloc macros to reloc.h and x86-64.h.
+	* mach-o-i386.c: Includes mach-o/reloc.h
+	* mach-o-x86-64.c: Ditto and includes mach-o/x86-64.h
+	* mach-o.c: Add includes.
+	(bfd_mach_o_write_header): Use structure from external.h to convert.
+	(bfd_mach_o_write_thread): Ditto.
+	(bfd_mach_o_write_relocs): Ditto.
+	(bfd_mach_o_write_section_32): Ditto.
+	(bfd_mach_o_write_section_64): Ditto.
+	(bfd_mach_o_write_segment_32): Ditto.
+	(bfd_mach_o_write_segment_64): Ditto.
+	(bfd_mach_o_write_symtab): Ditto.
+	(bfd_mach_o_write_contents): Ditto.
+	(bfd_mach_o_read_header): Ditto.
+	(bfd_mach_o_read_section_32): Ditto.
+	(bfd_mach_o_read_section_64): Ditto.
+	(bfd_mach_o_read_symtab_symbol): Ditto.
+	(bfd_mach_o_read_dylinker): Ditto.
+	(bfd_mach_o_read_dylib): Ditto.
+	(bfd_mach_o_read_dysymtab): Ditto.
+	(bfd_mach_o_read_symtab): Ditto.
+	(bfd_mach_o_read_linkedit): Ditto.
+	(bfd_mach_o_read_str): Ditto.
+	(bfd_mach_o_read_dyld_info): Ditto.
+	(bfd_mach_o_read_segment): Ditto.
+	(bfd_mach_o_read_command): Ditto.
+	(bfd_mach_o_archive_p): Ditto.
+	(bfd_mach_o_canonicalize_one_reloc): Ditto. Change the BUF parameter.
+	(bfd_mach_o_canonicalize_relocs): Adjust to call the above function.
+	(bfd_mach_o_read_dysymtab_symbol): Rename BUF variable.
+	(bfd_mach_o_read_uuid): Remove useless cast.  Use a macro instead
+	of an hard-coded value.
+
+2011-08-08  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o-x86-64.c (bfd_mach_o_x86_64_mkobject): Fix cut-and-past typos.
+	(bfd_mach_o_x86_64_swap_reloc_out): Handle BFD_RELOC_32_PCREL,
+	BFD_RELOC_MACH_O_X86_64_SUBTRACTOR64 and
+	BFD_RELOC_MACH_O_X86_64_GOT_LOAD.  Share common code.
+
+2011-08-08  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.c (bfd_mach_o_normalize_section_name): New function.
+	(bfd_mach_o_convert_section_name_to_bfd): Use it.
+	(bfd_mach_o_get_section_type_from_name): New function.
+	(bfd_mach_o_get_section_attribute_from_name): Ditto.
+	* mach-o.h (bfd_mach_o_section): Move bfdsection field at the end.
+	Add comments.  Add prototypes for the above new functions.
+
+2011-08-05  Mark Kettenis  <kettenis at gnu.org>
+
+	* netbsd-core.c (netbsd_core_vec): Init match_priority field.
+
+2011-08-05  Alan Modra  <amodra at gmail.com>
+
+	* elf64-ppc.c (maybe_strip_output): New function.
+	(ppc64_elf_size_stubs): Use it to strip .branch_lt and .eh_frame.
+
+2011-08-05  Alan Modra  <amodra at gmail.com>
+
+	PR ld/12762
+	* elflink.c (_bfd_elf_section_already_linked): Return matched
+	status.  Remove COFF comdat section handling.
+	* linker.c (_bfd_generic_section_already_linked): Return matched
+	status.  Don't set SEC_GROUP in l_flags for plugin entries.
+	(bfd_section_already_linked): Update prototype.
+	* targets.c (_section_already_linked): Likewise.
+	* elf-bfd.h (_bfd_elf_section_already_linked): Likewise.
+	* libbfd-in.h (_bfd_generic_section_already_linked): Likewise.
+	(_bfd_nolink_section_already_linked): Update.
+	* libbfd.h: Regenerate.
+	* bfd-in2.h: Regenerate.
+
+2011-08-05  Alan Modra  <amodra at gmail.com>
+
+	* elf32-ppc.c: Include dwarf2.h.
+	(struct ppc_elf_link_hash_table): Add glink_eh_frame.
+	(ppc_elf_create_glink): Create .eh_frame section.
+	(glink_eh_frame_cie): New array.
+	(ppc_elf_size_dynamic_sections): Size glink_eh_frame.
+	(ppc_elf_finish_dynamic_sections): Write glink_eh_frame.
+
+2011-08-04  Tristan Gingold  <gingold at adacore.com>
+
+	* vms-alpha.c (_bfd_vms_write_eeom): Round vms_linkage_index.
+	(_bfd_vms_write_etir): Initialize vms_linkage_index to 0.
+
+2011-08-03  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.c (bfd_mach_o_canonicalize_symtab): Handle no symbols case.
+	(bfd_mach_o_read_symtab_symbols): Return if no symbols.
+
+2011-08-02  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* elfxx-mips.c (check_4byte_branch): Remove function.
+	(check_relocated_bzc): New function.
+	(_bfd_mips_elf_relax_section): Permit the relaxation of LUI
+	instructions that immediately follow a compact branch
+	instruction.
+
+2011-08-02  Alan Modra  <amodra at gmail.com>
+
+	* elf64-ppc.c (build_plt_stub): Correct emitted relocs when no
+	plt_static_chain.
+	(ppc_build_one_stub): Adjust get_relocs call to suit..
+	(ppc_size_one_stub): ..and reloc sizing.  Correct plt size corner case.
+
+2011-08-01  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/13048
+	* archures.c (bfd_mach_i386_intel_syntax): New.
+	(bfd_mach_i386_i8086): Updated.
+	(bfd_mach_i386_i386): Likewise.
+	(bfd_mach_x86_64): Likewise.
+	(bfd_mach_x64_32): Likewise.
+	(bfd_mach_i386_i386_intel_syntax): Likewise.
+	(bfd_mach_x86_64_intel_syntax): Likewise.
+	(bfd_mach_x64_32_intel_syntax): Likewise.
+	(bfd_mach_l1om): Likewise.
+	(bfd_mach_l1om_intel_syntax): Likewise.
+	(bfd_mach_k1om): Likewise.
+	(bfd_mach_k1om_intel_syntax): Likewise.
+
+	* bfd-in2.h: Regenerated.
+
+	* cpu-i386.c (bfd_i386_compatible): Check mach instead of
+	bits_per_address.
+	(bfd_x64_32_arch_intel_syntax): Set bits_per_address to 64.
+	(bfd_x64_32_arch): Likewise.
+
+	* elf64-x86-64.c: Include "libiberty.h".
+	(x86_64_elf_howto_table): Append x32 R_X86_64_32.
+	(elf_x86_64_rtype_to_howto): Support x32 R_X86_64_32.
+	(elf_x86_64_reloc_type_lookup): Likewise.
+	(elf_x86_64_reloc_name_lookup): Likewise.
+	(elf_x86_64_relocate_section): Likewise.
+	(elf_x86_64_check_relocs): Allow R_X86_64_64 relocations for x32.
+
+2011-07-29  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* elfxx-mips.c (check_br32): Fix return type.
+
+2011-07-29  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* elfxx-mips.c (bz_insn_16): Correct opcode mask.
+
+2011-07-29  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* elfxx-mips.c: Adjust comments throughout.
+	(mips_elf_relax_delete_bytes): Reshape code.
+	(_bfd_mips_elf_relax_section): Remove check for
+	R_MICROMIPS_GPREL16 relocations.  Reshape code.
+
+2011-07-28  Roland McGrath  <mcgrathr at google.com>
+
+	* elf32-i386.c (NACL_PLT_ENTRY_SIZE, NACLMASK): New macros.
+	(elf_i386_nacl_plt0_entry): New variable.
+	(elf_i386_plt_entry): New variable.
+	(elf_i386_nacl_pic_plt0_entry): New variable.
+	(elf_i386_nacl_pic_plt_entry): New variable.
+	(elf_i386_nacl_plt, elf_i386_nacl_arch_bed): New variables.
+	(elf_backend_arch_data): New macro setting for elf_i386_nacl_vec stanza.
+	(elf_backend_plt_alignment): Likewise.
+
+	* config.bfd: Handle i[3-7]86-*-nacl*.
+	* elf32-i386.c (bfd_elf32_i386_nacl_vec): New backend vector stanza.
+	* targets.c: Support bfd_elf32_i386_nacl_vec.
+	* configure.in: Likewise.
+	* configure: Regenerated.
+
+	* elf32-i386.c (struct elf_i386_plt_layout): New type.
+	(GET_PLT_ENTRY_SIZE): New macro.
+	(elf_i386_plt): New variable.
+	(struct elf_i386_backend_data): New member `plt'.
+	(elf_i386_arch_bed): Add initializer for it.
+	(elf_i386_vxworks_arch_bed): Likewise.
+	(elf_i386_allocate_dynrelocs): Use GET_PLT_ENTRY_SIZE.
+	(elf_i386_plt_sym_val): Likewise.
+	(elf_i386_relocate_section): Likewise.
+	(elf_i386_finish_dynamic_symbol): Likewise.
+	Also use other elf_i386_plt_layout members for PLT details.
+	(elf_i386_finish_dynamic_sections): Likewise.
+
+	* elf32-i386.c (struct elf_i386_backend_data): New type.
+	(get_elf_i386_backend_data): New macro.
+	(elf_i386_arch_bed): New variable.
+	(elf_backend_arch_data): New macro.
+	(struct elf_i386_link_hash_table): Remove plt0_pad_byte and is_vxworks.
+	(elf_i386_link_hash_table_create): Don't initialize them.
+	(elf_i386_create_dynamic_sections): Find is_vxworks flags in
+	elf_i386_backend_data, not elf_i386_link_hash_table.
+	(elf_i386_adjust_dynamic_symbol): Likewise.
+	(elf_i386_allocate_dynrelocs): Likewise.
+	(elf_i386_readonly_dynrelocs): Likewise.
+	(elf_i386_size_dynamic_sections): Likewise.
+	(elf_i386_relocate_section): Likewise.
+	(elf_i386_finish_dynamic_symbol): Likewise.
+	(elf_i386_finish_dynamic_sections): Likewise.  Same for plt0_pad_byte.
+	(elf_i386_vxworks_link_hash_table_create): Function removed.
+	(elf_i386_vxworks_arch_bed): New variable.
+	(elf_backend_arch_data): New macro in elf32-i386-vxworks stanza.
+
+	* elf-bfd.h (elf_backend_data): New member arch_backend_data.
+	* elfxx-target.h (elf_backend_arch_data): New macro.
+	(elfNN_bed): Use it as initializer for the new member.
+
+2011-07-28  Mikulas Patocka  <mikulas at artax.karlin.mff.cuni.cz>
+
+	* elf64-hppa.c (elf_hppa_final_link_relocate): Fix handling of out
+	of range branches.
+
+2011-07-26  Jakub Jelinek  <jakub at redhat.com>
+
+	* dwarf2.c (dwarf_debug_sections): Add .debug_macro
+	and .zdebug_macro entry.
+	(dwarf_debug_section_enum): Add debug_macro.
+
+2011-07-26  Alan Modra  <amodra at gmail.com>
+
+	* elf64-ppc.c: Include dwarf2.h.
+	(struct ppc_link_hash_table): Add glink_eh_frame.
+	(create_linkage_sections): Create .eh_frame section.
+	(ppc64_elf_size_dynamic_sections): Arrange to drop unneeded
+	glink_eh_frame.
+	(glink_eh_frame_cie): New array.
+	(ppc64_elf_size_stubs): Size glink_eh_frame.
+	(ppc64_elf_build_stubs): Init glink_eh_frame contents.
+	(ppc64_elf_finish_dynamic_sections): Write glink_eh_frame.
+
+2011-07-25  Hans-Peter Nilsson  <hp at bitrange.com>
+
+	PR ld/12815
+	* elf64-mmix.c (struct _mmix_elf_section_data): New members
+	has_warned_bpo and has_warned_pushj.
+	(mmix_final_link_relocate): Remove PARAMS and PTR macros,
+	converting to ISO C.  Add new parameter error_message.  All
+	callers changed.
+	(mmix_elf_perform_relocation): Ditto.
+	<case R_MMIX_PUSHJ_STUBBABLE, case R_MMIX_BASE_PLUS_OFFSET>:
+	Handle the case where mmix_elf_check_common_relocs has not been
+	called, missing preparations for relocs of the respective type.
+
+2011-07-24  Chao-ying Fu  <fu at mips.com>
+	    Ilie Garbacea  <ilie at mips.com>
+	    Maciej W. Rozycki  <macro at codesourcery.com>
+	    Joseph Myers  <joseph at codesourcery.com>
+	    Catherine Moore  <clm at codesourcery.com>
+	    Richard Sandiford  <rdsandiford at googlemail.com>
+
+	* archures.c (bfd_mach_mips_micromips): New macro.
+	* cpu-mips.c (I_micromips): New enum value.
+	(arch_info_struct): Add bfd_mach_mips_micromips.
+	* elfxx-mips.h (_bfd_mips_elf_is_target_special_symbol): New
+	prototype.
+	(_bfd_mips_elf_relax_section): Likewise.
+	(_bfd_mips16_elf_reloc_unshuffle): Rename to...
+	(_bfd_mips_elf_reloc_unshuffle): ... this.  Handle microMIPS
+	ASE.
+	(_bfd_mips16_elf_reloc_shuffle): Rename to...
+	(_bfd_mips_elf_reloc_shuffle): ... this.  Handle microMIPS ASE.
+	(gprel16_reloc_p): Handle microMIPS ASE.
+	(literal_reloc_p): New function.
+	* elf32-mips.c (elf_micromips_howto_table_rel): New variable.
+	(_bfd_mips_elf32_gprel16_reloc): Handle microMIPS ASE.
+	(mips16_gprel_reloc): Update for _bfd_mips_elf_reloc_unshuffle
+	and _bfd_mips_elf_reloc_shuffle changes.
+	(mips_elf_gprel32_reloc): Update comment.
+	(micromips_reloc_map): New variable.
+	(bfd_elf32_bfd_reloc_type_lookup): Handle microMIPS ASE.
+	(mips_elf32_rtype_to_howto): Likewise.
+	(mips_info_to_howto_rel): Likewise.
+	(bfd_elf32_bfd_is_target_special_symbol): Define.
+	(bfd_elf32_bfd_relax_section): Likewise.
+	* elf64-mips.c (micromips_elf64_howto_table_rel): New variable.
+	(micromips_elf64_howto_table_rela): Likewise.
+	(mips16_gprel_reloc): Update for _bfd_mips_elf_reloc_unshuffle
+	and _bfd_mips_elf_reloc_shuffle changes.
+	(micromips_reloc_map): Likewise.
+	(bfd_elf64_bfd_reloc_type_lookup): Handle microMIPS ASE.
+	(bfd_elf64_bfd_reloc_name_lookup): Likewise.
+	(mips_elf64_rtype_to_howto): Likewise.
+	(bfd_elf64_bfd_is_target_special_symbol): Define.
+	* elfn32-mips.c (elf_micromips_howto_table_rel): New variable.
+	(elf_micromips_howto_table_rela): Likewise.
+	(mips16_gprel_reloc): Update for _bfd_mips_elf_reloc_unshuffle
+	and _bfd_mips_elf_reloc_shuffle changes.
+	(micromips_reloc_map): Likewise.
+	(bfd_elf32_bfd_reloc_type_lookup): Handle microMIPS ASE.
+	(bfd_elf32_bfd_reloc_name_lookup): Likewise.
+	(mips_elf_n32_rtype_to_howto): Likewise.
+	(bfd_elf32_bfd_is_target_special_symbol): Define.
+	* elfxx-mips.c (LA25_LUI_MICROMIPS_1): New macro.
+	(LA25_LUI_MICROMIPS_2): Likewise.
+	(LA25_J_MICROMIPS_1, LA25_J_MICROMIPS_2): Likewise.
+	(LA25_ADDIU_MICROMIPS_1, LA25_ADDIU_MICROMIPS_2): Likewise.
+	(TLS_RELOC_P): Handle microMIPS ASE.
+	(mips_elf_create_stub_symbol): Adjust value of stub symbol if
+	target is a microMIPS function.
+	(micromips_reloc_p): New function.
+	(micromips_reloc_shuffle_p): Likewise.
+	(got16_reloc_p, call16_reloc_p): Handle microMIPS ASE.
+	(got_disp_reloc_p, got_page_reloc_p): New functions.
+	(got_ofst_reloc_p): Likewise.
+	(got_hi16_reloc_p, got_lo16_reloc_p): Likewise.
+	(call_hi16_reloc_p, call_lo16_reloc_p): Likewise.
+	(hi16_reloc_p, lo16_reloc_p, jal_reloc_p): Handle microMIPS ASE.
+	(micromips_branch_reloc_p): New function.
+	(tls_gd_reloc_p, tls_ldm_reloc_p): Likewise.
+	(tls_gottprel_reloc_p): Likewise.
+	(_bfd_mips16_elf_reloc_unshuffle): Rename to...
+	(_bfd_mips_elf_reloc_unshuffle): ... this.  Handle microMIPS
+	ASE.
+	(_bfd_mips16_elf_reloc_shuffle): Rename to...
+	(_bfd_mips_elf_reloc_shuffle): ... this.  Handle microMIPS ASE.
+	(_bfd_mips_elf_lo16_reloc): Handle microMIPS ASE.
+	(mips_tls_got_index, mips_elf_got_page): Likewise.
+	(mips_elf_create_local_got_entry): Likewise.
+	(mips_elf_relocation_needs_la25_stub): Likewise.
+	(mips_elf_calculate_relocation): Likewise.
+	(mips_elf_perform_relocation): Likewise.
+	(_bfd_mips_elf_symbol_processing): Likewise.
+	(_bfd_mips_elf_add_symbol_hook): Likewise.
+	(_bfd_mips_elf_link_output_symbol_hook): Likewise.
+	(mips_elf_add_lo16_rel_addend): Likewise.
+	(_bfd_mips_elf_check_relocs): Likewise.
+	(mips_elf_adjust_addend): Likewise.
+	(_bfd_mips_elf_relocate_section): Likewise.
+	(mips_elf_create_la25_stub): Likewise.
+	(_bfd_mips_vxworks_finish_dynamic_symbol): Likewise.
+	(_bfd_mips_elf_gc_sweep_hook): Likewise.
+	(_bfd_mips_elf_is_target_special_symbol): New function.
+	(mips_elf_relax_delete_bytes): Likewise.
+	(opcode_descriptor): New structure.
+	(RA): New macro.
+	(OP32_SREG, OP32_TREG, OP16_VALID_REG): Likewise.
+	(b_insns_32, bc_insn_32, bz_insn_32, bzal_insn_32): New variables.
+	(beq_insn_32): Likewise.
+	(b_insn_16, bz_insn_16): New variables.
+	(BZC32_REG_FIELD): New macro.
+	(bz_rs_insns_32, bz_rt_insns_32): New variables.
+	(bzc_insns_32, bz_insns_16):Likewise.
+	(BZ16_REG, BZ16_REG_FIELD): New macros.
+	(jal_insn_32_bd16, jal_insn_32_bd32): New variables.
+	(jal_x_insn_32_bd32): Likewise.
+	(j_insn_32, jalr_insn_32): Likewise.
+	(ds_insns_32_bd16, ds_insns_32_bd32): Likewise.
+	(jalr_insn_16_bd16, jalr_insn_16_bd32, jr_insn_16): Likewise.
+	(JR16_REG): New macro.
+	(ds_insns_16_bd16): New variable.
+	(lui_insn): Likewise.
+	(addiu_insn, addiupc_insn): Likewise.
+	(ADDIUPC_REG_FIELD): New macro.
+	(MOVE32_RD, MOVE32_RS): Likewise.
+	(MOVE16_RD_FIELD, MOVE16_RS_FIELD): Likewise.
+	(move_insns_32, move_insns_16): New variables.
+	(nop_insn_32, nop_insn_16): Likewise.
+	(MATCH): New macro.
+	(find_match): New function.
+	(check_br16_dslot, check_br32_dslot): Likewise.
+	(check_br16, check_br32): Likewise.
+	(IS_BITSIZE): New macro.
+	(check_4byte_branch): New function.
+	(_bfd_mips_elf_relax_section): Likewise.
+	(_bfd_mips_elf_merge_private_bfd_data): Disallow linking MIPS16
+	and microMIPS modules together.
+	(_bfd_mips_elf_print_private_bfd_data):	Handle microMIPS ASE.
+	* reloc.c (BFD_RELOC_MICROMIPS_7_PCREL_S1): New relocation.
+	(BFD_RELOC_MICROMIPS_10_PCREL_S1): Likewise.
+	(BFD_RELOC_MICROMIPS_16_PCREL_S1): Likewise.
+	(BFD_RELOC_MICROMIPS_GPREL16): Likewise.
+	(BFD_RELOC_MICROMIPS_JMP, BFD_RELOC_MICROMIPS_HI16): Likewise.
+	(BFD_RELOC_MICROMIPS_HI16_S): Likewise.
+	(BFD_RELOC_MICROMIPS_LO16): Likewise.
+	(BFD_RELOC_MICROMIPS_LITERAL): Likewise.
+	(BFD_RELOC_MICROMIPS_GOT16): Likewise.
+	(BFD_RELOC_MICROMIPS_CALL16): Likewise.
+	(BFD_RELOC_MICROMIPS_GOT_HI16): Likewise.
+	(BFD_RELOC_MICROMIPS_GOT_LO16): Likewise.
+	(BFD_RELOC_MICROMIPS_CALL_HI16): Likewise.
+	(BFD_RELOC_MICROMIPS_CALL_LO16): Likewise.
+	(BFD_RELOC_MICROMIPS_SUB): Likewise.
+	(BFD_RELOC_MICROMIPS_GOT_PAGE): Likewise.
+	(BFD_RELOC_MICROMIPS_GOT_OFST): Likewise.
+	(BFD_RELOC_MICROMIPS_GOT_DISP): Likewise.
+	(BFD_RELOC_MICROMIPS_HIGHEST): Likewise.
+	(BFD_RELOC_MICROMIPS_HIGHER): Likewise.
+	(BFD_RELOC_MICROMIPS_SCN_DISP): Likewise.
+	(BFD_RELOC_MICROMIPS_JALR): Likewise.
+	(BFD_RELOC_MICROMIPS_TLS_GD): Likewise.
+	(BFD_RELOC_MICROMIPS_TLS_LDM): Likewise.
+	(BFD_RELOC_MICROMIPS_TLS_DTPREL_HI16): Likewise.
+	(BFD_RELOC_MICROMIPS_TLS_DTPREL_LO16): Likewise.
+	(BFD_RELOC_MICROMIPS_TLS_GOTTPREL): Likewise.
+	(BFD_RELOC_MICROMIPS_TLS_TPREL_HI16): Likewise.
+	(BFD_RELOC_MICROMIPS_TLS_TPREL_LO16): Likewise.
+	* bfd-in2.h: Regenerate.
+	* libbfd.h: Regenerate.
+
+2011-07-22  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* Makefile.am (ALL_MACHINES): Add cpu-k1om.lo.
+	(ALL_MACHINES_CFILES): Add cpu-k1om.c.
+	* Makefile.in: Regenerated.
+
+	* archures.c (bfd_architecture): Add bfd_arch_k1om.
+	(bfd_k1om_arch): New.
+	(bfd_archures_list): Add &bfd_k1om_arch.
+	* bfd-in2.h: Regenerated.
+
+	* config.bfd (targ64_selvecs): Add bfd_elf64_k1om_vec if
+	bfd_elf64_x86_64_vec is supported.  Add bfd_elf64_k1om_freebsd_vec
+	if bfd_elf64_x86_64_freebsd_vec is supported.
+	(targ_selvecs): Likewise.
+
+	* configure.in: Support bfd_elf64_k1om_vec and
+	bfd_elf64_k1om_freebsd_vec.
+	* configure: Regenerated.
+
+	* cpu-k1om.c: New.
+
+	* elf64-x86-64.c (elf64_k1om_elf_object_p): New.
+	(bfd_elf64_k1om_vec): Likewise.
+	(bfd_elf64_k1om_freebsd_vec): Likewise.
+
+	* targets.c (bfd_elf64_k1om_vec): New.
+	(bfd_elf64_k1om_freebsd_vec): Likewise.
+	(_bfd_target_vector): Add bfd_elf64_k1om_vec and
+	bfd_elf64_k1om_freebsd_vec.
+
+2011-07-20  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix false coff-go32-exe matches.
+	* coff-i386.c (TARGET_SYM) <_bfd_check_format>: Conditionally use
+	COFF_CHECK_FORMAT.
+	* coff-stgo32.c (go32_check_format): New forward declaration.
+	(COFF_CHECK_FORMAT): New defintion.
+	(go32_check_format): New function.
+
+2011-07-15  Alan Modra  <amodra at gmail.com>
+
+	* configure.in: Bump version.
+	* configure: Regenerate.
+
+2011-07-14  Alan Modra  <amodra at gmail.com>
+
+	* linker.c (_bfd_generic_section_already_linked): Set l_flags.
+	* elf-bfd.h (struct already_linked): Forward declare.
+
+2011-07-14  Alan Modra  <amodra at gmail.com>
+
+	* elflink.c (_bfd_elf_fix_symbol_flags): Loop on indirect syms.
+	(_bfd_elf_adjust_dynamic_symbol): Remove FIXME.
+
+2011-07-14  Alan Modra  <amodra at gmail.com>
+
+	* elf64-ppc.c (struct ppc_link_hash_table): Add plt_static_chain.
+	(build_plt_stub): Add plt_static_chain param, don't load r11 if false.
+	(build_tls_get_addr_stub): Likewise.
+	(ppc_build_one_stub): Update calls to above.
+	(ppc_size_one_stub): Adjust stub size.
+	(ppc64_elf_size_stubs): Add plt_static_chain param, save to htab.
+	* elf64-ppc.h (ppc64_elf_size_stubs): Update prototype.
+
+2011-07-12  Nick Clifton  <nickc at redhat.com>
+
+	* elf32-arm.c (elf32_arm_section_flags): Delete.
+	(elf_backend_section_flags): Remove.
+
+2011-07-11  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/12982
+	* elflink.c (bfd_elf_size_dynamic_sections): Also skip BFD_PLUGIN
+	when setting stack_flags.
+
+2011-07-11  Catherine Moore  <clm at codesourcery.com>
+
+	* aout-adobe.c (aout_32_bfd_lookup_section_flags): New definition.
+	* aout-target.h (MY_bfd_lookup_section_flags): New definition.
+	* aout-tic30.c (MY_bfd_lookup_section_flags): New definition.
+	* bfd-in2.h: Regenerated.
+	* bfd.c (bfd_lookup_section_flags): New definition.
+	* binary.c (binary_bfd_lookup_section_flags): New definition.
+	* bout.c (b_out_bfd_lookup_section_flags): New definition.
+	* coff-alpha.c (_bfd_ecoff_bfd_lookup_section_flags): New definition.
+	* coff-mips.c (_bfd_ecoff_bfd_lookup_section_flags): New definition.
+	* coff-rs6000.c (rs6000coff_vec): Include
+	bfd_generic_lookup_section_flags.
+	(pmac_xcoff_vec): Likewise.
+	* coffcode.h (coff_bfd_lookup_section_flags): New definition.
+	* coff64-rs6000.c (rs6000coff64_vec): Include
+	bfd_generic_lookup_section_flags.
+	(aix5coff64_vec): Likewise.
+	* ecoff.c (bfd_debug_section): Initialize flag_info field.
+	* elf-bfd.h (elf_backend_lookup_section_flags_hook): Declare.
+	(bfd_elf_lookup_section_flags): Declare.
+	* elflink.c (bfd_elf_lookup_section_flags): New function.
+	* elfxx-target.h (bfd_elfNN_bfd_lookup_section_flags): Define.
+	(elf_backend_lookup_section_flags_hook): Define.
+	(elf_backend_data): Add elf_backend_lookup_section_flags_hook.
+	* i386msdos.c (msdos_bfd_lookup_section_flags): New define.
+	* i386os9k.c (os9k_bfd_lookup_section_flags): New define.
+	* ieee.c (ieee_bfd_lookup_section_flags): New define.
+	* ihex.c (ihex_bfd_lookup_section_flags): New define.
+	* libbfd-in.h (_bfd_nolink_bfd_lookup_section_flags): Declare.
+	(bfd_generic_lookup_section_flags): Declare.
+	* libbfd.h: Regenerated.
+	* mach-o-target.c (bfd_mach_o_bfd_lookup_section_flags): New.
+	* mmo.c (mmo_bfd_lookup_section_flags): New definition.
+	* nlm-target.h (nlm_bfd_lookup_section_flags): New definition.
+	* oasys.c (oasys_bfd_lookup_section_flags): New definition.
+	* pef.c (bfd_pef_bfd_lookup_section_flags): New definition.
+	* plugin.c (bfd_plugin_bfd_lookup_section_flags): New definition.
+	* ppcboot.c (ppcboot_bfd_lookup_section_flags): New definition.
+	* reloc.c (bfd_generic_lookup_section_flags): New function.
+	* som.c (som_bfd_lookup_section_flags): New definition.
+	* srec.c (srec_bfd_lookup_section_flags): New definition.
+	* targets.c (flag_info): Declare.
+	(NAME##_bfd_lookup_section_flags): Add to LINK jump table.
+	(_bfd_lookup_section_flags): New.
+	* tekhex.c (tekhex_bfd_lookup_section_flags): New definition.
+	* versados.c (versados_bfd_lookup_section_flags): New definition.
+	* vms-alpha.c (alpha_vms_bfd_lookup_section_flag): New definition.
+	* xsym.c (bfd_sym_bfd_lookup_section_flags): New definition.
+
+2011-07-11  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/12978
+	* elfnn-ia64.c (count_dyn_reloc): Fix a typo.
+
+2011-07-09  Alan Modra  <amodra at gmail.com>
+
+	PR ld/12942
+	* elflink.c (elf_link_add_object_symbols): Use elf_discarded_section
+	rather than kept_section to determine whether a symbol is from
+	a discarded section.
+	* cofflink.c (coff_link_add_symbols): Make symbols from discarded
+	sections appear undefined.
+
+2011-07-09  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/12942
+	* elf-bfd.h (_bfd_elf_section_already_linked): Replace
+	"asection *" with "struct already_linked *".
+	* libbfd-in.h (_bfd_nolink_section_already_linked): Likewise.
+	(_bfd_generic_section_already_linked): Likewise.
+	(bfd_section_already_linked_table_insert): Likewise.
+	(struct already_linked): New.
+	(struct bfd_section_already_linked): Use it.
+	* elflink.c (_bfd_elf_section_already_linked): Replace.
+	"asection *" with "struct already_linked *".  Replace the plugin
+	dummy with the LTO output.
+	* linker.c (_bfd_generic_section_already_linked): Likewise.
+	* targets.c (struct already_linked): Add forward declaration.
+	(bfd_target): Replace "struct bfd_section *" with
+	"struct already_linked *" in _section_already_linked.
+	* bfd-in2.h: Regenerate.
+	* libbfd.h: Regenerate.
+
+2011-07-06  Tristan Gingold  <gingold at adacore.com>
+
+	* mach-o.h: Move loader related definitions to
+	include/mach-o/loader.h.  Include it.
+
+2011-07-05  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf64-x86-64.c (elf_backend_post_process_headers): Always
+	define to _bfd_elf_set_osabi.
+
+2011-07-03  Samuel Thibault  <samuel.thibault at gnu.org>
+	    Thomas Schwinge  <thomas at schwinge.name>
+
+	PR binutils/12913
+	* elf.c (_bfd_elf_set_osabi): Use ELFOSABI_GNU name instead of
+	ELFOSABI_LINUX alias.
+	* elf32-hppa.c: Likewise.
+	* elf32-i370.c: Likewise.
+	* elf64-hppa.c: Likewise.
+
+2011-07-01  Ian Lance Taylor  <iant at google.com>
+
+	* elf32-i386.c (elf_i386_eh_frame_plt): Correct expression: change
+	DW_OP_lit3 to DW_OP_lit2.
+
+2011-07-01  Alan Modra  <amodra at gmail.com>
+
+	* elf32-ppc.c (ppc_elf_copy_indirect_symbol): Don't look at
+	dyn relocs when called to copy flags for a weak sym.
+	* elf64-ppc.c (ppc64_elf_copy_indirect_symbol): Likewise.
+	(ppc64_elf_merge_private_bfd_data): Delete.
+	(bfd_elf64_bfd_merge_private_bfd_data): Define as
+	_bfd_generic_verify_endian_match.
+
+2011-06-30  Bernd Schmidt  <bernds at codesourcery.com>
+
+	* bfd/elf32-tic6x.c (elf32_tic6x_set_osabi): Also set it if
+	link_info is NULL.
+
+2011-06-28  Tristan Gingold  <gingold at adacore.com>
+
+	* vms-alpha.c (vms_private_data_struct): Make vms_linkage_index
+	unsigned int.
+	(_bfd_vms_write_etir): Write linkage index from reloc.
+
+2011-06-28  Fawzi Mohamed <fawzi.mohamed at nokia.com>
+
+	* mach-o.c (bfd_mach_o_read_command): Also ignore
+	BFD_MACH_O_LC_ROUTINES_64.
+
+2011-06-27  Tristan Gingold  <gingold at adacore.com>
+
+	* vms-alpha.c (_bfd_vms_write_etir): Use 'section' to get current
+	section target index.
+
+2011-06-27  Nick Clifton  <nickc at redhat.com>
+
+	* cisco-core.c (cisco_core_little_vec): Add initialization of
+	match_priority field.
+
+2011-06-27  Tristan Gingold  <gingold at adacore.com>
+
+	* cache.c: Include bfd_stdint.h.
+	(cache_bmmap): Change profile.  Return region start and size.
+	* bfdio.c (struct bfd_iovec): Change bmmap profile.
+	(bfd_mmap): Change profile and adjust.   Update comment.
+	(memory_bmmap): Change profile.
+	* opncls.c (opncls_bmmap): Change profile.
+	* vms-lib.c (vms_lib_bmmap): Likewise.
+	* libbfd.h: Regenerate.
+	* bfd-in2.h: Regenerate.
+
+2011-06-27  Tristan Gingold  <gingold at adacore.com>
+
+	* vms-misc.c (vms_time_to_time_t): Adjust overflow detection.
+	Add comment.
+
+2011-06-25  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf64-x86-64.c (elf_backend_post_process_headers): Don't
+	define for FreeBSD/x86-64 nor FreeBSD/L1OM.  Define for L1OM.
+
+2011-06-25  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* elf64-x86-64.c (elf_x86_64_link_hash_table_create): Initialize
+	PLT_EH_FRAME.
+	* elf32-i386.c (elf_i386_link_hash_table): Likewise.
+
+2011-06-24  Richard Henderson  <rth at redhat.com>
+
+	PR ld/12928
+	* elf64-alpha.c (elf64_alpha_relax_tls_get_addr): Recover the
+	tlsgd insn before swapping adjacent insns.
+
+2011-06-24  Tristan Gingold  <gingold at adacore.com>
+
+	* vms-alpha.c (alpha_vms_slurp_relocs): Add a guard for relocs in the
+	absolute section.
+
+2011-06-24  Alan Modra  <amodra at gmail.com>
+
+	PR ld/12921
+	* elf.c (assign_file_positions_for_load_sections): Don't align
+	sh_offset for all SHT_NOBITS sections here, just .tbss sections
+	that don't get a PT_LOAD.
+
+2011-06-22  Kaz Kojima  <kkojima at rr.iij4u.or.jp>
+
+	* elf32-sh.c (sh_elf_relocate_section): Allow R_SH_TLS_LE_32 for PIE.
+	(sh_elf_check_relocs): Likewise.
+
+2011-06-22  Richard Henderson  <rth at redhat.com>
+
+	* elf64-alpha.c (elf64_alpha_check_relocs): No dynamic reloc for
+	TPREL in a PIE image.
+	(alpha_dynamic_entries_for_reloc): Likewise.
+	(elf64_alpha_relocate_section): Allow TPREL in PIE images.
+	(elf64_alpha_relax_got_load): Likewise.
+
+2011-06-22  Ramana Radhakrishnan  <ramana.radhakrishnan at linaro.org>
+
+	* elf32-arm.c (elf32_arm_final_link_relocate): Allow R_ARM_TLS_LE32
+	for PIE.
+
+2011-06-22  Alan Modra  <amodra at gmail.com>
+
+	* elflink.c (_bfd_elf_merge_symbol): Allow type changes for
+	plugin symbols.  Fix segfault on linker scrip defined syms.
+
+2011-06-20  Jakub Jelinek  <jakub at redhat.com>
+
+	PR ld/12570
+	* elf-eh-frame.c (_bfd_elf_parse_eh_frame): Allow no relocations
+	at all for linker created .eh_frame sections.
+	(_bfd_elf_discard_section_eh_frame): Handle linker created
+	.eh_frame sections with no relocations.
+	* elf64-x86-64.c: Include dwarf2.h.
+	(elf_x86_64_eh_frame_plt): New variable.
+	(PLT_CIE_LENGTH, PLT_FDE_LENGTH, PLT_FDE_START_OFFSET,
+	PLT_FDE_LEN_OFFSET): Define.
+	(struct elf_x86_64_link_hash_table): Add plt_eh_frame field.
+	(elf_x86_64_create_dynamic_sections): Create and fill in
+	.eh_frame section for .plt section.
+	(elf_x86_64_size_dynamic_sections): Write .plt section size
+	into .eh_frame FDE covering .plt section.
+	(elf_x86_64_finish_dynamic_sections): Write .plt section
+	start into .eh_frame FDE covering .plt section.  Call
+	_bfd_elf_write_section_eh_frame on htab->plt_eh_frame section.
+	(elf_backend_plt_alignment): Define to 4.
+	* elf32-i386.c: Include dwarf2.h.
+	(elf_i386_eh_frame_plt): New variable.
+	(PLT_CIE_LENGTH, PLT_FDE_LENGTH, PLT_FDE_START_OFFSET,
+	PLT_FDE_LEN_OFFSET): Define.
+	(struct elf_i386_link_hash_table): Add plt_eh_frame field.
+	(elf_i386_create_dynamic_sections): Create and fill in
+	.eh_frame section for .plt section.
+	(elf_i386_size_dynamic_sections): Write .plt section size
+	into .eh_frame FDE covering .plt section.
+	(elf_i386_finish_dynamic_sections): Write .plt section
+	start into .eh_frame FDE covering .plt section.  Call
+	_bfd_elf_write_section_eh_frame on htab->plt_eh_frame section.
+	(elf_backend_plt_alignment): Define to 4.
+
+2011-06-19  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf64-x86-64.c (elf_backend_post_process_headers): Defined
+	for x32.
+
+2011-06-16  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf64-x86-64.c: Include <stdarg.h> and CORE_HEADER if
+	CORE_HEADER is defined.
+	(elf_x86_64_write_core_note): New.
+	(elf_backend_write_core_note): Likewise.
+
+	* hosts/x86-64linux.h (uint64_t): New.
+	(user_regsx32_struct): Likewise.
+	(elf_gregx32_t): Likewise.
+	(ELF_NGREGX32): Likewise.
+	(elf_gregsetx32_t): Likewise.
+	(elf_prstatusx32): Likewise.
+	(prstatusx32_t): Likewise.
+	(user_fpregs32_struct): Removed.
+	(user_fpxregs32_struct): Likewise.
+	(user32): Likewise.
+	(elf_fpregset32_t): Likewise.
+	(elf_fpxregset32_t): Likewise.
+	(prgregset32_t): Likewise.
+	(prfpregset32_t): Likewise.
+
+2011-06-16  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf64-x86-64.c (elf_x86_64_grok_prstatus): Support x32.
+	(elf_x86_64_grok_psinfo): Likewise.
+
+2011-06-16  Nick Clifton  <nickc at redhat.com>
+
+	* elf.c (elf_find_function): Fail if not provided with a symbol
+	table.
+
+2011-06-15  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* elf-bfd.h (elfcore_write_arm_vfp): Add prototype.
+	* elf.c (elfcore_grok_arm_vfp): New function.
+	(elfcore_grok_note): Call it to handle NT_ARM_VFP notes.
+	(elfcore_write_arm_vfp): New function.
+	(elfcore_write_register_note): Call it to handle .reg-arm-vfp.
+
+2011-06-14  Richard Henderson  <rth at redhat.com>
+
+	* elf64-alpha.c (elf64_alpha_copy_indirect_symbol): Rename from
+	elf64_alpha_merge_ind_symbols; adjust for the generic interface.
+	(elf64_alpha_always_size_sections): Don't call
+	elf64_alpha_merge_ind_symbols.
+	(elf_backend_copy_indirect_symbol): New.
+
+2011-06-14  Alan Modra  <amodra at gmail.com>
+
+	PR ld/12887
+	* elf-eh-frame.c (_bfd_elf_parse_eh_frame): Check sec_info_type
+	before doing anything.
+	(_bfd_elf_discard_section_eh_frame): Likewise.
+
+2011-06-14  Alan Modra  <amodra at gmail.com>
+
+	* Makefile.am: Formatting.
+	* Makefile.in: Regenerate.
+	* configure.in (bfd_elf64_tilegx_vec): Add elfxx-tilegx.lo.
+	* po/SRC-POTFILES.in: Regnerate.
+
+2011-06-14  Alan Modra  <amodra at gmail.com>
+
+	* elf32-tilepro.c (tilepro_elf_size_dynamic_sections): Don't use PTR.
+	(allocate_dynrelocs, readonly_dynrelocs): Replace PTR with void *.
+	Don't handle warning symbols here.
+	* elfxx-tilegx.c (tilegx_elf_size_dynamic_sections): As above.
+	(allocate_dynrelocs, readonly_dynrelocs): As above.
+
+2011-06-14  Alan Modra  <amodra at gmail.com>
+
+	PR ld/12851
+	* elflink.c (_bfd_elf_gc_mark_extra_sections): New function.
+	(elf_gc_sweep): Don't treat debug and sections like .comment
+	specially here.
+	(bfd_elf_gc_sections): Treat note sections as gc roots only when
+	not part of a group.  Always call gc_mark_extra_sections.
+	* elf-bfd.h (_bfd_elf_gc_mark_extra_sections): Declare.
+	* elfxx-target.h (elf_backend_gc_mark_extra_sections): Default to
+	_bfd_elf_gc_mark_extra_sections.
+	* elf32-arm.c (elf32_arm_gc_mark_extra_sections): Call
+	_bfd_elf_gc_mark_extra_sections.
+	* elf32-tic6x.c (elf32_tic6x_gc_mark_extra_sections): Likewise.
+
+2011-06-13  Nick Clifton  <nickc at redhat.com>
+
+	* elf32-tilepro.c (tilepro_elf_check_relocs): Delete unused local
+	variable 'local_got_offsets'.
+	* elfxx-tilegx.c (tilegx_elf_check_relocs): Likewise.
+	(tilegx_finish_dyn): Delete unused local variable 'abi_64_p'.
+
+2011-06-13  Walter Lee  <walt at tilera.com>
+
+	* Makefile.am (ALL_MACHINES): Add cpu-tilegx.lo and cpu-tilepro.lo.
+	(ALL_MACHINE_CFILES): Add cpu-tilegx.c and cpu-tilepro.c.
+	(BFD32_BACKENDS): Add elf32-tilegx.lo, elf32-tilepro.lo,
+	and elfxx-tilegx.lo.
+	(BFD32_BACKENDS_CFILES): Add elf32-tilegx.c elf32-tilepro.c, and
+	elfxx-tilegx.c.
+	(BFD64_BACKENDS): Add elf64-tilegx.lo.
+	(BFD64_BACKENDS_CFILES): Add elf64-tilegx.c.
+	* Makefile.in: Regenerate.
+	* arctures.c (bfd_architecture): Define bfd_arch_tilepro,
+	bfd_arch_tilegx, bfd_mach_tilepro, bfd_mach_tilegx.
+	(bfd_arch_info): Add bfd_tilegx_arch, bfd_tilepro_arch.
+	(bfd_archures_list): Add bfd_tilegx_arch, bfd_tilepro_arch.
+	bfd-in2.h: Regenerate.
+	* config.bfd: Handle tilegx-*-* and tilepro-*-*.
+	* configure.in: Handle bfd_elf32_tilegx_vec, bfd_elf32_tilepro_vec,
+	and bfd_elf64_tilegx_vec.
+	* configure: Regenerate.
+	* elf-bfd.h (enum elf_target_id): Define TILEGX_ELF_DATA and
+	TILEPRO_ELF_DATA.
+	* libbfd.h: Regenerate.
+	* reloc.c: Add BFD_RELOC_TILEPRO_{COPY, GLOB_DAT, JMP_SLOT,
+	RELATIVE, BROFF_X1, JOFFLONG_X1, JOFFLONG_X1_PLT, IMM8_X0,
+	IMM8_Y0, IMM8_X1, IMM8_Y1, DEST_IMM8_X1, MT_IMM15_X1, MF_IMM15_X1,
+	IMM16_X0, IMM16_X1, IMM16_X0_LO, IMM16_X1_LO, IMM16_X0_HI,
+	IMM16_X1_HI, IMM16_X0_HA, IMM16_X1_HA, IMM16_X0_PCREL,
+	IMM16_X1_PCREL, IMM16_X0_LO_PCREL, IMM16_X1_LO_PCREL,
+	IMM16_X0_HI_PCREL, IMM16_X1_HI_PCREL, IMM16_X0_HA_PCREL,
+	IMM16_X1_HA_PCREL, IMM16_X0_GOT, IMM16_X1_GOT, IMM16_X0_GOT_LO,
+	IMM16_X1_GOT_LO, IMM16_X0_GOT_HI, IMM16_X1_GOT_HI,
+	IMM16_X0_GOT_HA, IMM16_X1_GOT_HA, MMSTART_X0, MMEND_X0,
+	MMSTART_X1, MMEND_X1, SHAMT_X0, SHAMT_X1, SHAMT_Y0, SHAMT_Y1,
+	IMM16_X0_TLS_GD, IMM16_X1_TLS_GD, IMM16_X0_TLS_GD_LO,
+	IMM16_X1_TLS_GD_LO, IMM16_X0_TLS_GD_HI, IMM16_X1_TLS_GD_HI,
+	IMM16_X0_TLS_GD_HA, IMM16_X1_TLS_GD_HA, IMM16_X0_TLS_IE,
+	IMM16_X1_TLS_IE, IMM16_X0_TLS_IE_LO, IMM16_X1_TLS_IE_LO,
+	IMM16_X0_TLS_IE_HI, IMM16_X1_TLS_IE_HI, IMM16_X0_TLS_IE_HA,
+	IMM16_X1_TLS_IE_HA, TLS_DTPMOD32, TLS_DTPOFF32, TLS_TPOFF32}
+	Add BFD_RELOC_TILEGX_{HW0, HW1, HW2, HW3, HW0_LAST, HW1_LAST,
+	HW2_LAST, COPY, GLOB_DAT, JMP_SLOT, RELATIVE, BROFF_X1,
+	JUMPOFF_X1, JUMPOFF_X1_PLT, IMM8_X0, IMM8_Y0, IMM8_X1, IMM8_Y1,
+	DEST_IMM8_X1, MT_IMM14_X1, MF_IMM14_X1, MMSTART_X0, MMEND_X0,
+	SHAMT_X0, SHAMT_X1, SHAMT_Y0, SHAMT_Y1, IMM16_X0_HW0,
+	IMM16_X1_HW0, IMM16_X0_HW1, IMM16_X1_HW1, IMM16_X0_HW2,
+	IMM16_X1_HW2, IMM16_X0_HW3, IMM16_X1_HW3, IMM16_X0_HW0_LAST,
+	IMM16_X1_HW0_LAST, IMM16_X0_HW1_LAST, IMM16_X1_HW1_LAST,
+	IMM16_X0_HW2_LAST, IMM16_X1_HW2_LAST, IMM16_X0_HW0_PCREL,
+	IMM16_X1_HW0_PCREL, IMM16_X0_HW1_PCREL, IMM16_X1_HW1_PCREL,
+	IMM16_X0_HW2_PCREL, IMM16_X1_HW2_PCREL, IMM16_X0_HW3_PCREL,
+	IMM16_X1_HW3_PCREL, IMM16_X0_HW0_LAST_PCREL,
+	IMM16_X1_HW0_LAST_PCREL, IMM16_X0_HW1_LAST_PCREL,
+	IMM16_X1_HW1_LAST_PCREL, IMM16_X0_HW2_LAST_PCREL,
+	IMM16_X1_HW2_LAST_PCREL, IMM16_X0_HW0_GOT, IMM16_X1_HW0_GOT,
+	IMM16_X0_HW1_GOT, IMM16_X1_HW1_GOT, IMM16_X0_HW2_GOT,
+	IMM16_X1_HW2_GOT, IMM16_X0_HW3_GOT, IMM16_X1_HW3_GOT,
+	IMM16_X0_HW0_LAST_GOT, IMM16_X1_HW0_LAST_GOT,
+	IMM16_X0_HW1_LAST_GOT, IMM16_X1_HW1_LAST_GOT,
+	IMM16_X0_HW2_LAST_GOT, IMM16_X1_HW2_LAST_GOT, IMM16_X0_HW0_TLS_GD,
+	IMM16_X1_HW0_TLS_GD, IMM16_X0_HW1_TLS_GD, IMM16_X1_HW1_TLS_GD,
+	IMM16_X0_HW2_TLS_GD, IMM16_X1_HW2_TLS_GD, IMM16_X0_HW3_TLS_GD,
+	IMM16_X1_HW3_TLS_GD, IMM16_X0_HW0_LAST_TLS_GD,
+	IMM16_X1_HW0_LAST_TLS_GD, IMM16_X0_HW1_LAST_TLS_GD,
+	IMM16_X1_HW1_LAST_TLS_GD, IMM16_X0_HW2_LAST_TLS_GD,
+	IMM16_X1_HW2_LAST_TLS_GD, IMM16_X0_HW0_TLS_IE,
+	IMM16_X1_HW0_TLS_IE, IMM16_X0_HW1_TLS_IE, IMM16_X1_HW1_TLS_IE,
+	IMM16_X0_HW2_TLS_IE, IMM16_X1_HW2_TLS_IE, IMM16_X0_HW3_TLS_IE,
+	IMM16_X1_HW3_TLS_IE, IMM16_X0_HW0_LAST_TLS_IE,
+	IMM16_X1_HW0_LAST_TLS_IE, IMM16_X0_HW1_LAST_TLS_IE,
+	IMM16_X1_HW1_LAST_TLS_IE, IMM16_X0_HW2_LAST_TLS_IE,
+	IMM16_X1_HW2_LAST_TLS_IE, TLS_DTPMOD64, TLS_DTPOFF64, TLS_TPOFF64,
+	TLS_DTPMOD32, TLS_DTPOFF32, TLS_TPOFF32}
+	* targets.c (bfd_elf32_tilegx_vec): Declare.
+	(bfd_elf32_tilepro_vec): Declare.
+	(bfd_elf64_tilegx_vec): Declare.
+	(bfd_target_vector): Add bfd_elf32_tilegx_vec, bfd_elf32_tilepro_vec,
+	and bfd_elf64_tilegx_vec.
+	* cpu-tilegx.c: New file.
+	* cpu-tilepro.c: New file.
+	* elf32-tilepro.h: New file.
+	* elf32-tilepro.c: New file.
+	* elf32-tilegx.c: New file.
+	* elf32-tilegx.h: New file.
+	* elf64-tilegx.c: New file.
+	* elf64-tilegx.h: New file.
+	* elfxx-tilegx.c: New file.
+	* elfxx-tilegx.h: New file.
+
+2011-06-13  Alan Modra  <amodra at gmail.com>
+
+	* linker.c (bfd_link_hash_traverse): Follow warning symbol link.
+	(_bfd_generic_link_write_global_symbol, fix_syms): Don't handle
+	warning symbols here.
+	* elf-m10300.c (elf32_mn10300_finish_hash_table_entry): Likewise.
+	* elf32-arm.c (allocate_dynrelocs_for_symbol,
+	elf32_arm_readonly_dynrelocs): Likewise.
+	* elf32-bfin.c (bfin_discard_copies): Likewise.
+	* elf32-cris.c (elf_cris_adjust_gotplt_to_got,
+	elf_cris_discard_excess_dso_dynamics,
+	elf_cris_discard_excess_program_dynamics): Likewise.
+	* elf32-hppa.c (allocate_plt_static, allocate_dynrelocs,
+	clobber_millicode_symbols, readonly_dynrelocs): Likewise.
+	* elf32-i370.c (i370_elf_adjust_dynindx): Likewise.
+	* elf32-i386.c (elf_i386_allocate_dynrelocs,
+	elf_i386_readonly_dynrelocs): Likewise.
+	* elf32-lm32.c (allocate_dynrelocs, readonly_dynrelocs): Likewise.
+	* elf32-m32c.c (m32c_relax_plt_check, m32c_relax_plt_realloc): Likewise.
+	* elf32-m32r.c (allocate_dynrelocs, readonly_dynrelocs): Likewise.
+	* elf32-m68k.c (elf_m68k_discard_copies): Likewise.
+	* elf32-microblaze.c (allocate_dynrelocs): Likewise.
+	* elf32-ppc.c (allocate_dynrelocs, maybe_set_textrel): Likewise.
+	* elf32-s390.c (allocate_dynrelocs, readonly_dynrelocs): Likewise.
+	* elf32-score.c (score_elf_sort_hash_table_f): Likewise.
+	* elf32-score7.c (score_elf_sort_hash_table_f): Likewise.
+	* elf32-sh.c (allocate_dynrelocs, readonly_dynrelocs): Likewise.
+	* elf32-tic6x.c (elf32_tic6x_allocate_dynrelocs,
+	elf32_tic6x_readonly_dynrelocs): Likewise.
+	* elf32-vax.c (elf_vax_discard_copies): Likewise.
+	* elf32-xstormy16.c (xstormy16_relax_plt_check,
+	xstormy16_relax_plt_realloc): Likewise.
+	* elf32-xtensa.c (elf_xtensa_allocate_dynrelocs): Likewise.
+	* elf64-alpha.c (elf64_alpha_output_extsym,
+	elf64_alpha_calc_got_offsets_for_symbol,
+	elf64_alpha_calc_dynrel_sizes, elf64_alpha_size_rela_got_1): Likewise.
+	* elf64-hppa.c (elf64_hppa_mark_exported_functions,
+	allocate_global_data_opd, elf64_hppa_mark_milli_and_exported_functions,
+	elf_hppa_unmark_useless_dynamic_symbols,
+	elf_hppa_remark_useless_dynamic_symbols): Likewise.
+	* elf64-ppc.c (ppc64_elf_gc_mark_dynamic_ref, func_desc_adjust,
+	adjust_opd_syms, adjust_toc_syms, allocate_dynrelocs,
+	readonly_dynrelocs, merge_global_got, reallocate_got,
+	undo_symbol_twiddle): Likewise.
+	* elf64-s390.c (allocate_dynrelocs, readonly_dynrelocs): Likewise.
+	* elf64-sh64.c (sh64_elf64_discard_copies): Likewise.
+	* elf64-x86-64.c (elf_x86_64_allocate_dynrelocs,
+	elf_x86_64_readonly_dynrelocs): Likewise.
+	* elflink.c (elf_link_renumber_hash_table_dynsyms,
+	elf_link_renumber_local_hash_table_dynsyms, _bfd_elf_export_symbol,
+	_bfd_elf_link_find_version_dependencies,
+	_bfd_elf_link_assign_sym_version, _bfd_elf_adjust_dynamic_symbol,
+	_bfd_elf_link_sec_merge_syms, elf_adjust_dynstr_offsets,
+	elf_collect_hash_codes, elf_collect_gnu_hash_codes,
+	elf_renumber_gnu_hash_syms, elf_gc_sweep_symbol,
+	elf_gc_propagate_vtable_entries_used,
+	elf_gc_smash_unused_vtentry_relocs, bfd_elf_gc_mark_dynamic_ref_symbol,
+	elf_gc_allocate_got_offsets): Likewise.
+	* elfnn-ia64.c (elfNN_ia64_global_dyn_info_free,
+	elfNN_ia64_global_dyn_sym_thunk): Likewise.
+	* elfxx-mips.c (mips_elf_check_symbols, mips_elf_output_extsym,
+	mips_elf_sort_hash_table_f, allocate_dynrelocs): Likewise.
+	* elfxx-sparc.c (allocate_dynrelocs, readonly_dynrelocs): Likewise.
+	* i386linux.c (linux_tally_symbols): Likewise.
+	* m68klinux.c (linux_tally_symbols): Likewise.
+	* sparclinux.c (linux_tally_symbols): Likewise.
+	* sunos.c (sunos_scan_dynamic_symbol): Likewise.
+	* xcofflink.c (xcoff_post_gc_symbol): Likewise.
+
+	* elflink.c (elf_link_output_extsym): Make it a bfd_hash_traverse
+	function.  Update all callers.
+	* aoutx.h (aout_link_write_other_symbol): Likewise.
+	* pdp11.c (aout_link_write_other_symbol): Likewise.
+	* cofflink.c (_bfd_coff_write_global_sym): Likewise.
+	* ecoff.c (ecoff_link_write_external): Likewise.
+	* xcofflink.c (xcoff_write_global_symbol): Likewise.
+	* vms-alpha.c (alpha_vms_link_output_symbol): Likewise.  Handle
+	warning symbols.
+	* ecoff.c (ecoff_link_hash_traverse): Delete.
+	* coff-ppc.c (ppc_bfd_coff_final_link): Use bfd_hash_traverse for
+	_bfd_coff_write_global_sym.
+	* libcoff-in.h (_bfd_coff_write_global_sym): Update prototype.
+	* libcoff.h: Regenerate.
+
+2011-06-10  Nick Clifton  <nickc at redhat.com>
+
+	* elflink.c (_bfd_elf_link_create_dynamic_sections): If the
+	backend does not provide a function for creating dynamic sections
+	then fail.
+	(bfd_elf_final_link): Issue a warning message if a dynamic section
+	has the SHT_NOTE type.
+	(bfd_elf_final_link): Do not look for dynamic strings in a section
+	that does not have the SHT_STRTAB type or the name .dynstr.
+	* elf32-arm.c (elf32_arm_finish_dynamic_sections): Fail if the got
+	section is not in the output binary.
+	* elf32-hppa.c (elf32_hppa_finish_dynamic_sections): Likewise.
+
+2011-06-09  Tristan Gingold  <gingold at adacore.com>
+
+	* elfnn-ia64.c (elfNN_ia64_relax_section, elfNN_ia64_choose_gp)
+	(elfNN_ia64_relocate_section, elfNN_vms_object_p): Remove trailing
+	spaces.
+
+2011-06-09  Tristan Gingold  <gingold at adacore.com>
+
+	* bfd.c (bfd_get_sign_extend_vma): Handle aixcoff.
+
+2011-06-09  Nick Clifton  <nickc at redhat.com>
+
+	PR ld/12845
+	* elf.c (_bfd_elf_init_private_section_data): Add an assertion
+	that the output section has an allocated bfd_elf_section_data
+	structure.
+	* elfxx-mips.c (mips_elf_check_symbols): Do not create a stub for
+	symbols in sections that have been removed by garbage collection.
+
+2011-06-08  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf64-x86-64.c (elf_x86_64_check_relocs): Allow R_X86_64_64
+	relocations in SEC_DEBUGGING sections when building shared
+	libraries.
+
+2011-06-08  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/12851
+	* elflink.c (elf_gc_sweep): Don't check SHT_NOTE sections here.
+	(bfd_elf_gc_sections): Also check SHT_NOTE sections.
+
+2011-06-08  Tristan Gingold  <gingold at adacore.com>
+
+	* makefile.vms (OBJS): Add elfxx-ia64.obj
+	Remove vax case.
+
+2011-06-08  Alan Modra  <amodra at gmail.com>
+
+	* aix386-core.c, * cisco-core.c, * hpux-core.c, * osf-core.c,
+	* sco5-core.c: Init match_priority field.
+
+2011-06-08  Alan Modra  <amodra at gmail.com>
+
+	* elflink.c (_bfd_elf_archive_symbol_lookup): Follow warning and
+	indirect links here.
+
+2011-06-07  Joel Brobecker  <brobecker at adacore.com>
+
+	* irix-core.c (irix_core_vec): Add match_priority field.
+
+2011-06-06  Alan Modra  <amodra at gmail.com>
+
+	* targets.c (bfd_target): Make ar_max_namelen an unsigned char.
+	Add match_priority.
+	* configure.in: Bump bfd version.
+	* elfcode.h (elf_object_p): Delete hacks preventing match of
+	EM_NONE and ELFOSABI_NONE targets when a better match exists.
+	* elfxx-target.h (elf_match_priority): Define and use.
+	* format.c (bfd_check_format_matches): Use target match_priority
+	to choose best of multiple matching targets.  In cases with multiple
+	matches rerun _bfd_check_format if we don't choose the last match.
+	* aout-adobe.c, * aout-arm.c, * aout-target.h, * aout-tic30.c,
+	* binary.c, * bout.c, * coff-alpha.c, * coff-i386.c, * coff-i860.c,
+	* coff-i960.c, * coff-ia64.c, * coff-mips.c, * coff-or32.c,
+	* coff-ppc.c, * coff-rs6000.c, * coff-sh.c, * coff-tic30.c,
+	* coff-tic54x.c, * coff-x86_64.c, * coff64-rs6000.c, * coffcode.h,
+	* i386msdos.c, * i386os9k.c, * ieee.c, * ihex.c, * mach-o-target.c,
+	* mipsbsd.c, * mmo.c, * nlm-target.h, * oasys.c, * pdp11.c,
+	* pe-mips.c, * pef.c, * plugin.c, * ppcboot.c, * som.c, * srec.c,
+	* tekhex.c, * trad-core.c, * verilog.c, * versados.c, * vms-alpha.c,
+	* vms-lib.c, * xsym.c: Init match_priority field.
+	* configure: Regenerate.
+	* bfd-in2.h: Regenerate.
+
+2011-06-04  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/12842
+	* elfcode.h (elf_object_p): Revert the last change.
+
+2011-06-04  Alan Modra  <amodra at gmail.com>
+
+	* archures.c (bfd_arch_get_compatible): If one arch is unknown,
+	return the other arch.
+	* elfcode.h (elf_object_p): Allow explicit match to generic ELF
+	target.
+
+2011-06-03  Bertram Felgenhauer  <bertram.felgenhauer at gmail.com>
+
+	PR ld/12682
+	* hash.c (higher_primer_number): Add more, small, prime numbers.
+	(bfd_hash_set_default_size): Likewise.
+
+2011-06-02  Nick Clifton  <nickc at redhat.com>
+
+	* coff-mcore.c: Fix spelling typo.
+	* coff-stgo32.c: Likewise.
+	* elf32-arm.c: Likewise.
+	* elf32-avr.c: Likewise.
+	* elf-m68hc1x.c: Likewise.
+	* elf32-mcore.c: Likewise.
+	* elf32-mep.c: Likewise.
+	* elf32-mt.c: Likewise.
+	* elf32-ppc.c: Likewise.
+	* elf32-xtensa.c: Likewise.
+	* elf64-ppc.c: Likewise.
+	* elfxx-mips.c: Likewise.
+	* netbsd.h: Likewise.
+	* nlmcode.h: Likewise.
+	* vms-alpha.c: Likewise.
+	* po/bfd.pot: Regenerate.
+	* po/SRC-POTFILES.in: Regenerate.
+
+2011-06-01  DJ Delorie  <dj at redhat.com>
+
+	* config.bfd: Add bfd_elf32_rx_be_ns_vec.
+	* target.c: Likewise.
+	* configure.in: Likewise.
+	* configure.in: Regenerate.
+	* elf32-rx.c: Add elf32-rx-be-ns target.
+	(rx_elf_object_p): Never allow the be-ns target by default,
+	only allow it if the user requests it.
+
+2011-06-01  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf32-i386.c (elf_i386_size_dynamic_sections): Properly warn
+	relocation in readonly section in a shared object.
+	* elf64-x86-64.c (elf_x86_64_size_dynamic_sections): Likewise.
+
+2011-05-31  Nick Clifton  <nickc at redhat.com>
+
+	* archive.c (adjust_relative_path): Fix comment to prevent it
+	corrupting the auto-generated bfd.h.
+
+2011-05-31  Paul Brook  <paul at codesourcery.com>
+
+	* elf32-arm.c (elf32_arm_final_link_relocate): Only do bl conversion
+	for known functions.
+	(elf32_arm_swap_symbol_in): Only set ST_BRANCH_TO_ARM for function
+	symbols.
+
+2011-05-31  Paul Brook  <paul at codesourcery.com>
+
+	* elf32-arm.c (arm_stub_is_thumb): Add
+	arm_stub_long_branch_v4t_thumb_tls_pic.
+	(elf32_arm_final_link_relocate): TLS stubs are always ARM.
+	Handle Thumb stubs.
+
+2011-05-27  Nick Clifton  <nickc at redhat.com>
+
+	PR binutils/12710
+	* archive.c (_bfd_get_elt_at_filepos): Set correct error value if
+	unable to read a file pointed to by an entry in a thin archive.
+	(adjust_relative_path): Use lrealpath to canonicalize paths.
+	Handle the case where the reference path is above the current
+	path in the directory tree.
+
+2011-05-26  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/12809
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Handle
+	R_X86_64_TPOFF64 in executable.
+
+2011-05-26  Alan Modra  <amodra at gmail.com>
+
+	* elf-bfd.h (SYMBOL_REFERENCES_LOCAL): Remove most of comment.
+	* elflink.c (_bfd_elf_symbol_refs_local_p): Expand
+	local_protected comment.
+
+2011-05-25  Tristan Gingold  <gingold at adacore.com>
+
+	* configure.in (bfd_elf32_ia64_big_vec, bfd_elf32_ia64_hpux_big_vec)
+	(bfd_elf64_ia64_big_vec, bfd_elf64_ia64_hpux_big_vec)
+	(bfd_elf64_ia64_little_vec, bfd_elf64_ia64_vms_vec): Add elfxx-ia64.lo
+	* Makefile.am (BFD64_BACKENDS): Add elfxx-ia64.lo
+	(BFD64_BACKENDS_CFILES): Add elfxx-ia64.c
+	(elf32-ia64.c): Created from elfnn-ia64.c
+	(elf64-ia64.c): Likewise.
+	* elfxx-ia64.h: New file.
+	* elfxx-ia64.c: Split with elfnn-ia64.c.  Keep only the following
+	functions.Includes elfxx-ia64.h.
+	(elfNN_ia64_reloc): Renames to ia64_elf_reloc.  Adjust error message.
+	(IA64_HOWTO): Adjust.
+	(lookup_howto): Renames to ia64_elf_lookup_howto.  Make it public.
+	(elfNN_ia64_reloc_type_lookup): Renames to
+	ia64_elf_reloc_type_lookup. Make it public. Adjust calls.
+	(elfNN_ia64_reloc_name_lookup): Renames to
+	ia64_elf_reloc_name_lookup. Make it public.
+	(elfNN_ia64_relax_br): Renames to ia64_elf_relax_br.  Make it public.
+	(elfNN_ia64_relax_brl): Renames to ia64_elf_relax_brl. Make it
+	public.
+	(elfNN_ia64_relax_ldxmov): Renames to ia64_elf_relax_ldxmov.
+	Move it and make it public.  Move prototype to elfxx-ia64.h
+	(elfNN_ia64_install_value): Renames to ia64_elf_install_value.
+	Move prototype to elfxx-ia64.h
+	* elfnn-ia64.c: New file, split from elfxx-ia64.c.
+	(elfNN_ia64_info_to_howto): Adjust calls.
+	(elfNN_ia64_relax_section): Adjust calls.
+	(count_dyn_reloc): Fix typo.
+	(elfNN_ia64_relocate_section): Adjust calls.
+	(elfNN_ia64_finish_dynamic_symbol): Likewise.
+	(bfd_elfNN_bfd_reloc_type_lookup)
+	(bfd_elfNN_bfd_reloc_name_lookup): Adjust macros.
+	* configure: Regenerate.
+	* Makefile.in: Regenerate.
+
+2011-05-23  DJ Delorie  <dj at redhat.com>
+
+	* elf32-rx.c (rx_elf_object_p): When reading an RX object in, undo
+	the vma/lma swapping done in elf32_rx_modify_program_headers.
+
+2011-05-23  Nick Clifton  <nickc at redhat.com>
+
+	* elf-m10300.c (mn10300_elf_mkobject): New function.
+	(bfd_elf32_mkobject): Define.
+
+2011-05-23  Alan Modra  <amodra at gmail.com>
+
+	* elf-bfd.h: Comment typo fix.
+	* elf32-ppc.c (struct ppc_elf_dyn_relocs): Delete.  Replace with
+	struct elf_dyn_relocs throughout.
+	* elf64-ppc.c (struct ppc_dyn_relocs): Likewise.
+
+2011-05-23  Alan Modra  <amodra at gmail.com>
+
+	* elf32-frv.c: Use info->callbacks->einfo throughout file in linker
+	functions rather than warning callback or _bfd_error_handler.
+	* elf32-ppc.c: Likewise.
+	* elf64-ppc.c: Likewise.
+	* elf32-ppc.c (ppc_elf_tls_optimize): Use %H in __tls_get_addr lost
+	arg error.
+	* elf64-ppc.c (ppc64_elf_tls_optimize): Likewise.
+
+2011-05-23  Alan Modra  <amodra at gmail.com>
+
+	PR 12763
+	* elf.c (assign_file_positions_for_load_sections): Set sh_offset for
+	.tbss, and page align same for all SHT_NOBITS sections.
+
+2011-05-21  Alan Modra  <amodra at gmail.com>
+
+	PR 12763
+	* elf.c (_bfd_elf_make_section_from_shdr): Set up TLS section LMAs
+	from PT_TLS header.
+	(_bfd_elf_map_sections_to_segments): Don't create a final PT_LOAD
+	segment if just for .tbss.
+	(assign_file_positions_for_load_sections): Don't report "can't
+	allocate in segment" errors for .tbss.
+	(assign_file_positions_for_non_load_sections): Don't set p_filesz
+	from SHT_NOBITS section filepos.
+
+2011-05-20  Bernd Schmidt  <bernds at codesourcery.com>
+
+	* elf32-tic6x.c (elf32_tic6x_howto_table): Add entries for
+	R_C6000_PCR_H16 and R_C6000_PCR_L16.
+	(elf32_tic6x_relocate_section): Handle them.
+
+2011-05-18  Nick Clifton  <nickc at redhat.com>
+
+	PR ld/12761
+	* elflink.c (elf_link_add_object_symbols): Process .gnu.warning
+	sections when building shared libraries.
+
+2011-05-18  Rafał Krypa  <r.krypa at samsung.com>
+
+	PR ld/12778
+	* elf32-arm.c (elf32_arm_gc_sweep_hook): Use the computed dynamic
+	reloc pointer.
+
+2011-05-18  Tristan Gingold  <gingold at adacore.com>
+
+	* xcofflink.c (xcoff_link_add_symbols): Handle C_DWARF symbols.
+	(xcoff_sweep): Always keep dwarf sections.
+	(xcoff_link_input_bfd): Handle dwarf symbols and sections.
+
+2011-05-18  Tristan Gingold  <gingold at adacore.com>
+
+	* libxcoff.h (struct xcoff_dwsect_name): New type.
+	(XCOFF_DWSECT_NBR_NAMES): New macro.
+	(xcoff_dwsect_names): Declare.
+	* coffcode.h (sec_to_styp_flags): Handle xcoff dwarf sections.
+	(styp_to_sec_flags): Ditto.
+	(coff_new_section_hook): Ditto.
+	(coff_slurp_symbol_table): Handle C_DWARF and C_INFO.
+	* coff-rs6000.c (xcoff_dwsect_name): New variable.
+
+2011-05-17  Tomohiro Kashiwada  <kikairoya at gmail.com>
+
+	PR ld/12759
+	* elf32-rx.c (ignore_lma): New variable.
+	(bfd_elf32_rx_set_target_flags): Add ignore_lma parameter.
+	(rx_modify_program_headers): Only copy the LMA into the VMA if
+	ignore_lma is true.
+
+2011-05-17  Alan Modra  <amodra at gmail.com>
+
+	PR ld/12760
+	* coff-aux.c (coff_m68k_aux_link_add_one_symbol): Adjust "notice" call.
+	* elflink.c (elf_link_add_object_symbols): Likewise.
+	* linker.c (_bfd_generic_link_add_one_symbol): Likewise.
+
+2011-05-16  Alan Modra  <amodra at gmail.com>
+
+	* linker.c (_bfd_generic_link_add_one_symbol): Don't init u.undef.weak.
+
+2011-05-15  Richard Sandiford  <rdsandiford at googlemail.com>
+
+	* elfxx-mips.c (_bfd_mips_elf_check_relocs): Record both local and
+	global GOT entries for GOT_PAGE relocations against global symbols.
+
+2011-05-13  Bernd Schmidt  <bernds at codesourcery.com>
+
+	* config.bfd (tic6x-*-elf, tic6x-*-uclinux): New.
+	(tic6x-*-*): Replaced by these.
+	* elf32-tic6x.c (elf32_tic6x_set_osabi): New static function.
+	(elf32_tic6x_check_relocs): Create dynamic sections if -shared.
+	(elf_backend_relocs_compatible, elf_backend_post_process_headers):
+	Define.
+	(elf32_bed, TARGET_LITTLE_SYM, TARGET_LITTLE_NAME, TARGET_BIG_SYM,
+	TARGET_BIG_NAME, ELF_OSABI): Redefine twice, and include
+	"elf32-target.h" two more times.
+	* configure.in: Handle bfd_elf32_tic6x_linux_be_vec,
+	bfd_elf32_tic6x_linux_le_vec, bfd_elf32_tic6x_elf_be_vec and
+	bfd_elf32_tic6x_elf_le_vec.
+	* configure: Regenerate.
+
+2011-05-13  Jan Beulich  <jbeulich at novell.com>
+
+	* config.bfd: Add targets x86_64-*-pe and x86_64-*-pep.
+
+2011-05-12  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* config.in: Regenerated.
+	* configure: Regenerated.
+	* configure.in: New tests for HAVE_PRPSINFO_T_PR_PID,
+	HAVE_PRPSINFO32_T_PR_PID, HAVE_PSINFO_T_PR_PID and
+	HAVE_PSINFO32_T_PR_PID.
+	* elf.c (elfcore_grok_psinfo): Protect reading psinfo.pr_pid by
+	HAVE_PRPSINFO_T_PR_PID, HAVE_PRPSINFO32_T_PR_PID, HAVE_PSINFO_T_PR_PID
+	and HAVE_PSINFO32_T_PR_PID.
+	* hosts/x86-64linux.h (HAVE_PRPSINFO32_T_PR_PID): New redefinition.
+
+2011-05-10  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* elf.c (elfcore_grok_psinfo): Initialize CORE_PID for both native and
+	32bit psinfo.
+	* elf32-ppc.c (ppc_elf_grok_psinfo): Initialize core_pid.
+	* elf64-ppc.c (ppc64_elf_grok_psinfo): Likewise.
+
+2011-05-09  Paul Brook  <paul at codesourcery.com>
+
+	* bfd-in.h (elf32_tic6x_fix_exidx_coverage): Add prototype.
+	* bfd-in2.h: Regenerate.
+	* elf32-tic6x.c: Include limits.h.
+	(tic6x_unwind_edit_type, tic6x_unwind_table_edit,
+	_tic6x_elf_section_data): New.
+	(elf32_tic6x_section_data): Define.
+	(elf32_tic6x_new_section_hook): Allocate target specific data.
+	(elf32_tic6x_add_unwind_table_edit): New function.
+	(get_tic6x_elf_section_data, elf32_tic6x_adjust_exidx_size,
+	elf32_tic6x_insert_cantunwind_after, elf32_tic6x_add_low31,
+	elf32_tic6x_copy_exidx_entry): New functions.
+	(elf_backend_write_section): Define.
+
+2011-05-09  Paul Brook  <paul at codesourcery.com>
+
+	* elf32-tic6x.c (is_tic6x_elf_unwind_section_name,
+	elf32_tic6x_fake_sections): New functions.
+	(elf_backend_fake_sections): Define.
+
+2011-05-09  Paul Brook  <paul at codesourcery.com>
+
+	* elf32-tic6x.c (elf32_tic6x_gc_mark_extra_sections): New function.
+	(elf_backend_gc_mark_extra_sections): Define.
+
+2011-05-07  Dave Korn  <dave.korn.cygwin at gmail.com>
+
+	PR ld/12365
+	* cofflink.c (bfd_coff_link_input_bfd): Check for and warn about
+	references to symbols defined in discarded sections.
+
+2011-05-07  Dave Korn  <dave.korn.cygwin at gmail.com>
+
+	PR ld/12365
+	* coffgen.c (coff_write_symbol): Assume input section is its own
+	output section if output_section member not set.
+	(coff_write_alien_symbol): Likewise.
+
+2011-05-07  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/12730
+	* elf.c (_bfd_elf_section_offset): Check SEC_ELF_REVERSE_COPY.
+
+	* elflink.c (elf_link_input_bfd): Reverse copy .ctors/.dtors
+	sections if needed.
+
+	* section.c (SEC_ELF_REVERSE_COPY): New.
+	* bfd-in2.h: Regenerated.
+
+2011-05-07  Anders Kaseorg  <andersk at ksplice.com>
+
+	PR 12739
+	* libbfd.c (bfd_get_8, bfd_get_signed_8): Use const cast.
+	* bfd-in2.h: Regenerate.
+
+2011-05-06  Tristan Gingold  <gingold at adacore.com>
+
+	* vms-alpha.c (evax_section_flags): Remove SEC_IN_MEMORY.
+	(_bfd_vms_slurp_egsd): Rename old_flags to vms_flags.  Handle
+	any code section.  Add comments.
+	(alpha_vms_object_p): Use void * instead of PTR.
+	(alpha_vms_create_eisd_for_section): Fix test for setting DZRO.
+	(build_module_list): Guard against no DST section.  Add comments.
+	(alpha_vms_link_output_symbol): Discard undefined symbols.
+	(alpha_vms_get_section_contents): Simply memcpy if the section was
+	already loaded.  Fix typo.
+	(vms_new_section_hook): Use void * instead of PTR.
+	(vms_alpha_vec): Ditto.
+
+2011-05-06  Richard Sandiford  <richard.sandiford at linaro.org>
+
+	* elf32-arm.c (cortex_a8_erratum_scan): If the stub is a Thumb
+	branch to a PLT entry, redirect it to the PLT's Thumb entry point.
+
+2011-05-05  Bernd Schmidt  <bernds at codesourcery.com>
+
+	* elf32-tic6x.c (elf32_tic6x_final_link): New function.
+	(elf32_tic6x_merge_attributes): Do not warn for PID or PIC
+	mismatch.  Choose the lower of the two values.
+	(bfd_elf32_bfd_final_link): New macro.
+
+2011-04-28  Tristan Gingold  <gingold at adacore.com>
+
+	* coff-rs6000.c (_bfd_xcoff_swap_aux_in): Adjust for x_file.
+	(bfd_xcoff_swap_aux_out): Ditto.
+	* coff64-rs6000.c (_bfd_xcoff64_swap_aux_in): Ditto.
+	(bfd_xcoff64_swap_aux_out): Ditto.
+
+2011-05-04  Alan Modra  <amodra at gmail.com>
+
+	PR ld/12727
+	* elf64-ppc.c (ppc_build_one_stub <ppc_sub_plt_call>): Clear
+	was_undefined on dot-symbols.
+
+2011-05-03  Paul Brook  <paul at codesourcery.com>
+
+
+	* elf32-tic6x.c (elf32_tic6x_howto_table,
+	elf32_tic6x_howto_table_rel, (elf32_tic6x_gc_sweep_hook,
+	elf32_tic6x_relocate_section, elf32_tic6x_check_relocs):
+	Add R_C6000_EHTYPE.
+
+2011-05-01  Alan Modra  <amodra at gmail.com>
+
+	PR ld/12718
+	* elf32-i386.c (elf_i386_check_relocs): Ensure dynobj set before
+	creating ifunc sections.
+	* elf64-x86-64.c (elf_x86_64_check_relocs): Likewise.
+
+2011-04-30  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf64-x86-64.c (elf_x86_64_merge_symbol): Correct parameter
+	names.
+
+2011-04-28  Tom Tromey  <tromey at redhat.com>
+
+	* bfdio.c (memory_bstat): Pass correct size to memset.
+
+2011-04-28  Mike Frysinger  <vapier at gentoo.org>
+
+	* dwarf2.c (dwarf_debug_sections): Mark const.
+	* elf.c (special_sections): Likewise.
+	* libbfd-in.h (dwarf_debug_sections): Likewise.
+	* libbfd.h: Regenerate.
+
+2011-04-26  Kai Tietz  <ktietz at redhat.com>
+
+	* coffcode.h (sec_to_styp_flags): Allow linkonce for
+	debugging sections.
+
+2011-04-26  Tristan Gingold  <gingold at adacore.com>
+
+	* coff64-rs6000.c: Convert to ISO-C.  Remove PARAMS and PTR macros.
+
+2011-04-24  Alan Modra  <amodra at gmail.com>
+
+	PR ld/12365
+	PR ld/12696
+	* coff-aux.c (coff_m68k_aux_link_add_one_symbol): Update "notice" call.
+	* linker.c (_bfd_link_hash_newfunc): Clear bitfields.
+	(_bfd_generic_link_add_one_symbol): Update "notice" call.
+	* elflink.c (_bfd_elf_merge_symbol): Don't skip weak redefs when
+	it is a redef of an IR symbol in a real BFD.
+
+2011-04-22  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf32-i386.c (elf_i386_readonly_dynrelocs): Warn relocation
+	in readonly section in a shared object.
+	(elf_i386_size_dynamic_sections): Likewise.
+	* elf64-x86-64.c (elf_x86_64_readonly_dynrelocs): Likewise.
+	(elf_x86_64_size_dynamic_sections): Likewise.
+
+2011-04-21  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/12694
+	* elf32-i386.c (elf_i386_readonly_dynrelocs): Skip local IFUNC
+	symbols.
+	* elf64-x86-64.c (elf_x86_64_readonly_dynrelocs): Likewise.
+
+2011-04-21  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf32-i386.c (elf_i386_finish_dynamic_symbol): Return false
+	on dynamic symbol error.
+	* elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Likewise.
+
+2011-04-20  Tristan Gingold  <gingold at adacore.com>
+
+	* config.bfd (alpha*-*-*vms*, ia64*-*-*vms*): Define targ_selvecs.
+
+2011-04-20  Alan Modra  <amodra at gmail.com>
+
+	* hash.c (bfd_default_hash_table_size): Make it an unsigned long.
+	(bfd_hash_table_init_n): Overflow checking.
+	(bfd_hash_set_default_size): Return current size.  Take unsigned long
+	arg.  Add 65537 to hash_size primes.
+	* bfd-in.h (bfd_hash_set_default_size): Update prototype.
+	* bfd-in2.h: Regenerate.
+
+2011-04-20  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* elf-bfd.h (RELOC_AGAINST_DISCARDED_SECTION): Fix +1 overrun of
+	memmove elements.
+
+2011-04-20  Alan Modra  <amodra at gmail.com>
+
+	* libbfd.c (bfd_log2): Do return rounded up value.
+	* elflink.c (bfd_elf_size_dynsym_hash_dynstr): Replace bfd_log2
+	call with expanded old round down version of the function.
+
+	* archive.c (_bfd_get_elt_at_filepos): Don't release n_nfd.
+	* elflink.c (elf_link_add_object_symbols): Delete redundant code.
+
+2011-04-20  Alan Modra  <amodra at gmail.com>
+
+	PR ld/12365
+	* elfcode.h (elf_slurp_symbol_table): Put common plugin IR symbols
+	in their own common section.
+	* elflink.c (elf_link_add_object_symbols): Likewise.
+	* linker.c (generic_link_check_archive_element): Don't lose flags
+	if common section is pre-existing.
+	(_bfd_generic_link_add_one_symbol): Likewise.
+
+2011-04-20  Alan Modra  <amodra at gmail.com>
+
+	PR ld/12365
+	* elflink.c (_bfd_elf_merge_symbol): Update multiple_common calls.
+	* linker.c (_bfd_generic_link_add_one_symbol): Likewise.  Call
+	multiple_definition regardless of allow_multiple_definition.
+	* simple.c (simple_dummy_multiple_definition): Update.
+	* xcofflink.c (xcoff_link_add_symbols): Update multiple_definition
+	calls.
+
+2011-04-18  Tristan Gingold  <gingold at adacore.com>
+
+	* coff-rs6000.c: Convert to ISO-C.  Remove PARAMS macro.
+
+2011-04-18  Alan Modra  <amodra at gmail.com>
+
+	PR ld/12365
+	PR ld/12672
+	* bfd.c (BFD_PLUGIN): Define.
+	(BFD_FLAGS_SAVED, BFD_FLAGS_FOR_BFD_USE_MASK): Add BFD_PLUGIN.
+	* bfd-in2.h: Regenerate.
+	* elflink.c (elf_link_output_extsym): Strip undefined plugin syms.
+	* opncls.c (bfd_make_readable): Don't lose original bfd flags.
+
+2011-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Do not check for
+	SEC_LOAD.
+
+2011-04-15  Sergio Durigan Junior  <sergiodj at redhat.com>
+
+	* elf-bfd.h (struct sdt_note): New struct.
+	(struct elf_obj_tdata) <sdt_note_head>: New field.
+	* elf.c (elfobj_grok_stapsdt_note_1): New function.
+	(elfobj_grok_stapsdt_note): Likewise.
+	(elf_parse_notes): Added code to treat SystemTap note
+	sections.
+
+2011-04-12  Richard Henderson  <rth at redhat.com>
+
+	* elf64-alpha.c (elf64_alpha_size_dynamic_sections): Do not
+	exclude empty .got sections.
+
+2011-04-11  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf32-i386.c (elf_i386_reloc_type_lookup): Fix the out of bound
+	array access for BFD_RELOC_386_IRELATIVE.
+
+2011-04-11  Bernd Schmidt  <bernds at codesourcery.com>
+
+	* elf32-tic6x.c (elf32_tic6x_check_relocs): Initialize pc_count field.
+
+2011-04-11  Mark Wielaard  <mjw at redhat.com>
+
+	PR 10549
+	* elf-bfd.h (has_ifunc_symbols): Renamed to has_gnu_symbols.
+	(has_gnu_symbols): Renamed from has_ifunc_symbols.
+	* elf.c (_bfd_elf_set_osabi): Use new has_gnu_symbols name.
+	* elf32-arm.c (elf32_arm_add_symbol_hook): Set has_gnu_symbols
+	also if STB_GNU_UNIQUE symbol binding was seen.
+	* elf32-i386.c (elf_i386_add_symbol_hook): Likewise.
+	* elf32-ppc.c (ppc_elf_add_symbol_hook): Likewise.
+	* elf32-sparc.c (elf32_sparc_add_symbol_hook): Likewise.
+	* elf64-ppc.c (ppc64_elf_add_symbol_hook): Likewise.
+	* elf64-sparc.c (elf64_sparc_add_symbol_hook): Likewise.
+	* elf64-x86-64.c (elf_x86_64_add_symbol_hook): Likewise.
+
+2011-04-11  Alan Modra  <amodra at gmail.com>
+
+	* bfd-in.h (bfd_get_section_limit): Don't use rawsize with output
+	sections.
+	* libbfd.c (_bfd_generic_get_section_contents): Likewise.
+	(_bfd_generic_get_section_contents_in_window): Likewise.
+	* section.c (bfd_get_section_contents): Likewise.
+	* compress.c (bfd_get_full_section_contents): Likewise.
+	* elf32-rx.c (rx_final_link): Ignore rawsize.
+	* elf32-microblaze.c (microblaze_elf_relocate_section): Use correct
+	bfd with bfd_get_section_limit.
+	* elfxx-ia64.c (elfNN_ia64_choose_gp): Add "final" parameter.  Use
+	os->size during final link.  Update callers.
+	* bfd-in2.h: Regenerate.
+
+2011-04-10  Richard Sandiford  <rdsandiford at googlemail.com>
+
+	PR ld/12637
+	* elfxx-mips.c (mips_elf_merge_got_with): Use arg->global_count
+	as the number of global entries when merging with the primary GOT.
+
+2011-04-09  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf32-i386.c: Update copyright year.
+	* elf64-x86-64.c: Likewise.
+
+2011-04-09  Kai Tietz  <ktietz at redhat.com>
+
+	* peXXigen.c (_bfd_XXi_final_link_postscripte): Sort pdata in temporary
+	buffer and use rawsize for sorting.
+	* coffcode.h (coff_compute_section_file_positions): Set rawsize
+	before doing alignment.
+
+2011-04-09  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf32-i386.c (elf_i386_relocate_section): Return relocation
+	error on unsupported relocation.
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
+
+2011-04-09  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR binutils/12657
+	* hosts/x86-64linux.h (elf_prstatus32): Replace __pid_t with
+	pid_t.
+
+2011-04-08  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/12654
+	* elf32-i386.c (elf_i386_relocate_section): Check !executable
+	instead of shared for R_386_TLS_LDO_32.
+
+2011-04-08  Tristan Gingold  <gingold at adacore.com>
+
+	* Makefile.am (SOURCE_HFILES): Remove xcoff-target.h
+	* coff-pmac: Remove
+	* xcoff-target.h: Remove
+	* Makefile.in: Regenerate.
+
+2011-04-07  Cary Coutant  <ccoutant at google.com>
+
+	* dwarf2.c (scan_unit_for_symbols): Check for DW_AT_specification.
+
+2011-04-07  Paul Brook  <paul at codesourcery.com>
+
+	* elf32-tic6x.c (elf32_tic6x_howto_table): R_C6000_PREL31 is
+	pc-relative.
+	(elf32_tic6x_howto_table_rel): Ditto.
+	(elf32_tic6x_relocate_section): Implement R_C6000_PREL31.
+	(elf32_tic6x_check_relocs): Ditto.
+
+2011-04-06  Joseph Myers  <joseph at codesourcery.com>
+
+	* config.bfd (thumb-*-oabi): Don't handle in list of obsolete
+	targets.
+	(strongarm*, thumb*, xscale*): Remove architectures.
+	(strongarm-*-kaos*, thumb-*-coff, thumb-*-elf, thumb-epoc-pe*,
+	thumb-*-pe*, strongarm-*-elf, strongarm-*-coff, xscale-*-elf,
+	xscale-*-coff): Remove targets.
+
+2011-04-01  Tristan Gingold  <gingold at adacore.com>
+
+	* elfxx-ia64.c: include bfd_stdint.h
+
+2011-03-31  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* elf32-tic6x.c (elf32_tic6x_relocate_section): Remove unused variable
+	dynobj and its initialization.
+
+2011-03-31  Tristan Gingold  <gingold at adacore.com>
+
+	* makefile.vms (DEFS): Add HAVE_bfd_elf64_ia64_vms_vec.
+	* configure.com: Set BFD_HOST_64BIT_LONG_LONG and
+	BFD_HOST_LONG_LONG to 1.
+
+2011-03-31  Tristan Gingold  <gingold at adacore.com>
+
+	* vms-alpha.c (vms_get_remaining_object_record): Fix dec-c warning.
+	(_bfd_vms_write_etir): Ditto.
+	(_bfd_vms_slurp_etir): Avoid to use intptr_t
+	* configure.com: Generate bfd_stdint.h
+
+2011-03-31  Bernd Schmidt  <bernds at codesourcery.com>
+
+	* elf32-tic6x.h (struct elf32_tic6x_params): New.
+	(elf32_tic6x_setup): Declare.
+	* elf32-tic6x.c: Include <limits.h>.
+	(ELF_DYNAMIC_LINKER, DEFAULT_STACK_SIZE, PLT_ENTRY_SIZE): Define.
+	(struct elf32_tic6x_link_hash_table, struct elf32_link_hash_entry):
+	New structures.
+	(elf32_tic6x_link_hash_table, is_tic6x_elf): New macros.
+	(tic6x_elf_scom_section, tic6x_elf_scom_symbol,
+	tic6x_elf_scom_symbol_ptr): New static variables.
+	(elf32_tic6x_howto_table, elf32_tic6x_howto_table_rel,
+	elf32_tic6x_reloc_map): Add R_C6000_JUMP_SLOT, R_C6000_EHTYPE,
+	R_C6000_PCR_H16 and R_C6000_PCR_L16.
+	(elf32_tic6x_link_hash_newfunc, elf32_tic6x_link_hash_table_create,
+	elf32_tic6x_link_hash_table_free, elf32_tic6x_setup,
+	elf32_tic6x_using_dsbt, elf32_tic6x_install_rela,
+	elf32_tic6x_create_dynamic_sections, elf32_tic6x_make_got_dynreloc,
+	elf32_tic6x_finish_dynamic_symbol, elf32_tic6x_gc_sweep_hook,
+	elf32_tic6x_adjust_dynamic_symbol): New static functions.
+	(elf32_tic6x_relocate_section): For R_C6000_PCR_S21, convert branches
+	to weak symbols as required by the ABI.
+	Handle GOT and DSBT_INDEX relocs, and copy relocs to the output file
+	as needed when generating DSBT output.
+	(elf32_tic6x_check_relocs, elf32_tic6x_add_symbol_hook,
+	elf32_tic6x_symbol_processing, elf32_tic6x_section_from_bfd_section,
+	elf32_tic6x_allocate_dynrelocs, elf32_tic6x_size_dynamic_sections,
+	elf32_tic6x_always_size_sections, elf32_tic6x_modify_program_headers,
+	elf32_tic6x_finish_dynamic_sections, elf32_tic6x_plt_sym_val,
+	elf32_tic6x_copy_private_data, elf32_tic6x_link_omit_section_dynsym):
+	New static functions.
+	(ELF_MAXPAGESIZE): Define to 0x1000.
+	(bfd_elf32_bfd_copy_private_bfd_data,
+	bfd_elf32_bfd_link_hash_table_create,
+	bfd_elf32_bfd_link_hash_table_free, elf_backend_can_refcount,
+	elf_backend_want_got_plt, elf_backend_want_dynbss,
+	elf_backend_plt_readonly, elf_backend_got_header_size,
+	elf_backend_gc_sweep_hook, elf_backend_modify_program_headers,
+	elf_backend_create_dynamic_sections, elf_backend_adjust_dynamic_symbol,
+	elf_backend_check_relocs, elf_backend_add_symbol_hook,
+	elf_backend_symbol_processing, elf_backend_link_output_symbol_hook,
+	elf_backend_section_from_bfd_section,
+	elf_backend_finish_dynamic_symbol, elf_backend_always_size_sections,
+	elf32_tic6x_size_dynamic_sections, elf_backend_finish_dynamic_sections,
+	elf_backend_omit_section_dynsym, elf_backend_plt_sym_val): Define.
+
+	* bfd/reloc.c (BFD_RELOC_C6000_JUMP_SLOT, BFD_RELOC_C6000_EHTYPE,
+	BFD_RELOC_C6000_PCR_H16, BFD_RELOC_C6000_PCR_S16): Add.
+	* bfd/bfd-in2.h: Regenerate.
+	* bfd/libbfd.h: Regenerate.
+	* config.bfd: Accept tic6x-*-* instead of tic6x-*-elf.
+
+2011-03-31  Tristan Gingold  <gingold at adacore.com>
+
+	* coffcode.h (coff_slurp_symbol_table): Silently discard C_NULL
+	entry on xcoff when value is C_NULL_VALUE.
+
+2011-03-31  Tristan Gingold  <gingold at adacore.com>
+
+	* libcoff-in.h (exec_hdr): Remove.
+	* libcoff.h: Regenerate.
+
+2011-03-30  Nick Clifton  <nickc at redhat.com>
+
+	* po/da.po: Updated Danish translation.
+
+2011-03-29  Richard Henderson  <rth at redhat.com>
+
+	* elf64-alpha.c (elf64_alpha_gc_mark_hook): New.
+	(elf64_alpha_gc_sweep_hook): New.
+	(elf_backend_gc_mark_hook, elf_backend_gc_sweep_hook): New.
+	(elf_backend_can_gc_sections): New.
+
+2011-03-26  John Marino  <binutils at marino.st>
+
+	* config.bfd: Add x86_64-*-dragonfly*, fix i386-*-dragonfly*.
+	* configure.in: Delete unused bfd_elf32_i386_dragonfly_vec.
+	* configure: Regenerate.
+
+2011-03-25  Michael Snyder  <msnyder at vmware.com>
+
+	* coffcode.h (coff_set_alignment_hook): Check return of bfd_seek.
+
+2011-03-25  Tristan Gingold  <gingold at adacore.com>
+
+	* vms-alpha.c (_bfd_vms_find_nearest_dst_line): Allow the use
+	of find_nearest_line on object files.
+
+2011-03-25  Tristan Gingold  <gingold at adacore.com>
+
+	* vms-alpha.c (evax_section_flags): Make $CODE$ section read-only.
+	Minor reordering.
+	(alpha_vms_create_eisd_for_section): Make code sections read-only.
+
+2011-03-24  Alan Modra  <amodra at gmail.com>
+
+	* elf32-ppc.c (ppc_elf_tls_optimize): Catch more cases where
+	old-style __tls_get_addr calls without marker relocs don't match
+	their arg setup insn one for one.  If such mismatches are found
+	report the reloc and don't do any tls optimization.
+	* elf64-ppc.c (ppc64_elf_tls_optimize): Likewise.
+
+2011-03-22  Eric B. Weddington  <eric.weddington at atmel.com>
+
+	* bfd-in2.h: Regenerate.
+
+2011-03-22  Eric B. Weddington  <eric.weddington at atmel.com>
+
+	* archures.c: Add AVR XMEGA architecture information.
+	* cpu-avr.c (arch_info_struct): Likewise.
+	* elf32-avr.c (bfd_elf_avr_final_write_processing): Likewise.
+	(elf32_avr_object_p): Likewise.
+
+2011-03-14  Richard Sandiford  <richard.sandiford at linaro.org>
+
+	* reloc.c (BFD_RELOC_ARM_IRELATIVE): New relocation.
+	* bfd-in2.h: Regenerate.
+	* elf32-arm.c (elf32_arm_howto_table_2): Rename existing definition
+	to elf32_arm_howto_table_3 and replace with a single R_ARM_IRELATIVE
+	entry.
+	(elf32_arm_howto_from_type): Update accordingly.
+	(elf32_arm_reloc_map): Map BFD_RELOC_ARM_IRELATIVE to R_ARM_IRELATIVE.
+	(elf32_arm_reloc_name_lookup): Handle elf32_arm_howto_table_3.
+	(arm_plt_info): New structure, split out from elf32_arm_link_hash_entry
+	with an extra noncall_refcount field.
+	(arm_local_iplt_info): New structure.
+	(elf_arm_obj_tdata): Add local_iplt.
+	(elf32_arm_local_iplt): New accessor macro.
+	(elf32_arm_link_hash_entry): Replace plt_thumb_refcount,
+	plt_maybe_thumb_refcount and plt_got_offset with an arm_plt_info.
+	Change tls_type to a bitfield and add is_iplt.
+	(elf32_arm_link_hash_newfunc): Update accordingly.
+	(elf32_arm_allocate_local_sym_info): New function.
+	(elf32_arm_create_local_iplt): Likewise.
+	(elf32_arm_get_plt_info): Likewise.
+	(elf32_arm_plt_needs_thumb_stub_p): Likewise.
+	(elf32_arm_get_local_dynreloc_list): Likewise.
+	(create_ifunc_sections): Likewise.
+	(elf32_arm_copy_indirect_symbol): Update after the changes to
+	elf32_arm_link_hash_entry.  Assert the is_iplt has not yet been set.
+	(arm_type_of_stub): Add an st_type argument.  Use elf32_arm_get_plt_info
+	to get PLT information.  Assert that all STT_GNU_IFUNC references
+	are turned into PLT references.
+	(arm_build_one_stub): Pass the symbol type to
+	elf32_arm_final_link_relocate.
+	(elf32_arm_size_stubs): Pass the symbol type to arm_type_of_stub.
+	(elf32_arm_allocate_irelocs): New function.
+	(elf32_arm_add_dynreloc): In static objects, use .rel.iplt for
+	all R_ARM_IRELATIVE.
+	(elf32_arm_allocate_plt_entry): New function.
+	(elf32_arm_populate_plt_entry): Likewise.
+	(elf32_arm_final_link_relocate): Add an st_type parameter.
+	Set srelgot to null for static objects.  Use separate variables
+	to record which st_value and st_type should be used when generating
+	a dynamic relocation.  Use elf32_arm_get_plt_info to find the
+	symbol's PLT information, setting has_iplt_entry, splt,
+	plt_offset and gotplt_offset accordingly.  Check whether
+	STT_GNU_IFUNC symbols should resolve to an .iplt entry, and change
+	the relocation target accordingly.  Broaden assert to include
+	.iplts.  Don't set sreloc for static relocations.  Assert that
+	we only generate dynamic R_ARM_RELATIVE relocations for R_ARM_ABS32
+	and R_ARM_ABS32_NOI.  Generate R_ARM_IRELATIVE relocations instead
+	of R_ARM_RELATIVE relocations if the target is an STT_GNU_IFUNC
+	symbol.  Pass the symbol type to arm_type_of_stub.  Conditionally
+	resolve GOT references to the .igot.plt entry.
+	(elf32_arm_relocate_section): Update the call to
+	elf32_arm_final_link_relocate.
+	(elf32_arm_gc_sweep_hook): Use elf32_arm_get_plt_info to get PLT
+	information.  Treat R_ARM_REL32 and R_ARM_REL32_NOI as call
+	relocations in shared libraries and relocatable executables.
+	Count non-call PLT references.  Use elf32_arm_get_local_dynreloc_list
+	to get the list of dynamic relocations for a local symbol.
+	(elf32_arm_check_relocs): Always create ifunc sections.  Set isym
+	at the same time as setting h.  Use elf32_arm_allocate_local_sym_info
+	to allocate local symbol information.  Treat R_ARM_REL32 and
+	R_ARM_REL32_NOI as call relocations in shared libraries and
+	relocatable executables.  Record PLT information for local
+	STT_GNU_IFUNC functions as well as global functions.   Count
+	non-call PLT references.  Use elf32_arm_get_local_dynreloc_list
+	to get the list of dynamic relocations for a local symbol.
+	(elf32_arm_adjust_dynamic_symbol): Handle STT_GNU_IFUNC symbols.
+	Don't remove STT_GNU_IFUNC PLTs unless all references have been
+	removed.  Update after the changes to elf32_arm_link_hash_entry.
+	(allocate_dynrelocs_for_symbol): Decide whether STT_GNU_IFUNC PLT
+	entries should live in .plt or .iplt.  Check whether the .igot.plt
+	and .got entries can be combined.  Use elf32_arm_allocate_plt_entry
+	to allocate .plt and .(i)got.plt entries.  Detect which .got
+	entries will need R_ARM_IRELATIVE relocations and use
+	elf32_arm_allocate_irelocs to allocate them.  Likewise other
+	non-.got dynamic relocations.
+	(elf32_arm_size_dynamic_sections): Allocate .iplt, .igot.plt
+	and dynamic relocations for local STT_GNU_IFUNC symbols.
+	Check whether the .igot.plt and .got entries can be combined.
+	Detect which .got entries will need R_ARM_IRELATIVE relocations
+	and use elf32_arm_allocate_irelocs to allocate them.  Use stashed
+	section pointers intead of strcmp checks.  Handle iplt and igotplt.
+	(elf32_arm_finish_dynamic_symbol): Use elf32_arm_populate_plt_entry
+	to fill in .plt, .got.plt and .rel(a).plt entries.  Point
+	STT_GNU_IFUNC symbols at an .iplt entry if non-call relocations
+	resolve to it.
+	(elf32_arm_output_plt_map_1): New function, split out from
+	elf32_arm_output_plt_map.  Handle .iplt entries.  Use
+	elf32_arm_plt_needs_thumb_stub_p.
+	(elf32_arm_output_plt_map): Call it.
+	(elf32_arm_output_arch_local_syms): Add mapping symbols for
+	local .iplt entries.
+	(elf32_arm_swap_symbol_in): Handle Thumb STT_GNU_IFUNC symbols.
+	(elf32_arm_swap_symbol_out): Likewise.
+	(elf32_arm_add_symbol_hook): New function.
+	(elf_backend_add_symbol_hook): Define for all targets.
+
+2011-03-14  Richard Sandiford  <richard.sandiford at linaro.org>
+
+	* elf-bfd.h (elf_link_hash_entry): Add target_internal.
+	* elf.c (swap_out_syms): Set st_target_internal for each
+	Elf_Internal_Sym.
+	* elfcode.h (elf_swap_symbol_in): Likewise.
+	* elf32-i370.c (i370_elf_finish_dynamic_sections): Likewise.
+	* elf32-sh-symbian.c (sh_symbian_relocate_section): Likewise.
+	* elf64-sparc.c (elf64_sparc_output_arch_syms): Likewise.
+	* elfxx-sparc.c (_bfd_sparc_elf_size_dynamic_sections): Likewise.
+	* elflink.c (elf_link_output_extsym): Likewise.
+	(bfd_elf_final_link): Likewise.
+	(elf_link_add_object_symbols): Copy st_target_internal
+	to the hash table if we see a definition.
+	(_bfd_elf_copy_link_hash_symbol_type): Copy target_internal.
+	* elf32-arm.c (elf32_arm_stub_hash_entry): Replace st_type with
+	a branch_type field.
+	(a8_erratum_fix, a8_erratum_reloc): Likewise.
+	(arm_type_of_stub): Replace actual_st_type with an
+	actual_branch_type parameter.
+	(arm_build_one_stub): Use branch types rather than st_types to
+	determine the type of branch.
+	(cortex_a8_erratum_scan): Likewise.
+	(elf32_arm_size_stubs): Likewise.
+	(bfd_elf32_arm_process_before_allocation): Likewise.
+	(allocate_dynrelocs_for_symbol): Likewise.
+	(elf32_arm_finish_dynamic_sections): Likewise.
+	(elf32_arm_final_link_relocate): Replace sym_flags parameter with
+	a branch_type parameter.
+	(elf32_arm_relocate_section): Update call accordingly.
+	(elf32_arm_adjust_dynamic_symbol): Don't check STT_ARM_TFUNC.
+	(elf32_arm_output_map_sym): Initialize st_target_internal.
+	(elf32_arm_output_stub_sym): Likewise.
+	(elf32_arm_symbol_processing): Delete.
+	(elf32_arm_swap_symbol_in): Convert STT_ARM_TFUNCs into STT_FUNCs.
+	Use st_target_internal to record the branch type.
+	(elf32_arm_swap_symbol_out): Use st_target_internal to test for
+	Thumb functions.
+	(elf32_arm_is_function_type): Delete.
+	(elf_backend_symbol_processing): Likewise.
+	(elf_backend_is_function_type): Likewise.
+
+2011-03-14  Richard Sandiford  <richard.sandiford at linaro.org>
+
+	* elf32-arm.c (elf32_arm_check_relocs): Always assign a dynobj.
+	(elf32_arm_finish_dynamic_sections): Move sgot != NULL assertion
+	into the PLT block.
+
+2011-03-14  Richard Sandiford  <richard.sandiford at linaro.org>
+
+	* elf32-arm.c (elf32_arm_check_relocs): Use call_reloc_p,
+	may_need_local_target_p and may_become_dynamic_p to classify
+	the relocation type.  Don't check info->symbolic or h->def_regular
+	when deciding whether to record a potential dynamic reloc.
+	Don't treat potential dynamic relocs as PLT references.
+	(elf32_arm_gc_sweep_hook): Update to match.  Assert that we don't
+	try to make the PLT reference count go negative.
+
+2011-03-14  Richard Sandiford  <richard.sandiford at linaro.org>
+
+	* elf32-arm.c (elf32_arm_final_link_relocate): Always fill in the
+	GOT entry here, rather than leaving it to finish_dynamic_symbol.
+	Only create a dynamic relocation for local references if
+	info->shared.
+	(allocate_dynrelocs_for_symbol): Update dynamic relocation
+	allocation accordingly.
+	(elf32_arm_finish_dynamic_symbol): Don't initialise the GOT entry here.
+
+2011-03-14  Richard Sandiford  <richard.sandiford at linaro.org>
+
+	* elf32-arm.c (elf32_arm_allocate_dynrelocs): New function.
+	(elf32_arm_add_dynreloc): Likewise.
+	(elf32_arm_adjust_dynamic_symbol): Use elf32_arm_allocate_dynrelocs
+	to allocate dynamic relocations.
+	(elf32_arm_size_dynamic_sections): Likewise.
+	(allocate_dynrelocs): Likewise.  Rename to
+	allocate_dynrelocs_for_symbol.
+	(elf32_arm_final_link_relocate): Use elf32_arm_add_dynreloc to
+	create dynamic relocations.
+	(elf32_arm_finish_dynamic_symbol): Likewise.
+
+2011-03-12  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf64-x86-64.c (elf_x86_64_check_tls_transition): Supprt TLS
+	x32 GD->IE and GD->LE transitions.
+	(elf_x86_64_relocate_section): Supprt TLS x32 GD->IE, GD->LE
+	and LD->LE transitions.
+
+2011-03-10  Alan Modra  <amodra at gmail.com>
+
+	* elf64-ppc.c (ppc64_elf_relocate_section): Provide section/offset
+	for LO_DS error message and correct multiple.
+
+2011-03-10  Alan Modra  <amodra at gmail.com>
+
+	* elf64-ppc.c (bfd_elf64_bfd_link_just_syms): Define.
+	(ppc64_elf_link_just_syms): New function.
+	(opd_entry_value): Don't assume big-endian host.
+	(get_r2off): New function.
+	(ppc_build_one_stub, ppc_size_one_stub): Use it here.
+
+2011-03-06  Michael Snyder  <msnyder at vmware.com>
+
+	* compress.c (bfd_compress_section_contents): Check for out of mem.
+
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Document
+	that case statement falls through intentionally.
+
+	* elf32-i386.c (elf_i386_relocate_section): Document fall through.
+
+2011-03-04  Alan Modra  <amodra at gmail.com>
+
+	* archive.c (bsd_write_armap): Don't call stat in deterministic
+	mode, and don't use st_mtime if stat returns error.
+
+2011-03-03  Michael Snyder  <msnyder at vmware.com>
+
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Remove dead code.
+
+	* coff-x86_64.c (coff_amd64_rtype_to_howto): Fencepost error.
+
+	* aoutx.h (aout_final_link): Use sizeof int not sizeof int*.
+	(aout_link_write_other_symbol): Missing break statement.
+
+	* dwarf2.c (scan_unit_for_symbols): Stop memory leak.
+
+	* archive.c (_bfd_slurp_extended_name_table): Fail if bfd_seek fails.
+
+2011-03-03  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf64-x86-64.c (elf_x86_64_check_tls_transition): Supprt TLS
+	x32 IE->LE transition.
+	(elf_x86_64_relocate_section): Likewise.
+
+2011-03-02  Bernd Schmidt  <bernds at codesourcery.com>
+
+	* elflink.c (is_reloc_section): Remove function.
+	(get_dynamic_reloc_section_name): Construct string manually.
+
+2011-02-28  Kai Tietz  <kai.tietz at onevision.com>
+
+	* archive.c (_bfd_find_nested_archive): Use filename_(n)cmp.
+	(adjust_relative_path): Likewise.
+	(_bfd_construct_extended_name_table): Likewise.
+	* corefile.c (generic_core_file_matches_executable_p): Likewise.
+	* elf32-bfin.c (bfinfdpic_relocate_section): Likewise.
+	* elf32-frv.c (elf32_frv_relocate_section): Likewise.
+	* elf32-spu.c (sort_bfds): Likewise.
+	(spu_elf_auto_overlay): Likewise.
+	* syms.c (_bfd_stab_section_find_nearest_line): Likewise.
+	* xcofflink.c (xcoff_set_import_path): Likewise.
+	* xtensa-isa.c (xtensa_regfile_lookup): Likewise.
+	(xtensa_regfile_lookup_shortname): Likewise.
+
+2011-02-28  Alan Modra  <amodra at gmail.com>
+
+	PR 12513
+	* archive.c (bfd_slurp_bsd_armap_f2): Sanity check parsed_size and
+	stringsize.  Properly sanity check symdef_count.  Remove redundant
+	bfd_release.
+
+2011-02-25  Rafael Ávila de Espíndola <respindola at mozilla.com>
+
+	* plugin.c (bfd_plugin_object_p): Correctly set the filesize
+	and handle claim_file seeking. Only try to load the plugin once.
+
+2011-02-22  Andreas Schwab  <schwab at redhat.com>
+
+	* elf32-m68k.c (elf_m68k_finish_dynamic_symbol): For a TLS_GD
+	relocation read the value from the second GOT slot.
+
+2011-02-15  Tristan Gingold  <gingold at adacore.com>
+
+	* vms-alpha.c (alpha_vms_link_add_archive_symbols): Add a comment.
+
+2011-02-15  Alan Modra  <amodra at gmail.com>
+
+	* elf64-ppc.c (ppc64_elf_edit_toc): Reinstate second read of
+	toc relocs.  Fuss over free(NULL).
+
+2011-02-14  Mike Frysinger  <vapier at gentoo.org>
+
+	* elflink.c (bfd_elf_size_dynamic_sections): Add
+	bfd_get_symbol_leading_char to the start of newname.
+
+2011-02-13  Ralf Wildenhues  <Ralf.Wildenhues at gmx.de>
+
+	* configure: Regenerate.
+
+2011-02-09  Alan Modra  <amodra at gmail.com>
+
+	* elf64-ppc.c (ppc64_elf_edit_toc): Don't free toc relocs until
+	we are done.  When optimising large toc, check that a global
+	symbol on a toc reloc is defined in a kept section.
+
+2011-02-08  Nick Clifton  <nickc at redhat.com>
+
+	PR binutils/12467
+	* elf.c (assign_file_positions_for_load_sections): Set the program
+	header offset and entry size to zero if there are no program
+	headers.
+
+2011-02-08  Alan Modra  <amodra at gmail.com>
+
+	* elf64-ppc.c (ppc64_elf_edit_toc): Don't segfault on NULL
+	local_syms when looking for local symbols in .toc.
+
+2011-02-01  Alan Modra  <amodra at gmail.com>
+
+	* elf64-ppc.c (ppc64_elf_next_input_section): Use elf_gp value
+	for toc pointer on any section having makes_toc_func_call set.
+	(check_pasted_section): Ensure pasted .init/.fini fragments use
+	the same toc if any has makes_toc_func_call set.
+
+2011-01-28  Joseph Myers  <joseph at codesourcery.com>
+
+	* elf32-ppc.c (ppc_elf_link_hash_newfunc): Initialize has_sda_refs
+	field.
+
+2011-01-22  Richard Sandiford  <rdsandiford at googlemail.com>
+
+	* elfxx-mips.c (_bfd_mips_elf_merge_private_bfd_data): Ignore
+	common sections too.
+
+2011-01-18  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf64-x86-64.c (elf_backend_want_plt_sym): Redefine to 0 after
+	Solaris target.
+
+2011-01-18  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	Fix compilation for mingw64.
+	* coffcode.h (coff_slurp_symbol_table): Add intptr_t intermediate
+	typecast to avoid warning.
+	* elf32-rx.c: Add "bfd_stdint.h" include required for int32_t type
+	usage.
+	* elfxx-ia64.c (elfNN_ia64_relax_br): Use intptr_t typeacast instead
+	of long for pointer to avoid warning.
+	(elfNN_ia64_relax_brl): Idem.
+	(elfNN_ia64_install_value): Idem.
+	* vms-alpha.c (_bfd_vms_slurp_etir): Idem.
+
+2011-01-17  Richard Sandiford  <richard.sandiford at linaro.org>
+
+	* elf32-arm.c (elf32_arm_check_relocs): Check needs_plt rather than
+	h->needs_plt when deciding whether to record a possible dynamic reloc.
+
+2011-01-17  Richard Sandiford  <richard.sandiford at linaro.org>
+
+	* elf32-arm.c (elf32_arm_gc_sweep_hook): Remove all registered
+	dynamic relocs for the removed section.
+
+2011-01-15  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf64-x86-64.c (elf_x86_64_check_relocs): Check invalid x32
+	relocations.
+
+2011-01-14  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf64-x86-64.c (elf_x86_64_link_hash_table): Add pointer_r_type.
+	(elf_x86_64_link_hash_table_create): Set pointer_r_type.
+	(elf_x86_64_check_relocs): Handle R_X86_64_32 like R_X86_64_64
+	for ILP32.  Remove ABI_64_P PIC check for R_X86_64_8,
+	R_X86_64_16, R_X86_64_32 and R_X86_64_32S.
+	(elf_x86_64_relocate_section):  Handle R_X86_64_32 like R_X86_64_64
+	for ILP32.
+
+2011-01-14  Alan Modra  <amodra at gmail.com>
+
+	* bfd.c (bfd_perror): Flush stdout before and stderr after printing
+	error.
+	(_bfd_default_error_handler): Likewise.
+	* elf.c (print_segment_map): Likewise.
+	* libbfd.c (warn_deprecated): Likewise.
+	* som.c (som_sizeof_headers): No need to do so here.
+	* coff-i860.c: Replace use of printf for error messages with
+	_bfd_error_handler.
+	* coff-ppc.c: Likewise.
+	* coff-sh.c: Likewise.
+	* elf32-bfin.c: Likewise.
+	* elf32-dlx.c: Likewise.
+	* elf32-mep.c: Likewise.
+	* elf32-v850.c: Likewise.
+	* mach-o.c: Likewise.
+	* pef.c: Likewise.
+
+2011-01-13  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf64-x86-64.c (elf_x86_64_link_hash_table): Remove
+	swap_reloca_out.
+	(elf_x86_64_link_hash_table_create): Don't set swap_reloca_out.
+	(elf_x86_64_check_relocs): Align relocation section to 4 byte
+	for 32bit.
+	(elf_x86_64_gc_sweep_hook): Replace ELF64_ST_TYPE with
+	ELF_ST_TYPE.
+	(elf_x86_64_finish_dynamic_symbol): Updated.
+	(elf_x86_64_finish_dynamic_sections): Don't use
+	Elf64_External_Dyn, bfd_elf64_swap_dyn_in, nor
+	bfd_elf64_swap_dyn_out.
+
+2011-01-14  J. Park  <grassman at gmail.com>
+
+	PR ld/12339
+	* elf32-arm.c (allocate_dynrelocs): Don't set up eh before
+	following bfd_link_hash_warning symbol link.
+
+2011-01-10  Nathan Sidwell  <nathan at codesourcery.com>
+	    Glauber de Oliveira Costa  <glommer at gmail.com>
+
+	* reloc.c (BFD_RELOC_ARM_TLS_GOTDESC, BFD_RELOC_ARM_TLS_CALL,
+	BFD_RELOC_ARM_THM_TLS_CALL, BFD_RELOC_ARM_TLS_DESCSEQ,
+	BFD_RELOC_ARM_THM_TLS_DESCSEQ, BFD_RELOC_ARM_TLS_DESC): New
+	relocations.
+	* libbfd.h: Rebuilt.
+	* bfd-in2.h: Rebuilt.
+	* elf32-arm.c (elf32_arm_howto_table_1): Add new relocations.
+	(elf32_arm_reloc_map): Likewise.
+	(tls_trampoline, dl_tlsdesc_lazy_trampoline): New PLT templates.
+	(elf32_arm_stub_long_branch_any_tls_pic,
+	elf32_arm_stub_long_branch_v4t_thumb_tls_pic): New stub templates.
+	(DEF_STUBS): Add new stubs.
+	(struct_elf_arm_obj_data): Add local_tlsdesc_gotent field.
+	(elf32_arm_local_tlsdesc_gotent): New.
+	(GOT_TLS_GDESC): New mask.
+	(GOT_TLS_GD_ANY): Define.
+	(struct elf32_arm_link_hash_entry): Add tlsdesc_got field.
+	(elf32_arm_compute_jump_table_size): New.
+	(struct elf32_arm_link_hash_table): Add next_tls_desc_index,
+	num_tls_desc, dt_tlsdesc_plt, dt_tlsdesc_got, tls_trampoline,
+	sgotplt_jump_table_size fields.
+	(elf32_arm_link_hash_newfunc): Initialize tlsdesc_got field.
+	(elf32_arm_link_hash_table_create): Initialize new fields.
+	(arm_type_of_stub): Check TLS desc relocs too.
+	(elf32_arm_stub_name): TLS desc relocs can be shared.
+	(elf32_arm_tls_transition): Determine relaxation.
+	(arm_stub_required_alignment): Add tls stubs.
+	(elf32_arm_size_stubs): Likewise.
+	(elf32_arm_tls_relax): Perform TLS relaxing.
+	(elf32_arm_final_link_relocate): Process TLS DESC relocations.
+	(IS_ARM_TLS_GNU_RELOC): New.
+	(IS_ARM_TLS_RELOC): Use it.
+	(elf32_arm_relocate_section): Perform TLS relaxing.
+	(elf32_arm_check_relocs): Anticipate TLS relaxing, process tls
+	desc relocations.
+	(allocate_dynrelocs): Allocate tls desc relcoations.
+	(elf32_arm_output_arch_local_syms): Emit tls trampoline mapping
+	symbols.
+	(elf32_arm_size_dynamic_sections): Allocate tls trampolines and
+	got slots.
+	(elf32_arm_always_size_sections): New. Create _TLS_MODULE_BASE
+	symbol.
+	(elf32_arm_finish_dynamic_symbol): Adjust.
+	(arm_put_trampoline): New.
+	(elf32_arm_finish_dynamic_sections): Emit new dynamic tags and tls
+	trampolines.
+	(elf_backend_always_size_sections): Define.
+
+2011-01-06  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Optimized.
+
+2011-01-06  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/12366
+	PR ld/12371
+	* elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Properly
+	handle symbols marked with regular reference, but not non-GOT
+	reference when building shared library.
+
+	* elf32-i386.c (elf_i386_gc_sweep_hook): Properly handle
+	local and global STT_GNU_IFUNC symols when building shared
+	library.
+	* elf64-x86-64.c (elf_x86_64_gc_sweep_hook): Likewise.
+
+2011-01-05  DJ Delorie  <dj at redhat.com>
+
+	* reloc.c: Add BFD_RELOC_RX_OP_NEG.
+	* libbfd.h: Regenerate.
+	* bfd-in2.h: Regenerate.
+	* elf32-rx.c: Add it to the list, corresponding to R_RX_OPneg.
+
+2011-01-03  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* cpu-i386.c (bfd_i386_compatible): New.
+	(bfd_x64_32_arch_intel_syntax): Replace bfd_default_compatible
+	with bfd_i386_compatible.
+	(bfd_x86_64_arch_intel_syntax): Likewise.
+	(bfd_i386_arch_intel_syntax): Likewise.
+	(i8086_arch): Likewise.
+	(bfd_x64_32_arch): Likewise.
+	(bfd_x86_64_arch): Likewise.
+	(bfd_i386_arch): Likewise.
+
+For older changes see ChangeLog-2010
+

+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/bfd/Makefile.am b/bfd/Makefile.am
index 8f4fbee..b7271cc 100644
--- a/bfd/Makefile.am
+++ b/bfd/Makefile.am
@@ -105,6 +105,8 @@ ALL_MACHINES = \
 	cpu-m32r.lo \
 	cpu-m68hc11.lo \
 	cpu-m68hc12.lo \
+	cpu-m9s12x.lo \
+	cpu-m9s12xg.lo \
 	cpu-m68k.lo \
 	cpu-m88k.lo \
 	cpu-mcore.lo \
@@ -142,6 +144,7 @@ ALL_MACHINES = \
 	cpu-w65.lo \
 	cpu-we32k.lo \
 	cpu-xc16x.lo \
+	cpu-xgate.lo \
 	cpu-xstormy16.lo \
 	cpu-xtensa.lo \
 	cpu-z80.lo \
@@ -182,6 +185,8 @@ ALL_MACHINES_CFILES = \
 	cpu-m32r.c \
 	cpu-m68hc11.c \
 	cpu-m68hc12.c \
+	cpu-m9s12x.c \
+	cpu-m9s12xg.c \
 	cpu-m68k.c \
 	cpu-m88k.c \
 	cpu-mcore.c \
@@ -219,6 +224,7 @@ ALL_MACHINES_CFILES = \
 	cpu-w65.c \
 	cpu-we32k.c \
 	cpu-xc16x.c \
+	cpu-xgate.c \
 	cpu-xstormy16.c \
 	cpu-xtensa.c \
 	cpu-z80.c \
@@ -275,6 +281,7 @@ BFD32_BACKENDS = \
 	elf-ifunc.lo \
 	elf-m10200.lo \
 	elf-m10300.lo \
+	elf-nacl.lo \
 	elf-strtab.lo \
 	elf-vxworks.lo \
 	elf.lo \
@@ -336,6 +343,7 @@ BFD32_BACKENDS = \
 	elf32-v850.lo \
 	elf32-vax.lo \
 	elf32-xc16x.lo \
+	elf32-xgate.lo \
 	elf32-xstormy16.lo \
 	elf32-xtensa.lo \
 	elf32.lo \
@@ -461,6 +469,7 @@ BFD32_BACKENDS_CFILES = \
 	elf-ifunc.c \
 	elf-m10200.c \
 	elf-m10300.c \
+	elf-nacl.c \
 	elf-strtab.c \
 	elf-vxworks.c \
 	elf.c \
@@ -522,6 +531,7 @@ BFD32_BACKENDS_CFILES = \
 	elf32-v850.c \
 	elf32-vax.c \
 	elf32-xc16x.c \
+	elf32-xgate.c \
 	elf32-xstormy16.c \
 	elf32-xtensa.c \
 	elf32.c \
@@ -609,6 +619,7 @@ BFD64_BACKENDS = \
 	coff-x86_64.lo \
 	coff64-rs6000.lo \
 	demo64.lo \
+	elf-nacl.lo \
 	elf32-ia64.lo \
 	elf32-score.lo \
 	elf32-score7.lo \
@@ -616,6 +627,7 @@ BFD64_BACKENDS = \
 	elf64-gen.lo \
 	elf64-hppa.lo \
 	elf64-ia64.lo \
+	elf64-ia64-vms.lo \
 	elf64-mips.lo \
 	elf64-mmix.lo \
 	elf64-ppc.lo \
@@ -645,11 +657,13 @@ BFD64_BACKENDS_CFILES = \
 	coff-x86_64.c \
 	coff64-rs6000.c \
 	demo64.c \
+	elf-nacl.c \
 	elf32-score.c \
 	elf32-score7.c \
 	elf64-alpha.c \
 	elf64-gen.c \
 	elf64-hppa.c \
+	elf64-ia64-vms.c \
 	elf64-mips.c \
 	elf64-mmix.c \
 	elf64-ppc.c \
diff --git a/bfd/Makefile.in b/bfd/Makefile.in
index 437bafc..8ee6681 100644
--- a/bfd/Makefile.in
+++ b/bfd/Makefile.in
@@ -47,7 +47,8 @@ DIST_COMMON = README ChangeLog $(srcdir)/Makefile.in \
 	$(top_srcdir)/po/Make-in $(srcdir)/../depcomp \
 	$(am__bfdinclude_HEADERS_DIST)
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/../bfd/bfd.m4 \
+	$(top_srcdir)/../bfd/warning.m4 $(top_srcdir)/../config/acx.m4 \
 	$(top_srcdir)/../config/depstand.m4 \
 	$(top_srcdir)/../config/gettext-sister.m4 \
 	$(top_srcdir)/../config/largefile.m4 \
@@ -60,7 +61,6 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
 	$(top_srcdir)/../config/stdint.m4 $(top_srcdir)/../libtool.m4 \
 	$(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \
 	$(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \
-	$(top_srcdir)/bfd.m4 $(top_srcdir)/warning.m4 \
 	$(top_srcdir)/acinclude.m4 $(top_srcdir)/../config/zlib.m4 \
 	$(top_srcdir)/configure.in
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -404,6 +404,8 @@ ALL_MACHINES = \
 	cpu-m32r.lo \
 	cpu-m68hc11.lo \
 	cpu-m68hc12.lo \
+	cpu-m9s12x.lo \
+	cpu-m9s12xg.lo \
 	cpu-m68k.lo \
 	cpu-m88k.lo \
 	cpu-mcore.lo \
@@ -441,6 +443,7 @@ ALL_MACHINES = \
 	cpu-w65.lo \
 	cpu-we32k.lo \
 	cpu-xc16x.lo \
+	cpu-xgate.lo \
 	cpu-xstormy16.lo \
 	cpu-xtensa.lo \
 	cpu-z80.lo \
@@ -481,6 +484,8 @@ ALL_MACHINES_CFILES = \
 	cpu-m32r.c \
 	cpu-m68hc11.c \
 	cpu-m68hc12.c \
+	cpu-m9s12x.c \
+	cpu-m9s12xg.c \
 	cpu-m68k.c \
 	cpu-m88k.c \
 	cpu-mcore.c \
@@ -518,6 +523,7 @@ ALL_MACHINES_CFILES = \
 	cpu-w65.c \
 	cpu-we32k.c \
 	cpu-xc16x.c \
+	cpu-xgate.c \
 	cpu-xstormy16.c \
 	cpu-xtensa.c \
 	cpu-z80.c \
@@ -575,6 +581,7 @@ BFD32_BACKENDS = \
 	elf-ifunc.lo \
 	elf-m10200.lo \
 	elf-m10300.lo \
+	elf-nacl.lo \
 	elf-strtab.lo \
 	elf-vxworks.lo \
 	elf.lo \
@@ -636,6 +643,7 @@ BFD32_BACKENDS = \
 	elf32-v850.lo \
 	elf32-vax.lo \
 	elf32-xc16x.lo \
+	elf32-xgate.lo \
 	elf32-xstormy16.lo \
 	elf32-xtensa.lo \
 	elf32.lo \
@@ -761,6 +769,7 @@ BFD32_BACKENDS_CFILES = \
 	elf-ifunc.c \
 	elf-m10200.c \
 	elf-m10300.c \
+	elf-nacl.c \
 	elf-strtab.c \
 	elf-vxworks.c \
 	elf.c \
@@ -822,6 +831,7 @@ BFD32_BACKENDS_CFILES = \
 	elf32-v850.c \
 	elf32-vax.c \
 	elf32-xc16x.c \
+	elf32-xgate.c \
 	elf32-xstormy16.c \
 	elf32-xtensa.c \
 	elf32.c \
@@ -910,6 +920,7 @@ BFD64_BACKENDS = \
 	coff-x86_64.lo \
 	coff64-rs6000.lo \
 	demo64.lo \
+	elf-nacl.lo \
 	elf32-ia64.lo \
 	elf32-score.lo \
 	elf32-score7.lo \
@@ -917,6 +928,7 @@ BFD64_BACKENDS = \
 	elf64-gen.lo \
 	elf64-hppa.lo \
 	elf64-ia64.lo \
+	elf64-ia64-vms.lo \
 	elf64-mips.lo \
 	elf64-mmix.lo \
 	elf64-ppc.lo \
@@ -946,11 +958,13 @@ BFD64_BACKENDS_CFILES = \
 	coff-x86_64.c \
 	coff64-rs6000.c \
 	demo64.c \
+	elf-nacl.c \
 	elf32-score.c \
 	elf32-score7.c \
 	elf64-alpha.c \
 	elf64-gen.c \
 	elf64-hppa.c \
+	elf64-ia64-vms.c \
 	elf64-mips.c \
 	elf64-mmix.c \
 	elf64-ppc.c \
@@ -1292,6 +1306,8 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cpu-m68hc12.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cpu-m68k.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cpu-m88k.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cpu-m9s12x.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cpu-m9s12xg.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cpu-mcore.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cpu-mep.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cpu-microblaze.Plo at am__quote@
@@ -1327,6 +1343,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cpu-w65.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cpu-we32k.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cpu-xc16x.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cpu-xgate.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cpu-xstormy16.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cpu-xtensa.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cpu-z80.Plo at am__quote@
@@ -1341,6 +1358,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elf-ifunc.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elf-m10200.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elf-m10300.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elf-nacl.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elf-strtab.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elf-vxworks.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elf.Plo at am__quote@
@@ -1405,12 +1423,14 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elf32-v850.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elf32-vax.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elf32-xc16x.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elf32-xgate.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elf32-xstormy16.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elf32-xtensa.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elf32.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elf64-alpha.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elf64-gen.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elf64-hppa.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elf64-ia64-vms.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elf64-ia64.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elf64-mips.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elf64-mmix.Plo at am__quote@
diff --git a/bfd/aclocal.m4 b/bfd/aclocal.m4
index d9e743e..bf4ef1d 100644
--- a/bfd/aclocal.m4
+++ b/bfd/aclocal.m4
@@ -968,6 +968,8 @@ AC_SUBST([am__tar])
 AC_SUBST([am__untar])
 ]) # _AM_PROG_TAR
 
+m4_include([../bfd/bfd.m4])
+m4_include([../bfd/warning.m4])
 m4_include([../config/acx.m4])
 m4_include([../config/depstand.m4])
 m4_include([../config/gettext-sister.m4])
@@ -984,6 +986,4 @@ m4_include([../ltoptions.m4])
 m4_include([../ltsugar.m4])
 m4_include([../ltversion.m4])
 m4_include([../lt~obsolete.m4])
-m4_include([bfd.m4])
-m4_include([warning.m4])
 m4_include([acinclude.m4])
diff --git a/bfd/aix386-core.c b/bfd/aix386-core.c
index 121d623..947ab80 100644
--- a/bfd/aix386-core.c
+++ b/bfd/aix386-core.c
@@ -2,7 +2,7 @@
    This was based on trad-core.c, which was written by John Gilmore of
         Cygnus Support.
    Copyright 1988, 1989, 1991, 1992, 1993, 1994, 1996, 1998, 1999, 2000,
-   2001, 2002, 2004, 2005, 2006, 2007, 2010, 2011
+   2001, 2002, 2004, 2005, 2006, 2007, 2010, 2011, 2012
    Free Software Foundation, Inc.
    Written by Minh Tran-Le <TRANLE at INTELLICORP.COM>.
    Converted to back end form by Ian Lance Taylor <ian at cygnus.com>.
@@ -59,32 +59,31 @@
     (((bfd)->tdata.trad_core_data)->reg2_section)
 
 /* These are stored in the bfd's tdata.  */
-struct trad_core_struct {
+struct trad_core_struct
+{
   struct corehdr *hdr;		/* core file header */
   asection *reg_section;
   asection *reg2_section;
   asection *sections[MAX_CORE_SEGS];
 };
 
-static void swap_abort PARAMS ((void));
-
 static const bfd_target *
-aix386_core_file_p (abfd)
-     bfd *abfd;
+aix386_core_file_p (bfd *abfd)
 {
   int i, n;
   unsigned char longbuf[4];	/* Raw bytes of various header fields */
   bfd_size_type core_size = sizeof (struct corehdr);
   bfd_size_type amt;
   struct corehdr *core;
-  struct mergem {
+  struct mergem
+  {
     struct trad_core_struct coredata;
     struct corehdr internal_core;
   } *mergem;
   flagword flags;
 
   amt = sizeof (longbuf);
-  if (bfd_bread ((PTR) longbuf, amt, abfd) != amt)
+  if (bfd_bread (longbuf, amt, abfd) != amt)
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_wrong_format);
@@ -104,7 +103,7 @@ aix386_core_file_p (abfd)
 
   core = &mergem->internal_core;
 
-  if ((bfd_bread ((PTR) core, core_size, abfd)) != core_size)
+  if ((bfd_bread (core, core_size, abfd)) != core_size)
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_wrong_format);
@@ -196,15 +195,13 @@ aix386_core_file_p (abfd)
 }
 
 static char *
-aix386_core_file_failing_command (abfd)
-     bfd *abfd;
+aix386_core_file_failing_command (bfd *abfd)
 {
   return core_hdr (abfd)->cd_comm;
 }
 
 static int
-aix386_core_file_failing_signal (abfd)
-     bfd *abfd;
+aix386_core_file_failing_signal (bfd *abfd)
 {
   return core_hdr (abfd)->cd_cursig;
 }
@@ -216,7 +213,7 @@ aix386_core_file_failing_signal (abfd)
 /* If somebody calls any byte-swapping routines, shoot them.  */
 
 static void
-swap_abort ()
+swap_abort (void)
 {
   /* This way doesn't require any declaration for ANSI to fuck up.  */
   abort ();
@@ -229,7 +226,8 @@ swap_abort ()
 #define	NO_PUT64 ((void (*) (bfd_uint64_t, void *)) swap_abort)
 #define	NO_GETS64 ((bfd_int64_t (*) (const void *)) swap_abort)
 
-const bfd_target aix386_core_vec = {
+const bfd_target aix386_core_vec =
+{
   "aix386-core",
   bfd_target_unknown_flavour,
   BFD_ENDIAN_BIG,		/* target byte order */
@@ -269,5 +267,5 @@ const bfd_target aix386_core_vec = {
 
   NULL,
 
-  (PTR) 0
+  NULL
 };
diff --git a/bfd/aout-arm.c b/bfd/aout-arm.c
index fd93603..9eb9488 100644
--- a/bfd/aout-arm.c
+++ b/bfd/aout-arm.c
@@ -1,6 +1,6 @@
 /* BFD back-end for raw ARM a.out binaries.
    Copyright 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005,
-   2007, 2009, 2010, 2011 Free Software Foundation, Inc.
+   2007, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
    Contributed by Richard Earnshaw (rwe at pegasus.esprit.ec.org)
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -247,7 +247,7 @@ MY (fix_pcrel_26) (bfd *abfd,
   bfd_reloc_status_type flag = bfd_reloc_ok;
 
   /* If this is an undefined symbol, return error.  */
-  if (symbol->section == &bfd_und_section
+  if (bfd_is_und_section (symbol->section)
       && (symbol->flags & BSF_WEAK) == 0)
     return output_bfd ? bfd_reloc_ok : bfd_reloc_undefined;
 
@@ -409,10 +409,10 @@ MY_swap_std_reloc_out (bfd *abfd,
      check for that here.  */
 
   if (bfd_is_com_section (output_section)
-      || output_section == &bfd_abs_section
-      || output_section == &bfd_und_section)
+      || bfd_is_abs_section (output_section)
+      || bfd_is_und_section (output_section))
     {
-      if (bfd_abs_section.symbol == sym)
+      if (bfd_abs_section_ptr->symbol == sym)
 	{
 	  /* Whoops, looked like an abs symbol, but is really an offset
 	     from the abs section.  */
diff --git a/bfd/aout-cris.c b/bfd/aout-cris.c
index f1f3060..3e3d21a 100644
--- a/bfd/aout-cris.c
+++ b/bfd/aout-cris.c
@@ -1,5 +1,5 @@
 /* BFD backend for CRIS a.out binaries.
-   Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009
+   Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2012
    Free Software Foundation, Inc.
    Contributed by Axis Communications AB.
    Written by Hans-Peter Nilsson.
@@ -66,6 +66,7 @@
 #define MY(OP) CONCAT2 (cris_aout_,OP)
 #define NAME(x, y) CONCAT3 (cris_aout,_32_,y)
 
+#include "sysdep.h"
 #include "bfd.h"
 
 /* Version 1 of the header.  */
diff --git a/bfd/aout-ns32k.c b/bfd/aout-ns32k.c
index 9a0737d..75886bc 100644
--- a/bfd/aout-ns32k.c
+++ b/bfd/aout-ns32k.c
@@ -1,6 +1,6 @@
 /* BFD back-end for ns32k a.out-ish binaries.
    Copyright 1990, 1991, 1992, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-   2002, 2003, 2005, 2006, 2007, 2010 Free Software Foundation, Inc.
+   2002, 2003, 2005, 2006, 2007, 2010, 2012 Free Software Foundation, Inc.
    Contributed by Ian Dall (idall at eleceng.adelaide.edu.au).
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -20,6 +20,7 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include "bfd.h"
 #include "aout/aout64.h"
 #include "ns32k.h"
@@ -303,10 +304,10 @@ MY_swap_std_reloc_out (bfd *abfd,
      from the abs section, or as a symbol which has an abs value.
      Check for that here.  */
   if (bfd_is_com_section (output_section)
-      || output_section == &bfd_abs_section
-      || output_section == &bfd_und_section)
+      || bfd_is_abs_section (output_section)
+      || bfd_is_und_section (output_section))
     {
-      if (bfd_abs_section.symbol == sym)
+      if (bfd_abs_section_ptr->symbol == sym)
 	{
 	  /* Whoops, looked like an abs symbol, but is really an offset
 	     from the abs section.  */
diff --git a/bfd/aout-sparcle.c b/bfd/aout-sparcle.c
index afcc342..e050423 100644
--- a/bfd/aout-sparcle.c
+++ b/bfd/aout-sparcle.c
@@ -1,5 +1,5 @@
 /* BFD backend for sparc little-endian aout binaries.
-   Copyright 1996, 2001, 2005, 2007 Free Software Foundation, Inc.
+   Copyright 1996, 2001, 2005, 2007, 2012 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -25,6 +25,7 @@
    the tokens.  */
 #define MY(OP) CONCAT2 (sparcle_aout_,OP)
 
+#include "sysdep.h"
 #include "bfd.h"
 #include "bfdlink.h"
 #include "libaout.h"
diff --git a/bfd/aout-tic30.c b/bfd/aout-tic30.c
index 0b01177..f3b0d36 100644
--- a/bfd/aout-tic30.c
+++ b/bfd/aout-tic30.c
@@ -1,6 +1,6 @@
 /* BFD back-end for TMS320C30 a.out binaries.
    Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009,
-   2010, 2011
+   2010, 2011, 2012
    Free Software Foundation, Inc.
    Contributed by Steven Haworth (steve at pm.cse.rmit.edu.au)
 
@@ -189,7 +189,7 @@ tic30_aout_fix_16 (bfd *abfd,
   bfd_vma relocation;
 
   /* Make sure that the symbol's section is defined.  */
-  if (symbol->section == &bfd_und_section && (symbol->flags & BSF_WEAK) == 0)
+  if (bfd_is_und_section (symbol->section) && (symbol->flags & BSF_WEAK) == 0)
     return output_bfd ? bfd_reloc_ok : bfd_reloc_undefined;
   /* Get the size of the input section and turn it into the TMS320C30
      32-bit address format.  */
@@ -214,7 +214,7 @@ tic30_aout_fix_32 (bfd *abfd,
   bfd_vma relocation;
 
   /* Make sure that the symbol's section is defined.  */
-  if (symbol->section == &bfd_und_section && (symbol->flags & BSF_WEAK) == 0)
+  if (bfd_is_und_section (symbol->section) && (symbol->flags & BSF_WEAK) == 0)
     return output_bfd ? bfd_reloc_ok : bfd_reloc_undefined;
   /* Get the size of the input section and turn it into the TMS320C30
      32-bit address format.  */
diff --git a/bfd/aout0.c b/bfd/aout0.c
index e87af00..7cec377 100644
--- a/bfd/aout0.c
+++ b/bfd/aout0.c
@@ -1,5 +1,5 @@
 /* BFD backend for SunOS style a.out with flags set to 0
-   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 2001, 2005, 2007
+   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 2001, 2005, 2007, 2012
    Free Software Foundation, Inc.
    Written by Cygnus Support.
 
@@ -27,6 +27,7 @@
    the tokens.  */
 #define MY(OP) CONCAT2 (aout0_big_,OP)
 
+#include "sysdep.h"
 #include "bfd.h"
 
 #define MY_exec_hdr_flags 0
diff --git a/bfd/aoutx.h b/bfd/aoutx.h
index 1efb715..1e0ad38 100644
--- a/bfd/aoutx.h
+++ b/bfd/aoutx.h
@@ -3554,7 +3554,7 @@ static bfd_boolean
 aout_link_write_other_symbol (struct bfd_hash_entry *bh, void *data)
 {
   struct aout_link_hash_entry *h = (struct aout_link_hash_entry *) bh;
-  struct aout_final_link_info *finfo = (struct aout_final_link_info *) data;
+  struct aout_final_link_info *flaginfo = (struct aout_final_link_info *) data;
   bfd *output_bfd;
   int type;
   bfd_vma val;
@@ -3569,12 +3569,12 @@ aout_link_write_other_symbol (struct bfd_hash_entry *bh, void *data)
 	return TRUE;
     }
 
-  output_bfd = finfo->output_bfd;
+  output_bfd = flaginfo->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)))
+	     (output_bfd, flaginfo->info, h)))
 	{
 	  /* FIXME: No way to handle errors.  */
 	  abort ();
@@ -3588,9 +3588,9 @@ aout_link_write_other_symbol (struct bfd_hash_entry *bh, void *data)
 
   /* 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,
+      && (flaginfo->info->strip == strip_all
+	  || (flaginfo->info->strip == strip_some
+	      && bfd_hash_lookup (flaginfo->info->keep_hash, h->root.root.string,
 				  FALSE, FALSE) == NULL)))
     return TRUE;
 
@@ -3648,7 +3648,7 @@ aout_link_write_other_symbol (struct bfd_hash_entry *bh, void *data)
   H_PUT_8 (output_bfd, type, outsym.e_type);
   H_PUT_8 (output_bfd, 0, outsym.e_other);
   H_PUT_16 (output_bfd, 0, outsym.e_desc);
-  indx = add_to_stringtab (output_bfd, finfo->strtab, h->root.root.string,
+  indx = add_to_stringtab (output_bfd, flaginfo->strtab, h->root.root.string,
 			   FALSE);
   if (indx == - (bfd_size_type) 1)
     /* FIXME: No way to handle errors.  */
@@ -3658,12 +3658,12 @@ aout_link_write_other_symbol (struct bfd_hash_entry *bh, void *data)
   PUT_WORD (output_bfd, val, outsym.e_value);
 
   amt = EXTERNAL_NLIST_SIZE;
-  if (bfd_seek (output_bfd, finfo->symoff, SEEK_SET) != 0
+  if (bfd_seek (output_bfd, flaginfo->symoff, SEEK_SET) != 0
       || bfd_bwrite ((void *) &outsym, amt, output_bfd) != amt)
     /* FIXME: No way to handle errors.  */
     abort ();
 
-  finfo->symoff += EXTERNAL_NLIST_SIZE;
+  flaginfo->symoff += EXTERNAL_NLIST_SIZE;
   h->indx = obj_aout_external_sym_count (output_bfd);
   ++obj_aout_external_sym_count (output_bfd);
 
@@ -3673,7 +3673,7 @@ aout_link_write_other_symbol (struct bfd_hash_entry *bh, void *data)
 /* Handle a link order which is supposed to generate a reloc.  */
 
 static bfd_boolean
-aout_link_reloc_link_order (struct aout_final_link_info *finfo,
+aout_link_reloc_link_order (struct aout_final_link_info *flaginfo,
 			    asection *o,
 			    struct bfd_link_order *p)
 {
@@ -3696,7 +3696,7 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo,
 	r_index = N_ABS | N_EXT;
       else
 	{
-	  BFD_ASSERT (pr->u.section->owner == finfo->output_bfd);
+	  BFD_ASSERT (pr->u.section->owner == flaginfo->output_bfd);
 	  r_index = pr->u.section->target_index;
 	}
     }
@@ -3707,7 +3707,7 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo,
       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,
+	   bfd_wrapped_link_hash_lookup (flaginfo->output_bfd, flaginfo->info,
 					 pr->u.name, FALSE, FALSE, TRUE));
       if (h != NULL
 	  && h->indx >= 0)
@@ -3720,37 +3720,37 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo,
 	     symbol.  */
 	  h->indx = -2;
 	  h->written = FALSE;
-	  if (!aout_link_write_other_symbol (&h->root.root, finfo))
+	  if (!aout_link_write_other_symbol (&h->root.root, flaginfo))
 	    return FALSE;
 	  r_index = h->indx;
 	}
       else
 	{
-	  if (! ((*finfo->info->callbacks->unattached_reloc)
-		 (finfo->info, pr->u.name, NULL, NULL, (bfd_vma) 0)))
+	  if (! ((*flaginfo->info->callbacks->unattached_reloc)
+		 (flaginfo->info, pr->u.name, NULL, NULL, (bfd_vma) 0)))
 	    return FALSE;
 	  r_index = 0;
 	}
     }
 
-  howto = bfd_reloc_type_lookup (finfo->output_bfd, pr->reloc);
+  howto = bfd_reloc_type_lookup (flaginfo->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;
+  if (o == obj_textsec (flaginfo->output_bfd))
+    reloff_ptr = &flaginfo->treloff;
+  else if (o == obj_datasec (flaginfo->output_bfd))
+    reloff_ptr = &flaginfo->dreloff;
   else
     abort ();
 
-  if (obj_reloc_entry_size (finfo->output_bfd) == RELOC_STD_SIZE)
+  if (obj_reloc_entry_size (flaginfo->output_bfd) == RELOC_STD_SIZE)
     {
 #ifdef MY_put_reloc
-      MY_put_reloc (finfo->output_bfd, r_extern, r_index, p->offset, howto,
+      MY_put_reloc (flaginfo->output_bfd, r_extern, r_index, p->offset, howto,
 		    &srel);
 #else
       {
@@ -3766,8 +3766,8 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo,
 	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))
+	PUT_WORD (flaginfo->output_bfd, p->offset, srel.r_address);
+	if (bfd_header_big_endian (flaginfo->output_bfd))
 	  {
 	    srel.r_index[0] = r_index >> 16;
 	    srel.r_index[1] = r_index >> 8;
@@ -3813,7 +3813,7 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo,
 	  buf = (bfd_byte *) bfd_zmalloc (size);
 	  if (buf == NULL)
 	    return FALSE;
-	  r = MY_relocate_contents (howto, finfo->output_bfd,
+	  r = MY_relocate_contents (howto, flaginfo->output_bfd,
 				    (bfd_vma) pr->addend, buf);
 	  switch (r)
 	    {
@@ -3823,10 +3823,10 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo,
 	    case bfd_reloc_outofrange:
 	      abort ();
 	    case bfd_reloc_overflow:
-	      if (! ((*finfo->info->callbacks->reloc_overflow)
-		     (finfo->info, NULL,
+	      if (! ((*flaginfo->info->callbacks->reloc_overflow)
+		     (flaginfo->info, NULL,
 		      (p->type == bfd_section_reloc_link_order
-		       ? bfd_section_name (finfo->output_bfd,
+		       ? bfd_section_name (flaginfo->output_bfd,
 					   pr->u.section)
 		       : pr->u.name),
 		      howto->name, pr->addend, NULL, NULL, (bfd_vma) 0)))
@@ -3836,7 +3836,7 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo,
 		}
 	      break;
 	    }
-	  ok = bfd_set_section_contents (finfo->output_bfd, o, (void *) buf,
+	  ok = bfd_set_section_contents (flaginfo->output_bfd, o, (void *) buf,
 					 (file_ptr) p->offset, size);
 	  free (buf);
 	  if (! ok)
@@ -3846,12 +3846,12 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo,
   else
     {
 #ifdef MY_put_ext_reloc
-      MY_put_ext_reloc (finfo->output_bfd, r_extern, r_index, p->offset,
+      MY_put_ext_reloc (flaginfo->output_bfd, r_extern, r_index, p->offset,
 			howto, &erel, pr->addend);
 #else
-      PUT_WORD (finfo->output_bfd, p->offset, erel.r_address);
+      PUT_WORD (flaginfo->output_bfd, p->offset, erel.r_address);
 
-      if (bfd_header_big_endian (finfo->output_bfd))
+      if (bfd_header_big_endian (flaginfo->output_bfd))
 	{
 	  erel.r_index[0] = r_index >> 16;
 	  erel.r_index[1] = r_index >> 8;
@@ -3870,25 +3870,25 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo,
 	      | (howto->type << RELOC_EXT_BITS_TYPE_SH_LITTLE);
 	}
 
-      PUT_WORD (finfo->output_bfd, (bfd_vma) pr->addend, erel.r_addend);
+      PUT_WORD (flaginfo->output_bfd, (bfd_vma) pr->addend, erel.r_addend);
 #endif /* MY_put_ext_reloc */
 
       rel_ptr = (void *) &erel;
     }
 
-  amt = obj_reloc_entry_size (finfo->output_bfd);
-  if (bfd_seek (finfo->output_bfd, *reloff_ptr, SEEK_SET) != 0
-      || bfd_bwrite (rel_ptr, amt, finfo->output_bfd) != amt)
+  amt = obj_reloc_entry_size (flaginfo->output_bfd);
+  if (bfd_seek (flaginfo->output_bfd, *reloff_ptr, SEEK_SET) != 0
+      || bfd_bwrite (rel_ptr, amt, flaginfo->output_bfd) != amt)
     return FALSE;
 
-  *reloff_ptr += obj_reloc_entry_size (finfo->output_bfd);
+  *reloff_ptr += obj_reloc_entry_size (flaginfo->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
+  BFD_ASSERT (*reloff_ptr <= obj_sym_filepos (flaginfo->output_bfd)
+	      && (reloff_ptr != &flaginfo->treloff
 		  || (*reloff_ptr
-		      <= obj_datasec (finfo->output_bfd)->rel_filepos)));
+		      <= obj_datasec (flaginfo->output_bfd)->rel_filepos)));
 
   return TRUE;
 }
@@ -3913,7 +3913,7 @@ aout_reloc_index_to_section (bfd *abfd, int indx)
 /* Relocate an a.out section using standard a.out relocs.  */
 
 static bfd_boolean
-aout_link_input_section_std (struct aout_final_link_info *finfo,
+aout_link_input_section_std (struct aout_final_link_info *flaginfo,
 			     bfd *input_bfd,
 			     asection *input_section,
 			     struct reloc_std_external *relocs,
@@ -3934,18 +3934,18 @@ aout_link_input_section_std (struct aout_final_link_info *finfo,
   struct reloc_std_external *rel;
   struct reloc_std_external *rel_end;
 
-  output_bfd = finfo->output_bfd;
+  output_bfd = flaginfo->output_bfd;
   check_dynamic_reloc = aout_backend_info (output_bfd)->check_dynamic_reloc;
 
   BFD_ASSERT (obj_reloc_entry_size (input_bfd) == RELOC_STD_SIZE);
   BFD_ASSERT (input_bfd->xvec->header_byteorder
 	      == output_bfd->xvec->header_byteorder);
 
-  relocatable = finfo->info->relocatable;
+  relocatable = flaginfo->info->relocatable;
   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;
+  symbol_map = flaginfo->symbol_map;
 
   reloc_count = rel_size / RELOC_STD_SIZE;
   rel = relocs;
@@ -4014,7 +4014,7 @@ aout_link_input_section_std (struct aout_final_link_info *finfo,
 
       if (howto == NULL)
 	{
-	  (*finfo->info->callbacks->einfo)
+	  (*flaginfo->info->callbacks->einfo)
 	    (_("%P: %B: unexpected relocation type\n"), input_bfd);
 	  bfd_set_error (bfd_error_bad_value);
 	  return FALSE;
@@ -4079,7 +4079,7 @@ aout_link_input_section_std (struct aout_final_link_info *finfo,
 			      h->indx = -2;
 			      h->written = FALSE;
 			      if (!aout_link_write_other_symbol (&h->root.root,
-								 finfo))
+								 flaginfo))
 				return FALSE;
 			    }
 			  r_index = h->indx;
@@ -4090,8 +4090,8 @@ aout_link_input_section_std (struct aout_final_link_info *finfo,
 
 			  name = strings + GET_WORD (input_bfd,
 						     syms[r_index].e_strx);
-			  if (! ((*finfo->info->callbacks->unattached_reloc)
-				 (finfo->info, name, input_bfd, input_section,
+			  if (! ((*flaginfo->info->callbacks->unattached_reloc)
+				 (flaginfo->info, name, input_bfd, input_section,
 				  r_addr)))
 			    return FALSE;
 			  r_index = 0;
@@ -4197,7 +4197,7 @@ aout_link_input_section_std (struct aout_final_link_info *finfo,
 	      bfd_boolean skip;
 
 	      if (! ((*check_dynamic_reloc)
-		     (finfo->info, input_bfd, input_section, h,
+		     (flaginfo->info, input_bfd, input_section, h,
 		      (void *) rel, contents, &skip, &relocation)))
 		return FALSE;
 	      if (skip)
@@ -4207,7 +4207,7 @@ aout_link_input_section_std (struct aout_final_link_info *finfo,
 	  /* 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 && ! r_baserel)
+	  if (hundef && ! flaginfo->info->shared && ! r_baserel)
 	    {
 	      const char *name;
 
@@ -4215,8 +4215,8 @@ aout_link_input_section_std (struct aout_final_link_info *finfo,
 		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,
+	      if (! ((*flaginfo->info->callbacks->undefined_symbol)
+		     (flaginfo->info, name, input_bfd, input_section,
 		     r_addr, TRUE)))
 		return FALSE;
 	    }
@@ -4250,8 +4250,8 @@ aout_link_input_section_std (struct aout_final_link_info *finfo,
 		    s = aout_reloc_index_to_section (input_bfd, r_index);
 		    name = bfd_section_name (input_bfd, s);
 		  }
-		if (! ((*finfo->info->callbacks->reloc_overflow)
-		       (finfo->info, (h ? &h->root : NULL), name,
+		if (! ((*flaginfo->info->callbacks->reloc_overflow)
+		       (flaginfo->info, (h ? &h->root : NULL), name,
 			howto->name, (bfd_vma) 0, input_bfd,
 			input_section, r_addr)))
 		  return FALSE;
@@ -4267,7 +4267,7 @@ aout_link_input_section_std (struct aout_final_link_info *finfo,
 /* Relocate an a.out section using extended a.out relocs.  */
 
 static bfd_boolean
-aout_link_input_section_ext (struct aout_final_link_info *finfo,
+aout_link_input_section_ext (struct aout_final_link_info *flaginfo,
 			     bfd *input_bfd,
 			     asection *input_section,
 			     struct reloc_ext_external *relocs,
@@ -4288,18 +4288,18 @@ aout_link_input_section_ext (struct aout_final_link_info *finfo,
   struct reloc_ext_external *rel;
   struct reloc_ext_external *rel_end;
 
-  output_bfd = finfo->output_bfd;
+  output_bfd = flaginfo->output_bfd;
   check_dynamic_reloc = aout_backend_info (output_bfd)->check_dynamic_reloc;
 
   BFD_ASSERT (obj_reloc_entry_size (input_bfd) == RELOC_EXT_SIZE);
   BFD_ASSERT (input_bfd->xvec->header_byteorder
 	      == output_bfd->xvec->header_byteorder);
 
-  relocatable = finfo->info->relocatable;
+  relocatable = flaginfo->info->relocatable;
   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;
+  symbol_map = flaginfo->symbol_map;
 
   reloc_count = rel_size / RELOC_EXT_SIZE;
   rel = relocs;
@@ -4340,7 +4340,7 @@ aout_link_input_section_ext (struct aout_final_link_info *finfo,
 
       if (r_type >= TABLE_SIZE (howto_table_ext))
 	{
-	  (*finfo->info->callbacks->einfo)
+	  (*flaginfo->info->callbacks->einfo)
 	    (_("%P: %B: unexpected relocation type\n"), input_bfd);
 	  bfd_set_error (bfd_error_bad_value);
 	  return FALSE;
@@ -4421,7 +4421,7 @@ aout_link_input_section_ext (struct aout_final_link_info *finfo,
 			      h->indx = -2;
 			      h->written = FALSE;
 			      if (!aout_link_write_other_symbol (&h->root.root,
-								 finfo))
+								 flaginfo))
 				return FALSE;
 			    }
 			  r_index = h->indx;
@@ -4432,8 +4432,8 @@ aout_link_input_section_ext (struct aout_final_link_info *finfo,
 
 			  name = strings + GET_WORD (input_bfd,
 						     syms[r_index].e_strx);
-			  if (! ((*finfo->info->callbacks->unattached_reloc)
-				 (finfo->info, name, input_bfd, input_section,
+			  if (! ((*flaginfo->info->callbacks->unattached_reloc)
+				 (flaginfo->info, name, input_bfd, input_section,
 				  r_addr)))
 			    return FALSE;
 			  r_index = 0;
@@ -4600,7 +4600,7 @@ aout_link_input_section_ext (struct aout_final_link_info *finfo,
 	      bfd_boolean skip;
 
 	      if (! ((*check_dynamic_reloc)
-		     (finfo->info, input_bfd, input_section, h,
+		     (flaginfo->info, input_bfd, input_section, h,
 		      (void *) rel, contents, &skip, &relocation)))
 		return FALSE;
 	      if (skip)
@@ -4611,7 +4611,7 @@ aout_link_input_section_ext (struct aout_final_link_info *finfo,
              do this earlier, because check_dynamic_reloc might want
              to skip this reloc.  */
 	  if (hundef
-	      && ! finfo->info->shared
+	      && ! flaginfo->info->shared
 	      && r_type != (unsigned int) RELOC_BASE10
 	      && r_type != (unsigned int) RELOC_BASE13
 	      && r_type != (unsigned int) RELOC_BASE22)
@@ -4622,8 +4622,8 @@ aout_link_input_section_ext (struct aout_final_link_info *finfo,
 		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,
+	      if (! ((*flaginfo->info->callbacks->undefined_symbol)
+		     (flaginfo->info, name, input_bfd, input_section,
 		     r_addr, TRUE)))
 		return FALSE;
 	    }
@@ -4669,8 +4669,8 @@ aout_link_input_section_ext (struct aout_final_link_info *finfo,
 			s = aout_reloc_index_to_section (input_bfd, r_index);
 			name = bfd_section_name (input_bfd, s);
 		      }
-		    if (! ((*finfo->info->callbacks->reloc_overflow)
-			   (finfo->info, (h ? &h->root : NULL), name,
+		    if (! ((*flaginfo->info->callbacks->reloc_overflow)
+			   (flaginfo->info, (h ? &h->root : NULL), name,
 			    howto_table_ext[r_type].name,
 			    r_addend, input_bfd, input_section, r_addr)))
 		      return FALSE;
@@ -4687,7 +4687,7 @@ aout_link_input_section_ext (struct aout_final_link_info *finfo,
 /* Link an a.out section into the output file.  */
 
 static bfd_boolean
-aout_link_input_section (struct aout_final_link_info *finfo,
+aout_link_input_section (struct aout_final_link_info *flaginfo,
 			 bfd *input_bfd,
 			 asection *input_section,
 			 file_ptr *reloff_ptr,
@@ -4699,7 +4699,7 @@ aout_link_input_section (struct aout_final_link_info *finfo,
   /* Get the section contents.  */
   input_size = input_section->size;
   if (! bfd_get_section_contents (input_bfd, input_section,
-				  (void *) finfo->contents,
+				  (void *) flaginfo->contents,
 				  (file_ptr) 0, input_size))
     return FALSE;
 
@@ -4709,7 +4709,7 @@ aout_link_input_section (struct aout_final_link_info *finfo,
     relocs = aout_section_data (input_section)->relocs;
   else
     {
-      relocs = finfo->relocs;
+      relocs = flaginfo->relocs;
       if (rel_size > 0)
 	{
 	  if (bfd_seek (input_bfd, input_section->rel_filepos, SEEK_SET) != 0
@@ -4721,44 +4721,44 @@ aout_link_input_section (struct aout_final_link_info *finfo,
   /* Relocate the section contents.  */
   if (obj_reloc_entry_size (input_bfd) == RELOC_STD_SIZE)
     {
-      if (! aout_link_input_section_std (finfo, input_bfd, input_section,
+      if (! aout_link_input_section_std (flaginfo, input_bfd, input_section,
 					 (struct reloc_std_external *) relocs,
-					 rel_size, finfo->contents))
+					 rel_size, flaginfo->contents))
 	return FALSE;
     }
   else
     {
-      if (! aout_link_input_section_ext (finfo, input_bfd, input_section,
+      if (! aout_link_input_section_ext (flaginfo, input_bfd, input_section,
 					 (struct reloc_ext_external *) relocs,
-					 rel_size, finfo->contents))
+					 rel_size, flaginfo->contents))
 	return FALSE;
     }
 
   /* Write out the section contents.  */
-  if (! bfd_set_section_contents (finfo->output_bfd,
+  if (! bfd_set_section_contents (flaginfo->output_bfd,
 				  input_section->output_section,
-				  (void *) finfo->contents,
+				  (void *) flaginfo->contents,
 				  (file_ptr) input_section->output_offset,
 				  input_size))
     return FALSE;
 
   /* If we are producing relocatable output, the relocs were
      modified, and we now write them out.  */
-  if (finfo->info->relocatable && rel_size > 0)
+  if (flaginfo->info->relocatable && rel_size > 0)
     {
-      if (bfd_seek (finfo->output_bfd, *reloff_ptr, SEEK_SET) != 0)
+      if (bfd_seek (flaginfo->output_bfd, *reloff_ptr, SEEK_SET) != 0)
 	return FALSE;
-      if (bfd_bwrite (relocs, rel_size, finfo->output_bfd) != rel_size)
+      if (bfd_bwrite (relocs, rel_size, flaginfo->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
+      BFD_ASSERT (*reloff_ptr <= obj_sym_filepos (flaginfo->output_bfd)
+		  && (reloff_ptr != &flaginfo->treloff
 		      || (*reloff_ptr
-			  <= obj_datasec (finfo->output_bfd)->rel_filepos)));
+			  <= obj_datasec (flaginfo->output_bfd)->rel_filepos)));
     }
 
   return TRUE;
@@ -4768,7 +4768,7 @@ aout_link_input_section (struct aout_final_link_info *finfo,
    symbol indices into a symbol_map.  */
 
 static bfd_boolean
-aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd)
+aout_link_write_symbols (struct aout_final_link_info *flaginfo, bfd *input_bfd)
 {
   bfd *output_bfd;
   bfd_size_type sym_count;
@@ -4784,25 +4784,25 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd)
   bfd_boolean pass;
   bfd_boolean skip_next;
 
-  output_bfd = finfo->output_bfd;
+  output_bfd = flaginfo->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;
+  strip = flaginfo->info->strip;
+  discard = flaginfo->info->discard;
+  outsym = flaginfo->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,
+	  || bfd_hash_lookup (flaginfo->info->keep_hash, input_bfd->filename,
 			      FALSE, FALSE) != NULL)
       && discard != discard_all)
     {
       H_PUT_8 (output_bfd, N_TEXT, outsym->e_type);
       H_PUT_8 (output_bfd, 0, outsym->e_other);
       H_PUT_16 (output_bfd, 0, outsym->e_desc);
-      strtab_index = add_to_stringtab (output_bfd, finfo->strtab,
+      strtab_index = add_to_stringtab (output_bfd, flaginfo->strtab,
 				       input_bfd->filename, FALSE);
       if (strtab_index == (bfd_size_type) -1)
 	return FALSE;
@@ -4821,7 +4821,7 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd)
   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;
+  symbol_map = flaginfo->symbol_map;
   memset (symbol_map, 0, (size_t) sym_count * sizeof *symbol_map);
   for (; sym < sym_end; sym++, sym_hash++, symbol_map++)
     {
@@ -4920,7 +4920,7 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd)
 		skip = TRUE;
 	      break;
 	    case strip_some:
-	      if (bfd_hash_lookup (finfo->info->keep_hash, name, FALSE, FALSE)
+	      if (bfd_hash_lookup (flaginfo->info->keep_hash, name, FALSE, FALSE)
 		  == NULL)
 		skip = TRUE;
 	      break;
@@ -5148,8 +5148,8 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd)
 	      /* If we have already included a header file with the
                  same value, then replace this one with an N_EXCL
                  symbol.  */
-	      copy = (bfd_boolean) (! finfo->info->keep_memory);
-	      incl_entry = aout_link_includes_lookup (&finfo->includes,
+	      copy = (bfd_boolean) (! flaginfo->info->keep_memory);
+	      incl_entry = aout_link_includes_lookup (&flaginfo->includes,
 						      name, TRUE, copy);
 	      if (incl_entry == NULL)
 		return FALSE;
@@ -5161,7 +5161,7 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd)
 		  /* 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,
+                      bfd_hash_allocate (&flaginfo->includes.root,
 					 sizeof *t);
 		  if (t == NULL)
 		    return FALSE;
@@ -5210,7 +5210,7 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd)
       H_PUT_8 (output_bfd, H_GET_8 (input_bfd, sym->e_other), outsym->e_other);
       H_PUT_16 (output_bfd, H_GET_16 (input_bfd, sym->e_desc), outsym->e_desc);
       copy = FALSE;
-      if (! finfo->info->keep_memory)
+      if (! flaginfo->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.
@@ -5220,7 +5220,7 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd)
 	  else
 	    copy = TRUE;
 	}
-      strtab_index = add_to_stringtab (output_bfd, finfo->strtab,
+      strtab_index = add_to_stringtab (output_bfd, flaginfo->strtab,
 				       name, copy);
       if (strtab_index == (bfd_size_type) -1)
 	return FALSE;
@@ -5232,18 +5232,18 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd)
     }
 
   /* Write out the output symbols we have just constructed.  */
-  if (outsym > finfo->output_syms)
+  if (outsym > flaginfo->output_syms)
     {
       bfd_size_type outsym_size;
 
-      if (bfd_seek (output_bfd, finfo->symoff, SEEK_SET) != 0)
+      if (bfd_seek (output_bfd, flaginfo->symoff, SEEK_SET) != 0)
 	return FALSE;
-      outsym_size = outsym - finfo->output_syms;
+      outsym_size = outsym - flaginfo->output_syms;
       outsym_size *= EXTERNAL_NLIST_SIZE;
-      if (bfd_bwrite ((void *) finfo->output_syms, outsym_size, output_bfd)
+      if (bfd_bwrite ((void *) flaginfo->output_syms, outsym_size, output_bfd)
 	  != outsym_size)
 	return FALSE;
-      finfo->symoff += outsym_size;
+      flaginfo->symoff += outsym_size;
     }
 
   return TRUE;
@@ -5252,7 +5252,7 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd)
 /* Link an a.out input BFD into the output file.  */
 
 static bfd_boolean
-aout_link_input_bfd (struct aout_final_link_info *finfo, bfd *input_bfd)
+aout_link_input_bfd (struct aout_final_link_info *flaginfo, bfd *input_bfd)
 {
   BFD_ASSERT (bfd_get_format (input_bfd) == bfd_object);
 
@@ -5260,16 +5260,16 @@ aout_link_input_bfd (struct aout_final_link_info *finfo, bfd *input_bfd)
   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));
+	    (flaginfo->info, input_bfd));
 
   /* Get the symbols.  We probably have them already, unless
-     finfo->info->keep_memory is FALSE.  */
+     flaginfo->info->keep_memory is FALSE.  */
   if (! aout_get_external_symbols (input_bfd))
     return FALSE;
 
   /* 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))
+     is placed into flaginfo->symbol_map.  */
+  if (! aout_link_write_symbols (flaginfo, input_bfd))
     return FALSE;
 
   /* Relocate and write out the sections.  These functions use the
@@ -5278,17 +5278,17 @@ aout_link_input_bfd (struct aout_final_link_info *finfo, bfd *input_bfd)
      link, which will normally be the case.  */
   if (obj_textsec (input_bfd)->linker_mark)
     {
-      if (! aout_link_input_section (finfo, input_bfd,
+      if (! aout_link_input_section (flaginfo, input_bfd,
 				     obj_textsec (input_bfd),
-				     &finfo->treloff,
+				     &flaginfo->treloff,
 				     exec_hdr (input_bfd)->a_trsize))
 	return FALSE;
     }
   if (obj_datasec (input_bfd)->linker_mark)
     {
-      if (! aout_link_input_section (finfo, input_bfd,
+      if (! aout_link_input_section (flaginfo, input_bfd,
 				     obj_datasec (input_bfd),
-				     &finfo->dreloff,
+				     &flaginfo->dreloff,
 				     exec_hdr (input_bfd)->a_drsize))
 	return FALSE;
     }
@@ -5296,7 +5296,7 @@ aout_link_input_bfd (struct aout_final_link_info *finfo, bfd *input_bfd)
   /* 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 (! flaginfo->info->keep_memory)
     {
       if (! aout_link_free_symbols (input_bfd))
 	return FALSE;
diff --git a/bfd/archive.c b/bfd/archive.c
index 3e333c7..fe57755 100644
--- a/bfd/archive.c
+++ b/bfd/archive.c
@@ -1,7 +1,7 @@
 /* BFD back-end for archive files (libraries).
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
-   Free Software Foundation, Inc.
+   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
+   2012  Free Software Foundation, Inc.
    Written by Cygnus Support.  Mostly Gumby Henkel-Wallace's fault.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -147,7 +147,8 @@ extern int errno;
    it's generally short enough to search linearly.
    Note that the pointers here point to the front of the ar_hdr, not
    to the front of the contents!  */
-struct ar_cache {
+struct ar_cache
+{
   file_ptr ptr;
   bfd *arbfd;
 };
@@ -168,6 +169,7 @@ _bfd_ar_spacepad (char *p, size_t n, const char *fmt, long val)
 {
   static char buf[20];
   size_t len;
+
   snprintf (buf, sizeof (buf), fmt, val);
   len = strlen (buf);
   if (len < n)
@@ -178,6 +180,29 @@ _bfd_ar_spacepad (char *p, size_t n, const char *fmt, long val)
   else
     memcpy (p, buf, n);
 }
+
+bfd_boolean
+_bfd_ar_sizepad (char *p, size_t n, bfd_size_type size)
+{
+  static char buf[21];
+  size_t len;
+
+  snprintf (buf, sizeof (buf), "%-10" BFD_VMA_FMT "u", size);
+  len = strlen (buf);
+  if (len > n)
+    {
+      bfd_set_error (bfd_error_file_too_big);
+      return FALSE;
+    }
+  if (len < n)
+    {
+      memcpy (p, buf, len);
+      memset (p + len, ' ', n - len);
+    }
+  else
+    memcpy (p, buf, n);
+  return TRUE;
+}
 

 bfd_boolean
 _bfd_generic_mkarchive (bfd *abfd)
@@ -273,6 +298,7 @@ _bfd_look_for_bfd_in_cache (bfd *arch_bfd, file_ptr filepos)
 {
   htab_t hash_table = bfd_ardata (arch_bfd)->cache;
   struct ar_cache m;
+
   m.ptr = filepos;
 
   if (hash_table)
@@ -288,7 +314,7 @@ _bfd_look_for_bfd_in_cache (bfd *arch_bfd, file_ptr filepos)
 }
 
 static hashval_t
-hash_file_ptr (const PTR p)
+hash_file_ptr (const void * p)
 {
   return (hashval_t) (((struct ar_cache *) p)->ptr);
 }
@@ -296,7 +322,7 @@ hash_file_ptr (const PTR p)
 /* Returns non-zero if P1 and P2 are equal.  */
 
 static int
-eq_file_ptr (const PTR p1, const PTR p2)
+eq_file_ptr (const void * p1, const void * p2)
 {
   struct ar_cache *arc1 = (struct ar_cache *) p1;
   struct ar_cache *arc2 = (struct ar_cache *) p2;
@@ -350,7 +376,7 @@ _bfd_find_nested_archive (bfd *arch_bfd, const char *filename)
        abfd = abfd->archive_next)
     {
       if (filename_cmp (filename, abfd->filename) == 0)
-        return abfd;
+	return abfd;
     }
   target = NULL;
   if (!arch_bfd->target_defaulted)
@@ -390,10 +416,10 @@ get_extended_arelt_filename (bfd *arch, const char *name, file_ptr *originp)
       file_ptr origin = strtol (endp + 1, NULL, 10);
 
       if (errno != 0)
-        {
-          bfd_set_error (bfd_error_malformed_archive);
-          return NULL;
-        }
+	{
+	  bfd_set_error (bfd_error_malformed_archive);
+	  return NULL;
+	}
       *originp = origin;
     }
   else
@@ -424,7 +450,7 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd, const char *mag)
 {
   struct ar_hdr hdr;
   char *hdrp = (char *) &hdr;
-  size_t parsed_size;
+  bfd_size_type parsed_size;
   struct areltdata *ared;
   char *filename = NULL;
   bfd_size_type namelen = 0;
@@ -432,6 +458,8 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd, const char *mag)
   char *allocptr = 0;
   file_ptr origin = 0;
   unsigned int extra_size = 0;
+  char fmag_save;
+  int scan;
 
   if (bfd_bread (hdrp, sizeof (struct ar_hdr), abfd) != sizeof (struct ar_hdr))
     {
@@ -448,8 +476,11 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd, const char *mag)
     }
 
   errno = 0;
-  parsed_size = strtol (hdr.ar_size, NULL, 10);
-  if (errno != 0)
+  fmag_save = hdr.ar_fmag[0];
+  hdr.ar_fmag[0] = 0;
+  scan = sscanf (hdr.ar_size, "%" BFD_VMA_FMT "u", &parsed_size);
+  hdr.ar_fmag[0] = fmag_save;
+  if (scan != 1)
     {
       bfd_set_error (bfd_error_malformed_archive);
       return NULL;
@@ -581,12 +612,6 @@ _bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos)
   bfd *n_nfd;
   char *filename;
 
-  if (archive->my_archive)
-    {
-      filepos += archive->origin;
-      archive = archive->my_archive;
-    }
-
   n_nfd = _bfd_look_for_bfd_in_cache (archive, filepos);
   if (n_nfd)
     return n_nfd;
@@ -605,35 +630,35 @@ _bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos)
 
       /* This is a proxy entry for an external file.  */
       if (! IS_ABSOLUTE_PATH (filename))
-        {
-          filename = _bfd_append_relative_path (archive, filename);
-          if (filename == NULL)
-            return NULL;
-        }
+	{
+	  filename = _bfd_append_relative_path (archive, filename);
+	  if (filename == NULL)
+	    return NULL;
+	}
 
       if (new_areldata->origin > 0)
-        {
-          /* This proxy entry refers to an element of a nested archive.
-             Locate the member of that archive and return a bfd for it.  */
-          bfd *ext_arch = _bfd_find_nested_archive (archive, filename);
-
-          if (ext_arch == NULL
-              || ! bfd_check_format (ext_arch, bfd_archive))
-            {
-              bfd_release (archive, new_areldata);
-              return NULL;
-            }
-          n_nfd = _bfd_get_elt_at_filepos (ext_arch, new_areldata->origin);
-          if (n_nfd == NULL)
-            {
-              bfd_release (archive, new_areldata);
-              return NULL;
-            }
-          n_nfd->proxy_origin = bfd_tell (archive);
-          return n_nfd;
-        }
+	{
+	  /* This proxy entry refers to an element of a nested archive.
+	     Locate the member of that archive and return a bfd for it.  */
+	  bfd *ext_arch = _bfd_find_nested_archive (archive, filename);
+
+	  if (ext_arch == NULL
+	      || ! bfd_check_format (ext_arch, bfd_archive))
+	    {
+	      bfd_release (archive, new_areldata);
+	      return NULL;
+	    }
+	  n_nfd = _bfd_get_elt_at_filepos (ext_arch, new_areldata->origin);
+	  if (n_nfd == NULL)
+	    {
+	      bfd_release (archive, new_areldata);
+	      return NULL;
+	    }
+	  n_nfd->proxy_origin = bfd_tell (archive);
+	  return n_nfd;
+	}
       /* It's not an element of a nested archive;
-         open the external file as a bfd.  */
+	 open the external file as a bfd.  */
       target = NULL;
       if (!archive->target_defaulted)
 	target = archive->xvec->name;
@@ -727,13 +752,11 @@ bfd_generic_openr_next_archived_file (bfd *archive, bfd *last_file)
     filestart = bfd_ardata (archive)->first_file_filepos;
   else
     {
-      unsigned int size = arelt_size (last_file);
+      bfd_size_type size = arelt_size (last_file);
 
       filestart = last_file->proxy_origin;
       if (! bfd_is_thin_archive (archive))
-        filestart += size;
-      if (archive->my_archive)
-	filestart -= archive->origin;
+	filestart += size;
       /* Pad to an even boundary...
 	 Note that last_file->origin can be odd in the case of
 	 BSD-4.4-style element with a long odd size.  */
@@ -925,7 +948,7 @@ do_slurp_coff_armap (bfd *abfd)
   struct artdata *ardata = bfd_ardata (abfd);
   char *stringbase;
   bfd_size_type stringsize;
-  unsigned int parsed_size;
+  bfd_size_type parsed_size;
   carsym *carsyms;
   bfd_size_type nsymz;		/* Number of symbols in armap.  */
   bfd_vma (*swap) (const void *);
@@ -979,7 +1002,7 @@ do_slurp_coff_armap (bfd *abfd)
     return FALSE;
 
   ardata->symdefs = (struct carsym *) bfd_zalloc (abfd,
-                                                  carsym_size + stringsize + 1);
+						  carsym_size + stringsize + 1);
   if (ardata->symdefs == NULL)
     return FALSE;
   carsyms = ardata->symdefs;
@@ -1079,21 +1102,21 @@ bfd_slurp_armap (bfd *abfd)
   else if (CONST_STRNEQ (nextname, "#1/20           "))
     {
       /* Mach-O has a special name for armap when the map is sorted by name.
-         However because this name has a space it is slightly more difficult
-         to check it.  */
+	 However because this name has a space it is slightly more difficult
+	 to check it.  */
       struct ar_hdr hdr;
       char extname[21];
 
       if (bfd_bread (&hdr, sizeof (hdr), abfd) != sizeof (hdr))
-        return FALSE;
+	return FALSE;
       /* Read the extended name.  We know its length.  */
       if (bfd_bread (extname, 20, abfd) != 20)
-        return FALSE;
-      if (bfd_seek (abfd, (file_ptr) -(sizeof (hdr) + 20), SEEK_CUR) != 0)
-        return FALSE;
+	return FALSE;
+      if (bfd_seek (abfd, -(file_ptr) (sizeof (hdr) + 20), SEEK_CUR) != 0)
+	return FALSE;
       if (CONST_STRNEQ (extname, "__.SYMDEF SORTED")
-          || CONST_STRNEQ (extname, "__.SYMDEF"))
-        return do_slurp_bsd_armap (abfd);
+	  || CONST_STRNEQ (extname, "__.SYMDEF"))
+	return do_slurp_bsd_armap (abfd);
     }
 
   bfd_has_map (abfd) = FALSE;
@@ -1250,7 +1273,7 @@ _bfd_slurp_extended_name_table (bfd *abfd)
 
       amt = namedata->parsed_size;
       if (amt + 1 == 0)
-        goto byebye;
+	goto byebye;
 
       bfd_ardata (abfd)->extended_names_size = amt;
       bfd_ardata (abfd)->extended_names = (char *) bfd_zalloc (abfd, amt + 1);
@@ -1276,7 +1299,7 @@ _bfd_slurp_extended_name_table (bfd *abfd)
 	 trailing '/'.  DOS/NT created archive often have \ in them
 	 We'll fix all problems here..  */
       {
-        char *ext_names = bfd_ardata (abfd)->extended_names;
+	char *ext_names = bfd_ardata (abfd)->extended_names;
 	char *temp = ext_names;
 	char *limit = temp + namedata->parsed_size;
 	for (; temp < limit; ++temp)
@@ -1366,7 +1389,7 @@ normalize (bfd *abfd ATTRIBUTE_UNUSED, const char *file)
    the autogenerated bfd.h header...
 
    Note - the string is returned in a static buffer.  */
-   
+
 static const char *
 adjust_relative_path (const char * path, const char * ref_path)
 {
@@ -1389,7 +1412,7 @@ adjust_relative_path (const char * path, const char * ref_path)
 
   rpath = lrealpath (ref_path);
   refp = rpath == NULL ? ref_path : rpath;
- 
+
   /* Remove common leading path elements.  */
   for (;;)
     {
@@ -1415,7 +1438,7 @@ adjust_relative_path (const char * path, const char * ref_path)
       {
 	/* PR 12710:  If the path element is "../" then instead of
 	   inserting "../" we need to insert the name of the directory
-	   at the current level.  */	
+	   at the current level.  */
 	if (refp > ref_path + 1
 	    && refp[-1] == '.'
 	    && refp[-2] == '.')
@@ -1426,7 +1449,7 @@ adjust_relative_path (const char * path, const char * ref_path)
 
   /* If the lrealpath calls above succeeded then we should never
      see dir_up and dir_down both being non-zero.  */
-  
+
   len += 3 * dir_up;
 
   if (dir_down)
@@ -1531,40 +1554,40 @@ _bfd_construct_extended_name_table (bfd *abfd,
       unsigned int thislen;
 
       if (bfd_is_thin_archive (abfd))
-        {
-          const char *filename = current->filename;
-
-          /* If the element being added is a member of another archive
-             (i.e., we are flattening), use the containing archive's name.  */
-          if (current->my_archive
-              && ! bfd_is_thin_archive (current->my_archive))
-            filename = current->my_archive->filename;
-
-          /* If the path is the same as the previous path seen,
-             reuse it.  This can happen when flattening a thin
-             archive that contains other archives.  */
-          if (last_filename && filename_cmp (last_filename, filename) == 0)
-            continue;
-
-          last_filename = filename;
-
-          /* If the path is relative, adjust it relative to
-             the containing archive. */
-          if (! IS_ABSOLUTE_PATH (filename)
-              && ! IS_ABSOLUTE_PATH (abfd->filename))
-            normal = adjust_relative_path (filename, abfd->filename);
-          else
-            normal = filename;
-
-          /* In a thin archive, always store the full pathname
-             in the extended name table.  */
-          total_namelen += strlen (normal) + 1;
+	{
+	  const char *filename = current->filename;
+
+	  /* If the element being added is a member of another archive
+	     (i.e., we are flattening), use the containing archive's name.  */
+	  if (current->my_archive
+	      && ! bfd_is_thin_archive (current->my_archive))
+	    filename = current->my_archive->filename;
+
+	  /* If the path is the same as the previous path seen,
+	     reuse it.  This can happen when flattening a thin
+	     archive that contains other archives.  */
+	  if (last_filename && filename_cmp (last_filename, filename) == 0)
+	    continue;
+
+	  last_filename = filename;
+
+	  /* If the path is relative, adjust it relative to
+	     the containing archive. */
+	  if (! IS_ABSOLUTE_PATH (filename)
+	      && ! IS_ABSOLUTE_PATH (abfd->filename))
+	    normal = adjust_relative_path (filename, abfd->filename);
+	  else
+	    normal = filename;
+
+	  /* In a thin archive, always store the full pathname
+	     in the extended name table.  */
+	  total_namelen += strlen (normal) + 1;
 	  if (trailing_slash)
 	    /* Leave room for trailing slash.  */
 	    ++total_namelen;
 
-          continue;
-        }
+	  continue;
+	}
 
       normal = normalize (current, current->filename);
       if (normal == NULL)
@@ -1594,7 +1617,7 @@ _bfd_construct_extended_name_table (bfd *abfd,
 		  && hdr->ar_name[thislen] != ar_padchar (current)))
 	    {
 	      /* Must have been using extended format even though it
-	         didn't need to.  Fix it to use normal format.  */
+		 didn't need to.  Fix it to use normal format.  */
 	      memcpy (hdr->ar_name, normal, thislen);
 	      if (thislen < maxname
 		  || (thislen == maxname && thislen < sizeof hdr->ar_name))
@@ -1626,31 +1649,31 @@ _bfd_construct_extended_name_table (bfd *abfd,
       const char *filename = current->filename;
 
       if (bfd_is_thin_archive (abfd))
-        {
-          /* If the element being added is a member of another archive
-             (i.e., we are flattening), use the containing archive's name.  */
-          if (current->my_archive
-              && ! bfd_is_thin_archive (current->my_archive))
-            filename = current->my_archive->filename;
-          /* If the path is the same as the previous path seen,
-             reuse it.  This can happen when flattening a thin
-             archive that contains other archives.
-             If the path is relative, adjust it relative to
-             the containing archive.  */
-          if (last_filename && filename_cmp (last_filename, filename) == 0)
-            normal = last_filename;
-          else if (! IS_ABSOLUTE_PATH (filename)
-                   && ! IS_ABSOLUTE_PATH (abfd->filename))
-            normal = adjust_relative_path (filename, abfd->filename);
-          else
-            normal = filename;
-        }
+	{
+	  /* If the element being added is a member of another archive
+	     (i.e., we are flattening), use the containing archive's name.  */
+	  if (current->my_archive
+	      && ! bfd_is_thin_archive (current->my_archive))
+	    filename = current->my_archive->filename;
+	  /* If the path is the same as the previous path seen,
+	     reuse it.  This can happen when flattening a thin
+	     archive that contains other archives.
+	     If the path is relative, adjust it relative to
+	     the containing archive.  */
+	  if (last_filename && filename_cmp (last_filename, filename) == 0)
+	    normal = last_filename;
+	  else if (! IS_ABSOLUTE_PATH (filename)
+		   && ! IS_ABSOLUTE_PATH (abfd->filename))
+	    normal = adjust_relative_path (filename, abfd->filename);
+	  else
+	    normal = filename;
+	}
       else
-        {
-          normal = normalize (current, filename);
-          if (normal == NULL)
-            return FALSE;
-        }
+	{
+	  normal = normalize (current, filename);
+	  if (normal == NULL)
+	    return FALSE;
+	}
 
       thislen = strlen (normal);
       if (thislen > maxname || bfd_is_thin_archive (abfd))
@@ -1661,16 +1684,16 @@ _bfd_construct_extended_name_table (bfd *abfd,
 	  struct ar_hdr *hdr = arch_hdr (current);
 	  if (normal == last_filename)
 	    stroff = last_stroff;
-          else
-            {
+	  else
+	    {
 	      strcpy (strptr, normal);
 	      if (! trailing_slash)
-	        strptr[thislen] = ARFMAG[1];
+		strptr[thislen] = ARFMAG[1];
 	      else
-	        {
-	          strptr[thislen] = '/';
-	          strptr[thislen + 1] = ARFMAG[1];
-	        }
+		{
+		  strptr[thislen] = '/';
+		  strptr[thislen + 1] = ARFMAG[1];
+		}
 	      stroff = strptr - *tabloc;
 	      last_stroff = stroff;
 	    }
@@ -1678,19 +1701,19 @@ _bfd_construct_extended_name_table (bfd *abfd,
 	  if (bfd_is_thin_archive (abfd) && current->origin > 0)
 	    {
 	      int len = snprintf (hdr->ar_name + 1, maxname - 1, "%-ld:",
-	                          stroff);
+				  stroff);
 	      _bfd_ar_spacepad (hdr->ar_name + 1 + len, maxname - 1 - len,
-                                "%-ld",
-                                current->origin - sizeof (struct ar_hdr));
+				"%-ld",
+				current->origin - sizeof (struct ar_hdr));
 	    }
 	  else
-            _bfd_ar_spacepad (hdr->ar_name + 1, maxname - 1, "%-ld", stroff);
-          if (normal != last_filename)
-            {
+	    _bfd_ar_spacepad (hdr->ar_name + 1, maxname - 1, "%-ld", stroff);
+	  if (normal != last_filename)
+	    {
 	      strptr += thislen + 1;
 	      if (trailing_slash)
-	        ++strptr;
-              last_filename = filename;
+		++strptr;
+	      last_filename = filename;
 	    }
 	}
     }
@@ -1703,9 +1726,9 @@ _bfd_construct_extended_name_table (bfd *abfd,
 
 bfd_boolean
 _bfd_archive_bsd44_construct_extended_name_table (bfd *abfd,
-                                                  char **tabloc,
-                                                  bfd_size_type *tablen,
-                                                  const char **name)
+						  char **tabloc,
+						  bfd_size_type *tablen,
+						  const char **name)
 {
   unsigned int maxname = ar_maxnamelen (abfd);
   bfd *current;
@@ -1726,16 +1749,16 @@ _bfd_archive_bsd44_construct_extended_name_table (bfd *abfd,
 	return FALSE;
 
       for (len = 0; normal[len]; len++)
-        if (normal[len] == ' ')
-          has_space = 1;
+	if (normal[len] == ' ')
+	  has_space = 1;
 
       if (len > maxname || has_space)
 	{
-          struct ar_hdr *hdr = arch_hdr (current);
+	  struct ar_hdr *hdr = arch_hdr (current);
 
-          len = (len + 3) & ~3;
-          arch_eltdata (current)->extra_size = len;
-          _bfd_ar_spacepad (hdr->ar_name, maxname, "#1/%lu", len);
+	  len = (len + 3) & ~3;
+	  arch_eltdata (current)->extra_size = len;
+	  _bfd_ar_spacepad (hdr->ar_name, maxname, "#1/%lu", len);
 	}
     }
 
@@ -1770,27 +1793,29 @@ _bfd_bsd44_write_ar_hdr (bfd *archive, bfd *abfd)
 
       BFD_ASSERT (padded_len == arch_eltdata (abfd)->extra_size);
 
-      _bfd_ar_spacepad (hdr->ar_size, sizeof (hdr->ar_size), "%-10ld",
-                        arch_eltdata (abfd)->parsed_size + padded_len);
+      if (!_bfd_ar_sizepad (hdr->ar_size, sizeof (hdr->ar_size),
+			    arch_eltdata (abfd)->parsed_size + padded_len))
+	return FALSE;
 
       if (bfd_bwrite (hdr, sizeof (*hdr), archive) != sizeof (*hdr))
-        return FALSE;
+	return FALSE;
 
       if (bfd_bwrite (fullname, len, archive) != len)
-        return FALSE;
+	return FALSE;
+
       if (len & 3)
-        {
-          static const char pad[3] = { 0, 0, 0 };
+	{
+	  static const char pad[3] = { 0, 0, 0 };
 
-          len = 4 - (len & 3);
-          if (bfd_bwrite (pad, len, archive) != len)
-            return FALSE;
-        }
+	  len = 4 - (len & 3);
+	  if (bfd_bwrite (pad, len, archive) != len)
+	    return FALSE;
+	}
     }
   else
     {
       if (bfd_bwrite (hdr, sizeof (*hdr), archive) != sizeof (*hdr))
-        return FALSE;
+	return FALSE;
     }
   return TRUE;
 }
@@ -1870,7 +1895,7 @@ bfd_ar_hdr_from_filesystem (bfd *abfd, const char *filename, bfd *member)
   memset (hdr, ' ', sizeof (struct ar_hdr));
 
   _bfd_ar_spacepad (hdr->ar_date, sizeof (hdr->ar_date), "%-12ld",
-                    status.st_mtime);
+		    status.st_mtime);
 #ifdef HPUX_LARGE_AR_IDS
   /* HP has a very "special" way to handle UID/GID's with numeric values
      > 99999.  */
@@ -1879,7 +1904,7 @@ bfd_ar_hdr_from_filesystem (bfd *abfd, const char *filename, bfd *member)
   else
 #endif
     _bfd_ar_spacepad (hdr->ar_uid, sizeof (hdr->ar_uid), "%ld",
-                      status.st_uid);
+		      status.st_uid);
 #ifdef HPUX_LARGE_AR_IDS
   /* HP has a very "special" way to handle UID/GID's with numeric values
      > 99999.  */
@@ -1888,11 +1913,14 @@ bfd_ar_hdr_from_filesystem (bfd *abfd, const char *filename, bfd *member)
   else
 #endif
     _bfd_ar_spacepad (hdr->ar_gid, sizeof (hdr->ar_gid), "%ld",
-                      status.st_gid);
+		      status.st_gid);
   _bfd_ar_spacepad (hdr->ar_mode, sizeof (hdr->ar_mode), "%-8lo",
-                    status.st_mode);
-  _bfd_ar_spacepad (hdr->ar_size, sizeof (hdr->ar_size), "%-10ld",
-                    status.st_size);
+		    status.st_mode);
+  if (!_bfd_ar_sizepad (hdr->ar_size, sizeof (hdr->ar_size), status.st_size))
+    {
+      free (ared);
+      return NULL;
+    }
   memcpy (hdr->ar_fmag, ARFMAG, 2);
   ared->parsed_size = status.st_size;
   ared->arch_header = (char *) hdr;
@@ -2132,8 +2160,9 @@ _bfd_write_archive_contents (bfd *arch)
       memset (&hdr, ' ', sizeof (struct ar_hdr));
       memcpy (hdr.ar_name, ename, strlen (ename));
       /* Round size up to even number in archive header.  */
-      _bfd_ar_spacepad (hdr.ar_size, sizeof (hdr.ar_size), "%-10ld",
-                        (elength + 1) & ~(bfd_size_type) 1);
+      if (!_bfd_ar_sizepad (hdr.ar_size, sizeof (hdr.ar_size),
+			    (elength + 1) & ~(bfd_size_type) 1))
+	return FALSE;
       memcpy (hdr.ar_fmag, ARFMAG, 2);
       if ((bfd_bwrite (&hdr, sizeof (struct ar_hdr), arch)
 	   != sizeof (struct ar_hdr))
@@ -2151,13 +2180,13 @@ _bfd_write_archive_contents (bfd *arch)
        current = current->archive_next)
     {
       char buffer[DEFAULT_BUFFERSIZE];
-      unsigned int remaining = arelt_size (current);
+      bfd_size_type remaining = arelt_size (current);
 
       /* Write ar header.  */
       if (!_bfd_write_ar_hdr (arch, current))
-        return FALSE;
+	return FALSE;
       if (bfd_is_thin_archive (arch))
-        continue;
+	continue;
       if (bfd_seek (current, (file_ptr) 0, SEEK_SET) != 0)
 	goto input_err;
 
@@ -2282,16 +2311,16 @@ _bfd_compute_and_write_armap (bfd *arch, unsigned int elength)
 		goto error_return;
 
 	      /* Now map over all the symbols, picking out the ones we
-                 want.  */
+		 want.  */
 	      for (src_count = 0; src_count < symcount; src_count++)
 		{
 		  flagword flags = (syms[src_count])->flags;
 		  asection *sec = syms[src_count]->section;
 
-		  if ((flags & BSF_GLOBAL
-		       || flags & BSF_WEAK
-		       || flags & BSF_INDIRECT
-		       || flags & BSF_GNU_UNIQUE
+		  if (((flags & (BSF_GLOBAL
+				 | BSF_WEAK
+				 | BSF_INDIRECT
+				 | BSF_GNU_UNIQUE)) != 0
 		       || bfd_is_com_section (sec))
 		      && ! bfd_is_und_section (sec))
 		    {
@@ -2316,7 +2345,7 @@ _bfd_compute_and_write_armap (bfd *arch, unsigned int elength)
 		      if (map[orl_count].name == NULL)
 			goto error_return;
 		      *(map[orl_count].name) = (char *) bfd_alloc (arch,
-                                                                   namelen + 1);
+								   namelen + 1);
 		      if (*(map[orl_count].name) == NULL)
 			goto error_return;
 		      strcpy (*(map[orl_count].name), syms[src_count]->name);
@@ -2379,6 +2408,9 @@ bsd_write_armap (bfd *arch,
   unsigned int count;
   struct ar_hdr hdr;
   long uid, gid;
+  file_ptr max_first_real = 1;
+
+  max_first_real <<= 31;
 
   firstreal = mapsize + elength + sizeof (struct ar_hdr) + SARMAG;
 
@@ -2406,10 +2438,11 @@ bsd_write_armap (bfd *arch,
   bfd_ardata (arch)->armap_datepos = (SARMAG
 				      + offsetof (struct ar_hdr, ar_date[0]));
   _bfd_ar_spacepad (hdr.ar_date, sizeof (hdr.ar_date), "%ld",
-                    bfd_ardata (arch)->armap_timestamp);
+		    bfd_ardata (arch)->armap_timestamp);
   _bfd_ar_spacepad (hdr.ar_uid, sizeof (hdr.ar_uid), "%ld", uid);
   _bfd_ar_spacepad (hdr.ar_gid, sizeof (hdr.ar_gid), "%ld", gid);
-  _bfd_ar_spacepad (hdr.ar_size, sizeof (hdr.ar_size), "%-10ld", mapsize);
+  if (!_bfd_ar_sizepad (hdr.ar_size, sizeof (hdr.ar_size), mapsize))
+    return FALSE;
   memcpy (hdr.ar_fmag, ARFMAG, 2);
   if (bfd_bwrite (&hdr, sizeof (struct ar_hdr), arch)
       != sizeof (struct ar_hdr))
@@ -2426,16 +2459,25 @@ bsd_write_armap (bfd *arch,
 	{
 	  do
 	    {
-              struct areltdata *ared = arch_eltdata (current);
+	      struct areltdata *ared = arch_eltdata (current);
 
 	      firstreal += (ared->parsed_size + ared->extra_size
-                            + sizeof (struct ar_hdr));
+			    + sizeof (struct ar_hdr));
 	      firstreal += firstreal % 2;
 	      current = current->archive_next;
 	    }
 	  while (current != map[count].u.abfd);
 	}
 
+      /* The archive file format only has 4 bytes to store the offset
+	 of the member.  Check to make sure that firstreal has not grown
+	 too big.  */
+      if (firstreal >= max_first_real)
+	{
+	  bfd_set_error (bfd_error_file_truncated);
+	  return FALSE;
+	}
+      
       last_elt = current;
       H_PUT_32 (arch, map[count].namidx, buf);
       H_PUT_32 (arch, firstreal, buf + BSD_SYMDEF_OFFSET_SIZE);
@@ -2503,7 +2545,7 @@ _bfd_archive_bsd_update_armap_timestamp (bfd *arch)
   /* Prepare an ASCII version suitable for writing.  */
   memset (hdr.ar_date, ' ', sizeof (hdr.ar_date));
   _bfd_ar_spacepad (hdr.ar_date, sizeof (hdr.ar_date), "%ld",
-                    bfd_ardata (arch)->armap_timestamp);
+		    bfd_ardata (arch)->armap_timestamp);
 
   /* Write it into the file.  */
   bfd_ardata (arch)->armap_datepos = (SARMAG
@@ -2547,7 +2589,7 @@ coff_write_armap (bfd *arch,
   unsigned int ranlibsize = (symbol_count * 4) + 4;
   unsigned int stringsize = stridx;
   unsigned int mapsize = stringsize + ranlibsize;
-  unsigned int archive_member_file_ptr;
+  file_ptr archive_member_file_ptr;
   bfd *current = arch->archive_head;
   unsigned int count;
   struct ar_hdr hdr;
@@ -2564,11 +2606,11 @@ coff_write_armap (bfd *arch,
 
   memset (&hdr, ' ', sizeof (struct ar_hdr));
   hdr.ar_name[0] = '/';
-  _bfd_ar_spacepad (hdr.ar_size, sizeof (hdr.ar_size), "%-10ld",
-                    mapsize);
+  if (!_bfd_ar_sizepad (hdr.ar_size, sizeof (hdr.ar_size), mapsize))
+    return FALSE;
   _bfd_ar_spacepad (hdr.ar_date, sizeof (hdr.ar_date), "%ld",
-                    ((arch->flags & BFD_DETERMINISTIC_OUTPUT) == 0
-                     ? time (NULL) : 0));
+		    ((arch->flags & BFD_DETERMINISTIC_OUTPUT) == 0
+		     ? time (NULL) : 0));
   /* This, at least, is what Intel coff sets the values to.  */
   _bfd_ar_spacepad (hdr.ar_uid, sizeof (hdr.ar_uid), "%ld", 0);
   _bfd_ar_spacepad (hdr.ar_gid, sizeof (hdr.ar_gid), "%ld", 0);
@@ -2598,18 +2640,26 @@ coff_write_armap (bfd *arch,
 
       while (count < symbol_count && map[count].u.abfd == current)
 	{
-	  if (!bfd_write_bigendian_4byte_int (arch, archive_member_file_ptr))
+	  unsigned int offset = (unsigned int) archive_member_file_ptr;
+
+	  /* Catch an attempt to grow an archive past its 4Gb limit.  */
+	  if (archive_member_file_ptr != (file_ptr) offset)
+	    {
+	      bfd_set_error (bfd_error_file_truncated);
+	      return FALSE;
+	    }
+	  if (!bfd_write_bigendian_4byte_int (arch, offset))
 	    return FALSE;
 	  count++;
 	}
       archive_member_file_ptr += sizeof (struct ar_hdr);
       if (! bfd_is_thin_archive (arch))
-        {
-          /* Add size of this archive entry.  */
-          archive_member_file_ptr += arelt_size (current);
-          /* Remember about the even alignment.  */
-          archive_member_file_ptr += archive_member_file_ptr % 2;
-        }
+	{
+	  /* Add size of this archive entry.  */
+	  archive_member_file_ptr += arelt_size (current);
+	  /* Remember about the even alignment.  */
+	  archive_member_file_ptr += archive_member_file_ptr % 2;
+	}
       current = current->archive_next;
     }
 
diff --git a/bfd/archive64.c b/bfd/archive64.c
index bbc4c3f..f3a13d3 100644
--- a/bfd/archive64.c
+++ b/bfd/archive64.c
@@ -1,6 +1,6 @@
 /* MIPS-specific support for 64-bit ELF
    Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007,
-   2010  Free Software Foundation, Inc.
+   2010, 2012  Free Software Foundation, Inc.
    Ian Lance Taylor, Cygnus Support
    Linker support added by Mark Mitchell, CodeSourcery, LLC.
    <mark at codesourcery.com>
@@ -169,8 +169,8 @@ bfd_elf64_archive_write_armap (bfd *arch,
 
   memset (&hdr, ' ', sizeof (struct ar_hdr));
   memcpy (hdr.ar_name, "/SYM64/", strlen ("/SYM64/"));
-  _bfd_ar_spacepad (hdr.ar_size, sizeof (hdr.ar_size), "%-10ld",
-                    mapsize);
+  if (!_bfd_ar_sizepad (hdr.ar_size, sizeof (hdr.ar_size), mapsize))
+    return FALSE;
   _bfd_ar_spacepad (hdr.ar_date, sizeof (hdr.ar_date), "%ld",
                     time (NULL));
   /* This, at least, is what Intel coff sets the values to.: */
diff --git a/bfd/archures.c b/bfd/archures.c
index f609534..a23534b 100644
--- a/bfd/archures.c
+++ b/bfd/archures.c
@@ -1,7 +1,7 @@
 /* BFD library support routines for architectures.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
-   Free Software Foundation, Inc.
+   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
+   2012 Free Software Foundation, Inc.
    Hacked by John Gilmore and Steve Chamberlain of Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -241,7 +241,10 @@ DESCRIPTION
 .#define bfd_mach_ppc_e500      500
 .#define bfd_mach_ppc_e500mc    5001
 .#define bfd_mach_ppc_e500mc64  5005
+.#define bfd_mach_ppc_e5500     5006
+.#define bfd_mach_ppc_e6500     5007
 .#define bfd_mach_ppc_titan     83
+.#define bfd_mach_ppc_vle       84
 .  bfd_arch_rs6000,    {* IBM RS/6000 *}
 .#define bfd_mach_rs6k		6000
 .#define bfd_mach_rs6k_rs1	6001
@@ -263,6 +266,8 @@ DESCRIPTION
 .#define bfd_mach_m6812_default 0
 .#define bfd_mach_m6812         1
 .#define bfd_mach_m6812s        2
+.  bfd_arch_m9s12x,   {* Freescale S12X *}
+.  bfd_arch_m9s12xg,  {* Freescale XGATE *}
 .  bfd_arch_z8k,       {* Zilog Z8000 *}
 .#define bfd_mach_z8001		1
 .#define bfd_mach_z8002		2
@@ -438,7 +443,9 @@ DESCRIPTION
 .  bfd_arch_xc16x,     {* Infineon's XC16X Series.               *}
 .#define bfd_mach_xc16x         1
 .#define bfd_mach_xc16xl        2
-.#define bfd_mach_xc16xs         3
+.#define bfd_mach_xc16xs        3
+.  bfd_arch_xgate,   {* Freescale XGATE *}
+.#define bfd_mach_xgate         1
 .  bfd_arch_xtensa,    {* Tensilica's Xtensa cores.  *}
 .#define bfd_mach_xtensa	1
 .  bfd_arch_z80,
@@ -453,6 +460,7 @@ DESCRIPTION
 .  bfd_arch_tilegx, {* Tilera TILE-Gx *}
 .#define bfd_mach_tilepro   1
 .#define bfd_mach_tilegx    1
+.#define bfd_mach_tilegx32  2
 .  bfd_arch_last
 .  };
 */
@@ -485,6 +493,12 @@ DESCRIPTION
 .
 .  bfd_boolean (*scan) (const struct bfd_arch_info *, const char *);
 .
+.  {* Allocate via bfd_malloc and return a fill buffer of size COUNT.  If
+.     IS_BIGENDIAN is TRUE, the order of bytes is big endian.  If CODE is
+.     TRUE, the buffer contains code.  *}
+.  void *(*fill) (bfd_size_type count, bfd_boolean is_bigendian,
+.		  bfd_boolean code);
+.
 .  const struct bfd_arch_info *next;
 .}
 .bfd_arch_info_type;
@@ -523,6 +537,8 @@ extern const bfd_arch_info_type bfd_m32c_arch;
 extern const bfd_arch_info_type bfd_m32r_arch;
 extern const bfd_arch_info_type bfd_m68hc11_arch;
 extern const bfd_arch_info_type bfd_m68hc12_arch;
+extern const bfd_arch_info_type bfd_m9s12x_arch;
+extern const bfd_arch_info_type bfd_m9s12xg_arch;
 extern const bfd_arch_info_type bfd_m68k_arch;
 extern const bfd_arch_info_type bfd_m88k_arch;
 extern const bfd_arch_info_type bfd_mcore_arch;
@@ -565,6 +581,7 @@ extern const bfd_arch_info_type bfd_we32k_arch;
 extern const bfd_arch_info_type bfd_xstormy16_arch;
 extern const bfd_arch_info_type bfd_xtensa_arch;
 extern const bfd_arch_info_type bfd_xc16x_arch;
+extern const bfd_arch_info_type bfd_xgate_arch;
 extern const bfd_arch_info_type bfd_z80_arch;
 extern const bfd_arch_info_type bfd_z8k_arch;
 
@@ -605,6 +622,8 @@ static const bfd_arch_info_type * const bfd_archures_list[] =
     &bfd_m32r_arch,
     &bfd_m68hc11_arch,
     &bfd_m68hc12_arch,
+    &bfd_m9s12x_arch,
+    &bfd_m9s12xg_arch,
     &bfd_m68k_arch,
     &bfd_m88k_arch,
     &bfd_mcore_arch,
@@ -644,6 +663,7 @@ static const bfd_arch_info_type * const bfd_archures_list[] =
     &bfd_xstormy16_arch,
     &bfd_xtensa_arch,
     &bfd_xc16x_arch,
+    &bfd_xgate_arch,
     &bfd_z80_arch,
     &bfd_z8k_arch,
 #endif
@@ -814,6 +834,7 @@ const bfd_arch_info_type bfd_default_arch_struct = {
   32, 32, 8, bfd_arch_unknown, 0, "unknown", "unknown", 2, TRUE,
   bfd_default_compatible,
   bfd_default_scan,
+  bfd_arch_default_fill,
   0,
 };
 
@@ -1309,3 +1330,29 @@ bfd_arch_mach_octets_per_byte (enum bfd_architecture arch,
     return ap->bits_per_byte / 8;
   return 1;
 }
+
+/*
+INTERNAL_FUNCTION
+	bfd_arch_default_fill
+
+SYNOPSIS
+	void *bfd_arch_default_fill (bfd_size_type count,
+				     bfd_boolean is_bigendian,
+				     bfd_boolean code);
+
+DESCRIPTION
+	Allocate via bfd_malloc and return a fill buffer of size COUNT.
+	If IS_BIGENDIAN is TRUE, the order of bytes is big endian.  If
+	CODE is TRUE, the buffer contains code.
+*/
+
+void *
+bfd_arch_default_fill (bfd_size_type count,
+		       bfd_boolean is_bigendian ATTRIBUTE_UNUSED,
+		       bfd_boolean code ATTRIBUTE_UNUSED)
+{
+  void *fill = bfd_malloc (count);
+  if (fill != NULL)
+    memset (fill, 0, count);
+  return fill;
+}
diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h
index 40ed786..5300b14 100644
--- a/bfd/bfd-in.h
+++ b/bfd/bfd-in.h
@@ -1,8 +1,8 @@
 /* Main header file for the bfd library -- portable access to object files.
 
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
-   Free Software Foundation, Inc.
+   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
+   2012 Free Software Foundation, Inc.
 
    Contributed by Cygnus Support.
 
@@ -25,6 +25,11 @@
 #ifndef __BFD_H_SEEN__
 #define __BFD_H_SEEN__
 
+/* PR 14072: Ensure that config.h is included first.  */
+#if !defined PACKAGE && !defined PACKAGE_VERSION
+#error config.h must be included before this header
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -273,18 +278,19 @@ alent;
 
 typedef struct bfd_section *sec_ptr;
 
-#define bfd_get_section_name(bfd, ptr) ((ptr)->name + 0)
-#define bfd_get_section_vma(bfd, ptr) ((ptr)->vma + 0)
-#define bfd_get_section_lma(bfd, ptr) ((ptr)->lma + 0)
-#define bfd_get_section_alignment(bfd, ptr) ((ptr)->alignment_power + 0)
+#define bfd_get_section_name(bfd, ptr) ((void) bfd, (ptr)->name)
+#define bfd_get_section_vma(bfd, ptr) ((void) bfd, (ptr)->vma)
+#define bfd_get_section_lma(bfd, ptr) ((void) bfd, (ptr)->lma)
+#define bfd_get_section_alignment(bfd, ptr) ((void) bfd, \
+					     (ptr)->alignment_power)
 #define bfd_section_name(bfd, ptr) ((ptr)->name)
 #define bfd_section_size(bfd, ptr) ((ptr)->size)
 #define bfd_get_section_size(ptr) ((ptr)->size)
 #define bfd_section_vma(bfd, ptr) ((ptr)->vma)
 #define bfd_section_lma(bfd, ptr) ((ptr)->lma)
 #define bfd_section_alignment(bfd, ptr) ((ptr)->alignment_power)
-#define bfd_get_section_flags(bfd, ptr) ((ptr)->flags + 0)
-#define bfd_get_section_userdata(bfd, ptr) ((ptr)->userdata)
+#define bfd_get_section_flags(bfd, ptr) ((void) bfd, (ptr)->flags)
+#define bfd_get_section_userdata(bfd, ptr) ((void) bfd, (ptr)->userdata)
 
 #define bfd_is_com_section(ptr) (((ptr)->flags & SEC_IS_COMMON) != 0)
 
@@ -297,11 +303,11 @@ typedef struct bfd_section *sec_ptr;
     ? (sec)->rawsize : (sec)->size) / bfd_octets_per_byte (bfd))
 
 /* Return TRUE if input section SEC has been discarded.  */
-#define elf_discarded_section(sec)				\
+#define discarded_section(sec)				\
   (!bfd_is_abs_section (sec)					\
    && bfd_is_abs_section ((sec)->output_section)		\
-   && (sec)->sec_info_type != ELF_INFO_TYPE_MERGE		\
-   && (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
+   && (sec)->sec_info_type != SEC_INFO_TYPE_MERGE		\
+   && (sec)->sec_info_type != SEC_INFO_TYPE_JUST_SYMS)
 

 typedef enum bfd_print_symbol
 {
@@ -692,19 +698,15 @@ extern int bfd_get_elf_phdrs
    the remote memory.  */
 extern bfd *bfd_elf_bfd_from_remote_memory
   (bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
-   int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr, int len));
-
-/* Return the arch_size field of an elf bfd, or -1 if not elf.  */
-extern int bfd_get_arch_size
-  (bfd *);
-
-/* Return TRUE if address "naturally" sign extends, or -1 if not elf.  */
-extern int bfd_get_sign_extend_vma
-  (bfd *);
+   int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr,
+			      bfd_size_type len));
 
 extern struct bfd_section *_bfd_elf_tls_setup
   (bfd *, struct bfd_link_info *);
 
+extern struct bfd_section *
+_bfd_nearby_section (bfd *, struct bfd_section *, bfd_vma);
+
 extern void _bfd_fix_excluded_sec_syms
   (bfd *, struct bfd_link_info *);
 
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index 2bb0ec7..c1c5e90 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -8,8 +8,8 @@
 /* Main header file for the bfd library -- portable access to object files.
 
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
-   Free Software Foundation, Inc.
+   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
+   2012 Free Software Foundation, Inc.
 
    Contributed by Cygnus Support.
 
@@ -32,6 +32,11 @@
 #ifndef __BFD_H_SEEN__
 #define __BFD_H_SEEN__
 
+/* PR 14072: Ensure that config.h is included first.  */
+#if !defined PACKAGE && !defined PACKAGE_VERSION
+#error config.h must be included before this header
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -280,18 +285,19 @@ alent;
 
 typedef struct bfd_section *sec_ptr;
 
-#define bfd_get_section_name(bfd, ptr) ((ptr)->name + 0)
-#define bfd_get_section_vma(bfd, ptr) ((ptr)->vma + 0)
-#define bfd_get_section_lma(bfd, ptr) ((ptr)->lma + 0)
-#define bfd_get_section_alignment(bfd, ptr) ((ptr)->alignment_power + 0)
+#define bfd_get_section_name(bfd, ptr) ((void) bfd, (ptr)->name)
+#define bfd_get_section_vma(bfd, ptr) ((void) bfd, (ptr)->vma)
+#define bfd_get_section_lma(bfd, ptr) ((void) bfd, (ptr)->lma)
+#define bfd_get_section_alignment(bfd, ptr) ((void) bfd, \
+					     (ptr)->alignment_power)
 #define bfd_section_name(bfd, ptr) ((ptr)->name)
 #define bfd_section_size(bfd, ptr) ((ptr)->size)
 #define bfd_get_section_size(ptr) ((ptr)->size)
 #define bfd_section_vma(bfd, ptr) ((ptr)->vma)
 #define bfd_section_lma(bfd, ptr) ((ptr)->lma)
 #define bfd_section_alignment(bfd, ptr) ((ptr)->alignment_power)
-#define bfd_get_section_flags(bfd, ptr) ((ptr)->flags + 0)
-#define bfd_get_section_userdata(bfd, ptr) ((ptr)->userdata)
+#define bfd_get_section_flags(bfd, ptr) ((void) bfd, (ptr)->flags)
+#define bfd_get_section_userdata(bfd, ptr) ((void) bfd, (ptr)->userdata)
 
 #define bfd_is_com_section(ptr) (((ptr)->flags & SEC_IS_COMMON) != 0)
 
@@ -304,11 +310,11 @@ typedef struct bfd_section *sec_ptr;
     ? (sec)->rawsize : (sec)->size) / bfd_octets_per_byte (bfd))
 
 /* Return TRUE if input section SEC has been discarded.  */
-#define elf_discarded_section(sec)				\
+#define discarded_section(sec)				\
   (!bfd_is_abs_section (sec)					\
    && bfd_is_abs_section ((sec)->output_section)		\
-   && (sec)->sec_info_type != ELF_INFO_TYPE_MERGE		\
-   && (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
+   && (sec)->sec_info_type != SEC_INFO_TYPE_MERGE		\
+   && (sec)->sec_info_type != SEC_INFO_TYPE_JUST_SYMS)
 

 typedef enum bfd_print_symbol
 {
@@ -699,19 +705,15 @@ extern int bfd_get_elf_phdrs
    the remote memory.  */
 extern bfd *bfd_elf_bfd_from_remote_memory
   (bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
-   int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr, int len));
-
-/* Return the arch_size field of an elf bfd, or -1 if not elf.  */
-extern int bfd_get_arch_size
-  (bfd *);
-
-/* Return TRUE if address "naturally" sign extends, or -1 if not elf.  */
-extern int bfd_get_sign_extend_vma
-  (bfd *);
+   int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr,
+			      bfd_size_type len));
 
 extern struct bfd_section *_bfd_elf_tls_setup
   (bfd *, struct bfd_link_info *);
 
+extern struct bfd_section *
+_bfd_nearby_section (bfd *, struct bfd_section *, bfd_vma);
+
 extern void _bfd_fix_excluded_sec_syms
   (bfd *, struct bfd_link_info *);
 
@@ -1383,11 +1385,11 @@ typedef struct bfd_section
 
   /* Type of sec_info information.  */
   unsigned int sec_info_type:3;
-#define ELF_INFO_TYPE_NONE      0
-#define ELF_INFO_TYPE_STABS     1
-#define ELF_INFO_TYPE_MERGE     2
-#define ELF_INFO_TYPE_EH_FRAME  3
-#define ELF_INFO_TYPE_JUST_SYMS 4
+#define SEC_INFO_TYPE_NONE      0
+#define SEC_INFO_TYPE_STABS     1
+#define SEC_INFO_TYPE_MERGE     2
+#define SEC_INFO_TYPE_EH_FRAME  3
+#define SEC_INFO_TYPE_JUST_SYMS 4
 
   /* Nonzero if this section uses RELA relocations, rather than REL.  */
   unsigned int use_rela_p:1;
@@ -1517,9 +1519,6 @@ typedef struct bfd_section
   /* The BFD which owns the section.  */
   bfd *owner;
 
-  /* INPUT_SECTION_FLAGS if specified in the linker script.  */
-  struct flag_info *section_flag_info;
-
   /* A symbol which points at this section only.  */
   struct bfd_symbol *symbol;
   struct bfd_symbol **symbol_ptr_ptr;
@@ -1547,28 +1546,25 @@ struct relax_table {
 
 /* These sections are global, and are managed by BFD.  The application
    and target back end are not permitted to change the values in
-   these sections.  New code should use the section_ptr macros rather
-   than referring directly to the const sections.  The const sections
-   may eventually vanish.  */
+   these sections.  */
+extern asection std_section[4];
+
 #define BFD_ABS_SECTION_NAME "*ABS*"
 #define BFD_UND_SECTION_NAME "*UND*"
 #define BFD_COM_SECTION_NAME "*COM*"
 #define BFD_IND_SECTION_NAME "*IND*"
 
-/* The absolute section.  */
-extern asection bfd_abs_section;
-#define bfd_abs_section_ptr ((asection *) &bfd_abs_section)
-#define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr)
-/* Pointer to the undefined section.  */
-extern asection bfd_und_section;
-#define bfd_und_section_ptr ((asection *) &bfd_und_section)
-#define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr)
 /* Pointer to the common section.  */
-extern asection bfd_com_section;
-#define bfd_com_section_ptr ((asection *) &bfd_com_section)
+#define bfd_com_section_ptr (&std_section[0])
+/* Pointer to the undefined section.  */
+#define bfd_und_section_ptr (&std_section[1])
+/* Pointer to the absolute section.  */
+#define bfd_abs_section_ptr (&std_section[2])
 /* Pointer to the indirect section.  */
-extern asection bfd_ind_section;
-#define bfd_ind_section_ptr ((asection *) &bfd_ind_section)
+#define bfd_ind_section_ptr (&std_section[3])
+
+#define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr)
+#define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr)
 #define bfd_is_ind_section(sec) ((sec) == bfd_ind_section_ptr)
 
 #define bfd_is_const_section(SEC)              \
@@ -1683,8 +1679,8 @@ extern asection bfd_ind_section;
   /* vma, lma, size, rawsize, compressed_size, relax, relax_count, */  \
      0,   0,   0,    0,       0,               0,     0,               \
                                                                        \
-  /* output_offset, output_section,              alignment_power,  */  \
-     0,             (struct bfd_section *) &SEC, 0,                    \
+  /* output_offset, output_section, alignment_power,               */  \
+     0,             &SEC,           0,                                 \
                                                                        \
   /* relocation, orelocation, reloc_count, filepos, rel_filepos,   */  \
      NULL,       NULL,        0,           0,       0,                 \
@@ -1698,9 +1694,6 @@ extern asection bfd_ind_section;
   /* target_index, used_by_bfd, constructor_chain, owner,          */  \
      0,            NULL,        NULL,              NULL,               \
                                                                        \
-  /* flag_info,                                                    */  \
-     NULL,                                                             \
-                                                                       \
   /* symbol,                    symbol_ptr_ptr,                    */  \
      (struct bfd_symbol *) SYM, &SEC.symbol,                           \
                                                                        \
@@ -1712,6 +1705,10 @@ void bfd_section_list_clear (bfd *);
 
 asection *bfd_get_section_by_name (bfd *abfd, const char *name);
 
+asection *bfd_get_next_section_by_name (asection *sec);
+
+asection *bfd_get_linker_section (bfd *abfd, const char *name);
+
 asection *bfd_get_section_by_name_if
    (bfd *abfd,
     const char *name,
@@ -1947,7 +1944,10 @@ enum bfd_architecture
 #define bfd_mach_ppc_e500      500
 #define bfd_mach_ppc_e500mc    5001
 #define bfd_mach_ppc_e500mc64  5005
+#define bfd_mach_ppc_e5500     5006
+#define bfd_mach_ppc_e6500     5007
 #define bfd_mach_ppc_titan     83
+#define bfd_mach_ppc_vle       84
   bfd_arch_rs6000,    /* IBM RS/6000 */
 #define bfd_mach_rs6k          6000
 #define bfd_mach_rs6k_rs1      6001
@@ -1969,6 +1969,8 @@ enum bfd_architecture
 #define bfd_mach_m6812_default 0
 #define bfd_mach_m6812         1
 #define bfd_mach_m6812s        2
+  bfd_arch_m9s12x,   /* Freescale S12X */
+  bfd_arch_m9s12xg,  /* Freescale XGATE */
   bfd_arch_z8k,       /* Zilog Z8000 */
 #define bfd_mach_z8001         1
 #define bfd_mach_z8002         2
@@ -2144,7 +2146,9 @@ enum bfd_architecture
   bfd_arch_xc16x,     /* Infineon's XC16X Series.               */
 #define bfd_mach_xc16x         1
 #define bfd_mach_xc16xl        2
-#define bfd_mach_xc16xs         3
+#define bfd_mach_xc16xs        3
+  bfd_arch_xgate,   /* Freescale XGATE */
+#define bfd_mach_xgate         1
   bfd_arch_xtensa,    /* Tensilica's Xtensa cores.  */
 #define bfd_mach_xtensa        1
   bfd_arch_z80,
@@ -2159,6 +2163,7 @@ enum bfd_architecture
   bfd_arch_tilegx, /* Tilera TILE-Gx */
 #define bfd_mach_tilepro   1
 #define bfd_mach_tilegx    1
+#define bfd_mach_tilegx32  2
   bfd_arch_last
   };
 
@@ -2181,6 +2186,12 @@ typedef struct bfd_arch_info
 
   bfd_boolean (*scan) (const struct bfd_arch_info *, const char *);
 
+  /* Allocate via bfd_malloc and return a fill buffer of size COUNT.  If
+     IS_BIGENDIAN is TRUE, the order of bytes is big endian.  If CODE is
+     TRUE, the buffer contains code.  */
+  void *(*fill) (bfd_size_type count, bfd_boolean is_bigendian,
+                 bfd_boolean code);
+
   const struct bfd_arch_info *next;
 }
 bfd_arch_info_type;
@@ -2591,6 +2602,10 @@ relocation types already defined.  */
   BFD_RELOC_SPARC_M44,
   BFD_RELOC_SPARC_L44,
   BFD_RELOC_SPARC_REGISTER,
+  BFD_RELOC_SPARC_H34,
+  BFD_RELOC_SPARC_SIZE32,
+  BFD_RELOC_SPARC_SIZE64,
+  BFD_RELOC_SPARC_WDISP10,
 
 /* SPARC little endian relocation  */
   BFD_RELOC_SPARC_REV32,
@@ -2786,6 +2801,15 @@ to compensate for the borrow when the low bits are added.  */
 /* MIPS16 low 16 bits.  */
   BFD_RELOC_MIPS16_LO16,
 
+/* MIPS16 TLS relocations  */
+  BFD_RELOC_MIPS16_TLS_GD,
+  BFD_RELOC_MIPS16_TLS_LDM,
+  BFD_RELOC_MIPS16_TLS_DTPREL_HI16,
+  BFD_RELOC_MIPS16_TLS_DTPREL_LO16,
+  BFD_RELOC_MIPS16_TLS_GOTTPREL,
+  BFD_RELOC_MIPS16_TLS_TPREL_HI16,
+  BFD_RELOC_MIPS16_TLS_TPREL_LO16,
+
 /* Relocation against a MIPS literal section.  */
   BFD_RELOC_MIPS_LITERAL,
   BFD_RELOC_MICROMIPS_LITERAL,
@@ -2947,6 +2971,25 @@ be honoured at the offset's location, regardless of linker
 relaxation.  */
   BFD_RELOC_MN10300_ALIGN,
 
+/* Various TLS-related relocations.  */
+  BFD_RELOC_MN10300_TLS_GD,
+  BFD_RELOC_MN10300_TLS_LD,
+  BFD_RELOC_MN10300_TLS_LDO,
+  BFD_RELOC_MN10300_TLS_GOTIE,
+  BFD_RELOC_MN10300_TLS_IE,
+  BFD_RELOC_MN10300_TLS_LE,
+  BFD_RELOC_MN10300_TLS_DTPMOD,
+  BFD_RELOC_MN10300_TLS_DTPOFF,
+  BFD_RELOC_MN10300_TLS_TPOFF,
+
+/* This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the
+instruction.  */
+  BFD_RELOC_MN10300_32_PCREL,
+
+/* This is a 16bit pcrel reloc for the mn10300, offset by two bytes in the
+instruction.  */
+  BFD_RELOC_MN10300_16_PCREL,
+
 
 /* i386/elf relocations  */
   BFD_RELOC_386_GOT32,
@@ -3060,6 +3103,23 @@ relaxation.  */
   BFD_RELOC_PPC_EMB_RELST_HA,
   BFD_RELOC_PPC_EMB_BIT_FLD,
   BFD_RELOC_PPC_EMB_RELSDA,
+  BFD_RELOC_PPC_VLE_REL8,
+  BFD_RELOC_PPC_VLE_REL15,
+  BFD_RELOC_PPC_VLE_REL24,
+  BFD_RELOC_PPC_VLE_LO16A,
+  BFD_RELOC_PPC_VLE_LO16D,
+  BFD_RELOC_PPC_VLE_HI16A,
+  BFD_RELOC_PPC_VLE_HI16D,
+  BFD_RELOC_PPC_VLE_HA16A,
+  BFD_RELOC_PPC_VLE_HA16D,
+  BFD_RELOC_PPC_VLE_SDA21,
+  BFD_RELOC_PPC_VLE_SDA21_LO,
+  BFD_RELOC_PPC_VLE_SDAREL_LO16A,
+  BFD_RELOC_PPC_VLE_SDAREL_LO16D,
+  BFD_RELOC_PPC_VLE_SDAREL_HI16A,
+  BFD_RELOC_PPC_VLE_SDAREL_HI16D,
+  BFD_RELOC_PPC_VLE_SDAREL_HA16A,
+  BFD_RELOC_PPC_VLE_SDAREL_HA16D,
   BFD_RELOC_PPC64_HIGHER,
   BFD_RELOC_PPC64_HIGHER_S,
   BFD_RELOC_PPC64_HIGHEST,
@@ -3782,14 +3842,6 @@ instructions.  */
 /* start data in text.  */
   BFD_RELOC_V850_DATA,
 
-/* This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the
-instruction.  */
-  BFD_RELOC_MN10300_32_PCREL,
-
-/* This is a 16bit pcrel reloc for the mn10300, offset by two bytes in the
-instruction.  */
-  BFD_RELOC_MN10300_16_PCREL,
-
 /* This is a 8bit DP reloc for the tms320c30, where the most
 significant 8 bits of a 24 bit word are placed into the least
 significant 8 bits of the opcode.  */
@@ -4061,6 +4113,18 @@ instructions  */
 instructions  */
   BFD_RELOC_AVR_6_ADIW,
 
+/* This is a 8 bit reloc for the AVR that stores bits 0..7 of a symbol
+in .byte lo8(symbol)  */
+  BFD_RELOC_AVR_8_LO,
+
+/* This is a 8 bit reloc for the AVR that stores bits 8..15 of a symbol
+in .byte hi8(symbol)  */
+  BFD_RELOC_AVR_8_HI,
+
+/* This is a 8 bit reloc for the AVR that stores bits 16..23 of a symbol
+in .byte hlo8(symbol)  */
+  BFD_RELOC_AVR_8_HLO,
+
 /* Renesas RL78 Relocations.  */
   BFD_RELOC_RL78_NEG8,
   BFD_RELOC_RL78_NEG16,
@@ -4229,6 +4293,7 @@ instructions  */
   BFD_RELOC_390_GOT20,
   BFD_RELOC_390_GOTPLT20,
   BFD_RELOC_390_TLS_GOTIE20,
+  BFD_RELOC_390_IRELATIVE,
 
 /* Score relocations
 Low 16 bit for load/store  */
@@ -4444,6 +4509,83 @@ to follow the 16K memory bank of 68HC12 (seen as mapped in the window).  */
 This is the 5 bits of a value.  */
   BFD_RELOC_M68HC12_5B,
 
+/* Freescale XGATE reloc.
+This reloc marks the beginning of a bra/jal instruction.  */
+  BFD_RELOC_XGATE_RL_JUMP,
+
+/* Freescale XGATE reloc.
+This reloc marks a group of several instructions that gcc generates
+and for which the linker relaxation pass can modify and/or remove
+some of them.  */
+  BFD_RELOC_XGATE_RL_GROUP,
+
+/* Freescale XGATE reloc.
+This is the 16-bit lower part of an address.  It is used for the '16-bit'
+instructions.  */
+  BFD_RELOC_XGATE_LO16,
+
+/* Freescale XGATE reloc.  */
+  BFD_RELOC_XGATE_GPAGE,
+
+/* Freescale XGATE reloc.  */
+  BFD_RELOC_XGATE_24,
+
+/* Freescale XGATE reloc.
+This is a 9-bit pc-relative reloc.  */
+  BFD_RELOC_XGATE_PCREL_9,
+
+/* Freescale XGATE reloc.
+This is a 10-bit pc-relative reloc.  */
+  BFD_RELOC_XGATE_PCREL_10,
+
+/* Freescale XGATE reloc.
+This is the 16-bit lower part of an address.  It is used for the '16-bit'
+instructions.  */
+  BFD_RELOC_XGATE_IMM8_LO,
+
+/* Freescale XGATE reloc.
+This is the 16-bit higher part of an address.  It is used for the '16-bit'
+instructions.  */
+  BFD_RELOC_XGATE_IMM8_HI,
+
+/* Freescale XGATE reloc.
+This is a 3-bit pc-relative reloc.  */
+  BFD_RELOC_XGATE_IMM3,
+
+/* Freescale XGATE reloc.
+This is a 4-bit pc-relative reloc.  */
+  BFD_RELOC_XGATE_IMM4,
+
+/* Freescale XGATE reloc.
+This is a 5-bit pc-relative reloc.  */
+  BFD_RELOC_XGATE_IMM5,
+
+/* Motorola 68HC12 reloc.
+This is the 9 bits of a value.  */
+  BFD_RELOC_M68HC12_9B,
+
+/* Motorola 68HC12 reloc.
+This is the 16 bits of a value.  */
+  BFD_RELOC_M68HC12_16B,
+
+/* Motorola 68HC12/XGATE reloc.
+This is a PCREL9 branch.  */
+  BFD_RELOC_M68HC12_9_PCREL,
+
+/* Motorola 68HC12/XGATE reloc.
+This is a PCREL10 branch.  */
+  BFD_RELOC_M68HC12_10_PCREL,
+
+/* Motorola 68HC12/XGATE reloc.
+This is the 8 bit low part of an absolute address and immediately precedes
+a matching HI8XG part.  */
+  BFD_RELOC_M68HC12_LO8XG,
+
+/* Motorola 68HC12/XGATE reloc.
+This is the 8 bit high part of an absolute address and immediately follows
+a matching LO8XG part.  */
+  BFD_RELOC_M68HC12_HI8XG,
+
 /* NS CR16C Relocations.  */
   BFD_RELOC_16C_NUM08,
   BFD_RELOC_16C_NUM08_C,
@@ -4810,6 +4952,9 @@ BFD_RELOC_XTENSA_ASM_EXPAND.  */
 BFD_RELOC_MACH_O_PAIR.  */
   BFD_RELOC_MACH_O_SECTDIFF,
 
+/* Like BFD_RELOC_MACH_O_SECTDIFF but with a local symbol.  */
+  BFD_RELOC_MACH_O_LOCAL_SECTDIFF,
+
 /* Pair of relocation.  Contains the first symbol.  */
   BFD_RELOC_MACH_O_PAIR,
 
@@ -4940,6 +5085,12 @@ the dynamic object into the runtime process image.  */
   BFD_RELOC_TILEPRO_SHAMT_X1,
   BFD_RELOC_TILEPRO_SHAMT_Y0,
   BFD_RELOC_TILEPRO_SHAMT_Y1,
+  BFD_RELOC_TILEPRO_TLS_GD_CALL,
+  BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD,
+  BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD,
+  BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD,
+  BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD,
+  BFD_RELOC_TILEPRO_TLS_IE_LOAD,
   BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD,
   BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD,
   BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO,
@@ -4959,6 +5110,14 @@ the dynamic object into the runtime process image.  */
   BFD_RELOC_TILEPRO_TLS_DTPMOD32,
   BFD_RELOC_TILEPRO_TLS_DTPOFF32,
   BFD_RELOC_TILEPRO_TLS_TPOFF32,
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE,
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE,
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO,
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO,
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI,
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI,
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA,
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA,
 
 /* Tilera TILE-Gx Relocations.  */
   BFD_RELOC_TILEGX_HW0,
@@ -5018,52 +5177,44 @@ the dynamic object into the runtime process image.  */
   BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL,
   BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT,
   BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT,
-  BFD_RELOC_TILEGX_IMM16_X0_HW1_GOT,
-  BFD_RELOC_TILEGX_IMM16_X1_HW1_GOT,
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_GOT,
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_GOT,
-  BFD_RELOC_TILEGX_IMM16_X0_HW3_GOT,
-  BFD_RELOC_TILEGX_IMM16_X1_HW3_GOT,
   BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT,
   BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT,
   BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT,
   BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT,
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_GOT,
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_GOT,
   BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD,
   BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_GD,
+  BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE,
+  BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE,
+  BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE,
+  BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE,
+  BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE,
+  BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE,
   BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD,
   BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD,
   BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD,
   BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_GD,
   BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE,
   BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE,
-  BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_IE,
-  BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_IE,
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_IE,
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_IE,
-  BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_IE,
-  BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_IE,
   BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE,
   BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE,
   BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE,
   BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE,
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_IE,
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_IE,
   BFD_RELOC_TILEGX_TLS_DTPMOD64,
   BFD_RELOC_TILEGX_TLS_DTPOFF64,
   BFD_RELOC_TILEGX_TLS_TPOFF64,
   BFD_RELOC_TILEGX_TLS_DTPMOD32,
   BFD_RELOC_TILEGX_TLS_DTPOFF32,
   BFD_RELOC_TILEGX_TLS_TPOFF32,
+  BFD_RELOC_TILEGX_TLS_GD_CALL,
+  BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD,
+  BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD,
+  BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD,
+  BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD,
+  BFD_RELOC_TILEGX_TLS_IE_LOAD,
+  BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD,
+  BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD,
+  BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD,
+  BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD,
 
 /* Adapteva EPIPHANY - 8 bit signed pc-relative displacement  */
   BFD_RELOC_EPIPHANY_SIMM8,
@@ -5600,6 +5751,15 @@ void bfd_set_error_program_name (const char *);
 
 bfd_error_handler_type bfd_get_error_handler (void);
 
+typedef void (*bfd_assert_handler_type) (const char *bfd_formatmsg,
+                                         const char *bfd_version,
+                                         const char *bfd_file,
+                                         int bfd_line);
+
+bfd_assert_handler_type bfd_set_assert_handler (bfd_assert_handler_type);
+
+bfd_assert_handler_type bfd_get_assert_handler (void);
+
 long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);
 
 long bfd_canonicalize_reloc
@@ -5680,8 +5840,8 @@ bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
 #define bfd_gc_sections(abfd, link_info) \
        BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))
 
-#define bfd_lookup_section_flags(link_info, flag_info) \
-       BFD_SEND (abfd, _bfd_lookup_section_flags, (link_info, flag_info))
+#define bfd_lookup_section_flags(link_info, flag_info, section) \
+       BFD_SEND (abfd, _bfd_lookup_section_flags, (link_info, flag_info, section))
 
 #define bfd_merge_sections(abfd, link_info) \
        BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info))
@@ -6157,8 +6317,9 @@ typedef struct bfd_target
   bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *);
 
   /* Sets the bitmask of allowed and disallowed section flags.  */
-  void (*_bfd_lookup_section_flags) (struct bfd_link_info *,
-                                     struct flag_info *);
+  bfd_boolean (*_bfd_lookup_section_flags) (struct bfd_link_info *,
+                                            struct flag_info *,
+                                            asection *);
 
   /* Attempt to merge SEC_MERGE sections.  */
   bfd_boolean (*_bfd_merge_sections) (bfd *, struct bfd_link_info *);
diff --git a/bfd/bfd.c b/bfd/bfd.c
index 7c14c7a..640b420 100644
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -797,6 +797,88 @@ bfd_get_error_handler (void)
 {
   return _bfd_error_handler;
 }
+
+/*
+SUBSECTION
+	BFD assert handler
+
+	If BFD finds an internal inconsistency, the bfd assert
+	handler is called with information on the BFD version, BFD
+	source file and line.  If this happens, most programs linked
+	against BFD are expected to want to exit with an error, or mark
+	the current BFD operation as failed, so it is recommended to
+	override the default handler, which just calls
+	_bfd_error_handler and continues.
+
+CODE_FRAGMENT
+.
+.typedef void (*bfd_assert_handler_type) (const char *bfd_formatmsg,
+.                                         const char *bfd_version,
+.                                         const char *bfd_file,
+.                                         int bfd_line);
+.
+*/
+
+/* Note the use of bfd_ prefix on the parameter names above: we want to
+   show which one is the message and which is the version by naming the
+   parameters, but avoid polluting the program-using-bfd namespace as
+   the typedef is visible in the exported headers that the program
+   includes.  Below, it's just for consistency.  */
+
+static void
+_bfd_default_assert_handler (const char *bfd_formatmsg,
+			     const char *bfd_version,
+			     const char *bfd_file,
+			     int bfd_line)
+
+{
+  (*_bfd_error_handler) (bfd_formatmsg, bfd_version, bfd_file, bfd_line);
+}
+
+/* Similar to _bfd_error_handler, a program can decide to exit on an
+   internal BFD error.  We use a non-variadic type to simplify passing
+   on parameters to other functions, e.g. _bfd_error_handler.  */
+
+bfd_assert_handler_type _bfd_assert_handler = _bfd_default_assert_handler;
+
+/*
+FUNCTION
+	bfd_set_assert_handler
+
+SYNOPSIS
+	bfd_assert_handler_type bfd_set_assert_handler (bfd_assert_handler_type);
+
+DESCRIPTION
+	Set the BFD assert handler function.  Returns the previous
+	function.
+*/
+
+bfd_assert_handler_type
+bfd_set_assert_handler (bfd_assert_handler_type pnew)
+{
+  bfd_assert_handler_type pold;
+
+  pold = _bfd_assert_handler;
+  _bfd_assert_handler = pnew;
+  return pold;
+}
+
+/*
+FUNCTION
+	bfd_get_assert_handler
+
+SYNOPSIS
+	bfd_assert_handler_type bfd_get_assert_handler (void);
+
+DESCRIPTION
+	Return the BFD assert handler function.
+*/
+
+bfd_assert_handler_type
+bfd_get_assert_handler (void)
+{
+  return _bfd_assert_handler;
+}
 

 /*
 SECTION
@@ -942,8 +1024,8 @@ bfd_set_file_flags (bfd *abfd, flagword flags)
 void
 bfd_assert (const char *file, int line)
 {
-  (*_bfd_error_handler) (_("BFD %s assertion fail %s:%d"),
-			 BFD_VERSION_STRING, file, line);
+  (*_bfd_assert_handler) (_("BFD %s assertion fail %s:%d"),
+			  BFD_VERSION_STRING, file, line);
 }
 
 /* A more or less friendly abort message.  In libbfd.h abort is
@@ -1374,8 +1456,8 @@ DESCRIPTION
 .#define bfd_gc_sections(abfd, link_info) \
 .	BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))
 .
-.#define bfd_lookup_section_flags(link_info, flag_info) \
-.	BFD_SEND (abfd, _bfd_lookup_section_flags, (link_info, flag_info))
+.#define bfd_lookup_section_flags(link_info, flag_info, section) \
+.	BFD_SEND (abfd, _bfd_lookup_section_flags, (link_info, flag_info, section))
 .
 .#define bfd_merge_sections(abfd, link_info) \
 .	BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info))
diff --git a/bfd/bfdio.c b/bfd/bfdio.c
index 841c781..43a7684 100644
--- a/bfd/bfdio.c
+++ b/bfd/bfdio.c
@@ -87,7 +87,6 @@ FILE *
 real_fopen (const char *filename, const char *modes)
 {
 #ifdef VMS
-  char vms_modes[4];
   char *vms_attr;
 
   /* On VMS, fopen allows file attributes as optionnal arguments.
@@ -185,7 +184,8 @@ bfd_bread (void *ptr, bfd_size_type size, bfd *abfd)
      this element.  */
   if (abfd->arelt_data != NULL)
     {
-      size_t maxbytes = ((struct areltdata *) abfd->arelt_data)->parsed_size;
+      bfd_size_type maxbytes = arelt_size (abfd);
+
       if (abfd->where + size > maxbytes)
         {
           if (abfd->where >= maxbytes)
@@ -233,10 +233,14 @@ bfd_tell (bfd *abfd)
 
   if (abfd->iovec)
     {
+      bfd *parent_bfd = abfd;
       ptr = abfd->iovec->btell (abfd);
 
-      if (abfd->my_archive)
-	ptr -= abfd->origin;
+      while (parent_bfd->my_archive != NULL)
+	{
+	  ptr -= parent_bfd->origin;
+	  parent_bfd = parent_bfd->my_archive;
+	}
     }
   else
     ptr = 0;
@@ -308,8 +312,16 @@ bfd_seek (bfd *abfd, file_ptr position, int direction)
     }
 
   file_position = position;
-  if (direction == SEEK_SET && abfd->my_archive != NULL)
-    file_position += abfd->origin;
+  if (direction == SEEK_SET)
+    {
+      bfd *parent_bfd = abfd;
+
+      while (parent_bfd->my_archive != NULL)
+        {
+          file_position += parent_bfd->origin;
+          parent_bfd = parent_bfd->my_archive;
+        }
+    }
 
   if (abfd->iovec)
     result = abfd->iovec->bseek (abfd, file_position, direction);
diff --git a/bfd/cache.c b/bfd/cache.c
index 5ddbbe4..574d8b2 100644
--- a/bfd/cache.c
+++ b/bfd/cache.c
@@ -198,7 +198,7 @@ bfd_cache_lookup_worker (bfd *abfd, enum cache_flag flag)
   if ((abfd->flags & BFD_IN_MEMORY) != 0)
     abort ();
 
-  if (abfd->my_archive)
+  while (abfd->my_archive)
     abfd = abfd->my_archive;
 
   if (abfd->iostream != NULL)
@@ -563,15 +563,15 @@ bfd_open_file (bfd *abfd)
     {
     case read_direction:
     case no_direction:
-      abfd->iostream = (PTR) real_fopen (abfd->filename, FOPEN_RB);
+      abfd->iostream = real_fopen (abfd->filename, FOPEN_RB);
       break;
     case both_direction:
     case write_direction:
       if (abfd->opened_once)
 	{
-	  abfd->iostream = (PTR) real_fopen (abfd->filename, FOPEN_RUB);
+	  abfd->iostream = real_fopen (abfd->filename, FOPEN_RUB);
 	  if (abfd->iostream == NULL)
-	    abfd->iostream = (PTR) real_fopen (abfd->filename, FOPEN_WUB);
+	    abfd->iostream = real_fopen (abfd->filename, FOPEN_WUB);
 	}
       else
 	{
@@ -601,7 +601,7 @@ bfd_open_file (bfd *abfd)
 	  if (stat (abfd->filename, &s) == 0 && s.st_size != 0)
 	    unlink_if_ordinary (abfd->filename);
 #endif
-	  abfd->iostream = (PTR) real_fopen (abfd->filename, FOPEN_WUB);
+	  abfd->iostream = real_fopen (abfd->filename, FOPEN_WUB);
 	  abfd->opened_once = TRUE;
 	}
       break;
diff --git a/bfd/cisco-core.c b/bfd/cisco-core.c
index 40eaca9..7155a63 100644
--- a/bfd/cisco-core.c
+++ b/bfd/cisco-core.c
@@ -1,6 +1,6 @@
 /* BFD back-end for CISCO crash dumps.
    Copyright 1994, 1997, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007,
-   2010, 2011
+   2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -38,7 +38,8 @@
 # define SIGBUS 10
 #endif
 

-int crash_info_locs[] = {
+int crash_info_locs[] =
+{
   0x0250,	/* mips, ppc, x86, i960 */
   0x0400,	/* m68k, mips, x86, i960 */
   0x0FFC,	/* m68k, mips, ppc, x86, i960 */
@@ -50,13 +51,15 @@ int crash_info_locs[] = {
 #define CRASH_MAGIC	0xdead1234
 #define MASK_ADDR(x)	((x) & 0x0fffffff)	/* Mask crash info address */
 
-typedef enum {
-    CRASH_REASON_NOTCRASHED = 0,
-    CRASH_REASON_EXCEPTION = 1,
-    CRASH_REASON_CORRUPT = 2,
+typedef enum
+{
+  CRASH_REASON_NOTCRASHED = 0,
+  CRASH_REASON_EXCEPTION = 1,
+  CRASH_REASON_CORRUPT = 2,
 } crashreason;
 
-typedef struct {
+typedef struct
+{
   char magic[4];		/* Magic number */
   char version[4];		/* Version number */
   char reason[4];		/* Crash reason */
@@ -73,10 +76,6 @@ struct cisco_core_struct
   int sig;
 };
 
-static const bfd_target *cisco_core_file_validate PARAMS ((bfd *, int));
-static const bfd_target *cisco_core_file_p PARAMS ((bfd *));
-char *cisco_core_file_failing_command PARAMS ((bfd *));
-int cisco_core_file_failing_signal PARAMS ((bfd *));
 #define cisco_core_file_matches_executable_p generic_core_file_matches_executable_p
 #define cisco_core_file_pid _bfd_nocore_core_file_pid
 

@@ -84,9 +83,7 @@ int cisco_core_file_failing_signal PARAMS ((bfd *));
    CRASH_INFO_LOC.  */
 
 static const bfd_target *
-cisco_core_file_validate (abfd, crash_info_loc)
-     bfd *abfd;
-     int crash_info_loc;
+cisco_core_file_validate (bfd *abfd, int crash_info_loc)
 {
   char buf[4];
   unsigned int crashinfo_offset;
@@ -292,8 +289,7 @@ cisco_core_file_validate (abfd, crash_info_loc)
 }
 
 static const bfd_target *
-cisco_core_file_p (abfd)
-     bfd *abfd;
+cisco_core_file_p (bfd *abfd)
 {
   int *crash_info_locp;
   const bfd_target *target = NULL;
@@ -308,15 +304,13 @@ cisco_core_file_p (abfd)
 }
 
 char *
-cisco_core_file_failing_command (abfd)
-     bfd *abfd ATTRIBUTE_UNUSED;
+cisco_core_file_failing_command (bfd *abfd ATTRIBUTE_UNUSED)
 {
   return NULL;
 }
 
 int
-cisco_core_file_failing_signal (abfd)
-     bfd *abfd ATTRIBUTE_UNUSED;
+cisco_core_file_failing_signal (bfd *abfd ATTRIBUTE_UNUSED)
 {
   return abfd->tdata.cisco_core_data->sig;
 }
@@ -324,7 +318,7 @@ cisco_core_file_failing_signal (abfd)
 extern const bfd_target cisco_core_little_vec;
 
 const bfd_target cisco_core_big_vec =
-  {
+{
     "cisco-ios-core-big",
     bfd_target_unknown_flavour,
     BFD_ENDIAN_BIG,		/* target byte order */
@@ -371,11 +365,11 @@ const bfd_target cisco_core_big_vec =
 
     & cisco_core_little_vec,
 
-    (PTR) 0			/* backend_data */
+    NULL	/* backend_data */
 };
 
 const bfd_target cisco_core_little_vec =
-  {
+{
     "cisco-ios-core-little",
     bfd_target_unknown_flavour,
     BFD_ENDIAN_LITTLE,		/* target byte order */
@@ -422,5 +416,5 @@ const bfd_target cisco_core_little_vec =
 
     &cisco_core_big_vec,
 
-    (PTR) 0			/* backend_data */
+    NULL			/* backend_data */
 };
diff --git a/bfd/coff-alpha.c b/bfd/coff-alpha.c
index 4466e4d..62e5c9c 100644
--- a/bfd/coff-alpha.c
+++ b/bfd/coff-alpha.c
@@ -1,6 +1,6 @@
 /* BFD back-end for ALPHA Extended-Coff files.
    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-   2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
+   2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
    Modified from coff-mips.c by Steve Chamberlain <sac at cygnus.com> and
    Ian Lance Taylor <ian at cygnus.com>.
@@ -37,40 +37,7 @@
 

 /* Prototypes for static functions.  */
 
-static const bfd_target *alpha_ecoff_object_p
-  PARAMS ((bfd *));
-static bfd_boolean alpha_ecoff_bad_format_hook
-  PARAMS ((bfd *abfd, PTR filehdr));
-static PTR alpha_ecoff_mkobject_hook
-  PARAMS ((bfd *, PTR filehdr, PTR aouthdr));
-static void alpha_ecoff_swap_reloc_in
-  PARAMS ((bfd *, PTR, struct internal_reloc *));
-static void alpha_ecoff_swap_reloc_out
-  PARAMS ((bfd *, const struct internal_reloc *, PTR));
-static void alpha_adjust_reloc_in
-  PARAMS ((bfd *, const struct internal_reloc *, arelent *));
-static void alpha_adjust_reloc_out
-  PARAMS ((bfd *, const arelent *, struct internal_reloc *));
-static reloc_howto_type *alpha_bfd_reloc_type_lookup
-  PARAMS ((bfd *, bfd_reloc_code_real_type));
-static bfd_byte *alpha_ecoff_get_relocated_section_contents
-  PARAMS ((bfd *abfd, struct bfd_link_info *, struct bfd_link_order *,
-	   bfd_byte *data, bfd_boolean relocatable, asymbol **symbols));
-static bfd_vma alpha_convert_external_reloc
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, struct external_reloc *,
-	   struct ecoff_link_hash_entry *));
-static bfd_boolean alpha_relocate_section
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, PTR));
-static bfd_boolean alpha_adjust_headers
-  PARAMS ((bfd *, struct internal_filehdr *, struct internal_aouthdr *));
-static PTR alpha_ecoff_read_ar_hdr
-  PARAMS ((bfd *));
-static bfd *alpha_ecoff_get_elt_at_filepos
-  PARAMS ((bfd *, file_ptr));
-static bfd *alpha_ecoff_openr_next_archived_file
-  PARAMS ((bfd *, bfd *));
-static bfd *alpha_ecoff_get_elt_at_index
-  PARAMS ((bfd *, symindex));
+
 

 /* ECOFF has COFF sections, but the debugging information is stored in
    a completely different format.  ECOFF targets use some of the
@@ -128,18 +95,14 @@ static bfd *alpha_ecoff_get_elt_at_index
 

 /* How to process the various reloc types.  */
 
-static bfd_reloc_status_type reloc_nil
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
-
 static bfd_reloc_status_type
-reloc_nil (abfd, reloc, sym, data, sec, output_bfd, error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc ATTRIBUTE_UNUSED;
-     asymbol *sym ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *sec ATTRIBUTE_UNUSED;
-     bfd *output_bfd ATTRIBUTE_UNUSED;
-     char **error_message ATTRIBUTE_UNUSED;
+reloc_nil (bfd *abfd ATTRIBUTE_UNUSED,
+	   arelent *reloc ATTRIBUTE_UNUSED,
+	   asymbol *sym ATTRIBUTE_UNUSED,
+	   void * data ATTRIBUTE_UNUSED,
+	   asection *sec ATTRIBUTE_UNUSED,
+	   bfd *output_bfd ATTRIBUTE_UNUSED,
+	   char **error_message ATTRIBUTE_UNUSED)
 {
   return bfd_reloc_ok;
 }
@@ -438,8 +401,7 @@ static reloc_howto_type alpha_howto_table[] =
 /* Recognize an Alpha ECOFF file.  */
 
 static const bfd_target *
-alpha_ecoff_object_p (abfd)
-     bfd *abfd;
+alpha_ecoff_object_p (bfd *abfd)
 {
   static const bfd_target *ret;
 
@@ -477,9 +439,8 @@ alpha_ecoff_object_p (abfd)
 /* See whether the magic number matches.  */
 
 static bfd_boolean
-alpha_ecoff_bad_format_hook (abfd, filehdr)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     PTR filehdr;
+alpha_ecoff_bad_format_hook (bfd *abfd ATTRIBUTE_UNUSED,
+			     void * filehdr)
 {
   struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
 
@@ -498,13 +459,10 @@ alpha_ecoff_bad_format_hook (abfd, filehdr)
 /* This is a hook called by coff_real_object_p to create any backend
    specific information.  */
 
-static PTR
-alpha_ecoff_mkobject_hook (abfd, filehdr, aouthdr)
-     bfd *abfd;
-     PTR filehdr;
-     PTR aouthdr;
+static void *
+alpha_ecoff_mkobject_hook (bfd *abfd, void * filehdr, void * aouthdr)
 {
-  PTR ecoff;
+  void * ecoff;
 
   ecoff = _bfd_ecoff_mkobject_hook (abfd, filehdr, aouthdr);
 
@@ -534,10 +492,9 @@ alpha_ecoff_mkobject_hook (abfd, filehdr, aouthdr)
 /* Swap a reloc in.  */
 
 static void
-alpha_ecoff_swap_reloc_in (abfd, ext_ptr, intern)
-     bfd *abfd;
-     PTR ext_ptr;
-     struct internal_reloc *intern;
+alpha_ecoff_swap_reloc_in (bfd *abfd,
+			   void * ext_ptr,
+			   struct internal_reloc *intern)
 {
   const RELOC *ext = (RELOC *) ext_ptr;
 
@@ -582,10 +539,9 @@ alpha_ecoff_swap_reloc_in (abfd, ext_ptr, intern)
 /* Swap a reloc out.  */
 
 static void
-alpha_ecoff_swap_reloc_out (abfd, intern, dst)
-     bfd *abfd;
-     const struct internal_reloc *intern;
-     PTR dst;
+alpha_ecoff_swap_reloc_out (bfd *abfd,
+			    const struct internal_reloc *intern,
+			    void * dst)
 {
   RELOC *ext = (RELOC *) dst;
   long symndx;
@@ -637,10 +593,9 @@ alpha_ecoff_swap_reloc_out (abfd, intern, dst)
    this backend routine.  It must fill in the howto field.  */
 
 static void
-alpha_adjust_reloc_in (abfd, intern, rptr)
-     bfd *abfd;
-     const struct internal_reloc *intern;
-     arelent *rptr;
+alpha_adjust_reloc_in (bfd *abfd,
+		       const struct internal_reloc *intern,
+		       arelent *rptr)
 {
   if (intern->r_type > ALPHA_R_GPVALUE)
     {
@@ -729,10 +684,9 @@ alpha_adjust_reloc_in (abfd, intern, rptr)
    not need to undo.  */
 
 static void
-alpha_adjust_reloc_out (abfd, rel, intern)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     const arelent *rel;
-     struct internal_reloc *intern;
+alpha_adjust_reloc_out (bfd *abfd ATTRIBUTE_UNUSED,
+			const arelent *rel,
+			struct internal_reloc *intern)
 {
   switch (intern->r_type)
     {
@@ -771,14 +725,12 @@ alpha_adjust_reloc_out (abfd, rel, intern)
    assembler is going to handle this.  */
 
 static bfd_byte *
-alpha_ecoff_get_relocated_section_contents (abfd, link_info, link_order,
-					    data, relocatable, symbols)
-     bfd *abfd;
-     struct bfd_link_info *link_info;
-     struct bfd_link_order *link_order;
-     bfd_byte *data;
-     bfd_boolean relocatable;
-     asymbol **symbols;
+alpha_ecoff_get_relocated_section_contents (bfd *abfd,
+					    struct bfd_link_info *link_info,
+					    struct bfd_link_order *link_order,
+					    bfd_byte *data,
+					    bfd_boolean relocatable,
+					    asymbol **symbols)
 {
   bfd *input_bfd = link_order->u.indirect.section->owner;
   asection *input_section = link_order->u.indirect.section;
@@ -1195,9 +1147,8 @@ alpha_ecoff_get_relocated_section_contents (abfd, link_info, link_order,
 /* Get the howto structure for a generic reloc type.  */
 
 static reloc_howto_type *
-alpha_bfd_reloc_type_lookup (abfd, code)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     bfd_reloc_code_real_type code;
+alpha_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+			     bfd_reloc_code_real_type code)
 {
   int alpha_type;
 
@@ -1268,12 +1219,11 @@ alpha_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
    relocation amount.  */
 
 static bfd_vma
-alpha_convert_external_reloc (output_bfd, info, input_bfd, ext_rel, h)
-     bfd *output_bfd ATTRIBUTE_UNUSED;
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     struct external_reloc *ext_rel;
-     struct ecoff_link_hash_entry *h;
+alpha_convert_external_reloc (bfd *output_bfd ATTRIBUTE_UNUSED,
+			      struct bfd_link_info *info,
+			      bfd *input_bfd,
+			      struct external_reloc *ext_rel,
+			      struct ecoff_link_hash_entry *h)
 {
   unsigned long r_symndx;
   bfd_vma relocation;
@@ -1385,14 +1335,12 @@ alpha_convert_external_reloc (output_bfd, info, input_bfd, ext_rel, h)
    could be combined somehow.  */
 
 static bfd_boolean
-alpha_relocate_section (output_bfd, info, input_bfd, input_section,
-			contents, external_relocs)
-     bfd *output_bfd;
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     asection *input_section;
-     bfd_byte *contents;
-     PTR external_relocs;
+alpha_relocate_section (bfd *output_bfd,
+			struct bfd_link_info *info,
+			bfd *input_bfd,
+			asection *input_section,
+			bfd_byte *contents,
+			void * external_relocs)
 {
   asection **symndx_to_section, *lita_sec;
   struct ecoff_link_hash_entry **sym_hashes;
@@ -2042,10 +1990,9 @@ alpha_relocate_section (output_bfd, info, input_bfd, input_section,
    sets the dynamic bits in the file header.  */
 
 static bfd_boolean
-alpha_adjust_headers (abfd, fhdr, ahdr)
-     bfd *abfd;
-     struct internal_filehdr *fhdr;
-     struct internal_aouthdr *ahdr ATTRIBUTE_UNUSED;
+alpha_adjust_headers (bfd *abfd,
+		      struct internal_filehdr *fhdr,
+		      struct internal_aouthdr *ahdr ATTRIBUTE_UNUSED)
 {
   if ((abfd->flags & (DYNAMIC | EXEC_P)) == (DYNAMIC | EXEC_P))
     fhdr->f_flags |= F_ALPHA_CALL_SHARED;
@@ -2077,9 +2024,8 @@ alpha_adjust_headers (abfd, fhdr, ahdr)
 /* Read an archive header.  This is like the standard routine, but it
    also accepts ARFZMAG.  */
 
-static PTR
-alpha_ecoff_read_ar_hdr (abfd)
-     bfd *abfd;
+static void *
+alpha_ecoff_read_ar_hdr (bfd *abfd)
 {
   struct areltdata *ret;
   struct ar_hdr *h;
@@ -2103,16 +2049,14 @@ alpha_ecoff_read_ar_hdr (abfd)
       ret->parsed_size = H_GET_64 (abfd, ab);
     }
 
-  return (PTR) ret;
+  return ret;
 }
 
 /* Get an archive element at a specified file position.  This is where
    we uncompress the archive element if necessary.  */
 
 static bfd *
-alpha_ecoff_get_elt_at_filepos (archive, filepos)
-     bfd *archive;
-     file_ptr filepos;
+alpha_ecoff_get_elt_at_filepos (bfd *archive, file_ptr filepos)
 {
   bfd *nbfd = NULL;
   struct areltdata *tdata;
@@ -2225,7 +2169,7 @@ alpha_ecoff_get_elt_at_filepos (archive, filepos)
   nbfd->mtime = strtol (hdr->ar_date, (char **) NULL, 10);
 
   nbfd->flags |= BFD_IN_MEMORY;
-  nbfd->iostream = (PTR) bim;
+  nbfd->iostream = bim;
   nbfd->iovec = &_bfd_memory_iovec;
   nbfd->origin = 0;
   BFD_ASSERT (! nbfd->cacheable);
@@ -2243,9 +2187,7 @@ alpha_ecoff_get_elt_at_filepos (archive, filepos)
 /* Open the next archived file.  */
 
 static bfd *
-alpha_ecoff_openr_next_archived_file (archive, last_file)
-     bfd *archive;
-     bfd *last_file;
+alpha_ecoff_openr_next_archived_file (bfd *archive, bfd *last_file)
 {
   file_ptr filestart;
 
@@ -2291,13 +2233,13 @@ static const struct ecoff_backend_data alpha_ecoff_backend_data =
 {
   /* COFF backend structure.  */
   {
-    (void (*) PARAMS ((bfd *,PTR,int,int,int,int,PTR))) bfd_void, /* aux_in */
-    (void (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* sym_in */
-    (void (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* lineno_in */
-    (unsigned (*) PARAMS ((bfd *,PTR,int,int,int,int,PTR)))bfd_void,/*aux_out*/
-    (unsigned (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* sym_out */
-    (unsigned (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* lineno_out */
-    (unsigned (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* reloc_out */
+    (void (*) (bfd *,void *,int,int,int,int,void *)) bfd_void, /* aux_in */
+    (void (*) (bfd *,void *,void *)) bfd_void, /* sym_in */
+    (void (*) (bfd *,void *,void *)) bfd_void, /* lineno_in */
+    (unsigned (*) (bfd *,void *,int,int,int,int,void *)) bfd_void,/*aux_out*/
+    (unsigned (*) (bfd *,void *,void *)) bfd_void, /* sym_out */
+    (unsigned (*) (bfd *,void *,void *)) bfd_void, /* lineno_out */
+    (unsigned (*) (bfd *,void *,void *)) bfd_void, /* reloc_out */
     alpha_ecoff_swap_filehdr_out, alpha_ecoff_swap_aouthdr_out,
     alpha_ecoff_swap_scnhdr_out,
     FILHSZ, AOUTSZ, SCNHSZ, 0, 0, 0, 0, FILNMLEN, TRUE, 
@@ -2448,5 +2390,5 @@ const bfd_target ecoffalpha_little_vec =
 
   NULL,
 
-  (PTR) &alpha_ecoff_backend_data
+  & alpha_ecoff_backend_data
 };
diff --git a/bfd/coff-apollo.c b/bfd/coff-apollo.c
index e177099..46cf5ea 100644
--- a/bfd/coff-apollo.c
+++ b/bfd/coff-apollo.c
@@ -1,6 +1,6 @@
 /* BFD back-end for Apollo 68000 COFF binaries.
    Copyright 1990, 1991, 1992, 1993, 1994, 1999, 2000, 2001, 2002, 2003,
-   2005, 2007, 2008  Free Software Foundation, Inc.
+   2005, 2007, 2008, 2012  Free Software Foundation, Inc.
    By Troy Rollo (troy at cbme.unsw.edu.au)
    Based on m68k standard COFF version Written by Cygnus Support.
 
@@ -52,14 +52,12 @@ reloc_howto_type apollocoff_howto_table[] =
 
 /* Turn a howto into a reloc number.  */
 
-extern void apollo_rtype2howto PARAMS ((arelent *, int));
-extern int  apollo_howto2rtype PARAMS ((reloc_howto_type *));
+extern void apollo_rtype2howto (arelent *, int);
+extern int  apollo_howto2rtype (reloc_howto_type *);
 #ifndef ONLY_DECLARE_RELOCS
 
 void
-apollo_rtype2howto (internal, relocentry)
-     arelent *internal;
-     int relocentry;
+apollo_rtype2howto (arelent *internal, int relocentry)
 {
   switch (relocentry)
     {
@@ -74,8 +72,7 @@ apollo_rtype2howto (internal, relocentry)
 }
 
 int
-apollo_howto2rtype (internal)
-     reloc_howto_type *internal;
+apollo_howto2rtype (reloc_howto_type *internal)
 {
   if (internal->pc_relative)
     {
diff --git a/bfd/coff-arm.c b/bfd/coff-arm.c
index bdadfb2..4cdf1ac 100644
--- a/bfd/coff-arm.c
+++ b/bfd/coff-arm.c
@@ -1,6 +1,6 @@
 /* BFD back-end for ARM COFF files.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012
    Free Software Foundation, Inc.
    Written by Cygnus Support.
 
@@ -599,7 +599,7 @@ aoutarm_fix_pcrel_26 (bfd *abfd,
   bfd_reloc_status_type flag = bfd_reloc_ok;
 
   /* If this is an undefined symbol, return error.  */
-  if (symbol->section == &bfd_und_section
+  if (bfd_is_und_section (symbol->section)
       && (symbol->flags & BSF_WEAK) == 0)
     return output_bfd ? bfd_reloc_continue : bfd_reloc_undefined;
 
@@ -687,7 +687,7 @@ coff_thumb_pcrel_common (bfd *abfd,
     }
 
   /* If this is an undefined symbol, return error.  */
-  if (symbol->section == &bfd_und_section
+  if (bfd_is_und_section (symbol->section)
       && (symbol->flags & BSF_WEAK) == 0)
     return output_bfd ? bfd_reloc_continue : bfd_reloc_undefined;
 
diff --git a/bfd/coff-aux.c b/bfd/coff-aux.c
index 84805a8..852f585 100644
--- a/bfd/coff-aux.c
+++ b/bfd/coff-aux.c
@@ -1,5 +1,5 @@
 /* BFD back-end for Apple M68K COFF A/UX 3.x files.
-   Copyright 1996, 1997, 2000, 2002, 2005, 2007, 2008, 2011
+   Copyright 1996, 1997, 2000, 2002, 2005, 2007, 2008, 2011, 2012
    Free Software Foundation, Inc.
    Written by Richard Henderson <rth at tamu.edu>.
 
@@ -42,12 +42,12 @@
 #include "sysdep.h"
 #include "bfd.h"
 
-static bfd_boolean coff_m68k_aux_link_add_one_symbol
-  PARAMS ((struct bfd_link_info *, bfd *, const char *, flagword,
-           asection *, bfd_vma, const char *, bfd_boolean, bfd_boolean,
-           struct bfd_link_hash_entry **));
-
 #define coff_link_add_one_symbol coff_m68k_aux_link_add_one_symbol
+static bfd_boolean
+coff_m68k_aux_link_add_one_symbol
+  (struct bfd_link_info *, bfd *, const char *, flagword, asection *,
+   bfd_vma, const char *, bfd_boolean, bfd_boolean,
+   struct bfd_link_hash_entry **);
 
 #ifndef bfd_pe_print_pdata
 #define bfd_pe_print_pdata	NULL
@@ -63,18 +63,16 @@ static bfd_boolean coff_m68k_aux_link_add_one_symbol
    what you include in the shared object.  */
 
 static bfd_boolean
-coff_m68k_aux_link_add_one_symbol (info, abfd, name, flags, section, value,
-				   string, copy, collect, hashp)
-     struct bfd_link_info *info;
-     bfd *abfd;
-     const char *name;
-     flagword flags;
-     asection *section;
-     bfd_vma value;
-     const char *string;
-     bfd_boolean copy;
-     bfd_boolean collect;
-     struct bfd_link_hash_entry **hashp;
+coff_m68k_aux_link_add_one_symbol (struct bfd_link_info *info,
+				   bfd *abfd,
+				   const char *name,
+				   flagword flags,
+				   asection *section,
+				   bfd_vma value,
+				   const char *string,
+				   bfd_boolean copy,
+				   bfd_boolean collect,
+				   struct bfd_link_hash_entry **hashp)
 {
   struct bfd_link_hash_entry *h;
 
diff --git a/bfd/coff-h8300.c b/bfd/coff-h8300.c
index e2a10a6..0f1de57 100644
--- a/bfd/coff-h8300.c
+++ b/bfd/coff-h8300.c
@@ -1,6 +1,6 @@
 /* BFD back-end for Renesas H8/300 COFF binaries.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2012
    Free Software Foundation, Inc.
    Written by Steve Chamberlain, <sac at cygnus.com>.
 
@@ -60,28 +60,6 @@ struct funcvec_hash_table
     unsigned int offset;
   };
 
-static struct bfd_hash_entry *
-funcvec_hash_newfunc
-  (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
-
-static bfd_reloc_status_type special
-  (bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **);
-static int select_reloc
-  (reloc_howto_type *);
-static void rtype2howto
-  (arelent *, struct internal_reloc *);
-static void reloc_processing
-  (arelent *, struct internal_reloc *, asymbol **, bfd *, asection *);
-static bfd_boolean h8300_symbol_address_p
-  (bfd *, asection *, bfd_vma);
-static int h8300_reloc16_estimate
-  (bfd *, asection *, arelent *, unsigned int,
-   struct bfd_link_info *);
-static void h8300_reloc16_extra_cases
-  (bfd *, struct bfd_link_info *, struct bfd_link_order *, arelent *,
-   bfd_byte *, unsigned int *, unsigned int *);
-static bfd_boolean h8300_bfd_link_add_symbols
-  (bfd *, struct bfd_link_info *);
 
 /* To lookup a value in the function vector hash table.  */
 #define funcvec_hash_lookup(table, string, create, copy) \
@@ -224,13 +202,13 @@ h8300_coff_link_hash_table_create (bfd *abfd)
    the addend until the final link.  */
 
 static bfd_reloc_status_type
-special (bfd *abfd ATTRIBUTE_UNUSED,
-	 arelent *reloc_entry ATTRIBUTE_UNUSED,
-	 asymbol *symbol ATTRIBUTE_UNUSED,
-	 PTR data ATTRIBUTE_UNUSED,
-	 asection *input_section ATTRIBUTE_UNUSED,
-	 bfd *output_bfd,
-	 char **error_message ATTRIBUTE_UNUSED)
+special (bfd *      abfd ATTRIBUTE_UNUSED,
+	 arelent *  reloc_entry ATTRIBUTE_UNUSED,
+	 asymbol *  symbol ATTRIBUTE_UNUSED,
+	 void *     data ATTRIBUTE_UNUSED,
+	 asection * input_section ATTRIBUTE_UNUSED,
+	 bfd *      output_bfd,
+	 char **    error_message ATTRIBUTE_UNUSED)
 {
   if (output_bfd == (bfd *) NULL)
     return bfd_reloc_continue;
@@ -240,7 +218,8 @@ special (bfd *abfd ATTRIBUTE_UNUSED,
   return bfd_reloc_ok;
 }
 
-static reloc_howto_type howto_table[] = {
+static reloc_howto_type howto_table[] =
+{
   HOWTO (R_RELBYTE, 0, 0, 8, FALSE, 0, complain_overflow_bitfield, special, "8", FALSE, 0x000000ff, 0x000000ff, FALSE),
   HOWTO (R_RELWORD, 0, 1, 16, FALSE, 0, complain_overflow_bitfield, special, "16", FALSE, 0x0000ffff, 0x0000ffff, FALSE),
   HOWTO (R_RELLONG, 0, 2, 32, FALSE, 0, complain_overflow_bitfield, special, "32", FALSE, 0xffffffff, 0xffffffff, FALSE),
diff --git a/bfd/coff-h8500.c b/bfd/coff-h8500.c
index 139a8ed..1fae964 100644
--- a/bfd/coff-h8500.c
+++ b/bfd/coff-h8500.c
@@ -1,6 +1,6 @@
 /* BFD back-end for Renesas H8/500 COFF binaries.
    Copyright 1993, 1994, 1995, 1997, 1999, 2000, 2001, 2002, 2003, 2004,
-   2005, 2007, 2008  Free Software Foundation, Inc.
+   2005, 2007, 2008, 2012  Free Software Foundation, Inc.
    Contributed by Cygnus Support.
    Written by Steve Chamberlain, <sac at cygnus.com>.
 
@@ -29,10 +29,6 @@
 #include "coff/internal.h"
 #include "libcoff.h"
 
-static int  coff_h8500_select_reloc PARAMS ((reloc_howto_type *));
-static void rtype2howto      PARAMS ((arelent *, struct internal_reloc *));
-static void reloc_processing PARAMS ((arelent *, struct internal_reloc *, asymbol **, bfd *, asection *));
-static void extra_case       PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_order *, arelent *, bfd_byte *, unsigned int *, unsigned int *));
 
 #define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (1)
 
@@ -73,8 +69,7 @@ HOWTO (R_H8500_HIGH16, 0, 1, 8, FALSE, 0,
 /* Turn a howto into a reloc number.  */
 
 static int
-coff_h8500_select_reloc (howto)
-     reloc_howto_type *howto;
+coff_h8500_select_reloc (reloc_howto_type *howto)
 {
   return howto->type;
 }
@@ -96,9 +91,7 @@ coff_h8500_select_reloc (howto)
 /* Code to turn a r_type into a howto ptr, uses the above howto table.  */
 
 static void
-rtype2howto (internal, dst)
-     arelent * internal;
-     struct internal_reloc *dst;
+rtype2howto (arelent * internal, struct internal_reloc *dst)
 {
   switch (dst->r_type)
     {
@@ -145,12 +138,12 @@ rtype2howto (internal, dst)
 #define RELOC_PROCESSING(relent,reloc,symbols,abfd,section) \
  reloc_processing(relent, reloc, symbols, abfd, section)
 
-static void reloc_processing (relent, reloc, symbols, abfd, section)
-     arelent * relent;
-     struct internal_reloc *reloc;
-     asymbol ** symbols;
-     bfd * abfd;
-     asection * section;
+static void
+reloc_processing (arelent * relent,
+		  struct internal_reloc *reloc,
+		  asymbol ** symbols,
+		  bfd * abfd,
+		  asection * section)
 {
   relent->address = reloc->r_vaddr;
   rtype2howto (relent, reloc);
@@ -165,14 +158,13 @@ static void reloc_processing (relent, reloc, symbols, abfd, section)
 }
 
 static void
-extra_case (in_abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr)
-     bfd *in_abfd;
-     struct bfd_link_info *link_info;
-     struct bfd_link_order *link_order;
-     arelent *reloc;
-     bfd_byte *data;
-     unsigned int *src_ptr;
-     unsigned int *dst_ptr;
+extra_case (bfd *in_abfd,
+	    struct bfd_link_info *link_info,
+	    struct bfd_link_order *link_order,
+	    arelent *reloc,
+	    bfd_byte *data,
+	    unsigned int *src_ptr,
+	    unsigned int *dst_ptr)
 {
   bfd_byte *d = data+*dst_ptr;
   asection *input_section = link_order->u.indirect.section;
diff --git a/bfd/coff-i386.c b/bfd/coff-i386.c
index 2f17a55..f69f502 100644
--- a/bfd/coff-i386.c
+++ b/bfd/coff-i386.c
@@ -1,6 +1,6 @@
 /* BFD back-end for Intel 386 COFF files.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
+   2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
    Written by Cygnus Support.
 
@@ -43,8 +43,6 @@
 
 #include "libcoff.h"
 
-static bfd_reloc_status_type coff_i386_reloc
-  (bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **);
 static reloc_howto_type *coff_i386_rtype_to_howto
   (bfd *, asection *, struct internal_reloc *,
    struct coff_link_hash_entry *, struct internal_syment *,
@@ -67,15 +65,13 @@ static reloc_howto_type *coff_i386_reloc_type_lookup
    reloc type to make any required adjustments.  */
 
 static bfd_reloc_status_type
-coff_i386_reloc (abfd, reloc_entry, symbol, data, input_section, output_bfd,
-		 error_message)
-     bfd *abfd;
-     arelent *reloc_entry;
-     asymbol *symbol;
-     PTR data;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+coff_i386_reloc (bfd *abfd,
+		 arelent *reloc_entry,
+		 asymbol *symbol,
+		 void * data,
+		 asection *input_section ATTRIBUTE_UNUSED,
+		 bfd *output_bfd,
+		 char **error_message ATTRIBUTE_UNUSED)
 {
   symvalue diff;
 
@@ -189,11 +185,8 @@ coff_i386_reloc (abfd, reloc_entry, symbol, data, input_section, output_bfd,
 /* Return TRUE if this relocation should appear in the output .reloc
    section.  */
 
-static bfd_boolean in_reloc_p PARAMS ((bfd *, reloc_howto_type *));
-
-static bfd_boolean in_reloc_p (abfd, howto)
-     bfd * abfd ATTRIBUTE_UNUSED;
-     reloc_howto_type *howto;
+static bfd_boolean in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED,
+			       reloc_howto_type *howto)
 {
   return ! howto->pc_relative && howto->type != R_IMAGEBASE
 	 && howto->type != R_SECREL32;
@@ -413,22 +406,15 @@ static reloc_howto_type howto_table[] =
    and the regular routine is that we don't want to do anything for a
    relocatable link.  */
 
-static bfd_boolean coff_pe_i386_relocate_section
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
-	   struct internal_reloc *, struct internal_syment *, asection **));
-
 static bfd_boolean
-coff_pe_i386_relocate_section (output_bfd, info, input_bfd,
-			       input_section, contents, relocs, syms,
-			       sections)
-     bfd *output_bfd;
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     asection *input_section;
-     bfd_byte *contents;
-     struct internal_reloc *relocs;
-     struct internal_syment *syms;
-     asection **sections;
+coff_pe_i386_relocate_section (bfd *output_bfd,
+			       struct bfd_link_info *info,
+			       bfd *input_bfd,
+			       asection *input_section,
+			       bfd_byte *contents,
+			       struct internal_reloc *relocs,
+			       struct internal_syment *syms,
+			       asection **sections)
 {
   if (info->relocatable)
     return TRUE;
@@ -445,13 +431,12 @@ coff_pe_i386_relocate_section (output_bfd, info, input_bfd,
 /* Convert an rtype to howto for the COFF backend linker.  */
 
 static reloc_howto_type *
-coff_i386_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     asection *sec;
-     struct internal_reloc *rel;
-     struct coff_link_hash_entry *h;
-     struct internal_syment *sym;
-     bfd_vma *addendp;
+coff_i386_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+			  asection *sec,
+			  struct internal_reloc *rel,
+			  struct coff_link_hash_entry *h,
+			  struct internal_syment *sym,
+			  bfd_vma *addendp)
 {
   reloc_howto_type *howto;
 
@@ -528,8 +513,8 @@ coff_i386_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
     {
       bfd_vma osect_vma;
 
-      if (h && (h->type == bfd_link_hash_defined
-		|| h->type == bfd_link_hash_defweak))
+      if (h && (h->root.type == bfd_link_hash_defined
+		|| h->root.type == bfd_link_hash_defweak))
 	osect_vma = h->root.u.def.section->output_section->vma;
       else
 	{
@@ -556,9 +541,8 @@ coff_i386_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
 #define coff_bfd_reloc_name_lookup coff_i386_reloc_name_lookup
 
 static reloc_howto_type *
-coff_i386_reloc_type_lookup (abfd, code)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     bfd_reloc_code_real_type code;
+coff_i386_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+			     bfd_reloc_code_real_type code)
 {
   switch (code)
     {
@@ -608,13 +592,8 @@ coff_i386_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
    a leading dot for local labels, so if TARGET_UNDERSCORE is defined
    we treat all symbols starting with L as local.  */
 
-static bfd_boolean coff_i386_is_local_label_name
-  PARAMS ((bfd *, const char *));
-
 static bfd_boolean
-coff_i386_is_local_label_name (abfd, name)
-     bfd *abfd;
-     const char *name;
+coff_i386_is_local_label_name (bfd *abfd, const char *name)
 {
   if (name[0] == 'L')
     return TRUE;
diff --git a/bfd/coff-i960.c b/bfd/coff-i960.c
index 928315f..5205caf 100644
--- a/bfd/coff-i960.c
+++ b/bfd/coff-i960.c
@@ -1,6 +1,6 @@
 /* BFD back-end for Intel 960 COFF files.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1997, 1999, 2000, 2001,
-   2002, 2003, 2004, 2005, 2007, 2008, 2009, 2011
+   2002, 2003, 2004, 2005, 2007, 2008, 2009, 2011, 2012
    Free Software Foundation, Inc.
    Written by Cygnus Support.
 
@@ -36,22 +36,6 @@
 
 #include "libcoff.h"		/* To allow easier abstraction-breaking.  */
 
-static bfd_boolean coff_i960_is_local_label_name
-  PARAMS ((bfd *, const char *));
-static bfd_reloc_status_type optcall_callback
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
-static bfd_reloc_status_type coff_i960_relocate
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
-static reloc_howto_type *coff_i960_reloc_type_lookup
-  PARAMS ((bfd *, bfd_reloc_code_real_type));
-static bfd_boolean coff_i960_start_final_link
-  PARAMS ((bfd *, struct bfd_link_info *));
-static bfd_boolean coff_i960_relocate_section
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
-	   struct internal_reloc *, struct internal_syment *, asection **));
-static bfd_boolean coff_i960_adjust_symndx
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *,
-	   struct internal_reloc *, bfd_boolean *));
 
 #define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (3)
 #define COFF_ALIGN_IN_SECTION_HEADER 1
@@ -68,9 +52,7 @@ static bfd_boolean coff_i960_adjust_symndx
 /* This set of local label names is taken from gas.  */
 
 static bfd_boolean
-coff_i960_is_local_label_name (abfd, name)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     const char *name;
+coff_i960_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED, const char *name)
 {
   return (name[0] == 'L'
 	  || (name[0] == '.'
@@ -108,15 +90,13 @@ coff_i960_is_local_label_name (abfd, name)
 #define BAL_MASK 0x00ffffff
 
 static bfd_reloc_status_type
-optcall_callback (abfd, reloc_entry, symbol_in, data,
-		  input_section, ignore_bfd, error_message)
-     bfd *abfd;
-     arelent *reloc_entry;
-     asymbol *symbol_in;
-     PTR data;
-     asection *input_section;
-     bfd *ignore_bfd ATTRIBUTE_UNUSED;
-     char **error_message;
+optcall_callback (bfd *abfd,
+		  arelent *reloc_entry,
+		  asymbol *symbol_in,
+		  void * data,
+		  asection *input_section,
+		  bfd *ignore_bfd ATTRIBUTE_UNUSED,
+		  char **error_message)
 {
   /* This item has already been relocated correctly, but we may be
    * able to patch in yet better code - done by digging out the
@@ -198,15 +178,13 @@ optcall_callback (abfd, reloc_entry, symbol_in, data,
    COFF specific backend linker.  */
 
 static bfd_reloc_status_type
-coff_i960_relocate (abfd, reloc_entry, symbol, data, input_section,
-		    output_bfd, error_message)
-     bfd *abfd;
-     arelent *reloc_entry;
-     asymbol *symbol;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+coff_i960_relocate (bfd *abfd,
+		    arelent *reloc_entry,
+		    asymbol *symbol,
+		    void * data ATTRIBUTE_UNUSED,
+		    asection *input_section ATTRIBUTE_UNUSED,
+		    bfd *output_bfd,
+		    char **error_message ATTRIBUTE_UNUSED)
 {
   asection *osec;
 
@@ -261,11 +239,11 @@ coff_i960_relocate (abfd, reloc_entry, symbol, data, input_section,
       if (coff_section_data (output_bfd, osec) == NULL)
 	{
 	  bfd_size_type amt = sizeof (struct coff_section_tdata);
-	  osec->used_by_bfd = (PTR) bfd_zalloc (abfd, amt);
+	  osec->used_by_bfd = bfd_zalloc (abfd, amt);
 	  if (osec->used_by_bfd == NULL)
 	    return bfd_reloc_overflow;
 	}
-      coff_section_data (output_bfd, osec)->tdata = (PTR) syms;
+      coff_section_data (output_bfd, osec)->tdata = syms;
     }
 
   /* Let bfd_perform_relocation do its thing, which will include
@@ -285,9 +263,8 @@ static reloc_howto_type howto_optcall =
 	 optcall_callback, "optcall", TRUE, 0x00ffffff, 0x00ffffff, 0);
 
 static reloc_howto_type *
-coff_i960_reloc_type_lookup (abfd, code)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     bfd_reloc_code_real_type code;
+coff_i960_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+			     bfd_reloc_code_real_type code)
 {
   switch (code)
     {
@@ -341,9 +318,7 @@ coff_i960_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
    necessary symbols.  */
 
 static bfd_boolean
-coff_i960_start_final_link (abfd, info)
-     bfd *abfd;
-     struct bfd_link_info *info;
+coff_i960_start_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   bfd_size_type symesz = bfd_coff_symesz (abfd);
   asection *o;
@@ -370,7 +345,7 @@ coff_i960_start_final_link (abfd, info)
       isym.n_sclass = C_STAT;
       isym.n_numaux = 0;
 
-      bfd_coff_swap_sym_out (abfd, (PTR) &isym, (PTR) esym);
+      bfd_coff_swap_sym_out (abfd, &isym, esym);
 
       if (bfd_bwrite (esym, symesz, abfd) != symesz)
 	{
@@ -389,16 +364,14 @@ coff_i960_start_final_link (abfd, info)
 /* The reloc processing routine for the optimized COFF linker.  */
 
 static bfd_boolean
-coff_i960_relocate_section (output_bfd, info, input_bfd, input_section,
-			    contents, relocs, syms, sections)
-     bfd *output_bfd ATTRIBUTE_UNUSED;
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     asection *input_section;
-     bfd_byte *contents;
-     struct internal_reloc *relocs;
-     struct internal_syment *syms;
-     asection **sections;
+coff_i960_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
+			    struct bfd_link_info *info,
+			    bfd *input_bfd,
+			    asection *input_section,
+			    bfd_byte *contents,
+			    struct internal_reloc *relocs,
+			    struct internal_syment *syms,
+			    asection **sections)
 {
   struct internal_reloc *rel;
   struct internal_reloc *relend;
@@ -530,9 +503,9 @@ coff_i960_relocate_section (output_bfd, info, input_bfd, input_section,
 		    BFD_ASSERT (sym->n_numaux == 2);
 		    esyms = (bfd_byte *) obj_coff_external_syms (input_bfd);
 		    esyms += (symndx + 2) * bfd_coff_symesz (input_bfd);
-		    bfd_coff_swap_aux_in (input_bfd, (PTR) esyms, sym->n_type,
+		    bfd_coff_swap_aux_in (input_bfd, esyms, sym->n_type,
 					  sym->n_sclass, 1, sym->n_numaux,
-					  (PTR) &aux);
+					  &aux);
 		    olf = aux.x_bal.x_balntry;
 		  }
 
@@ -601,13 +574,12 @@ coff_i960_relocate_section (output_bfd, info, input_bfd, input_section,
    for the section.  */
 
 static bfd_boolean
-coff_i960_adjust_symndx (obfd, info, ibfd, sec, irel, adjustedp)
-     bfd *obfd ATTRIBUTE_UNUSED;
-     struct bfd_link_info *info ATTRIBUTE_UNUSED;
-     bfd *ibfd;
-     asection *sec ATTRIBUTE_UNUSED;
-     struct internal_reloc *irel;
-     bfd_boolean *adjustedp;
+coff_i960_adjust_symndx (bfd *obfd ATTRIBUTE_UNUSED,
+			 struct bfd_link_info *info ATTRIBUTE_UNUSED,
+			 bfd *ibfd,
+			 asection *sec ATTRIBUTE_UNUSED,
+			 struct internal_reloc *irel,
+			 bfd_boolean *adjustedp)
 {
   struct coff_link_hash_entry *h;
 
diff --git a/bfd/coff-ia64.c b/bfd/coff-ia64.c
index 86e7617..3f172bd 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, 2000, 2001, 2002, 2005, 2007, 2008, 2009, 2011
+   Copyright 1999, 2000, 2001, 2002, 2005, 2007, 2008, 2009, 2011, 2012
    Free Software Foundation, Inc.
    Contributed by David Mosberger <davidm at hpl.hp.com>
 
@@ -54,12 +54,9 @@ static reloc_howto_type howto_table[] =
 /* Return TRUE if this relocation should
    appear in the output .reloc section.  */
 
-static bfd_boolean in_reloc_p PARAMS ((bfd *, reloc_howto_type *));
-
 static bfd_boolean
-in_reloc_p(abfd, howto)
-     bfd * abfd ATTRIBUTE_UNUSED;
-     reloc_howto_type *howto ATTRIBUTE_UNUSED;
+in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED,
+	    reloc_howto_type *howto ATTRIBUTE_UNUSED)
 {
   return FALSE;			/* We don't do relocs for now...  */
 }
@@ -71,11 +68,8 @@ in_reloc_p(abfd, howto)
 
 #include "coffcode.h"
 
-static const bfd_target *ia64coff_object_p PARAMS ((bfd *));
-
 static const bfd_target *
-ia64coff_object_p (abfd)
-     bfd *abfd;
+ia64coff_object_p (bfd *abfd)
 {
 #ifdef COFF_IMAGE_WITH_PE
   {
diff --git a/bfd/coff-m68k.c b/bfd/coff-m68k.c
index b53cc5f..5287beb 100644
--- a/bfd/coff-m68k.c
+++ b/bfd/coff-m68k.c
@@ -1,6 +1,6 @@
 /* BFD back-end for Motorola 68000 COFF binaries.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999,
-   2000, 2001, 2002, 2003, 2005, 2007, 2008
+   2000, 2001, 2002, 2003, 2005, 2007, 2008, 2012
    Free Software Foundation, Inc.
    Written by Cygnus Support.
 
@@ -60,25 +60,19 @@
 #define RELOC_SPECIAL_FN 0
 #else
 static bfd_reloc_status_type m68kcoff_common_addend_special_fn
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
-static reloc_howto_type *m68kcoff_common_addend_rtype_to_howto
-  PARAMS ((bfd *, asection *, struct internal_reloc *,
-	   struct coff_link_hash_entry *, struct internal_syment *,
-	   bfd_vma *));
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+
 #define RELOC_SPECIAL_FN m68kcoff_common_addend_special_fn
 #endif
 
-static bfd_boolean m68k_coff_is_local_label_name
-  PARAMS ((bfd *, const char *));
+static bfd_boolean m68k_coff_is_local_label_name (bfd *, const char *);
 
 /* On the delta, a symbol starting with L% is local.  We won't see
    such a symbol on other platforms, so it should be safe to always
    consider it local here.  */
 
 static bfd_boolean
-m68k_coff_is_local_label_name (abfd, name)
-     bfd *abfd;
-     const char *name;
+m68k_coff_is_local_label_name (bfd *abfd, const char *name)
 {
   if (name[0] == 'L' && name[1] == '%')
     return TRUE;
@@ -121,12 +115,11 @@ reloc_howto_type m68kcoff_howto_table[] =
 /* Turn a howto into a reloc number */
 
 #ifdef ONLY_DECLARE_RELOCS
-extern void m68k_rtype2howto PARAMS ((arelent *internal, int relocentry));
-extern int m68k_howto2rtype PARAMS ((reloc_howto_type *));
-extern reloc_howto_type *m68k_reloc_type_lookup
-  PARAMS ((bfd *, bfd_reloc_code_real_type));
-extern reloc_howto_type *m68k_reloc_name_lookup
-  PARAMS ((bfd *, const char *));
+extern void m68k_rtype2howto (arelent *internal, int relocentry);
+extern int m68k_howto2rtype (reloc_howto_type *);
+extern reloc_howto_type * m68k_reloc_type_lookup
+  (bfd *, bfd_reloc_code_real_type);
+extern reloc_howto_type * m68k_reloc_name_lookup (bfd *, const char *);
 #else
 
 #ifdef STATIC_RELOCS
@@ -135,16 +128,13 @@ extern reloc_howto_type *m68k_reloc_name_lookup
 #define STAT_REL
 #endif
 
-STAT_REL reloc_howto_type * m68k_reloc_type_lookup PARAMS ((bfd *, bfd_reloc_code_real_type));
-STAT_REL reloc_howto_type * m68k_reloc_name_lookup PARAMS ((bfd *, const char *));
-STAT_REL int m68k_howto2rtype PARAMS ((reloc_howto_type *));
-STAT_REL void m68k_rtype2howto PARAMS ((arelent *, int));
-
+STAT_REL void m68k_rtype2howto (arelent *, int);
+STAT_REL int  m68k_howto2rtype (reloc_howto_type *);
+STAT_REL reloc_howto_type * m68k_reloc_type_lookup (bfd *, bfd_reloc_code_real_type);
+STAT_REL reloc_howto_type * m68k_reloc_name_lookup (bfd *, const char *);
 
 STAT_REL void
-m68k_rtype2howto(internal, relocentry)
-     arelent *internal;
-     int relocentry;
+m68k_rtype2howto (arelent *internal, int relocentry)
 {
   switch (relocentry)
     {
@@ -159,8 +149,7 @@ m68k_rtype2howto(internal, relocentry)
 }
 
 STAT_REL int
-m68k_howto2rtype (internal)
-     reloc_howto_type *internal;
+m68k_howto2rtype (reloc_howto_type * internal)
 {
   if (internal->pc_relative)
     {
@@ -184,9 +173,8 @@ m68k_howto2rtype (internal)
 }
 
 STAT_REL reloc_howto_type *
-m68k_reloc_type_lookup (abfd, code)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     bfd_reloc_code_real_type code;
+m68k_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+			bfd_reloc_code_real_type code)
 {
   switch (code)
     {
@@ -235,19 +223,13 @@ m68k_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
 
 #define coff_rtype_to_howto m68kcoff_rtype_to_howto
 
-static reloc_howto_type *m68kcoff_rtype_to_howto
-  PARAMS ((bfd *, asection *, struct internal_reloc *,
-	   struct coff_link_hash_entry *, struct internal_syment *,
-	   bfd_vma *));
-
 static reloc_howto_type *
-m68kcoff_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     asection *sec;
-     struct internal_reloc *rel;
-     struct coff_link_hash_entry *h ATTRIBUTE_UNUSED;
-     struct internal_syment *sym ATTRIBUTE_UNUSED;
-     bfd_vma *addendp;
+m68kcoff_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+			 asection *sec,
+			 struct internal_reloc *rel,
+			 struct coff_link_hash_entry *h ATTRIBUTE_UNUSED,
+			 struct internal_syment *sym ATTRIBUTE_UNUSED,
+			 bfd_vma *addendp)
 {
   arelent relent;
   reloc_howto_type *howto;
@@ -279,15 +261,13 @@ m68kcoff_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
    reloc type to make any required adjustments.  */
 
 static bfd_reloc_status_type
-m68kcoff_common_addend_special_fn (abfd, reloc_entry, symbol, data,
-				   input_section, output_bfd, error_message)
-     bfd *abfd;
-     arelent *reloc_entry;
-     asymbol *symbol;
-     PTR data;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+m68kcoff_common_addend_special_fn (bfd *abfd,
+				   arelent *reloc_entry,
+				   asymbol *symbol,
+				   void * data,
+				   asection *input_section ATTRIBUTE_UNUSED,
+				   bfd *output_bfd,
+				   char **error_message ATTRIBUTE_UNUSED)
 {
   symvalue diff;
 
@@ -402,13 +382,12 @@ m68kcoff_common_addend_special_fn (abfd, reloc_entry, symbol, data,
    adjust common symbols.  */
 
 static reloc_howto_type *
-m68kcoff_common_addend_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     asection *sec;
-     struct internal_reloc *rel;
-     struct coff_link_hash_entry *h;
-     struct internal_syment *sym;
-     bfd_vma *addendp;
+m68kcoff_common_addend_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+				       asection *sec,
+				       struct internal_reloc *rel,
+				       struct coff_link_hash_entry *h,
+				       struct internal_syment *sym,
+				       bfd_vma *addendp)
 {
   arelent relent;
   reloc_howto_type *howto;
@@ -456,12 +435,11 @@ m68kcoff_common_addend_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
    objects, and before the final_link entry point is called.  */
 
 bfd_boolean
-bfd_m68k_coff_create_embedded_relocs (abfd, info, datasec, relsec, errmsg)
-     bfd *abfd;
-     struct bfd_link_info *info;
-     asection *datasec;
-     asection *relsec;
-     char **errmsg;
+bfd_m68k_coff_create_embedded_relocs (bfd *abfd,
+				      struct bfd_link_info *info,
+				      asection *datasec,
+				      asection *relsec,
+				      char **errmsg)
 {
   char *extsyms;
   bfd_size_type symesz;
diff --git a/bfd/coff-m88k.c b/bfd/coff-m88k.c
index 3855b52..e51bd05 100644
--- a/bfd/coff-m88k.c
+++ b/bfd/coff-m88k.c
@@ -1,6 +1,6 @@
 /* BFD back-end for Motorola 88000 COFF "Binary Compatibility Standard" files.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1997, 1998, 1999, 2000,
-   2001, 2002, 2003, 2005, 2007, 2008   Free Software Foundation, Inc.
+   2001, 2002, 2003, 2005, 2007, 2008, 2012   Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -28,12 +28,8 @@
 #include "coff/internal.h"
 #include "libcoff.h"
 
-static bfd_boolean m88k_is_local_label_name PARAMS ((bfd *, const char *));
 static bfd_reloc_status_type m88k_special_reloc
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
-static void rtype2howto PARAMS ((arelent *, struct internal_reloc *));
-static void reloc_processing
-  PARAMS ((arelent *, struct internal_reloc *, asymbol **, bfd *, asection *));
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 
 #define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (3)
 
@@ -45,23 +41,19 @@ static void reloc_processing
 #define coff_bfd_is_local_label_name m88k_is_local_label_name
 
 static bfd_boolean
-m88k_is_local_label_name (abfd, name)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     const char *name;
+m88k_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED, const char *name)
 {
   return name[0] == '@';
 }
 
 static bfd_reloc_status_type
-m88k_special_reloc (abfd, reloc_entry, symbol, data,
-		    input_section, output_bfd, error_message)
-     bfd *abfd;
-     arelent *reloc_entry;
-     asymbol *symbol;
-     PTR data;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+m88k_special_reloc (bfd *abfd,
+		    arelent *reloc_entry,
+		    asymbol *symbol,
+		    void * data,
+		    asection *input_section,
+		    bfd *output_bfd,
+		    char **error_message ATTRIBUTE_UNUSED)
 {
   reloc_howto_type *howto = reloc_entry->howto;
 
@@ -236,9 +228,7 @@ static reloc_howto_type howto_table[] =
 /* Code to turn an external r_type into a pointer to an entry in the
    above howto table.  */
 static void
-rtype2howto (cache_ptr, dst)
-     arelent *cache_ptr;
-     struct internal_reloc *dst;
+rtype2howto (arelent *cache_ptr, struct internal_reloc *dst)
 {
   if (dst->r_type >= R_PCR16L && dst->r_type <= R_VRT32)
     {
@@ -260,12 +250,11 @@ rtype2howto (cache_ptr, dst)
   reloc_processing(relent, reloc, symbols, abfd, section)
 
 static void
-reloc_processing (relent, reloc, symbols, abfd, section)
-     arelent *relent;
-     struct internal_reloc *reloc;
-     asymbol **symbols;
-     bfd *abfd;
-     asection *section;
+reloc_processing (arelent *relent,
+		  struct internal_reloc *reloc,
+		  asymbol **symbols,
+		  bfd *abfd,
+		  asection *section)
 {
   relent->address = reloc->r_vaddr;
   rtype2howto (relent, reloc);
diff --git a/bfd/coff-mcore.c b/bfd/coff-mcore.c
index 27b2ec3..9431e46 100644
--- a/bfd/coff-mcore.c
+++ b/bfd/coff-mcore.c
@@ -1,5 +1,5 @@
 /* BFD back-end for Motorola MCore COFF/PE
-   Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2010, 2011
+   Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -39,19 +39,10 @@
 /* This file is compiled more than once, but we only compile the
    final_link routine once.  */
 extern bfd_boolean mcore_bfd_coff_final_link
-  PARAMS ((bfd *, struct bfd_link_info *));
+  (bfd *, struct bfd_link_info *);
 static bfd_reloc_status_type mcore_coff_unsupported_reloc
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
-static bfd_boolean coff_mcore_relocate_section
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
-	   struct internal_reloc *, struct internal_syment *, asection **));
-static reloc_howto_type *mcore_coff_reloc_type_lookup
-  PARAMS ((bfd *, bfd_reloc_code_real_type));
-static reloc_howto_type *coff_mcore_rtype_to_howto
-  PARAMS ((bfd *, asection *, struct internal_reloc *,
-	   struct coff_link_hash_entry *, struct internal_syment *,
-	   bfd_vma *));
-static bfd_boolean in_reloc_p PARAMS ((bfd *, reloc_howto_type *));
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+
 

 /* The NT loader points the toc register to &toc + 32768, in order to
    use the complete range of a 16-bit displacement. We have to adjust
@@ -241,15 +232,13 @@ mcore_emit_base_file_entry (struct bfd_link_info *info,
 }
 

 static bfd_reloc_status_type
-mcore_coff_unsupported_reloc (abfd, reloc_entry, symbol, data, input_section,
-			   output_bfd, error_message)
-     bfd * abfd;
-     arelent * reloc_entry;
-     asymbol * symbol ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection * input_section ATTRIBUTE_UNUSED;
-     bfd * output_bfd ATTRIBUTE_UNUSED;
-     char ** error_message ATTRIBUTE_UNUSED;
+mcore_coff_unsupported_reloc (bfd * abfd,
+			      arelent * reloc_entry,
+			      asymbol * symbol ATTRIBUTE_UNUSED,
+			      void * data ATTRIBUTE_UNUSED,
+			      asection * input_section ATTRIBUTE_UNUSED,
+			      bfd * output_bfd ATTRIBUTE_UNUSED,
+			      char ** error_message ATTRIBUTE_UNUSED)
 {
   BFD_ASSERT (reloc_entry->howto != (reloc_howto_type *)0);
 
@@ -266,9 +255,8 @@ mcore_coff_unsupported_reloc (abfd, reloc_entry, symbol, data, input_section,
  case bfd_rtype: return & mcore_coff_howto_table [mcore_rtype]
 
 static reloc_howto_type *
-mcore_coff_reloc_type_lookup (abfd, code)
-     bfd * abfd ATTRIBUTE_UNUSED;
-     bfd_reloc_code_real_type code;
+mcore_coff_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
+			      bfd_reloc_code_real_type code)
 {
   switch (code)
     {
@@ -307,13 +295,12 @@ mcore_coff_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
   (cache_ptr)->howto = mcore_coff_howto_table + (dst)->r_type;
 
 static reloc_howto_type *
-coff_mcore_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
-     bfd * abfd ATTRIBUTE_UNUSED;
-     asection * sec;
-     struct internal_reloc * rel;
-     struct coff_link_hash_entry * h ATTRIBUTE_UNUSED;
-     struct internal_syment * sym;
-     bfd_vma * addendp;
+coff_mcore_rtype_to_howto (bfd * abfd ATTRIBUTE_UNUSED,
+			   asection * sec,
+			   struct internal_reloc * rel,
+			   struct coff_link_hash_entry * h ATTRIBUTE_UNUSED,
+			   struct internal_syment * sym,
+			   bfd_vma * addendp)
 {
   reloc_howto_type * howto;
 
@@ -348,25 +335,21 @@ coff_mcore_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
    This function is referenced in pe_mkobject in peicode.h.  */
 
 static bfd_boolean
-in_reloc_p (abfd, howto)
-     bfd * abfd ATTRIBUTE_UNUSED;
-     reloc_howto_type * howto;
+in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED, reloc_howto_type * howto)
 {
   return ! howto->pc_relative && howto->type != IMAGE_REL_MCORE_RVA;
 }
 

 /* The reloc processing routine for the optimized COFF linker.  */
 static bfd_boolean
-coff_mcore_relocate_section (output_bfd, info, input_bfd, input_section,
-			   contents, relocs, syms, sections)
-     bfd * output_bfd;
-     struct bfd_link_info * info;
-     bfd * input_bfd;
-     asection * input_section;
-     bfd_byte * contents;
-     struct internal_reloc * relocs;
-     struct internal_syment * syms;
-     asection ** sections;
+coff_mcore_relocate_section (bfd * output_bfd,
+			     struct bfd_link_info * info,
+			     bfd * input_bfd,
+			     asection * input_section,
+			     bfd_byte * contents,
+			     struct internal_reloc * relocs,
+			     struct internal_syment * syms,
+			     asection ** sections)
 {
   struct internal_reloc * rel;
   struct internal_reloc * relend;
diff --git a/bfd/coff-mips.c b/bfd/coff-mips.c
index 4048ca8..cdcdde2 100644
--- a/bfd/coff-mips.c
+++ b/bfd/coff-mips.c
@@ -1,6 +1,6 @@
 /* BFD back-end for MIPS Extended-Coff files.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2011
+   2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2011, 2012
    Free Software Foundation, Inc.
    Original version by Per Bothner.
    Full support added by Ian Lance Taylor, ian at cygnus.com.
@@ -35,37 +35,19 @@
 #include "libecoff.h"
 

 /* Prototypes for static functions.  */
+static bfd_reloc_status_type
+mips_generic_reloc
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+static bfd_reloc_status_type
+mips_refhi_reloc
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+static bfd_reloc_status_type
+mips_reflo_reloc
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+static bfd_reloc_status_type
+mips_gprel_reloc 
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 
-static bfd_boolean mips_ecoff_bad_format_hook
-  PARAMS ((bfd *abfd, PTR filehdr));
-static void mips_ecoff_swap_reloc_in
-  PARAMS ((bfd *, PTR, struct internal_reloc *));
-static void mips_ecoff_swap_reloc_out
-  PARAMS ((bfd *, const struct internal_reloc *, PTR));
-static void mips_adjust_reloc_in
-  PARAMS ((bfd *, const struct internal_reloc *, arelent *));
-static void mips_adjust_reloc_out
-  PARAMS ((bfd *, const arelent *, struct internal_reloc *));
-static bfd_reloc_status_type mips_generic_reloc
-  PARAMS ((bfd *abfd, arelent *reloc, asymbol *symbol, PTR data,
-	   asection *section, bfd *output_bfd, char **error));
-static bfd_reloc_status_type mips_refhi_reloc
-  PARAMS ((bfd *abfd, arelent *reloc, asymbol *symbol, PTR data,
-	   asection *section, bfd *output_bfd, char **error));
-static bfd_reloc_status_type mips_reflo_reloc
-  PARAMS ((bfd *abfd, arelent *reloc, asymbol *symbol, PTR data,
-	   asection *section, bfd *output_bfd, char **error));
-static bfd_reloc_status_type mips_gprel_reloc
-  PARAMS ((bfd *abfd, arelent *reloc, asymbol *symbol, PTR data,
-	   asection *section, bfd *output_bfd, char **error));
-static void mips_relocate_hi
-  PARAMS ((struct internal_reloc *refhi, struct internal_reloc *reflo,
-	   bfd *input_bfd, asection *input_section, bfd_byte *contents,
-	   bfd_vma relocation));
-static bfd_boolean mips_relocate_section
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, PTR));
-static reloc_howto_type *mips_bfd_reloc_type_lookup
-  PARAMS ((bfd *, bfd_reloc_code_real_type));
 

 /* ECOFF has COFF sections, but the debugging information is stored in
    a completely different format.  ECOFF targets use some of the
@@ -79,12 +61,12 @@ static reloc_howto_type *mips_bfd_reloc_type_lookup
 #define NO_COFF_RELOCS
 #define NO_COFF_SYMBOLS
 #define NO_COFF_LINENOS
-#define coff_swap_filehdr_in mips_ecoff_swap_filehdr_in
+#define coff_swap_filehdr_in  mips_ecoff_swap_filehdr_in
 #define coff_swap_filehdr_out mips_ecoff_swap_filehdr_out
-#define coff_swap_aouthdr_in mips_ecoff_swap_aouthdr_in
+#define coff_swap_aouthdr_in  mips_ecoff_swap_aouthdr_in
 #define coff_swap_aouthdr_out mips_ecoff_swap_aouthdr_out
-#define coff_swap_scnhdr_in mips_ecoff_swap_scnhdr_in
-#define coff_swap_scnhdr_out mips_ecoff_swap_scnhdr_out
+#define coff_swap_scnhdr_in   mips_ecoff_swap_scnhdr_in
+#define coff_swap_scnhdr_out  mips_ecoff_swap_scnhdr_out
 
 #include "coffswap.h"
 
@@ -253,9 +235,7 @@ static reloc_howto_type mips_howto_table[] =
 /* See whether the magic number matches.  */
 
 static bfd_boolean
-mips_ecoff_bad_format_hook (abfd, filehdr)
-     bfd *abfd;
-     PTR filehdr;
+mips_ecoff_bad_format_hook (bfd * abfd, void * filehdr)
 {
   struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
 
@@ -287,10 +267,9 @@ mips_ecoff_bad_format_hook (abfd, filehdr)
 /* Swap a reloc in.  */
 
 static void
-mips_ecoff_swap_reloc_in (abfd, ext_ptr, intern)
-     bfd *abfd;
-     PTR ext_ptr;
-     struct internal_reloc *intern;
+mips_ecoff_swap_reloc_in (bfd *  abfd,
+			  void * ext_ptr,
+			  struct internal_reloc *intern)
 {
   const RELOC *ext = (RELOC *) ext_ptr;
 
@@ -326,10 +305,9 @@ mips_ecoff_swap_reloc_in (abfd, ext_ptr, intern)
 /* Swap a reloc out.  */
 
 static void
-mips_ecoff_swap_reloc_out (abfd, intern, dst)
-     bfd *abfd;
-     const struct internal_reloc *intern;
-     PTR dst;
+mips_ecoff_swap_reloc_out (bfd * abfd,
+			   const struct internal_reloc * intern,
+			   void * dst)
 {
   RELOC *ext = (RELOC *) dst;
   long r_symndx;
@@ -367,10 +345,9 @@ mips_ecoff_swap_reloc_out (abfd, intern, dst)
    this backend routine.  It must fill in the howto field.  */
 
 static void
-mips_adjust_reloc_in (abfd, intern, rptr)
-     bfd *abfd;
-     const struct internal_reloc *intern;
-     arelent *rptr;
+mips_adjust_reloc_in (bfd *abfd,
+		      const struct internal_reloc *intern,
+		      arelent *rptr)
 {
   if (intern->r_type > MIPS_R_PCREL16)
     abort ();
@@ -392,10 +369,9 @@ mips_adjust_reloc_in (abfd, intern, rptr)
    are needed for MIPS.  */
 
 static void
-mips_adjust_reloc_out (abfd, rel, intern)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     const arelent *rel ATTRIBUTE_UNUSED;
-     struct internal_reloc *intern ATTRIBUTE_UNUSED;
+mips_adjust_reloc_out (bfd *abfd ATTRIBUTE_UNUSED,
+		       const arelent *rel ATTRIBUTE_UNUSED,
+		       struct internal_reloc *intern ATTRIBUTE_UNUSED)
 {
 }
 
@@ -411,20 +387,13 @@ mips_adjust_reloc_out (abfd, rel, intern)
    relocatable output against an external symbol.  */
 
 static bfd_reloc_status_type
-mips_generic_reloc (abfd,
-		    reloc_entry,
-		    symbol,
-		    data,
-		    input_section,
-		    output_bfd,
-		    error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry;
-     asymbol *symbol;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+mips_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+		    arelent *reloc_entry,
+		    asymbol *symbol,
+		    void * data ATTRIBUTE_UNUSED,
+		    asection *input_section,
+		    bfd *output_bfd,
+		    char **error_message ATTRIBUTE_UNUSED)
 {
   if (output_bfd != (bfd *) NULL
       && (symbol->flags & BSF_SECTION_SYM) == 0
@@ -458,20 +427,13 @@ struct mips_hi
 static struct mips_hi *mips_refhi_list;
 
 static bfd_reloc_status_type
-mips_refhi_reloc (abfd,
-		  reloc_entry,
-		  symbol,
-		  data,
-		  input_section,
-		  output_bfd,
-		  error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry;
-     asymbol *symbol;
-     PTR data;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+mips_refhi_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+		  arelent *reloc_entry,
+		  asymbol *symbol,
+		  void * data,
+		  asection *input_section,
+		  bfd *output_bfd,
+		  char **error_message ATTRIBUTE_UNUSED)
 {
   bfd_reloc_status_type ret;
   bfd_vma relocation;
@@ -524,20 +486,13 @@ mips_refhi_reloc (abfd,
    relocation described above.  */
 
 static bfd_reloc_status_type
-mips_reflo_reloc (abfd,
-		  reloc_entry,
-		  symbol,
-		  data,
-		  input_section,
-		  output_bfd,
-		  error_message)
-     bfd *abfd;
-     arelent *reloc_entry;
-     asymbol *symbol;
-     PTR data;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message;
+mips_reflo_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+		  arelent *reloc_entry,
+		  asymbol *symbol,
+		  void * data,
+		  asection *input_section,
+		  bfd *output_bfd,
+		  char **error_message ATTRIBUTE_UNUSED)
 {
   if (mips_refhi_list != NULL)
     {
@@ -592,20 +547,13 @@ mips_reflo_reloc (abfd,
    the offset from the gp register.  */
 
 static bfd_reloc_status_type
-mips_gprel_reloc (abfd,
-		  reloc_entry,
-		  symbol,
-		  data,
-		  input_section,
-		  output_bfd,
-		  error_message)
-     bfd *abfd;
-     arelent *reloc_entry;
-     asymbol *symbol;
-     PTR data;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message;
+mips_gprel_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+		  arelent *reloc_entry,
+		  asymbol *symbol,
+		  void * data,
+		  asection *input_section,
+		  bfd *output_bfd,
+		  char **error_message ATTRIBUTE_UNUSED)
 {
   bfd_boolean relocatable;
   bfd_vma gp;
@@ -732,9 +680,8 @@ mips_gprel_reloc (abfd,
 /* Get the howto structure for a generic reloc type.  */
 
 static reloc_howto_type *
-mips_bfd_reloc_type_lookup (abfd, code)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     bfd_reloc_code_real_type code;
+mips_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+			    bfd_reloc_code_real_type code)
 {
   int mips_type;
 
@@ -794,14 +741,12 @@ mips_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
    instructions.  */
 
 static void
-mips_relocate_hi (refhi, reflo, input_bfd, input_section, contents,
-		  relocation)
-     struct internal_reloc *refhi;
-     struct internal_reloc *reflo;
-     bfd *input_bfd;
-     asection *input_section;
-     bfd_byte *contents;
-     bfd_vma relocation;
+mips_relocate_hi (struct internal_reloc *refhi,
+		  struct internal_reloc *reflo,
+		  bfd *input_bfd,
+		  asection *input_section,
+		  bfd_byte *contents,
+		  bfd_vma relocation)
 {
   unsigned long insn;
   unsigned long val;
@@ -841,14 +786,12 @@ mips_relocate_hi (refhi, reflo, input_bfd, input_section, contents,
 /* Relocate a section while linking a MIPS ECOFF file.  */
 
 static bfd_boolean
-mips_relocate_section (output_bfd, info, input_bfd, input_section,
-		       contents, external_relocs)
-     bfd *output_bfd;
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     asection *input_section;
-     bfd_byte *contents;
-     PTR external_relocs;
+mips_relocate_section (bfd *output_bfd,
+		       struct bfd_link_info *info,
+		       bfd *input_bfd,
+		       asection *input_section,
+		       bfd_byte *contents,
+		       void * external_relocs)
 {
   asection **symndx_to_section;
   struct ecoff_link_hash_entry **sym_hashes;
@@ -928,7 +871,7 @@ mips_relocate_section (output_bfd, info, input_bfd, input_section,
       bfd_reloc_status_type r;
 
       if (! got_lo)
-	mips_ecoff_swap_reloc_in (input_bfd, (PTR) ext_rel, &int_rel);
+	mips_ecoff_swap_reloc_in (input_bfd, ext_rel, &int_rel);
       else
 	{
 	  int_rel = lo_int_rel;
@@ -951,7 +894,7 @@ mips_relocate_section (output_bfd, info, input_bfd, input_section,
 	       lo_ext_rel < ext_rel_end;
 	       lo_ext_rel++)
 	    {
-	      mips_ecoff_swap_reloc_in (input_bfd, (PTR) lo_ext_rel,
+	      mips_ecoff_swap_reloc_in (input_bfd, lo_ext_rel,
 					&lo_int_rel);
 	      if (lo_int_rel.r_type != int_rel.r_type)
 		break;
@@ -1190,7 +1133,7 @@ mips_relocate_section (output_bfd, info, input_bfd, input_section,
 			      - input_section->vma);
 
 	  /* Save the changed reloc information.  */
-	  mips_ecoff_swap_reloc_out (input_bfd, &int_rel, (PTR) ext_rel);
+	  mips_ecoff_swap_reloc_out (input_bfd, &int_rel, ext_rel);
 	}
       else
 	{
@@ -1303,13 +1246,13 @@ static const struct ecoff_backend_data mips_ecoff_backend_data =
 {
   /* COFF backend structure.  */
   {
-    (void (*) PARAMS ((bfd *,PTR,int,int,int,int,PTR))) bfd_void, /* aux_in */
-    (void (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* sym_in */
-    (void (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* lineno_in */
-    (unsigned (*) PARAMS ((bfd *,PTR,int,int,int,int,PTR)))bfd_void,/*aux_out*/
-    (unsigned (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* sym_out */
-    (unsigned (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* lineno_out */
-    (unsigned (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* reloc_out */
+    (void (*) (bfd *,void *,int,int,int,int,void *)) bfd_void, /* aux_in */
+    (void (*) (bfd *,void *,void *)) bfd_void, /* sym_in */
+    (void (*) (bfd *,void *,void *)) bfd_void, /* lineno_in */
+    (unsigned (*) (bfd *,void *,int,int,int,int,void *)) bfd_void,/*aux_out*/
+    (unsigned (*) (bfd *,void *,void *)) bfd_void, /* sym_out */
+    (unsigned (*) (bfd *,void *,void *)) bfd_void, /* lineno_out */
+    (unsigned (*) (bfd *,void *,void *)) bfd_void, /* reloc_out */
     mips_ecoff_swap_filehdr_out, mips_ecoff_swap_aouthdr_out,
     mips_ecoff_swap_scnhdr_out,
     FILHSZ, AOUTSZ, SCNHSZ, 0, 0, 0, 0, FILNMLEN, TRUE, 
@@ -1466,7 +1409,7 @@ const bfd_target ecoff_little_vec =
 
   & ecoff_big_vec,
 
-  (PTR) &mips_ecoff_backend_data
+  & mips_ecoff_backend_data
 };
 
 const bfd_target ecoff_big_vec =
@@ -1510,7 +1453,7 @@ const bfd_target ecoff_big_vec =
 
   & ecoff_little_vec,
 
-  (PTR) &mips_ecoff_backend_data
+  & mips_ecoff_backend_data
 };
 
 const bfd_target ecoff_biglittle_vec =
@@ -1555,5 +1498,5 @@ const bfd_target ecoff_biglittle_vec =
 
   NULL,
 
-  (PTR) &mips_ecoff_backend_data
+  & mips_ecoff_backend_data
 };
diff --git a/bfd/coff-or32.c b/bfd/coff-or32.c
index a9683df..18835e1 100644
--- a/bfd/coff-or32.c
+++ b/bfd/coff-or32.c
@@ -1,5 +1,5 @@
 /* BFD back-end for OpenRISC 1000 COFF binaries.
-   Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2011
+   Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2011, 2012
    Free Software Foundation, Inc.
    Contributed by Ivan Guzvinec  <ivang at opencores.org>
 
@@ -29,18 +29,8 @@
 #include "coff/internal.h"
 #include "libcoff.h"
 
-static long get_symbol_value
-  PARAMS ((asymbol *));
 static bfd_reloc_status_type or32_reloc
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
-static bfd_boolean coff_or32_relocate_section
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
-	   struct internal_reloc *, struct internal_syment *, asection **));
-static bfd_boolean coff_or32_adjust_symndx
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *,
-	   struct internal_reloc *, bfd_boolean *));
-static void reloc_processing
-  PARAMS ((arelent *, struct internal_reloc *, asymbol **, bfd *, asection *));
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 
 #define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (2)
 
@@ -61,8 +51,7 @@ static void reloc_processing
 /* Provided the symbol, returns the value reffed.  */
 
 static long
-get_symbol_value (symbol)
-     asymbol *symbol;
+get_symbol_value (asymbol *symbol)
 {
   long relocation = 0;
 
@@ -79,15 +68,13 @@ get_symbol_value (symbol)
 /* This function is in charge of performing all the or32 relocations.  */
 
 static bfd_reloc_status_type
-or32_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
-            error_message)
-     bfd *abfd;
-     arelent *reloc_entry;
-     asymbol *symbol_in;
-     PTR data;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message;
+or32_reloc (bfd *abfd,
+	    arelent *reloc_entry,
+	    asymbol *symbol_in,
+	    void * data,
+	    asection *input_section,
+	    bfd *output_bfd,
+	    char **error_message)
 {
   /* The consth relocation comes in two parts, we have to remember
      the state between calls, in these variables.  */
@@ -289,12 +276,11 @@ static reloc_howto_type howto_table[] =
   reloc_processing (relent, reloc, symbols, abfd, section)
 
 static void
-reloc_processing (relent,reloc, symbols, abfd, section)
-     arelent *relent;
-     struct internal_reloc *reloc;
-     asymbol **symbols;
-     bfd *abfd;
-     asection *section;
+reloc_processing (arelent *relent,
+		  struct internal_reloc *reloc,
+		  asymbol **symbols,
+		  bfd *abfd,
+		  asection *section)
 {
   static bfd_vma ihihalf_vaddr = (bfd_vma) -1;
 
@@ -333,16 +319,14 @@ reloc_processing (relent,reloc, symbols, abfd, section)
 /* The reloc processing routine for the optimized COFF linker.  */
 
 static bfd_boolean
-coff_or32_relocate_section (output_bfd, info, input_bfd, input_section,
-                            contents, relocs, syms, sections)
-     bfd *output_bfd ATTRIBUTE_UNUSED;
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     asection *input_section;
-     bfd_byte *contents;
-     struct internal_reloc *relocs;
-     struct internal_syment *syms;
-     asection **sections;
+coff_or32_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
+			    struct bfd_link_info *info,
+			    bfd *input_bfd,
+			    asection *input_section,
+			    bfd_byte *contents,
+			    struct internal_reloc *relocs,
+			    struct internal_syment *syms,
+			    asection **sections)
 {
   struct internal_reloc *rel;
   struct internal_reloc *relend;
@@ -554,13 +538,12 @@ coff_or32_relocate_section (output_bfd, info, input_bfd, input_section,
    is actually an addend, not a symbol index at all.  */
 
 static bfd_boolean
-coff_or32_adjust_symndx (obfd, info, ibfd, sec, irel, adjustedp)
-     bfd *obfd ATTRIBUTE_UNUSED;
-     struct bfd_link_info *info ATTRIBUTE_UNUSED;
-     bfd *ibfd ATTRIBUTE_UNUSED;
-     asection *sec ATTRIBUTE_UNUSED;
-     struct internal_reloc *irel;
-     bfd_boolean *adjustedp;
+coff_or32_adjust_symndx (bfd *obfd ATTRIBUTE_UNUSED,
+			 struct bfd_link_info *info ATTRIBUTE_UNUSED,
+			 bfd *ibfd ATTRIBUTE_UNUSED,
+			 asection *sec ATTRIBUTE_UNUSED,
+			 struct internal_reloc *irel,
+			 bfd_boolean *adjustedp)
 {
   if (irel->r_type == R_IHCONST)
     *adjustedp = TRUE;
diff --git a/bfd/coff-ppc.c b/bfd/coff-ppc.c
index b37a224..fa04933 100644
--- a/bfd/coff-ppc.c
+++ b/bfd/coff-ppc.c
@@ -1,7 +1,7 @@
 /* BFD back-end for PowerPC Microsoft Portable Executable files.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
-   Free Software Foundation, Inc.
+   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
+   2012  Free Software Foundation, Inc.
 
    Original version pieced together by Kim Knuttila (krk at cygnus.com)
 
@@ -52,9 +52,8 @@
 
 /* This file is compiled more than once, but we only compile the
    final_link routine once.  */
-extern bfd_boolean ppc_bfd_coff_final_link
-  PARAMS ((bfd *, struct bfd_link_info *));
-extern void dump_toc PARAMS ((PTR));
+extern bfd_boolean ppc_bfd_coff_final_link (bfd *, struct bfd_link_info *);
+extern void dump_toc (void *);
 
 /* The toc is a set of bfd_vma fields. We use the fact that valid
    addresses are even (i.e. the bit representing "1" is off) to allow
@@ -123,26 +122,12 @@ struct ppc_coff_link_hash_table
   struct coff_link_hash_table root; /* First entry, as required.  */
 };
 
-static struct bfd_hash_entry *ppc_coff_link_hash_newfunc
-  PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *,
-	   const char *));
-static struct bfd_link_hash_table *ppc_coff_link_hash_table_create
-  PARAMS ((bfd *));
-static bfd_boolean coff_ppc_relocate_section
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
-	   struct internal_reloc *, struct internal_syment *, asection **));
-static reloc_howto_type *coff_ppc_rtype_to_howto
-  PARAMS ((bfd *, asection *, struct internal_reloc *,
-	   struct coff_link_hash_entry *, struct internal_syment *,
-	   bfd_vma *));
-
 /* Routine to create an entry in the link hash table.  */
 
 static struct bfd_hash_entry *
-ppc_coff_link_hash_newfunc (entry, table, string)
-     struct bfd_hash_entry *entry;
-     struct bfd_hash_table *table;
-     const char *string;
+ppc_coff_link_hash_newfunc (struct bfd_hash_entry * entry,
+			    struct bfd_hash_table * table,
+			    const char * string)
 {
   struct ppc_coff_link_hash_entry *ret =
     (struct ppc_coff_link_hash_entry *) entry;
@@ -180,9 +165,10 @@ ppc_coff_link_hash_newfunc (entry, table, string)
 static bfd_boolean
 ppc_coff_link_hash_table_init (struct ppc_coff_link_hash_table *table,
 			       bfd *abfd,
-			       struct bfd_hash_entry *(*newfunc) (struct bfd_hash_entry *,
-								  struct bfd_hash_table *,
-								  const char *),
+			       struct bfd_hash_entry *(*newfunc)
+			         (struct bfd_hash_entry *,
+				  struct bfd_hash_table *,
+				  const char *),
 			       unsigned int entsize)
 {
   return _bfd_coff_link_hash_table_init (&table->root, abfd, newfunc, entsize);
@@ -191,8 +177,7 @@ ppc_coff_link_hash_table_init (struct ppc_coff_link_hash_table *table,
 /* Create a PE linker hash table.  */
 
 static struct bfd_link_hash_table *
-ppc_coff_link_hash_table_create (abfd)
-     bfd *abfd;
+ppc_coff_link_hash_table_create (bfd *abfd)
 {
   struct ppc_coff_link_hash_table *ret;
   bfd_size_type amt = sizeof (struct ppc_coff_link_hash_table);
@@ -314,55 +299,19 @@ ppc_coff_link_hash_table_create (abfd)
 /* Static helper functions to make relocation work.  */
 /* (Work In Progress) */
 
-static bfd_reloc_status_type ppc_refhi_reloc PARAMS ((bfd *abfd,
-						      arelent *reloc,
-						      asymbol *symbol,
-						      PTR data,
-						      asection *section,
-						      bfd *output_bfd,
-						      char **error));
-static bfd_reloc_status_type ppc_pair_reloc PARAMS ((bfd *abfd,
-						     arelent *reloc,
-						     asymbol *symbol,
-						     PTR data,
-						     asection *section,
-						     bfd *output_bfd,
-						     char **error));
-

-static bfd_reloc_status_type ppc_toc16_reloc PARAMS ((bfd *abfd,
-						      arelent *reloc,
-						      asymbol *symbol,
-						      PTR data,
-						      asection *section,
-						      bfd *output_bfd,
-						      char **error));
-
-static bfd_reloc_status_type ppc_section_reloc PARAMS ((bfd *abfd,
-							arelent *reloc,
-							asymbol *symbol,
-							PTR data,
-							asection *section,
-							bfd *output_bfd,
-							char **error));
-
-static bfd_reloc_status_type ppc_secrel_reloc PARAMS ((bfd *abfd,
-						       arelent *reloc,
-						       asymbol *symbol,
-						       PTR data,
-						       asection *section,
-						       bfd *output_bfd,
-						       char **error));
-
-static bfd_reloc_status_type ppc_imglue_reloc PARAMS ((bfd *abfd,
-						       arelent *reloc,
-						       asymbol *symbol,
-						       PTR data,
-						       asection *section,
-						       bfd *output_bfd,
-						       char **error));
-
-static bfd_boolean in_reloc_p PARAMS((bfd *abfd, reloc_howto_type *howto));
-

+static bfd_reloc_status_type ppc_refhi_reloc
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+static bfd_reloc_status_type ppc_pair_reloc 
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+static bfd_reloc_status_type ppc_toc16_reloc
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+static bfd_reloc_status_type ppc_section_reloc
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+static bfd_reloc_status_type ppc_secrel_reloc 
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+static bfd_reloc_status_type ppc_imglue_reloc
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+
 /* FIXME: It'll take a while to get through all of these. I only need a few to
    get us started, so those I'll make sure work. Those marked FIXME are either
    completely unverified or have a specific unknown marked in the comment.  */
@@ -816,15 +765,11 @@ struct list_ele
 extern struct list_ele *head;
 extern struct list_ele *tail;
 
-static void record_toc
-  PARAMS ((asection *, bfd_signed_vma, enum ref_category, const char *));
-
 static void
-record_toc (toc_section, our_toc_offset, cat, name)
-     asection *toc_section;
-     bfd_signed_vma our_toc_offset;
-     enum ref_category cat;
-     const char *name;
+record_toc (asection *toc_section,
+	    bfd_signed_vma our_toc_offset,
+	    enum ref_category cat,
+	    const char *name)
 {
   /* Add this entry to our toc addr-offset-name list.  */
   bfd_size_type amt = sizeof (struct list_ele);
@@ -852,19 +797,13 @@ record_toc (toc_section, our_toc_offset, cat, name)
 
 #ifdef COFF_IMAGE_WITH_PE
 
-static bfd_boolean ppc_record_toc_entry
-  PARAMS ((bfd *, struct bfd_link_info *, asection *, int, enum toc_type));
-static void ppc_mark_symbol_as_glue
-  PARAMS ((bfd *, int, struct internal_reloc *));
-
 /* Record a toc offset against a symbol.  */
 static bfd_boolean
-ppc_record_toc_entry(abfd, info, sec, sym, toc_kind)
-     bfd *abfd;
-     struct bfd_link_info *info ATTRIBUTE_UNUSED;
-     asection *sec ATTRIBUTE_UNUSED;
-     int sym;
-     enum toc_type toc_kind ATTRIBUTE_UNUSED;
+ppc_record_toc_entry (bfd *abfd,
+		      struct bfd_link_info *info ATTRIBUTE_UNUSED,
+		      asection *sec ATTRIBUTE_UNUSED,
+		      int sym,
+		      enum toc_type toc_kind ATTRIBUTE_UNUSED)
 {
   struct ppc_coff_link_hash_entry *h;
   int *local_syms;
@@ -937,10 +876,9 @@ ppc_record_toc_entry(abfd, info, sec, sym, toc_kind)
 
 /* Record a toc offset against a symbol.  */
 static void
-ppc_mark_symbol_as_glue(abfd, sym, rel)
-     bfd *abfd;
-     int sym;
-     struct internal_reloc *rel;
+ppc_mark_symbol_as_glue (bfd *abfd,
+			 int sym,
+			 struct internal_reloc *rel)
 {
   struct ppc_coff_link_hash_entry *h;
 
@@ -959,9 +897,9 @@ ppc_mark_symbol_as_glue(abfd, sym, rel)
 /* Return TRUE if this relocation should
    appear in the output .reloc section.  */
 
-static bfd_boolean in_reloc_p(abfd, howto)
-     bfd * abfd ATTRIBUTE_UNUSED;
-     reloc_howto_type *howto;
+static bfd_boolean
+in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED,
+	    reloc_howto_type *howto)
 {
   return
     (! howto->pc_relative)
@@ -993,16 +931,14 @@ write_base_file_entry (bfd *obfd, struct bfd_link_info *info, bfd_vma addr)
 /* The reloc processing routine for the optimized COFF linker.  */
 
 static bfd_boolean
-coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section,
-			   contents, relocs, syms, sections)
-     bfd *output_bfd;
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     asection *input_section;
-     bfd_byte *contents;
-     struct internal_reloc *relocs;
-     struct internal_syment *syms;
-     asection **sections;
+coff_ppc_relocate_section (bfd *output_bfd,
+			   struct bfd_link_info *info,
+			   bfd *input_bfd,
+			   asection *input_section,
+			   bfd_byte *contents,
+			   struct internal_reloc *relocs,
+			   struct internal_syment *syms,
+			   asection **sections)
 {
   struct internal_reloc *rel;
   struct internal_reloc *relend;
@@ -1523,8 +1459,7 @@ static char *
 h3 = N_(" Offset  spelling                   (if present)\n");
 
 void
-dump_toc (vfile)
-     PTR vfile;
+dump_toc (void * vfile)
 {
   FILE *file = (FILE *) vfile;
   struct list_ele *t;
@@ -1570,8 +1505,7 @@ dump_toc (vfile)
 }
 
 bfd_boolean
-ppc_allocate_toc_section (info)
-     struct bfd_link_info *info ATTRIBUTE_UNUSED;
+ppc_allocate_toc_section (struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
   asection *s;
   bfd_byte *foo;
@@ -1601,9 +1535,8 @@ ppc_allocate_toc_section (info)
 }
 
 bfd_boolean
-ppc_process_before_allocation (abfd, info)
-     bfd *abfd;
-     struct bfd_link_info *info;
+ppc_process_before_allocation (bfd *abfd,
+			       struct bfd_link_info *info)
 {
   asection *sec;
   struct internal_reloc *i, *rel;
@@ -1664,15 +1597,13 @@ ppc_process_before_allocation (abfd, info)
 #endif
 
 static bfd_reloc_status_type
-ppc_refhi_reloc (abfd, reloc_entry, symbol, data,
-		 input_section, output_bfd, error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry ATTRIBUTE_UNUSED;
-     asymbol *symbol ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+ppc_refhi_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+		 arelent *reloc_entry ATTRIBUTE_UNUSED,
+		 asymbol *symbol ATTRIBUTE_UNUSED,
+		 void * data ATTRIBUTE_UNUSED,
+		 asection *input_section ATTRIBUTE_UNUSED,
+		 bfd *output_bfd,
+		 char **error_message ATTRIBUTE_UNUSED)
 {
   UN_IMPL("REFHI");
   DUMP_RELOC("REFHI",reloc_entry);
@@ -1684,15 +1615,13 @@ ppc_refhi_reloc (abfd, reloc_entry, symbol, data,
 }
 
 static bfd_reloc_status_type
-ppc_pair_reloc (abfd, reloc_entry, symbol, data,
-		input_section, output_bfd, error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry ATTRIBUTE_UNUSED;
-     asymbol *symbol ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+ppc_pair_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+		arelent *reloc_entry ATTRIBUTE_UNUSED,
+		asymbol *symbol ATTRIBUTE_UNUSED,
+		void * data ATTRIBUTE_UNUSED,
+		asection *input_section ATTRIBUTE_UNUSED,
+		bfd *output_bfd,
+		char **error_message ATTRIBUTE_UNUSED)
 {
   UN_IMPL("PAIR");
   DUMP_RELOC("PAIR",reloc_entry);
@@ -1702,17 +1631,15 @@ ppc_pair_reloc (abfd, reloc_entry, symbol, data,
 
   return bfd_reloc_undefined;
 }
-

+
 static bfd_reloc_status_type
-ppc_toc16_reloc (abfd, reloc_entry, symbol, data,
-		 input_section, output_bfd, error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry ATTRIBUTE_UNUSED;
-     asymbol *symbol ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+ppc_toc16_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+		 arelent *reloc_entry ATTRIBUTE_UNUSED,
+		 asymbol *symbol ATTRIBUTE_UNUSED,
+		 void * data ATTRIBUTE_UNUSED,
+		 asection *input_section ATTRIBUTE_UNUSED,
+		 bfd *output_bfd,
+		 char **error_message ATTRIBUTE_UNUSED)
 {
   UN_IMPL ("TOCREL16");
   DUMP_RELOC ("TOCREL16",reloc_entry);
@@ -1724,15 +1651,13 @@ ppc_toc16_reloc (abfd, reloc_entry, symbol, data,
 }
 
 static bfd_reloc_status_type
-ppc_secrel_reloc (abfd, reloc_entry, symbol, data,
-		  input_section, output_bfd, error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry ATTRIBUTE_UNUSED;
-     asymbol *symbol ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+ppc_secrel_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+		  arelent *reloc_entry ATTRIBUTE_UNUSED,
+		  asymbol *symbol ATTRIBUTE_UNUSED,
+		  void * data ATTRIBUTE_UNUSED,
+		  asection *input_section ATTRIBUTE_UNUSED,
+		  bfd *output_bfd,
+		  char **error_message ATTRIBUTE_UNUSED)
 {
   UN_IMPL("SECREL");
   DUMP_RELOC("SECREL",reloc_entry);
@@ -1744,15 +1669,13 @@ ppc_secrel_reloc (abfd, reloc_entry, symbol, data,
 }
 
 static bfd_reloc_status_type
-ppc_section_reloc (abfd, reloc_entry, symbol, data,
-		   input_section, output_bfd, error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry ATTRIBUTE_UNUSED;
-     asymbol *symbol ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+ppc_section_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+		   arelent *reloc_entry ATTRIBUTE_UNUSED,
+		   asymbol *symbol ATTRIBUTE_UNUSED,
+		   void * data ATTRIBUTE_UNUSED,
+		   asection *input_section ATTRIBUTE_UNUSED,
+		   bfd *output_bfd,
+		   char **error_message ATTRIBUTE_UNUSED)
 {
   UN_IMPL("SECTION");
   DUMP_RELOC("SECTION",reloc_entry);
@@ -1764,15 +1687,14 @@ ppc_section_reloc (abfd, reloc_entry, symbol, data,
 }
 
 static bfd_reloc_status_type
-ppc_imglue_reloc (abfd, reloc_entry, symbol, data,
-		  input_section, output_bfd, error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry ATTRIBUTE_UNUSED;
-     asymbol *symbol ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+ppc_imglue_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+		  arelent *reloc_entry ATTRIBUTE_UNUSED,
+		  asymbol *symbol ATTRIBUTE_UNUSED,
+		  void * data ATTRIBUTE_UNUSED,
+		  asection *input_section ATTRIBUTE_UNUSED,
+		  bfd *output_bfd,
+		  char **error_message ATTRIBUTE_UNUSED)
+
 {
   UN_IMPL("IMGLUE");
   DUMP_RELOC("IMGLUE",reloc_entry);
@@ -1789,12 +1711,9 @@ ppc_imglue_reloc (abfd, reloc_entry, symbol, data,
 /* FIXME: There is a possibility that when we read in a reloc from a file,
           that there are some bits encoded in the upper portion of the
 	  type field. Not yet implemented.  */
-static void ppc_coff_rtype2howto PARAMS ((arelent *, struct internal_reloc *));
 
 static void
-ppc_coff_rtype2howto (relent, internal)
-     arelent *relent;
-     struct internal_reloc *internal;
+ppc_coff_rtype2howto (arelent *relent, struct internal_reloc *internal)
 {
   /* We can encode one of three things in the type field, aside from the
      type:
@@ -1854,13 +1773,12 @@ ppc_coff_rtype2howto (relent, internal)
 }
 
 static reloc_howto_type *
-coff_ppc_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     asection *sec;
-     struct internal_reloc *rel;
-     struct coff_link_hash_entry *h ATTRIBUTE_UNUSED;
-     struct internal_syment *sym ATTRIBUTE_UNUSED;
-     bfd_vma *addendp;
+coff_ppc_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+			 asection *sec,
+			 struct internal_reloc *rel,
+			 struct coff_link_hash_entry *h ATTRIBUTE_UNUSED,
+			 struct internal_syment *sym ATTRIBUTE_UNUSED,
+			 bfd_vma *addendp)
 {
   reloc_howto_type *howto;
 
@@ -1929,13 +1847,9 @@ coff_ppc_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
 #define HOW2MAP(bfd_rtype,ppc_rtype)  \
  case bfd_rtype: return &ppc_coff_howto_table[ppc_rtype]
 
-static reloc_howto_type *ppc_coff_reloc_type_lookup
-PARAMS ((bfd *, bfd_reloc_code_real_type));
-
 static reloc_howto_type *
-ppc_coff_reloc_type_lookup (abfd, code)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     bfd_reloc_code_real_type code;
+ppc_coff_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+			    bfd_reloc_code_real_type code)
 {
   switch (code)
     {
@@ -2012,12 +1926,8 @@ ppc_coff_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
 

 #ifndef COFF_IMAGE_WITH_PE
 
-static bfd_boolean ppc_do_last PARAMS ((bfd *));
-static bfd *ppc_get_last PARAMS ((void));
-
 static bfd_boolean
-ppc_do_last (abfd)
-     bfd *abfd;
+ppc_do_last (bfd *abfd)
 {
   if (abfd == bfd_of_toc_owner)
     return TRUE;
@@ -2026,7 +1936,7 @@ ppc_do_last (abfd)
 }
 
 static bfd *
-ppc_get_last()
+ppc_get_last (void)
 {
   return bfd_of_toc_owner;
 }
@@ -2045,12 +1955,10 @@ ppc_get_last()
 /* Do the final link step.  */
 
 bfd_boolean
-ppc_bfd_coff_final_link (abfd, info)
-     bfd *abfd;
-     struct bfd_link_info *info;
+ppc_bfd_coff_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   bfd_size_type symesz;
-  struct coff_final_link_info finfo;
+  struct coff_final_link_info flaginfo;
   bfd_boolean debug_merge_allocated;
   asection *o;
   struct bfd_link_order *p;
@@ -2070,29 +1978,29 @@ ppc_bfd_coff_final_link (abfd, info)
 
   symesz = bfd_coff_symesz (abfd);
 
-  finfo.info = info;
-  finfo.output_bfd = abfd;
-  finfo.strtab = NULL;
-  finfo.section_info = NULL;
-  finfo.last_file_index = -1;
-  finfo.last_bf_index = -1;
-  finfo.internal_syms = NULL;
-  finfo.sec_ptrs = NULL;
-  finfo.sym_indices = NULL;
-  finfo.outsyms = NULL;
-  finfo.linenos = NULL;
-  finfo.contents = NULL;
-  finfo.external_relocs = NULL;
-  finfo.internal_relocs = NULL;
+  flaginfo.info = info;
+  flaginfo.output_bfd = abfd;
+  flaginfo.strtab = NULL;
+  flaginfo.section_info = NULL;
+  flaginfo.last_file_index = -1;
+  flaginfo.last_bf_index = -1;
+  flaginfo.internal_syms = NULL;
+  flaginfo.sec_ptrs = NULL;
+  flaginfo.sym_indices = NULL;
+  flaginfo.outsyms = NULL;
+  flaginfo.linenos = NULL;
+  flaginfo.contents = NULL;
+  flaginfo.external_relocs = NULL;
+  flaginfo.internal_relocs = NULL;
   debug_merge_allocated = FALSE;
 
   coff_data (abfd)->link_info = info;
 
-  finfo.strtab = _bfd_stringtab_init ();
-  if (finfo.strtab == NULL)
+  flaginfo.strtab = _bfd_stringtab_init ();
+  if (flaginfo.strtab == NULL)
     goto error_return;
 
-  if (! coff_debug_merge_hash_table_init (&finfo.debug_merge))
+  if (! coff_debug_merge_hash_table_init (&flaginfo.debug_merge))
     goto error_return;
   debug_merge_allocated = TRUE;
 
@@ -2171,15 +2079,15 @@ ppc_bfd_coff_final_link (abfd, info)
          the target_index fields are 1 based.  */
       amt = abfd->section_count + 1;
       amt *= sizeof (struct coff_link_section_info);
-      finfo.section_info = (struct coff_link_section_info *) bfd_malloc (amt);
+      flaginfo.section_info = (struct coff_link_section_info *) bfd_malloc (amt);
 
-      if (finfo.section_info == NULL)
+      if (flaginfo.section_info == NULL)
 	goto error_return;
 
       for (i = 0; i <= abfd->section_count; i++)
 	{
-	  finfo.section_info[i].relocs = NULL;
-	  finfo.section_info[i].rel_hashes = NULL;
+	  flaginfo.section_info[i].relocs = NULL;
+	  flaginfo.section_info[i].rel_hashes = NULL;
 	}
     }
 
@@ -2217,14 +2125,14 @@ ppc_bfd_coff_final_link (abfd, info)
 	  BFD_ASSERT (info->relocatable);
 	  amt = o->reloc_count;
 	  amt *= sizeof (struct internal_reloc);
-	  finfo.section_info[o->target_index].relocs =
+	  flaginfo.section_info[o->target_index].relocs =
 	    (struct internal_reloc *) bfd_malloc (amt);
 	  amt = o->reloc_count;
 	  amt *= sizeof (struct coff_link_hash_entry *);
-	  finfo.section_info[o->target_index].rel_hashes =
+	  flaginfo.section_info[o->target_index].rel_hashes =
 	    (struct coff_link_hash_entry **) bfd_malloc (amt);
-	  if (finfo.section_info[o->target_index].relocs == NULL
-	      || finfo.section_info[o->target_index].rel_hashes == NULL)
+	  if (flaginfo.section_info[o->target_index].relocs == NULL
+	      || flaginfo.section_info[o->target_index].rel_hashes == NULL)
 	    goto error_return;
 
 	  if (o->reloc_count > max_output_reloc_count)
@@ -2255,31 +2163,31 @@ ppc_bfd_coff_final_link (abfd, info)
 
   /* Allocate some buffers used while linking.  */
   amt = max_sym_count * sizeof (struct internal_syment);
-  finfo.internal_syms = (struct internal_syment *) bfd_malloc (amt);
+  flaginfo.internal_syms = (struct internal_syment *) bfd_malloc (amt);
   amt = max_sym_count * sizeof (asection *);
-  finfo.sec_ptrs = (asection **) bfd_malloc (amt);
+  flaginfo.sec_ptrs = (asection **) bfd_malloc (amt);
   amt = max_sym_count * sizeof (long);
-  finfo.sym_indices = (long *) bfd_malloc (amt);
+  flaginfo.sym_indices = (long *) bfd_malloc (amt);
   amt = (max_sym_count + 1) * symesz;
-  finfo.outsyms = (bfd_byte *) bfd_malloc (amt);
+  flaginfo.outsyms = (bfd_byte *) bfd_malloc (amt);
   amt = max_lineno_count * bfd_coff_linesz (abfd);
-  finfo.linenos = (bfd_byte *) bfd_malloc (amt);
-  finfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
-  finfo.external_relocs = (bfd_byte *) bfd_malloc (max_reloc_count * relsz);
+  flaginfo.linenos = (bfd_byte *) bfd_malloc (amt);
+  flaginfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
+  flaginfo.external_relocs = (bfd_byte *) bfd_malloc (max_reloc_count * relsz);
   if (! info->relocatable)
     {
       amt = max_reloc_count * sizeof (struct internal_reloc);
-      finfo.internal_relocs = (struct internal_reloc *) bfd_malloc (amt);
+      flaginfo.internal_relocs = (struct internal_reloc *) bfd_malloc (amt);
     }
-  if ((finfo.internal_syms == NULL && max_sym_count > 0)
-      || (finfo.sec_ptrs == NULL && max_sym_count > 0)
-      || (finfo.sym_indices == NULL && max_sym_count > 0)
-      || finfo.outsyms == NULL
-      || (finfo.linenos == NULL && max_lineno_count > 0)
-      || (finfo.contents == NULL && max_contents_size > 0)
-      || (finfo.external_relocs == NULL && max_reloc_count > 0)
+  if ((flaginfo.internal_syms == NULL && max_sym_count > 0)
+      || (flaginfo.sec_ptrs == NULL && max_sym_count > 0)
+      || (flaginfo.sym_indices == NULL && max_sym_count > 0)
+      || flaginfo.outsyms == NULL
+      || (flaginfo.linenos == NULL && max_lineno_count > 0)
+      || (flaginfo.contents == NULL && max_contents_size > 0)
+      || (flaginfo.external_relocs == NULL && max_reloc_count > 0)
       || (! info->relocatable
-	  && finfo.internal_relocs == NULL
+	  && flaginfo.internal_relocs == NULL
 	  && max_reloc_count > 0))
     goto error_return;
 
@@ -2311,7 +2219,7 @@ ppc_bfd_coff_final_link (abfd, info)
 	      if (! sub->output_has_begun)
 #endif
 		{
-		  if (! _bfd_coff_link_input_bfd (&finfo, sub))
+		  if (! _bfd_coff_link_input_bfd (&flaginfo, sub))
 		    goto error_return;
 		  sub->output_has_begun = TRUE;
 		}
@@ -2319,7 +2227,7 @@ ppc_bfd_coff_final_link (abfd, info)
 	  else if (p->type == bfd_section_reloc_link_order
 		   || p->type == bfd_symbol_reloc_link_order)
 	    {
-	      if (! _bfd_coff_reloc_link_order (abfd, &finfo, o, p))
+	      if (! _bfd_coff_reloc_link_order (abfd, &flaginfo, o, p))
 		goto error_return;
 	    }
 	  else
@@ -2335,7 +2243,7 @@ ppc_bfd_coff_final_link (abfd, info)
     bfd* last_one = ppc_get_last();
     if (last_one)
       {
-	if (! _bfd_coff_link_input_bfd (&finfo, last_one))
+	if (! _bfd_coff_link_input_bfd (&flaginfo, last_one))
 	  goto error_return;
       }
     last_one->output_has_begun = TRUE;
@@ -2343,73 +2251,73 @@ ppc_bfd_coff_final_link (abfd, info)
 #endif
 
   /* Free up the buffers used by _bfd_coff_link_input_bfd.  */
-  coff_debug_merge_hash_table_free (&finfo.debug_merge);
+  coff_debug_merge_hash_table_free (&flaginfo.debug_merge);
   debug_merge_allocated = FALSE;
 
-  if (finfo.internal_syms != NULL)
+  if (flaginfo.internal_syms != NULL)
     {
-      free (finfo.internal_syms);
-      finfo.internal_syms = NULL;
+      free (flaginfo.internal_syms);
+      flaginfo.internal_syms = NULL;
     }
-  if (finfo.sec_ptrs != NULL)
+  if (flaginfo.sec_ptrs != NULL)
     {
-      free (finfo.sec_ptrs);
-      finfo.sec_ptrs = NULL;
+      free (flaginfo.sec_ptrs);
+      flaginfo.sec_ptrs = NULL;
     }
-  if (finfo.sym_indices != NULL)
+  if (flaginfo.sym_indices != NULL)
     {
-      free (finfo.sym_indices);
-      finfo.sym_indices = NULL;
+      free (flaginfo.sym_indices);
+      flaginfo.sym_indices = NULL;
     }
-  if (finfo.linenos != NULL)
+  if (flaginfo.linenos != NULL)
     {
-      free (finfo.linenos);
-      finfo.linenos = NULL;
+      free (flaginfo.linenos);
+      flaginfo.linenos = NULL;
     }
-  if (finfo.contents != NULL)
+  if (flaginfo.contents != NULL)
     {
-      free (finfo.contents);
-      finfo.contents = NULL;
+      free (flaginfo.contents);
+      flaginfo.contents = NULL;
     }
-  if (finfo.external_relocs != NULL)
+  if (flaginfo.external_relocs != NULL)
     {
-      free (finfo.external_relocs);
-      finfo.external_relocs = NULL;
+      free (flaginfo.external_relocs);
+      flaginfo.external_relocs = NULL;
     }
-  if (finfo.internal_relocs != NULL)
+  if (flaginfo.internal_relocs != NULL)
     {
-      free (finfo.internal_relocs);
-      finfo.internal_relocs = NULL;
+      free (flaginfo.internal_relocs);
+      flaginfo.internal_relocs = NULL;
     }
 
   /* The value of the last C_FILE symbol is supposed to be the symbol
      index of the first external symbol.  Write it out again if
      necessary.  */
-  if (finfo.last_file_index != -1
-      && (unsigned int) finfo.last_file.n_value != obj_raw_syment_count (abfd))
+  if (flaginfo.last_file_index != -1
+      && (unsigned int) flaginfo.last_file.n_value != obj_raw_syment_count (abfd))
     {
       file_ptr pos;
 
-      finfo.last_file.n_value = obj_raw_syment_count (abfd);
-      bfd_coff_swap_sym_out (abfd, (PTR) &finfo.last_file,
-			     (PTR) finfo.outsyms);
-      pos = obj_sym_filepos (abfd) + finfo.last_file_index * symesz;
+      flaginfo.last_file.n_value = obj_raw_syment_count (abfd);
+      bfd_coff_swap_sym_out (abfd, &flaginfo.last_file,
+			     flaginfo.outsyms);
+      pos = obj_sym_filepos (abfd) + flaginfo.last_file_index * symesz;
       if (bfd_seek (abfd, pos, SEEK_SET) != 0
-	  || bfd_bwrite (finfo.outsyms, symesz, abfd) != symesz)
+	  || bfd_bwrite (flaginfo.outsyms, symesz, abfd) != symesz)
 	return FALSE;
     }
 
   /* Write out the global symbols.  */
-  finfo.failed = FALSE;
-  bfd_hash_traverse (&info->hash->table, _bfd_coff_write_global_sym, &finfo);
-  if (finfo.failed)
+  flaginfo.failed = FALSE;
+  bfd_hash_traverse (&info->hash->table, _bfd_coff_write_global_sym, &flaginfo);
+  if (flaginfo.failed)
     goto error_return;
 
   /* The outsyms buffer is used by _bfd_coff_write_global_sym.  */
-  if (finfo.outsyms != NULL)
+  if (flaginfo.outsyms != NULL)
     {
-      free (finfo.outsyms);
-      finfo.outsyms = NULL;
+      free (flaginfo.outsyms);
+      flaginfo.outsyms = NULL;
     }
 
   if (info->relocatable)
@@ -2432,9 +2340,9 @@ ppc_bfd_coff_final_link (abfd, info)
 	  if (o->reloc_count == 0)
 	    continue;
 
-	  irel = finfo.section_info[o->target_index].relocs;
+	  irel = flaginfo.section_info[o->target_index].relocs;
 	  irelend = irel + o->reloc_count;
-	  rel_hash = finfo.section_info[o->target_index].rel_hashes;
+	  rel_hash = flaginfo.section_info[o->target_index].rel_hashes;
 	  erel = external_relocs;
 	  for (; irel < irelend; irel++, rel_hash++, erel += relsz)
 	    {
@@ -2443,12 +2351,12 @@ ppc_bfd_coff_final_link (abfd, info)
 		  BFD_ASSERT ((*rel_hash)->indx >= 0);
 		  irel->r_symndx = (*rel_hash)->indx;
 		}
-	      bfd_coff_swap_reloc_out (abfd, (PTR) irel, (PTR) erel);
+	      bfd_coff_swap_reloc_out (abfd, irel, erel);
 	    }
 
 	  amt = relsz * o->reloc_count;
 	  if (bfd_seek (abfd, o->rel_filepos, SEEK_SET) != 0
-	      || bfd_bwrite ((PTR) external_relocs, amt, abfd) != amt)
+	      || bfd_bwrite (external_relocs, amt, abfd) != amt)
 	    goto error_return;
 	}
 
@@ -2457,19 +2365,19 @@ ppc_bfd_coff_final_link (abfd, info)
     }
 
   /* Free up the section information.  */
-  if (finfo.section_info != NULL)
+  if (flaginfo.section_info != NULL)
     {
       unsigned int i;
 
       for (i = 0; i < abfd->section_count; i++)
 	{
-	  if (finfo.section_info[i].relocs != NULL)
-	    free (finfo.section_info[i].relocs);
-	  if (finfo.section_info[i].rel_hashes != NULL)
-	    free (finfo.section_info[i].rel_hashes);
+	  if (flaginfo.section_info[i].relocs != NULL)
+	    free (flaginfo.section_info[i].relocs);
+	  if (flaginfo.section_info[i].rel_hashes != NULL)
+	    free (flaginfo.section_info[i].rel_hashes);
 	}
-      free (finfo.section_info);
-      finfo.section_info = NULL;
+      free (flaginfo.section_info);
+      flaginfo.section_info = NULL;
     }
 
   /* If we have optimized stabs strings, output them.  */
@@ -2490,7 +2398,7 @@ ppc_bfd_coff_final_link (abfd, info)
 
 #if STRING_SIZE_SIZE == 4
       H_PUT_32 (abfd,
-		_bfd_stringtab_size (finfo.strtab) + STRING_SIZE_SIZE,
+		_bfd_stringtab_size (flaginfo.strtab) + STRING_SIZE_SIZE,
 		strbuf);
 #else
  #error Change H_PUT_32 above
@@ -2500,11 +2408,11 @@ ppc_bfd_coff_final_link (abfd, info)
 	  != STRING_SIZE_SIZE)
 	return FALSE;
 
-      if (! _bfd_stringtab_emit (abfd, finfo.strtab))
+      if (! _bfd_stringtab_emit (abfd, flaginfo.strtab))
 	return FALSE;
     }
 
-  _bfd_stringtab_free (finfo.strtab);
+  _bfd_stringtab_free (flaginfo.strtab);
 
   /* Setting bfd_get_symcount to 0 will cause write_object_contents to
      not try to write out the symbols.  */
@@ -2514,38 +2422,38 @@ ppc_bfd_coff_final_link (abfd, info)
 
  error_return:
   if (debug_merge_allocated)
-    coff_debug_merge_hash_table_free (&finfo.debug_merge);
-  if (finfo.strtab != NULL)
-    _bfd_stringtab_free (finfo.strtab);
-  if (finfo.section_info != NULL)
+    coff_debug_merge_hash_table_free (&flaginfo.debug_merge);
+  if (flaginfo.strtab != NULL)
+    _bfd_stringtab_free (flaginfo.strtab);
+  if (flaginfo.section_info != NULL)
     {
       unsigned int i;
 
       for (i = 0; i < abfd->section_count; i++)
 	{
-	  if (finfo.section_info[i].relocs != NULL)
-	    free (finfo.section_info[i].relocs);
-	  if (finfo.section_info[i].rel_hashes != NULL)
-	    free (finfo.section_info[i].rel_hashes);
+	  if (flaginfo.section_info[i].relocs != NULL)
+	    free (flaginfo.section_info[i].relocs);
+	  if (flaginfo.section_info[i].rel_hashes != NULL)
+	    free (flaginfo.section_info[i].rel_hashes);
 	}
-      free (finfo.section_info);
+      free (flaginfo.section_info);
     }
-  if (finfo.internal_syms != NULL)
-    free (finfo.internal_syms);
-  if (finfo.sec_ptrs != NULL)
-    free (finfo.sec_ptrs);
-  if (finfo.sym_indices != NULL)
-    free (finfo.sym_indices);
-  if (finfo.outsyms != NULL)
-    free (finfo.outsyms);
-  if (finfo.linenos != NULL)
-    free (finfo.linenos);
-  if (finfo.contents != NULL)
-    free (finfo.contents);
-  if (finfo.external_relocs != NULL)
-    free (finfo.external_relocs);
-  if (finfo.internal_relocs != NULL)
-    free (finfo.internal_relocs);
+  if (flaginfo.internal_syms != NULL)
+    free (flaginfo.internal_syms);
+  if (flaginfo.sec_ptrs != NULL)
+    free (flaginfo.sec_ptrs);
+  if (flaginfo.sym_indices != NULL)
+    free (flaginfo.sym_indices);
+  if (flaginfo.outsyms != NULL)
+    free (flaginfo.outsyms);
+  if (flaginfo.linenos != NULL)
+    free (flaginfo.linenos);
+  if (flaginfo.contents != NULL)
+    free (flaginfo.contents);
+  if (flaginfo.external_relocs != NULL)
+    free (flaginfo.external_relocs);
+  if (flaginfo.internal_relocs != NULL)
+    free (flaginfo.internal_relocs);
   if (external_relocs != NULL)
     free (external_relocs);
   return FALSE;
diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c
index ffa7a65..2a968bf 100644
--- a/bfd/coff-rs6000.c
+++ b/bfd/coff-rs6000.c
@@ -1,6 +1,6 @@
 /* BFD back-end for IBM RS/6000 "XCOFF" files.
    Copyright 1990-1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
-   2008, 2009, 2010, 2011
+   2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
    Written by Metin G. Ozisik, Mimi Phuong-Thao Vo, and John Gilmore.
    Archive support from Damon A. Permezel.
@@ -40,20 +40,20 @@ extern reloc_howto_type *_bfd_xcoff_reloc_type_lookup
   (bfd *, bfd_reloc_code_real_type);
 extern bfd_boolean _bfd_xcoff_slurp_armap (bfd *);
 extern const bfd_target *_bfd_xcoff_archive_p (bfd *);
-extern PTR _bfd_xcoff_read_ar_hdr (bfd *);
+extern void * _bfd_xcoff_read_ar_hdr (bfd *);
 extern bfd *_bfd_xcoff_openr_next_archived_file (bfd *, bfd *);
 extern int _bfd_xcoff_stat_arch_elt (bfd *, struct stat *);
 extern bfd_boolean _bfd_xcoff_write_armap
   (bfd *, unsigned int, struct orl *, unsigned int, int);
 extern bfd_boolean _bfd_xcoff_write_archive_contents (bfd *);
 extern int _bfd_xcoff_sizeof_headers (bfd *, struct bfd_link_info *);
-extern void _bfd_xcoff_swap_sym_in (bfd *, PTR, PTR);
-extern unsigned int _bfd_xcoff_swap_sym_out (bfd *, PTR, PTR);
-extern void _bfd_xcoff_swap_aux_in (bfd *, PTR, int, int, int, int, PTR);
+extern void _bfd_xcoff_swap_sym_in (bfd *, void *, void *);
+extern unsigned int _bfd_xcoff_swap_sym_out (bfd *, void *, void *);
+extern void _bfd_xcoff_swap_aux_in (bfd *, void *, int, int, int, int, void *);
 extern unsigned int _bfd_xcoff_swap_aux_out
-  (bfd *, PTR, int, int, int, int, PTR);
-static void xcoff_swap_reloc_in (bfd *, PTR, PTR);
-static unsigned int xcoff_swap_reloc_out (bfd *, PTR, PTR);
+  (bfd *, void *, int, int, int, int, void *);
+static void xcoff_swap_reloc_in (bfd *, void *, void *);
+static unsigned int xcoff_swap_reloc_out (bfd *, void *, void *);
 
 /* Forward declare xcoff_rtype2howto for coffcode.h macro.  */
 void xcoff_rtype2howto (arelent *, struct internal_reloc *);
@@ -129,12 +129,12 @@ static bfd_boolean xcoff_write_armap_big
   (bfd *, unsigned int, struct orl *, unsigned int, int);
 static bfd_boolean xcoff_write_archive_contents_old (bfd *);
 static bfd_boolean xcoff_write_archive_contents_big (bfd *);
-static void xcoff_swap_ldhdr_in (bfd *, const PTR, struct internal_ldhdr *);
-static void xcoff_swap_ldhdr_out (bfd *, const struct internal_ldhdr *, PTR);
-static void xcoff_swap_ldsym_in (bfd *, const PTR, struct internal_ldsym *);
-static void xcoff_swap_ldsym_out (bfd *, const struct internal_ldsym *, PTR);
-static void xcoff_swap_ldrel_in (bfd *, const PTR, struct internal_ldrel *);
-static void xcoff_swap_ldrel_out (bfd *, const struct internal_ldrel *, PTR);
+static void xcoff_swap_ldhdr_in (bfd *, const void *, struct internal_ldhdr *);
+static void xcoff_swap_ldhdr_out (bfd *, const struct internal_ldhdr *, void *);
+static void xcoff_swap_ldsym_in (bfd *, const void *, struct internal_ldsym *);
+static void xcoff_swap_ldsym_out (bfd *, const struct internal_ldsym *, void *);
+static void xcoff_swap_ldrel_in (bfd *, const void *, struct internal_ldrel *);
+static void xcoff_swap_ldrel_out (bfd *, const struct internal_ldrel *, void *);
 static bfd_boolean xcoff_ppc_relocate_section
   (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
    struct internal_reloc *, struct internal_syment *, asection **);
@@ -451,7 +451,7 @@ xcoff_find_nearest_line (bfd *abfd,
 
 

 void
-_bfd_xcoff_swap_sym_in (bfd *abfd, PTR ext1, PTR in1)
+_bfd_xcoff_swap_sym_in (bfd *abfd, void * ext1, void * in1)
 {
   SYMENT *ext = (SYMENT *)ext1;
   struct internal_syment * in = (struct internal_syment *)in1;
@@ -474,7 +474,7 @@ _bfd_xcoff_swap_sym_in (bfd *abfd, PTR ext1, PTR in1)
 }
 
 unsigned int
-_bfd_xcoff_swap_sym_out (bfd *abfd, PTR inp, PTR extp)
+_bfd_xcoff_swap_sym_out (bfd *abfd, void * inp, void * extp)
 {
   struct internal_syment *in = (struct internal_syment *)inp;
   SYMENT *ext =(SYMENT *)extp;
@@ -498,8 +498,8 @@ _bfd_xcoff_swap_sym_out (bfd *abfd, PTR inp, PTR extp)
 }
 
 void
-_bfd_xcoff_swap_aux_in (bfd *abfd, PTR ext1, int type, int in_class,
-                        int indx, int numaux, PTR in1)
+_bfd_xcoff_swap_aux_in (bfd *abfd, void * ext1, int type, int in_class,
+                        int indx, int numaux, void * in1)
 {
   AUXENT * ext = (AUXENT *)ext1;
   union internal_auxent *in = (union internal_auxent *)in1;
@@ -608,15 +608,15 @@ _bfd_xcoff_swap_aux_in (bfd *abfd, PTR ext1, int type, int in_class,
 }
 
 unsigned int
-_bfd_xcoff_swap_aux_out (bfd *abfd, PTR inp, int type, int in_class,
+_bfd_xcoff_swap_aux_out (bfd *abfd, void * inp, int type, int in_class,
                          int indx ATTRIBUTE_UNUSED,
                          int numaux ATTRIBUTE_UNUSED,
-                         PTR extp)
+                         void * extp)
 {
   union internal_auxent *in = (union internal_auxent *)inp;
   AUXENT *ext = (AUXENT *)extp;
 
-  memset ((PTR)ext, 0, bfd_coff_auxesz (abfd));
+  memset (ext, 0, bfd_coff_auxesz (abfd));
   switch (in_class)
     {
     case C_FILE:
@@ -1263,7 +1263,7 @@ _bfd_xcoff_slurp_armap (bfd *abfd)
 	return FALSE;
 
       /* The symbol table starts with a normal archive header.  */
-      if (bfd_bread ((PTR) &hdr, (bfd_size_type) SIZEOF_AR_HDR, abfd)
+      if (bfd_bread (&hdr, (bfd_size_type) SIZEOF_AR_HDR, abfd)
 	  != SIZEOF_AR_HDR)
 	return FALSE;
 
@@ -1279,7 +1279,7 @@ _bfd_xcoff_slurp_armap (bfd *abfd)
       contents = (bfd_byte *) bfd_alloc (abfd, sz);
       if (contents == NULL)
 	return FALSE;
-      if (bfd_bread ((PTR) contents, sz, abfd) != sz)
+      if (bfd_bread (contents, sz, abfd) != sz)
 	return FALSE;
 
       /* The symbol table starts with a four byte count.  */
@@ -1318,7 +1318,7 @@ _bfd_xcoff_slurp_armap (bfd *abfd)
 	return FALSE;
 
       /* The symbol table starts with a normal archive header.  */
-      if (bfd_bread ((PTR) &hdr, (bfd_size_type) SIZEOF_AR_HDR_BIG, abfd)
+      if (bfd_bread (&hdr, (bfd_size_type) SIZEOF_AR_HDR_BIG, abfd)
 	  != SIZEOF_AR_HDR_BIG)
 	return FALSE;
 
@@ -1337,7 +1337,7 @@ _bfd_xcoff_slurp_armap (bfd *abfd)
       contents = (bfd_byte *) bfd_alloc (abfd, sz);
       if (contents == NULL)
 	return FALSE;
-      if (bfd_bread ((PTR) contents, sz, abfd) != sz)
+      if (bfd_bread (contents, sz, abfd) != sz)
 	return FALSE;
 
       /* The symbol table starts with an eight byte count.  */
@@ -1390,7 +1390,7 @@ _bfd_xcoff_archive_p (bfd *abfd)
   char magic[SXCOFFARMAG];
   bfd_size_type amt = SXCOFFARMAG;
 
-  if (bfd_bread ((PTR) magic, amt, abfd) != amt)
+  if (bfd_bread (magic, amt, abfd) != amt)
     {
       if (bfd_get_error () != bfd_error_system_call)
 	bfd_set_error (bfd_error_wrong_format);
@@ -1429,7 +1429,7 @@ _bfd_xcoff_archive_p (bfd *abfd)
 
       /* Now read the rest of the file header.  */
       amt = SIZEOF_AR_FILE_HDR - SXCOFFARMAG;
-      if (bfd_bread ((PTR) &hdr.memoff, amt, abfd) != amt)
+      if (bfd_bread (&hdr.memoff, amt, abfd) != amt)
 	{
 	  if (bfd_get_error () != bfd_error_system_call)
 	    bfd_set_error (bfd_error_wrong_format);
@@ -1456,7 +1456,7 @@ _bfd_xcoff_archive_p (bfd *abfd)
 
       /* Now read the rest of the file header.  */
       amt = SIZEOF_AR_FILE_HDR_BIG - SXCOFFARMAG;
-      if (bfd_bread ((PTR) &hdr.memoff, amt, abfd) != amt)
+      if (bfd_bread (&hdr.memoff, amt, abfd) != amt)
 	{
 	  if (bfd_get_error () != bfd_error_system_call)
 	    bfd_set_error (bfd_error_wrong_format);
@@ -1489,7 +1489,7 @@ _bfd_xcoff_archive_p (bfd *abfd)
 
 /* Read the archive header in an XCOFF archive.  */
 
-PTR
+void *
 _bfd_xcoff_read_ar_hdr (bfd *abfd)
 {
   bfd_size_type namlen;
@@ -1505,7 +1505,7 @@ _bfd_xcoff_read_ar_hdr (bfd *abfd)
       struct xcoff_ar_hdr hdr;
       struct xcoff_ar_hdr *hdrp;
 
-      if (bfd_bread ((PTR) &hdr, (bfd_size_type) SIZEOF_AR_HDR, abfd)
+      if (bfd_bread (&hdr, (bfd_size_type) SIZEOF_AR_HDR, abfd)
 	  != SIZEOF_AR_HDR)
 	{
 	  free (ret);
@@ -1537,7 +1537,7 @@ _bfd_xcoff_read_ar_hdr (bfd *abfd)
       struct xcoff_ar_hdr_big hdr;
       struct xcoff_ar_hdr_big *hdrp;
 
-      if (bfd_bread ((PTR) &hdr, (bfd_size_type) SIZEOF_AR_HDR_BIG, abfd)
+      if (bfd_bread (&hdr, (bfd_size_type) SIZEOF_AR_HDR_BIG, abfd)
 	  != SIZEOF_AR_HDR_BIG)
 	{
 	  free (ret);
@@ -1572,7 +1572,7 @@ _bfd_xcoff_read_ar_hdr (bfd *abfd)
   if (bfd_seek (abfd, (file_ptr) ((namlen & 1) + SXCOFFARFMAG), SEEK_CUR) != 0)
     return NULL;
 
-  return (PTR) ret;
+  return ret;
 }
 
 /* Open the next element in an XCOFF archive.  */
@@ -1713,7 +1713,7 @@ xcoff_write_armap_old (bfd *abfd, unsigned int elength ATTRIBUTE_UNUSED,
     if (*p == '\0')
       *p = ' ';
 
-  if (bfd_bwrite ((PTR) &hdr, (bfd_size_type) SIZEOF_AR_HDR, abfd)
+  if (bfd_bwrite (&hdr, (bfd_size_type) SIZEOF_AR_HDR, abfd)
       != SIZEOF_AR_HDR
       || (bfd_bwrite (XCOFFARFMAG, (bfd_size_type) SXCOFFARFMAG, abfd)
 	  != SXCOFFARFMAG))
@@ -2230,20 +2230,20 @@ xcoff_write_archive_contents_old (bfd *abfd)
     if (*p == '\0')
       *p = ' ';
 
-  if ((bfd_bwrite ((PTR) &ahdr, (bfd_size_type) SIZEOF_AR_HDR, abfd)
+  if ((bfd_bwrite (&ahdr, (bfd_size_type) SIZEOF_AR_HDR, abfd)
        != SIZEOF_AR_HDR)
-      || (bfd_bwrite ((PTR) XCOFFARFMAG, (bfd_size_type) SXCOFFARFMAG, abfd)
+      || (bfd_bwrite (XCOFFARFMAG, (bfd_size_type) SXCOFFARFMAG, abfd)
 	  != SXCOFFARFMAG))
     return FALSE;
 
   sprintf (decbuf, "%-12ld", (long) count);
-  if (bfd_bwrite ((PTR) decbuf, (bfd_size_type) XCOFFARMAG_ELEMENT_SIZE, abfd)
+  if (bfd_bwrite (decbuf, (bfd_size_type) XCOFFARMAG_ELEMENT_SIZE, abfd)
       != XCOFFARMAG_ELEMENT_SIZE)
     return FALSE;
   for (i = 0; i < (size_t) count; i++)
     {
       sprintf (decbuf, "%-12ld", (long) offsets[i]);
-      if (bfd_bwrite ((PTR) decbuf, (bfd_size_type) XCOFFARMAG_ELEMENT_SIZE,
+      if (bfd_bwrite (decbuf, (bfd_size_type) XCOFFARMAG_ELEMENT_SIZE,
 		      abfd) != XCOFFARMAG_ELEMENT_SIZE)
 	return FALSE;
     }
@@ -2254,7 +2254,7 @@ xcoff_write_archive_contents_old (bfd *abfd)
 
       name = normalize_filename (sub);
       namlen = strlen (name);
-      if (bfd_bwrite ((PTR) name, namlen + 1, abfd) != namlen + 1)
+      if (bfd_bwrite (name, namlen + 1, abfd) != namlen + 1)
 	return FALSE;
     }
 
@@ -2268,7 +2268,7 @@ xcoff_write_archive_contents_old (bfd *abfd)
     {
       BFD_ASSERT (nextoff == bfd_tell (abfd));
       sprintf (fhdr.symoff, "%ld", (long) nextoff);
-      bfd_ardata (abfd)->tdata = (PTR) &fhdr;
+      bfd_ardata (abfd)->tdata = &fhdr;
       if (! _bfd_compute_and_write_armap (abfd, 0))
 	return FALSE;
     }
@@ -2281,7 +2281,7 @@ xcoff_write_archive_contents_old (bfd *abfd)
       *p = ' ';
 
   if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
-      || (bfd_bwrite ((PTR) &fhdr, (bfd_size_type) SIZEOF_AR_FILE_HDR, abfd)
+      || (bfd_bwrite (&fhdr, (bfd_size_type) SIZEOF_AR_FILE_HDR, abfd)
 	  != SIZEOF_AR_FILE_HDR))
     return FALSE;
 
@@ -2509,7 +2509,7 @@ xcoff_write_archive_contents_big (bfd *abfd)
       /* Save nextoff in fhdr.symoff so the armap routine can use it.  */
       PRINT20 (fhdr.symoff, nextoff);
 
-      bfd_ardata (abfd)->tdata = (PTR) &fhdr;
+      bfd_ardata (abfd)->tdata = &fhdr;
       if (! _bfd_compute_and_write_armap (abfd, 0))
 	return FALSE;
     }
@@ -2517,7 +2517,7 @@ xcoff_write_archive_contents_big (bfd *abfd)
   /* Write out the archive file header.  */
 
   if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
-      || (bfd_bwrite ((PTR) &fhdr, (bfd_size_type) SIZEOF_AR_FILE_HDR_BIG,
+      || (bfd_bwrite (&fhdr, (bfd_size_type) SIZEOF_AR_FILE_HDR_BIG,
 		      abfd) != SIZEOF_AR_FILE_HDR_BIG))
     return FALSE;
 
@@ -2559,7 +2559,7 @@ _bfd_xcoff_sizeof_headers (bfd *abfd,
 /* Swap in the ldhdr structure.  */
 
 static void
-xcoff_swap_ldhdr_in (bfd *abfd, const PTR s, struct internal_ldhdr *dst)
+xcoff_swap_ldhdr_in (bfd *abfd, const void * s, struct internal_ldhdr *dst)
 {
   const struct external_ldhdr *src = (const struct external_ldhdr *) s;
 
@@ -2576,7 +2576,7 @@ xcoff_swap_ldhdr_in (bfd *abfd, const PTR s, struct internal_ldhdr *dst)
 /* Swap out the ldhdr structure.  */
 
 static void
-xcoff_swap_ldhdr_out (bfd *abfd, const struct internal_ldhdr *src, PTR d)
+xcoff_swap_ldhdr_out (bfd *abfd, const struct internal_ldhdr *src, void * d)
 {
   struct external_ldhdr *dst = (struct external_ldhdr *) d;
 
@@ -2593,7 +2593,7 @@ xcoff_swap_ldhdr_out (bfd *abfd, const struct internal_ldhdr *src, PTR d)
 /* Swap in the ldsym structure.  */
 
 static void
-xcoff_swap_ldsym_in (bfd *abfd, const PTR s, struct internal_ldsym *dst)
+xcoff_swap_ldsym_in (bfd *abfd, const void * s, struct internal_ldsym *dst)
 {
   const struct external_ldsym *src = (const struct external_ldsym *) s;
 
@@ -2614,7 +2614,7 @@ xcoff_swap_ldsym_in (bfd *abfd, const PTR s, struct internal_ldsym *dst)
 /* Swap out the ldsym structure.  */
 
 static void
-xcoff_swap_ldsym_out (bfd *abfd, const struct internal_ldsym *src, PTR d)
+xcoff_swap_ldsym_out (bfd *abfd, const struct internal_ldsym *src, void * d)
 {
   struct external_ldsym *dst = (struct external_ldsym *) d;
 
@@ -2635,7 +2635,7 @@ xcoff_swap_ldsym_out (bfd *abfd, const struct internal_ldsym *src, PTR d)
 }
 
 static void
-xcoff_swap_reloc_in (bfd *abfd, PTR s, PTR d)
+xcoff_swap_reloc_in (bfd *abfd, void * s, void * d)
 {
   struct external_reloc *src = (struct external_reloc *) s;
   struct internal_reloc *dst = (struct internal_reloc *) d;
@@ -2649,7 +2649,7 @@ xcoff_swap_reloc_in (bfd *abfd, PTR s, PTR d)
 }
 
 static unsigned int
-xcoff_swap_reloc_out (bfd *abfd, PTR s, PTR d)
+xcoff_swap_reloc_out (bfd *abfd, void * s, void * d)
 {
   struct internal_reloc *src = (struct internal_reloc *) s;
   struct external_reloc *dst = (struct external_reloc *) d;
@@ -2665,7 +2665,7 @@ xcoff_swap_reloc_out (bfd *abfd, PTR s, PTR d)
 /* Swap in the ldrel structure.  */
 
 static void
-xcoff_swap_ldrel_in (bfd *abfd, const PTR s, struct internal_ldrel *dst)
+xcoff_swap_ldrel_in (bfd *abfd, const void * s, struct internal_ldrel *dst)
 {
   const struct external_ldrel *src = (const struct external_ldrel *) s;
 
@@ -2678,7 +2678,7 @@ xcoff_swap_ldrel_in (bfd *abfd, const PTR s, struct internal_ldrel *dst)
 /* Swap out the ldrel structure.  */
 
 static void
-xcoff_swap_ldrel_out (bfd *abfd, const struct internal_ldrel *src, PTR d)
+xcoff_swap_ldrel_out (bfd *abfd, const struct internal_ldrel *src, void * d)
 {
   struct external_ldrel *dst = (struct external_ldrel *) d;
 
@@ -4163,7 +4163,7 @@ const bfd_target rs6000coff_vec =
     /* Opposite endian version, none exists */
     NULL,
 
-    (void *) &bfd_xcoff_backend_data,
+    & bfd_xcoff_backend_data,
   };
 
 /* xcoff-powermac target
@@ -4418,5 +4418,5 @@ const bfd_target pmac_xcoff_vec =
     /* Opposite endian version, none exists */
     NULL,
 
-    (void *) &bfd_pmac_xcoff_backend_data,
+    & bfd_pmac_xcoff_backend_data,
   };
diff --git a/bfd/coff-sh.c b/bfd/coff-sh.c
index e707add..f5e07a5 100644
--- a/bfd/coff-sh.c
+++ b/bfd/coff-sh.c
@@ -1,6 +1,6 @@
 /* BFD back-end for Renesas Super-H COFF binaries.
    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2011
+   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012
    Free Software Foundation, Inc.
    Contributed by Cygnus Support.
    Written by Steve Chamberlain, <sac at cygnus.com>.
@@ -38,9 +38,9 @@
 
 #ifndef COFF_IMAGE_WITH_PE
 static bfd_boolean sh_align_load_span
-  PARAMS ((bfd *, asection *, bfd_byte *,
-	   bfd_boolean (*) (bfd *, asection *, PTR, bfd_byte *, bfd_vma),
-	   PTR, bfd_vma **, bfd_vma *, bfd_vma, bfd_vma, bfd_boolean *));
+  (bfd *, asection *, bfd_byte *,
+   bfd_boolean (*) (bfd *, asection *, void *, bfd_byte *, bfd_vma),
+   void *, bfd_vma **, bfd_vma *, bfd_vma, bfd_vma, bfd_boolean *);
 
 #define _bfd_sh_align_load_span sh_align_load_span
 #endif
@@ -56,28 +56,6 @@ static bfd_boolean sh_align_load_span
 #include "libcoff.h"
 
 /* Internal functions.  */
-static bfd_reloc_status_type sh_reloc
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
-static long get_symbol_value PARAMS ((asymbol *));
-static bfd_boolean sh_relax_section
-  PARAMS ((bfd *, asection *, struct bfd_link_info *, bfd_boolean *));
-static bfd_boolean sh_relax_delete_bytes
-  PARAMS ((bfd *, asection *, bfd_vma, int));
-#ifndef COFF_IMAGE_WITH_PE
-static const struct sh_opcode *sh_insn_info PARAMS ((unsigned int));
-#endif
-static bfd_boolean sh_align_loads
-  PARAMS ((bfd *, asection *, struct internal_reloc *, bfd_byte *,
-	   bfd_boolean *));
-static bfd_boolean sh_swap_insns
-  PARAMS ((bfd *, asection *, PTR, bfd_byte *, bfd_vma));
-static bfd_boolean sh_relocate_section
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
-	   struct internal_reloc *, struct internal_syment *, asection **));
-static bfd_byte *sh_coff_get_relocated_section_contents
-  PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_order *,
-	   bfd_byte *, bfd_boolean, asymbol **));
-static reloc_howto_type * sh_coff_reloc_type_lookup PARAMS ((bfd *, bfd_reloc_code_real_type));
 
 #ifdef COFF_WITH_PE
 /* Can't build import tables with 2**4 alignment.  */
@@ -96,17 +74,27 @@ static reloc_howto_type * sh_coff_reloc_type_lookup PARAMS ((bfd *, bfd_reloc_co
 #define COFF_LONG_FILENAMES
 
 #ifdef COFF_WITH_PE
-static bfd_boolean in_reloc_p PARAMS ((bfd *, reloc_howto_type *));
 /* Return TRUE if this relocation should
    appear in the output .reloc section.  */
-static bfd_boolean in_reloc_p (abfd, howto)
-     bfd * abfd ATTRIBUTE_UNUSED;
-     reloc_howto_type * howto;
+
+static bfd_boolean
+in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED,
+	    reloc_howto_type * howto)
 {
   return ! howto->pc_relative && howto->type != R_SH_IMAGEBASE;
 }
 #endif
 
+static bfd_reloc_status_type
+sh_reloc (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+static bfd_boolean
+sh_relocate_section (bfd *, struct bfd_link_info *, bfd *, asection *,
+		     bfd_byte *, struct internal_reloc *,
+		     struct internal_syment *, asection **);
+static bfd_boolean
+sh_align_loads (bfd *, asection *, struct internal_reloc *,
+		bfd_byte *, bfd_boolean *);
+
 /* The supported relocations.  There are a lot of relocations defined
    in coff/internal.h which we do not expect to ever see.  */
 static reloc_howto_type sh_coff_howtos[] =
@@ -407,8 +395,7 @@ static reloc_howto_type sh_coff_howtos[] =
 /* Get the value of a symbol, when performing a relocation.  */
 
 static long
-get_symbol_value (symbol)
-     asymbol *symbol;
+get_symbol_value (asymbol *symbol)
 {
   bfd_vma relocation;
 
@@ -426,16 +413,15 @@ get_symbol_value (symbol)
 /* Convert an rtype to howto for the COFF backend linker.
    Copied from coff-i386.  */
 #define coff_rtype_to_howto coff_sh_rtype_to_howto
-static reloc_howto_type * coff_sh_rtype_to_howto PARAMS ((bfd *, asection *, struct internal_reloc *, struct coff_link_hash_entry *, struct internal_syment *, bfd_vma *));
+
 
 static reloc_howto_type *
-coff_sh_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
-     bfd * abfd ATTRIBUTE_UNUSED;
-     asection * sec;
-     struct internal_reloc * rel;
-     struct coff_link_hash_entry * h;
-     struct internal_syment * sym;
-     bfd_vma * addendp;
+coff_sh_rtype_to_howto (bfd * abfd ATTRIBUTE_UNUSED,
+			asection * sec,
+			struct internal_reloc * rel,
+			struct coff_link_hash_entry * h,
+			struct internal_syment * sym,
+			bfd_vma * addendp)
 {
   reloc_howto_type * howto;
 
@@ -508,9 +494,8 @@ static const struct shcoff_reloc_map sh_reloc_map[] =
 #define coff_bfd_reloc_name_lookup sh_coff_reloc_name_lookup
 
 static reloc_howto_type *
-sh_coff_reloc_type_lookup (abfd, code)
-     bfd * abfd ATTRIBUTE_UNUSED;
-     bfd_reloc_code_real_type code;
+sh_coff_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
+			   bfd_reloc_code_real_type code)
 {
   unsigned int i;
 
@@ -575,15 +560,13 @@ sh_coff_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
 /* This is the howto function for the SH relocations.  */
 
 static bfd_reloc_status_type
-sh_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
-	  error_message)
-     bfd *abfd;
-     arelent *reloc_entry;
-     asymbol *symbol_in;
-     PTR data;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+sh_reloc (bfd *      abfd,
+	  arelent *  reloc_entry,
+	  asymbol *  symbol_in,
+	  void *     data,
+	  asection * input_section,
+	  bfd *      output_bfd,
+	  char **    error_message ATTRIBUTE_UNUSED)
 {
   unsigned long insn;
   bfd_vma sym_value;
@@ -673,6 +656,9 @@ sh_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
 
 #include "coffcode.h"
 

+static bfd_boolean
+sh_relax_delete_bytes (bfd *, asection *, bfd_vma, int);
+
 /* This function handles relaxing on the SH.
 
    Function calls on the SH look like this:
@@ -717,11 +703,10 @@ sh_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
    can, by swapping them with one of the adjacent instructions.  */
 
 static bfd_boolean
-sh_relax_section (abfd, sec, link_info, again)
-     bfd *abfd;
-     asection *sec;
-     struct bfd_link_info *link_info;
-     bfd_boolean *again;
+sh_relax_section (bfd *abfd,
+		  asection *sec,
+		  struct bfd_link_info *link_info,
+		  bfd_boolean *again)
 {
   struct internal_reloc *internal_relocs;
   bfd_boolean have_code;
@@ -738,7 +723,7 @@ sh_relax_section (abfd, sec, link_info, again)
   if (coff_section_data (abfd, sec) == NULL)
     {
       bfd_size_type amt = sizeof (struct coff_section_tdata);
-      sec->used_by_bfd = (PTR) bfd_zalloc (abfd, amt);
+      sec->used_by_bfd = bfd_zalloc (abfd, amt);
       if (sec->used_by_bfd == NULL)
 	return FALSE;
     }
@@ -1074,11 +1059,10 @@ sh_relax_section (abfd, sec, link_info, again)
 /* Delete some bytes from a section while relaxing.  */
 
 static bfd_boolean
-sh_relax_delete_bytes (abfd, sec, addr, count)
-     bfd *abfd;
-     asection *sec;
-     bfd_vma addr;
-     int count;
+sh_relax_delete_bytes (bfd *abfd,
+		       asection *sec,
+		       bfd_vma addr,
+		       int count)
 {
   bfd_byte *contents;
   struct internal_reloc *irel, *irelend;
@@ -1470,7 +1454,7 @@ sh_relax_delete_bytes (abfd, sec, addr, count)
     {
       struct internal_syment isym;
 
-      bfd_coff_swap_sym_in (abfd, (PTR) esym, (PTR) &isym);
+      bfd_coff_swap_sym_in (abfd, esym, &isym);
 
       if (isym.n_scnum == sec->target_index
 	  && (bfd_vma) isym.n_value > addr
@@ -1478,7 +1462,7 @@ sh_relax_delete_bytes (abfd, sec, addr, count)
 	{
 	  isym.n_value -= count;
 
-	  bfd_coff_swap_sym_out (abfd, (PTR) &isym, (PTR) esym);
+	  bfd_coff_swap_sym_out (abfd, &isym, esym);
 
 	  if (*sym_hash != NULL)
 	    {
@@ -1628,24 +1612,6 @@ struct sh_opcode
 #define MAP(a) a, sizeof a / sizeof a[0]
 
 #ifndef COFF_IMAGE_WITH_PE
-static bfd_boolean sh_insn_uses_reg
-  PARAMS ((unsigned int, const struct sh_opcode *, unsigned int));
-static bfd_boolean sh_insn_sets_reg
-  PARAMS ((unsigned int, const struct sh_opcode *, unsigned int));
-static bfd_boolean sh_insn_uses_or_sets_reg
-  PARAMS ((unsigned int, const struct sh_opcode *, unsigned int));
-static bfd_boolean sh_insn_uses_freg
-  PARAMS ((unsigned int, const struct sh_opcode *, unsigned int));
-static bfd_boolean sh_insn_sets_freg
-  PARAMS ((unsigned int, const struct sh_opcode *, unsigned int));
-static bfd_boolean sh_insn_uses_or_sets_freg
-  PARAMS ((unsigned int, const struct sh_opcode *, unsigned int));
-static bfd_boolean sh_insns_conflict
-  PARAMS ((unsigned int, const struct sh_opcode *, unsigned int,
-	   const struct sh_opcode *));
-static bfd_boolean sh_load_use
-  PARAMS ((unsigned int, const struct sh_opcode *, unsigned int,
-	   const struct sh_opcode *));
 
 /* The opcode maps.  */
 
@@ -2054,8 +2020,7 @@ static const struct sh_minor_opcode sh_dsp_opcodef[] =
    recognized.  */
 
 static const struct sh_opcode *
-sh_insn_info (insn)
-     unsigned int insn;
+sh_insn_info (unsigned int insn)
 {
   const struct sh_major_opcode *maj;
   const struct sh_minor_opcode *min, *minend;
@@ -2082,27 +2047,12 @@ sh_insn_info (insn)
   return NULL;
 }
 
-/* See whether an instruction uses or sets a general purpose register */
-
-static bfd_boolean
-sh_insn_uses_or_sets_reg (insn, op, reg)
-     unsigned int insn;
-     const struct sh_opcode *op;
-     unsigned int reg;
-{
-  if (sh_insn_uses_reg (insn, op, reg))
-    return TRUE;
-
-  return sh_insn_sets_reg (insn, op, reg);
-}
-
 /* See whether an instruction uses a general purpose register.  */
 
 static bfd_boolean
-sh_insn_uses_reg (insn, op, reg)
-     unsigned int insn;
-     const struct sh_opcode *op;
-     unsigned int reg;
+sh_insn_uses_reg (unsigned int insn,
+		  const struct sh_opcode *op,
+		  unsigned int reg)
 {
   unsigned int f;
 
@@ -2128,10 +2078,9 @@ sh_insn_uses_reg (insn, op, reg)
 /* See whether an instruction sets a general purpose register.  */
 
 static bfd_boolean
-sh_insn_sets_reg (insn, op, reg)
-     unsigned int insn;
-     const struct sh_opcode *op;
-     unsigned int reg;
+sh_insn_sets_reg (unsigned int insn,
+		  const struct sh_opcode *op,
+		  unsigned int reg)
 {
   unsigned int f;
 
@@ -2152,27 +2101,25 @@ sh_insn_sets_reg (insn, op, reg)
   return FALSE;
 }
 
-/* See whether an instruction uses or sets a floating point register */
+/* See whether an instruction uses or sets a general purpose register */
 
 static bfd_boolean
-sh_insn_uses_or_sets_freg (insn, op, reg)
-     unsigned int insn;
-     const struct sh_opcode *op;
-     unsigned int reg;
+sh_insn_uses_or_sets_reg (unsigned int insn,
+			  const struct sh_opcode *op,
+			  unsigned int reg)
 {
-  if (sh_insn_uses_freg (insn, op, reg))
+  if (sh_insn_uses_reg (insn, op, reg))
     return TRUE;
 
-  return sh_insn_sets_freg (insn, op, reg);
+  return sh_insn_sets_reg (insn, op, reg);
 }
 
 /* See whether an instruction uses a floating point register.  */
 
 static bfd_boolean
-sh_insn_uses_freg (insn, op, freg)
-     unsigned int insn;
-     const struct sh_opcode *op;
-     unsigned int freg;
+sh_insn_uses_freg (unsigned int insn,
+		   const struct sh_opcode *op,
+		   unsigned int freg)
 {
   unsigned int f;
 
@@ -2203,10 +2150,9 @@ sh_insn_uses_freg (insn, op, freg)
 /* See whether an instruction sets a floating point register.  */
 
 static bfd_boolean
-sh_insn_sets_freg (insn, op, freg)
-     unsigned int insn;
-     const struct sh_opcode *op;
-     unsigned int freg;
+sh_insn_sets_freg (unsigned int insn,
+		   const struct sh_opcode *op,
+		   unsigned int freg)
 {
   unsigned int f;
 
@@ -2228,17 +2174,29 @@ sh_insn_sets_freg (insn, op, freg)
   return FALSE;
 }
 
+/* See whether an instruction uses or sets a floating point register */
+
+static bfd_boolean
+sh_insn_uses_or_sets_freg (unsigned int insn,
+			   const struct sh_opcode *op,
+			   unsigned int reg)
+{
+  if (sh_insn_uses_freg (insn, op, reg))
+    return TRUE;
+
+  return sh_insn_sets_freg (insn, op, reg);
+}
+
 /* See whether instructions I1 and I2 conflict, assuming I1 comes
    before I2.  OP1 and OP2 are the corresponding sh_opcode structures.
    This should return TRUE if there is a conflict, or FALSE if the
    instructions can be swapped safely.  */
 
 static bfd_boolean
-sh_insns_conflict (i1, op1, i2, op2)
-     unsigned int i1;
-     const struct sh_opcode *op1;
-     unsigned int i2;
-     const struct sh_opcode *op2;
+sh_insns_conflict (unsigned int i1,
+		   const struct sh_opcode *op1,
+		   unsigned int i2,
+		   const struct sh_opcode *op2)
 {
   unsigned int f1, f2;
 
@@ -2300,11 +2258,10 @@ sh_insns_conflict (i1, op1, i2, op2)
    TRUE if I1 loads a register which I2 uses.  */
 
 static bfd_boolean
-sh_load_use (i1, op1, i2, op2)
-     unsigned int i1;
-     const struct sh_opcode *op1;
-     unsigned int i2;
-     const struct sh_opcode *op2;
+sh_load_use (unsigned int i1,
+	     const struct sh_opcode *op1,
+	     unsigned int i2,
+	     const struct sh_opcode *op2)
 {
   unsigned int f1;
 
@@ -2346,18 +2303,16 @@ sh_load_use (i1, op1, i2, op2)
 static
 #endif
 bfd_boolean
-_bfd_sh_align_load_span (abfd, sec, contents, swap, relocs,
-			 plabel, label_end, start, stop, pswapped)
-     bfd *abfd;
-     asection *sec;
-     bfd_byte *contents;
-     bfd_boolean (*swap) PARAMS ((bfd *, asection *, PTR, bfd_byte *, bfd_vma));
-     PTR relocs;
-     bfd_vma **plabel;
-     bfd_vma *label_end;
-     bfd_vma start;
-     bfd_vma stop;
-     bfd_boolean *pswapped;
+_bfd_sh_align_load_span (bfd *abfd,
+			 asection *sec,
+			 bfd_byte *contents,
+			 bfd_boolean (*swap) (bfd *, asection *, void *, bfd_byte *, bfd_vma),
+			 void * relocs,
+			 bfd_vma **plabel,
+			 bfd_vma *label_end,
+			 bfd_vma start,
+			 bfd_vma stop,
+			 bfd_boolean *pswapped)
 {
   int dsp = (abfd->arch_info->mach == bfd_mach_sh_dsp
 	     || abfd->arch_info->mach == bfd_mach_sh3_dsp);
@@ -2557,91 +2512,14 @@ _bfd_sh_align_load_span (abfd, sec, contents, swap, relocs,
 }
 #endif /* not COFF_IMAGE_WITH_PE */
 
-/* Look for loads and stores which we can align to four byte
-   boundaries.  See the longer comment above sh_relax_section for why
-   this is desirable.  This sets *PSWAPPED if some instruction was
-   swapped.  */
-
-static bfd_boolean
-sh_align_loads (abfd, sec, internal_relocs, contents, pswapped)
-     bfd *abfd;
-     asection *sec;
-     struct internal_reloc *internal_relocs;
-     bfd_byte *contents;
-     bfd_boolean *pswapped;
-{
-  struct internal_reloc *irel, *irelend;
-  bfd_vma *labels = NULL;
-  bfd_vma *label, *label_end;
-  bfd_size_type amt;
-
-  *pswapped = FALSE;
-
-  irelend = internal_relocs + sec->reloc_count;
-
-  /* Get all the addresses with labels on them.  */
-  amt = (bfd_size_type) sec->reloc_count * sizeof (bfd_vma);
-  labels = (bfd_vma *) bfd_malloc (amt);
-  if (labels == NULL)
-    goto error_return;
-  label_end = labels;
-  for (irel = internal_relocs; irel < irelend; irel++)
-    {
-      if (irel->r_type == R_SH_LABEL)
-	{
-	  *label_end = irel->r_vaddr - sec->vma;
-	  ++label_end;
-	}
-    }
-
-  /* Note that the assembler currently always outputs relocs in
-     address order.  If that ever changes, this code will need to sort
-     the label values and the relocs.  */
-
-  label = labels;
-
-  for (irel = internal_relocs; irel < irelend; irel++)
-    {
-      bfd_vma start, stop;
-
-      if (irel->r_type != R_SH_CODE)
-	continue;
-
-      start = irel->r_vaddr - sec->vma;
-
-      for (irel++; irel < irelend; irel++)
-	if (irel->r_type == R_SH_DATA)
-	  break;
-      if (irel < irelend)
-	stop = irel->r_vaddr - sec->vma;
-      else
-	stop = sec->size;
-
-      if (! _bfd_sh_align_load_span (abfd, sec, contents, sh_swap_insns,
-				     (PTR) internal_relocs, &label,
-				     label_end, start, stop, pswapped))
-	goto error_return;
-    }
-
-  free (labels);
-
-  return TRUE;
-
- error_return:
-  if (labels != NULL)
-    free (labels);
-  return FALSE;
-}
-
 /* Swap two SH instructions.  */
 
 static bfd_boolean
-sh_swap_insns (abfd, sec, relocs, contents, addr)
-     bfd *abfd;
-     asection *sec;
-     PTR relocs;
-     bfd_byte *contents;
-     bfd_vma addr;
+sh_swap_insns (bfd *      abfd,
+	       asection * sec,
+	       void *     relocs,
+	       bfd_byte * contents,
+	       bfd_vma    addr)
 {
   struct internal_reloc *internal_relocs = (struct internal_reloc *) relocs;
   unsigned short i1, i2;
@@ -2764,21 +2642,94 @@ sh_swap_insns (abfd, sec, relocs, contents, addr)
 
   return TRUE;
 }
+
+/* Look for loads and stores which we can align to four byte
+   boundaries.  See the longer comment above sh_relax_section for why
+   this is desirable.  This sets *PSWAPPED if some instruction was
+   swapped.  */
+
+static bfd_boolean
+sh_align_loads (bfd *abfd,
+		asection *sec,
+		struct internal_reloc *internal_relocs,
+		bfd_byte *contents,
+		bfd_boolean *pswapped)
+{
+  struct internal_reloc *irel, *irelend;
+  bfd_vma *labels = NULL;
+  bfd_vma *label, *label_end;
+  bfd_size_type amt;
+
+  *pswapped = FALSE;
+
+  irelend = internal_relocs + sec->reloc_count;
+
+  /* Get all the addresses with labels on them.  */
+  amt = (bfd_size_type) sec->reloc_count * sizeof (bfd_vma);
+  labels = (bfd_vma *) bfd_malloc (amt);
+  if (labels == NULL)
+    goto error_return;
+  label_end = labels;
+  for (irel = internal_relocs; irel < irelend; irel++)
+    {
+      if (irel->r_type == R_SH_LABEL)
+	{
+	  *label_end = irel->r_vaddr - sec->vma;
+	  ++label_end;
+	}
+    }
+
+  /* Note that the assembler currently always outputs relocs in
+     address order.  If that ever changes, this code will need to sort
+     the label values and the relocs.  */
+
+  label = labels;
+
+  for (irel = internal_relocs; irel < irelend; irel++)
+    {
+      bfd_vma start, stop;
+
+      if (irel->r_type != R_SH_CODE)
+	continue;
+
+      start = irel->r_vaddr - sec->vma;
+
+      for (irel++; irel < irelend; irel++)
+	if (irel->r_type == R_SH_DATA)
+	  break;
+      if (irel < irelend)
+	stop = irel->r_vaddr - sec->vma;
+      else
+	stop = sec->size;
+
+      if (! _bfd_sh_align_load_span (abfd, sec, contents, sh_swap_insns,
+				     internal_relocs, &label,
+				     label_end, start, stop, pswapped))
+	goto error_return;
+    }
+
+  free (labels);
+
+  return TRUE;
+
+ error_return:
+  if (labels != NULL)
+    free (labels);
+  return FALSE;
+}
 

 /* This is a modification of _bfd_coff_generic_relocate_section, which
    will handle SH relaxing.  */
 
 static bfd_boolean
-sh_relocate_section (output_bfd, info, input_bfd, input_section, contents,
-		     relocs, syms, sections)
-     bfd *output_bfd ATTRIBUTE_UNUSED;
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     asection *input_section;
-     bfd_byte *contents;
-     struct internal_reloc *relocs;
-     struct internal_syment *syms;
-     asection **sections;
+sh_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
+		     struct bfd_link_info *info,
+		     bfd *input_bfd,
+		     asection *input_section,
+		     bfd_byte *contents,
+		     struct internal_reloc *relocs,
+		     struct internal_syment *syms,
+		     asection **sections)
 {
   struct internal_reloc *rel;
   struct internal_reloc *relend;
@@ -2942,14 +2893,12 @@ sh_relocate_section (output_bfd, info, input_bfd, input_section, contents,
    which uses sh_relocate_section.  */
 
 static bfd_byte *
-sh_coff_get_relocated_section_contents (output_bfd, link_info, link_order,
-					data, relocatable, symbols)
-     bfd *output_bfd;
-     struct bfd_link_info *link_info;
-     struct bfd_link_order *link_order;
-     bfd_byte *data;
-     bfd_boolean relocatable;
-     asymbol **symbols;
+sh_coff_get_relocated_section_contents (bfd *output_bfd,
+					struct bfd_link_info *link_info,
+					struct bfd_link_order *link_order,
+					bfd_byte *data,
+					bfd_boolean relocatable,
+					asymbol **symbols)
 {
   asection *input_section = link_order->u.indirect.section;
   bfd *input_bfd = input_section->owner;
@@ -3006,7 +2955,7 @@ sh_coff_get_relocated_section_contents (output_bfd, link_info, link_order,
       esymend = esym + obj_raw_syment_count (input_bfd) * symesz;
       while (esym < esymend)
 	{
-	  bfd_coff_swap_sym_in (input_bfd, (PTR) esym, (PTR) isymp);
+	  bfd_coff_swap_sym_in (input_bfd, esym, isymp);
 
 	  if (isymp->n_scnum != 0)
 	    *secpp = coff_section_from_bfd_index (input_bfd, isymp->n_scnum);
@@ -3073,8 +3022,7 @@ CREATE_LITTLE_COFF_TARGET_VEC (TARGET_SYM, TARGET_SHL_NAME, BFD_IS_RELAXABLE,
 #endif
 
 #ifndef TARGET_SHL_SYM
-static const bfd_target * coff_small_object_p PARAMS ((bfd *));
-static bfd_boolean coff_small_new_section_hook PARAMS ((bfd *, asection *));
+
 /* Some people want versions of the SH COFF target which do not align
    to 16 byte boundaries.  We implement that by adding a couple of new
    target vectors.  These are just like the ones above, but they
@@ -3090,8 +3038,7 @@ static bfd_boolean coff_small_new_section_hook PARAMS ((bfd *, asection *));
    Otherwise we won't recognize the non default endianness.  */
 
 static const bfd_target *
-coff_small_object_p (abfd)
-     bfd *abfd;
+coff_small_object_p (bfd *abfd)
 {
   if (abfd->target_defaulted)
     {
@@ -3104,9 +3051,7 @@ coff_small_object_p (abfd)
 /* Set the section alignment for the small versions.  */
 
 static bfd_boolean
-coff_small_new_section_hook (abfd, section)
-     bfd *abfd;
-     asection *section;
+coff_small_new_section_hook (bfd *abfd, asection *section)
 {
   if (! coff_new_section_hook (abfd, section))
     return FALSE;
@@ -3212,7 +3157,7 @@ const bfd_target shcoff_small_vec =
 
   & shlcoff_small_vec,
 
-  (PTR) &bfd_coff_small_swap_table
+  & bfd_coff_small_swap_table
 };
 
 const bfd_target shlcoff_small_vec =
@@ -3257,6 +3202,6 @@ const bfd_target shlcoff_small_vec =
 
   & shcoff_small_vec,
 
-  (PTR) &bfd_coff_small_swap_table
+  & bfd_coff_small_swap_table
 };
 #endif
diff --git a/bfd/coff-sparc.c b/bfd/coff-sparc.c
index a9a699a..d3802c0 100644
--- a/bfd/coff-sparc.c
+++ b/bfd/coff-sparc.c
@@ -1,6 +1,6 @@
 /* BFD back-end for Sparc COFF files.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000, 2001,
-   2002, 2003, 2005, 2007, 2008  Free Software Foundation, Inc.
+   2002, 2003, 2005, 2007, 2008, 2012  Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -34,11 +34,6 @@
 /* The page size is a guess based on ELF.  */
 #define COFF_PAGE_SIZE 0x10000
 
-
-static reloc_howto_type *coff_sparc_reloc_type_lookup
-  PARAMS ((bfd *, bfd_reloc_code_real_type));
-static void rtype2howto PARAMS ((arelent *, struct internal_reloc *));
-
 enum reloc_type
   {
     R_SPARC_NONE = 0,
@@ -58,20 +53,15 @@ enum reloc_type
   };
 
 /* This is stolen pretty directly from elf.c.  */
-static bfd_reloc_status_type
-bfd_coff_generic_reloc PARAMS ((bfd *, arelent *, asymbol *, PTR,
-				asection *, bfd *, char **));
 
 static bfd_reloc_status_type
-bfd_coff_generic_reloc (abfd, reloc_entry, symbol, data, input_section,
-			output_bfd, error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry;
-     asymbol *symbol;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+bfd_coff_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+			arelent *reloc_entry,
+			asymbol *symbol,
+			void * data ATTRIBUTE_UNUSED,
+			asection *input_section,
+			bfd *output_bfd,
+			char **error_message ATTRIBUTE_UNUSED)
 {
   if (output_bfd != (bfd *) NULL
       && (symbol->flags & BSF_SECTION_SYM) == 0)
@@ -111,7 +101,8 @@ static reloc_howto_type coff_sparc_howto_table[] =
   HOWTO(R_SPARC_UA32,    0,0,00,FALSE,0,complain_overflow_dont,    bfd_coff_generic_reloc,"R_SPARC_UA32",    FALSE,0,0x00000000,TRUE),
 };
 
-struct coff_reloc_map {
+struct coff_reloc_map
+{
   bfd_reloc_code_real_type bfd_reloc_val;
   unsigned char coff_reloc_val;
 };
@@ -145,9 +136,8 @@ static const struct coff_reloc_map sparc_reloc_map[] =
 };
 
 static reloc_howto_type *
-coff_sparc_reloc_type_lookup (abfd, code)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     bfd_reloc_code_real_type code;
+coff_sparc_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+			      bfd_reloc_code_real_type code)
 {
   unsigned int i;
   for (i = 0; i < sizeof (sparc_reloc_map) / sizeof (struct coff_reloc_map); i++)
@@ -178,9 +168,7 @@ coff_sparc_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
 #define coff_bfd_reloc_name_lookup coff_sparc_reloc_name_lookup
 
 static void
-rtype2howto (cache_ptr, dst)
-     arelent *cache_ptr;
-     struct internal_reloc *dst;
+rtype2howto (arelent *cache_ptr, struct internal_reloc *dst)
 {
   BFD_ASSERT (dst->r_type < (unsigned int) R_SPARC_max);
   cache_ptr->howto = &coff_sparc_howto_table[dst->r_type];
diff --git a/bfd/coff-stgo32.c b/bfd/coff-stgo32.c
index c10194e..882ddd2 100644
--- a/bfd/coff-stgo32.c
+++ b/bfd/coff-stgo32.c
@@ -1,6 +1,6 @@
 /* BFD back-end for Intel 386 COFF files (DJGPP variant with a stub).
    Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2005, 2006, 2007, 2009,
-   2011  Free Software Foundation, Inc.
+   2011, 2012  Free Software Foundation, Inc.
    Written by Robert Hoehne.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -54,34 +54,33 @@
 { COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi"), \
   COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }
 
+#include "sysdep.h"
 #include "bfd.h"
 
-/* At first the prototypes.  */
+/* All that ..._PRE and ...POST functions are called from the corresponding
+   coff_swap... functions. The ...PRE functions are called at the beginning
+   of the function and the ...POST functions at the end of the swap routines.  */
 
 static void
-adjust_filehdr_in_post PARAMS ((bfd *, PTR, PTR));
+adjust_filehdr_in_post  (bfd *, void *, void *);
 static void
-adjust_filehdr_out_pre PARAMS ((bfd *, PTR, PTR));
+adjust_filehdr_out_pre  (bfd *, void *, void *);
 static void
-adjust_filehdr_out_post PARAMS ((bfd *, PTR, PTR));
+adjust_filehdr_out_post  (bfd *, void *, void *);
 static void
-adjust_scnhdr_in_post PARAMS ((bfd *, PTR, PTR));
+adjust_scnhdr_in_post  (bfd *, void *, void *);
 static void
-adjust_scnhdr_out_pre PARAMS ((bfd *, PTR, PTR));
+adjust_scnhdr_out_pre  (bfd *, void *, void *);
 static void
-adjust_scnhdr_out_post PARAMS ((bfd *, PTR, PTR));
+adjust_scnhdr_out_post (bfd *, void *, void *);
 static void
-adjust_aux_in_post PARAMS ((bfd *, PTR, int, int, int, int, PTR));
+adjust_aux_in_post (bfd *, void *, int, int, int, int, void *);
 static void
-adjust_aux_out_pre PARAMS ((bfd *, PTR, int, int, int, int, PTR));
+adjust_aux_out_pre (bfd *, void *, int, int, int, int, void *);
 static void
-adjust_aux_out_post PARAMS ((bfd *, PTR, int, int, int, int, PTR));
+adjust_aux_out_post (bfd *, void *, int, int, int, int, void *);
 static void
-create_go32_stub PARAMS ((bfd *));
-
-/* All that ..._PRE and ...POST functions are called from the corresponding
-   coff_swap... functions. The ...PRE functions are called at the beginning
-   of the function and the ...POST functions at the end of the swap routines.  */
+create_go32_stub (bfd *);
 
 #define COFF_ADJUST_FILEHDR_IN_POST adjust_filehdr_in_post
 #define COFF_ADJUST_FILEHDR_OUT_PRE adjust_filehdr_out_pre
@@ -95,12 +94,12 @@ create_go32_stub PARAMS ((bfd *));
 #define COFF_ADJUST_AUX_OUT_PRE adjust_aux_out_pre
 #define COFF_ADJUST_AUX_OUT_POST adjust_aux_out_post
 
-static const bfd_target *go32_check_format (bfd *abfd);
+static const bfd_target *go32_check_format (bfd *);
 
 #define COFF_CHECK_FORMAT go32_check_format
 
 static bfd_boolean
-  go32_stubbed_coff_bfd_copy_private_bfd_data PARAMS ((bfd *, bfd *));
+  go32_stubbed_coff_bfd_copy_private_bfd_data (bfd *, bfd *);
 
 #define coff_bfd_copy_private_bfd_data go32_stubbed_coff_bfd_copy_private_bfd_data
 
@@ -132,10 +131,9 @@ static const unsigned char stub_bytes[GO32_STUBSIZE] =
   if (val != 0) val += diff
 
 static void
-adjust_filehdr_in_post  (abfd, src, dst)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     PTR src;
-     PTR dst;
+adjust_filehdr_in_post  (bfd *  abfd ATTRIBUTE_UNUSED,
+			 void * src,
+			 void * dst)
 {
   FILHDR *filehdr_src = (FILHDR *) src;
   struct internal_filehdr *filehdr_dst = (struct internal_filehdr *) dst;
@@ -150,10 +148,7 @@ adjust_filehdr_in_post  (abfd, src, dst)
 }
 
 static void
-adjust_filehdr_out_pre  (abfd, in, out)
-     bfd *abfd;
-     PTR in;
-     PTR out;
+adjust_filehdr_out_pre  (bfd * abfd, void * in, void * out)
 {
   struct internal_filehdr *filehdr_in = (struct internal_filehdr *) in;
   FILHDR *filehdr_out = (FILHDR *) out;
@@ -172,10 +167,9 @@ adjust_filehdr_out_pre  (abfd, in, out)
 }
 
 static void
-adjust_filehdr_out_post  (abfd, in, out)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     PTR in;
-     PTR out ATTRIBUTE_UNUSED;
+adjust_filehdr_out_post  (bfd *  abfd ATTRIBUTE_UNUSED,
+			  void * in,
+			  void * out ATTRIBUTE_UNUSED)
 {
   struct internal_filehdr *filehdr_in = (struct internal_filehdr *) in;
   /* Undo the above change.  */
@@ -183,10 +177,9 @@ adjust_filehdr_out_post  (abfd, in, out)
 }
 
 static void
-adjust_scnhdr_in_post  (abfd, ext, in)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     PTR ext ATTRIBUTE_UNUSED;
-     PTR in;
+adjust_scnhdr_in_post  (bfd *  abfd ATTRIBUTE_UNUSED,
+			void * ext ATTRIBUTE_UNUSED,
+			void * in)
 {
   struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
 
@@ -196,10 +189,9 @@ adjust_scnhdr_in_post  (abfd, ext, in)
 }
 
 static void
-adjust_scnhdr_out_pre  (abfd, in, out)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     PTR in;
-     PTR out ATTRIBUTE_UNUSED;
+adjust_scnhdr_out_pre  (bfd *  abfd ATTRIBUTE_UNUSED,
+			void * in,
+			void * out ATTRIBUTE_UNUSED)
 {
   struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
 
@@ -209,10 +201,9 @@ adjust_scnhdr_out_pre  (abfd, in, out)
 }
 
 static void
-adjust_scnhdr_out_post (abfd, in, out)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     PTR in;
-     PTR out ATTRIBUTE_UNUSED;
+adjust_scnhdr_out_post (bfd *  abfd ATTRIBUTE_UNUSED,
+			void * in,
+			void * out ATTRIBUTE_UNUSED)
 {
   struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
 
@@ -222,14 +213,13 @@ adjust_scnhdr_out_post (abfd, in, out)
 }
 
 static void
-adjust_aux_in_post  (abfd, ext1, type, in_class, indx, numaux, in1)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     PTR ext1 ATTRIBUTE_UNUSED;
-     int type;
-     int in_class;
-     int indx ATTRIBUTE_UNUSED;
-     int numaux ATTRIBUTE_UNUSED;
-     PTR in1;
+adjust_aux_in_post (bfd * abfd ATTRIBUTE_UNUSED,
+		    void * ext1 ATTRIBUTE_UNUSED,
+		    int type,
+		    int in_class,
+		    int indx ATTRIBUTE_UNUSED,
+		    int numaux ATTRIBUTE_UNUSED,
+		    void * in1)
 {
   union internal_auxent *in = (union internal_auxent *) in1;
 
@@ -241,14 +231,13 @@ adjust_aux_in_post  (abfd, ext1, type, in_class, indx, numaux, in1)
 }
 
 static void
-adjust_aux_out_pre  (abfd, inp, type, in_class, indx, numaux, extp)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     PTR inp;
-     int type;
-     int in_class;
-     int indx ATTRIBUTE_UNUSED;
-     int numaux ATTRIBUTE_UNUSED;
-     PTR extp ATTRIBUTE_UNUSED;
+adjust_aux_out_pre (bfd *abfd ATTRIBUTE_UNUSED,
+		    void * inp,
+		    int type,
+		    int in_class,
+		    int indx ATTRIBUTE_UNUSED,
+		    int numaux ATTRIBUTE_UNUSED,
+		    void * extp ATTRIBUTE_UNUSED)
 {
   union internal_auxent *in = (union internal_auxent *) inp;
 
@@ -260,14 +249,13 @@ adjust_aux_out_pre  (abfd, inp, type, in_class, indx, numaux, extp)
 }
 
 static void
-adjust_aux_out_post (abfd, inp, type, in_class, indx, numaux, extp)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     PTR inp;
-     int type;
-     int in_class;
-     int indx ATTRIBUTE_UNUSED;
-     int numaux ATTRIBUTE_UNUSED;
-     PTR extp ATTRIBUTE_UNUSED;
+adjust_aux_out_post (bfd *abfd ATTRIBUTE_UNUSED,
+		     void * inp,
+		     int type,
+		     int in_class,
+		     int indx ATTRIBUTE_UNUSED,
+		     int numaux ATTRIBUTE_UNUSED,
+		     void * extp ATTRIBUTE_UNUSED)
 {
   union internal_auxent *in = (union internal_auxent *) inp;
 
@@ -291,8 +279,7 @@ adjust_aux_out_post (abfd, inp, type, in_class, indx, numaux, extp)
    is taken.  */
 
 static void
-create_go32_stub (abfd)
-     bfd *abfd;
+create_go32_stub (bfd *abfd)
 {
   /* Do it only once.  */
   if (coff_data (abfd)->go32stub == NULL)
@@ -393,9 +380,7 @@ stub_end:
    to the new obfd.  */
 
 static bfd_boolean
-go32_stubbed_coff_bfd_copy_private_bfd_data  (ibfd, obfd)
-     bfd *ibfd;
-     bfd *obfd;
+go32_stubbed_coff_bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
 {
   /* Check if both are the same targets.  */
   if (ibfd->xvec != obfd->xvec)
diff --git a/bfd/coff-tic30.c b/bfd/coff-tic30.c
index 497d340..de09b30 100644
--- a/bfd/coff-tic30.c
+++ b/bfd/coff-tic30.c
@@ -1,5 +1,5 @@
 /* BFD back-end for TMS320C30 coff binaries.
-   Copyright 1998, 1999, 2000, 2001, 2002, 2005, 2007, 2008, 2011
+   Copyright 1998, 1999, 2000, 2001, 2002, 2005, 2007, 2008, 2011, 2012
    Free Software Foundation, Inc.
    Contributed by Steven Haworth (steve at pm.cse.rmit.edu.au)
 
@@ -28,12 +28,6 @@
 #include "coff/internal.h"
 #include "libcoff.h"
 
-static int  coff_tic30_select_reloc PARAMS ((reloc_howto_type *));
-static void rtype2howto PARAMS ((arelent *, struct internal_reloc *));
-static void reloc_processing PARAMS ((arelent *, struct internal_reloc *, asymbol **, bfd *, asection *));
-
-reloc_howto_type * tic30_coff_reloc_type_lookup PARAMS ((bfd *, bfd_reloc_code_real_type));
-
 #define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (1)
 
 reloc_howto_type tic30_coff_howto_table[] =
@@ -59,10 +53,9 @@ reloc_howto_type tic30_coff_howto_table[] =
    map to the howto table entries that match those in both the aout
    and coff implementations.  */
 
-reloc_howto_type *
-tic30_coff_reloc_type_lookup (abfd, code)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     bfd_reloc_code_real_type code;
+static reloc_howto_type *
+tic30_coff_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+			      bfd_reloc_code_real_type code)
 {
   switch (code)
     {
@@ -104,8 +97,7 @@ tic30_coff_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
 /* Turn a howto into a reloc number.  */
 
 static int
-coff_tic30_select_reloc (howto)
-     reloc_howto_type *howto;
+coff_tic30_select_reloc (reloc_howto_type *howto)
 {
   return howto->type;
 }
@@ -125,9 +117,7 @@ dst->r_stuff[1] = 'C';
 /* Code to turn a r_type into a howto ptr, uses the above howto table.  */
 
 static void
-rtype2howto (internal, dst)
-     arelent *internal;
-     struct internal_reloc *dst;
+rtype2howto (arelent *internal, struct internal_reloc *dst)
 {
   switch (dst->r_type)
     {
@@ -163,12 +153,11 @@ rtype2howto (internal, dst)
  reloc_processing(relent, reloc, symbols, abfd, section)
 
 static void
-reloc_processing (relent, reloc, symbols, abfd, section)
-     arelent *relent;
-     struct internal_reloc *reloc;
-     asymbol **symbols;
-     bfd *abfd;
-     asection *section;
+reloc_processing (arelent *relent,
+		  struct internal_reloc *reloc,
+		  asymbol **symbols,
+		  bfd *abfd,
+		  asection *section)
 {
   relent->address = reloc->r_vaddr;
   rtype2howto (relent, reloc);
diff --git a/bfd/coff-tic4x.c b/bfd/coff-tic4x.c
index 4259dd9..5814faf 100644
--- a/bfd/coff-tic4x.c
+++ b/bfd/coff-tic4x.c
@@ -1,6 +1,6 @@
 /* BFD back-end for TMS320C4X coff binaries.
    Copyright 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2005, 2007,
-   2008  Free Software Foundation, Inc.
+   2008, 2012  Free Software Foundation, Inc.
 
    Contributed by Michael Hayes (m.hayes at elec.canterbury.ac.nz)
 
@@ -32,26 +32,19 @@
 #undef  F_LSYMS
 #define	F_LSYMS		F_LSYMS_TICOFF
 
-static bfd_boolean ticoff_bfd_is_local_label_name
-    PARAMS ((bfd *, const char *));
-static bfd_reloc_status_type tic4x_relocation
-    PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char ** ));
-static reloc_howto_type *tic4x_coff_reloc_type_lookup
-    PARAMS ((bfd *, bfd_reloc_code_real_type ));
-static void tic4x_lookup_howto
-    PARAMS ((arelent *, struct internal_reloc * ));
-static reloc_howto_type *coff_tic4x_rtype_to_howto
-    PARAMS ((bfd *, asection *, struct internal_reloc *, struct coff_link_hash_entry *, struct internal_syment *, bfd_vma * ));
-static void tic4x_reloc_processing
-    PARAMS ((arelent *, struct internal_reloc *, asymbol **, bfd *, asection * ));
-
+static reloc_howto_type *
+coff_tic4x_rtype_to_howto (bfd *, asection *, struct internal_reloc *,
+			   struct coff_link_hash_entry *,
+			   struct internal_syment *,  bfd_vma *);
+static void
+tic4x_reloc_processing (arelent *, struct internal_reloc *,
+			asymbol **, bfd *, asection *);
 
 /* Replace the stock _bfd_coff_is_local_label_name to recognize TI COFF local
    labels.  */
 static bfd_boolean
-ticoff_bfd_is_local_label_name (abfd, name)
-  bfd *abfd ATTRIBUTE_UNUSED;
-  const char *name;
+ticoff_bfd_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
+				const char *name)
 {
   if (TICOFF_LOCAL_LABEL_P(name))
     return TRUE;
@@ -79,15 +72,13 @@ ticoff_bfd_is_local_label_name (abfd, name)
 #include "coffcode.h"
 
 static bfd_reloc_status_type
-tic4x_relocation (abfd, reloc_entry, symbol, data, input_section,
-		  output_bfd, error_message)
-  bfd *abfd ATTRIBUTE_UNUSED;
-  arelent *reloc_entry;
-  asymbol *symbol ATTRIBUTE_UNUSED;
-  PTR data ATTRIBUTE_UNUSED;
-  asection *input_section;
-  bfd *output_bfd;
-  char **error_message ATTRIBUTE_UNUSED;
+tic4x_relocation (bfd *abfd ATTRIBUTE_UNUSED,
+		  arelent *reloc_entry,
+		  asymbol *symbol ATTRIBUTE_UNUSED,
+		  void * data ATTRIBUTE_UNUSED,
+		  asection *input_section,
+		  bfd *output_bfd,
+		  char **error_message ATTRIBUTE_UNUSED)
 {
   if (output_bfd != (bfd *) NULL)
     {
@@ -128,9 +119,8 @@ reloc_howto_type tic4x_howto_table[] =
    bfd/reloc.c) to map to the howto table entries.  */
 
 static reloc_howto_type *
-tic4x_coff_reloc_type_lookup (abfd, code)
-    bfd *abfd ATTRIBUTE_UNUSED;
-    bfd_reloc_code_real_type code;
+tic4x_coff_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+			      bfd_reloc_code_real_type code)
 {
   unsigned int type;
   unsigned int i;
@@ -176,9 +166,8 @@ tic4x_coff_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
    Called after some initial checking by the tic4x_rtype_to_howto fn
    below.  */
 static void
-tic4x_lookup_howto (internal, dst)
-     arelent *internal;
-     struct internal_reloc *dst;
+tic4x_lookup_howto (arelent *internal,
+		    struct internal_reloc *dst)
 {
   unsigned int i;
   int bank = (dst->r_symndx == -1) ? HOWTO_BANK : 0;
@@ -198,13 +187,12 @@ tic4x_lookup_howto (internal, dst)
 }
 
 static reloc_howto_type *
-coff_tic4x_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     asection *sec;
-     struct internal_reloc *rel;
-     struct coff_link_hash_entry *h ATTRIBUTE_UNUSED;
-     struct internal_syment *sym ATTRIBUTE_UNUSED;
-     bfd_vma *addendp;
+coff_tic4x_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+			   asection *sec,
+			   struct internal_reloc *rel,
+			   struct coff_link_hash_entry *h ATTRIBUTE_UNUSED,
+			   struct internal_syment *sym ATTRIBUTE_UNUSED,
+			   bfd_vma *addendp)
 {
   arelent genrel;
 
@@ -221,12 +209,11 @@ coff_tic4x_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
 
 
 static void
-tic4x_reloc_processing (relent, reloc, symbols, abfd, section)
-     arelent *relent;
-     struct internal_reloc *reloc;
-     asymbol **symbols;
-     bfd *abfd;
-     asection *section;
+tic4x_reloc_processing (arelent *relent,
+			struct internal_reloc *reloc,
+			asymbol **symbols,
+			bfd *abfd,
+			asection *section)
 {
   asymbol *ptr;
 
@@ -274,16 +261,16 @@ tic4x_reloc_processing (relent, reloc, symbols, abfd, section)
 
 
 /* TI COFF v0, DOS tools (little-endian headers).  */
-CREATE_LITTLE_COFF_TARGET_VEC(tic4x_coff0_vec, "coff0-tic4x", HAS_LOAD_PAGE, 0, '_', NULL, (PTR)&ticoff0_swap_table);
+CREATE_LITTLE_COFF_TARGET_VEC(tic4x_coff0_vec, "coff0-tic4x", HAS_LOAD_PAGE, 0, '_', NULL, & ticoff0_swap_table);
 
 /* TI COFF v0, SPARC tools (big-endian headers).  */
-CREATE_BIGHDR_COFF_TARGET_VEC(tic4x_coff0_beh_vec, "coff0-beh-tic4x", HAS_LOAD_PAGE, 0, '_', &tic4x_coff0_vec, (PTR)&ticoff0_swap_table);
+CREATE_BIGHDR_COFF_TARGET_VEC(tic4x_coff0_beh_vec, "coff0-beh-tic4x", HAS_LOAD_PAGE, 0, '_', &tic4x_coff0_vec, & ticoff0_swap_table);
 
 /* TI COFF v1, DOS tools (little-endian headers).  */
-CREATE_LITTLE_COFF_TARGET_VEC(tic4x_coff1_vec, "coff1-tic4x", HAS_LOAD_PAGE, 0, '_', &tic4x_coff0_beh_vec, (PTR)&ticoff1_swap_table);
+CREATE_LITTLE_COFF_TARGET_VEC(tic4x_coff1_vec, "coff1-tic4x", HAS_LOAD_PAGE, 0, '_', &tic4x_coff0_beh_vec, & ticoff1_swap_table);
 
 /* TI COFF v1, SPARC tools (big-endian headers).  */
-CREATE_BIGHDR_COFF_TARGET_VEC(tic4x_coff1_beh_vec, "coff1-beh-tic4x", HAS_LOAD_PAGE, 0, '_', &tic4x_coff1_vec, (PTR)&ticoff1_swap_table);
+CREATE_BIGHDR_COFF_TARGET_VEC(tic4x_coff1_beh_vec, "coff1-beh-tic4x", HAS_LOAD_PAGE, 0, '_', &tic4x_coff1_vec, & ticoff1_swap_table);
 
 /* TI COFF v2, TI DOS tools output (little-endian headers).  */
 CREATE_LITTLE_COFF_TARGET_VEC(tic4x_coff2_vec, "coff2-tic4x", HAS_LOAD_PAGE, 0, '_', &tic4x_coff1_beh_vec, COFF_SWAP_TABLE);
diff --git a/bfd/coff-tic54x.c b/bfd/coff-tic54x.c
index 3c353da..9afba42 100644
--- a/bfd/coff-tic54x.c
+++ b/bfd/coff-tic54x.c
@@ -1,5 +1,5 @@
 /* BFD back-end for TMS320C54X coff binaries.
-   Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2011
+   Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2011, 2012
    Free Software Foundation, Inc.
    Contributed by Timothy Wall (twall at cygnus.com)
 
@@ -31,22 +31,9 @@
 #undef  F_LSYMS
 #define	F_LSYMS		F_LSYMS_TICOFF
 
-static void tic54x_reloc_processing
-  PARAMS ((arelent *, struct internal_reloc *, asymbol **, bfd *, asection *));
-static bfd_reloc_status_type tic54x_relocation
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
-static bfd_boolean tic54x_set_section_contents
-  PARAMS ((bfd *, sec_ptr, const PTR, file_ptr, bfd_size_type));
-static reloc_howto_type *coff_tic54x_rtype_to_howto
-  PARAMS ((bfd *, asection *, struct internal_reloc *, struct coff_link_hash_entry *, struct internal_syment *, bfd_vma *));
-static bfd_boolean tic54x_set_arch_mach
-  PARAMS ((bfd *, enum bfd_architecture, unsigned long));
-static reloc_howto_type * tic54x_coff_reloc_type_lookup
-  PARAMS ((bfd *, bfd_reloc_code_real_type));
-static void tic54x_lookup_howto
-  PARAMS ((arelent *, struct internal_reloc *));
-static bfd_boolean ticoff_bfd_is_local_label_name
-  PARAMS ((bfd *, const char *));
+static void
+tic54x_reloc_processing (arelent *, struct internal_reloc *,
+			 asymbol **, bfd *, asection *);
 
 /* 32-bit operations
    The octet order is screwy.  words are LSB first (LS octet, actually), but
@@ -97,26 +84,24 @@ tic54x_getl_signed_32 (const void *p)
 #define coff_set_section_load_page bfd_ticoff_set_section_load_page
 
 void
-bfd_ticoff_set_section_load_page (sect, page)
-  asection *sect;
-  int page;
+bfd_ticoff_set_section_load_page (asection *sect,
+				  int page)
 {
   sect->lma = (sect->lma & ADDR_MASK) | PG_TO_FLAG(page);
 }
 
 int
-bfd_ticoff_get_section_load_page (sect)
-  asection *sect;
+bfd_ticoff_get_section_load_page (asection *sect)
 {
   int page;
 
   /* Provide meaningful defaults for predefined sections.  */
-  if (sect == &bfd_com_section)
+  if (sect == bfd_com_section_ptr)
     page = PG_DATA;
 
-  else if (sect == &bfd_und_section
-      || sect == &bfd_abs_section
-      || sect == &bfd_ind_section)
+  else if (bfd_is_und_section (sect)
+	   || bfd_is_abs_section (sect)
+	   || bfd_is_ind_section (sect))
     page = PG_PROG;
 
   else
@@ -129,10 +114,9 @@ bfd_ticoff_get_section_load_page (sect)
    (e.g. binary).  */
 
 static bfd_boolean
-tic54x_set_arch_mach (abfd, arch, machine)
-     bfd *abfd;
-     enum bfd_architecture arch;
-     unsigned long machine;
+tic54x_set_arch_mach (bfd *abfd,
+		      enum bfd_architecture arch,
+		      unsigned long machine)
 {
   if (arch == bfd_arch_unknown)
     arch = bfd_arch_tic54x;
@@ -144,15 +128,13 @@ tic54x_set_arch_mach (abfd, arch, machine)
 }
 
 static bfd_reloc_status_type
-tic54x_relocation (abfd, reloc_entry, symbol, data, input_section,
-                   output_bfd, error_message)
-  bfd *abfd ATTRIBUTE_UNUSED;
-  arelent *reloc_entry;
-  asymbol *symbol ATTRIBUTE_UNUSED;
-  PTR data ATTRIBUTE_UNUSED;
-  asection *input_section;
-  bfd *output_bfd;
-  char **error_message ATTRIBUTE_UNUSED;
+tic54x_relocation (bfd *abfd ATTRIBUTE_UNUSED,
+		   arelent *reloc_entry,
+		   asymbol *symbol ATTRIBUTE_UNUSED,
+		   void * data ATTRIBUTE_UNUSED,
+		   asection *input_section,
+		   bfd *output_bfd,
+		   char **error_message ATTRIBUTE_UNUSED)
 {
   if (output_bfd != (bfd *) NULL)
     {
@@ -234,10 +216,9 @@ reloc_howto_type tic54x_howto_table[] =
 /* For the case statement use the code values used tc_gen_reloc (defined in
    bfd/reloc.c) to map to the howto table entries.  */
 
-reloc_howto_type *
-tic54x_coff_reloc_type_lookup (abfd, code)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     bfd_reloc_code_real_type code;
+static reloc_howto_type *
+tic54x_coff_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+			       bfd_reloc_code_real_type code)
 {
   switch (code)
     {
@@ -280,9 +261,8 @@ tic54x_coff_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
    Called after some initial checking by the tic54x_rtype_to_howto fn below.  */
 
 static void
-tic54x_lookup_howto (internal, dst)
-     arelent *internal;
-     struct internal_reloc *dst;
+tic54x_lookup_howto (arelent *internal,
+		     struct internal_reloc *dst)
 {
   unsigned i;
   int bank = (dst->r_symndx == -1) ? HOWTO_BANK : 0;
@@ -307,13 +287,12 @@ tic54x_lookup_howto (internal, dst)
 #define coff_rtype_to_howto coff_tic54x_rtype_to_howto
 
 static reloc_howto_type *
-coff_tic54x_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     asection *sec;
-     struct internal_reloc *rel;
-     struct coff_link_hash_entry *h ATTRIBUTE_UNUSED;
-     struct internal_syment *sym ATTRIBUTE_UNUSED;
-     bfd_vma *addendp;
+coff_tic54x_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+			    asection *sec,
+			    struct internal_reloc *rel,
+			    struct coff_link_hash_entry *h ATTRIBUTE_UNUSED,
+			    struct internal_syment *sym ATTRIBUTE_UNUSED,
+			    bfd_vma *addendp)
 {
   arelent genrel;
 
@@ -334,9 +313,8 @@ coff_tic54x_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
    labels.  */
 
 static bfd_boolean
-ticoff_bfd_is_local_label_name (abfd, name)
-  bfd *abfd ATTRIBUTE_UNUSED;
-  const char *name;
+ticoff_bfd_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
+				const char *name)
 {
   if (TICOFF_LOCAL_LABEL_P(name))
     return TRUE;
@@ -367,24 +345,22 @@ ticoff_bfd_is_local_label_name (abfd, name)
 #include "coffcode.h"
 
 static bfd_boolean
-tic54x_set_section_contents (abfd, section, location, offset, bytes_to_do)
-     bfd *abfd;
-     sec_ptr section;
-     const PTR location;
-     file_ptr offset;
-     bfd_size_type bytes_to_do;
+tic54x_set_section_contents (bfd *abfd,
+			     sec_ptr section,
+			     const void * location,
+			     file_ptr offset,
+			     bfd_size_type bytes_to_do)
 {
   return coff_set_section_contents (abfd, section, location,
                                     offset, bytes_to_do);
 }
 
 static void
-tic54x_reloc_processing (relent, reloc, symbols, abfd, section)
-     arelent *relent;
-     struct internal_reloc *reloc;
-     asymbol **symbols;
-     bfd *abfd;
-     asection *section;
+tic54x_reloc_processing (arelent *relent,
+			 struct internal_reloc *reloc,
+			 asymbol **symbols,
+			 bfd *abfd,
+			 asection *section)
 {
   asymbol *ptr;
 
@@ -472,7 +448,7 @@ const bfd_target tic54x_coff0_vec =
     BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
     NULL,
 
-    (PTR) & ticoff0_swap_table
+    & ticoff0_swap_table
   };
 
 /* TI COFF v0, SPARC tools (big-endian headers).  */
@@ -518,7 +494,7 @@ const bfd_target tic54x_coff0_beh_vec =
 
     & tic54x_coff0_vec,
 
-    (PTR) & ticoff0_swap_table
+    & ticoff0_swap_table
   };
 
 /* TI COFF v1, DOS tools (little-endian headers).  */
@@ -564,7 +540,7 @@ const bfd_target tic54x_coff1_vec =
 
     & tic54x_coff0_beh_vec,
 
-    (PTR) & ticoff1_swap_table
+    & ticoff1_swap_table
 };
 
 /* TI COFF v1, SPARC tools (big-endian headers).  */
@@ -610,7 +586,7 @@ const bfd_target tic54x_coff1_beh_vec =
 
     & tic54x_coff1_vec,
 
-    (PTR) & ticoff1_swap_table
+    & ticoff1_swap_table
   };
 
 /* TI COFF v2, TI DOS tools output (little-endian headers).  */
diff --git a/bfd/coff-tic80.c b/bfd/coff-tic80.c
index 6455e49..4bd96fc 100644
--- a/bfd/coff-tic80.c
+++ b/bfd/coff-tic80.c
@@ -1,6 +1,6 @@
 /* BFD back-end for Texas Instruments TMS320C80 Multimedia Video Processor (MVP).
-   Copyright 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008
-   Free Software Foundation, Inc.
+   Copyright 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008,
+   2012  Free Software Foundation, Inc.
 
    Written by Fred Fish (fnf at cygnus.com)
 
@@ -47,23 +47,15 @@
 #define GET_SCNHDR_FLAGS H_GET_16
 #define PUT_SCNHDR_FLAGS H_PUT_16
 
-static void rtype2howto
-  PARAMS ((arelent *cache_ptr, struct internal_reloc *dst));
 static bfd_reloc_status_type ppbase_reloc
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 static bfd_reloc_status_type glob15_reloc
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 static bfd_reloc_status_type glob16_reloc
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 static bfd_reloc_status_type local16_reloc
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
-static bfd_boolean coff_tic80_relocate_section
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
-	   struct internal_reloc *, struct internal_syment *, asection **));
-static reloc_howto_type * coff_tic80_rtype_to_howto
-  PARAMS ((bfd *, asection *, struct internal_reloc *,
-	   struct coff_link_hash_entry *, struct internal_syment *,
-	   bfd_vma *));
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+
 
 static reloc_howto_type tic80_howto_table[] =
 {
@@ -370,15 +362,13 @@ static reloc_howto_type tic80_howto_table[] =
    relocations.  */
 
 static bfd_reloc_status_type
-ppbase_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
-	      error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry ATTRIBUTE_UNUSED;
-     asymbol *symbol_in ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd ATTRIBUTE_UNUSED;
-     char **error_message ATTRIBUTE_UNUSED;
+ppbase_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+	      arelent *reloc_entry ATTRIBUTE_UNUSED,
+	      asymbol *symbol_in ATTRIBUTE_UNUSED,
+	      void * data ATTRIBUTE_UNUSED,
+	      asection *input_section ATTRIBUTE_UNUSED,
+	      bfd *output_bfd ATTRIBUTE_UNUSED,
+	      char **error_message ATTRIBUTE_UNUSED)
 {
   /* FIXME.  */
   abort ();
@@ -387,15 +377,13 @@ ppbase_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
 /* This special function is used for the global 15 bit relocations.  */
 
 static bfd_reloc_status_type
-glob15_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
-	      error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry ATTRIBUTE_UNUSED;
-     asymbol *symbol_in ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd ATTRIBUTE_UNUSED;
-     char **error_message ATTRIBUTE_UNUSED;
+glob15_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+	      arelent *reloc_entry ATTRIBUTE_UNUSED,
+	      asymbol *symbol_in ATTRIBUTE_UNUSED,
+	      void * data ATTRIBUTE_UNUSED,
+	      asection *input_section ATTRIBUTE_UNUSED,
+	      bfd *output_bfd ATTRIBUTE_UNUSED,
+	      char **error_message ATTRIBUTE_UNUSED)
 {
   /* FIXME.  */
   abort ();
@@ -404,15 +392,13 @@ glob15_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
 /* This special function is used for the global 16 bit relocations.  */
 
 static bfd_reloc_status_type
-glob16_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
-	      error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry ATTRIBUTE_UNUSED;
-     asymbol *symbol_in ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd ATTRIBUTE_UNUSED;
-     char **error_message ATTRIBUTE_UNUSED;
+glob16_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+	      arelent *reloc_entry ATTRIBUTE_UNUSED,
+	      asymbol *symbol_in ATTRIBUTE_UNUSED,
+	      void * data ATTRIBUTE_UNUSED,
+	      asection *input_section ATTRIBUTE_UNUSED,
+	      bfd *output_bfd ATTRIBUTE_UNUSED,
+	      char **error_message ATTRIBUTE_UNUSED)
 {
   /* FIXME.  */
   abort ();
@@ -421,15 +407,13 @@ glob16_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
 /* This special function is used for the local 16 bit relocations.  */
 
 static bfd_reloc_status_type
-local16_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
-	      error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry ATTRIBUTE_UNUSED;
-     asymbol *symbol_in ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd ATTRIBUTE_UNUSED;
-     char **error_message ATTRIBUTE_UNUSED;
+local16_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+	       arelent *reloc_entry ATTRIBUTE_UNUSED,
+	       asymbol *symbol_in ATTRIBUTE_UNUSED,
+	       void * data ATTRIBUTE_UNUSED,
+	       asection *input_section ATTRIBUTE_UNUSED,
+	       bfd *output_bfd ATTRIBUTE_UNUSED,
+	       char **error_message ATTRIBUTE_UNUSED)
 {
   /* FIXME.  */
   abort ();
@@ -440,9 +424,7 @@ local16_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
    to generate an output file.  */
 
 static void
-rtype2howto (cache_ptr, dst)
-     arelent *cache_ptr;
-     struct internal_reloc *dst;
+rtype2howto (arelent *cache_ptr, struct internal_reloc *dst)
 {
   unsigned int i;
 
@@ -464,13 +446,12 @@ rtype2howto (cache_ptr, dst)
 #define coff_rtype_to_howto coff_tic80_rtype_to_howto
 
 static reloc_howto_type *
-coff_tic80_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     asection *sec;
-     struct internal_reloc *rel;
-     struct coff_link_hash_entry *h ATTRIBUTE_UNUSED;
-     struct internal_syment *sym ATTRIBUTE_UNUSED;
-     bfd_vma *addendp;
+coff_tic80_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+			   asection *sec,
+			   struct internal_reloc *rel,
+			   struct coff_link_hash_entry *h ATTRIBUTE_UNUSED,
+			   struct internal_syment *sym ATTRIBUTE_UNUSED,
+			   bfd_vma *addendp)
 {
   arelent genrel;
 
@@ -495,17 +476,14 @@ coff_tic80_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
    of this is a copy of _bfd_coff_generic_relocate_section.  */
 
 static bfd_boolean
-coff_tic80_relocate_section (output_bfd, info, input_bfd,
-			     input_section, contents, relocs, syms,
-			     sections)
-     bfd *output_bfd;
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     asection *input_section;
-     bfd_byte *contents;
-     struct internal_reloc *relocs;
-     struct internal_syment *syms;
-     asection **sections;
+coff_tic80_relocate_section (bfd *output_bfd,
+			     struct bfd_link_info *info,
+			     bfd *input_bfd,
+			     asection *input_section,
+			     bfd_byte *contents,
+			     struct internal_reloc *relocs,
+			     struct internal_syment *syms,
+			     asection **sections)
 {
   struct internal_reloc *rel;
   struct internal_reloc *relend;
diff --git a/bfd/coff-w65.c b/bfd/coff-w65.c
index 308d448..71d946c 100644
--- a/bfd/coff-w65.c
+++ b/bfd/coff-w65.c
@@ -1,6 +1,6 @@
 /* BFD back-end for WDC 65816 COFF binaries.
    Copyright 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-   2006, 2007, 2008  Free Software Foundation, Inc.
+   2006, 2007, 2008, 2012  Free Software Foundation, Inc.
    Written by Steve Chamberlain, <sac at cygnus.com>.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -28,16 +28,10 @@
 #include "coff/internal.h"
 #include "libcoff.h"
 
-static int  select_reloc              PARAMS ((reloc_howto_type *));
-static void rtype2howto               PARAMS ((arelent *, struct internal_reloc *));
-static void reloc_processing          PARAMS ((arelent *, struct internal_reloc *, asymbol **, bfd *, asection *));
-static int  w65_reloc16_estimate    PARAMS ((bfd *, asection *, arelent *, unsigned int, struct bfd_link_info *));
-static void w65_reloc16_extra_cases PARAMS ((bfd *,struct bfd_link_info *, struct bfd_link_order *, arelent *, bfd_byte *, unsigned int *, unsigned int *));
-
 #define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (1)
 static reloc_howto_type howto_table[] =
-  {
-    HOWTO (R_W65_ABS8,    0,  0, 8,  FALSE, 0, complain_overflow_bitfield, 0, "abs8", TRUE, 0x000000ff, 0x000000ff, FALSE),
+{
+  HOWTO (R_W65_ABS8,    0,  0, 8,  FALSE, 0, complain_overflow_bitfield, 0, "abs8", TRUE, 0x000000ff, 0x000000ff, FALSE),
     HOWTO (R_W65_ABS16,   1,  0, 16, FALSE, 0, complain_overflow_bitfield, 0, "abs16", TRUE, 0x0000ffff, 0x0000ffff, FALSE),
     HOWTO (R_W65_ABS24,   0,  2, 32, FALSE, 0, complain_overflow_bitfield, 0, "abs24", TRUE, 0x00ffffff, 0x00ffffff, FALSE),
     HOWTO (R_W65_ABS8S8,  0,  0, 8,  FALSE, 0, complain_overflow_bitfield, 0, ">abs8", TRUE, 0x000000ff, 0x000000ff, FALSE),
@@ -66,8 +60,7 @@ static reloc_howto_type howto_table[] =
   dst->r_stuff[1] = 'C';
 
 static int
-select_reloc (howto)
-     reloc_howto_type *howto;
+select_reloc (reloc_howto_type *howto)
 {
   return howto->type ;
 }
@@ -75,9 +68,8 @@ select_reloc (howto)
 /* Code to turn a r_type into a howto ptr, uses the above howto table.  */
 
 static void
-rtype2howto (internal, dst)
-     arelent *internal;
-     struct internal_reloc *dst;
+rtype2howto (arelent *internal,
+	     struct internal_reloc *dst)
 {
   internal->howto = howto_table + dst->r_type - 1;
 }
@@ -93,12 +85,11 @@ rtype2howto (internal, dst)
  reloc_processing(relent, reloc, symbols, abfd, section)
 
 static void
-reloc_processing (relent, reloc, symbols, abfd, section)
-     arelent * relent;
-     struct internal_reloc *reloc;
-     asymbol ** symbols;
-     bfd * abfd;
-     asection * section;
+reloc_processing (arelent * relent,
+		  struct internal_reloc *reloc,
+		  asymbol ** symbols,
+		  bfd * abfd,
+		  asection * section)
 {
   relent->address = reloc->r_vaddr;
   rtype2howto (relent, reloc);
@@ -115,21 +106,20 @@ reloc_processing (relent, reloc, symbols, abfd, section)
 }
 
 static int
-w65_reloc16_estimate (abfd, input_section, reloc, shrink, link_info)
-     bfd *abfd;
-     asection *input_section;
-     arelent *reloc;
-     unsigned int shrink;
-     struct bfd_link_info *link_info;
+w65_reloc16_estimate (bfd *abfd,
+		      asection *input_section,
+		      arelent *reloc,
+		      unsigned int shrink,
+		      struct bfd_link_info *link_info)
 {
   bfd_vma value;
   bfd_vma dot;
   bfd_vma gap;
 
   /* The address of the thing to be relocated will have moved back by
-   the size of the shrink  - but we don't change reloc->address here,
-   since we need it to know where the relocation lives in the source
-   uncooked section.  */
+     the size of the shrink  - but we don't change reloc->address here,
+     since we need it to know where the relocation lives in the source
+     uncooked section.  */
 
   /*  reloc->address -= shrink;   conceptual */
 
@@ -222,15 +212,13 @@ w65_reloc16_estimate (abfd, input_section, reloc, shrink, link_info)
    R_MOV24B1		R_MOV24B2	24 or 8 bit reloc for mov.b  */
 
 static void
-w65_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
-			   dst_ptr)
-     bfd *abfd;
-     struct bfd_link_info *link_info;
-     struct bfd_link_order *link_order;
-     arelent *reloc;
-     bfd_byte *data;
-     unsigned int *src_ptr;
-     unsigned int *dst_ptr;
+w65_reloc16_extra_cases (bfd *abfd,
+			 struct bfd_link_info *link_info,
+			 struct bfd_link_order *link_order,
+			 arelent *reloc,
+			 bfd_byte *data,
+			 unsigned int *src_ptr,
+			 unsigned int *dst_ptr)
 {
   unsigned int src_address = *src_ptr;
   unsigned int dst_address = *dst_ptr;
diff --git a/bfd/coff-x86_64.c b/bfd/coff-x86_64.c
index d8a8a2e..4f00b78 100644
--- a/bfd/coff-x86_64.c
+++ b/bfd/coff-x86_64.c
@@ -619,7 +619,8 @@ coff_amd64_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
     {
       bfd_vma osect_vma;
 
-      if (h && (h->type == bfd_link_hash_defined || h->type == bfd_link_hash_defweak))
+      if (h && (h->root.type == bfd_link_hash_defined
+		|| h->root.type == bfd_link_hash_defweak))
 	osect_vma = h->root.u.def.section->output_section->vma;
       else
 	{
diff --git a/bfd/cofflink.c b/bfd/cofflink.c
index 1ebdfdd..dd3e4b1 100644
--- a/bfd/cofflink.c
+++ b/bfd/cofflink.c
@@ -651,7 +651,7 @@ _bfd_coff_final_link (bfd *abfd,
 		      struct bfd_link_info *info)
 {
   bfd_size_type symesz;
-  struct coff_final_link_info finfo;
+  struct coff_final_link_info flaginfo;
   bfd_boolean debug_merge_allocated;
   bfd_boolean long_section_names;
   asection *o;
@@ -672,30 +672,30 @@ _bfd_coff_final_link (bfd *abfd,
 
   symesz = bfd_coff_symesz (abfd);
 
-  finfo.info = info;
-  finfo.output_bfd = abfd;
-  finfo.strtab = NULL;
-  finfo.section_info = NULL;
-  finfo.last_file_index = -1;
-  finfo.last_bf_index = -1;
-  finfo.internal_syms = NULL;
-  finfo.sec_ptrs = NULL;
-  finfo.sym_indices = NULL;
-  finfo.outsyms = NULL;
-  finfo.linenos = NULL;
-  finfo.contents = NULL;
-  finfo.external_relocs = NULL;
-  finfo.internal_relocs = NULL;
-  finfo.global_to_static = FALSE;
+  flaginfo.info = info;
+  flaginfo.output_bfd = abfd;
+  flaginfo.strtab = NULL;
+  flaginfo.section_info = NULL;
+  flaginfo.last_file_index = -1;
+  flaginfo.last_bf_index = -1;
+  flaginfo.internal_syms = NULL;
+  flaginfo.sec_ptrs = NULL;
+  flaginfo.sym_indices = NULL;
+  flaginfo.outsyms = NULL;
+  flaginfo.linenos = NULL;
+  flaginfo.contents = NULL;
+  flaginfo.external_relocs = NULL;
+  flaginfo.internal_relocs = NULL;
+  flaginfo.global_to_static = FALSE;
   debug_merge_allocated = FALSE;
 
   coff_data (abfd)->link_info = info;
 
-  finfo.strtab = _bfd_stringtab_init ();
-  if (finfo.strtab == NULL)
+  flaginfo.strtab = _bfd_stringtab_init ();
+  if (flaginfo.strtab == NULL)
     goto error_return;
 
-  if (! coff_debug_merge_hash_table_init (&finfo.debug_merge))
+  if (! coff_debug_merge_hash_table_init (&flaginfo.debug_merge))
     goto error_return;
   debug_merge_allocated = TRUE;
 
@@ -775,7 +775,7 @@ _bfd_coff_final_link (bfd *abfd,
              coff_write_object_contents which puts the string index
              into the s_name field of the section header.  That is why
              we pass hash as FALSE.  */
-	  if (_bfd_stringtab_add (finfo.strtab, o->name, FALSE, FALSE)
+	  if (_bfd_stringtab_add (flaginfo.strtab, o->name, FALSE, FALSE)
 	      == (bfd_size_type) -1)
 	    goto error_return;
 	  long_section_names = TRUE;
@@ -792,13 +792,13 @@ _bfd_coff_final_link (bfd *abfd,
          the target_index fields are 1 based.  */
       amt = abfd->section_count + 1;
       amt *= sizeof (struct coff_link_section_info);
-      finfo.section_info = (struct coff_link_section_info *) bfd_malloc (amt);
-      if (finfo.section_info == NULL)
+      flaginfo.section_info = (struct coff_link_section_info *) bfd_malloc (amt);
+      if (flaginfo.section_info == NULL)
 	goto error_return;
       for (i = 0; i <= abfd->section_count; i++)
 	{
-	  finfo.section_info[i].relocs = NULL;
-	  finfo.section_info[i].rel_hashes = NULL;
+	  flaginfo.section_info[i].relocs = NULL;
+	  flaginfo.section_info[i].rel_hashes = NULL;
 	}
     }
 
@@ -835,14 +835,14 @@ _bfd_coff_final_link (bfd *abfd,
 	  BFD_ASSERT (info->relocatable);
 	  amt = o->reloc_count;
 	  amt *= sizeof (struct internal_reloc);
-	  finfo.section_info[o->target_index].relocs =
+	  flaginfo.section_info[o->target_index].relocs =
               (struct internal_reloc *) bfd_malloc (amt);
 	  amt = o->reloc_count;
 	  amt *= sizeof (struct coff_link_hash_entry *);
-	  finfo.section_info[o->target_index].rel_hashes =
+	  flaginfo.section_info[o->target_index].rel_hashes =
               (struct coff_link_hash_entry **) bfd_malloc (amt);
-	  if (finfo.section_info[o->target_index].relocs == NULL
-	      || finfo.section_info[o->target_index].rel_hashes == NULL)
+	  if (flaginfo.section_info[o->target_index].relocs == NULL
+	      || flaginfo.section_info[o->target_index].rel_hashes == NULL)
 	    goto error_return;
 
 	  if (o->reloc_count > max_output_reloc_count)
@@ -873,31 +873,31 @@ _bfd_coff_final_link (bfd *abfd,
 
   /* Allocate some buffers used while linking.  */
   amt = max_sym_count * sizeof (struct internal_syment);
-  finfo.internal_syms = (struct internal_syment *) bfd_malloc (amt);
+  flaginfo.internal_syms = (struct internal_syment *) bfd_malloc (amt);
   amt = max_sym_count * sizeof (asection *);
-  finfo.sec_ptrs = (asection **) bfd_malloc (amt);
+  flaginfo.sec_ptrs = (asection **) bfd_malloc (amt);
   amt = max_sym_count * sizeof (long);
-  finfo.sym_indices = (long int *) bfd_malloc (amt);
-  finfo.outsyms = (bfd_byte *) bfd_malloc ((max_sym_count + 1) * symesz);
+  flaginfo.sym_indices = (long int *) bfd_malloc (amt);
+  flaginfo.outsyms = (bfd_byte *) bfd_malloc ((max_sym_count + 1) * symesz);
   amt = max_lineno_count * bfd_coff_linesz (abfd);
-  finfo.linenos = (bfd_byte *) bfd_malloc (amt);
-  finfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
+  flaginfo.linenos = (bfd_byte *) bfd_malloc (amt);
+  flaginfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
   amt = max_reloc_count * relsz;
-  finfo.external_relocs = (bfd_byte *) bfd_malloc (amt);
+  flaginfo.external_relocs = (bfd_byte *) bfd_malloc (amt);
   if (! info->relocatable)
     {
       amt = max_reloc_count * sizeof (struct internal_reloc);
-      finfo.internal_relocs = (struct internal_reloc *) bfd_malloc (amt);
+      flaginfo.internal_relocs = (struct internal_reloc *) bfd_malloc (amt);
     }
-  if ((finfo.internal_syms == NULL && max_sym_count > 0)
-      || (finfo.sec_ptrs == NULL && max_sym_count > 0)
-      || (finfo.sym_indices == NULL && max_sym_count > 0)
-      || finfo.outsyms == NULL
-      || (finfo.linenos == NULL && max_lineno_count > 0)
-      || (finfo.contents == NULL && max_contents_size > 0)
-      || (finfo.external_relocs == NULL && max_reloc_count > 0)
+  if ((flaginfo.internal_syms == NULL && max_sym_count > 0)
+      || (flaginfo.sec_ptrs == NULL && max_sym_count > 0)
+      || (flaginfo.sym_indices == NULL && max_sym_count > 0)
+      || flaginfo.outsyms == NULL
+      || (flaginfo.linenos == NULL && max_lineno_count > 0)
+      || (flaginfo.contents == NULL && max_contents_size > 0)
+      || (flaginfo.external_relocs == NULL && max_reloc_count > 0)
       || (! info->relocatable
-	  && finfo.internal_relocs == NULL
+	  && flaginfo.internal_relocs == NULL
 	  && max_reloc_count > 0))
     goto error_return;
 
@@ -922,9 +922,9 @@ _bfd_coff_final_link (bfd *abfd,
 	      && bfd_family_coff (p->u.indirect.section->owner))
 	    {
 	      sub = p->u.indirect.section->owner;
-	      if (! bfd_coff_link_output_has_begun (sub, & finfo))
+	      if (! bfd_coff_link_output_has_begun (sub, & flaginfo))
 		{
-		  if (! _bfd_coff_link_input_bfd (&finfo, sub))
+		  if (! _bfd_coff_link_input_bfd (&flaginfo, sub))
 		    goto error_return;
 		  sub->output_has_begun = TRUE;
 		}
@@ -932,7 +932,7 @@ _bfd_coff_final_link (bfd *abfd,
 	  else if (p->type == bfd_section_reloc_link_order
 		   || p->type == bfd_symbol_reloc_link_order)
 	    {
-	      if (! _bfd_coff_reloc_link_order (abfd, &finfo, o, p))
+	      if (! _bfd_coff_reloc_link_order (abfd, &flaginfo, o, p))
 		goto error_return;
 	    }
 	  else
@@ -943,7 +943,7 @@ _bfd_coff_final_link (bfd *abfd,
 	}
     }
 
-  if (finfo.info->strip != strip_all && finfo.info->discard != discard_all)
+  if (flaginfo.info->strip != strip_all && flaginfo.info->discard != discard_all)
     {
       /* Add local symbols from foreign inputs.  */
       for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
@@ -970,14 +970,14 @@ _bfd_coff_final_link (bfd *abfd,
 		continue;
 
 	      /* See if we are discarding symbols with this name.  */
-	      if ((finfo.info->strip == strip_some
-		   && (bfd_hash_lookup (finfo.info->keep_hash,
+	      if ((flaginfo.info->strip == strip_some
+		   && (bfd_hash_lookup (flaginfo.info->keep_hash,
 					bfd_asymbol_name(sym), FALSE, FALSE)
 		       == NULL))
-		  || (((finfo.info->discard == discard_sec_merge
+		  || (((flaginfo.info->discard == discard_sec_merge
 			&& (bfd_get_section (sym)->flags & SEC_MERGE)
-			&& ! finfo.info->relocatable)
-		       || finfo.info->discard == discard_l)
+			&& ! flaginfo.info->relocatable)
+		       || flaginfo.info->discard == discard_l)
 		      && bfd_is_local_label_name (sub, bfd_asymbol_name(sym))))
 		continue;
 
@@ -994,34 +994,34 @@ _bfd_coff_final_link (bfd *abfd,
 		  bfd_boolean hash = ! (abfd->flags & BFD_TRADITIONAL_FORMAT);
 		  bfd_size_type indx;
 
-		  indx = _bfd_stringtab_add (finfo.strtab,
+		  indx = _bfd_stringtab_add (flaginfo.strtab,
 					     bfd_asymbol_name (sym), hash,
 					     FALSE);
 		  if (indx == (bfd_size_type) -1)
 		    goto error_return;
 		  isym._n._n_n._n_offset = STRING_SIZE_SIZE + indx;
-		  bfd_coff_swap_sym_out (abfd, &isym, finfo.outsyms);
+		  bfd_coff_swap_sym_out (abfd, &isym, flaginfo.outsyms);
 		  rewrite = TRUE;
 		}
 
 	      if (isym.n_sclass == C_FILE)
 		{
-		  if (finfo.last_file_index != -1)
+		  if (flaginfo.last_file_index != -1)
 		    {
-		      finfo.last_file.n_value = obj_raw_syment_count (abfd);
-		      bfd_coff_swap_sym_out (abfd, &finfo.last_file,
-					     finfo.outsyms);
-		      pos = obj_sym_filepos (abfd) + finfo.last_file_index
+		      flaginfo.last_file.n_value = obj_raw_syment_count (abfd);
+		      bfd_coff_swap_sym_out (abfd, &flaginfo.last_file,
+					     flaginfo.outsyms);
+		      pos = obj_sym_filepos (abfd) + flaginfo.last_file_index
 						     * symesz;
 		      rewrite = TRUE;
 		    }
-		  finfo.last_file_index = obj_raw_syment_count (abfd);
-		  finfo.last_file = isym;
+		  flaginfo.last_file_index = obj_raw_syment_count (abfd);
+		  flaginfo.last_file = isym;
 		}
 
 	      if (rewrite
 		  && (bfd_seek (abfd, pos, SEEK_SET) != 0
-		      || bfd_bwrite (finfo.outsyms, symesz, abfd) != symesz))
+		      || bfd_bwrite (flaginfo.outsyms, symesz, abfd) != symesz))
 		goto error_return;
 
 	      obj_raw_syment_count (abfd) += written;
@@ -1029,65 +1029,65 @@ _bfd_coff_final_link (bfd *abfd,
 	}
     }
 
-  if (! bfd_coff_final_link_postscript (abfd, & finfo))
+  if (! bfd_coff_final_link_postscript (abfd, & flaginfo))
     goto error_return;
 
   /* Free up the buffers used by _bfd_coff_link_input_bfd.  */
 
-  coff_debug_merge_hash_table_free (&finfo.debug_merge);
+  coff_debug_merge_hash_table_free (&flaginfo.debug_merge);
   debug_merge_allocated = FALSE;
 
-  if (finfo.internal_syms != NULL)
+  if (flaginfo.internal_syms != NULL)
     {
-      free (finfo.internal_syms);
-      finfo.internal_syms = NULL;
+      free (flaginfo.internal_syms);
+      flaginfo.internal_syms = NULL;
     }
-  if (finfo.sec_ptrs != NULL)
+  if (flaginfo.sec_ptrs != NULL)
     {
-      free (finfo.sec_ptrs);
-      finfo.sec_ptrs = NULL;
+      free (flaginfo.sec_ptrs);
+      flaginfo.sec_ptrs = NULL;
     }
-  if (finfo.sym_indices != NULL)
+  if (flaginfo.sym_indices != NULL)
     {
-      free (finfo.sym_indices);
-      finfo.sym_indices = NULL;
+      free (flaginfo.sym_indices);
+      flaginfo.sym_indices = NULL;
     }
-  if (finfo.linenos != NULL)
+  if (flaginfo.linenos != NULL)
     {
-      free (finfo.linenos);
-      finfo.linenos = NULL;
+      free (flaginfo.linenos);
+      flaginfo.linenos = NULL;
     }
-  if (finfo.contents != NULL)
+  if (flaginfo.contents != NULL)
     {
-      free (finfo.contents);
-      finfo.contents = NULL;
+      free (flaginfo.contents);
+      flaginfo.contents = NULL;
     }
-  if (finfo.external_relocs != NULL)
+  if (flaginfo.external_relocs != NULL)
     {
-      free (finfo.external_relocs);
-      finfo.external_relocs = NULL;
+      free (flaginfo.external_relocs);
+      flaginfo.external_relocs = NULL;
     }
-  if (finfo.internal_relocs != NULL)
+  if (flaginfo.internal_relocs != NULL)
     {
-      free (finfo.internal_relocs);
-      finfo.internal_relocs = NULL;
+      free (flaginfo.internal_relocs);
+      flaginfo.internal_relocs = NULL;
     }
 
   /* The value of the last C_FILE symbol is supposed to be the symbol
      index of the first external symbol.  Write it out again if
      necessary.  */
-  if (finfo.last_file_index != -1
-      && (unsigned int) finfo.last_file.n_value != obj_raw_syment_count (abfd))
+  if (flaginfo.last_file_index != -1
+      && (unsigned int) flaginfo.last_file.n_value != obj_raw_syment_count (abfd))
     {
       file_ptr pos;
 
-      finfo.last_file.n_value = obj_raw_syment_count (abfd);
-      bfd_coff_swap_sym_out (abfd, &finfo.last_file,
-			     finfo.outsyms);
+      flaginfo.last_file.n_value = obj_raw_syment_count (abfd);
+      bfd_coff_swap_sym_out (abfd, &flaginfo.last_file,
+			     flaginfo.outsyms);
 
-      pos = obj_sym_filepos (abfd) + finfo.last_file_index * symesz;
+      pos = obj_sym_filepos (abfd) + flaginfo.last_file_index * symesz;
       if (bfd_seek (abfd, pos, SEEK_SET) != 0
-	  || bfd_bwrite (finfo.outsyms, symesz, abfd) != symesz)
+	  || bfd_bwrite (flaginfo.outsyms, symesz, abfd) != symesz)
 	return FALSE;
     }
 
@@ -1096,24 +1096,24 @@ _bfd_coff_final_link (bfd *abfd,
      static.  */
   if (info->task_link)
     {
-      finfo.failed = FALSE;
+      flaginfo.failed = FALSE;
       coff_link_hash_traverse (coff_hash_table (info),
-			       _bfd_coff_write_task_globals, &finfo);
-      if (finfo.failed)
+			       _bfd_coff_write_task_globals, &flaginfo);
+      if (flaginfo.failed)
 	goto error_return;
     }
 
   /* Write out the global symbols.  */
-  finfo.failed = FALSE;
-  bfd_hash_traverse (&info->hash->table, _bfd_coff_write_global_sym, &finfo);
-  if (finfo.failed)
+  flaginfo.failed = FALSE;
+  bfd_hash_traverse (&info->hash->table, _bfd_coff_write_global_sym, &flaginfo);
+  if (flaginfo.failed)
     goto error_return;
 
   /* The outsyms buffer is used by _bfd_coff_write_global_sym.  */
-  if (finfo.outsyms != NULL)
+  if (flaginfo.outsyms != NULL)
     {
-      free (finfo.outsyms);
-      finfo.outsyms = NULL;
+      free (flaginfo.outsyms);
+      flaginfo.outsyms = NULL;
     }
 
   if (info->relocatable && max_output_reloc_count > 0)
@@ -1136,9 +1136,9 @@ _bfd_coff_final_link (bfd *abfd,
 	  if (o->reloc_count == 0)
 	    continue;
 
-	  irel = finfo.section_info[o->target_index].relocs;
+	  irel = flaginfo.section_info[o->target_index].relocs;
 	  irelend = irel + o->reloc_count;
-	  rel_hash = finfo.section_info[o->target_index].rel_hashes;
+	  rel_hash = flaginfo.section_info[o->target_index].rel_hashes;
 	  erel = external_relocs;
 	  for (; irel < irelend; irel++, rel_hash++, erel += relsz)
 	    {
@@ -1162,7 +1162,7 @@ _bfd_coff_final_link (bfd *abfd,
 	      
 	      memset (&incount, 0, sizeof (incount));
 	      incount.r_vaddr = o->reloc_count + 1;
-	      bfd_coff_swap_reloc_out (abfd, (PTR) &incount, (PTR) excount);
+	      bfd_coff_swap_reloc_out (abfd, &incount, excount);
 	      if (bfd_bwrite (excount, relsz, abfd) != relsz)
 		/* We'll leak, but it's an error anyway. */
 		goto error_return;
@@ -1179,19 +1179,19 @@ _bfd_coff_final_link (bfd *abfd,
     }
 
   /* Free up the section information.  */
-  if (finfo.section_info != NULL)
+  if (flaginfo.section_info != NULL)
     {
       unsigned int i;
 
       for (i = 0; i < abfd->section_count; i++)
 	{
-	  if (finfo.section_info[i].relocs != NULL)
-	    free (finfo.section_info[i].relocs);
-	  if (finfo.section_info[i].rel_hashes != NULL)
-	    free (finfo.section_info[i].rel_hashes);
+	  if (flaginfo.section_info[i].relocs != NULL)
+	    free (flaginfo.section_info[i].relocs);
+	  if (flaginfo.section_info[i].rel_hashes != NULL)
+	    free (flaginfo.section_info[i].rel_hashes);
 	}
-      free (finfo.section_info);
-      finfo.section_info = NULL;
+      free (flaginfo.section_info);
+      flaginfo.section_info = NULL;
     }
 
   /* If we have optimized stabs strings, output them.  */
@@ -1212,7 +1212,7 @@ _bfd_coff_final_link (bfd *abfd,
 
 #if STRING_SIZE_SIZE == 4
       H_PUT_32 (abfd,
-		_bfd_stringtab_size (finfo.strtab) + STRING_SIZE_SIZE,
+		_bfd_stringtab_size (flaginfo.strtab) + STRING_SIZE_SIZE,
 		strbuf);
 #else
  #error Change H_PUT_32 above
@@ -1222,13 +1222,13 @@ _bfd_coff_final_link (bfd *abfd,
 	  != STRING_SIZE_SIZE)
 	return FALSE;
 
-      if (! _bfd_stringtab_emit (abfd, finfo.strtab))
+      if (! _bfd_stringtab_emit (abfd, flaginfo.strtab))
 	return FALSE;
 
       obj_coff_strings_written (abfd) = TRUE;
     }
 
-  _bfd_stringtab_free (finfo.strtab);
+  _bfd_stringtab_free (flaginfo.strtab);
 
   /* Setting bfd_get_symcount to 0 will cause write_object_contents to
      not try to write out the symbols.  */
@@ -1238,38 +1238,38 @@ _bfd_coff_final_link (bfd *abfd,
 
  error_return:
   if (debug_merge_allocated)
-    coff_debug_merge_hash_table_free (&finfo.debug_merge);
-  if (finfo.strtab != NULL)
-    _bfd_stringtab_free (finfo.strtab);
-  if (finfo.section_info != NULL)
+    coff_debug_merge_hash_table_free (&flaginfo.debug_merge);
+  if (flaginfo.strtab != NULL)
+    _bfd_stringtab_free (flaginfo.strtab);
+  if (flaginfo.section_info != NULL)
     {
       unsigned int i;
 
       for (i = 0; i < abfd->section_count; i++)
 	{
-	  if (finfo.section_info[i].relocs != NULL)
-	    free (finfo.section_info[i].relocs);
-	  if (finfo.section_info[i].rel_hashes != NULL)
-	    free (finfo.section_info[i].rel_hashes);
+	  if (flaginfo.section_info[i].relocs != NULL)
+	    free (flaginfo.section_info[i].relocs);
+	  if (flaginfo.section_info[i].rel_hashes != NULL)
+	    free (flaginfo.section_info[i].rel_hashes);
 	}
-      free (finfo.section_info);
+      free (flaginfo.section_info);
     }
-  if (finfo.internal_syms != NULL)
-    free (finfo.internal_syms);
-  if (finfo.sec_ptrs != NULL)
-    free (finfo.sec_ptrs);
-  if (finfo.sym_indices != NULL)
-    free (finfo.sym_indices);
-  if (finfo.outsyms != NULL)
-    free (finfo.outsyms);
-  if (finfo.linenos != NULL)
-    free (finfo.linenos);
-  if (finfo.contents != NULL)
-    free (finfo.contents);
-  if (finfo.external_relocs != NULL)
-    free (finfo.external_relocs);
-  if (finfo.internal_relocs != NULL)
-    free (finfo.internal_relocs);
+  if (flaginfo.internal_syms != NULL)
+    free (flaginfo.internal_syms);
+  if (flaginfo.sec_ptrs != NULL)
+    free (flaginfo.sec_ptrs);
+  if (flaginfo.sym_indices != NULL)
+    free (flaginfo.sym_indices);
+  if (flaginfo.outsyms != NULL)
+    free (flaginfo.outsyms);
+  if (flaginfo.linenos != NULL)
+    free (flaginfo.linenos);
+  if (flaginfo.contents != NULL)
+    free (flaginfo.contents);
+  if (flaginfo.external_relocs != NULL)
+    free (flaginfo.external_relocs);
+  if (flaginfo.internal_relocs != NULL)
+    free (flaginfo.internal_relocs);
   if (external_relocs != NULL)
     free (external_relocs);
   return FALSE;
@@ -1411,7 +1411,7 @@ process_embedded_commands (bfd *output_bfd,
    that symbol.  */
 
 static void
-mark_relocs (struct coff_final_link_info *finfo, bfd *input_bfd)
+mark_relocs (struct coff_final_link_info *flaginfo, bfd *input_bfd)
 {
   asection * a;
 
@@ -1433,11 +1433,11 @@ mark_relocs (struct coff_final_link_info *finfo, bfd *input_bfd)
       /* Read in the relocs.  */
       internal_relocs = _bfd_coff_read_internal_relocs
 	(input_bfd, a, FALSE,
-	 finfo->external_relocs,
-	 finfo->info->relocatable,
-	 (finfo->info->relocatable
-	  ? (finfo->section_info[ a->output_section->target_index ].relocs + a->output_section->reloc_count)
-	  : finfo->internal_relocs)
+	 flaginfo->external_relocs,
+	 flaginfo->info->relocatable,
+	 (flaginfo->info->relocatable
+	  ? (flaginfo->section_info[ a->output_section->target_index ].relocs + a->output_section->reloc_count)
+	  : flaginfo->internal_relocs)
 	);
 
       if (internal_relocs == NULL)
@@ -1451,7 +1451,7 @@ mark_relocs (struct coff_final_link_info *finfo, bfd *input_bfd)
 	 in the relocation table.  This will then be picked up in the
 	 skip/don't-skip pass.  */
       for (; irel < irelend; irel++)
-	finfo->sym_indices[ irel->r_symndx ] = -1;
+	flaginfo->sym_indices[ irel->r_symndx ] = -1;
     }
 }
 
@@ -1459,7 +1459,7 @@ mark_relocs (struct coff_final_link_info *finfo, bfd *input_bfd)
    handles all the sections and relocations of the input file at once.  */
 
 bfd_boolean
-_bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
+_bfd_coff_link_input_bfd (struct coff_final_link_info *flaginfo, bfd *input_bfd)
 {
   unsigned int n_tmask = coff_data (input_bfd)->local_n_tmask;
   unsigned int n_btshft = coff_data (input_bfd)->local_n_btshft;
@@ -1485,7 +1485,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 
   /* Move all the symbols to the output file.  */
 
-  output_bfd = finfo->output_bfd;
+  output_bfd = flaginfo->output_bfd;
   strings = NULL;
   syment_base = obj_raw_syment_count (output_bfd);
   isymesz = bfd_coff_symesz (input_bfd);
@@ -1494,7 +1494,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
   BFD_ASSERT (linesz == bfd_coff_linesz (output_bfd));
 
   copy = FALSE;
-  if (! finfo->info->keep_memory)
+  if (! flaginfo->info->keep_memory)
     copy = TRUE;
   hash = TRUE;
   if ((output_bfd->flags & BFD_TRADITIONAL_FORMAT) != 0)
@@ -1505,27 +1505,27 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 
   esym = (bfd_byte *) obj_coff_external_syms (input_bfd);
   esym_end = esym + obj_raw_syment_count (input_bfd) * isymesz;
-  isymp = finfo->internal_syms;
-  secpp = finfo->sec_ptrs;
-  indexp = finfo->sym_indices;
+  isymp = flaginfo->internal_syms;
+  secpp = flaginfo->sec_ptrs;
+  indexp = flaginfo->sym_indices;
   output_index = syment_base;
-  outsym = finfo->outsyms;
+  outsym = flaginfo->outsyms;
 
   if (coff_data (output_bfd)->pe
-      && ! process_embedded_commands (output_bfd, finfo->info, input_bfd))
+      && ! process_embedded_commands (output_bfd, flaginfo->info, input_bfd))
     return FALSE;
 
   /* If we are going to perform relocations and also strip/discard some
      symbols then we must make sure that we do not strip/discard those
      symbols that are going to be involved in the relocations.  */
-  if ((   finfo->info->strip   != strip_none
-       || finfo->info->discard != discard_none)
-      && finfo->info->relocatable)
+  if ((   flaginfo->info->strip   != strip_none
+       || flaginfo->info->discard != discard_none)
+      && flaginfo->info->relocatable)
     {
       /* Mark the symbol array as 'not-used'.  */
       memset (indexp, 0, obj_raw_syment_count (input_bfd) * sizeof * indexp);
 
-      mark_relocs (finfo, input_bfd);
+      mark_relocs (flaginfo, input_bfd);
     }
 
   while (esym < esym_end)
@@ -1565,9 +1565,9 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 
       /* Extract the flag indicating if this symbol is used by a
          relocation.  */
-      if ((finfo->info->strip != strip_none
-	   || finfo->info->discard != discard_none)
-	  && finfo->info->relocatable)
+      if ((flaginfo->info->strip != strip_none
+	   || flaginfo->info->discard != discard_none)
+	  && flaginfo->info->relocatable)
 	dont_skip_symbol = *indexp;
       else
 	dont_skip_symbol = FALSE;
@@ -1579,7 +1579,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
       add = 1 + isym.n_numaux;
 
       /* If we are stripping all symbols, we want to skip this one.  */
-      if (finfo->info->strip == strip_all && ! dont_skip_symbol)
+      if (flaginfo->info->strip == strip_all && ! dont_skip_symbol)
 	skip = TRUE;
 
       if (! skip)
@@ -1609,7 +1609,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 	    case COFF_SYMBOL_LOCAL:
 	      /* This is a local symbol.  Skip it if we are discarding
                  local symbols.  */
-	      if (finfo->info->discard == discard_all && ! dont_skip_symbol)
+	      if (flaginfo->info->discard == discard_all && ! dont_skip_symbol)
 		skip = TRUE;
 	      break;
 	    }
@@ -1634,7 +1634,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
          for some types of debugging symbols; I don't know if this is
          a bug or not.  In any case, we handle it here.  */
       if (! skip
-	  && finfo->info->strip == strip_debugger
+	  && flaginfo->info->strip == strip_debugger
 	  && ! dont_skip_symbol
 	  && (isym.n_scnum == N_DEBUG
 	      || (isym.n_scnum == N_ABS
@@ -1652,8 +1652,8 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
       /* If some symbols are stripped based on the name, work out the
 	 name and decide whether to skip this symbol.  */
       if (! skip
-	  && (finfo->info->strip == strip_some
-	      || finfo->info->discard == discard_l))
+	  && (flaginfo->info->strip == strip_some
+	      || flaginfo->info->discard == discard_l))
 	{
 	  const char *name;
 	  char buf[SYMNMLEN + 1];
@@ -1663,11 +1663,11 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 	    return FALSE;
 
 	  if (! dont_skip_symbol
-	      && ((finfo->info->strip == strip_some
-		   && (bfd_hash_lookup (finfo->info->keep_hash, name, FALSE,
+	      && ((flaginfo->info->strip == strip_some
+		   && (bfd_hash_lookup (flaginfo->info->keep_hash, name, FALSE,
 				    FALSE) == NULL))
 		   || (! global
-		       && finfo->info->discard == discard_l
+		       && flaginfo->info->discard == discard_l
 		       && bfd_is_local_label_name (input_bfd, name))))
 	    skip = TRUE;
 	}
@@ -1675,7 +1675,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
       /* If this is an enum, struct, or union tag, see if we have
          already output an identical type.  */
       if (! skip
-	  && (finfo->output_bfd->flags & BFD_TRADITIONAL_FORMAT) == 0
+	  && (flaginfo->output_bfd->flags & BFD_TRADITIONAL_FORMAT) == 0
 	  && (isym.n_sclass == C_ENTAG
 	      || isym.n_sclass == C_STRTAG
 	      || isym.n_sclass == C_UNTAG)
@@ -1702,7 +1702,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 		  && (name[1] == '~' || name[1] == '.' || name[1] == '$')))
 	    name = "";
 
-	  mh = coff_debug_merge_hash_lookup (&finfo->debug_merge, name,
+	  mh = coff_debug_merge_hash_lookup (&flaginfo->debug_merge, name,
 					     TRUE, TRUE);
 	  if (mh == NULL)
 	    return FALSE;
@@ -1779,7 +1779,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 			      (bfd_byte *) obj_coff_external_syms (input_bfd))
 			     / (long) isymesz)))
 		    {
-		      (*epp)->tagndx = finfo->sym_indices[indx];
+		      (*epp)->tagndx = flaginfo->sym_indices[indx];
 		      if ((*epp)->tagndx < 0)
 			(*epp)->tagndx = 0;
 		    }
@@ -1858,7 +1858,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 	      name = _bfd_coff_internal_syment_name (input_bfd, &isym, NULL);
 	      if (name == NULL)
 		return FALSE;
-	      indx = _bfd_stringtab_add (finfo->strtab, name, hash, copy);
+	      indx = _bfd_stringtab_add (flaginfo->strtab, name, hash, copy);
 	      if (indx == (bfd_size_type) -1)
 		return FALSE;
 	      isym._n._n_n._n_offset = STRING_SIZE_SIZE + indx;
@@ -1913,7 +1913,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 		isym.n_value += (*secpp)->output_offset;
 		if (! obj_pe (input_bfd))
 		  isym.n_value -= (*secpp)->vma;
-		if (! obj_pe (finfo->output_bfd))
+		if (! obj_pe (flaginfo->output_bfd))
 		  isym.n_value += (*secpp)->output_section->vma;
 	      }
 	    break;
@@ -1928,19 +1928,19 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 		 it).  We try to get this right, below, just before we
 		 write the symbols out, but in the general case we may
 		 have to write the symbol out twice.  */
-	      if (finfo->last_file_index != -1
-		  && finfo->last_file.n_value != (bfd_vma) output_index)
+	      if (flaginfo->last_file_index != -1
+		  && flaginfo->last_file.n_value != (bfd_vma) output_index)
 		{
 		  /* We must correct the value of the last C_FILE
                      entry.  */
-		  finfo->last_file.n_value = output_index;
-		  if ((bfd_size_type) finfo->last_file_index >= syment_base)
+		  flaginfo->last_file.n_value = output_index;
+		  if ((bfd_size_type) flaginfo->last_file_index >= syment_base)
 		    {
 		      /* The last C_FILE symbol is in this input file.  */
 		      bfd_coff_swap_sym_out (output_bfd,
-					     &finfo->last_file,
-					     (finfo->outsyms
-					      + ((finfo->last_file_index
+					     &flaginfo->last_file,
+					     (flaginfo->outsyms
+					      + ((flaginfo->last_file_index
 						  - syment_base)
 						 * osymesz)));
 		    }
@@ -1952,23 +1952,23 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 			 symbol.  We need to write it out again.  We
 			 borrow *outsym temporarily.  */
 		      bfd_coff_swap_sym_out (output_bfd,
-					     &finfo->last_file, outsym);
+					     &flaginfo->last_file, outsym);
 		      pos = obj_sym_filepos (output_bfd);
-		      pos += finfo->last_file_index * osymesz;
+		      pos += flaginfo->last_file_index * osymesz;
 		      if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
 			  || bfd_bwrite (outsym, osymesz, output_bfd) != osymesz)
 			return FALSE;
 		    }
 		}
 
-	      finfo->last_file_index = output_index;
-	      finfo->last_file = isym;
+	      flaginfo->last_file_index = output_index;
+	      flaginfo->last_file = isym;
 	      break;
 	    }
 
 	  /* If doing task linking, convert normal global function symbols to
 	     static functions.  */
-	  if (finfo->info->task_link && IS_EXTERNAL (input_bfd, isym))
+	  if (flaginfo->info->task_link && IS_EXTERNAL (input_bfd, isym))
 	    isym.n_sclass = C_STAT;
 
 	  /* Output the symbol.  */
@@ -2014,10 +2014,10 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
      already decided which symbols we are going to keep.  */
   esym = (bfd_byte *) obj_coff_external_syms (input_bfd);
   esym_end = esym + obj_raw_syment_count (input_bfd) * isymesz;
-  isymp = finfo->internal_syms;
-  indexp = finfo->sym_indices;
+  isymp = flaginfo->internal_syms;
+  indexp = flaginfo->sym_indices;
   sym_hash = obj_coff_sym_hashes (input_bfd);
-  outsym = finfo->outsyms;
+  outsym = flaginfo->outsyms;
 
   while (esym < esym_end)
     {
@@ -2088,7 +2088,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 			    return FALSE;
 			}
 		      filename = strings + auxp->x_file.x_n.x_offset;
-		      indx = _bfd_stringtab_add (finfo->strtab, filename,
+		      indx = _bfd_stringtab_add (flaginfo->strtab, filename,
 						 hash, copy);
 		      if (indx == (bfd_size_type) -1)
 			return FALSE;
@@ -2113,15 +2113,15 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
                              the index of the next symbol we are going
                              to include.  I don't know if this is
                              entirely right.  */
-			  while ((finfo->sym_indices[indx] < 0
-				  || ((bfd_size_type) finfo->sym_indices[indx]
+			  while ((flaginfo->sym_indices[indx] < 0
+				  || ((bfd_size_type) flaginfo->sym_indices[indx]
 				      < syment_base))
 				 && indx < obj_raw_syment_count (input_bfd))
 			    ++indx;
 			  if (indx >= obj_raw_syment_count (input_bfd))
 			    indx = output_index;
 			  else
-			    indx = finfo->sym_indices[indx];
+			    indx = flaginfo->sym_indices[indx];
 			  auxp->x_sym.x_fcnary.x_fcn.x_endndx.l = indx;
 			}
 		    }
@@ -2131,7 +2131,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 		    {
 		      long symindx;
 
-		      symindx = finfo->sym_indices[indx];
+		      symindx = flaginfo->sym_indices[indx];
 		      if (symindx < 0)
 			auxp->x_sym.x_tagndx.l = 0;
 		      else
@@ -2151,12 +2151,12 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 		      && isymp->_n._n_name[2] == 'f'
 		      && isymp->_n._n_name[3] == '\0')
 		    {
-		      if (finfo->last_bf_index != -1)
+		      if (flaginfo->last_bf_index != -1)
 			{
-			  finfo->last_bf.x_sym.x_fcnary.x_fcn.x_endndx.l =
+			  flaginfo->last_bf.x_sym.x_fcnary.x_fcn.x_endndx.l =
 			    *indexp;
 
-			  if ((bfd_size_type) finfo->last_bf_index
+			  if ((bfd_size_type) flaginfo->last_bf_index
 			      >= syment_base)
 			    {
 			      void *auxout;
@@ -2165,13 +2165,13 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 				 file.  This will only happen if the
 				 assembler did not set up the .bf
 				 endndx symbols correctly.  */
-			      auxout = (finfo->outsyms
-					+ ((finfo->last_bf_index
+			      auxout = (flaginfo->outsyms
+					+ ((flaginfo->last_bf_index
 					    - syment_base)
 					   * osymesz));
 
 			      bfd_coff_swap_aux_out (output_bfd,
-						     &finfo->last_bf,
+						     &flaginfo->last_bf,
 						     isymp->n_type,
 						     isymp->n_sclass,
 						     0, isymp->n_numaux,
@@ -2187,13 +2187,13 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
                                  temporarily.  FIXME: This case should
                                  be made faster.  */
 			      bfd_coff_swap_aux_out (output_bfd,
-						     &finfo->last_bf,
+						     &flaginfo->last_bf,
 						     isymp->n_type,
 						     isymp->n_sclass,
 						     0, isymp->n_numaux,
 						     outsym);
 			      pos = obj_sym_filepos (output_bfd);
-			      pos += finfo->last_bf_index * osymesz;
+			      pos += flaginfo->last_bf_index * osymesz;
 			      if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
 				  || (bfd_bwrite (outsym, osymesz, output_bfd)
 				      != osymesz))
@@ -2202,14 +2202,14 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 			}
 
 		      if (auxp->x_sym.x_fcnary.x_fcn.x_endndx.l != 0)
-			finfo->last_bf_index = -1;
+			flaginfo->last_bf_index = -1;
 		      else
 			{
 			  /* The endndx field of this aux entry must
                              be updated with the symbol number of the
                              next .bf symbol.  */
-			  finfo->last_bf = *auxp;
-			  finfo->last_bf_index = (((outsym - finfo->outsyms)
+			  flaginfo->last_bf = *auxp;
+			  flaginfo->last_bf_index = (((outsym - flaginfo->outsyms)
 						   / osymesz)
 						  + syment_base);
 			}
@@ -2234,8 +2234,8 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
     }
 
   /* Relocate the line numbers, unless we are stripping them.  */
-  if (finfo->info->strip == strip_none
-      || finfo->info->strip == strip_some)
+  if (flaginfo->info->strip == strip_none
+      || flaginfo->info->strip == strip_some)
     {
       for (o = input_bfd->sections; o != NULL; o = o->next)
 	{
@@ -2261,13 +2261,13 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 	    continue;
 
 	  if (bfd_seek (input_bfd, o->line_filepos, SEEK_SET) != 0
-	      || bfd_bread (finfo->linenos, linesz * o->lineno_count,
+	      || bfd_bread (flaginfo->linenos, linesz * o->lineno_count,
 			   input_bfd) != linesz * o->lineno_count)
 	    return FALSE;
 
 	  offset = o->output_section->vma + o->output_offset - o->vma;
-	  eline = finfo->linenos;
-	  oeline = finfo->linenos;
+	  eline = flaginfo->linenos;
+	  oeline = flaginfo->linenos;
 	  elineend = eline + linesz * o->lineno_count;
 	  skipping = FALSE;
 	  for (; eline < elineend; eline += linesz)
@@ -2284,7 +2284,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 		{
 		  long indx;
 
-		  indx = finfo->sym_indices[iline.l_addr.l_symndx];
+		  indx = flaginfo->sym_indices[iline.l_addr.l_symndx];
 
 		  if (indx < 0)
 		    {
@@ -2310,7 +2310,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 			 of the line numbers rather than an absolute
 			 file index.  */
 		      bfd_coff_swap_sym_in (output_bfd,
-					    (finfo->outsyms
+					    (flaginfo->outsyms
 					     + ((indx - syment_base)
 						* osymesz)), &is);
 		      if ((ISFCN (is.n_type)
@@ -2319,7 +2319,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 			{
 			  void *auxptr;
 
-			  auxptr = (finfo->outsyms
+			  auxptr = (flaginfo->outsyms
 				    + ((indx - syment_base + 1)
 				       * osymesz));
 			  bfd_coff_swap_aux_in (output_bfd, auxptr,
@@ -2328,7 +2328,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 			  ia.x_sym.x_fcnary.x_fcn.x_lnnoptr =
 			    (o->output_section->line_filepos
 			     + o->output_section->lineno_count * linesz
-			     + eline - finfo->linenos);
+			     + eline - flaginfo->linenos);
 			  bfd_coff_swap_aux_out (output_bfd, &ia,
 						 is.n_type, is.n_sclass, 0,
 						 is.n_numaux, auxptr);
@@ -2349,9 +2349,9 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 
 	  pos = o->output_section->line_filepos;
 	  pos += o->output_section->lineno_count * linesz;
-	  amt = oeline - finfo->linenos;
+	  amt = oeline - flaginfo->linenos;
 	  if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
-	      || bfd_bwrite (finfo->linenos, amt, output_bfd) != amt)
+	      || bfd_bwrite (flaginfo->linenos, amt, output_bfd) != amt)
 	    return FALSE;
 
 	  o->output_section->lineno_count += amt / linesz;
@@ -2362,30 +2362,30 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
      symbol will be the first symbol in the next input file.  In the
      normal case, this will save us from writing out the C_FILE symbol
      again.  */
-  if (finfo->last_file_index != -1
-      && (bfd_size_type) finfo->last_file_index >= syment_base)
+  if (flaginfo->last_file_index != -1
+      && (bfd_size_type) flaginfo->last_file_index >= syment_base)
     {
-      finfo->last_file.n_value = output_index;
-      bfd_coff_swap_sym_out (output_bfd, &finfo->last_file,
-			     (finfo->outsyms
-			      + ((finfo->last_file_index - syment_base)
+      flaginfo->last_file.n_value = output_index;
+      bfd_coff_swap_sym_out (output_bfd, &flaginfo->last_file,
+			     (flaginfo->outsyms
+			      + ((flaginfo->last_file_index - syment_base)
 				 * osymesz)));
     }
 
   /* Write the modified symbols to the output file.  */
-  if (outsym > finfo->outsyms)
+  if (outsym > flaginfo->outsyms)
     {
       file_ptr pos;
       bfd_size_type amt;
 
       pos = obj_sym_filepos (output_bfd) + syment_base * osymesz;
-      amt = outsym - finfo->outsyms;
+      amt = outsym - flaginfo->outsyms;
       if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
-	  || bfd_bwrite (finfo->outsyms, amt, output_bfd) != amt)
+	  || bfd_bwrite (flaginfo->outsyms, amt, output_bfd) != amt)
 	return FALSE;
 
       BFD_ASSERT ((obj_raw_syment_count (output_bfd)
-		   + (outsym - finfo->outsyms) / osymesz)
+		   + (outsym - flaginfo->outsyms) / osymesz)
 		  == output_index);
 
       obj_raw_syment_count (output_bfd) = output_index;
@@ -2427,9 +2427,9 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
       else
 	{
 	  bfd_size_type x = o->rawsize ? o->rawsize : o->size;
-	  if (! bfd_get_section_contents (input_bfd, o, finfo->contents, 0, x))
+	  if (! bfd_get_section_contents (input_bfd, o, flaginfo->contents, 0, x))
 	    return FALSE;
-	  contents = finfo->contents;
+	  contents = flaginfo->contents;
 	}
 
       if ((o->flags & SEC_RELOC) != 0)
@@ -2441,12 +2441,12 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 	  /* Read in the relocs.  */
 	  target_index = o->output_section->target_index;
 	  internal_relocs = (_bfd_coff_read_internal_relocs
-			     (input_bfd, o, FALSE, finfo->external_relocs,
-			      finfo->info->relocatable,
-			      (finfo->info->relocatable
-			       ? (finfo->section_info[target_index].relocs
+			     (input_bfd, o, FALSE, flaginfo->external_relocs,
+			      flaginfo->info->relocatable,
+			      (flaginfo->info->relocatable
+			       ? (flaginfo->section_info[target_index].relocs
 				  + o->output_section->reloc_count)
-			       : finfo->internal_relocs)));
+			       : flaginfo->internal_relocs)));
 	  if (internal_relocs == NULL)
 	    return FALSE;
 
@@ -2473,7 +2473,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 		continue;
 	      /* Complain if definition comes from an excluded section.  */
 	      if (ps->flags & SEC_EXCLUDE)
-		(*finfo->info->callbacks->einfo)
+		(*flaginfo->info->callbacks->einfo)
 		  (_("%X`%s' referenced in section `%A' of %B: "
 		     "defined in discarded section `%A' of %B\n"),
 		   h->root.root.string, o, input_bfd, ps, ps->owner);
@@ -2481,15 +2481,15 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 
 	  /* Call processor specific code to relocate the section
              contents.  */
-	  if (! bfd_coff_relocate_section (output_bfd, finfo->info,
+	  if (! bfd_coff_relocate_section (output_bfd, flaginfo->info,
 					   input_bfd, o,
 					   contents,
 					   internal_relocs,
-					   finfo->internal_syms,
-					   finfo->sec_ptrs))
+					   flaginfo->internal_syms,
+					   flaginfo->sec_ptrs))
 	    return FALSE;
 
-	  if (finfo->info->relocatable)
+	  if (flaginfo->info->relocatable)
 	    {
 	      bfd_vma offset;
 	      struct internal_reloc *irelend;
@@ -2498,7 +2498,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 	      offset = o->output_section->vma + o->output_offset - o->vma;
 	      irel = internal_relocs;
 	      irelend = irel + o->reloc_count;
-	      rel_hash = (finfo->section_info[target_index].rel_hashes
+	      rel_hash = (flaginfo->section_info[target_index].rel_hashes
 			  + o->output_section->reloc_count);
 	      for (; irel < irelend; irel++, rel_hash++)
 		{
@@ -2515,7 +2515,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 
 		  if (adjust_symndx)
 		    {
-		      if (! (*adjust_symndx) (output_bfd, finfo->info,
+		      if (! (*adjust_symndx) (output_bfd, flaginfo->info,
 					      input_bfd, o, irel,
 					      &adjusted))
 			return FALSE;
@@ -2545,7 +2545,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
 		    {
 		      long indx;
 
-		      indx = finfo->sym_indices[irel->r_symndx];
+		      indx = flaginfo->sym_indices[irel->r_symndx];
 		      if (indx != -1)
 			irel->r_symndx = indx;
 		      else
@@ -2558,15 +2558,15 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
                              stripping.  This should have been handled
 			     by the 'dont_skip_symbol' code in the while
 			     loop at the top of this function.  */
-			  is = finfo->internal_syms + irel->r_symndx;
+			  is = flaginfo->internal_syms + irel->r_symndx;
 
 			  name = (_bfd_coff_internal_syment_name
 				  (input_bfd, is, buf));
 			  if (name == NULL)
 			    return FALSE;
 
-			  if (! ((*finfo->info->callbacks->unattached_reloc)
-				 (finfo->info, name, input_bfd, o,
+			  if (! ((*flaginfo->info->callbacks->unattached_reloc)
+				 (flaginfo->info, name, input_bfd, o,
 				  irel->r_vaddr)))
 			    return FALSE;
 			}
@@ -2588,13 +2588,13 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd)
       else
 	{
 	  if (! (_bfd_write_section_stabs
-		 (output_bfd, &coff_hash_table (finfo->info)->stab_info,
+		 (output_bfd, &coff_hash_table (flaginfo->info)->stab_info,
 		  o, &secdata->stab_info, contents)))
 	    return FALSE;
 	}
     }
 
-  if (! finfo->info->keep_memory
+  if (! flaginfo->info->keep_memory
       && ! _bfd_coff_free_symbols (input_bfd))
     return FALSE;
 
@@ -2607,14 +2607,14 @@ bfd_boolean
 _bfd_coff_write_global_sym (struct bfd_hash_entry *bh, void *data)
 {
   struct coff_link_hash_entry *h = (struct coff_link_hash_entry *) bh;
-  struct coff_final_link_info *finfo = (struct coff_final_link_info *) data;
+  struct coff_final_link_info *flaginfo = (struct coff_final_link_info *) data;
   bfd *output_bfd;
   struct internal_syment isym;
   bfd_size_type symesz;
   unsigned int i;
   file_ptr pos;
 
-  output_bfd = finfo->output_bfd;
+  output_bfd = flaginfo->output_bfd;
 
   if (h->root.type == bfd_link_hash_warning)
     {
@@ -2627,9 +2627,9 @@ _bfd_coff_write_global_sym (struct bfd_hash_entry *bh, void *data)
     return TRUE;
 
   if (h->indx != -2
-      && (finfo->info->strip == strip_all
-	  || (finfo->info->strip == strip_some
-	      && (bfd_hash_lookup (finfo->info->keep_hash,
+      && (flaginfo->info->strip == strip_all
+	  || (flaginfo->info->strip == strip_some
+	      && (bfd_hash_lookup (flaginfo->info->keep_hash,
 				   h->root.root.string, FALSE, FALSE)
 		  == NULL))))
     return TRUE;
@@ -2660,7 +2660,7 @@ _bfd_coff_write_global_sym (struct bfd_hash_entry *bh, void *data)
 	  isym.n_scnum = sec->target_index;
 	isym.n_value = (h->root.u.def.value
 			+ h->root.u.def.section->output_offset);
-	if (! obj_pe (finfo->output_bfd))
+	if (! obj_pe (flaginfo->output_bfd))
 	  isym.n_value += sec->vma;
       }
       break;
@@ -2685,11 +2685,11 @@ _bfd_coff_write_global_sym (struct bfd_hash_entry *bh, void *data)
       hash = TRUE;
       if ((output_bfd->flags & BFD_TRADITIONAL_FORMAT) != 0)
 	hash = FALSE;
-      indx = _bfd_stringtab_add (finfo->strtab, h->root.root.string, hash,
+      indx = _bfd_stringtab_add (flaginfo->strtab, h->root.root.string, hash,
 				 FALSE);
       if (indx == (bfd_size_type) -1)
 	{
-	  finfo->failed = TRUE;
+	  flaginfo->failed = TRUE;
 	  return FALSE;
 	}
       isym._n._n_n._n_zeroes = 0;
@@ -2706,7 +2706,7 @@ _bfd_coff_write_global_sym (struct bfd_hash_entry *bh, void *data)
      defined globals to statics, then do that conversion now.  If the
      symbol is not being converted, just ignore it and it will be
      output during a later pass.  */
-  if (finfo->global_to_static)
+  if (flaginfo->global_to_static)
     {
       if (! IS_EXTERNAL (output_bfd, isym))
 	return TRUE;
@@ -2717,23 +2717,23 @@ _bfd_coff_write_global_sym (struct bfd_hash_entry *bh, void *data)
   /* When a weak symbol is not overridden by a strong one,
      turn it into an external symbol when not building a
      shared or relocatable object.  */
-  if (! finfo->info->shared
-      && ! finfo->info->relocatable
-      && IS_WEAK_EXTERNAL (finfo->output_bfd, isym))
+  if (! flaginfo->info->shared
+      && ! flaginfo->info->relocatable
+      && IS_WEAK_EXTERNAL (flaginfo->output_bfd, isym))
     isym.n_sclass = C_EXT;
 
   isym.n_numaux = h->numaux;
 
-  bfd_coff_swap_sym_out (output_bfd, &isym, finfo->outsyms);
+  bfd_coff_swap_sym_out (output_bfd, &isym, flaginfo->outsyms);
 
   symesz = bfd_coff_symesz (output_bfd);
 
   pos = obj_sym_filepos (output_bfd);
   pos += obj_raw_syment_count (output_bfd) * symesz;
   if (bfd_seek (output_bfd, pos, SEEK_SET) != 0
-      || bfd_bwrite (finfo->outsyms, symesz, output_bfd) != symesz)
+      || bfd_bwrite (flaginfo->outsyms, symesz, output_bfd) != symesz)
     {
-      finfo->failed = TRUE;
+      flaginfo->failed = TRUE;
       return FALSE;
     }
 
@@ -2771,7 +2771,7 @@ _bfd_coff_write_global_sym (struct bfd_hash_entry *bh, void *data)
                  not matter.  FIXME: Why not?  */
 	      if (sec->reloc_count > 0xffff
 		  && (! obj_pe (output_bfd)
-		      || finfo->info->relocatable))
+		      || flaginfo->info->relocatable))
 		(*_bfd_error_handler)
 		  (_("%s: %s: reloc overflow: 0x%lx > 0xffff"),
 		   bfd_get_filename (output_bfd),
@@ -2780,7 +2780,7 @@ _bfd_coff_write_global_sym (struct bfd_hash_entry *bh, void *data)
 
 	      if (sec->lineno_count > 0xffff
 		  && (! obj_pe (output_bfd)
-		      || finfo->info->relocatable))
+		      || flaginfo->info->relocatable))
 		(*_bfd_error_handler)
 		  (_("%s: warning: %s: line number overflow: 0x%lx > 0xffff"),
 		   bfd_get_filename (output_bfd),
@@ -2797,10 +2797,10 @@ _bfd_coff_write_global_sym (struct bfd_hash_entry *bh, void *data)
 
       bfd_coff_swap_aux_out (output_bfd, auxp, isym.n_type,
 			     isym.n_sclass, (int) i, isym.n_numaux,
-			     finfo->outsyms);
-      if (bfd_bwrite (finfo->outsyms, symesz, output_bfd) != symesz)
+			     flaginfo->outsyms);
+      if (bfd_bwrite (flaginfo->outsyms, symesz, output_bfd) != symesz)
 	{
-	  finfo->failed = TRUE;
+	  flaginfo->failed = TRUE;
 	  return FALSE;
 	}
       ++obj_raw_syment_count (output_bfd);
@@ -2816,7 +2816,7 @@ _bfd_coff_write_global_sym (struct bfd_hash_entry *bh, void *data)
 bfd_boolean
 _bfd_coff_write_task_globals (struct coff_link_hash_entry *h, void *data)
 {
-  struct coff_final_link_info *finfo = (struct coff_final_link_info *) data;
+  struct coff_final_link_info *flaginfo = (struct coff_final_link_info *) data;
   bfd_boolean rtnval = TRUE;
   bfd_boolean save_global_to_static;
 
@@ -2829,10 +2829,10 @@ _bfd_coff_write_task_globals (struct coff_link_hash_entry *h, void *data)
 	{
 	case bfd_link_hash_defined:
 	case bfd_link_hash_defweak:
-	  save_global_to_static = finfo->global_to_static;
-	  finfo->global_to_static = TRUE;
+	  save_global_to_static = flaginfo->global_to_static;
+	  flaginfo->global_to_static = TRUE;
 	  rtnval = _bfd_coff_write_global_sym (&h->root.root, data);
-	  finfo->global_to_static = save_global_to_static;
+	  flaginfo->global_to_static = save_global_to_static;
 	  break;
 	default:
 	  break;
@@ -2845,7 +2845,7 @@ _bfd_coff_write_task_globals (struct coff_link_hash_entry *h, void *data)
 
 bfd_boolean
 _bfd_coff_reloc_link_order (bfd *output_bfd,
-			    struct coff_final_link_info *finfo,
+			    struct coff_final_link_info *flaginfo,
 			    asection *output_section,
 			    struct bfd_link_order *link_order)
 {
@@ -2884,8 +2884,8 @@ _bfd_coff_reloc_link_order (bfd *output_bfd,
 	case bfd_reloc_outofrange:
 	  abort ();
 	case bfd_reloc_overflow:
-	  if (! ((*finfo->info->callbacks->reloc_overflow)
-		 (finfo->info, NULL,
+	  if (! ((*flaginfo->info->callbacks->reloc_overflow)
+		 (flaginfo->info, NULL,
 		  (link_order->type == bfd_section_reloc_link_order
 		   ? bfd_section_name (output_bfd,
 				       link_order->u.reloc.p->u.section)
@@ -2908,9 +2908,9 @@ _bfd_coff_reloc_link_order (bfd *output_bfd,
 
   /* Store the reloc information in the right place.  It will get
      swapped and written out at the end of the final_link routine.  */
-  irel = (finfo->section_info[output_section->target_index].relocs
+  irel = (flaginfo->section_info[output_section->target_index].relocs
 	  + output_section->reloc_count);
-  rel_hash_ptr = (finfo->section_info[output_section->target_index].rel_hashes
+  rel_hash_ptr = (flaginfo->section_info[output_section->target_index].rel_hashes
 		  + output_section->reloc_count);
 
   memset (irel, 0, sizeof (struct internal_reloc));
@@ -2933,7 +2933,7 @@ _bfd_coff_reloc_link_order (bfd *output_bfd,
       struct coff_link_hash_entry *h;
 
       h = ((struct coff_link_hash_entry *)
-	   bfd_wrapped_link_hash_lookup (output_bfd, finfo->info,
+	   bfd_wrapped_link_hash_lookup (output_bfd, flaginfo->info,
 					 link_order->u.reloc.p->u.name,
 					 FALSE, FALSE, TRUE));
       if (h != NULL)
@@ -2951,8 +2951,8 @@ _bfd_coff_reloc_link_order (bfd *output_bfd,
 	}
       else
 	{
-	  if (! ((*finfo->info->callbacks->unattached_reloc)
-		 (finfo->info, link_order->u.reloc.p->u.name, (bfd *) NULL,
+	  if (! ((*flaginfo->info->callbacks->unattached_reloc)
+		 (flaginfo->info, link_order->u.reloc.p->u.name, (bfd *) NULL,
 		  (asection *) NULL, (bfd_vma) 0)))
 	    return FALSE;
 	  irel->r_symndx = 0;
diff --git a/bfd/compress.c b/bfd/compress.c
index a82a8bc..52c884c 100644
--- a/bfd/compress.c
+++ b/bfd/compress.c
@@ -1,5 +1,5 @@
 /* Compressed section support (intended for debug sections).
-   Copyright 2008, 2010, 2011
+   Copyright 2008, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -19,7 +19,6 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include "config.h"
 #include "sysdep.h"
 #include "bfd.h"
 #include "libbfd.h"
diff --git a/bfd/config.bfd b/bfd/config.bfd
index 5337ce5..783d1f3 100644
--- a/bfd/config.bfd
+++ b/bfd/config.bfd
@@ -85,8 +85,8 @@ hppa*)		 targ_archs=bfd_hppa_arch ;;
 i[3-7]86)	 targ_archs=bfd_i386_arch ;;
 i370)		 targ_archs=bfd_i370_arch ;;
 lm32)	         targ_archs=bfd_lm32_arch ;;
-m6811*|m68hc11*) targ_archs="bfd_m68hc11_arch bfd_m68hc12_arch" ;;
-m6812*|m68hc12*) targ_archs="bfd_m68hc12_arch bfd_m68hc11_arch" ;;
+m6811*|m68hc11*) targ_archs="bfd_m68hc11_arch bfd_m68hc12_arch bfd_m9s12x_arch bfd_m9s12xg_arch" ;;
+m6812*|m68hc12*) targ_archs="bfd_m68hc12_arch bfd_m68hc11_arch bfd_m9s12x_arch bfd_m9s12xg_arch" ;;
 m68*)		 targ_archs=bfd_m68k_arch ;;
 m88*)		 targ_archs=bfd_m88k_arch ;;
 microblaze*)	 targ_archs=bfd_microblaze_arch ;;
@@ -105,6 +105,7 @@ tilepro*)	 targ_archs=bfd_tilepro_arch ;;
 v850*)		 targ_archs=bfd_v850_arch ;;
 x86_64*)	 targ_archs=bfd_i386_arch ;;
 xtensa*)	 targ_archs=bfd_xtensa_arch ;;
+xgate)		 targ_archs=bfd_xgate_arch ;;
 z80|r800)	 targ_archs=bfd_z80_arch ;;
 z8k*)		 targ_archs=bfd_z8k_arch ;;
 *)		 targ_archs=bfd_${targ_cpu}_arch ;;
@@ -216,6 +217,18 @@ case "${targ}" in
     targ_selvecs=bfd_elf32_bigarc_vec
     ;;
 
+  arm-*-nacl*)
+    targ_defvec=bfd_elf32_littlearm_nacl_vec
+    targ_selvecs="bfd_elf32_bigarm_nacl_vec bfd_elf32_i386_nacl_vec"
+    targ64_selvecs="bfd_elf32_x86_64_nacl_vec bfd_elf64_x86_64_nacl_vec"
+    targ_archs="$targ_archs bfd_i386_arch"
+    ;;
+  armeb-*-nacl*)
+    targ_defvec=bfd_elf32_bigarm_nacl_vec
+    targ_selvecs="bfd_elf32_littlearm_nacl_vec bfd_elf32_i386_nacl_vec"
+    targ64_selvecs="bfd_elf32_x86_64_nacl_vec bfd_elf64_x86_64_nacl_vec"
+    targ_archs="$targ_archs bfd_i386_arch"
+    ;;
   armeb-*-netbsdelf*)
     targ_defvec=bfd_elf32_bigarm_vec
     targ_selvecs="bfd_elf32_littlearm_vec armnetbsd_vec"
@@ -507,9 +520,10 @@ case "${targ}" in
   i[3-7]86-*-darwin* | i[3-7]86-*-macos10* | i[3-7]86-*-rhapsody*)
     targ_defvec=mach_o_i386_vec
     targ_selvecs="mach_o_le_vec mach_o_be_vec mach_o_fat_vec pef_vec pef_xlib_vec sym_vec"
+    targ64_selvecs=mach_o_x86_64_vec
     targ_archs="$targ_archs bfd_powerpc_arch bfd_rs6000_arch"
     ;;
- i[3-7]86-sequent-bsd*)
+  i[3-7]86-sequent-bsd*)
     targ_defvec=i386dynix_vec
     targ_underscore=yes
     ;;
@@ -572,7 +586,9 @@ case "${targ}" in
     ;;
   i[3-7]86-*-nacl*)
     targ_defvec=bfd_elf32_i386_nacl_vec
-    targ_selvecs="bfd_elf32_i386_vec"
+    targ_selvecs="bfd_elf32_bigarm_nacl_vec bfd_elf32_littlearm_nacl_vec"
+    targ64_selvecs="bfd_elf64_x86_64_nacl_vec bfd_elf32_x86_64_nacl_vec"
+    targ_archs="$targ_archs bfd_arm_arch"
     ;;
 #ifdef BFD64
   x86_64-*-darwin*)
@@ -611,6 +627,12 @@ case "${targ}" in
     targ_selvecs="bfd_elf32_i386_vec bfd_elf32_x86_64_vec i386linux_vec i386pei_vec x86_64pei_vec bfd_elf64_l1om_vec bfd_elf64_k1om_vec"
     want64=true
     ;;
+  x86_64-*-nacl*)
+    targ_defvec=bfd_elf32_x86_64_nacl_vec
+    targ_selvecs="bfd_elf32_i386_nacl_vec bfd_elf64_x86_64_nacl_vec bfd_elf32_bigarm_nacl_vec bfd_elf32_littlearm_nacl_vec"
+    targ_archs="$targ_archs bfd_arm_arch"
+    want64=true
+    ;;
   x86_64-*-mingw* | x86_64-*-pe | x86_64-*-pep)
     targ_defvec=x86_64pe_vec
     targ_selvecs="x86_64pe_vec x86_64pei_vec bfd_elf64_x86_64_vec bfd_elf64_l1om_vec bfd_elf64_k1om_vec i386pe_vec i386pei_vec bfd_elf32_i386_vec"
@@ -1506,8 +1528,12 @@ case "${targ}" in
 
 #ifdef BFD64
   tilegx-*-*)
-    targ_defvec=bfd_elf64_tilegx_vec
-    targ_selvecs=bfd_elf32_tilegx_vec
+    targ_defvec=bfd_elf64_tilegx_le_vec
+    targ_selvecs="bfd_elf64_tilegx_be_vec bfd_elf32_tilegx_be_vec bfd_elf32_tilegx_le_vec"
+    ;;
+  tilegxbe-*-*)
+    targ_defvec=bfd_elf64_tilegx_be_vec
+    targ_selvecs="bfd_elf64_tilegx_le_vec bfd_elf32_tilegx_be_vec bfd_elf32_tilegx_le_vec"
     ;;
 #endif
 
@@ -1551,7 +1577,12 @@ case "${targ}" in
   w65-*-*)
     targ_defvec=w65_vec
     ;;
-
+    
+  xgate-*-*)
+    targ_defvec=bfd_elf32_xgate_vec
+    targ_selvecs="bfd_elf32_xgate_vec"
+    ;;
+ 	
   xstormy16-*-elf)
     targ_defvec=bfd_elf32_xstormy16_vec
     ;;
diff --git a/bfd/config.in b/bfd/config.in
index 98157e1..20b619d 100644
--- a/bfd/config.in
+++ b/bfd/config.in
@@ -1,5 +1,12 @@
 /* config.in.  Generated from configure.in by autoheader.  */
 
+/* Check that config.h is #included before system headers
+    (this works only for glibc, but that should be enough).  */
+#if defined(__GLIBC__) && !defined(__CONFIG_H__)
+#  error config.h must be #included before system headers
+#endif
+#define __CONFIG_H__ 1
+
 /* Name of host specific core header file to include in elf.c. */
 #undef CORE_HEADER
 
@@ -245,6 +252,9 @@
 /* Define if <sys/procfs.h> has win32_pstatus_t. */
 #undef HAVE_WIN32_PSTATUS_T
 
+/* Define to 1 if you have the <windows.h> header file. */
+#undef HAVE_WINDOWS_H
+
 /* Define to 1 if you have the <zlib.h> header file. */
 #undef HAVE_ZLIB_H
 
diff --git a/bfd/configure b/bfd/configure
index c679417..75e580d 100755
--- a/bfd/configure
+++ b/bfd/configure
@@ -3988,7 +3988,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE=bfd
- VERSION=2.22.51
+ VERSION=2.22.52
 
 
 cat >>confdefs.h <<_ACEOF
@@ -12217,6 +12217,9 @@ fi
 ac_config_headers="$ac_config_headers config.h:config.in"
 
 
+# PR 14072
+
+
 if test -z "$target" ; then
     as_fn_error "Unrecognized target system type; please check config.sub." "$LINENO" 5
 fi
@@ -12316,7 +12319,7 @@ bfd_default_target_size=32
 
 # host stuff:
 
-ALL_LINGUAS="fr tr ja es sv da zh_CN ro rw vi fi id ru"
+ALL_LINGUAS="fr tr ja es sv da zh_CN ro rw vi fi id ru uk"
 # If we haven't got the data from the intl directory,
 # assume NLS is disabled.
 USE_NLS=no
@@ -13508,6 +13511,22 @@ fi
 
 fi
 
+
+for ac_header in windows.h dlfcn.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+eval as_val=\$$as_ac_Header
+   if test "x$as_val" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether string.h and strings.h may both be included" >&5
 $as_echo_n "checking whether string.h and strings.h may both be included... " >&6; }
 if test "${gcc_cv_header_string+set}" = set; then :
@@ -15184,11 +15203,12 @@ do
     bfd_elf32_bfinfdpic_vec)	tb="$tb elf32-bfin.lo elf32.lo $elf" ;;
     bfd_elf32_big_generic_vec) 	tb="$tb elf32-gen.lo elf32.lo $elf" ;;
     bfd_elf32_bigarc_vec)	tb="$tb elf32-arc.lo elf32.lo $elf" ;;
-    bfd_elf32_bigarm_vec)	tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
+    bfd_elf32_bigarm_vec)	tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
+    bfd_elf32_bigarm_nacl_vec)	tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     bfd_elf32_bigarm_symbian_vec)
-                                tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
+                                tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     bfd_elf32_bigarm_vxworks_vec)
-                                tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
+                                tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     bfd_elf32_bigmips_vec) 	tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
     bfd_elf32_bigmips_vxworks_vec)
 			 	tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
@@ -15209,11 +15229,11 @@ do
     bfd_elf32_hppa_nbsd_vec)	tb="$tb elf32-hppa.lo elf32.lo $elf" ;;
     bfd_elf32_hppa_vec)		tb="$tb elf32-hppa.lo elf32.lo $elf" ;;
     bfd_elf32_i370_vec)		tb="$tb elf32-i370.lo elf32.lo $elf" ;;
-    bfd_elf32_i386_sol2_vec)	tb="$tb elf32-i386.lo elf-ifunc.lo elf-vxworks.lo elf32.lo $elf" ;;
-    bfd_elf32_i386_freebsd_vec)	tb="$tb elf32-i386.lo elf-ifunc.lo elf-vxworks.lo elf32.lo $elf" ;;
-    bfd_elf32_i386_nacl_vec)	tb="$tb elf32-i386.lo elf-ifunc.lo elf-vxworks.lo elf32.lo $elf" ;;
-    bfd_elf32_i386_vxworks_vec)	tb="$tb elf32-i386.lo elf-ifunc.lo elf-vxworks.lo elf32.lo $elf" ;;
-    bfd_elf32_i386_vec)		tb="$tb elf32-i386.lo elf-ifunc.lo elf-vxworks.lo elf32.lo $elf" ;;
+    bfd_elf32_i386_sol2_vec)	tb="$tb elf32-i386.lo elf-ifunc.lo elf-nacl.lo elf-vxworks.lo elf32.lo $elf" ;;
+    bfd_elf32_i386_freebsd_vec)	tb="$tb elf32-i386.lo elf-ifunc.lo elf-nacl.lo elf-vxworks.lo elf32.lo $elf" ;;
+    bfd_elf32_i386_nacl_vec)	tb="$tb elf32-i386.lo elf-ifunc.lo elf-nacl.lo elf-vxworks.lo elf32.lo $elf" ;;
+    bfd_elf32_i386_vxworks_vec)	tb="$tb elf32-i386.lo elf-ifunc.lo elf-nacl.lo elf-vxworks.lo elf32.lo $elf" ;;
+    bfd_elf32_i386_vec)		tb="$tb elf32-i386.lo elf-ifunc.lo elf-nacl.lo elf-vxworks.lo elf32.lo $elf" ;;
     bfd_elf32_i860_little_vec)	tb="$tb elf32-i860.lo elf32.lo $elf" ;;
     bfd_elf32_i860_vec)		tb="$tb elf32-i860.lo elf32.lo $elf" ;;
     bfd_elf32_i960_vec)		tb="$tb elf32-i960.lo elf32.lo $elf" ;;
@@ -15226,10 +15246,11 @@ do
     bfd_elf32_little_generic_vec) tb="$tb elf32-gen.lo elf32.lo $elf" ;;
     bfd_elf32_littlearc_vec)	tb="$tb elf32-arc.lo elf32.lo $elf" ;;
     bfd_elf32_littlearm_symbian_vec)
-                                tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
+                                tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     bfd_elf32_littlearm_vxworks_vec)
-                                tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
-    bfd_elf32_littlearm_vec)	tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
+                                tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
+    bfd_elf32_littlearm_vec)	tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
+    bfd_elf32_littlearm_nacl_vec) tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     bfd_elf32_littlemips_vec) 	tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
     bfd_elf32_littlemips_vxworks_vec)
 			 	tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
@@ -15302,7 +15323,8 @@ do
     bfd_elf32_tic6x_linux_le_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
     bfd_elf32_tic6x_elf_be_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
     bfd_elf32_tic6x_elf_le_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
-    bfd_elf32_tilegx_vec)	tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;;
+    bfd_elf32_tilegx_be_vec)	tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;;
+    bfd_elf32_tilegx_le_vec)	tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;;
     bfd_elf32_tilepro_vec)	tb="$tb elf32-tilepro.lo elf32.lo $elf" ;;
     bfd_elf32_tradbigmips_vec | bfd_elf32_tradbigmips_freebsd_vec)
 				tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
@@ -15313,6 +15335,7 @@ do
     bfd_elf32_vax_vec)		tb="$tb elf32-vax.lo elf32.lo $elf" ;;
     bfd_elf32_xstormy16_vec)	tb="$tb elf32-xstormy16.lo elf32.lo $elf" ;;
     bfd_elf32_xc16x_vec)		tb="$tb elf32-xc16x.lo elf32.lo $elf" ;;
+    bfd_elf32_xgate_vec)  	tb="$tb elf32-xgate.lo elf32.lo $elf" ;;
     bfd_elf32_xtensa_le_vec)	tb="$tb xtensa-isa.lo xtensa-modules.lo elf32-xtensa.lo elf32.lo $elf" ;;
     bfd_elf32_xtensa_be_vec)	tb="$tb xtensa-isa.lo xtensa-modules.lo elf32-xtensa.lo elf32.lo $elf" ;;
     bfd_elf64_alpha_freebsd_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
@@ -15324,7 +15347,7 @@ do
     bfd_elf64_ia64_big_vec)	tb="$tb elf64-ia64.lo elfxx-ia64.lo elf64.lo $elf"; target_size=64 ;;
     bfd_elf64_ia64_hpux_big_vec) tb="$tb elf64-ia64.lo elfxx-ia64.lo elf64.lo $elf"; target_size=64 ;;
     bfd_elf64_ia64_little_vec)	tb="$tb elf64-ia64.lo elfxx-ia64.lo elf64.lo $elf"; target_size=64 ;;
-    bfd_elf64_ia64_vms_vec)	tb="$tb elf64-ia64.lo elfxx-ia64.lo  elf64.lo vms-lib.lo vms-misc.lo $elf"; target_size=64 ;;
+    bfd_elf64_ia64_vms_vec)	tb="$tb elf64-ia64-vms.lo elf64-ia64.lo elfxx-ia64.lo elf64.lo vms-lib.lo vms-misc.lo $elf"; target_size=64 ;;
     bfd_elf64_little_generic_vec) tb="$tb elf64-gen.lo elf64.lo $elf"; target_size=64 ;;
     bfd_elf64_littlemips_vec) 	tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
     bfd_elf64_mmix_vec) 	tb="$tb elf64-mmix.lo elf64.lo $elf" target_size=64 ;;
@@ -15341,19 +15364,22 @@ do
     bfd_elf64_sparc_vec)	tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;;
     bfd_elf64_sparc_freebsd_vec) tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;;
     bfd_elf64_sparc_sol2_vec) tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;;
-    bfd_elf64_tilegx_vec)	tb="$tb elf64-tilegx.lo elfxx-tilegx.lo elf64.lo $elf" ; target_size=64 ;;
+    bfd_elf64_tilegx_be_vec)	tb="$tb elf64-tilegx.lo elfxx-tilegx.lo elf64.lo $elf" ; target_size=64 ;;
+    bfd_elf64_tilegx_le_vec)	tb="$tb elf64-tilegx.lo elfxx-tilegx.lo elf64.lo $elf" ; target_size=64 ;;
     bfd_elf64_tradbigmips_vec | bfd_elf64_tradbigmips_freebsd_vec)
 				tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
     bfd_elf64_tradlittlemips_vec | bfd_elf64_tradlittlemips_freebsd_vec)
 				tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
-    bfd_elf64_x86_64_freebsd_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
-    bfd_elf64_x86_64_sol2_vec)  tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
-    bfd_elf64_x86_64_vec)	tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
-    bfd_elf32_x86_64_vec)	tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo elf32.lo $elf"; target_size=64 ;;
-    bfd_elf64_l1om_vec)		tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
-    bfd_elf64_l1om_freebsd_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
-    bfd_elf64_k1om_vec)		tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
-    bfd_elf64_k1om_freebsd_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
+    bfd_elf64_x86_64_freebsd_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
+    bfd_elf64_x86_64_nacl_vec)	tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
+    bfd_elf64_x86_64_sol2_vec)  tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
+    bfd_elf64_x86_64_vec)	tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
+    bfd_elf32_x86_64_vec)	tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo elf32.lo $elf"; target_size=64 ;;
+    bfd_elf32_x86_64_nacl_vec)	tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo elf32.lo $elf"; target_size=64 ;;
+    bfd_elf64_l1om_vec)		tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
+    bfd_elf64_l1om_freebsd_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
+    bfd_elf64_k1om_vec)		tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
+    bfd_elf64_k1om_freebsd_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
     bfd_mmo_vec)		tb="$tb mmo.lo" target_size=64 ;;
     bfd_powerpc_pe_vec)         tb="$tb pe-ppc.lo peigen.lo cofflink.lo" ;;
     bfd_powerpc_pei_vec)        tb="$tb pei-ppc.lo peigen.lo cofflink.lo" ;;
@@ -18748,4 +18774,3 @@ if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
 fi
 
-
diff --git a/bfd/configure.in b/bfd/configure.in
index 83376e5..5922961 100644
--- a/bfd/configure.in
+++ b/bfd/configure.in
@@ -8,7 +8,7 @@ AC_CONFIG_SRCDIR([libbfd.c])
 AC_CANONICAL_TARGET
 AC_ISC_POSIX
 
-AM_INIT_AUTOMAKE(bfd, 2.22.51)
+AM_INIT_AUTOMAKE(bfd, 2.22.52)
 
 dnl These must be called before LT_INIT, because it may want
 dnl to call AC_CHECK_PROG.
@@ -109,7 +109,7 @@ if test $want_elf_stt_common = true; then
   AC_DEFINE(USE_STT_COMMON, 1,
     [Define if we may generate symbols with ELF's STT_COMMON type])
 fi
-	 
+
 ACX_PKGVERSION([GNU Binutils])
 ACX_BUGURL([http://www.sourceware.org/bugzilla/])
 
@@ -117,6 +117,15 @@ AM_BINUTILS_WARNINGS
 
 AC_CONFIG_HEADERS(config.h:config.in)
 
+# PR 14072
+AH_VERBATIM([00_CONFIG_H_CHECK],
+[/* Check that config.h is #included before system headers
+    (this works only for glibc, but that should be enough).  */
+#if defined(__GLIBC__) && !defined(__CONFIG_H__)
+#  error config.h must be #included before system headers
+#endif
+#define __CONFIG_H__ 1])
+
 if test -z "$target" ; then
     AC_MSG_ERROR(Unrecognized target system type; please check config.sub.)
 fi
@@ -132,7 +141,7 @@ bfd_default_target_size=32
 
 # host stuff:
 
-ALL_LINGUAS="fr tr ja es sv da zh_CN ro rw vi fi id ru"
+ALL_LINGUAS="fr tr ja es sv da zh_CN ro rw vi fi id ru uk"
 ZW_GNU_GETTEXT_SISTER_DIR
 AM_PO_SUBDIRS
 
@@ -190,6 +199,9 @@ AC_CHECK_HEADERS(fcntl.h sys/file.h sys/time.h sys/stat.h)
 GCC_HEADER_STDINT(bfd_stdint.h)
 AC_HEADER_TIME
 AC_HEADER_DIRENT
+
+AC_CHECK_HEADERS(windows.h dlfcn.h)
+
 ACX_HEADER_STRING
 AC_CHECK_FUNCS(fcntl getpagesize setitimer sysconf fdopen getuid getgid fileno)
 AC_CHECK_FUNCS(strtoull)
@@ -683,18 +695,19 @@ do
     bfd_elf32_bfinfdpic_vec)	tb="$tb elf32-bfin.lo elf32.lo $elf" ;;
     bfd_elf32_big_generic_vec) 	tb="$tb elf32-gen.lo elf32.lo $elf" ;;
     bfd_elf32_bigarc_vec)	tb="$tb elf32-arc.lo elf32.lo $elf" ;;
-    bfd_elf32_bigarm_vec)	tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
-    bfd_elf32_bigarm_symbian_vec)	
-                                tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
-    bfd_elf32_bigarm_vxworks_vec)	
-                                tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
+    bfd_elf32_bigarm_vec)	tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
+    bfd_elf32_bigarm_nacl_vec)	tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
+    bfd_elf32_bigarm_symbian_vec)
+                                tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
+    bfd_elf32_bigarm_vxworks_vec)
+                                tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     bfd_elf32_bigmips_vec) 	tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
     bfd_elf32_bigmips_vxworks_vec)
 			 	tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
     bfd_elf32_cr16_vec)		tb="$tb elf32-cr16.lo elf32.lo $elf" ;;
     bfd_elf32_cr16c_vec)	tb="$tb elf32-cr16c.lo elf32.lo $elf" ;;
     bfd_elf32_cris_vec)		tb="$tb elf32-cris.lo elf32.lo $elf" ;;
-    bfd_elf32_crx_vec)          tb="$tb elf32-crx.lo elf32.lo $elf" ;;    
+    bfd_elf32_crx_vec)          tb="$tb elf32-crx.lo elf32.lo $elf" ;;
     bfd_elf32_d10v_vec)		tb="$tb elf32-d10v.lo elf32.lo $elf" ;;
     bfd_elf32_d30v_vec)		tb="$tb elf32-d30v.lo elf32.lo $elf" ;;
     bfd_elf32_dlx_big_vec)	tb="$tb elf32-dlx.lo elf32.lo $elf" ;;
@@ -708,11 +721,11 @@ do
     bfd_elf32_hppa_nbsd_vec)	tb="$tb elf32-hppa.lo elf32.lo $elf" ;;
     bfd_elf32_hppa_vec)		tb="$tb elf32-hppa.lo elf32.lo $elf" ;;
     bfd_elf32_i370_vec)		tb="$tb elf32-i370.lo elf32.lo $elf" ;;
-    bfd_elf32_i386_sol2_vec)	tb="$tb elf32-i386.lo elf-ifunc.lo elf-vxworks.lo elf32.lo $elf" ;;
-    bfd_elf32_i386_freebsd_vec)	tb="$tb elf32-i386.lo elf-ifunc.lo elf-vxworks.lo elf32.lo $elf" ;;
-    bfd_elf32_i386_nacl_vec)	tb="$tb elf32-i386.lo elf-ifunc.lo elf-vxworks.lo elf32.lo $elf" ;;
-    bfd_elf32_i386_vxworks_vec)	tb="$tb elf32-i386.lo elf-ifunc.lo elf-vxworks.lo elf32.lo $elf" ;;
-    bfd_elf32_i386_vec)		tb="$tb elf32-i386.lo elf-ifunc.lo elf-vxworks.lo elf32.lo $elf" ;;
+    bfd_elf32_i386_sol2_vec)	tb="$tb elf32-i386.lo elf-ifunc.lo elf-nacl.lo elf-vxworks.lo elf32.lo $elf" ;;
+    bfd_elf32_i386_freebsd_vec)	tb="$tb elf32-i386.lo elf-ifunc.lo elf-nacl.lo elf-vxworks.lo elf32.lo $elf" ;;
+    bfd_elf32_i386_nacl_vec)	tb="$tb elf32-i386.lo elf-ifunc.lo elf-nacl.lo elf-vxworks.lo elf32.lo $elf" ;;
+    bfd_elf32_i386_vxworks_vec)	tb="$tb elf32-i386.lo elf-ifunc.lo elf-nacl.lo elf-vxworks.lo elf32.lo $elf" ;;
+    bfd_elf32_i386_vec)		tb="$tb elf32-i386.lo elf-ifunc.lo elf-nacl.lo elf-vxworks.lo elf32.lo $elf" ;;
     bfd_elf32_i860_little_vec)	tb="$tb elf32-i860.lo elf32.lo $elf" ;;
     bfd_elf32_i860_vec)		tb="$tb elf32-i860.lo elf32.lo $elf" ;;
     bfd_elf32_i960_vec)		tb="$tb elf32-i960.lo elf32.lo $elf" ;;
@@ -725,10 +738,11 @@ do
     bfd_elf32_little_generic_vec) tb="$tb elf32-gen.lo elf32.lo $elf" ;;
     bfd_elf32_littlearc_vec)	tb="$tb elf32-arc.lo elf32.lo $elf" ;;
     bfd_elf32_littlearm_symbian_vec)
-                                tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
+                                tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     bfd_elf32_littlearm_vxworks_vec)
-                                tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
-    bfd_elf32_littlearm_vec)	tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
+                                tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
+    bfd_elf32_littlearm_vec)	tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
+    bfd_elf32_littlearm_nacl_vec) tb="$tb elf32-arm.lo elf32.lo elf-nacl.lo elf-vxworks.lo $elf" ;;
     bfd_elf32_littlemips_vec) 	tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
     bfd_elf32_littlemips_vxworks_vec)
 			 	tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
@@ -801,7 +815,8 @@ do
     bfd_elf32_tic6x_linux_le_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
     bfd_elf32_tic6x_elf_be_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
     bfd_elf32_tic6x_elf_le_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;;
-    bfd_elf32_tilegx_vec)	tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;;
+    bfd_elf32_tilegx_be_vec)	tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;;
+    bfd_elf32_tilegx_le_vec)	tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;;
     bfd_elf32_tilepro_vec)	tb="$tb elf32-tilepro.lo elf32.lo $elf" ;;
     bfd_elf32_tradbigmips_vec | bfd_elf32_tradbigmips_freebsd_vec)
 				tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
@@ -812,6 +827,7 @@ do
     bfd_elf32_vax_vec)		tb="$tb elf32-vax.lo elf32.lo $elf" ;;
     bfd_elf32_xstormy16_vec)	tb="$tb elf32-xstormy16.lo elf32.lo $elf" ;;
     bfd_elf32_xc16x_vec)		tb="$tb elf32-xc16x.lo elf32.lo $elf" ;;
+    bfd_elf32_xgate_vec)  	tb="$tb elf32-xgate.lo elf32.lo $elf" ;;
     bfd_elf32_xtensa_le_vec)	tb="$tb xtensa-isa.lo xtensa-modules.lo elf32-xtensa.lo elf32.lo $elf" ;;
     bfd_elf32_xtensa_be_vec)	tb="$tb xtensa-isa.lo xtensa-modules.lo elf32-xtensa.lo elf32.lo $elf" ;;
     bfd_elf64_alpha_freebsd_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
@@ -823,7 +839,7 @@ do
     bfd_elf64_ia64_big_vec)	tb="$tb elf64-ia64.lo elfxx-ia64.lo elf64.lo $elf"; target_size=64 ;;
     bfd_elf64_ia64_hpux_big_vec) tb="$tb elf64-ia64.lo elfxx-ia64.lo elf64.lo $elf"; target_size=64 ;;
     bfd_elf64_ia64_little_vec)	tb="$tb elf64-ia64.lo elfxx-ia64.lo elf64.lo $elf"; target_size=64 ;;
-    bfd_elf64_ia64_vms_vec)	tb="$tb elf64-ia64.lo elfxx-ia64.lo  elf64.lo vms-lib.lo vms-misc.lo $elf"; target_size=64 ;;
+    bfd_elf64_ia64_vms_vec)	tb="$tb elf64-ia64-vms.lo elf64-ia64.lo elfxx-ia64.lo elf64.lo vms-lib.lo vms-misc.lo $elf"; target_size=64 ;;    
     bfd_elf64_little_generic_vec) tb="$tb elf64-gen.lo elf64.lo $elf"; target_size=64 ;;
     bfd_elf64_littlemips_vec) 	tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
     bfd_elf64_mmix_vec) 	tb="$tb elf64-mmix.lo elf64.lo $elf" target_size=64 ;;
@@ -840,19 +856,22 @@ do
     bfd_elf64_sparc_vec)	tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;;
     bfd_elf64_sparc_freebsd_vec) tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;;
     bfd_elf64_sparc_sol2_vec) tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;;
-    bfd_elf64_tilegx_vec)	tb="$tb elf64-tilegx.lo elfxx-tilegx.lo elf64.lo $elf" ; target_size=64 ;;
+    bfd_elf64_tilegx_be_vec)	tb="$tb elf64-tilegx.lo elfxx-tilegx.lo elf64.lo $elf" ; target_size=64 ;;
+    bfd_elf64_tilegx_le_vec)	tb="$tb elf64-tilegx.lo elfxx-tilegx.lo elf64.lo $elf" ; target_size=64 ;;
     bfd_elf64_tradbigmips_vec | bfd_elf64_tradbigmips_freebsd_vec)
 				tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
     bfd_elf64_tradlittlemips_vec | bfd_elf64_tradlittlemips_freebsd_vec)
 				tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
-    bfd_elf64_x86_64_freebsd_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
-    bfd_elf64_x86_64_sol2_vec)  tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
-    bfd_elf64_x86_64_vec)	tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
-    bfd_elf32_x86_64_vec)	tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo elf32.lo $elf"; target_size=64 ;;
-    bfd_elf64_l1om_vec)		tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
-    bfd_elf64_l1om_freebsd_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
-    bfd_elf64_k1om_vec)		tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
-    bfd_elf64_k1om_freebsd_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
+    bfd_elf64_x86_64_freebsd_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
+    bfd_elf64_x86_64_nacl_vec)	tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
+    bfd_elf64_x86_64_sol2_vec)  tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
+    bfd_elf64_x86_64_vec)	tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
+    bfd_elf32_x86_64_vec)	tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo elf32.lo $elf"; target_size=64 ;;
+    bfd_elf32_x86_64_nacl_vec)	tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo elf32.lo $elf"; target_size=64 ;;
+    bfd_elf64_l1om_vec)		tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
+    bfd_elf64_l1om_freebsd_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
+    bfd_elf64_k1om_vec)		tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
+    bfd_elf64_k1om_freebsd_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;;
     bfd_mmo_vec)		tb="$tb mmo.lo" target_size=64 ;;
     bfd_powerpc_pe_vec)         tb="$tb pe-ppc.lo peigen.lo cofflink.lo" ;;
     bfd_powerpc_pei_vec)        tb="$tb pei-ppc.lo peigen.lo cofflink.lo" ;;
@@ -1148,4 +1167,3 @@ AC_SUBST(htmldir)
 AC_SUBST(pdfdir)
 
 AC_OUTPUT
-
diff --git a/bfd/cpu-alpha.c b/bfd/cpu-alpha.c
index 9456b65..902eb8d 100644
--- a/bfd/cpu-alpha.c
+++ b/bfd/cpu-alpha.c
@@ -36,6 +36,7 @@
     DEFAULT,						\
     bfd_default_compatible, 				\
     bfd_default_scan,					\
+    bfd_arch_default_fill,				\
     NEXT,						\
   }
 
diff --git a/bfd/cpu-arc.c b/bfd/cpu-arc.c
index 820c948..02b4d98 100644
--- a/bfd/cpu-arc.c
+++ b/bfd/cpu-arc.c
@@ -1,5 +1,5 @@
 /* BFD support for the ARC processor
-   Copyright 1994, 1995, 1997, 2001, 2002, 2005, 2007
+   Copyright 1994, 1995, 1997, 2001, 2002, 2005, 2007, 2012
    Free Software Foundation, Inc.
    Contributed by Doug Evans (dje at cygnus.com).
 
@@ -37,6 +37,7 @@
     default_p,				\
     bfd_default_compatible,		\
     bfd_default_scan,			\
+    bfd_arch_default_fill,		\
     next,				\
   }
 
@@ -57,11 +58,10 @@ const bfd_arch_info_type bfd_arc_arch =
 /* Given cpu type NAME, return its bfd_mach_arc_xxx value.
    Returns -1 if not found.  */
 
-int arc_get_mach PARAMS ((char *));
+int arc_get_mach (char *);
 
 int
-arc_get_mach (name)
-     char *name;
+arc_get_mach (char *name)
 {
   const bfd_arch_info_type *p;
 
diff --git a/bfd/cpu-arm.c b/bfd/cpu-arm.c
index 2238720..21a8d0f 100644
--- a/bfd/cpu-arm.c
+++ b/bfd/cpu-arm.c
@@ -124,7 +124,8 @@ scan (const struct bfd_arch_info *info, const char *string)
 }
 
 #define N(number, print, default, next)  \
-{  32, 32, 8, bfd_arch_arm, number, "arm", print, 4, default, compatible, scan, next }
+{  32, 32, 8, bfd_arch_arm, number, "arm", print, 4, default, compatible, \
+   scan, bfd_arch_default_fill, next }
 
 static const bfd_arch_info_type arch_info_struct[] =
 {
diff --git a/bfd/cpu-avr.c b/bfd/cpu-avr.c
index 07ba6dc..37ccee1 100644
--- a/bfd/cpu-avr.c
+++ b/bfd/cpu-avr.c
@@ -96,6 +96,7 @@ compatible (const bfd_arch_info_type * a,
   default,			/* Is this the default ?  */	\
   compatible,							\
   bfd_default_scan,						\
+  bfd_arch_default_fill,					\
   next								\
 }
 
diff --git a/bfd/cpu-bfin.c b/bfd/cpu-bfin.c
index 37e314b..ec515ea 100644
--- a/bfd/cpu-bfin.c
+++ b/bfd/cpu-bfin.c
@@ -35,6 +35,7 @@ const bfd_arch_info_type bfd_bfin_arch =
     4,                	/* Section align power.  */
     TRUE,             	/* The one and only.  */
     bfd_default_compatible, 
-    bfd_default_scan ,
+    bfd_default_scan,
+    bfd_arch_default_fill,
     0,
   };
diff --git a/bfd/cpu-cr16.c b/bfd/cpu-cr16.c
index 6c77738..bcaaf60 100644
--- a/bfd/cpu-cr16.c
+++ b/bfd/cpu-cr16.c
@@ -35,6 +35,7 @@ const bfd_arch_info_type bfd_cr16_arch =
     1,                /* Unsigned int section alignment power.  */
     TRUE,             /* The one and only.  */
     bfd_default_compatible, 
-    bfd_default_scan ,
+    bfd_default_scan,
+    bfd_arch_default_fill,
     0,
   };
diff --git a/bfd/cpu-cr16c.c b/bfd/cpu-cr16c.c
index e8ee1db..7653f2c 100644
--- a/bfd/cpu-cr16c.c
+++ b/bfd/cpu-cr16c.c
@@ -34,6 +34,7 @@ const bfd_arch_info_type bfd_cr16c_arch =
     1,
     TRUE, 	/* The one and only.  */
     bfd_default_compatible, 
-    bfd_default_scan ,
+    bfd_default_scan,
+    bfd_arch_default_fill,
     0,
   };
diff --git a/bfd/cpu-cris.c b/bfd/cpu-cris.c
index c77e8f5..045425d 100644
--- a/bfd/cpu-cris.c
+++ b/bfd/cpu-cris.c
@@ -1,5 +1,5 @@
 /* BFD support for the Axis CRIS architecture.
-   Copyright 2000, 2002, 2004, 2005, 2007
+   Copyright 2000, 2002, 2004, 2005, 2007, 2012
    Free Software Foundation, Inc.
    Contributed by Axis Communications AB.
    Written by Hans-Peter Nilsson.
@@ -30,12 +30,11 @@
    there's a compatible subset for which we provide an arch_info.  */
 
 static const bfd_arch_info_type * get_compatible
-  PARAMS ((const bfd_arch_info_type *, const bfd_arch_info_type *));
+  (const bfd_arch_info_type *, const bfd_arch_info_type *);
 
 static const bfd_arch_info_type *
-get_compatible (a,b)
-     const bfd_arch_info_type *a;
-     const bfd_arch_info_type *b;
+get_compatible (const bfd_arch_info_type *a,
+		const bfd_arch_info_type *b)
 {
   /* Arches must match.  */
   if (a->arch != b->arch)
@@ -69,7 +68,7 @@ get_compatible (a,b)
 
 #define N(NUMBER, PRINT, NEXT)  \
  { 32, 32, 8, bfd_arch_cris, NUMBER, "cris", PRINT, 1, FALSE, \
-   get_compatible, bfd_default_scan, NEXT }
+   get_compatible, bfd_default_scan, bfd_arch_default_fill, NEXT }
 
 static const bfd_arch_info_type bfd_cris_arch_compat_v10_v32 =
  N (bfd_mach_cris_v10_v32, "cris:common_v10_v32", NULL);
@@ -98,6 +97,7 @@ const bfd_arch_info_type bfd_cris_arch =
 				   bfd_arch_info_type.  */
   bfd_default_scan,		/* Check if a bfd_arch_info_type is a
 				   match.  */
+  bfd_arch_default_fill,	/* Default fill.  */
   &bfd_cris_arch_v32		/* Pointer to next bfd_arch_info_type in
 				   the same family.  */
 };
diff --git a/bfd/cpu-crx.c b/bfd/cpu-crx.c
index 3201c3c..8edd2ca 100644
--- a/bfd/cpu-crx.c
+++ b/bfd/cpu-crx.c
@@ -35,6 +35,7 @@ const bfd_arch_info_type bfd_crx_arch =
     1,      	/* Unsigned int section alignment power.  */
     TRUE, 	/* The one and only.  */
     bfd_default_compatible, 
-    bfd_default_scan ,
+    bfd_default_scan,
+    bfd_arch_default_fill,
     0,
   };
diff --git a/bfd/cpu-d10v.c b/bfd/cpu-d10v.c
index b161115..7bc208e 100644
--- a/bfd/cpu-d10v.c
+++ b/bfd/cpu-d10v.c
@@ -37,6 +37,7 @@ static const bfd_arch_info_type d10v_ts3_info =
   FALSE,
   bfd_default_compatible,
   bfd_default_scan,
+  bfd_arch_default_fill,
   0,
 };
 
@@ -53,6 +54,7 @@ static const bfd_arch_info_type d10v_ts2_info =
   FALSE,
   bfd_default_compatible,
   bfd_default_scan,
+  bfd_arch_default_fill,
   & d10v_ts3_info,
 };
 
@@ -69,5 +71,6 @@ const bfd_arch_info_type bfd_d10v_arch =
   TRUE,
   bfd_default_compatible,
   bfd_default_scan,
+  bfd_arch_default_fill,
   & d10v_ts2_info,
 };
diff --git a/bfd/cpu-d30v.c b/bfd/cpu-d30v.c
index d528e9b..69515eb 100644
--- a/bfd/cpu-d30v.c
+++ b/bfd/cpu-d30v.c
@@ -36,5 +36,6 @@ const bfd_arch_info_type bfd_d30v_arch =
     TRUE,
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     0,
 };
diff --git a/bfd/cpu-dlx.c b/bfd/cpu-dlx.c
index fda48dc..2c17849 100644
--- a/bfd/cpu-dlx.c
+++ b/bfd/cpu-dlx.c
@@ -35,6 +35,7 @@ const bfd_arch_info_type bfd_dlx_arch =
     4,
     TRUE, /* The one and only.  */
     bfd_default_compatible,
-    bfd_default_scan ,
+    bfd_default_scan,
+    bfd_arch_default_fill,
     0,
 };
diff --git a/bfd/cpu-epiphany.c b/bfd/cpu-epiphany.c
index 13427c1..9cf723e 100644
--- a/bfd/cpu-epiphany.c
+++ b/bfd/cpu-epiphany.c
@@ -36,6 +36,7 @@ const bfd_arch_info_type bfd_epiphany16_arch =
   FALSE,			/* The default ?  */
   bfd_default_compatible,	/* Architecture comparison fn.  */
   bfd_default_scan,		/* String to architecture convert fn.  */
+  bfd_arch_default_fill,	/* Default fill.  */
   NULL				/* Next in list.  */
 };
 
@@ -52,5 +53,6 @@ const bfd_arch_info_type bfd_epiphany_arch =
   TRUE,				/* The default ?  */
   bfd_default_compatible,	/* Architecture comparison fn.  */
   bfd_default_scan,		/* String to architecture convert fn.  */
+  bfd_arch_default_fill,	/* Default fill.  */
   & bfd_epiphany16_arch	/* Next in list.  */
 };
diff --git a/bfd/cpu-fr30.c b/bfd/cpu-fr30.c
index b60e43e..dc2e5fa 100644
--- a/bfd/cpu-fr30.c
+++ b/bfd/cpu-fr30.c
@@ -35,5 +35,6 @@ const bfd_arch_info_type bfd_fr30_arch =
   TRUE,				/* the default ? */
   bfd_default_compatible,	/* architecture comparison fn */
   bfd_default_scan,		/* string to architecture convert fn */
+  bfd_arch_default_fill,	/* Default fill.  */
   NULL				/* next in list */
 };
diff --git a/bfd/cpu-frv.c b/bfd/cpu-frv.c
index fd2aedb..ac4d898 100644
--- a/bfd/cpu-frv.c
+++ b/bfd/cpu-frv.c
@@ -35,6 +35,7 @@
   DEFAULT,			/* is this the default? */		\
   bfd_default_compatible,	/* architecture comparison fn */	\
   bfd_default_scan,		/* string to architecture convert fn */	\
+  bfd_arch_default_fill,	/* Default fill.  */			\
   NEXT				/* next in list */			\
 }
 
diff --git a/bfd/cpu-h8300.c b/bfd/cpu-h8300.c
index 0fd77d6..e667a03 100644
--- a/bfd/cpu-h8300.c
+++ b/bfd/cpu-h8300.c
@@ -127,6 +127,7 @@ static const bfd_arch_info_type h8300sxn_info_struct =
   FALSE,			/* the default machine */
   compatible,
   h8300_scan,
+  bfd_arch_default_fill,
   0
 };
 
@@ -143,6 +144,7 @@ static const bfd_arch_info_type h8300sx_info_struct =
   FALSE,			/* the default machine */
   compatible,
   h8300_scan,
+  bfd_arch_default_fill,
   &h8300sxn_info_struct
 };
 
@@ -159,6 +161,7 @@ static const bfd_arch_info_type h8300sn_info_struct =
   FALSE,			/* The default machine.  */
   compatible,
   h8300_scan,
+  bfd_arch_default_fill,
   &h8300sx_info_struct
 };
 
@@ -175,6 +178,7 @@ static const bfd_arch_info_type h8300hn_info_struct =
   FALSE,			/* The default machine.  */
   compatible,
   h8300_scan,
+  bfd_arch_default_fill,
   &h8300sn_info_struct
 };
 
@@ -191,6 +195,7 @@ static const bfd_arch_info_type h8300s_info_struct =
   FALSE,			/* The default machine.  */
   compatible,
   h8300_scan,
+  bfd_arch_default_fill,
   & h8300hn_info_struct
 };
 
@@ -207,6 +212,7 @@ static const bfd_arch_info_type h8300h_info_struct =
   FALSE,			/* The default machine.  */
   compatible,
   h8300_scan,
+  bfd_arch_default_fill,
   &h8300s_info_struct
 };
 
@@ -223,6 +229,7 @@ const bfd_arch_info_type bfd_h8300_arch =
   TRUE,				/* The default machine.  */
   compatible,
   h8300_scan,
+  bfd_arch_default_fill,
   &h8300h_info_struct
 };
 
diff --git a/bfd/cpu-h8500.c b/bfd/cpu-h8500.c
index 362d369..1312831 100644
--- a/bfd/cpu-h8500.c
+++ b/bfd/cpu-h8500.c
@@ -1,5 +1,5 @@
 /* BFD library support routines for the H8/500 architecture.
-   Copyright 1993, 1995, 1999, 2000, 2001, 2002, 2003, 2005, 2007
+   Copyright 1993, 1995, 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2012
    Free Software Foundation, Inc.
    Hacked by Steve Chamberlain of Cygnus Support.
 
@@ -25,12 +25,11 @@
 #include "libbfd.h"
 
 static bfd_boolean scan_mach
-  PARAMS ((const struct bfd_arch_info *, const char *));
+  (const struct bfd_arch_info *, const char *);
 
 static bfd_boolean
-scan_mach (info, string)
-     const struct bfd_arch_info *info ATTRIBUTE_UNUSED;
-     const char *string;
+scan_mach (const struct bfd_arch_info *info ATTRIBUTE_UNUSED,
+	   const char *string)
 {
   if (strcmp (string,"h8/500") == 0)
     return TRUE;
@@ -56,5 +55,6 @@ const bfd_arch_info_type bfd_h8500_arch =
   TRUE,				/* the default machine */
   bfd_default_compatible,
   scan_mach,
+  bfd_arch_default_fill,
   0,
 };
diff --git a/bfd/cpu-hppa.c b/bfd/cpu-hppa.c
index 034e321..885a11a 100644
--- a/bfd/cpu-hppa.c
+++ b/bfd/cpu-hppa.c
@@ -35,7 +35,8 @@ static const bfd_arch_info_type bfd_hppa10_arch =
   3,
   TRUE,				/* Unless we use 1.1 specific features */
   bfd_default_compatible,
-  bfd_default_scan ,
+  bfd_default_scan,
+  bfd_arch_default_fill,
   0,
 };
 
@@ -52,7 +53,8 @@ static const bfd_arch_info_type bfd_hppa20_arch =
   3,
   FALSE,			/* Unless we use 1.1 specific features */
   bfd_default_compatible,
-  bfd_default_scan ,
+  bfd_default_scan,
+  bfd_arch_default_fill,
   &bfd_hppa10_arch,
 };
 
@@ -69,7 +71,8 @@ static const bfd_arch_info_type bfd_hppa20w_arch =
   3,
   FALSE,			/* Unless we use 1.1 specific features */
   bfd_default_compatible,
-  bfd_default_scan ,
+  bfd_default_scan,
+  bfd_arch_default_fill,
   &bfd_hppa20_arch,
 };
 
@@ -85,6 +88,7 @@ const bfd_arch_info_type bfd_hppa_arch =
   3,
   FALSE,			/* 1.1 specific features used */
   bfd_default_compatible,
-  bfd_default_scan ,
+  bfd_default_scan,
+  bfd_arch_default_fill,
   &bfd_hppa20w_arch,
 };
diff --git a/bfd/cpu-i370.c b/bfd/cpu-i370.c
index d12b9ae..99daf88 100644
--- a/bfd/cpu-i370.c
+++ b/bfd/cpu-i370.c
@@ -40,6 +40,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE, 	/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &arch_info_struct[1]
   },
   {
@@ -54,6 +55,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE, 	/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     0
   },
 };
@@ -71,5 +73,6 @@ const bfd_arch_info_type bfd_i370_arch =
   TRUE, 	/* The default.  */
   bfd_default_compatible,
   bfd_default_scan,
+  bfd_arch_default_fill,
   & arch_info_struct[0]
 };
diff --git a/bfd/cpu-i386.c b/bfd/cpu-i386.c
index f98c0e5..4cb59ed 100644
--- a/bfd/cpu-i386.c
+++ b/bfd/cpu-i386.c
@@ -23,6 +23,10 @@
 #include "sysdep.h"
 #include "bfd.h"
 #include "libbfd.h"
+#include "libiberty.h"
+
+extern void * bfd_arch_i386_short_nop_fill (bfd_size_type, bfd_boolean,
+					    bfd_boolean);
 
 static const bfd_arch_info_type *
 bfd_i386_compatible (const bfd_arch_info_type *a,
@@ -38,6 +42,83 @@ bfd_i386_compatible (const bfd_arch_info_type *a,
   return compat;
 }
 
+/* Fill the buffer with zero or nop instruction if CODE is TRUE.  Use
+   multi byte nop instructions if LONG_NOP is TRUE.  */
+
+static void *
+bfd_arch_i386_fill (bfd_size_type count, bfd_boolean code,
+		    bfd_boolean long_nop)
+{
+  /* nop */
+  static const char nop_1[] = { 0x90 };	
+  /* xchg %ax,%ax */
+  static const char nop_2[] = { 0x66, 0x90 };
+  /* nopl (%[re]ax) */
+  static const char nop_3[] = { 0x0f, 0x1f, 0x00 };
+  /* nopl 0(%[re]ax) */
+  static const char nop_4[] = { 0x0f, 0x1f, 0x40, 0x00 };
+  /* nopl 0(%[re]ax,%[re]ax,1) */
+  static const char nop_5[] = { 0x0f, 0x1f, 0x44, 0x00, 0x00 };
+  /* nopw 0(%[re]ax,%[re]ax,1) */
+  static const char nop_6[] = { 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00 };
+  /* nopl 0L(%[re]ax) */
+  static const char nop_7[] = { 0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00 };
+  /* nopl 0L(%[re]ax,%[re]ax,1) */
+  static const char nop_8[] =
+    { 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00};
+  /* nopw 0L(%[re]ax,%[re]ax,1) */
+  static const char nop_9[] =
+    { 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00 };
+  /* nopw %cs:0L(%[re]ax,%[re]ax,1) */
+  static const char nop_10[] =
+    { 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00 };
+  static const char *const nops[] =
+    { nop_1, nop_2, nop_3, nop_4, nop_5,
+      nop_6, nop_7, nop_8, nop_9, nop_10 };
+  bfd_size_type nop_size = long_nop ? ARRAY_SIZE (nops) : 2;
+
+  void *fill = bfd_malloc (count);
+  if (fill == NULL)
+    return fill;
+
+  if (code)
+    {
+      bfd_byte *p = fill;
+      while (count >= nop_size)
+	{
+	  memcpy (p, nops[nop_size - 1], nop_size);
+	  p += nop_size;
+	  count -= nop_size;
+	}
+      if (count != 0)
+	memcpy (p, nops[count - 1], count);
+    }
+  else
+    memset (fill, 0, count);
+
+  return fill;
+}
+
+/* Fill the buffer with zero or short nop instruction if CODE is TRUE.  */
+
+void *
+bfd_arch_i386_short_nop_fill (bfd_size_type count,
+			      bfd_boolean is_bigendian ATTRIBUTE_UNUSED,
+			      bfd_boolean code)
+{
+  return bfd_arch_i386_fill (count, code, FALSE);
+}
+
+/* Fill the buffer with zero or long nop instruction if CODE is TRUE.  */
+
+static void *
+bfd_arch_i386_long_nop_fill (bfd_size_type count,
+			     bfd_boolean is_bigendian ATTRIBUTE_UNUSED,
+			     bfd_boolean code)
+{
+  return bfd_arch_i386_fill (count, code, TRUE);
+}
+
 static const bfd_arch_info_type bfd_x64_32_arch_intel_syntax =
 {
   64, /* 64 bits in a word */
@@ -51,6 +132,7 @@ static const bfd_arch_info_type bfd_x64_32_arch_intel_syntax =
   FALSE,
   bfd_i386_compatible,
   bfd_default_scan,
+  bfd_arch_i386_long_nop_fill,
   0
 };
 
@@ -67,6 +149,7 @@ static const bfd_arch_info_type bfd_x86_64_arch_intel_syntax =
   FALSE,
   bfd_i386_compatible,
   bfd_default_scan,
+  bfd_arch_i386_long_nop_fill,
   &bfd_x64_32_arch_intel_syntax,
 };
 
@@ -83,6 +166,7 @@ static const bfd_arch_info_type bfd_i386_arch_intel_syntax =
   TRUE,
   bfd_i386_compatible,
   bfd_default_scan,
+  bfd_arch_i386_short_nop_fill,
   &bfd_x86_64_arch_intel_syntax
 };
 
@@ -99,6 +183,7 @@ static const bfd_arch_info_type i8086_arch =
   FALSE,
   bfd_i386_compatible,
   bfd_default_scan,
+  bfd_arch_i386_short_nop_fill,
   &bfd_i386_arch_intel_syntax
 };
 
@@ -115,6 +200,7 @@ static const bfd_arch_info_type bfd_x64_32_arch =
   FALSE,
   bfd_i386_compatible,
   bfd_default_scan,
+  bfd_arch_i386_long_nop_fill,
   &i8086_arch
 };
 
@@ -131,6 +217,7 @@ static const bfd_arch_info_type bfd_x86_64_arch =
   FALSE,
   bfd_i386_compatible,
   bfd_default_scan,
+  bfd_arch_i386_long_nop_fill,
   &bfd_x64_32_arch
 };
 
@@ -147,5 +234,6 @@ const bfd_arch_info_type bfd_i386_arch =
   TRUE,
   bfd_i386_compatible,
   bfd_default_scan,
+  bfd_arch_i386_short_nop_fill,
   &bfd_x86_64_arch
 };
diff --git a/bfd/cpu-i860.c b/bfd/cpu-i860.c
index ae9ebcd..77c5e84 100644
--- a/bfd/cpu-i860.c
+++ b/bfd/cpu-i860.c
@@ -38,5 +38,6 @@ const bfd_arch_info_type bfd_i860_arch =
     TRUE,			/* Is this the default architecture? */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     0,				/* Next in list */
   };
diff --git a/bfd/cpu-i960.c b/bfd/cpu-i960.c
index c7d9231..9c4a974 100644
--- a/bfd/cpu-i960.c
+++ b/bfd/cpu-i960.c
@@ -1,6 +1,6 @@
 /* BFD library support routines for the i960 architecture.
    Copyright 1990, 1991, 1993, 1994, 1996, 1999, 2000, 2001, 2002, 2005, 2006,
-   2007 Free Software Foundation, Inc.
+   2007, 2012 Free Software Foundation, Inc.
    Hacked by Steve Chamberlain of Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -24,19 +24,13 @@
 #include "bfd.h"
 #include "libbfd.h"
 
-static bfd_boolean scan_960_mach
-  PARAMS ((const bfd_arch_info_type *, const char *));
-static const bfd_arch_info_type *compatible
-  PARAMS ((const bfd_arch_info_type *, const bfd_arch_info_type *));
-
 /* This routine is provided a string, and tries to work out if it
    could possibly refer to the i960 machine pointed at in the
    info_struct pointer */
 
 static bfd_boolean
-scan_960_mach (ap, string)
-     const bfd_arch_info_type *ap;
-     const char *string;
+scan_960_mach (const bfd_arch_info_type *ap,
+	       const char *string)
 {
   unsigned long machine;
   int fail_because_not_80960 = FALSE;
@@ -117,9 +111,8 @@ scan_960_mach (ap, string)
    to its info structure */
 
 static const bfd_arch_info_type *
-compatible (a,b)
-     const bfd_arch_info_type *a;
-     const bfd_arch_info_type *b;
+compatible (const bfd_arch_info_type *a,
+	    const bfd_arch_info_type *b)
 {
 
   /* The i960 has distinct subspecies which may not interbreed:
@@ -156,17 +149,14 @@ compatible (a,b)
     };
 
   if (a->arch != b->arch || matrix[a->mach][b->mach] == ERROR)
-    {
     return NULL;
-    }
-  else
-    {
-    return (a->mach  ==  matrix[a->mach][b->mach]) ?  a : b;
-    }
+
+  return (a->mach  ==  matrix[a->mach][b->mach]) ?  a : b;
 }
 
 #define N(a,b,d,n) \
-{ 32, 32, 8,bfd_arch_i960,a,"i960",b,3,d,compatible,scan_960_mach,n,}
+{ 32, 32, 8,bfd_arch_i960,a,"i960",b,3,d,compatible,scan_960_mach, \
+  bfd_arch_default_fill, n,}
 
 static const bfd_arch_info_type arch_info_struct[] =
 {
diff --git a/bfd/cpu-ia64.c b/bfd/cpu-ia64.c
index c97de1a..4ea37c7 100644
--- a/bfd/cpu-ia64.c
+++ b/bfd/cpu-ia64.c
@@ -35,7 +35,8 @@ const bfd_arch_info_type bfd_ia64_elf32_arch =
     3,	/* log2 of section alignment */
     TRUE, /* the one and only */
     bfd_default_compatible,
-    bfd_default_scan ,
+    bfd_default_scan,
+    bfd_arch_default_fill,
     0,
   };
 
@@ -51,7 +52,8 @@ const bfd_arch_info_type bfd_ia64_arch =
     3,	/* log2 of section alignment */
     TRUE, /* the one and only */
     bfd_default_compatible,
-    bfd_default_scan ,
+    bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_ia64_elf32_arch,
   };
 
diff --git a/bfd/cpu-ip2k.c b/bfd/cpu-ip2k.c
index 0b959bd..d8eaf3c 100644
--- a/bfd/cpu-ip2k.c
+++ b/bfd/cpu-ip2k.c
@@ -35,6 +35,7 @@ const bfd_arch_info_type bfd_ip2k_nonext_arch =
   FALSE,		        /* The default ?  */
   bfd_default_compatible,	/* Architecture comparison fn.  */
   bfd_default_scan,		/* String to architecture convert fn.  */
+  bfd_arch_default_fill,	/* Default fill.  */
   NULL				/* Next in list.  */
 };
 
@@ -51,5 +52,6 @@ const bfd_arch_info_type bfd_ip2k_arch =
   TRUE,				/* The default ?  */
   bfd_default_compatible,	/* Architecture comparison fn.  */
   bfd_default_scan,		/* String to architecture convert fn.  */
+  bfd_arch_default_fill,	/* Default fill.  */
   & bfd_ip2k_nonext_arch	/* Next in list.  */
 };
diff --git a/bfd/cpu-iq2000.c b/bfd/cpu-iq2000.c
index 72d8363..648380e 100644
--- a/bfd/cpu-iq2000.c
+++ b/bfd/cpu-iq2000.c
@@ -36,6 +36,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* the default ? */
     bfd_default_compatible,	/* architecture comparison fn */
     bfd_default_scan,		/* string to architecture convert fn */
+    bfd_arch_default_fill,	/* Default fill.  */
     NULL			/* next in list */
   }
 };
@@ -53,5 +54,6 @@ const bfd_arch_info_type bfd_iq2000_arch =
   TRUE,				/* the default ? */
   bfd_default_compatible,	/* architecture comparison fn */
   bfd_default_scan,		/* string to architecture convert fn */
+  bfd_arch_default_fill,	/* Default fill.  */
   &arch_info_struct[0],		/* next in list */
 };
diff --git a/bfd/cpu-k1om.c b/bfd/cpu-k1om.c
index fa030ae..54b6e58 100644
--- a/bfd/cpu-k1om.c
+++ b/bfd/cpu-k1om.c
@@ -23,6 +23,9 @@
 #include "bfd.h"
 #include "libbfd.h"
 
+extern void * bfd_arch_i386_short_nop_fill (bfd_size_type, bfd_boolean,
+					    bfd_boolean);
+
 static const bfd_arch_info_type bfd_k1om_arch_intel_syntax =
 {
   64, /* 64 bits in a word */
@@ -36,6 +39,7 @@ static const bfd_arch_info_type bfd_k1om_arch_intel_syntax =
   TRUE,
   bfd_default_compatible,
   bfd_default_scan,
+  bfd_arch_i386_short_nop_fill,
   0
 };
 
@@ -52,5 +56,6 @@ const bfd_arch_info_type bfd_k1om_arch =
   TRUE,
   bfd_default_compatible,
   bfd_default_scan,
+  bfd_arch_i386_short_nop_fill,
   &bfd_k1om_arch_intel_syntax
 };
diff --git a/bfd/cpu-l1om.c b/bfd/cpu-l1om.c
index c1057c4..46ac3a0 100644
--- a/bfd/cpu-l1om.c
+++ b/bfd/cpu-l1om.c
@@ -23,6 +23,9 @@
 #include "bfd.h"
 #include "libbfd.h"
 
+extern void * bfd_arch_i386_short_nop_fill (bfd_size_type, bfd_boolean,
+					    bfd_boolean);
+
 static const bfd_arch_info_type bfd_l1om_arch_intel_syntax =
 {
   64, /* 64 bits in a word */
@@ -36,6 +39,7 @@ static const bfd_arch_info_type bfd_l1om_arch_intel_syntax =
   TRUE,
   bfd_default_compatible,
   bfd_default_scan,
+  bfd_arch_i386_short_nop_fill,
   0
 };
 
@@ -52,5 +56,6 @@ const bfd_arch_info_type bfd_l1om_arch =
   TRUE,
   bfd_default_compatible,
   bfd_default_scan,
+  bfd_arch_i386_short_nop_fill,
   &bfd_l1om_arch_intel_syntax
 };
diff --git a/bfd/cpu-lm32.c b/bfd/cpu-lm32.c
index 227612f..5222a91 100644
--- a/bfd/cpu-lm32.c
+++ b/bfd/cpu-lm32.c
@@ -1,5 +1,5 @@
 /* BFD support for the Lattice Mico32 architecture.
-   Copyright 2008 Free Software Foundation, Inc.
+   Copyright 2008, 2012 Free Software Foundation, Inc.
    Contributed by Jon Beniston <jon at beniston.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include "bfd.h"
 #include "sysdep.h"
+#include "bfd.h"
 #include "libbfd.h"
 
 const bfd_arch_info_type bfd_lm32_arch = 
@@ -36,6 +36,7 @@ const bfd_arch_info_type bfd_lm32_arch =
     TRUE,                         /* Is this the default machine for the target.  */
     bfd_default_compatible,       /* Function callback to test if two files have compatible machines.  */
     bfd_default_scan,
+    bfd_arch_default_fill,
     NULL                          /* Next.  */
 };
 
diff --git a/bfd/cpu-m10200.c b/bfd/cpu-m10200.c
index 218891d..f42a5ea 100644
--- a/bfd/cpu-m10200.c
+++ b/bfd/cpu-m10200.c
@@ -34,6 +34,7 @@ const bfd_arch_info_type bfd_mn10200_arch =
     2,
     TRUE, /* the one and only */
     bfd_default_compatible,
-    bfd_default_scan ,
+    bfd_default_scan,
+    bfd_arch_default_fill,
     0,
   };
diff --git a/bfd/cpu-m10300.c b/bfd/cpu-m10300.c
index 7f89665..6fd8c67 100644
--- a/bfd/cpu-m10300.c
+++ b/bfd/cpu-m10300.c
@@ -36,6 +36,7 @@ const bfd_arch_info_type bfd_am33_2_arch =
     FALSE,
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     0,
   };
 
@@ -52,6 +53,7 @@ const bfd_arch_info_type bfd_am33_arch =
     FALSE,
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_am33_2_arch,
   };
 
@@ -68,5 +70,6 @@ const bfd_arch_info_type bfd_mn10300_arch =
     TRUE, /* the one and only */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_am33_arch,
   };
diff --git a/bfd/cpu-m32c.c b/bfd/cpu-m32c.c
index d2f9cb1..9c26938 100644
--- a/bfd/cpu-m32c.c
+++ b/bfd/cpu-m32c.c
@@ -49,6 +49,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* the default ? */
     bfd_default_compatible,	/* architecture comparison fn */
     m32c_scan,			/* string to architecture convert fn */
+    bfd_arch_default_fill,	/* Default fill.  */
     NULL			/* next in list */
   },
 };
@@ -66,5 +67,6 @@ const bfd_arch_info_type bfd_m32c_arch =
   TRUE,				/* The default ?  */
   bfd_default_compatible,	/* Architecture comparison fn.  */
   m32c_scan,			/* String to architecture convert fn.  */
+  bfd_arch_default_fill,	/* Default fill.  */
   &arch_info_struct[0],		/* Next in list.  */
 };
diff --git a/bfd/cpu-m32r.c b/bfd/cpu-m32r.c
index 8180d6c..8f373b4 100644
--- a/bfd/cpu-m32r.c
+++ b/bfd/cpu-m32r.c
@@ -25,7 +25,7 @@
 
 #define N(number, print, default, next)  \
 {  32, 32, 8, bfd_arch_m32r, number, "m32r", print, 4, default, \
-     bfd_default_compatible, bfd_default_scan, next }
+     bfd_default_compatible, bfd_default_scan, bfd_arch_default_fill, next }
 
 #define M32R2_NEXT   & arch_info_struct [1]
 #define NEXT         & arch_info_struct [0]
diff --git a/bfd/cpu-m68hc11.c b/bfd/cpu-m68hc11.c
index 313d820..7f3c074 100644
--- a/bfd/cpu-m68hc11.c
+++ b/bfd/cpu-m68hc11.c
@@ -35,5 +35,6 @@ const bfd_arch_info_type bfd_m68hc11_arch =
     TRUE,
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     0,
 };
diff --git a/bfd/cpu-m68hc12.c b/bfd/cpu-m68hc12.c
index 2a115b9..2dbf627 100644
--- a/bfd/cpu-m68hc12.c
+++ b/bfd/cpu-m68hc12.c
@@ -35,6 +35,7 @@ const bfd_arch_info_type bfd_m68hc12s_arch =
     TRUE,
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     0,
 };
 
@@ -51,5 +52,6 @@ const bfd_arch_info_type bfd_m68hc12_arch =
     TRUE,
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_m68hc12s_arch,
 };
diff --git a/bfd/cpu-m68k.c b/bfd/cpu-m68k.c
index ec9bccd..009ff04 100644
--- a/bfd/cpu-m68k.c
+++ b/bfd/cpu-m68k.c
@@ -30,7 +30,8 @@ bfd_m68k_compatible (const bfd_arch_info_type *a,
 		     const bfd_arch_info_type *b);
 
 #define N(name, print,d,next)  \
-{  32, 32, 8, bfd_arch_m68k, name, "m68k",print,2,d,bfd_m68k_compatible,bfd_default_scan, next, }
+{  32, 32, 8, bfd_arch_m68k, name, "m68k",print,2,d,bfd_m68k_compatible, \
+   bfd_default_scan, bfd_arch_default_fill, next, }
 
 static const bfd_arch_info_type arch_info_struct[] =
   {
diff --git a/bfd/cpu-m88k.c b/bfd/cpu-m88k.c
index 7e7c18d..d345902 100644
--- a/bfd/cpu-m88k.c
+++ b/bfd/cpu-m88k.c
@@ -36,6 +36,7 @@ const bfd_arch_info_type bfd_m88k_arch =
     3,
     TRUE, /* the one and only */
     bfd_default_compatible,
-    bfd_default_scan ,
+    bfd_default_scan,
+    bfd_arch_default_fill,
     0,
   };
diff --git a/bfd/cpu-m9s12x.c b/bfd/cpu-m9s12x.c
new file mode 100644
index 0000000..d224b83
--- /dev/null
+++ b/bfd/cpu-m9s12x.c
@@ -0,0 +1,41 @@
+/* BFD support for the Freescale 9S12X processor
+   Copyright 2008, 2009, 2010, 2011, 2012 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+
+const bfd_arch_info_type bfd_m9s12x_arch =
+{
+    16,	/* 16 bits in a word.  */
+    32,	/* 16 bits in an address.  */
+    8,	/* 8 bits in a byte.  */
+    bfd_arch_m9s12x,
+    0,
+    "m9s12x",
+    "m9s12x",
+    4, /* Section alignment power.  */
+    TRUE,
+    bfd_default_compatible,
+    bfd_default_scan,
+    bfd_arch_default_fill,
+    0,
+};
+
diff --git a/bfd/cpu-m9s12xg.c b/bfd/cpu-m9s12xg.c
new file mode 100644
index 0000000..6958a13
--- /dev/null
+++ b/bfd/cpu-m9s12xg.c
@@ -0,0 +1,41 @@
+/* BFD support for the Freescale 9S12-XGATE co-processor
+   Copyright 2008, 2009, 2010, 2011, 2012 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+
+const bfd_arch_info_type bfd_m9s12xg_arch =
+{
+    16,	/* 16 bits in a word.  */
+    32,	/* 16 bits in an address.  */
+    8,	/* 8 bits in a byte.  */
+    bfd_arch_m9s12xg,
+    0,
+    "m9s12xg",
+    "m9s12xg",
+    4, /* Section alignment power.  */
+    TRUE,
+    bfd_default_compatible,
+    bfd_default_scan,
+    bfd_arch_default_fill,
+    0,
+};
+
diff --git a/bfd/cpu-mcore.c b/bfd/cpu-mcore.c
index c01dd10..80b3290 100644
--- a/bfd/cpu-mcore.c
+++ b/bfd/cpu-mcore.c
@@ -35,5 +35,6 @@ const bfd_arch_info_type bfd_mcore_arch =
   TRUE,		  		/* Is this the default architecture ? */
   bfd_default_compatible,	/* Architecture comparison function */
   bfd_default_scan,	   	/* String to architecture conversion */
+  bfd_arch_default_fill,	/* Default fill.  */
   NULL			   	/* Next in list */
 };
diff --git a/bfd/cpu-mep.c b/bfd/cpu-mep.c
index 7ac871f..94cb080 100644
--- a/bfd/cpu-mep.c
+++ b/bfd/cpu-mep.c
@@ -22,7 +22,8 @@
 #include "libbfd.h"
 
 #define MA(x, n, def, y) { 32, 32, 8, bfd_arch_mep, x, "mep", n, \
-	2, def, bfd_default_compatible, bfd_default_scan, y }
+	2, def, bfd_default_compatible, bfd_default_scan, \
+	bfd_arch_default_fill, y }
 
 static const bfd_arch_info_type bfd_c5_arch = MA (bfd_mach_mep_c5, "c5", FALSE, NULL);
 static const bfd_arch_info_type bfd_h1_arch = MA (bfd_mach_mep_h1, "h1", FALSE, & bfd_c5_arch);
diff --git a/bfd/cpu-microblaze.c b/bfd/cpu-microblaze.c
index 45a4a2b..2cf6bc6 100644
--- a/bfd/cpu-microblaze.c
+++ b/bfd/cpu-microblaze.c
@@ -1,6 +1,6 @@
 /* BFD Xilinx MicroBlaze architecture definition
 
-   Copyright 2009 Free Software Foundation, Inc.
+   Copyright 2009, 2012 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -19,8 +19,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include "bfd.h"
 #include "sysdep.h"
+#include "bfd.h"
 #include "libbfd.h"
 
 const bfd_arch_info_type bfd_microblaze_arch =
@@ -36,5 +36,6 @@ const bfd_arch_info_type bfd_microblaze_arch =
   TRUE,		  		/* Is this the default architecture ?  */
   bfd_default_compatible,	/* Architecture comparison function.  */
   bfd_default_scan,	   	/* String to architecture conversion.  */
+  bfd_arch_default_fill,	/* Default fill.  */
   NULL			   	/* Next in list.  */
 };
diff --git a/bfd/cpu-mips.c b/bfd/cpu-mips.c
index ed86f11..c55cbf0 100644
--- a/bfd/cpu-mips.c
+++ b/bfd/cpu-mips.c
@@ -55,6 +55,7 @@ mips_compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b)
     DEFAULT,						\
     mips_compatible,					\
     bfd_default_scan,					\
+    bfd_arch_default_fill,				\
     NEXT,						\
   }
 
diff --git a/bfd/cpu-mmix.c b/bfd/cpu-mmix.c
index 6cf8753..f706b49 100644
--- a/bfd/cpu-mmix.c
+++ b/bfd/cpu-mmix.c
@@ -38,5 +38,6 @@ bfd_mmix_arch =
    TRUE,			/* This is the default architecture.  */
    bfd_default_compatible,	/* Architecture comparison function.  */
    bfd_default_scan,		/* String to architecture conversion.  */
+   bfd_arch_default_fill,	/* Default fill.  */
    NULL				/* Next in list.  */
 };
diff --git a/bfd/cpu-moxie.c b/bfd/cpu-moxie.c
index 39debbc..f514fe7 100644
--- a/bfd/cpu-moxie.c
+++ b/bfd/cpu-moxie.c
@@ -35,6 +35,7 @@ const bfd_arch_info_type bfd_moxie_arch =
     2,                /* Unsigned int section alignment power.  */
     TRUE,             /* The one and only.  */
     bfd_default_compatible, 
-    bfd_default_scan ,
+    bfd_default_scan,
+    bfd_arch_default_fill,
     0,
   };
diff --git a/bfd/cpu-msp430.c b/bfd/cpu-msp430.c
index 63c301a..bcaa4e7 100644
--- a/bfd/cpu-msp430.c
+++ b/bfd/cpu-msp430.c
@@ -1,5 +1,6 @@
 /* BFD library support routines for the MSP architecture.
-   Copyright (C) 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2005, 2007, 2012
+   Free Software Foundation, Inc.
    Contributed by Dmitry Diky <diwil at mail.ru>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -23,8 +24,23 @@
 #include "bfd.h"
 #include "libbfd.h"
 
-static const bfd_arch_info_type *compatible
-  PARAMS ((const bfd_arch_info_type *, const bfd_arch_info_type *));
+/* This routine is provided two arch_infos and works out which MSP
+   machine which would be compatible with both and returns a pointer
+   to its info structure.  */
+
+static const bfd_arch_info_type *
+compatible (const bfd_arch_info_type * a,
+	    const bfd_arch_info_type * b)
+{
+  /* If a & b are for different architectures we can do nothing.  */
+  if (a->arch != b->arch)
+    return NULL;
+
+  if (a->mach <= b->mach)
+    return b;
+
+  return a;
+}
 
 #define N(addr_bits, machine, print, default, next)		\
 {								\
@@ -39,6 +55,7 @@ static const bfd_arch_info_type *compatible
   default,			/* The default machine.  */	\
   compatible,							\
   bfd_default_scan,						\
+  bfd_arch_default_fill,					\
   next								\
 }
 
@@ -93,21 +110,3 @@ static const bfd_arch_info_type arch_info_struct[] =
 const bfd_arch_info_type bfd_msp430_arch =
   N (16, bfd_mach_msp14, "msp:14", TRUE, & arch_info_struct[0]);
 
-/* This routine is provided two arch_infos and works out which MSP
-   machine which would be compatible with both and returns a pointer
-   to its info structure.  */
-
-static const bfd_arch_info_type *
-compatible (a,b)
-     const bfd_arch_info_type * a;
-     const bfd_arch_info_type * b;
-{
-  /* If a & b are for different architectures we can do nothing.  */
-  if (a->arch != b->arch)
-    return NULL;
-
-  if (a->mach <= b->mach)
-    return b;
-
-  return a;
-}
diff --git a/bfd/cpu-mt.c b/bfd/cpu-mt.c
index 519871d..0ec10c8 100644
--- a/bfd/cpu-mt.c
+++ b/bfd/cpu-mt.c
@@ -36,6 +36,7 @@ const bfd_arch_info_type arch_info_struct[] =
   FALSE,		        /* The default ?  */
   bfd_default_compatible,	/* Architecture comparison fn.  */
   bfd_default_scan,		/* String to architecture convert fn.  */
+  bfd_arch_default_fill,	/* Default fill.  */
   &arch_info_struct[1]          /* Next in list.  */
 },
 {
@@ -50,6 +51,7 @@ const bfd_arch_info_type arch_info_struct[] =
   FALSE,		        /* The default ?  */
   bfd_default_compatible,	/* Architecture comparison fn.  */
   bfd_default_scan,		/* String to architecture convert fn.  */
+  bfd_arch_default_fill,	/* Default fill.  */
   NULL				/* Next in list.  */
 },
 };
@@ -67,6 +69,7 @@ const bfd_arch_info_type bfd_mt_arch =
   TRUE,		        	/* The default ?  */
   bfd_default_compatible,	/* Architecture comparison fn.  */
   bfd_default_scan,		/* String to architecture convert fn.  */
+  bfd_arch_default_fill,	/* Default fill.  */
   &arch_info_struct[0]		/* Next in list.  */
 };
 
diff --git a/bfd/cpu-ns32k.c b/bfd/cpu-ns32k.c
index 216b248..48a6bc6 100644
--- a/bfd/cpu-ns32k.c
+++ b/bfd/cpu-ns32k.c
@@ -1,6 +1,6 @@
 /* BFD support for the ns32k architecture.
    Copyright 1990, 1991, 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003,
-   2004, 2005, 2007 Free Software Foundation, Inc.
+   2004, 2005, 2007, 2012 Free Software Foundation, Inc.
    Almost totally rewritten by Ian Dall from initial work
    by Andrew Cagney.
 
@@ -27,7 +27,8 @@
 #include "ns32k.h"
 
 #define N(machine, printable, d, next)  \
-{  32, 32, 8, bfd_arch_ns32k, machine, "ns32k",printable,3,d,bfd_default_compatible,bfd_default_scan, next, }
+{  32, 32, 8, bfd_arch_ns32k, machine, "ns32k",printable,3,d, \
+   bfd_default_compatible,bfd_default_scan,bfd_arch_default_fill,next, }
 
 static const bfd_arch_info_type arch_info_struct[] =
 {
@@ -37,16 +38,8 @@ static const bfd_arch_info_type arch_info_struct[] =
 const bfd_arch_info_type bfd_ns32k_arch =
   N(32032,"ns32k:32032",FALSE, &arch_info_struct[0]);
 
-static bfd_reloc_status_type do_ns32k_reloc
-  PARAMS ((bfd *, arelent *, struct bfd_symbol *, PTR, asection *,
-	   bfd *, char **,
-	   bfd_vma (*) (bfd_byte *, int),
-	   void (*) (bfd_vma, bfd_byte *, int)));
-
 bfd_vma
-_bfd_ns32k_get_displacement (buffer, size)
-     bfd_byte *buffer;
-     int size;
+_bfd_ns32k_get_displacement (bfd_byte *buffer, int size)
 {
   bfd_signed_vma value;
 
@@ -77,10 +70,7 @@ _bfd_ns32k_get_displacement (buffer, size)
 }
 
 void
-_bfd_ns32k_put_displacement (value, buffer, size)
-     bfd_vma value;
-     bfd_byte *buffer;
-     int size;
+_bfd_ns32k_put_displacement (bfd_vma value, bfd_byte *buffer, int size)
 {
   switch (size)
     {
@@ -108,9 +98,7 @@ _bfd_ns32k_put_displacement (value, buffer, size)
 }
 
 bfd_vma
-_bfd_ns32k_get_immediate (buffer, size)
-     bfd_byte *buffer;
-     int size;
+_bfd_ns32k_get_immediate (bfd_byte *buffer, int size)
 {
   bfd_vma value = 0;
 
@@ -131,10 +119,7 @@ _bfd_ns32k_get_immediate (buffer, size)
 }
 
 void
-_bfd_ns32k_put_immediate (value, buffer, size)
-     bfd_vma value;
-     bfd_byte *buffer;
-     int size;
+_bfd_ns32k_put_immediate (bfd_vma value, bfd_byte *buffer, int size)
 {
   buffer += size - 1;
   switch (size)
@@ -155,17 +140,15 @@ _bfd_ns32k_put_immediate (value, buffer, size)
    needs to be!  */
 
 static bfd_reloc_status_type
-do_ns32k_reloc (abfd, reloc_entry, symbol, data, input_section, output_bfd,
-		error_message, get_data, put_data)
-     bfd *abfd;
-     arelent *reloc_entry;
-     struct bfd_symbol *symbol;
-     PTR data;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
-     bfd_vma (*get_data) PARAMS ((bfd_byte *, int));
-     void (*put_data) PARAMS ((bfd_vma, bfd_byte *, int));
+do_ns32k_reloc (bfd *      abfd,
+		arelent *  reloc_entry,
+		struct bfd_symbol * symbol,
+		void *     data,
+		asection * input_section,
+		bfd *      output_bfd,
+		char **    error_message ATTRIBUTE_UNUSED,
+		bfd_vma (* get_data) (bfd_byte *, int),
+		void (*    put_data) (bfd_vma, bfd_byte *, int))
 {
   int overflow = 0;
   bfd_vma relocation;
@@ -176,7 +159,7 @@ do_ns32k_reloc (abfd, reloc_entry, symbol, data, input_section, output_bfd,
   asection *reloc_target_output_section;
   bfd_byte *location;
 
-  if ((symbol->section == &bfd_abs_section)
+  if (bfd_is_abs_section (symbol->section)
       && output_bfd != (bfd *) NULL)
     {
       reloc_entry->address += input_section->output_offset;
@@ -186,7 +169,7 @@ do_ns32k_reloc (abfd, reloc_entry, symbol, data, input_section, output_bfd,
   /* If we are not producing relocatable output, return an error if
      the symbol is not defined.  An undefined weak symbol is
      considered to have a value of zero (SVR4 ABI, p. 4-27).  */
-  if (symbol->section == &bfd_und_section
+  if (bfd_is_und_section (symbol->section)
       && (symbol->flags & BSF_WEAK) == 0
       && output_bfd == (bfd *) NULL)
     flag = bfd_reloc_undefined;
@@ -582,14 +565,12 @@ do_ns32k_reloc (abfd, reloc_entry, symbol, data, input_section, output_bfd,
 /* Relocate a given location using a given value and howto.  */
 
 bfd_reloc_status_type
-_bfd_do_ns32k_reloc_contents (howto, input_bfd, relocation, location,
-			      get_data, put_data)
-     reloc_howto_type *howto;
-     bfd *input_bfd ATTRIBUTE_UNUSED;
-     bfd_vma relocation;
-     bfd_byte *location;
-     bfd_vma (*get_data) PARAMS ((bfd_byte *, int));
-     void (*put_data) PARAMS ((bfd_vma, bfd_byte *, int));
+_bfd_do_ns32k_reloc_contents (reloc_howto_type *howto,
+			      bfd *input_bfd ATTRIBUTE_UNUSED,
+			      bfd_vma relocation,
+			      bfd_byte *location,
+			      bfd_vma (*get_data) (bfd_byte *, int),
+			      void (*put_data) (bfd_vma, bfd_byte *, int))
 {
   int size;
   bfd_vma x;
@@ -757,15 +738,13 @@ _bfd_do_ns32k_reloc_contents (howto, input_bfd, relocation, location,
 }
 
 bfd_reloc_status_type
-_bfd_ns32k_reloc_disp (abfd, reloc_entry, symbol, data, input_section,
-		       output_bfd, error_message)
-     bfd *abfd;
-     arelent *reloc_entry;
-     struct bfd_symbol *symbol;
-     PTR data;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message;
+_bfd_ns32k_reloc_disp (bfd *abfd,
+		       arelent *reloc_entry,
+		       struct bfd_symbol *symbol,
+		       void * data,
+		       asection *input_section,
+		       bfd *output_bfd,
+		       char **error_message)
 {
   return do_ns32k_reloc (abfd, reloc_entry, symbol, data, input_section,
 			 output_bfd, error_message,
@@ -774,15 +753,13 @@ _bfd_ns32k_reloc_disp (abfd, reloc_entry, symbol, data, input_section,
 }
 
 bfd_reloc_status_type
-_bfd_ns32k_reloc_imm (abfd, reloc_entry, symbol, data, input_section,
-		      output_bfd, error_message)
-     bfd *abfd;
-     arelent *reloc_entry;
-     struct bfd_symbol *symbol;
-     PTR data;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message;
+_bfd_ns32k_reloc_imm (bfd *abfd,
+		      arelent *reloc_entry,
+		      struct bfd_symbol *symbol,
+		      void * data,
+		      asection *input_section,
+		      bfd *output_bfd,
+		      char **error_message)
 {
   return do_ns32k_reloc (abfd, reloc_entry, symbol, data, input_section,
 			 output_bfd, error_message, _bfd_ns32k_get_immediate,
@@ -790,15 +767,13 @@ _bfd_ns32k_reloc_imm (abfd, reloc_entry, symbol, data, input_section,
 }
 
 bfd_reloc_status_type
-_bfd_ns32k_final_link_relocate (howto, input_bfd, input_section, contents,
-				address, value, addend)
-     reloc_howto_type *howto;
-     bfd *input_bfd;
-     asection *input_section;
-     bfd_byte *contents;
-     bfd_vma address;
-     bfd_vma value;
-     bfd_vma addend;
+_bfd_ns32k_final_link_relocate (reloc_howto_type *howto,
+				bfd *input_bfd,
+				asection *input_section,
+				bfd_byte *contents,
+				bfd_vma address,
+				bfd_vma value,
+				bfd_vma addend)
 {
   bfd_vma relocation;
 
diff --git a/bfd/cpu-openrisc.c b/bfd/cpu-openrisc.c
index a430349..8e3e878 100644
--- a/bfd/cpu-openrisc.c
+++ b/bfd/cpu-openrisc.c
@@ -36,6 +36,7 @@
     DEFAULT,                                                  \
     bfd_default_compatible,                                   \
     bfd_default_scan,                                         \
+    bfd_arch_default_fill,				      \
     NEXT,                                                     \
   }
 
diff --git a/bfd/cpu-or32.c b/bfd/cpu-or32.c
index b9803ed..34ea52b 100644
--- a/bfd/cpu-or32.c
+++ b/bfd/cpu-or32.c
@@ -35,7 +35,8 @@ const bfd_arch_info_type bfd_or32_arch =
     4,
     TRUE,         /* The one and only.  */
     bfd_default_compatible,
-    bfd_default_scan ,
+    bfd_default_scan,
+    bfd_arch_default_fill,
     0,
   };
 
diff --git a/bfd/cpu-pdp11.c b/bfd/cpu-pdp11.c
index 3147f56..57c3068 100644
--- a/bfd/cpu-pdp11.c
+++ b/bfd/cpu-pdp11.c
@@ -34,7 +34,8 @@ const bfd_arch_info_type bfd_pdp11_arch =
     1,		/* aligment = 16 bit */
     TRUE, /* the one and only */
     bfd_default_compatible,
-    bfd_default_scan ,
+    bfd_default_scan,
+    bfd_arch_default_fill,
     0,
   };
 
diff --git a/bfd/cpu-pj.c b/bfd/cpu-pj.c
index bb5c85b..3576227 100644
--- a/bfd/cpu-pj.c
+++ b/bfd/cpu-pj.c
@@ -37,5 +37,6 @@ const bfd_arch_info_type bfd_pj_arch =
   TRUE,				/* the default machine */
   bfd_default_compatible,
   bfd_default_scan,
+  bfd_arch_default_fill,
   0
 };
diff --git a/bfd/cpu-plugin.c b/bfd/cpu-plugin.c
index f0f7dbd..6b25c58 100644
--- a/bfd/cpu-plugin.c
+++ b/bfd/cpu-plugin.c
@@ -36,5 +36,6 @@ const bfd_arch_info_type bfd_plugin_arch =
   TRUE,
   bfd_default_compatible,
   bfd_default_scan,
+  bfd_arch_default_fill,
   0
 };
diff --git a/bfd/cpu-powerpc.c b/bfd/cpu-powerpc.c
index 9bd60af..3e9acf1 100644
--- a/bfd/cpu-powerpc.c
+++ b/bfd/cpu-powerpc.c
@@ -1,6 +1,6 @@
 /* BFD PowerPC CPU definition
-   Copyright 1994, 1995, 1996, 2000, 2001, 2002, 2003, 2005, 2007, 2008, 2010
-   Free Software Foundation, Inc.
+   Copyright 1994, 1995, 1996, 2000, 2001, 2002, 2003, 2005, 2007, 2008,
+   2010, 2012 Free Software Foundation, Inc.
    Contributed by Ian Lance Taylor, Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -26,13 +26,9 @@
 
 /* The common PowerPC architecture is compatible with the RS/6000.  */
 
-static const bfd_arch_info_type *powerpc_compatible
-  PARAMS ((const bfd_arch_info_type *, const bfd_arch_info_type *));
-
 static const bfd_arch_info_type *
-powerpc_compatible (a,b)
-     const bfd_arch_info_type *a;
-     const bfd_arch_info_type *b;
+powerpc_compatible (const bfd_arch_info_type *a,
+		    const bfd_arch_info_type *b)
 {
   BFD_ASSERT (a->arch == bfd_arch_powerpc);
   switch (b->arch)
@@ -65,6 +61,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
     TRUE, /* default for 64 bit target */
     powerpc_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_powerpc_archs[1]
   },
   /* elf32-ppc:ppc_elf_object_p relies on the default 32 bit arch
@@ -81,6 +78,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
     FALSE,
     powerpc_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_powerpc_archs[2],
   },
 #else
@@ -97,6 +95,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
     TRUE, /* default for 32 bit target */
     powerpc_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_powerpc_archs[1],
   },
   /* elf64-ppc:ppc64_elf_object_p relies on the default 64 bit arch
@@ -113,6 +112,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
     FALSE,
     powerpc_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_powerpc_archs[2]
   },
 #endif
@@ -128,6 +128,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
     FALSE, /* not the default */
     powerpc_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_powerpc_archs[3]
   },
   {
@@ -142,6 +143,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
     FALSE, /* not the default */
     powerpc_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_powerpc_archs[4]
   },
   {
@@ -156,6 +158,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
     FALSE, /* not the default */
     powerpc_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_powerpc_archs[5]
   },
   {
@@ -170,6 +173,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
     FALSE, /* not the default */
     powerpc_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_powerpc_archs[6]
   },
   {
@@ -184,6 +188,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
     FALSE, /* not the default */
     powerpc_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_powerpc_archs[7]
   },
   {
@@ -198,6 +203,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
     FALSE, /* not the default */
     powerpc_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_powerpc_archs[8]
   },
   {
@@ -212,6 +218,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
     FALSE, /* not the default */
     powerpc_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_powerpc_archs[9]
   },
   {
@@ -226,6 +233,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
     FALSE, /* not the default */
     powerpc_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_powerpc_archs[10]
   },
   {
@@ -240,6 +248,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
     FALSE, /* not the default */
     powerpc_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_powerpc_archs[11]
   },
   {
@@ -254,6 +263,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
     FALSE, /* not the default */
     powerpc_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_powerpc_archs[12]
   },
   {
@@ -268,6 +278,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
     FALSE, /* not the default */
     powerpc_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_powerpc_archs[13]
   },
   {
@@ -282,6 +293,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
     FALSE,
     powerpc_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_powerpc_archs[14]
   },
   {
@@ -296,6 +308,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
     FALSE, /* not the default */
     powerpc_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_powerpc_archs[15]
   },
   {
@@ -310,6 +323,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
     FALSE, /* not the default */
     powerpc_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_powerpc_archs[16]
   },
   {
@@ -324,6 +338,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
     FALSE, /* not the default */
     powerpc_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_powerpc_archs[17]
   },
   {
@@ -338,6 +353,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
     FALSE, /* not the default */
     powerpc_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_powerpc_archs[18]
   },
   {
@@ -352,6 +368,52 @@ const bfd_arch_info_type bfd_powerpc_archs[] =
     FALSE, /* not the default */
     powerpc_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
+    &bfd_powerpc_archs[19]
+  },
+  {
+    16, /* 16 or 32 bits in a word */
+    32, /* 32 bits in an address */
+    8,  /* 8 bits in a byte */
+    bfd_arch_powerpc,
+    bfd_mach_ppc_vle,
+    "powerpc",
+    "powerpc:vle",
+    3,
+    FALSE, /* not the default */
+    powerpc_compatible,
+    bfd_default_scan,
+    bfd_arch_default_fill,
+    &bfd_powerpc_archs[20]
+  },
+  {
+    64, /* 64 bits in a word */
+    64, /* 64 bits in an address */
+    8,  /* 8 bits in a byte */
+    bfd_arch_powerpc,
+    bfd_mach_ppc_e5500,
+    "powerpc",
+    "powerpc:e5500",
+    3,
+    FALSE, /* not the default */
+    powerpc_compatible,
+    bfd_default_scan,
+    bfd_arch_default_fill,
+    &bfd_powerpc_archs[21]
+  },
+  {
+    64, /* 64 bits in a word */
+    64, /* 64 bits in an address */
+    8,  /* 8 bits in a byte */
+    bfd_arch_powerpc,
+    bfd_mach_ppc_e6500,
+    "powerpc",
+    "powerpc:e6500",
+    3,
+    FALSE, /* not the default */
+    powerpc_compatible,
+    bfd_default_scan,
+    bfd_arch_default_fill,
     0
   }
 };
diff --git a/bfd/cpu-rl78.c b/bfd/cpu-rl78.c
index 66024ae..6fb72e6 100644
--- a/bfd/cpu-rl78.c
+++ b/bfd/cpu-rl78.c
@@ -35,5 +35,6 @@ const bfd_arch_info_type bfd_rl78_arch =
   TRUE,				/* The default ?  */
   bfd_default_compatible,	/* Architecture comparison fn.  */
   bfd_default_scan,		/* String to architecture convert fn.  */
+  bfd_arch_default_fill,	/* Default fill.  */
   NULL				/* Next in list.  */
 };
diff --git a/bfd/cpu-rs6000.c b/bfd/cpu-rs6000.c
index 91d0431..ba1df36 100644
--- a/bfd/cpu-rs6000.c
+++ b/bfd/cpu-rs6000.c
@@ -1,5 +1,5 @@
 /* BFD back-end for rs6000 support
-   Copyright 1990, 1991, 1993, 1995, 2000, 2002, 2003, 2005, 2007
+   Copyright 1990, 1991, 1993, 1995, 2000, 2002, 2003, 2005, 2007, 2012
    Free Software Foundation, Inc.
    Written by Mimi Phuong-Thao Vo of IBM
    and John Gilmore of Cygnus Support.
@@ -28,13 +28,9 @@
 /* The RS/6000 architecture is compatible with the PowerPC common
    architecture.  */
 
-static const bfd_arch_info_type *rs6000_compatible
-  PARAMS ((const bfd_arch_info_type *, const bfd_arch_info_type *));
-
 static const bfd_arch_info_type *
-rs6000_compatible (a,b)
-     const bfd_arch_info_type *a;
-     const bfd_arch_info_type *b;
+rs6000_compatible (const bfd_arch_info_type *a,
+		   const bfd_arch_info_type *b)
 {
   BFD_ASSERT (a->arch == bfd_arch_rs6000);
   switch (b->arch)
@@ -65,6 +61,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE, /* not the default */
     rs6000_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &arch_info_struct[1]
   },
   {
@@ -79,6 +76,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE, /* not the default */
     rs6000_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &arch_info_struct[2]
   },
   {
@@ -93,6 +91,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE, /* not the default */
     rs6000_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     0
   }
 };
@@ -110,5 +109,6 @@ const bfd_arch_info_type bfd_rs6000_arch =
     TRUE, /* the default */
     rs6000_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &arch_info_struct[0]
   };
diff --git a/bfd/cpu-rx.c b/bfd/cpu-rx.c
index 92eebb0..31489ad 100644
--- a/bfd/cpu-rx.c
+++ b/bfd/cpu-rx.c
@@ -36,6 +36,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* The default ?  */
     bfd_default_compatible,	/* Architecture comparison fn.  */
     bfd_default_scan,		/* String to architecture convert fn.  */
+    bfd_arch_default_fill,	/* Default fill.  */
     NULL			/* Next in list.  */
   },
 };
@@ -53,5 +54,6 @@ const bfd_arch_info_type bfd_rx_arch =
   TRUE,				/* The default ?  */
   bfd_default_compatible,	/* Architecture comparison fn.  */
   bfd_default_scan,		/* String to architecture convert fn.  */
+  bfd_arch_default_fill,	/* Default fill.  */
   & arch_info_struct[0],	/* Next in list.  */
 };
diff --git a/bfd/cpu-s390.c b/bfd/cpu-s390.c
index 805e825..1a581e4 100644
--- a/bfd/cpu-s390.c
+++ b/bfd/cpu-s390.c
@@ -36,6 +36,7 @@ const bfd_arch_info_type bfd_s390_64_arch =
     TRUE, /* the default */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     NULL
 };
 
@@ -52,5 +53,6 @@ const bfd_arch_info_type bfd_s390_arch =
     TRUE, /* the default */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &bfd_s390_64_arch
 };
diff --git a/bfd/cpu-score.c b/bfd/cpu-score.c
index 0ed4095..329c97c 100644
--- a/bfd/cpu-score.c
+++ b/bfd/cpu-score.c
@@ -1,5 +1,5 @@
 /* BFD support for the score processor
-   Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+   Copyright 2006, 2007, 2008, 2009, 2012 Free Software Foundation, Inc.
    Contributed by
    Brain.lin (brain.lin at sunplusct.com)
    Mei Ligang (ligang at sunnorth.com.cn)
@@ -22,8 +22,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include "bfd.h"
 #include "sysdep.h"
+#include "bfd.h"
 #include "libbfd.h"
 
 /* This routine is provided two arch_infos and works out which Score
@@ -56,6 +56,7 @@ compatible (const bfd_arch_info_type * a, const bfd_arch_info_type * b)
   default,			/* The default machine.  */	\
   compatible,							\
   bfd_default_scan,						\
+  bfd_arch_default_fill,					\
   next								\
 }
 
diff --git a/bfd/cpu-sh.c b/bfd/cpu-sh.c
index af97a47..6fe6c15 100644
--- a/bfd/cpu-sh.c
+++ b/bfd/cpu-sh.c
@@ -61,6 +61,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     SH2_NEXT
   },
   {
@@ -75,6 +76,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     SH2E_NEXT
   },
   {
@@ -89,6 +91,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     SH_DSP_NEXT
   },
   {
@@ -103,6 +106,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     SH3_NEXT
   },
   {
@@ -117,6 +121,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     SH3_NOMMU_NEXT
   },
   {
@@ -131,6 +136,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     SH3_DSP_NEXT
   },
   {
@@ -145,6 +151,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     SH3E_NEXT
   },
   {
@@ -159,6 +166,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     SH4_NEXT
   },
   {
@@ -173,6 +181,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     SH4A_NEXT
   },
   {
@@ -187,6 +196,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     SH4AL_DSP_NEXT
   },
   {
@@ -201,6 +211,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     SH4_NOFPU_NEXT
   },
   {
@@ -215,6 +226,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     SH4_NOMMU_NOFPU_NEXT
   },
   {
@@ -229,6 +241,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     SH4A_NOFPU_NEXT
   },
   {
@@ -243,6 +256,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     SH2A_NEXT
   },
   {
@@ -257,6 +271,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     SH2A_NOFPU_NEXT
   },
   {
@@ -271,6 +286,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     SH2A_NOFPU_OR_SH4_NOMMU_NOFPU_NEXT
   },
   {
@@ -285,6 +301,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     SH2A_NOFPU_OR_SH3_NOMMU_NEXT
   },
   {
@@ -299,6 +316,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     SH2A_OR_SH4_NEXT
   },
   {
@@ -313,6 +331,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     SH2A_OR_SH3E_NEXT
   },
   {
@@ -327,6 +346,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,			/* Not the default.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     SH64_NEXT
   },
 };
@@ -344,6 +364,7 @@ const bfd_arch_info_type bfd_sh_arch =
   TRUE,				/* The default machine.  */
   bfd_default_compatible,
   bfd_default_scan,
+  bfd_arch_default_fill,
   SH_NEXT
 };
 
diff --git a/bfd/cpu-sparc.c b/bfd/cpu-sparc.c
index f86ccc5..ccdd7d1 100644
--- a/bfd/cpu-sparc.c
+++ b/bfd/cpu-sparc.c
@@ -37,6 +37,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &arch_info_struct[1],
   },
   {
@@ -51,6 +52,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &arch_info_struct[2],
   },
   {
@@ -65,6 +67,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &arch_info_struct[3],
   },
   {
@@ -79,6 +82,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &arch_info_struct[4],
   },
   {
@@ -93,6 +97,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &arch_info_struct[5],
   },
   {
@@ -107,6 +112,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &arch_info_struct[6],
   },
   {
@@ -121,6 +127,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &arch_info_struct[7],
   },
   {
@@ -135,6 +142,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &arch_info_struct[8],
   },
   {
@@ -149,6 +157,7 @@ static const bfd_arch_info_type arch_info_struct[] =
     FALSE,
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     0,
   }
 };
@@ -166,5 +175,6 @@ const bfd_arch_info_type bfd_sparc_arch =
     TRUE, /* the default */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     &arch_info_struct[0],
   };
diff --git a/bfd/cpu-spu.c b/bfd/cpu-spu.c
index 64ba357..b3dfc62 100644
--- a/bfd/cpu-spu.c
+++ b/bfd/cpu-spu.c
@@ -49,6 +49,7 @@ const bfd_arch_info_type bfd_spu_arch[] =
     TRUE, 		/* the default machine for the architecture */
     spu_compatible,	/* the spu is only compatible with itself, see above */
     bfd_default_scan,
+    bfd_arch_default_fill,
     0,			/* next -- there are none! */
   }
 };
diff --git a/bfd/cpu-tic30.c b/bfd/cpu-tic30.c
index e08cf47..a9d291d 100644
--- a/bfd/cpu-tic30.c
+++ b/bfd/cpu-tic30.c
@@ -35,5 +35,6 @@ const bfd_arch_info_type bfd_tic30_arch =
   TRUE,				/* the one and only */
   bfd_default_compatible,
   bfd_default_scan,
+  bfd_arch_default_fill,
   0,
 };
diff --git a/bfd/cpu-tic4x.c b/bfd/cpu-tic4x.c
index bd8b8f4..a90594c 100644
--- a/bfd/cpu-tic4x.c
+++ b/bfd/cpu-tic4x.c
@@ -1,5 +1,6 @@
 /* bfd back-end for TMS320C[34]x support
-   Copyright 1996, 1997, 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
+   Copyright 1996, 1997, 2002, 2003, 2005, 2007, 2012
+   Free Software Foundation, Inc.
 
    Contributed by Michael Hayes (m.hayes at elec.canterbury.ac.nz)
 
@@ -24,14 +25,9 @@
 #include "bfd.h"
 #include "libbfd.h"
 
-static bfd_boolean tic4x_scan
-    PARAMS ((const struct bfd_arch_info *, const char * ));
-
-
 static bfd_boolean
-tic4x_scan (info, string)
-     const struct bfd_arch_info *info;
-     const char *string;
+tic4x_scan (const struct bfd_arch_info *info,
+	    const char *string)
 {
   /* Allow strings of form [ti][Cc][34][0-9], let's not be too picky
      about strange numbered machines in C3x or C4x series.  */
@@ -64,6 +60,7 @@ const bfd_arch_info_type bfd_tic3x_arch =
     FALSE,			/* Not the default architecture.  */
     bfd_default_compatible,
     tic4x_scan,
+    bfd_arch_default_fill,
     0
   };
 
@@ -80,6 +77,7 @@ const bfd_arch_info_type bfd_tic4x_arch =
     TRUE,			/* The default architecture.  */
     bfd_default_compatible,
     tic4x_scan,
+    bfd_arch_default_fill,
     &bfd_tic3x_arch,
   };
 
diff --git a/bfd/cpu-tic54x.c b/bfd/cpu-tic54x.c
index b7e316c..95d990e 100644
--- a/bfd/cpu-tic54x.c
+++ b/bfd/cpu-tic54x.c
@@ -35,5 +35,6 @@ const bfd_arch_info_type bfd_tic54x_arch =
   TRUE,				/* the one and only */
   bfd_default_compatible,
   bfd_default_scan,
+  bfd_arch_default_fill,
   0,
 };
diff --git a/bfd/cpu-tic6x.c b/bfd/cpu-tic6x.c
index 163f4b3..d5a9cb9 100644
--- a/bfd/cpu-tic6x.c
+++ b/bfd/cpu-tic6x.c
@@ -36,5 +36,6 @@ const bfd_arch_info_type bfd_tic6x_arch =
     TRUE, /* Default machine for this architecture.  */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     0,
   };
diff --git a/bfd/cpu-tic80.c b/bfd/cpu-tic80.c
index f030ce1..c11233d 100644
--- a/bfd/cpu-tic80.c
+++ b/bfd/cpu-tic80.c
@@ -35,6 +35,7 @@ const bfd_arch_info_type bfd_tic80_arch =
     2,				/* section alignment power */
     TRUE,			/* default machine for architecture */
     bfd_default_compatible,
-    bfd_default_scan ,
+    bfd_default_scan,
+    bfd_arch_default_fill,
     NULL,				/* Pointer to next in chain */
   };
diff --git a/bfd/cpu-tilegx.c b/bfd/cpu-tilegx.c
index aa2fe80..11234ec 100644
--- a/bfd/cpu-tilegx.c
+++ b/bfd/cpu-tilegx.c
@@ -1,5 +1,5 @@
 /* BFD support for the TILE-Gx processor.
-   Copyright 2011 Free Software Foundation, Inc.
+   Copyright 2011, 2012 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -18,10 +18,27 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include "bfd.h"
 #include "sysdep.h"
+#include "bfd.h"
 #include "libbfd.h"
 
+const bfd_arch_info_type bfd_tilegx32_arch =
+  {
+    32, /* 32 bits in a word */
+    32, /* 32 bits in an address */
+    8,  /* 8 bits in a byte */
+    bfd_arch_tilegx,
+    bfd_mach_tilegx32,
+    "tilegx32",
+    "tilegx32",
+    3,
+    FALSE,
+    bfd_default_compatible,
+    bfd_default_scan,
+    bfd_arch_default_fill,
+    0,
+  };
+
 const bfd_arch_info_type bfd_tilegx_arch =
   {
     64, /* 64 bits in a word */
@@ -35,5 +52,6 @@ const bfd_arch_info_type bfd_tilegx_arch =
     TRUE,
     bfd_default_compatible,
     bfd_default_scan,
-    0,
+    bfd_arch_default_fill,
+    &bfd_tilegx32_arch,
   };
diff --git a/bfd/cpu-tilepro.c b/bfd/cpu-tilepro.c
index cadd006..4066fc1 100644
--- a/bfd/cpu-tilepro.c
+++ b/bfd/cpu-tilepro.c
@@ -1,5 +1,5 @@
 /* BFD support for the TILEPro processor.
-   Copyright 2011 Free Software Foundation, Inc.
+   Copyright 2011, 2012 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -18,8 +18,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include "bfd.h"
 #include "sysdep.h"
+#include "bfd.h"
 #include "libbfd.h"
 
 const bfd_arch_info_type bfd_tilepro_arch =
@@ -35,5 +35,6 @@ const bfd_arch_info_type bfd_tilepro_arch =
     TRUE,
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     0,
   };
diff --git a/bfd/cpu-v850.c b/bfd/cpu-v850.c
index 6ebc96c..d124220 100644
--- a/bfd/cpu-v850.c
+++ b/bfd/cpu-v850.c
@@ -26,7 +26,7 @@
 
 #define N(number, print, default, next)  \
 {  32, 32, 8, bfd_arch_v850, number, "v850", print, 2, default, \
-     bfd_default_compatible, bfd_default_scan, next }
+   bfd_default_compatible, bfd_default_scan, bfd_arch_default_fill, next }
 
 #define NEXT NULL
 
diff --git a/bfd/cpu-vax.c b/bfd/cpu-vax.c
index c9d9c8d..9e2b19d 100644
--- a/bfd/cpu-vax.c
+++ b/bfd/cpu-vax.c
@@ -37,5 +37,6 @@ const bfd_arch_info_type bfd_vax_arch =
     TRUE, /* the one and only */
     bfd_default_compatible,
     bfd_default_scan,
+    bfd_arch_default_fill,
     0,
   };
diff --git a/bfd/cpu-w65.c b/bfd/cpu-w65.c
index e5e78d9..8b0618b 100644
--- a/bfd/cpu-w65.c
+++ b/bfd/cpu-w65.c
@@ -1,5 +1,5 @@
 /* BFD library support routines for the WDC 65816 architecture.
-   Copyright 1995, 1999, 2000, 2001, 2002, 2005, 2007
+   Copyright 1995, 1999, 2000, 2001, 2002, 2005, 2007, 2012
    Free Software Foundation, Inc.
    Hacked by Steve Chamberlain of Cygnus Support.
 
@@ -24,13 +24,9 @@
 #include "bfd.h"
 #include "libbfd.h"
 
-static bfd_boolean scan_mach
-  PARAMS ((const struct bfd_arch_info *, const char *));
-
 static bfd_boolean
-scan_mach (info, string)
-     const struct bfd_arch_info *info ATTRIBUTE_UNUSED;
-     const char *string;
+scan_mach (const struct bfd_arch_info *info ATTRIBUTE_UNUSED,
+	   const char *string)
 {
   if (strcmp(string,"w65") == 0)
     return TRUE;
@@ -52,5 +48,6 @@ const bfd_arch_info_type bfd_w65_arch =
   TRUE,				/* the default machine */
   bfd_default_compatible,
   scan_mach,
+  bfd_arch_default_fill,
   0,
 };
diff --git a/bfd/cpu-we32k.c b/bfd/cpu-we32k.c
index d93d76a..99a8ff0 100644
--- a/bfd/cpu-we32k.c
+++ b/bfd/cpu-we32k.c
@@ -36,5 +36,6 @@ const bfd_arch_info_type bfd_we32k_arch =
     TRUE, /* the one and only */
     bfd_default_compatible,
     bfd_default_scan ,
+    bfd_arch_default_fill,
     0,
   };
diff --git a/bfd/cpu-xc16x.c b/bfd/cpu-xc16x.c
index 552952c..3d28659 100644
--- a/bfd/cpu-xc16x.c
+++ b/bfd/cpu-xc16x.c
@@ -37,6 +37,7 @@ const bfd_arch_info_type xc16xs_info_struct =
   TRUE,				/* The default ?  */
   bfd_default_compatible,	/* Architecture comparison fn.  */
   bfd_default_scan,		/* String to architecture convert fn.  */
+  bfd_arch_default_fill,	/* Default fill.  */
   NULL				/* Next in list.  */
 };
 
@@ -53,6 +54,7 @@ const bfd_arch_info_type xc16xl_info_struct =
   TRUE,				/* The default ?  */
   bfd_default_compatible,	/* Architecture comparison fn.  */
   bfd_default_scan,		/* String to architecture convert fn.  */
+  bfd_arch_default_fill,	/* Default fill.  */
   & xc16xs_info_struct		/* Next in list.  */
 };
 
@@ -69,5 +71,6 @@ const bfd_arch_info_type bfd_xc16x_arch =
   TRUE,				/* The default ?  */
   bfd_default_compatible,	/* Architecture comparison fn.  */
   bfd_default_scan,		/* String to architecture convert fn.  */
+  bfd_arch_default_fill,	/* Default fill.  */
   & xc16xl_info_struct		/* Next in list.  */
 };
diff --git a/bfd/cpu-xgate.c b/bfd/cpu-xgate.c
new file mode 100644
index 0000000..11653fa
--- /dev/null
+++ b/bfd/cpu-xgate.c
@@ -0,0 +1,40 @@
+/* BFD support for the Freescale XGATE processor
+   Copyright 2010, 2011, 2012 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+
+const bfd_arch_info_type bfd_xgate_arch =
+{
+    16, /* 16 bits in a word.  */
+    32, /* 32 bits used as 16 bit address and PPAGE value.  */
+    8,  /* 8 bits in a byte.  */
+    bfd_arch_xgate,
+    bfd_mach_xgate,
+    "xgate",
+    "xgate",
+    4, 	/* Section alignment power.  */
+    TRUE,
+    bfd_default_compatible,
+    bfd_default_scan,
+    bfd_arch_default_fill,
+    0,
+};
diff --git a/bfd/cpu-xstormy16.c b/bfd/cpu-xstormy16.c
index d1c7e56..94de989 100644
--- a/bfd/cpu-xstormy16.c
+++ b/bfd/cpu-xstormy16.c
@@ -35,5 +35,6 @@ const bfd_arch_info_type bfd_xstormy16_arch =
   TRUE,				/* the default ? */
   bfd_default_compatible,	/* architecture comparison fn */
   bfd_default_scan,		/* string to architecture convert fn */
+  bfd_arch_default_fill,	/* Default fill.  */
   NULL				/* next in list */
 };
diff --git a/bfd/cpu-xtensa.c b/bfd/cpu-xtensa.c
index ee3767a..5c1008e 100644
--- a/bfd/cpu-xtensa.c
+++ b/bfd/cpu-xtensa.c
@@ -35,5 +35,6 @@ const bfd_arch_info_type bfd_xtensa_arch =
   TRUE,				/* The default?  */
   bfd_default_compatible,	/* Architecture comparison fn.  */
   bfd_default_scan,		/* String to architecture convert fn.  */
+  bfd_arch_default_fill,	/* Default fill.  */
   NULL				/* Next in list.  */
 };
diff --git a/bfd/cpu-z80.c b/bfd/cpu-z80.c
index 5da39f1..a46f71d 100644
--- a/bfd/cpu-z80.c
+++ b/bfd/cpu-z80.c
@@ -42,7 +42,7 @@ compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b)
 
 #define N(name,print,default,next)  \
 { 16, 16, 8, bfd_arch_z80, name, "z80", print, 0, default, \
-    compatible, bfd_default_scan, next }
+  compatible, bfd_default_scan, bfd_arch_default_fill, next }
 
 #define M(n) &arch_info_struct[n]
 
diff --git a/bfd/cpu-z8k.c b/bfd/cpu-z8k.c
index 6e910e9..fd34218 100644
--- a/bfd/cpu-z8k.c
+++ b/bfd/cpu-z8k.c
@@ -38,11 +38,12 @@ compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b)
 static const bfd_arch_info_type arch_info_struct[] =
 {
   { 32, 16, 8, bfd_arch_z8k, bfd_mach_z8002, "z8k", "z8002", 1, FALSE,
-    compatible, bfd_default_scan, 0 }
+    compatible, bfd_default_scan, bfd_arch_default_fill, 0 }
 };
 
 const bfd_arch_info_type bfd_z8k_arch =
 {
   32, 32, 8, bfd_arch_z8k, bfd_mach_z8001, "z8k", "z8001", 1, TRUE,
-  compatible, bfd_default_scan, &arch_info_struct[0]
+  compatible, bfd_default_scan, bfd_arch_default_fill,
+  &arch_info_struct[0]
 };
diff --git a/bfd/doc/ChangeLog b/bfd/doc/ChangeLog
index 87e2a2e..37a7e38 100644
--- a/bfd/doc/ChangeLog
+++ b/bfd/doc/ChangeLog
@@ -1,3 +1,7 @@
+2012-02-27  Alan Modra  <amodra at gmail.com>
+
+	* chew.c (print_stack_level, main): Use %ld to print stack delta.
+
 2010-10-28  Matthias Klose  <doko at ubuntu.com>
 
 	* bfd.texinfo: Add directory section for info document.
diff --git a/bfd/doc/aoutx.texi b/bfd/doc/aoutx.texi
index 8b13789..7cf9787 100644
--- a/bfd/doc/aoutx.texi
+++ b/bfd/doc/aoutx.texi
@@ -1 +1,213 @@
+ at section a.out backends
+
+
+ at strong{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,
+ at 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
+ at file{aout32.c} and @file{aout64.c} to form the names
+ at code{aout_32_swap_exec_header_in}, @code{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}:
+
+ at example
+       #define ARCH_SIZE 32
+       #include "aoutx.h"
+ at end example
+
+Which exports names:
+
+ at example
+       ...
+       aout_32_canonicalize_reloc
+       aout_32_find_nearest_line
+       aout_32_get_lineno
+       aout_32_get_reloc_upper_bound
+       ...
+ at end example
+
+from @file{sunos.c}:
+
+ at example
+       #define TARGET_NAME "a.out-sunos-big"
+       #define VECNAME    sunos_big_vec
+       #include "aoutf1.h"
+ at end example
+
+requires all the names from @file{aout32.c}, and produces the jump vector
+
+ at example
+       sunos_big_vec
+ at end example
+
+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:
+
+ at example
+        HOST_PAGE_SIZE
+        HOST_SEGMENT_SIZE
+        HOST_MACHINE_ARCH       (optional)
+        HOST_MACHINE_MACHINE    (optional)
+        HOST_TEXT_START_ADDR
+        HOST_STACK_END_ADDR
+ at end example
+
+in the file @file{../include/sys/h- at 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:
+
+ at example
+       TDEFAULTS = -DDEFAULT_VECTOR=host_aout_big_vec
+       TDEPFILES= host-aout.o trad-core.o
+ at end example
+
+in the @file{config/@var{XXX}.mt} file, and modify @file{configure.in}
+to use the
+ at file{@var{XXX}.mt} file (by setting "@code{bfd_target=XXX}") when your
+configuration is selected.
+
+ at subsection Relocations
+
+
+ at strong{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.
+
+ at subsection Internal entry points
+
+
+ at strong{Description}@*
+ at 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).
+
+ at findex aout_ at var{size}_swap_exec_header_in
+ at subsubsection @code{aout_ at var{size}_swap_exec_header_in}
+ at strong{Synopsis}
+ at example
+void aout_ at var{size}_swap_exec_header_in,
+   (bfd *abfd,
+    struct external_exec *bytes,
+    struct internal_exec *execp);
+ at end example
+ at strong{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}.
+
+ at findex aout_ at var{size}_swap_exec_header_out
+ at subsubsection @code{aout_ at var{size}_swap_exec_header_out}
+ at strong{Synopsis}
+ at example
+void aout_ at var{size}_swap_exec_header_out
+   (bfd *abfd,
+    struct internal_exec *execp,
+    struct external_exec *raw_bytes);
+ at end example
+ at strong{Description}@*
+Swap the information in an internal exec header structure
+ at var{execp} into the buffer @var{raw_bytes} ready for writing to disk.
+
+ at findex aout_ at var{size}_some_aout_object_p
+ at subsubsection @code{aout_ at var{size}_some_aout_object_p}
+ at strong{Synopsis}
+ at example
+const bfd_target *aout_ at var{size}_some_aout_object_p
+   (bfd *abfd,
+    struct internal_exec *execp,
+    const bfd_target *(*callback_to_real_object_p) (bfd *));
+ at end example
+ at strong{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.
+
+ at findex aout_ at var{size}_mkobject
+ at subsubsection @code{aout_ at var{size}_mkobject}
+ at strong{Synopsis}
+ at example
+bfd_boolean aout_ at var{size}_mkobject, (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Initialize BFD @var{abfd} for use with a.out files.
+
+ at findex aout_ at var{size}_machine_type
+ at subsubsection @code{aout_ at var{size}_machine_type}
+ at strong{Synopsis}
+ at example
+enum machine_type  aout_ at var{size}_machine_type
+   (enum bfd_architecture arch,
+    unsigned long machine,
+    bfd_boolean *unknown);
+ at end example
+ at strong{Description}@*
+Keep track of machine architecture and machine type for
+a.out's. Return the @code{machine_type} for a particular
+architecture and machine, or @code{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.
+
+ at findex aout_ at var{size}_set_arch_mach
+ at subsubsection @code{aout_ at var{size}_set_arch_mach}
+ at strong{Synopsis}
+ at example
+bfd_boolean aout_ at var{size}_set_arch_mach,
+   (bfd *,
+    enum bfd_architecture arch,
+    unsigned long machine);
+ at end example
+ at strong{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.
+
+ at findex aout_ at var{size}_new_section_hook
+ at subsubsection @code{aout_ at var{size}_new_section_hook}
+ at strong{Synopsis}
+ at example
+bfd_boolean aout_ at var{size}_new_section_hook,
+   (bfd *abfd,
+    asection *newsect);
+ at end example
+ at strong{Description}@*
+Called by the BFD in response to a @code{bfd_make_section}
+request.
 
diff --git a/bfd/doc/archive.texi b/bfd/doc/archive.texi
index 8b13789..3d0a97d 100644
--- a/bfd/doc/archive.texi
+++ b/bfd/doc/archive.texi
@@ -1 +1,99 @@
+ at section Archives
+
+
+ at strong{Description}@*
+An archive (or library) is just another BFD.  It has a symbol
+table, although there's not much a user program will do with it.
+
+The big difference between an archive BFD and an ordinary BFD
+is that the archive doesn't have sections.  Instead it has a
+chain of BFDs that are considered its contents.  These BFDs can
+be manipulated like any other.  The BFDs contained in an
+archive opened for reading will all be opened for reading.  You
+may put either input or output BFDs into an archive opened for
+output; they will be handled correctly when the archive is closed.
+
+Use @code{bfd_openr_next_archived_file} to step through
+the contents of an archive opened for input.  You don't
+have to read the entire archive if you don't want
+to!  Read it until you find what you want.
+
+Archive contents of output BFDs are chained through the
+ at code{next} pointer in a BFD.  The first one is findable through
+the @code{archive_head} slot of the archive.  Set it with
+ at code{bfd_set_archive_head} (q.v.).  A given BFD may be in only one
+open output archive at a time.
+
+As expected, the BFD archive code is more general than the
+archive code of any given environment.  BFD archives may
+contain files of different formats (e.g., a.out and coff) and
+even different architectures.  You may even place archives
+recursively into archives!
+
+This can cause unexpected confusion, since some archive
+formats are more expressive than others.  For instance, Intel
+COFF archives can preserve long filenames; SunOS a.out archives
+cannot.  If you move a file from the first to the second
+format and back again, the filename may be truncated.
+Likewise, different a.out environments have different
+conventions as to how they truncate filenames, whether they
+preserve directory names in filenames, etc.  When
+interoperating with native tools, be sure your files are
+homogeneous.
+
+Beware: most of these formats do not react well to the
+presence of spaces in filenames.  We do the best we can, but
+can't always handle this case due to restrictions in the format of
+archives.  Many Unix utilities are braindead in regards to
+spaces and such in filenames anyway, so this shouldn't be much
+of a restriction.
+
+Archives are supported in BFD in @code{archive.c}.
+
+ at subsection Archive functions
+
+
+ at findex bfd_get_next_mapent
+ at subsubsection @code{bfd_get_next_mapent}
+ at strong{Synopsis}
+ at example
+symindex bfd_get_next_mapent
+   (bfd *abfd, symindex previous, carsym **sym);
+ at end example
+ at strong{Description}@*
+Step through archive @var{abfd}'s symbol table (if it
+has one).  Successively update @var{sym} with the next symbol's
+information, returning that symbol's (internal) index into the
+symbol table.
+
+Supply @code{BFD_NO_MORE_SYMBOLS} as the @var{previous} entry to get
+the first one; returns @code{BFD_NO_MORE_SYMBOLS} when you've already
+got the last one.
+
+A @code{carsym} is a canonical archive symbol.  The only
+user-visible element is its name, a null-terminated string.
+
+ at findex bfd_set_archive_head
+ at subsubsection @code{bfd_set_archive_head}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_set_archive_head (bfd *output, bfd *new_head);
+ at end example
+ at strong{Description}@*
+Set the head of the chain of
+BFDs contained in the archive @var{output} to @var{new_head}.
+
+ at findex bfd_openr_next_archived_file
+ at subsubsection @code{bfd_openr_next_archived_file}
+ at strong{Synopsis}
+ at example
+bfd *bfd_openr_next_archived_file (bfd *archive, bfd *previous);
+ at end example
+ at strong{Description}@*
+Provided a BFD, @var{archive}, containing an archive and NULL, open
+an input BFD on the first contained element and returns that.
+Subsequent calls should pass
+the archive and the previous return value to return a created
+BFD to the next contained element. NULL is returned when there
+are no more.
 
diff --git a/bfd/doc/archures.texi b/bfd/doc/archures.texi
index 8b13789..726ba0a 100644
--- a/bfd/doc/archures.texi
+++ b/bfd/doc/archures.texi
@@ -1 +1,683 @@
+ at section Architectures
+BFD keeps one atom in a BFD describing the
+architecture of the data attached to the BFD: a pointer to a
+ at code{bfd_arch_info_type}.
+
+Pointers to structures can be requested independently of a BFD
+so that an architecture's information can be interrogated
+without access to an open BFD.
+
+The architecture information is provided by each architecture package.
+The set of default architectures is selected by the macro
+ at code{SELECT_ARCHITECTURES}.  This is normally set up in the
+ at file{config/@var{target}.mt} file of your choice.  If the name is not
+defined, then all the architectures supported are included.
+
+When BFD starts up, all the architectures are called with an
+initialize method.  It is up to the architecture back end to
+insert as many items into the list of architectures as it wants to;
+generally this would be one for each machine and one for the
+default case (an item with a machine field of 0).
+
+BFD's idea of an architecture is implemented in @file{archures.c}.
+
+ at subsection bfd_architecture
+
+
+ at strong{Description}@*
+This enum gives the object file's CPU architecture, in a
+global sense---i.e., what processor family does it belong to?
+Another field indicates which processor within
+the family is in use.  The machine gives a number which
+distinguishes different versions of the architecture,
+containing, for example, 2 and 3 for Intel i960 KA and i960 KB,
+and 68020 and 68030 for Motorola 68020 and 68030.
+ at example
+enum bfd_architecture
+@{
+  bfd_arch_unknown,   /* File arch not known.  */
+  bfd_arch_obscure,   /* Arch known, not one of these.  */
+  bfd_arch_m68k,      /* Motorola 68xxx */
+#define bfd_mach_m68000 1
+#define bfd_mach_m68008 2
+#define bfd_mach_m68010 3
+#define bfd_mach_m68020 4
+#define bfd_mach_m68030 5
+#define bfd_mach_m68040 6
+#define bfd_mach_m68060 7
+#define bfd_mach_cpu32  8
+#define bfd_mach_fido   9
+#define bfd_mach_mcf_isa_a_nodiv 10
+#define bfd_mach_mcf_isa_a 11
+#define bfd_mach_mcf_isa_a_mac 12
+#define bfd_mach_mcf_isa_a_emac 13
+#define bfd_mach_mcf_isa_aplus 14
+#define bfd_mach_mcf_isa_aplus_mac 15
+#define bfd_mach_mcf_isa_aplus_emac 16
+#define bfd_mach_mcf_isa_b_nousp 17
+#define bfd_mach_mcf_isa_b_nousp_mac 18
+#define bfd_mach_mcf_isa_b_nousp_emac 19
+#define bfd_mach_mcf_isa_b 20
+#define bfd_mach_mcf_isa_b_mac 21
+#define bfd_mach_mcf_isa_b_emac 22
+#define bfd_mach_mcf_isa_b_float 23
+#define bfd_mach_mcf_isa_b_float_mac 24
+#define bfd_mach_mcf_isa_b_float_emac 25
+#define bfd_mach_mcf_isa_c 26
+#define bfd_mach_mcf_isa_c_mac 27
+#define bfd_mach_mcf_isa_c_emac 28
+#define bfd_mach_mcf_isa_c_nodiv 29
+#define bfd_mach_mcf_isa_c_nodiv_mac 30
+#define bfd_mach_mcf_isa_c_nodiv_emac 31
+  bfd_arch_vax,       /* DEC Vax */
+  bfd_arch_i960,      /* Intel 960 */
+    /* The order of the following is important.
+       lower number indicates a machine type that
+       only accepts a subset of the instructions
+       available to machines with higher numbers.
+       The exception is the "ca", which is
+       incompatible with all other machines except
+       "core".  */
+
+#define bfd_mach_i960_core      1
+#define bfd_mach_i960_ka_sa     2
+#define bfd_mach_i960_kb_sb     3
+#define bfd_mach_i960_mc        4
+#define bfd_mach_i960_xa        5
+#define bfd_mach_i960_ca        6
+#define bfd_mach_i960_jx        7
+#define bfd_mach_i960_hx        8
+
+  bfd_arch_or32,      /* OpenRISC 32 */
+
+  bfd_arch_sparc,     /* SPARC */
+#define bfd_mach_sparc                 1
+/* The difference between v8plus and v9 is that v9 is a true 64 bit env.  */
+#define bfd_mach_sparc_sparclet        2
+#define bfd_mach_sparc_sparclite       3
+#define bfd_mach_sparc_v8plus          4
+#define bfd_mach_sparc_v8plusa         5 /* with ultrasparc add'ns.  */
+#define bfd_mach_sparc_sparclite_le    6
+#define bfd_mach_sparc_v9              7
+#define bfd_mach_sparc_v9a             8 /* with ultrasparc add'ns.  */
+#define bfd_mach_sparc_v8plusb         9 /* with cheetah add'ns.  */
+#define bfd_mach_sparc_v9b             10 /* with cheetah add'ns.  */
+/* Nonzero if MACH has the v9 instruction set.  */
+#define bfd_mach_sparc_v9_p(mach) \
+  ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9b \
+   && (mach) != bfd_mach_sparc_sparclite_le)
+/* Nonzero if MACH is a 64 bit sparc architecture.  */
+#define bfd_mach_sparc_64bit_p(mach) \
+  ((mach) >= bfd_mach_sparc_v9 && (mach) != bfd_mach_sparc_v8plusb)
+  bfd_arch_spu,       /* PowerPC SPU */
+#define bfd_mach_spu           256 
+  bfd_arch_mips,      /* MIPS Rxxxx */
+#define bfd_mach_mips3000              3000
+#define bfd_mach_mips3900              3900
+#define bfd_mach_mips4000              4000
+#define bfd_mach_mips4010              4010
+#define bfd_mach_mips4100              4100
+#define bfd_mach_mips4111              4111
+#define bfd_mach_mips4120              4120
+#define bfd_mach_mips4300              4300
+#define bfd_mach_mips4400              4400
+#define bfd_mach_mips4600              4600
+#define bfd_mach_mips4650              4650
+#define bfd_mach_mips5000              5000
+#define bfd_mach_mips5400              5400
+#define bfd_mach_mips5500              5500
+#define bfd_mach_mips6000              6000
+#define bfd_mach_mips7000              7000
+#define bfd_mach_mips8000              8000
+#define bfd_mach_mips9000              9000
+#define bfd_mach_mips10000             10000
+#define bfd_mach_mips12000             12000
+#define bfd_mach_mips14000             14000
+#define bfd_mach_mips16000             16000
+#define bfd_mach_mips16                16
+#define bfd_mach_mips5                 5
+#define bfd_mach_mips_loongson_2e      3001
+#define bfd_mach_mips_loongson_2f      3002
+#define bfd_mach_mips_loongson_3a      3003
+#define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+#define bfd_mach_mips_octeon           6501
+#define bfd_mach_mips_octeonp          6601
+#define bfd_mach_mips_octeon2          6502
+#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
+#define bfd_mach_mipsisa32             32
+#define bfd_mach_mipsisa32r2           33
+#define bfd_mach_mipsisa64             64
+#define bfd_mach_mipsisa64r2           65
+#define bfd_mach_mips_micromips        96
+  bfd_arch_i386,      /* Intel 386 */
+#define bfd_mach_i386_intel_syntax     (1 << 0)
+#define bfd_mach_i386_i8086            (1 << 1)
+#define bfd_mach_i386_i386             (1 << 2)
+#define bfd_mach_x86_64                (1 << 3)
+#define bfd_mach_x64_32                (1 << 4)
+#define bfd_mach_i386_i386_intel_syntax (bfd_mach_i386_i386 | bfd_mach_i386_intel_syntax)
+#define bfd_mach_x86_64_intel_syntax   (bfd_mach_x86_64 | bfd_mach_i386_intel_syntax)
+#define bfd_mach_x64_32_intel_syntax   (bfd_mach_x64_32 | bfd_mach_i386_intel_syntax)
+  bfd_arch_l1om,   /* Intel L1OM */
+#define bfd_mach_l1om                  (1 << 5)
+#define bfd_mach_l1om_intel_syntax     (bfd_mach_l1om | bfd_mach_i386_intel_syntax)
+  bfd_arch_k1om,   /* Intel K1OM */
+#define bfd_mach_k1om                  (1 << 6)
+#define bfd_mach_k1om_intel_syntax     (bfd_mach_k1om | bfd_mach_i386_intel_syntax)
+  bfd_arch_we32k,     /* AT&T WE32xxx */
+  bfd_arch_tahoe,     /* CCI/Harris Tahoe */
+  bfd_arch_i860,      /* Intel 860 */
+  bfd_arch_i370,      /* IBM 360/370 Mainframes */
+  bfd_arch_romp,      /* IBM ROMP PC/RT */
+  bfd_arch_convex,    /* Convex */
+  bfd_arch_m88k,      /* Motorola 88xxx */
+  bfd_arch_m98k,      /* Motorola 98xxx */
+  bfd_arch_pyramid,   /* Pyramid Technology */
+  bfd_arch_h8300,     /* Renesas H8/300 (formerly Hitachi H8/300) */
+#define bfd_mach_h8300    1
+#define bfd_mach_h8300h   2
+#define bfd_mach_h8300s   3
+#define bfd_mach_h8300hn  4
+#define bfd_mach_h8300sn  5
+#define bfd_mach_h8300sx  6
+#define bfd_mach_h8300sxn 7
+  bfd_arch_pdp11,     /* DEC PDP-11 */
+  bfd_arch_plugin,
+  bfd_arch_powerpc,   /* PowerPC */
+#define bfd_mach_ppc           32
+#define bfd_mach_ppc64         64
+#define bfd_mach_ppc_403       403
+#define bfd_mach_ppc_403gc     4030
+#define bfd_mach_ppc_405       405
+#define bfd_mach_ppc_505       505
+#define bfd_mach_ppc_601       601
+#define bfd_mach_ppc_602       602
+#define bfd_mach_ppc_603       603
+#define bfd_mach_ppc_ec603e    6031
+#define bfd_mach_ppc_604       604
+#define bfd_mach_ppc_620       620
+#define bfd_mach_ppc_630       630
+#define bfd_mach_ppc_750       750
+#define bfd_mach_ppc_860       860
+#define bfd_mach_ppc_a35       35
+#define bfd_mach_ppc_rs64ii    642
+#define bfd_mach_ppc_rs64iii   643
+#define bfd_mach_ppc_7400      7400
+#define bfd_mach_ppc_e500      500
+#define bfd_mach_ppc_e500mc    5001
+#define bfd_mach_ppc_e500mc64  5005
+#define bfd_mach_ppc_e5500     5006
+#define bfd_mach_ppc_e6500     5007
+#define bfd_mach_ppc_titan     83
+#define bfd_mach_ppc_vle       84
+  bfd_arch_rs6000,    /* IBM RS/6000 */
+#define bfd_mach_rs6k          6000
+#define bfd_mach_rs6k_rs1      6001
+#define bfd_mach_rs6k_rsc      6003
+#define bfd_mach_rs6k_rs2      6002
+  bfd_arch_hppa,      /* HP PA RISC */
+#define bfd_mach_hppa10        10
+#define bfd_mach_hppa11        11
+#define bfd_mach_hppa20        20
+#define bfd_mach_hppa20w       25
+  bfd_arch_d10v,      /* Mitsubishi D10V */
+#define bfd_mach_d10v          1
+#define bfd_mach_d10v_ts2      2
+#define bfd_mach_d10v_ts3      3
+  bfd_arch_d30v,      /* Mitsubishi D30V */
+  bfd_arch_dlx,       /* DLX */
+  bfd_arch_m68hc11,   /* Motorola 68HC11 */
+  bfd_arch_m68hc12,   /* Motorola 68HC12 */
+#define bfd_mach_m6812_default 0
+#define bfd_mach_m6812         1
+#define bfd_mach_m6812s        2
+  bfd_arch_m9s12x,   /* Freescale S12X */
+  bfd_arch_m9s12xg,  /* Freescale XGATE */
+  bfd_arch_z8k,       /* Zilog Z8000 */
+#define bfd_mach_z8001         1
+#define bfd_mach_z8002         2
+  bfd_arch_h8500,     /* Renesas H8/500 (formerly Hitachi H8/500) */
+  bfd_arch_sh,        /* Renesas / SuperH SH (formerly Hitachi SH) */
+#define bfd_mach_sh            1
+#define bfd_mach_sh2        0x20
+#define bfd_mach_sh_dsp     0x2d
+#define bfd_mach_sh2a       0x2a
+#define bfd_mach_sh2a_nofpu 0x2b
+#define bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu 0x2a1
+#define bfd_mach_sh2a_nofpu_or_sh3_nommu 0x2a2
+#define bfd_mach_sh2a_or_sh4  0x2a3
+#define bfd_mach_sh2a_or_sh3e 0x2a4
+#define bfd_mach_sh2e       0x2e
+#define bfd_mach_sh3        0x30
+#define bfd_mach_sh3_nommu  0x31
+#define bfd_mach_sh3_dsp    0x3d
+#define bfd_mach_sh3e       0x3e
+#define bfd_mach_sh4        0x40
+#define bfd_mach_sh4_nofpu  0x41
+#define bfd_mach_sh4_nommu_nofpu  0x42
+#define bfd_mach_sh4a       0x4a
+#define bfd_mach_sh4a_nofpu 0x4b
+#define bfd_mach_sh4al_dsp  0x4d
+#define bfd_mach_sh5        0x50
+  bfd_arch_alpha,     /* Dec Alpha */
+#define bfd_mach_alpha_ev4  0x10
+#define bfd_mach_alpha_ev5  0x20
+#define bfd_mach_alpha_ev6  0x30
+  bfd_arch_arm,       /* Advanced Risc Machines ARM.  */
+#define bfd_mach_arm_unknown   0
+#define bfd_mach_arm_2         1
+#define bfd_mach_arm_2a        2
+#define bfd_mach_arm_3         3
+#define bfd_mach_arm_3M        4
+#define bfd_mach_arm_4         5
+#define bfd_mach_arm_4T        6
+#define bfd_mach_arm_5         7
+#define bfd_mach_arm_5T        8
+#define bfd_mach_arm_5TE       9
+#define bfd_mach_arm_XScale    10
+#define bfd_mach_arm_ep9312    11
+#define bfd_mach_arm_iWMMXt    12
+#define bfd_mach_arm_iWMMXt2   13
+  bfd_arch_ns32k,     /* National Semiconductors ns32000 */
+  bfd_arch_w65,       /* WDC 65816 */
+  bfd_arch_tic30,     /* Texas Instruments TMS320C30 */
+  bfd_arch_tic4x,     /* Texas Instruments TMS320C3X/4X */
+#define bfd_mach_tic3x         30
+#define bfd_mach_tic4x         40
+  bfd_arch_tic54x,    /* Texas Instruments TMS320C54X */
+  bfd_arch_tic6x,     /* Texas Instruments TMS320C6X */
+  bfd_arch_tic80,     /* TI TMS320c80 (MVP) */
+  bfd_arch_v850,      /* NEC V850 */
+#define bfd_mach_v850          1
+#define bfd_mach_v850e         'E'
+#define bfd_mach_v850e1        '1'
+#define bfd_mach_v850e2        0x4532
+#define bfd_mach_v850e2v3      0x45325633
+  bfd_arch_arc,       /* ARC Cores */
+#define bfd_mach_arc_5         5
+#define bfd_mach_arc_6         6
+#define bfd_mach_arc_7         7
+#define bfd_mach_arc_8         8
+ bfd_arch_m32c,     /* Renesas M16C/M32C.  */
+#define bfd_mach_m16c        0x75
+#define bfd_mach_m32c        0x78
+  bfd_arch_m32r,      /* Renesas M32R (formerly Mitsubishi M32R/D) */
+#define bfd_mach_m32r          1 /* For backwards compatibility.  */
+#define bfd_mach_m32rx         'x'
+#define bfd_mach_m32r2         '2'
+  bfd_arch_mn10200,   /* Matsushita MN10200 */
+  bfd_arch_mn10300,   /* Matsushita MN10300 */
+#define bfd_mach_mn10300               300
+#define bfd_mach_am33          330
+#define bfd_mach_am33_2        332
+  bfd_arch_fr30,
+#define bfd_mach_fr30          0x46523330
+  bfd_arch_frv,
+#define bfd_mach_frv           1
+#define bfd_mach_frvsimple     2
+#define bfd_mach_fr300         300
+#define bfd_mach_fr400         400
+#define bfd_mach_fr450         450
+#define bfd_mach_frvtomcat     499     /* fr500 prototype */
+#define bfd_mach_fr500         500
+#define bfd_mach_fr550         550
+  bfd_arch_moxie,       /* The moxie processor */
+#define bfd_mach_moxie         1
+  bfd_arch_mcore,
+  bfd_arch_mep,
+#define bfd_mach_mep           1
+#define bfd_mach_mep_h1        0x6831
+#define bfd_mach_mep_c5        0x6335
+  bfd_arch_ia64,      /* HP/Intel ia64 */
+#define bfd_mach_ia64_elf64    64
+#define bfd_mach_ia64_elf32    32
+  bfd_arch_ip2k,      /* Ubicom IP2K microcontrollers. */
+#define bfd_mach_ip2022        1
+#define bfd_mach_ip2022ext     2
+ bfd_arch_iq2000,     /* Vitesse IQ2000.  */
+#define bfd_mach_iq2000        1
+#define bfd_mach_iq10          2
+  bfd_arch_epiphany,   /* Adapteva EPIPHANY */
+#define bfd_mach_epiphany16    1
+#define bfd_mach_epiphany32    2
+  bfd_arch_mt,
+#define bfd_mach_ms1           1
+#define bfd_mach_mrisc2        2
+#define bfd_mach_ms2           3
+  bfd_arch_pj,
+  bfd_arch_avr,       /* Atmel AVR microcontrollers.  */
+#define bfd_mach_avr1          1
+#define bfd_mach_avr2          2
+#define bfd_mach_avr25         25
+#define bfd_mach_avr3          3
+#define bfd_mach_avr31         31
+#define bfd_mach_avr35         35
+#define bfd_mach_avr4          4
+#define bfd_mach_avr5          5
+#define bfd_mach_avr51         51
+#define bfd_mach_avr6          6
+#define bfd_mach_avrxmega1 101
+#define bfd_mach_avrxmega2 102
+#define bfd_mach_avrxmega3 103
+#define bfd_mach_avrxmega4 104
+#define bfd_mach_avrxmega5 105
+#define bfd_mach_avrxmega6 106
+#define bfd_mach_avrxmega7 107
+  bfd_arch_bfin,        /* ADI Blackfin */
+#define bfd_mach_bfin          1
+  bfd_arch_cr16,       /* National Semiconductor CompactRISC (ie CR16). */
+#define bfd_mach_cr16          1
+  bfd_arch_cr16c,       /* National Semiconductor CompactRISC. */
+#define bfd_mach_cr16c         1
+  bfd_arch_crx,       /*  National Semiconductor CRX.  */
+#define bfd_mach_crx           1
+  bfd_arch_cris,      /* Axis CRIS */
+#define bfd_mach_cris_v0_v10   255
+#define bfd_mach_cris_v32      32
+#define bfd_mach_cris_v10_v32  1032
+  bfd_arch_rl78,
+#define bfd_mach_rl78  0x75
+  bfd_arch_rx,        /* Renesas RX.  */
+#define bfd_mach_rx            0x75
+  bfd_arch_s390,      /* IBM s390 */
+#define bfd_mach_s390_31       31
+#define bfd_mach_s390_64       64
+  bfd_arch_score,     /* Sunplus score */ 
+#define bfd_mach_score3         3
+#define bfd_mach_score7         7
+  bfd_arch_openrisc,  /* OpenRISC */
+  bfd_arch_mmix,      /* Donald Knuth's educational processor.  */
+  bfd_arch_xstormy16,
+#define bfd_mach_xstormy16     1
+  bfd_arch_msp430,    /* Texas Instruments MSP430 architecture.  */
+#define bfd_mach_msp11          11
+#define bfd_mach_msp110         110
+#define bfd_mach_msp12          12
+#define bfd_mach_msp13          13
+#define bfd_mach_msp14          14
+#define bfd_mach_msp15          15
+#define bfd_mach_msp16          16
+#define bfd_mach_msp21          21
+#define bfd_mach_msp31          31
+#define bfd_mach_msp32          32
+#define bfd_mach_msp33          33
+#define bfd_mach_msp41          41
+#define bfd_mach_msp42          42
+#define bfd_mach_msp43          43
+#define bfd_mach_msp44          44
+  bfd_arch_xc16x,     /* Infineon's XC16X Series.               */
+#define bfd_mach_xc16x         1
+#define bfd_mach_xc16xl        2
+#define bfd_mach_xc16xs        3
+  bfd_arch_xgate,   /* Freescale XGATE */
+#define bfd_mach_xgate         1
+  bfd_arch_xtensa,    /* Tensilica's Xtensa cores.  */
+#define bfd_mach_xtensa        1
+  bfd_arch_z80,
+#define bfd_mach_z80strict      1 /* No undocumented opcodes.  */
+#define bfd_mach_z80            3 /* With ixl, ixh, iyl, and iyh.  */
+#define bfd_mach_z80full        7 /* All undocumented instructions.  */
+#define bfd_mach_r800           11 /* R800: successor with multiplication.  */
+  bfd_arch_lm32,      /* Lattice Mico32 */
+#define bfd_mach_lm32      1
+  bfd_arch_microblaze,/* Xilinx MicroBlaze. */
+  bfd_arch_tilepro,   /* Tilera TILEPro */
+  bfd_arch_tilegx, /* Tilera TILE-Gx */
+#define bfd_mach_tilepro   1
+#define bfd_mach_tilegx    1
+#define bfd_mach_tilegx32  2
+  bfd_arch_last
+  @};
+ at end example
+
+ at subsection bfd_arch_info
+
+
+ at strong{Description}@*
+This structure contains information on architectures for use
+within BFD.
+ at example
+
+typedef struct bfd_arch_info
+@{
+  int bits_per_word;
+  int bits_per_address;
+  int bits_per_byte;
+  enum bfd_architecture arch;
+  unsigned long mach;
+  const char *arch_name;
+  const char *printable_name;
+  unsigned int section_align_power;
+  /* TRUE if this is the default machine for the architecture.
+     The default arch should be the first entry for an arch so that
+     all the entries for that arch can be accessed via @code{next}.  */
+  bfd_boolean the_default;
+  const struct bfd_arch_info * (*compatible)
+    (const struct bfd_arch_info *a, const struct bfd_arch_info *b);
+
+  bfd_boolean (*scan) (const struct bfd_arch_info *, const char *);
+
+  /* Allocate via bfd_malloc and return a fill buffer of size COUNT.  If
+     IS_BIGENDIAN is TRUE, the order of bytes is big endian.  If CODE is
+     TRUE, the buffer contains code.  */
+  void *(*fill) (bfd_size_type count, bfd_boolean is_bigendian,
+                 bfd_boolean code);
+
+  const struct bfd_arch_info *next;
+@}
+bfd_arch_info_type;
+
+ at end example
+
+ at findex bfd_printable_name
+ at subsubsection @code{bfd_printable_name}
+ at strong{Synopsis}
+ at example
+const char *bfd_printable_name (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Return a printable string representing the architecture and machine
+from the pointer to the architecture info structure.
+
+ at findex bfd_scan_arch
+ at subsubsection @code{bfd_scan_arch}
+ at strong{Synopsis}
+ at example
+const bfd_arch_info_type *bfd_scan_arch (const char *string);
+ at end example
+ at strong{Description}@*
+Figure out if BFD supports any cpu which could be described with
+the name @var{string}.  Return a pointer to an @code{arch_info}
+structure if a machine is found, otherwise NULL.
+
+ at findex bfd_arch_list
+ at subsubsection @code{bfd_arch_list}
+ at strong{Synopsis}
+ at example
+const char **bfd_arch_list (void);
+ at end example
+ at strong{Description}@*
+Return a freshly malloced NULL-terminated vector of the names
+of all the valid BFD architectures.  Do not modify the names.
+
+ at findex bfd_arch_get_compatible
+ at subsubsection @code{bfd_arch_get_compatible}
+ at strong{Synopsis}
+ at example
+const bfd_arch_info_type *bfd_arch_get_compatible
+   (const bfd *abfd, const bfd *bbfd, bfd_boolean accept_unknowns);
+ at end example
+ at strong{Description}@*
+Determine whether two BFDs' architectures and machine types
+are compatible.  Calculates the lowest common denominator
+between the two architectures and machine types implied by
+the BFDs and returns a pointer to an @code{arch_info} structure
+describing the compatible machine.
+
+ at findex bfd_default_arch_struct
+ at subsubsection @code{bfd_default_arch_struct}
+ at strong{Description}@*
+The @code{bfd_default_arch_struct} is an item of
+ at code{bfd_arch_info_type} which has been initialized to a fairly
+generic state.  A BFD starts life by pointing to this
+structure, until the correct back end has determined the real
+architecture of the file.
+ at example
+extern const bfd_arch_info_type bfd_default_arch_struct;
+ at end example
+
+ at findex bfd_set_arch_info
+ at subsubsection @code{bfd_set_arch_info}
+ at strong{Synopsis}
+ at example
+void bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg);
+ at end example
+ at strong{Description}@*
+Set the architecture info of @var{abfd} to @var{arg}.
+
+ at findex bfd_default_set_arch_mach
+ at subsubsection @code{bfd_default_set_arch_mach}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_default_set_arch_mach
+   (bfd *abfd, enum bfd_architecture arch, unsigned long mach);
+ at end example
+ at strong{Description}@*
+Set the architecture and machine type in BFD @var{abfd}
+to @var{arch} and @var{mach}.  Find the correct
+pointer to a structure and insert it into the @code{arch_info}
+pointer.
+
+ at findex bfd_get_arch
+ at subsubsection @code{bfd_get_arch}
+ at strong{Synopsis}
+ at example
+enum bfd_architecture bfd_get_arch (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Return the enumerated type which describes the BFD @var{abfd}'s
+architecture.
+
+ at findex bfd_get_mach
+ at subsubsection @code{bfd_get_mach}
+ at strong{Synopsis}
+ at example
+unsigned long bfd_get_mach (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Return the long type which describes the BFD @var{abfd}'s
+machine.
+
+ at findex bfd_arch_bits_per_byte
+ at subsubsection @code{bfd_arch_bits_per_byte}
+ at strong{Synopsis}
+ at example
+unsigned int bfd_arch_bits_per_byte (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Return the number of bits in one of the BFD @var{abfd}'s
+architecture's bytes.
+
+ at findex bfd_arch_bits_per_address
+ at subsubsection @code{bfd_arch_bits_per_address}
+ at strong{Synopsis}
+ at example
+unsigned int bfd_arch_bits_per_address (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Return the number of bits in one of the BFD @var{abfd}'s
+architecture's addresses.
+
+ at findex bfd_default_compatible
+ at subsubsection @code{bfd_default_compatible}
+ at strong{Synopsis}
+ at example
+const bfd_arch_info_type *bfd_default_compatible
+   (const bfd_arch_info_type *a, const bfd_arch_info_type *b);
+ at end example
+ at strong{Description}@*
+The default function for testing for compatibility.
+
+ at findex bfd_default_scan
+ at subsubsection @code{bfd_default_scan}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_default_scan
+   (const struct bfd_arch_info *info, const char *string);
+ at end example
+ at strong{Description}@*
+The default function for working out whether this is an
+architecture hit and a machine hit.
+
+ at findex bfd_get_arch_info
+ at subsubsection @code{bfd_get_arch_info}
+ at strong{Synopsis}
+ at example
+const bfd_arch_info_type *bfd_get_arch_info (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Return the architecture info struct in @var{abfd}.
+
+ at findex bfd_lookup_arch
+ at subsubsection @code{bfd_lookup_arch}
+ at strong{Synopsis}
+ at example
+const bfd_arch_info_type *bfd_lookup_arch
+   (enum bfd_architecture arch, unsigned long machine);
+ at end example
+ at strong{Description}@*
+Look for the architecture info structure which matches the
+arguments @var{arch} and @var{machine}. A machine of 0 matches the
+machine/architecture structure which marks itself as the
+default.
+
+ at findex bfd_printable_arch_mach
+ at subsubsection @code{bfd_printable_arch_mach}
+ at strong{Synopsis}
+ at example
+const char *bfd_printable_arch_mach
+   (enum bfd_architecture arch, unsigned long machine);
+ at end example
+ at strong{Description}@*
+Return a printable string representing the architecture and
+machine type.
+
+This routine is depreciated.
+
+ at findex bfd_octets_per_byte
+ at subsubsection @code{bfd_octets_per_byte}
+ at strong{Synopsis}
+ at example
+unsigned int bfd_octets_per_byte (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Return the number of octets (8-bit quantities) per target byte
+(minimum addressable unit).  In most cases, this will be one, but some
+DSP targets have 16, 32, or even 48 bits per byte.
+
+ at findex bfd_arch_mach_octets_per_byte
+ at subsubsection @code{bfd_arch_mach_octets_per_byte}
+ at strong{Synopsis}
+ at example
+unsigned int bfd_arch_mach_octets_per_byte
+   (enum bfd_architecture arch, unsigned long machine);
+ at end example
+ at strong{Description}@*
+See bfd_octets_per_byte.
+
+This routine is provided for those cases where a bfd * is not
+available
+
+ at findex bfd_arch_default_fill
+ at subsubsection @code{bfd_arch_default_fill}
+ at strong{Synopsis}
+ at example
+void *bfd_arch_default_fill (bfd_size_type count,
+    bfd_boolean is_bigendian,
+    bfd_boolean code);
+ at end example
+ at strong{Description}@*
+Allocate via bfd_malloc and return a fill buffer of size COUNT.
+If IS_BIGENDIAN is TRUE, the order of bytes is big endian.  If
+CODE is TRUE, the buffer contains code.
 
diff --git a/bfd/doc/bfd.info b/bfd/doc/bfd.info
new file mode 100644
index 0000000..f38bee1
--- /dev/null
+++ b/bfd/doc/bfd.info
@@ -0,0 +1,12515 @@
+This is bfd.info, produced by makeinfo version 4.8 from bfd.texinfo.
+
+INFO-DIR-SECTION Software development
+START-INFO-DIR-ENTRY
+* Bfd: (bfd).                   The Binary File Descriptor library.
+END-INFO-DIR-ENTRY
+
+   This file documents the BFD library.
+
+   Copyright (C) 1991, 2000, 2001, 2003, 2006, 2007, 2008 Free Software
+Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "GNU General Public License" and "Funding Free
+Software", the Front-Cover texts being (a) (see below), and with the
+Back-Cover Texts being (b) (see below).  A copy of the license is
+included in the section entitled "GNU Free Documentation License".
+
+   (a) The FSF's Front-Cover Text is:
+
+   A GNU Manual
+
+   (b) The FSF's Back-Cover Text is:
+
+   You have freedom to copy and modify this GNU Manual, like GNU
+software.  Copies published by the Free Software Foundation raise
+funds for GNU development.
+
+
+File: bfd.info,  Node: Top,  Next: Overview,  Prev: (dir),  Up: (dir)
+
+   This file documents the binary file descriptor library libbfd.
+
+* Menu:
+
+* Overview::			Overview of BFD
+* BFD front end::		BFD front end
+* BFD back ends::		BFD back ends
+* GNU Free Documentation License::  GNU Free Documentation License
+* BFD Index::		BFD Index
+
+
+File: bfd.info,  Node: Overview,  Next: BFD front end,  Prev: Top,  Up: Top
+
+1 Introduction
+**************
+
+BFD is a package which allows applications to use the same routines to
+operate on object files whatever the object file format.  A new object
+file format can be supported simply by creating a new BFD back end and
+adding it to the library.
+
+   BFD is split into two parts: the front end, and the back ends (one
+for each object file format).
+   * The front end of BFD provides the interface to the user. It manages
+     memory and various canonical data structures. The front end also
+     decides which back end to use and when to call back end routines.
+
+   * The back ends provide BFD its view of the real world. Each back
+     end provides a set of calls which the BFD front end can use to
+     maintain its canonical form. The back ends also may keep around
+     information for their own use, for greater efficiency.
+
+* Menu:
+
+* History::			History
+* How It Works::		How It Works
+* What BFD Version 2 Can Do::	What BFD Version 2 Can Do
+
+
+File: bfd.info,  Node: History,  Next: How It Works,  Prev: Overview,  Up: Overview
+
+1.1 History
+===========
+
+One spur behind BFD was the desire, on the part of the GNU 960 team at
+Intel Oregon, for interoperability of applications on their COFF and
+b.out file formats.  Cygnus was providing GNU support for the team, and
+was contracted to provide the required functionality.
+
+   The name came from a conversation David Wallace was having with
+Richard Stallman about the library: RMS said that it would be quite
+hard--David said "BFD".  Stallman was right, but the name stuck.
+
+   At the same time, Ready Systems wanted much the same thing, but for
+different object file formats: IEEE-695, Oasys, Srecords, a.out and 68k
+coff.
+
+   BFD was first implemented by members of Cygnus Support; Steve
+Chamberlain (`sac at cygnus.com'), John Gilmore (`gnu at cygnus.com'), K.
+Richard Pixley (`rich at cygnus.com') and David Henkel-Wallace
+(`gumby at cygnus.com').
+
+
+File: bfd.info,  Node: How It Works,  Next: What BFD Version 2 Can Do,  Prev: History,  Up: Overview
+
+1.2 How To Use BFD
+==================
+
+To use the library, include `bfd.h' and link with `libbfd.a'.
+
+   BFD provides a common interface to the parts of an object file for a
+calling application.
+
+   When an application successfully opens a target file (object,
+archive, or whatever), a pointer to an internal structure is returned.
+This pointer points to a structure called `bfd', described in `bfd.h'.
+Our convention is to call this pointer a BFD, and instances of it
+within code `abfd'.  All operations on the target object file are
+applied as methods to the BFD.  The mapping is defined within `bfd.h'
+in a set of macros, all beginning with `bfd_' to reduce namespace
+pollution.
+
+   For example, this sequence does what you would probably expect:
+return the number of sections in an object file attached to a BFD
+`abfd'.
+
+     #include "bfd.h"
+
+     unsigned int number_of_sections (abfd)
+     bfd *abfd;
+     {
+       return bfd_count_sections (abfd);
+     }
+
+   The abstraction used within BFD is that an object file has:
+
+   * a header,
+
+   * a number of sections containing raw data (*note Sections::),
+
+   * a set of relocations (*note Relocations::), and
+
+   * some symbol information (*note Symbols::).
+   Also, BFDs opened for archives have the additional attribute of an
+index and contain subordinate BFDs. This approach is fine for a.out and
+coff, but loses efficiency when applied to formats such as S-records and
+IEEE-695.
+
+
+File: bfd.info,  Node: What BFD Version 2 Can Do,  Prev: How It Works,  Up: Overview
+
+1.3 What BFD Version 2 Can Do
+=============================
+
+When an object file is opened, BFD subroutines automatically determine
+the format of the input object file.  They then build a descriptor in
+memory with pointers to routines that will be used to access elements of
+the object file's data structures.
+
+   As different information from the object files is required, BFD
+reads from different sections of the file and processes them.  For
+example, a very common operation for the linker is processing symbol
+tables.  Each BFD back end provides a routine for converting between
+the object file's representation of symbols and an internal canonical
+format. When the linker asks for the symbol table of an object file, it
+calls through a memory pointer to the routine from the relevant BFD
+back end which reads and converts the table into a canonical form.  The
+linker then operates upon the canonical form. When the link is finished
+and the linker writes the output file's symbol table, another BFD back
+end routine is called to take the newly created symbol table and
+convert it into the chosen output format.
+
+* Menu:
+
+* BFD information loss::	Information Loss
+* Canonical format::		The BFD	canonical object-file format
+
+
+File: bfd.info,  Node: BFD information loss,  Next: Canonical format,  Up: What BFD Version 2 Can Do
+
+1.3.1 Information Loss
+----------------------
+
+_Information can be lost during output._ The output formats supported
+by BFD do not provide identical facilities, and information which can
+be described in one form has nowhere to go in another format. One
+example of this is alignment information in `b.out'. There is nowhere
+in an `a.out' format file to store alignment information on the
+contained data, so when a file is linked from `b.out' and an `a.out'
+image is produced, alignment information will not propagate to the
+output file. (The linker will still use the alignment information
+internally, so the link is performed correctly).
+
+   Another example is COFF section names. COFF files may contain an
+unlimited number of sections, each one with a textual section name. If
+the target of the link is a format which does not have many sections
+(e.g., `a.out') or has sections without names (e.g., the Oasys format),
+the link cannot be done simply. You can circumvent this problem by
+describing the desired input-to-output section mapping with the linker
+command language.
+
+   _Information can be lost during canonicalization._ The BFD internal
+canonical form of the external formats is not exhaustive; there are
+structures in input formats for which there is no direct representation
+internally.  This means that the BFD back ends cannot maintain all
+possible data richness through the transformation between external to
+internal and back to external formats.
+
+   This limitation is only a problem when an application reads one
+format and writes another.  Each BFD back end is responsible for
+maintaining as much data as possible, and the internal BFD canonical
+form has structures which are opaque to the BFD core, and exported only
+to the back ends. When a file is read in one format, the canonical form
+is generated for BFD and the application. At the same time, the back
+end saves away any information which may otherwise be lost. If the data
+is then written back in the same format, the back end routine will be
+able to use the canonical form provided by the BFD core as well as the
+information it prepared earlier.  Since there is a great deal of
+commonality between back ends, there is no information lost when
+linking or copying big endian COFF to little endian COFF, or `a.out' to
+`b.out'.  When a mixture of formats is linked, the information is only
+lost from the files whose format differs from the destination.
+
+
+File: bfd.info,  Node: Canonical format,  Prev: BFD information loss,  Up: What BFD Version 2 Can Do
+
+1.3.2 The BFD canonical object-file format
+------------------------------------------
+
+The greatest potential for loss of information occurs when there is the
+least overlap between the information provided by the source format,
+that stored by the canonical format, and that needed by the destination
+format. A brief description of the canonical form may help you
+understand which kinds of data you can count on preserving across
+conversions.  
+
+_files_
+     Information stored on a per-file basis includes target machine
+     architecture, particular implementation format type, a demand
+     pageable bit, and a write protected bit.  Information like Unix
+     magic numbers is not stored here--only the magic numbers' meaning,
+     so a `ZMAGIC' file would have both the demand pageable bit and the
+     write protected text bit set.  The byte order of the target is
+     stored on a per-file basis, so that big- and little-endian object
+     files may be used with one another.
+
+_sections_
+     Each section in the input file contains the name of the section,
+     the section's original address in the object file, size and
+     alignment information, various flags, and pointers into other BFD
+     data structures.
+
+_symbols_
+     Each symbol contains a pointer to the information for the object
+     file which originally defined it, its name, its value, and various
+     flag bits.  When a BFD back end reads in a symbol table, it
+     relocates all symbols to make them relative to the base of the
+     section where they were defined.  Doing this ensures that each
+     symbol points to its containing section.  Each symbol also has a
+     varying amount of hidden private data for the BFD back end.  Since
+     the symbol points to the original file, the private data format
+     for that symbol is accessible.  `ld' can operate on a collection
+     of symbols of wildly different formats without problems.
+
+     Normal global and simple local symbols are maintained on output,
+     so an output file (no matter its format) will retain symbols
+     pointing to functions and to global, static, and common variables.
+     Some symbol information is not worth retaining; in `a.out', type
+     information is stored in the symbol table as long symbol names.
+     This information would be useless to most COFF debuggers; the
+     linker has command line switches to allow users to throw it away.
+
+     There is one word of type information within the symbol, so if the
+     format supports symbol type information within symbols (for
+     example, COFF, IEEE, Oasys) and the type is simple enough to fit
+     within one word (nearly everything but aggregates), the
+     information will be preserved.
+
+_relocation level_
+     Each canonical BFD relocation record contains a pointer to the
+     symbol to relocate to, the offset of the data to relocate, the
+     section the data is in, and a pointer to a relocation type
+     descriptor. Relocation is performed by passing messages through
+     the relocation type descriptor and the symbol pointer. Therefore,
+     relocations can be performed on output data using a relocation
+     method that is only available in one of the input formats. For
+     instance, Oasys provides a byte relocation format.  A relocation
+     record requesting this relocation type would point indirectly to a
+     routine to perform this, so the relocation may be performed on a
+     byte being written to a 68k COFF file, even though 68k COFF has no
+     such relocation type.
+
+_line numbers_
+     Object formats can contain, for debugging purposes, some form of
+     mapping between symbols, source line numbers, and addresses in the
+     output file.  These addresses have to be relocated along with the
+     symbol information.  Each symbol with an associated list of line
+     number records points to the first record of the list.  The head
+     of a line number list consists of a pointer to the symbol, which
+     allows finding out the address of the function whose line number
+     is being described. The rest of the list is made up of pairs:
+     offsets into the section and line numbers. Any format which can
+     simply derive this information can pass it successfully between
+     formats (COFF, IEEE and Oasys).
+
+
+File: bfd.info,  Node: BFD front end,  Next: BFD back ends,  Prev: Overview,  Up: Top
+
+2 BFD Front End
+***************
+
+2.1 `typedef bfd'
+=================
+
+A BFD has type `bfd'; objects of this type are the cornerstone of any
+application using BFD. Using BFD consists of making references though
+the BFD and to data in the BFD.
+
+   Here is the structure that defines the type `bfd'.  It contains the
+major data about the file and pointers to the rest of the data.
+
+
+     enum bfd_direction
+       {
+         no_direction = 0,
+         read_direction = 1,
+         write_direction = 2,
+         both_direction = 3
+       };
+
+     struct bfd
+     {
+       /* A unique identifier of the BFD  */
+       unsigned int id;
+
+       /* The filename the application opened the BFD with.  */
+       const char *filename;
+
+       /* A pointer to the target jump table.  */
+       const struct bfd_target *xvec;
+
+       /* The IOSTREAM, and corresponding IO vector that provide access
+          to the file backing the BFD.  */
+       void *iostream;
+       const struct bfd_iovec *iovec;
+
+       /* The caching routines use these to maintain a
+          least-recently-used list of BFDs.  */
+       struct bfd *lru_prev, *lru_next;
+
+       /* When a file is closed by the caching routines, BFD retains
+          state information on the file here...  */
+       ufile_ptr where;
+
+       /* File modified time, if mtime_set is TRUE.  */
+       long mtime;
+
+       /* Reserved for an unimplemented file locking extension.  */
+       int ifd;
+
+       /* The format which belongs to the BFD. (object, core, etc.)  */
+       bfd_format format;
+
+       /* The direction with which the BFD was opened.  */
+       enum bfd_direction direction;
+
+       /* Format_specific flags.  */
+       flagword flags;
+
+       /* Values that may appear in the flags field of a BFD.  These also
+          appear in the object_flags field of the bfd_target structure, where
+          they indicate the set of flags used by that backend (not all flags
+          are meaningful for all object file formats) (FIXME: at the moment,
+          the object_flags values have mostly just been copied from backend
+          to another, and are not necessarily correct).  */
+
+     #define BFD_NO_FLAGS   0x00
+
+       /* BFD contains relocation entries.  */
+     #define HAS_RELOC      0x01
+
+       /* BFD is directly executable.  */
+     #define EXEC_P         0x02
+
+       /* BFD has line number information (basically used for F_LNNO in a
+          COFF header).  */
+     #define HAS_LINENO     0x04
+
+       /* BFD has debugging information.  */
+     #define HAS_DEBUG      0x08
+
+       /* BFD has symbols.  */
+     #define HAS_SYMS       0x10
+
+       /* BFD has local symbols (basically used for F_LSYMS in a COFF
+          header).  */
+     #define HAS_LOCALS     0x20
+
+       /* BFD is a dynamic object.  */
+     #define DYNAMIC        0x40
+
+       /* Text section is write protected (if D_PAGED is not set, this is
+          like an a.out NMAGIC file) (the linker sets this by default, but
+          clears it for -r or -N).  */
+     #define WP_TEXT        0x80
+
+       /* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the
+          linker sets this by default, but clears it for -r or -n or -N).  */
+     #define D_PAGED        0x100
+
+       /* BFD is relaxable (this means that bfd_relax_section may be able to
+          do something) (sometimes bfd_relax_section can do something even if
+          this is not set).  */
+     #define BFD_IS_RELAXABLE 0x200
+
+       /* This may be set before writing out a BFD to request using a
+          traditional format.  For example, this is used to request that when
+          writing out an a.out object the symbols not be hashed to eliminate
+          duplicates.  */
+     #define BFD_TRADITIONAL_FORMAT 0x400
+
+       /* This flag indicates that the BFD contents are actually cached
+          in memory.  If this is set, iostream points to a bfd_in_memory
+          struct.  */
+     #define BFD_IN_MEMORY 0x800
+
+       /* The sections in this BFD specify a memory page.  */
+     #define HAS_LOAD_PAGE 0x1000
+
+       /* This BFD has been created by the linker and doesn't correspond
+          to any input file.  */
+     #define BFD_LINKER_CREATED 0x2000
+
+       /* This may be set before writing out a BFD to request that it
+          be written using values for UIDs, GIDs, timestamps, etc. that
+          will be consistent from run to run.  */
+     #define BFD_DETERMINISTIC_OUTPUT 0x4000
+
+       /* Compress sections in this BFD.  */
+     #define BFD_COMPRESS 0x8000
+
+       /* Decompress sections in this BFD.  */
+     #define BFD_DECOMPRESS 0x10000
+
+       /* BFD is a dummy, for plugins.  */
+     #define BFD_PLUGIN 0x20000
+
+       /* Flags bits to be saved in bfd_preserve_save.  */
+     #define BFD_FLAGS_SAVED \
+       (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_PLUGIN)
+
+       /* Flags bits which are for BFD use only.  */
+     #define BFD_FLAGS_FOR_BFD_USE_MASK \
+       (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
+        | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT)
+
+       /* Currently my_archive is tested before adding origin to
+          anything. I believe that this can become always an add of
+          origin, with origin set to 0 for non archive files.  */
+       ufile_ptr origin;
+
+       /* The origin in the archive of the proxy entry.  This will
+          normally be the same as origin, except for thin archives,
+          when it will contain the current offset of the proxy in the
+          thin archive rather than the offset of the bfd in its actual
+          container.  */
+       ufile_ptr proxy_origin;
+
+       /* A hash table for section names.  */
+       struct bfd_hash_table section_htab;
+
+       /* Pointer to linked list of sections.  */
+       struct bfd_section *sections;
+
+       /* The last section on the section list.  */
+       struct bfd_section *section_last;
+
+       /* The number of sections.  */
+       unsigned int section_count;
+
+       /* Stuff only useful for object files:
+          The start address.  */
+       bfd_vma start_address;
+
+       /* Used for input and output.  */
+       unsigned int symcount;
+
+       /* Symbol table for output BFD (with symcount entries).
+          Also used by the linker to cache input BFD symbols.  */
+       struct bfd_symbol  **outsymbols;
+
+       /* Used for slurped dynamic symbol tables.  */
+       unsigned int dynsymcount;
+
+       /* Pointer to structure which contains architecture information.  */
+       const struct bfd_arch_info *arch_info;
+
+       /* Stuff only useful for archives.  */
+       void *arelt_data;
+       struct bfd *my_archive;      /* The containing archive BFD.  */
+       struct bfd *archive_next;    /* The next BFD in the archive.  */
+       struct bfd *archive_head;    /* The first BFD in the archive.  */
+       struct bfd *nested_archives; /* List of nested archive in a flattened
+                                       thin archive.  */
+
+       /* A chain of BFD structures involved in a link.  */
+       struct bfd *link_next;
+
+       /* A field used by _bfd_generic_link_add_archive_symbols.  This will
+          be used only for archive elements.  */
+       int archive_pass;
+
+       /* Used by the back end to hold private data.  */
+       union
+         {
+           struct aout_data_struct *aout_data;
+           struct artdata *aout_ar_data;
+           struct _oasys_data *oasys_obj_data;
+           struct _oasys_ar_data *oasys_ar_data;
+           struct coff_tdata *coff_obj_data;
+           struct pe_tdata *pe_obj_data;
+           struct xcoff_tdata *xcoff_obj_data;
+           struct ecoff_tdata *ecoff_obj_data;
+           struct ieee_data_struct *ieee_data;
+           struct ieee_ar_data_struct *ieee_ar_data;
+           struct srec_data_struct *srec_data;
+           struct verilog_data_struct *verilog_data;
+           struct ihex_data_struct *ihex_data;
+           struct tekhex_data_struct *tekhex_data;
+           struct elf_obj_tdata *elf_obj_data;
+           struct nlm_obj_tdata *nlm_obj_data;
+           struct bout_data_struct *bout_data;
+           struct mmo_data_struct *mmo_data;
+           struct sun_core_struct *sun_core_data;
+           struct sco5_core_struct *sco5_core_data;
+           struct trad_core_struct *trad_core_data;
+           struct som_data_struct *som_data;
+           struct hpux_core_struct *hpux_core_data;
+           struct hppabsd_core_struct *hppabsd_core_data;
+           struct sgi_core_struct *sgi_core_data;
+           struct lynx_core_struct *lynx_core_data;
+           struct osf_core_struct *osf_core_data;
+           struct cisco_core_struct *cisco_core_data;
+           struct versados_data_struct *versados_data;
+           struct netbsd_core_struct *netbsd_core_data;
+           struct mach_o_data_struct *mach_o_data;
+           struct mach_o_fat_data_struct *mach_o_fat_data;
+           struct plugin_data_struct *plugin_data;
+           struct bfd_pef_data_struct *pef_data;
+           struct bfd_pef_xlib_data_struct *pef_xlib_data;
+           struct bfd_sym_data_struct *sym_data;
+           void *any;
+         }
+       tdata;
+
+       /* Used by the application to hold private data.  */
+       void *usrdata;
+
+       /* Where all the allocated stuff under this BFD goes.  This is a
+          struct objalloc *, but we use void * to avoid requiring the inclusion
+          of objalloc.h.  */
+       void *memory;
+
+       /* Is the file descriptor being cached?  That is, can it be closed as
+          needed, and re-opened when accessed later?  */
+       unsigned int cacheable : 1;
+
+       /* Marks whether there was a default target specified when the
+          BFD was opened. This is used to select which matching algorithm
+          to use to choose the back end.  */
+       unsigned int target_defaulted : 1;
+
+       /* ... and here: (``once'' means at least once).  */
+       unsigned int opened_once : 1;
+
+       /* Set if we have a locally maintained mtime value, rather than
+          getting it from the file each time.  */
+       unsigned int mtime_set : 1;
+
+       /* Flag set if symbols from this BFD should not be exported.  */
+       unsigned int no_export : 1;
+
+       /* Remember when output has begun, to stop strange things
+          from happening.  */
+       unsigned int output_has_begun : 1;
+
+       /* Have archive map.  */
+       unsigned int has_armap : 1;
+
+       /* Set if this is a thin archive.  */
+       unsigned int is_thin_archive : 1;
+
+       /* Set if only required symbols should be added in the link hash table for
+          this object.  Used by VMS linkers.  */
+       unsigned int selective_search : 1;
+     };
+
+2.2 Error reporting
+===================
+
+Most BFD functions return nonzero on success (check their individual
+documentation for precise semantics).  On an error, they call
+`bfd_set_error' to set an error condition that callers can check by
+calling `bfd_get_error'.  If that returns `bfd_error_system_call', then
+check `errno'.
+
+   The easiest way to report a BFD error to the user is to use
+`bfd_perror'.
+
+2.2.1 Type `bfd_error_type'
+---------------------------
+
+The values returned by `bfd_get_error' are defined by the enumerated
+type `bfd_error_type'.
+
+
+     typedef enum bfd_error
+     {
+       bfd_error_no_error = 0,
+       bfd_error_system_call,
+       bfd_error_invalid_target,
+       bfd_error_wrong_format,
+       bfd_error_wrong_object_format,
+       bfd_error_invalid_operation,
+       bfd_error_no_memory,
+       bfd_error_no_symbols,
+       bfd_error_no_armap,
+       bfd_error_no_more_archived_files,
+       bfd_error_malformed_archive,
+       bfd_error_file_not_recognized,
+       bfd_error_file_ambiguously_recognized,
+       bfd_error_no_contents,
+       bfd_error_nonrepresentable_section,
+       bfd_error_no_debug_section,
+       bfd_error_bad_value,
+       bfd_error_file_truncated,
+       bfd_error_file_too_big,
+       bfd_error_on_input,
+       bfd_error_invalid_error_code
+     }
+     bfd_error_type;
+   
+2.2.1.1 `bfd_get_error'
+.......................
+
+*Synopsis*
+     bfd_error_type bfd_get_error (void);
+   *Description*
+Return the current BFD error condition.
+
+2.2.1.2 `bfd_set_error'
+.......................
+
+*Synopsis*
+     void bfd_set_error (bfd_error_type error_tag, ...);
+   *Description*
+Set the BFD error condition to be ERROR_TAG.  If ERROR_TAG is
+bfd_error_on_input, then this function takes two more parameters, the
+input bfd where the error occurred, and the bfd_error_type error.
+
+2.2.1.3 `bfd_errmsg'
+....................
+
+*Synopsis*
+     const char *bfd_errmsg (bfd_error_type error_tag);
+   *Description*
+Return a string describing the error ERROR_TAG, or the system error if
+ERROR_TAG is `bfd_error_system_call'.
+
+2.2.1.4 `bfd_perror'
+....................
+
+*Synopsis*
+     void bfd_perror (const char *message);
+   *Description*
+Print to the standard error stream a string describing the last BFD
+error that occurred, or the last system error if the last BFD error was
+a system call failure.  If MESSAGE is non-NULL and non-empty, the error
+string printed is preceded by MESSAGE, a colon, and a space.  It is
+followed by a newline.
+
+2.2.2 BFD error handler
+-----------------------
+
+Some BFD functions want to print messages describing the problem.  They
+call a BFD error handler function.  This function may be overridden by
+the program.
+
+   The BFD error handler acts like printf.
+
+
+     typedef void (*bfd_error_handler_type) (const char *, ...);
+   
+2.2.2.1 `bfd_set_error_handler'
+...............................
+
+*Synopsis*
+     bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type);
+   *Description*
+Set the BFD error handler function.  Returns the previous function.
+
+2.2.2.2 `bfd_set_error_program_name'
+....................................
+
+*Synopsis*
+     void bfd_set_error_program_name (const char *);
+   *Description*
+Set the program name to use when printing a BFD error.  This is printed
+before the error message followed by a colon and space.  The string
+must not be changed after it is passed to this function.
+
+2.2.2.3 `bfd_get_error_handler'
+...............................
+
+*Synopsis*
+     bfd_error_handler_type bfd_get_error_handler (void);
+   *Description*
+Return the BFD error handler function.
+
+2.2.3 BFD assert handler
+------------------------
+
+If BFD finds an internal inconsistency, the bfd assert handler is
+called with information on the BFD version, BFD source file and line.
+If this happens, most programs linked against BFD are expected to want
+to exit with an error, or mark the current BFD operation as failed, so
+it is recommended to override the default handler, which just calls
+_bfd_error_handler and continues.
+
+
+     typedef void (*bfd_assert_handler_type) (const char *bfd_formatmsg,
+                                              const char *bfd_version,
+                                              const char *bfd_file,
+                                              int bfd_line);
+   
+2.2.3.1 `bfd_set_assert_handler'
+................................
+
+*Synopsis*
+     bfd_assert_handler_type bfd_set_assert_handler (bfd_assert_handler_type);
+   *Description*
+Set the BFD assert handler function.  Returns the previous function.
+
+2.2.3.2 `bfd_get_assert_handler'
+................................
+
+*Synopsis*
+     bfd_assert_handler_type bfd_get_assert_handler (void);
+   *Description*
+Return the BFD assert handler function.
+
+2.3 Miscellaneous
+=================
+
+2.3.1 Miscellaneous functions
+-----------------------------
+
+2.3.1.1 `bfd_get_reloc_upper_bound'
+...................................
+
+*Synopsis*
+     long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);
+   *Description*
+Return the number of bytes required to store the relocation information
+associated with section SECT attached to bfd ABFD.  If an error occurs,
+return -1.
+
+2.3.1.2 `bfd_canonicalize_reloc'
+................................
+
+*Synopsis*
+     long bfd_canonicalize_reloc
+        (bfd *abfd, asection *sec, arelent **loc, asymbol **syms);
+   *Description*
+Call the back end associated with the open BFD ABFD and translate the
+external form of the relocation information attached to SEC into the
+internal canonical form.  Place the table into memory at LOC, which has
+been preallocated, usually by a call to `bfd_get_reloc_upper_bound'.
+Returns the number of relocs, or -1 on error.
+
+   The SYMS table is also needed for horrible internal magic reasons.
+
+2.3.1.3 `bfd_set_reloc'
+.......................
+
+*Synopsis*
+     void bfd_set_reloc
+        (bfd *abfd, asection *sec, arelent **rel, unsigned int count);
+   *Description*
+Set the relocation pointer and count within section SEC to the values
+REL and COUNT.  The argument ABFD is ignored.
+
+2.3.1.4 `bfd_set_file_flags'
+............................
+
+*Synopsis*
+     bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags);
+   *Description*
+Set the flag word in the BFD ABFD to the value FLAGS.
+
+   Possible errors are:
+   * `bfd_error_wrong_format' - The target bfd was not of object format.
+
+   * `bfd_error_invalid_operation' - The target bfd was open for
+     reading.
+
+   * `bfd_error_invalid_operation' - The flag word contained a bit
+     which was not applicable to the type of file.  E.g., an attempt
+     was made to set the `D_PAGED' bit on a BFD format which does not
+     support demand paging.
+
+2.3.1.5 `bfd_get_arch_size'
+...........................
+
+*Synopsis*
+     int bfd_get_arch_size (bfd *abfd);
+   *Description*
+Returns the architecture address size, in bits, as determined by the
+object file's format.  For ELF, this information is included in the
+header.
+
+   *Returns*
+Returns the arch size in bits if known, `-1' otherwise.
+
+2.3.1.6 `bfd_get_sign_extend_vma'
+.................................
+
+*Synopsis*
+     int bfd_get_sign_extend_vma (bfd *abfd);
+   *Description*
+Indicates if the target architecture "naturally" sign extends an
+address.  Some architectures implicitly sign extend address values when
+they are converted to types larger than the size of an address.  For
+instance, bfd_get_start_address() will return an address sign extended
+to fill a bfd_vma when this is the case.
+
+   *Returns*
+Returns `1' if the target architecture is known to sign extend
+addresses, `0' if the target architecture is known to not sign extend
+addresses, and `-1' otherwise.
+
+2.3.1.7 `bfd_set_start_address'
+...............................
+
+*Synopsis*
+     bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma);
+   *Description*
+Make VMA the entry point of output BFD ABFD.
+
+   *Returns*
+Returns `TRUE' on success, `FALSE' otherwise.
+
+2.3.1.8 `bfd_get_gp_size'
+.........................
+
+*Synopsis*
+     unsigned int bfd_get_gp_size (bfd *abfd);
+   *Description*
+Return the maximum size of objects to be optimized using the GP
+register under MIPS ECOFF.  This is typically set by the `-G' argument
+to the compiler, assembler or linker.
+
+2.3.1.9 `bfd_set_gp_size'
+.........................
+
+*Synopsis*
+     void bfd_set_gp_size (bfd *abfd, unsigned int i);
+   *Description*
+Set the maximum size of objects to be optimized using the GP register
+under ECOFF or MIPS ELF.  This is typically set by the `-G' argument to
+the compiler, assembler or linker.
+
+2.3.1.10 `bfd_scan_vma'
+.......................
+
+*Synopsis*
+     bfd_vma bfd_scan_vma (const char *string, const char **end, int base);
+   *Description*
+Convert, like `strtoul', a numerical expression STRING into a `bfd_vma'
+integer, and return that integer.  (Though without as many bells and
+whistles as `strtoul'.)  The expression is assumed to be unsigned
+(i.e., positive).  If given a BASE, it is used as the base for
+conversion.  A base of 0 causes the function to interpret the string in
+hex if a leading "0x" or "0X" is found, otherwise in octal if a leading
+zero is found, otherwise in decimal.
+
+   If the value would overflow, the maximum `bfd_vma' value is returned.
+
+2.3.1.11 `bfd_copy_private_header_data'
+.......................................
+
+*Synopsis*
+     bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
+   *Description*
+Copy private BFD header information from the BFD IBFD to the the BFD
+OBFD.  This copies information that may require sections to exist, but
+does not require symbol tables.  Return `true' on success, `false' on
+error.  Possible error returns are:
+
+   * `bfd_error_no_memory' - Not enough memory exists to create private
+     data for OBFD.
+
+     #define bfd_copy_private_header_data(ibfd, obfd) \
+          BFD_SEND (obfd, _bfd_copy_private_header_data, \
+                    (ibfd, obfd))
+
+2.3.1.12 `bfd_copy_private_bfd_data'
+....................................
+
+*Synopsis*
+     bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
+   *Description*
+Copy private BFD information from the BFD IBFD to the the BFD OBFD.
+Return `TRUE' on success, `FALSE' on error.  Possible error returns are:
+
+   * `bfd_error_no_memory' - Not enough memory exists to create private
+     data for OBFD.
+
+     #define bfd_copy_private_bfd_data(ibfd, obfd) \
+          BFD_SEND (obfd, _bfd_copy_private_bfd_data, \
+                    (ibfd, obfd))
+
+2.3.1.13 `bfd_merge_private_bfd_data'
+.....................................
+
+*Synopsis*
+     bfd_boolean bfd_merge_private_bfd_data (bfd *ibfd, bfd *obfd);
+   *Description*
+Merge private BFD information from the BFD IBFD to the the output file
+BFD OBFD when linking.  Return `TRUE' on success, `FALSE' on error.
+Possible error returns are:
+
+   * `bfd_error_no_memory' - Not enough memory exists to create private
+     data for OBFD.
+
+     #define bfd_merge_private_bfd_data(ibfd, obfd) \
+          BFD_SEND (obfd, _bfd_merge_private_bfd_data, \
+                    (ibfd, obfd))
+
+2.3.1.14 `bfd_set_private_flags'
+................................
+
+*Synopsis*
+     bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
+   *Description*
+Set private BFD flag information in the BFD ABFD.  Return `TRUE' on
+success, `FALSE' on error.  Possible error returns are:
+
+   * `bfd_error_no_memory' - Not enough memory exists to create private
+     data for OBFD.
+
+     #define bfd_set_private_flags(abfd, flags) \
+          BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags))
+
+2.3.1.15 `Other functions'
+..........................
+
+*Description*
+The following functions exist but have not yet been documented.
+     #define bfd_sizeof_headers(abfd, info) \
+            BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info))
+
+     #define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
+            BFD_SEND (abfd, _bfd_find_nearest_line, \
+                      (abfd, sec, syms, off, file, func, line))
+
+     #define bfd_find_line(abfd, syms, sym, file, line) \
+            BFD_SEND (abfd, _bfd_find_line, \
+                      (abfd, syms, sym, file, line))
+
+     #define bfd_find_inliner_info(abfd, file, func, line) \
+            BFD_SEND (abfd, _bfd_find_inliner_info, \
+                      (abfd, file, func, line))
+
+     #define bfd_debug_info_start(abfd) \
+            BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
+
+     #define bfd_debug_info_end(abfd) \
+            BFD_SEND (abfd, _bfd_debug_info_end, (abfd))
+
+     #define bfd_debug_info_accumulate(abfd, section) \
+            BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
+
+     #define bfd_stat_arch_elt(abfd, stat) \
+            BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
+
+     #define bfd_update_armap_timestamp(abfd) \
+            BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
+
+     #define bfd_set_arch_mach(abfd, arch, mach)\
+            BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
+
+     #define bfd_relax_section(abfd, section, link_info, again) \
+            BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
+
+     #define bfd_gc_sections(abfd, link_info) \
+            BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))
+
+     #define bfd_lookup_section_flags(link_info, flag_info, section) \
+            BFD_SEND (abfd, _bfd_lookup_section_flags, (link_info, flag_info, section))
+
+     #define bfd_merge_sections(abfd, link_info) \
+            BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info))
+
+     #define bfd_is_group_section(abfd, sec) \
+            BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec))
+
+     #define bfd_discard_group(abfd, sec) \
+            BFD_SEND (abfd, _bfd_discard_group, (abfd, sec))
+
+     #define bfd_link_hash_table_create(abfd) \
+            BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
+
+     #define bfd_link_hash_table_free(abfd, hash) \
+            BFD_SEND (abfd, _bfd_link_hash_table_free, (hash))
+
+     #define bfd_link_add_symbols(abfd, info) \
+            BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info))
+
+     #define bfd_link_just_syms(abfd, sec, info) \
+            BFD_SEND (abfd, _bfd_link_just_syms, (sec, info))
+
+     #define bfd_final_link(abfd, info) \
+            BFD_SEND (abfd, _bfd_final_link, (abfd, info))
+
+     #define bfd_free_cached_info(abfd) \
+            BFD_SEND (abfd, _bfd_free_cached_info, (abfd))
+
+     #define bfd_get_dynamic_symtab_upper_bound(abfd) \
+            BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd))
+
+     #define bfd_print_private_bfd_data(abfd, file)\
+            BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file))
+
+     #define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \
+            BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols))
+
+     #define bfd_get_synthetic_symtab(abfd, count, syms, dyncount, dynsyms, ret) \
+            BFD_SEND (abfd, _bfd_get_synthetic_symtab, (abfd, count, syms, \
+                                                        dyncount, dynsyms, ret))
+
+     #define bfd_get_dynamic_reloc_upper_bound(abfd) \
+            BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd))
+
+     #define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
+            BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))
+
+     extern bfd_byte *bfd_get_relocated_section_contents
+       (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
+        bfd_boolean, asymbol **);
+
+2.3.1.16 `bfd_alt_mach_code'
+............................
+
+*Synopsis*
+     bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative);
+   *Description*
+When more than one machine code number is available for the same
+machine type, this function can be used to switch between the preferred
+one (alternative == 0) and any others.  Currently, only ELF supports
+this feature, with up to two alternate machine codes.
+
+     struct bfd_preserve
+     {
+       void *marker;
+       void *tdata;
+       flagword flags;
+       const struct bfd_arch_info *arch_info;
+       struct bfd_section *sections;
+       struct bfd_section *section_last;
+       unsigned int section_count;
+       struct bfd_hash_table section_htab;
+     };
+   
+2.3.1.17 `bfd_preserve_save'
+............................
+
+*Synopsis*
+     bfd_boolean bfd_preserve_save (bfd *, struct bfd_preserve *);
+   *Description*
+When testing an object for compatibility with a particular target
+back-end, the back-end object_p function needs to set up certain fields
+in the bfd on successfully recognizing the object.  This typically
+happens in a piecemeal fashion, with failures possible at many points.
+On failure, the bfd is supposed to be restored to its initial state,
+which is virtually impossible.  However, restoring a subset of the bfd
+state works in practice.  This function stores the subset and
+reinitializes the bfd.
+
+2.3.1.18 `bfd_preserve_restore'
+...............................
+
+*Synopsis*
+     void bfd_preserve_restore (bfd *, struct bfd_preserve *);
+   *Description*
+This function restores bfd state saved by bfd_preserve_save.  If MARKER
+is non-NULL in struct bfd_preserve then that block and all subsequently
+bfd_alloc'd memory is freed.
+
+2.3.1.19 `bfd_preserve_finish'
+..............................
+
+*Synopsis*
+     void bfd_preserve_finish (bfd *, struct bfd_preserve *);
+   *Description*
+This function should be called when the bfd state saved by
+bfd_preserve_save is no longer needed.  ie. when the back-end object_p
+function returns with success.
+
+2.3.1.20 `bfd_emul_get_maxpagesize'
+...................................
+
+*Synopsis*
+     bfd_vma bfd_emul_get_maxpagesize (const char *);
+   *Description*
+Returns the maximum page size, in bytes, as determined by emulation.
+
+   *Returns*
+Returns the maximum page size in bytes for ELF, 0 otherwise.
+
+2.3.1.21 `bfd_emul_set_maxpagesize'
+...................................
+
+*Synopsis*
+     void bfd_emul_set_maxpagesize (const char *, bfd_vma);
+   *Description*
+For ELF, set the maximum page size for the emulation.  It is a no-op
+for other formats.
+
+2.3.1.22 `bfd_emul_get_commonpagesize'
+......................................
+
+*Synopsis*
+     bfd_vma bfd_emul_get_commonpagesize (const char *);
+   *Description*
+Returns the common page size, in bytes, as determined by emulation.
+
+   *Returns*
+Returns the common page size in bytes for ELF, 0 otherwise.
+
+2.3.1.23 `bfd_emul_set_commonpagesize'
+......................................
+
+*Synopsis*
+     void bfd_emul_set_commonpagesize (const char *, bfd_vma);
+   *Description*
+For ELF, set the common page size for the emulation.  It is a no-op for
+other formats.
+
+2.3.1.24 `bfd_demangle'
+.......................
+
+*Synopsis*
+     char *bfd_demangle (bfd *, const char *, int);
+   *Description*
+Wrapper around cplus_demangle.  Strips leading underscores and other
+such chars that would otherwise confuse the demangler.  If passed a g++
+v3 ABI mangled name, returns a buffer allocated with malloc holding the
+demangled name.  Returns NULL otherwise and on memory alloc failure.
+
+2.3.1.25 `struct bfd_iovec'
+...........................
+
+*Description*
+The `struct bfd_iovec' contains the internal file I/O class.  Each
+`BFD' has an instance of this class and all file I/O is routed through
+it (it is assumed that the instance implements all methods listed
+below).
+     struct bfd_iovec
+     {
+       /* To avoid problems with macros, a "b" rather than "f"
+          prefix is prepended to each method name.  */
+       /* Attempt to read/write NBYTES on ABFD's IOSTREAM storing/fetching
+          bytes starting at PTR.  Return the number of bytes actually
+          transfered (a read past end-of-file returns less than NBYTES),
+          or -1 (setting `bfd_error') if an error occurs.  */
+       file_ptr (*bread) (struct bfd *abfd, void *ptr, file_ptr nbytes);
+       file_ptr (*bwrite) (struct bfd *abfd, const void *ptr,
+                           file_ptr nbytes);
+       /* Return the current IOSTREAM file offset, or -1 (setting `bfd_error'
+          if an error occurs.  */
+       file_ptr (*btell) (struct bfd *abfd);
+       /* For the following, on successful completion a value of 0 is returned.
+          Otherwise, a value of -1 is returned (and  `bfd_error' is set).  */
+       int (*bseek) (struct bfd *abfd, file_ptr offset, int whence);
+       int (*bclose) (struct bfd *abfd);
+       int (*bflush) (struct bfd *abfd);
+       int (*bstat) (struct bfd *abfd, struct stat *sb);
+       /* Mmap a part of the files. ADDR, LEN, PROT, FLAGS and OFFSET are the usual
+          mmap parameter, except that LEN and OFFSET do not need to be page
+          aligned.  Returns (void *)-1 on failure, mmapped address on success.
+          Also write in MAP_ADDR the address of the page aligned buffer and in
+          MAP_LEN the size mapped (a page multiple).  Use unmap with MAP_ADDR and
+          MAP_LEN to unmap.  */
+       void *(*bmmap) (struct bfd *abfd, void *addr, bfd_size_type len,
+                       int prot, int flags, file_ptr offset,
+                       void **map_addr, bfd_size_type *map_len);
+     };
+     extern const struct bfd_iovec _bfd_memory_iovec;
+
+2.3.1.26 `bfd_get_mtime'
+........................
+
+*Synopsis*
+     long bfd_get_mtime (bfd *abfd);
+   *Description*
+Return the file modification time (as read from the file system, or
+from the archive header for archive members).
+
+2.3.1.27 `bfd_get_size'
+.......................
+
+*Synopsis*
+     file_ptr bfd_get_size (bfd *abfd);
+   *Description*
+Return the file size (as read from file system) for the file associated
+with BFD ABFD.
+
+   The initial motivation for, and use of, this routine is not so we
+can get the exact size of the object the BFD applies to, since that
+might not be generally possible (archive members for example).  It
+would be ideal if someone could eventually modify it so that such
+results were guaranteed.
+
+   Instead, we want to ask questions like "is this NNN byte sized
+object I'm about to try read from file offset YYY reasonable?"  As as
+example of where we might do this, some object formats use string
+tables for which the first `sizeof (long)' bytes of the table contain
+the size of the table itself, including the size bytes.  If an
+application tries to read what it thinks is one of these string tables,
+without some way to validate the size, and for some reason the size is
+wrong (byte swapping error, wrong location for the string table, etc.),
+the only clue is likely to be a read error when it tries to read the
+table, or a "virtual memory exhausted" error when it tries to allocate
+15 bazillon bytes of space for the 15 bazillon byte table it is about
+to read.  This function at least allows us to answer the question, "is
+the size reasonable?".
+
+2.3.1.28 `bfd_mmap'
+...................
+
+*Synopsis*
+     void *bfd_mmap (bfd *abfd, void *addr, bfd_size_type len,
+         int prot, int flags, file_ptr offset,
+         void **map_addr, bfd_size_type *map_len);
+   *Description*
+Return mmap()ed region of the file, if possible and implemented.  LEN
+and OFFSET do not need to be page aligned.  The page aligned address
+and length are written to MAP_ADDR and MAP_LEN.
+
+* Menu:
+
+* Memory Usage::
+* Initialization::
+* Sections::
+* Symbols::
+* Archives::
+* Formats::
+* Relocations::
+* Core Files::
+* Targets::
+* Architectures::
+* Opening and Closing::
+* Internal::
+* File Caching::
+* Linker Functions::
+* Hash Tables::
+
+
+File: bfd.info,  Node: Memory Usage,  Next: Initialization,  Prev: BFD front end,  Up: BFD front end
+
+2.4 Memory Usage
+================
+
+BFD keeps all of its internal structures in obstacks. There is one
+obstack per open BFD file, into which the current state is stored. When
+a BFD is closed, the obstack is deleted, and so everything which has
+been allocated by BFD for the closing file is thrown away.
+
+   BFD does not free anything created by an application, but pointers
+into `bfd' structures become invalid on a `bfd_close'; for example,
+after a `bfd_close' the vector passed to `bfd_canonicalize_symtab' is
+still around, since it has been allocated by the application, but the
+data that it pointed to are lost.
+
+   The general rule is to not close a BFD until all operations dependent
+upon data from the BFD have been completed, or all the data from within
+the file has been copied. To help with the management of memory, there
+is a function (`bfd_alloc_size') which returns the number of bytes in
+obstacks associated with the supplied BFD. This could be used to select
+the greediest open BFD, close it to reclaim the memory, perform some
+operation and reopen the BFD again, to get a fresh copy of the data
+structures.
+
+
+File: bfd.info,  Node: Initialization,  Next: Sections,  Prev: Memory Usage,  Up: BFD front end
+
+2.5 Initialization
+==================
+
+2.5.1 Initialization functions
+------------------------------
+
+These are the functions that handle initializing a BFD.
+
+2.5.1.1 `bfd_init'
+..................
+
+*Synopsis*
+     void bfd_init (void);
+   *Description*
+This routine must be called before any other BFD function to initialize
+magical internal data structures.
+
+
+File: bfd.info,  Node: Sections,  Next: Symbols,  Prev: Initialization,  Up: BFD front end
+
+2.6 Sections
+============
+
+The raw data contained within a BFD is maintained through the section
+abstraction.  A single BFD may have any number of sections.  It keeps
+hold of them by pointing to the first; each one points to the next in
+the list.
+
+   Sections are supported in BFD in `section.c'.
+
+* Menu:
+
+* Section Input::
+* Section Output::
+* typedef asection::
+* section prototypes::
+
+
+File: bfd.info,  Node: Section Input,  Next: Section Output,  Prev: Sections,  Up: Sections
+
+2.6.1 Section input
+-------------------
+
+When a BFD is opened for reading, the section structures are created
+and attached to the BFD.
+
+   Each section has a name which describes the section in the outside
+world--for example, `a.out' would contain at least three sections,
+called `.text', `.data' and `.bss'.
+
+   Names need not be unique; for example a COFF file may have several
+sections named `.data'.
+
+   Sometimes a BFD will contain more than the "natural" number of
+sections. A back end may attach other sections containing constructor
+data, or an application may add a section (using `bfd_make_section') to
+the sections attached to an already open BFD. For example, the linker
+creates an extra section `COMMON' for each input file's BFD to hold
+information about common storage.
+
+   The raw data is not necessarily read in when the section descriptor
+is created. Some targets may leave the data in place until a
+`bfd_get_section_contents' call is made. Other back ends may read in
+all the data at once.  For example, an S-record file has to be read
+once to determine the size of the data. An IEEE-695 file doesn't
+contain raw data in sections, but data and relocation expressions
+intermixed, so the data area has to be parsed to get out the data and
+relocations.
+
+
+File: bfd.info,  Node: Section Output,  Next: typedef asection,  Prev: Section Input,  Up: Sections
+
+2.6.2 Section output
+--------------------
+
+To write a new object style BFD, the various sections to be written
+have to be created. They are attached to the BFD in the same way as
+input sections; data is written to the sections using
+`bfd_set_section_contents'.
+
+   Any program that creates or combines sections (e.g., the assembler
+and linker) must use the `asection' fields `output_section' and
+`output_offset' to indicate the file sections to which each section
+must be written.  (If the section is being created from scratch,
+`output_section' should probably point to the section itself and
+`output_offset' should probably be zero.)
+
+   The data to be written comes from input sections attached (via
+`output_section' pointers) to the output sections.  The output section
+structure can be considered a filter for the input section: the output
+section determines the vma of the output data and the name, but the
+input section determines the offset into the output section of the data
+to be written.
+
+   E.g., to create a section "O", starting at 0x100, 0x123 long,
+containing two subsections, "A" at offset 0x0 (i.e., at vma 0x100) and
+"B" at offset 0x20 (i.e., at vma 0x120) the `asection' structures would
+look like:
+
+        section name          "A"
+          output_offset   0x00
+          size            0x20
+          output_section ----------->  section name    "O"
+                                  |    vma             0x100
+        section name          "B" |    size            0x123
+          output_offset   0x20    |
+          size            0x103   |
+          output_section  --------|
+
+2.6.3 Link orders
+-----------------
+
+The data within a section is stored in a "link_order".  These are much
+like the fixups in `gas'.  The link_order abstraction allows a section
+to grow and shrink within itself.
+
+   A link_order knows how big it is, and which is the next link_order
+and where the raw data for it is; it also points to a list of
+relocations which apply to it.
+
+   The link_order is used by the linker to perform relaxing on final
+code.  The compiler creates code which is as big as necessary to make
+it work without relaxing, and the user can select whether to relax.
+Sometimes relaxing takes a lot of time.  The linker runs around the
+relocations to see if any are attached to data which can be shrunk, if
+so it does it on a link_order by link_order basis.
+
+
+File: bfd.info,  Node: typedef asection,  Next: section prototypes,  Prev: Section Output,  Up: Sections
+
+2.6.4 typedef asection
+----------------------
+
+Here is the section structure:
+
+
+     typedef struct bfd_section
+     {
+       /* The name of the section; the name isn't a copy, the pointer is
+          the same as that passed to bfd_make_section.  */
+       const char *name;
+
+       /* A unique sequence number.  */
+       int id;
+
+       /* Which section in the bfd; 0..n-1 as sections are created in a bfd.  */
+       int index;
+
+       /* The next section in the list belonging to the BFD, or NULL.  */
+       struct bfd_section *next;
+
+       /* The previous section in the list belonging to the BFD, or NULL.  */
+       struct bfd_section *prev;
+
+       /* The field flags contains attributes of the section. Some
+          flags are read in from the object file, and some are
+          synthesized from other information.  */
+       flagword flags;
+
+     #define SEC_NO_FLAGS   0x000
+
+       /* Tells the OS to allocate space for this section when loading.
+          This is clear for a section containing debug information only.  */
+     #define SEC_ALLOC      0x001
+
+       /* Tells the OS to load the section from the file when loading.
+          This is clear for a .bss section.  */
+     #define SEC_LOAD       0x002
+
+       /* The section contains data still to be relocated, so there is
+          some relocation information too.  */
+     #define SEC_RELOC      0x004
+
+       /* A signal to the OS that the section contains read only data.  */
+     #define SEC_READONLY   0x008
+
+       /* The section contains code only.  */
+     #define SEC_CODE       0x010
+
+       /* The section contains data only.  */
+     #define SEC_DATA       0x020
+
+       /* The section will reside in ROM.  */
+     #define SEC_ROM        0x040
+
+       /* The section contains constructor information. This section
+          type is used by the linker to create lists of constructors and
+          destructors used by `g++'. When a back end sees a symbol
+          which should be used in a constructor list, it creates a new
+          section for the type of name (e.g., `__CTOR_LIST__'), attaches
+          the symbol to it, and builds a relocation. To build the lists
+          of constructors, all the linker has to do is catenate all the
+          sections called `__CTOR_LIST__' and relocate the data
+          contained within - exactly the operations it would peform on
+          standard data.  */
+     #define SEC_CONSTRUCTOR 0x080
+
+       /* The section has contents - a data section could be
+          `SEC_ALLOC' | `SEC_HAS_CONTENTS'; a debug section could be
+          `SEC_HAS_CONTENTS'  */
+     #define SEC_HAS_CONTENTS 0x100
+
+       /* An instruction to the linker to not output the section
+          even if it has information which would normally be written.  */
+     #define SEC_NEVER_LOAD 0x200
+
+       /* The section contains thread local data.  */
+     #define SEC_THREAD_LOCAL 0x400
+
+       /* The section has GOT references.  This flag is only for the
+          linker, and is currently only used by the elf32-hppa back end.
+          It will be set if global offset table references were detected
+          in this section, which indicate to the linker that the section
+          contains PIC code, and must be handled specially when doing a
+          static link.  */
+     #define SEC_HAS_GOT_REF 0x800
+
+       /* The section contains common symbols (symbols may be defined
+          multiple times, the value of a symbol is the amount of
+          space it requires, and the largest symbol value is the one
+          used).  Most targets have exactly one of these (which we
+          translate to bfd_com_section_ptr), but ECOFF has two.  */
+     #define SEC_IS_COMMON 0x1000
+
+       /* The section contains only debugging information.  For
+          example, this is set for ELF .debug and .stab sections.
+          strip tests this flag to see if a section can be
+          discarded.  */
+     #define SEC_DEBUGGING 0x2000
+
+       /* The contents of this section are held in memory pointed to
+          by the contents field.  This is checked by bfd_get_section_contents,
+          and the data is retrieved from memory if appropriate.  */
+     #define SEC_IN_MEMORY 0x4000
+
+       /* The contents of this section are to be excluded by the
+          linker for executable and shared objects unless those
+          objects are to be further relocated.  */
+     #define SEC_EXCLUDE 0x8000
+
+       /* The contents of this section are to be sorted based on the sum of
+          the symbol and addend values specified by the associated relocation
+          entries.  Entries without associated relocation entries will be
+          appended to the end of the section in an unspecified order.  */
+     #define SEC_SORT_ENTRIES 0x10000
+
+       /* When linking, duplicate sections of the same name should be
+          discarded, rather than being combined into a single section as
+          is usually done.  This is similar to how common symbols are
+          handled.  See SEC_LINK_DUPLICATES below.  */
+     #define SEC_LINK_ONCE 0x20000
+
+       /* If SEC_LINK_ONCE is set, this bitfield describes how the linker
+          should handle duplicate sections.  */
+     #define SEC_LINK_DUPLICATES 0xc0000
+
+       /* This value for SEC_LINK_DUPLICATES means that duplicate
+          sections with the same name should simply be discarded.  */
+     #define SEC_LINK_DUPLICATES_DISCARD 0x0
+
+       /* This value for SEC_LINK_DUPLICATES means that the linker
+          should warn if there are any duplicate sections, although
+          it should still only link one copy.  */
+     #define SEC_LINK_DUPLICATES_ONE_ONLY 0x40000
+
+       /* This value for SEC_LINK_DUPLICATES means that the linker
+          should warn if any duplicate sections are a different size.  */
+     #define SEC_LINK_DUPLICATES_SAME_SIZE 0x80000
+
+       /* This value for SEC_LINK_DUPLICATES means that the linker
+          should warn if any duplicate sections contain different
+          contents.  */
+     #define SEC_LINK_DUPLICATES_SAME_CONTENTS \
+       (SEC_LINK_DUPLICATES_ONE_ONLY | SEC_LINK_DUPLICATES_SAME_SIZE)
+
+       /* This section was created by the linker as part of dynamic
+          relocation or other arcane processing.  It is skipped when
+          going through the first-pass output, trusting that someone
+          else up the line will take care of it later.  */
+     #define SEC_LINKER_CREATED 0x100000
+
+       /* This section should not be subject to garbage collection.
+          Also set to inform the linker that this section should not be
+          listed in the link map as discarded.  */
+     #define SEC_KEEP 0x200000
+
+       /* This section contains "short" data, and should be placed
+          "near" the GP.  */
+     #define SEC_SMALL_DATA 0x400000
+
+       /* Attempt to merge identical entities in the section.
+          Entity size is given in the entsize field.  */
+     #define SEC_MERGE 0x800000
+
+       /* If given with SEC_MERGE, entities to merge are zero terminated
+          strings where entsize specifies character size instead of fixed
+          size entries.  */
+     #define SEC_STRINGS 0x1000000
+
+       /* This section contains data about section groups.  */
+     #define SEC_GROUP 0x2000000
+
+       /* The section is a COFF shared library section.  This flag is
+          only for the linker.  If this type of section appears in
+          the input file, the linker must copy it to the output file
+          without changing the vma or size.  FIXME: Although this
+          was originally intended to be general, it really is COFF
+          specific (and the flag was renamed to indicate this).  It
+          might be cleaner to have some more general mechanism to
+          allow the back end to control what the linker does with
+          sections.  */
+     #define SEC_COFF_SHARED_LIBRARY 0x4000000
+
+       /* This input section should be copied to output in reverse order
+          as an array of pointers.  This is for ELF linker internal use
+          only.  */
+     #define SEC_ELF_REVERSE_COPY 0x4000000
+
+       /* This section contains data which may be shared with other
+          executables or shared objects. This is for COFF only.  */
+     #define SEC_COFF_SHARED 0x8000000
+
+       /* When a section with this flag is being linked, then if the size of
+          the input section is less than a page, it should not cross a page
+          boundary.  If the size of the input section is one page or more,
+          it should be aligned on a page boundary.  This is for TI
+          TMS320C54X only.  */
+     #define SEC_TIC54X_BLOCK 0x10000000
+
+       /* Conditionally link this section; do not link if there are no
+          references found to any symbol in the section.  This is for TI
+          TMS320C54X only.  */
+     #define SEC_TIC54X_CLINK 0x20000000
+
+       /* Indicate that section has the no read flag set. This happens
+          when memory read flag isn't set. */
+     #define SEC_COFF_NOREAD 0x40000000
+
+       /*  End of section flags.  */
+
+       /* Some internal packed boolean fields.  */
+
+       /* See the vma field.  */
+       unsigned int user_set_vma : 1;
+
+       /* A mark flag used by some of the linker backends.  */
+       unsigned int linker_mark : 1;
+
+       /* Another mark flag used by some of the linker backends.  Set for
+          output sections that have an input section.  */
+       unsigned int linker_has_input : 1;
+
+       /* Mark flag used by some linker backends for garbage collection.  */
+       unsigned int gc_mark : 1;
+
+       /* Section compression status.  */
+       unsigned int compress_status : 2;
+     #define COMPRESS_SECTION_NONE    0
+     #define COMPRESS_SECTION_DONE    1
+     #define DECOMPRESS_SECTION_SIZED 2
+
+       /* The following flags are used by the ELF linker. */
+
+       /* Mark sections which have been allocated to segments.  */
+       unsigned int segment_mark : 1;
+
+       /* Type of sec_info information.  */
+       unsigned int sec_info_type:3;
+     #define SEC_INFO_TYPE_NONE      0
+     #define SEC_INFO_TYPE_STABS     1
+     #define SEC_INFO_TYPE_MERGE     2
+     #define SEC_INFO_TYPE_EH_FRAME  3
+     #define SEC_INFO_TYPE_JUST_SYMS 4
+
+       /* Nonzero if this section uses RELA relocations, rather than REL.  */
+       unsigned int use_rela_p:1;
+
+       /* Bits used by various backends.  The generic code doesn't touch
+          these fields.  */
+
+       unsigned int sec_flg0:1;
+       unsigned int sec_flg1:1;
+       unsigned int sec_flg2:1;
+       unsigned int sec_flg3:1;
+       unsigned int sec_flg4:1;
+       unsigned int sec_flg5:1;
+
+       /* End of internal packed boolean fields.  */
+
+       /*  The virtual memory address of the section - where it will be
+           at run time.  The symbols are relocated against this.  The
+           user_set_vma flag is maintained by bfd; if it's not set, the
+           backend can assign addresses (for example, in `a.out', where
+           the default address for `.data' is dependent on the specific
+           target and various flags).  */
+       bfd_vma vma;
+
+       /*  The load address of the section - where it would be in a
+           rom image; really only used for writing section header
+           information.  */
+       bfd_vma lma;
+
+       /* The size of the section in octets, as it will be output.
+          Contains a value even if the section has no contents (e.g., the
+          size of `.bss').  */
+       bfd_size_type size;
+
+       /* For input sections, the original size on disk of the section, in
+          octets.  This field should be set for any section whose size is
+          changed by linker relaxation.  It is required for sections where
+          the linker relaxation scheme doesn't cache altered section and
+          reloc contents (stabs, eh_frame, SEC_MERGE, some coff relaxing
+          targets), and thus the original size needs to be kept to read the
+          section multiple times.  For output sections, rawsize holds the
+          section size calculated on a previous linker relaxation pass.  */
+       bfd_size_type rawsize;
+
+       /* The compressed size of the section in octets.  */
+       bfd_size_type compressed_size;
+
+       /* Relaxation table. */
+       struct relax_table *relax;
+
+       /* Count of used relaxation table entries. */
+       int relax_count;
+
+
+       /* If this section is going to be output, then this value is the
+          offset in *bytes* into the output section of the first byte in the
+          input section (byte ==> smallest addressable unit on the
+          target).  In most cases, if this was going to start at the
+          100th octet (8-bit quantity) in the output section, this value
+          would be 100.  However, if the target byte size is 16 bits
+          (bfd_octets_per_byte is "2"), this value would be 50.  */
+       bfd_vma output_offset;
+
+       /* The output section through which to map on output.  */
+       struct bfd_section *output_section;
+
+       /* The alignment requirement of the section, as an exponent of 2 -
+          e.g., 3 aligns to 2^3 (or 8).  */
+       unsigned int alignment_power;
+
+       /* If an input section, a pointer to a vector of relocation
+          records for the data in this section.  */
+       struct reloc_cache_entry *relocation;
+
+       /* If an output section, a pointer to a vector of pointers to
+          relocation records for the data in this section.  */
+       struct reloc_cache_entry **orelocation;
+
+       /* The number of relocation records in one of the above.  */
+       unsigned reloc_count;
+
+       /* Information below is back end specific - and not always used
+          or updated.  */
+
+       /* File position of section data.  */
+       file_ptr filepos;
+
+       /* File position of relocation info.  */
+       file_ptr rel_filepos;
+
+       /* File position of line data.  */
+       file_ptr line_filepos;
+
+       /* Pointer to data for applications.  */
+       void *userdata;
+
+       /* If the SEC_IN_MEMORY flag is set, this points to the actual
+          contents.  */
+       unsigned char *contents;
+
+       /* Attached line number information.  */
+       alent *lineno;
+
+       /* Number of line number records.  */
+       unsigned int lineno_count;
+
+       /* Entity size for merging purposes.  */
+       unsigned int entsize;
+
+       /* Points to the kept section if this section is a link-once section,
+          and is discarded.  */
+       struct bfd_section *kept_section;
+
+       /* When a section is being output, this value changes as more
+          linenumbers are written out.  */
+       file_ptr moving_line_filepos;
+
+       /* What the section number is in the target world.  */
+       int target_index;
+
+       void *used_by_bfd;
+
+       /* If this is a constructor section then here is a list of the
+          relocations created to relocate items within it.  */
+       struct relent_chain *constructor_chain;
+
+       /* The BFD which owns the section.  */
+       bfd *owner;
+
+       /* A symbol which points at this section only.  */
+       struct bfd_symbol *symbol;
+       struct bfd_symbol **symbol_ptr_ptr;
+
+       /* Early in the link process, map_head and map_tail are used to build
+          a list of input sections attached to an output section.  Later,
+          output sections use these fields for a list of bfd_link_order
+          structs.  */
+       union {
+         struct bfd_link_order *link_order;
+         struct bfd_section *s;
+       } map_head, map_tail;
+     } asection;
+
+     /* Relax table contains information about instructions which can
+        be removed by relaxation -- replacing a long address with a
+        short address.  */
+     struct relax_table {
+       /* Address where bytes may be deleted. */
+       bfd_vma addr;
+
+       /* Number of bytes to be deleted.  */
+       int size;
+     };
+
+     /* These sections are global, and are managed by BFD.  The application
+        and target back end are not permitted to change the values in
+        these sections.  */
+     extern asection std_section[4];
+
+     #define BFD_ABS_SECTION_NAME "*ABS*"
+     #define BFD_UND_SECTION_NAME "*UND*"
+     #define BFD_COM_SECTION_NAME "*COM*"
+     #define BFD_IND_SECTION_NAME "*IND*"
+
+     /* Pointer to the common section.  */
+     #define bfd_com_section_ptr (&std_section[0])
+     /* Pointer to the undefined section.  */
+     #define bfd_und_section_ptr (&std_section[1])
+     /* Pointer to the absolute section.  */
+     #define bfd_abs_section_ptr (&std_section[2])
+     /* Pointer to the indirect section.  */
+     #define bfd_ind_section_ptr (&std_section[3])
+
+     #define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr)
+     #define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr)
+     #define bfd_is_ind_section(sec) ((sec) == bfd_ind_section_ptr)
+
+     #define bfd_is_const_section(SEC)              \
+      (   ((SEC) == bfd_abs_section_ptr)            \
+       || ((SEC) == bfd_und_section_ptr)            \
+       || ((SEC) == bfd_com_section_ptr)            \
+       || ((SEC) == bfd_ind_section_ptr))
+
+     /* Macros to handle insertion and deletion of a bfd's sections.  These
+        only handle the list pointers, ie. do not adjust section_count,
+        target_index etc.  */
+     #define bfd_section_list_remove(ABFD, S) \
+       do                                                   \
+         {                                                  \
+           asection *_s = S;                                \
+           asection *_next = _s->next;                      \
+           asection *_prev = _s->prev;                      \
+           if (_prev)                                       \
+             _prev->next = _next;                           \
+           else                                             \
+             (ABFD)->sections = _next;                      \
+           if (_next)                                       \
+             _next->prev = _prev;                           \
+           else                                             \
+             (ABFD)->section_last = _prev;                  \
+         }                                                  \
+       while (0)
+     #define bfd_section_list_append(ABFD, S) \
+       do                                                   \
+         {                                                  \
+           asection *_s = S;                                \
+           bfd *_abfd = ABFD;                               \
+           _s->next = NULL;                                 \
+           if (_abfd->section_last)                         \
+             {                                              \
+               _s->prev = _abfd->section_last;              \
+               _abfd->section_last->next = _s;              \
+             }                                              \
+           else                                             \
+             {                                              \
+               _s->prev = NULL;                             \
+               _abfd->sections = _s;                        \
+             }                                              \
+           _abfd->section_last = _s;                        \
+         }                                                  \
+       while (0)
+     #define bfd_section_list_prepend(ABFD, S) \
+       do                                                   \
+         {                                                  \
+           asection *_s = S;                                \
+           bfd *_abfd = ABFD;                               \
+           _s->prev = NULL;                                 \
+           if (_abfd->sections)                             \
+             {                                              \
+               _s->next = _abfd->sections;                  \
+               _abfd->sections->prev = _s;                  \
+             }                                              \
+           else                                             \
+             {                                              \
+               _s->next = NULL;                             \
+               _abfd->section_last = _s;                    \
+             }                                              \
+           _abfd->sections = _s;                            \
+         }                                                  \
+       while (0)
+     #define bfd_section_list_insert_after(ABFD, A, S) \
+       do                                                   \
+         {                                                  \
+           asection *_a = A;                                \
+           asection *_s = S;                                \
+           asection *_next = _a->next;                      \
+           _s->next = _next;                                \
+           _s->prev = _a;                                   \
+           _a->next = _s;                                   \
+           if (_next)                                       \
+             _next->prev = _s;                              \
+           else                                             \
+             (ABFD)->section_last = _s;                     \
+         }                                                  \
+       while (0)
+     #define bfd_section_list_insert_before(ABFD, B, S) \
+       do                                                   \
+         {                                                  \
+           asection *_b = B;                                \
+           asection *_s = S;                                \
+           asection *_prev = _b->prev;                      \
+           _s->prev = _prev;                                \
+           _s->next = _b;                                   \
+           _b->prev = _s;                                   \
+           if (_prev)                                       \
+             _prev->next = _s;                              \
+           else                                             \
+             (ABFD)->sections = _s;                         \
+         }                                                  \
+       while (0)
+     #define bfd_section_removed_from_list(ABFD, S) \
+       ((S)->next == NULL ? (ABFD)->section_last != (S) : (S)->next->prev != (S))
+
+     #define BFD_FAKE_SECTION(SEC, FLAGS, SYM, NAME, IDX)                   \
+       /* name, id,  index, next, prev, flags, user_set_vma,            */  \
+       { NAME,  IDX, 0,     NULL, NULL, FLAGS, 0,                           \
+                                                                            \
+       /* linker_mark, linker_has_input, gc_mark, decompress_status,    */  \
+          0,           0,                1,       0,                        \
+                                                                            \
+       /* segment_mark, sec_info_type, use_rela_p,                      */  \
+          0,            0,             0,                                   \
+                                                                            \
+       /* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5,   */  \
+          0,        0,        0,        0,        0,        0,              \
+                                                                            \
+       /* vma, lma, size, rawsize, compressed_size, relax, relax_count, */  \
+          0,   0,   0,    0,       0,               0,     0,               \
+                                                                            \
+       /* output_offset, output_section, alignment_power,               */  \
+          0,             &SEC,           0,                                 \
+                                                                            \
+       /* relocation, orelocation, reloc_count, filepos, rel_filepos,   */  \
+          NULL,       NULL,        0,           0,       0,                 \
+                                                                            \
+       /* line_filepos, userdata, contents, lineno, lineno_count,       */  \
+          0,            NULL,     NULL,     NULL,   0,                      \
+                                                                            \
+       /* entsize, kept_section, moving_line_filepos,                    */ \
+          0,       NULL,          0,                                        \
+                                                                            \
+       /* target_index, used_by_bfd, constructor_chain, owner,          */  \
+          0,            NULL,        NULL,              NULL,               \
+                                                                            \
+       /* symbol,                    symbol_ptr_ptr,                    */  \
+          (struct bfd_symbol *) SYM, &SEC.symbol,                           \
+                                                                            \
+       /* map_head, map_tail                                            */  \
+          { NULL }, { NULL }                                                \
+         }
+
+
+File: bfd.info,  Node: section prototypes,  Prev: typedef asection,  Up: Sections
+
+2.6.5 Section prototypes
+------------------------
+
+These are the functions exported by the section handling part of BFD.
+
+2.6.5.1 `bfd_section_list_clear'
+................................
+
+*Synopsis*
+     void bfd_section_list_clear (bfd *);
+   *Description*
+Clears the section list, and also resets the section count and hash
+table entries.
+
+2.6.5.2 `bfd_get_section_by_name'
+.................................
+
+*Synopsis*
+     asection *bfd_get_section_by_name (bfd *abfd, const char *name);
+   *Description*
+Return the most recently created section attached to ABFD named NAME.
+Return NULL if no such section exists.
+
+2.6.5.3 `bfd_get_next_section_by_name'
+......................................
+
+*Synopsis*
+     asection *bfd_get_next_section_by_name (asection *sec);
+   *Description*
+Given SEC is a section returned by `bfd_get_section_by_name', return
+the next most recently created section attached to the same BFD with
+the same name.  Return NULL if no such section exists.
+
+2.6.5.4 `bfd_get_linker_section'
+................................
+
+*Synopsis*
+     asection *bfd_get_linker_section (bfd *abfd, const char *name);
+   *Description*
+Return the linker created section attached to ABFD named NAME.  Return
+NULL if no such section exists.
+
+2.6.5.5 `bfd_get_section_by_name_if'
+....................................
+
+*Synopsis*
+     asection *bfd_get_section_by_name_if
+        (bfd *abfd,
+         const char *name,
+         bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj),
+         void *obj);
+   *Description*
+Call the provided function FUNC for each section attached to the BFD
+ABFD whose name matches NAME, passing OBJ as an argument. The function
+will be called as if by
+
+            func (abfd, the_section, obj);
+
+   It returns the first section for which FUNC returns true, otherwise
+`NULL'.
+
+2.6.5.6 `bfd_get_unique_section_name'
+.....................................
+
+*Synopsis*
+     char *bfd_get_unique_section_name
+        (bfd *abfd, const char *templat, int *count);
+   *Description*
+Invent a section name that is unique in ABFD by tacking a dot and a
+digit suffix onto the original TEMPLAT.  If COUNT is non-NULL, then it
+specifies the first number tried as a suffix to generate a unique name.
+The value pointed to by COUNT will be incremented in this case.
+
+2.6.5.7 `bfd_make_section_old_way'
+..................................
+
+*Synopsis*
+     asection *bfd_make_section_old_way (bfd *abfd, const char *name);
+   *Description*
+Create a new empty section called NAME and attach it to the end of the
+chain of sections for the BFD ABFD. An attempt to create a section with
+a name which is already in use returns its pointer without changing the
+section chain.
+
+   It has the funny name since this is the way it used to be before it
+was rewritten....
+
+   Possible errors are:
+   * `bfd_error_invalid_operation' - If output has already started for
+     this BFD.
+
+   * `bfd_error_no_memory' - If memory allocation fails.
+
+2.6.5.8 `bfd_make_section_anyway_with_flags'
+............................................
+
+*Synopsis*
+     asection *bfd_make_section_anyway_with_flags
+        (bfd *abfd, const char *name, flagword flags);
+   *Description*
+Create a new empty section called NAME and attach it to the end of the
+chain of sections for ABFD.  Create a new section even if there is
+already a section with that name.  Also set the attributes of the new
+section to the value FLAGS.
+
+   Return `NULL' and set `bfd_error' on error; possible errors are:
+   * `bfd_error_invalid_operation' - If output has already started for
+     ABFD.
+
+   * `bfd_error_no_memory' - If memory allocation fails.
+
+2.6.5.9 `bfd_make_section_anyway'
+.................................
+
+*Synopsis*
+     asection *bfd_make_section_anyway (bfd *abfd, const char *name);
+   *Description*
+Create a new empty section called NAME and attach it to the end of the
+chain of sections for ABFD.  Create a new section even if there is
+already a section with that name.
+
+   Return `NULL' and set `bfd_error' on error; possible errors are:
+   * `bfd_error_invalid_operation' - If output has already started for
+     ABFD.
+
+   * `bfd_error_no_memory' - If memory allocation fails.
+
+2.6.5.10 `bfd_make_section_with_flags'
+......................................
+
+*Synopsis*
+     asection *bfd_make_section_with_flags
+        (bfd *, const char *name, flagword flags);
+   *Description*
+Like `bfd_make_section_anyway', but return `NULL' (without calling
+bfd_set_error ()) without changing the section chain if there is
+already a section named NAME.  Also set the attributes of the new
+section to the value FLAGS.  If there is an error, return `NULL' and set
+`bfd_error'.
+
+2.6.5.11 `bfd_make_section'
+...........................
+
+*Synopsis*
+     asection *bfd_make_section (bfd *, const char *name);
+   *Description*
+Like `bfd_make_section_anyway', but return `NULL' (without calling
+bfd_set_error ()) without changing the section chain if there is
+already a section named NAME.  If there is an error, return `NULL' and
+set `bfd_error'.
+
+2.6.5.12 `bfd_set_section_flags'
+................................
+
+*Synopsis*
+     bfd_boolean bfd_set_section_flags
+        (bfd *abfd, asection *sec, flagword flags);
+   *Description*
+Set the attributes of the section SEC in the BFD ABFD to the value
+FLAGS. Return `TRUE' on success, `FALSE' on error. Possible error
+returns are:
+
+   * `bfd_error_invalid_operation' - The section cannot have one or
+     more of the attributes requested. For example, a .bss section in
+     `a.out' may not have the `SEC_HAS_CONTENTS' field set.
+
+2.6.5.13 `bfd_rename_section'
+.............................
+
+*Synopsis*
+     void bfd_rename_section
+        (bfd *abfd, asection *sec, const char *newname);
+   *Description*
+Rename section SEC in ABFD to NEWNAME.
+
+2.6.5.14 `bfd_map_over_sections'
+................................
+
+*Synopsis*
+     void bfd_map_over_sections
+        (bfd *abfd,
+         void (*func) (bfd *abfd, asection *sect, void *obj),
+         void *obj);
+   *Description*
+Call the provided function FUNC for each section attached to the BFD
+ABFD, passing OBJ as an argument. The function will be called as if by
+
+            func (abfd, the_section, obj);
+
+   This is the preferred method for iterating over sections; an
+alternative would be to use a loop:
+
+               section *p;
+               for (p = abfd->sections; p != NULL; p = p->next)
+                  func (abfd, p, ...)
+
+2.6.5.15 `bfd_sections_find_if'
+...............................
+
+*Synopsis*
+     asection *bfd_sections_find_if
+        (bfd *abfd,
+         bfd_boolean (*operation) (bfd *abfd, asection *sect, void *obj),
+         void *obj);
+   *Description*
+Call the provided function OPERATION for each section attached to the
+BFD ABFD, passing OBJ as an argument. The function will be called as if
+by
+
+            operation (abfd, the_section, obj);
+
+   It returns the first section for which OPERATION returns true.
+
+2.6.5.16 `bfd_set_section_size'
+...............................
+
+*Synopsis*
+     bfd_boolean bfd_set_section_size
+        (bfd *abfd, asection *sec, bfd_size_type val);
+   *Description*
+Set SEC to the size VAL. If the operation is ok, then `TRUE' is
+returned, else `FALSE'.
+
+   Possible error returns:
+   * `bfd_error_invalid_operation' - Writing has started to the BFD, so
+     setting the size is invalid.
+
+2.6.5.17 `bfd_set_section_contents'
+...................................
+
+*Synopsis*
+     bfd_boolean bfd_set_section_contents
+        (bfd *abfd, asection *section, const void *data,
+         file_ptr offset, bfd_size_type count);
+   *Description*
+Sets the contents of the section SECTION in BFD ABFD to the data
+starting in memory at DATA. The data is written to the output section
+starting at offset OFFSET for COUNT octets.
+
+   Normally `TRUE' is returned, else `FALSE'. Possible error returns
+are:
+   * `bfd_error_no_contents' - The output section does not have the
+     `SEC_HAS_CONTENTS' attribute, so nothing can be written to it.
+
+   * and some more too
+   This routine is front end to the back end function
+`_bfd_set_section_contents'.
+
+2.6.5.18 `bfd_get_section_contents'
+...................................
+
+*Synopsis*
+     bfd_boolean bfd_get_section_contents
+        (bfd *abfd, asection *section, void *location, file_ptr offset,
+         bfd_size_type count);
+   *Description*
+Read data from SECTION in BFD ABFD into memory starting at LOCATION.
+The data is read at an offset of OFFSET from the start of the input
+section, and is read for COUNT bytes.
+
+   If the contents of a constructor with the `SEC_CONSTRUCTOR' flag set
+are requested or if the section does not have the `SEC_HAS_CONTENTS'
+flag set, then the LOCATION is filled with zeroes. If no errors occur,
+`TRUE' is returned, else `FALSE'.
+
+2.6.5.19 `bfd_malloc_and_get_section'
+.....................................
+
+*Synopsis*
+     bfd_boolean bfd_malloc_and_get_section
+        (bfd *abfd, asection *section, bfd_byte **buf);
+   *Description*
+Read all data from SECTION in BFD ABFD into a buffer, *BUF, malloc'd by
+this function.
+
+2.6.5.20 `bfd_copy_private_section_data'
+........................................
+
+*Synopsis*
+     bfd_boolean bfd_copy_private_section_data
+        (bfd *ibfd, asection *isec, bfd *obfd, asection *osec);
+   *Description*
+Copy private section information from ISEC in the BFD IBFD to the
+section OSEC in the BFD OBFD.  Return `TRUE' on success, `FALSE' on
+error.  Possible error returns are:
+
+   * `bfd_error_no_memory' - Not enough memory exists to create private
+     data for OSEC.
+
+     #define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \
+          BFD_SEND (obfd, _bfd_copy_private_section_data, \
+                    (ibfd, isection, obfd, osection))
+
+2.6.5.21 `bfd_generic_is_group_section'
+.......................................
+
+*Synopsis*
+     bfd_boolean bfd_generic_is_group_section (bfd *, const asection *sec);
+   *Description*
+Returns TRUE if SEC is a member of a group.
+
+2.6.5.22 `bfd_generic_discard_group'
+....................................
+
+*Synopsis*
+     bfd_boolean bfd_generic_discard_group (bfd *abfd, asection *group);
+   *Description*
+Remove all members of GROUP from the output.
+
+
+File: bfd.info,  Node: Symbols,  Next: Archives,  Prev: Sections,  Up: BFD front end
+
+2.7 Symbols
+===========
+
+BFD tries to maintain as much symbol information as it can when it
+moves information from file to file. BFD passes information to
+applications though the `asymbol' structure. When the application
+requests the symbol table, BFD reads the table in the native form and
+translates parts of it into the internal format. To maintain more than
+the information passed to applications, some targets keep some
+information "behind the scenes" in a structure only the particular back
+end knows about. For example, the coff back end keeps the original
+symbol table structure as well as the canonical structure when a BFD is
+read in. On output, the coff back end can reconstruct the output symbol
+table so that no information is lost, even information unique to coff
+which BFD doesn't know or understand. If a coff symbol table were read,
+but were written through an a.out back end, all the coff specific
+information would be lost. The symbol table of a BFD is not necessarily
+read in until a canonicalize request is made. Then the BFD back end
+fills in a table provided by the application with pointers to the
+canonical information.  To output symbols, the application provides BFD
+with a table of pointers to pointers to `asymbol's. This allows
+applications like the linker to output a symbol as it was read, since
+the "behind the scenes" information will be still available.
+
+* Menu:
+
+* Reading Symbols::
+* Writing Symbols::
+* Mini Symbols::
+* typedef asymbol::
+* symbol handling functions::
+
+
+File: bfd.info,  Node: Reading Symbols,  Next: Writing Symbols,  Prev: Symbols,  Up: Symbols
+
+2.7.1 Reading symbols
+---------------------
+
+There are two stages to reading a symbol table from a BFD: allocating
+storage, and the actual reading process. This is an excerpt from an
+application which reads the symbol table:
+
+              long storage_needed;
+              asymbol **symbol_table;
+              long number_of_symbols;
+              long i;
+
+              storage_needed = bfd_get_symtab_upper_bound (abfd);
+
+              if (storage_needed < 0)
+                FAIL
+
+              if (storage_needed == 0)
+                return;
+
+              symbol_table = xmalloc (storage_needed);
+                ...
+              number_of_symbols =
+                 bfd_canonicalize_symtab (abfd, symbol_table);
+
+              if (number_of_symbols < 0)
+                FAIL
+
+              for (i = 0; i < number_of_symbols; i++)
+                process_symbol (symbol_table[i]);
+
+   All storage for the symbols themselves is in an objalloc connected
+to the BFD; it is freed when the BFD is closed.
+
+
+File: bfd.info,  Node: Writing Symbols,  Next: Mini Symbols,  Prev: Reading Symbols,  Up: Symbols
+
+2.7.2 Writing symbols
+---------------------
+
+Writing of a symbol table is automatic when a BFD open for writing is
+closed. The application attaches a vector of pointers to pointers to
+symbols to the BFD being written, and fills in the symbol count. The
+close and cleanup code reads through the table provided and performs
+all the necessary operations. The BFD output code must always be
+provided with an "owned" symbol: one which has come from another BFD,
+or one which has been created using `bfd_make_empty_symbol'.  Here is an
+example showing the creation of a symbol table with only one element:
+
+            #include "sysdep.h"
+            #include "bfd.h"
+            int main (void)
+            {
+              bfd *abfd;
+              asymbol *ptrs[2];
+              asymbol *new;
+
+              abfd = bfd_openw ("foo","a.out-sunos-big");
+              bfd_set_format (abfd, bfd_object);
+              new = bfd_make_empty_symbol (abfd);
+              new->name = "dummy_symbol";
+              new->section = bfd_make_section_old_way (abfd, ".text");
+              new->flags = BSF_GLOBAL;
+              new->value = 0x12345;
+
+              ptrs[0] = new;
+              ptrs[1] = 0;
+
+              bfd_set_symtab (abfd, ptrs, 1);
+              bfd_close (abfd);
+              return 0;
+            }
+
+            ./makesym
+            nm foo
+            00012345 A dummy_symbol
+
+   Many formats cannot represent arbitrary symbol information; for
+instance, the `a.out' object format does not allow an arbitrary number
+of sections. A symbol pointing to a section which is not one  of
+`.text', `.data' or `.bss' cannot be described.
+
+
+File: bfd.info,  Node: Mini Symbols,  Next: typedef asymbol,  Prev: Writing Symbols,  Up: Symbols
+
+2.7.3 Mini Symbols
+------------------
+
+Mini symbols provide read-only access to the symbol table.  They use
+less memory space, but require more time to access.  They can be useful
+for tools like nm or objdump, which may have to handle symbol tables of
+extremely large executables.
+
+   The `bfd_read_minisymbols' function will read the symbols into
+memory in an internal form.  It will return a `void *' pointer to a
+block of memory, a symbol count, and the size of each symbol.  The
+pointer is allocated using `malloc', and should be freed by the caller
+when it is no longer needed.
+
+   The function `bfd_minisymbol_to_symbol' will take a pointer to a
+minisymbol, and a pointer to a structure returned by
+`bfd_make_empty_symbol', and return a `asymbol' structure.  The return
+value may or may not be the same as the value from
+`bfd_make_empty_symbol' which was passed in.
+
+
+File: bfd.info,  Node: typedef asymbol,  Next: symbol handling functions,  Prev: Mini Symbols,  Up: Symbols
+
+2.7.4 typedef asymbol
+---------------------
+
+An `asymbol' has the form:
+
+
+     typedef struct bfd_symbol
+     {
+       /* A pointer to the BFD which owns the symbol. This information
+          is necessary so that a back end can work out what additional
+          information (invisible to the application writer) is carried
+          with the symbol.
+
+          This field is *almost* redundant, since you can use section->owner
+          instead, except that some symbols point to the global sections
+          bfd_{abs,com,und}_section.  This could be fixed by making
+          these globals be per-bfd (or per-target-flavor).  FIXME.  */
+       struct bfd *the_bfd; /* Use bfd_asymbol_bfd(sym) to access this field.  */
+
+       /* The text of the symbol. The name is left alone, and not copied; the
+          application may not alter it.  */
+       const char *name;
+
+       /* The value of the symbol.  This really should be a union of a
+          numeric value with a pointer, since some flags indicate that
+          a pointer to another symbol is stored here.  */
+       symvalue value;
+
+       /* Attributes of a symbol.  */
+     #define BSF_NO_FLAGS           0x00
+
+       /* The symbol has local scope; `static' in `C'. The value
+          is the offset into the section of the data.  */
+     #define BSF_LOCAL              (1 << 0)
+
+       /* The symbol has global scope; initialized data in `C'. The
+          value is the offset into the section of the data.  */
+     #define BSF_GLOBAL             (1 << 1)
+
+       /* The symbol has global scope and is exported. The value is
+          the offset into the section of the data.  */
+     #define BSF_EXPORT     BSF_GLOBAL /* No real difference.  */
+
+       /* A normal C symbol would be one of:
+          `BSF_LOCAL', `BSF_COMMON',  `BSF_UNDEFINED' or
+          `BSF_GLOBAL'.  */
+
+       /* The symbol is a debugging record. The value has an arbitrary
+          meaning, unless BSF_DEBUGGING_RELOC is also set.  */
+     #define BSF_DEBUGGING          (1 << 2)
+
+       /* The symbol denotes a function entry point.  Used in ELF,
+          perhaps others someday.  */
+     #define BSF_FUNCTION           (1 << 3)
+
+       /* Used by the linker.  */
+     #define BSF_KEEP               (1 << 5)
+     #define BSF_KEEP_G             (1 << 6)
+
+       /* A weak global symbol, overridable without warnings by
+          a regular global symbol of the same name.  */
+     #define BSF_WEAK               (1 << 7)
+
+       /* This symbol was created to point to a section, e.g. ELF's
+          STT_SECTION symbols.  */
+     #define BSF_SECTION_SYM        (1 << 8)
+
+       /* The symbol used to be a common symbol, but now it is
+          allocated.  */
+     #define BSF_OLD_COMMON         (1 << 9)
+
+       /* In some files the type of a symbol sometimes alters its
+          location in an output file - ie in coff a `ISFCN' symbol
+          which is also `C_EXT' symbol appears where it was
+          declared and not at the end of a section.  This bit is set
+          by the target BFD part to convey this information.  */
+     #define BSF_NOT_AT_END         (1 << 10)
+
+       /* Signal that the symbol is the label of constructor section.  */
+     #define BSF_CONSTRUCTOR        (1 << 11)
+
+       /* Signal that the symbol is a warning symbol.  The name is a
+          warning.  The name of the next symbol is the one to warn about;
+          if a reference is made to a symbol with the same name as the next
+          symbol, a warning is issued by the linker.  */
+     #define BSF_WARNING            (1 << 12)
+
+       /* Signal that the symbol is indirect.  This symbol is an indirect
+          pointer to the symbol with the same name as the next symbol.  */
+     #define BSF_INDIRECT           (1 << 13)
+
+       /* BSF_FILE marks symbols that contain a file name.  This is used
+          for ELF STT_FILE symbols.  */
+     #define BSF_FILE               (1 << 14)
+
+       /* Symbol is from dynamic linking information.  */
+     #define BSF_DYNAMIC            (1 << 15)
+
+       /* The symbol denotes a data object.  Used in ELF, and perhaps
+          others someday.  */
+     #define BSF_OBJECT             (1 << 16)
+
+       /* This symbol is a debugging symbol.  The value is the offset
+          into the section of the data.  BSF_DEBUGGING should be set
+          as well.  */
+     #define BSF_DEBUGGING_RELOC    (1 << 17)
+
+       /* This symbol is thread local.  Used in ELF.  */
+     #define BSF_THREAD_LOCAL       (1 << 18)
+
+       /* This symbol represents a complex relocation expression,
+          with the expression tree serialized in the symbol name.  */
+     #define BSF_RELC               (1 << 19)
+
+       /* This symbol represents a signed complex relocation expression,
+          with the expression tree serialized in the symbol name.  */
+     #define BSF_SRELC              (1 << 20)
+
+       /* This symbol was created by bfd_get_synthetic_symtab.  */
+     #define BSF_SYNTHETIC          (1 << 21)
+
+       /* This symbol is an indirect code object.  Unrelated to BSF_INDIRECT.
+          The dynamic linker will compute the value of this symbol by
+          calling the function that it points to.  BSF_FUNCTION must
+          also be also set.  */
+     #define BSF_GNU_INDIRECT_FUNCTION (1 << 22)
+       /* This symbol is a globally unique data object.  The dynamic linker
+          will make sure that in the entire process there is just one symbol
+          with this name and type in use.  BSF_OBJECT must also be set.  */
+     #define BSF_GNU_UNIQUE         (1 << 23)
+
+       flagword flags;
+
+       /* A pointer to the section to which this symbol is
+          relative.  This will always be non NULL, there are special
+          sections for undefined and absolute symbols.  */
+       struct bfd_section *section;
+
+       /* Back end special data.  */
+       union
+         {
+           void *p;
+           bfd_vma i;
+         }
+       udata;
+     }
+     asymbol;
+
+
+File: bfd.info,  Node: symbol handling functions,  Prev: typedef asymbol,  Up: Symbols
+
+2.7.5 Symbol handling functions
+-------------------------------
+
+2.7.5.1 `bfd_get_symtab_upper_bound'
+....................................
+
+*Description*
+Return the number of bytes required to store a vector of pointers to
+`asymbols' for all the symbols in the BFD ABFD, including a terminal
+NULL pointer. If there are no symbols in the BFD, then return 0.  If an
+error occurs, return -1.
+     #define bfd_get_symtab_upper_bound(abfd) \
+          BFD_SEND (abfd, _bfd_get_symtab_upper_bound, (abfd))
+
+2.7.5.2 `bfd_is_local_label'
+............................
+
+*Synopsis*
+     bfd_boolean bfd_is_local_label (bfd *abfd, asymbol *sym);
+   *Description*
+Return TRUE if the given symbol SYM in the BFD ABFD is a compiler
+generated local label, else return FALSE.
+
+2.7.5.3 `bfd_is_local_label_name'
+.................................
+
+*Synopsis*
+     bfd_boolean bfd_is_local_label_name (bfd *abfd, const char *name);
+   *Description*
+Return TRUE if a symbol with the name NAME in the BFD ABFD is a
+compiler generated local label, else return FALSE.  This just checks
+whether the name has the form of a local label.
+     #define bfd_is_local_label_name(abfd, name) \
+       BFD_SEND (abfd, _bfd_is_local_label_name, (abfd, name))
+
+2.7.5.4 `bfd_is_target_special_symbol'
+......................................
+
+*Synopsis*
+     bfd_boolean bfd_is_target_special_symbol (bfd *abfd, asymbol *sym);
+   *Description*
+Return TRUE iff a symbol SYM in the BFD ABFD is something special to
+the particular target represented by the BFD.  Such symbols should
+normally not be mentioned to the user.
+     #define bfd_is_target_special_symbol(abfd, sym) \
+       BFD_SEND (abfd, _bfd_is_target_special_symbol, (abfd, sym))
+
+2.7.5.5 `bfd_canonicalize_symtab'
+.................................
+
+*Description*
+Read the symbols from the BFD ABFD, and fills in the vector LOCATION
+with pointers to the symbols and a trailing NULL.  Return the actual
+number of symbol pointers, not including the NULL.
+     #define bfd_canonicalize_symtab(abfd, location) \
+       BFD_SEND (abfd, _bfd_canonicalize_symtab, (abfd, location))
+
+2.7.5.6 `bfd_set_symtab'
+........................
+
+*Synopsis*
+     bfd_boolean bfd_set_symtab
+        (bfd *abfd, asymbol **location, unsigned int count);
+   *Description*
+Arrange that when the output BFD ABFD is closed, the table LOCATION of
+COUNT pointers to symbols will be written.
+
+2.7.5.7 `bfd_print_symbol_vandf'
+................................
+
+*Synopsis*
+     void bfd_print_symbol_vandf (bfd *abfd, void *file, asymbol *symbol);
+   *Description*
+Print the value and flags of the SYMBOL supplied to the stream FILE.
+
+2.7.5.8 `bfd_make_empty_symbol'
+...............................
+
+*Description*
+Create a new `asymbol' structure for the BFD ABFD and return a pointer
+to it.
+
+   This routine is necessary because each back end has private
+information surrounding the `asymbol'. Building your own `asymbol' and
+pointing to it will not create the private information, and will cause
+problems later on.
+     #define bfd_make_empty_symbol(abfd) \
+       BFD_SEND (abfd, _bfd_make_empty_symbol, (abfd))
+
+2.7.5.9 `_bfd_generic_make_empty_symbol'
+........................................
+
+*Synopsis*
+     asymbol *_bfd_generic_make_empty_symbol (bfd *);
+   *Description*
+Create a new `asymbol' structure for the BFD ABFD and return a pointer
+to it.  Used by core file routines, binary back-end and anywhere else
+where no private info is needed.
+
+2.7.5.10 `bfd_make_debug_symbol'
+................................
+
+*Description*
+Create a new `asymbol' structure for the BFD ABFD, to be used as a
+debugging symbol.  Further details of its use have yet to be worked out.
+     #define bfd_make_debug_symbol(abfd,ptr,size) \
+       BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd, ptr, size))
+
+2.7.5.11 `bfd_decode_symclass'
+..............................
+
+*Description*
+Return a character corresponding to the symbol class of SYMBOL, or '?'
+for an unknown class.
+
+   *Synopsis*
+     int bfd_decode_symclass (asymbol *symbol);
+   
+2.7.5.12 `bfd_is_undefined_symclass'
+....................................
+
+*Description*
+Returns non-zero if the class symbol returned by bfd_decode_symclass
+represents an undefined symbol.  Returns zero otherwise.
+
+   *Synopsis*
+     bfd_boolean bfd_is_undefined_symclass (int symclass);
+   
+2.7.5.13 `bfd_symbol_info'
+..........................
+
+*Description*
+Fill in the basic info about symbol that nm needs.  Additional info may
+be added by the back-ends after calling this function.
+
+   *Synopsis*
+     void bfd_symbol_info (asymbol *symbol, symbol_info *ret);
+   
+2.7.5.14 `bfd_copy_private_symbol_data'
+.......................................
+
+*Synopsis*
+     bfd_boolean bfd_copy_private_symbol_data
+        (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym);
+   *Description*
+Copy private symbol information from ISYM in the BFD IBFD to the symbol
+OSYM in the BFD OBFD.  Return `TRUE' on success, `FALSE' on error.
+Possible error returns are:
+
+   * `bfd_error_no_memory' - Not enough memory exists to create private
+     data for OSEC.
+
+     #define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \
+       BFD_SEND (obfd, _bfd_copy_private_symbol_data, \
+                 (ibfd, isymbol, obfd, osymbol))
+
+
+File: bfd.info,  Node: Archives,  Next: Formats,  Prev: Symbols,  Up: BFD front end
+
+2.8 Archives
+============
+
+*Description*
+An archive (or library) is just another BFD.  It has a symbol table,
+although there's not much a user program will do with it.
+
+   The big difference between an archive BFD and an ordinary BFD is
+that the archive doesn't have sections.  Instead it has a chain of BFDs
+that are considered its contents.  These BFDs can be manipulated like
+any other.  The BFDs contained in an archive opened for reading will
+all be opened for reading.  You may put either input or output BFDs
+into an archive opened for output; they will be handled correctly when
+the archive is closed.
+
+   Use `bfd_openr_next_archived_file' to step through the contents of
+an archive opened for input.  You don't have to read the entire archive
+if you don't want to!  Read it until you find what you want.
+
+   Archive contents of output BFDs are chained through the `next'
+pointer in a BFD.  The first one is findable through the `archive_head'
+slot of the archive.  Set it with `bfd_set_archive_head' (q.v.).  A
+given BFD may be in only one open output archive at a time.
+
+   As expected, the BFD archive code is more general than the archive
+code of any given environment.  BFD archives may contain files of
+different formats (e.g., a.out and coff) and even different
+architectures.  You may even place archives recursively into archives!
+
+   This can cause unexpected confusion, since some archive formats are
+more expressive than others.  For instance, Intel COFF archives can
+preserve long filenames; SunOS a.out archives cannot.  If you move a
+file from the first to the second format and back again, the filename
+may be truncated.  Likewise, different a.out environments have different
+conventions as to how they truncate filenames, whether they preserve
+directory names in filenames, etc.  When interoperating with native
+tools, be sure your files are homogeneous.
+
+   Beware: most of these formats do not react well to the presence of
+spaces in filenames.  We do the best we can, but can't always handle
+this case due to restrictions in the format of archives.  Many Unix
+utilities are braindead in regards to spaces and such in filenames
+anyway, so this shouldn't be much of a restriction.
+
+   Archives are supported in BFD in `archive.c'.
+
+2.8.1 Archive functions
+-----------------------
+
+2.8.1.1 `bfd_get_next_mapent'
+.............................
+
+*Synopsis*
+     symindex bfd_get_next_mapent
+        (bfd *abfd, symindex previous, carsym **sym);
+   *Description*
+Step through archive ABFD's symbol table (if it has one).  Successively
+update SYM with the next symbol's information, returning that symbol's
+(internal) index into the symbol table.
+
+   Supply `BFD_NO_MORE_SYMBOLS' as the PREVIOUS entry to get the first
+one; returns `BFD_NO_MORE_SYMBOLS' when you've already got the last one.
+
+   A `carsym' is a canonical archive symbol.  The only user-visible
+element is its name, a null-terminated string.
+
+2.8.1.2 `bfd_set_archive_head'
+..............................
+
+*Synopsis*
+     bfd_boolean bfd_set_archive_head (bfd *output, bfd *new_head);
+   *Description*
+Set the head of the chain of BFDs contained in the archive OUTPUT to
+NEW_HEAD.
+
+2.8.1.3 `bfd_openr_next_archived_file'
+......................................
+
+*Synopsis*
+     bfd *bfd_openr_next_archived_file (bfd *archive, bfd *previous);
+   *Description*
+Provided a BFD, ARCHIVE, containing an archive and NULL, open an input
+BFD on the first contained element and returns that.  Subsequent calls
+should pass the archive and the previous return value to return a
+created BFD to the next contained element. NULL is returned when there
+are no more.
+
+
+File: bfd.info,  Node: Formats,  Next: Relocations,  Prev: Archives,  Up: BFD front end
+
+2.9 File formats
+================
+
+A format is a BFD concept of high level file contents type. The formats
+supported by BFD are:
+
+   * `bfd_object'
+   The BFD may contain data, symbols, relocations and debug info.
+
+   * `bfd_archive'
+   The BFD contains other BFDs and an optional index.
+
+   * `bfd_core'
+   The BFD contains the result of an executable core dump.
+
+2.9.1 File format functions
+---------------------------
+
+2.9.1.1 `bfd_check_format'
+..........................
+
+*Synopsis*
+     bfd_boolean bfd_check_format (bfd *abfd, bfd_format format);
+   *Description*
+Verify if the file attached to the BFD ABFD is compatible with the
+format FORMAT (i.e., one of `bfd_object', `bfd_archive' or `bfd_core').
+
+   If the BFD has been set to a specific target before the call, only
+the named target and format combination is checked. If the target has
+not been set, or has been set to `default', then all the known target
+backends is interrogated to determine a match.  If the default target
+matches, it is used.  If not, exactly one target must recognize the
+file, or an error results.
+
+   The function returns `TRUE' on success, otherwise `FALSE' with one
+of the following error codes:
+
+   * `bfd_error_invalid_operation' - if `format' is not one of
+     `bfd_object', `bfd_archive' or `bfd_core'.
+
+   * `bfd_error_system_call' - if an error occured during a read - even
+     some file mismatches can cause bfd_error_system_calls.
+
+   * `file_not_recognised' - none of the backends recognised the file
+     format.
+
+   * `bfd_error_file_ambiguously_recognized' - more than one backend
+     recognised the file format.
+
+2.9.1.2 `bfd_check_format_matches'
+..................................
+
+*Synopsis*
+     bfd_boolean bfd_check_format_matches
+        (bfd *abfd, bfd_format format, char ***matching);
+   *Description*
+Like `bfd_check_format', except when it returns FALSE with `bfd_errno'
+set to `bfd_error_file_ambiguously_recognized'.  In that case, if
+MATCHING is not NULL, it will be filled in with a NULL-terminated list
+of the names of the formats that matched, allocated with `malloc'.
+Then the user may choose a format and try again.
+
+   When done with the list that MATCHING points to, the caller should
+free it.
+
+2.9.1.3 `bfd_set_format'
+........................
+
+*Synopsis*
+     bfd_boolean bfd_set_format (bfd *abfd, bfd_format format);
+   *Description*
+This function sets the file format of the BFD ABFD to the format
+FORMAT. If the target set in the BFD does not support the format
+requested, the format is invalid, or the BFD is not open for writing,
+then an error occurs.
+
+2.9.1.4 `bfd_format_string'
+...........................
+
+*Synopsis*
+     const char *bfd_format_string (bfd_format format);
+   *Description*
+Return a pointer to a const string `invalid', `object', `archive',
+`core', or `unknown', depending upon the value of FORMAT.
+
+
+File: bfd.info,  Node: Relocations,  Next: Core Files,  Prev: Formats,  Up: BFD front end
+
+2.10 Relocations
+================
+
+BFD maintains relocations in much the same way it maintains symbols:
+they are left alone until required, then read in en-masse and
+translated into an internal form.  A common routine
+`bfd_perform_relocation' acts upon the canonical form to do the fixup.
+
+   Relocations are maintained on a per section basis, while symbols are
+maintained on a per BFD basis.
+
+   All that a back end has to do to fit the BFD interface is to create
+a `struct reloc_cache_entry' for each relocation in a particular
+section, and fill in the right bits of the structures.
+
+* Menu:
+
+* typedef arelent::
+* howto manager::
+
+
+File: bfd.info,  Node: typedef arelent,  Next: howto manager,  Prev: Relocations,  Up: Relocations
+
+2.10.1 typedef arelent
+----------------------
+
+This is the structure of a relocation entry:
+
+
+     typedef enum bfd_reloc_status
+     {
+       /* No errors detected.  */
+       bfd_reloc_ok,
+
+       /* The relocation was performed, but there was an overflow.  */
+       bfd_reloc_overflow,
+
+       /* The address to relocate was not within the section supplied.  */
+       bfd_reloc_outofrange,
+
+       /* Used by special functions.  */
+       bfd_reloc_continue,
+
+       /* Unsupported relocation size requested.  */
+       bfd_reloc_notsupported,
+
+       /* Unused.  */
+       bfd_reloc_other,
+
+       /* The symbol to relocate against was undefined.  */
+       bfd_reloc_undefined,
+
+       /* The relocation was performed, but may not be ok - presently
+          generated only when linking i960 coff files with i960 b.out
+          symbols.  If this type is returned, the error_message argument
+          to bfd_perform_relocation will be set.  */
+       bfd_reloc_dangerous
+      }
+      bfd_reloc_status_type;
+
+
+     typedef struct reloc_cache_entry
+     {
+       /* A pointer into the canonical table of pointers.  */
+       struct bfd_symbol **sym_ptr_ptr;
+
+       /* offset in section.  */
+       bfd_size_type address;
+
+       /* addend for relocation value.  */
+       bfd_vma addend;
+
+       /* Pointer to how to perform the required relocation.  */
+       reloc_howto_type *howto;
+
+     }
+     arelent;
+   *Description*
+Here is a description of each of the fields within an `arelent':
+
+   * `sym_ptr_ptr'
+   The symbol table pointer points to a pointer to the symbol
+associated with the relocation request.  It is the pointer into the
+table returned by the back end's `canonicalize_symtab' action. *Note
+Symbols::. The symbol is referenced through a pointer to a pointer so
+that tools like the linker can fix up all the symbols of the same name
+by modifying only one pointer. The relocation routine looks in the
+symbol and uses the base of the section the symbol is attached to and
+the value of the symbol as the initial relocation offset. If the symbol
+pointer is zero, then the section provided is looked up.
+
+   * `address'
+   The `address' field gives the offset in bytes from the base of the
+section data which owns the relocation record to the first byte of
+relocatable information. The actual data relocated will be relative to
+this point; for example, a relocation type which modifies the bottom
+two bytes of a four byte word would not touch the first byte pointed to
+in a big endian world.
+
+   * `addend'
+   The `addend' is a value provided by the back end to be added (!)  to
+the relocation offset. Its interpretation is dependent upon the howto.
+For example, on the 68k the code:
+
+             char foo[];
+             main()
+                     {
+                     return foo[0x12345678];
+                     }
+
+   Could be compiled into:
+
+             linkw fp,#-4
+             moveb @#12345678,d0
+             extbl d0
+             unlk fp
+             rts
+
+   This could create a reloc pointing to `foo', but leave the offset in
+the data, something like:
+
+     RELOCATION RECORDS FOR [.text]:
+     offset   type      value
+     00000006 32        _foo
+
+     00000000 4e56 fffc          ; linkw fp,#-4
+     00000004 1039 1234 5678     ; moveb @#12345678,d0
+     0000000a 49c0               ; extbl d0
+     0000000c 4e5e               ; unlk fp
+     0000000e 4e75               ; rts
+
+   Using coff and an 88k, some instructions don't have enough space in
+them to represent the full address range, and pointers have to be
+loaded in two parts. So you'd get something like:
+
+             or.u     r13,r0,hi16(_foo+0x12345678)
+             ld.b     r2,r13,lo16(_foo+0x12345678)
+             jmp      r1
+
+   This should create two relocs, both pointing to `_foo', and with
+0x12340000 in their addend field. The data would consist of:
+
+     RELOCATION RECORDS FOR [.text]:
+     offset   type      value
+     00000002 HVRT16    _foo+0x12340000
+     00000006 LVRT16    _foo+0x12340000
+
+     00000000 5da05678           ; or.u r13,r0,0x5678
+     00000004 1c4d5678           ; ld.b r2,r13,0x5678
+     00000008 f400c001           ; jmp r1
+
+   The relocation routine digs out the value from the data, adds it to
+the addend to get the original offset, and then adds the value of
+`_foo'. Note that all 32 bits have to be kept around somewhere, to cope
+with carry from bit 15 to bit 16.
+
+   One further example is the sparc and the a.out format. The sparc has
+a similar problem to the 88k, in that some instructions don't have room
+for an entire offset, but on the sparc the parts are created in odd
+sized lumps. The designers of the a.out format chose to not use the
+data within the section for storing part of the offset; all the offset
+is kept within the reloc. Anything in the data should be ignored.
+
+             save %sp,-112,%sp
+             sethi %hi(_foo+0x12345678),%g2
+             ldsb [%g2+%lo(_foo+0x12345678)],%i0
+             ret
+             restore
+
+   Both relocs contain a pointer to `foo', and the offsets contain junk.
+
+     RELOCATION RECORDS FOR [.text]:
+     offset   type      value
+     00000004 HI22      _foo+0x12345678
+     00000008 LO10      _foo+0x12345678
+
+     00000000 9de3bf90     ; save %sp,-112,%sp
+     00000004 05000000     ; sethi %hi(_foo+0),%g2
+     00000008 f048a000     ; ldsb [%g2+%lo(_foo+0)],%i0
+     0000000c 81c7e008     ; ret
+     00000010 81e80000     ; restore
+
+   * `howto'
+   The `howto' field can be imagined as a relocation instruction. It is
+a pointer to a structure which contains information on what to do with
+all of the other information in the reloc record and data section. A
+back end would normally have a relocation instruction set and turn
+relocations into pointers to the correct structure on input - but it
+would be possible to create each howto field on demand.
+
+2.10.1.1 `enum complain_overflow'
+.................................
+
+Indicates what sort of overflow checking should be done when performing
+a relocation.
+
+
+     enum complain_overflow
+     {
+       /* Do not complain on overflow.  */
+       complain_overflow_dont,
+
+       /* Complain if the value overflows when considered as a signed
+          number one bit larger than the field.  ie. A bitfield of N bits
+          is allowed to represent -2**n to 2**n-1.  */
+       complain_overflow_bitfield,
+
+       /* Complain if the value overflows when considered as a signed
+          number.  */
+       complain_overflow_signed,
+
+       /* Complain if the value overflows when considered as an
+          unsigned number.  */
+       complain_overflow_unsigned
+     };
+
+2.10.1.2 `reloc_howto_type'
+...........................
+
+The `reloc_howto_type' is a structure which contains all the
+information that libbfd needs to know to tie up a back end's data.
+
+     struct bfd_symbol;             /* Forward declaration.  */
+
+     struct reloc_howto_struct
+     {
+       /*  The type field has mainly a documentary use - the back end can
+           do what it wants with it, though normally the back end's
+           external idea of what a reloc number is stored
+           in this field.  For example, a PC relative word relocation
+           in a coff environment has the type 023 - because that's
+           what the outside world calls a R_PCRWORD reloc.  */
+       unsigned int type;
+
+       /*  The value the final relocation is shifted right by.  This drops
+           unwanted data from the relocation.  */
+       unsigned int rightshift;
+
+       /*  The size of the item to be relocated.  This is *not* a
+           power-of-two measure.  To get the number of bytes operated
+           on by a type of relocation, use bfd_get_reloc_size.  */
+       int size;
+
+       /*  The number of bits in the item to be relocated.  This is used
+           when doing overflow checking.  */
+       unsigned int bitsize;
+
+       /*  The relocation is relative to the field being relocated.  */
+       bfd_boolean pc_relative;
+
+       /*  The bit position of the reloc value in the destination.
+           The relocated value is left shifted by this amount.  */
+       unsigned int bitpos;
+
+       /* What type of overflow error should be checked for when
+          relocating.  */
+       enum complain_overflow complain_on_overflow;
+
+       /* If this field is non null, then the supplied function is
+          called rather than the normal function.  This allows really
+          strange relocation methods to be accommodated (e.g., i960 callj
+          instructions).  */
+       bfd_reloc_status_type (*special_function)
+         (bfd *, arelent *, struct bfd_symbol *, void *, asection *,
+          bfd *, char **);
+
+       /* The textual name of the relocation type.  */
+       char *name;
+
+       /* Some formats record a relocation addend in the section contents
+          rather than with the relocation.  For ELF formats this is the
+          distinction between USE_REL and USE_RELA (though the code checks
+          for USE_REL == 1/0).  The value of this field is TRUE if the
+          addend is recorded with the section contents; when performing a
+          partial link (ld -r) the section contents (the data) will be
+          modified.  The value of this field is FALSE if addends are
+          recorded with the relocation (in arelent.addend); when performing
+          a partial link the relocation will be modified.
+          All relocations for all ELF USE_RELA targets should set this field
+          to FALSE (values of TRUE should be looked on with suspicion).
+          However, the converse is not true: not all relocations of all ELF
+          USE_REL targets set this field to TRUE.  Why this is so is peculiar
+          to each particular target.  For relocs that aren't used in partial
+          links (e.g. GOT stuff) it doesn't matter what this is set to.  */
+       bfd_boolean partial_inplace;
+
+       /* src_mask selects the part of the instruction (or data) to be used
+          in the relocation sum.  If the target relocations don't have an
+          addend in the reloc, eg. ELF USE_REL, src_mask will normally equal
+          dst_mask to extract the addend from the section contents.  If
+          relocations do have an addend in the reloc, eg. ELF USE_RELA, this
+          field should be zero.  Non-zero values for ELF USE_RELA targets are
+          bogus as in those cases the value in the dst_mask part of the
+          section contents should be treated as garbage.  */
+       bfd_vma src_mask;
+
+       /* dst_mask selects which parts of the instruction (or data) are
+          replaced with a relocated value.  */
+       bfd_vma dst_mask;
+
+       /* When some formats create PC relative instructions, they leave
+          the value of the pc of the place being relocated in the offset
+          slot of the instruction, so that a PC relative relocation can
+          be made just by adding in an ordinary offset (e.g., sun3 a.out).
+          Some formats leave the displacement part of an instruction
+          empty (e.g., m88k bcs); this flag signals the fact.  */
+       bfd_boolean pcrel_offset;
+     };
+   
+2.10.1.3 `The HOWTO Macro'
+..........................
+
+*Description*
+The HOWTO define is horrible and will go away.
+     #define HOWTO(C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \
+       { (unsigned) C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC }
+
+   *Description*
+And will be replaced with the totally magic way. But for the moment, we
+are compatible, so do it this way.
+     #define NEWHOWTO(FUNCTION, NAME, SIZE, REL, IN) \
+       HOWTO (0, 0, SIZE, 0, REL, 0, complain_overflow_dont, FUNCTION, \
+              NAME, FALSE, 0, 0, IN)
+
+   *Description*
+This is used to fill in an empty howto entry in an array.
+     #define EMPTY_HOWTO(C) \
+       HOWTO ((C), 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL, \
+              NULL, FALSE, 0, 0, FALSE)
+
+   *Description*
+Helper routine to turn a symbol into a relocation value.
+     #define HOWTO_PREPARE(relocation, symbol)               \
+       {                                                     \
+         if (symbol != NULL)                                 \
+           {                                                 \
+             if (bfd_is_com_section (symbol->section))       \
+               {                                             \
+                 relocation = 0;                             \
+               }                                             \
+             else                                            \
+               {                                             \
+                 relocation = symbol->value;                 \
+               }                                             \
+           }                                                 \
+       }
+
+2.10.1.4 `bfd_get_reloc_size'
+.............................
+
+*Synopsis*
+     unsigned int bfd_get_reloc_size (reloc_howto_type *);
+   *Description*
+For a reloc_howto_type that operates on a fixed number of bytes, this
+returns the number of bytes operated on.
+
+2.10.1.5 `arelent_chain'
+........................
+
+*Description*
+How relocs are tied together in an `asection':
+     typedef struct relent_chain
+     {
+       arelent relent;
+       struct relent_chain *next;
+     }
+     arelent_chain;
+
+2.10.1.6 `bfd_check_overflow'
+.............................
+
+*Synopsis*
+     bfd_reloc_status_type bfd_check_overflow
+        (enum complain_overflow how,
+         unsigned int bitsize,
+         unsigned int rightshift,
+         unsigned int addrsize,
+         bfd_vma relocation);
+   *Description*
+Perform overflow checking on RELOCATION which has BITSIZE significant
+bits and will be shifted right by RIGHTSHIFT bits, on a machine with
+addresses containing ADDRSIZE significant bits.  The result is either of
+`bfd_reloc_ok' or `bfd_reloc_overflow'.
+
+2.10.1.7 `bfd_perform_relocation'
+.................................
+
+*Synopsis*
+     bfd_reloc_status_type bfd_perform_relocation
+        (bfd *abfd,
+         arelent *reloc_entry,
+         void *data,
+         asection *input_section,
+         bfd *output_bfd,
+         char **error_message);
+   *Description*
+If OUTPUT_BFD is supplied to this function, the generated image will be
+relocatable; the relocations are copied to the output file after they
+have been changed to reflect the new state of the world. There are two
+ways of reflecting the results of partial linkage in an output file: by
+modifying the output data in place, and by modifying the relocation
+record.  Some native formats (e.g., basic a.out and basic coff) have no
+way of specifying an addend in the relocation type, so the addend has
+to go in the output data.  This is no big deal since in these formats
+the output data slot will always be big enough for the addend. Complex
+reloc types with addends were invented to solve just this problem.  The
+ERROR_MESSAGE argument is set to an error message if this return
+`bfd_reloc_dangerous'.
+
+2.10.1.8 `bfd_install_relocation'
+.................................
+
+*Synopsis*
+     bfd_reloc_status_type bfd_install_relocation
+        (bfd *abfd,
+         arelent *reloc_entry,
+         void *data, bfd_vma data_start,
+         asection *input_section,
+         char **error_message);
+   *Description*
+This looks remarkably like `bfd_perform_relocation', except it does not
+expect that the section contents have been filled in.  I.e., it's
+suitable for use when creating, rather than applying a relocation.
+
+   For now, this function should be considered reserved for the
+assembler.
+
+
+File: bfd.info,  Node: howto manager,  Prev: typedef arelent,  Up: Relocations
+
+2.10.2 The howto manager
+------------------------
+
+When an application wants to create a relocation, but doesn't know what
+the target machine might call it, it can find out by using this bit of
+code.
+
+2.10.2.1 `bfd_reloc_code_type'
+..............................
+
+*Description*
+The insides of a reloc code.  The idea is that, eventually, there will
+be one enumerator for every type of relocation we ever do.  Pass one of
+these values to `bfd_reloc_type_lookup', and it'll return a howto
+pointer.
+
+   This does mean that the application must determine the correct
+enumerator value; you can't get a howto pointer from a random set of
+attributes.
+
+   Here are the possible values for `enum bfd_reloc_code_real':
+
+ -- : BFD_RELOC_64
+ -- : BFD_RELOC_32
+ -- : BFD_RELOC_26
+ -- : BFD_RELOC_24
+ -- : BFD_RELOC_16
+ -- : BFD_RELOC_14
+ -- : BFD_RELOC_8
+     Basic absolute relocations of N bits.
+
+ -- : BFD_RELOC_64_PCREL
+ -- : BFD_RELOC_32_PCREL
+ -- : BFD_RELOC_24_PCREL
+ -- : BFD_RELOC_16_PCREL
+ -- : BFD_RELOC_12_PCREL
+ -- : BFD_RELOC_8_PCREL
+     PC-relative relocations.  Sometimes these are relative to the
+     address of the relocation itself; sometimes they are relative to
+     the start of the section containing the relocation.  It depends on
+     the specific target.
+
+     The 24-bit relocation is used in some Intel 960 configurations.
+
+ -- : BFD_RELOC_32_SECREL
+     Section relative relocations.  Some targets need this for DWARF2.
+
+ -- : BFD_RELOC_32_GOT_PCREL
+ -- : BFD_RELOC_16_GOT_PCREL
+ -- : BFD_RELOC_8_GOT_PCREL
+ -- : BFD_RELOC_32_GOTOFF
+ -- : BFD_RELOC_16_GOTOFF
+ -- : BFD_RELOC_LO16_GOTOFF
+ -- : BFD_RELOC_HI16_GOTOFF
+ -- : BFD_RELOC_HI16_S_GOTOFF
+ -- : BFD_RELOC_8_GOTOFF
+ -- : BFD_RELOC_64_PLT_PCREL
+ -- : BFD_RELOC_32_PLT_PCREL
+ -- : BFD_RELOC_24_PLT_PCREL
+ -- : BFD_RELOC_16_PLT_PCREL
+ -- : BFD_RELOC_8_PLT_PCREL
+ -- : BFD_RELOC_64_PLTOFF
+ -- : BFD_RELOC_32_PLTOFF
+ -- : BFD_RELOC_16_PLTOFF
+ -- : BFD_RELOC_LO16_PLTOFF
+ -- : BFD_RELOC_HI16_PLTOFF
+ -- : BFD_RELOC_HI16_S_PLTOFF
+ -- : BFD_RELOC_8_PLTOFF
+     For ELF.
+
+ -- : BFD_RELOC_68K_GLOB_DAT
+ -- : BFD_RELOC_68K_JMP_SLOT
+ -- : BFD_RELOC_68K_RELATIVE
+ -- : BFD_RELOC_68K_TLS_GD32
+ -- : BFD_RELOC_68K_TLS_GD16
+ -- : BFD_RELOC_68K_TLS_GD8
+ -- : BFD_RELOC_68K_TLS_LDM32
+ -- : BFD_RELOC_68K_TLS_LDM16
+ -- : BFD_RELOC_68K_TLS_LDM8
+ -- : BFD_RELOC_68K_TLS_LDO32
+ -- : BFD_RELOC_68K_TLS_LDO16
+ -- : BFD_RELOC_68K_TLS_LDO8
+ -- : BFD_RELOC_68K_TLS_IE32
+ -- : BFD_RELOC_68K_TLS_IE16
+ -- : BFD_RELOC_68K_TLS_IE8
+ -- : BFD_RELOC_68K_TLS_LE32
+ -- : BFD_RELOC_68K_TLS_LE16
+ -- : BFD_RELOC_68K_TLS_LE8
+     Relocations used by 68K ELF.
+
+ -- : BFD_RELOC_32_BASEREL
+ -- : BFD_RELOC_16_BASEREL
+ -- : BFD_RELOC_LO16_BASEREL
+ -- : BFD_RELOC_HI16_BASEREL
+ -- : BFD_RELOC_HI16_S_BASEREL
+ -- : BFD_RELOC_8_BASEREL
+ -- : BFD_RELOC_RVA
+     Linkage-table relative.
+
+ -- : BFD_RELOC_8_FFnn
+     Absolute 8-bit relocation, but used to form an address like 0xFFnn.
+
+ -- : BFD_RELOC_32_PCREL_S2
+ -- : BFD_RELOC_16_PCREL_S2
+ -- : BFD_RELOC_23_PCREL_S2
+     These PC-relative relocations are stored as word displacements -
+     i.e., byte displacements shifted right two bits.  The 30-bit word
+     displacement (<<32_PCREL_S2>> - 32 bits, shifted 2) is used on the
+     SPARC.  (SPARC tools generally refer to this as <<WDISP30>>.)  The
+     signed 16-bit displacement is used on the MIPS, and the 23-bit
+     displacement is used on the Alpha.
+
+ -- : BFD_RELOC_HI22
+ -- : BFD_RELOC_LO10
+     High 22 bits and low 10 bits of 32-bit value, placed into lower
+     bits of the target word.  These are used on the SPARC.
+
+ -- : BFD_RELOC_GPREL16
+ -- : BFD_RELOC_GPREL32
+     For systems that allocate a Global Pointer register, these are
+     displacements off that register.  These relocation types are
+     handled specially, because the value the register will have is
+     decided relatively late.
+
+ -- : BFD_RELOC_I960_CALLJ
+     Reloc types used for i960/b.out.
+
+ -- : BFD_RELOC_NONE
+ -- : BFD_RELOC_SPARC_WDISP22
+ -- : BFD_RELOC_SPARC22
+ -- : BFD_RELOC_SPARC13
+ -- : BFD_RELOC_SPARC_GOT10
+ -- : BFD_RELOC_SPARC_GOT13
+ -- : BFD_RELOC_SPARC_GOT22
+ -- : BFD_RELOC_SPARC_PC10
+ -- : BFD_RELOC_SPARC_PC22
+ -- : BFD_RELOC_SPARC_WPLT30
+ -- : BFD_RELOC_SPARC_COPY
+ -- : BFD_RELOC_SPARC_GLOB_DAT
+ -- : BFD_RELOC_SPARC_JMP_SLOT
+ -- : BFD_RELOC_SPARC_RELATIVE
+ -- : BFD_RELOC_SPARC_UA16
+ -- : BFD_RELOC_SPARC_UA32
+ -- : BFD_RELOC_SPARC_UA64
+ -- : BFD_RELOC_SPARC_GOTDATA_HIX22
+ -- : BFD_RELOC_SPARC_GOTDATA_LOX10
+ -- : BFD_RELOC_SPARC_GOTDATA_OP_HIX22
+ -- : BFD_RELOC_SPARC_GOTDATA_OP_LOX10
+ -- : BFD_RELOC_SPARC_GOTDATA_OP
+ -- : BFD_RELOC_SPARC_JMP_IREL
+ -- : BFD_RELOC_SPARC_IRELATIVE
+     SPARC ELF relocations.  There is probably some overlap with other
+     relocation types already defined.
+
+ -- : BFD_RELOC_SPARC_BASE13
+ -- : BFD_RELOC_SPARC_BASE22
+     I think these are specific to SPARC a.out (e.g., Sun 4).
+
+ -- : BFD_RELOC_SPARC_64
+ -- : BFD_RELOC_SPARC_10
+ -- : BFD_RELOC_SPARC_11
+ -- : BFD_RELOC_SPARC_OLO10
+ -- : BFD_RELOC_SPARC_HH22
+ -- : BFD_RELOC_SPARC_HM10
+ -- : BFD_RELOC_SPARC_LM22
+ -- : BFD_RELOC_SPARC_PC_HH22
+ -- : BFD_RELOC_SPARC_PC_HM10
+ -- : BFD_RELOC_SPARC_PC_LM22
+ -- : BFD_RELOC_SPARC_WDISP16
+ -- : BFD_RELOC_SPARC_WDISP19
+ -- : BFD_RELOC_SPARC_7
+ -- : BFD_RELOC_SPARC_6
+ -- : BFD_RELOC_SPARC_5
+ -- : BFD_RELOC_SPARC_DISP64
+ -- : BFD_RELOC_SPARC_PLT32
+ -- : BFD_RELOC_SPARC_PLT64
+ -- : BFD_RELOC_SPARC_HIX22
+ -- : BFD_RELOC_SPARC_LOX10
+ -- : BFD_RELOC_SPARC_H44
+ -- : BFD_RELOC_SPARC_M44
+ -- : BFD_RELOC_SPARC_L44
+ -- : BFD_RELOC_SPARC_REGISTER
+ -- : BFD_RELOC_SPARC_H34
+ -- : BFD_RELOC_SPARC_SIZE32
+ -- : BFD_RELOC_SPARC_SIZE64
+ -- : BFD_RELOC_SPARC_WDISP10
+     SPARC64 relocations
+
+ -- : BFD_RELOC_SPARC_REV32
+     SPARC little endian relocation
+
+ -- : BFD_RELOC_SPARC_TLS_GD_HI22
+ -- : BFD_RELOC_SPARC_TLS_GD_LO10
+ -- : BFD_RELOC_SPARC_TLS_GD_ADD
+ -- : BFD_RELOC_SPARC_TLS_GD_CALL
+ -- : BFD_RELOC_SPARC_TLS_LDM_HI22
+ -- : BFD_RELOC_SPARC_TLS_LDM_LO10
+ -- : BFD_RELOC_SPARC_TLS_LDM_ADD
+ -- : BFD_RELOC_SPARC_TLS_LDM_CALL
+ -- : BFD_RELOC_SPARC_TLS_LDO_HIX22
+ -- : BFD_RELOC_SPARC_TLS_LDO_LOX10
+ -- : BFD_RELOC_SPARC_TLS_LDO_ADD
+ -- : BFD_RELOC_SPARC_TLS_IE_HI22
+ -- : BFD_RELOC_SPARC_TLS_IE_LO10
+ -- : BFD_RELOC_SPARC_TLS_IE_LD
+ -- : BFD_RELOC_SPARC_TLS_IE_LDX
+ -- : BFD_RELOC_SPARC_TLS_IE_ADD
+ -- : BFD_RELOC_SPARC_TLS_LE_HIX22
+ -- : BFD_RELOC_SPARC_TLS_LE_LOX10
+ -- : BFD_RELOC_SPARC_TLS_DTPMOD32
+ -- : BFD_RELOC_SPARC_TLS_DTPMOD64
+ -- : BFD_RELOC_SPARC_TLS_DTPOFF32
+ -- : BFD_RELOC_SPARC_TLS_DTPOFF64
+ -- : BFD_RELOC_SPARC_TLS_TPOFF32
+ -- : BFD_RELOC_SPARC_TLS_TPOFF64
+     SPARC TLS relocations
+
+ -- : BFD_RELOC_SPU_IMM7
+ -- : BFD_RELOC_SPU_IMM8
+ -- : BFD_RELOC_SPU_IMM10
+ -- : BFD_RELOC_SPU_IMM10W
+ -- : BFD_RELOC_SPU_IMM16
+ -- : BFD_RELOC_SPU_IMM16W
+ -- : BFD_RELOC_SPU_IMM18
+ -- : BFD_RELOC_SPU_PCREL9a
+ -- : BFD_RELOC_SPU_PCREL9b
+ -- : BFD_RELOC_SPU_PCREL16
+ -- : BFD_RELOC_SPU_LO16
+ -- : BFD_RELOC_SPU_HI16
+ -- : BFD_RELOC_SPU_PPU32
+ -- : BFD_RELOC_SPU_PPU64
+ -- : BFD_RELOC_SPU_ADD_PIC
+     SPU Relocations.
+
+ -- : BFD_RELOC_ALPHA_GPDISP_HI16
+     Alpha ECOFF and ELF relocations.  Some of these treat the symbol or
+     "addend" in some special way.  For GPDISP_HI16 ("gpdisp")
+     relocations, the symbol is ignored when writing; when reading, it
+     will be the absolute section symbol.  The addend is the
+     displacement in bytes of the "lda" instruction from the "ldah"
+     instruction (which is at the address of this reloc).
+
+ -- : BFD_RELOC_ALPHA_GPDISP_LO16
+     For GPDISP_LO16 ("ignore") relocations, the symbol is handled as
+     with GPDISP_HI16 relocs.  The addend is ignored when writing the
+     relocations out, and is filled in with the file's GP value on
+     reading, for convenience.
+
+ -- : BFD_RELOC_ALPHA_GPDISP
+     The ELF GPDISP relocation is exactly the same as the GPDISP_HI16
+     relocation except that there is no accompanying GPDISP_LO16
+     relocation.
+
+ -- : BFD_RELOC_ALPHA_LITERAL
+ -- : BFD_RELOC_ALPHA_ELF_LITERAL
+ -- : BFD_RELOC_ALPHA_LITUSE
+     The Alpha LITERAL/LITUSE relocs are produced by a symbol reference;
+     the assembler turns it into a LDQ instruction to load the address
+     of the symbol, and then fills in a register in the real
+     instruction.
+
+     The LITERAL reloc, at the LDQ instruction, refers to the .lita
+     section symbol.  The addend is ignored when writing, but is filled
+     in with the file's GP value on reading, for convenience, as with
+     the GPDISP_LO16 reloc.
+
+     The ELF_LITERAL reloc is somewhere between 16_GOTOFF and
+     GPDISP_LO16.  It should refer to the symbol to be referenced, as
+     with 16_GOTOFF, but it generates output not based on the position
+     within the .got section, but relative to the GP value chosen for
+     the file during the final link stage.
+
+     The LITUSE reloc, on the instruction using the loaded address,
+     gives information to the linker that it might be able to use to
+     optimize away some literal section references.  The symbol is
+     ignored (read as the absolute section symbol), and the "addend"
+     indicates the type of instruction using the register: 1 - "memory"
+     fmt insn 2 - byte-manipulation (byte offset reg) 3 - jsr (target
+     of branch)
+
+ -- : BFD_RELOC_ALPHA_HINT
+     The HINT relocation indicates a value that should be filled into
+     the "hint" field of a jmp/jsr/ret instruction, for possible branch-
+     prediction logic which may be provided on some processors.
+
+ -- : BFD_RELOC_ALPHA_LINKAGE
+     The LINKAGE relocation outputs a linkage pair in the object file,
+     which is filled by the linker.
+
+ -- : BFD_RELOC_ALPHA_CODEADDR
+     The CODEADDR relocation outputs a STO_CA in the object file, which
+     is filled by the linker.
+
+ -- : BFD_RELOC_ALPHA_GPREL_HI16
+ -- : BFD_RELOC_ALPHA_GPREL_LO16
+     The GPREL_HI/LO relocations together form a 32-bit offset from the
+     GP register.
+
+ -- : BFD_RELOC_ALPHA_BRSGP
+     Like BFD_RELOC_23_PCREL_S2, except that the source and target must
+     share a common GP, and the target address is adjusted for
+     STO_ALPHA_STD_GPLOAD.
+
+ -- : BFD_RELOC_ALPHA_NOP
+     The NOP relocation outputs a NOP if the longword displacement
+     between two procedure entry points is < 2^21.
+
+ -- : BFD_RELOC_ALPHA_BSR
+     The BSR relocation outputs a BSR if the longword displacement
+     between two procedure entry points is < 2^21.
+
+ -- : BFD_RELOC_ALPHA_LDA
+     The LDA relocation outputs a LDA if the longword displacement
+     between two procedure entry points is < 2^16.
+
+ -- : BFD_RELOC_ALPHA_BOH
+     The BOH relocation outputs a BSR if the longword displacement
+     between two procedure entry points is < 2^21, or else a hint.
+
+ -- : BFD_RELOC_ALPHA_TLSGD
+ -- : BFD_RELOC_ALPHA_TLSLDM
+ -- : BFD_RELOC_ALPHA_DTPMOD64
+ -- : BFD_RELOC_ALPHA_GOTDTPREL16
+ -- : BFD_RELOC_ALPHA_DTPREL64
+ -- : BFD_RELOC_ALPHA_DTPREL_HI16
+ -- : BFD_RELOC_ALPHA_DTPREL_LO16
+ -- : BFD_RELOC_ALPHA_DTPREL16
+ -- : BFD_RELOC_ALPHA_GOTTPREL16
+ -- : BFD_RELOC_ALPHA_TPREL64
+ -- : BFD_RELOC_ALPHA_TPREL_HI16
+ -- : BFD_RELOC_ALPHA_TPREL_LO16
+ -- : BFD_RELOC_ALPHA_TPREL16
+     Alpha thread-local storage relocations.
+
+ -- : BFD_RELOC_MIPS_JMP
+ -- : BFD_RELOC_MICROMIPS_JMP
+     The MIPS jump instruction.
+
+ -- : BFD_RELOC_MIPS16_JMP
+     The MIPS16 jump instruction.
+
+ -- : BFD_RELOC_MIPS16_GPREL
+     MIPS16 GP relative reloc.
+
+ -- : BFD_RELOC_HI16
+     High 16 bits of 32-bit value; simple reloc.
+
+ -- : BFD_RELOC_HI16_S
+     High 16 bits of 32-bit value but the low 16 bits will be sign
+     extended and added to form the final result.  If the low 16 bits
+     form a negative number, we need to add one to the high value to
+     compensate for the borrow when the low bits are added.
+
+ -- : BFD_RELOC_LO16
+     Low 16 bits.
+
+ -- : BFD_RELOC_HI16_PCREL
+     High 16 bits of 32-bit pc-relative value
+
+ -- : BFD_RELOC_HI16_S_PCREL
+     High 16 bits of 32-bit pc-relative value, adjusted
+
+ -- : BFD_RELOC_LO16_PCREL
+     Low 16 bits of pc-relative value
+
+ -- : BFD_RELOC_MIPS16_GOT16
+ -- : BFD_RELOC_MIPS16_CALL16
+     Equivalent of BFD_RELOC_MIPS_*, but with the MIPS16 layout of
+     16-bit immediate fields
+
+ -- : BFD_RELOC_MIPS16_HI16
+     MIPS16 high 16 bits of 32-bit value.
+
+ -- : BFD_RELOC_MIPS16_HI16_S
+     MIPS16 high 16 bits of 32-bit value but the low 16 bits will be
+     sign extended and added to form the final result.  If the low 16
+     bits form a negative number, we need to add one to the high value
+     to compensate for the borrow when the low bits are added.
+
+ -- : BFD_RELOC_MIPS16_LO16
+     MIPS16 low 16 bits.
+
+ -- : BFD_RELOC_MIPS16_TLS_GD
+ -- : BFD_RELOC_MIPS16_TLS_LDM
+ -- : BFD_RELOC_MIPS16_TLS_DTPREL_HI16
+ -- : BFD_RELOC_MIPS16_TLS_DTPREL_LO16
+ -- : BFD_RELOC_MIPS16_TLS_GOTTPREL
+ -- : BFD_RELOC_MIPS16_TLS_TPREL_HI16
+ -- : BFD_RELOC_MIPS16_TLS_TPREL_LO16
+     MIPS16 TLS relocations
+
+ -- : BFD_RELOC_MIPS_LITERAL
+ -- : BFD_RELOC_MICROMIPS_LITERAL
+     Relocation against a MIPS literal section.
+
+ -- : BFD_RELOC_MICROMIPS_7_PCREL_S1
+ -- : BFD_RELOC_MICROMIPS_10_PCREL_S1
+ -- : BFD_RELOC_MICROMIPS_16_PCREL_S1
+     microMIPS PC-relative relocations.
+
+ -- : BFD_RELOC_MICROMIPS_GPREL16
+ -- : BFD_RELOC_MICROMIPS_HI16
+ -- : BFD_RELOC_MICROMIPS_HI16_S
+ -- : BFD_RELOC_MICROMIPS_LO16
+     microMIPS versions of generic BFD relocs.
+
+ -- : BFD_RELOC_MIPS_GOT16
+ -- : BFD_RELOC_MICROMIPS_GOT16
+ -- : BFD_RELOC_MIPS_CALL16
+ -- : BFD_RELOC_MICROMIPS_CALL16
+ -- : BFD_RELOC_MIPS_GOT_HI16
+ -- : BFD_RELOC_MICROMIPS_GOT_HI16
+ -- : BFD_RELOC_MIPS_GOT_LO16
+ -- : BFD_RELOC_MICROMIPS_GOT_LO16
+ -- : BFD_RELOC_MIPS_CALL_HI16
+ -- : BFD_RELOC_MICROMIPS_CALL_HI16
+ -- : BFD_RELOC_MIPS_CALL_LO16
+ -- : BFD_RELOC_MICROMIPS_CALL_LO16
+ -- : BFD_RELOC_MIPS_SUB
+ -- : BFD_RELOC_MICROMIPS_SUB
+ -- : BFD_RELOC_MIPS_GOT_PAGE
+ -- : BFD_RELOC_MICROMIPS_GOT_PAGE
+ -- : BFD_RELOC_MIPS_GOT_OFST
+ -- : BFD_RELOC_MICROMIPS_GOT_OFST
+ -- : BFD_RELOC_MIPS_GOT_DISP
+ -- : BFD_RELOC_MICROMIPS_GOT_DISP
+ -- : BFD_RELOC_MIPS_SHIFT5
+ -- : BFD_RELOC_MIPS_SHIFT6
+ -- : BFD_RELOC_MIPS_INSERT_A
+ -- : BFD_RELOC_MIPS_INSERT_B
+ -- : BFD_RELOC_MIPS_DELETE
+ -- : BFD_RELOC_MIPS_HIGHEST
+ -- : BFD_RELOC_MICROMIPS_HIGHEST
+ -- : BFD_RELOC_MIPS_HIGHER
+ -- : BFD_RELOC_MICROMIPS_HIGHER
+ -- : BFD_RELOC_MIPS_SCN_DISP
+ -- : BFD_RELOC_MICROMIPS_SCN_DISP
+ -- : BFD_RELOC_MIPS_REL16
+ -- : BFD_RELOC_MIPS_RELGOT
+ -- : BFD_RELOC_MIPS_JALR
+ -- : BFD_RELOC_MICROMIPS_JALR
+ -- : BFD_RELOC_MIPS_TLS_DTPMOD32
+ -- : BFD_RELOC_MIPS_TLS_DTPREL32
+ -- : BFD_RELOC_MIPS_TLS_DTPMOD64
+ -- : BFD_RELOC_MIPS_TLS_DTPREL64
+ -- : BFD_RELOC_MIPS_TLS_GD
+ -- : BFD_RELOC_MICROMIPS_TLS_GD
+ -- : BFD_RELOC_MIPS_TLS_LDM
+ -- : BFD_RELOC_MICROMIPS_TLS_LDM
+ -- : BFD_RELOC_MIPS_TLS_DTPREL_HI16
+ -- : BFD_RELOC_MICROMIPS_TLS_DTPREL_HI16
+ -- : BFD_RELOC_MIPS_TLS_DTPREL_LO16
+ -- : BFD_RELOC_MICROMIPS_TLS_DTPREL_LO16
+ -- : BFD_RELOC_MIPS_TLS_GOTTPREL
+ -- : BFD_RELOC_MICROMIPS_TLS_GOTTPREL
+ -- : BFD_RELOC_MIPS_TLS_TPREL32
+ -- : BFD_RELOC_MIPS_TLS_TPREL64
+ -- : BFD_RELOC_MIPS_TLS_TPREL_HI16
+ -- : BFD_RELOC_MICROMIPS_TLS_TPREL_HI16
+ -- : BFD_RELOC_MIPS_TLS_TPREL_LO16
+ -- : BFD_RELOC_MICROMIPS_TLS_TPREL_LO16
+     MIPS ELF relocations.
+
+ -- : BFD_RELOC_MIPS_COPY
+ -- : BFD_RELOC_MIPS_JUMP_SLOT
+     MIPS ELF relocations (VxWorks and PLT extensions).
+
+ -- : BFD_RELOC_MOXIE_10_PCREL
+     Moxie ELF relocations.
+
+ -- : BFD_RELOC_FRV_LABEL16
+ -- : BFD_RELOC_FRV_LABEL24
+ -- : BFD_RELOC_FRV_LO16
+ -- : BFD_RELOC_FRV_HI16
+ -- : BFD_RELOC_FRV_GPREL12
+ -- : BFD_RELOC_FRV_GPRELU12
+ -- : BFD_RELOC_FRV_GPREL32
+ -- : BFD_RELOC_FRV_GPRELHI
+ -- : BFD_RELOC_FRV_GPRELLO
+ -- : BFD_RELOC_FRV_GOT12
+ -- : BFD_RELOC_FRV_GOTHI
+ -- : BFD_RELOC_FRV_GOTLO
+ -- : BFD_RELOC_FRV_FUNCDESC
+ -- : BFD_RELOC_FRV_FUNCDESC_GOT12
+ -- : BFD_RELOC_FRV_FUNCDESC_GOTHI
+ -- : BFD_RELOC_FRV_FUNCDESC_GOTLO
+ -- : BFD_RELOC_FRV_FUNCDESC_VALUE
+ -- : BFD_RELOC_FRV_FUNCDESC_GOTOFF12
+ -- : BFD_RELOC_FRV_FUNCDESC_GOTOFFHI
+ -- : BFD_RELOC_FRV_FUNCDESC_GOTOFFLO
+ -- : BFD_RELOC_FRV_GOTOFF12
+ -- : BFD_RELOC_FRV_GOTOFFHI
+ -- : BFD_RELOC_FRV_GOTOFFLO
+ -- : BFD_RELOC_FRV_GETTLSOFF
+ -- : BFD_RELOC_FRV_TLSDESC_VALUE
+ -- : BFD_RELOC_FRV_GOTTLSDESC12
+ -- : BFD_RELOC_FRV_GOTTLSDESCHI
+ -- : BFD_RELOC_FRV_GOTTLSDESCLO
+ -- : BFD_RELOC_FRV_TLSMOFF12
+ -- : BFD_RELOC_FRV_TLSMOFFHI
+ -- : BFD_RELOC_FRV_TLSMOFFLO
+ -- : BFD_RELOC_FRV_GOTTLSOFF12
+ -- : BFD_RELOC_FRV_GOTTLSOFFHI
+ -- : BFD_RELOC_FRV_GOTTLSOFFLO
+ -- : BFD_RELOC_FRV_TLSOFF
+ -- : BFD_RELOC_FRV_TLSDESC_RELAX
+ -- : BFD_RELOC_FRV_GETTLSOFF_RELAX
+ -- : BFD_RELOC_FRV_TLSOFF_RELAX
+ -- : BFD_RELOC_FRV_TLSMOFF
+     Fujitsu Frv Relocations.
+
+ -- : BFD_RELOC_MN10300_GOTOFF24
+     This is a 24bit GOT-relative reloc for the mn10300.
+
+ -- : BFD_RELOC_MN10300_GOT32
+     This is a 32bit GOT-relative reloc for the mn10300, offset by two
+     bytes in the instruction.
+
+ -- : BFD_RELOC_MN10300_GOT24
+     This is a 24bit GOT-relative reloc for the mn10300, offset by two
+     bytes in the instruction.
+
+ -- : BFD_RELOC_MN10300_GOT16
+     This is a 16bit GOT-relative reloc for the mn10300, offset by two
+     bytes in the instruction.
+
+ -- : BFD_RELOC_MN10300_COPY
+     Copy symbol at runtime.
+
+ -- : BFD_RELOC_MN10300_GLOB_DAT
+     Create GOT entry.
+
+ -- : BFD_RELOC_MN10300_JMP_SLOT
+     Create PLT entry.
+
+ -- : BFD_RELOC_MN10300_RELATIVE
+     Adjust by program base.
+
+ -- : BFD_RELOC_MN10300_SYM_DIFF
+     Together with another reloc targeted at the same location, allows
+     for a value that is the difference of two symbols in the same
+     section.
+
+ -- : BFD_RELOC_MN10300_ALIGN
+     The addend of this reloc is an alignment power that must be
+     honoured at the offset's location, regardless of linker relaxation.
+
+ -- : BFD_RELOC_MN10300_TLS_GD
+ -- : BFD_RELOC_MN10300_TLS_LD
+ -- : BFD_RELOC_MN10300_TLS_LDO
+ -- : BFD_RELOC_MN10300_TLS_GOTIE
+ -- : BFD_RELOC_MN10300_TLS_IE
+ -- : BFD_RELOC_MN10300_TLS_LE
+ -- : BFD_RELOC_MN10300_TLS_DTPMOD
+ -- : BFD_RELOC_MN10300_TLS_DTPOFF
+ -- : BFD_RELOC_MN10300_TLS_TPOFF
+     Various TLS-related relocations.
+
+ -- : BFD_RELOC_MN10300_32_PCREL
+     This is a 32bit pcrel reloc for the mn10300, offset by two bytes
+     in the instruction.
+
+ -- : BFD_RELOC_MN10300_16_PCREL
+     This is a 16bit pcrel reloc for the mn10300, offset by two bytes
+     in the instruction.
+
+ -- : BFD_RELOC_386_GOT32
+ -- : BFD_RELOC_386_PLT32
+ -- : BFD_RELOC_386_COPY
+ -- : BFD_RELOC_386_GLOB_DAT
+ -- : BFD_RELOC_386_JUMP_SLOT
+ -- : BFD_RELOC_386_RELATIVE
+ -- : BFD_RELOC_386_GOTOFF
+ -- : BFD_RELOC_386_GOTPC
+ -- : BFD_RELOC_386_TLS_TPOFF
+ -- : BFD_RELOC_386_TLS_IE
+ -- : BFD_RELOC_386_TLS_GOTIE
+ -- : BFD_RELOC_386_TLS_LE
+ -- : BFD_RELOC_386_TLS_GD
+ -- : BFD_RELOC_386_TLS_LDM
+ -- : BFD_RELOC_386_TLS_LDO_32
+ -- : BFD_RELOC_386_TLS_IE_32
+ -- : BFD_RELOC_386_TLS_LE_32
+ -- : BFD_RELOC_386_TLS_DTPMOD32
+ -- : BFD_RELOC_386_TLS_DTPOFF32
+ -- : BFD_RELOC_386_TLS_TPOFF32
+ -- : BFD_RELOC_386_TLS_GOTDESC
+ -- : BFD_RELOC_386_TLS_DESC_CALL
+ -- : BFD_RELOC_386_TLS_DESC
+ -- : BFD_RELOC_386_IRELATIVE
+     i386/elf relocations
+
+ -- : BFD_RELOC_X86_64_GOT32
+ -- : BFD_RELOC_X86_64_PLT32
+ -- : BFD_RELOC_X86_64_COPY
+ -- : BFD_RELOC_X86_64_GLOB_DAT
+ -- : BFD_RELOC_X86_64_JUMP_SLOT
+ -- : BFD_RELOC_X86_64_RELATIVE
+ -- : BFD_RELOC_X86_64_GOTPCREL
+ -- : BFD_RELOC_X86_64_32S
+ -- : BFD_RELOC_X86_64_DTPMOD64
+ -- : BFD_RELOC_X86_64_DTPOFF64
+ -- : BFD_RELOC_X86_64_TPOFF64
+ -- : BFD_RELOC_X86_64_TLSGD
+ -- : BFD_RELOC_X86_64_TLSLD
+ -- : BFD_RELOC_X86_64_DTPOFF32
+ -- : BFD_RELOC_X86_64_GOTTPOFF
+ -- : BFD_RELOC_X86_64_TPOFF32
+ -- : BFD_RELOC_X86_64_GOTOFF64
+ -- : BFD_RELOC_X86_64_GOTPC32
+ -- : BFD_RELOC_X86_64_GOT64
+ -- : BFD_RELOC_X86_64_GOTPCREL64
+ -- : BFD_RELOC_X86_64_GOTPC64
+ -- : BFD_RELOC_X86_64_GOTPLT64
+ -- : BFD_RELOC_X86_64_PLTOFF64
+ -- : BFD_RELOC_X86_64_GOTPC32_TLSDESC
+ -- : BFD_RELOC_X86_64_TLSDESC_CALL
+ -- : BFD_RELOC_X86_64_TLSDESC
+ -- : BFD_RELOC_X86_64_IRELATIVE
+     x86-64/elf relocations
+
+ -- : BFD_RELOC_NS32K_IMM_8
+ -- : BFD_RELOC_NS32K_IMM_16
+ -- : BFD_RELOC_NS32K_IMM_32
+ -- : BFD_RELOC_NS32K_IMM_8_PCREL
+ -- : BFD_RELOC_NS32K_IMM_16_PCREL
+ -- : BFD_RELOC_NS32K_IMM_32_PCREL
+ -- : BFD_RELOC_NS32K_DISP_8
+ -- : BFD_RELOC_NS32K_DISP_16
+ -- : BFD_RELOC_NS32K_DISP_32
+ -- : BFD_RELOC_NS32K_DISP_8_PCREL
+ -- : BFD_RELOC_NS32K_DISP_16_PCREL
+ -- : BFD_RELOC_NS32K_DISP_32_PCREL
+     ns32k relocations
+
+ -- : BFD_RELOC_PDP11_DISP_8_PCREL
+ -- : BFD_RELOC_PDP11_DISP_6_PCREL
+     PDP11 relocations
+
+ -- : BFD_RELOC_PJ_CODE_HI16
+ -- : BFD_RELOC_PJ_CODE_LO16
+ -- : BFD_RELOC_PJ_CODE_DIR16
+ -- : BFD_RELOC_PJ_CODE_DIR32
+ -- : BFD_RELOC_PJ_CODE_REL16
+ -- : BFD_RELOC_PJ_CODE_REL32
+     Picojava relocs.  Not all of these appear in object files.
+
+ -- : BFD_RELOC_PPC_B26
+ -- : BFD_RELOC_PPC_BA26
+ -- : BFD_RELOC_PPC_TOC16
+ -- : BFD_RELOC_PPC_B16
+ -- : BFD_RELOC_PPC_B16_BRTAKEN
+ -- : BFD_RELOC_PPC_B16_BRNTAKEN
+ -- : BFD_RELOC_PPC_BA16
+ -- : BFD_RELOC_PPC_BA16_BRTAKEN
+ -- : BFD_RELOC_PPC_BA16_BRNTAKEN
+ -- : BFD_RELOC_PPC_COPY
+ -- : BFD_RELOC_PPC_GLOB_DAT
+ -- : BFD_RELOC_PPC_JMP_SLOT
+ -- : BFD_RELOC_PPC_RELATIVE
+ -- : BFD_RELOC_PPC_LOCAL24PC
+ -- : BFD_RELOC_PPC_EMB_NADDR32
+ -- : BFD_RELOC_PPC_EMB_NADDR16
+ -- : BFD_RELOC_PPC_EMB_NADDR16_LO
+ -- : BFD_RELOC_PPC_EMB_NADDR16_HI
+ -- : BFD_RELOC_PPC_EMB_NADDR16_HA
+ -- : BFD_RELOC_PPC_EMB_SDAI16
+ -- : BFD_RELOC_PPC_EMB_SDA2I16
+ -- : BFD_RELOC_PPC_EMB_SDA2REL
+ -- : BFD_RELOC_PPC_EMB_SDA21
+ -- : BFD_RELOC_PPC_EMB_MRKREF
+ -- : BFD_RELOC_PPC_EMB_RELSEC16
+ -- : BFD_RELOC_PPC_EMB_RELST_LO
+ -- : BFD_RELOC_PPC_EMB_RELST_HI
+ -- : BFD_RELOC_PPC_EMB_RELST_HA
+ -- : BFD_RELOC_PPC_EMB_BIT_FLD
+ -- : BFD_RELOC_PPC_EMB_RELSDA
+ -- : BFD_RELOC_PPC_VLE_REL8
+ -- : BFD_RELOC_PPC_VLE_REL15
+ -- : BFD_RELOC_PPC_VLE_REL24
+ -- : BFD_RELOC_PPC_VLE_LO16A
+ -- : BFD_RELOC_PPC_VLE_LO16D
+ -- : BFD_RELOC_PPC_VLE_HI16A
+ -- : BFD_RELOC_PPC_VLE_HI16D
+ -- : BFD_RELOC_PPC_VLE_HA16A
+ -- : BFD_RELOC_PPC_VLE_HA16D
+ -- : BFD_RELOC_PPC_VLE_SDA21
+ -- : BFD_RELOC_PPC_VLE_SDA21_LO
+ -- : BFD_RELOC_PPC_VLE_SDAREL_LO16A
+ -- : BFD_RELOC_PPC_VLE_SDAREL_LO16D
+ -- : BFD_RELOC_PPC_VLE_SDAREL_HI16A
+ -- : BFD_RELOC_PPC_VLE_SDAREL_HI16D
+ -- : BFD_RELOC_PPC_VLE_SDAREL_HA16A
+ -- : BFD_RELOC_PPC_VLE_SDAREL_HA16D
+ -- : BFD_RELOC_PPC64_HIGHER
+ -- : BFD_RELOC_PPC64_HIGHER_S
+ -- : BFD_RELOC_PPC64_HIGHEST
+ -- : BFD_RELOC_PPC64_HIGHEST_S
+ -- : BFD_RELOC_PPC64_TOC16_LO
+ -- : BFD_RELOC_PPC64_TOC16_HI
+ -- : BFD_RELOC_PPC64_TOC16_HA
+ -- : BFD_RELOC_PPC64_TOC
+ -- : BFD_RELOC_PPC64_PLTGOT16
+ -- : BFD_RELOC_PPC64_PLTGOT16_LO
+ -- : BFD_RELOC_PPC64_PLTGOT16_HI
+ -- : BFD_RELOC_PPC64_PLTGOT16_HA
+ -- : BFD_RELOC_PPC64_ADDR16_DS
+ -- : BFD_RELOC_PPC64_ADDR16_LO_DS
+ -- : BFD_RELOC_PPC64_GOT16_DS
+ -- : BFD_RELOC_PPC64_GOT16_LO_DS
+ -- : BFD_RELOC_PPC64_PLT16_LO_DS
+ -- : BFD_RELOC_PPC64_SECTOFF_DS
+ -- : BFD_RELOC_PPC64_SECTOFF_LO_DS
+ -- : BFD_RELOC_PPC64_TOC16_DS
+ -- : BFD_RELOC_PPC64_TOC16_LO_DS
+ -- : BFD_RELOC_PPC64_PLTGOT16_DS
+ -- : BFD_RELOC_PPC64_PLTGOT16_LO_DS
+     Power(rs6000) and PowerPC relocations.
+
+ -- : BFD_RELOC_PPC_TLS
+ -- : BFD_RELOC_PPC_TLSGD
+ -- : BFD_RELOC_PPC_TLSLD
+ -- : BFD_RELOC_PPC_DTPMOD
+ -- : BFD_RELOC_PPC_TPREL16
+ -- : BFD_RELOC_PPC_TPREL16_LO
+ -- : BFD_RELOC_PPC_TPREL16_HI
+ -- : BFD_RELOC_PPC_TPREL16_HA
+ -- : BFD_RELOC_PPC_TPREL
+ -- : BFD_RELOC_PPC_DTPREL16
+ -- : BFD_RELOC_PPC_DTPREL16_LO
+ -- : BFD_RELOC_PPC_DTPREL16_HI
+ -- : BFD_RELOC_PPC_DTPREL16_HA
+ -- : BFD_RELOC_PPC_DTPREL
+ -- : BFD_RELOC_PPC_GOT_TLSGD16
+ -- : BFD_RELOC_PPC_GOT_TLSGD16_LO
+ -- : BFD_RELOC_PPC_GOT_TLSGD16_HI
+ -- : BFD_RELOC_PPC_GOT_TLSGD16_HA
+ -- : BFD_RELOC_PPC_GOT_TLSLD16
+ -- : BFD_RELOC_PPC_GOT_TLSLD16_LO
+ -- : BFD_RELOC_PPC_GOT_TLSLD16_HI
+ -- : BFD_RELOC_PPC_GOT_TLSLD16_HA
+ -- : BFD_RELOC_PPC_GOT_TPREL16
+ -- : BFD_RELOC_PPC_GOT_TPREL16_LO
+ -- : BFD_RELOC_PPC_GOT_TPREL16_HI
+ -- : BFD_RELOC_PPC_GOT_TPREL16_HA
+ -- : BFD_RELOC_PPC_GOT_DTPREL16
+ -- : BFD_RELOC_PPC_GOT_DTPREL16_LO
+ -- : BFD_RELOC_PPC_GOT_DTPREL16_HI
+ -- : BFD_RELOC_PPC_GOT_DTPREL16_HA
+ -- : BFD_RELOC_PPC64_TPREL16_DS
+ -- : BFD_RELOC_PPC64_TPREL16_LO_DS
+ -- : BFD_RELOC_PPC64_TPREL16_HIGHER
+ -- : BFD_RELOC_PPC64_TPREL16_HIGHERA
+ -- : BFD_RELOC_PPC64_TPREL16_HIGHEST
+ -- : BFD_RELOC_PPC64_TPREL16_HIGHESTA
+ -- : BFD_RELOC_PPC64_DTPREL16_DS
+ -- : BFD_RELOC_PPC64_DTPREL16_LO_DS
+ -- : BFD_RELOC_PPC64_DTPREL16_HIGHER
+ -- : BFD_RELOC_PPC64_DTPREL16_HIGHERA
+ -- : BFD_RELOC_PPC64_DTPREL16_HIGHEST
+ -- : BFD_RELOC_PPC64_DTPREL16_HIGHESTA
+     PowerPC and PowerPC64 thread-local storage relocations.
+
+ -- : BFD_RELOC_I370_D12
+     IBM 370/390 relocations
+
+ -- : BFD_RELOC_CTOR
+     The type of reloc used to build a constructor table - at the moment
+     probably a 32 bit wide absolute relocation, but the target can
+     choose.  It generally does map to one of the other relocation
+     types.
+
+ -- : BFD_RELOC_ARM_PCREL_BRANCH
+     ARM 26 bit pc-relative branch.  The lowest two bits must be zero
+     and are not stored in the instruction.
+
+ -- : BFD_RELOC_ARM_PCREL_BLX
+     ARM 26 bit pc-relative branch.  The lowest bit must be zero and is
+     not stored in the instruction.  The 2nd lowest bit comes from a 1
+     bit field in the instruction.
+
+ -- : BFD_RELOC_THUMB_PCREL_BLX
+     Thumb 22 bit pc-relative branch.  The lowest bit must be zero and
+     is not stored in the instruction.  The 2nd lowest bit comes from a
+     1 bit field in the instruction.
+
+ -- : BFD_RELOC_ARM_PCREL_CALL
+     ARM 26-bit pc-relative branch for an unconditional BL or BLX
+     instruction.
+
+ -- : BFD_RELOC_ARM_PCREL_JUMP
+     ARM 26-bit pc-relative branch for B or conditional BL instruction.
+
+ -- : BFD_RELOC_THUMB_PCREL_BRANCH7
+ -- : BFD_RELOC_THUMB_PCREL_BRANCH9
+ -- : BFD_RELOC_THUMB_PCREL_BRANCH12
+ -- : BFD_RELOC_THUMB_PCREL_BRANCH20
+ -- : BFD_RELOC_THUMB_PCREL_BRANCH23
+ -- : BFD_RELOC_THUMB_PCREL_BRANCH25
+     Thumb 7-, 9-, 12-, 20-, 23-, and 25-bit pc-relative branches.  The
+     lowest bit must be zero and is not stored in the instruction.
+     Note that the corresponding ELF R_ARM_THM_JUMPnn constant has an
+     "nn" one smaller in all cases.  Note further that BRANCH23
+     corresponds to R_ARM_THM_CALL.
+
+ -- : BFD_RELOC_ARM_OFFSET_IMM
+     12-bit immediate offset, used in ARM-format ldr and str
+     instructions.
+
+ -- : BFD_RELOC_ARM_THUMB_OFFSET
+     5-bit immediate offset, used in Thumb-format ldr and str
+     instructions.
+
+ -- : BFD_RELOC_ARM_TARGET1
+     Pc-relative or absolute relocation depending on target.  Used for
+     entries in .init_array sections.
+
+ -- : BFD_RELOC_ARM_ROSEGREL32
+     Read-only segment base relative address.
+
+ -- : BFD_RELOC_ARM_SBREL32
+     Data segment base relative address.
+
+ -- : BFD_RELOC_ARM_TARGET2
+     This reloc is used for references to RTTI data from exception
+     handling tables.  The actual definition depends on the target.  It
+     may be a pc-relative or some form of GOT-indirect relocation.
+
+ -- : BFD_RELOC_ARM_PREL31
+     31-bit PC relative address.
+
+ -- : BFD_RELOC_ARM_MOVW
+ -- : BFD_RELOC_ARM_MOVT
+ -- : BFD_RELOC_ARM_MOVW_PCREL
+ -- : BFD_RELOC_ARM_MOVT_PCREL
+ -- : BFD_RELOC_ARM_THUMB_MOVW
+ -- : BFD_RELOC_ARM_THUMB_MOVT
+ -- : BFD_RELOC_ARM_THUMB_MOVW_PCREL
+ -- : BFD_RELOC_ARM_THUMB_MOVT_PCREL
+     Low and High halfword relocations for MOVW and MOVT instructions.
+
+ -- : BFD_RELOC_ARM_JUMP_SLOT
+ -- : BFD_RELOC_ARM_GLOB_DAT
+ -- : BFD_RELOC_ARM_GOT32
+ -- : BFD_RELOC_ARM_PLT32
+ -- : BFD_RELOC_ARM_RELATIVE
+ -- : BFD_RELOC_ARM_GOTOFF
+ -- : BFD_RELOC_ARM_GOTPC
+ -- : BFD_RELOC_ARM_GOT_PREL
+     Relocations for setting up GOTs and PLTs for shared libraries.
+
+ -- : BFD_RELOC_ARM_TLS_GD32
+ -- : BFD_RELOC_ARM_TLS_LDO32
+ -- : BFD_RELOC_ARM_TLS_LDM32
+ -- : BFD_RELOC_ARM_TLS_DTPOFF32
+ -- : BFD_RELOC_ARM_TLS_DTPMOD32
+ -- : BFD_RELOC_ARM_TLS_TPOFF32
+ -- : BFD_RELOC_ARM_TLS_IE32
+ -- : BFD_RELOC_ARM_TLS_LE32
+ -- : BFD_RELOC_ARM_TLS_GOTDESC
+ -- : BFD_RELOC_ARM_TLS_CALL
+ -- : BFD_RELOC_ARM_THM_TLS_CALL
+ -- : BFD_RELOC_ARM_TLS_DESCSEQ
+ -- : BFD_RELOC_ARM_THM_TLS_DESCSEQ
+ -- : BFD_RELOC_ARM_TLS_DESC
+     ARM thread-local storage relocations.
+
+ -- : BFD_RELOC_ARM_ALU_PC_G0_NC
+ -- : BFD_RELOC_ARM_ALU_PC_G0
+ -- : BFD_RELOC_ARM_ALU_PC_G1_NC
+ -- : BFD_RELOC_ARM_ALU_PC_G1
+ -- : BFD_RELOC_ARM_ALU_PC_G2
+ -- : BFD_RELOC_ARM_LDR_PC_G0
+ -- : BFD_RELOC_ARM_LDR_PC_G1
+ -- : BFD_RELOC_ARM_LDR_PC_G2
+ -- : BFD_RELOC_ARM_LDRS_PC_G0
+ -- : BFD_RELOC_ARM_LDRS_PC_G1
+ -- : BFD_RELOC_ARM_LDRS_PC_G2
+ -- : BFD_RELOC_ARM_LDC_PC_G0
+ -- : BFD_RELOC_ARM_LDC_PC_G1
+ -- : BFD_RELOC_ARM_LDC_PC_G2
+ -- : BFD_RELOC_ARM_ALU_SB_G0_NC
+ -- : BFD_RELOC_ARM_ALU_SB_G0
+ -- : BFD_RELOC_ARM_ALU_SB_G1_NC
+ -- : BFD_RELOC_ARM_ALU_SB_G1
+ -- : BFD_RELOC_ARM_ALU_SB_G2
+ -- : BFD_RELOC_ARM_LDR_SB_G0
+ -- : BFD_RELOC_ARM_LDR_SB_G1
+ -- : BFD_RELOC_ARM_LDR_SB_G2
+ -- : BFD_RELOC_ARM_LDRS_SB_G0
+ -- : BFD_RELOC_ARM_LDRS_SB_G1
+ -- : BFD_RELOC_ARM_LDRS_SB_G2
+ -- : BFD_RELOC_ARM_LDC_SB_G0
+ -- : BFD_RELOC_ARM_LDC_SB_G1
+ -- : BFD_RELOC_ARM_LDC_SB_G2
+     ARM group relocations.
+
+ -- : BFD_RELOC_ARM_V4BX
+     Annotation of BX instructions.
+
+ -- : BFD_RELOC_ARM_IRELATIVE
+     ARM support for STT_GNU_IFUNC.
+
+ -- : BFD_RELOC_ARM_IMMEDIATE
+ -- : BFD_RELOC_ARM_ADRL_IMMEDIATE
+ -- : BFD_RELOC_ARM_T32_IMMEDIATE
+ -- : BFD_RELOC_ARM_T32_ADD_IMM
+ -- : BFD_RELOC_ARM_T32_IMM12
+ -- : BFD_RELOC_ARM_T32_ADD_PC12
+ -- : BFD_RELOC_ARM_SHIFT_IMM
+ -- : BFD_RELOC_ARM_SMC
+ -- : BFD_RELOC_ARM_HVC
+ -- : BFD_RELOC_ARM_SWI
+ -- : BFD_RELOC_ARM_MULTI
+ -- : BFD_RELOC_ARM_CP_OFF_IMM
+ -- : BFD_RELOC_ARM_CP_OFF_IMM_S2
+ -- : BFD_RELOC_ARM_T32_CP_OFF_IMM
+ -- : BFD_RELOC_ARM_T32_CP_OFF_IMM_S2
+ -- : BFD_RELOC_ARM_ADR_IMM
+ -- : BFD_RELOC_ARM_LDR_IMM
+ -- : BFD_RELOC_ARM_LITERAL
+ -- : BFD_RELOC_ARM_IN_POOL
+ -- : BFD_RELOC_ARM_OFFSET_IMM8
+ -- : BFD_RELOC_ARM_T32_OFFSET_U8
+ -- : BFD_RELOC_ARM_T32_OFFSET_IMM
+ -- : BFD_RELOC_ARM_HWLITERAL
+ -- : BFD_RELOC_ARM_THUMB_ADD
+ -- : BFD_RELOC_ARM_THUMB_IMM
+ -- : BFD_RELOC_ARM_THUMB_SHIFT
+     These relocs are only used within the ARM assembler.  They are not
+     (at present) written to any object files.
+
+ -- : BFD_RELOC_SH_PCDISP8BY2
+ -- : BFD_RELOC_SH_PCDISP12BY2
+ -- : BFD_RELOC_SH_IMM3
+ -- : BFD_RELOC_SH_IMM3U
+ -- : BFD_RELOC_SH_DISP12
+ -- : BFD_RELOC_SH_DISP12BY2
+ -- : BFD_RELOC_SH_DISP12BY4
+ -- : BFD_RELOC_SH_DISP12BY8
+ -- : BFD_RELOC_SH_DISP20
+ -- : BFD_RELOC_SH_DISP20BY8
+ -- : BFD_RELOC_SH_IMM4
+ -- : BFD_RELOC_SH_IMM4BY2
+ -- : BFD_RELOC_SH_IMM4BY4
+ -- : BFD_RELOC_SH_IMM8
+ -- : BFD_RELOC_SH_IMM8BY2
+ -- : BFD_RELOC_SH_IMM8BY4
+ -- : BFD_RELOC_SH_PCRELIMM8BY2
+ -- : BFD_RELOC_SH_PCRELIMM8BY4
+ -- : BFD_RELOC_SH_SWITCH16
+ -- : BFD_RELOC_SH_SWITCH32
+ -- : BFD_RELOC_SH_USES
+ -- : BFD_RELOC_SH_COUNT
+ -- : BFD_RELOC_SH_ALIGN
+ -- : BFD_RELOC_SH_CODE
+ -- : BFD_RELOC_SH_DATA
+ -- : BFD_RELOC_SH_LABEL
+ -- : BFD_RELOC_SH_LOOP_START
+ -- : BFD_RELOC_SH_LOOP_END
+ -- : BFD_RELOC_SH_COPY
+ -- : BFD_RELOC_SH_GLOB_DAT
+ -- : BFD_RELOC_SH_JMP_SLOT
+ -- : BFD_RELOC_SH_RELATIVE
+ -- : BFD_RELOC_SH_GOTPC
+ -- : BFD_RELOC_SH_GOT_LOW16
+ -- : BFD_RELOC_SH_GOT_MEDLOW16
+ -- : BFD_RELOC_SH_GOT_MEDHI16
+ -- : BFD_RELOC_SH_GOT_HI16
+ -- : BFD_RELOC_SH_GOTPLT_LOW16
+ -- : BFD_RELOC_SH_GOTPLT_MEDLOW16
+ -- : BFD_RELOC_SH_GOTPLT_MEDHI16
+ -- : BFD_RELOC_SH_GOTPLT_HI16
+ -- : BFD_RELOC_SH_PLT_LOW16
+ -- : BFD_RELOC_SH_PLT_MEDLOW16
+ -- : BFD_RELOC_SH_PLT_MEDHI16
+ -- : BFD_RELOC_SH_PLT_HI16
+ -- : BFD_RELOC_SH_GOTOFF_LOW16
+ -- : BFD_RELOC_SH_GOTOFF_MEDLOW16
+ -- : BFD_RELOC_SH_GOTOFF_MEDHI16
+ -- : BFD_RELOC_SH_GOTOFF_HI16
+ -- : BFD_RELOC_SH_GOTPC_LOW16
+ -- : BFD_RELOC_SH_GOTPC_MEDLOW16
+ -- : BFD_RELOC_SH_GOTPC_MEDHI16
+ -- : BFD_RELOC_SH_GOTPC_HI16
+ -- : BFD_RELOC_SH_COPY64
+ -- : BFD_RELOC_SH_GLOB_DAT64
+ -- : BFD_RELOC_SH_JMP_SLOT64
+ -- : BFD_RELOC_SH_RELATIVE64
+ -- : BFD_RELOC_SH_GOT10BY4
+ -- : BFD_RELOC_SH_GOT10BY8
+ -- : BFD_RELOC_SH_GOTPLT10BY4
+ -- : BFD_RELOC_SH_GOTPLT10BY8
+ -- : BFD_RELOC_SH_GOTPLT32
+ -- : BFD_RELOC_SH_SHMEDIA_CODE
+ -- : BFD_RELOC_SH_IMMU5
+ -- : BFD_RELOC_SH_IMMS6
+ -- : BFD_RELOC_SH_IMMS6BY32
+ -- : BFD_RELOC_SH_IMMU6
+ -- : BFD_RELOC_SH_IMMS10
+ -- : BFD_RELOC_SH_IMMS10BY2
+ -- : BFD_RELOC_SH_IMMS10BY4
+ -- : BFD_RELOC_SH_IMMS10BY8
+ -- : BFD_RELOC_SH_IMMS16
+ -- : BFD_RELOC_SH_IMMU16
+ -- : BFD_RELOC_SH_IMM_LOW16
+ -- : BFD_RELOC_SH_IMM_LOW16_PCREL
+ -- : BFD_RELOC_SH_IMM_MEDLOW16
+ -- : BFD_RELOC_SH_IMM_MEDLOW16_PCREL
+ -- : BFD_RELOC_SH_IMM_MEDHI16
+ -- : BFD_RELOC_SH_IMM_MEDHI16_PCREL
+ -- : BFD_RELOC_SH_IMM_HI16
+ -- : BFD_RELOC_SH_IMM_HI16_PCREL
+ -- : BFD_RELOC_SH_PT_16
+ -- : BFD_RELOC_SH_TLS_GD_32
+ -- : BFD_RELOC_SH_TLS_LD_32
+ -- : BFD_RELOC_SH_TLS_LDO_32
+ -- : BFD_RELOC_SH_TLS_IE_32
+ -- : BFD_RELOC_SH_TLS_LE_32
+ -- : BFD_RELOC_SH_TLS_DTPMOD32
+ -- : BFD_RELOC_SH_TLS_DTPOFF32
+ -- : BFD_RELOC_SH_TLS_TPOFF32
+ -- : BFD_RELOC_SH_GOT20
+ -- : BFD_RELOC_SH_GOTOFF20
+ -- : BFD_RELOC_SH_GOTFUNCDESC
+ -- : BFD_RELOC_SH_GOTFUNCDESC20
+ -- : BFD_RELOC_SH_GOTOFFFUNCDESC
+ -- : BFD_RELOC_SH_GOTOFFFUNCDESC20
+ -- : BFD_RELOC_SH_FUNCDESC
+     Renesas / SuperH SH relocs.  Not all of these appear in object
+     files.
+
+ -- : BFD_RELOC_ARC_B22_PCREL
+     ARC Cores relocs.  ARC 22 bit pc-relative branch.  The lowest two
+     bits must be zero and are not stored in the instruction.  The high
+     20 bits are installed in bits 26 through 7 of the instruction.
+
+ -- : BFD_RELOC_ARC_B26
+     ARC 26 bit absolute branch.  The lowest two bits must be zero and
+     are not stored in the instruction.  The high 24 bits are installed
+     in bits 23 through 0.
+
+ -- : BFD_RELOC_BFIN_16_IMM
+     ADI Blackfin 16 bit immediate absolute reloc.
+
+ -- : BFD_RELOC_BFIN_16_HIGH
+     ADI Blackfin 16 bit immediate absolute reloc higher 16 bits.
+
+ -- : BFD_RELOC_BFIN_4_PCREL
+     ADI Blackfin 'a' part of LSETUP.
+
+ -- : BFD_RELOC_BFIN_5_PCREL
+     ADI Blackfin.
+
+ -- : BFD_RELOC_BFIN_16_LOW
+     ADI Blackfin 16 bit immediate absolute reloc lower 16 bits.
+
+ -- : BFD_RELOC_BFIN_10_PCREL
+     ADI Blackfin.
+
+ -- : BFD_RELOC_BFIN_11_PCREL
+     ADI Blackfin 'b' part of LSETUP.
+
+ -- : BFD_RELOC_BFIN_12_PCREL_JUMP
+     ADI Blackfin.
+
+ -- : BFD_RELOC_BFIN_12_PCREL_JUMP_S
+     ADI Blackfin Short jump, pcrel.
+
+ -- : BFD_RELOC_BFIN_24_PCREL_CALL_X
+     ADI Blackfin Call.x not implemented.
+
+ -- : BFD_RELOC_BFIN_24_PCREL_JUMP_L
+     ADI Blackfin Long Jump pcrel.
+
+ -- : BFD_RELOC_BFIN_GOT17M4
+ -- : BFD_RELOC_BFIN_GOTHI
+ -- : BFD_RELOC_BFIN_GOTLO
+ -- : BFD_RELOC_BFIN_FUNCDESC
+ -- : BFD_RELOC_BFIN_FUNCDESC_GOT17M4
+ -- : BFD_RELOC_BFIN_FUNCDESC_GOTHI
+ -- : BFD_RELOC_BFIN_FUNCDESC_GOTLO
+ -- : BFD_RELOC_BFIN_FUNCDESC_VALUE
+ -- : BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4
+ -- : BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI
+ -- : BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO
+ -- : BFD_RELOC_BFIN_GOTOFF17M4
+ -- : BFD_RELOC_BFIN_GOTOFFHI
+ -- : BFD_RELOC_BFIN_GOTOFFLO
+     ADI Blackfin FD-PIC relocations.
+
+ -- : BFD_RELOC_BFIN_GOT
+     ADI Blackfin GOT relocation.
+
+ -- : BFD_RELOC_BFIN_PLTPC
+     ADI Blackfin PLTPC relocation.
+
+ -- : BFD_ARELOC_BFIN_PUSH
+     ADI Blackfin arithmetic relocation.
+
+ -- : BFD_ARELOC_BFIN_CONST
+     ADI Blackfin arithmetic relocation.
+
+ -- : BFD_ARELOC_BFIN_ADD
+     ADI Blackfin arithmetic relocation.
+
+ -- : BFD_ARELOC_BFIN_SUB
+     ADI Blackfin arithmetic relocation.
+
+ -- : BFD_ARELOC_BFIN_MULT
+     ADI Blackfin arithmetic relocation.
+
+ -- : BFD_ARELOC_BFIN_DIV
+     ADI Blackfin arithmetic relocation.
+
+ -- : BFD_ARELOC_BFIN_MOD
+     ADI Blackfin arithmetic relocation.
+
+ -- : BFD_ARELOC_BFIN_LSHIFT
+     ADI Blackfin arithmetic relocation.
+
+ -- : BFD_ARELOC_BFIN_RSHIFT
+     ADI Blackfin arithmetic relocation.
+
+ -- : BFD_ARELOC_BFIN_AND
+     ADI Blackfin arithmetic relocation.
+
+ -- : BFD_ARELOC_BFIN_OR
+     ADI Blackfin arithmetic relocation.
+
+ -- : BFD_ARELOC_BFIN_XOR
+     ADI Blackfin arithmetic relocation.
+
+ -- : BFD_ARELOC_BFIN_LAND
+     ADI Blackfin arithmetic relocation.
+
+ -- : BFD_ARELOC_BFIN_LOR
+     ADI Blackfin arithmetic relocation.
+
+ -- : BFD_ARELOC_BFIN_LEN
+     ADI Blackfin arithmetic relocation.
+
+ -- : BFD_ARELOC_BFIN_NEG
+     ADI Blackfin arithmetic relocation.
+
+ -- : BFD_ARELOC_BFIN_COMP
+     ADI Blackfin arithmetic relocation.
+
+ -- : BFD_ARELOC_BFIN_PAGE
+     ADI Blackfin arithmetic relocation.
+
+ -- : BFD_ARELOC_BFIN_HWPAGE
+     ADI Blackfin arithmetic relocation.
+
+ -- : BFD_ARELOC_BFIN_ADDR
+     ADI Blackfin arithmetic relocation.
+
+ -- : BFD_RELOC_D10V_10_PCREL_R
+     Mitsubishi D10V relocs.  This is a 10-bit reloc with the right 2
+     bits assumed to be 0.
+
+ -- : BFD_RELOC_D10V_10_PCREL_L
+     Mitsubishi D10V relocs.  This is a 10-bit reloc with the right 2
+     bits assumed to be 0.  This is the same as the previous reloc
+     except it is in the left container, i.e., shifted left 15 bits.
+
+ -- : BFD_RELOC_D10V_18
+     This is an 18-bit reloc with the right 2 bits assumed to be 0.
+
+ -- : BFD_RELOC_D10V_18_PCREL
+     This is an 18-bit reloc with the right 2 bits assumed to be 0.
+
+ -- : BFD_RELOC_D30V_6
+     Mitsubishi D30V relocs.  This is a 6-bit absolute reloc.
+
+ -- : BFD_RELOC_D30V_9_PCREL
+     This is a 6-bit pc-relative reloc with the right 3 bits assumed to
+     be 0.
+
+ -- : BFD_RELOC_D30V_9_PCREL_R
+     This is a 6-bit pc-relative reloc with the right 3 bits assumed to
+     be 0. Same as the previous reloc but on the right side of the
+     container.
+
+ -- : BFD_RELOC_D30V_15
+     This is a 12-bit absolute reloc with the right 3 bitsassumed to be
+     0.
+
+ -- : BFD_RELOC_D30V_15_PCREL
+     This is a 12-bit pc-relative reloc with the right 3 bits assumed
+     to be 0.
+
+ -- : BFD_RELOC_D30V_15_PCREL_R
+     This is a 12-bit pc-relative reloc with the right 3 bits assumed
+     to be 0. Same as the previous reloc but on the right side of the
+     container.
+
+ -- : BFD_RELOC_D30V_21
+     This is an 18-bit absolute reloc with the right 3 bits assumed to
+     be 0.
+
+ -- : BFD_RELOC_D30V_21_PCREL
+     This is an 18-bit pc-relative reloc with the right 3 bits assumed
+     to be 0.
+
+ -- : BFD_RELOC_D30V_21_PCREL_R
+     This is an 18-bit pc-relative reloc with the right 3 bits assumed
+     to be 0. Same as the previous reloc but on the right side of the
+     container.
+
+ -- : BFD_RELOC_D30V_32
+     This is a 32-bit absolute reloc.
+
+ -- : BFD_RELOC_D30V_32_PCREL
+     This is a 32-bit pc-relative reloc.
+
+ -- : BFD_RELOC_DLX_HI16_S
+     DLX relocs
+
+ -- : BFD_RELOC_DLX_LO16
+     DLX relocs
+
+ -- : BFD_RELOC_DLX_JMP26
+     DLX relocs
+
+ -- : BFD_RELOC_M32C_HI8
+ -- : BFD_RELOC_M32C_RL_JUMP
+ -- : BFD_RELOC_M32C_RL_1ADDR
+ -- : BFD_RELOC_M32C_RL_2ADDR
+     Renesas M16C/M32C Relocations.
+
+ -- : BFD_RELOC_M32R_24
+     Renesas M32R (formerly Mitsubishi M32R) relocs.  This is a 24 bit
+     absolute address.
+
+ -- : BFD_RELOC_M32R_10_PCREL
+     This is a 10-bit pc-relative reloc with the right 2 bits assumed
+     to be 0.
+
+ -- : BFD_RELOC_M32R_18_PCREL
+     This is an 18-bit reloc with the right 2 bits assumed to be 0.
+
+ -- : BFD_RELOC_M32R_26_PCREL
+     This is a 26-bit reloc with the right 2 bits assumed to be 0.
+
+ -- : BFD_RELOC_M32R_HI16_ULO
+     This is a 16-bit reloc containing the high 16 bits of an address
+     used when the lower 16 bits are treated as unsigned.
+
+ -- : BFD_RELOC_M32R_HI16_SLO
+     This is a 16-bit reloc containing the high 16 bits of an address
+     used when the lower 16 bits are treated as signed.
+
+ -- : BFD_RELOC_M32R_LO16
+     This is a 16-bit reloc containing the lower 16 bits of an address.
+
+ -- : BFD_RELOC_M32R_SDA16
+     This is a 16-bit reloc containing the small data area offset for
+     use in add3, load, and store instructions.
+
+ -- : BFD_RELOC_M32R_GOT24
+ -- : BFD_RELOC_M32R_26_PLTREL
+ -- : BFD_RELOC_M32R_COPY
+ -- : BFD_RELOC_M32R_GLOB_DAT
+ -- : BFD_RELOC_M32R_JMP_SLOT
+ -- : BFD_RELOC_M32R_RELATIVE
+ -- : BFD_RELOC_M32R_GOTOFF
+ -- : BFD_RELOC_M32R_GOTOFF_HI_ULO
+ -- : BFD_RELOC_M32R_GOTOFF_HI_SLO
+ -- : BFD_RELOC_M32R_GOTOFF_LO
+ -- : BFD_RELOC_M32R_GOTPC24
+ -- : BFD_RELOC_M32R_GOT16_HI_ULO
+ -- : BFD_RELOC_M32R_GOT16_HI_SLO
+ -- : BFD_RELOC_M32R_GOT16_LO
+ -- : BFD_RELOC_M32R_GOTPC_HI_ULO
+ -- : BFD_RELOC_M32R_GOTPC_HI_SLO
+ -- : BFD_RELOC_M32R_GOTPC_LO
+     For PIC.
+
+ -- : BFD_RELOC_V850_9_PCREL
+     This is a 9-bit reloc
+
+ -- : BFD_RELOC_V850_22_PCREL
+     This is a 22-bit reloc
+
+ -- : BFD_RELOC_V850_SDA_16_16_OFFSET
+     This is a 16 bit offset from the short data area pointer.
+
+ -- : BFD_RELOC_V850_SDA_15_16_OFFSET
+     This is a 16 bit offset (of which only 15 bits are used) from the
+     short data area pointer.
+
+ -- : BFD_RELOC_V850_ZDA_16_16_OFFSET
+     This is a 16 bit offset from the zero data area pointer.
+
+ -- : BFD_RELOC_V850_ZDA_15_16_OFFSET
+     This is a 16 bit offset (of which only 15 bits are used) from the
+     zero data area pointer.
+
+ -- : BFD_RELOC_V850_TDA_6_8_OFFSET
+     This is an 8 bit offset (of which only 6 bits are used) from the
+     tiny data area pointer.
+
+ -- : BFD_RELOC_V850_TDA_7_8_OFFSET
+     This is an 8bit offset (of which only 7 bits are used) from the
+     tiny data area pointer.
+
+ -- : BFD_RELOC_V850_TDA_7_7_OFFSET
+     This is a 7 bit offset from the tiny data area pointer.
+
+ -- : BFD_RELOC_V850_TDA_16_16_OFFSET
+     This is a 16 bit offset from the tiny data area pointer.
+
+ -- : BFD_RELOC_V850_TDA_4_5_OFFSET
+     This is a 5 bit offset (of which only 4 bits are used) from the
+     tiny data area pointer.
+
+ -- : BFD_RELOC_V850_TDA_4_4_OFFSET
+     This is a 4 bit offset from the tiny data area pointer.
+
+ -- : BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET
+     This is a 16 bit offset from the short data area pointer, with the
+     bits placed non-contiguously in the instruction.
+
+ -- : BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET
+     This is a 16 bit offset from the zero data area pointer, with the
+     bits placed non-contiguously in the instruction.
+
+ -- : BFD_RELOC_V850_CALLT_6_7_OFFSET
+     This is a 6 bit offset from the call table base pointer.
+
+ -- : BFD_RELOC_V850_CALLT_16_16_OFFSET
+     This is a 16 bit offset from the call table base pointer.
+
+ -- : BFD_RELOC_V850_LONGCALL
+     Used for relaxing indirect function calls.
+
+ -- : BFD_RELOC_V850_LONGJUMP
+     Used for relaxing indirect jumps.
+
+ -- : BFD_RELOC_V850_ALIGN
+     Used to maintain alignment whilst relaxing.
+
+ -- : BFD_RELOC_V850_LO16_SPLIT_OFFSET
+     This is a variation of BFD_RELOC_LO16 that can be used in v850e
+     ld.bu instructions.
+
+ -- : BFD_RELOC_V850_16_PCREL
+     This is a 16-bit reloc.
+
+ -- : BFD_RELOC_V850_17_PCREL
+     This is a 17-bit reloc.
+
+ -- : BFD_RELOC_V850_23
+     This is a 23-bit reloc.
+
+ -- : BFD_RELOC_V850_32_PCREL
+     This is a 32-bit reloc.
+
+ -- : BFD_RELOC_V850_32_ABS
+     This is a 32-bit reloc.
+
+ -- : BFD_RELOC_V850_16_SPLIT_OFFSET
+     This is a 16-bit reloc.
+
+ -- : BFD_RELOC_V850_16_S1
+     This is a 16-bit reloc.
+
+ -- : BFD_RELOC_V850_LO16_S1
+     Low 16 bits. 16 bit shifted by 1.
+
+ -- : BFD_RELOC_V850_CALLT_15_16_OFFSET
+     This is a 16 bit offset from the call table base pointer.
+
+ -- : BFD_RELOC_V850_32_GOTPCREL
+     DSO relocations.
+
+ -- : BFD_RELOC_V850_16_GOT
+     DSO relocations.
+
+ -- : BFD_RELOC_V850_32_GOT
+     DSO relocations.
+
+ -- : BFD_RELOC_V850_22_PLT_PCREL
+     DSO relocations.
+
+ -- : BFD_RELOC_V850_32_PLT_PCREL
+     DSO relocations.
+
+ -- : BFD_RELOC_V850_COPY
+     DSO relocations.
+
+ -- : BFD_RELOC_V850_GLOB_DAT
+     DSO relocations.
+
+ -- : BFD_RELOC_V850_JMP_SLOT
+     DSO relocations.
+
+ -- : BFD_RELOC_V850_RELATIVE
+     DSO relocations.
+
+ -- : BFD_RELOC_V850_16_GOTOFF
+     DSO relocations.
+
+ -- : BFD_RELOC_V850_32_GOTOFF
+     DSO relocations.
+
+ -- : BFD_RELOC_V850_CODE
+     start code.
+
+ -- : BFD_RELOC_V850_DATA
+     start data in text.
+
+ -- : BFD_RELOC_TIC30_LDP
+     This is a 8bit DP reloc for the tms320c30, where the most
+     significant 8 bits of a 24 bit word are placed into the least
+     significant 8 bits of the opcode.
+
+ -- : BFD_RELOC_TIC54X_PARTLS7
+     This is a 7bit reloc for the tms320c54x, where the least
+     significant 7 bits of a 16 bit word are placed into the least
+     significant 7 bits of the opcode.
+
+ -- : BFD_RELOC_TIC54X_PARTMS9
+     This is a 9bit DP reloc for the tms320c54x, where the most
+     significant 9 bits of a 16 bit word are placed into the least
+     significant 9 bits of the opcode.
+
+ -- : BFD_RELOC_TIC54X_23
+     This is an extended address 23-bit reloc for the tms320c54x.
+
+ -- : BFD_RELOC_TIC54X_16_OF_23
+     This is a 16-bit reloc for the tms320c54x, where the least
+     significant 16 bits of a 23-bit extended address are placed into
+     the opcode.
+
+ -- : BFD_RELOC_TIC54X_MS7_OF_23
+     This is a reloc for the tms320c54x, where the most significant 7
+     bits of a 23-bit extended address are placed into the opcode.
+
+ -- : BFD_RELOC_C6000_PCR_S21
+ -- : BFD_RELOC_C6000_PCR_S12
+ -- : BFD_RELOC_C6000_PCR_S10
+ -- : BFD_RELOC_C6000_PCR_S7
+ -- : BFD_RELOC_C6000_ABS_S16
+ -- : BFD_RELOC_C6000_ABS_L16
+ -- : BFD_RELOC_C6000_ABS_H16
+ -- : BFD_RELOC_C6000_SBR_U15_B
+ -- : BFD_RELOC_C6000_SBR_U15_H
+ -- : BFD_RELOC_C6000_SBR_U15_W
+ -- : BFD_RELOC_C6000_SBR_S16
+ -- : BFD_RELOC_C6000_SBR_L16_B
+ -- : BFD_RELOC_C6000_SBR_L16_H
+ -- : BFD_RELOC_C6000_SBR_L16_W
+ -- : BFD_RELOC_C6000_SBR_H16_B
+ -- : BFD_RELOC_C6000_SBR_H16_H
+ -- : BFD_RELOC_C6000_SBR_H16_W
+ -- : BFD_RELOC_C6000_SBR_GOT_U15_W
+ -- : BFD_RELOC_C6000_SBR_GOT_L16_W
+ -- : BFD_RELOC_C6000_SBR_GOT_H16_W
+ -- : BFD_RELOC_C6000_DSBT_INDEX
+ -- : BFD_RELOC_C6000_PREL31
+ -- : BFD_RELOC_C6000_COPY
+ -- : BFD_RELOC_C6000_JUMP_SLOT
+ -- : BFD_RELOC_C6000_EHTYPE
+ -- : BFD_RELOC_C6000_PCR_H16
+ -- : BFD_RELOC_C6000_PCR_L16
+ -- : BFD_RELOC_C6000_ALIGN
+ -- : BFD_RELOC_C6000_FPHEAD
+ -- : BFD_RELOC_C6000_NOCMP
+     TMS320C6000 relocations.
+
+ -- : BFD_RELOC_FR30_48
+     This is a 48 bit reloc for the FR30 that stores 32 bits.
+
+ -- : BFD_RELOC_FR30_20
+     This is a 32 bit reloc for the FR30 that stores 20 bits split up
+     into two sections.
+
+ -- : BFD_RELOC_FR30_6_IN_4
+     This is a 16 bit reloc for the FR30 that stores a 6 bit word
+     offset in 4 bits.
+
+ -- : BFD_RELOC_FR30_8_IN_8
+     This is a 16 bit reloc for the FR30 that stores an 8 bit byte
+     offset into 8 bits.
+
+ -- : BFD_RELOC_FR30_9_IN_8
+     This is a 16 bit reloc for the FR30 that stores a 9 bit short
+     offset into 8 bits.
+
+ -- : BFD_RELOC_FR30_10_IN_8
+     This is a 16 bit reloc for the FR30 that stores a 10 bit word
+     offset into 8 bits.
+
+ -- : BFD_RELOC_FR30_9_PCREL
+     This is a 16 bit reloc for the FR30 that stores a 9 bit pc relative
+     short offset into 8 bits.
+
+ -- : BFD_RELOC_FR30_12_PCREL
+     This is a 16 bit reloc for the FR30 that stores a 12 bit pc
+     relative short offset into 11 bits.
+
+ -- : BFD_RELOC_MCORE_PCREL_IMM8BY4
+ -- : BFD_RELOC_MCORE_PCREL_IMM11BY2
+ -- : BFD_RELOC_MCORE_PCREL_IMM4BY2
+ -- : BFD_RELOC_MCORE_PCREL_32
+ -- : BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2
+ -- : BFD_RELOC_MCORE_RVA
+     Motorola Mcore relocations.
+
+ -- : BFD_RELOC_MEP_8
+ -- : BFD_RELOC_MEP_16
+ -- : BFD_RELOC_MEP_32
+ -- : BFD_RELOC_MEP_PCREL8A2
+ -- : BFD_RELOC_MEP_PCREL12A2
+ -- : BFD_RELOC_MEP_PCREL17A2
+ -- : BFD_RELOC_MEP_PCREL24A2
+ -- : BFD_RELOC_MEP_PCABS24A2
+ -- : BFD_RELOC_MEP_LOW16
+ -- : BFD_RELOC_MEP_HI16U
+ -- : BFD_RELOC_MEP_HI16S
+ -- : BFD_RELOC_MEP_GPREL
+ -- : BFD_RELOC_MEP_TPREL
+ -- : BFD_RELOC_MEP_TPREL7
+ -- : BFD_RELOC_MEP_TPREL7A2
+ -- : BFD_RELOC_MEP_TPREL7A4
+ -- : BFD_RELOC_MEP_UIMM24
+ -- : BFD_RELOC_MEP_ADDR24A4
+ -- : BFD_RELOC_MEP_GNU_VTINHERIT
+ -- : BFD_RELOC_MEP_GNU_VTENTRY
+     Toshiba Media Processor Relocations.
+
+ -- : BFD_RELOC_MMIX_GETA
+ -- : BFD_RELOC_MMIX_GETA_1
+ -- : BFD_RELOC_MMIX_GETA_2
+ -- : BFD_RELOC_MMIX_GETA_3
+     These are relocations for the GETA instruction.
+
+ -- : BFD_RELOC_MMIX_CBRANCH
+ -- : BFD_RELOC_MMIX_CBRANCH_J
+ -- : BFD_RELOC_MMIX_CBRANCH_1
+ -- : BFD_RELOC_MMIX_CBRANCH_2
+ -- : BFD_RELOC_MMIX_CBRANCH_3
+     These are relocations for a conditional branch instruction.
+
+ -- : BFD_RELOC_MMIX_PUSHJ
+ -- : BFD_RELOC_MMIX_PUSHJ_1
+ -- : BFD_RELOC_MMIX_PUSHJ_2
+ -- : BFD_RELOC_MMIX_PUSHJ_3
+ -- : BFD_RELOC_MMIX_PUSHJ_STUBBABLE
+     These are relocations for the PUSHJ instruction.
+
+ -- : BFD_RELOC_MMIX_JMP
+ -- : BFD_RELOC_MMIX_JMP_1
+ -- : BFD_RELOC_MMIX_JMP_2
+ -- : BFD_RELOC_MMIX_JMP_3
+     These are relocations for the JMP instruction.
+
+ -- : BFD_RELOC_MMIX_ADDR19
+     This is a relocation for a relative address as in a GETA
+     instruction or a branch.
+
+ -- : BFD_RELOC_MMIX_ADDR27
+     This is a relocation for a relative address as in a JMP
+     instruction.
+
+ -- : BFD_RELOC_MMIX_REG_OR_BYTE
+     This is a relocation for an instruction field that may be a general
+     register or a value 0..255.
+
+ -- : BFD_RELOC_MMIX_REG
+     This is a relocation for an instruction field that may be a general
+     register.
+
+ -- : BFD_RELOC_MMIX_BASE_PLUS_OFFSET
+     This is a relocation for two instruction fields holding a register
+     and an offset, the equivalent of the relocation.
+
+ -- : BFD_RELOC_MMIX_LOCAL
+     This relocation is an assertion that the expression is not
+     allocated as a global register.  It does not modify contents.
+
+ -- : BFD_RELOC_AVR_7_PCREL
+     This is a 16 bit reloc for the AVR that stores 8 bit pc relative
+     short offset into 7 bits.
+
+ -- : BFD_RELOC_AVR_13_PCREL
+     This is a 16 bit reloc for the AVR that stores 13 bit pc relative
+     short offset into 12 bits.
+
+ -- : BFD_RELOC_AVR_16_PM
+     This is a 16 bit reloc for the AVR that stores 17 bit value
+     (usually program memory address) into 16 bits.
+
+ -- : BFD_RELOC_AVR_LO8_LDI
+     This is a 16 bit reloc for the AVR that stores 8 bit value (usually
+     data memory address) into 8 bit immediate value of LDI insn.
+
+ -- : BFD_RELOC_AVR_HI8_LDI
+     This is a 16 bit reloc for the AVR that stores 8 bit value (high 8
+     bit of data memory address) into 8 bit immediate value of LDI insn.
+
+ -- : BFD_RELOC_AVR_HH8_LDI
+     This is a 16 bit reloc for the AVR that stores 8 bit value (most
+     high 8 bit of program memory address) into 8 bit immediate value
+     of LDI insn.
+
+ -- : BFD_RELOC_AVR_MS8_LDI
+     This is a 16 bit reloc for the AVR that stores 8 bit value (most
+     high 8 bit of 32 bit value) into 8 bit immediate value of LDI insn.
+
+ -- : BFD_RELOC_AVR_LO8_LDI_NEG
+     This is a 16 bit reloc for the AVR that stores negated 8 bit value
+     (usually data memory address) into 8 bit immediate value of SUBI
+     insn.
+
+ -- : BFD_RELOC_AVR_HI8_LDI_NEG
+     This is a 16 bit reloc for the AVR that stores negated 8 bit value
+     (high 8 bit of data memory address) into 8 bit immediate value of
+     SUBI insn.
+
+ -- : BFD_RELOC_AVR_HH8_LDI_NEG
+     This is a 16 bit reloc for the AVR that stores negated 8 bit value
+     (most high 8 bit of program memory address) into 8 bit immediate
+     value of LDI or SUBI insn.
+
+ -- : BFD_RELOC_AVR_MS8_LDI_NEG
+     This is a 16 bit reloc for the AVR that stores negated 8 bit value
+     (msb of 32 bit value) into 8 bit immediate value of LDI insn.
+
+ -- : BFD_RELOC_AVR_LO8_LDI_PM
+     This is a 16 bit reloc for the AVR that stores 8 bit value (usually
+     command address) into 8 bit immediate value of LDI insn.
+
+ -- : BFD_RELOC_AVR_LO8_LDI_GS
+     This is a 16 bit reloc for the AVR that stores 8 bit value
+     (command address) into 8 bit immediate value of LDI insn. If the
+     address is beyond the 128k boundary, the linker inserts a jump
+     stub for this reloc in the lower 128k.
+
+ -- : BFD_RELOC_AVR_HI8_LDI_PM
+     This is a 16 bit reloc for the AVR that stores 8 bit value (high 8
+     bit of command address) into 8 bit immediate value of LDI insn.
+
+ -- : BFD_RELOC_AVR_HI8_LDI_GS
+     This is a 16 bit reloc for the AVR that stores 8 bit value (high 8
+     bit of command address) into 8 bit immediate value of LDI insn.
+     If the address is beyond the 128k boundary, the linker inserts a
+     jump stub for this reloc below 128k.
+
+ -- : BFD_RELOC_AVR_HH8_LDI_PM
+     This is a 16 bit reloc for the AVR that stores 8 bit value (most
+     high 8 bit of command address) into 8 bit immediate value of LDI
+     insn.
+
+ -- : BFD_RELOC_AVR_LO8_LDI_PM_NEG
+     This is a 16 bit reloc for the AVR that stores negated 8 bit value
+     (usually command address) into 8 bit immediate value of SUBI insn.
+
+ -- : BFD_RELOC_AVR_HI8_LDI_PM_NEG
+     This is a 16 bit reloc for the AVR that stores negated 8 bit value
+     (high 8 bit of 16 bit command address) into 8 bit immediate value
+     of SUBI insn.
+
+ -- : BFD_RELOC_AVR_HH8_LDI_PM_NEG
+     This is a 16 bit reloc for the AVR that stores negated 8 bit value
+     (high 6 bit of 22 bit command address) into 8 bit immediate value
+     of SUBI insn.
+
+ -- : BFD_RELOC_AVR_CALL
+     This is a 32 bit reloc for the AVR that stores 23 bit value into
+     22 bits.
+
+ -- : BFD_RELOC_AVR_LDI
+     This is a 16 bit reloc for the AVR that stores all needed bits for
+     absolute addressing with ldi with overflow check to linktime
+
+ -- : BFD_RELOC_AVR_6
+     This is a 6 bit reloc for the AVR that stores offset for ldd/std
+     instructions
+
+ -- : BFD_RELOC_AVR_6_ADIW
+     This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw
+     instructions
+
+ -- : BFD_RELOC_AVR_8_LO
+     This is a 8 bit reloc for the AVR that stores bits 0..7 of a symbol
+     in .byte lo8(symbol)
+
+ -- : BFD_RELOC_AVR_8_HI
+     This is a 8 bit reloc for the AVR that stores bits 8..15 of a
+     symbol in .byte hi8(symbol)
+
+ -- : BFD_RELOC_AVR_8_HLO
+     This is a 8 bit reloc for the AVR that stores bits 16..23 of a
+     symbol in .byte hlo8(symbol)
+
+ -- : BFD_RELOC_RL78_NEG8
+ -- : BFD_RELOC_RL78_NEG16
+ -- : BFD_RELOC_RL78_NEG24
+ -- : BFD_RELOC_RL78_NEG32
+ -- : BFD_RELOC_RL78_16_OP
+ -- : BFD_RELOC_RL78_24_OP
+ -- : BFD_RELOC_RL78_32_OP
+ -- : BFD_RELOC_RL78_8U
+ -- : BFD_RELOC_RL78_16U
+ -- : BFD_RELOC_RL78_24U
+ -- : BFD_RELOC_RL78_DIR3U_PCREL
+ -- : BFD_RELOC_RL78_DIFF
+ -- : BFD_RELOC_RL78_GPRELB
+ -- : BFD_RELOC_RL78_GPRELW
+ -- : BFD_RELOC_RL78_GPRELL
+ -- : BFD_RELOC_RL78_SYM
+ -- : BFD_RELOC_RL78_OP_SUBTRACT
+ -- : BFD_RELOC_RL78_OP_NEG
+ -- : BFD_RELOC_RL78_OP_AND
+ -- : BFD_RELOC_RL78_OP_SHRA
+ -- : BFD_RELOC_RL78_ABS8
+ -- : BFD_RELOC_RL78_ABS16
+ -- : BFD_RELOC_RL78_ABS16_REV
+ -- : BFD_RELOC_RL78_ABS32
+ -- : BFD_RELOC_RL78_ABS32_REV
+ -- : BFD_RELOC_RL78_ABS16U
+ -- : BFD_RELOC_RL78_ABS16UW
+ -- : BFD_RELOC_RL78_ABS16UL
+ -- : BFD_RELOC_RL78_RELAX
+ -- : BFD_RELOC_RL78_HI16
+ -- : BFD_RELOC_RL78_HI8
+ -- : BFD_RELOC_RL78_LO16
+     Renesas RL78 Relocations.
+
+ -- : BFD_RELOC_RX_NEG8
+ -- : BFD_RELOC_RX_NEG16
+ -- : BFD_RELOC_RX_NEG24
+ -- : BFD_RELOC_RX_NEG32
+ -- : BFD_RELOC_RX_16_OP
+ -- : BFD_RELOC_RX_24_OP
+ -- : BFD_RELOC_RX_32_OP
+ -- : BFD_RELOC_RX_8U
+ -- : BFD_RELOC_RX_16U
+ -- : BFD_RELOC_RX_24U
+ -- : BFD_RELOC_RX_DIR3U_PCREL
+ -- : BFD_RELOC_RX_DIFF
+ -- : BFD_RELOC_RX_GPRELB
+ -- : BFD_RELOC_RX_GPRELW
+ -- : BFD_RELOC_RX_GPRELL
+ -- : BFD_RELOC_RX_SYM
+ -- : BFD_RELOC_RX_OP_SUBTRACT
+ -- : BFD_RELOC_RX_OP_NEG
+ -- : BFD_RELOC_RX_ABS8
+ -- : BFD_RELOC_RX_ABS16
+ -- : BFD_RELOC_RX_ABS16_REV
+ -- : BFD_RELOC_RX_ABS32
+ -- : BFD_RELOC_RX_ABS32_REV
+ -- : BFD_RELOC_RX_ABS16U
+ -- : BFD_RELOC_RX_ABS16UW
+ -- : BFD_RELOC_RX_ABS16UL
+ -- : BFD_RELOC_RX_RELAX
+     Renesas RX Relocations.
+
+ -- : BFD_RELOC_390_12
+     Direct 12 bit.
+
+ -- : BFD_RELOC_390_GOT12
+     12 bit GOT offset.
+
+ -- : BFD_RELOC_390_PLT32
+     32 bit PC relative PLT address.
+
+ -- : BFD_RELOC_390_COPY
+     Copy symbol at runtime.
+
+ -- : BFD_RELOC_390_GLOB_DAT
+     Create GOT entry.
+
+ -- : BFD_RELOC_390_JMP_SLOT
+     Create PLT entry.
+
+ -- : BFD_RELOC_390_RELATIVE
+     Adjust by program base.
+
+ -- : BFD_RELOC_390_GOTPC
+     32 bit PC relative offset to GOT.
+
+ -- : BFD_RELOC_390_GOT16
+     16 bit GOT offset.
+
+ -- : BFD_RELOC_390_PC16DBL
+     PC relative 16 bit shifted by 1.
+
+ -- : BFD_RELOC_390_PLT16DBL
+     16 bit PC rel. PLT shifted by 1.
+
+ -- : BFD_RELOC_390_PC32DBL
+     PC relative 32 bit shifted by 1.
+
+ -- : BFD_RELOC_390_PLT32DBL
+     32 bit PC rel. PLT shifted by 1.
+
+ -- : BFD_RELOC_390_GOTPCDBL
+     32 bit PC rel. GOT shifted by 1.
+
+ -- : BFD_RELOC_390_GOT64
+     64 bit GOT offset.
+
+ -- : BFD_RELOC_390_PLT64
+     64 bit PC relative PLT address.
+
+ -- : BFD_RELOC_390_GOTENT
+     32 bit rel. offset to GOT entry.
+
+ -- : BFD_RELOC_390_GOTOFF64
+     64 bit offset to GOT.
+
+ -- : BFD_RELOC_390_GOTPLT12
+     12-bit offset to symbol-entry within GOT, with PLT handling.
+
+ -- : BFD_RELOC_390_GOTPLT16
+     16-bit offset to symbol-entry within GOT, with PLT handling.
+
+ -- : BFD_RELOC_390_GOTPLT32
+     32-bit offset to symbol-entry within GOT, with PLT handling.
+
+ -- : BFD_RELOC_390_GOTPLT64
+     64-bit offset to symbol-entry within GOT, with PLT handling.
+
+ -- : BFD_RELOC_390_GOTPLTENT
+     32-bit rel. offset to symbol-entry within GOT, with PLT handling.
+
+ -- : BFD_RELOC_390_PLTOFF16
+     16-bit rel. offset from the GOT to a PLT entry.
+
+ -- : BFD_RELOC_390_PLTOFF32
+     32-bit rel. offset from the GOT to a PLT entry.
+
+ -- : BFD_RELOC_390_PLTOFF64
+     64-bit rel. offset from the GOT to a PLT entry.
+
+ -- : BFD_RELOC_390_TLS_LOAD
+ -- : BFD_RELOC_390_TLS_GDCALL
+ -- : BFD_RELOC_390_TLS_LDCALL
+ -- : BFD_RELOC_390_TLS_GD32
+ -- : BFD_RELOC_390_TLS_GD64
+ -- : BFD_RELOC_390_TLS_GOTIE12
+ -- : BFD_RELOC_390_TLS_GOTIE32
+ -- : BFD_RELOC_390_TLS_GOTIE64
+ -- : BFD_RELOC_390_TLS_LDM32
+ -- : BFD_RELOC_390_TLS_LDM64
+ -- : BFD_RELOC_390_TLS_IE32
+ -- : BFD_RELOC_390_TLS_IE64
+ -- : BFD_RELOC_390_TLS_IEENT
+ -- : BFD_RELOC_390_TLS_LE32
+ -- : BFD_RELOC_390_TLS_LE64
+ -- : BFD_RELOC_390_TLS_LDO32
+ -- : BFD_RELOC_390_TLS_LDO64
+ -- : BFD_RELOC_390_TLS_DTPMOD
+ -- : BFD_RELOC_390_TLS_DTPOFF
+ -- : BFD_RELOC_390_TLS_TPOFF
+     s390 tls relocations.
+
+ -- : BFD_RELOC_390_20
+ -- : BFD_RELOC_390_GOT20
+ -- : BFD_RELOC_390_GOTPLT20
+ -- : BFD_RELOC_390_TLS_GOTIE20
+     Long displacement extension.
+
+ -- : BFD_RELOC_390_IRELATIVE
+     STT_GNU_IFUNC relocation.
+
+ -- : BFD_RELOC_SCORE_GPREL15
+     Score relocations Low 16 bit for load/store
+
+ -- : BFD_RELOC_SCORE_DUMMY2
+ -- : BFD_RELOC_SCORE_JMP
+     This is a 24-bit reloc with the right 1 bit assumed to be 0
+
+ -- : BFD_RELOC_SCORE_BRANCH
+     This is a 19-bit reloc with the right 1 bit assumed to be 0
+
+ -- : BFD_RELOC_SCORE_IMM30
+     This is a 32-bit reloc for 48-bit instructions.
+
+ -- : BFD_RELOC_SCORE_IMM32
+     This is a 32-bit reloc for 48-bit instructions.
+
+ -- : BFD_RELOC_SCORE16_JMP
+     This is a 11-bit reloc with the right 1 bit assumed to be 0
+
+ -- : BFD_RELOC_SCORE16_BRANCH
+     This is a 8-bit reloc with the right 1 bit assumed to be 0
+
+ -- : BFD_RELOC_SCORE_BCMP
+     This is a 9-bit reloc with the right 1 bit assumed to be 0
+
+ -- : BFD_RELOC_SCORE_GOT15
+ -- : BFD_RELOC_SCORE_GOT_LO16
+ -- : BFD_RELOC_SCORE_CALL15
+ -- : BFD_RELOC_SCORE_DUMMY_HI16
+     Undocumented Score relocs
+
+ -- : BFD_RELOC_IP2K_FR9
+     Scenix IP2K - 9-bit register number / data address
+
+ -- : BFD_RELOC_IP2K_BANK
+     Scenix IP2K - 4-bit register/data bank number
+
+ -- : BFD_RELOC_IP2K_ADDR16CJP
+     Scenix IP2K - low 13 bits of instruction word address
+
+ -- : BFD_RELOC_IP2K_PAGE3
+     Scenix IP2K - high 3 bits of instruction word address
+
+ -- : BFD_RELOC_IP2K_LO8DATA
+ -- : BFD_RELOC_IP2K_HI8DATA
+ -- : BFD_RELOC_IP2K_EX8DATA
+     Scenix IP2K - ext/low/high 8 bits of data address
+
+ -- : BFD_RELOC_IP2K_LO8INSN
+ -- : BFD_RELOC_IP2K_HI8INSN
+     Scenix IP2K - low/high 8 bits of instruction word address
+
+ -- : BFD_RELOC_IP2K_PC_SKIP
+     Scenix IP2K - even/odd PC modifier to modify snb pcl.0
+
+ -- : BFD_RELOC_IP2K_TEXT
+     Scenix IP2K - 16 bit word address in text section.
+
+ -- : BFD_RELOC_IP2K_FR_OFFSET
+     Scenix IP2K - 7-bit sp or dp offset
+
+ -- : BFD_RELOC_VPE4KMATH_DATA
+ -- : BFD_RELOC_VPE4KMATH_INSN
+     Scenix VPE4K coprocessor - data/insn-space addressing
+
+ -- : BFD_RELOC_VTABLE_INHERIT
+ -- : BFD_RELOC_VTABLE_ENTRY
+     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 that are not used, so that the code for those
+     functions need not be included in the output.
+
+     VTABLE_INHERIT is a zero-space relocation used to describe to the
+     linker the inheritance tree of a C++ virtual function table.  The
+     relocation's symbol should be the parent class' vtable, and the
+     relocation should be located at the child vtable.
+
+     VTABLE_ENTRY is a zero-space relocation that describes the use of a
+     virtual function table entry.  The reloc's symbol should refer to
+     the table of the class mentioned in the code.  Off of that base,
+     an offset describes the entry that is being used.  For Rela hosts,
+     this offset is stored in the reloc's addend.  For Rel hosts, we
+     are forced to put this offset in the reloc's section offset.
+
+ -- : BFD_RELOC_IA64_IMM14
+ -- : BFD_RELOC_IA64_IMM22
+ -- : BFD_RELOC_IA64_IMM64
+ -- : BFD_RELOC_IA64_DIR32MSB
+ -- : BFD_RELOC_IA64_DIR32LSB
+ -- : BFD_RELOC_IA64_DIR64MSB
+ -- : BFD_RELOC_IA64_DIR64LSB
+ -- : BFD_RELOC_IA64_GPREL22
+ -- : BFD_RELOC_IA64_GPREL64I
+ -- : BFD_RELOC_IA64_GPREL32MSB
+ -- : BFD_RELOC_IA64_GPREL32LSB
+ -- : BFD_RELOC_IA64_GPREL64MSB
+ -- : BFD_RELOC_IA64_GPREL64LSB
+ -- : BFD_RELOC_IA64_LTOFF22
+ -- : BFD_RELOC_IA64_LTOFF64I
+ -- : BFD_RELOC_IA64_PLTOFF22
+ -- : BFD_RELOC_IA64_PLTOFF64I
+ -- : BFD_RELOC_IA64_PLTOFF64MSB
+ -- : BFD_RELOC_IA64_PLTOFF64LSB
+ -- : BFD_RELOC_IA64_FPTR64I
+ -- : BFD_RELOC_IA64_FPTR32MSB
+ -- : BFD_RELOC_IA64_FPTR32LSB
+ -- : BFD_RELOC_IA64_FPTR64MSB
+ -- : BFD_RELOC_IA64_FPTR64LSB
+ -- : BFD_RELOC_IA64_PCREL21B
+ -- : BFD_RELOC_IA64_PCREL21BI
+ -- : BFD_RELOC_IA64_PCREL21M
+ -- : BFD_RELOC_IA64_PCREL21F
+ -- : BFD_RELOC_IA64_PCREL22
+ -- : BFD_RELOC_IA64_PCREL60B
+ -- : BFD_RELOC_IA64_PCREL64I
+ -- : BFD_RELOC_IA64_PCREL32MSB
+ -- : BFD_RELOC_IA64_PCREL32LSB
+ -- : BFD_RELOC_IA64_PCREL64MSB
+ -- : BFD_RELOC_IA64_PCREL64LSB
+ -- : BFD_RELOC_IA64_LTOFF_FPTR22
+ -- : BFD_RELOC_IA64_LTOFF_FPTR64I
+ -- : BFD_RELOC_IA64_LTOFF_FPTR32MSB
+ -- : BFD_RELOC_IA64_LTOFF_FPTR32LSB
+ -- : BFD_RELOC_IA64_LTOFF_FPTR64MSB
+ -- : BFD_RELOC_IA64_LTOFF_FPTR64LSB
+ -- : BFD_RELOC_IA64_SEGREL32MSB
+ -- : BFD_RELOC_IA64_SEGREL32LSB
+ -- : BFD_RELOC_IA64_SEGREL64MSB
+ -- : BFD_RELOC_IA64_SEGREL64LSB
+ -- : BFD_RELOC_IA64_SECREL32MSB
+ -- : BFD_RELOC_IA64_SECREL32LSB
+ -- : BFD_RELOC_IA64_SECREL64MSB
+ -- : BFD_RELOC_IA64_SECREL64LSB
+ -- : BFD_RELOC_IA64_REL32MSB
+ -- : BFD_RELOC_IA64_REL32LSB
+ -- : BFD_RELOC_IA64_REL64MSB
+ -- : BFD_RELOC_IA64_REL64LSB
+ -- : BFD_RELOC_IA64_LTV32MSB
+ -- : BFD_RELOC_IA64_LTV32LSB
+ -- : BFD_RELOC_IA64_LTV64MSB
+ -- : BFD_RELOC_IA64_LTV64LSB
+ -- : BFD_RELOC_IA64_IPLTMSB
+ -- : BFD_RELOC_IA64_IPLTLSB
+ -- : BFD_RELOC_IA64_COPY
+ -- : BFD_RELOC_IA64_LTOFF22X
+ -- : BFD_RELOC_IA64_LDXMOV
+ -- : BFD_RELOC_IA64_TPREL14
+ -- : BFD_RELOC_IA64_TPREL22
+ -- : BFD_RELOC_IA64_TPREL64I
+ -- : BFD_RELOC_IA64_TPREL64MSB
+ -- : BFD_RELOC_IA64_TPREL64LSB
+ -- : BFD_RELOC_IA64_LTOFF_TPREL22
+ -- : BFD_RELOC_IA64_DTPMOD64MSB
+ -- : BFD_RELOC_IA64_DTPMOD64LSB
+ -- : BFD_RELOC_IA64_LTOFF_DTPMOD22
+ -- : BFD_RELOC_IA64_DTPREL14
+ -- : BFD_RELOC_IA64_DTPREL22
+ -- : BFD_RELOC_IA64_DTPREL64I
+ -- : BFD_RELOC_IA64_DTPREL32MSB
+ -- : BFD_RELOC_IA64_DTPREL32LSB
+ -- : BFD_RELOC_IA64_DTPREL64MSB
+ -- : BFD_RELOC_IA64_DTPREL64LSB
+ -- : BFD_RELOC_IA64_LTOFF_DTPREL22
+     Intel IA64 Relocations.
+
+ -- : BFD_RELOC_M68HC11_HI8
+     Motorola 68HC11 reloc.  This is the 8 bit high part of an absolute
+     address.
+
+ -- : BFD_RELOC_M68HC11_LO8
+     Motorola 68HC11 reloc.  This is the 8 bit low part of an absolute
+     address.
+
+ -- : BFD_RELOC_M68HC11_3B
+     Motorola 68HC11 reloc.  This is the 3 bit of a value.
+
+ -- : BFD_RELOC_M68HC11_RL_JUMP
+     Motorola 68HC11 reloc.  This reloc marks the beginning of a
+     jump/call instruction.  It is used for linker relaxation to
+     correctly identify beginning of instruction and change some
+     branches to use PC-relative addressing mode.
+
+ -- : BFD_RELOC_M68HC11_RL_GROUP
+     Motorola 68HC11 reloc.  This reloc marks a group of several
+     instructions that gcc generates and for which the linker
+     relaxation pass can modify and/or remove some of them.
+
+ -- : BFD_RELOC_M68HC11_LO16
+     Motorola 68HC11 reloc.  This is the 16-bit lower part of an
+     address.  It is used for 'call' instruction to specify the symbol
+     address without any special transformation (due to memory bank
+     window).
+
+ -- : BFD_RELOC_M68HC11_PAGE
+     Motorola 68HC11 reloc.  This is a 8-bit reloc that specifies the
+     page number of an address.  It is used by 'call' instruction to
+     specify the page number of the symbol.
+
+ -- : BFD_RELOC_M68HC11_24
+     Motorola 68HC11 reloc.  This is a 24-bit reloc that represents the
+     address with a 16-bit value and a 8-bit page number.  The symbol
+     address is transformed to follow the 16K memory bank of 68HC12
+     (seen as mapped in the window).
+
+ -- : BFD_RELOC_M68HC12_5B
+     Motorola 68HC12 reloc.  This is the 5 bits of a value.
+
+ -- : BFD_RELOC_XGATE_RL_JUMP
+     Freescale XGATE reloc.  This reloc marks the beginning of a
+     bra/jal instruction.
+
+ -- : BFD_RELOC_XGATE_RL_GROUP
+     Freescale XGATE reloc.  This reloc marks a group of several
+     instructions that gcc generates and for which the linker
+     relaxation pass can modify and/or remove some of them.
+
+ -- : BFD_RELOC_XGATE_LO16
+     Freescale XGATE reloc.  This is the 16-bit lower part of an
+     address.  It is used for the '16-bit' instructions.
+
+ -- : BFD_RELOC_XGATE_GPAGE
+     Freescale XGATE reloc.
+
+ -- : BFD_RELOC_XGATE_24
+     Freescale XGATE reloc.
+
+ -- : BFD_RELOC_XGATE_PCREL_9
+     Freescale XGATE reloc.  This is a 9-bit pc-relative reloc.
+
+ -- : BFD_RELOC_XGATE_PCREL_10
+     Freescale XGATE reloc.  This is a 10-bit pc-relative reloc.
+
+ -- : BFD_RELOC_XGATE_IMM8_LO
+     Freescale XGATE reloc.  This is the 16-bit lower part of an
+     address.  It is used for the '16-bit' instructions.
+
+ -- : BFD_RELOC_XGATE_IMM8_HI
+     Freescale XGATE reloc.  This is the 16-bit higher part of an
+     address.  It is used for the '16-bit' instructions.
+
+ -- : BFD_RELOC_XGATE_IMM3
+     Freescale XGATE reloc.  This is a 3-bit pc-relative reloc.
+
+ -- : BFD_RELOC_XGATE_IMM4
+     Freescale XGATE reloc.  This is a 4-bit pc-relative reloc.
+
+ -- : BFD_RELOC_XGATE_IMM5
+     Freescale XGATE reloc.  This is a 5-bit pc-relative reloc.
+
+ -- : BFD_RELOC_M68HC12_9B
+     Motorola 68HC12 reloc.  This is the 9 bits of a value.
+
+ -- : BFD_RELOC_M68HC12_16B
+     Motorola 68HC12 reloc.  This is the 16 bits of a value.
+
+ -- : BFD_RELOC_M68HC12_9_PCREL
+     Motorola 68HC12/XGATE reloc.  This is a PCREL9 branch.
+
+ -- : BFD_RELOC_M68HC12_10_PCREL
+     Motorola 68HC12/XGATE reloc.  This is a PCREL10 branch.
+
+ -- : BFD_RELOC_M68HC12_LO8XG
+     Motorola 68HC12/XGATE reloc.  This is the 8 bit low part of an
+     absolute address and immediately precedes a matching HI8XG part.
+
+ -- : BFD_RELOC_M68HC12_HI8XG
+     Motorola 68HC12/XGATE reloc.  This is the 8 bit high part of an
+     absolute address and immediately follows a matching LO8XG part.
+
+ -- : BFD_RELOC_16C_NUM08
+ -- : BFD_RELOC_16C_NUM08_C
+ -- : BFD_RELOC_16C_NUM16
+ -- : BFD_RELOC_16C_NUM16_C
+ -- : BFD_RELOC_16C_NUM32
+ -- : BFD_RELOC_16C_NUM32_C
+ -- : BFD_RELOC_16C_DISP04
+ -- : BFD_RELOC_16C_DISP04_C
+ -- : BFD_RELOC_16C_DISP08
+ -- : BFD_RELOC_16C_DISP08_C
+ -- : BFD_RELOC_16C_DISP16
+ -- : BFD_RELOC_16C_DISP16_C
+ -- : BFD_RELOC_16C_DISP24
+ -- : BFD_RELOC_16C_DISP24_C
+ -- : BFD_RELOC_16C_DISP24a
+ -- : BFD_RELOC_16C_DISP24a_C
+ -- : BFD_RELOC_16C_REG04
+ -- : BFD_RELOC_16C_REG04_C
+ -- : BFD_RELOC_16C_REG04a
+ -- : BFD_RELOC_16C_REG04a_C
+ -- : BFD_RELOC_16C_REG14
+ -- : BFD_RELOC_16C_REG14_C
+ -- : BFD_RELOC_16C_REG16
+ -- : BFD_RELOC_16C_REG16_C
+ -- : BFD_RELOC_16C_REG20
+ -- : BFD_RELOC_16C_REG20_C
+ -- : BFD_RELOC_16C_ABS20
+ -- : BFD_RELOC_16C_ABS20_C
+ -- : BFD_RELOC_16C_ABS24
+ -- : BFD_RELOC_16C_ABS24_C
+ -- : BFD_RELOC_16C_IMM04
+ -- : BFD_RELOC_16C_IMM04_C
+ -- : BFD_RELOC_16C_IMM16
+ -- : BFD_RELOC_16C_IMM16_C
+ -- : BFD_RELOC_16C_IMM20
+ -- : BFD_RELOC_16C_IMM20_C
+ -- : BFD_RELOC_16C_IMM24
+ -- : BFD_RELOC_16C_IMM24_C
+ -- : BFD_RELOC_16C_IMM32
+ -- : BFD_RELOC_16C_IMM32_C
+     NS CR16C Relocations.
+
+ -- : BFD_RELOC_CR16_NUM8
+ -- : BFD_RELOC_CR16_NUM16
+ -- : BFD_RELOC_CR16_NUM32
+ -- : BFD_RELOC_CR16_NUM32a
+ -- : BFD_RELOC_CR16_REGREL0
+ -- : BFD_RELOC_CR16_REGREL4
+ -- : BFD_RELOC_CR16_REGREL4a
+ -- : BFD_RELOC_CR16_REGREL14
+ -- : BFD_RELOC_CR16_REGREL14a
+ -- : BFD_RELOC_CR16_REGREL16
+ -- : BFD_RELOC_CR16_REGREL20
+ -- : BFD_RELOC_CR16_REGREL20a
+ -- : BFD_RELOC_CR16_ABS20
+ -- : BFD_RELOC_CR16_ABS24
+ -- : BFD_RELOC_CR16_IMM4
+ -- : BFD_RELOC_CR16_IMM8
+ -- : BFD_RELOC_CR16_IMM16
+ -- : BFD_RELOC_CR16_IMM20
+ -- : BFD_RELOC_CR16_IMM24
+ -- : BFD_RELOC_CR16_IMM32
+ -- : BFD_RELOC_CR16_IMM32a
+ -- : BFD_RELOC_CR16_DISP4
+ -- : BFD_RELOC_CR16_DISP8
+ -- : BFD_RELOC_CR16_DISP16
+ -- : BFD_RELOC_CR16_DISP20
+ -- : BFD_RELOC_CR16_DISP24
+ -- : BFD_RELOC_CR16_DISP24a
+ -- : BFD_RELOC_CR16_SWITCH8
+ -- : BFD_RELOC_CR16_SWITCH16
+ -- : BFD_RELOC_CR16_SWITCH32
+ -- : BFD_RELOC_CR16_GOT_REGREL20
+ -- : BFD_RELOC_CR16_GOTC_REGREL20
+ -- : BFD_RELOC_CR16_GLOB_DAT
+     NS CR16 Relocations.
+
+ -- : BFD_RELOC_CRX_REL4
+ -- : BFD_RELOC_CRX_REL8
+ -- : BFD_RELOC_CRX_REL8_CMP
+ -- : BFD_RELOC_CRX_REL16
+ -- : BFD_RELOC_CRX_REL24
+ -- : BFD_RELOC_CRX_REL32
+ -- : BFD_RELOC_CRX_REGREL12
+ -- : BFD_RELOC_CRX_REGREL22
+ -- : BFD_RELOC_CRX_REGREL28
+ -- : BFD_RELOC_CRX_REGREL32
+ -- : BFD_RELOC_CRX_ABS16
+ -- : BFD_RELOC_CRX_ABS32
+ -- : BFD_RELOC_CRX_NUM8
+ -- : BFD_RELOC_CRX_NUM16
+ -- : BFD_RELOC_CRX_NUM32
+ -- : BFD_RELOC_CRX_IMM16
+ -- : BFD_RELOC_CRX_IMM32
+ -- : BFD_RELOC_CRX_SWITCH8
+ -- : BFD_RELOC_CRX_SWITCH16
+ -- : BFD_RELOC_CRX_SWITCH32
+     NS CRX Relocations.
+
+ -- : BFD_RELOC_CRIS_BDISP8
+ -- : BFD_RELOC_CRIS_UNSIGNED_5
+ -- : BFD_RELOC_CRIS_SIGNED_6
+ -- : BFD_RELOC_CRIS_UNSIGNED_6
+ -- : BFD_RELOC_CRIS_SIGNED_8
+ -- : BFD_RELOC_CRIS_UNSIGNED_8
+ -- : BFD_RELOC_CRIS_SIGNED_16
+ -- : BFD_RELOC_CRIS_UNSIGNED_16
+ -- : BFD_RELOC_CRIS_LAPCQ_OFFSET
+ -- : BFD_RELOC_CRIS_UNSIGNED_4
+     These relocs are only used within the CRIS assembler.  They are not
+     (at present) written to any object files.
+
+ -- : BFD_RELOC_CRIS_COPY
+ -- : BFD_RELOC_CRIS_GLOB_DAT
+ -- : BFD_RELOC_CRIS_JUMP_SLOT
+ -- : BFD_RELOC_CRIS_RELATIVE
+     Relocs used in ELF shared libraries for CRIS.
+
+ -- : BFD_RELOC_CRIS_32_GOT
+     32-bit offset to symbol-entry within GOT.
+
+ -- : BFD_RELOC_CRIS_16_GOT
+     16-bit offset to symbol-entry within GOT.
+
+ -- : BFD_RELOC_CRIS_32_GOTPLT
+     32-bit offset to symbol-entry within GOT, with PLT handling.
+
+ -- : BFD_RELOC_CRIS_16_GOTPLT
+     16-bit offset to symbol-entry within GOT, with PLT handling.
+
+ -- : BFD_RELOC_CRIS_32_GOTREL
+     32-bit offset to symbol, relative to GOT.
+
+ -- : BFD_RELOC_CRIS_32_PLT_GOTREL
+     32-bit offset to symbol with PLT entry, relative to GOT.
+
+ -- : BFD_RELOC_CRIS_32_PLT_PCREL
+     32-bit offset to symbol with PLT entry, relative to this
+     relocation.
+
+ -- : BFD_RELOC_CRIS_32_GOT_GD
+ -- : BFD_RELOC_CRIS_16_GOT_GD
+ -- : BFD_RELOC_CRIS_32_GD
+ -- : BFD_RELOC_CRIS_DTP
+ -- : BFD_RELOC_CRIS_32_DTPREL
+ -- : BFD_RELOC_CRIS_16_DTPREL
+ -- : BFD_RELOC_CRIS_32_GOT_TPREL
+ -- : BFD_RELOC_CRIS_16_GOT_TPREL
+ -- : BFD_RELOC_CRIS_32_TPREL
+ -- : BFD_RELOC_CRIS_16_TPREL
+ -- : BFD_RELOC_CRIS_DTPMOD
+ -- : BFD_RELOC_CRIS_32_IE
+     Relocs used in TLS code for CRIS.
+
+ -- : BFD_RELOC_860_COPY
+ -- : BFD_RELOC_860_GLOB_DAT
+ -- : BFD_RELOC_860_JUMP_SLOT
+ -- : BFD_RELOC_860_RELATIVE
+ -- : BFD_RELOC_860_PC26
+ -- : BFD_RELOC_860_PLT26
+ -- : BFD_RELOC_860_PC16
+ -- : BFD_RELOC_860_LOW0
+ -- : BFD_RELOC_860_SPLIT0
+ -- : BFD_RELOC_860_LOW1
+ -- : BFD_RELOC_860_SPLIT1
+ -- : BFD_RELOC_860_LOW2
+ -- : BFD_RELOC_860_SPLIT2
+ -- : BFD_RELOC_860_LOW3
+ -- : BFD_RELOC_860_LOGOT0
+ -- : BFD_RELOC_860_SPGOT0
+ -- : BFD_RELOC_860_LOGOT1
+ -- : BFD_RELOC_860_SPGOT1
+ -- : BFD_RELOC_860_LOGOTOFF0
+ -- : BFD_RELOC_860_SPGOTOFF0
+ -- : BFD_RELOC_860_LOGOTOFF1
+ -- : BFD_RELOC_860_SPGOTOFF1
+ -- : BFD_RELOC_860_LOGOTOFF2
+ -- : BFD_RELOC_860_LOGOTOFF3
+ -- : BFD_RELOC_860_LOPC
+ -- : BFD_RELOC_860_HIGHADJ
+ -- : BFD_RELOC_860_HAGOT
+ -- : BFD_RELOC_860_HAGOTOFF
+ -- : BFD_RELOC_860_HAPC
+ -- : BFD_RELOC_860_HIGH
+ -- : BFD_RELOC_860_HIGOT
+ -- : BFD_RELOC_860_HIGOTOFF
+     Intel i860 Relocations.
+
+ -- : BFD_RELOC_OPENRISC_ABS_26
+ -- : BFD_RELOC_OPENRISC_REL_26
+     OpenRISC Relocations.
+
+ -- : BFD_RELOC_H8_DIR16A8
+ -- : BFD_RELOC_H8_DIR16R8
+ -- : BFD_RELOC_H8_DIR24A8
+ -- : BFD_RELOC_H8_DIR24R8
+ -- : BFD_RELOC_H8_DIR32A16
+     H8 elf Relocations.
+
+ -- : BFD_RELOC_XSTORMY16_REL_12
+ -- : BFD_RELOC_XSTORMY16_12
+ -- : BFD_RELOC_XSTORMY16_24
+ -- : BFD_RELOC_XSTORMY16_FPTR16
+     Sony Xstormy16 Relocations.
+
+ -- : BFD_RELOC_RELC
+     Self-describing complex relocations.
+
+ -- : BFD_RELOC_XC16X_PAG
+ -- : BFD_RELOC_XC16X_POF
+ -- : BFD_RELOC_XC16X_SEG
+ -- : BFD_RELOC_XC16X_SOF
+     Infineon Relocations.
+
+ -- : BFD_RELOC_VAX_GLOB_DAT
+ -- : BFD_RELOC_VAX_JMP_SLOT
+ -- : BFD_RELOC_VAX_RELATIVE
+     Relocations used by VAX ELF.
+
+ -- : BFD_RELOC_MT_PC16
+     Morpho MT - 16 bit immediate relocation.
+
+ -- : BFD_RELOC_MT_HI16
+     Morpho MT - Hi 16 bits of an address.
+
+ -- : BFD_RELOC_MT_LO16
+     Morpho MT - Low 16 bits of an address.
+
+ -- : BFD_RELOC_MT_GNU_VTINHERIT
+     Morpho MT - Used to tell the linker which vtable entries are used.
+
+ -- : BFD_RELOC_MT_GNU_VTENTRY
+     Morpho MT - Used to tell the linker which vtable entries are used.
+
+ -- : BFD_RELOC_MT_PCINSN8
+     Morpho MT - 8 bit immediate relocation.
+
+ -- : BFD_RELOC_MSP430_10_PCREL
+ -- : BFD_RELOC_MSP430_16_PCREL
+ -- : BFD_RELOC_MSP430_16
+ -- : BFD_RELOC_MSP430_16_PCREL_BYTE
+ -- : BFD_RELOC_MSP430_16_BYTE
+ -- : BFD_RELOC_MSP430_2X_PCREL
+ -- : BFD_RELOC_MSP430_RL_PCREL
+     msp430 specific relocation codes
+
+ -- : BFD_RELOC_IQ2000_OFFSET_16
+ -- : BFD_RELOC_IQ2000_OFFSET_21
+ -- : BFD_RELOC_IQ2000_UHI16
+     IQ2000 Relocations.
+
+ -- : BFD_RELOC_XTENSA_RTLD
+     Special Xtensa relocation used only by PLT entries in ELF shared
+     objects to indicate that the runtime linker should set the value
+     to one of its own internal functions or data structures.
+
+ -- : BFD_RELOC_XTENSA_GLOB_DAT
+ -- : BFD_RELOC_XTENSA_JMP_SLOT
+ -- : BFD_RELOC_XTENSA_RELATIVE
+     Xtensa relocations for ELF shared objects.
+
+ -- : BFD_RELOC_XTENSA_PLT
+     Xtensa relocation used in ELF object files for symbols that may
+     require PLT entries.  Otherwise, this is just a generic 32-bit
+     relocation.
+
+ -- : BFD_RELOC_XTENSA_DIFF8
+ -- : BFD_RELOC_XTENSA_DIFF16
+ -- : BFD_RELOC_XTENSA_DIFF32
+     Xtensa relocations to mark the difference of two local symbols.
+     These are only needed to support linker relaxation and can be
+     ignored when not relaxing.  The field is set to the value of the
+     difference assuming no relaxation.  The relocation encodes the
+     position of the first symbol so the linker can determine whether
+     to adjust the field value.
+
+ -- : BFD_RELOC_XTENSA_SLOT0_OP
+ -- : BFD_RELOC_XTENSA_SLOT1_OP
+ -- : BFD_RELOC_XTENSA_SLOT2_OP
+ -- : BFD_RELOC_XTENSA_SLOT3_OP
+ -- : BFD_RELOC_XTENSA_SLOT4_OP
+ -- : BFD_RELOC_XTENSA_SLOT5_OP
+ -- : BFD_RELOC_XTENSA_SLOT6_OP
+ -- : BFD_RELOC_XTENSA_SLOT7_OP
+ -- : BFD_RELOC_XTENSA_SLOT8_OP
+ -- : BFD_RELOC_XTENSA_SLOT9_OP
+ -- : BFD_RELOC_XTENSA_SLOT10_OP
+ -- : BFD_RELOC_XTENSA_SLOT11_OP
+ -- : BFD_RELOC_XTENSA_SLOT12_OP
+ -- : BFD_RELOC_XTENSA_SLOT13_OP
+ -- : BFD_RELOC_XTENSA_SLOT14_OP
+     Generic Xtensa relocations for instruction operands.  Only the slot
+     number is encoded in the relocation.  The relocation applies to the
+     last PC-relative immediate operand, or if there are no PC-relative
+     immediates, to the last immediate operand.
+
+ -- : BFD_RELOC_XTENSA_SLOT0_ALT
+ -- : BFD_RELOC_XTENSA_SLOT1_ALT
+ -- : BFD_RELOC_XTENSA_SLOT2_ALT
+ -- : BFD_RELOC_XTENSA_SLOT3_ALT
+ -- : BFD_RELOC_XTENSA_SLOT4_ALT
+ -- : BFD_RELOC_XTENSA_SLOT5_ALT
+ -- : BFD_RELOC_XTENSA_SLOT6_ALT
+ -- : BFD_RELOC_XTENSA_SLOT7_ALT
+ -- : BFD_RELOC_XTENSA_SLOT8_ALT
+ -- : BFD_RELOC_XTENSA_SLOT9_ALT
+ -- : BFD_RELOC_XTENSA_SLOT10_ALT
+ -- : BFD_RELOC_XTENSA_SLOT11_ALT
+ -- : BFD_RELOC_XTENSA_SLOT12_ALT
+ -- : BFD_RELOC_XTENSA_SLOT13_ALT
+ -- : BFD_RELOC_XTENSA_SLOT14_ALT
+     Alternate Xtensa relocations.  Only the slot is encoded in the
+     relocation.  The meaning of these relocations is opcode-specific.
+
+ -- : BFD_RELOC_XTENSA_OP0
+ -- : BFD_RELOC_XTENSA_OP1
+ -- : BFD_RELOC_XTENSA_OP2
+     Xtensa relocations for backward compatibility.  These have all been
+     replaced by BFD_RELOC_XTENSA_SLOT0_OP.
+
+ -- : BFD_RELOC_XTENSA_ASM_EXPAND
+     Xtensa relocation to mark that the assembler expanded the
+     instructions from an original target.  The expansion size is
+     encoded in the reloc size.
+
+ -- : BFD_RELOC_XTENSA_ASM_SIMPLIFY
+     Xtensa relocation to mark that the linker should simplify
+     assembler-expanded instructions.  This is commonly used internally
+     by the linker after analysis of a BFD_RELOC_XTENSA_ASM_EXPAND.
+
+ -- : BFD_RELOC_XTENSA_TLSDESC_FN
+ -- : BFD_RELOC_XTENSA_TLSDESC_ARG
+ -- : BFD_RELOC_XTENSA_TLS_DTPOFF
+ -- : BFD_RELOC_XTENSA_TLS_TPOFF
+ -- : BFD_RELOC_XTENSA_TLS_FUNC
+ -- : BFD_RELOC_XTENSA_TLS_ARG
+ -- : BFD_RELOC_XTENSA_TLS_CALL
+     Xtensa TLS relocations.
+
+ -- : BFD_RELOC_Z80_DISP8
+     8 bit signed offset in (ix+d) or (iy+d).
+
+ -- : BFD_RELOC_Z8K_DISP7
+     DJNZ offset.
+
+ -- : BFD_RELOC_Z8K_CALLR
+     CALR offset.
+
+ -- : BFD_RELOC_Z8K_IMM4L
+     4 bit value.
+
+ -- : BFD_RELOC_LM32_CALL
+ -- : BFD_RELOC_LM32_BRANCH
+ -- : BFD_RELOC_LM32_16_GOT
+ -- : BFD_RELOC_LM32_GOTOFF_HI16
+ -- : BFD_RELOC_LM32_GOTOFF_LO16
+ -- : BFD_RELOC_LM32_COPY
+ -- : BFD_RELOC_LM32_GLOB_DAT
+ -- : BFD_RELOC_LM32_JMP_SLOT
+ -- : BFD_RELOC_LM32_RELATIVE
+     Lattice Mico32 relocations.
+
+ -- : BFD_RELOC_MACH_O_SECTDIFF
+     Difference between two section addreses.  Must be followed by a
+     BFD_RELOC_MACH_O_PAIR.
+
+ -- : BFD_RELOC_MACH_O_LOCAL_SECTDIFF
+     Like BFD_RELOC_MACH_O_SECTDIFF but with a local symbol.
+
+ -- : BFD_RELOC_MACH_O_PAIR
+     Pair of relocation.  Contains the first symbol.
+
+ -- : BFD_RELOC_MACH_O_X86_64_BRANCH32
+ -- : BFD_RELOC_MACH_O_X86_64_BRANCH8
+     PCREL relocations.  They are marked as branch to create PLT entry
+     if required.
+
+ -- : BFD_RELOC_MACH_O_X86_64_GOT
+     Used when referencing a GOT entry.
+
+ -- : BFD_RELOC_MACH_O_X86_64_GOT_LOAD
+     Used when loading a GOT entry with movq.  It is specially marked
+     so that the linker could optimize the movq to a leaq if possible.
+
+ -- : BFD_RELOC_MACH_O_X86_64_SUBTRACTOR32
+     Symbol will be substracted.  Must be followed by a BFD_RELOC_64.
+
+ -- : BFD_RELOC_MACH_O_X86_64_SUBTRACTOR64
+     Symbol will be substracted.  Must be followed by a BFD_RELOC_64.
+
+ -- : BFD_RELOC_MACH_O_X86_64_PCREL32_1
+     Same as BFD_RELOC_32_PCREL but with an implicit -1 addend.
+
+ -- : BFD_RELOC_MACH_O_X86_64_PCREL32_2
+     Same as BFD_RELOC_32_PCREL but with an implicit -2 addend.
+
+ -- : BFD_RELOC_MACH_O_X86_64_PCREL32_4
+     Same as BFD_RELOC_32_PCREL but with an implicit -4 addend.
+
+ -- : BFD_RELOC_MICROBLAZE_32_LO
+     This is a 32 bit reloc for the microblaze that stores the low 16
+     bits of a value
+
+ -- : BFD_RELOC_MICROBLAZE_32_LO_PCREL
+     This is a 32 bit pc-relative reloc for the microblaze that stores
+     the low 16 bits of a value
+
+ -- : BFD_RELOC_MICROBLAZE_32_ROSDA
+     This is a 32 bit reloc for the microblaze that stores a value
+     relative to the read-only small data area anchor
+
+ -- : BFD_RELOC_MICROBLAZE_32_RWSDA
+     This is a 32 bit reloc for the microblaze that stores a value
+     relative to the read-write small data area anchor
+
+ -- : BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM
+     This is a 32 bit reloc for the microblaze to handle expressions of
+     the form "Symbol Op Symbol"
+
+ -- : BFD_RELOC_MICROBLAZE_64_NONE
+     This is a 64 bit reloc that stores the 32 bit pc relative value in
+     two words (with an imm instruction).  No relocation is done here -
+     only used for relaxing
+
+ -- : BFD_RELOC_MICROBLAZE_64_GOTPC
+     This is a 64 bit reloc that stores the 32 bit pc relative value in
+     two words (with an imm instruction).  The relocation is
+     PC-relative GOT offset
+
+ -- : BFD_RELOC_MICROBLAZE_64_GOT
+     This is a 64 bit reloc that stores the 32 bit pc relative value in
+     two words (with an imm instruction).  The relocation is GOT offset
+
+ -- : BFD_RELOC_MICROBLAZE_64_PLT
+     This is a 64 bit reloc that stores the 32 bit pc relative value in
+     two words (with an imm instruction).  The relocation is
+     PC-relative offset into PLT
+
+ -- : BFD_RELOC_MICROBLAZE_64_GOTOFF
+     This is a 64 bit reloc that stores the 32 bit GOT relative value
+     in two words (with an imm instruction).  The relocation is
+     relative offset from _GLOBAL_OFFSET_TABLE_
+
+ -- : BFD_RELOC_MICROBLAZE_32_GOTOFF
+     This is a 32 bit reloc that stores the 32 bit GOT relative value
+     in a word.  The relocation is relative offset from
+
+ -- : BFD_RELOC_MICROBLAZE_COPY
+     This is used to tell the dynamic linker to copy the value out of
+     the dynamic object into the runtime process image.
+
+ -- : BFD_RELOC_TILEPRO_COPY
+ -- : BFD_RELOC_TILEPRO_GLOB_DAT
+ -- : BFD_RELOC_TILEPRO_JMP_SLOT
+ -- : BFD_RELOC_TILEPRO_RELATIVE
+ -- : BFD_RELOC_TILEPRO_BROFF_X1
+ -- : BFD_RELOC_TILEPRO_JOFFLONG_X1
+ -- : BFD_RELOC_TILEPRO_JOFFLONG_X1_PLT
+ -- : BFD_RELOC_TILEPRO_IMM8_X0
+ -- : BFD_RELOC_TILEPRO_IMM8_Y0
+ -- : BFD_RELOC_TILEPRO_IMM8_X1
+ -- : BFD_RELOC_TILEPRO_IMM8_Y1
+ -- : BFD_RELOC_TILEPRO_DEST_IMM8_X1
+ -- : BFD_RELOC_TILEPRO_MT_IMM15_X1
+ -- : BFD_RELOC_TILEPRO_MF_IMM15_X1
+ -- : BFD_RELOC_TILEPRO_IMM16_X0
+ -- : BFD_RELOC_TILEPRO_IMM16_X1
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_LO
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_LO
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_HI
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_HI
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_HA
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_HA
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_PCREL
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_PCREL
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_LO_PCREL
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_LO_PCREL
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_HI_PCREL
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_HI_PCREL
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_HA_PCREL
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_HA_PCREL
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_GOT
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_GOT
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_GOT_LO
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_GOT_LO
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_GOT_HI
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_GOT_HI
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_GOT_HA
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_GOT_HA
+ -- : BFD_RELOC_TILEPRO_MMSTART_X0
+ -- : BFD_RELOC_TILEPRO_MMEND_X0
+ -- : BFD_RELOC_TILEPRO_MMSTART_X1
+ -- : BFD_RELOC_TILEPRO_MMEND_X1
+ -- : BFD_RELOC_TILEPRO_SHAMT_X0
+ -- : BFD_RELOC_TILEPRO_SHAMT_X1
+ -- : BFD_RELOC_TILEPRO_SHAMT_Y0
+ -- : BFD_RELOC_TILEPRO_SHAMT_Y1
+ -- : BFD_RELOC_TILEPRO_TLS_GD_CALL
+ -- : BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD
+ -- : BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD
+ -- : BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD
+ -- : BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD
+ -- : BFD_RELOC_TILEPRO_TLS_IE_LOAD
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_LO
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HI
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HI
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HA
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HA
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_LO
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_LO
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HI
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HI
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HA
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HA
+ -- : BFD_RELOC_TILEPRO_TLS_DTPMOD32
+ -- : BFD_RELOC_TILEPRO_TLS_DTPOFF32
+ -- : BFD_RELOC_TILEPRO_TLS_TPOFF32
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI
+ -- : BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA
+ -- : BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA
+     Tilera TILEPro Relocations.
+
+ -- : BFD_RELOC_TILEGX_HW0
+ -- : BFD_RELOC_TILEGX_HW1
+ -- : BFD_RELOC_TILEGX_HW2
+ -- : BFD_RELOC_TILEGX_HW3
+ -- : BFD_RELOC_TILEGX_HW0_LAST
+ -- : BFD_RELOC_TILEGX_HW1_LAST
+ -- : BFD_RELOC_TILEGX_HW2_LAST
+ -- : BFD_RELOC_TILEGX_COPY
+ -- : BFD_RELOC_TILEGX_GLOB_DAT
+ -- : BFD_RELOC_TILEGX_JMP_SLOT
+ -- : BFD_RELOC_TILEGX_RELATIVE
+ -- : BFD_RELOC_TILEGX_BROFF_X1
+ -- : BFD_RELOC_TILEGX_JUMPOFF_X1
+ -- : BFD_RELOC_TILEGX_JUMPOFF_X1_PLT
+ -- : BFD_RELOC_TILEGX_IMM8_X0
+ -- : BFD_RELOC_TILEGX_IMM8_Y0
+ -- : BFD_RELOC_TILEGX_IMM8_X1
+ -- : BFD_RELOC_TILEGX_IMM8_Y1
+ -- : BFD_RELOC_TILEGX_DEST_IMM8_X1
+ -- : BFD_RELOC_TILEGX_MT_IMM14_X1
+ -- : BFD_RELOC_TILEGX_MF_IMM14_X1
+ -- : BFD_RELOC_TILEGX_MMSTART_X0
+ -- : BFD_RELOC_TILEGX_MMEND_X0
+ -- : BFD_RELOC_TILEGX_SHAMT_X0
+ -- : BFD_RELOC_TILEGX_SHAMT_X1
+ -- : BFD_RELOC_TILEGX_SHAMT_Y0
+ -- : BFD_RELOC_TILEGX_SHAMT_Y1
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW0
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW0
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW1
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW1
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW2
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW2
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW3
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW3
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_PCREL
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_PCREL
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW1_PCREL
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW1_PCREL
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW2_PCREL
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW2_PCREL
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW3_PCREL
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW3_PCREL
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PCREL
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PCREL
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PCREL
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PCREL
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PCREL
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE
+ -- : BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE
+ -- : BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE
+ -- : BFD_RELOC_TILEGX_TLS_DTPMOD64
+ -- : BFD_RELOC_TILEGX_TLS_DTPOFF64
+ -- : BFD_RELOC_TILEGX_TLS_TPOFF64
+ -- : BFD_RELOC_TILEGX_TLS_DTPMOD32
+ -- : BFD_RELOC_TILEGX_TLS_DTPOFF32
+ -- : BFD_RELOC_TILEGX_TLS_TPOFF32
+ -- : BFD_RELOC_TILEGX_TLS_GD_CALL
+ -- : BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD
+ -- : BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD
+ -- : BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD
+ -- : BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD
+ -- : BFD_RELOC_TILEGX_TLS_IE_LOAD
+ -- : BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD
+ -- : BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD
+ -- : BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD
+ -- : BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD
+     Tilera TILE-Gx Relocations.
+
+ -- : BFD_RELOC_EPIPHANY_SIMM8
+     Adapteva EPIPHANY - 8 bit signed pc-relative displacement
+
+ -- : BFD_RELOC_EPIPHANY_SIMM24
+     Adapteva EPIPHANY - 24 bit signed pc-relative displacement
+
+ -- : BFD_RELOC_EPIPHANY_HIGH
+     Adapteva EPIPHANY - 16 most-significant bits of absolute address
+
+ -- : BFD_RELOC_EPIPHANY_LOW
+     Adapteva EPIPHANY - 16 least-significant bits of absolute address
+
+ -- : BFD_RELOC_EPIPHANY_SIMM11
+     Adapteva EPIPHANY - 11 bit signed number - add/sub immediate
+
+ -- : BFD_RELOC_EPIPHANY_IMM11
+     Adapteva EPIPHANY - 11 bit sign-magnitude number (ld/st
+     displacement)
+
+ -- : BFD_RELOC_EPIPHANY_IMM8
+     Adapteva EPIPHANY - 8 bit immediate for 16 bit mov instruction.
+
+
+     typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
+   
+2.10.2.2 `bfd_reloc_type_lookup'
+................................
+
+*Synopsis*
+     reloc_howto_type *bfd_reloc_type_lookup
+        (bfd *abfd, bfd_reloc_code_real_type code);
+     reloc_howto_type *bfd_reloc_name_lookup
+        (bfd *abfd, const char *reloc_name);
+   *Description*
+Return a pointer to a howto structure which, when invoked, will perform
+the relocation CODE on data from the architecture noted.
+
+2.10.2.3 `bfd_default_reloc_type_lookup'
+........................................
+
+*Synopsis*
+     reloc_howto_type *bfd_default_reloc_type_lookup
+        (bfd *abfd, bfd_reloc_code_real_type  code);
+   *Description*
+Provides a default relocation lookup routine for any architecture.
+
+2.10.2.4 `bfd_get_reloc_code_name'
+..................................
+
+*Synopsis*
+     const char *bfd_get_reloc_code_name (bfd_reloc_code_real_type code);
+   *Description*
+Provides a printable name for the supplied relocation code.  Useful
+mainly for printing error messages.
+
+2.10.2.5 `bfd_generic_relax_section'
+....................................
+
+*Synopsis*
+     bfd_boolean bfd_generic_relax_section
+        (bfd *abfd,
+         asection *section,
+         struct bfd_link_info *,
+         bfd_boolean *);
+   *Description*
+Provides default handling for relaxing for back ends which don't do
+relaxing.
+
+2.10.2.6 `bfd_generic_gc_sections'
+..................................
+
+*Synopsis*
+     bfd_boolean bfd_generic_gc_sections
+        (bfd *, struct bfd_link_info *);
+   *Description*
+Provides default handling for relaxing for back ends which don't do
+section gc - i.e., does nothing.
+
+2.10.2.7 `bfd_generic_lookup_section_flags'
+...........................................
+
+*Synopsis*
+     bfd_boolean bfd_generic_lookup_section_flags
+        (struct bfd_link_info *, struct flag_info *, asection *);
+   *Description*
+Provides default handling for section flags lookup - i.e., does nothing.
+Returns FALSE if the section should be omitted, otherwise TRUE.
+
+2.10.2.8 `bfd_generic_merge_sections'
+.....................................
+
+*Synopsis*
+     bfd_boolean bfd_generic_merge_sections
+        (bfd *, struct bfd_link_info *);
+   *Description*
+Provides default handling for SEC_MERGE section merging for back ends
+which don't have SEC_MERGE support - i.e., does nothing.
+
+2.10.2.9 `bfd_generic_get_relocated_section_contents'
+.....................................................
+
+*Synopsis*
+     bfd_byte *bfd_generic_get_relocated_section_contents
+        (bfd *abfd,
+         struct bfd_link_info *link_info,
+         struct bfd_link_order *link_order,
+         bfd_byte *data,
+         bfd_boolean relocatable,
+         asymbol **symbols);
+   *Description*
+Provides default handling of relocation effort for back ends which
+can't be bothered to do it efficiently.
+
+
+File: bfd.info,  Node: Core Files,  Next: Targets,  Prev: Relocations,  Up: BFD front end
+
+2.11 Core files
+===============
+
+2.11.1 Core file functions
+--------------------------
+
+*Description*
+These are functions pertaining to core files.
+
+2.11.1.1 `bfd_core_file_failing_command'
+........................................
+
+*Synopsis*
+     const char *bfd_core_file_failing_command (bfd *abfd);
+   *Description*
+Return a read-only string explaining which program was running when it
+failed and produced the core file ABFD.
+
+2.11.1.2 `bfd_core_file_failing_signal'
+.......................................
+
+*Synopsis*
+     int bfd_core_file_failing_signal (bfd *abfd);
+   *Description*
+Returns the signal number which caused the core dump which generated
+the file the BFD ABFD is attached to.
+
+2.11.1.3 `bfd_core_file_pid'
+............................
+
+*Synopsis*
+     int bfd_core_file_pid (bfd *abfd);
+   *Description*
+Returns the PID of the process the core dump the BFD ABFD is attached
+to was generated from.
+
+2.11.1.4 `core_file_matches_executable_p'
+.........................................
+
+*Synopsis*
+     bfd_boolean core_file_matches_executable_p
+        (bfd *core_bfd, bfd *exec_bfd);
+   *Description*
+Return `TRUE' if the core file attached to CORE_BFD was generated by a
+run of the executable file attached to EXEC_BFD, `FALSE' otherwise.
+
+2.11.1.5 `generic_core_file_matches_executable_p'
+.................................................
+
+*Synopsis*
+     bfd_boolean generic_core_file_matches_executable_p
+        (bfd *core_bfd, bfd *exec_bfd);
+   *Description*
+Return TRUE if the core file attached to CORE_BFD was generated by a
+run of the executable file attached to EXEC_BFD.  The match is based on
+executable basenames only.
+
+   Note: When not able to determine the core file failing command or
+the executable name, we still return TRUE even though we're not sure
+that core file and executable match.  This is to avoid generating a
+false warning in situations where we really don't know whether they
+match or not.
+
+
+File: bfd.info,  Node: Targets,  Next: Architectures,  Prev: Core Files,  Up: BFD front end
+
+2.12 Targets
+============
+
+*Description*
+Each port of BFD to a different machine requires the creation of a
+target back end. All the back end provides to the root part of BFD is a
+structure containing pointers to functions which perform certain low
+level operations on files. BFD translates the applications's requests
+through a pointer into calls to the back end routines.
+
+   When a file is opened with `bfd_openr', its format and target are
+unknown. BFD uses various mechanisms to determine how to interpret the
+file. The operations performed are:
+
+   * Create a BFD by calling the internal routine `_bfd_new_bfd', then
+     call `bfd_find_target' with the target string supplied to
+     `bfd_openr' and the new BFD pointer.
+
+   * If a null target string was provided to `bfd_find_target', look up
+     the environment variable `GNUTARGET' and use that as the target
+     string.
+
+   * If the target string is still `NULL', or the target string is
+     `default', then use the first item in the target vector as the
+     target type, and set `target_defaulted' in the BFD to cause
+     `bfd_check_format' to loop through all the targets.  *Note
+     bfd_target::.  *Note Formats::.
+
+   * Otherwise, inspect the elements in the target vector one by one,
+     until a match on target name is found. When found, use it.
+
+   * Otherwise return the error `bfd_error_invalid_target' to
+     `bfd_openr'.
+
+   * `bfd_openr' attempts to open the file using `bfd_open_file', and
+     returns the BFD.
+   Once the BFD has been opened and the target selected, the file
+format may be determined. This is done by calling `bfd_check_format' on
+the BFD with a suggested format.  If `target_defaulted' has been set,
+each possible target type is tried to see if it recognizes the
+specified format.  `bfd_check_format' returns `TRUE' when the caller
+guesses right.
+
+* Menu:
+
+* bfd_target::
+
+
+File: bfd.info,  Node: bfd_target,  Prev: Targets,  Up: Targets
+
+2.12.1 bfd_target
+-----------------
+
+*Description*
+This structure contains everything that BFD knows about a target. It
+includes things like its byte order, name, and which routines to call
+to do various operations.
+
+   Every BFD points to a target structure with its `xvec' member.
+
+   The macros below are used to dispatch to functions through the
+`bfd_target' vector. They are used in a number of macros further down
+in `bfd.h', and are also used when calling various routines by hand
+inside the BFD implementation.  The ARGLIST argument must be
+parenthesized; it contains all the arguments to the called function.
+
+   They make the documentation (more) unpleasant to read, so if someone
+wants to fix this and not break the above, please do.
+     #define BFD_SEND(bfd, message, arglist) \
+       ((*((bfd)->xvec->message)) arglist)
+
+     #ifdef DEBUG_BFD_SEND
+     #undef BFD_SEND
+     #define BFD_SEND(bfd, message, arglist) \
+       (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \
+         ((*((bfd)->xvec->message)) arglist) : \
+         (bfd_assert (__FILE__,__LINE__), NULL))
+     #endif
+   For operations which index on the BFD format:
+     #define BFD_SEND_FMT(bfd, message, arglist) \
+       (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist)
+
+     #ifdef DEBUG_BFD_SEND
+     #undef BFD_SEND_FMT
+     #define BFD_SEND_FMT(bfd, message, arglist) \
+       (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \
+        (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) : \
+        (bfd_assert (__FILE__,__LINE__), NULL))
+     #endif
+   This is the structure which defines the type of BFD this is.  The
+`xvec' member of the struct `bfd' itself points here.  Each module that
+implements access to a different target under BFD, defines one of these.
+
+   FIXME, these names should be rationalised with the names of the
+entry points which call them. Too bad we can't have one macro to define
+them both!
+     enum bfd_flavour
+     {
+       bfd_target_unknown_flavour,
+       bfd_target_aout_flavour,
+       bfd_target_coff_flavour,
+       bfd_target_ecoff_flavour,
+       bfd_target_xcoff_flavour,
+       bfd_target_elf_flavour,
+       bfd_target_ieee_flavour,
+       bfd_target_nlm_flavour,
+       bfd_target_oasys_flavour,
+       bfd_target_tekhex_flavour,
+       bfd_target_srec_flavour,
+       bfd_target_verilog_flavour,
+       bfd_target_ihex_flavour,
+       bfd_target_som_flavour,
+       bfd_target_os9k_flavour,
+       bfd_target_versados_flavour,
+       bfd_target_msdos_flavour,
+       bfd_target_ovax_flavour,
+       bfd_target_evax_flavour,
+       bfd_target_mmo_flavour,
+       bfd_target_mach_o_flavour,
+       bfd_target_pef_flavour,
+       bfd_target_pef_xlib_flavour,
+       bfd_target_sym_flavour
+     };
+
+     enum bfd_endian { BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN };
+
+     /* Forward declaration.  */
+     typedef struct bfd_link_info _bfd_link_info;
+
+     /* Forward declaration.  */
+     typedef struct flag_info flag_info;
+
+     typedef struct bfd_target
+     {
+       /* Identifies the kind of target, e.g., SunOS4, Ultrix, etc.  */
+       char *name;
+
+      /* The "flavour" of a back end is a general indication about
+         the contents of a file.  */
+       enum bfd_flavour flavour;
+
+       /* The order of bytes within the data area of a file.  */
+       enum bfd_endian byteorder;
+
+      /* The order of bytes within the header parts of a file.  */
+       enum bfd_endian header_byteorder;
+
+       /* A mask of all the flags which an executable may have set -
+          from the set `BFD_NO_FLAGS', `HAS_RELOC', ...`D_PAGED'.  */
+       flagword object_flags;
+
+      /* A mask of all the flags which a section may have set - from
+         the set `SEC_NO_FLAGS', `SEC_ALLOC', ...`SET_NEVER_LOAD'.  */
+       flagword section_flags;
+
+      /* The character normally found at the front of a symbol.
+         (if any), perhaps `_'.  */
+       char symbol_leading_char;
+
+      /* The pad character for file names within an archive header.  */
+       char ar_pad_char;
+
+       /* The maximum number of characters in an archive header.  */
+       unsigned char ar_max_namelen;
+
+       /* How well this target matches, used to select between various
+          possible targets when more than one target matches.  */
+       unsigned char match_priority;
+
+       /* Entries for byte swapping for data. These are different from the
+          other entry points, since they don't take a BFD as the first argument.
+          Certain other handlers could do the same.  */
+       bfd_uint64_t   (*bfd_getx64) (const void *);
+       bfd_int64_t    (*bfd_getx_signed_64) (const void *);
+       void           (*bfd_putx64) (bfd_uint64_t, void *);
+       bfd_vma        (*bfd_getx32) (const void *);
+       bfd_signed_vma (*bfd_getx_signed_32) (const void *);
+       void           (*bfd_putx32) (bfd_vma, void *);
+       bfd_vma        (*bfd_getx16) (const void *);
+       bfd_signed_vma (*bfd_getx_signed_16) (const void *);
+       void           (*bfd_putx16) (bfd_vma, void *);
+
+       /* Byte swapping for the headers.  */
+       bfd_uint64_t   (*bfd_h_getx64) (const void *);
+       bfd_int64_t    (*bfd_h_getx_signed_64) (const void *);
+       void           (*bfd_h_putx64) (bfd_uint64_t, void *);
+       bfd_vma        (*bfd_h_getx32) (const void *);
+       bfd_signed_vma (*bfd_h_getx_signed_32) (const void *);
+       void           (*bfd_h_putx32) (bfd_vma, void *);
+       bfd_vma        (*bfd_h_getx16) (const void *);
+       bfd_signed_vma (*bfd_h_getx_signed_16) (const void *);
+       void           (*bfd_h_putx16) (bfd_vma, void *);
+
+       /* Format dependent routines: these are vectors of entry points
+          within the target vector structure, one for each format to check.  */
+
+       /* Check the format of a file being read.  Return a `bfd_target *' or zero.  */
+       const struct bfd_target *(*_bfd_check_format[bfd_type_end]) (bfd *);
+
+       /* Set the format of a file being written.  */
+       bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *);
+
+       /* Write cached information into a file being written, at `bfd_close'.  */
+       bfd_boolean (*_bfd_write_contents[bfd_type_end]) (bfd *);
+   The general target vector.  These vectors are initialized using the
+BFD_JUMP_TABLE macros.
+
+       /* Generic entry points.  */
+     #define BFD_JUMP_TABLE_GENERIC(NAME) \
+       NAME##_close_and_cleanup, \
+       NAME##_bfd_free_cached_info, \
+       NAME##_new_section_hook, \
+       NAME##_get_section_contents, \
+       NAME##_get_section_contents_in_window
+
+       /* Called when the BFD is being closed to do any necessary cleanup.  */
+       bfd_boolean (*_close_and_cleanup) (bfd *);
+       /* Ask the BFD to free all cached information.  */
+       bfd_boolean (*_bfd_free_cached_info) (bfd *);
+       /* Called when a new section is created.  */
+       bfd_boolean (*_new_section_hook) (bfd *, sec_ptr);
+       /* Read the contents of a section.  */
+       bfd_boolean (*_bfd_get_section_contents)
+         (bfd *, sec_ptr, void *, file_ptr, bfd_size_type);
+       bfd_boolean (*_bfd_get_section_contents_in_window)
+         (bfd *, sec_ptr, bfd_window *, file_ptr, bfd_size_type);
+
+       /* Entry points to copy private data.  */
+     #define BFD_JUMP_TABLE_COPY(NAME) \
+       NAME##_bfd_copy_private_bfd_data, \
+       NAME##_bfd_merge_private_bfd_data, \
+       _bfd_generic_init_private_section_data, \
+       NAME##_bfd_copy_private_section_data, \
+       NAME##_bfd_copy_private_symbol_data, \
+       NAME##_bfd_copy_private_header_data, \
+       NAME##_bfd_set_private_flags, \
+       NAME##_bfd_print_private_bfd_data
+
+       /* Called to copy BFD general private data from one object file
+          to another.  */
+       bfd_boolean (*_bfd_copy_private_bfd_data) (bfd *, bfd *);
+       /* Called to merge BFD general private data from one object file
+          to a common output file when linking.  */
+       bfd_boolean (*_bfd_merge_private_bfd_data) (bfd *, bfd *);
+       /* Called to initialize BFD private section data from one object file
+          to another.  */
+     #define bfd_init_private_section_data(ibfd, isec, obfd, osec, link_info) \
+       BFD_SEND (obfd, _bfd_init_private_section_data, (ibfd, isec, obfd, osec, link_info))
+       bfd_boolean (*_bfd_init_private_section_data)
+         (bfd *, sec_ptr, bfd *, sec_ptr, struct bfd_link_info *);
+       /* Called to copy BFD private section data from one object file
+          to another.  */
+       bfd_boolean (*_bfd_copy_private_section_data)
+         (bfd *, sec_ptr, bfd *, sec_ptr);
+       /* Called to copy BFD private symbol data from one symbol
+          to another.  */
+       bfd_boolean (*_bfd_copy_private_symbol_data)
+         (bfd *, asymbol *, bfd *, asymbol *);
+       /* Called to copy BFD private header data from one object file
+          to another.  */
+       bfd_boolean (*_bfd_copy_private_header_data)
+         (bfd *, bfd *);
+       /* Called to set private backend flags.  */
+       bfd_boolean (*_bfd_set_private_flags) (bfd *, flagword);
+
+       /* Called to print private BFD data.  */
+       bfd_boolean (*_bfd_print_private_bfd_data) (bfd *, void *);
+
+       /* Core file entry points.  */
+     #define BFD_JUMP_TABLE_CORE(NAME) \
+       NAME##_core_file_failing_command, \
+       NAME##_core_file_failing_signal, \
+       NAME##_core_file_matches_executable_p, \
+       NAME##_core_file_pid
+
+       char *      (*_core_file_failing_command) (bfd *);
+       int         (*_core_file_failing_signal) (bfd *);
+       bfd_boolean (*_core_file_matches_executable_p) (bfd *, bfd *);
+       int         (*_core_file_pid) (bfd *);
+
+       /* Archive entry points.  */
+     #define BFD_JUMP_TABLE_ARCHIVE(NAME) \
+       NAME##_slurp_armap, \
+       NAME##_slurp_extended_name_table, \
+       NAME##_construct_extended_name_table, \
+       NAME##_truncate_arname, \
+       NAME##_write_armap, \
+       NAME##_read_ar_hdr, \
+       NAME##_write_ar_hdr, \
+       NAME##_openr_next_archived_file, \
+       NAME##_get_elt_at_index, \
+       NAME##_generic_stat_arch_elt, \
+       NAME##_update_armap_timestamp
+
+       bfd_boolean (*_bfd_slurp_armap) (bfd *);
+       bfd_boolean (*_bfd_slurp_extended_name_table) (bfd *);
+       bfd_boolean (*_bfd_construct_extended_name_table)
+         (bfd *, char **, bfd_size_type *, const char **);
+       void        (*_bfd_truncate_arname) (bfd *, const char *, char *);
+       bfd_boolean (*write_armap)
+         (bfd *, unsigned int, struct orl *, unsigned int, int);
+       void *      (*_bfd_read_ar_hdr_fn) (bfd *);
+       bfd_boolean (*_bfd_write_ar_hdr_fn) (bfd *, bfd *);
+       bfd *       (*openr_next_archived_file) (bfd *, bfd *);
+     #define bfd_get_elt_at_index(b,i) BFD_SEND (b, _bfd_get_elt_at_index, (b,i))
+       bfd *       (*_bfd_get_elt_at_index) (bfd *, symindex);
+       int         (*_bfd_stat_arch_elt) (bfd *, struct stat *);
+       bfd_boolean (*_bfd_update_armap_timestamp) (bfd *);
+
+       /* Entry points used for symbols.  */
+     #define BFD_JUMP_TABLE_SYMBOLS(NAME) \
+       NAME##_get_symtab_upper_bound, \
+       NAME##_canonicalize_symtab, \
+       NAME##_make_empty_symbol, \
+       NAME##_print_symbol, \
+       NAME##_get_symbol_info, \
+       NAME##_bfd_is_local_label_name, \
+       NAME##_bfd_is_target_special_symbol, \
+       NAME##_get_lineno, \
+       NAME##_find_nearest_line, \
+       _bfd_generic_find_line, \
+       NAME##_find_inliner_info, \
+       NAME##_bfd_make_debug_symbol, \
+       NAME##_read_minisymbols, \
+       NAME##_minisymbol_to_symbol
+
+       long        (*_bfd_get_symtab_upper_bound) (bfd *);
+       long        (*_bfd_canonicalize_symtab)
+         (bfd *, struct bfd_symbol **);
+       struct bfd_symbol *
+                   (*_bfd_make_empty_symbol) (bfd *);
+       void        (*_bfd_print_symbol)
+         (bfd *, void *, struct bfd_symbol *, bfd_print_symbol_type);
+     #define bfd_print_symbol(b,p,s,e) BFD_SEND (b, _bfd_print_symbol, (b,p,s,e))
+       void        (*_bfd_get_symbol_info)
+         (bfd *, struct bfd_symbol *, symbol_info *);
+     #define bfd_get_symbol_info(b,p,e) BFD_SEND (b, _bfd_get_symbol_info, (b,p,e))
+       bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *);
+       bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *);
+       alent *     (*_get_lineno) (bfd *, struct bfd_symbol *);
+       bfd_boolean (*_bfd_find_nearest_line)
+         (bfd *, struct bfd_section *, struct bfd_symbol **, bfd_vma,
+          const char **, const char **, unsigned int *);
+       bfd_boolean (*_bfd_find_line)
+         (bfd *, struct bfd_symbol **, struct bfd_symbol *,
+          const char **, unsigned int *);
+       bfd_boolean (*_bfd_find_inliner_info)
+         (bfd *, const char **, const char **, unsigned int *);
+      /* Back-door to allow format-aware applications to create debug symbols
+         while using BFD for everything else.  Currently used by the assembler
+         when creating COFF files.  */
+       asymbol *   (*_bfd_make_debug_symbol)
+         (bfd *, void *, unsigned long size);
+     #define bfd_read_minisymbols(b, d, m, s) \
+       BFD_SEND (b, _read_minisymbols, (b, d, m, s))
+       long        (*_read_minisymbols)
+         (bfd *, bfd_boolean, void **, unsigned int *);
+     #define bfd_minisymbol_to_symbol(b, d, m, f) \
+       BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f))
+       asymbol *   (*_minisymbol_to_symbol)
+         (bfd *, bfd_boolean, const void *, asymbol *);
+
+       /* Routines for relocs.  */
+     #define BFD_JUMP_TABLE_RELOCS(NAME) \
+       NAME##_get_reloc_upper_bound, \
+       NAME##_canonicalize_reloc, \
+       NAME##_bfd_reloc_type_lookup, \
+       NAME##_bfd_reloc_name_lookup
+
+       long        (*_get_reloc_upper_bound) (bfd *, sec_ptr);
+       long        (*_bfd_canonicalize_reloc)
+         (bfd *, sec_ptr, arelent **, struct bfd_symbol **);
+       /* See documentation on reloc types.  */
+       reloc_howto_type *
+                   (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
+       reloc_howto_type *
+                   (*reloc_name_lookup) (bfd *, const char *);
+
+
+       /* Routines used when writing an object file.  */
+     #define BFD_JUMP_TABLE_WRITE(NAME) \
+       NAME##_set_arch_mach, \
+       NAME##_set_section_contents
+
+       bfd_boolean (*_bfd_set_arch_mach)
+         (bfd *, enum bfd_architecture, unsigned long);
+       bfd_boolean (*_bfd_set_section_contents)
+         (bfd *, sec_ptr, const void *, file_ptr, bfd_size_type);
+
+       /* Routines used by the linker.  */
+     #define BFD_JUMP_TABLE_LINK(NAME) \
+       NAME##_sizeof_headers, \
+       NAME##_bfd_get_relocated_section_contents, \
+       NAME##_bfd_relax_section, \
+       NAME##_bfd_link_hash_table_create, \
+       NAME##_bfd_link_hash_table_free, \
+       NAME##_bfd_link_add_symbols, \
+       NAME##_bfd_link_just_syms, \
+       NAME##_bfd_copy_link_hash_symbol_type, \
+       NAME##_bfd_final_link, \
+       NAME##_bfd_link_split_section, \
+       NAME##_bfd_gc_sections, \
+       NAME##_bfd_lookup_section_flags, \
+       NAME##_bfd_merge_sections, \
+       NAME##_bfd_is_group_section, \
+       NAME##_bfd_discard_group, \
+       NAME##_section_already_linked, \
+       NAME##_bfd_define_common_symbol
+
+       int         (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *);
+       bfd_byte *  (*_bfd_get_relocated_section_contents)
+         (bfd *, struct bfd_link_info *, struct bfd_link_order *,
+          bfd_byte *, bfd_boolean, struct bfd_symbol **);
+
+       bfd_boolean (*_bfd_relax_section)
+         (bfd *, struct bfd_section *, struct bfd_link_info *, bfd_boolean *);
+
+       /* Create a hash table for the linker.  Different backends store
+          different information in this table.  */
+       struct bfd_link_hash_table *
+                   (*_bfd_link_hash_table_create) (bfd *);
+
+       /* Release the memory associated with the linker hash table.  */
+       void        (*_bfd_link_hash_table_free) (struct bfd_link_hash_table *);
+
+       /* Add symbols from this object file into the hash table.  */
+       bfd_boolean (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *);
+
+       /* Indicate that we are only retrieving symbol values from this section.  */
+       void        (*_bfd_link_just_syms) (asection *, struct bfd_link_info *);
+
+       /* Copy the symbol type of a linker hash table entry.  */
+     #define bfd_copy_link_hash_symbol_type(b, t, f) \
+       BFD_SEND (b, _bfd_copy_link_hash_symbol_type, (b, t, f))
+       void (*_bfd_copy_link_hash_symbol_type)
+         (bfd *, struct bfd_link_hash_entry *, struct bfd_link_hash_entry *);
+
+       /* Do a link based on the link_order structures attached to each
+          section of the BFD.  */
+       bfd_boolean (*_bfd_final_link) (bfd *, struct bfd_link_info *);
+
+       /* Should this section be split up into smaller pieces during linking.  */
+       bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *);
+
+       /* Remove sections that are not referenced from the output.  */
+       bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *);
+
+       /* Sets the bitmask of allowed and disallowed section flags.  */
+       bfd_boolean (*_bfd_lookup_section_flags) (struct bfd_link_info *,
+                                                 struct flag_info *,
+                                                 asection *);
+
+       /* Attempt to merge SEC_MERGE sections.  */
+       bfd_boolean (*_bfd_merge_sections) (bfd *, struct bfd_link_info *);
+
+       /* Is this section a member of a group?  */
+       bfd_boolean (*_bfd_is_group_section) (bfd *, const struct bfd_section *);
+
+       /* Discard members of a group.  */
+       bfd_boolean (*_bfd_discard_group) (bfd *, struct bfd_section *);
+
+       /* Check if SEC has been already linked during a reloceatable or
+          final link.  */
+       bfd_boolean (*_section_already_linked) (bfd *, asection *,
+                                               struct bfd_link_info *);
+
+       /* Define a common symbol.  */
+       bfd_boolean (*_bfd_define_common_symbol) (bfd *, struct bfd_link_info *,
+                                                 struct bfd_link_hash_entry *);
+
+       /* Routines to handle dynamic symbols and relocs.  */
+     #define BFD_JUMP_TABLE_DYNAMIC(NAME) \
+       NAME##_get_dynamic_symtab_upper_bound, \
+       NAME##_canonicalize_dynamic_symtab, \
+       NAME##_get_synthetic_symtab, \
+       NAME##_get_dynamic_reloc_upper_bound, \
+       NAME##_canonicalize_dynamic_reloc
+
+       /* Get the amount of memory required to hold the dynamic symbols.  */
+       long        (*_bfd_get_dynamic_symtab_upper_bound) (bfd *);
+       /* Read in the dynamic symbols.  */
+       long        (*_bfd_canonicalize_dynamic_symtab)
+         (bfd *, struct bfd_symbol **);
+       /* Create synthetized symbols.  */
+       long        (*_bfd_get_synthetic_symtab)
+         (bfd *, long, struct bfd_symbol **, long, struct bfd_symbol **,
+          struct bfd_symbol **);
+       /* Get the amount of memory required to hold the dynamic relocs.  */
+       long        (*_bfd_get_dynamic_reloc_upper_bound) (bfd *);
+       /* Read in the dynamic relocs.  */
+       long        (*_bfd_canonicalize_dynamic_reloc)
+         (bfd *, arelent **, struct bfd_symbol **);
+   A pointer to an alternative bfd_target in case the current one is not
+satisfactory.  This can happen when the target cpu supports both big
+and little endian code, and target chosen by the linker has the wrong
+endianness.  The function open_output() in ld/ldlang.c uses this field
+to find an alternative output format that is suitable.
+       /* Opposite endian version of this target.  */
+       const struct bfd_target * alternative_target;
+
+       /* Data for use by back-end routines, which isn't
+          generic enough to belong in this structure.  */
+       const void *backend_data;
+
+     } bfd_target;
+
+2.12.1.1 `bfd_set_default_target'
+.................................
+
+*Synopsis*
+     bfd_boolean bfd_set_default_target (const char *name);
+   *Description*
+Set the default target vector to use when recognizing a BFD.  This
+takes the name of the target, which may be a BFD target name or a
+configuration triplet.
+
+2.12.1.2 `bfd_find_target'
+..........................
+
+*Synopsis*
+     const bfd_target *bfd_find_target (const char *target_name, bfd *abfd);
+   *Description*
+Return a pointer to the transfer vector for the object target named
+TARGET_NAME.  If TARGET_NAME is `NULL', choose the one in the
+environment variable `GNUTARGET'; if that is null or not defined, then
+choose the first entry in the target list.  Passing in the string
+"default" or setting the environment variable to "default" will cause
+the first entry in the target list to be returned, and
+"target_defaulted" will be set in the BFD if ABFD isn't `NULL'.  This
+causes `bfd_check_format' to loop over all the targets to find the one
+that matches the file being read.
+
+2.12.1.3 `bfd_get_target_info'
+..............................
+
+*Synopsis*
+     const bfd_target *bfd_get_target_info (const char *target_name,
+         bfd *abfd,
+         bfd_boolean *is_bigendian,
+         int *underscoring,
+         const char **def_target_arch);
+   *Description*
+Return a pointer to the transfer vector for the object target named
+TARGET_NAME.  If TARGET_NAME is `NULL', choose the one in the
+environment variable `GNUTARGET'; if that is null or not defined, then
+choose the first entry in the target list.  Passing in the string
+"default" or setting the environment variable to "default" will cause
+the first entry in the target list to be returned, and
+"target_defaulted" will be set in the BFD if ABFD isn't `NULL'.  This
+causes `bfd_check_format' to loop over all the targets to find the one
+that matches the file being read.  If IS_BIGENDIAN is not `NULL', then
+set this value to target's endian mode. True for big-endian, FALSE for
+little-endian or for invalid target.  If UNDERSCORING is not `NULL',
+then set this value to target's underscoring mode. Zero for
+none-underscoring, -1 for invalid target, else the value of target
+vector's symbol underscoring.  If DEF_TARGET_ARCH is not `NULL', then
+set it to the architecture string specified by the target_name.
+
+2.12.1.4 `bfd_target_list'
+..........................
+
+*Synopsis*
+     const char ** bfd_target_list (void);
+   *Description*
+Return a freshly malloced NULL-terminated vector of the names of all
+the valid BFD targets. Do not modify the names.
+
+2.12.1.5 `bfd_seach_for_target'
+...............................
+
+*Synopsis*
+     const bfd_target *bfd_search_for_target
+        (int (*search_func) (const bfd_target *, void *),
+         void *);
+   *Description*
+Return a pointer to the first transfer vector in the list of transfer
+vectors maintained by BFD that produces a non-zero result when passed
+to the function SEARCH_FUNC.  The parameter DATA is passed, unexamined,
+to the search function.
+
+
+File: bfd.info,  Node: Architectures,  Next: Opening and Closing,  Prev: Targets,  Up: BFD front end
+
+2.13 Architectures
+==================
+
+BFD keeps one atom in a BFD describing the architecture of the data
+attached to the BFD: a pointer to a `bfd_arch_info_type'.
+
+   Pointers to structures can be requested independently of a BFD so
+that an architecture's information can be interrogated without access
+to an open BFD.
+
+   The architecture information is provided by each architecture
+package.  The set of default architectures is selected by the macro
+`SELECT_ARCHITECTURES'.  This is normally set up in the
+`config/TARGET.mt' file of your choice.  If the name is not defined,
+then all the architectures supported are included.
+
+   When BFD starts up, all the architectures are called with an
+initialize method.  It is up to the architecture back end to insert as
+many items into the list of architectures as it wants to; generally
+this would be one for each machine and one for the default case (an
+item with a machine field of 0).
+
+   BFD's idea of an architecture is implemented in `archures.c'.
+
+2.13.1 bfd_architecture
+-----------------------
+
+*Description*
+This enum gives the object file's CPU architecture, in a global
+sense--i.e., what processor family does it belong to?  Another field
+indicates which processor within the family is in use.  The machine
+gives a number which distinguishes different versions of the
+architecture, containing, for example, 2 and 3 for Intel i960 KA and
+i960 KB, and 68020 and 68030 for Motorola 68020 and 68030.
+     enum bfd_architecture
+     {
+       bfd_arch_unknown,   /* File arch not known.  */
+       bfd_arch_obscure,   /* Arch known, not one of these.  */
+       bfd_arch_m68k,      /* Motorola 68xxx */
+     #define bfd_mach_m68000 1
+     #define bfd_mach_m68008 2
+     #define bfd_mach_m68010 3
+     #define bfd_mach_m68020 4
+     #define bfd_mach_m68030 5
+     #define bfd_mach_m68040 6
+     #define bfd_mach_m68060 7
+     #define bfd_mach_cpu32  8
+     #define bfd_mach_fido   9
+     #define bfd_mach_mcf_isa_a_nodiv 10
+     #define bfd_mach_mcf_isa_a 11
+     #define bfd_mach_mcf_isa_a_mac 12
+     #define bfd_mach_mcf_isa_a_emac 13
+     #define bfd_mach_mcf_isa_aplus 14
+     #define bfd_mach_mcf_isa_aplus_mac 15
+     #define bfd_mach_mcf_isa_aplus_emac 16
+     #define bfd_mach_mcf_isa_b_nousp 17
+     #define bfd_mach_mcf_isa_b_nousp_mac 18
+     #define bfd_mach_mcf_isa_b_nousp_emac 19
+     #define bfd_mach_mcf_isa_b 20
+     #define bfd_mach_mcf_isa_b_mac 21
+     #define bfd_mach_mcf_isa_b_emac 22
+     #define bfd_mach_mcf_isa_b_float 23
+     #define bfd_mach_mcf_isa_b_float_mac 24
+     #define bfd_mach_mcf_isa_b_float_emac 25
+     #define bfd_mach_mcf_isa_c 26
+     #define bfd_mach_mcf_isa_c_mac 27
+     #define bfd_mach_mcf_isa_c_emac 28
+     #define bfd_mach_mcf_isa_c_nodiv 29
+     #define bfd_mach_mcf_isa_c_nodiv_mac 30
+     #define bfd_mach_mcf_isa_c_nodiv_emac 31
+       bfd_arch_vax,       /* DEC Vax */
+       bfd_arch_i960,      /* Intel 960 */
+         /* The order of the following is important.
+            lower number indicates a machine type that
+            only accepts a subset of the instructions
+            available to machines with higher numbers.
+            The exception is the "ca", which is
+            incompatible with all other machines except
+            "core".  */
+
+     #define bfd_mach_i960_core      1
+     #define bfd_mach_i960_ka_sa     2
+     #define bfd_mach_i960_kb_sb     3
+     #define bfd_mach_i960_mc        4
+     #define bfd_mach_i960_xa        5
+     #define bfd_mach_i960_ca        6
+     #define bfd_mach_i960_jx        7
+     #define bfd_mach_i960_hx        8
+
+       bfd_arch_or32,      /* OpenRISC 32 */
+
+       bfd_arch_sparc,     /* SPARC */
+     #define bfd_mach_sparc                 1
+     /* The difference between v8plus and v9 is that v9 is a true 64 bit env.  */
+     #define bfd_mach_sparc_sparclet        2
+     #define bfd_mach_sparc_sparclite       3
+     #define bfd_mach_sparc_v8plus          4
+     #define bfd_mach_sparc_v8plusa         5 /* with ultrasparc add'ns.  */
+     #define bfd_mach_sparc_sparclite_le    6
+     #define bfd_mach_sparc_v9              7
+     #define bfd_mach_sparc_v9a             8 /* with ultrasparc add'ns.  */
+     #define bfd_mach_sparc_v8plusb         9 /* with cheetah add'ns.  */
+     #define bfd_mach_sparc_v9b             10 /* with cheetah add'ns.  */
+     /* Nonzero if MACH has the v9 instruction set.  */
+     #define bfd_mach_sparc_v9_p(mach) \
+       ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9b \
+        && (mach) != bfd_mach_sparc_sparclite_le)
+     /* Nonzero if MACH is a 64 bit sparc architecture.  */
+     #define bfd_mach_sparc_64bit_p(mach) \
+       ((mach) >= bfd_mach_sparc_v9 && (mach) != bfd_mach_sparc_v8plusb)
+       bfd_arch_spu,       /* PowerPC SPU */
+     #define bfd_mach_spu           256
+       bfd_arch_mips,      /* MIPS Rxxxx */
+     #define bfd_mach_mips3000              3000
+     #define bfd_mach_mips3900              3900
+     #define bfd_mach_mips4000              4000
+     #define bfd_mach_mips4010              4010
+     #define bfd_mach_mips4100              4100
+     #define bfd_mach_mips4111              4111
+     #define bfd_mach_mips4120              4120
+     #define bfd_mach_mips4300              4300
+     #define bfd_mach_mips4400              4400
+     #define bfd_mach_mips4600              4600
+     #define bfd_mach_mips4650              4650
+     #define bfd_mach_mips5000              5000
+     #define bfd_mach_mips5400              5400
+     #define bfd_mach_mips5500              5500
+     #define bfd_mach_mips6000              6000
+     #define bfd_mach_mips7000              7000
+     #define bfd_mach_mips8000              8000
+     #define bfd_mach_mips9000              9000
+     #define bfd_mach_mips10000             10000
+     #define bfd_mach_mips12000             12000
+     #define bfd_mach_mips14000             14000
+     #define bfd_mach_mips16000             16000
+     #define bfd_mach_mips16                16
+     #define bfd_mach_mips5                 5
+     #define bfd_mach_mips_loongson_2e      3001
+     #define bfd_mach_mips_loongson_2f      3002
+     #define bfd_mach_mips_loongson_3a      3003
+     #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+     #define bfd_mach_mips_octeon           6501
+     #define bfd_mach_mips_octeonp          6601
+     #define bfd_mach_mips_octeon2          6502
+     #define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
+     #define bfd_mach_mipsisa32             32
+     #define bfd_mach_mipsisa32r2           33
+     #define bfd_mach_mipsisa64             64
+     #define bfd_mach_mipsisa64r2           65
+     #define bfd_mach_mips_micromips        96
+       bfd_arch_i386,      /* Intel 386 */
+     #define bfd_mach_i386_intel_syntax     (1 << 0)
+     #define bfd_mach_i386_i8086            (1 << 1)
+     #define bfd_mach_i386_i386             (1 << 2)
+     #define bfd_mach_x86_64                (1 << 3)
+     #define bfd_mach_x64_32                (1 << 4)
+     #define bfd_mach_i386_i386_intel_syntax (bfd_mach_i386_i386 | bfd_mach_i386_intel_syntax)
+     #define bfd_mach_x86_64_intel_syntax   (bfd_mach_x86_64 | bfd_mach_i386_intel_syntax)
+     #define bfd_mach_x64_32_intel_syntax   (bfd_mach_x64_32 | bfd_mach_i386_intel_syntax)
+       bfd_arch_l1om,   /* Intel L1OM */
+     #define bfd_mach_l1om                  (1 << 5)
+     #define bfd_mach_l1om_intel_syntax     (bfd_mach_l1om | bfd_mach_i386_intel_syntax)
+       bfd_arch_k1om,   /* Intel K1OM */
+     #define bfd_mach_k1om                  (1 << 6)
+     #define bfd_mach_k1om_intel_syntax     (bfd_mach_k1om | bfd_mach_i386_intel_syntax)
+       bfd_arch_we32k,     /* AT&T WE32xxx */
+       bfd_arch_tahoe,     /* CCI/Harris Tahoe */
+       bfd_arch_i860,      /* Intel 860 */
+       bfd_arch_i370,      /* IBM 360/370 Mainframes */
+       bfd_arch_romp,      /* IBM ROMP PC/RT */
+       bfd_arch_convex,    /* Convex */
+       bfd_arch_m88k,      /* Motorola 88xxx */
+       bfd_arch_m98k,      /* Motorola 98xxx */
+       bfd_arch_pyramid,   /* Pyramid Technology */
+       bfd_arch_h8300,     /* Renesas H8/300 (formerly Hitachi H8/300) */
+     #define bfd_mach_h8300    1
+     #define bfd_mach_h8300h   2
+     #define bfd_mach_h8300s   3
+     #define bfd_mach_h8300hn  4
+     #define bfd_mach_h8300sn  5
+     #define bfd_mach_h8300sx  6
+     #define bfd_mach_h8300sxn 7
+       bfd_arch_pdp11,     /* DEC PDP-11 */
+       bfd_arch_plugin,
+       bfd_arch_powerpc,   /* PowerPC */
+     #define bfd_mach_ppc           32
+     #define bfd_mach_ppc64         64
+     #define bfd_mach_ppc_403       403
+     #define bfd_mach_ppc_403gc     4030
+     #define bfd_mach_ppc_405       405
+     #define bfd_mach_ppc_505       505
+     #define bfd_mach_ppc_601       601
+     #define bfd_mach_ppc_602       602
+     #define bfd_mach_ppc_603       603
+     #define bfd_mach_ppc_ec603e    6031
+     #define bfd_mach_ppc_604       604
+     #define bfd_mach_ppc_620       620
+     #define bfd_mach_ppc_630       630
+     #define bfd_mach_ppc_750       750
+     #define bfd_mach_ppc_860       860
+     #define bfd_mach_ppc_a35       35
+     #define bfd_mach_ppc_rs64ii    642
+     #define bfd_mach_ppc_rs64iii   643
+     #define bfd_mach_ppc_7400      7400
+     #define bfd_mach_ppc_e500      500
+     #define bfd_mach_ppc_e500mc    5001
+     #define bfd_mach_ppc_e500mc64  5005
+     #define bfd_mach_ppc_e5500     5006
+     #define bfd_mach_ppc_e6500     5007
+     #define bfd_mach_ppc_titan     83
+     #define bfd_mach_ppc_vle       84
+       bfd_arch_rs6000,    /* IBM RS/6000 */
+     #define bfd_mach_rs6k          6000
+     #define bfd_mach_rs6k_rs1      6001
+     #define bfd_mach_rs6k_rsc      6003
+     #define bfd_mach_rs6k_rs2      6002
+       bfd_arch_hppa,      /* HP PA RISC */
+     #define bfd_mach_hppa10        10
+     #define bfd_mach_hppa11        11
+     #define bfd_mach_hppa20        20
+     #define bfd_mach_hppa20w       25
+       bfd_arch_d10v,      /* Mitsubishi D10V */
+     #define bfd_mach_d10v          1
+     #define bfd_mach_d10v_ts2      2
+     #define bfd_mach_d10v_ts3      3
+       bfd_arch_d30v,      /* Mitsubishi D30V */
+       bfd_arch_dlx,       /* DLX */
+       bfd_arch_m68hc11,   /* Motorola 68HC11 */
+       bfd_arch_m68hc12,   /* Motorola 68HC12 */
+     #define bfd_mach_m6812_default 0
+     #define bfd_mach_m6812         1
+     #define bfd_mach_m6812s        2
+       bfd_arch_m9s12x,   /* Freescale S12X */
+       bfd_arch_m9s12xg,  /* Freescale XGATE */
+       bfd_arch_z8k,       /* Zilog Z8000 */
+     #define bfd_mach_z8001         1
+     #define bfd_mach_z8002         2
+       bfd_arch_h8500,     /* Renesas H8/500 (formerly Hitachi H8/500) */
+       bfd_arch_sh,        /* Renesas / SuperH SH (formerly Hitachi SH) */
+     #define bfd_mach_sh            1
+     #define bfd_mach_sh2        0x20
+     #define bfd_mach_sh_dsp     0x2d
+     #define bfd_mach_sh2a       0x2a
+     #define bfd_mach_sh2a_nofpu 0x2b
+     #define bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu 0x2a1
+     #define bfd_mach_sh2a_nofpu_or_sh3_nommu 0x2a2
+     #define bfd_mach_sh2a_or_sh4  0x2a3
+     #define bfd_mach_sh2a_or_sh3e 0x2a4
+     #define bfd_mach_sh2e       0x2e
+     #define bfd_mach_sh3        0x30
+     #define bfd_mach_sh3_nommu  0x31
+     #define bfd_mach_sh3_dsp    0x3d
+     #define bfd_mach_sh3e       0x3e
+     #define bfd_mach_sh4        0x40
+     #define bfd_mach_sh4_nofpu  0x41
+     #define bfd_mach_sh4_nommu_nofpu  0x42
+     #define bfd_mach_sh4a       0x4a
+     #define bfd_mach_sh4a_nofpu 0x4b
+     #define bfd_mach_sh4al_dsp  0x4d
+     #define bfd_mach_sh5        0x50
+       bfd_arch_alpha,     /* Dec Alpha */
+     #define bfd_mach_alpha_ev4  0x10
+     #define bfd_mach_alpha_ev5  0x20
+     #define bfd_mach_alpha_ev6  0x30
+       bfd_arch_arm,       /* Advanced Risc Machines ARM.  */
+     #define bfd_mach_arm_unknown   0
+     #define bfd_mach_arm_2         1
+     #define bfd_mach_arm_2a        2
+     #define bfd_mach_arm_3         3
+     #define bfd_mach_arm_3M        4
+     #define bfd_mach_arm_4         5
+     #define bfd_mach_arm_4T        6
+     #define bfd_mach_arm_5         7
+     #define bfd_mach_arm_5T        8
+     #define bfd_mach_arm_5TE       9
+     #define bfd_mach_arm_XScale    10
+     #define bfd_mach_arm_ep9312    11
+     #define bfd_mach_arm_iWMMXt    12
+     #define bfd_mach_arm_iWMMXt2   13
+       bfd_arch_ns32k,     /* National Semiconductors ns32000 */
+       bfd_arch_w65,       /* WDC 65816 */
+       bfd_arch_tic30,     /* Texas Instruments TMS320C30 */
+       bfd_arch_tic4x,     /* Texas Instruments TMS320C3X/4X */
+     #define bfd_mach_tic3x         30
+     #define bfd_mach_tic4x         40
+       bfd_arch_tic54x,    /* Texas Instruments TMS320C54X */
+       bfd_arch_tic6x,     /* Texas Instruments TMS320C6X */
+       bfd_arch_tic80,     /* TI TMS320c80 (MVP) */
+       bfd_arch_v850,      /* NEC V850 */
+     #define bfd_mach_v850          1
+     #define bfd_mach_v850e         'E'
+     #define bfd_mach_v850e1        '1'
+     #define bfd_mach_v850e2        0x4532
+     #define bfd_mach_v850e2v3      0x45325633
+       bfd_arch_arc,       /* ARC Cores */
+     #define bfd_mach_arc_5         5
+     #define bfd_mach_arc_6         6
+     #define bfd_mach_arc_7         7
+     #define bfd_mach_arc_8         8
+      bfd_arch_m32c,     /* Renesas M16C/M32C.  */
+     #define bfd_mach_m16c        0x75
+     #define bfd_mach_m32c        0x78
+       bfd_arch_m32r,      /* Renesas M32R (formerly Mitsubishi M32R/D) */
+     #define bfd_mach_m32r          1 /* For backwards compatibility.  */
+     #define bfd_mach_m32rx         'x'
+     #define bfd_mach_m32r2         '2'
+       bfd_arch_mn10200,   /* Matsushita MN10200 */
+       bfd_arch_mn10300,   /* Matsushita MN10300 */
+     #define bfd_mach_mn10300               300
+     #define bfd_mach_am33          330
+     #define bfd_mach_am33_2        332
+       bfd_arch_fr30,
+     #define bfd_mach_fr30          0x46523330
+       bfd_arch_frv,
+     #define bfd_mach_frv           1
+     #define bfd_mach_frvsimple     2
+     #define bfd_mach_fr300         300
+     #define bfd_mach_fr400         400
+     #define bfd_mach_fr450         450
+     #define bfd_mach_frvtomcat     499     /* fr500 prototype */
+     #define bfd_mach_fr500         500
+     #define bfd_mach_fr550         550
+       bfd_arch_moxie,       /* The moxie processor */
+     #define bfd_mach_moxie         1
+       bfd_arch_mcore,
+       bfd_arch_mep,
+     #define bfd_mach_mep           1
+     #define bfd_mach_mep_h1        0x6831
+     #define bfd_mach_mep_c5        0x6335
+       bfd_arch_ia64,      /* HP/Intel ia64 */
+     #define bfd_mach_ia64_elf64    64
+     #define bfd_mach_ia64_elf32    32
+       bfd_arch_ip2k,      /* Ubicom IP2K microcontrollers. */
+     #define bfd_mach_ip2022        1
+     #define bfd_mach_ip2022ext     2
+      bfd_arch_iq2000,     /* Vitesse IQ2000.  */
+     #define bfd_mach_iq2000        1
+     #define bfd_mach_iq10          2
+       bfd_arch_epiphany,   /* Adapteva EPIPHANY */
+     #define bfd_mach_epiphany16    1
+     #define bfd_mach_epiphany32    2
+       bfd_arch_mt,
+     #define bfd_mach_ms1           1
+     #define bfd_mach_mrisc2        2
+     #define bfd_mach_ms2           3
+       bfd_arch_pj,
+       bfd_arch_avr,       /* Atmel AVR microcontrollers.  */
+     #define bfd_mach_avr1          1
+     #define bfd_mach_avr2          2
+     #define bfd_mach_avr25         25
+     #define bfd_mach_avr3          3
+     #define bfd_mach_avr31         31
+     #define bfd_mach_avr35         35
+     #define bfd_mach_avr4          4
+     #define bfd_mach_avr5          5
+     #define bfd_mach_avr51         51
+     #define bfd_mach_avr6          6
+     #define bfd_mach_avrxmega1 101
+     #define bfd_mach_avrxmega2 102
+     #define bfd_mach_avrxmega3 103
+     #define bfd_mach_avrxmega4 104
+     #define bfd_mach_avrxmega5 105
+     #define bfd_mach_avrxmega6 106
+     #define bfd_mach_avrxmega7 107
+       bfd_arch_bfin,        /* ADI Blackfin */
+     #define bfd_mach_bfin          1
+       bfd_arch_cr16,       /* National Semiconductor CompactRISC (ie CR16). */
+     #define bfd_mach_cr16          1
+       bfd_arch_cr16c,       /* National Semiconductor CompactRISC. */
+     #define bfd_mach_cr16c         1
+       bfd_arch_crx,       /*  National Semiconductor CRX.  */
+     #define bfd_mach_crx           1
+       bfd_arch_cris,      /* Axis CRIS */
+     #define bfd_mach_cris_v0_v10   255
+     #define bfd_mach_cris_v32      32
+     #define bfd_mach_cris_v10_v32  1032
+       bfd_arch_rl78,
+     #define bfd_mach_rl78  0x75
+       bfd_arch_rx,        /* Renesas RX.  */
+     #define bfd_mach_rx            0x75
+       bfd_arch_s390,      /* IBM s390 */
+     #define bfd_mach_s390_31       31
+     #define bfd_mach_s390_64       64
+       bfd_arch_score,     /* Sunplus score */
+     #define bfd_mach_score3         3
+     #define bfd_mach_score7         7
+       bfd_arch_openrisc,  /* OpenRISC */
+       bfd_arch_mmix,      /* Donald Knuth's educational processor.  */
+       bfd_arch_xstormy16,
+     #define bfd_mach_xstormy16     1
+       bfd_arch_msp430,    /* Texas Instruments MSP430 architecture.  */
+     #define bfd_mach_msp11          11
+     #define bfd_mach_msp110         110
+     #define bfd_mach_msp12          12
+     #define bfd_mach_msp13          13
+     #define bfd_mach_msp14          14
+     #define bfd_mach_msp15          15
+     #define bfd_mach_msp16          16
+     #define bfd_mach_msp21          21
+     #define bfd_mach_msp31          31
+     #define bfd_mach_msp32          32
+     #define bfd_mach_msp33          33
+     #define bfd_mach_msp41          41
+     #define bfd_mach_msp42          42
+     #define bfd_mach_msp43          43
+     #define bfd_mach_msp44          44
+       bfd_arch_xc16x,     /* Infineon's XC16X Series.               */
+     #define bfd_mach_xc16x         1
+     #define bfd_mach_xc16xl        2
+     #define bfd_mach_xc16xs        3
+       bfd_arch_xgate,   /* Freescale XGATE */
+     #define bfd_mach_xgate         1
+       bfd_arch_xtensa,    /* Tensilica's Xtensa cores.  */
+     #define bfd_mach_xtensa        1
+       bfd_arch_z80,
+     #define bfd_mach_z80strict      1 /* No undocumented opcodes.  */
+     #define bfd_mach_z80            3 /* With ixl, ixh, iyl, and iyh.  */
+     #define bfd_mach_z80full        7 /* All undocumented instructions.  */
+     #define bfd_mach_r800           11 /* R800: successor with multiplication.  */
+       bfd_arch_lm32,      /* Lattice Mico32 */
+     #define bfd_mach_lm32      1
+       bfd_arch_microblaze,/* Xilinx MicroBlaze. */
+       bfd_arch_tilepro,   /* Tilera TILEPro */
+       bfd_arch_tilegx, /* Tilera TILE-Gx */
+     #define bfd_mach_tilepro   1
+     #define bfd_mach_tilegx    1
+     #define bfd_mach_tilegx32  2
+       bfd_arch_last
+       };
+
+2.13.2 bfd_arch_info
+--------------------
+
+*Description*
+This structure contains information on architectures for use within BFD.
+
+     typedef struct bfd_arch_info
+     {
+       int bits_per_word;
+       int bits_per_address;
+       int bits_per_byte;
+       enum bfd_architecture arch;
+       unsigned long mach;
+       const char *arch_name;
+       const char *printable_name;
+       unsigned int section_align_power;
+       /* TRUE if this is the default machine for the architecture.
+          The default arch should be the first entry for an arch so that
+          all the entries for that arch can be accessed via `next'.  */
+       bfd_boolean the_default;
+       const struct bfd_arch_info * (*compatible)
+         (const struct bfd_arch_info *a, const struct bfd_arch_info *b);
+
+       bfd_boolean (*scan) (const struct bfd_arch_info *, const char *);
+
+       /* Allocate via bfd_malloc and return a fill buffer of size COUNT.  If
+          IS_BIGENDIAN is TRUE, the order of bytes is big endian.  If CODE is
+          TRUE, the buffer contains code.  */
+       void *(*fill) (bfd_size_type count, bfd_boolean is_bigendian,
+                      bfd_boolean code);
+
+       const struct bfd_arch_info *next;
+     }
+     bfd_arch_info_type;
+
+2.13.2.1 `bfd_printable_name'
+.............................
+
+*Synopsis*
+     const char *bfd_printable_name (bfd *abfd);
+   *Description*
+Return a printable string representing the architecture and machine
+from the pointer to the architecture info structure.
+
+2.13.2.2 `bfd_scan_arch'
+........................
+
+*Synopsis*
+     const bfd_arch_info_type *bfd_scan_arch (const char *string);
+   *Description*
+Figure out if BFD supports any cpu which could be described with the
+name STRING.  Return a pointer to an `arch_info' structure if a machine
+is found, otherwise NULL.
+
+2.13.2.3 `bfd_arch_list'
+........................
+
+*Synopsis*
+     const char **bfd_arch_list (void);
+   *Description*
+Return a freshly malloced NULL-terminated vector of the names of all
+the valid BFD architectures.  Do not modify the names.
+
+2.13.2.4 `bfd_arch_get_compatible'
+..................................
+
+*Synopsis*
+     const bfd_arch_info_type *bfd_arch_get_compatible
+        (const bfd *abfd, const bfd *bbfd, bfd_boolean accept_unknowns);
+   *Description*
+Determine whether two BFDs' architectures and machine types are
+compatible.  Calculates the lowest common denominator between the two
+architectures and machine types implied by the BFDs and returns a
+pointer to an `arch_info' structure describing the compatible machine.
+
+2.13.2.5 `bfd_default_arch_struct'
+..................................
+
+*Description*
+The `bfd_default_arch_struct' is an item of `bfd_arch_info_type' which
+has been initialized to a fairly generic state.  A BFD starts life by
+pointing to this structure, until the correct back end has determined
+the real architecture of the file.
+     extern const bfd_arch_info_type bfd_default_arch_struct;
+
+2.13.2.6 `bfd_set_arch_info'
+............................
+
+*Synopsis*
+     void bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg);
+   *Description*
+Set the architecture info of ABFD to ARG.
+
+2.13.2.7 `bfd_default_set_arch_mach'
+....................................
+
+*Synopsis*
+     bfd_boolean bfd_default_set_arch_mach
+        (bfd *abfd, enum bfd_architecture arch, unsigned long mach);
+   *Description*
+Set the architecture and machine type in BFD ABFD to ARCH and MACH.
+Find the correct pointer to a structure and insert it into the
+`arch_info' pointer.
+
+2.13.2.8 `bfd_get_arch'
+.......................
+
+*Synopsis*
+     enum bfd_architecture bfd_get_arch (bfd *abfd);
+   *Description*
+Return the enumerated type which describes the BFD ABFD's architecture.
+
+2.13.2.9 `bfd_get_mach'
+.......................
+
+*Synopsis*
+     unsigned long bfd_get_mach (bfd *abfd);
+   *Description*
+Return the long type which describes the BFD ABFD's machine.
+
+2.13.2.10 `bfd_arch_bits_per_byte'
+..................................
+
+*Synopsis*
+     unsigned int bfd_arch_bits_per_byte (bfd *abfd);
+   *Description*
+Return the number of bits in one of the BFD ABFD's architecture's bytes.
+
+2.13.2.11 `bfd_arch_bits_per_address'
+.....................................
+
+*Synopsis*
+     unsigned int bfd_arch_bits_per_address (bfd *abfd);
+   *Description*
+Return the number of bits in one of the BFD ABFD's architecture's
+addresses.
+
+2.13.2.12 `bfd_default_compatible'
+..................................
+
+*Synopsis*
+     const bfd_arch_info_type *bfd_default_compatible
+        (const bfd_arch_info_type *a, const bfd_arch_info_type *b);
+   *Description*
+The default function for testing for compatibility.
+
+2.13.2.13 `bfd_default_scan'
+............................
+
+*Synopsis*
+     bfd_boolean bfd_default_scan
+        (const struct bfd_arch_info *info, const char *string);
+   *Description*
+The default function for working out whether this is an architecture
+hit and a machine hit.
+
+2.13.2.14 `bfd_get_arch_info'
+.............................
+
+*Synopsis*
+     const bfd_arch_info_type *bfd_get_arch_info (bfd *abfd);
+   *Description*
+Return the architecture info struct in ABFD.
+
+2.13.2.15 `bfd_lookup_arch'
+...........................
+
+*Synopsis*
+     const bfd_arch_info_type *bfd_lookup_arch
+        (enum bfd_architecture arch, unsigned long machine);
+   *Description*
+Look for the architecture info structure which matches the arguments
+ARCH and MACHINE. A machine of 0 matches the machine/architecture
+structure which marks itself as the default.
+
+2.13.2.16 `bfd_printable_arch_mach'
+...................................
+
+*Synopsis*
+     const char *bfd_printable_arch_mach
+        (enum bfd_architecture arch, unsigned long machine);
+   *Description*
+Return a printable string representing the architecture and machine
+type.
+
+   This routine is depreciated.
+
+2.13.2.17 `bfd_octets_per_byte'
+...............................
+
+*Synopsis*
+     unsigned int bfd_octets_per_byte (bfd *abfd);
+   *Description*
+Return the number of octets (8-bit quantities) per target byte (minimum
+addressable unit).  In most cases, this will be one, but some DSP
+targets have 16, 32, or even 48 bits per byte.
+
+2.13.2.18 `bfd_arch_mach_octets_per_byte'
+.........................................
+
+*Synopsis*
+     unsigned int bfd_arch_mach_octets_per_byte
+        (enum bfd_architecture arch, unsigned long machine);
+   *Description*
+See bfd_octets_per_byte.
+
+   This routine is provided for those cases where a bfd * is not
+available
+
+2.13.2.19 `bfd_arch_default_fill'
+.................................
+
+*Synopsis*
+     void *bfd_arch_default_fill (bfd_size_type count,
+         bfd_boolean is_bigendian,
+         bfd_boolean code);
+   *Description*
+Allocate via bfd_malloc and return a fill buffer of size COUNT.  If
+IS_BIGENDIAN is TRUE, the order of bytes is big endian.  If CODE is
+TRUE, the buffer contains code.
+
+
+File: bfd.info,  Node: Opening and Closing,  Next: Internal,  Prev: Architectures,  Up: BFD front end
+
+     /* Set to N to open the next N BFDs using an alternate id space.  */
+     extern unsigned int bfd_use_reserved_id;
+
+2.14 Opening and closing BFDs
+=============================
+
+2.14.1 Functions for opening and closing
+----------------------------------------
+
+2.14.1.1 `bfd_fopen'
+....................
+
+*Synopsis*
+     bfd *bfd_fopen (const char *filename, const char *target,
+         const char *mode, int fd);
+   *Description*
+Open the file FILENAME with the target TARGET.  Return a pointer to the
+created BFD.  If FD is not -1, then `fdopen' is used to open the file;
+otherwise, `fopen' is used.  MODE is passed directly to `fopen' or
+`fdopen'.
+
+   Calls `bfd_find_target', so TARGET is interpreted as by that
+function.
+
+   The new BFD is marked as cacheable iff FD is -1.
+
+   If `NULL' is returned then an error has occured.   Possible errors
+are `bfd_error_no_memory', `bfd_error_invalid_target' or `system_call'
+error.
+
+   On error, FD is always closed.
+
+2.14.1.2 `bfd_openr'
+....................
+
+*Synopsis*
+     bfd *bfd_openr (const char *filename, const char *target);
+   *Description*
+Open the file FILENAME (using `fopen') with the target TARGET.  Return
+a pointer to the created BFD.
+
+   Calls `bfd_find_target', so TARGET is interpreted as by that
+function.
+
+   If `NULL' is returned then an error has occured.   Possible errors
+are `bfd_error_no_memory', `bfd_error_invalid_target' or `system_call'
+error.
+
+2.14.1.3 `bfd_fdopenr'
+......................
+
+*Synopsis*
+     bfd *bfd_fdopenr (const char *filename, const char *target, int fd);
+   *Description*
+`bfd_fdopenr' is to `bfd_fopenr' much like `fdopen' is to `fopen'.  It
+opens a BFD on a file already described by the FD supplied.
+
+   When the file is later `bfd_close'd, the file descriptor will be
+closed.  If the caller desires that this file descriptor be cached by
+BFD (opened as needed, closed as needed to free descriptors for other
+opens), with the supplied FD used as an initial file descriptor (but
+subject to closure at any time), call bfd_set_cacheable(bfd, 1) on the
+returned BFD.  The default is to assume no caching; the file descriptor
+will remain open until `bfd_close', and will not be affected by BFD
+operations on other files.
+
+   Possible errors are `bfd_error_no_memory',
+`bfd_error_invalid_target' and `bfd_error_system_call'.
+
+   On error, FD is closed.
+
+2.14.1.4 `bfd_openstreamr'
+..........................
+
+*Synopsis*
+     bfd *bfd_openstreamr (const char *, const char *, void *);
+   *Description*
+Open a BFD for read access on an existing stdio stream.  When the BFD
+is passed to `bfd_close', the stream will be closed.
+
+2.14.1.5 `bfd_openr_iovec'
+..........................
+
+*Synopsis*
+     bfd *bfd_openr_iovec (const char *filename, const char *target,
+         void *(*open_func) (struct bfd *nbfd,
+         void *open_closure),
+         void *open_closure,
+         file_ptr (*pread_func) (struct bfd *nbfd,
+         void *stream,
+         void *buf,
+         file_ptr nbytes,
+         file_ptr offset),
+         int (*close_func) (struct bfd *nbfd,
+         void *stream),
+         int (*stat_func) (struct bfd *abfd,
+         void *stream,
+         struct stat *sb));
+   *Description*
+Create and return a BFD backed by a read-only STREAM.  The STREAM is
+created using OPEN_FUNC, accessed using PREAD_FUNC and destroyed using
+CLOSE_FUNC.
+
+   Calls `bfd_find_target', so TARGET is interpreted as by that
+function.
+
+   Calls OPEN_FUNC (which can call `bfd_zalloc' and `bfd_get_filename')
+to obtain the read-only stream backing the BFD.  OPEN_FUNC either
+succeeds returning the non-`NULL' STREAM, or fails returning `NULL'
+(setting `bfd_error').
+
+   Calls PREAD_FUNC to request NBYTES of data from STREAM starting at
+OFFSET (e.g., via a call to `bfd_read').  PREAD_FUNC either succeeds
+returning the number of bytes read (which can be less than NBYTES when
+end-of-file), or fails returning -1 (setting `bfd_error').
+
+   Calls CLOSE_FUNC when the BFD is later closed using `bfd_close'.
+CLOSE_FUNC either succeeds returning 0, or fails returning -1 (setting
+`bfd_error').
+
+   Calls STAT_FUNC to fill in a stat structure for bfd_stat,
+bfd_get_size, and bfd_get_mtime calls.  STAT_FUNC returns 0 on success,
+or returns -1 on failure (setting `bfd_error').
+
+   If `bfd_openr_iovec' returns `NULL' then an error has occurred.
+Possible errors are `bfd_error_no_memory', `bfd_error_invalid_target'
+and `bfd_error_system_call'.
+
+2.14.1.6 `bfd_openw'
+....................
+
+*Synopsis*
+     bfd *bfd_openw (const char *filename, const char *target);
+   *Description*
+Create a BFD, associated with file FILENAME, using the file format
+TARGET, and return a pointer to it.
+
+   Possible errors are `bfd_error_system_call', `bfd_error_no_memory',
+`bfd_error_invalid_target'.
+
+2.14.1.7 `bfd_close'
+....................
+
+*Synopsis*
+     bfd_boolean bfd_close (bfd *abfd);
+   *Description*
+Close a BFD. If the BFD was open for writing, then pending operations
+are completed and the file written out and closed.  If the created file
+is executable, then `chmod' is called to mark it as such.
+
+   All memory attached to the BFD is released.
+
+   The file descriptor associated with the BFD is closed (even if it
+was passed in to BFD by `bfd_fdopenr').
+
+   *Returns*
+`TRUE' is returned if all is ok, otherwise `FALSE'.
+
+2.14.1.8 `bfd_close_all_done'
+.............................
+
+*Synopsis*
+     bfd_boolean bfd_close_all_done (bfd *);
+   *Description*
+Close a BFD.  Differs from `bfd_close' since it does not complete any
+pending operations.  This routine would be used if the application had
+just used BFD for swapping and didn't want to use any of the writing
+code.
+
+   If the created file is executable, then `chmod' is called to mark it
+as such.
+
+   All memory attached to the BFD is released.
+
+   *Returns*
+`TRUE' is returned if all is ok, otherwise `FALSE'.
+
+2.14.1.9 `bfd_create'
+.....................
+
+*Synopsis*
+     bfd *bfd_create (const char *filename, bfd *templ);
+   *Description*
+Create a new BFD in the manner of `bfd_openw', but without opening a
+file. The new BFD takes the target from the target used by TEMPL. The
+format is always set to `bfd_object'.
+
+2.14.1.10 `bfd_make_writable'
+.............................
+
+*Synopsis*
+     bfd_boolean bfd_make_writable (bfd *abfd);
+   *Description*
+Takes a BFD as created by `bfd_create' and converts it into one like as
+returned by `bfd_openw'.  It does this by converting the BFD to
+BFD_IN_MEMORY.  It's assumed that you will call `bfd_make_readable' on
+this bfd later.
+
+   *Returns*
+`TRUE' is returned if all is ok, otherwise `FALSE'.
+
+2.14.1.11 `bfd_make_readable'
+.............................
+
+*Synopsis*
+     bfd_boolean bfd_make_readable (bfd *abfd);
+   *Description*
+Takes a BFD as created by `bfd_create' and `bfd_make_writable' and
+converts it into one like as returned by `bfd_openr'.  It does this by
+writing the contents out to the memory buffer, then reversing the
+direction.
+
+   *Returns*
+`TRUE' is returned if all is ok, otherwise `FALSE'.
+
+2.14.1.12 `bfd_alloc'
+.....................
+
+*Synopsis*
+     void *bfd_alloc (bfd *abfd, bfd_size_type wanted);
+   *Description*
+Allocate a block of WANTED bytes of memory attached to `abfd' and
+return a pointer to it.
+
+2.14.1.13 `bfd_alloc2'
+......................
+
+*Synopsis*
+     void *bfd_alloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size);
+   *Description*
+Allocate a block of NMEMB elements of SIZE bytes each of memory
+attached to `abfd' and return a pointer to it.
+
+2.14.1.14 `bfd_zalloc'
+......................
+
+*Synopsis*
+     void *bfd_zalloc (bfd *abfd, bfd_size_type wanted);
+   *Description*
+Allocate a block of WANTED bytes of zeroed memory attached to `abfd'
+and return a pointer to it.
+
+2.14.1.15 `bfd_zalloc2'
+.......................
+
+*Synopsis*
+     void *bfd_zalloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size);
+   *Description*
+Allocate a block of NMEMB elements of SIZE bytes each of zeroed memory
+attached to `abfd' and return a pointer to it.
+
+2.14.1.16 `bfd_calc_gnu_debuglink_crc32'
+........................................
+
+*Synopsis*
+     unsigned long bfd_calc_gnu_debuglink_crc32
+        (unsigned long crc, const unsigned char *buf, bfd_size_type len);
+   *Description*
+Computes a CRC value as used in the .gnu_debuglink section.  Advances
+the previously computed CRC value by computing and adding in the crc32
+for LEN bytes of BUF.
+
+   *Returns*
+Return the updated CRC32 value.
+
+2.14.1.17 `get_debug_link_info'
+...............................
+
+*Synopsis*
+     char *get_debug_link_info (bfd *abfd, unsigned long *crc32_out);
+   *Description*
+fetch the filename and CRC32 value for any separate debuginfo
+associated with ABFD. Return NULL if no such info found, otherwise
+return filename and update CRC32_OUT.
+
+2.14.1.18 `separate_debug_file_exists'
+......................................
+
+*Synopsis*
+     bfd_boolean separate_debug_file_exists
+        (char *name, unsigned long crc32);
+   *Description*
+Checks to see if NAME is a file and if its contents match CRC32.
+
+2.14.1.19 `find_separate_debug_file'
+....................................
+
+*Synopsis*
+     char *find_separate_debug_file (bfd *abfd);
+   *Description*
+Searches ABFD for a reference to separate debugging information, scans
+various locations in the filesystem, including the file tree rooted at
+DEBUG_FILE_DIRECTORY, and returns a filename of such debugging
+information if the file is found and has matching CRC32.  Returns NULL
+if no reference to debugging file exists, or file cannot be found.
+
+2.14.1.20 `bfd_follow_gnu_debuglink'
+....................................
+
+*Synopsis*
+     char *bfd_follow_gnu_debuglink (bfd *abfd, const char *dir);
+   *Description*
+Takes a BFD and searches it for a .gnu_debuglink section.  If this
+section is found, it examines the section for the name and checksum of
+a '.debug' file containing auxiliary debugging information.  It then
+searches the filesystem for this .debug file in some standard
+locations, including the directory tree rooted at DIR, and if found
+returns the full filename.
+
+   If DIR is NULL, it will search a default path configured into libbfd
+at build time.  [XXX this feature is not currently implemented].
+
+   *Returns*
+`NULL' on any errors or failure to locate the .debug file, otherwise a
+pointer to a heap-allocated string containing the filename.  The caller
+is responsible for freeing this string.
+
+2.14.1.21 `bfd_create_gnu_debuglink_section'
+............................................
+
+*Synopsis*
+     struct bfd_section *bfd_create_gnu_debuglink_section
+        (bfd *abfd, const char *filename);
+   *Description*
+Takes a BFD and adds a .gnu_debuglink section to it.  The section is
+sized to be big enough to contain a link to the specified FILENAME.
+
+   *Returns*
+A pointer to the new section is returned if all is ok.  Otherwise
+`NULL' is returned and bfd_error is set.
+
+2.14.1.22 `bfd_fill_in_gnu_debuglink_section'
+.............................................
+
+*Synopsis*
+     bfd_boolean bfd_fill_in_gnu_debuglink_section
+        (bfd *abfd, struct bfd_section *sect, const char *filename);
+   *Description*
+Takes a BFD and containing a .gnu_debuglink section SECT and fills in
+the contents of the section to contain a link to the specified
+FILENAME.  The filename should be relative to the current directory.
+
+   *Returns*
+`TRUE' is returned if all is ok.  Otherwise `FALSE' is returned and
+bfd_error is set.
+
+
+File: bfd.info,  Node: Internal,  Next: File Caching,  Prev: Opening and Closing,  Up: BFD front end
+
+2.15 Implementation details
+===========================
+
+2.15.1 Internal functions
+-------------------------
+
+*Description*
+These routines are used within BFD.  They are not intended for export,
+but are documented here for completeness.
+
+2.15.1.1 `bfd_write_bigendian_4byte_int'
+........................................
+
+*Synopsis*
+     bfd_boolean bfd_write_bigendian_4byte_int (bfd *, unsigned int);
+   *Description*
+Write a 4 byte integer I to the output BFD ABFD, in big endian order
+regardless of what else is going on.  This is useful in archives.
+
+2.15.1.2 `bfd_put_size'
+.......................
+
+2.15.1.3 `bfd_get_size'
+.......................
+
+*Description*
+These macros as used for reading and writing raw data in sections; each
+access (except for bytes) is vectored through the target format of the
+BFD and mangled accordingly. The mangling performs any necessary endian
+translations and removes alignment restrictions.  Note that types
+accepted and returned by these macros are identical so they can be
+swapped around in macros--for example, `libaout.h' defines `GET_WORD'
+to either `bfd_get_32' or `bfd_get_64'.
+
+   In the put routines, VAL must be a `bfd_vma'.  If we are on a system
+without prototypes, the caller is responsible for making sure that is
+true, with a cast if necessary.  We don't cast them in the macro
+definitions because that would prevent `lint' or `gcc -Wall' from
+detecting sins such as passing a pointer.  To detect calling these with
+less than a `bfd_vma', use `gcc -Wconversion' on a host with 64 bit
+`bfd_vma''s.
+
+     /* Byte swapping macros for user section data.  */
+
+     #define bfd_put_8(abfd, val, ptr) \
+       ((void) (*((unsigned char *) (ptr)) = (val) & 0xff))
+     #define bfd_put_signed_8 \
+       bfd_put_8
+     #define bfd_get_8(abfd, ptr) \
+       (*(const unsigned char *) (ptr) & 0xff)
+     #define bfd_get_signed_8(abfd, ptr) \
+       (((*(const unsigned char *) (ptr) & 0xff) ^ 0x80) - 0x80)
+
+     #define bfd_put_16(abfd, val, ptr) \
+       BFD_SEND (abfd, bfd_putx16, ((val),(ptr)))
+     #define bfd_put_signed_16 \
+       bfd_put_16
+     #define bfd_get_16(abfd, ptr) \
+       BFD_SEND (abfd, bfd_getx16, (ptr))
+     #define bfd_get_signed_16(abfd, ptr) \
+       BFD_SEND (abfd, bfd_getx_signed_16, (ptr))
+
+     #define bfd_put_32(abfd, val, ptr) \
+       BFD_SEND (abfd, bfd_putx32, ((val),(ptr)))
+     #define bfd_put_signed_32 \
+       bfd_put_32
+     #define bfd_get_32(abfd, ptr) \
+       BFD_SEND (abfd, bfd_getx32, (ptr))
+     #define bfd_get_signed_32(abfd, ptr) \
+       BFD_SEND (abfd, bfd_getx_signed_32, (ptr))
+
+     #define bfd_put_64(abfd, val, ptr) \
+       BFD_SEND (abfd, bfd_putx64, ((val), (ptr)))
+     #define bfd_put_signed_64 \
+       bfd_put_64
+     #define bfd_get_64(abfd, ptr) \
+       BFD_SEND (abfd, bfd_getx64, (ptr))
+     #define bfd_get_signed_64(abfd, ptr) \
+       BFD_SEND (abfd, bfd_getx_signed_64, (ptr))
+
+     #define bfd_get(bits, abfd, ptr)                       \
+       ((bits) == 8 ? (bfd_vma) bfd_get_8 (abfd, ptr)       \
+        : (bits) == 16 ? bfd_get_16 (abfd, ptr)             \
+        : (bits) == 32 ? bfd_get_32 (abfd, ptr)             \
+        : (bits) == 64 ? bfd_get_64 (abfd, ptr)             \
+        : (abort (), (bfd_vma) - 1))
+
+     #define bfd_put(bits, abfd, val, ptr)                  \
+       ((bits) == 8 ? bfd_put_8  (abfd, val, ptr)           \
+        : (bits) == 16 ? bfd_put_16 (abfd, val, ptr)                \
+        : (bits) == 32 ? bfd_put_32 (abfd, val, ptr)                \
+        : (bits) == 64 ? bfd_put_64 (abfd, val, ptr)                \
+        : (abort (), (void) 0))
+
+2.15.1.4 `bfd_h_put_size'
+.........................
+
+*Description*
+These macros have the same function as their `bfd_get_x' brethren,
+except that they are used for removing information for the header
+records of object files. Believe it or not, some object files keep
+their header records in big endian order and their data in little
+endian order.
+
+     /* Byte swapping macros for file header data.  */
+
+     #define bfd_h_put_8(abfd, val, ptr) \
+       bfd_put_8 (abfd, val, ptr)
+     #define bfd_h_put_signed_8(abfd, val, ptr) \
+       bfd_put_8 (abfd, val, ptr)
+     #define bfd_h_get_8(abfd, ptr) \
+       bfd_get_8 (abfd, ptr)
+     #define bfd_h_get_signed_8(abfd, ptr) \
+       bfd_get_signed_8 (abfd, ptr)
+
+     #define bfd_h_put_16(abfd, val, ptr) \
+       BFD_SEND (abfd, bfd_h_putx16, (val, ptr))
+     #define bfd_h_put_signed_16 \
+       bfd_h_put_16
+     #define bfd_h_get_16(abfd, ptr) \
+       BFD_SEND (abfd, bfd_h_getx16, (ptr))
+     #define bfd_h_get_signed_16(abfd, ptr) \
+       BFD_SEND (abfd, bfd_h_getx_signed_16, (ptr))
+
+     #define bfd_h_put_32(abfd, val, ptr) \
+       BFD_SEND (abfd, bfd_h_putx32, (val, ptr))
+     #define bfd_h_put_signed_32 \
+       bfd_h_put_32
+     #define bfd_h_get_32(abfd, ptr) \
+       BFD_SEND (abfd, bfd_h_getx32, (ptr))
+     #define bfd_h_get_signed_32(abfd, ptr) \
+       BFD_SEND (abfd, bfd_h_getx_signed_32, (ptr))
+
+     #define bfd_h_put_64(abfd, val, ptr) \
+       BFD_SEND (abfd, bfd_h_putx64, (val, ptr))
+     #define bfd_h_put_signed_64 \
+       bfd_h_put_64
+     #define bfd_h_get_64(abfd, ptr) \
+       BFD_SEND (abfd, bfd_h_getx64, (ptr))
+     #define bfd_h_get_signed_64(abfd, ptr) \
+       BFD_SEND (abfd, bfd_h_getx_signed_64, (ptr))
+
+     /* Aliases for the above, which should eventually go away.  */
+
+     #define H_PUT_64  bfd_h_put_64
+     #define H_PUT_32  bfd_h_put_32
+     #define H_PUT_16  bfd_h_put_16
+     #define H_PUT_8   bfd_h_put_8
+     #define H_PUT_S64 bfd_h_put_signed_64
+     #define H_PUT_S32 bfd_h_put_signed_32
+     #define H_PUT_S16 bfd_h_put_signed_16
+     #define H_PUT_S8  bfd_h_put_signed_8
+     #define H_GET_64  bfd_h_get_64
+     #define H_GET_32  bfd_h_get_32
+     #define H_GET_16  bfd_h_get_16
+     #define H_GET_8   bfd_h_get_8
+     #define H_GET_S64 bfd_h_get_signed_64
+     #define H_GET_S32 bfd_h_get_signed_32
+     #define H_GET_S16 bfd_h_get_signed_16
+     #define H_GET_S8  bfd_h_get_signed_8
+
+2.15.1.5 `bfd_log2'
+...................
+
+*Synopsis*
+     unsigned int bfd_log2 (bfd_vma x);
+   *Description*
+Return the log base 2 of the value supplied, rounded up.  E.g., an X of
+1025 returns 11.  A X of 0 returns 0.
+
+
+File: bfd.info,  Node: File Caching,  Next: Linker Functions,  Prev: Internal,  Up: BFD front end
+
+2.16 File caching
+=================
+
+The file caching mechanism is embedded within BFD and allows the
+application to open as many BFDs as it wants without regard to the
+underlying operating system's file descriptor limit (often as low as 20
+open files).  The module in `cache.c' maintains a least recently used
+list of `BFD_CACHE_MAX_OPEN' files, and exports the name
+`bfd_cache_lookup', which runs around and makes sure that the required
+BFD is open. If not, then it chooses a file to close, closes it and
+opens the one wanted, returning its file handle.
+
+2.16.1 Caching functions
+------------------------
+
+2.16.1.1 `bfd_cache_init'
+.........................
+
+*Synopsis*
+     bfd_boolean bfd_cache_init (bfd *abfd);
+   *Description*
+Add a newly opened BFD to the cache.
+
+2.16.1.2 `bfd_cache_close'
+..........................
+
+*Synopsis*
+     bfd_boolean bfd_cache_close (bfd *abfd);
+   *Description*
+Remove the BFD ABFD from the cache. If the attached file is open, then
+close it too.
+
+   *Returns*
+`FALSE' is returned if closing the file fails, `TRUE' is returned if
+all is well.
+
+2.16.1.3 `bfd_cache_close_all'
+..............................
+
+*Synopsis*
+     bfd_boolean bfd_cache_close_all (void);
+   *Description*
+Remove all BFDs from the cache. If the attached file is open, then
+close it too.
+
+   *Returns*
+`FALSE' is returned if closing one of the file fails, `TRUE' is
+returned if all is well.
+
+2.16.1.4 `bfd_open_file'
+........................
+
+*Synopsis*
+     FILE* bfd_open_file (bfd *abfd);
+   *Description*
+Call the OS to open a file for ABFD.  Return the `FILE *' (possibly
+`NULL') that results from this operation.  Set up the BFD so that
+future accesses know the file is open. If the `FILE *' returned is
+`NULL', then it won't have been put in the cache, so it won't have to
+be removed from it.
+
+
+File: bfd.info,  Node: Linker Functions,  Next: Hash Tables,  Prev: File Caching,  Up: BFD front end
+
+2.17 Linker Functions
+=====================
+
+The linker uses three special entry points in the BFD target vector.
+It is not necessary to write special routines for these entry points
+when creating a new BFD back end, since generic versions are provided.
+However, writing them can speed up linking and make it use
+significantly less runtime memory.
+
+   The first routine creates a hash table used by the other routines.
+The second routine adds the symbols from an object file to the hash
+table.  The third routine takes all the object files and links them
+together to create the output file.  These routines are designed so
+that the linker proper does not need to know anything about the symbols
+in the object files that it is linking.  The linker merely arranges the
+sections as directed by the linker script and lets BFD handle the
+details of symbols and relocs.
+
+   The second routine and third routines are passed a pointer to a
+`struct bfd_link_info' structure (defined in `bfdlink.h') which holds
+information relevant to the link, including the linker hash table
+(which was created by the first routine) and a set of callback
+functions to the linker proper.
+
+   The generic linker routines are in `linker.c', and use the header
+file `genlink.h'.  As of this writing, the only back ends which have
+implemented versions of these routines are a.out (in `aoutx.h') and
+ECOFF (in `ecoff.c').  The a.out routines are used as examples
+throughout this section.
+
+* Menu:
+
+* Creating a Linker Hash Table::
+* Adding Symbols to the Hash Table::
+* Performing the Final Link::
+
+
+File: bfd.info,  Node: Creating a Linker Hash Table,  Next: Adding Symbols to the Hash Table,  Prev: Linker Functions,  Up: Linker Functions
+
+2.17.1 Creating a linker hash table
+-----------------------------------
+
+The linker routines must create a hash table, which must be derived
+from `struct bfd_link_hash_table' described in `bfdlink.c'.  *Note Hash
+Tables::, for information on how to create a derived hash table.  This
+entry point is called using the target vector of the linker output file.
+
+   The `_bfd_link_hash_table_create' entry point must allocate and
+initialize an instance of the desired hash table.  If the back end does
+not require any additional information to be stored with the entries in
+the hash table, the entry point may simply create a `struct
+bfd_link_hash_table'.  Most likely, however, some additional
+information will be needed.
+
+   For example, with each entry in the hash table the a.out linker
+keeps the index the symbol has in the final output file (this index
+number is used so that when doing a relocatable link the symbol index
+used in the output file can be quickly filled in when copying over a
+reloc).  The a.out linker code defines the required structures and
+functions for a hash table derived from `struct bfd_link_hash_table'.
+The a.out linker hash table is created by the function
+`NAME(aout,link_hash_table_create)'; it simply allocates space for the
+hash table, initializes it, and returns a pointer to it.
+
+   When writing the linker routines for a new back end, you will
+generally not know exactly which fields will be required until you have
+finished.  You should simply create a new hash table which defines no
+additional fields, and then simply add fields as they become necessary.
+
+
+File: bfd.info,  Node: Adding Symbols to the Hash Table,  Next: Performing the Final Link,  Prev: Creating a Linker Hash Table,  Up: Linker Functions
+
+2.17.2 Adding symbols to the hash table
+---------------------------------------
+
+The linker proper will call the `_bfd_link_add_symbols' entry point for
+each object file or archive which is to be linked (typically these are
+the files named on the command line, but some may also come from the
+linker script).  The entry point is responsible for examining the file.
+For an object file, BFD must add any relevant symbol information to
+the hash table.  For an archive, BFD must determine which elements of
+the archive should be used and adding them to the link.
+
+   The a.out version of this entry point is
+`NAME(aout,link_add_symbols)'.
+
+* Menu:
+
+* Differing file formats::
+* Adding symbols from an object file::
+* Adding symbols from an archive::
+
+
+File: bfd.info,  Node: Differing file formats,  Next: Adding symbols from an object file,  Prev: Adding Symbols to the Hash Table,  Up: Adding Symbols to the Hash Table
+
+2.17.2.1 Differing file formats
+...............................
+
+Normally all the files involved in a link will be of the same format,
+but it is also possible to link together different format object files,
+and the back end must support that.  The `_bfd_link_add_symbols' entry
+point is called via the target vector of the file to be added.  This
+has an important consequence: the function may not assume that the hash
+table is the type created by the corresponding
+`_bfd_link_hash_table_create' vector.  All the `_bfd_link_add_symbols'
+function can assume about the hash table is that it is derived from
+`struct bfd_link_hash_table'.
+
+   Sometimes the `_bfd_link_add_symbols' function must store some
+information in the hash table entry to be used by the `_bfd_final_link'
+function.  In such a case the output bfd xvec must be checked to make
+sure that the hash table was created by an object file of the same
+format.
+
+   The `_bfd_final_link' routine must be prepared to handle a hash
+entry without any extra information added by the
+`_bfd_link_add_symbols' function.  A hash entry without extra
+information will also occur when the linker script directs the linker
+to create a symbol.  Note that, regardless of how a hash table entry is
+added, all the fields will be initialized to some sort of null value by
+the hash table entry initialization function.
+
+   See `ecoff_link_add_externals' for an example of how to check the
+output bfd before saving information (in this case, the ECOFF external
+symbol debugging information) in a hash table entry.
+
+
+File: bfd.info,  Node: Adding symbols from an object file,  Next: Adding symbols from an archive,  Prev: Differing file formats,  Up: Adding Symbols to the Hash Table
+
+2.17.2.2 Adding symbols from an object file
+...........................................
+
+When the `_bfd_link_add_symbols' routine is passed an object file, it
+must add all externally visible symbols in that object file to the hash
+table.  The actual work of adding the symbol to the hash table is
+normally handled by the function `_bfd_generic_link_add_one_symbol'.
+The `_bfd_link_add_symbols' routine is responsible for reading all the
+symbols from the object file and passing the correct information to
+`_bfd_generic_link_add_one_symbol'.
+
+   The `_bfd_link_add_symbols' routine should not use
+`bfd_canonicalize_symtab' to read the symbols.  The point of providing
+this routine is to avoid the overhead of converting the symbols into
+generic `asymbol' structures.
+
+   `_bfd_generic_link_add_one_symbol' handles the details of combining
+common symbols, warning about multiple definitions, and so forth.  It
+takes arguments which describe the symbol to add, notably symbol flags,
+a section, and an offset.  The symbol flags include such things as
+`BSF_WEAK' or `BSF_INDIRECT'.  The section is a section in the object
+file, or something like `bfd_und_section_ptr' for an undefined symbol
+or `bfd_com_section_ptr' for a common symbol.
+
+   If the `_bfd_final_link' routine is also going to need to read the
+symbol information, the `_bfd_link_add_symbols' routine should save it
+somewhere attached to the object file BFD.  However, the information
+should only be saved if the `keep_memory' field of the `info' argument
+is TRUE, so that the `-no-keep-memory' linker switch is effective.
+
+   The a.out function which adds symbols from an object file is
+`aout_link_add_object_symbols', and most of the interesting work is in
+`aout_link_add_symbols'.  The latter saves pointers to the hash tables
+entries created by `_bfd_generic_link_add_one_symbol' indexed by symbol
+number, so that the `_bfd_final_link' routine does not have to call the
+hash table lookup routine to locate the entry.
+
+
+File: bfd.info,  Node: Adding symbols from an archive,  Prev: Adding symbols from an object file,  Up: Adding Symbols to the Hash Table
+
+2.17.2.3 Adding symbols from an archive
+.......................................
+
+When the `_bfd_link_add_symbols' routine is passed an archive, it must
+look through the symbols defined by the archive and decide which
+elements of the archive should be included in the link.  For each such
+element it must call the `add_archive_element' linker callback, and it
+must add the symbols from the object file to the linker hash table.
+(The callback may in fact indicate that a replacement BFD should be
+used, in which case the symbols from that BFD should be added to the
+linker hash table instead.)
+
+   In most cases the work of looking through the symbols in the archive
+should be done by the `_bfd_generic_link_add_archive_symbols' function.
+This function builds a hash table from the archive symbol table and
+looks through the list of undefined symbols to see which elements
+should be included.  `_bfd_generic_link_add_archive_symbols' is passed
+a function to call to make the final decision about adding an archive
+element to the link and to do the actual work of adding the symbols to
+the linker hash table.
+
+   The function passed to `_bfd_generic_link_add_archive_symbols' must
+read the symbols of the archive element and decide whether the archive
+element should be included in the link.  If the element is to be
+included, the `add_archive_element' linker callback routine must be
+called with the element as an argument, and the element's symbols must
+be added to the linker hash table just as though the element had itself
+been passed to the `_bfd_link_add_symbols' function.  The
+`add_archive_element' callback has the option to indicate that it would
+like to replace the element archive with a substitute BFD, in which
+case it is the symbols of that substitute BFD that must be added to the
+linker hash table instead.
+
+   When the a.out `_bfd_link_add_symbols' function receives an archive,
+it calls `_bfd_generic_link_add_archive_symbols' passing
+`aout_link_check_archive_element' as the function argument.
+`aout_link_check_archive_element' calls `aout_link_check_ar_symbols'.
+If the latter decides to add the element (an element is only added if
+it provides a real, non-common, definition for a previously undefined
+or common symbol) it calls the `add_archive_element' callback and then
+`aout_link_check_archive_element' calls `aout_link_add_symbols' to
+actually add the symbols to the linker hash table - possibly those of a
+substitute BFD, if the `add_archive_element' callback avails itself of
+that option.
+
+   The ECOFF back end is unusual in that it does not normally call
+`_bfd_generic_link_add_archive_symbols', because ECOFF archives already
+contain a hash table of symbols.  The ECOFF back end searches the
+archive itself to avoid the overhead of creating a new hash table.
+
+
+File: bfd.info,  Node: Performing the Final Link,  Prev: Adding Symbols to the Hash Table,  Up: Linker Functions
+
+2.17.3 Performing the final link
+--------------------------------
+
+When all the input files have been processed, the linker calls the
+`_bfd_final_link' entry point of the output BFD.  This routine is
+responsible for producing the final output file, which has several
+aspects.  It must relocate the contents of the input sections and copy
+the data into the output sections.  It must build an output symbol
+table including any local symbols from the input files and the global
+symbols from the hash table.  When producing relocatable output, it must
+modify the input relocs and write them into the output file.  There may
+also be object format dependent work to be done.
+
+   The linker will also call the `write_object_contents' entry point
+when the BFD is closed.  The two entry points must work together in
+order to produce the correct output file.
+
+   The details of how this works are inevitably dependent upon the
+specific object file format.  The a.out `_bfd_final_link' routine is
+`NAME(aout,final_link)'.
+
+* Menu:
+
+* Information provided by the linker::
+* Relocating the section contents::
+* Writing the symbol table::
+
+
+File: bfd.info,  Node: Information provided by the linker,  Next: Relocating the section contents,  Prev: Performing the Final Link,  Up: Performing the Final Link
+
+2.17.3.1 Information provided by the linker
+...........................................
+
+Before the linker calls the `_bfd_final_link' entry point, it sets up
+some data structures for the function to use.
+
+   The `input_bfds' field of the `bfd_link_info' structure will point
+to a list of all the input files included in the link.  These files are
+linked through the `link_next' field of the `bfd' structure.
+
+   Each section in the output file will have a list of `link_order'
+structures attached to the `map_head.link_order' field (the
+`link_order' structure is defined in `bfdlink.h').  These structures
+describe how to create the contents of the output section in terms of
+the contents of various input sections, fill constants, and,
+eventually, other types of information.  They also describe relocs that
+must be created by the BFD backend, but do not correspond to any input
+file; this is used to support -Ur, which builds constructors while
+generating a relocatable object file.
+
+
+File: bfd.info,  Node: Relocating the section contents,  Next: Writing the symbol table,  Prev: Information provided by the linker,  Up: Performing the Final Link
+
+2.17.3.2 Relocating the section contents
+........................................
+
+The `_bfd_final_link' function should look through the `link_order'
+structures attached to each section of the output file.  Each
+`link_order' structure should either be handled specially, or it should
+be passed to the function `_bfd_default_link_order' which will do the
+right thing (`_bfd_default_link_order' is defined in `linker.c').
+
+   For efficiency, a `link_order' of type `bfd_indirect_link_order'
+whose associated section belongs to a BFD of the same format as the
+output BFD must be handled specially.  This type of `link_order'
+describes part of an output section in terms of a section belonging to
+one of the input files.  The `_bfd_final_link' function should read the
+contents of the section and any associated relocs, apply the relocs to
+the section contents, and write out the modified section contents.  If
+performing a relocatable link, the relocs themselves must also be
+modified and written out.
+
+   The functions `_bfd_relocate_contents' and
+`_bfd_final_link_relocate' provide some general support for performing
+the actual relocations, notably overflow checking.  Their arguments
+include information about the symbol the relocation is against and a
+`reloc_howto_type' argument which describes the relocation to perform.
+These functions are defined in `reloc.c'.
+
+   The a.out function which handles reading, relocating, and writing
+section contents is `aout_link_input_section'.  The actual relocation
+is done in `aout_link_input_section_std' and
+`aout_link_input_section_ext'.
+
+
+File: bfd.info,  Node: Writing the symbol table,  Prev: Relocating the section contents,  Up: Performing the Final Link
+
+2.17.3.3 Writing the symbol table
+.................................
+
+The `_bfd_final_link' function must gather all the symbols in the input
+files and write them out.  It must also write out all the symbols in
+the global hash table.  This must be controlled by the `strip' and
+`discard' fields of the `bfd_link_info' structure.
+
+   The local symbols of the input files will not have been entered into
+the linker hash table.  The `_bfd_final_link' routine must consider
+each input file and include the symbols in the output file.  It may be
+convenient to do this when looking through the `link_order' structures,
+or it may be done by stepping through the `input_bfds' list.
+
+   The `_bfd_final_link' routine must also traverse the global hash
+table to gather all the externally visible symbols.  It is possible
+that most of the externally visible symbols may be written out when
+considering the symbols of each input file, but it is still necessary
+to traverse the hash table since the linker script may have defined
+some symbols that are not in any of the input files.
+
+   The `strip' field of the `bfd_link_info' structure controls which
+symbols are written out.  The possible values are listed in
+`bfdlink.h'.  If the value is `strip_some', then the `keep_hash' field
+of the `bfd_link_info' structure is a hash table of symbols to keep;
+each symbol should be looked up in this hash table, and only symbols
+which are present should be included in the output file.
+
+   If the `strip' field of the `bfd_link_info' structure permits local
+symbols to be written out, the `discard' field is used to further
+controls which local symbols are included in the output file.  If the
+value is `discard_l', then all local symbols which begin with a certain
+prefix are discarded; this is controlled by the
+`bfd_is_local_label_name' entry point.
+
+   The a.out backend handles symbols by calling
+`aout_link_write_symbols' on each input BFD and then traversing the
+global hash table with the function `aout_link_write_other_symbol'.  It
+builds a string table while writing out the symbols, which is written
+to the output file at the end of `NAME(aout,final_link)'.
+
+2.17.3.4 `bfd_link_split_section'
+.................................
+
+*Synopsis*
+     bfd_boolean bfd_link_split_section (bfd *abfd, asection *sec);
+   *Description*
+Return nonzero if SEC should be split during a reloceatable or final
+link.
+     #define bfd_link_split_section(abfd, sec) \
+            BFD_SEND (abfd, _bfd_link_split_section, (abfd, sec))
+
+2.17.3.5 `bfd_section_already_linked'
+.....................................
+
+*Synopsis*
+     bfd_boolean bfd_section_already_linked (bfd *abfd,
+         asection *sec,
+         struct bfd_link_info *info);
+   *Description*
+Check if DATA has been already linked during a reloceatable or final
+link.  Return TRUE if it has.
+     #define bfd_section_already_linked(abfd, sec, info) \
+            BFD_SEND (abfd, _section_already_linked, (abfd, sec, info))
+
+2.17.3.6 `bfd_generic_define_common_symbol'
+...........................................
+
+*Synopsis*
+     bfd_boolean bfd_generic_define_common_symbol
+        (bfd *output_bfd, struct bfd_link_info *info,
+         struct bfd_link_hash_entry *h);
+   *Description*
+Convert common symbol H into a defined symbol.  Return TRUE on success
+and FALSE on failure.
+     #define bfd_define_common_symbol(output_bfd, info, h) \
+            BFD_SEND (output_bfd, _bfd_define_common_symbol, (output_bfd, info, h))
+
+2.17.3.7 `bfd_find_version_for_sym '
+....................................
+
+*Synopsis*
+     struct bfd_elf_version_tree * bfd_find_version_for_sym
+        (struct bfd_elf_version_tree *verdefs,
+         const char *sym_name, bfd_boolean *hide);
+   *Description*
+Search an elf version script tree for symbol versioning info and export
+/ don't-export status for a given symbol.  Return non-NULL on success
+and NULL on failure; also sets the output `hide' boolean parameter.
+
+2.17.3.8 `bfd_hide_sym_by_version'
+..................................
+
+*Synopsis*
+     bfd_boolean bfd_hide_sym_by_version
+        (struct bfd_elf_version_tree *verdefs, const char *sym_name);
+   *Description*
+Search an elf version script tree for symbol versioning info for a
+given symbol.  Return TRUE if the symbol is hidden.
+
+
+File: bfd.info,  Node: Hash Tables,  Prev: Linker Functions,  Up: BFD front end
+
+2.18 Hash Tables
+================
+
+BFD provides a simple set of hash table functions.  Routines are
+provided to initialize a hash table, to free a hash table, to look up a
+string in a hash table and optionally create an entry for it, and to
+traverse a hash table.  There is currently no routine to delete an
+string from a hash table.
+
+   The basic hash table does not permit any data to be stored with a
+string.  However, a hash table is designed to present a base class from
+which other types of hash tables may be derived.  These derived types
+may store additional information with the string.  Hash tables were
+implemented in this way, rather than simply providing a data pointer in
+a hash table entry, because they were designed for use by the linker
+back ends.  The linker may create thousands of hash table entries, and
+the overhead of allocating private data and storing and following
+pointers becomes noticeable.
+
+   The basic hash table code is in `hash.c'.
+
+* Menu:
+
+* Creating and Freeing a Hash Table::
+* Looking Up or Entering a String::
+* Traversing a Hash Table::
+* Deriving a New Hash Table Type::
+
+
+File: bfd.info,  Node: Creating and Freeing a Hash Table,  Next: Looking Up or Entering a String,  Prev: Hash Tables,  Up: Hash Tables
+
+2.18.1 Creating and freeing a hash table
+----------------------------------------
+
+To create a hash table, create an instance of a `struct bfd_hash_table'
+(defined in `bfd.h') and call `bfd_hash_table_init' (if you know
+approximately how many entries you will need, the function
+`bfd_hash_table_init_n', which takes a SIZE argument, may be used).
+`bfd_hash_table_init' returns `FALSE' if some sort of error occurs.
+
+   The function `bfd_hash_table_init' take as an argument a function to
+use to create new entries.  For a basic hash table, use the function
+`bfd_hash_newfunc'.  *Note Deriving a New Hash Table Type::, for why
+you would want to use a different value for this argument.
+
+   `bfd_hash_table_init' will create an objalloc which will be used to
+allocate new entries.  You may allocate memory on this objalloc using
+`bfd_hash_allocate'.
+
+   Use `bfd_hash_table_free' to free up all the memory that has been
+allocated for a hash table.  This will not free up the `struct
+bfd_hash_table' itself, which you must provide.
+
+   Use `bfd_hash_set_default_size' to set the default size of hash
+table to use.
+
+
+File: bfd.info,  Node: Looking Up or Entering a String,  Next: Traversing a Hash Table,  Prev: Creating and Freeing a Hash Table,  Up: Hash Tables
+
+2.18.2 Looking up or entering a string
+--------------------------------------
+
+The function `bfd_hash_lookup' is used both to look up a string in the
+hash table and to create a new entry.
+
+   If the CREATE argument is `FALSE', `bfd_hash_lookup' will look up a
+string.  If the string is found, it will returns a pointer to a `struct
+bfd_hash_entry'.  If the string is not found in the table
+`bfd_hash_lookup' will return `NULL'.  You should not modify any of the
+fields in the returns `struct bfd_hash_entry'.
+
+   If the CREATE argument is `TRUE', the string will be entered into
+the hash table if it is not already there.  Either way a pointer to a
+`struct bfd_hash_entry' will be returned, either to the existing
+structure or to a newly created one.  In this case, a `NULL' return
+means that an error occurred.
+
+   If the CREATE argument is `TRUE', and a new entry is created, the
+COPY argument is used to decide whether to copy the string onto the
+hash table objalloc or not.  If COPY is passed as `FALSE', you must be
+careful not to deallocate or modify the string as long as the hash table
+exists.
+
+
+File: bfd.info,  Node: Traversing a Hash Table,  Next: Deriving a New Hash Table Type,  Prev: Looking Up or Entering a String,  Up: Hash Tables
+
+2.18.3 Traversing a hash table
+------------------------------
+
+The function `bfd_hash_traverse' may be used to traverse a hash table,
+calling a function on each element.  The traversal is done in a random
+order.
+
+   `bfd_hash_traverse' takes as arguments a function and a generic
+`void *' pointer.  The function is called with a hash table entry (a
+`struct bfd_hash_entry *') and the generic pointer passed to
+`bfd_hash_traverse'.  The function must return a `boolean' value, which
+indicates whether to continue traversing the hash table.  If the
+function returns `FALSE', `bfd_hash_traverse' will stop the traversal
+and return immediately.
+
+
+File: bfd.info,  Node: Deriving a New Hash Table Type,  Prev: Traversing a Hash Table,  Up: Hash Tables
+
+2.18.4 Deriving a new hash table type
+-------------------------------------
+
+Many uses of hash tables want to store additional information which
+each entry in the hash table.  Some also find it convenient to store
+additional information with the hash table itself.  This may be done
+using a derived hash table.
+
+   Since C is not an object oriented language, creating a derived hash
+table requires sticking together some boilerplate routines with a few
+differences specific to the type of hash table you want to create.
+
+   An example of a derived hash table is the linker hash table.  The
+structures for this are defined in `bfdlink.h'.  The functions are in
+`linker.c'.
+
+   You may also derive a hash table from an already derived hash table.
+For example, the a.out linker backend code uses a hash table derived
+from the linker hash table.
+
+* Menu:
+
+* Define the Derived Structures::
+* Write the Derived Creation Routine::
+* Write Other Derived Routines::
+
+
+File: bfd.info,  Node: Define the Derived Structures,  Next: Write the Derived Creation Routine,  Prev: Deriving a New Hash Table Type,  Up: Deriving a New Hash Table Type
+
+2.18.4.1 Define the derived structures
+......................................
+
+You must define a structure for an entry in the hash table, and a
+structure for the hash table itself.
+
+   The first field in the structure for an entry in the hash table must
+be of the type used for an entry in the hash table you are deriving
+from.  If you are deriving from a basic hash table this is `struct
+bfd_hash_entry', which is defined in `bfd.h'.  The first field in the
+structure for the hash table itself must be of the type of the hash
+table you are deriving from itself.  If you are deriving from a basic
+hash table, this is `struct bfd_hash_table'.
+
+   For example, the linker hash table defines `struct
+bfd_link_hash_entry' (in `bfdlink.h').  The first field, `root', is of
+type `struct bfd_hash_entry'.  Similarly, the first field in `struct
+bfd_link_hash_table', `table', is of type `struct bfd_hash_table'.
+
+
+File: bfd.info,  Node: Write the Derived Creation Routine,  Next: Write Other Derived Routines,  Prev: Define the Derived Structures,  Up: Deriving a New Hash Table Type
+
+2.18.4.2 Write the derived creation routine
+...........................................
+
+You must write a routine which will create and initialize an entry in
+the hash table.  This routine is passed as the function argument to
+`bfd_hash_table_init'.
+
+   In order to permit other hash tables to be derived from the hash
+table you are creating, this routine must be written in a standard way.
+
+   The first argument to the creation routine is a pointer to a hash
+table entry.  This may be `NULL', in which case the routine should
+allocate the right amount of space.  Otherwise the space has already
+been allocated by a hash table type derived from this one.
+
+   After allocating space, the creation routine must call the creation
+routine of the hash table type it is derived from, passing in a pointer
+to the space it just allocated.  This will initialize any fields used
+by the base hash table.
+
+   Finally the creation routine must initialize any local fields for
+the new hash table type.
+
+   Here is a boilerplate example of a creation routine.  FUNCTION_NAME
+is the name of the routine.  ENTRY_TYPE is the type of an entry in the
+hash table you are creating.  BASE_NEWFUNC is the name of the creation
+routine of the hash table type your hash table is derived from.
+
+     struct bfd_hash_entry *
+     FUNCTION_NAME (struct bfd_hash_entry *entry,
+                          struct bfd_hash_table *table,
+                          const char *string)
+     {
+       struct ENTRY_TYPE *ret = (ENTRY_TYPE *) entry;
+
+      /* Allocate the structure if it has not already been allocated by a
+         derived class.  */
+       if (ret == NULL)
+         {
+           ret = bfd_hash_allocate (table, sizeof (* ret));
+           if (ret == NULL)
+             return NULL;
+         }
+
+      /* Call the allocation method of the base class.  */
+       ret = ((ENTRY_TYPE *)
+             BASE_NEWFUNC ((struct bfd_hash_entry *) ret, table, string));
+
+      /* Initialize the local fields here.  */
+
+       return (struct bfd_hash_entry *) ret;
+     }
+   *Description*
+The creation routine for the linker hash table, which is in `linker.c',
+looks just like this example.  FUNCTION_NAME is
+`_bfd_link_hash_newfunc'.  ENTRY_TYPE is `struct bfd_link_hash_entry'.
+BASE_NEWFUNC is `bfd_hash_newfunc', the creation routine for a basic
+hash table.
+
+   `_bfd_link_hash_newfunc' also initializes the local fields in a
+linker hash table entry: `type', `written' and `next'.
+
+
+File: bfd.info,  Node: Write Other Derived Routines,  Prev: Write the Derived Creation Routine,  Up: Deriving a New Hash Table Type
+
+2.18.4.3 Write other derived routines
+.....................................
+
+You will want to write other routines for your new hash table, as well.
+
+   You will want an initialization routine which calls the
+initialization routine of the hash table you are deriving from and
+initializes any other local fields.  For the linker hash table, this is
+`_bfd_link_hash_table_init' in `linker.c'.
+
+   You will want a lookup routine which calls the lookup routine of the
+hash table you are deriving from and casts the result.  The linker hash
+table uses `bfd_link_hash_lookup' in `linker.c' (this actually takes an
+additional argument which it uses to decide how to return the looked up
+value).
+
+   You may want a traversal routine.  This should just call the
+traversal routine of the hash table you are deriving from with
+appropriate casts.  The linker hash table uses `bfd_link_hash_traverse'
+in `linker.c'.
+
+   These routines may simply be defined as macros.  For example, the
+a.out backend linker hash table, which is derived from the linker hash
+table, uses macros for the lookup and traversal routines.  These are
+`aout_link_hash_lookup' and `aout_link_hash_traverse' in aoutx.h.
+
+
+File: bfd.info,  Node: BFD back ends,  Next: GNU Free Documentation License,  Prev: BFD front end,  Up: Top
+
+3 BFD back ends
+***************
+
+* Menu:
+
+* What to Put Where::
+* aout ::	a.out backends
+* coff ::	coff backends
+* elf  ::	elf backends
+* mmo  ::	mmo backend
+
+
+File: bfd.info,  Node: What to Put Where,  Next: aout,  Prev: BFD back ends,  Up: BFD back ends
+
+3.1 What to Put Where
+=====================
+
+All of BFD lives in one directory.
+
+
+File: bfd.info,  Node: aout,  Next: coff,  Prev: What to Put Where,  Up: BFD back ends
+
+3.2 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 `aoutx.h' and other
+files which derive functions from the base. One derivation file is
+`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 `sunos.c' for sun3 and sun4, `newsos3.c' for
+the Sony NEWS, and `demo64.c' for a demonstration of a 64 bit a.out
+format.
+
+   The base 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 `aout32.c' and `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 `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 `sunos.c':
+
+            #define TARGET_NAME "a.out-sunos-big"
+            #define VECNAME    sunos_big_vec
+            #include "aoutf1.h"
+
+   requires all the names from `aout32.c', and produces the jump vector
+
+            sunos_big_vec
+
+   The 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 `../include/sys/h-XXX.h' (for your host).  These values,
+plus the structures and macros defined in `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 `host-aout.c', specify:
+
+            TDEFAULTS = -DDEFAULT_VECTOR=host_aout_big_vec
+            TDEPFILES= host-aout.o trad-core.o
+
+   in the `config/XXX.mt' file, and modify `configure.in' to use the
+`XXX.mt' file (by setting "`bfd_target=XXX'") when your configuration
+is selected.
+
+3.2.1 Relocations
+-----------------
+
+*Description*
+The file `aoutx.h' provides for both the _standard_ and _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.
+
+3.2.2 Internal entry points
+---------------------------
+
+*Description*
+`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).
+
+3.2.2.1 `aout_SIZE_swap_exec_header_in'
+.......................................
+
+*Synopsis*
+     void aout_SIZE_swap_exec_header_in,
+        (bfd *abfd,
+         struct external_exec *bytes,
+         struct internal_exec *execp);
+   *Description*
+Swap the information in an executable header RAW_BYTES taken from a raw
+byte stream memory image into the internal exec header structure EXECP.
+
+3.2.2.2 `aout_SIZE_swap_exec_header_out'
+........................................
+
+*Synopsis*
+     void aout_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 EXECP into
+the buffer RAW_BYTES ready for writing to disk.
+
+3.2.2.3 `aout_SIZE_some_aout_object_p'
+......................................
+
+*Synopsis*
+     const bfd_target *aout_SIZE_some_aout_object_p
+        (bfd *abfd,
+         struct internal_exec *execp,
+         const bfd_target *(*callback_to_real_object_p) (bfd *));
+   *Description*
+Some a.out variant thinks that the file open in 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.
+
+3.2.2.4 `aout_SIZE_mkobject'
+............................
+
+*Synopsis*
+     bfd_boolean aout_SIZE_mkobject, (bfd *abfd);
+   *Description*
+Initialize BFD ABFD for use with a.out files.
+
+3.2.2.5 `aout_SIZE_machine_type'
+................................
+
+*Synopsis*
+     enum machine_type  aout_SIZE_machine_type
+        (enum bfd_architecture arch,
+         unsigned long machine,
+         bfd_boolean *unknown);
+   *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.
+
+3.2.2.6 `aout_SIZE_set_arch_mach'
+.................................
+
+*Synopsis*
+     bfd_boolean aout_SIZE_set_arch_mach,
+        (bfd *,
+         enum bfd_architecture arch,
+         unsigned long machine);
+   *Description*
+Set the architecture and the machine of the BFD ABFD to the values ARCH
+and MACHINE.  Verify that ABFD's format can support the architecture
+required.
+
+3.2.2.7 `aout_SIZE_new_section_hook'
+....................................
+
+*Synopsis*
+     bfd_boolean aout_SIZE_new_section_hook,
+        (bfd *abfd,
+         asection *newsect);
+   *Description*
+Called by the BFD in response to a `bfd_make_section' request.
+
+
+File: bfd.info,  Node: coff,  Next: elf,  Prev: aout,  Up: BFD back ends
+
+3.3 coff backends
+=================
+
+BFD supports a number of different flavours of coff format.  The major
+differences between formats are the sizes and alignments of fields in
+structures on disk, and the occasional extra field.
+
+   Coff in all its varieties is implemented with a few common files and
+a number of implementation specific files. For example, The 88k bcs
+coff format is implemented in the file `coff-m88k.c'. This file
+`#include's `coff/m88k.h' which defines the external structure of the
+coff format for the 88k, and `coff/internal.h' which defines the
+internal structure. `coff-m88k.c' also defines the relocations used by
+the 88k format *Note Relocations::.
+
+   The Intel i960 processor version of coff is implemented in
+`coff-i960.c'. This file has the same structure as `coff-m88k.c',
+except that it includes `coff/i960.h' rather than `coff-m88k.h'.
+
+3.3.1 Porting to a new version of coff
+--------------------------------------
+
+The recommended method is to select from the existing implementations
+the version of coff which is most like the one you want to use.  For
+example, we'll say that i386 coff is the one you select, and that your
+coff flavour is called foo.  Copy `i386coff.c' to `foocoff.c', copy
+`../include/coff/i386.h' to `../include/coff/foo.h', and add the lines
+to `targets.c' and `Makefile.in' so that your new back end is used.
+Alter the shapes of the structures in `../include/coff/foo.h' so that
+they match what you need. You will probably also have to add `#ifdef's
+to the code in `coff/internal.h' and `coffcode.h' if your version of
+coff is too wild.
+
+   You can verify that your new BFD backend works quite simply by
+building `objdump' from the `binutils' directory, and making sure that
+its version of what's going on and your host system's idea (assuming it
+has the pretty standard coff dump utility, usually called `att-dump' or
+just `dump') are the same.  Then clean up your code, and send what
+you've done to Cygnus. Then your stuff will be in the next release, and
+you won't have to keep integrating it.
+
+3.3.2 How the coff backend works
+--------------------------------
+
+3.3.2.1 File layout
+...................
+
+The Coff backend is split into generic routines that are applicable to
+any Coff target and routines that are specific to a particular target.
+The target-specific routines are further split into ones which are
+basically the same for all Coff targets except that they use the
+external symbol format or use different values for certain constants.
+
+   The generic routines are in `coffgen.c'.  These routines work for
+any Coff target.  They use some hooks into the target specific code;
+the hooks are in a `bfd_coff_backend_data' structure, one of which
+exists for each target.
+
+   The essentially similar target-specific routines are in
+`coffcode.h'.  This header file includes executable C code.  The
+various Coff targets first include the appropriate Coff header file,
+make any special defines that are needed, and then include `coffcode.h'.
+
+   Some of the Coff targets then also have additional routines in the
+target source file itself.
+
+   For example, `coff-i960.c' includes `coff/internal.h' and
+`coff/i960.h'.  It then defines a few constants, such as `I960', and
+includes `coffcode.h'.  Since the i960 has complex relocation types,
+`coff-i960.c' also includes some code to manipulate the i960 relocs.
+This code is not in `coffcode.h' because it would not be used by any
+other target.
+
+3.3.2.2 Coff long section names
+...............................
+
+In the standard Coff object format, section names are limited to the
+eight bytes available in the `s_name' field of the `SCNHDR' section
+header structure.  The format requires the field to be NUL-padded, but
+not necessarily NUL-terminated, so the longest section names permitted
+are a full eight characters.
+
+   The Microsoft PE variants of the Coff object file format add an
+extension to support the use of long section names.  This extension is
+defined in section 4 of the Microsoft PE/COFF specification (rev 8.1).
+If a section name is too long to fit into the section header's `s_name'
+field, it is instead placed into the string table, and the `s_name'
+field is filled with a slash ("/") followed by the ASCII decimal
+representation of the offset of the full name relative to the string
+table base.
+
+   Note that this implies that the extension can only be used in object
+files, as executables do not contain a string table.  The standard
+specifies that long section names from objects emitted into executable
+images are to be truncated.
+
+   However, as a GNU extension, BFD can generate executable images that
+contain a string table and long section names.  This would appear to be
+technically valid, as the standard only says that Coff debugging
+information is deprecated, not forbidden, and in practice it works,
+although some tools that parse PE files expecting the MS standard
+format may become confused; `PEview' is one known example.
+
+   The functionality is supported in BFD by code implemented under the
+control of the macro `COFF_LONG_SECTION_NAMES'.  If not defined, the
+format does not support long section names in any way.  If defined, it
+is used to initialise a flag, `_bfd_coff_long_section_names', and a
+hook function pointer, `_bfd_coff_set_long_section_names', in the Coff
+backend data structure.  The flag controls the generation of long
+section names in output BFDs at runtime; if it is false, as it will be
+by default when generating an executable image, long section names are
+truncated; if true, the long section names extension is employed.  The
+hook points to a function that allows the value of the flag to be
+altered at runtime, on formats that support long section names at all;
+on other formats it points to a stub that returns an error indication.
+With input BFDs, the flag is set according to whether any long section
+names are detected while reading the section headers.  For a completely
+new BFD, the flag is set to the default for the target format.  This
+information can be used by a client of the BFD library when deciding
+what output format to generate, and means that a BFD that is opened for
+read and subsequently converted to a writeable BFD and modified
+in-place will retain whatever format it had on input.
+
+   If `COFF_LONG_SECTION_NAMES' is simply defined (blank), or is
+defined to the value "1", then long section names are enabled by
+default; if it is defined to the value zero, they are disabled by
+default (but still accepted in input BFDs).  The header `coffcode.h'
+defines a macro, `COFF_DEFAULT_LONG_SECTION_NAMES', which is used in
+the backends to initialise the backend data structure fields
+appropriately; see the comments for further detail.
+
+3.3.2.3 Bit twiddling
+.....................
+
+Each flavour of coff supported in BFD has its own header file
+describing the external layout of the structures. There is also an
+internal description of the coff layout, in `coff/internal.h'. A major
+function of the coff backend is swapping the bytes and twiddling the
+bits to translate the external form of the structures into the normal
+internal form. This is all performed in the `bfd_swap'_thing_direction
+routines. Some elements are different sizes between different versions
+of coff; it is the duty of the coff version specific include file to
+override the definitions of various packing routines in `coffcode.h'.
+E.g., the size of line number entry in coff is sometimes 16 bits, and
+sometimes 32 bits. `#define'ing `PUT_LNSZ_LNNO' and `GET_LNSZ_LNNO'
+will select the correct one. No doubt, some day someone will find a
+version of coff which has a varying field size not catered to at the
+moment. To port BFD, that person will have to add more `#defines'.
+Three of the bit twiddling routines are exported to `gdb';
+`coff_swap_aux_in', `coff_swap_sym_in' and `coff_swap_lineno_in'. `GDB'
+reads the symbol table on its own, but uses BFD to fix things up.  More
+of the bit twiddlers are exported for `gas'; `coff_swap_aux_out',
+`coff_swap_sym_out', `coff_swap_lineno_out', `coff_swap_reloc_out',
+`coff_swap_filehdr_out', `coff_swap_aouthdr_out',
+`coff_swap_scnhdr_out'. `Gas' currently keeps track of all the symbol
+table and reloc drudgery itself, thereby saving the internal BFD
+overhead, but uses BFD to swap things on the way out, making cross
+ports much safer.  Doing so also allows BFD (and thus the linker) to
+use the same header files as `gas', which makes one avenue to disaster
+disappear.
+
+3.3.2.4 Symbol reading
+......................
+
+The simple canonical form for symbols used by BFD is not rich enough to
+keep all the information available in a coff symbol table. The back end
+gets around this problem by keeping the original symbol table around,
+"behind the scenes".
+
+   When a symbol table is requested (through a call to
+`bfd_canonicalize_symtab'), a request gets through to
+`coff_get_normalized_symtab'. This reads the symbol table from the coff
+file and swaps all the structures inside into the internal form. It
+also fixes up all the pointers in the table (represented in the file by
+offsets from the first symbol in the table) into physical pointers to
+elements in the new internal table. This involves some work since the
+meanings of fields change depending upon context: a field that is a
+pointer to another structure in the symbol table at one moment may be
+the size in bytes of a structure at the next.  Another pass is made
+over the table. All symbols which mark file names (`C_FILE' symbols)
+are modified so that the internal string points to the value in the
+auxent (the real filename) rather than the normal text associated with
+the symbol (`".file"').
+
+   At this time the symbol names are moved around. Coff stores all
+symbols less than nine characters long physically within the symbol
+table; longer strings are kept at the end of the file in the string
+table. This pass moves all strings into memory and replaces them with
+pointers to the strings.
+
+   The symbol table is massaged once again, this time to create the
+canonical table used by the BFD application. Each symbol is inspected
+in turn, and a decision made (using the `sclass' field) about the
+various flags to set in the `asymbol'.  *Note Symbols::. The generated
+canonical table shares strings with the hidden internal symbol table.
+
+   Any linenumbers are read from the coff file too, and attached to the
+symbols which own the functions the linenumbers belong to.
+
+3.3.2.5 Symbol writing
+......................
+
+Writing a symbol to a coff file which didn't come from a coff file will
+lose any debugging information. The `asymbol' structure remembers the
+BFD from which the symbol was taken, and on output the back end makes
+sure that the same destination target as source target is present.
+
+   When the symbols have come from a coff file then all the debugging
+information is preserved.
+
+   Symbol tables are provided for writing to the back end in a vector
+of pointers to pointers. This allows applications like the linker to
+accumulate and output large symbol tables without having to do too much
+byte copying.
+
+   This function runs through the provided symbol table and patches
+each symbol marked as a file place holder (`C_FILE') to point to the
+next file place holder in the list. It also marks each `offset' field
+in the list with the offset from the first symbol of the current symbol.
+
+   Another function of this procedure is to turn the canonical value
+form of BFD into the form used by coff. Internally, BFD expects symbol
+values to be offsets from a section base; so a symbol physically at
+0x120, but in a section starting at 0x100, would have the value 0x20.
+Coff expects symbols to contain their final value, so symbols have
+their values changed at this point to reflect their sum with their
+owning section.  This transformation uses the `output_section' field of
+the `asymbol''s `asection' *Note Sections::.
+
+   * `coff_mangle_symbols'
+   This routine runs though the provided symbol table and uses the
+offsets generated by the previous pass and the pointers generated when
+the symbol table was read in to create the structured hierarchy
+required by coff. It changes each pointer to a symbol into the index
+into the symbol table of the asymbol.
+
+   * `coff_write_symbols'
+   This routine runs through the symbol table and patches up the
+symbols from their internal form into the coff way, calls the bit
+twiddlers, and writes out the table to the file.
+
+3.3.2.6 `coff_symbol_type'
+..........................
+
+*Description*
+The hidden information for an `asymbol' is described in a
+`combined_entry_type':
+
+
+     typedef struct coff_ptr_struct
+     {
+       /* Remembers the offset from the first symbol in the file for
+          this symbol. Generated by coff_renumber_symbols. */
+       unsigned int offset;
+
+       /* Should the value of this symbol be renumbered.  Used for
+          XCOFF C_BSTAT symbols.  Set by coff_slurp_symbol_table.  */
+       unsigned int fix_value : 1;
+
+       /* Should the tag field of this symbol be renumbered.
+          Created by coff_pointerize_aux. */
+       unsigned int fix_tag : 1;
+
+       /* Should the endidx field of this symbol be renumbered.
+          Created by coff_pointerize_aux. */
+       unsigned int fix_end : 1;
+
+       /* Should the x_csect.x_scnlen field be renumbered.
+          Created by coff_pointerize_aux. */
+       unsigned int fix_scnlen : 1;
+
+       /* Fix up an XCOFF C_BINCL/C_EINCL symbol.  The value is the
+          index into the line number entries.  Set by coff_slurp_symbol_table.  */
+       unsigned int fix_line : 1;
+
+       /* The container for the symbol structure as read and translated
+          from the file. */
+       union
+       {
+         union internal_auxent auxent;
+         struct internal_syment syment;
+       } u;
+     } combined_entry_type;
+
+
+     /* Each canonical asymbol really looks like this: */
+
+     typedef struct coff_symbol_struct
+     {
+       /* The actual symbol which the rest of BFD works with */
+       asymbol symbol;
+
+       /* A pointer to the hidden information for this symbol */
+       combined_entry_type *native;
+
+       /* A pointer to the linenumber information for this symbol */
+       struct lineno_cache_entry *lineno;
+
+       /* Have the line numbers been relocated yet ? */
+       bfd_boolean done_lineno;
+     } coff_symbol_type;
+   
+3.3.2.7 `bfd_coff_backend_data'
+...............................
+
+     /* COFF symbol classifications.  */
+
+     enum coff_symbol_classification
+     {
+       /* Global symbol.  */
+       COFF_SYMBOL_GLOBAL,
+       /* Common symbol.  */
+       COFF_SYMBOL_COMMON,
+       /* Undefined symbol.  */
+       COFF_SYMBOL_UNDEFINED,
+       /* Local symbol.  */
+       COFF_SYMBOL_LOCAL,
+       /* PE section symbol.  */
+       COFF_SYMBOL_PE_SECTION
+     };
+Special entry points for gdb to swap in coff symbol table parts:
+     typedef struct
+     {
+       void (*_bfd_coff_swap_aux_in)
+         (bfd *, void *, int, int, int, int, void *);
+
+       void (*_bfd_coff_swap_sym_in)
+         (bfd *, void *, void *);
+
+       void (*_bfd_coff_swap_lineno_in)
+         (bfd *, void *, void *);
+
+       unsigned int (*_bfd_coff_swap_aux_out)
+         (bfd *, void *, int, int, int, int, void *);
+
+       unsigned int (*_bfd_coff_swap_sym_out)
+         (bfd *, void *, void *);
+
+       unsigned int (*_bfd_coff_swap_lineno_out)
+         (bfd *, void *, void *);
+
+       unsigned int (*_bfd_coff_swap_reloc_out)
+         (bfd *, void *, void *);
+
+       unsigned int (*_bfd_coff_swap_filehdr_out)
+         (bfd *, void *, void *);
+
+       unsigned int (*_bfd_coff_swap_aouthdr_out)
+         (bfd *, void *, void *);
+
+       unsigned int (*_bfd_coff_swap_scnhdr_out)
+         (bfd *, void *, void *);
+
+       unsigned int _bfd_filhsz;
+       unsigned int _bfd_aoutsz;
+       unsigned int _bfd_scnhsz;
+       unsigned int _bfd_symesz;
+       unsigned int _bfd_auxesz;
+       unsigned int _bfd_relsz;
+       unsigned int _bfd_linesz;
+       unsigned int _bfd_filnmlen;
+       bfd_boolean _bfd_coff_long_filenames;
+
+       bfd_boolean _bfd_coff_long_section_names;
+       bfd_boolean (*_bfd_coff_set_long_section_names)
+         (bfd *, int);
+
+       unsigned int _bfd_coff_default_section_alignment_power;
+       bfd_boolean _bfd_coff_force_symnames_in_strings;
+       unsigned int _bfd_coff_debug_string_prefix_length;
+
+       void (*_bfd_coff_swap_filehdr_in)
+         (bfd *, void *, void *);
+
+       void (*_bfd_coff_swap_aouthdr_in)
+         (bfd *, void *, void *);
+
+       void (*_bfd_coff_swap_scnhdr_in)
+         (bfd *, void *, void *);
+
+       void (*_bfd_coff_swap_reloc_in)
+         (bfd *abfd, void *, void *);
+
+       bfd_boolean (*_bfd_coff_bad_format_hook)
+         (bfd *, void *);
+
+       bfd_boolean (*_bfd_coff_set_arch_mach_hook)
+         (bfd *, void *);
+
+       void * (*_bfd_coff_mkobject_hook)
+         (bfd *, void *, void *);
+
+       bfd_boolean (*_bfd_styp_to_sec_flags_hook)
+         (bfd *, void *, const char *, asection *, flagword *);
+
+       void (*_bfd_set_alignment_hook)
+         (bfd *, asection *, void *);
+
+       bfd_boolean (*_bfd_coff_slurp_symbol_table)
+         (bfd *);
+
+       bfd_boolean (*_bfd_coff_symname_in_debug)
+         (bfd *, struct internal_syment *);
+
+       bfd_boolean (*_bfd_coff_pointerize_aux_hook)
+         (bfd *, combined_entry_type *, combined_entry_type *,
+                 unsigned int, combined_entry_type *);
+
+       bfd_boolean (*_bfd_coff_print_aux)
+         (bfd *, FILE *, combined_entry_type *, combined_entry_type *,
+                 combined_entry_type *, unsigned int);
+
+       void (*_bfd_coff_reloc16_extra_cases)
+         (bfd *, struct bfd_link_info *, struct bfd_link_order *, arelent *,
+                bfd_byte *, unsigned int *, unsigned int *);
+
+       int (*_bfd_coff_reloc16_estimate)
+         (bfd *, asection *, arelent *, unsigned int,
+                 struct bfd_link_info *);
+
+       enum coff_symbol_classification (*_bfd_coff_classify_symbol)
+         (bfd *, struct internal_syment *);
+
+       bfd_boolean (*_bfd_coff_compute_section_file_positions)
+         (bfd *);
+
+       bfd_boolean (*_bfd_coff_start_final_link)
+         (bfd *, struct bfd_link_info *);
+
+       bfd_boolean (*_bfd_coff_relocate_section)
+         (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
+                 struct internal_reloc *, struct internal_syment *, asection **);
+
+       reloc_howto_type *(*_bfd_coff_rtype_to_howto)
+         (bfd *, asection *, struct internal_reloc *,
+                 struct coff_link_hash_entry *, struct internal_syment *,
+                 bfd_vma *);
+
+       bfd_boolean (*_bfd_coff_adjust_symndx)
+         (bfd *, struct bfd_link_info *, bfd *, asection *,
+                 struct internal_reloc *, bfd_boolean *);
+
+       bfd_boolean (*_bfd_coff_link_add_one_symbol)
+         (struct bfd_link_info *, bfd *, const char *, flagword,
+                 asection *, bfd_vma, const char *, bfd_boolean, bfd_boolean,
+                 struct bfd_link_hash_entry **);
+
+       bfd_boolean (*_bfd_coff_link_output_has_begun)
+         (bfd *, struct coff_final_link_info *);
+
+       bfd_boolean (*_bfd_coff_final_link_postscript)
+         (bfd *, struct coff_final_link_info *);
+
+       bfd_boolean (*_bfd_coff_print_pdata)
+         (bfd *, void *);
+
+     } bfd_coff_backend_data;
+
+     #define coff_backend_info(abfd) \
+       ((bfd_coff_backend_data *) (abfd)->xvec->backend_data)
+
+     #define bfd_coff_swap_aux_in(a,e,t,c,ind,num,i) \
+       ((coff_backend_info (a)->_bfd_coff_swap_aux_in) (a,e,t,c,ind,num,i))
+
+     #define bfd_coff_swap_sym_in(a,e,i) \
+       ((coff_backend_info (a)->_bfd_coff_swap_sym_in) (a,e,i))
+
+     #define bfd_coff_swap_lineno_in(a,e,i) \
+       ((coff_backend_info ( a)->_bfd_coff_swap_lineno_in) (a,e,i))
+
+     #define bfd_coff_swap_reloc_out(abfd, i, o) \
+       ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_out) (abfd, i, o))
+
+     #define bfd_coff_swap_lineno_out(abfd, i, o) \
+       ((coff_backend_info (abfd)->_bfd_coff_swap_lineno_out) (abfd, i, o))
+
+     #define bfd_coff_swap_aux_out(a,i,t,c,ind,num,o) \
+       ((coff_backend_info (a)->_bfd_coff_swap_aux_out) (a,i,t,c,ind,num,o))
+
+     #define bfd_coff_swap_sym_out(abfd, i,o) \
+       ((coff_backend_info (abfd)->_bfd_coff_swap_sym_out) (abfd, i, o))
+
+     #define bfd_coff_swap_scnhdr_out(abfd, i,o) \
+       ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_out) (abfd, i, o))
+
+     #define bfd_coff_swap_filehdr_out(abfd, i,o) \
+       ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_out) (abfd, i, o))
+
+     #define bfd_coff_swap_aouthdr_out(abfd, i,o) \
+       ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_out) (abfd, i, o))
+
+     #define bfd_coff_filhsz(abfd) (coff_backend_info (abfd)->_bfd_filhsz)
+     #define bfd_coff_aoutsz(abfd) (coff_backend_info (abfd)->_bfd_aoutsz)
+     #define bfd_coff_scnhsz(abfd) (coff_backend_info (abfd)->_bfd_scnhsz)
+     #define bfd_coff_symesz(abfd) (coff_backend_info (abfd)->_bfd_symesz)
+     #define bfd_coff_auxesz(abfd) (coff_backend_info (abfd)->_bfd_auxesz)
+     #define bfd_coff_relsz(abfd)  (coff_backend_info (abfd)->_bfd_relsz)
+     #define bfd_coff_linesz(abfd) (coff_backend_info (abfd)->_bfd_linesz)
+     #define bfd_coff_filnmlen(abfd) (coff_backend_info (abfd)->_bfd_filnmlen)
+     #define bfd_coff_long_filenames(abfd) \
+       (coff_backend_info (abfd)->_bfd_coff_long_filenames)
+     #define bfd_coff_long_section_names(abfd) \
+       (coff_backend_info (abfd)->_bfd_coff_long_section_names)
+     #define bfd_coff_set_long_section_names(abfd, enable) \
+       ((coff_backend_info (abfd)->_bfd_coff_set_long_section_names) (abfd, enable))
+     #define bfd_coff_default_section_alignment_power(abfd) \
+       (coff_backend_info (abfd)->_bfd_coff_default_section_alignment_power)
+     #define bfd_coff_swap_filehdr_in(abfd, i,o) \
+       ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_in) (abfd, i, o))
+
+     #define bfd_coff_swap_aouthdr_in(abfd, i,o) \
+       ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_in) (abfd, i, o))
+
+     #define bfd_coff_swap_scnhdr_in(abfd, i,o) \
+       ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_in) (abfd, i, o))
+
+     #define bfd_coff_swap_reloc_in(abfd, i, o) \
+       ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_in) (abfd, i, o))
+
+     #define bfd_coff_bad_format_hook(abfd, filehdr) \
+       ((coff_backend_info (abfd)->_bfd_coff_bad_format_hook) (abfd, filehdr))
+
+     #define bfd_coff_set_arch_mach_hook(abfd, filehdr)\
+       ((coff_backend_info (abfd)->_bfd_coff_set_arch_mach_hook) (abfd, filehdr))
+     #define bfd_coff_mkobject_hook(abfd, filehdr, aouthdr)\
+       ((coff_backend_info (abfd)->_bfd_coff_mkobject_hook)\
+        (abfd, filehdr, aouthdr))
+
+     #define bfd_coff_styp_to_sec_flags_hook(abfd, scnhdr, name, section, flags_ptr)\
+       ((coff_backend_info (abfd)->_bfd_styp_to_sec_flags_hook)\
+        (abfd, scnhdr, name, section, flags_ptr))
+
+     #define bfd_coff_set_alignment_hook(abfd, sec, scnhdr)\
+       ((coff_backend_info (abfd)->_bfd_set_alignment_hook) (abfd, sec, scnhdr))
+
+     #define bfd_coff_slurp_symbol_table(abfd)\
+       ((coff_backend_info (abfd)->_bfd_coff_slurp_symbol_table) (abfd))
+
+     #define bfd_coff_symname_in_debug(abfd, sym)\
+       ((coff_backend_info (abfd)->_bfd_coff_symname_in_debug) (abfd, sym))
+
+     #define bfd_coff_force_symnames_in_strings(abfd)\
+       (coff_backend_info (abfd)->_bfd_coff_force_symnames_in_strings)
+
+     #define bfd_coff_debug_string_prefix_length(abfd)\
+       (coff_backend_info (abfd)->_bfd_coff_debug_string_prefix_length)
+
+     #define bfd_coff_print_aux(abfd, file, base, symbol, aux, indaux)\
+       ((coff_backend_info (abfd)->_bfd_coff_print_aux)\
+        (abfd, file, base, symbol, aux, indaux))
+
+     #define bfd_coff_reloc16_extra_cases(abfd, link_info, link_order,\
+                                          reloc, data, src_ptr, dst_ptr)\
+       ((coff_backend_info (abfd)->_bfd_coff_reloc16_extra_cases)\
+        (abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr))
+
+     #define bfd_coff_reloc16_estimate(abfd, section, reloc, shrink, link_info)\
+       ((coff_backend_info (abfd)->_bfd_coff_reloc16_estimate)\
+        (abfd, section, reloc, shrink, link_info))
+
+     #define bfd_coff_classify_symbol(abfd, sym)\
+       ((coff_backend_info (abfd)->_bfd_coff_classify_symbol)\
+        (abfd, sym))
+
+     #define bfd_coff_compute_section_file_positions(abfd)\
+       ((coff_backend_info (abfd)->_bfd_coff_compute_section_file_positions)\
+        (abfd))
+
+     #define bfd_coff_start_final_link(obfd, info)\
+       ((coff_backend_info (obfd)->_bfd_coff_start_final_link)\
+        (obfd, info))
+     #define bfd_coff_relocate_section(obfd,info,ibfd,o,con,rel,isyms,secs)\
+       ((coff_backend_info (ibfd)->_bfd_coff_relocate_section)\
+        (obfd, info, ibfd, o, con, rel, isyms, secs))
+     #define bfd_coff_rtype_to_howto(abfd, sec, rel, h, sym, addendp)\
+       ((coff_backend_info (abfd)->_bfd_coff_rtype_to_howto)\
+        (abfd, sec, rel, h, sym, addendp))
+     #define bfd_coff_adjust_symndx(obfd, info, ibfd, sec, rel, adjustedp)\
+       ((coff_backend_info (abfd)->_bfd_coff_adjust_symndx)\
+        (obfd, info, ibfd, sec, rel, adjustedp))
+     #define bfd_coff_link_add_one_symbol(info, abfd, name, flags, section,\
+                                          value, string, cp, coll, hashp)\
+       ((coff_backend_info (abfd)->_bfd_coff_link_add_one_symbol)\
+        (info, abfd, name, flags, section, value, string, cp, coll, hashp))
+
+     #define bfd_coff_link_output_has_begun(a,p) \
+       ((coff_backend_info (a)->_bfd_coff_link_output_has_begun) (a, p))
+     #define bfd_coff_final_link_postscript(a,p) \
+       ((coff_backend_info (a)->_bfd_coff_final_link_postscript) (a, p))
+
+     #define bfd_coff_have_print_pdata(a) \
+       (coff_backend_info (a)->_bfd_coff_print_pdata)
+     #define bfd_coff_print_pdata(a,p) \
+       ((coff_backend_info (a)->_bfd_coff_print_pdata) (a, p))
+
+     /* Macro: Returns true if the bfd is a PE executable as opposed to a
+        PE object file.  */
+     #define bfd_pei_p(abfd) \
+       (CONST_STRNEQ ((abfd)->xvec->name, "pei-"))
+
+3.3.2.8 Writing relocations
+...........................
+
+To write relocations, the back end steps though the canonical
+relocation table and create an `internal_reloc'. The symbol index to
+use is removed from the `offset' field in the symbol table supplied.
+The address comes directly from the sum of the section base address and
+the relocation offset; the type is dug directly from the howto field.
+Then the `internal_reloc' is swapped into the shape of an
+`external_reloc' and written out to disk.
+
+3.3.2.9 Reading linenumbers
+...........................
+
+Creating the linenumber table is done by reading in the entire coff
+linenumber table, and creating another table for internal use.
+
+   A coff linenumber table is structured so that each function is
+marked as having a line number of 0. Each line within the function is
+an offset from the first line in the function. The base of the line
+number information for the table is stored in the symbol associated
+with the function.
+
+   Note: The PE format uses line number 0 for a flag indicating a new
+source file.
+
+   The information is copied from the external to the internal table,
+and each symbol which marks a function is marked by pointing its...
+
+   How does this work ?
+
+3.3.2.10 Reading relocations
+............................
+
+Coff relocations are easily transformed into the internal BFD form
+(`arelent').
+
+   Reading a coff relocation table is done in the following stages:
+
+   * Read the entire coff relocation table into memory.
+
+   * Process each relocation in turn; first swap it from the external
+     to the internal form.
+
+   * Turn the symbol referenced in the relocation's symbol index into a
+     pointer into the canonical symbol table.  This table is the same
+     as the one returned by a call to `bfd_canonicalize_symtab'. The
+     back end will call that routine and save the result if a
+     canonicalization hasn't been done.
+
+   * The reloc index is turned into a pointer to a howto structure, in
+     a back end specific way. For instance, the 386 and 960 use the
+     `r_type' to directly produce an index into a howto table vector;
+     the 88k subtracts a number from the `r_type' field and creates an
+     addend field.
+
+
+File: bfd.info,  Node: elf,  Next: mmo,  Prev: coff,  Up: BFD back ends
+
+3.4 ELF backends
+================
+
+BFD support for ELF formats is being worked on.  Currently, the best
+supported back ends are for sparc and i386 (running svr4 or Solaris 2).
+
+   Documentation of the internals of the support code still needs to be
+written.  The code is changing quickly enough that we haven't bothered
+yet.
+
+
+File: bfd.info,  Node: mmo,  Prev: elf,  Up: BFD back ends
+
+3.5 mmo backend
+===============
+
+The mmo object format is used exclusively together with Professor
+Donald E. Knuth's educational 64-bit processor MMIX.  The simulator
+`mmix' which is available at
+`http://www-cs-faculty.stanford.edu/~knuth/programs/mmix.tar.gz'
+understands this format.  That package also includes a combined
+assembler and linker called `mmixal'.  The mmo format has no advantages
+feature-wise compared to e.g. ELF.  It is a simple non-relocatable
+object format with no support for archives or debugging information,
+except for symbol value information and line numbers (which is not yet
+implemented in BFD).  See
+`http://www-cs-faculty.stanford.edu/~knuth/mmix.html' for more
+information about MMIX.  The ELF format is used for intermediate object
+files in the BFD implementation.
+
+* Menu:
+
+* File layout::
+* Symbol-table::
+* mmo section mapping::
+
+
+File: bfd.info,  Node: File layout,  Next: Symbol-table,  Prev: mmo,  Up: mmo
+
+3.5.1 File layout
+-----------------
+
+The mmo file contents is not partitioned into named sections as with
+e.g. ELF.  Memory areas is formed by specifying the location of the
+data that follows.  Only the memory area `0x0000...00' to `0x01ff...ff'
+is executable, so it is used for code (and constants) and the area
+`0x2000...00' to `0x20ff...ff' is used for writable data.  *Note mmo
+section mapping::.
+
+   There is provision for specifying "special data" of 65536 different
+types.  We use type 80 (decimal), arbitrarily chosen the same as the
+ELF `e_machine' number for MMIX, filling it with section information
+normally found in ELF objects. *Note mmo section mapping::.
+
+   Contents is entered as 32-bit words, xor:ed over previous contents,
+always zero-initialized.  A word that starts with the byte `0x98' forms
+a command called a `lopcode', where the next byte distinguished between
+the thirteen lopcodes.  The two remaining bytes, called the `Y' and `Z'
+fields, or the `YZ' field (a 16-bit big-endian number), are used for
+various purposes different for each lopcode.  As documented in
+`http://www-cs-faculty.stanford.edu/~knuth/mmixal-intro.ps.gz', the
+lopcodes are:
+
+`lop_quote'
+     0x98000001.  The next word is contents, regardless of whether it
+     starts with 0x98 or not.
+
+`lop_loc'
+     0x9801YYZZ, where `Z' is 1 or 2.  This is a location directive,
+     setting the location for the next data to the next 32-bit word
+     (for Z = 1) or 64-bit word (for Z = 2), plus Y * 2^56.  Normally
+     `Y' is 0 for the text segment and 2 for the data segment.
+
+`lop_skip'
+     0x9802YYZZ.  Increase the current location by `YZ' bytes.
+
+`lop_fixo'
+     0x9803YYZZ, where `Z' is 1 or 2.  Store the current location as 64
+     bits into the location pointed to by the next 32-bit (Z = 1) or
+     64-bit (Z = 2) word, plus Y * 2^56.
+
+`lop_fixr'
+     0x9804YYZZ.  `YZ' is stored into the current location plus 2 - 4 *
+     YZ.
+
+`lop_fixrx'
+     0x980500ZZ.  `Z' is 16 or 24.  A value `L' derived from the
+     following 32-bit word are used in a manner similar to `YZ' in
+     lop_fixr: it is xor:ed into the current location minus 4 * L.  The
+     first byte of the word is 0 or 1.  If it is 1, then L = (LOWEST 24
+     BITS OF WORD) - 2^Z, if 0, then L = (LOWEST 24 BITS OF WORD).
+
+`lop_file'
+     0x9806YYZZ.  `Y' is the file number, `Z' is count of 32-bit words.
+     Set the file number to `Y' and the line counter to 0.  The next Z
+     * 4 bytes contain the file name, padded with zeros if the count is
+     not a multiple of four.  The same `Y' may occur multiple times,
+     but `Z' must be 0 for all but the first occurrence.
+
+`lop_line'
+     0x9807YYZZ.  `YZ' is the line number.  Together with lop_file, it
+     forms the source location for the next 32-bit word.  Note that for
+     each non-lopcode 32-bit word, line numbers are assumed incremented
+     by one.
+
+`lop_spec'
+     0x9808YYZZ.  `YZ' is the type number.  Data until the next lopcode
+     other than lop_quote forms special data of type `YZ'.  *Note mmo
+     section mapping::.
+
+     Other types than 80, (or type 80 with a content that does not
+     parse) is stored in sections named `.MMIX.spec_data.N' where N is
+     the `YZ'-type.  The flags for such a sections say not to allocate
+     or load the data.  The vma is 0.  Contents of multiple occurrences
+     of special data N is concatenated to the data of the previous
+     lop_spec Ns.  The location in data or code at which the lop_spec
+     occurred is lost.
+
+`lop_pre'
+     0x980901ZZ.  The first lopcode in a file.  The `Z' field forms the
+     length of header information in 32-bit words, where the first word
+     tells the time in seconds since `00:00:00 GMT Jan 1 1970'.
+
+`lop_post'
+     0x980a00ZZ.  Z > 32.  This lopcode follows after all
+     content-generating lopcodes in a program.  The `Z' field denotes
+     the value of `rG' at the beginning of the program.  The following
+     256 - Z big-endian 64-bit words are loaded into global registers
+     `$G' ... `$255'.
+
+`lop_stab'
+     0x980b0000.  The next-to-last lopcode in a program.  Must follow
+     immediately after the lop_post lopcode and its data.  After this
+     lopcode follows all symbols in a compressed format (*note
+     Symbol-table::).
+
+`lop_end'
+     0x980cYYZZ.  The last lopcode in a program.  It must follow the
+     lop_stab lopcode and its data.  The `YZ' field contains the number
+     of 32-bit words of symbol table information after the preceding
+     lop_stab lopcode.
+
+   Note that the lopcode "fixups"; `lop_fixr', `lop_fixrx' and
+`lop_fixo' are not generated by BFD, but are handled.  They are
+generated by `mmixal'.
+
+   This trivial one-label, one-instruction file:
+
+      :Main TRAP 1,2,3
+
+   can be represented this way in mmo:
+
+      0x98090101 - lop_pre, one 32-bit word with timestamp.
+      <timestamp>
+      0x98010002 - lop_loc, text segment, using a 64-bit address.
+                   Note that mmixal does not emit this for the file above.
+      0x00000000 - Address, high 32 bits.
+      0x00000000 - Address, low 32 bits.
+      0x98060002 - lop_file, 2 32-bit words for file-name.
+      0x74657374 - "test"
+      0x2e730000 - ".s\0\0"
+      0x98070001 - lop_line, line 1.
+      0x00010203 - TRAP 1,2,3
+      0x980a00ff - lop_post, setting $255 to 0.
+      0x00000000
+      0x00000000
+      0x980b0000 - lop_stab for ":Main" = 0, serial 1.
+      0x203a4040   *Note Symbol-table::.
+      0x10404020
+      0x4d206120
+      0x69016e00
+      0x81000000
+      0x980c0005 - lop_end; symbol table contained five 32-bit words.
+
+
+File: bfd.info,  Node: Symbol-table,  Next: mmo section mapping,  Prev: File layout,  Up: mmo
+
+3.5.2 Symbol table format
+-------------------------
+
+From mmixal.w (or really, the generated mmixal.tex) in
+`http://www-cs-faculty.stanford.edu/~knuth/programs/mmix.tar.gz'):
+"Symbols are stored and retrieved by means of a `ternary search trie',
+following ideas of Bentley and Sedgewick. (See ACM-SIAM Symp. on
+Discrete Algorithms `8' (1997), 360-369; R.Sedgewick, `Algorithms in C'
+(Reading, Mass.  Addison-Wesley, 1998), `15.4'.)  Each trie node stores
+a character, and there are branches to subtries for the cases where a
+given character is less than, equal to, or greater than the character
+in the trie.  There also is a pointer to a symbol table entry if a
+symbol ends at the current node."
+
+   So it's a tree encoded as a stream of bytes.  The stream of bytes
+acts on a single virtual global symbol, adding and removing characters
+and signalling complete symbol points.  Here, we read the stream and
+create symbols at the completion points.
+
+   First, there's a control byte `m'.  If any of the listed bits in `m'
+is nonzero, we execute what stands at the right, in the listed order:
+
+      (MMO3_LEFT)
+      0x40 - Traverse left trie.
+             (Read a new command byte and recurse.)
+
+      (MMO3_SYMBITS)
+      0x2f - Read the next byte as a character and store it in the
+             current character position; increment character position.
+             Test the bits of `m':
+
+             (MMO3_WCHAR)
+             0x80 - The character is 16-bit (so read another byte,
+                    merge into current character.
+
+             (MMO3_TYPEBITS)
+             0xf  - We have a complete symbol; parse the type, value
+                    and serial number and do what should be done
+                    with a symbol.  The type and length information
+                    is in j = (m & 0xf).
+
+                    (MMO3_REGQUAL_BITS)
+                    j == 0xf: A register variable.  The following
+                              byte tells which register.
+                    j <= 8:   An absolute symbol.  Read j bytes as the
+                              big-endian number the symbol equals.
+                              A j = 2 with two zero bytes denotes an
+                              unknown symbol.
+                    j > 8:    As with j <= 8, but add (0x20 << 56)
+                              to the value in the following j - 8
+                              bytes.
+
+                    Then comes the serial number, as a variant of
+                    uleb128, but better named ubeb128:
+                    Read bytes and shift the previous value left 7
+                    (multiply by 128).  Add in the new byte, repeat
+                    until a byte has bit 7 set.  The serial number
+                    is the computed value minus 128.
+
+             (MMO3_MIDDLE)
+             0x20 - Traverse middle trie.  (Read a new command byte
+                    and recurse.)  Decrement character position.
+
+      (MMO3_RIGHT)
+      0x10 - Traverse right trie.  (Read a new command byte and
+             recurse.)
+
+   Let's look again at the `lop_stab' for the trivial file (*note File
+layout::).
+
+      0x980b0000 - lop_stab for ":Main" = 0, serial 1.
+      0x203a4040
+      0x10404020
+      0x4d206120
+      0x69016e00
+      0x81000000
+
+   This forms the trivial trie (note that the path between ":" and "M"
+is redundant):
+
+      203a     ":"
+      40       /
+      40      /
+      10      \
+      40      /
+      40     /
+      204d  "M"
+      2061  "a"
+      2069  "i"
+      016e  "n" is the last character in a full symbol, and
+            with a value represented in one byte.
+      00    The value is 0.
+      81    The serial number is 1.
+
+
+File: bfd.info,  Node: mmo section mapping,  Prev: Symbol-table,  Up: mmo
+
+3.5.3 mmo section mapping
+-------------------------
+
+The implementation in BFD uses special data type 80 (decimal) to
+encapsulate and describe named sections, containing e.g. debug
+information.  If needed, any datum in the encapsulation will be quoted
+using lop_quote.  First comes a 32-bit word holding the number of
+32-bit words containing the zero-terminated zero-padded segment name.
+After the name there's a 32-bit word holding flags describing the
+section type.  Then comes a 64-bit big-endian word with the section
+length (in bytes), then another with the section start address.
+Depending on the type of section, the contents might follow,
+zero-padded to 32-bit boundary.  For a loadable section (such as data
+or code), the contents might follow at some later point, not
+necessarily immediately, as a lop_loc with the same start address as in
+the section description, followed by the contents.  This in effect
+forms a descriptor that must be emitted before the actual contents.
+Sections described this way must not overlap.
+
+   For areas that don't have such descriptors, synthetic sections are
+formed by BFD.  Consecutive contents in the two memory areas
+`0x0000...00' to `0x01ff...ff' and `0x2000...00' to `0x20ff...ff' are
+entered in sections named `.text' and `.data' respectively.  If an area
+is not otherwise described, but would together with a neighboring lower
+area be less than `0x40000000' bytes long, it is joined with the lower
+area and the gap is zero-filled.  For other cases, a new section is
+formed, named `.MMIX.sec.N'.  Here, N is a number, a running count
+through the mmo file, starting at 0.
+
+   A loadable section specified as:
+
+      .section secname,"ax"
+      TETRA 1,2,3,4,-1,-2009
+      BYTE 80
+
+   and linked to address `0x4', is represented by the sequence:
+
+      0x98080050 - lop_spec 80
+      0x00000002 - two 32-bit words for the section name
+      0x7365636e - "secn"
+      0x616d6500 - "ame\0"
+      0x00000033 - flags CODE, READONLY, LOAD, ALLOC
+      0x00000000 - high 32 bits of section length
+      0x0000001c - section length is 28 bytes; 6 * 4 + 1 + alignment to 32 bits
+      0x00000000 - high 32 bits of section address
+      0x00000004 - section address is 4
+      0x98010002 - 64 bits with address of following data
+      0x00000000 - high 32 bits of address
+      0x00000004 - low 32 bits: data starts at address 4
+      0x00000001 - 1
+      0x00000002 - 2
+      0x00000003 - 3
+      0x00000004 - 4
+      0xffffffff - -1
+      0xfffff827 - -2009
+      0x50000000 - 80 as a byte, padded with zeros.
+
+   Note that the lop_spec wrapping does not include the section
+contents.  Compare this to a non-loaded section specified as:
+
+      .section thirdsec
+      TETRA 200001,100002
+      BYTE 38,40
+
+   This, when linked to address `0x200000000000001c', is represented by:
+
+      0x98080050 - lop_spec 80
+      0x00000002 - two 32-bit words for the section name
+      0x7365636e - "thir"
+      0x616d6500 - "dsec"
+      0x00000010 - flag READONLY
+      0x00000000 - high 32 bits of section length
+      0x0000000c - section length is 12 bytes; 2 * 4 + 2 + alignment to 32 bits
+      0x20000000 - high 32 bits of address
+      0x0000001c - low 32 bits of address 0x200000000000001c
+      0x00030d41 - 200001
+      0x000186a2 - 100002
+      0x26280000 - 38, 40 as bytes, padded with zeros
+
+   For the latter example, the section contents must not be loaded in
+memory, and is therefore specified as part of the special data.  The
+address is usually unimportant but might provide information for e.g.
+the DWARF 2 debugging format.
+
+
+File: bfd.info,  Node: GNU Free Documentation License,  Next: BFD Index,  Prev: BFD back ends,  Up: Top
+
+                     Version 1.3, 3 November 2008
+
+     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+     `http://fsf.org/'
+
+     Everyone is permitted to copy and distribute verbatim copies
+     of this license document, but changing it is not allowed.
+
+  0. PREAMBLE
+
+     The purpose of this License is to make a manual, textbook, or other
+     functional and useful document "free" in the sense of freedom: to
+     assure everyone the effective freedom to copy and redistribute it,
+     with or without modifying it, either commercially or
+     noncommercially.  Secondarily, this License preserves for the
+     author and publisher a way to get credit for their work, while not
+     being considered responsible for modifications made by others.
+
+     This License is a kind of "copyleft", which means that derivative
+     works of the document must themselves be free in the same sense.
+     It complements the GNU General Public License, which is a copyleft
+     license designed for free software.
+
+     We have designed this License in order to use it for manuals for
+     free software, because free software needs free documentation: a
+     free program should come with manuals providing the same freedoms
+     that the software does.  But this License is not limited to
+     software manuals; it can be used for any textual work, regardless
+     of subject matter or whether it is published as a printed book.
+     We recommend this License principally for works whose purpose is
+     instruction or reference.
+
+  1. APPLICABILITY AND DEFINITIONS
+
+     This License applies to any manual or other work, in any medium,
+     that contains a notice placed by the copyright holder saying it
+     can be distributed under the terms of this License.  Such a notice
+     grants a world-wide, royalty-free license, unlimited in duration,
+     to use that work under the conditions stated herein.  The
+     "Document", below, refers to any such manual or work.  Any member
+     of the public is a licensee, and is addressed as "you".  You
+     accept the license if you copy, modify or distribute the work in a
+     way requiring permission under copyright law.
+
+     A "Modified Version" of the Document means any work containing the
+     Document or a portion of it, either copied verbatim, or with
+     modifications and/or translated into another language.
+
+     A "Secondary Section" is a named appendix or a front-matter section
+     of the Document that deals exclusively with the relationship of the
+     publishers or authors of the Document to the Document's overall
+     subject (or to related matters) and contains nothing that could
+     fall directly within that overall subject.  (Thus, if the Document
+     is in part a textbook of mathematics, a Secondary Section may not
+     explain any mathematics.)  The relationship could be a matter of
+     historical connection with the subject or with related matters, or
+     of legal, commercial, philosophical, ethical or political position
+     regarding them.
+
+     The "Invariant Sections" are certain Secondary Sections whose
+     titles are designated, as being those of Invariant Sections, in
+     the notice that says that the Document is released under this
+     License.  If a section does not fit the above definition of
+     Secondary then it is not allowed to be designated as Invariant.
+     The Document may contain zero Invariant Sections.  If the Document
+     does not identify any Invariant Sections then there are none.
+
+     The "Cover Texts" are certain short passages of text that are
+     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+     that says that the Document is released under this License.  A
+     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+     be at most 25 words.
+
+     A "Transparent" copy of the Document means a machine-readable copy,
+     represented in a format whose specification is available to the
+     general public, that is suitable for revising the document
+     straightforwardly with generic text editors or (for images
+     composed of pixels) generic paint programs or (for drawings) some
+     widely available drawing editor, and that is suitable for input to
+     text formatters or for automatic translation to a variety of
+     formats suitable for input to text formatters.  A copy made in an
+     otherwise Transparent file format whose markup, or absence of
+     markup, has been arranged to thwart or discourage subsequent
+     modification by readers is not Transparent.  An image format is
+     not Transparent if used for any substantial amount of text.  A
+     copy that is not "Transparent" is called "Opaque".
+
+     Examples of suitable formats for Transparent copies include plain
+     ASCII without markup, Texinfo input format, LaTeX input format,
+     SGML or XML using a publicly available DTD, and
+     standard-conforming simple HTML, PostScript or PDF designed for
+     human modification.  Examples of transparent image formats include
+     PNG, XCF and JPG.  Opaque formats include proprietary formats that
+     can be read and edited only by proprietary word processors, SGML or
+     XML for which the DTD and/or processing tools are not generally
+     available, and the machine-generated HTML, PostScript or PDF
+     produced by some word processors for output purposes only.
+
+     The "Title Page" means, for a printed book, the title page itself,
+     plus such following pages as are needed to hold, legibly, the
+     material this License requires to appear in the title page.  For
+     works in formats which do not have any title page as such, "Title
+     Page" means the text near the most prominent appearance of the
+     work's title, preceding the beginning of the body of the text.
+
+     The "publisher" means any person or entity that distributes copies
+     of the Document to the public.
+
+     A section "Entitled XYZ" means a named subunit of the Document
+     whose title either is precisely XYZ or contains XYZ in parentheses
+     following text that translates XYZ in another language.  (Here XYZ
+     stands for a specific section name mentioned below, such as
+     "Acknowledgements", "Dedications", "Endorsements", or "History".)
+     To "Preserve the Title" of such a section when you modify the
+     Document means that it remains a section "Entitled XYZ" according
+     to this definition.
+
+     The Document may include Warranty Disclaimers next to the notice
+     which states that this License applies to the Document.  These
+     Warranty Disclaimers are considered to be included by reference in
+     this License, but only as regards disclaiming warranties: any other
+     implication that these Warranty Disclaimers may have is void and
+     has no effect on the meaning of this License.
+
+  2. VERBATIM COPYING
+
+     You may copy and distribute the Document in any medium, either
+     commercially or noncommercially, provided that this License, the
+     copyright notices, and the license notice saying this License
+     applies to the Document are reproduced in all copies, and that you
+     add no other conditions whatsoever to those of this License.  You
+     may not use technical measures to obstruct or control the reading
+     or further copying of the copies you make or distribute.  However,
+     you may accept compensation in exchange for copies.  If you
+     distribute a large enough number of copies you must also follow
+     the conditions in section 3.
+
+     You may also lend copies, under the same conditions stated above,
+     and you may publicly display copies.
+
+  3. COPYING IN QUANTITY
+
+     If you publish printed copies (or copies in media that commonly
+     have printed covers) of the Document, numbering more than 100, and
+     the Document's license notice requires Cover Texts, you must
+     enclose the copies in covers that carry, clearly and legibly, all
+     these Cover Texts: Front-Cover Texts on the front cover, and
+     Back-Cover Texts on the back cover.  Both covers must also clearly
+     and legibly identify you as the publisher of these copies.  The
+     front cover must present the full title with all words of the
+     title equally prominent and visible.  You may add other material
+     on the covers in addition.  Copying with changes limited to the
+     covers, as long as they preserve the title of the Document and
+     satisfy these conditions, can be treated as verbatim copying in
+     other respects.
+
+     If the required texts for either cover are too voluminous to fit
+     legibly, you should put the first ones listed (as many as fit
+     reasonably) on the actual cover, and continue the rest onto
+     adjacent pages.
+
+     If you publish or distribute Opaque copies of the Document
+     numbering more than 100, you must either include a
+     machine-readable Transparent copy along with each Opaque copy, or
+     state in or with each Opaque copy a computer-network location from
+     which the general network-using public has access to download
+     using public-standard network protocols a complete Transparent
+     copy of the Document, free of added material.  If you use the
+     latter option, you must take reasonably prudent steps, when you
+     begin distribution of Opaque copies in quantity, to ensure that
+     this Transparent copy will remain thus accessible at the stated
+     location until at least one year after the last time you
+     distribute an Opaque copy (directly or through your agents or
+     retailers) of that edition to the public.
+
+     It is requested, but not required, that you contact the authors of
+     the Document well before redistributing any large number of
+     copies, to give them a chance to provide you with an updated
+     version of the Document.
+
+  4. MODIFICATIONS
+
+     You may copy and distribute a Modified Version of the Document
+     under the conditions of sections 2 and 3 above, provided that you
+     release the Modified Version under precisely this License, with
+     the Modified Version filling the role of the Document, thus
+     licensing distribution and modification of the Modified Version to
+     whoever possesses a copy of it.  In addition, you must do these
+     things in the Modified Version:
+
+       A. Use in the Title Page (and on the covers, if any) a title
+          distinct from that of the Document, and from those of
+          previous versions (which should, if there were any, be listed
+          in the History section of the Document).  You may use the
+          same title as a previous version if the original publisher of
+          that version gives permission.
+
+       B. List on the Title Page, as authors, one or more persons or
+          entities responsible for authorship of the modifications in
+          the Modified Version, together with at least five of the
+          principal authors of the Document (all of its principal
+          authors, if it has fewer than five), unless they release you
+          from this requirement.
+
+       C. State on the Title page the name of the publisher of the
+          Modified Version, as the publisher.
+
+       D. Preserve all the copyright notices of the Document.
+
+       E. Add an appropriate copyright notice for your modifications
+          adjacent to the other copyright notices.
+
+       F. Include, immediately after the copyright notices, a license
+          notice giving the public permission to use the Modified
+          Version under the terms of this License, in the form shown in
+          the Addendum below.
+
+       G. Preserve in that license notice the full lists of Invariant
+          Sections and required Cover Texts given in the Document's
+          license notice.
+
+       H. Include an unaltered copy of this License.
+
+       I. Preserve the section Entitled "History", Preserve its Title,
+          and add to it an item stating at least the title, year, new
+          authors, and publisher of the Modified Version as given on
+          the Title Page.  If there is no section Entitled "History" in
+          the Document, create one stating the title, year, authors,
+          and publisher of the Document as given on its Title Page,
+          then add an item describing the Modified Version as stated in
+          the previous sentence.
+
+       J. Preserve the network location, if any, given in the Document
+          for public access to a Transparent copy of the Document, and
+          likewise the network locations given in the Document for
+          previous versions it was based on.  These may be placed in
+          the "History" section.  You may omit a network location for a
+          work that was published at least four years before the
+          Document itself, or if the original publisher of the version
+          it refers to gives permission.
+
+       K. For any section Entitled "Acknowledgements" or "Dedications",
+          Preserve the Title of the section, and preserve in the
+          section all the substance and tone of each of the contributor
+          acknowledgements and/or dedications given therein.
+
+       L. Preserve all the Invariant Sections of the Document,
+          unaltered in their text and in their titles.  Section numbers
+          or the equivalent are not considered part of the section
+          titles.
+
+       M. Delete any section Entitled "Endorsements".  Such a section
+          may not be included in the Modified Version.
+
+       N. Do not retitle any existing section to be Entitled
+          "Endorsements" or to conflict in title with any Invariant
+          Section.
+
+       O. Preserve any Warranty Disclaimers.
+
+     If the Modified Version includes new front-matter sections or
+     appendices that qualify as Secondary Sections and contain no
+     material copied from the Document, you may at your option
+     designate some or all of these sections as invariant.  To do this,
+     add their titles to the list of Invariant Sections in the Modified
+     Version's license notice.  These titles must be distinct from any
+     other section titles.
+
+     You may add a section Entitled "Endorsements", provided it contains
+     nothing but endorsements of your Modified Version by various
+     parties--for example, statements of peer review or that the text
+     has been approved by an organization as the authoritative
+     definition of a standard.
+
+     You may add a passage of up to five words as a Front-Cover Text,
+     and a passage of up to 25 words as a Back-Cover Text, to the end
+     of the list of Cover Texts in the Modified Version.  Only one
+     passage of Front-Cover Text and one of Back-Cover Text may be
+     added by (or through arrangements made by) any one entity.  If the
+     Document already includes a cover text for the same cover,
+     previously added by you or by arrangement made by the same entity
+     you are acting on behalf of, you may not add another; but you may
+     replace the old one, on explicit permission from the previous
+     publisher that added the old one.
+
+     The author(s) and publisher(s) of the Document do not by this
+     License give permission to use their names for publicity for or to
+     assert or imply endorsement of any Modified Version.
+
+  5. COMBINING DOCUMENTS
+
+     You may combine the Document with other documents released under
+     this License, under the terms defined in section 4 above for
+     modified versions, provided that you include in the combination
+     all of the Invariant Sections of all of the original documents,
+     unmodified, and list them all as Invariant Sections of your
+     combined work in its license notice, and that you preserve all
+     their Warranty Disclaimers.
+
+     The combined work need only contain one copy of this License, and
+     multiple identical Invariant Sections may be replaced with a single
+     copy.  If there are multiple Invariant Sections with the same name
+     but different contents, make the title of each such section unique
+     by adding at the end of it, in parentheses, the name of the
+     original author or publisher of that section if known, or else a
+     unique number.  Make the same adjustment to the section titles in
+     the list of Invariant Sections in the license notice of the
+     combined work.
+
+     In the combination, you must combine any sections Entitled
+     "History" in the various original documents, forming one section
+     Entitled "History"; likewise combine any sections Entitled
+     "Acknowledgements", and any sections Entitled "Dedications".  You
+     must delete all sections Entitled "Endorsements."
+
+  6. COLLECTIONS OF DOCUMENTS
+
+     You may make a collection consisting of the Document and other
+     documents released under this License, and replace the individual
+     copies of this License in the various documents with a single copy
+     that is included in the collection, provided that you follow the
+     rules of this License for verbatim copying of each of the
+     documents in all other respects.
+
+     You may extract a single document from such a collection, and
+     distribute it individually under this License, provided you insert
+     a copy of this License into the extracted document, and follow
+     this License in all other respects regarding verbatim copying of
+     that document.
+
+  7. AGGREGATION WITH INDEPENDENT WORKS
+
+     A compilation of the Document or its derivatives with other
+     separate and independent documents or works, in or on a volume of
+     a storage or distribution medium, is called an "aggregate" if the
+     copyright resulting from the compilation is not used to limit the
+     legal rights of the compilation's users beyond what the individual
+     works permit.  When the Document is included in an aggregate, this
+     License does not apply to the other works in the aggregate which
+     are not themselves derivative works of the Document.
+
+     If the Cover Text requirement of section 3 is applicable to these
+     copies of the Document, then if the Document is less than one half
+     of the entire aggregate, the Document's Cover Texts may be placed
+     on covers that bracket the Document within the aggregate, or the
+     electronic equivalent of covers if the Document is in electronic
+     form.  Otherwise they must appear on printed covers that bracket
+     the whole aggregate.
+
+  8. TRANSLATION
+
+     Translation is considered a kind of modification, so you may
+     distribute translations of the Document under the terms of section
+     4.  Replacing Invariant Sections with translations requires special
+     permission from their copyright holders, but you may include
+     translations of some or all Invariant Sections in addition to the
+     original versions of these Invariant Sections.  You may include a
+     translation of this License, and all the license notices in the
+     Document, and any Warranty Disclaimers, provided that you also
+     include the original English version of this License and the
+     original versions of those notices and disclaimers.  In case of a
+     disagreement between the translation and the original version of
+     this License or a notice or disclaimer, the original version will
+     prevail.
+
+     If a section in the Document is Entitled "Acknowledgements",
+     "Dedications", or "History", the requirement (section 4) to
+     Preserve its Title (section 1) will typically require changing the
+     actual title.
+
+  9. TERMINATION
+
+     You may not copy, modify, sublicense, or distribute the Document
+     except as expressly provided under this License.  Any attempt
+     otherwise to copy, modify, sublicense, or distribute it is void,
+     and will automatically terminate your rights under this License.
+
+     However, if you cease all violation of this License, then your
+     license from a particular copyright holder is reinstated (a)
+     provisionally, unless and until the copyright holder explicitly
+     and finally terminates your license, and (b) permanently, if the
+     copyright holder fails to notify you of the violation by some
+     reasonable means prior to 60 days after the cessation.
+
+     Moreover, your license from a particular copyright holder is
+     reinstated permanently if the copyright holder notifies you of the
+     violation by some reasonable means, this is the first time you have
+     received notice of violation of this License (for any work) from
+     that copyright holder, and you cure the violation prior to 30 days
+     after your receipt of the notice.
+
+     Termination of your rights under this section does not terminate
+     the licenses of parties who have received copies or rights from
+     you under this License.  If your rights have been terminated and
+     not permanently reinstated, receipt of a copy of some or all of
+     the same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+     The Free Software Foundation may publish new, revised versions of
+     the GNU Free Documentation 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.  See
+     `http://www.gnu.org/copyleft/'.
+
+     Each version of the License is given a distinguishing version
+     number.  If the Document specifies that a particular numbered
+     version of this License "or any later version" applies to it, you
+     have the option of following the terms and conditions either of
+     that specified version or of any later version that has been
+     published (not as a draft) by the Free Software Foundation.  If
+     the Document does not specify a version number of this License,
+     you may choose any version ever published (not as a draft) by the
+     Free Software Foundation.  If the Document specifies that a proxy
+     can decide which future versions of this License can be used, that
+     proxy's public statement of acceptance of a version permanently
+     authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+     World Wide Web server that publishes copyrightable works and also
+     provides prominent facilities for anybody to edit those works.  A
+     public wiki that anybody can edit is an example of such a server.
+     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+     site means any set of copyrightable works thus published on the MMC
+     site.
+
+     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+     license published by Creative Commons Corporation, a not-for-profit
+     corporation with a principal place of business in San Francisco,
+     California, as well as future copyleft versions of that license
+     published by that same organization.
+
+     "Incorporate" means to publish or republish a Document, in whole or
+     in part, as part of another Document.
+
+     An MMC is "eligible for relicensing" if it is licensed under this
+     License, and if all works that were first published under this
+     License somewhere other than this MMC, and subsequently
+     incorporated in whole or in part into the MMC, (1) had no cover
+     texts or invariant sections, and (2) were thus incorporated prior
+     to November 1, 2008.
+
+     The operator of an MMC Site may republish an MMC contained in the
+     site under CC-BY-SA on the same site at any time before August 1,
+     2009, provided the MMC is eligible for relicensing.
+
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+       Copyright (C)  YEAR  YOUR NAME.
+       Permission is granted to copy, distribute and/or modify this document
+       under the terms of the GNU Free Documentation License, Version 1.3
+       or any later version published by the Free Software Foundation;
+       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+       Texts.  A copy of the license is included in the section entitled ``GNU
+       Free Documentation License''.
+
+   If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+         with the Invariant Sections being LIST THEIR TITLES, with
+         the Front-Cover Texts being LIST, and with the Back-Cover Texts
+         being LIST.
+
+   If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+   If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License, to
+permit their use in free software.
+
+
+File: bfd.info,  Node: BFD Index,  Prev: GNU Free Documentation License,  Up: Top
+
+BFD Index
+*********
+
+ [index ]
+* Menu:
+
+* _bfd_final_link_relocate:              Relocating the section contents.
+                                                             (line   22)
+* _bfd_generic_link_add_archive_symbols: Adding symbols from an archive.
+                                                             (line   15)
+* _bfd_generic_link_add_one_symbol:      Adding symbols from an object file.
+                                                             (line   19)
+* _bfd_generic_make_empty_symbol:        symbol handling functions.
+                                                             (line   92)
+* _bfd_link_add_symbols in target vector: Adding Symbols to the Hash Table.
+                                                             (line    6)
+* _bfd_link_final_link in target vector: Performing the Final Link.
+                                                             (line    6)
+* _bfd_link_hash_table_create in target vector: Creating a Linker Hash Table.
+                                                             (line    6)
+* _bfd_relocate_contents:                Relocating the section contents.
+                                                             (line   22)
+* aout_SIZE_machine_type:                aout.               (line  147)
+* aout_SIZE_mkobject:                    aout.               (line  139)
+* aout_SIZE_new_section_hook:            aout.               (line  177)
+* aout_SIZE_set_arch_mach:               aout.               (line  164)
+* aout_SIZE_some_aout_object_p:          aout.               (line  125)
+* aout_SIZE_swap_exec_header_in:         aout.               (line  101)
+* aout_SIZE_swap_exec_header_out:        aout.               (line  113)
+* arelent_chain:                         typedef arelent.    (line  336)
+* BFD:                                   Overview.           (line    6)
+* BFD canonical format:                  Canonical format.   (line   11)
+* bfd_alloc:                             Opening and Closing.
+                                                             (line  218)
+* bfd_alloc2:                            Opening and Closing.
+                                                             (line  227)
+* bfd_alt_mach_code:                     BFD front end.      (line  746)
+* bfd_arch_bits_per_address:             Architectures.      (line  561)
+* bfd_arch_bits_per_byte:                Architectures.      (line  553)
+* bfd_arch_default_fill:                 Architectures.      (line  642)
+* bfd_arch_get_compatible:               Architectures.      (line  496)
+* bfd_arch_list:                         Architectures.      (line  487)
+* bfd_arch_mach_octets_per_byte:         Architectures.      (line  630)
+* BFD_ARELOC_BFIN_ADD:                   howto manager.      (line 1107)
+* BFD_ARELOC_BFIN_ADDR:                  howto manager.      (line 1158)
+* BFD_ARELOC_BFIN_AND:                   howto manager.      (line 1128)
+* BFD_ARELOC_BFIN_COMP:                  howto manager.      (line 1149)
+* BFD_ARELOC_BFIN_CONST:                 howto manager.      (line 1104)
+* BFD_ARELOC_BFIN_DIV:                   howto manager.      (line 1116)
+* BFD_ARELOC_BFIN_HWPAGE:                howto manager.      (line 1155)
+* BFD_ARELOC_BFIN_LAND:                  howto manager.      (line 1137)
+* BFD_ARELOC_BFIN_LEN:                   howto manager.      (line 1143)
+* BFD_ARELOC_BFIN_LOR:                   howto manager.      (line 1140)
+* BFD_ARELOC_BFIN_LSHIFT:                howto manager.      (line 1122)
+* BFD_ARELOC_BFIN_MOD:                   howto manager.      (line 1119)
+* BFD_ARELOC_BFIN_MULT:                  howto manager.      (line 1113)
+* BFD_ARELOC_BFIN_NEG:                   howto manager.      (line 1146)
+* BFD_ARELOC_BFIN_OR:                    howto manager.      (line 1131)
+* BFD_ARELOC_BFIN_PAGE:                  howto manager.      (line 1152)
+* BFD_ARELOC_BFIN_PUSH:                  howto manager.      (line 1101)
+* BFD_ARELOC_BFIN_RSHIFT:                howto manager.      (line 1125)
+* BFD_ARELOC_BFIN_SUB:                   howto manager.      (line 1110)
+* BFD_ARELOC_BFIN_XOR:                   howto manager.      (line 1134)
+* bfd_cache_close:                       File Caching.       (line   26)
+* bfd_cache_close_all:                   File Caching.       (line   39)
+* bfd_cache_init:                        File Caching.       (line   18)
+* bfd_calc_gnu_debuglink_crc32:          Opening and Closing.
+                                                             (line  254)
+* bfd_canonicalize_reloc:                BFD front end.      (line  462)
+* bfd_canonicalize_symtab:               symbol handling functions.
+                                                             (line   50)
+* bfd_check_format:                      Formats.            (line   21)
+* bfd_check_format_matches:              Formats.            (line   52)
+* bfd_check_overflow:                    typedef arelent.    (line  348)
+* bfd_close:                             Opening and Closing.
+                                                             (line  143)
+* bfd_close_all_done:                    Opening and Closing.
+                                                             (line  161)
+* bfd_coff_backend_data:                 coff.               (line  304)
+* bfd_copy_private_bfd_data:             BFD front end.      (line  601)
+* bfd_copy_private_header_data:          BFD front end.      (line  583)
+* bfd_copy_private_section_data:         section prototypes. (line  278)
+* bfd_copy_private_symbol_data:          symbol handling functions.
+                                                             (line  140)
+* bfd_core_file_failing_command:         Core Files.         (line   12)
+* bfd_core_file_failing_signal:          Core Files.         (line   21)
+* bfd_core_file_pid:                     Core Files.         (line   30)
+* bfd_create:                            Opening and Closing.
+                                                             (line  180)
+* bfd_create_gnu_debuglink_section:      Opening and Closing.
+                                                             (line  320)
+* bfd_decode_symclass:                   symbol handling functions.
+                                                             (line  111)
+* bfd_default_arch_struct:               Architectures.      (line  508)
+* bfd_default_compatible:                Architectures.      (line  570)
+* bfd_default_reloc_type_lookup:         howto manager.      (line 2809)
+* bfd_default_scan:                      Architectures.      (line  579)
+* bfd_default_set_arch_mach:             Architectures.      (line  526)
+* bfd_demangle:                          BFD front end.      (line  844)
+* bfd_emul_get_commonpagesize:           BFD front end.      (line  824)
+* bfd_emul_get_maxpagesize:              BFD front end.      (line  804)
+* bfd_emul_set_commonpagesize:           BFD front end.      (line  835)
+* bfd_emul_set_maxpagesize:              BFD front end.      (line  815)
+* bfd_errmsg:                            BFD front end.      (line  355)
+* bfd_fdopenr:                           Opening and Closing.
+                                                             (line   51)
+* bfd_fill_in_gnu_debuglink_section:     Opening and Closing.
+                                                             (line  334)
+* bfd_find_target:                       bfd_target.         (line  469)
+* bfd_find_version_for_sym:              Writing the symbol table.
+                                                             (line   81)
+* bfd_follow_gnu_debuglink:              Opening and Closing.
+                                                             (line  299)
+* bfd_fopen:                             Opening and Closing.
+                                                             (line   12)
+* bfd_format_string:                     Formats.            (line   79)
+* bfd_generic_define_common_symbol:      Writing the symbol table.
+                                                             (line   68)
+* bfd_generic_discard_group:             section prototypes. (line  304)
+* bfd_generic_gc_sections:               howto manager.      (line 2840)
+* bfd_generic_get_relocated_section_contents: howto manager. (line 2870)
+* bfd_generic_is_group_section:          section prototypes. (line  296)
+* bfd_generic_lookup_section_flags:      howto manager.      (line 2850)
+* bfd_generic_merge_sections:            howto manager.      (line 2860)
+* bfd_generic_relax_section:             howto manager.      (line 2827)
+* bfd_get_arch:                          Architectures.      (line  537)
+* bfd_get_arch_info:                     Architectures.      (line  589)
+* bfd_get_arch_size:                     BFD front end.      (line  506)
+* bfd_get_assert_handler:                BFD front end.      (line  438)
+* bfd_get_error:                         BFD front end.      (line  336)
+* bfd_get_error_handler:                 BFD front end.      (line  406)
+* bfd_get_gp_size:                       BFD front end.      (line  547)
+* bfd_get_linker_section:                section prototypes. (line   36)
+* bfd_get_mach:                          Architectures.      (line  545)
+* bfd_get_mtime:                         BFD front end.      (line  895)
+* bfd_get_next_mapent:                   Archives.           (line   52)
+* bfd_get_next_section_by_name:          section prototypes. (line   26)
+* bfd_get_reloc_code_name:               howto manager.      (line 2818)
+* bfd_get_reloc_size:                    typedef arelent.    (line  327)
+* bfd_get_reloc_upper_bound:             BFD front end.      (line  452)
+* bfd_get_section_by_name:               section prototypes. (line   17)
+* bfd_get_section_by_name_if:            section prototypes. (line   45)
+* bfd_get_section_contents:              section prototypes. (line  251)
+* bfd_get_sign_extend_vma:               BFD front end.      (line  519)
+* bfd_get_size <1>:                      Internal.           (line   25)
+* bfd_get_size:                          BFD front end.      (line  904)
+* bfd_get_symtab_upper_bound:            symbol handling functions.
+                                                             (line    6)
+* bfd_get_target_info:                   bfd_target.         (line  485)
+* bfd_get_unique_section_name:           section prototypes. (line   64)
+* bfd_h_put_size:                        Internal.           (line   97)
+* bfd_hash_allocate:                     Creating and Freeing a Hash Table.
+                                                             (line   17)
+* bfd_hash_lookup:                       Looking Up or Entering a String.
+                                                             (line    6)
+* bfd_hash_newfunc:                      Creating and Freeing a Hash Table.
+                                                             (line   12)
+* bfd_hash_set_default_size:             Creating and Freeing a Hash Table.
+                                                             (line   25)
+* bfd_hash_table_free:                   Creating and Freeing a Hash Table.
+                                                             (line   21)
+* bfd_hash_table_init:                   Creating and Freeing a Hash Table.
+                                                             (line    6)
+* bfd_hash_table_init_n:                 Creating and Freeing a Hash Table.
+                                                             (line    6)
+* bfd_hash_traverse:                     Traversing a Hash Table.
+                                                             (line    6)
+* bfd_hide_sym_by_version:               Writing the symbol table.
+                                                             (line   93)
+* bfd_init:                              Initialization.     (line   11)
+* bfd_install_relocation:                typedef arelent.    (line  389)
+* bfd_is_local_label:                    symbol handling functions.
+                                                             (line   17)
+* bfd_is_local_label_name:               symbol handling functions.
+                                                             (line   26)
+* bfd_is_target_special_symbol:          symbol handling functions.
+                                                             (line   38)
+* bfd_is_undefined_symclass:             symbol handling functions.
+                                                             (line  120)
+* bfd_link_split_section:                Writing the symbol table.
+                                                             (line   44)
+* bfd_log2:                              Internal.           (line  164)
+* bfd_lookup_arch:                       Architectures.      (line  597)
+* bfd_make_debug_symbol:                 symbol handling functions.
+                                                             (line  102)
+* bfd_make_empty_symbol:                 symbol handling functions.
+                                                             (line   78)
+* bfd_make_readable:                     Opening and Closing.
+                                                             (line  204)
+* bfd_make_section:                      section prototypes. (line  143)
+* bfd_make_section_anyway:               section prototypes. (line  114)
+* bfd_make_section_anyway_with_flags:    section prototypes. (line   96)
+* bfd_make_section_old_way:              section prototypes. (line   76)
+* bfd_make_section_with_flags:           section prototypes. (line  130)
+* bfd_make_writable:                     Opening and Closing.
+                                                             (line  190)
+* bfd_malloc_and_get_section:            section prototypes. (line  268)
+* bfd_map_over_sections:                 section prototypes. (line  178)
+* bfd_merge_private_bfd_data:            BFD front end.      (line  617)
+* bfd_mmap:                              BFD front end.      (line  933)
+* bfd_octets_per_byte:                   Architectures.      (line  620)
+* bfd_open_file:                         File Caching.       (line   52)
+* bfd_openr:                             Opening and Closing.
+                                                             (line   35)
+* bfd_openr_iovec:                       Opening and Closing.
+                                                             (line   83)
+* bfd_openr_next_archived_file:          Archives.           (line   78)
+* bfd_openstreamr:                       Opening and Closing.
+                                                             (line   74)
+* bfd_openw:                             Opening and Closing.
+                                                             (line  131)
+* bfd_perform_relocation:                typedef arelent.    (line  364)
+* bfd_perror:                            BFD front end.      (line  364)
+* bfd_preserve_finish:                   BFD front end.      (line  794)
+* bfd_preserve_restore:                  BFD front end.      (line  784)
+* bfd_preserve_save:                     BFD front end.      (line  768)
+* bfd_print_symbol_vandf:                symbol handling functions.
+                                                             (line   70)
+* bfd_printable_arch_mach:               Architectures.      (line  608)
+* bfd_printable_name:                    Architectures.      (line  468)
+* bfd_put_size:                          Internal.           (line   22)
+* BFD_RELOC_12_PCREL:                    howto manager.      (line   39)
+* BFD_RELOC_14:                          howto manager.      (line   31)
+* BFD_RELOC_16:                          howto manager.      (line   30)
+* BFD_RELOC_16_BASEREL:                  howto manager.      (line   95)
+* BFD_RELOC_16_GOT_PCREL:                howto manager.      (line   52)
+* BFD_RELOC_16_GOTOFF:                   howto manager.      (line   55)
+* BFD_RELOC_16_PCREL:                    howto manager.      (line   38)
+* BFD_RELOC_16_PCREL_S2:                 howto manager.      (line  107)
+* BFD_RELOC_16_PLT_PCREL:                howto manager.      (line   63)
+* BFD_RELOC_16_PLTOFF:                   howto manager.      (line   67)
+* BFD_RELOC_16C_ABS20:                   howto manager.      (line 2170)
+* BFD_RELOC_16C_ABS20_C:                 howto manager.      (line 2171)
+* BFD_RELOC_16C_ABS24:                   howto manager.      (line 2172)
+* BFD_RELOC_16C_ABS24_C:                 howto manager.      (line 2173)
+* BFD_RELOC_16C_DISP04:                  howto manager.      (line 2150)
+* BFD_RELOC_16C_DISP04_C:                howto manager.      (line 2151)
+* BFD_RELOC_16C_DISP08:                  howto manager.      (line 2152)
+* BFD_RELOC_16C_DISP08_C:                howto manager.      (line 2153)
+* BFD_RELOC_16C_DISP16:                  howto manager.      (line 2154)
+* BFD_RELOC_16C_DISP16_C:                howto manager.      (line 2155)
+* BFD_RELOC_16C_DISP24:                  howto manager.      (line 2156)
+* BFD_RELOC_16C_DISP24_C:                howto manager.      (line 2157)
+* BFD_RELOC_16C_DISP24a:                 howto manager.      (line 2158)
+* BFD_RELOC_16C_DISP24a_C:               howto manager.      (line 2159)
+* BFD_RELOC_16C_IMM04:                   howto manager.      (line 2174)
+* BFD_RELOC_16C_IMM04_C:                 howto manager.      (line 2175)
+* BFD_RELOC_16C_IMM16:                   howto manager.      (line 2176)
+* BFD_RELOC_16C_IMM16_C:                 howto manager.      (line 2177)
+* BFD_RELOC_16C_IMM20:                   howto manager.      (line 2178)
+* BFD_RELOC_16C_IMM20_C:                 howto manager.      (line 2179)
+* BFD_RELOC_16C_IMM24:                   howto manager.      (line 2180)
+* BFD_RELOC_16C_IMM24_C:                 howto manager.      (line 2181)
+* BFD_RELOC_16C_IMM32:                   howto manager.      (line 2182)
+* BFD_RELOC_16C_IMM32_C:                 howto manager.      (line 2183)
+* BFD_RELOC_16C_NUM08:                   howto manager.      (line 2144)
+* BFD_RELOC_16C_NUM08_C:                 howto manager.      (line 2145)
+* BFD_RELOC_16C_NUM16:                   howto manager.      (line 2146)
+* BFD_RELOC_16C_NUM16_C:                 howto manager.      (line 2147)
+* BFD_RELOC_16C_NUM32:                   howto manager.      (line 2148)
+* BFD_RELOC_16C_NUM32_C:                 howto manager.      (line 2149)
+* BFD_RELOC_16C_REG04:                   howto manager.      (line 2160)
+* BFD_RELOC_16C_REG04_C:                 howto manager.      (line 2161)
+* BFD_RELOC_16C_REG04a:                  howto manager.      (line 2162)
+* BFD_RELOC_16C_REG04a_C:                howto manager.      (line 2163)
+* BFD_RELOC_16C_REG14:                   howto manager.      (line 2164)
+* BFD_RELOC_16C_REG14_C:                 howto manager.      (line 2165)
+* BFD_RELOC_16C_REG16:                   howto manager.      (line 2166)
+* BFD_RELOC_16C_REG16_C:                 howto manager.      (line 2167)
+* BFD_RELOC_16C_REG20:                   howto manager.      (line 2168)
+* BFD_RELOC_16C_REG20_C:                 howto manager.      (line 2169)
+* BFD_RELOC_23_PCREL_S2:                 howto manager.      (line  108)
+* BFD_RELOC_24:                          howto manager.      (line   29)
+* BFD_RELOC_24_PCREL:                    howto manager.      (line   37)
+* BFD_RELOC_24_PLT_PCREL:                howto manager.      (line   62)
+* BFD_RELOC_26:                          howto manager.      (line   28)
+* BFD_RELOC_32:                          howto manager.      (line   27)
+* BFD_RELOC_32_BASEREL:                  howto manager.      (line   94)
+* BFD_RELOC_32_GOT_PCREL:                howto manager.      (line   51)
+* BFD_RELOC_32_GOTOFF:                   howto manager.      (line   54)
+* BFD_RELOC_32_PCREL:                    howto manager.      (line   36)
+* BFD_RELOC_32_PCREL_S2:                 howto manager.      (line  106)
+* BFD_RELOC_32_PLT_PCREL:                howto manager.      (line   61)
+* BFD_RELOC_32_PLTOFF:                   howto manager.      (line   66)
+* BFD_RELOC_32_SECREL:                   howto manager.      (line   48)
+* BFD_RELOC_386_COPY:                    howto manager.      (line  572)
+* BFD_RELOC_386_GLOB_DAT:                howto manager.      (line  573)
+* BFD_RELOC_386_GOT32:                   howto manager.      (line  570)
+* BFD_RELOC_386_GOTOFF:                  howto manager.      (line  576)
+* BFD_RELOC_386_GOTPC:                   howto manager.      (line  577)
+* BFD_RELOC_386_IRELATIVE:               howto manager.      (line  593)
+* BFD_RELOC_386_JUMP_SLOT:               howto manager.      (line  574)
+* BFD_RELOC_386_PLT32:                   howto manager.      (line  571)
+* BFD_RELOC_386_RELATIVE:                howto manager.      (line  575)
+* BFD_RELOC_386_TLS_DESC:                howto manager.      (line  592)
+* BFD_RELOC_386_TLS_DESC_CALL:           howto manager.      (line  591)
+* BFD_RELOC_386_TLS_DTPMOD32:            howto manager.      (line  587)
+* BFD_RELOC_386_TLS_DTPOFF32:            howto manager.      (line  588)
+* BFD_RELOC_386_TLS_GD:                  howto manager.      (line  582)
+* BFD_RELOC_386_TLS_GOTDESC:             howto manager.      (line  590)
+* BFD_RELOC_386_TLS_GOTIE:               howto manager.      (line  580)
+* BFD_RELOC_386_TLS_IE:                  howto manager.      (line  579)
+* BFD_RELOC_386_TLS_IE_32:               howto manager.      (line  585)
+* BFD_RELOC_386_TLS_LDM:                 howto manager.      (line  583)
+* BFD_RELOC_386_TLS_LDO_32:              howto manager.      (line  584)
+* BFD_RELOC_386_TLS_LE:                  howto manager.      (line  581)
+* BFD_RELOC_386_TLS_LE_32:               howto manager.      (line  586)
+* BFD_RELOC_386_TLS_TPOFF:               howto manager.      (line  578)
+* BFD_RELOC_386_TLS_TPOFF32:             howto manager.      (line  589)
+* BFD_RELOC_390_12:                      howto manager.      (line 1765)
+* BFD_RELOC_390_20:                      howto manager.      (line 1865)
+* BFD_RELOC_390_COPY:                    howto manager.      (line 1774)
+* BFD_RELOC_390_GLOB_DAT:                howto manager.      (line 1777)
+* BFD_RELOC_390_GOT12:                   howto manager.      (line 1768)
+* BFD_RELOC_390_GOT16:                   howto manager.      (line 1789)
+* BFD_RELOC_390_GOT20:                   howto manager.      (line 1866)
+* BFD_RELOC_390_GOT64:                   howto manager.      (line 1807)
+* BFD_RELOC_390_GOTENT:                  howto manager.      (line 1813)
+* BFD_RELOC_390_GOTOFF64:                howto manager.      (line 1816)
+* BFD_RELOC_390_GOTPC:                   howto manager.      (line 1786)
+* BFD_RELOC_390_GOTPCDBL:                howto manager.      (line 1804)
+* BFD_RELOC_390_GOTPLT12:                howto manager.      (line 1819)
+* BFD_RELOC_390_GOTPLT16:                howto manager.      (line 1822)
+* BFD_RELOC_390_GOTPLT20:                howto manager.      (line 1867)
+* BFD_RELOC_390_GOTPLT32:                howto manager.      (line 1825)
+* BFD_RELOC_390_GOTPLT64:                howto manager.      (line 1828)
+* BFD_RELOC_390_GOTPLTENT:               howto manager.      (line 1831)
+* BFD_RELOC_390_IRELATIVE:               howto manager.      (line 1871)
+* BFD_RELOC_390_JMP_SLOT:                howto manager.      (line 1780)
+* BFD_RELOC_390_PC16DBL:                 howto manager.      (line 1792)
+* BFD_RELOC_390_PC32DBL:                 howto manager.      (line 1798)
+* BFD_RELOC_390_PLT16DBL:                howto manager.      (line 1795)
+* BFD_RELOC_390_PLT32:                   howto manager.      (line 1771)
+* BFD_RELOC_390_PLT32DBL:                howto manager.      (line 1801)
+* BFD_RELOC_390_PLT64:                   howto manager.      (line 1810)
+* BFD_RELOC_390_PLTOFF16:                howto manager.      (line 1834)
+* BFD_RELOC_390_PLTOFF32:                howto manager.      (line 1837)
+* BFD_RELOC_390_PLTOFF64:                howto manager.      (line 1840)
+* BFD_RELOC_390_RELATIVE:                howto manager.      (line 1783)
+* BFD_RELOC_390_TLS_DTPMOD:              howto manager.      (line 1860)
+* BFD_RELOC_390_TLS_DTPOFF:              howto manager.      (line 1861)
+* BFD_RELOC_390_TLS_GD32:                howto manager.      (line 1846)
+* BFD_RELOC_390_TLS_GD64:                howto manager.      (line 1847)
+* BFD_RELOC_390_TLS_GDCALL:              howto manager.      (line 1844)
+* BFD_RELOC_390_TLS_GOTIE12:             howto manager.      (line 1848)
+* BFD_RELOC_390_TLS_GOTIE20:             howto manager.      (line 1868)
+* BFD_RELOC_390_TLS_GOTIE32:             howto manager.      (line 1849)
+* BFD_RELOC_390_TLS_GOTIE64:             howto manager.      (line 1850)
+* BFD_RELOC_390_TLS_IE32:                howto manager.      (line 1853)
+* BFD_RELOC_390_TLS_IE64:                howto manager.      (line 1854)
+* BFD_RELOC_390_TLS_IEENT:               howto manager.      (line 1855)
+* BFD_RELOC_390_TLS_LDCALL:              howto manager.      (line 1845)
+* BFD_RELOC_390_TLS_LDM32:               howto manager.      (line 1851)
+* BFD_RELOC_390_TLS_LDM64:               howto manager.      (line 1852)
+* BFD_RELOC_390_TLS_LDO32:               howto manager.      (line 1858)
+* BFD_RELOC_390_TLS_LDO64:               howto manager.      (line 1859)
+* BFD_RELOC_390_TLS_LE32:                howto manager.      (line 1856)
+* BFD_RELOC_390_TLS_LE64:                howto manager.      (line 1857)
+* BFD_RELOC_390_TLS_LOAD:                howto manager.      (line 1843)
+* BFD_RELOC_390_TLS_TPOFF:               howto manager.      (line 1862)
+* BFD_RELOC_64:                          howto manager.      (line   26)
+* BFD_RELOC_64_PCREL:                    howto manager.      (line   35)
+* BFD_RELOC_64_PLT_PCREL:                howto manager.      (line   60)
+* BFD_RELOC_64_PLTOFF:                   howto manager.      (line   65)
+* BFD_RELOC_68K_GLOB_DAT:                howto manager.      (line   74)
+* BFD_RELOC_68K_JMP_SLOT:                howto manager.      (line   75)
+* BFD_RELOC_68K_RELATIVE:                howto manager.      (line   76)
+* BFD_RELOC_68K_TLS_GD16:                howto manager.      (line   78)
+* BFD_RELOC_68K_TLS_GD32:                howto manager.      (line   77)
+* BFD_RELOC_68K_TLS_GD8:                 howto manager.      (line   79)
+* BFD_RELOC_68K_TLS_IE16:                howto manager.      (line   87)
+* BFD_RELOC_68K_TLS_IE32:                howto manager.      (line   86)
+* BFD_RELOC_68K_TLS_IE8:                 howto manager.      (line   88)
+* BFD_RELOC_68K_TLS_LDM16:               howto manager.      (line   81)
+* BFD_RELOC_68K_TLS_LDM32:               howto manager.      (line   80)
+* BFD_RELOC_68K_TLS_LDM8:                howto manager.      (line   82)
+* BFD_RELOC_68K_TLS_LDO16:               howto manager.      (line   84)
+* BFD_RELOC_68K_TLS_LDO32:               howto manager.      (line   83)
+* BFD_RELOC_68K_TLS_LDO8:                howto manager.      (line   85)
+* BFD_RELOC_68K_TLS_LE16:                howto manager.      (line   90)
+* BFD_RELOC_68K_TLS_LE32:                howto manager.      (line   89)
+* BFD_RELOC_68K_TLS_LE8:                 howto manager.      (line   91)
+* BFD_RELOC_8:                           howto manager.      (line   32)
+* BFD_RELOC_860_COPY:                    howto manager.      (line 2298)
+* BFD_RELOC_860_GLOB_DAT:                howto manager.      (line 2299)
+* BFD_RELOC_860_HAGOT:                   howto manager.      (line 2324)
+* BFD_RELOC_860_HAGOTOFF:                howto manager.      (line 2325)
+* BFD_RELOC_860_HAPC:                    howto manager.      (line 2326)
+* BFD_RELOC_860_HIGH:                    howto manager.      (line 2327)
+* BFD_RELOC_860_HIGHADJ:                 howto manager.      (line 2323)
+* BFD_RELOC_860_HIGOT:                   howto manager.      (line 2328)
+* BFD_RELOC_860_HIGOTOFF:                howto manager.      (line 2329)
+* BFD_RELOC_860_JUMP_SLOT:               howto manager.      (line 2300)
+* BFD_RELOC_860_LOGOT0:                  howto manager.      (line 2312)
+* BFD_RELOC_860_LOGOT1:                  howto manager.      (line 2314)
+* BFD_RELOC_860_LOGOTOFF0:               howto manager.      (line 2316)
+* BFD_RELOC_860_LOGOTOFF1:               howto manager.      (line 2318)
+* BFD_RELOC_860_LOGOTOFF2:               howto manager.      (line 2320)
+* BFD_RELOC_860_LOGOTOFF3:               howto manager.      (line 2321)
+* BFD_RELOC_860_LOPC:                    howto manager.      (line 2322)
+* BFD_RELOC_860_LOW0:                    howto manager.      (line 2305)
+* BFD_RELOC_860_LOW1:                    howto manager.      (line 2307)
+* BFD_RELOC_860_LOW2:                    howto manager.      (line 2309)
+* BFD_RELOC_860_LOW3:                    howto manager.      (line 2311)
+* BFD_RELOC_860_PC16:                    howto manager.      (line 2304)
+* BFD_RELOC_860_PC26:                    howto manager.      (line 2302)
+* BFD_RELOC_860_PLT26:                   howto manager.      (line 2303)
+* BFD_RELOC_860_RELATIVE:                howto manager.      (line 2301)
+* BFD_RELOC_860_SPGOT0:                  howto manager.      (line 2313)
+* BFD_RELOC_860_SPGOT1:                  howto manager.      (line 2315)
+* BFD_RELOC_860_SPGOTOFF0:               howto manager.      (line 2317)
+* BFD_RELOC_860_SPGOTOFF1:               howto manager.      (line 2319)
+* BFD_RELOC_860_SPLIT0:                  howto manager.      (line 2306)
+* BFD_RELOC_860_SPLIT1:                  howto manager.      (line 2308)
+* BFD_RELOC_860_SPLIT2:                  howto manager.      (line 2310)
+* BFD_RELOC_8_BASEREL:                   howto manager.      (line   99)
+* BFD_RELOC_8_FFnn:                      howto manager.      (line  103)
+* BFD_RELOC_8_GOT_PCREL:                 howto manager.      (line   53)
+* BFD_RELOC_8_GOTOFF:                    howto manager.      (line   59)
+* BFD_RELOC_8_PCREL:                     howto manager.      (line   40)
+* BFD_RELOC_8_PLT_PCREL:                 howto manager.      (line   64)
+* BFD_RELOC_8_PLTOFF:                    howto manager.      (line   71)
+* BFD_RELOC_ALPHA_BOH:                   howto manager.      (line  319)
+* BFD_RELOC_ALPHA_BRSGP:                 howto manager.      (line  302)
+* BFD_RELOC_ALPHA_BSR:                   howto manager.      (line  311)
+* BFD_RELOC_ALPHA_CODEADDR:              howto manager.      (line  293)
+* BFD_RELOC_ALPHA_DTPMOD64:              howto manager.      (line  325)
+* BFD_RELOC_ALPHA_DTPREL16:              howto manager.      (line  330)
+* BFD_RELOC_ALPHA_DTPREL64:              howto manager.      (line  327)
+* BFD_RELOC_ALPHA_DTPREL_HI16:           howto manager.      (line  328)
+* BFD_RELOC_ALPHA_DTPREL_LO16:           howto manager.      (line  329)
+* BFD_RELOC_ALPHA_ELF_LITERAL:           howto manager.      (line  258)
+* BFD_RELOC_ALPHA_GOTDTPREL16:           howto manager.      (line  326)
+* BFD_RELOC_ALPHA_GOTTPREL16:            howto manager.      (line  331)
+* BFD_RELOC_ALPHA_GPDISP:                howto manager.      (line  252)
+* BFD_RELOC_ALPHA_GPDISP_HI16:           howto manager.      (line  238)
+* BFD_RELOC_ALPHA_GPDISP_LO16:           howto manager.      (line  246)
+* BFD_RELOC_ALPHA_GPREL_HI16:            howto manager.      (line  297)
+* BFD_RELOC_ALPHA_GPREL_LO16:            howto manager.      (line  298)
+* BFD_RELOC_ALPHA_HINT:                  howto manager.      (line  284)
+* BFD_RELOC_ALPHA_LDA:                   howto manager.      (line  315)
+* BFD_RELOC_ALPHA_LINKAGE:               howto manager.      (line  289)
+* BFD_RELOC_ALPHA_LITERAL:               howto manager.      (line  257)
+* BFD_RELOC_ALPHA_LITUSE:                howto manager.      (line  259)
+* BFD_RELOC_ALPHA_NOP:                   howto manager.      (line  307)
+* BFD_RELOC_ALPHA_TLSGD:                 howto manager.      (line  323)
+* BFD_RELOC_ALPHA_TLSLDM:                howto manager.      (line  324)
+* BFD_RELOC_ALPHA_TPREL16:               howto manager.      (line  335)
+* BFD_RELOC_ALPHA_TPREL64:               howto manager.      (line  332)
+* BFD_RELOC_ALPHA_TPREL_HI16:            howto manager.      (line  333)
+* BFD_RELOC_ALPHA_TPREL_LO16:            howto manager.      (line  334)
+* BFD_RELOC_ARC_B22_PCREL:               howto manager.      (line 1036)
+* BFD_RELOC_ARC_B26:                     howto manager.      (line 1041)
+* BFD_RELOC_ARM_ADR_IMM:                 howto manager.      (line  922)
+* BFD_RELOC_ARM_ADRL_IMMEDIATE:          howto manager.      (line  908)
+* BFD_RELOC_ARM_ALU_PC_G0:               howto manager.      (line  872)
+* BFD_RELOC_ARM_ALU_PC_G0_NC:            howto manager.      (line  871)
+* BFD_RELOC_ARM_ALU_PC_G1:               howto manager.      (line  874)
+* BFD_RELOC_ARM_ALU_PC_G1_NC:            howto manager.      (line  873)
+* BFD_RELOC_ARM_ALU_PC_G2:               howto manager.      (line  875)
+* BFD_RELOC_ARM_ALU_SB_G0:               howto manager.      (line  886)
+* BFD_RELOC_ARM_ALU_SB_G0_NC:            howto manager.      (line  885)
+* BFD_RELOC_ARM_ALU_SB_G1:               howto manager.      (line  888)
+* BFD_RELOC_ARM_ALU_SB_G1_NC:            howto manager.      (line  887)
+* BFD_RELOC_ARM_ALU_SB_G2:               howto manager.      (line  889)
+* BFD_RELOC_ARM_CP_OFF_IMM:              howto manager.      (line  918)
+* BFD_RELOC_ARM_CP_OFF_IMM_S2:           howto manager.      (line  919)
+* BFD_RELOC_ARM_GLOB_DAT:                howto manager.      (line  846)
+* BFD_RELOC_ARM_GOT32:                   howto manager.      (line  847)
+* BFD_RELOC_ARM_GOT_PREL:                howto manager.      (line  852)
+* BFD_RELOC_ARM_GOTOFF:                  howto manager.      (line  850)
+* BFD_RELOC_ARM_GOTPC:                   howto manager.      (line  851)
+* BFD_RELOC_ARM_HVC:                     howto manager.      (line  915)
+* BFD_RELOC_ARM_HWLITERAL:               howto manager.      (line  929)
+* BFD_RELOC_ARM_IMMEDIATE:               howto manager.      (line  907)
+* BFD_RELOC_ARM_IN_POOL:                 howto manager.      (line  925)
+* BFD_RELOC_ARM_IRELATIVE:               howto manager.      (line  904)
+* BFD_RELOC_ARM_JUMP_SLOT:               howto manager.      (line  845)
+* BFD_RELOC_ARM_LDC_PC_G0:               howto manager.      (line  882)
+* BFD_RELOC_ARM_LDC_PC_G1:               howto manager.      (line  883)
+* BFD_RELOC_ARM_LDC_PC_G2:               howto manager.      (line  884)
+* BFD_RELOC_ARM_LDC_SB_G0:               howto manager.      (line  896)
+* BFD_RELOC_ARM_LDC_SB_G1:               howto manager.      (line  897)
+* BFD_RELOC_ARM_LDC_SB_G2:               howto manager.      (line  898)
+* BFD_RELOC_ARM_LDR_IMM:                 howto manager.      (line  923)
+* BFD_RELOC_ARM_LDR_PC_G0:               howto manager.      (line  876)
+* BFD_RELOC_ARM_LDR_PC_G1:               howto manager.      (line  877)
+* BFD_RELOC_ARM_LDR_PC_G2:               howto manager.      (line  878)
+* BFD_RELOC_ARM_LDR_SB_G0:               howto manager.      (line  890)
+* BFD_RELOC_ARM_LDR_SB_G1:               howto manager.      (line  891)
+* BFD_RELOC_ARM_LDR_SB_G2:               howto manager.      (line  892)
+* BFD_RELOC_ARM_LDRS_PC_G0:              howto manager.      (line  879)
+* BFD_RELOC_ARM_LDRS_PC_G1:              howto manager.      (line  880)
+* BFD_RELOC_ARM_LDRS_PC_G2:              howto manager.      (line  881)
+* BFD_RELOC_ARM_LDRS_SB_G0:              howto manager.      (line  893)
+* BFD_RELOC_ARM_LDRS_SB_G1:              howto manager.      (line  894)
+* BFD_RELOC_ARM_LDRS_SB_G2:              howto manager.      (line  895)
+* BFD_RELOC_ARM_LITERAL:                 howto manager.      (line  924)
+* BFD_RELOC_ARM_MOVT:                    howto manager.      (line  836)
+* BFD_RELOC_ARM_MOVT_PCREL:              howto manager.      (line  838)
+* BFD_RELOC_ARM_MOVW:                    howto manager.      (line  835)
+* BFD_RELOC_ARM_MOVW_PCREL:              howto manager.      (line  837)
+* BFD_RELOC_ARM_MULTI:                   howto manager.      (line  917)
+* BFD_RELOC_ARM_OFFSET_IMM:              howto manager.      (line  809)
+* BFD_RELOC_ARM_OFFSET_IMM8:             howto manager.      (line  926)
+* BFD_RELOC_ARM_PCREL_BLX:               howto manager.      (line  780)
+* BFD_RELOC_ARM_PCREL_BRANCH:            howto manager.      (line  776)
+* BFD_RELOC_ARM_PCREL_CALL:              howto manager.      (line  790)
+* BFD_RELOC_ARM_PCREL_JUMP:              howto manager.      (line  794)
+* BFD_RELOC_ARM_PLT32:                   howto manager.      (line  848)
+* BFD_RELOC_ARM_PREL31:                  howto manager.      (line  832)
+* BFD_RELOC_ARM_RELATIVE:                howto manager.      (line  849)
+* BFD_RELOC_ARM_ROSEGREL32:              howto manager.      (line  821)
+* BFD_RELOC_ARM_SBREL32:                 howto manager.      (line  824)
+* BFD_RELOC_ARM_SHIFT_IMM:               howto manager.      (line  913)
+* BFD_RELOC_ARM_SMC:                     howto manager.      (line  914)
+* BFD_RELOC_ARM_SWI:                     howto manager.      (line  916)
+* BFD_RELOC_ARM_T32_ADD_IMM:             howto manager.      (line  910)
+* BFD_RELOC_ARM_T32_ADD_PC12:            howto manager.      (line  912)
+* BFD_RELOC_ARM_T32_CP_OFF_IMM:          howto manager.      (line  920)
+* BFD_RELOC_ARM_T32_CP_OFF_IMM_S2:       howto manager.      (line  921)
+* BFD_RELOC_ARM_T32_IMM12:               howto manager.      (line  911)
+* BFD_RELOC_ARM_T32_IMMEDIATE:           howto manager.      (line  909)
+* BFD_RELOC_ARM_T32_OFFSET_IMM:          howto manager.      (line  928)
+* BFD_RELOC_ARM_T32_OFFSET_U8:           howto manager.      (line  927)
+* BFD_RELOC_ARM_TARGET1:                 howto manager.      (line  817)
+* BFD_RELOC_ARM_TARGET2:                 howto manager.      (line  827)
+* BFD_RELOC_ARM_THM_TLS_CALL:            howto manager.      (line  865)
+* BFD_RELOC_ARM_THM_TLS_DESCSEQ:         howto manager.      (line  867)
+* BFD_RELOC_ARM_THUMB_ADD:               howto manager.      (line  930)
+* BFD_RELOC_ARM_THUMB_IMM:               howto manager.      (line  931)
+* BFD_RELOC_ARM_THUMB_MOVT:              howto manager.      (line  840)
+* BFD_RELOC_ARM_THUMB_MOVT_PCREL:        howto manager.      (line  842)
+* BFD_RELOC_ARM_THUMB_MOVW:              howto manager.      (line  839)
+* BFD_RELOC_ARM_THUMB_MOVW_PCREL:        howto manager.      (line  841)
+* BFD_RELOC_ARM_THUMB_OFFSET:            howto manager.      (line  813)
+* BFD_RELOC_ARM_THUMB_SHIFT:             howto manager.      (line  932)
+* BFD_RELOC_ARM_TLS_CALL:                howto manager.      (line  864)
+* BFD_RELOC_ARM_TLS_DESC:                howto manager.      (line  868)
+* BFD_RELOC_ARM_TLS_DESCSEQ:             howto manager.      (line  866)
+* BFD_RELOC_ARM_TLS_DTPMOD32:            howto manager.      (line  859)
+* BFD_RELOC_ARM_TLS_DTPOFF32:            howto manager.      (line  858)
+* BFD_RELOC_ARM_TLS_GD32:                howto manager.      (line  855)
+* BFD_RELOC_ARM_TLS_GOTDESC:             howto manager.      (line  863)
+* BFD_RELOC_ARM_TLS_IE32:                howto manager.      (line  861)
+* BFD_RELOC_ARM_TLS_LDM32:               howto manager.      (line  857)
+* BFD_RELOC_ARM_TLS_LDO32:               howto manager.      (line  856)
+* BFD_RELOC_ARM_TLS_LE32:                howto manager.      (line  862)
+* BFD_RELOC_ARM_TLS_TPOFF32:             howto manager.      (line  860)
+* BFD_RELOC_ARM_V4BX:                    howto manager.      (line  901)
+* BFD_RELOC_AVR_13_PCREL:                howto manager.      (line 1591)
+* BFD_RELOC_AVR_16_PM:                   howto manager.      (line 1595)
+* BFD_RELOC_AVR_6:                       howto manager.      (line 1682)
+* BFD_RELOC_AVR_6_ADIW:                  howto manager.      (line 1686)
+* BFD_RELOC_AVR_7_PCREL:                 howto manager.      (line 1587)
+* BFD_RELOC_AVR_8_HI:                    howto manager.      (line 1694)
+* BFD_RELOC_AVR_8_HLO:                   howto manager.      (line 1698)
+* BFD_RELOC_AVR_8_LO:                    howto manager.      (line 1690)
+* BFD_RELOC_AVR_CALL:                    howto manager.      (line 1674)
+* BFD_RELOC_AVR_HH8_LDI:                 howto manager.      (line 1607)
+* BFD_RELOC_AVR_HH8_LDI_NEG:             howto manager.      (line 1626)
+* BFD_RELOC_AVR_HH8_LDI_PM:              howto manager.      (line 1655)
+* BFD_RELOC_AVR_HH8_LDI_PM_NEG:          howto manager.      (line 1669)
+* BFD_RELOC_AVR_HI8_LDI:                 howto manager.      (line 1603)
+* BFD_RELOC_AVR_HI8_LDI_GS:              howto manager.      (line 1649)
+* BFD_RELOC_AVR_HI8_LDI_NEG:             howto manager.      (line 1621)
+* BFD_RELOC_AVR_HI8_LDI_PM:              howto manager.      (line 1645)
+* BFD_RELOC_AVR_HI8_LDI_PM_NEG:          howto manager.      (line 1664)
+* BFD_RELOC_AVR_LDI:                     howto manager.      (line 1678)
+* BFD_RELOC_AVR_LO8_LDI:                 howto manager.      (line 1599)
+* BFD_RELOC_AVR_LO8_LDI_GS:              howto manager.      (line 1639)
+* BFD_RELOC_AVR_LO8_LDI_NEG:             howto manager.      (line 1616)
+* BFD_RELOC_AVR_LO8_LDI_PM:              howto manager.      (line 1635)
+* BFD_RELOC_AVR_LO8_LDI_PM_NEG:          howto manager.      (line 1660)
+* BFD_RELOC_AVR_MS8_LDI:                 howto manager.      (line 1612)
+* BFD_RELOC_AVR_MS8_LDI_NEG:             howto manager.      (line 1631)
+* BFD_RELOC_BFIN_10_PCREL:               howto manager.      (line 1061)
+* BFD_RELOC_BFIN_11_PCREL:               howto manager.      (line 1064)
+* BFD_RELOC_BFIN_12_PCREL_JUMP:          howto manager.      (line 1067)
+* BFD_RELOC_BFIN_12_PCREL_JUMP_S:        howto manager.      (line 1070)
+* BFD_RELOC_BFIN_16_HIGH:                howto manager.      (line 1049)
+* BFD_RELOC_BFIN_16_IMM:                 howto manager.      (line 1046)
+* BFD_RELOC_BFIN_16_LOW:                 howto manager.      (line 1058)
+* BFD_RELOC_BFIN_24_PCREL_CALL_X:        howto manager.      (line 1073)
+* BFD_RELOC_BFIN_24_PCREL_JUMP_L:        howto manager.      (line 1076)
+* BFD_RELOC_BFIN_4_PCREL:                howto manager.      (line 1052)
+* BFD_RELOC_BFIN_5_PCREL:                howto manager.      (line 1055)
+* BFD_RELOC_BFIN_FUNCDESC:               howto manager.      (line 1082)
+* BFD_RELOC_BFIN_FUNCDESC_GOT17M4:       howto manager.      (line 1083)
+* BFD_RELOC_BFIN_FUNCDESC_GOTHI:         howto manager.      (line 1084)
+* BFD_RELOC_BFIN_FUNCDESC_GOTLO:         howto manager.      (line 1085)
+* BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4:    howto manager.      (line 1087)
+* BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI:      howto manager.      (line 1088)
+* BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO:      howto manager.      (line 1089)
+* BFD_RELOC_BFIN_FUNCDESC_VALUE:         howto manager.      (line 1086)
+* BFD_RELOC_BFIN_GOT:                    howto manager.      (line 1095)
+* BFD_RELOC_BFIN_GOT17M4:                howto manager.      (line 1079)
+* BFD_RELOC_BFIN_GOTHI:                  howto manager.      (line 1080)
+* BFD_RELOC_BFIN_GOTLO:                  howto manager.      (line 1081)
+* BFD_RELOC_BFIN_GOTOFF17M4:             howto manager.      (line 1090)
+* BFD_RELOC_BFIN_GOTOFFHI:               howto manager.      (line 1091)
+* BFD_RELOC_BFIN_GOTOFFLO:               howto manager.      (line 1092)
+* BFD_RELOC_BFIN_PLTPC:                  howto manager.      (line 1098)
+* BFD_RELOC_C6000_ABS_H16:               howto manager.      (line 1450)
+* BFD_RELOC_C6000_ABS_L16:               howto manager.      (line 1449)
+* BFD_RELOC_C6000_ABS_S16:               howto manager.      (line 1448)
+* BFD_RELOC_C6000_ALIGN:                 howto manager.      (line 1471)
+* BFD_RELOC_C6000_COPY:                  howto manager.      (line 1466)
+* BFD_RELOC_C6000_DSBT_INDEX:            howto manager.      (line 1464)
+* BFD_RELOC_C6000_EHTYPE:                howto manager.      (line 1468)
+* BFD_RELOC_C6000_FPHEAD:                howto manager.      (line 1472)
+* BFD_RELOC_C6000_JUMP_SLOT:             howto manager.      (line 1467)
+* BFD_RELOC_C6000_NOCMP:                 howto manager.      (line 1473)
+* BFD_RELOC_C6000_PCR_H16:               howto manager.      (line 1469)
+* BFD_RELOC_C6000_PCR_L16:               howto manager.      (line 1470)
+* BFD_RELOC_C6000_PCR_S10:               howto manager.      (line 1446)
+* BFD_RELOC_C6000_PCR_S12:               howto manager.      (line 1445)
+* BFD_RELOC_C6000_PCR_S21:               howto manager.      (line 1444)
+* BFD_RELOC_C6000_PCR_S7:                howto manager.      (line 1447)
+* BFD_RELOC_C6000_PREL31:                howto manager.      (line 1465)
+* BFD_RELOC_C6000_SBR_GOT_H16_W:         howto manager.      (line 1463)
+* BFD_RELOC_C6000_SBR_GOT_L16_W:         howto manager.      (line 1462)
+* BFD_RELOC_C6000_SBR_GOT_U15_W:         howto manager.      (line 1461)
+* BFD_RELOC_C6000_SBR_H16_B:             howto manager.      (line 1458)
+* BFD_RELOC_C6000_SBR_H16_H:             howto manager.      (line 1459)
+* BFD_RELOC_C6000_SBR_H16_W:             howto manager.      (line 1460)
+* BFD_RELOC_C6000_SBR_L16_B:             howto manager.      (line 1455)
+* BFD_RELOC_C6000_SBR_L16_H:             howto manager.      (line 1456)
+* BFD_RELOC_C6000_SBR_L16_W:             howto manager.      (line 1457)
+* BFD_RELOC_C6000_SBR_S16:               howto manager.      (line 1454)
+* BFD_RELOC_C6000_SBR_U15_B:             howto manager.      (line 1451)
+* BFD_RELOC_C6000_SBR_U15_H:             howto manager.      (line 1452)
+* BFD_RELOC_C6000_SBR_U15_W:             howto manager.      (line 1453)
+* bfd_reloc_code_type:                   howto manager.      (line   10)
+* BFD_RELOC_CR16_ABS20:                  howto manager.      (line 2198)
+* BFD_RELOC_CR16_ABS24:                  howto manager.      (line 2199)
+* BFD_RELOC_CR16_DISP16:                 howto manager.      (line 2209)
+* BFD_RELOC_CR16_DISP20:                 howto manager.      (line 2210)
+* BFD_RELOC_CR16_DISP24:                 howto manager.      (line 2211)
+* BFD_RELOC_CR16_DISP24a:                howto manager.      (line 2212)
+* BFD_RELOC_CR16_DISP4:                  howto manager.      (line 2207)
+* BFD_RELOC_CR16_DISP8:                  howto manager.      (line 2208)
+* BFD_RELOC_CR16_GLOB_DAT:               howto manager.      (line 2218)
+* BFD_RELOC_CR16_GOT_REGREL20:           howto manager.      (line 2216)
+* BFD_RELOC_CR16_GOTC_REGREL20:          howto manager.      (line 2217)
+* BFD_RELOC_CR16_IMM16:                  howto manager.      (line 2202)
+* BFD_RELOC_CR16_IMM20:                  howto manager.      (line 2203)
+* BFD_RELOC_CR16_IMM24:                  howto manager.      (line 2204)
+* BFD_RELOC_CR16_IMM32:                  howto manager.      (line 2205)
+* BFD_RELOC_CR16_IMM32a:                 howto manager.      (line 2206)
+* BFD_RELOC_CR16_IMM4:                   howto manager.      (line 2200)
+* BFD_RELOC_CR16_IMM8:                   howto manager.      (line 2201)
+* BFD_RELOC_CR16_NUM16:                  howto manager.      (line 2187)
+* BFD_RELOC_CR16_NUM32:                  howto manager.      (line 2188)
+* BFD_RELOC_CR16_NUM32a:                 howto manager.      (line 2189)
+* BFD_RELOC_CR16_NUM8:                   howto manager.      (line 2186)
+* BFD_RELOC_CR16_REGREL0:                howto manager.      (line 2190)
+* BFD_RELOC_CR16_REGREL14:               howto manager.      (line 2193)
+* BFD_RELOC_CR16_REGREL14a:              howto manager.      (line 2194)
+* BFD_RELOC_CR16_REGREL16:               howto manager.      (line 2195)
+* BFD_RELOC_CR16_REGREL20:               howto manager.      (line 2196)
+* BFD_RELOC_CR16_REGREL20a:              howto manager.      (line 2197)
+* BFD_RELOC_CR16_REGREL4:                howto manager.      (line 2191)
+* BFD_RELOC_CR16_REGREL4a:               howto manager.      (line 2192)
+* BFD_RELOC_CR16_SWITCH16:               howto manager.      (line 2214)
+* BFD_RELOC_CR16_SWITCH32:               howto manager.      (line 2215)
+* BFD_RELOC_CR16_SWITCH8:                howto manager.      (line 2213)
+* BFD_RELOC_CRIS_16_DTPREL:              howto manager.      (line 2289)
+* BFD_RELOC_CRIS_16_GOT:                 howto manager.      (line 2265)
+* BFD_RELOC_CRIS_16_GOT_GD:              howto manager.      (line 2285)
+* BFD_RELOC_CRIS_16_GOT_TPREL:           howto manager.      (line 2291)
+* BFD_RELOC_CRIS_16_GOTPLT:              howto manager.      (line 2271)
+* BFD_RELOC_CRIS_16_TPREL:               howto manager.      (line 2293)
+* BFD_RELOC_CRIS_32_DTPREL:              howto manager.      (line 2288)
+* BFD_RELOC_CRIS_32_GD:                  howto manager.      (line 2286)
+* BFD_RELOC_CRIS_32_GOT:                 howto manager.      (line 2262)
+* BFD_RELOC_CRIS_32_GOT_GD:              howto manager.      (line 2284)
+* BFD_RELOC_CRIS_32_GOT_TPREL:           howto manager.      (line 2290)
+* BFD_RELOC_CRIS_32_GOTPLT:              howto manager.      (line 2268)
+* BFD_RELOC_CRIS_32_GOTREL:              howto manager.      (line 2274)
+* BFD_RELOC_CRIS_32_IE:                  howto manager.      (line 2295)
+* BFD_RELOC_CRIS_32_PLT_GOTREL:          howto manager.      (line 2277)
+* BFD_RELOC_CRIS_32_PLT_PCREL:           howto manager.      (line 2280)
+* BFD_RELOC_CRIS_32_TPREL:               howto manager.      (line 2292)
+* BFD_RELOC_CRIS_BDISP8:                 howto manager.      (line 2243)
+* BFD_RELOC_CRIS_COPY:                   howto manager.      (line 2256)
+* BFD_RELOC_CRIS_DTP:                    howto manager.      (line 2287)
+* BFD_RELOC_CRIS_DTPMOD:                 howto manager.      (line 2294)
+* BFD_RELOC_CRIS_GLOB_DAT:               howto manager.      (line 2257)
+* BFD_RELOC_CRIS_JUMP_SLOT:              howto manager.      (line 2258)
+* BFD_RELOC_CRIS_LAPCQ_OFFSET:           howto manager.      (line 2251)
+* BFD_RELOC_CRIS_RELATIVE:               howto manager.      (line 2259)
+* BFD_RELOC_CRIS_SIGNED_16:              howto manager.      (line 2249)
+* BFD_RELOC_CRIS_SIGNED_6:               howto manager.      (line 2245)
+* BFD_RELOC_CRIS_SIGNED_8:               howto manager.      (line 2247)
+* BFD_RELOC_CRIS_UNSIGNED_16:            howto manager.      (line 2250)
+* BFD_RELOC_CRIS_UNSIGNED_4:             howto manager.      (line 2252)
+* BFD_RELOC_CRIS_UNSIGNED_5:             howto manager.      (line 2244)
+* BFD_RELOC_CRIS_UNSIGNED_6:             howto manager.      (line 2246)
+* BFD_RELOC_CRIS_UNSIGNED_8:             howto manager.      (line 2248)
+* BFD_RELOC_CRX_ABS16:                   howto manager.      (line 2231)
+* BFD_RELOC_CRX_ABS32:                   howto manager.      (line 2232)
+* BFD_RELOC_CRX_IMM16:                   howto manager.      (line 2236)
+* BFD_RELOC_CRX_IMM32:                   howto manager.      (line 2237)
+* BFD_RELOC_CRX_NUM16:                   howto manager.      (line 2234)
+* BFD_RELOC_CRX_NUM32:                   howto manager.      (line 2235)
+* BFD_RELOC_CRX_NUM8:                    howto manager.      (line 2233)
+* BFD_RELOC_CRX_REGREL12:                howto manager.      (line 2227)
+* BFD_RELOC_CRX_REGREL22:                howto manager.      (line 2228)
+* BFD_RELOC_CRX_REGREL28:                howto manager.      (line 2229)
+* BFD_RELOC_CRX_REGREL32:                howto manager.      (line 2230)
+* BFD_RELOC_CRX_REL16:                   howto manager.      (line 2224)
+* BFD_RELOC_CRX_REL24:                   howto manager.      (line 2225)
+* BFD_RELOC_CRX_REL32:                   howto manager.      (line 2226)
+* BFD_RELOC_CRX_REL4:                    howto manager.      (line 2221)
+* BFD_RELOC_CRX_REL8:                    howto manager.      (line 2222)
+* BFD_RELOC_CRX_REL8_CMP:                howto manager.      (line 2223)
+* BFD_RELOC_CRX_SWITCH16:                howto manager.      (line 2239)
+* BFD_RELOC_CRX_SWITCH32:                howto manager.      (line 2240)
+* BFD_RELOC_CRX_SWITCH8:                 howto manager.      (line 2238)
+* BFD_RELOC_CTOR:                        howto manager.      (line  770)
+* BFD_RELOC_D10V_10_PCREL_L:             howto manager.      (line 1165)
+* BFD_RELOC_D10V_10_PCREL_R:             howto manager.      (line 1161)
+* BFD_RELOC_D10V_18:                     howto manager.      (line 1170)
+* BFD_RELOC_D10V_18_PCREL:               howto manager.      (line 1173)
+* BFD_RELOC_D30V_15:                     howto manager.      (line 1188)
+* BFD_RELOC_D30V_15_PCREL:               howto manager.      (line 1192)
+* BFD_RELOC_D30V_15_PCREL_R:             howto manager.      (line 1196)
+* BFD_RELOC_D30V_21:                     howto manager.      (line 1201)
+* BFD_RELOC_D30V_21_PCREL:               howto manager.      (line 1205)
+* BFD_RELOC_D30V_21_PCREL_R:             howto manager.      (line 1209)
+* BFD_RELOC_D30V_32:                     howto manager.      (line 1214)
+* BFD_RELOC_D30V_32_PCREL:               howto manager.      (line 1217)
+* BFD_RELOC_D30V_6:                      howto manager.      (line 1176)
+* BFD_RELOC_D30V_9_PCREL:                howto manager.      (line 1179)
+* BFD_RELOC_D30V_9_PCREL_R:              howto manager.      (line 1183)
+* BFD_RELOC_DLX_HI16_S:                  howto manager.      (line 1220)
+* BFD_RELOC_DLX_JMP26:                   howto manager.      (line 1226)
+* BFD_RELOC_DLX_LO16:                    howto manager.      (line 1223)
+* BFD_RELOC_EPIPHANY_HIGH:               howto manager.      (line 2779)
+* BFD_RELOC_EPIPHANY_IMM11:              howto manager.      (line 2788)
+* BFD_RELOC_EPIPHANY_IMM8:               howto manager.      (line 2792)
+* BFD_RELOC_EPIPHANY_LOW:                howto manager.      (line 2782)
+* BFD_RELOC_EPIPHANY_SIMM11:             howto manager.      (line 2785)
+* BFD_RELOC_EPIPHANY_SIMM24:             howto manager.      (line 2776)
+* BFD_RELOC_EPIPHANY_SIMM8:              howto manager.      (line 2773)
+* BFD_RELOC_FR30_10_IN_8:                howto manager.      (line 1495)
+* BFD_RELOC_FR30_12_PCREL:               howto manager.      (line 1503)
+* BFD_RELOC_FR30_20:                     howto manager.      (line 1479)
+* BFD_RELOC_FR30_48:                     howto manager.      (line 1476)
+* BFD_RELOC_FR30_6_IN_4:                 howto manager.      (line 1483)
+* BFD_RELOC_FR30_8_IN_8:                 howto manager.      (line 1487)
+* BFD_RELOC_FR30_9_IN_8:                 howto manager.      (line 1491)
+* BFD_RELOC_FR30_9_PCREL:                howto manager.      (line 1499)
+* BFD_RELOC_FRV_FUNCDESC:                howto manager.      (line  486)
+* BFD_RELOC_FRV_FUNCDESC_GOT12:          howto manager.      (line  487)
+* BFD_RELOC_FRV_FUNCDESC_GOTHI:          howto manager.      (line  488)
+* BFD_RELOC_FRV_FUNCDESC_GOTLO:          howto manager.      (line  489)
+* BFD_RELOC_FRV_FUNCDESC_GOTOFF12:       howto manager.      (line  491)
+* BFD_RELOC_FRV_FUNCDESC_GOTOFFHI:       howto manager.      (line  492)
+* BFD_RELOC_FRV_FUNCDESC_GOTOFFLO:       howto manager.      (line  493)
+* BFD_RELOC_FRV_FUNCDESC_VALUE:          howto manager.      (line  490)
+* BFD_RELOC_FRV_GETTLSOFF:               howto manager.      (line  497)
+* BFD_RELOC_FRV_GETTLSOFF_RELAX:         howto manager.      (line  510)
+* BFD_RELOC_FRV_GOT12:                   howto manager.      (line  483)
+* BFD_RELOC_FRV_GOTHI:                   howto manager.      (line  484)
+* BFD_RELOC_FRV_GOTLO:                   howto manager.      (line  485)
+* BFD_RELOC_FRV_GOTOFF12:                howto manager.      (line  494)
+* BFD_RELOC_FRV_GOTOFFHI:                howto manager.      (line  495)
+* BFD_RELOC_FRV_GOTOFFLO:                howto manager.      (line  496)
+* BFD_RELOC_FRV_GOTTLSDESC12:            howto manager.      (line  499)
+* BFD_RELOC_FRV_GOTTLSDESCHI:            howto manager.      (line  500)
+* BFD_RELOC_FRV_GOTTLSDESCLO:            howto manager.      (line  501)
+* BFD_RELOC_FRV_GOTTLSOFF12:             howto manager.      (line  505)
+* BFD_RELOC_FRV_GOTTLSOFFHI:             howto manager.      (line  506)
+* BFD_RELOC_FRV_GOTTLSOFFLO:             howto manager.      (line  507)
+* BFD_RELOC_FRV_GPREL12:                 howto manager.      (line  478)
+* BFD_RELOC_FRV_GPREL32:                 howto manager.      (line  480)
+* BFD_RELOC_FRV_GPRELHI:                 howto manager.      (line  481)
+* BFD_RELOC_FRV_GPRELLO:                 howto manager.      (line  482)
+* BFD_RELOC_FRV_GPRELU12:                howto manager.      (line  479)
+* BFD_RELOC_FRV_HI16:                    howto manager.      (line  477)
+* BFD_RELOC_FRV_LABEL16:                 howto manager.      (line  474)
+* BFD_RELOC_FRV_LABEL24:                 howto manager.      (line  475)
+* BFD_RELOC_FRV_LO16:                    howto manager.      (line  476)
+* BFD_RELOC_FRV_TLSDESC_RELAX:           howto manager.      (line  509)
+* BFD_RELOC_FRV_TLSDESC_VALUE:           howto manager.      (line  498)
+* BFD_RELOC_FRV_TLSMOFF:                 howto manager.      (line  512)
+* BFD_RELOC_FRV_TLSMOFF12:               howto manager.      (line  502)
+* BFD_RELOC_FRV_TLSMOFFHI:               howto manager.      (line  503)
+* BFD_RELOC_FRV_TLSMOFFLO:               howto manager.      (line  504)
+* BFD_RELOC_FRV_TLSOFF:                  howto manager.      (line  508)
+* BFD_RELOC_FRV_TLSOFF_RELAX:            howto manager.      (line  511)
+* BFD_RELOC_GPREL16:                     howto manager.      (line  121)
+* BFD_RELOC_GPREL32:                     howto manager.      (line  122)
+* BFD_RELOC_H8_DIR16A8:                  howto manager.      (line 2336)
+* BFD_RELOC_H8_DIR16R8:                  howto manager.      (line 2337)
+* BFD_RELOC_H8_DIR24A8:                  howto manager.      (line 2338)
+* BFD_RELOC_H8_DIR24R8:                  howto manager.      (line 2339)
+* BFD_RELOC_H8_DIR32A16:                 howto manager.      (line 2340)
+* BFD_RELOC_HI16:                        howto manager.      (line  348)
+* BFD_RELOC_HI16_BASEREL:                howto manager.      (line   97)
+* BFD_RELOC_HI16_GOTOFF:                 howto manager.      (line   57)
+* BFD_RELOC_HI16_PCREL:                  howto manager.      (line  360)
+* BFD_RELOC_HI16_PLTOFF:                 howto manager.      (line   69)
+* BFD_RELOC_HI16_S:                      howto manager.      (line  351)
+* BFD_RELOC_HI16_S_BASEREL:              howto manager.      (line   98)
+* BFD_RELOC_HI16_S_GOTOFF:               howto manager.      (line   58)
+* BFD_RELOC_HI16_S_PCREL:                howto manager.      (line  363)
+* BFD_RELOC_HI16_S_PLTOFF:               howto manager.      (line   70)
+* BFD_RELOC_HI22:                        howto manager.      (line  116)
+* BFD_RELOC_I370_D12:                    howto manager.      (line  767)
+* BFD_RELOC_I960_CALLJ:                  howto manager.      (line  128)
+* BFD_RELOC_IA64_COPY:                   howto manager.      (line 2018)
+* BFD_RELOC_IA64_DIR32LSB:               howto manager.      (line 1963)
+* BFD_RELOC_IA64_DIR32MSB:               howto manager.      (line 1962)
+* BFD_RELOC_IA64_DIR64LSB:               howto manager.      (line 1965)
+* BFD_RELOC_IA64_DIR64MSB:               howto manager.      (line 1964)
+* BFD_RELOC_IA64_DTPMOD64LSB:            howto manager.      (line 2028)
+* BFD_RELOC_IA64_DTPMOD64MSB:            howto manager.      (line 2027)
+* BFD_RELOC_IA64_DTPREL14:               howto manager.      (line 2030)
+* BFD_RELOC_IA64_DTPREL22:               howto manager.      (line 2031)
+* BFD_RELOC_IA64_DTPREL32LSB:            howto manager.      (line 2034)
+* BFD_RELOC_IA64_DTPREL32MSB:            howto manager.      (line 2033)
+* BFD_RELOC_IA64_DTPREL64I:              howto manager.      (line 2032)
+* BFD_RELOC_IA64_DTPREL64LSB:            howto manager.      (line 2036)
+* BFD_RELOC_IA64_DTPREL64MSB:            howto manager.      (line 2035)
+* BFD_RELOC_IA64_FPTR32LSB:              howto manager.      (line 1980)
+* BFD_RELOC_IA64_FPTR32MSB:              howto manager.      (line 1979)
+* BFD_RELOC_IA64_FPTR64I:                howto manager.      (line 1978)
+* BFD_RELOC_IA64_FPTR64LSB:              howto manager.      (line 1982)
+* BFD_RELOC_IA64_FPTR64MSB:              howto manager.      (line 1981)
+* BFD_RELOC_IA64_GPREL22:                howto manager.      (line 1966)
+* BFD_RELOC_IA64_GPREL32LSB:             howto manager.      (line 1969)
+* BFD_RELOC_IA64_GPREL32MSB:             howto manager.      (line 1968)
+* BFD_RELOC_IA64_GPREL64I:               howto manager.      (line 1967)
+* BFD_RELOC_IA64_GPREL64LSB:             howto manager.      (line 1971)
+* BFD_RELOC_IA64_GPREL64MSB:             howto manager.      (line 1970)
+* BFD_RELOC_IA64_IMM14:                  howto manager.      (line 1959)
+* BFD_RELOC_IA64_IMM22:                  howto manager.      (line 1960)
+* BFD_RELOC_IA64_IMM64:                  howto manager.      (line 1961)
+* BFD_RELOC_IA64_IPLTLSB:                howto manager.      (line 2017)
+* BFD_RELOC_IA64_IPLTMSB:                howto manager.      (line 2016)
+* BFD_RELOC_IA64_LDXMOV:                 howto manager.      (line 2020)
+* BFD_RELOC_IA64_LTOFF22:                howto manager.      (line 1972)
+* BFD_RELOC_IA64_LTOFF22X:               howto manager.      (line 2019)
+* BFD_RELOC_IA64_LTOFF64I:               howto manager.      (line 1973)
+* BFD_RELOC_IA64_LTOFF_DTPMOD22:         howto manager.      (line 2029)
+* BFD_RELOC_IA64_LTOFF_DTPREL22:         howto manager.      (line 2037)
+* BFD_RELOC_IA64_LTOFF_FPTR22:           howto manager.      (line 1994)
+* BFD_RELOC_IA64_LTOFF_FPTR32LSB:        howto manager.      (line 1997)
+* BFD_RELOC_IA64_LTOFF_FPTR32MSB:        howto manager.      (line 1996)
+* BFD_RELOC_IA64_LTOFF_FPTR64I:          howto manager.      (line 1995)
+* BFD_RELOC_IA64_LTOFF_FPTR64LSB:        howto manager.      (line 1999)
+* BFD_RELOC_IA64_LTOFF_FPTR64MSB:        howto manager.      (line 1998)
+* BFD_RELOC_IA64_LTOFF_TPREL22:          howto manager.      (line 2026)
+* BFD_RELOC_IA64_LTV32LSB:               howto manager.      (line 2013)
+* BFD_RELOC_IA64_LTV32MSB:               howto manager.      (line 2012)
+* BFD_RELOC_IA64_LTV64LSB:               howto manager.      (line 2015)
+* BFD_RELOC_IA64_LTV64MSB:               howto manager.      (line 2014)
+* BFD_RELOC_IA64_PCREL21B:               howto manager.      (line 1983)
+* BFD_RELOC_IA64_PCREL21BI:              howto manager.      (line 1984)
+* BFD_RELOC_IA64_PCREL21F:               howto manager.      (line 1986)
+* BFD_RELOC_IA64_PCREL21M:               howto manager.      (line 1985)
+* BFD_RELOC_IA64_PCREL22:                howto manager.      (line 1987)
+* BFD_RELOC_IA64_PCREL32LSB:             howto manager.      (line 1991)
+* BFD_RELOC_IA64_PCREL32MSB:             howto manager.      (line 1990)
+* BFD_RELOC_IA64_PCREL60B:               howto manager.      (line 1988)
+* BFD_RELOC_IA64_PCREL64I:               howto manager.      (line 1989)
+* BFD_RELOC_IA64_PCREL64LSB:             howto manager.      (line 1993)
+* BFD_RELOC_IA64_PCREL64MSB:             howto manager.      (line 1992)
+* BFD_RELOC_IA64_PLTOFF22:               howto manager.      (line 1974)
+* BFD_RELOC_IA64_PLTOFF64I:              howto manager.      (line 1975)
+* BFD_RELOC_IA64_PLTOFF64LSB:            howto manager.      (line 1977)
+* BFD_RELOC_IA64_PLTOFF64MSB:            howto manager.      (line 1976)
+* BFD_RELOC_IA64_REL32LSB:               howto manager.      (line 2009)
+* BFD_RELOC_IA64_REL32MSB:               howto manager.      (line 2008)
+* BFD_RELOC_IA64_REL64LSB:               howto manager.      (line 2011)
+* BFD_RELOC_IA64_REL64MSB:               howto manager.      (line 2010)
+* BFD_RELOC_IA64_SECREL32LSB:            howto manager.      (line 2005)
+* BFD_RELOC_IA64_SECREL32MSB:            howto manager.      (line 2004)
+* BFD_RELOC_IA64_SECREL64LSB:            howto manager.      (line 2007)
+* BFD_RELOC_IA64_SECREL64MSB:            howto manager.      (line 2006)
+* BFD_RELOC_IA64_SEGREL32LSB:            howto manager.      (line 2001)
+* BFD_RELOC_IA64_SEGREL32MSB:            howto manager.      (line 2000)
+* BFD_RELOC_IA64_SEGREL64LSB:            howto manager.      (line 2003)
+* BFD_RELOC_IA64_SEGREL64MSB:            howto manager.      (line 2002)
+* BFD_RELOC_IA64_TPREL14:                howto manager.      (line 2021)
+* BFD_RELOC_IA64_TPREL22:                howto manager.      (line 2022)
+* BFD_RELOC_IA64_TPREL64I:               howto manager.      (line 2023)
+* BFD_RELOC_IA64_TPREL64LSB:             howto manager.      (line 2025)
+* BFD_RELOC_IA64_TPREL64MSB:             howto manager.      (line 2024)
+* BFD_RELOC_IP2K_ADDR16CJP:              howto manager.      (line 1911)
+* BFD_RELOC_IP2K_BANK:                   howto manager.      (line 1908)
+* BFD_RELOC_IP2K_EX8DATA:                howto manager.      (line 1919)
+* BFD_RELOC_IP2K_FR9:                    howto manager.      (line 1905)
+* BFD_RELOC_IP2K_FR_OFFSET:              howto manager.      (line 1932)
+* BFD_RELOC_IP2K_HI8DATA:                howto manager.      (line 1918)
+* BFD_RELOC_IP2K_HI8INSN:                howto manager.      (line 1923)
+* BFD_RELOC_IP2K_LO8DATA:                howto manager.      (line 1917)
+* BFD_RELOC_IP2K_LO8INSN:                howto manager.      (line 1922)
+* BFD_RELOC_IP2K_PAGE3:                  howto manager.      (line 1914)
+* BFD_RELOC_IP2K_PC_SKIP:                howto manager.      (line 1926)
+* BFD_RELOC_IP2K_TEXT:                   howto manager.      (line 1929)
+* BFD_RELOC_IQ2000_OFFSET_16:            howto manager.      (line 2390)
+* BFD_RELOC_IQ2000_OFFSET_21:            howto manager.      (line 2391)
+* BFD_RELOC_IQ2000_UHI16:                howto manager.      (line 2392)
+* BFD_RELOC_LM32_16_GOT:                 howto manager.      (line 2497)
+* BFD_RELOC_LM32_BRANCH:                 howto manager.      (line 2496)
+* BFD_RELOC_LM32_CALL:                   howto manager.      (line 2495)
+* BFD_RELOC_LM32_COPY:                   howto manager.      (line 2500)
+* BFD_RELOC_LM32_GLOB_DAT:               howto manager.      (line 2501)
+* BFD_RELOC_LM32_GOTOFF_HI16:            howto manager.      (line 2498)
+* BFD_RELOC_LM32_GOTOFF_LO16:            howto manager.      (line 2499)
+* BFD_RELOC_LM32_JMP_SLOT:               howto manager.      (line 2502)
+* BFD_RELOC_LM32_RELATIVE:               howto manager.      (line 2503)
+* BFD_RELOC_LO10:                        howto manager.      (line  117)
+* BFD_RELOC_LO16:                        howto manager.      (line  357)
+* BFD_RELOC_LO16_BASEREL:                howto manager.      (line   96)
+* BFD_RELOC_LO16_GOTOFF:                 howto manager.      (line   56)
+* BFD_RELOC_LO16_PCREL:                  howto manager.      (line  366)
+* BFD_RELOC_LO16_PLTOFF:                 howto manager.      (line   68)
+* BFD_RELOC_M32C_HI8:                    howto manager.      (line 1229)
+* BFD_RELOC_M32C_RL_1ADDR:               howto manager.      (line 1231)
+* BFD_RELOC_M32C_RL_2ADDR:               howto manager.      (line 1232)
+* BFD_RELOC_M32C_RL_JUMP:                howto manager.      (line 1230)
+* BFD_RELOC_M32R_10_PCREL:               howto manager.      (line 1239)
+* BFD_RELOC_M32R_18_PCREL:               howto manager.      (line 1243)
+* BFD_RELOC_M32R_24:                     howto manager.      (line 1235)
+* BFD_RELOC_M32R_26_PCREL:               howto manager.      (line 1246)
+* BFD_RELOC_M32R_26_PLTREL:              howto manager.      (line 1265)
+* BFD_RELOC_M32R_COPY:                   howto manager.      (line 1266)
+* BFD_RELOC_M32R_GLOB_DAT:               howto manager.      (line 1267)
+* BFD_RELOC_M32R_GOT16_HI_SLO:           howto manager.      (line 1276)
+* BFD_RELOC_M32R_GOT16_HI_ULO:           howto manager.      (line 1275)
+* BFD_RELOC_M32R_GOT16_LO:               howto manager.      (line 1277)
+* BFD_RELOC_M32R_GOT24:                  howto manager.      (line 1264)
+* BFD_RELOC_M32R_GOTOFF:                 howto manager.      (line 1270)
+* BFD_RELOC_M32R_GOTOFF_HI_SLO:          howto manager.      (line 1272)
+* BFD_RELOC_M32R_GOTOFF_HI_ULO:          howto manager.      (line 1271)
+* BFD_RELOC_M32R_GOTOFF_LO:              howto manager.      (line 1273)
+* BFD_RELOC_M32R_GOTPC24:                howto manager.      (line 1274)
+* BFD_RELOC_M32R_GOTPC_HI_SLO:           howto manager.      (line 1279)
+* BFD_RELOC_M32R_GOTPC_HI_ULO:           howto manager.      (line 1278)
+* BFD_RELOC_M32R_GOTPC_LO:               howto manager.      (line 1280)
+* BFD_RELOC_M32R_HI16_SLO:               howto manager.      (line 1253)
+* BFD_RELOC_M32R_HI16_ULO:               howto manager.      (line 1249)
+* BFD_RELOC_M32R_JMP_SLOT:               howto manager.      (line 1268)
+* BFD_RELOC_M32R_LO16:                   howto manager.      (line 1257)
+* BFD_RELOC_M32R_RELATIVE:               howto manager.      (line 1269)
+* BFD_RELOC_M32R_SDA16:                  howto manager.      (line 1260)
+* BFD_RELOC_M68HC11_24:                  howto manager.      (line 2073)
+* BFD_RELOC_M68HC11_3B:                  howto manager.      (line 2048)
+* BFD_RELOC_M68HC11_HI8:                 howto manager.      (line 2040)
+* BFD_RELOC_M68HC11_LO16:                howto manager.      (line 2062)
+* BFD_RELOC_M68HC11_LO8:                 howto manager.      (line 2044)
+* BFD_RELOC_M68HC11_PAGE:                howto manager.      (line 2068)
+* BFD_RELOC_M68HC11_RL_GROUP:            howto manager.      (line 2057)
+* BFD_RELOC_M68HC11_RL_JUMP:             howto manager.      (line 2051)
+* BFD_RELOC_M68HC12_10_PCREL:            howto manager.      (line 2133)
+* BFD_RELOC_M68HC12_16B:                 howto manager.      (line 2127)
+* BFD_RELOC_M68HC12_5B:                  howto manager.      (line 2079)
+* BFD_RELOC_M68HC12_9_PCREL:             howto manager.      (line 2130)
+* BFD_RELOC_M68HC12_9B:                  howto manager.      (line 2124)
+* BFD_RELOC_M68HC12_HI8XG:               howto manager.      (line 2140)
+* BFD_RELOC_M68HC12_LO8XG:               howto manager.      (line 2136)
+* BFD_RELOC_MACH_O_LOCAL_SECTDIFF:       howto manager.      (line 2510)
+* BFD_RELOC_MACH_O_PAIR:                 howto manager.      (line 2513)
+* BFD_RELOC_MACH_O_SECTDIFF:             howto manager.      (line 2506)
+* BFD_RELOC_MACH_O_X86_64_BRANCH32:      howto manager.      (line 2516)
+* BFD_RELOC_MACH_O_X86_64_BRANCH8:       howto manager.      (line 2517)
+* BFD_RELOC_MACH_O_X86_64_GOT:           howto manager.      (line 2521)
+* BFD_RELOC_MACH_O_X86_64_GOT_LOAD:      howto manager.      (line 2524)
+* BFD_RELOC_MACH_O_X86_64_PCREL32_1:     howto manager.      (line 2534)
+* BFD_RELOC_MACH_O_X86_64_PCREL32_2:     howto manager.      (line 2537)
+* BFD_RELOC_MACH_O_X86_64_PCREL32_4:     howto manager.      (line 2540)
+* BFD_RELOC_MACH_O_X86_64_SUBTRACTOR32:  howto manager.      (line 2528)
+* BFD_RELOC_MACH_O_X86_64_SUBTRACTOR64:  howto manager.      (line 2531)
+* BFD_RELOC_MCORE_PCREL_32:              howto manager.      (line 1510)
+* BFD_RELOC_MCORE_PCREL_IMM11BY2:        howto manager.      (line 1508)
+* BFD_RELOC_MCORE_PCREL_IMM4BY2:         howto manager.      (line 1509)
+* BFD_RELOC_MCORE_PCREL_IMM8BY4:         howto manager.      (line 1507)
+* BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2:    howto manager.      (line 1511)
+* BFD_RELOC_MCORE_RVA:                   howto manager.      (line 1512)
+* BFD_RELOC_MEP_16:                      howto manager.      (line 1516)
+* BFD_RELOC_MEP_32:                      howto manager.      (line 1517)
+* BFD_RELOC_MEP_8:                       howto manager.      (line 1515)
+* BFD_RELOC_MEP_ADDR24A4:                howto manager.      (line 1532)
+* BFD_RELOC_MEP_GNU_VTENTRY:             howto manager.      (line 1534)
+* BFD_RELOC_MEP_GNU_VTINHERIT:           howto manager.      (line 1533)
+* BFD_RELOC_MEP_GPREL:                   howto manager.      (line 1526)
+* BFD_RELOC_MEP_HI16S:                   howto manager.      (line 1525)
+* BFD_RELOC_MEP_HI16U:                   howto manager.      (line 1524)
+* BFD_RELOC_MEP_LOW16:                   howto manager.      (line 1523)
+* BFD_RELOC_MEP_PCABS24A2:               howto manager.      (line 1522)
+* BFD_RELOC_MEP_PCREL12A2:               howto manager.      (line 1519)
+* BFD_RELOC_MEP_PCREL17A2:               howto manager.      (line 1520)
+* BFD_RELOC_MEP_PCREL24A2:               howto manager.      (line 1521)
+* BFD_RELOC_MEP_PCREL8A2:                howto manager.      (line 1518)
+* BFD_RELOC_MEP_TPREL:                   howto manager.      (line 1527)
+* BFD_RELOC_MEP_TPREL7:                  howto manager.      (line 1528)
+* BFD_RELOC_MEP_TPREL7A2:                howto manager.      (line 1529)
+* BFD_RELOC_MEP_TPREL7A4:                howto manager.      (line 1530)
+* BFD_RELOC_MEP_UIMM24:                  howto manager.      (line 1531)
+* BFD_RELOC_MICROBLAZE_32_GOTOFF:        howto manager.      (line 2587)
+* BFD_RELOC_MICROBLAZE_32_LO:            howto manager.      (line 2543)
+* BFD_RELOC_MICROBLAZE_32_LO_PCREL:      howto manager.      (line 2547)
+* BFD_RELOC_MICROBLAZE_32_ROSDA:         howto manager.      (line 2551)
+* BFD_RELOC_MICROBLAZE_32_RWSDA:         howto manager.      (line 2555)
+* BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM:    howto manager.      (line 2559)
+* BFD_RELOC_MICROBLAZE_64_GOT:           howto manager.      (line 2573)
+* BFD_RELOC_MICROBLAZE_64_GOTOFF:        howto manager.      (line 2582)
+* BFD_RELOC_MICROBLAZE_64_GOTPC:         howto manager.      (line 2568)
+* BFD_RELOC_MICROBLAZE_64_NONE:          howto manager.      (line 2563)
+* BFD_RELOC_MICROBLAZE_64_PLT:           howto manager.      (line 2577)
+* BFD_RELOC_MICROBLAZE_COPY:             howto manager.      (line 2591)
+* BFD_RELOC_MICROMIPS_10_PCREL_S1:       howto manager.      (line  400)
+* BFD_RELOC_MICROMIPS_16_PCREL_S1:       howto manager.      (line  401)
+* BFD_RELOC_MICROMIPS_7_PCREL_S1:        howto manager.      (line  399)
+* BFD_RELOC_MICROMIPS_CALL16:            howto manager.      (line  413)
+* BFD_RELOC_MICROMIPS_CALL_HI16:         howto manager.      (line  419)
+* BFD_RELOC_MICROMIPS_CALL_LO16:         howto manager.      (line  421)
+* BFD_RELOC_MICROMIPS_GOT16:             howto manager.      (line  411)
+* BFD_RELOC_MICROMIPS_GOT_DISP:          howto manager.      (line  429)
+* BFD_RELOC_MICROMIPS_GOT_HI16:          howto manager.      (line  415)
+* BFD_RELOC_MICROMIPS_GOT_LO16:          howto manager.      (line  417)
+* BFD_RELOC_MICROMIPS_GOT_OFST:          howto manager.      (line  427)
+* BFD_RELOC_MICROMIPS_GOT_PAGE:          howto manager.      (line  425)
+* BFD_RELOC_MICROMIPS_GPREL16:           howto manager.      (line  404)
+* BFD_RELOC_MICROMIPS_HI16:              howto manager.      (line  405)
+* BFD_RELOC_MICROMIPS_HI16_S:            howto manager.      (line  406)
+* BFD_RELOC_MICROMIPS_HIGHER:            howto manager.      (line  438)
+* BFD_RELOC_MICROMIPS_HIGHEST:           howto manager.      (line  436)
+* BFD_RELOC_MICROMIPS_JALR:              howto manager.      (line  444)
+* BFD_RELOC_MICROMIPS_JMP:               howto manager.      (line  339)
+* BFD_RELOC_MICROMIPS_LITERAL:           howto manager.      (line  396)
+* BFD_RELOC_MICROMIPS_LO16:              howto manager.      (line  407)
+* BFD_RELOC_MICROMIPS_SCN_DISP:          howto manager.      (line  440)
+* BFD_RELOC_MICROMIPS_SUB:               howto manager.      (line  423)
+* BFD_RELOC_MICROMIPS_TLS_DTPREL_HI16:   howto manager.      (line  454)
+* BFD_RELOC_MICROMIPS_TLS_DTPREL_LO16:   howto manager.      (line  456)
+* BFD_RELOC_MICROMIPS_TLS_GD:            howto manager.      (line  450)
+* BFD_RELOC_MICROMIPS_TLS_GOTTPREL:      howto manager.      (line  458)
+* BFD_RELOC_MICROMIPS_TLS_LDM:           howto manager.      (line  452)
+* BFD_RELOC_MICROMIPS_TLS_TPREL_HI16:    howto manager.      (line  462)
+* BFD_RELOC_MICROMIPS_TLS_TPREL_LO16:    howto manager.      (line  464)
+* BFD_RELOC_MIPS16_CALL16:               howto manager.      (line  370)
+* BFD_RELOC_MIPS16_GOT16:                howto manager.      (line  369)
+* BFD_RELOC_MIPS16_GPREL:                howto manager.      (line  345)
+* BFD_RELOC_MIPS16_HI16:                 howto manager.      (line  374)
+* BFD_RELOC_MIPS16_HI16_S:               howto manager.      (line  377)
+* BFD_RELOC_MIPS16_JMP:                  howto manager.      (line  342)
+* BFD_RELOC_MIPS16_LO16:                 howto manager.      (line  383)
+* BFD_RELOC_MIPS16_TLS_DTPREL_HI16:      howto manager.      (line  388)
+* BFD_RELOC_MIPS16_TLS_DTPREL_LO16:      howto manager.      (line  389)
+* BFD_RELOC_MIPS16_TLS_GD:               howto manager.      (line  386)
+* BFD_RELOC_MIPS16_TLS_GOTTPREL:         howto manager.      (line  390)
+* BFD_RELOC_MIPS16_TLS_LDM:              howto manager.      (line  387)
+* BFD_RELOC_MIPS16_TLS_TPREL_HI16:       howto manager.      (line  391)
+* BFD_RELOC_MIPS16_TLS_TPREL_LO16:       howto manager.      (line  392)
+* BFD_RELOC_MIPS_CALL16:                 howto manager.      (line  412)
+* BFD_RELOC_MIPS_CALL_HI16:              howto manager.      (line  418)
+* BFD_RELOC_MIPS_CALL_LO16:              howto manager.      (line  420)
+* BFD_RELOC_MIPS_COPY:                   howto manager.      (line  467)
+* BFD_RELOC_MIPS_DELETE:                 howto manager.      (line  434)
+* BFD_RELOC_MIPS_GOT16:                  howto manager.      (line  410)
+* BFD_RELOC_MIPS_GOT_DISP:               howto manager.      (line  428)
+* BFD_RELOC_MIPS_GOT_HI16:               howto manager.      (line  414)
+* BFD_RELOC_MIPS_GOT_LO16:               howto manager.      (line  416)
+* BFD_RELOC_MIPS_GOT_OFST:               howto manager.      (line  426)
+* BFD_RELOC_MIPS_GOT_PAGE:               howto manager.      (line  424)
+* BFD_RELOC_MIPS_HIGHER:                 howto manager.      (line  437)
+* BFD_RELOC_MIPS_HIGHEST:                howto manager.      (line  435)
+* BFD_RELOC_MIPS_INSERT_A:               howto manager.      (line  432)
+* BFD_RELOC_MIPS_INSERT_B:               howto manager.      (line  433)
+* BFD_RELOC_MIPS_JALR:                   howto manager.      (line  443)
+* BFD_RELOC_MIPS_JMP:                    howto manager.      (line  338)
+* BFD_RELOC_MIPS_JUMP_SLOT:              howto manager.      (line  468)
+* BFD_RELOC_MIPS_LITERAL:                howto manager.      (line  395)
+* BFD_RELOC_MIPS_REL16:                  howto manager.      (line  441)
+* BFD_RELOC_MIPS_RELGOT:                 howto manager.      (line  442)
+* BFD_RELOC_MIPS_SCN_DISP:               howto manager.      (line  439)
+* BFD_RELOC_MIPS_SHIFT5:                 howto manager.      (line  430)
+* BFD_RELOC_MIPS_SHIFT6:                 howto manager.      (line  431)
+* BFD_RELOC_MIPS_SUB:                    howto manager.      (line  422)
+* BFD_RELOC_MIPS_TLS_DTPMOD32:           howto manager.      (line  445)
+* BFD_RELOC_MIPS_TLS_DTPMOD64:           howto manager.      (line  447)
+* BFD_RELOC_MIPS_TLS_DTPREL32:           howto manager.      (line  446)
+* BFD_RELOC_MIPS_TLS_DTPREL64:           howto manager.      (line  448)
+* BFD_RELOC_MIPS_TLS_DTPREL_HI16:        howto manager.      (line  453)
+* BFD_RELOC_MIPS_TLS_DTPREL_LO16:        howto manager.      (line  455)
+* BFD_RELOC_MIPS_TLS_GD:                 howto manager.      (line  449)
+* BFD_RELOC_MIPS_TLS_GOTTPREL:           howto manager.      (line  457)
+* BFD_RELOC_MIPS_TLS_LDM:                howto manager.      (line  451)
+* BFD_RELOC_MIPS_TLS_TPREL32:            howto manager.      (line  459)
+* BFD_RELOC_MIPS_TLS_TPREL64:            howto manager.      (line  460)
+* BFD_RELOC_MIPS_TLS_TPREL_HI16:         howto manager.      (line  461)
+* BFD_RELOC_MIPS_TLS_TPREL_LO16:         howto manager.      (line  463)
+* BFD_RELOC_MMIX_ADDR19:                 howto manager.      (line 1563)
+* BFD_RELOC_MMIX_ADDR27:                 howto manager.      (line 1567)
+* BFD_RELOC_MMIX_BASE_PLUS_OFFSET:       howto manager.      (line 1579)
+* BFD_RELOC_MMIX_CBRANCH:                howto manager.      (line 1543)
+* BFD_RELOC_MMIX_CBRANCH_1:              howto manager.      (line 1545)
+* BFD_RELOC_MMIX_CBRANCH_2:              howto manager.      (line 1546)
+* BFD_RELOC_MMIX_CBRANCH_3:              howto manager.      (line 1547)
+* BFD_RELOC_MMIX_CBRANCH_J:              howto manager.      (line 1544)
+* BFD_RELOC_MMIX_GETA:                   howto manager.      (line 1537)
+* BFD_RELOC_MMIX_GETA_1:                 howto manager.      (line 1538)
+* BFD_RELOC_MMIX_GETA_2:                 howto manager.      (line 1539)
+* BFD_RELOC_MMIX_GETA_3:                 howto manager.      (line 1540)
+* BFD_RELOC_MMIX_JMP:                    howto manager.      (line 1557)
+* BFD_RELOC_MMIX_JMP_1:                  howto manager.      (line 1558)
+* BFD_RELOC_MMIX_JMP_2:                  howto manager.      (line 1559)
+* BFD_RELOC_MMIX_JMP_3:                  howto manager.      (line 1560)
+* BFD_RELOC_MMIX_LOCAL:                  howto manager.      (line 1583)
+* BFD_RELOC_MMIX_PUSHJ:                  howto manager.      (line 1550)
+* BFD_RELOC_MMIX_PUSHJ_1:                howto manager.      (line 1551)
+* BFD_RELOC_MMIX_PUSHJ_2:                howto manager.      (line 1552)
+* BFD_RELOC_MMIX_PUSHJ_3:                howto manager.      (line 1553)
+* BFD_RELOC_MMIX_PUSHJ_STUBBABLE:        howto manager.      (line 1554)
+* BFD_RELOC_MMIX_REG:                    howto manager.      (line 1575)
+* BFD_RELOC_MMIX_REG_OR_BYTE:            howto manager.      (line 1571)
+* BFD_RELOC_MN10300_16_PCREL:            howto manager.      (line  566)
+* BFD_RELOC_MN10300_32_PCREL:            howto manager.      (line  562)
+* BFD_RELOC_MN10300_ALIGN:               howto manager.      (line  547)
+* BFD_RELOC_MN10300_COPY:                howto manager.      (line  530)
+* BFD_RELOC_MN10300_GLOB_DAT:            howto manager.      (line  533)
+* BFD_RELOC_MN10300_GOT16:               howto manager.      (line  526)
+* BFD_RELOC_MN10300_GOT24:               howto manager.      (line  522)
+* BFD_RELOC_MN10300_GOT32:               howto manager.      (line  518)
+* BFD_RELOC_MN10300_GOTOFF24:            howto manager.      (line  515)
+* BFD_RELOC_MN10300_JMP_SLOT:            howto manager.      (line  536)
+* BFD_RELOC_MN10300_RELATIVE:            howto manager.      (line  539)
+* BFD_RELOC_MN10300_SYM_DIFF:            howto manager.      (line  542)
+* BFD_RELOC_MN10300_TLS_DTPMOD:          howto manager.      (line  557)
+* BFD_RELOC_MN10300_TLS_DTPOFF:          howto manager.      (line  558)
+* BFD_RELOC_MN10300_TLS_GD:              howto manager.      (line  551)
+* BFD_RELOC_MN10300_TLS_GOTIE:           howto manager.      (line  554)
+* BFD_RELOC_MN10300_TLS_IE:              howto manager.      (line  555)
+* BFD_RELOC_MN10300_TLS_LD:              howto manager.      (line  552)
+* BFD_RELOC_MN10300_TLS_LDO:             howto manager.      (line  553)
+* BFD_RELOC_MN10300_TLS_LE:              howto manager.      (line  556)
+* BFD_RELOC_MN10300_TLS_TPOFF:           howto manager.      (line  559)
+* BFD_RELOC_MOXIE_10_PCREL:              howto manager.      (line  471)
+* BFD_RELOC_MSP430_10_PCREL:             howto manager.      (line 2381)
+* BFD_RELOC_MSP430_16:                   howto manager.      (line 2383)
+* BFD_RELOC_MSP430_16_BYTE:              howto manager.      (line 2385)
+* BFD_RELOC_MSP430_16_PCREL:             howto manager.      (line 2382)
+* BFD_RELOC_MSP430_16_PCREL_BYTE:        howto manager.      (line 2384)
+* BFD_RELOC_MSP430_2X_PCREL:             howto manager.      (line 2386)
+* BFD_RELOC_MSP430_RL_PCREL:             howto manager.      (line 2387)
+* BFD_RELOC_MT_GNU_VTENTRY:              howto manager.      (line 2375)
+* BFD_RELOC_MT_GNU_VTINHERIT:            howto manager.      (line 2372)
+* BFD_RELOC_MT_HI16:                     howto manager.      (line 2366)
+* BFD_RELOC_MT_LO16:                     howto manager.      (line 2369)
+* BFD_RELOC_MT_PC16:                     howto manager.      (line 2363)
+* BFD_RELOC_MT_PCINSN8:                  howto manager.      (line 2378)
+* BFD_RELOC_NONE:                        howto manager.      (line  131)
+* BFD_RELOC_NS32K_DISP_16:               howto manager.      (line  632)
+* BFD_RELOC_NS32K_DISP_16_PCREL:         howto manager.      (line  635)
+* BFD_RELOC_NS32K_DISP_32:               howto manager.      (line  633)
+* BFD_RELOC_NS32K_DISP_32_PCREL:         howto manager.      (line  636)
+* BFD_RELOC_NS32K_DISP_8:                howto manager.      (line  631)
+* BFD_RELOC_NS32K_DISP_8_PCREL:          howto manager.      (line  634)
+* BFD_RELOC_NS32K_IMM_16:                howto manager.      (line  626)
+* BFD_RELOC_NS32K_IMM_16_PCREL:          howto manager.      (line  629)
+* BFD_RELOC_NS32K_IMM_32:                howto manager.      (line  627)
+* BFD_RELOC_NS32K_IMM_32_PCREL:          howto manager.      (line  630)
+* BFD_RELOC_NS32K_IMM_8:                 howto manager.      (line  625)
+* BFD_RELOC_NS32K_IMM_8_PCREL:           howto manager.      (line  628)
+* BFD_RELOC_OPENRISC_ABS_26:             howto manager.      (line 2332)
+* BFD_RELOC_OPENRISC_REL_26:             howto manager.      (line 2333)
+* BFD_RELOC_PDP11_DISP_6_PCREL:          howto manager.      (line  640)
+* BFD_RELOC_PDP11_DISP_8_PCREL:          howto manager.      (line  639)
+* BFD_RELOC_PJ_CODE_DIR16:               howto manager.      (line  645)
+* BFD_RELOC_PJ_CODE_DIR32:               howto manager.      (line  646)
+* BFD_RELOC_PJ_CODE_HI16:                howto manager.      (line  643)
+* BFD_RELOC_PJ_CODE_LO16:                howto manager.      (line  644)
+* BFD_RELOC_PJ_CODE_REL16:               howto manager.      (line  647)
+* BFD_RELOC_PJ_CODE_REL32:               howto manager.      (line  648)
+* BFD_RELOC_PPC64_ADDR16_DS:             howto manager.      (line  710)
+* BFD_RELOC_PPC64_ADDR16_LO_DS:          howto manager.      (line  711)
+* BFD_RELOC_PPC64_DTPREL16_DS:           howto manager.      (line  759)
+* BFD_RELOC_PPC64_DTPREL16_HIGHER:       howto manager.      (line  761)
+* BFD_RELOC_PPC64_DTPREL16_HIGHERA:      howto manager.      (line  762)
+* BFD_RELOC_PPC64_DTPREL16_HIGHEST:      howto manager.      (line  763)
+* BFD_RELOC_PPC64_DTPREL16_HIGHESTA:     howto manager.      (line  764)
+* BFD_RELOC_PPC64_DTPREL16_LO_DS:        howto manager.      (line  760)
+* BFD_RELOC_PPC64_GOT16_DS:              howto manager.      (line  712)
+* BFD_RELOC_PPC64_GOT16_LO_DS:           howto manager.      (line  713)
+* BFD_RELOC_PPC64_HIGHER:                howto manager.      (line  698)
+* BFD_RELOC_PPC64_HIGHER_S:              howto manager.      (line  699)
+* BFD_RELOC_PPC64_HIGHEST:               howto manager.      (line  700)
+* BFD_RELOC_PPC64_HIGHEST_S:             howto manager.      (line  701)
+* BFD_RELOC_PPC64_PLT16_LO_DS:           howto manager.      (line  714)
+* BFD_RELOC_PPC64_PLTGOT16:              howto manager.      (line  706)
+* BFD_RELOC_PPC64_PLTGOT16_DS:           howto manager.      (line  719)
+* BFD_RELOC_PPC64_PLTGOT16_HA:           howto manager.      (line  709)
+* BFD_RELOC_PPC64_PLTGOT16_HI:           howto manager.      (line  708)
+* BFD_RELOC_PPC64_PLTGOT16_LO:           howto manager.      (line  707)
+* BFD_RELOC_PPC64_PLTGOT16_LO_DS:        howto manager.      (line  720)
+* BFD_RELOC_PPC64_SECTOFF_DS:            howto manager.      (line  715)
+* BFD_RELOC_PPC64_SECTOFF_LO_DS:         howto manager.      (line  716)
+* BFD_RELOC_PPC64_TOC:                   howto manager.      (line  705)
+* BFD_RELOC_PPC64_TOC16_DS:              howto manager.      (line  717)
+* BFD_RELOC_PPC64_TOC16_HA:              howto manager.      (line  704)
+* BFD_RELOC_PPC64_TOC16_HI:              howto manager.      (line  703)
+* BFD_RELOC_PPC64_TOC16_LO:              howto manager.      (line  702)
+* BFD_RELOC_PPC64_TOC16_LO_DS:           howto manager.      (line  718)
+* BFD_RELOC_PPC64_TPREL16_DS:            howto manager.      (line  753)
+* BFD_RELOC_PPC64_TPREL16_HIGHER:        howto manager.      (line  755)
+* BFD_RELOC_PPC64_TPREL16_HIGHERA:       howto manager.      (line  756)
+* BFD_RELOC_PPC64_TPREL16_HIGHEST:       howto manager.      (line  757)
+* BFD_RELOC_PPC64_TPREL16_HIGHESTA:      howto manager.      (line  758)
+* BFD_RELOC_PPC64_TPREL16_LO_DS:         howto manager.      (line  754)
+* BFD_RELOC_PPC_B16:                     howto manager.      (line  654)
+* BFD_RELOC_PPC_B16_BRNTAKEN:            howto manager.      (line  656)
+* BFD_RELOC_PPC_B16_BRTAKEN:             howto manager.      (line  655)
+* BFD_RELOC_PPC_B26:                     howto manager.      (line  651)
+* BFD_RELOC_PPC_BA16:                    howto manager.      (line  657)
+* BFD_RELOC_PPC_BA16_BRNTAKEN:           howto manager.      (line  659)
+* BFD_RELOC_PPC_BA16_BRTAKEN:            howto manager.      (line  658)
+* BFD_RELOC_PPC_BA26:                    howto manager.      (line  652)
+* BFD_RELOC_PPC_COPY:                    howto manager.      (line  660)
+* BFD_RELOC_PPC_DTPMOD:                  howto manager.      (line  726)
+* BFD_RELOC_PPC_DTPREL:                  howto manager.      (line  736)
+* BFD_RELOC_PPC_DTPREL16:                howto manager.      (line  732)
+* BFD_RELOC_PPC_DTPREL16_HA:             howto manager.      (line  735)
+* BFD_RELOC_PPC_DTPREL16_HI:             howto manager.      (line  734)
+* BFD_RELOC_PPC_DTPREL16_LO:             howto manager.      (line  733)
+* BFD_RELOC_PPC_EMB_BIT_FLD:             howto manager.      (line  679)
+* BFD_RELOC_PPC_EMB_MRKREF:              howto manager.      (line  674)
+* BFD_RELOC_PPC_EMB_NADDR16:             howto manager.      (line  666)
+* BFD_RELOC_PPC_EMB_NADDR16_HA:          howto manager.      (line  669)
+* BFD_RELOC_PPC_EMB_NADDR16_HI:          howto manager.      (line  668)
+* BFD_RELOC_PPC_EMB_NADDR16_LO:          howto manager.      (line  667)
+* BFD_RELOC_PPC_EMB_NADDR32:             howto manager.      (line  665)
+* BFD_RELOC_PPC_EMB_RELSDA:              howto manager.      (line  680)
+* BFD_RELOC_PPC_EMB_RELSEC16:            howto manager.      (line  675)
+* BFD_RELOC_PPC_EMB_RELST_HA:            howto manager.      (line  678)
+* BFD_RELOC_PPC_EMB_RELST_HI:            howto manager.      (line  677)
+* BFD_RELOC_PPC_EMB_RELST_LO:            howto manager.      (line  676)
+* BFD_RELOC_PPC_EMB_SDA21:               howto manager.      (line  673)
+* BFD_RELOC_PPC_EMB_SDA2I16:             howto manager.      (line  671)
+* BFD_RELOC_PPC_EMB_SDA2REL:             howto manager.      (line  672)
+* BFD_RELOC_PPC_EMB_SDAI16:              howto manager.      (line  670)
+* BFD_RELOC_PPC_GLOB_DAT:                howto manager.      (line  661)
+* BFD_RELOC_PPC_GOT_DTPREL16:            howto manager.      (line  749)
+* BFD_RELOC_PPC_GOT_DTPREL16_HA:         howto manager.      (line  752)
+* BFD_RELOC_PPC_GOT_DTPREL16_HI:         howto manager.      (line  751)
+* BFD_RELOC_PPC_GOT_DTPREL16_LO:         howto manager.      (line  750)
+* BFD_RELOC_PPC_GOT_TLSGD16:             howto manager.      (line  737)
+* BFD_RELOC_PPC_GOT_TLSGD16_HA:          howto manager.      (line  740)
+* BFD_RELOC_PPC_GOT_TLSGD16_HI:          howto manager.      (line  739)
+* BFD_RELOC_PPC_GOT_TLSGD16_LO:          howto manager.      (line  738)
+* BFD_RELOC_PPC_GOT_TLSLD16:             howto manager.      (line  741)
+* BFD_RELOC_PPC_GOT_TLSLD16_HA:          howto manager.      (line  744)
+* BFD_RELOC_PPC_GOT_TLSLD16_HI:          howto manager.      (line  743)
+* BFD_RELOC_PPC_GOT_TLSLD16_LO:          howto manager.      (line  742)
+* BFD_RELOC_PPC_GOT_TPREL16:             howto manager.      (line  745)
+* BFD_RELOC_PPC_GOT_TPREL16_HA:          howto manager.      (line  748)
+* BFD_RELOC_PPC_GOT_TPREL16_HI:          howto manager.      (line  747)
+* BFD_RELOC_PPC_GOT_TPREL16_LO:          howto manager.      (line  746)
+* BFD_RELOC_PPC_JMP_SLOT:                howto manager.      (line  662)
+* BFD_RELOC_PPC_LOCAL24PC:               howto manager.      (line  664)
+* BFD_RELOC_PPC_RELATIVE:                howto manager.      (line  663)
+* BFD_RELOC_PPC_TLS:                     howto manager.      (line  723)
+* BFD_RELOC_PPC_TLSGD:                   howto manager.      (line  724)
+* BFD_RELOC_PPC_TLSLD:                   howto manager.      (line  725)
+* BFD_RELOC_PPC_TOC16:                   howto manager.      (line  653)
+* BFD_RELOC_PPC_TPREL:                   howto manager.      (line  731)
+* BFD_RELOC_PPC_TPREL16:                 howto manager.      (line  727)
+* BFD_RELOC_PPC_TPREL16_HA:              howto manager.      (line  730)
+* BFD_RELOC_PPC_TPREL16_HI:              howto manager.      (line  729)
+* BFD_RELOC_PPC_TPREL16_LO:              howto manager.      (line  728)
+* BFD_RELOC_PPC_VLE_HA16A:               howto manager.      (line  688)
+* BFD_RELOC_PPC_VLE_HA16D:               howto manager.      (line  689)
+* BFD_RELOC_PPC_VLE_HI16A:               howto manager.      (line  686)
+* BFD_RELOC_PPC_VLE_HI16D:               howto manager.      (line  687)
+* BFD_RELOC_PPC_VLE_LO16A:               howto manager.      (line  684)
+* BFD_RELOC_PPC_VLE_LO16D:               howto manager.      (line  685)
+* BFD_RELOC_PPC_VLE_REL15:               howto manager.      (line  682)
+* BFD_RELOC_PPC_VLE_REL24:               howto manager.      (line  683)
+* BFD_RELOC_PPC_VLE_REL8:                howto manager.      (line  681)
+* BFD_RELOC_PPC_VLE_SDA21:               howto manager.      (line  690)
+* BFD_RELOC_PPC_VLE_SDA21_LO:            howto manager.      (line  691)
+* BFD_RELOC_PPC_VLE_SDAREL_HA16A:        howto manager.      (line  696)
+* BFD_RELOC_PPC_VLE_SDAREL_HA16D:        howto manager.      (line  697)
+* BFD_RELOC_PPC_VLE_SDAREL_HI16A:        howto manager.      (line  694)
+* BFD_RELOC_PPC_VLE_SDAREL_HI16D:        howto manager.      (line  695)
+* BFD_RELOC_PPC_VLE_SDAREL_LO16A:        howto manager.      (line  692)
+* BFD_RELOC_PPC_VLE_SDAREL_LO16D:        howto manager.      (line  693)
+* BFD_RELOC_RELC:                        howto manager.      (line 2349)
+* BFD_RELOC_RL78_16_OP:                  howto manager.      (line 1706)
+* BFD_RELOC_RL78_16U:                    howto manager.      (line 1710)
+* BFD_RELOC_RL78_24_OP:                  howto manager.      (line 1707)
+* BFD_RELOC_RL78_24U:                    howto manager.      (line 1711)
+* BFD_RELOC_RL78_32_OP:                  howto manager.      (line 1708)
+* BFD_RELOC_RL78_8U:                     howto manager.      (line 1709)
+* BFD_RELOC_RL78_ABS16:                  howto manager.      (line 1723)
+* BFD_RELOC_RL78_ABS16_REV:              howto manager.      (line 1724)
+* BFD_RELOC_RL78_ABS16U:                 howto manager.      (line 1727)
+* BFD_RELOC_RL78_ABS16UL:                howto manager.      (line 1729)
+* BFD_RELOC_RL78_ABS16UW:                howto manager.      (line 1728)
+* BFD_RELOC_RL78_ABS32:                  howto manager.      (line 1725)
+* BFD_RELOC_RL78_ABS32_REV:              howto manager.      (line 1726)
+* BFD_RELOC_RL78_ABS8:                   howto manager.      (line 1722)
+* BFD_RELOC_RL78_DIFF:                   howto manager.      (line 1713)
+* BFD_RELOC_RL78_DIR3U_PCREL:            howto manager.      (line 1712)
+* BFD_RELOC_RL78_GPRELB:                 howto manager.      (line 1714)
+* BFD_RELOC_RL78_GPRELL:                 howto manager.      (line 1716)
+* BFD_RELOC_RL78_GPRELW:                 howto manager.      (line 1715)
+* BFD_RELOC_RL78_HI16:                   howto manager.      (line 1731)
+* BFD_RELOC_RL78_HI8:                    howto manager.      (line 1732)
+* BFD_RELOC_RL78_LO16:                   howto manager.      (line 1733)
+* BFD_RELOC_RL78_NEG16:                  howto manager.      (line 1703)
+* BFD_RELOC_RL78_NEG24:                  howto manager.      (line 1704)
+* BFD_RELOC_RL78_NEG32:                  howto manager.      (line 1705)
+* BFD_RELOC_RL78_NEG8:                   howto manager.      (line 1702)
+* BFD_RELOC_RL78_OP_AND:                 howto manager.      (line 1720)
+* BFD_RELOC_RL78_OP_NEG:                 howto manager.      (line 1719)
+* BFD_RELOC_RL78_OP_SHRA:                howto manager.      (line 1721)
+* BFD_RELOC_RL78_OP_SUBTRACT:            howto manager.      (line 1718)
+* BFD_RELOC_RL78_RELAX:                  howto manager.      (line 1730)
+* BFD_RELOC_RL78_SYM:                    howto manager.      (line 1717)
+* BFD_RELOC_RVA:                         howto manager.      (line  100)
+* BFD_RELOC_RX_16_OP:                    howto manager.      (line 1740)
+* BFD_RELOC_RX_16U:                      howto manager.      (line 1744)
+* BFD_RELOC_RX_24_OP:                    howto manager.      (line 1741)
+* BFD_RELOC_RX_24U:                      howto manager.      (line 1745)
+* BFD_RELOC_RX_32_OP:                    howto manager.      (line 1742)
+* BFD_RELOC_RX_8U:                       howto manager.      (line 1743)
+* BFD_RELOC_RX_ABS16:                    howto manager.      (line 1755)
+* BFD_RELOC_RX_ABS16_REV:                howto manager.      (line 1756)
+* BFD_RELOC_RX_ABS16U:                   howto manager.      (line 1759)
+* BFD_RELOC_RX_ABS16UL:                  howto manager.      (line 1761)
+* BFD_RELOC_RX_ABS16UW:                  howto manager.      (line 1760)
+* BFD_RELOC_RX_ABS32:                    howto manager.      (line 1757)
+* BFD_RELOC_RX_ABS32_REV:                howto manager.      (line 1758)
+* BFD_RELOC_RX_ABS8:                     howto manager.      (line 1754)
+* BFD_RELOC_RX_DIFF:                     howto manager.      (line 1747)
+* BFD_RELOC_RX_DIR3U_PCREL:              howto manager.      (line 1746)
+* BFD_RELOC_RX_GPRELB:                   howto manager.      (line 1748)
+* BFD_RELOC_RX_GPRELL:                   howto manager.      (line 1750)
+* BFD_RELOC_RX_GPRELW:                   howto manager.      (line 1749)
+* BFD_RELOC_RX_NEG16:                    howto manager.      (line 1737)
+* BFD_RELOC_RX_NEG24:                    howto manager.      (line 1738)
+* BFD_RELOC_RX_NEG32:                    howto manager.      (line 1739)
+* BFD_RELOC_RX_NEG8:                     howto manager.      (line 1736)
+* BFD_RELOC_RX_OP_NEG:                   howto manager.      (line 1753)
+* BFD_RELOC_RX_OP_SUBTRACT:              howto manager.      (line 1752)
+* BFD_RELOC_RX_RELAX:                    howto manager.      (line 1762)
+* BFD_RELOC_RX_SYM:                      howto manager.      (line 1751)
+* BFD_RELOC_SCORE16_BRANCH:              howto manager.      (line 1893)
+* BFD_RELOC_SCORE16_JMP:                 howto manager.      (line 1890)
+* BFD_RELOC_SCORE_BCMP:                  howto manager.      (line 1896)
+* BFD_RELOC_SCORE_BRANCH:                howto manager.      (line 1881)
+* BFD_RELOC_SCORE_CALL15:                howto manager.      (line 1901)
+* BFD_RELOC_SCORE_DUMMY2:                howto manager.      (line 1877)
+* BFD_RELOC_SCORE_DUMMY_HI16:            howto manager.      (line 1902)
+* BFD_RELOC_SCORE_GOT15:                 howto manager.      (line 1899)
+* BFD_RELOC_SCORE_GOT_LO16:              howto manager.      (line 1900)
+* BFD_RELOC_SCORE_GPREL15:               howto manager.      (line 1874)
+* BFD_RELOC_SCORE_IMM30:                 howto manager.      (line 1884)
+* BFD_RELOC_SCORE_IMM32:                 howto manager.      (line 1887)
+* BFD_RELOC_SCORE_JMP:                   howto manager.      (line 1878)
+* BFD_RELOC_SH_ALIGN:                    howto manager.      (line  958)
+* BFD_RELOC_SH_CODE:                     howto manager.      (line  959)
+* BFD_RELOC_SH_COPY:                     howto manager.      (line  964)
+* BFD_RELOC_SH_COPY64:                   howto manager.      (line  989)
+* BFD_RELOC_SH_COUNT:                    howto manager.      (line  957)
+* BFD_RELOC_SH_DATA:                     howto manager.      (line  960)
+* BFD_RELOC_SH_DISP12:                   howto manager.      (line  940)
+* BFD_RELOC_SH_DISP12BY2:                howto manager.      (line  941)
+* BFD_RELOC_SH_DISP12BY4:                howto manager.      (line  942)
+* BFD_RELOC_SH_DISP12BY8:                howto manager.      (line  943)
+* BFD_RELOC_SH_DISP20:                   howto manager.      (line  944)
+* BFD_RELOC_SH_DISP20BY8:                howto manager.      (line  945)
+* BFD_RELOC_SH_FUNCDESC:                 howto manager.      (line 1032)
+* BFD_RELOC_SH_GLOB_DAT:                 howto manager.      (line  965)
+* BFD_RELOC_SH_GLOB_DAT64:               howto manager.      (line  990)
+* BFD_RELOC_SH_GOT10BY4:                 howto manager.      (line  993)
+* BFD_RELOC_SH_GOT10BY8:                 howto manager.      (line  994)
+* BFD_RELOC_SH_GOT20:                    howto manager.      (line 1026)
+* BFD_RELOC_SH_GOT_HI16:                 howto manager.      (line  972)
+* BFD_RELOC_SH_GOT_LOW16:                howto manager.      (line  969)
+* BFD_RELOC_SH_GOT_MEDHI16:              howto manager.      (line  971)
+* BFD_RELOC_SH_GOT_MEDLOW16:             howto manager.      (line  970)
+* BFD_RELOC_SH_GOTFUNCDESC:              howto manager.      (line 1028)
+* BFD_RELOC_SH_GOTFUNCDESC20:            howto manager.      (line 1029)
+* BFD_RELOC_SH_GOTOFF20:                 howto manager.      (line 1027)
+* BFD_RELOC_SH_GOTOFF_HI16:              howto manager.      (line  984)
+* BFD_RELOC_SH_GOTOFF_LOW16:             howto manager.      (line  981)
+* BFD_RELOC_SH_GOTOFF_MEDHI16:           howto manager.      (line  983)
+* BFD_RELOC_SH_GOTOFF_MEDLOW16:          howto manager.      (line  982)
+* BFD_RELOC_SH_GOTOFFFUNCDESC:           howto manager.      (line 1030)
+* BFD_RELOC_SH_GOTOFFFUNCDESC20:         howto manager.      (line 1031)
+* BFD_RELOC_SH_GOTPC:                    howto manager.      (line  968)
+* BFD_RELOC_SH_GOTPC_HI16:               howto manager.      (line  988)
+* BFD_RELOC_SH_GOTPC_LOW16:              howto manager.      (line  985)
+* BFD_RELOC_SH_GOTPC_MEDHI16:            howto manager.      (line  987)
+* BFD_RELOC_SH_GOTPC_MEDLOW16:           howto manager.      (line  986)
+* BFD_RELOC_SH_GOTPLT10BY4:              howto manager.      (line  995)
+* BFD_RELOC_SH_GOTPLT10BY8:              howto manager.      (line  996)
+* BFD_RELOC_SH_GOTPLT32:                 howto manager.      (line  997)
+* BFD_RELOC_SH_GOTPLT_HI16:              howto manager.      (line  976)
+* BFD_RELOC_SH_GOTPLT_LOW16:             howto manager.      (line  973)
+* BFD_RELOC_SH_GOTPLT_MEDHI16:           howto manager.      (line  975)
+* BFD_RELOC_SH_GOTPLT_MEDLOW16:          howto manager.      (line  974)
+* BFD_RELOC_SH_IMM3:                     howto manager.      (line  938)
+* BFD_RELOC_SH_IMM3U:                    howto manager.      (line  939)
+* BFD_RELOC_SH_IMM4:                     howto manager.      (line  946)
+* BFD_RELOC_SH_IMM4BY2:                  howto manager.      (line  947)
+* BFD_RELOC_SH_IMM4BY4:                  howto manager.      (line  948)
+* BFD_RELOC_SH_IMM8:                     howto manager.      (line  949)
+* BFD_RELOC_SH_IMM8BY2:                  howto manager.      (line  950)
+* BFD_RELOC_SH_IMM8BY4:                  howto manager.      (line  951)
+* BFD_RELOC_SH_IMM_HI16:                 howto manager.      (line 1015)
+* BFD_RELOC_SH_IMM_HI16_PCREL:           howto manager.      (line 1016)
+* BFD_RELOC_SH_IMM_LOW16:                howto manager.      (line 1009)
+* BFD_RELOC_SH_IMM_LOW16_PCREL:          howto manager.      (line 1010)
+* BFD_RELOC_SH_IMM_MEDHI16:              howto manager.      (line 1013)
+* BFD_RELOC_SH_IMM_MEDHI16_PCREL:        howto manager.      (line 1014)
+* BFD_RELOC_SH_IMM_MEDLOW16:             howto manager.      (line 1011)
+* BFD_RELOC_SH_IMM_MEDLOW16_PCREL:       howto manager.      (line 1012)
+* BFD_RELOC_SH_IMMS10:                   howto manager.      (line 1003)
+* BFD_RELOC_SH_IMMS10BY2:                howto manager.      (line 1004)
+* BFD_RELOC_SH_IMMS10BY4:                howto manager.      (line 1005)
+* BFD_RELOC_SH_IMMS10BY8:                howto manager.      (line 1006)
+* BFD_RELOC_SH_IMMS16:                   howto manager.      (line 1007)
+* BFD_RELOC_SH_IMMS6:                    howto manager.      (line 1000)
+* BFD_RELOC_SH_IMMS6BY32:                howto manager.      (line 1001)
+* BFD_RELOC_SH_IMMU16:                   howto manager.      (line 1008)
+* BFD_RELOC_SH_IMMU5:                    howto manager.      (line  999)
+* BFD_RELOC_SH_IMMU6:                    howto manager.      (line 1002)
+* BFD_RELOC_SH_JMP_SLOT:                 howto manager.      (line  966)
+* BFD_RELOC_SH_JMP_SLOT64:               howto manager.      (line  991)
+* BFD_RELOC_SH_LABEL:                    howto manager.      (line  961)
+* BFD_RELOC_SH_LOOP_END:                 howto manager.      (line  963)
+* BFD_RELOC_SH_LOOP_START:               howto manager.      (line  962)
+* BFD_RELOC_SH_PCDISP12BY2:              howto manager.      (line  937)
+* BFD_RELOC_SH_PCDISP8BY2:               howto manager.      (line  936)
+* BFD_RELOC_SH_PCRELIMM8BY2:             howto manager.      (line  952)
+* BFD_RELOC_SH_PCRELIMM8BY4:             howto manager.      (line  953)
+* BFD_RELOC_SH_PLT_HI16:                 howto manager.      (line  980)
+* BFD_RELOC_SH_PLT_LOW16:                howto manager.      (line  977)
+* BFD_RELOC_SH_PLT_MEDHI16:              howto manager.      (line  979)
+* BFD_RELOC_SH_PLT_MEDLOW16:             howto manager.      (line  978)
+* BFD_RELOC_SH_PT_16:                    howto manager.      (line 1017)
+* BFD_RELOC_SH_RELATIVE:                 howto manager.      (line  967)
+* BFD_RELOC_SH_RELATIVE64:               howto manager.      (line  992)
+* BFD_RELOC_SH_SHMEDIA_CODE:             howto manager.      (line  998)
+* BFD_RELOC_SH_SWITCH16:                 howto manager.      (line  954)
+* BFD_RELOC_SH_SWITCH32:                 howto manager.      (line  955)
+* BFD_RELOC_SH_TLS_DTPMOD32:             howto manager.      (line 1023)
+* BFD_RELOC_SH_TLS_DTPOFF32:             howto manager.      (line 1024)
+* BFD_RELOC_SH_TLS_GD_32:                howto manager.      (line 1018)
+* BFD_RELOC_SH_TLS_IE_32:                howto manager.      (line 1021)
+* BFD_RELOC_SH_TLS_LD_32:                howto manager.      (line 1019)
+* BFD_RELOC_SH_TLS_LDO_32:               howto manager.      (line 1020)
+* BFD_RELOC_SH_TLS_LE_32:                howto manager.      (line 1022)
+* BFD_RELOC_SH_TLS_TPOFF32:              howto manager.      (line 1025)
+* BFD_RELOC_SH_USES:                     howto manager.      (line  956)
+* BFD_RELOC_SPARC13:                     howto manager.      (line  134)
+* BFD_RELOC_SPARC22:                     howto manager.      (line  133)
+* BFD_RELOC_SPARC_10:                    howto manager.      (line  163)
+* BFD_RELOC_SPARC_11:                    howto manager.      (line  164)
+* BFD_RELOC_SPARC_5:                     howto manager.      (line  176)
+* BFD_RELOC_SPARC_6:                     howto manager.      (line  175)
+* BFD_RELOC_SPARC_64:                    howto manager.      (line  162)
+* BFD_RELOC_SPARC_7:                     howto manager.      (line  174)
+* BFD_RELOC_SPARC_BASE13:                howto manager.      (line  158)
+* BFD_RELOC_SPARC_BASE22:                howto manager.      (line  159)
+* BFD_RELOC_SPARC_COPY:                  howto manager.      (line  141)
+* BFD_RELOC_SPARC_DISP64:                howto manager.      (line  177)
+* BFD_RELOC_SPARC_GLOB_DAT:              howto manager.      (line  142)
+* BFD_RELOC_SPARC_GOT10:                 howto manager.      (line  135)
+* BFD_RELOC_SPARC_GOT13:                 howto manager.      (line  136)
+* BFD_RELOC_SPARC_GOT22:                 howto manager.      (line  137)
+* BFD_RELOC_SPARC_GOTDATA_HIX22:         howto manager.      (line  148)
+* BFD_RELOC_SPARC_GOTDATA_LOX10:         howto manager.      (line  149)
+* BFD_RELOC_SPARC_GOTDATA_OP:            howto manager.      (line  152)
+* BFD_RELOC_SPARC_GOTDATA_OP_HIX22:      howto manager.      (line  150)
+* BFD_RELOC_SPARC_GOTDATA_OP_LOX10:      howto manager.      (line  151)
+* BFD_RELOC_SPARC_H34:                   howto manager.      (line  186)
+* BFD_RELOC_SPARC_H44:                   howto manager.      (line  182)
+* BFD_RELOC_SPARC_HH22:                  howto manager.      (line  166)
+* BFD_RELOC_SPARC_HIX22:                 howto manager.      (line  180)
+* BFD_RELOC_SPARC_HM10:                  howto manager.      (line  167)
+* BFD_RELOC_SPARC_IRELATIVE:             howto manager.      (line  154)
+* BFD_RELOC_SPARC_JMP_IREL:              howto manager.      (line  153)
+* BFD_RELOC_SPARC_JMP_SLOT:              howto manager.      (line  143)
+* BFD_RELOC_SPARC_L44:                   howto manager.      (line  184)
+* BFD_RELOC_SPARC_LM22:                  howto manager.      (line  168)
+* BFD_RELOC_SPARC_LOX10:                 howto manager.      (line  181)
+* BFD_RELOC_SPARC_M44:                   howto manager.      (line  183)
+* BFD_RELOC_SPARC_OLO10:                 howto manager.      (line  165)
+* BFD_RELOC_SPARC_PC10:                  howto manager.      (line  138)
+* BFD_RELOC_SPARC_PC22:                  howto manager.      (line  139)
+* BFD_RELOC_SPARC_PC_HH22:               howto manager.      (line  169)
+* BFD_RELOC_SPARC_PC_HM10:               howto manager.      (line  170)
+* BFD_RELOC_SPARC_PC_LM22:               howto manager.      (line  171)
+* BFD_RELOC_SPARC_PLT32:                 howto manager.      (line  178)
+* BFD_RELOC_SPARC_PLT64:                 howto manager.      (line  179)
+* BFD_RELOC_SPARC_REGISTER:              howto manager.      (line  185)
+* BFD_RELOC_SPARC_RELATIVE:              howto manager.      (line  144)
+* BFD_RELOC_SPARC_REV32:                 howto manager.      (line  192)
+* BFD_RELOC_SPARC_SIZE32:                howto manager.      (line  187)
+* BFD_RELOC_SPARC_SIZE64:                howto manager.      (line  188)
+* BFD_RELOC_SPARC_TLS_DTPMOD32:          howto manager.      (line  213)
+* BFD_RELOC_SPARC_TLS_DTPMOD64:          howto manager.      (line  214)
+* BFD_RELOC_SPARC_TLS_DTPOFF32:          howto manager.      (line  215)
+* BFD_RELOC_SPARC_TLS_DTPOFF64:          howto manager.      (line  216)
+* BFD_RELOC_SPARC_TLS_GD_ADD:            howto manager.      (line  197)
+* BFD_RELOC_SPARC_TLS_GD_CALL:           howto manager.      (line  198)
+* BFD_RELOC_SPARC_TLS_GD_HI22:           howto manager.      (line  195)
+* BFD_RELOC_SPARC_TLS_GD_LO10:           howto manager.      (line  196)
+* BFD_RELOC_SPARC_TLS_IE_ADD:            howto manager.      (line  210)
+* BFD_RELOC_SPARC_TLS_IE_HI22:           howto manager.      (line  206)
+* BFD_RELOC_SPARC_TLS_IE_LD:             howto manager.      (line  208)
+* BFD_RELOC_SPARC_TLS_IE_LDX:            howto manager.      (line  209)
+* BFD_RELOC_SPARC_TLS_IE_LO10:           howto manager.      (line  207)
+* BFD_RELOC_SPARC_TLS_LDM_ADD:           howto manager.      (line  201)
+* BFD_RELOC_SPARC_TLS_LDM_CALL:          howto manager.      (line  202)
+* BFD_RELOC_SPARC_TLS_LDM_HI22:          howto manager.      (line  199)
+* BFD_RELOC_SPARC_TLS_LDM_LO10:          howto manager.      (line  200)
+* BFD_RELOC_SPARC_TLS_LDO_ADD:           howto manager.      (line  205)
+* BFD_RELOC_SPARC_TLS_LDO_HIX22:         howto manager.      (line  203)
+* BFD_RELOC_SPARC_TLS_LDO_LOX10:         howto manager.      (line  204)
+* BFD_RELOC_SPARC_TLS_LE_HIX22:          howto manager.      (line  211)
+* BFD_RELOC_SPARC_TLS_LE_LOX10:          howto manager.      (line  212)
+* BFD_RELOC_SPARC_TLS_TPOFF32:           howto manager.      (line  217)
+* BFD_RELOC_SPARC_TLS_TPOFF64:           howto manager.      (line  218)
+* BFD_RELOC_SPARC_UA16:                  howto manager.      (line  145)
+* BFD_RELOC_SPARC_UA32:                  howto manager.      (line  146)
+* BFD_RELOC_SPARC_UA64:                  howto manager.      (line  147)
+* BFD_RELOC_SPARC_WDISP10:               howto manager.      (line  189)
+* BFD_RELOC_SPARC_WDISP16:               howto manager.      (line  172)
+* BFD_RELOC_SPARC_WDISP19:               howto manager.      (line  173)
+* BFD_RELOC_SPARC_WDISP22:               howto manager.      (line  132)
+* BFD_RELOC_SPARC_WPLT30:                howto manager.      (line  140)
+* BFD_RELOC_SPU_ADD_PIC:                 howto manager.      (line  235)
+* BFD_RELOC_SPU_HI16:                    howto manager.      (line  232)
+* BFD_RELOC_SPU_IMM10:                   howto manager.      (line  223)
+* BFD_RELOC_SPU_IMM10W:                  howto manager.      (line  224)
+* BFD_RELOC_SPU_IMM16:                   howto manager.      (line  225)
+* BFD_RELOC_SPU_IMM16W:                  howto manager.      (line  226)
+* BFD_RELOC_SPU_IMM18:                   howto manager.      (line  227)
+* BFD_RELOC_SPU_IMM7:                    howto manager.      (line  221)
+* BFD_RELOC_SPU_IMM8:                    howto manager.      (line  222)
+* BFD_RELOC_SPU_LO16:                    howto manager.      (line  231)
+* BFD_RELOC_SPU_PCREL16:                 howto manager.      (line  230)
+* BFD_RELOC_SPU_PCREL9a:                 howto manager.      (line  228)
+* BFD_RELOC_SPU_PCREL9b:                 howto manager.      (line  229)
+* BFD_RELOC_SPU_PPU32:                   howto manager.      (line  233)
+* BFD_RELOC_SPU_PPU64:                   howto manager.      (line  234)
+* BFD_RELOC_THUMB_PCREL_BLX:             howto manager.      (line  785)
+* BFD_RELOC_THUMB_PCREL_BRANCH12:        howto manager.      (line  799)
+* BFD_RELOC_THUMB_PCREL_BRANCH20:        howto manager.      (line  800)
+* BFD_RELOC_THUMB_PCREL_BRANCH23:        howto manager.      (line  801)
+* BFD_RELOC_THUMB_PCREL_BRANCH25:        howto manager.      (line  802)
+* BFD_RELOC_THUMB_PCREL_BRANCH7:         howto manager.      (line  797)
+* BFD_RELOC_THUMB_PCREL_BRANCH9:         howto manager.      (line  798)
+* BFD_RELOC_TIC30_LDP:                   howto manager.      (line 1417)
+* BFD_RELOC_TIC54X_16_OF_23:             howto manager.      (line 1435)
+* BFD_RELOC_TIC54X_23:                   howto manager.      (line 1432)
+* BFD_RELOC_TIC54X_MS7_OF_23:            howto manager.      (line 1440)
+* BFD_RELOC_TIC54X_PARTLS7:              howto manager.      (line 1422)
+* BFD_RELOC_TIC54X_PARTMS9:              howto manager.      (line 1427)
+* BFD_RELOC_TILEGX_BROFF_X1:             howto manager.      (line 2687)
+* BFD_RELOC_TILEGX_COPY:                 howto manager.      (line 2683)
+* BFD_RELOC_TILEGX_DEST_IMM8_X1:         howto manager.      (line 2694)
+* BFD_RELOC_TILEGX_GLOB_DAT:             howto manager.      (line 2684)
+* BFD_RELOC_TILEGX_HW0:                  howto manager.      (line 2676)
+* BFD_RELOC_TILEGX_HW0_LAST:             howto manager.      (line 2680)
+* BFD_RELOC_TILEGX_HW1:                  howto manager.      (line 2677)
+* BFD_RELOC_TILEGX_HW1_LAST:             howto manager.      (line 2681)
+* BFD_RELOC_TILEGX_HW2:                  howto manager.      (line 2678)
+* BFD_RELOC_TILEGX_HW2_LAST:             howto manager.      (line 2682)
+* BFD_RELOC_TILEGX_HW3:                  howto manager.      (line 2679)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0:         howto manager.      (line 2703)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT:     howto manager.      (line 2731)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST:    howto manager.      (line 2711)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT: howto manager.     (line 2733)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PCREL: howto manager.   (line 2725)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD: howto manager.  (line 2745)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE: howto manager.  (line 2751)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE: howto manager.  (line 2741)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_PCREL:   howto manager.      (line 2717)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD:  howto manager.      (line 2737)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE:  howto manager.      (line 2749)
+* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE:  howto manager.      (line 2739)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1:         howto manager.      (line 2705)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST:    howto manager.      (line 2713)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT: howto manager.     (line 2735)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PCREL: howto manager.   (line 2727)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD: howto manager.  (line 2747)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE: howto manager.  (line 2753)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE: howto manager.  (line 2743)
+* BFD_RELOC_TILEGX_IMM16_X0_HW1_PCREL:   howto manager.      (line 2719)
+* BFD_RELOC_TILEGX_IMM16_X0_HW2:         howto manager.      (line 2707)
+* BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST:    howto manager.      (line 2715)
+* BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PCREL: howto manager.   (line 2729)
+* BFD_RELOC_TILEGX_IMM16_X0_HW2_PCREL:   howto manager.      (line 2721)
+* BFD_RELOC_TILEGX_IMM16_X0_HW3:         howto manager.      (line 2709)
+* BFD_RELOC_TILEGX_IMM16_X0_HW3_PCREL:   howto manager.      (line 2723)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0:         howto manager.      (line 2704)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT:     howto manager.      (line 2732)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST:    howto manager.      (line 2712)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT: howto manager.     (line 2734)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PCREL: howto manager.   (line 2726)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD: howto manager.  (line 2746)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE: howto manager.  (line 2752)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE: howto manager.  (line 2742)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_PCREL:   howto manager.      (line 2718)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD:  howto manager.      (line 2738)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE:  howto manager.      (line 2750)
+* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE:  howto manager.      (line 2740)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1:         howto manager.      (line 2706)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST:    howto manager.      (line 2714)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT: howto manager.     (line 2736)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PCREL: howto manager.   (line 2728)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD: howto manager.  (line 2748)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE: howto manager.  (line 2754)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE: howto manager.  (line 2744)
+* BFD_RELOC_TILEGX_IMM16_X1_HW1_PCREL:   howto manager.      (line 2720)
+* BFD_RELOC_TILEGX_IMM16_X1_HW2:         howto manager.      (line 2708)
+* BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST:    howto manager.      (line 2716)
+* BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL: howto manager.   (line 2730)
+* BFD_RELOC_TILEGX_IMM16_X1_HW2_PCREL:   howto manager.      (line 2722)
+* BFD_RELOC_TILEGX_IMM16_X1_HW3:         howto manager.      (line 2710)
+* BFD_RELOC_TILEGX_IMM16_X1_HW3_PCREL:   howto manager.      (line 2724)
+* BFD_RELOC_TILEGX_IMM8_X0:              howto manager.      (line 2690)
+* BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD:      howto manager.      (line 2767)
+* BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD:   howto manager.      (line 2762)
+* BFD_RELOC_TILEGX_IMM8_X1:              howto manager.      (line 2692)
+* BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD:      howto manager.      (line 2768)
+* BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD:   howto manager.      (line 2763)
+* BFD_RELOC_TILEGX_IMM8_Y0:              howto manager.      (line 2691)
+* BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD:      howto manager.      (line 2769)
+* BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD:   howto manager.      (line 2764)
+* BFD_RELOC_TILEGX_IMM8_Y1:              howto manager.      (line 2693)
+* BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD:      howto manager.      (line 2770)
+* BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD:   howto manager.      (line 2765)
+* BFD_RELOC_TILEGX_JMP_SLOT:             howto manager.      (line 2685)
+* BFD_RELOC_TILEGX_JUMPOFF_X1:           howto manager.      (line 2688)
+* BFD_RELOC_TILEGX_JUMPOFF_X1_PLT:       howto manager.      (line 2689)
+* BFD_RELOC_TILEGX_MF_IMM14_X1:          howto manager.      (line 2696)
+* BFD_RELOC_TILEGX_MMEND_X0:             howto manager.      (line 2698)
+* BFD_RELOC_TILEGX_MMSTART_X0:           howto manager.      (line 2697)
+* BFD_RELOC_TILEGX_MT_IMM14_X1:          howto manager.      (line 2695)
+* BFD_RELOC_TILEGX_RELATIVE:             howto manager.      (line 2686)
+* BFD_RELOC_TILEGX_SHAMT_X0:             howto manager.      (line 2699)
+* BFD_RELOC_TILEGX_SHAMT_X1:             howto manager.      (line 2700)
+* BFD_RELOC_TILEGX_SHAMT_Y0:             howto manager.      (line 2701)
+* BFD_RELOC_TILEGX_SHAMT_Y1:             howto manager.      (line 2702)
+* BFD_RELOC_TILEGX_TLS_DTPMOD32:         howto manager.      (line 2758)
+* BFD_RELOC_TILEGX_TLS_DTPMOD64:         howto manager.      (line 2755)
+* BFD_RELOC_TILEGX_TLS_DTPOFF32:         howto manager.      (line 2759)
+* BFD_RELOC_TILEGX_TLS_DTPOFF64:         howto manager.      (line 2756)
+* BFD_RELOC_TILEGX_TLS_GD_CALL:          howto manager.      (line 2761)
+* BFD_RELOC_TILEGX_TLS_IE_LOAD:          howto manager.      (line 2766)
+* BFD_RELOC_TILEGX_TLS_TPOFF32:          howto manager.      (line 2760)
+* BFD_RELOC_TILEGX_TLS_TPOFF64:          howto manager.      (line 2757)
+* BFD_RELOC_TILEPRO_BROFF_X1:            howto manager.      (line 2599)
+* BFD_RELOC_TILEPRO_COPY:                howto manager.      (line 2595)
+* BFD_RELOC_TILEPRO_DEST_IMM8_X1:        howto manager.      (line 2606)
+* BFD_RELOC_TILEPRO_GLOB_DAT:            howto manager.      (line 2596)
+* BFD_RELOC_TILEPRO_IMM16_X0:            howto manager.      (line 2609)
+* BFD_RELOC_TILEPRO_IMM16_X0_GOT:        howto manager.      (line 2625)
+* BFD_RELOC_TILEPRO_IMM16_X0_GOT_HA:     howto manager.      (line 2631)
+* BFD_RELOC_TILEPRO_IMM16_X0_GOT_HI:     howto manager.      (line 2629)
+* BFD_RELOC_TILEPRO_IMM16_X0_GOT_LO:     howto manager.      (line 2627)
+* BFD_RELOC_TILEPRO_IMM16_X0_HA:         howto manager.      (line 2615)
+* BFD_RELOC_TILEPRO_IMM16_X0_HA_PCREL:   howto manager.      (line 2623)
+* BFD_RELOC_TILEPRO_IMM16_X0_HI:         howto manager.      (line 2613)
+* BFD_RELOC_TILEPRO_IMM16_X0_HI_PCREL:   howto manager.      (line 2621)
+* BFD_RELOC_TILEPRO_IMM16_X0_LO:         howto manager.      (line 2611)
+* BFD_RELOC_TILEPRO_IMM16_X0_LO_PCREL:   howto manager.      (line 2619)
+* BFD_RELOC_TILEPRO_IMM16_X0_PCREL:      howto manager.      (line 2617)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD:     howto manager.      (line 2647)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HA:  howto manager.      (line 2653)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HI:  howto manager.      (line 2651)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO:  howto manager.      (line 2649)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE:     howto manager.      (line 2655)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HA:  howto manager.      (line 2661)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HI:  howto manager.      (line 2659)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_LO:  howto manager.      (line 2657)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE:     howto manager.      (line 2666)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA:  howto manager.      (line 2672)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI:  howto manager.      (line 2670)
+* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO:  howto manager.      (line 2668)
+* BFD_RELOC_TILEPRO_IMM16_X1:            howto manager.      (line 2610)
+* BFD_RELOC_TILEPRO_IMM16_X1_GOT:        howto manager.      (line 2626)
+* BFD_RELOC_TILEPRO_IMM16_X1_GOT_HA:     howto manager.      (line 2632)
+* BFD_RELOC_TILEPRO_IMM16_X1_GOT_HI:     howto manager.      (line 2630)
+* BFD_RELOC_TILEPRO_IMM16_X1_GOT_LO:     howto manager.      (line 2628)
+* BFD_RELOC_TILEPRO_IMM16_X1_HA:         howto manager.      (line 2616)
+* BFD_RELOC_TILEPRO_IMM16_X1_HA_PCREL:   howto manager.      (line 2624)
+* BFD_RELOC_TILEPRO_IMM16_X1_HI:         howto manager.      (line 2614)
+* BFD_RELOC_TILEPRO_IMM16_X1_HI_PCREL:   howto manager.      (line 2622)
+* BFD_RELOC_TILEPRO_IMM16_X1_LO:         howto manager.      (line 2612)
+* BFD_RELOC_TILEPRO_IMM16_X1_LO_PCREL:   howto manager.      (line 2620)
+* BFD_RELOC_TILEPRO_IMM16_X1_PCREL:      howto manager.      (line 2618)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD:     howto manager.      (line 2648)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HA:  howto manager.      (line 2654)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HI:  howto manager.      (line 2652)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_LO:  howto manager.      (line 2650)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE:     howto manager.      (line 2656)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HA:  howto manager.      (line 2662)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HI:  howto manager.      (line 2660)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_LO:  howto manager.      (line 2658)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE:     howto manager.      (line 2667)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA:  howto manager.      (line 2673)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI:  howto manager.      (line 2671)
+* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO:  howto manager.      (line 2669)
+* BFD_RELOC_TILEPRO_IMM8_X0:             howto manager.      (line 2602)
+* BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD:  howto manager.      (line 2642)
+* BFD_RELOC_TILEPRO_IMM8_X1:             howto manager.      (line 2604)
+* BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD:  howto manager.      (line 2643)
+* BFD_RELOC_TILEPRO_IMM8_Y0:             howto manager.      (line 2603)
+* BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD:  howto manager.      (line 2644)
+* BFD_RELOC_TILEPRO_IMM8_Y1:             howto manager.      (line 2605)
+* BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD:  howto manager.      (line 2645)
+* BFD_RELOC_TILEPRO_JMP_SLOT:            howto manager.      (line 2597)
+* BFD_RELOC_TILEPRO_JOFFLONG_X1:         howto manager.      (line 2600)
+* BFD_RELOC_TILEPRO_JOFFLONG_X1_PLT:     howto manager.      (line 2601)
+* BFD_RELOC_TILEPRO_MF_IMM15_X1:         howto manager.      (line 2608)
+* BFD_RELOC_TILEPRO_MMEND_X0:            howto manager.      (line 2634)
+* BFD_RELOC_TILEPRO_MMEND_X1:            howto manager.      (line 2636)
+* BFD_RELOC_TILEPRO_MMSTART_X0:          howto manager.      (line 2633)
+* BFD_RELOC_TILEPRO_MMSTART_X1:          howto manager.      (line 2635)
+* BFD_RELOC_TILEPRO_MT_IMM15_X1:         howto manager.      (line 2607)
+* BFD_RELOC_TILEPRO_RELATIVE:            howto manager.      (line 2598)
+* BFD_RELOC_TILEPRO_SHAMT_X0:            howto manager.      (line 2637)
+* BFD_RELOC_TILEPRO_SHAMT_X1:            howto manager.      (line 2638)
+* BFD_RELOC_TILEPRO_SHAMT_Y0:            howto manager.      (line 2639)
+* BFD_RELOC_TILEPRO_SHAMT_Y1:            howto manager.      (line 2640)
+* BFD_RELOC_TILEPRO_TLS_DTPMOD32:        howto manager.      (line 2663)
+* BFD_RELOC_TILEPRO_TLS_DTPOFF32:        howto manager.      (line 2664)
+* BFD_RELOC_TILEPRO_TLS_GD_CALL:         howto manager.      (line 2641)
+* BFD_RELOC_TILEPRO_TLS_IE_LOAD:         howto manager.      (line 2646)
+* BFD_RELOC_TILEPRO_TLS_TPOFF32:         howto manager.      (line 2665)
+* bfd_reloc_type_lookup:                 howto manager.      (line 2796)
+* BFD_RELOC_V850_16_GOT:                 howto manager.      (line 1381)
+* BFD_RELOC_V850_16_GOTOFF:              howto manager.      (line 1405)
+* BFD_RELOC_V850_16_PCREL:               howto manager.      (line 1351)
+* BFD_RELOC_V850_16_S1:                  howto manager.      (line 1369)
+* BFD_RELOC_V850_16_SPLIT_OFFSET:        howto manager.      (line 1366)
+* BFD_RELOC_V850_17_PCREL:               howto manager.      (line 1354)
+* BFD_RELOC_V850_22_PCREL:               howto manager.      (line 1286)
+* BFD_RELOC_V850_22_PLT_PCREL:           howto manager.      (line 1387)
+* BFD_RELOC_V850_23:                     howto manager.      (line 1357)
+* BFD_RELOC_V850_32_ABS:                 howto manager.      (line 1363)
+* BFD_RELOC_V850_32_GOT:                 howto manager.      (line 1384)
+* BFD_RELOC_V850_32_GOTOFF:              howto manager.      (line 1408)
+* BFD_RELOC_V850_32_GOTPCREL:            howto manager.      (line 1378)
+* BFD_RELOC_V850_32_PCREL:               howto manager.      (line 1360)
+* BFD_RELOC_V850_32_PLT_PCREL:           howto manager.      (line 1390)
+* BFD_RELOC_V850_9_PCREL:                howto manager.      (line 1283)
+* BFD_RELOC_V850_ALIGN:                  howto manager.      (line 1344)
+* BFD_RELOC_V850_CALLT_15_16_OFFSET:     howto manager.      (line 1375)
+* BFD_RELOC_V850_CALLT_16_16_OFFSET:     howto manager.      (line 1335)
+* BFD_RELOC_V850_CALLT_6_7_OFFSET:       howto manager.      (line 1332)
+* BFD_RELOC_V850_CODE:                   howto manager.      (line 1411)
+* BFD_RELOC_V850_COPY:                   howto manager.      (line 1393)
+* BFD_RELOC_V850_DATA:                   howto manager.      (line 1414)
+* BFD_RELOC_V850_GLOB_DAT:               howto manager.      (line 1396)
+* BFD_RELOC_V850_JMP_SLOT:               howto manager.      (line 1399)
+* BFD_RELOC_V850_LO16_S1:                howto manager.      (line 1372)
+* BFD_RELOC_V850_LO16_SPLIT_OFFSET:      howto manager.      (line 1347)
+* BFD_RELOC_V850_LONGCALL:               howto manager.      (line 1338)
+* BFD_RELOC_V850_LONGJUMP:               howto manager.      (line 1341)
+* BFD_RELOC_V850_RELATIVE:               howto manager.      (line 1402)
+* BFD_RELOC_V850_SDA_15_16_OFFSET:       howto manager.      (line 1292)
+* BFD_RELOC_V850_SDA_16_16_OFFSET:       howto manager.      (line 1289)
+* BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET: howto manager.      (line 1324)
+* BFD_RELOC_V850_TDA_16_16_OFFSET:       howto manager.      (line 1314)
+* BFD_RELOC_V850_TDA_4_4_OFFSET:         howto manager.      (line 1321)
+* BFD_RELOC_V850_TDA_4_5_OFFSET:         howto manager.      (line 1317)
+* BFD_RELOC_V850_TDA_6_8_OFFSET:         howto manager.      (line 1303)
+* BFD_RELOC_V850_TDA_7_7_OFFSET:         howto manager.      (line 1311)
+* BFD_RELOC_V850_TDA_7_8_OFFSET:         howto manager.      (line 1307)
+* BFD_RELOC_V850_ZDA_15_16_OFFSET:       howto manager.      (line 1299)
+* BFD_RELOC_V850_ZDA_16_16_OFFSET:       howto manager.      (line 1296)
+* BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET: howto manager.      (line 1328)
+* BFD_RELOC_VAX_GLOB_DAT:                howto manager.      (line 2358)
+* BFD_RELOC_VAX_JMP_SLOT:                howto manager.      (line 2359)
+* BFD_RELOC_VAX_RELATIVE:                howto manager.      (line 2360)
+* BFD_RELOC_VPE4KMATH_DATA:              howto manager.      (line 1935)
+* BFD_RELOC_VPE4KMATH_INSN:              howto manager.      (line 1936)
+* BFD_RELOC_VTABLE_ENTRY:                howto manager.      (line 1940)
+* BFD_RELOC_VTABLE_INHERIT:              howto manager.      (line 1939)
+* BFD_RELOC_X86_64_32S:                  howto manager.      (line  603)
+* BFD_RELOC_X86_64_COPY:                 howto manager.      (line  598)
+* BFD_RELOC_X86_64_DTPMOD64:             howto manager.      (line  604)
+* BFD_RELOC_X86_64_DTPOFF32:             howto manager.      (line  609)
+* BFD_RELOC_X86_64_DTPOFF64:             howto manager.      (line  605)
+* BFD_RELOC_X86_64_GLOB_DAT:             howto manager.      (line  599)
+* BFD_RELOC_X86_64_GOT32:                howto manager.      (line  596)
+* BFD_RELOC_X86_64_GOT64:                howto manager.      (line  614)
+* BFD_RELOC_X86_64_GOTOFF64:             howto manager.      (line  612)
+* BFD_RELOC_X86_64_GOTPC32:              howto manager.      (line  613)
+* BFD_RELOC_X86_64_GOTPC32_TLSDESC:      howto manager.      (line  619)
+* BFD_RELOC_X86_64_GOTPC64:              howto manager.      (line  616)
+* BFD_RELOC_X86_64_GOTPCREL:             howto manager.      (line  602)
+* BFD_RELOC_X86_64_GOTPCREL64:           howto manager.      (line  615)
+* BFD_RELOC_X86_64_GOTPLT64:             howto manager.      (line  617)
+* BFD_RELOC_X86_64_GOTTPOFF:             howto manager.      (line  610)
+* BFD_RELOC_X86_64_IRELATIVE:            howto manager.      (line  622)
+* BFD_RELOC_X86_64_JUMP_SLOT:            howto manager.      (line  600)
+* BFD_RELOC_X86_64_PLT32:                howto manager.      (line  597)
+* BFD_RELOC_X86_64_PLTOFF64:             howto manager.      (line  618)
+* BFD_RELOC_X86_64_RELATIVE:             howto manager.      (line  601)
+* BFD_RELOC_X86_64_TLSDESC:              howto manager.      (line  621)
+* BFD_RELOC_X86_64_TLSDESC_CALL:         howto manager.      (line  620)
+* BFD_RELOC_X86_64_TLSGD:                howto manager.      (line  607)
+* BFD_RELOC_X86_64_TLSLD:                howto manager.      (line  608)
+* BFD_RELOC_X86_64_TPOFF32:              howto manager.      (line  611)
+* BFD_RELOC_X86_64_TPOFF64:              howto manager.      (line  606)
+* BFD_RELOC_XC16X_PAG:                   howto manager.      (line 2352)
+* BFD_RELOC_XC16X_POF:                   howto manager.      (line 2353)
+* BFD_RELOC_XC16X_SEG:                   howto manager.      (line 2354)
+* BFD_RELOC_XC16X_SOF:                   howto manager.      (line 2355)
+* BFD_RELOC_XGATE_24:                    howto manager.      (line 2098)
+* BFD_RELOC_XGATE_GPAGE:                 howto manager.      (line 2095)
+* BFD_RELOC_XGATE_IMM3:                  howto manager.      (line 2115)
+* BFD_RELOC_XGATE_IMM4:                  howto manager.      (line 2118)
+* BFD_RELOC_XGATE_IMM5:                  howto manager.      (line 2121)
+* BFD_RELOC_XGATE_IMM8_HI:               howto manager.      (line 2111)
+* BFD_RELOC_XGATE_IMM8_LO:               howto manager.      (line 2107)
+* BFD_RELOC_XGATE_LO16:                  howto manager.      (line 2091)
+* BFD_RELOC_XGATE_PCREL_10:              howto manager.      (line 2104)
+* BFD_RELOC_XGATE_PCREL_9:               howto manager.      (line 2101)
+* BFD_RELOC_XGATE_RL_GROUP:              howto manager.      (line 2086)
+* BFD_RELOC_XGATE_RL_JUMP:               howto manager.      (line 2082)
+* BFD_RELOC_XSTORMY16_12:                howto manager.      (line 2344)
+* BFD_RELOC_XSTORMY16_24:                howto manager.      (line 2345)
+* BFD_RELOC_XSTORMY16_FPTR16:            howto manager.      (line 2346)
+* BFD_RELOC_XSTORMY16_REL_12:            howto manager.      (line 2343)
+* BFD_RELOC_XTENSA_ASM_EXPAND:           howto manager.      (line 2464)
+* BFD_RELOC_XTENSA_ASM_SIMPLIFY:         howto manager.      (line 2469)
+* BFD_RELOC_XTENSA_DIFF16:               howto manager.      (line 2411)
+* BFD_RELOC_XTENSA_DIFF32:               howto manager.      (line 2412)
+* BFD_RELOC_XTENSA_DIFF8:                howto manager.      (line 2410)
+* BFD_RELOC_XTENSA_GLOB_DAT:             howto manager.      (line 2400)
+* BFD_RELOC_XTENSA_JMP_SLOT:             howto manager.      (line 2401)
+* BFD_RELOC_XTENSA_OP0:                  howto manager.      (line 2458)
+* BFD_RELOC_XTENSA_OP1:                  howto manager.      (line 2459)
+* BFD_RELOC_XTENSA_OP2:                  howto manager.      (line 2460)
+* BFD_RELOC_XTENSA_PLT:                  howto manager.      (line 2405)
+* BFD_RELOC_XTENSA_RELATIVE:             howto manager.      (line 2402)
+* BFD_RELOC_XTENSA_RTLD:                 howto manager.      (line 2395)
+* BFD_RELOC_XTENSA_SLOT0_ALT:            howto manager.      (line 2440)
+* BFD_RELOC_XTENSA_SLOT0_OP:             howto manager.      (line 2420)
+* BFD_RELOC_XTENSA_SLOT10_ALT:           howto manager.      (line 2450)
+* BFD_RELOC_XTENSA_SLOT10_OP:            howto manager.      (line 2430)
+* BFD_RELOC_XTENSA_SLOT11_ALT:           howto manager.      (line 2451)
+* BFD_RELOC_XTENSA_SLOT11_OP:            howto manager.      (line 2431)
+* BFD_RELOC_XTENSA_SLOT12_ALT:           howto manager.      (line 2452)
+* BFD_RELOC_XTENSA_SLOT12_OP:            howto manager.      (line 2432)
+* BFD_RELOC_XTENSA_SLOT13_ALT:           howto manager.      (line 2453)
+* BFD_RELOC_XTENSA_SLOT13_OP:            howto manager.      (line 2433)
+* BFD_RELOC_XTENSA_SLOT14_ALT:           howto manager.      (line 2454)
+* BFD_RELOC_XTENSA_SLOT14_OP:            howto manager.      (line 2434)
+* BFD_RELOC_XTENSA_SLOT1_ALT:            howto manager.      (line 2441)
+* BFD_RELOC_XTENSA_SLOT1_OP:             howto manager.      (line 2421)
+* BFD_RELOC_XTENSA_SLOT2_ALT:            howto manager.      (line 2442)
+* BFD_RELOC_XTENSA_SLOT2_OP:             howto manager.      (line 2422)
+* BFD_RELOC_XTENSA_SLOT3_ALT:            howto manager.      (line 2443)
+* BFD_RELOC_XTENSA_SLOT3_OP:             howto manager.      (line 2423)
+* BFD_RELOC_XTENSA_SLOT4_ALT:            howto manager.      (line 2444)
+* BFD_RELOC_XTENSA_SLOT4_OP:             howto manager.      (line 2424)
+* BFD_RELOC_XTENSA_SLOT5_ALT:            howto manager.      (line 2445)
+* BFD_RELOC_XTENSA_SLOT5_OP:             howto manager.      (line 2425)
+* BFD_RELOC_XTENSA_SLOT6_ALT:            howto manager.      (line 2446)
+* BFD_RELOC_XTENSA_SLOT6_OP:             howto manager.      (line 2426)
+* BFD_RELOC_XTENSA_SLOT7_ALT:            howto manager.      (line 2447)
+* BFD_RELOC_XTENSA_SLOT7_OP:             howto manager.      (line 2427)
+* BFD_RELOC_XTENSA_SLOT8_ALT:            howto manager.      (line 2448)
+* BFD_RELOC_XTENSA_SLOT8_OP:             howto manager.      (line 2428)
+* BFD_RELOC_XTENSA_SLOT9_ALT:            howto manager.      (line 2449)
+* BFD_RELOC_XTENSA_SLOT9_OP:             howto manager.      (line 2429)
+* BFD_RELOC_XTENSA_TLS_ARG:              howto manager.      (line 2479)
+* BFD_RELOC_XTENSA_TLS_CALL:             howto manager.      (line 2480)
+* BFD_RELOC_XTENSA_TLS_DTPOFF:           howto manager.      (line 2476)
+* BFD_RELOC_XTENSA_TLS_FUNC:             howto manager.      (line 2478)
+* BFD_RELOC_XTENSA_TLS_TPOFF:            howto manager.      (line 2477)
+* BFD_RELOC_XTENSA_TLSDESC_ARG:          howto manager.      (line 2475)
+* BFD_RELOC_XTENSA_TLSDESC_FN:           howto manager.      (line 2474)
+* BFD_RELOC_Z80_DISP8:                   howto manager.      (line 2483)
+* BFD_RELOC_Z8K_CALLR:                   howto manager.      (line 2489)
+* BFD_RELOC_Z8K_DISP7:                   howto manager.      (line 2486)
+* BFD_RELOC_Z8K_IMM4L:                   howto manager.      (line 2492)
+* bfd_rename_section:                    section prototypes. (line  169)
+* bfd_scan_arch:                         Architectures.      (line  477)
+* bfd_scan_vma:                          BFD front end.      (line  567)
+* bfd_seach_for_target:                  bfd_target.         (line  520)
+* bfd_section_already_linked:            Writing the symbol table.
+                                                             (line   55)
+* bfd_section_list_clear:                section prototypes. (line    8)
+* bfd_sections_find_if:                  section prototypes. (line  199)
+* bfd_set_arch_info:                     Architectures.      (line  518)
+* bfd_set_archive_head:                  Archives.           (line   69)
+* bfd_set_assert_handler:                BFD front end.      (line  429)
+* bfd_set_default_target:                bfd_target.         (line  459)
+* bfd_set_error:                         BFD front end.      (line  345)
+* bfd_set_error_handler:                 BFD front end.      (line  387)
+* bfd_set_error_program_name:            BFD front end.      (line  396)
+* bfd_set_file_flags:                    BFD front end.      (line  487)
+* bfd_set_format:                        Formats.            (line   68)
+* bfd_set_gp_size:                       BFD front end.      (line  557)
+* bfd_set_private_flags:                 BFD front end.      (line  634)
+* bfd_set_reloc:                         BFD front end.      (line  477)
+* bfd_set_section_contents:              section prototypes. (line  230)
+* bfd_set_section_flags:                 section prototypes. (line  154)
+* bfd_set_section_size:                  section prototypes. (line  216)
+* bfd_set_start_address:                 BFD front end.      (line  536)
+* bfd_set_symtab:                        symbol handling functions.
+                                                             (line   60)
+* bfd_symbol_info:                       symbol handling functions.
+                                                             (line  130)
+* bfd_target_list:                       bfd_target.         (line  511)
+* bfd_write_bigendian_4byte_int:         Internal.           (line   13)
+* bfd_zalloc:                            Opening and Closing.
+                                                             (line  236)
+* bfd_zalloc2:                           Opening and Closing.
+                                                             (line  245)
+* coff_symbol_type:                      coff.               (line  244)
+* core_file_matches_executable_p:        Core Files.         (line   39)
+* find_separate_debug_file:              Opening and Closing.
+                                                             (line  287)
+* generic_core_file_matches_executable_p: Core Files.        (line   49)
+* get_debug_link_info:                   Opening and Closing.
+                                                             (line  268)
+* Hash tables:                           Hash Tables.        (line    6)
+* internal object-file format:           Canonical format.   (line   11)
+* Linker:                                Linker Functions.   (line    6)
+* Other functions:                       BFD front end.      (line  649)
+* separate_debug_file_exists:            Opening and Closing.
+                                                             (line  278)
+* struct bfd_iovec:                      BFD front end.      (line  855)
+* target vector (_bfd_final_link):       Performing the Final Link.
+                                                             (line    6)
+* target vector (_bfd_link_add_symbols): Adding Symbols to the Hash Table.
+                                                             (line    6)
+* target vector (_bfd_link_hash_table_create): Creating a Linker Hash Table.
+                                                             (line    6)
+* The HOWTO Macro:                       typedef arelent.    (line  288)
+* what is it?:                           Overview.           (line    6)
+
+
+
+Tag Table:
+Node: Top1089
+Node: Overview1428
+Node: History2479
+Node: How It Works3425
+Node: What BFD Version 2 Can Do4968
+Node: BFD information loss6283
+Node: Canonical format8815
+Node: BFD front end13187
+Node: Memory Usage47266
+Node: Initialization48494
+Node: Sections48953
+Node: Section Input49436
+Node: Section Output50801
+Node: typedef asection53287
+Node: section prototypes78494
+Node: Symbols88750
+Node: Reading Symbols90345
+Node: Writing Symbols91452
+Node: Mini Symbols93193
+Node: typedef asymbol94167
+Node: symbol handling functions100226
+Node: Archives105568
+Node: Formats109294
+Node: Relocations112242
+Node: typedef arelent112969
+Node: howto manager128605
+Node: Core Files219224
+Node: Targets221262
+Node: bfd_target223232
+Node: Architectures246197
+Node: Opening and Closing271999
+Node: Internal283518
+Node: File Caching289863
+Node: Linker Functions291777
+Node: Creating a Linker Hash Table293450
+Node: Adding Symbols to the Hash Table295188
+Node: Differing file formats296088
+Node: Adding symbols from an object file297813
+Node: Adding symbols from an archive299964
+Node: Performing the Final Link302893
+Node: Information provided by the linker304135
+Node: Relocating the section contents305289
+Node: Writing the symbol table307040
+Node: Hash Tables311426
+Node: Creating and Freeing a Hash Table312624
+Node: Looking Up or Entering a String313874
+Node: Traversing a Hash Table315127
+Node: Deriving a New Hash Table Type315916
+Node: Define the Derived Structures316982
+Node: Write the Derived Creation Routine318063
+Node: Write Other Derived Routines320687
+Node: BFD back ends322002
+Node: What to Put Where322272
+Node: aout322452
+Node: coff328770
+Node: elf357203
+Node: mmo357604
+Node: File layout358532
+Node: Symbol-table364179
+Node: mmo section mapping367948
+Node: GNU Free Documentation License371600
+Node: BFD Index396683
+
+End Tag Table
diff --git a/bfd/doc/bfd.texinfo b/bfd/doc/bfd.texinfo
index 8b13789..45ffa73 100644
--- a/bfd/doc/bfd.texinfo
+++ b/bfd/doc/bfd.texinfo
@@ -1 +1,339 @@
+\input texinfo.tex
+ at setfilename bfd.info
+ at c Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1997, 2000,
+ at c 2001, 2002, 2003, 2006, 2007, 2008, 2009
+ at c Free Software Foundation, Inc.
+ at c 
+ at synindex fn cp
 
+ at ifnottex
+ at dircategory Software development
+ at direntry
+* Bfd: (bfd).                   The Binary File Descriptor library.
+ at end direntry
+ at end ifnottex
+
+ at copying
+This file documents the BFD library.
+
+Copyright @copyright{} 1991, 2000, 2001, 2003, 2006, 2007, 2008 Free Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being ``GNU General Public License'' and ``Funding
+Free Software'', the Front-Cover texts being (a) (see below), and with
+the Back-Cover Texts being (b) (see below).  A copy of the license is
+included in the section entitled ``GNU Free Documentation License''.
+
+(a) The FSF's Front-Cover Text is:
+
+     A GNU Manual
+
+(b) The FSF's Back-Cover Text is:
+
+     You have freedom to copy and modify this GNU Manual, like GNU
+     software.  Copies published by the Free Software Foundation raise
+     funds for GNU development.
+ at end copying
+ at iftex
+ at c@finalout
+ at setchapternewpage on
+ at c@setchapternewpage odd
+ at settitle LIB BFD, the Binary File Descriptor Library
+ at titlepage
+ at title{libbfd}
+ at subtitle{The Binary File Descriptor Library}
+ at sp 1
+ at subtitle First Edition---BFD version < 3.0  % Since no product is stable before version 3.0 :-)
+ at subtitle Original Document Created: April 1991
+ at author {Steve Chamberlain}
+ at author {Cygnus Support}
+ at page
+
+ at tex
+\def\$#1${{#1}}  % Kluge: collect RCS revision info without $...$
+\xdef\manvers{1.5}  % For use in headers, footers too
+{\parskip=0pt
+\hfill Free Software Foundation\par
+\hfill sac\@www.gnu.org\par
+\hfill {\it BFD}, \manvers\par
+\hfill \TeX{}info \texinfoversion\par
+}
+\global\parindent=0pt % Steve likes it this way
+ at end tex
+
+ at vskip 0pt plus 1filll
+Copyright @copyright{} 1991, 2001, 2003, 2006, 2008 Free Software Foundation, Inc.
+
+      Permission is granted to copy, distribute and/or modify this document
+      under the terms of the GNU Free Documentation License, Version 1.3
+      or any later version published by the Free Software Foundation;
+      with no Invariant Sections, with no Front-Cover Texts, and with no
+      Back-Cover Texts.  A copy of the license is included in the
+      section entitled ``GNU Free Documentation License''.
+
+ at end titlepage
+ at end iftex
+ at contents
+
+ at node Top, Overview, (dir), (dir)
+ at ifinfo
+This file documents the binary file descriptor library libbfd.
+ at end ifinfo
+
+ at menu
+* Overview::			Overview of BFD
+* BFD front end::		BFD front end
+* BFD back ends::		BFD back ends
+* GNU Free Documentation License::  GNU Free Documentation License
+* BFD Index::		BFD Index
+ at end menu
+
+ at node Overview, BFD front end, Top, Top
+ at chapter Introduction
+ at cindex BFD
+ at cindex what is it?
+BFD is a package which allows applications to use the
+same routines to operate on object files whatever the object file
+format.  A new object file format can be supported simply by
+creating a new BFD back end and adding it to the library.
+
+BFD is split into two parts: the front end, and the back ends (one for
+each object file format).
+ at itemize @bullet
+ at item The front end of BFD provides the interface to the user. It manages
+memory and various canonical data structures. The front end also
+decides which back end to use and when to call back end routines.
+ at item The back ends provide BFD its view of the real world. Each back
+end provides a set of calls which the BFD front end can use to maintain
+its canonical form. The back ends also may keep around information for
+their own use, for greater efficiency.
+ at end itemize
+ at menu
+* History::			History
+* How It Works::		How It Works
+* What BFD Version 2 Can Do::	What BFD Version 2 Can Do
+ at end menu
+
+ at node History, How It Works, Overview, Overview
+ at section History
+
+One spur behind BFD was the desire, on the part of the GNU 960 team at
+Intel Oregon, for interoperability of applications on their COFF and
+b.out file formats.  Cygnus was providing GNU support for the team, and
+was contracted to provide the required functionality.
+
+The name came from a conversation David Wallace was having with Richard
+Stallman about the library: RMS said that it would be quite hard---David
+said ``BFD''.  Stallman was right, but the name stuck.
+
+At the same time, Ready Systems wanted much the same thing, but for
+different object file formats: IEEE-695, Oasys, Srecords, a.out and 68k
+coff.
+
+BFD was first implemented by members of Cygnus Support; Steve
+Chamberlain (@code{sac@@cygnus.com}), John Gilmore
+(@code{gnu@@cygnus.com}), K.  Richard Pixley (@code{rich@@cygnus.com})
+and David Henkel-Wallace (@code{gumby@@cygnus.com}).
+
+
+
+ at node How It Works, What BFD Version 2 Can Do, History, Overview
+ at section How To Use BFD
+
+To use the library, include @file{bfd.h} and link with @file{libbfd.a}.	
+
+BFD provides a common interface to the parts of an object file
+for a calling application. 
+
+When an application successfully opens a target file (object, archive, or
+whatever), a pointer to an internal structure is returned. This pointer
+points to a structure called @code{bfd}, described in
+ at file{bfd.h}.  Our convention is to call this pointer a BFD, and
+instances of it within code @code{abfd}.  All operations on
+the target object file are applied as methods to the BFD.  The mapping is
+defined within @code{bfd.h} in a set of macros, all beginning
+with @samp{bfd_} to reduce namespace pollution.
+
+For example, this sequence does what you would probably expect:
+return the number of sections in an object file attached to a BFD
+ at code{abfd}. 
+
+ at example
+ at c @cartouche
+#include "bfd.h"
+
+unsigned int number_of_sections (abfd)
+bfd *abfd;
+@{
+  return bfd_count_sections (abfd);
+@}
+ at c @end cartouche
+ at end example
+
+The abstraction used within BFD is that an object file has:
+
+ at itemize @bullet
+ at item
+a header,
+ at item
+a number of sections containing raw data (@pxref{Sections}),
+ at item
+a set of relocations (@pxref{Relocations}), and
+ at item
+some symbol information (@pxref{Symbols}).
+ at end itemize
+ at noindent
+Also, BFDs opened for archives have the additional attribute of an index
+and contain subordinate BFDs. This approach is fine for a.out and coff,
+but loses efficiency when applied to formats such as S-records and
+IEEE-695.
+
+ at node What BFD Version 2 Can Do,  , How It Works, Overview
+ at section What BFD Version 2 Can Do
+ at include bfdsumm.texi
+
+ at node BFD front end, BFD back ends, Overview, Top
+ at chapter BFD Front End
+ at include bfdt.texi
+ at include bfdio.texi
+
+ at menu
+* Memory Usage::
+* Initialization::
+* Sections::
+* Symbols::
+* Archives::
+* Formats::
+* Relocations::
+* Core Files::
+* Targets::
+* Architectures::
+* Opening and Closing::
+* Internal::
+* File Caching::
+* Linker Functions::
+* Hash Tables::
+ at end menu
+
+ at node Memory Usage, Initialization, BFD front end, BFD front end
+ at section Memory Usage
+BFD keeps all of its internal structures in obstacks. There is one obstack
+per open BFD file, into which the current state is stored. When a BFD is
+closed, the obstack is deleted, and so everything which has been
+allocated by BFD for the closing file is thrown away.
+
+BFD does not free anything created by an application, but pointers into
+ at code{bfd} structures become invalid on a @code{bfd_close}; for example,
+after a @code{bfd_close} the vector passed to
+ at code{bfd_canonicalize_symtab} is still around, since it has been
+allocated by the application, but the data that it pointed to are
+lost.
+
+The general rule is to not close a BFD until all operations dependent
+upon data from the BFD have been completed, or all the data from within
+the file has been copied. To help with the management of memory, there
+is a function (@code{bfd_alloc_size}) which returns the number of bytes
+in obstacks associated with the supplied BFD. This could be used to
+select the greediest open BFD, close it to reclaim the memory, perform
+some operation and reopen the BFD again, to get a fresh copy of the data
+structures.
+
+ at node Initialization, Sections, Memory Usage, BFD front end
+ at include  init.texi
+
+ at node Sections, Symbols, Initialization, BFD front end
+ at include  section.texi
+
+ at node Symbols, Archives, Sections, BFD front end
+ at include  syms.texi
+
+ at node Archives, Formats, Symbols, BFD front end
+ at include  archive.texi
+
+ at node Formats, Relocations, Archives, BFD front end
+ at include  format.texi
+
+ at node Relocations, Core Files, Formats, BFD front end
+ at include  reloc.texi
+
+ at node Core Files, Targets, Relocations, BFD front end
+ at include  core.texi
+
+ at node Targets, Architectures, Core Files, BFD front end
+ at include  targets.texi
+
+ at node Architectures, Opening and Closing, Targets, BFD front end
+ at include  archures.texi
+
+ at node Opening and Closing, Internal, Architectures, BFD front end
+ at include  opncls.texi
+
+ at node Internal, File Caching, Opening and Closing, BFD front end
+ at include  libbfd.texi
+
+ at node File Caching, Linker Functions, Internal, BFD front end
+ at include  cache.texi
+
+ at node Linker Functions, Hash Tables, File Caching, BFD front end
+ at include  linker.texi
+
+ at node Hash Tables, , Linker Functions, BFD front end
+ at include  hash.texi
+
+ at node BFD back ends, GNU Free Documentation License, BFD front end, Top
+ at chapter BFD back ends
+ at menu
+* What to Put Where::
+* aout ::	a.out backends
+* coff ::	coff backends
+* elf  ::	elf backends
+* mmo  ::	mmo backend
+ at ignore
+* oasys ::	oasys backends
+* ieee ::	ieee backend
+* srecord ::	s-record backend
+ at end ignore
+ at end menu
+ at node What to Put Where, aout, BFD back ends, BFD back ends
+ at section What to Put Where
+All of BFD lives in one directory.
+
+ at node aout, coff, What to Put Where, BFD back ends
+ at include  aoutx.texi
+
+ at node coff, elf, aout, BFD back ends
+ at include  coffcode.texi
+
+ at node elf, mmo, coff, BFD back ends
+ at include  elf.texi
+ at c Leave this out until the file has some actual contents...
+ at c @include  elfcode.texi
+
+ at node mmo,  , elf, BFD back ends
+ at include  mmo.texi
+
+ at node GNU Free Documentation License, BFD Index, BFD back ends, Top
+ at include fdl.texi
+
+ at node BFD Index,  , GNU Free Documentation License, Top
+ at unnumbered BFD Index
+ at printindex cp
+
+ at tex
+% I think something like @colophon should be in texinfo.  In the
+% meantime:
+\long\def\colophon{\hbox to0pt{}\vfill
+\centerline{The body of this manual is set in}
+\centerline{\fontname\tenrm,}
+\centerline{with headings in {\bf\fontname\tenbf}}
+\centerline{and examples in {\tt\fontname\tentt}.}
+\centerline{{\it\fontname\tenit\/} and}
+\centerline{{\sl\fontname\tensl\/}}
+\centerline{are used for emphasis.}\vfill}
+\page\colophon
+% Blame: doc at cygnus.com, 28mar91.
+ at end tex
+
+ at bye
diff --git a/bfd/doc/bfdint.texi b/bfd/doc/bfdint.texi
index 8b13789..1e03aeb 100644
--- a/bfd/doc/bfdint.texi
+++ b/bfd/doc/bfdint.texi
@@ -1 +1,1902 @@
+\input texinfo
+ at c Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998,
+ at c 2000, 2001, 2002, 2003, 2004, 2006, 2007, 2009
+ at c Free Software Foundation, Inc.
+ at setfilename bfdint.info
 
+ at settitle BFD Internals
+ at iftex
+ at titlepage
+ at title{BFD Internals}
+ at author{Ian Lance Taylor}
+ at author{Cygnus Solutions}
+ at page
+ at end iftex
+
+ at copying
+This file documents the internals of the BFD library.
+
+Copyright @copyright{} 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
+1996, 1998, 2000, 2001, 2002, 2003, 2004, 2006, 2007, 2009
+Free Software Foundation, Inc.
+Contributed by Cygnus Support.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being ``GNU General Public License'' and ``Funding
+Free Software'', the Front-Cover texts being (a) (see below), and with
+the Back-Cover Texts being (b) (see below).  A copy of the license is
+included in the section entitled ``GNU Free Documentation License''.
+
+(a) The FSF's Front-Cover Text is:
+
+     A GNU Manual
+
+(b) The FSF's Back-Cover Text is:
+
+     You have freedom to copy and modify this GNU Manual, like GNU
+     software.  Copies published by the Free Software Foundation raise
+     funds for GNU development.
+ at end copying
+
+ at node Top
+ at top BFD Internals
+ at raisesections
+ at cindex bfd internals
+
+This document describes some BFD internal information which may be
+helpful when working on BFD.  It is very incomplete.
+
+This document is not updated regularly, and may be out of date.
+
+The initial version of this document was written by Ian Lance Taylor
+ at email{ian@@cygnus.com}.
+
+ at menu
+* BFD overview::		BFD overview
+* BFD guidelines::		BFD programming guidelines
+* BFD target vector::		BFD target vector
+* BFD generated files::		BFD generated files
+* BFD multiple compilations::	Files compiled multiple times in BFD
+* BFD relocation handling::	BFD relocation handling
+* BFD ELF support::		BFD ELF support
+* BFD glossary::		Glossary
+* Index::			Index
+ at end menu
+
+ at node BFD overview
+ at section BFD overview
+
+BFD is a library which provides a single interface to read and write
+object files, executables, archive files, and core files in any format.
+
+ at menu
+* BFD library interfaces::	BFD library interfaces
+* BFD library users::		BFD library users
+* BFD view::			The BFD view of a file
+* BFD blindness::		BFD loses information
+ at end menu
+
+ at node BFD library interfaces
+ at subsection BFD library interfaces
+
+One way to look at the BFD library is to divide it into four parts by
+type of interface.
+
+The first interface is the set of generic functions which programs using
+the BFD library will call.  These generic function normally translate
+directly or indirectly into calls to routines which are specific to a
+particular object file format.  Many of these generic functions are
+actually defined as macros in @file{bfd.h}.  These functions comprise
+the official BFD interface.
+
+The second interface is the set of functions which appear in the target
+vectors.  This is the bulk of the code in BFD.  A target vector is a set
+of function pointers specific to a particular object file format.  The
+target vector is used to implement the generic BFD functions.  These
+functions are always called through the target vector, and are never
+called directly.  The target vector is described in detail in @ref{BFD
+target vector}.  The set of functions which appear in a particular
+target vector is often referred to as a BFD backend.
+
+The third interface is a set of oddball functions which are typically
+specific to a particular object file format, are not generic functions,
+and are called from outside of the BFD library.  These are used as hooks
+by the linker and the assembler when a particular object file format
+requires some action which the BFD generic interface does not provide.
+These functions are typically declared in @file{bfd.h}, but in many
+cases they are only provided when BFD is configured with support for a
+particular object file format.  These functions live in a grey area, and
+are not really part of the official BFD interface.
+
+The fourth interface is the set of BFD support functions which are
+called by the other BFD functions.  These manage issues like memory
+allocation, error handling, file access, hash tables, swapping, and the
+like.  These functions are never called from outside of the BFD library.
+
+ at node BFD library users
+ at subsection BFD library users
+
+Another way to look at the BFD library is to divide it into three parts
+by the manner in which it is used.
+
+The first use is to read an object file.  The object file readers are
+programs like @samp{gdb}, @samp{nm}, @samp{objdump}, and @samp{objcopy}.
+These programs use BFD to view an object file in a generic form.  The
+official BFD interface is normally fully adequate for these programs.
+
+The second use is to write an object file.  The object file writers are
+programs like @samp{gas} and @samp{objcopy}.  These programs use BFD to
+create an object file.  The official BFD interface is normally adequate
+for these programs, but for some object file formats the assembler needs
+some additional hooks in order to set particular flags or other
+information.  The official BFD interface includes functions to copy
+private information from one object file to another, and these functions
+are used by @samp{objcopy} to avoid information loss.
+
+The third use is to link object files.  There is only one object file
+linker, @samp{ld}.  Originally, @samp{ld} was an object file reader and
+an object file writer, and it did the link operation using the generic
+BFD structures.  However, this turned out to be too slow and too memory
+intensive.
+
+The official BFD linker functions were written to permit specific BFD
+backends to perform the link without translating through the generic
+structures, in the normal case where all the input files and output file
+have the same object file format.  Not all of the backends currently
+implement the new interface, and there are default linking functions
+within BFD which use the generic structures and which work with all
+backends.
+
+For several object file formats the linker needs additional hooks which
+are not provided by the official BFD interface, particularly for dynamic
+linking support.  These functions are typically called from the linker
+emulation template.
+
+ at node BFD view
+ at subsection The BFD view of a file
+
+BFD uses generic structures to manage information.  It translates data
+into the generic form when reading files, and out of the generic form
+when writing files.
+
+BFD describes a file as a pointer to the @samp{bfd} type.  A @samp{bfd}
+is composed of the following elements.  The BFD information can be
+displayed using the @samp{objdump} program with various options.
+
+ at table @asis
+ at item general information
+The object file format, a few general flags, the start address.
+ at item architecture
+The architecture, including both a general processor type (m68k, MIPS
+etc.) and a specific machine number (m68000, R4000, etc.).
+ at item sections
+A list of sections.
+ at item symbols
+A symbol table.
+ at end table
+
+BFD represents a section as a pointer to the @samp{asection} type.  Each
+section has a name and a size.  Most sections also have an associated
+block of data, known as the section contents.  Sections also have
+associated flags, a virtual memory address, a load memory address, a
+required alignment, a list of relocations, and other miscellaneous
+information.
+
+BFD represents a relocation as a pointer to the @samp{arelent} type.  A
+relocation describes an action which the linker must take to modify the
+section contents.  Relocations have a symbol, an address, an addend, and
+a pointer to a howto structure which describes how to perform the
+relocation.  For more information, see @ref{BFD relocation handling}.
+
+BFD represents a symbol as a pointer to the @samp{asymbol} type.  A
+symbol has a name, a pointer to a section, an offset within that
+section, and some flags.
+
+Archive files do not have any sections or symbols.  Instead, BFD
+represents an archive file as a file which contains a list of
+ at samp{bfd}s.  BFD also provides access to the archive symbol map, as a
+list of symbol names.  BFD provides a function to return the @samp{bfd}
+within the archive which corresponds to a particular entry in the
+archive symbol map.
+
+ at node BFD blindness
+ at subsection BFD loses information
+
+Most object file formats have information which BFD can not represent in
+its generic form, at least as currently defined.
+
+There is often explicit information which BFD can not represent.  For
+example, the COFF version stamp, or the ELF program segments.  BFD
+provides special hooks to handle this information when copying,
+printing, or linking an object file.  The BFD support for a particular
+object file format will normally store this information in private data
+and handle it using the special hooks.
+
+In some cases there is also implicit information which BFD can not
+represent.  For example, the MIPS processor distinguishes small and
+large symbols, and requires that all small symbols be within 32K of the
+GP register.  This means that the MIPS assembler must be able to mark
+variables as either small or large, and the MIPS linker must know to put
+small symbols within range of the GP register.  Since BFD can not
+represent this information, this means that the assembler and linker
+must have information that is specific to a particular object file
+format which is outside of the BFD library.
+
+This loss of information indicates areas where the BFD paradigm breaks
+down.  It is not actually possible to represent the myriad differences
+among object file formats using a single generic interface, at least not
+in the manner which BFD does it today.
+
+Nevertheless, the BFD library does greatly simplify the task of dealing
+with object files, and particular problems caused by information loss
+can normally be solved using some sort of relatively constrained hook
+into the library.
+
+
+
+ at node BFD guidelines
+ at section BFD programming guidelines
+ at cindex bfd programming guidelines
+ at cindex programming guidelines for bfd
+ at cindex guidelines, bfd programming
+
+There is a lot of poorly written and confusing code in BFD.  New BFD
+code should be written to a higher standard.  Merely because some BFD
+code is written in a particular manner does not mean that you should
+emulate it.
+
+Here are some general BFD programming guidelines:
+
+ at itemize @bullet
+ at item
+Follow the GNU coding standards.
+
+ at item
+Avoid global variables.  We ideally want BFD to be fully reentrant, so
+that it can be used in multiple threads.  All uses of global or static
+variables interfere with that.  Initialized constant variables are OK,
+and they should be explicitly marked with @samp{const}.  Instead of global
+variables, use data attached to a BFD or to a linker hash table.
+
+ at item
+All externally visible functions should have names which start with
+ at samp{bfd_}.  All such functions should be declared in some header file,
+typically @file{bfd.h}.  See, for example, the various declarations near
+the end of @file{bfd-in.h}, which mostly declare functions required by
+specific linker emulations.
+
+ at item
+All functions which need to be visible from one file to another within
+BFD, but should not be visible outside of BFD, should start with
+ at samp{_bfd_}.  Although external names beginning with @samp{_} are
+prohibited by the ANSI standard, in practice this usage will always
+work, and it is required by the GNU coding standards.
+
+ at item
+Always remember that people can compile using @samp{--enable-targets} to
+build several, or all, targets at once.  It must be possible to link
+together the files for all targets.
+
+ at item
+BFD code should compile with few or no warnings using @samp{gcc -Wall}.
+Some warnings are OK, like the absence of certain function declarations
+which may or may not be declared in system header files.  Warnings about
+ambiguous expressions and the like should always be fixed.
+ at end itemize
+
+ at node BFD target vector
+ at section BFD target vector
+ at cindex bfd target vector
+ at cindex target vector in bfd
+
+BFD supports multiple object file formats by using the @dfn{target
+vector}.  This is simply a set of function pointers which implement
+behaviour that is specific to a particular object file format.
+
+In this section I list all of the entries in the target vector and
+describe what they do.
+
+ at menu
+* BFD target vector miscellaneous::	Miscellaneous constants
+* BFD target vector swap::		Swapping functions
+* BFD target vector format::		Format type dependent functions
+* BFD_JUMP_TABLE macros::		BFD_JUMP_TABLE macros
+* BFD target vector generic::		Generic functions
+* BFD target vector copy::		Copy functions
+* BFD target vector core::		Core file support functions
+* BFD target vector archive::		Archive functions
+* BFD target vector symbols::		Symbol table functions
+* BFD target vector relocs::		Relocation support
+* BFD target vector write::		Output functions
+* BFD target vector link::		Linker functions
+* BFD target vector dynamic::		Dynamic linking information functions
+ at end menu
+
+ at node BFD target vector miscellaneous
+ at subsection Miscellaneous constants
+
+The target vector starts with a set of constants.
+
+ at table @samp
+ at item name
+The name of the target vector.  This is an arbitrary string.  This is
+how the target vector is named in command line options for tools which
+use BFD, such as the @samp{--oformat} linker option.
+
+ at item flavour
+A general description of the type of target.  The following flavours are
+currently defined:
+
+ at table @samp
+ at item bfd_target_unknown_flavour
+Undefined or unknown.
+ at item bfd_target_aout_flavour
+a.out.
+ at item bfd_target_coff_flavour
+COFF.
+ at item bfd_target_ecoff_flavour
+ECOFF.
+ at item bfd_target_elf_flavour
+ELF.
+ at item bfd_target_ieee_flavour
+IEEE-695.
+ at item bfd_target_nlm_flavour
+NLM.
+ at item bfd_target_oasys_flavour
+OASYS.
+ at item bfd_target_tekhex_flavour
+Tektronix hex format.
+ at item bfd_target_srec_flavour
+Motorola S-record format.
+ at item bfd_target_ihex_flavour
+Intel hex format.
+ at item bfd_target_som_flavour
+SOM (used on HP/UX).
+ at item bfd_target_verilog_flavour
+Verilog memory hex dump format.
+ at item bfd_target_os9k_flavour
+os9000.
+ at item bfd_target_versados_flavour
+VERSAdos.
+ at item bfd_target_msdos_flavour
+MS-DOS.
+ at item bfd_target_evax_flavour
+openVMS.
+ at item bfd_target_mmo_flavour
+Donald Knuth's MMIXware object format.
+ at end table
+
+ at item byteorder
+The byte order of data in the object file.  One of
+ at samp{BFD_ENDIAN_BIG}, @samp{BFD_ENDIAN_LITTLE}, or
+ at samp{BFD_ENDIAN_UNKNOWN}.  The latter would be used for a format such
+as S-records which do not record the architecture of the data.
+
+ at item header_byteorder
+The byte order of header information in the object file.  Normally the
+same as the @samp{byteorder} field, but there are certain cases where it
+may be different.
+
+ at item object_flags
+Flags which may appear in the @samp{flags} field of a BFD with this
+format.
+
+ at item section_flags
+Flags which may appear in the @samp{flags} field of a section within a
+BFD with this format.
+
+ at item symbol_leading_char
+A character which the C compiler normally puts before a symbol.  For
+example, an a.out compiler will typically generate the symbol
+ at samp{_foo} for a function named @samp{foo} in the C source, in which
+case this field would be @samp{_}.  If there is no such character, this
+field will be @samp{0}.
+
+ at item ar_pad_char
+The padding character to use at the end of an archive name.  Normally
+ at samp{/}.
+
+ at item ar_max_namelen
+The maximum length of a short name in an archive.  Normally @samp{14}.
+
+ at item backend_data
+A pointer to constant backend data.  This is used by backends to store
+whatever additional information they need to distinguish similar target
+vectors which use the same sets of functions.
+ at end table
+
+ at node BFD target vector swap
+ at subsection Swapping functions
+
+Every target vector has function pointers used for swapping information
+in and out of the target representation.  There are two sets of
+functions: one for data information, and one for header information.
+Each set has three sizes: 64-bit, 32-bit, and 16-bit.  Each size has
+three actual functions: put, get unsigned, and get signed.
+
+These 18 functions are used to convert data between the host and target
+representations.
+
+ at node BFD target vector format
+ at subsection Format type dependent functions
+
+Every target vector has three arrays of function pointers which are
+indexed by the BFD format type.  The BFD format types are as follows:
+
+ at table @samp
+ at item bfd_unknown
+Unknown format.  Not used for anything useful.
+ at item bfd_object
+Object file.
+ at item bfd_archive
+Archive file.
+ at item bfd_core
+Core file.
+ at end table
+
+The three arrays of function pointers are as follows:
+
+ at table @samp
+ at item bfd_check_format
+Check whether the BFD is of a particular format (object file, archive
+file, or core file) corresponding to this target vector.  This is called
+by the @samp{bfd_check_format} function when examining an existing BFD.
+If the BFD matches the desired format, this function will initialize any
+format specific information such as the @samp{tdata} field of the BFD.
+This function must be called before any other BFD target vector function
+on a file opened for reading.
+
+ at item bfd_set_format
+Set the format of a BFD which was created for output.  This is called by
+the @samp{bfd_set_format} function after creating the BFD with a
+function such as @samp{bfd_openw}.  This function will initialize format
+specific information required to write out an object file or whatever of
+the given format.  This function must be called before any other BFD
+target vector function on a file opened for writing.
+
+ at item bfd_write_contents
+Write out the contents of the BFD in the given format.  This is called
+by @samp{bfd_close} function for a BFD opened for writing.  This really
+should not be an array selected by format type, as the
+ at samp{bfd_set_format} function provides all the required information.
+In fact, BFD will fail if a different format is used when calling
+through the @samp{bfd_set_format} and the @samp{bfd_write_contents}
+arrays; fortunately, since @samp{bfd_close} gets it right, this is a
+difficult error to make.
+ at end table
+
+ at node BFD_JUMP_TABLE macros
+ at subsection @samp{BFD_JUMP_TABLE} macros
+ at cindex @samp{BFD_JUMP_TABLE}
+
+Most target vectors are defined using @samp{BFD_JUMP_TABLE} macros.
+These macros take a single argument, which is a prefix applied to a set
+of functions.  The macros are then used to initialize the fields in the
+target vector.
+
+For example, the @samp{BFD_JUMP_TABLE_RELOCS} macro defines three
+functions: @samp{_get_reloc_upper_bound}, @samp{_canonicalize_reloc},
+and @samp{_bfd_reloc_type_lookup}.  A reference like
+ at samp{BFD_JUMP_TABLE_RELOCS (foo)} will expand into three functions
+prefixed with @samp{foo}: @samp{foo_get_reloc_upper_bound}, etc.  The
+ at samp{BFD_JUMP_TABLE_RELOCS} macro will be placed such that those three
+functions initialize the appropriate fields in the BFD target vector.
+
+This is done because it turns out that many different target vectors can
+share certain classes of functions.  For example, archives are similar
+on most platforms, so most target vectors can use the same archive
+functions.  Those target vectors all use @samp{BFD_JUMP_TABLE_ARCHIVE}
+with the same argument, calling a set of functions which is defined in
+ at file{archive.c}.
+
+Each of the @samp{BFD_JUMP_TABLE} macros is mentioned below along with
+the description of the function pointers which it defines.  The function
+pointers will be described using the name without the prefix which the
+ at samp{BFD_JUMP_TABLE} macro defines.  This name is normally the same as
+the name of the field in the target vector structure.  Any differences
+will be noted.
+
+ at node BFD target vector generic
+ at subsection Generic functions
+ at cindex @samp{BFD_JUMP_TABLE_GENERIC}
+
+The @samp{BFD_JUMP_TABLE_GENERIC} macro is used for some catch all
+functions which don't easily fit into other categories.
+
+ at table @samp
+ at item _close_and_cleanup
+Free any target specific information associated with the BFD.  This is
+called when any BFD is closed (the @samp{bfd_write_contents} function
+mentioned earlier is only called for a BFD opened for writing).  Most
+targets use @samp{bfd_alloc} to allocate all target specific
+information, and therefore don't have to do anything in this function.
+This function pointer is typically set to
+ at samp{_bfd_generic_close_and_cleanup}, which simply returns true.
+
+ at item _bfd_free_cached_info
+Free any cached information associated with the BFD which can be
+recreated later if necessary.  This is used to reduce the memory
+consumption required by programs using BFD.  This is normally called via
+the @samp{bfd_free_cached_info} macro.  It is used by the default
+archive routines when computing the archive map.  Most targets do not
+do anything special for this entry point, and just set it to
+ at samp{_bfd_generic_free_cached_info}, which simply returns true.
+
+ at item _new_section_hook
+This is called from @samp{bfd_make_section_anyway} whenever a new
+section is created.  Most targets use it to initialize section specific
+information.  This function is called whether or not the section
+corresponds to an actual section in an actual BFD.
+
+ at item _get_section_contents
+Get the contents of a section.  This is called from
+ at samp{bfd_get_section_contents}.  Most targets set this to
+ at samp{_bfd_generic_get_section_contents}, which does a @samp{bfd_seek}
+based on the section's @samp{filepos} field and a @samp{bfd_bread}.  The
+corresponding field in the target vector is named
+ at samp{_bfd_get_section_contents}.
+
+ at item _get_section_contents_in_window
+Set a @samp{bfd_window} to hold the contents of a section.  This is
+called from @samp{bfd_get_section_contents_in_window}.  The
+ at samp{bfd_window} idea never really caught on, and I don't think this is
+ever called.  Pretty much all targets implement this as
+ at samp{bfd_generic_get_section_contents_in_window}, which uses
+ at samp{bfd_get_section_contents} to do the right thing.  The
+corresponding field in the target vector is named
+ at samp{_bfd_get_section_contents_in_window}.
+ at end table
+
+ at node BFD target vector copy
+ at subsection Copy functions
+ at cindex @samp{BFD_JUMP_TABLE_COPY}
+
+The @samp{BFD_JUMP_TABLE_COPY} macro is used for functions which are
+called when copying BFDs, and for a couple of functions which deal with
+internal BFD information.
+
+ at table @samp
+ at item _bfd_copy_private_bfd_data
+This is called when copying a BFD, via @samp{bfd_copy_private_bfd_data}.
+If the input and output BFDs have the same format, this will copy any
+private information over.  This is called after all the section contents
+have been written to the output file.  Only a few targets do anything in
+this function.
+
+ at item _bfd_merge_private_bfd_data
+This is called when linking, via @samp{bfd_merge_private_bfd_data}.  It
+gives the backend linker code a chance to set any special flags in the
+output file based on the contents of the input file.  Only a few targets
+do anything in this function.
+
+ at item _bfd_copy_private_section_data
+This is similar to @samp{_bfd_copy_private_bfd_data}, but it is called
+for each section, via @samp{bfd_copy_private_section_data}.  This
+function is called before any section contents have been written.  Only
+a few targets do anything in this function.
+
+ at item _bfd_copy_private_symbol_data
+This is called via @samp{bfd_copy_private_symbol_data}, but I don't
+think anything actually calls it.  If it were defined, it could be used
+to copy private symbol data from one BFD to another.  However, most BFDs
+store extra symbol information by allocating space which is larger than
+the @samp{asymbol} structure and storing private information in the
+extra space.  Since @samp{objcopy} and other programs copy symbol
+information by copying pointers to @samp{asymbol} structures, the
+private symbol information is automatically copied as well.  Most
+targets do not do anything in this function.
+
+ at item _bfd_set_private_flags
+This is called via @samp{bfd_set_private_flags}.  It is basically a hook
+for the assembler to set magic information.  For example, the PowerPC
+ELF assembler uses it to set flags which appear in the e_flags field of
+the ELF header.  Most targets do not do anything in this function.
+
+ at item _bfd_print_private_bfd_data
+This is called by @samp{objdump} when the @samp{-p} option is used.  It
+is called via @samp{bfd_print_private_data}.  It prints any interesting
+information about the BFD which can not be otherwise represented by BFD
+and thus can not be printed by @samp{objdump}.  Most targets do not do
+anything in this function.
+ at end table
+
+ at node BFD target vector core
+ at subsection Core file support functions
+ at cindex @samp{BFD_JUMP_TABLE_CORE}
+
+The @samp{BFD_JUMP_TABLE_CORE} macro is used for functions which deal
+with core files.  Obviously, these functions only do something
+interesting for targets which have core file support.
+
+ at table @samp
+ at item _core_file_failing_command
+Given a core file, this returns the command which was run to produce the
+core file.
+
+ at item _core_file_failing_signal
+Given a core file, this returns the signal number which produced the
+core file.
+
+ at item _core_file_matches_executable_p
+Given a core file and a BFD for an executable, this returns whether the
+core file was generated by the executable.
+ at end table
+
+ at node BFD target vector archive
+ at subsection Archive functions
+ at cindex @samp{BFD_JUMP_TABLE_ARCHIVE}
+
+The @samp{BFD_JUMP_TABLE_ARCHIVE} macro is used for functions which deal
+with archive files.  Most targets use COFF style archive files
+(including ELF targets), and these use @samp{_bfd_archive_coff} as the
+argument to @samp{BFD_JUMP_TABLE_ARCHIVE}.  Some targets use BSD/a.out
+style archives, and these use @samp{_bfd_archive_bsd}.  (The main
+difference between BSD and COFF archives is the format of the archive
+symbol table).  Targets with no archive support use
+ at samp{_bfd_noarchive}.  Finally, a few targets have unusual archive
+handling.
+
+ at table @samp
+ at item _slurp_armap
+Read in the archive symbol table, storing it in private BFD data.  This
+is normally called from the archive @samp{check_format} routine.  The
+corresponding field in the target vector is named
+ at samp{_bfd_slurp_armap}.
+
+ at item _slurp_extended_name_table
+Read in the extended name table from the archive, if there is one,
+storing it in private BFD data.  This is normally called from the
+archive @samp{check_format} routine.  The corresponding field in the
+target vector is named @samp{_bfd_slurp_extended_name_table}.
+
+ at item construct_extended_name_table
+Build and return an extended name table if one is needed to write out
+the archive.  This also adjusts the archive headers to refer to the
+extended name table appropriately.  This is normally called from the
+archive @samp{write_contents} routine.  The corresponding field in the
+target vector is named @samp{_bfd_construct_extended_name_table}.
+
+ at item _truncate_arname
+This copies a file name into an archive header, truncating it as
+required.  It is normally called from the archive @samp{write_contents}
+routine.  This function is more interesting in targets which do not
+support extended name tables, but I think the GNU @samp{ar} program
+always uses extended name tables anyhow.  The corresponding field in the
+target vector is named @samp{_bfd_truncate_arname}.
+
+ at item _write_armap
+Write out the archive symbol table using calls to @samp{bfd_bwrite}.
+This is normally called from the archive @samp{write_contents} routine.
+The corresponding field in the target vector is named @samp{write_armap}
+(no leading underscore).
+
+ at item _read_ar_hdr
+Read and parse an archive header.  This handles expanding the archive
+header name into the real file name using the extended name table.  This
+is called by routines which read the archive symbol table or the archive
+itself.  The corresponding field in the target vector is named
+ at samp{_bfd_read_ar_hdr_fn}.
+
+ at item _openr_next_archived_file
+Given an archive and a BFD representing a file stored within the
+archive, return a BFD for the next file in the archive.  This is called
+via @samp{bfd_openr_next_archived_file}.  The corresponding field in the
+target vector is named @samp{openr_next_archived_file} (no leading
+underscore).
+
+ at item _get_elt_at_index
+Given an archive and an index, return a BFD for the file in the archive
+corresponding to that entry in the archive symbol table.  This is called
+via @samp{bfd_get_elt_at_index}.  The corresponding field in the target
+vector is named @samp{_bfd_get_elt_at_index}.
+
+ at item _generic_stat_arch_elt
+Do a stat on an element of an archive, returning information read from
+the archive header (modification time, uid, gid, file mode, size).  This
+is called via @samp{bfd_stat_arch_elt}.  The corresponding field in the
+target vector is named @samp{_bfd_stat_arch_elt}.
+
+ at item _update_armap_timestamp
+After the entire contents of an archive have been written out, update
+the timestamp of the archive symbol table to be newer than that of the
+file.  This is required for a.out style archives.  This is normally
+called by the archive @samp{write_contents} routine.  The corresponding
+field in the target vector is named @samp{_bfd_update_armap_timestamp}.
+ at end table
+
+ at node BFD target vector symbols
+ at subsection Symbol table functions
+ at cindex @samp{BFD_JUMP_TABLE_SYMBOLS}
+
+The @samp{BFD_JUMP_TABLE_SYMBOLS} macro is used for functions which deal
+with symbols.
+
+ at table @samp
+ at item _get_symtab_upper_bound
+Return a sensible upper bound on the amount of memory which will be
+required to read the symbol table.  In practice most targets return the
+amount of memory required to hold @samp{asymbol} pointers for all the
+symbols plus a trailing @samp{NULL} entry, and store the actual symbol
+information in BFD private data.  This is called via
+ at samp{bfd_get_symtab_upper_bound}.  The corresponding field in the
+target vector is named @samp{_bfd_get_symtab_upper_bound}.
+
+ at item _canonicalize_symtab
+Read in the symbol table.  This is called via
+ at samp{bfd_canonicalize_symtab}.  The corresponding field in the target
+vector is named @samp{_bfd_canonicalize_symtab}.
+
+ at item _make_empty_symbol
+Create an empty symbol for the BFD.  This is needed because most targets
+store extra information with each symbol by allocating a structure
+larger than an @samp{asymbol} and storing the extra information at the
+end.  This function will allocate the right amount of memory, and return
+what looks like a pointer to an empty @samp{asymbol}.  This is called
+via @samp{bfd_make_empty_symbol}.  The corresponding field in the target
+vector is named @samp{_bfd_make_empty_symbol}.
+
+ at item _print_symbol
+Print information about the symbol.  This is called via
+ at samp{bfd_print_symbol}.  One of the arguments indicates what sort of
+information should be printed:
+
+ at table @samp
+ at item bfd_print_symbol_name
+Just print the symbol name.
+ at item bfd_print_symbol_more
+Print the symbol name and some interesting flags.  I don't think
+anything actually uses this.
+ at item bfd_print_symbol_all
+Print all information about the symbol.  This is used by @samp{objdump}
+when run with the @samp{-t} option.
+ at end table
+The corresponding field in the target vector is named
+ at samp{_bfd_print_symbol}.
+
+ at item _get_symbol_info
+Return a standard set of information about the symbol.  This is called
+via @samp{bfd_symbol_info}.  The corresponding field in the target
+vector is named @samp{_bfd_get_symbol_info}.
+
+ at item _bfd_is_local_label_name
+Return whether the given string would normally represent the name of a
+local label.  This is called via @samp{bfd_is_local_label} and
+ at samp{bfd_is_local_label_name}.  Local labels are normally discarded by
+the assembler.  In the linker, this defines the difference between the
+ at samp{-x} and @samp{-X} options.
+
+ at item _get_lineno
+Return line number information for a symbol.  This is only meaningful
+for a COFF target.  This is called when writing out COFF line numbers.
+
+ at item _find_nearest_line
+Given an address within a section, use the debugging information to find
+the matching file name, function name, and line number, if any.  This is
+called via @samp{bfd_find_nearest_line}.  The corresponding field in the
+target vector is named @samp{_bfd_find_nearest_line}.
+
+ at item _bfd_make_debug_symbol
+Make a debugging symbol.  This is only meaningful for a COFF target,
+where it simply returns a symbol which will be placed in the
+ at samp{N_DEBUG} section when it is written out.  This is called via
+ at samp{bfd_make_debug_symbol}.
+
+ at item _read_minisymbols
+Minisymbols are used to reduce the memory requirements of programs like
+ at samp{nm}.  A minisymbol is a cookie pointing to internal symbol
+information which the caller can use to extract complete symbol
+information.  This permits BFD to not convert all the symbols into
+generic form, but to instead convert them one at a time.  This is called
+via @samp{bfd_read_minisymbols}.  Most targets do not implement this,
+and just use generic support which is based on using standard
+ at samp{asymbol} structures.
+
+ at item _minisymbol_to_symbol
+Convert a minisymbol to a standard @samp{asymbol}.  This is called via
+ at samp{bfd_minisymbol_to_symbol}.
+ at end table
+
+ at node BFD target vector relocs
+ at subsection Relocation support
+ at cindex @samp{BFD_JUMP_TABLE_RELOCS}
+
+The @samp{BFD_JUMP_TABLE_RELOCS} macro is used for functions which deal
+with relocations.
+
+ at table @samp
+ at item _get_reloc_upper_bound
+Return a sensible upper bound on the amount of memory which will be
+required to read the relocations for a section.  In practice most
+targets return the amount of memory required to hold @samp{arelent}
+pointers for all the relocations plus a trailing @samp{NULL} entry, and
+store the actual relocation information in BFD private data.  This is
+called via @samp{bfd_get_reloc_upper_bound}.
+
+ at item _canonicalize_reloc
+Return the relocation information for a section.  This is called via
+ at samp{bfd_canonicalize_reloc}.  The corresponding field in the target
+vector is named @samp{_bfd_canonicalize_reloc}.
+
+ at item _bfd_reloc_type_lookup
+Given a relocation code, return the corresponding howto structure
+(@pxref{BFD relocation codes}).  This is called via
+ at samp{bfd_reloc_type_lookup}.  The corresponding field in the target
+vector is named @samp{reloc_type_lookup}.
+ at end table
+
+ at node BFD target vector write
+ at subsection Output functions
+ at cindex @samp{BFD_JUMP_TABLE_WRITE}
+
+The @samp{BFD_JUMP_TABLE_WRITE} macro is used for functions which deal
+with writing out a BFD.
+
+ at table @samp
+ at item _set_arch_mach
+Set the architecture and machine number for a BFD.  This is called via
+ at samp{bfd_set_arch_mach}.  Most targets implement this by calling
+ at samp{bfd_default_set_arch_mach}.  The corresponding field in the target
+vector is named @samp{_bfd_set_arch_mach}.
+
+ at item _set_section_contents
+Write out the contents of a section.  This is called via
+ at samp{bfd_set_section_contents}.  The corresponding field in the target
+vector is named @samp{_bfd_set_section_contents}.
+ at end table
+
+ at node BFD target vector link
+ at subsection Linker functions
+ at cindex @samp{BFD_JUMP_TABLE_LINK}
+
+The @samp{BFD_JUMP_TABLE_LINK} macro is used for functions called by the
+linker.
+
+ at table @samp
+ at item _sizeof_headers
+Return the size of the header information required for a BFD.  This is
+used to implement the @samp{SIZEOF_HEADERS} linker script function.  It
+is normally used to align the first section at an efficient position on
+the page.  This is called via @samp{bfd_sizeof_headers}.  The
+corresponding field in the target vector is named
+ at samp{_bfd_sizeof_headers}.
+
+ at item _bfd_get_relocated_section_contents
+Read the contents of a section and apply the relocation information.
+This handles both a final link and a relocatable link; in the latter
+case, it adjust the relocation information as well.  This is called via
+ at samp{bfd_get_relocated_section_contents}.  Most targets implement it by
+calling @samp{bfd_generic_get_relocated_section_contents}.
+
+ at item _bfd_relax_section
+Try to use relaxation to shrink the size of a section.  This is called
+by the linker when the @samp{-relax} option is used.  This is called via
+ at samp{bfd_relax_section}.  Most targets do not support any sort of
+relaxation.
+
+ at item _bfd_link_hash_table_create
+Create the symbol hash table to use for the linker.  This linker hook
+permits the backend to control the size and information of the elements
+in the linker symbol hash table.  This is called via
+ at samp{bfd_link_hash_table_create}.
+
+ at item _bfd_link_add_symbols
+Given an object file or an archive, add all symbols into the linker
+symbol hash table.  Use callbacks to the linker to include archive
+elements in the link.  This is called via @samp{bfd_link_add_symbols}.
+
+ at item _bfd_final_link
+Finish the linking process.  The linker calls this hook after all of the
+input files have been read, when it is ready to finish the link and
+generate the output file.  This is called via @samp{bfd_final_link}.
+
+ at item _bfd_link_split_section
+I don't know what this is for.  Nothing seems to call it.  The only
+non-trivial definition is in @file{som.c}.
+ at end table
+
+ at node BFD target vector dynamic
+ at subsection Dynamic linking information functions
+ at cindex @samp{BFD_JUMP_TABLE_DYNAMIC}
+
+The @samp{BFD_JUMP_TABLE_DYNAMIC} macro is used for functions which read
+dynamic linking information.
+
+ at table @samp
+ at item _get_dynamic_symtab_upper_bound
+Return a sensible upper bound on the amount of memory which will be
+required to read the dynamic symbol table.  In practice most targets
+return the amount of memory required to hold @samp{asymbol} pointers for
+all the symbols plus a trailing @samp{NULL} entry, and store the actual
+symbol information in BFD private data.  This is called via
+ at samp{bfd_get_dynamic_symtab_upper_bound}.  The corresponding field in
+the target vector is named @samp{_bfd_get_dynamic_symtab_upper_bound}.
+
+ at item _canonicalize_dynamic_symtab
+Read the dynamic symbol table.  This is called via
+ at samp{bfd_canonicalize_dynamic_symtab}.  The corresponding field in the
+target vector is named @samp{_bfd_canonicalize_dynamic_symtab}.
+
+ at item _get_dynamic_reloc_upper_bound
+Return a sensible upper bound on the amount of memory which will be
+required to read the dynamic relocations.  In practice most targets
+return the amount of memory required to hold @samp{arelent} pointers for
+all the relocations plus a trailing @samp{NULL} entry, and store the
+actual relocation information in BFD private data.  This is called via
+ at samp{bfd_get_dynamic_reloc_upper_bound}.  The corresponding field in
+the target vector is named @samp{_bfd_get_dynamic_reloc_upper_bound}.
+
+ at item _canonicalize_dynamic_reloc
+Read the dynamic relocations.  This is called via
+ at samp{bfd_canonicalize_dynamic_reloc}.  The corresponding field in the
+target vector is named @samp{_bfd_canonicalize_dynamic_reloc}.
+ at end table
+
+ at node BFD generated files
+ at section BFD generated files
+ at cindex generated files in bfd
+ at cindex bfd generated files
+
+BFD contains several automatically generated files.  This section
+describes them.  Some files are created at configure time, when you
+configure BFD.  Some files are created at make time, when you build
+BFD.  Some files are automatically rebuilt at make time, but only if
+you configure with the @samp{--enable-maintainer-mode} option.  Some
+files live in the object directory---the directory from which you run
+configure---and some live in the source directory.  All files that live
+in the source directory are checked into the CVS repository.
+
+ at table @file
+ at item bfd.h
+ at cindex @file{bfd.h}
+ at cindex @file{bfd-in3.h}
+Lives in the object directory.  Created at make time from
+ at file{bfd-in2.h} via @file{bfd-in3.h}.  @file{bfd-in3.h} is created at
+configure time from @file{bfd-in2.h}.  There are automatic dependencies
+to rebuild @file{bfd-in3.h} and hence @file{bfd.h} if @file{bfd-in2.h}
+changes, so you can normally ignore @file{bfd-in3.h}, and just think
+about @file{bfd-in2.h} and @file{bfd.h}.
+
+ at file{bfd.h} is built by replacing a few strings in @file{bfd-in2.h}.
+To see them, search for @samp{@@} in @file{bfd-in2.h}.  They mainly
+control whether BFD is built for a 32 bit target or a 64 bit target.
+
+ at item bfd-in2.h
+ at cindex @file{bfd-in2.h}
+Lives in the source directory.  Created from @file{bfd-in.h} and several
+other BFD source files.  If you configure with the
+ at samp{--enable-maintainer-mode} option, @file{bfd-in2.h} is rebuilt
+automatically when a source file changes.
+
+ at item elf32-target.h
+ at itemx elf64-target.h
+ at cindex @file{elf32-target.h}
+ at cindex @file{elf64-target.h}
+Live in the object directory.  Created from @file{elfxx-target.h}.
+These files are versions of @file{elfxx-target.h} customized for either
+a 32 bit ELF target or a 64 bit ELF target.
+
+ at item libbfd.h
+ at cindex @file{libbfd.h}
+Lives in the source directory.  Created from @file{libbfd-in.h} and
+several other BFD source files.  If you configure with the
+ at samp{--enable-maintainer-mode} option, @file{libbfd.h} is rebuilt
+automatically when a source file changes.
+
+ at item libcoff.h
+ at cindex @file{libcoff.h}
+Lives in the source directory.  Created from @file{libcoff-in.h} and
+ at file{coffcode.h}.  If you configure with the
+ at samp{--enable-maintainer-mode} option, @file{libcoff.h} is rebuilt
+automatically when a source file changes.
+
+ at item targmatch.h
+ at cindex @file{targmatch.h}
+Lives in the object directory.  Created at make time from
+ at file{config.bfd}.  This file is used to map configuration triplets into
+BFD target vector variable names at run time.
+ at end table
+
+ at node BFD multiple compilations
+ at section Files compiled multiple times in BFD
+Several files in BFD are compiled multiple times.  By this I mean that
+there are header files which contain function definitions.  These header
+files are included by other files, and thus the functions are compiled
+once per file which includes them.
+
+Preprocessor macros are used to control the compilation, so that each
+time the files are compiled the resulting functions are slightly
+different.  Naturally, if they weren't different, there would be no
+reason to compile them multiple times.
+
+This is a not a particularly good programming technique, and future BFD
+work should avoid it.
+
+ at itemize @bullet
+ at item
+Since this technique is rarely used, even experienced C programmers find
+it confusing.
+
+ at item
+It is difficult to debug programs which use BFD, since there is no way
+to describe which version of a particular function you are looking at.
+
+ at item
+Programs which use BFD wind up incorporating two or more slightly
+different versions of the same function, which wastes space in the
+executable.
+
+ at item
+This technique is never required nor is it especially efficient.  It is
+always possible to use statically initialized structures holding
+function pointers and magic constants instead.
+ at end itemize
+
+The following is a list of the files which are compiled multiple times.
+
+ at table @file
+ at item aout-target.h
+ at cindex @file{aout-target.h}
+Describes a few functions and the target vector for a.out targets.  This
+is used by individual a.out targets with different definitions of
+ at samp{N_TXTADDR} and similar a.out macros.
+
+ at item aoutf1.h
+ at cindex @file{aoutf1.h}
+Implements standard SunOS a.out files.  In principle it supports 64 bit
+a.out targets based on the preprocessor macro @samp{ARCH_SIZE}, but
+since all known a.out targets are 32 bits, this code may or may not
+work.  This file is only included by a few other files, and it is
+difficult to justify its existence.
+
+ at item aoutx.h
+ at cindex @file{aoutx.h}
+Implements basic a.out support routines.  This file can be compiled for
+either 32 or 64 bit support.  Since all known a.out targets are 32 bits,
+the 64 bit support may or may not work.  I believe the original
+intention was that this file would only be included by @samp{aout32.c}
+and @samp{aout64.c}, and that other a.out targets would simply refer to
+the functions it defined.  Unfortunately, some other a.out targets
+started including it directly, leading to a somewhat confused state of
+affairs.
+
+ at item coffcode.h
+ at cindex @file{coffcode.h}
+Implements basic COFF support routines.  This file is included by every
+COFF target.  It implements code which handles COFF magic numbers as
+well as various hook functions called by the generic COFF functions in
+ at file{coffgen.c}.  This file is controlled by a number of different
+macros, and more are added regularly.
+
+ at item coffswap.h
+ at cindex @file{coffswap.h}
+Implements COFF swapping routines.  This file is included by
+ at file{coffcode.h}, and thus by every COFF target.  It implements the
+routines which swap COFF structures between internal and external
+format.  The main control for this file is the external structure
+definitions in the files in the @file{include/coff} directory.  A COFF
+target file will include one of those files before including
+ at file{coffcode.h} and thus @file{coffswap.h}.  There are a few other
+macros which affect @file{coffswap.h} as well, mostly describing whether
+certain fields are present in the external structures.
+
+ at item ecoffswap.h
+ at cindex @file{ecoffswap.h}
+Implements ECOFF swapping routines.  This is like @file{coffswap.h}, but
+for ECOFF.  It is included by the ECOFF target files (of which there are
+only two).  The control is the preprocessor macro @samp{ECOFF_32} or
+ at samp{ECOFF_64}.
+
+ at item elfcode.h
+ at cindex @file{elfcode.h}
+Implements ELF functions that use external structure definitions.  This
+file is included by two other files: @file{elf32.c} and @file{elf64.c}.
+It is controlled by the @samp{ARCH_SIZE} macro which is defined to be
+ at samp{32} or @samp{64} before including it.  The @samp{NAME} macro is
+used internally to give the functions different names for the two target
+sizes.
+
+ at item elfcore.h
+ at cindex @file{elfcore.h}
+Like @file{elfcode.h}, but for functions that are specific to ELF core
+files.  This is included only by @file{elfcode.h}.
+
+ at item elfxx-target.h
+ at cindex @file{elfxx-target.h}
+This file is the source for the generated files @file{elf32-target.h}
+and @file{elf64-target.h}, one of which is included by every ELF target.
+It defines the ELF target vector.
+
+ at item freebsd.h
+ at cindex @file{freebsd.h}
+Presumably intended to be included by all FreeBSD targets, but in fact
+there is only one such target, @samp{i386-freebsd}.  This defines a
+function used to set the right magic number for FreeBSD, as well as
+various macros, and includes @file{aout-target.h}.
+
+ at item netbsd.h
+ at cindex @file{netbsd.h}
+Like @file{freebsd.h}, except that there are several files which include
+it.
+
+ at item nlm-target.h
+ at cindex @file{nlm-target.h}
+Defines the target vector for a standard NLM target.
+
+ at item nlmcode.h
+ at cindex @file{nlmcode.h}
+Like @file{elfcode.h}, but for NLM targets.  This is only included by
+ at file{nlm32.c} and @file{nlm64.c}, both of which define the macro
+ at samp{ARCH_SIZE} to an appropriate value.  There are no 64 bit NLM
+targets anyhow, so this is sort of useless.
+
+ at item nlmswap.h
+ at cindex @file{nlmswap.h}
+Like @file{coffswap.h}, but for NLM targets.  This is included by each
+NLM target, but I think it winds up compiling to the exact same code for
+every target, and as such is fairly useless.
+
+ at item peicode.h
+ at cindex @file{peicode.h}
+Provides swapping routines and other hooks for PE targets.
+ at file{coffcode.h} will include this rather than @file{coffswap.h} for a
+PE target.  This defines PE specific versions of the COFF swapping
+routines, and also defines some macros which control @file{coffcode.h}
+itself.
+ at end table
+
+ at node BFD relocation handling
+ at section BFD relocation handling
+ at cindex bfd relocation handling
+ at cindex relocations in bfd
+
+The handling of relocations is one of the more confusing aspects of BFD.
+Relocation handling has been implemented in various different ways, all
+somewhat incompatible, none perfect.
+
+ at menu
+* BFD relocation concepts::	BFD relocation concepts
+* BFD relocation functions::	BFD relocation functions
+* BFD relocation codes::	BFD relocation codes
+* BFD relocation future::	BFD relocation future
+ at end menu
+
+ at node BFD relocation concepts
+ at subsection BFD relocation concepts
+
+A relocation is an action which the linker must take when linking.  It
+describes a change to the contents of a section.  The change is normally
+based on the final value of one or more symbols.  Relocations are
+created by the assembler when it creates an object file.
+
+Most relocations are simple.  A typical simple relocation is to set 32
+bits at a given offset in a section to the value of a symbol.  This type
+of relocation would be generated for code like @code{int *p = &i;} where
+ at samp{p} and @samp{i} are global variables.  A relocation for the symbol
+ at samp{i} would be generated such that the linker would initialize the
+area of memory which holds the value of @samp{p} to the value of the
+symbol @samp{i}.
+
+Slightly more complex relocations may include an addend, which is a
+constant to add to the symbol value before using it.  In some cases a
+relocation will require adding the symbol value to the existing contents
+of the section in the object file.  In others the relocation will simply
+replace the contents of the section with the symbol value.  Some
+relocations are PC relative, so that the value to be stored in the
+section is the difference between the value of a symbol and the final
+address of the section contents.
+
+In general, relocations can be arbitrarily complex.  For example,
+relocations used in dynamic linking systems often require the linker to
+allocate space in a different section and use the offset within that
+section as the value to store.  In the IEEE object file format,
+relocations may involve arbitrary expressions.
+
+When doing a relocatable link, the linker may or may not have to do
+anything with a relocation, depending upon the definition of the
+relocation.  Simple relocations generally do not require any special
+action.
+
+ at node BFD relocation functions
+ at subsection BFD relocation functions
+
+In BFD, each section has an array of @samp{arelent} structures.  Each
+structure has a pointer to a symbol, an address within the section, an
+addend, and a pointer to a @samp{reloc_howto_struct} structure.  The
+howto structure has a bunch of fields describing the reloc, including a
+type field.  The type field is specific to the object file format
+backend; none of the generic code in BFD examines it.
+
+Originally, the function @samp{bfd_perform_relocation} was supposed to
+handle all relocations.  In theory, many relocations would be simple
+enough to be described by the fields in the howto structure.  For those
+that weren't, the howto structure included a @samp{special_function}
+field to use as an escape.
+
+While this seems plausible, a look at @samp{bfd_perform_relocation}
+shows that it failed.  The function has odd special cases.  Some of the
+fields in the howto structure, such as @samp{pcrel_offset}, were not
+adequately documented.
+
+The linker uses @samp{bfd_perform_relocation} to do all relocations when
+the input and output file have different formats (e.g., when generating
+S-records).  The generic linker code, which is used by all targets which
+do not define their own special purpose linker, uses
+ at samp{bfd_get_relocated_section_contents}, which for most targets turns
+into a call to @samp{bfd_generic_get_relocated_section_contents}, which
+calls @samp{bfd_perform_relocation}.  So @samp{bfd_perform_relocation}
+is still widely used, which makes it difficult to change, since it is
+difficult to test all possible cases.
+
+The assembler used @samp{bfd_perform_relocation} for a while.  This
+turned out to be the wrong thing to do, since
+ at samp{bfd_perform_relocation} was written to handle relocations on an
+existing object file, while the assembler needed to create relocations
+in a new object file.  The assembler was changed to use the new function
+ at samp{bfd_install_relocation} instead, and @samp{bfd_install_relocation}
+was created as a copy of @samp{bfd_perform_relocation}.
+
+Unfortunately, the work did not progress any farther, so
+ at samp{bfd_install_relocation} remains a simple copy of
+ at samp{bfd_perform_relocation}, with all the odd special cases and
+confusing code.  This again is difficult to change, because again any
+change can affect any assembler target, and so is difficult to test.
+
+The new linker, when using the same object file format for all input
+files and the output file, does not convert relocations into
+ at samp{arelent} structures, so it can not use
+ at samp{bfd_perform_relocation} at all.  Instead, users of the new linker
+are expected to write a @samp{relocate_section} function which will
+handle relocations in a target specific fashion.
+
+There are two helper functions for target specific relocation:
+ at samp{_bfd_final_link_relocate} and @samp{_bfd_relocate_contents}.
+These functions use a howto structure, but they @emph{do not} use the
+ at samp{special_function} field.  Since the functions are normally called
+from target specific code, the @samp{special_function} field adds
+little; any relocations which require special handling can be handled
+without calling those functions.
+
+So, if you want to add a new target, or add a new relocation to an
+existing target, you need to do the following:
+
+ at itemize @bullet
+ at item
+Make sure you clearly understand what the contents of the section should
+look like after assembly, after a relocatable link, and after a final
+link.  Make sure you clearly understand the operations the linker must
+perform during a relocatable link and during a final link.
+
+ at item
+Write a howto structure for the relocation.  The howto structure is
+flexible enough to represent any relocation which should be handled by
+setting a contiguous bitfield in the destination to the value of a
+symbol, possibly with an addend, possibly adding the symbol value to the
+value already present in the destination.
+
+ at item
+Change the assembler to generate your relocation.  The assembler will
+call @samp{bfd_install_relocation}, so your howto structure has to be
+able to handle that.  You may need to set the @samp{special_function}
+field to handle assembly correctly.  Be careful to ensure that any code
+you write to handle the assembler will also work correctly when doing a
+relocatable link.  For example, see @samp{bfd_elf_generic_reloc}.
+
+ at item
+Test the assembler.  Consider the cases of relocation against an
+undefined symbol, a common symbol, a symbol defined in the object file
+in the same section, and a symbol defined in the object file in a
+different section.  These cases may not all be applicable for your
+reloc.
+
+ at item
+If your target uses the new linker, which is recommended, add any
+required handling to the target specific relocation function.  In simple
+cases this will just involve a call to @samp{_bfd_final_link_relocate}
+or @samp{_bfd_relocate_contents}, depending upon the definition of the
+relocation and whether the link is relocatable or not.
+
+ at item
+Test the linker.  Test the case of a final link.  If the relocation can
+overflow, use a linker script to force an overflow and make sure the
+error is reported correctly.  Test a relocatable link, whether the
+symbol is defined or undefined in the relocatable output.  For both the
+final and relocatable link, test the case when the symbol is a common
+symbol, when the symbol looked like a common symbol but became a defined
+symbol, when the symbol is defined in a different object file, and when
+the symbol is defined in the same object file.
+
+ at item
+In order for linking to another object file format, such as S-records,
+to work correctly, @samp{bfd_perform_relocation} has to do the right
+thing for the relocation.  You may need to set the
+ at samp{special_function} field to handle this correctly.  Test this by
+doing a link in which the output object file format is S-records.
+
+ at item
+Using the linker to generate relocatable output in a different object
+file format is impossible in the general case, so you generally don't
+have to worry about that.  The GNU linker makes sure to stop that from
+happening when an input file in a different format has relocations.
+
+Linking input files of different object file formats together is quite
+unusual, but if you're really dedicated you may want to consider testing
+this case, both when the output object file format is the same as your
+format, and when it is different.
+ at end itemize
+
+ at node BFD relocation codes
+ at subsection BFD relocation codes
+
+BFD has another way of describing relocations besides the howto
+structures described above: the enum @samp{bfd_reloc_code_real_type}.
+
+Every known relocation type can be described as a value in this
+enumeration.  The enumeration contains many target specific relocations,
+but where two or more targets have the same relocation, a single code is
+used.  For example, the single value @samp{BFD_RELOC_32} is used for all
+simple 32 bit relocation types.
+
+The main purpose of this relocation code is to give the assembler some
+mechanism to create @samp{arelent} structures.  In order for the
+assembler to create an @samp{arelent} structure, it has to be able to
+obtain a howto structure.  The function @samp{bfd_reloc_type_lookup},
+which simply calls the target vector entry point
+ at samp{reloc_type_lookup}, takes a relocation code and returns a howto
+structure.
+
+The function @samp{bfd_get_reloc_code_name} returns the name of a
+relocation code.  This is mainly used in error messages.
+
+Using both howto structures and relocation codes can be somewhat
+confusing.  There are many processor specific relocation codes.
+However, the relocation is only fully defined by the howto structure.
+The same relocation code will map to different howto structures in
+different object file formats.  For example, the addend handling may be
+different.
+
+Most of the relocation codes are not really general.  The assembler can
+not use them without already understanding what sorts of relocations can
+be used for a particular target.  It might be possible to replace the
+relocation codes with something simpler.
+
+ at node BFD relocation future
+ at subsection BFD relocation future
+
+Clearly the current BFD relocation support is in bad shape.  A
+wholescale rewrite would be very difficult, because it would require
+thorough testing of every BFD target.  So some sort of incremental
+change is required.
+
+My vague thoughts on this would involve defining a new, clearly defined,
+howto structure.  Some mechanism would be used to determine which type
+of howto structure was being used by a particular format.
+
+The new howto structure would clearly define the relocation behaviour in
+the case of an assembly, a relocatable link, and a final link.  At
+least one special function would be defined as an escape, and it might
+make sense to define more.
+
+One or more generic functions similar to @samp{bfd_perform_relocation}
+would be written to handle the new howto structure.
+
+This should make it possible to write a generic version of the relocate
+section functions used by the new linker.  The target specific code
+would provide some mechanism (a function pointer or an initial
+conversion) to convert target specific relocations into howto
+structures.
+
+Ideally it would be possible to use this generic relocate section
+function for the generic linker as well.  That is, it would replace the
+ at samp{bfd_generic_get_relocated_section_contents} function which is
+currently normally used.
+
+For the special case of ELF dynamic linking, more consideration needs to
+be given to writing ELF specific but ELF target generic code to handle
+special relocation types such as GOT and PLT.
+
+ at node BFD ELF support
+ at section BFD ELF support
+ at cindex elf support in bfd
+ at cindex bfd elf support
+
+The ELF object file format is defined in two parts: a generic ABI and a
+processor specific supplement.  The ELF support in BFD is split in a
+similar fashion.  The processor specific support is largely kept within
+a single file.  The generic support is provided by several other files.
+The processor specific support provides a set of function pointers and
+constants used by the generic support.
+
+ at menu
+* BFD ELF sections and segments::	ELF sections and segments
+* BFD ELF generic support::		BFD ELF generic support
+* BFD ELF processor specific support::	BFD ELF processor specific support
+* BFD ELF core files::			BFD ELF core files
+* BFD ELF future::			BFD ELF future
+ at end menu
+
+ at node BFD ELF sections and segments
+ at subsection ELF sections and segments
+
+The ELF ABI permits a file to have either sections or segments or both.
+Relocatable object files conventionally have only sections.
+Executables conventionally have both.  Core files conventionally have
+only program segments.
+
+ELF sections are similar to sections in other object file formats: they
+have a name, a VMA, file contents, flags, and other miscellaneous
+information.  ELF relocations are stored in sections of a particular
+type; BFD automatically converts these sections into internal relocation
+information.
+
+ELF program segments are intended for fast interpretation by a system
+loader.  They have a type, a VMA, an LMA, file contents, and a couple of
+other fields.  When an ELF executable is run on a Unix system, the
+system loader will examine the program segments to decide how to load
+it.  The loader will ignore the section information.  Loadable program
+segments (type @samp{PT_LOAD}) are directly loaded into memory.  Other
+program segments are interpreted by the loader, and generally provide
+dynamic linking information.
+
+When an ELF file has both program segments and sections, an ELF program
+segment may encompass one or more ELF sections, in the sense that the
+portion of the file which corresponds to the program segment may include
+the portions of the file corresponding to one or more sections.  When
+there is more than one section in a loadable program segment, the
+relative positions of the section contents in the file must correspond
+to the relative positions they should hold when the program segment is
+loaded.  This requirement should be obvious if you consider that the
+system loader will load an entire program segment at a time.
+
+On a system which supports dynamic paging, such as any native Unix
+system, the contents of a loadable program segment must be at the same
+offset in the file as in memory, modulo the memory page size used on the
+system.  This is because the system loader will map the file into memory
+starting at the start of a page.  The system loader can easily remap
+entire pages to the correct load address.  However, if the contents of
+the file were not correctly aligned within the page, the system loader
+would have to shift the contents around within the page, which is too
+expensive.  For example, if the LMA of a loadable program segment is
+ at samp{0x40080} and the page size is @samp{0x1000}, then the position of
+the segment contents within the file must equal @samp{0x80} modulo
+ at samp{0x1000}.
+
+BFD has only a single set of sections.  It does not provide any generic
+way to examine both sections and segments.  When BFD is used to open an
+object file or executable, the BFD sections will represent ELF sections.
+When BFD is used to open a core file, the BFD sections will represent
+ELF program segments.
+
+When BFD is used to examine an object file or executable, any program
+segments will be read to set the LMA of the sections.  This is because
+ELF sections only have a VMA, while ELF program segments have both a VMA
+and an LMA.  Any program segments will be copied by the
+ at samp{copy_private} entry points.  They will be printed by the
+ at samp{print_private} entry point.  Otherwise, the program segments are
+ignored.  In particular, programs which use BFD currently have no direct
+access to the program segments.
+
+When BFD is used to create an executable, the program segments will be
+created automatically based on the section information.  This is done in
+the function @samp{assign_file_positions_for_segments} in @file{elf.c}.
+This function has been tweaked many times, and probably still has
+problems that arise in particular cases.
+
+There is a hook which may be used to explicitly define the program
+segments when creating an executable: the @samp{bfd_record_phdr}
+function in @file{bfd.c}.  If this function is called, BFD will not
+create program segments itself, but will only create the program
+segments specified by the caller.  The linker uses this function to
+implement the @samp{PHDRS} linker script command.
+
+ at node BFD ELF generic support
+ at subsection BFD ELF generic support
+
+In general, functions which do not read external data from the ELF file
+are found in @file{elf.c}.  They operate on the internal forms of the
+ELF structures, which are defined in @file{include/elf/internal.h}.  The
+internal structures are defined in terms of @samp{bfd_vma}, and so may
+be used for both 32 bit and 64 bit ELF targets.
+
+The file @file{elfcode.h} contains functions which operate on the
+external data.  @file{elfcode.h} is compiled twice, once via
+ at file{elf32.c} with @samp{ARCH_SIZE} defined as @samp{32}, and once via
+ at file{elf64.c} with @samp{ARCH_SIZE} defined as @samp{64}.
+ at file{elfcode.h} includes functions to swap the ELF structures in and
+out of external form, as well as a few more complex functions.
+
+Linker support is found in @file{elflink.c}.  The
+linker support is only used if the processor specific file defines
+ at samp{elf_backend_relocate_section}, which is required to relocate the
+section contents.  If that macro is not defined, the generic linker code
+is used, and relocations are handled via @samp{bfd_perform_relocation}.
+
+The core file support is in @file{elfcore.h}, which is compiled twice,
+for both 32 and 64 bit support.  The more interesting cases of core file
+support only work on a native system which has the @file{sys/procfs.h}
+header file.  Without that file, the core file support does little more
+than read the ELF program segments as BFD sections.
+
+The BFD internal header file @file{elf-bfd.h} is used for communication
+among these files and the processor specific files.
+
+The default entries for the BFD ELF target vector are found mainly in
+ at file{elf.c}.  Some functions are found in @file{elfcode.h}.
+
+The processor specific files may override particular entries in the
+target vector, but most do not, with one exception: the
+ at samp{bfd_reloc_type_lookup} entry point is always processor specific.
+
+ at node BFD ELF processor specific support
+ at subsection BFD ELF processor specific support
+
+By convention, the processor specific support for a particular processor
+will be found in @file{elf at var{nn}- at var{cpu}.c}, where @var{nn} is
+either 32 or 64, and @var{cpu} is the name of the processor.
+
+ at menu
+* BFD ELF processor required::	Required processor specific support
+* BFD ELF processor linker::	Processor specific linker support
+* BFD ELF processor other::	Other processor specific support options
+ at end menu
+
+ at node BFD ELF processor required
+ at subsubsection Required processor specific support
+
+When writing a @file{elf at var{nn}- at var{cpu}.c} file, you must do the
+following:
+
+ at itemize @bullet
+ at item
+Define either @samp{TARGET_BIG_SYM} or @samp{TARGET_LITTLE_SYM}, or
+both, to a unique C name to use for the target vector.  This name should
+appear in the list of target vectors in @file{targets.c}, and will also
+have to appear in @file{config.bfd} and @file{configure.in}.  Define
+ at samp{TARGET_BIG_SYM} for a big-endian processor,
+ at samp{TARGET_LITTLE_SYM} for a little-endian processor, and define both
+for a bi-endian processor.
+ at item
+Define either @samp{TARGET_BIG_NAME} or @samp{TARGET_LITTLE_NAME}, or
+both, to a string used as the name of the target vector.  This is the
+name which a user of the BFD tool would use to specify the object file
+format.  It would normally appear in a linker emulation parameters
+file.
+ at item
+Define @samp{ELF_ARCH} to the BFD architecture (an element of the
+ at samp{bfd_architecture} enum, typically @samp{bfd_arch_ at var{cpu}}).
+ at item
+Define @samp{ELF_MACHINE_CODE} to the magic number which should appear
+in the @samp{e_machine} field of the ELF header.  As of this writing,
+these magic numbers are assigned by Caldera; if you want to get a magic
+number for a particular processor, try sending a note to
+ at email{registry@@caldera.com}.  In the BFD sources, the magic numbers are
+found in @file{include/elf/common.h}; they have names beginning with
+ at samp{EM_}.
+ at item
+Define @samp{ELF_MAXPAGESIZE} to the maximum size of a virtual page in
+memory.  This can normally be found at the start of chapter 5 in the
+processor specific supplement.  For a processor which will only be used
+in an embedded system, or which has no memory management hardware, this
+can simply be @samp{1}.
+ at item
+If the format should use @samp{Rel} rather than @samp{Rela} relocations,
+define @samp{USE_REL}.  This is normally defined in chapter 4 of the
+processor specific supplement.
+
+In the absence of a supplement, it's easier to work with @samp{Rela}
+relocations.  @samp{Rela} relocations will require more space in object
+files (but not in executables, except when using dynamic linking).
+However, this is outweighed by the simplicity of addend handling when
+using @samp{Rela} relocations.  With @samp{Rel} relocations, the addend
+must be stored in the section contents, which makes relocatable links
+more complex.
+
+For example, consider C code like @code{i = a[1000];} where @samp{a} is
+a global array.  The instructions which load the value of @samp{a[1000]}
+will most likely use a relocation which refers to the symbol
+representing @samp{a}, with an addend that gives the offset from the
+start of @samp{a} to element @samp{1000}.  When using @samp{Rel}
+relocations, that addend must be stored in the instructions themselves.
+If you are adding support for a RISC chip which uses two or more
+instructions to load an address, then the addend may not fit in a single
+instruction, and will have to be somehow split among the instructions.
+This makes linking awkward, particularly when doing a relocatable link
+in which the addend may have to be updated.  It can be done---the MIPS
+ELF support does it---but it should be avoided when possible.
+
+It is possible, though somewhat awkward, to support both @samp{Rel} and
+ at samp{Rela} relocations for a single target; @file{elf64-mips.c} does it
+by overriding the relocation reading and writing routines.
+ at item
+Define howto structures for all the relocation types.
+ at item
+Define a @samp{bfd_reloc_type_lookup} routine.  This must be named
+ at samp{bfd_elf at var{nn}_bfd_reloc_type_lookup}, and may be either a
+function or a macro.  It must translate a BFD relocation code into a
+howto structure.  This is normally a table lookup or a simple switch.
+ at item
+If using @samp{Rel} relocations, define @samp{elf_info_to_howto_rel}.
+If using @samp{Rela} relocations, define @samp{elf_info_to_howto}.
+Either way, this is a macro defined as the name of a function which
+takes an @samp{arelent} and a @samp{Rel} or @samp{Rela} structure, and
+sets the @samp{howto} field of the @samp{arelent} based on the
+ at samp{Rel} or @samp{Rela} structure.  This is normally uses
+ at samp{ELF at var{nn}_R_TYPE} to get the ELF relocation type and uses it as
+an index into a table of howto structures.
+ at end itemize
+
+You must also add the magic number for this processor to the
+ at samp{prep_headers} function in @file{elf.c}.
+
+You must also create a header file in the @file{include/elf} directory
+called @file{@var{cpu}.h}.  This file should define any target specific 
+information which may be needed outside of the BFD code.  In particular
+it should use the @samp{START_RELOC_NUMBERS}, @samp{RELOC_NUMBER},
+ at samp{FAKE_RELOC}, @samp{EMPTY_RELOC} and @samp{END_RELOC_NUMBERS}
+macros to create a table mapping the number used to identify a
+relocation to a name describing that relocation.
+
+While not a BFD component, you probably also want to make the binutils
+program @samp{readelf} parse your ELF objects.  For this, you need to add
+code for @code{EM_ at var{cpu}} as appropriate in @file{binutils/readelf.c}.
+
+ at node BFD ELF processor linker
+ at subsubsection Processor specific linker support
+
+The linker will be much more efficient if you define a relocate section
+function.  This will permit BFD to use the ELF specific linker support.
+
+If you do not define a relocate section function, BFD must use the
+generic linker support, which requires converting all symbols and
+relocations into BFD @samp{asymbol} and @samp{arelent} structures.  In
+this case, relocations will be handled by calling
+ at samp{bfd_perform_relocation}, which will use the howto structures you
+have defined.  @xref{BFD relocation handling}.
+
+In order to support linking into a different object file format, such as
+S-records, @samp{bfd_perform_relocation} must work correctly with your
+howto structures, so you can't skip that step.  However, if you define
+the relocate section function, then in the normal case of linking into
+an ELF file the linker will not need to convert symbols and relocations,
+and will be much more efficient.
+
+To use a relocation section function, define the macro
+ at samp{elf_backend_relocate_section} as the name of a function which will
+take the contents of a section, as well as relocation, symbol, and other
+information, and modify the section contents according to the relocation
+information.  In simple cases, this is little more than a loop over the
+relocations which computes the value of each relocation and calls
+ at samp{_bfd_final_link_relocate}.  The function must check for a
+relocatable link, and in that case normally needs to do nothing other
+than adjust the addend for relocations against a section symbol.
+
+The complex cases generally have to do with dynamic linker support.  GOT
+and PLT relocations must be handled specially, and the linker normally
+arranges to set up the GOT and PLT sections while handling relocations.
+When generating a shared library, random relocations must normally be
+copied into the shared library, or converted to RELATIVE relocations
+when possible.
+
+ at node BFD ELF processor other
+ at subsubsection Other processor specific support options
+
+There are many other macros which may be defined in
+ at file{elf at var{nn}- at var{cpu}.c}.  These macros may be found in
+ at file{elfxx-target.h}.
+
+Macros may be used to override some of the generic ELF target vector
+functions.
+
+Several processor specific hook functions which may be defined as
+macros.  These functions are found as function pointers in the
+ at samp{elf_backend_data} structure defined in @file{elf-bfd.h}.  In
+general, a hook function is set by defining a macro
+ at samp{elf_backend_ at var{name}}.
+
+There are a few processor specific constants which may also be defined.
+These are again found in the @samp{elf_backend_data} structure.
+
+I will not define the various functions and constants here; see the
+comments in @file{elf-bfd.h}.
+
+Normally any odd characteristic of a particular ELF processor is handled
+via a hook function.  For example, the special @samp{SHN_MIPS_SCOMMON}
+section number found in MIPS ELF is handled via the hooks
+ at samp{section_from_bfd_section}, @samp{symbol_processing},
+ at samp{add_symbol_hook}, and @samp{output_symbol_hook}.
+
+Dynamic linking support, which involves processor specific relocations
+requiring special handling, is also implemented via hook functions.
+
+ at node BFD ELF core files
+ at subsection BFD ELF core files
+ at cindex elf core files
+
+On native ELF Unix systems, core files are generated without any
+sections.  Instead, they only have program segments.
+
+When BFD is used to read an ELF core file, the BFD sections will
+actually represent program segments.  Since ELF program segments do not
+have names, BFD will invent names like @samp{segment at var{n}} where
+ at var{n} is a number.
+
+A single ELF program segment may include both an initialized part and an
+uninitialized part.  The size of the initialized part is given by the
+ at samp{p_filesz} field.  The total size of the segment is given by the
+ at samp{p_memsz} field.  If @samp{p_memsz} is larger than @samp{p_filesz},
+then the extra space is uninitialized, or, more precisely, initialized
+to zero.
+
+BFD will represent such a program segment as two different sections.
+The first, named @samp{segment at var{n}a}, will represent the initialized
+part of the program segment.  The second, named @samp{segment at var{n}b},
+will represent the uninitialized part.
+
+ELF core files store special information such as register values in
+program segments with the type @samp{PT_NOTE}.  BFD will attempt to
+interpret the information in these segments, and will create additional
+sections holding the information.  Some of this interpretation requires
+information found in the host header file @file{sys/procfs.h}, and so
+will only work when BFD is built on a native system.
+
+BFD does not currently provide any way to create an ELF core file.  In
+general, BFD does not provide a way to create core files.  The way to
+implement this would be to write @samp{bfd_set_format} and
+ at samp{bfd_write_contents} routines for the @samp{bfd_core} type; see
+ at ref{BFD target vector format}.
+
+ at node BFD ELF future
+ at subsection BFD ELF future
+
+The current dynamic linking support has too much code duplication.
+While each processor has particular differences, much of the dynamic
+linking support is quite similar for each processor.  The GOT and PLT
+are handled in fairly similar ways, the details of -Bsymbolic linking
+are generally similar, etc.  This code should be reworked to use more
+generic functions, eliminating the duplication.
+
+Similarly, the relocation handling has too much duplication.  Many of
+the @samp{reloc_type_lookup} and @samp{info_to_howto} functions are
+quite similar.  The relocate section functions are also often quite
+similar, both in the standard linker handling and the dynamic linker
+handling.  Many of the COFF processor specific backends share a single
+relocate section function (@samp{_bfd_coff_generic_relocate_section}),
+and it should be possible to do something like this for the ELF targets
+as well.
+
+The appearance of the processor specific magic number in
+ at samp{prep_headers} in @file{elf.c} is somewhat bogus.  It should be
+possible to add support for a new processor without changing the generic
+support.
+
+The processor function hooks and constants are ad hoc and need better
+documentation.
+
+ at node BFD glossary
+ at section BFD glossary
+ at cindex glossary for bfd
+ at cindex bfd glossary
+
+This is a short glossary of some BFD terms.
+
+ at table @asis
+ at item a.out
+The a.out object file format.  The original Unix object file format.
+Still used on SunOS, though not Solaris.  Supports only three sections.
+
+ at item archive
+A collection of object files produced and manipulated by the @samp{ar}
+program.
+
+ at item backend
+The implementation within BFD of a particular object file format.  The
+set of functions which appear in a particular target vector.
+
+ at item BFD
+The BFD library itself.  Also, each object file, archive, or executable
+opened by the BFD library has the type @samp{bfd *}, and is sometimes
+referred to as a bfd.
+
+ at item COFF
+The Common Object File Format.  Used on Unix SVR3.  Used by some
+embedded targets, although ELF is normally better.
+
+ at item DLL
+A shared library on Windows.
+
+ at item dynamic linker
+When a program linked against a shared library is run, the dynamic
+linker will locate the appropriate shared library and arrange to somehow
+include it in the running image.
+
+ at item dynamic object
+Another name for an ELF shared library.
+
+ at item ECOFF
+The Extended Common Object File Format.  Used on Alpha Digital Unix
+(formerly OSF/1), as well as Ultrix and Irix 4.  A variant of COFF.
+
+ at item ELF
+The Executable and Linking Format.  The object file format used on most
+modern Unix systems, including GNU/Linux, Solaris, Irix, and SVR4.  Also
+used on many embedded systems.
+
+ at item executable
+A program, with instructions and symbols, and perhaps dynamic linking
+information.  Normally produced by a linker.
+
+ at item LMA
+Load Memory Address.  This is the address at which a section will be
+loaded.  Compare with VMA, below.
+
+ at item NLM
+NetWare Loadable Module.  Used to describe the format of an object which
+be loaded into NetWare, which is some kind of PC based network server
+program.
+
+ at item object file
+A binary file including machine instructions, symbols, and relocation
+information.  Normally produced by an assembler.
+
+ at item object file format
+The format of an object file.  Typically object files and executables
+for a particular system are in the same format, although executables
+will not contain any relocation information.
+
+ at item PE
+The Portable Executable format.  This is the object file format used for
+Windows (specifically, Win32) object files.  It is based closely on
+COFF, but has a few significant differences.
+
+ at item PEI
+The Portable Executable Image format.  This is the object file format
+used for Windows (specifically, Win32) executables.  It is very similar
+to PE, but includes some additional header information.
+
+ at item relocations
+Information used by the linker to adjust section contents.  Also called
+relocs.
+
+ at item section
+Object files and executable are composed of sections.  Sections have
+optional data and optional relocation information.
+
+ at item shared library
+A library of functions which may be used by many executables without
+actually being linked into each executable.  There are several different
+implementations of shared libraries, each having slightly different
+features.
+
+ at item symbol
+Each object file and executable may have a list of symbols, often
+referred to as the symbol table.  A symbol is basically a name and an
+address.  There may also be some additional information like the type of
+symbol, although the type of a symbol is normally something simple like
+function or object, and should be confused with the more complex C
+notion of type.  Typically every global function and variable in a C
+program will have an associated symbol.
+
+ at item target vector
+A set of functions which implement support for a particular object file
+format.  The @samp{bfd_target} structure.
+
+ at item Win32
+The current Windows API, implemented by Windows 95 and later and Windows
+NT 3.51 and later, but not by Windows 3.1.
+
+ at item XCOFF
+The eXtended Common Object File Format.  Used on AIX.  A variant of
+COFF, with a completely different symbol table implementation.
+
+ at item VMA
+Virtual Memory Address.  This is the address a section will have when
+an executable is run.  Compare with LMA, above.
+ at end table
+
+ at node Index
+ at unnumberedsec Index
+ at printindex cp
+
+ at contents
+ at bye
diff --git a/bfd/doc/bfdio.texi b/bfd/doc/bfdio.texi
index 8b13789..ff8275f 100644
--- a/bfd/doc/bfdio.texi
+++ b/bfd/doc/bfdio.texi
@@ -1 +1,95 @@
+ at findex struct bfd_iovec
+ at subsubsection @code{struct bfd_iovec}
+ at strong{Description}@*
+The @code{struct bfd_iovec} contains the internal file I/O class.
+Each @code{BFD} has an instance of this class and all file I/O is
+routed through it (it is assumed that the instance implements
+all methods listed below).
+ at example
+struct bfd_iovec
+@{
+  /* To avoid problems with macros, a "b" rather than "f"
+     prefix is prepended to each method name.  */
+  /* Attempt to read/write NBYTES on ABFD's IOSTREAM storing/fetching
+     bytes starting at PTR.  Return the number of bytes actually
+     transfered (a read past end-of-file returns less than NBYTES),
+     or -1 (setting @code{bfd_error}) if an error occurs.  */
+  file_ptr (*bread) (struct bfd *abfd, void *ptr, file_ptr nbytes);
+  file_ptr (*bwrite) (struct bfd *abfd, const void *ptr,
+                      file_ptr nbytes);
+  /* Return the current IOSTREAM file offset, or -1 (setting @code{bfd_error}
+     if an error occurs.  */
+  file_ptr (*btell) (struct bfd *abfd);
+  /* For the following, on successful completion a value of 0 is returned.
+     Otherwise, a value of -1 is returned (and  @code{bfd_error} is set).  */
+  int (*bseek) (struct bfd *abfd, file_ptr offset, int whence);
+  int (*bclose) (struct bfd *abfd);
+  int (*bflush) (struct bfd *abfd);
+  int (*bstat) (struct bfd *abfd, struct stat *sb);
+  /* Mmap a part of the files. ADDR, LEN, PROT, FLAGS and OFFSET are the usual
+     mmap parameter, except that LEN and OFFSET do not need to be page
+     aligned.  Returns (void *)-1 on failure, mmapped address on success.
+     Also write in MAP_ADDR the address of the page aligned buffer and in
+     MAP_LEN the size mapped (a page multiple).  Use unmap with MAP_ADDR and
+     MAP_LEN to unmap.  */
+  void *(*bmmap) (struct bfd *abfd, void *addr, bfd_size_type len,
+                  int prot, int flags, file_ptr offset,
+                  void **map_addr, bfd_size_type *map_len);
+@};
+extern const struct bfd_iovec _bfd_memory_iovec;
+ at end example
+
+ at findex bfd_get_mtime
+ at subsubsection @code{bfd_get_mtime}
+ at strong{Synopsis}
+ at example
+long bfd_get_mtime (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Return the file modification time (as read from the file system, or
+from the archive header for archive members).
+
+ at findex bfd_get_size
+ at subsubsection @code{bfd_get_size}
+ at strong{Synopsis}
+ at example
+file_ptr bfd_get_size (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Return the file size (as read from file system) for the file
+associated with BFD @var{abfd}.
+
+The initial motivation for, and use of, this routine is not
+so we can get the exact size of the object the BFD applies to, since
+that might not be generally possible (archive members for example).
+It would be ideal if someone could eventually modify
+it so that such results were guaranteed.
+
+Instead, we want to ask questions like "is this NNN byte sized
+object I'm about to try read from file offset YYY reasonable?"
+As as example of where we might do this, some object formats
+use string tables for which the first @code{sizeof (long)} bytes of the
+table contain the size of the table itself, including the size bytes.
+If an application tries to read what it thinks is one of these
+string tables, without some way to validate the size, and for
+some reason the size is wrong (byte swapping error, wrong location
+for the string table, etc.), the only clue is likely to be a read
+error when it tries to read the table, or a "virtual memory
+exhausted" error when it tries to allocate 15 bazillon bytes
+of space for the 15 bazillon byte table it is about to read.
+This function at least allows us to answer the question, "is the
+size reasonable?".
+
+ at findex bfd_mmap
+ at subsubsection @code{bfd_mmap}
+ at strong{Synopsis}
+ at example
+void *bfd_mmap (bfd *abfd, void *addr, bfd_size_type len,
+    int prot, int flags, file_ptr offset,
+    void **map_addr, bfd_size_type *map_len);
+ at end example
+ at strong{Description}@*
+Return mmap()ed region of the file, if possible and implemented.
+LEN and OFFSET do not need to be page aligned.  The page aligned
+address and length are written to MAP_ADDR and MAP_LEN.
 
diff --git a/bfd/doc/bfdsumm.texi b/bfd/doc/bfdsumm.texi
index 8b13789..77a5f09 100644
--- a/bfd/doc/bfdsumm.texi
+++ b/bfd/doc/bfdsumm.texi
@@ -1 +1,148 @@
+ at c This summary of BFD is shared by the BFD and LD docs.
+When an object file is opened, BFD subroutines automatically determine
+the format of the input object file.  They then build a descriptor in
+memory with pointers to routines that will be used to access elements of
+the object file's data structures.
 
+As different information from the object files is required,
+BFD reads from different sections of the file and processes them.
+For example, a very common operation for the linker is processing symbol
+tables.  Each BFD back end provides a routine for converting
+between the object file's representation of symbols and an internal
+canonical format. When the linker asks for the symbol table of an object
+file, it calls through a memory pointer to the routine from the
+relevant BFD back end which reads and converts the table into a canonical
+form.  The linker then operates upon the canonical form. When the link is
+finished and the linker writes the output file's symbol table,
+another BFD back end routine is called to take the newly
+created symbol table and convert it into the chosen output format.
+
+ at menu
+* BFD information loss::	Information Loss
+* Canonical format::		The BFD	canonical object-file format 
+ at end menu
+
+ at node BFD information loss
+ at subsection Information Loss
+
+ at emph{Information can be lost during output.} The output formats
+supported by BFD do not provide identical facilities, and
+information which can be described in one form has nowhere to go in
+another format. One example of this is alignment information in
+ at code{b.out}. There is nowhere in an @code{a.out} format file to store
+alignment information on the contained data, so when a file is linked
+from @code{b.out} and an @code{a.out} image is produced, alignment
+information will not propagate to the output file. (The linker will
+still use the alignment information internally, so the link is performed
+correctly).
+
+Another example is COFF section names. COFF files may contain an
+unlimited number of sections, each one with a textual section name. If
+the target of the link is a format which does not have many sections (e.g.,
+ at code{a.out}) or has sections without names (e.g., the Oasys format), the
+link cannot be done simply. You can circumvent this problem by
+describing the desired input-to-output section mapping with the linker command
+language.
+
+ at emph{Information can be lost during canonicalization.} The BFD
+internal canonical form of the external formats is not exhaustive; there
+are structures in input formats for which there is no direct
+representation internally.  This means that the BFD back ends
+cannot maintain all possible data richness through the transformation
+between external to internal and back to external formats.
+
+This limitation is only a problem when an application reads one
+format and writes another.  Each BFD back end is responsible for
+maintaining as much data as possible, and the internal BFD
+canonical form has structures which are opaque to the BFD core,
+and exported only to the back ends. When a file is read in one format,
+the canonical form is generated for BFD and the application. At the
+same time, the back end saves away any information which may otherwise
+be lost. If the data is then written back in the same format, the back
+end routine will be able to use the canonical form provided by the
+BFD core as well as the information it prepared earlier.  Since
+there is a great deal of commonality between back ends,
+there is no information lost when
+linking or copying big endian COFF to little endian COFF, or @code{a.out} to
+ at code{b.out}.  When a mixture of formats is linked, the information is
+only lost from the files whose format differs from the destination.
+
+ at node Canonical format
+ at subsection The BFD canonical object-file format
+
+The greatest potential for loss of information occurs when there is the least
+overlap between the information provided by the source format, that
+stored by the canonical format, and that needed by the
+destination format. A brief description of the canonical form may help
+you understand which kinds of data you can count on preserving across
+conversions.
+ at cindex BFD canonical format
+ at cindex internal object-file format
+
+ at table @emph
+ at item files
+Information stored on a per-file basis includes target machine
+architecture, particular implementation format type, a demand pageable
+bit, and a write protected bit.  Information like Unix magic numbers is
+not stored here---only the magic numbers' meaning, so a @code{ZMAGIC}
+file would have both the demand pageable bit and the write protected
+text bit set.  The byte order of the target is stored on a per-file
+basis, so that big- and little-endian object files may be used with one
+another.
+
+ at item sections
+Each section in the input file contains the name of the section, the
+section's original address in the object file, size and alignment
+information, various flags, and pointers into other BFD data
+structures.
+
+ at item symbols
+Each symbol contains a pointer to the information for the object file
+which originally defined it, its name, its value, and various flag
+bits.  When a BFD back end reads in a symbol table, it relocates all
+symbols to make them relative to the base of the section where they were
+defined.  Doing this ensures that each symbol points to its containing
+section.  Each symbol also has a varying amount of hidden private data
+for the BFD back end.  Since the symbol points to the original file, the
+private data format for that symbol is accessible.  @code{ld} can
+operate on a collection of symbols of wildly different formats without
+problems.
+
+Normal global and simple local symbols are maintained on output, so an
+output file (no matter its format) will retain symbols pointing to
+functions and to global, static, and common variables.  Some symbol
+information is not worth retaining; in @code{a.out}, type information is
+stored in the symbol table as long symbol names.  This information would
+be useless to most COFF debuggers; the linker has command line switches
+to allow users to throw it away.
+
+There is one word of type information within the symbol, so if the
+format supports symbol type information within symbols (for example, COFF,
+IEEE, Oasys) and the type is simple enough to fit within one word
+(nearly everything but aggregates), the information will be preserved.
+
+ at item relocation level
+Each canonical BFD relocation record contains a pointer to the symbol to
+relocate to, the offset of the data to relocate, the section the data
+is in, and a pointer to a relocation type descriptor. Relocation is
+performed by passing messages through the relocation type
+descriptor and the symbol pointer. Therefore, relocations can be performed
+on output data using a relocation method that is only available in one of the
+input formats. For instance, Oasys provides a byte relocation format.
+A relocation record requesting this relocation type would point
+indirectly to a routine to perform this, so the relocation may be
+performed on a byte being written to a 68k COFF file, even though 68k COFF
+has no such relocation type.
+
+ at item line numbers
+Object formats can contain, for debugging purposes, some form of mapping
+between symbols, source line numbers, and addresses in the output file.
+These addresses have to be relocated along with the symbol information.
+Each symbol with an associated list of line number records points to the
+first record of the list.  The head of a line number list consists of a
+pointer to the symbol, which allows finding out the address of the
+function whose line number is being described. The rest of the list is
+made up of pairs: offsets into the section and line numbers. Any format
+which can simply derive this information can pass it successfully
+between formats (COFF, IEEE and Oasys).
+ at end table
diff --git a/bfd/doc/bfdt.texi b/bfd/doc/bfdt.texi
index 8b13789..ad9f3e2 100644
--- a/bfd/doc/bfdt.texi
+++ b/bfd/doc/bfdt.texi
@@ -1 +1,933 @@
+ at section @code{typedef bfd}
+A BFD has type @code{bfd}; objects of this type are the
+cornerstone of any application using BFD. Using BFD
+consists of making references though the BFD and to data in the BFD.
+
+Here is the structure that defines the type @code{bfd}.  It
+contains the major data about the file and pointers
+to the rest of the data.
+
+
+ at example
+
+enum bfd_direction
+  @{
+    no_direction = 0,
+    read_direction = 1,
+    write_direction = 2,
+    both_direction = 3
+  @};
+
+struct bfd
+@{
+  /* A unique identifier of the BFD  */
+  unsigned int id;
+
+  /* The filename the application opened the BFD with.  */
+  const char *filename;
+
+  /* A pointer to the target jump table.  */
+  const struct bfd_target *xvec;
+
+  /* The IOSTREAM, and corresponding IO vector that provide access
+     to the file backing the BFD.  */
+  void *iostream;
+  const struct bfd_iovec *iovec;
+
+  /* The caching routines use these to maintain a
+     least-recently-used list of BFDs.  */
+  struct bfd *lru_prev, *lru_next;
+
+  /* When a file is closed by the caching routines, BFD retains
+     state information on the file here...  */
+  ufile_ptr where;
+
+  /* File modified time, if mtime_set is TRUE.  */
+  long mtime;
+
+  /* Reserved for an unimplemented file locking extension.  */
+  int ifd;
+
+  /* The format which belongs to the BFD. (object, core, etc.)  */
+  bfd_format format;
+
+  /* The direction with which the BFD was opened.  */
+  enum bfd_direction direction;
+
+  /* Format_specific flags.  */
+  flagword flags;
+
+  /* Values that may appear in the flags field of a BFD.  These also
+     appear in the object_flags field of the bfd_target structure, where
+     they indicate the set of flags used by that backend (not all flags
+     are meaningful for all object file formats) (FIXME: at the moment,
+     the object_flags values have mostly just been copied from backend
+     to another, and are not necessarily correct).  */
+
+#define BFD_NO_FLAGS   0x00
+
+  /* BFD contains relocation entries.  */
+#define HAS_RELOC      0x01
+
+  /* BFD is directly executable.  */
+#define EXEC_P         0x02
+
+  /* BFD has line number information (basically used for F_LNNO in a
+     COFF header).  */
+#define HAS_LINENO     0x04
+
+  /* BFD has debugging information.  */
+#define HAS_DEBUG      0x08
+
+  /* BFD has symbols.  */
+#define HAS_SYMS       0x10
+
+  /* BFD has local symbols (basically used for F_LSYMS in a COFF
+     header).  */
+#define HAS_LOCALS     0x20
+
+  /* BFD is a dynamic object.  */
+#define DYNAMIC        0x40
+
+  /* Text section is write protected (if D_PAGED is not set, this is
+     like an a.out NMAGIC file) (the linker sets this by default, but
+     clears it for -r or -N).  */
+#define WP_TEXT        0x80
+
+  /* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the
+     linker sets this by default, but clears it for -r or -n or -N).  */
+#define D_PAGED        0x100
+
+  /* BFD is relaxable (this means that bfd_relax_section may be able to
+     do something) (sometimes bfd_relax_section can do something even if
+     this is not set).  */
+#define BFD_IS_RELAXABLE 0x200
+
+  /* This may be set before writing out a BFD to request using a
+     traditional format.  For example, this is used to request that when
+     writing out an a.out object the symbols not be hashed to eliminate
+     duplicates.  */
+#define BFD_TRADITIONAL_FORMAT 0x400
+
+  /* This flag indicates that the BFD contents are actually cached
+     in memory.  If this is set, iostream points to a bfd_in_memory
+     struct.  */
+#define BFD_IN_MEMORY 0x800
+
+  /* The sections in this BFD specify a memory page.  */
+#define HAS_LOAD_PAGE 0x1000
+
+  /* This BFD has been created by the linker and doesn't correspond
+     to any input file.  */
+#define BFD_LINKER_CREATED 0x2000
+
+  /* This may be set before writing out a BFD to request that it
+     be written using values for UIDs, GIDs, timestamps, etc. that
+     will be consistent from run to run.  */
+#define BFD_DETERMINISTIC_OUTPUT 0x4000
+
+  /* Compress sections in this BFD.  */
+#define BFD_COMPRESS 0x8000
+
+  /* Decompress sections in this BFD.  */
+#define BFD_DECOMPRESS 0x10000
+
+  /* BFD is a dummy, for plugins.  */
+#define BFD_PLUGIN 0x20000
+
+  /* Flags bits to be saved in bfd_preserve_save.  */
+#define BFD_FLAGS_SAVED \
+  (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_PLUGIN)
+
+  /* Flags bits which are for BFD use only.  */
+#define BFD_FLAGS_FOR_BFD_USE_MASK \
+  (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
+   | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT)
+
+  /* Currently my_archive is tested before adding origin to
+     anything. I believe that this can become always an add of
+     origin, with origin set to 0 for non archive files.  */
+  ufile_ptr origin;
+
+  /* The origin in the archive of the proxy entry.  This will
+     normally be the same as origin, except for thin archives,
+     when it will contain the current offset of the proxy in the
+     thin archive rather than the offset of the bfd in its actual
+     container.  */
+  ufile_ptr proxy_origin;
+
+  /* A hash table for section names.  */
+  struct bfd_hash_table section_htab;
+
+  /* Pointer to linked list of sections.  */
+  struct bfd_section *sections;
+
+  /* The last section on the section list.  */
+  struct bfd_section *section_last;
+
+  /* The number of sections.  */
+  unsigned int section_count;
+
+  /* Stuff only useful for object files:
+     The start address.  */
+  bfd_vma start_address;
+
+  /* Used for input and output.  */
+  unsigned int symcount;
+
+  /* Symbol table for output BFD (with symcount entries).
+     Also used by the linker to cache input BFD symbols.  */
+  struct bfd_symbol  **outsymbols;
+
+  /* Used for slurped dynamic symbol tables.  */
+  unsigned int dynsymcount;
+
+  /* Pointer to structure which contains architecture information.  */
+  const struct bfd_arch_info *arch_info;
+
+  /* Stuff only useful for archives.  */
+  void *arelt_data;
+  struct bfd *my_archive;      /* The containing archive BFD.  */
+  struct bfd *archive_next;    /* The next BFD in the archive.  */
+  struct bfd *archive_head;    /* The first BFD in the archive.  */
+  struct bfd *nested_archives; /* List of nested archive in a flattened
+                                  thin archive.  */
+
+  /* A chain of BFD structures involved in a link.  */
+  struct bfd *link_next;
+
+  /* A field used by _bfd_generic_link_add_archive_symbols.  This will
+     be used only for archive elements.  */
+  int archive_pass;
+
+  /* Used by the back end to hold private data.  */
+  union
+    @{
+      struct aout_data_struct *aout_data;
+      struct artdata *aout_ar_data;
+      struct _oasys_data *oasys_obj_data;
+      struct _oasys_ar_data *oasys_ar_data;
+      struct coff_tdata *coff_obj_data;
+      struct pe_tdata *pe_obj_data;
+      struct xcoff_tdata *xcoff_obj_data;
+      struct ecoff_tdata *ecoff_obj_data;
+      struct ieee_data_struct *ieee_data;
+      struct ieee_ar_data_struct *ieee_ar_data;
+      struct srec_data_struct *srec_data;
+      struct verilog_data_struct *verilog_data;
+      struct ihex_data_struct *ihex_data;
+      struct tekhex_data_struct *tekhex_data;
+      struct elf_obj_tdata *elf_obj_data;
+      struct nlm_obj_tdata *nlm_obj_data;
+      struct bout_data_struct *bout_data;
+      struct mmo_data_struct *mmo_data;
+      struct sun_core_struct *sun_core_data;
+      struct sco5_core_struct *sco5_core_data;
+      struct trad_core_struct *trad_core_data;
+      struct som_data_struct *som_data;
+      struct hpux_core_struct *hpux_core_data;
+      struct hppabsd_core_struct *hppabsd_core_data;
+      struct sgi_core_struct *sgi_core_data;
+      struct lynx_core_struct *lynx_core_data;
+      struct osf_core_struct *osf_core_data;
+      struct cisco_core_struct *cisco_core_data;
+      struct versados_data_struct *versados_data;
+      struct netbsd_core_struct *netbsd_core_data;
+      struct mach_o_data_struct *mach_o_data;
+      struct mach_o_fat_data_struct *mach_o_fat_data;
+      struct plugin_data_struct *plugin_data;
+      struct bfd_pef_data_struct *pef_data;
+      struct bfd_pef_xlib_data_struct *pef_xlib_data;
+      struct bfd_sym_data_struct *sym_data;
+      void *any;
+    @}
+  tdata;
+
+  /* Used by the application to hold private data.  */
+  void *usrdata;
+
+  /* Where all the allocated stuff under this BFD goes.  This is a
+     struct objalloc *, but we use void * to avoid requiring the inclusion
+     of objalloc.h.  */
+  void *memory;
+
+  /* Is the file descriptor being cached?  That is, can it be closed as
+     needed, and re-opened when accessed later?  */
+  unsigned int cacheable : 1;
+
+  /* Marks whether there was a default target specified when the
+     BFD was opened. This is used to select which matching algorithm
+     to use to choose the back end.  */
+  unsigned int target_defaulted : 1;
+
+  /* ... and here: (``once'' means at least once).  */
+  unsigned int opened_once : 1;
+
+  /* Set if we have a locally maintained mtime value, rather than
+     getting it from the file each time.  */
+  unsigned int mtime_set : 1;
+
+  /* Flag set if symbols from this BFD should not be exported.  */
+  unsigned int no_export : 1;
+
+  /* Remember when output has begun, to stop strange things
+     from happening.  */
+  unsigned int output_has_begun : 1;
+
+  /* Have archive map.  */
+  unsigned int has_armap : 1;
+
+  /* Set if this is a thin archive.  */
+  unsigned int is_thin_archive : 1;
+
+  /* Set if only required symbols should be added in the link hash table for
+     this object.  Used by VMS linkers.  */
+  unsigned int selective_search : 1;
+@};
+
+ at end example
+ at section Error reporting
+Most BFD functions return nonzero on success (check their
+individual documentation for precise semantics).  On an error,
+they call @code{bfd_set_error} to set an error condition that callers
+can check by calling @code{bfd_get_error}.
+If that returns @code{bfd_error_system_call}, then check
+ at code{errno}.
+
+The easiest way to report a BFD error to the user is to
+use @code{bfd_perror}.
+
+ at subsection Type @code{bfd_error_type}
+The values returned by @code{bfd_get_error} are defined by the
+enumerated type @code{bfd_error_type}.
+
+
+ at example
+
+typedef enum bfd_error
+@{
+  bfd_error_no_error = 0,
+  bfd_error_system_call,
+  bfd_error_invalid_target,
+  bfd_error_wrong_format,
+  bfd_error_wrong_object_format,
+  bfd_error_invalid_operation,
+  bfd_error_no_memory,
+  bfd_error_no_symbols,
+  bfd_error_no_armap,
+  bfd_error_no_more_archived_files,
+  bfd_error_malformed_archive,
+  bfd_error_file_not_recognized,
+  bfd_error_file_ambiguously_recognized,
+  bfd_error_no_contents,
+  bfd_error_nonrepresentable_section,
+  bfd_error_no_debug_section,
+  bfd_error_bad_value,
+  bfd_error_file_truncated,
+  bfd_error_file_too_big,
+  bfd_error_on_input,
+  bfd_error_invalid_error_code
+@}
+bfd_error_type;
+
+ at end example
+ at findex bfd_get_error
+ at subsubsection @code{bfd_get_error}
+ at strong{Synopsis}
+ at example
+bfd_error_type bfd_get_error (void);
+ at end example
+ at strong{Description}@*
+Return the current BFD error condition.
+
+ at findex bfd_set_error
+ at subsubsection @code{bfd_set_error}
+ at strong{Synopsis}
+ at example
+void bfd_set_error (bfd_error_type error_tag, ...);
+ at end example
+ at strong{Description}@*
+Set the BFD error condition to be @var{error_tag}.
+If @var{error_tag} is bfd_error_on_input, then this function
+takes two more parameters, the input bfd where the error
+occurred, and the bfd_error_type error.
+
+ at findex bfd_errmsg
+ at subsubsection @code{bfd_errmsg}
+ at strong{Synopsis}
+ at example
+const char *bfd_errmsg (bfd_error_type error_tag);
+ at end example
+ at strong{Description}@*
+Return a string describing the error @var{error_tag}, or
+the system error if @var{error_tag} is @code{bfd_error_system_call}.
+
+ at findex bfd_perror
+ at subsubsection @code{bfd_perror}
+ at strong{Synopsis}
+ at example
+void bfd_perror (const char *message);
+ at end example
+ at strong{Description}@*
+Print to the standard error stream a string describing the
+last BFD error that occurred, or the last system error if
+the last BFD error was a system call failure.  If @var{message}
+is non-NULL and non-empty, the error string printed is preceded
+by @var{message}, a colon, and a space.  It is followed by a newline.
+
+ at subsection BFD error handler
+Some BFD functions want to print messages describing the
+problem.  They call a BFD error handler function.  This
+function may be overridden by the program.
+
+The BFD error handler acts like printf.
+
+
+ at example
+
+typedef void (*bfd_error_handler_type) (const char *, ...);
+
+ at end example
+ at findex bfd_set_error_handler
+ at subsubsection @code{bfd_set_error_handler}
+ at strong{Synopsis}
+ at example
+bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type);
+ at end example
+ at strong{Description}@*
+Set the BFD error handler function.  Returns the previous
+function.
+
+ at findex bfd_set_error_program_name
+ at subsubsection @code{bfd_set_error_program_name}
+ at strong{Synopsis}
+ at example
+void bfd_set_error_program_name (const char *);
+ at end example
+ at strong{Description}@*
+Set the program name to use when printing a BFD error.  This
+is printed before the error message followed by a colon and
+space.  The string must not be changed after it is passed to
+this function.
+
+ at findex bfd_get_error_handler
+ at subsubsection @code{bfd_get_error_handler}
+ at strong{Synopsis}
+ at example
+bfd_error_handler_type bfd_get_error_handler (void);
+ at end example
+ at strong{Description}@*
+Return the BFD error handler function.
+
+ at subsection BFD assert handler
+If BFD finds an internal inconsistency, the bfd assert
+handler is called with information on the BFD version, BFD
+source file and line.  If this happens, most programs linked
+against BFD are expected to want to exit with an error, or mark
+the current BFD operation as failed, so it is recommended to
+override the default handler, which just calls
+_bfd_error_handler and continues.
+
+
+ at example
+
+typedef void (*bfd_assert_handler_type) (const char *bfd_formatmsg,
+                                         const char *bfd_version,
+                                         const char *bfd_file,
+                                         int bfd_line);
+
+ at end example
+ at findex bfd_set_assert_handler
+ at subsubsection @code{bfd_set_assert_handler}
+ at strong{Synopsis}
+ at example
+bfd_assert_handler_type bfd_set_assert_handler (bfd_assert_handler_type);
+ at end example
+ at strong{Description}@*
+Set the BFD assert handler function.  Returns the previous
+function.
+
+ at findex bfd_get_assert_handler
+ at subsubsection @code{bfd_get_assert_handler}
+ at strong{Synopsis}
+ at example
+bfd_assert_handler_type bfd_get_assert_handler (void);
+ at end example
+ at strong{Description}@*
+Return the BFD assert handler function.
+
+ at section Miscellaneous
+
+
+ at subsection Miscellaneous functions
+
+
+ at findex bfd_get_reloc_upper_bound
+ at subsubsection @code{bfd_get_reloc_upper_bound}
+ at strong{Synopsis}
+ at example
+long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);
+ at end example
+ at strong{Description}@*
+Return the number of bytes required to store the
+relocation information associated with section @var{sect}
+attached to bfd @var{abfd}.  If an error occurs, return -1.
+
+ at findex bfd_canonicalize_reloc
+ at subsubsection @code{bfd_canonicalize_reloc}
+ at strong{Synopsis}
+ at example
+long bfd_canonicalize_reloc
+   (bfd *abfd, asection *sec, arelent **loc, asymbol **syms);
+ at end example
+ at strong{Description}@*
+Call the back end associated with the open BFD
+ at var{abfd} and translate the external form of the relocation
+information attached to @var{sec} into the internal canonical
+form.  Place the table into memory at @var{loc}, which has
+been preallocated, usually by a call to
+ at code{bfd_get_reloc_upper_bound}.  Returns the number of relocs, or
+-1 on error.
+
+The @var{syms} table is also needed for horrible internal magic
+reasons.
+
+ at findex bfd_set_reloc
+ at subsubsection @code{bfd_set_reloc}
+ at strong{Synopsis}
+ at example
+void bfd_set_reloc
+   (bfd *abfd, asection *sec, arelent **rel, unsigned int count);
+ at end example
+ at strong{Description}@*
+Set the relocation pointer and count within
+section @var{sec} to the values @var{rel} and @var{count}.
+The argument @var{abfd} is ignored.
+
+ at findex bfd_set_file_flags
+ at subsubsection @code{bfd_set_file_flags}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags);
+ at end example
+ at strong{Description}@*
+Set the flag word in the BFD @var{abfd} to the value @var{flags}.
+
+Possible errors are:
+ at itemize @bullet
+
+ at item
+ at code{bfd_error_wrong_format} - The target bfd was not of object format.
+ at item
+ at code{bfd_error_invalid_operation} - The target bfd was open for reading.
+ at item
+ at code{bfd_error_invalid_operation} -
+The flag word contained a bit which was not applicable to the
+type of file.  E.g., an attempt was made to set the @code{D_PAGED} bit
+on a BFD format which does not support demand paging.
+ at end itemize
+
+ at findex bfd_get_arch_size
+ at subsubsection @code{bfd_get_arch_size}
+ at strong{Synopsis}
+ at example
+int bfd_get_arch_size (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Returns the architecture address size, in bits, as determined
+by the object file's format.  For ELF, this information is
+included in the header.
+
+ at strong{Returns}@*
+Returns the arch size in bits if known, @code{-1} otherwise.
+
+ at findex bfd_get_sign_extend_vma
+ at subsubsection @code{bfd_get_sign_extend_vma}
+ at strong{Synopsis}
+ at example
+int bfd_get_sign_extend_vma (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Indicates if the target architecture "naturally" sign extends
+an address.  Some architectures implicitly sign extend address
+values when they are converted to types larger than the size
+of an address.  For instance, bfd_get_start_address() will
+return an address sign extended to fill a bfd_vma when this is
+the case.
+
+ at strong{Returns}@*
+Returns @code{1} if the target architecture is known to sign
+extend addresses, @code{0} if the target architecture is known to
+not sign extend addresses, and @code{-1} otherwise.
+
+ at findex bfd_set_start_address
+ at subsubsection @code{bfd_set_start_address}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma);
+ at end example
+ at strong{Description}@*
+Make @var{vma} the entry point of output BFD @var{abfd}.
+
+ at strong{Returns}@*
+Returns @code{TRUE} on success, @code{FALSE} otherwise.
+
+ at findex bfd_get_gp_size
+ at subsubsection @code{bfd_get_gp_size}
+ at strong{Synopsis}
+ at example
+unsigned int bfd_get_gp_size (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Return the maximum size of objects to be optimized using the GP
+register under MIPS ECOFF.  This is typically set by the @code{-G}
+argument to the compiler, assembler or linker.
+
+ at findex bfd_set_gp_size
+ at subsubsection @code{bfd_set_gp_size}
+ at strong{Synopsis}
+ at example
+void bfd_set_gp_size (bfd *abfd, unsigned int i);
+ at end example
+ at strong{Description}@*
+Set the maximum size of objects to be optimized using the GP
+register under ECOFF or MIPS ELF.  This is typically set by
+the @code{-G} argument to the compiler, assembler or linker.
+
+ at findex bfd_scan_vma
+ at subsubsection @code{bfd_scan_vma}
+ at strong{Synopsis}
+ at example
+bfd_vma bfd_scan_vma (const char *string, const char **end, int base);
+ at end example
+ at strong{Description}@*
+Convert, like @code{strtoul}, a numerical expression
+ at var{string} into a @code{bfd_vma} integer, and return that integer.
+(Though without as many bells and whistles as @code{strtoul}.)
+The expression is assumed to be unsigned (i.e., positive).
+If given a @var{base}, it is used as the base for conversion.
+A base of 0 causes the function to interpret the string
+in hex if a leading "0x" or "0X" is found, otherwise
+in octal if a leading zero is found, otherwise in decimal.
+
+If the value would overflow, the maximum @code{bfd_vma} value is
+returned.
+
+ at findex bfd_copy_private_header_data
+ at subsubsection @code{bfd_copy_private_header_data}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
+ at end example
+ at strong{Description}@*
+Copy private BFD header information from the BFD @var{ibfd} to the
+the BFD @var{obfd}.  This copies information that may require
+sections to exist, but does not require symbol tables.  Return
+ at code{true} on success, @code{false} on error.
+Possible error returns are:
+
+ at itemize @bullet
+
+ at item
+ at code{bfd_error_no_memory} -
+Not enough memory exists to create private data for @var{obfd}.
+ at end itemize
+ at example
+#define bfd_copy_private_header_data(ibfd, obfd) \
+     BFD_SEND (obfd, _bfd_copy_private_header_data, \
+               (ibfd, obfd))
+ at end example
+
+ at findex bfd_copy_private_bfd_data
+ at subsubsection @code{bfd_copy_private_bfd_data}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
+ at end example
+ at strong{Description}@*
+Copy private BFD information from the BFD @var{ibfd} to the
+the BFD @var{obfd}.  Return @code{TRUE} on success, @code{FALSE} on error.
+Possible error returns are:
+
+ at itemize @bullet
+
+ at item
+ at code{bfd_error_no_memory} -
+Not enough memory exists to create private data for @var{obfd}.
+ at end itemize
+ at example
+#define bfd_copy_private_bfd_data(ibfd, obfd) \
+     BFD_SEND (obfd, _bfd_copy_private_bfd_data, \
+               (ibfd, obfd))
+ at end example
+
+ at findex bfd_merge_private_bfd_data
+ at subsubsection @code{bfd_merge_private_bfd_data}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_merge_private_bfd_data (bfd *ibfd, bfd *obfd);
+ at end example
+ at strong{Description}@*
+Merge private BFD information from the BFD @var{ibfd} to the
+the output file BFD @var{obfd} when linking.  Return @code{TRUE}
+on success, @code{FALSE} on error.  Possible error returns are:
+
+ at itemize @bullet
+
+ at item
+ at code{bfd_error_no_memory} -
+Not enough memory exists to create private data for @var{obfd}.
+ at end itemize
+ at example
+#define bfd_merge_private_bfd_data(ibfd, obfd) \
+     BFD_SEND (obfd, _bfd_merge_private_bfd_data, \
+               (ibfd, obfd))
+ at end example
+
+ at findex bfd_set_private_flags
+ at subsubsection @code{bfd_set_private_flags}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
+ at end example
+ at strong{Description}@*
+Set private BFD flag information in the BFD @var{abfd}.
+Return @code{TRUE} on success, @code{FALSE} on error.  Possible error
+returns are:
+
+ at itemize @bullet
+
+ at item
+ at code{bfd_error_no_memory} -
+Not enough memory exists to create private data for @var{obfd}.
+ at end itemize
+ at example
+#define bfd_set_private_flags(abfd, flags) \
+     BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags))
+ at end example
+
+ at findex Other functions
+ at subsubsection @code{Other functions}
+ at strong{Description}@*
+The following functions exist but have not yet been documented.
+ at example
+#define bfd_sizeof_headers(abfd, info) \
+       BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info))
+
+#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
+       BFD_SEND (abfd, _bfd_find_nearest_line, \
+                 (abfd, sec, syms, off, file, func, line))
+
+#define bfd_find_line(abfd, syms, sym, file, line) \
+       BFD_SEND (abfd, _bfd_find_line, \
+                 (abfd, syms, sym, file, line))
+
+#define bfd_find_inliner_info(abfd, file, func, line) \
+       BFD_SEND (abfd, _bfd_find_inliner_info, \
+                 (abfd, file, func, line))
+
+#define bfd_debug_info_start(abfd) \
+       BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
+
+#define bfd_debug_info_end(abfd) \
+       BFD_SEND (abfd, _bfd_debug_info_end, (abfd))
+
+#define bfd_debug_info_accumulate(abfd, section) \
+       BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
+
+#define bfd_stat_arch_elt(abfd, stat) \
+       BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
+
+#define bfd_update_armap_timestamp(abfd) \
+       BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
+
+#define bfd_set_arch_mach(abfd, arch, mach)\
+       BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
+
+#define bfd_relax_section(abfd, section, link_info, again) \
+       BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
+
+#define bfd_gc_sections(abfd, link_info) \
+       BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))
+
+#define bfd_lookup_section_flags(link_info, flag_info, section) \
+       BFD_SEND (abfd, _bfd_lookup_section_flags, (link_info, flag_info, section))
+
+#define bfd_merge_sections(abfd, link_info) \
+       BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info))
+
+#define bfd_is_group_section(abfd, sec) \
+       BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec))
+
+#define bfd_discard_group(abfd, sec) \
+       BFD_SEND (abfd, _bfd_discard_group, (abfd, sec))
+
+#define bfd_link_hash_table_create(abfd) \
+       BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
+
+#define bfd_link_hash_table_free(abfd, hash) \
+       BFD_SEND (abfd, _bfd_link_hash_table_free, (hash))
+
+#define bfd_link_add_symbols(abfd, info) \
+       BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info))
+
+#define bfd_link_just_syms(abfd, sec, info) \
+       BFD_SEND (abfd, _bfd_link_just_syms, (sec, info))
+
+#define bfd_final_link(abfd, info) \
+       BFD_SEND (abfd, _bfd_final_link, (abfd, info))
+
+#define bfd_free_cached_info(abfd) \
+       BFD_SEND (abfd, _bfd_free_cached_info, (abfd))
+
+#define bfd_get_dynamic_symtab_upper_bound(abfd) \
+       BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd))
+
+#define bfd_print_private_bfd_data(abfd, file)\
+       BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file))
+
+#define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \
+       BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols))
+
+#define bfd_get_synthetic_symtab(abfd, count, syms, dyncount, dynsyms, ret) \
+       BFD_SEND (abfd, _bfd_get_synthetic_symtab, (abfd, count, syms, \
+                                                   dyncount, dynsyms, ret))
+
+#define bfd_get_dynamic_reloc_upper_bound(abfd) \
+       BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd))
+
+#define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
+       BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))
+
+extern bfd_byte *bfd_get_relocated_section_contents
+  (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
+   bfd_boolean, asymbol **);
+
+ at end example
+
+ at findex bfd_alt_mach_code
+ at subsubsection @code{bfd_alt_mach_code}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative);
+ at end example
+ at strong{Description}@*
+When more than one machine code number is available for the
+same machine type, this function can be used to switch between
+the preferred one (alternative == 0) and any others.  Currently,
+only ELF supports this feature, with up to two alternate
+machine codes.
+
+
+ at example
+struct bfd_preserve
+@{
+  void *marker;
+  void *tdata;
+  flagword flags;
+  const struct bfd_arch_info *arch_info;
+  struct bfd_section *sections;
+  struct bfd_section *section_last;
+  unsigned int section_count;
+  struct bfd_hash_table section_htab;
+@};
+
+ at end example
+ at findex bfd_preserve_save
+ at subsubsection @code{bfd_preserve_save}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_preserve_save (bfd *, struct bfd_preserve *);
+ at end example
+ at strong{Description}@*
+When testing an object for compatibility with a particular
+target back-end, the back-end object_p function needs to set
+up certain fields in the bfd on successfully recognizing the
+object.  This typically happens in a piecemeal fashion, with
+failures possible at many points.  On failure, the bfd is
+supposed to be restored to its initial state, which is
+virtually impossible.  However, restoring a subset of the bfd
+state works in practice.  This function stores the subset and
+reinitializes the bfd.
+
+ at findex bfd_preserve_restore
+ at subsubsection @code{bfd_preserve_restore}
+ at strong{Synopsis}
+ at example
+void bfd_preserve_restore (bfd *, struct bfd_preserve *);
+ at end example
+ at strong{Description}@*
+This function restores bfd state saved by bfd_preserve_save.
+If MARKER is non-NULL in struct bfd_preserve then that block
+and all subsequently bfd_alloc'd memory is freed.
+
+ at findex bfd_preserve_finish
+ at subsubsection @code{bfd_preserve_finish}
+ at strong{Synopsis}
+ at example
+void bfd_preserve_finish (bfd *, struct bfd_preserve *);
+ at end example
+ at strong{Description}@*
+This function should be called when the bfd state saved by
+bfd_preserve_save is no longer needed.  ie. when the back-end
+object_p function returns with success.
+
+ at findex bfd_emul_get_maxpagesize
+ at subsubsection @code{bfd_emul_get_maxpagesize}
+ at strong{Synopsis}
+ at example
+bfd_vma bfd_emul_get_maxpagesize (const char *);
+ at end example
+ at strong{Description}@*
+Returns the maximum page size, in bytes, as determined by
+emulation.
+
+ at strong{Returns}@*
+Returns the maximum page size in bytes for ELF, 0 otherwise.
+
+ at findex bfd_emul_set_maxpagesize
+ at subsubsection @code{bfd_emul_set_maxpagesize}
+ at strong{Synopsis}
+ at example
+void bfd_emul_set_maxpagesize (const char *, bfd_vma);
+ at end example
+ at strong{Description}@*
+For ELF, set the maximum page size for the emulation.  It is
+a no-op for other formats.
+
+ at findex bfd_emul_get_commonpagesize
+ at subsubsection @code{bfd_emul_get_commonpagesize}
+ at strong{Synopsis}
+ at example
+bfd_vma bfd_emul_get_commonpagesize (const char *);
+ at end example
+ at strong{Description}@*
+Returns the common page size, in bytes, as determined by
+emulation.
+
+ at strong{Returns}@*
+Returns the common page size in bytes for ELF, 0 otherwise.
+
+ at findex bfd_emul_set_commonpagesize
+ at subsubsection @code{bfd_emul_set_commonpagesize}
+ at strong{Synopsis}
+ at example
+void bfd_emul_set_commonpagesize (const char *, bfd_vma);
+ at end example
+ at strong{Description}@*
+For ELF, set the common page size for the emulation.  It is
+a no-op for other formats.
+
+ at findex bfd_demangle
+ at subsubsection @code{bfd_demangle}
+ at strong{Synopsis}
+ at example
+char *bfd_demangle (bfd *, const char *, int);
+ at end example
+ at strong{Description}@*
+Wrapper around cplus_demangle.  Strips leading underscores and
+other such chars that would otherwise confuse the demangler.
+If passed a g++ v3 ABI mangled name, returns a buffer allocated
+with malloc holding the demangled name.  Returns NULL otherwise
+and on memory alloc failure.
 
diff --git a/bfd/doc/bfdver.texi b/bfd/doc/bfdver.texi
index 8b13789..5a886f0 100644
--- a/bfd/doc/bfdver.texi
+++ b/bfd/doc/bfdver.texi
@@ -1 +1,4 @@
-
+ at set VERSION 2.22.52
+ at set VERSION_PACKAGE (GNU Binutils) 
+ at set UPDATED August 2012
+ at set BUGURL @uref{http://www.sourceware.org/bugzilla/}
diff --git a/bfd/doc/bfdwin.texi b/bfd/doc/bfdwin.texi
index 8b13789..b1fd7d5 100644
--- a/bfd/doc/bfdwin.texi
+++ b/bfd/doc/bfdwin.texi
@@ -1 +1,2 @@
-
+ at findex 
+ at subsubsection @code{}
diff --git a/bfd/doc/cache.texi b/bfd/doc/cache.texi
index 8b13789..5820a2a 100644
--- a/bfd/doc/cache.texi
+++ b/bfd/doc/cache.texi
@@ -1 +1,65 @@
+ at section File caching
+The file caching mechanism is embedded within BFD and allows
+the application to open as many BFDs as it wants without
+regard to the underlying operating system's file descriptor
+limit (often as low as 20 open files).  The module in
+ at code{cache.c} maintains a least recently used list of
+ at code{BFD_CACHE_MAX_OPEN} files, and exports the name
+ at code{bfd_cache_lookup}, which runs around and makes sure that
+the required BFD is open. If not, then it chooses a file to
+close, closes it and opens the one wanted, returning its file
+handle.
+
+ at subsection Caching functions
+
+
+ at findex bfd_cache_init
+ at subsubsection @code{bfd_cache_init}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_cache_init (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Add a newly opened BFD to the cache.
+
+ at findex bfd_cache_close
+ at subsubsection @code{bfd_cache_close}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_cache_close (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Remove the BFD @var{abfd} from the cache. If the attached file is open,
+then close it too.
+
+ at strong{Returns}@*
+ at code{FALSE} is returned if closing the file fails, @code{TRUE} is
+returned if all is well.
+
+ at findex bfd_cache_close_all
+ at subsubsection @code{bfd_cache_close_all}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_cache_close_all (void);
+ at end example
+ at strong{Description}@*
+Remove all BFDs from the cache. If the attached file is open,
+then close it too.
+
+ at strong{Returns}@*
+ at code{FALSE} is returned if closing one of the file fails, @code{TRUE} is
+returned if all is well.
+
+ at findex bfd_open_file
+ at subsubsection @code{bfd_open_file}
+ at strong{Synopsis}
+ at example
+FILE* bfd_open_file (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Call the OS to open a file for @var{abfd}.  Return the @code{FILE *}
+(possibly @code{NULL}) that results from this operation.  Set up the
+BFD so that future accesses know the file is open. If the @code{FILE *}
+returned is @code{NULL}, then it won't have been put in the
+cache, so it won't have to be removed from it.
 
diff --git a/bfd/doc/chew.c b/bfd/doc/chew.c
index 2276c8a..f949e1f 100644
--- a/bfd/doc/chew.c
+++ b/bfd/doc/chew.c
@@ -1,6 +1,6 @@
 /* chew
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2001,
-   2002, 2003, 2005, 2007, 2009
+   2002, 2003, 2005, 2007, 2009, 2012
    Free Software Foundation, Inc.
    Contributed by steve chamberlain @cygnus
 
@@ -476,8 +476,8 @@ remove_noncomments (src, dst)
 static void
 print_stack_level ()
 {
-  fprintf (stderr, "current string stack depth = %d, ", tos - stack);
-  fprintf (stderr, "current integer stack depth = %d\n", isp - istack);
+  fprintf (stderr, "current string stack depth = %ld, ", tos - stack);
+  fprintf (stderr, "current integer stack depth = %ld\n", isp - istack);
   pc++;
 }
 
@@ -1563,7 +1563,7 @@ main (ac, av)
   write_buffer (stack + 0, stdout);
   if (tos != stack)
     {
-      fprintf (stderr, "finishing with current stack level %d\n",
+      fprintf (stderr, "finishing with current stack level %ld\n",
 	       tos - stack);
       return 1;
     }
diff --git a/bfd/doc/coffcode.texi b/bfd/doc/coffcode.texi
index 8b13789..e487d84 100644
--- a/bfd/doc/coffcode.texi
+++ b/bfd/doc/coffcode.texi
@@ -1 +1,685 @@
+ at section coff backends
+BFD supports a number of different flavours of coff format.
+The major differences between formats are the sizes and
+alignments of fields in structures on disk, and the occasional
+extra field.
+
+Coff in all its varieties is implemented with a few common
+files and a number of implementation specific files. For
+example, The 88k bcs coff format is implemented in the file
+ at file{coff-m88k.c}. This file @code{#include}s
+ at file{coff/m88k.h} which defines the external structure of the
+coff format for the 88k, and @file{coff/internal.h} which
+defines the internal structure. @file{coff-m88k.c} also
+defines the relocations used by the 88k format
+ at xref{Relocations}.
+
+The Intel i960 processor version of coff is implemented in
+ at file{coff-i960.c}. This file has the same structure as
+ at file{coff-m88k.c}, except that it includes @file{coff/i960.h}
+rather than @file{coff-m88k.h}.
+
+ at subsection Porting to a new version of coff
+The recommended method is to select from the existing
+implementations the version of coff which is most like the one
+you want to use.  For example, we'll say that i386 coff is
+the one you select, and that your coff flavour is called foo.
+Copy @file{i386coff.c} to @file{foocoff.c}, copy
+ at file{../include/coff/i386.h} to @file{../include/coff/foo.h},
+and add the lines to @file{targets.c} and @file{Makefile.in}
+so that your new back end is used. Alter the shapes of the
+structures in @file{../include/coff/foo.h} so that they match
+what you need. You will probably also have to add
+ at code{#ifdef}s to the code in @file{coff/internal.h} and
+ at file{coffcode.h} if your version of coff is too wild.
+
+You can verify that your new BFD backend works quite simply by
+building @file{objdump} from the @file{binutils} directory,
+and making sure that its version of what's going on and your
+host system's idea (assuming it has the pretty standard coff
+dump utility, usually called @code{att-dump} or just
+ at code{dump}) are the same.  Then clean up your code, and send
+what you've done to Cygnus. Then your stuff will be in the
+next release, and you won't have to keep integrating it.
+
+ at subsection How the coff backend works
+
+
+ at subsubsection File layout
+The Coff backend is split into generic routines that are
+applicable to any Coff target and routines that are specific
+to a particular target.  The target-specific routines are
+further split into ones which are basically the same for all
+Coff targets except that they use the external symbol format
+or use different values for certain constants.
+
+The generic routines are in @file{coffgen.c}.  These routines
+work for any Coff target.  They use some hooks into the target
+specific code; the hooks are in a @code{bfd_coff_backend_data}
+structure, one of which exists for each target.
+
+The essentially similar target-specific routines are in
+ at file{coffcode.h}.  This header file includes executable C code.
+The various Coff targets first include the appropriate Coff
+header file, make any special defines that are needed, and
+then include @file{coffcode.h}.
+
+Some of the Coff targets then also have additional routines in
+the target source file itself.
+
+For example, @file{coff-i960.c} includes
+ at file{coff/internal.h} and @file{coff/i960.h}.  It then
+defines a few constants, such as @code{I960}, and includes
+ at file{coffcode.h}.  Since the i960 has complex relocation
+types, @file{coff-i960.c} also includes some code to
+manipulate the i960 relocs.  This code is not in
+ at file{coffcode.h} because it would not be used by any other
+target.
+
+ at subsubsection Coff long section names
+In the standard Coff object format, section names are limited to
+the eight bytes available in the @code{s_name} field of the
+ at code{SCNHDR} section header structure.  The format requires the
+field to be NUL-padded, but not necessarily NUL-terminated, so
+the longest section names permitted are a full eight characters.
+
+The Microsoft PE variants of the Coff object file format add
+an extension to support the use of long section names.  This
+extension is defined in section 4 of the Microsoft PE/COFF 
+specification (rev 8.1).  If a section name is too long to fit
+into the section header's @code{s_name} field, it is instead
+placed into the string table, and the @code{s_name} field is
+filled with a slash ("/") followed by the ASCII decimal 
+representation of the offset of the full name relative to the
+string table base.
+
+Note that this implies that the extension can only be used in object
+files, as executables do not contain a string table.  The standard
+specifies that long section names from objects emitted into executable
+images are to be truncated.
+
+However, as a GNU extension, BFD can generate executable images
+that contain a string table and long section names.  This
+would appear to be technically valid, as the standard only says
+that Coff debugging information is deprecated, not forbidden,
+and in practice it works, although some tools that parse PE files
+expecting the MS standard format may become confused; @file{PEview} is
+one known example.
+
+The functionality is supported in BFD by code implemented under 
+the control of the macro @code{COFF_LONG_SECTION_NAMES}.  If not
+defined, the format does not support long section names in any way.
+If defined, it is used to initialise a flag, 
+ at code{_bfd_coff_long_section_names}, and a hook function pointer, 
+ at code{_bfd_coff_set_long_section_names}, in the Coff backend data
+structure.  The flag controls the generation of long section names
+in output BFDs at runtime; if it is false, as it will be by default
+when generating an executable image, long section names are truncated;
+if true, the long section names extension is employed.  The hook
+points to a function that allows the value of the flag to be altered
+at runtime, on formats that support long section names at all; on
+other formats it points to a stub that returns an error indication.
+With input BFDs, the flag is set according to whether any long section
+names are detected while reading the section headers.  For a completely
+new BFD, the flag is set to the default for the target format.  This
+information can be used by a client of the BFD library when deciding
+what output format to generate, and means that a BFD that is opened
+for read and subsequently converted to a writeable BFD and modified
+in-place will retain whatever format it had on input.
+
+If @code{COFF_LONG_SECTION_NAMES} is simply defined (blank), or is
+defined to the value "1", then long section names are enabled by
+default; if it is defined to the value zero, they are disabled by
+default (but still accepted in input BFDs).  The header @file{coffcode.h}
+defines a macro, @code{COFF_DEFAULT_LONG_SECTION_NAMES}, which is
+used in the backends to initialise the backend data structure fields
+appropriately; see the comments for further detail.
+
+ at subsubsection Bit twiddling
+Each flavour of coff supported in BFD has its own header file
+describing the external layout of the structures. There is also
+an internal description of the coff layout, in
+ at file{coff/internal.h}. A major function of the
+coff backend is swapping the bytes and twiddling the bits to
+translate the external form of the structures into the normal
+internal form. This is all performed in the
+ at code{bfd_swap}_ at i{thing}_ at i{direction} routines. Some
+elements are different sizes between different versions of
+coff; it is the duty of the coff version specific include file
+to override the definitions of various packing routines in
+ at file{coffcode.h}. E.g., the size of line number entry in coff is
+sometimes 16 bits, and sometimes 32 bits. @code{#define}ing
+ at code{PUT_LNSZ_LNNO} and @code{GET_LNSZ_LNNO} will select the
+correct one. No doubt, some day someone will find a version of
+coff which has a varying field size not catered to at the
+moment. To port BFD, that person will have to add more @code{#defines}.
+Three of the bit twiddling routines are exported to
+ at code{gdb}; @code{coff_swap_aux_in}, @code{coff_swap_sym_in}
+and @code{coff_swap_lineno_in}. @code{GDB} reads the symbol
+table on its own, but uses BFD to fix things up.  More of the
+bit twiddlers are exported for @code{gas};
+ at code{coff_swap_aux_out}, @code{coff_swap_sym_out},
+ at code{coff_swap_lineno_out}, @code{coff_swap_reloc_out},
+ at code{coff_swap_filehdr_out}, @code{coff_swap_aouthdr_out},
+ at code{coff_swap_scnhdr_out}. @code{Gas} currently keeps track
+of all the symbol table and reloc drudgery itself, thereby
+saving the internal BFD overhead, but uses BFD to swap things
+on the way out, making cross ports much safer.  Doing so also
+allows BFD (and thus the linker) to use the same header files
+as @code{gas}, which makes one avenue to disaster disappear.
+
+ at subsubsection Symbol reading
+The simple canonical form for symbols used by BFD is not rich
+enough to keep all the information available in a coff symbol
+table. The back end gets around this problem by keeping the original
+symbol table around, "behind the scenes".
+
+When a symbol table is requested (through a call to
+ at code{bfd_canonicalize_symtab}), a request gets through to
+ at code{coff_get_normalized_symtab}. This reads the symbol table from
+the coff file and swaps all the structures inside into the
+internal form. It also fixes up all the pointers in the table
+(represented in the file by offsets from the first symbol in
+the table) into physical pointers to elements in the new
+internal table. This involves some work since the meanings of
+fields change depending upon context: a field that is a
+pointer to another structure in the symbol table at one moment
+may be the size in bytes of a structure at the next.  Another
+pass is made over the table. All symbols which mark file names
+(@code{C_FILE} symbols) are modified so that the internal
+string points to the value in the auxent (the real filename)
+rather than the normal text associated with the symbol
+(@code{".file"}).
+
+At this time the symbol names are moved around. Coff stores
+all symbols less than nine characters long physically
+within the symbol table; longer strings are kept at the end of
+the file in the string table. This pass moves all strings
+into memory and replaces them with pointers to the strings.
+
+The symbol table is massaged once again, this time to create
+the canonical table used by the BFD application. Each symbol
+is inspected in turn, and a decision made (using the
+ at code{sclass} field) about the various flags to set in the
+ at code{asymbol}.  @xref{Symbols}. The generated canonical table
+shares strings with the hidden internal symbol table.
+
+Any linenumbers are read from the coff file too, and attached
+to the symbols which own the functions the linenumbers belong to.
+
+ at subsubsection Symbol writing
+Writing a symbol to a coff file which didn't come from a coff
+file will lose any debugging information. The @code{asymbol}
+structure remembers the BFD from which the symbol was taken, and on
+output the back end makes sure that the same destination target as
+source target is present.
+
+When the symbols have come from a coff file then all the
+debugging information is preserved.
+
+Symbol tables are provided for writing to the back end in a
+vector of pointers to pointers. This allows applications like
+the linker to accumulate and output large symbol tables
+without having to do too much byte copying.
+
+This function runs through the provided symbol table and
+patches each symbol marked as a file place holder
+(@code{C_FILE}) to point to the next file place holder in the
+list. It also marks each @code{offset} field in the list with
+the offset from the first symbol of the current symbol.
+
+Another function of this procedure is to turn the canonical
+value form of BFD into the form used by coff. Internally, BFD
+expects symbol values to be offsets from a section base; so a
+symbol physically at 0x120, but in a section starting at
+0x100, would have the value 0x20. Coff expects symbols to
+contain their final value, so symbols have their values
+changed at this point to reflect their sum with their owning
+section.  This transformation uses the
+ at code{output_section} field of the @code{asymbol}'s
+ at code{asection} @xref{Sections}.
+
+ at itemize @bullet
+
+ at item
+ at code{coff_mangle_symbols}
+ at end itemize
+This routine runs though the provided symbol table and uses
+the offsets generated by the previous pass and the pointers
+generated when the symbol table was read in to create the
+structured hierarchy required by coff. It changes each pointer
+to a symbol into the index into the symbol table of the asymbol.
+
+ at itemize @bullet
+
+ at item
+ at code{coff_write_symbols}
+ at end itemize
+This routine runs through the symbol table and patches up the
+symbols from their internal form into the coff way, calls the
+bit twiddlers, and writes out the table to the file.
+
+ at findex coff_symbol_type
+ at subsubsection @code{coff_symbol_type}
+ at strong{Description}@*
+The hidden information for an @code{asymbol} is described in a
+ at code{combined_entry_type}:
+
+
+ at example
+
+typedef struct coff_ptr_struct
+@{
+  /* Remembers the offset from the first symbol in the file for
+     this symbol. Generated by coff_renumber_symbols. */
+  unsigned int offset;
+
+  /* Should the value of this symbol be renumbered.  Used for
+     XCOFF C_BSTAT symbols.  Set by coff_slurp_symbol_table.  */
+  unsigned int fix_value : 1;
+
+  /* Should the tag field of this symbol be renumbered.
+     Created by coff_pointerize_aux. */
+  unsigned int fix_tag : 1;
+
+  /* Should the endidx field of this symbol be renumbered.
+     Created by coff_pointerize_aux. */
+  unsigned int fix_end : 1;
+
+  /* Should the x_csect.x_scnlen field be renumbered.
+     Created by coff_pointerize_aux. */
+  unsigned int fix_scnlen : 1;
+
+  /* Fix up an XCOFF C_BINCL/C_EINCL symbol.  The value is the
+     index into the line number entries.  Set by coff_slurp_symbol_table.  */
+  unsigned int fix_line : 1;
+
+  /* The container for the symbol structure as read and translated
+     from the file. */
+  union
+  @{
+    union internal_auxent auxent;
+    struct internal_syment syment;
+  @} u;
+@} combined_entry_type;
+
+
+/* Each canonical asymbol really looks like this: */
+
+typedef struct coff_symbol_struct
+@{
+  /* The actual symbol which the rest of BFD works with */
+  asymbol symbol;
+
+  /* A pointer to the hidden information for this symbol */
+  combined_entry_type *native;
+
+  /* A pointer to the linenumber information for this symbol */
+  struct lineno_cache_entry *lineno;
+
+  /* Have the line numbers been relocated yet ? */
+  bfd_boolean done_lineno;
+@} coff_symbol_type;
+ at end example
+ at findex bfd_coff_backend_data
+ at subsubsection @code{bfd_coff_backend_data}
+
+ at example
+/* COFF symbol classifications.  */
+
+enum coff_symbol_classification
+@{
+  /* Global symbol.  */
+  COFF_SYMBOL_GLOBAL,
+  /* Common symbol.  */
+  COFF_SYMBOL_COMMON,
+  /* Undefined symbol.  */
+  COFF_SYMBOL_UNDEFINED,
+  /* Local symbol.  */
+  COFF_SYMBOL_LOCAL,
+  /* PE section symbol.  */
+  COFF_SYMBOL_PE_SECTION
+@};
+
+ at end example
+Special entry points for gdb to swap in coff symbol table parts:
+ at example
+typedef struct
+@{
+  void (*_bfd_coff_swap_aux_in)
+    (bfd *, void *, int, int, int, int, void *);
+
+  void (*_bfd_coff_swap_sym_in)
+    (bfd *, void *, void *);
+
+  void (*_bfd_coff_swap_lineno_in)
+    (bfd *, void *, void *);
+
+  unsigned int (*_bfd_coff_swap_aux_out)
+    (bfd *, void *, int, int, int, int, void *);
+
+  unsigned int (*_bfd_coff_swap_sym_out)
+    (bfd *, void *, void *);
+
+  unsigned int (*_bfd_coff_swap_lineno_out)
+    (bfd *, void *, void *);
+
+  unsigned int (*_bfd_coff_swap_reloc_out)
+    (bfd *, void *, void *);
+
+  unsigned int (*_bfd_coff_swap_filehdr_out)
+    (bfd *, void *, void *);
+
+  unsigned int (*_bfd_coff_swap_aouthdr_out)
+    (bfd *, void *, void *);
+
+  unsigned int (*_bfd_coff_swap_scnhdr_out)
+    (bfd *, void *, void *);
+
+  unsigned int _bfd_filhsz;
+  unsigned int _bfd_aoutsz;
+  unsigned int _bfd_scnhsz;
+  unsigned int _bfd_symesz;
+  unsigned int _bfd_auxesz;
+  unsigned int _bfd_relsz;
+  unsigned int _bfd_linesz;
+  unsigned int _bfd_filnmlen;
+  bfd_boolean _bfd_coff_long_filenames;
+
+  bfd_boolean _bfd_coff_long_section_names;
+  bfd_boolean (*_bfd_coff_set_long_section_names)
+    (bfd *, int);
+  
+  unsigned int _bfd_coff_default_section_alignment_power;
+  bfd_boolean _bfd_coff_force_symnames_in_strings;
+  unsigned int _bfd_coff_debug_string_prefix_length;
+
+  void (*_bfd_coff_swap_filehdr_in)
+    (bfd *, void *, void *);
+
+  void (*_bfd_coff_swap_aouthdr_in)
+    (bfd *, void *, void *);
+
+  void (*_bfd_coff_swap_scnhdr_in)
+    (bfd *, void *, void *);
+
+  void (*_bfd_coff_swap_reloc_in)
+    (bfd *abfd, void *, void *);
+
+  bfd_boolean (*_bfd_coff_bad_format_hook)
+    (bfd *, void *);
+
+  bfd_boolean (*_bfd_coff_set_arch_mach_hook)
+    (bfd *, void *);
+
+  void * (*_bfd_coff_mkobject_hook)
+    (bfd *, void *, void *);
+
+  bfd_boolean (*_bfd_styp_to_sec_flags_hook)
+    (bfd *, void *, const char *, asection *, flagword *);
+
+  void (*_bfd_set_alignment_hook)
+    (bfd *, asection *, void *);
+
+  bfd_boolean (*_bfd_coff_slurp_symbol_table)
+    (bfd *);
+
+  bfd_boolean (*_bfd_coff_symname_in_debug)
+    (bfd *, struct internal_syment *);
+
+  bfd_boolean (*_bfd_coff_pointerize_aux_hook)
+    (bfd *, combined_entry_type *, combined_entry_type *,
+            unsigned int, combined_entry_type *);
+
+  bfd_boolean (*_bfd_coff_print_aux)
+    (bfd *, FILE *, combined_entry_type *, combined_entry_type *,
+            combined_entry_type *, unsigned int);
+
+  void (*_bfd_coff_reloc16_extra_cases)
+    (bfd *, struct bfd_link_info *, struct bfd_link_order *, arelent *,
+           bfd_byte *, unsigned int *, unsigned int *);
+
+  int (*_bfd_coff_reloc16_estimate)
+    (bfd *, asection *, arelent *, unsigned int,
+            struct bfd_link_info *);
+
+  enum coff_symbol_classification (*_bfd_coff_classify_symbol)
+    (bfd *, struct internal_syment *);
+
+  bfd_boolean (*_bfd_coff_compute_section_file_positions)
+    (bfd *);
+
+  bfd_boolean (*_bfd_coff_start_final_link)
+    (bfd *, struct bfd_link_info *);
+
+  bfd_boolean (*_bfd_coff_relocate_section)
+    (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
+            struct internal_reloc *, struct internal_syment *, asection **);
+
+  reloc_howto_type *(*_bfd_coff_rtype_to_howto)
+    (bfd *, asection *, struct internal_reloc *,
+            struct coff_link_hash_entry *, struct internal_syment *,
+            bfd_vma *);
+
+  bfd_boolean (*_bfd_coff_adjust_symndx)
+    (bfd *, struct bfd_link_info *, bfd *, asection *,
+            struct internal_reloc *, bfd_boolean *);
+
+  bfd_boolean (*_bfd_coff_link_add_one_symbol)
+    (struct bfd_link_info *, bfd *, const char *, flagword,
+            asection *, bfd_vma, const char *, bfd_boolean, bfd_boolean,
+            struct bfd_link_hash_entry **);
+
+  bfd_boolean (*_bfd_coff_link_output_has_begun)
+    (bfd *, struct coff_final_link_info *);
+
+  bfd_boolean (*_bfd_coff_final_link_postscript)
+    (bfd *, struct coff_final_link_info *);
+
+  bfd_boolean (*_bfd_coff_print_pdata)
+    (bfd *, void *);
+
+@} bfd_coff_backend_data;
+
+#define coff_backend_info(abfd) \
+  ((bfd_coff_backend_data *) (abfd)->xvec->backend_data)
+
+#define bfd_coff_swap_aux_in(a,e,t,c,ind,num,i) \
+  ((coff_backend_info (a)->_bfd_coff_swap_aux_in) (a,e,t,c,ind,num,i))
+
+#define bfd_coff_swap_sym_in(a,e,i) \
+  ((coff_backend_info (a)->_bfd_coff_swap_sym_in) (a,e,i))
+
+#define bfd_coff_swap_lineno_in(a,e,i) \
+  ((coff_backend_info ( a)->_bfd_coff_swap_lineno_in) (a,e,i))
+
+#define bfd_coff_swap_reloc_out(abfd, i, o) \
+  ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_out) (abfd, i, o))
+
+#define bfd_coff_swap_lineno_out(abfd, i, o) \
+  ((coff_backend_info (abfd)->_bfd_coff_swap_lineno_out) (abfd, i, o))
+
+#define bfd_coff_swap_aux_out(a,i,t,c,ind,num,o) \
+  ((coff_backend_info (a)->_bfd_coff_swap_aux_out) (a,i,t,c,ind,num,o))
+
+#define bfd_coff_swap_sym_out(abfd, i,o) \
+  ((coff_backend_info (abfd)->_bfd_coff_swap_sym_out) (abfd, i, o))
+
+#define bfd_coff_swap_scnhdr_out(abfd, i,o) \
+  ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_out) (abfd, i, o))
+
+#define bfd_coff_swap_filehdr_out(abfd, i,o) \
+  ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_out) (abfd, i, o))
+
+#define bfd_coff_swap_aouthdr_out(abfd, i,o) \
+  ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_out) (abfd, i, o))
+
+#define bfd_coff_filhsz(abfd) (coff_backend_info (abfd)->_bfd_filhsz)
+#define bfd_coff_aoutsz(abfd) (coff_backend_info (abfd)->_bfd_aoutsz)
+#define bfd_coff_scnhsz(abfd) (coff_backend_info (abfd)->_bfd_scnhsz)
+#define bfd_coff_symesz(abfd) (coff_backend_info (abfd)->_bfd_symesz)
+#define bfd_coff_auxesz(abfd) (coff_backend_info (abfd)->_bfd_auxesz)
+#define bfd_coff_relsz(abfd)  (coff_backend_info (abfd)->_bfd_relsz)
+#define bfd_coff_linesz(abfd) (coff_backend_info (abfd)->_bfd_linesz)
+#define bfd_coff_filnmlen(abfd) (coff_backend_info (abfd)->_bfd_filnmlen)
+#define bfd_coff_long_filenames(abfd) \
+  (coff_backend_info (abfd)->_bfd_coff_long_filenames)
+#define bfd_coff_long_section_names(abfd) \
+  (coff_backend_info (abfd)->_bfd_coff_long_section_names)
+#define bfd_coff_set_long_section_names(abfd, enable) \
+  ((coff_backend_info (abfd)->_bfd_coff_set_long_section_names) (abfd, enable))
+#define bfd_coff_default_section_alignment_power(abfd) \
+  (coff_backend_info (abfd)->_bfd_coff_default_section_alignment_power)
+#define bfd_coff_swap_filehdr_in(abfd, i,o) \
+  ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_in) (abfd, i, o))
+
+#define bfd_coff_swap_aouthdr_in(abfd, i,o) \
+  ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_in) (abfd, i, o))
+
+#define bfd_coff_swap_scnhdr_in(abfd, i,o) \
+  ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_in) (abfd, i, o))
+
+#define bfd_coff_swap_reloc_in(abfd, i, o) \
+  ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_in) (abfd, i, o))
+
+#define bfd_coff_bad_format_hook(abfd, filehdr) \
+  ((coff_backend_info (abfd)->_bfd_coff_bad_format_hook) (abfd, filehdr))
+
+#define bfd_coff_set_arch_mach_hook(abfd, filehdr)\
+  ((coff_backend_info (abfd)->_bfd_coff_set_arch_mach_hook) (abfd, filehdr))
+#define bfd_coff_mkobject_hook(abfd, filehdr, aouthdr)\
+  ((coff_backend_info (abfd)->_bfd_coff_mkobject_hook)\
+   (abfd, filehdr, aouthdr))
+
+#define bfd_coff_styp_to_sec_flags_hook(abfd, scnhdr, name, section, flags_ptr)\
+  ((coff_backend_info (abfd)->_bfd_styp_to_sec_flags_hook)\
+   (abfd, scnhdr, name, section, flags_ptr))
+
+#define bfd_coff_set_alignment_hook(abfd, sec, scnhdr)\
+  ((coff_backend_info (abfd)->_bfd_set_alignment_hook) (abfd, sec, scnhdr))
+
+#define bfd_coff_slurp_symbol_table(abfd)\
+  ((coff_backend_info (abfd)->_bfd_coff_slurp_symbol_table) (abfd))
+
+#define bfd_coff_symname_in_debug(abfd, sym)\
+  ((coff_backend_info (abfd)->_bfd_coff_symname_in_debug) (abfd, sym))
+
+#define bfd_coff_force_symnames_in_strings(abfd)\
+  (coff_backend_info (abfd)->_bfd_coff_force_symnames_in_strings)
+
+#define bfd_coff_debug_string_prefix_length(abfd)\
+  (coff_backend_info (abfd)->_bfd_coff_debug_string_prefix_length)
+
+#define bfd_coff_print_aux(abfd, file, base, symbol, aux, indaux)\
+  ((coff_backend_info (abfd)->_bfd_coff_print_aux)\
+   (abfd, file, base, symbol, aux, indaux))
+
+#define bfd_coff_reloc16_extra_cases(abfd, link_info, link_order,\
+                                     reloc, data, src_ptr, dst_ptr)\
+  ((coff_backend_info (abfd)->_bfd_coff_reloc16_extra_cases)\
+   (abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr))
+
+#define bfd_coff_reloc16_estimate(abfd, section, reloc, shrink, link_info)\
+  ((coff_backend_info (abfd)->_bfd_coff_reloc16_estimate)\
+   (abfd, section, reloc, shrink, link_info))
+
+#define bfd_coff_classify_symbol(abfd, sym)\
+  ((coff_backend_info (abfd)->_bfd_coff_classify_symbol)\
+   (abfd, sym))
+
+#define bfd_coff_compute_section_file_positions(abfd)\
+  ((coff_backend_info (abfd)->_bfd_coff_compute_section_file_positions)\
+   (abfd))
+
+#define bfd_coff_start_final_link(obfd, info)\
+  ((coff_backend_info (obfd)->_bfd_coff_start_final_link)\
+   (obfd, info))
+#define bfd_coff_relocate_section(obfd,info,ibfd,o,con,rel,isyms,secs)\
+  ((coff_backend_info (ibfd)->_bfd_coff_relocate_section)\
+   (obfd, info, ibfd, o, con, rel, isyms, secs))
+#define bfd_coff_rtype_to_howto(abfd, sec, rel, h, sym, addendp)\
+  ((coff_backend_info (abfd)->_bfd_coff_rtype_to_howto)\
+   (abfd, sec, rel, h, sym, addendp))
+#define bfd_coff_adjust_symndx(obfd, info, ibfd, sec, rel, adjustedp)\
+  ((coff_backend_info (abfd)->_bfd_coff_adjust_symndx)\
+   (obfd, info, ibfd, sec, rel, adjustedp))
+#define bfd_coff_link_add_one_symbol(info, abfd, name, flags, section,\
+                                     value, string, cp, coll, hashp)\
+  ((coff_backend_info (abfd)->_bfd_coff_link_add_one_symbol)\
+   (info, abfd, name, flags, section, value, string, cp, coll, hashp))
+
+#define bfd_coff_link_output_has_begun(a,p) \
+  ((coff_backend_info (a)->_bfd_coff_link_output_has_begun) (a, p))
+#define bfd_coff_final_link_postscript(a,p) \
+  ((coff_backend_info (a)->_bfd_coff_final_link_postscript) (a, p))
+
+#define bfd_coff_have_print_pdata(a) \
+  (coff_backend_info (a)->_bfd_coff_print_pdata)
+#define bfd_coff_print_pdata(a,p) \
+  ((coff_backend_info (a)->_bfd_coff_print_pdata) (a, p))
+
+/* Macro: Returns true if the bfd is a PE executable as opposed to a
+   PE object file.  */
+#define bfd_pei_p(abfd) \
+  (CONST_STRNEQ ((abfd)->xvec->name, "pei-"))
+ at end example
+ at subsubsection Writing relocations
+To write relocations, the back end steps though the
+canonical relocation table and create an
+ at code{internal_reloc}. The symbol index to use is removed from
+the @code{offset} field in the symbol table supplied.  The
+address comes directly from the sum of the section base
+address and the relocation offset; the type is dug directly
+from the howto field.  Then the @code{internal_reloc} is
+swapped into the shape of an @code{external_reloc} and written
+out to disk.
+
+ at subsubsection Reading linenumbers
+Creating the linenumber table is done by reading in the entire
+coff linenumber table, and creating another table for internal use.
+
+A coff linenumber table is structured so that each function
+is marked as having a line number of 0. Each line within the
+function is an offset from the first line in the function. The
+base of the line number information for the table is stored in
+the symbol associated with the function.
+
+Note: The PE format uses line number 0 for a flag indicating a
+new source file.
+
+The information is copied from the external to the internal
+table, and each symbol which marks a function is marked by
+pointing its...
+
+How does this work ?
+
+ at subsubsection Reading relocations
+Coff relocations are easily transformed into the internal BFD form
+(@code{arelent}).
+
+Reading a coff relocation table is done in the following stages:
+
+ at itemize @bullet
+
+ at item
+Read the entire coff relocation table into memory.
+
+ at item
+Process each relocation in turn; first swap it from the
+external to the internal form.
+
+ at item
+Turn the symbol referenced in the relocation's symbol index
+into a pointer into the canonical symbol table.
+This table is the same as the one returned by a call to
+ at code{bfd_canonicalize_symtab}. The back end will call that
+routine and save the result if a canonicalization hasn't been done.
+
+ at item
+The reloc index is turned into a pointer to a howto
+structure, in a back end specific way. For instance, the 386
+and 960 use the @code{r_type} to directly produce an index
+into a howto table vector; the 88k subtracts a number from the
+ at code{r_type} field and creates an addend field.
+ at end itemize
 
diff --git a/bfd/doc/core.texi b/bfd/doc/core.texi
index 8b13789..cd98c4a 100644
--- a/bfd/doc/core.texi
+++ b/bfd/doc/core.texi
@@ -1 +1,70 @@
+ at section Core files
+
+
+ at subsection Core file functions
+
+
+ at strong{Description}@*
+These are functions pertaining to core files.
+
+ at findex bfd_core_file_failing_command
+ at subsubsection @code{bfd_core_file_failing_command}
+ at strong{Synopsis}
+ at example
+const char *bfd_core_file_failing_command (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Return a read-only string explaining which program was running
+when it failed and produced the core file @var{abfd}.
+
+ at findex bfd_core_file_failing_signal
+ at subsubsection @code{bfd_core_file_failing_signal}
+ at strong{Synopsis}
+ at example
+int bfd_core_file_failing_signal (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Returns the signal number which caused the core dump which
+generated the file the BFD @var{abfd} is attached to.
+
+ at findex bfd_core_file_pid
+ at subsubsection @code{bfd_core_file_pid}
+ at strong{Synopsis}
+ at example
+int bfd_core_file_pid (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Returns the PID of the process the core dump the BFD
+ at var{abfd} is attached to was generated from.
+
+ at findex core_file_matches_executable_p
+ at subsubsection @code{core_file_matches_executable_p}
+ at strong{Synopsis}
+ at example
+bfd_boolean core_file_matches_executable_p
+   (bfd *core_bfd, bfd *exec_bfd);
+ at end example
+ at strong{Description}@*
+Return @code{TRUE} if the core file attached to @var{core_bfd}
+was generated by a run of the executable file attached to
+ at var{exec_bfd}, @code{FALSE} otherwise.
+
+ at findex generic_core_file_matches_executable_p
+ at subsubsection @code{generic_core_file_matches_executable_p}
+ at strong{Synopsis}
+ at example
+bfd_boolean generic_core_file_matches_executable_p
+   (bfd *core_bfd, bfd *exec_bfd);
+ at end example
+ at strong{Description}@*
+Return TRUE if the core file attached to @var{core_bfd}
+was generated by a run of the executable file attached
+to @var{exec_bfd}.  The match is based on executable
+basenames only.
+
+Note: When not able to determine the core file failing
+command or the executable name, we still return TRUE even
+though we're not sure that core file and executable match.
+This is to avoid generating a false warning in situations
+where we really don't know whether they match or not.
 
diff --git a/bfd/doc/elf.texi b/bfd/doc/elf.texi
index 8b13789..4053386 100644
--- a/bfd/doc/elf.texi
+++ b/bfd/doc/elf.texi
@@ -1 +1,9 @@
+ at section ELF backends
+BFD support for ELF formats is being worked on.
+Currently, the best supported back ends are for sparc and i386
+(running svr4 or Solaris 2).
+
+Documentation of the internals of the support code still needs
+to be written.  The code is changing quickly enough that we
+haven't bothered yet.
 
diff --git a/bfd/doc/elfcode.texi b/bfd/doc/elfcode.texi
index 8b13789..e69de29 100644
--- a/bfd/doc/elfcode.texi
+++ b/bfd/doc/elfcode.texi
@@ -1 +0,0 @@
-
diff --git a/bfd/doc/fdl.texi b/bfd/doc/fdl.texi
index 8b13789..8805f1a 100644
--- a/bfd/doc/fdl.texi
+++ b/bfd/doc/fdl.texi
@@ -1 +1,506 @@
+ at c The GNU Free Documentation License.
+ at center Version 1.3, 3 November 2008
+
+ at c This file is intended to be included within another document,
+ at c hence no sectioning command or @node.
+
+ at display
+Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ at uref{http://fsf.org/}
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+ at end display
+
+ at enumerate 0
+ at item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{free} in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense.  It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does.  But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book.  We recommend this License
+principally for works whose purpose is instruction or reference.
+
+ at item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License.  Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein.  The ``Document'', below,
+refers to any such manual or work.  Any member of the public is a
+licensee, and is addressed as ``you''.  You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject.  (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.)  The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.  If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant.  The Document may contain zero
+Invariant Sections.  If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.  A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters.  A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text.  A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+ at sc{ascii} without markup, Texinfo input format, La at TeX{} input
+format, @acronym{SGML} or @acronym{XML} using a publicly available
+ at acronym{DTD}, and standard-conforming simple @acronym{HTML},
+PostScript or @acronym{PDF} designed for human modification.  Examples
+of transparent image formats include @acronym{PNG}, @acronym{XCF} and
+ at acronym{JPG}.  Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, @acronym{SGML} or
+ at acronym{XML} for which the @acronym{DTD} and/or processing tools are
+not generally available, and the machine-generated @acronym{HTML},
+PostScript or @acronym{PDF} produced by some word processors for
+output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page.  For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+The ``publisher'' means any person or entity that distributes copies
+of the Document to the public.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language.  (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.)  To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document.  These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+ at item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License.  You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute.  However, you may accept
+compensation in exchange for copies.  If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+ at item
+COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover.  Both covers must also clearly and legibly identify
+you as the publisher of these copies.  The front cover must present
+the full title with all words of the title equally prominent and
+visible.  You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+ at item
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it.  In addition, you must do these things in the Modified Version:
+
+ at enumerate A
+ at item
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document).  You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
+ at item
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
+ at item
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+ at item
+Preserve all the copyright notices of the Document.
+
+ at item
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+ at item
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
+ at item
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+ at item
+Include an unaltered copy of this License.
+
+ at item
+Preserve the section Entitled ``History'', Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page.  If
+there is no section Entitled ``History'' in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
+ at item
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on.  These may be placed in the ``History'' section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
+ at item
+For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
+ at item
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles.  Section numbers
+or the equivalent are not considered part of the section titles.
+
+ at item
+Delete any section Entitled ``Endorsements''.  Such a section
+may not be included in the Modified Version.
+
+ at item
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
+ at item
+Preserve any Warranty Disclaimers.
+ at end enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant.  To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version.  Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity.  If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+ at item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy.  If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''.  You must delete all
+sections Entitled ``Endorsements.''
+
+ at item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+ at item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+ at item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections.  You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers.  In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+ at item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
+ at item
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation 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.  See
+ at uref{http://www.gnu.org/copyleft/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation.  If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.  If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+ at item
+RELICENSING
+
+``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works.  A
+public wiki that anybody can edit is an example of such a server.  A
+``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
+site means any set of copyrightable works thus published on the MMC
+site.
+
+``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+
+``Incorporate'' means to publish or republish a Document, in whole or
+in part, as part of another Document.
+
+An MMC is ``eligible for relicensing'' if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole
+or in part into the MMC, (1) had no cover texts or invariant sections,
+and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
+ at end enumerate
+
+ at page
+ at heading ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+ at smallexample
+ at group
+  Copyright (C)  @var{year}  @var{your name}.
+  Permission is granted to copy, distribute and/or modify this document
+  under the terms of the GNU Free Documentation License, Version 1.3
+  or any later version published by the Free Software Foundation;
+  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+  Texts.  A copy of the license is included in the section entitled ``GNU
+  Free Documentation License''.
+ at end group
+ at end smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with at dots{}Texts.'' line with this:
+
+ at smallexample
+ at group
+    with the Invariant Sections being @var{list their titles}, with
+    the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+    being @var{list}.
+ at end group
+ at end smallexample
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+ at c Local Variables:
+ at c ispell-local-pdict: "ispell-dict"
+ at c End:
 
diff --git a/bfd/doc/format.texi b/bfd/doc/format.texi
index 8b13789..9674acf 100644
--- a/bfd/doc/format.texi
+++ b/bfd/doc/format.texi
@@ -1 +1,112 @@
+ at section File formats
+A format is a BFD concept of high level file contents type. The
+formats supported by BFD are:
+
+ at itemize @bullet
+
+ at item
+ at code{bfd_object}
+ at end itemize
+The BFD may contain data, symbols, relocations and debug info.
+
+ at itemize @bullet
+
+ at item
+ at code{bfd_archive}
+ at end itemize
+The BFD contains other BFDs and an optional index.
+
+ at itemize @bullet
+
+ at item
+ at code{bfd_core}
+ at end itemize
+The BFD contains the result of an executable core dump.
+
+ at subsection File format functions
+
+
+ at findex bfd_check_format
+ at subsubsection @code{bfd_check_format}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_check_format (bfd *abfd, bfd_format format);
+ at end example
+ at strong{Description}@*
+Verify if the file attached to the BFD @var{abfd} is compatible
+with the format @var{format} (i.e., one of @code{bfd_object},
+ at code{bfd_archive} or @code{bfd_core}).
+
+If the BFD has been set to a specific target before the
+call, only the named target and format combination is
+checked. If the target has not been set, or has been set to
+ at code{default}, then all the known target backends is
+interrogated to determine a match.  If the default target
+matches, it is used.  If not, exactly one target must recognize
+the file, or an error results.
+
+The function returns @code{TRUE} on success, otherwise @code{FALSE}
+with one of the following error codes:
+
+ at itemize @bullet
+
+ at item
+ at code{bfd_error_invalid_operation} -
+if @code{format} is not one of @code{bfd_object}, @code{bfd_archive} or
+ at code{bfd_core}.
+
+ at item
+ at code{bfd_error_system_call} -
+if an error occured during a read - even some file mismatches
+can cause bfd_error_system_calls.
+
+ at item
+ at code{file_not_recognised} -
+none of the backends recognised the file format.
+
+ at item
+ at code{bfd_error_file_ambiguously_recognized} -
+more than one backend recognised the file format.
+ at end itemize
+
+ at findex bfd_check_format_matches
+ at subsubsection @code{bfd_check_format_matches}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_check_format_matches
+   (bfd *abfd, bfd_format format, char ***matching);
+ at end example
+ at strong{Description}@*
+Like @code{bfd_check_format}, except when it returns FALSE with
+ at code{bfd_errno} set to @code{bfd_error_file_ambiguously_recognized}.  In that
+case, if @var{matching} is not NULL, it will be filled in with
+a NULL-terminated list of the names of the formats that matched,
+allocated with @code{malloc}.
+Then the user may choose a format and try again.
+
+When done with the list that @var{matching} points to, the caller
+should free it.
+
+ at findex bfd_set_format
+ at subsubsection @code{bfd_set_format}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_set_format (bfd *abfd, bfd_format format);
+ at end example
+ at strong{Description}@*
+This function sets the file format of the BFD @var{abfd} to the
+format @var{format}. If the target set in the BFD does not
+support the format requested, the format is invalid, or the BFD
+is not open for writing, then an error occurs.
+
+ at findex bfd_format_string
+ at subsubsection @code{bfd_format_string}
+ at strong{Synopsis}
+ at example
+const char *bfd_format_string (bfd_format format);
+ at end example
+ at strong{Description}@*
+Return a pointer to a const string
+ at code{invalid}, @code{object}, @code{archive}, @code{core}, or @code{unknown},
+depending upon the value of @var{format}.
 
diff --git a/bfd/doc/hash.texi b/bfd/doc/hash.texi
index 8b13789..88d9585 100644
--- a/bfd/doc/hash.texi
+++ b/bfd/doc/hash.texi
@@ -1 +1,247 @@
+ at section Hash Tables
+ at cindex Hash tables
+BFD provides a simple set of hash table functions.  Routines
+are provided to initialize a hash table, to free a hash table,
+to look up a string in a hash table and optionally create an
+entry for it, and to traverse a hash table.  There is
+currently no routine to delete an string from a hash table.
+
+The basic hash table does not permit any data to be stored
+with a string.  However, a hash table is designed to present a
+base class from which other types of hash tables may be
+derived.  These derived types may store additional information
+with the string.  Hash tables were implemented in this way,
+rather than simply providing a data pointer in a hash table
+entry, because they were designed for use by the linker back
+ends.  The linker may create thousands of hash table entries,
+and the overhead of allocating private data and storing and
+following pointers becomes noticeable.
+
+The basic hash table code is in @code{hash.c}.
+
+ at menu
+* Creating and Freeing a Hash Table::
+* Looking Up or Entering a String::
+* Traversing a Hash Table::
+* Deriving a New Hash Table Type::
+ at end menu
+
+ at node Creating and Freeing a Hash Table, Looking Up or Entering a String, Hash Tables, Hash Tables
+ at subsection Creating and freeing a hash table
+ at findex bfd_hash_table_init
+ at findex bfd_hash_table_init_n
+To create a hash table, create an instance of a @code{struct
+bfd_hash_table} (defined in @code{bfd.h}) and call
+ at code{bfd_hash_table_init} (if you know approximately how many
+entries you will need, the function @code{bfd_hash_table_init_n},
+which takes a @var{size} argument, may be used).
+ at code{bfd_hash_table_init} returns @code{FALSE} if some sort of
+error occurs.
+
+ at findex bfd_hash_newfunc
+The function @code{bfd_hash_table_init} take as an argument a
+function to use to create new entries.  For a basic hash
+table, use the function @code{bfd_hash_newfunc}.  @xref{Deriving
+a New Hash Table Type}, for why you would want to use a
+different value for this argument.
+
+ at findex bfd_hash_allocate
+ at code{bfd_hash_table_init} will create an objalloc which will be
+used to allocate new entries.  You may allocate memory on this
+objalloc using @code{bfd_hash_allocate}.
+
+ at findex bfd_hash_table_free
+Use @code{bfd_hash_table_free} to free up all the memory that has
+been allocated for a hash table.  This will not free up the
+ at code{struct bfd_hash_table} itself, which you must provide.
+
+ at findex bfd_hash_set_default_size
+Use @code{bfd_hash_set_default_size} to set the default size of
+hash table to use.
+
+ at node Looking Up or Entering a String, Traversing a Hash Table, Creating and Freeing a Hash Table, Hash Tables
+ at subsection Looking up or entering a string
+ at findex bfd_hash_lookup
+The function @code{bfd_hash_lookup} is used both to look up a
+string in the hash table and to create a new entry.
+
+If the @var{create} argument is @code{FALSE}, @code{bfd_hash_lookup}
+will look up a string.  If the string is found, it will
+returns a pointer to a @code{struct bfd_hash_entry}.  If the
+string is not found in the table @code{bfd_hash_lookup} will
+return @code{NULL}.  You should not modify any of the fields in
+the returns @code{struct bfd_hash_entry}.
+
+If the @var{create} argument is @code{TRUE}, the string will be
+entered into the hash table if it is not already there.
+Either way a pointer to a @code{struct bfd_hash_entry} will be
+returned, either to the existing structure or to a newly
+created one.  In this case, a @code{NULL} return means that an
+error occurred.
+
+If the @var{create} argument is @code{TRUE}, and a new entry is
+created, the @var{copy} argument is used to decide whether to
+copy the string onto the hash table objalloc or not.  If
+ at var{copy} is passed as @code{FALSE}, you must be careful not to
+deallocate or modify the string as long as the hash table
+exists.
+
+ at node Traversing a Hash Table, Deriving a New Hash Table Type, Looking Up or Entering a String, Hash Tables
+ at subsection Traversing a hash table
+ at findex bfd_hash_traverse
+The function @code{bfd_hash_traverse} may be used to traverse a
+hash table, calling a function on each element.  The traversal
+is done in a random order.
+
+ at code{bfd_hash_traverse} takes as arguments a function and a
+generic @code{void *} pointer.  The function is called with a
+hash table entry (a @code{struct bfd_hash_entry *}) and the
+generic pointer passed to @code{bfd_hash_traverse}.  The function
+must return a @code{boolean} value, which indicates whether to
+continue traversing the hash table.  If the function returns
+ at code{FALSE}, @code{bfd_hash_traverse} will stop the traversal and
+return immediately.
+
+ at node Deriving a New Hash Table Type, , Traversing a Hash Table, Hash Tables
+ at subsection Deriving a new hash table type
+Many uses of hash tables want to store additional information
+which each entry in the hash table.  Some also find it
+convenient to store additional information with the hash table
+itself.  This may be done using a derived hash table.
+
+Since C is not an object oriented language, creating a derived
+hash table requires sticking together some boilerplate
+routines with a few differences specific to the type of hash
+table you want to create.
+
+An example of a derived hash table is the linker hash table.
+The structures for this are defined in @code{bfdlink.h}.  The
+functions are in @code{linker.c}.
+
+You may also derive a hash table from an already derived hash
+table.  For example, the a.out linker backend code uses a hash
+table derived from the linker hash table.
+
+ at menu
+* Define the Derived Structures::
+* Write the Derived Creation Routine::
+* Write Other Derived Routines::
+ at end menu
+
+ at node Define the Derived Structures, Write the Derived Creation Routine, Deriving a New Hash Table Type, Deriving a New Hash Table Type
+ at subsubsection Define the derived structures
+You must define a structure for an entry in the hash table,
+and a structure for the hash table itself.
+
+The first field in the structure for an entry in the hash
+table must be of the type used for an entry in the hash table
+you are deriving from.  If you are deriving from a basic hash
+table this is @code{struct bfd_hash_entry}, which is defined in
+ at code{bfd.h}.  The first field in the structure for the hash
+table itself must be of the type of the hash table you are
+deriving from itself.  If you are deriving from a basic hash
+table, this is @code{struct bfd_hash_table}.
+
+For example, the linker hash table defines @code{struct
+bfd_link_hash_entry} (in @code{bfdlink.h}).  The first field,
+ at code{root}, is of type @code{struct bfd_hash_entry}.  Similarly,
+the first field in @code{struct bfd_link_hash_table}, @code{table},
+is of type @code{struct bfd_hash_table}.
+
+ at node Write the Derived Creation Routine, Write Other Derived Routines, Define the Derived Structures, Deriving a New Hash Table Type
+ at subsubsection Write the derived creation routine
+You must write a routine which will create and initialize an
+entry in the hash table.  This routine is passed as the
+function argument to @code{bfd_hash_table_init}.
+
+In order to permit other hash tables to be derived from the
+hash table you are creating, this routine must be written in a
+standard way.
+
+The first argument to the creation routine is a pointer to a
+hash table entry.  This may be @code{NULL}, in which case the
+routine should allocate the right amount of space.  Otherwise
+the space has already been allocated by a hash table type
+derived from this one.
+
+After allocating space, the creation routine must call the
+creation routine of the hash table type it is derived from,
+passing in a pointer to the space it just allocated.  This
+will initialize any fields used by the base hash table.
+
+Finally the creation routine must initialize any local fields
+for the new hash table type.
+
+Here is a boilerplate example of a creation routine.
+ at var{function_name} is the name of the routine.
+ at var{entry_type} is the type of an entry in the hash table you
+are creating.  @var{base_newfunc} is the name of the creation
+routine of the hash table type your hash table is derived
+from.
+
+
+ at example
+struct bfd_hash_entry *
+ at var{function_name} (struct bfd_hash_entry *entry,
+                     struct bfd_hash_table *table,
+                     const char *string)
+@{
+  struct @var{entry_type} *ret = (@var{entry_type} *) entry;
+
+ /* Allocate the structure if it has not already been allocated by a
+    derived class.  */
+  if (ret == NULL)
+    @{
+      ret = bfd_hash_allocate (table, sizeof (* ret));
+      if (ret == NULL)
+        return NULL;
+    @}
+
+ /* Call the allocation method of the base class.  */
+  ret = ((@var{entry_type} *)
+        @var{base_newfunc} ((struct bfd_hash_entry *) ret, table, string));
+
+ /* Initialize the local fields here.  */
+
+  return (struct bfd_hash_entry *) ret;
+@}
+ at end example
+ at strong{Description}@*
+The creation routine for the linker hash table, which is in
+ at code{linker.c}, looks just like this example.
+ at var{function_name} is @code{_bfd_link_hash_newfunc}.
+ at var{entry_type} is @code{struct bfd_link_hash_entry}.
+ at var{base_newfunc} is @code{bfd_hash_newfunc}, the creation
+routine for a basic hash table.
+
+ at code{_bfd_link_hash_newfunc} also initializes the local fields
+in a linker hash table entry: @code{type}, @code{written} and
+ at code{next}.
+
+ at node Write Other Derived Routines, , Write the Derived Creation Routine, Deriving a New Hash Table Type
+ at subsubsection Write other derived routines
+You will want to write other routines for your new hash table,
+as well.
+
+You will want an initialization routine which calls the
+initialization routine of the hash table you are deriving from
+and initializes any other local fields.  For the linker hash
+table, this is @code{_bfd_link_hash_table_init} in @code{linker.c}.
+
+You will want a lookup routine which calls the lookup routine
+of the hash table you are deriving from and casts the result.
+The linker hash table uses @code{bfd_link_hash_lookup} in
+ at code{linker.c} (this actually takes an additional argument which
+it uses to decide how to return the looked up value).
+
+You may want a traversal routine.  This should just call the
+traversal routine of the hash table you are deriving from with
+appropriate casts.  The linker hash table uses
+ at code{bfd_link_hash_traverse} in @code{linker.c}.
+
+These routines may simply be defined as macros.  For example,
+the a.out backend linker hash table, which is derived from the
+linker hash table, uses macros for the lookup and traversal
+routines.  These are @code{aout_link_hash_lookup} and
+ at code{aout_link_hash_traverse} in aoutx.h.
 
diff --git a/bfd/doc/init.texi b/bfd/doc/init.texi
index 8b13789..ab735f8 100644
--- a/bfd/doc/init.texi
+++ b/bfd/doc/init.texi
@@ -1 +1,16 @@
+ at section Initialization
+
+
+ at subsection Initialization functions
+These are the functions that handle initializing a BFD.
+
+ at findex bfd_init
+ at subsubsection @code{bfd_init}
+ at strong{Synopsis}
+ at example
+void bfd_init (void);
+ at end example
+ at strong{Description}@*
+This routine must be called before any other BFD function to
+initialize magical internal data structures.
 
diff --git a/bfd/doc/libbfd.texi b/bfd/doc/libbfd.texi
index 8b13789..b0b0300 100644
--- a/bfd/doc/libbfd.texi
+++ b/bfd/doc/libbfd.texi
@@ -1 +1,179 @@
+ at section Implementation details
+
+
+ at subsection Internal functions
+
+
+ at strong{Description}@*
+These routines are used within BFD.
+They are not intended for export, but are documented here for
+completeness.
+
+ at findex bfd_write_bigendian_4byte_int
+ at subsubsection @code{bfd_write_bigendian_4byte_int}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_write_bigendian_4byte_int (bfd *, unsigned int);
+ at end example
+ at strong{Description}@*
+Write a 4 byte integer @var{i} to the output BFD @var{abfd}, in big
+endian order regardless of what else is going on.  This is useful in
+archives.
+
+ at findex bfd_put_size
+ at subsubsection @code{bfd_put_size}
+ at findex bfd_get_size
+ at subsubsection @code{bfd_get_size}
+ at strong{Description}@*
+These macros as used for reading and writing raw data in
+sections; each access (except for bytes) is vectored through
+the target format of the BFD and mangled accordingly. The
+mangling performs any necessary endian translations and
+removes alignment restrictions.  Note that types accepted and
+returned by these macros are identical so they can be swapped
+around in macros---for example, @file{libaout.h} defines @code{GET_WORD}
+to either @code{bfd_get_32} or @code{bfd_get_64}.
+
+In the put routines, @var{val} must be a @code{bfd_vma}.  If we are on a
+system without prototypes, the caller is responsible for making
+sure that is true, with a cast if necessary.  We don't cast
+them in the macro definitions because that would prevent @code{lint}
+or @code{gcc -Wall} from detecting sins such as passing a pointer.
+To detect calling these with less than a @code{bfd_vma}, use
+ at code{gcc -Wconversion} on a host with 64 bit @code{bfd_vma}'s.
+ at example
+
+/* Byte swapping macros for user section data.  */
+
+#define bfd_put_8(abfd, val, ptr) \
+  ((void) (*((unsigned char *) (ptr)) = (val) & 0xff))
+#define bfd_put_signed_8 \
+  bfd_put_8
+#define bfd_get_8(abfd, ptr) \
+  (*(const unsigned char *) (ptr) & 0xff)
+#define bfd_get_signed_8(abfd, ptr) \
+  (((*(const unsigned char *) (ptr) & 0xff) ^ 0x80) - 0x80)
+
+#define bfd_put_16(abfd, val, ptr) \
+  BFD_SEND (abfd, bfd_putx16, ((val),(ptr)))
+#define bfd_put_signed_16 \
+  bfd_put_16
+#define bfd_get_16(abfd, ptr) \
+  BFD_SEND (abfd, bfd_getx16, (ptr))
+#define bfd_get_signed_16(abfd, ptr) \
+  BFD_SEND (abfd, bfd_getx_signed_16, (ptr))
+
+#define bfd_put_32(abfd, val, ptr) \
+  BFD_SEND (abfd, bfd_putx32, ((val),(ptr)))
+#define bfd_put_signed_32 \
+  bfd_put_32
+#define bfd_get_32(abfd, ptr) \
+  BFD_SEND (abfd, bfd_getx32, (ptr))
+#define bfd_get_signed_32(abfd, ptr) \
+  BFD_SEND (abfd, bfd_getx_signed_32, (ptr))
+
+#define bfd_put_64(abfd, val, ptr) \
+  BFD_SEND (abfd, bfd_putx64, ((val), (ptr)))
+#define bfd_put_signed_64 \
+  bfd_put_64
+#define bfd_get_64(abfd, ptr) \
+  BFD_SEND (abfd, bfd_getx64, (ptr))
+#define bfd_get_signed_64(abfd, ptr) \
+  BFD_SEND (abfd, bfd_getx_signed_64, (ptr))
+
+#define bfd_get(bits, abfd, ptr)                       \
+  ((bits) == 8 ? (bfd_vma) bfd_get_8 (abfd, ptr)       \
+   : (bits) == 16 ? bfd_get_16 (abfd, ptr)             \
+   : (bits) == 32 ? bfd_get_32 (abfd, ptr)             \
+   : (bits) == 64 ? bfd_get_64 (abfd, ptr)             \
+   : (abort (), (bfd_vma) - 1))
+
+#define bfd_put(bits, abfd, val, ptr)                  \
+  ((bits) == 8 ? bfd_put_8  (abfd, val, ptr)           \
+   : (bits) == 16 ? bfd_put_16 (abfd, val, ptr)                \
+   : (bits) == 32 ? bfd_put_32 (abfd, val, ptr)                \
+   : (bits) == 64 ? bfd_put_64 (abfd, val, ptr)                \
+   : (abort (), (void) 0))
+
+ at end example
+
+ at findex bfd_h_put_size
+ at subsubsection @code{bfd_h_put_size}
+ at strong{Description}@*
+These macros have the same function as their @code{bfd_get_x}
+brethren, except that they are used for removing information
+for the header records of object files. Believe it or not,
+some object files keep their header records in big endian
+order and their data in little endian order.
+ at example
+
+/* Byte swapping macros for file header data.  */
+
+#define bfd_h_put_8(abfd, val, ptr) \
+  bfd_put_8 (abfd, val, ptr)
+#define bfd_h_put_signed_8(abfd, val, ptr) \
+  bfd_put_8 (abfd, val, ptr)
+#define bfd_h_get_8(abfd, ptr) \
+  bfd_get_8 (abfd, ptr)
+#define bfd_h_get_signed_8(abfd, ptr) \
+  bfd_get_signed_8 (abfd, ptr)
+
+#define bfd_h_put_16(abfd, val, ptr) \
+  BFD_SEND (abfd, bfd_h_putx16, (val, ptr))
+#define bfd_h_put_signed_16 \
+  bfd_h_put_16
+#define bfd_h_get_16(abfd, ptr) \
+  BFD_SEND (abfd, bfd_h_getx16, (ptr))
+#define bfd_h_get_signed_16(abfd, ptr) \
+  BFD_SEND (abfd, bfd_h_getx_signed_16, (ptr))
+
+#define bfd_h_put_32(abfd, val, ptr) \
+  BFD_SEND (abfd, bfd_h_putx32, (val, ptr))
+#define bfd_h_put_signed_32 \
+  bfd_h_put_32
+#define bfd_h_get_32(abfd, ptr) \
+  BFD_SEND (abfd, bfd_h_getx32, (ptr))
+#define bfd_h_get_signed_32(abfd, ptr) \
+  BFD_SEND (abfd, bfd_h_getx_signed_32, (ptr))
+
+#define bfd_h_put_64(abfd, val, ptr) \
+  BFD_SEND (abfd, bfd_h_putx64, (val, ptr))
+#define bfd_h_put_signed_64 \
+  bfd_h_put_64
+#define bfd_h_get_64(abfd, ptr) \
+  BFD_SEND (abfd, bfd_h_getx64, (ptr))
+#define bfd_h_get_signed_64(abfd, ptr) \
+  BFD_SEND (abfd, bfd_h_getx_signed_64, (ptr))
+
+/* Aliases for the above, which should eventually go away.  */
+
+#define H_PUT_64  bfd_h_put_64
+#define H_PUT_32  bfd_h_put_32
+#define H_PUT_16  bfd_h_put_16
+#define H_PUT_8   bfd_h_put_8
+#define H_PUT_S64 bfd_h_put_signed_64
+#define H_PUT_S32 bfd_h_put_signed_32
+#define H_PUT_S16 bfd_h_put_signed_16
+#define H_PUT_S8  bfd_h_put_signed_8
+#define H_GET_64  bfd_h_get_64
+#define H_GET_32  bfd_h_get_32
+#define H_GET_16  bfd_h_get_16
+#define H_GET_8   bfd_h_get_8
+#define H_GET_S64 bfd_h_get_signed_64
+#define H_GET_S32 bfd_h_get_signed_32
+#define H_GET_S16 bfd_h_get_signed_16
+#define H_GET_S8  bfd_h_get_signed_8
+
+
+ at end example
+
+ at findex bfd_log2
+ at subsubsection @code{bfd_log2}
+ at strong{Synopsis}
+ at example
+unsigned int bfd_log2 (bfd_vma x);
+ at end example
+ at strong{Description}@*
+Return the log base 2 of the value supplied, rounded up.  E.g., an
+ at var{x} of 1025 returns 11.  A @var{x} of 0 returns 0.
 
diff --git a/bfd/doc/linker.texi b/bfd/doc/linker.texi
index 8b13789..eae1662 100644
--- a/bfd/doc/linker.texi
+++ b/bfd/doc/linker.texi
@@ -1 +1,432 @@
+ at section Linker Functions
+ at cindex Linker
+The linker uses three special entry points in the BFD target
+vector.  It is not necessary to write special routines for
+these entry points when creating a new BFD back end, since
+generic versions are provided.  However, writing them can
+speed up linking and make it use significantly less runtime
+memory.
+
+The first routine creates a hash table used by the other
+routines.  The second routine adds the symbols from an object
+file to the hash table.  The third routine takes all the
+object files and links them together to create the output
+file.  These routines are designed so that the linker proper
+does not need to know anything about the symbols in the object
+files that it is linking.  The linker merely arranges the
+sections as directed by the linker script and lets BFD handle
+the details of symbols and relocs.
+
+The second routine and third routines are passed a pointer to
+a @code{struct bfd_link_info} structure (defined in
+ at code{bfdlink.h}) which holds information relevant to the link,
+including the linker hash table (which was created by the
+first routine) and a set of callback functions to the linker
+proper.
+
+The generic linker routines are in @code{linker.c}, and use the
+header file @code{genlink.h}.  As of this writing, the only back
+ends which have implemented versions of these routines are
+a.out (in @code{aoutx.h}) and ECOFF (in @code{ecoff.c}).  The a.out
+routines are used as examples throughout this section.
+
+ at menu
+* Creating a Linker Hash Table::
+* Adding Symbols to the Hash Table::
+* Performing the Final Link::
+ at end menu
+
+ at node Creating a Linker Hash Table, Adding Symbols to the Hash Table, Linker Functions, Linker Functions
+ at subsection Creating a linker hash table
+ at cindex _bfd_link_hash_table_create in target vector
+ at cindex target vector (_bfd_link_hash_table_create)
+The linker routines must create a hash table, which must be
+derived from @code{struct bfd_link_hash_table} described in
+ at code{bfdlink.c}.  @xref{Hash Tables}, for information on how to
+create a derived hash table.  This entry point is called using
+the target vector of the linker output file.
+
+The @code{_bfd_link_hash_table_create} entry point must allocate
+and initialize an instance of the desired hash table.  If the
+back end does not require any additional information to be
+stored with the entries in the hash table, the entry point may
+simply create a @code{struct bfd_link_hash_table}.  Most likely,
+however, some additional information will be needed.
+
+For example, with each entry in the hash table the a.out
+linker keeps the index the symbol has in the final output file
+(this index number is used so that when doing a relocatable
+link the symbol index used in the output file can be quickly
+filled in when copying over a reloc).  The a.out linker code
+defines the required structures and functions for a hash table
+derived from @code{struct bfd_link_hash_table}.  The a.out linker
+hash table is created by the function
+ at code{NAME(aout,link_hash_table_create)}; it simply allocates
+space for the hash table, initializes it, and returns a
+pointer to it.
+
+When writing the linker routines for a new back end, you will
+generally not know exactly which fields will be required until
+you have finished.  You should simply create a new hash table
+which defines no additional fields, and then simply add fields
+as they become necessary.
+
+ at node Adding Symbols to the Hash Table, Performing the Final Link, Creating a Linker Hash Table, Linker Functions
+ at subsection Adding symbols to the hash table
+ at cindex _bfd_link_add_symbols in target vector
+ at cindex target vector (_bfd_link_add_symbols)
+The linker proper will call the @code{_bfd_link_add_symbols}
+entry point for each object file or archive which is to be
+linked (typically these are the files named on the command
+line, but some may also come from the linker script).  The
+entry point is responsible for examining the file.  For an
+object file, BFD must add any relevant symbol information to
+the hash table.  For an archive, BFD must determine which
+elements of the archive should be used and adding them to the
+link.
+
+The a.out version of this entry point is
+ at code{NAME(aout,link_add_symbols)}.
+
+ at menu
+* Differing file formats::
+* Adding symbols from an object file::
+* Adding symbols from an archive::
+ at end menu
+
+ at node Differing file formats, Adding symbols from an object file, Adding Symbols to the Hash Table, Adding Symbols to the Hash Table
+ at subsubsection Differing file formats
+Normally all the files involved in a link will be of the same
+format, but it is also possible to link together different
+format object files, and the back end must support that.  The
+ at code{_bfd_link_add_symbols} entry point is called via the target
+vector of the file to be added.  This has an important
+consequence: the function may not assume that the hash table
+is the type created by the corresponding
+ at code{_bfd_link_hash_table_create} vector.  All the
+ at code{_bfd_link_add_symbols} function can assume about the hash
+table is that it is derived from @code{struct
+bfd_link_hash_table}.
+
+Sometimes the @code{_bfd_link_add_symbols} function must store
+some information in the hash table entry to be used by the
+ at code{_bfd_final_link} function.  In such a case the output bfd
+xvec must be checked to make sure that the hash table was
+created by an object file of the same format.
+
+The @code{_bfd_final_link} routine must be prepared to handle a
+hash entry without any extra information added by the
+ at code{_bfd_link_add_symbols} function.  A hash entry without
+extra information will also occur when the linker script
+directs the linker to create a symbol.  Note that, regardless
+of how a hash table entry is added, all the fields will be
+initialized to some sort of null value by the hash table entry
+initialization function.
+
+See @code{ecoff_link_add_externals} for an example of how to
+check the output bfd before saving information (in this
+case, the ECOFF external symbol debugging information) in a
+hash table entry.
+
+ at node Adding symbols from an object file, Adding symbols from an archive, Differing file formats, Adding Symbols to the Hash Table
+ at subsubsection Adding symbols from an object file
+When the @code{_bfd_link_add_symbols} routine is passed an object
+file, it must add all externally visible symbols in that
+object file to the hash table.  The actual work of adding the
+symbol to the hash table is normally handled by the function
+ at code{_bfd_generic_link_add_one_symbol}.  The
+ at code{_bfd_link_add_symbols} routine is responsible for reading
+all the symbols from the object file and passing the correct
+information to @code{_bfd_generic_link_add_one_symbol}.
+
+The @code{_bfd_link_add_symbols} routine should not use
+ at code{bfd_canonicalize_symtab} to read the symbols.  The point of
+providing this routine is to avoid the overhead of converting
+the symbols into generic @code{asymbol} structures.
+
+ at findex _bfd_generic_link_add_one_symbol
+ at code{_bfd_generic_link_add_one_symbol} handles the details of
+combining common symbols, warning about multiple definitions,
+and so forth.  It takes arguments which describe the symbol to
+add, notably symbol flags, a section, and an offset.  The
+symbol flags include such things as @code{BSF_WEAK} or
+ at code{BSF_INDIRECT}.  The section is a section in the object
+file, or something like @code{bfd_und_section_ptr} for an undefined
+symbol or @code{bfd_com_section_ptr} for a common symbol.
+
+If the @code{_bfd_final_link} routine is also going to need to
+read the symbol information, the @code{_bfd_link_add_symbols}
+routine should save it somewhere attached to the object file
+BFD.  However, the information should only be saved if the
+ at code{keep_memory} field of the @code{info} argument is TRUE, so
+that the @code{-no-keep-memory} linker switch is effective.
+
+The a.out function which adds symbols from an object file is
+ at code{aout_link_add_object_symbols}, and most of the interesting
+work is in @code{aout_link_add_symbols}.  The latter saves
+pointers to the hash tables entries created by
+ at code{_bfd_generic_link_add_one_symbol} indexed by symbol number,
+so that the @code{_bfd_final_link} routine does not have to call
+the hash table lookup routine to locate the entry.
+
+ at node Adding symbols from an archive, , Adding symbols from an object file, Adding Symbols to the Hash Table
+ at subsubsection Adding symbols from an archive
+When the @code{_bfd_link_add_symbols} routine is passed an
+archive, it must look through the symbols defined by the
+archive and decide which elements of the archive should be
+included in the link.  For each such element it must call the
+ at code{add_archive_element} linker callback, and it must add the
+symbols from the object file to the linker hash table.  (The
+callback may in fact indicate that a replacement BFD should be
+used, in which case the symbols from that BFD should be added
+to the linker hash table instead.)
+
+ at findex _bfd_generic_link_add_archive_symbols
+In most cases the work of looking through the symbols in the
+archive should be done by the
+ at code{_bfd_generic_link_add_archive_symbols} function.  This
+function builds a hash table from the archive symbol table and
+looks through the list of undefined symbols to see which
+elements should be included.
+ at code{_bfd_generic_link_add_archive_symbols} is passed a function
+to call to make the final decision about adding an archive
+element to the link and to do the actual work of adding the
+symbols to the linker hash table.
+
+The function passed to
+ at code{_bfd_generic_link_add_archive_symbols} must read the
+symbols of the archive element and decide whether the archive
+element should be included in the link.  If the element is to
+be included, the @code{add_archive_element} linker callback
+routine must be called with the element as an argument, and
+the element's symbols must be added to the linker hash table
+just as though the element had itself been passed to the
+ at code{_bfd_link_add_symbols} function.  The @code{add_archive_element}
+callback has the option to indicate that it would like to
+replace the element archive with a substitute BFD, in which
+case it is the symbols of that substitute BFD that must be
+added to the linker hash table instead.
+
+When the a.out @code{_bfd_link_add_symbols} function receives an
+archive, it calls @code{_bfd_generic_link_add_archive_symbols}
+passing @code{aout_link_check_archive_element} as the function
+argument. @code{aout_link_check_archive_element} calls
+ at code{aout_link_check_ar_symbols}.  If the latter decides to add
+the element (an element is only added if it provides a real,
+non-common, definition for a previously undefined or common
+symbol) it calls the @code{add_archive_element} callback and then
+ at code{aout_link_check_archive_element} calls
+ at code{aout_link_add_symbols} to actually add the symbols to the
+linker hash table - possibly those of a substitute BFD, if the
+ at code{add_archive_element} callback avails itself of that option.
+
+The ECOFF back end is unusual in that it does not normally
+call @code{_bfd_generic_link_add_archive_symbols}, because ECOFF
+archives already contain a hash table of symbols.  The ECOFF
+back end searches the archive itself to avoid the overhead of
+creating a new hash table.
+
+ at node Performing the Final Link, , Adding Symbols to the Hash Table, Linker Functions
+ at subsection Performing the final link
+ at cindex _bfd_link_final_link in target vector
+ at cindex target vector (_bfd_final_link)
+When all the input files have been processed, the linker calls
+the @code{_bfd_final_link} entry point of the output BFD.  This
+routine is responsible for producing the final output file,
+which has several aspects.  It must relocate the contents of
+the input sections and copy the data into the output sections.
+It must build an output symbol table including any local
+symbols from the input files and the global symbols from the
+hash table.  When producing relocatable output, it must
+modify the input relocs and write them into the output file.
+There may also be object format dependent work to be done.
+
+The linker will also call the @code{write_object_contents} entry
+point when the BFD is closed.  The two entry points must work
+together in order to produce the correct output file.
+
+The details of how this works are inevitably dependent upon
+the specific object file format.  The a.out
+ at code{_bfd_final_link} routine is @code{NAME(aout,final_link)}.
+
+ at menu
+* Information provided by the linker::
+* Relocating the section contents::
+* Writing the symbol table::
+ at end menu
+
+ at node Information provided by the linker, Relocating the section contents, Performing the Final Link, Performing the Final Link
+ at subsubsection Information provided by the linker
+Before the linker calls the @code{_bfd_final_link} entry point,
+it sets up some data structures for the function to use.
+
+The @code{input_bfds} field of the @code{bfd_link_info} structure
+will point to a list of all the input files included in the
+link.  These files are linked through the @code{link_next} field
+of the @code{bfd} structure.
+
+Each section in the output file will have a list of
+ at code{link_order} structures attached to the @code{map_head.link_order}
+field (the @code{link_order} structure is defined in
+ at code{bfdlink.h}).  These structures describe how to create the
+contents of the output section in terms of the contents of
+various input sections, fill constants, and, eventually, other
+types of information.  They also describe relocs that must be
+created by the BFD backend, but do not correspond to any input
+file; this is used to support -Ur, which builds constructors
+while generating a relocatable object file.
+
+ at node Relocating the section contents, Writing the symbol table, Information provided by the linker, Performing the Final Link
+ at subsubsection Relocating the section contents
+The @code{_bfd_final_link} function should look through the
+ at code{link_order} structures attached to each section of the
+output file.  Each @code{link_order} structure should either be
+handled specially, or it should be passed to the function
+ at code{_bfd_default_link_order} which will do the right thing
+(@code{_bfd_default_link_order} is defined in @code{linker.c}).
+
+For efficiency, a @code{link_order} of type
+ at code{bfd_indirect_link_order} whose associated section belongs
+to a BFD of the same format as the output BFD must be handled
+specially.  This type of @code{link_order} describes part of an
+output section in terms of a section belonging to one of the
+input files.  The @code{_bfd_final_link} function should read the
+contents of the section and any associated relocs, apply the
+relocs to the section contents, and write out the modified
+section contents.  If performing a relocatable link, the
+relocs themselves must also be modified and written out.
+
+ at findex _bfd_relocate_contents
+ at findex _bfd_final_link_relocate
+The functions @code{_bfd_relocate_contents} and
+ at code{_bfd_final_link_relocate} provide some general support for
+performing the actual relocations, notably overflow checking.
+Their arguments include information about the symbol the
+relocation is against and a @code{reloc_howto_type} argument
+which describes the relocation to perform.  These functions
+are defined in @code{reloc.c}.
+
+The a.out function which handles reading, relocating, and
+writing section contents is @code{aout_link_input_section}.  The
+actual relocation is done in @code{aout_link_input_section_std}
+and @code{aout_link_input_section_ext}.
+
+ at node Writing the symbol table, , Relocating the section contents, Performing the Final Link
+ at subsubsection Writing the symbol table
+The @code{_bfd_final_link} function must gather all the symbols
+in the input files and write them out.  It must also write out
+all the symbols in the global hash table.  This must be
+controlled by the @code{strip} and @code{discard} fields of the
+ at code{bfd_link_info} structure.
+
+The local symbols of the input files will not have been
+entered into the linker hash table.  The @code{_bfd_final_link}
+routine must consider each input file and include the symbols
+in the output file.  It may be convenient to do this when
+looking through the @code{link_order} structures, or it may be
+done by stepping through the @code{input_bfds} list.
+
+The @code{_bfd_final_link} routine must also traverse the global
+hash table to gather all the externally visible symbols.  It
+is possible that most of the externally visible symbols may be
+written out when considering the symbols of each input file,
+but it is still necessary to traverse the hash table since the
+linker script may have defined some symbols that are not in
+any of the input files.
+
+The @code{strip} field of the @code{bfd_link_info} structure
+controls which symbols are written out.  The possible values
+are listed in @code{bfdlink.h}.  If the value is @code{strip_some},
+then the @code{keep_hash} field of the @code{bfd_link_info}
+structure is a hash table of symbols to keep; each symbol
+should be looked up in this hash table, and only symbols which
+are present should be included in the output file.
+
+If the @code{strip} field of the @code{bfd_link_info} structure
+permits local symbols to be written out, the @code{discard} field
+is used to further controls which local symbols are included
+in the output file.  If the value is @code{discard_l}, then all
+local symbols which begin with a certain prefix are discarded;
+this is controlled by the @code{bfd_is_local_label_name} entry point.
+
+The a.out backend handles symbols by calling
+ at code{aout_link_write_symbols} on each input BFD and then
+traversing the global hash table with the function
+ at code{aout_link_write_other_symbol}.  It builds a string table
+while writing out the symbols, which is written to the output
+file at the end of @code{NAME(aout,final_link)}.
+
+ at findex bfd_link_split_section
+ at subsubsection @code{bfd_link_split_section}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_link_split_section (bfd *abfd, asection *sec);
+ at end example
+ at strong{Description}@*
+Return nonzero if @var{sec} should be split during a
+reloceatable or final link.
+ at example
+#define bfd_link_split_section(abfd, sec) \
+       BFD_SEND (abfd, _bfd_link_split_section, (abfd, sec))
+
+ at end example
+
+ at findex bfd_section_already_linked
+ at subsubsection @code{bfd_section_already_linked}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_section_already_linked (bfd *abfd,
+    asection *sec,
+    struct bfd_link_info *info);
+ at end example
+ at strong{Description}@*
+Check if @var{data} has been already linked during a reloceatable
+or final link.  Return TRUE if it has.
+ at example
+#define bfd_section_already_linked(abfd, sec, info) \
+       BFD_SEND (abfd, _section_already_linked, (abfd, sec, info))
+
+ at end example
+
+ at findex bfd_generic_define_common_symbol
+ at subsubsection @code{bfd_generic_define_common_symbol}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_generic_define_common_symbol
+   (bfd *output_bfd, struct bfd_link_info *info,
+    struct bfd_link_hash_entry *h);
+ at end example
+ at strong{Description}@*
+Convert common symbol @var{h} into a defined symbol.
+Return TRUE on success and FALSE on failure.
+ at example
+#define bfd_define_common_symbol(output_bfd, info, h) \
+       BFD_SEND (output_bfd, _bfd_define_common_symbol, (output_bfd, info, h))
+
+ at end example
+
+ at findex bfd_find_version_for_sym 
+ at subsubsection @code{bfd_find_version_for_sym }
+ at strong{Synopsis}
+ at example
+struct bfd_elf_version_tree * bfd_find_version_for_sym
+   (struct bfd_elf_version_tree *verdefs,
+    const char *sym_name, bfd_boolean *hide);
+ at end example
+ at strong{Description}@*
+Search an elf version script tree for symbol versioning
+info and export / don't-export status for a given symbol.
+Return non-NULL on success and NULL on failure; also sets
+the output @samp{hide} boolean parameter.
+
+ at findex bfd_hide_sym_by_version
+ at subsubsection @code{bfd_hide_sym_by_version}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_hide_sym_by_version
+   (struct bfd_elf_version_tree *verdefs, const char *sym_name);
+ at end example
+ at strong{Description}@*
+Search an elf version script tree for symbol versioning
+info for a given symbol.  Return TRUE if the symbol is hidden.
 
diff --git a/bfd/doc/mmo.texi b/bfd/doc/mmo.texi
index 8b13789..b0d726a 100644
--- a/bfd/doc/mmo.texi
+++ b/bfd/doc/mmo.texi
@@ -1 +1,365 @@
+ at section mmo backend
+The mmo object format is used exclusively together with Professor
+Donald E.@: Knuth's educational 64-bit processor MMIX.  The simulator
+ at command{mmix} which is available at
+ at url{http://www-cs-faculty.stanford.edu/~knuth/programs/mmix.tar.gz}
+understands this format.  That package also includes a combined
+assembler and linker called @command{mmixal}.  The mmo format has
+no advantages feature-wise compared to e.g. ELF.  It is a simple
+non-relocatable object format with no support for archives or
+debugging information, except for symbol value information and
+line numbers (which is not yet implemented in BFD).  See
+ at url{http://www-cs-faculty.stanford.edu/~knuth/mmix.html} for more
+information about MMIX.  The ELF format is used for intermediate
+object files in the BFD implementation.
 
+ at c We want to xref the symbol table node.  A feature in "chew"
+ at c requires that "commands" do not contain spaces in the
+ at c arguments.  Hence the hyphen in "Symbol-table".
+ at menu
+* File layout::
+* Symbol-table::
+* mmo section mapping::
+ at end menu
+
+ at node File layout, Symbol-table, mmo, mmo
+ at subsection File layout
+The mmo file contents is not partitioned into named sections as
+with e.g.@: ELF.  Memory areas is formed by specifying the
+location of the data that follows.  Only the memory area
+ at samp{0x0000 at dots{}00} to @samp{0x01ff at dots{}ff} is executable, so
+it is used for code (and constants) and the area
+ at samp{0x2000 at dots{}00} to @samp{0x20ff at dots{}ff} is used for
+writable data.  @xref{mmo section mapping}.
+
+There is provision for specifying ``special data'' of 65536
+different types.  We use type 80 (decimal), arbitrarily chosen the
+same as the ELF @code{e_machine} number for MMIX, filling it with
+section information normally found in ELF objects. @xref{mmo
+section mapping}.
+
+Contents is entered as 32-bit words, xor:ed over previous
+contents, always zero-initialized.  A word that starts with the
+byte @samp{0x98} forms a command called a @samp{lopcode}, where
+the next byte distinguished between the thirteen lopcodes.  The
+two remaining bytes, called the @samp{Y} and @samp{Z} fields, or
+the @samp{YZ} field (a 16-bit big-endian number), are used for
+various purposes different for each lopcode.  As documented in
+ at url{http://www-cs-faculty.stanford.edu/~knuth/mmixal-intro.ps.gz},
+the lopcodes are:
+
+ at table @code
+ at item lop_quote
+0x98000001.  The next word is contents, regardless of whether it
+starts with 0x98 or not.
+
+ at item lop_loc
+0x9801YYZZ, where @samp{Z} is 1 or 2.  This is a location
+directive, setting the location for the next data to the next
+32-bit word (for @math{Z = 1}) or 64-bit word (for @math{Z = 2}),
+plus @math{Y * 2^56}.  Normally @samp{Y} is 0 for the text segment
+and 2 for the data segment.
+
+ at item lop_skip
+0x9802YYZZ.  Increase the current location by @samp{YZ} bytes.
+
+ at item lop_fixo
+0x9803YYZZ, where @samp{Z} is 1 or 2.  Store the current location
+as 64 bits into the location pointed to by the next 32-bit
+(@math{Z = 1}) or 64-bit (@math{Z = 2}) word, plus @math{Y *
+2^56}.
+
+ at item lop_fixr
+0x9804YYZZ.  @samp{YZ} is stored into the current location plus
+ at math{2 - 4 * YZ}.
+
+ at item lop_fixrx
+0x980500ZZ.  @samp{Z} is 16 or 24.  A value @samp{L} derived from
+the following 32-bit word are used in a manner similar to
+ at samp{YZ} in lop_fixr: it is xor:ed into the current location
+minus @math{4 * L}.  The first byte of the word is 0 or 1.  If it
+is 1, then @math{L = (@var{lowest 24 bits of word}) - 2^Z}, if 0,
+then @math{L = (@var{lowest 24 bits of word})}.
+
+ at item lop_file
+0x9806YYZZ.  @samp{Y} is the file number, @samp{Z} is count of
+32-bit words.  Set the file number to @samp{Y} and the line
+counter to 0.  The next @math{Z * 4} bytes contain the file name,
+padded with zeros if the count is not a multiple of four.  The
+same @samp{Y} may occur multiple times, but @samp{Z} must be 0 for
+all but the first occurrence.
+
+ at item lop_line
+0x9807YYZZ.  @samp{YZ} is the line number.  Together with
+lop_file, it forms the source location for the next 32-bit word.
+Note that for each non-lopcode 32-bit word, line numbers are
+assumed incremented by one.
+
+ at item lop_spec
+0x9808YYZZ.  @samp{YZ} is the type number.  Data until the next
+lopcode other than lop_quote forms special data of type @samp{YZ}.
+ at xref{mmo section mapping}.
+
+Other types than 80, (or type 80 with a content that does not
+parse) is stored in sections named @code{.MMIX.spec_data. at var{n}}
+where @var{n} is the @samp{YZ}-type.  The flags for such a
+sections say not to allocate or load the data.  The vma is 0.
+Contents of multiple occurrences of special data @var{n} is
+concatenated to the data of the previous lop_spec @var{n}s.  The
+location in data or code at which the lop_spec occurred is lost.
+
+ at item lop_pre
+0x980901ZZ.  The first lopcode in a file.  The @samp{Z} field forms the
+length of header information in 32-bit words, where the first word
+tells the time in seconds since @samp{00:00:00 GMT Jan 1 1970}.
+
+ at item lop_post
+0x980a00ZZ.  @math{Z > 32}.  This lopcode follows after all
+content-generating lopcodes in a program.  The @samp{Z} field
+denotes the value of @samp{rG} at the beginning of the program.
+The following @math{256 - Z} big-endian 64-bit words are loaded
+into global registers @samp{$G} @dots{} @samp{$255}.
+
+ at item lop_stab
+0x980b0000.  The next-to-last lopcode in a program.  Must follow
+immediately after the lop_post lopcode and its data.  After this
+lopcode follows all symbols in a compressed format
+(@pxref{Symbol-table}).
+
+ at item lop_end
+0x980cYYZZ.  The last lopcode in a program.  It must follow the
+lop_stab lopcode and its data.  The @samp{YZ} field contains the
+number of 32-bit words of symbol table information after the
+preceding lop_stab lopcode.
+ at end table
+
+Note that the lopcode "fixups"; @code{lop_fixr}, @code{lop_fixrx} and
+ at code{lop_fixo} are not generated by BFD, but are handled.  They are
+generated by @code{mmixal}.
+
+This trivial one-label, one-instruction file:
+
+ at example
+ :Main TRAP 1,2,3
+ at end example
+
+can be represented this way in mmo:
+
+ at example
+ 0x98090101 - lop_pre, one 32-bit word with timestamp.
+ <timestamp>
+ 0x98010002 - lop_loc, text segment, using a 64-bit address.
+              Note that mmixal does not emit this for the file above.
+ 0x00000000 - Address, high 32 bits.
+ 0x00000000 - Address, low 32 bits.
+ 0x98060002 - lop_file, 2 32-bit words for file-name.
+ 0x74657374 - "test"
+ 0x2e730000 - ".s\0\0"
+ 0x98070001 - lop_line, line 1.
+ 0x00010203 - TRAP 1,2,3
+ 0x980a00ff - lop_post, setting $255 to 0.
+ 0x00000000
+ 0x00000000
+ 0x980b0000 - lop_stab for ":Main" = 0, serial 1.
+ 0x203a4040   @xref{Symbol-table}.
+ 0x10404020
+ 0x4d206120
+ 0x69016e00
+ 0x81000000
+ 0x980c0005 - lop_end; symbol table contained five 32-bit words.
+ at end example
+ at node Symbol-table, mmo section mapping, File layout, mmo
+ at subsection Symbol table format
+From mmixal.w (or really, the generated mmixal.tex) in
+ at url{http://www-cs-faculty.stanford.edu/~knuth/programs/mmix.tar.gz}):
+``Symbols are stored and retrieved by means of a @samp{ternary
+search trie}, following ideas of Bentley and Sedgewick. (See
+ACM--SIAM Symp.@: on Discrete Algorithms @samp{8} (1997), 360--369;
+R.@:Sedgewick, @samp{Algorithms in C} (Reading, Mass.@:
+Addison--Wesley, 1998), @samp{15.4}.)  Each trie node stores a
+character, and there are branches to subtries for the cases where
+a given character is less than, equal to, or greater than the
+character in the trie.  There also is a pointer to a symbol table
+entry if a symbol ends at the current node.''
+
+So it's a tree encoded as a stream of bytes.  The stream of bytes
+acts on a single virtual global symbol, adding and removing
+characters and signalling complete symbol points.  Here, we read
+the stream and create symbols at the completion points.
+
+First, there's a control byte @code{m}.  If any of the listed bits
+in @code{m} is nonzero, we execute what stands at the right, in
+the listed order:
+
+ at example
+ (MMO3_LEFT)
+ 0x40 - Traverse left trie.
+        (Read a new command byte and recurse.)
+
+ (MMO3_SYMBITS)
+ 0x2f - Read the next byte as a character and store it in the
+        current character position; increment character position.
+        Test the bits of @code{m}:
+
+        (MMO3_WCHAR)
+        0x80 - The character is 16-bit (so read another byte,
+               merge into current character.
+
+        (MMO3_TYPEBITS)
+        0xf  - We have a complete symbol; parse the type, value
+               and serial number and do what should be done
+               with a symbol.  The type and length information
+               is in j = (m & 0xf).
+
+               (MMO3_REGQUAL_BITS)
+               j == 0xf: A register variable.  The following
+                         byte tells which register.
+               j <= 8:   An absolute symbol.  Read j bytes as the
+                         big-endian number the symbol equals.
+                         A j = 2 with two zero bytes denotes an
+                         unknown symbol.
+               j > 8:    As with j <= 8, but add (0x20 << 56)
+                         to the value in the following j - 8
+                         bytes.
+
+               Then comes the serial number, as a variant of
+               uleb128, but better named ubeb128:
+               Read bytes and shift the previous value left 7
+               (multiply by 128).  Add in the new byte, repeat
+               until a byte has bit 7 set.  The serial number
+               is the computed value minus 128.
+
+        (MMO3_MIDDLE)
+        0x20 - Traverse middle trie.  (Read a new command byte
+               and recurse.)  Decrement character position.
+
+ (MMO3_RIGHT)
+ 0x10 - Traverse right trie.  (Read a new command byte and
+        recurse.)
+ at end example
+
+Let's look again at the @code{lop_stab} for the trivial file
+(@pxref{File layout}).
+
+ at example
+ 0x980b0000 - lop_stab for ":Main" = 0, serial 1.
+ 0x203a4040
+ 0x10404020
+ 0x4d206120
+ 0x69016e00
+ 0x81000000
+ at end example
+
+This forms the trivial trie (note that the path between ``:'' and
+``M'' is redundant):
+
+ at example
+ 203a     ":"
+ 40       /
+ 40      /
+ 10      \
+ 40      /
+ 40     /
+ 204d  "M"
+ 2061  "a"
+ 2069  "i"
+ 016e  "n" is the last character in a full symbol, and
+       with a value represented in one byte.
+ 00    The value is 0.
+ 81    The serial number is 1.
+ at end example
+
+ at node mmo section mapping, , Symbol-table, mmo
+ at subsection mmo section mapping
+The implementation in BFD uses special data type 80 (decimal) to
+encapsulate and describe named sections, containing e.g.@: debug
+information.  If needed, any datum in the encapsulation will be
+quoted using lop_quote.  First comes a 32-bit word holding the
+number of 32-bit words containing the zero-terminated zero-padded
+segment name.  After the name there's a 32-bit word holding flags
+describing the section type.  Then comes a 64-bit big-endian word
+with the section length (in bytes), then another with the section
+start address.  Depending on the type of section, the contents
+might follow, zero-padded to 32-bit boundary.  For a loadable
+section (such as data or code), the contents might follow at some
+later point, not necessarily immediately, as a lop_loc with the
+same start address as in the section description, followed by the
+contents.  This in effect forms a descriptor that must be emitted
+before the actual contents.  Sections described this way must not
+overlap.
+
+For areas that don't have such descriptors, synthetic sections are
+formed by BFD.  Consecutive contents in the two memory areas
+ at samp{0x0000 at dots{}00} to @samp{0x01ff at dots{}ff} and
+ at samp{0x2000 at dots{}00} to @samp{0x20ff at dots{}ff} are entered in
+sections named @code{.text} and @code{.data} respectively.  If an area
+is not otherwise described, but would together with a neighboring
+lower area be less than @samp{0x40000000} bytes long, it is joined
+with the lower area and the gap is zero-filled.  For other cases,
+a new section is formed, named @code{.MMIX.sec. at var{n}}.  Here,
+ at var{n} is a number, a running count through the mmo file,
+starting at 0.
+
+A loadable section specified as:
+
+ at example
+ .section secname,"ax"
+ TETRA 1,2,3,4,-1,-2009
+ BYTE 80
+ at end example
+
+and linked to address @samp{0x4}, is represented by the sequence:
+
+ at example
+ 0x98080050 - lop_spec 80
+ 0x00000002 - two 32-bit words for the section name
+ 0x7365636e - "secn"
+ 0x616d6500 - "ame\0"
+ 0x00000033 - flags CODE, READONLY, LOAD, ALLOC
+ 0x00000000 - high 32 bits of section length
+ 0x0000001c - section length is 28 bytes; 6 * 4 + 1 + alignment to 32 bits
+ 0x00000000 - high 32 bits of section address
+ 0x00000004 - section address is 4
+ 0x98010002 - 64 bits with address of following data
+ 0x00000000 - high 32 bits of address
+ 0x00000004 - low 32 bits: data starts at address 4
+ 0x00000001 - 1
+ 0x00000002 - 2
+ 0x00000003 - 3
+ 0x00000004 - 4
+ 0xffffffff - -1
+ 0xfffff827 - -2009
+ 0x50000000 - 80 as a byte, padded with zeros.
+ at end example
+
+Note that the lop_spec wrapping does not include the section
+contents.  Compare this to a non-loaded section specified as:
+
+ at example
+ .section thirdsec
+ TETRA 200001,100002
+ BYTE 38,40
+ at end example
+
+This, when linked to address @samp{0x200000000000001c}, is
+represented by:
+
+ at example
+ 0x98080050 - lop_spec 80
+ 0x00000002 - two 32-bit words for the section name
+ 0x7365636e - "thir"
+ 0x616d6500 - "dsec"
+ 0x00000010 - flag READONLY
+ 0x00000000 - high 32 bits of section length
+ 0x0000000c - section length is 12 bytes; 2 * 4 + 2 + alignment to 32 bits
+ 0x20000000 - high 32 bits of address
+ 0x0000001c - low 32 bits of address 0x200000000000001c
+ 0x00030d41 - 200001
+ 0x000186a2 - 100002
+ 0x26280000 - 38, 40 as bytes, padded with zeros
+ at end example
+
+For the latter example, the section contents must not be
+loaded in memory, and is therefore specified as part of the
+special data.  The address is usually unimportant but might
+provide information for e.g.@: the DWARF 2 debugging format.
diff --git a/bfd/doc/opncls.texi b/bfd/doc/opncls.texi
index 8b13789..1562ea5 100644
--- a/bfd/doc/opncls.texi
+++ b/bfd/doc/opncls.texi
@@ -1 +1,381 @@
 
+ at example
+/* Set to N to open the next N BFDs using an alternate id space.  */
+extern unsigned int bfd_use_reserved_id;
+ at end example
+ at section Opening and closing BFDs
+
+
+ at subsection Functions for opening and closing
+
+
+ at findex bfd_fopen
+ at subsubsection @code{bfd_fopen}
+ at strong{Synopsis}
+ at example
+bfd *bfd_fopen (const char *filename, const char *target,
+    const char *mode, int fd);
+ at end example
+ at strong{Description}@*
+Open the file @var{filename} with the target @var{target}.
+Return a pointer to the created BFD.  If @var{fd} is not -1,
+then @code{fdopen} is used to open the file; otherwise, @code{fopen}
+is used.  @var{mode} is passed directly to @code{fopen} or
+ at code{fdopen}. 
+
+Calls @code{bfd_find_target}, so @var{target} is interpreted as by
+that function.
+
+The new BFD is marked as cacheable iff @var{fd} is -1.
+
+If @code{NULL} is returned then an error has occured.   Possible errors
+are @code{bfd_error_no_memory}, @code{bfd_error_invalid_target} or
+ at code{system_call} error.
+
+On error, @var{fd} is always closed.
+
+ at findex bfd_openr
+ at subsubsection @code{bfd_openr}
+ at strong{Synopsis}
+ at example
+bfd *bfd_openr (const char *filename, const char *target);
+ at end example
+ at strong{Description}@*
+Open the file @var{filename} (using @code{fopen}) with the target
+ at var{target}.  Return a pointer to the created BFD.
+
+Calls @code{bfd_find_target}, so @var{target} is interpreted as by
+that function.
+
+If @code{NULL} is returned then an error has occured.   Possible errors
+are @code{bfd_error_no_memory}, @code{bfd_error_invalid_target} or
+ at code{system_call} error.
+
+ at findex bfd_fdopenr
+ at subsubsection @code{bfd_fdopenr}
+ at strong{Synopsis}
+ at example
+bfd *bfd_fdopenr (const char *filename, const char *target, int fd);
+ at end example
+ at strong{Description}@*
+ at code{bfd_fdopenr} is to @code{bfd_fopenr} much like @code{fdopen} is to
+ at code{fopen}.  It opens a BFD on a file already described by the
+ at var{fd} supplied.
+
+When the file is later @code{bfd_close}d, the file descriptor will
+be closed.  If the caller desires that this file descriptor be
+cached by BFD (opened as needed, closed as needed to free
+descriptors for other opens), with the supplied @var{fd} used as
+an initial file descriptor (but subject to closure at any time),
+call bfd_set_cacheable(bfd, 1) on the returned BFD.  The default
+is to assume no caching; the file descriptor will remain open
+until @code{bfd_close}, and will not be affected by BFD operations
+on other files.
+
+Possible errors are @code{bfd_error_no_memory},
+ at code{bfd_error_invalid_target} and @code{bfd_error_system_call}.
+
+On error, @var{fd} is closed.
+
+ at findex bfd_openstreamr
+ at subsubsection @code{bfd_openstreamr}
+ at strong{Synopsis}
+ at example
+bfd *bfd_openstreamr (const char *, const char *, void *);
+ at end example
+ at strong{Description}@*
+Open a BFD for read access on an existing stdio stream.  When
+the BFD is passed to @code{bfd_close}, the stream will be closed.
+
+ at findex bfd_openr_iovec
+ at subsubsection @code{bfd_openr_iovec}
+ at strong{Synopsis}
+ at example
+bfd *bfd_openr_iovec (const char *filename, const char *target,
+    void *(*open_func) (struct bfd *nbfd,
+    void *open_closure),
+    void *open_closure,
+    file_ptr (*pread_func) (struct bfd *nbfd,
+    void *stream,
+    void *buf,
+    file_ptr nbytes,
+    file_ptr offset),
+    int (*close_func) (struct bfd *nbfd,
+    void *stream),
+    int (*stat_func) (struct bfd *abfd,
+    void *stream,
+    struct stat *sb));
+ at end example
+ at strong{Description}@*
+Create and return a BFD backed by a read-only @var{stream}.
+The @var{stream} is created using @var{open_func}, accessed using
+ at var{pread_func} and destroyed using @var{close_func}.
+
+Calls @code{bfd_find_target}, so @var{target} is interpreted as by
+that function.
+
+Calls @var{open_func} (which can call @code{bfd_zalloc} and
+ at code{bfd_get_filename}) to obtain the read-only stream backing
+the BFD.  @var{open_func} either succeeds returning the
+non- at code{NULL} @var{stream}, or fails returning @code{NULL}
+(setting @code{bfd_error}).
+
+Calls @var{pread_func} to request @var{nbytes} of data from
+ at var{stream} starting at @var{offset} (e.g., via a call to
+ at code{bfd_read}).  @var{pread_func} either succeeds returning the
+number of bytes read (which can be less than @var{nbytes} when
+end-of-file), or fails returning -1 (setting @code{bfd_error}).
+
+Calls @var{close_func} when the BFD is later closed using
+ at code{bfd_close}.  @var{close_func} either succeeds returning 0, or
+fails returning -1 (setting @code{bfd_error}).
+
+Calls @var{stat_func} to fill in a stat structure for bfd_stat,
+bfd_get_size, and bfd_get_mtime calls.  @var{stat_func} returns 0
+on success, or returns -1 on failure (setting @code{bfd_error}).
+
+If @code{bfd_openr_iovec} returns @code{NULL} then an error has
+occurred.  Possible errors are @code{bfd_error_no_memory},
+ at code{bfd_error_invalid_target} and @code{bfd_error_system_call}.
+
+ at findex bfd_openw
+ at subsubsection @code{bfd_openw}
+ at strong{Synopsis}
+ at example
+bfd *bfd_openw (const char *filename, const char *target);
+ at end example
+ at strong{Description}@*
+Create a BFD, associated with file @var{filename}, using the
+file format @var{target}, and return a pointer to it.
+
+Possible errors are @code{bfd_error_system_call}, @code{bfd_error_no_memory},
+ at code{bfd_error_invalid_target}.
+
+ at findex bfd_close
+ at subsubsection @code{bfd_close}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_close (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Close a BFD. If the BFD was open for writing, then pending
+operations are completed and the file written out and closed.
+If the created file is executable, then @code{chmod} is called
+to mark it as such.
+
+All memory attached to the BFD is released.
+
+The file descriptor associated with the BFD is closed (even
+if it was passed in to BFD by @code{bfd_fdopenr}).
+
+ at strong{Returns}@*
+ at code{TRUE} is returned if all is ok, otherwise @code{FALSE}.
+
+ at findex bfd_close_all_done
+ at subsubsection @code{bfd_close_all_done}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_close_all_done (bfd *);
+ at end example
+ at strong{Description}@*
+Close a BFD.  Differs from @code{bfd_close} since it does not
+complete any pending operations.  This routine would be used
+if the application had just used BFD for swapping and didn't
+want to use any of the writing code.
+
+If the created file is executable, then @code{chmod} is called
+to mark it as such.
+
+All memory attached to the BFD is released.
+
+ at strong{Returns}@*
+ at code{TRUE} is returned if all is ok, otherwise @code{FALSE}.
+
+ at findex bfd_create
+ at subsubsection @code{bfd_create}
+ at strong{Synopsis}
+ at example
+bfd *bfd_create (const char *filename, bfd *templ);
+ at end example
+ at strong{Description}@*
+Create a new BFD in the manner of @code{bfd_openw}, but without
+opening a file. The new BFD takes the target from the target
+used by @var{templ}. The format is always set to @code{bfd_object}.
+
+ at findex bfd_make_writable
+ at subsubsection @code{bfd_make_writable}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_make_writable (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Takes a BFD as created by @code{bfd_create} and converts it
+into one like as returned by @code{bfd_openw}.  It does this
+by converting the BFD to BFD_IN_MEMORY.  It's assumed that
+you will call @code{bfd_make_readable} on this bfd later.
+
+ at strong{Returns}@*
+ at code{TRUE} is returned if all is ok, otherwise @code{FALSE}.
+
+ at findex bfd_make_readable
+ at subsubsection @code{bfd_make_readable}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_make_readable (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Takes a BFD as created by @code{bfd_create} and
+ at code{bfd_make_writable} and converts it into one like as
+returned by @code{bfd_openr}.  It does this by writing the
+contents out to the memory buffer, then reversing the
+direction.
+
+ at strong{Returns}@*
+ at code{TRUE} is returned if all is ok, otherwise @code{FALSE}.
+
+ at findex bfd_alloc
+ at subsubsection @code{bfd_alloc}
+ at strong{Synopsis}
+ at example
+void *bfd_alloc (bfd *abfd, bfd_size_type wanted);
+ at end example
+ at strong{Description}@*
+Allocate a block of @var{wanted} bytes of memory attached to
+ at code{abfd} and return a pointer to it.
+
+ at findex bfd_alloc2
+ at subsubsection @code{bfd_alloc2}
+ at strong{Synopsis}
+ at example
+void *bfd_alloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size);
+ at end example
+ at strong{Description}@*
+Allocate a block of @var{nmemb} elements of @var{size} bytes each
+of memory attached to @code{abfd} and return a pointer to it.
+
+ at findex bfd_zalloc
+ at subsubsection @code{bfd_zalloc}
+ at strong{Synopsis}
+ at example
+void *bfd_zalloc (bfd *abfd, bfd_size_type wanted);
+ at end example
+ at strong{Description}@*
+Allocate a block of @var{wanted} bytes of zeroed memory
+attached to @code{abfd} and return a pointer to it.
+
+ at findex bfd_zalloc2
+ at subsubsection @code{bfd_zalloc2}
+ at strong{Synopsis}
+ at example
+void *bfd_zalloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size);
+ at end example
+ at strong{Description}@*
+Allocate a block of @var{nmemb} elements of @var{size} bytes each
+of zeroed memory attached to @code{abfd} and return a pointer to it.
+
+ at findex bfd_calc_gnu_debuglink_crc32
+ at subsubsection @code{bfd_calc_gnu_debuglink_crc32}
+ at strong{Synopsis}
+ at example
+unsigned long bfd_calc_gnu_debuglink_crc32
+   (unsigned long crc, const unsigned char *buf, bfd_size_type len);
+ at end example
+ at strong{Description}@*
+Computes a CRC value as used in the .gnu_debuglink section.
+Advances the previously computed @var{crc} value by computing
+and adding in the crc32 for @var{len} bytes of @var{buf}.
+
+ at strong{Returns}@*
+Return the updated CRC32 value.
+
+ at findex get_debug_link_info
+ at subsubsection @code{get_debug_link_info}
+ at strong{Synopsis}
+ at example
+char *get_debug_link_info (bfd *abfd, unsigned long *crc32_out);
+ at end example
+ at strong{Description}@*
+fetch the filename and CRC32 value for any separate debuginfo
+associated with @var{abfd}. Return NULL if no such info found,
+otherwise return filename and update @var{crc32_out}.
+
+ at findex separate_debug_file_exists
+ at subsubsection @code{separate_debug_file_exists}
+ at strong{Synopsis}
+ at example
+bfd_boolean separate_debug_file_exists
+   (char *name, unsigned long crc32);
+ at end example
+ at strong{Description}@*
+Checks to see if @var{name} is a file and if its contents
+match @var{crc32}.
+
+ at findex find_separate_debug_file
+ at subsubsection @code{find_separate_debug_file}
+ at strong{Synopsis}
+ at example
+char *find_separate_debug_file (bfd *abfd);
+ at end example
+ at strong{Description}@*
+Searches @var{abfd} for a reference to separate debugging
+information, scans various locations in the filesystem, including
+the file tree rooted at @var{debug_file_directory}, and returns a
+filename of such debugging information if the file is found and has
+matching CRC32.  Returns NULL if no reference to debugging file
+exists, or file cannot be found.
+
+ at findex bfd_follow_gnu_debuglink
+ at subsubsection @code{bfd_follow_gnu_debuglink}
+ at strong{Synopsis}
+ at example
+char *bfd_follow_gnu_debuglink (bfd *abfd, const char *dir);
+ at end example
+ at strong{Description}@*
+Takes a BFD and searches it for a .gnu_debuglink section.  If this
+section is found, it examines the section for the name and checksum
+of a '.debug' file containing auxiliary debugging information.  It
+then searches the filesystem for this .debug file in some standard
+locations, including the directory tree rooted at @var{dir}, and if
+found returns the full filename.
+
+If @var{dir} is NULL, it will search a default path configured into
+libbfd at build time.  [XXX this feature is not currently
+implemented].
+
+ at strong{Returns}@*
+ at code{NULL} on any errors or failure to locate the .debug file,
+otherwise a pointer to a heap-allocated string containing the
+filename.  The caller is responsible for freeing this string.
+
+ at findex bfd_create_gnu_debuglink_section
+ at subsubsection @code{bfd_create_gnu_debuglink_section}
+ at strong{Synopsis}
+ at example
+struct bfd_section *bfd_create_gnu_debuglink_section
+   (bfd *abfd, const char *filename);
+ at end example
+ at strong{Description}@*
+Takes a @var{BFD} and adds a .gnu_debuglink section to it.  The section is sized
+to be big enough to contain a link to the specified @var{filename}.
+
+ at strong{Returns}@*
+A pointer to the new section is returned if all is ok.  Otherwise @code{NULL} is
+returned and bfd_error is set.
+
+ at findex bfd_fill_in_gnu_debuglink_section
+ at subsubsection @code{bfd_fill_in_gnu_debuglink_section}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_fill_in_gnu_debuglink_section
+   (bfd *abfd, struct bfd_section *sect, const char *filename);
+ at end example
+ at strong{Description}@*
+Takes a @var{BFD} and containing a .gnu_debuglink section @var{SECT}
+and fills in the contents of the section to contain a link to the
+specified @var{filename}.  The filename should be relative to the
+current directory.
+
+ at strong{Returns}@*
+ at code{TRUE} is returned if all is ok.  Otherwise @code{FALSE} is returned
+and bfd_error is set.
+
diff --git a/bfd/doc/reloc.texi b/bfd/doc/reloc.texi
index 8b13789..b1f9bb9 100644
--- a/bfd/doc/reloc.texi
+++ b/bfd/doc/reloc.texi
@@ -1 +1,3398 @@
+ at section Relocations
+BFD maintains relocations in much the same way it maintains
+symbols: they are left alone until required, then read in
+en-masse and translated into an internal form.  A common
+routine @code{bfd_perform_relocation} acts upon the
+canonical form to do the fixup.
+
+Relocations are maintained on a per section basis,
+while symbols are maintained on a per BFD basis.
+
+All that a back end has to do to fit the BFD interface is to create
+a @code{struct reloc_cache_entry} for each relocation
+in a particular section, and fill in the right bits of the structures.
+
+ at menu
+* typedef arelent::
+* howto manager::
+ at end menu
+
+
+ at node typedef arelent, howto manager, Relocations, Relocations
+ at subsection typedef arelent
+This is the structure of a relocation entry:
+
+
+ at example
+
+typedef enum bfd_reloc_status
+@{
+  /* No errors detected.  */
+  bfd_reloc_ok,
+
+  /* The relocation was performed, but there was an overflow.  */
+  bfd_reloc_overflow,
+
+  /* The address to relocate was not within the section supplied.  */
+  bfd_reloc_outofrange,
+
+  /* Used by special functions.  */
+  bfd_reloc_continue,
+
+  /* Unsupported relocation size requested.  */
+  bfd_reloc_notsupported,
+
+  /* Unused.  */
+  bfd_reloc_other,
+
+  /* The symbol to relocate against was undefined.  */
+  bfd_reloc_undefined,
+
+  /* The relocation was performed, but may not be ok - presently
+     generated only when linking i960 coff files with i960 b.out
+     symbols.  If this type is returned, the error_message argument
+     to bfd_perform_relocation will be set.  */
+  bfd_reloc_dangerous
+ @}
+ bfd_reloc_status_type;
+
+
+typedef struct reloc_cache_entry
+@{
+  /* A pointer into the canonical table of pointers.  */
+  struct bfd_symbol **sym_ptr_ptr;
+
+  /* offset in section.  */
+  bfd_size_type address;
+
+  /* addend for relocation value.  */
+  bfd_vma addend;
+
+  /* Pointer to how to perform the required relocation.  */
+  reloc_howto_type *howto;
+
+@}
+arelent;
+
+ at end example
+ at strong{Description}@*
+Here is a description of each of the fields within an @code{arelent}:
+
+ at itemize @bullet
+
+ at item
+ at code{sym_ptr_ptr}
+ at end itemize
+The symbol table pointer points to a pointer to the symbol
+associated with the relocation request.  It is the pointer
+into the table returned by the back end's
+ at code{canonicalize_symtab} action. @xref{Symbols}. The symbol is
+referenced through a pointer to a pointer so that tools like
+the linker can fix up all the symbols of the same name by
+modifying only one pointer. The relocation routine looks in
+the symbol and uses the base of the section the symbol is
+attached to and the value of the symbol as the initial
+relocation offset. If the symbol pointer is zero, then the
+section provided is looked up.
+
+ at itemize @bullet
+
+ at item
+ at code{address}
+ at end itemize
+The @code{address} field gives the offset in bytes from the base of
+the section data which owns the relocation record to the first
+byte of relocatable information. The actual data relocated
+will be relative to this point; for example, a relocation
+type which modifies the bottom two bytes of a four byte word
+would not touch the first byte pointed to in a big endian
+world.
+
+ at itemize @bullet
+
+ at item
+ at code{addend}
+ at end itemize
+The @code{addend} is a value provided by the back end to be added (!)
+to the relocation offset. Its interpretation is dependent upon
+the howto. For example, on the 68k the code:
+
+ at example
+        char foo[];
+        main()
+                @{
+                return foo[0x12345678];
+                @}
+ at end example
+
+Could be compiled into:
+
+ at example
+        linkw fp,#-4
+        moveb @@#12345678,d0
+        extbl d0
+        unlk fp
+        rts
+ at end example
+
+This could create a reloc pointing to @code{foo}, but leave the
+offset in the data, something like:
+
+ at example
+RELOCATION RECORDS FOR [.text]:
+offset   type      value
+00000006 32        _foo
+
+00000000 4e56 fffc          ; linkw fp,#-4
+00000004 1039 1234 5678     ; moveb @@#12345678,d0
+0000000a 49c0               ; extbl d0
+0000000c 4e5e               ; unlk fp
+0000000e 4e75               ; rts
+ at end example
+
+Using coff and an 88k, some instructions don't have enough
+space in them to represent the full address range, and
+pointers have to be loaded in two parts. So you'd get something like:
+
+ at example
+        or.u     r13,r0,hi16(_foo+0x12345678)
+        ld.b     r2,r13,lo16(_foo+0x12345678)
+        jmp      r1
+ at end example
+
+This should create two relocs, both pointing to @code{_foo}, and with
+0x12340000 in their addend field. The data would consist of:
+
+ at example
+RELOCATION RECORDS FOR [.text]:
+offset   type      value
+00000002 HVRT16    _foo+0x12340000
+00000006 LVRT16    _foo+0x12340000
+
+00000000 5da05678           ; or.u r13,r0,0x5678
+00000004 1c4d5678           ; ld.b r2,r13,0x5678
+00000008 f400c001           ; jmp r1
+ at end example
+
+The relocation routine digs out the value from the data, adds
+it to the addend to get the original offset, and then adds the
+value of @code{_foo}. Note that all 32 bits have to be kept around
+somewhere, to cope with carry from bit 15 to bit 16.
+
+One further example is the sparc and the a.out format. The
+sparc has a similar problem to the 88k, in that some
+instructions don't have room for an entire offset, but on the
+sparc the parts are created in odd sized lumps. The designers of
+the a.out format chose to not use the data within the section
+for storing part of the offset; all the offset is kept within
+the reloc. Anything in the data should be ignored.
+
+ at example
+        save %sp,-112,%sp
+        sethi %hi(_foo+0x12345678),%g2
+        ldsb [%g2+%lo(_foo+0x12345678)],%i0
+        ret
+        restore
+ at end example
+
+Both relocs contain a pointer to @code{foo}, and the offsets
+contain junk.
+
+ at example
+RELOCATION RECORDS FOR [.text]:
+offset   type      value
+00000004 HI22      _foo+0x12345678
+00000008 LO10      _foo+0x12345678
+
+00000000 9de3bf90     ; save %sp,-112,%sp
+00000004 05000000     ; sethi %hi(_foo+0),%g2
+00000008 f048a000     ; ldsb [%g2+%lo(_foo+0)],%i0
+0000000c 81c7e008     ; ret
+00000010 81e80000     ; restore
+ at end example
+
+ at itemize @bullet
+
+ at item
+ at code{howto}
+ at end itemize
+The @code{howto} field can be imagined as a
+relocation instruction. It is a pointer to a structure which
+contains information on what to do with all of the other
+information in the reloc record and data section. A back end
+would normally have a relocation instruction set and turn
+relocations into pointers to the correct structure on input -
+but it would be possible to create each howto field on demand.
+
+ at subsubsection @code{enum complain_overflow}
+Indicates what sort of overflow checking should be done when
+performing a relocation.
+
+
+ at example
+
+enum complain_overflow
+@{
+  /* Do not complain on overflow.  */
+  complain_overflow_dont,
+
+  /* Complain if the value overflows when considered as a signed
+     number one bit larger than the field.  ie. A bitfield of N bits
+     is allowed to represent -2**n to 2**n-1.  */
+  complain_overflow_bitfield,
+
+  /* Complain if the value overflows when considered as a signed
+     number.  */
+  complain_overflow_signed,
+
+  /* Complain if the value overflows when considered as an
+     unsigned number.  */
+  complain_overflow_unsigned
+@};
+ at end example
+ at subsubsection @code{reloc_howto_type}
+The @code{reloc_howto_type} is a structure which contains all the
+information that libbfd needs to know to tie up a back end's data.
+
+
+ at example
+struct bfd_symbol;             /* Forward declaration.  */
+
+struct reloc_howto_struct
+@{
+  /*  The type field has mainly a documentary use - the back end can
+      do what it wants with it, though normally the back end's
+      external idea of what a reloc number is stored
+      in this field.  For example, a PC relative word relocation
+      in a coff environment has the type 023 - because that's
+      what the outside world calls a R_PCRWORD reloc.  */
+  unsigned int type;
+
+  /*  The value the final relocation is shifted right by.  This drops
+      unwanted data from the relocation.  */
+  unsigned int rightshift;
+
+  /*  The size of the item to be relocated.  This is *not* a
+      power-of-two measure.  To get the number of bytes operated
+      on by a type of relocation, use bfd_get_reloc_size.  */
+  int size;
+
+  /*  The number of bits in the item to be relocated.  This is used
+      when doing overflow checking.  */
+  unsigned int bitsize;
+
+  /*  The relocation is relative to the field being relocated.  */
+  bfd_boolean pc_relative;
+
+  /*  The bit position of the reloc value in the destination.
+      The relocated value is left shifted by this amount.  */
+  unsigned int bitpos;
+
+  /* What type of overflow error should be checked for when
+     relocating.  */
+  enum complain_overflow complain_on_overflow;
+
+  /* If this field is non null, then the supplied function is
+     called rather than the normal function.  This allows really
+     strange relocation methods to be accommodated (e.g., i960 callj
+     instructions).  */
+  bfd_reloc_status_type (*special_function)
+    (bfd *, arelent *, struct bfd_symbol *, void *, asection *,
+     bfd *, char **);
+
+  /* The textual name of the relocation type.  */
+  char *name;
+
+  /* Some formats record a relocation addend in the section contents
+     rather than with the relocation.  For ELF formats this is the
+     distinction between USE_REL and USE_RELA (though the code checks
+     for USE_REL == 1/0).  The value of this field is TRUE if the
+     addend is recorded with the section contents; when performing a
+     partial link (ld -r) the section contents (the data) will be
+     modified.  The value of this field is FALSE if addends are
+     recorded with the relocation (in arelent.addend); when performing
+     a partial link the relocation will be modified.
+     All relocations for all ELF USE_RELA targets should set this field
+     to FALSE (values of TRUE should be looked on with suspicion).
+     However, the converse is not true: not all relocations of all ELF
+     USE_REL targets set this field to TRUE.  Why this is so is peculiar
+     to each particular target.  For relocs that aren't used in partial
+     links (e.g. GOT stuff) it doesn't matter what this is set to.  */
+  bfd_boolean partial_inplace;
+
+  /* src_mask selects the part of the instruction (or data) to be used
+     in the relocation sum.  If the target relocations don't have an
+     addend in the reloc, eg. ELF USE_REL, src_mask will normally equal
+     dst_mask to extract the addend from the section contents.  If
+     relocations do have an addend in the reloc, eg. ELF USE_RELA, this
+     field should be zero.  Non-zero values for ELF USE_RELA targets are
+     bogus as in those cases the value in the dst_mask part of the
+     section contents should be treated as garbage.  */
+  bfd_vma src_mask;
+
+  /* dst_mask selects which parts of the instruction (or data) are
+     replaced with a relocated value.  */
+  bfd_vma dst_mask;
+
+  /* When some formats create PC relative instructions, they leave
+     the value of the pc of the place being relocated in the offset
+     slot of the instruction, so that a PC relative relocation can
+     be made just by adding in an ordinary offset (e.g., sun3 a.out).
+     Some formats leave the displacement part of an instruction
+     empty (e.g., m88k bcs); this flag signals the fact.  */
+  bfd_boolean pcrel_offset;
+@};
+
+ at end example
+ at findex The HOWTO Macro
+ at subsubsection @code{The HOWTO Macro}
+ at strong{Description}@*
+The HOWTO define is horrible and will go away.
+ at example
+#define HOWTO(C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \
+  @{ (unsigned) C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC @}
+ at end example
+
+ at strong{Description}@*
+And will be replaced with the totally magic way. But for the
+moment, we are compatible, so do it this way.
+ at example
+#define NEWHOWTO(FUNCTION, NAME, SIZE, REL, IN) \
+  HOWTO (0, 0, SIZE, 0, REL, 0, complain_overflow_dont, FUNCTION, \
+         NAME, FALSE, 0, 0, IN)
+
+ at end example
+
+ at strong{Description}@*
+This is used to fill in an empty howto entry in an array.
+ at example
+#define EMPTY_HOWTO(C) \
+  HOWTO ((C), 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL, \
+         NULL, FALSE, 0, 0, FALSE)
+
+ at end example
+
+ at strong{Description}@*
+Helper routine to turn a symbol into a relocation value.
+ at example
+#define HOWTO_PREPARE(relocation, symbol)               \
+  @{                                                     \
+    if (symbol != NULL)                                 \
+      @{                                                 \
+        if (bfd_is_com_section (symbol->section))       \
+          @{                                             \
+            relocation = 0;                             \
+          @}                                             \
+        else                                            \
+          @{                                             \
+            relocation = symbol->value;                 \
+          @}                                             \
+      @}                                                 \
+  @}
+
+ at end example
+
+ at findex bfd_get_reloc_size
+ at subsubsection @code{bfd_get_reloc_size}
+ at strong{Synopsis}
+ at example
+unsigned int bfd_get_reloc_size (reloc_howto_type *);
+ at end example
+ at strong{Description}@*
+For a reloc_howto_type that operates on a fixed number of bytes,
+this returns the number of bytes operated on.
+
+ at findex arelent_chain
+ at subsubsection @code{arelent_chain}
+ at strong{Description}@*
+How relocs are tied together in an @code{asection}:
+ at example
+typedef struct relent_chain
+@{
+  arelent relent;
+  struct relent_chain *next;
+@}
+arelent_chain;
+
+ at end example
+
+ at findex bfd_check_overflow
+ at subsubsection @code{bfd_check_overflow}
+ at strong{Synopsis}
+ at example
+bfd_reloc_status_type bfd_check_overflow
+   (enum complain_overflow how,
+    unsigned int bitsize,
+    unsigned int rightshift,
+    unsigned int addrsize,
+    bfd_vma relocation);
+ at end example
+ at strong{Description}@*
+Perform overflow checking on @var{relocation} which has
+ at var{bitsize} significant bits and will be shifted right by
+ at var{rightshift} bits, on a machine with addresses containing
+ at var{addrsize} significant bits.  The result is either of
+ at code{bfd_reloc_ok} or @code{bfd_reloc_overflow}.
+
+ at findex bfd_perform_relocation
+ at subsubsection @code{bfd_perform_relocation}
+ at strong{Synopsis}
+ at example
+bfd_reloc_status_type bfd_perform_relocation
+   (bfd *abfd,
+    arelent *reloc_entry,
+    void *data,
+    asection *input_section,
+    bfd *output_bfd,
+    char **error_message);
+ at end example
+ at strong{Description}@*
+If @var{output_bfd} is supplied to this function, the
+generated image will be relocatable; the relocations are
+copied to the output file after they have been changed to
+reflect the new state of the world. There are two ways of
+reflecting the results of partial linkage in an output file:
+by modifying the output data in place, and by modifying the
+relocation record.  Some native formats (e.g., basic a.out and
+basic coff) have no way of specifying an addend in the
+relocation type, so the addend has to go in the output data.
+This is no big deal since in these formats the output data
+slot will always be big enough for the addend. Complex reloc
+types with addends were invented to solve just this problem.
+The @var{error_message} argument is set to an error message if
+this return @code{bfd_reloc_dangerous}.
+
+ at findex bfd_install_relocation
+ at subsubsection @code{bfd_install_relocation}
+ at strong{Synopsis}
+ at example
+bfd_reloc_status_type bfd_install_relocation
+   (bfd *abfd,
+    arelent *reloc_entry,
+    void *data, bfd_vma data_start,
+    asection *input_section,
+    char **error_message);
+ at end example
+ at strong{Description}@*
+This looks remarkably like @code{bfd_perform_relocation}, except it
+does not expect that the section contents have been filled in.
+I.e., it's suitable for use when creating, rather than applying
+a relocation.
+
+For now, this function should be considered reserved for the
+assembler.
+
+
+ at node howto manager,  , typedef arelent, Relocations
+ at subsection The howto manager
+When an application wants to create a relocation, but doesn't
+know what the target machine might call it, it can find out by
+using this bit of code.
+
+ at findex bfd_reloc_code_type
+ at subsubsection @code{bfd_reloc_code_type}
+ at strong{Description}@*
+The insides of a reloc code.  The idea is that, eventually, there
+will be one enumerator for every type of relocation we ever do.
+Pass one of these values to @code{bfd_reloc_type_lookup}, and it'll
+return a howto pointer.
+
+This does mean that the application must determine the correct
+enumerator value; you can't get a howto pointer from a random set
+of attributes.
+
+Here are the possible values for @code{enum bfd_reloc_code_real}:
+
+ at deffn {} BFD_RELOC_64
+ at deffnx {} BFD_RELOC_32
+ at deffnx {} BFD_RELOC_26
+ at deffnx {} BFD_RELOC_24
+ at deffnx {} BFD_RELOC_16
+ at deffnx {} BFD_RELOC_14
+ at deffnx {} BFD_RELOC_8
+Basic absolute relocations of N bits.
+ at end deffn
+ at deffn {} BFD_RELOC_64_PCREL
+ at deffnx {} BFD_RELOC_32_PCREL
+ at deffnx {} BFD_RELOC_24_PCREL
+ at deffnx {} BFD_RELOC_16_PCREL
+ at deffnx {} BFD_RELOC_12_PCREL
+ at deffnx {} BFD_RELOC_8_PCREL
+PC-relative relocations.  Sometimes these are relative to the address
+of the relocation itself; sometimes they are relative to the start of
+the section containing the relocation.  It depends on the specific target.
+
+The 24-bit relocation is used in some Intel 960 configurations.
+ at end deffn
+ at deffn {} BFD_RELOC_32_SECREL
+Section relative relocations.  Some targets need this for DWARF2.
+ at end deffn
+ at deffn {} BFD_RELOC_32_GOT_PCREL
+ at deffnx {} BFD_RELOC_16_GOT_PCREL
+ at deffnx {} BFD_RELOC_8_GOT_PCREL
+ at deffnx {} BFD_RELOC_32_GOTOFF
+ at deffnx {} BFD_RELOC_16_GOTOFF
+ at deffnx {} BFD_RELOC_LO16_GOTOFF
+ at deffnx {} BFD_RELOC_HI16_GOTOFF
+ at deffnx {} BFD_RELOC_HI16_S_GOTOFF
+ at deffnx {} BFD_RELOC_8_GOTOFF
+ at deffnx {} BFD_RELOC_64_PLT_PCREL
+ at deffnx {} BFD_RELOC_32_PLT_PCREL
+ at deffnx {} BFD_RELOC_24_PLT_PCREL
+ at deffnx {} BFD_RELOC_16_PLT_PCREL
+ at deffnx {} BFD_RELOC_8_PLT_PCREL
+ at deffnx {} BFD_RELOC_64_PLTOFF
+ at deffnx {} BFD_RELOC_32_PLTOFF
+ at deffnx {} BFD_RELOC_16_PLTOFF
+ at deffnx {} BFD_RELOC_LO16_PLTOFF
+ at deffnx {} BFD_RELOC_HI16_PLTOFF
+ at deffnx {} BFD_RELOC_HI16_S_PLTOFF
+ at deffnx {} BFD_RELOC_8_PLTOFF
+For ELF.
+ at end deffn
+ at deffn {} BFD_RELOC_68K_GLOB_DAT
+ at deffnx {} BFD_RELOC_68K_JMP_SLOT
+ at deffnx {} BFD_RELOC_68K_RELATIVE
+ at deffnx {} BFD_RELOC_68K_TLS_GD32
+ at deffnx {} BFD_RELOC_68K_TLS_GD16
+ at deffnx {} BFD_RELOC_68K_TLS_GD8
+ at deffnx {} BFD_RELOC_68K_TLS_LDM32
+ at deffnx {} BFD_RELOC_68K_TLS_LDM16
+ at deffnx {} BFD_RELOC_68K_TLS_LDM8
+ at deffnx {} BFD_RELOC_68K_TLS_LDO32
+ at deffnx {} BFD_RELOC_68K_TLS_LDO16
+ at deffnx {} BFD_RELOC_68K_TLS_LDO8
+ at deffnx {} BFD_RELOC_68K_TLS_IE32
+ at deffnx {} BFD_RELOC_68K_TLS_IE16
+ at deffnx {} BFD_RELOC_68K_TLS_IE8
+ at deffnx {} BFD_RELOC_68K_TLS_LE32
+ at deffnx {} BFD_RELOC_68K_TLS_LE16
+ at deffnx {} BFD_RELOC_68K_TLS_LE8
+Relocations used by 68K ELF.
+ at end deffn
+ at deffn {} BFD_RELOC_32_BASEREL
+ at deffnx {} BFD_RELOC_16_BASEREL
+ at deffnx {} BFD_RELOC_LO16_BASEREL
+ at deffnx {} BFD_RELOC_HI16_BASEREL
+ at deffnx {} BFD_RELOC_HI16_S_BASEREL
+ at deffnx {} BFD_RELOC_8_BASEREL
+ at deffnx {} BFD_RELOC_RVA
+Linkage-table relative.
+ at end deffn
+ at deffn {} BFD_RELOC_8_FFnn
+Absolute 8-bit relocation, but used to form an address like 0xFFnn.
+ at end deffn
+ at deffn {} BFD_RELOC_32_PCREL_S2
+ at deffnx {} BFD_RELOC_16_PCREL_S2
+ at deffnx {} BFD_RELOC_23_PCREL_S2
+These PC-relative relocations are stored as word displacements --
+i.e., byte displacements shifted right two bits.  The 30-bit word
+displacement (<<32_PCREL_S2>> -- 32 bits, shifted 2) is used on the
+SPARC.  (SPARC tools generally refer to this as <<WDISP30>>.)  The
+signed 16-bit displacement is used on the MIPS, and the 23-bit
+displacement is used on the Alpha.
+ at end deffn
+ at deffn {} BFD_RELOC_HI22
+ at deffnx {} BFD_RELOC_LO10
+High 22 bits and low 10 bits of 32-bit value, placed into lower bits of
+the target word.  These are used on the SPARC.
+ at end deffn
+ at deffn {} BFD_RELOC_GPREL16
+ at deffnx {} BFD_RELOC_GPREL32
+For systems that allocate a Global Pointer register, these are
+displacements off that register.  These relocation types are
+handled specially, because the value the register will have is
+decided relatively late.
+ at end deffn
+ at deffn {} BFD_RELOC_I960_CALLJ
+Reloc types used for i960/b.out.
+ at end deffn
+ at deffn {} BFD_RELOC_NONE
+ at deffnx {} BFD_RELOC_SPARC_WDISP22
+ at deffnx {} BFD_RELOC_SPARC22
+ at deffnx {} BFD_RELOC_SPARC13
+ at deffnx {} BFD_RELOC_SPARC_GOT10
+ at deffnx {} BFD_RELOC_SPARC_GOT13
+ at deffnx {} BFD_RELOC_SPARC_GOT22
+ at deffnx {} BFD_RELOC_SPARC_PC10
+ at deffnx {} BFD_RELOC_SPARC_PC22
+ at deffnx {} BFD_RELOC_SPARC_WPLT30
+ at deffnx {} BFD_RELOC_SPARC_COPY
+ at deffnx {} BFD_RELOC_SPARC_GLOB_DAT
+ at deffnx {} BFD_RELOC_SPARC_JMP_SLOT
+ at deffnx {} BFD_RELOC_SPARC_RELATIVE
+ at deffnx {} BFD_RELOC_SPARC_UA16
+ at deffnx {} BFD_RELOC_SPARC_UA32
+ at deffnx {} BFD_RELOC_SPARC_UA64
+ at deffnx {} BFD_RELOC_SPARC_GOTDATA_HIX22
+ at deffnx {} BFD_RELOC_SPARC_GOTDATA_LOX10
+ at deffnx {} BFD_RELOC_SPARC_GOTDATA_OP_HIX22
+ at deffnx {} BFD_RELOC_SPARC_GOTDATA_OP_LOX10
+ at deffnx {} BFD_RELOC_SPARC_GOTDATA_OP
+ at deffnx {} BFD_RELOC_SPARC_JMP_IREL
+ at deffnx {} BFD_RELOC_SPARC_IRELATIVE
+SPARC ELF relocations.  There is probably some overlap with other
+relocation types already defined.
+ at end deffn
+ at deffn {} BFD_RELOC_SPARC_BASE13
+ at deffnx {} BFD_RELOC_SPARC_BASE22
+I think these are specific to SPARC a.out (e.g., Sun 4).
+ at end deffn
+ at deffn {} BFD_RELOC_SPARC_64
+ at deffnx {} BFD_RELOC_SPARC_10
+ at deffnx {} BFD_RELOC_SPARC_11
+ at deffnx {} BFD_RELOC_SPARC_OLO10
+ at deffnx {} BFD_RELOC_SPARC_HH22
+ at deffnx {} BFD_RELOC_SPARC_HM10
+ at deffnx {} BFD_RELOC_SPARC_LM22
+ at deffnx {} BFD_RELOC_SPARC_PC_HH22
+ at deffnx {} BFD_RELOC_SPARC_PC_HM10
+ at deffnx {} BFD_RELOC_SPARC_PC_LM22
+ at deffnx {} BFD_RELOC_SPARC_WDISP16
+ at deffnx {} BFD_RELOC_SPARC_WDISP19
+ at deffnx {} BFD_RELOC_SPARC_7
+ at deffnx {} BFD_RELOC_SPARC_6
+ at deffnx {} BFD_RELOC_SPARC_5
+ at deffnx {} BFD_RELOC_SPARC_DISP64
+ at deffnx {} BFD_RELOC_SPARC_PLT32
+ at deffnx {} BFD_RELOC_SPARC_PLT64
+ at deffnx {} BFD_RELOC_SPARC_HIX22
+ at deffnx {} BFD_RELOC_SPARC_LOX10
+ at deffnx {} BFD_RELOC_SPARC_H44
+ at deffnx {} BFD_RELOC_SPARC_M44
+ at deffnx {} BFD_RELOC_SPARC_L44
+ at deffnx {} BFD_RELOC_SPARC_REGISTER
+ at deffnx {} BFD_RELOC_SPARC_H34
+ at deffnx {} BFD_RELOC_SPARC_SIZE32
+ at deffnx {} BFD_RELOC_SPARC_SIZE64
+ at deffnx {} BFD_RELOC_SPARC_WDISP10
+SPARC64 relocations
+ at end deffn
+ at deffn {} BFD_RELOC_SPARC_REV32
+SPARC little endian relocation
+ at end deffn
+ at deffn {} BFD_RELOC_SPARC_TLS_GD_HI22
+ at deffnx {} BFD_RELOC_SPARC_TLS_GD_LO10
+ at deffnx {} BFD_RELOC_SPARC_TLS_GD_ADD
+ at deffnx {} BFD_RELOC_SPARC_TLS_GD_CALL
+ at deffnx {} BFD_RELOC_SPARC_TLS_LDM_HI22
+ at deffnx {} BFD_RELOC_SPARC_TLS_LDM_LO10
+ at deffnx {} BFD_RELOC_SPARC_TLS_LDM_ADD
+ at deffnx {} BFD_RELOC_SPARC_TLS_LDM_CALL
+ at deffnx {} BFD_RELOC_SPARC_TLS_LDO_HIX22
+ at deffnx {} BFD_RELOC_SPARC_TLS_LDO_LOX10
+ at deffnx {} BFD_RELOC_SPARC_TLS_LDO_ADD
+ at deffnx {} BFD_RELOC_SPARC_TLS_IE_HI22
+ at deffnx {} BFD_RELOC_SPARC_TLS_IE_LO10
+ at deffnx {} BFD_RELOC_SPARC_TLS_IE_LD
+ at deffnx {} BFD_RELOC_SPARC_TLS_IE_LDX
+ at deffnx {} BFD_RELOC_SPARC_TLS_IE_ADD
+ at deffnx {} BFD_RELOC_SPARC_TLS_LE_HIX22
+ at deffnx {} BFD_RELOC_SPARC_TLS_LE_LOX10
+ at deffnx {} BFD_RELOC_SPARC_TLS_DTPMOD32
+ at deffnx {} BFD_RELOC_SPARC_TLS_DTPMOD64
+ at deffnx {} BFD_RELOC_SPARC_TLS_DTPOFF32
+ at deffnx {} BFD_RELOC_SPARC_TLS_DTPOFF64
+ at deffnx {} BFD_RELOC_SPARC_TLS_TPOFF32
+ at deffnx {} BFD_RELOC_SPARC_TLS_TPOFF64
+SPARC TLS relocations
+ at end deffn
+ at deffn {} BFD_RELOC_SPU_IMM7
+ at deffnx {} BFD_RELOC_SPU_IMM8
+ at deffnx {} BFD_RELOC_SPU_IMM10
+ at deffnx {} BFD_RELOC_SPU_IMM10W
+ at deffnx {} BFD_RELOC_SPU_IMM16
+ at deffnx {} BFD_RELOC_SPU_IMM16W
+ at deffnx {} BFD_RELOC_SPU_IMM18
+ at deffnx {} BFD_RELOC_SPU_PCREL9a
+ at deffnx {} BFD_RELOC_SPU_PCREL9b
+ at deffnx {} BFD_RELOC_SPU_PCREL16
+ at deffnx {} BFD_RELOC_SPU_LO16
+ at deffnx {} BFD_RELOC_SPU_HI16
+ at deffnx {} BFD_RELOC_SPU_PPU32
+ at deffnx {} BFD_RELOC_SPU_PPU64
+ at deffnx {} BFD_RELOC_SPU_ADD_PIC
+SPU Relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_ALPHA_GPDISP_HI16
+Alpha ECOFF and ELF relocations.  Some of these treat the symbol or
+"addend" in some special way.
+For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
+writing; when reading, it will be the absolute section symbol.  The
+addend is the displacement in bytes of the "lda" instruction from
+the "ldah" instruction (which is at the address of this reloc).
+ at end deffn
+ at deffn {} BFD_RELOC_ALPHA_GPDISP_LO16
+For GPDISP_LO16 ("ignore") relocations, the symbol is handled as
+with GPDISP_HI16 relocs.  The addend is ignored when writing the
+relocations out, and is filled in with the file's GP value on
+reading, for convenience.
+ at end deffn
+ at deffn {} BFD_RELOC_ALPHA_GPDISP
+The ELF GPDISP relocation is exactly the same as the GPDISP_HI16
+relocation except that there is no accompanying GPDISP_LO16
+relocation.
+ at end deffn
+ at deffn {} BFD_RELOC_ALPHA_LITERAL
+ at deffnx {} BFD_RELOC_ALPHA_ELF_LITERAL
+ at deffnx {} BFD_RELOC_ALPHA_LITUSE
+The Alpha LITERAL/LITUSE relocs are produced by a symbol reference;
+the assembler turns it into a LDQ instruction to load the address of
+the symbol, and then fills in a register in the real instruction.
+
+The LITERAL reloc, at the LDQ instruction, refers to the .lita
+section symbol.  The addend is ignored when writing, but is filled
+in with the file's GP value on reading, for convenience, as with the
+GPDISP_LO16 reloc.
+
+The ELF_LITERAL reloc is somewhere between 16_GOTOFF and GPDISP_LO16.
+It should refer to the symbol to be referenced, as with 16_GOTOFF,
+but it generates output not based on the position within the .got
+section, but relative to the GP value chosen for the file during the
+final link stage.
+
+The LITUSE reloc, on the instruction using the loaded address, gives
+information to the linker that it might be able to use to optimize
+away some literal section references.  The symbol is ignored (read
+as the absolute section symbol), and the "addend" indicates the type
+of instruction using the register:
+1 - "memory" fmt insn
+2 - byte-manipulation (byte offset reg)
+3 - jsr (target of branch)
+ at end deffn
+ at deffn {} BFD_RELOC_ALPHA_HINT
+The HINT relocation indicates a value that should be filled into the
+"hint" field of a jmp/jsr/ret instruction, for possible branch-
+prediction logic which may be provided on some processors.
+ at end deffn
+ at deffn {} BFD_RELOC_ALPHA_LINKAGE
+The LINKAGE relocation outputs a linkage pair in the object file,
+which is filled by the linker.
+ at end deffn
+ at deffn {} BFD_RELOC_ALPHA_CODEADDR
+The CODEADDR relocation outputs a STO_CA in the object file,
+which is filled by the linker.
+ at end deffn
+ at deffn {} BFD_RELOC_ALPHA_GPREL_HI16
+ at deffnx {} BFD_RELOC_ALPHA_GPREL_LO16
+The GPREL_HI/LO relocations together form a 32-bit offset from the
+GP register.
+ at end deffn
+ at deffn {} BFD_RELOC_ALPHA_BRSGP
+Like BFD_RELOC_23_PCREL_S2, except that the source and target must
+share a common GP, and the target address is adjusted for
+STO_ALPHA_STD_GPLOAD.
+ at end deffn
+ at deffn {} BFD_RELOC_ALPHA_NOP
+The NOP relocation outputs a NOP if the longword displacement
+between two procedure entry points is < 2^21.
+ at end deffn
+ at deffn {} BFD_RELOC_ALPHA_BSR
+The BSR relocation outputs a BSR if the longword displacement
+between two procedure entry points is < 2^21.
+ at end deffn
+ at deffn {} BFD_RELOC_ALPHA_LDA
+The LDA relocation outputs a LDA if the longword displacement
+between two procedure entry points is < 2^16.
+ at end deffn
+ at deffn {} BFD_RELOC_ALPHA_BOH
+The BOH relocation outputs a BSR if the longword displacement
+between two procedure entry points is < 2^21, or else a hint.
+ at end deffn
+ at deffn {} BFD_RELOC_ALPHA_TLSGD
+ at deffnx {} BFD_RELOC_ALPHA_TLSLDM
+ at deffnx {} BFD_RELOC_ALPHA_DTPMOD64
+ at deffnx {} BFD_RELOC_ALPHA_GOTDTPREL16
+ at deffnx {} BFD_RELOC_ALPHA_DTPREL64
+ at deffnx {} BFD_RELOC_ALPHA_DTPREL_HI16
+ at deffnx {} BFD_RELOC_ALPHA_DTPREL_LO16
+ at deffnx {} BFD_RELOC_ALPHA_DTPREL16
+ at deffnx {} BFD_RELOC_ALPHA_GOTTPREL16
+ at deffnx {} BFD_RELOC_ALPHA_TPREL64
+ at deffnx {} BFD_RELOC_ALPHA_TPREL_HI16
+ at deffnx {} BFD_RELOC_ALPHA_TPREL_LO16
+ at deffnx {} BFD_RELOC_ALPHA_TPREL16
+Alpha thread-local storage relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_MIPS_JMP
+ at deffnx {} BFD_RELOC_MICROMIPS_JMP
+The MIPS jump instruction.
+ at end deffn
+ at deffn {} BFD_RELOC_MIPS16_JMP
+The MIPS16 jump instruction.
+ at end deffn
+ at deffn {} BFD_RELOC_MIPS16_GPREL
+MIPS16 GP relative reloc.
+ at end deffn
+ at deffn {} BFD_RELOC_HI16
+High 16 bits of 32-bit value; simple reloc.
+ at end deffn
+ at deffn {} BFD_RELOC_HI16_S
+High 16 bits of 32-bit value but the low 16 bits will be sign
+extended and added to form the final result.  If the low 16
+bits form a negative number, we need to add one to the high value
+to compensate for the borrow when the low bits are added.
+ at end deffn
+ at deffn {} BFD_RELOC_LO16
+Low 16 bits.
+ at end deffn
+ at deffn {} BFD_RELOC_HI16_PCREL
+High 16 bits of 32-bit pc-relative value
+ at end deffn
+ at deffn {} BFD_RELOC_HI16_S_PCREL
+High 16 bits of 32-bit pc-relative value, adjusted
+ at end deffn
+ at deffn {} BFD_RELOC_LO16_PCREL
+Low 16 bits of pc-relative value
+ at end deffn
+ at deffn {} BFD_RELOC_MIPS16_GOT16
+ at deffnx {} BFD_RELOC_MIPS16_CALL16
+Equivalent of BFD_RELOC_MIPS_*, but with the MIPS16 layout of
+16-bit immediate fields
+ at end deffn
+ at deffn {} BFD_RELOC_MIPS16_HI16
+MIPS16 high 16 bits of 32-bit value.
+ at end deffn
+ at deffn {} BFD_RELOC_MIPS16_HI16_S
+MIPS16 high 16 bits of 32-bit value but the low 16 bits will be sign
+extended and added to form the final result.  If the low 16
+bits form a negative number, we need to add one to the high value
+to compensate for the borrow when the low bits are added.
+ at end deffn
+ at deffn {} BFD_RELOC_MIPS16_LO16
+MIPS16 low 16 bits.
+ at end deffn
+ at deffn {} BFD_RELOC_MIPS16_TLS_GD
+ at deffnx {} BFD_RELOC_MIPS16_TLS_LDM
+ at deffnx {} BFD_RELOC_MIPS16_TLS_DTPREL_HI16
+ at deffnx {} BFD_RELOC_MIPS16_TLS_DTPREL_LO16
+ at deffnx {} BFD_RELOC_MIPS16_TLS_GOTTPREL
+ at deffnx {} BFD_RELOC_MIPS16_TLS_TPREL_HI16
+ at deffnx {} BFD_RELOC_MIPS16_TLS_TPREL_LO16
+MIPS16 TLS relocations
+ at end deffn
+ at deffn {} BFD_RELOC_MIPS_LITERAL
+ at deffnx {} BFD_RELOC_MICROMIPS_LITERAL
+Relocation against a MIPS literal section.
+ at end deffn
+ at deffn {} BFD_RELOC_MICROMIPS_7_PCREL_S1
+ at deffnx {} BFD_RELOC_MICROMIPS_10_PCREL_S1
+ at deffnx {} BFD_RELOC_MICROMIPS_16_PCREL_S1
+microMIPS PC-relative relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_MICROMIPS_GPREL16
+ at deffnx {} BFD_RELOC_MICROMIPS_HI16
+ at deffnx {} BFD_RELOC_MICROMIPS_HI16_S
+ at deffnx {} BFD_RELOC_MICROMIPS_LO16
+microMIPS versions of generic BFD relocs.
+ at end deffn
+ at deffn {} BFD_RELOC_MIPS_GOT16
+ at deffnx {} BFD_RELOC_MICROMIPS_GOT16
+ at deffnx {} BFD_RELOC_MIPS_CALL16
+ at deffnx {} BFD_RELOC_MICROMIPS_CALL16
+ at deffnx {} BFD_RELOC_MIPS_GOT_HI16
+ at deffnx {} BFD_RELOC_MICROMIPS_GOT_HI16
+ at deffnx {} BFD_RELOC_MIPS_GOT_LO16
+ at deffnx {} BFD_RELOC_MICROMIPS_GOT_LO16
+ at deffnx {} BFD_RELOC_MIPS_CALL_HI16
+ at deffnx {} BFD_RELOC_MICROMIPS_CALL_HI16
+ at deffnx {} BFD_RELOC_MIPS_CALL_LO16
+ at deffnx {} BFD_RELOC_MICROMIPS_CALL_LO16
+ at deffnx {} BFD_RELOC_MIPS_SUB
+ at deffnx {} BFD_RELOC_MICROMIPS_SUB
+ at deffnx {} BFD_RELOC_MIPS_GOT_PAGE
+ at deffnx {} BFD_RELOC_MICROMIPS_GOT_PAGE
+ at deffnx {} BFD_RELOC_MIPS_GOT_OFST
+ at deffnx {} BFD_RELOC_MICROMIPS_GOT_OFST
+ at deffnx {} BFD_RELOC_MIPS_GOT_DISP
+ at deffnx {} BFD_RELOC_MICROMIPS_GOT_DISP
+ at deffnx {} BFD_RELOC_MIPS_SHIFT5
+ at deffnx {} BFD_RELOC_MIPS_SHIFT6
+ at deffnx {} BFD_RELOC_MIPS_INSERT_A
+ at deffnx {} BFD_RELOC_MIPS_INSERT_B
+ at deffnx {} BFD_RELOC_MIPS_DELETE
+ at deffnx {} BFD_RELOC_MIPS_HIGHEST
+ at deffnx {} BFD_RELOC_MICROMIPS_HIGHEST
+ at deffnx {} BFD_RELOC_MIPS_HIGHER
+ at deffnx {} BFD_RELOC_MICROMIPS_HIGHER
+ at deffnx {} BFD_RELOC_MIPS_SCN_DISP
+ at deffnx {} BFD_RELOC_MICROMIPS_SCN_DISP
+ at deffnx {} BFD_RELOC_MIPS_REL16
+ at deffnx {} BFD_RELOC_MIPS_RELGOT
+ at deffnx {} BFD_RELOC_MIPS_JALR
+ at deffnx {} BFD_RELOC_MICROMIPS_JALR
+ at deffnx {} BFD_RELOC_MIPS_TLS_DTPMOD32
+ at deffnx {} BFD_RELOC_MIPS_TLS_DTPREL32
+ at deffnx {} BFD_RELOC_MIPS_TLS_DTPMOD64
+ at deffnx {} BFD_RELOC_MIPS_TLS_DTPREL64
+ at deffnx {} BFD_RELOC_MIPS_TLS_GD
+ at deffnx {} BFD_RELOC_MICROMIPS_TLS_GD
+ at deffnx {} BFD_RELOC_MIPS_TLS_LDM
+ at deffnx {} BFD_RELOC_MICROMIPS_TLS_LDM
+ at deffnx {} BFD_RELOC_MIPS_TLS_DTPREL_HI16
+ at deffnx {} BFD_RELOC_MICROMIPS_TLS_DTPREL_HI16
+ at deffnx {} BFD_RELOC_MIPS_TLS_DTPREL_LO16
+ at deffnx {} BFD_RELOC_MICROMIPS_TLS_DTPREL_LO16
+ at deffnx {} BFD_RELOC_MIPS_TLS_GOTTPREL
+ at deffnx {} BFD_RELOC_MICROMIPS_TLS_GOTTPREL
+ at deffnx {} BFD_RELOC_MIPS_TLS_TPREL32
+ at deffnx {} BFD_RELOC_MIPS_TLS_TPREL64
+ at deffnx {} BFD_RELOC_MIPS_TLS_TPREL_HI16
+ at deffnx {} BFD_RELOC_MICROMIPS_TLS_TPREL_HI16
+ at deffnx {} BFD_RELOC_MIPS_TLS_TPREL_LO16
+ at deffnx {} BFD_RELOC_MICROMIPS_TLS_TPREL_LO16
+MIPS ELF relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_MIPS_COPY
+ at deffnx {} BFD_RELOC_MIPS_JUMP_SLOT
+MIPS ELF relocations (VxWorks and PLT extensions).
+ at end deffn
+ at deffn {} BFD_RELOC_MOXIE_10_PCREL
+Moxie ELF relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_FRV_LABEL16
+ at deffnx {} BFD_RELOC_FRV_LABEL24
+ at deffnx {} BFD_RELOC_FRV_LO16
+ at deffnx {} BFD_RELOC_FRV_HI16
+ at deffnx {} BFD_RELOC_FRV_GPREL12
+ at deffnx {} BFD_RELOC_FRV_GPRELU12
+ at deffnx {} BFD_RELOC_FRV_GPREL32
+ at deffnx {} BFD_RELOC_FRV_GPRELHI
+ at deffnx {} BFD_RELOC_FRV_GPRELLO
+ at deffnx {} BFD_RELOC_FRV_GOT12
+ at deffnx {} BFD_RELOC_FRV_GOTHI
+ at deffnx {} BFD_RELOC_FRV_GOTLO
+ at deffnx {} BFD_RELOC_FRV_FUNCDESC
+ at deffnx {} BFD_RELOC_FRV_FUNCDESC_GOT12
+ at deffnx {} BFD_RELOC_FRV_FUNCDESC_GOTHI
+ at deffnx {} BFD_RELOC_FRV_FUNCDESC_GOTLO
+ at deffnx {} BFD_RELOC_FRV_FUNCDESC_VALUE
+ at deffnx {} BFD_RELOC_FRV_FUNCDESC_GOTOFF12
+ at deffnx {} BFD_RELOC_FRV_FUNCDESC_GOTOFFHI
+ at deffnx {} BFD_RELOC_FRV_FUNCDESC_GOTOFFLO
+ at deffnx {} BFD_RELOC_FRV_GOTOFF12
+ at deffnx {} BFD_RELOC_FRV_GOTOFFHI
+ at deffnx {} BFD_RELOC_FRV_GOTOFFLO
+ at deffnx {} BFD_RELOC_FRV_GETTLSOFF
+ at deffnx {} BFD_RELOC_FRV_TLSDESC_VALUE
+ at deffnx {} BFD_RELOC_FRV_GOTTLSDESC12
+ at deffnx {} BFD_RELOC_FRV_GOTTLSDESCHI
+ at deffnx {} BFD_RELOC_FRV_GOTTLSDESCLO
+ at deffnx {} BFD_RELOC_FRV_TLSMOFF12
+ at deffnx {} BFD_RELOC_FRV_TLSMOFFHI
+ at deffnx {} BFD_RELOC_FRV_TLSMOFFLO
+ at deffnx {} BFD_RELOC_FRV_GOTTLSOFF12
+ at deffnx {} BFD_RELOC_FRV_GOTTLSOFFHI
+ at deffnx {} BFD_RELOC_FRV_GOTTLSOFFLO
+ at deffnx {} BFD_RELOC_FRV_TLSOFF
+ at deffnx {} BFD_RELOC_FRV_TLSDESC_RELAX
+ at deffnx {} BFD_RELOC_FRV_GETTLSOFF_RELAX
+ at deffnx {} BFD_RELOC_FRV_TLSOFF_RELAX
+ at deffnx {} BFD_RELOC_FRV_TLSMOFF
+Fujitsu Frv Relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_MN10300_GOTOFF24
+This is a 24bit GOT-relative reloc for the mn10300.
+ at end deffn
+ at deffn {} BFD_RELOC_MN10300_GOT32
+This is a 32bit GOT-relative reloc for the mn10300, offset by two bytes
+in the instruction.
+ at end deffn
+ at deffn {} BFD_RELOC_MN10300_GOT24
+This is a 24bit GOT-relative reloc for the mn10300, offset by two bytes
+in the instruction.
+ at end deffn
+ at deffn {} BFD_RELOC_MN10300_GOT16
+This is a 16bit GOT-relative reloc for the mn10300, offset by two bytes
+in the instruction.
+ at end deffn
+ at deffn {} BFD_RELOC_MN10300_COPY
+Copy symbol at runtime.
+ at end deffn
+ at deffn {} BFD_RELOC_MN10300_GLOB_DAT
+Create GOT entry.
+ at end deffn
+ at deffn {} BFD_RELOC_MN10300_JMP_SLOT
+Create PLT entry.
+ at end deffn
+ at deffn {} BFD_RELOC_MN10300_RELATIVE
+Adjust by program base.
+ at end deffn
+ at deffn {} BFD_RELOC_MN10300_SYM_DIFF
+Together with another reloc targeted at the same location,
+allows for a value that is the difference of two symbols
+in the same section.
+ at end deffn
+ at deffn {} BFD_RELOC_MN10300_ALIGN
+The addend of this reloc is an alignment power that must
+be honoured at the offset's location, regardless of linker
+relaxation.
+ at end deffn
+ at deffn {} BFD_RELOC_MN10300_TLS_GD
+ at deffnx {} BFD_RELOC_MN10300_TLS_LD
+ at deffnx {} BFD_RELOC_MN10300_TLS_LDO
+ at deffnx {} BFD_RELOC_MN10300_TLS_GOTIE
+ at deffnx {} BFD_RELOC_MN10300_TLS_IE
+ at deffnx {} BFD_RELOC_MN10300_TLS_LE
+ at deffnx {} BFD_RELOC_MN10300_TLS_DTPMOD
+ at deffnx {} BFD_RELOC_MN10300_TLS_DTPOFF
+ at deffnx {} BFD_RELOC_MN10300_TLS_TPOFF
+Various TLS-related relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_MN10300_32_PCREL
+This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the
+instruction.
+ at end deffn
+ at deffn {} BFD_RELOC_MN10300_16_PCREL
+This is a 16bit pcrel reloc for the mn10300, offset by two bytes in the
+instruction.
+ at end deffn
+ at deffn {} BFD_RELOC_386_GOT32
+ at deffnx {} BFD_RELOC_386_PLT32
+ at deffnx {} BFD_RELOC_386_COPY
+ at deffnx {} BFD_RELOC_386_GLOB_DAT
+ at deffnx {} BFD_RELOC_386_JUMP_SLOT
+ at deffnx {} BFD_RELOC_386_RELATIVE
+ at deffnx {} BFD_RELOC_386_GOTOFF
+ at deffnx {} BFD_RELOC_386_GOTPC
+ at deffnx {} BFD_RELOC_386_TLS_TPOFF
+ at deffnx {} BFD_RELOC_386_TLS_IE
+ at deffnx {} BFD_RELOC_386_TLS_GOTIE
+ at deffnx {} BFD_RELOC_386_TLS_LE
+ at deffnx {} BFD_RELOC_386_TLS_GD
+ at deffnx {} BFD_RELOC_386_TLS_LDM
+ at deffnx {} BFD_RELOC_386_TLS_LDO_32
+ at deffnx {} BFD_RELOC_386_TLS_IE_32
+ at deffnx {} BFD_RELOC_386_TLS_LE_32
+ at deffnx {} BFD_RELOC_386_TLS_DTPMOD32
+ at deffnx {} BFD_RELOC_386_TLS_DTPOFF32
+ at deffnx {} BFD_RELOC_386_TLS_TPOFF32
+ at deffnx {} BFD_RELOC_386_TLS_GOTDESC
+ at deffnx {} BFD_RELOC_386_TLS_DESC_CALL
+ at deffnx {} BFD_RELOC_386_TLS_DESC
+ at deffnx {} BFD_RELOC_386_IRELATIVE
+i386/elf relocations
+ at end deffn
+ at deffn {} BFD_RELOC_X86_64_GOT32
+ at deffnx {} BFD_RELOC_X86_64_PLT32
+ at deffnx {} BFD_RELOC_X86_64_COPY
+ at deffnx {} BFD_RELOC_X86_64_GLOB_DAT
+ at deffnx {} BFD_RELOC_X86_64_JUMP_SLOT
+ at deffnx {} BFD_RELOC_X86_64_RELATIVE
+ at deffnx {} BFD_RELOC_X86_64_GOTPCREL
+ at deffnx {} BFD_RELOC_X86_64_32S
+ at deffnx {} BFD_RELOC_X86_64_DTPMOD64
+ at deffnx {} BFD_RELOC_X86_64_DTPOFF64
+ at deffnx {} BFD_RELOC_X86_64_TPOFF64
+ at deffnx {} BFD_RELOC_X86_64_TLSGD
+ at deffnx {} BFD_RELOC_X86_64_TLSLD
+ at deffnx {} BFD_RELOC_X86_64_DTPOFF32
+ at deffnx {} BFD_RELOC_X86_64_GOTTPOFF
+ at deffnx {} BFD_RELOC_X86_64_TPOFF32
+ at deffnx {} BFD_RELOC_X86_64_GOTOFF64
+ at deffnx {} BFD_RELOC_X86_64_GOTPC32
+ at deffnx {} BFD_RELOC_X86_64_GOT64
+ at deffnx {} BFD_RELOC_X86_64_GOTPCREL64
+ at deffnx {} BFD_RELOC_X86_64_GOTPC64
+ at deffnx {} BFD_RELOC_X86_64_GOTPLT64
+ at deffnx {} BFD_RELOC_X86_64_PLTOFF64
+ at deffnx {} BFD_RELOC_X86_64_GOTPC32_TLSDESC
+ at deffnx {} BFD_RELOC_X86_64_TLSDESC_CALL
+ at deffnx {} BFD_RELOC_X86_64_TLSDESC
+ at deffnx {} BFD_RELOC_X86_64_IRELATIVE
+x86-64/elf relocations
+ at end deffn
+ at deffn {} BFD_RELOC_NS32K_IMM_8
+ at deffnx {} BFD_RELOC_NS32K_IMM_16
+ at deffnx {} BFD_RELOC_NS32K_IMM_32
+ at deffnx {} BFD_RELOC_NS32K_IMM_8_PCREL
+ at deffnx {} BFD_RELOC_NS32K_IMM_16_PCREL
+ at deffnx {} BFD_RELOC_NS32K_IMM_32_PCREL
+ at deffnx {} BFD_RELOC_NS32K_DISP_8
+ at deffnx {} BFD_RELOC_NS32K_DISP_16
+ at deffnx {} BFD_RELOC_NS32K_DISP_32
+ at deffnx {} BFD_RELOC_NS32K_DISP_8_PCREL
+ at deffnx {} BFD_RELOC_NS32K_DISP_16_PCREL
+ at deffnx {} BFD_RELOC_NS32K_DISP_32_PCREL
+ns32k relocations
+ at end deffn
+ at deffn {} BFD_RELOC_PDP11_DISP_8_PCREL
+ at deffnx {} BFD_RELOC_PDP11_DISP_6_PCREL
+PDP11 relocations
+ at end deffn
+ at deffn {} BFD_RELOC_PJ_CODE_HI16
+ at deffnx {} BFD_RELOC_PJ_CODE_LO16
+ at deffnx {} BFD_RELOC_PJ_CODE_DIR16
+ at deffnx {} BFD_RELOC_PJ_CODE_DIR32
+ at deffnx {} BFD_RELOC_PJ_CODE_REL16
+ at deffnx {} BFD_RELOC_PJ_CODE_REL32
+Picojava relocs.  Not all of these appear in object files.
+ at end deffn
+ at deffn {} BFD_RELOC_PPC_B26
+ at deffnx {} BFD_RELOC_PPC_BA26
+ at deffnx {} BFD_RELOC_PPC_TOC16
+ at deffnx {} BFD_RELOC_PPC_B16
+ at deffnx {} BFD_RELOC_PPC_B16_BRTAKEN
+ at deffnx {} BFD_RELOC_PPC_B16_BRNTAKEN
+ at deffnx {} BFD_RELOC_PPC_BA16
+ at deffnx {} BFD_RELOC_PPC_BA16_BRTAKEN
+ at deffnx {} BFD_RELOC_PPC_BA16_BRNTAKEN
+ at deffnx {} BFD_RELOC_PPC_COPY
+ at deffnx {} BFD_RELOC_PPC_GLOB_DAT
+ at deffnx {} BFD_RELOC_PPC_JMP_SLOT
+ at deffnx {} BFD_RELOC_PPC_RELATIVE
+ at deffnx {} BFD_RELOC_PPC_LOCAL24PC
+ at deffnx {} BFD_RELOC_PPC_EMB_NADDR32
+ at deffnx {} BFD_RELOC_PPC_EMB_NADDR16
+ at deffnx {} BFD_RELOC_PPC_EMB_NADDR16_LO
+ at deffnx {} BFD_RELOC_PPC_EMB_NADDR16_HI
+ at deffnx {} BFD_RELOC_PPC_EMB_NADDR16_HA
+ at deffnx {} BFD_RELOC_PPC_EMB_SDAI16
+ at deffnx {} BFD_RELOC_PPC_EMB_SDA2I16
+ at deffnx {} BFD_RELOC_PPC_EMB_SDA2REL
+ at deffnx {} BFD_RELOC_PPC_EMB_SDA21
+ at deffnx {} BFD_RELOC_PPC_EMB_MRKREF
+ at deffnx {} BFD_RELOC_PPC_EMB_RELSEC16
+ at deffnx {} BFD_RELOC_PPC_EMB_RELST_LO
+ at deffnx {} BFD_RELOC_PPC_EMB_RELST_HI
+ at deffnx {} BFD_RELOC_PPC_EMB_RELST_HA
+ at deffnx {} BFD_RELOC_PPC_EMB_BIT_FLD
+ at deffnx {} BFD_RELOC_PPC_EMB_RELSDA
+ at deffnx {} BFD_RELOC_PPC_VLE_REL8
+ at deffnx {} BFD_RELOC_PPC_VLE_REL15
+ at deffnx {} BFD_RELOC_PPC_VLE_REL24
+ at deffnx {} BFD_RELOC_PPC_VLE_LO16A
+ at deffnx {} BFD_RELOC_PPC_VLE_LO16D
+ at deffnx {} BFD_RELOC_PPC_VLE_HI16A
+ at deffnx {} BFD_RELOC_PPC_VLE_HI16D
+ at deffnx {} BFD_RELOC_PPC_VLE_HA16A
+ at deffnx {} BFD_RELOC_PPC_VLE_HA16D
+ at deffnx {} BFD_RELOC_PPC_VLE_SDA21
+ at deffnx {} BFD_RELOC_PPC_VLE_SDA21_LO
+ at deffnx {} BFD_RELOC_PPC_VLE_SDAREL_LO16A
+ at deffnx {} BFD_RELOC_PPC_VLE_SDAREL_LO16D
+ at deffnx {} BFD_RELOC_PPC_VLE_SDAREL_HI16A
+ at deffnx {} BFD_RELOC_PPC_VLE_SDAREL_HI16D
+ at deffnx {} BFD_RELOC_PPC_VLE_SDAREL_HA16A
+ at deffnx {} BFD_RELOC_PPC_VLE_SDAREL_HA16D
+ at deffnx {} BFD_RELOC_PPC64_HIGHER
+ at deffnx {} BFD_RELOC_PPC64_HIGHER_S
+ at deffnx {} BFD_RELOC_PPC64_HIGHEST
+ at deffnx {} BFD_RELOC_PPC64_HIGHEST_S
+ at deffnx {} BFD_RELOC_PPC64_TOC16_LO
+ at deffnx {} BFD_RELOC_PPC64_TOC16_HI
+ at deffnx {} BFD_RELOC_PPC64_TOC16_HA
+ at deffnx {} BFD_RELOC_PPC64_TOC
+ at deffnx {} BFD_RELOC_PPC64_PLTGOT16
+ at deffnx {} BFD_RELOC_PPC64_PLTGOT16_LO
+ at deffnx {} BFD_RELOC_PPC64_PLTGOT16_HI
+ at deffnx {} BFD_RELOC_PPC64_PLTGOT16_HA
+ at deffnx {} BFD_RELOC_PPC64_ADDR16_DS
+ at deffnx {} BFD_RELOC_PPC64_ADDR16_LO_DS
+ at deffnx {} BFD_RELOC_PPC64_GOT16_DS
+ at deffnx {} BFD_RELOC_PPC64_GOT16_LO_DS
+ at deffnx {} BFD_RELOC_PPC64_PLT16_LO_DS
+ at deffnx {} BFD_RELOC_PPC64_SECTOFF_DS
+ at deffnx {} BFD_RELOC_PPC64_SECTOFF_LO_DS
+ at deffnx {} BFD_RELOC_PPC64_TOC16_DS
+ at deffnx {} BFD_RELOC_PPC64_TOC16_LO_DS
+ at deffnx {} BFD_RELOC_PPC64_PLTGOT16_DS
+ at deffnx {} BFD_RELOC_PPC64_PLTGOT16_LO_DS
+Power(rs6000) and PowerPC relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_PPC_TLS
+ at deffnx {} BFD_RELOC_PPC_TLSGD
+ at deffnx {} BFD_RELOC_PPC_TLSLD
+ at deffnx {} BFD_RELOC_PPC_DTPMOD
+ at deffnx {} BFD_RELOC_PPC_TPREL16
+ at deffnx {} BFD_RELOC_PPC_TPREL16_LO
+ at deffnx {} BFD_RELOC_PPC_TPREL16_HI
+ at deffnx {} BFD_RELOC_PPC_TPREL16_HA
+ at deffnx {} BFD_RELOC_PPC_TPREL
+ at deffnx {} BFD_RELOC_PPC_DTPREL16
+ at deffnx {} BFD_RELOC_PPC_DTPREL16_LO
+ at deffnx {} BFD_RELOC_PPC_DTPREL16_HI
+ at deffnx {} BFD_RELOC_PPC_DTPREL16_HA
+ at deffnx {} BFD_RELOC_PPC_DTPREL
+ at deffnx {} BFD_RELOC_PPC_GOT_TLSGD16
+ at deffnx {} BFD_RELOC_PPC_GOT_TLSGD16_LO
+ at deffnx {} BFD_RELOC_PPC_GOT_TLSGD16_HI
+ at deffnx {} BFD_RELOC_PPC_GOT_TLSGD16_HA
+ at deffnx {} BFD_RELOC_PPC_GOT_TLSLD16
+ at deffnx {} BFD_RELOC_PPC_GOT_TLSLD16_LO
+ at deffnx {} BFD_RELOC_PPC_GOT_TLSLD16_HI
+ at deffnx {} BFD_RELOC_PPC_GOT_TLSLD16_HA
+ at deffnx {} BFD_RELOC_PPC_GOT_TPREL16
+ at deffnx {} BFD_RELOC_PPC_GOT_TPREL16_LO
+ at deffnx {} BFD_RELOC_PPC_GOT_TPREL16_HI
+ at deffnx {} BFD_RELOC_PPC_GOT_TPREL16_HA
+ at deffnx {} BFD_RELOC_PPC_GOT_DTPREL16
+ at deffnx {} BFD_RELOC_PPC_GOT_DTPREL16_LO
+ at deffnx {} BFD_RELOC_PPC_GOT_DTPREL16_HI
+ at deffnx {} BFD_RELOC_PPC_GOT_DTPREL16_HA
+ at deffnx {} BFD_RELOC_PPC64_TPREL16_DS
+ at deffnx {} BFD_RELOC_PPC64_TPREL16_LO_DS
+ at deffnx {} BFD_RELOC_PPC64_TPREL16_HIGHER
+ at deffnx {} BFD_RELOC_PPC64_TPREL16_HIGHERA
+ at deffnx {} BFD_RELOC_PPC64_TPREL16_HIGHEST
+ at deffnx {} BFD_RELOC_PPC64_TPREL16_HIGHESTA
+ at deffnx {} BFD_RELOC_PPC64_DTPREL16_DS
+ at deffnx {} BFD_RELOC_PPC64_DTPREL16_LO_DS
+ at deffnx {} BFD_RELOC_PPC64_DTPREL16_HIGHER
+ at deffnx {} BFD_RELOC_PPC64_DTPREL16_HIGHERA
+ at deffnx {} BFD_RELOC_PPC64_DTPREL16_HIGHEST
+ at deffnx {} BFD_RELOC_PPC64_DTPREL16_HIGHESTA
+PowerPC and PowerPC64 thread-local storage relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_I370_D12
+IBM 370/390 relocations
+ at end deffn
+ at deffn {} BFD_RELOC_CTOR
+The type of reloc used to build a constructor table - at the moment
+probably a 32 bit wide absolute relocation, but the target can choose.
+It generally does map to one of the other relocation types.
+ at end deffn
+ at deffn {} BFD_RELOC_ARM_PCREL_BRANCH
+ARM 26 bit pc-relative branch.  The lowest two bits must be zero and are
+not stored in the instruction.
+ at end deffn
+ at deffn {} BFD_RELOC_ARM_PCREL_BLX
+ARM 26 bit pc-relative branch.  The lowest bit must be zero and is
+not stored in the instruction.  The 2nd lowest bit comes from a 1 bit
+field in the instruction.
+ at end deffn
+ at deffn {} BFD_RELOC_THUMB_PCREL_BLX
+Thumb 22 bit pc-relative branch.  The lowest bit must be zero and is
+not stored in the instruction.  The 2nd lowest bit comes from a 1 bit
+field in the instruction.
+ at end deffn
+ at deffn {} BFD_RELOC_ARM_PCREL_CALL
+ARM 26-bit pc-relative branch for an unconditional BL or BLX instruction.
+ at end deffn
+ at deffn {} BFD_RELOC_ARM_PCREL_JUMP
+ARM 26-bit pc-relative branch for B or conditional BL instruction.
+ at end deffn
+ at deffn {} BFD_RELOC_THUMB_PCREL_BRANCH7
+ at deffnx {} BFD_RELOC_THUMB_PCREL_BRANCH9
+ at deffnx {} BFD_RELOC_THUMB_PCREL_BRANCH12
+ at deffnx {} BFD_RELOC_THUMB_PCREL_BRANCH20
+ at deffnx {} BFD_RELOC_THUMB_PCREL_BRANCH23
+ at deffnx {} BFD_RELOC_THUMB_PCREL_BRANCH25
+Thumb 7-, 9-, 12-, 20-, 23-, and 25-bit pc-relative branches.
+The lowest bit must be zero and is not stored in the instruction.
+Note that the corresponding ELF R_ARM_THM_JUMPnn constant has an
+"nn" one smaller in all cases.  Note further that BRANCH23
+corresponds to R_ARM_THM_CALL.
+ at end deffn
+ at deffn {} BFD_RELOC_ARM_OFFSET_IMM
+12-bit immediate offset, used in ARM-format ldr and str instructions.
+ at end deffn
+ at deffn {} BFD_RELOC_ARM_THUMB_OFFSET
+5-bit immediate offset, used in Thumb-format ldr and str instructions.
+ at end deffn
+ at deffn {} BFD_RELOC_ARM_TARGET1
+Pc-relative or absolute relocation depending on target.  Used for
+entries in .init_array sections.
+ at end deffn
+ at deffn {} BFD_RELOC_ARM_ROSEGREL32
+Read-only segment base relative address.
+ at end deffn
+ at deffn {} BFD_RELOC_ARM_SBREL32
+Data segment base relative address.
+ at end deffn
+ at deffn {} BFD_RELOC_ARM_TARGET2
+This reloc is used for references to RTTI data from exception handling
+tables.  The actual definition depends on the target.  It may be a
+pc-relative or some form of GOT-indirect relocation.
+ at end deffn
+ at deffn {} BFD_RELOC_ARM_PREL31
+31-bit PC relative address.
+ at end deffn
+ at deffn {} BFD_RELOC_ARM_MOVW
+ at deffnx {} BFD_RELOC_ARM_MOVT
+ at deffnx {} BFD_RELOC_ARM_MOVW_PCREL
+ at deffnx {} BFD_RELOC_ARM_MOVT_PCREL
+ at deffnx {} BFD_RELOC_ARM_THUMB_MOVW
+ at deffnx {} BFD_RELOC_ARM_THUMB_MOVT
+ at deffnx {} BFD_RELOC_ARM_THUMB_MOVW_PCREL
+ at deffnx {} BFD_RELOC_ARM_THUMB_MOVT_PCREL
+Low and High halfword relocations for MOVW and MOVT instructions.
+ at end deffn
+ at deffn {} BFD_RELOC_ARM_JUMP_SLOT
+ at deffnx {} BFD_RELOC_ARM_GLOB_DAT
+ at deffnx {} BFD_RELOC_ARM_GOT32
+ at deffnx {} BFD_RELOC_ARM_PLT32
+ at deffnx {} BFD_RELOC_ARM_RELATIVE
+ at deffnx {} BFD_RELOC_ARM_GOTOFF
+ at deffnx {} BFD_RELOC_ARM_GOTPC
+ at deffnx {} BFD_RELOC_ARM_GOT_PREL
+Relocations for setting up GOTs and PLTs for shared libraries.
+ at end deffn
+ at deffn {} BFD_RELOC_ARM_TLS_GD32
+ at deffnx {} BFD_RELOC_ARM_TLS_LDO32
+ at deffnx {} BFD_RELOC_ARM_TLS_LDM32
+ at deffnx {} BFD_RELOC_ARM_TLS_DTPOFF32
+ at deffnx {} BFD_RELOC_ARM_TLS_DTPMOD32
+ at deffnx {} BFD_RELOC_ARM_TLS_TPOFF32
+ at deffnx {} BFD_RELOC_ARM_TLS_IE32
+ at deffnx {} BFD_RELOC_ARM_TLS_LE32
+ at deffnx {} BFD_RELOC_ARM_TLS_GOTDESC
+ at deffnx {} BFD_RELOC_ARM_TLS_CALL
+ at deffnx {} BFD_RELOC_ARM_THM_TLS_CALL
+ at deffnx {} BFD_RELOC_ARM_TLS_DESCSEQ
+ at deffnx {} BFD_RELOC_ARM_THM_TLS_DESCSEQ
+ at deffnx {} BFD_RELOC_ARM_TLS_DESC
+ARM thread-local storage relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_ARM_ALU_PC_G0_NC
+ at deffnx {} BFD_RELOC_ARM_ALU_PC_G0
+ at deffnx {} BFD_RELOC_ARM_ALU_PC_G1_NC
+ at deffnx {} BFD_RELOC_ARM_ALU_PC_G1
+ at deffnx {} BFD_RELOC_ARM_ALU_PC_G2
+ at deffnx {} BFD_RELOC_ARM_LDR_PC_G0
+ at deffnx {} BFD_RELOC_ARM_LDR_PC_G1
+ at deffnx {} BFD_RELOC_ARM_LDR_PC_G2
+ at deffnx {} BFD_RELOC_ARM_LDRS_PC_G0
+ at deffnx {} BFD_RELOC_ARM_LDRS_PC_G1
+ at deffnx {} BFD_RELOC_ARM_LDRS_PC_G2
+ at deffnx {} BFD_RELOC_ARM_LDC_PC_G0
+ at deffnx {} BFD_RELOC_ARM_LDC_PC_G1
+ at deffnx {} BFD_RELOC_ARM_LDC_PC_G2
+ at deffnx {} BFD_RELOC_ARM_ALU_SB_G0_NC
+ at deffnx {} BFD_RELOC_ARM_ALU_SB_G0
+ at deffnx {} BFD_RELOC_ARM_ALU_SB_G1_NC
+ at deffnx {} BFD_RELOC_ARM_ALU_SB_G1
+ at deffnx {} BFD_RELOC_ARM_ALU_SB_G2
+ at deffnx {} BFD_RELOC_ARM_LDR_SB_G0
+ at deffnx {} BFD_RELOC_ARM_LDR_SB_G1
+ at deffnx {} BFD_RELOC_ARM_LDR_SB_G2
+ at deffnx {} BFD_RELOC_ARM_LDRS_SB_G0
+ at deffnx {} BFD_RELOC_ARM_LDRS_SB_G1
+ at deffnx {} BFD_RELOC_ARM_LDRS_SB_G2
+ at deffnx {} BFD_RELOC_ARM_LDC_SB_G0
+ at deffnx {} BFD_RELOC_ARM_LDC_SB_G1
+ at deffnx {} BFD_RELOC_ARM_LDC_SB_G2
+ARM group relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_ARM_V4BX
+Annotation of BX instructions.
+ at end deffn
+ at deffn {} BFD_RELOC_ARM_IRELATIVE
+ARM support for STT_GNU_IFUNC.
+ at end deffn
+ at deffn {} BFD_RELOC_ARM_IMMEDIATE
+ at deffnx {} BFD_RELOC_ARM_ADRL_IMMEDIATE
+ at deffnx {} BFD_RELOC_ARM_T32_IMMEDIATE
+ at deffnx {} BFD_RELOC_ARM_T32_ADD_IMM
+ at deffnx {} BFD_RELOC_ARM_T32_IMM12
+ at deffnx {} BFD_RELOC_ARM_T32_ADD_PC12
+ at deffnx {} BFD_RELOC_ARM_SHIFT_IMM
+ at deffnx {} BFD_RELOC_ARM_SMC
+ at deffnx {} BFD_RELOC_ARM_HVC
+ at deffnx {} BFD_RELOC_ARM_SWI
+ at deffnx {} BFD_RELOC_ARM_MULTI
+ at deffnx {} BFD_RELOC_ARM_CP_OFF_IMM
+ at deffnx {} BFD_RELOC_ARM_CP_OFF_IMM_S2
+ at deffnx {} BFD_RELOC_ARM_T32_CP_OFF_IMM
+ at deffnx {} BFD_RELOC_ARM_T32_CP_OFF_IMM_S2
+ at deffnx {} BFD_RELOC_ARM_ADR_IMM
+ at deffnx {} BFD_RELOC_ARM_LDR_IMM
+ at deffnx {} BFD_RELOC_ARM_LITERAL
+ at deffnx {} BFD_RELOC_ARM_IN_POOL
+ at deffnx {} BFD_RELOC_ARM_OFFSET_IMM8
+ at deffnx {} BFD_RELOC_ARM_T32_OFFSET_U8
+ at deffnx {} BFD_RELOC_ARM_T32_OFFSET_IMM
+ at deffnx {} BFD_RELOC_ARM_HWLITERAL
+ at deffnx {} BFD_RELOC_ARM_THUMB_ADD
+ at deffnx {} BFD_RELOC_ARM_THUMB_IMM
+ at deffnx {} BFD_RELOC_ARM_THUMB_SHIFT
+These relocs are only used within the ARM assembler.  They are not
+(at present) written to any object files.
+ at end deffn
+ at deffn {} BFD_RELOC_SH_PCDISP8BY2
+ at deffnx {} BFD_RELOC_SH_PCDISP12BY2
+ at deffnx {} BFD_RELOC_SH_IMM3
+ at deffnx {} BFD_RELOC_SH_IMM3U
+ at deffnx {} BFD_RELOC_SH_DISP12
+ at deffnx {} BFD_RELOC_SH_DISP12BY2
+ at deffnx {} BFD_RELOC_SH_DISP12BY4
+ at deffnx {} BFD_RELOC_SH_DISP12BY8
+ at deffnx {} BFD_RELOC_SH_DISP20
+ at deffnx {} BFD_RELOC_SH_DISP20BY8
+ at deffnx {} BFD_RELOC_SH_IMM4
+ at deffnx {} BFD_RELOC_SH_IMM4BY2
+ at deffnx {} BFD_RELOC_SH_IMM4BY4
+ at deffnx {} BFD_RELOC_SH_IMM8
+ at deffnx {} BFD_RELOC_SH_IMM8BY2
+ at deffnx {} BFD_RELOC_SH_IMM8BY4
+ at deffnx {} BFD_RELOC_SH_PCRELIMM8BY2
+ at deffnx {} BFD_RELOC_SH_PCRELIMM8BY4
+ at deffnx {} BFD_RELOC_SH_SWITCH16
+ at deffnx {} BFD_RELOC_SH_SWITCH32
+ at deffnx {} BFD_RELOC_SH_USES
+ at deffnx {} BFD_RELOC_SH_COUNT
+ at deffnx {} BFD_RELOC_SH_ALIGN
+ at deffnx {} BFD_RELOC_SH_CODE
+ at deffnx {} BFD_RELOC_SH_DATA
+ at deffnx {} BFD_RELOC_SH_LABEL
+ at deffnx {} BFD_RELOC_SH_LOOP_START
+ at deffnx {} BFD_RELOC_SH_LOOP_END
+ at deffnx {} BFD_RELOC_SH_COPY
+ at deffnx {} BFD_RELOC_SH_GLOB_DAT
+ at deffnx {} BFD_RELOC_SH_JMP_SLOT
+ at deffnx {} BFD_RELOC_SH_RELATIVE
+ at deffnx {} BFD_RELOC_SH_GOTPC
+ at deffnx {} BFD_RELOC_SH_GOT_LOW16
+ at deffnx {} BFD_RELOC_SH_GOT_MEDLOW16
+ at deffnx {} BFD_RELOC_SH_GOT_MEDHI16
+ at deffnx {} BFD_RELOC_SH_GOT_HI16
+ at deffnx {} BFD_RELOC_SH_GOTPLT_LOW16
+ at deffnx {} BFD_RELOC_SH_GOTPLT_MEDLOW16
+ at deffnx {} BFD_RELOC_SH_GOTPLT_MEDHI16
+ at deffnx {} BFD_RELOC_SH_GOTPLT_HI16
+ at deffnx {} BFD_RELOC_SH_PLT_LOW16
+ at deffnx {} BFD_RELOC_SH_PLT_MEDLOW16
+ at deffnx {} BFD_RELOC_SH_PLT_MEDHI16
+ at deffnx {} BFD_RELOC_SH_PLT_HI16
+ at deffnx {} BFD_RELOC_SH_GOTOFF_LOW16
+ at deffnx {} BFD_RELOC_SH_GOTOFF_MEDLOW16
+ at deffnx {} BFD_RELOC_SH_GOTOFF_MEDHI16
+ at deffnx {} BFD_RELOC_SH_GOTOFF_HI16
+ at deffnx {} BFD_RELOC_SH_GOTPC_LOW16
+ at deffnx {} BFD_RELOC_SH_GOTPC_MEDLOW16
+ at deffnx {} BFD_RELOC_SH_GOTPC_MEDHI16
+ at deffnx {} BFD_RELOC_SH_GOTPC_HI16
+ at deffnx {} BFD_RELOC_SH_COPY64
+ at deffnx {} BFD_RELOC_SH_GLOB_DAT64
+ at deffnx {} BFD_RELOC_SH_JMP_SLOT64
+ at deffnx {} BFD_RELOC_SH_RELATIVE64
+ at deffnx {} BFD_RELOC_SH_GOT10BY4
+ at deffnx {} BFD_RELOC_SH_GOT10BY8
+ at deffnx {} BFD_RELOC_SH_GOTPLT10BY4
+ at deffnx {} BFD_RELOC_SH_GOTPLT10BY8
+ at deffnx {} BFD_RELOC_SH_GOTPLT32
+ at deffnx {} BFD_RELOC_SH_SHMEDIA_CODE
+ at deffnx {} BFD_RELOC_SH_IMMU5
+ at deffnx {} BFD_RELOC_SH_IMMS6
+ at deffnx {} BFD_RELOC_SH_IMMS6BY32
+ at deffnx {} BFD_RELOC_SH_IMMU6
+ at deffnx {} BFD_RELOC_SH_IMMS10
+ at deffnx {} BFD_RELOC_SH_IMMS10BY2
+ at deffnx {} BFD_RELOC_SH_IMMS10BY4
+ at deffnx {} BFD_RELOC_SH_IMMS10BY8
+ at deffnx {} BFD_RELOC_SH_IMMS16
+ at deffnx {} BFD_RELOC_SH_IMMU16
+ at deffnx {} BFD_RELOC_SH_IMM_LOW16
+ at deffnx {} BFD_RELOC_SH_IMM_LOW16_PCREL
+ at deffnx {} BFD_RELOC_SH_IMM_MEDLOW16
+ at deffnx {} BFD_RELOC_SH_IMM_MEDLOW16_PCREL
+ at deffnx {} BFD_RELOC_SH_IMM_MEDHI16
+ at deffnx {} BFD_RELOC_SH_IMM_MEDHI16_PCREL
+ at deffnx {} BFD_RELOC_SH_IMM_HI16
+ at deffnx {} BFD_RELOC_SH_IMM_HI16_PCREL
+ at deffnx {} BFD_RELOC_SH_PT_16
+ at deffnx {} BFD_RELOC_SH_TLS_GD_32
+ at deffnx {} BFD_RELOC_SH_TLS_LD_32
+ at deffnx {} BFD_RELOC_SH_TLS_LDO_32
+ at deffnx {} BFD_RELOC_SH_TLS_IE_32
+ at deffnx {} BFD_RELOC_SH_TLS_LE_32
+ at deffnx {} BFD_RELOC_SH_TLS_DTPMOD32
+ at deffnx {} BFD_RELOC_SH_TLS_DTPOFF32
+ at deffnx {} BFD_RELOC_SH_TLS_TPOFF32
+ at deffnx {} BFD_RELOC_SH_GOT20
+ at deffnx {} BFD_RELOC_SH_GOTOFF20
+ at deffnx {} BFD_RELOC_SH_GOTFUNCDESC
+ at deffnx {} BFD_RELOC_SH_GOTFUNCDESC20
+ at deffnx {} BFD_RELOC_SH_GOTOFFFUNCDESC
+ at deffnx {} BFD_RELOC_SH_GOTOFFFUNCDESC20
+ at deffnx {} BFD_RELOC_SH_FUNCDESC
+Renesas / SuperH SH relocs.  Not all of these appear in object files.
+ at end deffn
+ at deffn {} BFD_RELOC_ARC_B22_PCREL
+ARC Cores relocs.
+ARC 22 bit pc-relative branch.  The lowest two bits must be zero and are
+not stored in the instruction.  The high 20 bits are installed in bits 26
+through 7 of the instruction.
+ at end deffn
+ at deffn {} BFD_RELOC_ARC_B26
+ARC 26 bit absolute branch.  The lowest two bits must be zero and are not
+stored in the instruction.  The high 24 bits are installed in bits 23
+through 0.
+ at end deffn
+ at deffn {} BFD_RELOC_BFIN_16_IMM
+ADI Blackfin 16 bit immediate absolute reloc.
+ at end deffn
+ at deffn {} BFD_RELOC_BFIN_16_HIGH
+ADI Blackfin 16 bit immediate absolute reloc higher 16 bits.
+ at end deffn
+ at deffn {} BFD_RELOC_BFIN_4_PCREL
+ADI Blackfin 'a' part of LSETUP.
+ at end deffn
+ at deffn {} BFD_RELOC_BFIN_5_PCREL
+ADI Blackfin.
+ at end deffn
+ at deffn {} BFD_RELOC_BFIN_16_LOW
+ADI Blackfin 16 bit immediate absolute reloc lower 16 bits.
+ at end deffn
+ at deffn {} BFD_RELOC_BFIN_10_PCREL
+ADI Blackfin.
+ at end deffn
+ at deffn {} BFD_RELOC_BFIN_11_PCREL
+ADI Blackfin 'b' part of LSETUP.
+ at end deffn
+ at deffn {} BFD_RELOC_BFIN_12_PCREL_JUMP
+ADI Blackfin.
+ at end deffn
+ at deffn {} BFD_RELOC_BFIN_12_PCREL_JUMP_S
+ADI Blackfin Short jump, pcrel.
+ at end deffn
+ at deffn {} BFD_RELOC_BFIN_24_PCREL_CALL_X
+ADI Blackfin Call.x not implemented.
+ at end deffn
+ at deffn {} BFD_RELOC_BFIN_24_PCREL_JUMP_L
+ADI Blackfin Long Jump pcrel.
+ at end deffn
+ at deffn {} BFD_RELOC_BFIN_GOT17M4
+ at deffnx {} BFD_RELOC_BFIN_GOTHI
+ at deffnx {} BFD_RELOC_BFIN_GOTLO
+ at deffnx {} BFD_RELOC_BFIN_FUNCDESC
+ at deffnx {} BFD_RELOC_BFIN_FUNCDESC_GOT17M4
+ at deffnx {} BFD_RELOC_BFIN_FUNCDESC_GOTHI
+ at deffnx {} BFD_RELOC_BFIN_FUNCDESC_GOTLO
+ at deffnx {} BFD_RELOC_BFIN_FUNCDESC_VALUE
+ at deffnx {} BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4
+ at deffnx {} BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI
+ at deffnx {} BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO
+ at deffnx {} BFD_RELOC_BFIN_GOTOFF17M4
+ at deffnx {} BFD_RELOC_BFIN_GOTOFFHI
+ at deffnx {} BFD_RELOC_BFIN_GOTOFFLO
+ADI Blackfin FD-PIC relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_BFIN_GOT
+ADI Blackfin GOT relocation.
+ at end deffn
+ at deffn {} BFD_RELOC_BFIN_PLTPC
+ADI Blackfin PLTPC relocation.
+ at end deffn
+ at deffn {} BFD_ARELOC_BFIN_PUSH
+ADI Blackfin arithmetic relocation.
+ at end deffn
+ at deffn {} BFD_ARELOC_BFIN_CONST
+ADI Blackfin arithmetic relocation.
+ at end deffn
+ at deffn {} BFD_ARELOC_BFIN_ADD
+ADI Blackfin arithmetic relocation.
+ at end deffn
+ at deffn {} BFD_ARELOC_BFIN_SUB
+ADI Blackfin arithmetic relocation.
+ at end deffn
+ at deffn {} BFD_ARELOC_BFIN_MULT
+ADI Blackfin arithmetic relocation.
+ at end deffn
+ at deffn {} BFD_ARELOC_BFIN_DIV
+ADI Blackfin arithmetic relocation.
+ at end deffn
+ at deffn {} BFD_ARELOC_BFIN_MOD
+ADI Blackfin arithmetic relocation.
+ at end deffn
+ at deffn {} BFD_ARELOC_BFIN_LSHIFT
+ADI Blackfin arithmetic relocation.
+ at end deffn
+ at deffn {} BFD_ARELOC_BFIN_RSHIFT
+ADI Blackfin arithmetic relocation.
+ at end deffn
+ at deffn {} BFD_ARELOC_BFIN_AND
+ADI Blackfin arithmetic relocation.
+ at end deffn
+ at deffn {} BFD_ARELOC_BFIN_OR
+ADI Blackfin arithmetic relocation.
+ at end deffn
+ at deffn {} BFD_ARELOC_BFIN_XOR
+ADI Blackfin arithmetic relocation.
+ at end deffn
+ at deffn {} BFD_ARELOC_BFIN_LAND
+ADI Blackfin arithmetic relocation.
+ at end deffn
+ at deffn {} BFD_ARELOC_BFIN_LOR
+ADI Blackfin arithmetic relocation.
+ at end deffn
+ at deffn {} BFD_ARELOC_BFIN_LEN
+ADI Blackfin arithmetic relocation.
+ at end deffn
+ at deffn {} BFD_ARELOC_BFIN_NEG
+ADI Blackfin arithmetic relocation.
+ at end deffn
+ at deffn {} BFD_ARELOC_BFIN_COMP
+ADI Blackfin arithmetic relocation.
+ at end deffn
+ at deffn {} BFD_ARELOC_BFIN_PAGE
+ADI Blackfin arithmetic relocation.
+ at end deffn
+ at deffn {} BFD_ARELOC_BFIN_HWPAGE
+ADI Blackfin arithmetic relocation.
+ at end deffn
+ at deffn {} BFD_ARELOC_BFIN_ADDR
+ADI Blackfin arithmetic relocation.
+ at end deffn
+ at deffn {} BFD_RELOC_D10V_10_PCREL_R
+Mitsubishi D10V relocs.
+This is a 10-bit reloc with the right 2 bits
+assumed to be 0.
+ at end deffn
+ at deffn {} BFD_RELOC_D10V_10_PCREL_L
+Mitsubishi D10V relocs.
+This is a 10-bit reloc with the right 2 bits
+assumed to be 0.  This is the same as the previous reloc
+except it is in the left container, i.e.,
+shifted left 15 bits.
+ at end deffn
+ at deffn {} BFD_RELOC_D10V_18
+This is an 18-bit reloc with the right 2 bits
+assumed to be 0.
+ at end deffn
+ at deffn {} BFD_RELOC_D10V_18_PCREL
+This is an 18-bit reloc with the right 2 bits
+assumed to be 0.
+ at end deffn
+ at deffn {} BFD_RELOC_D30V_6
+Mitsubishi D30V relocs.
+This is a 6-bit absolute reloc.
+ at end deffn
+ at deffn {} BFD_RELOC_D30V_9_PCREL
+This is a 6-bit pc-relative reloc with
+the right 3 bits assumed to be 0.
+ at end deffn
+ at deffn {} BFD_RELOC_D30V_9_PCREL_R
+This is a 6-bit pc-relative reloc with
+the right 3 bits assumed to be 0. Same
+as the previous reloc but on the right side
+of the container.
+ at end deffn
+ at deffn {} BFD_RELOC_D30V_15
+This is a 12-bit absolute reloc with the
+right 3 bitsassumed to be 0.
+ at end deffn
+ at deffn {} BFD_RELOC_D30V_15_PCREL
+This is a 12-bit pc-relative reloc with
+the right 3 bits assumed to be 0.
+ at end deffn
+ at deffn {} BFD_RELOC_D30V_15_PCREL_R
+This is a 12-bit pc-relative reloc with
+the right 3 bits assumed to be 0. Same
+as the previous reloc but on the right side
+of the container.
+ at end deffn
+ at deffn {} BFD_RELOC_D30V_21
+This is an 18-bit absolute reloc with
+the right 3 bits assumed to be 0.
+ at end deffn
+ at deffn {} BFD_RELOC_D30V_21_PCREL
+This is an 18-bit pc-relative reloc with
+the right 3 bits assumed to be 0.
+ at end deffn
+ at deffn {} BFD_RELOC_D30V_21_PCREL_R
+This is an 18-bit pc-relative reloc with
+the right 3 bits assumed to be 0. Same
+as the previous reloc but on the right side
+of the container.
+ at end deffn
+ at deffn {} BFD_RELOC_D30V_32
+This is a 32-bit absolute reloc.
+ at end deffn
+ at deffn {} BFD_RELOC_D30V_32_PCREL
+This is a 32-bit pc-relative reloc.
+ at end deffn
+ at deffn {} BFD_RELOC_DLX_HI16_S
+DLX relocs
+ at end deffn
+ at deffn {} BFD_RELOC_DLX_LO16
+DLX relocs
+ at end deffn
+ at deffn {} BFD_RELOC_DLX_JMP26
+DLX relocs
+ at end deffn
+ at deffn {} BFD_RELOC_M32C_HI8
+ at deffnx {} BFD_RELOC_M32C_RL_JUMP
+ at deffnx {} BFD_RELOC_M32C_RL_1ADDR
+ at deffnx {} BFD_RELOC_M32C_RL_2ADDR
+Renesas M16C/M32C Relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_M32R_24
+Renesas M32R (formerly Mitsubishi M32R) relocs.
+This is a 24 bit absolute address.
+ at end deffn
+ at deffn {} BFD_RELOC_M32R_10_PCREL
+This is a 10-bit pc-relative reloc with the right 2 bits assumed to be 0.
+ at end deffn
+ at deffn {} BFD_RELOC_M32R_18_PCREL
+This is an 18-bit reloc with the right 2 bits assumed to be 0.
+ at end deffn
+ at deffn {} BFD_RELOC_M32R_26_PCREL
+This is a 26-bit reloc with the right 2 bits assumed to be 0.
+ at end deffn
+ at deffn {} BFD_RELOC_M32R_HI16_ULO
+This is a 16-bit reloc containing the high 16 bits of an address
+used when the lower 16 bits are treated as unsigned.
+ at end deffn
+ at deffn {} BFD_RELOC_M32R_HI16_SLO
+This is a 16-bit reloc containing the high 16 bits of an address
+used when the lower 16 bits are treated as signed.
+ at end deffn
+ at deffn {} BFD_RELOC_M32R_LO16
+This is a 16-bit reloc containing the lower 16 bits of an address.
+ at end deffn
+ at deffn {} BFD_RELOC_M32R_SDA16
+This is a 16-bit reloc containing the small data area offset for use in
+add3, load, and store instructions.
+ at end deffn
+ at deffn {} BFD_RELOC_M32R_GOT24
+ at deffnx {} BFD_RELOC_M32R_26_PLTREL
+ at deffnx {} BFD_RELOC_M32R_COPY
+ at deffnx {} BFD_RELOC_M32R_GLOB_DAT
+ at deffnx {} BFD_RELOC_M32R_JMP_SLOT
+ at deffnx {} BFD_RELOC_M32R_RELATIVE
+ at deffnx {} BFD_RELOC_M32R_GOTOFF
+ at deffnx {} BFD_RELOC_M32R_GOTOFF_HI_ULO
+ at deffnx {} BFD_RELOC_M32R_GOTOFF_HI_SLO
+ at deffnx {} BFD_RELOC_M32R_GOTOFF_LO
+ at deffnx {} BFD_RELOC_M32R_GOTPC24
+ at deffnx {} BFD_RELOC_M32R_GOT16_HI_ULO
+ at deffnx {} BFD_RELOC_M32R_GOT16_HI_SLO
+ at deffnx {} BFD_RELOC_M32R_GOT16_LO
+ at deffnx {} BFD_RELOC_M32R_GOTPC_HI_ULO
+ at deffnx {} BFD_RELOC_M32R_GOTPC_HI_SLO
+ at deffnx {} BFD_RELOC_M32R_GOTPC_LO
+For PIC.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_9_PCREL
+This is a 9-bit reloc
+ at end deffn
+ at deffn {} BFD_RELOC_V850_22_PCREL
+This is a 22-bit reloc
+ at end deffn
+ at deffn {} BFD_RELOC_V850_SDA_16_16_OFFSET
+This is a 16 bit offset from the short data area pointer.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_SDA_15_16_OFFSET
+This is a 16 bit offset (of which only 15 bits are used) from the
+short data area pointer.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_ZDA_16_16_OFFSET
+This is a 16 bit offset from the zero data area pointer.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_ZDA_15_16_OFFSET
+This is a 16 bit offset (of which only 15 bits are used) from the
+zero data area pointer.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_TDA_6_8_OFFSET
+This is an 8 bit offset (of which only 6 bits are used) from the
+tiny data area pointer.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_TDA_7_8_OFFSET
+This is an 8bit offset (of which only 7 bits are used) from the tiny
+data area pointer.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_TDA_7_7_OFFSET
+This is a 7 bit offset from the tiny data area pointer.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_TDA_16_16_OFFSET
+This is a 16 bit offset from the tiny data area pointer.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_TDA_4_5_OFFSET
+This is a 5 bit offset (of which only 4 bits are used) from the tiny
+data area pointer.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_TDA_4_4_OFFSET
+This is a 4 bit offset from the tiny data area pointer.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET
+This is a 16 bit offset from the short data area pointer, with the
+bits placed non-contiguously in the instruction.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET
+This is a 16 bit offset from the zero data area pointer, with the
+bits placed non-contiguously in the instruction.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_CALLT_6_7_OFFSET
+This is a 6 bit offset from the call table base pointer.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_CALLT_16_16_OFFSET
+This is a 16 bit offset from the call table base pointer.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_LONGCALL
+Used for relaxing indirect function calls.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_LONGJUMP
+Used for relaxing indirect jumps.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_ALIGN
+Used to maintain alignment whilst relaxing.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_LO16_SPLIT_OFFSET
+This is a variation of BFD_RELOC_LO16 that can be used in v850e ld.bu
+instructions.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_16_PCREL
+This is a 16-bit reloc.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_17_PCREL
+This is a 17-bit reloc.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_23
+This is a 23-bit reloc.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_32_PCREL
+This is a 32-bit reloc.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_32_ABS
+This is a 32-bit reloc.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_16_SPLIT_OFFSET
+This is a 16-bit reloc.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_16_S1
+This is a 16-bit reloc.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_LO16_S1
+Low 16 bits. 16 bit shifted by 1.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_CALLT_15_16_OFFSET
+This is a 16 bit offset from the call table base pointer.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_32_GOTPCREL
+DSO relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_16_GOT
+DSO relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_32_GOT
+DSO relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_22_PLT_PCREL
+DSO relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_32_PLT_PCREL
+DSO relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_COPY
+DSO relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_GLOB_DAT
+DSO relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_JMP_SLOT
+DSO relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_RELATIVE
+DSO relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_16_GOTOFF
+DSO relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_32_GOTOFF
+DSO relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_CODE
+start code.
+ at end deffn
+ at deffn {} BFD_RELOC_V850_DATA
+start data in text.
+ at end deffn
+ at deffn {} BFD_RELOC_TIC30_LDP
+This is a 8bit DP reloc for the tms320c30, where the most
+significant 8 bits of a 24 bit word are placed into the least
+significant 8 bits of the opcode.
+ at end deffn
+ at deffn {} BFD_RELOC_TIC54X_PARTLS7
+This is a 7bit reloc for the tms320c54x, where the least
+significant 7 bits of a 16 bit word are placed into the least
+significant 7 bits of the opcode.
+ at end deffn
+ at deffn {} BFD_RELOC_TIC54X_PARTMS9
+This is a 9bit DP reloc for the tms320c54x, where the most
+significant 9 bits of a 16 bit word are placed into the least
+significant 9 bits of the opcode.
+ at end deffn
+ at deffn {} BFD_RELOC_TIC54X_23
+This is an extended address 23-bit reloc for the tms320c54x.
+ at end deffn
+ at deffn {} BFD_RELOC_TIC54X_16_OF_23
+This is a 16-bit reloc for the tms320c54x, where the least
+significant 16 bits of a 23-bit extended address are placed into
+the opcode.
+ at end deffn
+ at deffn {} BFD_RELOC_TIC54X_MS7_OF_23
+This is a reloc for the tms320c54x, where the most
+significant 7 bits of a 23-bit extended address are placed into
+the opcode.
+ at end deffn
+ at deffn {} BFD_RELOC_C6000_PCR_S21
+ at deffnx {} BFD_RELOC_C6000_PCR_S12
+ at deffnx {} BFD_RELOC_C6000_PCR_S10
+ at deffnx {} BFD_RELOC_C6000_PCR_S7
+ at deffnx {} BFD_RELOC_C6000_ABS_S16
+ at deffnx {} BFD_RELOC_C6000_ABS_L16
+ at deffnx {} BFD_RELOC_C6000_ABS_H16
+ at deffnx {} BFD_RELOC_C6000_SBR_U15_B
+ at deffnx {} BFD_RELOC_C6000_SBR_U15_H
+ at deffnx {} BFD_RELOC_C6000_SBR_U15_W
+ at deffnx {} BFD_RELOC_C6000_SBR_S16
+ at deffnx {} BFD_RELOC_C6000_SBR_L16_B
+ at deffnx {} BFD_RELOC_C6000_SBR_L16_H
+ at deffnx {} BFD_RELOC_C6000_SBR_L16_W
+ at deffnx {} BFD_RELOC_C6000_SBR_H16_B
+ at deffnx {} BFD_RELOC_C6000_SBR_H16_H
+ at deffnx {} BFD_RELOC_C6000_SBR_H16_W
+ at deffnx {} BFD_RELOC_C6000_SBR_GOT_U15_W
+ at deffnx {} BFD_RELOC_C6000_SBR_GOT_L16_W
+ at deffnx {} BFD_RELOC_C6000_SBR_GOT_H16_W
+ at deffnx {} BFD_RELOC_C6000_DSBT_INDEX
+ at deffnx {} BFD_RELOC_C6000_PREL31
+ at deffnx {} BFD_RELOC_C6000_COPY
+ at deffnx {} BFD_RELOC_C6000_JUMP_SLOT
+ at deffnx {} BFD_RELOC_C6000_EHTYPE
+ at deffnx {} BFD_RELOC_C6000_PCR_H16
+ at deffnx {} BFD_RELOC_C6000_PCR_L16
+ at deffnx {} BFD_RELOC_C6000_ALIGN
+ at deffnx {} BFD_RELOC_C6000_FPHEAD
+ at deffnx {} BFD_RELOC_C6000_NOCMP
+TMS320C6000 relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_FR30_48
+This is a 48 bit reloc for the FR30 that stores 32 bits.
+ at end deffn
+ at deffn {} BFD_RELOC_FR30_20
+This is a 32 bit reloc for the FR30 that stores 20 bits split up into
+two sections.
+ at end deffn
+ at deffn {} BFD_RELOC_FR30_6_IN_4
+This is a 16 bit reloc for the FR30 that stores a 6 bit word offset in
+4 bits.
+ at end deffn
+ at deffn {} BFD_RELOC_FR30_8_IN_8
+This is a 16 bit reloc for the FR30 that stores an 8 bit byte offset
+into 8 bits.
+ at end deffn
+ at deffn {} BFD_RELOC_FR30_9_IN_8
+This is a 16 bit reloc for the FR30 that stores a 9 bit short offset
+into 8 bits.
+ at end deffn
+ at deffn {} BFD_RELOC_FR30_10_IN_8
+This is a 16 bit reloc for the FR30 that stores a 10 bit word offset
+into 8 bits.
+ at end deffn
+ at deffn {} BFD_RELOC_FR30_9_PCREL
+This is a 16 bit reloc for the FR30 that stores a 9 bit pc relative
+short offset into 8 bits.
+ at end deffn
+ at deffn {} BFD_RELOC_FR30_12_PCREL
+This is a 16 bit reloc for the FR30 that stores a 12 bit pc relative
+short offset into 11 bits.
+ at end deffn
+ at deffn {} BFD_RELOC_MCORE_PCREL_IMM8BY4
+ at deffnx {} BFD_RELOC_MCORE_PCREL_IMM11BY2
+ at deffnx {} BFD_RELOC_MCORE_PCREL_IMM4BY2
+ at deffnx {} BFD_RELOC_MCORE_PCREL_32
+ at deffnx {} BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2
+ at deffnx {} BFD_RELOC_MCORE_RVA
+Motorola Mcore relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_MEP_8
+ at deffnx {} BFD_RELOC_MEP_16
+ at deffnx {} BFD_RELOC_MEP_32
+ at deffnx {} BFD_RELOC_MEP_PCREL8A2
+ at deffnx {} BFD_RELOC_MEP_PCREL12A2
+ at deffnx {} BFD_RELOC_MEP_PCREL17A2
+ at deffnx {} BFD_RELOC_MEP_PCREL24A2
+ at deffnx {} BFD_RELOC_MEP_PCABS24A2
+ at deffnx {} BFD_RELOC_MEP_LOW16
+ at deffnx {} BFD_RELOC_MEP_HI16U
+ at deffnx {} BFD_RELOC_MEP_HI16S
+ at deffnx {} BFD_RELOC_MEP_GPREL
+ at deffnx {} BFD_RELOC_MEP_TPREL
+ at deffnx {} BFD_RELOC_MEP_TPREL7
+ at deffnx {} BFD_RELOC_MEP_TPREL7A2
+ at deffnx {} BFD_RELOC_MEP_TPREL7A4
+ at deffnx {} BFD_RELOC_MEP_UIMM24
+ at deffnx {} BFD_RELOC_MEP_ADDR24A4
+ at deffnx {} BFD_RELOC_MEP_GNU_VTINHERIT
+ at deffnx {} BFD_RELOC_MEP_GNU_VTENTRY
+Toshiba Media Processor Relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_MMIX_GETA
+ at deffnx {} BFD_RELOC_MMIX_GETA_1
+ at deffnx {} BFD_RELOC_MMIX_GETA_2
+ at deffnx {} BFD_RELOC_MMIX_GETA_3
+These are relocations for the GETA instruction.
+ at end deffn
+ at deffn {} BFD_RELOC_MMIX_CBRANCH
+ at deffnx {} BFD_RELOC_MMIX_CBRANCH_J
+ at deffnx {} BFD_RELOC_MMIX_CBRANCH_1
+ at deffnx {} BFD_RELOC_MMIX_CBRANCH_2
+ at deffnx {} BFD_RELOC_MMIX_CBRANCH_3
+These are relocations for a conditional branch instruction.
+ at end deffn
+ at deffn {} BFD_RELOC_MMIX_PUSHJ
+ at deffnx {} BFD_RELOC_MMIX_PUSHJ_1
+ at deffnx {} BFD_RELOC_MMIX_PUSHJ_2
+ at deffnx {} BFD_RELOC_MMIX_PUSHJ_3
+ at deffnx {} BFD_RELOC_MMIX_PUSHJ_STUBBABLE
+These are relocations for the PUSHJ instruction.
+ at end deffn
+ at deffn {} BFD_RELOC_MMIX_JMP
+ at deffnx {} BFD_RELOC_MMIX_JMP_1
+ at deffnx {} BFD_RELOC_MMIX_JMP_2
+ at deffnx {} BFD_RELOC_MMIX_JMP_3
+These are relocations for the JMP instruction.
+ at end deffn
+ at deffn {} BFD_RELOC_MMIX_ADDR19
+This is a relocation for a relative address as in a GETA instruction or
+a branch.
+ at end deffn
+ at deffn {} BFD_RELOC_MMIX_ADDR27
+This is a relocation for a relative address as in a JMP instruction.
+ at end deffn
+ at deffn {} BFD_RELOC_MMIX_REG_OR_BYTE
+This is a relocation for an instruction field that may be a general
+register or a value 0..255.
+ at end deffn
+ at deffn {} BFD_RELOC_MMIX_REG
+This is a relocation for an instruction field that may be a general
+register.
+ at end deffn
+ at deffn {} BFD_RELOC_MMIX_BASE_PLUS_OFFSET
+This is a relocation for two instruction fields holding a register and
+an offset, the equivalent of the relocation.
+ at end deffn
+ at deffn {} BFD_RELOC_MMIX_LOCAL
+This relocation is an assertion that the expression is not allocated as
+a global register.  It does not modify contents.
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_7_PCREL
+This is a 16 bit reloc for the AVR that stores 8 bit pc relative
+short offset into 7 bits.
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_13_PCREL
+This is a 16 bit reloc for the AVR that stores 13 bit pc relative
+short offset into 12 bits.
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_16_PM
+This is a 16 bit reloc for the AVR that stores 17 bit value (usually
+program memory address) into 16 bits.
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_LO8_LDI
+This is a 16 bit reloc for the AVR that stores 8 bit value (usually
+data memory address) into 8 bit immediate value of LDI insn.
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_HI8_LDI
+This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
+of data memory address) into 8 bit immediate value of LDI insn.
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_HH8_LDI
+This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
+of program memory address) into 8 bit immediate value of LDI insn.
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_MS8_LDI
+This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
+of 32 bit value) into 8 bit immediate value of LDI insn.
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_LO8_LDI_NEG
+This is a 16 bit reloc for the AVR that stores negated 8 bit value
+(usually data memory address) into 8 bit immediate value of SUBI insn.
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_HI8_LDI_NEG
+This is a 16 bit reloc for the AVR that stores negated 8 bit value
+(high 8 bit of data memory address) into 8 bit immediate value of
+SUBI insn.
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_HH8_LDI_NEG
+This is a 16 bit reloc for the AVR that stores negated 8 bit value
+(most high 8 bit of program memory address) into 8 bit immediate value
+of LDI or SUBI insn.
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_MS8_LDI_NEG
+This is a 16 bit reloc for the AVR that stores negated 8 bit value (msb
+of 32 bit value) into 8 bit immediate value of LDI insn.
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_LO8_LDI_PM
+This is a 16 bit reloc for the AVR that stores 8 bit value (usually
+command address) into 8 bit immediate value of LDI insn.
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_LO8_LDI_GS
+This is a 16 bit reloc for the AVR that stores 8 bit value 
+(command address) into 8 bit immediate value of LDI insn. If the address
+is beyond the 128k boundary, the linker inserts a jump stub for this reloc
+in the lower 128k.
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_HI8_LDI_PM
+This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
+of command address) into 8 bit immediate value of LDI insn.
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_HI8_LDI_GS
+This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
+of command address) into 8 bit immediate value of LDI insn.  If the address
+is beyond the 128k boundary, the linker inserts a jump stub for this reloc
+below 128k.
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_HH8_LDI_PM
+This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
+of command address) into 8 bit immediate value of LDI insn.
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_LO8_LDI_PM_NEG
+This is a 16 bit reloc for the AVR that stores negated 8 bit value
+(usually command address) into 8 bit immediate value of SUBI insn.
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_HI8_LDI_PM_NEG
+This is a 16 bit reloc for the AVR that stores negated 8 bit value
+(high 8 bit of 16 bit command address) into 8 bit immediate value
+of SUBI insn.
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_HH8_LDI_PM_NEG
+This is a 16 bit reloc for the AVR that stores negated 8 bit value
+(high 6 bit of 22 bit command address) into 8 bit immediate
+value of SUBI insn.
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_CALL
+This is a 32 bit reloc for the AVR that stores 23 bit value
+into 22 bits.
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_LDI
+This is a 16 bit reloc for the AVR that stores all needed bits
+for absolute addressing with ldi with overflow check to linktime
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_6
+This is a 6 bit reloc for the AVR that stores offset for ldd/std
+instructions
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_6_ADIW
+This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw
+instructions
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_8_LO
+This is a 8 bit reloc for the AVR that stores bits 0..7 of a symbol
+in .byte lo8(symbol)
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_8_HI
+This is a 8 bit reloc for the AVR that stores bits 8..15 of a symbol
+in .byte hi8(symbol)
+ at end deffn
+ at deffn {} BFD_RELOC_AVR_8_HLO
+This is a 8 bit reloc for the AVR that stores bits 16..23 of a symbol
+in .byte hlo8(symbol)
+ at end deffn
+ at deffn {} BFD_RELOC_RL78_NEG8
+ at deffnx {} BFD_RELOC_RL78_NEG16
+ at deffnx {} BFD_RELOC_RL78_NEG24
+ at deffnx {} BFD_RELOC_RL78_NEG32
+ at deffnx {} BFD_RELOC_RL78_16_OP
+ at deffnx {} BFD_RELOC_RL78_24_OP
+ at deffnx {} BFD_RELOC_RL78_32_OP
+ at deffnx {} BFD_RELOC_RL78_8U
+ at deffnx {} BFD_RELOC_RL78_16U
+ at deffnx {} BFD_RELOC_RL78_24U
+ at deffnx {} BFD_RELOC_RL78_DIR3U_PCREL
+ at deffnx {} BFD_RELOC_RL78_DIFF
+ at deffnx {} BFD_RELOC_RL78_GPRELB
+ at deffnx {} BFD_RELOC_RL78_GPRELW
+ at deffnx {} BFD_RELOC_RL78_GPRELL
+ at deffnx {} BFD_RELOC_RL78_SYM
+ at deffnx {} BFD_RELOC_RL78_OP_SUBTRACT
+ at deffnx {} BFD_RELOC_RL78_OP_NEG
+ at deffnx {} BFD_RELOC_RL78_OP_AND
+ at deffnx {} BFD_RELOC_RL78_OP_SHRA
+ at deffnx {} BFD_RELOC_RL78_ABS8
+ at deffnx {} BFD_RELOC_RL78_ABS16
+ at deffnx {} BFD_RELOC_RL78_ABS16_REV
+ at deffnx {} BFD_RELOC_RL78_ABS32
+ at deffnx {} BFD_RELOC_RL78_ABS32_REV
+ at deffnx {} BFD_RELOC_RL78_ABS16U
+ at deffnx {} BFD_RELOC_RL78_ABS16UW
+ at deffnx {} BFD_RELOC_RL78_ABS16UL
+ at deffnx {} BFD_RELOC_RL78_RELAX
+ at deffnx {} BFD_RELOC_RL78_HI16
+ at deffnx {} BFD_RELOC_RL78_HI8
+ at deffnx {} BFD_RELOC_RL78_LO16
+Renesas RL78 Relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_RX_NEG8
+ at deffnx {} BFD_RELOC_RX_NEG16
+ at deffnx {} BFD_RELOC_RX_NEG24
+ at deffnx {} BFD_RELOC_RX_NEG32
+ at deffnx {} BFD_RELOC_RX_16_OP
+ at deffnx {} BFD_RELOC_RX_24_OP
+ at deffnx {} BFD_RELOC_RX_32_OP
+ at deffnx {} BFD_RELOC_RX_8U
+ at deffnx {} BFD_RELOC_RX_16U
+ at deffnx {} BFD_RELOC_RX_24U
+ at deffnx {} BFD_RELOC_RX_DIR3U_PCREL
+ at deffnx {} BFD_RELOC_RX_DIFF
+ at deffnx {} BFD_RELOC_RX_GPRELB
+ at deffnx {} BFD_RELOC_RX_GPRELW
+ at deffnx {} BFD_RELOC_RX_GPRELL
+ at deffnx {} BFD_RELOC_RX_SYM
+ at deffnx {} BFD_RELOC_RX_OP_SUBTRACT
+ at deffnx {} BFD_RELOC_RX_OP_NEG
+ at deffnx {} BFD_RELOC_RX_ABS8
+ at deffnx {} BFD_RELOC_RX_ABS16
+ at deffnx {} BFD_RELOC_RX_ABS16_REV
+ at deffnx {} BFD_RELOC_RX_ABS32
+ at deffnx {} BFD_RELOC_RX_ABS32_REV
+ at deffnx {} BFD_RELOC_RX_ABS16U
+ at deffnx {} BFD_RELOC_RX_ABS16UW
+ at deffnx {} BFD_RELOC_RX_ABS16UL
+ at deffnx {} BFD_RELOC_RX_RELAX
+Renesas RX Relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_390_12
+Direct 12 bit.
+ at end deffn
+ at deffn {} BFD_RELOC_390_GOT12
+12 bit GOT offset.
+ at end deffn
+ at deffn {} BFD_RELOC_390_PLT32
+32 bit PC relative PLT address.
+ at end deffn
+ at deffn {} BFD_RELOC_390_COPY
+Copy symbol at runtime.
+ at end deffn
+ at deffn {} BFD_RELOC_390_GLOB_DAT
+Create GOT entry.
+ at end deffn
+ at deffn {} BFD_RELOC_390_JMP_SLOT
+Create PLT entry.
+ at end deffn
+ at deffn {} BFD_RELOC_390_RELATIVE
+Adjust by program base.
+ at end deffn
+ at deffn {} BFD_RELOC_390_GOTPC
+32 bit PC relative offset to GOT.
+ at end deffn
+ at deffn {} BFD_RELOC_390_GOT16
+16 bit GOT offset.
+ at end deffn
+ at deffn {} BFD_RELOC_390_PC16DBL
+PC relative 16 bit shifted by 1.
+ at end deffn
+ at deffn {} BFD_RELOC_390_PLT16DBL
+16 bit PC rel. PLT shifted by 1.
+ at end deffn
+ at deffn {} BFD_RELOC_390_PC32DBL
+PC relative 32 bit shifted by 1.
+ at end deffn
+ at deffn {} BFD_RELOC_390_PLT32DBL
+32 bit PC rel. PLT shifted by 1.
+ at end deffn
+ at deffn {} BFD_RELOC_390_GOTPCDBL
+32 bit PC rel. GOT shifted by 1.
+ at end deffn
+ at deffn {} BFD_RELOC_390_GOT64
+64 bit GOT offset.
+ at end deffn
+ at deffn {} BFD_RELOC_390_PLT64
+64 bit PC relative PLT address.
+ at end deffn
+ at deffn {} BFD_RELOC_390_GOTENT
+32 bit rel. offset to GOT entry.
+ at end deffn
+ at deffn {} BFD_RELOC_390_GOTOFF64
+64 bit offset to GOT.
+ at end deffn
+ at deffn {} BFD_RELOC_390_GOTPLT12
+12-bit offset to symbol-entry within GOT, with PLT handling.
+ at end deffn
+ at deffn {} BFD_RELOC_390_GOTPLT16
+16-bit offset to symbol-entry within GOT, with PLT handling.
+ at end deffn
+ at deffn {} BFD_RELOC_390_GOTPLT32
+32-bit offset to symbol-entry within GOT, with PLT handling.
+ at end deffn
+ at deffn {} BFD_RELOC_390_GOTPLT64
+64-bit offset to symbol-entry within GOT, with PLT handling.
+ at end deffn
+ at deffn {} BFD_RELOC_390_GOTPLTENT
+32-bit rel. offset to symbol-entry within GOT, with PLT handling.
+ at end deffn
+ at deffn {} BFD_RELOC_390_PLTOFF16
+16-bit rel. offset from the GOT to a PLT entry.
+ at end deffn
+ at deffn {} BFD_RELOC_390_PLTOFF32
+32-bit rel. offset from the GOT to a PLT entry.
+ at end deffn
+ at deffn {} BFD_RELOC_390_PLTOFF64
+64-bit rel. offset from the GOT to a PLT entry.
+ at end deffn
+ at deffn {} BFD_RELOC_390_TLS_LOAD
+ at deffnx {} BFD_RELOC_390_TLS_GDCALL
+ at deffnx {} BFD_RELOC_390_TLS_LDCALL
+ at deffnx {} BFD_RELOC_390_TLS_GD32
+ at deffnx {} BFD_RELOC_390_TLS_GD64
+ at deffnx {} BFD_RELOC_390_TLS_GOTIE12
+ at deffnx {} BFD_RELOC_390_TLS_GOTIE32
+ at deffnx {} BFD_RELOC_390_TLS_GOTIE64
+ at deffnx {} BFD_RELOC_390_TLS_LDM32
+ at deffnx {} BFD_RELOC_390_TLS_LDM64
+ at deffnx {} BFD_RELOC_390_TLS_IE32
+ at deffnx {} BFD_RELOC_390_TLS_IE64
+ at deffnx {} BFD_RELOC_390_TLS_IEENT
+ at deffnx {} BFD_RELOC_390_TLS_LE32
+ at deffnx {} BFD_RELOC_390_TLS_LE64
+ at deffnx {} BFD_RELOC_390_TLS_LDO32
+ at deffnx {} BFD_RELOC_390_TLS_LDO64
+ at deffnx {} BFD_RELOC_390_TLS_DTPMOD
+ at deffnx {} BFD_RELOC_390_TLS_DTPOFF
+ at deffnx {} BFD_RELOC_390_TLS_TPOFF
+s390 tls relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_390_20
+ at deffnx {} BFD_RELOC_390_GOT20
+ at deffnx {} BFD_RELOC_390_GOTPLT20
+ at deffnx {} BFD_RELOC_390_TLS_GOTIE20
+Long displacement extension.
+ at end deffn
+ at deffn {} BFD_RELOC_390_IRELATIVE
+STT_GNU_IFUNC relocation.
+ at end deffn
+ at deffn {} BFD_RELOC_SCORE_GPREL15
+Score relocations
+Low 16 bit for load/store
+ at end deffn
+ at deffn {} BFD_RELOC_SCORE_DUMMY2
+ at deffnx {} BFD_RELOC_SCORE_JMP
+This is a 24-bit reloc with the right 1 bit assumed to be 0
+ at end deffn
+ at deffn {} BFD_RELOC_SCORE_BRANCH
+This is a 19-bit reloc with the right 1 bit assumed to be 0
+ at end deffn
+ at deffn {} BFD_RELOC_SCORE_IMM30
+This is a 32-bit reloc for 48-bit instructions.
+ at end deffn
+ at deffn {} BFD_RELOC_SCORE_IMM32
+This is a 32-bit reloc for 48-bit instructions.
+ at end deffn
+ at deffn {} BFD_RELOC_SCORE16_JMP
+This is a 11-bit reloc with the right 1 bit assumed to be 0
+ at end deffn
+ at deffn {} BFD_RELOC_SCORE16_BRANCH
+This is a 8-bit reloc with the right 1 bit assumed to be 0
+ at end deffn
+ at deffn {} BFD_RELOC_SCORE_BCMP
+This is a 9-bit reloc with the right 1 bit assumed to be 0
+ at end deffn
+ at deffn {} BFD_RELOC_SCORE_GOT15
+ at deffnx {} BFD_RELOC_SCORE_GOT_LO16
+ at deffnx {} BFD_RELOC_SCORE_CALL15
+ at deffnx {} BFD_RELOC_SCORE_DUMMY_HI16
+Undocumented Score relocs
+ at end deffn
+ at deffn {} BFD_RELOC_IP2K_FR9
+Scenix IP2K - 9-bit register number / data address
+ at end deffn
+ at deffn {} BFD_RELOC_IP2K_BANK
+Scenix IP2K - 4-bit register/data bank number
+ at end deffn
+ at deffn {} BFD_RELOC_IP2K_ADDR16CJP
+Scenix IP2K - low 13 bits of instruction word address
+ at end deffn
+ at deffn {} BFD_RELOC_IP2K_PAGE3
+Scenix IP2K - high 3 bits of instruction word address
+ at end deffn
+ at deffn {} BFD_RELOC_IP2K_LO8DATA
+ at deffnx {} BFD_RELOC_IP2K_HI8DATA
+ at deffnx {} BFD_RELOC_IP2K_EX8DATA
+Scenix IP2K - ext/low/high 8 bits of data address
+ at end deffn
+ at deffn {} BFD_RELOC_IP2K_LO8INSN
+ at deffnx {} BFD_RELOC_IP2K_HI8INSN
+Scenix IP2K - low/high 8 bits of instruction word address
+ at end deffn
+ at deffn {} BFD_RELOC_IP2K_PC_SKIP
+Scenix IP2K - even/odd PC modifier to modify snb pcl.0
+ at end deffn
+ at deffn {} BFD_RELOC_IP2K_TEXT
+Scenix IP2K - 16 bit word address in text section.
+ at end deffn
+ at deffn {} BFD_RELOC_IP2K_FR_OFFSET
+Scenix IP2K - 7-bit sp or dp offset
+ at end deffn
+ at deffn {} BFD_RELOC_VPE4KMATH_DATA
+ at deffnx {} BFD_RELOC_VPE4KMATH_INSN
+Scenix VPE4K coprocessor - data/insn-space addressing
+ at end deffn
+ at deffn {} BFD_RELOC_VTABLE_INHERIT
+ at deffnx {} BFD_RELOC_VTABLE_ENTRY
+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
+that are not used, so that the code for those functions need not be
+included in the output.
+
+VTABLE_INHERIT is a zero-space relocation used to describe to the
+linker the inheritance tree of a C++ virtual function table.  The
+relocation's symbol should be the parent class' vtable, and the
+relocation should be located at the child vtable.
+
+VTABLE_ENTRY is a zero-space relocation that describes the use of a
+virtual function table entry.  The reloc's symbol should refer to the
+table of the class mentioned in the code.  Off of that base, an offset
+describes the entry that is being used.  For Rela hosts, this offset
+is stored in the reloc's addend.  For Rel hosts, we are forced to put
+this offset in the reloc's section offset.
+ at end deffn
+ at deffn {} BFD_RELOC_IA64_IMM14
+ at deffnx {} BFD_RELOC_IA64_IMM22
+ at deffnx {} BFD_RELOC_IA64_IMM64
+ at deffnx {} BFD_RELOC_IA64_DIR32MSB
+ at deffnx {} BFD_RELOC_IA64_DIR32LSB
+ at deffnx {} BFD_RELOC_IA64_DIR64MSB
+ at deffnx {} BFD_RELOC_IA64_DIR64LSB
+ at deffnx {} BFD_RELOC_IA64_GPREL22
+ at deffnx {} BFD_RELOC_IA64_GPREL64I
+ at deffnx {} BFD_RELOC_IA64_GPREL32MSB
+ at deffnx {} BFD_RELOC_IA64_GPREL32LSB
+ at deffnx {} BFD_RELOC_IA64_GPREL64MSB
+ at deffnx {} BFD_RELOC_IA64_GPREL64LSB
+ at deffnx {} BFD_RELOC_IA64_LTOFF22
+ at deffnx {} BFD_RELOC_IA64_LTOFF64I
+ at deffnx {} BFD_RELOC_IA64_PLTOFF22
+ at deffnx {} BFD_RELOC_IA64_PLTOFF64I
+ at deffnx {} BFD_RELOC_IA64_PLTOFF64MSB
+ at deffnx {} BFD_RELOC_IA64_PLTOFF64LSB
+ at deffnx {} BFD_RELOC_IA64_FPTR64I
+ at deffnx {} BFD_RELOC_IA64_FPTR32MSB
+ at deffnx {} BFD_RELOC_IA64_FPTR32LSB
+ at deffnx {} BFD_RELOC_IA64_FPTR64MSB
+ at deffnx {} BFD_RELOC_IA64_FPTR64LSB
+ at deffnx {} BFD_RELOC_IA64_PCREL21B
+ at deffnx {} BFD_RELOC_IA64_PCREL21BI
+ at deffnx {} BFD_RELOC_IA64_PCREL21M
+ at deffnx {} BFD_RELOC_IA64_PCREL21F
+ at deffnx {} BFD_RELOC_IA64_PCREL22
+ at deffnx {} BFD_RELOC_IA64_PCREL60B
+ at deffnx {} BFD_RELOC_IA64_PCREL64I
+ at deffnx {} BFD_RELOC_IA64_PCREL32MSB
+ at deffnx {} BFD_RELOC_IA64_PCREL32LSB
+ at deffnx {} BFD_RELOC_IA64_PCREL64MSB
+ at deffnx {} BFD_RELOC_IA64_PCREL64LSB
+ at deffnx {} BFD_RELOC_IA64_LTOFF_FPTR22
+ at deffnx {} BFD_RELOC_IA64_LTOFF_FPTR64I
+ at deffnx {} BFD_RELOC_IA64_LTOFF_FPTR32MSB
+ at deffnx {} BFD_RELOC_IA64_LTOFF_FPTR32LSB
+ at deffnx {} BFD_RELOC_IA64_LTOFF_FPTR64MSB
+ at deffnx {} BFD_RELOC_IA64_LTOFF_FPTR64LSB
+ at deffnx {} BFD_RELOC_IA64_SEGREL32MSB
+ at deffnx {} BFD_RELOC_IA64_SEGREL32LSB
+ at deffnx {} BFD_RELOC_IA64_SEGREL64MSB
+ at deffnx {} BFD_RELOC_IA64_SEGREL64LSB
+ at deffnx {} BFD_RELOC_IA64_SECREL32MSB
+ at deffnx {} BFD_RELOC_IA64_SECREL32LSB
+ at deffnx {} BFD_RELOC_IA64_SECREL64MSB
+ at deffnx {} BFD_RELOC_IA64_SECREL64LSB
+ at deffnx {} BFD_RELOC_IA64_REL32MSB
+ at deffnx {} BFD_RELOC_IA64_REL32LSB
+ at deffnx {} BFD_RELOC_IA64_REL64MSB
+ at deffnx {} BFD_RELOC_IA64_REL64LSB
+ at deffnx {} BFD_RELOC_IA64_LTV32MSB
+ at deffnx {} BFD_RELOC_IA64_LTV32LSB
+ at deffnx {} BFD_RELOC_IA64_LTV64MSB
+ at deffnx {} BFD_RELOC_IA64_LTV64LSB
+ at deffnx {} BFD_RELOC_IA64_IPLTMSB
+ at deffnx {} BFD_RELOC_IA64_IPLTLSB
+ at deffnx {} BFD_RELOC_IA64_COPY
+ at deffnx {} BFD_RELOC_IA64_LTOFF22X
+ at deffnx {} BFD_RELOC_IA64_LDXMOV
+ at deffnx {} BFD_RELOC_IA64_TPREL14
+ at deffnx {} BFD_RELOC_IA64_TPREL22
+ at deffnx {} BFD_RELOC_IA64_TPREL64I
+ at deffnx {} BFD_RELOC_IA64_TPREL64MSB
+ at deffnx {} BFD_RELOC_IA64_TPREL64LSB
+ at deffnx {} BFD_RELOC_IA64_LTOFF_TPREL22
+ at deffnx {} BFD_RELOC_IA64_DTPMOD64MSB
+ at deffnx {} BFD_RELOC_IA64_DTPMOD64LSB
+ at deffnx {} BFD_RELOC_IA64_LTOFF_DTPMOD22
+ at deffnx {} BFD_RELOC_IA64_DTPREL14
+ at deffnx {} BFD_RELOC_IA64_DTPREL22
+ at deffnx {} BFD_RELOC_IA64_DTPREL64I
+ at deffnx {} BFD_RELOC_IA64_DTPREL32MSB
+ at deffnx {} BFD_RELOC_IA64_DTPREL32LSB
+ at deffnx {} BFD_RELOC_IA64_DTPREL64MSB
+ at deffnx {} BFD_RELOC_IA64_DTPREL64LSB
+ at deffnx {} BFD_RELOC_IA64_LTOFF_DTPREL22
+Intel IA64 Relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_M68HC11_HI8
+Motorola 68HC11 reloc.
+This is the 8 bit high part of an absolute address.
+ at end deffn
+ at deffn {} BFD_RELOC_M68HC11_LO8
+Motorola 68HC11 reloc.
+This is the 8 bit low part of an absolute address.
+ at end deffn
+ at deffn {} BFD_RELOC_M68HC11_3B
+Motorola 68HC11 reloc.
+This is the 3 bit of a value.
+ at end deffn
+ at deffn {} BFD_RELOC_M68HC11_RL_JUMP
+Motorola 68HC11 reloc.
+This reloc marks the beginning of a jump/call instruction.
+It is used for linker relaxation to correctly identify beginning
+of instruction and change some branches to use PC-relative
+addressing mode.
+ at end deffn
+ at deffn {} BFD_RELOC_M68HC11_RL_GROUP
+Motorola 68HC11 reloc.
+This reloc marks a group of several instructions that gcc generates
+and for which the linker relaxation pass can modify and/or remove
+some of them.
+ at end deffn
+ at deffn {} BFD_RELOC_M68HC11_LO16
+Motorola 68HC11 reloc.
+This is the 16-bit lower part of an address.  It is used for 'call'
+instruction to specify the symbol address without any special
+transformation (due to memory bank window).
+ at end deffn
+ at deffn {} BFD_RELOC_M68HC11_PAGE
+Motorola 68HC11 reloc.
+This is a 8-bit reloc that specifies the page number of an address.
+It is used by 'call' instruction to specify the page number of
+the symbol.
+ at end deffn
+ at deffn {} BFD_RELOC_M68HC11_24
+Motorola 68HC11 reloc.
+This is a 24-bit reloc that represents the address with a 16-bit
+value and a 8-bit page number.  The symbol address is transformed
+to follow the 16K memory bank of 68HC12 (seen as mapped in the window).
+ at end deffn
+ at deffn {} BFD_RELOC_M68HC12_5B
+Motorola 68HC12 reloc.
+This is the 5 bits of a value.
+ at end deffn
+ at deffn {} BFD_RELOC_XGATE_RL_JUMP
+Freescale XGATE reloc.
+This reloc marks the beginning of a bra/jal instruction.
+ at end deffn
+ at deffn {} BFD_RELOC_XGATE_RL_GROUP
+Freescale XGATE reloc.
+This reloc marks a group of several instructions that gcc generates
+and for which the linker relaxation pass can modify and/or remove
+some of them.
+ at end deffn
+ at deffn {} BFD_RELOC_XGATE_LO16
+Freescale XGATE reloc.
+This is the 16-bit lower part of an address.  It is used for the '16-bit'
+instructions.
+ at end deffn
+ at deffn {} BFD_RELOC_XGATE_GPAGE
+Freescale XGATE reloc.
+ at end deffn
+ at deffn {} BFD_RELOC_XGATE_24
+Freescale XGATE reloc.
+ at end deffn
+ at deffn {} BFD_RELOC_XGATE_PCREL_9
+Freescale XGATE reloc.
+This is a 9-bit pc-relative reloc.
+ at end deffn
+ at deffn {} BFD_RELOC_XGATE_PCREL_10
+Freescale XGATE reloc.
+This is a 10-bit pc-relative reloc.
+ at end deffn
+ at deffn {} BFD_RELOC_XGATE_IMM8_LO
+Freescale XGATE reloc.
+This is the 16-bit lower part of an address.  It is used for the '16-bit'
+instructions.
+ at end deffn
+ at deffn {} BFD_RELOC_XGATE_IMM8_HI
+Freescale XGATE reloc.
+This is the 16-bit higher part of an address.  It is used for the '16-bit'
+instructions.
+ at end deffn
+ at deffn {} BFD_RELOC_XGATE_IMM3
+Freescale XGATE reloc.
+This is a 3-bit pc-relative reloc.
+ at end deffn
+ at deffn {} BFD_RELOC_XGATE_IMM4
+Freescale XGATE reloc.
+This is a 4-bit pc-relative reloc.
+ at end deffn
+ at deffn {} BFD_RELOC_XGATE_IMM5
+Freescale XGATE reloc.
+This is a 5-bit pc-relative reloc.
+ at end deffn
+ at deffn {} BFD_RELOC_M68HC12_9B
+Motorola 68HC12 reloc.
+This is the 9 bits of a value.
+ at end deffn
+ at deffn {} BFD_RELOC_M68HC12_16B
+Motorola 68HC12 reloc.
+This is the 16 bits of a value.
+ at end deffn
+ at deffn {} BFD_RELOC_M68HC12_9_PCREL
+Motorola 68HC12/XGATE reloc.
+This is a PCREL9 branch.
+ at end deffn
+ at deffn {} BFD_RELOC_M68HC12_10_PCREL
+Motorola 68HC12/XGATE reloc.
+This is a PCREL10 branch.
+ at end deffn
+ at deffn {} BFD_RELOC_M68HC12_LO8XG
+Motorola 68HC12/XGATE reloc.
+This is the 8 bit low part of an absolute address and immediately precedes
+a matching HI8XG part.
+ at end deffn
+ at deffn {} BFD_RELOC_M68HC12_HI8XG
+Motorola 68HC12/XGATE reloc.
+This is the 8 bit high part of an absolute address and immediately follows
+a matching LO8XG part.
+ at end deffn
+ at deffn {} BFD_RELOC_16C_NUM08
+ at deffnx {} BFD_RELOC_16C_NUM08_C
+ at deffnx {} BFD_RELOC_16C_NUM16
+ at deffnx {} BFD_RELOC_16C_NUM16_C
+ at deffnx {} BFD_RELOC_16C_NUM32
+ at deffnx {} BFD_RELOC_16C_NUM32_C
+ at deffnx {} BFD_RELOC_16C_DISP04
+ at deffnx {} BFD_RELOC_16C_DISP04_C
+ at deffnx {} BFD_RELOC_16C_DISP08
+ at deffnx {} BFD_RELOC_16C_DISP08_C
+ at deffnx {} BFD_RELOC_16C_DISP16
+ at deffnx {} BFD_RELOC_16C_DISP16_C
+ at deffnx {} BFD_RELOC_16C_DISP24
+ at deffnx {} BFD_RELOC_16C_DISP24_C
+ at deffnx {} BFD_RELOC_16C_DISP24a
+ at deffnx {} BFD_RELOC_16C_DISP24a_C
+ at deffnx {} BFD_RELOC_16C_REG04
+ at deffnx {} BFD_RELOC_16C_REG04_C
+ at deffnx {} BFD_RELOC_16C_REG04a
+ at deffnx {} BFD_RELOC_16C_REG04a_C
+ at deffnx {} BFD_RELOC_16C_REG14
+ at deffnx {} BFD_RELOC_16C_REG14_C
+ at deffnx {} BFD_RELOC_16C_REG16
+ at deffnx {} BFD_RELOC_16C_REG16_C
+ at deffnx {} BFD_RELOC_16C_REG20
+ at deffnx {} BFD_RELOC_16C_REG20_C
+ at deffnx {} BFD_RELOC_16C_ABS20
+ at deffnx {} BFD_RELOC_16C_ABS20_C
+ at deffnx {} BFD_RELOC_16C_ABS24
+ at deffnx {} BFD_RELOC_16C_ABS24_C
+ at deffnx {} BFD_RELOC_16C_IMM04
+ at deffnx {} BFD_RELOC_16C_IMM04_C
+ at deffnx {} BFD_RELOC_16C_IMM16
+ at deffnx {} BFD_RELOC_16C_IMM16_C
+ at deffnx {} BFD_RELOC_16C_IMM20
+ at deffnx {} BFD_RELOC_16C_IMM20_C
+ at deffnx {} BFD_RELOC_16C_IMM24
+ at deffnx {} BFD_RELOC_16C_IMM24_C
+ at deffnx {} BFD_RELOC_16C_IMM32
+ at deffnx {} BFD_RELOC_16C_IMM32_C
+NS CR16C Relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_CR16_NUM8
+ at deffnx {} BFD_RELOC_CR16_NUM16
+ at deffnx {} BFD_RELOC_CR16_NUM32
+ at deffnx {} BFD_RELOC_CR16_NUM32a
+ at deffnx {} BFD_RELOC_CR16_REGREL0
+ at deffnx {} BFD_RELOC_CR16_REGREL4
+ at deffnx {} BFD_RELOC_CR16_REGREL4a
+ at deffnx {} BFD_RELOC_CR16_REGREL14
+ at deffnx {} BFD_RELOC_CR16_REGREL14a
+ at deffnx {} BFD_RELOC_CR16_REGREL16
+ at deffnx {} BFD_RELOC_CR16_REGREL20
+ at deffnx {} BFD_RELOC_CR16_REGREL20a
+ at deffnx {} BFD_RELOC_CR16_ABS20
+ at deffnx {} BFD_RELOC_CR16_ABS24
+ at deffnx {} BFD_RELOC_CR16_IMM4
+ at deffnx {} BFD_RELOC_CR16_IMM8
+ at deffnx {} BFD_RELOC_CR16_IMM16
+ at deffnx {} BFD_RELOC_CR16_IMM20
+ at deffnx {} BFD_RELOC_CR16_IMM24
+ at deffnx {} BFD_RELOC_CR16_IMM32
+ at deffnx {} BFD_RELOC_CR16_IMM32a
+ at deffnx {} BFD_RELOC_CR16_DISP4
+ at deffnx {} BFD_RELOC_CR16_DISP8
+ at deffnx {} BFD_RELOC_CR16_DISP16
+ at deffnx {} BFD_RELOC_CR16_DISP20
+ at deffnx {} BFD_RELOC_CR16_DISP24
+ at deffnx {} BFD_RELOC_CR16_DISP24a
+ at deffnx {} BFD_RELOC_CR16_SWITCH8
+ at deffnx {} BFD_RELOC_CR16_SWITCH16
+ at deffnx {} BFD_RELOC_CR16_SWITCH32
+ at deffnx {} BFD_RELOC_CR16_GOT_REGREL20
+ at deffnx {} BFD_RELOC_CR16_GOTC_REGREL20
+ at deffnx {} BFD_RELOC_CR16_GLOB_DAT
+NS CR16 Relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_CRX_REL4
+ at deffnx {} BFD_RELOC_CRX_REL8
+ at deffnx {} BFD_RELOC_CRX_REL8_CMP
+ at deffnx {} BFD_RELOC_CRX_REL16
+ at deffnx {} BFD_RELOC_CRX_REL24
+ at deffnx {} BFD_RELOC_CRX_REL32
+ at deffnx {} BFD_RELOC_CRX_REGREL12
+ at deffnx {} BFD_RELOC_CRX_REGREL22
+ at deffnx {} BFD_RELOC_CRX_REGREL28
+ at deffnx {} BFD_RELOC_CRX_REGREL32
+ at deffnx {} BFD_RELOC_CRX_ABS16
+ at deffnx {} BFD_RELOC_CRX_ABS32
+ at deffnx {} BFD_RELOC_CRX_NUM8
+ at deffnx {} BFD_RELOC_CRX_NUM16
+ at deffnx {} BFD_RELOC_CRX_NUM32
+ at deffnx {} BFD_RELOC_CRX_IMM16
+ at deffnx {} BFD_RELOC_CRX_IMM32
+ at deffnx {} BFD_RELOC_CRX_SWITCH8
+ at deffnx {} BFD_RELOC_CRX_SWITCH16
+ at deffnx {} BFD_RELOC_CRX_SWITCH32
+NS CRX Relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_CRIS_BDISP8
+ at deffnx {} BFD_RELOC_CRIS_UNSIGNED_5
+ at deffnx {} BFD_RELOC_CRIS_SIGNED_6
+ at deffnx {} BFD_RELOC_CRIS_UNSIGNED_6
+ at deffnx {} BFD_RELOC_CRIS_SIGNED_8
+ at deffnx {} BFD_RELOC_CRIS_UNSIGNED_8
+ at deffnx {} BFD_RELOC_CRIS_SIGNED_16
+ at deffnx {} BFD_RELOC_CRIS_UNSIGNED_16
+ at deffnx {} BFD_RELOC_CRIS_LAPCQ_OFFSET
+ at deffnx {} BFD_RELOC_CRIS_UNSIGNED_4
+These relocs are only used within the CRIS assembler.  They are not
+(at present) written to any object files.
+ at end deffn
+ at deffn {} BFD_RELOC_CRIS_COPY
+ at deffnx {} BFD_RELOC_CRIS_GLOB_DAT
+ at deffnx {} BFD_RELOC_CRIS_JUMP_SLOT
+ at deffnx {} BFD_RELOC_CRIS_RELATIVE
+Relocs used in ELF shared libraries for CRIS.
+ at end deffn
+ at deffn {} BFD_RELOC_CRIS_32_GOT
+32-bit offset to symbol-entry within GOT.
+ at end deffn
+ at deffn {} BFD_RELOC_CRIS_16_GOT
+16-bit offset to symbol-entry within GOT.
+ at end deffn
+ at deffn {} BFD_RELOC_CRIS_32_GOTPLT
+32-bit offset to symbol-entry within GOT, with PLT handling.
+ at end deffn
+ at deffn {} BFD_RELOC_CRIS_16_GOTPLT
+16-bit offset to symbol-entry within GOT, with PLT handling.
+ at end deffn
+ at deffn {} BFD_RELOC_CRIS_32_GOTREL
+32-bit offset to symbol, relative to GOT.
+ at end deffn
+ at deffn {} BFD_RELOC_CRIS_32_PLT_GOTREL
+32-bit offset to symbol with PLT entry, relative to GOT.
+ at end deffn
+ at deffn {} BFD_RELOC_CRIS_32_PLT_PCREL
+32-bit offset to symbol with PLT entry, relative to this relocation.
+ at end deffn
+ at deffn {} BFD_RELOC_CRIS_32_GOT_GD
+ at deffnx {} BFD_RELOC_CRIS_16_GOT_GD
+ at deffnx {} BFD_RELOC_CRIS_32_GD
+ at deffnx {} BFD_RELOC_CRIS_DTP
+ at deffnx {} BFD_RELOC_CRIS_32_DTPREL
+ at deffnx {} BFD_RELOC_CRIS_16_DTPREL
+ at deffnx {} BFD_RELOC_CRIS_32_GOT_TPREL
+ at deffnx {} BFD_RELOC_CRIS_16_GOT_TPREL
+ at deffnx {} BFD_RELOC_CRIS_32_TPREL
+ at deffnx {} BFD_RELOC_CRIS_16_TPREL
+ at deffnx {} BFD_RELOC_CRIS_DTPMOD
+ at deffnx {} BFD_RELOC_CRIS_32_IE
+Relocs used in TLS code for CRIS.
+ at end deffn
+ at deffn {} BFD_RELOC_860_COPY
+ at deffnx {} BFD_RELOC_860_GLOB_DAT
+ at deffnx {} BFD_RELOC_860_JUMP_SLOT
+ at deffnx {} BFD_RELOC_860_RELATIVE
+ at deffnx {} BFD_RELOC_860_PC26
+ at deffnx {} BFD_RELOC_860_PLT26
+ at deffnx {} BFD_RELOC_860_PC16
+ at deffnx {} BFD_RELOC_860_LOW0
+ at deffnx {} BFD_RELOC_860_SPLIT0
+ at deffnx {} BFD_RELOC_860_LOW1
+ at deffnx {} BFD_RELOC_860_SPLIT1
+ at deffnx {} BFD_RELOC_860_LOW2
+ at deffnx {} BFD_RELOC_860_SPLIT2
+ at deffnx {} BFD_RELOC_860_LOW3
+ at deffnx {} BFD_RELOC_860_LOGOT0
+ at deffnx {} BFD_RELOC_860_SPGOT0
+ at deffnx {} BFD_RELOC_860_LOGOT1
+ at deffnx {} BFD_RELOC_860_SPGOT1
+ at deffnx {} BFD_RELOC_860_LOGOTOFF0
+ at deffnx {} BFD_RELOC_860_SPGOTOFF0
+ at deffnx {} BFD_RELOC_860_LOGOTOFF1
+ at deffnx {} BFD_RELOC_860_SPGOTOFF1
+ at deffnx {} BFD_RELOC_860_LOGOTOFF2
+ at deffnx {} BFD_RELOC_860_LOGOTOFF3
+ at deffnx {} BFD_RELOC_860_LOPC
+ at deffnx {} BFD_RELOC_860_HIGHADJ
+ at deffnx {} BFD_RELOC_860_HAGOT
+ at deffnx {} BFD_RELOC_860_HAGOTOFF
+ at deffnx {} BFD_RELOC_860_HAPC
+ at deffnx {} BFD_RELOC_860_HIGH
+ at deffnx {} BFD_RELOC_860_HIGOT
+ at deffnx {} BFD_RELOC_860_HIGOTOFF
+Intel i860 Relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_OPENRISC_ABS_26
+ at deffnx {} BFD_RELOC_OPENRISC_REL_26
+OpenRISC Relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_H8_DIR16A8
+ at deffnx {} BFD_RELOC_H8_DIR16R8
+ at deffnx {} BFD_RELOC_H8_DIR24A8
+ at deffnx {} BFD_RELOC_H8_DIR24R8
+ at deffnx {} BFD_RELOC_H8_DIR32A16
+H8 elf Relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_XSTORMY16_REL_12
+ at deffnx {} BFD_RELOC_XSTORMY16_12
+ at deffnx {} BFD_RELOC_XSTORMY16_24
+ at deffnx {} BFD_RELOC_XSTORMY16_FPTR16
+Sony Xstormy16 Relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_RELC
+Self-describing complex relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_XC16X_PAG
+ at deffnx {} BFD_RELOC_XC16X_POF
+ at deffnx {} BFD_RELOC_XC16X_SEG
+ at deffnx {} BFD_RELOC_XC16X_SOF
+Infineon Relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_VAX_GLOB_DAT
+ at deffnx {} BFD_RELOC_VAX_JMP_SLOT
+ at deffnx {} BFD_RELOC_VAX_RELATIVE
+Relocations used by VAX ELF.
+ at end deffn
+ at deffn {} BFD_RELOC_MT_PC16
+Morpho MT - 16 bit immediate relocation.
+ at end deffn
+ at deffn {} BFD_RELOC_MT_HI16
+Morpho MT - Hi 16 bits of an address.
+ at end deffn
+ at deffn {} BFD_RELOC_MT_LO16
+Morpho MT - Low 16 bits of an address.
+ at end deffn
+ at deffn {} BFD_RELOC_MT_GNU_VTINHERIT
+Morpho MT - Used to tell the linker which vtable entries are used.
+ at end deffn
+ at deffn {} BFD_RELOC_MT_GNU_VTENTRY
+Morpho MT - Used to tell the linker which vtable entries are used.
+ at end deffn
+ at deffn {} BFD_RELOC_MT_PCINSN8
+Morpho MT - 8 bit immediate relocation.
+ at end deffn
+ at deffn {} BFD_RELOC_MSP430_10_PCREL
+ at deffnx {} BFD_RELOC_MSP430_16_PCREL
+ at deffnx {} BFD_RELOC_MSP430_16
+ at deffnx {} BFD_RELOC_MSP430_16_PCREL_BYTE
+ at deffnx {} BFD_RELOC_MSP430_16_BYTE
+ at deffnx {} BFD_RELOC_MSP430_2X_PCREL
+ at deffnx {} BFD_RELOC_MSP430_RL_PCREL
+msp430 specific relocation codes
+ at end deffn
+ at deffn {} BFD_RELOC_IQ2000_OFFSET_16
+ at deffnx {} BFD_RELOC_IQ2000_OFFSET_21
+ at deffnx {} BFD_RELOC_IQ2000_UHI16
+IQ2000 Relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_XTENSA_RTLD
+Special Xtensa relocation used only by PLT entries in ELF shared
+objects to indicate that the runtime linker should set the value
+to one of its own internal functions or data structures.
+ at end deffn
+ at deffn {} BFD_RELOC_XTENSA_GLOB_DAT
+ at deffnx {} BFD_RELOC_XTENSA_JMP_SLOT
+ at deffnx {} BFD_RELOC_XTENSA_RELATIVE
+Xtensa relocations for ELF shared objects.
+ at end deffn
+ at deffn {} BFD_RELOC_XTENSA_PLT
+Xtensa relocation used in ELF object files for symbols that may require
+PLT entries.  Otherwise, this is just a generic 32-bit relocation.
+ at end deffn
+ at deffn {} BFD_RELOC_XTENSA_DIFF8
+ at deffnx {} BFD_RELOC_XTENSA_DIFF16
+ at deffnx {} BFD_RELOC_XTENSA_DIFF32
+Xtensa relocations to mark the difference of two local symbols.
+These are only needed to support linker relaxation and can be ignored
+when not relaxing.  The field is set to the value of the difference
+assuming no relaxation.  The relocation encodes the position of the
+first symbol so the linker can determine whether to adjust the field
+value.
+ at end deffn
+ at deffn {} BFD_RELOC_XTENSA_SLOT0_OP
+ at deffnx {} BFD_RELOC_XTENSA_SLOT1_OP
+ at deffnx {} BFD_RELOC_XTENSA_SLOT2_OP
+ at deffnx {} BFD_RELOC_XTENSA_SLOT3_OP
+ at deffnx {} BFD_RELOC_XTENSA_SLOT4_OP
+ at deffnx {} BFD_RELOC_XTENSA_SLOT5_OP
+ at deffnx {} BFD_RELOC_XTENSA_SLOT6_OP
+ at deffnx {} BFD_RELOC_XTENSA_SLOT7_OP
+ at deffnx {} BFD_RELOC_XTENSA_SLOT8_OP
+ at deffnx {} BFD_RELOC_XTENSA_SLOT9_OP
+ at deffnx {} BFD_RELOC_XTENSA_SLOT10_OP
+ at deffnx {} BFD_RELOC_XTENSA_SLOT11_OP
+ at deffnx {} BFD_RELOC_XTENSA_SLOT12_OP
+ at deffnx {} BFD_RELOC_XTENSA_SLOT13_OP
+ at deffnx {} BFD_RELOC_XTENSA_SLOT14_OP
+Generic Xtensa relocations for instruction operands.  Only the slot
+number is encoded in the relocation.  The relocation applies to the
+last PC-relative immediate operand, or if there are no PC-relative
+immediates, to the last immediate operand.
+ at end deffn
+ at deffn {} BFD_RELOC_XTENSA_SLOT0_ALT
+ at deffnx {} BFD_RELOC_XTENSA_SLOT1_ALT
+ at deffnx {} BFD_RELOC_XTENSA_SLOT2_ALT
+ at deffnx {} BFD_RELOC_XTENSA_SLOT3_ALT
+ at deffnx {} BFD_RELOC_XTENSA_SLOT4_ALT
+ at deffnx {} BFD_RELOC_XTENSA_SLOT5_ALT
+ at deffnx {} BFD_RELOC_XTENSA_SLOT6_ALT
+ at deffnx {} BFD_RELOC_XTENSA_SLOT7_ALT
+ at deffnx {} BFD_RELOC_XTENSA_SLOT8_ALT
+ at deffnx {} BFD_RELOC_XTENSA_SLOT9_ALT
+ at deffnx {} BFD_RELOC_XTENSA_SLOT10_ALT
+ at deffnx {} BFD_RELOC_XTENSA_SLOT11_ALT
+ at deffnx {} BFD_RELOC_XTENSA_SLOT12_ALT
+ at deffnx {} BFD_RELOC_XTENSA_SLOT13_ALT
+ at deffnx {} BFD_RELOC_XTENSA_SLOT14_ALT
+Alternate Xtensa relocations.  Only the slot is encoded in the
+relocation.  The meaning of these relocations is opcode-specific.
+ at end deffn
+ at deffn {} BFD_RELOC_XTENSA_OP0
+ at deffnx {} BFD_RELOC_XTENSA_OP1
+ at deffnx {} BFD_RELOC_XTENSA_OP2
+Xtensa relocations for backward compatibility.  These have all been
+replaced by BFD_RELOC_XTENSA_SLOT0_OP.
+ at end deffn
+ at deffn {} BFD_RELOC_XTENSA_ASM_EXPAND
+Xtensa relocation to mark that the assembler expanded the
+instructions from an original target.  The expansion size is
+encoded in the reloc size.
+ at end deffn
+ at deffn {} BFD_RELOC_XTENSA_ASM_SIMPLIFY
+Xtensa relocation to mark that the linker should simplify
+assembler-expanded instructions.  This is commonly used
+internally by the linker after analysis of a
+BFD_RELOC_XTENSA_ASM_EXPAND.
+ at end deffn
+ at deffn {} BFD_RELOC_XTENSA_TLSDESC_FN
+ at deffnx {} BFD_RELOC_XTENSA_TLSDESC_ARG
+ at deffnx {} BFD_RELOC_XTENSA_TLS_DTPOFF
+ at deffnx {} BFD_RELOC_XTENSA_TLS_TPOFF
+ at deffnx {} BFD_RELOC_XTENSA_TLS_FUNC
+ at deffnx {} BFD_RELOC_XTENSA_TLS_ARG
+ at deffnx {} BFD_RELOC_XTENSA_TLS_CALL
+Xtensa TLS relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_Z80_DISP8
+8 bit signed offset in (ix+d) or (iy+d).
+ at end deffn
+ at deffn {} BFD_RELOC_Z8K_DISP7
+DJNZ offset.
+ at end deffn
+ at deffn {} BFD_RELOC_Z8K_CALLR
+CALR offset.
+ at end deffn
+ at deffn {} BFD_RELOC_Z8K_IMM4L
+4 bit value.
+ at end deffn
+ at deffn {} BFD_RELOC_LM32_CALL
+ at deffnx {} BFD_RELOC_LM32_BRANCH
+ at deffnx {} BFD_RELOC_LM32_16_GOT
+ at deffnx {} BFD_RELOC_LM32_GOTOFF_HI16
+ at deffnx {} BFD_RELOC_LM32_GOTOFF_LO16
+ at deffnx {} BFD_RELOC_LM32_COPY
+ at deffnx {} BFD_RELOC_LM32_GLOB_DAT
+ at deffnx {} BFD_RELOC_LM32_JMP_SLOT
+ at deffnx {} BFD_RELOC_LM32_RELATIVE
+Lattice Mico32 relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_MACH_O_SECTDIFF
+Difference between two section addreses.  Must be followed by a
+BFD_RELOC_MACH_O_PAIR.
+ at end deffn
+ at deffn {} BFD_RELOC_MACH_O_LOCAL_SECTDIFF
+Like BFD_RELOC_MACH_O_SECTDIFF but with a local symbol.
+ at end deffn
+ at deffn {} BFD_RELOC_MACH_O_PAIR
+Pair of relocation.  Contains the first symbol.
+ at end deffn
+ at deffn {} BFD_RELOC_MACH_O_X86_64_BRANCH32
+ at deffnx {} BFD_RELOC_MACH_O_X86_64_BRANCH8
+PCREL relocations.  They are marked as branch to create PLT entry if
+required.
+ at end deffn
+ at deffn {} BFD_RELOC_MACH_O_X86_64_GOT
+Used when referencing a GOT entry.
+ at end deffn
+ at deffn {} BFD_RELOC_MACH_O_X86_64_GOT_LOAD
+Used when loading a GOT entry with movq.  It is specially marked so that
+the linker could optimize the movq to a leaq if possible.
+ at end deffn
+ at deffn {} BFD_RELOC_MACH_O_X86_64_SUBTRACTOR32
+Symbol will be substracted.  Must be followed by a BFD_RELOC_64.
+ at end deffn
+ at deffn {} BFD_RELOC_MACH_O_X86_64_SUBTRACTOR64
+Symbol will be substracted.  Must be followed by a BFD_RELOC_64.
+ at end deffn
+ at deffn {} BFD_RELOC_MACH_O_X86_64_PCREL32_1
+Same as BFD_RELOC_32_PCREL but with an implicit -1 addend.
+ at end deffn
+ at deffn {} BFD_RELOC_MACH_O_X86_64_PCREL32_2
+Same as BFD_RELOC_32_PCREL but with an implicit -2 addend.
+ at end deffn
+ at deffn {} BFD_RELOC_MACH_O_X86_64_PCREL32_4
+Same as BFD_RELOC_32_PCREL but with an implicit -4 addend.
+ at end deffn
+ at deffn {} BFD_RELOC_MICROBLAZE_32_LO
+This is a 32 bit reloc for the microblaze that stores the 
+low 16 bits of a value
+ at end deffn
+ at deffn {} BFD_RELOC_MICROBLAZE_32_LO_PCREL
+This is a 32 bit pc-relative reloc for the microblaze that 
+stores the low 16 bits of a value
+ at end deffn
+ at deffn {} BFD_RELOC_MICROBLAZE_32_ROSDA
+This is a 32 bit reloc for the microblaze that stores a 
+value relative to the read-only small data area anchor
+ at end deffn
+ at deffn {} BFD_RELOC_MICROBLAZE_32_RWSDA
+This is a 32 bit reloc for the microblaze that stores a 
+value relative to the read-write small data area anchor
+ at end deffn
+ at deffn {} BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM
+This is a 32 bit reloc for the microblaze to handle 
+expressions of the form "Symbol Op Symbol"
+ at end deffn
+ at deffn {} BFD_RELOC_MICROBLAZE_64_NONE
+This is a 64 bit reloc that stores the 32 bit pc relative 
+value in two words (with an imm instruction).  No relocation is 
+done here - only used for relaxing
+ at end deffn
+ at deffn {} BFD_RELOC_MICROBLAZE_64_GOTPC
+This is a 64 bit reloc that stores the 32 bit pc relative 
+value in two words (with an imm instruction).  The relocation is
+PC-relative GOT offset
+ at end deffn
+ at deffn {} BFD_RELOC_MICROBLAZE_64_GOT
+This is a 64 bit reloc that stores the 32 bit pc relative 
+value in two words (with an imm instruction).  The relocation is
+GOT offset
+ at end deffn
+ at deffn {} BFD_RELOC_MICROBLAZE_64_PLT
+This is a 64 bit reloc that stores the 32 bit pc relative 
+value in two words (with an imm instruction).  The relocation is
+PC-relative offset into PLT
+ at end deffn
+ at deffn {} BFD_RELOC_MICROBLAZE_64_GOTOFF
+This is a 64 bit reloc that stores the 32 bit GOT relative 
+value in two words (with an imm instruction).  The relocation is
+relative offset from _GLOBAL_OFFSET_TABLE_
+ at end deffn
+ at deffn {} BFD_RELOC_MICROBLAZE_32_GOTOFF
+This is a 32 bit reloc that stores the 32 bit GOT relative 
+value in a word.  The relocation is relative offset from
+ at end deffn
+ at deffn {} BFD_RELOC_MICROBLAZE_COPY
+This is used to tell the dynamic linker to copy the value out of
+the dynamic object into the runtime process image.
+ at end deffn
+ at deffn {} BFD_RELOC_TILEPRO_COPY
+ at deffnx {} BFD_RELOC_TILEPRO_GLOB_DAT
+ at deffnx {} BFD_RELOC_TILEPRO_JMP_SLOT
+ at deffnx {} BFD_RELOC_TILEPRO_RELATIVE
+ at deffnx {} BFD_RELOC_TILEPRO_BROFF_X1
+ at deffnx {} BFD_RELOC_TILEPRO_JOFFLONG_X1
+ at deffnx {} BFD_RELOC_TILEPRO_JOFFLONG_X1_PLT
+ at deffnx {} BFD_RELOC_TILEPRO_IMM8_X0
+ at deffnx {} BFD_RELOC_TILEPRO_IMM8_Y0
+ at deffnx {} BFD_RELOC_TILEPRO_IMM8_X1
+ at deffnx {} BFD_RELOC_TILEPRO_IMM8_Y1
+ at deffnx {} BFD_RELOC_TILEPRO_DEST_IMM8_X1
+ at deffnx {} BFD_RELOC_TILEPRO_MT_IMM15_X1
+ at deffnx {} BFD_RELOC_TILEPRO_MF_IMM15_X1
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_LO
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_LO
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_HI
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_HI
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_HA
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_HA
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_PCREL
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_PCREL
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_LO_PCREL
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_LO_PCREL
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_HI_PCREL
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_HI_PCREL
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_HA_PCREL
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_HA_PCREL
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_GOT
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_GOT
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_GOT_LO
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_GOT_LO
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_GOT_HI
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_GOT_HI
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_GOT_HA
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_GOT_HA
+ at deffnx {} BFD_RELOC_TILEPRO_MMSTART_X0
+ at deffnx {} BFD_RELOC_TILEPRO_MMEND_X0
+ at deffnx {} BFD_RELOC_TILEPRO_MMSTART_X1
+ at deffnx {} BFD_RELOC_TILEPRO_MMEND_X1
+ at deffnx {} BFD_RELOC_TILEPRO_SHAMT_X0
+ at deffnx {} BFD_RELOC_TILEPRO_SHAMT_X1
+ at deffnx {} BFD_RELOC_TILEPRO_SHAMT_Y0
+ at deffnx {} BFD_RELOC_TILEPRO_SHAMT_Y1
+ at deffnx {} BFD_RELOC_TILEPRO_TLS_GD_CALL
+ at deffnx {} BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD
+ at deffnx {} BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD
+ at deffnx {} BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD
+ at deffnx {} BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD
+ at deffnx {} BFD_RELOC_TILEPRO_TLS_IE_LOAD
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_LO
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HI
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HI
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HA
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HA
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_LO
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_LO
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HI
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HI
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HA
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HA
+ at deffnx {} BFD_RELOC_TILEPRO_TLS_DTPMOD32
+ at deffnx {} BFD_RELOC_TILEPRO_TLS_DTPOFF32
+ at deffnx {} BFD_RELOC_TILEPRO_TLS_TPOFF32
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA
+ at deffnx {} BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA
+Tilera TILEPro Relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_TILEGX_HW0
+ at deffnx {} BFD_RELOC_TILEGX_HW1
+ at deffnx {} BFD_RELOC_TILEGX_HW2
+ at deffnx {} BFD_RELOC_TILEGX_HW3
+ at deffnx {} BFD_RELOC_TILEGX_HW0_LAST
+ at deffnx {} BFD_RELOC_TILEGX_HW1_LAST
+ at deffnx {} BFD_RELOC_TILEGX_HW2_LAST
+ at deffnx {} BFD_RELOC_TILEGX_COPY
+ at deffnx {} BFD_RELOC_TILEGX_GLOB_DAT
+ at deffnx {} BFD_RELOC_TILEGX_JMP_SLOT
+ at deffnx {} BFD_RELOC_TILEGX_RELATIVE
+ at deffnx {} BFD_RELOC_TILEGX_BROFF_X1
+ at deffnx {} BFD_RELOC_TILEGX_JUMPOFF_X1
+ at deffnx {} BFD_RELOC_TILEGX_JUMPOFF_X1_PLT
+ at deffnx {} BFD_RELOC_TILEGX_IMM8_X0
+ at deffnx {} BFD_RELOC_TILEGX_IMM8_Y0
+ at deffnx {} BFD_RELOC_TILEGX_IMM8_X1
+ at deffnx {} BFD_RELOC_TILEGX_IMM8_Y1
+ at deffnx {} BFD_RELOC_TILEGX_DEST_IMM8_X1
+ at deffnx {} BFD_RELOC_TILEGX_MT_IMM14_X1
+ at deffnx {} BFD_RELOC_TILEGX_MF_IMM14_X1
+ at deffnx {} BFD_RELOC_TILEGX_MMSTART_X0
+ at deffnx {} BFD_RELOC_TILEGX_MMEND_X0
+ at deffnx {} BFD_RELOC_TILEGX_SHAMT_X0
+ at deffnx {} BFD_RELOC_TILEGX_SHAMT_X1
+ at deffnx {} BFD_RELOC_TILEGX_SHAMT_Y0
+ at deffnx {} BFD_RELOC_TILEGX_SHAMT_Y1
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW0
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW0
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW1
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW1
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW2
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW2
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW3
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW3
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW0_PCREL
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW0_PCREL
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW1_PCREL
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW1_PCREL
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW2_PCREL
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW2_PCREL
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW3_PCREL
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW3_PCREL
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PCREL
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PCREL
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PCREL
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PCREL
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PCREL
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE
+ at deffnx {} BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE
+ at deffnx {} BFD_RELOC_TILEGX_TLS_DTPMOD64
+ at deffnx {} BFD_RELOC_TILEGX_TLS_DTPOFF64
+ at deffnx {} BFD_RELOC_TILEGX_TLS_TPOFF64
+ at deffnx {} BFD_RELOC_TILEGX_TLS_DTPMOD32
+ at deffnx {} BFD_RELOC_TILEGX_TLS_DTPOFF32
+ at deffnx {} BFD_RELOC_TILEGX_TLS_TPOFF32
+ at deffnx {} BFD_RELOC_TILEGX_TLS_GD_CALL
+ at deffnx {} BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD
+ at deffnx {} BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD
+ at deffnx {} BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD
+ at deffnx {} BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD
+ at deffnx {} BFD_RELOC_TILEGX_TLS_IE_LOAD
+ at deffnx {} BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD
+ at deffnx {} BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD
+ at deffnx {} BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD
+ at deffnx {} BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD
+Tilera TILE-Gx Relocations.
+ at end deffn
+ at deffn {} BFD_RELOC_EPIPHANY_SIMM8
+Adapteva EPIPHANY - 8 bit signed pc-relative displacement
+ at end deffn
+ at deffn {} BFD_RELOC_EPIPHANY_SIMM24
+Adapteva EPIPHANY - 24 bit signed pc-relative displacement
+ at end deffn
+ at deffn {} BFD_RELOC_EPIPHANY_HIGH
+Adapteva EPIPHANY - 16 most-significant bits of absolute address
+ at end deffn
+ at deffn {} BFD_RELOC_EPIPHANY_LOW
+Adapteva EPIPHANY - 16 least-significant bits of absolute address
+ at end deffn
+ at deffn {} BFD_RELOC_EPIPHANY_SIMM11
+Adapteva EPIPHANY - 11 bit signed number - add/sub immediate
+ at end deffn
+ at deffn {} BFD_RELOC_EPIPHANY_IMM11
+Adapteva EPIPHANY - 11 bit sign-magnitude number (ld/st displacement)
+ at end deffn
+ at deffn {} BFD_RELOC_EPIPHANY_IMM8
+Adapteva EPIPHANY - 8 bit immediate for 16 bit mov instruction.
+ at end deffn
+
+ at example
+
+typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
+ at end example
+ at findex bfd_reloc_type_lookup
+ at subsubsection @code{bfd_reloc_type_lookup}
+ at strong{Synopsis}
+ at example
+reloc_howto_type *bfd_reloc_type_lookup
+   (bfd *abfd, bfd_reloc_code_real_type code);
+reloc_howto_type *bfd_reloc_name_lookup
+   (bfd *abfd, const char *reloc_name);
+ at end example
+ at strong{Description}@*
+Return a pointer to a howto structure which, when
+invoked, will perform the relocation @var{code} on data from the
+architecture noted.
+
+ at findex bfd_default_reloc_type_lookup
+ at subsubsection @code{bfd_default_reloc_type_lookup}
+ at strong{Synopsis}
+ at example
+reloc_howto_type *bfd_default_reloc_type_lookup
+   (bfd *abfd, bfd_reloc_code_real_type  code);
+ at end example
+ at strong{Description}@*
+Provides a default relocation lookup routine for any architecture.
+
+ at findex bfd_get_reloc_code_name
+ at subsubsection @code{bfd_get_reloc_code_name}
+ at strong{Synopsis}
+ at example
+const char *bfd_get_reloc_code_name (bfd_reloc_code_real_type code);
+ at end example
+ at strong{Description}@*
+Provides a printable name for the supplied relocation code.
+Useful mainly for printing error messages.
+
+ at findex bfd_generic_relax_section
+ at subsubsection @code{bfd_generic_relax_section}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_generic_relax_section
+   (bfd *abfd,
+    asection *section,
+    struct bfd_link_info *,
+    bfd_boolean *);
+ at end example
+ at strong{Description}@*
+Provides default handling for relaxing for back ends which
+don't do relaxing.
+
+ at findex bfd_generic_gc_sections
+ at subsubsection @code{bfd_generic_gc_sections}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_generic_gc_sections
+   (bfd *, struct bfd_link_info *);
+ at end example
+ at strong{Description}@*
+Provides default handling for relaxing for back ends which
+don't do section gc -- i.e., does nothing.
+
+ at findex bfd_generic_lookup_section_flags
+ at subsubsection @code{bfd_generic_lookup_section_flags}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_generic_lookup_section_flags
+   (struct bfd_link_info *, struct flag_info *, asection *);
+ at end example
+ at strong{Description}@*
+Provides default handling for section flags lookup
+-- i.e., does nothing.
+Returns FALSE if the section should be omitted, otherwise TRUE.
+
+ at findex bfd_generic_merge_sections
+ at subsubsection @code{bfd_generic_merge_sections}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_generic_merge_sections
+   (bfd *, struct bfd_link_info *);
+ at end example
+ at strong{Description}@*
+Provides default handling for SEC_MERGE section merging for back ends
+which don't have SEC_MERGE support -- i.e., does nothing.
+
+ at findex bfd_generic_get_relocated_section_contents
+ at subsubsection @code{bfd_generic_get_relocated_section_contents}
+ at strong{Synopsis}
+ at example
+bfd_byte *bfd_generic_get_relocated_section_contents
+   (bfd *abfd,
+    struct bfd_link_info *link_info,
+    struct bfd_link_order *link_order,
+    bfd_byte *data,
+    bfd_boolean relocatable,
+    asymbol **symbols);
+ at end example
+ at strong{Description}@*
+Provides default handling of relocation effort for back ends
+which can't be bothered to do it efficiently.
 
diff --git a/bfd/doc/section.texi b/bfd/doc/section.texi
index 8b13789..cc6ee94 100644
--- a/bfd/doc/section.texi
+++ b/bfd/doc/section.texi
@@ -1 +1,1035 @@
+ at section Sections
+The raw data contained within a BFD is maintained through the
+section abstraction.  A single BFD may have any number of
+sections.  It keeps hold of them by pointing to the first;
+each one points to the next in the list.
+
+Sections are supported in BFD in @code{section.c}.
+
+ at menu
+* Section Input::
+* Section Output::
+* typedef asection::
+* section prototypes::
+ at end menu
+
+ at node Section Input, Section Output, Sections, Sections
+ at subsection Section input
+When a BFD is opened for reading, the section structures are
+created and attached to the BFD.
+
+Each section has a name which describes the section in the
+outside world---for example, @code{a.out} would contain at least
+three sections, called @code{.text}, @code{.data} and @code{.bss}.
+
+Names need not be unique; for example a COFF file may have several
+sections named @code{.data}.
+
+Sometimes a BFD will contain more than the ``natural'' number of
+sections. A back end may attach other sections containing
+constructor data, or an application may add a section (using
+ at code{bfd_make_section}) to the sections attached to an already open
+BFD. For example, the linker creates an extra section
+ at code{COMMON} for each input file's BFD to hold information about
+common storage.
+
+The raw data is not necessarily read in when
+the section descriptor is created. Some targets may leave the
+data in place until a @code{bfd_get_section_contents} call is
+made. Other back ends may read in all the data at once.  For
+example, an S-record file has to be read once to determine the
+size of the data. An IEEE-695 file doesn't contain raw data in
+sections, but data and relocation expressions intermixed, so
+the data area has to be parsed to get out the data and
+relocations.
+
+ at node Section Output, typedef asection, Section Input, Sections
+ at subsection Section output
+To write a new object style BFD, the various sections to be
+written have to be created. They are attached to the BFD in
+the same way as input sections; data is written to the
+sections using @code{bfd_set_section_contents}.
+
+Any program that creates or combines sections (e.g., the assembler
+and linker) must use the @code{asection} fields @code{output_section} and
+ at code{output_offset} to indicate the file sections to which each
+section must be written.  (If the section is being created from
+scratch, @code{output_section} should probably point to the section
+itself and @code{output_offset} should probably be zero.)
+
+The data to be written comes from input sections attached
+(via @code{output_section} pointers) to
+the output sections.  The output section structure can be
+considered a filter for the input section: the output section
+determines the vma of the output data and the name, but the
+input section determines the offset into the output section of
+the data to be written.
+
+E.g., to create a section "O", starting at 0x100, 0x123 long,
+containing two subsections, "A" at offset 0x0 (i.e., at vma
+0x100) and "B" at offset 0x20 (i.e., at vma 0x120) the @code{asection}
+structures would look like:
+
+ at example
+   section name          "A"
+     output_offset   0x00
+     size            0x20
+     output_section ----------->  section name    "O"
+                             |    vma             0x100
+   section name          "B" |    size            0x123
+     output_offset   0x20    |
+     size            0x103   |
+     output_section  --------|
+ at end example
+
+ at subsection Link orders
+The data within a section is stored in a @dfn{link_order}.
+These are much like the fixups in @code{gas}.  The link_order
+abstraction allows a section to grow and shrink within itself.
+
+A link_order knows how big it is, and which is the next
+link_order and where the raw data for it is; it also points to
+a list of relocations which apply to it.
+
+The link_order is used by the linker to perform relaxing on
+final code.  The compiler creates code which is as big as
+necessary to make it work without relaxing, and the user can
+select whether to relax.  Sometimes relaxing takes a lot of
+time.  The linker runs around the relocations to see if any
+are attached to data which can be shrunk, if so it does it on
+a link_order by link_order basis.
+
+
+ at node typedef asection, section prototypes, Section Output, Sections
+ at subsection typedef asection
+Here is the section structure:
+
+
+ at example
+
+typedef struct bfd_section
+@{
+  /* The name of the section; the name isn't a copy, the pointer is
+     the same as that passed to bfd_make_section.  */
+  const char *name;
+
+  /* A unique sequence number.  */
+  int id;
+
+  /* Which section in the bfd; 0..n-1 as sections are created in a bfd.  */
+  int index;
+
+  /* The next section in the list belonging to the BFD, or NULL.  */
+  struct bfd_section *next;
+
+  /* The previous section in the list belonging to the BFD, or NULL.  */
+  struct bfd_section *prev;
+
+  /* The field flags contains attributes of the section. Some
+     flags are read in from the object file, and some are
+     synthesized from other information.  */
+  flagword flags;
+
+#define SEC_NO_FLAGS   0x000
+
+  /* Tells the OS to allocate space for this section when loading.
+     This is clear for a section containing debug information only.  */
+#define SEC_ALLOC      0x001
+
+  /* Tells the OS to load the section from the file when loading.
+     This is clear for a .bss section.  */
+#define SEC_LOAD       0x002
+
+  /* The section contains data still to be relocated, so there is
+     some relocation information too.  */
+#define SEC_RELOC      0x004
+
+  /* A signal to the OS that the section contains read only data.  */
+#define SEC_READONLY   0x008
+
+  /* The section contains code only.  */
+#define SEC_CODE       0x010
+
+  /* The section contains data only.  */
+#define SEC_DATA       0x020
+
+  /* The section will reside in ROM.  */
+#define SEC_ROM        0x040
+
+  /* The section contains constructor information. This section
+     type is used by the linker to create lists of constructors and
+     destructors used by @code{g++}. When a back end sees a symbol
+     which should be used in a constructor list, it creates a new
+     section for the type of name (e.g., @code{__CTOR_LIST__}), attaches
+     the symbol to it, and builds a relocation. To build the lists
+     of constructors, all the linker has to do is catenate all the
+     sections called @code{__CTOR_LIST__} and relocate the data
+     contained within - exactly the operations it would peform on
+     standard data.  */
+#define SEC_CONSTRUCTOR 0x080
+
+  /* The section has contents - a data section could be
+     @code{SEC_ALLOC} | @code{SEC_HAS_CONTENTS}; a debug section could be
+     @code{SEC_HAS_CONTENTS}  */
+#define SEC_HAS_CONTENTS 0x100
+
+  /* An instruction to the linker to not output the section
+     even if it has information which would normally be written.  */
+#define SEC_NEVER_LOAD 0x200
+
+  /* The section contains thread local data.  */
+#define SEC_THREAD_LOCAL 0x400
+
+  /* The section has GOT references.  This flag is only for the
+     linker, and is currently only used by the elf32-hppa back end.
+     It will be set if global offset table references were detected
+     in this section, which indicate to the linker that the section
+     contains PIC code, and must be handled specially when doing a
+     static link.  */
+#define SEC_HAS_GOT_REF 0x800
+
+  /* The section contains common symbols (symbols may be defined
+     multiple times, the value of a symbol is the amount of
+     space it requires, and the largest symbol value is the one
+     used).  Most targets have exactly one of these (which we
+     translate to bfd_com_section_ptr), but ECOFF has two.  */
+#define SEC_IS_COMMON 0x1000
+
+  /* The section contains only debugging information.  For
+     example, this is set for ELF .debug and .stab sections.
+     strip tests this flag to see if a section can be
+     discarded.  */
+#define SEC_DEBUGGING 0x2000
+
+  /* The contents of this section are held in memory pointed to
+     by the contents field.  This is checked by bfd_get_section_contents,
+     and the data is retrieved from memory if appropriate.  */
+#define SEC_IN_MEMORY 0x4000
+
+  /* The contents of this section are to be excluded by the
+     linker for executable and shared objects unless those
+     objects are to be further relocated.  */
+#define SEC_EXCLUDE 0x8000
+
+  /* The contents of this section are to be sorted based on the sum of
+     the symbol and addend values specified by the associated relocation
+     entries.  Entries without associated relocation entries will be
+     appended to the end of the section in an unspecified order.  */
+#define SEC_SORT_ENTRIES 0x10000
+
+  /* When linking, duplicate sections of the same name should be
+     discarded, rather than being combined into a single section as
+     is usually done.  This is similar to how common symbols are
+     handled.  See SEC_LINK_DUPLICATES below.  */
+#define SEC_LINK_ONCE 0x20000
+
+  /* If SEC_LINK_ONCE is set, this bitfield describes how the linker
+     should handle duplicate sections.  */
+#define SEC_LINK_DUPLICATES 0xc0000
+
+  /* This value for SEC_LINK_DUPLICATES means that duplicate
+     sections with the same name should simply be discarded.  */
+#define SEC_LINK_DUPLICATES_DISCARD 0x0
+
+  /* This value for SEC_LINK_DUPLICATES means that the linker
+     should warn if there are any duplicate sections, although
+     it should still only link one copy.  */
+#define SEC_LINK_DUPLICATES_ONE_ONLY 0x40000
+
+  /* This value for SEC_LINK_DUPLICATES means that the linker
+     should warn if any duplicate sections are a different size.  */
+#define SEC_LINK_DUPLICATES_SAME_SIZE 0x80000
+
+  /* This value for SEC_LINK_DUPLICATES means that the linker
+     should warn if any duplicate sections contain different
+     contents.  */
+#define SEC_LINK_DUPLICATES_SAME_CONTENTS \
+  (SEC_LINK_DUPLICATES_ONE_ONLY | SEC_LINK_DUPLICATES_SAME_SIZE)
+
+  /* This section was created by the linker as part of dynamic
+     relocation or other arcane processing.  It is skipped when
+     going through the first-pass output, trusting that someone
+     else up the line will take care of it later.  */
+#define SEC_LINKER_CREATED 0x100000
+
+  /* This section should not be subject to garbage collection.
+     Also set to inform the linker that this section should not be
+     listed in the link map as discarded.  */
+#define SEC_KEEP 0x200000
+
+  /* This section contains "short" data, and should be placed
+     "near" the GP.  */
+#define SEC_SMALL_DATA 0x400000
+
+  /* Attempt to merge identical entities in the section.
+     Entity size is given in the entsize field.  */
+#define SEC_MERGE 0x800000
+
+  /* If given with SEC_MERGE, entities to merge are zero terminated
+     strings where entsize specifies character size instead of fixed
+     size entries.  */
+#define SEC_STRINGS 0x1000000
+
+  /* This section contains data about section groups.  */
+#define SEC_GROUP 0x2000000
+
+  /* The section is a COFF shared library section.  This flag is
+     only for the linker.  If this type of section appears in
+     the input file, the linker must copy it to the output file
+     without changing the vma or size.  FIXME: Although this
+     was originally intended to be general, it really is COFF
+     specific (and the flag was renamed to indicate this).  It
+     might be cleaner to have some more general mechanism to
+     allow the back end to control what the linker does with
+     sections.  */
+#define SEC_COFF_SHARED_LIBRARY 0x4000000
+
+  /* This input section should be copied to output in reverse order
+     as an array of pointers.  This is for ELF linker internal use
+     only.  */
+#define SEC_ELF_REVERSE_COPY 0x4000000
+
+  /* This section contains data which may be shared with other
+     executables or shared objects. This is for COFF only.  */
+#define SEC_COFF_SHARED 0x8000000
+
+  /* When a section with this flag is being linked, then if the size of
+     the input section is less than a page, it should not cross a page
+     boundary.  If the size of the input section is one page or more,
+     it should be aligned on a page boundary.  This is for TI
+     TMS320C54X only.  */
+#define SEC_TIC54X_BLOCK 0x10000000
+
+  /* Conditionally link this section; do not link if there are no
+     references found to any symbol in the section.  This is for TI
+     TMS320C54X only.  */
+#define SEC_TIC54X_CLINK 0x20000000
+
+  /* Indicate that section has the no read flag set. This happens
+     when memory read flag isn't set. */
+#define SEC_COFF_NOREAD 0x40000000
+
+  /*  End of section flags.  */
+
+  /* Some internal packed boolean fields.  */
+
+  /* See the vma field.  */
+  unsigned int user_set_vma : 1;
+
+  /* A mark flag used by some of the linker backends.  */
+  unsigned int linker_mark : 1;
+
+  /* Another mark flag used by some of the linker backends.  Set for
+     output sections that have an input section.  */
+  unsigned int linker_has_input : 1;
+
+  /* Mark flag used by some linker backends for garbage collection.  */
+  unsigned int gc_mark : 1;
+
+  /* Section compression status.  */
+  unsigned int compress_status : 2;
+#define COMPRESS_SECTION_NONE    0
+#define COMPRESS_SECTION_DONE    1
+#define DECOMPRESS_SECTION_SIZED 2
+
+  /* The following flags are used by the ELF linker. */
+
+  /* Mark sections which have been allocated to segments.  */
+  unsigned int segment_mark : 1;
+
+  /* Type of sec_info information.  */
+  unsigned int sec_info_type:3;
+#define SEC_INFO_TYPE_NONE      0
+#define SEC_INFO_TYPE_STABS     1
+#define SEC_INFO_TYPE_MERGE     2
+#define SEC_INFO_TYPE_EH_FRAME  3
+#define SEC_INFO_TYPE_JUST_SYMS 4
+
+  /* Nonzero if this section uses RELA relocations, rather than REL.  */
+  unsigned int use_rela_p:1;
+
+  /* Bits used by various backends.  The generic code doesn't touch
+     these fields.  */
+
+  unsigned int sec_flg0:1;
+  unsigned int sec_flg1:1;
+  unsigned int sec_flg2:1;
+  unsigned int sec_flg3:1;
+  unsigned int sec_flg4:1;
+  unsigned int sec_flg5:1;
+
+  /* End of internal packed boolean fields.  */
+
+  /*  The virtual memory address of the section - where it will be
+      at run time.  The symbols are relocated against this.  The
+      user_set_vma flag is maintained by bfd; if it's not set, the
+      backend can assign addresses (for example, in @code{a.out}, where
+      the default address for @code{.data} is dependent on the specific
+      target and various flags).  */
+  bfd_vma vma;
+
+  /*  The load address of the section - where it would be in a
+      rom image; really only used for writing section header
+      information.  */
+  bfd_vma lma;
+
+  /* The size of the section in octets, as it will be output.
+     Contains a value even if the section has no contents (e.g., the
+     size of @code{.bss}).  */
+  bfd_size_type size;
+
+  /* For input sections, the original size on disk of the section, in
+     octets.  This field should be set for any section whose size is
+     changed by linker relaxation.  It is required for sections where
+     the linker relaxation scheme doesn't cache altered section and
+     reloc contents (stabs, eh_frame, SEC_MERGE, some coff relaxing
+     targets), and thus the original size needs to be kept to read the
+     section multiple times.  For output sections, rawsize holds the
+     section size calculated on a previous linker relaxation pass.  */
+  bfd_size_type rawsize;
+
+  /* The compressed size of the section in octets.  */
+  bfd_size_type compressed_size;
+
+  /* Relaxation table. */
+  struct relax_table *relax;
+
+  /* Count of used relaxation table entries. */
+  int relax_count;
+
+
+  /* If this section is going to be output, then this value is the
+     offset in *bytes* into the output section of the first byte in the
+     input section (byte ==> smallest addressable unit on the
+     target).  In most cases, if this was going to start at the
+     100th octet (8-bit quantity) in the output section, this value
+     would be 100.  However, if the target byte size is 16 bits
+     (bfd_octets_per_byte is "2"), this value would be 50.  */
+  bfd_vma output_offset;
+
+  /* The output section through which to map on output.  */
+  struct bfd_section *output_section;
+
+  /* The alignment requirement of the section, as an exponent of 2 -
+     e.g., 3 aligns to 2^3 (or 8).  */
+  unsigned int alignment_power;
+
+  /* If an input section, a pointer to a vector of relocation
+     records for the data in this section.  */
+  struct reloc_cache_entry *relocation;
+
+  /* If an output section, a pointer to a vector of pointers to
+     relocation records for the data in this section.  */
+  struct reloc_cache_entry **orelocation;
+
+  /* The number of relocation records in one of the above.  */
+  unsigned reloc_count;
+
+  /* Information below is back end specific - and not always used
+     or updated.  */
+
+  /* File position of section data.  */
+  file_ptr filepos;
+
+  /* File position of relocation info.  */
+  file_ptr rel_filepos;
+
+  /* File position of line data.  */
+  file_ptr line_filepos;
+
+  /* Pointer to data for applications.  */
+  void *userdata;
+
+  /* If the SEC_IN_MEMORY flag is set, this points to the actual
+     contents.  */
+  unsigned char *contents;
+
+  /* Attached line number information.  */
+  alent *lineno;
+
+  /* Number of line number records.  */
+  unsigned int lineno_count;
+
+  /* Entity size for merging purposes.  */
+  unsigned int entsize;
+
+  /* Points to the kept section if this section is a link-once section,
+     and is discarded.  */
+  struct bfd_section *kept_section;
+
+  /* When a section is being output, this value changes as more
+     linenumbers are written out.  */
+  file_ptr moving_line_filepos;
+
+  /* What the section number is in the target world.  */
+  int target_index;
+
+  void *used_by_bfd;
+
+  /* If this is a constructor section then here is a list of the
+     relocations created to relocate items within it.  */
+  struct relent_chain *constructor_chain;
+
+  /* The BFD which owns the section.  */
+  bfd *owner;
+
+  /* A symbol which points at this section only.  */
+  struct bfd_symbol *symbol;
+  struct bfd_symbol **symbol_ptr_ptr;
+
+  /* Early in the link process, map_head and map_tail are used to build
+     a list of input sections attached to an output section.  Later,
+     output sections use these fields for a list of bfd_link_order
+     structs.  */
+  union @{
+    struct bfd_link_order *link_order;
+    struct bfd_section *s;
+  @} map_head, map_tail;
+@} asection;
+
+/* Relax table contains information about instructions which can
+   be removed by relaxation -- replacing a long address with a 
+   short address.  */
+struct relax_table @{
+  /* Address where bytes may be deleted. */
+  bfd_vma addr;
+  
+  /* Number of bytes to be deleted.  */
+  int size;
+@};
+
+/* These sections are global, and are managed by BFD.  The application
+   and target back end are not permitted to change the values in
+   these sections.  */
+extern asection std_section[4];
+
+#define BFD_ABS_SECTION_NAME "*ABS*"
+#define BFD_UND_SECTION_NAME "*UND*"
+#define BFD_COM_SECTION_NAME "*COM*"
+#define BFD_IND_SECTION_NAME "*IND*"
+
+/* Pointer to the common section.  */
+#define bfd_com_section_ptr (&std_section[0])
+/* Pointer to the undefined section.  */
+#define bfd_und_section_ptr (&std_section[1])
+/* Pointer to the absolute section.  */
+#define bfd_abs_section_ptr (&std_section[2])
+/* Pointer to the indirect section.  */
+#define bfd_ind_section_ptr (&std_section[3])
+
+#define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr)
+#define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr)
+#define bfd_is_ind_section(sec) ((sec) == bfd_ind_section_ptr)
+
+#define bfd_is_const_section(SEC)              \
+ (   ((SEC) == bfd_abs_section_ptr)            \
+  || ((SEC) == bfd_und_section_ptr)            \
+  || ((SEC) == bfd_com_section_ptr)            \
+  || ((SEC) == bfd_ind_section_ptr))
+
+/* Macros to handle insertion and deletion of a bfd's sections.  These
+   only handle the list pointers, ie. do not adjust section_count,
+   target_index etc.  */
+#define bfd_section_list_remove(ABFD, S) \
+  do                                                   \
+    @{                                                  \
+      asection *_s = S;                                \
+      asection *_next = _s->next;                      \
+      asection *_prev = _s->prev;                      \
+      if (_prev)                                       \
+        _prev->next = _next;                           \
+      else                                             \
+        (ABFD)->sections = _next;                      \
+      if (_next)                                       \
+        _next->prev = _prev;                           \
+      else                                             \
+        (ABFD)->section_last = _prev;                  \
+    @}                                                  \
+  while (0)
+#define bfd_section_list_append(ABFD, S) \
+  do                                                   \
+    @{                                                  \
+      asection *_s = S;                                \
+      bfd *_abfd = ABFD;                               \
+      _s->next = NULL;                                 \
+      if (_abfd->section_last)                         \
+        @{                                              \
+          _s->prev = _abfd->section_last;              \
+          _abfd->section_last->next = _s;              \
+        @}                                              \
+      else                                             \
+        @{                                              \
+          _s->prev = NULL;                             \
+          _abfd->sections = _s;                        \
+        @}                                              \
+      _abfd->section_last = _s;                        \
+    @}                                                  \
+  while (0)
+#define bfd_section_list_prepend(ABFD, S) \
+  do                                                   \
+    @{                                                  \
+      asection *_s = S;                                \
+      bfd *_abfd = ABFD;                               \
+      _s->prev = NULL;                                 \
+      if (_abfd->sections)                             \
+        @{                                              \
+          _s->next = _abfd->sections;                  \
+          _abfd->sections->prev = _s;                  \
+        @}                                              \
+      else                                             \
+        @{                                              \
+          _s->next = NULL;                             \
+          _abfd->section_last = _s;                    \
+        @}                                              \
+      _abfd->sections = _s;                            \
+    @}                                                  \
+  while (0)
+#define bfd_section_list_insert_after(ABFD, A, S) \
+  do                                                   \
+    @{                                                  \
+      asection *_a = A;                                \
+      asection *_s = S;                                \
+      asection *_next = _a->next;                      \
+      _s->next = _next;                                \
+      _s->prev = _a;                                   \
+      _a->next = _s;                                   \
+      if (_next)                                       \
+        _next->prev = _s;                              \
+      else                                             \
+        (ABFD)->section_last = _s;                     \
+    @}                                                  \
+  while (0)
+#define bfd_section_list_insert_before(ABFD, B, S) \
+  do                                                   \
+    @{                                                  \
+      asection *_b = B;                                \
+      asection *_s = S;                                \
+      asection *_prev = _b->prev;                      \
+      _s->prev = _prev;                                \
+      _s->next = _b;                                   \
+      _b->prev = _s;                                   \
+      if (_prev)                                       \
+        _prev->next = _s;                              \
+      else                                             \
+        (ABFD)->sections = _s;                         \
+    @}                                                  \
+  while (0)
+#define bfd_section_removed_from_list(ABFD, S) \
+  ((S)->next == NULL ? (ABFD)->section_last != (S) : (S)->next->prev != (S))
+
+#define BFD_FAKE_SECTION(SEC, FLAGS, SYM, NAME, IDX)                   \
+  /* name, id,  index, next, prev, flags, user_set_vma,            */  \
+  @{ NAME,  IDX, 0,     NULL, NULL, FLAGS, 0,                           \
+                                                                       \
+  /* linker_mark, linker_has_input, gc_mark, decompress_status,    */  \
+     0,           0,                1,       0,                        \
+                                                                       \
+  /* segment_mark, sec_info_type, use_rela_p,                      */  \
+     0,            0,             0,                                   \
+                                                                       \
+  /* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5,   */  \
+     0,        0,        0,        0,        0,        0,              \
+                                                                       \
+  /* vma, lma, size, rawsize, compressed_size, relax, relax_count, */  \
+     0,   0,   0,    0,       0,               0,     0,               \
+                                                                       \
+  /* output_offset, output_section, alignment_power,               */  \
+     0,             &SEC,           0,                                 \
+                                                                       \
+  /* relocation, orelocation, reloc_count, filepos, rel_filepos,   */  \
+     NULL,       NULL,        0,           0,       0,                 \
+                                                                       \
+  /* line_filepos, userdata, contents, lineno, lineno_count,       */  \
+     0,            NULL,     NULL,     NULL,   0,                      \
+                                                                       \
+  /* entsize, kept_section, moving_line_filepos,                    */ \
+     0,       NULL,          0,                                        \
+                                                                       \
+  /* target_index, used_by_bfd, constructor_chain, owner,          */  \
+     0,            NULL,        NULL,              NULL,               \
+                                                                       \
+  /* symbol,                    symbol_ptr_ptr,                    */  \
+     (struct bfd_symbol *) SYM, &SEC.symbol,                           \
+                                                                       \
+  /* map_head, map_tail                                            */  \
+     @{ NULL @}, @{ NULL @}                                                \
+    @}
+
+ at end example
+
+ at node section prototypes,  , typedef asection, Sections
+ at subsection Section prototypes
+These are the functions exported by the section handling part of BFD.
+
+ at findex bfd_section_list_clear
+ at subsubsection @code{bfd_section_list_clear}
+ at strong{Synopsis}
+ at example
+void bfd_section_list_clear (bfd *);
+ at end example
+ at strong{Description}@*
+Clears the section list, and also resets the section count and
+hash table entries.
+
+ at findex bfd_get_section_by_name
+ at subsubsection @code{bfd_get_section_by_name}
+ at strong{Synopsis}
+ at example
+asection *bfd_get_section_by_name (bfd *abfd, const char *name);
+ at end example
+ at strong{Description}@*
+Return the most recently created section attached to @var{abfd}
+named @var{name}.  Return NULL if no such section exists.
+
+ at findex bfd_get_next_section_by_name
+ at subsubsection @code{bfd_get_next_section_by_name}
+ at strong{Synopsis}
+ at example
+asection *bfd_get_next_section_by_name (asection *sec);
+ at end example
+ at strong{Description}@*
+Given @var{sec} is a section returned by @code{bfd_get_section_by_name},
+return the next most recently created section attached to the same
+BFD with the same name.  Return NULL if no such section exists.
+
+ at findex bfd_get_linker_section
+ at subsubsection @code{bfd_get_linker_section}
+ at strong{Synopsis}
+ at example
+asection *bfd_get_linker_section (bfd *abfd, const char *name);
+ at end example
+ at strong{Description}@*
+Return the linker created section attached to @var{abfd}
+named @var{name}.  Return NULL if no such section exists.
+
+ at findex bfd_get_section_by_name_if
+ at subsubsection @code{bfd_get_section_by_name_if}
+ at strong{Synopsis}
+ at example
+asection *bfd_get_section_by_name_if
+   (bfd *abfd,
+    const char *name,
+    bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj),
+    void *obj);
+ at end example
+ at strong{Description}@*
+Call the provided function @var{func} for each section
+attached to the BFD @var{abfd} whose name matches @var{name},
+passing @var{obj} as an argument. The function will be called
+as if by
+
+ at example
+       func (abfd, the_section, obj);
+ at end example
+
+It returns the first section for which @var{func} returns true,
+otherwise @code{NULL}.
+
+ at findex bfd_get_unique_section_name
+ at subsubsection @code{bfd_get_unique_section_name}
+ at strong{Synopsis}
+ at example
+char *bfd_get_unique_section_name
+   (bfd *abfd, const char *templat, int *count);
+ at end example
+ at strong{Description}@*
+Invent a section name that is unique in @var{abfd} by tacking
+a dot and a digit suffix onto the original @var{templat}.  If
+ at var{count} is non-NULL, then it specifies the first number
+tried as a suffix to generate a unique name.  The value
+pointed to by @var{count} will be incremented in this case.
+
+ at findex bfd_make_section_old_way
+ at subsubsection @code{bfd_make_section_old_way}
+ at strong{Synopsis}
+ at example
+asection *bfd_make_section_old_way (bfd *abfd, const char *name);
+ at end example
+ at strong{Description}@*
+Create a new empty section called @var{name}
+and attach it to the end of the chain of sections for the
+BFD @var{abfd}. An attempt to create a section with a name which
+is already in use returns its pointer without changing the
+section chain.
+
+It has the funny name since this is the way it used to be
+before it was rewritten....
+
+Possible errors are:
+ at itemize @bullet
+
+ at item
+ at code{bfd_error_invalid_operation} -
+If output has already started for this BFD.
+ at item
+ at code{bfd_error_no_memory} -
+If memory allocation fails.
+ at end itemize
+
+ at findex bfd_make_section_anyway_with_flags
+ at subsubsection @code{bfd_make_section_anyway_with_flags}
+ at strong{Synopsis}
+ at example
+asection *bfd_make_section_anyway_with_flags
+   (bfd *abfd, const char *name, flagword flags);
+ at end example
+ at strong{Description}@*
+Create a new empty section called @var{name} and attach it to the end of
+the chain of sections for @var{abfd}.  Create a new section even if there
+is already a section with that name.  Also set the attributes of the
+new section to the value @var{flags}.
+
+Return @code{NULL} and set @code{bfd_error} on error; possible errors are:
+ at itemize @bullet
+
+ at item
+ at code{bfd_error_invalid_operation} - If output has already started for @var{abfd}.
+ at item
+ at code{bfd_error_no_memory} - If memory allocation fails.
+ at end itemize
+
+ at findex bfd_make_section_anyway
+ at subsubsection @code{bfd_make_section_anyway}
+ at strong{Synopsis}
+ at example
+asection *bfd_make_section_anyway (bfd *abfd, const char *name);
+ at end example
+ at strong{Description}@*
+Create a new empty section called @var{name} and attach it to the end of
+the chain of sections for @var{abfd}.  Create a new section even if there
+is already a section with that name.
+
+Return @code{NULL} and set @code{bfd_error} on error; possible errors are:
+ at itemize @bullet
+
+ at item
+ at code{bfd_error_invalid_operation} - If output has already started for @var{abfd}.
+ at item
+ at code{bfd_error_no_memory} - If memory allocation fails.
+ at end itemize
+
+ at findex bfd_make_section_with_flags
+ at subsubsection @code{bfd_make_section_with_flags}
+ at strong{Synopsis}
+ at example
+asection *bfd_make_section_with_flags
+   (bfd *, const char *name, flagword flags);
+ at end example
+ at strong{Description}@*
+Like @code{bfd_make_section_anyway}, but return @code{NULL} (without calling
+bfd_set_error ()) without changing the section chain if there is already a
+section named @var{name}.  Also set the attributes of the new section to
+the value @var{flags}.  If there is an error, return @code{NULL} and set
+ at code{bfd_error}.
+
+ at findex bfd_make_section
+ at subsubsection @code{bfd_make_section}
+ at strong{Synopsis}
+ at example
+asection *bfd_make_section (bfd *, const char *name);
+ at end example
+ at strong{Description}@*
+Like @code{bfd_make_section_anyway}, but return @code{NULL} (without calling
+bfd_set_error ()) without changing the section chain if there is already a
+section named @var{name}.  If there is an error, return @code{NULL} and set
+ at code{bfd_error}.
+
+ at findex bfd_set_section_flags
+ at subsubsection @code{bfd_set_section_flags}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_set_section_flags
+   (bfd *abfd, asection *sec, flagword flags);
+ at end example
+ at strong{Description}@*
+Set the attributes of the section @var{sec} in the BFD
+ at var{abfd} to the value @var{flags}. Return @code{TRUE} on success,
+ at code{FALSE} on error. Possible error returns are:
+
+ at itemize @bullet
+
+ at item
+ at code{bfd_error_invalid_operation} -
+The section cannot have one or more of the attributes
+requested. For example, a .bss section in @code{a.out} may not
+have the @code{SEC_HAS_CONTENTS} field set.
+ at end itemize
+
+ at findex bfd_rename_section
+ at subsubsection @code{bfd_rename_section}
+ at strong{Synopsis}
+ at example
+void bfd_rename_section
+   (bfd *abfd, asection *sec, const char *newname);
+ at end example
+ at strong{Description}@*
+Rename section @var{sec} in @var{abfd} to @var{newname}.
+
+ at findex bfd_map_over_sections
+ at subsubsection @code{bfd_map_over_sections}
+ at strong{Synopsis}
+ at example
+void bfd_map_over_sections
+   (bfd *abfd,
+    void (*func) (bfd *abfd, asection *sect, void *obj),
+    void *obj);
+ at end example
+ at strong{Description}@*
+Call the provided function @var{func} for each section
+attached to the BFD @var{abfd}, passing @var{obj} as an
+argument. The function will be called as if by
+
+ at example
+       func (abfd, the_section, obj);
+ at end example
+
+This is the preferred method for iterating over sections; an
+alternative would be to use a loop:
+
+ at example
+          section *p;
+          for (p = abfd->sections; p != NULL; p = p->next)
+             func (abfd, p, ...)
+ at end example
+
+ at findex bfd_sections_find_if
+ at subsubsection @code{bfd_sections_find_if}
+ at strong{Synopsis}
+ at example
+asection *bfd_sections_find_if
+   (bfd *abfd,
+    bfd_boolean (*operation) (bfd *abfd, asection *sect, void *obj),
+    void *obj);
+ at end example
+ at strong{Description}@*
+Call the provided function @var{operation} for each section
+attached to the BFD @var{abfd}, passing @var{obj} as an
+argument. The function will be called as if by
+
+ at example
+       operation (abfd, the_section, obj);
+ at end example
+
+It returns the first section for which @var{operation} returns true.
+
+ at findex bfd_set_section_size
+ at subsubsection @code{bfd_set_section_size}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_set_section_size
+   (bfd *abfd, asection *sec, bfd_size_type val);
+ at end example
+ at strong{Description}@*
+Set @var{sec} to the size @var{val}. If the operation is
+ok, then @code{TRUE} is returned, else @code{FALSE}.
+
+Possible error returns:
+ at itemize @bullet
+
+ at item
+ at code{bfd_error_invalid_operation} -
+Writing has started to the BFD, so setting the size is invalid.
+ at end itemize
+
+ at findex bfd_set_section_contents
+ at subsubsection @code{bfd_set_section_contents}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_set_section_contents
+   (bfd *abfd, asection *section, const void *data,
+    file_ptr offset, bfd_size_type count);
+ at end example
+ at strong{Description}@*
+Sets the contents of the section @var{section} in BFD
+ at var{abfd} to the data starting in memory at @var{data}. The
+data is written to the output section starting at offset
+ at var{offset} for @var{count} octets.
+
+Normally @code{TRUE} is returned, else @code{FALSE}. Possible error
+returns are:
+ at itemize @bullet
+
+ at item
+ at code{bfd_error_no_contents} -
+The output section does not have the @code{SEC_HAS_CONTENTS}
+attribute, so nothing can be written to it.
+ at item
+and some more too
+ at end itemize
+This routine is front end to the back end function
+ at code{_bfd_set_section_contents}.
+
+ at findex bfd_get_section_contents
+ at subsubsection @code{bfd_get_section_contents}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_get_section_contents
+   (bfd *abfd, asection *section, void *location, file_ptr offset,
+    bfd_size_type count);
+ at end example
+ at strong{Description}@*
+Read data from @var{section} in BFD @var{abfd}
+into memory starting at @var{location}. The data is read at an
+offset of @var{offset} from the start of the input section,
+and is read for @var{count} bytes.
+
+If the contents of a constructor with the @code{SEC_CONSTRUCTOR}
+flag set are requested or if the section does not have the
+ at code{SEC_HAS_CONTENTS} flag set, then the @var{location} is filled
+with zeroes. If no errors occur, @code{TRUE} is returned, else
+ at code{FALSE}.
+
+ at findex bfd_malloc_and_get_section
+ at subsubsection @code{bfd_malloc_and_get_section}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_malloc_and_get_section
+   (bfd *abfd, asection *section, bfd_byte **buf);
+ at end example
+ at strong{Description}@*
+Read all data from @var{section} in BFD @var{abfd}
+into a buffer, *@var{buf}, malloc'd by this function.
+
+ at findex bfd_copy_private_section_data
+ at subsubsection @code{bfd_copy_private_section_data}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_copy_private_section_data
+   (bfd *ibfd, asection *isec, bfd *obfd, asection *osec);
+ at end example
+ at strong{Description}@*
+Copy private section information from @var{isec} in the BFD
+ at var{ibfd} to the section @var{osec} in the BFD @var{obfd}.
+Return @code{TRUE} on success, @code{FALSE} on error.  Possible error
+returns are:
+
+ at itemize @bullet
+
+ at item
+ at code{bfd_error_no_memory} -
+Not enough memory exists to create private data for @var{osec}.
+ at end itemize
+ at example
+#define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \
+     BFD_SEND (obfd, _bfd_copy_private_section_data, \
+               (ibfd, isection, obfd, osection))
+ at end example
+
+ at findex bfd_generic_is_group_section
+ at subsubsection @code{bfd_generic_is_group_section}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_generic_is_group_section (bfd *, const asection *sec);
+ at end example
+ at strong{Description}@*
+Returns TRUE if @var{sec} is a member of a group.
+
+ at findex bfd_generic_discard_group
+ at subsubsection @code{bfd_generic_discard_group}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_generic_discard_group (bfd *abfd, asection *group);
+ at end example
+ at strong{Description}@*
+Remove all members of @var{group} from the output.
 
diff --git a/bfd/doc/syms.texi b/bfd/doc/syms.texi
index 8b13789..3d66380 100644
--- a/bfd/doc/syms.texi
+++ b/bfd/doc/syms.texi
@@ -1 +1,480 @@
+ at section Symbols
+BFD tries to maintain as much symbol information as it can when
+it moves information from file to file. BFD passes information
+to applications though the @code{asymbol} structure. When the
+application requests the symbol table, BFD reads the table in
+the native form and translates parts of it into the internal
+format. To maintain more than the information passed to
+applications, some targets keep some information ``behind the
+scenes'' in a structure only the particular back end knows
+about. For example, the coff back end keeps the original
+symbol table structure as well as the canonical structure when
+a BFD is read in. On output, the coff back end can reconstruct
+the output symbol table so that no information is lost, even
+information unique to coff which BFD doesn't know or
+understand. If a coff symbol table were read, but were written
+through an a.out back end, all the coff specific information
+would be lost. The symbol table of a BFD
+is not necessarily read in until a canonicalize request is
+made. Then the BFD back end fills in a table provided by the
+application with pointers to the canonical information.  To
+output symbols, the application provides BFD with a table of
+pointers to pointers to @code{asymbol}s. This allows applications
+like the linker to output a symbol as it was read, since the ``behind
+the scenes'' information will be still available.
+ at menu
+* Reading Symbols::
+* Writing Symbols::
+* Mini Symbols::
+* typedef asymbol::
+* symbol handling functions::
+ at end menu
+
+ at node Reading Symbols, Writing Symbols, Symbols, Symbols
+ at subsection Reading symbols
+There are two stages to reading a symbol table from a BFD:
+allocating storage, and the actual reading process. This is an
+excerpt from an application which reads the symbol table:
+
+ at example
+         long storage_needed;
+         asymbol **symbol_table;
+         long number_of_symbols;
+         long i;
+
+         storage_needed = bfd_get_symtab_upper_bound (abfd);
+
+         if (storage_needed < 0)
+           FAIL
+
+         if (storage_needed == 0)
+           return;
+         
+         symbol_table = xmalloc (storage_needed);
+           ...
+         number_of_symbols =
+            bfd_canonicalize_symtab (abfd, symbol_table);
+
+         if (number_of_symbols < 0)
+           FAIL
+
+         for (i = 0; i < number_of_symbols; i++)
+           process_symbol (symbol_table[i]);
+ at end example
+
+All storage for the symbols themselves is in an objalloc
+connected to the BFD; it is freed when the BFD is closed.
+
+ at node Writing Symbols, Mini Symbols, Reading Symbols, Symbols
+ at subsection Writing symbols
+Writing of a symbol table is automatic when a BFD open for
+writing is closed. The application attaches a vector of
+pointers to pointers to symbols to the BFD being written, and
+fills in the symbol count. The close and cleanup code reads
+through the table provided and performs all the necessary
+operations. The BFD output code must always be provided with an
+``owned'' symbol: one which has come from another BFD, or one
+which has been created using @code{bfd_make_empty_symbol}.  Here is an
+example showing the creation of a symbol table with only one element:
+
+ at example
+       #include "sysdep.h"
+       #include "bfd.h"
+       int main (void)
+       @{
+         bfd *abfd;
+         asymbol *ptrs[2];
+         asymbol *new;
+
+         abfd = bfd_openw ("foo","a.out-sunos-big");
+         bfd_set_format (abfd, bfd_object);
+         new = bfd_make_empty_symbol (abfd);
+         new->name = "dummy_symbol";
+         new->section = bfd_make_section_old_way (abfd, ".text");
+         new->flags = BSF_GLOBAL;
+         new->value = 0x12345;
+
+         ptrs[0] = new;
+         ptrs[1] = 0;
+
+         bfd_set_symtab (abfd, ptrs, 1);
+         bfd_close (abfd);
+         return 0;
+       @}
+
+       ./makesym
+       nm foo
+       00012345 A dummy_symbol
+ at end example
+
+Many formats cannot represent arbitrary symbol information; for
+instance, the @code{a.out} object format does not allow an
+arbitrary number of sections. A symbol pointing to a section
+which is not one  of @code{.text}, @code{.data} or @code{.bss} cannot
+be described.
+
+ at node Mini Symbols, typedef asymbol, Writing Symbols, Symbols
+ at subsection Mini Symbols
+Mini symbols provide read-only access to the symbol table.
+They use less memory space, but require more time to access.
+They can be useful for tools like nm or objdump, which may
+have to handle symbol tables of extremely large executables.
+
+The @code{bfd_read_minisymbols} function will read the symbols
+into memory in an internal form.  It will return a @code{void *}
+pointer to a block of memory, a symbol count, and the size of
+each symbol.  The pointer is allocated using @code{malloc}, and
+should be freed by the caller when it is no longer needed.
+
+The function @code{bfd_minisymbol_to_symbol} will take a pointer
+to a minisymbol, and a pointer to a structure returned by
+ at code{bfd_make_empty_symbol}, and return a @code{asymbol} structure.
+The return value may or may not be the same as the value from
+ at code{bfd_make_empty_symbol} which was passed in.
+
+
+ at node typedef asymbol, symbol handling functions, Mini Symbols, Symbols
+ at subsection typedef asymbol
+An @code{asymbol} has the form:
+
+
+ at example
+
+typedef struct bfd_symbol
+@{
+  /* A pointer to the BFD which owns the symbol. This information
+     is necessary so that a back end can work out what additional
+     information (invisible to the application writer) is carried
+     with the symbol.
+
+     This field is *almost* redundant, since you can use section->owner
+     instead, except that some symbols point to the global sections
+     bfd_@{abs,com,und@}_section.  This could be fixed by making
+     these globals be per-bfd (or per-target-flavor).  FIXME.  */
+  struct bfd *the_bfd; /* Use bfd_asymbol_bfd(sym) to access this field.  */
+
+  /* The text of the symbol. The name is left alone, and not copied; the
+     application may not alter it.  */
+  const char *name;
+
+  /* The value of the symbol.  This really should be a union of a
+     numeric value with a pointer, since some flags indicate that
+     a pointer to another symbol is stored here.  */
+  symvalue value;
+
+  /* Attributes of a symbol.  */
+#define BSF_NO_FLAGS           0x00
+
+  /* The symbol has local scope; @code{static} in @code{C}. The value
+     is the offset into the section of the data.  */
+#define BSF_LOCAL              (1 << 0)
+
+  /* The symbol has global scope; initialized data in @code{C}. The
+     value is the offset into the section of the data.  */
+#define BSF_GLOBAL             (1 << 1)
+
+  /* The symbol has global scope and is exported. The value is
+     the offset into the section of the data.  */
+#define BSF_EXPORT     BSF_GLOBAL /* No real difference.  */
+
+  /* A normal C symbol would be one of:
+     @code{BSF_LOCAL}, @code{BSF_COMMON},  @code{BSF_UNDEFINED} or
+     @code{BSF_GLOBAL}.  */
+
+  /* The symbol is a debugging record. The value has an arbitrary
+     meaning, unless BSF_DEBUGGING_RELOC is also set.  */
+#define BSF_DEBUGGING          (1 << 2)
+
+  /* The symbol denotes a function entry point.  Used in ELF,
+     perhaps others someday.  */
+#define BSF_FUNCTION           (1 << 3)
+
+  /* Used by the linker.  */
+#define BSF_KEEP               (1 << 5)
+#define BSF_KEEP_G             (1 << 6)
+
+  /* A weak global symbol, overridable without warnings by
+     a regular global symbol of the same name.  */
+#define BSF_WEAK               (1 << 7)
+
+  /* This symbol was created to point to a section, e.g. ELF's
+     STT_SECTION symbols.  */
+#define BSF_SECTION_SYM        (1 << 8)
+
+  /* The symbol used to be a common symbol, but now it is
+     allocated.  */
+#define BSF_OLD_COMMON         (1 << 9)
+
+  /* In some files the type of a symbol sometimes alters its
+     location in an output file - ie in coff a @code{ISFCN} symbol
+     which is also @code{C_EXT} symbol appears where it was
+     declared and not at the end of a section.  This bit is set
+     by the target BFD part to convey this information.  */
+#define BSF_NOT_AT_END         (1 << 10)
+
+  /* Signal that the symbol is the label of constructor section.  */
+#define BSF_CONSTRUCTOR        (1 << 11)
+
+  /* Signal that the symbol is a warning symbol.  The name is a
+     warning.  The name of the next symbol is the one to warn about;
+     if a reference is made to a symbol with the same name as the next
+     symbol, a warning is issued by the linker.  */
+#define BSF_WARNING            (1 << 12)
+
+  /* Signal that the symbol is indirect.  This symbol is an indirect
+     pointer to the symbol with the same name as the next symbol.  */
+#define BSF_INDIRECT           (1 << 13)
+
+  /* BSF_FILE marks symbols that contain a file name.  This is used
+     for ELF STT_FILE symbols.  */
+#define BSF_FILE               (1 << 14)
+
+  /* Symbol is from dynamic linking information.  */
+#define BSF_DYNAMIC            (1 << 15)
+
+  /* The symbol denotes a data object.  Used in ELF, and perhaps
+     others someday.  */
+#define BSF_OBJECT             (1 << 16)
+
+  /* This symbol is a debugging symbol.  The value is the offset
+     into the section of the data.  BSF_DEBUGGING should be set
+     as well.  */
+#define BSF_DEBUGGING_RELOC    (1 << 17)
+
+  /* This symbol is thread local.  Used in ELF.  */
+#define BSF_THREAD_LOCAL       (1 << 18)
+
+  /* This symbol represents a complex relocation expression,
+     with the expression tree serialized in the symbol name.  */
+#define BSF_RELC               (1 << 19)
+
+  /* This symbol represents a signed complex relocation expression,
+     with the expression tree serialized in the symbol name.  */
+#define BSF_SRELC              (1 << 20)
+
+  /* This symbol was created by bfd_get_synthetic_symtab.  */
+#define BSF_SYNTHETIC          (1 << 21)
+
+  /* This symbol is an indirect code object.  Unrelated to BSF_INDIRECT.
+     The dynamic linker will compute the value of this symbol by
+     calling the function that it points to.  BSF_FUNCTION must
+     also be also set.  */
+#define BSF_GNU_INDIRECT_FUNCTION (1 << 22)
+  /* This symbol is a globally unique data object.  The dynamic linker
+     will make sure that in the entire process there is just one symbol
+     with this name and type in use.  BSF_OBJECT must also be set.  */
+#define BSF_GNU_UNIQUE         (1 << 23)
+
+  flagword flags;
+
+  /* A pointer to the section to which this symbol is
+     relative.  This will always be non NULL, there are special
+     sections for undefined and absolute symbols.  */
+  struct bfd_section *section;
+
+  /* Back end special data.  */
+  union
+    @{
+      void *p;
+      bfd_vma i;
+    @}
+  udata;
+@}
+asymbol;
+
+ at end example
+
+ at node symbol handling functions,  , typedef asymbol, Symbols
+ at subsection Symbol handling functions
+
+
+ at findex bfd_get_symtab_upper_bound
+ at subsubsection @code{bfd_get_symtab_upper_bound}
+ at strong{Description}@*
+Return the number of bytes required to store a vector of pointers
+to @code{asymbols} for all the symbols in the BFD @var{abfd},
+including a terminal NULL pointer. If there are no symbols in
+the BFD, then return 0.  If an error occurs, return -1.
+ at example
+#define bfd_get_symtab_upper_bound(abfd) \
+     BFD_SEND (abfd, _bfd_get_symtab_upper_bound, (abfd))
+
+ at end example
+
+ at findex bfd_is_local_label
+ at subsubsection @code{bfd_is_local_label}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_is_local_label (bfd *abfd, asymbol *sym);
+ at end example
+ at strong{Description}@*
+Return TRUE if the given symbol @var{sym} in the BFD @var{abfd} is
+a compiler generated local label, else return FALSE.
+
+ at findex bfd_is_local_label_name
+ at subsubsection @code{bfd_is_local_label_name}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_is_local_label_name (bfd *abfd, const char *name);
+ at end example
+ at strong{Description}@*
+Return TRUE if a symbol with the name @var{name} in the BFD
+ at var{abfd} is a compiler generated local label, else return
+FALSE.  This just checks whether the name has the form of a
+local label.
+ at example
+#define bfd_is_local_label_name(abfd, name) \
+  BFD_SEND (abfd, _bfd_is_local_label_name, (abfd, name))
+
+ at end example
+
+ at findex bfd_is_target_special_symbol
+ at subsubsection @code{bfd_is_target_special_symbol}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_is_target_special_symbol (bfd *abfd, asymbol *sym);
+ at end example
+ at strong{Description}@*
+Return TRUE iff a symbol @var{sym} in the BFD @var{abfd} is something
+special to the particular target represented by the BFD.  Such symbols
+should normally not be mentioned to the user.
+ at example
+#define bfd_is_target_special_symbol(abfd, sym) \
+  BFD_SEND (abfd, _bfd_is_target_special_symbol, (abfd, sym))
+
+ at end example
+
+ at findex bfd_canonicalize_symtab
+ at subsubsection @code{bfd_canonicalize_symtab}
+ at strong{Description}@*
+Read the symbols from the BFD @var{abfd}, and fills in
+the vector @var{location} with pointers to the symbols and
+a trailing NULL.
+Return the actual number of symbol pointers, not
+including the NULL.
+ at example
+#define bfd_canonicalize_symtab(abfd, location) \
+  BFD_SEND (abfd, _bfd_canonicalize_symtab, (abfd, location))
+
+ at end example
+
+ at findex bfd_set_symtab
+ at subsubsection @code{bfd_set_symtab}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_set_symtab
+   (bfd *abfd, asymbol **location, unsigned int count);
+ at end example
+ at strong{Description}@*
+Arrange that when the output BFD @var{abfd} is closed,
+the table @var{location} of @var{count} pointers to symbols
+will be written.
+
+ at findex bfd_print_symbol_vandf
+ at subsubsection @code{bfd_print_symbol_vandf}
+ at strong{Synopsis}
+ at example
+void bfd_print_symbol_vandf (bfd *abfd, void *file, asymbol *symbol);
+ at end example
+ at strong{Description}@*
+Print the value and flags of the @var{symbol} supplied to the
+stream @var{file}.
+
+ at findex bfd_make_empty_symbol
+ at subsubsection @code{bfd_make_empty_symbol}
+ at strong{Description}@*
+Create a new @code{asymbol} structure for the BFD @var{abfd}
+and return a pointer to it.
+
+This routine is necessary because each back end has private
+information surrounding the @code{asymbol}. Building your own
+ at code{asymbol} and pointing to it will not create the private
+information, and will cause problems later on.
+ at example
+#define bfd_make_empty_symbol(abfd) \
+  BFD_SEND (abfd, _bfd_make_empty_symbol, (abfd))
+
+ at end example
+
+ at findex _bfd_generic_make_empty_symbol
+ at subsubsection @code{_bfd_generic_make_empty_symbol}
+ at strong{Synopsis}
+ at example
+asymbol *_bfd_generic_make_empty_symbol (bfd *);
+ at end example
+ at strong{Description}@*
+Create a new @code{asymbol} structure for the BFD @var{abfd}
+and return a pointer to it.  Used by core file routines,
+binary back-end and anywhere else where no private info
+is needed.
+
+ at findex bfd_make_debug_symbol
+ at subsubsection @code{bfd_make_debug_symbol}
+ at strong{Description}@*
+Create a new @code{asymbol} structure for the BFD @var{abfd},
+to be used as a debugging symbol.  Further details of its use have
+yet to be worked out.
+ at example
+#define bfd_make_debug_symbol(abfd,ptr,size) \
+  BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd, ptr, size))
+
+ at end example
+
+ at findex bfd_decode_symclass
+ at subsubsection @code{bfd_decode_symclass}
+ at strong{Description}@*
+Return a character corresponding to the symbol
+class of @var{symbol}, or '?' for an unknown class.
+
+ at strong{Synopsis}
+ at example
+int bfd_decode_symclass (asymbol *symbol);
+ at end example
+ at findex bfd_is_undefined_symclass
+ at subsubsection @code{bfd_is_undefined_symclass}
+ at strong{Description}@*
+Returns non-zero if the class symbol returned by
+bfd_decode_symclass represents an undefined symbol.
+Returns zero otherwise.
+
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_is_undefined_symclass (int symclass);
+ at end example
+ at findex bfd_symbol_info
+ at subsubsection @code{bfd_symbol_info}
+ at strong{Description}@*
+Fill in the basic info about symbol that nm needs.
+Additional info may be added by the back-ends after
+calling this function.
+
+ at strong{Synopsis}
+ at example
+void bfd_symbol_info (asymbol *symbol, symbol_info *ret);
+ at end example
+ at findex bfd_copy_private_symbol_data
+ at subsubsection @code{bfd_copy_private_symbol_data}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_copy_private_symbol_data
+   (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym);
+ at end example
+ at strong{Description}@*
+Copy private symbol information from @var{isym} in the BFD
+ at var{ibfd} to the symbol @var{osym} in the BFD @var{obfd}.
+Return @code{TRUE} on success, @code{FALSE} on error.  Possible error
+returns are:
+
+ at itemize @bullet
+
+ at item
+ at code{bfd_error_no_memory} -
+Not enough memory exists to create private data for @var{osec}.
+ at end itemize
+ at example
+#define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \
+  BFD_SEND (obfd, _bfd_copy_private_symbol_data, \
+            (ibfd, isymbol, obfd, osymbol))
+
+ at end example
 
diff --git a/bfd/doc/targets.texi b/bfd/doc/targets.texi
index 8b13789..e56e560 100644
--- a/bfd/doc/targets.texi
+++ b/bfd/doc/targets.texi
@@ -1 +1,617 @@
+ at section Targets
+
+
+ at strong{Description}@*
+Each port of BFD to a different machine requires the creation
+of a target back end. All the back end provides to the root
+part of BFD is a structure containing pointers to functions
+which perform certain low level operations on files. BFD
+translates the applications's requests through a pointer into
+calls to the back end routines.
+
+When a file is opened with @code{bfd_openr}, its format and
+target are unknown. BFD uses various mechanisms to determine
+how to interpret the file. The operations performed are:
+
+ at itemize @bullet
+
+ at item
+Create a BFD by calling the internal routine
+ at code{_bfd_new_bfd}, then call @code{bfd_find_target} with the
+target string supplied to @code{bfd_openr} and the new BFD pointer.
+
+ at item
+If a null target string was provided to @code{bfd_find_target},
+look up the environment variable @code{GNUTARGET} and use
+that as the target string.
+
+ at item
+If the target string is still @code{NULL}, or the target string is
+ at code{default}, then use the first item in the target vector
+as the target type, and set @code{target_defaulted} in the BFD to
+cause @code{bfd_check_format} to loop through all the targets.
+ at xref{bfd_target}.  @xref{Formats}.
+
+ at item
+Otherwise, inspect the elements in the target vector
+one by one, until a match on target name is found. When found,
+use it.
+
+ at item
+Otherwise return the error @code{bfd_error_invalid_target} to
+ at code{bfd_openr}.
+
+ at item
+ at code{bfd_openr} attempts to open the file using
+ at code{bfd_open_file}, and returns the BFD.
+ at end itemize
+Once the BFD has been opened and the target selected, the file
+format may be determined. This is done by calling
+ at code{bfd_check_format} on the BFD with a suggested format.
+If @code{target_defaulted} has been set, each possible target
+type is tried to see if it recognizes the specified format.
+ at code{bfd_check_format} returns @code{TRUE} when the caller guesses right.
+ at menu
+* bfd_target::
+ at end menu
+
+ at node bfd_target,  , Targets, Targets
+
+ at subsection bfd_target
+
+
+ at strong{Description}@*
+This structure contains everything that BFD knows about a
+target. It includes things like its byte order, name, and which
+routines to call to do various operations.
+
+Every BFD points to a target structure with its @code{xvec}
+member.
+
+The macros below are used to dispatch to functions through the
+ at code{bfd_target} vector. They are used in a number of macros further
+down in @file{bfd.h}, and are also used when calling various
+routines by hand inside the BFD implementation.  The @var{arglist}
+argument must be parenthesized; it contains all the arguments
+to the called function.
+
+They make the documentation (more) unpleasant to read, so if
+someone wants to fix this and not break the above, please do.
+ at example
+#define BFD_SEND(bfd, message, arglist) \
+  ((*((bfd)->xvec->message)) arglist)
+
+#ifdef DEBUG_BFD_SEND
+#undef BFD_SEND
+#define BFD_SEND(bfd, message, arglist) \
+  (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \
+    ((*((bfd)->xvec->message)) arglist) : \
+    (bfd_assert (__FILE__,__LINE__), NULL))
+#endif
+ at end example
+For operations which index on the BFD format:
+ at example
+#define BFD_SEND_FMT(bfd, message, arglist) \
+  (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist)
+
+#ifdef DEBUG_BFD_SEND
+#undef BFD_SEND_FMT
+#define BFD_SEND_FMT(bfd, message, arglist) \
+  (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \
+   (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) : \
+   (bfd_assert (__FILE__,__LINE__), NULL))
+#endif
+
+ at end example
+This is the structure which defines the type of BFD this is.  The
+ at code{xvec} member of the struct @code{bfd} itself points here.  Each
+module that implements access to a different target under BFD,
+defines one of these.
+
+FIXME, these names should be rationalised with the names of
+the entry points which call them. Too bad we can't have one
+macro to define them both!
+ at example
+enum bfd_flavour
+@{
+  bfd_target_unknown_flavour,
+  bfd_target_aout_flavour,
+  bfd_target_coff_flavour,
+  bfd_target_ecoff_flavour,
+  bfd_target_xcoff_flavour,
+  bfd_target_elf_flavour,
+  bfd_target_ieee_flavour,
+  bfd_target_nlm_flavour,
+  bfd_target_oasys_flavour,
+  bfd_target_tekhex_flavour,
+  bfd_target_srec_flavour,
+  bfd_target_verilog_flavour,
+  bfd_target_ihex_flavour,
+  bfd_target_som_flavour,
+  bfd_target_os9k_flavour,
+  bfd_target_versados_flavour,
+  bfd_target_msdos_flavour,
+  bfd_target_ovax_flavour,
+  bfd_target_evax_flavour,
+  bfd_target_mmo_flavour,
+  bfd_target_mach_o_flavour,
+  bfd_target_pef_flavour,
+  bfd_target_pef_xlib_flavour,
+  bfd_target_sym_flavour
+@};
+
+enum bfd_endian @{ BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN @};
+
+/* Forward declaration.  */
+typedef struct bfd_link_info _bfd_link_info;
+
+/* Forward declaration.  */
+typedef struct flag_info flag_info;
+
+typedef struct bfd_target
+@{
+  /* Identifies the kind of target, e.g., SunOS4, Ultrix, etc.  */
+  char *name;
+
+ /* The "flavour" of a back end is a general indication about
+    the contents of a file.  */
+  enum bfd_flavour flavour;
+
+  /* The order of bytes within the data area of a file.  */
+  enum bfd_endian byteorder;
+
+ /* The order of bytes within the header parts of a file.  */
+  enum bfd_endian header_byteorder;
+
+  /* A mask of all the flags which an executable may have set -
+     from the set @code{BFD_NO_FLAGS}, @code{HAS_RELOC}, ... at code{D_PAGED}.  */
+  flagword object_flags;
+
+ /* A mask of all the flags which a section may have set - from
+    the set @code{SEC_NO_FLAGS}, @code{SEC_ALLOC}, ... at code{SET_NEVER_LOAD}.  */
+  flagword section_flags;
+
+ /* The character normally found at the front of a symbol.
+    (if any), perhaps `_'.  */
+  char symbol_leading_char;
+
+ /* The pad character for file names within an archive header.  */
+  char ar_pad_char;
+
+  /* The maximum number of characters in an archive header.  */
+  unsigned char ar_max_namelen;
+
+  /* How well this target matches, used to select between various
+     possible targets when more than one target matches.  */
+  unsigned char match_priority;
+
+  /* Entries for byte swapping for data. These are different from the
+     other entry points, since they don't take a BFD as the first argument.
+     Certain other handlers could do the same.  */
+  bfd_uint64_t   (*bfd_getx64) (const void *);
+  bfd_int64_t    (*bfd_getx_signed_64) (const void *);
+  void           (*bfd_putx64) (bfd_uint64_t, void *);
+  bfd_vma        (*bfd_getx32) (const void *);
+  bfd_signed_vma (*bfd_getx_signed_32) (const void *);
+  void           (*bfd_putx32) (bfd_vma, void *);
+  bfd_vma        (*bfd_getx16) (const void *);
+  bfd_signed_vma (*bfd_getx_signed_16) (const void *);
+  void           (*bfd_putx16) (bfd_vma, void *);
+
+  /* Byte swapping for the headers.  */
+  bfd_uint64_t   (*bfd_h_getx64) (const void *);
+  bfd_int64_t    (*bfd_h_getx_signed_64) (const void *);
+  void           (*bfd_h_putx64) (bfd_uint64_t, void *);
+  bfd_vma        (*bfd_h_getx32) (const void *);
+  bfd_signed_vma (*bfd_h_getx_signed_32) (const void *);
+  void           (*bfd_h_putx32) (bfd_vma, void *);
+  bfd_vma        (*bfd_h_getx16) (const void *);
+  bfd_signed_vma (*bfd_h_getx_signed_16) (const void *);
+  void           (*bfd_h_putx16) (bfd_vma, void *);
+
+  /* Format dependent routines: these are vectors of entry points
+     within the target vector structure, one for each format to check.  */
+
+  /* Check the format of a file being read.  Return a @code{bfd_target *} or zero.  */
+  const struct bfd_target *(*_bfd_check_format[bfd_type_end]) (bfd *);
+
+  /* Set the format of a file being written.  */
+  bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *);
+
+  /* Write cached information into a file being written, at @code{bfd_close}.  */
+  bfd_boolean (*_bfd_write_contents[bfd_type_end]) (bfd *);
+
+ at end example
+The general target vector.  These vectors are initialized using the
+BFD_JUMP_TABLE macros.
+ at example
+
+  /* Generic entry points.  */
+#define BFD_JUMP_TABLE_GENERIC(NAME) \
+  NAME##_close_and_cleanup, \
+  NAME##_bfd_free_cached_info, \
+  NAME##_new_section_hook, \
+  NAME##_get_section_contents, \
+  NAME##_get_section_contents_in_window
+
+  /* Called when the BFD is being closed to do any necessary cleanup.  */
+  bfd_boolean (*_close_and_cleanup) (bfd *);
+  /* Ask the BFD to free all cached information.  */
+  bfd_boolean (*_bfd_free_cached_info) (bfd *);
+  /* Called when a new section is created.  */
+  bfd_boolean (*_new_section_hook) (bfd *, sec_ptr);
+  /* Read the contents of a section.  */
+  bfd_boolean (*_bfd_get_section_contents)
+    (bfd *, sec_ptr, void *, file_ptr, bfd_size_type);
+  bfd_boolean (*_bfd_get_section_contents_in_window)
+    (bfd *, sec_ptr, bfd_window *, file_ptr, bfd_size_type);
+
+  /* Entry points to copy private data.  */
+#define BFD_JUMP_TABLE_COPY(NAME) \
+  NAME##_bfd_copy_private_bfd_data, \
+  NAME##_bfd_merge_private_bfd_data, \
+  _bfd_generic_init_private_section_data, \
+  NAME##_bfd_copy_private_section_data, \
+  NAME##_bfd_copy_private_symbol_data, \
+  NAME##_bfd_copy_private_header_data, \
+  NAME##_bfd_set_private_flags, \
+  NAME##_bfd_print_private_bfd_data
+
+  /* Called to copy BFD general private data from one object file
+     to another.  */
+  bfd_boolean (*_bfd_copy_private_bfd_data) (bfd *, bfd *);
+  /* Called to merge BFD general private data from one object file
+     to a common output file when linking.  */
+  bfd_boolean (*_bfd_merge_private_bfd_data) (bfd *, bfd *);
+  /* Called to initialize BFD private section data from one object file
+     to another.  */
+#define bfd_init_private_section_data(ibfd, isec, obfd, osec, link_info) \
+  BFD_SEND (obfd, _bfd_init_private_section_data, (ibfd, isec, obfd, osec, link_info))
+  bfd_boolean (*_bfd_init_private_section_data)
+    (bfd *, sec_ptr, bfd *, sec_ptr, struct bfd_link_info *);
+  /* Called to copy BFD private section data from one object file
+     to another.  */
+  bfd_boolean (*_bfd_copy_private_section_data)
+    (bfd *, sec_ptr, bfd *, sec_ptr);
+  /* Called to copy BFD private symbol data from one symbol
+     to another.  */
+  bfd_boolean (*_bfd_copy_private_symbol_data)
+    (bfd *, asymbol *, bfd *, asymbol *);
+  /* Called to copy BFD private header data from one object file
+     to another.  */
+  bfd_boolean (*_bfd_copy_private_header_data)
+    (bfd *, bfd *);
+  /* Called to set private backend flags.  */
+  bfd_boolean (*_bfd_set_private_flags) (bfd *, flagword);
+
+  /* Called to print private BFD data.  */
+  bfd_boolean (*_bfd_print_private_bfd_data) (bfd *, void *);
+
+  /* Core file entry points.  */
+#define BFD_JUMP_TABLE_CORE(NAME) \
+  NAME##_core_file_failing_command, \
+  NAME##_core_file_failing_signal, \
+  NAME##_core_file_matches_executable_p, \
+  NAME##_core_file_pid
+
+  char *      (*_core_file_failing_command) (bfd *);
+  int         (*_core_file_failing_signal) (bfd *);
+  bfd_boolean (*_core_file_matches_executable_p) (bfd *, bfd *);
+  int         (*_core_file_pid) (bfd *);
+
+  /* Archive entry points.  */
+#define BFD_JUMP_TABLE_ARCHIVE(NAME) \
+  NAME##_slurp_armap, \
+  NAME##_slurp_extended_name_table, \
+  NAME##_construct_extended_name_table, \
+  NAME##_truncate_arname, \
+  NAME##_write_armap, \
+  NAME##_read_ar_hdr, \
+  NAME##_write_ar_hdr, \
+  NAME##_openr_next_archived_file, \
+  NAME##_get_elt_at_index, \
+  NAME##_generic_stat_arch_elt, \
+  NAME##_update_armap_timestamp
+
+  bfd_boolean (*_bfd_slurp_armap) (bfd *);
+  bfd_boolean (*_bfd_slurp_extended_name_table) (bfd *);
+  bfd_boolean (*_bfd_construct_extended_name_table)
+    (bfd *, char **, bfd_size_type *, const char **);
+  void        (*_bfd_truncate_arname) (bfd *, const char *, char *);
+  bfd_boolean (*write_armap)
+    (bfd *, unsigned int, struct orl *, unsigned int, int);
+  void *      (*_bfd_read_ar_hdr_fn) (bfd *);
+  bfd_boolean (*_bfd_write_ar_hdr_fn) (bfd *, bfd *);
+  bfd *       (*openr_next_archived_file) (bfd *, bfd *);
+#define bfd_get_elt_at_index(b,i) BFD_SEND (b, _bfd_get_elt_at_index, (b,i))
+  bfd *       (*_bfd_get_elt_at_index) (bfd *, symindex);
+  int         (*_bfd_stat_arch_elt) (bfd *, struct stat *);
+  bfd_boolean (*_bfd_update_armap_timestamp) (bfd *);
+
+  /* Entry points used for symbols.  */
+#define BFD_JUMP_TABLE_SYMBOLS(NAME) \
+  NAME##_get_symtab_upper_bound, \
+  NAME##_canonicalize_symtab, \
+  NAME##_make_empty_symbol, \
+  NAME##_print_symbol, \
+  NAME##_get_symbol_info, \
+  NAME##_bfd_is_local_label_name, \
+  NAME##_bfd_is_target_special_symbol, \
+  NAME##_get_lineno, \
+  NAME##_find_nearest_line, \
+  _bfd_generic_find_line, \
+  NAME##_find_inliner_info, \
+  NAME##_bfd_make_debug_symbol, \
+  NAME##_read_minisymbols, \
+  NAME##_minisymbol_to_symbol
+
+  long        (*_bfd_get_symtab_upper_bound) (bfd *);
+  long        (*_bfd_canonicalize_symtab)
+    (bfd *, struct bfd_symbol **);
+  struct bfd_symbol *
+              (*_bfd_make_empty_symbol) (bfd *);
+  void        (*_bfd_print_symbol)
+    (bfd *, void *, struct bfd_symbol *, bfd_print_symbol_type);
+#define bfd_print_symbol(b,p,s,e) BFD_SEND (b, _bfd_print_symbol, (b,p,s,e))
+  void        (*_bfd_get_symbol_info)
+    (bfd *, struct bfd_symbol *, symbol_info *);
+#define bfd_get_symbol_info(b,p,e) BFD_SEND (b, _bfd_get_symbol_info, (b,p,e))
+  bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *);
+  bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *);
+  alent *     (*_get_lineno) (bfd *, struct bfd_symbol *);
+  bfd_boolean (*_bfd_find_nearest_line)
+    (bfd *, struct bfd_section *, struct bfd_symbol **, bfd_vma,
+     const char **, const char **, unsigned int *);
+  bfd_boolean (*_bfd_find_line)
+    (bfd *, struct bfd_symbol **, struct bfd_symbol *,
+     const char **, unsigned int *);
+  bfd_boolean (*_bfd_find_inliner_info)
+    (bfd *, const char **, const char **, unsigned int *);
+ /* Back-door to allow format-aware applications to create debug symbols
+    while using BFD for everything else.  Currently used by the assembler
+    when creating COFF files.  */
+  asymbol *   (*_bfd_make_debug_symbol)
+    (bfd *, void *, unsigned long size);
+#define bfd_read_minisymbols(b, d, m, s) \
+  BFD_SEND (b, _read_minisymbols, (b, d, m, s))
+  long        (*_read_minisymbols)
+    (bfd *, bfd_boolean, void **, unsigned int *);
+#define bfd_minisymbol_to_symbol(b, d, m, f) \
+  BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f))
+  asymbol *   (*_minisymbol_to_symbol)
+    (bfd *, bfd_boolean, const void *, asymbol *);
+
+  /* Routines for relocs.  */
+#define BFD_JUMP_TABLE_RELOCS(NAME) \
+  NAME##_get_reloc_upper_bound, \
+  NAME##_canonicalize_reloc, \
+  NAME##_bfd_reloc_type_lookup, \
+  NAME##_bfd_reloc_name_lookup
+
+  long        (*_get_reloc_upper_bound) (bfd *, sec_ptr);
+  long        (*_bfd_canonicalize_reloc)
+    (bfd *, sec_ptr, arelent **, struct bfd_symbol **);
+  /* See documentation on reloc types.  */
+  reloc_howto_type *
+              (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
+  reloc_howto_type *
+              (*reloc_name_lookup) (bfd *, const char *);
+
+
+  /* Routines used when writing an object file.  */
+#define BFD_JUMP_TABLE_WRITE(NAME) \
+  NAME##_set_arch_mach, \
+  NAME##_set_section_contents
+
+  bfd_boolean (*_bfd_set_arch_mach)
+    (bfd *, enum bfd_architecture, unsigned long);
+  bfd_boolean (*_bfd_set_section_contents)
+    (bfd *, sec_ptr, const void *, file_ptr, bfd_size_type);
+
+  /* Routines used by the linker.  */
+#define BFD_JUMP_TABLE_LINK(NAME) \
+  NAME##_sizeof_headers, \
+  NAME##_bfd_get_relocated_section_contents, \
+  NAME##_bfd_relax_section, \
+  NAME##_bfd_link_hash_table_create, \
+  NAME##_bfd_link_hash_table_free, \
+  NAME##_bfd_link_add_symbols, \
+  NAME##_bfd_link_just_syms, \
+  NAME##_bfd_copy_link_hash_symbol_type, \
+  NAME##_bfd_final_link, \
+  NAME##_bfd_link_split_section, \
+  NAME##_bfd_gc_sections, \
+  NAME##_bfd_lookup_section_flags, \
+  NAME##_bfd_merge_sections, \
+  NAME##_bfd_is_group_section, \
+  NAME##_bfd_discard_group, \
+  NAME##_section_already_linked, \
+  NAME##_bfd_define_common_symbol
+
+  int         (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *);
+  bfd_byte *  (*_bfd_get_relocated_section_contents)
+    (bfd *, struct bfd_link_info *, struct bfd_link_order *,
+     bfd_byte *, bfd_boolean, struct bfd_symbol **);
+
+  bfd_boolean (*_bfd_relax_section)
+    (bfd *, struct bfd_section *, struct bfd_link_info *, bfd_boolean *);
+
+  /* Create a hash table for the linker.  Different backends store
+     different information in this table.  */
+  struct bfd_link_hash_table *
+              (*_bfd_link_hash_table_create) (bfd *);
+
+  /* Release the memory associated with the linker hash table.  */
+  void        (*_bfd_link_hash_table_free) (struct bfd_link_hash_table *);
+
+  /* Add symbols from this object file into the hash table.  */
+  bfd_boolean (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *);
+
+  /* Indicate that we are only retrieving symbol values from this section.  */
+  void        (*_bfd_link_just_syms) (asection *, struct bfd_link_info *);
+
+  /* Copy the symbol type of a linker hash table entry.  */
+#define bfd_copy_link_hash_symbol_type(b, t, f) \
+  BFD_SEND (b, _bfd_copy_link_hash_symbol_type, (b, t, f))
+  void (*_bfd_copy_link_hash_symbol_type)
+    (bfd *, struct bfd_link_hash_entry *, struct bfd_link_hash_entry *);
+
+  /* Do a link based on the link_order structures attached to each
+     section of the BFD.  */
+  bfd_boolean (*_bfd_final_link) (bfd *, struct bfd_link_info *);
+
+  /* Should this section be split up into smaller pieces during linking.  */
+  bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *);
+
+  /* Remove sections that are not referenced from the output.  */
+  bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *);
+
+  /* Sets the bitmask of allowed and disallowed section flags.  */
+  bfd_boolean (*_bfd_lookup_section_flags) (struct bfd_link_info *,
+                                            struct flag_info *,
+                                            asection *);
+
+  /* Attempt to merge SEC_MERGE sections.  */
+  bfd_boolean (*_bfd_merge_sections) (bfd *, struct bfd_link_info *);
+
+  /* Is this section a member of a group?  */
+  bfd_boolean (*_bfd_is_group_section) (bfd *, const struct bfd_section *);
+
+  /* Discard members of a group.  */
+  bfd_boolean (*_bfd_discard_group) (bfd *, struct bfd_section *);
+
+  /* Check if SEC has been already linked during a reloceatable or
+     final link.  */
+  bfd_boolean (*_section_already_linked) (bfd *, asection *,
+                                          struct bfd_link_info *);
+
+  /* Define a common symbol.  */
+  bfd_boolean (*_bfd_define_common_symbol) (bfd *, struct bfd_link_info *,
+                                            struct bfd_link_hash_entry *);
+
+  /* Routines to handle dynamic symbols and relocs.  */
+#define BFD_JUMP_TABLE_DYNAMIC(NAME) \
+  NAME##_get_dynamic_symtab_upper_bound, \
+  NAME##_canonicalize_dynamic_symtab, \
+  NAME##_get_synthetic_symtab, \
+  NAME##_get_dynamic_reloc_upper_bound, \
+  NAME##_canonicalize_dynamic_reloc
+
+  /* Get the amount of memory required to hold the dynamic symbols.  */
+  long        (*_bfd_get_dynamic_symtab_upper_bound) (bfd *);
+  /* Read in the dynamic symbols.  */
+  long        (*_bfd_canonicalize_dynamic_symtab)
+    (bfd *, struct bfd_symbol **);
+  /* Create synthetized symbols.  */
+  long        (*_bfd_get_synthetic_symtab)
+    (bfd *, long, struct bfd_symbol **, long, struct bfd_symbol **,
+     struct bfd_symbol **);
+  /* Get the amount of memory required to hold the dynamic relocs.  */
+  long        (*_bfd_get_dynamic_reloc_upper_bound) (bfd *);
+  /* Read in the dynamic relocs.  */
+  long        (*_bfd_canonicalize_dynamic_reloc)
+    (bfd *, arelent **, struct bfd_symbol **);
+
+ at end example
+A pointer to an alternative bfd_target in case the current one is not
+satisfactory.  This can happen when the target cpu supports both big
+and little endian code, and target chosen by the linker has the wrong
+endianness.  The function open_output() in ld/ldlang.c uses this field
+to find an alternative output format that is suitable.
+ at example
+  /* Opposite endian version of this target.  */
+  const struct bfd_target * alternative_target;
+
+  /* Data for use by back-end routines, which isn't
+     generic enough to belong in this structure.  */
+  const void *backend_data;
+
+@} bfd_target;
+
+ at end example
+
+ at findex bfd_set_default_target
+ at subsubsection @code{bfd_set_default_target}
+ at strong{Synopsis}
+ at example
+bfd_boolean bfd_set_default_target (const char *name);
+ at end example
+ at strong{Description}@*
+Set the default target vector to use when recognizing a BFD.
+This takes the name of the target, which may be a BFD target
+name or a configuration triplet.
+
+ at findex bfd_find_target
+ at subsubsection @code{bfd_find_target}
+ at strong{Synopsis}
+ at example
+const bfd_target *bfd_find_target (const char *target_name, bfd *abfd);
+ at end example
+ at strong{Description}@*
+Return a pointer to the transfer vector for the object target
+named @var{target_name}.  If @var{target_name} is @code{NULL},
+choose the one in the environment variable @code{GNUTARGET}; if
+that is null or not defined, then choose the first entry in the
+target list.  Passing in the string "default" or setting the
+environment variable to "default" will cause the first entry in
+the target list to be returned, and "target_defaulted" will be
+set in the BFD if @var{abfd} isn't @code{NULL}.  This causes
+ at code{bfd_check_format} to loop over all the targets to find the
+one that matches the file being read.
+
+ at findex bfd_get_target_info
+ at subsubsection @code{bfd_get_target_info}
+ at strong{Synopsis}
+ at example
+const bfd_target *bfd_get_target_info (const char *target_name,
+    bfd *abfd,
+    bfd_boolean *is_bigendian,
+    int *underscoring,
+    const char **def_target_arch);
+ at end example
+ at strong{Description}@*
+Return a pointer to the transfer vector for the object target
+named @var{target_name}.  If @var{target_name} is @code{NULL},
+choose the one in the environment variable @code{GNUTARGET}; if
+that is null or not defined, then choose the first entry in the
+target list.  Passing in the string "default" or setting the
+environment variable to "default" will cause the first entry in
+the target list to be returned, and "target_defaulted" will be
+set in the BFD if @var{abfd} isn't @code{NULL}.  This causes
+ at code{bfd_check_format} to loop over all the targets to find the
+one that matches the file being read.
+If @var{is_bigendian} is not @code{NULL}, then set this value to target's
+endian mode. True for big-endian, FALSE for little-endian or for
+invalid target.
+If @var{underscoring} is not @code{NULL}, then set this value to target's
+underscoring mode. Zero for none-underscoring, -1 for invalid target,
+else the value of target vector's symbol underscoring.
+If @var{def_target_arch} is not @code{NULL}, then set it to the architecture
+string specified by the target_name.
+
+ at findex bfd_target_list
+ at subsubsection @code{bfd_target_list}
+ at strong{Synopsis}
+ at example
+const char ** bfd_target_list (void);
+ at end example
+ at strong{Description}@*
+Return a freshly malloced NULL-terminated
+vector of the names of all the valid BFD targets. Do not
+modify the names.
+
+ at findex bfd_seach_for_target
+ at subsubsection @code{bfd_seach_for_target}
+ at strong{Synopsis}
+ at example
+const bfd_target *bfd_search_for_target
+   (int (*search_func) (const bfd_target *, void *),
+    void *);
+ at end example
+ at strong{Description}@*
+Return a pointer to the first transfer vector in the list of
+transfer vectors maintained by BFD that produces a non-zero
+result when passed to the function @var{search_func}.  The
+parameter @var{data} is passed, unexamined, to the search
+function.
 
diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c
index 577f278..d31b849 100644
--- a/bfd/dwarf2.c
+++ b/bfd/dwarf2.c
@@ -405,8 +405,8 @@ create_info_hash_table (bfd *abfd)
 {
   struct info_hash_table *hash_table;
 
-  hash_table = (struct info_hash_table *)
-      bfd_alloc (abfd, sizeof (struct info_hash_table));
+  hash_table = ((struct info_hash_table *)
+		bfd_alloc (abfd, sizeof (struct info_hash_table)));
   if (!hash_table)
     return hash_table;
 
@@ -503,7 +503,7 @@ read_section (bfd *           abfd,
       if (syms)
 	{
 	  *section_buffer
-	      = bfd_simple_get_relocated_section_contents (abfd, msec, NULL, syms);
+	    = bfd_simple_get_relocated_section_contents (abfd, msec, NULL, syms);
 	  if (! *section_buffer)
 	    return FALSE;
 	}
@@ -522,7 +522,8 @@ read_section (bfd *           abfd,
      that the client wants.  Validate it here to avoid trouble later.  */
   if (offset != 0 && offset >= *section_size)
     {
-      (*_bfd_error_handler) (_("Dwarf Error: Offset (%lu) greater than or equal to %s size (%lu)."),
+      (*_bfd_error_handler) (_("Dwarf Error: Offset (%lu)"
+			       " greater than or equal to %s size (%lu)."),
 			     (long) offset, section_name, *section_size);
       bfd_set_error (bfd_error_bad_value);
       return FALSE;
@@ -1014,20 +1015,27 @@ struct line_info_table
 /* Remember some information about each function.  If the function is
    inlined (DW_TAG_inlined_subroutine) it may have two additional
    attributes, DW_AT_call_file and DW_AT_call_line, which specify the
-   source code location where this function was inlined. */
+   source code location where this function was inlined.  */
 
 struct funcinfo
 {
-  struct funcinfo *prev_func;		/* Pointer to previous function in list of all functions */
-  struct funcinfo *caller_func;		/* Pointer to function one scope higher */
-  char *caller_file;			/* Source location file name where caller_func inlines this func */
-  int caller_line;			/* Source location line number where caller_func inlines this func */
-  char *file;				/* Source location file name */
-  int line;				/* Source location line number */
+  /* Pointer to previous function in list of all functions.  */
+  struct funcinfo *prev_func;
+  /* Pointer to function one scope higher.  */
+  struct funcinfo *caller_func;
+  /* Source location file name where caller_func inlines this func.  */
+  char *caller_file;
+  /* Source location line number where caller_func inlines this func.  */
+  int caller_line;
+  /* Source location file name.  */
+  char *file;
+  /* Source location line number.  */
+  int line;
   int tag;
   char *name;
   struct arange arange;
-  asection *sec;			/* Where the symbol is defined */
+  /* Where the symbol is defined.  */
+  asection *sec;
 };
 
 struct varinfo
@@ -1248,12 +1256,16 @@ concat_filename (struct line_info_table *table, unsigned int file)
 }
 
 static bfd_boolean
-arange_add (bfd *abfd, struct arange *first_arange,
+arange_add (const struct comp_unit *unit, struct arange *first_arange,
 	    bfd_vma low_pc, bfd_vma high_pc)
 {
   struct arange *arange;
 
-  /* If the first arange is empty, use it. */
+  /* Ignore empty ranges.  */
+  if (low_pc == high_pc)
+    return TRUE;
+
+  /* If the first arange is empty, use it.  */
   if (first_arange->high == 0)
     {
       first_arange->low = low_pc;
@@ -1281,7 +1293,7 @@ arange_add (bfd *abfd, struct arange *first_arange,
 
   /* Need to allocate a new arange and insert it into the arange list.
      Order isn't significant, so just insert after the first arange. */
-  arange = (struct arange *) bfd_zalloc (abfd, sizeof (*arange));
+  arange = (struct arange *) bfd_alloc (unit->abfd, sizeof (*arange));
   if (arange == NULL)
     return FALSE;
   arange->low = low_pc;
@@ -1401,6 +1413,7 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
   unsigned int i, bytes_read, offset_size;
   char *cur_file, *cur_dir;
   unsigned char op_code, extended_op, adj_opcode;
+  unsigned int exop_len;
   bfd_size_type amt;
 
   if (! read_section (abfd, &stash->debug_sections[debug_line],
@@ -1581,15 +1594,15 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
 	      /* Special operand.  */
 	      adj_opcode = op_code - lh.opcode_base;
 	      if (lh.maximum_ops_per_insn == 1)
-		address += (adj_opcode / lh.line_range)
-			   * lh.minimum_instruction_length;
+		address += (adj_opcode / lh.line_range
+			    * lh.minimum_instruction_length);
 	      else
 		{
-		  address += ((op_index + (adj_opcode / lh.line_range))
-			      / lh.maximum_ops_per_insn)
-			     * lh.minimum_instruction_length;
-		  op_index = (op_index + (adj_opcode / lh.line_range))
-			     % lh.maximum_ops_per_insn;
+		  address += ((op_index + adj_opcode / lh.line_range)
+			      / lh.maximum_ops_per_insn
+			      * lh.minimum_instruction_length);
+		  op_index = ((op_index + adj_opcode / lh.line_range)
+			      % lh.maximum_ops_per_insn);
 		}
 	      line += lh.line_base + (adj_opcode % lh.line_range);
 	      /* Append row to matrix using current values.  */
@@ -1604,8 +1617,8 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
 	  else switch (op_code)
 	    {
 	    case DW_LNS_extended_op:
-	      /* Ignore length.  */
-	      line_ptr += 1;
+	      exop_len = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
+	      line_ptr += bytes_read;
 	      extended_op = read_1_byte (abfd, line_ptr);
 	      line_ptr += 1;
 
@@ -1620,7 +1633,7 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
 		    low_pc = address;
 		  if (address > high_pc)
 		    high_pc = address;
-		  if (!arange_add (unit->abfd, &unit->arange, low_pc, high_pc))
+		  if (!arange_add (unit, &unit->arange, low_pc, high_pc))
 		    goto line_fail;
 		  break;
 		case DW_LNE_set_address:
@@ -1658,8 +1671,12 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
 		  (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
 		  line_ptr += bytes_read;
 		  break;
+		case DW_LNE_HP_source_file_correlation:
+		  line_ptr += exop_len - 1;
+		  break;
 		default:
-		  (*_bfd_error_handler) (_("Dwarf Error: mangled line number section."));
+		  (*_bfd_error_handler)
+		    (_("Dwarf Error: mangled line number section."));
 		  bfd_set_error (bfd_error_bad_value);
 		line_fail:
 		  if (filename != NULL)
@@ -1678,15 +1695,15 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
 	      break;
 	    case DW_LNS_advance_pc:
 	      if (lh.maximum_ops_per_insn == 1)
-		address += lh.minimum_instruction_length
-			   * read_unsigned_leb128 (abfd, line_ptr,
-						   &bytes_read);
+		address += (lh.minimum_instruction_length
+			    * read_unsigned_leb128 (abfd, line_ptr,
+						    &bytes_read));
 	      else
 		{
 		  bfd_vma adjust = read_unsigned_leb128 (abfd, line_ptr,
 							 &bytes_read);
-		  address = ((op_index + adjust) / lh.maximum_ops_per_insn)
-			    * lh.minimum_instruction_length;
+		  address = ((op_index + adjust) / lh.maximum_ops_per_insn
+			     * lh.minimum_instruction_length);
 		  op_index = (op_index + adjust) % lh.maximum_ops_per_insn;
 		}
 	      line_ptr += bytes_read;
@@ -1719,13 +1736,14 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
 	      break;
 	    case DW_LNS_const_add_pc:
 	      if (lh.maximum_ops_per_insn == 1)
-		address += lh.minimum_instruction_length
-			   * ((255 - lh.opcode_base) / lh.line_range);
+		address += (lh.minimum_instruction_length
+			    * ((255 - lh.opcode_base) / lh.line_range));
 	      else
 		{
 		  bfd_vma adjust = ((255 - lh.opcode_base) / lh.line_range);
-		  address += lh.minimum_instruction_length
-			     * ((op_index + adjust) / lh.maximum_ops_per_insn);
+		  address += (lh.minimum_instruction_length
+			      * ((op_index + adjust)
+				 / lh.maximum_ops_per_insn));
 		  op_index = (op_index + adjust) % lh.maximum_ops_per_insn;
 		}
 	      break;
@@ -1851,8 +1869,9 @@ lookup_address_in_function_table (struct comp_unit *unit,
 	{
 	  if (addr >= arange->low && addr < arange->high)
 	    {
-	      if (!best_fit ||
-		  ((arange->high - arange->low) < (best_fit->arange.high - best_fit->arange.low)))
+	      if (!best_fit
+		  || (arange->high - arange->low
+		      < best_fit->arange.high - best_fit->arange.low))
 		best_fit = each_func;
 	    }
 	}
@@ -1900,8 +1919,8 @@ lookup_symbol_in_function_table (struct comp_unit *unit,
 	      && each_func->name
 	      && strcmp (name, each_func->name) == 0
 	      && (!best_fit
-		  || ((arange->high - arange->low)
-		      < (best_fit->arange.high - best_fit->arange.low))))
+		  || (arange->high - arange->low
+		      < best_fit->arange.high - best_fit->arange.low)))
 	    best_fit = each_func;
 	}
     }
@@ -1986,8 +2005,8 @@ find_abstract_instance_name (struct comp_unit *unit,
       abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
       if (! abbrev)
 	{
-	  (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
-				 abbrev_number);
+	  (*_bfd_error_handler)
+	    (_("Dwarf Error: Could not find abbrev number %u."), abbrev_number);
 	  bfd_set_error (bfd_error_bad_value);
 	}
       else
@@ -2052,7 +2071,7 @@ read_rangelist (struct comp_unit *unit, struct arange *arange,
 	base_address = high_pc;
       else
 	{
-	  if (!arange_add (unit->abfd, arange,
+	  if (!arange_add (unit, arange,
 			   base_address + low_pc, base_address + high_pc))
 	    return FALSE;
 	}
@@ -2078,7 +2097,7 @@ scan_unit_for_symbols (struct comp_unit *unit)
      can use to set the caller_func field.  */
   nested_funcs_size = 32;
   nested_funcs = (struct funcinfo **)
-      bfd_malloc (nested_funcs_size * sizeof (struct funcinfo *));
+    bfd_malloc (nested_funcs_size * sizeof (struct funcinfo *));
   if (nested_funcs == NULL)
     return FALSE;
   nested_funcs[nesting_level] = 0;
@@ -2092,6 +2111,7 @@ scan_unit_for_symbols (struct comp_unit *unit)
       struct varinfo *var;
       bfd_vma low_pc = 0;
       bfd_vma high_pc = 0;
+      bfd_boolean high_pc_relative = FALSE;
 
       abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
       info_ptr += bytes_read;
@@ -2197,6 +2217,7 @@ scan_unit_for_symbols (struct comp_unit *unit)
 
 		case DW_AT_high_pc:
 		  high_pc = attr.u.val;
+		  high_pc_relative = attr.form != DW_FORM_addr;
 		  break;
 
 		case DW_AT_ranges:
@@ -2275,9 +2296,12 @@ scan_unit_for_symbols (struct comp_unit *unit)
 	    }
 	}
 
+      if (high_pc_relative)
+	high_pc += low_pc;
+
       if (func && high_pc != 0)
 	{
-	  if (!arange_add (unit->abfd, &func->arange, low_pc, high_pc))
+	  if (!arange_add (unit, &func->arange, low_pc, high_pc))
 	    goto fail;
 	}
 
@@ -2291,8 +2315,8 @@ scan_unit_for_symbols (struct comp_unit *unit)
 
 	      nested_funcs_size *= 2;
 	      tmp = (struct funcinfo **)
-                 bfd_realloc (nested_funcs,
-                              (nested_funcs_size * sizeof (struct funcinfo *)));
+		bfd_realloc (nested_funcs,
+			     nested_funcs_size * sizeof (struct funcinfo *));
 	      if (tmp == NULL)
 		goto fail;
 	      nested_funcs = tmp;
@@ -2338,6 +2362,7 @@ parse_comp_unit (struct dwarf2_debug *stash,
   bfd_vma low_pc = 0;
   bfd_vma high_pc = 0;
   bfd *abfd = stash->bfd_ptr;
+  bfd_boolean high_pc_relative = FALSE;
 
   version = read_2_bytes (abfd, info_ptr);
   info_ptr += 2;
@@ -2352,23 +2377,29 @@ parse_comp_unit (struct dwarf2_debug *stash,
 
   if (version != 2 && version != 3 && version != 4)
     {
-      (*_bfd_error_handler) (_("Dwarf Error: found dwarf version '%u', this reader only handles version 2, 3 and 4 information."), version);
+      (*_bfd_error_handler)
+	(_("Dwarf Error: found dwarf version '%u', this reader"
+	   " only handles version 2, 3 and 4 information."), version);
       bfd_set_error (bfd_error_bad_value);
       return 0;
     }
 
   if (addr_size > sizeof (bfd_vma))
     {
-      (*_bfd_error_handler) (_("Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'."),
-			 addr_size,
-			 (unsigned int) sizeof (bfd_vma));
+      (*_bfd_error_handler)
+	(_("Dwarf Error: found address size '%u', this reader"
+	   " can not handle sizes greater than '%u'."),
+	 addr_size,
+	 (unsigned int) sizeof (bfd_vma));
       bfd_set_error (bfd_error_bad_value);
       return 0;
     }
 
   if (addr_size != 2 && addr_size != 4 && addr_size != 8)
     {
-      (*_bfd_error_handler) ("Dwarf Error: found address size '%u', this reader can only handle address sizes '2', '4' and '8'.", addr_size);
+      (*_bfd_error_handler)
+	("Dwarf Error: found address size '%u', this reader"
+	 " can only handle address sizes '2', '4' and '8'.", addr_size);
       bfd_set_error (bfd_error_bad_value);
       return 0;
     }
@@ -2376,14 +2407,14 @@ parse_comp_unit (struct dwarf2_debug *stash,
   /* Read the abbrevs for this compilation unit into a table.  */
   abbrevs = read_abbrevs (abfd, abbrev_offset, stash);
   if (! abbrevs)
-      return 0;
+    return 0;
 
   abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
   info_ptr += bytes_read;
   if (! abbrev_number)
     {
       (*_bfd_error_handler) (_("Dwarf Error: Bad abbrev number: %u."),
-			 abbrev_number);
+			     abbrev_number);
       bfd_set_error (bfd_error_bad_value);
       return 0;
     }
@@ -2392,7 +2423,7 @@ parse_comp_unit (struct dwarf2_debug *stash,
   if (! abbrev)
     {
       (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
-			 abbrev_number);
+			     abbrev_number);
       bfd_set_error (bfd_error_bad_value);
       return 0;
     }
@@ -2435,11 +2466,13 @@ parse_comp_unit (struct dwarf2_debug *stash,
 	  /* If the compilation unit DIE has a DW_AT_low_pc attribute,
 	     this is the base address to use when reading location
 	     lists or range lists. */
-	  unit->base_address = low_pc;
+	  if (abbrev->tag == DW_TAG_compile_unit)
+	    unit->base_address = low_pc;
 	  break;
 
 	case DW_AT_high_pc:
 	  high_pc = attr.u.val;
+	  high_pc_relative = attr.form != DW_FORM_addr;
 	  break;
 
 	case DW_AT_ranges:
@@ -2467,9 +2500,11 @@ parse_comp_unit (struct dwarf2_debug *stash,
 	  break;
 	}
     }
+  if (high_pc_relative)
+    high_pc += low_pc;
   if (high_pc != 0)
     {
-      if (!arange_add (unit->abfd, &unit->arange, low_pc, high_pc))
+      if (!arange_add (unit, &unit->arange, low_pc, high_pc))
 	return NULL;
     }
 
@@ -2739,25 +2774,43 @@ static asection *
 find_debug_info (bfd *abfd, const struct dwarf_debug_section *debug_sections,
                  asection *after_sec)
 {
-  asection * msec;
+  asection *msec;
+  const char *look;
+
+  if (after_sec == NULL)
+    {
+      look = debug_sections[debug_info].uncompressed_name;
+      msec = bfd_get_section_by_name (abfd, look);
+      if (msec != NULL)
+	return msec;
+
+      look = debug_sections[debug_info].compressed_name;
+      if (look != NULL)
+	{
+	  msec = bfd_get_section_by_name (abfd, look);
+	  if (msec != NULL)
+	    return msec;
+	}
 
-  msec = after_sec != NULL ? after_sec->next : abfd->sections;
+      for (msec = abfd->sections; msec != NULL; msec = msec->next)
+	if (CONST_STRNEQ (msec->name, GNU_LINKONCE_INFO))
+	  return msec;
 
-  while (msec)
+      return NULL;
+    }
+
+  for (msec = after_sec->next; msec != NULL; msec = msec->next)
     {
-      if (strcmp (msec->name,
-                  debug_sections[debug_info].uncompressed_name) == 0)
+      look = debug_sections[debug_info].uncompressed_name;
+      if (strcmp (msec->name, look) == 0)
 	return msec;
 
-      if (debug_sections[debug_info].compressed_name != NULL
-          && strcmp (msec->name,
-                     debug_sections[debug_info].compressed_name) == 0)
+      look = debug_sections[debug_info].compressed_name;
+      if (look != NULL && strcmp (msec->name, look) == 0)
 	return msec;
 
       if (CONST_STRNEQ (msec->name, GNU_LINKONCE_INFO))
 	return msec;
-
-      msec = msec->next;
     }
 
   return NULL;
@@ -2831,7 +2884,7 @@ place_sections (bfd *abfd, struct dwarf2_debug *stash)
 	}
 
       amt = i * sizeof (struct adjusted_section);
-      p = (struct adjusted_section *) bfd_zalloc (abfd, amt);
+      p = (struct adjusted_section *) bfd_alloc (abfd, amt);
       if (! p)
 	return FALSE;
 
@@ -2925,8 +2978,8 @@ info_hash_lookup_funcinfo (struct info_hash_table *hash_table,
 	      && addr >= arange->low
 	      && addr < arange->high
 	      && (!best_fit
-		  || ((arange->high - arange->low)
-		      < (best_fit->arange.high - best_fit->arange.low))))
+		  || (arange->high - arange->low
+		      < best_fit->arange.high - best_fit->arange.low)))
 	    best_fit = each_func;
 	}
     }
@@ -3117,6 +3170,122 @@ stash_find_line_fast (struct dwarf2_debug *stash,
 				   filename_ptr, linenumber_ptr);
 }
 
+/* Read debug information from DEBUG_BFD when DEBUG_BFD is specified.
+   If DEBUG_BFD is not specified, we read debug information from ABFD
+   or its gnu_debuglink. The results will be stored in PINFO.
+   The function returns TRUE iff debug information is ready.  */
+
+bfd_boolean
+_bfd_dwarf2_slurp_debug_info (bfd *abfd, bfd *debug_bfd,
+                              const struct dwarf_debug_section *debug_sections,
+                              asymbol **symbols,
+                              void **pinfo)
+{
+  bfd_size_type amt = sizeof (struct dwarf2_debug);
+  bfd_size_type total_size;
+  asection *msec;
+  struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;
+
+  if (stash != NULL)
+    return TRUE;
+
+  stash = (struct dwarf2_debug *) bfd_zalloc (abfd, amt);
+  if (! stash)
+    return FALSE;
+  stash->debug_sections = debug_sections;
+
+  *pinfo = stash;
+
+  if (debug_bfd == NULL)
+    debug_bfd = abfd;
+
+  msec = find_debug_info (debug_bfd, debug_sections, NULL);
+  if (msec == NULL && abfd == debug_bfd)
+    {
+      char * debug_filename = bfd_follow_gnu_debuglink (abfd, DEBUGDIR);
+
+      if (debug_filename == NULL)
+	/* No dwarf2 info, and no gnu_debuglink to follow.
+	   Note that at this point the stash has been allocated, but
+	   contains zeros.  This lets future calls to this function
+	   fail more quickly.  */
+	return FALSE;
+
+      if ((debug_bfd = bfd_openr (debug_filename, NULL)) == NULL
+	  || ! bfd_check_format (debug_bfd, bfd_object)
+	  || (msec = find_debug_info (debug_bfd,
+				      debug_sections, NULL)) == NULL)
+	{
+	  if (debug_bfd)
+	    bfd_close (debug_bfd);
+	  /* FIXME: Should we report our failure to follow the debuglink ?  */
+	  free (debug_filename);
+	  return FALSE;
+	}
+    }
+
+  /* There can be more than one DWARF2 info section in a BFD these
+     days.  First handle the easy case when there's only one.  If
+     there's more than one, try case two: none of the sections is
+     compressed.  In that case, read them all in and produce one
+     large stash.  We do this in two passes - in the first pass we
+     just accumulate the section sizes, and in the second pass we
+     read in the section's contents.  (The allows us to avoid
+     reallocing the data as we add sections to the stash.)  If
+     some or all sections are compressed, then do things the slow
+     way, with a bunch of reallocs.  */
+
+  if (! find_debug_info (debug_bfd, debug_sections, msec))
+    {
+      /* Case 1: only one info section.  */
+      total_size = msec->size;
+      if (! read_section (debug_bfd, &stash->debug_sections[debug_info],
+			  symbols, 0,
+			  &stash->info_ptr_memory, &total_size))
+	return FALSE;
+    }
+  else
+    {
+      /* Case 2: multiple sections.  */
+      for (total_size = 0;
+	   msec;
+	   msec = find_debug_info (debug_bfd, debug_sections, msec))
+	total_size += msec->size;
+
+      stash->info_ptr_memory = (bfd_byte *) bfd_malloc (total_size);
+      if (stash->info_ptr_memory == NULL)
+	return FALSE;
+
+      total_size = 0;
+      for (msec = find_debug_info (debug_bfd, debug_sections, NULL);
+	   msec;
+	   msec = find_debug_info (debug_bfd, debug_sections, msec))
+	{
+	  bfd_size_type size;
+
+	  size = msec->size;
+	  if (size == 0)
+	    continue;
+
+	  if (!(bfd_simple_get_relocated_section_contents
+		(debug_bfd, msec, stash->info_ptr_memory + total_size,
+		 symbols)))
+	    return FALSE;
+
+	  total_size += size;
+	}
+    }
+
+  stash->info_ptr = stash->info_ptr_memory;
+  stash->info_ptr_end = stash->info_ptr + total_size;
+  stash->sec = find_debug_info (debug_bfd, debug_sections, NULL);
+  stash->sec_info_ptr = stash->info_ptr;
+  stash->syms = symbols;
+  stash->bfd_ptr = debug_bfd;
+
+  return TRUE;
+}
+
 /* Find the source code location of SYMBOL.  If SYMBOL is NULL
    then find the nearest source code location corresponding to
    the address SECTION + OFFSET.
@@ -3157,17 +3326,16 @@ find_line (bfd *abfd,
   bfd_vma found = FALSE;
   bfd_boolean do_line;
 
-  stash = (struct dwarf2_debug *) *pinfo;
+  *filename_ptr = NULL;
+  if (functionname_ptr != NULL)
+    *functionname_ptr = NULL;
+  *linenumber_ptr = 0;
 
-  if (! stash)
-    {
-      bfd_size_type amt = sizeof (struct dwarf2_debug);
+  if (! _bfd_dwarf2_slurp_debug_info (abfd, NULL,
+				      debug_sections, symbols, pinfo))
+    return FALSE;
 
-      stash = (struct dwarf2_debug *) bfd_zalloc (abfd, amt);
-      if (! stash)
-	return FALSE;
-      stash->debug_sections = debug_sections;
-    }
+  stash = (struct dwarf2_debug *) *pinfo;
 
   /* In a relocatable file, 2 functions may have the same address.
      We change the section vma so that they won't overlap.  */
@@ -3197,110 +3365,11 @@ find_line (bfd *abfd,
     addr += section->output_section->vma + section->output_offset;
   else
     addr += section->vma;
-  *filename_ptr = NULL;
-  if (! do_line)
-    *functionname_ptr = NULL;
-  *linenumber_ptr = 0;
-
-  if (! *pinfo)
-    {
-      bfd *debug_bfd;
-      bfd_size_type total_size;
-      asection *msec;
-
-      *pinfo = stash;
-
-      msec = find_debug_info (abfd, debug_sections, NULL);
-      if (msec == NULL)
-	{
-	  char * debug_filename = bfd_follow_gnu_debuglink (abfd, DEBUGDIR);
-
-	  if (debug_filename == NULL)
-	    /* No dwarf2 info, and no gnu_debuglink to follow.
-	       Note that at this point the stash has been allocated, but
-	       contains zeros.  This lets future calls to this function
-	       fail more quickly.  */
-	    goto done;
-
-	  if ((debug_bfd = bfd_openr (debug_filename, NULL)) == NULL
-	      || ! bfd_check_format (debug_bfd, bfd_object)
-	      || (msec = find_debug_info (debug_bfd,
-                                          debug_sections, NULL)) == NULL)
-	    {
-	      if (debug_bfd)
-		bfd_close (debug_bfd);
-	      /* FIXME: Should we report our failure to follow the debuglink ?  */
-	      free (debug_filename);
-	      goto done;
-	    }
-	}
-      else
-	debug_bfd = abfd;
-
-      /* There can be more than one DWARF2 info section in a BFD these
-	 days.  First handle the easy case when there's only one.  If
-	 there's more than one, try case two: none of the sections is
-	 compressed.  In that case, read them all in and produce one
-	 large stash.  We do this in two passes - in the first pass we
-	 just accumulate the section sizes, and in the second pass we
-	 read in the section's contents.  (The allows us to avoid
-	 reallocing the data as we add sections to the stash.)  If
-	 some or all sections are compressed, then do things the slow
-	 way, with a bunch of reallocs.  */
-
-      if (! find_debug_info (debug_bfd, debug_sections, msec))
-	{
-	  /* Case 1: only one info section.  */
-	  total_size = msec->size;
-	  if (! read_section (debug_bfd, &stash->debug_sections[debug_info],
-                              symbols, 0,
-			      &stash->info_ptr_memory, &total_size))
-	    goto done;
-	}
-      else
-	{
-	  /* Case 2: multiple sections.  */
-	  for (total_size = 0;
-               msec;
-               msec = find_debug_info (debug_bfd, debug_sections, msec))
-	    total_size += msec->size;
-
-	  stash->info_ptr_memory = (bfd_byte *) bfd_malloc (total_size);
-	  if (stash->info_ptr_memory == NULL)
-	    goto done;
-
-	  total_size = 0;
-	  for (msec = find_debug_info (debug_bfd, debug_sections, NULL);
-	       msec;
-	       msec = find_debug_info (debug_bfd, debug_sections, msec))
-	    {
-	      bfd_size_type size;
-
-	      size = msec->size;
-	      if (size == 0)
-		continue;
-
-	      if (!(bfd_simple_get_relocated_section_contents
-		    (debug_bfd, msec, stash->info_ptr_memory + total_size,
-		     symbols)))
-		goto done;
-
-	      total_size += size;
-	    }
-	}
-
-      stash->info_ptr = stash->info_ptr_memory;
-      stash->info_ptr_end = stash->info_ptr + total_size;
-      stash->sec = find_debug_info (debug_bfd, debug_sections, NULL);
-      stash->sec_info_ptr = stash->info_ptr;
-      stash->syms = symbols;
-      stash->bfd_ptr = debug_bfd;
-    }
 
   /* A null info_ptr indicates that there is no dwarf2 info
      (or that an error occured while setting up the stash).  */
   if (! stash->info_ptr)
-    goto done;
+    return FALSE;
 
   stash->inliner_chain = NULL;
 
@@ -3330,6 +3399,7 @@ find_line (bfd *abfd,
 	  /* Check the previously read comp. units first.  */
 	  for (each = stash->all_comp_units; each; each = each->next_unit)
 	    if ((symbol->flags & BSF_FUNCTION) == 0
+		|| each->arange.high == 0
 		|| comp_unit_contains_address (each, addr))
 	      {
 		found = comp_unit_find_line (each, symbol, addr, filename_ptr,
@@ -3343,7 +3413,8 @@ find_line (bfd *abfd,
     {
       for (each = stash->all_comp_units; each; each = each->next_unit)
 	{
-	  found = (comp_unit_contains_address (each, addr)
+	  found = ((each->arange.high == 0
+		    || comp_unit_contains_address (each, addr))
 		   && comp_unit_find_nearest_line (each, addr,
 						   filename_ptr,
 						   functionname_ptr,
@@ -3456,7 +3527,7 @@ find_line (bfd *abfd,
 	}
     }
 
-done:
+ done:
   if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
     unset_sections (stash);
 
@@ -3527,17 +3598,12 @@ _bfd_dwarf2_find_inliner_info (bfd *abfd ATTRIBUTE_UNUSED,
 }
 
 void
-_bfd_dwarf2_cleanup_debug_info (bfd *abfd)
+_bfd_dwarf2_cleanup_debug_info (bfd *abfd, void **pinfo)
 {
+  struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;;
   struct comp_unit *each;
-  struct dwarf2_debug *stash;
-
-  if (abfd == NULL || elf_tdata (abfd) == NULL)
-    return;
-
-  stash = (struct dwarf2_debug *) elf_tdata (abfd)->dwarf2_find_line_info;
 
-  if (stash == NULL)
+  if (abfd == NULL || stash == NULL)
     return;
 
   for (each = stash->all_comp_units; each; each = each->next_unit)
diff --git a/bfd/ecoff.c b/bfd/ecoff.c
index b76266d..3b65c0e 100644
--- a/bfd/ecoff.c
+++ b/bfd/ecoff.c
@@ -1,6 +1,6 @@
 /* Generic ECOFF (Extended-COFF) routines.
    Copyright 1990, 1991, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-   2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
    Original version by Per Bothner.
    Full support added by Ian Lance Taylor, ian at cygnus.com.
@@ -73,8 +73,6 @@ static asection bfd_debug_section =
      0,       NULL,         0,
   /* target_index, used_by_bfd, constructor_chain, owner,          */
      0,            NULL,        NULL,              NULL,
-  /* flag_info,                                                    */
-     NULL,
   /* symbol,                                                       */
      NULL,
   /* symbol_ptr_ptr,                                               */
@@ -236,9 +234,7 @@ _bfd_ecoff_set_arch_mach_hook (bfd *abfd, void * filehdr)
 }
 
 bfd_boolean
-_bfd_ecoff_no_long_sections (abfd, enable)
-     bfd *abfd;
-     int enable;
+_bfd_ecoff_no_long_sections (bfd *abfd, int enable)
 {
   (void) abfd;
   (void) enable;
diff --git a/bfd/ecofflink.c b/bfd/ecofflink.c
index 25b67fa..2ec2886 100644
--- a/bfd/ecofflink.c
+++ b/bfd/ecofflink.c
@@ -1,6 +1,6 @@
 /* Routines to link ECOFF debugging information.
    Copyright 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003,
-   2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+   2004, 2005, 2006, 2007, 2008, 2009, 2012  Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support, <ian at cygnus.com>.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -33,28 +33,6 @@
 #include "libcoff.h"
 #include "libecoff.h"
 

-static bfd_boolean ecoff_add_bytes
-  PARAMS ((char **buf, char **bufend, size_t need));
-static struct bfd_hash_entry *string_hash_newfunc
-  PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *,
-	   const char *));
-static void ecoff_align_debug
-  PARAMS ((bfd *abfd, struct ecoff_debug_info *debug,
-	   const struct ecoff_debug_swap *swap));
-static bfd_boolean ecoff_write_symhdr
-  PARAMS ((bfd *, struct ecoff_debug_info *, const struct ecoff_debug_swap *,
-	   file_ptr where));
-static int cmp_fdrtab_entry
-  PARAMS ((const PTR, const PTR));
-static bfd_boolean mk_fdrtab
-  PARAMS ((bfd *, struct ecoff_debug_info * const,
-	   const struct ecoff_debug_swap * const, struct ecoff_find_line *));
-static long fdrtab_lookup
-  PARAMS ((struct ecoff_find_line *, bfd_vma));
-static bfd_boolean lookup_line
-  PARAMS ((bfd *, struct ecoff_debug_info * const,
-	   const struct ecoff_debug_swap * const, struct ecoff_find_line *));
-

 /* Routines to swap auxiliary information in and out.  I am assuming
    that the auxiliary information format is always going to be target
    independent.  */
@@ -64,51 +42,52 @@ static bfd_boolean lookup_line
    info comes from the file header record (fh-fBigendian).  */
 
 void
-_bfd_ecoff_swap_tir_in (bigend, ext_copy, intern)
-     int bigend;
-     const struct tir_ext *ext_copy;
-     TIR *intern;
+_bfd_ecoff_swap_tir_in (int bigend, const struct tir_ext *ext_copy,
+			TIR *intern)
 {
   struct tir_ext ext[1];
 
   *ext = *ext_copy;		/* Make it reasonable to do in-place.  */
 
   /* now the fun stuff...  */
-  if (bigend) {
-    intern->fBitfield   = 0 != (ext->t_bits1[0] & TIR_BITS1_FBITFIELD_BIG);
-    intern->continued   = 0 != (ext->t_bits1[0] & TIR_BITS1_CONTINUED_BIG);
-    intern->bt          = (ext->t_bits1[0] & TIR_BITS1_BT_BIG)
-			>>		    TIR_BITS1_BT_SH_BIG;
-    intern->tq4         = (ext->t_tq45[0] & TIR_BITS_TQ4_BIG)
-			>>		    TIR_BITS_TQ4_SH_BIG;
-    intern->tq5         = (ext->t_tq45[0] & TIR_BITS_TQ5_BIG)
-			>>		    TIR_BITS_TQ5_SH_BIG;
-    intern->tq0         = (ext->t_tq01[0] & TIR_BITS_TQ0_BIG)
-			>>		    TIR_BITS_TQ0_SH_BIG;
-    intern->tq1         = (ext->t_tq01[0] & TIR_BITS_TQ1_BIG)
-			>>		    TIR_BITS_TQ1_SH_BIG;
-    intern->tq2         = (ext->t_tq23[0] & TIR_BITS_TQ2_BIG)
-			>>		    TIR_BITS_TQ2_SH_BIG;
-    intern->tq3         = (ext->t_tq23[0] & TIR_BITS_TQ3_BIG)
-			>>		    TIR_BITS_TQ3_SH_BIG;
-  } else {
-    intern->fBitfield   = 0 != (ext->t_bits1[0] & TIR_BITS1_FBITFIELD_LITTLE);
-    intern->continued   = 0 != (ext->t_bits1[0] & TIR_BITS1_CONTINUED_LITTLE);
-    intern->bt          = (ext->t_bits1[0] & TIR_BITS1_BT_LITTLE)
-			>>		    TIR_BITS1_BT_SH_LITTLE;
-    intern->tq4         = (ext->t_tq45[0] & TIR_BITS_TQ4_LITTLE)
-			>>		    TIR_BITS_TQ4_SH_LITTLE;
-    intern->tq5         = (ext->t_tq45[0] & TIR_BITS_TQ5_LITTLE)
-			>>		    TIR_BITS_TQ5_SH_LITTLE;
-    intern->tq0         = (ext->t_tq01[0] & TIR_BITS_TQ0_LITTLE)
-			>>		    TIR_BITS_TQ0_SH_LITTLE;
-    intern->tq1         = (ext->t_tq01[0] & TIR_BITS_TQ1_LITTLE)
-			>>		    TIR_BITS_TQ1_SH_LITTLE;
-    intern->tq2         = (ext->t_tq23[0] & TIR_BITS_TQ2_LITTLE)
-			>>		    TIR_BITS_TQ2_SH_LITTLE;
-    intern->tq3         = (ext->t_tq23[0] & TIR_BITS_TQ3_LITTLE)
-			>>		    TIR_BITS_TQ3_SH_LITTLE;
-  }
+  if (bigend)
+    {
+      intern->fBitfield   = 0 != (ext->t_bits1[0] & TIR_BITS1_FBITFIELD_BIG);
+      intern->continued   = 0 != (ext->t_bits1[0] & TIR_BITS1_CONTINUED_BIG);
+      intern->bt          = (ext->t_bits1[0] & TIR_BITS1_BT_BIG)
+                          >>                   TIR_BITS1_BT_SH_BIG;
+      intern->tq4         = (ext->t_tq45[0] & TIR_BITS_TQ4_BIG)
+			  >>		      TIR_BITS_TQ4_SH_BIG;
+      intern->tq5         = (ext->t_tq45[0] & TIR_BITS_TQ5_BIG)
+			  >>		      TIR_BITS_TQ5_SH_BIG;
+      intern->tq0         = (ext->t_tq01[0] & TIR_BITS_TQ0_BIG)
+			  >>		      TIR_BITS_TQ0_SH_BIG;
+      intern->tq1         = (ext->t_tq01[0] & TIR_BITS_TQ1_BIG)
+			  >>		      TIR_BITS_TQ1_SH_BIG;
+      intern->tq2         = (ext->t_tq23[0] & TIR_BITS_TQ2_BIG)
+			  >>		      TIR_BITS_TQ2_SH_BIG;
+      intern->tq3         = (ext->t_tq23[0] & TIR_BITS_TQ3_BIG)
+			  >>		      TIR_BITS_TQ3_SH_BIG;
+    }
+  else
+    {
+      intern->fBitfield   = 0 != (ext->t_bits1[0] & TIR_BITS1_FBITFIELD_LITTLE);
+      intern->continued   = 0 != (ext->t_bits1[0] & TIR_BITS1_CONTINUED_LITTLE);
+      intern->bt          = (ext->t_bits1[0] & TIR_BITS1_BT_LITTLE)
+			  >>		    TIR_BITS1_BT_SH_LITTLE;
+      intern->tq4         = (ext->t_tq45[0] & TIR_BITS_TQ4_LITTLE)
+			  >>		    TIR_BITS_TQ4_SH_LITTLE;
+      intern->tq5         = (ext->t_tq45[0] & TIR_BITS_TQ5_LITTLE)
+			  >>		    TIR_BITS_TQ5_SH_LITTLE;
+      intern->tq0         = (ext->t_tq01[0] & TIR_BITS_TQ0_LITTLE)
+			  >>		    TIR_BITS_TQ0_SH_LITTLE;
+      intern->tq1         = (ext->t_tq01[0] & TIR_BITS_TQ1_LITTLE)
+			  >>		    TIR_BITS_TQ1_SH_LITTLE;
+      intern->tq2         = (ext->t_tq23[0] & TIR_BITS_TQ2_LITTLE)
+			  >>		    TIR_BITS_TQ2_SH_LITTLE;
+      intern->tq3         = (ext->t_tq23[0] & TIR_BITS_TQ3_LITTLE)
+			  >>		    TIR_BITS_TQ3_SH_LITTLE;
+    }
 
 #ifdef TEST
   if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
@@ -121,51 +100,53 @@ _bfd_ecoff_swap_tir_in (bigend, ext_copy, intern)
    info comes from the file header record (fh-fBigendian).  */
 
 void
-_bfd_ecoff_swap_tir_out (bigend, intern_copy, ext)
-     int bigend;
-     const TIR *intern_copy;
-     struct tir_ext *ext;
+_bfd_ecoff_swap_tir_out (int bigend,
+			 const TIR *intern_copy,
+			 struct tir_ext *ext)
 {
   TIR intern[1];
 
   *intern = *intern_copy;	/* Make it reasonable to do in-place.  */
 
   /* now the fun stuff...  */
-  if (bigend) {
-    ext->t_bits1[0] = ((intern->fBitfield ? TIR_BITS1_FBITFIELD_BIG : 0)
+  if (bigend)
+    {
+      ext->t_bits1[0] = ((intern->fBitfield ? TIR_BITS1_FBITFIELD_BIG : 0)
 		       | (intern->continued ? TIR_BITS1_CONTINUED_BIG : 0)
 		       | ((intern->bt << TIR_BITS1_BT_SH_BIG)
 			  & TIR_BITS1_BT_BIG));
-    ext->t_tq45[0] = (((intern->tq4 << TIR_BITS_TQ4_SH_BIG)
+      ext->t_tq45[0] = (((intern->tq4 << TIR_BITS_TQ4_SH_BIG)
 		       & TIR_BITS_TQ4_BIG)
 		      | ((intern->tq5 << TIR_BITS_TQ5_SH_BIG)
 			 & TIR_BITS_TQ5_BIG));
-    ext->t_tq01[0] = (((intern->tq0 << TIR_BITS_TQ0_SH_BIG)
+      ext->t_tq01[0] = (((intern->tq0 << TIR_BITS_TQ0_SH_BIG)
 		       & TIR_BITS_TQ0_BIG)
 		      | ((intern->tq1 << TIR_BITS_TQ1_SH_BIG)
 			 & TIR_BITS_TQ1_BIG));
-    ext->t_tq23[0] = (((intern->tq2 << TIR_BITS_TQ2_SH_BIG)
+      ext->t_tq23[0] = (((intern->tq2 << TIR_BITS_TQ2_SH_BIG)
 		       & TIR_BITS_TQ2_BIG)
 		      | ((intern->tq3 << TIR_BITS_TQ3_SH_BIG)
 			 & TIR_BITS_TQ3_BIG));
-  } else {
-    ext->t_bits1[0] = ((intern->fBitfield ? TIR_BITS1_FBITFIELD_LITTLE : 0)
+    }
+  else
+    {
+      ext->t_bits1[0] = ((intern->fBitfield ? TIR_BITS1_FBITFIELD_LITTLE : 0)
 		       | (intern->continued ? TIR_BITS1_CONTINUED_LITTLE : 0)
 		       | ((intern->bt << TIR_BITS1_BT_SH_LITTLE)
 			  & TIR_BITS1_BT_LITTLE));
-    ext->t_tq45[0] = (((intern->tq4 << TIR_BITS_TQ4_SH_LITTLE)
+      ext->t_tq45[0] = (((intern->tq4 << TIR_BITS_TQ4_SH_LITTLE)
 		       & TIR_BITS_TQ4_LITTLE)
 		      | ((intern->tq5 << TIR_BITS_TQ5_SH_LITTLE)
 			 & TIR_BITS_TQ5_LITTLE));
-    ext->t_tq01[0] = (((intern->tq0 << TIR_BITS_TQ0_SH_LITTLE)
+      ext->t_tq01[0] = (((intern->tq0 << TIR_BITS_TQ0_SH_LITTLE)
 		       & TIR_BITS_TQ0_LITTLE)
 		      | ((intern->tq1 << TIR_BITS_TQ1_SH_LITTLE)
 			 & TIR_BITS_TQ1_LITTLE));
-    ext->t_tq23[0] = (((intern->tq2 << TIR_BITS_TQ2_SH_LITTLE)
+      ext->t_tq23[0] = (((intern->tq2 << TIR_BITS_TQ2_SH_LITTLE)
 		       & TIR_BITS_TQ2_LITTLE)
 		      | ((intern->tq3 << TIR_BITS_TQ3_SH_LITTLE)
 			 & TIR_BITS_TQ3_LITTLE));
-  }
+    }
 
 #ifdef TEST
   if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
@@ -177,34 +158,36 @@ _bfd_ecoff_swap_tir_out (bigend, intern_copy, ext)
    big-endian or little-endian format.*/
 
 void
-_bfd_ecoff_swap_rndx_in (bigend, ext_copy, intern)
-     int bigend;
-     const struct rndx_ext *ext_copy;
-     RNDXR *intern;
+_bfd_ecoff_swap_rndx_in (int bigend,
+			 const struct rndx_ext *ext_copy,
+			 RNDXR *intern)
 {
   struct rndx_ext ext[1];
 
   *ext = *ext_copy;		/* Make it reasonable to do in-place.  */
 
   /* now the fun stuff...  */
-  if (bigend) {
-    intern->rfd   = (ext->r_bits[0] << RNDX_BITS0_RFD_SH_LEFT_BIG)
+  if (bigend)
+    {
+      intern->rfd   = (ext->r_bits[0] << RNDX_BITS0_RFD_SH_LEFT_BIG)
 		  | ((ext->r_bits[1] & RNDX_BITS1_RFD_BIG)
 		    		    >> RNDX_BITS1_RFD_SH_BIG);
-    intern->index = ((ext->r_bits[1] & RNDX_BITS1_INDEX_BIG)
+      intern->index = ((ext->r_bits[1] & RNDX_BITS1_INDEX_BIG)
 		    		    << RNDX_BITS1_INDEX_SH_LEFT_BIG)
 		  | (ext->r_bits[2] << RNDX_BITS2_INDEX_SH_LEFT_BIG)
 		  | (ext->r_bits[3] << RNDX_BITS3_INDEX_SH_LEFT_BIG);
-  } else {
-    intern->rfd   = (ext->r_bits[0] << RNDX_BITS0_RFD_SH_LEFT_LITTLE)
+    }
+  else
+    {
+      intern->rfd   = (ext->r_bits[0] << RNDX_BITS0_RFD_SH_LEFT_LITTLE)
 		  | ((ext->r_bits[1] & RNDX_BITS1_RFD_LITTLE)
 		    		    << RNDX_BITS1_RFD_SH_LEFT_LITTLE);
-    intern->index = ((ext->r_bits[1] & RNDX_BITS1_INDEX_LITTLE)
+      intern->index = ((ext->r_bits[1] & RNDX_BITS1_INDEX_LITTLE)
 		    		    >> RNDX_BITS1_INDEX_SH_LITTLE)
 		  | (ext->r_bits[2] << RNDX_BITS2_INDEX_SH_LEFT_LITTLE)
 		  | ((unsigned int) ext->r_bits[3]
 		     << RNDX_BITS3_INDEX_SH_LEFT_LITTLE);
-  }
+    }
 
 #ifdef TEST
   if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
@@ -216,33 +199,35 @@ _bfd_ecoff_swap_rndx_in (bigend, ext_copy, intern)
    big-endian or little-endian format.*/
 
 void
-_bfd_ecoff_swap_rndx_out (bigend, intern_copy, ext)
-     int bigend;
-     const RNDXR *intern_copy;
-     struct rndx_ext *ext;
+_bfd_ecoff_swap_rndx_out (int bigend,
+			  const RNDXR *intern_copy,
+			  struct rndx_ext *ext)
 {
   RNDXR intern[1];
 
   *intern = *intern_copy;	/* Make it reasonable to do in-place.  */
 
   /* now the fun stuff...  */
-  if (bigend) {
-    ext->r_bits[0] = intern->rfd >> RNDX_BITS0_RFD_SH_LEFT_BIG;
-    ext->r_bits[1] = (((intern->rfd << RNDX_BITS1_RFD_SH_BIG)
+  if (bigend)
+    {
+      ext->r_bits[0] = intern->rfd >> RNDX_BITS0_RFD_SH_LEFT_BIG;
+      ext->r_bits[1] = (((intern->rfd << RNDX_BITS1_RFD_SH_BIG)
 		       & RNDX_BITS1_RFD_BIG)
 		      | ((intern->index >> RNDX_BITS1_INDEX_SH_LEFT_BIG)
 			 & RNDX_BITS1_INDEX_BIG));
-    ext->r_bits[2] = intern->index >> RNDX_BITS2_INDEX_SH_LEFT_BIG;
-    ext->r_bits[3] = intern->index >> RNDX_BITS3_INDEX_SH_LEFT_BIG;
-  } else {
-    ext->r_bits[0] = intern->rfd >> RNDX_BITS0_RFD_SH_LEFT_LITTLE;
-    ext->r_bits[1] = (((intern->rfd >> RNDX_BITS1_RFD_SH_LEFT_LITTLE)
+      ext->r_bits[2] = intern->index >> RNDX_BITS2_INDEX_SH_LEFT_BIG;
+      ext->r_bits[3] = intern->index >> RNDX_BITS3_INDEX_SH_LEFT_BIG;
+    }
+  else
+    {
+      ext->r_bits[0] = intern->rfd >> RNDX_BITS0_RFD_SH_LEFT_LITTLE;
+      ext->r_bits[1] = (((intern->rfd >> RNDX_BITS1_RFD_SH_LEFT_LITTLE)
 		       & RNDX_BITS1_RFD_LITTLE)
 		      | ((intern->index << RNDX_BITS1_INDEX_SH_LITTLE)
 			 & RNDX_BITS1_INDEX_LITTLE));
-    ext->r_bits[2] = intern->index >> RNDX_BITS2_INDEX_SH_LEFT_LITTLE;
-    ext->r_bits[3] = intern->index >> RNDX_BITS3_INDEX_SH_LEFT_LITTLE;
-  }
+      ext->r_bits[2] = intern->index >> RNDX_BITS2_INDEX_SH_LEFT_LITTLE;
+      ext->r_bits[3] = intern->index >> RNDX_BITS3_INDEX_SH_LEFT_LITTLE;
+    }
 
 #ifdef TEST
   if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
@@ -256,10 +241,7 @@ _bfd_ecoff_swap_rndx_out (bigend, intern_copy, ext)
 /* Add bytes to a buffer.  Return success.  */
 
 static bfd_boolean
-ecoff_add_bytes (buf, bufend, need)
-     char **buf;
-     char **bufend;
-     size_t need;
+ecoff_add_bytes (char **buf, char **bufend, size_t need)
 {
   size_t have;
   size_t want;
@@ -303,10 +285,9 @@ struct string_hash_table
 /* Routine to create an entry in a string hash table.  */
 
 static struct bfd_hash_entry *
-string_hash_newfunc (entry, table, string)
-     struct bfd_hash_entry *entry;
-     struct bfd_hash_table *table;
-     const char *string;
+string_hash_newfunc (struct bfd_hash_entry *entry,
+		     struct bfd_hash_table *table,
+		     const char *string)
 {
   struct string_hash_entry *ret = (struct string_hash_entry *) entry;
 
@@ -360,7 +341,7 @@ struct shuffle
 	  file_ptr offset;
 	} file;
       /* The data to be written out.  */
-      PTR memory;
+      void * memory;
     } u;
 };
 
@@ -402,18 +383,13 @@ struct accumulate
 
 /* Add a file entry to a shuffle list.  */
 
-static bfd_boolean add_file_shuffle
-  PARAMS ((struct accumulate *, struct shuffle **, struct shuffle **,
-	   bfd *, file_ptr, unsigned long));
-
 static bfd_boolean
-add_file_shuffle (ainfo, head, tail, input_bfd, offset, size)
-     struct accumulate *ainfo;
-     struct shuffle **head;
-     struct shuffle **tail;
-     bfd *input_bfd;
-     file_ptr offset;
-     unsigned long size;
+add_file_shuffle (struct accumulate *ainfo,
+		  struct shuffle **head,
+		  struct shuffle **tail,
+		  bfd *input_bfd,
+		  file_ptr offset,
+		  unsigned long size)
 {
   struct shuffle *n;
 
@@ -453,17 +429,12 @@ add_file_shuffle (ainfo, head, tail, input_bfd, offset, size)
 
 /* Add a memory entry to a shuffle list.  */
 
-static bfd_boolean add_memory_shuffle
-  PARAMS ((struct accumulate *, struct shuffle **head, struct shuffle **tail,
-	   bfd_byte *data, unsigned long size));
-
 static bfd_boolean
-add_memory_shuffle (ainfo, head, tail, data, size)
-     struct accumulate *ainfo;
-     struct shuffle **head;
-     struct shuffle **tail;
-     bfd_byte *data;
-     unsigned long size;
+add_memory_shuffle (struct accumulate *ainfo,
+		    struct shuffle **head,
+		    struct shuffle **tail,
+		    bfd_byte *data,
+		    unsigned long size)
 {
   struct shuffle *n;
 
@@ -477,7 +448,7 @@ add_memory_shuffle (ainfo, head, tail, data, size)
   n->next = NULL;
   n->size = size;
   n->filep = FALSE;
-  n->u.memory = (PTR) data;
+  n->u.memory = data;
   if (*head == (struct shuffle *) NULL)
     *head = n;
   if (*tail != (struct shuffle *) NULL)
@@ -489,12 +460,11 @@ add_memory_shuffle (ainfo, head, tail, data, size)
 /* Initialize the FDR hash table.  This returns a handle which is then
    passed in to bfd_ecoff_debug_accumulate, et. al.  */
 
-PTR
-bfd_ecoff_debug_init (output_bfd, output_debug, output_swap, info)
-     bfd *output_bfd ATTRIBUTE_UNUSED;
-     struct ecoff_debug_info *output_debug;
-     const struct ecoff_debug_swap *output_swap ATTRIBUTE_UNUSED;
-     struct bfd_link_info *info;
+void *
+bfd_ecoff_debug_init (bfd *output_bfd ATTRIBUTE_UNUSED,
+		      struct ecoff_debug_info *output_debug,
+		      const struct ecoff_debug_swap *output_swap ATTRIBUTE_UNUSED,
+		      struct bfd_link_info *info)
 {
   struct accumulate *ainfo;
   bfd_size_type amt = sizeof (struct accumulate);
@@ -544,18 +514,17 @@ bfd_ecoff_debug_init (output_bfd, output_debug, output_swap, info)
       return NULL;
     }
 
-  return (PTR) ainfo;
+  return ainfo;
 }
 
 /* Free the accumulated debugging information.  */
 
 void
-bfd_ecoff_debug_free (handle, output_bfd, output_debug, output_swap, info)
-     PTR handle;
-     bfd *output_bfd ATTRIBUTE_UNUSED;
-     struct ecoff_debug_info *output_debug ATTRIBUTE_UNUSED;
-     const struct ecoff_debug_swap *output_swap ATTRIBUTE_UNUSED;
-     struct bfd_link_info *info;
+bfd_ecoff_debug_free (void * handle,
+		      bfd *output_bfd ATTRIBUTE_UNUSED,
+		      struct ecoff_debug_info *output_debug ATTRIBUTE_UNUSED,
+		      const struct ecoff_debug_swap *output_swap ATTRIBUTE_UNUSED,
+		      struct bfd_link_info *info)
 {
   struct accumulate *ainfo = (struct accumulate *) handle;
 
@@ -578,28 +547,25 @@ bfd_ecoff_debug_free (handle, output_bfd, output_debug, output_swap, info)
    bfd_ecoff_debug_init.  */
 
 bfd_boolean
-bfd_ecoff_debug_accumulate (handle, output_bfd, output_debug, output_swap,
-			    input_bfd, input_debug, input_swap,
-			    info)
-     PTR handle;
-     bfd *output_bfd;
-     struct ecoff_debug_info *output_debug;
-     const struct ecoff_debug_swap *output_swap;
-     bfd *input_bfd;
-     struct ecoff_debug_info *input_debug;
-     const struct ecoff_debug_swap *input_swap;
-     struct bfd_link_info *info;
+bfd_ecoff_debug_accumulate (void * handle,
+			    bfd *output_bfd,
+			    struct ecoff_debug_info *output_debug,
+			    const struct ecoff_debug_swap *output_swap,
+			    bfd *input_bfd,
+			    struct ecoff_debug_info *input_debug,
+			    const struct ecoff_debug_swap *input_swap,
+			    struct bfd_link_info *info)
 {
   struct accumulate *ainfo = (struct accumulate *) handle;
-  void (* const swap_sym_in) PARAMS ((bfd *, PTR, SYMR *))
+  void (* const swap_sym_in) (bfd *, void *, SYMR *)
     = input_swap->swap_sym_in;
-  void (* const swap_rfd_in) PARAMS ((bfd *, PTR, RFDT *))
+  void (* const swap_rfd_in) (bfd *, void *, RFDT *)
     = input_swap->swap_rfd_in;
-  void (* const swap_sym_out) PARAMS ((bfd *, const SYMR *, PTR))
+  void (* const swap_sym_out) (bfd *, const SYMR *, void *)
     = output_swap->swap_sym_out;
-  void (* const swap_fdr_out) PARAMS ((bfd *, const FDR *, PTR))
+  void (* const swap_fdr_out) (bfd *, const FDR *, void *)
     = output_swap->swap_fdr_out;
-  void (* const swap_rfd_out) PARAMS ((bfd *, const RFDT *, PTR))
+  void (* const swap_rfd_out) (bfd *, const RFDT *, void *)
     = output_swap->swap_rfd_out;
   bfd_size_type external_pdr_size = output_swap->external_pdr_size;
   bfd_size_type external_sym_size = output_swap->external_sym_size;
@@ -627,7 +593,7 @@ bfd_ecoff_debug_accumulate (handle, output_bfd, output_debug, output_swap,
 
   /* Use section_adjust to hold the value to add to a symbol in a
      particular section.  */
-  memset ((PTR) section_adjust, 0, sizeof section_adjust);
+  memset (section_adjust, 0, sizeof section_adjust);
 
 #define SET(name, indx) \
   sec = bfd_get_section_by_name (input_bfd, name); \
@@ -697,7 +663,7 @@ bfd_ecoff_debug_accumulate (handle, output_bfd, output_debug, output_swap,
       if (input_debug->fdr != (FDR *) NULL)
 	fdr = *(FDR *) fdr_ptr;
       else
-	(*input_swap->swap_fdr_in) (input_bfd, (PTR) fdr_ptr, &fdr);
+	(*input_swap->swap_fdr_in) (input_bfd, fdr_ptr, &fdr);
 
       /* See if this FDR can be merged with an existing one.  */
       if (fdr.cbLine == 0 && fdr.rss != -1 && fdr.fMerge)
@@ -729,8 +695,7 @@ bfd_ecoff_debug_accumulate (handle, output_bfd, output_debug, output_swap,
 	  if (fh->val != -1)
 	    {
 	      input_debug->ifdmap[i] = fh->val;
-	      (*swap_rfd_out) (output_bfd, input_debug->ifdmap + i,
-			       (PTR) rfd_out);
+	      (*swap_rfd_out) (output_bfd, input_debug->ifdmap + i, rfd_out);
 
 	      /* Don't copy this FDR.  */
 	      continue;
@@ -740,7 +705,7 @@ bfd_ecoff_debug_accumulate (handle, output_bfd, output_debug, output_swap,
 	}
 
       input_debug->ifdmap[i] = output_symhdr->ifdMax + copied;
-      (*swap_rfd_out) (output_bfd, input_debug->ifdmap + i, (PTR) rfd_out);
+      (*swap_rfd_out) (output_bfd, input_debug->ifdmap + i, rfd_out);
       ++copied;
     }
 
@@ -758,10 +723,10 @@ bfd_ecoff_debug_accumulate (handle, output_bfd, output_debug, output_swap,
     {
       RFDT rfd;
 
-      (*swap_rfd_in) (input_bfd, (PTR) rfd_in, &rfd);
+      (*swap_rfd_in) (input_bfd, rfd_in, &rfd);
       BFD_ASSERT (rfd >= 0 && rfd < input_symhdr->ifdMax);
       rfd = input_debug->ifdmap[rfd];
-      (*swap_rfd_out) (output_bfd, &rfd, (PTR) rfd_out);
+      (*swap_rfd_out) (output_bfd, &rfd, rfd_out);
       rfd_out += external_rfd_size;
     }
 
@@ -798,7 +763,7 @@ bfd_ecoff_debug_accumulate (handle, output_bfd, output_debug, output_swap,
       if (input_debug->fdr != (FDR *) NULL)
 	fdr = *(FDR *) fdr_ptr;
       else
-	(*input_swap->swap_fdr_in) (input_bfd, (PTR) fdr_ptr, &fdr);
+	(*input_swap->swap_fdr_in) (input_bfd, fdr_ptr, &fdr);
 
       /* FIXME: It is conceivable that this FDR points to the .init or
 	 .fini section, in which case this will not do the right
@@ -825,7 +790,7 @@ bfd_ecoff_debug_accumulate (handle, output_bfd, output_debug, output_swap,
 	{
 	  SYMR internal_sym;
 
-	  (*swap_sym_in) (input_bfd, (PTR) lraw_src, &internal_sym);
+	  (*swap_sym_in) (input_bfd, lraw_src, &internal_sym);
 
 	  BFD_ASSERT (internal_sym.sc != scCommon
 		      && internal_sym.sc != scSCommon);
@@ -1007,8 +972,8 @@ bfd_ecoff_debug_accumulate (handle, output_bfd, output_debug, output_swap,
 	    {
 	      PDR pdr;
 
-	      (*input_swap->swap_pdr_in) (input_bfd, (PTR) in, &pdr);
-	      (*output_swap->swap_pdr_out) (output_bfd, &pdr, (PTR) out);
+	      (*input_swap->swap_pdr_in) (input_bfd, in, &pdr);
+	      (*output_swap->swap_pdr_out) (output_bfd, &pdr, out);
 	    }
 
 	  /* Swap over the optimization information.  */
@@ -1031,8 +996,8 @@ bfd_ecoff_debug_accumulate (handle, output_bfd, output_debug, output_swap,
 	    {
 	      OPTR opt;
 
-	      (*input_swap->swap_opt_in) (input_bfd, (PTR) in, &opt);
-	      (*output_swap->swap_opt_out) (output_bfd, &opt, (PTR) out);
+	      (*input_swap->swap_opt_in) (input_bfd, in, &opt);
+	      (*output_swap->swap_opt_out) (output_bfd, &opt, out);
 	    }
 	}
 
@@ -1064,17 +1029,12 @@ bfd_ecoff_debug_accumulate (handle, output_bfd, output_debug, output_swap,
 /* Add a string to the debugging information we are accumulating.
    Return the offset from the fdr string base.  */
 
-static long ecoff_add_string
-  PARAMS ((struct accumulate *, struct bfd_link_info *,
-	   struct ecoff_debug_info *, FDR *fdr, const char *string));
-
 static long
-ecoff_add_string (ainfo, info, debug, fdr, string)
-     struct accumulate *ainfo;
-     struct bfd_link_info *info;
-     struct ecoff_debug_info *debug;
-     FDR *fdr;
-     const char *string;
+ecoff_add_string (struct accumulate *ainfo,
+		  struct bfd_link_info *info,
+		  struct ecoff_debug_info *debug,
+		  FDR *fdr,
+		  const char *string)
 {
   HDRR *symhdr;
   size_t len;
@@ -1118,17 +1078,15 @@ ecoff_add_string (ainfo, info, debug, fdr, string)
 /* Add debugging information from a non-ECOFF file.  */
 
 bfd_boolean
-bfd_ecoff_debug_accumulate_other (handle, output_bfd, output_debug,
-				  output_swap, input_bfd, info)
-     PTR handle;
-     bfd *output_bfd;
-     struct ecoff_debug_info *output_debug;
-     const struct ecoff_debug_swap *output_swap;
-     bfd *input_bfd;
-     struct bfd_link_info *info;
+bfd_ecoff_debug_accumulate_other (void * handle,
+				  bfd *output_bfd,
+				  struct ecoff_debug_info *output_debug,
+				  const struct ecoff_debug_swap *output_swap,
+				  bfd *input_bfd,
+				  struct bfd_link_info *info)
 {
   struct accumulate *ainfo = (struct accumulate *) handle;
-  void (* const swap_sym_out) PARAMS ((bfd *, const SYMR *, PTR))
+  void (* const swap_sym_out) (bfd *, const SYMR *, void *)
     = output_swap->swap_sym_out;
   HDRR *output_symhdr = &output_debug->symbolic_header;
   FDR fdr;
@@ -1138,9 +1096,9 @@ bfd_ecoff_debug_accumulate_other (handle, output_bfd, output_debug,
   asymbol **sym_end;
   long symsize;
   long symcount;
-  PTR external_fdr;
+  void * external_fdr;
 
-  memset ((PTR) &fdr, 0, sizeof fdr);
+  memset (&fdr, 0, sizeof fdr);
 
   sec = bfd_get_section_by_name (input_bfd, ".text");
   if (sec != NULL)
@@ -1177,11 +1135,11 @@ bfd_ecoff_debug_accumulate_other (handle, output_bfd, output_debug,
   for (sym_ptr = symbols; sym_ptr != sym_end; sym_ptr++)
     {
       SYMR internal_sym;
-      PTR external_sym;
+      void * external_sym;
 
       if (((*sym_ptr)->flags & BSF_EXPORT) != 0)
 	continue;
-      memset ((PTR) &internal_sym, 0, sizeof internal_sym);
+      memset (&internal_sym, 0, sizeof internal_sym);
       internal_sym.iss = ecoff_add_string (ainfo, info, output_debug, &fdr,
 					   (*sym_ptr)->name);
 
@@ -1198,8 +1156,8 @@ bfd_ecoff_debug_accumulate_other (handle, output_bfd, output_debug,
       internal_sym.sc = scUndefined;
       internal_sym.index = indexNil;
 
-      external_sym = (PTR) objalloc_alloc (ainfo->memory,
-					   output_swap->external_sym_size);
+      external_sym = objalloc_alloc (ainfo->memory,
+				     output_swap->external_sym_size);
       if (!external_sym)
 	{
 	  bfd_set_error (bfd_error_no_memory);
@@ -1213,14 +1171,14 @@ bfd_ecoff_debug_accumulate_other (handle, output_bfd, output_debug,
       ++output_symhdr->isymMax;
     }
 
-  bfd_release (output_bfd, (PTR) symbols);
+  bfd_release (output_bfd, symbols);
 
   /* Leave everything else in the FDR zeroed out.  This will cause
      the lang field to be langC.  The fBigendian field will
      indicate little endian format, but it doesn't matter because
      it only applies to aux fields and there are none.  */
-  external_fdr = (PTR) objalloc_alloc (ainfo->memory,
-				       output_swap->external_fdr_size);
+  external_fdr = objalloc_alloc (ainfo->memory,
+				 output_swap->external_fdr_size);
   if (!external_fdr)
     {
       bfd_set_error (bfd_error_no_memory);
@@ -1242,14 +1200,12 @@ bfd_ecoff_debug_accumulate_other (handle, output_bfd, output_debug,
    this interface, so that must be changed to do something else.  */
 
 bfd_boolean
-bfd_ecoff_debug_externals (abfd, debug, swap, relocatable, get_extr,
-			   set_index)
-     bfd *abfd;
-     struct ecoff_debug_info *debug;
-     const struct ecoff_debug_swap *swap;
-     bfd_boolean relocatable;
-     bfd_boolean (*get_extr) PARAMS ((asymbol *, EXTR *));
-     void (*set_index) PARAMS ((asymbol *, bfd_size_type));
+bfd_ecoff_debug_externals (bfd *abfd,
+			   struct ecoff_debug_info *debug,
+			   const struct ecoff_debug_swap *swap,
+			   bfd_boolean relocatable,
+			   bfd_boolean (*get_extr) (asymbol *, EXTR *),
+			   void (*set_index) (asymbol *, bfd_size_type))
 {
   HDRR * const symhdr = &debug->symbolic_header;
   asymbol **sym_ptr_ptr;
@@ -1311,15 +1267,14 @@ bfd_ecoff_debug_externals (abfd, debug, swap, relocatable, get_extr,
 /* Add a single external symbol to the debugging information.  */
 
 bfd_boolean
-bfd_ecoff_debug_one_external (abfd, debug, swap, name, esym)
-     bfd *abfd;
-     struct ecoff_debug_info *debug;
-     const struct ecoff_debug_swap *swap;
-     const char *name;
-     EXTR *esym;
+bfd_ecoff_debug_one_external (bfd *abfd,
+			      struct ecoff_debug_info *debug,
+			      const struct ecoff_debug_swap *swap,
+			      const char *name,
+			      EXTR *esym)
 {
   const bfd_size_type external_ext_size = swap->external_ext_size;
-  void (* const swap_ext_out) PARAMS ((bfd *, const EXTR *, PTR))
+  void (* const swap_ext_out) (bfd *, const EXTR *, void *)
     = swap->swap_ext_out;
   HDRR * const symhdr = &debug->symbolic_header;
   size_t namelen;
@@ -1365,10 +1320,9 @@ bfd_ecoff_debug_one_external (abfd, debug, swap, name, esym)
 /* Align the ECOFF debugging information.  */
 
 static void
-ecoff_align_debug (abfd, debug, swap)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     struct ecoff_debug_info *debug;
-     const struct ecoff_debug_swap *swap;
+ecoff_align_debug (bfd *abfd ATTRIBUTE_UNUSED,
+		   struct ecoff_debug_info *debug,
+		   const struct ecoff_debug_swap *swap)
 {
   HDRR * const symhdr = &debug->symbolic_header;
   bfd_size_type debug_align, aux_align, rfd_align;
@@ -1383,7 +1337,7 @@ ecoff_align_debug (abfd, debug, swap)
   if (add != debug_align)
     {
       if (debug->line != (unsigned char *) NULL)
-	memset ((PTR) (debug->line + symhdr->cbLine), 0, add);
+	memset ((debug->line + symhdr->cbLine), 0, add);
       symhdr->cbLine += add;
     }
 
@@ -1391,7 +1345,7 @@ ecoff_align_debug (abfd, debug, swap)
   if (add != debug_align)
     {
       if (debug->ss != (char *) NULL)
-	memset ((PTR) (debug->ss + symhdr->issMax), 0, add);
+	memset ((debug->ss + symhdr->issMax), 0, add);
       symhdr->issMax += add;
     }
 
@@ -1399,7 +1353,7 @@ ecoff_align_debug (abfd, debug, swap)
   if (add != debug_align)
     {
       if (debug->ssext != (char *) NULL)
-	memset ((PTR) (debug->ssext + symhdr->issExtMax), 0, add);
+	memset ((debug->ssext + symhdr->issExtMax), 0, add);
       symhdr->issExtMax += add;
     }
 
@@ -1407,7 +1361,7 @@ ecoff_align_debug (abfd, debug, swap)
   if (add != aux_align)
     {
       if (debug->external_aux != (union aux_ext *) NULL)
-	memset ((PTR) (debug->external_aux + symhdr->iauxMax), 0,
+	memset ((debug->external_aux + symhdr->iauxMax), 0,
 		add * sizeof (union aux_ext));
       symhdr->iauxMax += add;
     }
@@ -1415,9 +1369,9 @@ ecoff_align_debug (abfd, debug, swap)
   add = rfd_align - (symhdr->crfd & (rfd_align - 1));
   if (add != rfd_align)
     {
-      if (debug->external_rfd != (PTR) NULL)
-	memset ((PTR) ((char *) debug->external_rfd
-		       + symhdr->crfd * swap->external_rfd_size),
+      if (debug->external_rfd != NULL)
+	memset (((char *) debug->external_rfd
+		 + symhdr->crfd * swap->external_rfd_size),
 		0, (size_t) (add * swap->external_rfd_size));
       symhdr->crfd += add;
     }
@@ -1426,10 +1380,9 @@ ecoff_align_debug (abfd, debug, swap)
 /* Return the size required by the ECOFF debugging information.  */
 
 bfd_size_type
-bfd_ecoff_debug_size (abfd, debug, swap)
-     bfd *abfd;
-     struct ecoff_debug_info *debug;
-     const struct ecoff_debug_swap *swap;
+bfd_ecoff_debug_size (bfd *abfd,
+		      struct ecoff_debug_info *debug,
+		      const struct ecoff_debug_swap *swap)
 {
   bfd_size_type tot;
 
@@ -1461,11 +1414,10 @@ bfd_ecoff_debug_size (abfd, debug, swap)
    correctly.  */
 
 static bfd_boolean
-ecoff_write_symhdr (abfd, debug, swap, where)
-     bfd *abfd;
-     struct ecoff_debug_info *debug;
-     const struct ecoff_debug_swap *swap;
-     file_ptr where;
+ecoff_write_symhdr (bfd *abfd,
+		    struct ecoff_debug_info *debug,
+		    const struct ecoff_debug_swap *swap,
+		    file_ptr where)
 {
   HDRR * const symhdr = &debug->symbolic_header;
   char *buff = NULL;
@@ -1528,11 +1480,10 @@ ecoff_write_symhdr (abfd, debug, swap, where)
    symbolic header.  */
 
 bfd_boolean
-bfd_ecoff_write_debug (abfd, debug, swap, where)
-     bfd *abfd;
-     struct ecoff_debug_info *debug;
-     const struct ecoff_debug_swap *swap;
-     file_ptr where;
+bfd_ecoff_write_debug (bfd *abfd,
+		       struct ecoff_debug_info *debug,
+		       const struct ecoff_debug_swap *swap,
+		       file_ptr where)
 {
   HDRR * const symhdr = &debug->symbolic_header;
 
@@ -1542,7 +1493,7 @@ bfd_ecoff_write_debug (abfd, debug, swap, where)
 #define WRITE(ptr, count, size, offset) \
   BFD_ASSERT (symhdr->offset == 0 \
 	      || (bfd_vma) bfd_tell (abfd) == symhdr->offset); \
-  if (bfd_bwrite ((PTR) debug->ptr, (bfd_size_type) size * symhdr->count, abfd)\
+  if (bfd_bwrite (debug->ptr, (bfd_size_type) size * symhdr->count, abfd)\
       != size * symhdr->count) \
     return FALSE;
 
@@ -1565,18 +1516,14 @@ bfd_ecoff_write_debug (abfd, debug, swap, where)
 
 /* Write out a shuffle list.  */
 
-static bfd_boolean ecoff_write_shuffle
-  PARAMS ((bfd *, const struct ecoff_debug_swap *, struct shuffle *,
-	   PTR space));
 
 static bfd_boolean
-ecoff_write_shuffle (abfd, swap, shuffle, space)
-     bfd *abfd;
-     const struct ecoff_debug_swap *swap;
-     struct shuffle *shuffle;
-     PTR space;
+ecoff_write_shuffle (bfd *abfd,
+		     const struct ecoff_debug_swap *swap,
+		     struct shuffle *shuffle,
+		     void * space)
 {
-  register struct shuffle *l;
+  struct shuffle *l;
   unsigned long total;
 
   total = 0;
@@ -1609,7 +1556,7 @@ ecoff_write_shuffle (abfd, swap, shuffle, space)
       if (s == NULL && i != 0)
 	return FALSE;
 
-      if (bfd_bwrite ((PTR) s, (bfd_size_type) i, abfd) != i)
+      if (bfd_bwrite (s, (bfd_size_type) i, abfd) != i)
 	{
 	  free (s);
 	  return FALSE;
@@ -1624,23 +1571,22 @@ ecoff_write_shuffle (abfd, swap, shuffle, space)
    information.  */
 
 bfd_boolean
-bfd_ecoff_write_accumulated_debug (handle, abfd, debug, swap, info, where)
-     PTR handle;
-     bfd *abfd;
-     struct ecoff_debug_info *debug;
-     const struct ecoff_debug_swap *swap;
-     struct bfd_link_info *info;
-     file_ptr where;
+bfd_ecoff_write_accumulated_debug (void * handle,
+				   bfd *abfd,
+				   struct ecoff_debug_info *debug,
+				   const struct ecoff_debug_swap *swap,
+				   struct bfd_link_info *info,
+				   file_ptr where)
 {
   struct accumulate *ainfo = (struct accumulate *) handle;
-  PTR space = NULL;
+  void * space = NULL;
   bfd_size_type amt;
 
   if (! ecoff_write_symhdr (abfd, debug, swap, where))
     goto error_return;
 
   amt = ainfo->largest_file_shuffle;
-  space = (PTR) bfd_malloc (amt);
+  space = bfd_malloc (amt);
   if (space == NULL && ainfo->largest_file_shuffle != 0)
     goto error_return;
 
@@ -1667,7 +1613,7 @@ bfd_ecoff_write_accumulated_debug (handle, abfd, debug, swap, info, where)
 
       BFD_ASSERT (ainfo->ss == (struct shuffle *) NULL);
       null = 0;
-      if (bfd_bwrite ((PTR) &null, (bfd_size_type) 1, abfd) != 1)
+      if (bfd_bwrite (&null, (bfd_size_type) 1, abfd) != 1)
 	goto error_return;
       total = 1;
       BFD_ASSERT (ainfo->ss_hash == NULL || ainfo->ss_hash->val == 1);
@@ -1679,7 +1625,7 @@ bfd_ecoff_write_accumulated_debug (handle, abfd, debug, swap, info, where)
 
 	  len = strlen (sh->root.string);
 	  amt = len + 1;
-	  if (bfd_bwrite ((PTR) sh->root.string, amt, abfd) != amt)
+	  if (bfd_bwrite (sh->root.string, amt, abfd) != amt)
 	    goto error_return;
 	  total += len + 1;
 	}
@@ -1694,7 +1640,7 @@ bfd_ecoff_write_accumulated_debug (handle, abfd, debug, swap, info, where)
 	  if (s == NULL && i != 0)
 	    goto error_return;
 
-	  if (bfd_bwrite ((PTR) s, (bfd_size_type) i, abfd) != i)
+	  if (bfd_bwrite (s, (bfd_size_type) i, abfd) != i)
 	    {
 	      free (s);
 	      goto error_return;
@@ -1719,7 +1665,7 @@ bfd_ecoff_write_accumulated_debug (handle, abfd, debug, swap, info, where)
       if (s == NULL && i != 0)
 	goto error_return;
 
-      if (bfd_bwrite ((PTR) s, (bfd_size_type) i, abfd) != i)
+      if (bfd_bwrite (s, (bfd_size_type) i, abfd) != i)
 	{
 	  free (s);
 	  goto error_return;
@@ -1755,9 +1701,7 @@ bfd_ecoff_write_accumulated_debug (handle, abfd, debug, swap, info, where)
 /* Compare FDR entries.  This is called via qsort.  */
 
 static int
-cmp_fdrtab_entry (leftp, rightp)
-     const PTR leftp;
-     const PTR rightp;
+cmp_fdrtab_entry (const void * leftp, const void * rightp)
 {
   const struct ecoff_fdrtab_entry *lp =
     (const struct ecoff_fdrtab_entry *) leftp;
@@ -1778,11 +1722,10 @@ cmp_fdrtab_entry (leftp, rightp)
    search.  */
 
 static bfd_boolean
-mk_fdrtab (abfd, debug_info, debug_swap, line_info)
-     bfd *abfd;
-     struct ecoff_debug_info * const debug_info;
-     const struct ecoff_debug_swap * const debug_swap;
-     struct ecoff_find_line *line_info;
+mk_fdrtab (bfd *abfd,
+	   struct ecoff_debug_info * const debug_info,
+	   const struct ecoff_debug_swap * const debug_swap,
+	   struct ecoff_find_line *line_info)
 {
   struct ecoff_fdrtab_entry *tab;
   FDR *fdr_ptr;
@@ -1861,7 +1804,7 @@ mk_fdrtab (abfd, debug_info, debug_swap, line_info)
      The table is mostly sorted already, but there are cases (e.g.,
      static functions in include files), where this does not hold.
      Use "odump -PFv" to verify...  */
-  qsort ((PTR) line_info->fdrtab, (size_t) len,
+  qsort (line_info->fdrtab, (size_t) len,
 	 sizeof (struct ecoff_fdrtab_entry), cmp_fdrtab_entry);
 
   return TRUE;
@@ -1870,9 +1813,7 @@ mk_fdrtab (abfd, debug_info, debug_swap, line_info)
 /* Return index of first FDR that covers to OFFSET.  */
 
 static long
-fdrtab_lookup (line_info, offset)
-     struct ecoff_find_line *line_info;
-     bfd_vma offset;
+fdrtab_lookup (struct ecoff_find_line *line_info, bfd_vma offset)
 {
   long low, high, len;
   long mid = -1;
@@ -1920,11 +1861,10 @@ fdrtab_lookup (line_info, offset)
    LINE_INFO->cache.  */
 
 static bfd_boolean
-lookup_line (abfd, debug_info, debug_swap, line_info)
-     bfd *abfd;
-     struct ecoff_debug_info * const debug_info;
-     const struct ecoff_debug_swap * const debug_swap;
-     struct ecoff_find_line *line_info;
+lookup_line (bfd *abfd,
+	     struct ecoff_debug_info * const debug_info,
+	     const struct ecoff_debug_swap * const debug_swap,
+	     struct ecoff_find_line *line_info)
 {
   struct ecoff_fdrtab_entry *tab;
   bfd_vma offset;
@@ -2130,7 +2070,7 @@ lookup_line (abfd, debug_info, debug_swap, line_info)
 	  pdr_ptr = ((char *) debug_info->external_pdr
 		     + fdr_ptr->ipdFirst * external_pdr_size);
 	  pdr_end = pdr_ptr + fdr_ptr->cpd * external_pdr_size;
-	  (*debug_swap->swap_pdr_in) (abfd, (PTR) pdr_ptr, &pdr);
+	  (*debug_swap->swap_pdr_in) (abfd, pdr_ptr, &pdr);
 	  /* Find PDR that is closest to OFFSET.  If pdr.prof is set,
 	     the procedure entry-point *may* be 0x10 below pdr.adr.  We
 	     simply pretend that pdr.prof *implies* a lower entry-point.
@@ -2139,7 +2079,7 @@ lookup_line (abfd, debug_info, debug_swap, line_info)
 	  for (pdr_hold = NULL;
 	       pdr_ptr < pdr_end;
 	       (pdr_ptr += external_pdr_size,
-		(*debug_swap->swap_pdr_in) (abfd, (PTR) pdr_ptr, &pdr)))
+		(*debug_swap->swap_pdr_in) (abfd, pdr_ptr, &pdr)))
 	    {
 	      if (offset >= (pdr.adr - 0x10 * pdr.prof))
 		{
@@ -2173,7 +2113,7 @@ lookup_line (abfd, debug_info, debug_swap, line_info)
       /* Phew, finally we got something that we can hold onto.  */
       fdr_ptr = best_fdr;
       pdr_ptr = best_pdr;
-      (*debug_swap->swap_pdr_in) (abfd, (PTR) pdr_ptr, &pdr);
+      (*debug_swap->swap_pdr_in) (abfd, pdr_ptr, &pdr);
       /* Now we can look for the actual line number.  The line numbers
          are stored in a very funky format, which I won't try to
          describe.  The search is bounded by the end of the FDRs line
@@ -2418,17 +2358,15 @@ lookup_line (abfd, debug_info, debug_swap, line_info)
 /* Do the work of find_nearest_line.  */
 
 bfd_boolean
-_bfd_ecoff_locate_line (abfd, section, offset, debug_info, debug_swap,
-			line_info, filename_ptr, functionname_ptr, retline_ptr)
-     bfd *abfd;
-     asection *section;
-     bfd_vma offset;
-     struct ecoff_debug_info * const debug_info;
-     const struct ecoff_debug_swap * const debug_swap;
-     struct ecoff_find_line *line_info;
-     const char **filename_ptr;
-     const char **functionname_ptr;
-     unsigned int *retline_ptr;
+_bfd_ecoff_locate_line (bfd *abfd,
+			asection *section,
+			bfd_vma offset,
+			struct ecoff_debug_info * const debug_info,
+			const struct ecoff_debug_swap * const debug_swap,
+			struct ecoff_find_line *line_info,
+			const char **filename_ptr,
+			const char **functionname_ptr,
+			unsigned int *retline_ptr)
 {
   offset += section->vma;
 
@@ -2464,13 +2402,8 @@ _bfd_ecoff_locate_line (abfd, section, offset, debug_info, debug_swap,
 
 /* Collect a shuffle into a memory buffer.  */
 
-static bfd_boolean ecoff_collect_shuffle
-  PARAMS ((struct shuffle *, bfd_byte *));
-
 static bfd_boolean
-ecoff_collect_shuffle (l, buff)
-     struct shuffle *l;
-     bfd_byte *buff;
+ecoff_collect_shuffle (struct shuffle *l, bfd_byte *buff)
 {
   unsigned long total;
 
@@ -2496,9 +2429,8 @@ ecoff_collect_shuffle (l, buff)
 /* Copy PDR information into a memory buffer.  */
 
 bfd_boolean
-_bfd_ecoff_get_accumulated_pdr (handle, buff)
-     PTR handle;
-     bfd_byte *buff;
+_bfd_ecoff_get_accumulated_pdr (void * handle,
+				bfd_byte *buff)
 {
   struct accumulate *ainfo = (struct accumulate *) handle;
 
@@ -2508,9 +2440,7 @@ _bfd_ecoff_get_accumulated_pdr (handle, buff)
 /* Copy symbol information into a memory buffer.  */
 
 bfd_boolean
-_bfd_ecoff_get_accumulated_sym (handle, buff)
-     PTR handle;
-     bfd_byte *buff;
+_bfd_ecoff_get_accumulated_sym (void * handle, bfd_byte *buff)
 {
   struct accumulate *ainfo = (struct accumulate *) handle;
 
@@ -2520,9 +2450,7 @@ _bfd_ecoff_get_accumulated_sym (handle, buff)
 /* Copy the string table into a memory buffer.  */
 
 bfd_boolean
-_bfd_ecoff_get_accumulated_ss (handle, buff)
-     PTR handle;
-     bfd_byte *buff;
+_bfd_ecoff_get_accumulated_ss (void * handle, bfd_byte *buff)
 {
   struct accumulate *ainfo = (struct accumulate *) handle;
   struct string_hash_entry *sh;
@@ -2541,7 +2469,7 @@ _bfd_ecoff_get_accumulated_ss (handle, buff)
       size_t len;
 
       len = strlen (sh->root.string);
-      memcpy (buff, (PTR) sh->root.string, len + 1);
+      memcpy (buff, sh->root.string, len + 1);
       total += len + 1;
       buff += len + 1;
     }
diff --git a/bfd/elf-attrs.c b/bfd/elf-attrs.c
index 569e846..4237af5 100644
--- a/bfd/elf-attrs.c
+++ b/bfd/elf-attrs.c
@@ -1,5 +1,5 @@
 /* ELF attributes support (based on ARM EABI attributes).
-   Copyright 2005, 2006, 2007, 2009, 2010
+   Copyright 2005, 2006, 2007, 2009, 2010, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -428,7 +428,7 @@ _bfd_elf_parse_attributes (bfd *abfd, Elf_Internal_Shdr * hdr)
   bfd_byte *contents;
   bfd_byte *p;
   bfd_vma len;
-  const char *std_section;
+  const char *std_sec;
 
   contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
   if (!contents)
@@ -440,7 +440,7 @@ _bfd_elf_parse_attributes (bfd *abfd, Elf_Internal_Shdr * hdr)
       return;
     }
   p = contents;
-  std_section = get_elf_backend_data (abfd)->obj_attrs_vendor;
+  std_sec = get_elf_backend_data (abfd)->obj_attrs_vendor;
   if (*(p++) == 'A')
     {
       len = hdr->sh_size - 1;
@@ -455,11 +455,11 @@ _bfd_elf_parse_attributes (bfd *abfd, Elf_Internal_Shdr * hdr)
 	  if (section_len > len)
 	    section_len = len;
 	  len -= section_len;
-	  namelen = strlen ((char *)p) + 1;
+	  namelen = strlen ((char *) p) + 1;
 	  section_len -= namelen + 4;
-	  if (std_section && strcmp ((char *)p, std_section) == 0)
+	  if (std_sec && strcmp ((char *) p, std_sec) == 0)
 	    vendor = OBJ_ATTR_PROC;
-	  else if (strcmp ((char *)p, "gnu") == 0)
+	  else if (strcmp ((char *) p, "gnu") == 0)
 	    vendor = OBJ_ATTR_GNU;
 	  else
 	    {
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index 486b76e..889ce12 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -1,6 +1,6 @@
 /* BFD back-end data structures for ELF files.
    Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-   2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
    Written by Cygnus Support.
 
@@ -428,6 +428,7 @@ enum elf_target_id
   TIC6X_ELF_DATA,
   X86_64_ELF_DATA,
   XTENSA_ELF_DATA,
+  XGATE_ELF_DATA,
   TILEGX_ELF_DATA,
   TILEPRO_ELF_DATA,
   GENERIC_ELF_DATA
@@ -1185,7 +1186,8 @@ struct elf_backend_data
      see elf.c, elfcode.h.  */
   bfd *(*elf_backend_bfd_from_remote_memory)
      (bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
-      int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr, int len));
+      int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr,
+				 bfd_size_type len));
 
   /* This function is used by `_bfd_elf_get_synthetic_symtab';
      see elf.c.  */
@@ -1221,6 +1223,12 @@ struct elf_backend_data
   /* Return TRUE if type is a function symbol type.  */
   bfd_boolean (*is_function_type) (unsigned int type);
 
+  /* If the ELF symbol SYM might be a function in SEC, return the
+     function size and set *CODE_OFF to the function's entry point,
+     otherwise return zero.  */
+  bfd_size_type (*maybe_function_sym) (const asymbol *sym, asection *sec,
+				       bfd_vma *code_off);
+
   /* Used to handle bad SHF_LINK_ORDER input.  */
   bfd_error_handler_type link_order_error_handler;
 
@@ -1361,6 +1369,9 @@ struct bfd_elf_section_data
   /* The ELF header for this section.  */
   Elf_Internal_Shdr this_hdr;
 
+  /* INPUT_SECTION_FLAGS if specified in the linker script.  */
+  struct flag_info *section_flag_info;
+
   /* Information about the REL and RELA reloc sections associated
      with this section, if any.  */
   struct bfd_elf_section_reloc_data rel, rela;
@@ -1413,14 +1424,14 @@ struct bfd_elf_section_data
   void *sec_info;
 };
 
-#define elf_section_data(sec)  ((struct bfd_elf_section_data*)(sec)->used_by_bfd)
+#define elf_section_data(sec) ((struct bfd_elf_section_data*)(sec)->used_by_bfd)
 #define elf_linked_to_section(sec) (elf_section_data(sec)->linked_to)
-#define elf_section_type(sec)  (elf_section_data(sec)->this_hdr.sh_type)
-#define elf_section_flags(sec) (elf_section_data(sec)->this_hdr.sh_flags)
-#define elf_group_name(sec)    (elf_section_data(sec)->group.name)
-#define elf_group_id(sec)      (elf_section_data(sec)->group.id)
-#define elf_next_in_group(sec) (elf_section_data(sec)->next_in_group)
-#define elf_fde_list(sec)      (elf_section_data(sec)->fde_list)
+#define elf_section_type(sec)	(elf_section_data(sec)->this_hdr.sh_type)
+#define elf_section_flags(sec)	(elf_section_data(sec)->this_hdr.sh_flags)
+#define elf_group_name(sec)	(elf_section_data(sec)->group.name)
+#define elf_group_id(sec)	(elf_section_data(sec)->group.id)
+#define elf_next_in_group(sec)	(elf_section_data(sec)->next_in_group)
+#define elf_fde_list(sec)	(elf_section_data(sec)->fde_list)
 #define elf_sec_group(sec)	(elf_section_data(sec)->sec_group)
 
 #define xvec_get_elf_backend_data(xvec) \
@@ -1807,8 +1818,7 @@ extern void bfd_elf_set_group_contents
   (bfd *, asection *, void *);
 extern asection *_bfd_elf_check_kept_section
   (asection *, struct bfd_link_info *);
-extern void _bfd_elf_link_just_syms
-  (asection *, struct bfd_link_info *);
+#define _bfd_elf_link_just_syms _bfd_generic_link_just_syms
 extern void _bfd_elf_copy_link_hash_symbol_type
   (bfd *, struct bfd_link_hash_entry *, struct bfd_link_hash_entry *);
 extern bfd_boolean _bfd_elf_size_group_sections
@@ -1942,6 +1952,8 @@ extern bfd_boolean _bfd_elf_write_section_eh_frame
   (bfd *, struct bfd_link_info *, asection *, bfd_byte *);
 extern bfd_boolean _bfd_elf_write_section_eh_frame_hdr
   (bfd *, struct bfd_link_info *);
+extern bfd_boolean _bfd_elf_eh_frame_present
+  (struct bfd_link_info *);
 extern bfd_boolean _bfd_elf_maybe_strip_eh_frame_hdr
   (struct bfd_link_info *);
 
@@ -2132,9 +2144,6 @@ extern unsigned int _bfd_elf_common_section_index
 extern asection *_bfd_elf_common_section
   (asection *);
 
-extern void _bfd_dwarf2_cleanup_debug_info
-  (bfd *);
-
 extern bfd_vma _bfd_elf_default_got_elt_size
 (bfd *, struct bfd_link_info *, struct elf_link_hash_entry *, bfd *,
  unsigned long);
@@ -2200,10 +2209,13 @@ extern bfd_boolean _bfd_elf_map_sections_to_segments
 
 extern bfd_boolean _bfd_elf_is_function_type (unsigned int);
 
+extern bfd_size_type _bfd_elf_maybe_function_sym (const asymbol *, asection *,
+						  bfd_vma *);
+
 extern int bfd_elf_get_default_section_type (flagword);
 
-extern void bfd_elf_lookup_section_flags
-  (struct bfd_link_info *, struct flag_info *);
+extern bfd_boolean bfd_elf_lookup_section_flags
+  (struct bfd_link_info *, struct flag_info *, asection *);
 
 extern Elf_Internal_Phdr * _bfd_elf_find_segment_containing_section
   (bfd * abfd, asection * section);
@@ -2250,10 +2262,10 @@ extern char *elfcore_write_register_note
 
 extern bfd *_bfd_elf32_bfd_from_remote_memory
   (bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
-   int (*target_read_memory) (bfd_vma, bfd_byte *, int));
+   int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type));
 extern bfd *_bfd_elf64_bfd_from_remote_memory
   (bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
-   int (*target_read_memory) (bfd_vma, bfd_byte *, int));
+   int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type));
 
 extern bfd_vma bfd_elf_obj_attr_size (bfd *);
 extern void bfd_elf_set_obj_attr_contents (bfd *, bfd_byte *, bfd_vma);
@@ -2403,10 +2415,12 @@ extern asection _bfd_elf_large_com_section;
    link, we remove such relocations.  Otherwise, we just want the
    section contents zeroed and avoid any special processing.  */
 #define RELOC_AGAINST_DISCARDED_SECTION(info, input_bfd, input_section,	\
-					rel, relend, howto, contents)	\
+					rel, count, relend,		\
+					howto, index, contents)		\
   {									\
+    int i_;								\
     _bfd_clear_contents (howto, input_bfd, input_section,		\
-			 contents + rel->r_offset);			\
+			 contents + rel[index].r_offset);		\
 									\
     if (info->relocatable						\
 	&& (input_section->flags & SEC_DEBUGGING))			\
@@ -2418,23 +2432,28 @@ extern asection _bfd_elf_large_com_section;
 	rel_hdr = _bfd_elf_single_rel_hdr (input_section->output_section); \
 									\
 	/* Avoid empty output section.  */				\
-	if (rel_hdr->sh_size > rel_hdr->sh_entsize)			\
+	if (rel_hdr->sh_size > count * rel_hdr->sh_entsize)		\
 	  {								\
-	    rel_hdr->sh_size -= rel_hdr->sh_entsize;			\
+	    rel_hdr->sh_size -= count * rel_hdr->sh_entsize;		\
 	    rel_hdr = _bfd_elf_single_rel_hdr (input_section);		\
-	    rel_hdr->sh_size -= rel_hdr->sh_entsize;			\
+	    rel_hdr->sh_size -= count * rel_hdr->sh_entsize;		\
 									\
-	    memmove (rel, rel + 1, (relend - rel - 1) * sizeof (*rel));	\
+	    memmove (rel, rel + count,					\
+		     (relend - rel - count) * sizeof (*rel));		\
 									\
-	    input_section->reloc_count--;				\
-	    relend--;							\
+	    input_section->reloc_count -= count;			\
+	    relend -= count;						\
 	    rel--;							\
 	    continue;							\
 	  }								\
       }									\
 									\
-    rel->r_info = 0;							\
-    rel->r_addend = 0;							\
+    for (i_ = 0; i_ < count; i_++)					\
+      {									\
+	rel[i_].r_info = 0;						\
+	rel[i_].r_addend = 0;						\
+      }									\
+    rel += count - 1;							\
     continue;								\
   }
 
diff --git a/bfd/elf-eh-frame.c b/bfd/elf-eh-frame.c
index 54142b2..a75d806 100644
--- a/bfd/elf-eh-frame.c
+++ b/bfd/elf-eh-frame.c
@@ -1,6 +1,6 @@
 /* .eh_frame section optimization.
-   Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
-   Free Software Foundation, Inc.
+   Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
+   2012 Free Software Foundation, Inc.
    Written by Jakub Jelinek <jakub at redhat.com>.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -491,7 +491,7 @@ _bfd_elf_parse_eh_frame (bfd *abfd, struct bfd_link_info *info,
     return;
 
   if (sec->size == 0
-      || sec->sec_info_type != ELF_INFO_TYPE_NONE)
+      || sec->sec_info_type != SEC_INFO_TYPE_NONE)
     {
       /* This file does not contain .eh_frame information.  */
       return;
@@ -904,7 +904,7 @@ _bfd_elf_parse_eh_frame (bfd *abfd, struct bfd_link_info *info,
   BFD_ASSERT (cie_count == num_cies);
 
   elf_section_data (sec)->sec_info = sec_info;
-  sec->sec_info_type = ELF_INFO_TYPE_EH_FRAME;
+  sec->sec_info_type = SEC_INFO_TYPE_EH_FRAME;
   if (hdr_info->merge_cies)
     {
       sec_info->cies = local_cies;
@@ -1137,7 +1137,7 @@ _bfd_elf_discard_section_eh_frame
   struct eh_frame_hdr_info *hdr_info;
   unsigned int ptr_size, offset;
 
-  if (sec->sec_info_type != ELF_INFO_TYPE_EH_FRAME)
+  if (sec->sec_info_type != SEC_INFO_TYPE_EH_FRAME)
     return FALSE;
 
   sec_info = (struct eh_frame_sec_info *) elf_section_data (sec)->sec_info;
@@ -1247,6 +1247,26 @@ _bfd_elf_discard_section_eh_frame_hdr (bfd *abfd, struct bfd_link_info *info)
   return TRUE;
 }
 
+/* Return true if there is at least one non-empty .eh_frame section in
+   input files.  Can only be called after ld has mapped input to
+   output sections, and before sections are stripped.  */
+bfd_boolean
+_bfd_elf_eh_frame_present (struct bfd_link_info *info)
+{
+  asection *eh = bfd_get_section_by_name (info->output_bfd, ".eh_frame");
+
+  if (eh == NULL)
+    return FALSE;
+
+  /* Count only sections which have at least a single CIE or FDE.
+     There cannot be any CIE or FDE <= 8 bytes.  */
+  for (eh = eh->map_head.s; eh != NULL; eh = eh->map_head.s)
+    if (eh->size > 8)
+      return TRUE;
+
+  return FALSE;
+}
+
 /* This function is called from size_dynamic_sections.
    It needs to decide whether .eh_frame_hdr should be output or not,
    because when the dynamic symbol table has been sized it is too late
@@ -1255,8 +1275,6 @@ _bfd_elf_discard_section_eh_frame_hdr (bfd *abfd, struct bfd_link_info *info)
 bfd_boolean
 _bfd_elf_maybe_strip_eh_frame_hdr (struct bfd_link_info *info)
 {
-  asection *o;
-  bfd *abfd;
   struct elf_link_hash_table *htab;
   struct eh_frame_hdr_info *hdr_info;
 
@@ -1265,24 +1283,9 @@ _bfd_elf_maybe_strip_eh_frame_hdr (struct bfd_link_info *info)
   if (hdr_info->hdr_sec == NULL)
     return TRUE;
 
-  if (bfd_is_abs_section (hdr_info->hdr_sec->output_section))
-    {
-      hdr_info->hdr_sec = NULL;
-      return TRUE;
-    }
-
-  abfd = NULL;
-  if (info->eh_frame_hdr)
-    for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link_next)
-      {
-	/* Count only sections which have at least a single CIE or FDE.
-	   There cannot be any CIE or FDE <= 8 bytes.  */
-	o = bfd_get_section_by_name (abfd, ".eh_frame");
-	if (o && o->size > 8 && !bfd_is_abs_section (o->output_section))
-	  break;
-      }
-
-  if (abfd == NULL)
+  if (bfd_is_abs_section (hdr_info->hdr_sec->output_section)
+      || !info->eh_frame_hdr
+      || !_bfd_elf_eh_frame_present (info))
     {
       hdr_info->hdr_sec->flags |= SEC_EXCLUDE;
       hdr_info->hdr_sec = NULL;
@@ -1307,7 +1310,7 @@ _bfd_elf_eh_frame_section_offset (bfd *output_bfd ATTRIBUTE_UNUSED,
   struct eh_frame_sec_info *sec_info;
   unsigned int lo, hi, mid;
 
-  if (sec->sec_info_type != ELF_INFO_TYPE_EH_FRAME)
+  if (sec->sec_info_type != SEC_INFO_TYPE_EH_FRAME)
     return offset;
   sec_info = (struct eh_frame_sec_info *) elf_section_data (sec)->sec_info;
 
@@ -1395,7 +1398,7 @@ _bfd_elf_write_section_eh_frame (bfd *abfd,
   unsigned int ptr_size;
   struct eh_cie_fde *ent;
 
-  if (sec->sec_info_type != ELF_INFO_TYPE_EH_FRAME)
+  if (sec->sec_info_type != SEC_INFO_TYPE_EH_FRAME)
     /* FIXME: octets_per_byte.  */
     return bfd_set_section_contents (abfd, sec->output_section, contents,
 				     sec->output_offset, sec->size);
diff --git a/bfd/elf-m10200.c b/bfd/elf-m10200.c
index a38f4db..f427f97 100644
--- a/bfd/elf-m10200.c
+++ b/bfd/elf-m10200.c
@@ -1,6 +1,6 @@
 /* Matsushita 10200 specific support for 32-bit ELF
    Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-   2007, 2010
+   2007, 2010, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -25,29 +25,13 @@
 #include "libbfd.h"
 #include "elf-bfd.h"
 
-static reloc_howto_type *bfd_elf32_bfd_reloc_type_lookup
-  PARAMS ((bfd *abfd, bfd_reloc_code_real_type code));
-static void mn10200_info_to_howto
-  PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
-static bfd_boolean mn10200_elf_relax_delete_bytes
-  PARAMS ((bfd *, asection *, bfd_vma, int));
-static bfd_boolean mn10200_elf_symbol_address_p
-  PARAMS ((bfd *, asection *, Elf_Internal_Sym *, bfd_vma));
-static bfd_reloc_status_type mn10200_elf_final_link_relocate
-  PARAMS ((reloc_howto_type *, bfd *, bfd *, asection *,
-	   bfd_byte *, bfd_vma, bfd_vma, bfd_vma,
-	   struct bfd_link_info *, asection *, int));
-static bfd_boolean mn10200_elf_relocate_section
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *,
-	   bfd_byte *, Elf_Internal_Rela *, Elf_Internal_Sym *,
-	   asection **));
-static bfd_boolean mn10200_elf_relax_section
-  PARAMS ((bfd *, asection *, struct bfd_link_info *, bfd_boolean *));
-static bfd_byte * mn10200_elf_get_relocated_section_contents
-  PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_order *,
-	   bfd_byte *, bfd_boolean, asymbol **));
-
-enum reloc_type {
+static bfd_boolean
+mn10200_elf_relax_delete_bytes (bfd *, asection *, bfd_vma, int);
+static bfd_boolean
+mn10200_elf_symbol_address_p (bfd *, asection *, Elf_Internal_Sym *, bfd_vma);
+
+enum reloc_type
+{
   R_MN10200_NONE = 0,
   R_MN10200_32,
   R_MN10200_16,
@@ -59,7 +43,8 @@ enum reloc_type {
   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,
@@ -175,12 +160,14 @@ static reloc_howto_type elf_mn10200_howto_table[] = {
 	 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[] = {
+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     , },
@@ -192,9 +179,8 @@ static const struct mn10200_reloc_map mn10200_reloc_map[] = {
 };
 
 static reloc_howto_type *
-bfd_elf32_bfd_reloc_type_lookup (abfd, code)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     bfd_reloc_code_real_type code;
+bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+				 bfd_reloc_code_real_type code)
 {
   unsigned int i;
 
@@ -229,10 +215,9 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
 /* Set the howto pointer for an MN10200 ELF reloc.  */
 
 static void
-mn10200_info_to_howto (abfd, cache_ptr, dst)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *cache_ptr;
-     Elf_Internal_Rela *dst;
+mn10200_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+		       arelent *cache_ptr,
+		       Elf_Internal_Rela *dst)
 {
   unsigned int r_type;
 
@@ -244,20 +229,17 @@ mn10200_info_to_howto (abfd, cache_ptr, dst)
 /* Perform a relocation as part of a final link.  */
 
 static bfd_reloc_status_type
-mn10200_elf_final_link_relocate (howto, input_bfd, output_bfd,
-				 input_section, contents, offset, value,
-				 addend, info, sym_sec, is_local)
-     reloc_howto_type *howto;
-     bfd *input_bfd;
-     bfd *output_bfd ATTRIBUTE_UNUSED;
-     asection *input_section;
-     bfd_byte *contents;
-     bfd_vma offset;
-     bfd_vma value;
-     bfd_vma addend;
-     struct bfd_link_info *info ATTRIBUTE_UNUSED;
-     asection *sym_sec ATTRIBUTE_UNUSED;
-     int is_local ATTRIBUTE_UNUSED;
+mn10200_elf_final_link_relocate (reloc_howto_type *howto,
+				 bfd *input_bfd,
+				 bfd *output_bfd ATTRIBUTE_UNUSED,
+				 asection *input_section,
+				 bfd_byte *contents,
+				 bfd_vma offset,
+				 bfd_vma value,
+				 bfd_vma addend,
+				 struct bfd_link_info *info ATTRIBUTE_UNUSED,
+				 asection *sym_sec ATTRIBUTE_UNUSED,
+				 int is_local ATTRIBUTE_UNUSED)
 {
   unsigned long r_type = howto->type;
   bfd_byte *hit_data = contents + offset;
@@ -347,16 +329,14 @@ mn10200_elf_final_link_relocate (howto, input_bfd, output_bfd,
 

 /* Relocate an MN10200 ELF section.  */
 static bfd_boolean
-mn10200_elf_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;
+mn10200_elf_relocate_section (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)
 {
   Elf_Internal_Shdr *symtab_hdr;
   struct elf_link_hash_entry **sym_hashes;
@@ -401,9 +381,9 @@ mn10200_elf_relocate_section (output_bfd, info, input_bfd, input_section,
 				   unresolved_reloc, warned);
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -475,6 +455,78 @@ mn10200_elf_relocate_section (output_bfd, info, input_bfd, input_section,
   return TRUE;
 }
 
+/* Delete some bytes from a section while relaxing.  */
+
+static bfd_boolean
+mn10200_elf_relax_delete_bytes (bfd *abfd, asection *sec,
+				bfd_vma addr, int count)
+{
+  Elf_Internal_Shdr *symtab_hdr;
+  unsigned int sec_shndx;
+  bfd_byte *contents;
+  Elf_Internal_Rela *irel, *irelend;
+  bfd_vma toaddr;
+  Elf_Internal_Sym *isym;
+  Elf_Internal_Sym *isymend;
+  struct elf_link_hash_entry **sym_hashes;
+  struct elf_link_hash_entry **end_hashes;
+  unsigned int symcount;
+
+  sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
+
+  contents = elf_section_data (sec)->this_hdr.contents;
+
+  toaddr = sec->size;
+
+  irel = elf_section_data (sec)->relocs;
+  irelend = irel + sec->reloc_count;
+
+  /* Actually delete the bytes.  */
+  memmove (contents + addr, contents + addr + count,
+	   (size_t) (toaddr - addr - count));
+  sec->size -= count;
+
+  /* Adjust all the relocs.  */
+  for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
+    {
+      /* Get the new reloc address.  */
+      if ((irel->r_offset > addr
+	   && irel->r_offset < toaddr))
+	irel->r_offset -= count;
+    }
+
+  /* Adjust the local symbols defined in this section.  */
+  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+  isym = (Elf_Internal_Sym *) symtab_hdr->contents;
+  for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
+    {
+      if (isym->st_shndx == sec_shndx
+	  && isym->st_value > addr
+	  && isym->st_value < toaddr)
+	isym->st_value -= count;
+    }
+
+  /* Now adjust the global symbols defined in this section.  */
+  symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
+	      - symtab_hdr->sh_info);
+  sym_hashes = elf_sym_hashes (abfd);
+  end_hashes = sym_hashes + symcount;
+  for (; sym_hashes < end_hashes; sym_hashes++)
+    {
+      struct elf_link_hash_entry *sym_hash = *sym_hashes;
+      if ((sym_hash->root.type == bfd_link_hash_defined
+	   || sym_hash->root.type == bfd_link_hash_defweak)
+	  && sym_hash->root.u.def.section == sec
+	  && sym_hash->root.u.def.value > addr
+	  && sym_hash->root.u.def.value < toaddr)
+	{
+	  sym_hash->root.u.def.value -= count;
+	}
+    }
+
+  return TRUE;
+}
+
 /* This function handles relaxing for the mn10200.
 
    There are quite a few relaxing opportunities available on the mn10200:
@@ -505,11 +557,10 @@ mn10200_elf_relocate_section (output_bfd, info, input_bfd, input_section,
 	and somewhat more difficult to support.  */
 
 static bfd_boolean
-mn10200_elf_relax_section (abfd, sec, link_info, again)
-     bfd *abfd;
-     asection *sec;
-     struct bfd_link_info *link_info;
-     bfd_boolean *again;
+mn10200_elf_relax_section (bfd *abfd,
+			   asection *sec,
+			   struct bfd_link_info *link_info,
+			   bfd_boolean *again)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Rela *internal_relocs;
@@ -533,7 +584,7 @@ mn10200_elf_relax_section (abfd, sec, link_info, again)
 
   /* Get a copy of the native relocations.  */
   internal_relocs = (_bfd_elf_link_read_relocs
-		     (abfd, sec, (PTR) NULL, (Elf_Internal_Rela *) NULL,
+		     (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
 		      link_info->keep_memory));
   if (internal_relocs == NULL)
     goto error_return;
@@ -1174,89 +1225,13 @@ mn10200_elf_relax_section (abfd, sec, link_info, again)
   return FALSE;
 }
 
-/* Delete some bytes from a section while relaxing.  */
-
-static bfd_boolean
-mn10200_elf_relax_delete_bytes (abfd, sec, addr, count)
-     bfd *abfd;
-     asection *sec;
-     bfd_vma addr;
-     int count;
-{
-  Elf_Internal_Shdr *symtab_hdr;
-  unsigned int sec_shndx;
-  bfd_byte *contents;
-  Elf_Internal_Rela *irel, *irelend;
-  bfd_vma toaddr;
-  Elf_Internal_Sym *isym;
-  Elf_Internal_Sym *isymend;
-  struct elf_link_hash_entry **sym_hashes;
-  struct elf_link_hash_entry **end_hashes;
-  unsigned int symcount;
-
-  sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
-
-  contents = elf_section_data (sec)->this_hdr.contents;
-
-  toaddr = sec->size;
-
-  irel = elf_section_data (sec)->relocs;
-  irelend = irel + sec->reloc_count;
-
-  /* Actually delete the bytes.  */
-  memmove (contents + addr, contents + addr + count,
-	   (size_t) (toaddr - addr - count));
-  sec->size -= count;
-
-  /* Adjust all the relocs.  */
-  for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
-    {
-      /* Get the new reloc address.  */
-      if ((irel->r_offset > addr
-	   && irel->r_offset < toaddr))
-	irel->r_offset -= count;
-    }
-
-  /* Adjust the local symbols defined in this section.  */
-  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
-  isym = (Elf_Internal_Sym *) symtab_hdr->contents;
-  for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
-    {
-      if (isym->st_shndx == sec_shndx
-	  && isym->st_value > addr
-	  && isym->st_value < toaddr)
-	isym->st_value -= count;
-    }
-
-  /* Now adjust the global symbols defined in this section.  */
-  symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
-	      - symtab_hdr->sh_info);
-  sym_hashes = elf_sym_hashes (abfd);
-  end_hashes = sym_hashes + symcount;
-  for (; sym_hashes < end_hashes; sym_hashes++)
-    {
-      struct elf_link_hash_entry *sym_hash = *sym_hashes;
-      if ((sym_hash->root.type == bfd_link_hash_defined
-	   || sym_hash->root.type == bfd_link_hash_defweak)
-	  && sym_hash->root.u.def.section == sec
-	  && sym_hash->root.u.def.value > addr
-	  && sym_hash->root.u.def.value < toaddr)
-	{
-	  sym_hash->root.u.def.value -= count;
-	}
-    }
-
-  return TRUE;
-}
-
 /* Return TRUE if a symbol exists at the given address, else return
    FALSE.  */
 static bfd_boolean
-mn10200_elf_symbol_address_p (abfd, sec, isym, addr)
-     bfd *abfd;
-     asection *sec;
-     Elf_Internal_Sym *isym;
-     bfd_vma addr;
+mn10200_elf_symbol_address_p (bfd *abfd,
+			      asection *sec,
+			      Elf_Internal_Sym *isym,
+			      bfd_vma addr)
 {
   Elf_Internal_Shdr *symtab_hdr;
   unsigned int sec_shndx;
@@ -1297,14 +1272,12 @@ mn10200_elf_symbol_address_p (abfd, sec, isym, addr)
    which uses mn10200_elf_relocate_section.  */
 
 static bfd_byte *
-mn10200_elf_get_relocated_section_contents (output_bfd, link_info, link_order,
-					    data, relocatable, symbols)
-     bfd *output_bfd;
-     struct bfd_link_info *link_info;
-     struct bfd_link_order *link_order;
-     bfd_byte *data;
-     bfd_boolean relocatable;
-     asymbol **symbols;
+mn10200_elf_get_relocated_section_contents (bfd *output_bfd,
+					    struct bfd_link_info *link_info,
+					    struct bfd_link_order *link_order,
+					    bfd_byte *data,
+					    bfd_boolean relocatable,
+					    asymbol **symbols)
 {
   Elf_Internal_Shdr *symtab_hdr;
   asection *input_section = link_order->u.indirect.section;
@@ -1336,7 +1309,7 @@ mn10200_elf_get_relocated_section_contents (output_bfd, link_info, link_order,
       bfd_size_type amt;
 
       internal_relocs = (_bfd_elf_link_read_relocs
-			 (input_bfd, input_section, (PTR) NULL,
+			 (input_bfd, input_section, NULL,
 			  (Elf_Internal_Rela *) NULL, FALSE));
       if (internal_relocs == NULL)
 	goto error_return;
diff --git a/bfd/elf-m10300.c b/bfd/elf-m10300.c
index fa33b4a..709ea16 100644
--- a/bfd/elf-m10300.c
+++ b/bfd/elf-m10300.c
@@ -1,6 +1,6 @@
 /* Matsushita 10300 specific support for 32-bit ELF
    Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-   2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+   2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -69,6 +69,14 @@ struct elf32_mn10300_link_hash_entry
 
   /* Calculated value.  */
   bfd_vma value;
+
+#define GOT_UNKNOWN	0
+#define GOT_NORMAL	1
+#define GOT_TLS_GD	2
+#define GOT_TLS_LD	3
+#define GOT_TLS_IE	4
+  /* Used to distinguish GOT entries for TLS types from normal GOT entries.  */
+  unsigned char tls_type;
 };
 
 /* We derive a hash table from the main elf linker hash table so
@@ -87,8 +95,31 @@ struct elf32_mn10300_link_hash_table
   /* Random linker state flags.  */
 #define MN10300_HASH_ENTRIES_INITIALIZED 0x1
   char flags;
+  struct
+  {
+    bfd_signed_vma  refcount;
+    bfd_vma         offset;
+    char            got_allocated;
+    char            rel_emitted;
+  } tls_ldm_got;
+};
+
+#define elf_mn10300_hash_entry(ent) ((struct elf32_mn10300_link_hash_entry *)(ent))
+
+struct elf_mn10300_obj_tdata
+{
+  struct elf_obj_tdata root;
+
+  /* tls_type for each local got entry.  */
+  char * local_got_tls_type;
 };
 
+#define elf_mn10300_tdata(abfd) \
+  ((struct elf_mn10300_obj_tdata *) (abfd)->tdata.any)
+
+#define elf_mn10300_local_got_tls_type(abfd) \
+  (elf_mn10300_tdata (abfd)->local_got_tls_type)
+
 #ifndef streq
 #define streq(a, b) (strcmp ((a),(b)) == 0)
 #endif
@@ -448,15 +479,131 @@ static reloc_howto_type elf_mn10300_howto_table[] =
 	 0xffffffff,		/* dst_mask */
 	 FALSE),		/* pcrel_offset */
 
-  EMPTY_HOWTO (24),
-  EMPTY_HOWTO (25),
-  EMPTY_HOWTO (26),
-  EMPTY_HOWTO (27),
-  EMPTY_HOWTO (28),
-  EMPTY_HOWTO (29),
-  EMPTY_HOWTO (30),
-  EMPTY_HOWTO (31),
-  EMPTY_HOWTO (32),
+  HOWTO (R_MN10300_TLS_GD,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* */
+	 "R_MN10300_TLS_GD",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  HOWTO (R_MN10300_TLS_LD,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* */
+	 "R_MN10300_TLS_LD",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  HOWTO (R_MN10300_TLS_LDO,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* */
+	 "R_MN10300_TLS_LDO",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  HOWTO (R_MN10300_TLS_GOTIE,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* */
+	 "R_MN10300_TLS_GOTIE",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  HOWTO (R_MN10300_TLS_IE,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* */
+	 "R_MN10300_TLS_IE",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  HOWTO (R_MN10300_TLS_LE,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* */
+	 "R_MN10300_TLS_LE",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  HOWTO (R_MN10300_TLS_DTPMOD,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* */
+	 "R_MN10300_TLS_DTPMOD",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  HOWTO (R_MN10300_TLS_DTPOFF,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* */
+	 "R_MN10300_TLS_DTPOFF",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  HOWTO (R_MN10300_TLS_TPOFF,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* */
+	 "R_MN10300_TLS_TPOFF",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
   
   HOWTO (R_MN10300_SYM_DIFF,	/* type */
 	 0,			/* rightshift */
@@ -519,6 +666,15 @@ static const struct mn10300_reloc_map mn10300_reloc_map[] =
   { BFD_RELOC_MN10300_GLOB_DAT, R_MN10300_GLOB_DAT },
   { BFD_RELOC_MN10300_JMP_SLOT, R_MN10300_JMP_SLOT },
   { BFD_RELOC_MN10300_RELATIVE, R_MN10300_RELATIVE },
+  { BFD_RELOC_MN10300_TLS_GD, R_MN10300_TLS_GD },
+  { BFD_RELOC_MN10300_TLS_LD, R_MN10300_TLS_LD },
+  { BFD_RELOC_MN10300_TLS_LDO, R_MN10300_TLS_LDO },
+  { BFD_RELOC_MN10300_TLS_GOTIE, R_MN10300_TLS_GOTIE },
+  { BFD_RELOC_MN10300_TLS_IE, R_MN10300_TLS_IE },
+  { BFD_RELOC_MN10300_TLS_LE, R_MN10300_TLS_LE },
+  { BFD_RELOC_MN10300_TLS_DTPMOD, R_MN10300_TLS_DTPMOD },
+  { BFD_RELOC_MN10300_TLS_DTPOFF, R_MN10300_TLS_DTPOFF },
+  { BFD_RELOC_MN10300_TLS_TPOFF, R_MN10300_TLS_TPOFF },
   { BFD_RELOC_MN10300_SYM_DIFF, R_MN10300_SYM_DIFF },
   { BFD_RELOC_MN10300_ALIGN, R_MN10300_ALIGN }
 };
@@ -534,10 +690,12 @@ _bfd_mn10300_elf_create_got_section (bfd * abfd,
   asection * s;
   struct elf_link_hash_entry * h;
   const struct elf_backend_data * bed = get_elf_backend_data (abfd);
+  struct elf_link_hash_table *htab;
   int ptralign;
 
   /* This function may be called more than once.  */
-  if (bfd_get_section_by_name (abfd, ".got") != NULL)
+  htab = elf_hash_table (info);
+  if (htab->sgot != NULL)
     return TRUE;
 
   switch (bed->s->arch_size)
@@ -565,7 +723,8 @@ _bfd_mn10300_elf_create_got_section (bfd * abfd,
   if (bed->plt_readonly)
     pltflags |= SEC_READONLY;
 
-  s = bfd_make_section_with_flags (abfd, ".plt", pltflags);
+  s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
+  htab->splt = s;
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
     return FALSE;
@@ -576,19 +735,21 @@ _bfd_mn10300_elf_create_got_section (bfd * abfd,
     {
       h = _bfd_elf_define_linkage_sym (abfd, info, s,
 				       "_PROCEDURE_LINKAGE_TABLE_");
-      elf_hash_table (info)->hplt = h;
+      htab->hplt = h;
       if (h == NULL)
 	return FALSE;
     }
 
-  s = bfd_make_section_with_flags (abfd, ".got", flags);
+  s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
+  htab->sgot = s;
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, ptralign))
     return FALSE;
 
   if (bed->want_got_plt)
     {
-      s = bfd_make_section_with_flags (abfd, ".got.plt", flags);
+      s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags);
+      htab->sgotplt = s;
       if (s == NULL
 	  || ! bfd_set_section_alignment (abfd, s, ptralign))
 	return FALSE;
@@ -599,7 +760,7 @@ _bfd_mn10300_elf_create_got_section (bfd * abfd,
      because we don't want to define the symbol if we are not creating
      a global offset table.  */
   h = _bfd_elf_define_linkage_sym (abfd, info, s, "_GLOBAL_OFFSET_TABLE_");
-  elf_hash_table (info)->hgot = h;
+  htab->hgot = h;
   if (h == NULL)
     return FALSE;
 
@@ -650,6 +811,223 @@ mn10300_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
   cache_ptr->howto = elf_mn10300_howto_table + r_type;
 }
 
+static int
+elf_mn10300_tls_transition (struct bfd_link_info *        info,
+			    int                           r_type,
+			    struct elf_link_hash_entry *  h,
+			    asection *                    sec,
+			    bfd_boolean                   counting)
+{
+  bfd_boolean is_local;
+
+  if (r_type == R_MN10300_TLS_GD
+      && h != NULL
+      && elf_mn10300_hash_entry (h)->tls_type == GOT_TLS_IE)
+    return R_MN10300_TLS_GOTIE;
+
+  if (info->shared)
+    return r_type;
+
+  if (! (sec->flags & SEC_CODE))
+    return r_type;
+
+  if (! counting && h != NULL && ! elf_hash_table (info)->dynamic_sections_created)
+    is_local = TRUE;
+  else
+    is_local = SYMBOL_CALLS_LOCAL (info, h);
+
+  /* For the main program, these are the transitions we do.  */
+  switch (r_type)
+    {
+    case R_MN10300_TLS_GD: return is_local ? R_MN10300_TLS_LE : R_MN10300_TLS_GOTIE;
+    case R_MN10300_TLS_LD: return R_MN10300_NONE;
+    case R_MN10300_TLS_LDO: return R_MN10300_TLS_LE;
+    case R_MN10300_TLS_IE:
+    case R_MN10300_TLS_GOTIE: return is_local ? R_MN10300_TLS_LE : r_type;
+    }
+
+  return r_type;
+}
+
+/* Return the relocation value for @tpoff relocation
+   if STT_TLS virtual address is ADDRESS.  */
+
+static bfd_vma
+dtpoff (struct bfd_link_info * info, bfd_vma address)
+{
+  struct elf_link_hash_table *htab = elf_hash_table (info);
+
+  /* If tls_sec is NULL, we should have signalled an error already.  */
+  if (htab->tls_sec == NULL)
+    return 0;
+  return address - htab->tls_sec->vma;
+}
+
+/* Return the relocation value for @tpoff relocation
+   if STT_TLS virtual address is ADDRESS.  */
+
+static bfd_vma
+tpoff (struct bfd_link_info * info, bfd_vma address)
+{
+  struct elf_link_hash_table *htab = elf_hash_table (info);
+
+  /* If tls_sec is NULL, we should have signalled an error already.  */
+  if (htab->tls_sec == NULL)
+    return 0;
+  return address - (htab->tls_size + htab->tls_sec->vma);
+}
+
+/* Returns nonzero if there's a R_MN10300_PLT32 reloc that we now need
+   to skip, after this one.  The actual value is the offset between
+   this reloc and the PLT reloc.  */
+
+static int
+mn10300_do_tls_transition (bfd *         input_bfd,
+			   unsigned int  r_type,
+			   unsigned int  tls_r_type,
+			   bfd_byte *    contents,
+			   bfd_vma       offset)
+{
+  bfd_byte *op = contents + offset;
+  int gotreg = 0;
+
+#define TLS_PAIR(r1,r2) ((r1) * R_MN10300_MAX + (r2))
+
+  /* This is common to all GD/LD transitions, so break it out.  */
+  if (r_type == R_MN10300_TLS_GD
+      || r_type == R_MN10300_TLS_LD)
+    {
+      op -= 2;
+      /* mov imm,d0.  */
+      BFD_ASSERT (bfd_get_8 (input_bfd, op) == 0xFC);
+      BFD_ASSERT (bfd_get_8 (input_bfd, op + 1) == 0xCC);
+      /* add aN,d0.  */
+      BFD_ASSERT (bfd_get_8 (input_bfd, op + 6) == 0xF1);
+      gotreg = (bfd_get_8 (input_bfd, op + 7) & 0x0c) >> 2;
+      /* Call.  */
+      BFD_ASSERT (bfd_get_8 (input_bfd, op + 8) == 0xDD);
+    }
+
+  switch (TLS_PAIR (r_type, tls_r_type))
+    {
+    case TLS_PAIR (R_MN10300_TLS_GD, R_MN10300_TLS_GOTIE):
+      {
+	/* Keep track of which register we put GOTptr in.  */
+	/* mov (_x at indntpoff,a2),a0.  */
+	memcpy (op, "\xFC\x20\x00\x00\x00\x00", 6);
+	op[1] |= gotreg;
+	/* add e2,a0.  */
+	memcpy (op+6, "\xF9\x78\x28", 3);
+	/* or  0x00000000, d0 - six byte nop.  */
+	memcpy (op+9, "\xFC\xE4\x00\x00\x00\x00", 6);
+      }
+      return 7;
+
+    case TLS_PAIR (R_MN10300_TLS_GD, R_MN10300_TLS_LE):
+      {
+	/* Register is *always* a0.  */
+	/* mov _x at tpoff,a0.  */
+	memcpy (op, "\xFC\xDC\x00\x00\x00\x00", 6);
+	/* add e2,a0.  */
+	memcpy (op+6, "\xF9\x78\x28", 3);
+	/* or  0x00000000, d0 - six byte nop.  */
+	memcpy (op+9, "\xFC\xE4\x00\x00\x00\x00", 6);
+      }
+      return 7;
+    case TLS_PAIR (R_MN10300_TLS_LD, R_MN10300_NONE):
+      {
+	/* Register is *always* a0.  */
+	/* mov e2,a0.  */
+	memcpy (op, "\xF5\x88", 2);
+	/* or  0x00000000, d0 - six byte nop.  */
+	memcpy (op+2, "\xFC\xE4\x00\x00\x00\x00", 6);
+	/* or  0x00000000, e2 - seven byte nop.  */
+	memcpy (op+8, "\xFE\x19\x22\x00\x00\x00\x00", 7);
+      }
+      return 7;
+
+    case TLS_PAIR (R_MN10300_TLS_LDO, R_MN10300_TLS_LE):
+      /* No changes needed, just the reloc change.  */
+      return 0;
+
+    /*  These are a little tricky, because we have to detect which
+	opcode is being used (they're different sizes, with the reloc
+	at different offsets within the opcode) and convert each
+	accordingly, copying the operands as needed.  The conversions
+	we do are as follows (IE,GOTIE,LE):
+
+	           1111 1100  1010 01Dn  [-- abs32 --]  MOV (x at indntpoff),Dn
+	           1111 1100  0000 DnAm  [-- abs32 --]  MOV (x at gotntpoff,Am),Dn
+	           1111 1100  1100 11Dn  [-- abs32 --]  MOV x at tpoff,Dn
+
+	           1111 1100  1010 00An  [-- abs32 --]  MOV (x at indntpoff),An
+	           1111 1100  0010 AnAm  [-- abs32 --]  MOV (x at gotntpoff,Am),An
+	           1111 1100  1101 11An  [-- abs32 --]  MOV x at tpoff,An
+
+	1111 1110  0000 1110  Rnnn Xxxx  [-- abs32 --]  MOV (x at indntpoff),Rn
+	1111 1110  0000 1010  Rnnn Rmmm  [-- abs32 --]  MOV (x at indntpoff,Rm),Rn
+	1111 1110  0000 1000  Rnnn Xxxx  [-- abs32 --]  MOV x at tpoff,Rn
+
+	Since the GOT pointer is always $a2, we assume the last
+	normally won't happen, but let's be paranoid and plan for the
+	day that GCC optimizes it somewhow.  */
+
+    case TLS_PAIR (R_MN10300_TLS_IE, R_MN10300_TLS_LE):
+      if (op[-2] == 0xFC)
+	{
+	  op -= 2;
+	  if ((op[1] & 0xFC) == 0xA4) /* Dn */
+	    {
+	      op[1] &= 0x03; /* Leaves Dn.  */
+	      op[1] |= 0xCC;
+	    }
+	  else /* An */
+	    {
+	      op[1] &= 0x03; /* Leaves An. */
+	      op[1] |= 0xDC;
+	    }
+	}
+      else if (op[-3] == 0xFE)
+	op[-2] = 0x08;
+      else
+	abort ();
+      break;
+
+    case TLS_PAIR (R_MN10300_TLS_GOTIE, R_MN10300_TLS_LE):
+      if (op[-2] == 0xFC)
+	{
+	  op -= 2;
+	  if ((op[1] & 0xF0) == 0x00) /* Dn */
+	    {
+	      op[1] &= 0x0C; /* Leaves Dn.  */
+	      op[1] >>= 2;
+	      op[1] |= 0xCC;
+	    }
+	  else /* An */
+	    {
+	      op[1] &= 0x0C; /* Leaves An.  */
+	      op[1] >>= 2;
+	      op[1] |= 0xDC;
+	    }
+	}
+      else if (op[-3] == 0xFE)
+	op[-2] = 0x08;
+      else
+	abort ();
+      break;
+
+    default:
+      (*_bfd_error_handler)
+	(_("%s: Unsupported transition from %s to %s"),
+	 bfd_get_filename (input_bfd),
+	 elf_mn10300_howto_table[r_type].name,
+	 elf_mn10300_howto_table[tls_r_type].name);
+      break;
+    }
+#undef TLS_PAIR
+  return 0;
+}
+
 /* Look through the relocs for a section during the first phase.
    Since we don't do .gots or .plts, we just need to consider the
    virtual table relocs for gc.  */
@@ -660,6 +1038,7 @@ mn10300_elf_check_relocs (bfd *abfd,
 			  asection *sec,
 			  const Elf_Internal_Rela *relocs)
 {
+  struct elf32_mn10300_link_hash_table * htab = elf32_mn10300_hash_table (info);
   bfd_boolean sym_diff_reloc_seen;
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Sym * isymbuf = NULL;
@@ -694,6 +1073,7 @@ mn10300_elf_check_relocs (bfd *abfd,
       struct elf_link_hash_entry *h;
       unsigned long r_symndx;
       unsigned int r_type;
+      int tls_type = GOT_NORMAL;
 
       r_symndx = ELF32_R_SYM (rel->r_info);
       if (r_symndx < symtab_hdr->sh_info)
@@ -707,6 +1087,7 @@ mn10300_elf_check_relocs (bfd *abfd,
 	}
 
       r_type = ELF32_R_TYPE (rel->r_info);
+      r_type = elf_mn10300_tls_transition (info, r_type, h, sec, TRUE);
 
       /* Some relocs require a global offset table.  */
       if (dynobj == NULL)
@@ -721,6 +1102,10 @@ mn10300_elf_check_relocs (bfd *abfd,
 	    case R_MN10300_GOTOFF16:
 	    case R_MN10300_GOTPC32:
 	    case R_MN10300_GOTPC16:
+	    case R_MN10300_TLS_GD:
+	    case R_MN10300_TLS_LD:
+	    case R_MN10300_TLS_GOTIE:
+	    case R_MN10300_TLS_IE:
 	      elf_hash_table (info)->dynobj = dynobj = abfd;
 	      if (! _bfd_mn10300_elf_create_got_section (dynobj, info))
 		goto fail;
@@ -749,53 +1134,101 @@ mn10300_elf_check_relocs (bfd *abfd,
 	    goto fail;
 	  break;
 
+	case R_MN10300_TLS_LD:
+	  htab->tls_ldm_got.refcount ++;
+	  tls_type = GOT_TLS_LD;
+
+	  if (htab->tls_ldm_got.got_allocated)
+	    break;
+	  goto create_got;
+
+	case R_MN10300_TLS_IE:
+	case R_MN10300_TLS_GOTIE:
+	  if (info->shared)
+	    info->flags |= DF_STATIC_TLS;
+	  /* Fall through */
+	  
+	case R_MN10300_TLS_GD:
 	case R_MN10300_GOT32:
 	case R_MN10300_GOT24:
 	case R_MN10300_GOT16:
+	create_got:
 	  /* This symbol requires a global offset table entry.  */
 
+	  switch (r_type)
+	    {
+	    case R_MN10300_TLS_IE:
+	    case R_MN10300_TLS_GOTIE: tls_type = GOT_TLS_IE; break;
+	    case R_MN10300_TLS_GD:    tls_type = GOT_TLS_GD; break;
+	    default:                  tls_type = GOT_NORMAL; break;
+	    }
+
 	  if (sgot == NULL)
 	    {
-	      sgot = bfd_get_section_by_name (dynobj, ".got");
+	      sgot = htab->root.sgot;
 	      BFD_ASSERT (sgot != NULL);
 	    }
 
 	  if (srelgot == NULL
 	      && (h != NULL || info->shared))
 	    {
-	      srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+	      srelgot = bfd_get_linker_section (dynobj, ".rela.got");
 	      if (srelgot == NULL)
 		{
-		  srelgot = bfd_make_section_with_flags (dynobj,
-							 ".rela.got",
-							 (SEC_ALLOC
-							  | SEC_LOAD
-							  | SEC_HAS_CONTENTS
-							  | SEC_IN_MEMORY
-							  | SEC_LINKER_CREATED
-							  | SEC_READONLY));
+		  flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
+				    | SEC_IN_MEMORY | SEC_LINKER_CREATED
+				    | SEC_READONLY);
+		  srelgot = bfd_make_section_anyway_with_flags (dynobj,
+								".rela.got",
+								flags);
 		  if (srelgot == NULL
 		      || ! bfd_set_section_alignment (dynobj, srelgot, 2))
 		    goto fail;
 		}
 	    }
 
-	  if (h != NULL)
+	  if (r_type == R_MN10300_TLS_LD)
 	    {
+	      htab->tls_ldm_got.offset = sgot->size;
+	      htab->tls_ldm_got.got_allocated ++;
+	    }
+	  else if (h != NULL)
+	    {
+	      if (elf_mn10300_hash_entry (h)->tls_type != tls_type
+		  && elf_mn10300_hash_entry (h)->tls_type != GOT_UNKNOWN)
+		{
+		  if (tls_type == GOT_TLS_IE
+		      && elf_mn10300_hash_entry (h)->tls_type == GOT_TLS_GD)
+		    /* No change - this is ok.  */;
+		  else if (tls_type == GOT_TLS_GD
+		      && elf_mn10300_hash_entry (h)->tls_type == GOT_TLS_IE)
+		    /* Transition GD->IE.  */
+		    tls_type = GOT_TLS_IE;
+		  else
+		    (*_bfd_error_handler)
+		      (_("%B: %s' accessed both as normal and thread local symbol"),
+		       abfd, h ? h->root.root.string : "<local>");
+		}
+
+	      elf_mn10300_hash_entry (h)->tls_type = tls_type;
+
 	      if (h->got.offset != (bfd_vma) -1)
 		/* We have already allocated space in the .got.  */
 		break;
 
 	      h->got.offset = sgot->size;
 
-	      /* Make sure this symbol is output as a dynamic symbol.  */
-	      if (h->dynindx == -1)
+	      if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
+		  /* Make sure this symbol is output as a dynamic symbol.  */
+		  && h->dynindx == -1)
 		{
 		  if (! bfd_elf_link_record_dynamic_symbol (info, h))
 		    goto fail;
 		}
 
 	      srelgot->size += sizeof (Elf32_External_Rela);
+	      if (r_type == R_MN10300_TLS_GD)
+		srelgot->size += sizeof (Elf32_External_Rela);
 	    }
 	  else
 	    {
@@ -806,13 +1239,15 @@ mn10300_elf_check_relocs (bfd *abfd,
 		  size_t       size;
 		  unsigned int i;
 
-		  size = symtab_hdr->sh_info * sizeof (bfd_vma);
+		  size = symtab_hdr->sh_info * (sizeof (bfd_vma) + sizeof (char));
 		  local_got_offsets = bfd_alloc (abfd, size);
 
 		  if (local_got_offsets == NULL)
 		    goto fail;
 
 		  elf_local_got_offsets (abfd) = local_got_offsets;
+		  elf_mn10300_local_got_tls_type (abfd)
+		      = (char *) (local_got_offsets + symtab_hdr->sh_info);
 
 		  for (i = 0; i < symtab_hdr->sh_info; i++)
 		    local_got_offsets[i] = (bfd_vma) -1;
@@ -825,14 +1260,26 @@ mn10300_elf_check_relocs (bfd *abfd,
 	      local_got_offsets[r_symndx] = sgot->size;
 
 	      if (info->shared)
-		/* If we are generating a shared object, we need to
-		   output a R_MN10300_RELATIVE reloc so that the dynamic
-		   linker can adjust this GOT entry.  */
-		srelgot->size += sizeof (Elf32_External_Rela);
+		{
+		  /* If we are generating a shared object, we need to
+		     output a R_MN10300_RELATIVE reloc so that the dynamic
+		     linker can adjust this GOT entry.  */
+		  srelgot->size += sizeof (Elf32_External_Rela);
+
+		  if (r_type == R_MN10300_TLS_GD)
+		    /* And a R_MN10300_TLS_DTPOFF reloc as well.  */
+		    srelgot->size += sizeof (Elf32_External_Rela);
+		}
+
+	      elf_mn10300_local_got_tls_type (abfd) [r_symndx] = tls_type;
 	    }
 
 	  sgot->size += 4;
-	  break;
+	  if (r_type == R_MN10300_TLS_GD
+	      || r_type == R_MN10300_TLS_LD)
+	    sgot->size += 4;
+
+	  goto need_shared_relocs;
 
 	case R_MN10300_PLT32:
 	case R_MN10300_PLT16:
@@ -873,6 +1320,7 @@ mn10300_elf_check_relocs (bfd *abfd,
 	  if (h != NULL)
 	    h->non_got_ref = 1;
 
+	need_shared_relocs:
 	  /* If we are creating a shared library, then we
 	     need to copy the reloc into the shared library.  */
 	  if (info->shared
@@ -981,6 +1429,7 @@ mn10300_elf_final_link_relocate (reloc_howto_type *howto,
 				 asection *sym_sec ATTRIBUTE_UNUSED,
 				 int is_local ATTRIBUTE_UNUSED)
 {
+  struct elf32_mn10300_link_hash_table * htab = elf32_mn10300_hash_table (info);
   static asection *  sym_diff_section;
   static bfd_vma     sym_diff_value;
   bfd_boolean is_sym_diff_reloc;
@@ -1012,6 +1461,17 @@ mn10300_elf_final_link_relocate (reloc_howto_type *howto,
 	  && h != NULL
 	  && ! SYMBOL_REFERENCES_LOCAL (info, h))
 	return bfd_reloc_dangerous;
+    case R_MN10300_GOT32:
+      /* Issue 2052223:
+	 Taking the address of a protected function in a shared library
+	 is illegal.  Issue an error message here.  */
+      if (info->shared
+	  && (input_section->flags & SEC_ALLOC) != 0
+	  && h != NULL
+	  && ELF_ST_VISIBILITY (h->other) == STV_PROTECTED
+	  && (h->type == STT_FUNC || h->type == STT_GNU_IFUNC)
+	  && ! SYMBOL_REFERENCES_LOCAL (info, h))
+	return bfd_reloc_dangerous;
     }
 
   is_sym_diff_reloc = FALSE;
@@ -1208,9 +1668,11 @@ mn10300_elf_final_link_relocate (reloc_howto_type *howto,
       return bfd_reloc_ok;
 
     case R_MN10300_GOTPC32:
+      if (dynobj == NULL)
+	return bfd_reloc_dangerous;
+
       /* Use global offset table as symbol value.  */
-      value = bfd_get_section_by_name (dynobj,
-				       ".got")->output_section->vma;
+      value = htab->root.sgot->output_section->vma;
       value -= (input_section->output_section->vma
 		+ input_section->output_offset);
       value -= offset;
@@ -1220,9 +1682,11 @@ mn10300_elf_final_link_relocate (reloc_howto_type *howto,
       return bfd_reloc_ok;
 
     case R_MN10300_GOTPC16:
+      if (dynobj == NULL)
+	return bfd_reloc_dangerous;
+
       /* Use global offset table as symbol value.  */
-      value = bfd_get_section_by_name (dynobj,
-				       ".got")->output_section->vma;
+      value = htab->root.sgot->output_section->vma;
       value -= (input_section->output_section->vma
 		+ input_section->output_offset);
       value -= offset;
@@ -1235,16 +1699,20 @@ mn10300_elf_final_link_relocate (reloc_howto_type *howto,
       return bfd_reloc_ok;
 
     case R_MN10300_GOTOFF32:
-      value -= bfd_get_section_by_name (dynobj,
-					".got")->output_section->vma;
+      if (dynobj == NULL)
+	return bfd_reloc_dangerous;
+
+      value -= htab->root.sgot->output_section->vma;
       value += addend;
 
       bfd_put_32 (input_bfd, value, hit_data);
       return bfd_reloc_ok;
 
     case R_MN10300_GOTOFF24:
-      value -= bfd_get_section_by_name (dynobj,
-					".got")->output_section->vma;
+      if (dynobj == NULL)
+	return bfd_reloc_dangerous;
+
+      value -= htab->root.sgot->output_section->vma;
       value += addend;
 
       if ((long) value > 0x7fffff || (long) value < -0x800000)
@@ -1256,8 +1724,10 @@ mn10300_elf_final_link_relocate (reloc_howto_type *howto,
       return bfd_reloc_ok;
 
     case R_MN10300_GOTOFF16:
-      value -= bfd_get_section_by_name (dynobj,
-					".got")->output_section->vma;
+      if (dynobj == NULL)
+	return bfd_reloc_dangerous;
+
+      value -= htab->root.sgot->output_section->vma;
       value += addend;
 
       if ((long) value > 0x7fff || (long) value < -0x8000)
@@ -1272,8 +1742,10 @@ mn10300_elf_final_link_relocate (reloc_howto_type *howto,
 	  && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN
 	  && h->plt.offset != (bfd_vma) -1)
 	{
-	  splt = bfd_get_section_by_name (dynobj, ".plt");
+	  if (dynobj == NULL)
+	    return bfd_reloc_dangerous;
 
+	  splt = htab->root.splt;
 	  value = (splt->output_section->vma
 		   + splt->output_offset
 		   + h->plt.offset) - value;
@@ -1293,8 +1765,10 @@ mn10300_elf_final_link_relocate (reloc_howto_type *howto,
 	  && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN
 	  && h->plt.offset != (bfd_vma) -1)
 	{
-	  splt = bfd_get_section_by_name (dynobj, ".plt");
+	  if (dynobj == NULL)
+	    return bfd_reloc_dangerous;
 
+	  splt = htab->root.splt;
 	  value = (splt->output_section->vma
 		   + splt->output_offset
 		   + h->plt.offset) - value;
@@ -1311,41 +1785,100 @@ mn10300_elf_final_link_relocate (reloc_howto_type *howto,
       bfd_put_16 (input_bfd, value, hit_data);
       return bfd_reloc_ok;
 
+    case R_MN10300_TLS_LDO:
+      value = dtpoff (info, value);
+      bfd_put_32 (input_bfd, value + addend, hit_data);
+      return bfd_reloc_ok;
+
+    case R_MN10300_TLS_LE:
+      value = tpoff (info, value);
+      bfd_put_32 (input_bfd, value + addend, hit_data);
+      return bfd_reloc_ok;
+
+    case R_MN10300_TLS_LD:
+      if (dynobj == NULL)
+	return bfd_reloc_dangerous;
+
+      sgot = htab->root.sgot;
+      BFD_ASSERT (sgot != NULL);
+      value = htab->tls_ldm_got.offset + sgot->output_offset;
+      bfd_put_32 (input_bfd, value, hit_data);
+
+      if (!htab->tls_ldm_got.rel_emitted)
+	{
+	  asection * srelgot = bfd_get_linker_section (dynobj, ".rela.got");
+	  Elf_Internal_Rela rel;
+
+	  BFD_ASSERT (srelgot != NULL);
+	  htab->tls_ldm_got.rel_emitted ++;
+	  rel.r_offset = (sgot->output_section->vma
+			  + sgot->output_offset
+			  + htab->tls_ldm_got.offset);
+	  bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + htab->tls_ldm_got.offset);
+	  bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + htab->tls_ldm_got.offset+4);
+	  rel.r_info = ELF32_R_INFO (0, R_MN10300_TLS_DTPMOD);
+	  rel.r_addend = 0;
+	  bfd_elf32_swap_reloca_out (output_bfd, & rel,
+				     (bfd_byte *) ((Elf32_External_Rela *) srelgot->contents
+						   + srelgot->reloc_count));
+	  ++ srelgot->reloc_count;
+	}
+
+      return bfd_reloc_ok;
+
+    case R_MN10300_TLS_GOTIE:
+      value = tpoff (info, value);
+      /* Fall Through.  */
+
+    case R_MN10300_TLS_GD:
+    case R_MN10300_TLS_IE:
     case R_MN10300_GOT32:
     case R_MN10300_GOT24:
     case R_MN10300_GOT16:
-      {
-	sgot = bfd_get_section_by_name (dynobj, ".got");
+      if (dynobj == NULL)
+	return bfd_reloc_dangerous;
 
-	  if (h != NULL)
-	    {
-	      bfd_vma off;
+      sgot = htab->root.sgot;
+      if (r_type == R_MN10300_TLS_GD)
+	value = dtpoff (info, value);
+
+      if (h != NULL)
+	{
+	  bfd_vma off;
+
+	  off = h->got.offset;
+	  /* Offsets in the GOT are allocated in check_relocs
+	     which is not called for shared libraries... */
+	  if (off == (bfd_vma) -1)
+	    off = 0;
+
+	  if (sgot->contents != NULL
+	      && (! elf_hash_table (info)->dynamic_sections_created
+		  || SYMBOL_REFERENCES_LOCAL (info, h)))
+	    /* 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.
+
+	       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.  */
+	    bfd_put_32 (output_bfd, value,
+			sgot->contents + off);
+
+	  value = sgot->output_offset + off;
+	}
+      else
+	{
+	  bfd_vma off;
 
-	      off = h->got.offset;
-	      BFD_ASSERT (off != (bfd_vma) -1);
+	  off = elf_local_got_offsets (input_bfd)[symndx];
 
-	      if (! elf_hash_table (info)->dynamic_sections_created
-		  || SYMBOL_REFERENCES_LOCAL (info, h))
-		/* 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.
-
-		   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.  */
-		bfd_put_32 (output_bfd, value,
-			    sgot->contents + off);
-
-	      value = sgot->output_offset + off;
-	    }
+	  if (off & 1)
+	    bfd_put_32 (output_bfd, value, sgot->contents + (off & ~ 1));
 	  else
 	    {
-	      bfd_vma off;
-
-	      off = elf_local_got_offsets (input_bfd)[symndx];
-
 	      bfd_put_32 (output_bfd, value, sgot->contents + off);
 
 	      if (info->shared)
@@ -1353,28 +1886,64 @@ mn10300_elf_final_link_relocate (reloc_howto_type *howto,
 		  asection * srelgot;
 		  Elf_Internal_Rela outrel;
 
-		  srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+		  srelgot = bfd_get_linker_section (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_MN10300_RELATIVE);
+		  switch (r_type)
+		    {
+		    case R_MN10300_TLS_GD:
+		      outrel.r_info = ELF32_R_INFO (0, R_MN10300_TLS_DTPOFF);
+		      outrel.r_offset = (sgot->output_section->vma
+					 + sgot->output_offset
+					 + off + 4);
+		      bfd_elf32_swap_reloca_out (output_bfd, & outrel,
+						 (bfd_byte *) (((Elf32_External_Rela *)
+								srelgot->contents)
+							       + srelgot->reloc_count));
+		      ++ srelgot->reloc_count;
+		      outrel.r_info = ELF32_R_INFO (0, R_MN10300_TLS_DTPMOD);
+		      break;
+		    case R_MN10300_TLS_GOTIE:
+		    case R_MN10300_TLS_IE:
+		      outrel.r_info = ELF32_R_INFO (0, R_MN10300_TLS_TPOFF);
+		      break;
+		    default:
+		      outrel.r_info = ELF32_R_INFO (0, R_MN10300_RELATIVE);
+		      break;
+		    }
+
 		  outrel.r_addend = value;
 		  bfd_elf32_swap_reloca_out (output_bfd, &outrel,
 					     (bfd_byte *) (((Elf32_External_Rela *)
 							    srelgot->contents)
 							   + srelgot->reloc_count));
 		  ++ srelgot->reloc_count;
+		  elf_local_got_offsets (input_bfd)[symndx] |= 1;
 		}
 
-	      value = sgot->output_offset + off;
+	      value = sgot->output_offset + (off & ~(bfd_vma) 1);
 	    }
-      }
+	}
 
       value += addend;
 
-      if (r_type == R_MN10300_GOT32)
+      if (r_type == R_MN10300_TLS_IE)
+	{
+	  value += sgot->output_section->vma;
+	  bfd_put_32 (input_bfd, value, hit_data);
+	  return bfd_reloc_ok;
+	}
+      else if (r_type == R_MN10300_TLS_GOTIE
+	       || r_type == R_MN10300_TLS_GD
+	       || r_type == R_MN10300_TLS_LD)
+	{
+	  bfd_put_32 (input_bfd, value, hit_data);
+	  return bfd_reloc_ok;
+	}
+      else if (r_type == R_MN10300_GOT32)
 	{
 	  bfd_put_32 (input_bfd, value, hit_data);
 	  return bfd_reloc_ok;
@@ -1419,6 +1988,7 @@ mn10300_elf_relocate_section (bfd *output_bfd,
   Elf_Internal_Shdr *symtab_hdr;
   struct elf_link_hash_entry **sym_hashes;
   Elf_Internal_Rela *rel, *relend;
+  Elf_Internal_Rela * trel;
 
   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (input_bfd);
@@ -1435,7 +2005,12 @@ mn10300_elf_relocate_section (bfd *output_bfd,
       struct elf32_mn10300_link_hash_entry *h;
       bfd_vma relocation;
       bfd_reloc_status_type r;
+      int tls_r_type;
+      bfd_boolean unresolved_reloc = FALSE;
+      bfd_boolean warned;
+      struct elf_link_hash_entry * hh;
 
+      relocation = 0;
       r_symndx = ELF32_R_SYM (rel->r_info);
       r_type = ELF32_R_TYPE (rel->r_info);
       howto = elf_mn10300_howto_table + r_type;
@@ -1449,24 +2024,42 @@ mn10300_elf_relocate_section (bfd *output_bfd,
       sym = NULL;
       sec = NULL;
       if (r_symndx < symtab_hdr->sh_info)
-	{
-	  sym = local_syms + r_symndx;
-	  sec = local_sections[r_symndx];
-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
-	}
+	hh = NULL;
       else
 	{
-	  bfd_boolean unresolved_reloc;
-	  bfd_boolean warned;
-	  struct elf_link_hash_entry *hh;
-
 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
 				   r_symndx, symtab_hdr, sym_hashes,
 				   hh, sec, relocation,
 				   unresolved_reloc, warned);
+	}
+      h = elf_mn10300_hash_entry (hh);
 
-	  h = (struct elf32_mn10300_link_hash_entry *) hh;
+      tls_r_type = elf_mn10300_tls_transition (info, r_type, hh, input_section, 0);
+      if (tls_r_type != r_type)
+	{
+	  bfd_boolean had_plt;
+
+	  had_plt = mn10300_do_tls_transition (input_bfd, r_type, tls_r_type,
+					       contents, rel->r_offset);
+	  r_type = tls_r_type;
+	  howto = elf_mn10300_howto_table + r_type;
+
+	  if (had_plt)
+	    for (trel = rel+1; trel < relend; trel++)
+	      if ((ELF32_R_TYPE (trel->r_info) == R_MN10300_PLT32
+		   || ELF32_R_TYPE (trel->r_info) == R_MN10300_PCREL32)
+		  && rel->r_offset + had_plt == trel->r_offset)
+		trel->r_info = ELF32_R_INFO (0, R_MN10300_NONE);
+	}
 
+      if (r_symndx < symtab_hdr->sh_info)
+	{
+	  sym = local_syms + r_symndx;
+	  sec = local_sections[r_symndx];
+	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+	}
+      else
+	{
 	  if ((h->root.root.type == bfd_link_hash_defined
 	      || h->root.root.type == bfd_link_hash_defweak)
 	      && (   r_type == R_MN10300_GOTPC32
@@ -1478,6 +2071,10 @@ mn10300_elf_relocate_section (bfd *output_bfd,
 		      && h->root.plt.offset != (bfd_vma) -1)
 		  || ((   r_type == R_MN10300_GOT32
 		       || r_type == R_MN10300_GOT24
+		       || r_type == R_MN10300_TLS_GD
+		       || r_type == R_MN10300_TLS_LD
+		       || r_type == R_MN10300_TLS_GOTIE
+		       || r_type == R_MN10300_TLS_IE
 		       || r_type == R_MN10300_GOT16)
 		      && elf_hash_table (info)->dynamic_sections_created
 		      && !SYMBOL_REFERENCES_LOCAL (info, hh))
@@ -1512,9 +2109,9 @@ mn10300_elf_relocate_section (bfd *output_bfd,
 	       h->root.root.root.string);
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -1571,6 +2168,9 @@ mn10300_elf_relocate_section (bfd *output_bfd,
 	      if (r_type == R_MN10300_PCREL32)
 		msg = _("error: inappropriate relocation type for shared"
 			" library (did you forget -fpic?)");
+	      else if (r_type == R_MN10300_GOT32)
+		msg = _("%B: taking the address of protected function"
+			" '%s' cannot be done when making a shared library");
 	      else
 		msg = _("internal error: suspicious relocation type used"
 			" in shared library");
@@ -1581,11 +2181,9 @@ mn10300_elf_relocate_section (bfd *output_bfd,
 	      /* Fall through.  */
 
 	    common_error:
-	      if (!((*info->callbacks->warning)
-		    (info, msg, name, input_bfd, input_section,
-		     rel->r_offset)))
-		return FALSE;
-	      break;
+	      _bfd_error_handler (msg, input_bfd, name);
+	      bfd_set_error (bfd_error_bad_value);
+	      return FALSE;
 	    }
 	}
     }
@@ -2581,6 +3179,7 @@ mn10300_elf_relax_section (bfd *abfd,
 		    {
 		      int bytes = 0;
 		      bfd_vma symval;
+		      struct elf_link_hash_entry **hh;
 
 		      /* Note that we've changed things.  */
 		      elf_section_data (section)->relocs = internal_relocs;
@@ -2611,6 +3210,25 @@ mn10300_elf_relax_section (bfd *abfd,
 							   bytes))
 			goto error_return;
 
+		      /* There may be other C++ functions symbols with the same
+			 address.  If so then mark these as having had their
+			 prologue bytes deleted as well.  */
+		      for (hh = elf_sym_hashes (input_bfd); hh < end_hashes; hh++)
+			{
+			  struct elf32_mn10300_link_hash_entry *h;
+
+			  h = (struct elf32_mn10300_link_hash_entry *) * hh;
+
+			  if (h != sym_hash
+			      && (h->root.root.type == bfd_link_hash_defined
+				  || h->root.root.type == bfd_link_hash_defweak)
+			      && h->root.root.u.def.section == section
+			      && ! (h->flags & MN10300_CONVERT_CALL_TO_CALLS)
+			      && h->root.root.u.def.value == symval
+			      && h->root.type == STT_FUNC)
+			    h->flags |= MN10300_DELETED_PROLOGUE_BYTES;
+			}
+
 		      /* Something changed.  Not strictly necessary, but
 			 may lead to more relaxing opportunities.  */
 		      *again = TRUE;
@@ -2766,7 +3384,7 @@ mn10300_elf_relax_section (bfd *abfd,
 						      isym->st_name);
 
 	  if ((sym_sec->flags & SEC_MERGE)
-	      && sym_sec->sec_info_type == ELF_INFO_TYPE_MERGE)
+	      && sym_sec->sec_info_type == SEC_INFO_TYPE_MERGE)
 	    {
 	      symval = isym->st_value;
 
@@ -2862,9 +3480,7 @@ mn10300_elf_relax_section (bfd *abfd,
 	    {
 	      asection * splt;
 
-	      splt = bfd_get_section_by_name (elf_hash_table (link_info)
-					      ->dynobj, ".plt");
-
+	      splt = hash_table->root.splt;
 	      value = ((splt->output_section->vma
 			+ splt->output_offset
 			+ h->root.plt.offset)
@@ -3304,9 +3920,7 @@ mn10300_elf_relax_section (bfd *abfd,
 	    {
 	      asection * sgot;
 
-	      sgot = bfd_get_section_by_name (elf_hash_table (link_info)
-					      ->dynobj, ".got");
-
+	      sgot = hash_table->root.sgot;
 	      if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_GOT32)
 		{
 		  value = sgot->output_offset;
@@ -3949,11 +4563,38 @@ elf32_mn10300_link_hash_newfunc (struct bfd_hash_entry *entry,
       ret->movm_stack_size = 0;
       ret->flags = 0;
       ret->value = 0;
+      ret->tls_type = GOT_UNKNOWN;
     }
 
   return (struct bfd_hash_entry *) ret;
 }
 
+static void
+_bfd_mn10300_copy_indirect_symbol (struct bfd_link_info *        info,
+				   struct elf_link_hash_entry *  dir,
+				   struct elf_link_hash_entry *  ind)
+{
+  struct elf32_mn10300_link_hash_entry * edir;
+  struct elf32_mn10300_link_hash_entry * eind;
+
+  edir = elf_mn10300_hash_entry (dir);
+  eind = elf_mn10300_hash_entry (ind);
+
+  if (ind->root.type == bfd_link_hash_indirect
+      && dir->got.refcount <= 0)
+    {
+      edir->tls_type = eind->tls_type;
+      eind->tls_type = GOT_UNKNOWN;
+    }
+  edir->direct_calls = eind->direct_calls;
+  edir->stack_size = eind->stack_size;
+  edir->movm_args = eind->movm_args;
+  edir->movm_stack_size = eind->movm_stack_size;
+  edir->flags = eind->flags;
+
+  _bfd_elf_link_hash_copy_indirect (info, dir, ind);
+}
+
 /* Create an mn10300 ELF linker hash table.  */
 
 static struct bfd_link_hash_table *
@@ -3976,6 +4617,11 @@ elf32_mn10300_link_hash_table_create (bfd *abfd)
     }
 
   ret->flags = 0;
+  ret->tls_ldm_got.refcount = 0;
+  ret->tls_ldm_got.offset = -1;
+  ret->tls_ldm_got.got_allocated = 0;
+  ret->tls_ldm_got.rel_emitted = 0;
+
   amt = sizeof (struct elf_link_hash_table);
   ret->static_hash_table = bfd_malloc (amt);
   if (ret->static_hash_table == NULL)
@@ -4154,6 +4800,7 @@ _bfd_mn10300_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
   flagword   flags;
   asection * s;
   const struct elf_backend_data * bed = get_elf_backend_data (abfd);
+  struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info);
   int ptralign = 0;
 
   switch (bed->s->arch_size)
@@ -4176,10 +4823,11 @@ _bfd_mn10300_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
 	   | SEC_LINKER_CREATED);
 
-  s = bfd_make_section_with_flags (abfd,
-				   (bed->default_use_rela_p
-				    ? ".rela.plt" : ".rel.plt"),
-				   flags | SEC_READONLY);
+  s = bfd_make_section_anyway_with_flags (abfd,
+					  (bed->default_use_rela_p
+					   ? ".rela.plt" : ".rel.plt"),
+					  flags | SEC_READONLY);
+  htab->root.srelplt = s;
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, ptralign))
     return FALSE;
@@ -4187,32 +4835,6 @@ _bfd_mn10300_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
   if (! _bfd_mn10300_elf_create_got_section (abfd, info))
     return FALSE;
 
-  {
-    const char * secname;
-    char *       relname;
-    flagword     secflags;
-    asection *   sec;
-
-    for (sec = abfd->sections; sec; sec = sec->next)
-      {
-	secflags = bfd_get_section_flags (abfd, sec);
-	if ((secflags & (SEC_DATA | SEC_LINKER_CREATED))
-	    || ((secflags & SEC_HAS_CONTENTS) != SEC_HAS_CONTENTS))
-	  continue;
-
-	secname = bfd_get_section_name (abfd, sec);
-	relname = bfd_malloc (strlen (secname) + 6);
-	strcpy (relname, ".rela");
-	strcat (relname, secname);
-
-	s = bfd_make_section_with_flags (abfd, relname,
-					 flags | SEC_READONLY);
-	if (s == NULL
-	    || ! bfd_set_section_alignment (abfd, s, ptralign))
-	  return FALSE;
-      }
-  }
-
   if (bed->want_dynbss)
     {
       /* The .dynbss section is a place to put symbols which are defined
@@ -4221,8 +4843,8 @@ _bfd_mn10300_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 	 image and use a R_*_COPY reloc to tell the dynamic linker to
 	 initialize them at run time.  The linker script puts the .dynbss
 	 section into the .bss section of the final image.  */
-      s = bfd_make_section_with_flags (abfd, ".dynbss",
-				       SEC_ALLOC | SEC_LINKER_CREATED);
+      s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
+					      SEC_ALLOC | SEC_LINKER_CREATED);
       if (s == NULL)
 	return FALSE;
 
@@ -4239,10 +4861,10 @@ _bfd_mn10300_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 	 copy relocs.  */
       if (! info->shared)
 	{
-	  s = bfd_make_section_with_flags (abfd,
-					   (bed->default_use_rela_p
-					    ? ".rela.bss" : ".rel.bss"),
-					   flags | SEC_READONLY);
+	  s = bfd_make_section_anyway_with_flags (abfd,
+						  (bed->default_use_rela_p
+						   ? ".rela.bss" : ".rel.bss"),
+						  flags | SEC_READONLY);
 	  if (s == NULL
 	      || ! bfd_set_section_alignment (abfd, s, ptralign))
 	    return FALSE;
@@ -4262,10 +4884,11 @@ static bfd_boolean
 _bfd_mn10300_elf_adjust_dynamic_symbol (struct bfd_link_info * info,
 					struct elf_link_hash_entry * h)
 {
+  struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info);
   bfd * dynobj;
   asection * s;
 
-  dynobj = elf_hash_table (info)->dynobj;
+  dynobj = htab->root.dynobj;
 
   /* Make sure we know what is going on here.  */
   BFD_ASSERT (dynobj != NULL
@@ -4301,7 +4924,7 @@ _bfd_mn10300_elf_adjust_dynamic_symbol (struct bfd_link_info * info,
 	    return FALSE;
 	}
 
-      s = bfd_get_section_by_name (dynobj, ".plt");
+      s = htab->root.splt;
       BFD_ASSERT (s != NULL);
 
       /* If this is the first .plt entry, make room for the special
@@ -4328,12 +4951,12 @@ _bfd_mn10300_elf_adjust_dynamic_symbol (struct bfd_link_info * info,
 
       /* 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");
+      s = htab->root.sgotplt;
       BFD_ASSERT (s != NULL);
       s->size += 4;
 
       /* We also need to make an entry in the .rela.plt section.  */
-      s = bfd_get_section_by_name (dynobj, ".rela.plt");
+      s = bfd_get_linker_section (dynobj, ".rela.plt");
       BFD_ASSERT (s != NULL);
       s->size += sizeof (Elf32_External_Rela);
 
@@ -4367,13 +4990,6 @@ _bfd_mn10300_elf_adjust_dynamic_symbol (struct bfd_link_info * info,
   if (!h->non_got_ref)
     return TRUE;
 
-  if (h->size == 0)
-    {
-      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
-			     h->root.root.string);
-      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
@@ -4384,18 +5000,18 @@ _bfd_mn10300_elf_adjust_dynamic_symbol (struct bfd_link_info * info,
      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");
+  s = bfd_get_linker_section (dynobj, ".dynbss");
   BFD_ASSERT (s != NULL);
 
   /* We must generate a R_MN10300_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
      .rela.bss section we are going to use.  */
-  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
       asection * srel;
 
-      srel = bfd_get_section_by_name (dynobj, ".rela.bss");
+      srel = bfd_get_linker_section (dynobj, ".rela.bss");
       BFD_ASSERT (srel != NULL);
       srel->size += sizeof (Elf32_External_Rela);
       h->needs_copy = 1;
@@ -4410,13 +5026,14 @@ static bfd_boolean
 _bfd_mn10300_elf_size_dynamic_sections (bfd * output_bfd,
 					struct bfd_link_info * info)
 {
+  struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info);
   bfd * dynobj;
   asection * s;
   bfd_boolean plt;
   bfd_boolean relocs;
   bfd_boolean reltext;
 
-  dynobj = elf_hash_table (info)->dynobj;
+  dynobj = htab->root.dynobj;
   BFD_ASSERT (dynobj != NULL);
 
   if (elf_hash_table (info)->dynamic_sections_created)
@@ -4424,7 +5041,7 @@ _bfd_mn10300_elf_size_dynamic_sections (bfd * output_bfd,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  BFD_ASSERT (s != NULL);
 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
@@ -4437,11 +5054,18 @@ _bfd_mn10300_elf_size_dynamic_sections (bfd * output_bfd,
 	 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");
+      s = htab->root.sgot;
       if (s != NULL)
 	s->size = 0;
     }
 
+  if (htab->tls_ldm_got.refcount > 0)
+    {
+      s = bfd_get_linker_section (dynobj, ".rela.got");
+      BFD_ASSERT (s != NULL);
+      s->size += sizeof (Elf32_External_Rela);
+    }
+
   /* The check_relocs and adjust_dynamic_symbol entry points have
      determined the sizes of the various dynamic sections.  Allocate
      memory for them.  */
@@ -4580,9 +5204,10 @@ _bfd_mn10300_elf_finish_dynamic_symbol (bfd * output_bfd,
 					struct elf_link_hash_entry * h,
 					Elf_Internal_Sym * sym)
 {
+  struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info);
   bfd * dynobj;
 
-  dynobj = elf_hash_table (info)->dynobj;
+  dynobj = htab->root.dynobj;
 
   if (h->plt.offset != (bfd_vma) -1)
     {
@@ -4598,9 +5223,9 @@ _bfd_mn10300_elf_finish_dynamic_symbol (bfd * output_bfd,
 
       BFD_ASSERT (h->dynindx != -1);
 
-      splt = bfd_get_section_by_name (dynobj, ".plt");
-      sgot = bfd_get_section_by_name (dynobj, ".got.plt");
-      srel = bfd_get_section_by_name (dynobj, ".rela.plt");
+      splt = htab->root.splt;
+      sgot = htab->root.sgotplt;
+      srel = bfd_get_linker_section (dynobj, ".rela.plt");
       BFD_ASSERT (splt != NULL && sgot != NULL && srel != NULL);
 
       /* Get the index in the procedure linkage table which
@@ -4677,39 +5302,72 @@ _bfd_mn10300_elf_finish_dynamic_symbol (bfd * output_bfd,
       Elf_Internal_Rela rel;
 
       /* This symbol has an entry in the global offset table.  Set it up.  */
-      sgot = bfd_get_section_by_name (dynobj, ".got");
-      srel = bfd_get_section_by_name (dynobj, ".rela.got");
+      sgot = htab->root.sgot;
+      srel = bfd_get_linker_section (dynobj, ".rela.got");
       BFD_ASSERT (sgot != NULL && srel != NULL);
 
       rel.r_offset = (sgot->output_section->vma
 		      + sgot->output_offset
 		      + (h->got.offset & ~1));
 
-      /* If this is a -Bsymbolic link, and the symbol is defined
-	 locally, we just want to emit a RELATIVE reloc.  Likewise if
-	 the symbol was forced to be local because of a version file.
-	 The entry in the global offset table will already have been
-	 initialized in the relocate_section function.  */
-      if (info->shared
-	  && (info->symbolic || h->dynindx == -1)
-	  && h->def_regular)
-	{
-	  rel.r_info = ELF32_R_INFO (0, R_MN10300_RELATIVE);
-	  rel.r_addend = (h->root.u.def.value
-			  + h->root.u.def.section->output_section->vma
-			  + h->root.u.def.section->output_offset);
-	}
-      else
+      switch (elf_mn10300_hash_entry (h)->tls_type)
 	{
+	case GOT_TLS_GD:
 	  bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset);
-	  rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_GLOB_DAT);
+	  bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset + 4);
+	  rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_TLS_DTPMOD);
 	  rel.r_addend = 0;
+	  bfd_elf32_swap_reloca_out (output_bfd, & rel,
+				     (bfd_byte *) ((Elf32_External_Rela *) srel->contents
+						   + srel->reloc_count));
+	  ++ srel->reloc_count;
+	  rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_TLS_DTPOFF);
+	  rel.r_offset += 4;
+	  rel.r_addend = 0;
+	  break;
+
+	case GOT_TLS_IE:
+	  /* We originally stored the addend in the GOT, but at this
+	     point, we want to move it to the reloc instead as that's
+	     where the dynamic linker wants it.  */
+	  rel.r_addend = bfd_get_32 (output_bfd, sgot->contents + h->got.offset);
+	  bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset);
+	  if (h->dynindx == -1)
+	    rel.r_info = ELF32_R_INFO (0, R_MN10300_TLS_TPOFF);
+	  else
+	    rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_TLS_TPOFF);
+	  break;
+
+	default:
+	  /* If this is a -Bsymbolic link, and the symbol is defined
+	     locally, we just want to emit a RELATIVE reloc.  Likewise if
+	     the symbol was forced to be local because of a version file.
+	     The entry in the global offset table will already have been
+	     initialized in the relocate_section function.  */
+	  if (info->shared
+	      && (info->symbolic || h->dynindx == -1)
+	      && h->def_regular)
+	    {
+	      rel.r_info = ELF32_R_INFO (0, R_MN10300_RELATIVE);
+	      rel.r_addend = (h->root.u.def.value
+			      + h->root.u.def.section->output_section->vma
+			      + h->root.u.def.section->output_offset);
+	    }
+	  else
+	    {
+	      bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset);
+	      rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_GLOB_DAT);
+	      rel.r_addend = 0;
+	    }
 	}
 
-      bfd_elf32_swap_reloca_out (output_bfd, &rel,
-				 (bfd_byte *) ((Elf32_External_Rela *) srel->contents
-					       + srel->reloc_count));
-      ++ srel->reloc_count;
+      if (ELF32_R_TYPE (rel.r_info) != R_MN10300_NONE)
+	{
+	  bfd_elf32_swap_reloca_out (output_bfd, &rel,
+				     (bfd_byte *) ((Elf32_External_Rela *) srel->contents
+						   + srel->reloc_count));
+	  ++ srel->reloc_count;
+	}
     }
 
   if (h->needs_copy)
@@ -4722,8 +5380,7 @@ _bfd_mn10300_elf_finish_dynamic_symbol (bfd * output_bfd,
 		  && (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");
+      s = bfd_get_linker_section (dynobj, ".rela.bss");
       BFD_ASSERT (s != NULL);
 
       rel.r_offset = (h->root.u.def.value
@@ -4754,12 +5411,12 @@ _bfd_mn10300_elf_finish_dynamic_sections (bfd * output_bfd,
   bfd *      dynobj;
   asection * sgot;
   asection * sdyn;
+  struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info);
 
-  dynobj = elf_hash_table (info)->dynobj;
-
-  sgot = bfd_get_section_by_name (dynobj, ".got.plt");
+  dynobj = htab->root.dynobj;
+  sgot = htab->root.sgotplt;
   BFD_ASSERT (sgot != NULL);
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
     {
@@ -4824,7 +5481,7 @@ _bfd_mn10300_elf_finish_dynamic_sections (bfd * output_bfd,
 	}
 
       /* Fill in the first entry in the procedure linkage table.  */
-      splt = bfd_get_section_by_name (dynobj, ".plt");
+      splt = htab->root.splt;
       if (splt && splt->size > 0)
 	{
 	  if (info->shared)
@@ -4846,6 +5503,14 @@ _bfd_mn10300_elf_finish_dynamic_sections (bfd * output_bfd,
 	  /* UnixWare sets the entsize of .plt to 4, although that doesn't
 	     really seem like the right value.  */
 	  elf_section_data (splt->output_section)->this_hdr.sh_entsize = 4;
+
+	  /* UnixWare sets the entsize of .plt to 4, but this is incorrect
+	     as it means that the size of the PLT0 section (15 bytes) is not
+	     a multiple of the sh_entsize.  Some ELF tools flag this as an
+	     error.  We could pad PLT0 to 16 bytes, but that would introduce
+	     compatibilty issues with previous toolchains, so instead we
+	     just set the entry size to 1.  */
+	  elf_section_data (splt->output_section)->this_hdr.sh_entsize = 1;
 	}
     }
 
@@ -4887,12 +5552,7 @@ _bfd_mn10300_elf_reloc_type_class (const Elf_Internal_Rela *rela)
 static bfd_boolean
 mn10300_elf_mkobject (bfd *abfd)
 {
-  /* We do not actually need any extra room in the bfd elf data structure.
-     But we do need the object_id of the structure to be set to
-     MN10300_ELF_DATA so that elflink.c:elf_link_add_object_symols() will call
-     our mn10300_elf_check_relocs function which will then allocate space in
-     the .got section for any GOT based relocs.  */
-  return bfd_elf_allocate_object (abfd, sizeof (struct elf_obj_tdata),
+  return bfd_elf_allocate_object (abfd, sizeof (struct elf_mn10300_obj_tdata),
 				  MN10300_ELF_DATA);
 }
 
@@ -4948,7 +5608,8 @@ mn10300_elf_mkobject (bfd *abfd)
   _bfd_mn10300_elf_finish_dynamic_symbol
 #define elf_backend_finish_dynamic_sections \
   _bfd_mn10300_elf_finish_dynamic_sections
-
+#define elf_backend_copy_indirect_symbol \
+  _bfd_mn10300_copy_indirect_symbol
 #define elf_backend_reloc_type_class \
   _bfd_mn10300_elf_reloc_type_class
 
diff --git a/bfd/elf-nacl.c b/bfd/elf-nacl.c
new file mode 100644
index 0000000..842e367
--- /dev/null
+++ b/bfd/elf-nacl.c
@@ -0,0 +1,215 @@
+/* Native Client support for ELF
+   Copyright 2012 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 3 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 "sysdep.h"
+#include "bfd.h"
+#include "elf-bfd.h"
+#include "elf-nacl.h"
+#include "elf/common.h"
+#include "elf/internal.h"
+
+static bfd_boolean
+segment_executable (struct elf_segment_map *seg)
+{
+  if (seg->p_flags_valid)
+    return (seg->p_flags & PF_X) != 0;
+  else
+    {
+      /* The p_flags value has not been computed yet,
+         so we have to look through the sections.  */
+      unsigned int i;
+      for (i = 0; i < seg->count; ++i)
+        if (seg->sections[i]->flags & SEC_CODE)
+          return TRUE;
+    }
+  return FALSE;
+}
+
+static bfd_boolean
+segment_nonexecutable_and_has_contents (struct elf_segment_map *seg)
+{
+  bfd_boolean any_contents = FALSE;
+  unsigned int i;
+  for (i = 0; i < seg->count; ++i)
+    {
+      if (seg->sections[i]->flags & SEC_CODE)
+        return FALSE;
+      if (seg->sections[i]->flags & SEC_HAS_CONTENTS)
+        any_contents = TRUE;
+    }
+  return any_contents;
+}
+
+
+/* We permute the segment_map to get BFD to do the file layout we want:
+   The first non-executable PT_LOAD segment appears first in the file
+   and contains the ELF file header and phdrs.  */
+bfd_boolean
+nacl_modify_segment_map (bfd *abfd, struct bfd_link_info *info)
+{
+  struct elf_segment_map **m = &elf_tdata (abfd)->segment_map;
+  struct elf_segment_map **first_load = NULL;
+  struct elf_segment_map **last_load = NULL;
+  bfd_boolean moved_headers = FALSE;
+
+  if (info != NULL && info->user_phdrs)
+    /* The linker script used PHDRS explicitly, so don't change what the
+       user asked for.  */
+    return TRUE;
+
+  while (*m != NULL)
+    {
+      struct elf_segment_map *seg = *m;
+
+      if (seg->p_type == PT_LOAD)
+        {
+          /* First, we're just finding the earliest PT_LOAD.
+             By the normal rules, this will be the lowest-addressed one.
+             We only have anything interesting to do if it's executable.  */
+          last_load = m;
+          if (first_load == NULL)
+            {
+              if (!segment_executable (*m))
+                return TRUE;
+              first_load = m;
+            }
+          /* Now that we've noted the first PT_LOAD, we're looking for
+             the first non-executable PT_LOAD with a nonempty p_filesz.  */
+          else if (!moved_headers
+                   && segment_nonexecutable_and_has_contents (seg))
+            {
+              /* This is the one we were looking for!
+
+                 First, clear the flags on previous segments that
+                 say they include the file header and phdrs.  */
+              struct elf_segment_map *prevseg;
+              for (prevseg = *first_load;
+                   prevseg != seg;
+                   prevseg = prevseg->next)
+                if (prevseg->p_type == PT_LOAD)
+                  {
+                    prevseg->includes_filehdr = 0;
+                    prevseg->includes_phdrs = 0;
+                  }
+
+              /* This segment will include those headers instead.  */
+              seg->includes_filehdr = 1;
+              seg->includes_phdrs = 1;
+
+              moved_headers = TRUE;
+            }
+        }
+
+      m = &seg->next;
+    }
+
+  if (first_load != last_load && moved_headers)
+    {
+      /* Now swap the first and last PT_LOAD segments'
+         positions in segment_map.  */
+      struct elf_segment_map *first = *first_load;
+      struct elf_segment_map *last = *last_load;
+      *first_load = first->next;
+      first->next = last->next;
+      last->next = first;
+    }
+
+  return TRUE;
+}
+
+/* After nacl_modify_segment_map has done its work, the file layout has
+   been done as we wanted.  But the PT_LOAD phdrs are no longer in the
+   proper order for the ELF rule that they must appear in ascending address
+   order.  So find the two segments we swapped before, and swap them back.  */
+bfd_boolean
+nacl_modify_program_headers (bfd *abfd,
+                             struct bfd_link_info *info ATTRIBUTE_UNUSED)
+{
+  struct elf_segment_map **m = &elf_tdata (abfd)->segment_map;
+  Elf_Internal_Phdr *phdr = elf_tdata (abfd)->phdr;
+  Elf_Internal_Phdr *p = phdr;
+
+  if (info != NULL && info->user_phdrs)
+    /* The linker script used PHDRS explicitly, so don't change what the
+       user asked for.  */
+    return TRUE;
+
+  /* Find the PT_LOAD that contains the headers (should be the first).  */
+  while (*m != NULL)
+    {
+      if ((*m)->p_type == PT_LOAD && (*m)->includes_filehdr)
+        break;
+
+      m = &(*m)->next;
+      ++p;
+    }
+
+  if (*m != NULL)
+    {
+      struct elf_segment_map **first_load_seg = m;
+      Elf_Internal_Phdr *first_load_phdr = p;
+      struct elf_segment_map **next_load_seg = NULL;
+      Elf_Internal_Phdr *next_load_phdr = NULL;
+
+      /* Now move past that first one and find the PT_LOAD that should be
+         before it by address order.  */
+
+      m = &(*m)->next;
+      ++p;
+
+      while ((*m) != NULL)
+        {
+          if (p->p_type == PT_LOAD && p->p_vaddr < first_load_phdr->p_vaddr)
+            {
+              next_load_seg = m;
+              next_load_phdr = p;
+              break;
+            }
+
+          m = &(*m)->next;
+          ++p;
+        }
+
+      /* Swap their positions in the segment_map back to how they used to be.
+         The phdrs have already been set up by now, so we have to slide up
+         the earlier ones to insert the one that should be first.  */
+      if (next_load_seg != NULL)
+        {
+          Elf_Internal_Phdr move_phdr;
+          struct elf_segment_map *first_seg = *first_load_seg;
+          struct elf_segment_map *next_seg = *next_load_seg;
+          struct elf_segment_map *first_next = first_seg->next;
+          struct elf_segment_map *next_next = next_seg->next;
+
+          first_seg->next = next_next;
+          *first_load_seg = next_seg;
+
+          next_seg->next = first_next;
+          *next_load_seg = first_seg;
+
+          move_phdr = *next_load_phdr;
+          memmove (first_load_phdr + 1, first_load_phdr,
+                   (next_load_phdr - first_load_phdr) * sizeof move_phdr);
+          *first_load_phdr = move_phdr;
+        }
+    }
+
+  return TRUE;
+}
diff --git a/bfd/elf-nacl.h b/bfd/elf-nacl.h
new file mode 100644
index 0000000..417c7e3
--- /dev/null
+++ b/bfd/elf-nacl.h
@@ -0,0 +1,24 @@
+/* Native Client support for ELF
+   Copyright 2012 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 3 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"
+
+bfd_boolean nacl_modify_segment_map (bfd *, struct bfd_link_info *);
+bfd_boolean nacl_modify_program_headers (bfd *, struct bfd_link_info *);
diff --git a/bfd/elf-s390-common.c b/bfd/elf-s390-common.c
new file mode 100644
index 0000000..691f751
--- /dev/null
+++ b/bfd/elf-s390-common.c
@@ -0,0 +1,243 @@
+/* IBM S/390-specific support for ELF 32 and 64 bit functions
+   Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+   2011, 2012 Free Software Foundation, Inc.
+   Contributed by Andreas Krebbel.
+
+   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 3 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., 51 Franklin Street - Fifth Floor, Boston, MA
+   02110-1301, USA.  */
+
+
+/* Return TRUE if H is an IFUNC symbol.  Simply checking for the
+   symbol type might not be enough since it might get changed to
+   STT_FUNC for pointer equality reasons.  */
+static inline bfd_boolean
+s390_is_ifunc_symbol_p (struct elf_link_hash_entry *h)
+{
+  struct elf_s390_link_hash_entry *eh = (struct elf_s390_link_hash_entry*)h;
+  return h->type == STT_GNU_IFUNC || eh->ifunc_resolver_address != 0;
+}
+
+/* Create sections needed by STT_GNU_IFUNC symbol.  */
+
+static bfd_boolean
+s390_elf_create_ifunc_sections (bfd *abfd, struct bfd_link_info *info)
+{
+  flagword flags;
+  asection *s;
+  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+  struct elf_link_hash_table *htab = elf_hash_table (info);
+
+  if (htab->iplt != NULL)
+    return TRUE;
+
+  flags = bed->dynamic_sec_flags;
+
+  if (info->shared)
+    {
+      s = bfd_make_section_with_flags (abfd, ".rela.ifunc",
+				       flags | SEC_READONLY);
+      if (s == NULL
+	  || ! bfd_set_section_alignment (abfd, s,
+					  bed->s->log_file_align))
+	return FALSE;
+      htab->irelifunc = s;
+    }
+
+  /* Create .iplt, .rel[a].iplt, and .igot.plt.  */
+  s = bfd_make_section_with_flags (abfd, ".iplt",
+				   flags | SEC_CODE | SEC_READONLY);
+  if (s == NULL
+      || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
+    return FALSE;
+  htab->iplt = s;
+
+  s = bfd_make_section_with_flags (abfd, ".rela.iplt", flags | SEC_READONLY);
+  if (s == NULL
+      || ! bfd_set_section_alignment (abfd, s,
+				      bed->s->log_file_align))
+    return FALSE;
+  htab->irelplt = s;
+
+  s = bfd_make_section_with_flags (abfd, ".igot.plt", flags);
+  if (s == NULL
+      || !bfd_set_section_alignment (abfd, s,
+				     bed->s->log_file_align))
+    return FALSE;
+  htab->igotplt = s;
+
+  return TRUE;
+}
+
+
+/* Allocate space in .plt, .got and associated reloc sections for
+   dynamic relocs against a STT_GNU_IFUNC symbol definition.  */
+
+static bfd_boolean
+s390_elf_allocate_ifunc_dyn_relocs (struct bfd_link_info *info,
+				    struct elf_link_hash_entry *h,
+				    struct elf_dyn_relocs **head)
+{
+  struct elf_dyn_relocs *p;
+  struct elf_link_hash_table *htab;
+  struct elf_s390_link_hash_entry *eh = (struct elf_s390_link_hash_entry*)h;
+
+  htab = elf_hash_table (info);
+  eh->ifunc_resolver_address = h->root.u.def.value;
+  eh->ifunc_resolver_section = h->root.u.def.section;
+
+  /* Support garbage collection against STT_GNU_IFUNC symbols.  */
+  if (h->plt.refcount <= 0 && h->got.refcount <= 0)
+    {
+      /* When building shared library, we need to handle the case
+         where it is marked with regular reference, but not non-GOT
+	 reference.  It may happen if we didn't see STT_GNU_IFUNC
+	 symbol at the time when checking relocations.  */
+      if (info->shared
+	  && !h->non_got_ref
+	  && h->ref_regular)
+	for (p = *head; p != NULL; p = p->next)
+	  if (p->count)
+	    {
+	      h->non_got_ref = 1;
+	      goto keep;
+	    }
+
+      h->got = htab->init_got_offset;
+      h->plt = htab->init_plt_offset;
+      *head = NULL;
+      return TRUE;
+    }
+
+  /* Return and discard space for dynamic relocations against it if
+     it is never referenced in a non-shared object.  */
+  if (!h->ref_regular)
+    {
+      if (h->plt.refcount > 0
+	  || h->got.refcount > 0)
+	abort ();
+      h->got = htab->init_got_offset;
+      h->plt = htab->init_plt_offset;
+      *head = NULL;
+      return TRUE;
+    }
+
+keep:
+  /* Without checking h->plt.refcount here we allocate a PLT slot.
+     When setting plt.refcount in check_relocs it might not have been
+     known that this will be an IFUNC symol.  */
+  h->plt.offset = htab->iplt->size;
+  h->needs_plt = 1;
+  htab->iplt->size += PLT_ENTRY_SIZE;
+  htab->igotplt->size += GOT_ENTRY_SIZE;
+  htab->irelplt->size += RELA_ENTRY_SIZE;
+  htab->irelplt->reloc_count++;
+
+  /* In order to make pointer equality work with IFUNC symbols defined
+     in a non-PIE executable and referenced in a shared lib, we turn
+     the symbol into a STT_FUNC symbol and make the symbol value to
+     point to the IPLT slot.  That way the referencing shared lib will
+     always get the PLT slot address when resolving the respective
+     R_390_GLOB_DAT/R_390_64 relocs on that symbol.  */
+  if (info->executable && !info->shared && h->def_regular && h->ref_dynamic)
+    {
+      h->root.u.def.section = htab->iplt;
+      h->root.u.def.value = h->plt.offset;
+      h->size = PLT_ENTRY_SIZE;
+      h->type = STT_FUNC;
+    }
+
+  /* We need dynamic relocation for STT_GNU_IFUNC symbol only when
+     there is a non-GOT reference in a shared object.  */
+  if (!info->shared || !h->non_got_ref)
+    *head = NULL;
+
+  /* Finally, allocate space.  */
+  p = *head;
+  if (p != NULL)
+    {
+      bfd_size_type count = 0;
+      do
+	{
+	  count += p->count;
+	  p = p->next;
+	}
+      while (p != NULL);
+      htab->irelifunc->size += count * RELA_ENTRY_SIZE;
+    }
+
+  /* Decide whether the got.iplt slot can be used.  This has to be
+     avoided if the values in the GOT slots could differ for pointer
+     equality reasons.  */
+  if (h->got.refcount <= 0
+      || (info->shared
+	  && (h->dynindx == -1 || h->forced_local))
+      || (info->executable && info->shared)
+      || htab->sgot == NULL)
+    {
+      /* Use .got.iplt.  */
+      h->got.offset = (bfd_vma) -1;
+    }
+  else
+    {
+      h->got.offset = htab->sgot->size;
+      htab->sgot->size += GOT_ENTRY_SIZE;
+      if (info->shared)
+	htab->srelgot->size += RELA_ENTRY_SIZE;
+    }
+
+  return TRUE;
+}
+
+static bfd_boolean
+elf_s390_allocate_local_syminfo (bfd *abfd, Elf_Internal_Shdr *symtab_hdr)
+{
+  bfd_size_type size;
+
+  size = symtab_hdr->sh_info;
+  size *= (sizeof (bfd_signed_vma)       /* local got */
+	   + sizeof (struct plt_entry)   /* local plt */
+	   + sizeof(char));              /* local tls type */
+  elf_local_got_refcounts (abfd) = ((bfd_signed_vma *)
+				    bfd_zalloc (abfd, size));
+  if (elf_local_got_refcounts (abfd) == NULL)
+    return FALSE;
+  elf_s390_local_plt (abfd)
+    = (struct plt_entry*)(elf_local_got_refcounts (abfd)
+			  + symtab_hdr->sh_info);
+  elf_s390_local_got_tls_type (abfd)
+    = (char *) (elf_s390_local_plt (abfd) + symtab_hdr->sh_info);
+
+  return TRUE;
+}
+
+/* Pick ELFOSABI_GNU if IFUNC symbols are used.  */
+
+static bfd_boolean
+elf_s390_add_symbol_hook (bfd *abfd,
+			  struct bfd_link_info *info,
+			  Elf_Internal_Sym *sym,
+			  const char **namep ATTRIBUTE_UNUSED,
+			  flagword *flagsp ATTRIBUTE_UNUSED,
+			  asection **secp ATTRIBUTE_UNUSED,
+			  bfd_vma *valp ATTRIBUTE_UNUSED)
+{
+  if ((abfd->flags & DYNAMIC) == 0
+      && ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
+    elf_tdata (info->output_bfd)->has_gnu_symbols = TRUE;
+
+  return TRUE;
+}
diff --git a/bfd/elf-vxworks.c b/bfd/elf-vxworks.c
index 06edf8d..11dfb10 100644
--- a/bfd/elf-vxworks.c
+++ b/bfd/elf-vxworks.c
@@ -1,5 +1,5 @@
 /* VxWorks support for ELF
-   Copyright 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
+   Copyright 2005, 2006, 2007, 2009, 2012 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -91,12 +91,13 @@ elf_vxworks_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info,
 
   if (!info->shared)
     {
-      s = bfd_make_section_with_flags (dynobj,
-				       bed->default_use_rela_p
-				       ? ".rela.plt.unloaded"
-				       : ".rel.plt.unloaded",
-				       SEC_HAS_CONTENTS | SEC_IN_MEMORY
-				       | SEC_READONLY | SEC_LINKER_CREATED);
+      s = bfd_make_section_anyway_with_flags (dynobj,
+					      bed->default_use_rela_p
+					      ? ".rela.plt.unloaded"
+					      : ".rel.plt.unloaded",
+					      SEC_HAS_CONTENTS | SEC_IN_MEMORY
+					      | SEC_READONLY
+					      | SEC_LINKER_CREATED);
       if (s == NULL
 	  || !bfd_set_section_alignment (dynobj, s, bed->s->log_file_align))
 	return FALSE;
@@ -280,7 +281,8 @@ elf_vxworks_finish_dynamic_entry (bfd *output_bfd, Elf_Internal_Dyn *dyn)
     case DT_VX_WRS_TLS_DATA_ALIGN:
       sec = bfd_get_section_by_name (output_bfd, ".tls_data");
       dyn->d_un.d_val
-	= (bfd_size_type)1 << bfd_get_section_alignment (abfd, sec);
+	= (bfd_size_type)1 << bfd_get_section_alignment (output_bfd,
+							 sec);
       break;
       
     case DT_VX_WRS_TLS_VARS_START:
diff --git a/bfd/elf.c b/bfd/elf.c
index f1e4882..48e5d68 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -1,7 +1,7 @@
 /* ELF executable support for BFD.
 
    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-   2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -1025,7 +1025,7 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
       else
 	{
 	  /* Normal section.  Check if we should compress.  */
-	  if ((abfd->flags & BFD_COMPRESS))
+	  if ((abfd->flags & BFD_COMPRESS) && newsect->size != 0)
 	    action = compress;
 	}
 
@@ -1038,7 +1038,7 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
 	  if (!bfd_init_section_compress_status (abfd, newsect))
 	    {
 	      (*_bfd_error_handler)
-		(_("%B: unable to initialize commpress status for section %s"),
+		(_("%B: unable to initialize compress status for section %s"),
 		 abfd, name);
 	      return FALSE;
 	    }
@@ -1058,7 +1058,7 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
 	  if (!bfd_init_section_decompress_status (abfd, newsect))
 	    {
 	      (*_bfd_error_handler)
-		(_("%B: unable to initialize decommpress status for section %s"),
+		(_("%B: unable to initialize decompress status for section %s"),
 		 abfd, name);
 	      return FALSE;
 	    }
@@ -1646,7 +1646,15 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
       if (hdr->sh_entsize != bed->s->sizeof_sym)
 	return FALSE;
       if (hdr->sh_info * hdr->sh_entsize > hdr->sh_size)
-	return FALSE;
+	{
+	  if (hdr->sh_size != 0)
+	    return FALSE;
+	  /* Some assemblers erroneously set sh_info to one with a
+	     zero sh_size.  ld sees this as a global symbol count
+	     of (unsigned) -1.  Fix it here.  */
+	  hdr->sh_info = 0;
+	  return TRUE;
+	}
       BFD_ASSERT (elf_onesymtab (abfd) == 0);
       elf_onesymtab (abfd) = shindex;
       elf_tdata (abfd)->symtab_hdr = *hdr;
@@ -1699,6 +1707,16 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
 
       if (hdr->sh_entsize != bed->s->sizeof_sym)
 	return FALSE;
+      if (hdr->sh_info * hdr->sh_entsize > hdr->sh_size)
+	{
+	  if (hdr->sh_size != 0)
+	    return FALSE;
+	  /* Some linkers erroneously set sh_info to one with a
+	     zero sh_size.  ld sees this as a global symbol count
+	     of (unsigned) -1.  Fix it here.  */
+	  hdr->sh_info = 0;
+	  return TRUE;
+	}
       BFD_ASSERT (elf_dynsymtab (abfd) == 0);
       elf_dynsymtab (abfd) = shindex;
       elf_tdata (abfd)->dynsymtab_hdr = *hdr;
@@ -2527,7 +2545,7 @@ _bfd_elf_init_reloc_shdr (bfd *abfd,
   rel_hdr = bfd_zalloc (abfd, amt);
   reldata->hdr = rel_hdr;
 
-  amt = sizeof ".rela" + strlen (asect->name);      
+  amt = sizeof ".rela" + strlen (asect->name);
   name = (char *) bfd_alloc (abfd, amt);
   if (name == NULL)
     return FALSE;
@@ -2996,6 +3014,13 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
       _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->strtab_hdr.sh_name);
     }
 
+  if (section_number >= SHN_LORESERVE)
+    {
+      _bfd_error_handler (_("%B: too many sections: %u"),
+			  abfd, section_number);
+      return FALSE;
+    }
+
   _bfd_elf_strtab_finalize (elf_shstrtab (abfd));
   t->shstrtab_hdr.sh_size = _bfd_elf_strtab_size (elf_shstrtab (abfd));
 
@@ -3071,7 +3096,7 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
 	      if (link_info != NULL)
 		{
 		  /* Check discarded linkonce section.  */
-		  if (elf_discarded_section (s))
+		  if (discarded_section (s))
 		    {
 		      asection *kept;
 		      (*_bfd_error_handler)
@@ -3225,9 +3250,6 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
   return TRUE;
 }
 
-/* Map symbol from it's internal number to the external number, moving
-   all local symbols to be at the head of the list.  */
-
 static bfd_boolean
 sym_is_global (bfd *abfd, asymbol *sym)
 {
@@ -3242,7 +3264,7 @@ sym_is_global (bfd *abfd, asymbol *sym)
 }
 
 /* Don't output section symbols for sections that are not going to be
-   output.  */
+   output, or that are duplicates.  */
 
 static bfd_boolean
 ignore_section_sym (bfd *abfd, asymbol *sym)
@@ -3250,9 +3272,13 @@ ignore_section_sym (bfd *abfd, asymbol *sym)
   return ((sym->flags & BSF_SECTION_SYM) != 0
 	  && !(sym->section->owner == abfd
 	       || (sym->section->output_section->owner == abfd
-		   && sym->section->output_offset == 0)));
+		   && sym->section->output_offset == 0)
+	       || bfd_is_abs_section (sym->section)));
 }
 
+/* Map symbol from it's internal number to the external number, moving
+   all local symbols to be at the head of the list.  */
+
 static bfd_boolean
 elf_map_symbols (bfd *abfd)
 {
@@ -3294,7 +3320,8 @@ elf_map_symbols (bfd *abfd)
 
       if ((sym->flags & BSF_SECTION_SYM) != 0
 	  && sym->value == 0
-	  && !ignore_section_sym (abfd, sym))
+	  && !ignore_section_sym (abfd, sym)
+	  && !bfd_is_abs_section (sym->section))
 	{
 	  asection *sec = sym->section;
 
@@ -3308,12 +3335,10 @@ elf_map_symbols (bfd *abfd)
   /* Classify all of the symbols.  */
   for (idx = 0; idx < symcount; idx++)
     {
-      if (ignore_section_sym (abfd, syms[idx]))
-	continue;
-      if (!sym_is_global (abfd, syms[idx]))
-	num_locals++;
-      else
+      if (sym_is_global (abfd, syms[idx]))
 	num_globals++;
+      else if (!ignore_section_sym (abfd, syms[idx]))
+	num_locals++;
     }
 
   /* We will be adding a section symbol for each normal BFD section.  Most
@@ -3343,12 +3368,12 @@ elf_map_symbols (bfd *abfd)
       asymbol *sym = syms[idx];
       unsigned int i;
 
-      if (ignore_section_sym (abfd, sym))
-	continue;
-      if (!sym_is_global (abfd, sym))
+      if (sym_is_global (abfd, sym))
+	i = num_locals + num_globals2++;
+      else if (!ignore_section_sym (abfd, sym))
 	i = num_locals2++;
       else
-	i = num_locals + num_globals2++;
+	continue;
       new_syms[i] = sym;
       sym->udata.i = i + 1;
     }
@@ -3744,6 +3769,10 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
   bfd_boolean no_user_phdrs;
 
   no_user_phdrs = elf_tdata (abfd)->segment_map == NULL;
+
+  if (info != NULL)
+    info->user_phdrs = !no_user_phdrs;
+
   if (no_user_phdrs && bfd_count_sections (abfd) != 0)
     {
       asection *s;
@@ -4130,18 +4159,25 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
 	{
 	  for (m = mfirst; m != NULL; m = m->next)
 	    {
-	      if (m->p_type == PT_LOAD)
+	      if (m->p_type == PT_LOAD
+		  && m->count != 0
+		  && m->sections[0]->vma >= info->relro_start
+		  && m->sections[0]->vma < info->relro_end)
 		{
-		  asection *last = m->sections[m->count - 1];
-		  bfd_vma vaddr = m->sections[0]->vma;
-		  bfd_vma filesz = last->vma - vaddr + last->size;
+		  i = m->count;
+		  while (--i != (unsigned) -1)
+		    if ((m->sections[i]->flags & (SEC_LOAD | SEC_HAS_CONTENTS))
+			== (SEC_LOAD | SEC_HAS_CONTENTS))
+		      break;
 
-		  if (vaddr < info->relro_end
-		      && vaddr >= info->relro_start
-		      && (vaddr + filesz) >= info->relro_end)
+		  if (i == (unsigned) -1)
+		    continue;
+
+		  if (m->sections[i]->vma + m->sections[i]->size
+		      >= info->relro_end)
 		    break;
 		}
-	      }
+	    }
 
 	  /* Make a PT_GNU_RELRO segment only when it isn't empty.  */
 	  if (m != NULL)
@@ -4351,7 +4387,7 @@ assign_file_positions_for_load_sections (bfd *abfd,
       elf_elfheader (abfd)->e_phoff = 0;
       elf_elfheader (abfd)->e_phentsize = 0;
     }
-  
+
   elf_elfheader (abfd)->e_phnum = alloc;
 
   if (elf_tdata (abfd)->program_header_size == (bfd_size_type) -1)
@@ -4546,8 +4582,6 @@ assign_file_positions_for_load_sections (bfd *abfd,
 	  p->p_memsz = bed->s->sizeof_ehdr;
 	  if (m->count > 0)
 	    {
-	      BFD_ASSERT (p->p_type == PT_LOAD);
-
 	      if (p->p_vaddr < (bfd_vma) off)
 		{
 		  (*_bfd_error_handler)
@@ -4574,7 +4608,6 @@ assign_file_positions_for_load_sections (bfd *abfd,
 
 	      if (m->count > 0)
 		{
-		  BFD_ASSERT (p->p_type == PT_LOAD);
 		  p->p_vaddr -= off - p->p_offset;
 		  if (!m->p_paddr_valid)
 		    p->p_paddr -= off - p->p_offset;
@@ -4797,6 +4830,7 @@ assign_file_positions_for_non_load_sections (bfd *abfd,
   Elf_Internal_Phdr *phdrs;
   Elf_Internal_Phdr *p;
   struct elf_segment_map *m;
+  struct elf_segment_map *hdrs_segment;
   bfd_vma filehdr_vaddr, filehdr_paddr;
   bfd_vma phdrs_vaddr, phdrs_paddr;
   file_ptr off;
@@ -4820,12 +4854,13 @@ assign_file_positions_for_non_load_sections (bfd *abfd,
 	BFD_ASSERT (hdr->sh_offset == hdr->bfd_section->filepos);
       else if ((hdr->sh_flags & SHF_ALLOC) != 0)
 	{
-	  (*_bfd_error_handler)
-	    (_("%B: warning: allocated section `%s' not in segment"),
-	     abfd,
-	     (hdr->bfd_section == NULL
-	      ? "*unknown*"
-	      : hdr->bfd_section->name));
+	  if (hdr->sh_size != 0)
+	    (*_bfd_error_handler)
+	      (_("%B: warning: allocated section `%s' not in segment"),
+	       abfd,
+	       (hdr->bfd_section == NULL
+		? "*unknown*"
+		: hdr->bfd_section->name));
 	  /* We don't need to page align empty sections.  */
 	  if ((abfd->flags & D_PAGED) != 0 && hdr->sh_size != 0)
 	    off += vma_page_aligned_bias (hdr->sh_addr, off,
@@ -4853,6 +4888,7 @@ assign_file_positions_for_non_load_sections (bfd *abfd,
   filehdr_paddr = 0;
   phdrs_vaddr = bed->maxpagesize + bed->s->sizeof_ehdr;
   phdrs_paddr = 0;
+  hdrs_segment = NULL;
   phdrs = elf_tdata (abfd)->phdr;
   for (m = elf_tdata (abfd)->segment_map, p = phdrs;
        m != NULL;
@@ -4873,12 +4909,59 @@ assign_file_positions_for_non_load_sections (bfd *abfd,
 	  phdrs_paddr = p->p_paddr;
 	  if (m->includes_filehdr)
 	    {
+	      hdrs_segment = m;
 	      phdrs_vaddr += bed->s->sizeof_ehdr;
 	      phdrs_paddr += bed->s->sizeof_ehdr;
 	    }
 	}
     }
 
+  if (hdrs_segment != NULL && link_info != NULL)
+    {
+      /* There is a segment that contains both the file headers and the
+	 program headers, so provide a symbol __ehdr_start pointing there.
+	 A program can use this to examine itself robustly.  */
+
+      struct elf_link_hash_entry *hash
+	= elf_link_hash_lookup (elf_hash_table (link_info), "__ehdr_start",
+				FALSE, FALSE, TRUE);
+      /* If the symbol was referenced and not defined, define it.  */
+      if (hash != NULL
+	  && (hash->root.type == bfd_link_hash_new
+	      || hash->root.type == bfd_link_hash_undefined
+	      || hash->root.type == bfd_link_hash_undefweak
+	      || hash->root.type == bfd_link_hash_common))
+	{
+	  asection *s = NULL;
+	  if (hdrs_segment->count != 0)
+	    /* The segment contains sections, so use the first one.  */
+	    s = hdrs_segment->sections[0];
+	  else
+	    /* Use the first (i.e. lowest-addressed) section in any segment.  */
+	    for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
+	      if (m->count != 0)
+		{
+		  s = m->sections[0];
+		  break;
+		}
+
+	  if (s != NULL)
+	    {
+	      hash->root.u.def.value = filehdr_vaddr - s->vma;
+	      hash->root.u.def.section = s;
+	    }
+	  else
+	    {
+	      hash->root.u.def.value = filehdr_vaddr;
+	      hash->root.u.def.section = bfd_abs_section_ptr;
+	    }
+
+	  hash->root.type = bfd_link_hash_defined;
+	  hash->def_regular = 1;
+	  hash->non_elf = 0;
+	}
+    }
+
   for (m = elf_tdata (abfd)->segment_map, p = phdrs;
        m != NULL;
        m = m->next, p++)
@@ -4886,21 +4969,27 @@ assign_file_positions_for_non_load_sections (bfd *abfd,
       if (p->p_type == PT_GNU_RELRO)
 	{
 	  const Elf_Internal_Phdr *lp;
-
-	  BFD_ASSERT (!m->includes_filehdr && !m->includes_phdrs);
+	  struct elf_segment_map *lm;
 
 	  if (link_info != NULL)
 	    {
 	      /* During linking the range of the RELRO segment is passed
 		 in link_info.  */
-	      for (lp = phdrs; lp < phdrs + count; ++lp)
+	      for (lm = elf_tdata (abfd)->segment_map, lp = phdrs;
+		   lm != NULL;
+		   lm = lm->next, lp++)
 		{
 		  if (lp->p_type == PT_LOAD
-		      && lp->p_vaddr >= link_info->relro_start
 		      && lp->p_vaddr < link_info->relro_end
-		      && lp->p_vaddr + lp->p_filesz >= link_info->relro_end)
+		      && lp->p_vaddr + lp->p_filesz >= link_info->relro_end
+		      && lm->count != 0
+		      && lm->sections[0]->vma >= link_info->relro_start)
 		    break;
 		}
+
+	      /* PR ld/14207.  If the RELRO segment doesn't fit in the
+		 LOAD segment, it should be removed.  */
+	      BFD_ASSERT (lm != NULL);
 	    }
 	  else
 	    {
@@ -4926,8 +5015,15 @@ assign_file_positions_for_non_load_sections (bfd *abfd,
 	      else
 		abort ();
 	      p->p_memsz = p->p_filesz;
-	      p->p_align = 1;
-	      p->p_flags = (lp->p_flags & ~PF_W);
+	      /* Preserve the alignment and flags if they are valid. The
+	         gold linker generates RW/4 for the PT_GNU_RELRO section.
+		 It is better for objcopy/strip to honor these attributes
+		 otherwise gdb will choke when using separate debug files.
+	       */
+	      if (!m->p_align_valid)
+		p->p_align = 1;
+	      if (!m->p_flags_valid)
+		p->p_flags = (lp->p_flags & ~PF_W);
 	    }
 	  else
 	    {
@@ -5427,7 +5523,7 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
        1. It is within the address space of the segment -- we use the LMA
 	  if that is set for the segment and the VMA otherwise,
        2. It is an allocated section or a NOTE section in a PT_NOTE
-	  segment.         
+	  segment.
        3. There is an output section associated with it,
        4. The section has not already been allocated to a previous segment.
        5. PT_GNU_STACK segments do not include any sections.
@@ -6147,7 +6243,7 @@ copy_elf_program_header (bfd *ibfd, bfd *obfd)
       if (map->includes_filehdr && lowest_section != NULL)
 	/* We need to keep the space used by the headers fixed.  */
 	map->header_size = lowest_section->vma - segment->p_vaddr;
-      
+
       if (!map->includes_phdrs
 	  && !map->includes_filehdr
 	  && map->p_paddr_valid)
@@ -7378,65 +7474,74 @@ elf_find_function (bfd *abfd,
 		   const char **filename_ptr,
 		   const char **functionname_ptr)
 {
-  const char *filename;
-  asymbol *func, *file;
-  bfd_vma low_func;
-  asymbol **p;
-  /* ??? Given multiple file symbols, it is impossible to reliably
-     choose the right file name for global symbols.  File symbols are
-     local symbols, and thus all file symbols must sort before any
-     global symbols.  The ELF spec may be interpreted to say that a
-     file symbol must sort before other local symbols, but currently
-     ld -r doesn't do this.  So, for ld -r output, it is possible to
-     make a better choice of file name for local symbols by ignoring
-     file symbols appearing after a given local symbol.  */
-  enum { nothing_seen, symbol_seen, file_after_symbol_seen } state;
-  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+  static asection *last_section;
+  static asymbol *func;
+  static const char *filename;
+  static bfd_size_type func_size;
 
   if (symbols == NULL)
     return FALSE;
 
-  filename = NULL;
-  func = NULL;
-  file = NULL;
-  low_func = 0;
-  state = nothing_seen;
-
-  for (p = symbols; *p != NULL; p++)
-    {
-      elf_symbol_type *q;
-      unsigned int type;
-
-      q = (elf_symbol_type *) *p;
+  if (last_section != section
+      || func == NULL
+      || offset < func->value
+      || offset >= func->value + func_size)
+    {
+      asymbol *file;
+      bfd_vma low_func;
+      asymbol **p;
+      /* ??? Given multiple file symbols, it is impossible to reliably
+	 choose the right file name for global symbols.  File symbols are
+	 local symbols, and thus all file symbols must sort before any
+	 global symbols.  The ELF spec may be interpreted to say that a
+	 file symbol must sort before other local symbols, but currently
+	 ld -r doesn't do this.  So, for ld -r output, it is possible to
+	 make a better choice of file name for local symbols by ignoring
+	 file symbols appearing after a given local symbol.  */
+      enum { nothing_seen, symbol_seen, file_after_symbol_seen } state;
+      const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+
+      filename = NULL;
+      func = NULL;
+      file = NULL;
+      low_func = 0;
+      state = nothing_seen;
+      func_size = 0;
+      last_section = section;
+
+      for (p = symbols; *p != NULL; p++)
+	{
+	  asymbol *sym = *p;
+	  bfd_vma code_off;
+	  bfd_size_type size;
+
+	  if ((sym->flags & BSF_FILE) != 0)
+	    {
+	      file = sym;
+	      if (state == symbol_seen)
+		state = file_after_symbol_seen;
+	      continue;
+	    }
 
-      type = ELF_ST_TYPE (q->internal_elf_sym.st_info);
-      switch (type)
-	{
-	case STT_FILE:
-	  file = &q->symbol;
-	  if (state == symbol_seen)
-	    state = file_after_symbol_seen;
-	  continue;
-	default:
-	  if (!bed->is_function_type (type))
-	    break;
-	case STT_NOTYPE:
-	  if (bfd_get_section (&q->symbol) == section
-	      && q->symbol.value >= low_func
-	      && q->symbol.value <= offset)
+	  size = bed->maybe_function_sym (sym, section, &code_off);
+	  if (size != 0
+	      && code_off <= offset
+	      && (code_off > low_func
+		  || (code_off == low_func
+		      && size > func_size)))
 	    {
-	      func = (asymbol *) q;
-	      low_func = q->symbol.value;
+	      func = sym;
+	      func_size = size;
+	      low_func = code_off;
 	      filename = NULL;
 	      if (file != NULL
-		  && (ELF_ST_BIND (q->internal_elf_sym.st_info) == STB_LOCAL
+		  && ((sym->flags & BSF_LOCAL) != 0
 		      || state != file_after_symbol_seen))
 		filename = bfd_asymbol_name (file);
 	    }
-	  break;
+	  if (state == nothing_seen)
+	    state = symbol_seen;
 	}
-      if (state == nothing_seen)
-	state = symbol_seen;
     }
 
   if (func == NULL)
@@ -7698,11 +7803,12 @@ _bfd_elf_validate_reloc (bfd *abfd, arelent *areloc)
 bfd_boolean
 _bfd_elf_close_and_cleanup (bfd *abfd)
 {
-  if (bfd_get_format (abfd) == bfd_object)
+  struct elf_obj_tdata *tdata = elf_tdata (abfd);
+  if (bfd_get_format (abfd) == bfd_object && tdata != NULL)
     {
-      if (elf_tdata (abfd) != NULL && elf_shstrtab (abfd) != NULL)
+      if (elf_shstrtab (abfd) != NULL)
 	_bfd_elf_strtab_free (elf_shstrtab (abfd));
-      _bfd_dwarf2_cleanup_debug_info (abfd);
+      _bfd_dwarf2_cleanup_debug_info (abfd, &tdata->dwarf2_find_line_info);
     }
 
   return _bfd_generic_close_and_cleanup (abfd);
@@ -8889,7 +8995,6 @@ elfcore_write_note (bfd *abfd,
   return buf;
 }
 
-#if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
 char *
 elfcore_write_prpsinfo (bfd  *abfd,
 			char *buf,
@@ -8897,7 +9002,6 @@ elfcore_write_prpsinfo (bfd  *abfd,
 			const char *fname,
 			const char *psargs)
 {
-  const char *note_name = "CORE";
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
 
   if (bed->elf_backend_write_core_note != NULL)
@@ -8909,6 +9013,7 @@ elfcore_write_prpsinfo (bfd  *abfd,
 	return ret;
     }
 
+#if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
 #if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
   if (bed->s->elfclass == ELFCLASS32)
     {
@@ -8924,7 +9029,7 @@ elfcore_write_prpsinfo (bfd  *abfd,
       strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
       strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
       return elfcore_write_note (abfd, buf, bufsiz,
-				 note_name, note_type, &data, sizeof (data));
+				 "CORE", note_type, &data, sizeof (data));
     }
   else
 #endif
@@ -8941,12 +9046,14 @@ elfcore_write_prpsinfo (bfd  *abfd,
       strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
       strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
       return elfcore_write_note (abfd, buf, bufsiz,
-				 note_name, note_type, &data, sizeof (data));
+				 "CORE", note_type, &data, sizeof (data));
     }
-}
 #endif	/* PSINFO_T or PRPSINFO_T */
 
-#if defined (HAVE_PRSTATUS_T)
+  free (buf);
+  return NULL;
+}
+
 char *
 elfcore_write_prstatus (bfd *abfd,
 			char *buf,
@@ -8955,7 +9062,6 @@ elfcore_write_prstatus (bfd *abfd,
 			int cursig,
 			const void *gregs)
 {
-  const char *note_name = "CORE";
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
 
   if (bed->elf_backend_write_core_note != NULL)
@@ -8968,6 +9074,7 @@ elfcore_write_prstatus (bfd *abfd,
 	return ret;
     }
 
+#if defined (HAVE_PRSTATUS_T)
 #if defined (HAVE_PRSTATUS32_T)
   if (bed->s->elfclass == ELFCLASS32)
     {
@@ -8977,7 +9084,7 @@ elfcore_write_prstatus (bfd *abfd,
       prstat.pr_pid = pid;
       prstat.pr_cursig = cursig;
       memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
-      return elfcore_write_note (abfd, buf, bufsiz, note_name,
+      return elfcore_write_note (abfd, buf, bufsiz, "CORE",
 				 NT_PRSTATUS, &prstat, sizeof (prstat));
     }
   else
@@ -8989,12 +9096,15 @@ elfcore_write_prstatus (bfd *abfd,
       prstat.pr_pid = pid;
       prstat.pr_cursig = cursig;
       memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
-      return elfcore_write_note (abfd, buf, bufsiz, note_name,
+      return elfcore_write_note (abfd, buf, bufsiz, "CORE",
 				 NT_PRSTATUS, &prstat, sizeof (prstat));
     }
-}
 #endif /* HAVE_PRSTATUS_T */
 
+  free (buf);
+  return NULL;
+}
+
 #if defined (HAVE_LWPSTATUS_T)
 char *
 elfcore_write_lwpstatus (bfd *abfd,
@@ -9447,7 +9557,7 @@ _bfd_elf_rela_local_sym (bfd *abfd,
 		+ sym->st_value);
   if ((sec->flags & SEC_MERGE)
       && ELF_ST_TYPE (sym->st_info) == STT_SECTION
-      && sec->sec_info_type == ELF_INFO_TYPE_MERGE)
+      && sec->sec_info_type == SEC_INFO_TYPE_MERGE)
     {
       rel->r_addend =
 	_bfd_merged_section_offset (abfd, psec,
@@ -9478,7 +9588,7 @@ _bfd_elf_rel_local_sym (bfd *abfd,
 {
   asection *sec = *psec;
 
-  if (sec->sec_info_type != ELF_INFO_TYPE_MERGE)
+  if (sec->sec_info_type != SEC_INFO_TYPE_MERGE)
     return sym->st_value + addend;
 
   return _bfd_merged_section_offset (abfd, psec,
@@ -9494,10 +9604,10 @@ _bfd_elf_section_offset (bfd *abfd,
 {
   switch (sec->sec_info_type)
     {
-    case ELF_INFO_TYPE_STABS:
+    case SEC_INFO_TYPE_STABS:
       return _bfd_stab_section_offset (sec, elf_section_data (sec)->sec_info,
 				       offset);
-    case ELF_INFO_TYPE_EH_FRAME:
+    case SEC_INFO_TYPE_EH_FRAME:
       return _bfd_elf_eh_frame_section_offset (abfd, info, sec, offset);
     default:
       if ((sec->flags & SEC_ELF_REVERSE_COPY) != 0)
@@ -9528,7 +9638,7 @@ bfd_elf_bfd_from_remote_memory
   (bfd *templ,
    bfd_vma ehdr_vma,
    bfd_vma *loadbasep,
-   int (*target_read_memory) (bfd_vma, bfd_byte *, int))
+   int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type))
 {
   return (*get_elf_backend_data (templ)->elf_backend_bfd_from_remote_memory)
     (templ, ehdr_vma, loadbasep, target_read_memory);
@@ -9633,7 +9743,7 @@ _bfd_elf_get_synthetic_symtab (bfd *abfd,
       if (p->addend != 0)
 	{
 	  char buf[30], *a;
-	  
+
 	  memcpy (names, "+0x", sizeof ("+0x") - 1);
 	  names += sizeof ("+0x") - 1;
 	  bfd_sprintf_vma (abfd, buf, p->addend);
@@ -9685,3 +9795,27 @@ _bfd_elf_is_function_type (unsigned int type)
   return (type == STT_FUNC
 	  || type == STT_GNU_IFUNC);
 }
+
+/* If the ELF symbol SYM might be a function in SEC, return the
+   function size and set *CODE_OFF to the function's entry point,
+   otherwise return zero.  */
+
+bfd_size_type
+_bfd_elf_maybe_function_sym (const asymbol *sym, asection *sec,
+			     bfd_vma *code_off)
+{
+  bfd_size_type size;
+
+  if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
+		     | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0
+      || sym->section != sec)
+    return 0;
+
+  *code_off = sym->value;
+  size = 0;
+  if (!(sym->flags & BSF_SYNTHETIC))
+    size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
+  if (size == 0)
+    size = 1;
+  return size;
+}
diff --git a/bfd/elf32-am33lin.c b/bfd/elf32-am33lin.c
index 177a714..dd2aed4 100644
--- a/bfd/elf32-am33lin.c
+++ b/bfd/elf32-am33lin.c
@@ -50,6 +50,7 @@ elf32_am33lin_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
       default:
 	return FALSE;
 
+      case 184:
       case 188:		/* Linux/am33 */
 	/* pr_cursig */
 	elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12);
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 31ea861..bc1f195 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -1,6 +1,6 @@
 /* 32-bit ELF support for ARM
    Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
-   2008, 2009, 2010, 2011  Free Software Foundation, Inc.
+   2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -23,9 +23,11 @@
 #include <limits.h>
 
 #include "bfd.h"
+#include "bfd_stdint.h"
 #include "libiberty.h"
 #include "libbfd.h"
 #include "elf-bfd.h"
+#include "elf-nacl.h"
 #include "elf-vxworks.h"
 #include "elf/arm.h"
 
@@ -1988,6 +1990,54 @@ elf32_arm_nabi_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
   return TRUE;
 }
 
+static char *
+elf32_arm_nabi_write_core_note (bfd *abfd, char *buf, int *bufsiz,
+				int note_type, ...)
+{
+  switch (note_type)
+    {
+    default:
+      return NULL;
+
+    case NT_PRPSINFO:
+      {
+	char data[124];
+	va_list ap;
+
+	va_start (ap, note_type);
+	memset (data, 0, sizeof (data));
+	strncpy (data + 28, va_arg (ap, const char *), 16);
+	strncpy (data + 44, va_arg (ap, const char *), 80);
+	va_end (ap);
+
+	return elfcore_write_note (abfd, buf, bufsiz,
+				   "CORE", note_type, data, sizeof (data));
+      }
+
+    case NT_PRSTATUS:
+      {
+	char data[148];
+	va_list ap;
+	long pid;
+	int cursig;
+	const void *greg;
+
+	va_start (ap, note_type);
+	memset (data, 0, sizeof (data));
+	pid = va_arg (ap, long);
+	bfd_put_32 (abfd, pid, data + 24);
+	cursig = va_arg (ap, int);
+	bfd_put_16 (abfd, cursig, data + 12);
+	greg = va_arg (ap, const void *);
+	memcpy (data + 72, greg, 72);
+	va_end (ap);
+
+	return elfcore_write_note (abfd, buf, bufsiz,
+				   "CORE", note_type, data, sizeof (data));
+      }
+    }
+}
+
 #define TARGET_LITTLE_SYM               bfd_elf32_littlearm_vec
 #define TARGET_LITTLE_NAME              "elf32-littlearm"
 #define TARGET_BIG_SYM                  bfd_elf32_bigarm_vec
@@ -1995,6 +2045,7 @@ elf32_arm_nabi_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 
 #define elf_backend_grok_prstatus	elf32_arm_nabi_grok_prstatus
 #define elf_backend_grok_psinfo		elf32_arm_nabi_grok_psinfo
+#define elf_backend_write_core_note	elf32_arm_nabi_write_core_note
 
 typedef unsigned long int insn32;
 typedef unsigned short int insn16;
@@ -2029,24 +2080,24 @@ typedef unsigned short int insn16;
 #define ELF_DYNAMIC_INTERPRETER     "/usr/lib/ld.so.1"
 
 static const unsigned long tls_trampoline [] =
-  {
-    0xe08e0000,		/* add r0, lr, r0 */
-    0xe5901004,		/* ldr r1, [r0,#4] */
-    0xe12fff11,		/* bx  r1 */
-  };
+{
+  0xe08e0000,		/* add r0, lr, r0 */
+  0xe5901004,		/* ldr r1, [r0,#4] */
+  0xe12fff11,		/* bx  r1 */
+};
 
 static const unsigned long dl_tlsdesc_lazy_trampoline [] =
-  {
-    0xe52d2004, /*	push    {r2}			*/
-    0xe59f200c, /*      ldr     r2, [pc, #3f - . - 8]	*/
-    0xe59f100c, /*      ldr     r1, [pc, #4f - . - 8]	*/
-    0xe79f2002, /* 1:   ldr     r2, [pc, r2]		*/
-    0xe081100f, /* 2:   add     r1, pc			*/
-    0xe12fff12, /*      bx      r2			*/
-    0x00000014, /* 3:   .word  _GLOBAL_OFFSET_TABLE_ - 1b - 8
+{
+  0xe52d2004, /*	push    {r2}			*/
+  0xe59f200c, /*      ldr     r2, [pc, #3f - . - 8]	*/
+  0xe59f100c, /*      ldr     r1, [pc, #4f - . - 8]	*/
+  0xe79f2002, /* 1:   ldr     r2, [pc, r2]		*/
+  0xe081100f, /* 2:   add     r1, pc			*/
+  0xe12fff12, /*      bx      r2			*/
+  0x00000014, /* 3:   .word  _GLOBAL_OFFSET_TABLE_ - 1b - 8
 		   		+ dl_tlsdesc_lazy_resolver(GOT)   */
-    0x00000018, /* 4:   .word  _GLOBAL_OFFSET_TABLE_ - 2b - 8 */ 
-  };
+  0x00000018, /* 4:   .word  _GLOBAL_OFFSET_TABLE_ - 2b - 8 */
+};
 
 #ifdef FOUR_WORD_PLT
 
@@ -2055,22 +2106,22 @@ static const unsigned long dl_tlsdesc_lazy_trampoline [] =
    called before the relocation has been set up calls the dynamic
    linker first.  */
 static const bfd_vma elf32_arm_plt0_entry [] =
-  {
-    0xe52de004,		/* str   lr, [sp, #-4]! */
-    0xe59fe010,		/* ldr   lr, [pc, #16]  */
-    0xe08fe00e,		/* add   lr, pc, lr     */
-    0xe5bef008,		/* ldr   pc, [lr, #8]!  */
-  };
+{
+  0xe52de004,		/* str   lr, [sp, #-4]! */
+  0xe59fe010,		/* ldr   lr, [pc, #16]  */
+  0xe08fe00e,		/* add   lr, pc, lr     */
+  0xe5bef008,		/* ldr   pc, [lr, #8]!  */
+};
 
 /* Subsequent entries in a procedure linkage table look like
    this.  */
 static const bfd_vma elf32_arm_plt_entry [] =
-  {
-    0xe28fc600,		/* add   ip, pc, #NN	*/
-    0xe28cca00,		/* add	 ip, ip, #NN	*/
-    0xe5bcf000,		/* ldr	 pc, [ip, #NN]! */
-    0x00000000,		/* unused		*/
-  };
+{
+  0xe28fc600,		/* add   ip, pc, #NN	*/
+  0xe28cca00,		/* add	 ip, ip, #NN	*/
+  0xe5bcf000,		/* ldr	 pc, [ip, #NN]! */
+  0x00000000,		/* unused		*/
+};
 
 #else
 
@@ -2079,72 +2130,111 @@ static const bfd_vma elf32_arm_plt_entry [] =
    called before the relocation has been set up calls the dynamic
    linker first.  */
 static const bfd_vma elf32_arm_plt0_entry [] =
-  {
-    0xe52de004,		/* str   lr, [sp, #-4]! */
-    0xe59fe004,		/* ldr   lr, [pc, #4]   */
-    0xe08fe00e,		/* add   lr, pc, lr     */
-    0xe5bef008,		/* ldr   pc, [lr, #8]!  */
-    0x00000000,		/* &GOT[0] - .          */
-  };
+{
+  0xe52de004,		/* str   lr, [sp, #-4]! */
+  0xe59fe004,		/* ldr   lr, [pc, #4]   */
+  0xe08fe00e,		/* add   lr, pc, lr     */
+  0xe5bef008,		/* ldr   pc, [lr, #8]!  */
+  0x00000000,		/* &GOT[0] - .          */
+};
 
 /* Subsequent entries in a procedure linkage table look like
    this.  */
 static const bfd_vma elf32_arm_plt_entry [] =
-  {
-    0xe28fc600,		/* add   ip, pc, #0xNN00000 */
-    0xe28cca00,		/* add	 ip, ip, #0xNN000   */
-    0xe5bcf000,		/* ldr	 pc, [ip, #0xNNN]!  */
-  };
+{
+  0xe28fc600,		/* add   ip, pc, #0xNN00000 */
+  0xe28cca00,		/* add	 ip, ip, #0xNN000   */
+  0xe5bcf000,		/* ldr	 pc, [ip, #0xNNN]!  */
+};
 
 #endif
 
 /* The format of the first entry in the procedure linkage table
    for a VxWorks executable.  */
 static const bfd_vma elf32_arm_vxworks_exec_plt0_entry[] =
-  {
-    0xe52dc008,	        /* str    ip,[sp,#-8]!			*/
-    0xe59fc000,         /* ldr    ip,[pc]			*/
-    0xe59cf008,         /* ldr    pc,[ip,#8]			*/
-    0x00000000,         /* .long  _GLOBAL_OFFSET_TABLE_		*/
-  };
+{
+  0xe52dc008,	        /* str    ip,[sp,#-8]!			*/
+  0xe59fc000,   	/* ldr    ip,[pc]			*/
+  0xe59cf008,   	/* ldr    pc,[ip,#8]			*/
+  0x00000000,   	/* .long  _GLOBAL_OFFSET_TABLE_		*/
+};
 
 /* The format of subsequent entries in a VxWorks executable.  */
 static const bfd_vma elf32_arm_vxworks_exec_plt_entry[] =
-  {
-    0xe59fc000,         /* ldr    ip,[pc]			*/
-    0xe59cf000,         /* ldr    pc,[ip]			*/
-    0x00000000,         /* .long  @got				*/
-    0xe59fc000,         /* ldr    ip,[pc]			*/
-    0xea000000,         /* b      _PLT				*/
-    0x00000000,         /* .long  @pltindex*sizeof(Elf32_Rela)	*/
-  };
+{
+  0xe59fc000,         /* ldr    ip,[pc]			*/
+  0xe59cf000,         /* ldr    pc,[ip]			*/
+  0x00000000,         /* .long  @got				*/
+  0xe59fc000,         /* ldr    ip,[pc]			*/
+  0xea000000,         /* b      _PLT				*/
+  0x00000000,         /* .long  @pltindex*sizeof(Elf32_Rela)	*/
+};
 
 /* The format of entries in a VxWorks shared library.  */
 static const bfd_vma elf32_arm_vxworks_shared_plt_entry[] =
-  {
-    0xe59fc000,         /* ldr    ip,[pc]			*/
-    0xe79cf009,         /* ldr    pc,[ip,r9]			*/
-    0x00000000,         /* .long  @got				*/
-    0xe59fc000,         /* ldr    ip,[pc]			*/
-    0xe599f008,         /* ldr    pc,[r9,#8]			*/
-    0x00000000,         /* .long  @pltindex*sizeof(Elf32_Rela)	*/
-  };
+{
+  0xe59fc000,         /* ldr    ip,[pc]			*/
+  0xe79cf009,         /* ldr    pc,[ip,r9]			*/
+  0x00000000,         /* .long  @got				*/
+  0xe59fc000,         /* ldr    ip,[pc]			*/
+  0xe599f008,         /* ldr    pc,[r9,#8]			*/
+  0x00000000,         /* .long  @pltindex*sizeof(Elf32_Rela)	*/
+};
 
 /* An initial stub used if the PLT entry is referenced from Thumb code.  */
 #define PLT_THUMB_STUB_SIZE 4
 static const bfd_vma elf32_arm_plt_thumb_stub [] =
-  {
-    0x4778,		/* bx pc */
-    0x46c0		/* nop   */
-  };
+{
+  0x4778,		/* bx pc */
+  0x46c0		/* nop   */
+};
 
 /* The entries in a PLT when using a DLL-based target with multiple
    address spaces.  */
 static const bfd_vma elf32_arm_symbian_plt_entry [] =
-  {
-    0xe51ff004,         /* ldr   pc, [pc, #-4] */
-    0x00000000,         /* dcd   R_ARM_GLOB_DAT(X) */
-  };
+{
+  0xe51ff004,         /* ldr   pc, [pc, #-4] */
+  0x00000000,         /* dcd   R_ARM_GLOB_DAT(X) */
+};
+
+/* The first entry in a procedure linkage table looks like
+   this.  It is set up so that any shared library function that is
+   called before the relocation has been set up calls the dynamic
+   linker first.  */
+static const bfd_vma elf32_arm_nacl_plt0_entry [] =
+{
+  /* First bundle: */
+  0xe300c000,		/* movw	ip, #:lower16:&GOT[2]-.+8	*/
+  0xe340c000,		/* movt	ip, #:upper16:&GOT[2]-.+8	*/
+  0xe08cc00f,		/* add	ip, ip, pc			*/
+  0xe52dc008,		/* str	ip, [sp, #-8]!			*/
+  /* Second bundle: */
+  0xe7dfcf1f, 	/* bfc	ip, #30, #2			*/
+  0xe59cc000, 	/* ldr	ip, [ip]			*/
+  0xe3ccc13f,		/* bic	ip, ip, #0xc000000f		*/
+  0xe12fff1c, 	/* bx	ip				*/
+  /* Third bundle: */
+  0xe320f000, 	/* nop					*/
+  0xe320f000, 	/* nop					*/
+  0xe320f000, 	/* nop					*/
+  /* .Lplt_tail: */
+  0xe50dc004,		/* str	ip, [sp, #-4]			*/
+  /* Fourth bundle: */
+  0xe7dfcf1f,		/* bfc	ip, #30, #2			*/
+  0xe59cc000, 	/* ldr	ip, [ip]			*/
+  0xe3ccc13f,		/* bic	ip, ip, #0xc000000f		*/
+  0xe12fff1c, 	/* bx	ip				*/
+};
+#define ARM_NACL_PLT_TAIL_OFFSET	(11 * 4)
+
+/* Subsequent entries in a procedure linkage table look like this.  */
+static const bfd_vma elf32_arm_nacl_plt_entry [] =
+{
+  0xe300c000,		/* movw	ip, #:lower16:&GOT[n]-.+8	*/
+  0xe340c000,		/* movt	ip, #:upper16:&GOT[n]-.+8	*/
+  0xe08cc00f,		/* add	ip, ip, pc			*/
+  0xea000000,		/* b	.Lplt_tail			*/
+};
 
 #define ARM_MAX_FWD_BRANCH_OFFSET  ((((1 << 23) - 1) << 2) + 8)
 #define ARM_MAX_BWD_BRANCH_OFFSET  ((-((1 << 23) << 2)) + 8)
@@ -2154,12 +2244,12 @@ static const bfd_vma elf32_arm_symbian_plt_entry [] =
 #define THM2_MAX_BWD_BRANCH_OFFSET (-(1 << 24) + 4)
 
 enum stub_insn_type
-  {
-    THUMB16_TYPE = 1,
-    THUMB32_TYPE,
-    ARM_TYPE,
-    DATA_TYPE
-  };
+{
+  THUMB16_TYPE = 1,
+  THUMB32_TYPE,
+  ARM_TYPE,
+  DATA_TYPE
+};
 
 #define THUMB16_INSN(X)		{(X), THUMB16_TYPE, R_ARM_NONE, 0}
 /* A bit of a hack.  A Thumb conditional branch, in which the proper condition
@@ -2173,154 +2263,154 @@ enum stub_insn_type
 
 typedef struct
 {
-  bfd_vma data;
-  enum stub_insn_type type;
-  unsigned int r_type;
-  int reloc_addend;
+  bfd_vma              data;
+  enum stub_insn_type  type;
+  unsigned int         r_type;
+  int                  reloc_addend;
 }  insn_sequence;
 
 /* Arm/Thumb -> Arm/Thumb long branch stub. On V5T and above, use blx
    to reach the stub if necessary.  */
 static const insn_sequence elf32_arm_stub_long_branch_any_any[] =
-  {
-    ARM_INSN(0xe51ff004),            /* ldr   pc, [pc, #-4] */
-    DATA_WORD(0, R_ARM_ABS32, 0),    /* dcd   R_ARM_ABS32(X) */
-  };
+{
+  ARM_INSN (0xe51ff004),            /* ldr   pc, [pc, #-4] */
+  DATA_WORD (0, R_ARM_ABS32, 0),    /* dcd   R_ARM_ABS32(X) */
+};
 
 /* V4T Arm -> Thumb long branch stub. Used on V4T where blx is not
    available.  */
 static const insn_sequence elf32_arm_stub_long_branch_v4t_arm_thumb[] =
-  {
-    ARM_INSN(0xe59fc000),            /* ldr   ip, [pc, #0] */
-    ARM_INSN(0xe12fff1c),            /* bx    ip */
-    DATA_WORD(0, R_ARM_ABS32, 0),    /* dcd   R_ARM_ABS32(X) */
-  };
+{
+  ARM_INSN (0xe59fc000),            /* ldr   ip, [pc, #0] */
+  ARM_INSN (0xe12fff1c),            /* bx    ip */
+  DATA_WORD (0, R_ARM_ABS32, 0),    /* dcd   R_ARM_ABS32(X) */
+};
 
 /* Thumb -> Thumb long branch stub. Used on M-profile architectures.  */
 static const insn_sequence elf32_arm_stub_long_branch_thumb_only[] =
-  {
-    THUMB16_INSN(0xb401),             /* push {r0} */
-    THUMB16_INSN(0x4802),             /* ldr  r0, [pc, #8] */
-    THUMB16_INSN(0x4684),             /* mov  ip, r0 */
-    THUMB16_INSN(0xbc01),             /* pop  {r0} */
-    THUMB16_INSN(0x4760),             /* bx   ip */
-    THUMB16_INSN(0xbf00),             /* nop */
-    DATA_WORD(0, R_ARM_ABS32, 0),     /* dcd  R_ARM_ABS32(X) */
-  };
+{
+  THUMB16_INSN (0xb401),             /* push {r0} */
+  THUMB16_INSN (0x4802),             /* ldr  r0, [pc, #8] */
+  THUMB16_INSN (0x4684),             /* mov  ip, r0 */
+  THUMB16_INSN (0xbc01),             /* pop  {r0} */
+  THUMB16_INSN (0x4760),             /* bx   ip */
+  THUMB16_INSN (0xbf00),             /* nop */
+  DATA_WORD (0, R_ARM_ABS32, 0),     /* dcd  R_ARM_ABS32(X) */
+};
 
 /* V4T Thumb -> Thumb long branch stub. Using the stack is not
    allowed.  */
 static const insn_sequence elf32_arm_stub_long_branch_v4t_thumb_thumb[] =
-  {
-    THUMB16_INSN(0x4778),             /* bx   pc */
-    THUMB16_INSN(0x46c0),             /* nop */
-    ARM_INSN(0xe59fc000),             /* ldr  ip, [pc, #0] */
-    ARM_INSN(0xe12fff1c),             /* bx   ip */
-    DATA_WORD(0, R_ARM_ABS32, 0),     /* dcd  R_ARM_ABS32(X) */
-  };
+{
+  THUMB16_INSN (0x4778),             /* bx   pc */
+  THUMB16_INSN (0x46c0),             /* nop */
+  ARM_INSN (0xe59fc000),             /* ldr  ip, [pc, #0] */
+  ARM_INSN (0xe12fff1c),             /* bx   ip */
+  DATA_WORD (0, R_ARM_ABS32, 0),     /* dcd  R_ARM_ABS32(X) */
+};
 
 /* V4T Thumb -> ARM long branch stub. Used on V4T where blx is not
    available.  */
 static const insn_sequence elf32_arm_stub_long_branch_v4t_thumb_arm[] =
-  {
-    THUMB16_INSN(0x4778),             /* bx   pc */
-    THUMB16_INSN(0x46c0),             /* nop   */
-    ARM_INSN(0xe51ff004),             /* ldr   pc, [pc, #-4] */
-    DATA_WORD(0, R_ARM_ABS32, 0),     /* dcd   R_ARM_ABS32(X) */
-  };
+{
+  THUMB16_INSN (0x4778),             /* bx   pc */
+  THUMB16_INSN (0x46c0),             /* nop   */
+  ARM_INSN (0xe51ff004),             /* ldr   pc, [pc, #-4] */
+  DATA_WORD (0, R_ARM_ABS32, 0),     /* dcd   R_ARM_ABS32(X) */
+};
 
 /* V4T Thumb -> ARM short branch stub. Shorter variant of the above
    one, when the destination is close enough.  */
 static const insn_sequence elf32_arm_stub_short_branch_v4t_thumb_arm[] =
-  {
-    THUMB16_INSN(0x4778),             /* bx   pc */
-    THUMB16_INSN(0x46c0),             /* nop   */
-    ARM_REL_INSN(0xea000000, -8),     /* b    (X-8) */
-  };
+{
+  THUMB16_INSN (0x4778),             /* bx   pc */
+  THUMB16_INSN (0x46c0),             /* nop   */
+  ARM_REL_INSN (0xea000000, -8),     /* b    (X-8) */
+};
 
 /* ARM/Thumb -> ARM long branch stub, PIC.  On V5T and above, use
    blx to reach the stub if necessary.  */
 static const insn_sequence elf32_arm_stub_long_branch_any_arm_pic[] =
-  {
-    ARM_INSN(0xe59fc000),             /* ldr   ip, [pc] */
-    ARM_INSN(0xe08ff00c),             /* add   pc, pc, ip */
-    DATA_WORD(0, R_ARM_REL32, -4),    /* dcd   R_ARM_REL32(X-4) */
-  };
+{
+  ARM_INSN (0xe59fc000),             /* ldr   ip, [pc] */
+  ARM_INSN (0xe08ff00c),             /* add   pc, pc, ip */
+  DATA_WORD (0, R_ARM_REL32, -4),    /* dcd   R_ARM_REL32(X-4) */
+};
 
 /* ARM/Thumb -> Thumb long branch stub, PIC.  On V5T and above, use
    blx to reach the stub if necessary.  We can not add into pc;
    it is not guaranteed to mode switch (different in ARMv6 and
    ARMv7).  */
 static const insn_sequence elf32_arm_stub_long_branch_any_thumb_pic[] =
-  {
-    ARM_INSN(0xe59fc004),             /* ldr   ip, [pc, #4] */
-    ARM_INSN(0xe08fc00c),             /* add   ip, pc, ip */
-    ARM_INSN(0xe12fff1c),             /* bx    ip */
-    DATA_WORD(0, R_ARM_REL32, 0),     /* dcd   R_ARM_REL32(X) */
-  };
+{
+  ARM_INSN (0xe59fc004),             /* ldr   ip, [pc, #4] */
+  ARM_INSN (0xe08fc00c),             /* add   ip, pc, ip */
+  ARM_INSN (0xe12fff1c),             /* bx    ip */
+  DATA_WORD (0, R_ARM_REL32, 0),     /* dcd   R_ARM_REL32(X) */
+};
 
 /* V4T ARM -> ARM long branch stub, PIC.  */
 static const insn_sequence elf32_arm_stub_long_branch_v4t_arm_thumb_pic[] =
-  {
-    ARM_INSN(0xe59fc004),             /* ldr   ip, [pc, #4] */
-    ARM_INSN(0xe08fc00c),             /* add   ip, pc, ip */
-    ARM_INSN(0xe12fff1c),             /* bx    ip */
-    DATA_WORD(0, R_ARM_REL32, 0),     /* dcd   R_ARM_REL32(X) */
-  };
+{
+  ARM_INSN (0xe59fc004),             /* ldr   ip, [pc, #4] */
+  ARM_INSN (0xe08fc00c),             /* add   ip, pc, ip */
+  ARM_INSN (0xe12fff1c),             /* bx    ip */
+  DATA_WORD (0, R_ARM_REL32, 0),     /* dcd   R_ARM_REL32(X) */
+};
 
 /* V4T Thumb -> ARM long branch stub, PIC.  */
 static const insn_sequence elf32_arm_stub_long_branch_v4t_thumb_arm_pic[] =
-  {
-    THUMB16_INSN(0x4778),             /* bx   pc */
-    THUMB16_INSN(0x46c0),             /* nop  */
-    ARM_INSN(0xe59fc000),             /* ldr  ip, [pc, #0] */
-    ARM_INSN(0xe08cf00f),             /* add  pc, ip, pc */
-    DATA_WORD(0, R_ARM_REL32, -4),     /* dcd  R_ARM_REL32(X) */
-  };
+{
+  THUMB16_INSN (0x4778),             /* bx   pc */
+  THUMB16_INSN (0x46c0),             /* nop  */
+  ARM_INSN (0xe59fc000),             /* ldr  ip, [pc, #0] */
+  ARM_INSN (0xe08cf00f),             /* add  pc, ip, pc */
+  DATA_WORD (0, R_ARM_REL32, -4),     /* dcd  R_ARM_REL32(X) */
+};
 
 /* Thumb -> Thumb long branch stub, PIC. Used on M-profile
    architectures.  */
 static const insn_sequence elf32_arm_stub_long_branch_thumb_only_pic[] =
-  {
-    THUMB16_INSN(0xb401),             /* push {r0} */
-    THUMB16_INSN(0x4802),             /* ldr  r0, [pc, #8] */
-    THUMB16_INSN(0x46fc),             /* mov  ip, pc */
-    THUMB16_INSN(0x4484),             /* add  ip, r0 */
-    THUMB16_INSN(0xbc01),             /* pop  {r0} */
-    THUMB16_INSN(0x4760),             /* bx   ip */
-    DATA_WORD(0, R_ARM_REL32, 4),     /* dcd  R_ARM_REL32(X) */
-  };
+{
+  THUMB16_INSN (0xb401),             /* push {r0} */
+  THUMB16_INSN (0x4802),             /* ldr  r0, [pc, #8] */
+  THUMB16_INSN (0x46fc),             /* mov  ip, pc */
+  THUMB16_INSN (0x4484),             /* add  ip, r0 */
+  THUMB16_INSN (0xbc01),             /* pop  {r0} */
+  THUMB16_INSN (0x4760),             /* bx   ip */
+  DATA_WORD (0, R_ARM_REL32, 4),     /* dcd  R_ARM_REL32(X) */
+};
 
 /* V4T Thumb -> Thumb long branch stub, PIC. Using the stack is not
    allowed.  */
 static const insn_sequence elf32_arm_stub_long_branch_v4t_thumb_thumb_pic[] =
-  {
-    THUMB16_INSN(0x4778),             /* bx   pc */
-    THUMB16_INSN(0x46c0),             /* nop */
-    ARM_INSN(0xe59fc004),             /* ldr  ip, [pc, #4] */
-    ARM_INSN(0xe08fc00c),             /* add   ip, pc, ip */
-    ARM_INSN(0xe12fff1c),             /* bx   ip */
-    DATA_WORD(0, R_ARM_REL32, 0),     /* dcd  R_ARM_REL32(X) */
-  };
+{
+  THUMB16_INSN (0x4778),             /* bx   pc */
+  THUMB16_INSN (0x46c0),             /* nop */
+  ARM_INSN (0xe59fc004),             /* ldr  ip, [pc, #4] */
+  ARM_INSN (0xe08fc00c),             /* add   ip, pc, ip */
+  ARM_INSN (0xe12fff1c),             /* bx   ip */
+  DATA_WORD (0, R_ARM_REL32, 0),     /* dcd  R_ARM_REL32(X) */
+};
 
 /* Thumb2/ARM -> TLS trampoline.  Lowest common denominator, which is a
    long PIC stub.  We can use r1 as a scratch -- and cannot use ip.  */
 static const insn_sequence elf32_arm_stub_long_branch_any_tls_pic[] =
 {
-    ARM_INSN(0xe59f1000),             /* ldr   r1, [pc] */
-    ARM_INSN(0xe08ff001),             /* add   pc, pc, r1 */
-    DATA_WORD(0, R_ARM_REL32, -4),    /* dcd   R_ARM_REL32(X-4) */
+  ARM_INSN (0xe59f1000),             /* ldr   r1, [pc] */
+  ARM_INSN (0xe08ff001),             /* add   pc, pc, r1 */
+  DATA_WORD (0, R_ARM_REL32, -4),    /* dcd   R_ARM_REL32(X-4) */
 };
 
 /* V4T Thumb -> TLS trampoline.  lowest common denominator, which is a
    long PIC stub.  We can use r1 as a scratch -- and cannot use ip.  */
 static const insn_sequence elf32_arm_stub_long_branch_v4t_thumb_tls_pic[] =
 {
-    THUMB16_INSN(0x4778),             /* bx   pc */
-    THUMB16_INSN(0x46c0),             /* nop */
-    ARM_INSN(0xe59f1000),             /* ldr  r1, [pc, #0] */
-    ARM_INSN(0xe081f00f),             /* add  pc, r1, pc */
-    DATA_WORD(0, R_ARM_REL32, -4),    /* dcd  R_ARM_REL32(X) */
+  THUMB16_INSN (0x4778),             /* bx   pc */
+  THUMB16_INSN (0x46c0),             /* nop */
+  ARM_INSN (0xe59f1000),             /* ldr  r1, [pc, #0] */
+  ARM_INSN (0xe081f00f),             /* add  pc, r1, pc */
+  DATA_WORD (0, R_ARM_REL32, -4),    /* dcd  R_ARM_REL32(X) */
 };
 
 /* Cortex-A8 erratum-workaround stubs.  */
@@ -2329,32 +2419,32 @@ static const insn_sequence elf32_arm_stub_long_branch_v4t_thumb_tls_pic[] =
    can't use a conditional branch to reach this stub).  */
 
 static const insn_sequence elf32_arm_stub_a8_veneer_b_cond[] =
-  {
-    THUMB16_BCOND_INSN(0xd001),         /* b<cond>.n true.  */
-    THUMB32_B_INSN(0xf000b800, -4),     /* b.w insn_after_original_branch.  */
-    THUMB32_B_INSN(0xf000b800, -4)      /* true: b.w original_branch_dest.  */
-  };
+{
+  THUMB16_BCOND_INSN (0xd001),         /* b<cond>.n true.  */
+  THUMB32_B_INSN (0xf000b800, -4),     /* b.w insn_after_original_branch.  */
+  THUMB32_B_INSN (0xf000b800, -4)      /* true: b.w original_branch_dest.  */
+};
 
 /* Stub used for b.w and bl.w instructions.  */
 
 static const insn_sequence elf32_arm_stub_a8_veneer_b[] =
-  {
-    THUMB32_B_INSN(0xf000b800, -4)	/* b.w original_branch_dest.  */
-  };
+{
+  THUMB32_B_INSN (0xf000b800, -4)	/* b.w original_branch_dest.  */
+};
 
 static const insn_sequence elf32_arm_stub_a8_veneer_bl[] =
-  {
-    THUMB32_B_INSN(0xf000b800, -4)	/* b.w original_branch_dest.  */
-  };
+{
+  THUMB32_B_INSN (0xf000b800, -4)	/* b.w original_branch_dest.  */
+};
 
 /* Stub used for Thumb-2 blx.w instructions.  We modified the original blx.w
    instruction (which switches to ARM mode) to point to this stub.  Jump to the
    real destination using an ARM-mode branch.  */
 
 static const insn_sequence elf32_arm_stub_a8_veneer_blx[] =
-  {
-    ARM_REL_INSN(0xea000000, -8)	/* b original_branch_dest.  */
-  };
+{
+  ARM_REL_INSN (0xea000000, -8)	/* b original_branch_dest.  */
+};
 
 /* For each section group there can be a specially created linker section
    to hold the stubs for that group.  The name of the stub section is based
@@ -2364,7 +2454,7 @@ static const insn_sequence elf32_arm_stub_a8_veneer_blx[] =
    PR 13049: STUB_SUFFIX used to be ".stub", but this allowed the user to
    create what appeared to be a linker stub section when it actually
    contained user code/data.  For example, consider this fragment:
-   
+
      const char * stubborn_problems[] = { "np" };
 
    If this is compiled with "-fPIC -fdata-sections" then gcc produces a
@@ -2405,7 +2495,8 @@ static const insn_sequence elf32_arm_stub_a8_veneer_blx[] =
   DEF_STUB(a8_veneer_blx)
 
 #define DEF_STUB(x) arm_stub_##x,
-enum elf32_arm_stub_type {
+enum elf32_arm_stub_type
+{
   arm_stub_none,
   DEF_STUBS
   /* Note the first a8_veneer type */
@@ -2420,7 +2511,8 @@ typedef struct
 } stub_def;
 
 #define DEF_STUB(x) {elf32_arm_stub_##x, ARRAY_SIZE(elf32_arm_stub_##x)},
-static const stub_def stub_definitions[] = {
+static const stub_def stub_definitions[] =
+{
   {NULL, 0},
   DEF_STUBS
 };
@@ -2573,7 +2665,8 @@ _arm_elf_section_data;
    relaxing which we can refresh easily, then create stubs for each potentially
    erratum-triggering instruction once we've settled on a solution.  */
 
-struct a8_erratum_fix {
+struct a8_erratum_fix
+{
   bfd *input_bfd;
   asection *section;
   bfd_vma offset;
@@ -2587,7 +2680,8 @@ struct a8_erratum_fix {
 /* A table of relocs applied to branches which might trigger Cortex-A8
    erratum.  */
 
-struct a8_erratum_reloc {
+struct a8_erratum_reloc
+{
   bfd_vma from;
   bfd_vma destination;
   struct elf32_arm_link_hash_entry *hash;
@@ -2602,7 +2696,8 @@ struct a8_erratum_reloc {
 
 /* ARM-specific information about a PLT entry, over and above the usual
    gotplt_union.  */
-struct arm_plt_info {
+struct arm_plt_info
+{
   /* We reference count Thumb references to a PLT entry separately,
      so that we can emit the Thumb trampoline only if needed.  */
   bfd_signed_vma thumb_refcount;
@@ -2625,7 +2720,8 @@ struct arm_plt_info {
 };
 
 /* Information about an .iplt entry for a local STT_GNU_IFUNC symbol.  */
-struct arm_local_iplt_info {
+struct arm_local_iplt_info
+{
   /* The information that is usually found in the generic ELF part of
      the hash table entry.  */
   union gotplt_union root;
@@ -2686,14 +2782,14 @@ elf32_arm_mkobject (bfd *abfd)
 
 /* Arm ELF linker hash entry.  */
 struct elf32_arm_link_hash_entry
-  {
-    struct elf_link_hash_entry root;
+{
+  struct elf_link_hash_entry root;
 
-    /* Track dynamic relocs copied for this symbol.  */
-    struct elf_dyn_relocs *dyn_relocs;
+  /* Track dynamic relocs copied for this symbol.  */
+  struct elf_dyn_relocs *dyn_relocs;
 
-    /* ARM-specific PLT information.  */
-    struct arm_plt_info plt;
+  /* ARM-specific PLT information.  */
+  struct arm_plt_info plt;
 
 #define GOT_UNKNOWN	0
 #define GOT_NORMAL	1
@@ -2701,25 +2797,25 @@ struct elf32_arm_link_hash_entry
 #define GOT_TLS_IE	4
 #define GOT_TLS_GDESC	8
 #define GOT_TLS_GD_ANY_P(type)	((type & GOT_TLS_GD) || (type & GOT_TLS_GDESC))
-    unsigned int tls_type : 8;
+  unsigned int tls_type : 8;
 
-    /* True if the symbol's PLT entry is in .iplt rather than .plt.  */
-    unsigned int is_iplt : 1;
+  /* True if the symbol's PLT entry is in .iplt rather than .plt.  */
+  unsigned int is_iplt : 1;
 
-    unsigned int unused : 23;
+  unsigned int unused : 23;
 
-    /* Offset of the GOTPLT entry reserved for the TLS descriptor,
-       starting at the end of the jump table.  */
-    bfd_vma tlsdesc_got;
+  /* Offset of the GOTPLT entry reserved for the TLS descriptor,
+     starting at the end of the jump table.  */
+  bfd_vma tlsdesc_got;
 
-    /* The symbol marking the real symbol location for exported thumb
-       symbols with Arm stubs.  */
-    struct elf_link_hash_entry *export_glue;
+  /* The symbol marking the real symbol location for exported thumb
+     symbols with Arm stubs.  */
+  struct elf_link_hash_entry *export_glue;
 
-   /* A pointer to the most recently used stub hash entry against this
+  /* A pointer to the most recently used stub hash entry against this
      symbol.  */
-    struct elf32_arm_stub_hash_entry *stub_cache;
-  };
+  struct elf32_arm_stub_hash_entry *stub_cache;
+};
 
 /* Traverse an arm ELF linker hash table.  */
 #define elf32_arm_link_hash_traverse(table, func, info)			\
@@ -2829,6 +2925,9 @@ struct elf32_arm_link_hash_table
   /* True if the target system is Symbian OS.  */
   int symbian_p;
 
+  /* True if the target system is Native Client.  */
+  int nacl_p;
+
   /* True if the target uses REL relocations.  */
   int use_rel;
 
@@ -2853,7 +2952,7 @@ struct elf32_arm_link_hash_table
 
   /* The offset into sgot of the GOT entry used by the PLT entry
      above.  */
-  bfd_vma dt_tlsdesc_got;    
+  bfd_vma dt_tlsdesc_got;
 
   /* Offset in .plt section of tls_arm_trampoline.  */
   bfd_vma tls_trampoline;
@@ -3149,7 +3248,7 @@ create_ifunc_sections (struct bfd_link_info *info)
   bfd *dynobj;
   asection *s;
   flagword flags;
-  
+
   htab = elf32_arm_hash_table (info);
   dynobj = htab->root.dynobj;
   bed = get_elf_backend_data (dynobj);
@@ -3157,27 +3256,28 @@ create_ifunc_sections (struct bfd_link_info *info)
 
   if (htab->root.iplt == NULL)
     {
-      s = bfd_make_section_with_flags (dynobj, ".iplt",
-				       flags | SEC_READONLY | SEC_CODE);
+      s = bfd_make_section_anyway_with_flags (dynobj, ".iplt",
+					      flags | SEC_READONLY | SEC_CODE);
       if (s == NULL
-	  || !bfd_set_section_alignment (abfd, s, bed->plt_alignment))
+	  || !bfd_set_section_alignment (dynobj, s, bed->plt_alignment))
 	return FALSE;
       htab->root.iplt = s;
     }
 
   if (htab->root.irelplt == NULL)
     {
-      s = bfd_make_section_with_flags (dynobj, RELOC_SECTION (htab, ".iplt"),
-				       flags | SEC_READONLY);
+      s = bfd_make_section_anyway_with_flags (dynobj,
+					      RELOC_SECTION (htab, ".iplt"),
+					      flags | SEC_READONLY);
       if (s == NULL
-	  || !bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
+	  || !bfd_set_section_alignment (dynobj, s, bed->s->log_file_align))
 	return FALSE;
       htab->root.irelplt = s;
     }
 
   if (htab->root.igotplt == NULL)
     {
-      s = bfd_make_section_with_flags (dynobj, ".igot.plt", flags);
+      s = bfd_make_section_anyway_with_flags (dynobj, ".igot.plt", flags);
       if (s == NULL
 	  || !bfd_set_section_alignment (dynobj, s, bed->s->log_file_align))
 	return FALSE;
@@ -3205,10 +3305,10 @@ elf32_arm_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
     return FALSE;
 
-  htab->sdynbss = bfd_get_section_by_name (dynobj, ".dynbss");
+  htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss");
   if (!info->shared)
-    htab->srelbss = bfd_get_section_by_name (dynobj,
-					     RELOC_SECTION (htab, ".bss"));
+    htab->srelbss = bfd_get_linker_section (dynobj,
+					    RELOC_SECTION (htab, ".bss"));
 
   if (htab->vxworks_p)
     {
@@ -3359,6 +3459,7 @@ elf32_arm_link_hash_table_create (bfd *abfd)
   ret->use_blx = 0;
   ret->vxworks_p = 0;
   ret->symbian_p = 0;
+  ret->nacl_p = 0;
   ret->use_rel = 1;
   ret->sym_cache.abfd = NULL;
   ret->obfd = abfd;
@@ -3527,7 +3628,7 @@ arm_type_of_stub (struct bfd_link_info *info,
       else
 	splt = globals->root.splt;
       if (splt != NULL)
-	{	
+	{
 	  use_plt = 1;
 
 	  /* Note when dealing with PLT entries: the main PLT stub is in
@@ -3811,7 +3912,7 @@ elf32_arm_get_stub_entry (const asection *input_section,
 }
 
 /* Find or create a stub section.  Returns a pointer to the stub section, and
-   the section to which the stub section will be attached (in *LINK_SEC_P). 
+   the section to which the stub section will be attached (in *LINK_SEC_P).
    LINK_SEC_P may be NULL.  */
 
 static asection *
@@ -3849,10 +3950,10 @@ elf32_arm_create_or_find_stub_sec (asection **link_sec_p, asection *section,
 	}
       htab->stub_group[section->id].stub_sec = stub_sec;
     }
-  
+
   if (link_sec_p)
     *link_sec_p = link_sec;
-  
+
   return stub_sec;
 }
 
@@ -3920,7 +4021,7 @@ put_thumb_insn (struct elf32_arm_link_hash_table * htab,
    model, return the new reloc type.  */
 
 static unsigned
-elf32_arm_tls_transition (struct bfd_link_info *info, int r_type, 
+elf32_arm_tls_transition (struct bfd_link_info *info, int r_type,
 			  struct elf_link_hash_entry *h)
 {
   int is_local = (h == NULL);
@@ -3928,7 +4029,7 @@ elf32_arm_tls_transition (struct bfd_link_info *info, int r_type,
   if (info->shared || (h && h->root.type == bfd_link_hash_undefweak))
     return r_type;
 
-  /* We do not support relaxations for Old TLS models.  */ 
+  /* We do not support relaxations for Old TLS models.  */
   switch (r_type)
     {
     case R_ARM_TLS_GOTDESC:
@@ -3974,7 +4075,7 @@ arm_stub_required_alignment (enum elf32_arm_stub_type stub_type)
     case arm_stub_long_branch_v4t_thumb_tls_pic:
     case arm_stub_a8_veneer_blx:
       return 4;
-    
+
     default:
       abort ();  /* Should be unreachable.  */
     }
@@ -4512,7 +4613,7 @@ cortex_a8_erratum_scan (bfd *input_bfd,
       if (elf_section_type (section) != SHT_PROGBITS
           || (elf_section_flags (section) & SHF_EXECINSTR) == 0
           || (section->flags & SEC_EXCLUDE) != 0
-          || (section->sec_info_type == ELF_INFO_TYPE_JUST_SYMS)
+          || (section->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
           || (section->output_section == bfd_abs_section_ptr))
         continue;
 
@@ -4947,13 +5048,13 @@ elf32_arm_size_stubs (bfd *output_bfd,
 			free (internal_relocs);
 		      goto error_ret_free_local;
 		    }
-		  
+
 		  hash = NULL;
 		  if (r_indx >= symtab_hdr->sh_info)
 		    hash = elf32_arm_hash_entry
 		      (elf_sym_hashes (input_bfd)
 		       [r_indx - symtab_hdr->sh_info]);
-		  
+
 		  /* Only look for stubs on branch instructions, or
 		     non-relaxed TLSCALL  */
 		  if ((r_type != (unsigned int) R_ARM_CALL)
@@ -4979,7 +5080,7 @@ elf32_arm_size_stubs (bfd *output_bfd,
 		  sym_value = 0;
 		  destination = 0;
 		  sym_name = NULL;
-		  
+
 		  if (r_type == (unsigned int) R_ARM_TLS_CALL
 		      || r_type == (unsigned int) R_ARM_THM_TLS_CALL)
 		    {
@@ -5524,9 +5625,9 @@ static const insn32 a2t3p_bx_r12_insn = 0xe12fff1c;
      .arm                               mov  lr, pc
      b func                             bx   r6
                                         .arm
-		 		    ;; back_to_thumb       
+		 		    ;; back_to_thumb
                  		        ldmia r13! {r6, lr}
- 				        bx    lr           
+ 				        bx    lr
                                     __func_addr:
                                         .word        func  */
 
@@ -5554,7 +5655,7 @@ arm_allocate_glue_section_space (bfd * abfd, bfd_size_type size, const char * na
       /* Do not include empty glue sections in the output.  */
       if (abfd != NULL)
 	{
-	  s = bfd_get_section_by_name (abfd, name);
+	  s = bfd_get_linker_section (abfd, name);
 	  if (s != NULL)
 	    s->flags |= SEC_EXCLUDE;
 	}
@@ -5563,7 +5664,7 @@ arm_allocate_glue_section_space (bfd * abfd, bfd_size_type size, const char * na
 
   BFD_ASSERT (abfd != NULL);
 
-  s = bfd_get_section_by_name (abfd, name);
+  s = bfd_get_linker_section (abfd, name);
   BFD_ASSERT (s != NULL);
 
   contents = (bfd_byte *) bfd_alloc (abfd, size);
@@ -5619,7 +5720,7 @@ record_arm_to_thumb_glue (struct bfd_link_info * link_info,
   BFD_ASSERT (globals != NULL);
   BFD_ASSERT (globals->bfd_of_glue_owner != NULL);
 
-  s = bfd_get_section_by_name
+  s = bfd_get_linker_section
     (globals->bfd_of_glue_owner, ARM2THUMB_GLUE_SECTION_NAME);
 
   BFD_ASSERT (s != NULL);
@@ -5695,7 +5796,7 @@ record_arm_bx_glue (struct bfd_link_info * link_info, int reg)
   if (globals->bx_glue_offset[reg])
     return;
 
-  s = bfd_get_section_by_name
+  s = bfd_get_linker_section
     (globals->bfd_of_glue_owner, ARM_BX_GLUE_SECTION_NAME);
 
   BFD_ASSERT (s != NULL);
@@ -5786,7 +5887,7 @@ record_vfp11_erratum_veneer (struct bfd_link_info *link_info,
   BFD_ASSERT (hash_table != NULL);
   BFD_ASSERT (hash_table->bfd_of_glue_owner != NULL);
 
-  s = bfd_get_section_by_name
+  s = bfd_get_linker_section
     (hash_table->bfd_of_glue_owner, VFP11_ERRATUM_VENEER_SECTION_NAME);
 
   sec_data = elf32_arm_section_data (s);
@@ -5893,12 +5994,12 @@ arm_make_glue_section (bfd * abfd, const char * name)
 {
   asection * sec;
 
-  sec = bfd_get_section_by_name (abfd, name);
+  sec = bfd_get_linker_section (abfd, name);
   if (sec != NULL)
     /* Already made.  */
     return TRUE;
 
-  sec = bfd_make_section_with_flags (abfd, name, ARM_GLUE_SECTION_FLAGS);
+  sec = bfd_make_section_anyway_with_flags (abfd, name, ARM_GLUE_SECTION_FLAGS);
 
   if (sec == NULL
       || !bfd_set_section_alignment (abfd, sec, 2))
@@ -5963,7 +6064,7 @@ check_use_blx (struct elf32_arm_link_hash_table *globals)
 {
   int cpu_arch;
 
-  cpu_arch = bfd_elf_get_obj_attr_int (globals->obfd, OBJ_ATTR_PROC, 
+  cpu_arch = bfd_elf_get_obj_attr_int (globals->obfd, OBJ_ATTR_PROC,
 				       Tag_CPU_arch);
 
   if (globals->fix_arm1176)
@@ -6583,7 +6684,7 @@ bfd_elf32_arm_vfp11_erratum_scan (bfd *abfd, struct bfd_link_info *link_info)
       if (elf_section_type (sec) != SHT_PROGBITS
           || (elf_section_flags (sec) & SHF_EXECINSTR) == 0
           || (sec->flags & SEC_EXCLUDE) != 0
-	  || sec->sec_info_type == ELF_INFO_TYPE_JUST_SYMS
+	  || sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS
 	  || sec->output_section == bfd_abs_section_ptr
           || strcmp (sec->name, VFP11_ERRATUM_VENEER_SECTION_NAME) == 0)
         continue;
@@ -6918,8 +7019,8 @@ elf32_thumb_to_arm_stub (struct bfd_link_info * info,
 
   my_offset = myh->root.u.def.value;
 
-  s = bfd_get_section_by_name (globals->bfd_of_glue_owner,
-			       THUMB2ARM_GLUE_SECTION_NAME);
+  s = bfd_get_linker_section (globals->bfd_of_glue_owner,
+			      THUMB2ARM_GLUE_SECTION_NAME);
 
   BFD_ASSERT (s != NULL);
   BFD_ASSERT (s->contents != NULL);
@@ -7108,8 +7209,8 @@ elf32_arm_to_thumb_stub (struct bfd_link_info * info,
   BFD_ASSERT (globals != NULL);
   BFD_ASSERT (globals->bfd_of_glue_owner != NULL);
 
-  s = bfd_get_section_by_name (globals->bfd_of_glue_owner,
-			       ARM2THUMB_GLUE_SECTION_NAME);
+  s = bfd_get_linker_section (globals->bfd_of_glue_owner,
+			      ARM2THUMB_GLUE_SECTION_NAME);
   BFD_ASSERT (s != NULL);
   BFD_ASSERT (s->contents != NULL);
   BFD_ASSERT (s->output_section != NULL);
@@ -7162,8 +7263,8 @@ elf32_arm_to_thumb_export_stub (struct elf_link_hash_entry *h, void * inf)
   BFD_ASSERT (globals != NULL);
   BFD_ASSERT (globals->bfd_of_glue_owner != NULL);
 
-  s = bfd_get_section_by_name (globals->bfd_of_glue_owner,
-			       ARM2THUMB_GLUE_SECTION_NAME);
+  s = bfd_get_linker_section (globals->bfd_of_glue_owner,
+			      ARM2THUMB_GLUE_SECTION_NAME);
   BFD_ASSERT (s != NULL);
   BFD_ASSERT (s->contents != NULL);
   BFD_ASSERT (s->output_section != NULL);
@@ -7197,8 +7298,8 @@ elf32_arm_bx_glue (struct bfd_link_info * info, int reg)
   BFD_ASSERT (globals != NULL);
   BFD_ASSERT (globals->bfd_of_glue_owner != NULL);
 
-  s = bfd_get_section_by_name (globals->bfd_of_glue_owner,
-			       ARM_BX_GLUE_SECTION_NAME);
+  s = bfd_get_linker_section (globals->bfd_of_glue_owner,
+			      ARM_BX_GLUE_SECTION_NAME);
   BFD_ASSERT (s != NULL);
   BFD_ASSERT (s->contents != NULL);
   BFD_ASSERT (s->output_section != NULL);
@@ -7354,6 +7455,18 @@ elf32_arm_allocate_plt_entry (struct bfd_link_info *info,
     }
 }
 
+static bfd_vma
+arm_movw_immediate (bfd_vma value)
+{
+  return (value & 0x00000fff) | ((value & 0x0000f000) << 4);
+}
+
+static bfd_vma
+arm_movt_immediate (bfd_vma value)
+{
+  return ((value & 0x0fff0000) >> 16) | ((value & 0xf0000000) >> 12);
+}
+
 /* Fill in a PLT entry and its associated GOT slot.  If DYNINDX == -1,
    the entry lives in .iplt and resolves to (*SYM_VALUE)().
    Otherwise, DYNINDX is the index of the symbol in the dynamic
@@ -7514,6 +7627,45 @@ elf32_arm_populate_plt_entry (bfd *output_bfd, struct bfd_link_info *info,
 	  rel.r_addend = 0;
 	  SWAP_RELOC_OUT (htab) (output_bfd, &rel, loc);
 	}
+      else if (htab->nacl_p)
+	{
+	  /* Calculate the displacement between the PLT slot and the
+	     common tail that's part of the special initial PLT slot.  */
+	  int32_t tail_displacement
+	    = ((splt->output_section->vma + splt->output_offset
+		+ ARM_NACL_PLT_TAIL_OFFSET)
+	       - (plt_address + htab->plt_entry_size + 4));
+	  BFD_ASSERT ((tail_displacement & 3) == 0);
+	  tail_displacement >>= 2;
+
+	  BFD_ASSERT ((tail_displacement & 0xff000000) == 0
+		      || (-tail_displacement & 0xff000000) == 0);
+
+	  /* Calculate the displacement between the PLT slot and the entry
+	     in the GOT.  The offset accounts for the value produced by
+	     adding to pc in the penultimate instruction of the PLT stub.  */
+	  got_displacement = (got_address
+                              - (plt_address + htab->plt_entry_size));
+
+	  /* NaCl does not support interworking at all.  */
+	  BFD_ASSERT (!elf32_arm_plt_needs_thumb_stub_p (info, arm_plt));
+
+	  put_arm_insn (htab, output_bfd,
+			elf32_arm_nacl_plt_entry[0]
+			| arm_movw_immediate (got_displacement),
+			ptr + 0);
+	  put_arm_insn (htab, output_bfd,
+			elf32_arm_nacl_plt_entry[1]
+			| arm_movt_immediate (got_displacement),
+			ptr + 4);
+	  put_arm_insn (htab, output_bfd,
+			elf32_arm_nacl_plt_entry[2],
+			ptr + 8);
+	  put_arm_insn (htab, output_bfd,
+			elf32_arm_nacl_plt_entry[3]
+			| (tail_displacement & 0x00ffffff),
+			ptr + 12);
+	}
       else
 	{
 	  /* Calculate the displacement between the PLT slot and the
@@ -7654,18 +7806,18 @@ elf32_arm_abs12_reloc (bfd *abfd, void *data, bfd_vma value)
    the pre-relaxed code.  It would be nice if the relocs were updated
    to match the optimization.   */
 
-static bfd_reloc_status_type 
+static bfd_reloc_status_type
 elf32_arm_tls_relax (struct elf32_arm_link_hash_table *globals,
-		     bfd *input_bfd, asection *input_sec, bfd_byte *contents, 
+		     bfd *input_bfd, asection *input_sec, bfd_byte *contents,
 		     Elf_Internal_Rela *rel, unsigned long is_local)
 {
   unsigned long insn;
-  
+
   switch (ELF32_R_TYPE (rel->r_info))
     {
     default:
       return bfd_reloc_notsupported;
-      
+
     case R_ARM_TLS_GOTDESC:
       if (is_local)
 	insn = 0;
@@ -7721,7 +7873,7 @@ elf32_arm_tls_relax (struct elf32_arm_link_hash_table *globals,
 	  return bfd_reloc_notsupported;
 	}
       break;
-      
+
     case R_ARM_TLS_DESCSEQ:
       /* arm insn.  */
       insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
@@ -7767,7 +7919,7 @@ elf32_arm_tls_relax (struct elf32_arm_link_hash_table *globals,
       insn = is_local ? 0xe1a00000 : 0xe79f0000;
       bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
       break;
-      
+
     case R_ARM_THM_TLS_CALL:
       /* GD->IE relaxation */
       if (!is_local)
@@ -7779,7 +7931,7 @@ elf32_arm_tls_relax (struct elf32_arm_link_hash_table *globals,
       else
 	/* nop; nop */
 	insn = 0xbf00bf00;
-	
+
       bfd_put_16 (input_bfd, insn >> 16, contents + rel->r_offset);
       bfd_put_16 (input_bfd, insn & 0xffff, contents + rel->r_offset + 2);
       break;
@@ -9200,9 +9352,9 @@ elf32_arm_final_link_relocate (reloc_howto_type *           howto,
 	  }
 
 	/* Linker relaxations happens from one of the
-	   R_ARM_{GOTDESC,CALL,DESCSEQ} relocations to IE or LE.  */ 
+	   R_ARM_{GOTDESC,CALL,DESCSEQ} relocations to IE or LE.  */
 	if (ELF32_R_TYPE(rel->r_info) != r_type)
-	  tls_type = GOT_TLS_IE; 
+	  tls_type = GOT_TLS_IE;
 
 	BFD_ASSERT (tls_type != GOT_UNKNOWN);
 
@@ -9243,7 +9395,7 @@ elf32_arm_final_link_relocate (reloc_howto_type *           howto,
 				   + globals->root.sgotplt->output_offset
 				   + offplt
 				   + globals->sgotplt_jump_table_size);
-		
+
 		outrel.r_info = ELF32_R_INFO (indx, R_ARM_TLS_DESC);
 		sreloc = globals->root.srelplt;
 		loc = sreloc->contents;
@@ -9261,13 +9413,13 @@ elf32_arm_final_link_relocate (reloc_howto_type *           howto,
 			    !h ? value - elf_hash_table (info)->tls_sec->vma
 			    : info->flags & DF_BIND_NOW ? 0
 			    : 0x80000000 | ELF32_R_SYM (outrel.r_info),
-			    globals->root.sgotplt->contents + offplt +
-			    globals->sgotplt_jump_table_size);
-		
+			    globals->root.sgotplt->contents + offplt
+			    + globals->sgotplt_jump_table_size);
+
 		/* Second word in the relocation is always zero.  */
 	    	bfd_put_32 (output_bfd, 0,
-			    globals->root.sgotplt->contents + offplt +
-			    globals->sgotplt_jump_table_size + 4);
+			    globals->root.sgotplt->contents + offplt
+			    + globals->sgotplt_jump_table_size + 4);
 	      }
 	    if (tls_type & GOT_TLS_GD)
 	      {
@@ -9387,9 +9539,10 @@ elf32_arm_final_link_relocate (reloc_howto_type *           howto,
 	    if (ELF32_R_TYPE(rel->r_info) == R_ARM_TLS_CALL)
 	      {
 		unsigned long inst;
-		
-		offset -= (input_section->output_section->vma +
-			   input_section->output_offset + rel->r_offset + 8);
+
+		offset -= (input_section->output_section->vma
+			   + input_section->output_offset
+			   + rel->r_offset + 8);
 
 		inst = offset >> 2;
 		inst &= 0x00ffffff;
@@ -9402,10 +9555,10 @@ elf32_arm_final_link_relocate (reloc_howto_type *           howto,
 		unsigned upper_insn, lower_insn;
 		unsigned neg;
 
-		offset -= (input_section->output_section->vma + 
-			   input_section->output_offset
+		offset -= (input_section->output_section->vma
+			   + input_section->output_offset
 			   + rel->r_offset + 4);
-	    
+
 		if (stub_type != arm_stub_none
 		    && arm_stub_is_thumb (stub_type))
 		  {
@@ -9438,11 +9591,11 @@ elf32_arm_final_link_relocate (reloc_howto_type *           howto,
 	  {
 	    unsigned long data, insn;
 	    unsigned thumb;
-	    
+
 	    data = bfd_get_32 (input_bfd, hit_data);
 	    thumb = data & 1;
 	    data &= ~1u;
-	    
+
 	    if (thumb)
 	      {
 		insn = bfd_get_16 (input_bfd, contents + rel->r_offset - data);
@@ -9479,7 +9632,7 @@ elf32_arm_final_link_relocate (reloc_howto_type *           howto,
 		  case 0xe0:	/* add */
 		    value = -8;
 		    break;
-		    
+
 		  default:
 		    (*_bfd_error_handler)
 		      (_("%B(%A+0x%lx):unexpected ARM instruction '0x%x' referenced by TLS_GOTDESC"),
@@ -9488,7 +9641,7 @@ elf32_arm_final_link_relocate (reloc_howto_type *           howto,
 		    return bfd_reloc_notsupported;
 		  }
 	      }
- 
+
 	    value += ((globals->root.sgotplt->output_section->vma
 		       + globals->root.sgotplt->output_offset + off)
 		      - (input_section->output_section->vma
@@ -9514,7 +9667,7 @@ elf32_arm_final_link_relocate (reloc_howto_type *           howto,
 	    (_("%B(%A+0x%lx): R_ARM_TLS_LE32 relocation not permitted in shared object"),
 	     input_bfd, input_section,
 	     (long) rel->r_offset, howto->name);
-	  return (bfd_reloc_status_type) FALSE;
+	  return bfd_reloc_notsupported;
 	}
       else
 	value = tpoff (info, value);
@@ -10222,7 +10375,7 @@ elf32_arm_relocate_section (bfd *                  output_bfd,
 		   rel->r_offset, TRUE))
 		return FALSE;
 	    }
-	  
+
 	  if (globals->use_rel)
 	    {
 	      relocation = (sec->output_section->vma
@@ -10331,9 +10484,9 @@ elf32_arm_relocate_section (bfd *                  output_bfd,
 	  sym_type = h->type;
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	{
@@ -10387,7 +10540,7 @@ elf32_arm_relocate_section (bfd *                  output_bfd,
          both in relaxed and non-relaxed cases */
      if ((elf32_arm_tls_transition (info, r_type, h) != (unsigned)r_type)
 	 || (IS_ARM_TLS_GNU_RELOC (r_type)
-	     && !((h ? elf32_arm_hash_entry (h)->tls_type : 
+	     && !((h ? elf32_arm_hash_entry (h)->tls_type :
 		   elf32_arm_local_got_tls_type (input_bfd)[r_symndx])
 		  & GOT_TLS_GDESC)))
        {
@@ -10399,7 +10552,7 @@ elf32_arm_relocate_section (bfd *                  output_bfd,
        }
      else
        r = bfd_reloc_continue;
-     
+
      if (r == bfd_reloc_continue)
        r = elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
 					  input_section, contents, rel,
@@ -10495,11 +10648,11 @@ add_unwind_table_edit (arm_unwind_table_edit **head,
 {
   arm_unwind_table_edit *new_edit = (arm_unwind_table_edit *)
       xmalloc (sizeof (arm_unwind_table_edit));
-  
+
   new_edit->type = type;
   new_edit->linked_section = linked_section;
   new_edit->index = tindex;
-  
+
   if (tindex > 0)
     {
       new_edit->next = NULL;
@@ -10557,7 +10710,7 @@ insert_cantunwind_after(asection *text_sec, asection *exidx_sec)
 
 /* Scan .ARM.exidx tables, and create a list describing edits which should be
    made to those tables, such that:
-   
+
      1. Regions without unwind data are marked with EXIDX_CANTUNWIND entries.
      2. Duplicate entries are merged together (EXIDX_CANTUNWIND, or unwind
         codes which have been inlined into the index).
@@ -10565,8 +10718,7 @@ insert_cantunwind_after(asection *text_sec, asection *exidx_sec)
    If MERGE_EXIDX_ENTRIES is false, duplicate entries are not merged.
 
    The edits are applied when the tables are written
-   (in elf32_arm_write_section).
-*/
+   (in elf32_arm_write_section).  */
 
 bfd_boolean
 elf32_arm_fix_exidx_coverage (asection **text_section_order,
@@ -10585,15 +10737,15 @@ elf32_arm_fix_exidx_coverage (asection **text_section_order,
   for (inp = info->input_bfds; inp != NULL; inp = inp->link_next)
     {
       asection *sec;
-      
+
       for (sec = inp->sections; sec != NULL; sec = sec->next)
         {
 	  struct bfd_elf_section_data *elf_sec = elf_section_data (sec);
 	  Elf_Internal_Shdr *hdr = &elf_sec->this_hdr;
-	  
+
 	  if (!hdr || hdr->sh_type != SHT_ARM_EXIDX)
 	    continue;
-	  
+
 	  if (elf_sec->linked_to)
 	    {
 	      Elf_Internal_Shdr *linked_hdr
@@ -10655,13 +10807,13 @@ elf32_arm_fix_exidx_coverage (asection **text_section_order,
       hdr = &elf_section_data (exidx_sec)->this_hdr;
       if (hdr->sh_type != SHT_ARM_EXIDX)
         continue;
-      
+
       exidx_arm_data = get_arm_elf_section_data (exidx_sec);
       if (exidx_arm_data == NULL)
         continue;
-      
+
       ibfd = exidx_sec->owner;
-	  
+
       if (hdr->contents != NULL)
 	contents = hdr->contents;
       else if (! bfd_malloc_and_get_section (ibfd, exidx_sec, &contents))
@@ -10713,7 +10865,7 @@ elf32_arm_fix_exidx_coverage (asection **text_section_order,
       /* Record edits to be applied later (in elf32_arm_write_section).  */
       exidx_arm_data->u.exidx.unwind_edit_list = unwind_edit_head;
       exidx_arm_data->u.exidx.unwind_edit_tail = unwind_edit_tail;
-	  
+
       if (deleted_exidx_bytes > 0)
 	adjust_exidx_size(exidx_sec, -deleted_exidx_bytes);
 
@@ -10734,7 +10886,7 @@ elf32_arm_output_glue_section (struct bfd_link_info *info, bfd *obfd,
 {
   asection *sec, *osec;
 
-  sec = bfd_get_section_by_name (ibfd, name);
+  sec = bfd_get_linker_section (ibfd, name);
   if (sec == NULL || (sec->flags & SEC_EXCLUDE) != 0)
     return TRUE;
 
@@ -10807,6 +10959,43 @@ elf32_arm_final_link (bfd *abfd, struct bfd_link_info *info)
   return TRUE;
 }
 
+/* Return a best guess for the machine number based on the attributes.  */
+
+static unsigned int
+bfd_arm_get_mach_from_attributes (bfd * abfd)
+{
+  int arch = bfd_elf_get_obj_attr_int (abfd, OBJ_ATTR_PROC, Tag_CPU_arch);
+
+  switch (arch)
+    {
+    case TAG_CPU_ARCH_V4: return bfd_mach_arm_4;
+    case TAG_CPU_ARCH_V4T: return bfd_mach_arm_4T;
+    case TAG_CPU_ARCH_V5T: return bfd_mach_arm_5T;
+
+    case TAG_CPU_ARCH_V5TE:
+      {
+	char * name;
+
+	BFD_ASSERT (Tag_CPU_name < NUM_KNOWN_OBJ_ATTRIBUTES);
+	name = elf_known_obj_attributes (abfd) [OBJ_ATTR_PROC][Tag_CPU_name].s;
+
+	if (name)
+	  {
+	    if (strcmp (name, "IWMMXT2") == 0)
+	      return bfd_mach_arm_iWMMXt2;
+
+	    if (strcmp (name, "IWMMXT") == 0)
+	      return bfd_mach_arm_iWMMXt;
+	  }
+
+	return bfd_mach_arm_5TE;
+      }
+
+    default:
+      return bfd_mach_arm_unknown;
+    }
+}
+
 /* Set the right machine number.  */
 
 static bfd_boolean
@@ -10816,15 +11005,15 @@ elf32_arm_object_p (bfd *abfd)
 
   mach = bfd_arm_get_mach_from_notes (abfd, ARM_NOTE_SECTION);
 
-  if (mach != bfd_mach_arm_unknown)
-    bfd_default_set_arch_mach (abfd, bfd_arch_arm, mach);
-
-  else if (elf_elfheader (abfd)->e_flags & EF_ARM_MAVERICK_FLOAT)
-    bfd_default_set_arch_mach (abfd, bfd_arch_arm, bfd_mach_arm_ep9312);
-
-  else
-    bfd_default_set_arch_mach (abfd, bfd_arch_arm, mach);
+  if (mach == bfd_mach_arm_unknown)
+    {
+      if (elf_elfheader (abfd)->e_flags & EF_ARM_MAVERICK_FLOAT)
+	mach = bfd_mach_arm_ep9312;
+      else
+	mach = bfd_arm_get_mach_from_attributes (abfd);
+    }
 
+  bfd_default_set_arch_mach (abfd, bfd_arch_arm, mach);
   return TRUE;
 }
 
@@ -11219,6 +11408,46 @@ tag_cpu_arch_combine (bfd *ibfd, int oldtag, int *secondary_compat_out,
 #undef T
 }
 
+/* Query attributes object to see if integer divide instructions may be
+   present in an object.  */
+static bfd_boolean
+elf32_arm_attributes_accept_div (const obj_attribute *attr)
+{
+  int arch = attr[Tag_CPU_arch].i;
+  int profile = attr[Tag_CPU_arch_profile].i;
+
+  switch (attr[Tag_DIV_use].i)
+    {
+    case 0:
+      /* Integer divide allowed if instruction contained in archetecture.  */
+      if (arch == TAG_CPU_ARCH_V7 && (profile == 'R' || profile == 'M'))
+	return TRUE;
+      else if (arch >= TAG_CPU_ARCH_V7E_M)
+	return TRUE;
+      else
+	return FALSE;
+
+    case 1:
+      /* Integer divide explicitly prohibited.  */
+      return FALSE;
+
+    default:
+      /* Unrecognised case - treat as allowing divide everywhere.  */
+    case 2:
+      /* Integer divide allowed in ARM state.  */
+      return TRUE;
+    }
+}
+
+/* Query attributes object to see if integer divide instructions are
+   forbidden to be in the object.  This is not the inverse of
+   elf32_arm_attributes_accept_div.  */
+static bfd_boolean
+elf32_arm_attributes_forbid_div (const obj_attribute *attr)
+{
+  return attr[Tag_DIV_use].i == 1;
+}
+
 /* Merge EABI object attributes from IBFD into OBFD.  Raise an error if there
    are conflicting attributes.  */
 
@@ -11660,29 +11889,22 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
 	  break;
 
 	case Tag_DIV_use:
-	  /* This tag is set to zero if we can use UDIV and SDIV in Thumb
-	     mode on a v7-M or v7-R CPU; to one if we can not use UDIV or
-	     SDIV at all; and to two if we can use UDIV or SDIV on a v7-A
-	     CPU.  We will merge as follows: If the input attribute's value
-	     is one then the output attribute's value remains unchanged.  If
-	     the input attribute's value is zero or two then if the output
-	     attribute's value is one the output value is set to the input
-	     value, otherwise the output value must be the same as the
-	     inputs.  */ 
-	  if (in_attr[i].i != 1 && out_attr[i].i != 1) 
-	    { 
-	      if (in_attr[i].i != out_attr[i].i)
-		{
-		  _bfd_error_handler
-		    (_("DIV usage mismatch between %B and %B"),
-		     ibfd, obfd); 
-		  result = FALSE;
-		}
-	    } 
-
-	  if (in_attr[i].i != 1)
-	    out_attr[i].i = in_attr[i].i; 
-	  
+	  /* A value of zero on input means that the divide instruction may
+	     be used if available in the base architecture as specified via
+	     Tag_CPU_arch and Tag_CPU_arch_profile.  A value of 1 means that
+	     the user did not want divide instructions.  A value of 2
+	     explicitly means that divide instructions were allowed in ARM
+	     and Thumb state.  */
+	  if (in_attr[i].i == out_attr[i].i)
+	    /* Do nothing.  */ ;
+	  else if (elf32_arm_attributes_forbid_div (in_attr)
+		   && !elf32_arm_attributes_accept_div (out_attr))
+	    out_attr[i].i = 1;
+	  else if (elf32_arm_attributes_forbid_div (out_attr)
+		   && elf32_arm_attributes_accept_div (in_attr))
+	    out_attr[i].i = in_attr[i].i;
+	  else if (in_attr[i].i == 2)
+	    out_attr[i].i = in_attr[i].i;
 	  break;
 
 	case Tag_MPextension_use_legacy:
@@ -11694,7 +11916,7 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
 		{
 		  _bfd_error_handler
 		    (_("%B has has both the current and legacy "
-		       "Tag_MPextension_use attributes"), 
+		       "Tag_MPextension_use attributes"),
 		     ibfd);
 		  result = FALSE;
 		}
@@ -12074,8 +12296,19 @@ elf32_arm_gc_sweep_hook (bfd *                     abfd,
       if (may_need_local_target_p
 	  && elf32_arm_get_plt_info (abfd, eh, r_symndx, &root_plt, &arm_plt))
 	{
-	  BFD_ASSERT (root_plt->refcount > 0);
-	  root_plt->refcount -= 1;
+	  /* If PLT refcount book-keeping is wrong and too low, we'll
+	     see a zero value (going to -1) for the root PLT reference
+	     count.  */
+	  if (root_plt->refcount >= 0)
+	    {
+	      BFD_ASSERT (root_plt->refcount != 0);
+	      root_plt->refcount -= 1;
+	    }
+	  else
+	    /* A value of -1 means the symbol has become local, forced
+	       or seeing a hidden definition.  Any other negative value
+	       is an error.  */
+	    BFD_ASSERT (root_plt->refcount == -1);
 
 	  if (!call_reloc_p)
 	    arm_plt->noncall_refcount--;
@@ -12168,7 +12401,7 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
   symtab_hdr = & elf_symtab_hdr (abfd);
   sym_hashes = elf_sym_hashes (abfd);
   nsyms = NUM_SHDR_ENTRIES (symtab_hdr);
-  
+
   rel_end = relocs + sec->reloc_count;
   for (rel = relocs; rel < rel_end; rel++)
     {
@@ -12240,14 +12473,14 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
 	      switch (r_type)
 		{
 		case R_ARM_TLS_GD32: tls_type = GOT_TLS_GD; break;
-		  
+
 		case R_ARM_TLS_IE32: tls_type = GOT_TLS_IE; break;
-		  
+
 		case R_ARM_TLS_GOTDESC:
 		case R_ARM_TLS_CALL: case R_ARM_THM_TLS_CALL:
 		case R_ARM_TLS_DESCSEQ: case R_ARM_THM_TLS_DESCSEQ:
 		  tls_type = GOT_TLS_GDESC; break;
-		  
+
 		default: tls_type = GOT_NORMAL; break;
 		}
 
@@ -12436,7 +12669,8 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
 
 	  /* If the symbol is a function that doesn't bind locally,
 	     this relocation will need a PLT entry.  */
-	  root_plt->refcount += 1;
+	  if (root_plt->refcount != -1)
+	    root_plt->refcount += 1;
 
 	  if (!call_reloc_p)
 	    arm_plt->noncall_refcount++;
@@ -12797,13 +13031,6 @@ elf32_arm_adjust_dynamic_symbol (struct bfd_link_info * info,
   if (info->shared || globals->root.is_relocatable_executable)
     return TRUE;
 
-  if (h->size == 0)
-    {
-      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
-			     h->root.root.string);
-      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
@@ -12813,18 +13040,18 @@ elf32_arm_adjust_dynamic_symbol (struct bfd_link_info * info,
      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");
+  s = bfd_get_linker_section (dynobj, ".dynbss");
   BFD_ASSERT (s != NULL);
 
   /* We must generate a R_ARM_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(a).bss section we are going to use.  */
-  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
       asection *srel;
 
-      srel = bfd_get_section_by_name (dynobj, RELOC_SECTION (globals, ".bss"));
+      srel = bfd_get_linker_section (dynobj, RELOC_SECTION (globals, ".bss"));
       elf32_arm_allocate_dynrelocs (info, srel, 1);
       h->needs_copy = 1;
     }
@@ -13014,7 +13241,7 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf)
 	      if (tls_type & GOT_TLS_GD)
 		elf32_arm_allocate_dynrelocs (info, htab->root.srelgot, 1);
 
-	      if (tls_type & GOT_TLS_GDESC) 
+	      if (tls_type & GOT_TLS_GDESC)
 		{
 		  elf32_arm_allocate_dynrelocs (info, htab->root.srelplt, 1);
 		  /* GDESC needs a trampoline to jump to.  */
@@ -13023,7 +13250,7 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf)
 
 	      /* Only GD needs it.  GDESC just emits one relocation per
 		 2 entries.  */
-	      if ((tls_type & GOT_TLS_GD) && indx != 0)  
+	      if ((tls_type & GOT_TLS_GD) && indx != 0)
 		elf32_arm_allocate_dynrelocs (info, htab->root.srelgot, 1);
 	    }
 	  else if (!SYMBOL_REFERENCES_LOCAL (info, h))
@@ -13266,7 +13493,7 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  BFD_ASSERT (s != NULL);
 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
@@ -13478,10 +13705,10 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
     {
       if (htab->root.splt->size == 0)
 	htab->root.splt->size += htab->plt_header_size;
-      
+
       htab->tls_trampoline = htab->root.splt->size;
       htab->root.splt->size += htab->plt_entry_size;
-      
+
       /* If we're not using lazy TLS relocations, don't generate the
          PLT and GOT entries they require.  */
       if (!(info->flags & DF_BIND_NOW))
@@ -13589,9 +13816,9 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
 	    return FALSE;
 
 	  if (htab->dt_tlsdesc_plt &&
-		(!add_dynamic_entry (DT_TLSDESC_PLT,0) 
+		(!add_dynamic_entry (DT_TLSDESC_PLT,0)
 		 || !add_dynamic_entry (DT_TLSDESC_GOT,0)))
-	    return FALSE; 
+	    return FALSE;
 	}
 
       if (relocs)
@@ -13664,7 +13891,7 @@ elf32_arm_always_size_sections (bfd *output_bfd,
 		 tls_sec, 0, NULL, FALSE,
 		 bed->collect, &bh)))
 	    return FALSE;
-	  
+
       	  tlsbase->type = STT_TLS;
           tlsbase = (struct elf_link_hash_entry *)bh;
           tlsbase->def_regular = 1;
@@ -13765,7 +13992,7 @@ arm_put_trampoline (struct elf32_arm_link_hash_table *htab, bfd *output_bfd,
 		    const unsigned long *template, unsigned count)
 {
   unsigned ix;
-  
+
   for (ix = 0; ix != count; ix++)
     {
       unsigned long insn = template[ix];
@@ -13798,7 +14025,7 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info
      Catch this here so that we do not seg-fault later on.  */
   if (sgot != NULL && bfd_is_abs_section (sgot->output_section))
     return FALSE;
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
     {
@@ -14007,6 +14234,25 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info
 	      SWAP_RELOC_OUT (htab) (output_bfd, &rel,
 				     htab->srelplt2->contents);
 	    }
+	  else if (htab->nacl_p)
+	    {
+	      unsigned int i;
+
+	      got_displacement = got_address + 8 - (plt_address + 16);
+
+	      put_arm_insn (htab, output_bfd,
+			    elf32_arm_nacl_plt0_entry[0]
+			    | arm_movw_immediate (got_displacement),
+			    splt->contents + 0);
+	      put_arm_insn (htab, output_bfd,
+			    elf32_arm_nacl_plt0_entry[1]
+			    | arm_movt_immediate (got_displacement),
+			    splt->contents + 4);
+	      for (i = 2; i < ARRAY_SIZE (elf32_arm_nacl_plt0_entry); ++i)
+		put_arm_insn (htab, output_bfd,
+			      elf32_arm_nacl_plt0_entry[i],
+			      splt->contents + (i * 4));
+	    }
 	  else
 	    {
 	      got_displacement = got_address - (plt_address + 16);
@@ -14045,7 +14291,7 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info
 	  bfd_vma plt_address
 	    = splt->output_section->vma + splt->output_offset;
 
-	  arm_put_trampoline (htab, output_bfd, 
+	  arm_put_trampoline (htab, output_bfd,
 			      splt->contents + htab->dt_tlsdesc_plt,
 			      dl_tlsdesc_lazy_trampoline, 6);
 
@@ -14062,13 +14308,13 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info
 
       if (htab->tls_trampoline)
 	{
-	  arm_put_trampoline (htab, output_bfd, 
+	  arm_put_trampoline (htab, output_bfd,
 			      splt->contents + htab->tls_trampoline,
 			      tls_trampoline, 3);
 #ifdef FOUR_WORD_PLT
 	  bfd_put_32 (output_bfd, 0x00000000,
 		      splt->contents + htab->tls_trampoline + 12);
-#endif 
+#endif
 	}
 
       if (htab->vxworks_p && !info->shared && htab->root.splt->size > 0)
@@ -14235,7 +14481,7 @@ get_arm_elf_section_data (asection * sec)
 
 typedef struct
 {
-  void *finfo;
+  void *flaginfo;
   struct bfd_link_info *info;
   asection *sec;
   int sec_shndx;
@@ -14270,7 +14516,7 @@ elf32_arm_output_map_sym (output_arch_syminfo *osi,
   sym.st_shndx = osi->sec_shndx;
   sym.st_target_internal = 0;
   elf32_arm_section_map_add (osi->sec, names[type][1], offset);
-  return osi->func (osi->finfo, names[type], &sym, osi->sec, NULL) == 1;
+  return osi->func (osi->flaginfo, names[type], &sym, osi->sec, NULL) == 1;
 }
 
 /* Output mapping symbols for the PLT entry described by ROOT_PLT and ARM_PLT.
@@ -14324,6 +14570,11 @@ elf32_arm_output_plt_map_1 (output_arch_syminfo *osi,
       if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 20))
 	return FALSE;
     }
+  else if (htab->nacl_p)
+    {
+      if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr))
+	return FALSE;
+    }
   else
     {
       bfd_boolean thumb_stub_p;
@@ -14392,7 +14643,7 @@ elf32_arm_output_stub_sym (output_arch_syminfo *osi, const char *name,
   sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
   sym.st_shndx = osi->sec_shndx;
   sym.st_target_internal = 0;
-  return osi->func (osi->finfo, name, &sym, osi->sec, NULL) == 1;
+  return osi->func (osi->flaginfo, name, &sym, osi->sec, NULL) == 1;
 }
 
 static bfd_boolean
@@ -14504,7 +14755,7 @@ arm_map_one_stub (struct bfd_hash_entry * gen_entry,
 static bfd_boolean
 elf32_arm_output_arch_local_syms (bfd *output_bfd,
 				  struct bfd_link_info *info,
-				  void *finfo,
+				  void *flaginfo,
 				  int (*func) (void *, const char *,
 					       Elf_Internal_Sym *,
 					       asection *,
@@ -14522,7 +14773,7 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd,
 
   check_use_blx (htab);
 
-  osi.finfo = finfo;
+  osi.flaginfo = flaginfo;
   osi.info = info;
   osi.func = func;
 
@@ -14559,8 +14810,8 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd,
   /* ARM->Thumb glue.  */
   if (htab->arm_glue_size > 0)
     {
-      osi.sec = bfd_get_section_by_name (htab->bfd_of_glue_owner,
-					 ARM2THUMB_GLUE_SECTION_NAME);
+      osi.sec = bfd_get_linker_section (htab->bfd_of_glue_owner,
+					ARM2THUMB_GLUE_SECTION_NAME);
 
       osi.sec_shndx = _bfd_elf_section_from_bfd_section
 	  (output_bfd, osi.sec->output_section);
@@ -14582,8 +14833,8 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd,
   /* Thumb->ARM glue.  */
   if (htab->thumb_glue_size > 0)
     {
-      osi.sec = bfd_get_section_by_name (htab->bfd_of_glue_owner,
-					 THUMB2ARM_GLUE_SECTION_NAME);
+      osi.sec = bfd_get_linker_section (htab->bfd_of_glue_owner,
+					THUMB2ARM_GLUE_SECTION_NAME);
 
       osi.sec_shndx = _bfd_elf_section_from_bfd_section
 	  (output_bfd, osi.sec->output_section);
@@ -14599,8 +14850,8 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd,
   /* ARMv4 BX veneers.  */
   if (htab->bx_glue_size > 0)
     {
-      osi.sec = bfd_get_section_by_name (htab->bfd_of_glue_owner,
-					 ARM_BX_GLUE_SECTION_NAME);
+      osi.sec = bfd_get_linker_section (htab->bfd_of_glue_owner,
+					ARM_BX_GLUE_SECTION_NAME);
 
       osi.sec_shndx = _bfd_elf_section_from_bfd_section
 	  (output_bfd, osi.sec->output_section);
@@ -14650,6 +14901,11 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd,
 		return FALSE;
 	    }
 	}
+      else if (htab->nacl_p)
+	{
+	  if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, 0))
+	    return FALSE;
+	}
       else if (!htab->symbian_p)
 	{
 	  if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, 0))
@@ -14689,7 +14945,7 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd,
       /* Mapping symbols for the lazy tls trampoline.  */
       if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, htab->dt_tlsdesc_plt))
 	return FALSE;
-       
+
       if (!elf32_arm_output_map_sym (&osi, ARM_MAP_DATA,
 				     htab->dt_tlsdesc_plt + 24))
 	return FALSE;
@@ -14703,9 +14959,9 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd,
       if (!elf32_arm_output_map_sym (&osi, ARM_MAP_DATA,
 				     htab->tls_trampoline + 12))
 	return FALSE;
-#endif 
+#endif
     }
-  
+
   return TRUE;
 }
 
@@ -14768,23 +15024,24 @@ copy_exidx_entry (bfd *output_bfd, bfd_byte *to, bfd_byte *from, bfd_vma offset)
 {
   unsigned long first_word = bfd_get_32 (output_bfd, from);
   unsigned long second_word = bfd_get_32 (output_bfd, from + 4);
-  
+
   /* High bit of first word is supposed to be zero.  */
   if ((first_word & 0x80000000ul) == 0)
     first_word = offset_prel31 (first_word, offset);
-  
+
   /* If the high bit of the first word is clear, and the bit pattern is not 0x1
      (EXIDX_CANTUNWIND), this is an offset to an .ARM.extab entry.  */
   if ((second_word != 0x1) && ((second_word & 0x80000000ul) == 0))
     second_word = offset_prel31 (second_word, offset);
-  
+
   bfd_put_32 (output_bfd, first_word, to);
   bfd_put_32 (output_bfd, second_word, to + 4);
 }
 
 /* Data for make_branch_to_a8_stub().  */
 
-struct a8_branch_to_stub_data {
+struct a8_branch_to_stub_data
+{
   asection *writing_section;
   bfd_byte *contents;
 };
@@ -15022,7 +15279,7 @@ elf32_arm_write_section (bfd *output_bfd,
 	  if (edit_node)
 	    {
 	      unsigned int edit_index = edit_node->index;
-	      
+
 	      if (in_index < edit_index && in_index * 8 < input_size)
 	        {
 		  copy_exidx_entry (output_bfd, edited_contents + out_index * 8,
@@ -15040,7 +15297,7 @@ elf32_arm_write_section (bfd *output_bfd,
 		      in_index++;
 		      add_to_offsets += 8;
 		      break;
-		    
+
 		    case INSERT_EXIDX_CANTUNWIND_AT_END:
 		      {
 		        asection *text_sec = edit_node->linked_section;
@@ -15070,7 +15327,7 @@ elf32_arm_write_section (bfd *output_bfd,
 		      }
 		      break;
 		    }
-		  
+
 		  edit_node = edit_node->next;
 		}
 	    }
@@ -15360,7 +15617,7 @@ const struct elf_size_info elf32_arm_size_info =
 #define bfd_elf32_bfd_link_hash_table_create    elf32_arm_link_hash_table_create
 #define bfd_elf32_bfd_link_hash_table_free      elf32_arm_hash_table_free
 #define bfd_elf32_bfd_reloc_type_lookup		elf32_arm_reloc_type_lookup
-#define bfd_elf32_bfd_reloc_name_lookup	elf32_arm_reloc_name_lookup
+#define bfd_elf32_bfd_reloc_name_lookup		elf32_arm_reloc_name_lookup
 #define bfd_elf32_find_nearest_line	        elf32_arm_find_nearest_line
 #define bfd_elf32_find_inliner_info	        elf32_arm_find_inliner_info
 #define bfd_elf32_new_section_hook		elf32_arm_new_section_hook
@@ -15414,11 +15671,78 @@ const struct elf_size_info elf32_arm_size_info =
 #define elf_backend_obj_attrs_arg_type		elf32_arm_obj_attrs_arg_type
 #undef  elf_backend_obj_attrs_section_type
 #define elf_backend_obj_attrs_section_type	SHT_ARM_ATTRIBUTES
-#define elf_backend_obj_attrs_order	elf32_arm_obj_attrs_order
-#define elf_backend_obj_attrs_handle_unknown elf32_arm_obj_attrs_handle_unknown
+#define elf_backend_obj_attrs_order		elf32_arm_obj_attrs_order
+#define elf_backend_obj_attrs_handle_unknown 	elf32_arm_obj_attrs_handle_unknown
 
 #include "elf32-target.h"
 
+/* Native Client targets.  */
+
+#undef	TARGET_LITTLE_SYM
+#define TARGET_LITTLE_SYM		bfd_elf32_littlearm_nacl_vec
+#undef	TARGET_LITTLE_NAME
+#define TARGET_LITTLE_NAME		"elf32-littlearm-nacl"
+#undef	TARGET_BIG_SYM
+#define TARGET_BIG_SYM			bfd_elf32_bigarm_nacl_vec
+#undef	TARGET_BIG_NAME
+#define TARGET_BIG_NAME			"elf32-bigarm-nacl"
+
+/* Like elf32_arm_link_hash_table_create -- but overrides
+   appropriately for NaCl.  */
+
+static struct bfd_link_hash_table *
+elf32_arm_nacl_link_hash_table_create (bfd *abfd)
+{
+  struct bfd_link_hash_table *ret;
+
+  ret = elf32_arm_link_hash_table_create (abfd);
+  if (ret)
+    {
+      struct elf32_arm_link_hash_table *htab
+	= (struct elf32_arm_link_hash_table *) ret;
+
+      htab->nacl_p = 1;
+
+      htab->plt_header_size = 4 * ARRAY_SIZE (elf32_arm_nacl_plt0_entry);
+      htab->plt_entry_size = 4 * ARRAY_SIZE (elf32_arm_nacl_plt_entry);
+    }
+  return ret;
+}
+
+/* Since NaCl doesn't use the ARM-specific unwind format, we don't
+   really need to use elf32_arm_modify_segment_map.  But we do it
+   anyway just to reduce gratuitous differences with the stock ARM backend.  */
+
+static bfd_boolean
+elf32_arm_nacl_modify_segment_map (bfd *abfd, struct bfd_link_info *info)
+{
+  return (elf32_arm_modify_segment_map (abfd, info)
+	  && nacl_modify_segment_map (abfd, info));
+}
+
+#undef	elf32_bed
+#define elf32_bed			elf32_arm_nacl_bed
+#undef  bfd_elf32_bfd_link_hash_table_create
+#define bfd_elf32_bfd_link_hash_table_create	\
+  elf32_arm_nacl_link_hash_table_create
+#undef	elf_backend_plt_alignment
+#define elf_backend_plt_alignment	4
+#undef	elf_backend_modify_segment_map
+#define	elf_backend_modify_segment_map		elf32_arm_nacl_modify_segment_map
+#undef	elf_backend_modify_program_headers
+#define	elf_backend_modify_program_headers	nacl_modify_program_headers
+
+#undef	ELF_MAXPAGESIZE
+#define ELF_MAXPAGESIZE			0x10000
+
+#include "elf32-target.h"
+
+/* Reset to defaults.  */
+#undef	elf_backend_plt_alignment
+#undef	elf_backend_modify_segment_map
+#define elf_backend_modify_segment_map		elf32_arm_modify_segment_map
+#undef	elf_backend_modify_program_headers
+
 /* VxWorks Targets.  */
 
 #undef  TARGET_LITTLE_SYM
diff --git a/bfd/elf32-avr.c b/bfd/elf32-avr.c
index 6d20aef..38e41df 100644
--- a/bfd/elf32-avr.c
+++ b/bfd/elf32-avr.c
@@ -1,6 +1,7 @@
 /* AVR-specific support for 32-bit ELF
    Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
-   2010, 2011  Free Software Foundation, Inc.
+   2010, 2011, 2012
+   Free Software Foundation, Inc.
    Contributed by Denis Chertykov <denisc at overta.ru>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -516,6 +517,48 @@ static reloc_howto_type elf_avr_howto_table[] =
 	 0x000000ff,		/* src_mask */
 	 0x000000ff,		/* dst_mask */
 	 FALSE),		/* pcrel_offset */
+  /* lo8-part to use in  .byte lo8(sym).  */
+  HOWTO (R_AVR_8_LO8,		/* type */
+	 0,			/* rightshift */
+	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont,/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_AVR_8_LO8",		/* name */
+	 FALSE,			/* partial_inplace */
+	 0xffffff,		/* src_mask */
+	 0xffffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+  /* hi8-part to use in  .byte hi8(sym).  */
+  HOWTO (R_AVR_8_HI8,		/* type */
+	 8,			/* rightshift */
+	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont,/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_AVR_8_HI8",		/* name */
+	 FALSE,			/* partial_inplace */
+	 0xffffff,		/* src_mask */
+	 0xffffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+  /* hlo8-part to use in  .byte hlo8(sym).  */
+  HOWTO (R_AVR_8_HLO8,		/* type */
+	 16,			/* rightshift */
+	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont,/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_AVR_8_HLO8",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0xffffff,		/* src_mask */
+	 0xffffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
 };
 
 /* Map BFD reloc types to AVR ELF reloc types.  */
@@ -554,7 +597,10 @@ static const struct avr_reloc_map avr_reloc_map[] =
   { BFD_RELOC_AVR_LDI,              R_AVR_LDI  },
   { BFD_RELOC_AVR_6,                R_AVR_6    },
   { BFD_RELOC_AVR_6_ADIW,           R_AVR_6_ADIW },
-  { BFD_RELOC_8,                    R_AVR_8 }
+  { BFD_RELOC_8,                    R_AVR_8 },
+  { BFD_RELOC_AVR_8_LO,             R_AVR_8_LO8 },
+  { BFD_RELOC_AVR_8_HI,             R_AVR_8_HI8 },
+  { BFD_RELOC_AVR_8_HLO,            R_AVR_8_HLO8 }
 };
 
 /* Meant to be filled one day with the wrap around address for the
@@ -1189,9 +1235,9 @@ elf32_avr_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 	  name = h->root.root.string;
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -1503,11 +1549,18 @@ elf32_avr_relax_delete_bytes (bfd *abfd,
        bfd_vma symval;
        bfd_vma shrinked_insn_address;
 
+       if (isec->reloc_count == 0)
+	 continue;
+
        shrinked_insn_address = (sec->output_section->vma
                                 + sec->output_offset + addr - count);
 
-       irelend = elf_section_data (isec)->relocs + isec->reloc_count;
-       for (irel = elf_section_data (isec)->relocs;
+       irel = elf_section_data (isec)->relocs;
+       /* PR 12161: Read in the relocs for this section if necessary.  */
+       if (irel == NULL)
+	 irel = _bfd_elf_link_read_relocs (abfd, isec, NULL, NULL, FALSE);
+
+       for (irelend = irel + isec->reloc_count;
             irel < irelend;
             irel++)
          {
@@ -1564,6 +1617,9 @@ elf32_avr_relax_delete_bytes (bfd *abfd,
 	   /* else...Reference symbol is extern.  No need for adjusting
 	      the addend.  */
 	 }
+
+       if (elf_section_data (isec)->relocs == NULL)
+	 free (irelend - isec->reloc_count);
      }
   }
 
@@ -1649,6 +1705,16 @@ elf32_avr_relax_section (bfd *abfd,
   Elf_Internal_Sym *isymbuf = NULL;
   struct elf32_avr_link_hash_table *htab;
 
+  /* If 'shrinkable' is FALSE, do not shrink by deleting bytes while
+     relaxing. Such shrinking can cause issues for the sections such 
+     as .vectors and .jumptables. Instead the unused bytes should be 
+     filled with nop instructions. */
+  bfd_boolean shrinkable = TRUE;
+
+  if (!strcmp (sec->name,".vectors")
+      || !strcmp (sec->name,".jumptables"))
+    shrinkable = FALSE;
+
   if (link_info->relocatable)
     (*link_info->callbacks->einfo)
       (_("%P%F: --relax and -r may not be used together\n"));
@@ -1805,10 +1871,16 @@ elf32_avr_relax_section (bfd *abfd,
             /* Compute the distance from this insn to the branch target.  */
             gap = value - dot;
 
-            /* If the distance is within -4094..+4098 inclusive, then we can
-               relax this jump/call.  +4098 because the call/jump target
-               will be closer after the relaxation.  */
-            if ((int) gap >= -4094 && (int) gap <= 4098)
+            /* Check if the gap falls in the range that can be accommodated
+               in 13bits signed (It is 12bits when encoded, as we deal with
+               word addressing). */
+            if (!shrinkable && ((int) gap >= -4096 && (int) gap <= 4095))
+              distance_short_enough = 1;
+            /* If shrinkable, then we can check for a range of distance which
+               is two bytes farther on both the directions because the call
+               or jump target will be closer by two bytes after the 
+               relaxation. */
+            else if (shrinkable && ((int) gap >= -4094 && (int) gap <= 4097))
               distance_short_enough = 1;
 
             /* Here we handle the wrap-around case.  E.g. for a 16k device
@@ -1882,11 +1954,9 @@ elf32_avr_relax_section (bfd *abfd,
                 irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
                                              R_AVR_13_PCREL);
 
-                /* Check for the vector section. There we don't want to
-                   modify the ordering!  */
-
-                if (!strcmp (sec->name,".vectors")
-                    || !strcmp (sec->name,".jumptables"))
+                /* We should not modify the ordering if 'shrinkable' is
+                   FALSE. */ 
+                if (!shrinkable)
                   {
                     /* Let's insert a nop.  */
                     bfd_put_8 (abfd, 0x00, contents + irel->r_offset + 2);
diff --git a/bfd/elf32-bfin.c b/bfd/elf32-bfin.c
index f88e5d4..6173433 100644
--- a/bfd/elf32-bfin.c
+++ b/bfd/elf32-bfin.c
@@ -1,5 +1,5 @@
 /* ADI Blackfin BFD support for 32-bit ELF.
-   Copyright 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   Copyright 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -34,7 +34,7 @@ bfin_pltpc_reloc (
      bfd *abfd ATTRIBUTE_UNUSED,
      arelent *reloc_entry ATTRIBUTE_UNUSED,
      asymbol *symbol ATTRIBUTE_UNUSED,
-     PTR data ATTRIBUTE_UNUSED,
+     void * data ATTRIBUTE_UNUSED,
      asection *input_section ATTRIBUTE_UNUSED,
      bfd *output_bfd ATTRIBUTE_UNUSED,
      char **error_message ATTRIBUTE_UNUSED)
@@ -48,7 +48,7 @@ static bfd_reloc_status_type
 bfin_pcrel24_reloc (bfd *abfd,
                     arelent *reloc_entry,
                     asymbol *symbol,
-                    PTR data,
+                    void * data,
                     asection *input_section,
                     bfd *output_bfd,
                     char **error_message ATTRIBUTE_UNUSED)
@@ -145,7 +145,7 @@ static bfd_reloc_status_type
 bfin_imm16_reloc (bfd *abfd,
      		  arelent *reloc_entry,
      		  asymbol *symbol,
-     		  PTR data,
+     		  void * data,
      		  asection *input_section,
      		  bfd *output_bfd,
      		  char **error_message ATTRIBUTE_UNUSED)
@@ -217,7 +217,7 @@ static bfd_reloc_status_type
 bfin_byte4_reloc (bfd *abfd,
                   arelent *reloc_entry,
                   asymbol *symbol,
-                  PTR data,
+                  void * data,
                   asection *input_section,
                   bfd *output_bfd,
                   char **error_message ATTRIBUTE_UNUSED)
@@ -283,7 +283,7 @@ static bfd_reloc_status_type
 bfin_bfd_reloc (bfd *abfd,
 		arelent *reloc_entry,
      		asymbol *symbol,
-     		PTR data,
+     		void * data,
      		asection *input_section,
      		bfd *output_bfd,
      		char **error_message ATTRIBUTE_UNUSED)
@@ -1109,7 +1109,7 @@ bfin_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
 /* Given a bfin relocation type, return the howto.  */
 static reloc_howto_type *
 bfin_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
-			    unsigned int r_type)
+			unsigned int r_type)
 {
   if (r_type <= BFIN_RELOC_MAX)
     return &bfin_howto_table [r_type];
@@ -1139,9 +1139,7 @@ elf32_bfin_final_write_processing (bfd *abfd,
 /* Return TRUE if the name is a local label.
    bfin local labels begin with L$.  */
 static bfd_boolean
-bfin_is_local_label_name (
-     bfd *abfd,
-     const char *label)
+bfin_is_local_label_name (bfd *abfd, const char *label)
 {
   if (label[0] == 'L' && label[1] == '$' )
     return TRUE;
@@ -1167,6 +1165,7 @@ bfin_check_relocs (bfd * abfd,
   const Elf_Internal_Rela *rel_end;
   asection *sgot;
   asection *srelgot;
+
   if (info->relocatable)
     return TRUE;
 
@@ -1224,20 +1223,21 @@ bfin_check_relocs (bfd * abfd,
 
 	  if (sgot == NULL)
 	    {
-	      sgot = bfd_get_section_by_name (dynobj, ".got");
+	      sgot = bfd_get_linker_section (dynobj, ".got");
 	      BFD_ASSERT (sgot != NULL);
 	    }
 
 	  if (srelgot == NULL && (h != NULL || info->shared))
 	    {
-	      srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+	      srelgot = bfd_get_linker_section (dynobj, ".rela.got");
 	      if (srelgot == NULL)
 		{
 		  flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
 				    | SEC_IN_MEMORY | SEC_LINKER_CREATED
 				    | SEC_READONLY);
-		  srelgot = bfd_make_section_with_flags (dynobj, ".rela.got",
-							 flags);
+		  srelgot = bfd_make_section_anyway_with_flags (dynobj,
+								".rela.got",
+								flags);
 		  if (srelgot == NULL
 		      || !bfd_set_section_alignment (dynobj, srelgot, 2))
 		    return FALSE;
@@ -1444,9 +1444,9 @@ bfin_relocate_section (bfd * output_bfd,
 				   unresolved_reloc, warned);
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -1483,7 +1483,7 @@ bfin_relocate_section (bfd * output_bfd,
 
 	    if (sgot == NULL)
 	      {
-		sgot = bfd_get_section_by_name (dynobj, ".got");
+		sgot = bfd_get_linker_section (dynobj, ".got");
 		BFD_ASSERT (sgot != NULL);
 	      }
 
@@ -1547,7 +1547,7 @@ bfin_relocate_section (bfd * output_bfd,
 			Elf_Internal_Rela outrel;
 			bfd_byte *loc;
 
-			s = bfd_get_section_by_name (dynobj, ".rela.got");
+			s = bfd_get_linker_section (dynobj, ".rela.got");
 			BFD_ASSERT (s != NULL);
 
 			outrel.r_offset = (sgot->output_section->vma
@@ -1676,8 +1676,8 @@ bfin_gc_sweep_hook (bfd * abfd,
   sym_hashes = elf_sym_hashes (abfd);
   local_got_refcounts = elf_local_got_refcounts (abfd);
 
-  sgot = bfd_get_section_by_name (dynobj, ".got");
-  srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+  sgot = bfd_get_linker_section (dynobj, ".got");
+  srelgot = bfd_get_linker_section (dynobj, ".rela.got");
 
   relend = relocs + sec->reloc_count;
   for (rel = relocs; rel < relend; rel++)
@@ -1996,10 +1996,10 @@ bfinfdpic_relocs_info_find (struct htab *ht,
    for memory allocation purposes.  */
 inline static struct bfinfdpic_relocs_info *
 bfinfdpic_relocs_info_for_global (struct htab *ht,
-				 bfd *abfd,
-				 struct elf_link_hash_entry *h,
-				 bfd_vma addend,
-				 enum insert_option insert)
+				  bfd *abfd,
+				  struct elf_link_hash_entry *h,
+				  bfd_vma addend,
+				  enum insert_option insert)
 {
   struct bfinfdpic_relocs_info entry;
 
@@ -2034,7 +2034,7 @@ bfinfdpic_relocs_info_for_local (struct htab *ht,
 
 inline static void
 bfinfdpic_pic_merge_early_relocs_info (struct bfinfdpic_relocs_info *e2,
-				      struct bfinfdpic_relocs_info const *e1)
+				       struct bfinfdpic_relocs_info const *e1)
 {
   e2->got17m4 |= e1->got17m4;
   e2->gothilo |= e1->gothilo;
@@ -2100,7 +2100,7 @@ _bfinfdpic_add_dyn_reloc (bfd *output_bfd, asection *sreloc, bfd_vma offset,
 
 static bfd_vma
 _bfinfdpic_add_rofixup (bfd *output_bfd, asection *rofixup, bfd_vma offset,
-		       struct bfinfdpic_relocs_info *entry)
+			struct bfinfdpic_relocs_info *entry)
 {
   bfd_vma fixup_offset;
 
@@ -2155,9 +2155,8 @@ _bfinfdpic_emit_got_relocs_plt_entries (struct bfinfdpic_relocs_info *entry,
 					asection *sec,
 					Elf_Internal_Sym *sym,
 					bfd_vma addend)
-
 {
-  bfd_vma fd_lazy_rel_offset = (bfd_vma)-1;
+  bfd_vma fd_lazy_rel_offset = (bfd_vma) -1;
   int dynindx = -1;
 
   if (entry->done)
@@ -2665,9 +2664,9 @@ bfinfdpic_relocate_section (bfd * output_bfd,
 	  osec = sec;
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -3387,8 +3386,8 @@ _bfin_create_got_section (bfd *abfd, struct bfd_link_info *info)
   int ptralign;
 
   /* This function may be called more than once.  */
-  s = bfd_get_section_by_name (abfd, ".got");
-  if (s != NULL && (s->flags & SEC_LINKER_CREATED) != 0)
+  s = bfd_get_linker_section (abfd, ".got");
+  if (s != NULL)
     return TRUE;
 
   /* Machine specific: although pointers are 32-bits wide, we want the
@@ -3401,14 +3400,14 @@ _bfin_create_got_section (bfd *abfd, struct bfd_link_info *info)
 	   | SEC_LINKER_CREATED);
   pltflags = flags;
 
-  s = bfd_make_section_with_flags (abfd, ".got", flags);
+  s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
   if (s == NULL
       || !bfd_set_section_alignment (abfd, s, ptralign))
     return FALSE;
 
   if (bed->want_got_plt)
     {
-      s = bfd_make_section_with_flags (abfd, ".got.plt", flags);
+      s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags);
       if (s == NULL
 	  || !bfd_set_section_alignment (abfd, s, ptralign))
 	return FALSE;
@@ -3446,8 +3445,8 @@ _bfin_create_got_section (bfd *abfd, struct bfd_link_info *info)
       if (! bfinfdpic_relocs_info (info))
 	return FALSE;
 
-      s = bfd_make_section_with_flags (abfd, ".rel.got",
-				       (flags | SEC_READONLY));
+      s = bfd_make_section_anyway_with_flags (abfd, ".rel.got",
+					      (flags | SEC_READONLY));
       if (s == NULL
 	  || ! bfd_set_section_alignment (abfd, s, 2))
 	return FALSE;
@@ -3455,8 +3454,8 @@ _bfin_create_got_section (bfd *abfd, struct bfd_link_info *info)
       bfinfdpic_gotrel_section (info) = s;
 
       /* Machine-specific.  */
-      s = bfd_make_section_with_flags (abfd, ".rofixup",
-				       (flags | SEC_READONLY));
+      s = bfd_make_section_anyway_with_flags (abfd, ".rofixup",
+					      (flags | SEC_READONLY));
       if (s == NULL
 	  || ! bfd_set_section_alignment (abfd, s, 2))
 	return FALSE;
@@ -3470,7 +3469,7 @@ _bfin_create_got_section (bfd *abfd, struct bfd_link_info *info)
   if (bed->plt_readonly)
     pltflags |= SEC_READONLY;
 
-  s = bfd_make_section_with_flags (abfd, ".plt", pltflags);
+  s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
     return FALSE;
@@ -3497,7 +3496,8 @@ _bfin_create_got_section (bfd *abfd, struct bfd_link_info *info)
     }
 
   /* Blackfin-specific: we want rel relocations for the plt.  */
-  s = bfd_make_section_with_flags (abfd, ".rel.plt", flags | SEC_READONLY);
+  s = bfd_make_section_anyway_with_flags (abfd, ".rel.plt",
+					  flags | SEC_READONLY);
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
     return FALSE;
@@ -3543,27 +3543,27 @@ elf32_bfinfdpic_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 	 image and use a R_*_COPY reloc to tell the dynamic linker to
 	 initialize them at run time.  The linker script puts the .dynbss
 	 section into the .bss section of the final image.  */
-      s = bfd_make_section_with_flags (abfd, ".dynbss",
-				       SEC_ALLOC | SEC_LINKER_CREATED);
+      s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
+					      SEC_ALLOC | SEC_LINKER_CREATED);
       if (s == NULL)
 	return FALSE;
 
       /* The .rel[a].bss section holds copy relocs.  This section is not
-     normally needed.  We need to create it here, though, so that the
-     linker will map it to an output section.  We can't just create it
-     only if we need it, because we will not know whether we need it
-     until we have seen all the input files, and the first time the
-     main linker code calls BFD after examining all the input files
-     (size_dynamic_sections) the input sections have already been
-     mapped to the output sections.  If the section turns out not to
-     be needed, we can discard it later.  We will never need this
-     section when generating a shared object, since they do not use
-     copy relocs.  */
+	 normally needed.  We need to create it here, though, so that the
+	 linker will map it to an output section.  We can't just create it
+	 only if we need it, because we will not know whether we need it
+	 until we have seen all the input files, and the first time the
+	 main linker code calls BFD after examining all the input files
+	 (size_dynamic_sections) the input sections have already been
+	 mapped to the output sections.  If the section turns out not to
+	 be needed, we can discard it later.  We will never need this
+	 section when generating a shared object, since they do not use
+	 copy relocs.  */
       if (! info->shared)
 	{
-	  s = bfd_make_section_with_flags (abfd,
-					   ".rela.bss",
-					   flags | SEC_READONLY);
+	  s = bfd_make_section_anyway_with_flags (abfd,
+						  ".rela.bss",
+						  flags | SEC_READONLY);
 	  if (s == NULL
 	      || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
 	    return FALSE;
@@ -4246,7 +4246,7 @@ elf32_bfinfdpic_size_dynamic_sections (bfd *output_bfd,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  BFD_ASSERT (s != NULL);
 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
 	  s->contents = (bfd_byte *) ELF_DYNAMIC_INTERPRETER;
@@ -4296,11 +4296,11 @@ elf32_bfinfdpic_size_dynamic_sections (bfd *output_bfd,
 	  return FALSE;
     }
 
-  s = bfd_get_section_by_name (dynobj, ".dynbss");
+  s = bfd_get_linker_section (dynobj, ".dynbss");
   if (s && s->size == 0)
     s->flags |= SEC_EXCLUDE;
 
-  s = bfd_get_section_by_name (dynobj, ".rela.bss");
+  s = bfd_get_linker_section (dynobj, ".rela.bss");
   if (s && s->size == 0)
     s->flags |= SEC_EXCLUDE;
 
@@ -4348,9 +4348,8 @@ elf32_bfinfdpic_always_size_sections (bfd *output_bfd,
    subtract it from the relocation or fixup count.  */
 static bfd_boolean
 _bfinfdpic_check_discarded_relocs (bfd *abfd, asection *sec,
-				  struct bfd_link_info *info,
-				  
-				  bfd_boolean *changed)
+				   struct bfd_link_info *info,
+				   bfd_boolean *changed)
 {
   Elf_Internal_Shdr *symtab_hdr;
   struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
@@ -4433,7 +4432,7 @@ bfinfdpic_elf_discard_info (bfd *ibfd,
 
   /* Account for relaxation of .eh_frame section.  */
   for (s = ibfd->sections; s; s = s->next)
-    if (s->sec_info_type == ELF_INFO_TYPE_EH_FRAME)
+    if (s->sec_info_type == SEC_INFO_TYPE_EH_FRAME)
       {
 	if (!_bfinfdpic_check_discarded_relocs (ibfd, s, info, &changed))
 	  return FALSE;
@@ -4546,7 +4545,7 @@ elf32_bfinfdpic_finish_dynamic_sections (bfd *output_bfd,
 		      * sizeof (Elf32_External_Rel)));
     }
 
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
     {
@@ -4598,9 +4597,8 @@ elf32_bfinfdpic_finish_dynamic_sections (bfd *output_bfd,
    regular object.  */
 
 static bfd_boolean
-elf32_bfinfdpic_adjust_dynamic_symbol
-(struct bfd_link_info *info,
- struct elf_link_hash_entry *h)
+elf32_bfinfdpic_adjust_dynamic_symbol (struct bfd_link_info *info,
+				       struct elf_link_hash_entry *h)
 {
   bfd * dynobj;
 
@@ -5063,7 +5061,7 @@ elf32_bfinfdpic_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
 
 /* Display the flags field.  */
 static bfd_boolean
-elf32_bfin_print_private_bfd_data (bfd * abfd, PTR ptr)
+elf32_bfin_print_private_bfd_data (bfd * abfd, void * ptr)
 {
   FILE *file = (FILE *) ptr;
   flagword flags;
@@ -5211,14 +5209,14 @@ bfin_link_hash_table_create (bfd * abfd)
 
 static bfd_boolean
 bfin_finish_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
-				  struct bfd_link_info *info)
+			      struct bfd_link_info *info)
 {
   bfd *dynobj;
   asection *sdyn;
 
   dynobj = elf_hash_table (info)->dynobj;
 
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
     {
@@ -5245,9 +5243,9 @@ bfin_finish_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
 
 static bfd_boolean
 bfin_finish_dynamic_symbol (bfd * output_bfd,
-				struct bfd_link_info *info,
-				struct elf_link_hash_entry *h,
-				Elf_Internal_Sym * sym)
+			    struct bfd_link_info *info,
+			    struct elf_link_hash_entry *h,
+			    Elf_Internal_Sym * sym)
 {
   bfd *dynobj;
 
@@ -5263,8 +5261,8 @@ bfin_finish_dynamic_symbol (bfd * output_bfd,
       /* 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");
+      sgot = bfd_get_linker_section (dynobj, ".got");
+      srela = bfd_get_linker_section (dynobj, ".rela.got");
       BFD_ASSERT (sgot != NULL && srela != NULL);
 
       rela.r_offset = (sgot->output_section->vma
@@ -5322,7 +5320,7 @@ bfin_finish_dynamic_symbol (bfd * output_bfd,
 
 static bfd_boolean
 bfin_adjust_dynamic_symbol (struct bfd_link_info *info,
-				struct elf_link_hash_entry *h)
+			    struct elf_link_hash_entry *h)
 {
   bfd *dynobj;
   asection *s;
@@ -5376,7 +5374,7 @@ bfin_adjust_dynamic_symbol (struct bfd_link_info *info,
      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");
+  s = bfd_get_linker_section (dynobj, ".dynbss");
   BFD_ASSERT (s != NULL);
 
   /* We must generate a R_68K_COPY reloc to tell the dynamic linker to
@@ -5387,7 +5385,7 @@ bfin_adjust_dynamic_symbol (struct bfd_link_info *info,
     {
       asection *srel;
 
-      srel = bfd_get_section_by_name (dynobj, ".rela.bss");
+      srel = bfd_get_linker_section (dynobj, ".rela.bss");
       BFD_ASSERT (srel != NULL);
       srel->size += sizeof (Elf32_External_Rela);
       h->needs_copy = 1;
@@ -5450,7 +5448,7 @@ struct bfin_pcrel_relocs_copied
    case.  */
 
 static bfd_boolean
-bfin_discard_copies (struct elf_link_hash_entry *h, PTR inf)
+bfin_discard_copies (struct elf_link_hash_entry *h, void * inf)
 {
   struct bfd_link_info *info = (struct bfd_link_info *) inf;
   struct bfin_pcrel_relocs_copied *s;
@@ -5481,7 +5479,7 @@ bfin_discard_copies (struct elf_link_hash_entry *h, PTR inf)
 
 static bfd_boolean
 bfin_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
-				struct bfd_link_info *info)
+			    struct bfd_link_info *info)
 {
   bfd *dynobj;
   asection *s;
@@ -5495,7 +5493,7 @@ bfin_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  BFD_ASSERT (s != NULL);
 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
@@ -5508,7 +5506,7 @@ bfin_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
          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");
+      s = bfd_get_linker_section (dynobj, ".rela.got");
       if (s != NULL)
 	s->size = 0;
     }
@@ -5521,7 +5519,7 @@ bfin_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
      will not fill them in in the relocate_section routine.  */
   if (info->shared)
     elf_link_hash_traverse (elf_hash_table (info),
-			    bfin_discard_copies, (PTR) info);
+			    bfin_discard_copies, info);
 
   /* The check_relocs and adjust_dynamic_symbol entry points have
      determined the sizes of the various dynamic sections.  Allocate
@@ -5632,16 +5630,12 @@ bfin_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
    after the add_symbols entry point has been called for all the
    objects, and before the final_link entry point is called.  */
 
-bfd_boolean bfd_bfin_elf32_create_embedded_relocs
-  PARAMS ((bfd *, struct bfd_link_info *, asection *, asection *, char **));
-
 bfd_boolean
-bfd_bfin_elf32_create_embedded_relocs (
-     bfd *abfd,
-     struct bfd_link_info *info,
-     asection *datasec,
-     asection *relsec,
-     char **errmsg)
+bfd_bfin_elf32_create_embedded_relocs (bfd *abfd,
+				       struct bfd_link_info *info,
+				       asection *datasec,
+				       asection *relsec,
+				       char **errmsg)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Sym *isymbuf = NULL;
@@ -5661,7 +5655,7 @@ bfd_bfin_elf32_create_embedded_relocs (
 
   /* Get a copy of the native relocations.  */
   internal_relocs = (_bfd_elf_link_read_relocs
-		     (abfd, datasec, (PTR) NULL, (Elf_Internal_Rela *) NULL,
+		     (abfd, datasec, NULL, (Elf_Internal_Rela *) NULL,
 		      info->keep_memory));
   if (internal_relocs == NULL)
     goto error_return;
diff --git a/bfd/elf32-cr16.c b/bfd/elf32-cr16.c
index 0118131..97fa569 100644
--- a/bfd/elf32-cr16.c
+++ b/bfd/elf32-cr16.c
@@ -1,5 +1,5 @@
 /* BFD back-end for National Semiconductor's CR16 ELF
-   Copyright 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+   Copyright 2007, 2008, 2009, 2010, 2012 Free Software Foundation, Inc.
    Written by M R Swami Reddy.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -585,7 +585,7 @@ _bfd_cr16_elf_create_got_section (bfd * abfd, struct bfd_link_info * info)
   int ptralign;
 
   /* This function may be called more than once.  */
-  if (bfd_get_section_by_name (abfd, ".got") != NULL)
+  if (bfd_get_linker_section (abfd, ".got") != NULL)
     return TRUE;
 
   switch (bed->s->arch_size)
@@ -606,14 +606,14 @@ _bfd_cr16_elf_create_got_section (bfd * abfd, struct bfd_link_info * info)
   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
            | SEC_LINKER_CREATED);
 
-  s = bfd_make_section_with_flags (abfd, ".got", flags);
+  s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, ptralign))
     return FALSE;
 
   if (bed->want_got_plt)
     {
-      s = bfd_make_section_with_flags (abfd, ".got.plt", flags);
+      s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags);
       if (s == NULL
           || ! bfd_set_section_alignment (abfd, s, ptralign))
         return FALSE;
@@ -752,24 +752,22 @@ cr16_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
 
           if (sgot == NULL)
             {
-              sgot = bfd_get_section_by_name (dynobj, ".got");
+              sgot = bfd_get_linker_section (dynobj, ".got");
               BFD_ASSERT (sgot != NULL);
             }
 
           if (srelgot == NULL
               && (h != NULL || info->executable))
             {
-              srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+              srelgot = bfd_get_linker_section (dynobj, ".rela.got");
               if (srelgot == NULL)
-                {
-                  srelgot = bfd_make_section_with_flags (dynobj,
-                                                         ".rela.got",
-                                                         (SEC_ALLOC
-                                                          | SEC_LOAD
-                                                          | SEC_HAS_CONTENTS
-                                                          | SEC_IN_MEMORY
-                                                          | SEC_LINKER_CREATED
-                                                          | SEC_READONLY));
+                { 
+		  flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
+				    | SEC_IN_MEMORY | SEC_LINKER_CREATED
+				    | SEC_READONLY);
+		  srelgot = bfd_make_section_anyway_with_flags (dynobj,
+								".rela.got",
+								flags);
                   if (srelgot == NULL
                       || ! bfd_set_section_alignment (dynobj, srelgot, 2))
                     goto fail;
@@ -1047,7 +1045,7 @@ cr16_elf_final_link_relocate (reloc_howto_type *howto,
           }
         else if (r_type == R_CR16_GOT_REGREL20) 
           {
-            asection * sgot = bfd_get_section_by_name (dynobj, ".got");
+            asection * sgot = bfd_get_linker_section (dynobj, ".got");
 
             if (h != NULL)
               {
@@ -1096,7 +1094,7 @@ cr16_elf_final_link_relocate (reloc_howto_type *howto,
         else if (r_type == R_CR16_GOTC_REGREL20)
           {
              asection * sgot;
-             sgot = bfd_get_section_by_name (dynobj, ".got");
+             sgot = bfd_get_linker_section (dynobj, ".got");
 
              if (h != NULL)
                {
@@ -1431,9 +1429,9 @@ elf32_cr16_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
                                    unresolved_reloc, warned);
         }
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
         continue;
@@ -2278,10 +2276,10 @@ _bfd_cr16_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
            | SEC_LINKER_CREATED);
 
-  s = bfd_make_section_with_flags (abfd,
-                                   (bed->default_use_rela_p
-                                    ? ".rela.plt" : ".rel.plt"),
-                                   flags | SEC_READONLY);
+  s = bfd_make_section_anyway_with_flags (abfd,
+					  (bed->default_use_rela_p
+					   ? ".rela.plt" : ".rel.plt"),
+					  flags | SEC_READONLY);
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, ptralign))
     return FALSE;
@@ -2289,32 +2287,6 @@ _bfd_cr16_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
   if (! _bfd_cr16_elf_create_got_section (abfd, info))
     return FALSE;
 
-  {
-    const char * secname;
-    char *       relname;
-    flagword     secflags;
-    asection *   sec;
-
-    for (sec = abfd->sections; sec; sec = sec->next)
-      {
-        secflags = bfd_get_section_flags (abfd, sec);
-        if ((secflags & (SEC_DATA | SEC_LINKER_CREATED))
-            || ((secflags & SEC_HAS_CONTENTS) != SEC_HAS_CONTENTS))
-          continue;
-
-        secname = bfd_get_section_name (abfd, sec);
-        relname = (char *) bfd_malloc (strlen (secname) + 6);
-        strcpy (relname, ".rela");
-        strcat (relname, secname);
-
-        s = bfd_make_section_with_flags (abfd, relname,
-                                         flags | SEC_READONLY);
-        if (s == NULL
-            || ! bfd_set_section_alignment (abfd, s, ptralign))
-          return FALSE;
-      }
-  }
-
   if (bed->want_dynbss)
     {
       /* The .dynbss section is a place to put symbols which are defined
@@ -2323,8 +2295,8 @@ _bfd_cr16_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
          image and use a R_*_COPY reloc to tell the dynamic linker to
          initialize them at run time.  The linker script puts the .dynbss
          section into the .bss section of the final image.  */
-      s = bfd_make_section_with_flags (abfd, ".dynbss",
-                                       SEC_ALLOC | SEC_LINKER_CREATED);
+      s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
+					      SEC_ALLOC | SEC_LINKER_CREATED);
       if (s == NULL)
         return FALSE;
 
@@ -2341,10 +2313,10 @@ _bfd_cr16_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
          copy relocs.  */
       if (! info->executable)
         {
-          s = bfd_make_section_with_flags (abfd,
-                                           (bed->default_use_rela_p
-                                            ? ".rela.bss" : ".rel.bss"),
-                                           flags | SEC_READONLY);
+          s = bfd_make_section_anyway_with_flags (abfd,
+						  (bed->default_use_rela_p
+						   ? ".rela.bss" : ".rel.bss"),
+						  flags | SEC_READONLY);
           if (s == NULL
               || ! bfd_set_section_alignment (abfd, s, ptralign))
             return FALSE;
@@ -2406,13 +2378,13 @@ _bfd_cr16_elf_adjust_dynamic_symbol (struct bfd_link_info * info,
       /* 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");
+      s = bfd_get_linker_section (dynobj, ".got.plt");
       BFD_ASSERT (s != NULL);
       s->size += 4;
 
       /* We also need to make an entry in the .rela.plt section.  */
 
-      s = bfd_get_section_by_name (dynobj, ".rela.plt");
+      s = bfd_get_linker_section (dynobj, ".rela.plt");
       BFD_ASSERT (s != NULL);
       s->size += sizeof (Elf32_External_Rela);
 
@@ -2446,13 +2418,6 @@ _bfd_cr16_elf_adjust_dynamic_symbol (struct bfd_link_info * info,
   if (!h->non_got_ref)
     return TRUE;
 
-  if (h->size == 0)
-    {
-      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
-                             h->root.root.string);
-      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
@@ -2463,18 +2428,18 @@ _bfd_cr16_elf_adjust_dynamic_symbol (struct bfd_link_info * info,
      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");
+  s = bfd_get_linker_section (dynobj, ".dynbss");
   BFD_ASSERT (s != NULL);
 
   /* We must generate a R_CR16_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
      .rela.bss section we are going to use.  */
-  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
       asection * srel;
 
-      srel = bfd_get_section_by_name (dynobj, ".rela.bss");
+      srel = bfd_get_linker_section (dynobj, ".rela.bss");
       BFD_ASSERT (srel != NULL);
       srel->size += sizeof (Elf32_External_Rela);
       h->needs_copy = 1;
@@ -2504,7 +2469,7 @@ _bfd_cr16_elf_size_dynamic_sections (bfd * output_bfd,
       if (info->executable)
         {
 #if 0
-          s = bfd_get_section_by_name (dynobj, ".interp");
+          s = bfd_get_linker_section (dynobj, ".interp");
           BFD_ASSERT (s != NULL);
           s->size = sizeof ELF_DYNAMIC_INTERPRETER;
           s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
@@ -2518,7 +2483,7 @@ _bfd_cr16_elf_size_dynamic_sections (bfd * output_bfd,
          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");
+      s = bfd_get_linker_section (dynobj, ".rela.got");
       if (s != NULL)
         s->size = 0;
     }
@@ -2673,8 +2638,8 @@ _bfd_cr16_elf_finish_dynamic_symbol (bfd * output_bfd,
 
       /* This symbol has an entry in the global offset table.  Set it up.  */
 
-      sgot = bfd_get_section_by_name (dynobj, ".got");
-      srel = bfd_get_section_by_name (dynobj, ".rela.got");
+      sgot = bfd_get_linker_section (dynobj, ".got");
+      srel = bfd_get_linker_section (dynobj, ".rela.got");
       BFD_ASSERT (sgot != NULL && srel != NULL);
 
       rel.r_offset = (sgot->output_section->vma
@@ -2718,8 +2683,7 @@ _bfd_cr16_elf_finish_dynamic_symbol (bfd * output_bfd,
                   && (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");
+      s = bfd_get_linker_section (dynobj, ".rela.bss");
       BFD_ASSERT (s != NULL);
 
       rel.r_offset = (h->root.u.def.value
@@ -2753,9 +2717,9 @@ _bfd_cr16_elf_finish_dynamic_sections (bfd * output_bfd,
 
   dynobj = elf_hash_table (info)->dynobj;
 
-  sgot = bfd_get_section_by_name (dynobj, ".got.plt");
+  sgot = bfd_get_linker_section (dynobj, ".got.plt");
   BFD_ASSERT (sgot != NULL);
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
     {
diff --git a/bfd/elf32-cr16c.c b/bfd/elf32-cr16c.c
index ca2d7cb..ea22701 100644
--- a/bfd/elf32-cr16c.c
+++ b/bfd/elf32-cr16c.c
@@ -1,5 +1,5 @@
 /* BFD back-end for National Semiconductor's CR16C ELF
-   Copyright 2004, 2005, 2006, 2007, 2009, 2010
+   Copyright 2004, 2005, 2006, 2007, 2009, 2010, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -723,9 +723,9 @@ elf32_cr16c_relocate_section (bfd *output_bfd,
 				   unresolved_reloc, warned);
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	{
diff --git a/bfd/elf32-cris.c b/bfd/elf32-cris.c
index 563e2c0..c9316ee 100644
--- a/bfd/elf32-cris.c
+++ b/bfd/elf32-cris.c
@@ -1,6 +1,6 @@
 /* CRIS-specific support for 32-bit ELF.
    Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
-   2010, 2011 Free Software Foundation, Inc.
+   2010, 2011, 2012 Free Software Foundation, Inc.
    Contributed by Axis Communications AB.
    Written by Hans-Peter Nilsson, based on elf32-fr30.c
    PIC and shlib bits based primarily on elf32-m68k.c and elf32-i386.c.
@@ -29,73 +29,13 @@
 #include "elf/cris.h"
 #include <limits.h>
 
-/* Forward declarations.  */
-static reloc_howto_type * cris_reloc_type_lookup
-  PARAMS ((bfd *abfd, bfd_reloc_code_real_type code));
-
-static void cris_info_to_howto_rela
-  PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
-
-static bfd_reloc_status_type cris_elf_pcrel_reloc
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
-
-static bfd_boolean cris_elf_grok_prstatus
-  PARAMS ((bfd *abfd, Elf_Internal_Note *note));
-
-static bfd_boolean cris_elf_grok_psinfo
-  PARAMS ((bfd *abfd, Elf_Internal_Note *note));
-
-static bfd_boolean cris_elf_relocate_section
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
-	   Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
-
-static bfd_reloc_status_type cris_final_link_relocate
-  PARAMS ((reloc_howto_type *, bfd *, asection *, bfd_byte *,
-	   Elf_Internal_Rela *, bfd_vma));
-
-static bfd_boolean cris_elf_object_p PARAMS ((bfd *));
-
-static void cris_elf_final_write_processing PARAMS ((bfd *, bfd_boolean));
-
-static bfd_boolean cris_elf_set_mach_from_flags
-  PARAMS ((bfd *, unsigned long int));
-
-static bfd_boolean cris_elf_print_private_bfd_data PARAMS ((bfd *, PTR));
-
-static bfd_boolean cris_elf_merge_private_bfd_data PARAMS ((bfd *, bfd *));
-static bfd_boolean cris_elf_copy_private_bfd_data PARAMS ((bfd *, bfd *));
-
-struct elf_cris_link_hash_entry;
-static bfd_boolean elf_cris_discard_excess_dso_dynamics
-  PARAMS ((struct elf_cris_link_hash_entry *, PTR));
-static bfd_boolean elf_cris_discard_excess_program_dynamics
-  PARAMS ((struct elf_cris_link_hash_entry *, PTR));
-static bfd_boolean elf_cris_adjust_gotplt_to_got
-  PARAMS ((struct elf_cris_link_hash_entry *, PTR));
-static bfd_boolean elf_cris_try_fold_plt_to_got
-  PARAMS ((struct elf_cris_link_hash_entry *, PTR));
-static struct bfd_hash_entry *elf_cris_link_hash_newfunc
-  PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
-static struct bfd_link_hash_table *elf_cris_link_hash_table_create
-  PARAMS ((bfd *));
-static bfd_boolean elf_cris_adjust_dynamic_symbol
-  PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *));
-static bfd_boolean cris_elf_check_relocs
-  PARAMS ((bfd *, struct bfd_link_info *, asection *,
-	   const Elf_Internal_Rela *));
-
-static bfd_boolean elf_cris_size_dynamic_sections
-  PARAMS ((bfd *, struct bfd_link_info *));
-static bfd_boolean elf_cris_finish_dynamic_symbol
-  PARAMS ((bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
-	   Elf_Internal_Sym *));
-static bfd_boolean elf_cris_finish_dynamic_sections
-  PARAMS ((bfd *, struct bfd_link_info *));
-static void elf_cris_hide_symbol
-  PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *, bfd_boolean));
-static enum elf_reloc_type_class elf_cris_reloc_type_class
-  PARAMS ((const Elf_Internal_Rela *));
+bfd_reloc_status_type
+cris_elf_pcrel_reloc (bfd *, arelent *, asymbol *, void *,
+		      asection *, bfd *, char **);
+static bfd_boolean
+cris_elf_set_mach_from_flags (bfd *, unsigned long);
 
+/* Forward declarations.  */
 static reloc_howto_type cris_elf_howto_table [] =
 {
   /* This reloc does nothing.  */
@@ -485,9 +425,8 @@ static const struct cris_reloc_map cris_reloc_map [] =
 };
 
 static reloc_howto_type *
-cris_reloc_type_lookup (abfd, code)
-     bfd * abfd ATTRIBUTE_UNUSED;
-     bfd_reloc_code_real_type code;
+cris_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
+			bfd_reloc_code_real_type code)
 {
   unsigned int i;
 
@@ -516,10 +455,9 @@ cris_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
 /* Set the howto pointer for an CRIS ELF reloc.  */
 
 static void
-cris_info_to_howto_rela (abfd, cache_ptr, dst)
-     bfd * abfd ATTRIBUTE_UNUSED;
-     arelent * cache_ptr;
-     Elf_Internal_Rela * dst;
+cris_info_to_howto_rela (bfd * abfd ATTRIBUTE_UNUSED,
+			 arelent * cache_ptr,
+			 Elf_Internal_Rela * dst)
 {
   enum elf_cris_reloc_type r_type;
 
@@ -529,15 +467,13 @@ cris_info_to_howto_rela (abfd, cache_ptr, dst)
 }
 
 bfd_reloc_status_type
-cris_elf_pcrel_reloc (abfd, reloc_entry, symbol, data, input_section,
-		      output_bfd, error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry;
-     asymbol *symbol;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+cris_elf_pcrel_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+		      arelent *reloc_entry,
+		      asymbol *symbol,
+		      void * data ATTRIBUTE_UNUSED,
+		      asection *input_section,
+		      bfd *output_bfd,
+		      char **error_message ATTRIBUTE_UNUSED)
 {
   /* By default (using only bfd_elf_generic_reloc when linking to
      non-ELF formats) PC-relative relocs are relative to the beginning
@@ -562,9 +498,7 @@ cris_elf_pcrel_reloc (abfd, reloc_entry, symbol, data, input_section,
    changes, while still keeping Linux/CRIS and Linux/CRISv32 code apart.  */
 
 static bfd_boolean
-cris_elf_grok_prstatus (abfd, note)
-     bfd *abfd;
-     Elf_Internal_Note *note;
+cris_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
 {
   int offset;
   size_t size;
@@ -614,9 +548,7 @@ cris_elf_grok_prstatus (abfd, note)
 }
 
 static bfd_boolean
-cris_elf_grok_psinfo (abfd, note)
-     bfd *abfd;
-     Elf_Internal_Note *note;
+cris_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 {
   if (bfd_get_mach (abfd) == bfd_mach_cris_v32)
     switch (note->descsz)
@@ -848,6 +780,13 @@ struct elf_cris_link_hash_entry
   bfd_signed_vma dtp_refcount;
 };
 
+static bfd_boolean
+elf_cris_discard_excess_dso_dynamics (struct elf_cris_link_hash_entry *,
+				      void * );
+static bfd_boolean
+elf_cris_discard_excess_program_dynamics (struct elf_cris_link_hash_entry *,
+					  void *);
+
 /* The local_got_refcounts and local_got_offsets are a multiple of
    LSNUM in size, namely LGOT_ALLOC_NELTS_FOR(LSNUM) (plus one for the
    refcount for GOT itself, see code), with the summary / group offset
@@ -972,14 +911,12 @@ elf_cris_link_hash_table_create (bfd *abfd)
    routines, with a few tweaks.  */
 
 static bfd_reloc_status_type
-cris_final_link_relocate (howto, input_bfd, input_section, contents, rel,
-			  relocation)
-     reloc_howto_type *  howto;
-     bfd *               input_bfd;
-     asection *          input_section;
-     bfd_byte *          contents;
-     Elf_Internal_Rela * rel;
-     bfd_vma             relocation;
+cris_final_link_relocate (reloc_howto_type *  howto,
+			  bfd *               input_bfd,
+			  asection *          input_section,
+			  bfd_byte *          contents,
+			  Elf_Internal_Rela * rel,
+			  bfd_vma             relocation)
 {
   bfd_reloc_status_type r;
   enum elf_cris_reloc_type r_type = ELF32_R_TYPE (rel->r_info);
@@ -1065,8 +1002,8 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 
   if (dynobj != NULL)
     {
-      splt = bfd_get_section_by_name (dynobj, ".plt");
-      sgot = bfd_get_section_by_name (dynobj, ".got");
+      splt = bfd_get_linker_section (dynobj, ".plt");
+      sgot = bfd_get_linker_section (dynobj, ".got");
     }
 
   for (rel = relocs; rel < relend; rel ++)
@@ -1184,9 +1121,9 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 	    }
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -1204,7 +1141,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 	      && ((struct elf_cris_link_hash_entry *) h)->gotplt_offset != 0)
 	    {
 	      asection *sgotplt
-		= bfd_get_section_by_name (dynobj, ".got.plt");
+		= bfd_get_linker_section (dynobj, ".got.plt");
 	      bfd_vma got_offset;
 
 	      BFD_ASSERT (h->dynindx != -1);
@@ -1336,7 +1273,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 
 			if (srelgot == NULL)
 			  srelgot
-			    = bfd_get_section_by_name (dynobj, ".rela.got");
+			    = bfd_get_linker_section (dynobj, ".rela.got");
 			BFD_ASSERT (srelgot != NULL);
 
 			outrel.r_offset = (sgot->output_section->vma
@@ -1652,7 +1589,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 	  if (htab->dtpmod_refcount > 0
 	      && (input_section->flags & SEC_ALLOC) != 0)
 	    {
-	      asection *sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
+	      asection *sgotplt = bfd_get_linker_section (dynobj, ".got.plt");
 	      BFD_ASSERT (sgotplt != NULL);
 
 	      if (info->shared)
@@ -1661,7 +1598,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 		  bfd_byte *loc;
 
 		  if (srelgot == NULL)
-		    srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+		    srelgot = bfd_get_linker_section (dynobj, ".rela.got");
 		  BFD_ASSERT (srelgot != NULL);
 		  loc = srelgot->contents;
 		  loc += srelgot->reloc_count++ * sizeof (Elf32_External_Rela);
@@ -1805,7 +1742,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 		  bfd_put_32 (output_bfd, 0, sgot->contents + off + 4);
 
 		  if (srelgot == NULL)
-		    srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+		    srelgot = bfd_get_linker_section (dynobj, ".rela.got");
 		  BFD_ASSERT (srelgot != NULL);
 
 		  if (h != NULL && h->dynindx != -1)
@@ -1877,7 +1814,8 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 	      return FALSE;
 	    }
 
-	  if (!info->shared && (h == NULL || h->def_regular))
+	  if (!info->shared
+	      && (h == NULL || h->def_regular || ELF_COMMON_DEF_P (h)))
 	    {
 	      /* Known contents of the GOT.  */
 	      bfd_vma off;
@@ -1936,7 +1874,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 		    local_got_offsets[r_symndx] |= 1;
 
 		  if (srelgot == NULL)
-		    srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+		    srelgot = bfd_get_linker_section (dynobj, ".rela.got");
 		  BFD_ASSERT (srelgot != NULL);
 
 		  if (h != NULL && h->dynindx != -1)
@@ -2192,9 +2130,9 @@ elf_cris_finish_dynamic_symbol (bfd *output_bfd,
 
       BFD_ASSERT (h->dynindx != -1);
 
-      splt = bfd_get_section_by_name (dynobj, ".plt");
-      sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
-      srela = bfd_get_section_by_name (dynobj, ".rela.plt");
+      splt = bfd_get_linker_section (dynobj, ".plt");
+      sgotplt = bfd_get_linker_section (dynobj, ".got.plt");
+      srela = bfd_get_linker_section (dynobj, ".rela.plt");
       BFD_ASSERT (splt != NULL && sgotplt != NULL
 		  && (! has_gotplt || srela != NULL));
 
@@ -2291,8 +2229,8 @@ elf_cris_finish_dynamic_symbol (bfd *output_bfd,
 
       /* 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");
+      sgot = bfd_get_linker_section (dynobj, ".got");
+      srela = bfd_get_linker_section (dynobj, ".rela.got");
       BFD_ASSERT (sgot != NULL && srela != NULL);
 
       rela.r_offset = (sgot->output_section->vma
@@ -2337,8 +2275,7 @@ elf_cris_finish_dynamic_symbol (bfd *output_bfd,
 		  && (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");
+      s = bfd_get_linker_section (dynobj, ".rela.bss");
       BFD_ASSERT (s != NULL);
 
       rela.r_offset = (h->root.u.def.value
@@ -2363,9 +2300,8 @@ elf_cris_finish_dynamic_symbol (bfd *output_bfd,
    computed.  */
 
 static bfd_boolean
-elf_cris_finish_dynamic_sections (output_bfd, info)
-     bfd *output_bfd;
-     struct bfd_link_info *info;
+elf_cris_finish_dynamic_sections (bfd *output_bfd,
+				  struct bfd_link_info *info)
 {
   bfd *dynobj;
   asection *sgot;
@@ -2373,16 +2309,16 @@ elf_cris_finish_dynamic_sections (output_bfd, info)
 
   dynobj = elf_hash_table (info)->dynobj;
 
-  sgot = bfd_get_section_by_name (dynobj, ".got.plt");
+  sgot = bfd_get_linker_section (dynobj, ".got.plt");
   BFD_ASSERT (sgot != NULL);
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
     {
       asection *splt;
       Elf32_External_Dyn *dyncon, *dynconend;
 
-      splt = bfd_get_section_by_name (dynobj, ".plt");
+      splt = bfd_get_linker_section (dynobj, ".plt");
       BFD_ASSERT (splt != NULL && sdyn != NULL);
 
       dyncon = (Elf32_External_Dyn *) sdyn->contents;
@@ -2560,8 +2496,8 @@ cris_elf_gc_sweep_hook (bfd *abfd,
   sym_hashes = elf_sym_hashes (abfd);
   local_got_refcounts = elf_local_got_refcounts (abfd);
 
-  sgot = bfd_get_section_by_name (dynobj, ".got");
-  srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+  sgot = bfd_get_linker_section (dynobj, ".got");
+  srelgot = bfd_get_linker_section (dynobj, ".rela.got");
 
   relend = relocs + sec->reloc_count;
   for (rel = relocs; rel < relend; rel++)
@@ -2718,16 +2654,64 @@ cris_elf_gc_sweep_hook (bfd *abfd,
 /* The elf_backend_plt_sym_val hook function.  */
 
 static bfd_vma
-cris_elf_plt_sym_val (bfd_vma i, const asection *plt,
-		      const arelent *rel ATTRIBUTE_UNUSED)
+cris_elf_plt_sym_val (bfd_vma i ATTRIBUTE_UNUSED, const asection *plt,
+		      const arelent *rel)
 {
   bfd_size_type plt_entry_size;
+  bfd_size_type pltoffs;
+  bfd *abfd = plt->owner;
 
+  /* Same for CRIS and CRIS v32; see elf_cris_(|pic_)plt_entry(|_v32)[].  */
+  bfd_size_type plt_entry_got_offset = 2;
+  bfd_size_type plt_sec_size;
+  bfd_size_type got_vma_for_dyn;
+  asection *got;
+
+  /* FIXME: the .got section should be readily available also when
+     we're not linking.  */
+  if ((got = bfd_get_section_by_name (abfd, ".got")) == NULL)
+    return (bfd_vma) -1;
+
+  plt_sec_size =  bfd_section_size (plt->owner, plt);
   plt_entry_size
-    = (bfd_get_mach (plt->owner) == bfd_mach_cris_v32
+    = (bfd_get_mach (abfd) == bfd_mach_cris_v32
        ? PLT_ENTRY_SIZE_V32 : PLT_ENTRY_SIZE);
 
-  return plt->vma + (i + 1) * plt_entry_size;
+  /* Data in PLT is GOT-relative for DYN, but absolute for EXE.  */
+  got_vma_for_dyn = (abfd->flags & EXEC_P) ? 0 : got->vma;
+
+  /* Because we can have merged GOT entries; a single .got entry for
+     both GOT and the PLT part of the GOT (.got.plt), the index of the
+     reloc in .rela.plt is not the same as the index in the PLT.
+     Instead, we have to hunt down the GOT offset in the PLT that
+     corresponds to that of this reloc.  Unfortunately, we will only
+     be called for the .rela.plt relocs, so we'll miss synthetic
+     symbols for .plt entries with merged GOT entries.  (FIXME:
+     fixable by providing our own bfd_elf32_get_synthetic_symtab.
+     Doesn't seem worthwile at time of this writing.)  FIXME: we've
+     gone from O(1) to O(N) (N number of PLT entries) for finding each
+     PLT address.  Shouldn't matter in practice though.  */
+
+  for (pltoffs = plt_entry_size;
+       pltoffs < plt_sec_size;
+       pltoffs += plt_entry_size)
+    {
+      bfd_size_type got_offset;
+      bfd_byte gotoffs_raw[4];
+      
+      if (!bfd_get_section_contents (abfd, (asection *) plt, gotoffs_raw,
+				     pltoffs + plt_entry_got_offset,
+				     sizeof (gotoffs_raw)))
+	return (bfd_vma) -1;
+
+      got_offset = bfd_get_32 (abfd, gotoffs_raw);
+      if (got_offset + got_vma_for_dyn == rel->address)
+	return plt->vma + pltoffs;
+    }
+
+  /* While it's tempting to BFD_ASSERT that we shouldn't get here,
+     that'd not be graceful behavior for invalid input.  */
+  return (bfd_vma) -1;
 }
 
 /* Make sure we emit a GOT entry if the symbol was supposed to have a PLT
@@ -2738,9 +2722,7 @@ cris_elf_plt_sym_val (bfd_vma i, const asection *plt,
    created (we're only linking static objects).  */
 
 static bfd_boolean
-elf_cris_adjust_gotplt_to_got (h, p)
-     struct elf_cris_link_hash_entry *h;
-     PTR p;
+elf_cris_adjust_gotplt_to_got (struct elf_cris_link_hash_entry *h, void * p)
 {
   struct bfd_link_info *info = (struct bfd_link_info *) p;
 
@@ -2770,8 +2752,8 @@ elf_cris_adjust_gotplt_to_got (h, p)
       asection *srelgot;
 
       BFD_ASSERT (dynobj != NULL);
-      sgot = bfd_get_section_by_name (dynobj, ".got");
-      srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+      sgot = bfd_get_linker_section (dynobj, ".got");
+      srelgot = bfd_get_linker_section (dynobj, ".rela.got");
 
       /* Put accurate refcounts there.  */
       h->root.got.refcount += h->gotplt_refcount;
@@ -2818,9 +2800,7 @@ elf_cris_adjust_gotplt_to_got (h, p)
    elf_cris_hide_symbol.  */
 
 static bfd_boolean
-elf_cris_try_fold_plt_to_got (h, p)
-     struct elf_cris_link_hash_entry *h;
-     PTR p;
+elf_cris_try_fold_plt_to_got (struct elf_cris_link_hash_entry *h, void * p)
 {
   struct bfd_link_info *info = (struct bfd_link_info *) p;
 
@@ -2852,10 +2832,9 @@ elf_cris_try_fold_plt_to_got (h, p)
    entry.  */
 
 static void
-elf_cris_hide_symbol (info, h, force_local)
-     struct bfd_link_info *info;
-     struct elf_link_hash_entry *h;
-     bfd_boolean force_local;
+elf_cris_hide_symbol (struct bfd_link_info *info,
+		      struct elf_link_hash_entry *h,
+		      bfd_boolean force_local)
 {
   elf_cris_adjust_gotplt_to_got ((struct elf_cris_link_hash_entry *) h, info);
 
@@ -2949,7 +2928,7 @@ elf_cris_adjust_dynamic_symbol (struct bfd_link_info *info,
 	    return FALSE;
 	}
 
-      s = bfd_get_section_by_name (dynobj, ".plt");
+      s = bfd_get_linker_section (dynobj, ".plt");
       BFD_ASSERT (s != NULL);
 
       /* If this is the first .plt entry, make room for the special
@@ -3008,13 +2987,13 @@ elf_cris_adjust_dynamic_symbol (struct bfd_link_info *info,
 	= htab->next_gotplt_entry;
       htab->next_gotplt_entry += 4;
 
-      s = bfd_get_section_by_name (dynobj, ".got.plt");
+      s = bfd_get_linker_section (dynobj, ".got.plt");
       BFD_ASSERT (s != NULL);
       s->size += 4;
 
       /* We also need to make an entry in the .rela.plt section.  */
 
-      s = bfd_get_section_by_name (dynobj, ".rela.plt");
+      s = bfd_get_linker_section (dynobj, ".rela.plt");
       BFD_ASSERT (s != NULL);
       s->size += sizeof (Elf32_External_Rela);
 
@@ -3052,13 +3031,6 @@ elf_cris_adjust_dynamic_symbol (struct bfd_link_info *info,
   if (!h->non_got_ref)
     return TRUE;
 
-  if (h->size == 0)
-    {
-      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
-			     h->root.root.string);
-      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
@@ -3069,18 +3041,18 @@ elf_cris_adjust_dynamic_symbol (struct bfd_link_info *info,
      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");
+  s = bfd_get_linker_section (dynobj, ".dynbss");
   BFD_ASSERT (s != NULL);
 
   /* We must generate a R_CRIS_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
      .rela.bss section we are going to use.  */
-  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
       asection *srel;
 
-      srel = bfd_get_section_by_name (dynobj, ".rela.bss");
+      srel = bfd_get_linker_section (dynobj, ".rela.bss");
       BFD_ASSERT (srel != NULL);
       srel->size += sizeof (Elf32_External_Rela);
       h->needs_copy = 1;
@@ -3271,7 +3243,7 @@ cris_elf_check_relocs (bfd *abfd,
 	    }
 
 	  if (sgot == NULL)
-	    sgot = bfd_get_section_by_name (dynobj, ".got");
+	    sgot = bfd_get_linker_section (dynobj, ".got");
 
 	  if (local_got_refcounts == NULL)
 	    {
@@ -3331,17 +3303,15 @@ cris_elf_check_relocs (bfd *abfd,
 	  if (srelgot == NULL
 	      && (h != NULL || info->shared))
 	    {
-	      srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+	      srelgot = bfd_get_linker_section (dynobj, ".rela.got");
 	      if (srelgot == NULL)
 		{
-		  srelgot = bfd_make_section_with_flags (dynobj,
-							 ".rela.got",
-							 (SEC_ALLOC
-							  | SEC_LOAD
-							  | SEC_HAS_CONTENTS
-							  | SEC_IN_MEMORY
-							  | SEC_LINKER_CREATED
-							  | SEC_READONLY));
+		  flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
+				    | SEC_IN_MEMORY | SEC_LINKER_CREATED
+				    | SEC_READONLY);
+		  srelgot = bfd_make_section_anyway_with_flags (dynobj,
+								".rela.got",
+								flags);
 		  if (srelgot == NULL
 		      || !bfd_set_section_alignment (dynobj, srelgot, 2))
 		    return FALSE;
@@ -3787,7 +3757,7 @@ elf_cris_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  BFD_ASSERT (s != NULL);
 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
@@ -3804,7 +3774,7 @@ elf_cris_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 	 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");
+      s = bfd_get_linker_section (dynobj, ".rela.got");
       if (s != NULL)
 	s->size = 0;
     }
@@ -3963,9 +3933,8 @@ elf_cris_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
    relocate_section routine.  */
 
 static bfd_boolean
-elf_cris_discard_excess_dso_dynamics (h, inf)
-     struct elf_cris_link_hash_entry *h;
-     PTR inf;
+elf_cris_discard_excess_dso_dynamics (struct elf_cris_link_hash_entry *h,
+				      void * inf)
 {
   struct elf_cris_pcrel_relocs_copied *s;
   struct bfd_link_info *info = (struct bfd_link_info *) inf;
@@ -4019,9 +3988,8 @@ elf_cris_discard_excess_dso_dynamics (h, inf)
    in the .got, but which we found we do not have to resolve at run-time.  */
 
 static bfd_boolean
-elf_cris_discard_excess_program_dynamics (h, inf)
-     struct elf_cris_link_hash_entry *h;
-     PTR inf;
+elf_cris_discard_excess_program_dynamics (struct elf_cris_link_hash_entry *h,
+					  void * inf)
 {
   struct bfd_link_info *info = (struct bfd_link_info *) inf;
 
@@ -4044,7 +4012,7 @@ elf_cris_discard_excess_program_dynamics (h, inf)
 
 	  BFD_ASSERT (dynobj != NULL);
 
-	  srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+	  srelgot = bfd_get_linker_section (dynobj, ".rela.got");
 
 	  BFD_ASSERT (srelgot != NULL);
 
@@ -4074,8 +4042,7 @@ elf_cris_discard_excess_program_dynamics (h, inf)
    underscores on symbols.  */
 
 static bfd_boolean
-cris_elf_object_p (abfd)
-     bfd *abfd;
+cris_elf_object_p (bfd *abfd)
 {
   if (! cris_elf_set_mach_from_flags (abfd, elf_elfheader (abfd)->e_flags))
     return FALSE;
@@ -4090,9 +4057,8 @@ cris_elf_object_p (abfd)
    flags from mach type.  */
 
 static void
-cris_elf_final_write_processing (abfd, linker)
-     bfd *abfd;
-     bfd_boolean linker ATTRIBUTE_UNUSED;
+cris_elf_final_write_processing (bfd *abfd,
+				 bfd_boolean linker ATTRIBUTE_UNUSED)
 {
   unsigned long e_flags = elf_elfheader (abfd)->e_flags;
 
@@ -4125,9 +4091,8 @@ cris_elf_final_write_processing (abfd, linker)
 /* Set the mach type from e_flags value.  */
 
 static bfd_boolean
-cris_elf_set_mach_from_flags (abfd, flags)
-     bfd *abfd;
-     unsigned long flags;
+cris_elf_set_mach_from_flags (bfd *abfd,
+			      unsigned long flags)
 {
   switch (flags & EF_CRIS_VARIANT_MASK)
     {
@@ -4157,9 +4122,7 @@ cris_elf_set_mach_from_flags (abfd, flags)
 /* Display the flags field.  */
 
 static bfd_boolean
-cris_elf_print_private_bfd_data (abfd, ptr)
-     bfd *abfd;
-     PTR ptr;
+cris_elf_print_private_bfd_data (bfd *abfd, void * ptr)
 {
   FILE *file = (FILE *) ptr;
 
@@ -4185,9 +4148,7 @@ cris_elf_print_private_bfd_data (abfd, ptr)
 /* Don't mix files with and without a leading underscore.  */
 
 static bfd_boolean
-cris_elf_merge_private_bfd_data (ibfd, obfd)
-     bfd *ibfd;
-     bfd *obfd;
+cris_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
 {
   int imach, omach;
 
@@ -4264,9 +4225,7 @@ cris_elf_merge_private_bfd_data (ibfd, obfd)
 /* Do side-effects of e_flags copying to obfd.  */
 
 static bfd_boolean
-cris_elf_copy_private_bfd_data (ibfd, obfd)
-     bfd *ibfd;
-     bfd *obfd;
+cris_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
 {
   /* Call the base function.  */
   if (!_bfd_elf_copy_private_bfd_data (ibfd, obfd))
@@ -4285,8 +4244,7 @@ cris_elf_copy_private_bfd_data (ibfd, obfd)
 }
 
 static enum elf_reloc_type_class
-elf_cris_reloc_type_class (rela)
-     const Elf_Internal_Rela *rela;
+elf_cris_reloc_type_class (const Elf_Internal_Rela *rela)
 {
   enum elf_cris_reloc_type r_type = ELF32_R_TYPE (rela->r_info);
   switch (r_type)
diff --git a/bfd/elf32-crx.c b/bfd/elf32-crx.c
index d48932d..940f357 100644
--- a/bfd/elf32-crx.c
+++ b/bfd/elf32-crx.c
@@ -1,5 +1,5 @@
 /* BFD back-end for National Semiconductor's CRX ELF
-   Copyright 2004, 2005, 2006, 2007, 2009, 2010
+   Copyright 2004, 2005, 2006, 2007, 2009, 2010, 2012
    Free Software Foundation, Inc.
    Written by Tomer Levi, NSC, Israel.
 
@@ -754,7 +754,7 @@ elf32_crx_get_relocated_section_contents (bfd *output_bfd,
       bfd_size_type amt;
 
       internal_relocs = (_bfd_elf_link_read_relocs
-			 (input_bfd, input_section, (PTR) NULL,
+			 (input_bfd, input_section, NULL,
 			  (Elf_Internal_Rela *) NULL, FALSE));
       if (internal_relocs == NULL)
 	goto error_return;
@@ -873,9 +873,9 @@ elf32_crx_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 				   unresolved_reloc, warned);
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -984,7 +984,7 @@ elf32_crx_relax_section (bfd *abfd, asection *sec,
 
   /* Get a copy of the native relocations.  */
   internal_relocs = (_bfd_elf_link_read_relocs
-		     (abfd, sec, (PTR) NULL, (Elf_Internal_Rela *) NULL,
+		     (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
 		      link_info->keep_memory));
   if (internal_relocs == NULL)
     goto error_return;
diff --git a/bfd/elf32-d10v.c b/bfd/elf32-d10v.c
index 7d65395..246e5f5 100644
--- a/bfd/elf32-d10v.c
+++ b/bfd/elf32-d10v.c
@@ -1,6 +1,6 @@
 /* D10V-specific support for 32-bit ELF
    Copyright 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-   2007 Free Software Foundation, Inc.
+   2007, 2010, 2012 Free Software Foundation, Inc.
    Contributed by Martin Hunt (hunt at cygnus.com).
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -463,9 +463,9 @@ elf32_d10v_relocate_section (bfd *output_bfd,
 				   unresolved_reloc, warned);
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
diff --git a/bfd/elf32-epiphany.c b/bfd/elf32-epiphany.c
index d5e61a2..b427ef3 100644
--- a/bfd/elf32-epiphany.c
+++ b/bfd/elf32-epiphany.c
@@ -1,5 +1,5 @@
 /* Adapteva epiphany specific support for 32-bit ELF
-   Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2011
+   Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2011, 2012
    Free Software Foundation, Inc.
    Contributed by Embecosm on behalf of Adapteva, Inc.
 
@@ -524,9 +524,9 @@ epiphany_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 	  name = h->root.root.string;
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
diff --git a/bfd/elf32-fr30.c b/bfd/elf32-fr30.c
index 97b0d29..fe7cf92 100644
--- a/bfd/elf32-fr30.c
+++ b/bfd/elf32-fr30.c
@@ -1,5 +1,6 @@
 /* FR30-specific support for 32-bit ELF.
-   Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+   Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+   2010, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -26,23 +27,12 @@
 #include "elf/fr30.h"
 
 /* Forward declarations.  */
-static bfd_reloc_status_type fr30_elf_i20_reloc
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
-static bfd_reloc_status_type fr30_elf_i32_reloc
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
-static reloc_howto_type * fr30_reloc_type_lookup
-  PARAMS ((bfd *abfd, bfd_reloc_code_real_type code));
-static void fr30_info_to_howto_rela
-  PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
-static bfd_boolean fr30_elf_relocate_section
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
-	   Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
-static bfd_reloc_status_type fr30_final_link_relocate
-  PARAMS ((reloc_howto_type *, bfd *, asection *, bfd_byte *,
-	   Elf_Internal_Rela *, bfd_vma));
-static bfd_boolean fr30_elf_check_relocs
-  PARAMS ((bfd *, struct bfd_link_info *, asection *,
-	   const Elf_Internal_Rela *));
+static bfd_reloc_status_type
+fr30_elf_i20_reloc (bfd *, arelent *, asymbol *, void * data,
+		    asection *, bfd *, char **error_message);
+static bfd_reloc_status_type
+fr30_elf_i32_reloc (bfd *, arelent *, asymbol *, void *,
+		    asection *, bfd *, char **);
 
 static reloc_howto_type fr30_elf_howto_table [] =
 {
@@ -244,15 +234,13 @@ static reloc_howto_type fr30_elf_howto_table [] =
 /* Utility to actually perform an R_FR30_20 reloc.  */
 
 static bfd_reloc_status_type
-fr30_elf_i20_reloc (abfd, reloc_entry, symbol, data,
-		    input_section, output_bfd, error_message)
-     bfd *abfd;
-     arelent *reloc_entry;
-     asymbol *symbol;
-     PTR data;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+fr30_elf_i20_reloc (bfd *abfd,
+		    arelent *reloc_entry,
+		    asymbol *symbol,
+		    void * data,
+		    asection *input_section,
+		    bfd *output_bfd,
+		    char **error_message ATTRIBUTE_UNUSED)
 {
   bfd_vma relocation;
   unsigned long x;
@@ -290,15 +278,13 @@ fr30_elf_i20_reloc (abfd, reloc_entry, symbol, data,
 /* Utility to actually perform a R_FR30_48 reloc.  */
 
 static bfd_reloc_status_type
-fr30_elf_i32_reloc (abfd, reloc_entry, symbol, data,
-		    input_section, output_bfd, error_message)
-     bfd *abfd;
-     arelent *reloc_entry;
-     asymbol *symbol;
-     PTR data;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+fr30_elf_i32_reloc (bfd *abfd,
+		    arelent *reloc_entry,
+		    asymbol *symbol,
+		    void * data,
+		    asection *input_section,
+		    bfd *output_bfd,
+		    char **error_message ATTRIBUTE_UNUSED)
 {
   bfd_vma relocation;
 
@@ -353,9 +339,8 @@ static const struct fr30_reloc_map fr30_reloc_map [] =
 };
 
 static reloc_howto_type *
-fr30_reloc_type_lookup (abfd, code)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     bfd_reloc_code_real_type code;
+fr30_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+			bfd_reloc_code_real_type code)
 {
   unsigned int i;
 
@@ -385,10 +370,9 @@ fr30_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
 /* Set the howto pointer for an FR30 ELF reloc.  */
 
 static void
-fr30_info_to_howto_rela (abfd, cache_ptr, dst)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *cache_ptr;
-     Elf_Internal_Rela *dst;
+fr30_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
+			 arelent *cache_ptr,
+			 Elf_Internal_Rela *dst)
 {
   unsigned int r_type;
 
@@ -401,14 +385,12 @@ fr30_info_to_howto_rela (abfd, cache_ptr, dst)
    routines, but a few relocs, we have to do them ourselves.  */
 
 static bfd_reloc_status_type
-fr30_final_link_relocate (howto, input_bfd, input_section, contents, rel,
-			  relocation)
-     reloc_howto_type *howto;
-     bfd *input_bfd;
-     asection *input_section;
-     bfd_byte *contents;
-     Elf_Internal_Rela *rel;
-     bfd_vma relocation;
+fr30_final_link_relocate (reloc_howto_type *howto,
+			  bfd *input_bfd,
+			  asection *input_section,
+			  bfd_byte *contents,
+			  Elf_Internal_Rela *rel,
+			  bfd_vma relocation)
 {
   bfd_reloc_status_type r = bfd_reloc_ok;
   bfd_vma x;
@@ -510,16 +492,14 @@ fr30_final_link_relocate (howto, input_bfd, input_section, contents, rel,
    accordingly.  */
 
 static bfd_boolean
-fr30_elf_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;
+fr30_elf_relocate_section (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)
 {
   Elf_Internal_Shdr *symtab_hdr;
   struct elf_link_hash_entry **sym_hashes;
@@ -577,9 +557,9 @@ fr30_elf_relocate_section (output_bfd, info, input_bfd, input_section,
 	  name = h->root.root.string;
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -660,11 +640,10 @@ fr30_elf_gc_mark_hook (asection *sec,
    virtual table relocs for gc.  */
 
 static bfd_boolean
-fr30_elf_check_relocs (abfd, info, sec, relocs)
-     bfd *abfd;
-     struct bfd_link_info *info;
-     asection *sec;
-     const Elf_Internal_Rela *relocs;
+fr30_elf_check_relocs (bfd *abfd,
+		       struct bfd_link_info *info,
+		       asection *sec,
+		       const Elf_Internal_Rela *relocs)
 {
   Elf_Internal_Shdr *symtab_hdr;
   struct elf_link_hash_entry **sym_hashes;
diff --git a/bfd/elf32-frv.c b/bfd/elf32-frv.c
index e4e7f24..271ec02 100644
--- a/bfd/elf32-frv.c
+++ b/bfd/elf32-frv.c
@@ -1,5 +1,5 @@
 /* FRV-specific support for 32-bit ELF.
-   Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -28,56 +28,7 @@
 #include "hashtab.h"
 
 /* Forward declarations.  */
-static bfd_reloc_status_type elf32_frv_relocate_lo16
-  PARAMS ((bfd *,  Elf_Internal_Rela *, bfd_byte *, bfd_vma));
-static bfd_reloc_status_type elf32_frv_relocate_hi16
-  PARAMS ((bfd *,  Elf_Internal_Rela *, bfd_byte *, bfd_vma));
-static bfd_reloc_status_type elf32_frv_relocate_label24
-  PARAMS ((bfd *, asection *, Elf_Internal_Rela *, bfd_byte *, bfd_vma));
-static bfd_reloc_status_type elf32_frv_relocate_gprel12
-  PARAMS ((struct bfd_link_info *, bfd *, asection *, Elf_Internal_Rela *,
-	   bfd_byte *, bfd_vma));
-static bfd_reloc_status_type elf32_frv_relocate_gprelu12
-  PARAMS ((struct bfd_link_info *, bfd *, asection *, Elf_Internal_Rela *,
-	   bfd_byte *, bfd_vma));
-static bfd_reloc_status_type elf32_frv_relocate_gprello
-  PARAMS ((struct bfd_link_info *, bfd *, asection *, Elf_Internal_Rela *,
-	   bfd_byte *, bfd_vma));
-static bfd_reloc_status_type elf32_frv_relocate_gprelhi
-  PARAMS ((struct bfd_link_info *, bfd *, asection *, Elf_Internal_Rela *,
-	   bfd_byte *, bfd_vma));
-static reloc_howto_type *frv_reloc_type_lookup
-  PARAMS ((bfd *, bfd_reloc_code_real_type));
-static void frv_info_to_howto_rela
-  PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
-static bfd_boolean elf32_frv_relocate_section
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
-	   Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
-static bfd_boolean elf32_frv_add_symbol_hook
-  PARAMS (( bfd *, struct bfd_link_info *, Elf_Internal_Sym *,
-	    const char **, flagword *, asection **, bfd_vma *));
-static bfd_reloc_status_type frv_final_link_relocate
-  PARAMS ((reloc_howto_type *, bfd *, asection *, bfd_byte *,
-	   Elf_Internal_Rela *, bfd_vma));
-static bfd_boolean elf32_frv_check_relocs
-  PARAMS ((bfd *, struct bfd_link_info *, asection *,
-	   const Elf_Internal_Rela *));
-static int elf32_frv_machine
-  PARAMS ((bfd *));
-static bfd_boolean elf32_frv_object_p
-  PARAMS ((bfd *));
-static bfd_boolean frv_elf_set_private_flags
-  PARAMS ((bfd *, flagword));
-static bfd_boolean frv_elf_copy_private_bfd_data
-  PARAMS ((bfd *, bfd *));
-static bfd_boolean frv_elf_merge_private_bfd_data
-  PARAMS ((bfd *, bfd *));
-static bfd_boolean frv_elf_print_private_bfd_data
-  PARAMS ((bfd *, PTR));
-static bfd_boolean elf32_frv_grok_prstatus (bfd * abfd,
-					    Elf_Internal_Note * note);
-static bfd_boolean elf32_frv_grok_psinfo (bfd * abfd,
-					  Elf_Internal_Note * note);
+
 
 static reloc_howto_type elf32_frv_howto_table [] =
 {
@@ -2176,14 +2127,12 @@ _frvfdpic_emit_got_relocs_plt_entries (struct frvfdpic_relocs_info *entry,
 /* Handle an FRV small data reloc.  */
 
 static bfd_reloc_status_type
-elf32_frv_relocate_gprel12 (info, input_bfd, input_section, relocation,
-			    contents, value)
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     asection *input_section;
-     Elf_Internal_Rela *relocation;
-     bfd_byte *contents;
-     bfd_vma value;
+elf32_frv_relocate_gprel12 (struct bfd_link_info *info,
+			    bfd *input_bfd,
+			    asection *input_section,
+			    Elf_Internal_Rela *relocation,
+			    bfd_byte *contents,
+			    bfd_vma value)
 {
   bfd_vma insn;
   bfd_vma gp;
@@ -2215,14 +2164,12 @@ elf32_frv_relocate_gprel12 (info, input_bfd, input_section, relocation,
 /* Handle an FRV small data reloc. for the u12 field.  */
 
 static bfd_reloc_status_type
-elf32_frv_relocate_gprelu12 (info, input_bfd, input_section, relocation,
-			     contents, value)
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     asection *input_section;
-     Elf_Internal_Rela *relocation;
-     bfd_byte *contents;
-     bfd_vma value;
+elf32_frv_relocate_gprelu12 (struct bfd_link_info *info,
+			     bfd *input_bfd,
+			     asection *input_section,
+			     Elf_Internal_Rela *relocation,
+			     bfd_byte *contents,
+			     bfd_vma value)
 {
   bfd_vma insn;
   bfd_vma gp;
@@ -2257,11 +2204,10 @@ elf32_frv_relocate_gprelu12 (info, input_bfd, input_section, relocation,
 /* Handle an FRV ELF HI16 reloc.  */
 
 static bfd_reloc_status_type
-elf32_frv_relocate_hi16 (input_bfd, relhi, contents, value)
-     bfd *input_bfd;
-     Elf_Internal_Rela *relhi;
-     bfd_byte *contents;
-     bfd_vma value;
+elf32_frv_relocate_hi16 (bfd *input_bfd,
+			 Elf_Internal_Rela *relhi,
+			 bfd_byte *contents,
+			 bfd_vma value)
 {
   bfd_vma insn;
 
@@ -2280,11 +2226,10 @@ elf32_frv_relocate_hi16 (input_bfd, relhi, contents, value)
 
 }
 static bfd_reloc_status_type
-elf32_frv_relocate_lo16 (input_bfd, rello, contents, value)
-     bfd *input_bfd;
-     Elf_Internal_Rela *rello;
-     bfd_byte *contents;
-     bfd_vma value;
+elf32_frv_relocate_lo16 (bfd *input_bfd,
+			 Elf_Internal_Rela *rello,
+			 bfd_byte *contents,
+			 bfd_vma value)
 {
   bfd_vma insn;
 
@@ -2305,12 +2250,11 @@ elf32_frv_relocate_lo16 (input_bfd, rello, contents, value)
 /* Perform the relocation for the CALL label24 instruction.  */
 
 static bfd_reloc_status_type
-elf32_frv_relocate_label24 (input_bfd, input_section, rello, contents, value)
-     bfd *input_bfd;
-     asection *input_section;
-     Elf_Internal_Rela *rello;
-     bfd_byte *contents;
-     bfd_vma value;
+elf32_frv_relocate_label24 (bfd *input_bfd,
+			    asection *input_section,
+			    Elf_Internal_Rela *rello,
+			    bfd_byte *contents,
+			    bfd_vma value)
 {
   bfd_vma insn;
   bfd_vma label6;
@@ -2348,14 +2292,12 @@ elf32_frv_relocate_label24 (input_bfd, input_section, rello, contents, value)
 }
 
 static bfd_reloc_status_type
-elf32_frv_relocate_gprelhi (info, input_bfd, input_section, relocation,
-			    contents, value)
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     asection *input_section;
-     Elf_Internal_Rela *relocation;
-     bfd_byte *contents;
-     bfd_vma value;
+elf32_frv_relocate_gprelhi (struct bfd_link_info *info,
+			    bfd *input_bfd,
+			    asection *input_section,
+			    Elf_Internal_Rela *relocation,
+			    bfd_byte *contents,
+			    bfd_vma value)
 {
   bfd_vma insn;
   bfd_vma gp;
@@ -2383,14 +2325,12 @@ elf32_frv_relocate_gprelhi (info, input_bfd, input_section, relocation,
 }
 
 static bfd_reloc_status_type
-elf32_frv_relocate_gprello (info, input_bfd, input_section, relocation,
-			    contents, value)
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     asection *input_section;
-     Elf_Internal_Rela *relocation;
-     bfd_byte *contents;
-     bfd_vma value;
+elf32_frv_relocate_gprello (struct bfd_link_info *info,
+			    bfd *input_bfd,
+			    asection *input_section,
+			    Elf_Internal_Rela *relocation,
+			    bfd_byte *contents,
+			    bfd_vma value)
 {
   bfd_vma insn;
   bfd_vma gp;
@@ -2419,9 +2359,8 @@ elf32_frv_relocate_gprello (info, input_bfd, input_section, relocation,
 }
 
 static reloc_howto_type *
-frv_reloc_type_lookup (abfd, code)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     bfd_reloc_code_real_type code;
+frv_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+		       bfd_reloc_code_real_type code)
 {
   switch (code)
     {
@@ -2601,10 +2540,9 @@ frv_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
 /* Set the howto pointer for an FRV ELF reloc.  */
 
 static void
-frv_info_to_howto_rela (abfd, cache_ptr, dst)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *cache_ptr;
-     Elf_Internal_Rela *dst;
+frv_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
+			arelent *cache_ptr,
+			Elf_Internal_Rela *dst)
 {
   unsigned int r_type;
 
@@ -2665,14 +2603,12 @@ frvfdpic_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
    routines, but a few relocs, we have to do them ourselves.  */
 
 static bfd_reloc_status_type
-frv_final_link_relocate (howto, input_bfd, input_section, contents, rel,
-			 relocation)
-     reloc_howto_type *howto;
-     bfd *input_bfd;
-     asection *input_section;
-     bfd_byte *contents;
-     Elf_Internal_Rela *rel;
-     bfd_vma relocation;
+frv_final_link_relocate (reloc_howto_type *howto,
+			 bfd *input_bfd,
+			 asection *input_section,
+			 bfd_byte *contents,
+			 Elf_Internal_Rela *rel,
+			 bfd_vma relocation)
 {
   return _bfd_final_link_relocate (howto, input_bfd, input_section,
 				   contents, rel->r_offset, relocation,
@@ -2711,16 +2647,14 @@ frv_final_link_relocate (howto, input_bfd, input_section, contents, rel,
    accordingly.  */
 
 static bfd_boolean
-elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
-			    contents, relocs, local_syms, local_sections)
-     bfd *output_bfd ATTRIBUTE_UNUSED;
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     asection *input_section;
-     bfd_byte *contents;
-     Elf_Internal_Rela *relocs;
-     Elf_Internal_Sym *local_syms;
-     asection **local_sections;
+elf32_frv_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
+			    struct bfd_link_info *info,
+			    bfd *input_bfd,
+			    asection *input_section,
+			    bfd_byte *contents,
+			    Elf_Internal_Rela *relocs,
+			    Elf_Internal_Sym *local_syms,
+			    asection **local_sections)
 {
   Elf_Internal_Shdr *symtab_hdr;
   struct elf_link_hash_entry **sym_hashes;
@@ -2812,9 +2746,9 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
 	  name = h->root.root.string;
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -4159,14 +4093,13 @@ elf32_frv_gc_mark_hook (asection *sec,
    file.  We use it to put .comm items in .scomm, and not .comm.  */
 
 static bfd_boolean
-elf32_frv_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
-     bfd *abfd;
-     struct bfd_link_info *info;
-     Elf_Internal_Sym *sym;
-     const char **namep ATTRIBUTE_UNUSED;
-     flagword *flagsp ATTRIBUTE_UNUSED;
-     asection **secp;
-     bfd_vma *valp;
+elf32_frv_add_symbol_hook (bfd *abfd,
+			   struct bfd_link_info *info,
+			   Elf_Internal_Sym *sym,
+			   const char **namep ATTRIBUTE_UNUSED,
+			   flagword *flagsp ATTRIBUTE_UNUSED,
+			   asection **secp,
+			   bfd_vma *valp)
 {
   if (sym->st_shndx == SHN_COMMON
       && !info->relocatable
@@ -4234,8 +4167,8 @@ _frv_create_got_section (bfd *abfd, struct bfd_link_info *info)
   int offset;
 
   /* This function may be called more than once.  */
-  s = bfd_get_section_by_name (abfd, ".got");
-  if (s != NULL && (s->flags & SEC_LINKER_CREATED) != 0)
+  s = bfd_get_linker_section (abfd, ".got");
+  if (s != NULL)
     return TRUE;
 
   /* Machine specific: although pointers are 32-bits wide, we want the
@@ -4248,14 +4181,14 @@ _frv_create_got_section (bfd *abfd, struct bfd_link_info *info)
 	   | SEC_LINKER_CREATED);
   pltflags = flags;
 
-  s = bfd_make_section_with_flags (abfd, ".got", flags);
+  s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
   if (s == NULL
       || !bfd_set_section_alignment (abfd, s, ptralign))
     return FALSE;
 
   if (bed->want_got_plt)
     {
-      s = bfd_make_section_with_flags (abfd, ".got.plt", flags);
+      s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags);
       if (s == NULL
 	  || !bfd_set_section_alignment (abfd, s, ptralign))
 	return FALSE;
@@ -4293,8 +4226,8 @@ _frv_create_got_section (bfd *abfd, struct bfd_link_info *info)
       if (! frvfdpic_relocs_info (info))
 	return FALSE;
 
-      s = bfd_make_section_with_flags (abfd, ".rel.got",
-				       (flags | SEC_READONLY));
+      s = bfd_make_section_anyway_with_flags (abfd, ".rel.got",
+					      (flags | SEC_READONLY));
       if (s == NULL
 	  || ! bfd_set_section_alignment (abfd, s, 2))
 	return FALSE;
@@ -4302,8 +4235,8 @@ _frv_create_got_section (bfd *abfd, struct bfd_link_info *info)
       frvfdpic_gotrel_section (info) = s;
 
       /* Machine-specific.  */
-      s = bfd_make_section_with_flags (abfd, ".rofixup",
-				       (flags | SEC_READONLY));
+      s = bfd_make_section_anyway_with_flags (abfd, ".rofixup",
+					      (flags | SEC_READONLY));
       if (s == NULL
 	  || ! bfd_set_section_alignment (abfd, s, 2))
 	return FALSE;
@@ -4351,7 +4284,7 @@ _frv_create_got_section (bfd *abfd, struct bfd_link_info *info)
   if (bed->plt_readonly)
     pltflags |= SEC_READONLY;
 
-  s = bfd_make_section_with_flags (abfd, ".plt", pltflags);
+  s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
     return FALSE;
@@ -4370,8 +4303,8 @@ _frv_create_got_section (bfd *abfd, struct bfd_link_info *info)
     }
 
   /* FRV-specific: we want rel relocations for the plt.  */
-  s = bfd_make_section_with_flags (abfd, ".rel.plt",
-				   flags | SEC_READONLY);
+  s = bfd_make_section_anyway_with_flags (abfd, ".rel.plt",
+					  flags | SEC_READONLY);
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
     return FALSE;
@@ -4418,8 +4351,8 @@ elf32_frvfdpic_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 	 image and use a R_*_COPY reloc to tell the dynamic linker to
 	 initialize them at run time.  The linker script puts the .dynbss
 	 section into the .bss section of the final image.  */
-      s = bfd_make_section_with_flags (abfd, ".dynbss",
-				       SEC_ALLOC | SEC_LINKER_CREATED);
+      s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
+					      SEC_ALLOC | SEC_LINKER_CREATED);
       if (s == NULL)
 	return FALSE;
 
@@ -4436,10 +4369,10 @@ elf32_frvfdpic_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
      copy relocs.  */
       if (! info->shared)
 	{
-	  s = bfd_make_section_with_flags (abfd,
-					   (bed->default_use_rela_p
-					    ? ".rela.bss" : ".rel.bss"),
-					   flags | SEC_READONLY);
+	  s = bfd_make_section_anyway_with_flags (abfd,
+						  (bed->default_use_rela_p
+						   ? ".rela.bss" : ".rel.bss"),
+						  flags | SEC_READONLY);
 	  if (s == NULL
 	      || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
 	    return FALSE;
@@ -5504,7 +5437,7 @@ elf32_frvfdpic_size_dynamic_sections (bfd *output_bfd,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  BFD_ASSERT (s != NULL);
 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
 	  s->contents = (bfd_byte *) ELF_DYNAMIC_INTERPRETER;
@@ -5681,7 +5614,7 @@ frvfdpic_elf_discard_info (bfd *ibfd,
 
   /* Account for relaxation of .eh_frame section.  */
   for (s = ibfd->sections; s; s = s->next)
-    if (s->sec_info_type == ELF_INFO_TYPE_EH_FRAME)
+    if (s->sec_info_type == SEC_INFO_TYPE_EH_FRAME)
       {
 	if (!_frvfdpic_check_discarded_relocs (ibfd, s, info, &changed))
 	  return FALSE;
@@ -5913,7 +5846,7 @@ elf32_frvfdpic_finish_dynamic_sections (bfd *output_bfd,
       Elf32_External_Dyn * dyncon;
       Elf32_External_Dyn * dynconend;
 
-      sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+      sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
       BFD_ASSERT (sdyn != NULL);
 
@@ -6150,11 +6083,10 @@ frvfdpic_elf_encode_eh_address (bfd *abfd,
    Given infinite time and money... :-)  */
 
 static bfd_boolean
-elf32_frv_check_relocs (abfd, info, sec, relocs)
-     bfd *abfd;
-     struct bfd_link_info *info;
-     asection *sec;
-     const Elf_Internal_Rela *relocs;
+elf32_frv_check_relocs (bfd *abfd,
+			struct bfd_link_info *info,
+			asection *sec,
+			const Elf_Internal_Rela *relocs)
 {
   Elf_Internal_Shdr *symtab_hdr;
   struct elf_link_hash_entry **sym_hashes;
@@ -6410,8 +6342,7 @@ elf32_frv_check_relocs (abfd, info, sec, relocs)
 /* Return the machine subcode from the ELF e_flags header.  */
 
 static int
-elf32_frv_machine (abfd)
-     bfd *abfd;
+elf32_frv_machine (bfd *abfd)
 {
   switch (elf_elfheader (abfd)->e_flags & EF_FRV_CPU_MASK)
     {
@@ -6432,8 +6363,7 @@ elf32_frv_machine (abfd)
 /* Set the right machine number for a FRV ELF file.  */
 
 static bfd_boolean
-elf32_frv_object_p (abfd)
-     bfd *abfd;
+elf32_frv_object_p (bfd *abfd)
 {
   bfd_default_set_arch_mach (abfd, bfd_arch_frv, elf32_frv_machine (abfd));
   return (((elf_elfheader (abfd)->e_flags & EF_FRV_FDPIC) != 0)
@@ -6443,9 +6373,7 @@ elf32_frv_object_p (abfd)
 /* Function to set the ELF flag bits.  */
 
 static bfd_boolean
-frv_elf_set_private_flags (abfd, flags)
-     bfd *abfd;
-     flagword flags;
+frv_elf_set_private_flags (bfd *abfd, flagword flags)
 {
   elf_elfheader (abfd)->e_flags = flags;
   elf_flags_init (abfd) = TRUE;
@@ -6455,9 +6383,7 @@ frv_elf_set_private_flags (abfd, flags)
 /* Copy backend specific data from one object module to another.  */
 
 static bfd_boolean
-frv_elf_copy_private_bfd_data (ibfd, obfd)
-     bfd *ibfd;
-     bfd *obfd;
+frv_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
 {
   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
@@ -6550,9 +6476,7 @@ elf32_frvfdpic_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
    object file when linking.  */
 
 static bfd_boolean
-frv_elf_merge_private_bfd_data (ibfd, obfd)
-     bfd *ibfd;
-     bfd *obfd;
+frv_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
 {
   flagword old_flags, old_partial;
   flagword new_flags, new_partial;
@@ -6820,10 +6744,8 @@ frv_elf_merge_private_bfd_data (ibfd, obfd)
 }
 
 

-bfd_boolean
-frv_elf_print_private_bfd_data (abfd, ptr)
-     bfd *abfd;
-     PTR ptr;
+static bfd_boolean
+frv_elf_print_private_bfd_data (bfd *abfd, void * ptr)
 {
   FILE *file = (FILE *) ptr;
   flagword flags;
diff --git a/bfd/elf32-h8300.c b/bfd/elf32-h8300.c
index 95d3983..388d220 100644
--- a/bfd/elf32-h8300.c
+++ b/bfd/elf32-h8300.c
@@ -1,6 +1,6 @@
 /* BFD back-end for Renesas H8/300 ELF binaries.
    Copyright 1993, 1995, 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2006,
-   2007, 2009, 2010 Free Software Foundation, Inc.
+   2007, 2008, 2009, 2010, 2012 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -52,12 +52,13 @@ static bfd_boolean elf32_h8_relocate_section
    bfd_byte *, Elf_Internal_Rela *,
    Elf_Internal_Sym *, asection **);
 static bfd_reloc_status_type special
-  (bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **);
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 
 /* This does not include any relocation information, but should be
    good enough for GDB or objdump to read the file.  */
 
-static reloc_howto_type h8_elf_howto_table[] = {
+static reloc_howto_type h8_elf_howto_table[] =
+{
 #define R_H8_NONE_X 0
   HOWTO (R_H8_NONE,		/* type */
 	 0,			/* rightshift */
@@ -304,7 +305,7 @@ static bfd_reloc_status_type
 special (bfd *abfd ATTRIBUTE_UNUSED,
 	 arelent *reloc_entry ATTRIBUTE_UNUSED,
 	 asymbol *symbol ATTRIBUTE_UNUSED,
-	 PTR data ATTRIBUTE_UNUSED,
+	 void * data ATTRIBUTE_UNUSED,
 	 asection *input_section ATTRIBUTE_UNUSED,
 	 bfd *output_bfd,
 	 char **error_message ATTRIBUTE_UNUSED)
@@ -460,9 +461,9 @@ elf32_h8_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 				   unresolved_reloc, warned);
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -699,7 +700,7 @@ elf32_h8_relax_section (bfd *abfd, asection *sec,
 
   /* Get a copy of the native relocations.  */
   internal_relocs = (_bfd_elf_link_read_relocs
-		     (abfd, sec, (PTR) NULL, (Elf_Internal_Rela *) NULL,
+		     (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
 		      link_info->keep_memory));
   if (internal_relocs == NULL)
     goto error_return;
@@ -1523,7 +1524,7 @@ elf32_h8_get_relocated_section_contents (bfd *output_bfd,
       bfd_size_type amt;
 
       internal_relocs = (_bfd_elf_link_read_relocs
-			 (input_bfd, input_section, (PTR) NULL,
+			 (input_bfd, input_section, NULL,
 			  (Elf_Internal_Rela *) NULL, FALSE));
       if (internal_relocs == NULL)
 	goto error_return;
diff --git a/bfd/elf32-hppa.c b/bfd/elf32-hppa.c
index dcf6df0..dc3053c 100644
--- a/bfd/elf32-hppa.c
+++ b/bfd/elf32-hppa.c
@@ -1,6 +1,6 @@
 /* BFD back-end for HP PA-RISC ELF files.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000, 2001,
-   2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    Original code by
@@ -1005,14 +1005,14 @@ elf32_hppa_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
   if (! _bfd_elf_create_dynamic_sections (abfd, info))
     return FALSE;
 
-  htab->splt = bfd_get_section_by_name (abfd, ".plt");
-  htab->srelplt = bfd_get_section_by_name (abfd, ".rela.plt");
+  htab->splt = bfd_get_linker_section (abfd, ".plt");
+  htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt");
 
-  htab->sgot = bfd_get_section_by_name (abfd, ".got");
-  htab->srelgot = bfd_get_section_by_name (abfd, ".rela.got");
+  htab->sgot = bfd_get_linker_section (abfd, ".got");
+  htab->srelgot = bfd_get_linker_section (abfd, ".rela.got");
 
-  htab->sdynbss = bfd_get_section_by_name (abfd, ".dynbss");
-  htab->srelbss = bfd_get_section_by_name (abfd, ".rela.bss");
+  htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss");
+  htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss");
 
   /* hppa-linux needs _GLOBAL_OFFSET_TABLE_ to be visible from the main
      application, because __canonicalize_funcptr_for_compare needs it.  */
@@ -1898,13 +1898,6 @@ elf32_hppa_adjust_dynamic_symbol (struct bfd_link_info *info,
 	}
     }
 
-  if (eh->size == 0)
-    {
-      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
-			     eh->root.root.string);
-      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
@@ -1922,7 +1915,7 @@ elf32_hppa_adjust_dynamic_symbol (struct bfd_link_info *info,
   /* We must generate a COPY reloc to tell the dynamic linker to
      copy the initial value out of the dynamic object and into the
      runtime process image.  */
-  if ((eh->root.u.def.section->flags & SEC_ALLOC) != 0)
+  if ((eh->root.u.def.section->flags & SEC_ALLOC) != 0 && eh->size != 0)
     {
       htab->srelbss->size += sizeof (Elf32_External_Rela);
       eh->needs_copy = 1;
@@ -2232,7 +2225,7 @@ elf32_hppa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  sec = bfd_get_section_by_name (dynobj, ".interp");
+	  sec = bfd_get_linker_section (dynobj, ".interp");
 	  if (sec == NULL)
 	    abort ();
 	  sec->size = sizeof ELF_DYNAMIC_INTERPRETER;
@@ -3741,10 +3734,10 @@ elf32_hppa_relocate_section (bfd *output_bfd,
 	  hh = hppa_elf_hash_entry (eh);
 	}
 
-      if (sym_sec != NULL && elf_discarded_section (sym_sec))
+      if (sym_sec != NULL && discarded_section (sym_sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rela, relend,
-					 elf_hppa_howto_table + r_type,
+					 rela, 1, relend,
+					 elf_hppa_howto_table + r_type, 0,
 					 contents);
 
       if (info->relocatable)
@@ -4513,7 +4506,7 @@ elf32_hppa_finish_dynamic_sections (bfd *output_bfd,
   if (sgot != NULL && bfd_is_abs_section (sgot->output_section))
     return FALSE;
 
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (htab->etab.dynamic_sections_created)
     {
diff --git a/bfd/elf32-i370.c b/bfd/elf32-i370.c
index 8082927..5998db7 100644
--- a/bfd/elf32-i370.c
+++ b/bfd/elf32-i370.c
@@ -1,6 +1,6 @@
 /* i370-specific support for 32-bit ELF
    Copyright 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004,
-   2005, 2006, 2007, 2008, 2010, 2011 Free Software Foundation, Inc.
+   2005, 2006, 2007, 2008, 2010, 2011, 2012 Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support.
    Hacked by Linas Vepstas for i370 linas at linas.org
 
@@ -420,23 +420,23 @@ i370_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
 	   | SEC_LINKER_CREATED);
 
-  s = bfd_make_section_with_flags (abfd, ".dynsbss",
-				   SEC_ALLOC | SEC_LINKER_CREATED);
+  s = bfd_make_section_anyway_with_flags (abfd, ".dynsbss",
+					  SEC_ALLOC | SEC_LINKER_CREATED);
   if (s == NULL)
     return FALSE;
 
   if (! info->shared)
     {
-      s = bfd_make_section_with_flags (abfd, ".rela.sbss",
-				       flags | SEC_READONLY);
+      s = bfd_make_section_anyway_with_flags (abfd, ".rela.sbss",
+					      flags | SEC_READONLY);
       if (s == NULL
 	  || ! bfd_set_section_alignment (abfd, s, 2))
 	return FALSE;
     }
 
    /* XXX beats me, seem to need a rela.text ...  */
-   s = bfd_make_section_with_flags (abfd, ".rela.text",
-				    flags | SEC_READONLY);
+   s = bfd_make_section_anyway_with_flags (abfd, ".rela.text",
+					   flags | SEC_READONLY);
    if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, 2))
     return FALSE;
@@ -472,7 +472,7 @@ i370_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 		      && h->ref_regular
 		      && !h->def_regular)));
 
-  s = bfd_get_section_by_name (dynobj, ".rela.text");
+  s = bfd_get_linker_section (dynobj, ".rela.text");
   BFD_ASSERT (s != NULL);
   s->size += sizeof (Elf32_External_Rela);
 
@@ -498,13 +498,6 @@ i370_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
   if (info->shared)
     return TRUE;
 
-  if (h->size == 0)
-    {
-      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
-			     h->root.root.string);
-      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
@@ -520,23 +513,23 @@ i370_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
      only if there were actually SDAREL relocs for that symbol.  */
 
   if (h->size <= elf_gp_size (dynobj))
-    s = bfd_get_section_by_name (dynobj, ".dynsbss");
+    s = bfd_get_linker_section (dynobj, ".dynsbss");
   else
-    s = bfd_get_section_by_name (dynobj, ".dynbss");
+    s = bfd_get_linker_section (dynobj, ".dynbss");
   BFD_ASSERT (s != NULL);
 
   /* We must generate a R_I370_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
      .rela.bss section we are going to use.  */
-  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
       asection *srel;
 
       if (h->size <= elf_gp_size (dynobj))
-	srel = bfd_get_section_by_name (dynobj, ".rela.sbss");
+	srel = bfd_get_linker_section (dynobj, ".rela.sbss");
       else
-	srel = bfd_get_section_by_name (dynobj, ".rela.bss");
+	srel = bfd_get_linker_section (dynobj, ".rela.bss");
       BFD_ASSERT (srel != NULL);
       srel->size += sizeof (Elf32_External_Rela);
       h->needs_copy = 1;
@@ -595,7 +588,7 @@ i370_elf_size_dynamic_sections (bfd *output_bfd,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  BFD_ASSERT (s != NULL);
 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
@@ -615,7 +608,7 @@ i370_elf_size_dynamic_sections (bfd *output_bfd,
 
       for (p = rela_sections; *p != NULL; p++)
 	{
-	  s = bfd_get_section_by_name (dynobj, *p);
+	  s = bfd_get_linker_section (dynobj, *p);
 	  if (s != NULL)
 	    s->size = 0;
 	}
@@ -876,20 +869,20 @@ i370_elf_finish_dynamic_sections (bfd *output_bfd,
 {
   asection *sdyn;
   bfd *dynobj = elf_hash_table (info)->dynobj;
-  asection *sgot = bfd_get_section_by_name (dynobj, ".got");
+  asection *sgot = bfd_get_linker_section (dynobj, ".got");
 
 #ifdef DEBUG
   fprintf (stderr, "i370_elf_finish_dynamic_sections called\n");
 #endif
 
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
     {
       asection *splt;
       Elf32_External_Dyn *dyncon, *dynconend;
 
-      splt = bfd_get_section_by_name (dynobj, ".plt");
+      splt = bfd_get_linker_section (dynobj, ".plt");
       BFD_ASSERT (splt != NULL && sdyn != NULL);
 
       dyncon = (Elf32_External_Dyn *) sdyn->contents;
@@ -952,7 +945,7 @@ i370_elf_finish_dynamic_sections (bfd *output_bfd,
 
       /* Set up the section symbols for the output sections.  */
 
-      sdynsym = bfd_get_section_by_name (dynobj, ".dynsym");
+      sdynsym = bfd_get_linker_section (dynobj, ".dynsym");
       BFD_ASSERT (sdynsym != NULL);
 
       sym.st_size = 0;
@@ -1138,9 +1131,9 @@ i370_elf_relocate_section (bfd *output_bfd,
 	    }
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index d187305..7d3652d 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -1,6 +1,6 @@
 /* Intel 80386/80486-specific support for 32-bit ELF
    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -25,6 +25,7 @@
 #include "bfdlink.h"
 #include "libbfd.h"
 #include "elf-bfd.h"
+#include "elf-nacl.h"
 #include "elf-vxworks.h"
 #include "bfd_stdint.h"
 #include "objalloc.h"
@@ -1000,9 +1001,9 @@ elf_i386_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
   if (htab == NULL)
     return FALSE;
 
-  htab->sdynbss = bfd_get_section_by_name (dynobj, ".dynbss");
+  htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss");
   if (!info->shared)
-    htab->srelbss = bfd_get_section_by_name (dynobj, ".rel.bss");
+    htab->srelbss = bfd_get_linker_section (dynobj, ".rel.bss");
 
   if (!htab->sdynbss
       || (!info->shared && !htab->srelbss))
@@ -1014,22 +1015,17 @@ elf_i386_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
     return FALSE;
 
   if (!info->no_ld_generated_unwind_info
-      && bfd_get_section_by_name (dynobj, ".eh_frame") == NULL
+      && htab->plt_eh_frame == NULL
       && htab->elf.splt != NULL)
     {
-      flagword flags = get_elf_backend_data (dynobj)->dynamic_sec_flags;
+      flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
+			| SEC_HAS_CONTENTS | SEC_IN_MEMORY
+			| SEC_LINKER_CREATED);
       htab->plt_eh_frame
-	= bfd_make_section_with_flags (dynobj, ".eh_frame",
-				       flags | SEC_READONLY);
+	= bfd_make_section_anyway_with_flags (dynobj, ".eh_frame", flags);
       if (htab->plt_eh_frame == NULL
 	  || !bfd_set_section_alignment (dynobj, htab->plt_eh_frame, 2))
 	return FALSE;
-
-      htab->plt_eh_frame->size = sizeof (elf_i386_eh_frame_plt);
-      htab->plt_eh_frame->contents
-	= bfd_alloc (dynobj, htab->plt_eh_frame->size);
-      memcpy (htab->plt_eh_frame->contents, elf_i386_eh_frame_plt,
-	      sizeof (elf_i386_eh_frame_plt));
     }
 
   return TRUE;
@@ -2177,13 +2173,6 @@ elf_i386_adjust_dynamic_symbol (struct bfd_link_info *info,
 	}
     }
 
-  if (h->size == 0)
-    {
-      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
-			     h->root.root.string);
-      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
@@ -2197,7 +2186,7 @@ elf_i386_adjust_dynamic_symbol (struct bfd_link_info *info,
   /* We must generate a R_386_COPY reloc to tell the dynamic linker to
      copy the initial value out of the dynamic object and into the
      runtime process image.  */
-  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
       htab->srelbss->size += sizeof (Elf32_External_Rel);
       h->needs_copy = 1;
@@ -2570,7 +2559,7 @@ elf_i386_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  if (s == NULL)
 	    abort ();
 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
@@ -2709,7 +2698,7 @@ elf_i386_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
      it's not incremented, so in order to compute the space reserved
      for them, it suffices to multiply the reloc count by the jump
      slot size.
-     
+
      PR ld/13302: We start next_irelative_index at the end of .rela.plt
      so that R_386_IRELATIVE entries come last.  */
   if (htab->elf.srelplt)
@@ -2730,7 +2719,7 @@ elf_i386_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
 				  FALSE, FALSE, FALSE);
 
       /* Don't allocate .got.plt section if there are no GOT nor PLT
-         entries and there is no refeence to _GLOBAL_OFFSET_TABLE_.  */
+         entries and there is no reference to _GLOBAL_OFFSET_TABLE_.  */
       if ((got == NULL
 	   || !got->ref_regular_nonweak)
 	  && (htab->elf.sgotplt->size
@@ -2746,6 +2735,14 @@ elf_i386_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
 	htab->elf.sgotplt->size = 0;
     }
 
+
+  if (htab->plt_eh_frame != NULL
+      && htab->elf.splt != NULL
+      && htab->elf.splt->size != 0
+      && !bfd_is_abs_section (htab->elf.splt->output_section)
+      && _bfd_elf_eh_frame_present (info))
+    htab->plt_eh_frame->size = sizeof (elf_i386_eh_frame_plt);
+
   /* We now have determined the sizes of the various dynamic sections.
      Allocate memory for them.  */
   relocs = FALSE;
@@ -2757,11 +2754,7 @@ elf_i386_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
 	continue;
 
       if (s == htab->elf.splt
-	  || s == htab->elf.sgot
-	  || s == htab->elf.sgotplt
-	  || s == htab->elf.iplt
-	  || s == htab->elf.igotplt
-	  || s == htab->sdynbss)
+	  || s == htab->elf.sgot)
 	{
 	  /* Strip this section if we don't need it; see the
 	     comment below.  */
@@ -2772,6 +2765,14 @@ elf_i386_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
 	  if (htab->elf.hplt != NULL)
 	    strip_section = FALSE;
 	}
+      else if (s == htab->elf.sgotplt
+	       || s == htab->elf.iplt
+	       || s == htab->elf.igotplt
+	       || s == htab->plt_eh_frame
+	       || s == htab->sdynbss)
+	{
+	  /* Strip these too.  */
+	}
       else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rel"))
 	{
 	  if (s->size != 0
@@ -2819,11 +2820,13 @@ elf_i386_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
     }
 
   if (htab->plt_eh_frame != NULL
-      && htab->elf.splt != NULL
-      && htab->elf.splt->size != 0
-      && (htab->elf.splt->flags & SEC_EXCLUDE) == 0)
-    bfd_put_32 (dynobj, htab->elf.splt->size,
-		htab->plt_eh_frame->contents + PLT_FDE_LEN_OFFSET);
+      && htab->plt_eh_frame->contents != NULL)
+    {
+      memcpy (htab->plt_eh_frame->contents, elf_i386_eh_frame_plt,
+	      sizeof (elf_i386_eh_frame_plt));
+      bfd_put_32 (dynobj, htab->elf.splt->size,
+		  htab->plt_eh_frame->contents + PLT_FDE_LEN_OFFSET);
+    }
 
   if (htab->elf.dynamic_sections_created)
     {
@@ -3196,9 +3199,9 @@ elf_i386_relocate_section (bfd *output_bfd,
 				   unresolved_reloc, warned);
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -3257,7 +3260,6 @@ elf_i386_relocate_section (bfd *output_bfd,
 		  bfd_byte *loc;
 		  asection *sreloc;
 		  bfd_vma offset;
-		  bfd_boolean relocate;
 
 		  /* Need a dynamic relocation to get the real function
 		     adddress.  */
@@ -3278,14 +3280,15 @@ elf_i386_relocate_section (bfd *output_bfd,
 		      || info->executable)
 		    {
 		      /* This symbol is resolved locally.  */
-		      outrel.r_info = ELF32_R_INFO (0, R_386_RELATIVE);
-		      relocate = TRUE;
+		      outrel.r_info = ELF32_R_INFO (0, R_386_IRELATIVE);
+		      bfd_put_32 (output_bfd,
+				  (h->root.u.def.value
+				   + h->root.u.def.section->output_section->vma
+				   + h->root.u.def.section->output_offset),
+				  contents + offset);
 		    }
 		  else
-		    {
-		      outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
-		      relocate = FALSE;
-		    }
+		    outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
 
 		  sreloc = htab->elf.irelifunc;
 		  loc = sreloc->contents;
@@ -3298,8 +3301,7 @@ elf_i386_relocate_section (bfd *output_bfd,
 		     we need to include the symbol value so that it
 		     becomes an addend for the dynamic reloc.  For an
 		     internal symbol, we have updated addend.  */
-		  if (! relocate)
-		    continue;
+		  continue;
 		}
 	      /* FALLTHROUGH */
 	    case R_386_PC32:
@@ -3511,6 +3513,7 @@ elf_i386_relocate_section (bfd *output_bfd,
 		  return FALSE;
 		}
 	      else if (!info->executable
+		       && !SYMBOLIC_BIND (info, h)
 		       && h->type == STT_FUNC
 		       && ELF_ST_VISIBILITY (h->other) == STV_PROTECTED)
 		{
@@ -4606,17 +4609,6 @@ do_glob_dat:
       bfd_elf32_swap_reloc_out (output_bfd, &rel, loc);
     }
 
-  /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  SYM may
-     be NULL for local symbols.
-
-     On VxWorks, the _GLOBAL_OFFSET_TABLE_ symbol is not absolute: it
-     is relative to the ".got" section.  */
-  if (sym != NULL
-      && (strcmp (h->root.root.string, "_DYNAMIC") == 0
-	  || (!abed->is_vxworks
-              && h == htab->elf.hgot)))
-    sym->st_shndx = SHN_ABS;
-
   return TRUE;
 }
 
@@ -4670,7 +4662,7 @@ elf_i386_finish_dynamic_sections (bfd *output_bfd,
     return FALSE;
 
   dynobj = htab->elf.dynobj;
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
   abed = get_elf_i386_backend_data (output_bfd);
 
   if (htab->elf.dynamic_sections_created)
@@ -4855,7 +4847,8 @@ elf_i386_finish_dynamic_sections (bfd *output_bfd,
     }
 
   /* Adjust .eh_frame for .plt section.  */
-  if (htab->plt_eh_frame != NULL)
+  if (htab->plt_eh_frame != NULL
+      && htab->plt_eh_frame->contents != NULL)
     {
       if (htab->elf.splt != NULL
 	  && htab->elf.splt->size != 0
@@ -4872,7 +4865,7 @@ elf_i386_finish_dynamic_sections (bfd *output_bfd,
 			     + PLT_FDE_START_OFFSET);
 	}
       if (htab->plt_eh_frame->sec_info_type
-	  == ELF_INFO_TYPE_EH_FRAME)
+	  == SEC_INFO_TYPE_EH_FRAME)
 	{
 	  if (! _bfd_elf_write_section_eh_frame (output_bfd, info,
 						 htab->plt_eh_frame,
@@ -5117,7 +5110,10 @@ elf_i386_nacl_pic_plt0_entry[sizeof (elf_i386_nacl_plt0_entry)] =
     0x8b, 0x4b, 0x08,		/* mov 0x8(%ebx), %ecx */
     0x83, 0xe1, 0xe0,		/* and $NACLMASK, %ecx */
     0xff, 0xe1,			/* jmp *%ecx */
-    0x90                        /* nop */
+
+    /* This is expected to be the same size as elf_i386_nacl_plt0_entry,
+       so pad to that size with nop instructions.  */
+    0x90, 0x90, 0x90, 0x90, 0x90, 0x90
   };
 
 static const bfd_byte elf_i386_nacl_pic_plt_entry[NACL_PLT_ENTRY_SIZE] =
@@ -5211,8 +5207,17 @@ static const struct elf_i386_backend_data elf_i386_nacl_arch_bed =
 #undef	elf_backend_arch_data
 #define elf_backend_arch_data	&elf_i386_nacl_arch_bed
 
+#undef	elf_backend_modify_segment_map
+#define	elf_backend_modify_segment_map		nacl_modify_segment_map
+#undef	elf_backend_modify_program_headers
+#define	elf_backend_modify_program_headers	nacl_modify_program_headers
+
 #include "elf32-target.h"
 
+/* Restore defaults.  */
+#undef	elf_backend_modify_segment_map
+#undef	elf_backend_modify_program_headers
+
 /* VxWorks support.  */
 
 #undef	TARGET_LITTLE_SYM
diff --git a/bfd/elf32-i860.c b/bfd/elf32-i860.c
index 00c8ca7..f50e51b 100644
--- a/bfd/elf32-i860.c
+++ b/bfd/elf32-i860.c
@@ -1,5 +1,6 @@
 /* Intel i860 specific support for 32-bit ELF.
-   Copyright 1993, 1995, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
+   Copyright 1993, 1995, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008,
+   2010, 2011, 2012
    Free Software Foundation, Inc.
 
    Full i860 support contributed by Jason Eckhardt <jle at cygnus.com>.
@@ -1128,9 +1129,9 @@ elf32_i860_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 				   unresolved_reloc, warned);
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
diff --git a/bfd/elf32-i960.c b/bfd/elf32-i960.c
index 6112e3f..bb03897 100644
--- a/bfd/elf32-i960.c
+++ b/bfd/elf32-i960.c
@@ -1,5 +1,5 @@
 /* Intel 960 specific support for 32-bit ELF
-   Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2007
+   Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -47,7 +47,7 @@ static bfd_reloc_status_type
 elf32_i960_relocate (bfd *abfd ATTRIBUTE_UNUSED,
 		     arelent *reloc_entry,
 		     asymbol *symbol,
-		     PTR data ATTRIBUTE_UNUSED,
+		     void * data ATTRIBUTE_UNUSED,
 		     asection *input_section,
 		     bfd *output_bfd,
 		     char **error_message ATTRIBUTE_UNUSED)
diff --git a/bfd/elf32-ip2k.c b/bfd/elf32-ip2k.c
index 0a251b8..d696a27 100644
--- a/bfd/elf32-ip2k.c
+++ b/bfd/elf32-ip2k.c
@@ -1,5 +1,5 @@
 /* Ubicom IP2xxx specific support for 32-bit ELF
-   Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
+   Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -1436,9 +1436,9 @@ ip2k_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 	  name = h->root.root.string;
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
diff --git a/bfd/elf32-iq2000.c b/bfd/elf32-iq2000.c
index 63ef3dc..079a962 100644
--- a/bfd/elf32-iq2000.c
+++ b/bfd/elf32-iq2000.c
@@ -1,5 +1,5 @@
 /* IQ2000-specific support for 32-bit ELF.
-   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
+   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -633,9 +633,9 @@ iq2000_elf_relocate_section (bfd *		     output_bfd ATTRIBUTE_UNUSED,
 	  name = h->root.root.string;
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
diff --git a/bfd/elf32-lm32.c b/bfd/elf32-lm32.c
index 07add20..8d530a4 100644
--- a/bfd/elf32-lm32.c
+++ b/bfd/elf32-lm32.c
@@ -1,5 +1,5 @@
 /* Lattice Mico32-specific support for 32-bit ELF
-   Copyright 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+   Copyright 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
    Contributed by Jon Beniston <jon at beniston.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -19,8 +19,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include "bfd.h"
 #include "sysdep.h"
+#include "bfd.h"
 #include "libbfd.h"
 #include "elf-bfd.h"
 #include "elf/lm32.h"
@@ -217,8 +217,8 @@ create_got_section (bfd *dynobj, struct bfd_link_info *info)
   asection *s;
 
   /* This function may be called more than once.  */
-  s = bfd_get_section_by_name (dynobj, ".got");
-  if (s != NULL && (s->flags & SEC_LINKER_CREATED) != 0)
+  s = bfd_get_linker_section (dynobj, ".got");
+  if (s != NULL)
     return TRUE;
 
   htab = lm32_elf_hash_table (info);
@@ -228,9 +228,9 @@ create_got_section (bfd *dynobj, struct bfd_link_info *info)
   if (! _bfd_elf_create_got_section (dynobj, info))
     return FALSE;
 
-  htab->sgot = bfd_get_section_by_name (dynobj, ".got");
-  htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
-  htab->srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+  htab->sgot = bfd_get_linker_section (dynobj, ".got");
+  htab->sgotplt = bfd_get_linker_section (dynobj, ".got.plt");
+  htab->srelgot = bfd_get_linker_section (dynobj, ".rela.got");
   if (! htab->sgot || ! htab->sgotplt || ! htab->srelgot)
     abort ();
 
@@ -250,16 +250,18 @@ create_rofixup_section (bfd *dynobj, struct bfd_link_info *info)
     return FALSE;
 
   /* Fixup section for R_LM32_32 relocs.  */
-  lm32fdpic_fixup32_section (info) = bfd_make_section_with_flags (dynobj,
-                                                                   ".rofixup",
-				                                   (SEC_ALLOC
-                                                                   | SEC_LOAD
-                                                                   | SEC_HAS_CONTENTS
-                                                                   | SEC_IN_MEMORY
-	                                                           | SEC_LINKER_CREATED
-                                                                   | SEC_READONLY));
+  lm32fdpic_fixup32_section (info)
+    = bfd_make_section_anyway_with_flags (dynobj,
+					  ".rofixup",
+					  (SEC_ALLOC
+					   | SEC_LOAD
+					   | SEC_HAS_CONTENTS
+					   | SEC_IN_MEMORY
+					   | SEC_LINKER_CREATED
+					   | SEC_READONLY));
   if (lm32fdpic_fixup32_section (info) == NULL
-      || ! bfd_set_section_alignment (dynobj, lm32fdpic_fixup32_section (info), 2))
+      || ! bfd_set_section_alignment (dynobj,
+				      lm32fdpic_fixup32_section (info), 2))
     return FALSE;
 
   return TRUE;
@@ -893,9 +895,9 @@ lm32_elf_relocate_section (bfd *output_bfd,
 	  name = h->root.root.string;
         }
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
         {
@@ -1031,7 +1033,8 @@ lm32_elf_relocate_section (bfd *output_bfd,
 
                           /* We need to generate a R_LM32_RELATIVE reloc
                              for the dynamic linker.  */
-                          srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+                          srelgot = bfd_get_linker_section (dynobj,
+							    ".rela.got");
                           BFD_ASSERT (srelgot != NULL);
 
                           outrel.r_offset = (sgot->output_section->vma
@@ -1346,7 +1349,7 @@ lm32_elf_check_relocs (bfd *abfd,
               /* Create .rofixup section */
               if (htab->sfixup32 == NULL)
                 {
-                  if (! create_rofixup_section (abfd, info))
+                  if (! create_rofixup_section (dynobj, info))
                     return FALSE;
                 }
               break;
@@ -1356,7 +1359,9 @@ lm32_elf_check_relocs (bfd *abfd,
               /* Create .rofixup section.  */
               if (htab->sfixup32 == NULL)
                 {
-                  if (! create_rofixup_section (abfd, info))
+		  if (dynobj == NULL)
+		    htab->root.dynobj = dynobj = abfd;
+                  if (! create_rofixup_section (dynobj, info))
                     return FALSE;
                 }
               break;
@@ -1427,7 +1432,7 @@ lm32_elf_finish_dynamic_sections (bfd *output_bfd,
   dynobj = htab->root.dynobj;
 
   sgot = htab->sgotplt;
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (htab->root.dynamic_sections_created)
     {
@@ -1725,8 +1730,7 @@ lm32_elf_finish_dynamic_symbol (bfd *output_bfd,
                   && (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");
+      s = bfd_get_linker_section (htab->root.dynobj, ".rela.bss");
       BFD_ASSERT (s != NULL);
 
       rela.r_offset = (h->root.u.def.value
@@ -1863,13 +1867,6 @@ lm32_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
       return TRUE;
     }
 
-  if (h->size == 0)
-    {
-      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
-			     h->root.root.string);
-      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
@@ -1891,7 +1888,7 @@ lm32_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
      to copy the initial value out of the dynamic object and into the
      runtime process image.  We need to remember the offset into the
      .rela.bss section we are going to use.  */
-  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
       asection *srel;
 
@@ -2146,7 +2143,7 @@ lm32_elf_size_dynamic_sections (bfd *output_bfd,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  BFD_ASSERT (s != NULL);
 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
@@ -2372,7 +2369,7 @@ lm32_elf_size_dynamic_sections (bfd *output_bfd,
                           /* Don't generate entries for weak symbols.  */
                           if (!h || (h && h->root.type != bfd_link_hash_undefweak))
                             {
-                              if (!elf_discarded_section (s) && !((bfd_get_section_flags (ibfd, s) & SEC_ALLOC) == 0))
+                              if (!discarded_section (s) && !((bfd_get_section_flags (ibfd, s) & SEC_ALLOC) == 0))
                                 {
                                   switch (ELF32_R_TYPE (internal_relocs->r_info))
                                     {
@@ -2394,7 +2391,7 @@ lm32_elf_size_dynamic_sections (bfd *output_bfd,
                                   if (!strcmp (current->name, h->root.root.string))
                                     break;
                                 }
-                              if (!current && !elf_discarded_section (s) && (bfd_get_section_flags (ibfd, s) & SEC_ALLOC))
+                              if (!current && !discarded_section (s) && (bfd_get_section_flags (ibfd, s) & SEC_ALLOC))
                                 {
                                   /* Will this have an entry in the GOT.  */
                                   if (ELF32_R_TYPE (internal_relocs->r_info) == R_LM32_16_GOT)
@@ -2490,7 +2487,7 @@ lm32_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
   if (bed->plt_readonly)
     pltflags |= SEC_READONLY;
 
-  s = bfd_make_section_with_flags (abfd, ".plt", pltflags);
+  s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
   htab->splt = s;
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
@@ -2518,9 +2515,10 @@ lm32_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
         return FALSE;
     }
 
-  s = bfd_make_section_with_flags (abfd,
-				   bed->default_use_rela_p ? ".rela.plt" : ".rel.plt",
-				   flags | SEC_READONLY);
+  s = bfd_make_section_anyway_with_flags (abfd,
+					  bed->default_use_rela_p
+					  ? ".rela.plt" : ".rel.plt",
+					  flags | SEC_READONLY);
   htab->srelplt = s;
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, ptralign))
@@ -2530,32 +2528,6 @@ lm32_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
       && ! create_got_section (abfd, info))
     return FALSE;
 
-  {
-    const char *secname;
-    char *relname;
-    flagword secflags;
-    asection *sec;
-
-    for (sec = abfd->sections; sec; sec = sec->next)
-      {
-        secflags = bfd_get_section_flags (abfd, sec);
-        if ((secflags & (SEC_DATA | SEC_LINKER_CREATED))
-            || ((secflags & SEC_HAS_CONTENTS) != SEC_HAS_CONTENTS))
-          continue;
-        secname = bfd_get_section_name (abfd, sec);
-        relname = bfd_malloc ((bfd_size_type) strlen (secname) + 6);
-        strcpy (relname, ".rela");
-        strcat (relname, secname);
-        if (bfd_get_section_by_name (abfd, secname))
-          continue;
-        s = bfd_make_section_with_flags (abfd, relname,
-					 flags | SEC_READONLY);
-        if (s == NULL
-            || ! bfd_set_section_alignment (abfd, s, ptralign))
-          return FALSE;
-      }
-  }
-
   if (bed->want_dynbss)
     {
       /* The .dynbss section is a place to put symbols which are defined
@@ -2564,8 +2536,8 @@ lm32_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
          image and use a R_*_COPY reloc to tell the dynamic linker to
          initialize them at run time.  The linker script puts the .dynbss
          section into the .bss section of the final image.  */
-      s = bfd_make_section_with_flags (abfd, ".dynbss",
-				       SEC_ALLOC | SEC_LINKER_CREATED);
+      s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
+					      SEC_ALLOC | SEC_LINKER_CREATED);
       htab->sdynbss = s;
       if (s == NULL)
         return FALSE;
@@ -2582,10 +2554,10 @@ lm32_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
          copy relocs.  */
       if (! info->shared)
         {
-          s = bfd_make_section_with_flags (abfd,
-					   (bed->default_use_rela_p
-					    ? ".rela.bss" : ".rel.bss"),
-					   flags | SEC_READONLY);
+          s = bfd_make_section_anyway_with_flags (abfd,
+						  (bed->default_use_rela_p
+						   ? ".rela.bss" : ".rel.bss"),
+						  flags | SEC_READONLY);
           htab->srelbss = s;
           if (s == NULL
               || ! bfd_set_section_alignment (abfd, s, ptralign))
diff --git a/bfd/elf32-m32c.c b/bfd/elf32-m32c.c
index cf7ad99..b2b12ca 100644
--- a/bfd/elf32-m32c.c
+++ b/bfd/elf32-m32c.c
@@ -1,5 +1,5 @@
 /* M16C/M32C specific support for 32-bit ELF.
-   Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -362,7 +362,7 @@ m32c_elf_relocate_section
   dynobj = elf_hash_table (info)->dynobj;
   splt = NULL;
   if (dynobj != NULL)
-    splt = bfd_get_section_by_name (dynobj, ".plt");
+    splt = bfd_get_linker_section (dynobj, ".plt");
 
   for (rel = relocs; rel < relend; rel ++)
     {
@@ -434,9 +434,9 @@ m32c_elf_relocate_section
 	    }
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	{
@@ -633,13 +633,14 @@ m32c_elf_check_relocs
 	    elf_hash_table (info)->dynobj = dynobj = abfd;
 	  if (splt == NULL)
 	    {
-	      splt = bfd_get_section_by_name (dynobj, ".plt");
+	      splt = bfd_get_linker_section (dynobj, ".plt");
 	      if (splt == NULL)
 		{
 		  flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
 				    | SEC_IN_MEMORY | SEC_LINKER_CREATED
 				    | SEC_READONLY | SEC_CODE);
-		  splt = bfd_make_section_with_flags (dynobj, ".plt", flags);
+		  splt = bfd_make_section_anyway_with_flags (dynobj, ".plt",
+							     flags);
 		  if (splt == NULL
 		      || ! bfd_set_section_alignment (dynobj, splt, 1))
 		    return FALSE;
@@ -692,7 +693,7 @@ m32c_elf_finish_dynamic_sections (bfd *abfd ATTRIBUTE_UNUSED,
      been filled in.  */
 
   if ((dynobj = elf_hash_table (info)->dynobj) != NULL
-      && (splt = bfd_get_section_by_name (dynobj, ".plt")) != NULL)
+      && (splt = bfd_get_linker_section (dynobj, ".plt")) != NULL)
     {
       bfd_byte *contents = splt->contents;
       unsigned int i, size = splt->size;
@@ -720,7 +721,7 @@ m32c_elf_always_size_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
   if (dynobj == NULL)
     return TRUE;
 
-  splt = bfd_get_section_by_name (dynobj, ".plt");
+  splt = bfd_get_linker_section (dynobj, ".plt");
   BFD_ASSERT (splt != NULL);
 
   splt->contents = (bfd_byte *) bfd_zalloc (dynobj, splt->size);
@@ -829,7 +830,7 @@ m32c_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
 
 

 static bfd_boolean
-m32c_elf_print_private_bfd_data (bfd *abfd, PTR ptr)
+m32c_elf_print_private_bfd_data (bfd *abfd, void *ptr)
 {
   FILE *file = (FILE *) ptr;
   flagword flags;
@@ -984,8 +985,7 @@ struct relax_plt_data
 };
 
 static bfd_boolean
-m32c_relax_plt_check (struct elf_link_hash_entry *h,
-                      PTR xdata)
+m32c_relax_plt_check (struct elf_link_hash_entry *h, void * xdata)
 {
   struct relax_plt_data *data = (struct relax_plt_data *) xdata;
 
@@ -1016,8 +1016,7 @@ m32c_relax_plt_check (struct elf_link_hash_entry *h,
    previously had a plt entry, give it a new entry offset.  */
 
 static bfd_boolean
-m32c_relax_plt_realloc (struct elf_link_hash_entry *h,
-                        PTR xdata)
+m32c_relax_plt_realloc (struct elf_link_hash_entry *h, void * xdata)
 {
   bfd_vma *entry = (bfd_vma *) xdata;
 
@@ -1031,8 +1030,7 @@ m32c_relax_plt_realloc (struct elf_link_hash_entry *h,
 }
 
 static bfd_boolean
-m32c_elf_relax_plt_section (bfd *dynobj,
-                            asection *splt,
+m32c_elf_relax_plt_section (asection *splt,
                             struct bfd_link_info *info,
                             bfd_boolean *again)
 {
@@ -1045,11 +1043,6 @@ m32c_elf_relax_plt_section (bfd *dynobj,
   if (info->relocatable)
     return TRUE;
 
-  /* We only relax the .plt section at the moment.  */
-  if (dynobj != elf_hash_table (info)->dynobj
-      || strcmp (splt->name, ".plt") != 0)
-    return TRUE;
-
   /* Quick check for an empty plt.  */
   if (splt->size == 0)
     return TRUE;
@@ -1337,8 +1330,9 @@ m32c_elf_relax_section
   int machine;
 
   if (abfd == elf_hash_table (link_info)->dynobj
+      && (sec->flags & SEC_LINKER_CREATED) != 0
       && strcmp (sec->name, ".plt") == 0)
-    return m32c_elf_relax_plt_section (abfd, sec, link_info, again);
+    return m32c_elf_relax_plt_section (sec, link_info, again);
 
   /* Assume nothing changes.  */
   *again = FALSE;
@@ -1386,14 +1380,14 @@ m32c_elf_relax_section
       if (shndx_buf == NULL)
 	goto error_return;
       if (bfd_seek (abfd, shndx_hdr->sh_offset, SEEK_SET) != 0
-	  || bfd_bread ((PTR) shndx_buf, amt, abfd) != amt)
+	  || bfd_bread (shndx_buf, amt, abfd) != amt)
 	goto error_return;
       shndx_hdr->contents = (bfd_byte *) shndx_buf;
     }
 
   /* Get a copy of the native relocations.  */
   internal_relocs = (_bfd_elf_link_read_relocs
-		     (abfd, sec, (PTR) NULL, (Elf_Internal_Rela *) NULL,
+		     (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
 		      link_info->keep_memory));
   if (internal_relocs == NULL)
     goto error_return;
diff --git a/bfd/elf32-m32r.c b/bfd/elf32-m32r.c
index 37d995d..e3e3bb0 100644
--- a/bfd/elf32-m32r.c
+++ b/bfd/elf32-m32r.c
@@ -1,6 +1,6 @@
 /* M32R-specific support for 32-bit ELF.
    Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-   2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+   2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -1625,9 +1625,9 @@ create_got_section (bfd *dynobj, struct bfd_link_info *info)
   if (htab == NULL)
     return FALSE;
 
-  htab->sgot = bfd_get_section_by_name (dynobj, ".got");
-  htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
-  htab->srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+  htab->sgot = bfd_get_linker_section (dynobj, ".got");
+  htab->sgotplt = bfd_get_linker_section (dynobj, ".got.plt");
+  htab->srelgot = bfd_get_linker_section (dynobj, ".rela.got");
   if (! htab->sgot || ! htab->sgotplt || ! htab->srelgot)
     abort ();
 
@@ -1661,7 +1661,7 @@ m32r_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
   if (bed->plt_readonly)
     pltflags |= SEC_READONLY;
 
-  s = bfd_make_section_with_flags (abfd, ".plt", pltflags);
+  s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
   htab->splt = s;
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
@@ -1689,9 +1689,10 @@ m32r_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
         return FALSE;
     }
 
-  s = bfd_make_section_with_flags (abfd,
-				   bed->default_use_rela_p ? ".rela.plt" : ".rel.plt",
-				   flags | SEC_READONLY);
+  s = bfd_make_section_anyway_with_flags (abfd,
+					  bed->default_use_rela_p
+					  ? ".rela.plt" : ".rel.plt",
+					  flags | SEC_READONLY);
   htab->srelplt = s;
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, ptralign))
@@ -1701,32 +1702,6 @@ m32r_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
       && ! create_got_section (abfd, info))
     return FALSE;
 
-  {
-    const char *secname;
-    char *relname;
-    flagword secflags;
-    asection *sec;
-
-    for (sec = abfd->sections; sec; sec = sec->next)
-      {
-        secflags = bfd_get_section_flags (abfd, sec);
-        if ((secflags & (SEC_DATA | SEC_LINKER_CREATED))
-            || ((secflags & SEC_HAS_CONTENTS) != SEC_HAS_CONTENTS))
-          continue;
-        secname = bfd_get_section_name (abfd, sec);
-        relname = bfd_malloc ((bfd_size_type) strlen (secname) + 6);
-        strcpy (relname, ".rela");
-        strcat (relname, secname);
-        if (bfd_get_section_by_name (abfd, secname))
-          continue;
-        s = bfd_make_section_with_flags (abfd, relname,
-					 flags | SEC_READONLY);
-        if (s == NULL
-            || ! bfd_set_section_alignment (abfd, s, ptralign))
-          return FALSE;
-      }
-  }
-
   if (bed->want_dynbss)
     {
       /* The .dynbss section is a place to put symbols which are defined
@@ -1735,8 +1710,8 @@ m32r_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
          image and use a R_*_COPY reloc to tell the dynamic linker to
          initialize them at run time.  The linker script puts the .dynbss
          section into the .bss section of the final image.  */
-      s = bfd_make_section_with_flags (abfd, ".dynbss",
-				       SEC_ALLOC | SEC_LINKER_CREATED);
+      s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
+					      SEC_ALLOC | SEC_LINKER_CREATED);
       htab->sdynbss = s;
       if (s == NULL)
         return FALSE;
@@ -1753,10 +1728,10 @@ m32r_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
          copy relocs.  */
       if (! info->shared)
         {
-          s = bfd_make_section_with_flags (abfd,
-					   (bed->default_use_rela_p
-					    ? ".rela.bss" : ".rel.bss"),
-					   flags | SEC_READONLY);
+          s = bfd_make_section_anyway_with_flags (abfd,
+						  (bed->default_use_rela_p
+						   ? ".rela.bss" : ".rel.bss"),
+						  flags | SEC_READONLY);
           htab->srelbss = s;
           if (s == NULL
               || ! bfd_set_section_alignment (abfd, s, ptralign))
@@ -1922,13 +1897,6 @@ m32r_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
       return TRUE;
     }
 
-  if (h->size == 0)
-    {
-      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
-			     h->root.root.string);
-      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
@@ -1950,7 +1918,7 @@ m32r_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
      to copy the initial value out of the dynamic object and into the
      runtime process image.  We need to remember the offset into the
      .rela.bss section we are going to use.  */
-  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
       asection *srel;
 
@@ -2209,7 +2177,7 @@ m32r_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  BFD_ASSERT (s != NULL);
 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
@@ -2620,9 +2588,9 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 	    }
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable && !use_rel)
 	{
@@ -2821,7 +2789,8 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 
                           /* We need to generate a R_M32R_RELATIVE reloc
                              for the dynamic linker.  */
-                          srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+                          srelgot = bfd_get_linker_section (dynobj,
+							    ".rela.got");
                           BFD_ASSERT (srelgot != NULL);
 
                           outrel.r_offset = (sgot->output_section->vma
@@ -3014,7 +2983,7 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 		const char *name;
 
 		BFD_ASSERT (sec != NULL);
-		name = bfd_get_section_name (abfd, sec);
+		name = bfd_get_section_name (sec->owner, sec);
 
 		if (   strcmp (name, ".sdata") == 0
 		    || strcmp (name, ".sbss") == 0
@@ -3311,8 +3280,7 @@ m32r_elf_finish_dynamic_symbol (bfd *output_bfd,
                   && (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");
+      s = bfd_get_linker_section (htab->root.dynobj, ".rela.bss");
       BFD_ASSERT (s != NULL);
 
       rela.r_offset = (h->root.u.def.value
@@ -3357,7 +3325,7 @@ m32r_elf_finish_dynamic_sections (bfd *output_bfd,
   dynobj = htab->root.dynobj;
 
   sgot = htab->sgotplt;
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (htab->root.dynamic_sections_created)
     {
diff --git a/bfd/elf32-m68hc11.c b/bfd/elf32-m68hc11.c
index 63d0786..b28579e 100644
--- a/bfd/elf32-m68hc11.c
+++ b/bfd/elf32-m68hc11.c
@@ -1,5 +1,5 @@
 /* Motorola 68HC11-specific support for 32-bit ELF
-   Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2010
+   Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2010, 2012
    Free Software Foundation, Inc.
    Contributed by Stephane Carrez (stcarrez at nerim.fr)
    (Heavily copied from the D10V port by Martin Hunt (hunt at cygnus.com))
@@ -703,7 +703,7 @@ m68hc11_elf_relax_section (bfd *abfd, asection *sec,
 
   /* Get a copy of the native relocations.  */
   internal_relocs = (_bfd_elf_link_read_relocs
-		     (abfd, sec, (PTR) NULL, (Elf_Internal_Rela *) NULL,
+		     (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
 		      link_info->keep_memory));
   if (internal_relocs == NULL)
     goto error_return;
@@ -1302,6 +1302,7 @@ static const struct bfd_elf_special_section elf32_m68hc11_special_sections[] =
 #define elf_backend_final_write_processing	0
 #define elf_backend_can_gc_sections		1
 #define elf_backend_special_sections  elf32_m68hc11_special_sections
+#define elf_backend_merge_symbol_attribute elf32_m68hc11_merge_symbol_attribute
 
 #define bfd_elf32_bfd_link_hash_table_create \
                                 m68hc11_elf_bfd_link_hash_table_create
diff --git a/bfd/elf32-m68hc12.c b/bfd/elf32-m68hc12.c
index 1788856..2b5a1b3 100644
--- a/bfd/elf32-m68hc12.c
+++ b/bfd/elf32-m68hc12.c
@@ -1,5 +1,5 @@
 /* Motorola 68HC12-specific support for 32-bit ELF
-   Copyright 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007
+   Copyright 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2010, 2012
    Free Software Foundation, Inc.
    Contributed by Stephane Carrez (stcarrez at nerim.fr)
    (Heavily copied from the D10V port by Martin Hunt (hunt at cygnus.com))
@@ -37,14 +37,7 @@ static void m68hc11_info_to_howto_rel
   (bfd *, arelent *, Elf_Internal_Rela *);
 
 /* Trampoline generation.  */
-static bfd_boolean m68hc12_elf_size_one_stub
-  (struct bfd_hash_entry *gen_entry, void *in_arg);
-static bfd_boolean m68hc12_elf_build_one_stub
-  (struct bfd_hash_entry *gen_entry, void *in_arg);
-static struct bfd_link_hash_table* m68hc12_elf_bfd_link_hash_table_create
-  (bfd*);
 
-static bfd_boolean m68hc12_elf_set_mach_from_flags PARAMS ((bfd *));
 
 /* Use REL instead of RELA to save space */
 #define USE_REL	1
@@ -324,11 +317,81 @@ static reloc_howto_type elf_m68hc11_howto_table[] = {
 	 FALSE),		/* pcrel_offset */
 
   EMPTY_HOWTO (14),
-  EMPTY_HOWTO (15),
-  EMPTY_HOWTO (16),
-  EMPTY_HOWTO (17),
-  EMPTY_HOWTO (18),
-  EMPTY_HOWTO (19),
+
+  /* A 16 bit absolute relocation.  */
+  HOWTO (R_M68HC12_16B,		/* type */
+	 0,			/* rightshift */
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_M68HC12_16B",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0xffff,			/* src_mask */
+	 0xffff,			/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* A 9 bit PC-rel relocation.  */
+  HOWTO (R_M68HC12_PCREL_9,	/* type */
+	 1,			/* rightshift */
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 10,			/* bitsize (result is >>1) */
+	 TRUE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_M68HC12_PCREL_9",	/* name */
+	 TRUE,			/* partial_inplace */
+	 0xfe00,		/* src_mask */
+	 0x01ff,		/* dst_mask */
+	 TRUE),                 /* pcrel_offset */
+
+  /* A 10 bit PC-rel relocation.  */
+  HOWTO (R_M68HC12_PCREL_10,	/* type */
+	 1,			/* rightshift */
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 11,			/* bitsize (result is >>1) */
+	 TRUE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_M68HC12_PCREL_10",	/* name */
+	 TRUE,			/* partial_inplace */
+	 0xfc00,		/* src_mask */
+	 0x03ff,		/* dst_mask */
+	 TRUE),                 /* pcrel_offset */
+
+  /* A 8 bit absolute relocation (upper address).  */
+  HOWTO (R_M68HC12_HI8XG,		/* type */
+	 8,			/* rightshift */
+	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_M68HC12_HI8XG",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0x00ff,		/* src_mask */
+	 0x00ff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* A 8 bit absolute relocation (lower address).  */
+  HOWTO (R_M68HC12_LO8XG,		/* type */
+	 8,			/* rightshift */
+	 0,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_M68HC12_LO8XG",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0x00ff,		/* src_mask */
+	 0x00ff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
 
   /* Mark beginning of a jump instruction (any form).  */
   HOWTO (R_M68HC11_RL_JUMP,	/* type */
@@ -369,7 +432,8 @@ struct m68hc11_reloc_map
   unsigned char elf_reloc_val;
 };
 
-static const struct m68hc11_reloc_map m68hc11_reloc_map[] = {
+static const struct m68hc11_reloc_map m68hc11_reloc_map[] =
+{
   {BFD_RELOC_NONE, R_M68HC11_NONE,},
   {BFD_RELOC_8, R_M68HC11_8},
   {BFD_RELOC_M68HC11_HI8, R_M68HC11_HI8},
@@ -389,6 +453,13 @@ static const struct m68hc11_reloc_map m68hc11_reloc_map[] = {
 
   {BFD_RELOC_M68HC11_RL_JUMP, R_M68HC11_RL_JUMP},
   {BFD_RELOC_M68HC11_RL_GROUP, R_M68HC11_RL_GROUP},
+
+  {BFD_RELOC_M68HC12_16B, R_M68HC12_16B},
+
+  {BFD_RELOC_M68HC12_9_PCREL, R_M68HC12_PCREL_9},
+  {BFD_RELOC_M68HC12_10_PCREL, R_M68HC12_PCREL_10},
+  {BFD_RELOC_M68HC12_HI8XG, R_M68HC12_HI8XG},
+  {BFD_RELOC_M68HC12_LO8XG, R_M68HC12_LO8XG},
 };
 
 static reloc_howto_type *
@@ -581,6 +652,7 @@ static const struct bfd_elf_special_section elf32_m68hc12_special_sections[] =
 #define elf_backend_special_sections elf32_m68hc12_special_sections
 #define elf_backend_post_process_headers     elf32_m68hc11_post_process_headers
 #define elf_backend_add_symbol_hook  elf32_m68hc11_add_symbol_hook
+#define elf_backend_merge_symbol_attribute elf32_m68hc11_merge_symbol_attribute
 
 #define bfd_elf32_bfd_link_hash_table_create \
                                 m68hc12_elf_bfd_link_hash_table_create
diff --git a/bfd/elf32-m68hc1x.c b/bfd/elf32-m68hc1x.c
index 961dce4..d862c9f 100644
--- a/bfd/elf32-m68hc1x.c
+++ b/bfd/elf32-m68hc1x.c
@@ -1,6 +1,6 @@
 /* Motorola 68HC11/HC12-specific support for 32-bit ELF
    Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
-   2009, 2010, 2011  Free Software Foundation, Inc.
+   2009, 2010, 2011, 2012 Free Software Foundation, Inc.
    Contributed by Stephane Carrez (stcarrez at nerim.fr)
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -20,8 +20,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include "alloca-conf.h"
 #include "sysdep.h"
+#include "alloca-conf.h"
 #include "bfd.h"
 #include "bfdlink.h"
 #include "libbfd.h"
@@ -50,7 +50,7 @@ static void m68hc11_elf_set_symbol (bfd* abfd, struct bfd_link_info *info,
 static bfd_boolean m68hc11_elf_export_one_stub
   (struct bfd_hash_entry *gen_entry, void *in_arg);
 
-static void scan_sections_for_abi (bfd*, asection*, PTR);
+static void scan_sections_for_abi (bfd*, asection*, void *);
 
 struct m68hc11_scan_param
 {
@@ -214,6 +214,20 @@ elf32_m68hc11_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
   return TRUE;
 }
 
+/* Merge non-visibility st_other attributes, STO_M68HC12_FAR and
+   STO_M68HC12_INTERRUPT.  */
+
+void
+elf32_m68hc11_merge_symbol_attribute (struct elf_link_hash_entry *h,
+				      const Elf_Internal_Sym *isym,
+				      bfd_boolean definition,
+				      bfd_boolean dynamic ATTRIBUTE_UNUSED)
+{
+  if (definition)
+    h->other = ((isym->st_other & ~ELF_ST_VISIBILITY (-1))
+		| ELF_ST_VISIBILITY (h->other));
+}
+
 /* External entry points for sizing and building linker stubs.  */
 
 /* Set up various things so that we can make a list of input sections
@@ -935,6 +949,7 @@ elf32_m68hc11_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
       bfd_vma insn_page;
       bfd_boolean is_far = FALSE;
       struct elf_link_hash_entry *h;
+      bfd_vma val;
 
       r_symndx = ELF32_R_SYM (rel->r_info);
       r_type = ELF32_R_TYPE (rel->r_info);
@@ -970,9 +985,9 @@ elf32_m68hc11_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 	  is_far = (h && (h->other & STO_M68HC12_FAR));
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	{
@@ -1015,6 +1030,50 @@ elf32_m68hc11_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
       phys_page = m68hc11_phys_page (pinfo, relocation + rel->r_addend);
       switch (r_type)
         {
+        case R_M68HC12_LO8XG:
+          /* This relocation is specific to XGATE IMM16 calls and will precede
+	     a HI8. tc-m68hc11 only generates them in pairs.
+	     Leave the relocation to the HI8XG step.  */
+          r = bfd_reloc_ok;
+          r_type = R_M68HC11_NONE;
+          break;
+
+        case R_M68HC12_HI8XG:
+          /* This relocation is specific to XGATE IMM16 calls and must follow
+             a LO8XG. Does not actually check that it was a LO8XG.
+	     Adjusts high and low bytes.  */
+          relocation = phys_addr;
+          if ((elf_elfheader (input_bfd)->e_flags & E_M68HC11_XGATE_RAMOFFSET)
+	      && (relocation >= 0x2000))
+	    relocation += 0xc000; /* HARDCODED RAM offset for XGATE.  */
+
+          /* Fetch 16 bit value including low byte in previous insn.  */
+          val = (bfd_get_8 (input_bfd, (bfd_byte*) contents + rel->r_offset) << 8)
+	    | bfd_get_8 (input_bfd, (bfd_byte*) contents + rel->r_offset - 2);
+
+          /* Add on value to preserve carry, then write zero to high byte.  */
+          relocation += val;
+
+          /* Write out top byte.  */
+          bfd_put_8 (input_bfd, (relocation >> 8) & 0xff,
+		     (bfd_byte*) contents + rel->r_offset);
+
+          /* Write out low byte to previous instruction.  */
+          bfd_put_8 (input_bfd, relocation & 0xff,
+		     (bfd_byte*) contents + rel->r_offset - 2);
+
+          /* Mark as relocation completed.  */
+          r = bfd_reloc_ok;
+          r_type = R_M68HC11_NONE;
+          break;
+
+        /* The HI8 and LO8 relocs are generated by %hi(expr) %lo(expr)
+           assembler directives. %hi does not support carry.  */
+        case R_M68HC11_HI8:
+        case R_M68HC11_LO8:
+          relocation = phys_addr;
+          break;
+
         case R_M68HC11_24:
           /* Reloc used by 68HC12 call instruction.  */
           bfd_put_16 (input_bfd, phys_addr,
@@ -1109,10 +1168,18 @@ elf32_m68hc11_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
             relocation = phys_addr;
           break;
         }
+
       if (r_type != R_M68HC11_NONE)
-        r = _bfd_final_link_relocate (howto, input_bfd, input_section,
+        {
+          if ((r_type == R_M68HC12_PCREL_9) || (r_type == R_M68HC12_PCREL_10))
+            r = _bfd_final_link_relocate (howto, input_bfd, input_section,
                                       contents, rel->r_offset,
-                                      relocation, rel->r_addend);
+                                      relocation - 2, rel->r_addend);
+          else
+            r = _bfd_final_link_relocate (howto, input_bfd, input_section,
+                                          contents, rel->r_offset,
+                                          relocation, rel->r_addend);
+        }
 
       if (r != bfd_reloc_ok)
 	{
@@ -1303,6 +1370,9 @@ _bfd_m68hc11_elf_print_private_bfd_data (bfd *abfd, void *ptr)
   else
     fprintf (file, _(" [memory=flat]"));
 
+  if (elf_elfheader (abfd)->e_flags & E_M68HC11_XGATE_RAMOFFSET)
+    fprintf (file, _(" [XGATE RAM offsetting]"));
+
   fputc ('\n', file);
 
   return TRUE;
diff --git a/bfd/elf32-m68hc1x.h b/bfd/elf32-m68hc1x.h
index 317371f..34b788e 100644
--- a/bfd/elf32-m68hc1x.h
+++ b/bfd/elf32-m68hc1x.h
@@ -1,5 +1,5 @@
 /* Motorola 68HC11/68HC12-specific support for 32-bit ELF
-   Copyright 2003, 2004, 2005, 2006, 2007, 2009, 2010
+   Copyright 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2012
    Free Software Foundation, Inc.
    Contributed by Stephane Carrez (stcarrez at nerim.fr)
 
@@ -176,6 +176,10 @@ bfd_boolean elf32_m68hc11_add_symbol_hook
    flagword *flagsp, asection **secp,
    bfd_vma *valp);
 
+void elf32_m68hc11_merge_symbol_attribute
+  (struct elf_link_hash_entry *, const Elf_Internal_Sym *,
+   bfd_boolean, bfd_boolean);
+
 /* Tweak the OSABI field of the elf header.  */
 
 extern void elf32_m68hc11_post_process_headers (bfd*, struct bfd_link_info*);
diff --git a/bfd/elf32-m68k.c b/bfd/elf32-m68k.c
index bd660e9..6946841 100644
--- a/bfd/elf32-m68k.c
+++ b/bfd/elf32-m68k.c
@@ -1,6 +1,6 @@
 /* Motorola 68k series support for 32-bit ELF
    Copyright 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-   2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -28,42 +28,11 @@
 #include "elf/m68k.h"
 #include "opcode/m68k.h"
 
-static reloc_howto_type *reloc_type_lookup
-  PARAMS ((bfd *, bfd_reloc_code_real_type));
-static void rtype_to_howto
-  PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
-static struct bfd_hash_entry *elf_m68k_link_hash_newfunc
-  PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
-static struct bfd_link_hash_table *elf_m68k_link_hash_table_create
-  PARAMS ((bfd *));
-static bfd_boolean elf_m68k_check_relocs
-  PARAMS ((bfd *, struct bfd_link_info *, asection *,
-	   const Elf_Internal_Rela *));
-static bfd_boolean elf_m68k_adjust_dynamic_symbol
-  PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *));
-static bfd_boolean elf_m68k_size_dynamic_sections
-  PARAMS ((bfd *, struct bfd_link_info *));
-static bfd_boolean elf_m68k_discard_copies
-  PARAMS ((struct elf_link_hash_entry *, PTR));
-static bfd_boolean elf_m68k_relocate_section
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
-	   Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
-static bfd_boolean elf_m68k_finish_dynamic_symbol
-  PARAMS ((bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
-	   Elf_Internal_Sym *));
-static bfd_boolean elf_m68k_finish_dynamic_sections
-  PARAMS ((bfd *, struct bfd_link_info *));
-
-static bfd_boolean elf32_m68k_set_private_flags
-  PARAMS ((bfd *, flagword));
-static bfd_boolean elf32_m68k_merge_private_bfd_data
-  PARAMS ((bfd *, bfd *));
-static bfd_boolean elf32_m68k_print_private_bfd_data
-  PARAMS ((bfd *, PTR));
-static enum elf_reloc_type_class elf32_m68k_reloc_type_class
-  PARAMS ((const Elf_Internal_Rela *));
-
-static reloc_howto_type howto_table[] = {
+static bfd_boolean
+elf_m68k_discard_copies (struct elf_link_hash_entry *, void *);
+
+static reloc_howto_type howto_table[] =
+{
   HOWTO(R_68K_NONE,       0, 0, 0, FALSE,0, complain_overflow_dont,     bfd_elf_generic_reloc, "R_68K_NONE",      FALSE, 0, 0x00000000,FALSE),
   HOWTO(R_68K_32,         0, 2,32, FALSE,0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_68K_32",        FALSE, 0, 0xffffffff,FALSE),
   HOWTO(R_68K_16,         0, 1,16, FALSE,0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_68K_16",        FALSE, 0, 0x0000ffff,FALSE),
@@ -441,9 +410,8 @@ static const struct
 };
 
 static reloc_howto_type *
-reloc_type_lookup (abfd, code)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     bfd_reloc_code_real_type code;
+reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+		   bfd_reloc_code_real_type code)
 {
   unsigned int i;
   for (i = 0; i < sizeof (reloc_map) / sizeof (reloc_map[0]); i++)
@@ -1145,9 +1113,7 @@ elf_m68k_final_write_processing (bfd *abfd,
 /* Keep m68k-specific flags in the ELF header.  */
 
 static bfd_boolean
-elf32_m68k_set_private_flags (abfd, flags)
-     bfd *abfd;
-     flagword flags;
+elf32_m68k_set_private_flags (bfd *abfd, flagword flags)
 {
   elf_elfheader (abfd)->e_flags = flags;
   elf_flags_init (abfd) = TRUE;
@@ -1157,9 +1123,7 @@ elf32_m68k_set_private_flags (abfd, flags)
 /* Merge backend specific data from an object file to the output
    object file when linking.  */
 static bfd_boolean
-elf32_m68k_merge_private_bfd_data (ibfd, obfd)
-     bfd *ibfd;
-     bfd *obfd;
+elf32_m68k_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
 {
   flagword out_flags;
   flagword in_flags;
@@ -2468,7 +2432,7 @@ elf_m68k_partition_multi_got (struct bfd_link_info *info)
     {
       asection *s;
 
-      s = bfd_get_section_by_name (elf_hash_table (info)->dynobj, ".got");
+      s = bfd_get_linker_section (elf_hash_table (info)->dynobj, ".got");
       if (s != NULL)
 	s->size = arg_.offset;
       else
@@ -2477,7 +2441,7 @@ elf_m68k_partition_multi_got (struct bfd_link_info *info)
       BFD_ASSERT (arg_.slots_relas_diff <= arg_.n_slots);
       arg_.n_slots -= arg_.slots_relas_diff;
 
-      s = bfd_get_section_by_name (elf_hash_table (info)->dynobj, ".rela.got");
+      s = bfd_get_linker_section (elf_hash_table (info)->dynobj, ".rela.got");
       if (s != NULL)
 	s->size = arg_.n_slots * sizeof (Elf32_External_Rela);
       else
@@ -2581,11 +2545,10 @@ elf_m68k_copy_indirect_symbol (struct bfd_link_info *info,
    table.  */
 
 static bfd_boolean
-elf_m68k_check_relocs (abfd, info, sec, relocs)
-     bfd *abfd;
-     struct bfd_link_info *info;
-     asection *sec;
-     const Elf_Internal_Rela *relocs;
+elf_m68k_check_relocs (bfd *abfd,
+		       struct bfd_link_info *info,
+		       asection *sec,
+		       const Elf_Internal_Rela *relocs)
 {
   bfd *dynobj;
   Elf_Internal_Shdr *symtab_hdr;
@@ -2675,24 +2638,22 @@ elf_m68k_check_relocs (abfd, info, sec, relocs)
 
 	  if (sgot == NULL)
 	    {
-	      sgot = bfd_get_section_by_name (dynobj, ".got");
+	      sgot = bfd_get_linker_section (dynobj, ".got");
 	      BFD_ASSERT (sgot != NULL);
 	    }
 
 	  if (srelgot == NULL
 	      && (h != NULL || info->shared))
 	    {
-	      srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+	      srelgot = bfd_get_linker_section (dynobj, ".rela.got");
 	      if (srelgot == NULL)
 		{
-		  srelgot = bfd_make_section_with_flags (dynobj,
-							 ".rela.got",
-							 (SEC_ALLOC
-							  | SEC_LOAD
-							  | SEC_HAS_CONTENTS
-							  | SEC_IN_MEMORY
-							  | SEC_LINKER_CREATED
-							  | SEC_READONLY));
+		  flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
+				    | SEC_IN_MEMORY | SEC_LINKER_CREATED
+				    | SEC_READONLY);
+		  srelgot = bfd_make_section_anyway_with_flags (dynobj,
+								".rela.got",
+								flags);
 		  if (srelgot == NULL
 		      || !bfd_set_section_alignment (dynobj, srelgot, 2))
 		    return FALSE;
@@ -2827,7 +2788,7 @@ elf_m68k_check_relocs (abfd, info, sec, relocs)
 		 turns out to be a function defined by a dynamic object.  */
 	      h->plt.refcount++;
 
-	      if (!info->shared)
+	      if (info->executable)
 		/* This symbol needs a non-GOT reference.  */
 		h->non_got_ref = 1;
 	    }
@@ -3130,9 +3091,8 @@ elf_m68k_always_size_sections (bfd *output_bfd, struct bfd_link_info *info)
    understand.  */
 
 static bfd_boolean
-elf_m68k_adjust_dynamic_symbol (info, h)
-     struct bfd_link_info *info;
-     struct elf_link_hash_entry *h;
+elf_m68k_adjust_dynamic_symbol (struct bfd_link_info *info,
+				struct elf_link_hash_entry *h)
 {
   struct elf_m68k_link_hash_table *htab;
   bfd *dynobj;
@@ -3182,7 +3142,7 @@ elf_m68k_adjust_dynamic_symbol (info, h)
 	    return FALSE;
 	}
 
-      s = bfd_get_section_by_name (dynobj, ".plt");
+      s = bfd_get_linker_section (dynobj, ".plt");
       BFD_ASSERT (s != NULL);
 
       /* If this is the first .plt entry, make room for the special
@@ -3209,12 +3169,12 @@ elf_m68k_adjust_dynamic_symbol (info, h)
 
       /* 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");
+      s = bfd_get_linker_section (dynobj, ".got.plt");
       BFD_ASSERT (s != NULL);
       s->size += 4;
 
       /* We also need to make an entry in the .rela.plt section.  */
-      s = bfd_get_section_by_name (dynobj, ".rela.plt");
+      s = bfd_get_linker_section (dynobj, ".rela.plt");
       BFD_ASSERT (s != NULL);
       s->size += sizeof (Elf32_External_Rela);
 
@@ -3252,13 +3212,6 @@ elf_m68k_adjust_dynamic_symbol (info, h)
   if (!h->non_got_ref)
     return TRUE;
 
-  if (h->size == 0)
-    {
-      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
-			     h->root.root.string);
-      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
@@ -3269,18 +3222,18 @@ elf_m68k_adjust_dynamic_symbol (info, h)
      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");
+  s = bfd_get_linker_section (dynobj, ".dynbss");
   BFD_ASSERT (s != NULL);
 
   /* We must generate a R_68K_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
      .rela.bss section we are going to use.  */
-  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
       asection *srel;
 
-      srel = bfd_get_section_by_name (dynobj, ".rela.bss");
+      srel = bfd_get_linker_section (dynobj, ".rela.bss");
       BFD_ASSERT (srel != NULL);
       srel->size += sizeof (Elf32_External_Rela);
       h->needs_copy = 1;
@@ -3292,9 +3245,8 @@ elf_m68k_adjust_dynamic_symbol (info, h)
 /* Set the sizes of the dynamic sections.  */
 
 static bfd_boolean
-elf_m68k_size_dynamic_sections (output_bfd, info)
-     bfd *output_bfd ATTRIBUTE_UNUSED;
-     struct bfd_link_info *info;
+elf_m68k_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
+				struct bfd_link_info *info)
 {
   bfd *dynobj;
   asection *s;
@@ -3309,7 +3261,7 @@ elf_m68k_size_dynamic_sections (output_bfd, info)
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  BFD_ASSERT (s != NULL);
 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
@@ -3322,7 +3274,7 @@ elf_m68k_size_dynamic_sections (output_bfd, info)
 	 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");
+      s = bfd_get_linker_section (dynobj, ".rela.got");
       if (s != NULL)
 	s->size = 0;
     }
@@ -3336,7 +3288,7 @@ elf_m68k_size_dynamic_sections (output_bfd, info)
   if (info->shared)
     elf_link_hash_traverse (elf_hash_table (info),
 			    elf_m68k_discard_copies,
-			    (PTR) info);
+			    info);
 
   /* The check_relocs and adjust_dynamic_symbol entry points have
      determined the sizes of the various dynamic sections.  Allocate
@@ -3464,9 +3416,8 @@ elf_m68k_size_dynamic_sections (output_bfd, info)
    case.  */
 
 static bfd_boolean
-elf_m68k_discard_copies (h, inf)
-     struct elf_link_hash_entry *h;
-     PTR inf;
+elf_m68k_discard_copies (struct elf_link_hash_entry *h,
+			 void * inf)
 {
   struct bfd_link_info *info = (struct bfd_link_info *) inf;
   struct elf_m68k_pcrel_relocs_copied *s;
@@ -3486,6 +3437,18 @@ elf_m68k_discard_copies (h, inf)
 	      }
 	}
 
+      /* Make sure undefined weak symbols are output as a dynamic symbol
+	 in PIEs.  */
+      if (h->non_got_ref
+	  && h->root.type == bfd_link_hash_undefweak
+	  && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+	  && h->dynindx == -1
+	  && !h->forced_local)
+	{
+	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
+	    return FALSE;
+	}
+
       return TRUE;
     }
 
@@ -3639,16 +3602,14 @@ elf_m68k_init_got_entry_local_shared (struct bfd_link_info *info,
 /* Relocate an M68K ELF section.  */
 
 static bfd_boolean
-elf_m68k_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;
+elf_m68k_relocate_section (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;
@@ -3717,9 +3678,9 @@ elf_m68k_relocate_section (output_bfd, info, input_bfd, input_section,
 				   unresolved_reloc, warned);
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -3741,7 +3702,7 @@ elf_m68k_relocate_section (output_bfd, info, input_bfd, input_section,
 
 		  if (sgot == NULL)
 		    {
-		      sgot = bfd_get_section_by_name (dynobj, ".got");
+		      sgot = bfd_get_linker_section (dynobj, ".got");
 
 		      if (sgot != NULL)
 			sgot_output_offset = sgot->output_offset;
@@ -3816,7 +3777,7 @@ elf_m68k_relocate_section (output_bfd, info, input_bfd, input_section,
 
 	    if (sgot == NULL)
 	      {
-		sgot = bfd_get_section_by_name (dynobj, ".got");
+		sgot = bfd_get_linker_section (dynobj, ".got");
 		BFD_ASSERT (sgot != NULL);
 	      }
 
@@ -3887,7 +3848,7 @@ elf_m68k_relocate_section (output_bfd, info, input_bfd, input_section,
 		  {
 		    if (srela == NULL)
 		      {
-			srela = bfd_get_section_by_name (dynobj, ".rela.got");
+			srela = bfd_get_linker_section (dynobj, ".rela.got");
 			BFD_ASSERT (srela != NULL);
 		      }
 
@@ -3955,7 +3916,7 @@ elf_m68k_relocate_section (output_bfd, info, input_bfd, input_section,
 	case R_68K_TLS_LE32:
 	case R_68K_TLS_LE16:
 	case R_68K_TLS_LE8:
-	  if (info->shared)
+	  if (info->shared && !info->pie)
 	    {
 	      (*_bfd_error_handler)
 		(_("%B(%A+0x%lx): R_68K_TLS_LE32 relocation not permitted "
@@ -3991,7 +3952,7 @@ elf_m68k_relocate_section (output_bfd, info, input_bfd, input_section,
 
 	  if (splt == NULL)
 	    {
-	      splt = bfd_get_section_by_name (dynobj, ".plt");
+	      splt = bfd_get_linker_section (dynobj, ".plt");
 	      BFD_ASSERT (splt != NULL);
 	    }
 
@@ -4010,7 +3971,7 @@ elf_m68k_relocate_section (output_bfd, info, input_bfd, input_section,
 
 	  if (splt == NULL)
 	    {
-	      splt = bfd_get_section_by_name (dynobj, ".plt");
+	      splt = bfd_get_linker_section (dynobj, ".plt");
 	      BFD_ASSERT (splt != NULL);
 	    }
 
@@ -4264,11 +4225,10 @@ elf_m68k_install_pc32 (asection *sec, bfd_vma offset, bfd_vma value)
    dynamic sections here.  */
 
 static bfd_boolean
-elf_m68k_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;
+elf_m68k_finish_dynamic_symbol (bfd *output_bfd,
+				struct bfd_link_info *info,
+				struct elf_link_hash_entry *h,
+				Elf_Internal_Sym *sym)
 {
   bfd *dynobj;
 
@@ -4291,9 +4251,9 @@ elf_m68k_finish_dynamic_symbol (output_bfd, info, h, sym)
       BFD_ASSERT (h->dynindx != -1);
 
       plt_info = elf_m68k_hash_table (info)->plt_info;
-      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");
+      splt = bfd_get_linker_section (dynobj, ".plt");
+      sgot = bfd_get_linker_section (dynobj, ".got.plt");
+      srela = bfd_get_linker_section (dynobj, ".rela.plt");
       BFD_ASSERT (splt != NULL && sgot != NULL && srela != NULL);
 
       /* Get the index in the procedure linkage table which
@@ -4358,8 +4318,8 @@ elf_m68k_finish_dynamic_symbol (output_bfd, info, h, sym)
       /* 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");
+      sgot = bfd_get_linker_section (dynobj, ".got");
+      srela = bfd_get_linker_section (dynobj, ".rela.got");
       BFD_ASSERT (sgot != NULL && srela != NULL);
 
       got_entry = elf_m68k_hash_entry (h)->glist;
@@ -4482,8 +4442,7 @@ elf_m68k_finish_dynamic_symbol (output_bfd, info, h, sym)
 		  && (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");
+      s = bfd_get_linker_section (dynobj, ".rela.bss");
       BFD_ASSERT (s != NULL);
 
       rela.r_offset = (h->root.u.def.value
@@ -4495,20 +4454,13 @@ elf_m68k_finish_dynamic_symbol (output_bfd, info, h, sym)
       bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
     }
 
-  /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
-  if (strcmp (h->root.root.string, "_DYNAMIC") == 0
-      || h == elf_hash_table (info)->hgot)
-    sym->st_shndx = SHN_ABS;
-
   return TRUE;
 }
 
 /* Finish up the dynamic sections.  */
 
 static bfd_boolean
-elf_m68k_finish_dynamic_sections (output_bfd, info)
-     bfd *output_bfd;
-     struct bfd_link_info *info;
+elf_m68k_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
 {
   bfd *dynobj;
   asection *sgot;
@@ -4516,16 +4468,16 @@ elf_m68k_finish_dynamic_sections (output_bfd, info)
 
   dynobj = elf_hash_table (info)->dynobj;
 
-  sgot = bfd_get_section_by_name (dynobj, ".got.plt");
+  sgot = bfd_get_linker_section (dynobj, ".got.plt");
   BFD_ASSERT (sgot != NULL);
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
     {
       asection *splt;
       Elf32_External_Dyn *dyncon, *dynconend;
 
-      splt = bfd_get_section_by_name (dynobj, ".plt");
+      splt = bfd_get_linker_section (dynobj, ".plt");
       BFD_ASSERT (splt != NULL && sdyn != NULL);
 
       dyncon = (Elf32_External_Dyn *) sdyn->contents;
@@ -4652,7 +4604,7 @@ bfd_m68k_elf32_create_embedded_relocs (abfd, info, datasec, relsec, errmsg)
 
   /* Get a copy of the native relocations.  */
   internal_relocs = (_bfd_elf_link_read_relocs
-		     (abfd, datasec, (PTR) NULL, (Elf_Internal_Rela *) NULL,
+		     (abfd, datasec, NULL, (Elf_Internal_Rela *) NULL,
 		      info->keep_memory));
   if (internal_relocs == NULL)
     goto error_return;
@@ -4790,8 +4742,7 @@ bfd_elf_m68k_set_target_options (struct bfd_link_info *info, int got_handling)
 }
 
 static enum elf_reloc_type_class
-elf32_m68k_reloc_type_class (rela)
-     const Elf_Internal_Rela *rela;
+elf32_m68k_reloc_type_class (const Elf_Internal_Rela *rela)
 {
   switch ((int) ELF32_R_TYPE (rela->r_info))
     {
@@ -4816,6 +4767,69 @@ elf_m68k_plt_sym_val (bfd_vma i, const asection *plt,
   return plt->vma + (i + 1) * elf_m68k_get_plt_info (plt->owner)->size;
 }
 
+/* Support for core dump NOTE sections.  */
+
+static bfd_boolean
+elf_m68k_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
+{
+  int offset;
+  size_t size;
+
+  switch (note->descsz)
+    {
+    default:
+      return FALSE;
+
+    case 154:		/* Linux/m68k */
+      /* pr_cursig */
+      elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12);
+
+      /* pr_pid */
+      elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 22);
+
+      /* pr_reg */
+      offset = 70;
+      size = 80;
+
+      break;
+    }
+
+  /* Make a ".reg/999" section.  */
+  return _bfd_elfcore_make_pseudosection (abfd, ".reg",
+					  size, note->descpos + offset);
+}
+
+static bfd_boolean
+elf_m68k_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
+{
+  switch (note->descsz)
+    {
+    default:
+      return FALSE;
+
+    case 124:		/* Linux/m68k elf_prpsinfo.  */
+      elf_tdata (abfd)->core_pid
+	= bfd_get_32 (abfd, note->descdata + 12);
+      elf_tdata (abfd)->core_program
+	= _bfd_elfcore_strndup (abfd, note->descdata + 28, 16);
+      elf_tdata (abfd)->core_command
+	= _bfd_elfcore_strndup (abfd, note->descdata + 44, 80);
+    }
+
+  /* Note that for some reason, a spurious space is tacked
+     onto the end of the args in some (at least one anyway)
+     implementations, so strip it off if it exists.  */
+  {
+    char *command = elf_tdata (abfd)->core_command;
+    int n = strlen (command);
+
+    if (n > 0 && command[n - 1] == ' ')
+      command[n - 1] = '\0';
+  }
+
+  return TRUE;
+}
+
 #define TARGET_BIG_SYM			bfd_elf32_m68k_vec
 #define TARGET_BIG_NAME			"elf32-m68k"
 #define ELF_MACHINE_CODE		EM_68K
@@ -4855,6 +4869,8 @@ elf_m68k_plt_sym_val (bfd_vma i, const asection *plt,
 #define elf_backend_reloc_type_class	elf32_m68k_reloc_type_class
 #define elf_backend_plt_sym_val		elf_m68k_plt_sym_val
 #define elf_backend_object_p		elf32_m68k_object_p
+#define elf_backend_grok_prstatus	elf_m68k_grok_prstatus
+#define elf_backend_grok_psinfo		elf_m68k_grok_psinfo
 
 #define elf_backend_can_gc_sections 1
 #define elf_backend_can_refcount 1
diff --git a/bfd/elf32-mcore.c b/bfd/elf32-mcore.c
index 31cc095..288394f 100644
--- a/bfd/elf32-mcore.c
+++ b/bfd/elf32-mcore.c
@@ -1,6 +1,6 @@
 /* Motorola MCore specific support for 32-bit ELF
    Copyright 1994, 1995, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-   2007, 2011 Free Software Foundation, Inc.
+   2007, 2011, 2012 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -89,7 +89,7 @@ static bfd_reloc_status_type
 mcore_elf_unsupported_reloc (bfd * abfd,
 			     arelent * reloc_entry,
 			     asymbol * symbol ATTRIBUTE_UNUSED,
-			     PTR data ATTRIBUTE_UNUSED,
+			     void * data ATTRIBUTE_UNUSED,
 			     asection * input_section ATTRIBUTE_UNUSED,
 			     bfd * output_bfd ATTRIBUTE_UNUSED,
 			     char ** error_message ATTRIBUTE_UNUSED)
@@ -466,9 +466,9 @@ mcore_elf_relocate_section (bfd * output_bfd,
 				   unresolved_reloc, warned);
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
diff --git a/bfd/elf32-mep.c b/bfd/elf32-mep.c
index 6fecb25..f356fd0 100644
--- a/bfd/elf32-mep.c
+++ b/bfd/elf32-mep.c
@@ -1,6 +1,6 @@
 /* MeP-specific support for 32-bit ELF.
    Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
-   2010, 2011  Free Software Foundation, Inc.
+   2010, 2011, 2012 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -500,9 +500,9 @@ mep_elf_relocate_section
 	  name = h->root.root.string;
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c
index b180dc4..27b569e 100644
--- a/bfd/elf32-microblaze.c
+++ b/bfd/elf32-microblaze.c
@@ -1,6 +1,6 @@
 /* Xilinx MicroBlaze-specific support for 32-bit ELF
 
-   Copyright 2009, 2010, 2011 Free Software Foundation, Inc.
+   Copyright 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -22,8 +22,8 @@
 
 int dbg = 0;
 
-#include "bfd.h"
 #include "sysdep.h"
+#include "bfd.h"
 #include "bfdlink.h"
 #include "libbfd.h"
 #include "elf-bfd.h"
@@ -839,7 +839,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
 		/* Only relocate if the symbol is defined.  */
 		if (sec)
 		  {
-		    name = bfd_get_section_name (abfd, sec);
+		    name = bfd_get_section_name (sec->owner, sec);
 
 		    if (strcmp (name, ".sdata2") == 0
 			|| strcmp (name, ".sbss2") == 0)
@@ -868,7 +868,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
 					       bfd_get_filename (input_bfd),
 					       sym_name,
 					       microblaze_elf_howto_table[(int) r_type]->name,
-					       bfd_get_section_name (abfd, sec));
+					       bfd_get_section_name (sec->owner, sec));
 			/*bfd_set_error (bfd_error_bad_value); ??? why? */
 			ret = FALSE;
 			continue;
@@ -884,7 +884,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
 		/* Only relocate if the symbol is defined.  */
 		if (sec)
 		  {
-		    name = bfd_get_section_name (abfd, sec);
+		    name = bfd_get_section_name (sec->owner, sec);
 
 		    if (strcmp (name, ".sdata") == 0
 			|| strcmp (name, ".sbss") == 0)
@@ -913,7 +913,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
 					       bfd_get_filename (input_bfd),
 					       sym_name,
 					       microblaze_elf_howto_table[(int) r_type]->name,
-					       bfd_get_section_name (abfd, sec));
+					       bfd_get_section_name (sec->owner, sec));
 			/*bfd_set_error (bfd_error_bad_value); ??? why? */
 			ret = FALSE;
 			continue;
@@ -1875,12 +1875,13 @@ create_got_section (bfd *dynobj, struct bfd_link_info *info)
   if (htab == NULL)
     return FALSE;
 
-  htab->sgot = bfd_get_section_by_name (dynobj, ".got");
-  htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
+  htab->sgot = bfd_get_linker_section (dynobj, ".got");
+  htab->sgotplt = bfd_get_linker_section (dynobj, ".got.plt");
   if (!htab->sgot || !htab->sgotplt)
     return FALSE;
 
-  htab->srelgot = bfd_make_section (dynobj, ".rela.got");
+  if ((htab->srelgot = bfd_get_linker_section (dynobj, ".rela.got")) == NULL)
+    htab->srelgot = bfd_make_section_anyway (dynobj, ".rela.got");
   if (htab->srelgot == NULL
       || ! bfd_set_section_flags (dynobj, htab->srelgot, SEC_ALLOC
                                   | SEC_LOAD
@@ -2079,18 +2080,19 @@ microblaze_elf_check_relocs (bfd * abfd,
 		      htab->elf.dynobj = abfd;
 		    dynobj = htab->elf.dynobj;
 
-		    sreloc = bfd_get_section_by_name (dynobj, name);
+		    sreloc = bfd_get_linker_section (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;
+			sreloc = bfd_make_section_anyway_with_flags (dynobj,
+								     name,
+								     flags);
 			if (sreloc == NULL
-			    || ! bfd_set_section_flags (dynobj, sreloc, flags)
 			    || ! bfd_set_section_alignment (dynobj, sreloc, 2))
 			  return FALSE;
 		      }
@@ -2166,11 +2168,11 @@ microblaze_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
     return FALSE;
 
-  htab->splt = bfd_get_section_by_name (dynobj, ".plt");
-  htab->srelplt = bfd_get_section_by_name (dynobj, ".rela.plt");
-  htab->sdynbss = bfd_get_section_by_name (dynobj, ".dynbss");
+  htab->splt = bfd_get_linker_section (dynobj, ".plt");
+  htab->srelplt = bfd_get_linker_section (dynobj, ".rela.plt");
+  htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss");
   if (!info->shared)
-    htab->srelbss = bfd_get_section_by_name (dynobj, ".rela.bss");
+    htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss");
 
   if (!htab->splt || !htab->srelplt || !htab->sdynbss
       || (!info->shared && !htab->srelbss))
@@ -2867,8 +2869,7 @@ microblaze_elf_finish_dynamic_symbol (bfd *output_bfd,
 
       BFD_ASSERT (h->dynindx != -1);
 
-      s = bfd_get_section_by_name (h->root.u.def.section->owner,
-                                   ".rela.bss");
+      s = bfd_get_linker_section (htab->elf.dynobj, ".rela.bss");
       BFD_ASSERT (s != NULL);
 
       rela.r_offset = (h->root.u.def.value
@@ -2906,14 +2907,14 @@ microblaze_elf_finish_dynamic_sections (bfd *output_bfd,
 
   dynobj = htab->elf.dynobj;
 
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (htab->elf.dynamic_sections_created)
     {
       asection *splt;
       Elf32_External_Dyn *dyncon, *dynconend;
 
-      splt = bfd_get_section_by_name (dynobj, ".plt");
+      splt = bfd_get_linker_section (dynobj, ".plt");
       BFD_ASSERT (splt != NULL && sdyn != NULL);
 
       dyncon = (Elf32_External_Dyn *) sdyn->contents;
@@ -2968,7 +2969,7 @@ microblaze_elf_finish_dynamic_sections (bfd *output_bfd,
 
   /* Set the first entry in the global offset table to the address of
      the dynamic section.  */
-  sgot = bfd_get_section_by_name (dynobj, ".got.plt");
+  sgot = bfd_get_linker_section (dynobj, ".got.plt");
   if (sgot && sgot->size > 0)
     {
       if (sdyn == NULL)
@@ -3004,7 +3005,7 @@ microblaze_elf_add_symbol_hook (bfd *abfd,
     {
       /* Common symbols less than or equal to -G nn bytes are automatically
 	 put into .sbss.  */
-      *secp = bfd_make_section_anyway (abfd, ".sbss");
+      *secp = bfd_make_section_old_way (abfd, ".sbss");
       if (*secp == NULL
           || ! bfd_set_section_flags (abfd, *secp, SEC_IS_COMMON))
         return FALSE;
diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c
index fd3d4ba..61e8b45 100644
--- a/bfd/elf32-mips.c
+++ b/bfd/elf32-mips.c
@@ -830,6 +830,111 @@ static reloc_howto_type elf_mips16_howto_table_rel[] =
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,	        /* dst_mask */
 	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS general dynamic variable reference.  */
+  HOWTO (R_MIPS16_TLS_GD,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_GD",	/* name */
+	 TRUE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS local dynamic variable reference.  */
+  HOWTO (R_MIPS16_TLS_LDM,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_LDM",	/* name */
+	 TRUE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS local dynamic offset.  */
+  HOWTO (R_MIPS16_TLS_DTPREL_HI16,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_DTPREL_HI16",	/* name */
+	 TRUE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS local dynamic offset.  */
+  HOWTO (R_MIPS16_TLS_DTPREL_LO16,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_DTPREL_LO16",	/* name */
+	 TRUE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS thread pointer offset.  */
+  HOWTO (R_MIPS16_TLS_GOTTPREL,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_GOTTPREL",	/* name */
+	 TRUE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS thread pointer offset.  */
+  HOWTO (R_MIPS16_TLS_TPREL_HI16,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_TPREL_HI16", /* name */
+	 TRUE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS thread pointer offset.  */
+  HOWTO (R_MIPS16_TLS_TPREL_LO16,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_TPREL_LO16", /* name */
+	 TRUE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
 };
 
 static reloc_howto_type elf_micromips_howto_table_rel[] =
@@ -1796,6 +1901,15 @@ static const struct elf_reloc_map mips16_reloc_map[] =
   { BFD_RELOC_MIPS16_CALL16, R_MIPS16_CALL16 - R_MIPS16_min },
   { BFD_RELOC_MIPS16_HI16_S, R_MIPS16_HI16 - R_MIPS16_min },
   { BFD_RELOC_MIPS16_LO16, R_MIPS16_LO16 - R_MIPS16_min },
+  { BFD_RELOC_MIPS16_TLS_GD, R_MIPS16_TLS_GD - R_MIPS16_min },
+  { BFD_RELOC_MIPS16_TLS_LDM, R_MIPS16_TLS_LDM - R_MIPS16_min },
+  { BFD_RELOC_MIPS16_TLS_DTPREL_HI16,
+    R_MIPS16_TLS_DTPREL_HI16 - R_MIPS16_min },
+  { BFD_RELOC_MIPS16_TLS_DTPREL_LO16,
+    R_MIPS16_TLS_DTPREL_LO16 - R_MIPS16_min },
+  { BFD_RELOC_MIPS16_TLS_GOTTPREL, R_MIPS16_TLS_GOTTPREL - R_MIPS16_min },
+  { BFD_RELOC_MIPS16_TLS_TPREL_HI16, R_MIPS16_TLS_TPREL_HI16 - R_MIPS16_min },
+  { BFD_RELOC_MIPS16_TLS_TPREL_LO16, R_MIPS16_TLS_TPREL_LO16 - R_MIPS16_min }
 };
 
 static const struct elf_reloc_map micromips_reloc_map[] =
diff --git a/bfd/elf32-moxie.c b/bfd/elf32-moxie.c
index 8463599..c1a793e 100644
--- a/bfd/elf32-moxie.c
+++ b/bfd/elf32-moxie.c
@@ -1,5 +1,5 @@
 /* moxie-specific support for 32-bit ELF.
-   Copyright 2009, 2010 Free Software Foundation, Inc.
+   Copyright 2009, 2010, 2012 Free Software Foundation, Inc.
 
    Copied from elf32-fr30.c which is..
    Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
@@ -250,9 +250,9 @@ moxie_elf_relocate_section (bfd *output_bfd,
 	  name = h->root.root.string;
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
diff --git a/bfd/elf32-msp430.c b/bfd/elf32-msp430.c
index 9a5fb2a..c0459f4 100644
--- a/bfd/elf32-msp430.c
+++ b/bfd/elf32-msp430.c
@@ -1,5 +1,5 @@
 /*  MSP430-specific support for 32-bit ELF
-    Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2010
+    Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2010, 2012
     Free Software Foundation, Inc.
     Contributed by Dmitry Diky <diwil at mail.ru>
 
@@ -454,9 +454,9 @@ elf32_msp430_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED,
 				   unresolved_reloc, warned);
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
diff --git a/bfd/elf32-mt.c b/bfd/elf32-mt.c
index 1be5d00..c03d8f4 100644
--- a/bfd/elf32-mt.c
+++ b/bfd/elf32-mt.c
@@ -1,5 +1,5 @@
 /* Morpho Technologies MT specific support for 32-bit ELF
-   Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2011
+   Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -354,9 +354,9 @@ mt_elf_relocate_section
 	  name = h->root.root.string;
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
diff --git a/bfd/elf32-openrisc.c b/bfd/elf32-openrisc.c
index ada738e..2b002ab 100644
--- a/bfd/elf32-openrisc.c
+++ b/bfd/elf32-openrisc.c
@@ -1,5 +1,5 @@
 /* OpenRISC-specific support for 32-bit ELF.
-   Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007
+   Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2010, 2012
    Free Software Foundation, Inc.
    Contributed by Johan Rydberg, jrydberg at opencores.org
 
@@ -373,9 +373,9 @@ openrisc_elf_relocate_section (bfd *output_bfd,
 				   unresolved_reloc, warned);
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c
index 18922dc..3d0a2d9 100644
--- a/bfd/elf32-ppc.c
+++ b/bfd/elf32-ppc.c
@@ -1,6 +1,6 @@
 /* PowerPC-specific support for 32-bit ELF
    Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-   2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support.
 
@@ -38,12 +38,21 @@
 #include "elf-vxworks.h"
 #include "dwarf2.h"
 
+typedef enum split16_format_type
+{
+  split16a_type = 0,
+  split16d_type
+}
+split16_format_type;
+
 /* RELA relocations are used here.  */
 
 static bfd_reloc_status_type ppc_elf_addr16_ha_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 static bfd_reloc_status_type ppc_elf_unhandled_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+static void ppc_elf_vle_split16
+  (bfd *, bfd_byte *, bfd_vma, bfd_vma, split16_format_type);
 
 /* Branch prediction bit for branch taken relocs.  */
 #define BRANCH_PREDICT_BIT 0x200000
@@ -1392,6 +1401,262 @@ static reloc_howto_type ppc_elf_howto_raw[] = {
 	 0xffff,		/* dst_mask */
 	 FALSE),		/* pcrel_offset */
 
+  /* A relative 8 bit branch.  */
+  HOWTO (R_PPC_VLE_REL8,	/* type */
+	 1,			/* rightshift */
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 8,			/* bitsize */
+	 TRUE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_PPC_VLE_REL8",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xff,			/* dst_mask */
+	 TRUE),			/* pcrel_offset */
+	 
+  /* A relative 15 bit branch.  */
+  HOWTO (R_PPC_VLE_REL15,	/* type */
+	 1,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 15,			/* bitsize */
+	 TRUE,			/* pc_relative */
+	 1,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_PPC_VLE_REL15",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xfe,			/* dst_mask */
+	 TRUE),			/* pcrel_offset */
+
+  /* A relative 24 bit branch.  */ 
+  HOWTO (R_PPC_VLE_REL24,	/* type */
+	 1,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 24,			/* bitsize */
+	 TRUE,			/* pc_relative */
+	 1,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_PPC_VLE_REL24",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0x1fffffe,		/* dst_mask */
+	 TRUE),			/* pcrel_offset */
+
+  /* The 16 LSBS in split16a format.  */
+  HOWTO (R_PPC_VLE_LO16A,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */  /* FIXME: Does this apply to split relocs? */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	 /* special_function */
+	 "R_PPC_VLE_LO16A",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0x1f00fff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* The 16 LSBS in split16d format.  */
+  HOWTO (R_PPC_VLE_LO16D,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	 /* special_function */
+	 "R_PPC_VLE_LO16D",		/* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0x1f07ff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* Bits 16-31 split16a format.  */
+  HOWTO (R_PPC_VLE_HI16A,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	 /* special_function */
+	 "R_PPC_VLE_HI16A",		/* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0x1f00fff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* Bits 16-31 split16d format.  */
+  HOWTO (R_PPC_VLE_HI16D,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	 /* special_function */
+	 "R_PPC_VLE_HI16D",		/* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0x1f07ff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* Bits 16-31 (High Adjusted) in split16a format.  */
+  HOWTO (R_PPC_VLE_HA16A,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	 /* special_function */
+	 "R_PPC_VLE_HA16A",		/* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0x1f00fff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* Bits 16-31 (High Adjusted) in split16d format.  */
+  HOWTO (R_PPC_VLE_HA16D,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	 /* special_function */
+	 "R_PPC_VLE_HA16D",		/* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0x1f07ff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* This reloc does nothing.  */
+  HOWTO (R_PPC_VLE_SDA21,		/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_PPC_VLE_SDA21",		/* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* This reloc does nothing.  */
+  HOWTO (R_PPC_VLE_SDA21_LO,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_PPC_VLE_SDA21_LO",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0,			/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* The 16 LSBS relative to _SDA_BASE_ in split16a format.  */
+  HOWTO (R_PPC_VLE_SDAREL_LO16A,/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	 /* special_function */
+	 "R_PPC_VLE_SDAREL_LO16A",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0x1f00fff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* The 16 LSBS relative to _SDA_BASE_ in split16d format.  */
+  /* This reloc does nothing.  */
+  HOWTO (R_PPC_VLE_SDAREL_LO16D, /* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	 /* special_function */
+	 "R_PPC_VLE_SDAREL_LO16D",		/* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0x1f07ff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* Bits 16-31 relative to _SDA_BASE_ in split16a format.  */
+  HOWTO (R_PPC_VLE_SDAREL_HI16A,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	 /* special_function */
+	 "R_PPC_VLE_SDAREL_HI16A",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0x1f00fff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* Bits 16-31 relative to _SDA_BASE_ in split16d format.  */
+  HOWTO (R_PPC_VLE_SDAREL_HI16D,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	 /* special_function */
+	 "R_PPC_VLE_SDAREL_HI16D",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0x1f07ff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* Bits 16-31 (HA) relative to _SDA_BASE split16a format.  */
+  HOWTO (R_PPC_VLE_SDAREL_HA16A,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	 /* special_function */
+	 "R_PPC_VLE_SDAREL_HA16A",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0x1f00fff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* Bits 16-31 (HA) relative to _SDA_BASE split16d format.  */
+  HOWTO (R_PPC_VLE_SDAREL_HA16D,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_bitfield,	/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	 /* special_function */
+	 "R_PPC_VLE_SDAREL_HA16D",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0x1f07ff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
   HOWTO (R_PPC_IRELATIVE,	/* type */
 	 0,			/* rightshift */
 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
@@ -1628,6 +1893,35 @@ ppc_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
     case BFD_RELOC_PPC_EMB_RELST_HA:	r = R_PPC_EMB_RELST_HA;		break;
     case BFD_RELOC_PPC_EMB_BIT_FLD:	r = R_PPC_EMB_BIT_FLD;		break;
     case BFD_RELOC_PPC_EMB_RELSDA:	r = R_PPC_EMB_RELSDA;		break;
+    case BFD_RELOC_PPC_VLE_REL8:	r = R_PPC_VLE_REL8;		break;
+    case BFD_RELOC_PPC_VLE_REL15:	r = R_PPC_VLE_REL15;		break;
+    case BFD_RELOC_PPC_VLE_REL24:	r = R_PPC_VLE_REL24;		break;
+    case BFD_RELOC_PPC_VLE_LO16A:	r = R_PPC_VLE_LO16A;		break;
+    case BFD_RELOC_PPC_VLE_LO16D:	r = R_PPC_VLE_LO16D;		break;
+    case BFD_RELOC_PPC_VLE_HI16A:	r = R_PPC_VLE_HI16A;		break;
+    case BFD_RELOC_PPC_VLE_HI16D:	r = R_PPC_VLE_HI16D;		break;
+    case BFD_RELOC_PPC_VLE_HA16A:	r = R_PPC_VLE_HA16A;		break;
+    case BFD_RELOC_PPC_VLE_HA16D:	r = R_PPC_VLE_HA16D;		break;
+    case BFD_RELOC_PPC_VLE_SDA21:	r = R_PPC_VLE_SDA21;		break;
+    case BFD_RELOC_PPC_VLE_SDA21_LO:	r = R_PPC_VLE_SDA21_LO;		break;
+    case BFD_RELOC_PPC_VLE_SDAREL_LO16A:
+      r = R_PPC_VLE_SDAREL_LO16A;
+      break;
+    case BFD_RELOC_PPC_VLE_SDAREL_LO16D:
+      r = R_PPC_VLE_SDAREL_LO16D;
+      break;
+    case BFD_RELOC_PPC_VLE_SDAREL_HI16A:
+      r = R_PPC_VLE_SDAREL_HI16A;
+      break;
+    case BFD_RELOC_PPC_VLE_SDAREL_HI16D:
+      r = R_PPC_VLE_SDAREL_HI16D;
+      break;
+    case BFD_RELOC_PPC_VLE_SDAREL_HA16A:
+      r = R_PPC_VLE_SDAREL_HA16A;
+      break;
+    case BFD_RELOC_PPC_VLE_SDAREL_HA16D:
+      r = R_PPC_VLE_SDAREL_HA16D;
+      break;
     case BFD_RELOC_16_PCREL:		r = R_PPC_REL16;		break;
     case BFD_RELOC_LO16_PCREL:		r = R_PPC_REL16_LO;		break;
     case BFD_RELOC_HI16_PCREL:		r = R_PPC_REL16_HI;		break;
@@ -1920,7 +2214,7 @@ ppc_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_type, ...)
 	va_list ap;
 
 	va_start (ap, note_type);
-	memset (data, 0, 32);
+	memset (data, 0, sizeof (data));
 	strncpy (data + 32, va_arg (ap, const char *), 16);
 	strncpy (data + 48, va_arg (ap, const char *), 80);
 	va_end (ap);
@@ -1952,6 +2246,28 @@ ppc_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_type, ...)
     }
 }
 
+static flagword
+ppc_elf_lookup_section_flags (char *flag_name) 
+{
+
+  if (!strcmp (flag_name, "SHF_PPC_VLE"))
+    return SHF_PPC_VLE;
+
+  return 0;
+}
+
+/* Add the VLE flag if required.  */
+
+bfd_boolean
+ppc_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *shdr)
+{
+  if (bfd_get_mach (abfd) == bfd_mach_ppc_vle
+      && (shdr->sh_flags & SHF_EXECINSTR) != 0)
+    shdr->sh_flags |= SHF_PPC_VLE;
+
+  return TRUE;
+}
+
 /* Return address for Ith PLT stub in section PLT, for relocation REL
    or (bfd_vma) -1 if it should not be included.  */
 
@@ -2025,6 +2341,70 @@ ppc_elf_additional_program_headers (bfd *abfd,
   return ret;
 }
 
+/* Modify the segment map for VLE executables.  */ 
+
+bfd_boolean
+ppc_elf_modify_segment_map (bfd *abfd,
+			    struct bfd_link_info *info ATTRIBUTE_UNUSED)
+{
+  struct elf_segment_map *m, *n;
+  bfd_size_type amt;
+  unsigned int j, k;
+  bfd_boolean sect0_vle, sectj_vle;
+
+  /* At this point in the link, output sections have already been sorted by
+     LMA and assigned to segments.  All that is left to do is to ensure
+     there is no mixing of VLE & non-VLE sections in a text segment.
+     If we find that case, we split the segment.
+     We maintain the original output section order.  */
+
+  for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
+    {
+      if (m->count == 0)
+	continue;
+
+      sect0_vle = (elf_section_flags (m->sections[0]) & SHF_PPC_VLE) != 0;
+      for (j = 1; j < m->count; ++j)
+	{
+	  sectj_vle = (elf_section_flags (m->sections[j]) & SHF_PPC_VLE) != 0;
+
+	  if (sectj_vle != sect0_vle)
+	    break;
+        }
+      if (j >= m->count)
+	continue;
+
+      /* sections 0..j-1 stay in this (current) segment,
+	 the remainder are put in a new segment.
+	 The scan resumes with the new segment.  */
+
+      /* Fix the new segment.  */
+      amt = sizeof (struct elf_segment_map);
+      amt += (m->count - j - 1) * sizeof (asection *);
+      n = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
+      if (n == NULL)
+        return FALSE;
+
+      n->p_type = PT_LOAD;
+      n->p_flags = PF_X | PF_R;
+      if (sectj_vle)
+        n->p_flags |= PF_PPC_VLE;
+      n->count = m->count - j;
+      for (k = 0; k < n->count; ++k)
+        {
+          n->sections[k] = m->sections[j+k];
+          m->sections[j+k] = NULL;
+	}
+      n->next = m->next;
+      m->next = n;
+
+      /* Fix the current segment  */
+      m->count = j;
+    }
+
+  return TRUE;
+}
+
 /* Add extra PPC sections -- Note, for now, make .sbss2 and
    .PPC.EMB.sbss0 a normal section, and not a bss section so
    that the linker doesn't crater when trying to make more than
@@ -2732,7 +3112,7 @@ struct ppc_elf_link_hash_table
 };
 
 /* Rename some of the generic section flags to better document how they
-   are used here.  */
+   are used for ppc32.  The flags are only valid for ppc32 elf objects.  */
 
 /* Nonzero if this section has TLS related relocations.  */
 #define has_tls_reloc sec_flg0
@@ -2829,13 +3209,13 @@ ppc_elf_create_got (bfd *abfd, struct bfd_link_info *info)
     return FALSE;
 
   htab = ppc_elf_hash_table (info);
-  htab->got = s = bfd_get_section_by_name (abfd, ".got");
+  htab->got = s = bfd_get_linker_section (abfd, ".got");
   if (s == NULL)
     abort ();
 
   if (htab->is_vxworks)
     {
-      htab->sgotplt = bfd_get_section_by_name (abfd, ".got.plt");
+      htab->sgotplt = bfd_get_linker_section (abfd, ".got.plt");
       if (!htab->sgotplt)
 	abort ();
     }
@@ -2849,7 +3229,7 @@ ppc_elf_create_got (bfd *abfd, struct bfd_link_info *info)
 	return FALSE;
     }
 
-  htab->relgot = bfd_get_section_by_name (abfd, ".rela.got");
+  htab->relgot = bfd_get_linker_section (abfd, ".rela.got");
   if (!htab->relgot)
     abort ();
 
@@ -2923,7 +3303,7 @@ ppc_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
       && !ppc_elf_create_glink (abfd, info))
     return FALSE;
 
-  htab->dynbss = bfd_get_section_by_name (abfd, ".dynbss");
+  htab->dynbss = bfd_get_linker_section (abfd, ".dynbss");
   s = bfd_make_section_anyway_with_flags (abfd, ".dynsbss",
 					  SEC_ALLOC | SEC_LINKER_CREATED);
   htab->dynsbss = s;
@@ -2932,7 +3312,7 @@ ppc_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 
   if (! info->shared)
     {
-      htab->relbss = bfd_get_section_by_name (abfd, ".rela.bss");
+      htab->relbss = bfd_get_linker_section (abfd, ".rela.bss");
       flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_HAS_CONTENTS
 	       | SEC_IN_MEMORY | SEC_LINKER_CREATED);
       s = bfd_make_section_anyway_with_flags (abfd, ".rela.sbss", flags);
@@ -2946,8 +3326,8 @@ ppc_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
       && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
     return FALSE;
 
-  htab->relplt = bfd_get_section_by_name (abfd, ".rela.plt");
-  htab->plt = s = bfd_get_section_by_name (abfd, ".plt");
+  htab->relplt = bfd_get_linker_section (abfd, ".rela.plt");
+  htab->plt = s = bfd_get_linker_section (abfd, ".plt");
   if (s == NULL)
     abort ();
 
@@ -3620,10 +4000,21 @@ ppc_elf_check_relocs (bfd *abfd,
 	    }
 	  break;
 
+	case R_PPC_VLE_SDAREL_LO16A:
+	case R_PPC_VLE_SDAREL_LO16D:
+	case R_PPC_VLE_SDAREL_HI16A:
+	case R_PPC_VLE_SDAREL_HI16D:
+	case R_PPC_VLE_SDAREL_HA16A:
+	case R_PPC_VLE_SDAREL_HA16D:
 	case R_PPC_SDAREL16:
 	  if (htab->sdata[0].sym == NULL
 	      && !create_sdata_sym (info, &htab->sdata[0]))
 	    return FALSE;
+
+	  if (htab->sdata[1].sym == NULL
+	      && !create_sdata_sym (info, &htab->sdata[1]))
+	    return FALSE;
+
 	  if (h != NULL)
 	    {
 	      ppc_elf_hash_entry (h)->has_sda_refs = TRUE;
@@ -3631,6 +4022,17 @@ ppc_elf_check_relocs (bfd *abfd,
 	    }
 	  break;
 
+	case R_PPC_VLE_REL8:
+	case R_PPC_VLE_REL15:
+	case R_PPC_VLE_REL24:
+	case R_PPC_VLE_LO16A:
+	case R_PPC_VLE_LO16D:
+	case R_PPC_VLE_HI16A:
+	case R_PPC_VLE_HI16D:
+	case R_PPC_VLE_HA16A:
+	case R_PPC_VLE_HA16D:
+	  break;
+
 	case R_PPC_EMB_SDA2REL:
 	  if (info->shared)
 	    {
@@ -3647,6 +4049,8 @@ ppc_elf_check_relocs (bfd *abfd,
 	    }
 	  break;
 
+	case R_PPC_VLE_SDA21_LO:
+	case R_PPC_VLE_SDA21:
 	case R_PPC_EMB_SDA21:
 	case R_PPC_EMB_RELSDA:
 	  if (info->shared)
@@ -4244,6 +4648,24 @@ ppc_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
 
   return TRUE;
 }
+
+static void
+ppc_elf_vle_split16 (bfd *output_bfd, bfd_byte *contents,
+                 bfd_vma offset, bfd_vma relocation,
+		 split16_format_type split16_format)
+
+{
+  bfd_vma insn, top5, bottom11;
+
+  insn = bfd_get_32 (output_bfd, contents + offset);
+  top5 = relocation >> 11;
+  top5 = top5 << (split16_format == split16a_type ? 20 : 16);
+  bottom11 = relocation & 0x7ff;
+  insn |= top5;
+  insn |= bottom11;
+  bfd_put_32 (output_bfd, insn, contents + offset);
+}
+
 

 /* Choose which PLT scheme to use, and set .plt flags appropriately.
    Returns -1 on error, 0 for old PLT, 1 for new PLT.  */
@@ -5045,13 +5467,6 @@ ppc_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
       return TRUE;
     }
 
-  if (h->size == 0)
-    {
-      info->callbacks->einfo (_("%P: dynamic variable `%s' is zero size\n"),
-			      h->root.root.string);
-      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
@@ -5075,7 +5490,7 @@ ppc_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
      copy the initial value out of the dynamic object and into the
      runtime process image.  We need to remember the offset into the
      .rela.bss section we are going to use.  */
-  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
       asection *srel;
 
@@ -5589,7 +6004,7 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (htab->elf.dynobj, ".interp");
+	  s = bfd_get_linker_section (htab->elf.dynobj, ".interp");
 	  BFD_ASSERT (s != NULL);
 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
@@ -5829,7 +6244,8 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
   if (htab->glink != NULL
       && htab->glink->size != 0
       && htab->glink_eh_frame != NULL
-      && !bfd_is_abs_section (htab->glink_eh_frame->output_section))
+      && !bfd_is_abs_section (htab->glink_eh_frame->output_section)
+      && _bfd_elf_eh_frame_present (info))
     {
       s = htab->glink_eh_frame;
       s->size = sizeof (glink_eh_frame_cie) + 20;
@@ -5874,7 +6290,8 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 	{
 	  /* Strip these too.  */
 	}
-      else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rela"))
+      else if (CONST_STRNEQ (bfd_get_section_name (htab->elf.dynobj, s),
+			     ".rela"))
 	{
 	  if (s->size != 0)
 	    {
@@ -5977,6 +6394,66 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
    }
 #undef add_dynamic_entry
 
+  if (htab->glink_eh_frame != NULL
+      && htab->glink_eh_frame->contents != NULL)
+    {
+      unsigned char *p = htab->glink_eh_frame->contents;
+      bfd_vma val;
+
+      memcpy (p, glink_eh_frame_cie, sizeof (glink_eh_frame_cie));
+      /* CIE length (rewrite in case little-endian).  */
+      bfd_put_32 (htab->elf.dynobj, sizeof (glink_eh_frame_cie) - 4, p);
+      p += sizeof (glink_eh_frame_cie);
+      /* FDE length.  */
+      val = htab->glink_eh_frame->size - 4 - sizeof (glink_eh_frame_cie);
+      bfd_put_32 (htab->elf.dynobj, val, p);
+      p += 4;
+      /* CIE pointer.  */
+      val = p - htab->glink_eh_frame->contents;
+      bfd_put_32 (htab->elf.dynobj, val, p);
+      p += 4;
+      /* Offset to .glink.  Set later.  */
+      p += 4;
+      /* .glink size.  */
+      bfd_put_32 (htab->elf.dynobj, htab->glink->size, p);
+      p += 4;
+      /* Augmentation.  */
+      p += 1;
+
+      if (info->shared
+	  && htab->elf.dynamic_sections_created)
+	{
+	  bfd_vma adv = (htab->glink->size - GLINK_PLTRESOLVE + 8) >> 2;
+	  if (adv < 64)
+	    *p++ = DW_CFA_advance_loc + adv;
+	  else if (adv < 256)
+	    {
+	      *p++ = DW_CFA_advance_loc1;
+	      *p++ = adv;
+	    }
+	  else if (adv < 65536)
+	    {
+	      *p++ = DW_CFA_advance_loc2;
+	      bfd_put_16 (htab->elf.dynobj, adv, p);
+	      p += 2;
+	    }
+	  else
+	    {
+	      *p++ = DW_CFA_advance_loc4;
+	      bfd_put_32 (htab->elf.dynobj, adv, p);
+	      p += 4;
+	    }
+	  *p++ = DW_CFA_register;
+	  *p++ = 65;
+	  p++;
+	  *p++ = DW_CFA_advance_loc + 4;
+	  *p++ = DW_CFA_restore_extended;
+	  *p++ = 65;
+	}
+      BFD_ASSERT ((bfd_vma) ((p + 3 - htab->glink_eh_frame->contents) & -4)
+		  == htab->glink_eh_frame->size);
+    }
+
   return TRUE;
 }
 
@@ -6231,7 +6708,7 @@ ppc_elf_relax_section (bfd *abfd,
 	 attribute for a code section, and we are only looking at
 	 branches.  However, implement it correctly here as a
 	 reference for other target relax_section functions.  */
-      if (0 && tsec->sec_info_type == ELF_INFO_TYPE_MERGE)
+      if (0 && tsec->sec_info_type == SEC_INFO_TYPE_MERGE)
 	{
 	  /* At this stage in linking, no SEC_MERGE symbol has been
 	     adjusted, so all references to such symbols need to be
@@ -6886,7 +7363,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
 	  sym_name = h->root.root.string;
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	{
 	  /* For relocs against symbols from removed linkonce sections,
 	     or sections discarded by a linker script, we just want the
@@ -6895,7 +7372,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
 	  if (r_type < R_PPC_max)
 	    howto = ppc_elf_howto_table[r_type];
 	  RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					   rel, relend, howto, contents);
+					   rel, 1, relend, howto, 0, contents);
 	}
 
       if (info->relocatable)
@@ -7618,6 +8095,9 @@ ppc_elf_relocate_section (bfd *output_bfd,
 	case R_PPC_UADDR16:
 	  goto dodyn;
 
+	case R_PPC_VLE_REL8:
+	case R_PPC_VLE_REL15:
+	case R_PPC_VLE_REL24:
 	case R_PPC_REL24:
 	case R_PPC_REL14:
 	case R_PPC_REL14_BRTAKEN:
@@ -7893,8 +8373,10 @@ ppc_elf_relocate_section (bfd *output_bfd,
 	      unresolved_reloc = TRUE;
 	      break;
 	    }
-	  BFD_ASSERT (strcmp (bfd_get_section_name (abfd, sec), ".got") == 0
-		      || strcmp (bfd_get_section_name (abfd, sec), ".cgot") == 0);
+	  BFD_ASSERT (strcmp (bfd_get_section_name (sec->owner, sec),
+			      ".got") == 0
+		      || strcmp (bfd_get_section_name (sec->owner, sec),
+				 ".cgot") == 0);
 
 	  addend -= sec->output_section->vma + sec->output_offset + 0x8000;
 	  break;
@@ -7944,7 +8426,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
 	      }
 	    addend -= SYM_VAL (sda);
 
-	    name = bfd_get_section_name (abfd, sec->output_section);
+	    name = bfd_get_section_name (output_bfd, sec->output_section);
 	    if (! ((CONST_STRNEQ (name, ".sdata")
 		    && (name[6] == 0 || name[6] == '.'))
 		   || (CONST_STRNEQ (name, ".sbss")
@@ -7976,7 +8458,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
 	      }
 	    addend -= SYM_VAL (sda);
 
-	    name = bfd_get_section_name (abfd, sec->output_section);
+	    name = bfd_get_section_name (output_bfd, sec->output_section);
 	    if (! (CONST_STRNEQ (name, ".sdata2")
 		   || CONST_STRNEQ (name, ".sbss2")))
 	      {
@@ -7991,9 +8473,53 @@ ppc_elf_relocate_section (bfd *output_bfd,
 	  }
 	  break;
 
+	case R_PPC_VLE_LO16A:
+	  relocation = (relocation + addend) & 0xffff;
+	  ppc_elf_vle_split16 (output_bfd, contents, rel->r_offset,
+                               relocation, split16a_type);
+	  continue;
+
+	case R_PPC_VLE_LO16D:
+	  relocation = (relocation + addend) & 0xffff;
+	  ppc_elf_vle_split16 (output_bfd, contents, rel->r_offset,
+                               relocation, split16d_type);
+	  continue;
+
+	case R_PPC_VLE_HI16A:
+	  relocation = ((relocation + addend) >> 16) & 0xffff;
+	  ppc_elf_vle_split16 (output_bfd, contents, rel->r_offset,
+                               relocation, split16a_type);
+	  continue;
+
+	case R_PPC_VLE_HI16D:
+	  relocation = ((relocation + addend) >> 16) & 0xffff;
+	  ppc_elf_vle_split16 (output_bfd, contents, rel->r_offset,
+                               relocation, split16d_type);
+	  continue;
+
+	case R_PPC_VLE_HA16A:
+	  {
+	    bfd_vma value = relocation + addend;
+	    value = (((value >> 16) + ((value & 0x8000) ? 1 : 0)) & 0xffff);
+	    ppc_elf_vle_split16 (output_bfd, contents, rel->r_offset,
+                                 value, split16a_type);
+	  }
+	  continue;
+
+	case R_PPC_VLE_HA16D:
+	  {
+	    bfd_vma value = relocation + addend;
+	    value = (((value >> 16) + ((value & 0x8000) ? 1 : 0)) & 0xffff);
+	    ppc_elf_vle_split16 (output_bfd, contents, rel->r_offset,
+                                 value, split16d_type);
+	  }
+	  continue;
+
 	  /* Relocate against either _SDA_BASE_, _SDA2_BASE_, or 0.  */
 	case R_PPC_EMB_SDA21:
+	case R_PPC_VLE_SDA21:
 	case R_PPC_EMB_RELSDA:
+	case R_PPC_VLE_SDA21_LO:
 	  {
 	    const char *name;
 	    int reg;
@@ -8005,7 +8531,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
 		break;
 	      }
 
-	    name = bfd_get_section_name (abfd, sec->output_section);
+	    name = bfd_get_section_name (output_bfd, sec->output_section);
 	    if (((CONST_STRNEQ (name, ".sdata")
 		  && (name[6] == 0 || name[6] == '.'))
 		 || (CONST_STRNEQ (name, ".sbss")
@@ -8050,7 +8576,25 @@ ppc_elf_relocate_section (bfd *output_bfd,
 		addend -= SYM_VAL (sda);
 	      }
 
-	    if (r_type == R_PPC_EMB_SDA21)
+	    if (reg == 0
+		&& (r_type == R_PPC_VLE_SDA21
+		    || r_type == R_PPC_VLE_SDA21_LO))
+	      {
+		/* Use the split20 format.  */
+		bfd_vma insn, bits12to15, bits21to31;
+		bfd_vma value  = (relocation + rel->r_offset) & 0xffff;
+		/* Propagate sign bit, if necessary.  */
+		insn = (value & 0x8000) ? 0x70107800 : 0x70000000;
+		bits12to15 = value & 0x700;
+		bits21to31 = value & 0x7ff;
+		insn |= bits12to15;
+		insn |= bits21to31;
+  		bfd_put_32 (output_bfd, insn, contents + rel->r_offset);
+		continue;
+	      }
+	    else if (r_type == R_PPC_EMB_SDA21
+		     || r_type == R_PPC_VLE_SDA21
+		     || r_type == R_PPC_VLE_SDA21_LO)
 	      {
 		bfd_vma insn;  /* Fill in register field.  */
 
@@ -8061,6 +8605,107 @@ ppc_elf_relocate_section (bfd *output_bfd,
 	  }
 	  break;
 
+	case R_PPC_VLE_SDAREL_LO16A:
+	case R_PPC_VLE_SDAREL_LO16D:
+	case R_PPC_VLE_SDAREL_HI16A:
+	case R_PPC_VLE_SDAREL_HI16D:
+	case R_PPC_VLE_SDAREL_HA16A:
+	case R_PPC_VLE_SDAREL_HA16D:
+	  {
+	    bfd_vma value;
+	    const char *name;
+	    //int reg;
+	    struct elf_link_hash_entry *sda = NULL;
+
+	    if (sec == NULL || sec->output_section == NULL)
+	      {
+		unresolved_reloc = TRUE;
+		break;
+	      }
+
+	    name = bfd_get_section_name (output_bfd, sec->output_section);
+	    if (((CONST_STRNEQ (name, ".sdata")
+		  && (name[6] == 0 || name[6] == '.'))
+		 || (CONST_STRNEQ (name, ".sbss")
+		     && (name[5] == 0 || name[5] == '.'))))
+	      {
+		//reg = 13;
+		sda = htab->sdata[0].sym;
+	      }
+	    else if (CONST_STRNEQ (name, ".sdata2")
+		     || CONST_STRNEQ (name, ".sbss2"))
+	      {
+		//reg = 2;
+		sda = htab->sdata[1].sym;
+	      }
+	    else
+	      {
+		(*_bfd_error_handler)
+		  (_("%B: the target (%s) of a %s relocation is "
+		     "in the wrong output section (%s)"),
+		   input_bfd,
+		   sym_name,
+		   howto->name,
+		   name);
+
+		bfd_set_error (bfd_error_bad_value);
+		ret = FALSE;
+		continue;
+	      }
+
+	    if (sda != NULL)
+	      {
+		if (!is_static_defined (sda))
+		  {
+		    unresolved_reloc = TRUE;
+		    break;
+		  }
+	      }
+
+	   value = sda->root.u.def.section->output_section->vma
+   		   + sda->root.u.def.section->output_offset;
+
+	   if (r_type == R_PPC_VLE_SDAREL_LO16A)
+	      {
+		value = (value + addend) & 0xffff;
+	        ppc_elf_vle_split16 (output_bfd, contents, rel->r_offset,
+                                     value, split16a_type);
+	      }
+	   else if (r_type == R_PPC_VLE_SDAREL_LO16D)
+	      {
+		value = (value + addend) & 0xffff;
+	        ppc_elf_vle_split16 (output_bfd, contents, rel->r_offset,
+                                     value, split16d_type);
+	      }
+	   else if (r_type == R_PPC_VLE_SDAREL_HI16A)
+	      {
+		value = ((value + addend) >> 16) & 0xffff;
+	        ppc_elf_vle_split16 (output_bfd, contents, rel->r_offset,
+                                     value, split16a_type);
+	      }
+	   else if (r_type == R_PPC_VLE_SDAREL_HI16D)
+	      {
+		value = ((value + addend) >> 16) & 0xffff;
+	        ppc_elf_vle_split16 (output_bfd, contents, rel->r_offset,
+                                     value, split16d_type);
+	      }
+	   else if (r_type == R_PPC_VLE_SDAREL_HA16A)
+	      {
+		value += addend;
+		value = (((value >> 16) + ((value & 0x8000) ? 1 : 0)) & 0xffff);
+	        ppc_elf_vle_split16 (output_bfd, contents, rel->r_offset,
+                                     value, split16a_type);
+	      }
+	   else if (r_type == R_PPC_VLE_SDAREL_HA16D)
+	      {
+		value += addend;
+		value = (((value >> 16) + ((value & 0x8000) ? 1 : 0)) & 0xffff);
+	        ppc_elf_vle_split16 (output_bfd, contents, rel->r_offset,
+                                     value, split16d_type);
+	      }
+	  }
+	  continue;
+
 	  /* Relocate against the beginning of the section.  */
 	case R_PPC_SECTOFF:
 	case R_PPC_SECTOFF_LO:
@@ -8555,14 +9200,6 @@ ppc_elf_finish_dynamic_symbol (bfd *output_bfd,
   fprintf (stderr, "\n");
 #endif
 
-  /* Mark some specially defined symbols as absolute.  */
-  if (strcmp (h->root.root.string, "_DYNAMIC") == 0
-      || (!htab->is_vxworks
-	  && (h == htab->elf.hgot
-	      || strcmp (h->root.root.string,
-			 "_PROCEDURE_LINKAGE_TABLE_") == 0)))
-    sym->st_shndx = SHN_ABS;
-
   return TRUE;
 }
 

@@ -8603,9 +9240,9 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
 
   htab = ppc_elf_hash_table (info);
   dynobj = elf_hash_table (info)->dynobj;
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
   if (htab->is_vxworks)
-    splt = bfd_get_section_by_name (dynobj, ".plt");
+    splt = bfd_get_linker_section (dynobj, ".plt");
   else
     splt = NULL;
 
@@ -8997,17 +9634,10 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
       unsigned char *p = htab->glink_eh_frame->contents;
       bfd_vma val;
 
-      memcpy (p, glink_eh_frame_cie, sizeof (glink_eh_frame_cie));
-      /* CIE length (rewrite in case little-endian).  */
-      bfd_put_32 (htab->elf.dynobj, sizeof (glink_eh_frame_cie) - 4, p);
       p += sizeof (glink_eh_frame_cie);
       /* FDE length.  */
-      val = htab->glink_eh_frame->size - 4 - sizeof (glink_eh_frame_cie);
-      bfd_put_32 (htab->elf.dynobj, val, p);
       p += 4;
       /* CIE pointer.  */
-      val = p - htab->glink_eh_frame->contents;
-      bfd_put_32 (htab->elf.dynobj, val, p);
       p += 4;
       /* Offset to .glink.  */
       val = (htab->glink->output_section->vma
@@ -9016,47 +9646,8 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
 	      + htab->glink_eh_frame->output_offset);
       val -= p - htab->glink_eh_frame->contents;
       bfd_put_32 (htab->elf.dynobj, val, p);
-      p += 4;
-      /* .glink size.  */
-      bfd_put_32 (htab->elf.dynobj, htab->glink->size, p);
-      p += 4;
-      /* Augmentation.  */
-      p += 1;
-
-      if (info->shared
-	  && htab->elf.dynamic_sections_created)
-	{
-	  bfd_vma adv = (htab->glink->size - GLINK_PLTRESOLVE + 8) >> 2;
-	  if (adv < 64)
-	    *p++ = DW_CFA_advance_loc + adv;
-	  else if (adv < 256)
-	    {
-	      *p++ = DW_CFA_advance_loc1;
-	      *p++ = adv;
-	    }
-	  else if (adv < 65536)
-	    {
-	      *p++ = DW_CFA_advance_loc2;
-	      bfd_put_16 (htab->elf.dynobj, adv, p);
-	      p += 2;
-	    }
-	  else
-	    {
-	      *p++ = DW_CFA_advance_loc4;
-	      bfd_put_32 (htab->elf.dynobj, adv, p);
-	      p += 4;
-	    }
-	  *p++ = DW_CFA_register;
-	  *p++ = 65;
-	  p++;
-	  *p++ = DW_CFA_advance_loc + 4;
-	  *p++ = DW_CFA_restore_extended;
-	  *p++ = 65;
-	}
-      BFD_ASSERT ((bfd_vma) ((p + 3 - htab->glink_eh_frame->contents) & -4)
-		  == htab->glink_eh_frame->size);
 
-      if (htab->glink_eh_frame->sec_info_type == ELF_INFO_TYPE_EH_FRAME
+      if (htab->glink_eh_frame->sec_info_type == SEC_INFO_TYPE_EH_FRAME
 	  && !_bfd_elf_write_section_eh_frame (output_bfd, info,
 					       htab->glink_eh_frame,
 					       htab->glink_eh_frame->contents))
@@ -9099,7 +9690,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
 #define bfd_elf32_bfd_merge_private_bfd_data	ppc_elf_merge_private_bfd_data
 #define bfd_elf32_bfd_relax_section		ppc_elf_relax_section
 #define bfd_elf32_bfd_reloc_type_lookup		ppc_elf_reloc_type_lookup
-#define bfd_elf32_bfd_reloc_name_lookup	ppc_elf_reloc_name_lookup
+#define bfd_elf32_bfd_reloc_name_lookup		ppc_elf_reloc_name_lookup
 #define bfd_elf32_bfd_set_private_flags		ppc_elf_set_private_flags
 #define bfd_elf32_bfd_link_hash_table_create	ppc_elf_link_hash_table_create
 #define bfd_elf32_get_synthetic_symtab		ppc_elf_get_synthetic_symtab
@@ -9120,6 +9711,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
 #define elf_backend_finish_dynamic_sections	ppc_elf_finish_dynamic_sections
 #define elf_backend_fake_sections		ppc_elf_fake_sections
 #define elf_backend_additional_program_headers	ppc_elf_additional_program_headers
+#define elf_backend_modify_segment_map     	ppc_elf_modify_segment_map
 #define elf_backend_grok_prstatus		ppc_elf_grok_prstatus
 #define elf_backend_grok_psinfo			ppc_elf_grok_psinfo
 #define elf_backend_write_core_note		ppc_elf_write_core_note
@@ -9132,6 +9724,8 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
 #define elf_backend_action_discarded		ppc_elf_action_discarded
 #define elf_backend_init_index_section		_bfd_elf_init_1_index_section
 #define elf_backend_post_process_headers	_bfd_elf_set_osabi
+#define elf_backend_lookup_section_flags_hook	ppc_elf_lookup_section_flags
+#define elf_backend_section_processing		ppc_elf_section_processing
 
 #include "elf32-target.h"
 
diff --git a/bfd/elf32-ppc.h b/bfd/elf32-ppc.h
index 4becb30..0bf973c 100644
--- a/bfd/elf32-ppc.h
+++ b/bfd/elf32-ppc.h
@@ -1,5 +1,5 @@
 /* PowerPC-specific support for 64-bit ELF.
-   Copyright 2003, 2005, 2007 Free Software Foundation, Inc.
+   Copyright 2003, 2005, 2007, 2009, 2012 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -31,3 +31,6 @@ int ppc_elf_select_plt_layout (bfd *, struct bfd_link_info *,
 asection *ppc_elf_tls_setup (bfd *, struct bfd_link_info *, int);
 bfd_boolean ppc_elf_tls_optimize (bfd *, struct bfd_link_info *);
 void ppc_elf_set_sdata_syms (bfd *, struct bfd_link_info *);
+extern bfd_boolean ppc_elf_modify_segment_map (bfd *,
+		           struct bfd_link_info * ATTRIBUTE_UNUSED);
+extern bfd_boolean ppc_elf_section_processing (bfd *, Elf_Internal_Shdr *);
diff --git a/bfd/elf32-rl78.c b/bfd/elf32-rl78.c
index 92c01b0..f116839 100644
--- a/bfd/elf32-rl78.c
+++ b/bfd/elf32-rl78.c
@@ -1,5 +1,5 @@
 /* Renesas RL78 specific support for 32-bit ELF.
-   Copyright (C) 2011
+   Copyright (C) 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -85,7 +85,7 @@ static reloc_howto_type rl78_elf_howto_table [] =
   EMPTY_HOWTO (0x2a),
   EMPTY_HOWTO (0x2b),
   EMPTY_HOWTO (0x2c),
-  EMPTY_HOWTO (0x2d),
+  RL78REL (RH_RELAX, 0,  0, 0, dont,     FALSE),
 
   EMPTY_HOWTO (0x2e),
   EMPTY_HOWTO (0x2f),
@@ -234,7 +234,8 @@ static const struct rl78_reloc_map rl78_reloc_map [] =
   { BFD_RELOC_RL78_ABS32_REV,	R_RL78_ABS32_REV },
   { BFD_RELOC_RL78_ABS16UL,	R_RL78_ABS16UL },
   { BFD_RELOC_RL78_ABS16UW,	R_RL78_ABS16UW },
-  { BFD_RELOC_RL78_ABS16U,	R_RL78_ABS16U }
+  { BFD_RELOC_RL78_ABS16U,	R_RL78_ABS16U },
+  { BFD_RELOC_RL78_RELAX,	R_RL78_RH_RELAX }
 };
 
 static reloc_howto_type *
@@ -424,7 +425,7 @@ rl78_elf_relocate_section
   dynobj = elf_hash_table (info)->dynobj;
   splt = NULL;
   if (dynobj != NULL)
-    splt = bfd_get_section_by_name (dynobj, ".plt");
+    splt = bfd_get_linker_section (dynobj, ".plt");
 
   for (rel = relocs; rel < relend; rel ++)
     {
@@ -470,9 +471,9 @@ rl78_elf_relocate_section
 	  name = h->root.root.string;
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	{
@@ -496,20 +497,8 @@ rl78_elf_relocate_section
 	    else
 	      plt_offset = elf_local_got_offsets (input_bfd) + r_symndx;
 
-	    /*	    printf("%s: rel %x plt %d\n", h ? h->root.root.string : "(none)",
-		    relocation, *plt_offset);*/
-	    if (valid_16bit_address (relocation))
+	    if (! valid_16bit_address (relocation))
 	      {
-	        /* If the symbol is in range for a 16-bit address, we should
-		   have deallocated the plt entry in relax_section.  */
-	        BFD_ASSERT (*plt_offset == (bfd_vma) -1);
-	      }
-	    else
-	      {
-		/* If the symbol is out of range for a 16-bit address,
-		   we must have allocated a plt entry.  */
-		BFD_ASSERT (*plt_offset != (bfd_vma) -1);
-
 		/* If this is the first time we've processed this symbol,
 		   fill in the plt entry with the correct symbol address.  */
 		if ((*plt_offset & 1) == 0)
@@ -575,6 +564,9 @@ rl78_elf_relocate_section
 	case R_RL78_NONE:
 	  break;
 
+	case R_RL78_RH_RELAX:
+	  break;
+
 	case R_RL78_DIR8S_PCREL:
 	  RANGE (-128, 127);
 	  OP (0) = relocation;
@@ -656,6 +648,16 @@ rl78_elf_relocate_section
 	  OP (0) = relocation >> 24;
 	  break;
 
+	case R_RL78_RH_SFR:
+	  RANGE (0xfff00, 0xfffff);
+	  OP (0) = relocation & 0xff;
+	  break;
+
+	case R_RL78_RH_SADDR:
+	  RANGE (0xffe20, 0xfff1f);
+	  OP (0) = relocation & 0xff;
+	  break;
+
 	  /* Complex reloc handling:  */
 
 	case R_RL78_ABS32:
@@ -1132,18 +1134,6 @@ rl78_dump_symtab (bfd * abfd, void * internal_syms, void * external_syms)
 	case SHN_UNDEF: st_shndx_str = "SHN_UNDEF";
 	default: st_shndx_str = "";
 	}
-
-      printf ("isym = %p st_value = %lx st_size = %lx st_name = (%lu) %s "
-	      "st_info = (%d) %s %s st_other = (%d) %s st_shndx = (%d) %s\n",
-	      isym,
-	      (unsigned long) isym->st_value,
-	      (unsigned long) isym->st_size,
-	      isym->st_name,
-	      bfd_elf_string_from_elf_section (abfd, symtab_hdr->sh_link,
-					       isym->st_name),
-	      isym->st_info, st_info_str, st_info_stb_str,
-	      isym->st_other, st_other_str,
-	      isym->st_shndx, st_shndx_str);
     }
   if (free_internal)
     free (internal_syms);
@@ -1218,13 +1208,14 @@ rl78_elf_check_relocs
 	    elf_hash_table (info)->dynobj = dynobj = abfd;
 	  if (splt == NULL)
 	    {
-	      splt = bfd_get_section_by_name (dynobj, ".plt");
+	      splt = bfd_get_linker_section (dynobj, ".plt");
 	      if (splt == NULL)
 		{
 		  flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
 				    | SEC_IN_MEMORY | SEC_LINKER_CREATED
 				    | SEC_READONLY | SEC_CODE);
-		  splt = bfd_make_section_with_flags (dynobj, ".plt", flags);
+		  splt = bfd_make_section_anyway_with_flags (dynobj, ".plt",
+							     flags);
 		  if (splt == NULL
 		      || ! bfd_set_section_alignment (dynobj, splt, 1))
 		    return FALSE;
@@ -1273,18 +1264,24 @@ rl78_elf_finish_dynamic_sections (bfd *abfd ATTRIBUTE_UNUSED,
   bfd *dynobj;
   asection *splt;
 
-  /* As an extra sanity check, verify that all plt entries have
-     been filled in.  */
+  /* As an extra sanity check, verify that all plt entries have been
+     filled in.  However, relaxing might have changed the relocs so
+     that some plt entries don't get filled in, so we have to skip
+     this check if we're relaxing.  Unfortunately, check_relocs is
+     called before relaxation.  */
 
-  if ((dynobj = elf_hash_table (info)->dynobj) != NULL
-      && (splt = bfd_get_section_by_name (dynobj, ".plt")) != NULL)
+  if (info->relax_trip > 0)
     {
-      bfd_byte *contents = splt->contents;
-      unsigned int i, size = splt->size;
-      for (i = 0; i < size; i += 4)
+      if ((dynobj = elf_hash_table (info)->dynobj) != NULL
+	  && (splt = bfd_get_linker_section (dynobj, ".plt")) != NULL)
 	{
-	  unsigned int x = bfd_get_32 (dynobj, contents + i);
-	  BFD_ASSERT (x != 0);
+	  bfd_byte *contents = splt->contents;
+	  unsigned int i, size = splt->size;
+	  for (i = 0; i < size; i += 4)
+	    {
+	      unsigned int x = bfd_get_32 (dynobj, contents + i);
+	      BFD_ASSERT (x != 0);
+	    }
 	}
     }
 
@@ -1305,7 +1302,7 @@ rl78_elf_always_size_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
   if (dynobj == NULL)
     return TRUE;
 
-  splt = bfd_get_section_by_name (dynobj, ".plt");
+  splt = bfd_get_linker_section (dynobj, ".plt");
   BFD_ASSERT (splt != NULL);
 
   splt->contents = (bfd_byte *) bfd_zalloc (dynobj, splt->size);
@@ -1329,8 +1326,7 @@ struct relax_plt_data
 };
 
 static bfd_boolean
-rl78_relax_plt_check (struct elf_link_hash_entry *h,
-                      PTR xdata)
+rl78_relax_plt_check (struct elf_link_hash_entry *h, void * xdata)
 {
   struct relax_plt_data *data = (struct relax_plt_data *) xdata;
 
@@ -1361,8 +1357,7 @@ rl78_relax_plt_check (struct elf_link_hash_entry *h,
    previously had a plt entry, give it a new entry offset.  */
 
 static bfd_boolean
-rl78_relax_plt_realloc (struct elf_link_hash_entry *h,
-                        PTR xdata)
+rl78_relax_plt_realloc (struct elf_link_hash_entry *h, void * xdata)
 {
   bfd_vma *entry = (bfd_vma *) xdata;
 
@@ -1503,6 +1498,485 @@ rl78_elf_relax_plt_section (bfd *dynobj,
   return TRUE;
 }
 
+/* Delete some bytes from a section while relaxing.  */
+
+static bfd_boolean
+elf32_rl78_relax_delete_bytes (bfd *abfd, asection *sec, bfd_vma addr, int count,
+			     Elf_Internal_Rela *alignment_rel, int force_snip)
+{
+  Elf_Internal_Shdr * symtab_hdr;
+  unsigned int        sec_shndx;
+  bfd_byte *          contents;
+  Elf_Internal_Rela * irel;
+  Elf_Internal_Rela * irelend;
+  Elf_Internal_Sym *  isym;
+  Elf_Internal_Sym *  isymend;
+  bfd_vma             toaddr;
+  unsigned int        symcount;
+  struct elf_link_hash_entry ** sym_hashes;
+  struct elf_link_hash_entry ** end_hashes;
+
+  if (!alignment_rel)
+    force_snip = 1;
+
+  sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
+
+  contents = elf_section_data (sec)->this_hdr.contents;
+
+  /* The deletion must stop at the next alignment boundary, if
+     ALIGNMENT_REL is non-NULL.  */
+  toaddr = sec->size;
+  if (alignment_rel)
+    toaddr = alignment_rel->r_offset;
+
+  irel = elf_section_data (sec)->relocs;
+  irelend = irel + sec->reloc_count;
+
+  /* Actually delete the bytes.  */
+  memmove (contents + addr, contents + addr + count,
+	   (size_t) (toaddr - addr - count));
+
+  /* If we don't have an alignment marker to worry about, we can just
+     shrink the section.  Otherwise, we have to fill in the newly
+     created gap with NOP insns (0x03).  */
+  if (force_snip)
+    sec->size -= count;
+  else
+    memset (contents + toaddr - count, 0x03, count);
+
+  /* Adjust all the relocs.  */
+  for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
+    {
+      /* Get the new reloc address.  */
+      if (irel->r_offset > addr
+	  && (irel->r_offset < toaddr
+	      || (force_snip && irel->r_offset == toaddr)))
+	irel->r_offset -= count;
+
+      /* If we see an ALIGN marker at the end of the gap, we move it
+	 to the beginning of the gap, since marking these gaps is what
+	 they're for.  */
+      if (irel->r_offset == toaddr
+	  && ELF32_R_TYPE (irel->r_info) == R_RL78_RH_RELAX
+	  && irel->r_addend & RL78_RELAXA_ALIGN)
+	irel->r_offset -= count;
+    }
+
+  /* Adjust the local symbols defined in this section.  */
+  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+  isym = (Elf_Internal_Sym *) symtab_hdr->contents;
+  isymend = isym + symtab_hdr->sh_info;
+
+  for (; isym < isymend; isym++)
+    {
+      /* If the symbol is in the range of memory we just moved, we
+	 have to adjust its value.  */
+      if (isym->st_shndx == sec_shndx
+	  && isym->st_value > addr
+	  && isym->st_value < toaddr)
+	isym->st_value -= count;
+
+      /* If the symbol *spans* the bytes we just deleted (i.e. it's
+	 *end* is in the moved bytes but it's *start* isn't), then we
+	 must adjust its size.  */
+      if (isym->st_shndx == sec_shndx
+	  && isym->st_value < addr
+	  && isym->st_value + isym->st_size > addr
+	  && isym->st_value + isym->st_size < toaddr)
+	isym->st_size -= count;
+    }
+
+  /* Now adjust the global symbols defined in this section.  */
+  symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
+	      - symtab_hdr->sh_info);
+  sym_hashes = elf_sym_hashes (abfd);
+  end_hashes = sym_hashes + symcount;
+
+  for (; sym_hashes < end_hashes; sym_hashes++)
+    {
+      struct elf_link_hash_entry *sym_hash = *sym_hashes;
+
+      if ((sym_hash->root.type == bfd_link_hash_defined
+	   || sym_hash->root.type == bfd_link_hash_defweak)
+	  && sym_hash->root.u.def.section == sec)
+	{
+	  /* As above, adjust the value if needed.  */
+	  if (sym_hash->root.u.def.value > addr
+	      && sym_hash->root.u.def.value < toaddr)
+	    sym_hash->root.u.def.value -= count;
+
+	  /* As above, adjust the size if needed.  */
+	  if (sym_hash->root.u.def.value < addr
+	      && sym_hash->root.u.def.value + sym_hash->size > addr
+	      && sym_hash->root.u.def.value + sym_hash->size < toaddr)
+	    sym_hash->size -= count;
+	}
+    }
+
+  return TRUE;
+}
+
+/* Used to sort relocs by address.  If relocs have the same address,
+   we maintain their relative order, except that R_RL78_RH_RELAX
+   alignment relocs must be the first reloc for any given address.  */
+
+static void
+reloc_bubblesort (Elf_Internal_Rela * r, int count)
+{
+  int i;
+  bfd_boolean again;
+  bfd_boolean swappit;
+
+  /* This is almost a classic bubblesort.  It's the slowest sort, but
+     we're taking advantage of the fact that the relocations are
+     mostly in order already (the assembler emits them that way) and
+     we need relocs with the same address to remain in the same
+     relative order.  */
+  again = TRUE;
+  while (again)
+    {
+      again = FALSE;
+      for (i = 0; i < count - 1; i ++)
+	{
+	  if (r[i].r_offset > r[i + 1].r_offset)
+	    swappit = TRUE;
+	  else if (r[i].r_offset < r[i + 1].r_offset)
+	    swappit = FALSE;
+	  else if (ELF32_R_TYPE (r[i + 1].r_info) == R_RL78_RH_RELAX
+		   && (r[i + 1].r_addend & RL78_RELAXA_ALIGN))
+	    swappit = TRUE;
+	  else if (ELF32_R_TYPE (r[i + 1].r_info) == R_RL78_RH_RELAX
+		   && (r[i + 1].r_addend & RL78_RELAXA_ELIGN)
+		   && !(ELF32_R_TYPE (r[i].r_info) == R_RL78_RH_RELAX
+			&& (r[i].r_addend & RL78_RELAXA_ALIGN)))
+	    swappit = TRUE;
+	  else
+	    swappit = FALSE;
+
+	  if (swappit)
+	    {
+	      Elf_Internal_Rela tmp;
+
+	      tmp = r[i];
+	      r[i] = r[i + 1];
+	      r[i + 1] = tmp;
+	      /* If we do move a reloc back, re-scan to see if it
+		 needs to be moved even further back.  This avoids
+		 most of the O(n^2) behavior for our cases.  */
+	      if (i > 0)
+		i -= 2;
+	      again = TRUE;
+	    }
+	}
+    }
+}
+
+
+#define OFFSET_FOR_RELOC(rel, lrel, scale) \
+  rl78_offset_for_reloc (abfd, rel + 1, symtab_hdr, shndx_buf, intsyms, \
+		       lrel, abfd, sec, link_info, scale)
+
+static bfd_vma
+rl78_offset_for_reloc (bfd *                    abfd,
+		     Elf_Internal_Rela *      rel,
+		     Elf_Internal_Shdr *      symtab_hdr,
+		     Elf_External_Sym_Shndx * shndx_buf ATTRIBUTE_UNUSED,
+		     Elf_Internal_Sym *       intsyms,
+		     Elf_Internal_Rela **     lrel,
+		     bfd *                    input_bfd,
+		     asection *               input_section,
+		     struct bfd_link_info *   info,
+		     int *                    scale)
+{
+  bfd_vma symval;
+  bfd_reloc_status_type r;
+
+  *scale = 1;
+
+  /* REL is the first of 1..N relocations.  We compute the symbol
+     value for each relocation, then combine them if needed.  LREL
+     gets a pointer to the last relocation used.  */
+  while (1)
+    {
+      int32_t tmp1, tmp2;
+
+      /* Get the value of the symbol referred to by the reloc.  */
+      if (ELF32_R_SYM (rel->r_info) < symtab_hdr->sh_info)
+	{
+	  /* A local symbol.  */
+	  Elf_Internal_Sym *isym;
+	  asection *ssec;
+
+	  isym = intsyms + ELF32_R_SYM (rel->r_info);
+
+	  if (isym->st_shndx == SHN_UNDEF)
+	    ssec = bfd_und_section_ptr;
+	  else if (isym->st_shndx == SHN_ABS)
+	    ssec = bfd_abs_section_ptr;
+	  else if (isym->st_shndx == SHN_COMMON)
+	    ssec = bfd_com_section_ptr;
+	  else
+	    ssec = bfd_section_from_elf_index (abfd,
+					       isym->st_shndx);
+
+	  /* Initial symbol value.  */
+	  symval = isym->st_value;
+
+	  /* GAS may have made this symbol relative to a section, in
+	     which case, we have to add the addend to find the
+	     symbol.  */
+	  if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
+	    symval += rel->r_addend;
+
+	  if (ssec)
+	    {
+	      if ((ssec->flags & SEC_MERGE)
+		  && ssec->sec_info_type == SEC_INFO_TYPE_MERGE)
+		symval = _bfd_merged_section_offset (abfd, & ssec,
+						     elf_section_data (ssec)->sec_info,
+						     symval);
+	    }
+
+	  /* Now make the offset relative to where the linker is putting it.  */
+	  if (ssec)
+	    symval +=
+	      ssec->output_section->vma + ssec->output_offset;
+
+	  symval += rel->r_addend;
+	}
+      else
+	{
+	  unsigned long indx;
+	  struct elf_link_hash_entry * h;
+
+	  /* An external symbol.  */
+	  indx = ELF32_R_SYM (rel->r_info) - symtab_hdr->sh_info;
+	  h = elf_sym_hashes (abfd)[indx];
+	  BFD_ASSERT (h != NULL);
+
+	  if (h->root.type != bfd_link_hash_defined
+	      && h->root.type != bfd_link_hash_defweak)
+	    {
+	      /* This appears to be a reference to an undefined
+		 symbol.  Just ignore it--it will be caught by the
+		 regular reloc processing.  */
+	      if (lrel)
+		*lrel = rel;
+	      return 0;
+	    }
+
+	  symval = (h->root.u.def.value
+		    + h->root.u.def.section->output_section->vma
+		    + h->root.u.def.section->output_offset);
+
+	  symval += rel->r_addend;
+	}
+
+      switch (ELF32_R_TYPE (rel->r_info))
+	{
+	case R_RL78_SYM:
+	  RL78_STACK_PUSH (symval);
+	  break;
+
+	case R_RL78_OPneg:
+	  RL78_STACK_POP (tmp1);
+	  tmp1 = - tmp1;
+	  RL78_STACK_PUSH (tmp1);
+	  break;
+
+	case R_RL78_OPadd:
+	  RL78_STACK_POP (tmp1);
+	  RL78_STACK_POP (tmp2);
+	  tmp1 += tmp2;
+	  RL78_STACK_PUSH (tmp1);
+	  break;
+
+	case R_RL78_OPsub:
+	  RL78_STACK_POP (tmp1);
+	  RL78_STACK_POP (tmp2);
+	  tmp2 -= tmp1;
+	  RL78_STACK_PUSH (tmp2);
+	  break;
+
+	case R_RL78_OPmul:
+	  RL78_STACK_POP (tmp1);
+	  RL78_STACK_POP (tmp2);
+	  tmp1 *= tmp2;
+	  RL78_STACK_PUSH (tmp1);
+	  break;
+
+	case R_RL78_OPdiv:
+	  RL78_STACK_POP (tmp1);
+	  RL78_STACK_POP (tmp2);
+	  tmp1 /= tmp2;
+	  RL78_STACK_PUSH (tmp1);
+	  break;
+
+	case R_RL78_OPshla:
+	  RL78_STACK_POP (tmp1);
+	  RL78_STACK_POP (tmp2);
+	  tmp1 <<= tmp2;
+	  RL78_STACK_PUSH (tmp1);
+	  break;
+
+	case R_RL78_OPshra:
+	  RL78_STACK_POP (tmp1);
+	  RL78_STACK_POP (tmp2);
+	  tmp1 >>= tmp2;
+	  RL78_STACK_PUSH (tmp1);
+	  break;
+
+	case R_RL78_OPsctsize:
+	  RL78_STACK_PUSH (input_section->size);
+	  break;
+
+	case R_RL78_OPscttop:
+	  RL78_STACK_PUSH (input_section->output_section->vma);
+	  break;
+
+	case R_RL78_OPand:
+	  RL78_STACK_POP (tmp1);
+	  RL78_STACK_POP (tmp2);
+	  tmp1 &= tmp2;
+	  RL78_STACK_PUSH (tmp1);
+	  break;
+
+	case R_RL78_OPor:
+	  RL78_STACK_POP (tmp1);
+	  RL78_STACK_POP (tmp2);
+	  tmp1 |= tmp2;
+	  RL78_STACK_PUSH (tmp1);
+	  break;
+
+	case R_RL78_OPxor:
+	  RL78_STACK_POP (tmp1);
+	  RL78_STACK_POP (tmp2);
+	  tmp1 ^= tmp2;
+	  RL78_STACK_PUSH (tmp1);
+	  break;
+
+	case R_RL78_OPnot:
+	  RL78_STACK_POP (tmp1);
+	  tmp1 = ~ tmp1;
+	  RL78_STACK_PUSH (tmp1);
+	  break;
+
+	case R_RL78_OPmod:
+	  RL78_STACK_POP (tmp1);
+	  RL78_STACK_POP (tmp2);
+	  tmp1 %= tmp2;
+	  RL78_STACK_PUSH (tmp1);
+	  break;
+
+	case R_RL78_OPromtop:
+	  RL78_STACK_PUSH (get_romstart (&r, info, input_bfd, input_section, rel->r_offset));
+	  break;
+
+	case R_RL78_OPramtop:
+	  RL78_STACK_PUSH (get_ramstart (&r, info, input_bfd, input_section, rel->r_offset));
+	  break;
+
+	case R_RL78_DIR16UL:
+	case R_RL78_DIR8UL:
+	case R_RL78_ABS16UL:
+	case R_RL78_ABS8UL:
+	  if (rl78_stack_top)
+	    RL78_STACK_POP (symval);
+	  if (lrel)
+	    *lrel = rel;
+	  *scale = 4;
+	  return symval;
+
+	case R_RL78_DIR16UW:
+	case R_RL78_DIR8UW:
+	case R_RL78_ABS16UW:
+	case R_RL78_ABS8UW:
+	  if (rl78_stack_top)
+	    RL78_STACK_POP (symval);
+	  if (lrel)
+	    *lrel = rel;
+	  *scale = 2;
+	  return symval;
+
+	default:
+	  if (rl78_stack_top)
+	    RL78_STACK_POP (symval);
+	  if (lrel)
+	    *lrel = rel;
+	  return symval;
+	}
+
+      rel ++;
+    }
+}
+
+struct {
+  int prefix;		/* or -1 for "no prefix" */
+  int insn;		/* or -1 for "end of list" */
+  int insn_for_saddr;	/* or -1 for "no alternative" */
+  int insn_for_sfr;	/* or -1 for "no alternative" */
+} relax_addr16[] = {
+  { -1, 0x02, 0x06, -1 },	/* ADDW	AX, !addr16 */
+  { -1, 0x22, 0x26, -1 },	/* SUBW	AX, !addr16 */
+  { -1, 0x42, 0x46, -1 },	/* CMPW	AX, !addr16 */
+  { -1, 0x40, 0x4a, -1 },	/* CMP	!addr16, #byte */
+
+  { -1, 0x0f, 0x0b, -1 },	/* ADD	A, !addr16 */
+  { -1, 0x1f, 0x1b, -1 },	/* ADDC	A, !addr16 */
+  { -1, 0x2f, 0x2b, -1 },	/* SUB	A, !addr16 */
+  { -1, 0x3f, 0x3b, -1 },	/* SUBC	A, !addr16 */
+  { -1, 0x4f, 0x4b, -1 },	/* CMP	A, !addr16 */
+  { -1, 0x5f, 0x5b, -1 },	/* AND	A, !addr16 */
+  { -1, 0x6f, 0x6b, -1 },	/* OR	A, !addr16 */
+  { -1, 0x7f, 0x7b, -1 },	/* XOR	A, !addr16 */
+
+  { -1, 0x8f, 0x8d, 0x8e },	/* MOV	A, !addr16 */
+  { -1, 0x9f, 0x9d, 0x9e },	/* MOV	!addr16, A */
+  { -1, 0xaf, 0xad, 0xae },	/* MOVW	AX, !addr16 */
+  { -1, 0xbf, 0xbd, 0xbe },	/* MOVW	!addr16, AX */
+  { -1, 0xcf, 0xcd, 0xce },	/* MOVW	!addr16, #word */
+
+  { -1, 0xa0, 0xa4, -1 },	/* INC	!addr16 */
+  { -1, 0xa2, 0xa6, -1 },	/* INCW	!addr16 */
+  { -1, 0xb0, 0xb4, -1 },	/* DEC	!addr16 */
+  { -1, 0xb2, 0xb6, -1 },	/* DECW	!addr16 */
+
+  { -1, 0xd5, 0xd4, -1 },	/* CMP0	!addr16 */
+  { -1, 0xe5, 0xe4, -1 },	/* ONEB	!addr16 */
+  { -1, 0xf5, 0xf4, -1 },	/* CLRB	!addr16 */
+
+  { -1, 0xd9, 0xd8, -1 },	/* MOV	X, !addr16 */
+  { -1, 0xe9, 0xe8, -1 },	/* MOV	B, !addr16 */
+  { -1, 0xf9, 0xf8, -1 },	/* MOV	C, !addr16 */
+  { -1, 0xdb, 0xda, -1 },	/* MOVW	BC, !addr16 */
+  { -1, 0xeb, 0xea, -1 },	/* MOVW	DE, !addr16 */
+  { -1, 0xfb, 0xfa, -1 },	/* MOVW	HL, !addr16 */
+
+  { 0x61, 0xaa, 0xa8, -1 },	/* XCH	A, !addr16 */
+
+  { 0x71, 0x00, 0x02, 0x0a },	/* SET1	!addr16.0 */
+  { 0x71, 0x10, 0x12, 0x1a },	/* SET1	!addr16.0 */
+  { 0x71, 0x20, 0x22, 0x2a },	/* SET1	!addr16.0 */
+  { 0x71, 0x30, 0x32, 0x3a },	/* SET1	!addr16.0 */
+  { 0x71, 0x40, 0x42, 0x4a },	/* SET1	!addr16.0 */
+  { 0x71, 0x50, 0x52, 0x5a },	/* SET1	!addr16.0 */
+  { 0x71, 0x60, 0x62, 0x6a },	/* SET1	!addr16.0 */
+  { 0x71, 0x70, 0x72, 0x7a },	/* SET1	!addr16.0 */
+
+  { 0x71, 0x08, 0x03, 0x0b },	/* CLR1	!addr16.0 */
+  { 0x71, 0x18, 0x13, 0x1b },	/* CLR1	!addr16.0 */
+  { 0x71, 0x28, 0x23, 0x2b },	/* CLR1	!addr16.0 */
+  { 0x71, 0x38, 0x33, 0x3b },	/* CLR1	!addr16.0 */
+  { 0x71, 0x48, 0x43, 0x4b },	/* CLR1	!addr16.0 */
+  { 0x71, 0x58, 0x53, 0x5b },	/* CLR1	!addr16.0 */
+  { 0x71, 0x68, 0x63, 0x6b },	/* CLR1	!addr16.0 */
+  { 0x71, 0x78, 0x73, 0x7b },	/* CLR1	!addr16.0 */
+  
+  { -1, -1, -1, -1 }
+};
+
+/* Relax one section.  */
+
 static bfd_boolean
 rl78_elf_relax_section
     (bfd *                  abfd,
@@ -1510,12 +1984,463 @@ rl78_elf_relax_section
      struct bfd_link_info * link_info,
      bfd_boolean *          again)
 {
+  Elf_Internal_Shdr * symtab_hdr;
+  Elf_Internal_Shdr * shndx_hdr;
+  Elf_Internal_Rela * internal_relocs;
+  Elf_Internal_Rela * free_relocs = NULL;
+  Elf_Internal_Rela * irel;
+  Elf_Internal_Rela * srel;
+  Elf_Internal_Rela * irelend;
+  Elf_Internal_Rela * next_alignment;
+  bfd_byte *          contents = NULL;
+  bfd_byte *          free_contents = NULL;
+  Elf_Internal_Sym *  intsyms = NULL;
+  Elf_Internal_Sym *  free_intsyms = NULL;
+  Elf_External_Sym_Shndx * shndx_buf = NULL;
+  bfd_vma pc;
+  bfd_vma symval ATTRIBUTE_UNUSED = 0;
+  int pcrel ATTRIBUTE_UNUSED = 0;
+  int code ATTRIBUTE_UNUSED = 0;
+  int section_alignment_glue;
+  int scale;
+
   if (abfd == elf_hash_table (link_info)->dynobj
       && strcmp (sec->name, ".plt") == 0)
     return rl78_elf_relax_plt_section (abfd, sec, link_info, again);
 
   /* Assume nothing changes.  */
   *again = FALSE;
+
+  /* We don't have to do anything for a relocatable link, if
+     this section does not have relocs, or if this is not a
+     code section.  */
+  if (link_info->relocatable
+      || (sec->flags & SEC_RELOC) == 0
+      || sec->reloc_count == 0
+      || (sec->flags & SEC_CODE) == 0)
+    return TRUE;
+
+  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+  shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
+
+  /* Get the section contents.  */
+  if (elf_section_data (sec)->this_hdr.contents != NULL)
+    contents = elf_section_data (sec)->this_hdr.contents;
+  /* Go get them off disk.  */
+  else
+    {
+      if (! bfd_malloc_and_get_section (abfd, sec, &contents))
+	goto error_return;
+      elf_section_data (sec)->this_hdr.contents = contents;
+    }
+
+  /* Read this BFD's symbols.  */
+  /* Get cached copy if it exists.  */
+  if (symtab_hdr->contents != NULL)
+    intsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
+  else
+    {
+      intsyms = bfd_elf_get_elf_syms (abfd, symtab_hdr, symtab_hdr->sh_info, 0, NULL, NULL, NULL);
+      symtab_hdr->contents = (bfd_byte *) intsyms;
+    }
+
+  if (shndx_hdr->sh_size != 0)
+    {
+      bfd_size_type amt;
+
+      amt = symtab_hdr->sh_info;
+      amt *= sizeof (Elf_External_Sym_Shndx);
+      shndx_buf = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
+      if (shndx_buf == NULL)
+	goto error_return;
+      if (bfd_seek (abfd, shndx_hdr->sh_offset, SEEK_SET) != 0
+	  || bfd_bread (shndx_buf, amt, abfd) != amt)
+	goto error_return;
+      shndx_hdr->contents = (bfd_byte *) shndx_buf;
+    }
+
+  /* Get a copy of the native relocations.  */
+  internal_relocs = (_bfd_elf_link_read_relocs
+		     (abfd, sec, 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;
+
+  /* The RL_ relocs must be just before the operand relocs they go
+     with, so we must sort them to guarantee this.  We use bubblesort
+     instead of qsort so we can guarantee that relocs with the same
+     address remain in the same relative order.  */
+  reloc_bubblesort (internal_relocs, sec->reloc_count);
+
+  /* Walk through them looking for relaxing opportunities.  */
+  irelend = internal_relocs + sec->reloc_count;
+
+
+  /* This will either be NULL or a pointer to the next alignment
+     relocation.  */
+  next_alignment = internal_relocs;
+
+  /* We calculate worst case shrinkage caused by alignment directives.
+     No fool-proof, but better than either ignoring the problem or
+     doing heavy duty analysis of all the alignment markers in all
+     input sections.  */
+  section_alignment_glue = 0;
+  for (irel = internal_relocs; irel < irelend; irel++)
+      if (ELF32_R_TYPE (irel->r_info) == R_RL78_RH_RELAX
+	  && irel->r_addend & RL78_RELAXA_ALIGN)
+	{
+	  int this_glue = 1 << (irel->r_addend & RL78_RELAXA_ANUM);
+
+	  if (section_alignment_glue < this_glue)
+	    section_alignment_glue = this_glue;
+	}
+  /* Worst case is all 0..N alignments, in order, causing 2*N-1 byte
+     shrinkage.  */
+  section_alignment_glue *= 2;
+
+  for (irel = internal_relocs; irel < irelend; irel++)
+    {
+      unsigned char *insn;
+      int nrelocs;
+
+      /* The insns we care about are all marked with one of these.  */
+      if (ELF32_R_TYPE (irel->r_info) != R_RL78_RH_RELAX)
+	continue;
+
+      if (irel->r_addend & RL78_RELAXA_ALIGN
+	  || next_alignment == internal_relocs)
+	{
+	  /* When we delete bytes, we need to maintain all the alignments
+	     indicated.  In addition, we need to be careful about relaxing
+	     jumps across alignment boundaries - these displacements
+	     *grow* when we delete bytes.  For now, don't shrink
+	     displacements across an alignment boundary, just in case.
+	     Note that this only affects relocations to the same
+	     section.  */
+	  next_alignment += 2;
+	  while (next_alignment < irelend
+		 && (ELF32_R_TYPE (next_alignment->r_info) != R_RL78_RH_RELAX
+		     || !(next_alignment->r_addend & RL78_RELAXA_ELIGN)))
+	    next_alignment ++;
+	  if (next_alignment >= irelend || next_alignment->r_offset == 0)
+	    next_alignment = NULL;
+	}
+
+      /* When we hit alignment markers, see if we've shrunk enough
+	 before them to reduce the gap without violating the alignment
+	 requirements.  */
+      if (irel->r_addend & RL78_RELAXA_ALIGN)
+	{
+	  /* At this point, the next relocation *should* be the ELIGN
+	     end marker.  */
+	  Elf_Internal_Rela *erel = irel + 1;
+	  unsigned int alignment, nbytes;
+
+	  if (ELF32_R_TYPE (erel->r_info) != R_RL78_RH_RELAX)
+	    continue;
+	  if (!(erel->r_addend & RL78_RELAXA_ELIGN))
+	    continue;
+
+	  alignment = 1 << (irel->r_addend & RL78_RELAXA_ANUM);
+
+	  if (erel->r_offset - irel->r_offset < alignment)
+	    continue;
+
+	  nbytes = erel->r_offset - irel->r_offset;
+	  nbytes /= alignment;
+	  nbytes *= alignment;
+
+	  elf32_rl78_relax_delete_bytes (abfd, sec, erel->r_offset-nbytes, nbytes, next_alignment,
+				       erel->r_offset == sec->size);
+	  *again = TRUE;
+
+	  continue;
+	}
+
+      if (irel->r_addend & RL78_RELAXA_ELIGN)
+	  continue;
+
+      insn = contents + irel->r_offset;
+
+      nrelocs = irel->r_addend & RL78_RELAXA_RNUM;
+
+      /* At this point, we have an insn that is a candidate for linker
+	 relaxation.  There are NRELOCS relocs following that may be
+	 relaxed, although each reloc may be made of more than one
+	 reloc entry (such as gp-rel symbols).  */
+
+      /* Get the value of the symbol referred to by the reloc.  Just
+         in case this is the last reloc in the list, use the RL's
+         addend to choose between this reloc (no addend) or the next
+         (yes addend, which means at least one following reloc).  */
+
+      /* srel points to the "current" reloction for this insn -
+	 actually the last reloc for a given operand, which is the one
+	 we need to update.  We check the relaxations in the same
+	 order that the relocations happen, so we'll just push it
+	 along as we go.  */
+      srel = irel;
+
+      pc = sec->output_section->vma + sec->output_offset
+	+ srel->r_offset;
+
+#define GET_RELOC \
+      symval = OFFSET_FOR_RELOC (srel, &srel, &scale); \
+      pcrel = symval - pc + srel->r_addend; \
+      nrelocs --;
+
+#define SNIPNR(offset, nbytes) \
+	elf32_rl78_relax_delete_bytes (abfd, sec, (insn - contents) + offset, nbytes, next_alignment, 0);
+#define SNIP(offset, nbytes, newtype) \
+        SNIPNR (offset, nbytes);						\
+	srel->r_info = ELF32_R_INFO (ELF32_R_SYM (srel->r_info), newtype)
+
+      /* The order of these bit tests must match the order that the
+	 relocs appear in.  Since we sorted those by offset, we can
+	 predict them.  */
+
+      /*----------------------------------------------------------------------*/
+      /* EF ad		BR $rel8	pcrel
+	 ED al ah	BR !abs16	abs
+	 EE al ah	BR $!rel16	pcrel
+	 EC al ah as	BR !!abs20	abs
+
+	 FD al ah	CALL !abs16	abs
+	 FE al ah	CALL $!rel16	pcrel
+	 FC al ah as	CALL !!abs20	abs
+
+	 DC ad		BC  $rel8
+	 DE ad		BNC $rel8
+	 DD ad		BZ  $rel8
+	 DF ad		BNZ $rel8
+	 61 C3 ad	BH  $rel8
+	 61 D3 ad	BNH $rel8
+	 61 C8 EF ad	SKC  ; BR $rel8
+	 61 D8 EF ad	SKNC ; BR $rel8
+	 61 E8 EF ad	SKZ  ; BR $rel8
+	 61 F8 EF ad	SKNZ ; BR $rel8
+	 61 E3 EF ad	SKH  ; BR $rel8
+	 61 F3 EF ad	SKNH ; BR $rel8
+       */
+
+      if (irel->r_addend & RL78_RELAXA_BRA)
+	{
+	  GET_RELOC;
+
+	  switch (insn[0])
+	    {
+	    case 0xec: /* BR !!abs20 */
+
+	      if (pcrel < 127
+		  && pcrel > -127)
+		{
+		  insn[0] = 0xef;
+		  insn[1] = pcrel;
+		  SNIP (2, 2, R_RL78_DIR8S_PCREL);
+		  *again = TRUE;
+		}
+	      else if (symval < 65536)
+		{
+		  insn[0] = 0xed;
+		  insn[1] = symval & 0xff;
+		  insn[2] = symval >> 8;
+		  SNIP (2, 1, R_RL78_DIR16S);
+		  *again = TRUE;
+		}
+	      else if (pcrel < 32767
+		       && pcrel > -32767)
+		{
+		  insn[0] = 0xee;
+		  insn[1] = pcrel & 0xff;
+		  insn[2] = pcrel >> 8;
+		  SNIP (2, 1, R_RL78_DIR16S_PCREL);
+		  *again = TRUE;
+		}
+	      break;
+
+	    case 0xee: /* BR $!pcrel16 */
+	    case 0xed: /* BR $!abs16 */
+	      if (pcrel < 127
+		  && pcrel > -127)
+		{
+		  insn[0] = 0xef;
+		  insn[1] = pcrel;
+		  SNIP (2, 1, R_RL78_DIR8S_PCREL);
+		  *again = TRUE;
+		}
+	      break;
+
+	    case 0xfc: /* CALL !!abs20 */
+	      if (symval < 65536)
+		{
+		  insn[0] = 0xfd;
+		  insn[1] = symval & 0xff;
+		  insn[2] = symval >> 8;
+		  SNIP (2, 1, R_RL78_DIR16S);
+		  *again = TRUE;
+		}
+	      else if (pcrel < 32767
+		       && pcrel > -32767)
+		{
+		  insn[0] = 0xfe;
+		  insn[1] = pcrel & 0xff;
+		  insn[2] = pcrel >> 8;
+		  SNIP (2, 1, R_RL78_DIR16S_PCREL);
+		  *again = TRUE;
+		}
+	      break;
+
+	    case 0x61: /* PREFIX */
+	      /* For SKIP/BR, we change the BR opcode and delete the
+		 SKIP.  That way, we don't have to find and change the
+		 relocation for the BR.  */
+	      switch (insn[1])
+		{
+		case 0xc8: /* SKC */
+		  if (insn[2] == 0xef)
+		    {
+		      insn[2] = 0xde; /* BNC */
+		      SNIPNR (0, 2);
+		    }
+		  break;
+
+		case 0xd8: /* SKNC */
+		  if (insn[2] == 0xef)
+		    {
+		      insn[2] = 0xdc; /* BC */
+		      SNIPNR (0, 2);
+		    }
+		  break;
+
+		case 0xe8: /* SKZ */
+		  if (insn[2] == 0xef)
+		    {
+		      insn[2] = 0xdf; /* BNZ */
+		      SNIPNR (0, 2);
+		    }
+		  break;
+
+		case 0xf8: /* SKNZ */
+		  if (insn[2] == 0xef)
+		    {
+		      insn[2] = 0xdd; /* BZ */
+		      SNIPNR (0, 2);
+		    }
+		  break;
+
+		case 0xe3: /* SKH */
+		  if (insn[2] == 0xef)
+		    {
+		      insn[2] = 0xd3; /* BNH */
+		      SNIPNR (1, 1); /* we reuse the 0x61 prefix from the SKH */
+		    }
+		  break;
+
+		case 0xf3: /* SKNH */
+		  if (insn[2] == 0xef)
+		    {
+		      insn[2] = 0xc3; /* BH */
+		      SNIPNR (1, 1); /* we reuse the 0x61 prefix from the SKH */
+		    }
+		  break;
+		}
+	      break;
+	    }
+	  
+	}
+
+      if (irel->r_addend & RL78_RELAXA_ADDR16)
+	{
+	  /*----------------------------------------------------------------------*/
+	  /* Some insns have both a 16-bit address operand and an 8-bit
+	     variant if the address is within a special range:
+
+	     Address		16-bit operand	SADDR range	SFR range
+	     FFF00-FFFFF	0xff00-0xffff	0x00-0xff
+	     FFE20-FFF1F	0xfe20-0xff1f	 		0x00-0xff
+
+	     The RELAX_ADDR16[] array has the insn encodings for the
+	     16-bit operand version, as well as the SFR and SADDR
+	     variants.  We only need to replace the encodings and
+	     adjust the operand.
+
+	     Note: we intentionally do not attempt to decode and skip
+	     any ES: prefix, as adding ES: means the addr16 (likely)
+	     no longer points to saddr/sfr space.
+	  */
+
+	  int is_sfr;
+	  int is_saddr;
+	  int idx;
+	  int poff;
+
+	  GET_RELOC;
+
+	  if (0xffe20 <= symval && symval <= 0xfffff)
+	    {
+
+	      is_saddr = (0xffe20 <= symval && symval <= 0xfff1f);
+	      is_sfr   = (0xfff00 <= symval && symval <= 0xfffff);
+
+	      for (idx = 0; relax_addr16[idx].insn != -1; idx ++)
+		{
+		  if (relax_addr16[idx].prefix != -1
+		      && insn[0] == relax_addr16[idx].prefix
+		      && insn[1] == relax_addr16[idx].insn)
+		    {
+		      poff = 1;
+		    }
+		  else if (relax_addr16[idx].prefix == -1
+			   && insn[0] == relax_addr16[idx].insn)
+		    {
+		      poff = 0;
+		    }
+		  else
+		    continue;
+
+		  /* We have a matched insn, and poff is 0 or 1 depending
+		     on the base pattern size.  */
+
+		  if (is_sfr && relax_addr16[idx].insn_for_sfr != -1)
+		    {
+		      insn[poff] = relax_addr16[idx].insn_for_sfr;
+		      SNIP (poff+2, 1, R_RL78_RH_SFR);
+		    }
+
+		  else if  (is_saddr && relax_addr16[idx].insn_for_saddr != -1)
+		    {
+		      insn[poff] = relax_addr16[idx].insn_for_saddr;
+		      SNIP (poff+2, 1, R_RL78_RH_SADDR);
+		    }
+		
+		}
+	    }
+	}
+
+      /*----------------------------------------------------------------------*/
+
+    }
+
+  return TRUE;
+
+ error_return:
+  if (free_relocs != NULL)
+    free (free_relocs);
+
+  if (free_contents != NULL)
+    free (free_contents);
+
+  if (shndx_buf != NULL)
+    {
+      shndx_hdr->contents = NULL;
+      free (shndx_buf);
+    }
+
+  if (free_intsyms != NULL)
+    free (free_intsyms);
+
   return TRUE;
 }
 
diff --git a/bfd/elf32-rx.c b/bfd/elf32-rx.c
index 0ceed85..771867f 100644
--- a/bfd/elf32-rx.c
+++ b/bfd/elf32-rx.c
@@ -1,5 +1,5 @@
 /* Renesas RX specific support for 32-bit ELF.
-   Copyright (C) 2008, 2009, 2010, 2011
+   Copyright (C) 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -521,9 +521,9 @@ rx_elf_relocate_section
 	  name = h->root.root.string;
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	{
@@ -1653,7 +1653,7 @@ rx_offset_for_reloc (bfd *                    abfd,
 	  if (ssec)
 	    {
 	      if ((ssec->flags & SEC_MERGE)
-		  && ssec->sec_info_type == ELF_INFO_TYPE_MERGE)
+		  && ssec->sec_info_type == SEC_INFO_TYPE_MERGE)
 		symval = _bfd_merged_section_offset (abfd, & ssec,
 						     elf_section_data (ssec)->sec_info,
 						     symval);
@@ -1926,14 +1926,14 @@ elf32_rx_relax_section (bfd *                  abfd,
       if (shndx_buf == NULL)
 	goto error_return;
       if (bfd_seek (abfd, shndx_hdr->sh_offset, SEEK_SET) != 0
-	  || bfd_bread ((PTR) shndx_buf, amt, abfd) != amt)
+	  || bfd_bread (shndx_buf, amt, abfd) != amt)
 	goto error_return;
       shndx_hdr->contents = (bfd_byte *) shndx_buf;
     }
 
   /* Get a copy of the native relocations.  */
   internal_relocs = (_bfd_elf_link_read_relocs
-		     (abfd, sec, (PTR) NULL, (Elf_Internal_Rela *) NULL,
+		     (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
 		      link_info->keep_memory));
   if (internal_relocs == NULL)
     goto error_return;
@@ -2115,7 +2115,7 @@ elf32_rx_relax_section (bfd *                  abfd,
 		   /* Decodable bits.  */
 		   && (insn[0] & 0xcc) == 0xcc
 		   /* Width.  */
-		   && (insn[0] & 0x30) != 3
+		   && (insn[0] & 0x30) != 0x30
 		   /* Register MSBs.  */
 		   && (insn[1] & 0x88)  == 0x00)
 	    {
@@ -2219,7 +2219,7 @@ elf32_rx_relax_section (bfd *                  abfd,
 		   /* Decodable bits.  */
 		   && (insn[0] & 0xc3) == 0xc3
 		   /* Width.  */
-		   && (insn[0] & 0x30) != 3
+		   && (insn[0] & 0x30) != 0x30
 		   /* Register MSBs.  */
 		   && (insn[1] & 0x88)  == 0x00)
 	    {
@@ -3060,7 +3060,8 @@ rx_elf_object_p (bfd * abfd)
 	{
 	  Elf_Internal_Shdr *sec = elf_tdata(abfd)->elf_sect_ptr[u];
 
-	  if (phdr[i].p_offset <= (bfd_vma) sec->sh_offset
+	  if (phdr[i].p_filesz
+	      && phdr[i].p_offset <= (bfd_vma) sec->sh_offset
 	      && (bfd_vma)sec->sh_offset <= phdr[i].p_offset + (phdr[i].p_filesz - 1))
 	    {
 	      /* Found one!  The difference between the two addresses,
@@ -3084,7 +3085,8 @@ rx_elf_object_p (bfd * abfd)
       bsec = abfd->sections;
       while (bsec)
 	{
-	  if (phdr[i].p_vaddr <= bsec->vma
+	  if (phdr[i].p_filesz
+	      && phdr[i].p_vaddr <= bsec->vma
 	      && bsec->vma <= phdr[i].p_vaddr + (phdr[i].p_filesz - 1))
 	    {
 	      bsec->lma = phdr[i].p_paddr + (bsec->vma - phdr[i].p_vaddr);
diff --git a/bfd/elf32-s390.c b/bfd/elf32-s390.c
index 2cfd53e..8d654d5 100644
--- a/bfd/elf32-s390.c
+++ b/bfd/elf32-s390.c
@@ -1,6 +1,6 @@
 /* IBM S/390-specific support for 32-bit ELF
    Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
-   2011 Free Software Foundation, Inc.
+   2011, 2012 Free Software Foundation, Inc.
    Contributed by Carl B. Pedersen and Martin Schwidefsky.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -25,67 +25,15 @@
 #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 bfd_boolean elf_s390_is_local_label_name
-  PARAMS ((bfd *, const char *));
-static struct bfd_hash_entry *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 bfd_boolean create_got_section
-  PARAMS((bfd *, struct bfd_link_info *));
-static bfd_boolean elf_s390_create_dynamic_sections
-  PARAMS((bfd *, struct bfd_link_info *));
-static void elf_s390_copy_indirect_symbol
-  PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *,
-	   struct elf_link_hash_entry *));
-static bfd_boolean elf_s390_check_relocs
-  PARAMS ((bfd *, struct bfd_link_info *, asection *,
-	   const Elf_Internal_Rela *));
-struct elf_s390_link_hash_entry;
-static void elf_s390_adjust_gotplt
-  PARAMS ((struct elf_s390_link_hash_entry *));
-static bfd_boolean elf_s390_adjust_dynamic_symbol
-  PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *));
-static bfd_boolean allocate_dynrelocs
-  PARAMS ((struct elf_link_hash_entry *, PTR));
-static bfd_boolean readonly_dynrelocs
-  PARAMS ((struct elf_link_hash_entry *, PTR));
-static bfd_boolean elf_s390_size_dynamic_sections
-  PARAMS ((bfd *, struct bfd_link_info *));
-static bfd_boolean elf_s390_relocate_section
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
-	   Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
-static bfd_boolean elf_s390_finish_dynamic_symbol
-  PARAMS ((bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
-	   Elf_Internal_Sym *));
-static enum elf_reloc_type_class elf_s390_reloc_type_class
-  PARAMS ((const Elf_Internal_Rela *));
-static bfd_boolean elf_s390_finish_dynamic_sections
-  PARAMS ((bfd *, struct bfd_link_info *));
-static bfd_boolean elf_s390_object_p
-  PARAMS ((bfd *));
-static bfd_boolean elf_s390_grok_prstatus
-  PARAMS ((bfd *, Elf_Internal_Note *));
-static int elf_s390_tls_transition
-  PARAMS ((struct bfd_link_info *, int, int));
-static bfd_reloc_status_type s390_tls_reloc
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
-static bfd_vma dtpoff_base
-  PARAMS ((struct bfd_link_info *));
-static bfd_vma tpoff
-  PARAMS ((struct bfd_link_info *, bfd_vma));
-static void invalid_tls_insn
-  PARAMS ((bfd *, asection *, Elf_Internal_Rela *));
-static bfd_reloc_status_type s390_elf_ldisp_reloc
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
-
 #include "elf/s390.h"
 
+static bfd_reloc_status_type
+s390_tls_reloc (bfd *, arelent *, asymbol *, void *,
+		asection *, bfd *, char **);
+static bfd_reloc_status_type
+s390_elf_ldisp_reloc (bfd *, arelent *, asymbol *, void *,
+		      asection *, bfd *, char **);
+
 /* The relocation "howto" table.  */
 
 static reloc_howto_type elf_howto_table[] =
@@ -211,6 +159,8 @@ static reloc_howto_type elf_howto_table[] =
 	s390_elf_ldisp_reloc, "R_390_GOTPLT20", FALSE, 0,0x0fffff00, FALSE),
   HOWTO(R_390_TLS_GOTIE20, 0, 2, 20, FALSE, 8, complain_overflow_dont,
 	s390_elf_ldisp_reloc, "R_390_TLS_GOTIE20", FALSE, 0,0x0fffff00, FALSE),
+  HOWTO(R_390_IRELATIVE, 0, 2, 32, TRUE, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_IRELATIVE", FALSE, 0, 0xffffffff, FALSE),
 };
 
 /* GNU extension to record C++ vtable hierarchy.  */
@@ -220,9 +170,8 @@ 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;
+elf_s390_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+			    bfd_reloc_code_real_type code)
 {
   switch (code)
     {
@@ -324,6 +273,8 @@ elf_s390_reloc_type_lookup (abfd, code)
       return &elf_howto_table[(int) R_390_GOTPLT20];
     case BFD_RELOC_390_TLS_GOTIE20:
       return &elf_howto_table[(int) R_390_TLS_GOTIE20];
+    case BFD_RELOC_390_IRELATIVE:
+      return &elf_howto_table[(int) R_390_IRELATIVE];
     case BFD_RELOC_VTABLE_INHERIT:
       return &elf32_s390_vtinherit_howto;
     case BFD_RELOC_VTABLE_ENTRY:
@@ -357,10 +308,9 @@ elf_s390_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
    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;
+elf_s390_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+			arelent *cache_ptr,
+			Elf_Internal_Rela *dst)
 {
   unsigned int r_type = ELF32_R_TYPE(dst->r_info);
   switch (r_type)
@@ -386,15 +336,13 @@ elf_s390_info_to_howto (abfd, cache_ptr, dst)
 
 /* A relocation function which doesn't do anything.  */
 static bfd_reloc_status_type
-s390_tls_reloc (abfd, reloc_entry, symbol, data, input_section,
-		output_bfd, error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry;
-     asymbol *symbol ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+s390_tls_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+		arelent *reloc_entry,
+		asymbol *symbol ATTRIBUTE_UNUSED,
+		void * data ATTRIBUTE_UNUSED,
+		asection *input_section,
+		bfd *output_bfd,
+		char **error_message ATTRIBUTE_UNUSED)
 {
   if (output_bfd)
     reloc_entry->address += input_section->output_offset;
@@ -403,15 +351,13 @@ s390_tls_reloc (abfd, reloc_entry, symbol, data, input_section,
 
 /* Handle the large displacement relocs.  */
 static bfd_reloc_status_type
-s390_elf_ldisp_reloc (abfd, reloc_entry, symbol, data, input_section,
-                      output_bfd, error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry;
-     asymbol *symbol;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+s390_elf_ldisp_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+		      arelent *reloc_entry,
+		      asymbol *symbol,
+		      void * data ATTRIBUTE_UNUSED,
+		      asection *input_section,
+		      bfd *output_bfd,
+		      char **error_message ATTRIBUTE_UNUSED)
 {
   reloc_howto_type *howto = reloc_entry->howto;
   bfd_vma relocation;
@@ -455,9 +401,7 @@ s390_elf_ldisp_reloc (abfd, reloc_entry, symbol, data, input_section,
 }
 
 static bfd_boolean
-elf_s390_is_local_label_name (abfd, name)
-     bfd *abfd;
-     const char *name;
+elf_s390_is_local_label_name (bfd *abfd, const char *name)
 {
   if (name[0] == '.' && (name[1] == 'X' || name[1] == 'L'))
     return TRUE;
@@ -470,7 +414,7 @@ elf_s390_is_local_label_name (abfd, name)
 /* The name of the dynamic interpreter.  This is put in the .interp
    section.  */
 
-#define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
+#define ELF_DYNAMIC_INTERPRETER "/lib/ld.so.1"
 
 /* If ELIMINATE_COPY_RELOCS is non-zero, the linker will try to avoid
    copying dynamic variables from a shared lib into an app's dynbss
@@ -485,6 +429,8 @@ elf_s390_is_local_label_name (abfd, name)
 
 #define GOT_ENTRY_SIZE 4
 
+#define RELA_ENTRY_SIZE sizeof (Elf32_External_Rela)
+
 /* 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
@@ -509,7 +455,7 @@ elf_s390_is_local_label_name (abfd, name)
    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
+   28(15) =  Offset into rela.plt
 
    The loader  must  then find the module where the function is
    and insert the address in the GOT.
@@ -527,7 +473,7 @@ RET1: BASR 1,0         # 2 bytes  Return from GOT 1st time
       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
+      .long ?          # 4 bytes  offset into rela.plt
 
   This was the general case. There are two additional, optimizes PLT
   definitions. One for GOT offsets < 4096 and one for GOT offsets < 32768.
@@ -537,10 +483,10 @@ 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
+      L    1,14(1)        # 4 bytes  Load offset in rela.plt 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
+      .long ?             # 4 bytes  offset into rela.plt
 
   Second the one for GOT offsets < 32768:
 
@@ -549,10 +495,10 @@ PLT1: LHI  1,<offset>     # 4 bytes  Load offset in 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
+      L    1,14(1)        # 4 bytes  Load offset in rela.plt 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
+      .long ?             # 4 bytes  offset into rela.plt
 
 Total = 32 bytes per PLT entry
 
@@ -567,40 +513,76 @@ RET1: BASR 1,0         # 2 bytes  Return from GOT 1st time
       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
+      .long ?          # 4 bytes  offset into rela.plt  */
+
+static const bfd_byte elf_s390_plt_entry[PLT_ENTRY_SIZE] =
+  {
+    0x0d, 0x10,                             /* basr    %r1,%r0     */
+    0x58, 0x10, 0x10, 0x16,                 /* l       %r1,22(%r1) */
+    0x58, 0x10, 0x10, 0x00,                 /* l       %r1,0(%r1)  */
+    0x07, 0xf1,                             /* br      %r1         */
+    0x0d, 0x10,                             /* basr    %r1,%r0     */
+    0x58, 0x10, 0x10, 0x0e,                 /* l       %r1,14(%r1) */
+    0xa7, 0xf4, 0x00, 0x00,                 /* j       first plt   */
+    0x00, 0x00,                             /* padding             */
+    0x00, 0x00, 0x00, 0x00,                 /* GOT offset          */
+    0x00, 0x00, 0x00, 0x00                  /* rela.plt offset     */
+  };
+
+/* Generic PLT pic entry.  */
+static const bfd_byte elf_s390_plt_pic_entry[PLT_ENTRY_SIZE] =
+  {
+    0x0d, 0x10,                             /* basr    %r1,%r0         */
+    0x58, 0x10, 0x10, 0x16,                 /* l       %r1,22(%r1)     */
+    0x58, 0x11, 0xc0, 0x00,                 /* l       %r1,0(%r1,%r12) */
+    0x07, 0xf1,                             /* br      %r1             */
+    0x0d, 0x10,                             /* basr    %r1,%r0         */
+    0x58, 0x10, 0x10, 0x0e,                 /* l       %r1,14(%r1)     */
+    0xa7, 0xf4, 0x00, 0x00,                 /* j       first plt       */
+    0x00, 0x00,                             /* padding                 */
+    0x00, 0x00, 0x00, 0x00,                 /* GOT offset              */
+    0x00, 0x00, 0x00, 0x00                  /* rela.plt offset         */
+  };
+
+/* Optimized PLT pic entry for GOT offset < 4k.  xx will be replaced
+   when generating the PLT slot with the GOT offset.  */
+static const bfd_byte elf_s390_plt_pic12_entry[PLT_ENTRY_SIZE] =
+  {
+    0x58, 0x10, 0xc0, 0x00,                 /* l       %r1,xx(%r12) */
+    0x07, 0xf1,                             /* br      %r1          */
+    0x00, 0x00, 0x00, 0x00,                 /* padding              */
+    0x00, 0x00,
+    0x0d, 0x10,                             /* basr    %r1,%r0      */
+    0x58, 0x10, 0x10, 0x0e,                 /* l       %r1,14(%r1)  */
+    0xa7, 0xf4, 0x00, 0x00,                 /* j       first plt    */
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00
+  };
+
+/* Optimized PLT pic entry for GOT offset < 32k.  xx will be replaced
+   when generating the PLT slot with the GOT offset.  */
+static const bfd_byte elf_s390_plt_pic16_entry[PLT_ENTRY_SIZE] =
+  {
+    0xa7, 0x18, 0x00, 0x00,                 /* lhi     %r1,xx          */
+    0x58, 0x11, 0xc0, 0x00,                 /* l       %r1,0(%r1,%r12) */
+    0x07, 0xf1,                             /* br      %r1             */
+    0x00, 0x00,
+    0x0d, 0x10,                             /* basr    %r1,%r0         */
+    0x58, 0x10, 0x10, 0x0e,                 /* l       %r1,14(%r1)     */
+    0xa7, 0xf4, 0x00, 0x00,                 /* j       first plt       */
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00
+  };
+
+/* The first PLT entry pushes the offset into the rela.plt
    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
+   ST   1,28(15)  # R1 has offset into rela.plt
    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
@@ -609,7 +591,7 @@ PLT0:
    The first entry in the PLT for static code:
 
 PLT0:
-   ST   1,28(15)      # R1 has offset into symbol table
+   ST   1,28(15)      # R1 has offset into rela.plt
    BASR 1,0
    L    1,18(0,1)     # Get address of GOT
    MVC  24(4,15),4(1) # Move loader ino to stack
@@ -618,38 +600,32 @@ PLT0:
    .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 as dynamic relocs in check_relocs for each symbol.
-   This is so that it can later discard them if they are found to be
-   unnecessary.  We store the information in a field extending the
-   regular ELF linker hash table.  */
-
-struct elf_s390_dyn_relocs
-{
-  struct elf_s390_dyn_relocs *next;
+static const bfd_byte elf_s390_plt_first_entry[PLT_FIRST_ENTRY_SIZE] =
+  {
+    0x50, 0x10, 0xf0, 0x1c,                   /* st      %r1,28(%r15)      */
+    0x0d, 0x10,                               /* basr    %r1,%r0           */
+    0x58, 0x10, 0x10, 0x12,                   /* l       %r1,18(%r1)       */
+    0xd2, 0x03, 0xf0, 0x18, 0x10, 0x04,       /* mvc     24(4,%r15),4(%r1) */
+    0x58, 0x10, 0x10, 0x08,                   /* l       %r1,8(%r1)        */
+    0x07, 0xf1,                               /* br      %r1               */
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00
+  };
+
+static const bfd_byte elf_s390_plt_pic_first_entry[PLT_FIRST_ENTRY_SIZE] =
+  {
+    0x50, 0x10, 0xf0, 0x1c,                     /* st      %r1,28(%r15)  */
+    0x58, 0x10, 0xc0, 0x04,                     /* l       %r1,4(%r12)   */
+    0x50, 0x10, 0xf0, 0x18,                     /* st      %r1,24(%r15)  */
+    0x58, 0x10, 0xc0, 0x08,                     /* l       %r1,8(%r12)   */
+    0x07, 0xf1,                                 /* br      %r1           */
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00
+  };
 
-  /* The input section of the reloc.  */
-  asection *sec;
-
-  /* Total number of relocs copied for the input section.  */
-  bfd_size_type count;
-
-  /* Number of pc-relative relocs copied for the input section.  */
-  bfd_size_type pc_count;
-};
 
 /* s390 ELF linker hash entry.  */
 
@@ -658,7 +634,7 @@ struct elf_s390_link_hash_entry
   struct elf_link_hash_entry elf;
 
   /* Track dynamic relocs copied for this symbol.  */
-  struct elf_s390_dyn_relocs *dyn_relocs;
+  struct elf_dyn_relocs *dyn_relocs;
 
   /* Number of GOTPLT references for a function.  */
   bfd_signed_vma gotplt_refcount;
@@ -669,17 +645,43 @@ struct elf_s390_link_hash_entry
 #define GOT_TLS_IE	3
 #define GOT_TLS_IE_NLT	4
   unsigned char tls_type;
+
+  /* For pointer equality reasons we might need to change the symbol
+     type from STT_GNU_IFUNC to STT_FUNC together with its value and
+     section entry.  So after alloc_dynrelocs only these values should
+     be used.  In order to check whether a symbol is IFUNC use
+     s390_is_ifunc_symbol_p.  */
+  bfd_vma ifunc_resolver_address;
+  asection *ifunc_resolver_section;
 };
 
 #define elf_s390_hash_entry(ent) \
   ((struct elf_s390_link_hash_entry *)(ent))
 
+/* This structure represents an entry in the local PLT list needed for
+   local IFUNC symbols.  */
+struct plt_entry
+{
+  /* The section of the local symbol.
+     Set in relocate_section and used in finish_dynamic_sections.  */
+  asection *sec;
+
+  union
+  {
+    bfd_signed_vma refcount;
+    bfd_vma offset;
+  } plt;
+};
+
 /* NOTE: Keep this structure in sync with
    the one declared in elf64-s390.c.  */
 struct elf_s390_obj_tdata
 {
   struct elf_obj_tdata root;
 
+  /* A local PLT is needed for ifunc symbols.  */
+  struct plt_entry *local_plt;
+
   /* TLS type for each local got entry.  */
   char *local_got_tls_type;
 };
@@ -687,6 +689,9 @@ struct elf_s390_obj_tdata
 #define elf_s390_tdata(abfd) \
   ((struct elf_s390_obj_tdata *) (abfd)->tdata.any)
 
+#define elf_s390_local_plt(abfd)		\
+  (elf_s390_tdata (abfd)->local_plt)
+
 #define elf_s390_local_got_tls_type(abfd) \
   (elf_s390_tdata (abfd)->local_got_tls_type)
 
@@ -703,8 +708,7 @@ elf_s390_mkobject (bfd *abfd)
 }
 
 static bfd_boolean
-elf_s390_object_p (abfd)
-     bfd *abfd;
+elf_s390_object_p (bfd *abfd)
 {
   /* Set the right machine number for an s390 elf32 file.  */
   return bfd_default_set_arch_mach (abfd, bfd_arch_s390, bfd_mach_s390_31);
@@ -717,15 +721,12 @@ struct elf_s390_link_hash_table
   struct elf_link_hash_table elf;
 
   /* Short-cuts to get to dynamic linker sections.  */
-  asection *sgot;
-  asection *sgotplt;
-  asection *srelgot;
-  asection *splt;
-  asection *srelplt;
   asection *sdynbss;
   asection *srelbss;
+  asection *irelifunc;
 
-  union {
+  union
+  {
     bfd_signed_vma refcount;
     bfd_vma offset;
   } tls_ldm_got;
@@ -740,13 +741,15 @@ struct elf_s390_link_hash_table
   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
   == S390_ELF_DATA ? ((struct elf_s390_link_hash_table *) ((p)->hash)) : NULL)
 
+#undef ELF64
+#include "elf-s390-common.c"
+
 /* Create an entry in an s390 ELF linker hash table.  */
 
 static struct bfd_hash_entry *
-link_hash_newfunc (entry, table, string)
-     struct bfd_hash_entry *entry;
-     struct bfd_hash_table *table;
-     const char *string;
+link_hash_newfunc (struct bfd_hash_entry *entry,
+		   struct bfd_hash_table *table,
+		   const char *string)
 {
   /* Allocate the structure if it has not already been allocated by a
      subclass.  */
@@ -768,6 +771,8 @@ link_hash_newfunc (entry, table, string)
       eh->dyn_relocs = NULL;
       eh->gotplt_refcount = 0;
       eh->tls_type = GOT_UNKNOWN;
+      eh->ifunc_resolver_address = 0;
+      eh->ifunc_resolver_section = NULL;
     }
 
   return entry;
@@ -776,8 +781,7 @@ link_hash_newfunc (entry, table, string)
 /* Create an s390 ELF linker hash table.  */
 
 static struct bfd_link_hash_table *
-elf_s390_link_hash_table_create (abfd)
-     bfd *abfd;
+elf_s390_link_hash_table_create (bfd *abfd)
 {
   struct elf_s390_link_hash_table *ret;
   bfd_size_type amt = sizeof (struct elf_s390_link_hash_table);
@@ -794,11 +798,11 @@ elf_s390_link_hash_table_create (abfd)
       return NULL;
     }
 
-  ret->sgot = NULL;
-  ret->sgotplt = NULL;
-  ret->srelgot = NULL;
-  ret->splt = NULL;
-  ret->srelplt = NULL;
+  ret->elf.sgot = NULL;
+  ret->elf.sgotplt = NULL;
+  ret->elf.srelgot = NULL;
+  ret->elf.splt = NULL;
+  ret->elf.srelplt = NULL;
   ret->sdynbss = NULL;
   ret->srelbss = NULL;
   ret->tls_ldm_got.refcount = 0;
@@ -811,9 +815,7 @@ elf_s390_link_hash_table_create (abfd)
    shortcuts to them in our hash table.  */
 
 static bfd_boolean
-create_got_section (dynobj, info)
-     bfd *dynobj;
-     struct bfd_link_info *info;
+create_got_section (bfd *dynobj, struct bfd_link_info *info)
 {
   struct elf_s390_link_hash_table *htab;
 
@@ -821,10 +823,10 @@ create_got_section (dynobj, info)
     return FALSE;
 
   htab = elf_s390_hash_table (info);
-  htab->sgot = bfd_get_section_by_name (dynobj, ".got");
-  htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
-  htab->srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
-  if (!htab->sgot || !htab->sgotplt || !htab->srelgot)
+  htab->elf.sgot = bfd_get_linker_section (dynobj, ".got");
+  htab->elf.sgotplt = bfd_get_linker_section (dynobj, ".got.plt");
+  htab->elf.srelgot = bfd_get_linker_section (dynobj, ".rela.got");
+  if (!htab->elf.sgot || !htab->elf.sgotplt || !htab->elf.srelgot)
     abort ();
 
   return TRUE;
@@ -835,26 +837,24 @@ create_got_section (dynobj, info)
    hash table.  */
 
 static bfd_boolean
-elf_s390_create_dynamic_sections (dynobj, info)
-     bfd *dynobj;
-     struct bfd_link_info *info;
+elf_s390_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
 {
   struct elf_s390_link_hash_table *htab;
 
   htab = elf_s390_hash_table (info);
-  if (!htab->sgot && !create_got_section (dynobj, info))
+  if (!htab->elf.sgot && !create_got_section (dynobj, info))
     return FALSE;
 
   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
     return FALSE;
 
-  htab->splt = bfd_get_section_by_name (dynobj, ".plt");
-  htab->srelplt = bfd_get_section_by_name (dynobj, ".rela.plt");
-  htab->sdynbss = bfd_get_section_by_name (dynobj, ".dynbss");
+  htab->elf.splt = bfd_get_linker_section (dynobj, ".plt");
+  htab->elf.srelplt = bfd_get_linker_section (dynobj, ".rela.plt");
+  htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss");
   if (!info->shared)
-    htab->srelbss = bfd_get_section_by_name (dynobj, ".rela.bss");
+    htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss");
 
-  if (!htab->splt || !htab->srelplt || !htab->sdynbss
+  if (!htab->elf.splt || !htab->elf.srelplt || !htab->sdynbss
       || (!info->shared && !htab->srelbss))
     abort ();
 
@@ -864,9 +864,9 @@ elf_s390_create_dynamic_sections (dynobj, info)
 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
 
 static void
-elf_s390_copy_indirect_symbol (info, dir, ind)
-     struct bfd_link_info *info;
-     struct elf_link_hash_entry *dir, *ind;
+elf_s390_copy_indirect_symbol (struct bfd_link_info *info,
+			       struct elf_link_hash_entry *dir,
+			       struct elf_link_hash_entry *ind)
 {
   struct elf_s390_link_hash_entry *edir, *eind;
 
@@ -877,14 +877,14 @@ elf_s390_copy_indirect_symbol (info, dir, ind)
     {
       if (edir->dyn_relocs != NULL)
 	{
-	  struct elf_s390_dyn_relocs **pp;
-	  struct elf_s390_dyn_relocs *p;
+	  struct elf_dyn_relocs **pp;
+	  struct elf_dyn_relocs *p;
 
 	  /* Add reloc counts against the indirect sym to the direct sym
 	     list.  Merge any entries against the same section.  */
 	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
 	    {
-	      struct elf_s390_dyn_relocs *q;
+	      struct elf_dyn_relocs *q;
 
 	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
 		if (q->sec == p->sec)
@@ -928,10 +928,9 @@ elf_s390_copy_indirect_symbol (info, dir, ind)
 }
 
 static int
-elf_s390_tls_transition (info, r_type, is_local)
-     struct bfd_link_info *info;
-     int r_type;
-     int is_local;
+elf_s390_tls_transition (struct bfd_link_info *info,
+			 int r_type,
+			 int is_local)
 {
   if (info->shared)
     return r_type;
@@ -959,11 +958,10 @@ elf_s390_tls_transition (info, r_type, is_local)
    table.  */
 
 static bfd_boolean
-elf_s390_check_relocs (abfd, info, sec, relocs)
-     bfd *abfd;
-     struct bfd_link_info *info;
-     asection *sec;
-     const Elf_Internal_Rela *relocs;
+elf_s390_check_relocs (bfd *abfd,
+		       struct bfd_link_info *info,
+		       asection *sec,
+		       const Elf_Internal_Rela *relocs)
 {
   struct elf_s390_link_hash_table *htab;
   Elf_Internal_Shdr *symtab_hdr;
@@ -973,6 +971,7 @@ elf_s390_check_relocs (abfd, info, sec, relocs)
   asection *sreloc;
   bfd_signed_vma *local_got_refcounts;
   int tls_type, old_tls_type;
+  Elf_Internal_Sym *isym;
 
   if (info->relocatable)
     return TRUE;
@@ -1003,7 +1002,31 @@ elf_s390_check_relocs (abfd, info, sec, relocs)
 	}
 
       if (r_symndx < symtab_hdr->sh_info)
-	h = NULL;
+	{
+	  /* A local symbol.  */
+	  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+					abfd, r_symndx);
+	  if (isym == NULL)
+	    return FALSE;
+
+	  if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
+	    {
+	      struct plt_entry *plt;
+
+	      if (!s390_elf_create_ifunc_sections (htab->elf.dynobj, info))
+		return FALSE;
+
+	      if (local_got_refcounts == NULL)
+		{
+		  if (!elf_s390_allocate_local_syminfo (abfd, symtab_hdr))
+		    return FALSE;
+		  local_got_refcounts = elf_local_got_refcounts (abfd);
+		}
+	      plt = elf_s390_local_plt (abfd);
+	      plt[r_symndx].plt.refcount++;
+	    }
+	  h = NULL;
+	}
       else
 	{
 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
@@ -1039,24 +1062,16 @@ elf_s390_check_relocs (abfd, info, sec, relocs)
 	  if (h == NULL
 	      && local_got_refcounts == NULL)
 	    {
-	      bfd_size_type size;
-
-	      size = symtab_hdr->sh_info;
-	      size *= (sizeof (bfd_signed_vma) + sizeof(char));
-	      local_got_refcounts = ((bfd_signed_vma *)
-				     bfd_zalloc (abfd, size));
-	      if (local_got_refcounts == NULL)
+	      if (!elf_s390_allocate_local_syminfo (abfd, symtab_hdr))
 		return FALSE;
-	      elf_local_got_refcounts (abfd) = local_got_refcounts;
-	      elf_s390_local_got_tls_type (abfd)
-		= (char *) (local_got_refcounts + symtab_hdr->sh_info);
+	      local_got_refcounts = elf_local_got_refcounts (abfd);
 	    }
 	  /* Fall through.  */
 	case R_390_GOTOFF16:
 	case R_390_GOTOFF32:
 	case R_390_GOTPC:
 	case R_390_GOTPCDBL:
-	  if (htab->sgot == NULL)
+	  if (htab->elf.sgot == NULL)
 	    {
 	      if (htab->elf.dynobj == NULL)
 		htab->elf.dynobj = abfd;
@@ -1065,13 +1080,34 @@ elf_s390_check_relocs (abfd, info, sec, relocs)
 	    }
 	}
 
+      if (h != NULL)
+	{
+	  if (htab->elf.dynobj == NULL)
+	    htab->elf.dynobj = abfd;
+	  if (!s390_elf_create_ifunc_sections (htab->elf.dynobj, info))
+	    return FALSE;
+
+	  /* Make sure an IFUNC symbol defined in a non-shared object
+	     always gets a PLT slot.  */
+	  if (s390_is_ifunc_symbol_p (h) && h->def_regular)
+	    {
+	      /* The symbol is called by the dynamic loader in order
+		 to resolve the relocation.  So it is in fact also
+		 referenced.  */
+	      h->ref_regular = 1;
+	      h->needs_plt = 1;
+	    }
+	}
       switch (r_type)
 	{
 	case R_390_GOTOFF16:
 	case R_390_GOTOFF32:
 	case R_390_GOTPC:
 	case R_390_GOTPCDBL:
-	  /* Got is created, nothing to be done.  */
+	  /* These relocs do not need a GOT slot.  They just load the
+	     GOT pointer itself or address something else relative to
+	     the GOT.  Since the GOT pointer has been set up above we
+	     are done.  */
 	  break;
 
 	case R_390_PLT16DBL:
@@ -1212,7 +1248,7 @@ elf_s390_check_relocs (abfd, info, sec, relocs)
 	case R_390_PC16DBL:
 	case R_390_PC32DBL:
 	case R_390_PC32:
-	  if (h != NULL && !info->shared)
+	  if (h != NULL)
 	    {
 	      /* If this reloc is in a read-only section, we might
 		 need a copy reloc.  We can't check reliably at this
@@ -1222,9 +1258,12 @@ elf_s390_check_relocs (abfd, info, sec, relocs)
 		 adjust_dynamic_symbol.  */
 	      h->non_got_ref = 1;
 
-	      /* We may need a .plt entry if the function this reloc
-		 refers to is in a shared lib.  */
-	      h->plt.refcount += 1;
+	      if (!info->shared)
+		{
+		  /* We may need a .plt entry if the function this reloc
+		     refers to is in a shared lib.  */
+		  h->plt.refcount += 1;
+		}
 	    }
 
 	  /* If we are creating a shared library, and this is a reloc
@@ -1265,8 +1304,8 @@ elf_s390_check_relocs (abfd, info, sec, relocs)
 		  && (h->root.type == bfd_link_hash_defweak
 		      || !h->def_regular)))
 	    {
-	      struct elf_s390_dyn_relocs *p;
-	      struct elf_s390_dyn_relocs **head;
+	      struct elf_dyn_relocs *p;
+	      struct elf_dyn_relocs **head;
 
 	      /* We must copy these reloc types into the output file.
 		 Create a reloc section in dynobj and make room for
@@ -1296,7 +1335,6 @@ elf_s390_check_relocs (abfd, info, sec, relocs)
 		     easily.  Oh well.  */
 		  asection *s;
 		  void *vpp;
-		  Elf_Internal_Sym *isym;
 
 		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
 						abfd, r_symndx);
@@ -1308,7 +1346,7 @@ elf_s390_check_relocs (abfd, info, sec, relocs)
 		    s = sec;
 
 		  vpp = &elf_section_data (s)->local_dynrel;
-		  head = (struct elf_s390_dyn_relocs **) vpp;
+		  head = (struct elf_dyn_relocs **) vpp;
 		}
 
 	      p = *head;
@@ -1316,7 +1354,7 @@ elf_s390_check_relocs (abfd, info, sec, relocs)
 		{
 		  bfd_size_type amt = sizeof *p;
 
-		  p = ((struct elf_s390_dyn_relocs *)
+		  p = ((struct elf_dyn_relocs *)
 		       bfd_alloc (htab->elf.dynobj, amt));
 		  if (p == NULL)
 		    return FALSE;
@@ -1389,6 +1427,7 @@ elf_s390_gc_sweep_hook (bfd *abfd,
 			asection *sec,
 			const Elf_Internal_Rela *relocs)
 {
+  struct elf_s390_link_hash_table *htab;
   Elf_Internal_Shdr *symtab_hdr;
   struct elf_link_hash_entry **sym_hashes;
   bfd_signed_vma *local_got_refcounts;
@@ -1397,6 +1436,10 @@ elf_s390_gc_sweep_hook (bfd *abfd,
   if (info->relocatable)
     return TRUE;
 
+  htab = elf_s390_hash_table (info);
+  if (htab == NULL)
+    return FALSE;
+
   elf_section_data (sec)->local_dynrel = NULL;
 
   symtab_hdr = &elf_symtab_hdr (abfd);
@@ -1414,8 +1457,8 @@ elf_s390_gc_sweep_hook (bfd *abfd,
       if (r_symndx >= symtab_hdr->sh_info)
 	{
 	  struct elf_s390_link_hash_entry *eh;
-	  struct elf_s390_dyn_relocs **pp;
-	  struct elf_s390_dyn_relocs *p;
+	  struct elf_dyn_relocs **pp;
+	  struct elf_dyn_relocs *p;
 
 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
 	  while (h->root.type == bfd_link_hash_indirect
@@ -1431,6 +1474,23 @@ elf_s390_gc_sweep_hook (bfd *abfd,
 		break;
 	      }
 	}
+      else
+	{
+	  Elf_Internal_Sym *isym;
+
+	  /* A local symbol.  */
+	  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+					abfd, r_symndx);
+	  if (isym == NULL)
+	    return FALSE;
+
+	  if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
+	    {
+	      struct plt_entry *plt = elf_s390_local_plt (abfd);
+	      if (plt[r_symndx].plt.refcount > 0)
+		plt[r_symndx].plt.refcount--;
+	    }
+	}
 
       r_type = ELF32_R_TYPE (rel->r_info);
       r_type = elf_s390_tls_transition (info, r_type, h != NULL);
@@ -1529,8 +1589,7 @@ elf_s390_gc_sweep_hook (bfd *abfd,
    created (we're only linking static objects).  */
 
 static void
-elf_s390_adjust_gotplt (h)
-     struct elf_s390_link_hash_entry *h;
+elf_s390_adjust_gotplt (struct elf_s390_link_hash_entry *h)
 {
   if (h->elf.root.type == bfd_link_hash_warning)
     h = (struct elf_s390_link_hash_entry *) h->elf.root.u.i.link;
@@ -1551,13 +1610,16 @@ elf_s390_adjust_gotplt (h)
    understand.  */
 
 static bfd_boolean
-elf_s390_adjust_dynamic_symbol (info, h)
-     struct bfd_link_info *info;
-     struct elf_link_hash_entry *h;
+elf_s390_adjust_dynamic_symbol (struct bfd_link_info *info,
+				struct elf_link_hash_entry *h)
 {
   struct elf_s390_link_hash_table *htab;
   asection *s;
 
+  /* STT_GNU_IFUNC symbol must go through PLT. */
+  if (s390_is_ifunc_symbol_p (h))
+    return TRUE;
+
   /* 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).  */
@@ -1628,7 +1690,7 @@ elf_s390_adjust_dynamic_symbol (info, h)
   if (ELIMINATE_COPY_RELOCS)
     {
       struct elf_s390_link_hash_entry * eh;
-      struct elf_s390_dyn_relocs *p;
+      struct elf_dyn_relocs *p;
 
       eh = (struct elf_s390_link_hash_entry *) h;
       for (p = eh->dyn_relocs; p != NULL; p = p->next)
@@ -1647,13 +1709,6 @@ elf_s390_adjust_dynamic_symbol (info, h)
 	}
     }
 
-  if (h->size == 0)
-    {
-      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
-			     h->root.root.string);
-      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
@@ -1669,7 +1724,7 @@ elf_s390_adjust_dynamic_symbol (info, h)
   /* 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.  */
-  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
       htab->srelbss->size += sizeof (Elf32_External_Rela);
       h->needs_copy = 1;
@@ -1684,14 +1739,12 @@ elf_s390_adjust_dynamic_symbol (info, h)
    dynamic relocs.  */
 
 static bfd_boolean
-allocate_dynrelocs (h, inf)
-     struct elf_link_hash_entry *h;
-     PTR inf;
+allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
 {
   struct bfd_link_info *info;
   struct elf_s390_link_hash_table *htab;
-  struct elf_s390_link_hash_entry *eh;
-  struct elf_s390_dyn_relocs *p;
+  struct elf_s390_link_hash_entry *eh = (struct elf_s390_link_hash_entry *)h;
+  struct elf_dyn_relocs *p;
 
   if (h->root.type == bfd_link_hash_indirect)
     return TRUE;
@@ -1699,8 +1752,13 @@ allocate_dynrelocs (h, inf)
   info = (struct bfd_link_info *) inf;
   htab = elf_s390_hash_table (info);
 
-  if (htab->elf.dynamic_sections_created
-      && h->plt.refcount > 0)
+  /* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
+     here if it is defined and referenced in a non-shared object.  */
+  if (s390_is_ifunc_symbol_p (h) && h->def_regular)
+    return s390_elf_allocate_ifunc_dyn_relocs (info, h,
+					       &eh->dyn_relocs);
+  else if (htab->elf.dynamic_sections_created
+	   && h->plt.refcount > 0)
     {
       /* Make sure this symbol is output as a dynamic symbol.
 	 Undefined weak syms won't yet be marked as dynamic.  */
@@ -1714,7 +1772,7 @@ allocate_dynrelocs (h, inf)
       if (info->shared
 	  || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h))
 	{
-	  asection *s = htab->splt;
+	  asection *s = htab->elf.splt;
 
 	  /* If this is the first .plt entry, make room for the special
 	     first entry.  */
@@ -1740,10 +1798,10 @@ allocate_dynrelocs (h, inf)
 
 	  /* We also need to make an entry in the .got.plt section, which
 	     will be placed in the .got section by the linker script.  */
-	  htab->sgotplt->size += GOT_ENTRY_SIZE;
+	  htab->elf.sgotplt->size += GOT_ENTRY_SIZE;
 
 	  /* We also need to make an entry in the .rela.plt section.  */
-	  htab->srelplt->size += sizeof (Elf32_External_Rela);
+	  htab->elf.srelplt->size += sizeof (Elf32_External_Rela);
 	}
       else
 	{
@@ -1773,8 +1831,8 @@ allocate_dynrelocs (h, inf)
 	   to be stored somewhere. The immediate value in the instruction
 	   is not bit enough so the value is stored in the got.  */
 	{
-	  h->got.offset = htab->sgot->size;
-	  htab->sgot->size += GOT_ENTRY_SIZE;
+	  h->got.offset = htab->elf.sgot->size;
+	  htab->elf.sgot->size += GOT_ENTRY_SIZE;
 	}
       else
 	h->got.offset = (bfd_vma) -1;
@@ -1794,7 +1852,7 @@ allocate_dynrelocs (h, inf)
 	    return FALSE;
 	}
 
-      s = htab->sgot;
+      s = htab->elf.sgot;
       h->got.offset = s->size;
       s->size += GOT_ENTRY_SIZE;
       /* R_390_TLS_GD32 needs 2 consecutive GOT slots.  */
@@ -1805,19 +1863,18 @@ allocate_dynrelocs (h, inf)
 	 R_390_TLS_GD32 needs one if local symbol and two if global.  */
       if ((tls_type == GOT_TLS_GD && h->dynindx == -1)
 	  || tls_type >= GOT_TLS_IE)
-	htab->srelgot->size += sizeof (Elf32_External_Rela);
+	htab->elf.srelgot->size += sizeof (Elf32_External_Rela);
       else if (tls_type == GOT_TLS_GD)
-	htab->srelgot->size += 2 * sizeof (Elf32_External_Rela);
+	htab->elf.srelgot->size += 2 * sizeof (Elf32_External_Rela);
       else if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
 		|| h->root.type != bfd_link_hash_undefweak)
 	       && (info->shared
 		   || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)))
-	htab->srelgot->size += sizeof (Elf32_External_Rela);
+	htab->elf.srelgot->size += sizeof (Elf32_External_Rela);
     }
   else
     h->got.offset = (bfd_vma) -1;
 
-  eh = (struct elf_s390_link_hash_entry *) h;
   if (eh->dyn_relocs == NULL)
     return TRUE;
 
@@ -1831,7 +1888,7 @@ allocate_dynrelocs (h, inf)
     {
       if (SYMBOL_CALLS_LOCAL (info, h))
 	{
-	  struct elf_s390_dyn_relocs **pp;
+	  struct elf_dyn_relocs **pp;
 
 	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
 	    {
@@ -1909,12 +1966,10 @@ allocate_dynrelocs (h, inf)
 /* Find any dynamic relocs that apply to read-only sections.  */
 
 static bfd_boolean
-readonly_dynrelocs (h, inf)
-     struct elf_link_hash_entry *h;
-     PTR inf;
+readonly_dynrelocs (struct elf_link_hash_entry *h, void * inf)
 {
   struct elf_s390_link_hash_entry *eh;
-  struct elf_s390_dyn_relocs *p;
+  struct elf_dyn_relocs *p;
 
   eh = (struct elf_s390_link_hash_entry *) h;
   for (p = eh->dyn_relocs; p != NULL; p = p->next)
@@ -1937,9 +1992,8 @@ readonly_dynrelocs (h, inf)
 /* Set the sizes of the dynamic sections.  */
 
 static bfd_boolean
-elf_s390_size_dynamic_sections (output_bfd, info)
-     bfd *output_bfd ATTRIBUTE_UNUSED;
-     struct bfd_link_info *info;
+elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
+				struct bfd_link_info *info)
 {
   struct elf_s390_link_hash_table *htab;
   bfd *dynobj;
@@ -1957,7 +2011,7 @@ elf_s390_size_dynamic_sections (output_bfd, info)
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  if (s == NULL)
 	    abort ();
 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
@@ -1975,13 +2029,15 @@ elf_s390_size_dynamic_sections (output_bfd, info)
       bfd_size_type locsymcount;
       Elf_Internal_Shdr *symtab_hdr;
       asection *srela;
+      struct plt_entry *local_plt;
+      unsigned int i;
 
       if (! is_s390_elf (ibfd))
 	continue;
 
       for (s = ibfd->sections; s != NULL; s = s->next)
 	{
-	  struct elf_s390_dyn_relocs *p;
+	  struct elf_dyn_relocs *p;
 
 	  for (p = elf_section_data (s)->local_dynrel; p != NULL; p = p->next)
 	    {
@@ -2011,8 +2067,8 @@ elf_s390_size_dynamic_sections (output_bfd, info)
       locsymcount = symtab_hdr->sh_info;
       end_local_got = local_got + locsymcount;
       local_tls_type = elf_s390_local_got_tls_type (ibfd);
-      s = htab->sgot;
-      srela = htab->srelgot;
+      s = htab->elf.sgot;
+      srela = htab->elf.srelgot;
       for (; local_got < end_local_got; ++local_got, ++local_tls_type)
 	{
 	  if (*local_got > 0)
@@ -2027,22 +2083,35 @@ elf_s390_size_dynamic_sections (output_bfd, info)
 	  else
 	    *local_got = (bfd_vma) -1;
 	}
+      local_plt = elf_s390_local_plt (ibfd);
+      for (i = 0; i < symtab_hdr->sh_info; i++)
+	{
+	  if (local_plt[i].plt.refcount > 0)
+	    {
+	      local_plt[i].plt.offset = htab->elf.iplt->size;
+	      htab->elf.iplt->size += PLT_ENTRY_SIZE;
+	      htab->elf.igotplt->size += GOT_ENTRY_SIZE;
+	      htab->elf.irelplt->size += RELA_ENTRY_SIZE;
+	    }
+	  else
+            local_plt[i].plt.offset = (bfd_vma) -1;
+	}
     }
 
   if (htab->tls_ldm_got.refcount > 0)
     {
       /* Allocate 2 got entries and 1 dynamic reloc for R_390_TLS_LDM32
 	 relocs.  */
-      htab->tls_ldm_got.offset = htab->sgot->size;
-      htab->sgot->size += 2 * GOT_ENTRY_SIZE;
-      htab->srelgot->size += sizeof (Elf32_External_Rela);
+      htab->tls_ldm_got.offset = htab->elf.sgot->size;
+      htab->elf.sgot->size += 2 * GOT_ENTRY_SIZE;
+      htab->elf.srelgot->size += sizeof (Elf32_External_Rela);
     }
   else
     htab->tls_ldm_got.offset = -1;
 
   /* Allocate global sym .plt and .got entries, and space for global
      sym dynamic relocs.  */
-  elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, (PTR) info);
+  elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
 
   /* We now have determined the sizes of the various dynamic sections.
      Allocate memory for them.  */
@@ -2052,10 +2121,13 @@ elf_s390_size_dynamic_sections (output_bfd, info)
       if ((s->flags & SEC_LINKER_CREATED) == 0)
 	continue;
 
-      if (s == htab->splt
-	  || s == htab->sgot
-	  || s == htab->sgotplt
-	  || s == htab->sdynbss)
+      if (s == htab->elf.splt
+	  || s == htab->elf.sgot
+	  || s == htab->elf.sgotplt
+	  || s == htab->sdynbss
+	  || s == htab->elf.iplt
+	  || s == htab->elf.igotplt
+	  || s == htab->irelifunc)
 	{
 	  /* Strip this section if we don't need it; see the
 	     comment below.  */
@@ -2120,7 +2192,7 @@ elf_s390_size_dynamic_sections (output_bfd, info)
 	    return FALSE;
 	}
 
-      if (htab->splt->size != 0)
+      if (htab->elf.splt->size != 0)
 	{
 	  if (!add_dynamic_entry (DT_PLTGOT, 0)
 	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
@@ -2139,8 +2211,7 @@ elf_s390_size_dynamic_sections (output_bfd, info)
 	  /* If any dynamic relocs apply to a read-only section,
 	     then we need a DT_TEXTREL entry.  */
 	  if ((info->flags & DF_TEXTREL) == 0)
-	    elf_link_hash_traverse (&htab->elf, readonly_dynrelocs,
-				    (PTR) info);
+	    elf_link_hash_traverse (&htab->elf, readonly_dynrelocs, info);
 
 	  if ((info->flags & DF_TEXTREL) != 0)
 	    {
@@ -2159,8 +2230,7 @@ elf_s390_size_dynamic_sections (output_bfd, info)
    This is PT_TLS segment p_vaddr.  */
 
 static bfd_vma
-dtpoff_base (info)
-     struct bfd_link_info *info;
+dtpoff_base (struct bfd_link_info *info)
 {
   /* If tls_sec is NULL, we should have signalled an error already.  */
   if (elf_hash_table (info)->tls_sec == NULL)
@@ -2172,9 +2242,7 @@ dtpoff_base (info)
    if STT_TLS virtual address is ADDRESS.  */
 
 static bfd_vma
-tpoff (info, address)
-     struct bfd_link_info *info;
-     bfd_vma address;
+tpoff (struct bfd_link_info *info, bfd_vma address)
 {
   struct elf_link_hash_table *htab = elf_hash_table (info);
 
@@ -2188,10 +2256,9 @@ tpoff (info, address)
    instruction.  */
 
 static void
-invalid_tls_insn (input_bfd, input_section, rel)
-     bfd *input_bfd;
-     asection *input_section;
-     Elf_Internal_Rela *rel;
+invalid_tls_insn (bfd *input_bfd,
+		  asection *input_section,
+		  Elf_Internal_Rela *rel)
 {
   reloc_howto_type *howto;
 
@@ -2208,16 +2275,14 @@ invalid_tls_insn (input_bfd, input_section, rel)
 /* Relocate a 390 ELF section.  */
 
 static bfd_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;
+elf_s390_relocate_section (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)
 {
   struct elf_s390_link_hash_table *htab;
   Elf_Internal_Shdr *symtab_hdr;
@@ -2248,6 +2313,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
       bfd_boolean unresolved_reloc;
       bfd_reloc_status_type r;
       int tls_type;
+      asection *base_got = htab->elf.sgot;
 
       r_type = ELF32_R_TYPE (rel->r_info);
       if (r_type == (int) R_390_GNU_VTINHERIT
@@ -2270,7 +2336,52 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 	{
 	  sym = local_syms + r_symndx;
 	  sec = local_sections[r_symndx];
-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+	  if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
+	    {
+	      struct plt_entry *local_plt = elf_s390_local_plt (input_bfd);
+	      if (local_plt == NULL)
+		return FALSE;
+
+	      /* Address of the PLT slot.  */
+	      relocation = (htab->elf.iplt->output_section->vma
+			    + htab->elf.iplt->output_offset
+			    + local_plt[r_symndx].plt.offset);
+
+	      switch (r_type)
+		{
+		case R_390_GOTPLT12:
+		case R_390_GOTPLT16:
+		case R_390_GOTPLT20:
+		case R_390_GOTPLT32:
+		case R_390_GOTPLTENT:
+		case R_390_GOT12:
+		case R_390_GOT16:
+		case R_390_GOT20:
+		case R_390_GOT32:
+		case R_390_GOTENT:
+		  {
+		    /* Write the PLT slot address into the GOT slot.  */
+		    bfd_put_32 (output_bfd, relocation,
+				htab->elf.sgot->contents +
+				local_got_offsets[r_symndx]);
+		    relocation = (local_got_offsets[r_symndx] +
+				  htab->elf.sgot->output_offset);
+
+		    if (r_type == R_390_GOTENT || r_type == R_390_GOTPLTENT)
+		      relocation += htab->elf.sgot->output_section->vma;
+		    break;
+		  }
+		default:
+		  break;
+		}
+	      /* The output section is needed later in
+		 finish_dynamic_section when creating the dynamic
+		 relocation.  */
+	      local_plt[r_symndx].sec = sec;
+	      goto do_relocation;
+	    }
+	  else
+	    relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
 	}
       else
 	{
@@ -2282,9 +2393,9 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 				   unresolved_reloc, warned);
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -2309,19 +2420,29 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 	    {
 	      bfd_vma plt_index;
 
-	      /* 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.  */
-	      relocation = (plt_index + 3) * GOT_ENTRY_SIZE;
+	      if (s390_is_ifunc_symbol_p (h))
+		{
+		  plt_index = h->plt.offset / PLT_ENTRY_SIZE;
+		  relocation = (plt_index * GOT_ENTRY_SIZE +
+				htab->elf.igotplt->output_offset);
+		  if (r_type == R_390_GOTPLTENT)
+		    relocation += htab->elf.igotplt->output_section->vma;
+		}
+	      else
+		{
+		  /* 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.  */
+		  relocation = (plt_index + 3) * GOT_ENTRY_SIZE;
+		  if (r_type == R_390_GOTPLTENT)
+		    relocation += htab->elf.sgot->output_section->vma;
+		}
 	      unresolved_reloc = FALSE;
 
-	      if (r_type == R_390_GOTPLTENT)
-		relocation += htab->sgot->output_section->vma;
-	      break;
 	    }
 	  /* Fall through.  */
 
@@ -2332,7 +2453,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 	case R_390_GOTENT:
 	  /* Relocation is to the entry for this symbol in the global
 	     offset table.  */
-	  if (htab->sgot == NULL)
+	  if (base_got == NULL)
 	    abort ();
 
 	  if (h != NULL)
@@ -2341,11 +2462,30 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 
 	      off = h->got.offset;
 	      dyn = htab->elf.dynamic_sections_created;
-	      if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
-		  || (info->shared
-		      && SYMBOL_REFERENCES_LOCAL (info, h))
-		  || (ELF_ST_VISIBILITY (h->other)
-		      && h->root.type == bfd_link_hash_undefweak))
+
+	      if (s390_is_ifunc_symbol_p (h))
+		{
+		  BFD_ASSERT (h->plt.offset != (bfd_vma) -1);
+		  if (off == (bfd_vma)-1)
+		    {
+		      /* No explicit GOT usage so redirect to the
+			 got.iplt slot.  */
+		      base_got = htab->elf.igotplt;
+		      off = h->plt.offset / PLT_ENTRY_SIZE * GOT_ENTRY_SIZE;
+		    }
+		  else
+		    {
+		      /* Explicit GOT slots must contain the address
+			 of the PLT slot. This will be handled in
+			 finish_dynamic_symbol.  */
+		    }
+		}
+	      else if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
+		       || (info->shared
+			   && SYMBOL_REFERENCES_LOCAL (info, h))
+		       || (ELF_ST_VISIBILITY (h->other)
+			   && h->root.type == bfd_link_hash_undefweak))
+
 		{
 		  /* This is actually a static link, or it is a
 		     -Bsymbolic link and the symbol is defined
@@ -2364,7 +2504,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 		  else
 		    {
 		      bfd_put_32 (output_bfd, relocation,
-				  htab->sgot->contents + off);
+				  base_got->contents + off);
 		      h->got.offset |= 1;
 		    }
 		}
@@ -2386,7 +2526,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 	      else
 		{
 		  bfd_put_32 (output_bfd, relocation,
-			      htab->sgot->contents + off);
+			      htab->elf.sgot->contents + off);
 
 		  if (info->shared)
 		    {
@@ -2394,12 +2534,12 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 		      Elf_Internal_Rela outrel;
 		      bfd_byte *loc;
 
-		      srelgot = htab->srelgot;
+		      srelgot = htab->elf.srelgot;
 		      if (srelgot == NULL)
 			abort ();
 
-		      outrel.r_offset = (htab->sgot->output_section->vma
-					 + htab->sgot->output_offset
+		      outrel.r_offset = (htab->elf.sgot->output_section->vma
+					 + htab->elf.sgot->output_offset
 					 + off);
 		      outrel.r_info = ELF32_R_INFO (0, R_390_RELATIVE);
 		      outrel.r_addend = relocation;
@@ -2415,7 +2555,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 	  if (off >= (bfd_vma) -2)
 	    abort ();
 
-	  relocation = htab->sgot->output_offset + off;
+	  relocation = base_got->output_offset + off;
 
 	  /* For @GOTENT the relocation is against the offset between
 	     the instruction and the symbols entry in the GOT and not
@@ -2423,7 +2563,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 	     add the vma of the GOT to get the correct value.  */
 	  if (   r_type == R_390_GOTENT
 	      || r_type == R_390_GOTPLTENT)
-	    relocation += htab->sgot->output_section->vma;
+	    relocation += base_got->output_section->vma;
 
 	  break;
 
@@ -2437,13 +2577,13 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 	     defined _GLOBAL_OFFSET_TABLE in a different way, as is
 	     permitted by the ABI, we might have to change this
 	     calculation.  */
-	  relocation -= htab->sgot->output_section->vma;
+	  relocation -= htab->elf.sgot->output_section->vma;
 	  break;
 
 	case R_390_GOTPC:
 	case R_390_GOTPCDBL:
 	  /* Use global offset table as symbol value.  */
-	  relocation = htab->sgot->output_section->vma;
+	  relocation = htab->elf.sgot->output_section->vma;
 	  unresolved_reloc = FALSE;
 	  break;
 
@@ -2459,7 +2599,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 	    break;
 
 	  if (h->plt.offset == (bfd_vma) -1
-	      || htab->splt == NULL)
+	      || (htab->elf.splt == NULL && htab->elf.iplt == NULL))
 	    {
 	      /* We didn't make a PLT entry for this symbol.  This
 		 happens when statically linking PIC code, or when
@@ -2467,9 +2607,14 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 	      break;
 	    }
 
-	  relocation = (htab->splt->output_section->vma
-			+ htab->splt->output_offset
-			+ h->plt.offset);
+	  if (s390_is_ifunc_symbol_p (h))
+	    relocation = (htab->elf.iplt->output_section->vma
+                          + htab->elf.iplt->output_offset
+			  + h->plt.offset);
+	  else
+	    relocation = (htab->elf.splt->output_section->vma
+			  + htab->elf.splt->output_offset
+			  + h->plt.offset);
 	  unresolved_reloc = FALSE;
 	  break;
 
@@ -2482,16 +2627,22 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 	     this symbol resolve the symbol directly.  */
 	  if (   h == NULL
 	      || h->plt.offset == (bfd_vma) -1
-	      || htab->splt == NULL)
+	      || htab->elf.splt == NULL)
 	    {
-	      relocation -= htab->sgot->output_section->vma;
+	      relocation -= htab->elf.sgot->output_section->vma;
 	      break;
 	    }
 
-	  relocation = (htab->splt->output_section->vma
-			+ htab->splt->output_offset
-			+ h->plt.offset
-			- htab->sgot->output_section->vma);
+	  if (s390_is_ifunc_symbol_p (h))
+	    relocation = (htab->elf.iplt->output_section->vma
+			  + htab->elf.iplt->output_offset
+			  + h->plt.offset
+			  - htab->elf.sgot->output_section->vma);
+	  else
+	    relocation = (htab->elf.splt->output_section->vma
+			  + htab->elf.splt->output_offset
+			  + h->plt.offset
+			  - htab->elf.sgot->output_section->vma);
 	  unresolved_reloc = FALSE;
 	  break;
 
@@ -2502,6 +2653,67 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 	case R_390_PC16DBL:
 	case R_390_PC32DBL:
 	case R_390_PC32:
+	  if (h != NULL
+	      && s390_is_ifunc_symbol_p (h)
+	      && h->def_regular)
+	    {
+	      if (!info->shared || !h->non_got_ref)
+		{
+		  /* For a non-shared object STT_GNU_IFUNC symbol must
+		     go through PLT.  */
+		  relocation = (htab->elf.iplt->output_section->vma
+				+ htab->elf.iplt->output_offset
+				+ h ->plt.offset);
+		  goto do_relocation;
+		}
+	      else
+		{
+		  /* For shared objects a runtime relocation is needed.  */
+
+		  Elf_Internal_Rela outrel;
+		  asection *sreloc;
+
+		  /* Need a dynamic relocation to get the real function
+		     address.  */
+		  outrel.r_offset = _bfd_elf_section_offset (output_bfd,
+							     info,
+							     input_section,
+							     rel->r_offset);
+		  if (outrel.r_offset == (bfd_vma) -1
+		      || outrel.r_offset == (bfd_vma) -2)
+		    abort ();
+
+		  outrel.r_offset += (input_section->output_section->vma
+				      + input_section->output_offset);
+
+		  if (h->dynindx == -1
+		      || h->forced_local
+		      || info->executable)
+		    {
+		      /* This symbol is resolved locally.  */
+		      outrel.r_info = ELF32_R_INFO (0, R_390_IRELATIVE);
+		      outrel.r_addend = (h->root.u.def.value
+					 + h->root.u.def.section->output_section->vma
+					 + h->root.u.def.section->output_offset);
+		    }
+		  else
+		    {
+		      outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
+		      outrel.r_addend = 0;
+		    }
+
+		  sreloc = htab->elf.irelifunc;
+		  elf_append_rela (output_bfd, sreloc, &outrel);
+
+		  /* 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.  For an
+		     internal symbol, we have updated addend.  */
+		  continue;
+		}
+	    }
+
 	  if ((input_section->flags & SEC_ALLOC) == 0)
 	    break;
 
@@ -2668,7 +2880,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 	      continue;
 	    }
 
-	  if (htab->sgot == NULL)
+	  if (htab->elf.sgot == NULL)
 	    abort ();
 
 	  if (h != NULL)
@@ -2691,11 +2903,11 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 	      bfd_byte *loc;
 	      int dr_type, indx;
 
-	      if (htab->srelgot == NULL)
+	      if (htab->elf.srelgot == NULL)
 		abort ();
 
-	      outrel.r_offset = (htab->sgot->output_section->vma
-				 + htab->sgot->output_offset + off);
+	      outrel.r_offset = (htab->elf.sgot->output_section->vma
+				 + htab->elf.sgot->output_offset + off);
 
 	      indx = h && h->dynindx != -1 ? h->dynindx : 0;
 	      if (r_type == R_390_TLS_GD32)
@@ -2707,8 +2919,8 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 	      else
 		outrel.r_addend = 0;
 	      outrel.r_info = ELF32_R_INFO (indx, dr_type);
-	      loc = htab->srelgot->contents;
-	      loc += htab->srelgot->reloc_count++
+	      loc = htab->elf.srelgot->contents;
+	      loc += htab->elf.srelgot->reloc_count++
 		* sizeof (Elf32_External_Rela);
 	      bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
 
@@ -2719,14 +2931,14 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 		      BFD_ASSERT (! unresolved_reloc);
 		      bfd_put_32 (output_bfd,
 				  relocation - dtpoff_base (info),
-				  htab->sgot->contents + off + GOT_ENTRY_SIZE);
+				  htab->elf.sgot->contents + off + GOT_ENTRY_SIZE);
 		    }
 		  else
 		    {
 		      outrel.r_info = ELF32_R_INFO (indx, R_390_TLS_DTPOFF);
 		      outrel.r_offset += GOT_ENTRY_SIZE;
 		      outrel.r_addend = 0;
-		      htab->srelgot->reloc_count++;
+		      htab->elf.srelgot->reloc_count++;
 		      loc += sizeof (Elf32_External_Rela);
 		      bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
 		    }
@@ -2742,14 +2954,14 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 	    abort ();
 	  if (r_type == ELF32_R_TYPE (rel->r_info))
 	    {
-	      relocation = htab->sgot->output_offset + off;
+	      relocation = htab->elf.sgot->output_offset + off;
 	      if (r_type == R_390_TLS_IE32 || r_type == R_390_TLS_IEENT)
-		relocation += htab->sgot->output_section->vma;
+		relocation += htab->elf.sgot->output_section->vma;
 	      unresolved_reloc = FALSE;
 	    }
 	  else
 	    {
-	      bfd_put_32 (output_bfd, htab->sgot->output_offset + off,
+	      bfd_put_32 (output_bfd, htab->elf.sgot->output_offset + off,
 			  contents + rel->r_offset);
 	      continue;
 	    }
@@ -2774,15 +2986,15 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 		goto emit_tls_relocs;
 	    }
 
-	  if (htab->sgot == NULL)
+	  if (htab->elf.sgot == NULL)
 	    abort ();
 
 	  BFD_ASSERT (! unresolved_reloc);
 	  bfd_put_32 (output_bfd, -tpoff (info, relocation),
-		      htab->sgot->contents + off);
-	  relocation = htab->sgot->output_offset + off;
+		      htab->elf.sgot->contents + off);
+	  relocation = htab->elf.sgot->output_offset + off;
 	  if (r_type == R_390_TLS_IEENT)
-	    relocation += htab->sgot->output_section->vma;
+	    relocation += htab->elf.sgot->output_section->vma;
 	  unresolved_reloc = FALSE;
 	  break;
 
@@ -2793,7 +3005,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 	       and the value will turn out zero.  */
 	    continue;
 
-	  if (htab->sgot == NULL)
+	  if (htab->elf.sgot == NULL)
 	    abort ();
 
 	  off = htab->tls_ldm_got.offset;
@@ -2804,23 +3016,23 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 	      Elf_Internal_Rela outrel;
 	      bfd_byte *loc;
 
-	      if (htab->srelgot == NULL)
+	      if (htab->elf.srelgot == NULL)
 		abort ();
 
-	      outrel.r_offset = (htab->sgot->output_section->vma
-				 + htab->sgot->output_offset + off);
+	      outrel.r_offset = (htab->elf.sgot->output_section->vma
+				 + htab->elf.sgot->output_offset + off);
 
 	      bfd_put_32 (output_bfd, 0,
-			  htab->sgot->contents + off + GOT_ENTRY_SIZE);
+			  htab->elf.sgot->contents + off + GOT_ENTRY_SIZE);
 	      outrel.r_info = ELF32_R_INFO (0, R_390_TLS_DTPMOD);
 	      outrel.r_addend = 0;
-	      loc = htab->srelgot->contents;
-	      loc += htab->srelgot->reloc_count++
+	      loc = htab->elf.srelgot->contents;
+	      loc += htab->elf.srelgot->reloc_count++
 		* sizeof (Elf32_External_Rela);
 	      bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
 	      htab->tls_ldm_got.offset |= 1;
 	    }
-	  relocation = htab->sgot->output_offset + off;
+	  relocation = htab->elf.sgot->output_offset + off;
 	  unresolved_reloc = FALSE;
 	  break;
 
@@ -2862,7 +3074,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 	  continue;
 
 	case R_390_TLS_LDO32:
-	  if (info->shared)
+	  if (info->shared || (input_section->flags & SEC_DEBUGGING))
 	    relocation -= dtpoff_base (info);
 	  else
 	    /* When converting LDO to LE, we must negate.  */
@@ -2919,11 +3131,18 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 
 	      insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
 	      if ((insn & 0xff000fff) != 0x4d000000 &&
-		  (insn & 0xffff0000) != 0xc0e50000)
+		  (insn & 0xffff0000) != 0xc0e50000 &&
+		  (insn & 0xff000000) != 0x0d000000)
 		invalid_tls_insn (input_bfd, input_section, rel);
 	      if (!info->shared && (h == NULL || h->dynindx == -1))
 		{
-		  if ((insn & 0xff000000) == 0x4d000000)
+		  if ((insn & 0xff000000) == 0x0d000000)
+		    {
+		      /* GD->LE transition.
+			 basr rx, ry -> nopr r7 */
+		      insn = 0x07070000 | (insn & 0xffff);
+		    }
+		  else if ((insn & 0xff000000) == 0x4d000000)
 		    {
 		      /* GD->LE transition.
 			 bas %r14,0(%rx,%r13) -> bc 0,0  */
@@ -2932,7 +3151,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 		  else
 		    {
 		      /* GD->LE transition.
-			 brasl %r14,_tls_get_addr at plt -> brcl 0,.  */
+			 brasl %r14,_tls_get_offset at plt -> brcl 0,.  */
 		      insn = 0xc0040000;
 		      bfd_put_16 (output_bfd, 0x0000,
 				  contents + rel->r_offset + 4);
@@ -2940,6 +3159,11 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 		}
 	      else
 		{
+		  /* If basr is used in the pic case to invoke
+		     _tls_get_offset, something went wrong before.  */
+		  if ((insn & 0xff000000) == 0x0d000000)
+		    invalid_tls_insn (input_bfd, input_section, rel);
+
 		  if ((insn & 0xff000000) == 0x4d000000)
 		    {
 		      /* GD->IE transition.
@@ -2966,9 +3190,17 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 
 		  insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
 		  if ((insn & 0xff000fff) != 0x4d000000 &&
-		      (insn & 0xffff0000) != 0xc0e50000)
+		      (insn & 0xffff0000) != 0xc0e50000 &&
+		      (insn & 0xff000000) != 0x0d000000)
 		    invalid_tls_insn (input_bfd, input_section, rel);
-		  if ((insn & 0xff000000) == 0x4d000000)
+
+		  if ((insn & 0xff000000) == 0x0d000000)
+		    {
+		      /* LD->LE transition.
+			 basr rx, ry -> nopr r7 */
+		      insn = 0x07070000 | (insn & 0xffff);
+		    }
+		  else if ((insn & 0xff000000) == 0x4d000000)
 		    {
 		      /* LD->LE transition.
 			 bas %r14,0(%rx,%r13) -> bc 0,0  */
@@ -2977,7 +3209,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 		  else
 		    {
 		      /* LD->LE transition.
-			 brasl %r14,__tls_get_addr at plt -> brcl 0,. */
+			 brasl %r14,__tls_get_offset at plt -> brcl 0,. */
 		      insn = 0xc0040000;
 		      bfd_put_16 (output_bfd, 0x0000,
 				  contents + rel->r_offset + 4);
@@ -3007,6 +3239,8 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
 	   howto->name,
 	   h->root.root.string);
 
+    do_relocation:
+
       if (r_type == R_390_20
 	  || r_type == R_390_GOT20
 	  || r_type == R_390_GOTPLT20
@@ -3063,17 +3297,163 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
   return TRUE;
 }
 
+/* Generate the PLT slots together with the dynamic relocations needed
+   for IFUNC symbols.  */
+
+static void
+elf_s390_finish_ifunc_symbol (bfd *output_bfd,
+			      struct bfd_link_info *info,
+			      struct elf_link_hash_entry *h,
+			      struct elf_s390_link_hash_table *htab,
+			      bfd_vma iplt_offset,
+			      bfd_vma resolver_address)
+{
+  bfd_vma iplt_index;
+  bfd_vma got_offset;
+  bfd_vma igotiplt_offset;
+  Elf_Internal_Rela rela;
+  bfd_byte *loc;
+  asection *plt, *gotplt, *relplt;
+  bfd_vma relative_offset;
+
+  if (htab->elf.iplt == NULL
+      || htab->elf.igotplt == NULL
+      || htab->elf.irelplt == NULL)
+    abort ();
+
+  gotplt = htab->elf.igotplt;
+  relplt = htab->elf.irelplt;
+
+  /* Index of the PLT slot within iplt section.  */
+  iplt_index = iplt_offset / PLT_ENTRY_SIZE;
+  plt = htab->elf.iplt;
+  /* Offset into the igot.plt section.  */
+  igotiplt_offset = iplt_index * GOT_ENTRY_SIZE;
+  /* Offset into the got section.  */
+  got_offset = igotiplt_offset + gotplt->output_offset;
+
+  /* S390 uses halfwords for relative branch calc!  */
+  relative_offset = - (plt->output_offset +
+		       (PLT_ENTRY_SIZE * iplt_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
+      = -(unsigned) (((65536 / PLT_ENTRY_SIZE - 1) * PLT_ENTRY_SIZE) / 2);
+
+  /* Fill in the entry in the procedure linkage table.  */
+  if (!info->shared)
+    {
+      memcpy (plt->contents + iplt_offset, elf_s390_plt_entry,
+	      PLT_ENTRY_SIZE);
+
+      /* Adjust jump to the first plt entry.  */
+      bfd_put_32 (output_bfd, (bfd_vma) 0+(relative_offset << 16),
+		  plt->contents + iplt_offset + 20);
+
+      /* Push the GOT offset field.  */
+      bfd_put_32 (output_bfd,
+		  (gotplt->output_section->vma
+		   + got_offset),
+		  plt->contents + iplt_offset + 24);
+    }
+  else if (got_offset < 4096)
+    {
+      /* The GOT offset is small enough to be used directly as
+	 displacement.  */
+      memcpy (plt->contents + iplt_offset,
+	      elf_s390_plt_pic12_entry,
+	      PLT_ENTRY_SIZE);
+
+      /* Put in the GOT offset as displacement value.  The 0xc000
+	 value comes from the first word of the plt entry.  Look
+	 at the elf_s390_plt_pic16_entry content.  */
+      bfd_put_16 (output_bfd, (bfd_vma)0xc000 | got_offset,
+		  plt->contents + iplt_offset + 2);
+
+      /* Adjust the jump to the first plt entry.  */
+      bfd_put_32 (output_bfd, (bfd_vma) 0+(relative_offset << 16),
+		  plt->contents + iplt_offset + 20);
+    }
+  else if (got_offset < 32768)
+    {
+      /* The GOT offset is too big for a displacement but small
+	 enough to be a signed 16 bit immediate value as it can be
+	 used in an lhi instruction.  */
+      memcpy (plt->contents + iplt_offset,
+	      elf_s390_plt_pic16_entry,
+	      PLT_ENTRY_SIZE);
+
+      /* Put in the GOT offset for the lhi instruction.  */
+      bfd_put_16 (output_bfd, (bfd_vma)got_offset,
+		  plt->contents + iplt_offset + 2);
+
+      /* Adjust the jump to the first plt entry.  */
+      bfd_put_32 (output_bfd, (bfd_vma) 0+(relative_offset << 16),
+		  plt->contents + iplt_offset + 20);
+    }
+  else
+    {
+      memcpy (plt->contents + iplt_offset,
+	      elf_s390_plt_pic_entry,
+	      PLT_ENTRY_SIZE);
+
+      /* Adjust the jump to the first plt entry.  */
+      bfd_put_32 (output_bfd, (bfd_vma) 0+(relative_offset << 16),
+		  plt->contents + iplt_offset + 20);
+
+      /* Push the GOT offset field.  */
+      bfd_put_32 (output_bfd, got_offset,
+		  plt->contents + iplt_offset + 24);
+    }
+  /* Insert offset into  reloc. table here.  */
+  bfd_put_32 (output_bfd, relplt->output_offset +
+	      iplt_index * RELA_ENTRY_SIZE,
+	      plt->contents + iplt_offset + 28);
+
+  /* Fill in the entry in the global offset table.
+     Points to instruction after GOT offset.  */
+  bfd_put_32 (output_bfd,
+	      (plt->output_section->vma
+	       + plt->output_offset
+	       + iplt_offset
+	       + 12),
+	      gotplt->contents + igotiplt_offset);
+
+  /* Fill in the entry in the .rela.plt section.  */
+  rela.r_offset = gotplt->output_section->vma + got_offset;
+
+  if (!h
+      || h->dynindx == -1
+      || ((info->executable
+	   || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
+	  && h->def_regular))
+    {
+      /* The symbol can be locally resolved.  */
+      rela.r_info = ELF32_R_INFO (0, R_390_IRELATIVE);
+      rela.r_addend = resolver_address;
+    }
+  else
+    {
+      rela.r_info = ELF32_R_INFO (h->dynindx, R_390_JMP_SLOT);
+      rela.r_addend = 0;
+    }
+
+  loc = relplt->contents + iplt_index * RELA_ENTRY_SIZE;
+  bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
+}
+
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
 static bfd_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;
+elf_s390_finish_dynamic_symbol (bfd *output_bfd,
+				struct bfd_link_info *info,
+				struct elf_link_hash_entry *h,
+				Elf_Internal_Sym *sym)
 {
   struct elf_s390_link_hash_table *htab;
+  struct elf_s390_link_hash_entry *eh = (struct elf_s390_link_hash_entry*)h;
 
   htab = elf_s390_hash_table (info);
 
@@ -3087,131 +3467,139 @@ elf_s390_finish_dynamic_symbol (output_bfd, info, h, sym)
 
       /* This symbol has an entry in the procedure linkage table.  Set
 	 it up.  */
-      if (h->dynindx == -1
-	  || htab->splt == NULL
-	  || htab->sgotplt == NULL
-	  || htab->srelplt == NULL)
-	abort ();
-
-      /* 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
-	  = -(unsigned) (((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, (bfd_vma) PLT_ENTRY_WORD0,
-		      htab->splt->contents + h->plt.offset);
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_ENTRY_WORD1,
-		      htab->splt->contents + h->plt.offset + 4);
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_ENTRY_WORD2,
-		      htab->splt->contents + h->plt.offset + 8);
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_ENTRY_WORD3,
-		      htab->splt->contents + h->plt.offset + 12);
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_ENTRY_WORD4,
-		      htab->splt->contents + h->plt.offset + 16);
-	  bfd_put_32 (output_bfd, (bfd_vma) 0+(relative_offset << 16),
-		      htab->splt->contents + h->plt.offset + 20);
-	  bfd_put_32 (output_bfd,
-		      (htab->sgotplt->output_section->vma
-		       + htab->sgotplt->output_offset
-		       + got_offset),
-		      htab->splt->contents + h->plt.offset + 24);
-	}
-      else if (got_offset < 4096)
+      if (s390_is_ifunc_symbol_p (h))
 	{
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_PIC12_ENTRY_WORD0 + got_offset,
-		      htab->splt->contents + h->plt.offset);
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_PIC12_ENTRY_WORD1,
-		      htab->splt->contents + h->plt.offset + 4);
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_PIC12_ENTRY_WORD2,
-		      htab->splt->contents + h->plt.offset + 8);
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_PIC12_ENTRY_WORD3,
-		      htab->splt->contents + h->plt.offset + 12);
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_PIC12_ENTRY_WORD4,
-		      htab->splt->contents + h->plt.offset + 16);
-	  bfd_put_32 (output_bfd, (bfd_vma) 0+(relative_offset << 16),
-		      htab->splt->contents + h->plt.offset + 20);
-	  bfd_put_32 (output_bfd, (bfd_vma) 0,
-		      htab->splt->contents + h->plt.offset + 24);
-	}
-      else if (got_offset < 32768)
-	{
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_PIC16_ENTRY_WORD0 + got_offset,
-		      htab->splt->contents + h->plt.offset);
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_PIC16_ENTRY_WORD1,
-		      htab->splt->contents + h->plt.offset + 4);
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_PIC16_ENTRY_WORD2,
-		      htab->splt->contents + h->plt.offset + 8);
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_PIC16_ENTRY_WORD3,
-		      htab->splt->contents + h->plt.offset + 12);
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_PIC16_ENTRY_WORD4,
-		      htab->splt->contents + h->plt.offset + 16);
-	  bfd_put_32 (output_bfd, (bfd_vma) 0+(relative_offset << 16),
-		      htab->splt->contents + h->plt.offset + 20);
-	  bfd_put_32 (output_bfd, (bfd_vma) 0,
-		      htab->splt->contents + h->plt.offset + 24);
+	  /* If we can resolve the IFUNC symbol locally we generate an
+	     IRELATIVE reloc.  */
+	  elf_s390_finish_ifunc_symbol (output_bfd, info, h, htab, h->plt.offset,
+					eh->ifunc_resolver_address +
+					eh->ifunc_resolver_section->output_offset +
+					eh->ifunc_resolver_section->output_section->vma);
+	  /* Fallthrough.  Handling of explicit GOT slots of IFUNC
+	     symbols is below.  */
 	}
       else
 	{
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_PIC_ENTRY_WORD0,
-		      htab->splt->contents + h->plt.offset);
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_PIC_ENTRY_WORD1,
-		      htab->splt->contents + h->plt.offset + 4);
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_PIC_ENTRY_WORD2,
-		      htab->splt->contents + h->plt.offset + 8);
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_PIC_ENTRY_WORD3,
-		      htab->splt->contents + h->plt.offset + 12);
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_PIC_ENTRY_WORD4,
-		      htab->splt->contents + h->plt.offset + 16);
-	  bfd_put_32 (output_bfd, (bfd_vma) 0+(relative_offset << 16),
-		      htab->splt->contents + h->plt.offset + 20);
-	  bfd_put_32 (output_bfd, got_offset,
-		      htab->splt->contents + h->plt.offset + 24);
-	}
-      /* Insert offset into  reloc. table here.  */
-      bfd_put_32 (output_bfd, plt_index * sizeof (Elf32_External_Rela),
-		  htab->splt->contents + h->plt.offset + 28);
+	  if (h->dynindx == -1
+	      || htab->elf.splt == NULL
+	      || htab->elf.sgotplt == NULL
+	      || htab->elf.srelplt == NULL)
+	    abort ();
 
-      /* Fill in the entry in the global offset table.
-	 Points to instruction after GOT offset.  */
-      bfd_put_32 (output_bfd,
-		  (htab->splt->output_section->vma
-		   + htab->splt->output_offset
-		   + h->plt.offset
-		   + 12),
-		  htab->sgotplt->contents + got_offset);
-
-      /* Fill in the entry in the .rela.plt section.  */
-      rela.r_offset = (htab->sgotplt->output_section->vma
-		       + htab->sgotplt->output_offset
-		       + got_offset);
-      rela.r_info = ELF32_R_INFO (h->dynindx, R_390_JMP_SLOT);
-      rela.r_addend = 0;
-      loc = htab->srelplt->contents + plt_index * sizeof (Elf32_External_Rela);
-      bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
+	  /* Calc. index no.
+	     Current offset - size first entry / entry size.  */
+	  plt_index = (h->plt.offset - PLT_FIRST_ENTRY_SIZE) / PLT_ENTRY_SIZE;
 
-      if (!h->def_regular)
-	{
-	  /* Mark the symbol as undefined, rather than as defined in
-	     the .plt section.  Leave the value alone.  This is a clue
-	     for the dynamic linker, to make function pointer
-	     comparisons work between an application and shared
-	     library.  */
-	  sym->st_shndx = SHN_UNDEF;
+	  /* 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
+	      = -(unsigned) (((65536 / PLT_ENTRY_SIZE - 1) * PLT_ENTRY_SIZE) / 2);
+
+	  /* Fill in the entry in the procedure linkage table.  */
+	  if (!info->shared)
+	    {
+	      memcpy (htab->elf.splt->contents + h->plt.offset, elf_s390_plt_entry,
+		      PLT_ENTRY_SIZE);
+
+	      /* Adjust jump to the first plt entry.  */
+	      bfd_put_32 (output_bfd, (bfd_vma) 0+(relative_offset << 16),
+			  htab->elf.splt->contents + h->plt.offset + 20);
+
+	      /* Push the GOT offset field.  */
+	      bfd_put_32 (output_bfd,
+			  (htab->elf.sgotplt->output_section->vma
+			   + htab->elf.sgotplt->output_offset
+			   + got_offset),
+			  htab->elf.splt->contents + h->plt.offset + 24);
+	    }
+	  else if (got_offset < 4096)
+	    {
+	      /* The GOT offset is small enough to be used directly as
+		 displacement.  */
+	      memcpy (htab->elf.splt->contents + h->plt.offset,
+		      elf_s390_plt_pic12_entry,
+		      PLT_ENTRY_SIZE);
+
+	      /* Put in the GOT offset as displacement value.  The 0xc000
+		 value comes from the first word of the plt entry.  Look
+		 at the elf_s390_plt_pic16_entry content.  */
+	      bfd_put_16 (output_bfd, (bfd_vma)0xc000 | got_offset,
+			  htab->elf.splt->contents + h->plt.offset + 2);
+
+	      /* Adjust the jump to the first plt entry.  */
+	      bfd_put_32 (output_bfd, (bfd_vma) 0+(relative_offset << 16),
+			  htab->elf.splt->contents + h->plt.offset + 20);
+	    }
+	  else if (got_offset < 32768)
+	    {
+	      /* The GOT offset is too big for a displacement but small
+		 enough to be a signed 16 bit immediate value as it can be
+		 used in an lhi instruction.  */
+	      memcpy (htab->elf.splt->contents + h->plt.offset,
+		      elf_s390_plt_pic16_entry,
+		      PLT_ENTRY_SIZE);
+
+	      /* Put in the GOT offset for the lhi instruction.  */
+	      bfd_put_16 (output_bfd, (bfd_vma)got_offset,
+			  htab->elf.splt->contents + h->plt.offset + 2);
+
+	      /* Adjust the jump to the first plt entry.  */
+	      bfd_put_32 (output_bfd, (bfd_vma) 0+(relative_offset << 16),
+			  htab->elf.splt->contents + h->plt.offset + 20);
+	    }
+	  else
+	    {
+	      memcpy (htab->elf.splt->contents + h->plt.offset,
+		      elf_s390_plt_pic_entry,
+		      PLT_ENTRY_SIZE);
+
+	      /* Adjust the jump to the first plt entry.  */
+	      bfd_put_32 (output_bfd, (bfd_vma) 0+(relative_offset << 16),
+			  htab->elf.splt->contents + h->plt.offset + 20);
+
+	      /* Push the GOT offset field.  */
+	      bfd_put_32 (output_bfd, got_offset,
+			  htab->elf.splt->contents + h->plt.offset + 24);
+	    }
+	  /* Insert offset into  reloc. table here.  */
+	  bfd_put_32 (output_bfd, plt_index * sizeof (Elf32_External_Rela),
+		      htab->elf.splt->contents + h->plt.offset + 28);
+
+	  /* Fill in the entry in the global offset table.
+	     Points to instruction after GOT offset.  */
+	  bfd_put_32 (output_bfd,
+		      (htab->elf.splt->output_section->vma
+		       + htab->elf.splt->output_offset
+		       + h->plt.offset
+		       + 12),
+		      htab->elf.sgotplt->contents + got_offset);
+
+	  /* Fill in the entry in the .rela.plt section.  */
+	  rela.r_offset = (htab->elf.sgotplt->output_section->vma
+			   + htab->elf.sgotplt->output_offset
+			   + got_offset);
+	  rela.r_info = ELF32_R_INFO (h->dynindx, R_390_JMP_SLOT);
+	  rela.r_addend = 0;
+	  loc = htab->elf.srelplt->contents + plt_index * sizeof (Elf32_External_Rela);
+	  bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
+
+	  if (!h->def_regular)
+	    {
+	      /* Mark the symbol as undefined, rather than as defined in
+		 the .plt section.  Leave the value alone.  This is a clue
+		 for the dynamic linker, to make function pointer
+		 comparisons work between an application and shared
+		 library.  */
+	      sym->st_shndx = SHN_UNDEF;
+	    }
 	}
     }
 
@@ -3226,11 +3614,11 @@ elf_s390_finish_dynamic_symbol (output_bfd, info, h, sym)
       /* This symbol has an entry in the global offset table.  Set it
 	 up.  */
 
-      if (htab->sgot == NULL || htab->srelgot == NULL)
+      if (htab->elf.sgot == NULL || htab->elf.srelgot == NULL)
 	abort ();
 
-      rela.r_offset = (htab->sgot->output_section->vma
-		       + htab->sgot->output_offset
+      rela.r_offset = (htab->elf.sgot->output_section->vma
+		       + htab->elf.sgot->output_offset
 		       + (h->got.offset &~ (bfd_vma) 1));
 
       /* If this is a static link, or it is a -Bsymbolic link and the
@@ -3238,9 +3626,37 @@ elf_s390_finish_dynamic_symbol (output_bfd, info, h, sym)
 	 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 (info->shared
+      if (h->def_regular && s390_is_ifunc_symbol_p (h))
+	{
+	  if (info->shared)
+	    {
+	      /* An explicit GOT slot usage needs GLOB_DAT.  If the
+		 symbol references local the implicit got.iplt slot
+		 will be used and the IRELATIVE reloc has been created
+		 above.  */
+	      goto do_glob_dat;
+	    }
+	  else
+	    {
+	      /* For non-shared objects explicit GOT slots must be
+		 filled with the PLT slot address for pointer
+		 equality reasons.  */
+	      bfd_put_32 (output_bfd, (htab->elf.iplt->output_section->vma
+				       + htab->elf.iplt->output_offset
+				       + h->plt.offset),
+			  htab->elf.sgot->contents + h->got.offset);
+	      return TRUE;
+	    }
+	}
+      else if (info->shared
 	  && SYMBOL_REFERENCES_LOCAL (info, h))
 	{
+	  /* 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 (!h->def_regular)
 	    return FALSE;
 	  BFD_ASSERT((h->got.offset & 1) != 0);
@@ -3252,13 +3668,14 @@ elf_s390_finish_dynamic_symbol (output_bfd, info, h, sym)
       else
 	{
 	  BFD_ASSERT((h->got.offset & 1) == 0);
-	  bfd_put_32 (output_bfd, (bfd_vma) 0, htab->sgot->contents + h->got.offset);
+	do_glob_dat:
+	  bfd_put_32 (output_bfd, (bfd_vma) 0, htab->elf.sgot->contents + h->got.offset);
 	  rela.r_info = ELF32_R_INFO (h->dynindx, R_390_GLOB_DAT);
 	  rela.r_addend = 0;
 	}
 
-      loc = htab->srelgot->contents;
-      loc += htab->srelgot->reloc_count++ * sizeof (Elf32_External_Rela);
+      loc = htab->elf.srelgot->contents;
+      loc += htab->elf.srelgot->reloc_count++ * sizeof (Elf32_External_Rela);
       bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
     }
 
@@ -3298,8 +3715,7 @@ elf_s390_finish_dynamic_symbol (output_bfd, info, h, sym)
    dynamic linker, before writing them out.  */
 
 static enum elf_reloc_type_class
-elf_s390_reloc_type_class (rela)
-     const Elf_Internal_Rela *rela;
+elf_s390_reloc_type_class (const Elf_Internal_Rela *rela)
 {
   switch ((int) ELF32_R_TYPE (rela->r_info))
     {
@@ -3317,23 +3733,24 @@ elf_s390_reloc_type_class (rela)
 /* Finish up the dynamic sections.  */
 
 static bfd_boolean
-elf_s390_finish_dynamic_sections (output_bfd, info)
-     bfd *output_bfd;
-     struct bfd_link_info *info;
+elf_s390_finish_dynamic_sections (bfd *output_bfd,
+				  struct bfd_link_info *info)
 {
   struct elf_s390_link_hash_table *htab;
   bfd *dynobj;
   asection *sdyn;
+  bfd *ibfd;
+  unsigned int i;
 
   htab = elf_s390_hash_table (info);
   dynobj = htab->elf.dynobj;
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (htab->elf.dynamic_sections_created)
     {
       Elf32_External_Dyn *dyncon, *dynconend;
 
-      if (sdyn == NULL || htab->sgot == NULL)
+      if (sdyn == NULL || htab->elf.sgot == NULL)
 	abort ();
 
       dyncon = (Elf32_External_Dyn *) sdyn->contents;
@@ -3351,15 +3768,15 @@ elf_s390_finish_dynamic_sections (output_bfd, info)
 	      continue;
 
 	    case DT_PLTGOT:
-	      dyn.d_un.d_ptr = htab->sgot->output_section->vma;
+	      dyn.d_un.d_ptr = htab->elf.sgot->output_section->vma;
 	      break;
 
 	    case DT_JMPREL:
-	      dyn.d_un.d_ptr = htab->srelplt->output_section->vma;
+	      dyn.d_un.d_ptr = htab->elf.srelplt->output_section->vma;
 	      break;
 
 	    case DT_PLTRELSZ:
-	      s = htab->srelplt->output_section;
+	      s = htab->elf.srelplt->output_section;
 	      dyn.d_un.d_val = s->size;
 	      break;
 	    }
@@ -3368,72 +3785,82 @@ elf_s390_finish_dynamic_sections (output_bfd, info)
 	}
 
       /* Fill in the special first entry in the procedure linkage table.  */
-      if (htab->splt && htab->splt->size > 0)
+      if (htab->elf.splt && htab->elf.splt->size > 0)
 	{
-	  memset (htab->splt->contents, 0, PLT_FIRST_ENTRY_SIZE);
+	  memset (htab->elf.splt->contents, 0, PLT_FIRST_ENTRY_SIZE);
 	  if (info->shared)
 	    {
-	      bfd_put_32 (output_bfd, (bfd_vma) PLT_PIC_FIRST_ENTRY_WORD0,
-			  htab->splt->contents );
-	      bfd_put_32 (output_bfd, (bfd_vma) PLT_PIC_FIRST_ENTRY_WORD1,
-			  htab->splt->contents +4 );
-	      bfd_put_32 (output_bfd, (bfd_vma) PLT_PIC_FIRST_ENTRY_WORD2,
-			  htab->splt->contents +8 );
-	      bfd_put_32 (output_bfd, (bfd_vma) PLT_PIC_FIRST_ENTRY_WORD3,
-			  htab->splt->contents +12 );
-	      bfd_put_32 (output_bfd, (bfd_vma) PLT_PIC_FIRST_ENTRY_WORD4,
-			  htab->splt->contents +16 );
-	   }
+	      memcpy (htab->elf.splt->contents, elf_s390_plt_pic_first_entry,
+		      PLT_FIRST_ENTRY_SIZE);
+	    }
 	  else
-	   {
-	      bfd_put_32 (output_bfd, (bfd_vma)PLT_FIRST_ENTRY_WORD0,
-			  htab->splt->contents );
-	      bfd_put_32 (output_bfd, (bfd_vma) PLT_FIRST_ENTRY_WORD1,
-			  htab->splt->contents +4 );
-	      bfd_put_32 (output_bfd, (bfd_vma) PLT_FIRST_ENTRY_WORD2,
-			  htab->splt->contents +8 );
-	      bfd_put_32 (output_bfd, (bfd_vma) PLT_FIRST_ENTRY_WORD3,
-			  htab->splt->contents +12 );
-	      bfd_put_32 (output_bfd, (bfd_vma) PLT_FIRST_ENTRY_WORD4,
-			  htab->splt->contents +16 );
-	      bfd_put_32 (output_bfd, (bfd_vma) PLT_FIRST_ENTRY_WORD5,
-			  htab->splt->contents +20 );
+	    {
+	      memcpy (htab->elf.splt->contents, elf_s390_plt_first_entry,
+		      PLT_FIRST_ENTRY_SIZE);
 	      bfd_put_32 (output_bfd,
-			  htab->sgotplt->output_section->vma
-			  + htab->sgotplt->output_offset,
-			  htab->splt->contents + 24);
+			  htab->elf.sgotplt->output_section->vma
+			  + htab->elf.sgotplt->output_offset,
+			  htab->elf.splt->contents + 24);
 	   }
-	  elf_section_data (htab->splt->output_section)
+	  elf_section_data (htab->elf.splt->output_section)
 	    ->this_hdr.sh_entsize = 4;
 	}
 
     }
 
-  if (htab->sgotplt)
+  if (htab->elf.sgotplt)
     {
       /* Fill in the first three entries in the global offset table.  */
-      if (htab->sgotplt->size > 0)
+      if (htab->elf.sgotplt->size > 0)
 	{
 	  bfd_put_32 (output_bfd,
 		      (sdyn == NULL ? (bfd_vma) 0
 		       : sdyn->output_section->vma + sdyn->output_offset),
-		      htab->sgotplt->contents);
+		      htab->elf.sgotplt->contents);
 	  /* One entry for shared object struct ptr.  */
-	  bfd_put_32 (output_bfd, (bfd_vma) 0, htab->sgotplt->contents + 4);
+	  bfd_put_32 (output_bfd, (bfd_vma) 0, htab->elf.sgotplt->contents + 4);
 	  /* One entry for _dl_runtime_resolve.  */
-	  bfd_put_32 (output_bfd, (bfd_vma) 0, htab->sgotplt->contents + 8);
+	  bfd_put_32 (output_bfd, (bfd_vma) 0, htab->elf.sgotplt->contents + 8);
 	}
 
-      elf_section_data (htab->sgotplt->output_section)
+      elf_section_data (htab->elf.sgotplt->output_section)
 	->this_hdr.sh_entsize = 4;
     }
+  /* Finish dynamic symbol for local IFUNC symbols.  */
+  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
+    {
+      struct plt_entry *local_plt;
+      Elf_Internal_Sym *isym;
+      Elf_Internal_Shdr *symtab_hdr;
+
+      symtab_hdr = &elf_symtab_hdr (ibfd);
+
+      local_plt = elf_s390_local_plt (ibfd);
+      if (local_plt != NULL)
+	for (i = 0; i < symtab_hdr->sh_info; i++)
+	  {
+	    if (local_plt[i].plt.offset != (bfd_vma) -1)
+	      {
+		asection *sec = local_plt[i].sec;
+		isym = bfd_sym_from_r_symndx (&htab->sym_cache, ibfd, i);
+		if (isym == NULL)
+		  return FALSE;
+
+		if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
+		  elf_s390_finish_ifunc_symbol (output_bfd, info, NULL, htab,
+						local_plt[i].plt.offset,
+						isym->st_value
+						+ sec->output_section->vma
+						+ sec->output_offset);
+
+	      }
+	  }
+    }
   return TRUE;
 }
 
 static bfd_boolean
-elf_s390_grok_prstatus (abfd, note)
-     bfd * abfd;
-     Elf_Internal_Note * note;
+elf_s390_grok_prstatus (bfd * abfd, Elf_Internal_Note * note)
 {
   int offset;
   unsigned int size;
@@ -3519,6 +3946,7 @@ elf32_s390_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
 #define elf_backend_reloc_type_class	      elf_s390_reloc_type_class
 #define elf_backend_grok_prstatus	      elf_s390_grok_prstatus
 #define elf_backend_plt_sym_val		      elf_s390_plt_sym_val
+#define elf_backend_add_symbol_hook           elf_s390_add_symbol_hook
 
 #define bfd_elf32_mkobject		elf_s390_mkobject
 #define elf_backend_object_p		elf_s390_object_p
diff --git a/bfd/elf32-score.c b/bfd/elf32-score.c
index b437624..01a602b 100644
--- a/bfd/elf32-score.c
+++ b/bfd/elf32-score.c
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for S+core.
-   Copyright 2006, 2007, 2008, 2009, 2010, 2011
+   Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
    Contributed by
    Brain.lin (brain.lin at sunplusct.com)
@@ -1066,7 +1066,7 @@ score_elf_sort_hash_table_f (struct score_elf_link_hash_entry *h, void *data)
 static asection *
 score_elf_got_section (bfd *abfd, bfd_boolean maybe_excluded)
 {
-  asection *sgot = bfd_get_section_by_name (abfd, ".got");
+  asection *sgot = bfd_get_linker_section (abfd, ".got");
 
   if (sgot == NULL || (! maybe_excluded && (sgot->flags & SEC_EXCLUDE) != 0))
     return NULL;
@@ -1247,16 +1247,16 @@ score_elf_rel_dyn_section (bfd *dynobj, bfd_boolean create_p)
   static const char dname[] = ".rel.dyn";
   asection *sreloc;
 
-  sreloc = bfd_get_section_by_name (dynobj, dname);
+  sreloc = bfd_get_linker_section (dynobj, dname);
   if (sreloc == NULL && create_p)
     {
-      sreloc = bfd_make_section_with_flags (dynobj, dname,
-                                            (SEC_ALLOC
-                                             | SEC_LOAD
-                                             | SEC_HAS_CONTENTS
-                                             | SEC_IN_MEMORY
-                                             | SEC_LINKER_CREATED
-                                             | SEC_READONLY));
+      sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
+						   (SEC_ALLOC
+						    | SEC_LOAD
+						    | SEC_HAS_CONTENTS
+						    | SEC_IN_MEMORY
+						    | SEC_LINKER_CREATED
+						    | SEC_READONLY));
       if (sreloc == NULL
           || ! bfd_set_section_alignment (dynobj, sreloc,
                                           SCORE_ELF_LOG_FILE_ALIGN (dynobj)))
@@ -1429,7 +1429,7 @@ score_elf_create_got_section (bfd *abfd,
 
   /* We have to use an alignment of 2**4 here because this is hardcoded
      in the function stub generation and in the linker script.  */
-  s = bfd_make_section_with_flags (abfd, ".got", flags);
+  s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
    if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, 4))
     return FALSE;
@@ -2672,9 +2672,9 @@ s3_bfd_score_elf_relocate_section (bfd *output_bfd,
             }
         }
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
         {
@@ -3123,7 +3123,7 @@ s3_bfd_score_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
       if (!h->def_regular)
         {
           /* We need .stub section.  */
-          s = bfd_get_section_by_name (dynobj, SCORE_ELF_STUB_SECTION_NAME);
+          s = bfd_get_linker_section (dynobj, SCORE_ELF_STUB_SECTION_NAME);
           BFD_ASSERT (s != NULL);
 
           h->root.u.def.section = s;
@@ -3259,7 +3259,7 @@ s3_bfd_score_elf_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *i
       /* Set the contents of the .interp section to the interpreter.  */
       if (!info->shared)
         {
-          s = bfd_get_section_by_name (dynobj, ".interp");
+          s = bfd_get_linker_section (dynobj, ".interp");
           BFD_ASSERT (s != NULL);
           s->size = strlen (ELF_DYNAMIC_INTERPRETER) + 1;
           s->contents = (bfd_byte *) ELF_DYNAMIC_INTERPRETER;
@@ -3417,7 +3417,7 @@ s3_bfd_score_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
            | SEC_LINKER_CREATED | SEC_READONLY);
 
   /* ABI requests the .dynamic section to be read only.  */
-  s = bfd_get_section_by_name (abfd, ".dynamic");
+  s = bfd_get_linker_section (abfd, ".dynamic");
   if (s != NULL)
     {
       if (!bfd_set_section_flags (abfd, s, flags))
@@ -3432,10 +3432,10 @@ s3_bfd_score_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
     return FALSE;
 
   /* Create .stub section.  */
-  if (bfd_get_section_by_name (abfd, SCORE_ELF_STUB_SECTION_NAME) == NULL)
+  if (bfd_get_linker_section (abfd, SCORE_ELF_STUB_SECTION_NAME) == NULL)
     {
-      s = bfd_make_section_with_flags (abfd, SCORE_ELF_STUB_SECTION_NAME,
-                                       flags | SEC_CODE);
+      s = bfd_make_section_anyway_with_flags (abfd, SCORE_ELF_STUB_SECTION_NAME,
+					      flags | SEC_CODE);
       if (s == NULL
           || !bfd_set_section_alignment (abfd, s, 2))
 
@@ -3489,7 +3489,7 @@ s3_bfd_score_elf_finish_dynamic_symbol (bfd *output_bfd,
       /* This symbol has a stub.  Set it up.  */
       BFD_ASSERT (h->dynindx != -1);
 
-      s = bfd_get_section_by_name (dynobj, SCORE_ELF_STUB_SECTION_NAME);
+      s = bfd_get_linker_section (dynobj, SCORE_ELF_STUB_SECTION_NAME);
       BFD_ASSERT (s != NULL);
 
       /* FIXME: Can h->dynindex be more than 64K?  */
@@ -3568,7 +3568,7 @@ s3_bfd_score_elf_finish_dynamic_sections (bfd *output_bfd,
 
   dynobj = elf_hash_table (info)->dynobj;
 
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   sgot = score_elf_got_section (dynobj, FALSE);
   if (sgot == NULL)
diff --git a/bfd/elf32-score7.c b/bfd/elf32-score7.c
index 3e98bfc..3615a1e 100644
--- a/bfd/elf32-score7.c
+++ b/bfd/elf32-score7.c
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for S+core.
-   Copyright 2009, 2010, 2011 Free Software Foundation, Inc.
+   Copyright 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
    Contributed by
    Brain.lin (brain.lin at sunplusct.com)
    Mei Ligang (ligang at sunnorth.com.cn)
@@ -22,8 +22,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include "bfd.h"
 #include "sysdep.h"
+#include "bfd.h"
 #include "libbfd.h"
 #include "libiberty.h"
 #include "elf-bfd.h"
@@ -948,7 +948,7 @@ score_elf_sort_hash_table_f (struct score_elf_link_hash_entry *h, void *data)
 static asection *
 score_elf_got_section (bfd *abfd, bfd_boolean maybe_excluded)
 {
-  asection *sgot = bfd_get_section_by_name (abfd, ".got");
+  asection *sgot = bfd_get_linker_section (abfd, ".got");
 
   if (sgot == NULL || (! maybe_excluded && (sgot->flags & SEC_EXCLUDE) != 0))
     return NULL;
@@ -1103,16 +1103,16 @@ score_elf_rel_dyn_section (bfd *dynobj, bfd_boolean create_p)
   static const char dname[] = ".rel.dyn";
   asection *sreloc;
 
-  sreloc = bfd_get_section_by_name (dynobj, dname);
+  sreloc = bfd_get_linker_section (dynobj, dname);
   if (sreloc == NULL && create_p)
     {
-      sreloc = bfd_make_section_with_flags (dynobj, dname,
-                                            (SEC_ALLOC
-                                             | SEC_LOAD
-                                             | SEC_HAS_CONTENTS
-                                             | SEC_IN_MEMORY
-                                             | SEC_LINKER_CREATED
-                                             | SEC_READONLY));
+      sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
+						   (SEC_ALLOC
+						    | SEC_LOAD
+						    | SEC_HAS_CONTENTS
+						    | SEC_IN_MEMORY
+						    | SEC_LINKER_CREATED
+						    | SEC_READONLY));
       if (sreloc == NULL
           || ! bfd_set_section_alignment (dynobj, sreloc,
                                           SCORE_ELF_LOG_FILE_ALIGN (dynobj)))
@@ -1286,7 +1286,7 @@ score_elf_create_got_section (bfd *abfd,
 
   /* We have to use an alignment of 2**4 here because this is hardcoded
      in the function stub generation and in the linker script.  */
-  s = bfd_make_section_with_flags (abfd, ".got", flags);
+  s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
    if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, 4))
     return FALSE;
@@ -2443,9 +2443,9 @@ s7_bfd_score_elf_relocate_section (bfd *output_bfd,
             }
         }
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
         {
@@ -2928,7 +2928,7 @@ s7_bfd_score_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
       if (!h->def_regular)
         {
           /* We need .stub section.  */
-          s = bfd_get_section_by_name (dynobj, SCORE_ELF_STUB_SECTION_NAME);
+          s = bfd_get_linker_section (dynobj, SCORE_ELF_STUB_SECTION_NAME);
           BFD_ASSERT (s != NULL);
 
           h->root.u.def.section = s;
@@ -3066,7 +3066,7 @@ s7_bfd_score_elf_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *i
       /* Set the contents of the .interp section to the interpreter.  */
       if (!info->shared)
         {
-          s = bfd_get_section_by_name (dynobj, ".interp");
+          s = bfd_get_linker_section (dynobj, ".interp");
           BFD_ASSERT (s != NULL);
           s->size = strlen (ELF_DYNAMIC_INTERPRETER) + 1;
           s->contents = (bfd_byte *) ELF_DYNAMIC_INTERPRETER;
@@ -3224,7 +3224,7 @@ s7_bfd_score_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
            | SEC_LINKER_CREATED | SEC_READONLY);
 
   /* ABI requests the .dynamic section to be read only.  */
-  s = bfd_get_section_by_name (abfd, ".dynamic");
+  s = bfd_get_linker_section (abfd, ".dynamic");
   if (s != NULL)
     {
       if (!bfd_set_section_flags (abfd, s, flags))
@@ -3239,10 +3239,10 @@ s7_bfd_score_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
     return FALSE;
 
   /* Create .stub section.  */
-  if (bfd_get_section_by_name (abfd, SCORE_ELF_STUB_SECTION_NAME) == NULL)
+  if (bfd_get_linker_section (abfd, SCORE_ELF_STUB_SECTION_NAME) == NULL)
     {
-      s = bfd_make_section_with_flags (abfd, SCORE_ELF_STUB_SECTION_NAME,
-                                       flags | SEC_CODE);
+      s = bfd_make_section_anyway_with_flags (abfd, SCORE_ELF_STUB_SECTION_NAME,
+					      flags | SEC_CODE);
       if (s == NULL
           || !bfd_set_section_alignment (abfd, s, 2))
 
@@ -3297,7 +3297,7 @@ s7_bfd_score_elf_finish_dynamic_symbol (bfd *output_bfd,
       /* This symbol has a stub.  Set it up.  */
       BFD_ASSERT (h->dynindx != -1);
 
-      s = bfd_get_section_by_name (dynobj, SCORE_ELF_STUB_SECTION_NAME);
+      s = bfd_get_linker_section (dynobj, SCORE_ELF_STUB_SECTION_NAME);
       BFD_ASSERT (s != NULL);
 
       /* FIXME: Can h->dynindex be more than 64K?  */
@@ -3377,7 +3377,7 @@ s7_bfd_score_elf_finish_dynamic_sections (bfd *output_bfd,
 
   dynobj = elf_hash_table (info)->dynobj;
 
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   sgot = score_elf_got_section (dynobj, FALSE);
   if (sgot == NULL)
diff --git a/bfd/elf32-sh.c b/bfd/elf32-sh.c
index 780a3bf..cbd00aa 100644
--- a/bfd/elf32-sh.c
+++ b/bfd/elf32-sh.c
@@ -1,6 +1,7 @@
 /* Renesas / SuperH SH specific support for 32-bit ELF
    Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-   2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+   2006, 2007, 2008, 2009, 2010, 2011, 2012
+   Free Software Foundation, Inc.
    Contributed by Ian Lance Taylor, Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -2405,7 +2406,7 @@ struct elf_sh_link_hash_entry
      and thus require fixups or relocations.  */
   bfd_signed_vma abs_funcdesc_refcount;
 
-  enum {
+  enum got_type {
     GOT_UNKNOWN = 0, GOT_NORMAL, GOT_TLS_GD, GOT_TLS_IE, GOT_FUNCDESC
   } got_type;
 };
@@ -2621,39 +2622,39 @@ create_got_section (bfd *dynobj, struct bfd_link_info *info)
   if (htab == NULL)
     return FALSE;
 
-  htab->sgot = bfd_get_section_by_name (dynobj, ".got");
-  htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
-  htab->srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+  htab->sgot = bfd_get_linker_section (dynobj, ".got");
+  htab->sgotplt = bfd_get_linker_section (dynobj, ".got.plt");
+  htab->srelgot = bfd_get_linker_section (dynobj, ".rela.got");
   if (! htab->sgot || ! htab->sgotplt || ! htab->srelgot)
     abort ();
 
-  htab->sfuncdesc = bfd_make_section_with_flags (dynobj, ".got.funcdesc",
-						 (SEC_ALLOC | SEC_LOAD
-						  | SEC_HAS_CONTENTS
-						  | SEC_IN_MEMORY
-						  | SEC_LINKER_CREATED));
+  htab->sfuncdesc = bfd_make_section_anyway_with_flags (dynobj, ".got.funcdesc",
+							(SEC_ALLOC | SEC_LOAD
+							 | SEC_HAS_CONTENTS
+							 | SEC_IN_MEMORY
+							 | SEC_LINKER_CREATED));
   if (htab->sfuncdesc == NULL
       || ! bfd_set_section_alignment (dynobj, htab->sfuncdesc, 2))
     return FALSE;
 
-  htab->srelfuncdesc = bfd_make_section_with_flags (dynobj,
-						    ".rela.got.funcdesc",
-						    (SEC_ALLOC | SEC_LOAD
-						     | SEC_HAS_CONTENTS
-						     | SEC_IN_MEMORY
-						     | SEC_LINKER_CREATED
-						     | SEC_READONLY));
+  htab->srelfuncdesc = bfd_make_section_anyway_with_flags (dynobj,
+							   ".rela.got.funcdesc",
+							   (SEC_ALLOC | SEC_LOAD
+							    | SEC_HAS_CONTENTS
+							    | SEC_IN_MEMORY
+							    | SEC_LINKER_CREATED
+							    | SEC_READONLY));
   if (htab->srelfuncdesc == NULL
       || ! bfd_set_section_alignment (dynobj, htab->srelfuncdesc, 2))
     return FALSE;
 
   /* Also create .rofixup.  */
-  htab->srofixup = bfd_make_section_with_flags (dynobj, ".rofixup",
-						(SEC_ALLOC | SEC_LOAD
-						 | SEC_HAS_CONTENTS
-						 | SEC_IN_MEMORY
-						 | SEC_LINKER_CREATED
-						 | SEC_READONLY));
+  htab->srofixup = bfd_make_section_anyway_with_flags (dynobj, ".rofixup",
+						       (SEC_ALLOC | SEC_LOAD
+							| SEC_HAS_CONTENTS
+							| SEC_IN_MEMORY
+							| SEC_LINKER_CREATED
+							| SEC_READONLY));
   if (htab->srofixup == NULL
       || ! bfd_set_section_alignment (dynobj, htab->srofixup, 2))
     return FALSE;
@@ -2707,7 +2708,7 @@ sh_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
   if (bed->plt_readonly)
     pltflags |= SEC_READONLY;
 
-  s = bfd_make_section_with_flags (abfd, ".plt", pltflags);
+  s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
   htab->splt = s;
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
@@ -2736,9 +2737,10 @@ sh_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 	return FALSE;
     }
 
-  s = bfd_make_section_with_flags (abfd,
-				   bed->default_use_rela_p ? ".rela.plt" : ".rel.plt",
-				   flags | SEC_READONLY);
+  s = bfd_make_section_anyway_with_flags (abfd,
+					  bed->default_use_rela_p
+					  ? ".rela.plt" : ".rel.plt",
+					  flags | SEC_READONLY);
   htab->srelplt = s;
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, ptralign))
@@ -2748,32 +2750,6 @@ sh_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
       && !create_got_section (abfd, info))
     return FALSE;
 
-  {
-    const char *secname;
-    char *relname;
-    flagword secflags;
-    asection *sec;
-
-    for (sec = abfd->sections; sec; sec = sec->next)
-      {
-	secflags = bfd_get_section_flags (abfd, sec);
-	if ((secflags & (SEC_DATA | SEC_LINKER_CREATED))
-	    || ((secflags & SEC_HAS_CONTENTS) != SEC_HAS_CONTENTS))
-	  continue;
-	secname = bfd_get_section_name (abfd, sec);
-	relname = (char *) bfd_malloc ((bfd_size_type) strlen (secname) + 6);
-	strcpy (relname, ".rela");
-	strcat (relname, secname);
-	if (bfd_get_section_by_name (abfd, secname))
-	  continue;
-	s = bfd_make_section_with_flags (abfd, relname,
-					 flags | SEC_READONLY);
-	if (s == NULL
-	    || ! bfd_set_section_alignment (abfd, s, ptralign))
-	  return FALSE;
-      }
-  }
-
   if (bed->want_dynbss)
     {
       /* The .dynbss section is a place to put symbols which are defined
@@ -2782,8 +2758,8 @@ sh_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 	 image and use a R_*_COPY reloc to tell the dynamic linker to
 	 initialize them at run time.  The linker script puts the .dynbss
 	 section into the .bss section of the final image.  */
-      s = bfd_make_section_with_flags (abfd, ".dynbss",
-				       SEC_ALLOC | SEC_LINKER_CREATED);
+      s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
+					      SEC_ALLOC | SEC_LINKER_CREATED);
       htab->sdynbss = s;
       if (s == NULL)
 	return FALSE;
@@ -2801,10 +2777,10 @@ sh_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 	 copy relocs.  */
       if (! info->shared)
 	{
-	  s = bfd_make_section_with_flags (abfd,
-					   (bed->default_use_rela_p
-					    ? ".rela.bss" : ".rel.bss"),
-					   flags | SEC_READONLY);
+	  s = bfd_make_section_anyway_with_flags (abfd,
+						  (bed->default_use_rela_p
+						   ? ".rela.bss" : ".rel.bss"),
+						  flags | SEC_READONLY);
 	  htab->srelbss = s;
 	  if (s == NULL
 	      || ! bfd_set_section_alignment (abfd, s, ptralign))
@@ -2926,13 +2902,6 @@ sh_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
       return TRUE;
     }
 
-  if (h->size == 0)
-    {
-      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
-			     h->root.root.string);
-      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
@@ -2950,7 +2919,7 @@ sh_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
      copy the initial value out of the dynamic object and into the
      runtime process image.  We need to remember the offset into the
      .rela.bss section we are going to use.  */
-  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
       asection *srel;
 
@@ -3084,7 +3053,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
     {
       asection *s;
       bfd_boolean dyn;
-      int got_type = sh_elf_hash_entry (h)->got_type;
+      enum got_type got_type = sh_elf_hash_entry (h)->got_type;
 
       /* Make sure this symbol is output as a dynamic symbol.
 	 Undefined weak syms won't yet be marked as dynamic.  */
@@ -3110,6 +3079,9 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
 	      && (got_type == GOT_NORMAL || got_type == GOT_FUNCDESC))
 	    htab->srofixup->size += 4;
 	}
+      /* No dynamic relocations required when IE->LE conversion happens.  */
+      else if (got_type == GOT_TLS_IE && !h->def_dynamic && !info->shared)
+	;
       /* R_SH_TLS_IE_32 needs one dynamic relocation if dynamic,
 	 R_SH_TLS_GD needs one if local symbol and two if global.  */
       else if ((got_type == GOT_TLS_GD && h->dynindx == -1)
@@ -3446,7 +3418,7 @@ sh_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  BFD_ASSERT (s != NULL);
 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
@@ -3788,8 +3760,10 @@ sh_elf_got_offset (struct elf_sh_link_hash_table *htab)
 static unsigned
 sh_elf_osec_to_segment (bfd *output_bfd, asection *osec)
 {
-  Elf_Internal_Phdr *p = _bfd_elf_find_segment_containing_section (output_bfd,
-								   osec);
+  Elf_Internal_Phdr *p = NULL;
+
+  if (output_bfd->xvec->flavour == bfd_target_elf_flavour)
+    p = _bfd_elf_find_segment_containing_section (output_bfd, osec);
 
   /* FIXME: Nothing ever says what this index is relative to.  The kernel
      supplies data in terms of the number of load segments but this is
@@ -3802,7 +3776,8 @@ sh_elf_osec_readonly_p (bfd *output_bfd, asection *osec)
 {
   unsigned seg = sh_elf_osec_to_segment (output_bfd, osec);
 
-  return ! (elf_tdata (output_bfd)->phdr[seg].p_flags & PF_W);
+  return (seg != (unsigned) -1
+	  && ! (elf_tdata (output_bfd)->phdr[seg].p_flags & PF_W));
 }
 
 /* Generate the initial contents of a local function descriptor, along
@@ -3980,7 +3955,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
       bfd_reloc_status_type r;
       int seen_stt_datalabel = 0;
       bfd_vma off;
-      int got_type;
+      enum got_type got_type;
       const char *symname = NULL;
 
       r_symndx = ELF32_R_SYM (rel->r_info);
@@ -4048,7 +4023,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 	      _("Unexpected STO_SH5_ISA32 on local symbol is not handled"),
 	      input_bfd, input_section, rel->r_offset));
 
-	  if (sec != NULL && elf_discarded_section (sec))
+	  if (sec != NULL && discarded_section (sec))
 	    /* Handled below.  */
 	    ;
 	  else if (info->relocatable)
@@ -4240,9 +4215,9 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 	    }
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -4698,8 +4673,8 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 
 		      if (srelgot == NULL)
 			{
-			  srelgot = bfd_get_section_by_name (dynobj,
-							     ".rela.got");
+			  srelgot = bfd_get_linker_section (dynobj,
+							    ".rela.got");
 			  BFD_ASSERT (srelgot != NULL);
 			}
 
@@ -5020,7 +4995,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 
 		if (srelgot == NULL)
 		  {
-		    srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+		    srelgot = bfd_get_linker_section (dynobj, ".rela.got");
 		    BFD_ASSERT (srelgot != NULL);
 		  }
 
@@ -5310,7 +5285,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 
 	      if (srelgot == NULL)
 		{
-		  srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+		  srelgot = bfd_get_linker_section (dynobj, ".rela.got");
 		  BFD_ASSERT (srelgot != NULL);
 		}
 
@@ -6093,7 +6068,7 @@ sh_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
   const Elf_Internal_Rela *rel_end;
   asection *sreloc;
   unsigned int r_type;
-  int got_type, old_got_type;
+  enum got_type got_type, old_got_type;
 
   sreloc = NULL;
 
@@ -7167,8 +7142,7 @@ sh_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
 		  && (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");
+      s = bfd_get_linker_section (htab->root.dynobj, ".rela.bss");
       BFD_ASSERT (s != NULL);
 
       rel.r_offset = (h->root.u.def.value
@@ -7204,7 +7178,7 @@ sh_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
     return FALSE;
 
   sgotplt = htab->sgotplt;
-  sdyn = bfd_get_section_by_name (htab->root.dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (htab->root.dynobj, ".dynamic");
 
   if (htab->root.dynamic_sections_created)
     {
diff --git a/bfd/elf32-spu.c b/bfd/elf32-spu.c
index cff9185..28628f8 100644
--- a/bfd/elf32-spu.c
+++ b/bfd/elf32-spu.c
@@ -1,6 +1,7 @@
 /* SPU specific support for 32-bit ELF
 
-   Copyright 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+   Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012
+   Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -1425,7 +1426,7 @@ build_stub (struct bfd_link_info *info,
 	add = (int) irela->r_addend & 0xffffffff;
       if (add != 0)
 	len += 1 + 8;
-      name = bfd_malloc (len);
+      name = bfd_malloc (len + 1);
       if (name == NULL)
 	return FALSE;
 
@@ -4895,9 +4896,9 @@ spu_elf_relocate_section (bfd *output_bfd,
 	  sym_name = h->root.root.string;
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
diff --git a/bfd/elf32-tic6x.c b/bfd/elf32-tic6x.c
index 19287fe..dbe2c16 100644
--- a/bfd/elf32-tic6x.c
+++ b/bfd/elf32-tic6x.c
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for TI C6X
-   Copyright 2010, 2011
+   Copyright 2010, 2011, 2012
    Free Software Foundation, Inc.
    Contributed by Joseph Myers <joseph at codesourcery.com>
    		  Bernd Schmidt  <bernds at codesourcery.com>
@@ -1670,9 +1670,9 @@ elf32_tic6x_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
       || ! bfd_set_section_alignment (dynobj, htab->elf.splt, 5))
     return FALSE;
 
-  htab->sdynbss = bfd_get_section_by_name (dynobj, ".dynbss");
+  htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss");
   if (!info->shared)
-    htab->srelbss = bfd_get_section_by_name (dynobj, ".rela.bss");
+    htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss");
 
   if (!htab->sdynbss
       || (!info->shared && !htab->srelbss))
@@ -1849,8 +1849,8 @@ elf32_tic6x_finish_dynamic_symbol (bfd * output_bfd,
       /* 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");
+      sgot = bfd_get_linker_section (dynobj, ".got");
+      srela = bfd_get_linker_section (dynobj, ".rela.got");
       BFD_ASSERT (sgot != NULL && srela != NULL);
 
       /* If this is a -Bsymbolic link, and the symbol is defined
@@ -2157,13 +2157,6 @@ elf32_tic6x_adjust_dynamic_symbol (struct bfd_link_info *info,
   if (htab == NULL)
     return FALSE;
 
-  if (h->size == 0)
-    {
-      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
-			     h->root.root.string);
-      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
@@ -2177,7 +2170,7 @@ elf32_tic6x_adjust_dynamic_symbol (struct bfd_link_info *info,
   /* We must generate a R_C6000_COPY reloc to tell the dynamic linker to
      copy the initial value out of the dynamic object and into the
      runtime process image.  */
-  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
       htab->srelbss->size += sizeof (Elf32_External_Rela);
       h->needs_copy = 1;
@@ -2334,9 +2327,9 @@ elf32_tic6x_relocate_section (bfd *output_bfd,
 				   unresolved_reloc, warned);
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	{
@@ -3312,7 +3305,7 @@ elf32_tic6x_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  if (s == NULL)
 	    abort ();
 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
@@ -3614,7 +3607,7 @@ elf32_tic6x_finish_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 
   htab = elf32_tic6x_hash_table (info);
   dynobj = htab->elf.dynobj;
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
     {
@@ -4018,6 +4011,9 @@ elf32_tic6x_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
   if (!_bfd_generic_verify_endian_match (ibfd, obfd))
     return FALSE;
 
+  if (! is_tic6x_elf (ibfd) || ! is_tic6x_elf (obfd))
+    return TRUE;
+
   if (!elf32_tic6x_merge_attributes (ibfd, obfd))
     return FALSE;
 
diff --git a/bfd/elf32-tilegx.c b/bfd/elf32-tilegx.c
index 902e9ba..1b4884b 100644
--- a/bfd/elf32-tilegx.c
+++ b/bfd/elf32-tilegx.c
@@ -87,8 +87,10 @@ tilegx_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 #define ELF_MAXPAGESIZE		0x10000
 #define ELF_COMMONPAGESIZE	0x10000
 
-#define TARGET_LITTLE_SYM       bfd_elf32_tilegx_vec
-#define TARGET_LITTLE_NAME	"elf32-tilegx"
+#define TARGET_BIG_SYM          bfd_elf32_tilegx_be_vec
+#define TARGET_BIG_NAME         "elf32-tilegx-be"
+#define TARGET_LITTLE_SYM       bfd_elf32_tilegx_le_vec
+#define TARGET_LITTLE_NAME      "elf32-tilegx-le"
 
 #define elf_backend_reloc_type_class	     tilegx_reloc_type_class
 
diff --git a/bfd/elf32-tilepro.c b/bfd/elf32-tilepro.c
index 7b08aff..fa883e1 100644
--- a/bfd/elf32-tilepro.c
+++ b/bfd/elf32-tilepro.c
@@ -1,5 +1,5 @@
 /* TILEPro-specific support for 32-bit ELF.
-   Copyright 2011 Free Software Foundation, Inc.
+   Copyright 2011, 2012 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -18,8 +18,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include "bfd.h"
 #include "sysdep.h"
+#include "bfd.h"
 #include "libbfd.h"
 #include "elf-bfd.h"
 #include "elf/tilepro.h"
@@ -380,12 +380,26 @@ static reloc_howto_type tilepro_elf_howto_table [] =
   EMPTY_HOWTO (57),
   EMPTY_HOWTO (58),
   EMPTY_HOWTO (59),
-  EMPTY_HOWTO (60),
-  EMPTY_HOWTO (61),
-  EMPTY_HOWTO (62),
-  EMPTY_HOWTO (63),
-  EMPTY_HOWTO (64),
-  EMPTY_HOWTO (65),
+
+  HOWTO (R_TILEPRO_TLS_GD_CALL, /* type */
+	 TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES, /* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 29,			/* bitsize */
+	 TRUE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed,/* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* special_function */
+	 "R_TILEPRO_TLS_GD_CALL", /* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 -1,			/* dst_mask */
+	 TRUE), 		/* pcrel_offset */
+
+  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_X0_TLS_GD_ADD,  0,  8),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_X1_TLS_GD_ADD,  0,  8),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_Y0_TLS_GD_ADD,  0,  8),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_Y1_TLS_GD_ADD,  0,  8),
+  TILEPRO_IMM_HOWTO(R_TILEPRO_TLS_IE_LOAD,  0,  8),
 
   /* Offsets into the GOT of TLS Descriptors. */
 
@@ -454,17 +468,12 @@ static reloc_howto_type tilepro_elf_howto_table [] =
 	 -1,			/* dst_mask */
 	 TRUE),			/* pcrel_offset */
 
-#define TILEPRO_IMM16_HOWTO_TLS_IE(name, rshift) \
-  HOWTO (name, rshift, 1, 16, FALSE, 0, \
-         complain_overflow_dont, bfd_elf_generic_reloc, \
-         #name, FALSE, 0, 0xffff, TRUE)
-
-  TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X0_TLS_IE_LO,  0),
-  TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X1_TLS_IE_LO,  0),
-  TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X0_TLS_IE_HI, 16),
-  TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X1_TLS_IE_HI, 16),
-  TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X0_TLS_IE_HA, 16),
-  TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X1_TLS_IE_HA, 16),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_IE_LO,  0),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_IE_LO,  0),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_IE_HI, 16),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_IE_HI, 16),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_IE_HA, 16),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_IE_HA, 16),
 
   /* These are common with the Solaris TLS implementation. */
   HOWTO(R_TILEPRO_TLS_DTPMOD32, 0, 0, 0, FALSE, 0, complain_overflow_dont,
@@ -475,8 +484,42 @@ static reloc_howto_type tilepro_elf_howto_table [] =
         FALSE, 0, 0xFFFFFFFF, TRUE),
   HOWTO(R_TILEPRO_TLS_TPOFF32, 0, 0, 0, FALSE, 0, complain_overflow_dont,
         bfd_elf_generic_reloc, "R_TILEPRO_TLS_TPOFF32",
-        FALSE, 0, 0, TRUE)
+        FALSE, 0, 0, TRUE),
 
+  HOWTO (R_TILEPRO_IMM16_X0_TLS_LE,/* type */
+	 0,			/* rightshift */
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_TILEPRO_IMM16_X0_TLS_LE",/* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 -1,			/* dst_mask */
+	 TRUE),			/* pcrel_offset */
+
+  HOWTO (R_TILEPRO_IMM16_X1_TLS_LE,/* type */
+	 0,			/* rightshift */
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_TILEPRO_IMM16_X1_TLS_LE",/* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 -1,			/* dst_mask */
+	 TRUE),			/* pcrel_offset */
+
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_LE_LO,  0),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_LE_LO,  0),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_LE_HI, 16),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_LE_HI, 16),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_LE_HA, 16),
+  TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_LE_HA, 16),
 };
 
 static reloc_howto_type tilepro_elf_howto_table2 [] =
@@ -590,6 +633,13 @@ static const reloc_map tilepro_reloc_map [] =
   TH_REMAP (BFD_RELOC_TILEPRO_SHAMT_Y0,    R_TILEPRO_SHAMT_Y0)
   TH_REMAP (BFD_RELOC_TILEPRO_SHAMT_Y1,    R_TILEPRO_SHAMT_Y1)
 
+  TH_REMAP (BFD_RELOC_TILEPRO_TLS_GD_CALL,        R_TILEPRO_TLS_GD_CALL)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD, R_TILEPRO_IMM8_X0_TLS_GD_ADD)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD, R_TILEPRO_IMM8_X1_TLS_GD_ADD)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD, R_TILEPRO_IMM8_Y0_TLS_GD_ADD)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD, R_TILEPRO_IMM8_Y1_TLS_GD_ADD)
+  TH_REMAP (BFD_RELOC_TILEPRO_TLS_IE_LOAD,        R_TILEPRO_TLS_IE_LOAD)
+
   TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD,    R_TILEPRO_IMM16_X0_TLS_GD)
   TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD,    R_TILEPRO_IMM16_X1_TLS_GD)
   TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO, R_TILEPRO_IMM16_X0_TLS_GD_LO)
@@ -612,6 +662,15 @@ static const reloc_map tilepro_reloc_map [] =
   TH_REMAP (BFD_RELOC_TILEPRO_TLS_DTPOFF32, R_TILEPRO_TLS_DTPOFF32)
   TH_REMAP (BFD_RELOC_TILEPRO_TLS_TPOFF32,  R_TILEPRO_TLS_TPOFF32)
 
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE,    R_TILEPRO_IMM16_X0_TLS_LE)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE,    R_TILEPRO_IMM16_X1_TLS_LE)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO, R_TILEPRO_IMM16_X0_TLS_LE_LO)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO, R_TILEPRO_IMM16_X1_TLS_LE_LO)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI, R_TILEPRO_IMM16_X0_TLS_LE_HI)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI, R_TILEPRO_IMM16_X1_TLS_LE_HI)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA, R_TILEPRO_IMM16_X0_TLS_LE_HA)
+  TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA, R_TILEPRO_IMM16_X1_TLS_LE_HA)
+
 #undef TH_REMAP
 
   { BFD_RELOC_VTABLE_INHERIT, R_TILEPRO_GNU_VTINHERIT, tilepro_elf_howto_table2 },
@@ -745,7 +804,7 @@ tilepro_info_to_howto_rela (bfd * abfd ATTRIBUTE_UNUSED,
 {
   unsigned int r_type = ELF32_R_TYPE (dst->r_info);
 
-  if (r_type <= (unsigned int) R_TILEPRO_TLS_TPOFF32)
+  if (r_type <= (unsigned int) R_TILEPRO_IMM16_X1_TLS_LE_HA)
     cache_ptr->howto = &tilepro_elf_howto_table [r_type];
   else if (r_type - R_TILEPRO_GNU_VTINHERIT
 	   <= (unsigned int) R_TILEPRO_GNU_VTENTRY)
@@ -845,7 +904,20 @@ static const tilepro_create_func reloc_to_create_func[] =
   create_Imm16_X0,
   create_Imm16_X1,
   create_Imm16_X0,
-  create_Imm16_X1
+  create_Imm16_X1,
+
+  NULL,
+  NULL,
+  NULL,
+
+  create_Imm16_X0,
+  create_Imm16_X1,
+  create_Imm16_X0,
+  create_Imm16_X1,
+  create_Imm16_X0,
+  create_Imm16_X1,
+  create_Imm16_X0,
+  create_Imm16_X1,
 };
 
 #define NELEMS(a)	((int) (sizeof (a) / sizeof ((a)[0])))
@@ -1152,8 +1224,8 @@ tilepro_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
   struct elf_link_hash_table *htab = elf_hash_table (info);
 
   /* This function may be called more than once.  */
-  s = bfd_get_section_by_name (abfd, ".got");
-  if (s != NULL && (s->flags & SEC_LINKER_CREATED) != 0)
+  s = bfd_get_linker_section (abfd, ".got");
+  if (s != NULL)
     return TRUE;
 
   flags = bed->dynamic_sec_flags;
@@ -1225,9 +1297,9 @@ tilepro_elf_create_dynamic_sections (bfd *dynobj,
   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
     return FALSE;
 
-  htab->sdynbss = bfd_get_section_by_name (dynobj, ".dynbss");
+  htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss");
   if (!info->shared)
-    htab->srelbss = bfd_get_section_by_name (dynobj, ".rela.bss");
+    htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss");
 
   if (!htab->elf.splt || !htab->elf.srelplt || !htab->sdynbss
       || (!info->shared && !htab->srelbss))
@@ -1288,6 +1360,99 @@ tilepro_elf_copy_indirect_symbol (struct bfd_link_info *info,
   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
 }
 
+static int
+tilepro_tls_translate_to_le (int r_type)
+{
+  switch (r_type)
+    {
+    case R_TILEPRO_IMM16_X0_TLS_GD:
+    case R_TILEPRO_IMM16_X0_TLS_IE:
+      return R_TILEPRO_IMM16_X0_TLS_LE;
+
+    case R_TILEPRO_IMM16_X1_TLS_GD:
+    case R_TILEPRO_IMM16_X1_TLS_IE:
+      return R_TILEPRO_IMM16_X1_TLS_LE;
+
+    case R_TILEPRO_IMM16_X0_TLS_GD_LO:
+    case R_TILEPRO_IMM16_X0_TLS_IE_LO:
+      return R_TILEPRO_IMM16_X0_TLS_LE_LO;
+
+    case R_TILEPRO_IMM16_X1_TLS_GD_LO:
+    case R_TILEPRO_IMM16_X1_TLS_IE_LO:
+      return R_TILEPRO_IMM16_X1_TLS_LE_LO;
+
+    case R_TILEPRO_IMM16_X0_TLS_GD_HI:
+    case R_TILEPRO_IMM16_X0_TLS_IE_HI:
+      return R_TILEPRO_IMM16_X0_TLS_LE_HI;
+
+    case R_TILEPRO_IMM16_X1_TLS_GD_HI:
+    case R_TILEPRO_IMM16_X1_TLS_IE_HI:
+      return R_TILEPRO_IMM16_X1_TLS_LE_HI;
+
+    case R_TILEPRO_IMM16_X0_TLS_GD_HA:
+    case R_TILEPRO_IMM16_X0_TLS_IE_HA:
+      return R_TILEPRO_IMM16_X0_TLS_LE_HA;
+
+    case R_TILEPRO_IMM16_X1_TLS_GD_HA:
+    case R_TILEPRO_IMM16_X1_TLS_IE_HA:
+      return R_TILEPRO_IMM16_X1_TLS_LE_HA;
+    }
+  return r_type;
+}
+
+static int
+tilepro_tls_translate_to_ie (int r_type)
+{
+  switch (r_type)
+    {
+    case R_TILEPRO_IMM16_X0_TLS_GD:
+    case R_TILEPRO_IMM16_X0_TLS_IE:
+      return R_TILEPRO_IMM16_X0_TLS_IE;
+
+    case R_TILEPRO_IMM16_X1_TLS_GD:
+    case R_TILEPRO_IMM16_X1_TLS_IE:
+      return R_TILEPRO_IMM16_X1_TLS_IE;
+
+    case R_TILEPRO_IMM16_X0_TLS_GD_LO:
+    case R_TILEPRO_IMM16_X0_TLS_IE_LO:
+      return R_TILEPRO_IMM16_X0_TLS_IE_LO;
+
+    case R_TILEPRO_IMM16_X1_TLS_GD_LO:
+    case R_TILEPRO_IMM16_X1_TLS_IE_LO:
+      return R_TILEPRO_IMM16_X1_TLS_IE_LO;
+
+    case R_TILEPRO_IMM16_X0_TLS_GD_HI:
+    case R_TILEPRO_IMM16_X0_TLS_IE_HI:
+      return R_TILEPRO_IMM16_X0_TLS_IE_HI;
+
+    case R_TILEPRO_IMM16_X1_TLS_GD_HI:
+    case R_TILEPRO_IMM16_X1_TLS_IE_HI:
+      return R_TILEPRO_IMM16_X1_TLS_IE_HI;
+
+    case R_TILEPRO_IMM16_X0_TLS_GD_HA:
+    case R_TILEPRO_IMM16_X0_TLS_IE_HA:
+      return R_TILEPRO_IMM16_X0_TLS_IE_HA;
+
+    case R_TILEPRO_IMM16_X1_TLS_GD_HA:
+    case R_TILEPRO_IMM16_X1_TLS_IE_HA:
+      return R_TILEPRO_IMM16_X1_TLS_IE_HA;
+    }
+  return r_type;
+}
+
+static int
+tilepro_elf_tls_transition (struct bfd_link_info *info, int r_type,
+			    int is_local)
+{
+  if (info->shared)
+    return r_type;
+
+  if (is_local)
+    return tilepro_tls_translate_to_le (r_type);
+  else
+    return tilepro_tls_translate_to_ie (r_type);
+}
+
 /* Look through the relocs for a section during the first phase, and
    allocate space in the global offset table or procedure linkage
    table.  */
@@ -1348,8 +1513,21 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
 	}
 
+      r_type = tilepro_elf_tls_transition (info, r_type, h == NULL);
       switch (r_type)
 	{
+        case R_TILEPRO_IMM16_X0_TLS_LE:
+        case R_TILEPRO_IMM16_X1_TLS_LE:
+        case R_TILEPRO_IMM16_X0_TLS_LE_LO:
+        case R_TILEPRO_IMM16_X1_TLS_LE_LO:
+        case R_TILEPRO_IMM16_X0_TLS_LE_HI:
+        case R_TILEPRO_IMM16_X1_TLS_LE_HI:
+        case R_TILEPRO_IMM16_X0_TLS_LE_HA:
+        case R_TILEPRO_IMM16_X1_TLS_LE_HA:
+	  if (info->shared)
+	    goto r_tilepro_plt32;
+	  break;
+
         case R_TILEPRO_IMM16_X0_TLS_GD:
         case R_TILEPRO_IMM16_X1_TLS_GD:
         case R_TILEPRO_IMM16_X0_TLS_GD_LO:
@@ -1358,7 +1536,8 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
         case R_TILEPRO_IMM16_X1_TLS_GD_HI:
         case R_TILEPRO_IMM16_X0_TLS_GD_HA:
         case R_TILEPRO_IMM16_X1_TLS_GD_HA:
-          tls_type = GOT_TLS_GD;
+	  BFD_ASSERT (info->shared);
+	  tls_type = GOT_TLS_GD;
           goto have_got_reference;
 
         case R_TILEPRO_IMM16_X0_TLS_IE:
@@ -1454,6 +1633,24 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 	    }
 	  break;
 
+	case R_TILEPRO_TLS_GD_CALL:
+	  if (info->shared)
+	    {
+	      /* These are basically R_TILEPRO_JOFFLONG_X1_PLT relocs
+		 against __tls_get_addr.  */
+	      struct bfd_link_hash_entry *bh = NULL;
+	      if (! _bfd_generic_link_add_one_symbol (info, abfd,
+						      "__tls_get_addr", 0,
+						      bfd_und_section_ptr, 0,
+						      NULL, FALSE, FALSE,
+						      &bh))
+		return FALSE;
+	      h = (struct elf_link_hash_entry *) bh;
+	    }
+	  else
+	    break;
+	  /* Fall through */
+
         case R_TILEPRO_JOFFLONG_X1_PLT:
 	  /* This symbol requires a procedure linkage table entry.  We
 	     actually build the entry in adjust_dynamic_symbol,
@@ -1523,15 +1720,14 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
         case R_TILEPRO_SHAMT_Y0:
         case R_TILEPRO_SHAMT_Y1:
 	  if (h != NULL)
-            {
               h->non_got_ref = 1;
 
-              if (!info->shared)
-                {
-                  /* We may need a .plt entry if the function this reloc
-                     refers to is in a shared lib.  */
-                  h->plt.refcount += 1;
-                }
+	r_tilepro_plt32:
+	  if (h != NULL && !info->shared)
+	    {
+	      /* We may need a .plt entry if the function this reloc
+		 refers to is in a shared lib.  */
+	      h->plt.refcount += 1;
             }
 
 	  /* If we are creating a shared library, and this is a reloc
@@ -1725,6 +1921,7 @@ tilepro_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
 	}
 
       r_type = ELF32_R_TYPE (rel->r_info);
+      r_type = tilepro_elf_tls_transition (info, r_type, h != NULL);
       switch (r_type)
 	{
         case R_TILEPRO_IMM16_X0_GOT:
@@ -1758,7 +1955,8 @@ tilepro_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
 	    }
 	  else
 	    {
-	      if (local_got_refcounts[r_symndx] > 0)
+	      if (local_got_refcounts &&
+		  local_got_refcounts[r_symndx] > 0)
 		local_got_refcounts[r_symndx]--;
 	    }
 	  break;
@@ -1935,13 +2133,6 @@ tilepro_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
       return TRUE;
     }
 
-  if (h->size == 0)
-    {
-      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
-			     h->root.root.string);
-      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
@@ -1956,7 +2147,7 @@ tilepro_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
      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)
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
       htab->srelbss->size += TILEPRO_ELF_RELA_BYTES;
       h->needs_copy = 1;
@@ -2040,7 +2231,14 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
       h->needs_plt = 0;
     }
 
-  if (h->got.refcount > 0)
+  /* If a TLS_IE symbol is now local to the binary, make it a TLS_LE
+     requiring no TLS entry.  */
+  if (h->got.refcount > 0
+      && !info->shared
+      && h->dynindx == -1
+      && tilepro_elf_hash_entry(h)->tls_type == GOT_TLS_IE)
+    h->got.offset = (bfd_vma) -1;
+  else if (h->got.refcount > 0)
     {
       asection *s;
       bfd_boolean dyn;
@@ -2229,7 +2427,7 @@ tilepro_elf_size_dynamic_sections (bfd *output_bfd,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  BFD_ASSERT (s != NULL);
 	  s->size = sizeof ELF32_DYNAMIC_INTERPRETER;
 	  s->contents = (unsigned char *) ELF32_DYNAMIC_INTERPRETER;
@@ -2467,6 +2665,87 @@ tpoff (struct bfd_link_info *info, bfd_vma address)
   return (address - htab->tls_sec->vma);
 }
 
+/* Replace the MASK bits in ADDR with those in INSN, for the next
+   TILEPRO_BUNDLE_SIZE_IN_BYTES bytes.  */
+
+static void
+tilepro_replace_insn (bfd_byte *addr, const bfd_byte *mask,
+		      const bfd_byte *insn)
+{
+  int i;
+  for (i = 0; i < TILEPRO_BUNDLE_SIZE_IN_BYTES; i++)
+    {
+      addr[i] = (addr[i] & ~mask[i]) | (insn[i] & mask[i]);
+    }
+}
+
+/* Mask to extract the bits corresponding to an instruction in a
+   specific pipe of a bundle.  */
+static const bfd_byte insn_mask_X1[] = {
+  0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x7f
+};
+
+/* Mask to extract the bits corresponding to an instruction in a
+   specific pipe of a bundle, minus the destination operand and the
+   first source operand.  */
+static const bfd_byte insn_mask_X0_no_dest_no_srca[] = {
+  0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00
+};
+
+static const bfd_byte insn_mask_X1_no_dest_no_srca[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x7f
+};
+
+static const bfd_byte insn_mask_Y0_no_dest_no_srca[] = {
+  0x00, 0xf0, 0x0f, 0x78, 0x00, 0x00, 0x00, 0x00
+};
+
+static const bfd_byte insn_mask_Y1_no_dest_no_srca[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0x78
+};
+
+/* Mask to extract the first source operand of an instruction.  */
+static const bfd_byte srca_mask_X0[] = {
+  0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const bfd_byte srca_mask_X1[] = {
+  0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00
+};
+
+/* Various instructions synthesized to support tls references.  */
+
+/* move r0, r0 in the X1 pipe, used for tls le.  */
+static const bfd_byte insn_tls_le_move_X1[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x33, 0x08
+};
+
+/* move r0, zero in the X0 and X1 pipe, used for tls le.  */
+static const bfd_byte insn_tls_le_move_zero_X0X1[] = {
+  0xc0, 0xff, 0xcf, 0x00, 0xe0, 0xff, 0x33, 0x08
+};
+
+/* lw r0, r0 in the X1 pipe, used for tls ie.  */
+static const bfd_byte insn_tls_ie_lw_X1[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0b, 0x40
+};
+
+/* add r0, r0, tp in various pipes, used for tls ie.  */
+static const bfd_byte insn_tls_ie_add_X0X1[] = {
+  0x00, 0x50, 0x0f, 0x00, 0x00, 0xa8, 0x07, 0x08
+};
+static const bfd_byte insn_tls_ie_add_Y0Y1[] = {
+  0x00, 0x50, 0x03, 0x08, 0x00, 0xa8, 0x01, 0x8c
+};
+
+/* move r0, r0 in various pipes, used for tls gd.  */
+static const bfd_byte insn_tls_gd_add_X0X1[] = {
+  0x00, 0xf0, 0xcf, 0x00, 0x00, 0xf8, 0x33, 0x08
+};
+static const bfd_byte insn_tls_gd_add_Y0Y1[] = {
+  0x00, 0xf0, 0x0b, 0x18, 0x00, 0xf8, 0x05, 0x9c
+};
+
 /* Relocate an TILEPRO ELF section.
 
    The RELOCATE_SECTION function is called by the new ELF backend linker
@@ -2531,6 +2810,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
   for (; rel < relend; rel++)
     {
       int r_type, tls_type;
+      bfd_boolean is_tls_iele, is_tls_le;
       reloc_howto_type *howto;
       unsigned long r_symndx;
       struct elf_link_hash_entry *h;
@@ -2594,9 +2874,9 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 	    }
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -2613,6 +2893,118 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 
       switch (r_type)
 	{
+	case R_TILEPRO_TLS_GD_CALL:
+	case R_TILEPRO_IMM8_X0_TLS_GD_ADD:
+	case R_TILEPRO_IMM8_Y0_TLS_GD_ADD:
+	case R_TILEPRO_IMM8_X1_TLS_GD_ADD:
+	case R_TILEPRO_IMM8_Y1_TLS_GD_ADD:
+	case R_TILEPRO_IMM16_X0_TLS_GD_HA:
+	case R_TILEPRO_IMM16_X1_TLS_GD_HA:
+	case R_TILEPRO_IMM16_X0_TLS_IE_HA:
+	case R_TILEPRO_IMM16_X1_TLS_IE_HA:
+	  tls_type = GOT_UNKNOWN;
+	  if (h == NULL && local_got_offsets)
+	    tls_type =
+	      _bfd_tilepro_elf_local_got_tls_type (input_bfd) [r_symndx];
+	  else if (h != NULL)
+	    tls_type = tilepro_elf_hash_entry(h)->tls_type;
+
+	  is_tls_iele = (! info->shared || tls_type == GOT_TLS_IE);
+	  is_tls_le = is_tls_iele && (!info->shared
+				      && (h == NULL || h->dynindx == -1));
+
+	  if (r_type == R_TILEPRO_TLS_GD_CALL)
+	    {
+	      if (is_tls_le)
+		{
+		  /* GD -> LE */
+		  tilepro_replace_insn (contents + rel->r_offset,
+					insn_mask_X1, insn_tls_le_move_X1);
+		  continue;
+		}
+	      else if (is_tls_iele)
+		{
+		  /* GD -> IE */
+		  tilepro_replace_insn (contents + rel->r_offset,
+					insn_mask_X1, insn_tls_ie_lw_X1);
+		  continue;
+		}
+
+	      /* GD -> GD */
+	      h = (struct elf_link_hash_entry *)
+		bfd_link_hash_lookup (info->hash, "__tls_get_addr", FALSE,
+				      FALSE, TRUE);
+	      BFD_ASSERT (h != NULL);
+	      r_type = R_TILEPRO_JOFFLONG_X1_PLT;
+	      howto = tilepro_elf_howto_table + r_type;
+	    }
+	  else if (r_type == R_TILEPRO_IMM16_X0_TLS_GD_HA
+		   || r_type == R_TILEPRO_IMM16_X0_TLS_IE_HA)
+	    {
+	      if (is_tls_le)
+		tilepro_replace_insn (contents + rel->r_offset, srca_mask_X0,
+				      insn_tls_le_move_zero_X0X1);
+	    }
+	  else if (r_type == R_TILEPRO_IMM16_X1_TLS_GD_HA
+		   || r_type == R_TILEPRO_IMM16_X1_TLS_IE_HA)
+	    {
+	      if (is_tls_le)
+		tilepro_replace_insn (contents + rel->r_offset, srca_mask_X1,
+				      insn_tls_le_move_zero_X0X1);
+	    }
+	  else
+	    {
+	      const bfd_byte *mask = NULL;
+	      const bfd_byte *add_insn = NULL;
+
+	      switch (r_type)
+		{
+		case R_TILEPRO_IMM8_X0_TLS_GD_ADD:
+		  add_insn = is_tls_iele ? insn_tls_ie_add_X0X1
+		    : insn_tls_gd_add_X0X1;
+		  mask = insn_mask_X0_no_dest_no_srca;
+		  break;
+		case R_TILEPRO_IMM8_X1_TLS_GD_ADD:
+		  add_insn = is_tls_iele ? insn_tls_ie_add_X0X1
+		    : insn_tls_gd_add_X0X1;
+		  mask = insn_mask_X1_no_dest_no_srca;
+		  break;
+		case R_TILEPRO_IMM8_Y0_TLS_GD_ADD:
+		  add_insn = is_tls_iele ? insn_tls_ie_add_Y0Y1
+		    : insn_tls_gd_add_Y0Y1;
+		  mask = insn_mask_Y0_no_dest_no_srca;
+		  break;
+		case R_TILEPRO_IMM8_Y1_TLS_GD_ADD:
+		  add_insn = is_tls_iele ? insn_tls_ie_add_Y0Y1
+		    : insn_tls_gd_add_Y0Y1;
+		  mask = insn_mask_Y1_no_dest_no_srca;
+		  break;
+		}
+
+	      tilepro_replace_insn (contents + rel->r_offset, mask, add_insn);
+
+	      continue;
+	    }
+	  break;
+	case R_TILEPRO_TLS_IE_LOAD:
+	  if (!info->shared && (h == NULL || h->dynindx == -1))
+	    /* IE -> LE */
+	    tilepro_replace_insn (contents + rel->r_offset,
+				  insn_mask_X1_no_dest_no_srca,
+				  insn_tls_le_move_X1);
+	  else
+	    /* IE -> IE */
+	    tilepro_replace_insn (contents + rel->r_offset,
+				  insn_mask_X1_no_dest_no_srca,
+				  insn_tls_ie_lw_X1);
+	  continue;
+	  break;
+	default:
+	  break;
+	}
+
+      switch (r_type)
+	{
         case R_TILEPRO_IMM16_X0_GOT:
         case R_TILEPRO_IMM16_X1_GOT:
         case R_TILEPRO_IMM16_X0_GOT_LO:
@@ -2908,6 +3300,45 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 	    }
 	  break;
 
+        case R_TILEPRO_IMM16_X0_TLS_LE:
+        case R_TILEPRO_IMM16_X1_TLS_LE:
+        case R_TILEPRO_IMM16_X0_TLS_LE_LO:
+        case R_TILEPRO_IMM16_X1_TLS_LE_LO:
+        case R_TILEPRO_IMM16_X0_TLS_LE_HI:
+        case R_TILEPRO_IMM16_X1_TLS_LE_HI:
+        case R_TILEPRO_IMM16_X0_TLS_LE_HA:
+        case R_TILEPRO_IMM16_X1_TLS_LE_HA:
+	  if (info->shared)
+	    {
+	      Elf_Internal_Rela outrel;
+	      bfd_boolean skip;
+
+	      BFD_ASSERT (sreloc != NULL);
+	      skip = FALSE;
+	      outrel.r_offset =
+		_bfd_elf_section_offset (output_bfd, info, input_section,
+					 rel->r_offset);
+	      if (outrel.r_offset == (bfd_vma) -1)
+		skip = TRUE;
+	      else if (outrel.r_offset == (bfd_vma) -2)
+		skip = TRUE;
+	      outrel.r_offset += (input_section->output_section->vma
+				  + input_section->output_offset);
+	      if (skip)
+		memset (&outrel, 0, sizeof outrel);
+	      else
+		{
+		  outrel.r_info = ELF32_R_INFO (0, r_type);
+		  outrel.r_addend = relocation - dtpoff_base (info)
+				    + rel->r_addend;
+		}
+
+	      tilepro_elf_append_rela_32 (output_bfd, sreloc, &outrel);
+	      continue;
+	    }
+	  relocation = tpoff (info, relocation);
+	  break;
+
         case R_TILEPRO_IMM16_X0_TLS_GD:
         case R_TILEPRO_IMM16_X1_TLS_GD:
         case R_TILEPRO_IMM16_X0_TLS_GD_LO:
@@ -2916,9 +3347,6 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
         case R_TILEPRO_IMM16_X1_TLS_GD_HI:
         case R_TILEPRO_IMM16_X0_TLS_GD_HA:
         case R_TILEPRO_IMM16_X1_TLS_GD_HA:
-          tls_type = GOT_TLS_GD;
-          goto have_tls_reference;
-
         case R_TILEPRO_IMM16_X0_TLS_IE:
         case R_TILEPRO_IMM16_X1_TLS_IE:
         case R_TILEPRO_IMM16_X0_TLS_IE_LO:
@@ -2927,45 +3355,32 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
         case R_TILEPRO_IMM16_X1_TLS_IE_HI:
         case R_TILEPRO_IMM16_X0_TLS_IE_HA:
         case R_TILEPRO_IMM16_X1_TLS_IE_HA:
-          tls_type = GOT_TLS_IE;
-          /* Fall through. */
-
-        have_tls_reference:
+	  r_type = tilepro_elf_tls_transition (info, r_type, h == NULL);
+          tls_type = GOT_UNKNOWN;
 	  if (h == NULL && local_got_offsets)
 	    tls_type
 	      = _bfd_tilepro_elf_local_got_tls_type (input_bfd) [r_symndx];
 	  else if (h != NULL)
 	    {
 	      tls_type = tilepro_elf_hash_entry(h)->tls_type;
+	      if (!info->shared && h->dynindx == -1 && tls_type == GOT_TLS_IE)
+		r_type = tilepro_tls_translate_to_le (r_type);
 	    }
 	  if (tls_type == GOT_TLS_IE)
-	    switch (r_type)
-	      {
-              case R_TILEPRO_IMM16_X0_TLS_GD:
-                r_type = R_TILEPRO_IMM16_X0_TLS_IE;
-                break;
-              case R_TILEPRO_IMM16_X1_TLS_GD:
-                r_type = R_TILEPRO_IMM16_X1_TLS_IE;
-                break;
-              case R_TILEPRO_IMM16_X0_TLS_GD_LO:
-                r_type = R_TILEPRO_IMM16_X0_TLS_IE_LO;
-                break;
-              case R_TILEPRO_IMM16_X1_TLS_GD_LO:
-                r_type = R_TILEPRO_IMM16_X1_TLS_IE_LO;
-                break;
-              case R_TILEPRO_IMM16_X0_TLS_GD_HI:
-                r_type = R_TILEPRO_IMM16_X0_TLS_IE_HI;
-                break;
-              case R_TILEPRO_IMM16_X1_TLS_GD_HI:
-                r_type = R_TILEPRO_IMM16_X1_TLS_IE_HI;
-                break;
-              case R_TILEPRO_IMM16_X0_TLS_GD_HA:
-                r_type = R_TILEPRO_IMM16_X0_TLS_IE_HA;
-                break;
-              case R_TILEPRO_IMM16_X1_TLS_GD_HA:
-                r_type = R_TILEPRO_IMM16_X1_TLS_IE_HA;
-                break;
-	      }
+	    r_type = tilepro_tls_translate_to_ie (r_type);
+
+	  if (r_type == R_TILEPRO_IMM16_X0_TLS_LE
+	      || r_type == R_TILEPRO_IMM16_X1_TLS_LE
+	      || r_type == R_TILEPRO_IMM16_X0_TLS_LE_LO
+	      || r_type == R_TILEPRO_IMM16_X1_TLS_LE_LO
+	      || r_type == R_TILEPRO_IMM16_X0_TLS_LE_HI
+	      || r_type == R_TILEPRO_IMM16_X1_TLS_LE_HI
+	      || r_type == R_TILEPRO_IMM16_X0_TLS_LE_HA
+	      || r_type == R_TILEPRO_IMM16_X1_TLS_LE_HA)
+	    {
+	      relocation = tpoff (info, relocation);
+	      break;
+	    }
 
 	  if (h != NULL)
 	    {
@@ -3360,8 +3775,7 @@ tilepro_elf_finish_dynamic_symbol (bfd *output_bfd,
       /* This symbols needs a copy reloc.  Set it up.  */
       BFD_ASSERT (h->dynindx != -1);
 
-      s = bfd_get_section_by_name (h->root.u.def.section->owner,
-				   ".rela.bss");
+      s = htab->srelbss;
       BFD_ASSERT (s != NULL);
 
       rela.r_offset = (h->root.u.def.value
@@ -3436,14 +3850,14 @@ tilepro_elf_finish_dynamic_sections (bfd *output_bfd,
   BFD_ASSERT (htab != NULL);
   dynobj = htab->elf.dynobj;
 
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
     {
       asection *splt;
       bfd_boolean ret;
 
-      splt = bfd_get_section_by_name (dynobj, ".plt");
+      splt = htab->elf.splt;
       BFD_ASSERT (splt != NULL && sdyn != NULL);
 
       ret = tilepro_finish_dyn (output_bfd, info, dynobj, sdyn, splt);
diff --git a/bfd/elf32-v850.c b/bfd/elf32-v850.c
index 9e6f77d..11fbbb4 100644
--- a/bfd/elf32-v850.c
+++ b/bfd/elf32-v850.c
@@ -1,6 +1,7 @@
 /* V850-specific support for 32-bit ELF
    Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-   2006, 2007, 2008, 2009, 2010, 2011  Free Software Foundation, Inc.
+   2006, 2007, 2008, 2009, 2010, 2011, 2012
+   Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -2093,9 +2094,9 @@ v850_elf_relocate_section (bfd *output_bfd,
 				   unresolved_reloc, warned);
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
diff --git a/bfd/elf32-vax.c b/bfd/elf32-vax.c
index 643381c..84ec972 100644
--- a/bfd/elf32-vax.c
+++ b/bfd/elf32-vax.c
@@ -1,6 +1,6 @@
 /* VAX series support for 32-bit ELF
    Copyright 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-   2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
    Contributed by Matt Thomas <matt at 3am-software.com>.
 
@@ -53,7 +53,7 @@ static bfd_vma elf_vax_plt_sym_val (bfd_vma, const asection *,
 
 static bfd_boolean elf32_vax_set_private_flags (bfd *, flagword);
 static bfd_boolean elf32_vax_merge_private_bfd_data (bfd *, bfd *);
-static bfd_boolean elf32_vax_print_private_bfd_data (bfd *, PTR);
+static bfd_boolean elf32_vax_print_private_bfd_data (bfd *, void *);
 
 static reloc_howto_type howto_table[] = {
   HOWTO (R_VAX_NONE,		/* type */
@@ -423,7 +423,7 @@ static bfd_boolean elf_vax_instantiate_got_entries (struct elf_link_hash_entry *
 #define elf_vax_link_hash_traverse(table, func, info)			\
   (elf_link_hash_traverse						\
    ((table),								\
-    (bfd_boolean (*) (struct elf_link_hash_entry *, PTR)) (func),	\
+    (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),	\
     (info)))
 
 /* Create an entry in an VAX ELF linker hash table.  */
@@ -514,7 +514,7 @@ elf32_vax_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
 
 /* Display the flags field */
 static bfd_boolean
-elf32_vax_print_private_bfd_data (bfd *abfd, PTR ptr)
+elf32_vax_print_private_bfd_data (bfd *abfd, void * ptr)
 {
   FILE *file = (FILE *) ptr;
 
@@ -613,24 +613,23 @@ elf_vax_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
 
 	  if (sgot == NULL)
 	    {
-	      sgot = bfd_get_section_by_name (dynobj, ".got");
+	      sgot = bfd_get_linker_section (dynobj, ".got");
 	      BFD_ASSERT (sgot != NULL);
 	    }
 
 	  if (srelgot == NULL
 	      && (h != NULL || info->shared))
 	    {
-	      srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+	      srelgot = bfd_get_linker_section (dynobj, ".rela.got");
 	      if (srelgot == NULL)
 		{
-		  srelgot = bfd_make_section_with_flags (dynobj,
-							 ".rela.got",
-							 (SEC_ALLOC
-							  | SEC_LOAD
-							  | SEC_HAS_CONTENTS
-							  | SEC_IN_MEMORY
-							  | SEC_LINKER_CREATED
-							  | SEC_READONLY));
+		  flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
+				    | SEC_IN_MEMORY | SEC_LINKER_CREATED
+				    | SEC_READONLY);
+
+		  srelgot = bfd_make_section_anyway_with_flags (dynobj,
+								".rela.got",
+								flags);
 		  if (srelgot == NULL
 		      || !bfd_set_section_alignment (dynobj, srelgot, 2))
 		    return FALSE;
@@ -967,7 +966,7 @@ elf_vax_adjust_dynamic_symbol (info, h)
 	    return FALSE;
 	}
 
-      s = bfd_get_section_by_name (dynobj, ".plt");
+      s = bfd_get_linker_section (dynobj, ".plt");
       BFD_ASSERT (s != NULL);
 
       /* If this is the first .plt entry, make room for the special
@@ -997,13 +996,13 @@ elf_vax_adjust_dynamic_symbol (info, h)
       /* 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");
+      s = bfd_get_linker_section (dynobj, ".got.plt");
       BFD_ASSERT (s != NULL);
       s->size += 4;
 
       /* We also need to make an entry in the .rela.plt section.  */
 
-      s = bfd_get_section_by_name (dynobj, ".rela.plt");
+      s = bfd_get_linker_section (dynobj, ".rela.plt");
       BFD_ASSERT (s != NULL);
       s->size += sizeof (Elf32_External_Rela);
 
@@ -1036,13 +1035,6 @@ elf_vax_adjust_dynamic_symbol (info, h)
   if (info->shared)
     return TRUE;
 
-  if (h->size == 0)
-    {
-      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
-			     h->root.root.string);
-      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
@@ -1053,18 +1045,18 @@ elf_vax_adjust_dynamic_symbol (info, h)
      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");
+  s = bfd_get_linker_section (dynobj, ".dynbss");
   BFD_ASSERT (s != NULL);
 
   /* We must generate a R_VAX_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
      .rela.bss section we are going to use.  */
-  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
       asection *srel;
 
-      srel = bfd_get_section_by_name (dynobj, ".rela.bss");
+      srel = bfd_get_linker_section (dynobj, ".rela.bss");
       BFD_ASSERT (srel != NULL);
       srel->size += sizeof (Elf32_External_Rela);
       h->needs_copy = 1;
@@ -1092,7 +1084,7 @@ elf_vax_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  BFD_ASSERT (s != NULL);
 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
@@ -1105,13 +1097,13 @@ elf_vax_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
 	 not actually use these entries.  Reset the size of .rela.got
 	 and .got, which will cause it to get stripped from the output
 	 file below.  */
-      s = bfd_get_section_by_name (dynobj, ".rela.got");
+      s = bfd_get_linker_section (dynobj, ".rela.got");
       if (s != NULL)
 	s->size = 0;
-      s = bfd_get_section_by_name (dynobj, ".got.plt");
+      s = bfd_get_linker_section (dynobj, ".got.plt");
       if (s != NULL)
 	s->size = 0;
-      s = bfd_get_section_by_name (dynobj, ".got");
+      s = bfd_get_linker_section (dynobj, ".got");
       if (s != NULL)
 	s->size = 0;
     }
@@ -1130,7 +1122,7 @@ elf_vax_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
      instantiate (allocate space for them).  */
   elf_link_hash_traverse (elf_hash_table (info),
 			  elf_vax_instantiate_got_entries,
-			  (PTR) info);
+			  info);
 
   /* The check_relocs and adjust_dynamic_symbol entry points have
      determined the sizes of the various dynamic sections.  Allocate
@@ -1269,7 +1261,7 @@ elf_vax_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
 
 static bfd_boolean
 elf_vax_discard_copies (struct elf_vax_link_hash_entry *h,
-			PTR ignore ATTRIBUTE_UNUSED)
+			void * ignore ATTRIBUTE_UNUSED)
 {
   struct elf_vax_pcrel_relocs_copied *s;
 
@@ -1291,7 +1283,7 @@ elf_vax_discard_copies (struct elf_vax_link_hash_entry *h,
    will be reserved for the symbol.  */
 
 static bfd_boolean
-elf_vax_instantiate_got_entries (struct elf_link_hash_entry *h, PTR infoptr)
+elf_vax_instantiate_got_entries (struct elf_link_hash_entry *h, void * infoptr)
 {
   struct bfd_link_info *info = (struct bfd_link_info *) infoptr;
   bfd *dynobj;
@@ -1306,8 +1298,8 @@ elf_vax_instantiate_got_entries (struct elf_link_hash_entry *h, PTR infoptr)
   if (dynobj == NULL)
     return TRUE;
 
-  sgot = bfd_get_section_by_name (dynobj, ".got");
-  srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+  sgot = bfd_get_linker_section (dynobj, ".got");
+  srelgot = bfd_get_linker_section (dynobj, ".rela.got");
 
   if (!elf_hash_table (info)->dynamic_sections_created
       || (info->shared && info->symbolic)
@@ -1450,9 +1442,9 @@ elf_vax_relocate_section (bfd *output_bfd,
 	    relocation = 0;
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -1477,7 +1469,7 @@ elf_vax_relocate_section (bfd *output_bfd,
 
 	    if (sgot == NULL)
 	      {
-		sgot = bfd_get_section_by_name (dynobj, ".got");
+		sgot = bfd_get_linker_section (dynobj, ".got");
 		BFD_ASSERT (sgot != NULL);
 	      }
 
@@ -1553,13 +1545,13 @@ elf_vax_relocate_section (bfd *output_bfd,
 
 	  if (splt == NULL)
 	    {
-	      splt = bfd_get_section_by_name (dynobj, ".plt");
+	      splt = bfd_get_linker_section (dynobj, ".plt");
 	      BFD_ASSERT (splt != NULL);
 	    }
 
 	  if (sgotplt == NULL)
 	    {
-	      sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
+	      sgotplt = bfd_get_linker_section (dynobj, ".got.plt");
 	      BFD_ASSERT (sgotplt != NULL);
 	    }
 
@@ -1698,14 +1690,12 @@ elf_vax_relocate_section (bfd *output_bfd,
 		    }
 		}
 
-	      if (!strcmp (bfd_get_section_name (input_bfd, input_section),
-			   ".text") != 0 ||
-		  (info->shared
-		   && ELF32_R_TYPE(outrel.r_info) != R_VAX_32
-		   && ELF32_R_TYPE(outrel.r_info) != R_VAX_RELATIVE
-		   && ELF32_R_TYPE(outrel.r_info) != R_VAX_COPY
-		   && ELF32_R_TYPE(outrel.r_info) != R_VAX_JMP_SLOT
-		   && ELF32_R_TYPE(outrel.r_info) != R_VAX_GLOB_DAT))
+	      if ((input_section->flags & SEC_CODE) != 0
+		  || (ELF32_R_TYPE (outrel.r_info) != R_VAX_32
+		      && ELF32_R_TYPE (outrel.r_info) != R_VAX_RELATIVE
+		      && ELF32_R_TYPE (outrel.r_info) != R_VAX_COPY
+		      && ELF32_R_TYPE (outrel.r_info) != R_VAX_JMP_SLOT
+		      && ELF32_R_TYPE (outrel.r_info) != R_VAX_GLOB_DAT))
 		{
 		  if (h != NULL)
 		    (*_bfd_error_handler)
@@ -1817,9 +1807,9 @@ elf_vax_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
 	 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");
+      splt = bfd_get_linker_section (dynobj, ".plt");
+      sgot = bfd_get_linker_section (dynobj, ".got.plt");
+      srela = bfd_get_linker_section (dynobj, ".rela.plt");
       BFD_ASSERT (splt != NULL && sgot != NULL && srela != NULL);
 
       addend = 2 * (h->plt.offset & 1);
@@ -1881,8 +1871,8 @@ elf_vax_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
 
       /* 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");
+      sgot = bfd_get_linker_section (dynobj, ".got");
+      srela = bfd_get_linker_section (dynobj, ".rela.got");
       BFD_ASSERT (sgot != NULL && srela != NULL);
 
       rela.r_offset = (sgot->output_section->vma
@@ -1923,8 +1913,7 @@ elf_vax_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
 		  && (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");
+      s = bfd_get_linker_section (dynobj, ".rela.bss");
       BFD_ASSERT (s != NULL);
 
       rela.r_offset = (h->root.u.def.value
@@ -1955,16 +1944,16 @@ elf_vax_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
 
   dynobj = elf_hash_table (info)->dynobj;
 
-  sgot = bfd_get_section_by_name (dynobj, ".got.plt");
+  sgot = bfd_get_linker_section (dynobj, ".got.plt");
   BFD_ASSERT (sgot != NULL);
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
     {
       asection *splt;
       Elf32_External_Dyn *dyncon, *dynconend;
 
-      splt = bfd_get_section_by_name (dynobj, ".plt");
+      splt = bfd_get_linker_section (dynobj, ".plt");
       BFD_ASSERT (splt != NULL && sdyn != NULL);
 
       dyncon = (Elf32_External_Dyn *) sdyn->contents;
diff --git a/bfd/elf32-xc16x.c b/bfd/elf32-xc16x.c
index 11d9840..b7e0d41 100644
--- a/bfd/elf32-xc16x.c
+++ b/bfd/elf32-xc16x.c
@@ -1,5 +1,5 @@
 /* Infineon XC16X-specific support for 16-bit ELF.
-   Copyright 2006, 2007, 2009, 2010  Free Software Foundation, Inc.
+   Copyright 2006, 2007, 2009, 2010, 2012 Free Software Foundation, Inc.
    Contributed by KPIT Cummins Infosystems 
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -381,7 +381,7 @@ elf32_xc16x_relocate_section (bfd *output_bfd,
 				   unresolved_reloc, warned);
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	{
 	  /* For relocs against symbols from removed linkonce sections,
 	     or sections discarded by a linker script, we just want the
@@ -389,7 +389,7 @@ elf32_xc16x_relocate_section (bfd *output_bfd,
 	  reloc_howto_type *howto;
 	  howto = xc16x_reloc_type_lookup (input_bfd, r_type);
 	  RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					   rel, relend, howto, contents);
+					   rel, 1, relend, howto, 0, contents);
 	}
 
       if (info->relocatable)
diff --git a/bfd/elf32-xgate.c b/bfd/elf32-xgate.c
new file mode 100644
index 0000000..bd62438
--- /dev/null
+++ b/bfd/elf32-xgate.c
@@ -0,0 +1,732 @@
+/* Freescale XGATE-specific support for 32-bit ELF
+   Copyright 2010, 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Sean Keys(skeys at ipdatasys.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 3 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., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "bfdlink.h"
+#include "libbfd.h"
+#include "elf-bfd.h"
+#include "elf32-xgate.h"
+#include "elf/xgate.h"
+#include "opcode/xgate.h"
+#include "libiberty.h"
+
+/* Relocation functions.  */
+static reloc_howto_type *
+bfd_elf32_bfd_reloc_type_lookup (bfd *, bfd_reloc_code_real_type);
+static reloc_howto_type *
+bfd_elf32_bfd_reloc_name_lookup (bfd *, const char *);
+static void
+xgate_info_to_howto_rel (bfd *, arelent *, Elf_Internal_Rela *);
+static bfd_boolean
+xgate_elf_set_mach_from_flags (bfd *);
+static struct bfd_hash_entry *
+stub_hash_newfunc (struct bfd_hash_entry *, struct bfd_hash_table *,
+    const char *);
+static struct bfd_link_hash_table*
+xgate_elf_bfd_link_hash_table_create (bfd *);
+
+/* Use REL instead of RELA to save space */
+#define USE_REL	1
+
+static reloc_howto_type elf_xgate_howto_table[] =
+{
+  /* This reloc does nothing.  */
+  HOWTO (R_XGATE_NONE, /* type */
+	 0, /* rightshift */
+	 2, /* size (0 = byte, 1 = short, 2 = long) */
+	 32, /* bitsize */
+	 FALSE, /* pc_relative */
+	 0, /* bitpos */
+	 complain_overflow_dont,/* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* special_function */
+	 "R_XGATE_NONE", /* name */
+	 FALSE, /* partial_inplace */
+	 0, /* src_mask */
+	 0, /* dst_mask */
+	 FALSE), /* pcrel_offset */
+
+  /* A 8 bit absolute relocation.  */
+  HOWTO (R_XGATE_8, /* type */
+	 0, /* rightshift */
+	 0, /* size (0 = byte, 1 = short, 2 = long) */
+	 8, /* bitsize */
+	 FALSE, /* pc_relative */
+	 0, /* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* special_function */
+	 "R_XGATE_8", /* name */
+	 FALSE, /* partial_inplace */
+	 0x00ff, /* src_mask */
+	 0x00ff, /* dst_mask */
+	 FALSE), /* pcrel_offset */
+
+  /* A 8 bit PC-rel relocation.  */
+  HOWTO (R_XGATE_PCREL_8, /* type */
+	 0, /* rightshift */
+	 0, /* size (0 = byte, 1 = short, 2 = long) */
+	 8, /* bitsize */
+	 TRUE, /* pc_relative */
+	 0, /* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* special_function */
+	 "R_XGATE_PCREL_8", /* name */
+	 FALSE, /* partial_inplace */
+	 0x00ff, /* src_mask */
+	 0x00ff, /* dst_mask */
+	 TRUE), /* pcrel_offset */
+
+  /* A 16 bit absolute relocation.  */
+  HOWTO (R_XGATE_16, /* type */
+	 0, /* rightshift */
+	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 16, /* bitsize */
+	 FALSE, /* pc_relative */
+	 0, /* bitpos */
+	 complain_overflow_dont /*bitfield */, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* special_function */
+	 "R_XGATE_16", /* name */
+	 FALSE, /* partial_inplace */
+	 0x00ff, /* src_mask */
+	 0x00ff, /* dst_mask */
+	 FALSE), /* pcrel_offset */
+
+  /* A 32 bit absolute relocation.  This one is never used for the
+     code relocation.  It's used by gas for -gstabs generation.  */
+  HOWTO (R_XGATE_32, /* type */
+	 0, /* rightshift */
+	 2, /* size (0 = byte, 1 = short, 2 = long) */
+	 32, /* bitsize */
+	 FALSE, /* pc_relative */
+	 0, /* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* special_function */
+	 "R_XGATE_32", /* name */
+	 FALSE, /* partial_inplace */
+	 0xffffffff, /* src_mask */
+	 0xffffffff, /* dst_mask */
+	 FALSE), /* pcrel_offset */
+
+  /* A 16 bit PC-rel relocation.  */
+  HOWTO (R_XGATE_PCREL_16, /* type */
+	 0, /* rightshift */
+	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 16, /* bitsize */
+	 TRUE, /* pc_relative */
+	 0, /* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* special_function */
+	 "R_XGATE_PCREL_16", /* name */
+	 FALSE, /* partial_inplace */
+	 0xffff, /* src_mask */
+	 0xffff, /* dst_mask */
+	 TRUE), /* pcrel_offset */
+
+  /* GNU extension to record C++ vtable hierarchy.  */
+  HOWTO (R_XGATE_GNU_VTINHERIT, /* type */
+	 0, /* rightshift */
+	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 0, /* bitsize */
+	 FALSE, /* pc_relative */
+	 0, /* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 NULL, /* special_function */
+	 "R_XGATE_GNU_VTINHERIT", /* name */
+	 FALSE, /* partial_inplace */
+	 0, /* src_mask */
+	 0, /* dst_mask */
+	 FALSE), /* pcrel_offset */
+
+  /* GNU extension to record C++ vtable member usage.  */
+  HOWTO (R_XGATE_GNU_VTENTRY, /* type */
+	 0, /* rightshift */
+	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 0, /* bitsize */
+	 FALSE, /* pc_relative */
+	 0, /* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 _bfd_elf_rel_vtable_reloc_fn, /* special_function */
+	 "R_XGATE_GNU_VTENTRY", /* name */
+	 FALSE, /* partial_inplace */
+	 0, /* src_mask */
+	 0, /* dst_mask */
+	 FALSE), /* pcrel_offset */
+
+  /* A 24 bit relocation.  */
+  HOWTO (R_XGATE_24, /* type */
+	 0, /* rightshift */
+	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 16, /* bitsize */
+	 FALSE, /* pc_relative */
+	 0, /* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* special_function */
+	 "R_XGATE_IMM8_LO", /* name */
+	 FALSE, /* partial_inplace */
+	 0x00ff, /* src_mask */
+	 0x00ff, /* dst_mask */
+	 FALSE), /* pcrel_offset */
+
+  /* A 16-bit low relocation.  */
+  HOWTO (R_XGATE_LO16, /* type */
+	 8, /* rightshift */
+	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 16, /* bitsize */
+	 FALSE, /* pc_relative */
+	 0, /* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* special_function */
+	 "R_XGATE_IMM8_HI", /* name */
+	 FALSE, /* partial_inplace */
+	 0x00ff, /* src_mask */
+	 0x00ff, /* dst_mask */
+	 FALSE), /* pcrel_offset */
+
+  /* A page relocation.  */
+  HOWTO (R_XGATE_GPAGE, /* type */
+	 0, /* rightshift */
+	 0, /* size (0 = byte, 1 = short, 2 = long) */
+	 8, /* bitsize */
+	 FALSE, /* pc_relative */
+	 0, /* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 xgate_elf_special_reloc,/* special_function */
+	 "R_XGATE_GPAGE", /* name */
+	 FALSE, /* partial_inplace */
+	 0x00ff, /* src_mask */
+	 0x00ff, /* dst_mask */
+	 FALSE), /* pcrel_offset */
+
+  /* A 9 bit absolute relocation.   */
+  HOWTO (R_XGATE_PCREL_9, /* type */
+	 0, /* rightshift */
+	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 9, /* bitsize */
+	 TRUE, /* pc_relative */
+	 0, /* bitpos */
+	 complain_overflow_bitfield, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* special_function */
+	 "R_XGATE_PCREL_9", /* name */
+	 FALSE, /* partial_inplace */
+	 0xffff, /* src_mask */
+	 0xffff, /* dst_mask */
+	 TRUE), /* pcrel_offset */
+
+  /* A 8 bit absolute relocation (upper address).  */
+  HOWTO (R_XGATE_PCREL_10, /* type */
+	 8, /* rightshift */
+	 0, /* size (0 = byte, 1 = short, 2 = long) */
+	 10, /* bitsize */
+	 TRUE, /* pc_relative */
+	 0, /* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* special_function */
+	 "R_XGATE_PCREL_10", /* name */
+	 FALSE, /* partial_inplace */
+	 0x00ff, /* src_mask */
+	 0x00ff, /* dst_mask */
+	 TRUE), /* pcrel_offset */
+
+  /* A 8 bit absolute relocation.  */
+  HOWTO (R_XGATE_IMM8_LO, /* type */
+	 0, /* rightshift */
+	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 16, /* bitsize */
+	 FALSE, /* pc_relative */
+	 0, /* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* special_function */
+	 "R_XGATE_IMM8_LO", /* name */
+	 FALSE, /* partial_inplace */
+	 0xffff, /* src_mask */
+	 0xffff, /* dst_mask */
+	 FALSE), /* pcrel_offset */
+
+  /* A 16 bit absolute relocation (upper address).  */
+  HOWTO (R_XGATE_IMM8_HI, /* type */
+	 8, /* rightshift */
+	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 16, /* bitsize */
+	 FALSE, /* pc_relative */
+	 0, /* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* special_function */
+	 "R_XGATE_IMM8_HI", /* name */
+	 FALSE, /* partial_inplace */
+	 0x00ff, /* src_mask */
+	 0x00ff, /* dst_mask */
+	 FALSE), /* pcrel_offset */
+
+  /* A 3 bit absolute relocation.  */
+  HOWTO (R_XGATE_IMM3, /* type */
+	 8, /* rightshift */
+	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 16, /* bitsize */
+	 FALSE, /* pc_relative */
+	 0, /* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* special_function */
+	 "R_XGATE_IMM3", /* name */
+	 FALSE, /* partial_inplace */
+	 0x00ff, /* src_mask */
+	 0x00ff, /* dst_mask */
+	 FALSE), /* pcrel_offset */
+
+  /* A 4 bit absolute relocation.  */
+  HOWTO (R_XGATE_IMM4, /* type */
+	 8, /* rightshift */
+	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 16, /* bitsize */
+	 FALSE, /* pc_relative */
+	 0, /* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* special_function */
+	 "R_XGATE_IMM4", /* name */
+	 FALSE, /* partial_inplace */
+	 0x00ff, /* src_mask */
+	 0x00ff, /* dst_mask */
+	 FALSE), /* pcrel_offset */
+
+  /* A 5 bit absolute relocation.  */
+  HOWTO (R_XGATE_IMM5, /* type */
+	 8, /* rightshift */
+	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 16, /* bitsize */
+	 FALSE, /* pc_relative */
+	 0, /* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* special_function */
+	 "R_XGATE_IMM5", /* name */
+	 FALSE, /* partial_inplace */
+	 0x00ff, /* src_mask */
+	 0x00ff, /* dst_mask */
+	 FALSE), /* pcrel_offset */
+
+  /* Mark beginning of a jump instruction (any form).  */
+  HOWTO (R_XGATE_RL_JUMP, /* type */
+	 0, /* rightshift */
+	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 0, /* bitsize */
+	 FALSE, /* pc_relative */
+	 0, /* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 xgate_elf_ignore_reloc, /* special_function */
+	 "R_XGATE_RL_JUMP", /* name */
+	 TRUE, /* partial_inplace */
+	 0, /* src_mask */
+	 0, /* dst_mask */
+	 TRUE), /* pcrel_offset */
+
+  /* Mark beginning of Gcc relaxation group instruction.  */
+  HOWTO (R_XGATE_RL_GROUP, /* type */
+	 0, /* rightshift */
+	 1, /* size (0 = byte, 1 = short, 2 = long) */
+	 0, /* bitsize */
+	 FALSE, /* pc_relative */
+	 0, /* bitpos */
+	 complain_overflow_dont, /* complain_on_overflow */
+	 xgate_elf_ignore_reloc, /* special_function */
+	 "R_XGATE_RL_GROUP", /* name */
+	 TRUE, /* partial_inplace */
+	 0, /* src_mask */
+	 0, /* dst_mask */
+	 TRUE), /* pcrel_offset */
+};
+
+/* Map BFD reloc types to XGATE ELF reloc types.  */
+
+struct xgate_reloc_map
+{
+  bfd_reloc_code_real_type bfd_reloc_val;
+  unsigned char elf_reloc_val;
+};
+
+static const struct xgate_reloc_map xgate_reloc_map[] =
+{
+  {BFD_RELOC_NONE, R_XGATE_NONE},
+  {BFD_RELOC_8, R_XGATE_8},
+  {BFD_RELOC_8_PCREL, R_XGATE_PCREL_8},
+  {BFD_RELOC_16_PCREL, R_XGATE_PCREL_16},
+  {BFD_RELOC_16, R_XGATE_16},
+  {BFD_RELOC_32, R_XGATE_32},
+
+  {BFD_RELOC_VTABLE_INHERIT, R_XGATE_GNU_VTINHERIT},
+  {BFD_RELOC_VTABLE_ENTRY, R_XGATE_GNU_VTENTRY},
+
+  {BFD_RELOC_XGATE_LO16, R_XGATE_LO16},
+  {BFD_RELOC_XGATE_GPAGE, R_XGATE_GPAGE},
+  {BFD_RELOC_XGATE_24, R_XGATE_24},
+  {BFD_RELOC_XGATE_PCREL_9, R_XGATE_PCREL_9},
+  {BFD_RELOC_XGATE_PCREL_10,  R_XGATE_PCREL_10},
+  {BFD_RELOC_XGATE_IMM8_LO, R_XGATE_IMM8_LO},
+  {BFD_RELOC_XGATE_IMM8_HI, R_XGATE_IMM8_HI},
+  {BFD_RELOC_XGATE_IMM3, R_XGATE_IMM3},
+  {BFD_RELOC_XGATE_IMM4, R_XGATE_IMM4},
+  {BFD_RELOC_XGATE_IMM5, R_XGATE_IMM5},
+
+  {BFD_RELOC_XGATE_RL_JUMP, R_XGATE_RL_JUMP},
+  {BFD_RELOC_XGATE_RL_GROUP, R_XGATE_RL_GROUP},
+};
+
+static reloc_howto_type *
+bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+				 bfd_reloc_code_real_type code)
+{
+  unsigned int i;
+
+  for (i = 0; i < ARRAY_SIZE (xgate_reloc_map); i++)
+    if (xgate_reloc_map[i].bfd_reloc_val == code)
+      return &elf_xgate_howto_table[xgate_reloc_map[i].elf_reloc_val];
+
+  return NULL;
+}
+
+static reloc_howto_type *
+bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
+{
+  unsigned int i;
+
+  for (i = 0; i < ARRAY_SIZE (elf_xgate_howto_table); i++)
+    if (elf_xgate_howto_table[i].name != NULL
+        && strcasecmp (elf_xgate_howto_table[i].name, r_name) == 0)
+      return &elf_xgate_howto_table[i];
+
+  return NULL;
+}
+
+/* Set the howto pointer for an XGATE ELF reloc.  */
+
+static void
+xgate_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
+			 arelent *cache_ptr,
+			 Elf_Internal_Rela *dst)
+{
+  unsigned int r_type;
+
+  r_type = ELF32_R_TYPE (dst->r_info);
+  BFD_ASSERT(r_type < (unsigned int) R_XGATE_max);
+  cache_ptr->howto = &elf_xgate_howto_table[r_type];
+}
+
+/* Free the derived linker hash table.  */
+
+void
+xgate_elf_bfd_link_hash_table_free (struct bfd_link_hash_table *hash)
+{
+  struct xgate_elf_link_hash_table *ret =
+      (struct xgate_elf_link_hash_table *) hash;
+
+  bfd_hash_table_free (ret->stub_hash_table);
+  free (ret->stub_hash_table);
+  _bfd_generic_link_hash_table_free (hash);
+}
+
+/* Create a XGATE ELF linker hash table.  */
+
+static struct bfd_link_hash_table*
+xgate_elf_bfd_link_hash_table_create (bfd *abfd)
+{
+  struct xgate_elf_link_hash_table *ret;
+  bfd_size_type amt = sizeof(struct xgate_elf_link_hash_table);
+
+  ret = (struct xgate_elf_link_hash_table *) bfd_malloc (amt);
+  if (ret == (struct xgate_elf_link_hash_table *) NULL)
+    return NULL;
+
+  memset (ret, 0, amt);
+  if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
+      _bfd_elf_link_hash_newfunc, sizeof(struct elf_link_hash_entry),
+      XGATE_ELF_DATA))
+    {
+      free (ret);
+      return NULL;
+    }
+
+  /* Init the stub hash table too.  */
+  amt = sizeof(struct bfd_hash_table);
+  ret->stub_hash_table = (struct bfd_hash_table*) bfd_malloc (amt);
+  if (ret->stub_hash_table == NULL)
+    {
+      free (ret);
+      return NULL;
+    }
+
+  if (!bfd_hash_table_init (ret->stub_hash_table, stub_hash_newfunc,
+      sizeof(struct elf32_xgate_stub_hash_entry)))
+    return NULL;
+
+  ret->stub_bfd = NULL;
+  ret->stub_section = 0;
+  ret->add_stub_section = NULL;
+  ret->sym_cache.abfd = NULL;
+
+  return &ret->root.root;
+}
+
+static bfd_boolean
+xgate_elf_set_mach_from_flags (bfd *abfd ATTRIBUTE_UNUSED)
+{
+  return TRUE;
+}
+
+/* Specific sections:
+ - The .page0 is a data section that is mapped in [0x0000..0x00FF].
+   Page0 accesses are faster on the M68HC12.
+ - The .vectors is the section that represents the interrupt
+   vectors.
+ - The .xgate section is starts in 0xE08800 or as xgate sees it 0x0800. */
+static const struct bfd_elf_special_section elf32_xgate_special_sections[] =
+{
+  { STRING_COMMA_LEN (".eeprom"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
+  { STRING_COMMA_LEN (".page0"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
+  { STRING_COMMA_LEN (".softregs"), 0, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
+  { STRING_COMMA_LEN (".vectors"), 0, SHT_PROGBITS, SHF_ALLOC },
+/*{ STRING_COMMA_LEN (".xgate"),    0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
+  TODO finish this implementation */
+  { NULL, 0, 0, 0, 0 }
+};
+
+struct xgate_scan_param
+{
+  struct xgate_page_info* pinfo;
+  bfd_boolean use_memory_banks;
+};
+
+/* Assorted hash table functions.  */
+
+/* Initialize an entry in the stub hash table.  */
+
+static struct bfd_hash_entry *
+stub_hash_newfunc (struct bfd_hash_entry *entry,
+		   struct bfd_hash_table *table ATTRIBUTE_UNUSED,
+		   const char *string ATTRIBUTE_UNUSED)
+{
+  return entry;
+}
+
+/* Hook called by the linker routine which adds symbols from an object
+   file. */
+
+bfd_boolean
+elf32_xgate_add_symbol_hook (bfd *abfd ATTRIBUTE_UNUSED,
+			     struct bfd_link_info *info ATTRIBUTE_UNUSED,
+			     Elf_Internal_Sym *sym,
+			     const char **namep ATTRIBUTE_UNUSED,
+			     flagword *flagsp ATTRIBUTE_UNUSED,
+			     asection **secp ATTRIBUTE_UNUSED,
+			     bfd_vma *valp ATTRIBUTE_UNUSED)
+{
+  /* For some reason the st_target_internal value is not retained
+     after xgate_frob_symbol is called, hence this temp hack.  */
+  sym->st_target_internal = 1;
+  return TRUE;
+}
+
+/* External entry points for sizing and building linker stubs.  */
+
+/* Set up various things so that we can make a list of input sections
+   for each output section included in the link.  Returns -1 on error,
+   0 when no stubs will be needed, and 1 on success.  */
+
+int
+elf32_xgate_setup_section_lists (bfd *output_bfd ATTRIBUTE_UNUSED,
+				 struct bfd_link_info *info ATTRIBUTE_UNUSED)
+{
+  return 1;
+}
+
+/* Determine and set the size of the stub section for a final link.
+   The basic idea here is to examine all the relocations looking for
+   PC-relative calls to a target that is unreachable with any "9-bit PC-REL"
+   instruction.  */
+
+bfd_boolean
+elf32_xgate_size_stubs (bfd *output_bfd ATTRIBUTE_UNUSED,
+			bfd *stub_bfd ATTRIBUTE_UNUSED,
+			struct bfd_link_info *info ATTRIBUTE_UNUSED,
+			asection * (*add_stub_section) (const char*, asection*) ATTRIBUTE_UNUSED)
+{
+  return FALSE;
+}
+
+/* Build all the stubs associated with the current output file.  The
+   stubs are kept in a hash table attached to the main linker hash
+   table.  This function is called via xgateelf_finish in the
+   linker.  */
+
+bfd_boolean
+elf32_xgate_build_stubs (bfd *abfd ATTRIBUTE_UNUSED,
+			 struct bfd_link_info *info ATTRIBUTE_UNUSED)
+{
+  return TRUE;
+}
+
+void
+xgate_elf_get_bank_parameters (struct bfd_link_info *info ATTRIBUTE_UNUSED)
+{
+  return;
+}
+
+/* This function is used for relocs which are only used for relaxing,
+   which the linker should otherwise ignore.  */
+
+bfd_reloc_status_type
+xgate_elf_ignore_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+			arelent *reloc_entry,
+			asymbol *symbol ATTRIBUTE_UNUSED,
+			void *data ATTRIBUTE_UNUSED,
+			asection *input_section,
+			bfd *output_bfd,
+			char **error_message ATTRIBUTE_UNUSED)
+{
+  if (output_bfd != NULL)
+    reloc_entry->address += input_section->output_offset;
+  return bfd_reloc_ok;
+}
+
+bfd_reloc_status_type
+xgate_elf_special_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+			 arelent *reloc_entry ATTRIBUTE_UNUSED,
+			 asymbol *symbol ATTRIBUTE_UNUSED,
+			 void *data ATTRIBUTE_UNUSED,
+			 asection *input_section ATTRIBUTE_UNUSED,
+			 bfd *output_bfd ATTRIBUTE_UNUSED,
+			 char **error_message ATTRIBUTE_UNUSED)
+{
+  abort ();
+}
+
+/* Look through the relocs for a section during the first phase.
+   Since we don't do .gots or .plts, we just need to consider the
+   virtual table relocs for gc.  */
+
+bfd_boolean
+elf32_xgate_check_relocs (bfd *abfd ATTRIBUTE_UNUSED,
+			  struct bfd_link_info *info ATTRIBUTE_UNUSED,
+			  asection *sec ATTRIBUTE_UNUSED,
+			  const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
+{
+  return TRUE;
+}
+
+/* Relocate a XGATE/S12x ELF section.  */
+
+bfd_boolean
+elf32_xgate_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
+			      struct bfd_link_info *info ATTRIBUTE_UNUSED,
+			      bfd *input_bfd ATTRIBUTE_UNUSED,
+			      asection *input_section ATTRIBUTE_UNUSED,
+			      bfd_byte *contents ATTRIBUTE_UNUSED,
+			      Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED,
+			      Elf_Internal_Sym *local_syms ATTRIBUTE_UNUSED,
+			      asection **local_sections ATTRIBUTE_UNUSED)
+{
+  return TRUE;
+}
+
+/* Set and control ELF flags in ELF header.  */
+
+bfd_boolean
+_bfd_xgate_elf_set_private_flags (bfd *abfd ATTRIBUTE_UNUSED,
+				  flagword flags ATTRIBUTE_UNUSED)
+{
+  return TRUE;
+}
+
+/* Merge backend specific data from an object file to the output
+   object file when linking.  */
+
+bfd_boolean
+_bfd_xgate_elf_merge_private_bfd_data (bfd *ibfd ATTRIBUTE_UNUSED,
+				       bfd *obfd ATTRIBUTE_UNUSED)
+{
+  return TRUE;
+}
+
+bfd_boolean
+_bfd_xgate_elf_print_private_bfd_data (bfd *abfd, void *ptr)
+{
+  FILE *file = (FILE *) ptr;
+
+  BFD_ASSERT (abfd != NULL && ptr != NULL);
+
+  /* Print normal ELF private data.  */
+  _bfd_elf_print_private_bfd_data (abfd, ptr);
+
+  /* xgettext:c-format */
+  fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
+
+  if (elf_elfheader (abfd)->e_flags & E_XGATE_I32)
+    fprintf (file, _("[abi=32-bit int, "));
+  else
+    fprintf (file, _("[abi=16-bit int, "));
+
+  if (elf_elfheader (abfd)->e_flags & E_XGATE_F64)
+    fprintf (file, _("64-bit double, "));
+  else
+    fprintf (file, _("32-bit double, "));
+  if (elf_elfheader (abfd)->e_flags & EF_XGATE_MACH)
+    fprintf (file, _("cpu=XGATE]"));
+  else
+    fprintf (file, _("error reading cpu type from elf private data"));
+  fputc ('\n', file);
+
+  return TRUE;
+}
+
+void
+elf32_xgate_post_process_headers (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
+{
+
+}
+
+#define ELF_ARCH                             bfd_arch_xgate
+#define ELF_MACHINE_CODE                     EM_XGATE
+#define ELF_TARGET_ID                        XGATE_ELF_DATA
+
+#define ELF_MAXPAGESIZE                      0x1000
+
+#define TARGET_BIG_SYM                       bfd_elf32_xgate_vec
+#define TARGET_BIG_NAME                      "elf32-xgate"
+
+#define elf_info_to_howto                    0
+#define elf_info_to_howto_rel                xgate_info_to_howto_rel
+#define elf_backend_check_relocs             elf32_xgate_check_relocs
+#define elf_backend_relocate_section         elf32_xgate_relocate_section
+#define elf_backend_object_p                 xgate_elf_set_mach_from_flags
+#define elf_backend_final_write_processing   0
+#define elf_backend_can_gc_sections          1
+#define elf_backend_special_sections         elf32_xgate_special_sections
+#define elf_backend_post_process_headers     elf32_xgate_post_process_headers
+#define elf_backend_add_symbol_hook          elf32_xgate_add_symbol_hook
+
+#define bfd_elf32_bfd_link_hash_table_create xgate_elf_bfd_link_hash_table_create
+#define bfd_elf32_bfd_link_hash_table_free   xgate_elf_bfd_link_hash_table_free
+#define bfd_elf32_bfd_merge_private_bfd_data _bfd_xgate_elf_merge_private_bfd_data
+#define bfd_elf32_bfd_set_private_flags      _bfd_xgate_elf_set_private_flags
+#define bfd_elf32_bfd_print_private_bfd_data _bfd_xgate_elf_print_private_bfd_data
+
+#define xgate_stub_hash_lookup(table, string, create, copy)	\
+    ((struct elf32_xgate_stub_hash_entry *) \
+        bfd_hash_lookup ((table), (string), (create), (copy)))
+
+#include "elf32-target.h"
diff --git a/bfd/elf32-xgate.h b/bfd/elf32-xgate.h
new file mode 100644
index 0000000..7ecdf12
--- /dev/null
+++ b/bfd/elf32-xgate.h
@@ -0,0 +1,144 @@
+/* Freescale XGATE-specific support for 32-bit ELF
+   Copyright 2012 Free Software Foundation, Inc.
+
+   Contributed by Sean Keys (skeys at ipdatasys.com)
+   (Heavily copied from the HC11 port by Stephane Carrez (stcarrez at nerim.fr))
+
+   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 3 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., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+#ifndef _ELF32_XGATE_H
+#define _ELF32_XGATE_H
+
+#include "elf-bfd.h"
+#include "bfdlink.h"
+#include "elf/xgate.h"
+
+/* Set and control ELF flags in ELF header.  */
+extern bfd_boolean _bfd_xgate_elf_merge_private_bfd_data (bfd*,bfd*);
+extern bfd_boolean _bfd_xgate_elf_set_private_flags (bfd*,flagword);
+extern bfd_boolean _bfd_xgate_elf_print_private_bfd_data (bfd*, void*);
+
+struct elf32_xgate_stub_hash_entry
+{
+  /* Base hash table entry structure.  */
+  struct bfd_hash_entry root;
+
+  /* The stub section.  */
+  asection *stub_sec;
+
+  /* Offset within stub_sec of the beginning of this stub.  */
+  bfd_vma stub_offset;
+
+  /* Given the symbol's value and its section we can determine its final
+     value when building the stubs (so the stub knows where to jump.  */
+  bfd_vma target_value;
+  asection *target_section;
+};
+
+struct xgate_page_info
+{
+  bfd_vma bank_virtual;
+  bfd_vma bank_physical;
+  bfd_vma bank_physical_end;
+  bfd_vma bank_mask;
+  bfd_vma bank_size;
+  int bank_shift;
+  int bank_param_initialized;
+  bfd_vma trampoline_addr;
+};
+
+struct xgate_elf_link_hash_table
+{
+  struct elf_link_hash_table root;
+  struct xgate_page_info pinfo;
+
+  /* The stub hash table.  */
+  struct bfd_hash_table* stub_hash_table;
+
+  /* Linker stub bfd.  */
+  bfd *stub_bfd;
+
+  asection* stub_section;
+  asection* tramp_section;
+
+  /* Linker call-backs.  */
+  asection * (*add_stub_section) (const char *, asection *);
+
+  /* Assorted information used by elf32_hppa_size_stubs.  */
+  unsigned int bfd_count;
+  int          top_index;
+  asection **  input_list;
+
+  /* Small local sym cache.  */
+  struct sym_cache sym_cache;
+
+  bfd_boolean (*size_one_stub) (struct bfd_hash_entry*, void*);
+  bfd_boolean (*build_one_stub) (struct bfd_hash_entry*, void*);
+};
+
+/* Get the XGate ELF linker hash table from a link_info structure.  */
+
+#define xgate_elf_hash_table(p) \
+  ((struct xgate_elf_link_hash_table *) ((p)->hash))
+
+/* Create a XGATE ELF linker hash table.  */
+
+extern struct xgate_elf_link_hash_table* xgate_elf_hash_table_create
+  (bfd *);
+extern void xgate_elf_bfd_link_hash_table_free (struct bfd_link_hash_table *);
+
+extern void xgate_elf_get_bank_parameters (struct bfd_link_info *);
+
+/* Return 1 if the address is in banked memory.
+   This can be applied to a virtual address and to a physical address.  */
+extern int xgate_addr_is_banked (struct xgate_page_info *, bfd_vma);
+
+/* Return the physical address seen by the processor, taking
+   into account banked memory.  */
+extern bfd_vma xgate_phys_addr (struct xgate_page_info *, bfd_vma);
+
+/* Return the page number corresponding to an address in banked memory.  */
+extern bfd_vma xgate_phys_page (struct xgate_page_info *, bfd_vma);
+
+bfd_reloc_status_type xgate_elf_ignore_reloc
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+bfd_reloc_status_type xgate_elf_special_reloc
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+
+bfd_boolean elf32_xgate_check_relocs
+  (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);
+bfd_boolean elf32_xgate_relocate_section
+  (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
+   Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
+
+bfd_boolean elf32_xgate_add_symbol_hook
+  (bfd *, struct bfd_link_info *, Elf_Internal_Sym *, const char **,
+   flagword *, asection **, bfd_vma *);
+
+/* Tweak the OSABI field of the elf header.  */
+extern void elf32_xgate_post_process_headers (bfd *, struct bfd_link_info *);
+
+int elf32_xgate_setup_section_lists (bfd *, struct bfd_link_info *);
+
+bfd_boolean elf32_xgate_size_stubs
+  (bfd *, bfd *, struct bfd_link_info *,
+   asection * (*) (const char *, asection *));
+
+bfd_boolean elf32_xgate_build_stubs (bfd * abfd, struct bfd_link_info *);
+
+#endif /* _ELF32_XGATE_H */
diff --git a/bfd/elf32-xstormy16.c b/bfd/elf32-xstormy16.c
index 6141783..c657b84 100644
--- a/bfd/elf32-xstormy16.c
+++ b/bfd/elf32-xstormy16.c
@@ -1,5 +1,5 @@
 /* Xstormy16-specific support for 32-bit ELF.
-   Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2010, 2011
+   Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -456,18 +456,15 @@ xstormy16_elf_check_relocs (bfd *abfd,
 	    elf_hash_table (info)->dynobj = dynobj = abfd;
 	  if (splt == NULL)
 	    {
-	      splt = bfd_get_section_by_name (dynobj, ".plt");
+	      splt = bfd_get_linker_section (dynobj, ".plt");
 	      if (splt == NULL)
 		{
-		  splt = bfd_make_section_with_flags (dynobj, ".plt",
-						      (SEC_ALLOC
-						       | SEC_LOAD
-						       | SEC_HAS_CONTENTS
-						       | SEC_IN_MEMORY
-						       | SEC_LINKER_CREATED
-						       | SEC_READONLY
-						       | SEC_CODE));
+		  flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
+				    | SEC_IN_MEMORY | SEC_LINKER_CREATED
+				    | SEC_READONLY | SEC_CODE);
 
+		  splt = bfd_make_section_anyway_with_flags (dynobj, ".plt",
+							     flags);
 		  if (splt == NULL
 		      || ! bfd_set_section_alignment (dynobj, splt, 1))
 		    return FALSE;
@@ -719,7 +716,7 @@ xstormy16_elf_always_size_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
   if (dynobj == NULL)
     return TRUE;
 
-  splt = bfd_get_section_by_name (dynobj, ".plt");
+  splt = bfd_get_linker_section (dynobj, ".plt");
   BFD_ASSERT (splt != NULL);
 
   splt->contents = bfd_zalloc (dynobj, splt->size);
@@ -783,7 +780,7 @@ xstormy16_elf_relocate_section (bfd *                   output_bfd ATTRIBUTE_UNU
   dynobj = elf_hash_table (info)->dynobj;
   splt = NULL;
   if (dynobj != NULL)
-    splt = bfd_get_section_by_name (dynobj, ".plt");
+    splt = bfd_get_linker_section (dynobj, ".plt");
 
   for (rel = relocs; rel < relend; rel ++)
     {
@@ -825,9 +822,9 @@ xstormy16_elf_relocate_section (bfd *                   output_bfd ATTRIBUTE_UNU
 				   unresolved_reloc, warned);
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -973,7 +970,7 @@ xstormy16_elf_finish_dynamic_sections (bfd *abfd ATTRIBUTE_UNUSED,
      been filled in.  */
 
   if ((dynobj = elf_hash_table (info)->dynobj) != NULL
-      && (splt = bfd_get_section_by_name (dynobj, ".plt")) != NULL)
+      && (splt = bfd_get_linker_section (dynobj, ".plt")) != NULL)
     {
       bfd_byte *contents = splt->contents;
       unsigned int i, size = splt->size;
diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c
index 877ab6f..2de9480 100644
--- a/bfd/elf32-xtensa.c
+++ b/bfd/elf32-xtensa.c
@@ -1,5 +1,5 @@
 /* Xtensa-specific support for 32-bit ELF.
-   Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -1414,11 +1414,11 @@ elf_xtensa_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
   /* First do all the standard stuff.  */
   if (! _bfd_elf_create_dynamic_sections (dynobj, info))
     return FALSE;
-  htab->splt = bfd_get_section_by_name (dynobj, ".plt");
-  htab->srelplt = bfd_get_section_by_name (dynobj, ".rela.plt");
-  htab->sgot = bfd_get_section_by_name (dynobj, ".got");
-  htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
-  htab->srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+  htab->splt = bfd_get_linker_section (dynobj, ".plt");
+  htab->srelplt = bfd_get_linker_section (dynobj, ".rela.plt");
+  htab->sgot = bfd_get_linker_section (dynobj, ".got");
+  htab->sgotplt = bfd_get_linker_section (dynobj, ".got.plt");
+  htab->srelgot = bfd_get_linker_section (dynobj, ".rela.got");
 
   /* Create any extra PLT sections in case check_relocs has already
      been called on all the non-dynamic input files.  */
@@ -1435,14 +1435,15 @@ elf_xtensa_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
     return FALSE;
 
   /* Create ".got.loc" (literal tables for use by dynamic linker).  */
-  htab->sgotloc = bfd_make_section_with_flags (dynobj, ".got.loc", flags);
+  htab->sgotloc = bfd_make_section_anyway_with_flags (dynobj, ".got.loc",
+						      flags);
   if (htab->sgotloc == NULL
       || ! bfd_set_section_alignment (dynobj, htab->sgotloc, 2))
     return FALSE;
 
   /* Create ".xt.lit.plt" (literal table for ".got.plt*").  */
-  htab->spltlittbl = bfd_make_section_with_flags (dynobj, ".xt.lit.plt",
-						  noalloc_flags);
+  htab->spltlittbl = bfd_make_section_anyway_with_flags (dynobj, ".xt.lit.plt",
+							 noalloc_flags);
   if (htab->spltlittbl == NULL
       || ! bfd_set_section_alignment (dynobj, htab->spltlittbl, 2))
     return FALSE;
@@ -1474,14 +1475,14 @@ add_extra_plt_sections (struct bfd_link_info *info, int count)
 
       sname = (char *) bfd_malloc (10);
       sprintf (sname, ".plt.%u", chunk);
-      s = bfd_make_section_with_flags (dynobj, sname, flags | SEC_CODE);
+      s = bfd_make_section_anyway_with_flags (dynobj, sname, flags | SEC_CODE);
       if (s == NULL
 	  || ! bfd_set_section_alignment (dynobj, s, 2))
 	return FALSE;
 
       sname = (char *) bfd_malloc (14);
       sprintf (sname, ".got.plt.%u", chunk);
-      s = bfd_make_section_with_flags (dynobj, sname, flags);
+      s = bfd_make_section_anyway_with_flags (dynobj, sname, flags);
       if (s == NULL
 	  || ! bfd_set_section_alignment (dynobj, s, 2))
 	return FALSE;
@@ -1636,7 +1637,7 @@ elf_xtensa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  if (s == NULL)
 	    abort ();
 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
@@ -1712,7 +1713,7 @@ elf_xtensa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 	    continue;
 	  for (s = abfd->sections; s != NULL; s = s->next)
 	    {
-	      if (! elf_discarded_section (s)
+	      if (! discarded_section (s)
 		  && xtensa_is_littable_section (s)
 		  && s != spltlittbl)
 		sgotloc->size += s->size;
@@ -2656,9 +2657,9 @@ elf_xtensa_relocate_section (bfd *output_bfd,
 	  sym_type = h->type;
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	{
@@ -3275,7 +3276,7 @@ elf_xtensa_finish_dynamic_sections (bfd *output_bfd,
     return FALSE;
 
   dynobj = elf_hash_table (info)->dynobj;
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
   BFD_ASSERT (sdyn != NULL);
 
   /* Set the first entry in the global offset table to the address of
@@ -8962,9 +8963,9 @@ relax_section (bfd *abfd, asection *sec, struct bfd_link_info *link_info)
 	     that here and adjust things accordingly.  */
 	  if (! elf_xtensa_ignore_discarded_relocs (sec)
 	      && elf_xtensa_action_discarded (sec) == PRETEND
-	      && sec->sec_info_type != ELF_INFO_TYPE_STABS
+	      && sec->sec_info_type != SEC_INFO_TYPE_STABS
 	      && target_sec != NULL
-	      && elf_discarded_section (target_sec))
+	      && discarded_section (target_sec))
 	    {
 	      /* It would be natural to call _bfd_elf_check_kept_section
 		 here, but it's not exported from elflink.c.  It's also a
@@ -10275,7 +10276,7 @@ elf_xtensa_get_plt_section (struct bfd_link_info *info, int chunk)
 
   dynobj = elf_hash_table (info)->dynobj;
   sprintf (plt_name, ".plt.%u", chunk);
-  return bfd_get_section_by_name (dynobj, plt_name);
+  return bfd_get_linker_section (dynobj, plt_name);
 }
 
 
@@ -10296,7 +10297,7 @@ elf_xtensa_get_gotplt_section (struct bfd_link_info *info, int chunk)
 
   dynobj = elf_hash_table (info)->dynobj;
   sprintf (got_name, ".got.plt.%u", chunk);
-  return bfd_get_section_by_name (dynobj, got_name);
+  return bfd_get_linker_section (dynobj, got_name);
 }
 
 
@@ -10675,7 +10676,7 @@ xtensa_callback_required_dependence (bfd *abfd,
 
       /* Find the corresponding ".got.plt*" section.  */
       if (sec->name[4] == '\0')
-	sgotplt = bfd_get_section_by_name (sec->owner, ".got.plt");
+	sgotplt = bfd_get_linker_section (sec->owner, ".got.plt");
       else
 	{
 	  char got_name[14];
@@ -10685,7 +10686,7 @@ xtensa_callback_required_dependence (bfd *abfd,
 	  chunk = strtol (&sec->name[5], NULL, 10);
 
 	  sprintf (got_name, ".got.plt.%u", chunk);
-	  sgotplt = bfd_get_section_by_name (sec->owner, got_name);
+	  sgotplt = bfd_get_linker_section (sec->owner, got_name);
 	}
       BFD_ASSERT (sgotplt);
 
diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c
index 94ea685..40e4bfb 100644
--- a/bfd/elf64-alpha.c
+++ b/bfd/elf64-alpha.c
@@ -1,6 +1,7 @@
 /* Alpha specific support for 64-bit ELF
    Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-   2006, 2007, 2008, 2009, 2010, 2011  Free Software Foundation, Inc.
+   2006, 2007, 2008, 2009, 2010, 2011, 2012
+   Free Software Foundation, Inc.
    Contributed by Richard Henderson <rth at tamu.edu>.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -210,7 +211,7 @@ struct alpha_elf_link_hash_table
 #define alpha_elf_link_hash_traverse(table, func, info)			\
   (elf_link_hash_traverse						\
    (&(table)->root,							\
-    (bfd_boolean (*) (struct elf_link_hash_entry *, PTR)) (func),	\
+    (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),	\
     (info)))
 
 /* Get the Alpha ELF linker hash table from a link_info structure.  */
@@ -356,7 +357,7 @@ elf64_alpha_object_p (bfd *abfd)
 static bfd_reloc_status_type
 elf64_alpha_reloc_nil (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc,
 		       asymbol *sym ATTRIBUTE_UNUSED,
-		       PTR data ATTRIBUTE_UNUSED, asection *sec,
+		       void * data ATTRIBUTE_UNUSED, asection *sec,
 		       bfd *output_bfd, char **error_message ATTRIBUTE_UNUSED)
 {
   if (output_bfd)
@@ -369,7 +370,7 @@ elf64_alpha_reloc_nil (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc,
 static bfd_reloc_status_type
 elf64_alpha_reloc_bad (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc,
 		       asymbol *sym ATTRIBUTE_UNUSED,
-		       PTR data ATTRIBUTE_UNUSED, asection *sec,
+		       void * data ATTRIBUTE_UNUSED, asection *sec,
 		       bfd *output_bfd, char **error_message ATTRIBUTE_UNUSED)
 {
   if (output_bfd)
@@ -421,7 +422,7 @@ elf64_alpha_do_reloc_gpdisp (bfd *abfd, bfd_vma gpdisp, bfd_byte *p_ldah,
 
 static bfd_reloc_status_type
 elf64_alpha_reloc_gpdisp (bfd *abfd, arelent *reloc_entry,
-			  asymbol *sym ATTRIBUTE_UNUSED, PTR data,
+			  asymbol *sym ATTRIBUTE_UNUSED, void * data,
 			  asection *input_section, bfd *output_bfd,
 			  char **err_msg)
 {
@@ -1376,17 +1377,17 @@ elf64_alpha_read_ecoff_info (bfd *abfd, asection *section,
     }
 
   READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
-  READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, PTR);
-  READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, PTR);
-  READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, PTR);
-  READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, PTR);
+  READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
+  READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
+  READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
+  READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
   READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
 	union aux_ext *);
   READ (ss, cbSsOffset, issMax, sizeof (char), char *);
   READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
-  READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, PTR);
-  READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, PTR);
-  READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, PTR);
+  READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
+  READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
+  READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *);
 #undef READ
 
   debug->fdr = NULL;
@@ -1506,7 +1507,7 @@ elf64_alpha_find_nearest_line (bfd *abfd, asection *section, asymbol **symbols,
 	  fraw_end = (fraw_src
 		      + fi->d.symbolic_header.ifdMax * external_fdr_size);
 	  for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
-	    (*swap->swap_fdr_in) (abfd, (PTR) fraw_src, fdr_ptr);
+	    (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
 
 	  elf_tdata (abfd)->find_line_info = fi;
 
@@ -1548,7 +1549,7 @@ struct extsym_info
 };
 
 static bfd_boolean
-elf64_alpha_output_extsym (struct alpha_elf_link_hash_entry *h, PTR data)
+elf64_alpha_output_extsym (struct alpha_elf_link_hash_entry *h, void * data)
 {
   struct extsym_info *einfo = (struct extsym_info *) data;
   bfd_boolean strip;
@@ -2102,7 +2103,7 @@ elf64_alpha_adjust_dynamic_symbol (struct bfd_link_info *info,
     {
       h->needs_plt = TRUE;
 
-      s = bfd_get_section_by_name(dynobj, ".plt");
+      s = bfd_get_linker_section (dynobj, ".plt");
       if (!s && !elf64_alpha_create_dynamic_sections (dynobj, info))
 	return FALSE;
 
@@ -2391,7 +2392,7 @@ elf64_alpha_merge_gots (bfd *a, bfd *b)
 
 static bfd_boolean
 elf64_alpha_calc_got_offsets_for_symbol (struct alpha_elf_link_hash_entry *h,
-					 PTR arg ATTRIBUTE_UNUSED)
+					 void * arg ATTRIBUTE_UNUSED)
 {
   struct alpha_elf_got_entry *gotent;
 
@@ -2543,7 +2544,8 @@ elf64_alpha_size_got_sections (struct bfd_link_info *info)
 }
 
 static bfd_boolean
-elf64_alpha_size_plt_section_1 (struct alpha_elf_link_hash_entry *h, PTR data)
+elf64_alpha_size_plt_section_1 (struct alpha_elf_link_hash_entry *h,
+				void * data)
 {
   asection *splt = (asection *) data;
   struct alpha_elf_got_entry *gotent;
@@ -2588,7 +2590,7 @@ elf64_alpha_size_plt_section (struct bfd_link_info *info)
     return;
 
   dynobj = elf_hash_table(info)->dynobj;
-  splt = bfd_get_section_by_name (dynobj, ".plt");
+  splt = bfd_get_linker_section (dynobj, ".plt");
   if (splt == NULL)
     return;
 
@@ -2598,7 +2600,7 @@ elf64_alpha_size_plt_section (struct bfd_link_info *info)
 				elf64_alpha_size_plt_section_1, splt);
 
   /* Every plt entry requires a JMP_SLOT relocation.  */
-  spltrel = bfd_get_section_by_name (dynobj, ".rela.plt");
+  spltrel = bfd_get_linker_section (dynobj, ".rela.plt");
   entries = 0;
   if (splt->size)
     {
@@ -2614,7 +2616,7 @@ elf64_alpha_size_plt_section (struct bfd_link_info *info)
      entire contents of the .got.plt section.  */
   if (elf64_alpha_use_secureplt)
     {
-      sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
+      sgotplt = bfd_get_linker_section (dynobj, ".got.plt");
       sgotplt->size = entries ? 16 : 0;
     }
 }
@@ -2773,7 +2775,7 @@ elf64_alpha_size_rela_got_1 (struct alpha_elf_link_hash_entry *h,
   if (entries > 0)
     {
       bfd *dynobj = elf_hash_table(info)->dynobj;
-      asection *srel = bfd_get_section_by_name (dynobj, ".rela.got");
+      asection *srel = bfd_get_linker_section (dynobj, ".rela.got");
       BFD_ASSERT (srel != NULL);
       srel->size += sizeof (Elf64_External_Rela) * entries;
     }
@@ -2823,7 +2825,7 @@ elf64_alpha_size_rela_got_section (struct bfd_link_info *info)
     }
 
   dynobj = elf_hash_table(info)->dynobj;
-  srel = bfd_get_section_by_name (dynobj, ".rela.got");
+  srel = bfd_get_linker_section (dynobj, ".rela.got");
   if (!srel)
     {
       BFD_ASSERT (entries == 0);
@@ -2859,7 +2861,7 @@ elf64_alpha_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  BFD_ASSERT (s != NULL);
 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
@@ -3169,7 +3171,7 @@ elf64_alpha_relax_opt_call (struct alpha_relax_info *info, bfd_vma symval)
       else
 	{
 	  tsec_relocs = (_bfd_elf_link_read_relocs
-		         (info->abfd, info->tsec, (PTR) NULL,
+		         (info->abfd, info->tsec, NULL,
 			 (Elf_Internal_Rela *) NULL,
 			 info->link_info->keep_memory));
 	  if (tsec_relocs == NULL)
@@ -3754,7 +3756,7 @@ elf64_alpha_relax_section (bfd *abfd, asection *sec,
 
   /* Load the relocations for this section.  */
   internal_relocs = (_bfd_elf_link_read_relocs
-		     (abfd, sec, (PTR) NULL, (Elf_Internal_Rela *) NULL,
+		     (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
 		      link_info->keep_memory));
   if (internal_relocs == NULL)
     return FALSE;
@@ -4107,10 +4109,10 @@ elf64_alpha_relocate_section_r (bfd *output_bfd ATTRIBUTE_UNUSED,
 	  sec = h->root.u.def.section;
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend,
-					 elf64_alpha_howto_table + r_type,
+					 rel, 1, relend,
+					 elf64_alpha_howto_table + r_type, 0,
 					 contents);
 
       if (sym != NULL && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
@@ -4154,7 +4156,7 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 
   dynobj = elf_hash_table (info)->dynobj;
   if (dynobj)
-    srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+    srelgot = bfd_get_linker_section (dynobj, ".rela.got");
   else
     srelgot = NULL;
 
@@ -4165,7 +4167,7 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 		      (input_bfd, elf_elfheader(input_bfd)->e_shstrndx,
 		       _bfd_elf_single_rel_hdr (input_section)->sh_name));
       BFD_ASSERT(section_name != NULL);
-      srel = bfd_get_section_by_name (dynobj, section_name);
+      srel = bfd_get_linker_section (dynobj, section_name);
     }
   else
     srel = NULL;
@@ -4265,7 +4267,7 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 	     unless it has been done already.  */
 	  if ((sec->flags & SEC_MERGE)
 	      && ELF_ST_TYPE (sym->st_info) == STT_SECTION
-	      && sec->sec_info_type == ELF_INFO_TYPE_MERGE
+	      && sec->sec_info_type == SEC_INFO_TYPE_MERGE
 	      && gotent
 	      && !gotent->reloc_xlated)
 	    {
@@ -4316,9 +4318,9 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 	  gotent = h->got_entries;
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       addend = rel->r_addend;
       value += addend;
@@ -4727,7 +4729,7 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 
 	    if (r_symndx < symtab_hdr->sh_info
 		&& sec != NULL && howto->pc_relative
-		&& elf_discarded_section (sec))
+		&& discarded_section (sec))
 	      break;
 
 	    if (h != NULL)
@@ -4781,9 +4783,9 @@ elf64_alpha_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
 
       BFD_ASSERT (h->dynindx != -1);
 
-      splt = bfd_get_section_by_name (dynobj, ".plt");
+      splt = bfd_get_linker_section (dynobj, ".plt");
       BFD_ASSERT (splt != NULL);
-      srel = bfd_get_section_by_name (dynobj, ".rela.plt");
+      srel = bfd_get_linker_section (dynobj, ".rela.plt");
       BFD_ASSERT (srel != NULL);
 
       for (gotent = ah->got_entries; gotent ; gotent = gotent->next)
@@ -4853,7 +4855,7 @@ elf64_alpha_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info,
       asection *srel;
       struct alpha_elf_got_entry *gotent;
 
-      srel = bfd_get_section_by_name (dynobj, ".rela.got");
+      srel = bfd_get_linker_section (dynobj, ".rela.got");
       BFD_ASSERT (srel != NULL);
 
       for (gotent = ((struct alpha_elf_link_hash_entry *) h)->got_entries;
@@ -4918,7 +4920,7 @@ elf64_alpha_finish_dynamic_sections (bfd *output_bfd,
   asection *sdyn;
 
   dynobj = elf_hash_table (info)->dynobj;
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
     {
@@ -4926,8 +4928,8 @@ elf64_alpha_finish_dynamic_sections (bfd *output_bfd,
       Elf64_External_Dyn *dyncon, *dynconend;
       bfd_vma plt_vma, gotplt_vma;
 
-      splt = bfd_get_section_by_name (dynobj, ".plt");
-      srelaplt = bfd_get_section_by_name (output_bfd, ".rela.plt");
+      splt = bfd_get_linker_section (dynobj, ".plt");
+      srelaplt = bfd_get_linker_section (output_bfd, ".rela.plt");
       BFD_ASSERT (splt != NULL && sdyn != NULL);
 
       plt_vma = splt->output_section->vma + splt->output_offset;
@@ -4935,7 +4937,7 @@ elf64_alpha_finish_dynamic_sections (bfd *output_bfd,
       gotplt_vma = 0;
       if (elf64_alpha_use_secureplt)
 	{
-	  sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
+	  sgotplt = bfd_get_linker_section (dynobj, ".got.plt");
 	  BFD_ASSERT (sgotplt != NULL);
 	  if (sgotplt->size > 0)
 	    gotplt_vma = sgotplt->output_section->vma + sgotplt->output_offset;
@@ -5102,7 +5104,7 @@ elf64_alpha_final_link (bfd *abfd, struct bfd_link_info *info)
 	  debug.external_ext = debug.external_ext_end = NULL;
 
 	  mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
-	  if (mdebug_handle == (PTR) NULL)
+	  if (mdebug_handle == NULL)
 	    return FALSE;
 
 	  if (1)
@@ -5206,7 +5208,7 @@ elf64_alpha_final_link (bfd *abfd, struct bfd_link_info *info)
 		  const char *name;
 		  struct alpha_elf_link_hash_entry *h;
 
-		  (*input_swap->swap_ext_in) (input_bfd, (PTR) eraw_src, &ext);
+		  (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
 		  if (ext.asym.sc == scNil
 		      || ext.asym.sc == scUndefined
 		      || ext.asym.sc == scSUndefined)
@@ -5253,7 +5255,7 @@ elf64_alpha_final_link (bfd *abfd, struct bfd_link_info *info)
 	  einfo.failed = FALSE;
 	  elf_link_hash_traverse (elf_hash_table (info),
 				  elf64_alpha_output_extsym,
-				  (PTR) &einfo);
+				  &einfo);
 	  if (einfo.failed)
 	    return FALSE;
 
diff --git a/bfd/elf64-hppa.c b/bfd/elf64-hppa.c
index 057a92d..62efef3 100644
--- a/bfd/elf64-hppa.c
+++ b/bfd/elf64-hppa.c
@@ -1,6 +1,7 @@
 /* Support for HPPA 64-bit ELF
    1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
-   2010, 2011 Free Software Foundation, Inc.
+   2010, 2011, 2012
+   Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -19,8 +20,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include "alloca-conf.h"
 #include "sysdep.h"
+#include "alloca-conf.h"
 #include "bfd.h"
 #include "libbfd.h"
 #include "elf-bfd.h"
@@ -415,16 +416,16 @@ get_reloc_section (bfd *abfd,
   if (!dynobj)
     hppa_info->root.dynobj = dynobj = abfd;
 
-  srel = bfd_get_section_by_name (dynobj, srel_name);
+  srel = bfd_get_linker_section (dynobj, srel_name);
   if (srel == NULL)
     {
-      srel = bfd_make_section_with_flags (dynobj, srel_name,
-					  (SEC_ALLOC
-					   | SEC_LOAD
-					   | SEC_HAS_CONTENTS
-					   | SEC_IN_MEMORY
-					   | SEC_LINKER_CREATED
-					   | SEC_READONLY));
+      srel = bfd_make_section_anyway_with_flags (dynobj, srel_name,
+						 (SEC_ALLOC
+						  | SEC_LOAD
+						  | SEC_HAS_CONTENTS
+						  | SEC_IN_MEMORY
+						  | SEC_LINKER_CREATED
+						  | SEC_READONLY));
       if (srel == NULL
 	  || !bfd_set_section_alignment (dynobj, srel, 3))
 	return FALSE;
@@ -1156,12 +1157,12 @@ get_opd (bfd *abfd,
       if (!dynobj)
 	hppa_info->root.dynobj = dynobj = abfd;
 
-      opd = bfd_make_section_with_flags (dynobj, ".opd",
-					 (SEC_ALLOC
-					  | SEC_LOAD
-					  | SEC_HAS_CONTENTS
-					  | SEC_IN_MEMORY
-					  | SEC_LINKER_CREATED));
+      opd = bfd_make_section_anyway_with_flags (dynobj, ".opd",
+						(SEC_ALLOC
+						 | SEC_LOAD
+						 | SEC_HAS_CONTENTS
+						 | SEC_IN_MEMORY
+						 | SEC_LINKER_CREATED));
       if (!opd
 	  || !bfd_set_section_alignment (abfd, opd, 3))
 	{
@@ -1192,12 +1193,12 @@ get_plt (bfd *abfd,
       if (!dynobj)
 	hppa_info->root.dynobj = dynobj = abfd;
 
-      plt = bfd_make_section_with_flags (dynobj, ".plt",
-					 (SEC_ALLOC
-					  | SEC_LOAD
-					  | SEC_HAS_CONTENTS
-					  | SEC_IN_MEMORY
-					  | SEC_LINKER_CREATED));
+      plt = bfd_make_section_anyway_with_flags (dynobj, ".plt",
+						(SEC_ALLOC
+						 | SEC_LOAD
+						 | SEC_HAS_CONTENTS
+						 | SEC_IN_MEMORY
+						 | SEC_LINKER_CREATED));
       if (!plt
 	  || !bfd_set_section_alignment (abfd, plt, 3))
 	{
@@ -1228,12 +1229,12 @@ get_dlt (bfd *abfd,
       if (!dynobj)
 	hppa_info->root.dynobj = dynobj = abfd;
 
-      dlt = bfd_make_section_with_flags (dynobj, ".dlt",
-					 (SEC_ALLOC
-					  | SEC_LOAD
-					  | SEC_HAS_CONTENTS
-					  | SEC_IN_MEMORY
-					  | SEC_LINKER_CREATED));
+      dlt = bfd_make_section_anyway_with_flags (dynobj, ".dlt",
+						(SEC_ALLOC
+						 | SEC_LOAD
+						 | SEC_HAS_CONTENTS
+						 | SEC_IN_MEMORY
+						 | SEC_LINKER_CREATED));
       if (!dlt
 	  || !bfd_set_section_alignment (abfd, dlt, 3))
 	{
@@ -1264,12 +1265,12 @@ get_stub (bfd *abfd,
       if (!dynobj)
 	hppa_info->root.dynobj = dynobj = abfd;
 
-      stub = bfd_make_section_with_flags (dynobj, ".stub",
-					  (SEC_ALLOC | SEC_LOAD
-					   | SEC_HAS_CONTENTS
-					   | SEC_IN_MEMORY
-					   | SEC_READONLY
-					   | SEC_LINKER_CREATED));
+      stub = bfd_make_section_anyway_with_flags (dynobj, ".stub",
+						 (SEC_ALLOC | SEC_LOAD
+						  | SEC_HAS_CONTENTS
+						  | SEC_IN_MEMORY
+						  | SEC_READONLY
+						  | SEC_LINKER_CREATED));
       if (!stub
 	  || !bfd_set_section_alignment (abfd, stub, 3))
 	{
@@ -1344,45 +1345,45 @@ elf64_hppa_create_dynamic_sections (bfd *abfd,
   if (! get_opd (abfd, info, hppa_info))
     return FALSE;
 
-  s = bfd_make_section_with_flags (abfd, ".rela.dlt",
-				   (SEC_ALLOC | SEC_LOAD
-				    | SEC_HAS_CONTENTS
-				    | SEC_IN_MEMORY
-				    | SEC_READONLY
-				    | SEC_LINKER_CREATED));
+  s = bfd_make_section_anyway_with_flags (abfd, ".rela.dlt",
+					  (SEC_ALLOC | SEC_LOAD
+					   | SEC_HAS_CONTENTS
+					   | SEC_IN_MEMORY
+					   | SEC_READONLY
+					   | SEC_LINKER_CREATED));
   if (s == NULL
       || !bfd_set_section_alignment (abfd, s, 3))
     return FALSE;
   hppa_info->dlt_rel_sec = s;
 
-  s = bfd_make_section_with_flags (abfd, ".rela.plt",
-				   (SEC_ALLOC | SEC_LOAD
-				    | SEC_HAS_CONTENTS
-				    | SEC_IN_MEMORY
-				    | SEC_READONLY
-				    | SEC_LINKER_CREATED));
+  s = bfd_make_section_anyway_with_flags (abfd, ".rela.plt",
+					  (SEC_ALLOC | SEC_LOAD
+					   | SEC_HAS_CONTENTS
+					   | SEC_IN_MEMORY
+					   | SEC_READONLY
+					   | SEC_LINKER_CREATED));
   if (s == NULL
       || !bfd_set_section_alignment (abfd, s, 3))
     return FALSE;
   hppa_info->plt_rel_sec = s;
 
-  s = bfd_make_section_with_flags (abfd, ".rela.data",
-				   (SEC_ALLOC | SEC_LOAD
-				    | SEC_HAS_CONTENTS
-				    | SEC_IN_MEMORY
-				    | SEC_READONLY
-				    | SEC_LINKER_CREATED));
+  s = bfd_make_section_anyway_with_flags (abfd, ".rela.data",
+					  (SEC_ALLOC | SEC_LOAD
+					   | SEC_HAS_CONTENTS
+					   | SEC_IN_MEMORY
+					   | SEC_READONLY
+					   | SEC_LINKER_CREATED));
   if (s == NULL
       || !bfd_set_section_alignment (abfd, s, 3))
     return FALSE;
   hppa_info->other_rel_sec = s;
 
-  s = bfd_make_section_with_flags (abfd, ".rela.opd",
-				   (SEC_ALLOC | SEC_LOAD
-				    | SEC_HAS_CONTENTS
-				    | SEC_IN_MEMORY
-				    | SEC_READONLY
-				    | SEC_LINKER_CREATED));
+  s = bfd_make_section_anyway_with_flags (abfd, ".rela.opd",
+					  (SEC_ALLOC | SEC_LOAD
+					   | SEC_HAS_CONTENTS
+					   | SEC_IN_MEMORY
+					   | SEC_READONLY
+					   | SEC_LINKER_CREATED));
   if (s == NULL
       || !bfd_set_section_alignment (abfd, s, 3))
     return FALSE;
@@ -1561,7 +1562,7 @@ elf64_hppa_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  sec = bfd_get_section_by_name (dynobj, ".interp");
+	  sec = bfd_get_linker_section (dynobj, ".interp");
 	  BFD_ASSERT (sec != NULL);
 	  sec->size = sizeof ELF_DYNAMIC_INTERPRETER;
 	  sec->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
@@ -1574,7 +1575,7 @@ elf64_hppa_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
 	 not actually use these entries.  Reset the size of .rela.dlt,
 	 which will cause it to get stripped from the output file
 	 below.  */
-      sec = bfd_get_section_by_name (dynobj, ".rela.dlt");
+      sec = bfd_get_linker_section (dynobj, ".rela.dlt");
       if (sec != NULL)
 	sec->size = 0;
     }
@@ -2491,7 +2492,7 @@ elf64_hppa_finish_dynamic_sections (bfd *output_bfd,
 			  elf64_hppa_finalize_dlt,
 			  info);
 
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
     {
@@ -3919,9 +3920,9 @@ elf64_hppa_relocate_section (bfd *output_bfd,
             }
 	}
 
-      if (sym_sec != NULL && elf_discarded_section (sym_sec))
+      if (sym_sec != NULL && discarded_section (sym_sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
diff --git a/bfd/elf64-ia64-vms.c b/bfd/elf64-ia64-vms.c
new file mode 100644
index 0000000..ef78374
--- /dev/null
+++ b/bfd/elf64-ia64-vms.c
@@ -0,0 +1,5604 @@
+/* IA-64 support for OpenVMS
+   Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
+   2008, 2009, 2010, 2012  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 3 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., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+#include "elf-bfd.h"
+#include "opcode/ia64.h"
+#include "elf/ia64.h"
+#include "objalloc.h"
+#include "hashtab.h"
+#include "elfxx-ia64.h"
+#include "vms.h"
+#include "bfdver.h"
+
+/* THE RULES for all the stuff the linker creates --
+
+  GOT		Entries created in response to LTOFF or LTOFF_FPTR
+		relocations.  Dynamic relocs created for dynamic
+		symbols in an application; REL relocs for locals
+		in a shared library.
+
+  FPTR		The canonical function descriptor.  Created for local
+		symbols in applications.  Descriptors for dynamic symbols
+		and local symbols in shared libraries are created by
+		ld.so.  Thus there are no dynamic relocs against these
+		objects.  The FPTR relocs for such _are_ passed through
+		to the dynamic relocation tables.
+
+  FULL_PLT	Created for a PCREL21B relocation against a dynamic symbol.
+		Requires the creation of a PLTOFF entry.  This does not
+		require any dynamic relocations.
+
+  PLTOFF	Created by PLTOFF relocations.  For local symbols, this
+		is an alternate function descriptor, and in shared libraries
+		requires two REL relocations.  Note that this cannot be
+		transformed into an FPTR relocation, since it must be in
+		range of the GP.  For dynamic symbols, this is a function
+		descriptor.  */
+
+typedef struct bfd_hash_entry *(*new_hash_entry_func)
+  (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
+
+/* In dynamically (linker-) created sections, we generally need to keep track
+   of the place a symbol or expression got allocated to. This is done via hash
+   tables that store entries of the following type.  */
+
+struct elf64_ia64_dyn_sym_info
+{
+  /* The addend for which this entry is relevant.  */
+  bfd_vma addend;
+
+  bfd_vma got_offset;
+  bfd_vma fptr_offset;
+  bfd_vma pltoff_offset;
+  bfd_vma plt_offset;
+  bfd_vma plt2_offset;
+
+  /* The symbol table entry, if any, that this was derived from.  */
+  struct elf_link_hash_entry *h;
+
+  /* Used to count non-got, non-plt relocations for delayed sizing
+     of relocation sections.  */
+  struct elf64_ia64_dyn_reloc_entry
+  {
+    struct elf64_ia64_dyn_reloc_entry *next;
+    asection *srel;
+    int type;
+    int count;
+  } *reloc_entries;
+
+  /* TRUE when the section contents have been updated.  */
+  unsigned got_done : 1;
+  unsigned fptr_done : 1;
+  unsigned pltoff_done : 1;
+
+  /* TRUE for the different kinds of linker data we want created.  */
+  unsigned want_got : 1;
+  unsigned want_gotx : 1;
+  unsigned want_fptr : 1;
+  unsigned want_ltoff_fptr : 1;
+  unsigned want_plt : 1;	/* A MIN_PLT entry.  */
+  unsigned want_plt2 : 1;	/* A FULL_PLT.  */
+  unsigned want_pltoff : 1;
+};
+
+struct elf64_ia64_local_hash_entry
+{
+  int id;
+  unsigned int r_sym;
+  /* The number of elements in elf64_ia64_dyn_sym_info array.  */
+  unsigned int count;
+  /* The number of sorted elements in elf64_ia64_dyn_sym_info array.  */
+  unsigned int sorted_count;
+  /* The size of elf64_ia64_dyn_sym_info array.  */
+  unsigned int size;
+  /* The array of elf64_ia64_dyn_sym_info.  */
+  struct elf64_ia64_dyn_sym_info *info;
+
+  /* TRUE if this hash entry's addends was translated for
+     SHF_MERGE optimization.  */
+  unsigned sec_merge_done : 1;
+};
+
+struct elf64_ia64_link_hash_entry
+{
+  struct elf_link_hash_entry root;
+
+  /* Set if this symbol is defined in a shared library.
+     We can't use root.u.def.section->owner as the symbol is an absolute
+     symbol.  */
+  bfd *shl;
+
+  /* The number of elements in elf64_ia64_dyn_sym_info array.  */
+  unsigned int count;
+  /* The number of sorted elements in elf64_ia64_dyn_sym_info array.  */
+  unsigned int sorted_count;
+  /* The size of elf64_ia64_dyn_sym_info array.  */
+  unsigned int size;
+  /* The array of elf64_ia64_dyn_sym_info.  */
+  struct elf64_ia64_dyn_sym_info *info;
+};
+
+struct elf64_ia64_link_hash_table
+{
+  /* The main hash table.  */
+  struct elf_link_hash_table root;
+
+  asection *fptr_sec;		/* Function descriptor table (or NULL).  */
+  asection *rel_fptr_sec;	/* Dynamic relocation section for same.  */
+  asection *pltoff_sec;		/* Private descriptors for plt (or NULL).  */
+  asection *fixups_sec;		/* Fixups section.  */
+  asection *transfer_sec;	/* Transfer vector section.  */
+  asection *note_sec;		/* .note section.  */
+
+  /* There are maybe R_IA64_GPREL22 relocations, including those
+     optimized from R_IA64_LTOFF22X, against non-SHF_IA_64_SHORT
+     sections.  We need to record those sections so that we can choose
+     a proper GP to cover all R_IA64_GPREL22 relocations.  */
+  asection *max_short_sec;	/* Maximum short output section.  */
+  bfd_vma max_short_offset;	/* Maximum short offset.  */
+  asection *min_short_sec;	/* Minimum short output section.  */
+  bfd_vma min_short_offset;	/* Minimum short offset.  */
+
+  htab_t loc_hash_table;
+  void *loc_hash_memory;
+};
+
+struct elf64_ia64_allocate_data
+{
+  struct bfd_link_info *info;
+  bfd_size_type ofs;
+};
+
+#define elf64_ia64_hash_table(p) \
+  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
+  == IA64_ELF_DATA ? ((struct elf64_ia64_link_hash_table *) ((p)->hash)) : NULL)
+
+struct elf64_ia64_vms_obj_tdata
+{
+  struct elf_obj_tdata root;
+
+  /* Ident for shared library.  */
+  bfd_uint64_t ident;
+
+  /* Used only during link: offset in the .fixups section for this bfd.  */
+  bfd_vma fixups_off;
+
+  /* Max number of shared libraries.  */
+  unsigned int needed_count;
+};
+
+#define elf_ia64_vms_tdata(abfd) \
+  ((struct elf64_ia64_vms_obj_tdata *)((abfd)->tdata.any))
+#define elf_ia64_vms_ident(abfd) (elf_ia64_vms_tdata(abfd)->ident)
+
+struct elf64_vms_transfer
+{
+  unsigned char size[4];
+  unsigned char spare[4];
+  unsigned char tfradr1[8];
+  unsigned char tfradr2[8];
+  unsigned char tfradr3[8];
+  unsigned char tfradr4[8];
+  unsigned char tfradr5[8];
+
+  /* Local function descriptor for tfr3.  */
+  unsigned char tfr3_func[8];
+  unsigned char tfr3_gp[8];
+};
+
+typedef struct
+{
+  Elf64_External_Ehdr ehdr;
+  unsigned char vms_needed_count[8];
+} Elf64_External_VMS_Ehdr;
+
+static struct elf64_ia64_dyn_sym_info * get_dyn_sym_info
+  (struct elf64_ia64_link_hash_table *,
+   struct elf_link_hash_entry *,
+   bfd *, const Elf_Internal_Rela *, bfd_boolean);
+static bfd_boolean elf64_ia64_dynamic_symbol_p
+  (struct elf_link_hash_entry *);
+static bfd_boolean elf64_ia64_choose_gp
+  (bfd *, struct bfd_link_info *, bfd_boolean);
+static void elf64_ia64_dyn_sym_traverse
+  (struct elf64_ia64_link_hash_table *,
+   bfd_boolean (*) (struct elf64_ia64_dyn_sym_info *, void *),
+   void *);
+static bfd_boolean allocate_global_data_got
+  (struct elf64_ia64_dyn_sym_info *, void *);
+static bfd_boolean allocate_global_fptr_got
+  (struct elf64_ia64_dyn_sym_info *, void *);
+static bfd_boolean allocate_local_got
+  (struct elf64_ia64_dyn_sym_info *, void *);
+static bfd_boolean allocate_dynrel_entries
+  (struct elf64_ia64_dyn_sym_info *, void *);
+static asection *get_pltoff
+  (bfd *, struct elf64_ia64_link_hash_table *);
+static asection *get_got
+  (bfd *, struct elf64_ia64_link_hash_table *);
+
+
+/* Given a ELF reloc, return the matching HOWTO structure.  */
+
+static void
+elf64_ia64_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+			  arelent *bfd_reloc,
+			  Elf_Internal_Rela *elf_reloc)
+{
+  bfd_reloc->howto
+    = ia64_elf_lookup_howto ((unsigned int) ELF64_R_TYPE (elf_reloc->r_info));
+}
+
+
+#define PLT_FULL_ENTRY_SIZE	(2 * 16)
+
+static const bfd_byte plt_full_entry[PLT_FULL_ENTRY_SIZE] =
+{
+  0x0b, 0x78, 0x00, 0x02, 0x00, 0x24,  /*   [MMI]       addl r15=0,r1;;   */
+  0x00, 0x41, 0x3c, 0x70, 0x29, 0xc0,  /*               ld8.acq r16=[r15],8*/
+  0x01, 0x08, 0x00, 0x84,              /*               mov r14=r1;;      */
+  0x11, 0x08, 0x00, 0x1e, 0x18, 0x10,  /*   [MIB]       ld8 r1=[r15]      */
+  0x60, 0x80, 0x04, 0x80, 0x03, 0x00,  /*               mov b6=r16        */
+  0x60, 0x00, 0x80, 0x00               /*               br.few b6;;       */
+};
+
+static const bfd_byte oor_brl[16] =
+{
+  0x05, 0x00, 0x00, 0x00, 0x01, 0x00,  /*  [MLX]        nop.m 0           */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  /*               brl.sptk.few tgt;;*/
+  0x00, 0x00, 0x00, 0xc0
+};
+
+
+/* These functions do relaxation for IA-64 ELF.  */
+
+/* Rename some of the generic section flags to better document how they
+   are used here.  */
+#define skip_relax_pass_0 sec_flg0
+#define skip_relax_pass_1 sec_flg1
+
+static void
+elf64_ia64_update_short_info (asection *sec, bfd_vma offset,
+			      struct elf64_ia64_link_hash_table *ia64_info)
+{
+  /* Skip ABS and SHF_IA_64_SHORT sections.  */
+  if (sec == bfd_abs_section_ptr
+      || (sec->flags & SEC_SMALL_DATA) != 0)
+    return;
+
+  if (!ia64_info->min_short_sec)
+    {
+      ia64_info->max_short_sec = sec;
+      ia64_info->max_short_offset = offset;
+      ia64_info->min_short_sec = sec;
+      ia64_info->min_short_offset = offset;
+    }
+  else if (sec == ia64_info->max_short_sec
+	   && offset > ia64_info->max_short_offset)
+    ia64_info->max_short_offset = offset;
+  else if (sec == ia64_info->min_short_sec
+	   && offset < ia64_info->min_short_offset)
+    ia64_info->min_short_offset = offset;
+  else if (sec->output_section->vma
+	   > ia64_info->max_short_sec->vma)
+    {
+      ia64_info->max_short_sec = sec;
+      ia64_info->max_short_offset = offset;
+    }
+  else if (sec->output_section->vma
+	   < ia64_info->min_short_sec->vma)
+    {
+      ia64_info->min_short_sec = sec;
+      ia64_info->min_short_offset = offset;
+    }
+}
+
+/* Use a two passes algorithm.  In the first pass, branches are relaxed
+   (which may increase the size of the section).  In the second pass,
+   the other relaxations are done.
+*/
+
+static bfd_boolean
+elf64_ia64_relax_section (bfd *abfd, asection *sec,
+			  struct bfd_link_info *link_info,
+			  bfd_boolean *again)
+{
+  struct one_fixup
+    {
+      struct one_fixup *next;
+      asection *tsec;
+      bfd_vma toff;
+      bfd_vma trampoff;
+    };
+
+  Elf_Internal_Shdr *symtab_hdr;
+  Elf_Internal_Rela *internal_relocs;
+  Elf_Internal_Rela *irel, *irelend;
+  bfd_byte *contents;
+  Elf_Internal_Sym *isymbuf = NULL;
+  struct elf64_ia64_link_hash_table *ia64_info;
+  struct one_fixup *fixups = NULL;
+  bfd_boolean changed_contents = FALSE;
+  bfd_boolean changed_relocs = FALSE;
+  bfd_boolean skip_relax_pass_0 = TRUE;
+  bfd_boolean skip_relax_pass_1 = TRUE;
+  bfd_vma gp = 0;
+
+  /* Assume we're not going to change any sizes, and we'll only need
+     one pass.  */
+  *again = FALSE;
+
+  if (link_info->relocatable)
+    (*link_info->callbacks->einfo)
+      (_("%P%F: --relax and -r may not be used together\n"));
+
+  /* Don't even try to relax for non-ELF outputs.  */
+  if (!is_elf_hash_table (link_info->hash))
+    return FALSE;
+
+  /* Nothing to do if there are no relocations or there is no need for
+     the current pass.  */
+  if ((sec->flags & SEC_RELOC) == 0
+      || sec->reloc_count == 0
+      || (link_info->relax_pass == 0 && sec->skip_relax_pass_0)
+      || (link_info->relax_pass == 1 && sec->skip_relax_pass_1))
+    return TRUE;
+
+  ia64_info = elf64_ia64_hash_table (link_info);
+  if (ia64_info == NULL)
+    return FALSE;
+
+  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+
+  /* Load the relocations for this section.  */
+  internal_relocs = (_bfd_elf_link_read_relocs
+		     (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
+		      link_info->keep_memory));
+  if (internal_relocs == NULL)
+    return FALSE;
+
+  irelend = internal_relocs + sec->reloc_count;
+
+  /* Get the section contents.  */
+  if (elf_section_data (sec)->this_hdr.contents != NULL)
+    contents = elf_section_data (sec)->this_hdr.contents;
+  else
+    {
+      if (!bfd_malloc_and_get_section (abfd, sec, &contents))
+	goto error_return;
+    }
+
+  for (irel = internal_relocs; irel < irelend; irel++)
+    {
+      unsigned long r_type = ELF64_R_TYPE (irel->r_info);
+      bfd_vma symaddr, reladdr, trampoff, toff, roff;
+      asection *tsec;
+      struct one_fixup *f;
+      bfd_size_type amt;
+      bfd_boolean is_branch;
+      struct elf64_ia64_dyn_sym_info *dyn_i;
+
+      switch (r_type)
+	{
+	case R_IA64_PCREL21B:
+	case R_IA64_PCREL21BI:
+	case R_IA64_PCREL21M:
+	case R_IA64_PCREL21F:
+	  /* In pass 1, all br relaxations are done. We can skip it. */
+	  if (link_info->relax_pass == 1)
+	    continue;
+	  skip_relax_pass_0 = FALSE;
+	  is_branch = TRUE;
+	  break;
+
+	case R_IA64_PCREL60B:
+	  /* We can't optimize brl to br in pass 0 since br relaxations
+	     will increase the code size. Defer it to pass 1.  */
+	  if (link_info->relax_pass == 0)
+	    {
+	      skip_relax_pass_1 = FALSE;
+	      continue;
+	    }
+	  is_branch = TRUE;
+	  break;
+
+	case R_IA64_GPREL22:
+	  /* Update max_short_sec/min_short_sec.  */
+
+	case R_IA64_LTOFF22X:
+	case R_IA64_LDXMOV:
+	  /* We can't relax ldx/mov in pass 0 since br relaxations will
+	     increase the code size. Defer it to pass 1.  */
+	  if (link_info->relax_pass == 0)
+	    {
+	      skip_relax_pass_1 = FALSE;
+	      continue;
+	    }
+	  is_branch = FALSE;
+	  break;
+
+	default:
+	  continue;
+	}
+
+      /* Get the value of the symbol referred to by the reloc.  */
+      if (ELF64_R_SYM (irel->r_info) < symtab_hdr->sh_info)
+	{
+	  /* A local symbol.  */
+	  Elf_Internal_Sym *isym;
+
+	  /* Read this BFD's local symbols.  */
+	  if (isymbuf == NULL)
+	    {
+	      isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
+	      if (isymbuf == NULL)
+		isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
+						symtab_hdr->sh_info, 0,
+						NULL, NULL, NULL);
+	      if (isymbuf == 0)
+		goto error_return;
+	    }
+
+	  isym = isymbuf + ELF64_R_SYM (irel->r_info);
+	  if (isym->st_shndx == SHN_UNDEF)
+	    continue;	/* We can't do anything with undefined symbols.  */
+	  else if (isym->st_shndx == SHN_ABS)
+	    tsec = bfd_abs_section_ptr;
+	  else if (isym->st_shndx == SHN_COMMON)
+	    tsec = bfd_com_section_ptr;
+	  else if (isym->st_shndx == SHN_IA_64_ANSI_COMMON)
+	    tsec = bfd_com_section_ptr;
+	  else
+	    tsec = bfd_section_from_elf_index (abfd, isym->st_shndx);
+
+	  toff = isym->st_value;
+	  dyn_i = get_dyn_sym_info (ia64_info, NULL, abfd, irel, FALSE);
+	}
+      else
+	{
+	  unsigned long indx;
+	  struct elf_link_hash_entry *h;
+
+	  indx = ELF64_R_SYM (irel->r_info) - symtab_hdr->sh_info;
+	  h = elf_sym_hashes (abfd)[indx];
+	  BFD_ASSERT (h != NULL);
+
+	  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;
+
+	  dyn_i = get_dyn_sym_info (ia64_info, h, abfd, irel, FALSE);
+
+	  /* For branches to dynamic symbols, we're interested instead
+	     in a branch to the PLT entry.  */
+	  if (is_branch && dyn_i && dyn_i->want_plt2)
+	    {
+	      /* Internal branches shouldn't be sent to the PLT.
+		 Leave this for now and we'll give an error later.  */
+	      if (r_type != R_IA64_PCREL21B)
+		continue;
+
+	      tsec = ia64_info->root.splt;
+	      toff = dyn_i->plt2_offset;
+	      BFD_ASSERT (irel->r_addend == 0);
+	    }
+
+	  /* Can't do anything else with dynamic symbols.  */
+	  else if (elf64_ia64_dynamic_symbol_p (h))
+	    continue;
+
+	  else
+	    {
+	      /* We can't do anything with undefined symbols.  */
+	      if (h->root.type == bfd_link_hash_undefined
+		  || h->root.type == bfd_link_hash_undefweak)
+		continue;
+
+	      tsec = h->root.u.def.section;
+	      toff = h->root.u.def.value;
+	    }
+	}
+
+      toff += irel->r_addend;
+
+      symaddr = tsec->output_section->vma + tsec->output_offset + toff;
+
+      roff = irel->r_offset;
+
+      if (is_branch)
+	{
+	  bfd_signed_vma offset;
+
+	  reladdr = (sec->output_section->vma
+		     + sec->output_offset
+		     + roff) & (bfd_vma) -4;
+
+	  /* The .plt section is aligned at 32byte and the .text section
+	     is aligned at 64byte. The .text section is right after the
+	     .plt section.  After the first relaxation pass, linker may
+	     increase the gap between the .plt and .text sections up
+	     to 32byte.  We assume linker will always insert 32byte
+	     between the .plt and .text sections after the the first
+	     relaxation pass.  */
+	  if (tsec == ia64_info->root.splt)
+	    offset = -0x1000000 + 32;
+	  else
+	    offset = -0x1000000;
+
+	  /* If the branch is in range, no need to do anything.  */
+	  if ((bfd_signed_vma) (symaddr - reladdr) >= offset
+	      && (bfd_signed_vma) (symaddr - reladdr) <= 0x0FFFFF0)
+	    {
+	      /* If the 60-bit branch is in 21-bit range, optimize it. */
+	      if (r_type == R_IA64_PCREL60B)
+		{
+		  ia64_elf_relax_brl (contents, roff);
+
+		  irel->r_info = ELF64_R_INFO (ELF64_R_SYM (irel->r_info),
+                                               R_IA64_PCREL21B);
+
+		  /* If the original relocation offset points to slot
+		     1, change it to slot 2.  */
+		  if ((irel->r_offset & 3) == 1)
+		    irel->r_offset += 1;
+		}
+
+	      continue;
+	    }
+	  else if (r_type == R_IA64_PCREL60B)
+	    continue;
+	  else if (ia64_elf_relax_br (contents, roff))
+	    {
+	      irel->r_info = ELF64_R_INFO (ELF64_R_SYM (irel->r_info),
+                                           R_IA64_PCREL60B);
+
+	      /* Make the relocation offset point to slot 1.  */
+	      irel->r_offset = (irel->r_offset & ~((bfd_vma) 0x3)) + 1;
+	      continue;
+	    }
+
+	  /* We can't put a trampoline in a .init/.fini section. Issue
+	     an error.  */
+	  if (strcmp (sec->output_section->name, ".init") == 0
+	      || strcmp (sec->output_section->name, ".fini") == 0)
+	    {
+	      (*_bfd_error_handler)
+		(_("%B: Can't relax br at 0x%lx in section `%A'. Please use brl or indirect branch."),
+		 sec->owner, sec, (unsigned long) roff);
+	      bfd_set_error (bfd_error_bad_value);
+	      goto error_return;
+	    }
+
+	  /* If the branch and target are in the same section, you've
+	     got one honking big section and we can't help you unless
+	     you are branching backwards.  You'll get an error message
+	     later.  */
+	  if (tsec == sec && toff > roff)
+	    continue;
+
+	  /* Look for an existing fixup to this address.  */
+	  for (f = fixups; f ; f = f->next)
+	    if (f->tsec == tsec && f->toff == toff)
+	      break;
+
+	  if (f == NULL)
+	    {
+	      /* Two alternatives: If it's a branch to a PLT entry, we can
+		 make a copy of the FULL_PLT entry.  Otherwise, we'll have
+		 to use a `brl' insn to get where we're going.  */
+
+	      size_t size;
+
+	      if (tsec == ia64_info->root.splt)
+		size = sizeof (plt_full_entry);
+	      else
+		size = sizeof (oor_brl);
+
+	      /* Resize the current section to make room for the new branch. */
+	      trampoff = (sec->size + 15) & (bfd_vma) -16;
+
+	      /* If trampoline is out of range, there is nothing we
+		 can do.  */
+	      offset = trampoff - (roff & (bfd_vma) -4);
+	      if (offset < -0x1000000 || offset > 0x0FFFFF0)
+		continue;
+
+	      amt = trampoff + size;
+	      contents = (bfd_byte *) bfd_realloc (contents, amt);
+	      if (contents == NULL)
+		goto error_return;
+	      sec->size = amt;
+
+	      if (tsec == ia64_info->root.splt)
+		{
+		  memcpy (contents + trampoff, plt_full_entry, size);
+
+		  /* Hijack the old relocation for use as the PLTOFF reloc.  */
+		  irel->r_info = ELF64_R_INFO (ELF64_R_SYM (irel->r_info),
+					       R_IA64_PLTOFF22);
+		  irel->r_offset = trampoff;
+		}
+	      else
+		{
+                  memcpy (contents + trampoff, oor_brl, size);
+                  irel->r_info = ELF64_R_INFO (ELF64_R_SYM (irel->r_info),
+                                               R_IA64_PCREL60B);
+                  irel->r_offset = trampoff + 2;
+		}
+
+	      /* Record the fixup so we don't do it again this section.  */
+	      f = (struct one_fixup *)
+		bfd_malloc ((bfd_size_type) sizeof (*f));
+	      f->next = fixups;
+	      f->tsec = tsec;
+	      f->toff = toff;
+	      f->trampoff = trampoff;
+	      fixups = f;
+	    }
+	  else
+	    {
+	      /* If trampoline is out of range, there is nothing we
+		 can do.  */
+	      offset = f->trampoff - (roff & (bfd_vma) -4);
+	      if (offset < -0x1000000 || offset > 0x0FFFFF0)
+		continue;
+
+	      /* Nop out the reloc, since we're finalizing things here.  */
+	      irel->r_info = ELF64_R_INFO (0, R_IA64_NONE);
+	    }
+
+	  /* Fix up the existing branch to hit the trampoline.  */
+	  if (ia64_elf_install_value (contents + roff, offset, r_type)
+	      != bfd_reloc_ok)
+	    goto error_return;
+
+	  changed_contents = TRUE;
+	  changed_relocs = TRUE;
+	}
+      else
+	{
+	  /* Fetch the gp.  */
+	  if (gp == 0)
+	    {
+	      bfd *obfd = sec->output_section->owner;
+	      gp = _bfd_get_gp_value (obfd);
+	      if (gp == 0)
+		{
+		  if (!elf64_ia64_choose_gp (obfd, link_info, FALSE))
+		    goto error_return;
+		  gp = _bfd_get_gp_value (obfd);
+		}
+	    }
+
+	  /* If the data is out of range, do nothing.  */
+	  if ((bfd_signed_vma) (symaddr - gp) >= 0x200000
+	      ||(bfd_signed_vma) (symaddr - gp) < -0x200000)
+	    continue;
+
+	  if (r_type == R_IA64_GPREL22)
+	    elf64_ia64_update_short_info (tsec->output_section,
+					  tsec->output_offset + toff,
+					  ia64_info);
+	  else if (r_type == R_IA64_LTOFF22X)
+	    {
+              /* Can't deal yet correctly with ABS symbols.  */
+              if (bfd_is_abs_section (tsec))
+                continue;
+
+	      irel->r_info = ELF64_R_INFO (ELF64_R_SYM (irel->r_info),
+					   R_IA64_GPREL22);
+	      changed_relocs = TRUE;
+
+	      elf64_ia64_update_short_info (tsec->output_section,
+					    tsec->output_offset + toff,
+					    ia64_info);
+	    }
+	  else
+	    {
+	      ia64_elf_relax_ldxmov (contents, roff);
+	      irel->r_info = ELF64_R_INFO (0, R_IA64_NONE);
+	      changed_contents = TRUE;
+	      changed_relocs = TRUE;
+	    }
+	}
+    }
+
+  /* ??? If we created fixups, this may push the code segment large
+     enough that the data segment moves, which will change the GP.
+     Reset the GP so that we re-calculate next round.  We need to
+     do this at the _beginning_ of the next round; now will not do.  */
+
+  /* Clean up and go home.  */
+  while (fixups)
+    {
+      struct one_fixup *f = fixups;
+      fixups = fixups->next;
+      free (f);
+    }
+
+  if (isymbuf != NULL
+      && symtab_hdr->contents != (unsigned char *) isymbuf)
+    {
+      if (! link_info->keep_memory)
+	free (isymbuf);
+      else
+	{
+	  /* Cache the symbols for elf_link_input_bfd.  */
+	  symtab_hdr->contents = (unsigned char *) isymbuf;
+	}
+    }
+
+  if (contents != NULL
+      && elf_section_data (sec)->this_hdr.contents != contents)
+    {
+      if (!changed_contents && !link_info->keep_memory)
+	free (contents);
+      else
+	{
+	  /* Cache the section contents for elf_link_input_bfd.  */
+	  elf_section_data (sec)->this_hdr.contents = contents;
+	}
+    }
+
+  if (elf_section_data (sec)->relocs != internal_relocs)
+    {
+      if (!changed_relocs)
+	free (internal_relocs);
+      else
+	elf_section_data (sec)->relocs = internal_relocs;
+    }
+
+  if (link_info->relax_pass == 0)
+    {
+      /* Pass 0 is only needed to relax br.  */
+      sec->skip_relax_pass_0 = skip_relax_pass_0;
+      sec->skip_relax_pass_1 = skip_relax_pass_1;
+    }
+
+  *again = changed_contents || changed_relocs;
+  return TRUE;
+
+ error_return:
+  if (isymbuf != NULL && (unsigned char *) isymbuf != symtab_hdr->contents)
+    free (isymbuf);
+  if (contents != NULL
+      && elf_section_data (sec)->this_hdr.contents != contents)
+    free (contents);
+  if (internal_relocs != NULL
+      && elf_section_data (sec)->relocs != internal_relocs)
+    free (internal_relocs);
+  return FALSE;
+}
+#undef skip_relax_pass_0
+#undef skip_relax_pass_1
+
+/* Return TRUE if NAME is an unwind table section name.  */
+
+static inline bfd_boolean
+is_unwind_section_name (bfd *abfd ATTRIBUTE_UNUSED, const char *name)
+{
+  return ((CONST_STRNEQ (name, ELF_STRING_ia64_unwind)
+	   && ! CONST_STRNEQ (name, ELF_STRING_ia64_unwind_info))
+	  || CONST_STRNEQ (name, ELF_STRING_ia64_unwind_once));
+}
+
+
+/* Convert IA-64 specific section flags to bfd internal section flags.  */
+
+/* ??? There is no bfd internal flag equivalent to the SHF_IA_64_NORECOV
+   flag.  */
+
+static bfd_boolean
+elf64_ia64_section_flags (flagword *flags,
+			  const Elf_Internal_Shdr *hdr)
+{
+  if (hdr->sh_flags & SHF_IA_64_SHORT)
+    *flags |= SEC_SMALL_DATA;
+
+  return TRUE;
+}
+
+/* Set the correct type for an IA-64 ELF section.  We do this by the
+   section name, which is a hack, but ought to work.  */
+
+static bfd_boolean
+elf64_ia64_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr,
+			  asection *sec)
+{
+  const char *name;
+
+  name = bfd_get_section_name (abfd, sec);
+
+  if (is_unwind_section_name (abfd, name))
+    {
+      /* We don't have the sections numbered at this point, so sh_info
+	 is set later, in elf64_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;
+
+  if (sec->flags & SEC_SMALL_DATA)
+    hdr->sh_flags |= SHF_IA_64_SHORT;
+
+  return TRUE;
+}
+
+/* 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.  */
+
+static bfd_boolean
+elf64_ia64_add_symbol_hook (bfd *abfd,
+			    struct bfd_link_info *info,
+			    Elf_Internal_Sym *sym,
+			    const char **namep ATTRIBUTE_UNUSED,
+			    flagword *flagsp ATTRIBUTE_UNUSED,
+			    asection **secp,
+			    bfd_vma *valp)
+{
+  if (sym->st_shndx == SHN_COMMON
+      && !info->relocatable
+      && sym->st_size <= elf_gp_size (abfd))
+    {
+      /* Common symbols less than or equal to -G nn bytes are
+	 automatically put into .sbss.  */
+
+      asection *scomm = bfd_get_section_by_name (abfd, ".scommon");
+
+      if (scomm == NULL)
+	{
+	  scomm = bfd_make_section_with_flags (abfd, ".scommon",
+					       (SEC_ALLOC
+						| SEC_IS_COMMON
+						| SEC_LINKER_CREATED));
+	  if (scomm == NULL)
+	    return FALSE;
+	}
+
+      *secp = scomm;
+      *valp = sym->st_size;
+    }
+
+  return TRUE;
+}
+
+/* According to the Tahoe assembler spec, all labels starting with a
+   '.' are local.  */
+
+static bfd_boolean
+elf64_ia64_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
+				const char *name)
+{
+  return name[0] == '.';
+}
+
+/* Should we do dynamic things to this symbol?  */
+
+static bfd_boolean
+elf64_ia64_dynamic_symbol_p (struct elf_link_hash_entry *h)
+{
+  return h != NULL && h->def_dynamic;
+}
+
+static struct bfd_hash_entry*
+elf64_ia64_new_elf_hash_entry (struct bfd_hash_entry *entry,
+			       struct bfd_hash_table *table,
+			       const char *string)
+{
+  struct elf64_ia64_link_hash_entry *ret;
+  ret = (struct elf64_ia64_link_hash_entry *) entry;
+
+  /* Allocate the structure if it has not already been allocated by a
+     subclass.  */
+  if (!ret)
+    ret = bfd_hash_allocate (table, sizeof (*ret));
+
+  if (!ret)
+    return 0;
+
+  /* Call the allocation method of the superclass.  */
+  ret = ((struct elf64_ia64_link_hash_entry *)
+	 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
+				     table, string));
+
+  ret->info = NULL;
+  ret->count = 0;
+  ret->sorted_count = 0;
+  ret->size = 0;
+  return (struct bfd_hash_entry *) ret;
+}
+
+static void
+elf64_ia64_hash_hide_symbol (struct bfd_link_info *info,
+			     struct elf_link_hash_entry *xh,
+			     bfd_boolean force_local)
+{
+  struct elf64_ia64_link_hash_entry *h;
+  struct elf64_ia64_dyn_sym_info *dyn_i;
+  unsigned int count;
+
+  h = (struct elf64_ia64_link_hash_entry *)xh;
+
+  _bfd_elf_link_hash_hide_symbol (info, &h->root, force_local);
+
+  for (count = h->count, dyn_i = h->info;
+       count != 0;
+       count--, dyn_i++)
+    {
+      dyn_i->want_plt2 = 0;
+      dyn_i->want_plt = 0;
+    }
+}
+
+/* Compute a hash of a local hash entry.  */
+
+static hashval_t
+elf64_ia64_local_htab_hash (const void *ptr)
+{
+  struct elf64_ia64_local_hash_entry *entry
+    = (struct elf64_ia64_local_hash_entry *) ptr;
+
+  return ELF_LOCAL_SYMBOL_HASH (entry->id, entry->r_sym);
+}
+
+/* Compare local hash entries.  */
+
+static int
+elf64_ia64_local_htab_eq (const void *ptr1, const void *ptr2)
+{
+  struct elf64_ia64_local_hash_entry *entry1
+    = (struct elf64_ia64_local_hash_entry *) ptr1;
+  struct elf64_ia64_local_hash_entry *entry2
+    = (struct elf64_ia64_local_hash_entry *) ptr2;
+
+  return entry1->id == entry2->id && entry1->r_sym == entry2->r_sym;
+}
+
+/* Create the derived linker hash table.  The IA-64 ELF port uses this
+   derived hash table to keep information specific to the IA-64 ElF
+   linker (without using static variables).  */
+
+static struct bfd_link_hash_table *
+elf64_ia64_hash_table_create (bfd *abfd)
+{
+  struct elf64_ia64_link_hash_table *ret;
+
+  ret = bfd_zmalloc ((bfd_size_type) sizeof (*ret));
+  if (!ret)
+    return NULL;
+
+  if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
+				      elf64_ia64_new_elf_hash_entry,
+				      sizeof (struct elf64_ia64_link_hash_entry),
+				      IA64_ELF_DATA))
+    {
+      free (ret);
+      return NULL;
+    }
+
+  ret->loc_hash_table = htab_try_create (1024, elf64_ia64_local_htab_hash,
+					 elf64_ia64_local_htab_eq, NULL);
+  ret->loc_hash_memory = objalloc_create ();
+  if (!ret->loc_hash_table || !ret->loc_hash_memory)
+    {
+      free (ret);
+      return NULL;
+    }
+
+  return &ret->root.root;
+}
+
+/* Free the global elf64_ia64_dyn_sym_info array.  */
+
+static bfd_boolean
+elf64_ia64_global_dyn_info_free (void **xentry,
+				 void * unused ATTRIBUTE_UNUSED)
+{
+  struct elf64_ia64_link_hash_entry *entry
+    = (struct elf64_ia64_link_hash_entry *) xentry;
+
+  if (entry->root.root.type == bfd_link_hash_warning)
+    entry = (struct elf64_ia64_link_hash_entry *) entry->root.root.u.i.link;
+
+  if (entry->info)
+    {
+      free (entry->info);
+      entry->info = NULL;
+      entry->count = 0;
+      entry->sorted_count = 0;
+      entry->size = 0;
+    }
+
+  return TRUE;
+}
+
+/* Free the local elf64_ia64_dyn_sym_info array.  */
+
+static bfd_boolean
+elf64_ia64_local_dyn_info_free (void **slot,
+				void * unused ATTRIBUTE_UNUSED)
+{
+  struct elf64_ia64_local_hash_entry *entry
+    = (struct elf64_ia64_local_hash_entry *) *slot;
+
+  if (entry->info)
+    {
+      free (entry->info);
+      entry->info = NULL;
+      entry->count = 0;
+      entry->sorted_count = 0;
+      entry->size = 0;
+    }
+
+  return TRUE;
+}
+
+/* Destroy IA-64 linker hash table.  */
+
+static void
+elf64_ia64_hash_table_free (struct bfd_link_hash_table *hash)
+{
+  struct elf64_ia64_link_hash_table *ia64_info
+    = (struct elf64_ia64_link_hash_table *) hash;
+  if (ia64_info->loc_hash_table)
+    {
+      htab_traverse (ia64_info->loc_hash_table,
+		     elf64_ia64_local_dyn_info_free, NULL);
+      htab_delete (ia64_info->loc_hash_table);
+    }
+  if (ia64_info->loc_hash_memory)
+    objalloc_free ((struct objalloc *) ia64_info->loc_hash_memory);
+  elf_link_hash_traverse (&ia64_info->root,
+			  elf64_ia64_global_dyn_info_free, NULL);
+  _bfd_generic_link_hash_table_free (hash);
+}
+
+/* Traverse both local and global hash tables.  */
+
+struct elf64_ia64_dyn_sym_traverse_data
+{
+  bfd_boolean (*func) (struct elf64_ia64_dyn_sym_info *, void *);
+  void * data;
+};
+
+static bfd_boolean
+elf64_ia64_global_dyn_sym_thunk (struct bfd_hash_entry *xentry,
+				 void * xdata)
+{
+  struct elf64_ia64_link_hash_entry *entry
+    = (struct elf64_ia64_link_hash_entry *) xentry;
+  struct elf64_ia64_dyn_sym_traverse_data *data
+    = (struct elf64_ia64_dyn_sym_traverse_data *) xdata;
+  struct elf64_ia64_dyn_sym_info *dyn_i;
+  unsigned int count;
+
+  if (entry->root.root.type == bfd_link_hash_warning)
+    entry = (struct elf64_ia64_link_hash_entry *) entry->root.root.u.i.link;
+
+  for (count = entry->count, dyn_i = entry->info;
+       count != 0;
+       count--, dyn_i++)
+    if (! (*data->func) (dyn_i, data->data))
+      return FALSE;
+  return TRUE;
+}
+
+static bfd_boolean
+elf64_ia64_local_dyn_sym_thunk (void **slot, void * xdata)
+{
+  struct elf64_ia64_local_hash_entry *entry
+    = (struct elf64_ia64_local_hash_entry *) *slot;
+  struct elf64_ia64_dyn_sym_traverse_data *data
+    = (struct elf64_ia64_dyn_sym_traverse_data *) xdata;
+  struct elf64_ia64_dyn_sym_info *dyn_i;
+  unsigned int count;
+
+  for (count = entry->count, dyn_i = entry->info;
+       count != 0;
+       count--, dyn_i++)
+    if (! (*data->func) (dyn_i, data->data))
+      return FALSE;
+  return TRUE;
+}
+
+static void
+elf64_ia64_dyn_sym_traverse (struct elf64_ia64_link_hash_table *ia64_info,
+			     bfd_boolean (*func) (struct elf64_ia64_dyn_sym_info *, void *),
+			     void * data)
+{
+  struct elf64_ia64_dyn_sym_traverse_data xdata;
+
+  xdata.func = func;
+  xdata.data = data;
+
+  elf_link_hash_traverse (&ia64_info->root,
+			  elf64_ia64_global_dyn_sym_thunk, &xdata);
+  htab_traverse (ia64_info->loc_hash_table,
+		 elf64_ia64_local_dyn_sym_thunk, &xdata);
+}
+
+#define NOTE_NAME "IPF/VMS"
+
+static bfd_boolean
+create_ia64_vms_notes (bfd *abfd, struct bfd_link_info *info,
+                       unsigned int time_hi, unsigned int time_lo)
+{
+#define NBR_NOTES 7
+  Elf_Internal_Note notes[NBR_NOTES];
+  char *module_name;
+  int module_name_len;
+  unsigned char cur_time[8];
+  Elf64_External_VMS_ORIG_DYN_Note *orig_dyn;
+  unsigned int orig_dyn_size;
+  unsigned int note_size;
+  int i;
+  unsigned char *noteptr;
+  unsigned char *note_contents;
+  struct elf64_ia64_link_hash_table *ia64_info;
+
+  ia64_info = elf64_ia64_hash_table (info);
+
+  module_name = vms_get_module_name (bfd_get_filename (abfd), TRUE);
+  module_name_len = strlen (module_name) + 1;
+
+  bfd_putl32 (time_lo, cur_time + 0);
+  bfd_putl32 (time_hi, cur_time + 4);
+
+  /* Note 0: IMGNAM.  */
+  notes[0].type = NT_VMS_IMGNAM;
+  notes[0].descdata = module_name;
+  notes[0].descsz = module_name_len;
+
+  /* Note 1: GSTNAM.  */
+  notes[1].type = NT_VMS_GSTNAM;
+  notes[1].descdata = module_name;
+  notes[1].descsz = module_name_len;
+
+  /* Note 2: IMGID.  */
+#define IMG_ID "V1.0"
+  notes[2].type = NT_VMS_IMGID;
+  notes[2].descdata = IMG_ID;
+  notes[2].descsz = sizeof (IMG_ID);
+
+  /* Note 3: Linktime.  */
+  notes[3].type = NT_VMS_LINKTIME;
+  notes[3].descdata = (char *)cur_time;
+  notes[3].descsz = sizeof (cur_time);
+
+  /* Note 4: Linker id.  */
+  notes[4].type = NT_VMS_LINKID;
+  notes[4].descdata = "GNU ld " BFD_VERSION_STRING;
+  notes[4].descsz = strlen (notes[4].descdata) + 1;
+
+  /* Note 5: Original dyn.  */
+  orig_dyn_size = (sizeof (*orig_dyn) + sizeof (IMG_ID) - 1 + 7) & ~7;
+  orig_dyn = bfd_zalloc (abfd, orig_dyn_size);
+  if (orig_dyn == NULL)
+    return FALSE;
+  bfd_putl32 (1, orig_dyn->major_id);
+  bfd_putl32 (3, orig_dyn->minor_id);
+  memcpy (orig_dyn->manipulation_date, cur_time, sizeof (cur_time));
+  bfd_putl64 (VMS_LF_IMGSTA | VMS_LF_MAIN, orig_dyn->link_flags);
+  bfd_putl32 (EF_IA_64_ABI64, orig_dyn->elf_flags);
+  memcpy (orig_dyn->imgid, IMG_ID, sizeof (IMG_ID));
+  notes[5].type = NT_VMS_ORIG_DYN;
+  notes[5].descdata = (char *)orig_dyn;
+  notes[5].descsz = orig_dyn_size;
+
+  /* Note 3: Patchtime.  */
+  notes[6].type = NT_VMS_PATCHTIME;
+  notes[6].descdata = (char *)cur_time;
+  notes[6].descsz = sizeof (cur_time);
+
+  /* Compute notes size.  */
+  note_size = 0;
+  for (i = 0; i < NBR_NOTES; i++)
+    note_size += sizeof (Elf64_External_VMS_Note) - 1
+      + ((sizeof (NOTE_NAME) - 1 + 7) & ~7)
+      + ((notes[i].descsz + 7) & ~7);
+
+  /* Malloc a temporary buffer large enough for most notes */
+  note_contents = (unsigned char *) bfd_zalloc (abfd, note_size);
+  if (note_contents == NULL)
+    return FALSE;
+  noteptr = note_contents;
+
+  /* Fill notes.  */
+  for (i = 0; i < NBR_NOTES; i++)
+    {
+      Elf64_External_VMS_Note *enote = (Elf64_External_VMS_Note *) noteptr;
+
+      bfd_putl64 (sizeof (NOTE_NAME) - 1, enote->namesz);
+      bfd_putl64 (notes[i].descsz, enote->descsz);
+      bfd_putl64 (notes[i].type, enote->type);
+
+      noteptr = (unsigned char *)enote->name;
+      memcpy (noteptr, NOTE_NAME, sizeof (NOTE_NAME) - 1);
+      noteptr += (sizeof (NOTE_NAME) - 1 + 7) & ~7;
+      memcpy (noteptr, notes[i].descdata, notes[i].descsz);
+      noteptr += (notes[i].descsz + 7) & ~7;
+    }
+
+  ia64_info->note_sec->contents = note_contents;
+  ia64_info->note_sec->size = note_size;
+
+  free (module_name);
+
+  return TRUE;
+}
+
+static bfd_boolean
+elf64_ia64_create_dynamic_sections (bfd *abfd,
+				    struct bfd_link_info *info)
+{
+  struct elf64_ia64_link_hash_table *ia64_info;
+  asection *s;
+  flagword flags;
+  const struct elf_backend_data *bed;
+
+  ia64_info = elf64_ia64_hash_table (info);
+  if (ia64_info == NULL)
+    return FALSE;
+
+  if (elf_hash_table (info)->dynamic_sections_created)
+    return TRUE;
+
+  abfd = elf_hash_table (info)->dynobj;
+  bed = get_elf_backend_data (abfd);
+
+  flags = bed->dynamic_sec_flags;
+
+  s = bfd_make_section_anyway_with_flags (abfd, ".dynamic",
+					  flags | SEC_READONLY);
+  if (s == NULL
+      || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
+    return FALSE;
+
+  s = bfd_make_section_anyway_with_flags (abfd, ".plt", flags | SEC_READONLY);
+  if (s == NULL
+      || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
+    return FALSE;
+  ia64_info->root.splt = s;
+
+  if (!get_got (abfd, ia64_info))
+    return FALSE;
+
+  if (!get_pltoff (abfd, ia64_info))
+    return FALSE;
+
+  s = bfd_make_section_anyway_with_flags (abfd, ".vmsdynstr",
+					  (SEC_ALLOC
+					   | SEC_HAS_CONTENTS
+					   | SEC_IN_MEMORY
+					   | SEC_LINKER_CREATED));
+  if (s == NULL
+      || !bfd_set_section_alignment (abfd, s, 0))
+    return FALSE;
+
+  /* Create a fixup section.  */
+  s = bfd_make_section_anyway_with_flags (abfd, ".fixups",
+					  (SEC_ALLOC
+					   | SEC_HAS_CONTENTS
+					   | SEC_IN_MEMORY
+					   | SEC_LINKER_CREATED));
+  if (s == NULL
+      || !bfd_set_section_alignment (abfd, s, 3))
+    return FALSE;
+  ia64_info->fixups_sec = s;
+
+  /* Create the transfer fixup section.  */
+  s = bfd_make_section_anyway_with_flags (abfd, ".transfer",
+					  (SEC_ALLOC
+					   | SEC_HAS_CONTENTS
+					   | SEC_IN_MEMORY
+					   | SEC_LINKER_CREATED));
+  if (s == NULL
+      || !bfd_set_section_alignment (abfd, s, 3))
+    return FALSE;
+  s->size = sizeof (struct elf64_vms_transfer);
+  ia64_info->transfer_sec = s;
+
+  /* Create note section.  */
+  s = bfd_make_section_anyway_with_flags (abfd, ".vms.note",
+                                          (SEC_LINKER_CREATED
+                                           | SEC_HAS_CONTENTS
+                                           | SEC_IN_MEMORY
+                                           | SEC_READONLY));
+  if (s == NULL
+      || !bfd_set_section_alignment (abfd, s, 3))
+    return FALSE;
+  ia64_info->note_sec = s;
+
+  elf_hash_table (info)->dynamic_sections_created = TRUE;
+  return TRUE;
+}
+
+/* Find and/or create a hash entry for local symbol.  */
+static struct elf64_ia64_local_hash_entry *
+get_local_sym_hash (struct elf64_ia64_link_hash_table *ia64_info,
+		    bfd *abfd, const Elf_Internal_Rela *rel,
+		    bfd_boolean create)
+{
+  struct elf64_ia64_local_hash_entry e, *ret;
+  asection *sec = abfd->sections;
+  hashval_t h = ELF_LOCAL_SYMBOL_HASH (sec->id,
+				       ELF64_R_SYM (rel->r_info));
+  void **slot;
+
+  e.id = sec->id;
+  e.r_sym = ELF64_R_SYM (rel->r_info);
+  slot = htab_find_slot_with_hash (ia64_info->loc_hash_table, &e, h,
+				   create ? INSERT : NO_INSERT);
+
+  if (!slot)
+    return NULL;
+
+  if (*slot)
+    return (struct elf64_ia64_local_hash_entry *) *slot;
+
+  ret = (struct elf64_ia64_local_hash_entry *)
+	objalloc_alloc ((struct objalloc *) ia64_info->loc_hash_memory,
+			sizeof (struct elf64_ia64_local_hash_entry));
+  if (ret)
+    {
+      memset (ret, 0, sizeof (*ret));
+      ret->id = sec->id;
+      ret->r_sym = ELF64_R_SYM (rel->r_info);
+      *slot = ret;
+    }
+  return ret;
+}
+
+/* Used to sort elf64_ia64_dyn_sym_info array.  */
+
+static int
+addend_compare (const void *xp, const void *yp)
+{
+  const struct elf64_ia64_dyn_sym_info *x
+    = (const struct elf64_ia64_dyn_sym_info *) xp;
+  const struct elf64_ia64_dyn_sym_info *y
+    = (const struct elf64_ia64_dyn_sym_info *) yp;
+
+  return x->addend < y->addend ? -1 : x->addend > y->addend ? 1 : 0;
+}
+
+/* Sort elf64_ia64_dyn_sym_info array and remove duplicates.  */
+
+static unsigned int
+sort_dyn_sym_info (struct elf64_ia64_dyn_sym_info *info,
+		   unsigned int count)
+{
+  bfd_vma curr, prev, got_offset;
+  unsigned int i, kept, dupes, diff, dest, src, len;
+
+  qsort (info, count, sizeof (*info), addend_compare);
+
+  /* Find the first duplicate.  */
+  prev = info [0].addend;
+  got_offset = info [0].got_offset;
+  for (i = 1; i < count; i++)
+    {
+      curr = info [i].addend;
+      if (curr == prev)
+	{
+	  /* For duplicates, make sure that GOT_OFFSET is valid.  */
+	  if (got_offset == (bfd_vma) -1)
+	    got_offset = info [i].got_offset;
+	  break;
+	}
+      got_offset = info [i].got_offset;
+      prev = curr;
+    }
+
+  /* We may move a block of elements to here.  */
+  dest = i++;
+
+  /* Remove duplicates.  */
+  if (i < count)
+    {
+      while (i < count)
+	{
+	  /* For duplicates, make sure that the kept one has a valid
+	     got_offset.  */
+	  kept = dest - 1;
+	  if (got_offset != (bfd_vma) -1)
+	    info [kept].got_offset = got_offset;
+
+	  curr = info [i].addend;
+	  got_offset = info [i].got_offset;
+
+	  /* Move a block of elements whose first one is different from
+	     the previous.  */
+	  if (curr == prev)
+	    {
+	      for (src = i + 1; src < count; src++)
+		{
+		  if (info [src].addend != curr)
+		    break;
+		  /* For duplicates, make sure that GOT_OFFSET is
+		     valid.  */
+		  if (got_offset == (bfd_vma) -1)
+		    got_offset = info [src].got_offset;
+		}
+
+	      /* Make sure that the kept one has a valid got_offset.  */
+	      if (got_offset != (bfd_vma) -1)
+		info [kept].got_offset = got_offset;
+	    }
+	  else
+	    src = i;
+
+	  if (src >= count)
+	    break;
+
+	  /* Find the next duplicate.  SRC will be kept.  */
+	  prev = info [src].addend;
+	  got_offset = info [src].got_offset;
+	  for (dupes = src + 1; dupes < count; dupes ++)
+	    {
+	      curr = info [dupes].addend;
+	      if (curr == prev)
+		{
+		  /* Make sure that got_offset is valid.  */
+		  if (got_offset == (bfd_vma) -1)
+		    got_offset = info [dupes].got_offset;
+
+		  /* For duplicates, make sure that the kept one has
+		     a valid got_offset.  */
+		  if (got_offset != (bfd_vma) -1)
+		    info [dupes - 1].got_offset = got_offset;
+		  break;
+		}
+	      got_offset = info [dupes].got_offset;
+	      prev = curr;
+	    }
+
+	  /* How much to move.  */
+	  len = dupes - src;
+	  i = dupes + 1;
+
+	  if (len == 1 && dupes < count)
+	    {
+	      /* If we only move 1 element, we combine it with the next
+		 one.  There must be at least a duplicate.  Find the
+		 next different one.  */
+	      for (diff = dupes + 1, src++; diff < count; diff++, src++)
+		{
+		  if (info [diff].addend != curr)
+		    break;
+		  /* Make sure that got_offset is valid.  */
+		  if (got_offset == (bfd_vma) -1)
+		    got_offset = info [diff].got_offset;
+		}
+
+	      /* Makre sure that the last duplicated one has an valid
+		 offset.  */
+	      BFD_ASSERT (curr == prev);
+	      if (got_offset != (bfd_vma) -1)
+		info [diff - 1].got_offset = got_offset;
+
+	      if (diff < count)
+		{
+		  /* Find the next duplicate.  Track the current valid
+		     offset.  */
+		  prev = info [diff].addend;
+		  got_offset = info [diff].got_offset;
+		  for (dupes = diff + 1; dupes < count; dupes ++)
+		    {
+		      curr = info [dupes].addend;
+		      if (curr == prev)
+			{
+			  /* For duplicates, make sure that GOT_OFFSET
+			     is valid.  */
+			  if (got_offset == (bfd_vma) -1)
+			    got_offset = info [dupes].got_offset;
+			  break;
+			}
+		      got_offset = info [dupes].got_offset;
+		      prev = curr;
+		      diff++;
+		    }
+
+		  len = diff - src + 1;
+		  i = diff + 1;
+		}
+	    }
+
+	  memmove (&info [dest], &info [src], len * sizeof (*info));
+
+	  dest += len;
+	}
+
+      count = dest;
+    }
+  else
+    {
+      /* When we get here, either there is no duplicate at all or
+	 the only duplicate is the last element.  */
+      if (dest < count)
+	{
+	  /* If the last element is a duplicate, make sure that the
+	     kept one has a valid got_offset.  We also update count.  */
+	  if (got_offset != (bfd_vma) -1)
+	    info [dest - 1].got_offset = got_offset;
+	  count = dest;
+	}
+    }
+
+  return count;
+}
+
+/* Find and/or create a descriptor for dynamic symbol info.  This will
+   vary based on global or local symbol, and the addend to the reloc.
+
+   We don't sort when inserting.  Also, we sort and eliminate
+   duplicates if there is an unsorted section.  Typically, this will
+   only happen once, because we do all insertions before lookups.  We
+   then use bsearch to do a lookup.  This also allows lookups to be
+   fast.  So we have fast insertion (O(log N) due to duplicate check),
+   fast lookup (O(log N)) and one sort (O(N log N) expected time).
+   Previously, all lookups were O(N) because of the use of the linked
+   list and also all insertions were O(N) because of the check for
+   duplicates.  There are some complications here because the array
+   size grows occasionally, which may add an O(N) factor, but this
+   should be rare.  Also,  we free the excess array allocation, which
+   requires a copy which is O(N), but this only happens once.  */
+
+static struct elf64_ia64_dyn_sym_info *
+get_dyn_sym_info (struct elf64_ia64_link_hash_table *ia64_info,
+		  struct elf_link_hash_entry *h, bfd *abfd,
+		  const Elf_Internal_Rela *rel, bfd_boolean create)
+{
+  struct elf64_ia64_dyn_sym_info **info_p, *info, *dyn_i, key;
+  unsigned int *count_p, *sorted_count_p, *size_p;
+  unsigned int count, sorted_count, size;
+  bfd_vma addend = rel ? rel->r_addend : 0;
+  bfd_size_type amt;
+
+  if (h)
+    {
+      struct elf64_ia64_link_hash_entry *global_h;
+
+      global_h = (struct elf64_ia64_link_hash_entry *) h;
+      info_p = &global_h->info;
+      count_p = &global_h->count;
+      sorted_count_p = &global_h->sorted_count;
+      size_p = &global_h->size;
+    }
+  else
+    {
+      struct elf64_ia64_local_hash_entry *loc_h;
+
+      loc_h = get_local_sym_hash (ia64_info, abfd, rel, create);
+      if (!loc_h)
+	{
+	  BFD_ASSERT (!create);
+	  return NULL;
+	}
+
+      info_p = &loc_h->info;
+      count_p = &loc_h->count;
+      sorted_count_p = &loc_h->sorted_count;
+      size_p = &loc_h->size;
+    }
+
+  count = *count_p;
+  sorted_count = *sorted_count_p;
+  size = *size_p;
+  info = *info_p;
+  if (create)
+    {
+      /* When we create the array, we don't check for duplicates,
+         except in the previously sorted section if one exists, and
+	 against the last inserted entry.  This allows insertions to
+	 be fast.  */
+      if (info)
+	{
+	  if (sorted_count)
+	    {
+	      /* Try bsearch first on the sorted section.  */
+	      key.addend = addend;
+	      dyn_i = bsearch (&key, info, sorted_count,
+			       sizeof (*info), addend_compare);
+
+	      if (dyn_i)
+		{
+		  return dyn_i;
+		}
+	    }
+
+	  /* Do a quick check for the last inserted entry.  */
+	  dyn_i = info + count - 1;
+	  if (dyn_i->addend == addend)
+	    {
+	      return dyn_i;
+	    }
+	}
+
+      if (size == 0)
+	{
+	  /* It is the very first element. We create the array of size
+	     1.  */
+	  size = 1;
+	  amt = size * sizeof (*info);
+	  info = bfd_malloc (amt);
+	}
+      else if (size <= count)
+	{
+	  /* We double the array size every time when we reach the
+	     size limit.  */
+	  size += size;
+	  amt = size * sizeof (*info);
+	  info = bfd_realloc (info, amt);
+	}
+      else
+	goto has_space;
+
+      if (info == NULL)
+	return NULL;
+      *size_p = size;
+      *info_p = info;
+
+has_space:
+      /* Append the new one to the array.  */
+      dyn_i = info + count;
+      memset (dyn_i, 0, sizeof (*dyn_i));
+      dyn_i->got_offset = (bfd_vma) -1;
+      dyn_i->addend = addend;
+
+      /* We increment count only since the new ones are unsorted and
+	 may have duplicate.  */
+      (*count_p)++;
+    }
+  else
+    {
+      /* It is a lookup without insertion.  Sort array if part of the
+	 array isn't sorted.  */
+      if (count != sorted_count)
+	{
+	  count = sort_dyn_sym_info (info, count);
+	  *count_p = count;
+	  *sorted_count_p = count;
+	}
+
+      /* Free unused memory.  */
+      if (size != count)
+	{
+	  amt = count * sizeof (*info);
+	  info = bfd_malloc (amt);
+	  if (info != NULL)
+	    {
+	      memcpy (info, *info_p, amt);
+	      free (*info_p);
+	      *size_p = count;
+	      *info_p = info;
+	    }
+	}
+
+      key.addend = addend;
+      dyn_i = bsearch (&key, info, count,
+		       sizeof (*info), addend_compare);
+    }
+
+  return dyn_i;
+}
+
+static asection *
+get_got (bfd *abfd, struct elf64_ia64_link_hash_table *ia64_info)
+{
+  asection *got;
+  bfd *dynobj;
+
+  got = ia64_info->root.sgot;
+  if (!got)
+    {
+      flagword flags;
+
+      dynobj = ia64_info->root.dynobj;
+      if (!dynobj)
+	ia64_info->root.dynobj = dynobj = abfd;
+
+      /* The .got section is always aligned at 8 bytes.  */
+      flags = get_elf_backend_data (dynobj)->dynamic_sec_flags;
+      got = bfd_make_section_anyway_with_flags (dynobj, ".got",
+						flags | SEC_SMALL_DATA);
+      if (got == NULL
+          || !bfd_set_section_alignment (dynobj, got, 3))
+        return NULL;
+      ia64_info->root.sgot = got;
+    }
+
+  return got;
+}
+
+/* Create function descriptor section (.opd).  This section is called .opd
+   because it contains "official procedure descriptors".  The "official"
+   refers to the fact that these descriptors are used when taking the address
+   of a procedure, thus ensuring a unique address for each procedure.  */
+
+static asection *
+get_fptr (bfd *abfd, struct bfd_link_info *info,
+	  struct elf64_ia64_link_hash_table *ia64_info)
+{
+  asection *fptr;
+  bfd *dynobj;
+
+  fptr = ia64_info->fptr_sec;
+  if (!fptr)
+    {
+      dynobj = ia64_info->root.dynobj;
+      if (!dynobj)
+	ia64_info->root.dynobj = dynobj = abfd;
+
+      fptr = bfd_make_section_anyway_with_flags (dynobj, ".opd",
+						 (SEC_ALLOC
+						  | SEC_LOAD
+						  | SEC_HAS_CONTENTS
+						  | SEC_IN_MEMORY
+						  | (info->pie ? 0
+						     : SEC_READONLY)
+						  | SEC_LINKER_CREATED));
+      if (!fptr
+	  || !bfd_set_section_alignment (dynobj, fptr, 4))
+	{
+	  BFD_ASSERT (0);
+	  return NULL;
+	}
+
+      ia64_info->fptr_sec = fptr;
+
+      if (info->pie)
+	{
+	  asection *fptr_rel;
+	  fptr_rel = bfd_make_section_anyway_with_flags (dynobj, ".rela.opd",
+							 (SEC_ALLOC | SEC_LOAD
+							  | SEC_HAS_CONTENTS
+							  | SEC_IN_MEMORY
+							  | SEC_LINKER_CREATED
+							  | SEC_READONLY));
+	  if (fptr_rel == NULL
+	      || !bfd_set_section_alignment (dynobj, fptr_rel, 3))
+	    {
+	      BFD_ASSERT (0);
+	      return NULL;
+	    }
+
+	  ia64_info->rel_fptr_sec = fptr_rel;
+	}
+    }
+
+  return fptr;
+}
+
+static asection *
+get_pltoff (bfd *abfd, struct elf64_ia64_link_hash_table *ia64_info)
+{
+  asection *pltoff;
+  bfd *dynobj;
+
+  pltoff = ia64_info->pltoff_sec;
+  if (!pltoff)
+    {
+      dynobj = ia64_info->root.dynobj;
+      if (!dynobj)
+	ia64_info->root.dynobj = dynobj = abfd;
+
+      pltoff = bfd_make_section_anyway_with_flags (dynobj,
+						   ELF_STRING_ia64_pltoff,
+						   (SEC_ALLOC
+						    | SEC_LOAD
+						    | SEC_HAS_CONTENTS
+						    | SEC_IN_MEMORY
+						    | SEC_SMALL_DATA
+						    | SEC_LINKER_CREATED));
+      if (!pltoff
+	  || !bfd_set_section_alignment (dynobj, pltoff, 4))
+	{
+	  BFD_ASSERT (0);
+	  return NULL;
+	}
+
+      ia64_info->pltoff_sec = pltoff;
+    }
+
+  return pltoff;
+}
+
+static asection *
+get_reloc_section (bfd *abfd,
+		   struct elf64_ia64_link_hash_table *ia64_info,
+		   asection *sec, bfd_boolean create)
+{
+  const char *srel_name;
+  asection *srel;
+  bfd *dynobj;
+
+  srel_name = (bfd_elf_string_from_elf_section
+	       (abfd, elf_elfheader(abfd)->e_shstrndx,
+		_bfd_elf_single_rel_hdr (sec)->sh_name));
+  if (srel_name == NULL)
+    return NULL;
+
+  BFD_ASSERT ((CONST_STRNEQ (srel_name, ".rela")
+	       && strcmp (bfd_get_section_name (abfd, sec),
+			  srel_name+5) == 0)
+	      || (CONST_STRNEQ (srel_name, ".rel")
+		  && strcmp (bfd_get_section_name (abfd, sec),
+			     srel_name+4) == 0));
+
+  dynobj = ia64_info->root.dynobj;
+  if (!dynobj)
+    ia64_info->root.dynobj = dynobj = abfd;
+
+  srel = bfd_get_linker_section (dynobj, srel_name);
+  if (srel == NULL && create)
+    {
+      srel = bfd_make_section_anyway_with_flags (dynobj, srel_name,
+						 (SEC_ALLOC | SEC_LOAD
+						  | SEC_HAS_CONTENTS
+						  | SEC_IN_MEMORY
+						  | SEC_LINKER_CREATED
+						  | SEC_READONLY));
+      if (srel == NULL
+	  || !bfd_set_section_alignment (dynobj, srel, 3))
+	return NULL;
+    }
+
+  return srel;
+}
+
+static bfd_boolean
+count_dyn_reloc (bfd *abfd, struct elf64_ia64_dyn_sym_info *dyn_i,
+		 asection *srel, int type)
+{
+  struct elf64_ia64_dyn_reloc_entry *rent;
+
+  for (rent = dyn_i->reloc_entries; rent; rent = rent->next)
+    if (rent->srel == srel && rent->type == type)
+      break;
+
+  if (!rent)
+    {
+      rent = ((struct elf64_ia64_dyn_reloc_entry *)
+	      bfd_alloc (abfd, (bfd_size_type) sizeof (*rent)));
+      if (!rent)
+	return FALSE;
+
+      rent->next = dyn_i->reloc_entries;
+      rent->srel = srel;
+      rent->type = type;
+      rent->count = 0;
+      dyn_i->reloc_entries = rent;
+    }
+  rent->count++;
+
+  return TRUE;
+}
+
+static bfd_boolean
+elf64_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info,
+			 asection *sec,
+			 const Elf_Internal_Rela *relocs)
+{
+  struct elf64_ia64_link_hash_table *ia64_info;
+  const Elf_Internal_Rela *relend;
+  Elf_Internal_Shdr *symtab_hdr;
+  const Elf_Internal_Rela *rel;
+  asection *got, *fptr, *srel, *pltoff;
+  enum {
+    NEED_GOT = 1,
+    NEED_GOTX = 2,
+    NEED_FPTR = 4,
+    NEED_PLTOFF = 8,
+    NEED_MIN_PLT = 16,
+    NEED_FULL_PLT = 32,
+    NEED_DYNREL = 64,
+    NEED_LTOFF_FPTR = 128
+  };
+  int need_entry;
+  struct elf_link_hash_entry *h;
+  unsigned long r_symndx;
+  bfd_boolean maybe_dynamic;
+
+  if (info->relocatable)
+    return TRUE;
+
+  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+  ia64_info = elf64_ia64_hash_table (info);
+  if (ia64_info == NULL)
+    return FALSE;
+
+  got = fptr = srel = pltoff = NULL;
+
+  relend = relocs + sec->reloc_count;
+
+  /* We scan relocations first to create dynamic relocation arrays.  We
+     modified get_dyn_sym_info to allow fast insertion and support fast
+     lookup in the next loop.  */
+  for (rel = relocs; rel < relend; ++rel)
+    {
+      r_symndx = ELF64_R_SYM (rel->r_info);
+      if (r_symndx >= symtab_hdr->sh_info)
+	{
+	  long indx = r_symndx - symtab_hdr->sh_info;
+	  h = elf_sym_hashes (abfd)[indx];
+	  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;
+	}
+      else
+	h = NULL;
+
+      /* We can only get preliminary data on whether a symbol is
+	 locally or externally defined, as not all of the input files
+	 have yet been processed.  Do something with what we know, as
+	 this may help reduce memory usage and processing time later.  */
+      maybe_dynamic = (h && ((!info->executable
+			      && (!SYMBOLIC_BIND (info, h)
+				  || info->unresolved_syms_in_shared_libs == RM_IGNORE))
+			     || !h->def_regular
+			     || h->root.type == bfd_link_hash_defweak));
+
+      need_entry = 0;
+      switch (ELF64_R_TYPE (rel->r_info))
+	{
+	case R_IA64_TPREL64MSB:
+	case R_IA64_TPREL64LSB:
+	case R_IA64_LTOFF_TPREL22:
+	case R_IA64_DTPREL32MSB:
+	case R_IA64_DTPREL32LSB:
+	case R_IA64_DTPREL64MSB:
+	case R_IA64_DTPREL64LSB:
+	case R_IA64_LTOFF_DTPREL22:
+	case R_IA64_DTPMOD64MSB:
+	case R_IA64_DTPMOD64LSB:
+	case R_IA64_LTOFF_DTPMOD22:
+          abort ();
+	  break;
+
+	case R_IA64_IPLTMSB:
+	case R_IA64_IPLTLSB:
+          break;
+
+	case R_IA64_LTOFF_FPTR22:
+	case R_IA64_LTOFF_FPTR64I:
+	case R_IA64_LTOFF_FPTR32MSB:
+	case R_IA64_LTOFF_FPTR32LSB:
+	case R_IA64_LTOFF_FPTR64MSB:
+	case R_IA64_LTOFF_FPTR64LSB:
+	  need_entry = NEED_FPTR | NEED_GOT | NEED_LTOFF_FPTR;
+	  break;
+
+	case R_IA64_FPTR64I:
+	case R_IA64_FPTR32MSB:
+	case R_IA64_FPTR32LSB:
+	case R_IA64_FPTR64MSB:
+	case R_IA64_FPTR64LSB:
+	  if (info->shared || h)
+	    need_entry = NEED_FPTR | NEED_DYNREL;
+	  else
+	    need_entry = NEED_FPTR;
+	  break;
+
+	case R_IA64_LTOFF22:
+	case R_IA64_LTOFF64I:
+	  need_entry = NEED_GOT;
+	  break;
+
+	case R_IA64_LTOFF22X:
+	  need_entry = NEED_GOTX;
+	  break;
+
+	case R_IA64_PLTOFF22:
+	case R_IA64_PLTOFF64I:
+	case R_IA64_PLTOFF64MSB:
+	case R_IA64_PLTOFF64LSB:
+	  need_entry = NEED_PLTOFF;
+	  if (h)
+	    {
+	      if (maybe_dynamic)
+		need_entry |= NEED_MIN_PLT;
+	    }
+	  else
+	    {
+	      (*info->callbacks->warning)
+		(info, _("@pltoff reloc against local symbol"), 0,
+		 abfd, 0, (bfd_vma) 0);
+	    }
+	  break;
+
+	case R_IA64_PCREL21B:
+        case R_IA64_PCREL60B:
+	  /* Depending on where this symbol is defined, we may or may not
+	     need a full plt entry.  Only skip if we know we'll not need
+	     the entry -- static or symbolic, and the symbol definition
+	     has already been seen.  */
+	  if (maybe_dynamic && rel->r_addend == 0)
+	    need_entry = NEED_FULL_PLT;
+	  break;
+
+	case R_IA64_IMM14:
+	case R_IA64_IMM22:
+	case R_IA64_IMM64:
+	case R_IA64_DIR32MSB:
+	case R_IA64_DIR32LSB:
+	case R_IA64_DIR64MSB:
+	case R_IA64_DIR64LSB:
+	  /* Shared objects will always need at least a REL relocation.  */
+	  if (info->shared || maybe_dynamic)
+	    need_entry = NEED_DYNREL;
+	  break;
+
+	case R_IA64_PCREL22:
+	case R_IA64_PCREL64I:
+	case R_IA64_PCREL32MSB:
+	case R_IA64_PCREL32LSB:
+	case R_IA64_PCREL64MSB:
+	case R_IA64_PCREL64LSB:
+	  if (maybe_dynamic)
+	    need_entry = NEED_DYNREL;
+	  break;
+	}
+
+      if (!need_entry)
+	continue;
+
+      if ((need_entry & NEED_FPTR) != 0
+	  && rel->r_addend)
+	{
+	  (*info->callbacks->warning)
+	    (info, _("non-zero addend in @fptr reloc"), 0,
+	     abfd, 0, (bfd_vma) 0);
+	}
+
+      if (get_dyn_sym_info (ia64_info, h, abfd, rel, TRUE) == NULL)
+	return FALSE;
+    }
+
+  /* Now, we only do lookup without insertion, which is very fast
+     with the modified get_dyn_sym_info.  */
+  for (rel = relocs; rel < relend; ++rel)
+    {
+      struct elf64_ia64_dyn_sym_info *dyn_i;
+      int dynrel_type = R_IA64_NONE;
+
+      r_symndx = ELF64_R_SYM (rel->r_info);
+      if (r_symndx >= symtab_hdr->sh_info)
+	{
+	  /* We're dealing with a global symbol -- find its hash entry
+	     and mark it as being referenced.  */
+	  long indx = r_symndx - symtab_hdr->sh_info;
+	  h = elf_sym_hashes (abfd)[indx];
+	  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;
+
+	  h->ref_regular = 1;
+	}
+      else
+	h = NULL;
+
+      /* We can only get preliminary data on whether a symbol is
+	 locally or externally defined, as not all of the input files
+	 have yet been processed.  Do something with what we know, as
+	 this may help reduce memory usage and processing time later.  */
+      maybe_dynamic = (h && ((!info->executable
+			      && (!SYMBOLIC_BIND (info, h)
+				  || info->unresolved_syms_in_shared_libs == RM_IGNORE))
+			     || !h->def_regular
+			     || h->root.type == bfd_link_hash_defweak));
+
+      need_entry = 0;
+      switch (ELF64_R_TYPE (rel->r_info))
+	{
+	case R_IA64_TPREL64MSB:
+	case R_IA64_TPREL64LSB:
+	case R_IA64_LTOFF_TPREL22:
+	case R_IA64_DTPREL32MSB:
+	case R_IA64_DTPREL32LSB:
+	case R_IA64_DTPREL64MSB:
+	case R_IA64_DTPREL64LSB:
+	case R_IA64_LTOFF_DTPREL22:
+	case R_IA64_DTPMOD64MSB:
+	case R_IA64_DTPMOD64LSB:
+	case R_IA64_LTOFF_DTPMOD22:
+          abort ();
+	  break;
+
+	case R_IA64_LTOFF_FPTR22:
+	case R_IA64_LTOFF_FPTR64I:
+	case R_IA64_LTOFF_FPTR32MSB:
+	case R_IA64_LTOFF_FPTR32LSB:
+	case R_IA64_LTOFF_FPTR64MSB:
+	case R_IA64_LTOFF_FPTR64LSB:
+	  need_entry = NEED_FPTR | NEED_GOT | NEED_LTOFF_FPTR;
+	  break;
+
+	case R_IA64_FPTR64I:
+	case R_IA64_FPTR32MSB:
+	case R_IA64_FPTR32LSB:
+	case R_IA64_FPTR64MSB:
+	case R_IA64_FPTR64LSB:
+	  if (info->shared || h)
+	    need_entry = NEED_FPTR | NEED_DYNREL;
+	  else
+	    need_entry = NEED_FPTR;
+	  dynrel_type = R_IA64_FPTR64LSB;
+	  break;
+
+	case R_IA64_LTOFF22:
+	case R_IA64_LTOFF64I:
+	  need_entry = NEED_GOT;
+	  break;
+
+	case R_IA64_LTOFF22X:
+	  need_entry = NEED_GOTX;
+	  break;
+
+	case R_IA64_PLTOFF22:
+	case R_IA64_PLTOFF64I:
+	case R_IA64_PLTOFF64MSB:
+	case R_IA64_PLTOFF64LSB:
+	  need_entry = NEED_PLTOFF;
+	  if (h)
+	    {
+	      if (maybe_dynamic)
+		need_entry |= NEED_MIN_PLT;
+	    }
+	  break;
+
+	case R_IA64_PCREL21B:
+        case R_IA64_PCREL60B:
+	  /* Depending on where this symbol is defined, we may or may not
+	     need a full plt entry.  Only skip if we know we'll not need
+	     the entry -- static or symbolic, and the symbol definition
+	     has already been seen.  */
+	  if (maybe_dynamic && rel->r_addend == 0)
+	    need_entry = NEED_FULL_PLT;
+	  break;
+
+	case R_IA64_IMM14:
+	case R_IA64_IMM22:
+	case R_IA64_IMM64:
+	case R_IA64_DIR32MSB:
+	case R_IA64_DIR32LSB:
+	case R_IA64_DIR64MSB:
+	case R_IA64_DIR64LSB:
+	  /* Shared objects will always need at least a REL relocation.  */
+	  if (info->shared || maybe_dynamic)
+	    need_entry = NEED_DYNREL;
+	  dynrel_type = R_IA64_DIR64LSB;
+	  break;
+
+	case R_IA64_IPLTMSB:
+	case R_IA64_IPLTLSB:
+	  break;
+
+	case R_IA64_PCREL22:
+	case R_IA64_PCREL64I:
+	case R_IA64_PCREL32MSB:
+	case R_IA64_PCREL32LSB:
+	case R_IA64_PCREL64MSB:
+	case R_IA64_PCREL64LSB:
+	  if (maybe_dynamic)
+	    need_entry = NEED_DYNREL;
+	  dynrel_type = R_IA64_PCREL64LSB;
+	  break;
+	}
+
+      if (!need_entry)
+	continue;
+
+      dyn_i = get_dyn_sym_info (ia64_info, h, abfd, rel, FALSE);
+
+      /* Record whether or not this is a local symbol.  */
+      dyn_i->h = h;
+
+      /* Create what's needed.  */
+      if (need_entry & (NEED_GOT | NEED_GOTX))
+	{
+	  if (!got)
+	    {
+	      got = get_got (abfd, ia64_info);
+	      if (!got)
+		return FALSE;
+	    }
+	  if (need_entry & NEED_GOT)
+	    dyn_i->want_got = 1;
+	  if (need_entry & NEED_GOTX)
+	    dyn_i->want_gotx = 1;
+	}
+      if (need_entry & NEED_FPTR)
+	{
+          /* Create the .opd section.  */
+	  if (!fptr)
+	    {
+	      fptr = get_fptr (abfd, info, ia64_info);
+	      if (!fptr)
+		return FALSE;
+	    }
+	  dyn_i->want_fptr = 1;
+	}
+      if (need_entry & NEED_LTOFF_FPTR)
+	dyn_i->want_ltoff_fptr = 1;
+      if (need_entry & (NEED_MIN_PLT | NEED_FULL_PLT))
+	{
+          if (!ia64_info->root.dynobj)
+	    ia64_info->root.dynobj = abfd;
+	  h->needs_plt = 1;
+	  dyn_i->want_plt = 1;
+	}
+      if (need_entry & NEED_FULL_PLT)
+	dyn_i->want_plt2 = 1;
+      if (need_entry & NEED_PLTOFF)
+	{
+	  /* This is needed here, in case @pltoff is used in a non-shared
+	     link.  */
+	  if (!pltoff)
+	    {
+	      pltoff = get_pltoff (abfd, ia64_info);
+	      if (!pltoff)
+		return FALSE;
+	    }
+
+	  dyn_i->want_pltoff = 1;
+	}
+      if ((need_entry & NEED_DYNREL) && (sec->flags & SEC_ALLOC))
+	{
+	  if (!srel)
+	    {
+	      srel = get_reloc_section (abfd, ia64_info, sec, TRUE);
+	      if (!srel)
+		return FALSE;
+	    }
+	  if (!count_dyn_reloc (abfd, dyn_i, srel, dynrel_type))
+	    return FALSE;
+	}
+    }
+
+  return TRUE;
+}
+
+/* For cleanliness, and potentially faster dynamic loading, allocate
+   external GOT entries first.  */
+
+static bfd_boolean
+allocate_global_data_got (struct elf64_ia64_dyn_sym_info *dyn_i,
+			  void * data)
+{
+  struct elf64_ia64_allocate_data *x = (struct elf64_ia64_allocate_data *)data;
+
+  if ((dyn_i->want_got || dyn_i->want_gotx)
+      && ! dyn_i->want_fptr
+      && elf64_ia64_dynamic_symbol_p (dyn_i->h))
+     {
+       /* GOT entry with FPTR is done by allocate_global_fptr_got.  */
+       dyn_i->got_offset = x->ofs;
+       x->ofs += 8;
+     }
+  return TRUE;
+}
+
+/* Next, allocate all the GOT entries used by LTOFF_FPTR relocs.  */
+
+static bfd_boolean
+allocate_global_fptr_got (struct elf64_ia64_dyn_sym_info *dyn_i,
+			  void * data)
+{
+  struct elf64_ia64_allocate_data *x = (struct elf64_ia64_allocate_data *)data;
+
+  if (dyn_i->want_got
+      && dyn_i->want_fptr
+      && elf64_ia64_dynamic_symbol_p (dyn_i->h))
+    {
+      dyn_i->got_offset = x->ofs;
+      x->ofs += 8;
+    }
+  return TRUE;
+}
+
+/* Lastly, allocate all the GOT entries for local data.  */
+
+static bfd_boolean
+allocate_local_got (struct elf64_ia64_dyn_sym_info *dyn_i,
+		    void * data)
+{
+  struct elf64_ia64_allocate_data *x = (struct elf64_ia64_allocate_data *) data;
+
+  if ((dyn_i->want_got || dyn_i->want_gotx)
+      && !elf64_ia64_dynamic_symbol_p (dyn_i->h))
+    {
+      dyn_i->got_offset = x->ofs;
+      x->ofs += 8;
+    }
+  return TRUE;
+}
+
+/* Allocate function descriptors.  We can do these for every function
+   in a main executable that is not exported.  */
+
+static bfd_boolean
+allocate_fptr (struct elf64_ia64_dyn_sym_info *dyn_i, void * data)
+{
+  struct elf64_ia64_allocate_data *x = (struct elf64_ia64_allocate_data *) data;
+
+  if (dyn_i->want_fptr)
+    {
+      struct elf_link_hash_entry *h = dyn_i->h;
+
+      if (h)
+	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 == NULL || !h->def_dynamic)
+	{
+          /*  A non dynamic symbol.  */
+	  dyn_i->fptr_offset = x->ofs;
+	  x->ofs += 16;
+	}
+      else
+	dyn_i->want_fptr = 0;
+    }
+  return TRUE;
+}
+
+/* Allocate all the minimal PLT entries.  */
+
+static bfd_boolean
+allocate_plt_entries (struct elf64_ia64_dyn_sym_info *dyn_i,
+		      void * data ATTRIBUTE_UNUSED)
+{
+  if (dyn_i->want_plt)
+    {
+      struct elf_link_hash_entry *h = dyn_i->h;
+
+      if (h)
+	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;
+
+      /* ??? Versioned symbols seem to lose NEEDS_PLT.  */
+      if (elf64_ia64_dynamic_symbol_p (h))
+	{
+	  dyn_i->want_pltoff = 1;
+	}
+      else
+	{
+	  dyn_i->want_plt = 0;
+	  dyn_i->want_plt2 = 0;
+	}
+    }
+  return TRUE;
+}
+
+/* Allocate all the full PLT entries.  */
+
+static bfd_boolean
+allocate_plt2_entries (struct elf64_ia64_dyn_sym_info *dyn_i,
+		       void * data)
+{
+  struct elf64_ia64_allocate_data *x = (struct elf64_ia64_allocate_data *)data;
+
+  if (dyn_i->want_plt2)
+    {
+      struct elf_link_hash_entry *h = dyn_i->h;
+      bfd_size_type ofs = x->ofs;
+
+      dyn_i->plt2_offset = ofs;
+      x->ofs = ofs + PLT_FULL_ENTRY_SIZE;
+
+      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;
+      dyn_i->h->plt.offset = ofs;
+    }
+  return TRUE;
+}
+
+/* Allocate all the PLTOFF entries requested by relocations and
+   plt entries.  We can't share space with allocated FPTR entries,
+   because the latter are not necessarily addressable by the GP.
+   ??? Relaxation might be able to determine that they are.  */
+
+static bfd_boolean
+allocate_pltoff_entries (struct elf64_ia64_dyn_sym_info *dyn_i,
+			 void * data)
+{
+  struct elf64_ia64_allocate_data *x = (struct elf64_ia64_allocate_data *)data;
+
+  if (dyn_i->want_pltoff)
+    {
+      dyn_i->pltoff_offset = x->ofs;
+      x->ofs += 16;
+    }
+  return TRUE;
+}
+
+/* Allocate dynamic relocations for those symbols that turned out
+   to be dynamic.  */
+
+static bfd_boolean
+allocate_dynrel_entries (struct elf64_ia64_dyn_sym_info *dyn_i,
+			 void * data)
+{
+  struct elf64_ia64_allocate_data *x = (struct elf64_ia64_allocate_data *)data;
+  struct elf64_ia64_link_hash_table *ia64_info;
+  struct elf64_ia64_dyn_reloc_entry *rent;
+  bfd_boolean dynamic_symbol, shared, resolved_zero;
+  struct elf64_ia64_link_hash_entry *h_ia64;
+
+  ia64_info = elf64_ia64_hash_table (x->info);
+  if (ia64_info == NULL)
+    return FALSE;
+
+  /* Note that this can't be used in relation to FPTR relocs below.  */
+  dynamic_symbol = elf64_ia64_dynamic_symbol_p (dyn_i->h);
+
+  shared = x->info->shared;
+  resolved_zero = (dyn_i->h
+		   && ELF_ST_VISIBILITY (dyn_i->h->other)
+		   && dyn_i->h->root.type == bfd_link_hash_undefweak);
+
+  /* Take care of the GOT and PLT relocations.  */
+
+  if ((!resolved_zero
+       && (dynamic_symbol || shared)
+       && (dyn_i->want_got || dyn_i->want_gotx))
+      || (dyn_i->want_ltoff_fptr
+	  && dyn_i->h
+	  && dyn_i->h->def_dynamic))
+    {
+      /* VMS: FIX64.  */
+      if (dyn_i->h != NULL && dyn_i->h->def_dynamic)
+        {
+          h_ia64 = (struct elf64_ia64_link_hash_entry *) dyn_i->h;
+          elf_ia64_vms_tdata (h_ia64->shl)->fixups_off +=
+            sizeof (Elf64_External_VMS_IMAGE_FIXUP);
+          ia64_info->fixups_sec->size +=
+            sizeof (Elf64_External_VMS_IMAGE_FIXUP);
+        }
+    }
+
+  if (ia64_info->rel_fptr_sec && dyn_i->want_fptr)
+    {
+      /* VMS: only image reloc.  */
+      if (dyn_i->h == NULL || dyn_i->h->root.type != bfd_link_hash_undefweak)
+	ia64_info->rel_fptr_sec->size += sizeof (Elf64_External_Rela);
+    }
+
+  if (!resolved_zero && dyn_i->want_pltoff)
+    {
+      /* VMS: FIXFD.  */
+      if (dyn_i->h != NULL && dyn_i->h->def_dynamic)
+        {
+          h_ia64 = (struct elf64_ia64_link_hash_entry *) dyn_i->h;
+          elf_ia64_vms_tdata (h_ia64->shl)->fixups_off +=
+            sizeof (Elf64_External_VMS_IMAGE_FIXUP);
+          ia64_info->fixups_sec->size +=
+            sizeof (Elf64_External_VMS_IMAGE_FIXUP);
+        }
+    }
+
+  /* Take care of the normal data relocations.  */
+
+  for (rent = dyn_i->reloc_entries; rent; rent = rent->next)
+    {
+      int count = rent->count;
+
+      switch (rent->type)
+	{
+	case R_IA64_FPTR32LSB:
+	case R_IA64_FPTR64LSB:
+	  /* Allocate one iff !want_fptr and not PIE, which by this point
+	     will be true only if we're actually allocating one statically
+	     in the main executable.  Position independent executables
+	     need a relative reloc.  */
+	  if (dyn_i->want_fptr && !x->info->pie)
+	    continue;
+	  break;
+	case R_IA64_PCREL32LSB:
+	case R_IA64_PCREL64LSB:
+	  if (!dynamic_symbol)
+	    continue;
+	  break;
+	case R_IA64_DIR32LSB:
+	case R_IA64_DIR64LSB:
+	  if (!dynamic_symbol && !shared)
+	    continue;
+	  break;
+	case R_IA64_IPLTLSB:
+	  if (!dynamic_symbol && !shared)
+	    continue;
+	  /* Use two REL relocations for IPLT relocations
+	     against local symbols.  */
+	  if (!dynamic_symbol)
+	    count *= 2;
+	  break;
+	case R_IA64_DTPREL32LSB:
+	case R_IA64_TPREL64LSB:
+	case R_IA64_DTPREL64LSB:
+	case R_IA64_DTPMOD64LSB:
+	  break;
+	default:
+	  abort ();
+	}
+
+      /* Add a fixup.  */
+      if (!dynamic_symbol)
+        abort ();
+
+      h_ia64 = (struct elf64_ia64_link_hash_entry *) dyn_i->h;
+      elf_ia64_vms_tdata (h_ia64->shl)->fixups_off +=
+        sizeof (Elf64_External_VMS_IMAGE_FIXUP);
+      ia64_info->fixups_sec->size +=
+        sizeof (Elf64_External_VMS_IMAGE_FIXUP);
+    }
+
+  return TRUE;
+}
+
+static bfd_boolean
+elf64_ia64_adjust_dynamic_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED,
+				  struct elf_link_hash_entry *h)
+{
+  /* ??? Undefined symbols with PLT entries should be re-defined
+     to be the PLT entry.  */
+
+  /* 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->u.weakdef != NULL)
+    {
+      BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
+                  || h->u.weakdef->root.type == bfd_link_hash_defweak);
+      h->root.u.def.section = h->u.weakdef->root.u.def.section;
+      h->root.u.def.value = h->u.weakdef->root.u.def.value;
+      return TRUE;
+    }
+
+  /* If this is a reference to a symbol defined by a dynamic object which
+     is not a function, we might allocate the symbol in our .dynbss section
+     and allocate a COPY dynamic relocation.
+
+     But IA-64 code is canonically PIC, so as a rule we can avoid this sort
+     of hackery.  */
+
+  return TRUE;
+}
+
+static bfd_boolean
+elf64_ia64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
+				  struct bfd_link_info *info)
+{
+  struct elf64_ia64_allocate_data data;
+  struct elf64_ia64_link_hash_table *ia64_info;
+  asection *sec;
+  bfd *dynobj;
+  struct elf_link_hash_table *hash_table;
+
+  hash_table = elf_hash_table (info);
+  dynobj = hash_table->dynobj;
+  ia64_info = elf64_ia64_hash_table (info);
+  if (ia64_info == NULL)
+    return FALSE;
+  BFD_ASSERT(dynobj != NULL);
+  data.info = info;
+
+  /* Allocate the GOT entries.  */
+
+  if (ia64_info->root.sgot)
+    {
+      data.ofs = 0;
+      elf64_ia64_dyn_sym_traverse (ia64_info, allocate_global_data_got, &data);
+      elf64_ia64_dyn_sym_traverse (ia64_info, allocate_global_fptr_got, &data);
+      elf64_ia64_dyn_sym_traverse (ia64_info, allocate_local_got, &data);
+      ia64_info->root.sgot->size = data.ofs;
+    }
+
+  /* Allocate the FPTR entries.  */
+
+  if (ia64_info->fptr_sec)
+    {
+      data.ofs = 0;
+      elf64_ia64_dyn_sym_traverse (ia64_info, allocate_fptr, &data);
+      ia64_info->fptr_sec->size = data.ofs;
+    }
+
+  /* Now that we've seen all of the input files, we can decide which
+     symbols need plt entries.  Allocate the minimal PLT entries first.
+     We do this even though dynamic_sections_created may be FALSE, because
+     this has the side-effect of clearing want_plt and want_plt2.  */
+
+  data.ofs = 0;
+  elf64_ia64_dyn_sym_traverse (ia64_info, allocate_plt_entries, &data);
+
+  /* Align the pointer for the plt2 entries.  */
+  data.ofs = (data.ofs + 31) & (bfd_vma) -32;
+
+  elf64_ia64_dyn_sym_traverse (ia64_info, allocate_plt2_entries, &data);
+  if (data.ofs != 0 || ia64_info->root.dynamic_sections_created)
+    {
+      /* FIXME: we always reserve the memory for dynamic linker even if
+	 there are no PLT entries since dynamic linker may assume the
+	 reserved memory always exists.  */
+
+      BFD_ASSERT (ia64_info->root.dynamic_sections_created);
+
+      ia64_info->root.splt->size = data.ofs;
+    }
+
+  /* Allocate the PLTOFF entries.  */
+
+  if (ia64_info->pltoff_sec)
+    {
+      data.ofs = 0;
+      elf64_ia64_dyn_sym_traverse (ia64_info, allocate_pltoff_entries, &data);
+      ia64_info->pltoff_sec->size = data.ofs;
+    }
+
+  if (ia64_info->root.dynamic_sections_created)
+    {
+      /* Allocate space for the dynamic relocations that turned out to be
+	 required.  */
+      elf64_ia64_dyn_sym_traverse (ia64_info, allocate_dynrel_entries, &data);
+    }
+
+  /* We have now determined the sizes of the various dynamic sections.
+     Allocate memory for them.  */
+  for (sec = dynobj->sections; sec != NULL; sec = sec->next)
+    {
+      bfd_boolean strip;
+
+      if (!(sec->flags & SEC_LINKER_CREATED))
+	continue;
+
+      /* If we don't need this section, strip it from the output file.
+	 There were several sections primarily related to dynamic
+	 linking that must be create before the linker maps input
+	 sections to output sections.  The linker does that before
+	 bfd_elf_size_dynamic_sections is called, and it is that
+	 function which decides whether anything needs to go into
+	 these sections.  */
+
+      strip = (sec->size == 0);
+
+      if (sec == ia64_info->root.sgot)
+	strip = FALSE;
+      else if (sec == ia64_info->root.srelgot)
+	{
+	  if (strip)
+	    ia64_info->root.srelgot = NULL;
+	  else
+	    /* We use the reloc_count field as a counter if we need to
+	       copy relocs into the output file.  */
+	    sec->reloc_count = 0;
+	}
+      else if (sec == ia64_info->fptr_sec)
+	{
+	  if (strip)
+	    ia64_info->fptr_sec = NULL;
+	}
+      else if (sec == ia64_info->rel_fptr_sec)
+	{
+	  if (strip)
+	    ia64_info->rel_fptr_sec = NULL;
+	  else
+	    /* We use the reloc_count field as a counter if we need to
+	       copy relocs into the output file.  */
+	    sec->reloc_count = 0;
+	}
+      else if (sec == ia64_info->root.splt)
+	{
+	  if (strip)
+	    ia64_info->root.splt = NULL;
+	}
+      else if (sec == ia64_info->pltoff_sec)
+	{
+	  if (strip)
+	    ia64_info->pltoff_sec = NULL;
+	}
+      else if (sec == ia64_info->fixups_sec)
+	{
+          if (strip)
+            ia64_info->fixups_sec = NULL;
+	}
+      else if (sec == ia64_info->transfer_sec)
+        {
+          ;
+        }
+      else
+	{
+	  const char *name;
+
+	  /* 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, sec);
+
+	  if (strcmp (name, ".got.plt") == 0)
+	    strip = FALSE;
+	  else if (CONST_STRNEQ (name, ".rel"))
+	    {
+	      if (!strip)
+		{
+		  /* We use the reloc_count field as a counter if we need to
+		     copy relocs into the output file.  */
+		  sec->reloc_count = 0;
+		}
+	    }
+	  else
+	    continue;
+	}
+
+      if (strip)
+	sec->flags |= SEC_EXCLUDE;
+      else
+	{
+	  /* Allocate memory for the section contents.  */
+	  sec->contents = (bfd_byte *) bfd_zalloc (dynobj, sec->size);
+	  if (sec->contents == NULL && sec->size != 0)
+	    return FALSE;
+	}
+    }
+
+  if (elf_hash_table (info)->dynamic_sections_created)
+    {
+      bfd *abfd;
+      asection *dynsec;
+      asection *dynstrsec;
+      Elf_Internal_Dyn dyn;
+      const struct elf_backend_data *bed;
+      unsigned int shl_num = 0;
+      bfd_vma fixups_off = 0;
+      bfd_vma strdyn_off;
+      unsigned int time_hi, time_lo;
+
+      /* The .dynamic section must exist and be empty.  */
+      dynsec = bfd_get_linker_section (hash_table->dynobj, ".dynamic");
+      BFD_ASSERT (dynsec != NULL);
+      BFD_ASSERT (dynsec->size == 0);
+
+      dynstrsec = bfd_get_linker_section (hash_table->dynobj, ".vmsdynstr");
+      BFD_ASSERT (dynstrsec != NULL);
+      BFD_ASSERT (dynstrsec->size == 0);
+      dynstrsec->size = 1;	/* Initial blank.  */
+
+      /* Ident + link time.  */
+      vms_get_time (&time_hi, &time_lo);
+
+      if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_IDENT, 0))
+        return FALSE;
+      if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_LINKTIME,
+                                       (((bfd_uint64_t)time_hi) << 32)
+                                       + time_lo))
+        return FALSE;
+
+      /* Strtab.  */
+      strdyn_off = dynsec->size;
+      if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_STRTAB_OFFSET, 0))
+        return FALSE;
+      if (!_bfd_elf_add_dynamic_entry (info, DT_STRSZ, 0))
+        return FALSE;
+
+      /* PLTGOT  */
+      if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_PLTGOT_SEG, 0))
+        return FALSE;
+      if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_PLTGOT_OFFSET, 0))
+        return FALSE;
+
+      /* Misc.  */
+      if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_FPMODE, 0x9800000))
+        return FALSE;
+      if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_LNKFLAGS,
+                                       VMS_LF_IMGSTA | VMS_LF_MAIN))
+        return FALSE;
+
+      /* Add entries for shared libraries.  */
+      for (abfd = info->input_bfds; abfd; abfd = abfd->link_next)
+        {
+          char *soname;
+          size_t soname_len;
+          bfd_size_type strindex;
+          bfd_byte *newcontents;
+          bfd_vma fixups_shl_off;
+
+          if (!(abfd->flags & DYNAMIC))
+            continue;
+          BFD_ASSERT (abfd->xvec == output_bfd->xvec);
+
+          if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_NEEDED_IDENT,
+                                           elf_ia64_vms_ident (abfd)))
+            return FALSE;
+
+          soname = vms_get_module_name (abfd->filename, TRUE);
+          if (soname == NULL)
+            return FALSE;
+          strindex = dynstrsec->size;
+          soname_len = strlen (soname) + 1;
+          newcontents = (bfd_byte *) bfd_realloc (dynstrsec->contents,
+                                                  strindex + soname_len);
+          if (newcontents == NULL)
+            return FALSE;
+          memcpy (newcontents + strindex, soname, soname_len);
+          dynstrsec->size += soname_len;
+          dynstrsec->contents = newcontents;
+
+          if (!_bfd_elf_add_dynamic_entry (info, DT_NEEDED, strindex))
+            return FALSE;
+
+          if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_FIXUP_NEEDED,
+                                           shl_num))
+            return FALSE;
+          shl_num++;
+
+          /* The fixups_off was in fact containing the size of the fixup
+             section.  Remap into the offset.  */
+          fixups_shl_off = elf_ia64_vms_tdata (abfd)->fixups_off;
+          elf_ia64_vms_tdata (abfd)->fixups_off = fixups_off;
+
+          if (!_bfd_elf_add_dynamic_entry
+              (info, DT_IA_64_VMS_FIXUP_RELA_CNT,
+               fixups_shl_off / sizeof (Elf64_External_VMS_IMAGE_FIXUP)))
+            return FALSE;
+          if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_FIXUP_RELA_OFF,
+                                           fixups_off))
+            return FALSE;
+          fixups_off += fixups_shl_off;
+        }
+
+      /* Unwind.  */
+      if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_UNWINDSZ, 0))
+        return FALSE;
+      if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_UNWIND_CODSEG, 0))
+        return FALSE;
+      if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_UNWIND_INFOSEG, 0))
+        return FALSE;
+      if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_UNWIND_OFFSET, 0))
+        return FALSE;
+      if (!_bfd_elf_add_dynamic_entry (info, DT_IA_64_VMS_UNWIND_SEG, 0))
+        return FALSE;
+
+      if (!_bfd_elf_add_dynamic_entry (info, DT_NULL, 0xdead))
+            return FALSE;
+
+      /* Fix the strtab entries.  */
+      bed = get_elf_backend_data (hash_table->dynobj);
+
+      if (dynstrsec->size > 1)
+        dynstrsec->contents[0] = 0;
+      else
+        dynstrsec->size = 0;
+
+      /* Note: one 'spare' (ie DT_NULL) entry is added by
+         bfd_elf_size_dynsym_hash_dynstr.  */
+      dyn.d_tag = DT_IA_64_VMS_STRTAB_OFFSET;
+      dyn.d_un.d_val = dynsec->size /* + sizeof (Elf64_External_Dyn) */;
+      bed->s->swap_dyn_out (hash_table->dynobj, &dyn,
+                            dynsec->contents + strdyn_off);
+
+      dyn.d_tag = DT_STRSZ;
+      dyn.d_un.d_val = dynstrsec->size;
+      bed->s->swap_dyn_out (hash_table->dynobj, &dyn,
+                            dynsec->contents + strdyn_off + bed->s->sizeof_dyn);
+
+      elf_ia64_vms_tdata (output_bfd)->needed_count = shl_num;
+
+      /* Note section.  */
+      if (!create_ia64_vms_notes (output_bfd, info, time_hi, time_lo))
+        return FALSE;
+    }
+
+  /* ??? Perhaps force __gp local.  */
+
+  return TRUE;
+}
+
+static void
+elf64_ia64_install_fixup (bfd *output_bfd,
+                          struct elf64_ia64_link_hash_table *ia64_info,
+                          struct elf_link_hash_entry *h,
+                          unsigned int type, asection *sec, bfd_vma offset,
+                          bfd_vma addend)
+{
+  asection *relsec;
+  Elf64_External_VMS_IMAGE_FIXUP *fixup;
+  struct elf64_ia64_link_hash_entry *h_ia64;
+  bfd_vma fixoff;
+  Elf_Internal_Phdr *phdr;
+
+  if (h == NULL || !h->def_dynamic)
+    abort ();
+
+  h_ia64 = (struct elf64_ia64_link_hash_entry *) h;
+  fixoff = elf_ia64_vms_tdata (h_ia64->shl)->fixups_off;
+  elf_ia64_vms_tdata (h_ia64->shl)->fixups_off +=
+    sizeof (Elf64_External_VMS_IMAGE_FIXUP);
+  relsec = ia64_info->fixups_sec;
+
+  fixup = (Elf64_External_VMS_IMAGE_FIXUP *)(relsec->contents + fixoff);
+  offset += sec->output_section->vma + sec->output_offset;
+
+  /* FIXME: this is slow.  We should cache the last one used, or create a
+     map.  */
+  phdr = _bfd_elf_find_segment_containing_section
+    (output_bfd, sec->output_section);
+  BFD_ASSERT (phdr != NULL);
+
+  bfd_putl64 (offset - phdr->p_vaddr, fixup->fixup_offset);
+  bfd_putl32 (type, fixup->type);
+  bfd_putl32 (phdr - elf_tdata (output_bfd)->phdr, fixup->fixup_seg);
+  bfd_putl64 (addend, fixup->addend);
+  bfd_putl32 (h->root.u.def.value, fixup->symvec_index);
+  bfd_putl32 (2, fixup->data_type);
+}
+
+/* Store an entry for target address TARGET_ADDR in the linkage table
+   and return the gp-relative address of the linkage table entry.  */
+
+static bfd_vma
+set_got_entry (bfd *abfd, struct bfd_link_info *info,
+	       struct elf64_ia64_dyn_sym_info *dyn_i,
+	       bfd_vma addend, bfd_vma value, unsigned int dyn_r_type)
+{
+  struct elf64_ia64_link_hash_table *ia64_info;
+  asection *got_sec;
+  bfd_boolean done;
+  bfd_vma got_offset;
+
+  ia64_info = elf64_ia64_hash_table (info);
+  if (ia64_info == NULL)
+    return 0;
+
+  got_sec = ia64_info->root.sgot;
+
+  switch (dyn_r_type)
+    {
+    case R_IA64_TPREL64LSB:
+    case R_IA64_DTPMOD64LSB:
+    case R_IA64_DTPREL32LSB:
+    case R_IA64_DTPREL64LSB:
+      abort ();
+      break;
+    default:
+      done = dyn_i->got_done;
+      dyn_i->got_done = TRUE;
+      got_offset = dyn_i->got_offset;
+      break;
+    }
+
+  BFD_ASSERT ((got_offset & 7) == 0);
+
+  if (! done)
+    {
+      /* Store the target address in the linkage table entry.  */
+      bfd_put_64 (abfd, value, got_sec->contents + got_offset);
+
+      /* Install a dynamic relocation if needed.  */
+      if (((info->shared
+	    && (!dyn_i->h
+		|| ELF_ST_VISIBILITY (dyn_i->h->other) == STV_DEFAULT
+		|| dyn_i->h->root.type != bfd_link_hash_undefweak))
+           || elf64_ia64_dynamic_symbol_p (dyn_i->h))
+	  && (!dyn_i->want_ltoff_fptr
+	      || !info->pie
+	      || !dyn_i->h
+	      || dyn_i->h->root.type != bfd_link_hash_undefweak))
+	{
+	  if (!dyn_i->h || !dyn_i->h->def_dynamic)
+	    {
+	      dyn_r_type = R_IA64_REL64LSB;
+	      addend = value;
+	    }
+
+          /* VMS: install a FIX32 or FIX64.  */
+          switch (dyn_r_type)
+            {
+            case R_IA64_DIR32LSB:
+            case R_IA64_FPTR32LSB:
+              dyn_r_type = R_IA64_VMS_FIX32;
+              break;
+            case R_IA64_DIR64LSB:
+            case R_IA64_FPTR64LSB:
+              dyn_r_type = R_IA64_VMS_FIX64;
+              break;
+            default:
+              BFD_ASSERT (FALSE);
+              break;
+            }
+          elf64_ia64_install_fixup
+            (info->output_bfd, ia64_info, dyn_i->h,
+             dyn_r_type, got_sec, got_offset, addend);
+        }
+    }
+
+  /* Return the address of the linkage table entry.  */
+  value = (got_sec->output_section->vma
+	   + got_sec->output_offset
+	   + got_offset);
+
+  return value;
+}
+
+/* Fill in a function descriptor consisting of the function's code
+   address and its global pointer.  Return the descriptor's address.  */
+
+static bfd_vma
+set_fptr_entry (bfd *abfd, struct bfd_link_info *info,
+		struct elf64_ia64_dyn_sym_info *dyn_i,
+		bfd_vma value)
+{
+  struct elf64_ia64_link_hash_table *ia64_info;
+  asection *fptr_sec;
+
+  ia64_info = elf64_ia64_hash_table (info);
+  if (ia64_info == NULL)
+    return 0;
+
+  fptr_sec = ia64_info->fptr_sec;
+
+  if (!dyn_i->fptr_done)
+    {
+      dyn_i->fptr_done = 1;
+
+      /* Fill in the function descriptor.  */
+      bfd_put_64 (abfd, value, fptr_sec->contents + dyn_i->fptr_offset);
+      bfd_put_64 (abfd, _bfd_get_gp_value (abfd),
+		  fptr_sec->contents + dyn_i->fptr_offset + 8);
+    }
+
+  /* Return the descriptor's address.  */
+  value = (fptr_sec->output_section->vma
+	   + fptr_sec->output_offset
+	   + dyn_i->fptr_offset);
+
+  return value;
+}
+
+/* Fill in a PLTOFF entry consisting of the function's code address
+   and its global pointer.  Return the descriptor's address.  */
+
+static bfd_vma
+set_pltoff_entry (bfd *abfd, struct bfd_link_info *info,
+		  struct elf64_ia64_dyn_sym_info *dyn_i,
+		  bfd_vma value, bfd_boolean is_plt)
+{
+  struct elf64_ia64_link_hash_table *ia64_info;
+  asection *pltoff_sec;
+
+  ia64_info = elf64_ia64_hash_table (info);
+  if (ia64_info == NULL)
+    return 0;
+
+  pltoff_sec = ia64_info->pltoff_sec;
+
+  /* Don't do anything if this symbol uses a real PLT entry.  In
+     that case, we'll fill this in during finish_dynamic_symbol.  */
+  if ((! dyn_i->want_plt || is_plt)
+      && !dyn_i->pltoff_done)
+    {
+      bfd_vma gp = _bfd_get_gp_value (abfd);
+
+      /* Fill in the function descriptor.  */
+      bfd_put_64 (abfd, value, pltoff_sec->contents + dyn_i->pltoff_offset);
+      bfd_put_64 (abfd, gp, pltoff_sec->contents + dyn_i->pltoff_offset + 8);
+
+      /* Install dynamic relocations if needed.  */
+      if (!is_plt
+	  && info->shared
+	  && (!dyn_i->h
+	      || ELF_ST_VISIBILITY (dyn_i->h->other) == STV_DEFAULT
+	      || dyn_i->h->root.type != bfd_link_hash_undefweak))
+	{
+          /* VMS:  */
+          abort ();
+	}
+
+      dyn_i->pltoff_done = 1;
+    }
+
+  /* Return the descriptor's address.  */
+  value = (pltoff_sec->output_section->vma
+	   + pltoff_sec->output_offset
+	   + dyn_i->pltoff_offset);
+
+  return value;
+}
+
+/* Called through qsort to sort the .IA_64.unwind section during a
+   non-relocatable link.  Set elf64_ia64_unwind_entry_compare_bfd
+   to the output bfd so we can do proper endianness frobbing.  */
+
+static bfd *elf64_ia64_unwind_entry_compare_bfd;
+
+static int
+elf64_ia64_unwind_entry_compare (const void * a, const void * b)
+{
+  bfd_vma av, bv;
+
+  av = bfd_get_64 (elf64_ia64_unwind_entry_compare_bfd, a);
+  bv = bfd_get_64 (elf64_ia64_unwind_entry_compare_bfd, b);
+
+  return (av < bv ? -1 : av > bv ? 1 : 0);
+}
+
+/* Make sure we've got ourselves a nice fat __gp value.  */
+static bfd_boolean
+elf64_ia64_choose_gp (bfd *abfd, struct bfd_link_info *info, bfd_boolean final)
+{
+  bfd_vma min_vma = (bfd_vma) -1, max_vma = 0;
+  bfd_vma min_short_vma = min_vma, max_short_vma = 0;
+  struct elf_link_hash_entry *gp;
+  bfd_vma gp_val;
+  asection *os;
+  struct elf64_ia64_link_hash_table *ia64_info;
+
+  ia64_info = elf64_ia64_hash_table (info);
+  if (ia64_info == NULL)
+    return FALSE;
+
+  /* Find the min and max vma of all sections marked short.  Also collect
+     min and max vma of any type, for use in selecting a nice gp.  */
+  for (os = abfd->sections; os ; os = os->next)
+    {
+      bfd_vma lo, hi;
+
+      if ((os->flags & SEC_ALLOC) == 0)
+	continue;
+
+      lo = os->vma;
+      /* When this function is called from elfNN_ia64_final_link
+	 the correct value to use is os->size.  When called from
+	 elfNN_ia64_relax_section we are in the middle of section
+	 sizing; some sections will already have os->size set, others
+	 will have os->size zero and os->rawsize the previous size.  */
+      hi = os->vma + (!final && os->rawsize ? os->rawsize : os->size);
+      if (hi < lo)
+	hi = (bfd_vma) -1;
+
+      if (min_vma > lo)
+	min_vma = lo;
+      if (max_vma < hi)
+	max_vma = hi;
+      if (os->flags & SEC_SMALL_DATA)
+	{
+	  if (min_short_vma > lo)
+	    min_short_vma = lo;
+	  if (max_short_vma < hi)
+	    max_short_vma = hi;
+	}
+    }
+
+  if (ia64_info->min_short_sec)
+    {
+      if (min_short_vma
+	  > (ia64_info->min_short_sec->vma
+	     + ia64_info->min_short_offset))
+	min_short_vma = (ia64_info->min_short_sec->vma
+			 + ia64_info->min_short_offset);
+      if (max_short_vma
+	  < (ia64_info->max_short_sec->vma
+	     + ia64_info->max_short_offset))
+	max_short_vma = (ia64_info->max_short_sec->vma
+			 + ia64_info->max_short_offset);
+    }
+
+  /* See if the user wants to force a value.  */
+  gp = elf_link_hash_lookup (elf_hash_table (info), "__gp", FALSE,
+			     FALSE, FALSE);
+
+  if (gp
+      && (gp->root.type == bfd_link_hash_defined
+	  || gp->root.type == bfd_link_hash_defweak))
+    {
+      asection *gp_sec = gp->root.u.def.section;
+      gp_val = (gp->root.u.def.value
+		+ gp_sec->output_section->vma
+		+ gp_sec->output_offset);
+    }
+  else
+    {
+      /* Pick a sensible value.  */
+
+      if (ia64_info->min_short_sec)
+	{
+	  bfd_vma short_range = max_short_vma - min_short_vma;
+
+	  /* If min_short_sec is set, pick one in the middle bewteen
+	     min_short_vma and max_short_vma.  */
+	  if (short_range >= 0x400000)
+	    goto overflow;
+	  gp_val = min_short_vma + short_range / 2;
+	}
+      else
+	{
+	  asection *got_sec = ia64_info->root.sgot;
+
+	  /* Start with just the address of the .got.  */
+	  if (got_sec)
+	    gp_val = got_sec->output_section->vma;
+	  else if (max_short_vma != 0)
+	    gp_val = min_short_vma;
+	  else if (max_vma - min_vma < 0x200000)
+	    gp_val = min_vma;
+	  else
+	    gp_val = max_vma - 0x200000 + 8;
+	}
+
+      /* If it is possible to address the entire image, but we
+	 don't with the choice above, adjust.  */
+      if (max_vma - min_vma < 0x400000
+	  && (max_vma - gp_val >= 0x200000
+	      || gp_val - min_vma > 0x200000))
+	gp_val = min_vma + 0x200000;
+      else if (max_short_vma != 0)
+	{
+	  /* If we don't cover all the short data, adjust.  */
+	  if (max_short_vma - gp_val >= 0x200000)
+	    gp_val = min_short_vma + 0x200000;
+
+	  /* If we're addressing stuff past the end, adjust back.  */
+	  if (gp_val > max_vma)
+	    gp_val = max_vma - 0x200000 + 8;
+	}
+    }
+
+  /* Validate whether all SHF_IA_64_SHORT sections are within
+     range of the chosen GP.  */
+
+  if (max_short_vma != 0)
+    {
+      if (max_short_vma - min_short_vma >= 0x400000)
+	{
+overflow:
+	  (*_bfd_error_handler)
+	    (_("%s: short data segment overflowed (0x%lx >= 0x400000)"),
+	     bfd_get_filename (abfd),
+	     (unsigned long) (max_short_vma - min_short_vma));
+	  return FALSE;
+	}
+      else if ((gp_val > min_short_vma
+		&& gp_val - min_short_vma > 0x200000)
+	       || (gp_val < max_short_vma
+		   && max_short_vma - gp_val >= 0x200000))
+	{
+	  (*_bfd_error_handler)
+	    (_("%s: __gp does not cover short data segment"),
+	     bfd_get_filename (abfd));
+	  return FALSE;
+	}
+    }
+
+  _bfd_set_gp_value (abfd, gp_val);
+
+  return TRUE;
+}
+
+static bfd_boolean
+elf64_ia64_final_link (bfd *abfd, struct bfd_link_info *info)
+{
+  struct elf64_ia64_link_hash_table *ia64_info;
+  asection *unwind_output_sec;
+
+  ia64_info = elf64_ia64_hash_table (info);
+  if (ia64_info == NULL)
+    return FALSE;
+
+  /* Make sure we've got ourselves a nice fat __gp value.  */
+  if (!info->relocatable)
+    {
+      bfd_vma gp_val;
+      struct elf_link_hash_entry *gp;
+
+      /* We assume after gp is set, section size will only decrease. We
+	 need to adjust gp for it.  */
+      _bfd_set_gp_value (abfd, 0);
+      if (! elf64_ia64_choose_gp (abfd, info, TRUE))
+	return FALSE;
+      gp_val = _bfd_get_gp_value (abfd);
+
+      gp = elf_link_hash_lookup (elf_hash_table (info), "__gp", FALSE,
+			         FALSE, FALSE);
+      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
+     of the .IA_64.unwind section.  Force this section to be relocated
+     into memory rather than written immediately to the output file.  */
+  unwind_output_sec = NULL;
+  if (!info->relocatable)
+    {
+      asection *s = bfd_get_section_by_name (abfd, ELF_STRING_ia64_unwind);
+      if (s)
+	{
+	  unwind_output_sec = s->output_section;
+	  unwind_output_sec->contents
+	    = bfd_malloc (unwind_output_sec->size);
+	  if (unwind_output_sec->contents == NULL)
+	    return FALSE;
+	}
+    }
+
+  /* Invoke the regular ELF backend linker to do all the work.  */
+  if (!bfd_elf_final_link (abfd, info))
+    return FALSE;
+
+  if (unwind_output_sec)
+    {
+      elf64_ia64_unwind_entry_compare_bfd = abfd;
+      qsort (unwind_output_sec->contents,
+	     (size_t) (unwind_output_sec->size / 24),
+	     24,
+	     elf64_ia64_unwind_entry_compare);
+
+      if (! bfd_set_section_contents (abfd, unwind_output_sec,
+				      unwind_output_sec->contents, (bfd_vma) 0,
+				      unwind_output_sec->size))
+	return FALSE;
+    }
+
+  return TRUE;
+}
+
+static bfd_boolean
+elf64_ia64_relocate_section (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)
+{
+  struct elf64_ia64_link_hash_table *ia64_info;
+  Elf_Internal_Shdr *symtab_hdr;
+  Elf_Internal_Rela *rel;
+  Elf_Internal_Rela *relend;
+  bfd_boolean ret_val = TRUE;	/* for non-fatal errors */
+  bfd_vma gp_val;
+
+  symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
+  ia64_info = elf64_ia64_hash_table (info);
+  if (ia64_info == NULL)
+    return FALSE;
+
+  /* Infect various flags from the input section to the output section.  */
+  if (info->relocatable)
+    {
+      bfd_vma flags;
+
+      flags = elf_section_data(input_section)->this_hdr.sh_flags;
+      flags &= SHF_IA_64_NORECOV;
+
+      elf_section_data(input_section->output_section)
+	->this_hdr.sh_flags |= flags;
+    }
+
+  gp_val = _bfd_get_gp_value (output_bfd);
+
+  rel = relocs;
+  relend = relocs + input_section->reloc_count;
+  for (; rel < relend; ++rel)
+    {
+      struct elf_link_hash_entry *h;
+      struct elf64_ia64_dyn_sym_info *dyn_i;
+      bfd_reloc_status_type r;
+      reloc_howto_type *howto;
+      unsigned long r_symndx;
+      Elf_Internal_Sym *sym;
+      unsigned int r_type;
+      bfd_vma value;
+      asection *sym_sec;
+      bfd_byte *hit_addr;
+      bfd_boolean dynamic_symbol_p;
+      bfd_boolean undef_weak_ref;
+
+      r_type = ELF64_R_TYPE (rel->r_info);
+      if (r_type > R_IA64_MAX_RELOC_CODE)
+	{
+	  (*_bfd_error_handler)
+	    (_("%B: unknown relocation type %d"),
+	     input_bfd, (int) r_type);
+	  bfd_set_error (bfd_error_bad_value);
+	  ret_val = FALSE;
+	  continue;
+	}
+
+      howto = ia64_elf_lookup_howto (r_type);
+      r_symndx = ELF64_R_SYM (rel->r_info);
+      h = NULL;
+      sym = NULL;
+      sym_sec = NULL;
+      undef_weak_ref = FALSE;
+
+      if (r_symndx < symtab_hdr->sh_info)
+	{
+	  /* Reloc against local symbol.  */
+	  asection *msec;
+	  sym = local_syms + r_symndx;
+	  sym_sec = local_sections[r_symndx];
+	  msec = sym_sec;
+	  value = _bfd_elf_rela_local_sym (output_bfd, sym, &msec, rel);
+	  if (!info->relocatable
+	      && (sym_sec->flags & SEC_MERGE) != 0
+	      && ELF_ST_TYPE (sym->st_info) == STT_SECTION
+	      && sym_sec->sec_info_type == SEC_INFO_TYPE_MERGE)
+	    {
+	      struct elf64_ia64_local_hash_entry *loc_h;
+
+	      loc_h = get_local_sym_hash (ia64_info, input_bfd, rel, FALSE);
+	      if (loc_h && ! loc_h->sec_merge_done)
+		{
+		  struct elf64_ia64_dyn_sym_info *dynent;
+		  unsigned int count;
+
+		  for (count = loc_h->count, dynent = loc_h->info;
+		       count != 0;
+		       count--, dynent++)
+		    {
+		      msec = sym_sec;
+		      dynent->addend =
+			_bfd_merged_section_offset (output_bfd, &msec,
+						    elf_section_data (msec)->
+						    sec_info,
+						    sym->st_value
+						    + dynent->addend);
+		      dynent->addend -= sym->st_value;
+		      dynent->addend += msec->output_section->vma
+					+ msec->output_offset
+					- sym_sec->output_section->vma
+					- sym_sec->output_offset;
+		    }
+
+		  /* We may have introduced duplicated entries. We need
+		     to remove them properly.  */
+		  count = sort_dyn_sym_info (loc_h->info, loc_h->count);
+		  if (count != loc_h->count)
+		    {
+		      loc_h->count = count;
+		      loc_h->sorted_count = count;
+		    }
+
+		  loc_h->sec_merge_done = 1;
+		}
+	    }
+	}
+      else
+	{
+	  bfd_boolean unresolved_reloc;
+	  bfd_boolean warned;
+	  struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (input_bfd);
+
+	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
+				   r_symndx, symtab_hdr, sym_hashes,
+				   h, sym_sec, value,
+				   unresolved_reloc, warned);
+
+	  if (h->root.type == bfd_link_hash_undefweak)
+	    undef_weak_ref = TRUE;
+	  else if (warned)
+	    continue;
+	}
+
+      /* For relocs against symbols from removed linkonce sections,
+	 or sections discarded by a linker script, we just want the
+	 section contents zeroed.  Avoid any special processing.  */
+      if (sym_sec != NULL && discarded_section (sym_sec))
+	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+					 rel, 1, relend, howto, 0, contents);
+
+      if (info->relocatable)
+	continue;
+
+      hit_addr = contents + rel->r_offset;
+      value += rel->r_addend;
+      dynamic_symbol_p = elf64_ia64_dynamic_symbol_p (h);
+
+      switch (r_type)
+	{
+	case R_IA64_NONE:
+	case R_IA64_LDXMOV:
+	  continue;
+
+	case R_IA64_IMM14:
+	case R_IA64_IMM22:
+	case R_IA64_IMM64:
+	case R_IA64_DIR32MSB:
+	case R_IA64_DIR32LSB:
+	case R_IA64_DIR64MSB:
+	case R_IA64_DIR64LSB:
+	  /* Install a dynamic relocation for this reloc.  */
+	  if ((dynamic_symbol_p || info->shared)
+	      && r_symndx != 0
+	      && (input_section->flags & SEC_ALLOC) != 0)
+	    {
+	      unsigned int dyn_r_type;
+	      bfd_vma addend;
+
+	      switch (r_type)
+		{
+		case R_IA64_IMM14:
+		case R_IA64_IMM22:
+		case R_IA64_IMM64:
+		  /* ??? People shouldn't be doing non-pic code in
+		     shared libraries nor dynamic executables.  */
+		  (*_bfd_error_handler)
+		    (_("%B: non-pic code with imm relocation against dynamic symbol `%s'"),
+		     input_bfd,
+		     h ? h->root.root.string
+		       : bfd_elf_sym_name (input_bfd, symtab_hdr, sym,
+					   sym_sec));
+		  ret_val = FALSE;
+		  continue;
+
+		default:
+		  break;
+		}
+
+	      /* If we don't need dynamic symbol lookup, find a
+		 matching RELATIVE relocation.  */
+	      dyn_r_type = r_type;
+	      if (dynamic_symbol_p)
+		{
+		  addend = rel->r_addend;
+		  value = 0;
+		}
+	      else
+		{
+		  addend = value;
+		}
+
+              /* VMS: install a FIX64.  */
+              switch (dyn_r_type)
+                {
+                case R_IA64_DIR32LSB:
+                  dyn_r_type = R_IA64_VMS_FIX32;
+                  break;
+                case R_IA64_DIR64LSB:
+                  dyn_r_type = R_IA64_VMS_FIX64;
+                  break;
+                default:
+                  BFD_ASSERT (FALSE);
+                  break;
+                }
+              elf64_ia64_install_fixup
+                (output_bfd, ia64_info, h,
+                 dyn_r_type, input_section, rel->r_offset, addend);
+              r = bfd_reloc_ok;
+              break;
+	    }
+	  /* Fall through.  */
+
+	case R_IA64_LTV32MSB:
+	case R_IA64_LTV32LSB:
+	case R_IA64_LTV64MSB:
+	case R_IA64_LTV64LSB:
+	  r = ia64_elf_install_value (hit_addr, value, r_type);
+	  break;
+
+	case R_IA64_GPREL22:
+	case R_IA64_GPREL64I:
+	case R_IA64_GPREL32MSB:
+	case R_IA64_GPREL32LSB:
+	case R_IA64_GPREL64MSB:
+	case R_IA64_GPREL64LSB:
+	  if (dynamic_symbol_p)
+	    {
+	      (*_bfd_error_handler)
+		(_("%B: @gprel relocation against dynamic symbol %s"),
+		 input_bfd,
+		 h ? h->root.root.string
+		   : bfd_elf_sym_name (input_bfd, symtab_hdr, sym,
+				       sym_sec));
+	      ret_val = FALSE;
+	      continue;
+	    }
+	  value -= gp_val;
+	  r = ia64_elf_install_value (hit_addr, value, r_type);
+	  break;
+
+	case R_IA64_LTOFF22:
+	case R_IA64_LTOFF22X:
+	case R_IA64_LTOFF64I:
+          dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, FALSE);
+	  value = set_got_entry (input_bfd, info, dyn_i,
+				 rel->r_addend, value, R_IA64_DIR64LSB);
+	  value -= gp_val;
+	  r = ia64_elf_install_value (hit_addr, value, r_type);
+	  break;
+
+	case R_IA64_PLTOFF22:
+	case R_IA64_PLTOFF64I:
+	case R_IA64_PLTOFF64MSB:
+	case R_IA64_PLTOFF64LSB:
+          dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, FALSE);
+	  value = set_pltoff_entry (output_bfd, info, dyn_i, value, FALSE);
+	  value -= gp_val;
+	  r = ia64_elf_install_value (hit_addr, value, r_type);
+	  break;
+
+	case R_IA64_FPTR64I:
+	case R_IA64_FPTR32MSB:
+	case R_IA64_FPTR32LSB:
+	case R_IA64_FPTR64MSB:
+	case R_IA64_FPTR64LSB:
+          dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, FALSE);
+	  if (dyn_i->want_fptr)
+	    {
+	      if (!undef_weak_ref)
+		value = set_fptr_entry (output_bfd, info, dyn_i, value);
+	    }
+	  if (!dyn_i->want_fptr || info->pie)
+	    {
+	      /* Otherwise, we expect the dynamic linker to create
+		 the entry.  */
+
+	      if (dyn_i->want_fptr)
+		{
+		  if (r_type == R_IA64_FPTR64I)
+		    {
+		      /* We can't represent this without a dynamic symbol.
+			 Adjust the relocation to be against an output
+			 section symbol, which are always present in the
+			 dynamic symbol table.  */
+		      /* ??? People shouldn't be doing non-pic code in
+			 shared libraries.  Hork.  */
+		      (*_bfd_error_handler)
+			(_("%B: linking non-pic code in a position independent executable"),
+			 input_bfd);
+		      ret_val = FALSE;
+		      continue;
+		    }
+		}
+	      else
+		{
+		  value = 0;
+		}
+
+              /* VMS: FIXFD.  */
+              elf64_ia64_install_fixup
+                (output_bfd, ia64_info, h, R_IA64_VMS_FIXFD,
+                 input_section, rel->r_offset, 0);
+              r = bfd_reloc_ok;
+              break;
+	    }
+
+	  r = ia64_elf_install_value (hit_addr, value, r_type);
+	  break;
+
+	case R_IA64_LTOFF_FPTR22:
+	case R_IA64_LTOFF_FPTR64I:
+	case R_IA64_LTOFF_FPTR32MSB:
+	case R_IA64_LTOFF_FPTR32LSB:
+	case R_IA64_LTOFF_FPTR64MSB:
+	case R_IA64_LTOFF_FPTR64LSB:
+          dyn_i = get_dyn_sym_info (ia64_info, h, input_bfd, rel, FALSE);
+          if (dyn_i->want_fptr)
+            {
+              BFD_ASSERT (h == NULL || !h->def_dynamic);
+              if (!undef_weak_ref)
+                value = set_fptr_entry (output_bfd, info, dyn_i, value);
+            }
+          else
+            value = 0;
+
+          value = set_got_entry (output_bfd, info, dyn_i,
+                                 rel->r_addend, value, R_IA64_FPTR64LSB);
+          value -= gp_val;
+          r = ia64_elf_install_value (hit_addr, value, r_type);
+	  break;
+
+	case R_IA64_PCREL32MSB:
+	case R_IA64_PCREL32LSB:
+	case R_IA64_PCREL64MSB:
+	case R_IA64_PCREL64LSB:
+	  /* Install a dynamic relocation for this reloc.  */
+	  if (dynamic_symbol_p && r_symndx != 0)
+	    {
+              /* VMS: doesn't exist ???  */
+              abort ();
+	    }
+	  goto finish_pcrel;
+
+	case R_IA64_PCREL21B:
+	case R_IA64_PCREL60B:
+	  /* We should have created a PLT entry for any dynamic symbol.  */
+	  dyn_i = NULL;
+	  if (h)
+	    dyn_i = get_dyn_sym_info (ia64_info, h, NULL, NULL, FALSE);
+
+	  if (dyn_i && dyn_i->want_plt2)
+	    {
+	      /* Should have caught this earlier.  */
+	      BFD_ASSERT (rel->r_addend == 0);
+
+	      value = (ia64_info->root.splt->output_section->vma
+		       + ia64_info->root.splt->output_offset
+		       + dyn_i->plt2_offset);
+	    }
+	  else
+	    {
+	      /* Since there's no PLT entry, Validate that this is
+		 locally defined.  */
+	      BFD_ASSERT (undef_weak_ref || sym_sec->output_section != NULL);
+
+	      /* If the symbol is undef_weak, we shouldn't be trying
+		 to call it.  There's every chance that we'd wind up
+		 with an out-of-range fixup here.  Don't bother setting
+		 any value at all.  */
+	      if (undef_weak_ref)
+		continue;
+	    }
+	  goto finish_pcrel;
+
+	case R_IA64_PCREL21BI:
+	case R_IA64_PCREL21F:
+	case R_IA64_PCREL21M:
+	case R_IA64_PCREL22:
+	case R_IA64_PCREL64I:
+	  /* The PCREL21BI reloc is specifically not intended for use with
+	     dynamic relocs.  PCREL21F and PCREL21M are used for speculation
+	     fixup code, and thus probably ought not be dynamic.  The
+	     PCREL22 and PCREL64I relocs aren't emitted as dynamic relocs.  */
+	  if (dynamic_symbol_p)
+	    {
+	      const char *msg;
+
+	      if (r_type == R_IA64_PCREL21BI)
+		msg = _("%B: @internal branch to dynamic symbol %s");
+	      else if (r_type == R_IA64_PCREL21F || r_type == R_IA64_PCREL21M)
+		msg = _("%B: speculation fixup to dynamic symbol %s");
+	      else
+		msg = _("%B: @pcrel relocation against dynamic symbol %s");
+	      (*_bfd_error_handler) (msg, input_bfd,
+				     h ? h->root.root.string
+				       : bfd_elf_sym_name (input_bfd,
+							   symtab_hdr,
+							   sym,
+							   sym_sec));
+	      ret_val = FALSE;
+	      continue;
+	    }
+	  goto finish_pcrel;
+
+	finish_pcrel:
+	  /* Make pc-relative.  */
+	  value -= (input_section->output_section->vma
+		    + input_section->output_offset
+		    + rel->r_offset) & ~ (bfd_vma) 0x3;
+	  r = ia64_elf_install_value (hit_addr, value, r_type);
+	  break;
+
+	case R_IA64_SEGREL32MSB:
+	case R_IA64_SEGREL32LSB:
+	case R_IA64_SEGREL64MSB:
+	case R_IA64_SEGREL64LSB:
+	    {
+	      /* Find the segment that contains the output_section.  */
+	      Elf_Internal_Phdr *p = _bfd_elf_find_segment_containing_section
+		(output_bfd, sym_sec->output_section);
+
+	      if (p == NULL)
+		{
+		  r = bfd_reloc_notsupported;
+		}
+	      else
+		{
+		  /* The VMA of the segment is the vaddr of the associated
+		     program header.  */
+		  if (value > p->p_vaddr)
+		    value -= p->p_vaddr;
+		  else
+		    value = 0;
+		  r = ia64_elf_install_value (hit_addr, value, r_type);
+		}
+	      break;
+	    }
+
+	case R_IA64_SECREL32MSB:
+	case R_IA64_SECREL32LSB:
+	case R_IA64_SECREL64MSB:
+	case R_IA64_SECREL64LSB:
+	  /* Make output-section relative to section where the symbol
+	     is defined. PR 475  */
+	  if (sym_sec)
+	    value -= sym_sec->output_section->vma;
+	  r = ia64_elf_install_value (hit_addr, value, r_type);
+	  break;
+
+	case R_IA64_IPLTMSB:
+	case R_IA64_IPLTLSB:
+	  /* Install a dynamic relocation for this reloc.  */
+	  if ((dynamic_symbol_p || info->shared)
+	      && (input_section->flags & SEC_ALLOC) != 0)
+	    {
+              /* VMS: FIXFD ??  */
+              abort ();
+	    }
+
+	  if (r_type == R_IA64_IPLTMSB)
+	    r_type = R_IA64_DIR64MSB;
+	  else
+	    r_type = R_IA64_DIR64LSB;
+	  ia64_elf_install_value (hit_addr, value, r_type);
+	  r = ia64_elf_install_value (hit_addr + 8, gp_val, r_type);
+	  break;
+
+	case R_IA64_TPREL14:
+	case R_IA64_TPREL22:
+	case R_IA64_TPREL64I:
+	  r = bfd_reloc_notsupported;
+	  break;
+
+	case R_IA64_DTPREL14:
+	case R_IA64_DTPREL22:
+	case R_IA64_DTPREL64I:
+	case R_IA64_DTPREL32LSB:
+	case R_IA64_DTPREL32MSB:
+	case R_IA64_DTPREL64LSB:
+	case R_IA64_DTPREL64MSB:
+	  r = bfd_reloc_notsupported;
+	  break;
+
+	case R_IA64_LTOFF_TPREL22:
+	case R_IA64_LTOFF_DTPMOD22:
+	case R_IA64_LTOFF_DTPREL22:
+	  r = bfd_reloc_notsupported;
+	  break;
+
+	default:
+	  r = bfd_reloc_notsupported;
+	  break;
+	}
+
+      switch (r)
+	{
+	case bfd_reloc_ok:
+	  break;
+
+	case bfd_reloc_undefined:
+	  /* This can happen for global table relative relocs if
+	     __gp is undefined.  This is a panic situation so we
+	     don't try to continue.  */
+	  (*info->callbacks->undefined_symbol)
+	    (info, "__gp", input_bfd, input_section, rel->r_offset, 1);
+	  return FALSE;
+
+	case bfd_reloc_notsupported:
+	  {
+	    const char *name;
+
+	    if (h)
+	      name = h->root.root.string;
+	    else
+	      name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym,
+				       sym_sec);
+	    if (!(*info->callbacks->warning) (info, _("unsupported reloc"),
+					      name, input_bfd,
+					      input_section, rel->r_offset))
+	      return FALSE;
+	    ret_val = FALSE;
+	  }
+	  break;
+
+	case bfd_reloc_dangerous:
+	case bfd_reloc_outofrange:
+	case bfd_reloc_overflow:
+	default:
+	  {
+	    const char *name;
+
+	    if (h)
+	      name = h->root.root.string;
+	    else
+	      name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym,
+				       sym_sec);
+
+	    switch (r_type)
+	      {
+	      case R_IA64_TPREL14:
+	      case R_IA64_TPREL22:
+	      case R_IA64_TPREL64I:
+	      case R_IA64_DTPREL14:
+	      case R_IA64_DTPREL22:
+	      case R_IA64_DTPREL64I:
+	      case R_IA64_DTPREL32LSB:
+	      case R_IA64_DTPREL32MSB:
+	      case R_IA64_DTPREL64LSB:
+	      case R_IA64_DTPREL64MSB:
+	      case R_IA64_LTOFF_TPREL22:
+	      case R_IA64_LTOFF_DTPMOD22:
+	      case R_IA64_LTOFF_DTPREL22:
+		(*_bfd_error_handler)
+		  (_("%B: missing TLS section for relocation %s against `%s' at 0x%lx in section `%A'."),
+		   input_bfd, input_section, howto->name, name,
+		   rel->r_offset);
+		break;
+
+	      case R_IA64_PCREL21B:
+	      case R_IA64_PCREL21BI:
+	      case R_IA64_PCREL21M:
+	      case R_IA64_PCREL21F:
+		if (is_elf_hash_table (info->hash))
+		  {
+		    /* Relaxtion is always performed for ELF output.
+		       Overflow failures for those relocations mean
+		       that the section is too big to relax.  */
+		    (*_bfd_error_handler)
+		      (_("%B: Can't relax br (%s) to `%s' at 0x%lx in section `%A' with size 0x%lx (> 0x1000000)."),
+		       input_bfd, input_section, howto->name, name,
+		       rel->r_offset, input_section->size);
+		    break;
+		  }
+	      default:
+		if (!(*info->callbacks->reloc_overflow) (info,
+							 &h->root,
+							 name,
+							 howto->name,
+							 (bfd_vma) 0,
+							 input_bfd,
+							 input_section,
+							 rel->r_offset))
+		  return FALSE;
+		break;
+	      }
+
+	    ret_val = FALSE;
+	  }
+	  break;
+	}
+    }
+
+  return ret_val;
+}
+
+static bfd_boolean
+elf64_ia64_finish_dynamic_symbol (bfd *output_bfd,
+				  struct bfd_link_info *info,
+				  struct elf_link_hash_entry *h,
+				  Elf_Internal_Sym *sym)
+{
+  struct elf64_ia64_link_hash_table *ia64_info;
+  struct elf64_ia64_dyn_sym_info *dyn_i;
+
+  ia64_info = elf64_ia64_hash_table (info);
+  if (ia64_info == NULL)
+    return FALSE;
+
+  dyn_i = get_dyn_sym_info (ia64_info, h, NULL, NULL, FALSE);
+
+  /* Fill in the PLT data, if required.  */
+  if (dyn_i && dyn_i->want_plt)
+    {
+      bfd_byte *loc;
+      asection *plt_sec;
+      bfd_vma plt_addr, pltoff_addr, gp_val;
+
+      gp_val = _bfd_get_gp_value (output_bfd);
+
+      plt_sec = ia64_info->root.splt;
+      plt_addr = 0;  /* Not used as overriden by FIXUPs.  */
+      pltoff_addr = set_pltoff_entry (output_bfd, info, dyn_i, plt_addr, TRUE);
+
+      /* Initialize the FULL PLT entry, if needed.  */
+      if (dyn_i->want_plt2)
+	{
+	  loc = plt_sec->contents + dyn_i->plt2_offset;
+
+	  memcpy (loc, plt_full_entry, PLT_FULL_ENTRY_SIZE);
+	  ia64_elf_install_value (loc, pltoff_addr - gp_val, R_IA64_IMM22);
+
+	  /* Mark the symbol as undefined, rather than as defined in the
+	     plt section.  Leave the value alone.  */
+	  /* ??? We didn't redefine it in adjust_dynamic_symbol in the
+	     first place.  But perhaps elflink.c did some for us.  */
+	  if (!h->def_regular)
+	    sym->st_shndx = SHN_UNDEF;
+	}
+
+      /* VMS: FIXFD.  */
+      elf64_ia64_install_fixup
+        (output_bfd, ia64_info, h, R_IA64_VMS_FIXFD, ia64_info->pltoff_sec,
+         pltoff_addr - (ia64_info->pltoff_sec->output_section->vma
+                        + ia64_info->pltoff_sec->output_offset), 0);
+    }
+
+  /* Mark some specially defined symbols as absolute.  */
+  if (strcmp (h->root.root.string, "_DYNAMIC") == 0
+      || h == ia64_info->root.hgot
+      || h == ia64_info->root.hplt)
+    sym->st_shndx = SHN_ABS;
+
+  return TRUE;
+}
+
+static bfd_boolean
+elf64_ia64_finish_dynamic_sections (bfd *abfd,
+				    struct bfd_link_info *info)
+{
+  struct elf64_ia64_link_hash_table *ia64_info;
+  bfd *dynobj;
+
+  ia64_info = elf64_ia64_hash_table (info);
+  if (ia64_info == NULL)
+    return FALSE;
+
+  dynobj = ia64_info->root.dynobj;
+
+  if (elf_hash_table (info)->dynamic_sections_created)
+    {
+      Elf64_External_Dyn *dyncon, *dynconend;
+      asection *sdyn;
+      asection *unwind_sec;
+      bfd_vma gp_val;
+      unsigned int gp_seg;
+      bfd_vma gp_off;
+      Elf_Internal_Phdr *phdr;
+      Elf_Internal_Phdr *base_phdr;
+      unsigned int unwind_seg = 0;
+      unsigned int code_seg = 0;
+
+      sdyn = bfd_get_linker_section (dynobj, ".dynamic");
+      BFD_ASSERT (sdyn != NULL);
+      dyncon = (Elf64_External_Dyn *) sdyn->contents;
+      dynconend = (Elf64_External_Dyn *) (sdyn->contents + sdyn->size);
+
+      gp_val = _bfd_get_gp_value (abfd);
+      phdr = _bfd_elf_find_segment_containing_section
+        (info->output_bfd, ia64_info->pltoff_sec->output_section);
+      BFD_ASSERT (phdr != NULL);
+      base_phdr = elf_tdata (info->output_bfd)->phdr;
+      gp_seg = phdr - base_phdr;
+      gp_off = gp_val - phdr->p_vaddr;
+
+      unwind_sec = bfd_get_section_by_name (abfd, ELF_STRING_ia64_unwind);
+      if (unwind_sec != NULL)
+        {
+          asection *code_sec;
+
+          phdr = _bfd_elf_find_segment_containing_section (abfd, unwind_sec);
+          BFD_ASSERT (phdr != NULL);
+          unwind_seg = phdr - base_phdr;
+
+          code_sec = bfd_get_section_by_name (abfd, "$CODE$");
+          phdr = _bfd_elf_find_segment_containing_section (abfd, code_sec);
+          BFD_ASSERT (phdr != NULL);
+          code_seg = phdr - base_phdr;
+        }
+
+      for (; dyncon < dynconend; dyncon++)
+	{
+	  Elf_Internal_Dyn dyn;
+
+	  bfd_elf64_swap_dyn_in (dynobj, dyncon, &dyn);
+
+	  switch (dyn.d_tag)
+	    {
+            case DT_IA_64_VMS_FIXUP_RELA_OFF:
+              dyn.d_un.d_val +=
+                (ia64_info->fixups_sec->output_section->vma
+                 + ia64_info->fixups_sec->output_offset)
+                - (sdyn->output_section->vma + sdyn->output_offset);
+              break;
+
+            case DT_IA_64_VMS_PLTGOT_OFFSET:
+              dyn.d_un.d_val = gp_off;
+              break;
+
+            case DT_IA_64_VMS_PLTGOT_SEG:
+              dyn.d_un.d_val = gp_seg;
+              break;
+
+            case DT_IA_64_VMS_UNWINDSZ:
+              if (unwind_sec == NULL)
+                {
+                  dyn.d_tag = DT_NULL;
+                  dyn.d_un.d_val = 0xdead;
+                }
+              else
+                dyn.d_un.d_val = unwind_sec->size;
+              break;
+
+            case DT_IA_64_VMS_UNWIND_CODSEG:
+              dyn.d_un.d_val = code_seg;
+              break;
+
+            case DT_IA_64_VMS_UNWIND_INFOSEG:
+            case DT_IA_64_VMS_UNWIND_SEG:
+              dyn.d_un.d_val = unwind_seg;
+              break;
+
+            case DT_IA_64_VMS_UNWIND_OFFSET:
+              break;
+
+            default:
+              /* No need to rewrite the entry.  */
+              continue;
+	    }
+
+	  bfd_elf64_swap_dyn_out (abfd, &dyn, dyncon);
+	}
+    }
+
+  /* Handle transfer addresses.  */
+  {
+    asection *tfr_sec = ia64_info->transfer_sec;
+    struct elf64_vms_transfer *tfr;
+    struct elf_link_hash_entry *tfr3;
+
+    tfr = (struct elf64_vms_transfer *)tfr_sec->contents;
+    bfd_putl32 (6 * 8, tfr->size);
+    bfd_putl64 (tfr_sec->output_section->vma
+                + tfr_sec->output_offset
+                + 6 * 8, tfr->tfradr3);
+
+    tfr3 = elf_link_hash_lookup (elf_hash_table (info), "ELF$TFRADR", FALSE,
+                                 FALSE, FALSE);
+
+    if (tfr3
+        && (tfr3->root.type == bfd_link_hash_defined
+            || tfr3->root.type == bfd_link_hash_defweak))
+      {
+        asection *tfr3_sec = tfr3->root.u.def.section;
+        bfd_vma tfr3_val;
+
+        tfr3_val = (tfr3->root.u.def.value
+                    + tfr3_sec->output_section->vma
+                    + tfr3_sec->output_offset);
+
+        bfd_putl64 (tfr3_val, tfr->tfr3_func);
+        bfd_putl64 (_bfd_get_gp_value (info->output_bfd), tfr->tfr3_gp);
+      }
+
+    /* FIXME: set linker flags,
+       handle lib$initialize.  */
+  }
+
+  return TRUE;
+}
+
+/* ELF file flag handling:  */
+
+/* Function to keep IA-64 specific file flags.  */
+static bfd_boolean
+elf64_ia64_set_private_flags (bfd *abfd, flagword flags)
+{
+  BFD_ASSERT (!elf_flags_init (abfd)
+	      || elf_elfheader (abfd)->e_flags == flags);
+
+  elf_elfheader (abfd)->e_flags = flags;
+  elf_flags_init (abfd) = TRUE;
+  return TRUE;
+}
+
+/* Merge backend specific data from an object file to the output
+   object file when linking.  */
+static bfd_boolean
+elf64_ia64_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
+{
+  flagword out_flags;
+  flagword in_flags;
+  bfd_boolean ok = TRUE;
+
+  /* Don't even pretend to support mixed-format linking.  */
+  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
+      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
+    return FALSE;
+
+  in_flags  = elf_elfheader (ibfd)->e_flags;
+  out_flags = elf_elfheader (obfd)->e_flags;
+
+  if (! elf_flags_init (obfd))
+    {
+      elf_flags_init (obfd) = TRUE;
+      elf_elfheader (obfd)->e_flags = in_flags;
+
+      if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
+	  && bfd_get_arch_info (obfd)->the_default)
+	{
+	  return bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
+				    bfd_get_mach (ibfd));
+	}
+
+      return TRUE;
+    }
+
+  /* Check flag compatibility.  */
+  if (in_flags == out_flags)
+    return TRUE;
+
+  /* Output has EF_IA_64_REDUCEDFP set only if all inputs have it set.  */
+  if (!(in_flags & EF_IA_64_REDUCEDFP) && (out_flags & EF_IA_64_REDUCEDFP))
+    elf_elfheader (obfd)->e_flags &= ~EF_IA_64_REDUCEDFP;
+
+  if ((in_flags & EF_IA_64_TRAPNIL) != (out_flags & EF_IA_64_TRAPNIL))
+    {
+      (*_bfd_error_handler)
+	(_("%B: linking trap-on-NULL-dereference with non-trapping files"),
+	 ibfd);
+
+      bfd_set_error (bfd_error_bad_value);
+      ok = FALSE;
+    }
+  if ((in_flags & EF_IA_64_BE) != (out_flags & EF_IA_64_BE))
+    {
+      (*_bfd_error_handler)
+	(_("%B: linking big-endian files with little-endian files"),
+	 ibfd);
+
+      bfd_set_error (bfd_error_bad_value);
+      ok = FALSE;
+    }
+  if ((in_flags & EF_IA_64_ABI64) != (out_flags & EF_IA_64_ABI64))
+    {
+      (*_bfd_error_handler)
+	(_("%B: linking 64-bit files with 32-bit files"),
+	 ibfd);
+
+      bfd_set_error (bfd_error_bad_value);
+      ok = FALSE;
+    }
+  if ((in_flags & EF_IA_64_CONS_GP) != (out_flags & EF_IA_64_CONS_GP))
+    {
+      (*_bfd_error_handler)
+	(_("%B: linking constant-gp files with non-constant-gp files"),
+	 ibfd);
+
+      bfd_set_error (bfd_error_bad_value);
+      ok = FALSE;
+    }
+  if ((in_flags & EF_IA_64_NOFUNCDESC_CONS_GP)
+      != (out_flags & EF_IA_64_NOFUNCDESC_CONS_GP))
+    {
+      (*_bfd_error_handler)
+	(_("%B: linking auto-pic files with non-auto-pic files"),
+	 ibfd);
+
+      bfd_set_error (bfd_error_bad_value);
+      ok = FALSE;
+    }
+
+  return ok;
+}
+
+static bfd_boolean
+elf64_ia64_print_private_bfd_data (bfd *abfd, void * ptr)
+{
+  FILE *file = (FILE *) ptr;
+  flagword flags = elf_elfheader (abfd)->e_flags;
+
+  BFD_ASSERT (abfd != NULL && ptr != NULL);
+
+  fprintf (file, "private flags = %s%s%s%s%s%s%s%s\n",
+	   (flags & EF_IA_64_TRAPNIL) ? "TRAPNIL, " : "",
+	   (flags & EF_IA_64_EXT) ? "EXT, " : "",
+	   (flags & EF_IA_64_BE) ? "BE, " : "LE, ",
+	   (flags & EF_IA_64_REDUCEDFP) ? "REDUCEDFP, " : "",
+	   (flags & EF_IA_64_CONS_GP) ? "CONS_GP, " : "",
+	   (flags & EF_IA_64_NOFUNCDESC_CONS_GP) ? "NOFUNCDESC_CONS_GP, " : "",
+	   (flags & EF_IA_64_ABSOLUTE) ? "ABSOLUTE, " : "",
+	   (flags & EF_IA_64_ABI64) ? "ABI64" : "ABI32");
+
+  _bfd_elf_print_private_bfd_data (abfd, ptr);
+  return TRUE;
+}
+
+static enum elf_reloc_type_class
+elf64_ia64_reloc_type_class (const Elf_Internal_Rela *rela)
+{
+  switch ((int) ELF64_R_TYPE (rela->r_info))
+    {
+    case R_IA64_REL32MSB:
+    case R_IA64_REL32LSB:
+    case R_IA64_REL64MSB:
+    case R_IA64_REL64LSB:
+      return reloc_class_relative;
+    case R_IA64_IPLTMSB:
+    case R_IA64_IPLTLSB:
+      return reloc_class_plt;
+    case R_IA64_COPY:
+      return reloc_class_copy;
+    default:
+      return reloc_class_normal;
+    }
+}
+
+static const struct bfd_elf_special_section elf64_ia64_special_sections[] =
+{
+  { STRING_COMMA_LEN (".sbss"),  -1, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE + SHF_IA_64_SHORT },
+  { STRING_COMMA_LEN (".sdata"), -1, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_IA_64_SHORT },
+  { NULL,                    0,   0, 0,            0 }
+};
+
+static bfd_boolean
+elf64_ia64_object_p (bfd *abfd)
+{
+  asection *sec;
+  asection *group, *unwi, *unw;
+  flagword flags;
+  const char *name;
+  char *unwi_name, *unw_name;
+  bfd_size_type amt;
+
+  if (abfd->flags & DYNAMIC)
+    return TRUE;
+
+  /* Flags for fake group section.  */
+  flags = (SEC_LINKER_CREATED | SEC_GROUP | SEC_LINK_ONCE
+	   | SEC_EXCLUDE);
+
+  /* We add a fake section group for each .gnu.linkonce.t.* section,
+     which isn't in a section group, and its unwind sections.  */
+  for (sec = abfd->sections; sec != NULL; sec = sec->next)
+    {
+      if (elf_sec_group (sec) == NULL
+	  && ((sec->flags & (SEC_LINK_ONCE | SEC_CODE | SEC_GROUP))
+	      == (SEC_LINK_ONCE | SEC_CODE))
+	  && CONST_STRNEQ (sec->name, ".gnu.linkonce.t."))
+	{
+	  name = sec->name + 16;
+
+	  amt = strlen (name) + sizeof (".gnu.linkonce.ia64unwi.");
+	  unwi_name = bfd_alloc (abfd, amt);
+	  if (!unwi_name)
+	    return FALSE;
+
+	  strcpy (stpcpy (unwi_name, ".gnu.linkonce.ia64unwi."), name);
+	  unwi = bfd_get_section_by_name (abfd, unwi_name);
+
+	  amt = strlen (name) + sizeof (".gnu.linkonce.ia64unw.");
+	  unw_name = bfd_alloc (abfd, amt);
+	  if (!unw_name)
+	    return FALSE;
+
+	  strcpy (stpcpy (unw_name, ".gnu.linkonce.ia64unw."), name);
+	  unw = bfd_get_section_by_name (abfd, unw_name);
+
+	  /* We need to create a fake group section for it and its
+	     unwind sections.  */
+	  group = bfd_make_section_anyway_with_flags (abfd, name,
+						      flags);
+	  if (group == NULL)
+	    return FALSE;
+
+	  /* Move the fake group section to the beginning.  */
+	  bfd_section_list_remove (abfd, group);
+	  bfd_section_list_prepend (abfd, group);
+
+	  elf_next_in_group (group) = sec;
+
+	  elf_group_name (sec) = name;
+	  elf_next_in_group (sec) = sec;
+	  elf_sec_group (sec) = group;
+
+	  if (unwi)
+	    {
+	      elf_group_name (unwi) = name;
+	      elf_next_in_group (unwi) = sec;
+	      elf_next_in_group (sec) = unwi;
+	      elf_sec_group (unwi) = group;
+	    }
+
+	   if (unw)
+	     {
+	       elf_group_name (unw) = name;
+	       if (unwi)
+		 {
+		   elf_next_in_group (unw) = elf_next_in_group (unwi);
+		   elf_next_in_group (unwi) = unw;
+		 }
+	       else
+		 {
+		   elf_next_in_group (unw) = sec;
+		   elf_next_in_group (sec) = unw;
+		 }
+	       elf_sec_group (unw) = group;
+	     }
+
+	   /* Fake SHT_GROUP section header.  */
+	  elf_section_data (group)->this_hdr.bfd_section = group;
+	  elf_section_data (group)->this_hdr.sh_type = SHT_GROUP;
+	}
+    }
+  return TRUE;
+}
+
+/* Handle an IA-64 specific section when reading an object file.  This
+   is called when bfd_section_from_shdr finds a section with an unknown
+   type.  */
+
+static bfd_boolean
+elf64_vms_section_from_shdr (bfd *abfd,
+			     Elf_Internal_Shdr *hdr,
+			     const char *name,
+			     int shindex)
+{
+  flagword secflags = 0;
+
+  switch (hdr->sh_type)
+    {
+    case SHT_IA_64_VMS_TRACE:
+    case SHT_IA_64_VMS_DEBUG:
+    case SHT_IA_64_VMS_DEBUG_STR:
+      secflags = SEC_DEBUGGING;
+      break;
+
+    case SHT_IA_64_UNWIND:
+    case SHT_IA_64_HP_OPT_ANOT:
+      break;
+
+    case SHT_IA_64_EXT:
+      if (strcmp (name, ELF_STRING_ia64_archext) != 0)
+	return FALSE;
+      break;
+
+    default:
+      return FALSE;
+    }
+
+  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
+    return FALSE;
+
+  if (secflags != 0)
+    {
+      asection *newsect = hdr->bfd_section;
+
+      if (! bfd_set_section_flags
+          (abfd, newsect, bfd_get_section_flags (abfd, newsect) | secflags))
+	return FALSE;
+    }
+
+  return TRUE;
+}
+
+static bfd_boolean
+elf64_vms_object_p (bfd *abfd)
+{
+  Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
+  Elf_Internal_Phdr *i_phdr = elf_tdata (abfd)->phdr;
+  unsigned int i;
+  unsigned int num_text = 0;
+  unsigned int num_data = 0;
+  unsigned int num_rodata = 0;
+  char name[16];
+
+  if (!elf64_ia64_object_p (abfd))
+    return FALSE;
+
+  /* Many VMS compilers do not generate sections for the corresponding
+     segment.  This is boring as binutils tools won't be able to disassemble
+     the code.  So we simply create all the missing sections.  */
+  for (i = 0; i < i_ehdrp->e_phnum; i++, i_phdr++)
+    {
+      /* Is there a section for this segment?  */
+      bfd_vma base_vma = i_phdr->p_vaddr;
+      bfd_vma limit_vma = base_vma + i_phdr->p_filesz;
+
+      if (i_phdr->p_type != PT_LOAD)
+	continue;
+
+      /* We need to cover from base_vms to limit_vma.  */
+    again:
+      while (base_vma < limit_vma)
+	{
+	  bfd_vma next_vma = limit_vma;
+	  asection *nsec;
+	  asection *sec;
+	  flagword flags;
+	  char *nname = NULL;
+
+	  /* Find a section covering [base_vma;limit_vma)  */
+	  for (sec = abfd->sections; sec != NULL; sec = sec->next)
+	    {
+	      /* Skip uninteresting sections (either not in memory or
+		 below base_vma.  */
+	      if ((sec->flags & (SEC_ALLOC | SEC_LOAD)) == 0
+		  || sec->vma + sec->size <= base_vma)
+		continue;
+	      if (sec->vma <= base_vma)
+		{
+		  /* This section covers (maybe partially) the beginning
+		     of the range.  */
+		  base_vma = sec->vma + sec->size;
+		  goto again;
+		}
+	      if (sec->vma < next_vma)
+		{
+		  /* This section partially covers the end of the range.
+		     Used to compute the size of the hole.  */
+		  next_vma = sec->vma;
+		}
+	    }
+
+	  /* No section covering [base_vma; next_vma).  Create a fake one.  */
+	  flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS;
+	  if (i_phdr->p_flags & PF_X)
+	    {
+	      flags |= SEC_CODE;
+	      if (num_text++ == 0)
+		nname = ".text";
+	      else
+		sprintf (name, ".text$%u", num_text);
+	    }
+	  else if ((i_phdr->p_flags & (PF_R | PF_W)) == PF_R)
+	    {
+	      flags |= SEC_READONLY;
+	      sprintf (name, ".rodata$%u", num_rodata++);
+	    }
+	  else
+	    {
+	      flags |= SEC_DATA;
+	      sprintf (name, ".data$%u", num_data++);
+	    }
+
+	  /* Allocate name.  */
+	  if (nname == NULL)
+	    {
+	      size_t name_len = strlen (name) + 1;
+	      nname = bfd_alloc (abfd, name_len);
+	      if (nname == NULL)
+		return FALSE;
+	      memcpy (nname, name, name_len);
+	    }
+
+	  /* Create and fill new section.  */
+	  nsec = bfd_make_section_anyway_with_flags (abfd, nname, flags);
+	  if (nsec == NULL)
+	    return FALSE;
+	  nsec->vma = base_vma;
+	  nsec->size = next_vma - base_vma;
+	  nsec->filepos = i_phdr->p_offset + (base_vma - i_phdr->p_vaddr);
+
+	  base_vma = next_vma;
+	}
+    }
+  return TRUE;
+}
+
+static void
+elf64_vms_post_process_headers (bfd *abfd,
+				struct bfd_link_info *info ATTRIBUTE_UNUSED)
+{
+  Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
+
+  i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_OPENVMS;
+  i_ehdrp->e_ident[EI_ABIVERSION] = 2;
+}
+
+static bfd_boolean
+elf64_vms_section_processing (bfd *abfd ATTRIBUTE_UNUSED,
+			      Elf_Internal_Shdr *hdr)
+{
+  if (hdr->bfd_section != NULL)
+    {
+      const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
+
+      if (strcmp (name, ".text") == 0)
+	hdr->sh_flags |= SHF_IA_64_VMS_SHARED;
+      else if ((strcmp (name, ".debug") == 0)
+	    || (strcmp (name, ".debug_abbrev") == 0)
+	    || (strcmp (name, ".debug_aranges") == 0)
+	    || (strcmp (name, ".debug_frame") == 0)
+	    || (strcmp (name, ".debug_info") == 0)
+	    || (strcmp (name, ".debug_loc") == 0)
+	    || (strcmp (name, ".debug_macinfo") == 0)
+	    || (strcmp (name, ".debug_pubnames") == 0)
+	    || (strcmp (name, ".debug_pubtypes") == 0))
+	hdr->sh_type = SHT_IA_64_VMS_DEBUG;
+      else if ((strcmp (name, ".debug_line") == 0)
+	    || (strcmp (name, ".debug_ranges") == 0)
+	    || (strcmp (name, ".trace_info") == 0)
+	    || (strcmp (name, ".trace_abbrev") == 0)
+	    || (strcmp (name, ".trace_aranges") == 0))
+	hdr->sh_type = SHT_IA_64_VMS_TRACE;
+      else if (strcmp (name, ".debug_str") == 0)
+	hdr->sh_type = SHT_IA_64_VMS_DEBUG_STR;
+    }
+
+  return TRUE;
+}
+
+/* The final processing done just before writing out a VMS IA-64 ELF
+   object file.  */
+
+static void
+elf64_vms_final_write_processing (bfd *abfd,
+				  bfd_boolean linker ATTRIBUTE_UNUSED)
+{
+  Elf_Internal_Shdr *hdr;
+  asection *s;
+  int unwind_info_sect_idx = 0;
+
+  for (s = abfd->sections; s; s = s->next)
+    {
+      hdr = &elf_section_data (s)->this_hdr;
+
+      if (strcmp (bfd_get_section_name (abfd, hdr->bfd_section),
+		  ".IA_64.unwind_info") == 0)
+	unwind_info_sect_idx = elf_section_data (s)->this_idx;
+
+      switch (hdr->sh_type)
+	{
+	case SHT_IA_64_UNWIND:
+	  /* VMS requires sh_info to point to the unwind info section.  */
+          hdr->sh_info = unwind_info_sect_idx;
+	  break;
+	}
+    }
+
+  if (! elf_flags_init (abfd))
+    {
+      unsigned long flags = 0;
+
+      if (abfd->xvec->byteorder == BFD_ENDIAN_BIG)
+	flags |= EF_IA_64_BE;
+      if (bfd_get_mach (abfd) == bfd_mach_ia64_elf64)
+	flags |= EF_IA_64_ABI64;
+
+      elf_elfheader (abfd)->e_flags = flags;
+      elf_flags_init (abfd) = TRUE;
+    }
+}
+
+static bfd_boolean
+elf64_vms_write_shdrs_and_ehdr (bfd *abfd)
+{
+  unsigned char needed_count[8];
+
+  if (!bfd_elf64_write_shdrs_and_ehdr (abfd))
+    return FALSE;
+
+  bfd_putl64 (elf_ia64_vms_tdata (abfd)->needed_count, needed_count);
+
+  if (bfd_seek (abfd, sizeof (Elf64_External_Ehdr), SEEK_SET) != 0
+      || bfd_bwrite (needed_count, 8, abfd) != 8)
+    return FALSE;
+
+  return TRUE;
+}
+
+static bfd_boolean
+elf64_vms_close_and_cleanup (bfd *abfd)
+{
+  if (bfd_get_format (abfd) == bfd_object)
+    {
+      long isize;
+
+      /* Pad to 8 byte boundary for IPF/VMS.  */
+      isize = bfd_get_size (abfd);
+      if ((isize & 7) != 0)
+	{
+	  int ishort = 8 - (isize & 7);
+          bfd_uint64_t pad = 0;
+
+	  bfd_seek (abfd, isize, SEEK_SET);
+	  bfd_bwrite (&pad, ishort, abfd);
+	}
+    }
+
+  return _bfd_elf_close_and_cleanup (abfd);
+}
+
+/* Add symbols from an ELF object file to the linker hash table.  */
+
+static bfd_boolean
+elf64_vms_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
+{
+  Elf_Internal_Shdr *hdr;
+  bfd_size_type symcount;
+  bfd_size_type extsymcount;
+  bfd_size_type extsymoff;
+  struct elf_link_hash_entry **sym_hash;
+  bfd_boolean dynamic;
+  Elf_Internal_Sym *isymbuf = NULL;
+  Elf_Internal_Sym *isym;
+  Elf_Internal_Sym *isymend;
+  const struct elf_backend_data *bed;
+  struct elf_link_hash_table *htab;
+  bfd_size_type amt;
+
+  htab = elf_hash_table (info);
+  bed = get_elf_backend_data (abfd);
+
+  if ((abfd->flags & DYNAMIC) == 0)
+    dynamic = FALSE;
+  else
+    {
+      dynamic = TRUE;
+
+      /* You can't use -r against a dynamic object.  Also, there's no
+	 hope of using a dynamic object which does not exactly match
+	 the format of the output file.  */
+      if (info->relocatable
+	  || !is_elf_hash_table (htab)
+	  || info->output_bfd->xvec != abfd->xvec)
+	{
+	  if (info->relocatable)
+	    bfd_set_error (bfd_error_invalid_operation);
+	  else
+	    bfd_set_error (bfd_error_wrong_format);
+	  goto error_return;
+	}
+    }
+
+  if (! dynamic)
+    {
+      /* If we are creating a shared library, create all the dynamic
+	 sections immediately.  We need to attach them to something,
+	 so we attach them to this BFD, provided it is the right
+	 format.  FIXME: If there are no input BFD's of the same
+	 format as the output, we can't make a shared library.  */
+      if (info->shared
+	  && is_elf_hash_table (htab)
+	  && info->output_bfd->xvec == abfd->xvec
+	  && !htab->dynamic_sections_created)
+	{
+	  if (! elf64_ia64_create_dynamic_sections (abfd, info))
+	    goto error_return;
+	}
+    }
+  else if (!is_elf_hash_table (htab))
+    goto error_return;
+  else
+    {
+      asection *s;
+      bfd_byte *dynbuf;
+      bfd_byte *extdyn;
+
+      /* ld --just-symbols and dynamic objects don't mix very well.
+	 ld shouldn't allow it.  */
+      if ((s = abfd->sections) != NULL
+	  && s->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
+	abort ();
+
+      /* Be sure there are dynamic sections.  */
+      if (! elf64_ia64_create_dynamic_sections (htab->dynobj, info))
+        goto error_return;
+
+      s = bfd_get_section_by_name (abfd, ".dynamic");
+      if (s == NULL)
+        {
+          /* VMS libraries do not have dynamic sections.  Create one from
+             the segment.  */
+          Elf_Internal_Phdr *phdr;
+          unsigned int i, phnum;
+
+          phdr = elf_tdata (abfd)->phdr;
+          if (phdr == NULL)
+            goto error_return;
+          phnum = elf_elfheader (abfd)->e_phnum;
+          for (i = 0; i < phnum; phdr++)
+            if (phdr->p_type == PT_DYNAMIC)
+              {
+                s = bfd_make_section (abfd, ".dynamic");
+                if (s == NULL)
+                  goto error_return;
+                s->vma = phdr->p_vaddr;
+                s->lma = phdr->p_paddr;
+                s->size = phdr->p_filesz;
+                s->filepos = phdr->p_offset;
+                s->flags |= SEC_HAS_CONTENTS;
+                s->alignment_power = bfd_log2 (phdr->p_align);
+                break;
+              }
+          if (s == NULL)
+            goto error_return;
+        }
+
+      /* Extract IDENT.  */
+      if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
+        {
+error_free_dyn:
+          free (dynbuf);
+          goto error_return;
+        }
+
+      for (extdyn = dynbuf;
+           extdyn < dynbuf + s->size;
+           extdyn += bed->s->sizeof_dyn)
+        {
+          Elf_Internal_Dyn dyn;
+
+          bed->s->swap_dyn_in (abfd, extdyn, &dyn);
+          if (dyn.d_tag == DT_IA_64_VMS_IDENT)
+            {
+              bfd_uint64_t tagv = dyn.d_un.d_val;
+              elf_ia64_vms_ident (abfd) = tagv;
+              break;
+            }
+        }
+      if (extdyn >= dynbuf + s->size)
+        {
+          /* Ident not found.  */
+          goto error_free_dyn;
+        }
+      free (dynbuf);
+
+      /* We do not want to include any of the sections in a dynamic
+	 object in the output file.  We hack by simply clobbering the
+	 list of sections in the BFD.  This could be handled more
+	 cleanly by, say, a new section flag; the existing
+	 SEC_NEVER_LOAD flag is not the one we want, because that one
+	 still implies that the section takes up space in the output
+	 file.  */
+      bfd_section_list_clear (abfd);
+
+      /* FIXME: should we detect if this library is already included ?
+         This should be harmless and shouldn't happen in practice.  */
+    }
+
+  hdr = &elf_tdata (abfd)->symtab_hdr;
+  symcount = hdr->sh_size / bed->s->sizeof_sym;
+
+  /* The sh_info field of the symtab header tells us where the
+     external symbols start.  We don't care about the local symbols at
+     this point.  */
+  extsymcount = symcount - hdr->sh_info;
+  extsymoff = hdr->sh_info;
+
+  sym_hash = NULL;
+  if (extsymcount != 0)
+    {
+      isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
+				      NULL, NULL, NULL);
+      if (isymbuf == NULL)
+	goto error_return;
+
+      /* We store a pointer to the hash table entry for each external
+	 symbol.  */
+      amt = extsymcount * sizeof (struct elf_link_hash_entry *);
+      sym_hash = (struct elf_link_hash_entry **) bfd_alloc (abfd, amt);
+      if (sym_hash == NULL)
+	goto error_free_sym;
+      elf_sym_hashes (abfd) = sym_hash;
+    }
+
+  for (isym = isymbuf, isymend = isymbuf + extsymcount;
+       isym < isymend;
+       isym++, sym_hash++)
+    {
+      int bind;
+      bfd_vma value;
+      asection *sec, *new_sec;
+      flagword flags;
+      const char *name;
+      struct elf_link_hash_entry *h;
+      bfd_boolean definition;
+      bfd_boolean size_change_ok;
+      bfd_boolean type_change_ok;
+      bfd_boolean common;
+      unsigned int old_alignment;
+      bfd *old_bfd;
+
+      flags = BSF_NO_FLAGS;
+      sec = NULL;
+      value = isym->st_value;
+      *sym_hash = NULL;
+      common = bed->common_definition (isym);
+
+      bind = ELF_ST_BIND (isym->st_info);
+      switch (bind)
+	{
+	case STB_LOCAL:
+	  /* This should be impossible, since ELF requires that all
+	     global symbols follow all local symbols, and that sh_info
+	     point to the first global symbol.  Unfortunately, Irix 5
+	     screws this up.  */
+	  continue;
+
+	case STB_GLOBAL:
+	  if (isym->st_shndx != SHN_UNDEF && !common)
+	    flags = BSF_GLOBAL;
+	  break;
+
+	case STB_WEAK:
+	  flags = BSF_WEAK;
+	  break;
+
+	case STB_GNU_UNIQUE:
+	  flags = BSF_GNU_UNIQUE;
+	  break;
+
+	default:
+	  /* Leave it up to the processor backend.  */
+	  break;
+	}
+
+      if (isym->st_shndx == SHN_UNDEF)
+	sec = bfd_und_section_ptr;
+      else if (isym->st_shndx == SHN_ABS)
+	sec = bfd_abs_section_ptr;
+      else if (isym->st_shndx == SHN_COMMON)
+	{
+	  sec = bfd_com_section_ptr;
+	  /* What ELF calls the size we call the value.  What ELF
+	     calls the value we call the alignment.  */
+	  value = isym->st_size;
+	}
+      else
+	{
+	  sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
+	  if (sec == NULL)
+	    sec = bfd_abs_section_ptr;
+	  else if (sec->kept_section)
+	    {
+	      /* Symbols from discarded section are undefined.  We keep
+		 its visibility.  */
+	      sec = bfd_und_section_ptr;
+	      isym->st_shndx = SHN_UNDEF;
+	    }
+	  else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
+	    value -= sec->vma;
+	}
+
+      name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
+					      isym->st_name);
+      if (name == NULL)
+	goto error_free_vers;
+
+      if (bed->elf_add_symbol_hook)
+	{
+	  if (! (*bed->elf_add_symbol_hook) (abfd, info, isym, &name, &flags,
+					     &sec, &value))
+	    goto error_free_vers;
+
+	  /* The hook function sets the name to NULL if this symbol
+	     should be skipped for some reason.  */
+	  if (name == NULL)
+	    continue;
+	}
+
+      /* Sanity check that all possibilities were handled.  */
+      if (sec == NULL)
+	{
+	  bfd_set_error (bfd_error_bad_value);
+	  goto error_free_vers;
+	}
+
+      if (bfd_is_und_section (sec)
+	  || bfd_is_com_section (sec))
+	definition = FALSE;
+      else
+	definition = TRUE;
+
+      size_change_ok = FALSE;
+      type_change_ok = bed->type_change_ok;
+      old_alignment = 0;
+      old_bfd = NULL;
+      new_sec = sec;
+
+      if (! bfd_is_und_section (sec))
+        h = elf_link_hash_lookup (htab, name, TRUE, FALSE, FALSE);
+      else
+        h = ((struct elf_link_hash_entry *) bfd_wrapped_link_hash_lookup
+             (abfd, info, name, TRUE, FALSE, FALSE));
+      if (h == NULL)
+        goto error_free_sym;
+
+      *sym_hash = h;
+
+      if (is_elf_hash_table (htab))
+	{
+	  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;
+
+	  /* Remember the old alignment if this is a common symbol, so
+	     that we don't reduce the alignment later on.  We can't
+	     check later, because _bfd_generic_link_add_one_symbol
+	     will set a default for the alignment which we want to
+	     override. We also remember the old bfd where the existing
+	     definition comes from.  */
+	  switch (h->root.type)
+	    {
+	    default:
+	      break;
+
+	    case bfd_link_hash_defined:
+              if (abfd->selective_search)
+                continue;
+              /* Fall-through.  */
+	    case bfd_link_hash_defweak:
+	      old_bfd = h->root.u.def.section->owner;
+	      break;
+
+	    case bfd_link_hash_common:
+	      old_bfd = h->root.u.c.p->section->owner;
+	      old_alignment = h->root.u.c.p->alignment_power;
+	      break;
+	    }
+	}
+
+      if (! (_bfd_generic_link_add_one_symbol
+	     (info, abfd, name, flags, sec, value, NULL, FALSE, bed->collect,
+	      (struct bfd_link_hash_entry **) sym_hash)))
+	goto error_free_vers;
+
+      h = *sym_hash;
+      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;
+
+      *sym_hash = h;
+      h->unique_global = (flags & BSF_GNU_UNIQUE) != 0;
+
+      /* Set the alignment of a common symbol.  */
+      if ((common || bfd_is_com_section (sec))
+	  && h->root.type == bfd_link_hash_common)
+	{
+	  unsigned int align;
+
+	  if (common)
+	    align = bfd_log2 (isym->st_value);
+	  else
+	    {
+	      /* The new symbol is a common symbol in a shared object.
+		 We need to get the alignment from the section.  */
+	      align = new_sec->alignment_power;
+	    }
+	  if (align > old_alignment
+	      /* Permit an alignment power of zero if an alignment of one
+		 is specified and no other alignments have been specified.  */
+	      || (isym->st_value == 1 && old_alignment == 0))
+	    h->root.u.c.p->alignment_power = align;
+	  else
+	    h->root.u.c.p->alignment_power = old_alignment;
+	}
+
+      if (is_elf_hash_table (htab))
+	{
+	  /* Check the alignment when a common symbol is involved. This
+	     can change when a common symbol is overridden by a normal
+	     definition or a common symbol is ignored due to the old
+	     normal definition. We need to make sure the maximum
+	     alignment is maintained.  */
+	  if ((old_alignment || common)
+	      && h->root.type != bfd_link_hash_common)
+	    {
+	      unsigned int common_align;
+	      unsigned int normal_align;
+	      unsigned int symbol_align;
+	      bfd *normal_bfd;
+	      bfd *common_bfd;
+
+	      symbol_align = ffs (h->root.u.def.value) - 1;
+	      if (h->root.u.def.section->owner != NULL
+		  && (h->root.u.def.section->owner->flags & DYNAMIC) == 0)
+		{
+		  normal_align = h->root.u.def.section->alignment_power;
+		  if (normal_align > symbol_align)
+		    normal_align = symbol_align;
+		}
+	      else
+		normal_align = symbol_align;
+
+	      if (old_alignment)
+		{
+		  common_align = old_alignment;
+		  common_bfd = old_bfd;
+		  normal_bfd = abfd;
+		}
+	      else
+		{
+		  common_align = bfd_log2 (isym->st_value);
+		  common_bfd = abfd;
+		  normal_bfd = old_bfd;
+		}
+
+	      if (normal_align < common_align)
+		{
+		  /* PR binutils/2735 */
+		  if (normal_bfd == NULL)
+		    (*_bfd_error_handler)
+		      (_("Warning: alignment %u of common symbol `%s' in %B"
+			 " is greater than the alignment (%u) of its section %A"),
+		       common_bfd, h->root.u.def.section,
+		       1 << common_align, name, 1 << normal_align);
+		  else
+		    (*_bfd_error_handler)
+		      (_("Warning: alignment %u of symbol `%s' in %B"
+			 " is smaller than %u in %B"),
+		       normal_bfd, common_bfd,
+		       1 << normal_align, name, 1 << common_align);
+		}
+	    }
+
+	  /* Remember the symbol size if it isn't undefined.  */
+	  if ((isym->st_size != 0 && isym->st_shndx != SHN_UNDEF)
+	      && (definition || h->size == 0))
+	    {
+	      if (h->size != 0
+		  && h->size != isym->st_size
+		  && ! size_change_ok)
+		(*_bfd_error_handler)
+		  (_("Warning: size of symbol `%s' changed"
+		     " from %lu in %B to %lu in %B"),
+		   old_bfd, abfd,
+		   name, (unsigned long) h->size,
+		   (unsigned long) isym->st_size);
+
+	      h->size = isym->st_size;
+	    }
+
+	  /* If this is a common symbol, then we always want H->SIZE
+	     to be the size of the common symbol.  The code just above
+	     won't fix the size if a common symbol becomes larger.  We
+	     don't warn about a size change here, because that is
+	     covered by --warn-common.  Allow changed between different
+	     function types.  */
+	  if (h->root.type == bfd_link_hash_common)
+	    h->size = h->root.u.c.size;
+
+	  if (ELF_ST_TYPE (isym->st_info) != STT_NOTYPE
+	      && (definition || h->type == STT_NOTYPE))
+	    {
+	      unsigned int type = ELF_ST_TYPE (isym->st_info);
+
+	      if (h->type != type)
+		{
+		  if (h->type != STT_NOTYPE && ! type_change_ok)
+		    (*_bfd_error_handler)
+		      (_("Warning: type of symbol `%s' changed"
+			 " from %d to %d in %B"),
+		       abfd, name, h->type, type);
+
+		  h->type = type;
+		}
+	    }
+
+	  /* Set a flag in the hash table entry indicating the type of
+	     reference or definition we just found.  Keep a count of
+	     the number of dynamic symbols we find.  A dynamic symbol
+	     is one which is referenced or defined by both a regular
+	     object and a shared object.  */
+	  if (! dynamic)
+	    {
+	      if (! definition)
+		{
+		  h->ref_regular = 1;
+		  if (bind != STB_WEAK)
+		    h->ref_regular_nonweak = 1;
+		}
+	      else
+		{
+                  BFD_ASSERT (!h->def_dynamic);
+		  h->def_regular = 1;
+		}
+	    }
+	  else
+	    {
+	      BFD_ASSERT (definition);
+              h->def_dynamic = 1;
+              h->dynindx = -2;
+              ((struct elf64_ia64_link_hash_entry *)h)->shl = abfd;
+	    }
+	}
+    }
+
+  if (isymbuf != NULL)
+    {
+      free (isymbuf);
+      isymbuf = NULL;
+    }
+
+  /* If this object is the same format as the output object, and it is
+     not a shared library, then let the backend look through the
+     relocs.
+
+     This is required to build global offset table entries and to
+     arrange for dynamic relocs.  It is not required for the
+     particular common case of linking non PIC code, even when linking
+     against shared libraries, but unfortunately there is no way of
+     knowing whether an object file has been compiled PIC or not.
+     Looking through the relocs is not particularly time consuming.
+     The problem is that we must either (1) keep the relocs in memory,
+     which causes the linker to require additional runtime memory or
+     (2) read the relocs twice from the input file, which wastes time.
+     This would be a good case for using mmap.
+
+     I have no idea how to handle linking PIC code into a file of a
+     different format.  It probably can't be done.  */
+  if (! dynamic
+      && is_elf_hash_table (htab)
+      && bed->check_relocs != NULL
+      && (*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec))
+    {
+      asection *o;
+
+      for (o = abfd->sections; o != NULL; o = o->next)
+	{
+	  Elf_Internal_Rela *internal_relocs;
+	  bfd_boolean ok;
+
+	  if ((o->flags & SEC_RELOC) == 0
+	      || o->reloc_count == 0
+	      || ((info->strip == strip_all || info->strip == strip_debugger)
+		  && (o->flags & SEC_DEBUGGING) != 0)
+	      || bfd_is_abs_section (o->output_section))
+	    continue;
+
+	  internal_relocs = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
+						       info->keep_memory);
+	  if (internal_relocs == NULL)
+	    goto error_return;
+
+	  ok = (*bed->check_relocs) (abfd, info, o, internal_relocs);
+
+	  if (elf_section_data (o)->relocs != internal_relocs)
+	    free (internal_relocs);
+
+	  if (! ok)
+	    goto error_return;
+	}
+    }
+
+  return TRUE;
+
+ error_free_vers:
+ error_free_sym:
+  if (isymbuf != NULL)
+    free (isymbuf);
+ error_return:
+  return FALSE;
+}
+
+static bfd_boolean
+elf64_vms_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
+{
+  int pass;
+  struct bfd_link_hash_entry **pundef;
+  struct bfd_link_hash_entry **next_pundef;
+
+  /* We only accept VMS libraries.  */
+  if (info->output_bfd->xvec != abfd->xvec)
+    {
+      bfd_set_error (bfd_error_wrong_format);
+      return FALSE;
+    }
+
+  /* The archive_pass field in the archive itself is used to
+     initialize PASS, since we may search the same archive multiple
+     times.  */
+  pass = ++abfd->archive_pass;
+
+  /* Look through the list of undefined symbols.  */
+  for (pundef = &info->hash->undefs; *pundef != NULL; pundef = next_pundef)
+    {
+      struct bfd_link_hash_entry *h;
+      symindex symidx;
+      bfd *element;
+      bfd *orig_element;
+
+      h = *pundef;
+      next_pundef = &(*pundef)->u.undef.next;
+
+      /* When a symbol is defined, it is not necessarily removed from
+	 the list.  */
+      if (h->type != bfd_link_hash_undefined
+	  && h->type != bfd_link_hash_common)
+	{
+	  /* Remove this entry from the list, for general cleanliness
+	     and because we are going to look through the list again
+	     if we search any more libraries.  We can't remove the
+	     entry if it is the tail, because that would lose any
+	     entries we add to the list later on.  */
+	  if (*pundef != info->hash->undefs_tail)
+            {
+              *pundef = *next_pundef;
+              next_pundef = pundef;
+            }
+	  continue;
+	}
+
+      /* Look for this symbol in the archive hash table.  */
+      symidx = _bfd_vms_lib_find_symbol (abfd, h->root.string);
+      if (symidx == BFD_NO_MORE_SYMBOLS)
+	{
+	  /* Nothing in this slot.  */
+	  continue;
+	}
+
+      element = bfd_get_elt_at_index (abfd, symidx);
+      if (element == NULL)
+	return FALSE;
+
+      if (element->archive_pass == -1 || element->archive_pass == pass)
+        {
+          /* Next symbol if this archive is wrong or already handled.  */
+          continue;
+        }
+
+      orig_element = element;
+      if (bfd_is_thin_archive (abfd))
+        {
+          element = _bfd_vms_lib_get_imagelib_file (element);
+          if (element == NULL || !bfd_check_format (element, bfd_object))
+            {
+              orig_element->archive_pass = -1;
+              return FALSE;
+            }
+        }
+      else if (! bfd_check_format (element, bfd_object))
+        {
+          element->archive_pass = -1;
+          return FALSE;
+        }
+
+      /* Unlike the generic linker, we know that this element provides
+	 a definition for an undefined symbol and we know that we want
+	 to include it.  We don't need to check anything.  */
+      if (! (*info->callbacks->add_archive_element) (info, element,
+                                                     h->root.string, &element))
+	return FALSE;
+      if (! elf64_vms_link_add_object_symbols (element, info))
+	return FALSE;
+
+      orig_element->archive_pass = pass;
+    }
+
+  return TRUE;
+}
+
+static bfd_boolean
+elf64_vms_bfd_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
+{
+  switch (bfd_get_format (abfd))
+    {
+    case bfd_object:
+      return elf64_vms_link_add_object_symbols (abfd, info);
+      break;
+    case bfd_archive:
+      return elf64_vms_link_add_archive_symbols (abfd, info);
+      break;
+    default:
+      bfd_set_error (bfd_error_wrong_format);
+      return FALSE;
+    }
+}
+
+static bfd_boolean
+elf64_ia64_vms_mkobject (bfd *abfd)
+{
+  return bfd_elf_allocate_object
+    (abfd, sizeof (struct elf64_ia64_vms_obj_tdata), IA64_ELF_DATA);
+}
+
+
+/* Size-dependent data and functions.  */
+static const struct elf_size_info elf64_ia64_vms_size_info = {
+  sizeof (Elf64_External_VMS_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),
+  4,
+  1,
+  64, 3, /* ARCH_SIZE, LOG_FILE_ALIGN */
+  ELFCLASS64, EV_CURRENT,
+  bfd_elf64_write_out_phdrs,
+  elf64_vms_write_shdrs_and_ehdr,
+  bfd_elf64_checksum_contents,
+  bfd_elf64_write_relocs,
+  bfd_elf64_swap_symbol_in,
+  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,
+  bfd_elf64_swap_reloc_in,
+  bfd_elf64_swap_reloc_out,
+  bfd_elf64_swap_reloca_in,
+  bfd_elf64_swap_reloca_out
+};
+
+#define ELF_ARCH			bfd_arch_ia64
+#define ELF_MACHINE_CODE		EM_IA_64
+#define ELF_MAXPAGESIZE			0x10000	/* 64KB */
+#define ELF_COMMONPAGESIZE		0x200	/* 16KB */
+
+#define elf_backend_section_from_shdr \
+	elf64_ia64_section_from_shdr
+#define elf_backend_section_flags \
+	elf64_ia64_section_flags
+#define elf_backend_fake_sections \
+	elf64_ia64_fake_sections
+#define elf_backend_final_write_processing \
+	elf64_ia64_final_write_processing
+#define elf_backend_add_symbol_hook \
+	elf64_ia64_add_symbol_hook
+#define elf_info_to_howto \
+	elf64_ia64_info_to_howto
+
+#define bfd_elf64_bfd_reloc_type_lookup \
+	ia64_elf_reloc_type_lookup
+#define bfd_elf64_bfd_reloc_name_lookup \
+	ia64_elf_reloc_name_lookup
+#define bfd_elf64_bfd_is_local_label_name \
+	elf64_ia64_is_local_label_name
+#define bfd_elf64_bfd_relax_section \
+	elf64_ia64_relax_section
+
+#define elf_backend_object_p \
+	elf64_ia64_object_p
+
+/* Stuff for the BFD linker: */
+#define bfd_elf64_bfd_link_hash_table_create \
+	elf64_ia64_hash_table_create
+#define bfd_elf64_bfd_link_hash_table_free \
+	elf64_ia64_hash_table_free
+#define elf_backend_create_dynamic_sections \
+	elf64_ia64_create_dynamic_sections
+#define elf_backend_check_relocs \
+	elf64_ia64_check_relocs
+#define elf_backend_adjust_dynamic_symbol \
+	elf64_ia64_adjust_dynamic_symbol
+#define elf_backend_size_dynamic_sections \
+	elf64_ia64_size_dynamic_sections
+#define elf_backend_omit_section_dynsym \
+  ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true)
+#define elf_backend_relocate_section \
+	elf64_ia64_relocate_section
+#define elf_backend_finish_dynamic_symbol \
+	elf64_ia64_finish_dynamic_symbol
+#define elf_backend_finish_dynamic_sections \
+	elf64_ia64_finish_dynamic_sections
+#define bfd_elf64_bfd_final_link \
+	elf64_ia64_final_link
+
+#define bfd_elf64_bfd_merge_private_bfd_data \
+	elf64_ia64_merge_private_bfd_data
+#define bfd_elf64_bfd_set_private_flags \
+	elf64_ia64_set_private_flags
+#define bfd_elf64_bfd_print_private_bfd_data \
+	elf64_ia64_print_private_bfd_data
+
+#define elf_backend_plt_readonly	1
+#define elf_backend_want_plt_sym	0
+#define elf_backend_plt_alignment	5
+#define elf_backend_got_header_size	0
+#define elf_backend_want_got_plt	1
+#define elf_backend_may_use_rel_p	1
+#define elf_backend_may_use_rela_p	1
+#define elf_backend_default_use_rela_p	1
+#define elf_backend_want_dynbss		0
+#define elf_backend_hide_symbol		elf64_ia64_hash_hide_symbol
+#define elf_backend_fixup_symbol	_bfd_elf_link_hash_fixup_symbol
+#define elf_backend_reloc_type_class	elf64_ia64_reloc_type_class
+#define elf_backend_rela_normal		1
+#define elf_backend_special_sections	elf64_ia64_special_sections
+#define elf_backend_default_execstack	0
+
+/* FIXME: PR 290: The Intel C compiler generates SHT_IA_64_UNWIND with
+   SHF_LINK_ORDER. But it doesn't set the sh_link or sh_info fields.
+   We don't want to flood users with so many error messages. We turn
+   off the warning for now. It will be turned on later when the Intel
+   compiler is fixed.   */
+#define elf_backend_link_order_error_handler NULL
+
+/* VMS-specific vectors.  */
+
+#undef  TARGET_LITTLE_SYM
+#define TARGET_LITTLE_SYM		bfd_elf64_ia64_vms_vec
+#undef  TARGET_LITTLE_NAME
+#define TARGET_LITTLE_NAME		"elf64-ia64-vms"
+#undef  TARGET_BIG_SYM
+#undef  TARGET_BIG_NAME
+
+/* These are VMS specific functions.  */
+
+#undef  elf_backend_object_p
+#define elf_backend_object_p elf64_vms_object_p
+
+#undef  elf_backend_section_from_shdr
+#define elf_backend_section_from_shdr elf64_vms_section_from_shdr
+
+#undef  elf_backend_post_process_headers
+#define elf_backend_post_process_headers elf64_vms_post_process_headers
+
+#undef  elf_backend_section_processing
+#define elf_backend_section_processing elf64_vms_section_processing
+
+#undef  elf_backend_final_write_processing
+#define elf_backend_final_write_processing elf64_vms_final_write_processing
+
+#undef  bfd_elf64_close_and_cleanup
+#define bfd_elf64_close_and_cleanup elf64_vms_close_and_cleanup
+
+#undef  elf_backend_section_from_bfd_section
+
+#undef  elf_backend_symbol_processing
+
+#undef  elf_backend_want_p_paddr_set_to_zero
+
+#undef  ELF_OSABI
+#define ELF_OSABI			ELFOSABI_OPENVMS
+
+#undef  ELF_MAXPAGESIZE
+#define ELF_MAXPAGESIZE			0x10000	/* 64KB */
+
+#undef  elf64_bed
+#define elf64_bed elf64_ia64_vms_bed
+
+#define elf_backend_size_info elf64_ia64_vms_size_info
+
+/* Use VMS-style archives (in particular, don't use the standard coff
+   archive format).  */
+#define bfd_elf64_archive_functions
+
+#undef bfd_elf64_archive_p
+#define bfd_elf64_archive_p _bfd_vms_lib_ia64_archive_p
+#undef bfd_elf64_write_archive_contents
+#define bfd_elf64_write_archive_contents _bfd_vms_lib_write_archive_contents
+#undef bfd_elf64_mkarchive
+#define bfd_elf64_mkarchive _bfd_vms_lib_ia64_mkarchive
+
+#define bfd_elf64_archive_slurp_armap \
+  _bfd_vms_lib_slurp_armap
+#define bfd_elf64_archive_slurp_extended_name_table \
+  _bfd_vms_lib_slurp_extended_name_table
+#define bfd_elf64_archive_construct_extended_name_table \
+  _bfd_vms_lib_construct_extended_name_table
+#define bfd_elf64_archive_truncate_arname \
+  _bfd_vms_lib_truncate_arname
+#define bfd_elf64_archive_write_armap \
+  _bfd_vms_lib_write_armap
+#define bfd_elf64_archive_read_ar_hdr \
+  _bfd_vms_lib_read_ar_hdr
+#define bfd_elf64_archive_write_ar_hdr \
+  _bfd_vms_lib_write_ar_hdr
+#define bfd_elf64_archive_openr_next_archived_file \
+  _bfd_vms_lib_openr_next_archived_file
+#define bfd_elf64_archive_get_elt_at_index \
+  _bfd_vms_lib_get_elt_at_index
+#define bfd_elf64_archive_generic_stat_arch_elt \
+  _bfd_vms_lib_generic_stat_arch_elt
+#define bfd_elf64_archive_update_armap_timestamp \
+  _bfd_vms_lib_update_armap_timestamp
+
+/* VMS link methods.  */
+#undef  bfd_elf64_bfd_link_add_symbols
+#define bfd_elf64_bfd_link_add_symbols 	elf64_vms_bfd_link_add_symbols
+
+#undef  elf_backend_want_got_sym
+#define elf_backend_want_got_sym 	0
+
+#undef  bfd_elf64_mkobject
+#define bfd_elf64_mkobject		elf64_ia64_vms_mkobject
+
+/* Redefine to align segments on block size.  */
+#undef  ELF_MAXPAGESIZE
+#define ELF_MAXPAGESIZE			0x200 /* 512B  */
+
+#undef  elf_backend_want_got_plt
+#define elf_backend_want_got_plt	0
+
+#include "elf64-target.h"
diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c
index a427985..e02f969 100644
--- a/bfd/elf64-mips.c
+++ b/bfd/elf64-mips.c
@@ -1590,6 +1590,111 @@ static reloc_howto_type mips16_elf64_howto_table_rel[] =
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
 	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS general dynamic variable reference.  */
+  HOWTO (R_MIPS16_TLS_GD,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_GD",	/* name */
+	 TRUE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS local dynamic variable reference.  */
+  HOWTO (R_MIPS16_TLS_LDM,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_LDM",	/* name */
+	 TRUE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS local dynamic offset.  */
+  HOWTO (R_MIPS16_TLS_DTPREL_HI16,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_DTPREL_HI16",	/* name */
+	 TRUE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS local dynamic offset.  */
+  HOWTO (R_MIPS16_TLS_DTPREL_LO16,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_DTPREL_LO16",	/* name */
+	 TRUE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS thread pointer offset.  */
+  HOWTO (R_MIPS16_TLS_GOTTPREL,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_GOTTPREL",	/* name */
+	 TRUE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS thread pointer offset.  */
+  HOWTO (R_MIPS16_TLS_TPREL_HI16,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_TPREL_HI16", /* name */
+	 TRUE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS thread pointer offset.  */
+  HOWTO (R_MIPS16_TLS_TPREL_LO16,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_TPREL_LO16", /* name */
+	 TRUE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
 };
 
 static reloc_howto_type mips16_elf64_howto_table_rela[] =
@@ -1686,6 +1791,111 @@ static reloc_howto_type mips16_elf64_howto_table_rela[] =
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
 	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS general dynamic variable reference.  */
+  HOWTO (R_MIPS16_TLS_GD,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_GD",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS local dynamic variable reference.  */
+  HOWTO (R_MIPS16_TLS_LDM,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_LDM",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS local dynamic offset.  */
+  HOWTO (R_MIPS16_TLS_DTPREL_HI16,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_DTPREL_HI16",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS local dynamic offset.  */
+  HOWTO (R_MIPS16_TLS_DTPREL_LO16,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_DTPREL_LO16",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS thread pointer offset.  */
+  HOWTO (R_MIPS16_TLS_GOTTPREL,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_GOTTPREL",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS thread pointer offset.  */
+  HOWTO (R_MIPS16_TLS_TPREL_HI16,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_TPREL_HI16", /* name */
+	 FALSE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS thread pointer offset.  */
+  HOWTO (R_MIPS16_TLS_TPREL_LO16,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_TPREL_LO16", /* name */
+	 FALSE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
 };
 
 static reloc_howto_type micromips_elf64_howto_table_rel[] =
@@ -2498,6 +2708,7 @@ mips_elf64_be_swap_reloc_out (bfd *abfd, const Elf_Internal_Rela *src,
 
   mirel.r_offset = src[0].r_offset;
   BFD_ASSERT(src[0].r_offset == src[1].r_offset);
+  BFD_ASSERT(src[0].r_offset == src[2].r_offset);
 
   mirel.r_type = ELF64_MIPS_R_TYPE (src[0].r_info);
   mirel.r_sym = ELF64_R_SYM (src[0].r_info);
@@ -2908,6 +3119,15 @@ static const struct elf_reloc_map mips16_reloc_map[] =
   { BFD_RELOC_MIPS16_CALL16, R_MIPS16_CALL16 - R_MIPS16_min },
   { BFD_RELOC_MIPS16_HI16_S, R_MIPS16_HI16 - R_MIPS16_min },
   { BFD_RELOC_MIPS16_LO16, R_MIPS16_LO16 - R_MIPS16_min },
+  { BFD_RELOC_MIPS16_TLS_GD, R_MIPS16_TLS_GD - R_MIPS16_min },
+  { BFD_RELOC_MIPS16_TLS_LDM, R_MIPS16_TLS_LDM - R_MIPS16_min },
+  { BFD_RELOC_MIPS16_TLS_DTPREL_HI16,
+    R_MIPS16_TLS_DTPREL_HI16 - R_MIPS16_min },
+  { BFD_RELOC_MIPS16_TLS_DTPREL_LO16,
+    R_MIPS16_TLS_DTPREL_LO16 - R_MIPS16_min },
+  { BFD_RELOC_MIPS16_TLS_GOTTPREL, R_MIPS16_TLS_GOTTPREL - R_MIPS16_min },
+  { BFD_RELOC_MIPS16_TLS_TPREL_HI16, R_MIPS16_TLS_TPREL_HI16 - R_MIPS16_min },
+  { BFD_RELOC_MIPS16_TLS_TPREL_LO16, R_MIPS16_TLS_TPREL_LO16 - R_MIPS16_min }
 };
 
 static const struct elf_reloc_map micromips_reloc_map[] =
@@ -3906,7 +4126,7 @@ const struct elf_size_info mips_elf64_size_info =
 #define elf_backend_grok_prstatus	elf64_mips_grok_prstatus
 #define elf_backend_grok_psinfo		elf64_mips_grok_psinfo
 
-#define elf_backend_got_header_size	(4 * MIPS_RESERVED_GOTNO)
+#define elf_backend_got_header_size	(8 * MIPS_RESERVED_GOTNO)
 
 /* MIPS ELF64 can use a mixture of REL and RELA, but some Relocations
    work better/work only in RELA, so we default to this.  */
diff --git a/bfd/elf64-mmix.c b/bfd/elf64-mmix.c
index ecc9ad0..3195075 100644
--- a/bfd/elf64-mmix.c
+++ b/bfd/elf64-mmix.c
@@ -1,5 +1,6 @@
 /* MMIX-specific support for 64-bit ELF.
-   Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
+   Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011,
+   2012
    Free Software Foundation, Inc.
    Contributed by Hans-Peter Nilsson <hp at bitrange.com>
 
@@ -166,70 +167,24 @@ struct bpo_greg_section_info
     struct bpo_reloc_request *reloc_request;
   };
 
-static int mmix_elf_link_output_symbol_hook
-  PARAMS ((struct bfd_link_info *, const char *, Elf_Internal_Sym *,
-	   asection *, struct elf_link_hash_entry *));
 
-static bfd_reloc_status_type mmix_elf_reloc
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
+extern bfd_boolean mmix_elf_final_link (bfd *, struct bfd_link_info *);
 
-static reloc_howto_type *bfd_elf64_bfd_reloc_type_lookup
-  PARAMS ((bfd *, bfd_reloc_code_real_type));
-
-static void mmix_info_to_howto_rela
-  PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
-
-static int mmix_elf_sort_relocs PARAMS ((const PTR, const PTR));
-
-static bfd_boolean mmix_elf_new_section_hook
-  PARAMS ((bfd *, asection *));
-
-static bfd_boolean mmix_elf_check_relocs
-  PARAMS ((bfd *, struct bfd_link_info *, asection *,
-	   const Elf_Internal_Rela *));
-
-static bfd_boolean mmix_elf_check_common_relocs
-  PARAMS ((bfd *, struct bfd_link_info *, asection *,
-	   const Elf_Internal_Rela *));
-
-static bfd_boolean mmix_elf_relocate_section
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
-	   Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
-
-static bfd_reloc_status_type mmix_final_link_relocate
-  (reloc_howto_type *, asection *, bfd_byte *, bfd_vma, bfd_signed_vma,
-   bfd_vma, const char *, asection *, char **);
-
-static bfd_reloc_status_type mmix_elf_perform_relocation
-  (asection *, reloc_howto_type *, void *, bfd_vma, bfd_vma, char **);
-
-static bfd_boolean mmix_elf_section_from_bfd_section
-  PARAMS ((bfd *, asection *, int *));
-
-static bfd_boolean mmix_elf_add_symbol_hook
-  PARAMS ((bfd *, struct bfd_link_info *, Elf_Internal_Sym *,
-	   const char **, flagword *, asection **, bfd_vma *));
-
-static bfd_boolean mmix_elf_is_local_label_name
-  PARAMS ((bfd *, const char *));
-
-static int bpo_reloc_request_sort_fn PARAMS ((const PTR, const PTR));
-
-static bfd_boolean mmix_elf_relax_section
-  PARAMS ((bfd *abfd, asection *sec, struct bfd_link_info *link_info,
-	   bfd_boolean *again));
-
-extern bfd_boolean mmix_elf_final_link PARAMS ((bfd *, struct bfd_link_info *));
-
-extern void mmix_elf_symbol_processing PARAMS ((bfd *, asymbol *));
+extern void mmix_elf_symbol_processing (bfd *, asymbol *);
 
 /* Only intended to be called from a debugger.  */
 extern void mmix_dump_bpo_gregs
-  PARAMS ((struct bfd_link_info *, bfd_error_handler_type));
+  (struct bfd_link_info *, bfd_error_handler_type);
 
 static void
-mmix_set_relaxable_size
-  PARAMS ((bfd *, asection *, void *));
+mmix_set_relaxable_size (bfd *, asection *, void *);
+static bfd_reloc_status_type
+mmix_elf_reloc (bfd *, arelent *, asymbol *, void *,
+		asection *, bfd *, char **);
+static bfd_reloc_status_type
+mmix_final_link_relocate (reloc_howto_type *, asection *, bfd_byte *, bfd_vma,
+			  bfd_signed_vma, bfd_vma, const char *, asection *,
+			  char **);
 
 
 /* Watch out: this currently needs to have elements with the same index as
@@ -840,9 +795,8 @@ static const struct mmix_reloc_map mmix_reloc_map[] =
   };
 
 static reloc_howto_type *
-bfd_elf64_bfd_reloc_type_lookup (abfd, code)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     bfd_reloc_code_real_type code;
+bfd_elf64_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+				 bfd_reloc_code_real_type code)
 {
   unsigned int i;
 
@@ -874,9 +828,7 @@ bfd_elf64_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
 }
 
 static bfd_boolean
-mmix_elf_new_section_hook (abfd, sec)
-     bfd *abfd;
-     asection *sec;
+mmix_elf_new_section_hook (bfd *abfd, asection *sec)
 {
   if (!sec->used_by_bfd)
     {
@@ -1302,10 +1254,9 @@ mmix_elf_perform_relocation (asection *isec, reloc_howto_type *howto,
 /* Set the howto pointer for an MMIX ELF reloc (type RELA).  */
 
 static void
-mmix_info_to_howto_rela (abfd, cache_ptr, dst)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *cache_ptr;
-     Elf_Internal_Rela *dst;
+mmix_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
+			 arelent *cache_ptr,
+			 Elf_Internal_Rela *dst)
 {
   unsigned int r_type;
 
@@ -1319,15 +1270,13 @@ mmix_info_to_howto_rela (abfd, cache_ptr, dst)
    the reloc_table.  We don't get here for final pure ELF linking.  */
 
 static bfd_reloc_status_type
-mmix_elf_reloc (abfd, reloc_entry, symbol, data, input_section,
-		output_bfd, error_message)
-     bfd *abfd;
-     arelent *reloc_entry;
-     asymbol *symbol;
-     PTR data;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message;
+mmix_elf_reloc (bfd *abfd,
+		arelent *reloc_entry,
+		asymbol *symbol,
+		void * data,
+		asection *input_section,
+		bfd *output_bfd,
+		char **error_message)
 {
   bfd_vma relocation;
   bfd_reloc_status_type r;
@@ -1397,16 +1346,14 @@ mmix_elf_reloc (abfd, reloc_entry, symbol, data, input_section,
    for guidance if you're thinking of copying this.  */
 
 static bfd_boolean
-mmix_elf_relocate_section (output_bfd, info, input_bfd, input_section,
-			   contents, relocs, local_syms, local_sections)
-     bfd *output_bfd ATTRIBUTE_UNUSED;
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     asection *input_section;
-     bfd_byte *contents;
-     Elf_Internal_Rela *relocs;
-     Elf_Internal_Sym *local_syms;
-     asection **local_sections;
+mmix_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
+			   struct bfd_link_info *info,
+			   bfd *input_bfd,
+			   asection *input_section,
+			   bfd_byte *contents,
+			   Elf_Internal_Rela *relocs,
+			   Elf_Internal_Sym *local_syms,
+			   asection **local_sections)
 {
   Elf_Internal_Shdr *symtab_hdr;
   struct elf_link_hash_entry **sym_hashes;
@@ -1475,9 +1422,9 @@ mmix_elf_relocate_section (output_bfd, info, input_bfd, input_section,
 	  name = h->root.root.string;
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	{
@@ -1770,7 +1717,9 @@ mmix_final_link_relocate (reloc_howto_type *howto, asection *input_section,
 	first_global = 255;
       else
 	{
-	  first_global = bfd_get_section_vma (abfd, regsec) / 8;
+	  first_global
+	    = bfd_get_section_vma (input_section->output_section->owner,
+				   regsec) / 8;
 	  if (strcmp (bfd_get_section_name (symsec->owner, symsec),
 		      MMIX_REG_CONTENTS_SECTION_NAME) == 0)
 	    {
@@ -1855,9 +1804,7 @@ mmix_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
 /* Sort register relocs to come before expanding relocs.  */
 
 static int
-mmix_elf_sort_relocs (p1, p2)
-     const PTR p1;
-     const PTR p2;
+mmix_elf_sort_relocs (const void * p1, const void * p2)
 {
   const Elf_Internal_Rela *r1 = (const Elf_Internal_Rela *) p1;
   const Elf_Internal_Rela *r2 = (const Elf_Internal_Rela *) p2;
@@ -1890,11 +1837,10 @@ mmix_elf_sort_relocs (p1, p2)
 /* Subset of mmix_elf_check_relocs, common to ELF and mmo linking.  */
 
 static bfd_boolean
-mmix_elf_check_common_relocs  (abfd, info, sec, relocs)
-     bfd *abfd;
-     struct bfd_link_info *info;
-     asection *sec;
-     const Elf_Internal_Rela *relocs;
+mmix_elf_check_common_relocs  (bfd *abfd,
+			       struct bfd_link_info *info,
+			       asection *sec,
+			       const Elf_Internal_Rela *relocs)
 {
   bfd *bpo_greg_owner = NULL;
   asection *allocated_gregs_section = NULL;
@@ -1927,7 +1873,7 @@ mmix_elf_check_common_relocs  (abfd, info, sec, relocs)
 	  if (bpo_greg_owner == NULL)
 	    {
 	      bpo_greg_owner = abfd;
-	      info->base_file = (PTR) bpo_greg_owner;
+	      info->base_file = bpo_greg_owner;
 	    }
 
 	  if (allocated_gregs_section == NULL)
@@ -2023,11 +1969,10 @@ mmix_elf_check_common_relocs  (abfd, info, sec, relocs)
 /* Look through the relocs for a section during the first phase.  */
 
 static bfd_boolean
-mmix_elf_check_relocs (abfd, info, sec, relocs)
-     bfd *abfd;
-     struct bfd_link_info *info;
-     asection *sec;
-     const Elf_Internal_Rela *relocs;
+mmix_elf_check_relocs (bfd *abfd,
+		       struct bfd_link_info *info,
+		       asection *sec,
+		       const Elf_Internal_Rela *relocs)
 {
   Elf_Internal_Shdr *symtab_hdr;
   struct elf_link_hash_entry **sym_hashes;
@@ -2039,7 +1984,7 @@ mmix_elf_check_relocs (abfd, info, sec, relocs)
 
   /* First we sort the relocs so that any register relocs come before
      expansion-relocs to the same insn.  FIXME: Not done for mmo.  */
-  qsort ((PTR) relocs, sec->reloc_count, sizeof (Elf_Internal_Rela),
+  qsort ((void *) relocs, sec->reloc_count, sizeof (Elf_Internal_Rela),
 	 mmix_elf_sort_relocs);
 
   /* Do the common part.  */
@@ -2093,9 +2038,7 @@ mmix_elf_check_relocs (abfd, info, sec, relocs)
    Copied from elf_link_add_object_symbols.  */
 
 bfd_boolean
-_bfd_mmix_check_all_relocs (abfd, info)
-     bfd *abfd;
-     struct bfd_link_info *info;
+_bfd_mmix_check_all_relocs (bfd *abfd, struct bfd_link_info *info)
 {
   asection *o;
 
@@ -2112,7 +2055,7 @@ _bfd_mmix_check_all_relocs (abfd, info)
 	continue;
 
       internal_relocs
-	= _bfd_elf_link_read_relocs (abfd, o, (PTR) NULL,
+	= _bfd_elf_link_read_relocs (abfd, o, NULL,
 				     (Elf_Internal_Rela *) NULL,
 				     info->keep_memory);
       if (internal_relocs == NULL)
@@ -2135,12 +2078,11 @@ _bfd_mmix_check_all_relocs (abfd, info)
    number.  */
 
 static int
-mmix_elf_link_output_symbol_hook (info, name, sym, input_sec, h)
-     struct bfd_link_info *info ATTRIBUTE_UNUSED;
-     const char *name ATTRIBUTE_UNUSED;
-     Elf_Internal_Sym *sym;
-     asection *input_sec;
-     struct elf_link_hash_entry *h ATTRIBUTE_UNUSED;
+mmix_elf_link_output_symbol_hook (struct bfd_link_info *info ATTRIBUTE_UNUSED,
+				  const char *name ATTRIBUTE_UNUSED,
+				  Elf_Internal_Sym *sym,
+				  asection *input_sec,
+				  struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
 {
   if (input_sec != NULL
       && input_sec->name != NULL
@@ -2200,10 +2142,9 @@ mmix_elf_symbol_processing (abfd, asym)
    index.  */
 
 static bfd_boolean
-mmix_elf_section_from_bfd_section (abfd, sec, retval)
-     bfd *                 abfd ATTRIBUTE_UNUSED;
-     asection *            sec;
-     int *                 retval;
+mmix_elf_section_from_bfd_section (bfd *       abfd ATTRIBUTE_UNUSED,
+				   asection *  sec,
+				   int *       retval)
 {
   if (strcmp (bfd_get_section_name (abfd, sec), MMIX_REG_SECTION_NAME) == 0)
     *retval = SHN_REGISTER;
@@ -2220,15 +2161,14 @@ mmix_elf_section_from_bfd_section (abfd, sec, retval)
    symbols, since otherwise having two with the same value would cause
    them to be "merged", but with the contents serialized.  */
 
-bfd_boolean
-mmix_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
-     bfd *abfd;
-     struct bfd_link_info *info ATTRIBUTE_UNUSED;
-     Elf_Internal_Sym *sym;
-     const char **namep ATTRIBUTE_UNUSED;
-     flagword *flagsp ATTRIBUTE_UNUSED;
-     asection **secp;
-     bfd_vma *valp ATTRIBUTE_UNUSED;
+static bfd_boolean
+mmix_elf_add_symbol_hook (bfd *abfd,
+			  struct bfd_link_info *info ATTRIBUTE_UNUSED,
+			  Elf_Internal_Sym *sym,
+			  const char **namep ATTRIBUTE_UNUSED,
+			  flagword *flagsp ATTRIBUTE_UNUSED,
+			  asection **secp,
+			  bfd_vma *valp ATTRIBUTE_UNUSED)
 {
   if (sym->st_shndx == SHN_REGISTER)
     {
@@ -2263,10 +2203,8 @@ mmix_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
 
 /* We consider symbols matching "L.*:[0-9]+" to be local symbols.  */
 
-bfd_boolean
-mmix_elf_is_local_label_name (abfd, name)
-     bfd *abfd;
-     const char *name;
+static bfd_boolean
+mmix_elf_is_local_label_name (bfd *abfd, const char *name)
 {
   const char *colpos;
   int digits;
@@ -2294,9 +2232,7 @@ mmix_elf_is_local_label_name (abfd, name)
 /* We get rid of the register section here.  */
 
 bfd_boolean
-mmix_elf_final_link (abfd, info)
-     bfd *abfd;
-     struct bfd_link_info *info;
+mmix_elf_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   /* We never output a register section, though we create one for
      temporary measures.  Check that nobody entered contents into it.  */
@@ -2343,10 +2279,9 @@ mmix_elf_final_link (abfd, info)
    section size.  This is expected to shrink during linker relaxation.  */
 
 static void
-mmix_set_relaxable_size (abfd, sec, ptr)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     asection *sec;
-     void *ptr;
+mmix_set_relaxable_size (bfd *abfd ATTRIBUTE_UNUSED,
+			 asection *sec,
+			 void *ptr)
 {
   struct bfd_link_info *info = ptr;
 
@@ -2371,9 +2306,8 @@ mmix_set_relaxable_size (abfd, sec, ptr)
    R_MMIX_BASE_PLUS_OFFSET relocs seen by the linker.  */
 
 bfd_boolean
-_bfd_mmix_before_linker_allocation (abfd, info)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     struct bfd_link_info *info;
+_bfd_mmix_before_linker_allocation (bfd *abfd ATTRIBUTE_UNUSED,
+				    struct bfd_link_info *info)
 {
   asection *bpo_gregs_section;
   bfd *bpo_greg_owner;
@@ -2450,9 +2384,8 @@ _bfd_mmix_before_linker_allocation (abfd, info)
    calculated at this point; we just move the contents into place here.  */
 
 bfd_boolean
-_bfd_mmix_after_linker_allocation (abfd, link_info)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     struct bfd_link_info *link_info;
+_bfd_mmix_after_linker_allocation (bfd *abfd ATTRIBUTE_UNUSED,
+				   struct bfd_link_info *link_info)
 {
   asection *bpo_gregs_section;
   bfd *bpo_greg_owner;
@@ -2523,9 +2456,7 @@ _bfd_mmix_after_linker_allocation (abfd, link_info)
    value.  */
 
 static int
-bpo_reloc_request_sort_fn (p1, p2)
-     const PTR p1;
-     const PTR p2;
+bpo_reloc_request_sort_fn (const void * p1, const void * p2)
 {
   const struct bpo_reloc_request *r1 = (const struct bpo_reloc_request *) p1;
   const struct bpo_reloc_request *r2 = (const struct bpo_reloc_request *) p2;
@@ -2616,11 +2547,10 @@ mmix_dump_bpo_gregs (link_info, pf)
    Symbol- and reloc-reading infrastructure copied from elf-m10200.c.  */
 
 static bfd_boolean
-mmix_elf_relax_section (abfd, sec, link_info, again)
-     bfd *abfd;
-     asection *sec;
-     struct bfd_link_info *link_info;
-     bfd_boolean *again;
+mmix_elf_relax_section (bfd *abfd,
+			asection *sec,
+			struct bfd_link_info *link_info,
+			bfd_boolean *again)
 {
   Elf_Internal_Shdr *symtab_hdr;
   Elf_Internal_Rela *internal_relocs;
@@ -2666,7 +2596,7 @@ mmix_elf_relax_section (abfd, sec, link_info, again)
 
   /* Get a copy of the native relocations.  */
   internal_relocs
-    = _bfd_elf_link_read_relocs (abfd, sec, (PTR) NULL,
+    = _bfd_elf_link_read_relocs (abfd, sec, NULL,
 				 (Elf_Internal_Rela *) NULL,
 				 link_info->keep_memory);
   if (internal_relocs == NULL)
@@ -2870,7 +2800,7 @@ mmix_elf_relax_section (abfd, sec, link_info, again)
       gregdata->n_remaining_bpo_relocs_this_relaxation_round
 	= gregdata->n_bpo_relocs;
 
-      qsort ((PTR) gregdata->reloc_request,
+      qsort (gregdata->reloc_request,
 	     gregdata->n_max_bpo_relocs,
 	     sizeof (struct bpo_reloc_request),
 	     bpo_reloc_request_sort_fn);
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
index 4560599..50dad3b 100644
--- a/bfd/elf64-ppc.c
+++ b/bfd/elf64-ppc.c
@@ -1,6 +1,6 @@
 /* PowerPC64-specific support for 64-bit ELF.
    Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
-   2009, 2010, 2011 Free Software Foundation, Inc.
+   2009, 2010, 2011, 2012 Free Software Foundation, Inc.
    Written by Linus Nordberg, Swox AB <info at swox.com>,
    based on elf32-ppc.c by Ian Lance Taylor.
    Largely rewritten by Alan Modra.
@@ -55,7 +55,7 @@ static bfd_reloc_status_type ppc64_elf_toc64_reloc
 static bfd_reloc_status_type ppc64_elf_unhandled_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 static bfd_vma opd_entry_value
-  (asection *, bfd_vma, asection **, bfd_vma *);
+  (asection *, bfd_vma, asection **, bfd_vma *, bfd_boolean);
 
 #define TARGET_LITTLE_SYM	bfd_elf64_powerpcle_vec
 #define TARGET_LITTLE_NAME	"elf64-powerpcle"
@@ -105,6 +105,7 @@ static bfd_vma opd_entry_value
 #define elf_backend_gc_sweep_hook	      ppc64_elf_gc_sweep_hook
 #define elf_backend_adjust_dynamic_symbol     ppc64_elf_adjust_dynamic_symbol
 #define elf_backend_hide_symbol		      ppc64_elf_hide_symbol
+#define elf_backend_maybe_function_sym	      ppc64_elf_maybe_function_sym
 #define elf_backend_always_size_sections      ppc64_elf_func_desc_adjust
 #define elf_backend_size_dynamic_sections     ppc64_elf_size_dynamic_sections
 #define elf_backend_init_index_section	      _bfd_elf_init_2_index_sections
@@ -152,6 +153,13 @@ static bfd_vma opd_entry_value
 #define ADDIS_R2_R2	0x3c420000	/* addis %r2,%r2,off at ha  */
 #define ADDI_R2_R2	0x38420000	/* addi  %r2,%r2,off at l   */
 
+#define XOR_R11_R11_R11	0x7d6b5a78	/* xor   %r11,%r11,%r11  */
+#define ADD_R12_R12_R11	0x7d8c5a14	/* add   %r12,%r12,%r11  */
+#define ADD_R2_R2_R11	0x7c425a14	/* add   %r2,%r2,%r11    */
+#define CMPLDI_R2_0	0x28220000	/* cmpldi %r2,0          */
+#define BNECTR		0x4ca20420	/* bnectr+               */
+#define BNECTR_P4	0x4ce20420	/* bnectr+               */
+
 #define LD_R11_0R2	0xe9620000	/* ld	 %r11,xxx+0(%r2) */
 #define LD_R2_0R2	0xe8420000	/* ld	 %r2,xxx+0(%r2)  */
 
@@ -2339,7 +2347,7 @@ ppc64_elf_branch_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
     {
       bfd_vma dest = opd_entry_value (symbol->section,
 				      symbol->value + reloc_entry->addend,
-				      NULL, NULL);
+				      NULL, NULL, FALSE);
       if (dest != (bfd_vma) -1)
 	reloc_entry->addend = dest - (symbol->value
 				      + symbol->section->output_section->vma
@@ -2356,8 +2364,8 @@ ppc64_elf_brtaken_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
   long insn;
   enum elf_ppc64_reloc_type r_type;
   bfd_size_type octets;
-  /* Disabled until we sort out how ld should choose 'y' vs 'at'.  */
-  bfd_boolean is_power4 = FALSE;
+  /* Assume 'at' branch hints.  */
+  bfd_boolean is_isa_v2 = TRUE;
 
   /* If this is a relocatable link (output_bfd test tells us), just
      call the generic function.  Any adjustment will be done at final
@@ -2374,7 +2382,7 @@ ppc64_elf_brtaken_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
       || r_type == R_PPC64_REL14_BRTAKEN)
     insn |= 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field.  */
 
-  if (is_power4)
+  if (is_isa_v2)
     {
       /* Set 'a' bit.  This is 0b00010 in BO field for branch
 	 on CR(BI) insns (BO == 001at or 011at), and 0b01000
@@ -2714,7 +2722,7 @@ ppc64_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_type,
 	va_list ap;
 
 	va_start (ap, note_type);
-	memset (data, 0, 40);
+	memset (data, 0, sizeof (data));
 	strncpy (data + 40, va_arg (ap, const char *), 16);
 	strncpy (data + 56, va_arg (ap, const char *), 80);
 	va_end (ap);
@@ -3584,7 +3592,8 @@ enum ppc_stub_type {
   ppc_stub_long_branch_r2off,
   ppc_stub_plt_branch,
   ppc_stub_plt_branch_r2off,
-  ppc_stub_plt_call
+  ppc_stub_plt_call,
+  ppc_stub_plt_call_r2save
 };
 
 struct ppc_stub_hash_entry {
@@ -3752,14 +3761,20 @@ struct ppc_link_hash_table
   bfd_size_type got_reli_size;
 
   /* Statistics.  */
-  unsigned long stub_count[ppc_stub_plt_call];
+  unsigned long stub_count[ppc_stub_plt_call_r2save];
 
   /* Number of stubs against global syms.  */
   unsigned long stub_globals;
 
+  /* Alignment of PLT call stubs.  */
+  unsigned int plt_stub_align:4;
+
   /* Set if PLT call stubs should load r11.  */
   unsigned int plt_static_chain:1;
 
+  /* Set if PLT call stubs need a read-read barrier.  */
+  unsigned int plt_thread_safe:1;
+
   /* Set if we should emit symbols for stubs.  */
   unsigned int emit_stub_syms:1;
 
@@ -4230,7 +4245,7 @@ create_linkage_sections (bfd *dynobj, struct bfd_link_info *info)
 								 ".eh_frame",
 								 flags);
       if (htab->glink_eh_frame == NULL
-	  || !bfd_set_section_alignment (abfd, htab->glink_eh_frame, 2))
+	  || !bfd_set_section_alignment (dynobj, htab->glink_eh_frame, 2))
 	return FALSE;
     }
 
@@ -4293,7 +4308,7 @@ create_got_section (bfd *abfd, struct bfd_link_info *info)
       if (! _bfd_elf_create_got_section (htab->elf.dynobj, info))
 	return FALSE;
 
-      htab->got = bfd_get_section_by_name (htab->elf.dynobj, ".got");
+      htab->got = bfd_get_linker_section (htab->elf.dynobj, ".got");
       if (!htab->got)
 	abort ();
     }
@@ -4332,12 +4347,12 @@ ppc64_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
     return FALSE;
 
   if (!htab->got)
-    htab->got = bfd_get_section_by_name (dynobj, ".got");
-  htab->plt = bfd_get_section_by_name (dynobj, ".plt");
-  htab->relplt = bfd_get_section_by_name (dynobj, ".rela.plt");
-  htab->dynbss = bfd_get_section_by_name (dynobj, ".dynbss");
+    htab->got = bfd_get_linker_section (dynobj, ".got");
+  htab->plt = bfd_get_linker_section (dynobj, ".plt");
+  htab->relplt = bfd_get_linker_section (dynobj, ".rela.plt");
+  htab->dynbss = bfd_get_linker_section (dynobj, ".dynbss");
   if (!info->shared)
-    htab->relbss = bfd_get_section_by_name (dynobj, ".rela.bss");
+    htab->relbss = bfd_get_linker_section (dynobj, ".rela.bss");
 
   if (!htab->got || !htab->plt || !htab->relplt || !htab->dynbss
       || (!info->shared && !htab->relbss))
@@ -5507,14 +5522,16 @@ static bfd_vma
 opd_entry_value (asection *opd_sec,
 		 bfd_vma offset,
 		 asection **code_sec,
-		 bfd_vma *code_off)
+		 bfd_vma *code_off,
+		 bfd_boolean in_code_sec)
 {
   bfd *opd_bfd = opd_sec->owner;
   Elf_Internal_Rela *relocs;
   Elf_Internal_Rela *lo, *hi, *look;
   bfd_vma val;
 
-  /* No relocs implies we are linking a --just-symbols object.  */
+  /* No relocs implies we are linking a --just-symbols object, or looking
+     at a final linked executable with addr2line or somesuch.  */
   if (opd_sec->reloc_count == 0)
     {
       char buf[8];
@@ -5526,11 +5543,22 @@ opd_entry_value (asection *opd_sec,
       if (code_sec != NULL)
 	{
 	  asection *sec, *likely = NULL;
-	  for (sec = opd_bfd->sections; sec != NULL; sec = sec->next)
-	    if (sec->vma <= val
-		&& (sec->flags & SEC_LOAD) != 0
-		&& (sec->flags & SEC_ALLOC) != 0)
-	      likely = sec;
+
+	  if (in_code_sec)
+	    {
+	      sec = *code_sec;
+	      if (sec->vma <= val
+		  && val < sec->vma + sec->size)
+		likely = sec;
+	      else
+		val = -1;
+	    }
+	  else
+	    for (sec = opd_bfd->sections; sec != NULL; sec = sec->next)
+	      if (sec->vma <= val
+		  && (sec->flags & SEC_LOAD) != 0
+		  && (sec->flags & SEC_ALLOC) != 0)
+		likely = sec;
 	  if (likely != NULL)
 	    {
 	      *code_sec = likely;
@@ -5569,15 +5597,18 @@ opd_entry_value (asection *opd_sec,
 	      unsigned long symndx = ELF64_R_SYM (look->r_info);
 	      asection *sec;
 
-	      if (symndx < symtab_hdr->sh_info)
+	      if (symndx < symtab_hdr->sh_info
+		  || elf_sym_hashes (opd_bfd) == NULL)
 		{
 		  Elf_Internal_Sym *sym;
 
 		  sym = (Elf_Internal_Sym *) symtab_hdr->contents;
 		  if (sym == NULL)
 		    {
-		      sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr,
-						  symtab_hdr->sh_info,
+		      size_t symcnt = symtab_hdr->sh_info;
+		      if (elf_sym_hashes (opd_bfd) == NULL)
+			symcnt = symtab_hdr->sh_size / symtab_hdr->sh_entsize;
+		      sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr, symcnt,
 						  0, NULL, NULL, NULL);
 		      if (sym == NULL)
 			break;
@@ -5606,7 +5637,12 @@ opd_entry_value (asection *opd_sec,
 	      if (code_off != NULL)
 		*code_off = val;
 	      if (code_sec != NULL)
-		*code_sec = sec;
+		{
+		  if (in_code_sec && *code_sec != sec)
+		    return -1;
+		  else
+		    *code_sec = sec;
+		}
 	      if (sec != NULL && sec->output_section != NULL)
 		val += sec->output_section->vma + sec->output_offset;
 	    }
@@ -5617,6 +5653,55 @@ opd_entry_value (asection *opd_sec,
   return val;
 }
 
+/* If the ELF symbol SYM might be a function in SEC, return the
+   function size and set *CODE_OFF to the function's entry point,
+   otherwise return zero.  */
+
+static bfd_size_type
+ppc64_elf_maybe_function_sym (const asymbol *sym, asection *sec,
+			      bfd_vma *code_off)
+{
+  bfd_size_type size;
+
+  if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
+		     | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0)
+    return 0;
+
+  size = 0;
+  if (!(sym->flags & BSF_SYNTHETIC))
+    size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
+
+  if (strcmp (sym->section->name, ".opd") == 0)
+    {
+      if (opd_entry_value (sym->section, sym->value,
+			   &sec, code_off, TRUE) == (bfd_vma) -1)
+	return 0;
+      /* An old ABI binary with dot-syms has a size of 24 on the .opd
+	 symbol.  This size has nothing to do with the code size of the
+	 function, which is what we're supposed to return, but the
+	 code size isn't available without looking up the dot-sym.
+	 However, doing that would be a waste of time particularly
+	 since elf_find_function will look at the dot-sym anyway.
+	 Now, elf_find_function will keep the largest size of any
+	 function sym found at the code address of interest, so return
+	 1 here to avoid it incorrectly caching a larger function size
+	 for a small function.  This does mean we return the wrong
+	 size for a new-ABI function of size 24, but all that does is
+	 disable caching for such functions.  */
+      if (size == 24)
+	size = 1;
+    }
+  else
+    {
+      if (sym->section != sec)
+	return 0;
+      *code_off = sym->value;
+    }
+  if (size == 0)
+    size = 1;
+  return size;
+}
+
 /* Return true if symbol is defined in a regular object file.  */
 
 static bfd_boolean
@@ -5694,7 +5779,7 @@ ppc64_elf_gc_keep (struct bfd_link_info *info)
       else if (get_opd_info (eh->elf.root.u.def.section) != NULL
 	       && opd_entry_value (eh->elf.root.u.def.section,
 				   eh->elf.root.u.def.value,
-				   &sec, NULL) != (bfd_vma) -1)
+				   &sec, NULL, FALSE) != (bfd_vma) -1)
 	sec->flags |= SEC_KEEP;
 
       sec = eh->elf.root.u.def.section;
@@ -5745,7 +5830,7 @@ ppc64_elf_gc_mark_dynamic_ref (struct elf_link_hash_entry *h, void *inf)
       else if (get_opd_info (eh->elf.root.u.def.section) != NULL
 	       && opd_entry_value (eh->elf.root.u.def.section,
 				   eh->elf.root.u.def.value,
-				   &code_sec, NULL) != (bfd_vma) -1)
+				   &code_sec, NULL, FALSE) != (bfd_vma) -1)
 	code_sec->flags |= SEC_KEEP;
     }
 
@@ -5805,7 +5890,7 @@ ppc64_elf_gc_mark_hook (asection *sec,
 	      else if (get_opd_info (eh->elf.root.u.def.section) != NULL
 		       && opd_entry_value (eh->elf.root.u.def.section,
 					   eh->elf.root.u.def.value,
-					   &rsec, NULL) != (bfd_vma) -1)
+					   &rsec, NULL, FALSE) != (bfd_vma) -1)
 		eh->elf.root.u.def.section->gc_mark = 1;
 	      else
 		rsec = h->root.u.def.section;
@@ -6274,7 +6359,7 @@ func_desc_adjust (struct elf_link_hash_entry *h, void *inf)
       && opd_entry_value (fdh->elf.root.u.def.section,
 			  fdh->elf.root.u.def.value,
 			  &fh->elf.root.u.def.section,
-			  &fh->elf.root.u.def.value) != (bfd_vma) -1)
+			  &fh->elf.root.u.def.value, FALSE) != (bfd_vma) -1)
     {
       fh->elf.root.type = fdh->elf.root.type;
       fh->elf.forced_local = 1;
@@ -6383,7 +6468,7 @@ ppc64_elf_func_desc_adjust (bfd *obfd ATTRIBUTE_UNUSED,
 {
   struct ppc_link_hash_table *htab;
   unsigned int i;
-  const struct sfpr_def_parms funcs[] =
+  static const struct sfpr_def_parms funcs[] =
     {
       { "_savegpr0_", 14, 31, savegpr0, savegpr0_tail },
       { "_restgpr0_", 14, 29, restgpr0, restgpr0_tail },
@@ -6409,9 +6494,10 @@ ppc64_elf_func_desc_adjust (bfd *obfd ATTRIBUTE_UNUSED,
 
   /* Provide any missing _save* and _rest* functions.  */
   htab->sfpr->size = 0;
-  for (i = 0; i < sizeof (funcs) / sizeof (funcs[0]); i++)
-    if (!sfpr_define (info, &funcs[i]))
-      return FALSE;
+  if (!info->relocatable)
+    for (i = 0; i < sizeof (funcs) / sizeof (funcs[0]); i++)
+      if (!sfpr_define (info, &funcs[i]))
+	return FALSE;
 
   elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
 
@@ -6530,13 +6616,6 @@ ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
   /* This is a reference to a symbol defined by a dynamic object which
      is not a function.  */
 
-  if (h->size == 0)
-    {
-      info->callbacks->einfo (_("%P: dynamic variable `%s' is zero size\n"),
-			      h->root.root.string);
-      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
@@ -6551,7 +6630,7 @@ ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
      to copy the initial value out of the dynamic object and into the
      runtime process image.  We need to remember the offset into the
      .rela.bss section we are going to use.  */
-  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
       htab->relbss->size += sizeof (Elf64_External_Rela);
       h->needs_copy = 1;
@@ -6852,7 +6931,7 @@ adjust_opd_syms (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
 	  if (dsec == NULL)
 	    {
 	      for (dsec = sym_sec->owner->sections; dsec; dsec = dsec->next)
-		if (elf_discarded_section (dsec))
+		if (discarded_section (dsec))
 		  {
 		    ppc64_elf_tdata (sym_sec->owner)->deleted_section = dsec;
 		    break;
@@ -7033,7 +7112,7 @@ ppc64_elf_edit_opd (struct bfd_link_info *info, bfd_boolean non_overlapping)
       if (sec == NULL || sec->size == 0)
 	continue;
 
-      if (sec->sec_info_type == ELF_INFO_TYPE_JUST_SYMS)
+      if (sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
 	continue;
 
       if (sec->output_section == bfd_abs_section_ptr)
@@ -8077,8 +8156,8 @@ ppc64_elf_edit_toc (struct bfd_link_info *info)
       toc = bfd_get_section_by_name (ibfd, ".toc");
       if (toc == NULL
 	  || toc->size == 0
-	  || toc->sec_info_type == ELF_INFO_TYPE_JUST_SYMS
-	  || elf_discarded_section (toc))
+	  || toc->sec_info_type == SEC_INFO_TYPE_JUST_SYMS
+	  || discarded_section (toc))
 	continue;
 
       toc_relocs = NULL;
@@ -8091,7 +8170,7 @@ ppc64_elf_edit_toc (struct bfd_link_info *info)
       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
 	{
 	  if (sec->reloc_count == 0
-	      || !elf_discarded_section (sec)
+	      || !discarded_section (sec)
 	      || get_opd_info (sec)
 	      || (sec->flags & SEC_ALLOC) == 0
 	      || (sec->flags & SEC_DEBUGGING) != 0)
@@ -8201,7 +8280,7 @@ ppc64_elf_edit_toc (struct bfd_link_info *info)
 		goto error_ret;
 
 	      if (sym_sec == NULL
-		  || elf_discarded_section (sym_sec))
+		  || discarded_section (sym_sec))
 		continue;
 
 	      if (!SYMBOL_CALLS_LOCAL (info, h))
@@ -8281,7 +8360,7 @@ ppc64_elf_edit_toc (struct bfd_link_info *info)
 	  int repeat;
 
 	  if (sec->reloc_count == 0
-	      || elf_discarded_section (sec)
+	      || discarded_section (sec)
 	      || get_opd_info (sec)
 	      || (sec->flags & SEC_ALLOC) == 0
 	      || (sec->flags & SEC_DEBUGGING) != 0)
@@ -8503,7 +8582,7 @@ ppc64_elf_edit_toc (struct bfd_link_info *info)
 	  for (sec = ibfd->sections; sec != NULL; sec = sec->next)
 	    {
 	      if (sec->reloc_count == 0
-		  || elf_discarded_section (sec))
+		  || discarded_section (sec))
 		continue;
 
 	      relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
@@ -9061,7 +9140,7 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  if (s == NULL)
 	    abort ();
 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
@@ -9471,21 +9550,126 @@ ppc_type_of_stub (asection *input_sec,
   return ppc_stub_none;
 }
 
-/* Build a .plt call stub.  */
+/* With power7 weakly ordered memory model, it is possible for ld.so
+   to update a plt entry in one thread and have another thread see a
+   stale zero toc entry.  To avoid this we need some sort of acquire
+   barrier in the call stub.  One solution is to make the load of the
+   toc word seem to appear to depend on the load of the function entry
+   word.  Another solution is to test for r2 being zero, and branch to
+   the appropriate glink entry if so.
+
+   .	fake dep barrier	compare
+   .	ld 11,xxx(2)		ld 11,xxx(2)
+   .	mtctr 11		mtctr 11
+   .	xor 11,11,11		ld 2,xxx+8(2)
+   .	add 2,2,11		cmpldi 2,0
+   .	ld 2,xxx+8(2)		bnectr+
+   .	bctr			b <glink_entry>
+
+   The solution involving the compare turns out to be faster, so
+   that's what we use unless the branch won't reach.  */
+
+#define ALWAYS_USE_FAKE_DEP 0
+#define ALWAYS_EMIT_R2SAVE 0
 
-static inline bfd_byte *
-build_plt_stub (bfd *obfd, bfd_byte *p, int offset, Elf_Internal_Rela *r,
-		bfd_boolean plt_static_chain)
-{
 #define PPC_LO(v) ((v) & 0xffff)
 #define PPC_HI(v) (((v) >> 16) & 0xffff)
 #define PPC_HA(v) PPC_HI ((v) + 0x8000)
 
+static inline unsigned int
+plt_stub_size (struct ppc_link_hash_table *htab,
+	       struct ppc_stub_hash_entry *stub_entry,
+	       bfd_vma off)
+{
+  unsigned size = PLT_CALL_STUB_SIZE;
+
+  if (!(ALWAYS_EMIT_R2SAVE
+	|| stub_entry->stub_type == ppc_stub_plt_call_r2save))
+    size -= 4;
+  if (!htab->plt_static_chain)
+    size -= 4;
+  if (htab->plt_thread_safe)
+    size += 8;
+  if (PPC_HA (off) == 0)
+    size -= 4;
+  if (PPC_HA (off + 8 + 8 * htab->plt_static_chain) != PPC_HA (off))
+    size += 4;
+  if (stub_entry->h != NULL
+      && (stub_entry->h == htab->tls_get_addr_fd
+	  || stub_entry->h == htab->tls_get_addr)
+      && !htab->no_tls_get_addr_opt)
+    size += 13 * 4;
+  return size;
+}
+
+/* If this stub would cross fewer 2**plt_stub_align boundaries if we align,
+   then return the padding needed to do so.  */
+static inline unsigned int
+plt_stub_pad (struct ppc_link_hash_table *htab,
+	      struct ppc_stub_hash_entry *stub_entry,
+	      bfd_vma plt_off)
+{
+  int stub_align = 1 << htab->plt_stub_align;
+  unsigned stub_size = plt_stub_size (htab, stub_entry, plt_off);
+  bfd_vma stub_off = stub_entry->stub_sec->size;
+
+  if (((stub_off + stub_size - 1) & -stub_align) - (stub_off & -stub_align)
+      > (stub_size & -stub_align))
+    return stub_align - (stub_off & (stub_align - 1));
+  return 0;
+}
+
+/* Build a .plt call stub.  */
+
+static inline bfd_byte *
+build_plt_stub (struct ppc_link_hash_table *htab,
+		struct ppc_stub_hash_entry *stub_entry,
+		bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
+{
+  bfd *obfd = htab->stub_bfd;
+  bfd_boolean plt_static_chain = htab->plt_static_chain;
+  bfd_boolean plt_thread_safe = htab->plt_thread_safe;
+  bfd_boolean use_fake_dep = plt_thread_safe;
+  bfd_vma cmp_branch_off = 0;
+
+  if (!ALWAYS_USE_FAKE_DEP
+      && plt_thread_safe
+      && !(stub_entry->h != NULL
+	   && (stub_entry->h == htab->tls_get_addr_fd
+	       || stub_entry->h == htab->tls_get_addr)
+	   && !htab->no_tls_get_addr_opt))
+    {
+      bfd_vma pltoff = stub_entry->plt_ent->plt.offset & ~1;
+      bfd_vma pltindex = (pltoff - PLT_INITIAL_ENTRY_SIZE) / PLT_ENTRY_SIZE;
+      bfd_vma glinkoff = GLINK_CALL_STUB_SIZE + pltindex * 8;
+      bfd_vma to, from;
+
+      if (pltindex > 32767)
+	glinkoff += (pltindex - 32767) * 4;
+      to = (glinkoff
+	    + htab->glink->output_offset
+	    + htab->glink->output_section->vma);
+      from = (p - stub_entry->stub_sec->contents
+	      + 4 * (ALWAYS_EMIT_R2SAVE
+		     || stub_entry->stub_type == ppc_stub_plt_call_r2save)
+	      + 4 * (PPC_HA (offset) != 0)
+	      + 4 * (PPC_HA (offset + 8 + 8 * plt_static_chain)
+		     != PPC_HA (offset))
+	      + 4 * (plt_static_chain != 0)
+	      + 20
+	      + stub_entry->stub_sec->output_offset
+	      + stub_entry->stub_sec->output_section->vma);
+      cmp_branch_off = to - from;
+      use_fake_dep = cmp_branch_off + (1 << 25) >= (1 << 26);
+    }
+
   if (PPC_HA (offset) != 0)
     {
       if (r != NULL)
 	{
-	  r[0].r_offset += 4;
+	  if (ALWAYS_EMIT_R2SAVE
+	      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
+	    r[0].r_offset += 4;
 	  r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA);
 	  r[1].r_offset = r[0].r_offset + 4;
 	  r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
@@ -9498,7 +9682,7 @@ build_plt_stub (bfd *obfd, bfd_byte *p, int offset, Elf_Internal_Rela *r,
 	    }
 	  else
 	    {
-	      r[2].r_offset = r[1].r_offset + 8;
+	      r[2].r_offset = r[1].r_offset + 8 + 8 * use_fake_dep;
 	      r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS);
 	      r[2].r_addend = r[0].r_addend + 8;
 	      if (plt_static_chain)
@@ -9509,7 +9693,9 @@ build_plt_stub (bfd *obfd, bfd_byte *p, int offset, Elf_Internal_Rela *r,
 		}
 	    }
 	}
-      bfd_put_32 (obfd, STD_R2_40R1, p),			p += 4;
+      if (ALWAYS_EMIT_R2SAVE
+	  || stub_entry->stub_type == ppc_stub_plt_call_r2save)
+	bfd_put_32 (obfd, STD_R2_40R1, p),			p += 4;
       bfd_put_32 (obfd, ADDIS_R12_R2 | PPC_HA (offset), p),	p += 4;
       bfd_put_32 (obfd, LD_R11_0R12 | PPC_LO (offset), p),	p += 4;
       if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
@@ -9518,16 +9704,22 @@ build_plt_stub (bfd *obfd, bfd_byte *p, int offset, Elf_Internal_Rela *r,
 	  offset = 0;
 	}
       bfd_put_32 (obfd, MTCTR_R11, p),				p += 4;
+      if (use_fake_dep)
+	{
+	  bfd_put_32 (obfd, XOR_R11_R11_R11, p),		p += 4;
+	  bfd_put_32 (obfd, ADD_R12_R12_R11, p),		p += 4;
+	}
       bfd_put_32 (obfd, LD_R2_0R12 | PPC_LO (offset + 8), p),	p += 4;
       if (plt_static_chain)
 	bfd_put_32 (obfd, LD_R11_0R12 | PPC_LO (offset + 16), p), p += 4;
-      bfd_put_32 (obfd, BCTR, p),				p += 4;
     }
   else
     {
       if (r != NULL)
 	{
-	  r[0].r_offset += 4;
+	  if (ALWAYS_EMIT_R2SAVE
+	      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
+	    r[0].r_offset += 4;
 	  r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
 	  if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
 	    {
@@ -9537,7 +9729,7 @@ build_plt_stub (bfd *obfd, bfd_byte *p, int offset, Elf_Internal_Rela *r,
 	    }
 	  else
 	    {
-	      r[1].r_offset = r[0].r_offset + 8;
+	      r[1].r_offset = r[0].r_offset + 8 + 8 * use_fake_dep;
 	      r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
 	      r[1].r_addend = r[0].r_addend + 8 + 8 * plt_static_chain;
 	      if (plt_static_chain)
@@ -9548,7 +9740,9 @@ build_plt_stub (bfd *obfd, bfd_byte *p, int offset, Elf_Internal_Rela *r,
 		}
 	    }
 	}
-      bfd_put_32 (obfd, STD_R2_40R1, p),			p += 4;
+      if (ALWAYS_EMIT_R2SAVE
+	  || stub_entry->stub_type == ppc_stub_plt_call_r2save)
+	bfd_put_32 (obfd, STD_R2_40R1, p),			p += 4;
       bfd_put_32 (obfd, LD_R11_0R2 | PPC_LO (offset), p),	p += 4;
       if (PPC_HA (offset + 8 + 8 * plt_static_chain) != PPC_HA (offset))
 	{
@@ -9556,11 +9750,23 @@ build_plt_stub (bfd *obfd, bfd_byte *p, int offset, Elf_Internal_Rela *r,
 	  offset = 0;
 	}
       bfd_put_32 (obfd, MTCTR_R11, p),				p += 4;
+      if (use_fake_dep)
+	{
+	  bfd_put_32 (obfd, XOR_R11_R11_R11, p),		p += 4;
+	  bfd_put_32 (obfd, ADD_R2_R2_R11, p),			p += 4;
+	}
       if (plt_static_chain)
 	bfd_put_32 (obfd, LD_R11_0R2 | PPC_LO (offset + 16), p), p += 4;
       bfd_put_32 (obfd, LD_R2_0R2 | PPC_LO (offset + 8), p),	p += 4;
-      bfd_put_32 (obfd, BCTR, p),				p += 4;
     }
+  if (plt_thread_safe && !use_fake_dep)
+    {
+      bfd_put_32 (obfd, CMPLDI_R2_0, p),			p += 4;
+      bfd_put_32 (obfd, BNECTR_P4, p),				p += 4;
+      bfd_put_32 (obfd, B_DOT + cmp_branch_off, p),		p += 4;
+    }
+  else
+    bfd_put_32 (obfd, BCTR, p),					p += 4;
   return p;
 }
 
@@ -9581,9 +9787,12 @@ build_plt_stub (bfd *obfd, bfd_byte *p, int offset, Elf_Internal_Rela *r,
 #define MTLR_R11	0x7d6803a6
 
 static inline bfd_byte *
-build_tls_get_addr_stub (bfd *obfd, bfd_byte *p, int offset,
-			 Elf_Internal_Rela *r, bfd_boolean plt_static_chain)
+build_tls_get_addr_stub (struct ppc_link_hash_table *htab,
+			 struct ppc_stub_hash_entry *stub_entry,
+			 bfd_byte *p, bfd_vma offset, Elf_Internal_Rela *r)
 {
+  bfd *obfd = htab->stub_bfd;
+
   bfd_put_32 (obfd, LD_R11_0R3 + 0, p),		p += 4;
   bfd_put_32 (obfd, LD_R12_0R3 + 8, p),		p += 4;
   bfd_put_32 (obfd, MR_R0_R3, p),		p += 4;
@@ -9596,7 +9805,7 @@ build_tls_get_addr_stub (bfd *obfd, bfd_byte *p, int offset,
 
   if (r != NULL)
     r[0].r_offset += 9 * 4;
-  p = build_plt_stub (obfd, p, offset, r, plt_static_chain);
+  p = build_plt_stub (htab, stub_entry, p, offset, r);
   bfd_put_32 (obfd, BCTRL, p - 4);
 
   bfd_put_32 (obfd, LD_R11_0R1 + 32, p),	p += 4;
@@ -9943,6 +10152,7 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
       break;
 
     case ppc_stub_plt_call:
+    case ppc_stub_plt_call_r2save:
       if (stub_entry->h != NULL
 	  && stub_entry->h->is_func_descriptor
 	  && stub_entry->h->oh != NULL)
@@ -10009,6 +10219,15 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
 	  return FALSE;
 	}
 
+      if (htab->plt_stub_align != 0)
+	{
+	  unsigned pad = plt_stub_pad (htab, stub_entry, off);
+
+	  stub_entry->stub_sec->size += pad;
+	  stub_entry->stub_offset = stub_entry->stub_sec->size;
+	  loc += pad;
+	}
+
       r = NULL;
       if (info->emitrelocations)
 	{
@@ -10028,11 +10247,9 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
 	  && (stub_entry->h == htab->tls_get_addr_fd
 	      || stub_entry->h == htab->tls_get_addr)
 	  && !htab->no_tls_get_addr_opt)
-	p = build_tls_get_addr_stub (htab->stub_bfd, loc, off, r,
-				     htab->plt_static_chain);
+	p = build_tls_get_addr_stub (htab, stub_entry, loc, off, r);
       else
-	p = build_plt_stub (htab->stub_bfd, loc, off, r,
-			    htab->plt_static_chain);
+	p = build_plt_stub (htab, stub_entry, loc, off, r);
       size = p - loc;
       break;
 
@@ -10052,6 +10269,7 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
 				       "long_branch_r2off",
 				       "plt_branch",
 				       "plt_branch_r2off",
+				       "plt_call",
 				       "plt_call" };
 
       len1 = strlen (stub_str[stub_entry->stub_type - 1]);
@@ -10102,7 +10320,8 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
   if (htab == NULL)
     return FALSE;
 
-  if (stub_entry->stub_type == ppc_stub_plt_call)
+  if (stub_entry->stub_type == ppc_stub_plt_call
+      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
     {
       asection *plt;
       off = stub_entry->plt_ent->plt.offset & ~(bfd_vma) 1;
@@ -10118,18 +10337,9 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
 	      - elf_gp (plt->output_section->owner)
 	      - htab->stub_group[stub_entry->id_sec->id].toc_off);
 
-      size = PLT_CALL_STUB_SIZE;
-      if (!htab->plt_static_chain)
-	size -= 4;
-      if (PPC_HA (off) == 0)
-	size -= 4;
-      if (PPC_HA (off + 8 + 8 * htab->plt_static_chain) != PPC_HA (off))
-	size += 4;
-      if (stub_entry->h != NULL
-	  && (stub_entry->h == htab->tls_get_addr_fd
-	      || stub_entry->h == htab->tls_get_addr)
-	  && !htab->no_tls_get_addr_opt)
-	size += 13 * 4;
+      size = plt_stub_size (htab, stub_entry, off);
+      if (htab->plt_stub_align)
+	size += plt_stub_pad (htab, stub_entry, off);
       if (info->emitrelocations)
 	{
 	  stub_entry->stub_sec->reloc_count
@@ -10344,7 +10554,9 @@ ppc64_elf_next_toc_section (struct bfd_link_info *info, asection *isec)
   if (!htab->second_toc_pass)
     {
       /* Keep track of the first .toc or .got section for this input bfd.  */
-      if (htab->toc_bfd != isec->owner)
+      bfd_boolean new_bfd = htab->toc_bfd != isec->owner;
+
+      if (new_bfd)
 	{
 	  htab->toc_bfd = isec->owner;
 	  htab->toc_first_sec = isec;
@@ -10372,7 +10584,8 @@ ppc64_elf_next_toc_section (struct bfd_link_info *info, asection *isec)
 
       /* Die if someone uses a linker script that doesn't keep input
 	 file .toc and .got together.  */
-      if (elf_gp (isec->owner) != 0
+      if (new_bfd
+	  && elf_gp (isec->owner) != 0
 	  && elf_gp (isec->owner) != off)
 	return FALSE;
 
@@ -10741,7 +10954,8 @@ toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec)
 		  sym_value += adjust;
 		}
 
-	      dest = opd_entry_value (sym_sec, sym_value, &sym_sec, NULL);
+	      dest = opd_entry_value (sym_sec, sym_value,
+				      &sym_sec, NULL, FALSE);
 	      if (dest == (bfd_vma) -1)
 		continue;
 	    }
@@ -11098,7 +11312,8 @@ maybe_strip_output (struct bfd_link_info *info, asection *isec)
 
 bfd_boolean
 ppc64_elf_size_stubs (struct bfd_link_info *info, bfd_signed_vma group_size,
-		      bfd_boolean plt_static_chain)
+		      bfd_boolean plt_static_chain, int plt_thread_safe,
+		      int plt_stub_align)
 {
   bfd_size_type stub_group_size;
   bfd_boolean stubs_always_before_branch;
@@ -11108,6 +11323,40 @@ ppc64_elf_size_stubs (struct bfd_link_info *info, bfd_signed_vma group_size,
     return FALSE;
 
   htab->plt_static_chain = plt_static_chain;
+  htab->plt_stub_align = plt_stub_align;
+  if (plt_thread_safe == -1)
+    {
+      const char *const thread_starter[] =
+	{
+	  "pthread_create",
+	  /* libstdc++ */
+	  "_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE",
+	  /* librt */
+	  "aio_init", "aio_read", "aio_write", "aio_fsync", "lio_listio",
+	  "mq_notify", "create_timer",
+	  /* libanl */
+	  "getaddrinfo_a",
+	  /* libgomp */
+	  "GOMP_parallel_start",
+	  "GOMP_parallel_loop_static_start",
+	  "GOMP_parallel_loop_dynamic_start",
+	  "GOMP_parallel_loop_guided_start",
+	  "GOMP_parallel_loop_runtime_start",
+	  "GOMP_parallel_sections_start", 
+	};
+      unsigned i;
+
+      for (i = 0; i < sizeof (thread_starter)/ sizeof (thread_starter[0]); i++)
+	{
+	  struct elf_link_hash_entry *h;
+	  h = elf_link_hash_lookup (&htab->elf, thread_starter[i],
+				    FALSE, FALSE, TRUE);
+	  plt_thread_safe = h != NULL && h->ref_regular;
+	  if (plt_thread_safe)
+	    break;
+	}
+    }
+  htab->plt_thread_safe = plt_thread_safe;
   stubs_always_before_branch = group_size < 0;
   if (group_size < 0)
     stub_group_size = -group_size;
@@ -11281,7 +11530,7 @@ ppc64_elf_size_stubs (struct bfd_link_info *info, bfd_signed_vma group_size,
 			  sym_value += adjust;
 			}
 		      dest = opd_entry_value (sym_sec, sym_value,
-					      &code_sec, &code_value);
+					      &code_sec, &code_value, FALSE);
 		      if (dest != (bfd_vma) -1)
 			{
 			  destination = dest;
@@ -11342,10 +11591,14 @@ ppc64_elf_size_stubs (struct bfd_link_info *info, bfd_signed_vma group_size,
 		  if (stub_type == ppc_stub_plt_call
 		      && irela + 1 < irelaend
 		      && irela[1].r_offset == irela->r_offset + 4
-		      && ELF64_R_TYPE (irela[1].r_info) == R_PPC64_TOCSAVE
-		      && !tocsave_find (htab, INSERT,
-					&local_syms, irela + 1, input_bfd))
-		    goto error_ret_free_internal;
+		      && ELF64_R_TYPE (irela[1].r_info) == R_PPC64_TOCSAVE)
+		    {
+		      if (!tocsave_find (htab, INSERT,
+					 &local_syms, irela + 1, input_bfd))
+			goto error_ret_free_internal;
+		    }
+		  else if (stub_type == ppc_stub_plt_call)
+		    stub_type = ppc_stub_plt_call_r2save;
 
 		  /* Support for grouping stub sections.  */
 		  id_sec = htab->stub_group[section->id].link_sec;
@@ -11361,6 +11614,8 @@ ppc64_elf_size_stubs (struct bfd_link_info *info, bfd_signed_vma group_size,
 		    {
 		      /* The proper stub has already been created.  */
 		      free (stub_name);
+		      if (stub_type == ppc_stub_plt_call_r2save)
+			stub_entry->stub_type = stub_type;
 		      continue;
 		    }
 
@@ -11380,7 +11635,8 @@ ppc64_elf_size_stubs (struct bfd_link_info *info, bfd_signed_vma group_size,
 		    }
 
 		  stub_entry->stub_type = stub_type;
-		  if (stub_type != ppc_stub_plt_call)
+		  if (stub_type != ppc_stub_plt_call
+		      && stub_type != ppc_stub_plt_call_r2save)
 		    {
 		      stub_entry->target_value = code_value;
 		      stub_entry->target_section = code_sec;
@@ -11443,9 +11699,9 @@ ppc64_elf_size_stubs (struct bfd_link_info *info, bfd_signed_vma group_size,
 
       if (htab->glink_eh_frame != NULL
 	  && !bfd_is_abs_section (htab->glink_eh_frame->output_section)
-	  && (htab->glink_eh_frame->flags & SEC_EXCLUDE) == 0)
+	  && htab->glink_eh_frame->output_section->size != 0)
 	{
-	  bfd_size_type size = 0;
+	  size_t size = 0, align;
 
 	  for (stub_sec = htab->stub_bfd->sections;
 	       stub_sec != NULL;
@@ -11456,10 +11712,22 @@ ppc64_elf_size_stubs (struct bfd_link_info *info, bfd_signed_vma group_size,
 	    size += 24;
 	  if (size != 0)
 	    size += sizeof (glink_eh_frame_cie);
+	  align = 1;
+	  align <<= htab->glink_eh_frame->output_section->alignment_power;
+	  align -= 1;
+	  size = (size + align) & ~align;
 	  htab->glink_eh_frame->rawsize = htab->glink_eh_frame->size;
 	  htab->glink_eh_frame->size = size;
 	}
 
+      if (htab->plt_stub_align != 0)
+	for (stub_sec = htab->stub_bfd->sections;
+	     stub_sec != NULL;
+	     stub_sec = stub_sec->next)
+	  if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
+	    stub_sec->size = ((stub_sec->size + (1 << htab->plt_stub_align) - 1)
+			      & (-1 << htab->plt_stub_align));
+
       for (stub_sec = htab->stub_bfd->sections;
 	   stub_sec != NULL;
 	   stub_sec = stub_sec->next)
@@ -11689,17 +11957,21 @@ ppc64_elf_build_stubs (bfd_boolean emit_stub_syms,
       && htab->glink_eh_frame->size != 0)
     {
       bfd_vma val;
+      bfd_byte *last_fde;
+      size_t last_fde_len, size, align, pad;
 
       p = bfd_zalloc (htab->glink_eh_frame->owner, htab->glink_eh_frame->size);
       if (p == NULL)
 	return FALSE;
       htab->glink_eh_frame->contents = p;
+      last_fde = p;
 
       htab->glink_eh_frame->rawsize = htab->glink_eh_frame->size;
 
       memcpy (p, glink_eh_frame_cie, sizeof (glink_eh_frame_cie));
       /* CIE length (rewrite in case little-endian).  */
-      bfd_put_32 (htab->elf.dynobj, sizeof (glink_eh_frame_cie) - 4, p);
+      last_fde_len = sizeof (glink_eh_frame_cie) - 4;
+      bfd_put_32 (htab->elf.dynobj, last_fde_len, p);
       p += sizeof (glink_eh_frame_cie);
 
       for (stub_sec = htab->stub_bfd->sections;
@@ -11707,6 +11979,8 @@ ppc64_elf_build_stubs (bfd_boolean emit_stub_syms,
 	   stub_sec = stub_sec->next)
 	if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
 	  {
+	    last_fde = p;
+	    last_fde_len = 16;
 	    /* FDE length.  */
 	    bfd_put_32 (htab->elf.dynobj, 16, p);
 	    p += 4;
@@ -11739,6 +12013,8 @@ ppc64_elf_build_stubs (bfd_boolean emit_stub_syms,
 	  }
       if (htab->glink != NULL && htab->glink->size != 0)
 	{
+	  last_fde = p;
+	  last_fde_len = 20;
 	  /* FDE length.  */
 	  bfd_put_32 (htab->elf.dynobj, 20, p);
 	  p += 4;
@@ -11776,7 +12052,16 @@ ppc64_elf_build_stubs (bfd_boolean emit_stub_syms,
 	  *p++ = DW_CFA_restore_extended;
 	  *p++ = 65;
 	}
-      htab->glink_eh_frame->size = p - htab->glink_eh_frame->contents;
+      /* Subsume any padding into the last FDE if user .eh_frame
+	 sections are aligned more than glink_eh_frame.  Otherwise any
+	 zero padding will be seen as a terminator.  */
+      size = p - htab->glink_eh_frame->contents;
+      align = 1;
+      align <<= htab->glink_eh_frame->output_section->alignment_power;
+      align -= 1;
+      pad = ((size + align) & ~align) - size;
+      htab->glink_eh_frame->size = size + pad;
+      bfd_put_32 (htab->elf.dynobj, last_fde_len + pad, last_fde);
     }
 
   /* Build the stubs as directed by the stub hash table.  */
@@ -11785,6 +12070,14 @@ ppc64_elf_build_stubs (bfd_boolean emit_stub_syms,
   if (htab->relbrlt != NULL)
     htab->relbrlt->reloc_count = 0;
 
+  if (htab->plt_stub_align != 0)
+    for (stub_sec = htab->stub_bfd->sections;
+	 stub_sec != NULL;
+	 stub_sec = stub_sec->next)
+      if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
+	stub_sec->size = ((stub_sec->size + (1 << htab->plt_stub_align) - 1)
+			  & (-1 << htab->plt_stub_align));
+
   for (stub_sec = htab->stub_bfd->sections;
        stub_sec != NULL;
        stub_sec = stub_sec->next)
@@ -11818,14 +12111,16 @@ ppc64_elf_build_stubs (bfd_boolean emit_stub_syms,
 			 "  toc adjust   %lu\n"
 			 "  long branch  %lu\n"
 			 "  long toc adj %lu\n"
-			 "  plt call     %lu"),
+			 "  plt call     %lu\n"
+			 "  plt call toc %lu"),
 	       stub_sec_count,
 	       stub_sec_count == 1 ? "" : "s",
 	       htab->stub_count[ppc_stub_long_branch - 1],
 	       htab->stub_count[ppc_stub_long_branch_r2off - 1],
 	       htab->stub_count[ppc_stub_plt_branch - 1],
 	       htab->stub_count[ppc_stub_plt_branch_r2off - 1],
-	       htab->stub_count[ppc_stub_plt_call - 1]);
+	       htab->stub_count[ppc_stub_plt_call - 1],
+	       htab->stub_count[ppc_stub_plt_call_r2save - 1]);
     }
   return TRUE;
 }
@@ -11925,8 +12220,8 @@ ppc64_elf_relocate_section (bfd *output_bfd,
   bfd_vma TOCstart;
   bfd_boolean ret = TRUE;
   bfd_boolean is_opd;
-  /* Disabled until we sort out how ld should choose 'y' vs 'at'.  */
-  bfd_boolean is_power4 = FALSE;
+  /* Assume 'at' branch hints.  */
+  bfd_boolean is_isa_v2 = TRUE;
   bfd_vma d_offset = (bfd_big_endian (output_bfd) ? 2 : 0);
 
   /* Initialize howto table if needed.  */
@@ -12036,10 +12331,10 @@ ppc64_elf_relocate_section (bfd *output_bfd,
 	}
       h = (struct ppc_link_hash_entry *) h_elf;
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend,
-					 ppc64_elf_howto_table[r_type],
+					 rel, 1, relend,
+					 ppc64_elf_howto_table[r_type], 0,
 					 contents);
 
       if (info->relocatable)
@@ -12558,6 +12853,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
 	  stub_entry = ppc_get_stub_entry (input_section, sec, fdh, rel, htab);
 	  if (stub_entry != NULL
 	      && (stub_entry->stub_type == ppc_stub_plt_call
+		  || stub_entry->stub_type == ppc_stub_plt_call_r2save
 		  || stub_entry->stub_type == ppc_stub_plt_branch_r2off
 		  || stub_entry->stub_type == ppc_stub_long_branch_r2off))
 	    {
@@ -12586,7 +12882,8 @@ ppc64_elf_relocate_section (bfd *output_bfd,
 
 	      if (!can_plt_call)
 		{
-		  if (stub_entry->stub_type == ppc_stub_plt_call)
+		  if (stub_entry->stub_type == ppc_stub_plt_call
+		      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
 		    {
 		      /* If this is a plain branch rather than a branch
 			 and link, don't require a nop.  However, don't
@@ -12633,7 +12930,8 @@ ppc64_elf_relocate_section (bfd *output_bfd,
 		}
 
 	      if (can_plt_call
-		  && stub_entry->stub_type == ppc_stub_plt_call)
+		  && (stub_entry->stub_type == ppc_stub_plt_call
+		      || stub_entry->stub_type == ppc_stub_plt_call_r2save))
 		unresolved_reloc = FALSE;
 	    }
 
@@ -12646,7 +12944,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
 	      bfd_vma off = (relocation + addend
 			     - sec->output_section->vma
 			     - sec->output_offset);
-	      bfd_vma dest = opd_entry_value (sec, off, NULL, NULL);
+	      bfd_vma dest = opd_entry_value (sec, off, NULL, NULL, FALSE);
 	      if (dest != (bfd_vma) -1)
 		{
 		  relocation = dest;
@@ -12679,7 +12977,10 @@ ppc64_elf_relocate_section (bfd *output_bfd,
 			    + stub_entry->stub_sec->output_section->vma);
 	      addend = 0;
 
- 	      if (stub_entry->stub_type == ppc_stub_plt_call
+ 	      if ((stub_entry->stub_type == ppc_stub_plt_call
+		   || stub_entry->stub_type == ppc_stub_plt_call_r2save)
+		  && (ALWAYS_EMIT_R2SAVE
+		      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
 		  && rel + 1 < relend
 		  && rel[1].r_offset == rel->r_offset + 4
 		  && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOCSAVE)
@@ -12688,7 +12989,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
 
 	  if (insn != 0)
 	    {
-	      if (is_power4)
+	      if (is_isa_v2)
 		{
 		  /* Set 'a' bit.  This is 0b00010 in BO field for branch
 		     on CR(BI) insns (BO == 001at or 011at), and 0b01000
@@ -13626,7 +13927,7 @@ static bfd_boolean
 ppc64_elf_finish_dynamic_symbol (bfd *output_bfd,
 				 struct bfd_link_info *info,
 				 struct elf_link_hash_entry *h,
-				 Elf_Internal_Sym *sym)
+				 Elf_Internal_Sym *sym ATTRIBUTE_UNUSED)
 {
   struct ppc_link_hash_table *htab;
   struct plt_entry *ent;
@@ -13695,10 +13996,6 @@ ppc64_elf_finish_dynamic_symbol (bfd *output_bfd,
       bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
     }
 
-  /* Mark some specially defined symbols as absolute.  */
-  if (strcmp (h->root.root.string, "_DYNAMIC") == 0)
-    sym->st_shndx = SHN_ABS;
-
   return TRUE;
 }
 
@@ -13739,7 +14036,7 @@ ppc64_elf_finish_dynamic_sections (bfd *output_bfd,
     return FALSE;
 
   dynobj = htab->elf.dynobj;
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (htab->elf.dynamic_sections_created)
     {
@@ -13867,7 +14164,7 @@ ppc64_elf_finish_dynamic_sections (bfd *output_bfd,
 
 
   if (htab->glink_eh_frame != NULL
-      && htab->glink_eh_frame->sec_info_type == ELF_INFO_TYPE_EH_FRAME
+      && htab->glink_eh_frame->sec_info_type == SEC_INFO_TYPE_EH_FRAME
       && !_bfd_elf_write_section_eh_frame (output_bfd, info,
 					   htab->glink_eh_frame,
 					   htab->glink_eh_frame->contents))
diff --git a/bfd/elf64-ppc.h b/bfd/elf64-ppc.h
index 9026c56..2728b27 100644
--- a/bfd/elf64-ppc.h
+++ b/bfd/elf64-ppc.h
@@ -1,5 +1,5 @@
 /* PowerPC64-specific support for 64-bit ELF.
-   Copyright 2002, 2003, 2004, 2005, 2007, 2008, 2010, 2011
+   Copyright 2002, 2003, 2004, 2005, 2007, 2008, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -49,7 +49,7 @@ bfd_boolean ppc64_elf_check_init_fini
 bfd_boolean ppc64_elf_next_input_section
   (struct bfd_link_info *, asection *);
 bfd_boolean ppc64_elf_size_stubs
-  (struct bfd_link_info *, bfd_signed_vma, bfd_boolean);
+(struct bfd_link_info *, bfd_signed_vma, bfd_boolean, int, int);
 bfd_boolean ppc64_elf_build_stubs
   (bfd_boolean, struct bfd_link_info *, char **);
 void ppc64_elf_restore_symbols
diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c
index 7d3e882..8512fc0 100644
--- a/bfd/elf64-s390.c
+++ b/bfd/elf64-s390.c
@@ -1,6 +1,6 @@
 /* IBM S/390-specific support for 64-bit ELF
    Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
-   2010, 2011 Free Software Foundation, Inc.
+   2010, 2011, 2012 Free Software Foundation, Inc.
    Contributed Martin Schwidefsky (schwidefsky at de.ibm.com).
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -25,69 +25,19 @@
 #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 bfd_boolean elf_s390_is_local_label_name
-  PARAMS ((bfd *, const char *));
-static struct bfd_hash_entry *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 bfd_boolean create_got_section
-  PARAMS((bfd *, struct bfd_link_info *));
-static bfd_boolean elf_s390_create_dynamic_sections
-  PARAMS((bfd *, struct bfd_link_info *));
-static void elf_s390_copy_indirect_symbol
-  PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *,
-	   struct elf_link_hash_entry *));
-static bfd_boolean elf_s390_check_relocs
-  PARAMS ((bfd *, struct bfd_link_info *, asection *,
-	   const Elf_Internal_Rela *));
-struct elf_s390_link_hash_entry;
-static void elf_s390_adjust_gotplt
-  PARAMS ((struct elf_s390_link_hash_entry *));
-static bfd_boolean elf_s390_adjust_dynamic_symbol
-  PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *));
-static bfd_boolean allocate_dynrelocs
-  PARAMS ((struct elf_link_hash_entry *, PTR));
-static bfd_boolean readonly_dynrelocs
-  PARAMS ((struct elf_link_hash_entry *, PTR));
-static bfd_boolean elf_s390_size_dynamic_sections
-  PARAMS ((bfd *, struct bfd_link_info *));
-static bfd_boolean elf_s390_relocate_section
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
-	   Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
-static bfd_boolean elf_s390_finish_dynamic_symbol
-  PARAMS ((bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
-	   Elf_Internal_Sym *));
-static enum elf_reloc_type_class elf_s390_reloc_type_class
-  PARAMS ((const Elf_Internal_Rela *));
-static bfd_boolean elf_s390_finish_dynamic_sections
-  PARAMS ((bfd *, struct bfd_link_info *));
-static bfd_boolean elf_s390_object_p
-  PARAMS ((bfd *));
-static int elf_s390_tls_transition
-  PARAMS ((struct bfd_link_info *, int, int));
-static bfd_reloc_status_type s390_tls_reloc
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
-static bfd_vma dtpoff_base
-  PARAMS ((struct bfd_link_info *));
-static bfd_vma tpoff
-  PARAMS ((struct bfd_link_info *, bfd_vma));
-static void invalid_tls_insn
-  PARAMS ((bfd *, asection *, Elf_Internal_Rela *));
-static bfd_reloc_status_type s390_elf_ldisp_reloc
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
-
 #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)
 
+static bfd_reloc_status_type
+s390_tls_reloc (bfd *, arelent *, asymbol *, void *,
+		asection *, bfd *, char **);
+static bfd_reloc_status_type
+s390_elf_ldisp_reloc (bfd *, arelent *, asymbol *, void *,
+		      asection *, bfd *, char **);
+
 /* The relocation "howto" table.  */
 static reloc_howto_type elf_howto_table[] =
 {
@@ -219,6 +169,9 @@ static reloc_howto_type elf_howto_table[] =
 	s390_elf_ldisp_reloc, "R_390_GOTPLT20", FALSE, 0,0x0fffff00, FALSE),
   HOWTO(R_390_TLS_GOTIE20, 0, 2, 20, FALSE, 8, complain_overflow_dont,
 	s390_elf_ldisp_reloc, "R_390_TLS_GOTIE20", FALSE, 0,0x0fffff00, FALSE),
+  HOWTO(R_390_IRELATIVE, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
+	bfd_elf_generic_reloc, "R_390_IRELATIVE", FALSE, 0, MINUS_ONE, FALSE),
+
 };
 
 /* GNU extension to record C++ vtable hierarchy.  */
@@ -228,9 +181,8 @@ 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;
+elf_s390_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+			    bfd_reloc_code_real_type code)
 {
   switch (code)
     {
@@ -346,6 +298,8 @@ elf_s390_reloc_type_lookup (abfd, code)
       return &elf_howto_table[(int) R_390_GOTPLT20];
     case BFD_RELOC_390_TLS_GOTIE20:
       return &elf_howto_table[(int) R_390_TLS_GOTIE20];
+    case BFD_RELOC_390_IRELATIVE:
+      return &elf_howto_table[(int) R_390_IRELATIVE];
     case BFD_RELOC_VTABLE_INHERIT:
       return &elf64_s390_vtinherit_howto;
     case BFD_RELOC_VTABLE_ENTRY:
@@ -381,10 +335,9 @@ elf_s390_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
    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;
+elf_s390_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+			arelent *cache_ptr,
+			Elf_Internal_Rela *dst)
 {
   unsigned int r_type = ELF64_R_TYPE(dst->r_info);
   switch (r_type)
@@ -410,15 +363,13 @@ elf_s390_info_to_howto (abfd, cache_ptr, dst)
 
 /* A relocation function which doesn't do anything.  */
 static bfd_reloc_status_type
-s390_tls_reloc (abfd, reloc_entry, symbol, data, input_section,
-		output_bfd, error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry;
-     asymbol *symbol ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+s390_tls_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+		arelent *reloc_entry,
+		asymbol *symbol ATTRIBUTE_UNUSED,
+		void * data ATTRIBUTE_UNUSED,
+		asection *input_section,
+		bfd *output_bfd,
+		char **error_message ATTRIBUTE_UNUSED)
 {
   if (output_bfd)
     reloc_entry->address += input_section->output_offset;
@@ -427,15 +378,13 @@ s390_tls_reloc (abfd, reloc_entry, symbol, data, input_section,
 
 /* Handle the large displacement relocs.  */
 static bfd_reloc_status_type
-s390_elf_ldisp_reloc (abfd, reloc_entry, symbol, data, input_section,
-                      output_bfd, error_message)
-     bfd *abfd;
-     arelent *reloc_entry;
-     asymbol *symbol;
-     PTR data;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+s390_elf_ldisp_reloc (bfd *abfd,
+		      arelent *reloc_entry,
+		      asymbol *symbol,
+		      void * data,
+		      asection *input_section,
+		      bfd *output_bfd,
+		      char **error_message ATTRIBUTE_UNUSED)
 {
   reloc_howto_type *howto = reloc_entry->howto;
   bfd_vma relocation;
@@ -478,9 +427,7 @@ s390_elf_ldisp_reloc (abfd, reloc_entry, symbol, data, input_section,
 }
 
 static bfd_boolean
-elf_s390_is_local_label_name (abfd, name)
-     bfd *abfd;
-     const char *name;
+elf_s390_is_local_label_name (bfd *abfd, const char *name)
 {
   if (name[0] == '.' && (name[1] == 'X' || name[1] == 'L'))
     return TRUE;
@@ -493,7 +440,7 @@ elf_s390_is_local_label_name (abfd, name)
 /* The name of the dynamic interpreter.  This is put in the .interp
    section.  */
 
-#define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
+#define ELF_DYNAMIC_INTERPRETER "/lib/ld64.so.1"
 
 /* If ELIMINATE_COPY_RELOCS is non-zero, the linker will try to avoid
    copying dynamic variables from a shared lib into an app's dynbss
@@ -508,6 +455,8 @@ elf_s390_is_local_label_name (abfd, name)
 
 #define GOT_ENTRY_SIZE 8
 
+#define RELA_ENTRY_SIZE sizeof (Elf64_External_Rela)
+
 /* 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
@@ -540,31 +489,33 @@ elf_s390_is_local_label_name (abfd, name)
    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
+         .long ?          # 4 bytes  offset into .rela.plt
 
    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     (bfd_vma) 0xc0100000
-#define PLT_ENTRY_WORD1     (bfd_vma) 0x0000e310
-#define PLT_ENTRY_WORD2     (bfd_vma) 0x10000004
-#define PLT_ENTRY_WORD3     (bfd_vma) 0x07f10d10
-#define PLT_ENTRY_WORD4     (bfd_vma) 0xe310100c
-#define PLT_ENTRY_WORD5     (bfd_vma) 0x0014c0f4
-#define PLT_ENTRY_WORD6     (bfd_vma) 0x00000000
-#define PLT_ENTRY_WORD7     (bfd_vma) 0x00000000
+   Fixup at offset 28: 32 bit offset into .rela.plt
+
+   A 32 bit offset into the symbol table is enough. It allows for
+   .rela.plt sections up to a size of 2 gigabyte.  A single dynamic
+   object (the main program, any shared library) is limited to 4GB in
+   size.  Having a .rela.plt of 2GB would already make the .plt
+   section bigger than 8GB.  */
+
+static const bfd_byte elf_s390x_plt_entry[PLT_ENTRY_SIZE] =
+  {
+    0xc0, 0x10, 0x00, 0x00, 0x00, 0x00,     /* larl    %r1,.       */
+    0xe3, 0x10, 0x10, 0x00, 0x00, 0x04,     /* lg      %r1,0(%r1)  */
+    0x07, 0xf1,                             /* br      %r1         */
+    0x0d, 0x10,                             /* basr    %r1,%r0     */
+    0xe3, 0x10, 0x10, 0x0c, 0x00, 0x14,     /* lgf     %r1,12(%r1) */
+    0xc0, 0xf4, 0x00, 0x00, 0x00, 0x00,     /* jg      first plt   */
+    0x00, 0x00, 0x00, 0x00                  /* .long   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.  */
+   from R1 onto the stack at 56(15) and the loader object info
+   at 48(15), loads the loader address in R1 and jumps to it.  */
 
 /* The first entry in the PLT:
 
@@ -577,34 +528,18 @@ elf_s390_is_local_label_name (abfd, name)
 
      Fixup at offset 8: relative address to start of GOT.  */
 
-#define PLT_FIRST_ENTRY_WORD0     (bfd_vma) 0xe310f038
-#define PLT_FIRST_ENTRY_WORD1     (bfd_vma) 0x0024c010
-#define PLT_FIRST_ENTRY_WORD2     (bfd_vma) 0x00000000
-#define PLT_FIRST_ENTRY_WORD3     (bfd_vma) 0xd207f030
-#define PLT_FIRST_ENTRY_WORD4     (bfd_vma) 0x1008e310
-#define PLT_FIRST_ENTRY_WORD5     (bfd_vma) 0x10100004
-#define PLT_FIRST_ENTRY_WORD6     (bfd_vma) 0x07f10700
-#define PLT_FIRST_ENTRY_WORD7     (bfd_vma) 0x07000700
-
-/* The s390 linker needs to keep track of the number of relocs that it
-   decides to copy as dynamic relocs in check_relocs for each symbol.
-   This is so that it can later discard them if they are found to be
-   unnecessary.  We store the information in a field extending the
-   regular ELF linker hash table.  */
-
-struct elf_s390_dyn_relocs
-{
-  struct elf_s390_dyn_relocs *next;
-
-  /* The input section of the reloc.  */
-  asection *sec;
-
-  /* Total number of relocs copied for the input section.  */
-  bfd_size_type count;
+static const bfd_byte elf_s390x_first_plt_entry[PLT_FIRST_ENTRY_SIZE] =
+  {
+    0xe3, 0x10, 0xf0, 0x38, 0x00, 0x24,     /* stg     %r1,56(%r15)      */
+    0xc0, 0x10, 0x00, 0x00, 0x00, 0x00,     /* larl    %r1,.             */
+    0xd2, 0x07, 0xf0, 0x30, 0x10, 0x08,     /* mvc     48(8,%r15),8(%r1) */
+    0xe3, 0x10, 0x10, 0x10, 0x00, 0x04,     /* lg      %r1,16(%r1)       */
+    0x07, 0xf1,                             /* br      %r1               */
+    0x07, 0x00,                             /* nopr    %r0               */
+    0x07, 0x00,                             /* nopr    %r0               */
+    0x07, 0x00                              /* nopr    %r0               */
+  };
 
-  /* Number of pc-relative relocs copied for the input section.  */
-  bfd_size_type pc_count;
-};
 
 /* s390 ELF linker hash entry.  */
 
@@ -613,7 +548,7 @@ struct elf_s390_link_hash_entry
   struct elf_link_hash_entry elf;
 
   /* Track dynamic relocs copied for this symbol.  */
-  struct elf_s390_dyn_relocs *dyn_relocs;
+  struct elf_dyn_relocs *dyn_relocs;
 
   /* Number of GOTPLT references for a function.  */
   bfd_signed_vma gotplt_refcount;
@@ -624,17 +559,43 @@ struct elf_s390_link_hash_entry
 #define GOT_TLS_IE	3
 #define GOT_TLS_IE_NLT	3
   unsigned char tls_type;
+
+  /* For pointer equality reasons we might need to change the symbol
+     type from STT_GNU_IFUNC to STT_FUNC together with its value and
+     section entry.  So after alloc_dynrelocs only these values should
+     be used.  In order to check whether a symbol is IFUNC use
+     s390_is_ifunc_symbol_p.  */
+  bfd_vma ifunc_resolver_address;
+  asection *ifunc_resolver_section;
 };
 
 #define elf_s390_hash_entry(ent) \
   ((struct elf_s390_link_hash_entry *)(ent))
 
+/* This structure represents an entry in the local PLT list needed for
+   local IFUNC symbols.  */
+struct plt_entry
+{
+  /* The section of the local symbol.
+     Set in relocate_section and used in finish_dynamic_sections.  */
+  asection *sec;
+
+  union
+    {
+      bfd_signed_vma refcount;
+      bfd_vma offset;
+    } plt;
+};
+
 /* NOTE: Keep this structure in sync with
    the one declared in elf32-s390.c.  */
 struct elf_s390_obj_tdata
 {
   struct elf_obj_tdata root;
 
+  /* A local PLT is needed for ifunc symbols.  */
+  struct plt_entry *local_plt;
+
   /* TLS type for each local got entry.  */
   char *local_got_tls_type;
 };
@@ -642,6 +603,9 @@ struct elf_s390_obj_tdata
 #define elf_s390_tdata(abfd) \
   ((struct elf_s390_obj_tdata *) (abfd)->tdata.any)
 
+#define elf_s390_local_plt(abfd) \
+  (elf_s390_tdata (abfd)->local_plt)
+
 #define elf_s390_local_got_tls_type(abfd) \
   (elf_s390_tdata (abfd)->local_got_tls_type)
 
@@ -658,8 +622,7 @@ elf_s390_mkobject (bfd *abfd)
 }
 
 static bfd_boolean
-elf_s390_object_p (abfd)
-     bfd *abfd;
+elf_s390_object_p (bfd *abfd)
 {
   /* Set the right machine number for an s390 elf32 file.  */
   return bfd_default_set_arch_mach (abfd, bfd_arch_s390, bfd_mach_s390_64);
@@ -672,13 +635,9 @@ struct elf_s390_link_hash_table
   struct elf_link_hash_table elf;
 
   /* Short-cuts to get to dynamic linker sections.  */
-  asection *sgot;
-  asection *sgotplt;
-  asection *srelgot;
-  asection *splt;
-  asection *srelplt;
   asection *sdynbss;
   asection *srelbss;
+  asection *irelifunc;
 
   union {
     bfd_signed_vma refcount;
@@ -695,13 +654,15 @@ struct elf_s390_link_hash_table
   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
   == S390_ELF_DATA ? ((struct elf_s390_link_hash_table *) ((p)->hash)) : NULL)
 
+#define ELF64 1
+#include "elf-s390-common.c"
+
 /* Create an entry in an s390 ELF linker hash table.  */
 
 static struct bfd_hash_entry *
-link_hash_newfunc (entry, table, string)
-     struct bfd_hash_entry *entry;
-     struct bfd_hash_table *table;
-     const char *string;
+link_hash_newfunc (struct bfd_hash_entry *entry,
+		   struct bfd_hash_table *table,
+		   const char *string)
 {
   /* Allocate the structure if it has not already been allocated by a
      subclass.  */
@@ -723,6 +684,8 @@ link_hash_newfunc (entry, table, string)
       eh->dyn_relocs = NULL;
       eh->gotplt_refcount = 0;
       eh->tls_type = GOT_UNKNOWN;
+      eh->ifunc_resolver_address = 0;
+      eh->ifunc_resolver_section = NULL;
     }
 
   return entry;
@@ -731,8 +694,7 @@ link_hash_newfunc (entry, table, string)
 /* Create an s390 ELF linker hash table.  */
 
 static struct bfd_link_hash_table *
-elf_s390_link_hash_table_create (abfd)
-     bfd *abfd;
+elf_s390_link_hash_table_create (bfd *abfd)
 {
   struct elf_s390_link_hash_table *ret;
   bfd_size_type amt = sizeof (struct elf_s390_link_hash_table);
@@ -749,11 +711,11 @@ elf_s390_link_hash_table_create (abfd)
       return NULL;
     }
 
-  ret->sgot = NULL;
-  ret->sgotplt = NULL;
-  ret->srelgot = NULL;
-  ret->splt = NULL;
-  ret->srelplt = NULL;
+  ret->elf.sgot = NULL;
+  ret->elf.sgotplt = NULL;
+  ret->elf.srelgot = NULL;
+  ret->elf.splt = NULL;
+  ret->elf.srelplt = NULL;
   ret->sdynbss = NULL;
   ret->srelbss = NULL;
   ret->tls_ldm_got.refcount = 0;
@@ -778,10 +740,10 @@ create_got_section (bfd *dynobj,
   if (htab == NULL)
     return FALSE;
 
-  htab->sgot = bfd_get_section_by_name (dynobj, ".got");
-  htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
-  htab->srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
-  if (!htab->sgot || !htab->sgotplt || !htab->srelgot)
+  htab->elf.sgot = bfd_get_linker_section (dynobj, ".got");
+  htab->elf.sgotplt = bfd_get_linker_section (dynobj, ".got.plt");
+  htab->elf.srelgot = bfd_get_linker_section (dynobj, ".rela.got");
+  if (!htab->elf.sgot || !htab->elf.sgotplt || !htab->elf.srelgot)
     abort ();
   return TRUE;
 }
@@ -800,19 +762,19 @@ elf_s390_create_dynamic_sections (bfd *dynobj,
   if (htab == NULL)
     return FALSE;
 
-  if (!htab->sgot && !create_got_section (dynobj, info))
+  if (!htab->elf.sgot && !create_got_section (dynobj, info))
     return FALSE;
 
   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
     return FALSE;
 
-  htab->splt = bfd_get_section_by_name (dynobj, ".plt");
-  htab->srelplt = bfd_get_section_by_name (dynobj, ".rela.plt");
-  htab->sdynbss = bfd_get_section_by_name (dynobj, ".dynbss");
+  htab->elf.splt = bfd_get_linker_section (dynobj, ".plt");
+  htab->elf.srelplt = bfd_get_linker_section (dynobj, ".rela.plt");
+  htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss");
   if (!info->shared)
-    htab->srelbss = bfd_get_section_by_name (dynobj, ".rela.bss");
+    htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss");
 
-  if (!htab->splt || !htab->srelplt || !htab->sdynbss
+  if (!htab->elf.splt || !htab->elf.srelplt || !htab->sdynbss
       || (!info->shared && !htab->srelbss))
     abort ();
 
@@ -822,9 +784,9 @@ elf_s390_create_dynamic_sections (bfd *dynobj,
 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
 
 static void
-elf_s390_copy_indirect_symbol (info, dir, ind)
-     struct bfd_link_info *info;
-     struct elf_link_hash_entry *dir, *ind;
+elf_s390_copy_indirect_symbol (struct bfd_link_info *info,
+			       struct elf_link_hash_entry *dir,
+			       struct elf_link_hash_entry *ind)
 {
   struct elf_s390_link_hash_entry *edir, *eind;
 
@@ -835,14 +797,14 @@ elf_s390_copy_indirect_symbol (info, dir, ind)
     {
       if (edir->dyn_relocs != NULL)
 	{
-	  struct elf_s390_dyn_relocs **pp;
-	  struct elf_s390_dyn_relocs *p;
+	  struct elf_dyn_relocs **pp;
+	  struct elf_dyn_relocs *p;
 
 	  /* Add reloc counts against the indirect sym to the direct sym
 	     list.  Merge any entries against the same section.  */
 	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
 	    {
-	      struct elf_s390_dyn_relocs *q;
+	      struct elf_dyn_relocs *q;
 
 	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
 		if (q->sec == p->sec)
@@ -886,10 +848,9 @@ elf_s390_copy_indirect_symbol (info, dir, ind)
 }
 
 static int
-elf_s390_tls_transition (info, r_type, is_local)
-     struct bfd_link_info *info;
-     int r_type;
-     int is_local;
+elf_s390_tls_transition (struct bfd_link_info *info,
+			 int r_type,
+			 int is_local)
 {
   if (info->shared)
     return r_type;
@@ -952,6 +913,7 @@ elf_s390_check_relocs (bfd *abfd,
       unsigned int r_type;
       unsigned long r_symndx;
       struct elf_link_hash_entry *h;
+      Elf_Internal_Sym *isym;
 
       r_symndx = ELF64_R_SYM (rel->r_info);
 
@@ -964,7 +926,31 @@ elf_s390_check_relocs (bfd *abfd,
 	}
 
       if (r_symndx < symtab_hdr->sh_info)
-	h = NULL;
+	{
+	  /* A local symbol.  */
+	  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+					abfd, r_symndx);
+	  if (isym == NULL)
+	    return FALSE;
+
+	  if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
+	    {
+	      struct plt_entry *plt;
+
+	      if (!s390_elf_create_ifunc_sections (htab->elf.dynobj, info))
+		return FALSE;
+
+	      if (local_got_refcounts == NULL)
+		{
+		  if (!elf_s390_allocate_local_syminfo (abfd, symtab_hdr))
+		    return FALSE;
+		  local_got_refcounts = elf_local_got_refcounts (abfd);
+		}
+	      plt = elf_s390_local_plt (abfd);
+	      plt[r_symndx].plt.refcount++;
+	    }
+	  h = NULL;
+	}
       else
 	{
 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
@@ -1002,25 +988,18 @@ elf_s390_check_relocs (bfd *abfd,
 	  if (h == NULL
 	      && local_got_refcounts == NULL)
 	    {
-	      bfd_size_type size;
-
-	      size = symtab_hdr->sh_info;
-	      size *= (sizeof (bfd_signed_vma) + sizeof(char));
-	      local_got_refcounts = ((bfd_signed_vma *)
-				     bfd_zalloc (abfd, size));
-	      if (local_got_refcounts == NULL)
+	      if (!elf_s390_allocate_local_syminfo (abfd, symtab_hdr))
 		return FALSE;
-	      elf_local_got_refcounts (abfd) = local_got_refcounts;
-	      elf_s390_local_got_tls_type (abfd)
-		= (char *) (local_got_refcounts + symtab_hdr->sh_info);
+	      local_got_refcounts = elf_local_got_refcounts (abfd);
 	    }
+
 	  /* Fall through.  */
 	case R_390_GOTOFF16:
 	case R_390_GOTOFF32:
 	case R_390_GOTOFF64:
 	case R_390_GOTPC:
 	case R_390_GOTPCDBL:
-	  if (htab->sgot == NULL)
+	  if (htab->elf.sgot == NULL)
 	    {
 	      if (htab->elf.dynobj == NULL)
 		htab->elf.dynobj = abfd;
@@ -1029,6 +1008,25 @@ elf_s390_check_relocs (bfd *abfd,
 	    }
 	}
 
+      if (h != NULL)
+	{
+	  if (htab->elf.dynobj == NULL)
+	    htab->elf.dynobj = abfd;
+	  if (!s390_elf_create_ifunc_sections (htab->elf.dynobj, info))
+	    return FALSE;
+
+	  /* Make sure an IFUNC symbol defined in a non-shared object
+	     always gets a PLT slot.  */
+	  if (s390_is_ifunc_symbol_p (h) && h->def_regular)
+	    {
+	      /* The symbol is called by the dynamic loader in order
+		 to resolve the relocation.  So it is in fact also
+		 referenced.  */
+	      h->ref_regular = 1;
+	      h->needs_plt = 1;
+	    }
+	}
+
       switch (r_type)
 	{
 	case R_390_GOTOFF16:
@@ -1036,7 +1034,10 @@ elf_s390_check_relocs (bfd *abfd,
 	case R_390_GOTOFF64:
 	case R_390_GOTPC:
 	case R_390_GOTPCDBL:
-	  /* Got is created, nothing to be done.  */
+	  /* These relocs do not need a GOT slot.  They just load the
+	     GOT pointer itself or address something else relative to
+	     the GOT.  Since the GOT pointer has been set up above we
+	     are done.  */
 	  break;
 
 	case R_390_PLT16DBL:
@@ -1183,7 +1184,7 @@ elf_s390_check_relocs (bfd *abfd,
 	case R_390_PC32:
 	case R_390_PC32DBL:
 	case R_390_PC64:
-	  if (h != NULL && !info->shared)
+	  if (h != NULL)
 	    {
 	      /* If this reloc is in a read-only section, we might
 		 need a copy reloc.  We can't check reliably at this
@@ -1193,9 +1194,12 @@ elf_s390_check_relocs (bfd *abfd,
 		 adjust_dynamic_symbol.  */
 	      h->non_got_ref = 1;
 
-	      /* We may need a .plt entry if the function this reloc
-		 refers to is in a shared lib.  */
-	      h->plt.refcount += 1;
+	      if (!info->shared)
+		{
+		  /* We may need a .plt entry if the function this reloc
+		     refers to is in a shared lib.  */
+		  h->plt.refcount += 1;
+		}
 	    }
 
 	  /* If we are creating a shared library, and this is a reloc
@@ -1237,8 +1241,8 @@ elf_s390_check_relocs (bfd *abfd,
 		  && (h->root.type == bfd_link_hash_defweak
 		      || !h->def_regular)))
 	    {
-	      struct elf_s390_dyn_relocs *p;
-	      struct elf_s390_dyn_relocs **head;
+	      struct elf_dyn_relocs *p;
+	      struct elf_dyn_relocs **head;
 
 	      /* We must copy these reloc types into the output file.
 		 Create a reloc section in dynobj and make room for
@@ -1268,7 +1272,6 @@ elf_s390_check_relocs (bfd *abfd,
 		     easily.  Oh well.  */
 		  asection *s;
 		  void *vpp;
-		  Elf_Internal_Sym *isym;
 
 		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
 						abfd, r_symndx);
@@ -1280,14 +1283,14 @@ elf_s390_check_relocs (bfd *abfd,
 		    s = sec;
 
 		  vpp = &elf_section_data (s)->local_dynrel;
-		  head = (struct elf_s390_dyn_relocs **) vpp;
+		  head = (struct elf_dyn_relocs **) vpp;
 		}
 
 	      p = *head;
 	      if (p == NULL || p->sec != sec)
 		{
 		  bfd_size_type amt = sizeof *p;
-		  p = ((struct elf_s390_dyn_relocs *)
+		  p = ((struct elf_dyn_relocs *)
 		       bfd_alloc (htab->elf.dynobj, amt));
 		  if (p == NULL)
 		    return FALSE;
@@ -1391,8 +1394,8 @@ elf_s390_gc_sweep_hook (bfd *abfd,
       if (r_symndx >= symtab_hdr->sh_info)
 	{
 	  struct elf_s390_link_hash_entry *eh;
-	  struct elf_s390_dyn_relocs **pp;
-	  struct elf_s390_dyn_relocs *p;
+	  struct elf_dyn_relocs **pp;
+	  struct elf_dyn_relocs *p;
 
 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
 	  while (h->root.type == bfd_link_hash_indirect
@@ -1408,6 +1411,23 @@ elf_s390_gc_sweep_hook (bfd *abfd,
 		break;
 	      }
 	}
+      else
+	{
+	  Elf_Internal_Sym *isym;
+
+	  /* A local symbol.  */
+	  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+					abfd, r_symndx);
+	  if (isym == NULL)
+	    return FALSE;
+
+	  if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
+	    {
+	      struct plt_entry *plt = elf_s390_local_plt (abfd);
+	      if (plt[r_symndx].plt.refcount > 0)
+		plt[r_symndx].plt.refcount--;
+	    }
+	}
 
       r_type = ELF64_R_TYPE (rel->r_info);
       r_type = elf_s390_tls_transition (info, r_type, h != NULL);
@@ -1513,8 +1533,7 @@ elf_s390_gc_sweep_hook (bfd *abfd,
    created (we're only linking static objects).  */
 
 static void
-elf_s390_adjust_gotplt (h)
-     struct elf_s390_link_hash_entry *h;
+elf_s390_adjust_gotplt (struct elf_s390_link_hash_entry *h)
 {
   if (h->elf.root.type == bfd_link_hash_warning)
     h = (struct elf_s390_link_hash_entry *) h->elf.root.u.i.link;
@@ -1541,6 +1560,10 @@ elf_s390_adjust_dynamic_symbol (struct bfd_link_info *info,
   struct elf_s390_link_hash_table *htab;
   asection *s;
 
+  /* STT_GNU_IFUNC symbol must go through PLT. */
+  if (s390_is_ifunc_symbol_p (h))
+    return TRUE;
+
   /* 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).  */
@@ -1611,7 +1634,7 @@ elf_s390_adjust_dynamic_symbol (struct bfd_link_info *info,
   if (ELIMINATE_COPY_RELOCS)
     {
       struct elf_s390_link_hash_entry * eh;
-      struct elf_s390_dyn_relocs *p;
+      struct elf_dyn_relocs *p;
 
       eh = (struct elf_s390_link_hash_entry *) h;
       for (p = eh->dyn_relocs; p != NULL; p = p->next)
@@ -1630,13 +1653,6 @@ elf_s390_adjust_dynamic_symbol (struct bfd_link_info *info,
 	}
     }
 
-  if (h->size == 0)
-    {
-      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
-			     h->root.root.string);
-      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
@@ -1654,7 +1670,7 @@ elf_s390_adjust_dynamic_symbol (struct bfd_link_info *info,
   /* 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.  */
-  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
       htab->srelbss->size += sizeof (Elf64_External_Rela);
       h->needs_copy = 1;
@@ -1674,8 +1690,8 @@ allocate_dynrelocs (struct elf_link_hash_entry *h,
 {
   struct bfd_link_info *info;
   struct elf_s390_link_hash_table *htab;
-  struct elf_s390_link_hash_entry *eh;
-  struct elf_s390_dyn_relocs *p;
+  struct elf_s390_link_hash_entry *eh = (struct elf_s390_link_hash_entry *)h;
+  struct elf_dyn_relocs *p;
 
   if (h->root.type == bfd_link_hash_indirect)
     return TRUE;
@@ -1685,8 +1701,13 @@ allocate_dynrelocs (struct elf_link_hash_entry *h,
   if (htab == NULL)
     return FALSE;
 
-  if (htab->elf.dynamic_sections_created
-      && h->plt.refcount > 0)
+  /* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
+     here if it is defined and referenced in a non-shared object.  */
+  if (s390_is_ifunc_symbol_p (h) && h->def_regular)
+    return s390_elf_allocate_ifunc_dyn_relocs (info, h,
+					       &eh->dyn_relocs);
+  else if (htab->elf.dynamic_sections_created
+	   && h->plt.refcount > 0)
     {
       /* Make sure this symbol is output as a dynamic symbol.
 	 Undefined weak syms won't yet be marked as dynamic.  */
@@ -1700,7 +1721,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h,
       if (info->shared
 	  || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h))
 	{
-	  asection *s = htab->splt;
+	  asection *s = htab->elf.splt;
 
 	  /* If this is the first .plt entry, make room for the special
 	     first entry.  */
@@ -1726,10 +1747,10 @@ allocate_dynrelocs (struct elf_link_hash_entry *h,
 
 	  /* We also need to make an entry in the .got.plt section, which
 	     will be placed in the .got section by the linker script.  */
-	  htab->sgotplt->size += GOT_ENTRY_SIZE;
+	  htab->elf.sgotplt->size += GOT_ENTRY_SIZE;
 
 	  /* We also need to make an entry in the .rela.plt section.  */
-	  htab->srelplt->size += sizeof (Elf64_External_Rela);
+	  htab->elf.srelplt->size += sizeof (Elf64_External_Rela);
 	}
       else
 	{
@@ -1759,8 +1780,8 @@ allocate_dynrelocs (struct elf_link_hash_entry *h,
 	   to be stored somewhere. The immediate value in the instruction
 	   is not bit enough so the value is stored in the got.  */
 	{
-	  h->got.offset = htab->sgot->size;
-	  htab->sgot->size += GOT_ENTRY_SIZE;
+	  h->got.offset = htab->elf.sgot->size;
+	  htab->elf.sgot->size += GOT_ENTRY_SIZE;
 	}
       else
 	h->got.offset = (bfd_vma) -1;
@@ -1780,7 +1801,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h,
 	    return FALSE;
 	}
 
-      s = htab->sgot;
+      s = htab->elf.sgot;
       h->got.offset = s->size;
       s->size += GOT_ENTRY_SIZE;
       /* R_390_TLS_GD64 needs 2 consecutive GOT slots.  */
@@ -1791,19 +1812,18 @@ allocate_dynrelocs (struct elf_link_hash_entry *h,
 	 R_390_TLS_GD64 needs one if local symbol and two if global.  */
       if ((tls_type == GOT_TLS_GD && h->dynindx == -1)
 	  || tls_type >= GOT_TLS_IE)
-	htab->srelgot->size += sizeof (Elf64_External_Rela);
+	htab->elf.srelgot->size += sizeof (Elf64_External_Rela);
       else if (tls_type == GOT_TLS_GD)
-	htab->srelgot->size += 2 * sizeof (Elf64_External_Rela);
+	htab->elf.srelgot->size += 2 * sizeof (Elf64_External_Rela);
       else if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
 		|| h->root.type != bfd_link_hash_undefweak)
 	       && (info->shared
 		   || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)))
-	htab->srelgot->size += sizeof (Elf64_External_Rela);
+	htab->elf.srelgot->size += sizeof (Elf64_External_Rela);
     }
   else
     h->got.offset = (bfd_vma) -1;
 
-  eh = (struct elf_s390_link_hash_entry *) h;
   if (eh->dyn_relocs == NULL)
     return TRUE;
 
@@ -1817,7 +1837,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h,
     {
       if (SYMBOL_CALLS_LOCAL (info, h))
 	{
-	  struct elf_s390_dyn_relocs **pp;
+	  struct elf_dyn_relocs **pp;
 
 	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
 	    {
@@ -1894,12 +1914,10 @@ allocate_dynrelocs (struct elf_link_hash_entry *h,
 /* Find any dynamic relocs that apply to read-only sections.  */
 
 static bfd_boolean
-readonly_dynrelocs (h, inf)
-     struct elf_link_hash_entry *h;
-     PTR inf;
+readonly_dynrelocs (struct elf_link_hash_entry *h, void * inf)
 {
   struct elf_s390_link_hash_entry *eh;
-  struct elf_s390_dyn_relocs *p;
+  struct elf_dyn_relocs *p;
 
   eh = (struct elf_s390_link_hash_entry *) h;
   for (p = eh->dyn_relocs; p != NULL; p = p->next)
@@ -1944,7 +1962,7 @@ elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  if (s == NULL)
 	    abort ();
 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
@@ -1962,13 +1980,15 @@ elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
       bfd_size_type locsymcount;
       Elf_Internal_Shdr *symtab_hdr;
       asection *srela;
+      struct plt_entry *local_plt;
+      unsigned int i;
 
       if (! is_s390_elf (ibfd))
 	continue;
 
       for (s = ibfd->sections; s != NULL; s = s->next)
 	{
-	  struct elf_s390_dyn_relocs *p;
+	  struct elf_dyn_relocs *p;
 
 	  for (p = elf_section_data (s)->local_dynrel; p != NULL; p = p->next)
 	    {
@@ -1998,8 +2018,8 @@ elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
       locsymcount = symtab_hdr->sh_info;
       end_local_got = local_got + locsymcount;
       local_tls_type = elf_s390_local_got_tls_type (ibfd);
-      s = htab->sgot;
-      srela = htab->srelgot;
+      s = htab->elf.sgot;
+      srela = htab->elf.srelgot;
       for (; local_got < end_local_got; ++local_got, ++local_tls_type)
 	{
 	  if (*local_got > 0)
@@ -2014,22 +2034,36 @@ elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 	  else
 	    *local_got = (bfd_vma) -1;
 	}
+
+      local_plt = elf_s390_local_plt (ibfd);
+      for (i = 0; i < symtab_hdr->sh_info; i++)
+	{
+	  if (local_plt[i].plt.refcount > 0)
+	    {
+	      local_plt[i].plt.offset = htab->elf.iplt->size;
+	      htab->elf.iplt->size += PLT_ENTRY_SIZE;
+	      htab->elf.igotplt->size += GOT_ENTRY_SIZE;
+	      htab->elf.irelplt->size += sizeof (Elf64_External_Rela);
+	    }
+	  else
+	    local_plt[i].plt.offset = (bfd_vma) -1;
+	}
     }
 
   if (htab->tls_ldm_got.refcount > 0)
     {
       /* Allocate 2 got entries and 1 dynamic reloc for R_390_TLS_LDM64
 	 relocs.  */
-      htab->tls_ldm_got.offset = htab->sgot->size;
-      htab->sgot->size += 2 * GOT_ENTRY_SIZE;
-      htab->srelgot->size += sizeof (Elf64_External_Rela);
+      htab->tls_ldm_got.offset = htab->elf.sgot->size;
+      htab->elf.sgot->size += 2 * GOT_ENTRY_SIZE;
+      htab->elf.srelgot->size += sizeof (Elf64_External_Rela);
     }
   else
     htab->tls_ldm_got.offset = -1;
 
   /* Allocate global sym .plt and .got entries, and space for global
      sym dynamic relocs.  */
-  elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, (PTR) info);
+  elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
 
   /* We now have determined the sizes of the various dynamic sections.
      Allocate memory for them.  */
@@ -2039,17 +2073,20 @@ elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
       if ((s->flags & SEC_LINKER_CREATED) == 0)
 	continue;
 
-      if (s == htab->splt
-	  || s == htab->sgot
-	  || s == htab->sgotplt
-	  || s == htab->sdynbss)
+      if (s == htab->elf.splt
+	  || s == htab->elf.sgot
+	  || s == htab->elf.sgotplt
+	  || s == htab->sdynbss
+	  || s == htab->elf.iplt
+	  || s == htab->elf.igotplt
+	  || s == htab->irelifunc)
 	{
 	  /* Strip this section if we don't need it; see the
 	     comment below.  */
 	}
       else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rela"))
 	{
-	  if (s->size != 0 && s != htab->srelplt)
+	  if (s->size != 0 && s != htab->elf.srelplt)
 	    relocs = TRUE;
 
 	  /* We use the reloc_count field as a counter if we need
@@ -2107,7 +2144,7 @@ elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 	    return FALSE;
 	}
 
-      if (htab->splt->size != 0)
+      if (htab->elf.splt->size != 0)
 	{
 	  if (!add_dynamic_entry (DT_PLTGOT, 0)
 	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
@@ -2127,7 +2164,7 @@ elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 	     then we need a DT_TEXTREL entry.  */
 	  if ((info->flags & DF_TEXTREL) == 0)
 	    elf_link_hash_traverse (&htab->elf, readonly_dynrelocs,
-				    (PTR) info);
+				    info);
 
 	  if ((info->flags & DF_TEXTREL) != 0)
 	    {
@@ -2146,8 +2183,7 @@ elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
    This is PT_TLS segment p_vaddr.  */
 
 static bfd_vma
-dtpoff_base (info)
-     struct bfd_link_info *info;
+dtpoff_base (struct bfd_link_info *info)
 {
   /* If tls_sec is NULL, we should have signalled an error already.  */
   if (elf_hash_table (info)->tls_sec == NULL)
@@ -2159,9 +2195,7 @@ dtpoff_base (info)
    if STT_TLS virtual address is ADDRESS.  */
 
 static bfd_vma
-tpoff (info, address)
-     struct bfd_link_info *info;
-     bfd_vma address;
+tpoff (struct bfd_link_info *info, bfd_vma address)
 {
   struct elf_link_hash_table *htab = elf_hash_table (info);
 
@@ -2175,10 +2209,9 @@ tpoff (info, address)
    instruction.  */
 
 static void
-invalid_tls_insn (input_bfd, input_section, rel)
-     bfd *input_bfd;
-     asection *input_section;
-     Elf_Internal_Rela *rel;
+invalid_tls_insn (bfd *input_bfd,
+		  asection *input_section,
+		  Elf_Internal_Rela *rel)
 {
   reloc_howto_type *howto;
 
@@ -2236,6 +2269,7 @@ elf_s390_relocate_section (bfd *output_bfd,
       bfd_boolean unresolved_reloc;
       bfd_reloc_status_type r;
       int tls_type;
+      asection *base_got = htab->elf.sgot;
 
       r_type = ELF64_R_TYPE (rel->r_info);
       if (r_type == (int) R_390_GNU_VTINHERIT
@@ -2258,7 +2292,55 @@ elf_s390_relocate_section (bfd *output_bfd,
 	{
 	  sym = local_syms + r_symndx;
 	  sec = local_sections[r_symndx];
-	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+
+	  if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
+	    {
+	      struct plt_entry *local_plt = elf_s390_local_plt (input_bfd);
+	      if (local_plt == NULL)
+		return FALSE;
+
+	      /* Address of the PLT slot.  */
+	      relocation = (htab->elf.iplt->output_section->vma
+			    + htab->elf.iplt->output_offset
+			    + local_plt[r_symndx].plt.offset);
+
+	      switch (r_type)
+		{
+		case R_390_GOTPLT12:
+		case R_390_GOTPLT16:
+		case R_390_GOTPLT20:
+		case R_390_GOTPLT32:
+		case R_390_GOTPLT64:
+		case R_390_GOTPLTENT:
+		case R_390_GOT12:
+		case R_390_GOT16:
+		case R_390_GOT20:
+		case R_390_GOT32:
+		case R_390_GOT64:
+		case R_390_GOTENT:
+		  {
+		    /* Write the PLT slot address into the GOT slot.  */
+		    bfd_put_64 (output_bfd, relocation,
+				htab->elf.sgot->contents +
+				local_got_offsets[r_symndx]);
+		    relocation = (local_got_offsets[r_symndx] +
+				  htab->elf.sgot->output_offset);
+
+		    if (r_type == R_390_GOTENT || r_type == R_390_GOTPLTENT)
+		      relocation += htab->elf.sgot->output_section->vma;
+		    break;
+		  }
+		default:
+		  break;
+		}
+	      /* The output section is needed later in
+		 finish_dynamic_section when creating the dynamic
+		 relocation.  */
+	      local_plt[r_symndx].sec = sec;
+	      goto do_relocation;
+	    }
+	  else
+	    relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
 	}
       else
 	{
@@ -2270,9 +2352,9 @@ elf_s390_relocate_section (bfd *output_bfd,
 				   unresolved_reloc, warned);
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -2298,18 +2380,28 @@ elf_s390_relocate_section (bfd *output_bfd,
 	    {
 	      bfd_vma plt_index;
 
-	      /* 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.  */
-	      relocation = (plt_index + 3) * GOT_ENTRY_SIZE;
+	      if (s390_is_ifunc_symbol_p (h))
+		{
+		  plt_index = h->plt.offset / PLT_ENTRY_SIZE;
+		  relocation = (plt_index * GOT_ENTRY_SIZE +
+				htab->elf.igotplt->output_offset);
+		  if (r_type == R_390_GOTPLTENT)
+		    relocation += htab->elf.igotplt->output_section->vma;
+		}
+	      else
+		{
+		  /* 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.  */
+		  relocation = (plt_index + 3) * GOT_ENTRY_SIZE;
+		  if (r_type == R_390_GOTPLTENT)
+		    relocation += htab->elf.sgot->output_section->vma;
+		}
 	      unresolved_reloc = FALSE;
-
-	      if (r_type == R_390_GOTPLTENT)
-		relocation += htab->sgot->output_section->vma;
 	      break;
 	    }
 	  /* Fall through.  */
@@ -2322,7 +2414,7 @@ elf_s390_relocate_section (bfd *output_bfd,
 	case R_390_GOTENT:
 	  /* Relocation is to the entry for this symbol in the global
 	     offset table.  */
-	  if (htab->sgot == NULL)
+	  if (base_got == NULL)
 	    abort ();
 
 	  if (h != NULL)
@@ -2331,11 +2423,29 @@ elf_s390_relocate_section (bfd *output_bfd,
 
 	      off = h->got.offset;
 	      dyn = htab->elf.dynamic_sections_created;
-	      if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
-		  || (info->shared
-		      && SYMBOL_REFERENCES_LOCAL (info, h))
-		  || (ELF_ST_VISIBILITY (h->other)
-		      && h->root.type == bfd_link_hash_undefweak))
+
+	      if (s390_is_ifunc_symbol_p (h))
+		{
+		  BFD_ASSERT (h->plt.offset != (bfd_vma) -1);
+		  if (off == (bfd_vma)-1)
+		    {
+		      /* No explicit GOT usage so redirect to the
+			 got.iplt slot.  */
+		      base_got = htab->elf.igotplt;
+		      off = h->plt.offset / PLT_ENTRY_SIZE * GOT_ENTRY_SIZE;
+		    }
+		  else
+		    {
+		      /* Explicit GOT slots must contain the address
+			 of the PLT slot. This will be handled in
+			 finish_dynamic_symbol.  */
+		    }
+		}
+	      else if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
+		       || (info->shared
+			   && SYMBOL_REFERENCES_LOCAL (info, h))
+		       || (ELF_ST_VISIBILITY (h->other)
+			   && h->root.type == bfd_link_hash_undefweak))
 		{
 		  /* This is actually a static link, or it is a
 		     -Bsymbolic link and the symbol is defined
@@ -2354,7 +2464,7 @@ elf_s390_relocate_section (bfd *output_bfd,
 		  else
 		    {
 		      bfd_put_64 (output_bfd, relocation,
-				  htab->sgot->contents + off);
+				  base_got->contents + off);
 		      h->got.offset |= 1;
 		    }
 		}
@@ -2376,7 +2486,7 @@ elf_s390_relocate_section (bfd *output_bfd,
 	      else
 		{
 		  bfd_put_64 (output_bfd, relocation,
-			      htab->sgot->contents + off);
+			      htab->elf.sgot->contents + off);
 
 		  if (info->shared)
 		    {
@@ -2384,12 +2494,12 @@ elf_s390_relocate_section (bfd *output_bfd,
 		      Elf_Internal_Rela outrel;
 		      bfd_byte *loc;
 
-		      s = htab->srelgot;
+		      s = htab->elf.srelgot;
 		      if (s == NULL)
 			abort ();
 
-		      outrel.r_offset = (htab->sgot->output_section->vma
-					 + htab->sgot->output_offset
+		      outrel.r_offset = (htab->elf.sgot->output_section->vma
+					 + htab->elf.sgot->output_offset
 					 + off);
 		      outrel.r_info = ELF64_R_INFO (0, R_390_RELATIVE);
 		      outrel.r_addend = relocation;
@@ -2405,7 +2515,7 @@ elf_s390_relocate_section (bfd *output_bfd,
 	  if (off >= (bfd_vma) -2)
 	    abort ();
 
-	  relocation = htab->sgot->output_offset + off;
+	  relocation = base_got->output_offset + off;
 
 	  /* For @GOTENT the relocation is against the offset between
 	     the instruction and the symbols entry in the GOT and not
@@ -2413,7 +2523,7 @@ elf_s390_relocate_section (bfd *output_bfd,
 	     add the vma of the GOT to get the correct value.  */
 	  if (   r_type == R_390_GOTENT
 	      || r_type == R_390_GOTPLTENT)
-	    relocation += htab->sgot->output_section->vma;
+	    relocation += base_got->output_section->vma;
 
 	  break;
 
@@ -2428,13 +2538,13 @@ elf_s390_relocate_section (bfd *output_bfd,
 	     defined _GLOBAL_OFFSET_TABLE in a different way, as is
 	     permitted by the ABI, we might have to change this
 	     calculation.  */
-	  relocation -= htab->sgot->output_section->vma;
+	  relocation -= htab->elf.sgot->output_section->vma;
 	  break;
 
 	case R_390_GOTPC:
 	case R_390_GOTPCDBL:
 	  /* Use global offset table as symbol value.  */
-	  relocation = htab->sgot->output_section->vma;
+	  relocation = htab->elf.sgot->output_section->vma;
 	  unresolved_reloc = FALSE;
 	  break;
 
@@ -2451,17 +2561,21 @@ elf_s390_relocate_section (bfd *output_bfd,
 	    break;
 
 	  if (h->plt.offset == (bfd_vma) -1
-	      || htab->splt == NULL)
+	      || (htab->elf.splt == NULL && htab->elf.iplt == NULL))
 	    {
 	      /* We didn't make a PLT entry for this symbol.  This
 		 happens when statically linking PIC code, or when
 		 using -Bsymbolic.  */
 	      break;
 	    }
-
-	  relocation = (htab->splt->output_section->vma
-			+ htab->splt->output_offset
-			+ h->plt.offset);
+	  if (s390_is_ifunc_symbol_p (h))
+	    relocation = (htab->elf.iplt->output_section->vma
+			  + htab->elf.iplt->output_offset
+			  + h->plt.offset);
+	  else
+	    relocation = (htab->elf.splt->output_section->vma
+			  + htab->elf.splt->output_offset
+			  + h->plt.offset);
 	  unresolved_reloc = FALSE;
 	  break;
 
@@ -2475,16 +2589,22 @@ elf_s390_relocate_section (bfd *output_bfd,
 	     this symbol resolve the symbol directly.  */
 	  if (   h == NULL
 	      || h->plt.offset == (bfd_vma) -1
-	      || htab->splt == NULL)
+	      || htab->elf.splt == NULL)
 	    {
-	      relocation -= htab->sgot->output_section->vma;
+	      relocation -= htab->elf.sgot->output_section->vma;
 	      break;
 	    }
 
-	  relocation = (htab->splt->output_section->vma
-			+ htab->splt->output_offset
-			+ h->plt.offset
-			- htab->sgot->output_section->vma);
+	  if (s390_is_ifunc_symbol_p (h))
+	    relocation = (htab->elf.iplt->output_section->vma
+			  + htab->elf.iplt->output_offset
+			  + h->plt.offset
+			  - htab->elf.sgot->output_section->vma);
+	  else
+	    relocation = (htab->elf.splt->output_section->vma
+			  + htab->elf.splt->output_offset
+			  + h->plt.offset
+			  - htab->elf.sgot->output_section->vma);
 	  unresolved_reloc = FALSE;
 	  break;
 
@@ -2497,6 +2617,68 @@ elf_s390_relocate_section (bfd *output_bfd,
 	case R_390_PC32:
 	case R_390_PC32DBL:
 	case R_390_PC64:
+
+	  if (h != NULL
+	      && s390_is_ifunc_symbol_p (h)
+	      && h->def_regular)
+	    {
+	      if (!info->shared || !h->non_got_ref)
+		{
+		  /* For a non-shared object STT_GNU_IFUNC symbol must
+		     go through PLT.  */
+		  relocation = (htab->elf.iplt->output_section->vma
+				+ htab->elf.iplt->output_offset
+				+ h ->plt.offset);
+		  goto do_relocation;
+		}
+	      else
+		{
+		  /* For shared objects a runtime relocation is needed.  */
+
+		  Elf_Internal_Rela outrel;
+		  asection *sreloc;
+
+		  /* Need a dynamic relocation to get the real function
+		     address.  */
+		  outrel.r_offset = _bfd_elf_section_offset (output_bfd,
+							     info,
+							     input_section,
+							     rel->r_offset);
+		  if (outrel.r_offset == (bfd_vma) -1
+		      || outrel.r_offset == (bfd_vma) -2)
+		    abort ();
+
+		  outrel.r_offset += (input_section->output_section->vma
+				      + input_section->output_offset);
+
+		  if (h->dynindx == -1
+		      || h->forced_local
+		      || info->executable)
+		    {
+		      /* This symbol is resolved locally.  */
+		      outrel.r_info = ELF64_R_INFO (0, R_390_IRELATIVE);
+		      outrel.r_addend = (h->root.u.def.value
+					 + h->root.u.def.section->output_section->vma
+					 + h->root.u.def.section->output_offset);
+		    }
+		  else
+		    {
+		      outrel.r_info = ELF64_R_INFO (h->dynindx, r_type);
+		      outrel.r_addend = 0;
+		    }
+
+		  sreloc = htab->elf.irelifunc;
+		  elf_append_rela (output_bfd, sreloc, &outrel);
+
+		  /* 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.  For an
+		     internal symbol, we have updated addend.  */
+		  continue;
+		}
+	    }
+
 	  if ((input_section->flags & SEC_ALLOC) == 0)
 	    break;
 
@@ -2667,7 +2849,7 @@ elf_s390_relocate_section (bfd *output_bfd,
 	      continue;
 	    }
 
-	  if (htab->sgot == NULL)
+	  if (htab->elf.sgot == NULL)
 	    abort ();
 
 	  if (h != NULL)
@@ -2690,11 +2872,11 @@ elf_s390_relocate_section (bfd *output_bfd,
 	      bfd_byte *loc;
 	      int dr_type, indx;
 
-	      if (htab->srelgot == NULL)
+	      if (htab->elf.srelgot == NULL)
 		abort ();
 
-	      outrel.r_offset = (htab->sgot->output_section->vma
-				 + htab->sgot->output_offset + off);
+	      outrel.r_offset = (htab->elf.sgot->output_section->vma
+				 + htab->elf.sgot->output_offset + off);
 
 	      indx = h && h->dynindx != -1 ? h->dynindx : 0;
 	      if (r_type == R_390_TLS_GD64)
@@ -2706,8 +2888,8 @@ elf_s390_relocate_section (bfd *output_bfd,
 	      else
 		outrel.r_addend = 0;
 	      outrel.r_info = ELF64_R_INFO (indx, dr_type);
-	      loc = htab->srelgot->contents;
-	      loc += htab->srelgot->reloc_count++
+	      loc = htab->elf.srelgot->contents;
+	      loc += htab->elf.srelgot->reloc_count++
 		* sizeof (Elf64_External_Rela);
 	      bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
 
@@ -2718,14 +2900,14 @@ elf_s390_relocate_section (bfd *output_bfd,
 	    	      BFD_ASSERT (! unresolved_reloc);
 		      bfd_put_64 (output_bfd,
 				  relocation - dtpoff_base (info),
-				  htab->sgot->contents + off + GOT_ENTRY_SIZE);
+				  htab->elf.sgot->contents + off + GOT_ENTRY_SIZE);
 		    }
 		  else
 		    {
 		      outrel.r_info = ELF64_R_INFO (indx, R_390_TLS_DTPOFF);
 		      outrel.r_offset += GOT_ENTRY_SIZE;
 		      outrel.r_addend = 0;
-		      htab->srelgot->reloc_count++;
+		      htab->elf.srelgot->reloc_count++;
 		      loc += sizeof (Elf64_External_Rela);
 		      bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
 		    }
@@ -2741,14 +2923,14 @@ elf_s390_relocate_section (bfd *output_bfd,
 	    abort ();
 	  if (r_type == ELF64_R_TYPE (rel->r_info))
 	    {
-	      relocation = htab->sgot->output_offset + off;
+	      relocation = htab->elf.sgot->output_offset + off;
 	      if (r_type == R_390_TLS_IE64 || r_type == R_390_TLS_IEENT)
-		relocation += htab->sgot->output_section->vma;
+		relocation += htab->elf.sgot->output_section->vma;
 	      unresolved_reloc = FALSE;
 	    }
 	  else
 	    {
-	      bfd_put_64 (output_bfd, htab->sgot->output_offset + off,
+	      bfd_put_64 (output_bfd, htab->elf.sgot->output_offset + off,
 			  contents + rel->r_offset);
 	      continue;
 	    }
@@ -2773,15 +2955,15 @@ elf_s390_relocate_section (bfd *output_bfd,
 		goto emit_tls_relocs;
 	    }
 
-	  if (htab->sgot == NULL)
+	  if (htab->elf.sgot == NULL)
 	    abort ();
 
 	  BFD_ASSERT (! unresolved_reloc);
 	  bfd_put_64 (output_bfd, -tpoff (info, relocation),
-		      htab->sgot->contents + off);
-	  relocation = htab->sgot->output_offset + off;
+		      htab->elf.sgot->contents + off);
+	  relocation = htab->elf.sgot->output_offset + off;
 	  if (r_type == R_390_TLS_IEENT)
-	    relocation += htab->sgot->output_section->vma;
+	    relocation += htab->elf.sgot->output_section->vma;
 	  unresolved_reloc = FALSE;
 	  break;
 
@@ -2792,7 +2974,7 @@ elf_s390_relocate_section (bfd *output_bfd,
 	       and the value will turn out zero.  */
 	    continue;
 
-	  if (htab->sgot == NULL)
+	  if (htab->elf.sgot == NULL)
 	    abort ();
 
 	  off = htab->tls_ldm_got.offset;
@@ -2803,23 +2985,23 @@ elf_s390_relocate_section (bfd *output_bfd,
 	      Elf_Internal_Rela outrel;
 	      bfd_byte *loc;
 
-	      if (htab->srelgot == NULL)
+	      if (htab->elf.srelgot == NULL)
 		abort ();
 
-	      outrel.r_offset = (htab->sgot->output_section->vma
-				 + htab->sgot->output_offset + off);
+	      outrel.r_offset = (htab->elf.sgot->output_section->vma
+				 + htab->elf.sgot->output_offset + off);
 
 	      bfd_put_64 (output_bfd, 0,
-			  htab->sgot->contents + off + GOT_ENTRY_SIZE);
+			  htab->elf.sgot->contents + off + GOT_ENTRY_SIZE);
 	      outrel.r_info = ELF64_R_INFO (0, R_390_TLS_DTPMOD);
 	      outrel.r_addend = 0;
-	      loc = htab->srelgot->contents;
-	      loc += htab->srelgot->reloc_count++
+	      loc = htab->elf.srelgot->contents;
+	      loc += htab->elf.srelgot->reloc_count++
 		* sizeof (Elf64_External_Rela);
 	      bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
 	      htab->tls_ldm_got.offset |= 1;
 	    }
-	  relocation = htab->sgot->output_offset + off;
+	  relocation = htab->elf.sgot->output_offset + off;
 	  unresolved_reloc = FALSE;
 	  break;
 
@@ -2861,7 +3043,7 @@ elf_s390_relocate_section (bfd *output_bfd,
 	  continue;
 
 	case R_390_TLS_LDO64:
-	  if (info->shared)
+	  if (info->shared || (input_section->flags & SEC_DEBUGGING))
 	    relocation -= dtpoff_base (info);
 	  else
 	    /* When converting LDO to LE, we must negate.  */
@@ -2982,6 +3164,8 @@ elf_s390_relocate_section (bfd *output_bfd,
 	   howto->name,
 	   h->root.root.string);
 
+    do_relocation:
+
       if (r_type == R_390_20
 	  || r_type == R_390_GOT20
 	  || r_type == R_390_GOTPLT20
@@ -3038,6 +3222,92 @@ elf_s390_relocate_section (bfd *output_bfd,
   return TRUE;
 }
 
+/* Generate the PLT slots together with the dynamic relocations needed
+   for IFUNC symbols.  */
+
+static void
+elf_s390_finish_ifunc_symbol (bfd *output_bfd,
+			      struct bfd_link_info *info,
+			      struct elf_link_hash_entry *h,
+			      struct elf_s390_link_hash_table *htab,
+			      bfd_vma plt_offset,
+			      bfd_vma resolver_address)
+{
+  bfd_vma plt_index;
+  bfd_vma got_offset;
+  Elf_Internal_Rela rela;
+  bfd_byte *loc;
+  asection *plt, *gotplt, *relplt;
+
+  if (htab->elf.iplt == NULL
+      || htab->elf.igotplt == NULL
+      || htab->elf.irelplt == NULL)
+    abort ();
+
+  /* Index of the PLT slot within iplt section.  */
+  plt_index = plt_offset / PLT_ENTRY_SIZE;
+  plt = htab->elf.iplt;
+  /* Offset into the igot.plt section.  */
+  got_offset = plt_index * GOT_ENTRY_SIZE;
+  gotplt = htab->elf.igotplt;
+  relplt = htab->elf.irelplt;
+
+  /* Fill in the blueprint of a PLT.  */
+  memcpy (plt->contents + plt_offset, elf_s390x_plt_entry,
+	  PLT_ENTRY_SIZE);
+
+  /* Fixup the relative address to the GOT entry */
+  bfd_put_32 (output_bfd,
+	      (gotplt->output_section->vma +
+	       gotplt->output_offset + got_offset
+	       - (plt->output_section->vma +
+		  plt->output_offset +
+		  plt_offset))/2,
+	      plt->contents + plt_offset + 2);
+  /* Fixup the relative branch to PLT 0 */
+  bfd_put_32 (output_bfd, - (plt->output_offset +
+			     (PLT_ENTRY_SIZE * plt_index) + 22)/2,
+	      plt->contents + plt_offset + 24);
+  /* Fixup offset into .rela.plt section.  */
+  bfd_put_32 (output_bfd, relplt->output_offset +
+	      plt_index * sizeof (Elf64_External_Rela),
+	      plt->contents + plt_offset + 28);
+
+  /* Fill in the entry in the global offset table.
+     Points to instruction after GOT offset.  */
+  bfd_put_64 (output_bfd,
+	      (plt->output_section->vma
+	       + plt->output_offset
+	       + plt_offset
+	       + 14),
+	      gotplt->contents + got_offset);
+
+  /* Fill in the entry in the .rela.plt section.  */
+  rela.r_offset = (gotplt->output_section->vma
+		   + gotplt->output_offset
+		   + got_offset);
+
+  if (!h
+      || h->dynindx == -1
+      || ((info->executable
+	   || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
+	  && h->def_regular))
+    {
+      /* The symbol can be locally resolved.  */
+      rela.r_info = ELF64_R_INFO (0, R_390_IRELATIVE);
+      rela.r_addend = resolver_address;
+    }
+  else
+    {
+      rela.r_info = ELF64_R_INFO (h->dynindx, R_390_JMP_SLOT);
+      rela.r_addend = 0;
+    }
+
+  loc = relplt->contents + plt_index * sizeof (Elf64_External_Rela);
+  bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
+}
+
+
 /* Finish up dynamic symbol handling.  We set the contents of various
    dynamic sections here.  */
 
@@ -3048,6 +3318,7 @@ elf_s390_finish_dynamic_symbol (bfd *output_bfd,
 				Elf_Internal_Sym *sym)
 {
   struct elf_s390_link_hash_table *htab;
+  struct elf_s390_link_hash_entry *eh = (struct elf_s390_link_hash_entry*)h;
 
   htab = elf_s390_hash_table (info);
   if (htab == NULL)
@@ -3062,78 +3333,82 @@ elf_s390_finish_dynamic_symbol (bfd *output_bfd,
 
       /* This symbol has an entry in the procedure linkage table.  Set
 	 it up.  */
+      if (s390_is_ifunc_symbol_p (h))
+	{
+	  /* If we can resolve the IFUNC symbol locally we generate an
+	     IRELATIVE reloc.  */
+	  elf_s390_finish_ifunc_symbol (output_bfd, info, h, htab, h->plt.offset,
+					eh->ifunc_resolver_address +
+					eh->ifunc_resolver_section->output_offset +
+					eh->ifunc_resolver_section->output_section->vma);
+				 ;
+	  /* Fallthrough.  Handling of explicit GOT slots of IFUNC
+	     symbols is below.  */
+	}
+      else
+	{
+	  if (h->dynindx == -1
+	      || htab->elf.splt == NULL
+	      || htab->elf.sgotplt == NULL
+	      || htab->elf.srelplt == NULL)
+	    abort ();
 
-      if (h->dynindx == -1
-	  || htab->splt == NULL
-	  || htab->sgotplt == NULL
-	  || htab->srelplt == NULL)
-	abort ();
+	  /* Calc. index no.
+	     Current offset - size first entry / entry size.  */
+	  plt_index = (h->plt.offset - PLT_FIRST_ENTRY_SIZE) / PLT_ENTRY_SIZE;
 
-      /* 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, (bfd_vma) PLT_ENTRY_WORD0,
-		  htab->splt->contents + h->plt.offset);
-      bfd_put_32 (output_bfd, (bfd_vma) PLT_ENTRY_WORD1,
-		  htab->splt->contents + h->plt.offset + 4);
-      bfd_put_32 (output_bfd, (bfd_vma) PLT_ENTRY_WORD2,
-		  htab->splt->contents + h->plt.offset + 8);
-      bfd_put_32 (output_bfd, (bfd_vma) PLT_ENTRY_WORD3,
-		  htab->splt->contents + h->plt.offset + 12);
-      bfd_put_32 (output_bfd, (bfd_vma) PLT_ENTRY_WORD4,
-		  htab->splt->contents + h->plt.offset + 16);
-      bfd_put_32 (output_bfd, (bfd_vma) PLT_ENTRY_WORD5,
-		  htab->splt->contents + h->plt.offset + 20);
-      bfd_put_32 (output_bfd, (bfd_vma) PLT_ENTRY_WORD6,
-		  htab->splt->contents + h->plt.offset + 24);
-      bfd_put_32 (output_bfd, (bfd_vma) PLT_ENTRY_WORD7,
-		  htab->splt->contents + h->plt.offset + 28);
-      /* Fixup the relative address to the GOT entry */
-      bfd_put_32 (output_bfd,
-		  (htab->sgotplt->output_section->vma +
-		   htab->sgotplt->output_offset + got_offset
-		   - (htab->splt->output_section->vma + h->plt.offset))/2,
-		  htab->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,
-		  htab->splt->contents + h->plt.offset + 24);
-      /* Fixup offset into symbol table */
-      bfd_put_32 (output_bfd, plt_index * sizeof (Elf64_External_Rela),
-		  htab->splt->contents + h->plt.offset + 28);
-
-      /* Fill in the entry in the global offset table.
-	 Points to instruction after GOT offset.  */
-      bfd_put_64 (output_bfd,
-		  (htab->splt->output_section->vma
-		   + htab->splt->output_offset
-		   + h->plt.offset
-		   + 14),
-		  htab->sgotplt->contents + got_offset);
-
-      /* Fill in the entry in the .rela.plt section.  */
-      rela.r_offset = (htab->sgotplt->output_section->vma
-		       + htab->sgotplt->output_offset
-		       + got_offset);
-      rela.r_info = ELF64_R_INFO (h->dynindx, R_390_JMP_SLOT);
-      rela.r_addend = 0;
-      loc = htab->srelplt->contents + plt_index * sizeof (Elf64_External_Rela);
-      bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
+	  /* Offset in GOT is PLT index plus GOT headers(3) times 8,
+	     addr & GOT addr.  */
+	  got_offset = (plt_index + 3) * GOT_ENTRY_SIZE;
 
-      if (!h->def_regular)
-	{
-	  /* Mark the symbol as undefined, rather than as defined in
-	     the .plt section.  Leave the value alone.  This is a clue
-	     for the dynamic linker, to make function pointer
-	     comparisons work between an application and shared
-	     library.  */
-	  sym->st_shndx = SHN_UNDEF;
+	  /* Fill in the blueprint of a PLT.  */
+	  memcpy (htab->elf.splt->contents + h->plt.offset, elf_s390x_plt_entry,
+		  PLT_ENTRY_SIZE);
+
+	  /* Fixup the relative address to the GOT entry */
+	  bfd_put_32 (output_bfd,
+		      (htab->elf.sgotplt->output_section->vma +
+		       htab->elf.sgotplt->output_offset + got_offset
+		       - (htab->elf.splt->output_section->vma +
+			  htab->elf.splt->output_offset +
+			  h->plt.offset))/2,
+		      htab->elf.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,
+		      htab->elf.splt->contents + h->plt.offset + 24);
+	  /* Fixup offset into .rela.plt section.  */
+	  bfd_put_32 (output_bfd, plt_index * sizeof (Elf64_External_Rela),
+		      htab->elf.splt->contents + h->plt.offset + 28);
+
+	  /* Fill in the entry in the global offset table.
+	     Points to instruction after GOT offset.  */
+	  bfd_put_64 (output_bfd,
+		      (htab->elf.splt->output_section->vma
+		       + htab->elf.splt->output_offset
+		       + h->plt.offset
+		       + 14),
+		      htab->elf.sgotplt->contents + got_offset);
+
+	  /* Fill in the entry in the .rela.plt section.  */
+	  rela.r_offset = (htab->elf.sgotplt->output_section->vma
+			   + htab->elf.sgotplt->output_offset
+			   + got_offset);
+	  rela.r_info = ELF64_R_INFO (h->dynindx, R_390_JMP_SLOT);
+	  rela.r_addend = 0;
+	  loc = htab->elf.srelplt->contents + plt_index *
+	    sizeof (Elf64_External_Rela);
+	  bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
+
+	  if (!h->def_regular)
+	    {
+	      /* Mark the symbol as undefined, rather than as defined in
+		 the .plt section.  Leave the value alone.  This is a clue
+		 for the dynamic linker, to make function pointer
+		 comparisons work between an application and shared
+		 library.  */
+	      sym->st_shndx = SHN_UNDEF;
+	    }
 	}
     }
 
@@ -3147,21 +3422,44 @@ elf_s390_finish_dynamic_symbol (bfd *output_bfd,
 
       /* This symbol has an entry in the global offset table.  Set it
 	 up.  */
-      if (htab->sgot == NULL || htab->srelgot == NULL)
+      if (htab->elf.sgot == NULL || htab->elf.srelgot == NULL)
 	abort ();
 
-      rela.r_offset = (htab->sgot->output_section->vma
-		       + htab->sgot->output_offset
+      rela.r_offset = (htab->elf.sgot->output_section->vma
+		       + htab->elf.sgot->output_offset
 		       + (h->got.offset &~ (bfd_vma) 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 (info->shared
+      if (h->def_regular && s390_is_ifunc_symbol_p (h))
+	{
+	  if (info->shared)
+	    {
+	      /* An explicit GOT slot usage needs GLOB_DAT.  If the
+		 symbol references local the implicit got.iplt slot
+		 will be used and the IRELATIVE reloc has been created
+		 above.  */
+	      goto do_glob_dat;
+	    }
+	  else
+	    {
+	      /* For non-shared objects explicit GOT slots must be
+		 filled with the PLT slot address for pointer
+		 equality reasons.  */
+	      bfd_put_64 (output_bfd, (htab->elf.iplt->output_section->vma
+				       + htab->elf.iplt->output_offset
+				       + h->plt.offset),
+			  htab->elf.sgot->contents + h->got.offset);
+	      return TRUE;
+	    }
+	}
+      else if (info->shared
 	  && SYMBOL_REFERENCES_LOCAL (info, h))
 	{
+	  /* 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 (!h->def_regular)
 	    return FALSE;
 	  BFD_ASSERT((h->got.offset & 1) != 0);
@@ -3173,13 +3471,14 @@ elf_s390_finish_dynamic_symbol (bfd *output_bfd,
       else
 	{
 	  BFD_ASSERT((h->got.offset & 1) == 0);
-	  bfd_put_64 (output_bfd, (bfd_vma) 0, htab->sgot->contents + h->got.offset);
+do_glob_dat:
+	  bfd_put_64 (output_bfd, (bfd_vma) 0, htab->elf.sgot->contents + h->got.offset);
 	  rela.r_info = ELF64_R_INFO (h->dynindx, R_390_GLOB_DAT);
 	  rela.r_addend = 0;
 	}
 
-      loc = htab->srelgot->contents;
-      loc += htab->srelgot->reloc_count++ * sizeof (Elf64_External_Rela);
+      loc = htab->elf.srelgot->contents;
+      loc += htab->elf.srelgot->reloc_count++ * sizeof (Elf64_External_Rela);
       bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
     }
 
@@ -3219,8 +3518,7 @@ elf_s390_finish_dynamic_symbol (bfd *output_bfd,
    dynamic linker, before writing them out.  */
 
 static enum elf_reloc_type_class
-elf_s390_reloc_type_class (rela)
-     const Elf_Internal_Rela *rela;
+elf_s390_reloc_type_class (const Elf_Internal_Rela *rela)
 {
   switch ((int) ELF64_R_TYPE (rela->r_info))
     {
@@ -3244,19 +3542,21 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd,
   struct elf_s390_link_hash_table *htab;
   bfd *dynobj;
   asection *sdyn;
+  bfd *ibfd;
+  unsigned int i;
 
   htab = elf_s390_hash_table (info);
   if (htab == NULL)
     return FALSE;
 
   dynobj = htab->elf.dynobj;
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (htab->elf.dynamic_sections_created)
     {
       Elf64_External_Dyn *dyncon, *dynconend;
 
-      if (sdyn == NULL || htab->sgot == NULL)
+      if (sdyn == NULL || htab->elf.sgot == NULL)
 	abort ();
 
       dyncon = (Elf64_External_Dyn *) sdyn->contents;
@@ -3274,15 +3574,15 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd,
 	      continue;
 
 	    case DT_PLTGOT:
-	      dyn.d_un.d_ptr = htab->sgot->output_section->vma;
+	      dyn.d_un.d_ptr = htab->elf.sgot->output_section->vma;
 	      break;
 
 	    case DT_JMPREL:
-	      dyn.d_un.d_ptr = htab->srelplt->output_section->vma;
+	      dyn.d_un.d_ptr = htab->elf.srelplt->output_section->vma;
 	      break;
 
 	    case DT_PLTRELSZ:
-	      s = htab->srelplt->output_section;
+	      s = htab->elf.srelplt->output_section;
 	      dyn.d_un.d_val = s->size;
 	      break;
 
@@ -3294,7 +3594,7 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd,
 		 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 = htab->srelplt->output_section;
+	      s = htab->elf.srelplt->output_section;
 	      dyn.d_un.d_val -= s->size;
 	      break;
 	    }
@@ -3303,52 +3603,72 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd,
 	}
 
       /* Fill in the special first entry in the procedure linkage table.  */
-      if (htab->splt && htab->splt->size > 0)
+      if (htab->elf.splt && htab->elf.splt->size > 0)
 	{
 	  /* fill in blueprint for plt 0 entry */
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_FIRST_ENTRY_WORD0,
-		      htab->splt->contents );
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_FIRST_ENTRY_WORD1,
-		      htab->splt->contents +4 );
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_FIRST_ENTRY_WORD3,
-		      htab->splt->contents +12 );
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_FIRST_ENTRY_WORD4,
-		      htab->splt->contents +16 );
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_FIRST_ENTRY_WORD5,
-		      htab->splt->contents +20 );
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_FIRST_ENTRY_WORD6,
-		      htab->splt->contents + 24);
-	  bfd_put_32 (output_bfd, (bfd_vma) PLT_FIRST_ENTRY_WORD7,
-		      htab->splt->contents + 28 );
+	  memcpy (htab->elf.splt->contents, elf_s390x_first_plt_entry,
+		  PLT_FIRST_ENTRY_SIZE);
 	  /* Fixup relative address to start of GOT */
 	  bfd_put_32 (output_bfd,
-		      (htab->sgotplt->output_section->vma +
-		       htab->sgotplt->output_offset
-		       - htab->splt->output_section->vma - 6)/2,
-		      htab->splt->contents + 8);
+		      (htab->elf.sgotplt->output_section->vma +
+		       htab->elf.sgotplt->output_offset
+		       - htab->elf.splt->output_section->vma - 6)/2,
+		      htab->elf.splt->contents + 8);
 	}
-      elf_section_data (htab->splt->output_section)
+      elf_section_data (htab->elf.splt->output_section)
 	->this_hdr.sh_entsize = PLT_ENTRY_SIZE;
     }
 
-  if (htab->sgotplt)
+  if (htab->elf.sgotplt)
     {
       /* Fill in the first three entries in the global offset table.  */
-      if (htab->sgotplt->size > 0)
+      if (htab->elf.sgotplt->size > 0)
 	{
 	  bfd_put_64 (output_bfd,
 		      (sdyn == NULL ? (bfd_vma) 0
 		       : sdyn->output_section->vma + sdyn->output_offset),
-		      htab->sgotplt->contents);
+		      htab->elf.sgotplt->contents);
 	  /* One entry for shared object struct ptr.  */
-	  bfd_put_64 (output_bfd, (bfd_vma) 0, htab->sgotplt->contents + 8);
+	  bfd_put_64 (output_bfd, (bfd_vma) 0, htab->elf.sgotplt->contents + 8);
 	  /* One entry for _dl_runtime_resolve.  */
-	  bfd_put_64 (output_bfd, (bfd_vma) 0, htab->sgotplt->contents + 12);
+	  bfd_put_64 (output_bfd, (bfd_vma) 0, htab->elf.sgotplt->contents + 12);
 	}
 
-      elf_section_data (htab->sgot->output_section)
+      elf_section_data (htab->elf.sgot->output_section)
 	->this_hdr.sh_entsize = 8;
     }
+
+  /* Finish dynamic symbol for local IFUNC symbols.  */
+  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
+    {
+      struct plt_entry *local_plt;
+      Elf_Internal_Sym *isym;
+      Elf_Internal_Shdr *symtab_hdr;
+
+      symtab_hdr = &elf_symtab_hdr (ibfd);
+
+      local_plt = elf_s390_local_plt (ibfd);
+      if (local_plt != NULL)
+	for (i = 0; i < symtab_hdr->sh_info; i++)
+	  {
+	    if (local_plt[i].plt.offset != (bfd_vma) -1)
+	      {
+		asection *sec = local_plt[i].sec;
+		isym = bfd_sym_from_r_symndx (&htab->sym_cache, ibfd, i);
+		if (isym == NULL)
+		  return FALSE;
+
+		if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
+		  elf_s390_finish_ifunc_symbol (output_bfd, info, NULL, htab,
+						local_plt[i].plt.offset,
+						isym->st_value
+						+ sec->output_section->vma
+						+ sec->output_offset);
+
+	      }
+	  }
+    }
+
   return TRUE;
 }
 
@@ -3362,7 +3682,6 @@ elf_s390_plt_sym_val (bfd_vma i, const asection *plt,
   return plt->vma + PLT_FIRST_ENTRY_SIZE + i * PLT_ENTRY_SIZE;
 }
 
-
 /* 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.  */
@@ -3437,8 +3756,24 @@ const struct elf_size_info s390_elf64_size_info =
 #define elf_backend_init_index_section	      _bfd_elf_init_1_index_section
 #define elf_backend_reloc_type_class	      elf_s390_reloc_type_class
 #define elf_backend_plt_sym_val		      elf_s390_plt_sym_val
+#define elf_backend_add_symbol_hook           elf_s390_add_symbol_hook
 
 #define bfd_elf64_mkobject		elf_s390_mkobject
 #define elf_backend_object_p		elf_s390_object_p
 
+/* Enable ELF64 archive functions.  */
+#define bfd_elf64_archive_functions
+extern bfd_boolean bfd_elf64_archive_slurp_armap (bfd *);
+extern bfd_boolean bfd_elf64_archive_write_armap (bfd *, unsigned int, struct orl *, unsigned int, int);
+
+#define bfd_elf64_archive_slurp_extended_name_table 	_bfd_archive_coff_slurp_extended_name_table
+#define bfd_elf64_archive_construct_extended_name_table _bfd_archive_coff_construct_extended_name_table
+#define bfd_elf64_archive_truncate_arname 		_bfd_archive_coff_truncate_arname
+#define bfd_elf64_archive_read_ar_hdr			_bfd_archive_coff_read_ar_hdr
+#define bfd_elf64_archive_write_ar_hdr			_bfd_archive_coff_write_ar_hdr
+#define bfd_elf64_archive_openr_next_archived_file 	_bfd_archive_coff_openr_next_archived_file
+#define bfd_elf64_archive_get_elt_at_index 		_bfd_archive_coff_get_elt_at_index
+#define bfd_elf64_archive_generic_stat_arch_elt 	_bfd_archive_coff_generic_stat_arch_elt
+#define bfd_elf64_archive_update_armap_timestamp 	_bfd_archive_coff_update_armap_timestamp
+
 #include "elf64-target.h"
diff --git a/bfd/elf64-sh64.c b/bfd/elf64-sh64.c
index 9202477..ce5436d 100644
--- a/bfd/elf64-sh64.c
+++ b/bfd/elf64-sh64.c
@@ -1,6 +1,6 @@
 /* SuperH SH64-specific support for 64-bit ELF
    Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
-   2010, 2011 Free Software Foundation, Inc.
+   2010, 2011, 2012 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -1514,7 +1514,7 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 	      _("Unexpected STO_SH5_ISA32 on local symbol is not handled"),
 	      input_bfd, input_section, rel->r_offset));
 
-	  if (sec != NULL && elf_discarded_section (sec))
+	  if (sec != NULL && discarded_section (sec))
 	    /* Handled below.  */
 	    ;
 	  else if (info->relocatable)
@@ -1661,9 +1661,9 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 	    }
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -1797,7 +1797,7 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 	     offset table extension for the procedure linkage table.  */
 	  if (sgotplt == NULL)
 	    {
-	      sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
+	      sgotplt = bfd_get_linker_section (dynobj, ".got.plt");
 	      BFD_ASSERT (sgotplt != NULL);
 	    }
 
@@ -1820,7 +1820,7 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 	     offset table.  */
 	  if (sgot == NULL)
 	    {
-	      sgot = bfd_get_section_by_name (dynobj, ".got");
+	      sgot = bfd_get_linker_section (dynobj, ".got");
 	      BFD_ASSERT (sgot != NULL);
 	    }
 
@@ -1914,7 +1914,7 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 		      Elf_Internal_Rela outrel;
 		      bfd_byte *loc;
 
-		      s = bfd_get_section_by_name (dynobj, ".rela.got");
+		      s = bfd_get_linker_section (dynobj, ".rela.got");
 		      BFD_ASSERT (s != NULL);
 
 		      outrel.r_offset = (sgot->output_section->vma
@@ -1949,7 +1949,7 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 
 	  if (sgot == NULL)
 	    {
-	      sgot = bfd_get_section_by_name (dynobj, ".got");
+	      sgot = bfd_get_linker_section (dynobj, ".got");
 	      BFD_ASSERT (sgot != NULL);
 	    }
 
@@ -1974,7 +1974,7 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 
 	  if (sgot == NULL)
 	    {
-	      sgot = bfd_get_section_by_name (dynobj, ".got");
+	      sgot = bfd_get_linker_section (dynobj, ".got");
 	      BFD_ASSERT (sgot != NULL);
 	    }
 
@@ -2012,7 +2012,7 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
 
 	  if (splt == NULL)
 	    {
-	      splt = bfd_get_section_by_name (dynobj, ".plt");
+	      splt = bfd_get_linker_section (dynobj, ".plt");
 	      BFD_ASSERT (splt != NULL);
 	    }
 
@@ -2490,24 +2490,22 @@ sh_elf64_check_relocs (bfd *abfd, struct bfd_link_info *info,
 
 	  if (sgot == NULL)
 	    {
-	      sgot = bfd_get_section_by_name (dynobj, ".got");
+	      sgot = bfd_get_linker_section (dynobj, ".got");
 	      BFD_ASSERT (sgot != NULL);
 	    }
 
 	  if (srelgot == NULL
 	      && (h != NULL || info->shared))
 	    {
-	      srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+	      srelgot = bfd_get_linker_section (dynobj, ".rela.got");
 	      if (srelgot == NULL)
 		{
-		  srelgot = bfd_make_section_with_flags (dynobj,
-							 ".rela.got",
-							 (SEC_ALLOC
-							  | SEC_LOAD
-							  | SEC_HAS_CONTENTS
-							  | SEC_IN_MEMORY
-							  | SEC_LINKER_CREATED
-							  | SEC_READONLY));
+		  flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
+				    | SEC_IN_MEMORY | SEC_LINKER_CREATED
+				    | SEC_READONLY);
+		  srelgot = bfd_make_section_anyway_with_flags (dynobj,
+								".rela.got",
+								flags);
 		  if (srelgot == NULL
 		      || ! bfd_set_section_alignment (dynobj, srelgot, 2))
 		    return FALSE;
@@ -3159,7 +3157,7 @@ sh64_elf64_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
   if (bed->plt_readonly)
     pltflags |= SEC_READONLY;
 
-  s = bfd_make_section_with_flags (abfd, ".plt", pltflags);
+  s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
     return FALSE;
@@ -3186,9 +3184,10 @@ sh64_elf64_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 	return FALSE;
     }
 
-  s = bfd_make_section_with_flags (abfd,
-				   bed->default_use_rela_p ? ".rela.plt" : ".rel.plt",
-				   flags | SEC_READONLY);
+  s = bfd_make_section_anyway_with_flags (abfd,
+					  bed->default_use_rela_p
+					  ? ".rela.plt" : ".rel.plt",
+					  flags | SEC_READONLY);
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, ptralign))
     return FALSE;
@@ -3196,30 +3195,6 @@ sh64_elf64_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
   if (! _bfd_elf_create_got_section (abfd, info))
     return FALSE;
 
-  {
-    const char *secname;
-    char *relname;
-    flagword secflags;
-    asection *sec;
-
-    for (sec = abfd->sections; sec; sec = sec->next)
-      {
-	secflags = bfd_get_section_flags (abfd, sec);
-	if ((secflags & (SEC_DATA | SEC_LINKER_CREATED))
-	    || ((secflags & SEC_HAS_CONTENTS) != SEC_HAS_CONTENTS))
-	  continue;
-	secname = bfd_get_section_name (abfd, sec);
-	relname = (char *) bfd_malloc (strlen (secname) + 6);
-	strcpy (relname, ".rela");
-	strcat (relname, secname);
-	s = bfd_make_section_with_flags (abfd, relname,
-					 flags | SEC_READONLY);
-	if (s == NULL
-	    || ! bfd_set_section_alignment (abfd, s, ptralign))
-	  return FALSE;
-      }
-  }
-
   if (bed->want_dynbss)
     {
       /* The .dynbss section is a place to put symbols which are defined
@@ -3228,8 +3203,8 @@ sh64_elf64_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 	 image and use a R_*_COPY reloc to tell the dynamic linker to
 	 initialize them at run time.  The linker script puts the .dynbss
 	 section into the .bss section of the final image.  */
-      s = bfd_make_section_with_flags (abfd, ".dynbss",
-				       SEC_ALLOC | SEC_LINKER_CREATED);
+      s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
+					      SEC_ALLOC | SEC_LINKER_CREATED);
       if (s == NULL)
 	return FALSE;
 
@@ -3246,10 +3221,10 @@ sh64_elf64_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 	 copy relocs.  */
       if (! info->shared)
 	{
-	  s = bfd_make_section_with_flags (abfd,
-					   (bed->default_use_rela_p
-					    ? ".rela.bss" : ".rel.bss"),
-					   flags | SEC_READONLY);
+	  s = bfd_make_section_anyway_with_flags (abfd,
+						  (bed->default_use_rela_p
+						   ? ".rela.bss" : ".rel.bss"),
+						  flags | SEC_READONLY);
 	  if (s == NULL
 	      || ! bfd_set_section_alignment (abfd, s, ptralign))
 	    return FALSE;
@@ -3308,7 +3283,7 @@ sh64_elf64_adjust_dynamic_symbol (struct bfd_link_info *info,
 	    return FALSE;
 	}
 
-      s = bfd_get_section_by_name (dynobj, ".plt");
+      s = bfd_get_linker_section (dynobj, ".plt");
       BFD_ASSERT (s != NULL);
 
       /* If this is the first .plt entry, make room for the special
@@ -3336,13 +3311,13 @@ sh64_elf64_adjust_dynamic_symbol (struct bfd_link_info *info,
       /* 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");
+      s = bfd_get_linker_section (dynobj, ".got.plt");
       BFD_ASSERT (s != NULL);
       s->size += 8;
 
       /* We also need to make an entry in the .rela.plt section.  */
 
-      s = bfd_get_section_by_name (dynobj, ".rela.plt");
+      s = bfd_get_linker_section (dynobj, ".rela.plt");
       BFD_ASSERT (s != NULL);
       s->size += sizeof (Elf64_External_Rela);
 
@@ -3376,13 +3351,6 @@ sh64_elf64_adjust_dynamic_symbol (struct bfd_link_info *info,
   if (!h->non_got_ref)
     return TRUE;
 
-  if (h->size == 0)
-    {
-      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
-			     h->root.root.string);
-      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
@@ -3393,18 +3361,18 @@ sh64_elf64_adjust_dynamic_symbol (struct bfd_link_info *info,
      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");
+  s = bfd_get_linker_section (dynobj, ".dynbss");
   BFD_ASSERT (s != NULL);
 
   /* We must generate a R_SH_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
      .rela.bss section we are going to use.  */
-  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
       asection *srel;
 
-      srel = bfd_get_section_by_name (dynobj, ".rela.bss");
+      srel = bfd_get_linker_section (dynobj, ".rela.bss");
       BFD_ASSERT (srel != NULL);
       srel->size += sizeof (Elf64_External_Rela);
       h->needs_copy = 1;
@@ -3456,7 +3424,7 @@ sh64_elf64_size_dynamic_sections (bfd *output_bfd,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  BFD_ASSERT (s != NULL);
 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
@@ -3469,7 +3437,7 @@ sh64_elf64_size_dynamic_sections (bfd *output_bfd,
 	 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");
+      s = bfd_get_linker_section (dynobj, ".rela.got");
       if (s != NULL)
 	s->size = 0;
     }
@@ -3638,9 +3606,9 @@ sh64_elf64_finish_dynamic_symbol (bfd *output_bfd,
 
       BFD_ASSERT (h->dynindx != -1);
 
-      splt = bfd_get_section_by_name (dynobj, ".plt");
-      sgot = bfd_get_section_by_name (dynobj, ".got.plt");
-      srel = bfd_get_section_by_name (dynobj, ".rela.plt");
+      splt = bfd_get_linker_section (dynobj, ".plt");
+      sgot = bfd_get_linker_section (dynobj, ".got.plt");
+      srel = bfd_get_linker_section (dynobj, ".rela.plt");
       BFD_ASSERT (splt != NULL && sgot != NULL && srel != NULL);
 
       /* Get the index in the procedure linkage table which
@@ -3741,8 +3709,8 @@ sh64_elf64_finish_dynamic_symbol (bfd *output_bfd,
       /* This symbol has an entry in the global offset table.  Set it
 	 up.  */
 
-      sgot = bfd_get_section_by_name (dynobj, ".got");
-      srel = bfd_get_section_by_name (dynobj, ".rela.got");
+      sgot = bfd_get_linker_section (dynobj, ".got");
+      srel = bfd_get_linker_section (dynobj, ".rela.got");
       BFD_ASSERT (sgot != NULL && srel != NULL);
 
       rel.r_offset = (sgot->output_section->vma
@@ -3787,8 +3755,7 @@ sh64_elf64_finish_dynamic_symbol (bfd *output_bfd,
 		  && (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");
+      s = bfd_get_linker_section (dynobj, ".rela.bss");
       BFD_ASSERT (s != NULL);
 
       rel.r_offset = (h->root.u.def.value
@@ -3821,9 +3788,9 @@ sh64_elf64_finish_dynamic_sections (bfd *output_bfd,
 
   dynobj = elf_hash_table (info)->dynobj;
 
-  sgot = bfd_get_section_by_name (dynobj, ".got.plt");
+  sgot = bfd_get_linker_section (dynobj, ".got.plt");
   BFD_ASSERT (sgot != NULL);
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
     {
@@ -3906,7 +3873,7 @@ sh64_elf64_finish_dynamic_sections (bfd *output_bfd,
 	}
 
       /* Fill in the first entry in the procedure linkage table.  */
-      splt = bfd_get_section_by_name (dynobj, ".plt");
+      splt = bfd_get_linker_section (dynobj, ".plt");
       if (splt && splt->size > 0)
 	{
 	  if (info->shared)
diff --git a/bfd/elf64-sparc.c b/bfd/elf64-sparc.c
index f5bfe75..e9b76e5 100644
--- a/bfd/elf64-sparc.c
+++ b/bfd/elf64-sparc.c
@@ -1,6 +1,6 @@
 /* SPARC-specific support for 64-bit ELF
    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -57,7 +57,7 @@ elf64_sparc_slurp_one_reloc_table (bfd *abfd, asection *asect,
 				   Elf_Internal_Shdr *rel_hdr,
 				   asymbol **symbols, bfd_boolean dynamic)
 {
-  PTR allocated = NULL;
+  void * allocated = NULL;
   bfd_byte *native_relocs;
   arelent *relent;
   unsigned int i;
@@ -65,7 +65,7 @@ elf64_sparc_slurp_one_reloc_table (bfd *abfd, asection *asect,
   bfd_size_type count;
   arelent *relents;
 
-  allocated = (PTR) bfd_malloc (rel_hdr->sh_size);
+  allocated = bfd_malloc (rel_hdr->sh_size);
   if (allocated == NULL)
     goto error_return;
 
@@ -279,7 +279,7 @@ elf64_sparc_canonicalize_dynamic_reloc (bfd *abfd, arelent **storage,
 /* Write out the relocs.  */
 
 static void
-elf64_sparc_write_relocs (bfd *abfd, asection *sec, PTR data)
+elf64_sparc_write_relocs (bfd *abfd, asection *sec, void * data)
 {
   bfd_boolean *failedp = (bfd_boolean *) data;
   Elf_Internal_Shdr *rela_hdr;
@@ -330,7 +330,7 @@ elf64_sparc_write_relocs (bfd *abfd, asection *sec, PTR data)
   rela_hdr = elf_section_data (sec)->rela.hdr;
 
   rela_hdr->sh_size = rela_hdr->sh_entsize * count;
-  rela_hdr->contents = (PTR) bfd_alloc (abfd, rela_hdr->sh_size);
+  rela_hdr->contents = bfd_alloc (abfd, rela_hdr->sh_size);
   if (rela_hdr->contents == NULL)
     {
       *failedp = TRUE;
@@ -545,8 +545,8 @@ elf64_sparc_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
 static bfd_boolean
 elf64_sparc_output_arch_syms (bfd *output_bfd ATTRIBUTE_UNUSED,
 			      struct bfd_link_info *info,
-			      PTR finfo,
-			      int (*func) (PTR, const char *,
+			      void * flaginfo,
+			      int (*func) (void *, const char *,
 					   Elf_Internal_Sym *,
 					   asection *,
 					   struct elf_link_hash_entry *))
@@ -563,7 +563,7 @@ elf64_sparc_output_arch_syms (bfd *output_bfd ATTRIBUTE_UNUSED,
   if (elf_hash_table (info)->dynlocal)
     {
       bfd * dynobj = elf_hash_table (info)->dynobj;
-      asection *dynsymsec = bfd_get_section_by_name (dynobj, ".dynsym");
+      asection *dynsymsec = bfd_get_linker_section (dynobj, ".dynsym");
       struct elf_link_local_dynamic_entry *e;
 
       for (e = elf_hash_table (info)->dynlocal; e ; e = e->next)
@@ -594,7 +594,7 @@ elf64_sparc_output_arch_syms (bfd *output_bfd ATTRIBUTE_UNUSED,
 	sym.st_info = ELF_ST_INFO (app_regs [reg].bind, STT_REGISTER);
 	sym.st_shndx = app_regs [reg].shndx;
 	sym.st_target_internal = 0;
-	if ((*func) (finfo, app_regs [reg].name, &sym,
+	if ((*func) (flaginfo, app_regs [reg].name, &sym,
 		     sym.st_shndx == SHN_ABS
 		     ? bfd_abs_section_ptr : bfd_und_section_ptr,
 		     NULL) != 1)
@@ -741,7 +741,7 @@ elf64_sparc_fake_sections (bfd *abfd ATTRIBUTE_UNUSED,
 /* Print a STT_REGISTER symbol to file FILE.  */
 
 static const char *
-elf64_sparc_print_symbol_all (bfd *abfd ATTRIBUTE_UNUSED, PTR filep,
+elf64_sparc_print_symbol_all (bfd *abfd ATTRIBUTE_UNUSED, void * filep,
 			      asymbol *symbol)
 {
   FILE *file = (FILE *) filep;
diff --git a/bfd/elf64-tilegx.c b/bfd/elf64-tilegx.c
index e30ca80..bd5f653 100644
--- a/bfd/elf64-tilegx.c
+++ b/bfd/elf64-tilegx.c
@@ -87,8 +87,11 @@ tilegx_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
 #define ELF_MAXPAGESIZE		0x10000
 #define ELF_COMMONPAGESIZE	0x10000
 
-#define TARGET_LITTLE_SYM       bfd_elf64_tilegx_vec
-#define TARGET_LITTLE_NAME	"elf64-tilegx"
+
+#define TARGET_BIG_SYM          bfd_elf64_tilegx_be_vec
+#define TARGET_BIG_NAME         "elf64-tilegx-be"
+#define TARGET_LITTLE_SYM       bfd_elf64_tilegx_le_vec
+#define TARGET_LITTLE_NAME      "elf64-tilegx-le"
 
 #define elf_backend_reloc_type_class	     tilegx_reloc_type_class
 
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index fe0db0e..a29ba8a 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -26,6 +26,7 @@
 #include "bfdlink.h"
 #include "libbfd.h"
 #include "elf-bfd.h"
+#include "elf-nacl.h"
 #include "bfd_stdint.h"
 #include "objalloc.h"
 #include "hashtab.h"
@@ -508,7 +509,7 @@ elf_x86_64_write_core_note (bfd *abfd, char *buf, int *bufsiz,
    section.  */
 
 #define ELF64_DYNAMIC_INTERPRETER "/lib/ld64.so.1"
-#define ELF32_DYNAMIC_INTERPRETER "/lib/ld32.so.1"
+#define ELF32_DYNAMIC_INTERPRETER "/lib/ldx32.so.1"
 
 /* If ELIMINATE_COPY_RELOCS is non-zero, the linker will try to avoid
    copying dynamic variables from a shared lib into an app's dynbss
@@ -585,6 +586,70 @@ static const bfd_byte elf_x86_64_eh_frame_plt[] =
   DW_CFA_nop, DW_CFA_nop, DW_CFA_nop, DW_CFA_nop
 };
 
+/* Architecture-specific backend data for x86-64.  */
+
+struct elf_x86_64_backend_data
+{
+  /* Templates for the initial PLT entry and for subsequent entries.  */
+  const bfd_byte *plt0_entry;
+  const bfd_byte *plt_entry;
+  unsigned int plt_entry_size;          /* Size of each PLT entry.  */
+
+  /* Offsets into plt0_entry that are to be replaced with GOT[1] and GOT[2].  */
+  unsigned int plt0_got1_offset;
+  unsigned int plt0_got2_offset;
+
+  /* Offset of the end of the PC-relative instruction containing
+     plt0_got2_offset.  */
+  unsigned int plt0_got2_insn_end;
+
+  /* Offsets into plt_entry that are to be replaced with...  */
+  unsigned int plt_got_offset;    /* ... address of this symbol in .got. */
+  unsigned int plt_reloc_offset;  /* ... offset into relocation table. */
+  unsigned int plt_plt_offset;    /* ... offset to start of .plt. */
+
+  /* Length of the PC-relative instruction containing plt_got_offset.  */
+  unsigned int plt_got_insn_size;
+
+  /* Offset of the end of the PC-relative jump to plt0_entry.  */
+  unsigned int plt_plt_insn_end;
+
+  /* Offset into plt_entry where the initial value of the GOT entry points.  */
+  unsigned int plt_lazy_offset;
+
+  /* .eh_frame covering the .plt section.  */
+  const bfd_byte *eh_frame_plt;
+  unsigned int eh_frame_plt_size;
+};
+
+#define get_elf_x86_64_backend_data(abfd) \
+  ((const struct elf_x86_64_backend_data *) \
+   get_elf_backend_data (abfd)->arch_data)
+
+#define GET_PLT_ENTRY_SIZE(abfd) \
+  get_elf_x86_64_backend_data (abfd)->plt_entry_size
+
+/* These are the standard parameters.  */
+static const struct elf_x86_64_backend_data elf_x86_64_arch_bed =
+  {
+    elf_x86_64_plt0_entry,              /* plt0_entry */
+    elf_x86_64_plt_entry,               /* plt_entry */
+    sizeof (elf_x86_64_plt_entry),      /* plt_entry_size */
+    2,                                  /* plt0_got1_offset */
+    8,                                  /* plt0_got2_offset */
+    12,                                 /* plt0_got2_insn_end */
+    2,                                  /* plt_got_offset */
+    7,                                  /* plt_reloc_offset */
+    12,                                 /* plt_plt_offset */
+    6,                                  /* plt_got_insn_size */
+    PLT_ENTRY_SIZE,                     /* plt_plt_insn_end */
+    6,                                  /* plt_lazy_offset */
+    elf_x86_64_eh_frame_plt,            /* eh_frame_plt */
+    sizeof (elf_x86_64_eh_frame_plt),   /* eh_frame_plt_size */
+  };
+
+#define	elf_backend_arch_data	&elf_x86_64_arch_bed
+
 /* x86-64 ELF linker hash entry.  */
 
 struct elf_x86_64_link_hash_entry
@@ -721,8 +786,8 @@ elf_x86_64_link_hash_newfunc (struct bfd_hash_entry *entry,
   if (entry == NULL)
     {
       entry = (struct bfd_hash_entry *)
-          bfd_hash_allocate (table,
-                             sizeof (struct elf_x86_64_link_hash_entry));
+	  bfd_hash_allocate (table,
+			     sizeof (struct elf_x86_64_link_hash_entry));
       if (entry == NULL)
 	return entry;
     }
@@ -839,7 +904,7 @@ elf_x86_64_link_hash_table_create (bfd *abfd)
   ret->tls_ld_got.refcount = 0;
   ret->sgotplt_jump_table_size = 0;
   ret->tls_module_base = NULL;
-  ret->next_jump_slot_index = 0; 
+  ret->next_jump_slot_index = 0;
   ret->next_irelative_index = 0;
 
   if (ABI_64_P (abfd))
@@ -905,31 +970,26 @@ elf_x86_64_create_dynamic_sections (bfd *dynobj,
   if (htab == NULL)
     return FALSE;
 
-  htab->sdynbss = bfd_get_section_by_name (dynobj, ".dynbss");
+  htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss");
   if (!info->shared)
-    htab->srelbss = bfd_get_section_by_name (dynobj, ".rela.bss");
+    htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss");
 
   if (!htab->sdynbss
       || (!info->shared && !htab->srelbss))
     abort ();
 
   if (!info->no_ld_generated_unwind_info
-      && bfd_get_section_by_name (dynobj, ".eh_frame") == NULL
+      && htab->plt_eh_frame == NULL
       && htab->elf.splt != NULL)
     {
-      flagword flags = get_elf_backend_data (dynobj)->dynamic_sec_flags;
+      flagword flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
+			| SEC_HAS_CONTENTS | SEC_IN_MEMORY
+			| SEC_LINKER_CREATED);
       htab->plt_eh_frame
-	= bfd_make_section_with_flags (dynobj, ".eh_frame",
-				       flags | SEC_READONLY);
+	= bfd_make_section_anyway_with_flags (dynobj, ".eh_frame", flags);
       if (htab->plt_eh_frame == NULL
 	  || !bfd_set_section_alignment (dynobj, htab->plt_eh_frame, 3))
 	return FALSE;
-
-      htab->plt_eh_frame->size = sizeof (elf_x86_64_eh_frame_plt);
-      htab->plt_eh_frame->contents
-	= bfd_alloc (dynobj, htab->plt_eh_frame->size);
-      memcpy (htab->plt_eh_frame->contents, elf_x86_64_eh_frame_plt,
-	      sizeof (elf_x86_64_eh_frame_plt));
     }
   return TRUE;
 }
@@ -1009,6 +1069,14 @@ elf64_x86_64_elf_object_p (bfd *abfd)
   return TRUE;
 }
 
+static bfd_boolean
+elf32_x86_64_elf_object_p (bfd *abfd)
+{
+  /* Set the right machine number for an x86-64 elf32 file.  */
+  bfd_default_set_arch_mach (abfd, bfd_arch_i386, bfd_mach_x64_32);
+  return TRUE;
+}
+
 /* Return TRUE if the TLS access code sequence support transition
    from R_TYPE.  */
 
@@ -1107,7 +1175,7 @@ elf_x86_64_check_tls_transition (bfd *abfd,
 
       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
       /* Use strncmp to check __tls_get_addr since __tls_get_addr
-	 may be versioned.  */ 
+	 may be versioned.  */
       return (h != NULL
 	      && h->root.root.string != NULL
 	      && (ELF32_R_TYPE (rel[1].r_info) == R_X86_64_PC32
@@ -2007,7 +2075,7 @@ elf_x86_64_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
 	  if (h != NULL)
 	    {
 	      if (r_type == R_X86_64_GOTPLT64 && h->plt.refcount > 0)
-	        h->plt.refcount -= 1;
+		h->plt.refcount -= 1;
 	      if (h->got.refcount > 0)
 		h->got.refcount -= 1;
 	      if (h->type == STT_GNU_IFUNC)
@@ -2166,13 +2234,6 @@ elf_x86_64_adjust_dynamic_symbol (struct bfd_link_info *info,
 	}
     }
 
-  if (h->size == 0)
-    {
-      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
-			     h->root.root.string);
-      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
@@ -2190,7 +2251,7 @@ elf_x86_64_adjust_dynamic_symbol (struct bfd_link_info *info,
   /* We must generate a R_X86_64_COPY reloc to tell the dynamic linker
      to copy the initial value out of the dynamic object and into the
      runtime process image.  */
-  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
       const struct elf_backend_data *bed;
       bed = get_elf_backend_data (info->output_bfd);
@@ -2214,6 +2275,7 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
   struct elf_x86_64_link_hash_entry *eh;
   struct elf_dyn_relocs *p;
   const struct elf_backend_data *bed;
+  unsigned int plt_entry_size;
 
   if (h->root.type == bfd_link_hash_indirect)
     return TRUE;
@@ -2225,6 +2287,7 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
   if (htab == NULL)
     return FALSE;
   bed = get_elf_backend_data (info->output_bfd);
+  plt_entry_size = GET_PLT_ENTRY_SIZE (info->output_bfd);
 
   /* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
      here if it is defined and referenced in a non-shared object.  */
@@ -2232,7 +2295,7 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
       && h->def_regular)
     return _bfd_elf_allocate_ifunc_dyn_relocs (info, h,
 					       &eh->dyn_relocs,
-					       PLT_ENTRY_SIZE,
+					       plt_entry_size,
 					       GOT_ENTRY_SIZE);
   else if (htab->elf.dynamic_sections_created
 	   && h->plt.refcount > 0)
@@ -2254,7 +2317,7 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
 	  /* If this is the first .plt entry, make room for the special
 	     first entry.  */
 	  if (s->size == 0)
-	    s->size += PLT_ENTRY_SIZE;
+	    s->size += plt_entry_size;
 
 	  h->plt.offset = s->size;
 
@@ -2271,7 +2334,7 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
 	    }
 
 	  /* Make room for this entry.  */
-	  s->size += PLT_ENTRY_SIZE;
+	  s->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.  */
@@ -2536,7 +2599,7 @@ elf_x86_64_size_dynamic_sections (bfd *output_bfd,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  if (s == NULL)
 	    abort ();
 	  s->size = htab->dynamic_interpreter_size;
@@ -2695,9 +2758,9 @@ elf_x86_64_size_dynamic_sections (bfd *output_bfd,
 	  /* Reserve room for the initial entry.
 	     FIXME: we could probably do away with it in this case.  */
 	  if (htab->elf.splt->size == 0)
-	    htab->elf.splt->size += PLT_ENTRY_SIZE;
+	    htab->elf.splt->size += GET_PLT_ENTRY_SIZE (output_bfd);
 	  htab->tlsdesc_plt = htab->elf.splt->size;
-	  htab->elf.splt->size += PLT_ENTRY_SIZE;
+	  htab->elf.splt->size += GET_PLT_ENTRY_SIZE (output_bfd);
 	}
     }
 
@@ -2709,7 +2772,7 @@ elf_x86_64_size_dynamic_sections (bfd *output_bfd,
 				  FALSE, FALSE, FALSE);
 
       /* Don't allocate .got.plt section if there are no GOT nor PLT
-         entries and there is no refeence to _GLOBAL_OFFSET_TABLE_.  */
+	 entries and there is no refeence to _GLOBAL_OFFSET_TABLE_.  */
       if ((got == NULL
 	   || !got->ref_regular_nonweak)
 	  && (htab->elf.sgotplt->size
@@ -2725,6 +2788,17 @@ elf_x86_64_size_dynamic_sections (bfd *output_bfd,
 	htab->elf.sgotplt->size = 0;
     }
 
+  if (htab->plt_eh_frame != NULL
+      && htab->elf.splt != NULL
+      && htab->elf.splt->size != 0
+      && !bfd_is_abs_section (htab->elf.splt->output_section)
+      && _bfd_elf_eh_frame_present (info))
+    {
+      const struct elf_x86_64_backend_data *arch_data
+	= (const struct elf_x86_64_backend_data *) bed->arch_data;
+      htab->plt_eh_frame->size = arch_data->eh_frame_plt_size;
+    }
+
   /* We now have determined the sizes of the various dynamic sections.
      Allocate memory for them.  */
   relocs = FALSE;
@@ -2738,6 +2812,7 @@ elf_x86_64_size_dynamic_sections (bfd *output_bfd,
 	  || s == htab->elf.sgotplt
 	  || s == htab->elf.iplt
 	  || s == htab->elf.igotplt
+	  || s == htab->plt_eh_frame
 	  || s == htab->sdynbss)
 	{
 	  /* Strip this section if we don't need it; see the
@@ -2789,11 +2864,16 @@ elf_x86_64_size_dynamic_sections (bfd *output_bfd,
     }
 
   if (htab->plt_eh_frame != NULL
-      && htab->elf.splt != NULL
-      && htab->elf.splt->size != 0
-      && (htab->elf.splt->flags & SEC_EXCLUDE) == 0)
-    bfd_put_32 (dynobj, htab->elf.splt->size,
-		htab->plt_eh_frame->contents + PLT_FDE_LEN_OFFSET);
+      && htab->plt_eh_frame->contents != NULL)
+    {
+      const struct elf_x86_64_backend_data *arch_data
+	= (const struct elf_x86_64_backend_data *) bed->arch_data;
+
+      memcpy (htab->plt_eh_frame->contents,
+	      arch_data->eh_frame_plt, htab->plt_eh_frame->size);
+      bfd_put_32 (dynobj, htab->elf.splt->size,
+		  htab->plt_eh_frame->contents + PLT_FDE_LEN_OFFSET);
+    }
 
   if (htab->elf.dynamic_sections_created)
     {
@@ -2835,7 +2915,7 @@ elf_x86_64_size_dynamic_sections (bfd *output_bfd,
 	  /* If any dynamic relocs apply to a read-only section,
 	     then we need a DT_TEXTREL entry.  */
 	  if ((info->flags & DF_TEXTREL) == 0)
-	    elf_link_hash_traverse (&htab->elf, 
+	    elf_link_hash_traverse (&htab->elf,
 				    elf_x86_64_readonly_dynrelocs,
 				    info);
 
@@ -2988,6 +3068,7 @@ elf_x86_64_relocate_section (bfd *output_bfd,
   bfd_vma *local_tlsdesc_gotents;
   Elf_Internal_Rela *rel;
   Elf_Internal_Rela *relend;
+  const unsigned int plt_entry_size = GET_PLT_ENTRY_SIZE (info->output_bfd);
 
   BFD_ASSERT (is_x86_64_elf (input_bfd));
 
@@ -3030,7 +3111,7 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 	}
 
       if (r_type != (int) R_X86_64_32
-	  || ABI_64_P (output_bfd)) 
+	  || ABI_64_P (output_bfd))
 	howto = x86_64_elf_howto_table + r_type;
       else
 	howto = (x86_64_elf_howto_table
@@ -3057,7 +3138,7 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 	      if (h == NULL)
 		abort ();
 
-	      /* Set STT_GNU_IFUNC symbol value.  */ 
+	      /* Set STT_GNU_IFUNC symbol value.  */
 	      h->root.u.def.value = sym->st_value;
 	      h->root.u.def.section = sec;
 	    }
@@ -3072,9 +3153,9 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 				   unresolved_reloc, warned);
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -3133,7 +3214,7 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 	      if (ABI_64_P (output_bfd))
 		goto do_relocation;
 	      /* FALLTHROUGH */
-	    case R_X86_64_64: 
+	    case R_X86_64_64:
 	      if (rel->r_addend != 0)
 		{
 		  if (h->root.root.string)
@@ -3156,7 +3237,6 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 		{
 		  Elf_Internal_Rela outrel;
 		  asection *sreloc;
-		  bfd_boolean relocate;
 
 		  /* Need a dynamic relocation to get the real function
 		     address.  */
@@ -3176,15 +3256,15 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 		      || info->executable)
 		    {
 		      /* This symbol is resolved locally.  */
-		      outrel.r_info = htab->r_info (0, R_X86_64_RELATIVE);
-		      outrel.r_addend = relocation;
-		      relocate = FALSE;
+		      outrel.r_info = htab->r_info (0, R_X86_64_IRELATIVE);
+		      outrel.r_addend = (h->root.u.def.value
+					 + h->root.u.def.section->output_section->vma
+					 + h->root.u.def.section->output_offset);
 		    }
 		  else
 		    {
 		      outrel.r_info = htab->r_info (h->dynindx, r_type);
 		      outrel.r_addend = 0;
-		      relocate = FALSE;
 		    }
 
 		  sreloc = htab->elf.irelifunc;
@@ -3195,8 +3275,7 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 		     we need to include the symbol value so that it
 		     becomes an addend for the dynamic reloc.  For an
 		     internal symbol, we have updated addend.  */
-		  if (! relocate)
-		    continue;
+		  continue;
 		}
 	      /* FALLTHROUGH */
 	    case R_X86_64_PC32:
@@ -3220,13 +3299,13 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 
 		  if (htab->elf.splt != NULL)
 		    {
-		      plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1;
+		      plt_index = h->plt.offset / plt_entry_size - 1;
 		      off = (plt_index + 3) * GOT_ENTRY_SIZE;
 		      base_got = htab->elf.sgotplt;
 		    }
 		  else
 		    {
-		      plt_index = h->plt.offset / PLT_ENTRY_SIZE;
+		      plt_index = h->plt.offset / plt_entry_size;
 		      off = plt_index * GOT_ENTRY_SIZE;
 		      base_got = htab->elf.igotplt;
 		    }
@@ -3235,9 +3314,9 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 		      || h->forced_local
 		      || info->symbolic)
 		    {
-		      /* This references the local defitionion.  We must 
+		      /* This references the local defitionion.  We must
 			 initialize this entry in the global offset table.
-			 Since the offset must always be a multiple of 8, 
+			 Since the offset must always be a multiple of 8,
 			 we use the least significant bit to record
 			 whether we have initialized it already.
 
@@ -3293,14 +3372,14 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 
 	      off = h->got.offset;
 	      if (h->needs_plt
-	          && h->plt.offset != (bfd_vma)-1
+		  && h->plt.offset != (bfd_vma)-1
 		  && off == (bfd_vma)-1)
 		{
 		  /* We can't use h->got.offset here to save
 		     state, or even just remember the offset, as
 		     finish_dynamic_symbol would use that as offset into
 		     .got.  */
-		  bfd_vma plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1;
+		  bfd_vma plt_index = h->plt.offset / plt_entry_size - 1;
 		  off = (plt_index + 3) * GOT_ENTRY_SIZE;
 		  base_got = htab->elf.sgotplt;
 		}
@@ -3331,7 +3410,7 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 		      bfd_put_64 (output_bfd, relocation,
 				  base_got->contents + off);
 		      /* Note that this is harmless for the GOTPLT64 case,
-		         as -1 | 1 still is -1.  */
+			 as -1 | 1 still is -1.  */
 		      h->got.offset |= 1;
 		    }
 		}
@@ -3396,8 +3475,9 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 	  /* Check to make sure it isn't a protected function symbol
 	     for shared library since it may not be local when used
 	     as function address.  */
-	  if (info->shared
+	  if (!info->executable
 	      && h
+	      && !SYMBOLIC_BIND (info, h)
 	      && h->def_regular
 	      && h->type == STT_FUNC
 	      && ELF_ST_VISIBILITY (h->other) == STV_PROTECTED)
@@ -3429,7 +3509,7 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 	case R_X86_64_PLTOFF64:
 	  /* Relocation is PLT entry relative to GOT.  For local
 	     symbols it's the symbol itself relative to GOT.  */
-          if (h != NULL
+	  if (h != NULL
 	      /* See PLT32 handling.  */
 	      && h->plt.offset != (bfd_vma) -1
 	      && htab->elf.splt != NULL)
@@ -3472,7 +3552,6 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 	case R_X86_64_PC16:
 	case R_X86_64_PC32:
 	  if (info->shared
-	      && ABI_64_P (output_bfd)
 	      && (input_section->flags & SEC_ALLOC) != 0
 	      && (input_section->flags & SEC_READONLY) != 0
 	      && h != NULL)
@@ -3612,6 +3691,36 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 		      outrel.r_info = htab->r_info (0,
 						    R_X86_64_RELATIVE64);
 		      outrel.r_addend = relocation + rel->r_addend;
+		      /* Check addend overflow.  */
+		      if ((outrel.r_addend & 0x80000000)
+			  != (rel->r_addend & 0x80000000))
+			{
+			  const char *name;
+			  int addend = rel->r_addend;
+			  if (h && h->root.root.string)
+			    name = h->root.root.string;
+			  else
+			    name = bfd_elf_sym_name (input_bfd, symtab_hdr,
+						     sym, NULL);
+			  if (addend < 0)
+			    (*_bfd_error_handler)
+			      (_("%B: addend -0x%x in relocation %s against "
+				 "symbol `%s' at 0x%lx in section `%A' is "
+				 "out of range"),
+			       input_bfd, input_section, addend,
+			       x86_64_elf_howto_table[r_type].name,
+			       name, (unsigned long) rel->r_offset);
+			  else
+			    (*_bfd_error_handler)
+			      (_("%B: addend 0x%x in relocation %s against "
+				 "symbol `%s' at 0x%lx in section `%A' is "
+				 "out of range"),
+			       input_bfd, input_section, addend,
+			       x86_64_elf_howto_table[r_type].name,
+			       name, (unsigned long) rel->r_offset);
+			  bfd_set_error (bfd_error_bad_value);
+			  return FALSE;
+			}
 		    }
 		  else
 		    {
@@ -4101,13 +4210,16 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 	       && h->def_dynamic)
 	  && _bfd_elf_section_offset (output_bfd, info, input_section,
 				      rel->r_offset) != (bfd_vma) -1)
-	(*_bfd_error_handler)
-	  (_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"),
-	   input_bfd,
-	   input_section,
-	   (long) rel->r_offset,
-	   howto->name,
-	   h->root.root.string);
+	{
+	  (*_bfd_error_handler)
+	    (_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"),
+	     input_bfd,
+	     input_section,
+	     (long) rel->r_offset,
+	     howto->name,
+	     h->root.root.string);
+	  return FALSE;
+	}
 
 do_relocation:
       r = _bfd_final_link_relocate (howto, input_bfd, input_section,
@@ -4161,9 +4273,11 @@ static bfd_boolean
 elf_x86_64_finish_dynamic_symbol (bfd *output_bfd,
 				  struct bfd_link_info *info,
 				  struct elf_link_hash_entry *h,
-				  Elf_Internal_Sym *sym)
+				  Elf_Internal_Sym *sym ATTRIBUTE_UNUSED)
 {
   struct elf_x86_64_link_hash_table *htab;
+  const struct elf_x86_64_backend_data *const abed
+    = get_elf_x86_64_backend_data (output_bfd);
 
   htab = elf_x86_64_hash_table (info);
   if (htab == NULL)
@@ -4217,39 +4331,38 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd,
 
       if (plt == htab->elf.splt)
 	{
-	  got_offset = h->plt.offset / PLT_ENTRY_SIZE - 1;
+	  got_offset = h->plt.offset / abed->plt_entry_size - 1;
 	  got_offset = (got_offset + 3) * GOT_ENTRY_SIZE;
 	}
       else
 	{
-	  got_offset = h->plt.offset / PLT_ENTRY_SIZE;
+	  got_offset = h->plt.offset / abed->plt_entry_size;
 	  got_offset = got_offset * GOT_ENTRY_SIZE;
 	}
 
       /* Fill in the entry in the procedure linkage table.  */
-      memcpy (plt->contents + h->plt.offset, elf_x86_64_plt_entry,
-	      PLT_ENTRY_SIZE);
-
-      /* Insert the relocation positions of the plt section.  The magic
-	 numbers at the end of the statements are the positions of the
-	 relocations in the plt section.  */
-      /* Put offset for jmp *name at GOTPCREL(%rip), since the
-	 instruction uses 6 bytes, subtract this value.  */
+      memcpy (plt->contents + h->plt.offset, abed->plt_entry,
+	      abed->plt_entry_size);
+
+      /* Insert the relocation positions of the plt section.  */
+
+      /* Put offset the PC-relative instruction referring to the GOT entry,
+	 subtracting the size of that instruction.  */
       bfd_put_32 (output_bfd,
-		      (gotplt->output_section->vma
-		       + gotplt->output_offset
-		       + got_offset
-		       - plt->output_section->vma
-		       - plt->output_offset
-		       - h->plt.offset
-		       - 6),
-		  plt->contents + h->plt.offset + 2);
+		  (gotplt->output_section->vma
+		   + gotplt->output_offset
+		   + got_offset
+		   - plt->output_section->vma
+		   - plt->output_offset
+		   - h->plt.offset
+		   - abed->plt_got_insn_size),
+		  plt->contents + h->plt.offset + abed->plt_got_offset);
 
       /* Fill in the entry in the global offset table, initially this
-	 points to the pushq instruction in the PLT which is at offset 6.  */
+	 points to the second part of the PLT entry.  */
       bfd_put_64 (output_bfd, (plt->output_section->vma
 			       + plt->output_offset
-			       + h->plt.offset + 6),
+			       + h->plt.offset + abed->plt_lazy_offset),
 		  gotplt->contents + got_offset);
 
       /* Fill in the entry in the .rela.plt section.  */
@@ -4283,10 +4396,10 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd,
 	{
 	  /* Put relocation index.  */
 	  bfd_put_32 (output_bfd, plt_index,
-		      plt->contents + h->plt.offset + 7);
+		      plt->contents + h->plt.offset + abed->plt_reloc_offset);
 	  /* Put offset for jmp .PLT0.  */
-	  bfd_put_32 (output_bfd, - (h->plt.offset + PLT_ENTRY_SIZE),
-		      plt->contents + h->plt.offset + 12);
+	  bfd_put_32 (output_bfd, - (h->plt.offset + abed->plt_plt_insn_end),
+		      plt->contents + h->plt.offset + abed->plt_plt_offset);
 	}
 
       bed = get_elf_backend_data (output_bfd);
@@ -4399,13 +4512,6 @@ do_glob_dat:
       elf_append_rela (output_bfd, htab->srelbss, &rela);
     }
 
-  /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  SYM may
-     be NULL for local symbols.  */
-  if (sym != NULL
-      && (strcmp (h->root.root.string, "_DYNAMIC") == 0
-	  || h == htab->elf.hgot))
-    sym->st_shndx = SHN_ABS;
-
   return TRUE;
 }
 
@@ -4418,7 +4524,7 @@ elf_x86_64_finish_local_dynamic_symbol (void **slot, void *inf)
   struct elf_link_hash_entry *h
     = (struct elf_link_hash_entry *) *slot;
   struct bfd_link_info *info
-    = (struct bfd_link_info *) inf; 
+    = (struct bfd_link_info *) inf;
 
   return elf_x86_64_finish_dynamic_symbol (info->output_bfd,
 					     info, h, NULL);
@@ -4433,6 +4539,7 @@ elf_x86_64_reloc_type_class (const Elf_Internal_Rela *rela)
   switch ((int) ELF32_R_TYPE (rela->r_info))
     {
     case R_X86_64_RELATIVE:
+    case R_X86_64_RELATIVE64:
       return reloc_class_relative;
     case R_X86_64_JUMP_SLOT:
       return reloc_class_plt;
@@ -4452,13 +4559,15 @@ elf_x86_64_finish_dynamic_sections (bfd *output_bfd,
   struct elf_x86_64_link_hash_table *htab;
   bfd *dynobj;
   asection *sdyn;
+  const struct elf_x86_64_backend_data *const abed
+    = get_elf_x86_64_backend_data (output_bfd);
 
   htab = elf_x86_64_hash_table (info);
   if (htab == NULL)
     return FALSE;
 
   dynobj = htab->elf.dynobj;
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (htab->elf.dynamic_sections_created)
     {
@@ -4534,8 +4643,8 @@ elf_x86_64_finish_dynamic_sections (bfd *output_bfd,
       if (htab->elf.splt && htab->elf.splt->size > 0)
 	{
 	  /* Fill in the first entry in the procedure linkage table.  */
-	  memcpy (htab->elf.splt->contents, elf_x86_64_plt0_entry,
-		  PLT_ENTRY_SIZE);
+	  memcpy (htab->elf.splt->contents,
+		  abed->plt0_entry, abed->plt_entry_size);
 	  /* Add offset for pushq GOT+8(%rip), since the instruction
 	     uses 6 bytes subtract this value.  */
 	  bfd_put_32 (output_bfd,
@@ -4545,20 +4654,20 @@ elf_x86_64_finish_dynamic_sections (bfd *output_bfd,
 		       - htab->elf.splt->output_section->vma
 		       - htab->elf.splt->output_offset
 		       - 6),
-		      htab->elf.splt->contents + 2);
-	  /* Add offset for jmp *GOT+16(%rip). The 12 is the offset to
-	     the end of the instruction.  */
+		      htab->elf.splt->contents + abed->plt0_got1_offset);
+	  /* Add offset for the PC-relative instruction accessing GOT+16,
+	     subtracting the offset to the end of that instruction.  */
 	  bfd_put_32 (output_bfd,
 		      (htab->elf.sgotplt->output_section->vma
 		       + htab->elf.sgotplt->output_offset
 		       + 16
 		       - htab->elf.splt->output_section->vma
 		       - htab->elf.splt->output_offset
-		       - 12),
-		      htab->elf.splt->contents + 8);
+		       - abed->plt0_got2_insn_end),
+		      htab->elf.splt->contents + abed->plt0_got2_offset);
 
-	  elf_section_data (htab->elf.splt->output_section)->this_hdr.sh_entsize =
-	    PLT_ENTRY_SIZE;
+	  elf_section_data (htab->elf.splt->output_section)
+	    ->this_hdr.sh_entsize = abed->plt_entry_size;
 
 	  if (htab->tlsdesc_plt)
 	    {
@@ -4566,8 +4675,7 @@ elf_x86_64_finish_dynamic_sections (bfd *output_bfd,
 			  htab->elf.sgot->contents + htab->tlsdesc_got);
 
 	      memcpy (htab->elf.splt->contents + htab->tlsdesc_plt,
-		      elf_x86_64_plt0_entry,
-		      PLT_ENTRY_SIZE);
+		      abed->plt0_entry, abed->plt_entry_size);
 
 	      /* Add offset for pushq GOT+8(%rip), since the
 		 instruction uses 6 bytes subtract this value.  */
@@ -4579,10 +4687,11 @@ elf_x86_64_finish_dynamic_sections (bfd *output_bfd,
 			   - htab->elf.splt->output_offset
 			   - htab->tlsdesc_plt
 			   - 6),
-			  htab->elf.splt->contents + htab->tlsdesc_plt + 2);
-	      /* Add offset for jmp *GOT+TDG(%rip), where TGD stands for
-		 htab->tlsdesc_got. The 12 is the offset to the end of
-		 the instruction.  */
+			  htab->elf.splt->contents
+			  + htab->tlsdesc_plt + abed->plt0_got1_offset);
+	  /* Add offset for the PC-relative instruction accessing GOT+TDG,
+	     where TGD stands for htab->tlsdesc_got, subtracting the offset
+	     to the end of that instruction.  */
 	      bfd_put_32 (output_bfd,
 			  (htab->elf.sgot->output_section->vma
 			   + htab->elf.sgot->output_offset
@@ -4590,8 +4699,9 @@ elf_x86_64_finish_dynamic_sections (bfd *output_bfd,
 			   - htab->elf.splt->output_section->vma
 			   - htab->elf.splt->output_offset
 			   - htab->tlsdesc_plt
-			   - 12),
-			  htab->elf.splt->contents + htab->tlsdesc_plt + 8);
+			   - abed->plt0_got2_insn_end),
+			  htab->elf.splt->contents
+			  + htab->tlsdesc_plt + abed->plt0_got2_offset);
 	    }
 	}
     }
@@ -4626,7 +4736,8 @@ elf_x86_64_finish_dynamic_sections (bfd *output_bfd,
     }
 
   /* Adjust .eh_frame for .plt section.  */
-  if (htab->plt_eh_frame != NULL)
+  if (htab->plt_eh_frame != NULL
+      && htab->plt_eh_frame->contents != NULL)
     {
       if (htab->elf.splt != NULL
 	  && htab->elf.splt->size != 0
@@ -4642,8 +4753,7 @@ elf_x86_64_finish_dynamic_sections (bfd *output_bfd,
 			     htab->plt_eh_frame->contents
 			     + PLT_FDE_START_OFFSET);
 	}
-      if (htab->plt_eh_frame->sec_info_type
-	  == ELF_INFO_TYPE_EH_FRAME)
+      if (htab->plt_eh_frame->sec_info_type == SEC_INFO_TYPE_EH_FRAME)
 	{
 	  if (! _bfd_elf_write_section_eh_frame (output_bfd, info,
 						 htab->plt_eh_frame,
@@ -4671,7 +4781,7 @@ static bfd_vma
 elf_x86_64_plt_sym_val (bfd_vma i, const asection *plt,
 			const arelent *rel ATTRIBUTE_UNUSED)
 {
-  return plt->vma + (i + 1) * PLT_ENTRY_SIZE;
+  return plt->vma + (i + 1) * GET_PLT_ENTRY_SIZE (plt->owner);
 }
 
 /* Handle an x86-64 specific section when reading an object file.  This
@@ -5024,6 +5134,189 @@ static const struct bfd_elf_special_section
 
 #include "elf64-target.h"
 
+/* Native Client support.  */
+
+#undef	TARGET_LITTLE_SYM
+#define	TARGET_LITTLE_SYM		bfd_elf64_x86_64_nacl_vec
+#undef	TARGET_LITTLE_NAME
+#define	TARGET_LITTLE_NAME		"elf64-x86-64-nacl"
+#undef	elf64_bed
+#define	elf64_bed			elf64_x86_64_nacl_bed
+
+#undef	ELF_MAXPAGESIZE
+#undef	ELF_MINPAGESIZE
+#undef	ELF_COMMONPAGESIZE
+#define ELF_MAXPAGESIZE			0x10000
+#define ELF_MINPAGESIZE			0x10000
+#define ELF_COMMONPAGESIZE		0x10000
+
+/* Restore defaults.  */
+#undef	ELF_OSABI
+#undef	elf_backend_static_tls_alignment
+#undef	elf_backend_want_plt_sym
+#define elf_backend_want_plt_sym	0
+
+/* NaCl uses substantially different PLT entries for the same effects.  */
+
+#undef	elf_backend_plt_alignment
+#define elf_backend_plt_alignment	5
+#define NACL_PLT_ENTRY_SIZE		64
+#define	NACLMASK			0xe0 /* 32-byte alignment mask.  */
+
+static const bfd_byte elf_x86_64_nacl_plt0_entry[NACL_PLT_ENTRY_SIZE] =
+  {
+    0xff, 0x35, 8, 0, 0, 0,             /* pushq GOT+8(%rip) 		*/
+    0x4c, 0x8b, 0x1d, 16, 0, 0, 0,	/* mov GOT+16(%rip), %r11	*/
+    0x41, 0x83, 0xe3, NACLMASK,         /* and $-32, %r11d		*/
+    0x4d, 0x01, 0xfb,             	/* add %r15, %r11		*/
+    0x41, 0xff, 0xe3,             	/* jmpq *%r11			*/
+
+    /* 9-byte nop sequence to pad out to the next 32-byte boundary.  */
+    0x2e, 0x0f, 0x1f, 0x84, 0, 0, 0, 0, 0, /* nopl %cs:0x0(%rax,%rax,1)	*/
+
+    /* 32 bytes of nop to pad out to the standard size.  */
+    0x66, 0x66, 0x66, 0x66, 0x66, 0x66,    /* excess data32 prefixes	*/
+    0x2e, 0x0f, 0x1f, 0x84, 0, 0, 0, 0, 0, /* nopw %cs:0x0(%rax,%rax,1)	*/
+    0x66, 0x66, 0x66, 0x66, 0x66, 0x66,    /* excess data32 prefixes	*/
+    0x2e, 0x0f, 0x1f, 0x84, 0, 0, 0, 0, 0, /* nopw %cs:0x0(%rax,%rax,1)	*/
+    0x66,                                  /* excess data32 prefix	*/
+    0x90                                   /* nop */
+  };
+
+static const bfd_byte elf_x86_64_nacl_plt_entry[NACL_PLT_ENTRY_SIZE] =
+  {
+    0x4c, 0x8b, 0x1d, 0, 0, 0, 0,	/* mov name at GOTPCREL(%rip),%r11	*/
+    0x41, 0x83, 0xe3, NACLMASK,         /* and $-32, %r11d		*/
+    0x4d, 0x01, 0xfb,             	/* add %r15, %r11		*/
+    0x41, 0xff, 0xe3,             	/* jmpq *%r11			*/
+
+    /* 15-byte nop sequence to pad out to the next 32-byte boundary.  */
+    0x66, 0x66, 0x66, 0x66, 0x66, 0x66,    /* excess data32 prefixes	*/
+    0x2e, 0x0f, 0x1f, 0x84, 0, 0, 0, 0, 0, /* nopw %cs:0x0(%rax,%rax,1)	*/
+
+    /* Lazy GOT entries point here (32-byte aligned).  */
+    0x68,                 /* pushq immediate */
+    0, 0, 0, 0,           /* replaced with index into relocation table.  */
+    0xe9,                 /* jmp relative */
+    0, 0, 0, 0,           /* replaced with offset to start of .plt0.  */
+
+    /* 22 bytes of nop to pad out to the standard size.  */
+    0x66, 0x66, 0x66, 0x66, 0x66, 0x66,    /* excess data32 prefixes	*/
+    0x2e, 0x0f, 0x1f, 0x84, 0, 0, 0, 0, 0, /* nopw %cs:0x0(%rax,%rax,1)	*/
+    0x0f, 0x1f, 0x80, 0, 0, 0, 0,          /* nopl 0x0(%rax)		*/
+  };
+
+/* .eh_frame covering the .plt section.  */
+
+static const bfd_byte elf_x86_64_nacl_eh_frame_plt[] =
+  {
+#if (PLT_CIE_LENGTH != 20                               \
+     || PLT_FDE_LENGTH != 36                            \
+     || PLT_FDE_START_OFFSET != 4 + PLT_CIE_LENGTH + 8  \
+     || PLT_FDE_LEN_OFFSET != 4 + PLT_CIE_LENGTH + 12)
+# error "Need elf_x86_64_backend_data parameters for eh_frame_plt offsets!"
+#endif
+    PLT_CIE_LENGTH, 0, 0, 0,	/* CIE length */
+    0, 0, 0, 0,			/* CIE ID */
+    1,				/* CIE version */
+    'z', 'R', 0,                /* Augmentation string */
+    1,				/* Code alignment factor */
+    0x78,                       /* Data alignment factor */
+    16,				/* Return address column */
+    1,				/* Augmentation size */
+    DW_EH_PE_pcrel | DW_EH_PE_sdata4, /* FDE encoding */
+    DW_CFA_def_cfa, 7, 8,	/* DW_CFA_def_cfa: r7 (rsp) ofs 8 */
+    DW_CFA_offset + 16, 1,	/* DW_CFA_offset: r16 (rip) at cfa-8 */
+    DW_CFA_nop, DW_CFA_nop,
+
+    PLT_FDE_LENGTH, 0, 0, 0,	/* FDE length */
+    PLT_CIE_LENGTH + 8, 0, 0, 0,/* CIE pointer */
+    0, 0, 0, 0,			/* R_X86_64_PC32 .plt goes here */
+    0, 0, 0, 0,			/* .plt size goes here */
+    0,				/* Augmentation size */
+    DW_CFA_def_cfa_offset, 16,	/* DW_CFA_def_cfa_offset: 16 */
+    DW_CFA_advance_loc + 6,	/* DW_CFA_advance_loc: 6 to __PLT__+6 */
+    DW_CFA_def_cfa_offset, 24,	/* DW_CFA_def_cfa_offset: 24 */
+    DW_CFA_advance_loc + 58,	/* DW_CFA_advance_loc: 58 to __PLT__+64 */
+    DW_CFA_def_cfa_expression,	/* DW_CFA_def_cfa_expression */
+    13,				/* Block length */
+    DW_OP_breg7, 8,		/* DW_OP_breg7 (rsp): 8 */
+    DW_OP_breg16, 0,		/* DW_OP_breg16 (rip): 0 */
+    DW_OP_const1u, 63, DW_OP_and, DW_OP_const1u, 37, DW_OP_ge,
+    DW_OP_lit3, DW_OP_shl, DW_OP_plus,
+    DW_CFA_nop, DW_CFA_nop
+  };
+
+static const struct elf_x86_64_backend_data elf_x86_64_nacl_arch_bed =
+  {
+    elf_x86_64_nacl_plt0_entry,              /* plt0_entry */
+    elf_x86_64_nacl_plt_entry,               /* plt_entry */
+    NACL_PLT_ENTRY_SIZE,                     /* plt_entry_size */
+    2,                                       /* plt0_got1_offset */
+    9,                                       /* plt0_got2_offset */
+    13,                                      /* plt0_got2_insn_end */
+    3,                                       /* plt_got_offset */
+    33,                                      /* plt_reloc_offset */
+    38,                                      /* plt_plt_offset */
+    7,                                       /* plt_got_insn_size */
+    42,                                      /* plt_plt_insn_end */
+    32,                                      /* plt_lazy_offset */
+    elf_x86_64_nacl_eh_frame_plt,            /* eh_frame_plt */
+    sizeof (elf_x86_64_nacl_eh_frame_plt),   /* eh_frame_plt_size */
+  };
+
+#undef	elf_backend_arch_data
+#define	elf_backend_arch_data	&elf_x86_64_nacl_arch_bed
+
+#undef	elf_backend_modify_segment_map
+#define	elf_backend_modify_segment_map		nacl_modify_segment_map
+#undef	elf_backend_modify_program_headers
+#define	elf_backend_modify_program_headers	nacl_modify_program_headers
+
+#include "elf64-target.h"
+
+/* Native Client x32 support.  */
+
+#undef  TARGET_LITTLE_SYM
+#define TARGET_LITTLE_SYM		bfd_elf32_x86_64_nacl_vec
+#undef  TARGET_LITTLE_NAME
+#define TARGET_LITTLE_NAME		"elf32-x86-64-nacl"
+#undef	elf32_bed
+#define	elf32_bed			elf32_x86_64_nacl_bed
+
+#define bfd_elf32_bfd_link_hash_table_create \
+  elf_x86_64_link_hash_table_create
+#define bfd_elf32_bfd_link_hash_table_free \
+  elf_x86_64_link_hash_table_free
+#define bfd_elf32_bfd_reloc_type_lookup	\
+  elf_x86_64_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup \
+  elf_x86_64_reloc_name_lookup
+#define bfd_elf32_mkobject \
+  elf_x86_64_mkobject
+
+#undef elf_backend_object_p
+#define elf_backend_object_p \
+  elf32_x86_64_elf_object_p
+
+#undef elf_backend_bfd_from_remote_memory
+#define elf_backend_bfd_from_remote_memory \
+  _bfd_elf32_bfd_from_remote_memory
+
+#undef elf_backend_size_info
+#define elf_backend_size_info \
+  _bfd_elf32_size_info
+
+#include "elf32-target.h"
+
+/* Restore defaults.  */
+#undef	elf_backend_object_p
+#define elf_backend_object_p		    elf64_x86_64_elf_object_p
+#undef	elf_backend_bfd_from_remote_memory
+#undef	elf_backend_size_info
+#undef	elf_backend_modify_segment_map
+#undef	elf_backend_modify_program_headers
+
 /* Intel L1OM support.  */
 
 static bfd_boolean
@@ -5052,10 +5345,17 @@ elf64_l1om_elf_object_p (bfd *abfd)
 #undef elf_backend_object_p
 #define elf_backend_object_p		    elf64_l1om_elf_object_p
 
-#undef  elf_backend_static_tls_alignment
-
-#undef elf_backend_want_plt_sym
-#define elf_backend_want_plt_sym	    0
+/* Restore defaults.  */
+#undef	ELF_MAXPAGESIZE
+#undef	ELF_MINPAGESIZE
+#undef	ELF_COMMONPAGESIZE
+#define ELF_MAXPAGESIZE			0x200000
+#define ELF_MINPAGESIZE			0x1000
+#define ELF_COMMONPAGESIZE		0x1000
+#undef	elf_backend_plt_alignment
+#define elf_backend_plt_alignment	4
+#undef	elf_backend_arch_data
+#define	elf_backend_arch_data	&elf_x86_64_arch_bed
 
 #include "elf64-target.h"
 
@@ -5126,18 +5426,11 @@ elf64_k1om_elf_object_p (bfd *abfd)
 
 /* 32bit x86-64 support.  */
 
-static bfd_boolean
-elf32_x86_64_elf_object_p (bfd *abfd)
-{
-  /* Set the right machine number for an x86-64 elf32 file.  */
-  bfd_default_set_arch_mach (abfd, bfd_arch_i386, bfd_mach_x64_32);
-  return TRUE;
-}
-
 #undef  TARGET_LITTLE_SYM
 #define TARGET_LITTLE_SYM		    bfd_elf32_x86_64_vec
 #undef  TARGET_LITTLE_NAME
 #define TARGET_LITTLE_NAME		    "elf32-x86-64"
+#undef	elf32_bed
 
 #undef ELF_ARCH
 #define ELF_ARCH			    bfd_arch_i386
@@ -5145,17 +5438,6 @@ elf32_x86_64_elf_object_p (bfd *abfd)
 #undef	ELF_MACHINE_CODE
 #define ELF_MACHINE_CODE		    EM_X86_64
 
-#define bfd_elf32_bfd_link_hash_table_create \
-  elf_x86_64_link_hash_table_create
-#define bfd_elf32_bfd_link_hash_table_free \
-  elf_x86_64_link_hash_table_free
-#define bfd_elf32_bfd_reloc_type_lookup	\
-  elf_x86_64_reloc_type_lookup
-#define bfd_elf32_bfd_reloc_name_lookup \
-  elf_x86_64_reloc_name_lookup
-#define bfd_elf32_mkobject \
-  elf_x86_64_mkobject
-
 #undef	ELF_OSABI
 
 #undef elf_backend_object_p
diff --git a/bfd/elfcode.h b/bfd/elfcode.h
index b7e0226..30bda73 100644
--- a/bfd/elfcode.h
+++ b/bfd/elfcode.h
@@ -1,6 +1,6 @@
 /* ELF executable support for BFD.
    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    Written by Fred Fish @ Cygnus Support, from information published
@@ -633,8 +633,9 @@ elf_object_p (bfd *abfd)
       if (i_ehdrp->e_shnum == SHN_UNDEF)
 	{
 	  i_ehdrp->e_shnum = i_shdr.sh_size;
-	  if (i_ehdrp->e_shnum != i_shdr.sh_size
-	      || i_ehdrp->e_shnum == 0)
+	  if (i_ehdrp->e_shnum >= SHN_LORESERVE
+	      || i_ehdrp->e_shnum != i_shdr.sh_size
+	      || i_ehdrp->e_shnum  == 0)
 	    goto got_wrong_format_error;
 	}
 
@@ -1097,8 +1098,28 @@ elf_checksum_contents (bfd *abfd,
       elf_swap_shdr_out (abfd, &i_shdr, &x_shdr);
       (*process) (&x_shdr, sizeof x_shdr, arg);
 
+      /* PR ld/12451:
+	 Process the section's contents, if it has some.  Read them in if necessary.  */
       if (i_shdr.contents)
 	(*process) (i_shdr.contents, i_shdr.sh_size, arg);
+      else if (i_shdr.sh_type != SHT_NOBITS)
+	{
+	  asection *sec;
+
+	  sec = bfd_section_from_elf_index (abfd, count);
+	  if (sec != NULL)
+	    {
+	      if (sec->contents == NULL)
+		{
+		  /* Force rereading from file.  */
+		  sec->flags &= ~SEC_IN_MEMORY;
+		  if (! bfd_malloc_and_get_section (abfd, sec, & sec->contents))
+		    continue;
+		}
+	      if (sec->contents != NULL)
+		(*process) (sec->contents, i_shdr.sh_size, arg);
+	    }
+	}
     }
 
   return TRUE;
@@ -1430,7 +1451,7 @@ elf_slurp_reloc_table_from_section (bfd *abfd,
 	  (*_bfd_error_handler)
 	    (_("%s(%s): relocation %d has invalid symbol index %ld"),
 	     abfd->filename, asect->name, i, ELF_R_SYM (rela.r_info));
-	  relent->sym_ptr_ptr = bfd_abs_section.symbol_ptr_ptr;
+	  relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
 	}
       else
 	{
@@ -1595,7 +1616,7 @@ NAME(_bfd_elf,bfd_from_remote_memory)
   (bfd *templ,
    bfd_vma ehdr_vma,
    bfd_vma *loadbasep,
-   int (*target_read_memory) (bfd_vma, bfd_byte *, int))
+   int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type))
 {
   Elf_External_Ehdr x_ehdr;	/* Elf file header, external form */
   Elf_Internal_Ehdr i_ehdr;	/* Elf file header, internal form */
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 1d1ca0b..574b6e2 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -1,6 +1,6 @@
 /* ELF linking support for BFD.
    Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-   2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -104,8 +104,8 @@ _bfd_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
   struct elf_link_hash_table *htab = elf_hash_table (info);
 
   /* This function may be called more than once.  */
-  s = bfd_get_section_by_name (abfd, ".got");
-  if (s != NULL && (s->flags & SEC_LINKER_CREATED) != 0)
+  s = bfd_get_linker_section (abfd, ".got");
+  if (s != NULL)
     return TRUE;
 
   flags = bed->dynamic_sec_flags;
@@ -779,8 +779,7 @@ _bfd_elf_link_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED,
 	  asection *ip;
 
 	  if (htab->dynobj != NULL
-	      && (ip = bfd_get_section_by_name (htab->dynobj, p->name)) != NULL
-	      && (ip->flags & SEC_LINKER_CREATED)
+	      && (ip = bfd_get_linker_section (htab->dynobj, p->name)) != NULL
 	      && ip->output_section == p)
 	    return TRUE;
 	}
@@ -893,6 +892,33 @@ elf_merge_st_other (bfd *abfd, struct elf_link_hash_entry *h,
     }
 }
 
+/* Mark if a symbol has a definition in a dynamic object or is
+   weak in all dynamic objects.  */
+
+static void
+_bfd_elf_mark_dynamic_def_weak (struct elf_link_hash_entry *h,
+				asection *sec, int bind)
+{
+  if (!h->dynamic_def)
+    {
+      if (!bfd_is_und_section (sec))
+	h->dynamic_def = 1;
+      else
+	{
+	  /* Check if this symbol is weak in all dynamic objects. If it
+	     is the first time we see it in a dynamic object, we mark
+	     if it is weak. Otherwise, we clear it.  */
+	  if (!h->ref_dynamic)
+	    {
+	      if (bind == STB_WEAK)
+		h->dynamic_weak = 1;
+	    }
+	  else if (bind != STB_WEAK)
+	    h->dynamic_weak = 0;
+	}
+    }
+}
+
 /* This function is called when we want to define a new symbol.  It
    handles the various cases which arise when we find a definition in
    a dynamic object, or when there is already a definition in a
@@ -921,6 +947,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
 {
   asection *sec, *oldsec;
   struct elf_link_hash_entry *h;
+  struct elf_link_hash_entry *hi;
   struct elf_link_hash_entry *flip;
   int bind;
   bfd *oldbfd;
@@ -937,7 +964,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
   /* Silently discard TLS symbols from --just-syms.  There's no way to
      combine a static TLS block with a new TLS block for this executable.  */
   if (ELF_ST_TYPE (sym->st_info) == STT_TLS
-      && sec->sec_info_type == ELF_INFO_TYPE_JUST_SYMS)
+      && sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
     {
       *skip = TRUE;
       return TRUE;
@@ -959,8 +986,9 @@ _bfd_elf_merge_symbol (bfd *abfd,
   if (!(*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec))
     return TRUE;
 
-  /* For merging, we only care about real symbols.  */
-
+  /* For merging, we only care about real symbols.  But we need to make
+     sure that indirect symbol dynamic flags are updated.  */
+  hi = h;
   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;
@@ -1136,23 +1164,11 @@ _bfd_elf_merge_symbol (bfd *abfd,
   /* We need to remember if a symbol has a definition in a dynamic
      object or is weak in all dynamic objects. Internal and hidden
      visibility will make it unavailable to dynamic objects.  */
-  if (newdyn && !h->dynamic_def)
+  if (newdyn)
     {
-      if (!bfd_is_und_section (sec))
-	h->dynamic_def = 1;
-      else
-	{
-	  /* Check if this symbol is weak in all dynamic objects. If it
-	     is the first time we see it in a dynamic object, we mark
-	     if it is weak. Otherwise, we clear it.  */
-	  if (!h->ref_dynamic)
-	    {
-	      if (bind == STB_WEAK)
-		h->dynamic_weak = 1;
-	    }
-	  else if (bind != STB_WEAK)
-	    h->dynamic_weak = 0;
-	}
+      _bfd_elf_mark_dynamic_def_weak (h, sec, bind);
+      if (h != hi)
+	_bfd_elf_mark_dynamic_def_weak (hi, sec, bind);
     }
 
   /* If the old symbol has non-default visibility, we ignore the new
@@ -1164,6 +1180,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
       *skip = TRUE;
       /* Make sure this symbol is dynamic.  */
       h->ref_dynamic = 1;
+      hi->ref_dynamic = 1;
       /* A protected symbol has external availability. Make sure it is
 	 recorded as dynamic.
 
@@ -1216,15 +1233,15 @@ _bfd_elf_merge_symbol (bfd *abfd,
 	    h = *sym_hash;
 	}
 
-      if ((h->root.u.undef.next || info->hash->undefs_tail == &h->root)
-	  && bfd_is_und_section (sec))
+      /* If the old symbol was undefined before, then it will still be
+	 on the undefs list.  If the new symbol is undefined or
+	 common, we can't make it bfd_link_hash_new here, because new
+	 undefined or common symbols will be added to the undefs list
+	 by _bfd_generic_link_add_one_symbol.  Symbols may not be
+	 added twice to the undefs list.  Also, if the new symbol is
+	 undefweak then we don't want to lose the strong undef.  */
+      if (h->root.u.undef.next || info->hash->undefs_tail == &h->root)
 	{
-	  /* If the new symbol is undefined and the old symbol was
-	     also undefined before, we need to make sure
-	     _bfd_generic_link_add_one_symbol doesn't mess
-	     up the linker hash table undefs list.  Since the old
-	     definition came from a dynamic object, it is still on the
-	     undefs list.  */
 	  h->root.type = bfd_link_hash_undefined;
 	  h->root.u.undef.abfd = abfd;
 	}
@@ -1234,11 +1251,18 @@ _bfd_elf_merge_symbol (bfd *abfd,
 	  h->root.u.undef.abfd = NULL;
 	}
 
-      if (h->def_dynamic)
+      if (ELF_ST_VISIBILITY (sym->st_other) != STV_PROTECTED)
 	{
-	  h->def_dynamic = 0;
-	  h->ref_dynamic = 1;
+	  /* If the new symbol is hidden or internal, completely undo
+	     any dynamic link state.  */
+	  (*bed->elf_backend_hide_symbol) (info, h, TRUE);
+	  h->forced_local = 0;
+	  h->ref_dynamic = 0;
 	}
+      else
+	h->ref_dynamic = 1;
+      h->def_dynamic = 0;
+      h->dynamic_def = 0;
       /* FIXME: Should we check type and size for protected symbol?  */
       h->size = 0;
       h->type = 0;
@@ -1717,6 +1741,7 @@ _bfd_elf_add_default_symbol (bfd *abfd,
 	  if (! dynamic)
 	    {
 	      if (! info->executable
+		  || hi->def_dynamic
 		  || hi->ref_dynamic)
 		*dynsym = TRUE;
 	    }
@@ -2510,23 +2535,21 @@ _bfd_elf_fix_symbol_flags (struct elf_link_hash_entry *h,
      over to the real definition.  */
   if (h->u.weakdef != NULL)
     {
-      struct elf_link_hash_entry *weakdef;
-
-      weakdef = h->u.weakdef;
-      while (h->root.type == bfd_link_hash_indirect)
-	h = (struct elf_link_hash_entry *) h->root.u.i.link;
-
-      BFD_ASSERT (h->root.type == bfd_link_hash_defined
-		  || h->root.type == bfd_link_hash_defweak);
-      BFD_ASSERT (weakdef->def_dynamic);
-
       /* If the real definition is defined by a regular object file,
 	 don't do anything special.  See the longer description in
 	 _bfd_elf_adjust_dynamic_symbol, below.  */
-      if (weakdef->def_regular)
+      if (h->u.weakdef->def_regular)
 	h->u.weakdef = NULL;
       else
 	{
+	  struct elf_link_hash_entry *weakdef = h->u.weakdef;
+
+	  while (h->root.type == bfd_link_hash_indirect)
+	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+	  BFD_ASSERT (h->root.type == bfd_link_hash_defined
+		      || h->root.type == bfd_link_hash_defweak);
+	  BFD_ASSERT (weakdef->def_dynamic);
 	  BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined
 		      || weakdef->root.type == bfd_link_hash_defweak);
 	  (*bed->elf_backend_copy_indirect_symbol) (eif->info, weakdef, h);
@@ -2708,7 +2731,7 @@ _bfd_elf_link_sec_merge_syms (struct elf_link_hash_entry *h, void *data)
   if ((h->root.type == bfd_link_hash_defined
        || h->root.type == bfd_link_hash_defweak)
       && ((sec = h->root.u.def.section)->flags & SEC_MERGE)
-      && sec->sec_info_type == ELF_INFO_TYPE_MERGE)
+      && sec->sec_info_type == SEC_INFO_TYPE_MERGE)
     {
       bfd *output_bfd = (bfd *) data;
 
@@ -3031,7 +3054,7 @@ _bfd_elf_add_dynamic_entry (struct bfd_link_info *info,
     return FALSE;
 
   bed = get_elf_backend_data (hash_table->dynobj);
-  s = bfd_get_section_by_name (hash_table->dynobj, ".dynamic");
+  s = bfd_get_linker_section (hash_table->dynobj, ".dynamic");
   BFD_ASSERT (s != NULL);
 
   newsize = s->size + bed->s->sizeof_dyn;
@@ -3079,7 +3102,7 @@ elf_add_dt_needed_tag (bfd *abfd,
       bfd_byte *extdyn;
 
       bed = get_elf_backend_data (hash_table->dynobj);
-      sdyn = bfd_get_section_by_name (hash_table->dynobj, ".dynamic");
+      sdyn = bfd_get_linker_section (hash_table->dynobj, ".dynamic");
       if (sdyn != NULL)
 	for (extdyn = sdyn->contents;
 	     extdyn < sdyn->contents + sdyn->size;
@@ -3122,7 +3145,7 @@ on_needed_list (const char *soname, struct bfd_link_needed_list *needed)
   return FALSE;
 }
 
-/* Sort symbol by value and section.  */
+/* Sort symbol by value, section, and size.  */
 static int
 elf_sort_symbol (const void *arg1, const void *arg2)
 {
@@ -3141,7 +3164,8 @@ elf_sort_symbol (const void *arg1, const void *arg2)
       if (sdiff != 0)
 	return sdiff > 0 ? 1 : -1;
     }
-  return 0;
+  vdiff = h1->size - h2->size;
+  return vdiff == 0 ? 0 : vdiff > 0 ? 1 : -1;
 }
 
 /* This function is used to adjust offsets into .dynstr for
@@ -3176,7 +3200,7 @@ elf_finalize_dynstr (bfd *output_bfd, struct bfd_link_info *info)
   size = _bfd_elf_strtab_size (dynstr);
 
   bed = get_elf_backend_data (dynobj);
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
   BFD_ASSERT (sdyn != NULL);
 
   /* Update all .dynamic entries referencing .dynstr strings.  */
@@ -3225,7 +3249,7 @@ elf_finalize_dynstr (bfd *output_bfd, struct bfd_link_info *info)
       Elf_Internal_Verdef def;
       Elf_Internal_Verdaux defaux;
 
-      s = bfd_get_section_by_name (dynobj, ".gnu.version_d");
+      s = bfd_get_linker_section (dynobj, ".gnu.version_d");
       p = s->contents;
       do
 	{
@@ -3257,7 +3281,7 @@ elf_finalize_dynstr (bfd *output_bfd, struct bfd_link_info *info)
       Elf_Internal_Verneed need;
       Elf_Internal_Vernaux needaux;
 
-      s = bfd_get_section_by_name (dynobj, ".gnu.version_r");
+      s = bfd_get_linker_section (dynobj, ".gnu.version_r");
       p = s->contents;
       do
 	{
@@ -3499,7 +3523,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
       /* ld --just-symbols and dynamic objects don't mix very well.
 	 ld shouldn't allow it.  */
       if ((s = abfd->sections) != NULL
-	  && s->sec_info_type == ELF_INFO_TYPE_JUST_SYMS)
+	  && s->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
 	abort ();
 
       /* If this dynamic lib was specified on the command line with
@@ -3834,6 +3858,7 @@ error_free_dyn:
       flagword flags;
       const char *name;
       struct elf_link_hash_entry *h;
+      struct elf_link_hash_entry *hi;
       bfd_boolean definition;
       bfd_boolean size_change_ok;
       bfd_boolean type_change_ok;
@@ -3896,7 +3921,7 @@ error_free_dyn:
 	  sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
 	  if (sec == NULL)
 	    sec = bfd_abs_section_ptr;
-	  else if (elf_discarded_section (sec))
+	  else if (discarded_section (sec))
 	    {
 	      /* Symbols from discarded section are undefined.  We keep
 		 its visibility.  */
@@ -4166,6 +4191,9 @@ error_free_dyn:
 	goto error_free_vers;
 
       h = *sym_hash;
+      /* We need to make sure that indirect symbol dynamic flags are
+	 updated.  */
+      hi = h;
       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;
@@ -4354,25 +4382,38 @@ error_free_dyn:
 		      h->ref_dynamic = 1;
 		    }
 		}
-	      if (! info->executable
-		  || h->def_dynamic
-		  || h->ref_dynamic)
+
+	      /* If the indirect symbol has been forced local, don't
+		 make the real symbol dynamic.  */
+	      if ((h == hi || !hi->forced_local)
+		  && (! info->executable
+		      || h->def_dynamic
+		      || h->ref_dynamic))
 		dynsym = TRUE;
 	    }
 	  else
 	    {
 	      if (! definition)
-		h->ref_dynamic = 1;
+		{
+		  h->ref_dynamic = 1;
+		  hi->ref_dynamic = 1;
+		}
 	      else
 		{
 		  h->def_dynamic = 1;
 		  h->dynamic_def = 1;
+		  hi->def_dynamic = 1;
+		  hi->dynamic_def = 1;
 		}
-	      if (h->def_regular
-		  || h->ref_regular
-		  || (h->u.weakdef != NULL
-		      && ! new_weakdef
-		      && h->u.weakdef->dynindx != -1))
+
+	      /* If the indirect symbol has been forced local, don't
+		 make the real symbol dynamic.  */
+	      if ((h == hi || !hi->forced_local)
+		  && (h->def_regular
+		      || h->ref_regular
+		      || (h->u.weakdef != NULL
+			  && ! new_weakdef
+			  && h->u.weakdef->dynindx != -1)))
 		dynsym = TRUE;
 	    }
 
@@ -4686,7 +4727,6 @@ error_free_dyn:
 	  struct elf_link_hash_entry *hlook;
 	  asection *slook;
 	  bfd_vma vlook;
-	  long ilook;
 	  size_t i, j, idx;
 
 	  hlook = weaks;
@@ -4700,14 +4740,13 @@ error_free_dyn:
 	  slook = hlook->root.u.def.section;
 	  vlook = hlook->root.u.def.value;
 
-	  ilook = -1;
 	  i = 0;
 	  j = sym_count;
-	  while (i < j)
+	  while (i != j)
 	    {
 	      bfd_signed_vma vdiff;
 	      idx = (i + j) / 2;
-	      h = sorted_sym_hash [idx];
+	      h = sorted_sym_hash[idx];
 	      vdiff = vlook - h->root.u.def.value;
 	      if (vdiff < 0)
 		j = idx;
@@ -4721,24 +4760,36 @@ error_free_dyn:
 		  else if (sdiff > 0)
 		    i = idx + 1;
 		  else
-		    {
-		      ilook = idx;
-		      break;
-		    }
+		    break;
 		}
 	    }
 
 	  /* We didn't find a value/section match.  */
-	  if (ilook == -1)
+	  if (i == j)
 	    continue;
 
-	  for (i = ilook; i < sym_count; i++)
+	  /* With multiple aliases, or when the weak symbol is already
+	     strongly defined, we have multiple matching symbols and
+	     the binary search above may land on any of them.  Step
+	     one past the matching symbol(s).  */
+	  while (++idx != j)
 	    {
-	      h = sorted_sym_hash [i];
+	      h = sorted_sym_hash[idx];
+	      if (h->root.u.def.section != slook
+		  || h->root.u.def.value != vlook)
+		break;
+	    }
+
+	  /* Now look back over the aliases.  Since we sorted by size
+	     as well as value and section, we'll choose the one with
+	     the largest size.  */
+	  while (idx-- != i)
+	    {
+	      h = sorted_sym_hash[idx];
 
 	      /* Stop if value or section doesn't match.  */
-	      if (h->root.u.def.value != vlook
-		  || h->root.u.def.section != slook)
+	      if (h->root.u.def.section != slook
+		  || h->root.u.def.value != vlook)
 		break;
 	      else if (h != hlook)
 		{
@@ -4861,7 +4912,7 @@ error_free_dyn:
 					       &string_offset))
 		  goto error_return;
 		if (secdata->sec_info)
-		  stab->sec_info_type = ELF_INFO_TYPE_STABS;
+		  stab->sec_info_type = SEC_INFO_TYPE_STABS;
 	    }
 	}
     }
@@ -5586,17 +5637,9 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
       && ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
     return FALSE;
 
-  if (! _bfd_elf_maybe_strip_eh_frame_hdr (info))
-    return FALSE;
-
   dynobj = elf_hash_table (info)->dynobj;
 
-  /* If there were no dynamic objects in the link, there is nothing to
-     do here.  */
-  if (dynobj == NULL)
-    return TRUE;
-
-  if (elf_hash_table (info)->dynamic_sections_created)
+  if (dynobj != NULL && elf_hash_table (info)->dynamic_sections_created)
     {
       struct elf_info_failed eif;
       struct elf_link_hash_entry *h;
@@ -5606,7 +5649,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
       asection *s;
       bfd_boolean all_defined;
 
-      *sinterpptr = bfd_get_section_by_name (dynobj, ".interp");
+      *sinterpptr = bfd_get_linker_section (dynobj, ".interp");
       BFD_ASSERT (*sinterpptr != NULL || !info->executable);
 
       if (soname != NULL)
@@ -5874,7 +5917,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
 	    return FALSE;
 	}
 
-      dynstr = bfd_get_section_by_name (dynobj, ".dynstr");
+      dynstr = bfd_get_linker_section (dynobj, ".dynstr");
       /* If .dynstr is excluded from the link, we don't want any of
 	 these tags.  Strictly, we should be checking each section
 	 individually;  This quick check covers for the case where
@@ -5899,18 +5942,22 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
 
   /* The backend must work out the sizes of all the other dynamic
      sections.  */
-  if (bed->elf_backend_size_dynamic_sections
+  if (dynobj != NULL
+      && bed->elf_backend_size_dynamic_sections != NULL
       && ! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
     return FALSE;
 
-  if (elf_hash_table (info)->dynamic_sections_created)
+  if (! _bfd_elf_maybe_strip_eh_frame_hdr (info))
+    return FALSE;
+
+  if (dynobj != NULL && elf_hash_table (info)->dynamic_sections_created)
     {
       unsigned long section_sym_count;
       struct bfd_elf_version_tree *verdefs;
       asection *s;
 
       /* Set up the version definition section.  */
-      s = bfd_get_section_by_name (dynobj, ".gnu.version_d");
+      s = bfd_get_linker_section (dynobj, ".gnu.version_d");
       BFD_ASSERT (s != NULL);
 
       /* We may have created additional version definitions if we are
@@ -6173,7 +6220,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
 
       /* Work out the size of the version reference section.  */
 
-      s = bfd_get_section_by_name (dynobj, ".gnu.version_r");
+      s = bfd_get_linker_section (dynobj, ".gnu.version_r");
       BFD_ASSERT (s != NULL);
       {
 	struct elf_find_verdep_info sinfo;
@@ -6285,7 +6332,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
 	  || _bfd_elf_link_renumber_dynsyms (output_bfd, info,
 					     &section_sym_count) == 0)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".gnu.version");
+	  s = bfd_get_linker_section (dynobj, ".gnu.version");
 	  s->flags |= SEC_EXCLUDE;
 	}
     }
@@ -6369,7 +6416,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info)
 						    &section_sym_count);
 
       /* Work out the size of the symbol version section.  */
-      s = bfd_get_section_by_name (dynobj, ".gnu.version");
+      s = bfd_get_linker_section (dynobj, ".gnu.version");
       BFD_ASSERT (s != NULL);
       if (dynsymcount != 0
 	  && (s->flags & SEC_EXCLUDE) == 0)
@@ -6389,7 +6436,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info)
 	 the final symbol table, because until then we do not know the
 	 correct value to give the symbols.  We built the .dynstr
 	 section as we went along in elf_link_add_object_symbols.  */
-      s = bfd_get_section_by_name (dynobj, ".dynsym");
+      s = bfd_get_linker_section (dynobj, ".dynsym");
       BFD_ASSERT (s != NULL);
       s->size = dynsymcount * bed->s->sizeof_sym;
 
@@ -6447,7 +6494,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info)
 
 	  elf_hash_table (info)->bucketcount = bucketcount;
 
-	  s = bfd_get_section_by_name (dynobj, ".hash");
+	  s = bfd_get_linker_section (dynobj, ".hash");
 	  BFD_ASSERT (s != NULL);
 	  hash_entry_size = elf_section_data (s)->this_hdr.sh_entsize;
 	  s->size = ((2 + bucketcount + dynsymcount) * hash_entry_size);
@@ -6501,7 +6548,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info)
 	      return FALSE;
 	    }
 
-	  s = bfd_get_section_by_name (dynobj, ".gnu.hash");
+	  s = bfd_get_linker_section (dynobj, ".gnu.hash");
 	  BFD_ASSERT (s != NULL);
 
 	  if (cinfo.nsyms == 0)
@@ -6629,7 +6676,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info)
 	    }
 	}
 
-      s = bfd_get_section_by_name (dynobj, ".dynstr");
+      s = bfd_get_linker_section (dynobj, ".dynstr");
       BFD_ASSERT (s != NULL);
 
       elf_finalize_dynstr (output_bfd, info);
@@ -6644,25 +6691,14 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info)
   return TRUE;
 }
 

-/* Indicate that we are only retrieving symbol values from this
-   section.  */
-
-void
-_bfd_elf_link_just_syms (asection *sec, struct bfd_link_info *info)
-{
-  if (is_elf_hash_table (info->hash))
-    sec->sec_info_type = ELF_INFO_TYPE_JUST_SYMS;
-  _bfd_generic_link_just_syms (sec, info);
-}
-
 /* Make sure sec_info_type is cleared if sec_info is cleared too.  */
 
 static void
 merge_sections_remove_hook (bfd *abfd ATTRIBUTE_UNUSED,
 			    asection *sec)
 {
-  BFD_ASSERT (sec->sec_info_type == ELF_INFO_TYPE_MERGE);
-  sec->sec_info_type = ELF_INFO_TYPE_NONE;
+  BFD_ASSERT (sec->sec_info_type == SEC_INFO_TYPE_MERGE);
+  sec->sec_info_type = SEC_INFO_TYPE_NONE;
 }
 
 /* Finish SHF_MERGE section merging.  */
@@ -6690,7 +6726,7 @@ _bfd_elf_merge_sections (bfd *abfd, struct bfd_link_info *info)
 					  sec, &secdata->sec_info))
 	      return FALSE;
 	    else if (secdata->sec_info)
-	      sec->sec_info_type = ELF_INFO_TYPE_MERGE;
+	      sec->sec_info_type = SEC_INFO_TYPE_MERGE;
 	  }
 
   if (elf_hash_table (info)->merge_info != NULL)
@@ -7413,6 +7449,8 @@ struct elf_final_link_info
   size_t symbuf_size;
   /* And same for symshndxbuf.  */
   size_t shndxbuf_size;
+  /* Number of STT_FILE syms seen.  */
+  size_t filesym_count;
 };
 
 /* This struct is used to pass information to elf_link_output_extsym.  */
@@ -7421,7 +7459,9 @@ struct elf_outext_info
 {
   bfd_boolean failed;
   bfd_boolean localsyms;
-  struct elf_final_link_info *finfo;
+  bfd_boolean need_second_pass;
+  bfd_boolean second_pass;
+  struct elf_final_link_info *flinfo;
 };
 
 
@@ -7498,7 +7538,7 @@ set_symbol_value (bfd *bfd_with_globals,
 static bfd_boolean
 resolve_symbol (const char *name,
 		bfd *input_bfd,
-		struct elf_final_link_info *finfo,
+		struct elf_final_link_info *flinfo,
 		bfd_vma *result,
 		Elf_Internal_Sym *isymbuf,
 		size_t locsymcount)
@@ -7527,7 +7567,7 @@ resolve_symbol (const char *name,
 #endif
       if (candidate && strcmp (candidate, name) == 0)
 	{
-	  asection *sec = finfo->sections [i];
+	  asection *sec = flinfo->sections [i];
 
 	  *result = _bfd_elf_rel_local_sym (input_bfd, sym, &sec, 0);
 	  *result += sec->output_offset + sec->output_section->vma;
@@ -7540,7 +7580,7 @@ resolve_symbol (const char *name,
     }
 
   /* Hmm, haven't found it yet. perhaps it is a global.  */
-  global_entry = bfd_link_hash_lookup (finfo->info->hash, name,
+  global_entry = bfd_link_hash_lookup (flinfo->info->hash, name,
 				       FALSE, FALSE, TRUE);
   if (!global_entry)
     return FALSE;
@@ -7609,7 +7649,7 @@ static bfd_boolean
 eval_symbol (bfd_vma *result,
 	     const char **symp,
 	     bfd *input_bfd,
-	     struct elf_final_link_info *finfo,
+	     struct elf_final_link_info *flinfo,
 	     bfd_vma dot,
 	     Elf_Internal_Sym *isymbuf,
 	     size_t locsymcount,
@@ -7669,8 +7709,8 @@ eval_symbol (bfd_vma *result,
 
       if (symbol_is_section)
 	{
-	  if (!resolve_section (symbuf, finfo->output_bfd->sections, result)
-	      && !resolve_symbol (symbuf, input_bfd, finfo, result,
+	  if (!resolve_section (symbuf, flinfo->output_bfd->sections, result)
+	      && !resolve_symbol (symbuf, input_bfd, flinfo, result,
 				  isymbuf, locsymcount))
 	    {
 	      undefined_reference ("section", symbuf);
@@ -7679,9 +7719,9 @@ eval_symbol (bfd_vma *result,
 	}
       else
 	{
-	  if (!resolve_symbol (symbuf, input_bfd, finfo, result,
+	  if (!resolve_symbol (symbuf, input_bfd, flinfo, result,
 			       isymbuf, locsymcount)
-	      && !resolve_section (symbuf, finfo->output_bfd->sections,
+	      && !resolve_section (symbuf, flinfo->output_bfd->sections,
 				   result))
 	    {
 	      undefined_reference ("symbol", symbuf);
@@ -7700,7 +7740,7 @@ eval_symbol (bfd_vma *result,
       if (*sym == ':')						\
 	++sym;							\
       *symp = sym;						\
-      if (!eval_symbol (&a, symp, input_bfd, finfo, dot,	\
+      if (!eval_symbol (&a, symp, input_bfd, flinfo, dot,	\
 			isymbuf, locsymcount, signed_p))	\
 	return FALSE;						\
       if (signed_p)						\
@@ -7717,11 +7757,11 @@ eval_symbol (bfd_vma *result,
       if (*sym == ':')						\
 	++sym;							\
       *symp = sym;						\
-      if (!eval_symbol (&a, symp, input_bfd, finfo, dot,	\
+      if (!eval_symbol (&a, symp, input_bfd, flinfo, dot,	\
 			isymbuf, locsymcount, signed_p))	\
 	return FALSE;						\
       ++*symp;							\
-      if (!eval_symbol (&b, symp, input_bfd, finfo, dot,	\
+      if (!eval_symbol (&b, symp, input_bfd, flinfo, dot,	\
 			isymbuf, locsymcount, signed_p))	\
 	return FALSE;						\
       if (signed_p)						\
@@ -8319,24 +8359,24 @@ elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
 /* Flush the output symbols to the file.  */
 
 static bfd_boolean
-elf_link_flush_output_syms (struct elf_final_link_info *finfo,
+elf_link_flush_output_syms (struct elf_final_link_info *flinfo,
 			    const struct elf_backend_data *bed)
 {
-  if (finfo->symbuf_count > 0)
+  if (flinfo->symbuf_count > 0)
     {
       Elf_Internal_Shdr *hdr;
       file_ptr pos;
       bfd_size_type amt;
 
-      hdr = &elf_tdata (finfo->output_bfd)->symtab_hdr;
+      hdr = &elf_tdata (flinfo->output_bfd)->symtab_hdr;
       pos = hdr->sh_offset + hdr->sh_size;
-      amt = finfo->symbuf_count * bed->s->sizeof_sym;
-      if (bfd_seek (finfo->output_bfd, pos, SEEK_SET) != 0
-	  || bfd_bwrite (finfo->symbuf, amt, finfo->output_bfd) != amt)
+      amt = flinfo->symbuf_count * bed->s->sizeof_sym;
+      if (bfd_seek (flinfo->output_bfd, pos, SEEK_SET) != 0
+	  || bfd_bwrite (flinfo->symbuf, amt, flinfo->output_bfd) != amt)
 	return FALSE;
 
       hdr->sh_size += amt;
-      finfo->symbuf_count = 0;
+      flinfo->symbuf_count = 0;
     }
 
   return TRUE;
@@ -8345,7 +8385,7 @@ elf_link_flush_output_syms (struct elf_final_link_info *finfo,
 /* Add a symbol to the output symbol table.  */
 
 static int
-elf_link_output_sym (struct elf_final_link_info *finfo,
+elf_link_output_sym (struct elf_final_link_info *flinfo,
 		     const char *name,
 		     Elf_Internal_Sym *elfsym,
 		     asection *input_sec,
@@ -8358,11 +8398,11 @@ elf_link_output_sym (struct elf_final_link_info *finfo,
      struct elf_link_hash_entry *);
   const struct elf_backend_data *bed;
 
-  bed = get_elf_backend_data (finfo->output_bfd);
+  bed = get_elf_backend_data (flinfo->output_bfd);
   output_symbol_hook = bed->elf_backend_link_output_symbol_hook;
   if (output_symbol_hook != NULL)
     {
-      int ret = (*output_symbol_hook) (finfo->info, name, elfsym, input_sec, h);
+      int ret = (*output_symbol_hook) (flinfo->info, name, elfsym, input_sec, h);
       if (ret != 1)
 	return ret;
     }
@@ -8373,41 +8413,41 @@ elf_link_output_sym (struct elf_final_link_info *finfo,
     elfsym->st_name = 0;
   else
     {
-      elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab,
+      elfsym->st_name = (unsigned long) _bfd_stringtab_add (flinfo->symstrtab,
 							    name, TRUE, FALSE);
       if (elfsym->st_name == (unsigned long) -1)
 	return 0;
     }
 
-  if (finfo->symbuf_count >= finfo->symbuf_size)
+  if (flinfo->symbuf_count >= flinfo->symbuf_size)
     {
-      if (! elf_link_flush_output_syms (finfo, bed))
+      if (! elf_link_flush_output_syms (flinfo, bed))
 	return 0;
     }
 
-  dest = finfo->symbuf + finfo->symbuf_count * bed->s->sizeof_sym;
-  destshndx = finfo->symshndxbuf;
+  dest = flinfo->symbuf + flinfo->symbuf_count * bed->s->sizeof_sym;
+  destshndx = flinfo->symshndxbuf;
   if (destshndx != NULL)
     {
-      if (bfd_get_symcount (finfo->output_bfd) >= finfo->shndxbuf_size)
+      if (bfd_get_symcount (flinfo->output_bfd) >= flinfo->shndxbuf_size)
 	{
 	  bfd_size_type amt;
 
-	  amt = finfo->shndxbuf_size * sizeof (Elf_External_Sym_Shndx);
+	  amt = flinfo->shndxbuf_size * sizeof (Elf_External_Sym_Shndx);
 	  destshndx = (Elf_External_Sym_Shndx *) bfd_realloc (destshndx,
                                                               amt * 2);
 	  if (destshndx == NULL)
 	    return 0;
-	  finfo->symshndxbuf = destshndx;
+	  flinfo->symshndxbuf = destshndx;
 	  memset ((char *) destshndx + amt, 0, amt);
-	  finfo->shndxbuf_size *= 2;
+	  flinfo->shndxbuf_size *= 2;
 	}
-      destshndx += bfd_get_symcount (finfo->output_bfd);
+      destshndx += bfd_get_symcount (flinfo->output_bfd);
     }
 
-  bed->s->swap_symbol_out (finfo->output_bfd, elfsym, dest, destshndx);
-  finfo->symbuf_count += 1;
-  bfd_get_symcount (finfo->output_bfd) += 1;
+  bed->s->swap_symbol_out (flinfo->output_bfd, elfsym, dest, destshndx);
+  flinfo->symbuf_count += 1;
+  bfd_get_symcount (flinfo->output_bfd) += 1;
 
   return 1;
 }
@@ -8448,6 +8488,10 @@ elf_link_check_versioned_symbol (struct bfd_link_info *info,
   if (!is_elf_hash_table (info->hash))
     return FALSE;
 
+  /* Check indirect symbol.  */
+  while (h->root.type == bfd_link_hash_indirect)
+    h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
   switch (h->root.type)
     {
     default:
@@ -8595,7 +8639,7 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
 {
   struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) bh;
   struct elf_outext_info *eoinfo = (struct elf_outext_info *) data;
-  struct elf_final_link_info *finfo = eoinfo->finfo;
+  struct elf_final_link_info *flinfo = eoinfo->flinfo;
   bfd_boolean strip;
   Elf_Internal_Sym sym;
   asection *input_sec;
@@ -8615,6 +8659,11 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
     {
       if (!h->forced_local)
 	return TRUE;
+      if (eoinfo->second_pass
+	  && !((h->root.type == bfd_link_hash_defined
+		|| h->root.type == bfd_link_hash_defweak)
+	       && h->root.u.def.section->output_section != NULL))
+	return TRUE;
     }
   else
     {
@@ -8622,7 +8671,7 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
 	return TRUE;
     }
 
-  bed = get_elf_backend_data (finfo->output_bfd);
+  bed = get_elf_backend_data (flinfo->output_bfd);
 
   if (h->root.type == bfd_link_hash_undefined)
     {
@@ -8641,14 +8690,16 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
       /* If we are reporting errors for this situation then do so now.  */
       if (!ignore_undef
 	  && h->ref_dynamic
-	  && (!h->ref_regular || finfo->info->gc_sections)
-	  && ! elf_link_check_versioned_symbol (finfo->info, bed, h)
-	  && finfo->info->unresolved_syms_in_shared_libs != RM_IGNORE)
-	{
-	  if (! (finfo->info->callbacks->undefined_symbol
-		 (finfo->info, h->root.root.string,
-		  h->ref_regular ? NULL : h->root.u.undef.abfd,
-		  NULL, 0, finfo->info->unresolved_syms_in_shared_libs == RM_GENERATE_ERROR)))
+	  && (!h->ref_regular || flinfo->info->gc_sections)
+	  && !elf_link_check_versioned_symbol (flinfo->info, bed, h)
+	  && flinfo->info->unresolved_syms_in_shared_libs != RM_IGNORE)
+	{
+	  if (!(flinfo->info->callbacks->undefined_symbol
+		(flinfo->info, h->root.root.string,
+		 h->ref_regular ? NULL : h->root.u.undef.abfd,
+		 NULL, 0,
+		 (flinfo->info->unresolved_syms_in_shared_libs
+		  == RM_GENERATE_ERROR))))
 	    {
 	      bfd_set_error (bfd_error_bad_value);
 	      eoinfo->failed = TRUE;
@@ -8659,17 +8710,22 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
 
   /* We should also warn if a forced local symbol is referenced from
      shared libraries.  */
-  if (!finfo->info->relocatable
-      && finfo->info->executable
+  if (!flinfo->info->relocatable
+      && flinfo->info->executable
       && h->forced_local
       && h->ref_dynamic
       && h->def_regular
       && !h->dynamic_def
       && !h->dynamic_weak
-      && ! elf_link_check_versioned_symbol (finfo->info, bed, h))
+      && !elf_link_check_versioned_symbol (flinfo->info, bed, h))
     {
       bfd *def_bfd;
       const char *msg;
+      struct elf_link_hash_entry *hi = h;
+
+      /* Check indirect symbol.  */
+      while (hi->root.type == bfd_link_hash_indirect)
+	hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
 
       if (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)
 	msg = _("%B: internal symbol `%s' in %B is referenced by DSO");
@@ -8677,10 +8733,10 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
 	msg = _("%B: hidden symbol `%s' in %B is referenced by DSO");
       else
 	msg = _("%B: local symbol `%s' in %B is referenced by DSO");
-      def_bfd = finfo->output_bfd;
-      if (h->root.u.def.section != bfd_abs_section_ptr)
-	def_bfd = h->root.u.def.section->owner;
-      (*_bfd_error_handler) (msg, finfo->output_bfd, def_bfd,
+      def_bfd = flinfo->output_bfd;
+      if (hi->root.u.def.section != bfd_abs_section_ptr)
+	def_bfd = hi->root.u.def.section->owner;
+      (*_bfd_error_handler) (msg, flinfo->output_bfd, def_bfd,
 			     h->root.root.string);
       bfd_set_error (bfd_error_bad_value);
       eoinfo->failed = TRUE;
@@ -8699,16 +8755,16 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
 	   && !h->def_regular
 	   && !h->ref_regular)
     strip = TRUE;
-  else if (finfo->info->strip == strip_all)
+  else if (flinfo->info->strip == strip_all)
     strip = TRUE;
-  else if (finfo->info->strip == strip_some
-	   && bfd_hash_lookup (finfo->info->keep_hash,
+  else if (flinfo->info->strip == strip_some
+	   && bfd_hash_lookup (flinfo->info->keep_hash,
 			       h->root.root.string, FALSE, FALSE) == NULL)
     strip = TRUE;
   else if ((h->root.type == bfd_link_hash_defined
 	    || h->root.type == bfd_link_hash_defweak)
-	   && ((finfo->info->strip_discarded
-		&& elf_discarded_section (h->root.u.def.section))
+	   && ((flinfo->info->strip_discarded
+		&& discarded_section (h->root.u.def.section))
 	       || (h->root.u.def.section->owner != NULL
 		   && (h->root.u.def.section->owner->flags & BFD_PLUGIN) != 0)))
     strip = TRUE;
@@ -8767,14 +8823,27 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
 	input_sec = h->root.u.def.section;
 	if (input_sec->output_section != NULL)
 	  {
+	    if (eoinfo->localsyms && flinfo->filesym_count == 1)
+	      {
+		bfd_boolean second_pass_sym
+		  = (input_sec->owner == flinfo->output_bfd
+		     || input_sec->owner == NULL
+		     || (input_sec->flags & SEC_LINKER_CREATED) != 0
+		     || (input_sec->owner->flags & BFD_LINKER_CREATED) != 0);
+
+		eoinfo->need_second_pass |= second_pass_sym;
+		if (eoinfo->second_pass != second_pass_sym)
+		  return TRUE;
+	      }
+
 	    sym.st_shndx =
-	      _bfd_elf_section_from_bfd_section (finfo->output_bfd,
+	      _bfd_elf_section_from_bfd_section (flinfo->output_bfd,
 						 input_sec->output_section);
 	    if (sym.st_shndx == SHN_BAD)
 	      {
 		(*_bfd_error_handler)
 		  (_("%B: could not find output section %A for input section %A"),
-		   finfo->output_bfd, input_sec->output_section, input_sec);
+		   flinfo->output_bfd, input_sec->output_section, input_sec);
 		bfd_set_error (bfd_error_nonrepresentable_section);
 		eoinfo->failed = TRUE;
 		return FALSE;
@@ -8784,18 +8853,18 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
 	       but in nonrelocatable files they are virtual
 	       addresses.  */
 	    sym.st_value = h->root.u.def.value + input_sec->output_offset;
-	    if (! finfo->info->relocatable)
+	    if (!flinfo->info->relocatable)
 	      {
 		sym.st_value += input_sec->output_section->vma;
 		if (h->type == STT_TLS)
 		  {
-		    asection *tls_sec = elf_hash_table (finfo->info)->tls_sec;
+		    asection *tls_sec = elf_hash_table (flinfo->info)->tls_sec;
 		    if (tls_sec != NULL)
 		      sym.st_value -= tls_sec->vma;
 		    else
 		      {
 			/* The TLS section may have been garbage collected.  */
-			BFD_ASSERT (finfo->info->gc_sections
+			BFD_ASSERT (flinfo->info->gc_sections
 				    && !input_sec->gc_mark);
 		      }
 		  }
@@ -8834,17 +8903,17 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
      STT_GNU_IFUNC symbol must go through PLT.  */
   if ((h->type == STT_GNU_IFUNC
        && h->def_regular
-       && !finfo->info->relocatable)
+       && !flinfo->info->relocatable)
       || ((h->dynindx != -1
 	   || h->forced_local)
-	  && ((finfo->info->shared
+	  && ((flinfo->info->shared
 	       && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
 		   || h->root.type != bfd_link_hash_undefweak))
 	      || !h->forced_local)
-	  && elf_hash_table (finfo->info)->dynamic_sections_created))
+	  && elf_hash_table (flinfo->info)->dynamic_sections_created))
     {
       if (! ((*bed->elf_backend_finish_dynamic_symbol)
-	     (finfo->output_bfd, finfo->info, h, &sym)))
+	     (flinfo->output_bfd, flinfo->info, h, &sym)))
 	{
 	  eoinfo->failed = TRUE;
 	  return FALSE;
@@ -8887,7 +8956,7 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
 
   /* If a non-weak symbol with non-default visibility is not defined
      locally, it is a fatal error.  */
-  if (! finfo->info->relocatable
+  if (!flinfo->info->relocatable
       && ELF_ST_VISIBILITY (sym.st_other) != STV_DEFAULT
       && ELF_ST_BIND (sym.st_info) != STB_WEAK
       && h->root.type == bfd_link_hash_undefined
@@ -8901,7 +8970,7 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
 	msg = _("%B: internal symbol `%s' isn't defined");
       else
 	msg = _("%B: hidden symbol `%s' isn't defined");
-      (*_bfd_error_handler) (msg, finfo->output_bfd, h->root.root.string);
+      (*_bfd_error_handler) (msg, flinfo->output_bfd, h->root.root.string);
       bfd_set_error (bfd_error_bad_value);
       eoinfo->failed = TRUE;
       return FALSE;
@@ -8910,21 +8979,39 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
   /* If this symbol should be put in the .dynsym section, then put it
      there now.  We already know the symbol index.  We also fill in
      the entry in the .hash section.  */
-  if (h->dynindx != -1
-      && elf_hash_table (finfo->info)->dynamic_sections_created)
+  if (flinfo->dynsym_sec != NULL
+      && h->dynindx != -1
+      && elf_hash_table (flinfo->info)->dynamic_sections_created)
     {
       bfd_byte *esym;
 
+      /* Since there is no version information in the dynamic string,
+	 if there is no version info in symbol version section, we will
+	 have a run-time problem.  */
+      if (h->verinfo.verdef == NULL)
+	{
+	  char *p = strrchr (h->root.root.string, ELF_VER_CHR);
+
+	  if (p && p [1] != '\0')
+	    {
+	      (*_bfd_error_handler)
+		(_("%B: No symbol version section for versioned symbol `%s'"),
+		 flinfo->output_bfd, h->root.root.string);
+	      eoinfo->failed = TRUE;
+	      return FALSE;
+	    }
+	}
+
       sym.st_name = h->dynstr_index;
-      esym = finfo->dynsym_sec->contents + h->dynindx * bed->s->sizeof_sym;
-      if (! check_dynsym (finfo->output_bfd, &sym))
+      esym = flinfo->dynsym_sec->contents + h->dynindx * bed->s->sizeof_sym;
+      if (!check_dynsym (flinfo->output_bfd, &sym))
 	{
 	  eoinfo->failed = TRUE;
 	  return FALSE;
 	}
-      bed->s->swap_symbol_out (finfo->output_bfd, &sym, esym, 0);
+      bed->s->swap_symbol_out (flinfo->output_bfd, &sym, esym, 0);
 
-      if (finfo->hash_sec != NULL)
+      if (flinfo->hash_sec != NULL)
 	{
 	  size_t hash_entry_size;
 	  bfd_byte *bucketpos;
@@ -8932,21 +9019,22 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
 	  size_t bucketcount;
 	  size_t bucket;
 
-	  bucketcount = elf_hash_table (finfo->info)->bucketcount;
+	  bucketcount = elf_hash_table (flinfo->info)->bucketcount;
 	  bucket = h->u.elf_hash_value % bucketcount;
 
 	  hash_entry_size
-	    = elf_section_data (finfo->hash_sec)->this_hdr.sh_entsize;
-	  bucketpos = ((bfd_byte *) finfo->hash_sec->contents
+	    = elf_section_data (flinfo->hash_sec)->this_hdr.sh_entsize;
+	  bucketpos = ((bfd_byte *) flinfo->hash_sec->contents
 		       + (bucket + 2) * hash_entry_size);
-	  chain = bfd_get (8 * hash_entry_size, finfo->output_bfd, bucketpos);
-	  bfd_put (8 * hash_entry_size, finfo->output_bfd, h->dynindx, bucketpos);
-	  bfd_put (8 * hash_entry_size, finfo->output_bfd, chain,
-		   ((bfd_byte *) finfo->hash_sec->contents
+	  chain = bfd_get (8 * hash_entry_size, flinfo->output_bfd, bucketpos);
+	  bfd_put (8 * hash_entry_size, flinfo->output_bfd, h->dynindx,
+		   bucketpos);
+	  bfd_put (8 * hash_entry_size, flinfo->output_bfd, chain,
+		   ((bfd_byte *) flinfo->hash_sec->contents
 		    + (bucketcount + 2 + h->dynindx) * hash_entry_size));
 	}
 
-      if (finfo->symver_sec != NULL && finfo->symver_sec->contents != NULL)
+      if (flinfo->symver_sec != NULL && flinfo->symver_sec->contents != NULL)
 	{
 	  Elf_Internal_Versym iversym;
 	  Elf_External_Versym *eversym;
@@ -8964,16 +9052,16 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
 		iversym.vs_vers = 1;
 	      else
 		iversym.vs_vers = h->verinfo.vertree->vernum + 1;
-	      if (finfo->info->create_default_symver)
+	      if (flinfo->info->create_default_symver)
 		iversym.vs_vers++;
 	    }
 
 	  if (h->hidden)
 	    iversym.vs_vers |= VERSYM_HIDDEN;
 
-	  eversym = (Elf_External_Versym *) finfo->symver_sec->contents;
+	  eversym = (Elf_External_Versym *) flinfo->symver_sec->contents;
 	  eversym += h->dynindx;
-	  _bfd_elf_swap_versym_out (finfo->output_bfd, &iversym, eversym);
+	  _bfd_elf_swap_versym_out (flinfo->output_bfd, &iversym, eversym);
 	}
     }
 
@@ -8982,8 +9070,8 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
   if (strip || (input_sec->flags & SEC_EXCLUDE) != 0)
     return TRUE;
 
-  indx = bfd_get_symcount (finfo->output_bfd);
-  ret = elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec, h);
+  indx = bfd_get_symcount (flinfo->output_bfd);
+  ret = elf_link_output_sym (flinfo, h->root.root.string, &sym, input_sec, h);
   if (ret == 0)
     {
       eoinfo->failed = TRUE;
@@ -9007,8 +9095,8 @@ elf_section_ignore_discarded_relocs (asection *sec)
 
   switch (sec->sec_info_type)
     {
-    case ELF_INFO_TYPE_STABS:
-    case ELF_INFO_TYPE_EH_FRAME:
+    case SEC_INFO_TYPE_STABS:
+    case SEC_INFO_TYPE_EH_FRAME:
       return TRUE;
     default:
       break;
@@ -9097,7 +9185,7 @@ _bfd_elf_check_kept_section (asection *sec, struct bfd_link_info *info)
    don't have to keep them in memory.  */
 
 static bfd_boolean
-elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
+elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd)
 {
   int (*relocate_section)
     (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
@@ -9117,8 +9205,9 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
   bfd_size_type address_size;
   bfd_vma r_type_mask;
   int r_sym_shift;
+  bfd_boolean have_file_sym = FALSE;
 
-  output_bfd = finfo->output_bfd;
+  output_bfd = flinfo->output_bfd;
   bed = get_elf_backend_data (output_bfd);
   relocate_section = bed->elf_backend_relocate_section;
 
@@ -9145,9 +9234,9 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
   if (isymbuf == NULL && locsymcount != 0)
     {
       isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0,
-				      finfo->internal_syms,
-				      finfo->external_syms,
-				      finfo->locsym_shndx);
+				      flinfo->internal_syms,
+				      flinfo->external_syms,
+				      flinfo->locsym_shndx);
       if (isymbuf == NULL)
 	return FALSE;
     }
@@ -9156,7 +9245,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
      SEC_MERGE sections.  Write out those local symbols we know are
      going into the output file.  */
   isymend = isymbuf + locsymcount;
-  for (isym = isymbuf, pindex = finfo->indices, ppsection = finfo->sections;
+  for (isym = isymbuf, pindex = flinfo->indices, ppsection = flinfo->sections;
        isym < isymend;
        isym++, pindex++, ppsection++)
     {
@@ -9193,7 +9282,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 	      *ppsection = NULL;
 	      continue;
 	    }
-	  else if (isec->sec_info_type == ELF_INFO_TYPE_MERGE
+	  else if (isec->sec_info_type == SEC_INFO_TYPE_MERGE
 		   && ELF_ST_TYPE (isym->st_info) != STT_SECTION)
 	    isym->st_value =
 	      _bfd_merged_section_offset (output_bfd, &isec,
@@ -9204,7 +9293,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
       *ppsection = isec;
 
       /* Don't output the first, undefined, symbol.  */
-      if (ppsection == finfo->sections)
+      if (ppsection == flinfo->sections)
 	continue;
 
       if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
@@ -9217,7 +9306,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 
       /* If we are stripping all symbols, we don't want to output this
 	 one.  */
-      if (finfo->info->strip == strip_all)
+      if (flinfo->info->strip == strip_all)
 	continue;
 
       /* If we are discarding all local symbols, we don't want to
@@ -9225,7 +9314,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 	 file, then some of the local symbols may be required by
 	 relocs; we output them below as we discover that they are
 	 needed.  */
-      if (finfo->info->discard == discard_all)
+      if (flinfo->info->discard == discard_all)
 	continue;
 
       /* If this symbol is defined in a section which we are
@@ -9243,15 +9332,38 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 	return FALSE;
 
       /* See if we are discarding symbols with this name.  */
-      if ((finfo->info->strip == strip_some
-	   && (bfd_hash_lookup (finfo->info->keep_hash, name, FALSE, FALSE)
+      if ((flinfo->info->strip == strip_some
+	   && (bfd_hash_lookup (flinfo->info->keep_hash, name, FALSE, FALSE)
 	       == NULL))
-	  || (((finfo->info->discard == discard_sec_merge
-		&& (isec->flags & SEC_MERGE) && ! finfo->info->relocatable)
-	       || finfo->info->discard == discard_l)
+	  || (((flinfo->info->discard == discard_sec_merge
+		&& (isec->flags & SEC_MERGE) && !flinfo->info->relocatable)
+	       || flinfo->info->discard == discard_l)
 	      && bfd_is_local_label_name (input_bfd, name)))
 	continue;
 
+      if (ELF_ST_TYPE (isym->st_info) == STT_FILE)
+	{
+	  have_file_sym = TRUE;
+	  flinfo->filesym_count += 1;
+	}
+      if (!have_file_sym)
+	{
+	  /* In the absence of debug info, bfd_find_nearest_line uses
+	     FILE symbols to determine the source file for local
+	     function symbols.  Provide a FILE symbol here if input
+	     files lack such, so that their symbols won't be
+	     associated with a previous input file.  It's not the
+	     source file, but the best we can do.  */
+	  have_file_sym = TRUE;
+	  flinfo->filesym_count += 1;
+	  memset (&osym, 0, sizeof (osym));
+	  osym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
+	  osym.st_shndx = SHN_ABS;
+	  if (!elf_link_output_sym (flinfo, input_bfd->filename, &osym,
+				    bfd_abs_section_ptr, NULL))
+	    return FALSE;
+	}
+
       osym = *isym;
 
       /* Adjust the section index for the output file.  */
@@ -9268,19 +9380,19 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 	 output_section.  Any special sections must be set up to meet
 	 these requirements.  */
       osym.st_value += isec->output_offset;
-      if (! finfo->info->relocatable)
+      if (!flinfo->info->relocatable)
 	{
 	  osym.st_value += isec->output_section->vma;
 	  if (ELF_ST_TYPE (osym.st_info) == STT_TLS)
 	    {
 	      /* STT_TLS symbols are relative to PT_TLS segment base.  */
-	      BFD_ASSERT (elf_hash_table (finfo->info)->tls_sec != NULL);
-	      osym.st_value -= elf_hash_table (finfo->info)->tls_sec->vma;
+	      BFD_ASSERT (elf_hash_table (flinfo->info)->tls_sec != NULL);
+	      osym.st_value -= elf_hash_table (flinfo->info)->tls_sec->vma;
 	    }
 	}
 
       indx = bfd_get_symcount (output_bfd);
-      ret = elf_link_output_sym (finfo, name, &osym, isec, NULL);
+      ret = elf_link_output_sym (flinfo, name, &osym, isec, NULL);
       if (ret == 0)
 	return FALSE;
       else if (ret == 1)
@@ -9312,7 +9424,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 	  continue;
 	}
 
-      if (finfo->info->relocatable
+      if (flinfo->info->relocatable
 	  && (o->flags & (SEC_LINKER_CREATED | SEC_GROUP)) == SEC_GROUP)
 	{
 	  /* Deal with the group signature symbol.  */
@@ -9322,7 +9434,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 
 	  if (symndx >= locsymcount
 	      || (elf_bad_symtab (input_bfd)
-		  && finfo->sections[symndx] == NULL))
+		  && flinfo->sections[symndx] == NULL))
 	    {
 	      struct elf_link_hash_entry *h = sym_hashes[symndx - extsymoff];
 	      while (h->root.type == bfd_link_hash_indirect
@@ -9335,16 +9447,16 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 	  else if (ELF_ST_TYPE (isymbuf[symndx].st_info) == STT_SECTION)
 	    {
 	      /* We'll use the output section target_index.  */
-	      asection *sec = finfo->sections[symndx]->output_section;
+	      asection *sec = flinfo->sections[symndx]->output_section;
 	      elf_section_data (osec)->this_hdr.sh_info = sec->target_index;
 	    }
 	  else
 	    {
-	      if (finfo->indices[symndx] == -1)
+	      if (flinfo->indices[symndx] == -1)
 		{
 		  /* Otherwise output the local symbol now.  */
 		  Elf_Internal_Sym sym = isymbuf[symndx];
-		  asection *sec = finfo->sections[symndx]->output_section;
+		  asection *sec = flinfo->sections[symndx]->output_section;
 		  const char *name;
 		  long indx;
 		  int ret;
@@ -9363,16 +9475,16 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 		  sym.st_value += o->output_offset;
 
 		  indx = bfd_get_symcount (output_bfd);
-		  ret = elf_link_output_sym (finfo, name, &sym, o, NULL);
+		  ret = elf_link_output_sym (flinfo, name, &sym, o, NULL);
 		  if (ret == 0)
 		    return FALSE;
 		  else if (ret == 1)
-		    finfo->indices[symndx] = indx;
+		    flinfo->indices[symndx] = indx;
 		  else
 		    abort ();
 		}
 	      elf_section_data (osec)->this_hdr.sh_info
-		= finfo->indices[symndx];
+		= flinfo->indices[symndx];
 	    }
 	}
 
@@ -9395,7 +9507,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 	contents = elf_section_data (o)->this_hdr.contents;
       else
 	{
-	  contents = finfo->contents;
+	  contents = flinfo->contents;
 	  if (! bfd_get_full_section_contents (input_bfd, o, &contents))
 	    return FALSE;
 	}
@@ -9409,8 +9521,8 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 
 	  /* Get the swapped relocs.  */
 	  internal_relocs
-	    = _bfd_elf_link_read_relocs (input_bfd, o, finfo->external_relocs,
-					 finfo->internal_relocs, FALSE);
+	    = _bfd_elf_link_read_relocs (input_bfd, o, flinfo->external_relocs,
+					 flinfo->internal_relocs, FALSE);
 	  if (internal_relocs == NULL
 	      && o->reloc_count > 0)
 	    return FALSE;
@@ -9463,7 +9575,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 
 	      if (r_symndx >= locsymcount
 		  || (elf_bad_symtab (input_bfd)
-		      && finfo->sections[r_symndx] == NULL))
+		      && flinfo->sections[r_symndx] == NULL))
 		{
 		  h = sym_hashes[r_symndx - extsymoff];
 
@@ -9501,13 +9613,13 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 		  Elf_Internal_Sym *sym = isymbuf + r_symndx;
 
 		  s_type = ELF_ST_TYPE (sym->st_info);
-		  ps = &finfo->sections[r_symndx];
+		  ps = &flinfo->sections[r_symndx];
 		  sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr,
 					       sym, *ps);
 		}
 
 	      if ((s_type == STT_RELC || s_type == STT_SRELC)
-		  && !finfo->info->relocatable)
+		  && !flinfo->info->relocatable)
 		{
 		  bfd_vma val;
 		  bfd_vma dot = (rel->r_offset
@@ -9523,7 +9635,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 			  (unsigned long) rel->r_info,
 			  (unsigned long) rel->r_offset);
 #endif
-		  if (!eval_symbol (&val, &sym_name, input_bfd, finfo, dot,
+		  if (!eval_symbol (&val, &sym_name, input_bfd, flinfo, dot,
 				    isymbuf, locsymcount, s_type == STT_SRELC))
 		    return FALSE;
 
@@ -9537,11 +9649,11 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 		{
 		  /* Complain if the definition comes from a
 		     discarded section.  */
-		  if ((sec = *ps) != NULL && elf_discarded_section (sec))
+		  if ((sec = *ps) != NULL && discarded_section (sec))
 		    {
 		      BFD_ASSERT (r_symndx != STN_UNDEF);
 		      if (action_discarded & COMPLAIN)
-			(*finfo->info->callbacks->einfo)
+			(*flinfo->info->callbacks->einfo)
 			  (_("%X`%s' referenced in section `%A' of %B: "
 			     "defined in discarded section `%A' of %B\n"),
 			   sym_name, o, input_bfd, sec, sec->owner);
@@ -9557,7 +9669,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 			  asection *kept;
 
 			  kept = _bfd_elf_check_kept_section (sec,
-							      finfo->info);
+							      flinfo->info);
 			  if (kept != NULL)
 			    {
 			      *ps = kept;
@@ -9588,17 +9700,17 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 	     corresponding to the output section, which will require
 	     the addend to be adjusted.  */
 
-	  ret = (*relocate_section) (output_bfd, finfo->info,
+	  ret = (*relocate_section) (output_bfd, flinfo->info,
 				     input_bfd, o, contents,
 				     internal_relocs,
 				     isymbuf,
-				     finfo->sections);
+				     flinfo->sections);
 	  if (!ret)
 	    return FALSE;
 
 	  if (ret == 2
-	      || finfo->info->relocatable
-	      || finfo->info->emitrelocations)
+	      || flinfo->info->relocatable
+	      || flinfo->info->emitrelocations)
 	    {
 	      Elf_Internal_Rela *irela;
 	      Elf_Internal_Rela *irelaend, *irelamid;
@@ -9628,7 +9740,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 	      rel_hash_list = rel_hash;
 	      rela_hash_list = NULL;
 	      last_offset = o->output_offset;
-	      if (!finfo->info->relocatable)
+	      if (!flinfo->info->relocatable)
 		last_offset += o->output_section->vma;
 	      for (next_erel = 0; irela < irelaend; irela++, next_erel++)
 		{
@@ -9650,7 +9762,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 		    }
 
 		  irela->r_offset = _bfd_elf_section_offset (output_bfd,
-							     finfo->info, o,
+							     flinfo->info, o,
 							     irela->r_offset);
 		  if (irela->r_offset >= (bfd_vma) -2)
 		    {
@@ -9668,7 +9780,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 		  irela->r_offset += o->output_offset;
 
 		  /* Relocs in an executable have to be virtual addresses.  */
-		  if (!finfo->info->relocatable)
+		  if (!flinfo->info->relocatable)
 		    irela->r_offset += o->output_section->vma;
 
 		  last_offset = irela->r_offset;
@@ -9679,7 +9791,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 
 		  if (r_symndx >= locsymcount
 		      || (elf_bad_symtab (input_bfd)
-			  && finfo->sections[r_symndx] == NULL))
+			  && flinfo->sections[r_symndx] == NULL))
 		    {
 		      struct elf_link_hash_entry *rh;
 		      unsigned long indx;
@@ -9712,7 +9824,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 
 		  *rel_hash = NULL;
 		  sym = isymbuf[r_symndx];
-		  sec = finfo->sections[r_symndx];
+		  sec = flinfo->sections[r_symndx];
 		  if (ELF_ST_TYPE (sym.st_info) == STT_SECTION)
 		    {
 		      /* I suppose the backend ought to fill in the
@@ -9749,23 +9861,12 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 			      r_symndx = osec->target_index;
 			      if (r_symndx == STN_UNDEF)
 				{
-				  struct elf_link_hash_table *htab;
-				  asection *oi;
-
-				  htab = elf_hash_table (finfo->info);
-				  oi = htab->text_index_section;
-				  if ((osec->flags & SEC_READONLY) == 0
-				      && htab->data_index_section != NULL)
-				    oi = htab->data_index_section;
-
-				  if (oi != NULL)
-				    {
-				      irela->r_addend += osec->vma - oi->vma;
-				      r_symndx = oi->target_index;
-				    }
+				  irela->r_addend += osec->vma;
+				  osec = _bfd_nearby_section (output_bfd, osec,
+							      osec->vma);
+				  irela->r_addend -= osec->vma;
+				  r_symndx = osec->target_index;
 				}
-
-			      BFD_ASSERT (r_symndx != STN_UNDEF);
 			    }
 			}
 
@@ -9776,14 +9877,14 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 		    }
 		  else
 		    {
-		      if (finfo->indices[r_symndx] == -1)
+		      if (flinfo->indices[r_symndx] == -1)
 			{
 			  unsigned long shlink;
 			  const char *name;
 			  asection *osec;
 			  long indx;
 
-			  if (finfo->info->strip == strip_all)
+			  if (flinfo->info->strip == strip_all)
 			    {
 			      /* You can't do ld -r -s.  */
 			      bfd_set_error (bfd_error_invalid_operation);
@@ -9807,32 +9908,32 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 			    return FALSE;
 
 			  sym.st_value += sec->output_offset;
-			  if (! finfo->info->relocatable)
+			  if (!flinfo->info->relocatable)
 			    {
 			      sym.st_value += osec->vma;
 			      if (ELF_ST_TYPE (sym.st_info) == STT_TLS)
 				{
 				  /* STT_TLS symbols are relative to PT_TLS
 				     segment base.  */
-				  BFD_ASSERT (elf_hash_table (finfo->info)
+				  BFD_ASSERT (elf_hash_table (flinfo->info)
 					      ->tls_sec != NULL);
-				  sym.st_value -= (elf_hash_table (finfo->info)
+				  sym.st_value -= (elf_hash_table (flinfo->info)
 						   ->tls_sec->vma);
 				}
 			    }
 
 			  indx = bfd_get_symcount (output_bfd);
-			  ret = elf_link_output_sym (finfo, name, &sym, sec,
+			  ret = elf_link_output_sym (flinfo, name, &sym, sec,
 						     NULL);
 			  if (ret == 0)
 			    return FALSE;
 			  else if (ret == 1)
-			    finfo->indices[r_symndx] = indx;
+			    flinfo->indices[r_symndx] = indx;
 			  else
 			    abort ();
 			}
 
-		      r_symndx = finfo->indices[r_symndx];
+		      r_symndx = flinfo->indices[r_symndx];
 		    }
 
 		  irela->r_info = ((bfd_vma) r_symndx << r_sym_shift
@@ -9867,28 +9968,28 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
 
       /* Write out the modified section contents.  */
       if (bed->elf_backend_write_section
-	  && (*bed->elf_backend_write_section) (output_bfd, finfo->info, o,
+	  && (*bed->elf_backend_write_section) (output_bfd, flinfo->info, o,
 						contents))
 	{
 	  /* Section written out.  */
 	}
       else switch (o->sec_info_type)
 	{
-	case ELF_INFO_TYPE_STABS:
+	case SEC_INFO_TYPE_STABS:
 	  if (! (_bfd_write_section_stabs
 		 (output_bfd,
-		  &elf_hash_table (finfo->info)->stab_info,
+		  &elf_hash_table (flinfo->info)->stab_info,
 		  o, &elf_section_data (o)->sec_info, contents)))
 	    return FALSE;
 	  break;
-	case ELF_INFO_TYPE_MERGE:
+	case SEC_INFO_TYPE_MERGE:
 	  if (! _bfd_write_merged_section (output_bfd, o,
 					   elf_section_data (o)->sec_info))
 	    return FALSE;
 	  break;
-	case ELF_INFO_TYPE_EH_FRAME:
+	case SEC_INFO_TYPE_EH_FRAME:
 	  {
-	    if (! _bfd_elf_write_section_eh_frame (output_bfd, finfo->info,
+	    if (! _bfd_elf_write_section_eh_frame (output_bfd, flinfo->info,
 						   o, contents))
 	      return FALSE;
 	  }
@@ -10265,7 +10366,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
   bfd_boolean dynamic;
   bfd_boolean emit_relocs;
   bfd *dynobj;
-  struct elf_final_link_info finfo;
+  struct elf_final_link_info flinfo;
   asection *o;
   struct bfd_link_order *p;
   bfd *sub;
@@ -10302,39 +10403,40 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
   emit_relocs = (info->relocatable
 		 || info->emitrelocations);
 
-  finfo.info = info;
-  finfo.output_bfd = abfd;
-  finfo.symstrtab = _bfd_elf_stringtab_init ();
-  if (finfo.symstrtab == NULL)
+  flinfo.info = info;
+  flinfo.output_bfd = abfd;
+  flinfo.symstrtab = _bfd_elf_stringtab_init ();
+  if (flinfo.symstrtab == NULL)
     return FALSE;
 
   if (! dynamic)
     {
-      finfo.dynsym_sec = NULL;
-      finfo.hash_sec = NULL;
-      finfo.symver_sec = NULL;
+      flinfo.dynsym_sec = NULL;
+      flinfo.hash_sec = NULL;
+      flinfo.symver_sec = NULL;
     }
   else
     {
-      finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
-      finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
-      BFD_ASSERT (finfo.dynsym_sec != NULL);
-      finfo.symver_sec = bfd_get_section_by_name (dynobj, ".gnu.version");
+      flinfo.dynsym_sec = bfd_get_linker_section (dynobj, ".dynsym");
+      flinfo.hash_sec = bfd_get_linker_section (dynobj, ".hash");
+      /* Note that dynsym_sec can be NULL (on VMS).  */
+      flinfo.symver_sec = bfd_get_linker_section (dynobj, ".gnu.version");
       /* Note that it is OK if symver_sec is NULL.  */
     }
 
-  finfo.contents = NULL;
-  finfo.external_relocs = NULL;
-  finfo.internal_relocs = NULL;
-  finfo.external_syms = NULL;
-  finfo.locsym_shndx = NULL;
-  finfo.internal_syms = NULL;
-  finfo.indices = NULL;
-  finfo.sections = NULL;
-  finfo.symbuf = NULL;
-  finfo.symshndxbuf = NULL;
-  finfo.symbuf_count = 0;
-  finfo.shndxbuf_size = 0;
+  flinfo.contents = NULL;
+  flinfo.external_relocs = NULL;
+  flinfo.internal_relocs = NULL;
+  flinfo.external_syms = NULL;
+  flinfo.locsym_shndx = NULL;
+  flinfo.internal_syms = NULL;
+  flinfo.indices = NULL;
+  flinfo.sections = NULL;
+  flinfo.symbuf = NULL;
+  flinfo.symshndxbuf = NULL;
+  flinfo.symbuf_count = 0;
+  flinfo.shndxbuf_size = 0;
+  flinfo.filesym_count = 0;
 
   /* The object attributes have been merged.  Remove the input
      sections from the link, and set the contents of the output
@@ -10408,7 +10510,13 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
 	      if (sec->flags & SEC_MERGE)
 		merged = TRUE;
 
-	      if (info->relocatable || info->emitrelocations)
+	      if (esdo->this_hdr.sh_type == SHT_REL
+		  || esdo->this_hdr.sh_type == SHT_RELA)
+		/* Some backends use reloc_count in relocation sections
+		   to count particular types of relocs.  Of course,
+		   reloc sections themselves can't have relocations.  */
+		reloc_count = 0;
+	      else if (info->relocatable || info->emitrelocations)
 		reloc_count = sec->reloc_count;
 	      else if (bed->elf_backend_count_relocs)
 		reloc_count = (*bed->elf_backend_count_relocs) (info, sec);
@@ -10556,22 +10664,22 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
   /* Allocate a buffer to hold swapped out symbols.  This is to avoid
      continuously seeking to the right position in the file.  */
   if (! info->keep_memory || max_sym_count < 20)
-    finfo.symbuf_size = 20;
+    flinfo.symbuf_size = 20;
   else
-    finfo.symbuf_size = max_sym_count;
-  amt = finfo.symbuf_size;
+    flinfo.symbuf_size = max_sym_count;
+  amt = flinfo.symbuf_size;
   amt *= bed->s->sizeof_sym;
-  finfo.symbuf = (bfd_byte *) bfd_malloc (amt);
-  if (finfo.symbuf == NULL)
+  flinfo.symbuf = (bfd_byte *) bfd_malloc (amt);
+  if (flinfo.symbuf == NULL)
     goto error_return;
   if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF))
     {
       /* Wild guess at number of output symbols.  realloc'd as needed.  */
       amt = 2 * max_sym_count + elf_numsections (abfd) + 1000;
-      finfo.shndxbuf_size = amt;
+      flinfo.shndxbuf_size = amt;
       amt *= sizeof (Elf_External_Sym_Shndx);
-      finfo.symshndxbuf = (Elf_External_Sym_Shndx *) bfd_zmalloc (amt);
-      if (finfo.symshndxbuf == NULL)
+      flinfo.symshndxbuf = (Elf_External_Sym_Shndx *) bfd_zmalloc (amt);
+      if (flinfo.symshndxbuf == NULL)
 	goto error_return;
     }
 
@@ -10586,7 +10694,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
       elfsym.st_other = 0;
       elfsym.st_shndx = SHN_UNDEF;
       elfsym.st_target_internal = 0;
-      if (elf_link_output_sym (&finfo, NULL, &elfsym, bfd_und_section_ptr,
+      if (elf_link_output_sym (&flinfo, NULL, &elfsym, bfd_und_section_ptr,
 			       NULL) != 1)
 	goto error_return;
     }
@@ -10613,7 +10721,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
 	      elfsym.st_shndx = i;
 	      if (!info->relocatable)
 		elfsym.st_value = o->vma;
-	      if (elf_link_output_sym (&finfo, NULL, &elfsym, o, NULL) != 1)
+	      if (elf_link_output_sym (&flinfo, NULL, &elfsym, o, NULL) != 1)
 		goto error_return;
 	    }
 	}
@@ -10623,15 +10731,15 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
      files.  */
   if (max_contents_size != 0)
     {
-      finfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
-      if (finfo.contents == NULL)
+      flinfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
+      if (flinfo.contents == NULL)
 	goto error_return;
     }
 
   if (max_external_reloc_size != 0)
     {
-      finfo.external_relocs = bfd_malloc (max_external_reloc_size);
-      if (finfo.external_relocs == NULL)
+      flinfo.external_relocs = bfd_malloc (max_external_reloc_size);
+      if (flinfo.external_relocs == NULL)
 	goto error_return;
     }
 
@@ -10639,39 +10747,39 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
     {
       amt = max_internal_reloc_count * bed->s->int_rels_per_ext_rel;
       amt *= sizeof (Elf_Internal_Rela);
-      finfo.internal_relocs = (Elf_Internal_Rela *) bfd_malloc (amt);
-      if (finfo.internal_relocs == NULL)
+      flinfo.internal_relocs = (Elf_Internal_Rela *) bfd_malloc (amt);
+      if (flinfo.internal_relocs == NULL)
 	goto error_return;
     }
 
   if (max_sym_count != 0)
     {
       amt = max_sym_count * bed->s->sizeof_sym;
-      finfo.external_syms = (bfd_byte *) bfd_malloc (amt);
-      if (finfo.external_syms == NULL)
+      flinfo.external_syms = (bfd_byte *) bfd_malloc (amt);
+      if (flinfo.external_syms == NULL)
 	goto error_return;
 
       amt = max_sym_count * sizeof (Elf_Internal_Sym);
-      finfo.internal_syms = (Elf_Internal_Sym *) bfd_malloc (amt);
-      if (finfo.internal_syms == NULL)
+      flinfo.internal_syms = (Elf_Internal_Sym *) bfd_malloc (amt);
+      if (flinfo.internal_syms == NULL)
 	goto error_return;
 
       amt = max_sym_count * sizeof (long);
-      finfo.indices = (long int *) bfd_malloc (amt);
-      if (finfo.indices == NULL)
+      flinfo.indices = (long int *) bfd_malloc (amt);
+      if (flinfo.indices == NULL)
 	goto error_return;
 
       amt = max_sym_count * sizeof (asection *);
-      finfo.sections = (asection **) bfd_malloc (amt);
-      if (finfo.sections == NULL)
+      flinfo.sections = (asection **) bfd_malloc (amt);
+      if (flinfo.sections == NULL)
 	goto error_return;
     }
 
   if (max_sym_shndx_count != 0)
     {
       amt = max_sym_shndx_count * sizeof (Elf_External_Sym_Shndx);
-      finfo.locsym_shndx = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
-      if (finfo.locsym_shndx == NULL)
+      flinfo.locsym_shndx = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
+      if (flinfo.locsym_shndx == NULL)
 	goto error_return;
     }
 
@@ -10745,7 +10853,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
 	    {
 	      if (! sub->output_has_begun)
 		{
-		  if (! elf_link_input_bfd (&finfo, sub))
+		  if (! elf_link_input_bfd (&flinfo, sub))
 		    goto error_return;
 		  sub->output_has_begun = TRUE;
 		}
@@ -10803,6 +10911,17 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
 	  }
     }
 
+  /* Output a FILE symbol so that following locals are not associated
+     with the wrong input file.  */
+  memset (&elfsym, 0, sizeof (elfsym));
+  elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
+  elfsym.st_shndx = SHN_ABS;
+
+  if (flinfo.filesym_count > 1
+      && !elf_link_output_sym (&flinfo, NULL, &elfsym,
+			       bfd_und_section_ptr, NULL))
+    return FALSE;
+
   /* Output any global symbols that got converted to local in a
      version script or due to symbol visibility.  We do this in a
      separate step since ELF requires all local symbols to appear
@@ -10810,12 +10929,27 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
      some global symbols were, in fact, converted to become local.
      FIXME: Will this work correctly with the Irix 5 linker?  */
   eoinfo.failed = FALSE;
-  eoinfo.finfo = &finfo;
+  eoinfo.flinfo = &flinfo;
   eoinfo.localsyms = TRUE;
+  eoinfo.need_second_pass = FALSE;
+  eoinfo.second_pass = FALSE;
   bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo);
   if (eoinfo.failed)
     return FALSE;
 
+  if (flinfo.filesym_count == 1
+      && !elf_link_output_sym (&flinfo, NULL, &elfsym,
+			       bfd_und_section_ptr, NULL))
+    return FALSE;
+
+  if (eoinfo.need_second_pass)
+    {
+      eoinfo.second_pass = TRUE;
+      bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo);
+      if (eoinfo.failed)
+	return FALSE;
+    }
+
   /* If backend needs to output some local symbols not present in the hash
      table, do it now.  */
   if (bed->elf_backend_output_arch_local_syms)
@@ -10825,7 +10959,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
 	 struct elf_link_hash_entry *);
 
       if (! ((*bed->elf_backend_output_arch_local_syms)
-	     (abfd, info, &finfo, (out_sym_func) elf_link_output_sym)))
+	     (abfd, info, &flinfo, (out_sym_func) elf_link_output_sym)))
 	return FALSE;
     }
 
@@ -10838,10 +10972,11 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
   symtab_hdr->sh_info = bfd_get_symcount (abfd);
 
   if (dynamic
-      && finfo.dynsym_sec->output_section != bfd_abs_section_ptr)
+      && flinfo.dynsym_sec != NULL
+      && flinfo.dynsym_sec->output_section != bfd_abs_section_ptr)
     {
       Elf_Internal_Sym sym;
-      bfd_byte *dynsym = finfo.dynsym_sec->contents;
+      bfd_byte *dynsym = flinfo.dynsym_sec->contents;
       long last_local = 0;
 
       /* Write out the section symbols for the output sections.  */
@@ -10913,14 +11048,14 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
 	    }
 	}
 
-      elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info =
+      elf_section_data (flinfo.dynsym_sec->output_section)->this_hdr.sh_info =
 	last_local + 1;
     }
 
   /* We get the global symbols from the hash table.  */
   eoinfo.failed = FALSE;
   eoinfo.localsyms = FALSE;
-  eoinfo.finfo = &finfo;
+  eoinfo.flinfo = &flinfo;
   bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo);
   if (eoinfo.failed)
     return FALSE;
@@ -10934,12 +11069,12 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
 	 struct elf_link_hash_entry *);
 
       if (! ((*bed->elf_backend_output_arch_syms)
-	     (abfd, info, &finfo, (out_sym_func) elf_link_output_sym)))
+	     (abfd, info, &flinfo, (out_sym_func) elf_link_output_sym)))
 	return FALSE;
     }
 
   /* Flush all symbols to the file.  */
-  if (! elf_link_flush_output_syms (&finfo, bed))
+  if (! elf_link_flush_output_syms (&flinfo, bed))
     return FALSE;
 
   /* Now we know the size of the symtab section.  */
@@ -10958,7 +11093,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
 						       off, TRUE);
 
       if (bfd_seek (abfd, symtab_shndx_hdr->sh_offset, SEEK_SET) != 0
-	  || (bfd_bwrite (finfo.symshndxbuf, amt, abfd) != amt))
+	  || (bfd_bwrite (flinfo.symshndxbuf, amt, abfd) != amt))
 	return FALSE;
     }
 
@@ -10970,7 +11105,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
   symstrtab_hdr->sh_type = SHT_STRTAB;
   symstrtab_hdr->sh_flags = 0;
   symstrtab_hdr->sh_addr = 0;
-  symstrtab_hdr->sh_size = _bfd_stringtab_size (finfo.symstrtab);
+  symstrtab_hdr->sh_size = _bfd_stringtab_size (flinfo.symstrtab);
   symstrtab_hdr->sh_entsize = 0;
   symstrtab_hdr->sh_link = 0;
   symstrtab_hdr->sh_info = 0;
@@ -10983,7 +11118,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
   if (bfd_get_symcount (abfd) > 0)
     {
       if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
-	  || ! _bfd_stringtab_emit (abfd, finfo.symstrtab))
+	  || ! _bfd_stringtab_emit (abfd, flinfo.symstrtab))
 	return FALSE;
     }
 
@@ -11014,7 +11149,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
       bfd_byte *dyncon, *dynconend;
 
       /* Fix up .dynamic entries.  */
-      o = bfd_get_section_by_name (dynobj, ".dynamic");
+      o = bfd_get_linker_section (dynobj, ".dynamic");
       BFD_ASSERT (o != NULL);
 
       dyncon = o->contents;
@@ -11190,7 +11325,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
       /* Check for DT_TEXTREL (late, in case the backend removes it).  */
       if (((info->warn_shared_textrel && info->shared)
 	   || info->error_textrel)
-	  && (o = bfd_get_section_by_name (dynobj, ".dynamic")) != NULL)
+	  && (o = bfd_get_linker_section (dynobj, ".dynamic")) != NULL)
 	{
 	  bfd_byte *dyncon, *dynconend;
 
@@ -11231,9 +11366,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
 	    continue;
 	  if (elf_hash_table (info)->eh_info.hdr_sec == o)
 	    continue;
-	  if ((elf_section_data (o->output_section)->this_hdr.sh_type
-	       != SHT_STRTAB)
-	      && (strcmp (bfd_get_section_name (abfd, o), ".dynstr") != 0))
+	  if (strcmp (o->name, ".dynstr") != 0)
 	    {
 	      /* FIXME: octets_per_byte.  */
 	      if (! bfd_set_section_contents (abfd, o->output_section,
@@ -11277,28 +11410,28 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
 	goto error_return;
     }
 
-  if (finfo.symstrtab != NULL)
-    _bfd_stringtab_free (finfo.symstrtab);
-  if (finfo.contents != NULL)
-    free (finfo.contents);
-  if (finfo.external_relocs != NULL)
-    free (finfo.external_relocs);
-  if (finfo.internal_relocs != NULL)
-    free (finfo.internal_relocs);
-  if (finfo.external_syms != NULL)
-    free (finfo.external_syms);
-  if (finfo.locsym_shndx != NULL)
-    free (finfo.locsym_shndx);
-  if (finfo.internal_syms != NULL)
-    free (finfo.internal_syms);
-  if (finfo.indices != NULL)
-    free (finfo.indices);
-  if (finfo.sections != NULL)
-    free (finfo.sections);
-  if (finfo.symbuf != NULL)
-    free (finfo.symbuf);
-  if (finfo.symshndxbuf != NULL)
-    free (finfo.symshndxbuf);
+  if (flinfo.symstrtab != NULL)
+    _bfd_stringtab_free (flinfo.symstrtab);
+  if (flinfo.contents != NULL)
+    free (flinfo.contents);
+  if (flinfo.external_relocs != NULL)
+    free (flinfo.external_relocs);
+  if (flinfo.internal_relocs != NULL)
+    free (flinfo.internal_relocs);
+  if (flinfo.external_syms != NULL)
+    free (flinfo.external_syms);
+  if (flinfo.locsym_shndx != NULL)
+    free (flinfo.locsym_shndx);
+  if (flinfo.internal_syms != NULL)
+    free (flinfo.internal_syms);
+  if (flinfo.indices != NULL)
+    free (flinfo.indices);
+  if (flinfo.sections != NULL)
+    free (flinfo.sections);
+  if (flinfo.symbuf != NULL)
+    free (flinfo.symbuf);
+  if (flinfo.symshndxbuf != NULL)
+    free (flinfo.symshndxbuf);
   for (o = abfd->sections; o != NULL; o = o->next)
     {
       struct bfd_elf_section_data *esdo = elf_section_data (o);
@@ -11323,28 +11456,28 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
   return TRUE;
 
  error_return:
-  if (finfo.symstrtab != NULL)
-    _bfd_stringtab_free (finfo.symstrtab);
-  if (finfo.contents != NULL)
-    free (finfo.contents);
-  if (finfo.external_relocs != NULL)
-    free (finfo.external_relocs);
-  if (finfo.internal_relocs != NULL)
-    free (finfo.internal_relocs);
-  if (finfo.external_syms != NULL)
-    free (finfo.external_syms);
-  if (finfo.locsym_shndx != NULL)
-    free (finfo.locsym_shndx);
-  if (finfo.internal_syms != NULL)
-    free (finfo.internal_syms);
-  if (finfo.indices != NULL)
-    free (finfo.indices);
-  if (finfo.sections != NULL)
-    free (finfo.sections);
-  if (finfo.symbuf != NULL)
-    free (finfo.symbuf);
-  if (finfo.symshndxbuf != NULL)
-    free (finfo.symshndxbuf);
+  if (flinfo.symstrtab != NULL)
+    _bfd_stringtab_free (flinfo.symstrtab);
+  if (flinfo.contents != NULL)
+    free (flinfo.contents);
+  if (flinfo.external_relocs != NULL)
+    free (flinfo.external_relocs);
+  if (flinfo.internal_relocs != NULL)
+    free (flinfo.internal_relocs);
+  if (flinfo.external_syms != NULL)
+    free (flinfo.external_syms);
+  if (flinfo.locsym_shndx != NULL)
+    free (flinfo.locsym_shndx);
+  if (flinfo.internal_syms != NULL)
+    free (flinfo.internal_syms);
+  if (flinfo.indices != NULL)
+    free (flinfo.indices);
+  if (flinfo.sections != NULL)
+    free (flinfo.sections);
+  if (flinfo.symbuf != NULL)
+    free (flinfo.symbuf);
+  if (flinfo.symshndxbuf != NULL)
+    free (flinfo.symshndxbuf);
   for (o = abfd->sections; o != NULL; o = o->next)
     {
       struct bfd_elf_section_data *esdo = elf_section_data (o);
@@ -11575,6 +11708,12 @@ _bfd_elf_gc_mark_rsec (struct bfd_link_info *info, asection *sec,
 	     || h->root.type == bfd_link_hash_warning)
 	h = (struct elf_link_hash_entry *) h->root.u.i.link;
       h->mark = 1;
+      /* If this symbol is weak and there is a non-weak definition, we
+	 keep the non-weak definition because many backends put
+	 dynamic reloc info on the non-weak definition for code
+	 handling copy relocs.  */
+      if (h->u.weakdef != NULL)
+	h->u.weakdef->mark = 1;
       return (*gc_mark_hook) (sec, info, cookie->rel, h, NULL);
     }
 
@@ -11597,7 +11736,8 @@ _bfd_elf_gc_mark_reloc (struct bfd_link_info *info,
   rsec = _bfd_elf_gc_mark_rsec (info, sec, gc_mark_hook, cookie);
   if (rsec && !rsec->gc_mark)
     {
-      if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour)
+      if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour
+	  || (rsec->owner->flags & DYNAMIC) != 0)
 	rsec->gc_mark = 1;
       else if (!_bfd_elf_gc_mark (info, rsec, gc_mark_hook))
 	return FALSE;
@@ -12008,12 +12148,14 @@ bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
       struct elf_reloc_cookie cookie;
 
       sec = bfd_get_section_by_name (sub, ".eh_frame");
-      if (sec && init_reloc_cookie_for_section (&cookie, info, sec))
+      while (sec && init_reloc_cookie_for_section (&cookie, info, sec))
 	{
 	  _bfd_elf_parse_eh_frame (sub, info, sec, &cookie);
-	  if (elf_section_data (sec)->sec_info)
+	  if (elf_section_data (sec)->sec_info
+	      && (sec->flags & SEC_LINKER_CREATED) == 0)
 	    elf_eh_frame_section (sub) = sec;
 	  fini_reloc_cookie_for_section (&cookie, sec);
+	  sec = bfd_get_next_section_by_name (sec);
 	}
     }
   _bfd_elf_end_eh_frame_parsing (info);
@@ -12229,58 +12371,73 @@ static elf_flags_to_name_table elf_flags_to_names [] =
   { "SHF_EXCLUDE", SHF_EXCLUDE },
 };
 
-void
+/* Returns TRUE if the section is to be included, otherwise FALSE.  */
+bfd_boolean
 bfd_elf_lookup_section_flags (struct bfd_link_info *info,
-			      struct flag_info *finfo)
+			      struct flag_info *flaginfo,
+			      asection *section)
 {
-  bfd *output_bfd = info->output_bfd;
-  const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
-  struct flag_info_list *tf = finfo->flag_list;
-  int with_hex = 0;
-  int without_hex = 0;
+  const bfd_vma sh_flags = elf_section_flags (section);
 
-  for (tf = finfo->flag_list; tf != NULL; tf = tf->next)
+  if (!flaginfo->flags_initialized)
     {
-      int i;
-      if (bed->elf_backend_lookup_section_flags_hook)
+      bfd *obfd = info->output_bfd;
+      const struct elf_backend_data *bed = get_elf_backend_data (obfd);
+      struct flag_info_list *tf = flaginfo->flag_list;
+      int with_hex = 0;
+      int without_hex = 0;
+
+      for (tf = flaginfo->flag_list; tf != NULL; tf = tf->next)
 	{
-	  flagword hexval =
-	     (*bed->elf_backend_lookup_section_flags_hook) ((char *) tf->name);
+	  unsigned i;
+	  flagword (*lookup) (char *);
 
-	  if (hexval != 0)
+	  lookup = bed->elf_backend_lookup_section_flags_hook;
+	  if (lookup != NULL)
 	    {
-	      if (tf->with == with_flags)
-		with_hex |= hexval;
-	      else if (tf->with == without_flags)
-		without_hex |= hexval;
-	      tf->valid = TRUE;
-	      continue;
+	      flagword hexval = (*lookup) ((char *) tf->name);
+
+	      if (hexval != 0)
+		{
+		  if (tf->with == with_flags)
+		    with_hex |= hexval;
+		  else if (tf->with == without_flags)
+		    without_hex |= hexval;
+		  tf->valid = TRUE;
+		  continue;
+		}
 	    }
-	}
-      for (i = 0; i < 12; i++)
-	{
-	  if (!strcmp (tf->name, elf_flags_to_names[i].flag_name))
+	  for (i = 0; i < ARRAY_SIZE (elf_flags_to_names); ++i)
 	    {
-	      if (tf->with == with_flags)
-		with_hex |= elf_flags_to_names[i].flag_value;
-	      else if (tf->with == without_flags)
-		without_hex |= elf_flags_to_names[i].flag_value;
-	      tf->valid = TRUE;
-	      continue;
+	      if (strcmp (tf->name, elf_flags_to_names[i].flag_name) == 0)
+		{
+		  if (tf->with == with_flags)
+		    with_hex |= elf_flags_to_names[i].flag_value;
+		  else if (tf->with == without_flags)
+		    without_hex |= elf_flags_to_names[i].flag_value;
+		  tf->valid = TRUE;
+		  break;
+		}
 	    }
-	}
-      if (tf->valid == FALSE)
-	{
-	  info->callbacks->einfo 
+	  if (!tf->valid)
+	    {
+	      info->callbacks->einfo 
 		(_("Unrecognized INPUT_SECTION_FLAG %s\n"), tf->name);
-	  return;
+	      return FALSE;
+	    }
 	}
+      flaginfo->flags_initialized = TRUE;
+      flaginfo->only_with_flags |= with_hex;
+      flaginfo->not_with_flags |= without_hex;
     }
- finfo->flags_initialized = TRUE;
- finfo->only_with_flags |= with_hex;
- finfo->not_with_flags |= without_hex;
 
- return;
+  if ((flaginfo->only_with_flags & sh_flags) != flaginfo->only_with_flags)
+    return FALSE;
+
+  if ((flaginfo->not_with_flags & sh_flags) != 0)
+    return FALSE;
+
+  return TRUE;
 }
 
 struct alloc_got_off_arg {
@@ -12423,7 +12580,7 @@ bfd_elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie)
 
 	  if ((h->root.type == bfd_link_hash_defined
 	       || h->root.type == bfd_link_hash_defweak)
-	      && elf_discarded_section (h->root.u.def.section))
+	      && discarded_section (h->root.u.def.section))
 	    return TRUE;
 	  else
 	    return FALSE;
@@ -12439,7 +12596,7 @@ bfd_elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie)
 	  /* Need to: get the symbol; get the section.  */
 	  isym = &rcookie->locsyms[r_symndx];
 	  isec = bfd_section_from_elf_index (rcookie->abfd, isym->st_shndx);
-	  if (isec != NULL && elf_discarded_section (isec))
+	  if (isec != NULL && discarded_section (isec))
 	    return TRUE;
 	}
       return FALSE;
@@ -12473,24 +12630,21 @@ bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
 
       bed = get_elf_backend_data (abfd);
 
-      if ((abfd->flags & DYNAMIC) != 0)
-	continue;
-
       eh = NULL;
       if (!info->relocatable)
 	{
 	  eh = bfd_get_section_by_name (abfd, ".eh_frame");
-	  if (eh != NULL
-	      && (eh->size == 0
-		  || bfd_is_abs_section (eh->output_section)))
-	    eh = NULL;
+	  while (eh != NULL
+		 && (eh->size == 0
+		     || bfd_is_abs_section (eh->output_section)))
+	    eh = bfd_get_next_section_by_name (eh);
 	}
 
       stab = bfd_get_section_by_name (abfd, ".stab");
       if (stab != NULL
 	  && (stab->size == 0
 	      || bfd_is_abs_section (stab->output_section)
-	      || stab->sec_info_type != ELF_INFO_TYPE_STABS))
+	      || stab->sec_info_type != SEC_INFO_TYPE_STABS))
 	stab = NULL;
 
       if (stab == NULL
@@ -12513,8 +12667,8 @@ bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
 	  fini_reloc_cookie_rels (&cookie, stab);
 	}
 
-      if (eh != NULL
-	  && init_reloc_cookie_rels (&cookie, info, abfd, eh))
+      while (eh != NULL
+	     && init_reloc_cookie_rels (&cookie, info, abfd, eh))
 	{
 	  _bfd_elf_parse_eh_frame (abfd, info, eh, &cookie);
 	  if (_bfd_elf_discard_section_eh_frame (abfd, info, eh,
@@ -12522,6 +12676,7 @@ bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
 						 &cookie))
 	    ret = TRUE;
 	  fini_reloc_cookie_rels (&cookie, eh);
+	  eh = bfd_get_next_section_by_name (eh);
 	}
 
       if (bed->elf_backend_discard_info != NULL
@@ -12757,7 +12912,7 @@ _bfd_elf_get_dynamic_reloc_section (bfd *       abfd,
 
       if (name != NULL)
 	{
-	  reloc_sec = bfd_get_section_by_name (abfd, name);
+	  reloc_sec = bfd_get_linker_section (abfd, name);
 
 	  if (reloc_sec != NULL)
 	    elf_section_data (sec)->sreloc = reloc_sec;
@@ -12793,17 +12948,16 @@ _bfd_elf_make_dynamic_reloc_section (asection *         sec,
       if (name == NULL)
 	return NULL;
 
-      reloc_sec = bfd_get_section_by_name (dynobj, name);
+      reloc_sec = bfd_get_linker_section (dynobj, name);
 
       if (reloc_sec == NULL)
 	{
-	  flagword flags;
-
-	  flags = (SEC_HAS_CONTENTS | SEC_READONLY | SEC_IN_MEMORY | SEC_LINKER_CREATED);
+	  flagword flags = (SEC_HAS_CONTENTS | SEC_READONLY
+			    | SEC_IN_MEMORY | SEC_LINKER_CREATED);
 	  if ((sec->flags & SEC_ALLOC) != 0)
 	    flags |= SEC_ALLOC | SEC_LOAD;
 
-	  reloc_sec = bfd_make_section_with_flags (dynobj, name, flags);
+	  reloc_sec = bfd_make_section_anyway_with_flags (dynobj, name, flags);
 	  if (reloc_sec != NULL)
 	    {
 	      if (! bfd_set_section_alignment (dynobj, reloc_sec, alignment))
diff --git a/bfd/elfn32-mips.c b/bfd/elfn32-mips.c
index 7a08dc8..6728371 100644
--- a/bfd/elfn32-mips.c
+++ b/bfd/elfn32-mips.c
@@ -1555,6 +1555,111 @@ static reloc_howto_type elf_mips16_howto_table_rel[] =
 	 0x0000ffff,		/* src_mask */
 	 0x0000ffff,		/* dst_mask */
 	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS general dynamic variable reference.  */
+  HOWTO (R_MIPS16_TLS_GD,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_GD",	/* name */
+	 TRUE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS local dynamic variable reference.  */
+  HOWTO (R_MIPS16_TLS_LDM,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_LDM",	/* name */
+	 TRUE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS local dynamic offset.  */
+  HOWTO (R_MIPS16_TLS_DTPREL_HI16,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_DTPREL_HI16",	/* name */
+	 TRUE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS local dynamic offset.  */
+  HOWTO (R_MIPS16_TLS_DTPREL_LO16,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_DTPREL_LO16",	/* name */
+	 TRUE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS thread pointer offset.  */
+  HOWTO (R_MIPS16_TLS_GOTTPREL,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_GOTTPREL",	/* name */
+	 TRUE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS thread pointer offset.  */
+  HOWTO (R_MIPS16_TLS_TPREL_HI16,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_TPREL_HI16", /* name */
+	 TRUE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS thread pointer offset.  */
+  HOWTO (R_MIPS16_TLS_TPREL_LO16,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_TPREL_LO16", /* name */
+	 TRUE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
 };
 
 static reloc_howto_type elf_mips16_howto_table_rela[] =
@@ -1651,6 +1756,111 @@ static reloc_howto_type elf_mips16_howto_table_rela[] =
 	 0,			/* src_mask */
 	 0x0000ffff,		/* dst_mask */
 	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS general dynamic variable reference.  */
+  HOWTO (R_MIPS16_TLS_GD,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_GD",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS local dynamic variable reference.  */
+  HOWTO (R_MIPS16_TLS_LDM,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_LDM",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS local dynamic offset.  */
+  HOWTO (R_MIPS16_TLS_DTPREL_HI16,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_DTPREL_HI16",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS local dynamic offset.  */
+  HOWTO (R_MIPS16_TLS_DTPREL_LO16,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_DTPREL_LO16",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS thread pointer offset.  */
+  HOWTO (R_MIPS16_TLS_GOTTPREL,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_GOTTPREL",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS thread pointer offset.  */
+  HOWTO (R_MIPS16_TLS_TPREL_HI16,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_TPREL_HI16", /* name */
+	 FALSE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
+
+  /* MIPS16 TLS thread pointer offset.  */
+  HOWTO (R_MIPS16_TLS_TPREL_LO16,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 16,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed, /* complain_on_overflow */
+	 _bfd_mips_elf_generic_reloc, /* special_function */
+	 "R_MIPS16_TLS_TPREL_LO16", /* name */
+	 FALSE,			/* partial_inplace */
+	 0x0000ffff,		/* src_mask */
+	 0x0000ffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
 };
 
 static reloc_howto_type elf_micromips_howto_table_rel[] =
@@ -2724,6 +2934,15 @@ static const struct elf_reloc_map mips16_reloc_map[] =
   { BFD_RELOC_MIPS16_CALL16, R_MIPS16_CALL16 - R_MIPS16_min },
   { BFD_RELOC_MIPS16_HI16_S, R_MIPS16_HI16 - R_MIPS16_min },
   { BFD_RELOC_MIPS16_LO16, R_MIPS16_LO16 - R_MIPS16_min },
+  { BFD_RELOC_MIPS16_TLS_GD, R_MIPS16_TLS_GD - R_MIPS16_min },
+  { BFD_RELOC_MIPS16_TLS_LDM, R_MIPS16_TLS_LDM - R_MIPS16_min },
+  { BFD_RELOC_MIPS16_TLS_DTPREL_HI16,
+    R_MIPS16_TLS_DTPREL_HI16 - R_MIPS16_min },
+  { BFD_RELOC_MIPS16_TLS_DTPREL_LO16,
+    R_MIPS16_TLS_DTPREL_LO16 - R_MIPS16_min },
+  { BFD_RELOC_MIPS16_TLS_GOTTPREL, R_MIPS16_TLS_GOTTPREL - R_MIPS16_min },
+  { BFD_RELOC_MIPS16_TLS_TPREL_HI16, R_MIPS16_TLS_TPREL_HI16 - R_MIPS16_min },
+  { BFD_RELOC_MIPS16_TLS_TPREL_LO16, R_MIPS16_TLS_TPREL_LO16 - R_MIPS16_min }
 };
 
 static const struct elf_reloc_map micromips_reloc_map[] =
diff --git a/bfd/elfnn-ia64.c b/bfd/elfnn-ia64.c
index 3e2ee0b..7021ff5 100644
--- a/bfd/elfnn-ia64.c
+++ b/bfd/elfnn-ia64.c
@@ -1,6 +1,6 @@
 /* IA-64 support for 64-bit ELF
    Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
-   2008, 2009, 2010, 2011  Free Software Foundation, Inc.
+   2008, 2009, 2010, 2011, 2012  Free Software Foundation, Inc.
    Contributed by David Mosberger-Tang <davidm at hpl.hp.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -41,14 +41,6 @@
 #define	LOG_SECTION_ALIGN	2
 #endif
 
-/* Only add code for vms when the vms target is enabled.  This is required
-   because it depends on vms-lib.c for its archive format and we don't want
-   to compile that code if it is not used.  */
-#if ARCH_SIZE == 64 && \
-  (defined (HAVE_bfd_elf64_ia64_vms_vec) || defined (HAVE_all_vecs))
-#define INCLUDE_IA64_VMS
-#endif
-
 typedef struct bfd_hash_entry *(*new_hash_entry_func)
   (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
 
@@ -186,18 +178,18 @@ static bfd_boolean elfNN_ia64_choose_gp
   (bfd *abfd, struct bfd_link_info *info, bfd_boolean final);
 static void elfNN_ia64_dyn_sym_traverse
   (struct elfNN_ia64_link_hash_table *ia64_info,
-   bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, PTR),
-   PTR info);
+   bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, void *),
+   void * info);
 static bfd_boolean allocate_global_data_got
-  (struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data);
+  (struct elfNN_ia64_dyn_sym_info *dyn_i, void * data);
 static bfd_boolean allocate_global_fptr_got
-  (struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data);
+  (struct elfNN_ia64_dyn_sym_info *dyn_i, void * data);
 static bfd_boolean allocate_local_got
-  (struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data);
+  (struct elfNN_ia64_dyn_sym_info *dyn_i, void * data);
 static bfd_boolean elfNN_ia64_hpux_vec
   (const bfd_target *vec);
 static bfd_boolean allocate_dynrel_entries
-  (struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data);
+  (struct elfNN_ia64_dyn_sym_info *dyn_i, void * data);
 static asection *get_pltoff
   (bfd *abfd, struct bfd_link_info *info,
    struct elfNN_ia64_link_hash_table *ia64_info);
@@ -530,7 +522,7 @@ elfNN_ia64_relax_section (bfd *abfd, asection *sec,
 	  symtype = h->type;
 	}
 
-      if (tsec->sec_info_type == ELF_INFO_TYPE_MERGE)
+      if (tsec->sec_info_type == SEC_INFO_TYPE_MERGE)
 	{
 	  /* At this stage in linking, no SEC_MERGE symbol has been
 	     adjusted, so all references to such symbols need to be
@@ -1416,7 +1408,7 @@ elfNN_ia64_hash_table_create (bfd *abfd)
 
 static bfd_boolean
 elfNN_ia64_global_dyn_info_free (void **xentry,
-				PTR unused ATTRIBUTE_UNUSED)
+				 void * unused ATTRIBUTE_UNUSED)
 {
   struct elfNN_ia64_link_hash_entry *entry
     = (struct elfNN_ia64_link_hash_entry *) xentry;
@@ -1437,7 +1429,7 @@ elfNN_ia64_global_dyn_info_free (void **xentry,
 
 static bfd_boolean
 elfNN_ia64_local_dyn_info_free (void **slot,
-				PTR unused ATTRIBUTE_UNUSED)
+				void * unused ATTRIBUTE_UNUSED)
 {
   struct elfNN_ia64_local_hash_entry *entry
     = (struct elfNN_ia64_local_hash_entry *) *slot;
@@ -1478,13 +1470,13 @@ elfNN_ia64_hash_table_free (struct bfd_link_hash_table *hash)
 
 struct elfNN_ia64_dyn_sym_traverse_data
 {
-  bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, PTR);
-  PTR data;
+  bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, void *);
+  void * data;
 };
 
 static bfd_boolean
 elfNN_ia64_global_dyn_sym_thunk (struct bfd_hash_entry *xentry,
-				 PTR xdata)
+				 void * xdata)
 {
   struct elfNN_ia64_link_hash_entry *entry
     = (struct elfNN_ia64_link_hash_entry *) xentry;
@@ -1502,7 +1494,7 @@ elfNN_ia64_global_dyn_sym_thunk (struct bfd_hash_entry *xentry,
 }
 
 static bfd_boolean
-elfNN_ia64_local_dyn_sym_thunk (void **slot, PTR xdata)
+elfNN_ia64_local_dyn_sym_thunk (void **slot, void * xdata)
 {
   struct elfNN_ia64_local_hash_entry *entry
     = (struct elfNN_ia64_local_hash_entry *) *slot;
@@ -1521,8 +1513,8 @@ elfNN_ia64_local_dyn_sym_thunk (void **slot, PTR xdata)
 
 static void
 elfNN_ia64_dyn_sym_traverse (struct elfNN_ia64_link_hash_table *ia64_info,
-			     bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, PTR),
-			     PTR data)
+			     bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, void *),
+			     void * data)
 {
   struct elfNN_ia64_dyn_sym_traverse_data xdata;
 
@@ -1560,12 +1552,12 @@ elfNN_ia64_create_dynamic_sections (bfd *abfd,
   if (!get_pltoff (abfd, info, ia64_info))
     return FALSE;
 
-  s = bfd_make_section_with_flags (abfd, ".rela.IA_64.pltoff",
-				   (SEC_ALLOC | SEC_LOAD
-				    | SEC_HAS_CONTENTS
-				    | SEC_IN_MEMORY
-				    | SEC_LINKER_CREATED
-				    | SEC_READONLY));
+  s = bfd_make_section_anyway_with_flags (abfd, ".rela.IA_64.pltoff",
+					  (SEC_ALLOC | SEC_LOAD
+					   | SEC_HAS_CONTENTS
+					   | SEC_IN_MEMORY
+					   | SEC_LINKER_CREATED
+					   | SEC_READONLY));
   if (s == NULL
       || !bfd_set_section_alignment (abfd, s, LOG_SECTION_ALIGN))
     return FALSE;
@@ -1994,13 +1986,14 @@ get_fptr (bfd *abfd, struct bfd_link_info *info,
       if (!dynobj)
 	ia64_info->root.dynobj = dynobj = abfd;
 
-      fptr = bfd_make_section_with_flags (dynobj, ".opd",
-					  (SEC_ALLOC
-					   | SEC_LOAD
-					   | SEC_HAS_CONTENTS
-					   | SEC_IN_MEMORY
-					   | (info->pie ? 0 : SEC_READONLY)
-					   | SEC_LINKER_CREATED));
+      fptr = bfd_make_section_anyway_with_flags (dynobj, ".opd",
+						 (SEC_ALLOC
+						  | SEC_LOAD
+						  | SEC_HAS_CONTENTS
+						  | SEC_IN_MEMORY
+						  | (info->pie ? 0
+						     : SEC_READONLY)
+						  | SEC_LINKER_CREATED));
       if (!fptr
 	  || !bfd_set_section_alignment (abfd, fptr, 4))
 	{
@@ -2013,12 +2006,12 @@ get_fptr (bfd *abfd, struct bfd_link_info *info,
       if (info->pie)
 	{
 	  asection *fptr_rel;
-	  fptr_rel = bfd_make_section_with_flags (dynobj, ".rela.opd",
-						  (SEC_ALLOC | SEC_LOAD
-						   | SEC_HAS_CONTENTS
-						   | SEC_IN_MEMORY
-						   | SEC_LINKER_CREATED
-						   | SEC_READONLY));
+	  fptr_rel = bfd_make_section_anyway_with_flags (dynobj, ".rela.opd",
+							 (SEC_ALLOC | SEC_LOAD
+							  | SEC_HAS_CONTENTS
+							  | SEC_IN_MEMORY
+							  | SEC_LINKER_CREATED
+							  | SEC_READONLY));
 	  if (fptr_rel == NULL
 	      || !bfd_set_section_alignment (abfd, fptr_rel,
 					     LOG_SECTION_ALIGN))
@@ -2048,14 +2041,14 @@ get_pltoff (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED,
       if (!dynobj)
 	ia64_info->root.dynobj = dynobj = abfd;
 
-      pltoff = bfd_make_section_with_flags (dynobj,
-					    ELF_STRING_ia64_pltoff,
-					    (SEC_ALLOC
-					     | SEC_LOAD
-					     | SEC_HAS_CONTENTS
-					     | SEC_IN_MEMORY
-					     | SEC_SMALL_DATA
-					     | SEC_LINKER_CREATED));
+      pltoff = bfd_make_section_anyway_with_flags (dynobj,
+						   ELF_STRING_ia64_pltoff,
+						   (SEC_ALLOC
+						    | SEC_LOAD
+						    | SEC_HAS_CONTENTS
+						    | SEC_IN_MEMORY
+						    | SEC_SMALL_DATA
+						    | SEC_LINKER_CREATED));
       if (!pltoff
 	  || !bfd_set_section_alignment (abfd, pltoff, 4))
 	{
@@ -2088,15 +2081,15 @@ get_reloc_section (bfd *abfd,
   if (!dynobj)
     ia64_info->root.dynobj = dynobj = abfd;
 
-  srel = bfd_get_section_by_name (dynobj, srel_name);
+  srel = bfd_get_linker_section (dynobj, srel_name);
   if (srel == NULL && create)
     {
-      srel = bfd_make_section_with_flags (dynobj, srel_name,
-					  (SEC_ALLOC | SEC_LOAD
-					   | SEC_HAS_CONTENTS
-					   | SEC_IN_MEMORY
-					   | SEC_LINKER_CREATED
-					   | SEC_READONLY));
+      srel = bfd_make_section_anyway_with_flags (dynobj, srel_name,
+						 (SEC_ALLOC | SEC_LOAD
+						  | SEC_HAS_CONTENTS
+						  | SEC_IN_MEMORY
+						  | SEC_LINKER_CREATED
+						  | SEC_READONLY));
       if (srel == NULL
 	  || !bfd_set_section_alignment (dynobj, srel,
 					 LOG_SECTION_ALIGN))
@@ -2666,7 +2659,7 @@ allocate_global_fptr_got (struct elfNN_ia64_dyn_sym_info *dyn_i,
 
 static bfd_boolean
 allocate_local_got (struct elfNN_ia64_dyn_sym_info *dyn_i,
-		    PTR data)
+		    void * data)
 {
   struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
 
@@ -2701,7 +2694,7 @@ global_sym_index (struct elf_link_hash_entry *h)
    in a main executable that is not exported.  */
 
 static bfd_boolean
-allocate_fptr (struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data)
+allocate_fptr (struct elfNN_ia64_dyn_sym_info *dyn_i, void * data)
 {
   struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
 
@@ -2748,7 +2741,7 @@ allocate_fptr (struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data)
 
 static bfd_boolean
 allocate_plt_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
-		      PTR data)
+		      void * data)
 {
   struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
 
@@ -2785,7 +2778,7 @@ allocate_plt_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
 
 static bfd_boolean
 allocate_plt2_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
-		       PTR data)
+		       void * data)
 {
   struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
 
@@ -2812,7 +2805,7 @@ allocate_plt2_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
 
 static bfd_boolean
 allocate_pltoff_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
-			 PTR data)
+			 void * data)
 {
   struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
 
@@ -2829,7 +2822,7 @@ allocate_pltoff_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
 
 static bfd_boolean
 allocate_dynrel_entries (struct elfNN_ia64_dyn_sym_info *dyn_i,
-			 PTR data)
+			 void * data)
 {
   struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data;
   struct elfNN_ia64_link_hash_table *ia64_info;
@@ -2996,7 +2989,7 @@ elfNN_ia64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
   if (ia64_info->root.dynamic_sections_created
       && info->executable)
     {
-      sec = bfd_get_section_by_name (dynobj, ".interp");
+      sec = bfd_get_linker_section (dynobj, ".interp");
       BFD_ASSERT (sec != NULL);
       sec->contents = (bfd_byte *) ELF_DYNAMIC_INTERPRETER;
       sec->size = strlen (ELF_DYNAMIC_INTERPRETER) + 1;
@@ -3053,7 +3046,7 @@ elfNN_ia64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
 
       /* If we've got a .plt, we need some extra memory for the dynamic
 	 linker.  We stuff these in .got.plt.  */
-      sec = bfd_get_section_by_name (dynobj, ".got.plt");
+      sec = bfd_get_linker_section (dynobj, ".got.plt");
       sec->size = 8 * PLT_RESERVED_WORDS;
     }
 
@@ -3544,7 +3537,7 @@ elfNN_ia64_dtprel_base (struct bfd_link_info *info)
 static bfd *elfNN_ia64_unwind_entry_compare_bfd;
 
 static int
-elfNN_ia64_unwind_entry_compare (const PTR a, const PTR b)
+elfNN_ia64_unwind_entry_compare (const void * a, const void * b)
 {
   bfd_vma av, bv;
 
@@ -3861,7 +3854,7 @@ elfNN_ia64_relocate_section (bfd *output_bfd,
 	  if (!info->relocatable
 	      && (sym_sec->flags & SEC_MERGE) != 0
 	      && ELF_ST_TYPE (sym->st_info) == STT_SECTION
-	      && sym_sec->sec_info_type == ELF_INFO_TYPE_MERGE)
+	      && sym_sec->sec_info_type == SEC_INFO_TYPE_MERGE)
 	    {
 	      struct elfNN_ia64_local_hash_entry *loc_h;
 
@@ -3919,9 +3912,9 @@ elfNN_ia64_relocate_section (bfd *output_bfd,
 	    continue;
 	}
 
-      if (sym_sec != NULL && elf_discarded_section (sym_sec))
+      if (sym_sec != NULL && discarded_section (sym_sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -4620,8 +4613,8 @@ elfNN_ia64_finish_dynamic_sections (bfd *abfd,
       asection *sdyn, *sgotplt;
       bfd_vma gp_val;
 
-      sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
-      sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
+      sdyn = bfd_get_linker_section (dynobj, ".dynamic");
+      sgotplt = bfd_get_linker_section (dynobj, ".got.plt");
       BFD_ASSERT (sdyn != NULL);
       dyncon = (ElfNN_External_Dyn *) sdyn->contents;
       dynconend = (ElfNN_External_Dyn *) (sdyn->contents + sdyn->size);
@@ -4793,7 +4786,7 @@ elfNN_ia64_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
 }
 
 static bfd_boolean
-elfNN_ia64_print_private_bfd_data (bfd *abfd, PTR ptr)
+elfNN_ia64_print_private_bfd_data (bfd *abfd, void * ptr)
 {
   FILE *file = (FILE *) ptr;
   flagword flags = elf_elfheader (abfd)->e_flags;
@@ -4978,268 +4971,6 @@ elfNN_hpux_backend_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED,
       break;
     }
 }
-
-#ifdef INCLUDE_IA64_VMS
-
-static bfd_boolean
-elfNN_vms_section_from_shdr (bfd *abfd,
-			     Elf_Internal_Shdr *hdr,
-			     const char *name,
-			     int shindex)
-{
-  switch (hdr->sh_type)
-    {
-    case SHT_IA_64_VMS_TRACE:
-    case SHT_IA_64_VMS_DEBUG:
-    case SHT_IA_64_VMS_DEBUG_STR:
-      break;
-
-    default:
-      return elfNN_ia64_section_from_shdr (abfd, hdr, name, shindex);
-    }
-
-  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
-    return FALSE;
-
-  return TRUE;
-}
-
-static bfd_boolean
-elfNN_vms_object_p (bfd *abfd)
-{
-  Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
-  Elf_Internal_Phdr *i_phdr = elf_tdata (abfd)->phdr;
-  unsigned int i;
-  unsigned int num_text = 0;
-  unsigned int num_data = 0;
-  unsigned int num_rodata = 0;
-  char name[16];
-
-  if (!elfNN_ia64_object_p (abfd))
-    return FALSE;
-
-  for (i = 0; i < i_ehdrp->e_phnum; i++, i_phdr++)
-    {
-      /* Is there a section for this segment?  */
-      bfd_vma base_vma = i_phdr->p_vaddr;
-      bfd_vma limit_vma = base_vma + i_phdr->p_filesz;
-
-      if (i_phdr->p_type != PT_LOAD)
-	continue;
-
-    again:
-      while (base_vma < limit_vma)
-	{
-	  bfd_vma next_vma = limit_vma;
-	  asection *nsec;
-	  asection *sec;
-	  flagword flags;
-	  char *nname = NULL;
-
-	  /* Find a section covering base_vma.  */
-	  for (sec = abfd->sections; sec != NULL; sec = sec->next)
-	    {
-	      if ((sec->flags & (SEC_ALLOC | SEC_LOAD)) == 0)
-		continue;
-	      if (sec->vma <= base_vma && sec->vma + sec->size > base_vma)
-		{
-		  base_vma = sec->vma + sec->size;
-		  goto again;
-		}
-	      if (sec->vma < next_vma && sec->vma + sec->size >= base_vma)
-		next_vma = sec->vma;
-	    }
-
-	  /* No section covering [base_vma; next_vma).  Create a fake one.  */
-	  flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS;
-	  if (i_phdr->p_flags & PF_X)
-	    {
-	      flags |= SEC_CODE;
-	      if (num_text++ == 0)
-		nname = ".text";
-	      else
-		sprintf (name, ".text$%u", num_text);
-	    }
-	  else if ((i_phdr->p_flags & (PF_R | PF_W)) == PF_R)
-	    {
-	      flags |= SEC_READONLY;
-	      sprintf (name, ".rodata$%u", num_rodata++);
-	    }
-	  else
-	    {
-	      flags |= SEC_DATA;
-	      sprintf (name, ".data$%u", num_data++);
-	    }
-
-	  /* Allocate name.  */
-	  if (nname == NULL)
-	    {
-	      size_t name_len = strlen (name) + 1;
-	      nname = bfd_alloc (abfd, name_len);
-	      if (nname == NULL)
-		return FALSE;
-	      memcpy (nname, name, name_len);
-	    }
-
-	  /* Create and fill new section.  */
-	  nsec = bfd_make_section_anyway_with_flags (abfd, nname, flags);
-	  if (nsec == NULL)
-	    return FALSE;
-	  nsec->vma = base_vma;
-	  nsec->size = next_vma - base_vma;
-	  nsec->filepos = i_phdr->p_offset + (base_vma - i_phdr->p_vaddr);
-
-	  base_vma = next_vma;
-	}
-    }
-  return TRUE;
-}
-
-static void
-elfNN_vms_post_process_headers (bfd *abfd,
-				struct bfd_link_info *info ATTRIBUTE_UNUSED)
-{
-  Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
-
-  i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_OPENVMS;
-  i_ehdrp->e_ident[EI_ABIVERSION] = 2;
-}
-
-static bfd_boolean
-elfNN_vms_section_processing (bfd *abfd ATTRIBUTE_UNUSED,
-			      Elf_Internal_Shdr *hdr)
-{
-  if (hdr->bfd_section != NULL)
-    {
-      const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
-
-      if (strcmp (name, ".text") == 0)
-	hdr->sh_flags |= SHF_IA_64_VMS_SHARED;
-      else if ((strcmp (name, ".debug") == 0)
-	    || (strcmp (name, ".debug_abbrev") == 0)
-	    || (strcmp (name, ".debug_aranges") == 0)
-	    || (strcmp (name, ".debug_frame") == 0)
-	    || (strcmp (name, ".debug_info") == 0)
-	    || (strcmp (name, ".debug_loc") == 0)
-	    || (strcmp (name, ".debug_macinfo") == 0)
-	    || (strcmp (name, ".debug_pubnames") == 0)
-	    || (strcmp (name, ".debug_pubtypes") == 0))
-	hdr->sh_type = SHT_IA_64_VMS_DEBUG;
-      else if ((strcmp (name, ".debug_line") == 0)
-	    || (strcmp (name, ".debug_ranges") == 0))
-	hdr->sh_type = SHT_IA_64_VMS_TRACE;
-      else if (strcmp (name, ".debug_str") == 0)
-	hdr->sh_type = SHT_IA_64_VMS_DEBUG_STR;
-      else if (strcmp (name, ".vms_display_name_info") == 0)
-	{
-	  int idx, symcount;
-	  asymbol **syms;
-	  struct elf_obj_tdata *t = elf_tdata (abfd);
-	  int buf[2];
-	  int demangler_sym_idx = -1;
-
-	  symcount = bfd_get_symcount (abfd);
-	  syms = bfd_get_outsymbols (abfd);
-	  for (idx = 0; idx < symcount; idx++)
-	    {
-	      asymbol *sym;
-	      sym = syms[idx];
-	      if ((sym->flags & (BSF_DEBUGGING | BSF_DYNAMIC))
-	          && strchr (sym->name, '@')
-		  && (strcmp (sym->section->name, BFD_ABS_SECTION_NAME) == 0))
-		{
-		  demangler_sym_idx = sym->udata.i;
-		  break;
-		}
-	    }
-
-	  hdr->sh_type = SHT_IA_64_VMS_DISPLAY_NAME_INFO;
-	  hdr->sh_entsize = 4;
-	  hdr->sh_addralign = 0;
-	  hdr->sh_link = t->symtab_section;
-
-	  /* Find symtab index of demangler routine and stuff it in
-	     the second long word of section data.  */
-
-	  if (demangler_sym_idx > -1)
-	    {
-	      bfd_seek (abfd, hdr->sh_offset, SEEK_SET);
-	      bfd_bread (buf, hdr->sh_size, abfd);
-	      buf [1] = demangler_sym_idx;
-	      bfd_seek (abfd, hdr->sh_offset, SEEK_SET);
-	      bfd_bwrite (buf, hdr->sh_size, abfd);
-	    }
-	}
-    }
-
-  return TRUE;
-}
-
-/* The final processing done just before writing out a VMS IA-64 ELF
-   object file.  */
-
-static void
-elfNN_vms_final_write_processing (bfd *abfd,
-				  bfd_boolean linker ATTRIBUTE_UNUSED)
-{
-  Elf_Internal_Shdr *hdr;
-  asection *s;
-  int unwind_info_sect_idx = 0;
-
-  for (s = abfd->sections; s; s = s->next)
-    {
-      hdr = &elf_section_data (s)->this_hdr;
-
-      if (strcmp (bfd_get_section_name (abfd, hdr->bfd_section),
-		  ".IA_64.unwind_info") == 0)
-	unwind_info_sect_idx = elf_section_data (s)->this_idx;
-
-      switch (hdr->sh_type)
-	{
-	case SHT_IA_64_UNWIND:
-	  /* VMS requires sh_info to point to the unwind info section.  */
-          hdr->sh_info = unwind_info_sect_idx;
-	  break;
-	}
-    }
-
-  if (! elf_flags_init (abfd))
-    {
-      unsigned long flags = 0;
-
-      if (abfd->xvec->byteorder == BFD_ENDIAN_BIG)
-	flags |= EF_IA_64_BE;
-      if (bfd_get_mach (abfd) == bfd_mach_ia64_elf64)
-	flags |= EF_IA_64_ABI64;
-
-      elf_elfheader(abfd)->e_flags = flags;
-      elf_flags_init (abfd) = TRUE;
-    }
-}
-
-static bfd_boolean
-elfNN_vms_close_and_cleanup (bfd *abfd)
-{
-  if (bfd_get_format (abfd) == bfd_object)
-    {
-      long isize, irsize;
-
-      if (elf_shstrtab (abfd) != NULL)
-	_bfd_elf_strtab_free (elf_shstrtab (abfd));
-
-      /* Pad to 8 byte boundary for IPF/VMS.  */
-      isize = bfd_get_size (abfd);
-      if ((irsize = isize/8*8) < isize)
-	{
-	  int ishort = (irsize + 8) - isize;
-	  bfd_seek (abfd, isize, SEEK_SET);
-	  bfd_bwrite (bfd_zmalloc (ishort), ishort, abfd);
-	}
-    }
-
-  return _bfd_generic_close_and_cleanup (abfd);
-}
-#endif /* INCLUDE_IA64_VMS */
 

 #define TARGET_LITTLE_SYM		bfd_elfNN_ia64_little_vec
 #define TARGET_LITTLE_NAME		"elfNN-ia64-little"
@@ -5372,86 +5103,3 @@ elfNN_vms_close_and_cleanup (bfd *abfd)
 #define elfNN_bed elfNN_ia64_hpux_bed
 
 #include "elfNN-target.h"
-
-/* VMS-specific vectors.  */
-#ifdef INCLUDE_IA64_VMS
-
-#undef  TARGET_LITTLE_SYM
-#define TARGET_LITTLE_SYM		bfd_elfNN_ia64_vms_vec
-#undef  TARGET_LITTLE_NAME
-#define TARGET_LITTLE_NAME		"elfNN-ia64-vms"
-#undef  TARGET_BIG_SYM
-#undef  TARGET_BIG_NAME
-
-/* These are VMS specific functions.  */
-
-#undef  elf_backend_object_p
-#define elf_backend_object_p elfNN_vms_object_p
-
-#undef  elf_backend_section_from_shdr
-#define elf_backend_section_from_shdr elfNN_vms_section_from_shdr
-
-#undef  elf_backend_post_process_headers
-#define elf_backend_post_process_headers elfNN_vms_post_process_headers
-
-#undef  elf_backend_section_processing
-#define elf_backend_section_processing elfNN_vms_section_processing
-
-#undef  elf_backend_final_write_processing
-#define elf_backend_final_write_processing elfNN_vms_final_write_processing
-
-#undef  bfd_elfNN_close_and_cleanup
-#define bfd_elfNN_close_and_cleanup elfNN_vms_close_and_cleanup
-
-#undef  elf_backend_section_from_bfd_section
-
-#undef  elf_backend_symbol_processing
-
-#undef  elf_backend_want_p_paddr_set_to_zero
-
-#undef ELF_OSABI
-#define ELF_OSABI			ELFOSABI_OPENVMS
-
-#undef  ELF_MAXPAGESIZE
-#define ELF_MAXPAGESIZE			0x10000	/* 64KB */
-
-#undef  elfNN_bed
-#define elfNN_bed elfNN_ia64_vms_bed
-
-/* Use VMS-style archives (in particular, don't use the standard coff
-   archive format).  */
-#define bfd_elfNN_archive_functions
-
-#undef bfd_elfNN_archive_p
-#define bfd_elfNN_archive_p _bfd_vms_lib_ia64_archive_p
-#undef bfd_elfNN_write_archive_contents
-#define bfd_elfNN_write_archive_contents _bfd_vms_lib_write_archive_contents
-#undef bfd_elfNN_mkarchive
-#define bfd_elfNN_mkarchive _bfd_vms_lib_ia64_mkarchive
-
-#define bfd_elfNN_archive_slurp_armap \
-  _bfd_vms_lib_slurp_armap
-#define bfd_elfNN_archive_slurp_extended_name_table \
-  _bfd_vms_lib_slurp_extended_name_table
-#define bfd_elfNN_archive_construct_extended_name_table \
-  _bfd_vms_lib_construct_extended_name_table
-#define bfd_elfNN_archive_truncate_arname \
-  _bfd_vms_lib_truncate_arname
-#define bfd_elfNN_archive_write_armap \
-  _bfd_vms_lib_write_armap
-#define bfd_elfNN_archive_read_ar_hdr \
-  _bfd_vms_lib_read_ar_hdr
-#define bfd_elfNN_archive_write_ar_hdr \
-  _bfd_vms_lib_write_ar_hdr
-#define bfd_elfNN_archive_openr_next_archived_file \
-  _bfd_vms_lib_openr_next_archived_file
-#define bfd_elfNN_archive_get_elt_at_index \
-  _bfd_vms_lib_get_elt_at_index
-#define bfd_elfNN_archive_generic_stat_arch_elt \
-  _bfd_vms_lib_generic_stat_arch_elt
-#define bfd_elfNN_archive_update_armap_timestamp \
-  _bfd_vms_lib_update_armap_timestamp
-
-#include "elfNN-target.h"
-
-#endif /* INCLUDE_IA64_VMS */
diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
index f493517..9478f16 100644
--- a/bfd/elfxx-mips.c
+++ b/bfd/elfxx-mips.c
@@ -1,6 +1,6 @@
 /* MIPS-specific support for ELF
    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    Most of the information added by Ian Lance Taylor, Cygnus Support,
@@ -529,6 +529,13 @@ struct mips_htab_traverse_info
    || r_type == R_MIPS_TLS_TPREL64		\
    || r_type == R_MIPS_TLS_TPREL_HI16		\
    || r_type == R_MIPS_TLS_TPREL_LO16		\
+   || r_type == R_MIPS16_TLS_GD			\
+   || r_type == R_MIPS16_TLS_LDM		\
+   || r_type == R_MIPS16_TLS_DTPREL_HI16	\
+   || r_type == R_MIPS16_TLS_DTPREL_LO16	\
+   || r_type == R_MIPS16_TLS_GOTTPREL		\
+   || r_type == R_MIPS16_TLS_TPREL_HI16		\
+   || r_type == R_MIPS16_TLS_TPREL_LO16		\
    || r_type == R_MICROMIPS_TLS_GD		\
    || r_type == R_MICROMIPS_TLS_LDM		\
    || r_type == R_MICROMIPS_TLS_DTPREL_HI16	\
@@ -1453,14 +1460,17 @@ section_allows_mips16_refs_p (asection *section)
    function, or 0 if we can't decide which function that is.  */
 
 static unsigned long
-mips16_stub_symndx (asection *sec ATTRIBUTE_UNUSED,
+mips16_stub_symndx (const struct elf_backend_data *bed,
+		    asection *sec ATTRIBUTE_UNUSED,
 		    const Elf_Internal_Rela *relocs,
 		    const Elf_Internal_Rela *relend)
 {
+  int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel;
   const Elf_Internal_Rela *rel;
 
-  /* Trust the first R_MIPS_NONE relocation, if any.  */
-  for (rel = relocs; rel < relend; rel++)
+  /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent
+     one in a compound relocation.  */
+  for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel)
     if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE)
       return ELF_R_SYM (sec->owner, rel->r_info);
 
@@ -1575,9 +1585,10 @@ _bfd_mips_elf_init_stubs (struct bfd_link_info *info,
 }
 
 /* Return true if H is a locally-defined PIC function, in the sense
-   that it might need $25 to be valid on entry.  Note that MIPS16
-   functions never need $25 to be valid on entry; they set up $gp
-   using PC-relative instructions instead.  */
+   that it or its fn_stub might need $25 to be valid on entry.
+   Note that MIPS16 functions set up $gp using PC-relative instructions,
+   so they themselves never need $25 to be valid.  Only non-MIPS16
+   entry points are of interest here.  */
 
 static bfd_boolean
 mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
@@ -1586,11 +1597,32 @@ mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
 	   || h->root.root.type == bfd_link_hash_defweak)
 	  && h->root.def_regular
 	  && !bfd_is_abs_section (h->root.root.u.def.section)
-	  && !ELF_ST_IS_MIPS16 (h->root.other)
+	  && (!ELF_ST_IS_MIPS16 (h->root.other)
+	      || (h->fn_stub && h->need_fn_stub))
 	  && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
 	      || ELF_ST_IS_MIPS_PIC (h->root.other)));
 }
 
+/* Set *SEC to the input section that contains the target of STUB.
+   Return the offset of the target from the start of that section.  */
+
+static bfd_vma
+mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
+			  asection **sec)
+{
+  if (ELF_ST_IS_MIPS16 (stub->h->root.other))
+    {
+      BFD_ASSERT (stub->h->need_fn_stub);
+      *sec = stub->h->fn_stub;
+      return 0;
+    }
+  else
+    {
+      *sec = stub->h->root.root.u.def.section;
+      return stub->h->root.root.u.def.value;
+    }
+}
+
 /* STUB describes an la25 stub that we have decided to implement
    by inserting an LUI/ADDIU pair before the target function.
    Create the section and redirect the function symbol to it.  */
@@ -1615,7 +1647,7 @@ mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
   sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
 
   /* Create the section.  */
-  input_section = stub->h->root.root.u.def.section;
+  mips_elf_get_la25_target (stub, &input_section);
   s = htab->add_stub_section (name, input_section,
 			      input_section->output_section);
   if (s == NULL)
@@ -1689,12 +1721,6 @@ mips_elf_add_la25_stub (struct bfd_link_info *info,
   bfd_vma value;
   void **slot;
 
-  /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
-     of the section and if we would need no more than 2 nops.  */
-  s = h->root.root.u.def.section;
-  value = h->root.root.u.def.value;
-  use_trampoline_p = (value != 0 || s->alignment_power > 4);
-
   /* Describe the stub we want.  */
   search.stub_section = NULL;
   search.offset = 0;
@@ -1724,6 +1750,11 @@ mips_elf_add_la25_stub (struct bfd_link_info *info,
   *stub = search;
   *slot = stub;
 
+  /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
+     of the section and if we would need no more than 2 nops.  */
+  value = mips_elf_get_la25_target (stub, &s);
+  use_trampoline_p = (value != 0 || s->alignment_power > 4);
+
   h->la25_stub = stub;
   return (use_trampoline_p
 	  ? mips_elf_add_la25_trampoline (stub, info)
@@ -1864,6 +1895,13 @@ mips16_reloc_p (int r_type)
     case R_MIPS16_CALL16:
     case R_MIPS16_HI16:
     case R_MIPS16_LO16:
+    case R_MIPS16_TLS_GD:
+    case R_MIPS16_TLS_LDM:
+    case R_MIPS16_TLS_DTPREL_HI16:
+    case R_MIPS16_TLS_DTPREL_LO16:
+    case R_MIPS16_TLS_GOTTPREL:
+    case R_MIPS16_TLS_TPREL_HI16:
+    case R_MIPS16_TLS_TPREL_LO16:
       return TRUE;
 
     default:
@@ -1991,19 +2029,25 @@ micromips_branch_reloc_p (int r_type)
 static inline bfd_boolean
 tls_gd_reloc_p (unsigned int r_type)
 {
-  return r_type == R_MIPS_TLS_GD || r_type == R_MICROMIPS_TLS_GD;
+  return (r_type == R_MIPS_TLS_GD
+	  || r_type == R_MIPS16_TLS_GD
+	  || r_type == R_MICROMIPS_TLS_GD);
 }
 
 static inline bfd_boolean
 tls_ldm_reloc_p (unsigned int r_type)
 {
-  return r_type == R_MIPS_TLS_LDM || r_type == R_MICROMIPS_TLS_LDM;
+  return (r_type == R_MIPS_TLS_LDM
+	  || r_type == R_MIPS16_TLS_LDM
+	  || r_type == R_MICROMIPS_TLS_LDM);
 }
 
 static inline bfd_boolean
 tls_gottprel_reloc_p (unsigned int r_type)
 {
-  return r_type == R_MIPS_TLS_GOTTPREL || r_type == R_MICROMIPS_TLS_GOTTPREL;
+  return (r_type == R_MIPS_TLS_GOTTPREL
+	  || r_type == R_MIPS16_TLS_GOTTPREL
+	  || r_type == R_MICROMIPS_TLS_GOTTPREL);
 }
 
 void
@@ -2816,16 +2860,16 @@ mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
 
   dname = MIPS_ELF_REL_DYN_NAME (info);
   dynobj = elf_hash_table (info)->dynobj;
-  sreloc = bfd_get_section_by_name (dynobj, dname);
+  sreloc = bfd_get_linker_section (dynobj, dname);
   if (sreloc == NULL && create_p)
     {
-      sreloc = bfd_make_section_with_flags (dynobj, dname,
-					    (SEC_ALLOC
-					     | SEC_LOAD
-					     | SEC_HAS_CONTENTS
-					     | SEC_IN_MEMORY
-					     | SEC_LINKER_CREATED
-					     | SEC_READONLY));
+      sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
+						   (SEC_ALLOC
+						    | SEC_LOAD
+						    | SEC_HAS_CONTENTS
+						    | SEC_IN_MEMORY
+						    | SEC_LINKER_CREATED
+						    | SEC_READONLY));
       if (sreloc == NULL
 	  || ! bfd_set_section_alignment (dynobj, sreloc,
 					  MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
@@ -4788,12 +4832,12 @@ mips_elf_create_compact_rel_section
   flagword flags;
   register asection *s;
 
-  if (bfd_get_section_by_name (abfd, ".compact_rel") == NULL)
+  if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
     {
       flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
 	       | SEC_READONLY);
 
-      s = bfd_make_section_with_flags (abfd, ".compact_rel", flags);
+      s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
       if (s == NULL
 	  || ! bfd_set_section_alignment (abfd, s,
 					  MIPS_ELF_LOG_FILE_ALIGN (abfd)))
@@ -4830,7 +4874,7 @@ mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
 
   /* We have to use an alignment of 2**4 here because this is hardcoded
      in the function stub generation and in the linker script.  */
-  s = bfd_make_section_with_flags (abfd, ".got", flags);
+  s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, 4))
     return FALSE;
@@ -4882,9 +4926,11 @@ mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
     |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
 
   /* We also need a .got.plt section when generating PLTs.  */
-  s = bfd_make_section_with_flags (abfd, ".got.plt",
-				   SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
-				   | SEC_IN_MEMORY | SEC_LINKER_CREATED);
+  s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
+					  SEC_ALLOC | SEC_LOAD
+					  | SEC_HAS_CONTENTS
+					  | SEC_IN_MEMORY
+					  | SEC_LINKER_CREATED);
   if (s == NULL)
     return FALSE;
   htab->sgotplt = s;
@@ -4911,7 +4957,8 @@ is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
    stub.  */
 
 static bfd_boolean
-mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type)
+mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
+				     bfd_boolean target_is_16_bit_code_p)
 {
   /* We specifically ignore branches and jumps from EF_PIC objects,
      where the onus is on the compiler or programmer to perform any
@@ -4925,7 +4972,6 @@ mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type)
     {
     case R_MIPS_26:
     case R_MIPS_PC16:
-    case R_MIPS16_26:
     case R_MICROMIPS_26_S1:
     case R_MICROMIPS_PC7_S1:
     case R_MICROMIPS_PC10_S1:
@@ -4933,6 +4979,9 @@ mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type)
     case R_MICROMIPS_PC23_S2:
       return TRUE;
 
+    case R_MIPS16_26:
+      return !target_is_16_bit_code_p;
+
     default:
       return FALSE;
     }
@@ -5193,14 +5242,28 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
 	 have already noticed that we were going to need the
 	 stub.  */
       if (local_p)
-	sec = elf_tdata (input_bfd)->local_stubs[r_symndx];
+	{
+	  sec = elf_tdata (input_bfd)->local_stubs[r_symndx];
+	  value = 0;
+	}
       else
 	{
 	  BFD_ASSERT (h->need_fn_stub);
-	  sec = h->fn_stub;
+	  if (h->la25_stub)
+	    {
+	      /* If a LA25 header for the stub itself exists, point to the
+		 prepended LUI/ADDIU sequence.  */
+	      sec = h->la25_stub->stub_section;
+	      value = h->la25_stub->offset;
+	    }
+	  else
+	    {
+	      sec = h->fn_stub;
+	      value = 0;
+	    }
 	}
 
-      symbol = sec->output_section->vma + sec->output_offset;
+      symbol = sec->output_section->vma + sec->output_offset + value;
       /* The target is 16-bit, but the stub isn't.  */
       target_is_16_bit_code_p = FALSE;
     }
@@ -5250,7 +5313,8 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
   /* If this is a direct call to a PIC function, redirect to the
      non-PIC stub.  */
   else if (h != NULL && h->la25_stub
-	   && mips_elf_relocation_needs_la25_stub (input_bfd, r_type))
+	   && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
+						   target_is_16_bit_code_p))
     symbol = (h->la25_stub->stub_section->output_section->vma
 	      + h->la25_stub->stub_section->output_offset
 	      + h->la25_stub->offset);
@@ -5322,6 +5386,9 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
     case R_MIPS_TLS_GD:
     case R_MIPS_TLS_GOTTPREL:
     case R_MIPS_TLS_LDM:
+    case R_MIPS16_TLS_GD:
+    case R_MIPS16_TLS_GOTTPREL:
+    case R_MIPS16_TLS_LDM:
     case R_MICROMIPS_TLS_GD:
     case R_MICROMIPS_TLS_GOTTPREL:
     case R_MICROMIPS_TLS_LDM:
@@ -5491,6 +5558,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
       break;
 
     case R_MIPS_TLS_DTPREL_HI16:
+    case R_MIPS16_TLS_DTPREL_HI16:
     case R_MICROMIPS_TLS_DTPREL_HI16:
       value = (mips_elf_high (addend + symbol - dtprel_base (info))
 	       & howto->dst_mask);
@@ -5499,17 +5567,22 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
     case R_MIPS_TLS_DTPREL_LO16:
     case R_MIPS_TLS_DTPREL32:
     case R_MIPS_TLS_DTPREL64:
+    case R_MIPS16_TLS_DTPREL_LO16:
     case R_MICROMIPS_TLS_DTPREL_LO16:
       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
       break;
 
     case R_MIPS_TLS_TPREL_HI16:
+    case R_MIPS16_TLS_TPREL_HI16:
     case R_MICROMIPS_TLS_TPREL_HI16:
       value = (mips_elf_high (addend + symbol - tprel_base (info))
 	       & howto->dst_mask);
       break;
 
     case R_MIPS_TLS_TPREL_LO16:
+    case R_MIPS_TLS_TPREL32:
+    case R_MIPS_TLS_TPREL64:
+    case R_MIPS16_TLS_TPREL_LO16:
     case R_MICROMIPS_TLS_TPREL_LO16:
       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
       break;
@@ -5642,6 +5715,9 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
     case R_MIPS_TLS_GOTTPREL:
     case R_MIPS_TLS_LDM:
     case R_MIPS_GOT_DISP:
+    case R_MIPS16_TLS_GD:
+    case R_MIPS16_TLS_GOTTPREL:
+    case R_MIPS16_TLS_LDM:
     case R_MICROMIPS_TLS_GD:
     case R_MICROMIPS_TLS_GOTTPREL:
     case R_MICROMIPS_TLS_LDM:
@@ -6104,7 +6180,7 @@ mips_elf_create_dynamic_relocation (bfd *output_bfd,
   /* On IRIX5, make an entry of compact relocation info.  */
   if (IRIX_COMPAT (output_bfd) == ict_irix5)
     {
-      asection *scpt = bfd_get_section_by_name (dynobj, ".compact_rel");
+      asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
       bfd_byte *cr;
 
       if (scpt)
@@ -7146,7 +7222,7 @@ _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
      EABI doesn't.  */
   if (!htab->is_vxworks)
     {
-      s = bfd_get_section_by_name (abfd, ".dynamic");
+      s = bfd_get_linker_section (abfd, ".dynamic");
       if (s != NULL)
 	{
 	  if (! bfd_set_section_flags (abfd, s, flags))
@@ -7162,9 +7238,9 @@ _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
     return FALSE;
 
   /* Create .stub section.  */
-  s = bfd_make_section_with_flags (abfd,
-				   MIPS_ELF_STUB_SECTION_NAME (abfd),
-				   flags | SEC_CODE);
+  s = bfd_make_section_anyway_with_flags (abfd,
+					  MIPS_ELF_STUB_SECTION_NAME (abfd),
+					  flags | SEC_CODE);
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s,
 				      MIPS_ELF_LOG_FILE_ALIGN (abfd)))
@@ -7173,10 +7249,10 @@ _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 
   if ((IRIX_COMPAT (abfd) == ict_irix5 || IRIX_COMPAT (abfd) == ict_none)
       && !info->shared
-      && bfd_get_section_by_name (abfd, ".rld_map") == NULL)
+      && bfd_get_linker_section (abfd, ".rld_map") == NULL)
     {
-      s = bfd_make_section_with_flags (abfd, ".rld_map",
-				       flags &~ (flagword) SEC_READONLY);
+      s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
+					      flags &~ (flagword) SEC_READONLY);
       if (s == NULL
 	  || ! bfd_set_section_alignment (abfd, s,
 					  MIPS_ELF_LOG_FILE_ALIGN (abfd)))
@@ -7214,19 +7290,20 @@ _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 	}
 
       /* Change alignments of some sections.  */
-      s = bfd_get_section_by_name (abfd, ".hash");
+      s = bfd_get_linker_section (abfd, ".hash");
       if (s != NULL)
 	bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
-      s = bfd_get_section_by_name (abfd, ".dynsym");
+      s = bfd_get_linker_section (abfd, ".dynsym");
       if (s != NULL)
 	bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
-      s = bfd_get_section_by_name (abfd, ".dynstr");
+      s = bfd_get_linker_section (abfd, ".dynstr");
       if (s != NULL)
 	bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
+      /* ??? */
       s = bfd_get_section_by_name (abfd, ".reginfo");
       if (s != NULL)
 	bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
-      s = bfd_get_section_by_name (abfd, ".dynamic");
+      s = bfd_get_linker_section (abfd, ".dynamic");
       if (s != NULL)
 	bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
     }
@@ -7256,7 +7333,7 @@ _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
 	     and is filled in by the rtld to contain a pointer to
 	     the _r_debug structure. Its symbol value will be set in
 	     _bfd_mips_elf_finish_dynamic_symbol.  */
-	  s = bfd_get_section_by_name (abfd, ".rld_map");
+	  s = bfd_get_linker_section (abfd, ".rld_map");
 	  BFD_ASSERT (s != NULL);
 
 	  name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
@@ -7283,15 +7360,15 @@ _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
     return FALSE;
 
   /* Cache the sections created above.  */
-  htab->splt = bfd_get_section_by_name (abfd, ".plt");
-  htab->sdynbss = bfd_get_section_by_name (abfd, ".dynbss");
+  htab->splt = bfd_get_linker_section (abfd, ".plt");
+  htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss");
   if (htab->is_vxworks)
     {
-      htab->srelbss = bfd_get_section_by_name (abfd, ".rela.bss");
-      htab->srelplt = bfd_get_section_by_name (abfd, ".rela.plt");
+      htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss");
+      htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt");
     }
   else
-    htab->srelplt = bfd_get_section_by_name (abfd, ".rel.plt");
+    htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt");
   if (!htab->sdynbss
       || (htab->is_vxworks && !htab->srelbss && !info->shared)
       || !htab->srelplt
@@ -7498,7 +7575,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
       /* Look at the relocation information to figure out which symbol
          this is for.  */
 
-      r_symndx = mips16_stub_symndx (sec, relocs, rel_end);
+      r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
       if (r_symndx == 0)
 	{
 	  (*_bfd_error_handler)
@@ -7623,7 +7700,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
       /* Look at the relocation information to figure out which symbol
          this is for.  */
 
-      r_symndx = mips16_stub_symndx (sec, relocs, rel_end);
+      r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
       if (r_symndx == 0)
 	{
 	  (*_bfd_error_handler)
@@ -7775,8 +7852,6 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
       can_make_dynamic_p = FALSE;
       switch (r_type)
 	{
-	case R_MIPS16_GOT16:
-	case R_MIPS16_CALL16:
 	case R_MIPS_GOT16:
 	case R_MIPS_CALL16:
 	case R_MIPS_CALL_HI16:
@@ -7789,6 +7864,11 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 	case R_MIPS_TLS_GOTTPREL:
 	case R_MIPS_TLS_GD:
 	case R_MIPS_TLS_LDM:
+	case R_MIPS16_GOT16:
+	case R_MIPS16_CALL16:
+	case R_MIPS16_TLS_GOTTPREL:
+	case R_MIPS16_TLS_GD:
+	case R_MIPS16_TLS_LDM:
 	case R_MICROMIPS_GOT16:
 	case R_MICROMIPS_CALL16:
 	case R_MICROMIPS_CALL_HI16:
@@ -7926,7 +8006,9 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 	    return FALSE;
 	}
 
-      if (h != NULL && mips_elf_relocation_needs_la25_stub (abfd, r_type))
+      if (h != NULL
+	  && mips_elf_relocation_needs_la25_stub (abfd, r_type,
+						  ELF_ST_IS_MIPS16 (h->other)))
 	((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
 
       switch (r_type)
@@ -8023,12 +8105,14 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 	  break;
 
 	case R_MIPS_TLS_GOTTPREL:
+	case R_MIPS16_TLS_GOTTPREL:
 	case R_MICROMIPS_TLS_GOTTPREL:
 	  if (info->shared)
 	    info->flags |= DF_STATIC_TLS;
 	  /* Fall through */
 
 	case R_MIPS_TLS_LDM:
+	case R_MIPS16_TLS_LDM:
 	case R_MICROMIPS_TLS_LDM:
 	  if (tls_ldm_reloc_p (r_type))
 	    {
@@ -8038,6 +8122,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 	  /* Fall through */
 
 	case R_MIPS_TLS_GD:
+	case R_MIPS16_TLS_GD:
 	case R_MICROMIPS_TLS_GD:
 	  /* This symbol requires a global offset table entry, or two
 	     for TLS GD relocations.  */
@@ -8583,7 +8668,8 @@ _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
 	  /* On non-VxWorks targets, the first two entries in .got.plt
 	     are reserved.  */
 	  if (!htab->is_vxworks)
-	    htab->sgotplt->size += 2 * MIPS_ELF_GOT_SIZE (dynobj);
+	    htab->sgotplt->size
+	      += get_elf_backend_data (dynobj)->got_header_size;
 
 	  /* On VxWorks, also allocate room for the header's
 	     .rela.plt.unloaded entries.  */
@@ -8944,7 +9030,7 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  BFD_ASSERT (s != NULL);
 	  s->size
 	    = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
@@ -8969,7 +9055,7 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
     }
 
   /* Allocate space for global sym dynamic relocs.  */
-  elf_link_hash_traverse (&htab->root, allocate_dynrelocs, (PTR) info);
+  elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
 
   mips_elf_estimate_stub_size (output_bfd, info);
 
@@ -9242,6 +9328,55 @@ mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
     }
 }
 
+/* Handle relocations against symbols from removed linkonce sections,
+   or sections discarded by a linker script.  We use this wrapper around
+   RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
+   on 64-bit ELF targets.  In this case for any relocation handled, which
+   always be the first in a triplet, the remaining two have to be processed
+   together with the first, even if they are R_MIPS_NONE.  It is the symbol
+   index referred by the first reloc that applies to all the three and the
+   remaining two never refer to an object symbol.  And it is the final
+   relocation (the last non-null one) that determines the output field of
+   the whole relocation so retrieve the corresponding howto structure for
+   the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
+
+   Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
+   and therefore requires to be pasted in a loop.  It also defines a block
+   and does not protect any of its arguments, hence the extra brackets.  */
+
+static void
+mips_reloc_against_discarded_section (bfd *output_bfd,
+				      struct bfd_link_info *info,
+				      bfd *input_bfd, asection *input_section,
+				      Elf_Internal_Rela **rel,
+				      const Elf_Internal_Rela **relend,
+				      bfd_boolean rel_reloc,
+				      reloc_howto_type *howto,
+				      bfd_byte *contents)
+{
+  const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
+  int count = bed->s->int_rels_per_ext_rel;
+  unsigned int r_type;
+  int i;
+
+  for (i = count - 1; i > 0; i--)
+    {
+      r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
+      if (r_type != R_MIPS_NONE)
+	{
+	  howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
+	  break;
+	}
+    }
+  do
+    {
+       RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+					(*rel), count, (*relend),
+					howto, i, contents);
+    }
+  while (0);
+}
+
 /* Relocate a MIPS ELF section.  */
 
 bfd_boolean
@@ -9307,9 +9442,13 @@ _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 	    sec = h->root.u.def.section;
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
-	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+      if (sec != NULL && discarded_section (sec))
+	{
+	  mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
+						input_section, &rel, &relend,
+						rel_reloc, howto, contents);
+	  continue;
+	}
 
       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
 	{
@@ -9623,9 +9762,9 @@ mips_elf_create_la25_stub (void **slot, void *data)
   offset = stub->offset;
 
   /* Work out the target address.  */
-  target = (stub->h->root.root.u.def.section->output_section->vma
-	    + stub->h->root.root.u.def.section->output_offset
-	    + stub->h->root.root.u.def.value);
+  target = mips_elf_get_la25_target (stub, &s);
+  target += s->output_section->vma + s->output_offset;
+
   target_high = ((target + 0x8000) >> 16) & 0xffff;
   target_low = (target & 0xffff);
 
@@ -10374,7 +10513,7 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
 
   dynobj = elf_hash_table (info)->dynobj;
 
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   sgot = htab->sgot;
   gg = htab->got_info;
@@ -10720,7 +10859,7 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
     if (SGI_COMPAT (output_bfd))
       {
 	/* Write .compact_rel section out.  */
-	s = bfd_get_section_by_name (dynobj, ".compact_rel");
+	s = bfd_get_linker_section (dynobj, ".compact_rel");
 	if (s != NULL)
 	  {
 	    cpt.id1 = 1;
@@ -12325,7 +12464,7 @@ _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
 
   /* Get a copy of the native relocations.  */
   internal_relocs = (_bfd_elf_link_read_relocs
-		     (abfd, sec, (PTR) NULL, (Elf_Internal_Rela *) NULL,
+		     (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
 		      link_info->keep_memory));
   if (internal_relocs == NULL)
     goto error_return;
@@ -13172,15 +13311,15 @@ _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
 	  if (SGI_COMPAT (abfd) && info->shared)
 	    {
 	      /* Create .rtproc section.  */
-	      rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
+	      rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
 	      if (rtproc_sec == NULL)
 		{
 		  flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
 				    | SEC_LINKER_CREATED | SEC_READONLY);
 
-		  rtproc_sec = bfd_make_section_with_flags (abfd,
-							    ".rtproc",
-							    flags);
+		  rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
+								   ".rtproc",
+								   flags);
 		  if (rtproc_sec == NULL
 		      || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
 		    return FALSE;
diff --git a/bfd/elfxx-sparc.c b/bfd/elfxx-sparc.c
index fe18a62..e14afaf 100644
--- a/bfd/elfxx-sparc.c
+++ b/bfd/elfxx-sparc.c
@@ -1,5 +1,5 @@
 /* SPARC-specific support for ELF
-   Copyright 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   Copyright 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -53,7 +53,7 @@
 
 static bfd_reloc_status_type
 init_insn_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
-		 PTR data, asection *input_section, bfd *output_bfd,
+		 void * data, asection *input_section, bfd *output_bfd,
 		 bfd_vma *prelocation, bfd_vma *pinsn)
 {
   bfd_vma relocation;
@@ -97,7 +97,7 @@ static bfd_reloc_status_type
 sparc_elf_notsup_reloc (bfd *abfd ATTRIBUTE_UNUSED,
 			arelent *reloc_entry ATTRIBUTE_UNUSED,
 			asymbol *symbol ATTRIBUTE_UNUSED,
-			PTR data ATTRIBUTE_UNUSED,
+			void * data ATTRIBUTE_UNUSED,
 			asection *input_section ATTRIBUTE_UNUSED,
 			bfd *output_bfd ATTRIBUTE_UNUSED,
 			char **error_message ATTRIBUTE_UNUSED)
@@ -109,7 +109,7 @@ sparc_elf_notsup_reloc (bfd *abfd ATTRIBUTE_UNUSED,
 
 static bfd_reloc_status_type
 sparc_elf_wdisp16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
-			 PTR data, asection *input_section, bfd *output_bfd,
+			 void * data, asection *input_section, bfd *output_bfd,
 			 char **error_message ATTRIBUTE_UNUSED)
 {
   bfd_vma relocation;
@@ -132,11 +132,39 @@ sparc_elf_wdisp16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
     return bfd_reloc_ok;
 }
 
+/* Handle the WDISP10 reloc.  */
+
+static bfd_reloc_status_type
+sparc_elf_wdisp10_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
+			 void * data, asection *input_section, bfd *output_bfd,
+			 char **error_message ATTRIBUTE_UNUSED)
+{
+  bfd_vma relocation;
+  bfd_vma insn;
+  bfd_reloc_status_type status;
+
+  status = init_insn_reloc (abfd, reloc_entry, symbol, data,
+			    input_section, output_bfd, &relocation, &insn);
+  if (status != bfd_reloc_other)
+    return status;
+
+  insn &= ~ (bfd_vma) 0x181fe0;
+  insn |= (((relocation >> 2) & 0x300) << 11)
+	  | (((relocation >> 2) & 0xff) << 5);
+  bfd_put_32 (abfd, insn, (bfd_byte *) data + reloc_entry->address);
+
+  if ((bfd_signed_vma) relocation < - 0x1000
+      || (bfd_signed_vma) relocation > 0xfff)
+    return bfd_reloc_overflow;
+  else
+    return bfd_reloc_ok;
+}
+
 /* Handle the HIX22 reloc.  */
 
 static bfd_reloc_status_type
 sparc_elf_hix22_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
-		       PTR data, asection *input_section, bfd *output_bfd,
+		       void * data, asection *input_section, bfd *output_bfd,
 		       char **error_message ATTRIBUTE_UNUSED)
 {
   bfd_vma relocation;
@@ -162,7 +190,7 @@ sparc_elf_hix22_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
 
 static bfd_reloc_status_type
 sparc_elf_lox10_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
-		       PTR data, asection *input_section, bfd *output_bfd,
+		       void * data, asection *input_section, bfd *output_bfd,
 		       char **error_message ATTRIBUTE_UNUSED)
 {
   bfd_vma relocation;
@@ -267,6 +295,10 @@ static reloc_howto_type _bfd_sparc_elf_howto_table[] =
   HOWTO(R_SPARC_GOTDATA_OP_HIX22,0,2,0,FALSE,0,complain_overflow_bitfield,sparc_elf_hix22_reloc,"R_SPARC_GOTDATA_OP_HIX22",FALSE,0,0x003fffff, FALSE),
   HOWTO(R_SPARC_GOTDATA_OP_LOX10,0,2,0,FALSE,0,complain_overflow_dont,  sparc_elf_lox10_reloc,  "R_SPARC_GOTDATA_OP_LOX10",FALSE,0,0x000003ff, FALSE),
   HOWTO(R_SPARC_GOTDATA_OP,0,0, 0,FALSE,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_GOTDATA_OP",FALSE,0,0x00000000,TRUE),
+  HOWTO(R_SPARC_H34,12,2,22,FALSE,0,complain_overflow_unsigned,bfd_elf_generic_reloc,"R_SPARC_H34",FALSE,0,0x003fffff,FALSE),
+  HOWTO(R_SPARC_SIZE32,0,2,32,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_SIZE32",FALSE,0,0xffffffff,TRUE),
+  HOWTO(R_SPARC_SIZE64,0,4,64,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_SIZE64",FALSE,0,MINUS_ONE, TRUE),
+  HOWTO(R_SPARC_WDISP10,2,2,10,TRUE, 0,complain_overflow_signed,sparc_elf_wdisp10_reloc,"R_SPARC_WDISP10",FALSE,0,0x00000000,TRUE),
 };
 static reloc_howto_type sparc_jmp_irel_howto =
   HOWTO(R_SPARC_JMP_IREL,  0,0,00,FALSE,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_JMP_IREL",FALSE,0,0x00000000,TRUE);
@@ -524,6 +556,18 @@ _bfd_sparc_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
     case BFD_RELOC_SPARC_GOTDATA_OP:
       return &_bfd_sparc_elf_howto_table[R_SPARC_GOTDATA_OP];
 
+    case BFD_RELOC_SPARC_H34:
+      return &_bfd_sparc_elf_howto_table[R_SPARC_H34];
+
+    case BFD_RELOC_SPARC_SIZE32:
+      return &_bfd_sparc_elf_howto_table[R_SPARC_SIZE32];
+
+    case BFD_RELOC_SPARC_SIZE64:
+      return &_bfd_sparc_elf_howto_table[R_SPARC_SIZE64];
+
+    case BFD_RELOC_SPARC_WDISP10:
+      return &_bfd_sparc_elf_howto_table[R_SPARC_WDISP10];
+
     case BFD_RELOC_SPARC_JMP_IREL:
       return &sparc_jmp_irel_howto;
 
@@ -1163,9 +1207,9 @@ _bfd_sparc_elf_create_dynamic_sections (bfd *dynobj,
   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
     return FALSE;
 
-  htab->sdynbss = bfd_get_section_by_name (dynobj, ".dynbss");
+  htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss");
   if (!info->shared)
-    htab->srelbss = bfd_get_section_by_name (dynobj, ".rela.bss");
+    htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss");
 
   if (htab->is_vxworks)
     {
@@ -1656,6 +1700,7 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 	case R_SPARC_WDISP22:
 	case R_SPARC_WDISP19:
 	case R_SPARC_WDISP16:
+	case R_SPARC_WDISP10:
 	case R_SPARC_8:
 	case R_SPARC_16:
 	case R_SPARC_32:
@@ -1680,6 +1725,7 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 	case R_SPARC_H44:
 	case R_SPARC_M44:
 	case R_SPARC_L44:
+	case R_SPARC_H34:
 	case R_SPARC_UA64:
 	  if (h != NULL)
 	    h->non_got_ref = 1;
@@ -1956,6 +2002,7 @@ _bfd_sparc_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
 	case R_SPARC_WDISP22:
 	case R_SPARC_WDISP19:
 	case R_SPARC_WDISP16:
+	case R_SPARC_WDISP10:
 	case R_SPARC_8:
 	case R_SPARC_16:
 	case R_SPARC_32:
@@ -1981,6 +2028,7 @@ _bfd_sparc_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
 	case R_SPARC_H44:
 	case R_SPARC_M44:
 	case R_SPARC_L44:
+	case R_SPARC_H34:
 	case R_SPARC_UA64:
 	  if (info->shared)
 	    break;
@@ -2114,13 +2162,6 @@ _bfd_sparc_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
       return TRUE;
     }
 
-  if (h->size == 0)
-    {
-      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
-			     h->root.root.string);
-      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
@@ -2135,7 +2176,7 @@ _bfd_sparc_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
      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)
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
       htab->srelbss->size += SPARC_ELF_RELA_BYTES (htab);
       h->needs_copy = 1;
@@ -2150,7 +2191,7 @@ _bfd_sparc_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
    dynamic relocs.  */
 
 static bfd_boolean
-allocate_dynrelocs (struct elf_link_hash_entry *h, PTR inf)
+allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
 {
   struct bfd_link_info *info;
   struct _bfd_sparc_elf_link_hash_table *htab;
@@ -2430,7 +2471,7 @@ allocate_local_dynrelocs (void **slot, void *inf)
 /* Find any dynamic relocs that apply to read-only sections.  */
 
 static bfd_boolean
-readonly_dynrelocs (struct elf_link_hash_entry *h, PTR inf)
+readonly_dynrelocs (struct elf_link_hash_entry *h, void * inf)
 {
   struct _bfd_sparc_elf_link_hash_entry *eh;
   struct _bfd_sparc_elf_dyn_relocs *p;
@@ -2491,7 +2532,7 @@ _bfd_sparc_elf_size_dynamic_sections (bfd *output_bfd,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  BFD_ASSERT (s != NULL);
 	  s->size = htab->dynamic_interpreter_size;
 	  s->contents = (unsigned char *) htab->dynamic_interpreter;
@@ -2586,7 +2627,7 @@ _bfd_sparc_elf_size_dynamic_sections (bfd *output_bfd,
 
   /* Allocate global sym .plt and .got entries, and space for global
      sym dynamic relocs.  */
-  elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, (PTR) info);
+  elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
 
   /* Allocate .plt and .got entries, and space for local symbols.  */
   htab_traverse (htab->loc_hash_table, allocate_local_dynrelocs, info);
@@ -2701,8 +2742,7 @@ _bfd_sparc_elf_size_dynamic_sections (bfd *output_bfd,
       /* If any dynamic relocs apply to a read-only section,
 	 then we need a DT_TEXTREL entry.  */
       if ((info->flags & DF_TEXTREL) == 0)
-	elf_link_hash_traverse (&htab->elf, readonly_dynrelocs,
-				(PTR) info);
+	elf_link_hash_traverse (&htab->elf, readonly_dynrelocs, info);
 
       if (info->flags & DF_TEXTREL)
 	{
@@ -2970,9 +3010,9 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd,
 	    }
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -3283,6 +3323,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd,
 	case R_SPARC_WDISP22:
 	case R_SPARC_WDISP19:
 	case R_SPARC_WDISP16:
+	case R_SPARC_WDISP10:
 	case R_SPARC_8:
 	case R_SPARC_16:
 	case R_SPARC_32:
@@ -3307,6 +3348,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd,
 	case R_SPARC_H44:
 	case R_SPARC_M44:
 	case R_SPARC_L44:
+	case R_SPARC_H34:
 	case R_SPARC_UA64:
 	r_sparc_plt32:
 	  if ((input_section->flags & SEC_ALLOC) == 0
@@ -3878,6 +3920,25 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd,
 				  bfd_arch_bits_per_address (input_bfd),
 				  relocation);
 	}
+      else if (r_type == R_SPARC_WDISP10)
+	{
+	  bfd_vma x;
+
+	  relocation += rel->r_addend;
+	  relocation -= (input_section->output_section->vma
+			 + input_section->output_offset);
+	  relocation -= rel->r_offset;
+
+	  x = bfd_get_32 (input_bfd, contents + rel->r_offset);
+	  x |= ((((relocation >> 2) & 0x300) << 11)
+		| (((relocation >> 2) & 0xff) << 5));
+	  bfd_put_32 (input_bfd, x, contents + rel->r_offset);
+
+	  r = bfd_check_overflow (howto->complain_on_overflow,
+				  howto->bitsize, howto->rightshift,
+				  bfd_arch_bits_per_address (input_bfd),
+				  relocation);
+	}
       else if (r_type == R_SPARC_REV32)
 	{
 	  bfd_vma x;
@@ -4069,7 +4130,9 @@ do_relocation:
 		   We don't, but this breaks stabs debugging info, whose
 		   relocations are only 32-bits wide.  Ignore overflows in
 		   this case and also for discarded entries.  */
-		if ((r_type == R_SPARC_32 || r_type == R_SPARC_DISP32)
+		if ((r_type == R_SPARC_32
+		     || r_type == R_SPARC_UA32
+		     || r_type == R_SPARC_DISP32)
 		    && (((input_section->flags & SEC_DEBUGGING) != 0
 			 && strcmp (bfd_section_name (input_bfd,
 						      input_section),
@@ -4432,8 +4495,8 @@ _bfd_sparc_elf_finish_dynamic_symbol (bfd *output_bfd,
       /* This symbols needs a copy reloc.  Set it up.  */
       BFD_ASSERT (h->dynindx != -1);
 
-      s = bfd_get_section_by_name (h->root.u.def.section->owner,
-				   ".rela.bss");
+      s = bfd_get_linker_section (h->root.u.def.section->owner,
+				  ".rela.bss");
       BFD_ASSERT (s != NULL);
 
       rela.r_offset = (h->root.u.def.value
@@ -4672,13 +4735,13 @@ _bfd_sparc_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *i
   BFD_ASSERT (htab != NULL);
   dynobj = htab->elf.dynobj;
 
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
     {
       asection *splt;
 
-      splt = bfd_get_section_by_name (dynobj, ".plt");
+      splt = htab->elf.splt;
       BFD_ASSERT (splt != NULL && sdyn != NULL);
 
       if (!sparc_finish_dyn (output_bfd, info, dynobj, sdyn, splt))
diff --git a/bfd/elfxx-target.h b/bfd/elfxx-target.h
index 96ecce3..5a6cae0 100644
--- a/bfd/elfxx-target.h
+++ b/bfd/elfxx-target.h
@@ -1,6 +1,6 @@
 /* Target definitions for NN-bit ELF
    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -655,6 +655,10 @@
 #define elf_backend_is_function_type _bfd_elf_is_function_type
 #endif
 
+#ifndef elf_backend_maybe_function_sym
+#define elf_backend_maybe_function_sym _bfd_elf_maybe_function_sym
+#endif
+
 #ifndef elf_match_priority
 #define elf_match_priority \
   (ELF_ARCH == bfd_arch_unknown ? 2 : ELF_OSABI == ELFOSABI_NONE ? 1 : 0)
@@ -750,6 +754,7 @@ static struct elf_backend_data elfNN_bed =
   elf_backend_merge_symbol,
   elf_backend_hash_symbol,
   elf_backend_is_function_type,
+  elf_backend_maybe_function_sym,
   elf_backend_link_order_error_handler,
   elf_backend_relplt_name,
   ELF_MACHINE_ALT1,
diff --git a/bfd/elfxx-tilegx.c b/bfd/elfxx-tilegx.c
index 2aaa3d3..6f748ec 100644
--- a/bfd/elfxx-tilegx.c
+++ b/bfd/elfxx-tilegx.c
@@ -1,5 +1,5 @@
 /* TILE-Gx-specific support for ELF.
-   Copyright 2011 Free Software Foundation, Inc.
+   Copyright 2011, 2012 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -18,8 +18,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include "bfd.h"
 #include "sysdep.h"
+#include "bfd.h"
 #include "libbfd.h"
 #include "elf-bfd.h"
 #include "elf/tilegx.h"
@@ -490,35 +490,38 @@ static reloc_howto_type tilegx_elf_howto_table [] =
 
   TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X0_HW0_GOT, 0),
   TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW0_GOT, 0),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X0_HW1_GOT, 16),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW1_GOT, 16),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X0_HW2_GOT, 32),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW2_GOT, 32),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X0_HW3_GOT, 48),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW3_GOT, 48),
+  /* These relocs are currently not defined.  */
+  EMPTY_HOWTO (66),
+  EMPTY_HOWTO (67),
+  EMPTY_HOWTO (68),
+  EMPTY_HOWTO (69),
+  EMPTY_HOWTO (70),
+  EMPTY_HOWTO (71),
 
   TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X0_HW0_LAST_GOT, 0),
   TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X1_HW0_LAST_GOT, 0),
   TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X0_HW1_LAST_GOT, 16),
   TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X1_HW1_LAST_GOT, 16),
-  TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X0_HW2_LAST_GOT, 32),
-  TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X1_HW2_LAST_GOT, 32),
+  /* These relocs are currently not defined.  */
+  EMPTY_HOWTO (76),
+  EMPTY_HOWTO (77),
 
   TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X0_HW0_TLS_GD, 0),
   TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW0_TLS_GD, 0),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X0_HW1_TLS_GD, 16),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW1_TLS_GD, 16),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X0_HW2_TLS_GD, 32),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW2_TLS_GD, 32),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X0_HW3_TLS_GD, 48),
-  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW3_TLS_GD, 48),
+
+  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X0_HW0_TLS_LE, 0),
+  TILEGX_IMM16_HOWTO (R_TILEGX_IMM16_X1_HW0_TLS_LE, 0),
+  TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE, 0),
+  TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE, 0),
+  TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE, 16),
+  TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE, 16),
 
   TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD, 0),
   TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD, 0),
   TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD, 16),
   TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD, 16),
-  TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD, 32),
-  TILEGX_IMM16_HOWTO_LAST (R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD, 32),
+  EMPTY_HOWTO (90),
+  EMPTY_HOWTO (91),
 
 #define TILEGX_IMM16_HOWTO_TLS_IE(name, rshift) \
   HOWTO (name, rshift, 1, 16, FALSE, 0, \
@@ -527,12 +530,12 @@ static reloc_howto_type tilegx_elf_howto_table [] =
 
   TILEGX_IMM16_HOWTO_TLS_IE (R_TILEGX_IMM16_X0_HW0_TLS_IE, 0),
   TILEGX_IMM16_HOWTO_TLS_IE (R_TILEGX_IMM16_X1_HW0_TLS_IE, 0),
-  TILEGX_IMM16_HOWTO_TLS_IE (R_TILEGX_IMM16_X0_HW1_TLS_IE, 16),
-  TILEGX_IMM16_HOWTO_TLS_IE (R_TILEGX_IMM16_X1_HW1_TLS_IE, 16),
-  TILEGX_IMM16_HOWTO_TLS_IE (R_TILEGX_IMM16_X0_HW2_TLS_IE, 32),
-  TILEGX_IMM16_HOWTO_TLS_IE (R_TILEGX_IMM16_X1_HW2_TLS_IE, 32),
-  TILEGX_IMM16_HOWTO_TLS_IE (R_TILEGX_IMM16_X0_HW3_TLS_IE, 48),
-  TILEGX_IMM16_HOWTO_TLS_IE (R_TILEGX_IMM16_X1_HW3_TLS_IE, 48),
+  EMPTY_HOWTO (94),
+  EMPTY_HOWTO (95),
+  EMPTY_HOWTO (96),
+  EMPTY_HOWTO (97),
+  EMPTY_HOWTO (98),
+  EMPTY_HOWTO (99),
 
 #define TILEGX_IMM16_HOWTO_LAST_TLS_IE(name, rshift) \
   HOWTO (name, rshift, 1, 16, FALSE, 0, \
@@ -543,8 +546,8 @@ static reloc_howto_type tilegx_elf_howto_table [] =
   TILEGX_IMM16_HOWTO_LAST_TLS_IE (R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE, 0),
   TILEGX_IMM16_HOWTO_LAST_TLS_IE (R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE, 16),
   TILEGX_IMM16_HOWTO_LAST_TLS_IE (R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE, 16),
-  TILEGX_IMM16_HOWTO_LAST_TLS_IE (R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE, 32),
-  TILEGX_IMM16_HOWTO_LAST_TLS_IE (R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE, 32),
+  EMPTY_HOWTO (104),
+  EMPTY_HOWTO (105),
 
   HOWTO(R_TILEGX_TLS_DTPMOD64, 0, 0, 0, FALSE, 0, complain_overflow_dont,
         bfd_elf_generic_reloc, "R_TILEGX_TLS_DTPMOD64",
@@ -564,7 +567,31 @@ static reloc_howto_type tilegx_elf_howto_table [] =
         FALSE, 0, -1, TRUE),
   HOWTO(R_TILEGX_TLS_TPOFF32, 0, 0, 0, FALSE, 0, complain_overflow_dont,
         bfd_elf_generic_reloc, "R_TILEGX_TLS_TPOFF32",
-        FALSE, 0, 0, TRUE)
+        FALSE, 0, 0, TRUE),
+
+  HOWTO (R_TILEGX_TLS_GD_CALL, /* type */
+	 TILEGX_LOG2_BUNDLE_ALIGNMENT_IN_BYTES, /* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 27,			/* bitsize */
+	 TRUE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_signed,/* complain_on_overflow */
+	 bfd_elf_generic_reloc, /* special_function */
+	 "R_TILEGX_TLS_GD_CALL", /* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 -1,			/* dst_mask */
+	 TRUE), 		/* pcrel_offset */
+
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_X0_TLS_GD_ADD,  0,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_X1_TLS_GD_ADD,  0,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_Y0_TLS_GD_ADD,  0,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_Y1_TLS_GD_ADD,  0,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_TLS_IE_LOAD, 0,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_X0_TLS_ADD,  0,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_X1_TLS_ADD,  0,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_Y0_TLS_ADD,  0,  8),
+  TILEGX_IMM_HOWTO(R_TILEGX_IMM8_Y1_TLS_ADD,  0,  8),
 };
 
 static reloc_howto_type tilegx_elf_howto_table2 [] =
@@ -686,46 +713,28 @@ static const reloc_map tilegx_reloc_map [] =
   SIMPLE_REMAP (TILEGX_IMM16_X1_HW2_LAST_PCREL)
   SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_GOT)
   SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_GOT)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW1_GOT)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW1_GOT)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW2_GOT)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW2_GOT)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW3_GOT)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW3_GOT)
   SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_LAST_GOT)
   SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_LAST_GOT)
   SIMPLE_REMAP (TILEGX_IMM16_X0_HW1_LAST_GOT)
   SIMPLE_REMAP (TILEGX_IMM16_X1_HW1_LAST_GOT)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW2_LAST_GOT)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW2_LAST_GOT)
   SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_TLS_GD)
   SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_TLS_GD)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW1_TLS_GD)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW1_TLS_GD)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW2_TLS_GD)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW2_TLS_GD)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW3_TLS_GD)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW3_TLS_GD)
+  SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_TLS_LE)
+  SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_TLS_LE)
+  SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_LAST_TLS_LE)
+  SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_LAST_TLS_LE)
+  SIMPLE_REMAP (TILEGX_IMM16_X0_HW1_LAST_TLS_LE)
+  SIMPLE_REMAP (TILEGX_IMM16_X1_HW1_LAST_TLS_LE)
   SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_LAST_TLS_GD)
   SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_LAST_TLS_GD)
   SIMPLE_REMAP (TILEGX_IMM16_X0_HW1_LAST_TLS_GD)
   SIMPLE_REMAP (TILEGX_IMM16_X1_HW1_LAST_TLS_GD)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW2_LAST_TLS_GD)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW2_LAST_TLS_GD)
   SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_TLS_IE)
   SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_TLS_IE)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW1_TLS_IE)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW1_TLS_IE)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW2_TLS_IE)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW2_TLS_IE)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW3_TLS_IE)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW3_TLS_IE)
   SIMPLE_REMAP (TILEGX_IMM16_X0_HW0_LAST_TLS_IE)
   SIMPLE_REMAP (TILEGX_IMM16_X1_HW0_LAST_TLS_IE)
   SIMPLE_REMAP (TILEGX_IMM16_X0_HW1_LAST_TLS_IE)
   SIMPLE_REMAP (TILEGX_IMM16_X1_HW1_LAST_TLS_IE)
-  SIMPLE_REMAP (TILEGX_IMM16_X0_HW2_LAST_TLS_IE)
-  SIMPLE_REMAP (TILEGX_IMM16_X1_HW2_LAST_TLS_IE)
 
   SIMPLE_REMAP (TILEGX_TLS_DTPMOD64)
   SIMPLE_REMAP (TILEGX_TLS_DTPOFF64)
@@ -735,6 +744,17 @@ static const reloc_map tilegx_reloc_map [] =
   SIMPLE_REMAP (TILEGX_TLS_DTPOFF32)
   SIMPLE_REMAP (TILEGX_TLS_TPOFF32)
 
+  SIMPLE_REMAP (TILEGX_TLS_GD_CALL)
+  SIMPLE_REMAP (TILEGX_IMM8_X0_TLS_GD_ADD)
+  SIMPLE_REMAP (TILEGX_IMM8_X1_TLS_GD_ADD)
+  SIMPLE_REMAP (TILEGX_IMM8_Y0_TLS_GD_ADD)
+  SIMPLE_REMAP (TILEGX_IMM8_Y1_TLS_GD_ADD)
+  SIMPLE_REMAP (TILEGX_TLS_IE_LOAD)
+  SIMPLE_REMAP (TILEGX_IMM8_X0_TLS_ADD)
+  SIMPLE_REMAP (TILEGX_IMM8_X1_TLS_ADD)
+  SIMPLE_REMAP (TILEGX_IMM8_Y0_TLS_ADD)
+  SIMPLE_REMAP (TILEGX_IMM8_Y1_TLS_ADD)
+
 #undef SIMPLE_REMAP
 #undef TH_REMAP
 
@@ -824,6 +844,10 @@ struct tilegx_elf_link_hash_table
   asection *sdynbss;
   asection *srelbss;
 
+  /* Whether LE transition has been disabled for some of the
+     sections.  */
+  bfd_boolean disable_le_transition;
+
   /* Small local sym to section mapping cache.  */
   struct sym_cache sym_cache;
 };
@@ -920,7 +944,7 @@ tilegx_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
 {
   unsigned int r_type = TILEGX_ELF_R_TYPE (dst->r_info);
 
-  if (r_type <= (unsigned int) R_TILEGX_TLS_TPOFF32)
+  if (r_type <= (unsigned int) R_TILEGX_IMM8_Y1_TLS_ADD)
     cache_ptr->howto = &tilegx_elf_howto_table [r_type];
   else if (r_type - R_TILEGX_GNU_VTINHERIT
 	   <= (unsigned int) R_TILEGX_GNU_VTENTRY)
@@ -1003,10 +1027,18 @@ static const tilegx_create_func reloc_to_create_func[] =
   create_Imm16_X1,
   create_Imm16_X0,
   create_Imm16_X1,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
   create_Imm16_X0,
   create_Imm16_X1,
   create_Imm16_X0,
   create_Imm16_X1,
+  NULL,
+  NULL,
   create_Imm16_X0,
   create_Imm16_X1,
   create_Imm16_X0,
@@ -1019,30 +1051,20 @@ static const tilegx_create_func reloc_to_create_func[] =
   create_Imm16_X1,
   create_Imm16_X0,
   create_Imm16_X1,
+  NULL,
+  NULL,
   create_Imm16_X0,
   create_Imm16_X1,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
   create_Imm16_X0,
   create_Imm16_X1,
   create_Imm16_X0,
   create_Imm16_X1,
-  create_Imm16_X0,
-  create_Imm16_X1,
-  create_Imm16_X0,
-  create_Imm16_X1,
-  create_Imm16_X0,
-  create_Imm16_X1,
-  create_Imm16_X0,
-  create_Imm16_X1,
-  create_Imm16_X0,
-  create_Imm16_X1,
-  create_Imm16_X0,
-  create_Imm16_X1,
-  create_Imm16_X0,
-  create_Imm16_X1,
-  create_Imm16_X0,
-  create_Imm16_X1,
-  create_Imm16_X0,
-  create_Imm16_X1
 };
 
 static void
@@ -1402,23 +1424,23 @@ tilegx_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
   struct elf_link_hash_table *htab = elf_hash_table (info);
 
   /* This function may be called more than once.  */
-  s = bfd_get_section_by_name (abfd, ".got");
-  if (s != NULL && (s->flags & SEC_LINKER_CREATED) != 0)
+  s = bfd_get_linker_section (abfd, ".got");
+  if (s != NULL)
     return TRUE;
 
   flags = bed->dynamic_sec_flags;
 
-  s = bfd_make_section_with_flags (abfd,
-				   (bed->rela_plts_and_copies_p
-				    ? ".rela.got" : ".rel.got"),
-				   (bed->dynamic_sec_flags
-				    | SEC_READONLY));
+  s = bfd_make_section_anyway_with_flags (abfd,
+					  (bed->rela_plts_and_copies_p
+					   ? ".rela.got" : ".rel.got"),
+					  (bed->dynamic_sec_flags
+					   | SEC_READONLY));
   if (s == NULL
       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
     return FALSE;
   htab->srelgot = s;
 
-  s = s_got = bfd_make_section_with_flags (abfd, ".got", flags);
+  s = s_got = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
   if (s == NULL
       || !bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
     return FALSE;
@@ -1429,7 +1451,7 @@ tilegx_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
 
   if (bed->want_got_plt)
     {
-      s = bfd_make_section_with_flags (abfd, ".got.plt", flags);
+      s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags);
       if (s == NULL
 	  || !bfd_set_section_alignment (abfd, s,
 					 bed->s->log_file_align))
@@ -1475,9 +1497,9 @@ tilegx_elf_create_dynamic_sections (bfd *dynobj,
   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
     return FALSE;
 
-  htab->sdynbss = bfd_get_section_by_name (dynobj, ".dynbss");
+  htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss");
   if (!info->shared)
-    htab->srelbss = bfd_get_section_by_name (dynobj, ".rela.bss");
+    htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss");
 
   if (!htab->elf.splt || !htab->elf.srelplt || !htab->sdynbss
       || (!info->shared && !htab->srelbss))
@@ -1538,6 +1560,83 @@ tilegx_elf_copy_indirect_symbol (struct bfd_link_info *info,
   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
 }
 
+static int
+tilegx_tls_translate_to_le (int r_type)
+{
+  switch (r_type)
+    {
+    case R_TILEGX_IMM16_X0_HW0_TLS_GD:
+    case R_TILEGX_IMM16_X0_HW0_TLS_IE:
+      return R_TILEGX_IMM16_X0_HW0_TLS_LE;
+
+    case R_TILEGX_IMM16_X1_HW0_TLS_GD:
+    case R_TILEGX_IMM16_X1_HW0_TLS_IE:
+      return R_TILEGX_IMM16_X1_HW0_TLS_LE;
+
+    case R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD:
+    case R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE:
+      return R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE;
+
+    case R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD:
+    case R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE:
+      return R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE;
+
+    case R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD:
+    case R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE:
+      return R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE;
+
+    case R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD:
+    case R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE:
+      return R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE;
+    }
+  return r_type;
+}
+
+static int
+tilegx_tls_translate_to_ie (int r_type)
+{
+  switch (r_type)
+    {
+    case R_TILEGX_IMM16_X0_HW0_TLS_GD:
+    case R_TILEGX_IMM16_X0_HW0_TLS_IE:
+      return R_TILEGX_IMM16_X0_HW0_TLS_IE;
+
+    case R_TILEGX_IMM16_X1_HW0_TLS_GD:
+    case R_TILEGX_IMM16_X1_HW0_TLS_IE:
+      return R_TILEGX_IMM16_X1_HW0_TLS_IE;
+
+    case R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD:
+    case R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE:
+      return R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE;
+
+    case R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD:
+    case R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE:
+      return R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE;
+
+    case R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD:
+    case R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE:
+      return R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE;
+
+    case R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD:
+    case R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE:
+      return R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE;
+    }
+  return r_type;
+}
+
+static int
+tilegx_elf_tls_transition (struct bfd_link_info *info, int r_type,
+			   int is_local, bfd_boolean disable_le_transition)
+{
+  if (info->shared)
+    return r_type;
+
+  if (is_local && !disable_le_transition)
+    return tilegx_tls_translate_to_le (r_type);
+  else
+    return tilegx_tls_translate_to_ie (r_type);
+}
+
 /* Look through the relocs for a section during the first phase, and
    allocate space in the global offset table or procedure linkage
    table.  */
@@ -1553,6 +1652,7 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
   const Elf_Internal_Rela *rel_end;
   asection *sreloc;
   int num_relocs;
+  bfd_boolean has_tls_gd_or_ie = FALSE, has_tls_add = FALSE;
 
   if (info->relocatable)
     return TRUE;
@@ -1571,6 +1671,33 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
     htab->elf.dynobj = abfd;
 
   rel_end = relocs + num_relocs;
+
+  /* Check whether to do optimization to transform TLS GD/IE
+     referehces to TLS LE.  We disable it if we're linking with old
+     TLS code sequences that do not support such optimization.  Old
+     TLS code sequences have tls_gd_call/tls_ie_load relocations but
+     no tls_add relocations.  */
+  for (rel = relocs; rel < rel_end && !has_tls_add; rel++)
+    {
+      int r_type = TILEGX_ELF_R_TYPE (rel->r_info);
+      switch (r_type)
+	{
+	case R_TILEGX_TLS_GD_CALL:
+	case R_TILEGX_TLS_IE_LOAD:
+	  has_tls_gd_or_ie = TRUE;
+	  break;
+	case R_TILEGX_IMM8_X0_TLS_ADD:
+	case R_TILEGX_IMM8_Y0_TLS_ADD:
+	case R_TILEGX_IMM8_X1_TLS_ADD:
+	case R_TILEGX_IMM8_Y1_TLS_ADD:
+	  has_tls_add = TRUE;
+	  break;
+	}
+    }
+
+  sec->sec_flg0 = (has_tls_gd_or_ie && !has_tls_add);
+  htab->disable_le_transition |= sec->sec_flg0;
+
   for (rel = relocs; rel < rel_end; rel++)
     {
       unsigned int r_type;
@@ -1598,39 +1725,36 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
 	}
 
+      r_type = tilegx_elf_tls_transition (info, r_type, h == NULL,
+					  sec->sec_flg0);
       switch (r_type)
 	{
+	case R_TILEGX_IMM16_X0_HW0_TLS_LE:
+	case R_TILEGX_IMM16_X1_HW0_TLS_LE:
+	case R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE:
+	case R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE:
+	case R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE:
+	case R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE:
+	  if (info->shared)
+	    goto r_tilegx_plt32;
+	  break;
+
 	case R_TILEGX_IMM16_X0_HW0_TLS_GD:
 	case R_TILEGX_IMM16_X1_HW0_TLS_GD:
-	case R_TILEGX_IMM16_X0_HW1_TLS_GD:
-	case R_TILEGX_IMM16_X1_HW1_TLS_GD:
-	case R_TILEGX_IMM16_X0_HW2_TLS_GD:
-	case R_TILEGX_IMM16_X1_HW2_TLS_GD:
-	case R_TILEGX_IMM16_X0_HW3_TLS_GD:
-	case R_TILEGX_IMM16_X1_HW3_TLS_GD:
 	case R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD:
 	case R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD:
 	case R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD:
 	case R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD:
-	case R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD:
-	case R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD:
-          tls_type = GOT_TLS_GD;
+	  BFD_ASSERT (info->shared);
+	  tls_type = GOT_TLS_GD;
           goto have_got_reference;
 
 	case R_TILEGX_IMM16_X0_HW0_TLS_IE:
 	case R_TILEGX_IMM16_X1_HW0_TLS_IE:
-	case R_TILEGX_IMM16_X0_HW1_TLS_IE:
-	case R_TILEGX_IMM16_X1_HW1_TLS_IE:
-	case R_TILEGX_IMM16_X0_HW2_TLS_IE:
-	case R_TILEGX_IMM16_X1_HW2_TLS_IE:
-	case R_TILEGX_IMM16_X0_HW3_TLS_IE:
-	case R_TILEGX_IMM16_X1_HW3_TLS_IE:
 	case R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE:
 	case R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE:
 	case R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE:
 	case R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE:
-	case R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE:
-	case R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE:
           tls_type = GOT_TLS_IE;
           if (info->shared)
             info->flags |= DF_STATIC_TLS;
@@ -1638,18 +1762,10 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 
 	case R_TILEGX_IMM16_X0_HW0_GOT:
 	case R_TILEGX_IMM16_X1_HW0_GOT:
-	case R_TILEGX_IMM16_X0_HW1_GOT:
-	case R_TILEGX_IMM16_X1_HW1_GOT:
-	case R_TILEGX_IMM16_X0_HW2_GOT:
-	case R_TILEGX_IMM16_X1_HW2_GOT:
-	case R_TILEGX_IMM16_X0_HW3_GOT:
-	case R_TILEGX_IMM16_X1_HW3_GOT:
 	case R_TILEGX_IMM16_X0_HW0_LAST_GOT:
 	case R_TILEGX_IMM16_X1_HW0_LAST_GOT:
 	case R_TILEGX_IMM16_X0_HW1_LAST_GOT:
 	case R_TILEGX_IMM16_X1_HW1_LAST_GOT:
-	case R_TILEGX_IMM16_X0_HW2_LAST_GOT:
-	case R_TILEGX_IMM16_X1_HW2_LAST_GOT:
           tls_type = GOT_NORMAL;
           /* Fall Through */
 
@@ -1720,6 +1836,24 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 	    }
 	  break;
 
+	case R_TILEGX_TLS_GD_CALL:
+	  if (info->shared)
+	    {
+	      /* These are basically R_TILEGX_JUMPOFF_X1_PLT relocs
+		 against __tls_get_addr.  */
+	      struct bfd_link_hash_entry *bh = NULL;
+	      if (! _bfd_generic_link_add_one_symbol (info, abfd,
+						      "__tls_get_addr", 0,
+						      bfd_und_section_ptr, 0,
+						      NULL, FALSE, FALSE,
+						      &bh))
+		return FALSE;
+	      h = (struct elf_link_hash_entry *) bh;
+	    }
+	  else
+	    break;
+	  /* Fall through */
+
         case R_TILEGX_JUMPOFF_X1_PLT:
 	  /* This symbol requires a procedure linkage table entry.  We
 	     actually build the entry in adjust_dynamic_symbol,
@@ -1805,16 +1939,15 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 	case R_TILEGX_IMM16_X0_HW2_LAST:
 	case R_TILEGX_IMM16_X1_HW2_LAST:
 	  if (h != NULL)
-            {
-              h->non_got_ref = 1;
+	    h->non_got_ref = 1;
 
-              if (!info->shared)
-                {
-                  /* We may need a .plt entry if the function this reloc
-                     refers to is in a shared lib.  */
-                  h->plt.refcount += 1;
-                }
-            }
+	r_tilegx_plt32:
+	  if (h != NULL && !info->shared)
+	    {
+	      /* We may need a .plt entry if the function this reloc
+		 refers to is in a shared lib.  */
+	      h->plt.refcount += 1;
+	    }
 
 	  /* If we are creating a shared library, and this is a reloc
 	     against a global symbol, or a non PC relative reloc
@@ -2008,51 +2141,28 @@ tilegx_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
 	}
 
       r_type = TILEGX_ELF_R_TYPE (rel->r_info);
-
+      r_type = tilegx_elf_tls_transition (info, r_type, h != NULL,
+					  sec->sec_flg0);
       switch (r_type)
 	{
 	case R_TILEGX_IMM16_X0_HW0_GOT:
 	case R_TILEGX_IMM16_X1_HW0_GOT:
-	case R_TILEGX_IMM16_X0_HW1_GOT:
-	case R_TILEGX_IMM16_X1_HW1_GOT:
-	case R_TILEGX_IMM16_X0_HW2_GOT:
-	case R_TILEGX_IMM16_X1_HW2_GOT:
-	case R_TILEGX_IMM16_X0_HW3_GOT:
-	case R_TILEGX_IMM16_X1_HW3_GOT:
 	case R_TILEGX_IMM16_X0_HW0_LAST_GOT:
 	case R_TILEGX_IMM16_X1_HW0_LAST_GOT:
 	case R_TILEGX_IMM16_X0_HW1_LAST_GOT:
 	case R_TILEGX_IMM16_X1_HW1_LAST_GOT:
-	case R_TILEGX_IMM16_X0_HW2_LAST_GOT:
-	case R_TILEGX_IMM16_X1_HW2_LAST_GOT:
 	case R_TILEGX_IMM16_X0_HW0_TLS_GD:
 	case R_TILEGX_IMM16_X1_HW0_TLS_GD:
-	case R_TILEGX_IMM16_X0_HW1_TLS_GD:
-	case R_TILEGX_IMM16_X1_HW1_TLS_GD:
-	case R_TILEGX_IMM16_X0_HW2_TLS_GD:
-	case R_TILEGX_IMM16_X1_HW2_TLS_GD:
-	case R_TILEGX_IMM16_X0_HW3_TLS_GD:
-	case R_TILEGX_IMM16_X1_HW3_TLS_GD:
 	case R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD:
 	case R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD:
 	case R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD:
 	case R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD:
-	case R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD:
-	case R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD:
 	case R_TILEGX_IMM16_X0_HW0_TLS_IE:
 	case R_TILEGX_IMM16_X1_HW0_TLS_IE:
-	case R_TILEGX_IMM16_X0_HW1_TLS_IE:
-	case R_TILEGX_IMM16_X1_HW1_TLS_IE:
-	case R_TILEGX_IMM16_X0_HW2_TLS_IE:
-	case R_TILEGX_IMM16_X1_HW2_TLS_IE:
-	case R_TILEGX_IMM16_X0_HW3_TLS_IE:
-	case R_TILEGX_IMM16_X1_HW3_TLS_IE:
 	case R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE:
 	case R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE:
 	case R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE:
 	case R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE:
-	case R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE:
-	case R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE:
 	  if (h != NULL)
 	    {
 	      if (h->got.refcount > 0)
@@ -2060,7 +2170,8 @@ tilegx_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
 	    }
 	  else
 	    {
-	      if (local_got_refcounts[r_symndx] > 0)
+	      if (local_got_refcounts &&
+		  local_got_refcounts[r_symndx] > 0)
 		local_got_refcounts[r_symndx]--;
 	    }
 	  break;
@@ -2256,13 +2367,6 @@ tilegx_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
       return TRUE;
     }
 
-  if (h->size == 0)
-    {
-      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
-			     h->root.root.string);
-      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
@@ -2277,7 +2381,7 @@ tilegx_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
      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)
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
     {
       htab->srelbss->size += TILEGX_ELF_RELA_BYTES (htab);
       h->needs_copy = 1;
@@ -2361,7 +2465,15 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
       h->needs_plt = 0;
     }
 
-  if (h->got.refcount > 0)
+  /* If a TLS_IE symbol is now local to the binary, make it a TLS_LE
+     requiring no TLS entry.  */
+  if (h->got.refcount > 0
+      && !htab->disable_le_transition
+      && !info->shared
+      && h->dynindx == -1
+      && tilegx_elf_hash_entry(h)->tls_type == GOT_TLS_IE)
+    h->got.offset = (bfd_vma) -1;
+  else if (h->got.refcount > 0)
     {
       asection *s;
       bfd_boolean dyn;
@@ -2543,7 +2655,7 @@ tilegx_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
       /* Set the contents of the .interp section to the interpreter.  */
       if (info->executable)
 	{
-	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  s = bfd_get_linker_section (dynobj, ".interp");
 	  BFD_ASSERT (s != NULL);
 	  s->size = strlen (htab->dynamic_interpreter) + 1;
 	  s->contents = (unsigned char *) htab->dynamic_interpreter;
@@ -2781,6 +2893,125 @@ tpoff (struct bfd_link_info *info, bfd_vma address)
   return (address - htab->tls_sec->vma);
 }
 
+/* Copy SIZE bits from FROM to TO at address ADDR.  */
+
+static void
+tilegx_copy_bits (bfd_byte *addr, int from, int to, int size)
+{
+  int i;
+  for (i = 0; i < size; i++)
+    {
+      int from_byte = (from + i) / 8;
+      int from_bit = (from + i) % 8;
+      int to_byte = (to + i) / 8;
+      int to_bit = (to + i) % 8;
+      bfd_byte to_mask = 1 << to_bit;
+      addr[to_byte] = (addr[to_byte] & ~to_mask)
+	| ((addr[from_byte] >> from_bit << to_bit) & to_mask);
+    }
+}
+
+/* Replace the MASK bits in ADDR with those in INSN, for the next
+   TILEGX_BUNDLE_SIZE_IN_BYTES bytes.  */
+
+static void
+tilegx_replace_insn (bfd_byte *addr, const bfd_byte *mask,
+		     const bfd_byte *insn)
+{
+  int i;
+  for (i = 0; i < TILEGX_BUNDLE_SIZE_IN_BYTES; i++)
+    {
+      addr[i] = (addr[i] & ~mask[i]) | (insn[i] & mask[i]);
+    }
+}
+
+/* Mask to extract the bits corresponding to an instruction in a
+   specific pipe of a bundle.  */
+static const bfd_byte insn_mask_X1[] = {
+  0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x3f
+};
+
+/* Mask to extract the bits corresponding to an instruction in a
+   specific pipe of a bundle, minus the destination operand and the
+   first source operand.  */
+static const bfd_byte insn_mask_X0_no_dest_no_srca[] = { 
+  0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00
+};
+
+static const bfd_byte insn_mask_X1_no_dest_no_srca[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x3f
+};
+
+static const bfd_byte insn_mask_Y0_no_dest_no_srca[] = {
+  0x00, 0xf0, 0x0f, 0x78, 0x00, 0x00, 0x00, 0x00
+};
+static const bfd_byte insn_mask_Y1_no_dest_no_srca[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0x3c
+};
+
+/* Mask to extract the bits corresponding to an instruction in a
+   specific pipe of a bundle, minus the register operands.  */
+static const bfd_byte insn_mask_X0_no_operand[] = {
+  0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00
+};
+
+static const bfd_byte insn_mask_X1_no_operand[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x3f
+};
+
+static const bfd_byte insn_mask_Y0_no_operand[] = {
+  0x00, 0x00, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00
+};
+
+static const bfd_byte insn_mask_Y1_no_operand[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x3c
+};
+
+/* Various instructions synthesized to support tls references.  */
+
+/* ld r0, r0 in the X1 pipe, used for tls ie.  */
+static const bfd_byte insn_tls_ie_ld_X1[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x6a, 0x28
+};
+
+/* ld4s r0, r0 in the X1 pipe, used for tls ie.  */
+static const bfd_byte insn_tls_ie_ld4s_X1[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x6a, 0x28
+};
+
+/* add r0, r0, tp in various pipes, used for tls ie.  */
+static const bfd_byte insn_tls_ie_add_X0X1[] = {
+  0x00, 0x50, 0x0f, 0x50, 0x00, 0xa8, 0x07, 0x28
+};
+static const bfd_byte insn_tls_ie_add_Y0Y1[] = {
+  0x00, 0x50, 0x27, 0x2c, 0x00, 0xa8, 0x13, 0x9a
+};
+
+/* addx r0, r0, tp in various pipes, used for tls ie.  */
+static const bfd_byte insn_tls_ie_addx_X0X1[] = {
+  0x00, 0x50, 0x0b, 0x50, 0x00, 0xa8, 0x05, 0x28
+};
+static const bfd_byte insn_tls_ie_addx_Y0Y1[] = {
+  0x00, 0x50, 0x03, 0x2c, 0x00, 0xa8, 0x01, 0x9a
+};
+
+/* move r0, r0 in various pipes, used for tls gd.  */
+static const bfd_byte insn_tls_gd_add_X0X1[] = {
+  0x00, 0xf0, 0x07, 0x51, 0x00, 0xf8, 0x3b, 0x28
+};
+static const bfd_byte insn_tls_gd_add_Y0Y1[] = {
+  0x00, 0xf0, 0x0b, 0x54, 0x00, 0xf8, 0x05, 0xae
+};
+
+static const bfd_byte *insn_move_X0X1 = insn_tls_gd_add_X0X1;
+static const bfd_byte *insn_move_Y0Y1 = insn_tls_gd_add_Y0Y1;
+
+static const bfd_byte *insn_add_X0X1 = insn_tls_ie_add_X0X1;
+static const bfd_byte *insn_add_Y0Y1 = insn_tls_ie_add_Y0Y1;
+
+static const bfd_byte *insn_addx_X0X1 = insn_tls_ie_addx_X0X1;
+static const bfd_byte *insn_addx_Y0Y1 = insn_tls_ie_addx_Y0Y1;
+
 /* Relocate an TILEGX ELF section.
 
    The RELOCATE_SECTION function is called by the new ELF backend linker
@@ -2845,6 +3076,7 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
   for (; rel < relend; rel++)
     {
       int r_type, tls_type;
+      bfd_boolean is_tls_iele, is_tls_le;
       reloc_howto_type *howto;
       unsigned long r_symndx;
       struct elf_link_hash_entry *h;
@@ -2908,9 +3140,9 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 	    }
 	}
 
-      if (sec != NULL && elf_discarded_section (sec))
+      if (sec != NULL && discarded_section (sec))
 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
-					 rel, relend, howto, contents);
+					 rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
 	continue;
@@ -2927,20 +3159,203 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 
       switch (r_type)
 	{
+	case R_TILEGX_TLS_GD_CALL:
+	case R_TILEGX_IMM8_X0_TLS_GD_ADD:
+	case R_TILEGX_IMM8_Y0_TLS_GD_ADD:
+	case R_TILEGX_IMM8_X1_TLS_GD_ADD:
+	case R_TILEGX_IMM8_Y1_TLS_GD_ADD:
+	case R_TILEGX_IMM8_X0_TLS_ADD:
+	case R_TILEGX_IMM8_Y0_TLS_ADD:
+	case R_TILEGX_IMM8_X1_TLS_ADD:
+	case R_TILEGX_IMM8_Y1_TLS_ADD:
+	  tls_type = GOT_UNKNOWN;
+	  if (h == NULL && local_got_offsets)
+	    tls_type =
+	      _bfd_tilegx_elf_local_got_tls_type (input_bfd) [r_symndx];
+	  else if (h != NULL)
+	    tls_type = tilegx_elf_hash_entry(h)->tls_type;
+
+	  is_tls_iele = (! info->shared || tls_type == GOT_TLS_IE);
+	  is_tls_le = is_tls_iele && (!input_section->sec_flg0
+				      && !info->shared
+				      && (h == NULL || h->dynindx == -1));
+
+	  if (r_type == R_TILEGX_TLS_GD_CALL)
+	    {
+	      if (is_tls_le)
+		{
+		  /* GD -> LE */
+		  tilegx_replace_insn (contents + rel->r_offset,
+				       insn_mask_X1, insn_move_X0X1);
+		  continue;
+		}
+	      else if (is_tls_iele)
+		{
+		  /* GD -> IE */
+		  if (ABI_64_P (output_bfd))
+		    tilegx_replace_insn (contents + rel->r_offset,
+					 insn_mask_X1, insn_tls_ie_ld_X1);
+		  else
+		    tilegx_replace_insn (contents + rel->r_offset,
+					 insn_mask_X1, insn_tls_ie_ld4s_X1);
+		  continue;
+		}
+
+	      /* GD -> GD */
+	      h = (struct elf_link_hash_entry *)
+		bfd_link_hash_lookup (info->hash, "__tls_get_addr", FALSE,
+				      FALSE, TRUE);
+	      BFD_ASSERT (h != NULL);
+	      r_type = R_TILEGX_JUMPOFF_X1_PLT;
+	      howto = tilegx_elf_howto_table + r_type;
+	    }
+	  else if (r_type == R_TILEGX_IMM8_X0_TLS_ADD
+		   || r_type ==  R_TILEGX_IMM8_X1_TLS_ADD
+		   || r_type ==  R_TILEGX_IMM8_Y0_TLS_ADD
+		   || r_type ==  R_TILEGX_IMM8_Y1_TLS_ADD)
+	    {
+	      bfd_boolean is_pipe0 =
+		(r_type == R_TILEGX_IMM8_X0_TLS_ADD
+		 || r_type ==  R_TILEGX_IMM8_Y0_TLS_ADD);
+	      bfd_boolean is_X0X1 =
+		(r_type == R_TILEGX_IMM8_X0_TLS_ADD
+		 || r_type ==  R_TILEGX_IMM8_X1_TLS_ADD);
+	      int dest_begin = is_pipe0 ? 0 : 31;
+	      int src_begin;
+	      const bfd_byte *insn;
+	      const bfd_byte *mask = NULL;
+
+	      if (is_tls_le)
+		{
+		  /* 1. copy dest operand into the first source operand.
+		     2. change the opcode to "move".  */
+		  src_begin = is_pipe0 ? 6 : 37;
+		  insn = is_X0X1 ? insn_move_X0X1 : insn_move_Y0Y1;
+
+		  switch (r_type)
+		    {
+		    case R_TILEGX_IMM8_X0_TLS_ADD:
+		      mask = insn_mask_X0_no_dest_no_srca;
+		      break;
+		    case R_TILEGX_IMM8_X1_TLS_ADD:
+		      mask = insn_mask_X1_no_dest_no_srca;
+		      break;
+		    case R_TILEGX_IMM8_Y0_TLS_ADD:
+		      mask = insn_mask_Y0_no_dest_no_srca;
+		      break;
+		    case R_TILEGX_IMM8_Y1_TLS_ADD:
+		      mask = insn_mask_Y1_no_dest_no_srca;
+		      break;
+		    }
+		}
+	      else
+		{
+		  /* 1. copy dest operand into the second source operand.
+		     2. change the opcode to "add".  */
+		  src_begin = is_pipe0 ? 12 : 43;
+		  if (ABI_64_P (output_bfd))
+		    insn = is_X0X1 ? insn_add_X0X1 : insn_add_Y0Y1;
+		  else
+		    insn = is_X0X1 ? insn_addx_X0X1 : insn_addx_Y0Y1;
+
+		  switch (r_type)
+		    {
+		    case R_TILEGX_IMM8_X0_TLS_ADD:
+		      mask = insn_mask_X0_no_operand;
+		      break;
+		    case R_TILEGX_IMM8_X1_TLS_ADD:
+		      mask = insn_mask_X1_no_operand;
+		      break;
+		    case R_TILEGX_IMM8_Y0_TLS_ADD:
+		      mask = insn_mask_Y0_no_operand;
+		      break;
+		    case R_TILEGX_IMM8_Y1_TLS_ADD:
+		      mask = insn_mask_Y1_no_operand;
+		      break;
+		    }
+		}
+
+	      tilegx_copy_bits (contents + rel->r_offset, dest_begin,
+				src_begin, 6);
+	      tilegx_replace_insn (contents  + rel->r_offset, mask, insn);
+
+	      continue;
+	    }
+	  else
+	    {
+	      const bfd_byte *mask = NULL;
+	      const bfd_byte *add_insn = NULL;
+	      bfd_boolean is_64bit = ABI_64_P (output_bfd);
+
+	      switch (r_type)
+		{
+		case R_TILEGX_IMM8_X0_TLS_GD_ADD:
+		  add_insn = is_tls_iele
+		    ? (is_64bit ? insn_tls_ie_add_X0X1 : insn_tls_ie_addx_X0X1)
+		    : insn_tls_gd_add_X0X1;
+		  mask = insn_mask_X0_no_dest_no_srca;
+		  break;
+		case R_TILEGX_IMM8_X1_TLS_GD_ADD:
+		  add_insn = is_tls_iele
+		    ? (is_64bit ? insn_tls_ie_add_X0X1 : insn_tls_ie_addx_X0X1)
+		    : insn_tls_gd_add_X0X1;
+		  mask = insn_mask_X1_no_dest_no_srca;
+		  break;
+		case R_TILEGX_IMM8_Y0_TLS_GD_ADD:
+		  add_insn = is_tls_iele
+		    ? (is_64bit ? insn_tls_ie_add_Y0Y1 : insn_tls_ie_addx_Y0Y1)
+		    : insn_tls_gd_add_Y0Y1;
+		  mask = insn_mask_Y0_no_dest_no_srca;
+		  break;
+		case R_TILEGX_IMM8_Y1_TLS_GD_ADD:
+		  add_insn = is_tls_iele
+		    ? (is_64bit ? insn_tls_ie_add_Y0Y1 : insn_tls_ie_addx_Y0Y1)
+		    : insn_tls_gd_add_Y0Y1;
+		  mask = insn_mask_Y1_no_dest_no_srca;
+		  break;
+		}
+
+	      tilegx_replace_insn (contents + rel->r_offset, mask, add_insn);
+
+	      continue;
+	    }
+	  break;
+	case R_TILEGX_TLS_IE_LOAD:
+	  if (!input_section->sec_flg0
+	      && !info->shared
+	      && (h == NULL || h->dynindx == -1))
+	    {
+	      /* IE -> LE */
+	      tilegx_replace_insn (contents + rel->r_offset,
+				   insn_mask_X1_no_dest_no_srca,
+				   insn_move_X0X1);
+	    }
+	  else
+	    {
+	      /* IE -> IE */
+	      if (ABI_64_P (output_bfd))
+		tilegx_replace_insn (contents + rel->r_offset,
+				     insn_mask_X1_no_dest_no_srca,
+				     insn_tls_ie_ld_X1);
+	      else
+		tilegx_replace_insn (contents + rel->r_offset,
+				     insn_mask_X1_no_dest_no_srca,
+				     insn_tls_ie_ld4s_X1);
+	    }
+	  continue;
+	  break;
+	default:
+	  break;
+	}
+
+      switch (r_type)
+	{
 	case R_TILEGX_IMM16_X0_HW0_GOT:
 	case R_TILEGX_IMM16_X1_HW0_GOT:
-	case R_TILEGX_IMM16_X0_HW1_GOT:
-	case R_TILEGX_IMM16_X1_HW1_GOT:
-	case R_TILEGX_IMM16_X0_HW2_GOT:
-	case R_TILEGX_IMM16_X1_HW2_GOT:
-	case R_TILEGX_IMM16_X0_HW3_GOT:
-	case R_TILEGX_IMM16_X1_HW3_GOT:
 	case R_TILEGX_IMM16_X0_HW0_LAST_GOT:
 	case R_TILEGX_IMM16_X1_HW0_LAST_GOT:
 	case R_TILEGX_IMM16_X0_HW1_LAST_GOT:
 	case R_TILEGX_IMM16_X1_HW1_LAST_GOT:
-	case R_TILEGX_IMM16_X0_HW2_LAST_GOT:
-	case R_TILEGX_IMM16_X1_HW2_LAST_GOT:
 	  /* Relocation is to the entry for this symbol in the global
 	     offset table.  */
 	  if (htab->elf.sgot == NULL)
@@ -3248,92 +3663,83 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 	    }
 	  break;
 
+        case R_TILEGX_IMM16_X0_HW0_TLS_LE:
+        case R_TILEGX_IMM16_X1_HW0_TLS_LE:
+        case R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE:
+        case R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE:
+        case R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE:
+        case R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE:
+	  if (info->shared)
+	    {
+	      Elf_Internal_Rela outrel;
+	      bfd_boolean skip;
+
+	      BFD_ASSERT (sreloc != NULL);
+	      skip = FALSE;
+	      outrel.r_offset =
+		_bfd_elf_section_offset (output_bfd, info, input_section,
+					 rel->r_offset);
+	      if (outrel.r_offset == (bfd_vma) -1)
+		skip = TRUE;
+	      else if (outrel.r_offset == (bfd_vma) -2)
+		skip = TRUE;
+	      outrel.r_offset += (input_section->output_section->vma
+				  + input_section->output_offset);
+	      if (skip)
+		memset (&outrel, 0, sizeof outrel);
+	      else
+		{
+		  outrel.r_info = TILEGX_ELF_R_INFO (htab, NULL, 0, r_type);
+		  outrel.r_addend = relocation - dtpoff_base (info)
+				    + rel->r_addend;
+		}
+
+	      tilegx_elf_append_rela (output_bfd, sreloc, &outrel);
+	      continue;
+	    }
+	  relocation = tpoff (info, relocation);
+	  break;
+
         case R_TILEGX_IMM16_X0_HW0_TLS_GD:
         case R_TILEGX_IMM16_X1_HW0_TLS_GD:
-        case R_TILEGX_IMM16_X0_HW1_TLS_GD:
-        case R_TILEGX_IMM16_X1_HW1_TLS_GD:
-        case R_TILEGX_IMM16_X0_HW2_TLS_GD:
-        case R_TILEGX_IMM16_X1_HW2_TLS_GD:
-        case R_TILEGX_IMM16_X0_HW3_TLS_GD:
-        case R_TILEGX_IMM16_X1_HW3_TLS_GD:
         case R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD:
         case R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD:
         case R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD:
         case R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD:
-        case R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD:
-        case R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD:
-          tls_type = GOT_TLS_GD;
-          goto have_tls_reference;
-
         case R_TILEGX_IMM16_X0_HW0_TLS_IE:
         case R_TILEGX_IMM16_X1_HW0_TLS_IE:
-        case R_TILEGX_IMM16_X0_HW1_TLS_IE:
-        case R_TILEGX_IMM16_X1_HW1_TLS_IE:
-        case R_TILEGX_IMM16_X0_HW2_TLS_IE:
-        case R_TILEGX_IMM16_X1_HW2_TLS_IE:
-        case R_TILEGX_IMM16_X0_HW3_TLS_IE:
-        case R_TILEGX_IMM16_X1_HW3_TLS_IE:
         case R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE:
         case R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE:
         case R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE:
         case R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE:
-        case R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE:
-        case R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE:
-          tls_type = GOT_TLS_IE;
-          /* Fall through. */
-
-        have_tls_reference:
+	  r_type = tilegx_elf_tls_transition (info, r_type, h == NULL,
+					      input_section->sec_flg0);
+          tls_type = GOT_UNKNOWN;
 	  if (h == NULL && local_got_offsets)
-	    tls_type = _bfd_tilegx_elf_local_got_tls_type (input_bfd) [r_symndx];
+	    tls_type =
+	      _bfd_tilegx_elf_local_got_tls_type (input_bfd) [r_symndx];
 	  else if (h != NULL)
-	    tls_type = tilegx_elf_hash_entry(h)->tls_type;
+	    {
+	      tls_type = tilegx_elf_hash_entry(h)->tls_type;
+	      if (!info->shared && h->dynindx == -1 && tls_type == GOT_TLS_IE)
+		r_type = (!input_section->sec_flg0
+			  ? tilegx_tls_translate_to_le (r_type)
+			  : tilegx_tls_translate_to_ie (r_type));
+	    }
 
 	  if (tls_type == GOT_TLS_IE)
-	    switch (r_type)
-	      {
-              case R_TILEGX_IMM16_X0_HW0_TLS_GD:
-                r_type = R_TILEGX_IMM16_X0_HW0_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X1_HW0_TLS_GD:
-                r_type = R_TILEGX_IMM16_X1_HW0_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X0_HW1_TLS_GD:
-                r_type = R_TILEGX_IMM16_X0_HW1_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X1_HW1_TLS_GD:
-                r_type = R_TILEGX_IMM16_X1_HW1_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X0_HW2_TLS_GD:
-                r_type = R_TILEGX_IMM16_X0_HW2_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X1_HW2_TLS_GD:
-                r_type = R_TILEGX_IMM16_X1_HW2_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X0_HW3_TLS_GD:
-                r_type = R_TILEGX_IMM16_X0_HW3_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X1_HW3_TLS_GD:
-                r_type = R_TILEGX_IMM16_X1_HW3_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD:
-                r_type = R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD:
-                r_type = R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD:
-                r_type = R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD:
-                r_type = R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD:
-                r_type = R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE;
-                break;
-              case R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD:
-                r_type = R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE;
-                break;
-	      }
+	    r_type = tilegx_tls_translate_to_ie (r_type);
+
+	  if (r_type == R_TILEGX_IMM16_X0_HW0_TLS_LE
+	      || r_type == R_TILEGX_IMM16_X1_HW0_TLS_LE
+	      || r_type == R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE
+	      || r_type == R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE
+	      || r_type == R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE
+	      || r_type == R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE)
+	    {
+	      relocation = tpoff (info, relocation);
+	      break;
+	    }
 
 	  if (h != NULL)
 	    {
@@ -3386,18 +3792,10 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
                 {
 		  case R_TILEGX_IMM16_X0_HW0_TLS_IE:
 		  case R_TILEGX_IMM16_X1_HW0_TLS_IE:
-		  case R_TILEGX_IMM16_X0_HW1_TLS_IE:
-		  case R_TILEGX_IMM16_X1_HW1_TLS_IE:
-		  case R_TILEGX_IMM16_X0_HW2_TLS_IE:
-		  case R_TILEGX_IMM16_X1_HW2_TLS_IE:
-		  case R_TILEGX_IMM16_X0_HW3_TLS_IE:
-		  case R_TILEGX_IMM16_X1_HW3_TLS_IE:
 		  case R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE:
 		  case R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE:
 		  case R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE:
 		  case R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE:
-		  case R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE:
-		  case R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE:
 		    if (need_relocs) {
 		      TILEGX_ELF_PUT_WORD (htab, output_bfd, 0,
 					   htab->elf.sgot->contents + off);
@@ -3418,18 +3816,10 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 
 		  case R_TILEGX_IMM16_X0_HW0_TLS_GD:
 		  case R_TILEGX_IMM16_X1_HW0_TLS_GD:
-		  case R_TILEGX_IMM16_X0_HW1_TLS_GD:
-		  case R_TILEGX_IMM16_X1_HW1_TLS_GD:
-		  case R_TILEGX_IMM16_X0_HW2_TLS_GD:
-		  case R_TILEGX_IMM16_X1_HW2_TLS_GD:
-		  case R_TILEGX_IMM16_X0_HW3_TLS_GD:
-		  case R_TILEGX_IMM16_X1_HW3_TLS_GD:
 		  case R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD:
 		  case R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD:
 		  case R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD:
 		  case R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD:
-		  case R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD:
-		  case R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD:
 		    if (need_relocs) {
  	              outrel.r_offset = (htab->elf.sgot->output_section->vma
 				       + htab->elf.sgot->output_offset + off);
@@ -3726,8 +4116,7 @@ tilegx_elf_finish_dynamic_symbol (bfd *output_bfd,
       /* This symbols needs a copy reloc.  Set it up.  */
       BFD_ASSERT (h->dynindx != -1);
 
-      s = bfd_get_section_by_name (h->root.u.def.section->owner,
-				   ".rela.bss");
+      s = htab->srelbss;
       BFD_ASSERT (s != NULL);
 
       rela.r_offset = (h->root.u.def.value
@@ -3806,14 +4195,14 @@ tilegx_elf_finish_dynamic_sections (bfd *output_bfd,
   BFD_ASSERT (htab != NULL);
   dynobj = htab->elf.dynobj;
 
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
 
   if (elf_hash_table (info)->dynamic_sections_created)
     {
       asection *splt;
       bfd_boolean ret;
 
-      splt = bfd_get_section_by_name (dynobj, ".plt");
+      splt = htab->elf.splt;
       BFD_ASSERT (splt != NULL && sdyn != NULL);
 
       ret = tilegx_finish_dyn (output_bfd, info, dynobj, sdyn, splt);
diff --git a/bfd/hash.c b/bfd/hash.c
index 1de2c2a..f2dce4c 100644
--- a/bfd/hash.c
+++ b/bfd/hash.c
@@ -1,6 +1,6 @@
 /* hash.c -- hash table routines for BFD
    Copyright 1993, 1994, 1995, 1997, 1999, 2001, 2002, 2003, 2004, 2005,
-   2006, 2007, 2009, 2010, 2011  Free Software Foundation, Inc.
+   2006, 2007, 2009, 2010, 2011, 2012   Free Software Foundation, Inc.
    Written by Steve Chamberlain <sac at cygnus.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -538,7 +538,7 @@ bfd_hash_insert (struct bfd_hash_table *table,
 	  table->frozen = 1;
 	  return hashp;
 	}
-      memset ((PTR) newtable, 0, alloc);
+      memset (newtable, 0, alloc);
 
       for (hi = 0; hi < table->size; hi ++)
 	while (table->table[hi])
diff --git a/bfd/hp300hpux.c b/bfd/hp300hpux.c
index 7779fef..6803d74 100644
--- a/bfd/hp300hpux.c
+++ b/bfd/hp300hpux.c
@@ -1,6 +1,6 @@
 /* BFD backend for hp-ux 9000/300
    Copyright 1990, 1991, 1993, 1994, 1995, 1997, 1999, 2000, 2001, 2002,
-   2003, 2004, 2005, 2007, 2010 Free Software Foundation, Inc.
+   2003, 2004, 2005, 2007, 2010, 2012 Free Software Foundation, Inc.
    Written by Glenn Engel.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -195,26 +195,19 @@
 
 #include "aoutx.h"
 
-static const bfd_target * MY (callback)
-  PARAMS ((bfd *));
-static bfd_boolean MY (write_object_contents)
-  PARAMS ((bfd *));
+static const bfd_target * MY (callback) (bfd *);
+static bfd_boolean MY (write_object_contents) (bfd *);
 static void convert_sym_type
-  PARAMS ((struct external_nlist *, aout_symbol_type *, bfd *));
+  (struct external_nlist *, aout_symbol_type *, bfd *);
 
-bfd_boolean MY (slurp_symbol_table)
-  PARAMS ((bfd *));
+bfd_boolean MY (slurp_symbol_table) (bfd *);
 void MY (swap_std_reloc_in)
-  PARAMS ((bfd *, struct hp300hpux_reloc *, arelent *, asymbol **,
-	   bfd_size_type));
+  (bfd *, struct hp300hpux_reloc *, arelent *, asymbol **, bfd_size_type);
 bfd_boolean MY (slurp_reloc_table)
-  PARAMS ((bfd *, sec_ptr, asymbol **));
-long MY (canonicalize_symtab)
-  PARAMS ((bfd *, asymbol **));
-long MY (get_symtab_upper_bound)
-  PARAMS ((bfd *));
-long MY (canonicalize_reloc)
-  PARAMS ((bfd *, sec_ptr, arelent **, asymbol **));
+  (bfd *, sec_ptr, asymbol **);
+long MY (canonicalize_symtab)  (bfd *, asymbol **);
+long MY (get_symtab_upper_bound)  (bfd *);
+long MY (canonicalize_reloc)  (bfd *, sec_ptr, arelent **, asymbol **);
 
 /* Since the hpux symbol table has nlist elements interspersed with
    strings and we need to insert som strings for secondary symbols, we
@@ -227,8 +220,7 @@ long MY (canonicalize_reloc)
 /* Set parameters about this a.out file that are machine-dependent.
    This routine is called from some_aout_object_p just before it returns.  */
 static const bfd_target *
-MY (callback) (abfd)
-     bfd *abfd;
+MY (callback) (bfd *abfd)
 {
   struct internal_exec *execp = exec_hdr (abfd);
 
@@ -282,12 +274,10 @@ MY (callback) (abfd)
   return abfd->xvec;
 }
 
-extern bfd_boolean aout_32_write_syms
-  PARAMS ((bfd * abfd));
+extern bfd_boolean aout_32_write_syms (bfd *);
 
 static bfd_boolean
-MY (write_object_contents) (abfd)
-     bfd *abfd;
+MY (write_object_contents) (bfd * abfd)
 {
   struct external_exec exec_bytes;
   struct internal_exec *execp = exec_hdr (abfd);
@@ -320,7 +310,7 @@ MY (write_object_contents) (abfd)
   H_PUT_32 (abfd, (bfd_get_symcount (abfd) * 12), exec_bytes.e_drelocs);
 
   if (bfd_seek (abfd, (file_ptr) 0, FALSE) != 0
-      || (bfd_bwrite ((PTR) &exec_bytes, (bfd_size_type) EXEC_BYTES_SIZE, abfd)
+      || (bfd_bwrite (&exec_bytes, (bfd_size_type) EXEC_BYTES_SIZE, abfd)
 	  != EXEC_BYTES_SIZE))
     return FALSE;
 
@@ -353,14 +343,13 @@ MY (write_object_contents) (abfd)
   return TRUE;
 }
 
-/* convert the hp symbol type to be the same as aout64.h usage so we */
-/* can piggyback routines in aoutx.h.                                */
+/* Convert the hp symbol type to be the same as aout64.h usage so we
+   can piggyback routines in aoutx.h.  */
 
 static void
-convert_sym_type (sym_pointer, cache_ptr, abfd)
-     struct external_nlist *sym_pointer ATTRIBUTE_UNUSED;
-     aout_symbol_type *cache_ptr;
-     bfd *abfd ATTRIBUTE_UNUSED;
+convert_sym_type (struct external_nlist *sym_pointer ATTRIBUTE_UNUSED,
+		  aout_symbol_type *cache_ptr,
+		  bfd *abfd ATTRIBUTE_UNUSED)
 {
   int name_type;
   int new_type;
@@ -452,10 +441,9 @@ DESCRIPTION
 */
 
 void
-NAME (aout,swap_exec_header_in) (abfd, raw_bytes, execp)
-     bfd *abfd;
-     struct external_exec *raw_bytes;
-     struct internal_exec *execp;
+NAME (aout,swap_exec_header_in) (bfd *abfd,
+				 struct external_exec *raw_bytes,
+				 struct internal_exec *execp)
 {
   struct external_exec *bytes = (struct external_exec *) raw_bytes;
 
@@ -536,8 +524,7 @@ NAME (aout,swap_exec_header_in) (abfd, raw_bytes, execp)
 */
 
 bfd_boolean
-MY (slurp_symbol_table) (abfd)
-     bfd *abfd;
+MY (slurp_symbol_table) (bfd *abfd)
 {
   bfd_size_type symbol_bytes;
   struct external_nlist *syms;
@@ -559,7 +546,7 @@ MY (slurp_symbol_table) (abfd)
     return FALSE;
   syms = (struct external_nlist *) (strings + SYM_EXTRA_BYTES);
   if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0
-      || bfd_bread ((PTR) syms, symbol_bytes, abfd) != symbol_bytes)
+      || bfd_bread (syms, symbol_bytes, abfd) != symbol_bytes)
     {
       bfd_release (abfd, syms);
       return FALSE;
@@ -640,12 +627,11 @@ MY (slurp_symbol_table) (abfd)
 }
 
 void
-MY (swap_std_reloc_in) (abfd, bytes, cache_ptr, symbols, symcount)
-     bfd *abfd;
-     struct hp300hpux_reloc *bytes;
-     arelent *cache_ptr;
-     asymbol **symbols;
-     bfd_size_type symcount ATTRIBUTE_UNUSED;
+MY (swap_std_reloc_in) (bfd *abfd,
+			struct hp300hpux_reloc *bytes,
+			arelent *cache_ptr,
+			asymbol **symbols,
+			bfd_size_type symcount ATTRIBUTE_UNUSED)
 {
   int r_index;
   int r_extern = 0;
@@ -719,14 +705,11 @@ MY (swap_std_reloc_in) (abfd, bytes, cache_ptr, symbols, symcount)
 }
 
 bfd_boolean
-MY (slurp_reloc_table) (abfd, asect, symbols)
-     bfd *abfd;
-     sec_ptr asect;
-     asymbol **symbols;
+MY (slurp_reloc_table) (bfd *abfd, sec_ptr asect, asymbol **symbols)
 {
   bfd_size_type count;
   bfd_size_type reloc_size;
-  PTR relocs;
+  void * relocs;
   arelent *reloc_cache;
   size_t each_size;
   struct hp300hpux_reloc *rptr;
@@ -765,7 +748,7 @@ doit:
   if (!reloc_cache && count != 0)
     return FALSE;
 
-  relocs = (PTR) bfd_alloc (abfd, reloc_size);
+  relocs = bfd_alloc (abfd, reloc_size);
   if (!relocs && reloc_size != 0)
     {
       bfd_release (abfd, reloc_cache);
@@ -801,18 +784,12 @@ doit:
 /* call aout_32 versions if the input file was generated by gcc         */
 /************************************************************************/
 
-long aout_32_canonicalize_symtab
-  PARAMS ((bfd * abfd, asymbol ** location));
-long aout_32_get_symtab_upper_bound
-  PARAMS ((bfd * abfd));
-long aout_32_canonicalize_reloc
-  PARAMS ((bfd * abfd, sec_ptr section, arelent ** relptr,
-	   asymbol ** symbols));
+long aout_32_canonicalize_symtab  (bfd *, asymbol **);
+long aout_32_get_symtab_upper_bound  (bfd *);
+long aout_32_canonicalize_reloc  (bfd *, sec_ptr, arelent **, asymbol **);
 
 long
-MY (canonicalize_symtab) (abfd, location)
-     bfd *abfd;
-     asymbol **location;
+MY (canonicalize_symtab) (bfd *abfd, asymbol **location)
 {
   unsigned int counter = 0;
   aout_symbol_type *symbase;
@@ -830,8 +807,7 @@ MY (canonicalize_symtab) (abfd, location)
 }
 
 long
-MY (get_symtab_upper_bound) (abfd)
-     bfd *abfd;
+MY (get_symtab_upper_bound) (bfd *abfd)
 {
   if (obj_aout_subformat (abfd) == gnu_encap_format)
     return aout_32_get_symtab_upper_bound (abfd);
@@ -842,14 +818,14 @@ MY (get_symtab_upper_bound) (abfd)
 }
 
 long
-MY (canonicalize_reloc) (abfd, section, relptr, symbols)
-     bfd *abfd;
-     sec_ptr section;
-     arelent **relptr;
-     asymbol **symbols;
+MY (canonicalize_reloc) (bfd *abfd,
+			 sec_ptr section,
+			 arelent **relptr,
+			 asymbol **symbols)
 {
   arelent *tblptr = section->relocation;
   unsigned int count;
+
   if (obj_aout_subformat (abfd) == gnu_encap_format)
     return aout_32_canonicalize_reloc (abfd, section, relptr, symbols);
 
diff --git a/bfd/hppabsd-core.c b/bfd/hppabsd-core.c
index 152d464..c9e0985 100644
--- a/bfd/hppabsd-core.c
+++ b/bfd/hppabsd-core.c
@@ -1,6 +1,6 @@
 /* BFD back-end for HPPA BSD core files.
    Copyright 1993, 1994, 1995, 1998, 1999, 2001, 2002, 2003, 2004, 2005,
-   2006, 2007 Free Software Foundation, Inc.
+   2006, 2007, 2012 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -49,46 +49,34 @@
 #include <sys/user.h>		/* After a.out.h  */
 #include <sys/file.h>
 
-static asection *make_bfd_asection
-  PARAMS ((bfd *, const char *, flagword, bfd_size_type, file_ptr,
-	   unsigned int));
-static const bfd_target *hppabsd_core_core_file_p
-  PARAMS ((bfd *));
-static char *hppabsd_core_core_file_failing_command
-  PARAMS ((bfd *));
-static int hppabsd_core_core_file_failing_signal
-  PARAMS ((bfd *));
 #define hppabsd_core_core_file_matches_executable_p generic_core_file_matches_executable_p
 #define hppabsd_core_core_file_pid _bfd_nocore_core_file_pid
-static void swap_abort
-  PARAMS ((void));
 
 /* These are stored in the bfd's tdata.  */
 
 struct hppabsd_core_struct
-  {
-    int sig;
-    char cmd[MAXCOMLEN + 1];
-    asection *data_section;
-    asection *stack_section;
-    asection *reg_section;
-  };
+{
+  int sig;
+  char cmd[MAXCOMLEN + 1];
+  asection *data_section;
+  asection *stack_section;
+  asection *reg_section;
+};
 
 #define core_hdr(bfd) ((bfd)->tdata.hppabsd_core_data)
-#define core_signal(bfd) (core_hdr(bfd)->sig)
-#define core_command(bfd) (core_hdr(bfd)->cmd)
-#define core_datasec(bfd) (core_hdr(bfd)->data_section)
+#define core_signal(bfd)   (core_hdr(bfd)->sig)
+#define core_command(bfd)  (core_hdr(bfd)->cmd)
+#define core_datasec(bfd)  (core_hdr(bfd)->data_section)
 #define core_stacksec(bfd) (core_hdr(bfd)->stack_section)
-#define core_regsec(bfd) (core_hdr(bfd)->reg_section)
+#define core_regsec(bfd)   (core_hdr(bfd)->reg_section)
 
 static asection *
-make_bfd_asection (abfd, name, flags, size, offset, alignment_power)
-     bfd *abfd;
-     const char *name;
-     flagword flags;
-     bfd_size_type size;
-     file_ptr offset;
-     unsigned int alignment_power;
+make_bfd_asection (bfd *abfd,
+		   const char *name,
+		   flagword flags,
+		   bfd_size_type size,
+		   file_ptr offset,
+		   unsigned int alignment_power)
 {
   asection *asect;
 
@@ -104,8 +92,7 @@ make_bfd_asection (abfd, name, flags, size, offset, alignment_power)
 }
 
 static const bfd_target *
-hppabsd_core_core_file_p (abfd)
-     bfd *abfd;
+hppabsd_core_core_file_p (bfd *abfd)
 {
   int val;
   struct user u;
@@ -205,22 +192,20 @@ hppabsd_core_core_file_p (abfd)
 }
 
 static char *
-hppabsd_core_core_file_failing_command (abfd)
-     bfd *abfd;
+hppabsd_core_core_file_failing_command (bfd *abfd)
 {
   return core_command (abfd);
 }
 
 static int
-hppabsd_core_core_file_failing_signal (abfd)
-     bfd *abfd;
+hppabsd_core_core_file_failing_signal (bfd *abfd)
 {
   return core_signal (abfd);
 }
 

 /* If somebody calls any byte-swapping routines, shoot them.  */
 static void
-swap_abort ()
+swap_abort (void)
 {
   /* This way doesn't require any declaration for ANSI to fuck up.  */
   abort ();
@@ -280,6 +265,6 @@ const bfd_target hppabsd_core_vec =
 
     NULL,
 
-    (PTR) 0			/* backend_data */
+    NULL			/* backend_data */
   };
 #endif
diff --git a/bfd/hpux-core.c b/bfd/hpux-core.c
index 3e8fd83..3731210 100644
--- a/bfd/hpux-core.c
+++ b/bfd/hpux-core.c
@@ -1,6 +1,6 @@
 /* BFD back-end for HP/UX core files.
    Copyright 1993, 1994, 1996, 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2006,
-   2007, 2008, 2010, 2011 Free Software Foundation, Inc.
+   2007, 2008, 2010, 2011, 2012  Free Software Foundation, Inc.
    Written by Stu Grossman, Cygnus Support.
    Converted to back-end form by Ian Lance Taylor, Cygnus SUpport
 
@@ -425,5 +425,5 @@ const bfd_target hpux_core_vec =
 
     NULL,
 
-    (PTR) 0			/* backend_data */
+    NULL			/* backend_data */
   };
diff --git a/bfd/i386dynix.c b/bfd/i386dynix.c
index 30d2450..a33571e 100644
--- a/bfd/i386dynix.c
+++ b/bfd/i386dynix.c
@@ -1,5 +1,6 @@
 /* BFD back-end for i386 a.out binaries under dynix.
-   Copyright 1994, 1995, 2001, 2003, 2005, 2007 Free Software Foundation, Inc.
+   Copyright 1994, 1995, 2001, 2003, 2005, 2007, 2012
+   Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -55,10 +56,9 @@
 #define a_shdrsize a_dload
 
 void
-i386dynix_32_swap_exec_header_in (abfd, raw_bytes, execp)
-     bfd *abfd;
-     struct external_exec *raw_bytes;
-     struct internal_exec *execp;
+i386dynix_32_swap_exec_header_in (bfd *abfd,
+				  struct external_exec *raw_bytes,
+				  struct internal_exec *execp)
 {
   struct external_exec *bytes = (struct external_exec *)raw_bytes;
 
@@ -66,7 +66,7 @@ i386dynix_32_swap_exec_header_in (abfd, raw_bytes, execp)
      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));
+  memset (execp, 0, sizeof (struct internal_exec));
   /* Now fill in fields in the execp, from the bytes in the raw data.  */
   execp->a_info   = H_GET_32 (abfd, bytes->e_info);
   execp->a_text   = GET_WORD (abfd, bytes->e_text);
diff --git a/bfd/i386linux.c b/bfd/i386linux.c
index 03a2dbe..33a6808 100644
--- a/bfd/i386linux.c
+++ b/bfd/i386linux.c
@@ -1,6 +1,7 @@
 /* BFD back-end for linux flavored i386 a.out binaries.
    Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2001, 2002, 2003,
-   2004, 2005, 2006, 2007, 2008, 2009, 2011 Free Software Foundation, Inc.
+   2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012
+   Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -49,15 +50,13 @@ extern const bfd_target MY(vec);
    becomes important.  */
 
 static void MY_final_link_callback
-  PARAMS ((bfd *, file_ptr *, file_ptr *, file_ptr *));
+  (bfd *, file_ptr *, file_ptr *, file_ptr *);
 static bfd_boolean i386linux_bfd_final_link
-  PARAMS ((bfd *, struct bfd_link_info *));
-static bfd_boolean i386linux_write_object_contents PARAMS ((bfd *));
+  (bfd *, struct bfd_link_info *);
+static bfd_boolean i386linux_write_object_contents (bfd *);
 
 static bfd_boolean
-i386linux_bfd_final_link (abfd, info)
-     bfd *abfd;
-     struct bfd_link_info *info;
+i386linux_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   obj_aout_subformat (abfd) = q_magic_format;
   return NAME(aout,final_link) (abfd, info, MY_final_link_callback);
@@ -68,8 +67,7 @@ i386linux_bfd_final_link (abfd, info)
 /* Set the machine type correctly.  */
 
 static bfd_boolean
-i386linux_write_object_contents (abfd)
-     bfd *abfd;
+i386linux_write_object_contents (bfd *abfd)
 {
   struct external_exec exec_bytes;
   struct internal_exec *execp = exec_hdr (abfd);
@@ -169,31 +167,12 @@ struct linux_link_hash_table
   struct fixup *fixup_list;
 };
 
-static struct bfd_hash_entry *linux_link_hash_newfunc
-  PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
-static struct bfd_link_hash_table *linux_link_hash_table_create
-  PARAMS ((bfd *));
-static struct fixup *new_fixup
-  PARAMS ((struct bfd_link_info *, struct linux_link_hash_entry *,
-	   bfd_vma, int));
-static bfd_boolean linux_link_create_dynamic_sections
-  PARAMS ((bfd *, struct bfd_link_info *));
-static bfd_boolean linux_add_one_symbol
-  PARAMS ((struct bfd_link_info *, bfd *, const char *, flagword, asection *,
-	   bfd_vma, const char *, bfd_boolean, bfd_boolean,
-	   struct bfd_link_hash_entry **));
-static bfd_boolean linux_tally_symbols
-  PARAMS ((struct linux_link_hash_entry *, PTR));
-static bfd_boolean linux_finish_dynamic_link
-  PARAMS ((bfd *, struct bfd_link_info *));
-
 /* Routine to create an entry in an Linux link hash table.  */
 
 static struct bfd_hash_entry *
-linux_link_hash_newfunc (entry, table, string)
-     struct bfd_hash_entry *entry;
-     struct bfd_hash_table *table;
-     const char *string;
+linux_link_hash_newfunc (struct bfd_hash_entry *entry,
+			 struct bfd_hash_table *table,
+			 const char *string)
 {
   struct linux_link_hash_entry *ret = (struct linux_link_hash_entry *) entry;
 
@@ -220,8 +199,7 @@ linux_link_hash_newfunc (entry, table, string)
 /* Create a Linux link hash table.  */
 
 static struct bfd_link_hash_table *
-linux_link_hash_table_create (abfd)
-     bfd *abfd;
+linux_link_hash_table_create (bfd *abfd)
 {
   struct linux_link_hash_table *ret;
   bfd_size_type amt = sizeof (struct linux_link_hash_table);
@@ -257,7 +235,7 @@ linux_link_hash_table_create (abfd)
 #define linux_link_hash_traverse(table, func, info)			\
   (aout_link_hash_traverse						\
    (&(table)->root,							\
-    (bfd_boolean (*) PARAMS ((struct aout_link_hash_entry *, PTR))) (func), \
+    (bfd_boolean (*) (struct aout_link_hash_entry *, void *)) (func),   \
     (info)))
 
 /* Get the Linux link hash table from the info structure.  This is
@@ -268,11 +246,10 @@ linux_link_hash_table_create (abfd)
 /* Store the information for a new fixup.  */
 
 static struct fixup *
-new_fixup (info, h, value, builtin)
-     struct bfd_link_info *info;
-     struct linux_link_hash_entry *h;
-     bfd_vma value;
-     int builtin;
+new_fixup (struct bfd_link_info *info,
+	   struct linux_link_hash_entry *h,
+	   bfd_vma value,
+	   int builtin)
 {
   struct fixup *f;
 
@@ -298,12 +275,11 @@ new_fixup (info, h, value, builtin)
    create it for now.  */
 
 static bfd_boolean
-linux_link_create_dynamic_sections (abfd, info)
-     bfd *abfd;
-     struct bfd_link_info *info ATTRIBUTE_UNUSED;
+linux_link_create_dynamic_sections (bfd *abfd,
+				    struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
   flagword flags;
-  register asection *s;
+  asection *s;
 
   /* Note that we set the SEC_IN_MEMORY flag.  */
   flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY;
@@ -325,18 +301,16 @@ linux_link_create_dynamic_sections (abfd, info)
    tweaking needed for dynamic linking support.  */
 
 static bfd_boolean
-linux_add_one_symbol (info, abfd, name, flags, section, value, string,
-		      copy, collect, hashp)
-     struct bfd_link_info *info;
-     bfd *abfd;
-     const char *name;
-     flagword flags;
-     asection *section;
-     bfd_vma value;
-     const char *string;
-     bfd_boolean copy;
-     bfd_boolean collect;
-     struct bfd_link_hash_entry **hashp;
+linux_add_one_symbol (struct bfd_link_info *info,
+		      bfd *abfd,
+		      const char *name,
+		      flagword flags,
+		      asection *section,
+		      bfd_vma value,
+		      const char *string,
+		      bfd_boolean copy,
+		      bfd_boolean collect,
+		      struct bfd_link_hash_entry **hashp)
 {
   struct linux_link_hash_entry *h;
   bfd_boolean insert;
@@ -425,9 +399,7 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string,
    This function is called via linux_link_hash_traverse.  */
 
 static bfd_boolean
-linux_tally_symbols (h, data)
-     struct linux_link_hash_entry *h;
-     PTR data;
+linux_tally_symbols (struct linux_link_hash_entry *h, void * data)
 {
   struct bfd_link_info *info = (struct bfd_link_info *) data;
   struct fixup *f, *f1;
@@ -548,9 +520,8 @@ linux_tally_symbols (h, data)
    are required.  */
 
 bfd_boolean
-bfd_i386linux_size_dynamic_sections (output_bfd, info)
-     bfd *output_bfd;
-     struct bfd_link_info *info;
+bfd_i386linux_size_dynamic_sections (bfd *output_bfd,
+				     struct bfd_link_info *info)
 {
   struct fixup *f;
   asection *s;
@@ -561,7 +532,7 @@ bfd_i386linux_size_dynamic_sections (output_bfd, info)
   /* First find the fixups... */
   linux_link_hash_traverse (linux_hash_table (info),
 			    linux_tally_symbols,
-			    (PTR) info);
+			    info);
 
   /* If there are builtin fixups, leave room for a marker.  This is
      used by the dynamic linker so that it knows that all that follow
@@ -603,9 +574,8 @@ bfd_i386linux_size_dynamic_sections (output_bfd, info)
    the stuff we need.  */
 
 static bfd_boolean
-linux_finish_dynamic_link (output_bfd, info)
-     bfd *output_bfd;
-     struct bfd_link_info *info;
+linux_finish_dynamic_link (bfd *output_bfd,
+			   struct bfd_link_info *info)
 {
   asection *s, *os, *is;
   bfd_byte *fixup_table;
@@ -755,7 +725,7 @@ linux_finish_dynamic_link (output_bfd, info)
 		SEEK_SET) != 0)
     return FALSE;
 
-  if (bfd_bwrite ((PTR) s->contents, s->size, output_bfd) != s->size)
+  if (bfd_bwrite (s->contents, s->size, output_bfd) != s->size)
     return FALSE;
 
   return TRUE;
diff --git a/bfd/i386lynx.c b/bfd/i386lynx.c
index 0a1b854..d373e2a 100644
--- a/bfd/i386lynx.c
+++ b/bfd/i386lynx.c
@@ -1,6 +1,6 @@
 /* BFD back-end for i386 a.out binaries under LynxOS.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2001, 2002,
-   2003, 2005, 2007, 2009, 2010 Free Software Foundation, Inc.
+   2003, 2005, 2007, 2009, 2010, 2012  Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -52,7 +52,7 @@
 	NAME(aout,swap_exec_header_out) (abfd, execp, &exec_bytes);	      \
 									      \
 	if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0		      \
-	    || bfd_bwrite ((PTR) &exec_bytes, (bfd_size_type) EXEC_BYTES_SIZE, \
+	    || bfd_bwrite (&exec_bytes, (bfd_size_type) EXEC_BYTES_SIZE, \
 			  abfd) != EXEC_BYTES_SIZE)			      \
 	  return FALSE;							      \
 	/* Now write out reloc info, followed by syms and strings */	      \
@@ -84,22 +84,6 @@
 #include "libaout.h"
 #include "aout/aout64.h"
 
-void NAME (lynx,swap_std_reloc_out)
-  PARAMS ((bfd *, arelent *, struct reloc_std_external *));
-void NAME (lynx,swap_ext_reloc_out)
-  PARAMS ((bfd *, arelent *, struct reloc_ext_external *));
-void NAME (lynx,swap_ext_reloc_in)
-  PARAMS ((bfd *, struct reloc_ext_external *, arelent *, asymbol **,
-	   bfd_size_type));
-void NAME (lynx,swap_std_reloc_in)
-  PARAMS ((bfd *, struct reloc_std_external *, arelent *, asymbol **,
-	   bfd_size_type));
-bfd_boolean NAME (lynx,slurp_reloc_table)
-  PARAMS ((bfd *, sec_ptr, asymbol **));
-bfd_boolean NAME (lynx,squirt_out_relocs)
-  PARAMS ((bfd *, asection *));
-long NAME (lynx,canonicalize_reloc)
-  PARAMS ((bfd *, sec_ptr, arelent **, asymbol **));
 
 #ifdef LYNX_CORE
 
@@ -124,11 +108,10 @@ extern reloc_howto_type aout_32_std_howto_table[];
 /* Standard reloc stuff */
 /* Output standard relocation information to a file in target byte order. */
 
-void
-NAME(lynx,swap_std_reloc_out) (abfd, g, natptr)
-     bfd *abfd;
-     arelent *g;
-     struct reloc_std_external *natptr;
+static void
+NAME(lynx,swap_std_reloc_out) (bfd *abfd,
+			       arelent *g,
+			       struct reloc_std_external *natptr)
 {
   int r_index;
   asymbol *sym = *(g->sym_ptr_ptr);
@@ -157,7 +140,6 @@ NAME(lynx,swap_std_reloc_out) (abfd, g, natptr)
      check for that here
   */
 
-
   if (bfd_is_com_section (output_section)
       || bfd_is_abs_section (output_section)
       || bfd_is_und_section (output_section))
@@ -216,11 +198,10 @@ NAME(lynx,swap_std_reloc_out) (abfd, g, natptr)
 /* Extended stuff */
 /* Output extended relocation information to a file in target byte order. */
 
-void
-NAME(lynx,swap_ext_reloc_out) (abfd, g, natptr)
-     bfd *abfd;
-     arelent *g;
-     register struct reloc_ext_external *natptr;
+static void
+NAME(lynx,swap_ext_reloc_out) (bfd *abfd,
+			       arelent *g,
+			       struct reloc_ext_external *natptr)
 {
   int r_index;
   int r_extern;
@@ -302,11 +283,14 @@ NAME(lynx,swap_ext_reloc_out) (abfd, g, natptr)
 
 
 #define MOVE_ADDRESS(ad)       						\
-  if (r_extern) {							\
+  if (r_extern)								\
+    {									\
    /* undefined symbol */						\
      cache_ptr->sym_ptr_ptr = symbols + r_index;			\
      cache_ptr->addend = ad;						\
-     } else {								\
+    }									\
+  else									\
+    {									\
     /* defined, section relative. replace symbol with pointer to    	\
        symbol which points to section  */				\
     switch (r_index) {							\
@@ -334,13 +318,12 @@ NAME(lynx,swap_ext_reloc_out) (abfd, g, natptr)
     }									\
   }     								\
 
-void
-NAME(lynx,swap_ext_reloc_in) (abfd, bytes, cache_ptr, symbols, symcount)
-     bfd *abfd;
-     struct reloc_ext_external *bytes;
-     arelent *cache_ptr;
-     asymbol **symbols;
-     bfd_size_type symcount ATTRIBUTE_UNUSED;
+static void
+NAME(lynx,swap_ext_reloc_in) (bfd *abfd,
+			      struct reloc_ext_external *bytes,
+			      arelent *cache_ptr,
+			      asymbol **symbols,
+			      bfd_size_type symcount ATTRIBUTE_UNUSED)
 {
   int r_index;
   int r_extern;
@@ -358,13 +341,12 @@ NAME(lynx,swap_ext_reloc_in) (abfd, bytes, cache_ptr, symbols, symcount)
   MOVE_ADDRESS (GET_SWORD (abfd, bytes->r_addend));
 }
 
-void
-NAME(lynx,swap_std_reloc_in) (abfd, bytes, cache_ptr, symbols, symcount)
-     bfd *abfd;
-     struct reloc_std_external *bytes;
-     arelent *cache_ptr;
-     asymbol **symbols;
-     bfd_size_type symcount ATTRIBUTE_UNUSED;
+static void
+NAME(lynx,swap_std_reloc_in) (bfd *abfd,
+			      struct reloc_std_external *bytes,
+			      arelent *cache_ptr,
+			      asymbol **symbols,
+			      bfd_size_type symcount ATTRIBUTE_UNUSED)
 {
   int r_index;
   int r_extern;
@@ -388,15 +370,14 @@ NAME(lynx,swap_std_reloc_in) (abfd, bytes, cache_ptr, symbols, symcount)
 
 /* Reloc hackery */
 
-bfd_boolean
-NAME(lynx,slurp_reloc_table) (abfd, asect, symbols)
-     bfd *abfd;
-     sec_ptr asect;
-     asymbol **symbols;
+static bfd_boolean
+NAME(lynx,slurp_reloc_table) (bfd *abfd,
+			      sec_ptr asect,
+			      asymbol **symbols)
 {
   bfd_size_type count;
   bfd_size_type reloc_size;
-  PTR relocs;
+  void * relocs;
   arelent *reloc_cache;
   size_t each_size;
 
@@ -433,7 +414,7 @@ doit:
   if (!reloc_cache && count != 0)
     return FALSE;
 
-  relocs = (PTR) bfd_alloc (abfd, reloc_size);
+  relocs = bfd_alloc (abfd, reloc_size);
   if (!relocs && reloc_size != 0)
     {
       free (reloc_cache);
@@ -449,7 +430,7 @@ doit:
 
   if (each_size == RELOC_EXT_SIZE)
     {
-      register struct reloc_ext_external *rptr = (struct reloc_ext_external *) relocs;
+      struct reloc_ext_external *rptr = (struct reloc_ext_external *) relocs;
       unsigned int counter = 0;
       arelent *cache_ptr = reloc_cache;
 
@@ -461,7 +442,7 @@ doit:
     }
   else
     {
-      register struct reloc_std_external *rptr = (struct reloc_std_external *) relocs;
+      struct reloc_std_external *rptr = (struct reloc_std_external *) relocs;
       unsigned int counter = 0;
       arelent *cache_ptr = reloc_cache;
 
@@ -483,15 +464,12 @@ doit:
 
 /* Write out a relocation section into an object file.  */
 
-bfd_boolean
-NAME(lynx,squirt_out_relocs) (abfd, section)
-     bfd *abfd;
-     asection *section;
+static bfd_boolean
+NAME(lynx,squirt_out_relocs) (bfd *abfd, asection *section)
 {
   arelent **generic;
   unsigned char *native, *natptr;
   size_t each_size;
-
   unsigned int count = section->reloc_count;
   bfd_size_type natsize;
 
@@ -522,7 +500,7 @@ NAME(lynx,squirt_out_relocs) (abfd, section)
 	NAME(lynx,swap_std_reloc_out) (abfd, *generic, (struct reloc_std_external *) natptr);
     }
 
-  if (bfd_bwrite ((PTR) native, natsize, abfd) != natsize)
+  if (bfd_bwrite (native, natsize, abfd) != natsize)
     {
       bfd_release (abfd, native);
       return FALSE;
@@ -533,12 +511,11 @@ NAME(lynx,squirt_out_relocs) (abfd, section)
 }
 
 /* This is stupid.  This function should be a boolean predicate */
-long
-NAME(lynx,canonicalize_reloc) (abfd, section, relptr, symbols)
-     bfd *abfd;
-     sec_ptr section;
-     arelent **relptr;
-     asymbol **symbols;
+static long
+NAME(lynx,canonicalize_reloc) (bfd *abfd,
+			       sec_ptr section,
+			       arelent **relptr,
+			       asymbol **symbols)
 {
   arelent *tblptr = section->relocation;
   unsigned int count;
diff --git a/bfd/i386mach3.c b/bfd/i386mach3.c
index 8402bdf..74b5e5e 100644
--- a/bfd/i386mach3.c
+++ b/bfd/i386mach3.c
@@ -1,6 +1,6 @@
 /* BFD back-end for i386 a.out binaries.
-   Copyright 1990, 1991, 1993, 1994, 1995, 1997, 2001, 2002, 2003, 2005, 2007
-   Free Software Foundation, Inc.
+   Copyright 1990, 1991, 1993, 1994, 1995, 1997, 2001, 2002, 2003, 2005, 2007,
+   2012  Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -51,9 +51,11 @@
 #define MY(OP) CONCAT2 (i386mach3_,OP)
 #define TARGETNAME "a.out-mach3"
 
-static bfd_boolean MY (set_sizes) PARAMS ((bfd *));
+static bfd_boolean MY (set_sizes) (bfd *);
 #define MY_backend_data &MY(backend_data)
-static const struct aout_backend_data MY(backend_data) = {
+
+static const struct aout_backend_data MY(backend_data) =
+{
   0,				/* zmagic contiguous */
   1,				/* text incl header */
   0,				/* entry is text address */
diff --git a/bfd/i386msdos.c b/bfd/i386msdos.c
index b67b13e..ed7d896 100644
--- a/bfd/i386msdos.c
+++ b/bfd/i386msdos.c
@@ -1,6 +1,7 @@
 /* BFD back-end for MS-DOS executables.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2001, 2002,
-   2003, 2004, 2005, 2006, 2007, 2009, 2011 Free Software Foundation, Inc.
+   2003, 2004, 2005, 2006, 2007, 2009, 2011, 2012
+   Free Software Foundation, Inc.
    Written by Bryan Ford of the University of Utah.
 
    Contributed by the Center for Software Science at the
@@ -228,7 +229,7 @@ const bfd_target i386msdos_vec =
 
     NULL,
 
-    (PTR) 0
+    NULL
   };
 
 
diff --git a/bfd/i386os9k.c b/bfd/i386os9k.c
index 3beb8a3..cea63bd 100644
--- a/bfd/i386os9k.c
+++ b/bfd/i386os9k.c
@@ -1,6 +1,6 @@
 /* BFD back-end for os9000 i386 binaries.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001, 2002,
-   2004, 2005, 2006, 2007, 2009, 2011 Free Software Foundation, Inc.
+   2004, 2005, 2006, 2007, 2009, 2011, 2012  Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -120,7 +120,7 @@ os9k_object_p (bfd *abfd)
   struct internal_exec anexec;
   mh_com exec_bytes;
 
-  if (bfd_bread ((PTR) &exec_bytes, (bfd_size_type) MHCOM_BYTES_SIZE, abfd)
+  if (bfd_bread (&exec_bytes, (bfd_size_type) MHCOM_BYTES_SIZE, abfd)
       != MHCOM_BYTES_SIZE)
     {
       if (bfd_get_error () != bfd_error_system_call)
@@ -221,5 +221,5 @@ const bfd_target i386os9k_vec =
 
     NULL,
 
-    (PTR) 0,
+    NULL,
   };
diff --git a/bfd/irix-core.c b/bfd/irix-core.c
index 7fd5109..9a39929 100644
--- a/bfd/irix-core.c
+++ b/bfd/irix-core.c
@@ -1,6 +1,6 @@
 /* BFD back-end for Irix core files.
    Copyright 1993, 1994, 1996, 1999, 2001, 2002, 2004, 2005, 2006, 2007,
-   2010, 2011 Free Software Foundation, Inc.
+   2010, 2011, 2012  Free Software Foundation, Inc.
    Written by Stu Grossman, Cygnus Support.
    Converted to back-end form by Ian Lance Taylor, Cygnus Support
 
@@ -62,7 +62,7 @@ do_sections64 (bfd *abfd, struct coreout *coreout)
 
   for (i = 0; i < coreout->c_nvmap; i++)
     {
-      val = bfd_bread ((PTR) &vmap, (bfd_size_type) sizeof vmap, abfd);
+      val = bfd_bread (&vmap, (bfd_size_type) sizeof vmap, abfd);
       if (val != sizeof vmap)
 	break;
 
@@ -110,7 +110,7 @@ do_sections (bfd *abfd, struct coreout *coreout)
 
   for (i = 0; i < coreout->c_nvmap; i++)
     {
-      val = bfd_bread ((PTR) &vmap, (bfd_size_type) sizeof vmap, abfd);
+      val = bfd_bread (&vmap, (bfd_size_type) sizeof vmap, abfd);
       if (val != sizeof vmap)
 	break;
 
@@ -175,7 +175,7 @@ irix_core_core_file_p (bfd *abfd)
   struct idesc *idg, *idf, *ids;
   bfd_size_type amt;
 
-  val = bfd_bread ((PTR) &coreout, (bfd_size_type) sizeof coreout, abfd);
+  val = bfd_bread (&coreout, (bfd_size_type) sizeof coreout, abfd);
   if (val != sizeof coreout)
     {
       if (bfd_get_error () != bfd_error_system_call)
@@ -328,7 +328,7 @@ const bfd_target irix_core_vec =
 
     NULL,
 
-    (PTR) 0			/* backend_data */
+    NULL			/* backend_data */
   };
 
 #endif /* IRIX_CORE */
diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h
index ccc6c65..baffaea 100644
--- a/bfd/libbfd-in.h
+++ b/bfd/libbfd-in.h
@@ -3,7 +3,7 @@
 
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
    1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
-   2010, 2011
+   2010, 2011, 2012
    Free Software Foundation, Inc.
 
    Written by Cygnus Support.
@@ -64,16 +64,17 @@ struct section_hash_entry
 /* tdata for an archive.  For an input archive, cache
    needs to be free()'d.  For an output archive, symdefs do.  */
 
-struct artdata {
+struct artdata
+{
   file_ptr first_file_filepos;
   /* Speed up searching the armap */
   htab_t cache;
-  bfd *archive_head;		/* Only interesting in output routines */
-  carsym *symdefs;		/* the symdef entries */
-  symindex symdef_count;	/* how many there are */
-  char *extended_names;		/* clever intel extension */
-  bfd_size_type extended_names_size; /* Size of extended names */
-  /* when more compilers are standard C, this can be a time_t */
+  bfd *archive_head;		/* Only interesting in output routines.  */
+  carsym *symdefs;		/* The symdef entries.  */
+  symindex symdef_count;	/* How many there are.  */
+  char *extended_names;		/* Clever intel extension.  */
+  bfd_size_type extended_names_size; /* Size of extended names.  */
+  /* When more compilers are standard C, this can be a time_t.  */
   long  armap_timestamp;	/* Timestamp value written into armap.
 				   This is used for BSD archives to check
 				   that the timestamp is recent enough
@@ -88,12 +89,13 @@ struct artdata {
 #define bfd_ardata(bfd) ((bfd)->tdata.aout_ar_data)
 
 /* Goes in bfd's arelt_data slot */
-struct areltdata {
-  char * arch_header;		/* it's actually a string */
-  unsigned int parsed_size;	/* octets of filesize not including ar_hdr */
-  unsigned int extra_size;	/* BSD4.4: extra bytes after the header.  */
-  char *filename;		/* null-terminated */
-  file_ptr origin;		/* for element of a thin archive */
+struct areltdata
+{
+  char * arch_header;		/* It's actually a string.  */
+  bfd_size_type parsed_size;	/* Octets of filesize not including ar_hdr.  */
+  bfd_size_type extra_size;	/* BSD4.4: extra bytes after the header.  */
+  char *filename;		/* Null-terminated.  */
+  file_ptr origin;		/* For element of a thin archive.  */
 };
 
 #define arelt_size(bfd) (((struct areltdata *)((bfd)->arelt_data))->parsed_size)
@@ -115,6 +117,7 @@ extern void *bfd_zmalloc2
 
 extern void _bfd_default_error_handler (const char *s, ...);
 extern bfd_error_handler_type _bfd_error_handler;
+extern bfd_assert_handler_type _bfd_assert_handler;
 
 /* These routines allocate and free things on the BFD's objalloc.  */
 
@@ -203,6 +206,8 @@ extern void *_bfd_generic_read_ar_hdr
   (bfd *);
 extern void _bfd_ar_spacepad
   (char *, size_t, const char *, long);
+extern bfd_boolean _bfd_ar_sizepad
+  (char *, size_t, bfd_size_type);
 
 extern void *_bfd_generic_read_ar_hdr_mag
   (bfd *, const char *);
@@ -454,7 +459,7 @@ extern bfd_boolean _bfd_generic_set_section_contents
   ((bfd_boolean (*) (bfd *, struct bfd_link_info *)) \
    bfd_false)
 #define _bfd_nolink_bfd_lookup_section_flags \
-  ((void (*) (struct bfd_link_info *, struct flag_info *)) \
+  ((bfd_boolean (*) (struct bfd_link_info *, struct flag_info *, asection *)) \
    bfd_0)
 #define _bfd_nolink_bfd_merge_sections \
   ((bfd_boolean (*) (bfd *, struct bfd_link_info *)) \
@@ -548,7 +553,15 @@ bfd_boolean _bfd_generic_find_line
 /* Find inliner info after calling bfd_find_nearest_line. */
 extern bfd_boolean _bfd_dwarf2_find_inliner_info
   (bfd *, const char **, const char **, unsigned int *, void **);
-  
+
+/* Read DWARF 2 debugging information. */
+extern bfd_boolean _bfd_dwarf2_slurp_debug_info
+  (bfd *, bfd *, const struct dwarf_debug_section *, asymbol **, void **);
+
+/* Clean up the data used to handle DWARF 2 debugging information. */
+extern void _bfd_dwarf2_cleanup_debug_info
+  (bfd *, void **);
+
 /* Create a new section entry.  */
 extern struct bfd_hash_entry *bfd_section_hash_newfunc
   (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
diff --git a/bfd/libbfd.h b/bfd/libbfd.h
index d08c2ba..1d95fd8 100644
--- a/bfd/libbfd.h
+++ b/bfd/libbfd.h
@@ -8,7 +8,7 @@
 
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
    1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
-   2010, 2011
+   2010, 2011, 2012
    Free Software Foundation, Inc.
 
    Written by Cygnus Support.
@@ -69,16 +69,17 @@ struct section_hash_entry
 /* tdata for an archive.  For an input archive, cache
    needs to be free()'d.  For an output archive, symdefs do.  */
 
-struct artdata {
+struct artdata
+{
   file_ptr first_file_filepos;
   /* Speed up searching the armap */
   htab_t cache;
-  bfd *archive_head;		/* Only interesting in output routines */
-  carsym *symdefs;		/* the symdef entries */
-  symindex symdef_count;	/* how many there are */
-  char *extended_names;		/* clever intel extension */
-  bfd_size_type extended_names_size; /* Size of extended names */
-  /* when more compilers are standard C, this can be a time_t */
+  bfd *archive_head;		/* Only interesting in output routines.  */
+  carsym *symdefs;		/* The symdef entries.  */
+  symindex symdef_count;	/* How many there are.  */
+  char *extended_names;		/* Clever intel extension.  */
+  bfd_size_type extended_names_size; /* Size of extended names.  */
+  /* When more compilers are standard C, this can be a time_t.  */
   long  armap_timestamp;	/* Timestamp value written into armap.
 				   This is used for BSD archives to check
 				   that the timestamp is recent enough
@@ -93,12 +94,13 @@ struct artdata {
 #define bfd_ardata(bfd) ((bfd)->tdata.aout_ar_data)
 
 /* Goes in bfd's arelt_data slot */
-struct areltdata {
-  char * arch_header;		/* it's actually a string */
-  unsigned int parsed_size;	/* octets of filesize not including ar_hdr */
-  unsigned int extra_size;	/* BSD4.4: extra bytes after the header.  */
-  char *filename;		/* null-terminated */
-  file_ptr origin;		/* for element of a thin archive */
+struct areltdata
+{
+  char * arch_header;		/* It's actually a string.  */
+  bfd_size_type parsed_size;	/* Octets of filesize not including ar_hdr.  */
+  bfd_size_type extra_size;	/* BSD4.4: extra bytes after the header.  */
+  char *filename;		/* Null-terminated.  */
+  file_ptr origin;		/* For element of a thin archive.  */
 };
 
 #define arelt_size(bfd) (((struct areltdata *)((bfd)->arelt_data))->parsed_size)
@@ -120,6 +122,7 @@ extern void *bfd_zmalloc2
 
 extern void _bfd_default_error_handler (const char *s, ...);
 extern bfd_error_handler_type _bfd_error_handler;
+extern bfd_assert_handler_type _bfd_assert_handler;
 
 /* These routines allocate and free things on the BFD's objalloc.  */
 
@@ -208,6 +211,8 @@ extern void *_bfd_generic_read_ar_hdr
   (bfd *);
 extern void _bfd_ar_spacepad
   (char *, size_t, const char *, long);
+extern bfd_boolean _bfd_ar_sizepad
+  (char *, size_t, bfd_size_type);
 
 extern void *_bfd_generic_read_ar_hdr_mag
   (bfd *, const char *);
@@ -459,7 +464,7 @@ extern bfd_boolean _bfd_generic_set_section_contents
   ((bfd_boolean (*) (bfd *, struct bfd_link_info *)) \
    bfd_false)
 #define _bfd_nolink_bfd_lookup_section_flags \
-  ((void (*) (struct bfd_link_info *, struct flag_info *)) \
+  ((bfd_boolean (*) (struct bfd_link_info *, struct flag_info *, asection *)) \
    bfd_0)
 #define _bfd_nolink_bfd_merge_sections \
   ((bfd_boolean (*) (bfd *, struct bfd_link_info *)) \
@@ -553,7 +558,15 @@ bfd_boolean _bfd_generic_find_line
 /* Find inliner info after calling bfd_find_nearest_line. */
 extern bfd_boolean _bfd_dwarf2_find_inliner_info
   (bfd *, const char **, const char **, unsigned int *, void **);
-  
+
+/* Read DWARF 2 debugging information. */
+extern bfd_boolean _bfd_dwarf2_slurp_debug_info
+  (bfd *, bfd *, const struct dwarf_debug_section *, asymbol **, void **);
+
+/* Clean up the data used to handle DWARF 2 debugging information. */
+extern void _bfd_dwarf2_cleanup_debug_info
+  (bfd *, void **);
+
 /* Create a new section entry.  */
 extern struct bfd_hash_entry *bfd_section_hash_newfunc
   (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
@@ -1002,6 +1015,10 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_SPARC_M44",
   "BFD_RELOC_SPARC_L44",
   "BFD_RELOC_SPARC_REGISTER",
+  "BFD_RELOC_SPARC_H34",
+  "BFD_RELOC_SPARC_SIZE32",
+  "BFD_RELOC_SPARC_SIZE64",
+  "BFD_RELOC_SPARC_WDISP10",
   "BFD_RELOC_SPARC_REV32",
   "BFD_RELOC_SPARC_TLS_GD_HI22",
   "BFD_RELOC_SPARC_TLS_GD_LO10",
@@ -1086,6 +1103,13 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_MIPS16_HI16",
   "BFD_RELOC_MIPS16_HI16_S",
   "BFD_RELOC_MIPS16_LO16",
+  "BFD_RELOC_MIPS16_TLS_GD",
+  "BFD_RELOC_MIPS16_TLS_LDM",
+  "BFD_RELOC_MIPS16_TLS_DTPREL_HI16",
+  "BFD_RELOC_MIPS16_TLS_DTPREL_LO16",
+  "BFD_RELOC_MIPS16_TLS_GOTTPREL",
+  "BFD_RELOC_MIPS16_TLS_TPREL_HI16",
+  "BFD_RELOC_MIPS16_TLS_TPREL_LO16",
   "BFD_RELOC_MIPS_LITERAL",
   "BFD_RELOC_MICROMIPS_LITERAL",
   "BFD_RELOC_MICROMIPS_7_PCREL_S1",
@@ -1206,6 +1230,17 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_MN10300_RELATIVE",
   "BFD_RELOC_MN10300_SYM_DIFF",
   "BFD_RELOC_MN10300_ALIGN",
+  "BFD_RELOC_MN10300_TLS_GD",
+  "BFD_RELOC_MN10300_TLS_LD",
+  "BFD_RELOC_MN10300_TLS_LDO",
+  "BFD_RELOC_MN10300_TLS_GOTIE",
+  "BFD_RELOC_MN10300_TLS_IE",
+  "BFD_RELOC_MN10300_TLS_LE",
+  "BFD_RELOC_MN10300_TLS_DTPMOD",
+  "BFD_RELOC_MN10300_TLS_DTPOFF",
+  "BFD_RELOC_MN10300_TLS_TPOFF",
+  "BFD_RELOC_MN10300_32_PCREL",
+  "BFD_RELOC_MN10300_16_PCREL",
 
   "BFD_RELOC_386_GOT32",
   "BFD_RELOC_386_PLT32",
@@ -1308,6 +1343,23 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_PPC_EMB_RELST_HA",
   "BFD_RELOC_PPC_EMB_BIT_FLD",
   "BFD_RELOC_PPC_EMB_RELSDA",
+  "BFD_RELOC_PPC_VLE_REL8",
+  "BFD_RELOC_PPC_VLE_REL15",
+  "BFD_RELOC_PPC_VLE_REL24",
+  "BFD_RELOC_PPC_VLE_LO16A",
+  "BFD_RELOC_PPC_VLE_LO16D",
+  "BFD_RELOC_PPC_VLE_HI16A",
+  "BFD_RELOC_PPC_VLE_HI16D",
+  "BFD_RELOC_PPC_VLE_HA16A",
+  "BFD_RELOC_PPC_VLE_HA16D",
+  "BFD_RELOC_PPC_VLE_SDA21",
+  "BFD_RELOC_PPC_VLE_SDA21_LO",
+  "BFD_RELOC_PPC_VLE_SDAREL_LO16A",
+  "BFD_RELOC_PPC_VLE_SDAREL_LO16D",
+  "BFD_RELOC_PPC_VLE_SDAREL_HI16A",
+  "BFD_RELOC_PPC_VLE_SDAREL_HI16D",
+  "BFD_RELOC_PPC_VLE_SDAREL_HA16A",
+  "BFD_RELOC_PPC_VLE_SDAREL_HA16D",
   "BFD_RELOC_PPC64_HIGHER",
   "BFD_RELOC_PPC64_HIGHER_S",
   "BFD_RELOC_PPC64_HIGHEST",
@@ -1714,8 +1766,6 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_V850_32_GOTOFF",
   "BFD_RELOC_V850_CODE",
   "BFD_RELOC_V850_DATA",
-  "BFD_RELOC_MN10300_32_PCREL",
-  "BFD_RELOC_MN10300_16_PCREL",
   "BFD_RELOC_TIC30_LDP",
   "BFD_RELOC_TIC54X_PARTLS7",
   "BFD_RELOC_TIC54X_PARTMS9",
@@ -1834,6 +1884,9 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_AVR_LDI",
   "BFD_RELOC_AVR_6",
   "BFD_RELOC_AVR_6_ADIW",
+  "BFD_RELOC_AVR_8_LO",
+  "BFD_RELOC_AVR_8_HI",
+  "BFD_RELOC_AVR_8_HLO",
   "BFD_RELOC_RL78_NEG8",
   "BFD_RELOC_RL78_NEG16",
   "BFD_RELOC_RL78_NEG24",
@@ -1943,6 +1996,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_390_GOT20",
   "BFD_RELOC_390_GOTPLT20",
   "BFD_RELOC_390_TLS_GOTIE20",
+  "BFD_RELOC_390_IRELATIVE",
   "BFD_RELOC_SCORE_GPREL15",
   "BFD_RELOC_SCORE_DUMMY2",
   "BFD_RELOC_SCORE_JMP",
@@ -2060,6 +2114,24 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_M68HC11_PAGE",
   "BFD_RELOC_M68HC11_24",
   "BFD_RELOC_M68HC12_5B",
+  "BFD_RELOC_XGATE_RL_JUMP",
+  "BFD_RELOC_XGATE_RL_GROUP",
+  "BFD_RELOC_XGATE_LO16",
+  "BFD_RELOC_XGATE_GPAGE",
+  "BFD_RELOC_XGATE_24",
+  "BFD_RELOC_XGATE_PCREL_9",
+  "BFD_RELOC_XGATE_PCREL_10",
+  "BFD_RELOC_XGATE_IMM8_LO",
+  "BFD_RELOC_XGATE_IMM8_HI",
+  "BFD_RELOC_XGATE_IMM3",
+  "BFD_RELOC_XGATE_IMM4",
+  "BFD_RELOC_XGATE_IMM5",
+  "BFD_RELOC_M68HC12_9B",
+  "BFD_RELOC_M68HC12_16B",
+  "BFD_RELOC_M68HC12_9_PCREL",
+  "BFD_RELOC_M68HC12_10_PCREL",
+  "BFD_RELOC_M68HC12_LO8XG",
+  "BFD_RELOC_M68HC12_HI8XG",
   "BFD_RELOC_16C_NUM08",
   "BFD_RELOC_16C_NUM08_C",
   "BFD_RELOC_16C_NUM16",
@@ -2318,6 +2390,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_LM32_JMP_SLOT",
   "BFD_RELOC_LM32_RELATIVE",
   "BFD_RELOC_MACH_O_SECTDIFF",
+  "BFD_RELOC_MACH_O_LOCAL_SECTDIFF",
   "BFD_RELOC_MACH_O_PAIR",
   "BFD_RELOC_MACH_O_X86_64_BRANCH32",
   "BFD_RELOC_MACH_O_X86_64_BRANCH8",
@@ -2386,6 +2459,12 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_TILEPRO_SHAMT_X1",
   "BFD_RELOC_TILEPRO_SHAMT_Y0",
   "BFD_RELOC_TILEPRO_SHAMT_Y1",
+  "BFD_RELOC_TILEPRO_TLS_GD_CALL",
+  "BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD",
+  "BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD",
+  "BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD",
+  "BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD",
+  "BFD_RELOC_TILEPRO_TLS_IE_LOAD",
   "BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD",
   "BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD",
   "BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO",
@@ -2405,6 +2484,14 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_TILEPRO_TLS_DTPMOD32",
   "BFD_RELOC_TILEPRO_TLS_DTPOFF32",
   "BFD_RELOC_TILEPRO_TLS_TPOFF32",
+  "BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE",
+  "BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE",
+  "BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO",
+  "BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO",
+  "BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI",
+  "BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI",
+  "BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA",
+  "BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA",
   "BFD_RELOC_TILEGX_HW0",
   "BFD_RELOC_TILEGX_HW1",
   "BFD_RELOC_TILEGX_HW2",
@@ -2462,52 +2549,44 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL",
   "BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT",
   "BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW1_GOT",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW1_GOT",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW2_GOT",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW2_GOT",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW3_GOT",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW3_GOT",
   "BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT",
   "BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT",
   "BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT",
   "BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_GOT",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_GOT",
   "BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD",
   "BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_GD",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_GD",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_GD",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_GD",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_GD",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_GD",
+  "BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE",
+  "BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE",
+  "BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE",
+  "BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE",
+  "BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE",
+  "BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE",
   "BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD",
   "BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD",
   "BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD",
   "BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_GD",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_GD",
   "BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE",
   "BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_IE",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_IE",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_IE",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_IE",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_IE",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_IE",
   "BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE",
   "BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE",
   "BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE",
   "BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE",
-  "BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_IE",
-  "BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_IE",
   "BFD_RELOC_TILEGX_TLS_DTPMOD64",
   "BFD_RELOC_TILEGX_TLS_DTPOFF64",
   "BFD_RELOC_TILEGX_TLS_TPOFF64",
   "BFD_RELOC_TILEGX_TLS_DTPMOD32",
   "BFD_RELOC_TILEGX_TLS_DTPOFF32",
   "BFD_RELOC_TILEGX_TLS_TPOFF32",
+  "BFD_RELOC_TILEGX_TLS_GD_CALL",
+  "BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD",
+  "BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD",
+  "BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD",
+  "BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD",
+  "BFD_RELOC_TILEGX_TLS_IE_LOAD",
+  "BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD",
+  "BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD",
+  "BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD",
+  "BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD",
   "BFD_RELOC_EPIPHANY_SIMM8",
   "BFD_RELOC_EPIPHANY_SIMM24",
   "BFD_RELOC_EPIPHANY_HIGH",
@@ -2531,8 +2610,8 @@ bfd_boolean bfd_generic_relax_section
 bfd_boolean bfd_generic_gc_sections
    (bfd *, struct bfd_link_info *);
 
-void bfd_generic_lookup_section_flags
-   (struct bfd_link_info *, struct flag_info *);
+bfd_boolean bfd_generic_lookup_section_flags
+   (struct bfd_link_info *, struct flag_info *, asection *);
 
 bfd_boolean bfd_generic_merge_sections
    (bfd *, struct bfd_link_info *);
@@ -2556,4 +2635,8 @@ const bfd_arch_info_type *bfd_default_compatible
 bfd_boolean bfd_default_scan
    (const struct bfd_arch_info *info, const char *string);
 
+void *bfd_arch_default_fill (bfd_size_type count,
+    bfd_boolean is_bigendian,
+    bfd_boolean code);
+
 /* Extracted from elf.c.  */
diff --git a/bfd/linker.c b/bfd/linker.c
index 7a01e11..3caec96 100644
--- a/bfd/linker.c
+++ b/bfd/linker.c
@@ -1,6 +1,6 @@
 /* linker.c -- BFD linker routines
    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
    Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support
 
@@ -810,6 +810,7 @@ void
 _bfd_generic_link_just_syms (asection *sec,
 			     struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
+  sec->sec_info_type = SEC_INFO_TYPE_JUST_SYMS;
   sec->output_section = bfd_abs_section_ptr;
   sec->output_offset = sec->vma;
 }
@@ -2664,7 +2665,14 @@ default_data_link_order (bfd *abfd,
 
   fill = link_order->u.data.contents;
   fill_size = link_order->u.data.size;
-  if (fill_size != 0 && fill_size < size)
+  if (fill_size == 0)
+    {
+      fill = abfd->arch_info->fill (size, bfd_big_endian (abfd),
+				    (sec->flags & SEC_CODE) != 0);
+      if (fill == NULL)
+	return FALSE;
+    }
+  else if (fill_size < size)
     {
       bfd_byte *p;
       fill = (bfd_byte *) bfd_malloc (size);
@@ -3123,6 +3131,76 @@ _bfd_generic_section_already_linked (bfd *abfd ATTRIBUTE_UNUSED,
   return FALSE;
 }
 
+/* Choose a neighbouring section to S in OBFD that will be output, or
+   the absolute section if ADDR is out of bounds of the neighbours.  */
+
+asection *
+_bfd_nearby_section (bfd *obfd, asection *s, bfd_vma addr)
+{
+  asection *next, *prev, *best;
+
+  /* Find preceding kept section.  */
+  for (prev = s->prev; prev != NULL; prev = prev->prev)
+    if ((prev->flags & SEC_EXCLUDE) == 0
+	&& !bfd_section_removed_from_list (obfd, prev))
+      break;
+
+  /* Find following kept section.  Start at prev->next because
+     other sections may have been added after S was removed.  */
+  if (s->prev != NULL)
+    next = s->prev->next;
+  else
+    next = s->owner->sections;
+  for (; next != NULL; next = next->next)
+    if ((next->flags & SEC_EXCLUDE) == 0
+	&& !bfd_section_removed_from_list (obfd, next))
+      break;
+
+  /* Choose better of two sections, based on flags.  The idea
+     is to choose a section that will be in the same segment
+     as S would have been if it was kept.  */
+  best = next;
+  if (prev == NULL)
+    {
+      if (next == NULL)
+	best = bfd_abs_section_ptr;
+    }
+  else if (next == NULL)
+    best = prev;
+  else if (((prev->flags ^ next->flags)
+	    & (SEC_ALLOC | SEC_THREAD_LOCAL | SEC_LOAD)) != 0)
+    {
+      if (((next->flags ^ s->flags)
+	   & (SEC_ALLOC | SEC_THREAD_LOCAL)) != 0
+	  /* We prefer to choose a loaded section.  Section S
+	     doesn't have SEC_LOAD set (it being excluded, that
+	     part of the flag processing didn't happen) so we
+	     can't compare that flag to those of NEXT and PREV.  */
+	  || ((prev->flags & SEC_LOAD) != 0
+	      && (next->flags & SEC_LOAD) == 0))
+	best = prev;
+    }
+  else if (((prev->flags ^ next->flags) & SEC_READONLY) != 0)
+    {
+      if (((next->flags ^ s->flags) & SEC_READONLY) != 0)
+	best = prev;
+    }
+  else if (((prev->flags ^ next->flags) & SEC_CODE) != 0)
+    {
+      if (((next->flags ^ s->flags) & SEC_CODE) != 0)
+	best = prev;
+    }
+  else
+    {
+      /* Flags we care about are the same.  Prefer the following
+	 section if that will result in a positive valued sym.  */
+      if (addr < next->vma)
+	best = prev;
+    }
+
+  return best;
+}
+
 /* Convert symbols in excluded output sections to use a kept section.  */
 
 static bfd_boolean
@@ -3139,68 +3217,10 @@ fix_syms (struct bfd_link_hash_entry *h, void *data)
 	  && (s->output_section->flags & SEC_EXCLUDE) != 0
 	  && bfd_section_removed_from_list (obfd, s->output_section))
 	{
-	  asection *op, *op1;
+	  asection *op;
 
 	  h->u.def.value += s->output_offset + s->output_section->vma;
-
-	  /* Find preceding kept section.  */
-	  for (op1 = s->output_section->prev; op1 != NULL; op1 = op1->prev)
-	    if ((op1->flags & SEC_EXCLUDE) == 0
-		&& !bfd_section_removed_from_list (obfd, op1))
-	      break;
-
-	  /* Find following kept section.  Start at prev->next because
-	     other sections may have been added after S was removed.  */
-	  if (s->output_section->prev != NULL)
-	    op = s->output_section->prev->next;
-	  else
-	    op = s->output_section->owner->sections;
-	  for (; op != NULL; op = op->next)
-	    if ((op->flags & SEC_EXCLUDE) == 0
-		&& !bfd_section_removed_from_list (obfd, op))
-	      break;
-
-	  /* Choose better of two sections, based on flags.  The idea
-	     is to choose a section that will be in the same segment
-	     as S would have been if it was kept.  */
-	  if (op1 == NULL)
-	    {
-	      if (op == NULL)
-		op = bfd_abs_section_ptr;
-	    }
-	  else if (op == NULL)
-	    op = op1;
-	  else if (((op1->flags ^ op->flags)
-		    & (SEC_ALLOC | SEC_THREAD_LOCAL | SEC_LOAD)) != 0)
-	    {
-	      if (((op->flags ^ s->flags)
-		   & (SEC_ALLOC | SEC_THREAD_LOCAL)) != 0
-		  /* We prefer to choose a loaded section.  Section S
-		     doesn't have SEC_LOAD set (it being excluded, that
-		     part of the flag processing didn't happen) so we
-		     can't compare that flag to those of OP and OP1.  */
-		  || ((op1->flags & SEC_LOAD) != 0
-		      && (op->flags & SEC_LOAD) == 0))
-		op = op1;
-	    }
-	  else if (((op1->flags ^ op->flags) & SEC_READONLY) != 0)
-	    {
-	      if (((op->flags ^ s->flags) & SEC_READONLY) != 0)
-		op = op1;
-	    }
-	  else if (((op1->flags ^ op->flags) & SEC_CODE) != 0)
-	    {
-	      if (((op->flags ^ s->flags) & SEC_CODE) != 0)
-		op = op1;
-	    }
-	  else
-	    {
-	      /* Flags we care about are the same.  Prefer the following
-		 section if that will result in a positive valued sym.  */
-	      if (h->u.def.value < op->vma)
-		op = op1;
-	    }
-
+	  op = _bfd_nearby_section (obfd, s->output_section, h->u.def.value);
 	  h->u.def.value -= op->vma;
 	  h->u.def.section = op;
 	}
diff --git a/bfd/lynx-core.c b/bfd/lynx-core.c
index ab6a834..0b4af04 100644
--- a/bfd/lynx-core.c
+++ b/bfd/lynx-core.c
@@ -58,13 +58,12 @@ struct lynx_core_struct
 /* Handle Lynx core dump file.  */
 
 static asection *
-make_bfd_asection (abfd, name, flags, size, vma, filepos)
-     bfd *abfd;
-     const char *name;
-     flagword flags;
-     bfd_size_type size;
-     bfd_vma vma;
-     file_ptr filepos;
+make_bfd_asection (bfd *abfd,
+		   const char *name,
+		   flagword flags,
+		   bfd_size_type size,
+		   bfd_vma vma,
+		   file_ptr filepos)
 {
   asection *asect;
   char *newname;
@@ -88,8 +87,7 @@ make_bfd_asection (abfd, name, flags, size, vma, filepos)
 }
 
 const bfd_target *
-lynx_core_file_p (abfd)
-     bfd *abfd;
+lynx_core_file_p (bfd *abfd)
 {
   int secnum;
   struct pssentry pss;
@@ -215,15 +213,13 @@ lynx_core_file_p (abfd)
 }
 
 char *
-lynx_core_file_failing_command (abfd)
-     bfd *abfd;
+lynx_core_file_failing_command (bfd *abfd)
 {
   return core_command (abfd);
 }
 
 int
-lynx_core_file_failing_signal (abfd)
-     bfd *abfd;
+lynx_core_file_failing_signal (bfd *abfd)
 {
   return core_signal (abfd);
 }
diff --git a/bfd/m68klinux.c b/bfd/m68klinux.c
index ab5a456..9bbbd44 100644
--- a/bfd/m68klinux.c
+++ b/bfd/m68klinux.c
@@ -1,6 +1,6 @@
 /* BFD back-end for linux flavored m68k a.out binaries.
    Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002,
-   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2011
+   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -51,15 +51,11 @@ extern const bfd_target MY(vec);
    becomes important.  */
 
 static void MY_final_link_callback
-  PARAMS ((bfd *, file_ptr *, file_ptr *, file_ptr *));
-static bfd_boolean m68klinux_bfd_final_link
-  PARAMS ((bfd *, struct bfd_link_info *));
-static bfd_boolean m68klinux_write_object_contents PARAMS ((bfd *));
+  (bfd *, file_ptr *, file_ptr *, file_ptr *);
 
 static bfd_boolean
-m68klinux_bfd_final_link (abfd, info)
-     bfd *abfd;
-     struct bfd_link_info *info;
+m68klinux_bfd_final_link (bfd *abfd,
+			  struct bfd_link_info *info)
 {
   obj_aout_subformat (abfd) = q_magic_format;
   return NAME(aout,final_link) (abfd, info, MY_final_link_callback);
@@ -70,8 +66,7 @@ m68klinux_bfd_final_link (abfd, info)
 /* Set the machine type correctly.  */
 
 static bfd_boolean
-m68klinux_write_object_contents (abfd)
-     bfd *abfd;
+m68klinux_write_object_contents (bfd *abfd)
 {
   struct external_exec exec_bytes;
   struct internal_exec *execp = exec_hdr (abfd);
@@ -171,31 +166,12 @@ struct linux_link_hash_table
   struct fixup *fixup_list;
 };
 
-static struct bfd_hash_entry *linux_link_hash_newfunc
-  PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
-static struct bfd_link_hash_table *linux_link_hash_table_create
-  PARAMS ((bfd *));
-static struct fixup *new_fixup
-  PARAMS ((struct bfd_link_info *, struct linux_link_hash_entry *,
-	   bfd_vma, int));
-static bfd_boolean linux_link_create_dynamic_sections
-  PARAMS ((bfd *, struct bfd_link_info *));
-static bfd_boolean linux_add_one_symbol
-  PARAMS ((struct bfd_link_info *, bfd *, const char *, flagword, asection *,
-	   bfd_vma, const char *, bfd_boolean, bfd_boolean,
-	   struct bfd_link_hash_entry **));
-static bfd_boolean linux_tally_symbols
-  PARAMS ((struct linux_link_hash_entry *, PTR));
-static bfd_boolean linux_finish_dynamic_link
-  PARAMS ((bfd *, struct bfd_link_info *));
-
 /* Routine to create an entry in an Linux link hash table.  */
 
 static struct bfd_hash_entry *
-linux_link_hash_newfunc (entry, table, string)
-     struct bfd_hash_entry *entry;
-     struct bfd_hash_table *table;
-     const char *string;
+linux_link_hash_newfunc (struct bfd_hash_entry *entry,
+			 struct bfd_hash_table *table,
+			 const char *string)
 {
   struct linux_link_hash_entry *ret = (struct linux_link_hash_entry *) entry;
 
@@ -222,8 +198,7 @@ linux_link_hash_newfunc (entry, table, string)
 /* Create a Linux link hash table.  */
 
 static struct bfd_link_hash_table *
-linux_link_hash_table_create (abfd)
-     bfd *abfd;
+linux_link_hash_table_create (bfd *abfd)
 {
   struct linux_link_hash_table *ret;
   bfd_size_type amt = sizeof (struct linux_link_hash_table);
@@ -262,7 +237,7 @@ linux_link_hash_table_create (abfd)
 #define linux_link_hash_traverse(table, func, info)			\
   (aout_link_hash_traverse						\
    (&(table)->root,							\
-    (bfd_boolean (*) PARAMS ((struct aout_link_hash_entry *, PTR))) (func),	\
+    (bfd_boolean (*) (struct aout_link_hash_entry *, void *)) (func),	\
     (info)))
 
 /* Get the Linux link hash table from the info structure.  This is
@@ -273,11 +248,10 @@ linux_link_hash_table_create (abfd)
 /* Store the information for a new fixup.  */
 
 static struct fixup *
-new_fixup (info, h, value, builtin)
-     struct bfd_link_info *info;
-     struct linux_link_hash_entry *h;
-     bfd_vma value;
-     int builtin;
+new_fixup (struct bfd_link_info *info,
+	   struct linux_link_hash_entry *h,
+	   bfd_vma value,
+	   int builtin)
 {
   struct fixup *f;
 
@@ -303,12 +277,11 @@ new_fixup (info, h, value, builtin)
    create it for now.  */
 
 static bfd_boolean
-linux_link_create_dynamic_sections (abfd, info)
-     bfd *abfd;
-     struct bfd_link_info *info ATTRIBUTE_UNUSED;
+linux_link_create_dynamic_sections (bfd *abfd,
+				    struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
   flagword flags;
-  register asection *s;
+  asection *s;
 
   /* Note that we set the SEC_IN_MEMORY flag.  */
   flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY;
@@ -330,18 +303,16 @@ linux_link_create_dynamic_sections (abfd, info)
    tweaking needed for dynamic linking support.  */
 
 static bfd_boolean
-linux_add_one_symbol (info, abfd, name, flags, section, value, string,
-		      copy, collect, hashp)
-     struct bfd_link_info *info;
-     bfd *abfd;
-     const char *name;
-     flagword flags;
-     asection *section;
-     bfd_vma value;
-     const char *string;
-     bfd_boolean copy;
-     bfd_boolean collect;
-     struct bfd_link_hash_entry **hashp;
+linux_add_one_symbol (struct bfd_link_info *info,
+		      bfd *abfd,
+		      const char *name,
+		      flagword flags,
+		      asection *section,
+		      bfd_vma value,
+		      const char *string,
+		      bfd_boolean copy,
+		      bfd_boolean collect,
+		      struct bfd_link_hash_entry **hashp)
 {
   struct linux_link_hash_entry *h;
   bfd_boolean insert;
@@ -430,9 +401,8 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string,
    This function is called via linux_link_hash_traverse.  */
 
 static bfd_boolean
-linux_tally_symbols (h, data)
-     struct linux_link_hash_entry *h;
-     PTR data;
+linux_tally_symbols (struct linux_link_hash_entry *h,
+		     void * data)
 {
   struct bfd_link_info *info = (struct bfd_link_info *) data;
   struct fixup *f, *f1;
@@ -553,9 +523,8 @@ linux_tally_symbols (h, data)
    are required.  */
 
 bfd_boolean
-bfd_m68klinux_size_dynamic_sections (output_bfd, info)
-     bfd *output_bfd;
-     struct bfd_link_info *info;
+bfd_m68klinux_size_dynamic_sections (bfd *output_bfd,
+				     struct bfd_link_info *info)
 {
   struct fixup *f;
   asection *s;
@@ -566,7 +535,7 @@ bfd_m68klinux_size_dynamic_sections (output_bfd, info)
   /* First find the fixups...  */
   linux_link_hash_traverse (linux_hash_table (info),
 			    linux_tally_symbols,
-			    (PTR) info);
+			    info);
 
   /* If there are builtin fixups, leave room for a marker.  This is
      used by the dynamic linker so that it knows that all that follow
@@ -611,9 +580,7 @@ bfd_m68klinux_size_dynamic_sections (output_bfd, info)
    the stuff we need.  */
 
 static bfd_boolean
-linux_finish_dynamic_link (output_bfd, info)
-     bfd *output_bfd;
-     struct bfd_link_info *info;
+linux_finish_dynamic_link (bfd *output_bfd, struct bfd_link_info *info)
 {
   asection *s, *os, *is;
   bfd_byte *fixup_table;
@@ -761,7 +728,7 @@ linux_finish_dynamic_link (output_bfd, info)
 		SEEK_SET) != 0)
     return FALSE;
 
-  if (bfd_bwrite ((PTR) s->contents, s->size, output_bfd) != s->size)
+  if (bfd_bwrite (s->contents, s->size, output_bfd) != s->size)
     return FALSE;
 
   return TRUE;
diff --git a/bfd/mach-o-i386.c b/bfd/mach-o-i386.c
index 1191560..e7688ab 100644
--- a/bfd/mach-o-i386.c
+++ b/bfd/mach-o-i386.c
@@ -63,6 +63,7 @@ bfd_mach_o_i386_mkobject (bfd *abfd)
 
 static reloc_howto_type i386_howto_table[]=
 {
+  /* 0 */
   HOWTO(BFD_RELOC_32, 0, 2, 32, FALSE, 0,
 	complain_overflow_bitfield,
 	NULL, "32",
@@ -79,6 +80,7 @@ static reloc_howto_type i386_howto_table[]=
 	complain_overflow_bitfield,
 	NULL, "DISP32",
 	FALSE, 0xffffffff, 0xffffffff, TRUE),
+  /* 4 */
   HOWTO(BFD_RELOC_16_PCREL, 0, 1, 16, TRUE, 0,
 	complain_overflow_bitfield,
 	NULL, "DISP16",
@@ -87,10 +89,27 @@ static reloc_howto_type i386_howto_table[]=
 	complain_overflow_bitfield,
 	NULL, "SECTDIFF_32",
 	FALSE, 0xffffffff, 0xffffffff, FALSE),
+  HOWTO(BFD_RELOC_MACH_O_LOCAL_SECTDIFF, 0, 2, 32, FALSE, 0,
+	complain_overflow_bitfield,
+	NULL, "LSECTDIFF_32",
+	FALSE, 0xffffffff, 0xffffffff, FALSE),
   HOWTO(BFD_RELOC_MACH_O_PAIR, 0, 2, 32, FALSE, 0,
 	complain_overflow_bitfield,
 	NULL, "PAIR_32",
 	FALSE, 0xffffffff, 0xffffffff, FALSE),
+  /* 8 */
+  HOWTO(BFD_RELOC_MACH_O_SECTDIFF, 0, 1, 16, FALSE, 0,
+	complain_overflow_bitfield,
+	NULL, "SECTDIFF_16",
+	FALSE, 0xffff, 0xffff, FALSE),
+  HOWTO(BFD_RELOC_MACH_O_LOCAL_SECTDIFF, 0, 1, 16, FALSE, 0,
+	complain_overflow_bitfield,
+	NULL, "LSECTDIFF_16",
+	FALSE, 0xffff, 0xffff, FALSE),
+  HOWTO(BFD_RELOC_MACH_O_PAIR, 0, 1, 16, FALSE, 0,
+	complain_overflow_bitfield,
+	NULL, "PAIR_16",
+	FALSE, 0xffff, 0xffff, FALSE),
 };
 
 static bfd_boolean
@@ -101,17 +120,43 @@ bfd_mach_o_i386_swap_reloc_in (arelent *res, bfd_mach_o_reloc_info *reloc)
       switch (reloc->r_type)
         {
         case BFD_MACH_O_GENERIC_RELOC_PAIR:
-          if (reloc->r_length != 2)
-            return FALSE;
-          res->howto = &i386_howto_table[6];
-          res->address = res[-1].address;
-          return TRUE;
+          if (reloc->r_length == 2)
+            {
+	      res->howto = &i386_howto_table[7];
+	      res->address = res[-1].address;
+	      return TRUE;
+            }
+          else if (reloc->r_length == 1)
+	    {
+	      res->howto = &i386_howto_table[10];
+	      res->address = res[-1].address;
+	      return TRUE;
+	    }
+          return FALSE;
         case BFD_MACH_O_GENERIC_RELOC_SECTDIFF:
+          if (reloc->r_length == 2)
+            {
+	      res->howto = &i386_howto_table[5];
+	      return TRUE;
+            }
+          else if (reloc->r_length == 1)
+            {
+	      res->howto = &i386_howto_table[8];
+	      return TRUE;
+            }
+          return FALSE;
         case BFD_MACH_O_GENERIC_RELOC_LOCAL_SECTDIFF:
-          if (reloc->r_length != 2)
-            return FALSE;
-          res->howto = &i386_howto_table[5];
-          return TRUE;
+          if (reloc->r_length == 2)
+            {
+	      res->howto = &i386_howto_table[6];
+	      return TRUE;
+            }
+          else if (reloc->r_length == 1)
+            {
+	      res->howto = &i386_howto_table[9];
+	      return TRUE;
+            }
+          return FALSE;
         default:
           return FALSE;
         }
@@ -178,20 +223,26 @@ bfd_mach_o_i386_swap_reloc_out (arelent *rel, bfd_mach_o_reloc_info *rinfo)
       rinfo->r_scattered = 1;
       rinfo->r_type = BFD_MACH_O_GENERIC_RELOC_SECTDIFF;
       rinfo->r_pcrel = 0;
-      rinfo->r_length = 2;
+      rinfo->r_length = rel->howto->size;
       rinfo->r_extern = 0;
-      rinfo->r_value = (*rel->sym_ptr_ptr)->value 
-        + (*rel->sym_ptr_ptr)->section->vma;
+      rinfo->r_value = rel->addend;
+      break;
+    case BFD_RELOC_MACH_O_LOCAL_SECTDIFF:
+      rinfo->r_scattered = 1;
+      rinfo->r_type = BFD_MACH_O_GENERIC_RELOC_LOCAL_SECTDIFF;
+      rinfo->r_pcrel = 0;
+      rinfo->r_length = rel->howto->size;
+      rinfo->r_extern = 0;
+      rinfo->r_value = rel->addend;
       break;
     case BFD_RELOC_MACH_O_PAIR:
       rinfo->r_address = 0;
       rinfo->r_scattered = 1;
       rinfo->r_type = BFD_MACH_O_GENERIC_RELOC_PAIR;
       rinfo->r_pcrel = 0;
-      rinfo->r_length = 2;
+      rinfo->r_length = rel->howto->size;
       rinfo->r_extern = 0;
-      rinfo->r_value = (*rel->sym_ptr_ptr)->value 
-        + (*rel->sym_ptr_ptr)->section->vma;
+      rinfo->r_value = rel->addend;
       break;
     default:
       return FALSE;
@@ -280,10 +331,66 @@ bfd_mach_o_i386_print_thread (bfd *abfd, bfd_mach_o_thread_flavour *thread,
   return FALSE;
 }
 
+static const mach_o_section_name_xlat text_section_names_xlat[] =
+  {
+    {	".symbol_stub",			"__symbol_stub",
+	SEC_CODE | SEC_LOAD,		BFD_MACH_O_S_SYMBOL_STUBS,
+	BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS,
+					0},
+    {	".picsymbol_stub",		"__picsymbol_stub",
+	SEC_CODE | SEC_LOAD,		BFD_MACH_O_S_SYMBOL_STUBS,
+	BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS,
+					0},
+    { NULL, NULL, 0, 0, 0, 0}
+  };
+
+static const mach_o_section_name_xlat data_section_names_xlat[] =
+  {
+    /* The first two are recognized by i386, but not emitted for x86 by
+       modern GCC.  */
+    {	".non_lazy_symbol_pointer",	"__nl_symbol_ptr",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS,
+	BFD_MACH_O_S_ATTR_NONE,		2},
+    {	".lazy_symbol_pointer",		"__la_symbol_ptr",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_LAZY_SYMBOL_POINTERS,
+	BFD_MACH_O_S_ATTR_NONE,		2},
+    {	".lazy_symbol_pointer2",	"__la_sym_ptr2",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_LAZY_SYMBOL_POINTERS,
+	BFD_MACH_O_S_ATTR_NONE,		2},
+    {	".lazy_symbol_pointer3",	"__la_sym_ptr3",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_LAZY_SYMBOL_POINTERS,
+	BFD_MACH_O_S_ATTR_NONE,		2},
+    { NULL, NULL, 0, 0, 0, 0}
+  };
+
+static const mach_o_section_name_xlat import_section_names_xlat[] =
+  {
+    {	".picsymbol_stub3",		"__jump_table",
+	SEC_CODE | SEC_LOAD,		BFD_MACH_O_S_SYMBOL_STUBS,
+	BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS 
+	| BFD_MACH_O_S_SELF_MODIFYING_CODE,
+					6},
+    {	".non_lazy_symbol_pointer_x86",	"__pointers",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS,
+	BFD_MACH_O_S_ATTR_NONE,		2},
+    { NULL, NULL, 0, 0, 0, 0}
+  };
+
+const mach_o_segment_name_xlat mach_o_i386_segsec_names_xlat[] =
+  {
+    { "__TEXT", text_section_names_xlat },
+    { "__DATA", data_section_names_xlat },
+    { "__IMPORT", import_section_names_xlat },
+    { NULL, NULL }
+  };
+
 #define bfd_mach_o_swap_reloc_in bfd_mach_o_i386_swap_reloc_in
 #define bfd_mach_o_swap_reloc_out bfd_mach_o_i386_swap_reloc_out
 #define bfd_mach_o_print_thread bfd_mach_o_i386_print_thread
 
+#define bfd_mach_o_tgt_seg_table mach_o_i386_segsec_names_xlat
+#define bfd_mach_o_section_type_valid_for_tgt NULL
+
 #define bfd_mach_o_bfd_reloc_type_lookup bfd_mach_o_i386_bfd_reloc_type_lookup 
 #define bfd_mach_o_bfd_reloc_name_lookup bfd_mach_o_i386_bfd_reloc_name_lookup
 
@@ -292,4 +399,5 @@ bfd_mach_o_i386_print_thread (bfd *abfd, bfd_mach_o_thread_flavour *thread,
 #define TARGET_ARCHITECTURE	bfd_arch_i386
 #define TARGET_BIG_ENDIAN 	0
 #define TARGET_ARCHIVE 		0
+#define TARGET_PRIORITY		0
 #include "mach-o-target.c"
diff --git a/bfd/mach-o-target.c b/bfd/mach-o-target.c
index 5e12f84..a2aa573 100644
--- a/bfd/mach-o-target.c
+++ b/bfd/mach-o-target.c
@@ -25,14 +25,12 @@
 #ifndef MACH_O_TARGET_COMMON_DEFINED
 #define MACH_O_TARGET_COMMON_DEFINED
 
-#define bfd_mach_o_close_and_cleanup                  _bfd_generic_close_and_cleanup
 #define bfd_mach_o_bfd_free_cached_info               _bfd_generic_bfd_free_cached_info
 #define bfd_mach_o_get_section_contents_in_window     _bfd_generic_get_section_contents_in_window
 #define bfd_mach_o_bfd_print_private_bfd_data	      _bfd_generic_bfd_print_private_bfd_data
 #define bfd_mach_o_bfd_is_target_special_symbol       ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
 #define bfd_mach_o_bfd_is_local_label_name            bfd_generic_is_local_label_name
 #define bfd_mach_o_get_lineno                         _bfd_nosymbols_get_lineno
-#define bfd_mach_o_find_nearest_line                  _bfd_nosymbols_find_nearest_line
 #define bfd_mach_o_find_inliner_info                  _bfd_nosymbols_find_inliner_info
 #define bfd_mach_o_bfd_make_debug_symbol              _bfd_nosymbols_bfd_make_debug_symbol
 #define bfd_mach_o_read_minisymbols                   _bfd_generic_read_minisymbols
@@ -48,7 +46,7 @@
 #define bfd_mach_o_bfd_final_link                     _bfd_generic_final_link
 #define bfd_mach_o_bfd_link_split_section             _bfd_generic_link_split_section
 #define bfd_mach_o_bfd_merge_private_bfd_data         _bfd_generic_bfd_merge_private_bfd_data
-#define bfd_mach_o_bfd_set_private_flags              _bfd_generic_bfd_set_private_flags
+#define bfd_mach_o_bfd_set_private_flags              bfd_mach_o_bfd_set_private_flags
 #define bfd_mach_o_get_section_contents               _bfd_generic_get_section_contents
 #define bfd_mach_o_bfd_gc_sections                    bfd_generic_gc_sections
 #define bfd_mach_o_bfd_lookup_section_flags           bfd_generic_lookup_section_flags
@@ -97,7 +95,9 @@ static const bfd_mach_o_backend_data TARGET_NAME_BACKEND =
   TARGET_ARCHITECTURE,
   bfd_mach_o_swap_reloc_in,
   bfd_mach_o_swap_reloc_out,
-  bfd_mach_o_print_thread
+  bfd_mach_o_print_thread,
+  bfd_mach_o_tgt_seg_table,
+  bfd_mach_o_section_type_valid_for_tgt
 };
 
 const bfd_target TARGET_NAME =
@@ -119,7 +119,7 @@ const bfd_target TARGET_NAME =
   '_',				/* symbol_leading_char.  */
   ' ',				/* ar_pad_char.  */
   16,				/* ar_max_namelen.  */
-  0,				/* match priority.  */
+  TARGET_PRIORITY,	/* match priority.  */
 
 #if TARGET_BIG_ENDIAN
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
diff --git a/bfd/mach-o-x86-64.c b/bfd/mach-o-x86-64.c
index 2248d97..232701e 100644
--- a/bfd/mach-o-x86-64.c
+++ b/bfd/mach-o-x86-64.c
@@ -224,21 +224,56 @@ bfd_mach_o_x86_64_swap_reloc_out (arelent *rel, bfd_mach_o_reloc_info *rinfo)
   rinfo->r_scattered = 0;
   switch (rel->howto->type)
     {
+    case BFD_RELOC_32:
+      rinfo->r_type = BFD_MACH_O_X86_64_RELOC_UNSIGNED;
+      rinfo->r_pcrel = 0;
+      rinfo->r_length = 2;
+      break;
     case BFD_RELOC_64:
       rinfo->r_type = BFD_MACH_O_X86_64_RELOC_UNSIGNED;
       rinfo->r_pcrel = 0;
       rinfo->r_length = 3;
       break;
     case BFD_RELOC_32_PCREL:
+      rinfo->r_type = BFD_MACH_O_X86_64_RELOC_SIGNED;
+      rinfo->r_pcrel = 1;
+      rinfo->r_length = 2;
+      break;
+    case BFD_RELOC_MACH_O_X86_64_PCREL32_1:
+      rinfo->r_type = BFD_MACH_O_X86_64_RELOC_SIGNED_1;
+      rinfo->r_pcrel = 1;
+      rinfo->r_length = 2;
+      break;
+    case BFD_RELOC_MACH_O_X86_64_PCREL32_2:
+      rinfo->r_type = BFD_MACH_O_X86_64_RELOC_SIGNED_2;
+      rinfo->r_pcrel = 1;
+      rinfo->r_length = 2;
+      break;
+    case BFD_RELOC_MACH_O_X86_64_PCREL32_4:
+      rinfo->r_type = BFD_MACH_O_X86_64_RELOC_SIGNED_4;
+      rinfo->r_pcrel = 1;
+      rinfo->r_length = 2;
+      break;
+    case BFD_RELOC_MACH_O_X86_64_BRANCH32:
       rinfo->r_type = BFD_MACH_O_X86_64_RELOC_BRANCH;
       rinfo->r_pcrel = 1;
       rinfo->r_length = 2;
       break;
+    case BFD_RELOC_MACH_O_X86_64_SUBTRACTOR32:
+      rinfo->r_type = BFD_MACH_O_X86_64_RELOC_SUBTRACTOR;
+      rinfo->r_pcrel = 0;
+      rinfo->r_length = 2;
+      break;
     case BFD_RELOC_MACH_O_X86_64_SUBTRACTOR64:
       rinfo->r_type = BFD_MACH_O_X86_64_RELOC_SUBTRACTOR;
       rinfo->r_pcrel = 0;
       rinfo->r_length = 3;
       break;
+    case BFD_RELOC_MACH_O_X86_64_GOT:
+      rinfo->r_type = BFD_MACH_O_X86_64_RELOC_GOT;
+      rinfo->r_pcrel = 1;
+      rinfo->r_length = 2;
+      break;
     case BFD_RELOC_MACH_O_X86_64_GOT_LOAD:
       rinfo->r_type = BFD_MACH_O_X86_64_RELOC_GOT_LOAD;
       rinfo->r_pcrel = 1;
@@ -281,16 +316,46 @@ bfd_mach_o_x86_64_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
   return NULL;
 }
 
+static bfd_boolean
+bfd_mach_o_section_type_valid_for_x86_64 (unsigned long val)
+{
+  if (val == BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS
+      || val == BFD_MACH_O_S_LAZY_SYMBOL_POINTERS
+      || val == BFD_MACH_O_S_SYMBOL_STUBS)
+    return FALSE;
+  return TRUE;
+}
+
+/* We want to bump the alignment of some sections.  */
+static const mach_o_section_name_xlat text_section_names_xlat[] =
+  {
+    {	".eh_frame",				"__eh_frame",
+	SEC_READONLY | SEC_DATA | SEC_LOAD,	BFD_MACH_O_S_COALESCED,
+	BFD_MACH_O_S_ATTR_LIVE_SUPPORT
+	| BFD_MACH_O_S_ATTR_STRIP_STATIC_SYMS
+	| BFD_MACH_O_S_ATTR_NO_TOC,		3},
+    { NULL, NULL, 0, 0, 0, 0}
+  };
+
+const mach_o_segment_name_xlat mach_o_x86_64_segsec_names_xlat[] =
+  {
+    { "__TEXT", text_section_names_xlat },
+    { NULL, NULL }
+  };
+
 #define bfd_mach_o_swap_reloc_in bfd_mach_o_x86_64_swap_reloc_in
 #define bfd_mach_o_swap_reloc_out bfd_mach_o_x86_64_swap_reloc_out
 
 #define bfd_mach_o_bfd_reloc_type_lookup bfd_mach_o_x86_64_bfd_reloc_type_lookup
 #define bfd_mach_o_bfd_reloc_name_lookup bfd_mach_o_x86_64_bfd_reloc_name_lookup
 #define bfd_mach_o_print_thread NULL
+#define bfd_mach_o_tgt_seg_table mach_o_x86_64_segsec_names_xlat
+#define bfd_mach_o_section_type_valid_for_tgt bfd_mach_o_section_type_valid_for_x86_64
 
 #define TARGET_NAME 		mach_o_x86_64_vec
 #define TARGET_STRING 		"mach-o-x86-64"
 #define TARGET_ARCHITECTURE	bfd_arch_i386
 #define TARGET_BIG_ENDIAN 	0
 #define TARGET_ARCHIVE 		0
+#define TARGET_PRIORITY		0
 #include "mach-o-target.c"
diff --git a/bfd/mach-o.c b/bfd/mach-o.c
index 0a614c3..1f9fc17 100644
--- a/bfd/mach-o.c
+++ b/bfd/mach-o.c
@@ -1,6 +1,6 @@
 /* Mach-O support for BFD.
    Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
-   2009, 2010, 2011
+   2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -29,6 +29,8 @@
 #include "mach-o/reloc.h"
 #include "mach-o/external.h"
 #include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
 
 #define bfd_mach_o_object_p bfd_mach_o_gen_object_p
 #define bfd_mach_o_core_p bfd_mach_o_gen_core_p
@@ -87,118 +89,314 @@ bfd_mach_o_wide_p (bfd *abfd)
    names.  Use of canonical names (such as .text or .debug_frame) is required
    by gdb.  */
 
-struct mach_o_section_name_xlat
-{
-  const char *bfd_name;
-  const char *mach_o_name;
-  flagword flags;
-};
-
-static const struct mach_o_section_name_xlat dwarf_section_names_xlat[] =
+/* __TEXT Segment.  */
+static const mach_o_section_name_xlat text_section_names_xlat[] =
   {
-    { ".debug_frame",    "__debug_frame",    SEC_DEBUGGING },
-    { ".debug_info",     "__debug_info",     SEC_DEBUGGING },
-    { ".debug_abbrev",   "__debug_abbrev",   SEC_DEBUGGING },
-    { ".debug_aranges",  "__debug_aranges",  SEC_DEBUGGING },
-    { ".debug_macinfo",  "__debug_macinfo",  SEC_DEBUGGING },
-    { ".debug_line",     "__debug_line",     SEC_DEBUGGING },
-    { ".debug_loc",      "__debug_loc",      SEC_DEBUGGING },
-    { ".debug_pubnames", "__debug_pubnames", SEC_DEBUGGING },
-    { ".debug_pubtypes", "__debug_pubtypes", SEC_DEBUGGING },
-    { ".debug_str",      "__debug_str",      SEC_DEBUGGING },
-    { ".debug_ranges",   "__debug_ranges",   SEC_DEBUGGING },
-    { NULL, NULL, 0}
+    {	".text",				"__text",	
+	SEC_CODE | SEC_LOAD,			BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS,	0},
+    {	".const",				"__const",
+	SEC_READONLY | SEC_DATA | SEC_LOAD,	BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NONE,			0},
+    {	".static_const",			"__static_const",
+	SEC_READONLY | SEC_DATA | SEC_LOAD,	BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NONE,			0},
+    {	".cstring",				"__cstring",
+	SEC_READONLY | SEC_DATA | SEC_LOAD | SEC_MERGE | SEC_STRINGS,
+						BFD_MACH_O_S_CSTRING_LITERALS,
+	BFD_MACH_O_S_ATTR_NONE,			0},
+    {	".literal4",				"__literal4",
+	SEC_READONLY | SEC_DATA | SEC_LOAD,	BFD_MACH_O_S_4BYTE_LITERALS,
+	BFD_MACH_O_S_ATTR_NONE,			2},
+    {	".literal8",				"__literal8",
+	SEC_READONLY | SEC_DATA | SEC_LOAD,	BFD_MACH_O_S_8BYTE_LITERALS,
+	BFD_MACH_O_S_ATTR_NONE,			3},
+    {	".literal16",				"__literal16",
+	SEC_READONLY | SEC_DATA | SEC_LOAD,	BFD_MACH_O_S_16BYTE_LITERALS,
+	BFD_MACH_O_S_ATTR_NONE,			4},
+    {	".constructor",				"__constructor",
+	SEC_CODE | SEC_LOAD,			BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NONE,			0},
+    {	".destructor",				"__destructor",
+	SEC_CODE | SEC_LOAD,			BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NONE,			0},
+    {	".eh_frame",				"__eh_frame",
+	SEC_READONLY | SEC_DATA | SEC_LOAD,	BFD_MACH_O_S_COALESCED,
+	BFD_MACH_O_S_ATTR_LIVE_SUPPORT
+	| BFD_MACH_O_S_ATTR_STRIP_STATIC_SYMS
+	| BFD_MACH_O_S_ATTR_NO_TOC,		2},
+    { NULL, NULL, 0, 0, 0, 0}
   };
 
-static const struct mach_o_section_name_xlat text_section_names_xlat[] =
+/* __DATA Segment.  */
+static const mach_o_section_name_xlat data_section_names_xlat[] =
   {
-    { ".text",     "__text",      SEC_CODE | SEC_LOAD },
-    { ".const",    "__const",     SEC_READONLY | SEC_DATA | SEC_LOAD },
-    { ".cstring",  "__cstring",   SEC_READONLY | SEC_DATA | SEC_LOAD },
-    { ".eh_frame", "__eh_frame",  SEC_READONLY | SEC_LOAD },
-    { NULL, NULL, 0}
+    {	".data",			"__data",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NONE,		0},
+    {	".bss",				"__bss",
+	SEC_NO_FLAGS,			BFD_MACH_O_S_ZEROFILL,
+	BFD_MACH_O_S_ATTR_NONE,		0},
+    {	".const_data",			"__const",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NONE,		0},
+    {	".static_data",			"__static_data",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NONE,		0},
+    {	".mod_init_func",		"__mod_init_func",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_MOD_INIT_FUNC_POINTERS,
+	BFD_MACH_O_S_ATTR_NONE,		2},
+    {	".mod_term_func",		"__mod_term_func",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_MOD_FINI_FUNC_POINTERS,
+	BFD_MACH_O_S_ATTR_NONE,		2},
+    {	".dyld",			"__dyld",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NONE,		0},
+    {	".cfstring",			"__cfstring",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NONE,		2},
+    { NULL, NULL, 0, 0, 0, 0}
   };
 
-static const struct mach_o_section_name_xlat data_section_names_xlat[] =
+/* __DWARF Segment.  */
+static const mach_o_section_name_xlat dwarf_section_names_xlat[] =
   {
-    { ".data",                "__data",          SEC_DATA | SEC_LOAD },
-    { ".const_data",          "__const",         SEC_DATA | SEC_LOAD },
-    { ".dyld",                "__dyld",          SEC_DATA | SEC_LOAD },
-    { ".lazy_symbol_ptr",     "__la_symbol_ptr", SEC_DATA | SEC_LOAD },
-    { ".non_lazy_symbol_ptr", "__nl_symbol_ptr", SEC_DATA | SEC_LOAD },
-    { ".bss",                 "__bss",           SEC_NO_FLAGS },
-    { NULL, NULL, 0}
+    {	".debug_frame",			"__debug_frame",
+	SEC_DEBUGGING,			BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_DEBUG,	0},
+    {	".debug_info",			"__debug_info",
+	SEC_DEBUGGING,			BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_DEBUG,	0},
+    {	".debug_abbrev",		"__debug_abbrev",
+	SEC_DEBUGGING,			BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_DEBUG,	0},
+    {	".debug_aranges",		"__debug_aranges",
+	SEC_DEBUGGING,			BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_DEBUG,	0},
+    {	".debug_macinfo",		"__debug_macinfo",
+	SEC_DEBUGGING,			BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_DEBUG,	0},
+    {	".debug_line",			"__debug_line",
+	SEC_DEBUGGING,			BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_DEBUG,	0},
+    {	".debug_loc",			"__debug_loc",
+	SEC_DEBUGGING,			BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_DEBUG,	0},
+    {	".debug_pubnames",		"__debug_pubnames",
+	SEC_DEBUGGING,			BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_DEBUG,	0},
+    {	".debug_pubtypes",		"__debug_pubtypes",
+	SEC_DEBUGGING,			BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_DEBUG,	0},
+    {	".debug_str",			"__debug_str",
+	SEC_DEBUGGING,			BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_DEBUG,	0},
+    {	".debug_ranges",		"__debug_ranges",
+	SEC_DEBUGGING,			BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_DEBUG,	0},
+    {	".debug_macro",			"__debug_macro",
+	SEC_DEBUGGING,			BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_DEBUG,	0},
+    { NULL, NULL, 0, 0, 0, 0}
   };
 
-struct mach_o_segment_name_xlat
-{
-  /* Segment name.  */
-  const char *segname;
-
-  /* List of known sections for the segment.  */
-  const struct mach_o_section_name_xlat *sections;
-};
-
-/* List of known segment names.  */
+/* __OBJC Segment.  */
+static const mach_o_section_name_xlat objc_section_names_xlat[] =
+  {
+    {	".objc_class",			"__class",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, 0},
+    {	".objc_meta_class",		"__meta_class",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, 0},
+    {	".objc_cat_cls_meth",		"__cat_cls_meth",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, 0},
+    {	".objc_cat_inst_meth",		"__cat_inst_meth",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, 0},
+    {	".objc_protocol",		"__protocol",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, 0},
+    {	".objc_string_object",		"__string_object",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, 0},
+    {	".objc_cls_meth",		"__cls_meth",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, 0},
+    {	".objc_inst_meth",		"__inst_meth",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, 0},
+    {	".objc_cls_refs",		"__cls_refs",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_LITERAL_POINTERS,
+	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, 0},
+    {	".objc_message_refs",		"__message_refs",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_LITERAL_POINTERS,
+	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, 0},
+    {	".objc_symbols",		"__symbols",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, 0},
+    {	".objc_category",		"__category",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, 0},
+    {	".objc_class_vars",		"__class_vars",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, 0},
+    {	".objc_instance_vars",		"__instance_vars",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, 0},
+    {	".objc_module_info",		"__module_info",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, 0},
+    {	".objc_selector_strs",		"__selector_strs",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_CSTRING_LITERALS,
+	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, 0},
+    {	".objc_image_info",		"__image_info",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, 0},
+    {	".objc_selector_fixup",		"__sel_fixup",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, 0},
+    /* Objc V1 */
+    {	".objc1_class_ext",		"__class_ext",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, 0},
+    {	".objc1_property_list",		"__property",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, 0},
+    {	".objc1_protocol_ext",		"__protocol_ext",
+	SEC_DATA | SEC_LOAD,		BFD_MACH_O_S_REGULAR,
+	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, 0},
+    { NULL, NULL, 0, 0, 0, 0}
+  };
 
-static const struct mach_o_segment_name_xlat segsec_names_xlat[] =
+static const mach_o_segment_name_xlat segsec_names_xlat[] =
   {
     { "__TEXT", text_section_names_xlat },
     { "__DATA", data_section_names_xlat },
     { "__DWARF", dwarf_section_names_xlat },
+    { "__OBJC", objc_section_names_xlat },
     { NULL, NULL }
   };
 
-/* Mach-O to bfd names.  */
+static const char dsym_subdir[] = ".dSYM/Contents/Resources/DWARF";
 
-void
-bfd_mach_o_normalize_section_name (const char *segname, const char *sectname,
-                                   const char **name, flagword *flags)
+/* For both cases bfd-name => mach-o name and vice versa, the specific target
+   is checked before the generic.  This allows a target (e.g. ppc for cstring)
+   to override the generic definition with a more specific one.  */
+
+/* Fetch the translation from a Mach-O section designation (segment, section)
+   as a bfd short name, if one exists.  Otherwise return NULL.
+   
+   Allow the segment and section names to be unterminated 16 byte arrays.  */
+
+const mach_o_section_name_xlat *
+bfd_mach_o_section_data_for_mach_sect (bfd *abfd, const char *segname,
+				       const char *sectname)
 {
   const struct mach_o_segment_name_xlat *seg;
+  const mach_o_section_name_xlat *sec;
+  bfd_mach_o_backend_data *bed = bfd_mach_o_get_backend_data (abfd);
 
-  *name = NULL;
-  *flags = SEC_NO_FLAGS;
+  /* First try any target-specific translations defined...  */
+  if (bed->segsec_names_xlat)
+    for (seg = bed->segsec_names_xlat; seg->segname; seg++)
+      if (strncmp (seg->segname, segname, BFD_MACH_O_SEGNAME_SIZE) == 0)
+	for (sec = seg->sections; sec->mach_o_name; sec++)
+	  if (strncmp (sec->mach_o_name, sectname,
+		       BFD_MACH_O_SECTNAME_SIZE) == 0)
+	    return sec;
 
+  /* ... and then the Mach-O generic ones.  */
   for (seg = segsec_names_xlat; seg->segname; seg++)
-    {
-      if (strncmp (seg->segname, segname, BFD_MACH_O_SEGNAME_SIZE) == 0)
-        {
-          const struct mach_o_section_name_xlat *sec;
+    if (strncmp (seg->segname, segname, BFD_MACH_O_SEGNAME_SIZE) == 0)
+      for (sec = seg->sections; sec->mach_o_name; sec++)
+        if (strncmp (sec->mach_o_name, sectname,
+		     BFD_MACH_O_SECTNAME_SIZE) == 0)
+          return sec;
 
-          for (sec = seg->sections; sec->mach_o_name; sec++)
-            {
-              if (strncmp (sec->mach_o_name, sectname,
-                           BFD_MACH_O_SECTNAME_SIZE) == 0)
-                {
-                  *name = sec->bfd_name;
-                  *flags = sec->flags;
-                  return;
-                }
-            }
-          return;
-        }
-    }
+  return NULL;  
 }
 
-/* Convert Mach-O section name to BFD.  Try to use standard names, otherwise
-   forge a new name.  SEGNAME and SECTNAME are 16 bytes strings.  */
+/* If the bfd_name for this section is a 'canonical' form for which we
+   know the Mach-O data, return the segment name and the data for the 
+   Mach-O equivalent.  Otherwise return NULL.  */
 
-static void
-bfd_mach_o_convert_section_name_to_bfd
-  (bfd *abfd, const char *segname, const char *sectname,
-   const char **name, flagword *flags)
+const mach_o_section_name_xlat *
+bfd_mach_o_section_data_for_bfd_name (bfd *abfd, const char *bfd_name,
+				      const char **segname)
+{
+  const struct mach_o_segment_name_xlat *seg;
+  const mach_o_section_name_xlat *sec;
+  bfd_mach_o_backend_data *bed = bfd_mach_o_get_backend_data (abfd);
+  *segname = NULL;
+
+  if (bfd_name[0] != '.')
+    return NULL;
+
+  /* First try any target-specific translations defined...  */
+  if (bed->segsec_names_xlat)
+    for (seg = bed->segsec_names_xlat; seg->segname; seg++)
+      for (sec = seg->sections; sec->bfd_name; sec++)
+	if (strcmp (bfd_name, sec->bfd_name) == 0)
+	  {
+	    *segname = seg->segname;
+	    return sec;
+	  }
+
+  /* ... and then the Mach-O generic ones.  */
+  for (seg = segsec_names_xlat; seg->segname; seg++)
+    for (sec = seg->sections; sec->bfd_name; sec++)
+      if (strcmp (bfd_name, sec->bfd_name) == 0)
+	{
+	  *segname = seg->segname;
+	  return sec;
+	}
+
+  return NULL;  
+}
+
+/* Convert Mach-O section name to BFD.
+
+   Try to use standard/canonical names, for which we have tables including 
+   default flag settings - which are returned.  Otherwise forge a new name
+   in the form "<segmentname>.<sectionname>" this will be prefixed with
+   LC_SEGMENT. if the segment name does not begin with an underscore.
+
+   SEGNAME and SECTNAME are 16 byte arrays (they do not need to be NUL-
+   terminated if the name length is exactly 16 bytes - but must be if the name
+   length is less than 16 characters).  */
+
+void
+bfd_mach_o_convert_section_name_to_bfd (bfd *abfd, const char *segname,
+					const char *secname, const char **name,
+					flagword *flags)
 {
+  const mach_o_section_name_xlat *xlat;
   char *res;
   unsigned int len;
   const char *pfx = "";
 
-  /* First search for a canonical name.  */
-  bfd_mach_o_normalize_section_name (segname, sectname, name, flags);
+  *name = NULL;
+  *flags = SEC_NO_FLAGS;
 
-  /* Return now if found.  */
-  if (*name)
-    return;
+  /* First search for a canonical name...  
+     xlat will be non-null if there is an entry for segname, secname.  */
+  xlat = bfd_mach_o_section_data_for_mach_sect (abfd, segname, secname);
+  if (xlat)
+    {
+      len = strlen (xlat->bfd_name);
+      res = bfd_alloc (abfd, len+1);
+      if (res == NULL)
+	return;
+      memcpy (res, xlat->bfd_name, len+1);
+      *name = res;
+      *flags = xlat->bfd_flags;
+      return;
+    }
+
+  /* ... else we make up a bfd name from the segment concatenated with the
+     section.  */
 
   len = 16 + 1 + 16 + 1;
 
@@ -215,43 +413,46 @@ bfd_mach_o_convert_section_name_to_bfd
   res = bfd_alloc (abfd, len);
   if (res == NULL)
     return;
-  snprintf (res, len, "%s%.16s.%.16s", pfx, segname, sectname);
+  snprintf (res, len, "%s%.16s.%.16s", pfx, segname, secname);
   *name = res;
-  *flags = SEC_NO_FLAGS;
 }
 
-/* Convert a bfd section name to a Mach-O segment + section name.  */
+/* Convert a bfd section name to a Mach-O segment + section name.
 
-static void
+   If the name is a canonical one for which we have a Darwin match
+   return the translation table - which contains defaults for flags,
+   type, attribute and default alignment data.
+
+   Otherwise, expand the bfd_name (assumed to be in the form 
+   "[LC_SEGMENT.]<segmentname>.<sectionname>") and return NULL.  */
+
+static const mach_o_section_name_xlat *
 bfd_mach_o_convert_section_name_to_mach_o (bfd *abfd ATTRIBUTE_UNUSED,
                                            asection *sect,
                                            bfd_mach_o_section *section)
 {
-  const struct mach_o_segment_name_xlat *seg;
+  const mach_o_section_name_xlat *xlat;
   const char *name = bfd_get_section_name (abfd, sect);
+  const char *segname;
   const char *dot;
   unsigned int len;
   unsigned int seglen;
   unsigned int seclen;
 
-  /* List of well known names.  They all start with a dot.  */
-  if (name[0] == '.')
-    for (seg = segsec_names_xlat; seg->segname; seg++)
-      {
-        const struct mach_o_section_name_xlat *sec;
-
-        for (sec = seg->sections; sec->mach_o_name; sec++)
-          {
-            if (strcmp (sec->bfd_name, name) == 0)
-              {
-                strcpy (section->segname, seg->segname);
-                strcpy (section->sectname, sec->mach_o_name);
-                return;
-              }
-          }
-      }
+  memset (section->segname, 0, BFD_MACH_O_SEGNAME_SIZE + 1);
+  memset (section->sectname, 0, BFD_MACH_O_SECTNAME_SIZE + 1);
+
+  /* See if is a canonical name ... */
+  xlat = bfd_mach_o_section_data_for_bfd_name (abfd, name, &segname);
+  if (xlat)
+    {
+      strcpy (section->segname, segname);
+      strcpy (section->sectname, xlat->mach_o_name);
+      return xlat;
+    }
 
-  /* Strip LC_SEGMENT. prefix.  */
+  /* .. else we convert our constructed one back to Mach-O.
+     Strip LC_SEGMENT. prefix, if present.  */
   if (strncmp (name, "LC_SEGMENT.", 11) == 0)
     name += 11;
 
@@ -271,16 +472,23 @@ bfd_mach_o_convert_section_name_to_mach_o (bfd *abfd ATTRIBUTE_UNUSED,
           section->segname[seglen] = 0;
           memcpy (section->sectname, dot + 1, seclen);
           section->sectname[seclen] = 0;
-          return;
+          return NULL;
         }
     }
 
+  /* The segment and section names are both missing - don't make them
+     into dots.  */
+  if (dot && dot == name)
+    return NULL;
+
+  /* Just duplicate the name into both segment and section.  */
   if (len > 16)
     len = 16;
   memcpy (section->segname, name, len);
   section->segname[len] = 0;
   memcpy (section->sectname, name, len);
   section->sectname[len] = 0;
+  return NULL;
 }
 
 /* Return the size of an entry for section SEC.
@@ -325,10 +533,17 @@ bfd_mach_o_section_get_nbr_indirect (bfd *abfd, bfd_mach_o_section *sec)
 
 bfd_boolean
 bfd_mach_o_bfd_copy_private_symbol_data (bfd *ibfd ATTRIBUTE_UNUSED,
-					 asymbol *isymbol ATTRIBUTE_UNUSED,
+					 asymbol *isymbol,
 					 bfd *obfd ATTRIBUTE_UNUSED,
-					 asymbol *osymbol ATTRIBUTE_UNUSED)
+					 asymbol *osymbol)
 {
+  bfd_mach_o_asymbol *os, *is;
+  os = (bfd_mach_o_asymbol *)osymbol;
+  is = (bfd_mach_o_asymbol *)isymbol;
+  os->n_type = is->n_type;
+  os->n_sect = is->n_sect;
+  os->n_desc = is->n_desc;
+  os->symbol.udata.i = is->symbol.udata.i;
   return TRUE;
 }
 
@@ -337,10 +552,20 @@ bfd_mach_o_bfd_copy_private_symbol_data (bfd *ibfd ATTRIBUTE_UNUSED,
 
 bfd_boolean
 bfd_mach_o_bfd_copy_private_section_data (bfd *ibfd ATTRIBUTE_UNUSED,
-					  asection *isection ATTRIBUTE_UNUSED,
+					  asection *isection,
 					  bfd *obfd ATTRIBUTE_UNUSED,
-					  asection *osection ATTRIBUTE_UNUSED)
+					  asection *osection)
 {
+  if (osection->used_by_bfd == NULL)
+    osection->used_by_bfd = isection->used_by_bfd;
+  else 
+    if (isection->used_by_bfd != NULL)
+      memcpy (osection->used_by_bfd, isection->used_by_bfd, 
+	      sizeof (bfd_mach_o_section));
+ 
+  if (osection->used_by_bfd != NULL)
+    ((bfd_mach_o_section *)osection->used_by_bfd)->bfdsection = osection;
+
   return TRUE;
 }
 
@@ -362,6 +587,22 @@ bfd_mach_o_bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
   return TRUE;
 }
 
+/* This allows us to set up to 32 bits of flags (unless we invent some
+   fiendish scheme to subdivide).  For now, we'll just set the file flags
+   without error checking - just overwrite.  */
+   
+bfd_boolean
+bfd_mach_o_bfd_set_private_flags (bfd *abfd, flagword flags)
+{
+  bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
+
+  if (!mdata)
+    return FALSE;
+
+  mdata->header.flags = flags;
+  return TRUE;
+}
+
 /* Count the total number of symbols.  */
 
 static long
@@ -417,6 +658,8 @@ bfd_mach_o_canonicalize_symtab (bfd *abfd, asymbol **alocation)
   return nsyms;
 }
 
+/* Create synthetic symbols for indirect symbols.  */
+
 long
 bfd_mach_o_get_synthetic_symtab (bfd *abfd,
                                  long symcount ATTRIBUTE_UNUSED,
@@ -436,19 +679,23 @@ bfd_mach_o_get_synthetic_symtab (bfd *abfd,
 
   *ret = NULL;
 
+  /* Stop now if no symbols or no indirect symbols.  */
   if (dysymtab == NULL || symtab == NULL || symtab->symbols == NULL)
     return 0;
 
   if (dysymtab->nindirectsyms == 0)
     return 0;
 
+  /* We need to allocate a bfd symbol for every indirect symbol and to
+     allocate the memory for its name.  */
   count = dysymtab->nindirectsyms;
   size = count * sizeof (asymbol) + 1;
 
   for (j = 0; j < count; j++)
     {
       unsigned int isym = dysymtab->indirect_syms[j];
-              
+
+      /* Some indirect symbols are anonymous.  */
       if (isym < symtab->nsyms && symtab->symbols[isym].symbol.name)
         size += strlen (symtab->symbols[isym].symbol.name) + sizeof ("$stub");
     }
@@ -473,6 +720,7 @@ bfd_mach_o_get_synthetic_symtab (bfd *abfd,
         case BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS:
         case BFD_MACH_O_S_LAZY_SYMBOL_POINTERS:
         case BFD_MACH_O_S_SYMBOL_STUBS:
+          /* Only these sections have indirect symbols.  */
           first = sec->reserved1;
           last = first + bfd_mach_o_section_get_nbr_indirect (abfd, sec);
           addr = sec->addr;
@@ -580,7 +828,7 @@ bfd_mach_o_print_symbol (bfd *abfd,
 
 static void
 bfd_mach_o_convert_architecture (bfd_mach_o_cpu_type mtype,
-				 bfd_mach_o_cpu_subtype msubtype ATTRIBUTE_UNUSED,
+				 bfd_mach_o_cpu_subtype msubtype,
 				 enum bfd_architecture *type,
 				 unsigned long *subtype)
 {
@@ -588,8 +836,12 @@ bfd_mach_o_convert_architecture (bfd_mach_o_cpu_type mtype,
 
   switch (mtype)
     {
-    case BFD_MACH_O_CPU_TYPE_VAX: *type = bfd_arch_vax; break;
-    case BFD_MACH_O_CPU_TYPE_MC680x0: *type = bfd_arch_m68k; break;
+    case BFD_MACH_O_CPU_TYPE_VAX:
+      *type = bfd_arch_vax;
+      break;
+    case BFD_MACH_O_CPU_TYPE_MC680x0:
+      *type = bfd_arch_m68k;
+      break;
     case BFD_MACH_O_CPU_TYPE_I386:
       *type = bfd_arch_i386;
       *subtype = bfd_mach_i386_i386;
@@ -598,17 +850,52 @@ bfd_mach_o_convert_architecture (bfd_mach_o_cpu_type mtype,
       *type = bfd_arch_i386;
       *subtype = bfd_mach_x86_64;
       break;
-    case BFD_MACH_O_CPU_TYPE_MIPS: *type = bfd_arch_mips; break;
-    case BFD_MACH_O_CPU_TYPE_MC98000: *type = bfd_arch_m98k; break;
-    case BFD_MACH_O_CPU_TYPE_HPPA: *type = bfd_arch_hppa; break;
-    case BFD_MACH_O_CPU_TYPE_ARM: *type = bfd_arch_arm; break;
-    case BFD_MACH_O_CPU_TYPE_MC88000: *type = bfd_arch_m88k; break;
+    case BFD_MACH_O_CPU_TYPE_MIPS:
+      *type = bfd_arch_mips;
+      break;
+    case BFD_MACH_O_CPU_TYPE_MC98000:
+      *type = bfd_arch_m98k;
+      break;
+    case BFD_MACH_O_CPU_TYPE_HPPA:
+      *type = bfd_arch_hppa;
+      break;
+    case BFD_MACH_O_CPU_TYPE_ARM:
+      *type = bfd_arch_arm;
+      switch (msubtype)
+        {
+        case BFD_MACH_O_CPU_SUBTYPE_ARM_V4T:
+          *subtype = bfd_mach_arm_4T;
+          break;
+        case BFD_MACH_O_CPU_SUBTYPE_ARM_V6:
+          *subtype = bfd_mach_arm_4T;	/* Best fit ?  */
+          break;
+        case BFD_MACH_O_CPU_SUBTYPE_ARM_V5TEJ:
+          *subtype = bfd_mach_arm_5TE;
+          break;
+        case BFD_MACH_O_CPU_SUBTYPE_ARM_XSCALE:
+          *subtype = bfd_mach_arm_XScale;
+          break;
+        case BFD_MACH_O_CPU_SUBTYPE_ARM_V7:
+          *subtype = bfd_mach_arm_5TE;	/* Best fit ?  */
+          break;
+        case BFD_MACH_O_CPU_SUBTYPE_ARM_ALL:
+        default:
+          break;
+        }
+      break;
+    case BFD_MACH_O_CPU_TYPE_MC88000:
+      *type = bfd_arch_m88k;
+      break;
     case BFD_MACH_O_CPU_TYPE_SPARC:
       *type = bfd_arch_sparc;
       *subtype = bfd_mach_sparc;
       break;
-    case BFD_MACH_O_CPU_TYPE_I860: *type = bfd_arch_i860; break;
-    case BFD_MACH_O_CPU_TYPE_ALPHA: *type = bfd_arch_alpha; break;
+    case BFD_MACH_O_CPU_TYPE_I860:
+      *type = bfd_arch_i860;
+      break;
+    case BFD_MACH_O_CPU_TYPE_ALPHA:
+      *type = bfd_arch_alpha;
+      break;
     case BFD_MACH_O_CPU_TYPE_POWERPC:
       *type = bfd_arch_powerpc;
       *subtype = bfd_mach_ppc;
@@ -688,6 +975,35 @@ bfd_mach_o_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED,
   return (asect->reloc_count + 1) * sizeof (arelent *);
 }
 
+/* In addition to the need to byte-swap the symbol number, the bit positions
+   of the fields in the relocation information vary per target endian-ness.  */
+
+static void
+bfd_mach_o_swap_in_non_scattered_reloc (bfd *abfd, bfd_mach_o_reloc_info *rel,
+				       unsigned char *fields)
+{
+  unsigned char info = fields[3];
+
+  if (bfd_big_endian (abfd))
+    {
+      rel->r_value = (fields[0] << 16) | (fields[1] << 8) | fields[2];
+      rel->r_type = (info >> BFD_MACH_O_BE_TYPE_SHIFT) & BFD_MACH_O_TYPE_MASK;
+      rel->r_pcrel = (info & BFD_MACH_O_BE_PCREL) ? 1 : 0;
+      rel->r_length = (info >> BFD_MACH_O_BE_LENGTH_SHIFT) 
+		      & BFD_MACH_O_LENGTH_MASK;
+      rel->r_extern = (info & BFD_MACH_O_BE_EXTERN) ? 1 : 0;
+    }
+  else
+    {
+      rel->r_value = (fields[2] << 16) | (fields[1] << 8) | fields[0];
+      rel->r_type = (info >> BFD_MACH_O_LE_TYPE_SHIFT) & BFD_MACH_O_TYPE_MASK;
+      rel->r_pcrel = (info & BFD_MACH_O_LE_PCREL) ? 1 : 0;
+      rel->r_length = (info >> BFD_MACH_O_LE_LENGTH_SHIFT) 
+		      & BFD_MACH_O_LENGTH_MASK;
+      rel->r_extern = (info & BFD_MACH_O_LE_EXTERN) ? 1 : 0;
+    }
+}
+
 static int
 bfd_mach_o_canonicalize_one_reloc (bfd *abfd,
                                    struct mach_o_reloc_info_external *raw,
@@ -697,20 +1013,28 @@ bfd_mach_o_canonicalize_one_reloc (bfd *abfd,
   bfd_mach_o_backend_data *bed = bfd_mach_o_get_backend_data (abfd);
   bfd_mach_o_reloc_info reloc;
   bfd_vma addr;
-  bfd_vma symnum;
   asymbol **sym;
 
   addr = bfd_get_32 (abfd, raw->r_address);
-  symnum = bfd_get_32 (abfd, raw->r_symbolnum);
+  res->sym_ptr_ptr = NULL;
+  res->addend = 0;
   
   if (addr & BFD_MACH_O_SR_SCATTERED)
     {
       unsigned int j;
+      bfd_vma symnum = bfd_get_32 (abfd, raw->r_symbolnum);
 
-      /* Scattered relocation.
-         Extract section and offset from r_value.  */
-      res->sym_ptr_ptr = NULL;
-      res->addend = 0;
+      /* Scattered relocation, can't be extern. */
+      reloc.r_scattered = 1;
+      reloc.r_extern = 0;
+
+      /*   Extract section and offset from r_value (symnum).  */
+      reloc.r_value = symnum;
+      /* FIXME: This breaks when a symbol in a reloc exactly follows the
+	 end of the data for the section (e.g. in a calculation of section
+	 data length).  At present, the symbol will end up associated with
+	 the following section or, if it falls within alignment padding, as
+	 null - which will assert later.  */
       for (j = 0; j < mdata->nsects; j++)
         {
           bfd_mach_o_section *sect = mdata->sections[j];
@@ -721,42 +1045,62 @@ bfd_mach_o_canonicalize_one_reloc (bfd *abfd,
               break;
             }
         }
-      res->address = BFD_MACH_O_GET_SR_ADDRESS (addr);
+
+      /* Extract the info and address fields from r_address.  */
       reloc.r_type = BFD_MACH_O_GET_SR_TYPE (addr);
       reloc.r_length = BFD_MACH_O_GET_SR_LENGTH (addr);
       reloc.r_pcrel = addr & BFD_MACH_O_SR_PCREL;
-      reloc.r_scattered = 1;
+      reloc.r_address = BFD_MACH_O_GET_SR_TYPE (addr);
+      res->address = BFD_MACH_O_GET_SR_ADDRESS (addr);
     }
   else
     {
-      unsigned int num = BFD_MACH_O_GET_R_SYMBOLNUM (symnum);
-      res->addend = 0;
-      res->address = addr;
-      if (symnum & BFD_MACH_O_R_EXTERN)
-        {
+      unsigned int num;
+      
+      /* Non-scattered relocation.  */
+      reloc.r_scattered = 0;
+      
+      /* The value and info fields have to be extracted dependent on target
+         endian-ness.  */
+      bfd_mach_o_swap_in_non_scattered_reloc (abfd, &reloc, raw->r_symbolnum);
+      num = reloc.r_value;
+
+      if (reloc.r_extern)
           sym = syms + num;
-          reloc.r_extern = 1;
-        }
-      else
+      else if (reloc.r_scattered
+	       || (reloc.r_type != BFD_MACH_O_GENERIC_RELOC_PAIR))
         {
           BFD_ASSERT (num != 0);
           BFD_ASSERT (num <= mdata->nsects);
           sym = mdata->sections[num - 1]->bfdsection->symbol_ptr_ptr;
           /* For a symbol defined in section S, the addend (stored in the
              binary) contains the address of the section.  To comply with
-             bfd conventio, substract the section address.
+             bfd convention, subtract the section address.
              Use the address from the header, so that the user can modify
              the vma of the section.  */
           res->addend = -mdata->sections[num - 1]->addr;
-          reloc.r_extern = 0;
+        }
+      else /* ... The 'symnum' in a non-scattered PAIR will be 0x00ffffff.  */
+        {
+          /* Pairs for PPC LO/HI/HA are not scattered, but contain the offset
+             in the lower 16bits of the address value.  So we have to find the
+             'symbol' from the preceding reloc.  We do this even thoough the
+             section symbol is probably not needed here, because NULL symbol
+             values cause an assert in generic BFD code.  */
+          sym = (res - 1)->sym_ptr_ptr;
         }
       res->sym_ptr_ptr = sym;
-      reloc.r_type = BFD_MACH_O_GET_R_TYPE (symnum);
-      reloc.r_length = BFD_MACH_O_GET_R_LENGTH (symnum);
-      reloc.r_pcrel = (symnum & BFD_MACH_O_R_PCREL) ? 1 : 0;
-      reloc.r_scattered = 0;
+      
+      /* The 'address' is just r_address.
+         ??? maybe this should be masked with  0xffffff for safety.  */
+      res->address = addr;
+      reloc.r_address = addr;
     }
   
+  /* We have set up a reloc with all the information present, so the swapper can
+     modify address, value and addend fields, if necessary, to convey information
+     in the generic BFD reloc that is mach-o specific.  */
+
   if (!(*bed->_bfd_mach_o_swap_reloc_in)(res, &reloc))
     return -1;
   return 0;
@@ -810,21 +1154,25 @@ bfd_mach_o_canonicalize_reloc (bfd *abfd, asection *asect,
   if (bed->_bfd_mach_o_swap_reloc_in == NULL)
     return 0;
 
-  res = bfd_malloc (asect->reloc_count * sizeof (arelent));
-  if (res == NULL)
-    return -1;
-
-  if (bfd_mach_o_canonicalize_relocs (abfd, asect->rel_filepos,
-                                      asect->reloc_count, res, syms) < 0)
+  if (asect->relocation == NULL)
     {
-      free (res);
-      return -1;
+      res = bfd_malloc (asect->reloc_count * sizeof (arelent));
+      if (res == NULL)
+        return -1;
+
+      if (bfd_mach_o_canonicalize_relocs (abfd, asect->rel_filepos,
+                                          asect->reloc_count, res, syms) < 0)
+        {
+          free (res);
+          return -1;
+        }
+      asect->relocation = res;
     }
 
+  res = asect->relocation;
   for (i = 0; i < asect->reloc_count; i++)
     rels[i] = &res[i];
   rels[i] = NULL;
-  asect->relocation = res;
 
   return i;
 }
@@ -836,7 +1184,7 @@ bfd_mach_o_get_dynamic_reloc_upper_bound (bfd *abfd)
 
   if (mdata->dysymtab == NULL)
     return 1;
-  return (mdata->dysymtab->nextrel + mdata->dysymtab->nlocrel)
+  return (mdata->dysymtab->nextrel + mdata->dysymtab->nlocrel + 1)
     * sizeof (arelent *);
 }
 
@@ -859,35 +1207,76 @@ bfd_mach_o_canonicalize_dynamic_reloc (bfd *abfd, arelent **rels,
   if (bed->_bfd_mach_o_swap_reloc_in == NULL)
     return 0;
 
-  res = bfd_malloc ((dysymtab->nextrel + dysymtab->nlocrel) * sizeof (arelent));
-  if (res == NULL)
-    return -1;
-
-  if (bfd_mach_o_canonicalize_relocs (abfd, dysymtab->extreloff,
-                                      dysymtab->nextrel, res, syms) < 0)
+  if (mdata->dyn_reloc_cache == NULL)
     {
-      free (res);
-      return -1;
-    }
+      res = bfd_malloc ((dysymtab->nextrel + dysymtab->nlocrel)
+                        * sizeof (arelent));
+      if (res == NULL)
+        return -1;
 
-  if (bfd_mach_o_canonicalize_relocs (abfd, dysymtab->locreloff,
-                                      dysymtab->nlocrel,
-                                      res + dysymtab->nextrel, syms) < 0)
-    {
-      free (res);
-      return -1;
+      if (bfd_mach_o_canonicalize_relocs (abfd, dysymtab->extreloff,
+                                          dysymtab->nextrel, res, syms) < 0)
+        {
+          free (res);
+          return -1;
+        }
+
+      if (bfd_mach_o_canonicalize_relocs (abfd, dysymtab->locreloff,
+                                          dysymtab->nlocrel,
+                                          res + dysymtab->nextrel, syms) < 0)
+        {
+          free (res);
+          return -1;
+        }
+
+      mdata->dyn_reloc_cache = res;
     }
 
+  res = mdata->dyn_reloc_cache;
   for (i = 0; i < dysymtab->nextrel + dysymtab->nlocrel; i++)
     rels[i] = &res[i];
   rels[i] = NULL;
   return i;
 }
 
+/* In addition to the need to byte-swap the symbol number, the bit positions
+   of the fields in the relocation information vary per target endian-ness.  */
+
+static void
+bfd_mach_o_swap_out_non_scattered_reloc (bfd *abfd, unsigned char *fields,
+				       bfd_mach_o_reloc_info *rel)
+{
+  unsigned char info = 0;
+
+  BFD_ASSERT (rel->r_type <= 15);
+  BFD_ASSERT (rel->r_length <= 3);
+
+  if (bfd_big_endian (abfd))
+    {
+      fields[0] = (rel->r_value >> 16) & 0xff;
+      fields[1] = (rel->r_value >> 8) & 0xff;
+      fields[2] = rel->r_value & 0xff;
+      info |= rel->r_type << BFD_MACH_O_BE_TYPE_SHIFT;
+      info |= rel->r_pcrel ? BFD_MACH_O_BE_PCREL : 0;
+      info |= rel->r_length << BFD_MACH_O_BE_LENGTH_SHIFT;
+      info |= rel->r_extern ? BFD_MACH_O_BE_EXTERN : 0;
+    }
+  else
+    {
+      fields[2] = (rel->r_value >> 16) & 0xff;
+      fields[1] = (rel->r_value >> 8) & 0xff;
+      fields[0] = rel->r_value & 0xff;
+      info |= rel->r_type << BFD_MACH_O_LE_TYPE_SHIFT;
+      info |= rel->r_pcrel ? BFD_MACH_O_LE_PCREL : 0;
+      info |= rel->r_length << BFD_MACH_O_LE_LENGTH_SHIFT;
+      info |= rel->r_extern ? BFD_MACH_O_LE_EXTERN : 0;
+    }
+  fields[3] = info;
+}
+
 static bfd_boolean
 bfd_mach_o_write_relocs (bfd *abfd, bfd_mach_o_section *section)
 {
-  bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
   unsigned int i;
   arelent **entries;
   asection *sec;
@@ -900,13 +1289,6 @@ bfd_mach_o_write_relocs (bfd *abfd, bfd_mach_o_section *section)
   if (bed->_bfd_mach_o_swap_reloc_out == NULL)
     return TRUE;
 
-  /* Allocate relocation room.  */
-  mdata->filelen = FILE_ALIGN(mdata->filelen, 2);
-  section->nreloc = sec->reloc_count;
-  sec->rel_filepos = mdata->filelen;
-  section->reloff = sec->rel_filepos;
-  mdata->filelen += sec->reloc_count * BFD_MACH_O_RELENT_SIZE;
-
   if (bfd_seek (abfd, section->reloff, SEEK_SET) != 0)
     return FALSE;
 
@@ -938,15 +1320,9 @@ bfd_mach_o_write_relocs (bfd *abfd, bfd_mach_o_section *section)
         }
       else
         {
-          unsigned long v;
-
           bfd_put_32 (abfd, pinfo->r_address, raw.r_address);
-          v = BFD_MACH_O_SET_R_SYMBOLNUM (pinfo->r_value)
-            | (pinfo->r_pcrel ? BFD_MACH_O_R_PCREL : 0)
-            | BFD_MACH_O_SET_R_LENGTH (pinfo->r_length)
-            | (pinfo->r_extern ? BFD_MACH_O_R_EXTERN : 0)
-            | BFD_MACH_O_SET_R_TYPE (pinfo->r_type);
-          bfd_put_32 (abfd, v, raw.r_symbolnum);
+          bfd_mach_o_swap_out_non_scattered_reloc (abfd, raw.r_symbolnum,
+						   pinfo);
         }
 
       if (bfd_bwrite (&raw, BFD_MACH_O_RELENT_SIZE, abfd)
@@ -1099,18 +1475,24 @@ bfd_mach_o_write_symtab (bfd *abfd, bfd_mach_o_load_command *command)
   if (strtab == NULL)
     return FALSE;
 
+  if (sym->nsyms > 0)
+    /* Although we don't strictly need to do this, for compatibility with
+       Darwin system tools, actually output an empty string for the index
+       0 entry.  */
+    _bfd_stringtab_add (strtab, "", TRUE, FALSE);
+
   for (i = 0; i < sym->nsyms; i++)
     {
       bfd_size_type str_index;
       bfd_mach_o_asymbol *s = (bfd_mach_o_asymbol *)symbols[i];
-
-      /* Compute name index.  */
-      /* An index of 0 always means the empty string.  */
+     
       if (s->symbol.name == 0 || s->symbol.name[0] == '\0')
+	/* An index of 0 always means the empty string.  */
         str_index = 0;
       else
         {
           str_index = _bfd_stringtab_add (strtab, s->symbol.name, TRUE, FALSE);
+
           if (str_index == (bfd_size_type) -1)
             goto err;
         }
@@ -1173,8 +1555,258 @@ bfd_mach_o_write_symtab (bfd *abfd, bfd_mach_o_load_command *command)
   return FALSE;
 }
 
-/* Process the symbols and generate Mach-O specific fields.
-   Number them.  */
+/* Write a dysymtab command.
+   TODO: Possibly coalesce writes of smaller objects.  */
+
+static bfd_boolean
+bfd_mach_o_write_dysymtab (bfd *abfd, bfd_mach_o_load_command *command)
+{
+  bfd_mach_o_dysymtab_command *cmd = &command->command.dysymtab;
+
+  BFD_ASSERT (command->type == BFD_MACH_O_LC_DYSYMTAB);
+
+  if (cmd->nmodtab != 0)
+    {
+      unsigned int i;
+
+      if (bfd_seek (abfd, cmd->modtaboff, SEEK_SET) != 0)
+	return FALSE;
+
+      for (i = 0; i < cmd->nmodtab; i++)
+	{
+	  bfd_mach_o_dylib_module *module = &cmd->dylib_module[i];
+	  unsigned int iinit;
+	  unsigned int ninit;
+
+	  iinit = module->iinit & 0xffff;
+	  iinit |= ((module->iterm & 0xffff) << 16);
+
+	  ninit = module->ninit & 0xffff;
+	  ninit |= ((module->nterm & 0xffff) << 16);
+
+	  if (bfd_mach_o_wide_p (abfd))
+	    {
+	      struct mach_o_dylib_module_64_external w;
+
+	      bfd_h_put_32 (abfd, module->module_name_idx, &w.module_name);
+	      bfd_h_put_32 (abfd, module->iextdefsym, &w.iextdefsym);
+	      bfd_h_put_32 (abfd, module->nextdefsym, &w.nextdefsym);
+	      bfd_h_put_32 (abfd, module->irefsym, &w.irefsym);
+	      bfd_h_put_32 (abfd, module->nrefsym, &w.nrefsym);
+	      bfd_h_put_32 (abfd, module->ilocalsym, &w.ilocalsym);
+	      bfd_h_put_32 (abfd, module->nlocalsym, &w.nlocalsym);
+	      bfd_h_put_32 (abfd, module->iextrel, &w.iextrel);
+	      bfd_h_put_32 (abfd, module->nextrel, &w.nextrel);
+	      bfd_h_put_32 (abfd, iinit, &w.iinit_iterm);
+	      bfd_h_put_32 (abfd, ninit, &w.ninit_nterm);
+	      bfd_h_put_64 (abfd, module->objc_module_info_addr,
+			    &w.objc_module_info_addr);
+	      bfd_h_put_32 (abfd, module->objc_module_info_size,
+			    &w.objc_module_info_size);
+
+	      if (bfd_bwrite ((void *) &w, sizeof (w), abfd) != sizeof (w))
+		return FALSE;
+	    }
+	  else
+	    {
+	      struct mach_o_dylib_module_external n;
+
+	      bfd_h_put_32 (abfd, module->module_name_idx, &n.module_name);
+	      bfd_h_put_32 (abfd, module->iextdefsym, &n.iextdefsym);
+	      bfd_h_put_32 (abfd, module->nextdefsym, &n.nextdefsym);
+	      bfd_h_put_32 (abfd, module->irefsym, &n.irefsym);
+	      bfd_h_put_32 (abfd, module->nrefsym, &n.nrefsym);
+	      bfd_h_put_32 (abfd, module->ilocalsym, &n.ilocalsym);
+	      bfd_h_put_32 (abfd, module->nlocalsym, &n.nlocalsym);
+	      bfd_h_put_32 (abfd, module->iextrel, &n.iextrel);
+	      bfd_h_put_32 (abfd, module->nextrel, &n.nextrel);
+	      bfd_h_put_32 (abfd, iinit, &n.iinit_iterm);
+	      bfd_h_put_32 (abfd, ninit, &n.ninit_nterm);
+	      bfd_h_put_32 (abfd, module->objc_module_info_addr,
+			    &n.objc_module_info_addr);
+	      bfd_h_put_32 (abfd, module->objc_module_info_size,
+			    &n.objc_module_info_size);
+
+	      if (bfd_bwrite ((void *) &n, sizeof (n), abfd) != sizeof (n))
+		return FALSE;
+	    }
+	}
+    }
+
+  if (cmd->ntoc != 0)
+    {
+      unsigned int i;
+
+      if (bfd_seek (abfd, cmd->tocoff, SEEK_SET) != 0)
+	return FALSE;
+
+      for (i = 0; i < cmd->ntoc; i++)
+	{
+	  struct mach_o_dylib_table_of_contents_external raw;
+	  bfd_mach_o_dylib_table_of_content *toc = &cmd->dylib_toc[i];
+
+	  bfd_h_put_32 (abfd, toc->symbol_index, &raw.symbol_index);
+	  bfd_h_put_32 (abfd, toc->module_index, &raw.module_index);
+
+	  if (bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
+	    return FALSE;
+	}
+    }
+  
+  if (cmd->nindirectsyms > 0)
+    {
+      unsigned int i;
+
+      if (bfd_seek (abfd, cmd->indirectsymoff, SEEK_SET) != 0)
+	return FALSE;
+
+      for (i = 0; i < cmd->nindirectsyms; ++i)
+	{
+	  unsigned char raw[4];
+
+	  bfd_h_put_32 (abfd, cmd->indirect_syms[i], &raw);
+	  if (bfd_bwrite (raw, sizeof (raw), abfd) != sizeof (raw))
+	    return FALSE;
+	}    
+    }
+
+  if (cmd->nextrefsyms != 0)
+    {
+      unsigned int i;
+
+      if (bfd_seek (abfd, cmd->extrefsymoff, SEEK_SET) != 0)
+	return FALSE;
+
+      for (i = 0; i < cmd->nextrefsyms; i++)
+	{
+	  unsigned long v;
+	  unsigned char raw[4];
+	  bfd_mach_o_dylib_reference *ref = &cmd->ext_refs[i];
+
+	  /* Fields isym and flags are written as bit-fields, thus we need
+	     a specific processing for endianness.  */
+
+	  if (bfd_big_endian (abfd))
+	    {
+	      v = ((ref->isym & 0xffffff) << 8);
+	      v |= ref->flags & 0xff;
+	    }
+	  else
+	    {
+	      v = ref->isym  & 0xffffff;
+	      v |= ((ref->flags & 0xff) << 24);
+	    }
+
+	  bfd_h_put_32 (abfd, v, raw);
+	  if (bfd_bwrite (raw, sizeof (raw), abfd) != sizeof (raw))
+	    return FALSE;
+	}
+    }
+
+  /* The command.  */
+  if (bfd_seek (abfd, command->offset + BFD_MACH_O_LC_SIZE, SEEK_SET) != 0)
+    return FALSE;
+  else
+    {
+      struct mach_o_dysymtab_command_external raw;
+
+      bfd_h_put_32 (abfd, cmd->ilocalsym, &raw.ilocalsym);
+      bfd_h_put_32 (abfd, cmd->nlocalsym, &raw.nlocalsym);
+      bfd_h_put_32 (abfd, cmd->iextdefsym, &raw.iextdefsym);
+      bfd_h_put_32 (abfd, cmd->nextdefsym, &raw.nextdefsym);
+      bfd_h_put_32 (abfd, cmd->iundefsym, &raw.iundefsym);
+      bfd_h_put_32 (abfd, cmd->nundefsym, &raw.nundefsym);
+      bfd_h_put_32 (abfd, cmd->tocoff, &raw.tocoff);
+      bfd_h_put_32 (abfd, cmd->ntoc, &raw.ntoc);
+      bfd_h_put_32 (abfd, cmd->modtaboff, &raw.modtaboff);
+      bfd_h_put_32 (abfd, cmd->nmodtab, &raw.nmodtab);
+      bfd_h_put_32 (abfd, cmd->extrefsymoff, &raw.extrefsymoff);
+      bfd_h_put_32 (abfd, cmd->nextrefsyms, &raw.nextrefsyms);
+      bfd_h_put_32 (abfd, cmd->indirectsymoff, &raw.indirectsymoff);
+      bfd_h_put_32 (abfd, cmd->nindirectsyms, &raw.nindirectsyms);
+      bfd_h_put_32 (abfd, cmd->extreloff, &raw.extreloff);
+      bfd_h_put_32 (abfd, cmd->nextrel, &raw.nextrel);
+      bfd_h_put_32 (abfd, cmd->locreloff, &raw.locreloff);
+      bfd_h_put_32 (abfd, cmd->nlocrel, &raw.nlocrel);
+
+      if (bfd_bwrite (&raw, sizeof (raw), abfd) != sizeof (raw))
+	return FALSE;
+    }
+
+  return TRUE;
+}
+
+static unsigned
+bfd_mach_o_primary_symbol_sort_key (bfd_mach_o_asymbol *s)
+{
+  unsigned mtyp = s->n_type & BFD_MACH_O_N_TYPE;
+
+  /* Just leave debug symbols where they are (pretend they are local, and
+     then they will just be sorted on position).  */
+  if (s->n_type & BFD_MACH_O_N_STAB)
+    return 0;
+
+  /* Local (we should never see an undefined local AFAICT).  */
+  if (! (s->n_type & (BFD_MACH_O_N_EXT | BFD_MACH_O_N_PEXT)))
+    return 0;
+
+  /* Common symbols look like undefined externs.  */
+  if (mtyp == BFD_MACH_O_N_UNDF)
+    return 2;
+
+  /* A defined non-local, non-debug symbol.  */
+  return 1;
+}
+
+static int
+bfd_mach_o_cf_symbols (const void *a, const void *b)
+{
+  bfd_mach_o_asymbol *sa = *(bfd_mach_o_asymbol **) a;
+  bfd_mach_o_asymbol *sb = *(bfd_mach_o_asymbol **) b;
+  unsigned int soa, sob;
+
+  soa = bfd_mach_o_primary_symbol_sort_key (sa);
+  sob = bfd_mach_o_primary_symbol_sort_key (sb);
+  if (soa < sob)
+    return -1;
+
+  if (soa > sob)
+    return 1;
+
+  /* If it's local or stab, just preserve the input order.  */
+  if (soa == 0)
+    {
+      if (sa->symbol.udata.i < sb->symbol.udata.i)
+        return -1;
+      if (sa->symbol.udata.i > sb->symbol.udata.i)
+        return  1;
+
+      /* This is probably an error.  */
+      return 0;
+    }
+
+  /* The second sort key is name.  */
+  return strcmp (sa->symbol.name, sb->symbol.name);
+}
+
+/* Process the symbols.
+
+   This should be OK for single-module files - but it is not likely to work
+   for multi-module shared libraries.
+
+   (a) If the application has not filled in the relevant mach-o fields, make
+       an estimate.
+
+   (b) Order them, like this:
+	(  i) local.
+		(unsorted)
+	( ii) external defined
+		(by name)
+	(iii) external undefined/common
+		(by name)
+	( iv) common
+		(by name)
+*/
 
 static bfd_boolean
 bfd_mach_o_mangle_symbols (bfd *abfd)
@@ -1182,15 +1814,22 @@ bfd_mach_o_mangle_symbols (bfd *abfd)
   unsigned long i;
   asymbol **symbols = bfd_get_outsymbols (abfd);
 
+  if (symbols == NULL || bfd_get_symcount (abfd) == 0)
+    return TRUE;
+
   for (i = 0; i < bfd_get_symcount (abfd); i++)
     {
       bfd_mach_o_asymbol *s = (bfd_mach_o_asymbol *)symbols[i];
 
-      if (s->n_type == BFD_MACH_O_N_UNDF && !(s->symbol.flags & BSF_DEBUGGING))
+      /* We use this value, which is out-of-range as a symbol index, to signal
+	 that the mach-o-specific data are not filled in and need to be created
+	 from the bfd values.  It is much preferable for the application to do
+	 this, since more meaningful diagnostics can be made that way.  */
+
+      if (s->symbol.udata.i == SYM_MACHO_FIELDS_UNSET)
         {
-          /* As genuine Mach-O symbols type shouldn't be N_UNDF (undefined
-             symbols should be N_UNDEF | N_EXT), we suppose the back-end
-             values haven't been set.  */
+          /* No symbol information has been set - therefore determine
+             it from the bfd symbol flags/info.  */
           if (s->symbol.section == bfd_abs_section_ptr)
             s->n_type = BFD_MACH_O_N_ABS;
           else if (s->symbol.section == bfd_und_section_ptr)
@@ -1198,9 +1837,15 @@ bfd_mach_o_mangle_symbols (bfd *abfd)
               s->n_type = BFD_MACH_O_N_UNDF;
               if (s->symbol.flags & BSF_WEAK)
                 s->n_desc |= BFD_MACH_O_N_WEAK_REF;
+              /* mach-o automatically makes undefined symbols extern.  */
+	      s->n_type |= BFD_MACH_O_N_EXT;
+	      s->symbol.flags |= BSF_GLOBAL;
             }
           else if (s->symbol.section == bfd_com_section_ptr)
-            s->n_type = BFD_MACH_O_N_UNDF | BFD_MACH_O_N_EXT;
+	    {
+              s->n_type = BFD_MACH_O_N_UNDF | BFD_MACH_O_N_EXT;
+              s->symbol.flags |= BSF_GLOBAL;
+            }
           else
             s->n_type = BFD_MACH_O_N_SECT;
           
@@ -1208,15 +1853,82 @@ bfd_mach_o_mangle_symbols (bfd *abfd)
             s->n_type |= BFD_MACH_O_N_EXT;
         }
 
-      /* Compute section index.  */
-      if (s->symbol.section != bfd_abs_section_ptr
+      /* Put the section index in, where required.  */
+      if ((s->symbol.section != bfd_abs_section_ptr
           && s->symbol.section != bfd_und_section_ptr
           && s->symbol.section != bfd_com_section_ptr)
-        s->n_sect = s->symbol.section->target_index;
+          || ((s->n_type & BFD_MACH_O_N_STAB) != 0
+               && s->symbol.name == NULL))
+	s->n_sect = s->symbol.section->target_index;
 
-      /* Number symbols.  */
+      /* Number to preserve order for local and debug syms.  */
       s->symbol.udata.i = i;
     }
+
+  /* Sort the symbols.  */
+  qsort ((void *) symbols, (size_t) bfd_get_symcount (abfd),
+	 sizeof (asymbol *), bfd_mach_o_cf_symbols);
+
+  for (i = 0; i < bfd_get_symcount (abfd); ++i)
+    {
+      bfd_mach_o_asymbol *s = (bfd_mach_o_asymbol *)symbols[i];
+      s->symbol.udata.i = i;  /* renumber.  */
+    }
+
+  return TRUE;
+}
+
+/* We build a flat table of sections, which can be re-ordered if necessary.
+   Fill in the section number and other mach-o-specific data.  */
+
+static bfd_boolean
+bfd_mach_o_mangle_sections (bfd *abfd, bfd_mach_o_data_struct *mdata)
+{
+  asection *sec;
+  unsigned target_index;
+  unsigned nsect;
+
+  nsect = bfd_count_sections (abfd);
+  
+  /* Don't do it if it's already set - assume the application knows what it's
+     doing.  */
+  if (mdata->nsects == nsect
+      && (mdata->nsects == 0 || mdata->sections != NULL))
+    return TRUE;
+
+  mdata->nsects = nsect;
+  mdata->sections = bfd_alloc (abfd, 
+			       mdata->nsects * sizeof (bfd_mach_o_section *));
+  if (mdata->sections == NULL)
+    return FALSE;
+
+  /* We need to check that this can be done...  */
+  if (nsect > 255)
+    (*_bfd_error_handler) (_("mach-o: there are too many sections (%d)"
+			     " maximum is 255,\n"), nsect);
+
+  /* Create Mach-O sections.
+     Section type, attribute and align should have been set when the 
+     section was created - either read in or specified.  */
+  target_index = 0;
+  for (sec = abfd->sections; sec; sec = sec->next)
+    {
+      unsigned bfd_align = bfd_get_section_alignment (abfd, sec);
+      bfd_mach_o_section *msect = bfd_mach_o_get_mach_o_section (sec);
+
+      mdata->sections[target_index] = msect;
+
+      msect->addr = bfd_get_section_vma (abfd, sec);
+      msect->size = bfd_get_section_size (sec);
+
+      /* Use the largest alignment set, in case it was bumped after the 
+	 section was created.  */
+      msect->align = msect->align > bfd_align ? msect->align : bfd_align;
+
+      msect->offset = 0;
+      sec->target_index = ++target_index;
+    }
+
   return TRUE;
 }
 
@@ -1226,27 +1938,14 @@ bfd_mach_o_write_contents (bfd *abfd)
   unsigned int i;
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
 
+  /* Make the commands, if not already present.  */
   if (mdata->header.ncmds == 0)
     if (!bfd_mach_o_build_commands (abfd))
       return FALSE;
 
-  /* Now write header information.  */
-  if (mdata->header.filetype == 0)
-    {
-      if (abfd->flags & EXEC_P)
-        mdata->header.filetype = BFD_MACH_O_MH_EXECUTE;
-      else if (abfd->flags & DYNAMIC)
-        mdata->header.filetype = BFD_MACH_O_MH_DYLIB;
-      else
-        mdata->header.filetype = BFD_MACH_O_MH_OBJECT;
-    }
   if (!bfd_mach_o_write_header (abfd, &mdata->header))
     return FALSE;
 
-  /* Assign a number to each symbols.  */
-  if (!bfd_mach_o_mangle_symbols (abfd))
-    return FALSE;
-
   for (i = 0; i < mdata->header.ncmds; i++)
     {
       struct mach_o_load_command_external raw;
@@ -1276,6 +1975,10 @@ bfd_mach_o_write_contents (bfd *abfd)
 	  if (!bfd_mach_o_write_symtab (abfd, cur))
 	    return FALSE;
 	  break;
+	case BFD_MACH_O_LC_DYSYMTAB:
+	  if (!bfd_mach_o_write_dysymtab (abfd, cur))
+	    return FALSE;
+	  break;
 	case BFD_MACH_O_LC_SYMSEG:
 	  break;
 	case BFD_MACH_O_LC_THREAD:
@@ -1288,7 +1991,6 @@ bfd_mach_o_write_contents (bfd *abfd)
 	case BFD_MACH_O_LC_IDENT:
 	case BFD_MACH_O_LC_FVMFILE:
 	case BFD_MACH_O_LC_PREPAGE:
-	case BFD_MACH_O_LC_DYSYMTAB:
 	case BFD_MACH_O_LC_LOAD_DYLIB:
 	case BFD_MACH_O_LC_LOAD_WEAK_DYLIB:
 	case BFD_MACH_O_LC_ID_DYLIB:
@@ -1344,110 +2046,493 @@ bfd_mach_o_set_section_flags_from_bfd (bfd *abfd ATTRIBUTE_UNUSED, asection *sec
     s->flags = BFD_MACH_O_S_REGULAR;
 }
 
-/* Build Mach-O load commands from the sections.  */
+/* Count the number of sections in the list for the segment named.
+
+   The special case of NULL or "" for the segment name is valid for
+   an MH_OBJECT file and means 'all sections available'.  
+   
+   Requires that the sections table in mdata be filled in.  
+
+   Returns the number of sections (0 is valid).
+   Any number > 255 signals an invalid section count, although we will,
+   perhaps, allow the file to be written (in line with Darwin tools up
+   to XCode 4). 
+   
+   A section count of (unsigned long) -1 signals a definite error.  */
+
+static unsigned long
+bfd_mach_o_count_sections_for_seg (const char *segment,
+				   bfd_mach_o_data_struct *mdata)
+{
+  unsigned i,j;
+  if (mdata == NULL || mdata->sections == NULL)
+    return (unsigned long) -1;
+
+  /* The MH_OBJECT case, all sections are considered; Although nsects is
+     is an unsigned long, the maximum valid section count is 255 and this
+     will have been checked already by mangle_sections.  */
+  if (segment == NULL || segment[0] == '\0')
+    return mdata->nsects;
+
+  /* Count the number of sections we see in this segment.  */
+  j = 0;
+  for (i = 0; i < mdata->nsects; ++i)
+    {
+      bfd_mach_o_section *s = mdata->sections[i];
+      if (strncmp (segment, s->segname, BFD_MACH_O_SEGNAME_SIZE) == 0)
+        j++;
+    }
+  return j;
+}
+
+static bfd_boolean
+bfd_mach_o_build_seg_command (const char *segment,
+			      bfd_mach_o_data_struct *mdata,
+			      bfd_mach_o_segment_command *seg)
+{
+  unsigned i;
+  int is_mho = (segment == NULL || segment[0] == '\0');
+
+  /* Fill segment command.  */
+  if (is_mho)
+    memset (seg->segname, 0, sizeof (seg->segname));
+  else
+    strncpy (seg->segname, segment, sizeof (seg->segname));
+
+  /* TODO: fix this up for non-MH_OBJECT cases.  */
+  seg->vmaddr = 0;
+  seg->vmsize = 0;
+
+  seg->fileoff = mdata->filelen;
+  seg->filesize = 0;
+  seg->maxprot = BFD_MACH_O_PROT_READ | BFD_MACH_O_PROT_WRITE
+		 | BFD_MACH_O_PROT_EXECUTE;
+  seg->initprot = seg->maxprot;
+  seg->flags = 0;
+  seg->sect_head = NULL;
+  seg->sect_tail = NULL;
+
+  /*  Append sections to the segment.  
+
+      This is a little tedious, we have to honor the need to account zerofill
+      sections after all the rest.  This forces us to do the calculation of
+      total vmsize in three passes so that any alignment increments are 
+      properly accounted.  */
+
+  for (i = 0; i < mdata->nsects; ++i)
+    {
+      bfd_mach_o_section *s = mdata->sections[i];
+      asection *sec = s->bfdsection;
+
+      /* If we're not making an MH_OBJECT, check whether this section is from
+	 our segment, and skip if not.  Otherwise, just add all sections.  */
+      if (! is_mho 
+	  && strncmp (segment, s->segname, BFD_MACH_O_SEGNAME_SIZE) != 0)
+	continue;
+
+      /* Although we account for zerofill section sizes in vm order, they are
+	 placed in the file in source sequence.  */
+      bfd_mach_o_append_section_to_segment (seg, sec);
+      s->offset = 0;
+      
+      /* Zerofill sections have zero file size & offset, 
+	 and are not written.  */
+      if ((s->flags & BFD_MACH_O_SECTION_TYPE_MASK) == BFD_MACH_O_S_ZEROFILL
+          || (s->flags & BFD_MACH_O_SECTION_TYPE_MASK) 
+	      == BFD_MACH_O_S_GB_ZEROFILL)
+        continue;
+
+      if (s->size > 0)
+       {
+	  seg->vmsize = FILE_ALIGN (seg->vmsize, s->align);
+	  seg->vmsize += s->size;
+
+	  seg->filesize = FILE_ALIGN (seg->filesize, s->align);
+	  seg->filesize += s->size;
+
+          mdata->filelen = FILE_ALIGN (mdata->filelen, s->align);
+          s->offset = mdata->filelen;
+        }
+
+      sec->filepos = s->offset;
+      mdata->filelen += s->size;
+    }
+
+  /* Now pass through again, for zerofill, only now we just update the vmsize.  */
+  for (i = 0; i < mdata->nsects; ++i)
+    {
+      bfd_mach_o_section *s = mdata->sections[i];
+
+      if ((s->flags & BFD_MACH_O_SECTION_TYPE_MASK) != BFD_MACH_O_S_ZEROFILL)
+        continue;
+
+      if (! is_mho 
+	  && strncmp (segment, s->segname, BFD_MACH_O_SEGNAME_SIZE) != 0)
+	continue;
+
+      if (s->size > 0)
+	{
+	  seg->vmsize = FILE_ALIGN (seg->vmsize, s->align);
+	  seg->vmsize += s->size;
+	}
+    }
+
+  /* Now pass through again, for zerofill_GB.  */
+  for (i = 0; i < mdata->nsects; ++i)
+    {
+      bfd_mach_o_section *s = mdata->sections[i];
+ 
+      if ((s->flags & BFD_MACH_O_SECTION_TYPE_MASK) != BFD_MACH_O_S_GB_ZEROFILL)
+        continue;
+
+      if (! is_mho 
+	  && strncmp (segment, s->segname, BFD_MACH_O_SEGNAME_SIZE) != 0)
+	continue;
+
+      if (s->size > 0)
+	{
+	  seg->vmsize = FILE_ALIGN (seg->vmsize, s->align);
+	  seg->vmsize += s->size;
+	}
+    }
+
+  /* Allocate space for the relocations.  */
+  mdata->filelen = FILE_ALIGN(mdata->filelen, 2);
+
+  for (i = 0; i < mdata->nsects; ++i)
+    {
+      bfd_mach_o_section *ms = mdata->sections[i];
+      asection *sec = ms->bfdsection;
+        
+      if ((ms->nreloc = sec->reloc_count) == 0)
+        {
+	  ms->reloff = 0;
+	  continue;
+        }
+      sec->rel_filepos = mdata->filelen;
+      ms->reloff = sec->rel_filepos;
+      mdata->filelen += sec->reloc_count * BFD_MACH_O_RELENT_SIZE;
+    }
+
+  return TRUE;
+}
+
+/* Count the number of indirect symbols in the image.
+   Requires that the sections are in their final order.  */
+
+static unsigned int
+bfd_mach_o_count_indirect_symbols (bfd *abfd, bfd_mach_o_data_struct *mdata)
+{
+  unsigned int i;
+  unsigned int nisyms = 0;
+
+  for (i = 0; i < mdata->nsects; ++i)
+    {
+      bfd_mach_o_section *sec = mdata->sections[i];
+
+      switch (sec->flags & BFD_MACH_O_SECTION_TYPE_MASK)
+	{
+	  case BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS:
+	  case BFD_MACH_O_S_LAZY_SYMBOL_POINTERS:
+	  case BFD_MACH_O_S_SYMBOL_STUBS:
+	    nisyms += bfd_mach_o_section_get_nbr_indirect (abfd, sec);
+	    break;
+	  default:
+	    break;
+	}
+    }
+  return nisyms;
+}
+
+static bfd_boolean
+bfd_mach_o_build_dysymtab_command (bfd *abfd,
+				   bfd_mach_o_data_struct *mdata,
+				   bfd_mach_o_load_command *cmd)
+{
+  bfd_mach_o_dysymtab_command *dsym = &cmd->command.dysymtab;
+
+  /* TODO:
+     We are not going to try and fill these in yet and, moreover, we are
+     going to bail if they are already set.  */
+  if (dsym->nmodtab != 0
+      || dsym->ntoc != 0
+      || dsym->nextrefsyms != 0)
+    {
+      (*_bfd_error_handler) (_("sorry: modtab, toc and extrefsyms are not yet"
+				" implemented for dysymtab commands."));
+      return FALSE;
+    }
+
+  dsym->ilocalsym = 0;
+
+  if (bfd_get_symcount (abfd) > 0)
+    {
+      asymbol **symbols = bfd_get_outsymbols (abfd);
+      unsigned long i;
+
+       /* Count the number of each kind of symbol.  */
+      for (i = 0; i < bfd_get_symcount (abfd); ++i)
+	{
+	  bfd_mach_o_asymbol *s = (bfd_mach_o_asymbol *)symbols[i];
+	  if (s->n_type & (BFD_MACH_O_N_EXT | BFD_MACH_O_N_PEXT))
+	    break;
+	}
+      dsym->nlocalsym = i;
+      dsym->iextdefsym = i;
+      for (; i < bfd_get_symcount (abfd); ++i)
+	{
+	  bfd_mach_o_asymbol *s = (bfd_mach_o_asymbol *)symbols[i];
+	  if ((s->n_type & BFD_MACH_O_N_TYPE) == BFD_MACH_O_N_UNDF)
+	    break;
+	}
+      dsym->nextdefsym = i - dsym->nlocalsym;
+      dsym->iundefsym = dsym->nextdefsym + dsym->iextdefsym;
+      dsym->nundefsym = bfd_get_symcount (abfd) 
+			- dsym->nlocalsym 
+			- dsym->nextdefsym;
+    }
+  else
+    {
+      dsym->nlocalsym = 0;
+      dsym->iextdefsym = 0;
+      dsym->nextdefsym = 0;
+      dsym->iundefsym = 0;
+      dsym->nundefsym = 0;
+    }
+
+  dsym->nindirectsyms = bfd_mach_o_count_indirect_symbols (abfd, mdata);
+  if (dsym->nindirectsyms > 0)
+    {
+      unsigned i;
+      unsigned n;
+
+      mdata->filelen = FILE_ALIGN (mdata->filelen, 2);
+      dsym->indirectsymoff = mdata->filelen;
+      mdata->filelen += dsym->nindirectsyms * 4;
+      
+      dsym->indirect_syms = bfd_zalloc (abfd, dsym->nindirectsyms * 4);
+      if (dsym->indirect_syms == NULL)
+        return FALSE;
+		  
+      n = 0;
+      for (i = 0; i < mdata->nsects; ++i)
+	{
+	  bfd_mach_o_section *sec = mdata->sections[i];
+
+	  switch (sec->flags & BFD_MACH_O_SECTION_TYPE_MASK)
+	    {
+	      case BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS:
+	      case BFD_MACH_O_S_LAZY_SYMBOL_POINTERS:
+	      case BFD_MACH_O_S_SYMBOL_STUBS:
+		{
+		  unsigned j, num;
+		  bfd_mach_o_asymbol **isyms = sec->indirect_syms;
+		  
+		  num = bfd_mach_o_section_get_nbr_indirect (abfd, sec);
+		  if (isyms == NULL || num == 0)
+		    break;
+		  /* Record the starting index in the reserved1 field.  */
+		  sec->reserved1 = n;
+		  for (j = 0; j < num; j++, n++)
+		    {
+		      if (isyms[j] == NULL)
+		        dsym->indirect_syms[n] = BFD_MACH_O_INDIRECT_SYM_LOCAL;
+		      else if (isyms[j]->symbol.section == bfd_abs_section_ptr
+			       && ! (isyms[j]->n_type & BFD_MACH_O_N_EXT))
+		        dsym->indirect_syms[n] = BFD_MACH_O_INDIRECT_SYM_LOCAL
+						 | BFD_MACH_O_INDIRECT_SYM_ABS;
+		      else
+		        dsym->indirect_syms[n] = isyms[j]->symbol.udata.i;
+		    }
+		}
+		break;
+	      default:
+		break;
+	    }
+	}
+    }
+
+  return TRUE;
+}
+
+/* Build Mach-O load commands (currently assuming an MH_OBJECT file).
+   TODO: Other file formats, rebuilding symtab/dysymtab commands for strip
+   and copy functionality.  */
+
+bfd_boolean
+bfd_mach_o_build_commands (bfd *abfd)
+{
+  bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
+  unsigned wide = mach_o_wide_p (&mdata->header);
+  int segcmd_idx = -1;
+  int symtab_idx = -1;
+  int dysymtab_idx = -1;
+  unsigned long base_offset = 0;
+
+  /* Return now if commands are already present.  */
+  if (mdata->header.ncmds)
+    return FALSE;
+
+  /* Fill in the file type, if not already set.  */
+
+  if (mdata->header.filetype == 0)
+    {
+      if (abfd->flags & EXEC_P)
+        mdata->header.filetype = BFD_MACH_O_MH_EXECUTE;
+      else if (abfd->flags & DYNAMIC)
+        mdata->header.filetype = BFD_MACH_O_MH_DYLIB;
+      else
+        mdata->header.filetype = BFD_MACH_O_MH_OBJECT;
+    }
 
-bfd_boolean
-bfd_mach_o_build_commands (bfd *abfd)
-{
-  bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
-  unsigned int wide = mach_o_wide_p (&mdata->header);
-  bfd_mach_o_segment_command *seg;
-  asection *sec;
-  bfd_mach_o_load_command *cmd;
-  bfd_mach_o_load_command *symtab_cmd;
-  int target_index;
+  /* If hasn't already been done, flatten sections list, and sort
+     if/when required.  Must be done before the symbol table is adjusted,
+     since that depends on properly numbered sections.  */
+  if (mdata->nsects == 0 || mdata->sections == NULL)
+    if (! bfd_mach_o_mangle_sections (abfd, mdata))
+      return FALSE;
 
-  /* Return now if commands are already built.  */
-  if (mdata->header.ncmds)
+  /* Order the symbol table, fill-in/check mach-o specific fields and
+     partition out any indirect symbols.  */
+  if (!bfd_mach_o_mangle_symbols (abfd))
     return FALSE;
 
-  /* Very simple version: a command (segment) to contain all the sections and
-     a command for the symbol table.  */
-  mdata->header.ncmds = 2;
-  mdata->commands = bfd_alloc (abfd, mdata->header.ncmds
-                               * sizeof (bfd_mach_o_load_command));
-  if (mdata->commands == NULL)
-    return FALSE;
-  cmd = &mdata->commands[0];
-  seg = &cmd->command.segment;
+  /* Very simple command set (only really applicable to MH_OBJECTs):
+     All the commands are optional - present only when there is suitable data.
+     (i.e. it is valid to have an empty file)
 
-  seg->nsects = bfd_count_sections (abfd);
+	a command (segment) to contain all the sections,
+	command for the symbol table,
+	a command for the dysymtab.  
 
-  /* Set segment command.  */
-  if (wide)
+     ??? maybe we should assert that this is an MH_OBJECT?  */
+
+  if (mdata->nsects > 0)
     {
-      cmd->type = BFD_MACH_O_LC_SEGMENT_64;
-      cmd->offset = BFD_MACH_O_HEADER_64_SIZE;
-      cmd->len = BFD_MACH_O_LC_SEGMENT_64_SIZE
-        + BFD_MACH_O_SECTION_64_SIZE * seg->nsects;
+      segcmd_idx = 0;
+      mdata->header.ncmds = 1;
     }
-  else
+
+  if (bfd_get_symcount (abfd) > 0)
     {
-      cmd->type = BFD_MACH_O_LC_SEGMENT;
-      cmd->offset = BFD_MACH_O_HEADER_SIZE;
-      cmd->len = BFD_MACH_O_LC_SEGMENT_SIZE
-        + BFD_MACH_O_SECTION_SIZE * seg->nsects;
+      mdata->header.ncmds++;
+      symtab_idx = segcmd_idx + 1; /* 0 if the seg command is absent.  */
     }
-  cmd->type_required = FALSE;
-  mdata->header.sizeofcmds = cmd->len;
-  mdata->filelen = cmd->offset + cmd->len;
 
-  /* Set symtab command.  */
-  symtab_cmd = &mdata->commands[1];
-  
-  symtab_cmd->type = BFD_MACH_O_LC_SYMTAB;
-  symtab_cmd->offset = cmd->offset + cmd->len;
-  symtab_cmd->len = 6 * 4;
-  symtab_cmd->type_required = FALSE;
-  
-  mdata->header.sizeofcmds += symtab_cmd->len;
-  mdata->filelen += symtab_cmd->len;
+  /* FIXME:
+     This is a rather crude test for whether we should build a dysymtab.  */
+  if (bfd_mach_o_should_emit_dysymtab ()
+      && bfd_get_symcount (abfd))
+    {
+      mdata->header.ncmds++;
+      /* If there should be a case where a dysymtab could be emitted without
+	 a symtab (seems improbable), this would need amending.  */
+      dysymtab_idx = symtab_idx + 1;
+    }
 
-  /* Fill segment command.  */
-  memset (seg->segname, 0, sizeof (seg->segname));
-  seg->vmaddr = 0;
-  seg->fileoff = mdata->filelen;
-  seg->filesize = 0;
-  seg->maxprot = BFD_MACH_O_PROT_READ | BFD_MACH_O_PROT_WRITE
-    | BFD_MACH_O_PROT_EXECUTE;
-  seg->initprot = seg->maxprot;
-  seg->flags = 0;
-  seg->sect_head = NULL;
-  seg->sect_tail = NULL;
+  if (wide)
+    base_offset = BFD_MACH_O_HEADER_64_SIZE;
+  else
+    base_offset = BFD_MACH_O_HEADER_SIZE;
 
-  /* Create Mach-O sections.  */
-  target_index = 0;
-  for (sec = abfd->sections; sec; sec = sec->next)
-    {
-      bfd_mach_o_section *msect = bfd_mach_o_get_mach_o_section (sec);
+  /* Well, we must have a header, at least.  */
+  mdata->filelen = base_offset;
 
-      bfd_mach_o_append_section_to_segment (seg, sec);
+  /* A bit unusual, but no content is valid;
+     as -n empty.s -o empty.o  */
+  if (mdata->header.ncmds == 0)
+    return TRUE;
 
-      if (msect->flags == 0)
-        {
-          /* We suppose it hasn't been set.  Convert from BFD flags.  */
-          bfd_mach_o_set_section_flags_from_bfd (abfd, sec);
-        }
-      msect->addr = bfd_get_section_vma (abfd, sec);
-      msect->size = bfd_get_section_size (sec);
-      msect->align = bfd_get_section_alignment (abfd, sec);
+  mdata->commands = bfd_zalloc (abfd, mdata->header.ncmds
+                                * sizeof (bfd_mach_o_load_command));
+  if (mdata->commands == NULL)
+    return FALSE;
 
-      if (msect->size != 0)
-        {
-          mdata->filelen = FILE_ALIGN (mdata->filelen, msect->align);
-          msect->offset = mdata->filelen;
-        }
+  if (segcmd_idx >= 0)
+    {  
+      bfd_mach_o_load_command *cmd = &mdata->commands[segcmd_idx];
+      bfd_mach_o_segment_command *seg = &cmd->command.segment;
+
+      /* Count the segctions in the special blank segment used for MH_OBJECT.  */
+      seg->nsects = bfd_mach_o_count_sections_for_seg (NULL, mdata);
+      if (seg->nsects == (unsigned long) -1)
+	return FALSE;
+
+      /* Init segment command.  */
+      cmd->offset = base_offset;
+      if (wide)
+	{
+	  cmd->type = BFD_MACH_O_LC_SEGMENT_64;
+	  cmd->len = BFD_MACH_O_LC_SEGMENT_64_SIZE
+			+ BFD_MACH_O_SECTION_64_SIZE * seg->nsects;
+	}
       else
-        msect->offset = 0;
+	{
+	  cmd->type = BFD_MACH_O_LC_SEGMENT;
+	  cmd->len = BFD_MACH_O_LC_SEGMENT_SIZE
+			+ BFD_MACH_O_SECTION_SIZE * seg->nsects;
+	}
 
-      sec->filepos = msect->offset;
-      sec->target_index = ++target_index;
+      cmd->type_required = FALSE;
+      mdata->header.sizeofcmds = cmd->len;
+      mdata->filelen += cmd->len;
+    }
+
+  if (symtab_idx >= 0)
+    {
+      /* Init symtab command.  */
+      bfd_mach_o_load_command *cmd = &mdata->commands[symtab_idx];
+  
+      cmd->type = BFD_MACH_O_LC_SYMTAB;
+      cmd->offset = base_offset;
+      if (segcmd_idx >= 0)
+        cmd->offset += mdata->commands[segcmd_idx].len;
+
+      cmd->len = sizeof (struct mach_o_symtab_command_external)
+		 + BFD_MACH_O_LC_SIZE;
+      cmd->type_required = FALSE;
+      mdata->header.sizeofcmds += cmd->len;
+      mdata->filelen += cmd->len;
+    }
+
+  /* If required, setup symtab command, see comment above about the quality
+     of this test.  */
+  if (dysymtab_idx >= 0)
+    {
+      bfd_mach_o_load_command *cmd = &mdata->commands[dysymtab_idx];
+
+      cmd->type = BFD_MACH_O_LC_DYSYMTAB;
+      if (symtab_idx >= 0)
+        cmd->offset = mdata->commands[symtab_idx].offset 
+		    + mdata->commands[symtab_idx].len;
+      else if (segcmd_idx >= 0)
+        cmd->offset = mdata->commands[segcmd_idx].offset 
+		    + mdata->commands[segcmd_idx].len;
+      else
+	cmd->offset = base_offset;
+
+      cmd->type_required = FALSE;
+      cmd->len = sizeof (struct mach_o_dysymtab_command_external)
+		 + BFD_MACH_O_LC_SIZE;
 
-      mdata->filelen += msect->size;
+      mdata->header.sizeofcmds += cmd->len;
+      mdata->filelen += cmd->len;
     }
-  seg->filesize = mdata->filelen - seg->fileoff;
-  seg->vmsize = seg->filesize;
 
+  /* So, now we have sized the commands and the filelen set to that.
+     Now we can build the segment command and set the section file offsets.  */
+  if (segcmd_idx >= 0
+      && ! bfd_mach_o_build_seg_command 
+		(NULL, mdata, &mdata->commands[segcmd_idx].command.segment))
+    return FALSE;
+
+  /* If we're doing a dysymtab, cmd points to its load command.  */
+  if (dysymtab_idx >= 0
+      && ! bfd_mach_o_build_dysymtab_command (abfd, mdata, 
+					      &mdata->commands[dysymtab_idx]))
+    return FALSE;
+
+  /* The symtab command is filled in when the symtab is written.  */
   return TRUE;
 }
 
@@ -1462,8 +2547,8 @@ bfd_mach_o_set_section_contents (bfd *abfd,
 {
   file_ptr pos;
 
-  /* This must be done first, because bfd_set_section_contents is
-     going to set output_has_begun to TRUE.  */
+  /* Trying to write the first section contents will trigger the creation of
+     the load commands if they are not already present.  */
   if (! abfd->output_has_begun && ! bfd_mach_o_build_commands (abfd))
     return FALSE;
 
@@ -1497,7 +2582,7 @@ bfd_mach_o_make_empty_symbol (bfd *abfd)
   if (new_symbol == NULL)
     return new_symbol;
   new_symbol->the_bfd = abfd;
-  new_symbol->udata.i = 0;
+  new_symbol->udata.i = SYM_MACHO_FIELDS_UNSET;
   return new_symbol;
 }
 
@@ -1564,6 +2649,8 @@ bfd_mach_o_read_header (bfd *abfd, bfd_mach_o_header *header)
 
   if (mach_o_wide_p (header))
     header->reserved = (*get32) (raw.reserved);
+  else
+    header->reserved = 0;
 
   return TRUE;
 }
@@ -1572,11 +2659,13 @@ bfd_boolean
 bfd_mach_o_new_section_hook (bfd *abfd, asection *sec)
 {
   bfd_mach_o_section *s;
+  unsigned bfdalign = bfd_get_section_alignment (abfd, sec);
 
   s = bfd_mach_o_get_mach_o_section (sec);
   if (s == NULL)
     {
       flagword bfd_flags;
+      static const mach_o_section_name_xlat * xlat;
 
       s = (bfd_mach_o_section *) bfd_zalloc (abfd, sizeof (*s));
       if (s == NULL)
@@ -1584,21 +2673,24 @@ bfd_mach_o_new_section_hook (bfd *abfd, asection *sec)
       sec->used_by_bfd = s;
       s->bfdsection = sec;
 
-      /* Create default name.  */
-      bfd_mach_o_convert_section_name_to_mach_o (abfd, sec, s);
-
-      /* Create default flags.  */
-      bfd_flags = bfd_get_section_flags (abfd, sec);
-      if ((bfd_flags & SEC_CODE) == SEC_CODE)
-        s->flags = BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS
-          | BFD_MACH_O_S_ATTR_SOME_INSTRUCTIONS
-          | BFD_MACH_O_S_REGULAR;
-      else if ((bfd_flags & (SEC_ALLOC | SEC_LOAD)) == SEC_ALLOC)
-        s->flags = BFD_MACH_O_S_ZEROFILL;
-      else if (bfd_flags & SEC_DEBUGGING)
-        s->flags = BFD_MACH_O_S_REGULAR |  BFD_MACH_O_S_ATTR_DEBUG;
+      /* Create the Darwin seg/sect name pair from the bfd name.
+	 If this is a canonical name for which a specific paiting exists
+	 there will also be defined flags, type, attribute and alignment
+	 values.  */
+      xlat = bfd_mach_o_convert_section_name_to_mach_o (abfd, sec, s);
+      if (xlat != NULL)
+	{
+	  s->flags = xlat->macho_sectype | xlat->macho_secattr;
+	  s->align = xlat->sectalign > bfdalign ? xlat->sectalign 
+						: bfdalign;
+	  bfd_set_section_alignment (abfd, sec, s->align);
+	  bfd_flags = bfd_get_section_flags (abfd, sec);
+	  if (bfd_flags == SEC_NO_FLAGS)
+	    bfd_set_section_flags (abfd, sec, xlat->bfd_flags);
+	}
       else
-        s->flags = BFD_MACH_O_S_REGULAR;
+	/* Create default flags.  */
+	bfd_mach_o_set_section_flags_from_bfd (abfd, sec);
     }
 
   return _bfd_generic_new_section_hook (abfd, sec);
@@ -1614,6 +2706,9 @@ bfd_mach_o_init_section_from_mach_o (bfd *abfd, asection *sec,
   flags = bfd_get_section_flags (abfd, sec);
   section = bfd_mach_o_get_mach_o_section (sec);
 
+  /* TODO: see if we should use the xlat system for doing this by
+     preference and fall back to this for unknown sections.  */
+
   if (flags == SEC_NO_FLAGS)
     {
       /* Try to guess flags.  */
@@ -1817,7 +2912,7 @@ bfd_mach_o_read_symtab_symbol (bfd *abfd,
   s->symbol.name = sym->strtab + stroff;
   s->symbol.value = value;
   s->symbol.flags = 0x0;
-  s->symbol.udata.i = 0;
+  s->symbol.udata.i = i;
   s->n_type = type;
   s->n_sect = section;
   s->n_desc = desc;
@@ -1848,13 +2943,9 @@ bfd_mach_o_read_symtab_symbol (bfd *abfd,
     }
   else
     {
-      if (type & BFD_MACH_O_N_PEXT)
-	s->symbol.flags |= BSF_GLOBAL;
-
-      if (type & BFD_MACH_O_N_EXT)
+      if (type & (BFD_MACH_O_N_PEXT | BFD_MACH_O_N_EXT))
 	s->symbol.flags |= BSF_GLOBAL;
-
-      if (!(type & (BFD_MACH_O_N_PEXT | BFD_MACH_O_N_EXT)))
+      else
 	s->symbol.flags |= BSF_LOCAL;
 
       switch (symtype)
@@ -2111,6 +3202,32 @@ bfd_mach_o_read_prebound_dylib (bfd *abfd ATTRIBUTE_UNUSED,
 }
 
 static int
+bfd_mach_o_read_fvmlib (bfd *abfd, bfd_mach_o_load_command *command)
+{
+  bfd_mach_o_fvmlib_command *fvm = &command->command.fvmlib;
+  struct mach_o_fvmlib_command_external raw;
+  unsigned int nameoff;
+
+  if (bfd_seek (abfd, command->offset + BFD_MACH_O_LC_SIZE, SEEK_SET) != 0
+      || bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return -1;
+
+  nameoff = bfd_h_get_32 (abfd, raw.name);
+  fvm->minor_version = bfd_h_get_32 (abfd, raw.minor_version);
+  fvm->header_addr = bfd_h_get_32 (abfd, raw.header_addr);
+
+  fvm->name_offset = command->offset + nameoff;
+  fvm->name_len = command->len - nameoff;
+  fvm->name_str = bfd_alloc (abfd, fvm->name_len);
+  if (fvm->name_str == NULL)
+    return -1;
+  if (bfd_seek (abfd, fvm->name_offset, SEEK_SET) != 0
+      || bfd_bread (fvm->name_str, fvm->name_len, abfd) != fvm->name_len)
+    return -1;
+  return 0;
+}
+
+static int
 bfd_mach_o_read_thread (bfd *abfd, bfd_mach_o_load_command *command)
 {
   bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
@@ -2523,6 +3640,22 @@ bfd_mach_o_read_version_min (bfd *abfd, bfd_mach_o_load_command *command)
   return TRUE;
 }
 
+static bfd_boolean
+bfd_mach_o_read_encryption_info (bfd *abfd, bfd_mach_o_load_command *command)
+{
+  bfd_mach_o_encryption_info_command *cmd = &command->command.encryption_info;
+  struct mach_o_encryption_info_command_external raw;
+
+  if (bfd_seek (abfd, command->offset + BFD_MACH_O_LC_SIZE, SEEK_SET) != 0
+      || bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
+    return FALSE;
+
+  cmd->cryptoff = bfd_get_32 (abfd, raw.cryptoff);
+  cmd->cryptsize = bfd_get_32 (abfd, raw.cryptsize);
+  cmd->cryptid = bfd_get_32 (abfd, raw.cryptid);
+  return TRUE;
+}
+
 static int
 bfd_mach_o_read_segment (bfd *abfd,
                          bfd_mach_o_load_command *command,
@@ -2668,6 +3801,9 @@ bfd_mach_o_read_command (bfd *abfd, bfd_mach_o_load_command *command)
       break;
     case BFD_MACH_O_LC_LOADFVMLIB:
     case BFD_MACH_O_LC_IDFVMLIB:
+      if (bfd_mach_o_read_fvmlib (abfd, command) != 0)
+	return -1;
+      break;
     case BFD_MACH_O_LC_IDENT:
     case BFD_MACH_O_LC_FVMFILE:
     case BFD_MACH_O_LC_PREPAGE:
@@ -2699,6 +3835,10 @@ bfd_mach_o_read_command (bfd *abfd, bfd_mach_o_load_command *command)
       if (bfd_mach_o_read_linkedit (abfd, command) != 0)
 	return -1;
       break;
+    case BFD_MACH_O_LC_ENCRYPTION_INFO:
+      if (!bfd_mach_o_read_encryption_info (abfd, command))
+	return -1;
+      break;
     case BFD_MACH_O_LC_DYLD_INFO:
       if (bfd_mach_o_read_dyld_info (abfd, command) != 0)
 	return -1;
@@ -2709,7 +3849,7 @@ bfd_mach_o_read_command (bfd *abfd, bfd_mach_o_load_command *command)
 	return -1;
       break;
     default:
-      (*_bfd_error_handler)(_("%B: unable to read unknown load command 0x%lx"),
+      (*_bfd_error_handler)(_("%B: unknown load command 0x%lx"),
          abfd, (unsigned long) command->type);
       break;
     }
@@ -2947,6 +4087,7 @@ bfd_mach_o_mkobject_init (bfd *abfd)
   mdata->commands = NULL;
   mdata->nsects = 0;
   mdata->sections = NULL;
+  mdata->dyn_reloc_cache = NULL;
 
   return TRUE;
 }
@@ -3005,17 +4146,7 @@ bfd_mach_o_header_p (bfd *abfd,
       if (header.cputype != cputype)
         goto wrong;
     }
-  else
-    {
-      switch (header.cputype)
-        {
-        case BFD_MACH_O_CPU_TYPE_I386:
-          /* Handled by mach-o-i386 */
-          goto wrong;
-        default:
-          break;
-        }
-    }
+
   if (filetype)
     {
       if (header.filetype != filetype)
@@ -3134,6 +4265,42 @@ bfd_mach_o_archive_p (bfd *abfd)
   return NULL;
 }
 
+/* Set the filename for a fat binary member ABFD, whose bfd architecture is
+   ARCH_TYPE/ARCH_SUBTYPE and corresponding entry in header is ENTRY.
+   Set arelt_data and origin fields too.  */
+
+static void
+bfd_mach_o_fat_member_init (bfd *abfd,
+                            enum bfd_architecture arch_type,
+                            unsigned long arch_subtype,
+                            mach_o_fat_archentry *entry)
+{
+  struct areltdata *areltdata;
+  /* Create the member filename. Use ARCH_NAME.  */
+  const bfd_arch_info_type *ap = bfd_lookup_arch (arch_type, arch_subtype);
+
+  if (ap)
+    {
+      /* Use the architecture name if known.  */
+      abfd->filename = ap->printable_name;
+    }
+  else
+    {
+      /* Forge a uniq id.  */
+      const size_t namelen = 2 + 8 + 1 + 2 + 8 + 1;
+      char *name = bfd_alloc (abfd, namelen);
+      snprintf (name, namelen, "0x%lx-0x%lx",
+                entry->cputype, entry->cpusubtype);
+      abfd->filename = name;
+    }
+
+  areltdata = bfd_zalloc (abfd, sizeof (struct areltdata));
+  areltdata->parsed_size = entry->size;
+  abfd->arelt_data = areltdata;
+  abfd->iostream = NULL;
+  abfd->origin = entry->offset;
+}
+
 bfd *
 bfd_mach_o_openr_next_archived_file (bfd *archive, bfd *prev)
 {
@@ -3149,9 +4316,13 @@ bfd_mach_o_openr_next_archived_file (bfd *archive, bfd *prev)
 
   /* Find index of previous entry.  */
   if (prev == NULL)
-    i = 0;	/* Start at first one.  */
+    {
+      /* Start at first one.  */
+      i = 0;
+    }
   else
     {
+      /* Find index of PREV.  */
       for (i = 0; i < adata->nfat_arch; i++)
 	{
 	  if (adata->archentries[i].offset == prev->origin)
@@ -3164,8 +4335,10 @@ bfd_mach_o_openr_next_archived_file (bfd *archive, bfd *prev)
 	  bfd_set_error (bfd_error_bad_value);
 	  return NULL;
 	}
-    i++;	/* Get next entry.  */
-  }
+
+      /* Get next entry.  */
+      i++;
+    }
 
   if (i >= adata->nfat_arch)
     {
@@ -3178,24 +4351,42 @@ bfd_mach_o_openr_next_archived_file (bfd *archive, bfd *prev)
   if (nbfd == NULL)
     return NULL;
 
-  nbfd->origin = entry->offset;
-
   bfd_mach_o_convert_architecture (entry->cputype, entry->cpusubtype,
 				   &arch_type, &arch_subtype);
 
-  /* Create the member filename. Use ARCH_NAME.  */
-  nbfd->filename = bfd_printable_arch_mach (arch_type, arch_subtype);
-  nbfd->iostream = NULL;
+  bfd_mach_o_fat_member_init (nbfd, arch_type, arch_subtype, entry);
+
   bfd_set_arch_mach (nbfd, arch_type, arch_subtype);
 
   return nbfd;
 }
 
+/* Analogous to stat call.  */
+
+static int
+bfd_mach_o_fat_stat_arch_elt (bfd *abfd, struct stat *buf)
+{
+  if (abfd->arelt_data == NULL)
+    {
+      bfd_set_error (bfd_error_invalid_operation);
+      return -1;
+    }
+
+  buf->st_mtime = 0;
+  buf->st_uid = 0;
+  buf->st_gid = 0;
+  buf->st_mode = 0644;
+  buf->st_size = arelt_size (abfd);
+
+  return 0;
+}
+
 /* If ABFD format is FORMAT and architecture is ARCH, return it.
    If ABFD is a fat image containing a member that corresponds to FORMAT
    and ARCH, returns it.
    In other case, returns NULL.
    This function allows transparent uses of fat images.  */
+
 bfd *
 bfd_mach_o_fat_extract (bfd *abfd,
 			bfd_format format,
@@ -3235,10 +4426,7 @@ bfd_mach_o_fat_extract (bfd *abfd,
       if (res == NULL)
 	return NULL;
 
-      res->origin = e->offset;
-
-      res->filename = bfd_printable_arch_mach (cpu_type, cpu_subtype);
-      res->iostream = NULL;
+      bfd_mach_o_fat_member_init (res, cpu_type, cpu_subtype, e);
 
       if (bfd_check_format (res, format))
 	{
@@ -3305,54 +4493,67 @@ bfd_mach_o_stack_addr (enum bfd_mach_o_cpu_type type)
     }
 }
 
+/* The following two tables should be kept, as far as possible, in order of
+   most frequently used entries to optimize their use from gas.  */
+
 const bfd_mach_o_xlat_name bfd_mach_o_section_type_name[] =
 {
   { "regular", BFD_MACH_O_S_REGULAR},
+  { "coalesced", BFD_MACH_O_S_COALESCED},
   { "zerofill", BFD_MACH_O_S_ZEROFILL},
   { "cstring_literals", BFD_MACH_O_S_CSTRING_LITERALS},
   { "4byte_literals", BFD_MACH_O_S_4BYTE_LITERALS},
   { "8byte_literals", BFD_MACH_O_S_8BYTE_LITERALS},
+  { "16byte_literals", BFD_MACH_O_S_16BYTE_LITERALS},
   { "literal_pointers", BFD_MACH_O_S_LITERAL_POINTERS},
-  { "non_lazy_symbol_pointers", BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS},
-  { "lazy_symbol_pointers", BFD_MACH_O_S_LAZY_SYMBOL_POINTERS},
-  { "symbol_stubs", BFD_MACH_O_S_SYMBOL_STUBS},
   { "mod_init_func_pointers", BFD_MACH_O_S_MOD_INIT_FUNC_POINTERS},
   { "mod_fini_func_pointers", BFD_MACH_O_S_MOD_FINI_FUNC_POINTERS},
-  { "coalesced", BFD_MACH_O_S_COALESCED},
   { "gb_zerofill", BFD_MACH_O_S_GB_ZEROFILL},
   { "interposing", BFD_MACH_O_S_INTERPOSING},
-  { "16byte_literals", BFD_MACH_O_S_16BYTE_LITERALS},
   { "dtrace_dof", BFD_MACH_O_S_DTRACE_DOF},
+  { "non_lazy_symbol_pointers", BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS},
+  { "lazy_symbol_pointers", BFD_MACH_O_S_LAZY_SYMBOL_POINTERS},
+  { "symbol_stubs", BFD_MACH_O_S_SYMBOL_STUBS},
   { "lazy_dylib_symbol_pointers", BFD_MACH_O_S_LAZY_DYLIB_SYMBOL_POINTERS},
   { NULL, 0}
 };
 
 const bfd_mach_o_xlat_name bfd_mach_o_section_attribute_name[] =
 {
+  { "pure_instructions", BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS },
+  { "some_instructions", BFD_MACH_O_S_ATTR_SOME_INSTRUCTIONS },
   { "loc_reloc", BFD_MACH_O_S_ATTR_LOC_RELOC },
   { "ext_reloc", BFD_MACH_O_S_ATTR_EXT_RELOC },
-  { "some_instructions", BFD_MACH_O_S_ATTR_SOME_INSTRUCTIONS },
   { "debug", BFD_MACH_O_S_ATTR_DEBUG },
-  { "modifying_code", BFD_MACH_O_S_SELF_MODIFYING_CODE },
   { "live_support", BFD_MACH_O_S_ATTR_LIVE_SUPPORT },
   { "no_dead_strip", BFD_MACH_O_S_ATTR_NO_DEAD_STRIP },
   { "strip_static_syms", BFD_MACH_O_S_ATTR_STRIP_STATIC_SYMS },
   { "no_toc", BFD_MACH_O_S_ATTR_NO_TOC },
-  { "pure_instructions", BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS },
+  { "self_modifying_code", BFD_MACH_O_S_SELF_MODIFYING_CODE },
+  { "modifying_code", BFD_MACH_O_S_SELF_MODIFYING_CODE },
   { NULL, 0}
 };
 
-/* Get the section type from NAME.  Return -1 if NAME is unknown.  */
+/* Get the section type from NAME.  Return 256 if NAME is unknown.  */
 
 unsigned int
-bfd_mach_o_get_section_type_from_name (const char *name)
+bfd_mach_o_get_section_type_from_name (bfd *abfd, const char *name)
 {
   const bfd_mach_o_xlat_name *x;
+  bfd_mach_o_backend_data *bed = bfd_mach_o_get_backend_data (abfd);
 
   for (x = bfd_mach_o_section_type_name; x->name; x++)
     if (strcmp (x->name, name) == 0)
-      return x->val;
-  return (unsigned int)-1;
+      {
+	/* We found it... does the target support it?  */
+	if (bed->bfd_mach_o_section_type_valid_for_target == NULL
+	    || bed->bfd_mach_o_section_type_valid_for_target (x->val))
+	  return x->val; /* OK.  */
+	else
+	  break; /* Not supported.  */
+      }
+  /* Maximum section ID = 0xff.  */
+  return 256;
 }
 
 /* Get the section attribute from NAME.  Return -1 if NAME is unknown.  */
@@ -3480,18 +4681,222 @@ bfd_mach_o_core_file_failing_signal (bfd *abfd ATTRIBUTE_UNUSED)
   return 0;
 }
 
+static bfd_mach_o_uuid_command *
+bfd_mach_o_lookup_uuid_command (bfd *abfd)
+{
+  bfd_mach_o_load_command *uuid_cmd;
+  int ncmd = bfd_mach_o_lookup_command (abfd, BFD_MACH_O_LC_UUID, &uuid_cmd);
+  if (ncmd != 1)
+    return FALSE;
+  return &uuid_cmd->command.uuid;
+}
+
+/* Return true if ABFD is a dSYM file and its UUID matches UUID_CMD. */
+
+static bfd_boolean
+bfd_mach_o_dsym_for_uuid_p (bfd *abfd, const bfd_mach_o_uuid_command *uuid_cmd)
+{
+  bfd_mach_o_uuid_command *dsym_uuid_cmd;
+
+  BFD_ASSERT (abfd);
+  BFD_ASSERT (uuid_cmd);
+
+  if (!bfd_check_format (abfd, bfd_object))
+    return FALSE;
+
+  if (bfd_get_flavour (abfd) != bfd_target_mach_o_flavour
+      || bfd_mach_o_get_data (abfd) == NULL
+      || bfd_mach_o_get_data (abfd)->header.filetype != BFD_MACH_O_MH_DSYM)
+    return FALSE;
+
+  dsym_uuid_cmd = bfd_mach_o_lookup_uuid_command (abfd);
+  if (dsym_uuid_cmd == NULL)
+    return FALSE;
+
+  if (memcmp (uuid_cmd->uuid, dsym_uuid_cmd->uuid,
+              sizeof (uuid_cmd->uuid)) != 0)
+    return FALSE;
+
+  return TRUE;
+}
+
+/* Find a BFD in DSYM_FILENAME which matches ARCH and UUID_CMD.
+   The caller is responsible for closing the returned BFD object and
+   its my_archive if the returned BFD is in a fat dSYM. */
+
+static bfd *
+bfd_mach_o_find_dsym (const char *dsym_filename,
+                      const bfd_mach_o_uuid_command *uuid_cmd,
+                      const bfd_arch_info_type *arch)
+{
+  bfd *base_dsym_bfd, *dsym_bfd;
+
+  BFD_ASSERT (uuid_cmd);
+
+  base_dsym_bfd = bfd_openr (dsym_filename, NULL);
+  if (base_dsym_bfd == NULL)
+    return NULL;
+
+  dsym_bfd = bfd_mach_o_fat_extract (base_dsym_bfd, bfd_object, arch);
+  if (bfd_mach_o_dsym_for_uuid_p (dsym_bfd, uuid_cmd))
+    return dsym_bfd;
+
+  bfd_close (dsym_bfd);
+  if (base_dsym_bfd != dsym_bfd)
+    bfd_close (base_dsym_bfd);
+
+  return NULL;
+}
+
+/* Return a BFD created from a dSYM file for ABFD.
+   The caller is responsible for closing the returned BFD object, its
+   filename, and its my_archive if the returned BFD is in a fat dSYM. */
+
+static bfd *
+bfd_mach_o_follow_dsym (bfd *abfd)
+{
+  char *dsym_filename;
+  bfd_mach_o_uuid_command *uuid_cmd;
+  bfd *dsym_bfd, *base_bfd = abfd;
+  const char *base_basename;
+
+  if (abfd == NULL || bfd_get_flavour (abfd) != bfd_target_mach_o_flavour)
+    return NULL;
+
+  if (abfd->my_archive)
+    base_bfd = abfd->my_archive;
+  /* BFD may have been opened from a stream. */
+  if (base_bfd->filename == NULL)
+    {
+      bfd_set_error (bfd_error_invalid_operation);
+      return NULL;
+    }
+  base_basename = lbasename (base_bfd->filename);
+
+  uuid_cmd = bfd_mach_o_lookup_uuid_command (abfd);
+  if (uuid_cmd == NULL)
+    return NULL;
+
+  /* TODO: We assume the DWARF file has the same as the binary's.
+     It seems apple's GDB checks all files in the dSYM bundle directory.
+     http://opensource.apple.com/source/gdb/gdb-1708/src/gdb/macosx/macosx-tdep.c
+  */
+  dsym_filename = (char *)bfd_malloc (strlen (base_bfd->filename)
+                                       + strlen (dsym_subdir) + 1
+                                       + strlen (base_basename) + 1);
+  sprintf (dsym_filename, "%s%s/%s",
+           base_bfd->filename, dsym_subdir, base_basename);
+
+  dsym_bfd = bfd_mach_o_find_dsym (dsym_filename, uuid_cmd,
+                                   bfd_get_arch_info (abfd));
+  if (dsym_bfd == NULL)
+    free (dsym_filename);
+
+  return dsym_bfd;
+}
+
+bfd_boolean
+bfd_mach_o_find_nearest_line (bfd *abfd,
+			      asection *section,
+			      asymbol **symbols,
+			      bfd_vma offset,
+			      const char **filename_ptr,
+			      const char **functionname_ptr,
+			      unsigned int *line_ptr)
+{
+  bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
+  if (mdata == NULL)
+    return FALSE;
+  switch (mdata->header.filetype)
+    {
+    case BFD_MACH_O_MH_OBJECT:
+      break;
+    case BFD_MACH_O_MH_EXECUTE:
+    case BFD_MACH_O_MH_DYLIB:
+    case BFD_MACH_O_MH_BUNDLE:
+    case BFD_MACH_O_MH_KEXT_BUNDLE:
+      if (mdata->dwarf2_find_line_info == NULL)
+        {
+          mdata->dsym_bfd = bfd_mach_o_follow_dsym (abfd);
+          /* When we couldn't find dSYM for this binary, we look for
+             the debug information in the binary itself. In this way,
+             we won't try finding separated dSYM again because
+             mdata->dwarf2_find_line_info will be filled. */
+          if (! mdata->dsym_bfd)
+            break;
+          if (! _bfd_dwarf2_slurp_debug_info (abfd, mdata->dsym_bfd,
+                                              dwarf_debug_sections, symbols,
+                                              &mdata->dwarf2_find_line_info))
+            return FALSE;
+        }
+      break;
+    default:
+      return FALSE;
+    }
+  if (_bfd_dwarf2_find_nearest_line (abfd, dwarf_debug_sections,
+				     section, symbols, offset,
+				     filename_ptr, functionname_ptr,
+				     line_ptr, 0,
+				     &mdata->dwarf2_find_line_info))
+    return TRUE;
+  return FALSE;
+}
+
+bfd_boolean
+bfd_mach_o_close_and_cleanup (bfd *abfd)
+{
+  bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
+  if (bfd_get_format (abfd) == bfd_object && mdata != NULL)
+    {
+      _bfd_dwarf2_cleanup_debug_info (abfd, &mdata->dwarf2_find_line_info);
+      bfd_mach_o_free_cached_info (abfd);
+      if (mdata->dsym_bfd != NULL)
+        {
+          bfd *fat_bfd = mdata->dsym_bfd->my_archive;
+          char *dsym_filename = (char *)(fat_bfd
+                                         ? fat_bfd->filename
+                                         : mdata->dsym_bfd->filename);
+          bfd_close (mdata->dsym_bfd);
+          mdata->dsym_bfd = NULL;
+          if (fat_bfd)
+            bfd_close (fat_bfd);
+          free (dsym_filename);
+        }
+    }
+
+  return _bfd_generic_close_and_cleanup (abfd);
+}
+
+bfd_boolean bfd_mach_o_free_cached_info (bfd *abfd)
+{
+  bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
+  asection *asect;
+  free (mdata->dyn_reloc_cache);
+  mdata->dyn_reloc_cache = NULL;
+  for (asect = abfd->sections; asect != NULL; asect = asect->next)
+    {
+      free (asect->relocation);
+      asect->relocation = NULL;
+    }
+
+  return TRUE;
+}
+
 #define bfd_mach_o_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup 
 #define bfd_mach_o_bfd_reloc_name_lookup _bfd_norelocs_bfd_reloc_name_lookup
 
 #define bfd_mach_o_swap_reloc_in NULL
 #define bfd_mach_o_swap_reloc_out NULL
 #define bfd_mach_o_print_thread NULL
+#define bfd_mach_o_tgt_seg_table NULL
+#define bfd_mach_o_section_type_valid_for_tgt NULL
 
 #define TARGET_NAME 		mach_o_be_vec
 #define TARGET_STRING     	"mach-o-be"
 #define TARGET_ARCHITECTURE	bfd_arch_unknown
 #define TARGET_BIG_ENDIAN 	1
 #define TARGET_ARCHIVE 		0
+#define TARGET_PRIORITY		1
 #include "mach-o-target.c"
 
 #undef TARGET_NAME
@@ -3499,12 +4904,14 @@ bfd_mach_o_core_file_failing_signal (bfd *abfd ATTRIBUTE_UNUSED)
 #undef TARGET_ARCHITECTURE
 #undef TARGET_BIG_ENDIAN
 #undef TARGET_ARCHIVE
+#undef TARGET_PRIORITY
 
 #define TARGET_NAME 		mach_o_le_vec
 #define TARGET_STRING 		"mach-o-le"
 #define TARGET_ARCHITECTURE	bfd_arch_unknown
 #define TARGET_BIG_ENDIAN 	0
 #define TARGET_ARCHIVE 		0
+#define TARGET_PRIORITY		1
 
 #include "mach-o-target.c"
 
@@ -3513,6 +4920,7 @@ bfd_mach_o_core_file_failing_signal (bfd *abfd ATTRIBUTE_UNUSED)
 #undef TARGET_ARCHITECTURE
 #undef TARGET_BIG_ENDIAN
 #undef TARGET_ARCHIVE
+#undef TARGET_PRIORITY
 
 /* Not yet handled: creating an archive.  */
 #define bfd_mach_o_mkarchive                      _bfd_noarchive_mkarchive
@@ -3526,7 +4934,7 @@ bfd_mach_o_core_file_failing_signal (bfd *abfd ATTRIBUTE_UNUSED)
 #define bfd_mach_o_truncate_arname                _bfd_noarchive_truncate_arname
 #define bfd_mach_o_write_armap                    _bfd_noarchive_write_armap
 #define bfd_mach_o_get_elt_at_index               _bfd_noarchive_get_elt_at_index
-#define bfd_mach_o_generic_stat_arch_elt          _bfd_noarchive_generic_stat_arch_elt
+#define bfd_mach_o_generic_stat_arch_elt          bfd_mach_o_fat_stat_arch_elt
 #define bfd_mach_o_update_armap_timestamp         _bfd_noarchive_update_armap_timestamp
 
 #define TARGET_NAME 		mach_o_fat_vec
@@ -3534,6 +4942,7 @@ bfd_mach_o_core_file_failing_signal (bfd *abfd ATTRIBUTE_UNUSED)
 #define TARGET_ARCHITECTURE	bfd_arch_unknown
 #define TARGET_BIG_ENDIAN 	1
 #define TARGET_ARCHIVE 		1
+#define TARGET_PRIORITY		0
 
 #include "mach-o-target.c"
 
@@ -3542,3 +4951,4 @@ bfd_mach_o_core_file_failing_signal (bfd *abfd ATTRIBUTE_UNUSED)
 #undef TARGET_ARCHITECTURE
 #undef TARGET_BIG_ENDIAN
 #undef TARGET_ARCHIVE
+#undef TARGET_PRIORITY
diff --git a/bfd/mach-o.h b/bfd/mach-o.h
index d85224e..f228df0 100644
--- a/bfd/mach-o.h
+++ b/bfd/mach-o.h
@@ -1,5 +1,6 @@
 /* Mach-O support for BFD.
-   Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2008, 2009
+   Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2008, 2009, 2011,
+   2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -41,6 +42,18 @@ typedef struct bfd_mach_o_header
 }
 bfd_mach_o_header;
 
+typedef struct bfd_mach_o_asymbol
+{
+  /* The actual symbol which the rest of BFD works with.  */
+  asymbol symbol;
+
+  /* Mach-O symbol fields.  */
+  unsigned char n_type;
+  unsigned char n_sect;
+  unsigned short n_desc;
+}
+bfd_mach_o_asymbol;
+
 #define BFD_MACH_O_SEGNAME_SIZE 16
 #define BFD_MACH_O_SECTNAME_SIZE 16
 
@@ -63,6 +76,12 @@ typedef struct bfd_mach_o_section
   /* Corresponding bfd section.  */
   asection *bfdsection;
 
+  /* An array holding the indirect symbols for this section.
+     NULL values indicate local symbols.
+     The number of symbols is determined from the section size and type.  */
+
+  bfd_mach_o_asymbol **indirect_syms;
+
   /* Simply linked list.  */
   struct bfd_mach_o_section *next;
 }
@@ -70,7 +89,7 @@ bfd_mach_o_section;
 
 typedef struct bfd_mach_o_segment_command
 {
-  char segname[16 + 1];
+  char segname[BFD_MACH_O_SEGNAME_SIZE + 1];
   bfd_vma vmaddr;
   bfd_vma vmsize;
   bfd_vma fileoff;
@@ -104,17 +123,14 @@ typedef struct bfd_mach_o_reloc_info
 }
 bfd_mach_o_reloc_info;
 
-typedef struct bfd_mach_o_asymbol
-{
-  /* The actual symbol which the rest of BFD works with.  */
-  asymbol symbol;
-
-  /* Fields from Mach-O symbol.  */
-  unsigned char n_type;
-  unsigned char n_sect;
-  unsigned short n_desc;
-}
-bfd_mach_o_asymbol;
+/* The symbol table is sorted like this:
+ (1) local.
+	(otherwise in order of generation)
+ (2) external defined
+	(sorted by name)
+ (3) external undefined / common
+	(sorted by name)
+*/
 
 typedef struct bfd_mach_o_symtab_command
 {
@@ -438,6 +454,16 @@ typedef struct bfd_mach_o_str_command
 }
 bfd_mach_o_str_command;
 
+typedef struct bfd_mach_o_fvmlib_command
+{
+  unsigned int name_offset;
+  unsigned int name_len;
+  char *name_str;
+  unsigned int minor_version;
+  unsigned int header_addr;
+}
+bfd_mach_o_fvmlib_command;
+
 typedef struct bfd_mach_o_dyld_info_command
 {
   /* File offset and size to rebase info.  */
@@ -471,6 +497,14 @@ typedef struct bfd_mach_o_version_min_command
 }
 bfd_mach_o_version_min_command;
 
+typedef struct bfd_mach_o_encryption_info_command
+{
+  unsigned int cryptoff;
+  unsigned int cryptsize;
+  unsigned int cryptid;
+}
+bfd_mach_o_encryption_info_command;
+
 typedef struct bfd_mach_o_load_command
 {
   bfd_mach_o_load_command_type type;
@@ -491,6 +525,8 @@ typedef struct bfd_mach_o_load_command
     bfd_mach_o_str_command str;
     bfd_mach_o_dyld_info_command dyld_info;
     bfd_mach_o_version_min_command version_min;
+    bfd_mach_o_encryption_info_command encryption_info;
+    bfd_mach_o_fvmlib_command fvmlib;
   }
   command;
 }
@@ -507,7 +543,7 @@ typedef struct mach_o_data_struct
   unsigned long nsects;
   bfd_mach_o_section **sections;
 
-  /* Used while writting: current length of the output file.  This is used
+  /* Used while writing: current length of the output file.  This is used
      to allocate space in the file.  */
   ufile_ptr filelen;
 
@@ -516,6 +552,15 @@ typedef struct mach_o_data_struct
      is expected.  */
   bfd_mach_o_symtab_command *symtab;
   bfd_mach_o_dysymtab_command *dysymtab;
+
+  /* A place to stash dwarf2 info for this bfd.  */
+  void *dwarf2_find_line_info;
+
+  /* BFD of .dSYM file. */
+  bfd *dsym_bfd;
+
+  /* Cache of dynamic relocs. */
+  arelent *dyn_reloc_cache;
 }
 bfd_mach_o_data_struct;
 
@@ -527,15 +572,6 @@ typedef struct bfd_mach_o_xlat_name
 bfd_mach_o_xlat_name;
 
 /* Target specific routines.  */
-typedef struct bfd_mach_o_backend_data
-{
-  enum bfd_architecture arch;
-  bfd_boolean (*_bfd_mach_o_swap_reloc_in)(arelent *, bfd_mach_o_reloc_info *);
-  bfd_boolean (*_bfd_mach_o_swap_reloc_out)(arelent *, bfd_mach_o_reloc_info *);
-  bfd_boolean (*_bfd_mach_o_print_thread)(bfd *, bfd_mach_o_thread_flavour *,
-                                          void *, char *);
-}
-bfd_mach_o_backend_data;
 
 #define bfd_mach_o_get_data(abfd) ((abfd)->tdata.mach_o_data)
 #define bfd_mach_o_get_backend_data(abfd) \
@@ -561,6 +597,7 @@ bfd_boolean bfd_mach_o_bfd_copy_private_symbol_data (bfd *, asymbol *,
 bfd_boolean bfd_mach_o_bfd_copy_private_section_data (bfd *, asection *,
                                                       bfd *, asection *);
 bfd_boolean bfd_mach_o_bfd_copy_private_bfd_data (bfd *, bfd *);
+bfd_boolean bfd_mach_o_bfd_set_private_flags (bfd *, flagword);
 long bfd_mach_o_get_symtab_upper_bound (bfd *);
 long bfd_mach_o_canonicalize_symtab (bfd *, asymbol **);
 long bfd_mach_o_get_synthetic_symtab (bfd *, long, asymbol **, long, 
@@ -571,7 +608,7 @@ long bfd_mach_o_get_dynamic_reloc_upper_bound (bfd *);
 long bfd_mach_o_canonicalize_dynamic_reloc (bfd *, arelent **, asymbol **);
 asymbol *bfd_mach_o_make_empty_symbol (bfd *);
 void bfd_mach_o_get_symbol_info (bfd *, asymbol *, symbol_info *);
-void bfd_mach_o_print_symbol (bfd *, PTR, asymbol *, bfd_print_symbol_type);
+void bfd_mach_o_print_symbol (bfd *, void *, asymbol *, bfd_print_symbol_type);
 int bfd_mach_o_sizeof_headers (bfd *, struct bfd_link_info *);
 unsigned long bfd_mach_o_stack_addr (enum bfd_mach_o_cpu_type);
 int bfd_mach_o_core_fetch_environment (bfd *, unsigned char **, unsigned int *);
@@ -586,19 +623,70 @@ bfd_boolean bfd_mach_o_set_section_contents (bfd *, asection *, const void *,
                                              file_ptr, bfd_size_type);
 unsigned int bfd_mach_o_version (bfd *);
 
-unsigned int bfd_mach_o_get_section_type_from_name (const char *);
+unsigned int bfd_mach_o_get_section_type_from_name (bfd *, const char *);
 unsigned int bfd_mach_o_get_section_attribute_from_name (const char *);
-void bfd_mach_o_normalize_section_name (const char *, const char *,
-                                        const char **, flagword *);
+
+void bfd_mach_o_convert_section_name_to_bfd (bfd *, const char *, const char *,
+					     const char **, flagword *);
+bfd_boolean bfd_mach_o_find_nearest_line (bfd *, asection *, asymbol **,
+                                          bfd_vma, const char **,
+                                          const char **, unsigned int *);
+bfd_boolean bfd_mach_o_close_and_cleanup (bfd *);
+bfd_boolean bfd_mach_o_free_cached_info (bfd *);
 
 unsigned int bfd_mach_o_section_get_nbr_indirect (bfd *, bfd_mach_o_section *);
 unsigned int bfd_mach_o_section_get_entry_size (bfd *, bfd_mach_o_section *);
 bfd_boolean bfd_mach_o_read_symtab_symbols (bfd *);
 bfd_boolean bfd_mach_o_read_symtab_strtab (bfd *abfd);
 
+/* A placeholder in case we need to suppress emitting the dysymtab for some
+   reason (e.g. compatibility with older system versions).  */
+#define bfd_mach_o_should_emit_dysymtab(x) TRUE
+
 extern const bfd_mach_o_xlat_name bfd_mach_o_section_attribute_name[];
 extern const bfd_mach_o_xlat_name bfd_mach_o_section_type_name[];
 
 extern const bfd_target mach_o_fat_vec;
 
+/* Interfaces between BFD names and Mach-O names.  */
+
+typedef struct mach_o_section_name_xlat
+{
+  const char *bfd_name;
+  const char *mach_o_name;
+  flagword bfd_flags;
+  unsigned int macho_sectype;
+  unsigned int macho_secattr;
+  unsigned int sectalign;
+} mach_o_section_name_xlat;
+
+typedef struct mach_o_segment_name_xlat
+{
+  const char *segname;
+  const mach_o_section_name_xlat *sections;
+} mach_o_segment_name_xlat;
+
+const mach_o_section_name_xlat *
+bfd_mach_o_section_data_for_mach_sect (bfd *, const char *, const char *);
+const mach_o_section_name_xlat *
+bfd_mach_o_section_data_for_bfd_name (bfd *, const char *, const char **);
+
+typedef struct bfd_mach_o_backend_data
+{
+  enum bfd_architecture arch;
+  bfd_boolean (*_bfd_mach_o_swap_reloc_in)(arelent *, bfd_mach_o_reloc_info *);
+  bfd_boolean (*_bfd_mach_o_swap_reloc_out)(arelent *, bfd_mach_o_reloc_info *);
+  bfd_boolean (*_bfd_mach_o_print_thread)(bfd *, bfd_mach_o_thread_flavour *,
+                                          void *, char *);
+  const mach_o_segment_name_xlat *segsec_names_xlat;
+  bfd_boolean (*bfd_mach_o_section_type_valid_for_target) (unsigned long);
+}
+bfd_mach_o_backend_data;
+
+/* Values used in symbol.udata.i, to signal that the mach-o-specific data in the
+   symbol are not yet set, or need validation (where this is possible).  */
+
+#define SYM_MACHO_FIELDS_UNSET ((bfd_vma) -1)
+#define SYM_MACHO_FIELDS_NOT_VALIDATED ((bfd_vma) -2)
+
 #endif /* _BFD_MACH_O_H_ */
diff --git a/bfd/mipsbsd.c b/bfd/mipsbsd.c
index 915e7bf..202c23f 100644
--- a/bfd/mipsbsd.c
+++ b/bfd/mipsbsd.c
@@ -1,6 +1,6 @@
 /* BFD backend for MIPS BSD (a.out) binaries.
    Copyright 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-   2005, 2007, 2009, 2011 Free Software Foundation, Inc.
+   2005, 2007, 2009, 2011, 2012 Free Software Foundation, Inc.
    Written by Ralph Campbell.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -49,11 +49,11 @@
 #define SET_ARCH_MACH(ABFD, EXEC) \
   MY(set_arch_mach) (ABFD, N_MACHTYPE (EXEC)); \
   MY(choose_reloc_size) (ABFD);
-static void MY(set_arch_mach) PARAMS ((bfd *abfd, unsigned long machtype));
-static void MY(choose_reloc_size) PARAMS ((bfd *abfd));
+static void MY(set_arch_mach) (bfd *, unsigned long);
+static void MY(choose_reloc_size) (bfd *);
 
 #define MY_write_object_contents MY(write_object_contents)
-static bfd_boolean MY(write_object_contents) PARAMS ((bfd *abfd));
+static bfd_boolean MY(write_object_contents) (bfd *);
 
 /* We can't use MY(x) here because it leads to a recursive call to CONCAT2
    when expanded inside JUMP_TABLE.  */
@@ -72,15 +72,13 @@ static bfd_boolean MY(write_object_contents) PARAMS ((bfd *abfd));
 #include "aout-target.h"
 
 static bfd_reloc_status_type mips_fix_jmp_addr
-  PARAMS ((bfd *, arelent *, struct bfd_symbol *, PTR, asection *,
-	   bfd *, char **));
+  (bfd *, arelent *, struct bfd_symbol *, void *, asection *,
+   bfd *, char **);
 
-long MY(canonicalize_reloc) PARAMS ((bfd *, sec_ptr, arelent **, asymbol **));
+long MY(canonicalize_reloc) (bfd *, sec_ptr, arelent **, asymbol **);
 
 static void
-MY(set_arch_mach) (abfd, machtype)
-     bfd *abfd;
-     unsigned long machtype;
+MY(set_arch_mach) (bfd *abfd, unsigned long machtype)
 {
   enum bfd_architecture arch;
   unsigned int machine;
@@ -109,8 +107,7 @@ MY(set_arch_mach) (abfd, machtype)
 
 /* Determine the size of a relocation entry, based on the architecture */
 static void
-MY (choose_reloc_size) (abfd)
-     bfd *abfd;
+MY (choose_reloc_size) (bfd *abfd)
 {
   switch (bfd_get_arch (abfd))
     {
@@ -129,8 +126,7 @@ MY (choose_reloc_size) (abfd)
   file header, symbols, and relocation.  */
 
 static bfd_boolean
-MY (write_object_contents) (abfd)
-     bfd *abfd;
+MY (write_object_contents) (bfd *abfd)
 {
   struct external_exec exec_bytes;
   struct internal_exec *execp = exec_hdr (abfd);
@@ -195,20 +191,18 @@ MY (write_object_contents) (abfd)
    program counter, then we need to signal an error.  */
 
 static bfd_reloc_status_type
-mips_fix_jmp_addr (abfd, reloc_entry, symbol, data, input_section, output_bfd,
-		   error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry;
-     struct bfd_symbol *symbol;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+mips_fix_jmp_addr (bfd *abfd ATTRIBUTE_UNUSED,
+		   arelent *reloc_entry,
+		   struct bfd_symbol *symbol,
+		   void * data ATTRIBUTE_UNUSED,
+		   asection *input_section,
+		   bfd *output_bfd,
+		   char **error_message ATTRIBUTE_UNUSED)
 {
   bfd_vma relocation, pc;
 
   /* If this is a partial relocation, just continue.  */
-  if (output_bfd != (bfd *)NULL)
+  if (output_bfd != (bfd *) NULL)
     return bfd_reloc_continue;
 
   /* If this is an undefined symbol, return error */
@@ -242,19 +236,13 @@ mips_fix_jmp_addr (abfd, reloc_entry, symbol, data, input_section, output_bfd,
    when the low bits are added at run time.  */
 
 static bfd_reloc_status_type
-mips_fix_hi16_s PARAMS ((bfd *, arelent *, asymbol *, PTR,
-			 asection *, bfd *, char **));
-
-static bfd_reloc_status_type
-mips_fix_hi16_s (abfd, reloc_entry, symbol, data, input_section,
-		 output_bfd, error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry;
-     asymbol *symbol;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
+mips_fix_hi16_s (bfd *abfd ATTRIBUTE_UNUSED,
+		 arelent *reloc_entry,
+		 asymbol *symbol,
+		 void * data ATTRIBUTE_UNUSED,
+		 asection *input_section ATTRIBUTE_UNUSED,
+		 bfd *output_bfd,
+		 char **error_message ATTRIBUTE_UNUSED)
 {
   bfd_vma relocation;
 
@@ -284,7 +272,8 @@ mips_fix_hi16_s (abfd, reloc_entry, symbol, data, input_section,
   return bfd_reloc_continue;
 }
 
-static reloc_howto_type mips_howto_table_ext[] = {
+static reloc_howto_type mips_howto_table_ext[] =
+{
   {MIPS_RELOC_32,      0, 2, 32, FALSE, 0,  complain_overflow_bitfield, 0,
 	"32",       FALSE, 0, 0xffffffff, FALSE},
   {MIPS_RELOC_JMP,     2, 2, 26, FALSE, 0, complain_overflow_dont,
@@ -304,9 +293,8 @@ static reloc_howto_type mips_howto_table_ext[] = {
 static reloc_howto_type *
 MY(reloc_type_lookup) (bfd *abfd, bfd_reloc_code_real_type code)
 {
-
   if (bfd_get_arch (abfd) != bfd_arch_mips)
-    return 0;
+    return NULL;
 
   switch (code)
     {
@@ -324,13 +312,13 @@ MY(reloc_type_lookup) (bfd *abfd, bfd_reloc_code_real_type code)
     case BFD_RELOC_LO16:
       return (&mips_howto_table_ext[MIPS_RELOC_LO16]);
     default:
-      return 0;
+      return NULL;
     }
 }
 
 static reloc_howto_type *
 MY(reloc_name_lookup) (bfd *abfd ATTRIBUTE_UNUSED,
-			     const char *r_name)
+		       const char *r_name)
 {
   unsigned int i;
 
@@ -347,11 +335,10 @@ MY(reloc_name_lookup) (bfd *abfd ATTRIBUTE_UNUSED,
 /* This is just like the standard aoutx.h version but we need to do our
    own mapping of external reloc type values to howto entries.  */
 long
-MY(canonicalize_reloc) (abfd, section, relptr, symbols)
-      bfd *abfd;
-      sec_ptr section;
-      arelent **relptr;
-      asymbol **symbols;
+MY(canonicalize_reloc) (bfd *abfd,
+			sec_ptr section,
+			arelent **relptr,
+			asymbol **symbols)
 {
   arelent *tblptr = section->relocation;
   unsigned int count, c;
@@ -395,7 +382,8 @@ MY(canonicalize_reloc) (abfd, section, relptr, symbols)
   return section->reloc_count;
 }
 
-static const struct aout_backend_data MY(backend_data) = {
+static const struct aout_backend_data MY(backend_data) =
+{
   0,				/* zmagic contiguous */
   1,				/* text incl header */
   0,				/* entry is text address */
@@ -414,7 +402,7 @@ static const struct aout_backend_data MY(backend_data) = {
 extern const bfd_target aout_mips_big_vec;
 
 const bfd_target aout_mips_little_vec =
-  {
+{
     "a.out-mips-little",		/* name */
     bfd_target_aout_flavour,
     BFD_ENDIAN_LITTLE,		/* target byte order (little) */
@@ -452,7 +440,7 @@ const bfd_target aout_mips_little_vec =
 
     & aout_mips_big_vec,
 
-    (PTR) MY_backend_data
+    MY_backend_data
   };
 
 const bfd_target aout_mips_big_vec =
@@ -494,5 +482,5 @@ const bfd_target aout_mips_big_vec =
 
     & aout_mips_little_vec,
 
-    (PTR) MY_backend_data
+    MY_backend_data
   };
diff --git a/bfd/netbsd-core.c b/bfd/netbsd-core.c
index bc97742..695d3f5 100644
--- a/bfd/netbsd-core.c
+++ b/bfd/netbsd-core.c
@@ -1,6 +1,6 @@
 /* BFD back end for NetBSD style core files
    Copyright 1988, 1989, 1991, 1992, 1993, 1996, 1998, 1999, 2000, 2001,
-   2002, 2003, 2004, 2005, 2006, 2007
+   2002, 2003, 2004, 2005, 2006, 2007, 2012
    Free Software Foundation, Inc.
    Written by Paul Kranenburg, EUR
 
@@ -316,5 +316,5 @@ const bfd_target netbsd_core_vec =
 
     NULL,
 
-    (PTR) 0			        /* Backend_data.  */
+    NULL			        /* Backend_data.  */
   };
diff --git a/bfd/nlm32-i386.c b/bfd/nlm32-i386.c
index f1451c5..28b4433 100644
--- a/bfd/nlm32-i386.c
+++ b/bfd/nlm32-i386.c
@@ -1,5 +1,5 @@
 /* Support for 32-bit i386 NLM (NetWare Loadable Module)
-   Copyright 1993, 1994, 2000, 2001, 2002, 2003, 2005, 2007
+   Copyright 1993, 1994, 2000, 2001, 2002, 2003, 2005, 2007, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -233,7 +233,7 @@ nlm_i386_write_import (bfd * abfd, asection * sec, arelent * rel)
 static bfd_boolean
 nlm_i386_mangle_relocs (bfd *abfd,
 			asection *sec,
-			const PTR data,
+			const void * data,
 			bfd_vma offset,
 			bfd_size_type count)
 {
diff --git a/bfd/nlm32-ppc.c b/bfd/nlm32-ppc.c
index b8c5852..ef5bfa9 100644
--- a/bfd/nlm32-ppc.c
+++ b/bfd/nlm32-ppc.c
@@ -1,6 +1,6 @@
 /* Support for 32-bit PowerPC NLM (NetWare Loadable Module)
    Copyright 1994, 1995, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-   2007 Free Software Foundation, Inc.
+   2007, 2012 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -19,8 +19,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include "bfd.h"
 #include "sysdep.h"
+#include "bfd.h"
 #include "libbfd.h"
 
 /* The format of a PowerPC NLM changed.  Define OLDFORMAT to get the
diff --git a/bfd/ns32knetbsd.c b/bfd/ns32knetbsd.c
index 6b636ae..fe0a688 100644
--- a/bfd/ns32knetbsd.c
+++ b/bfd/ns32knetbsd.c
@@ -1,6 +1,6 @@
 /* BFD back-end for NetBSD/ns32k a.out-ish binaries.
    Copyright 1990, 1991, 1992, 1994, 1995, 1998, 2000, 2001, 2002, 2005,
-   2007  Free Software Foundation, Inc.
+   2007, 2012  Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -46,6 +46,7 @@
    for me -- IWD.  */
 #define MY_bfd_reloc_type_lookup ns32kaout_bfd_reloc_type_lookup
 
+#include "sysdep.h"
 #include "bfd.h"		/* To ensure following declaration is OK.  */
 
 const struct reloc_howto_struct * MY_bfd_reloc_type_lookup (bfd *, bfd_reloc_code_real_type);
diff --git a/bfd/oasys.c b/bfd/oasys.c
index 11d2440..ebb12e8 100644
--- a/bfd/oasys.c
+++ b/bfd/oasys.c
@@ -906,9 +906,11 @@ oasys_write_header (bfd *abfd)
 
   if (length > (size_t) sizeof (r.module_name))
     length = sizeof (r.module_name);
+  else if (length < (size_t) sizeof (r.module_name))
+    (void) memset (r.module_name + length, ' ',
+		   sizeof (r.module_name) - length);
 
   (void) memcpy (r.module_name, abfd->filename, length);
-  (void) memset (r.module_name + length, ' ', sizeof (r.module_name) - length);
 
   r.version_number = OASYS_VERSION_NUMBER;
   r.rev_number = OASYS_REV_NUMBER;
diff --git a/bfd/opncls.c b/bfd/opncls.c
index 9d33f39..7c1d2f9 100644
--- a/bfd/opncls.c
+++ b/bfd/opncls.c
@@ -1,6 +1,6 @@
 /* opncls.c -- open and close a BFD.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000,
-   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012
    Free Software Foundation, Inc.
 
    Written by Cygnus Support.
@@ -190,6 +190,8 @@ DESCRIPTION
 	If <<NULL>> is returned then an error has occured.   Possible errors
 	are <<bfd_error_no_memory>>, <<bfd_error_invalid_target>> or
 	<<system_call>> error.
+
+	On error, @var{fd} is always closed.
 */
 
 bfd *
@@ -200,11 +202,17 @@ bfd_fopen (const char *filename, const char *target, const char *mode, int fd)
 
   nbfd = _bfd_new_bfd ();
   if (nbfd == NULL)
-    return NULL;
+    {
+      if (fd != -1)
+	close (fd);
+      return NULL;
+    }
 
   target_vec = bfd_find_target (target, nbfd);
   if (target_vec == NULL)
     {
+      if (fd != -1)
+	close (fd);
       _bfd_delete_bfd (nbfd);
       return NULL;
     }
@@ -307,6 +315,8 @@ DESCRIPTION
 
 	Possible errors are <<bfd_error_no_memory>>,
 	<<bfd_error_invalid_target>> and <<bfd_error_system_call>>.
+
+	On error, @var{fd} is closed.
 */
 
 bfd *
@@ -323,6 +333,10 @@ bfd_fdopenr (const char *filename, const char *target, int fd)
   fdflags = fcntl (fd, F_GETFL, NULL);
   if (fdflags == -1)
     {
+      int save = errno;
+
+      close (fd);
+      errno = save;
       bfd_set_error (bfd_error_system_call);
       return NULL;
     }
diff --git a/bfd/osf-core.c b/bfd/osf-core.c
index d613bdb..ed5fbbe 100644
--- a/bfd/osf-core.c
+++ b/bfd/osf-core.c
@@ -1,6 +1,6 @@
 /* BFD back-end for OSF/1 core files.
    Copyright 1993, 1994, 1995, 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2006,
-   2007, 2010, 2011 Free Software Foundation, Inc.
+   2007, 2010, 2011, 2012 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -34,18 +34,8 @@
 
 /* forward declarations */
 
-static asection *make_bfd_asection
-  PARAMS ((bfd *, const char *, flagword, bfd_size_type, bfd_vma, file_ptr));
-static const bfd_target *osf_core_core_file_p
-  PARAMS ((bfd *));
-static char *osf_core_core_file_failing_command
-  PARAMS ((bfd *));
-static int osf_core_core_file_failing_signal
-  PARAMS ((bfd *));
 #define osf_core_core_file_matches_executable_p generic_core_file_matches_executable_p
 #define osf_core_core_file_pid _bfd_nocore_core_file_pid
-static void swap_abort
-  PARAMS ((void));
 
 /* These are stored in the bfd's tdata */
 
@@ -56,17 +46,16 @@ struct osf_core_struct
 };
 
 #define core_hdr(bfd) ((bfd)->tdata.osf_core_data)
-#define core_signal(bfd) (core_hdr(bfd)->sig)
+#define core_signal(bfd)  (core_hdr(bfd)->sig)
 #define core_command(bfd) (core_hdr(bfd)->cmd)
 
 static asection *
-make_bfd_asection (abfd, name, flags, size, vma, filepos)
-     bfd *abfd;
-     const char *name;
-     flagword flags;
-     bfd_size_type size;
-     bfd_vma vma;
-     file_ptr filepos;
+make_bfd_asection (bfd *abfd,
+		   const char *name,
+		   flagword flags,
+		   bfd_size_type size,
+		   bfd_vma vma,
+		   file_ptr filepos)
 {
   asection *asect;
 
@@ -83,8 +72,7 @@ make_bfd_asection (abfd, name, flags, size, vma, filepos)
 }
 
 static const bfd_target *
-osf_core_core_file_p (abfd)
-     bfd *abfd;
+osf_core_core_file_p (bfd *abfd)
 {
   int val;
   int i;
@@ -93,7 +81,7 @@ osf_core_core_file_p (abfd)
   bfd_size_type amt;
 
   amt = sizeof core_header;
-  val = bfd_bread ((PTR) &core_header, amt, abfd);
+  val = bfd_bread (& core_header, amt, abfd);
   if (val != sizeof core_header)
     return NULL;
 
@@ -114,7 +102,7 @@ osf_core_core_file_p (abfd)
       flagword flags;
 
       amt = sizeof core_scnhdr;
-      val = bfd_bread ((PTR) &core_scnhdr, amt, abfd);
+      val = bfd_bread (& core_scnhdr, amt, abfd);
       if (val != sizeof core_scnhdr)
 	break;
 
@@ -161,24 +149,22 @@ osf_core_core_file_p (abfd)
 }
 
 static char *
-osf_core_core_file_failing_command (abfd)
-     bfd *abfd;
+osf_core_core_file_failing_command (bfd *abfd)
 {
   return core_command (abfd);
 }
 
 static int
-osf_core_core_file_failing_signal (abfd)
-     bfd *abfd;
+osf_core_core_file_failing_signal (bfd *abfd)
 {
   return core_signal (abfd);
 }
 

 /* If somebody calls any byte-swapping routines, shoot them.  */
 static void
-swap_abort()
+swap_abort (void)
 {
-  abort(); /* This way doesn't require any declaration for ANSI to fuck up */
+  abort (); /* This way doesn't require any declaration for ANSI to fuck up */
 }
 
 #define	NO_GET ((bfd_vma (*) (const void *)) swap_abort)
@@ -236,5 +222,5 @@ const bfd_target osf_core_vec =
 
     NULL,
 
-    (PTR) 0			/* backend_data */
+    NULL			/* backend_data */
   };
diff --git a/bfd/pc532-mach.c b/bfd/pc532-mach.c
index b472006..9252333 100644
--- a/bfd/pc532-mach.c
+++ b/bfd/pc532-mach.c
@@ -76,14 +76,10 @@
 #define MY_exec_header_not_counted 1
 
 reloc_howto_type *ns32kaout_bfd_reloc_type_lookup
-  PARAMS ((bfd *abfd, bfd_reloc_code_real_type code));
-
-static bfd_boolean MY(write_object_contents)
-  PARAMS ((bfd *abfd));
+  (bfd *abfd, bfd_reloc_code_real_type code);
 
 static bfd_boolean
-MY(write_object_contents) (abfd)
-     bfd *abfd;
+MY(write_object_contents) (bfd *abfd)
 {
   struct external_exec exec_bytes;
   struct internal_exec *execp = exec_hdr (abfd);
diff --git a/bfd/pdp11.c b/bfd/pdp11.c
index e815a43..04b7164 100644
--- a/bfd/pdp11.c
+++ b/bfd/pdp11.c
@@ -2895,7 +2895,7 @@ static bfd_boolean
 aout_link_write_other_symbol (struct bfd_hash_entry *bh, void *data)
 {
   struct aout_link_hash_entry *h = (struct aout_link_hash_entry *) bh;
-  struct aout_final_link_info *finfo = (struct aout_final_link_info *) data;
+  struct aout_final_link_info *flaginfo = (struct aout_final_link_info *) data;
   bfd *output_bfd;
   int type;
   bfd_vma val;
@@ -2910,12 +2910,12 @@ aout_link_write_other_symbol (struct bfd_hash_entry *bh, void *data)
 	return TRUE;
     }
 
-  output_bfd = finfo->output_bfd;
+  output_bfd = flaginfo->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)))
+	     (output_bfd, flaginfo->info, h)))
 	{
 	  /* FIXME: No way to handle errors.  */
 	  abort ();
@@ -2929,9 +2929,9 @@ aout_link_write_other_symbol (struct bfd_hash_entry *bh, void *data)
 
   /* 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,
+      && (flaginfo->info->strip == strip_all
+	  || (flaginfo->info->strip == strip_some
+	      && bfd_hash_lookup (flaginfo->info->keep_hash, h->root.root.string,
 				  FALSE, FALSE) == NULL)))
     return TRUE;
 
@@ -2986,7 +2986,7 @@ aout_link_write_other_symbol (struct bfd_hash_entry *bh, void *data)
     }
 
   H_PUT_8 (output_bfd, type, outsym.e_type);
-  indx = add_to_stringtab (output_bfd, finfo->strtab, h->root.root.string,
+  indx = add_to_stringtab (output_bfd, flaginfo->strtab, h->root.root.string,
 			   FALSE);
   if (indx == (bfd_size_type) -1)
     /* FIXME: No way to handle errors.  */
@@ -2996,12 +2996,12 @@ aout_link_write_other_symbol (struct bfd_hash_entry *bh, void *data)
   PUT_WORD (output_bfd, val, outsym.e_value);
 
   amt = EXTERNAL_NLIST_SIZE;
-  if (bfd_seek (output_bfd, finfo->symoff, SEEK_SET) != 0
+  if (bfd_seek (output_bfd, flaginfo->symoff, SEEK_SET) != 0
       || bfd_bwrite ((void *) &outsym, amt, output_bfd) != amt)
     /* FIXME: No way to handle errors.  */
     abort ();
 
-  finfo->symoff += amt;
+  flaginfo->symoff += amt;
   h->indx = obj_aout_external_sym_count (output_bfd);
   ++obj_aout_external_sym_count (output_bfd);
 
@@ -3011,7 +3011,7 @@ aout_link_write_other_symbol (struct bfd_hash_entry *bh, void *data)
 /* Handle a link order which is supposed to generate a reloc.  */
 
 static bfd_boolean
-aout_link_reloc_link_order (struct aout_final_link_info *finfo,
+aout_link_reloc_link_order (struct aout_final_link_info *flaginfo,
 			    asection *o,
 			    struct bfd_link_order *p)
 {
@@ -3033,7 +3033,7 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo,
 	r_index = N_ABS | N_EXT;
       else
 	{
-	  BFD_ASSERT (pr->u.section->owner == finfo->output_bfd);
+	  BFD_ASSERT (pr->u.section->owner == flaginfo->output_bfd);
 	  r_index = pr->u.section->target_index;
 	}
     }
@@ -3044,7 +3044,7 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo,
       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,
+	   bfd_wrapped_link_hash_lookup (flaginfo->output_bfd, flaginfo->info,
 					 pr->u.name, FALSE, FALSE, TRUE));
       if (h != NULL
 	  && h->indx >= 0)
@@ -3057,35 +3057,35 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo,
 	     symbol.  */
 	  h->indx = -2;
 	  h->written = FALSE;
-	  if (!aout_link_write_other_symbol (&h->root.root, finfo))
+	  if (!aout_link_write_other_symbol (&h->root.root, flaginfo))
 	    return FALSE;
 	  r_index = h->indx;
 	}
       else
 	{
-	  if (! ((*finfo->info->callbacks->unattached_reloc)
-		 (finfo->info, pr->u.name, NULL, NULL, (bfd_vma) 0)))
+	  if (! ((*flaginfo->info->callbacks->unattached_reloc)
+		 (flaginfo->info, pr->u.name, NULL, NULL, (bfd_vma) 0)))
 	    return FALSE;
 	  r_index = 0;
 	}
     }
 
-  howto = bfd_reloc_type_lookup (finfo->output_bfd, pr->reloc);
+  howto = bfd_reloc_type_lookup (flaginfo->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;
+  if (o == obj_textsec (flaginfo->output_bfd))
+    reloff_ptr = &flaginfo->treloff;
+  else if (o == obj_datasec (flaginfo->output_bfd))
+    reloff_ptr = &flaginfo->dreloff;
   else
     abort ();
 
 #ifdef MY_put_reloc
-  MY_put_reloc(finfo->output_bfd, r_extern, r_index, p->offset, howto,
+  MY_put_reloc(flaginfo->output_bfd, r_extern, r_index, p->offset, howto,
 	       &srel);
 #else
   {
@@ -3103,8 +3103,8 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo,
     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))
+    PUT_WORD (flaginfo->output_bfd, p->offset, srel.r_address);
+    if (bfd_header_big_endian (flaginfo->output_bfd))
       {
 	srel.r_index[0] = r_index >> 16;
 	srel.r_index[1] = r_index >> 8;
@@ -3150,7 +3150,7 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo,
       buf = bfd_zmalloc (size);
       if (buf == NULL)
 	return FALSE;
-      r = MY_relocate_contents (howto, finfo->output_bfd,
+      r = MY_relocate_contents (howto, flaginfo->output_bfd,
 				pr->addend, buf);
       switch (r)
 	{
@@ -3160,10 +3160,10 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo,
 	case bfd_reloc_outofrange:
 	  abort ();
 	case bfd_reloc_overflow:
-	  if (! ((*finfo->info->callbacks->reloc_overflow)
-		 (finfo->info, NULL,
+	  if (! ((*flaginfo->info->callbacks->reloc_overflow)
+		 (flaginfo->info, NULL,
 		  (p->type == bfd_section_reloc_link_order
-		   ? bfd_section_name (finfo->output_bfd,
+		   ? bfd_section_name (flaginfo->output_bfd,
 				       pr->u.section)
 		   : pr->u.name),
 		  howto->name, pr->addend, NULL,
@@ -3174,7 +3174,7 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo,
 	    }
 	  break;
 	}
-      ok = bfd_set_section_contents (finfo->output_bfd, o,
+      ok = bfd_set_section_contents (flaginfo->output_bfd, o,
 				     (void *) buf,
 				     (file_ptr) p->offset,
 				     size);
@@ -3183,19 +3183,19 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo,
 	return FALSE;
     }
 
-  rel_size = obj_reloc_entry_size (finfo->output_bfd);
-  if (bfd_seek (finfo->output_bfd, *reloff_ptr, SEEK_SET) != 0
-      || bfd_bwrite (rel_ptr, rel_size, finfo->output_bfd) != rel_size)
+  rel_size = obj_reloc_entry_size (flaginfo->output_bfd);
+  if (bfd_seek (flaginfo->output_bfd, *reloff_ptr, SEEK_SET) != 0
+      || bfd_bwrite (rel_ptr, rel_size, flaginfo->output_bfd) != rel_size)
     return FALSE;
 
   *reloff_ptr += rel_size;
 
   /* 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
+  BFD_ASSERT (*reloff_ptr <= obj_sym_filepos (flaginfo->output_bfd)
+	      && (reloff_ptr != &flaginfo->treloff
 		  || (*reloff_ptr
-		      <= obj_datasec (finfo->output_bfd)->rel_filepos)));
+		      <= obj_datasec (flaginfo->output_bfd)->rel_filepos)));
 
   return TRUE;
 }
@@ -3217,7 +3217,7 @@ aout_reloc_type_to_section (bfd *abfd, int type)
 }
 
 static bfd_boolean
-pdp11_aout_link_input_section (struct aout_final_link_info *finfo,
+pdp11_aout_link_input_section (struct aout_final_link_info *flaginfo,
 			       bfd *input_bfd,
 			       asection *input_section,
 			       bfd_byte *relocs,
@@ -3237,18 +3237,18 @@ pdp11_aout_link_input_section (struct aout_final_link_info *finfo,
   bfd_byte *rel;
   bfd_byte *rel_end;
 
-  output_bfd = finfo->output_bfd;
+  output_bfd = flaginfo->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);
 
-  relocatable = finfo->info->relocatable;
+  relocatable = flaginfo->info->relocatable;
   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;
+  symbol_map = flaginfo->symbol_map;
 
   rel = relocs;
   rel_end = rel + rel_size;
@@ -3337,7 +3337,7 @@ pdp11_aout_link_input_section (struct aout_final_link_info *finfo,
 			      h->indx = -2;
 			      h->written = FALSE;
 			      if (!aout_link_write_other_symbol (&h->root.root,
-								 finfo))
+								 flaginfo))
 				return FALSE;
 			    }
 			  r_index = h->indx;
@@ -3348,8 +3348,8 @@ pdp11_aout_link_input_section (struct aout_final_link_info *finfo,
 
 			  name = strings + GET_WORD (input_bfd,
 						     syms[r_index].e_strx);
-			  if (! ((*finfo->info->callbacks->unattached_reloc)
-				 (finfo->info, name, input_bfd, input_section,
+			  if (! ((*flaginfo->info->callbacks->unattached_reloc)
+				 (flaginfo->info, name, input_bfd, input_section,
 				  r_addr)))
 			    return FALSE;
 			  r_index = 0;
@@ -3444,7 +3444,7 @@ pdp11_aout_link_input_section (struct aout_final_link_info *finfo,
 	      bfd_boolean skip;
 
 	      if (! ((*check_dynamic_reloc)
-		     (finfo->info, input_bfd, input_section, h,
+		     (flaginfo->info, input_bfd, input_section, h,
 		      (void *) rel, contents, &skip, &relocation)))
 		return FALSE;
 	      if (skip)
@@ -3454,7 +3454,7 @@ pdp11_aout_link_input_section (struct aout_final_link_info *finfo,
 	  /* 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)
+	  if (hundef && ! flaginfo->info->shared)
 	    {
 	      const char *name;
 
@@ -3462,8 +3462,8 @@ pdp11_aout_link_input_section (struct aout_final_link_info *finfo,
 		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,
+	      if (! ((*flaginfo->info->callbacks->undefined_symbol)
+		     (flaginfo->info, name, input_bfd, input_section,
 		      r_addr, TRUE)))
 		return FALSE;
 	    }
@@ -3497,8 +3497,8 @@ pdp11_aout_link_input_section (struct aout_final_link_info *finfo,
 		    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, (h ? &h->root : NULL), name,
+		if (! ((*flaginfo->info->callbacks->reloc_overflow)
+		       (flaginfo->info, (h ? &h->root : NULL), name,
 			howto->name, (bfd_vma) 0, input_bfd,
 			input_section, r_addr)))
 		  return FALSE;
@@ -3514,7 +3514,7 @@ pdp11_aout_link_input_section (struct aout_final_link_info *finfo,
 /* Link an a.out section into the output file.  */
 
 static bfd_boolean
-aout_link_input_section (struct aout_final_link_info *finfo,
+aout_link_input_section (struct aout_final_link_info *flaginfo,
 			 bfd *input_bfd,
 			 asection *input_section,
 			 file_ptr *reloff_ptr,
@@ -3526,7 +3526,7 @@ aout_link_input_section (struct aout_final_link_info *finfo,
   /* Get the section contents.  */
   input_size = input_section->size;
   if (! bfd_get_section_contents (input_bfd, input_section,
-				  (void *) finfo->contents,
+				  (void *) flaginfo->contents,
 				  (file_ptr) 0, input_size))
     return FALSE;
 
@@ -3536,7 +3536,7 @@ aout_link_input_section (struct aout_final_link_info *finfo,
     relocs = aout_section_data (input_section)->relocs;
   else
     {
-      relocs = finfo->relocs;
+      relocs = flaginfo->relocs;
       if (rel_size > 0)
 	{
 	  if (bfd_seek (input_bfd, input_section->rel_filepos, SEEK_SET) != 0
@@ -3546,36 +3546,36 @@ aout_link_input_section (struct aout_final_link_info *finfo,
     }
 
   /* Relocate the section contents.  */
-  if (! pdp11_aout_link_input_section (finfo, input_bfd, input_section,
+  if (! pdp11_aout_link_input_section (flaginfo, input_bfd, input_section,
 				       (bfd_byte *) relocs,
-				       rel_size, finfo->contents))
+				       rel_size, flaginfo->contents))
     return FALSE;
 
   /* Write out the section contents.  */
-  if (! bfd_set_section_contents (finfo->output_bfd,
+  if (! bfd_set_section_contents (flaginfo->output_bfd,
 				  input_section->output_section,
-				  (void *) finfo->contents,
+				  (void *) flaginfo->contents,
 				  (file_ptr) input_section->output_offset,
 				  input_size))
     return FALSE;
 
   /* If we are producing relocatable output, the relocs were
      modified, and we now write them out.  */
-  if (finfo->info->relocatable && rel_size > 0)
+  if (flaginfo->info->relocatable && rel_size > 0)
     {
-      if (bfd_seek (finfo->output_bfd, *reloff_ptr, SEEK_SET) != 0)
+      if (bfd_seek (flaginfo->output_bfd, *reloff_ptr, SEEK_SET) != 0)
 	return FALSE;
-      if (bfd_bwrite (relocs, rel_size, finfo->output_bfd) != rel_size)
+      if (bfd_bwrite (relocs, rel_size, flaginfo->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
+      BFD_ASSERT (*reloff_ptr <= obj_sym_filepos (flaginfo->output_bfd)
+		  && (reloff_ptr != &flaginfo->treloff
 		      || (*reloff_ptr
-			  <= obj_datasec (finfo->output_bfd)->rel_filepos)));
+			  <= obj_datasec (flaginfo->output_bfd)->rel_filepos)));
     }
 
   return TRUE;
@@ -3584,7 +3584,7 @@ aout_link_input_section (struct aout_final_link_info *finfo,
 /* Link an a.out input BFD into the output file.  */
 
 static bfd_boolean
-aout_link_input_bfd (struct aout_final_link_info *finfo, bfd *input_bfd)
+aout_link_input_bfd (struct aout_final_link_info *flaginfo, bfd *input_bfd)
 {
   BFD_ASSERT (bfd_get_format (input_bfd) == bfd_object);
 
@@ -3592,16 +3592,16 @@ aout_link_input_bfd (struct aout_final_link_info *finfo, bfd *input_bfd)
   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));
+	    (flaginfo->info, input_bfd));
 
   /* Get the symbols.  We probably have them already, unless
-     finfo->info->keep_memory is FALSE.  */
+     flaginfo->info->keep_memory is FALSE.  */
   if (! aout_get_external_symbols (input_bfd))
     return FALSE;
 
   /* 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))
+     is placed into flaginfo->symbol_map.  */
+  if (! aout_link_write_symbols (flaginfo, input_bfd))
     return FALSE;
 
   /* Relocate and write out the sections.  These functions use the
@@ -3610,17 +3610,17 @@ aout_link_input_bfd (struct aout_final_link_info *finfo, bfd *input_bfd)
      link, which will normally be the case.  */
   if (obj_textsec (input_bfd)->linker_mark)
     {
-      if (! aout_link_input_section (finfo, input_bfd,
+      if (! aout_link_input_section (flaginfo, input_bfd,
 				     obj_textsec (input_bfd),
-				     &finfo->treloff,
+				     &flaginfo->treloff,
 				     exec_hdr (input_bfd)->a_trsize))
 	return FALSE;
     }
   if (obj_datasec (input_bfd)->linker_mark)
     {
-      if (! aout_link_input_section (finfo, input_bfd,
+      if (! aout_link_input_section (flaginfo, input_bfd,
 				     obj_datasec (input_bfd),
-				     &finfo->dreloff,
+				     &flaginfo->dreloff,
 				     exec_hdr (input_bfd)->a_drsize))
 	return FALSE;
     }
@@ -3628,7 +3628,7 @@ aout_link_input_bfd (struct aout_final_link_info *finfo, bfd *input_bfd)
   /* 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 (! flaginfo->info->keep_memory)
     {
       if (! aout_link_free_symbols (input_bfd))
 	return FALSE;
@@ -3982,7 +3982,7 @@ NAME (aout, final_link) (bfd *abfd,
    symbol indices into a symbol_map.  */
 
 static bfd_boolean
-aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd)
+aout_link_write_symbols (struct aout_final_link_info *flaginfo, bfd *input_bfd)
 {
   bfd *output_bfd;
   bfd_size_type sym_count;
@@ -3998,23 +3998,23 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd)
   bfd_boolean pass;
   bfd_boolean skip_next;
 
-  output_bfd = finfo->output_bfd;
+  output_bfd = flaginfo->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;
+  strip = flaginfo->info->strip;
+  discard = flaginfo->info->discard;
+  outsym = flaginfo->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,
+	  || bfd_hash_lookup (flaginfo->info->keep_hash, input_bfd->filename,
 			      FALSE, FALSE) != NULL)
       && discard != discard_all)
     {
       H_PUT_8 (output_bfd, N_TEXT, outsym->e_type);
-      strtab_index = add_to_stringtab (output_bfd, finfo->strtab,
+      strtab_index = add_to_stringtab (output_bfd, flaginfo->strtab,
 				       input_bfd->filename, FALSE);
       if (strtab_index == (bfd_size_type) -1)
 	return FALSE;
@@ -4033,7 +4033,7 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd)
   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;
+  symbol_map = flaginfo->symbol_map;
   memset (symbol_map, 0, (size_t) sym_count * sizeof *symbol_map);
   for (; sym < sym_end; sym++, sym_hash++, symbol_map++)
     {
@@ -4132,7 +4132,7 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd)
 		skip = TRUE;
 	      break;
 	    case strip_some:
-	      if (bfd_hash_lookup (finfo->info->keep_hash, name, FALSE, FALSE)
+	      if (bfd_hash_lookup (flaginfo->info->keep_hash, name, FALSE, FALSE)
 		  == NULL)
 		skip = TRUE;
 	      break;
@@ -4360,8 +4360,8 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd)
 	      /* 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,
+	      copy = ! flaginfo->info->keep_memory;
+	      incl_entry = aout_link_includes_lookup (&flaginfo->includes,
 						      name, TRUE, copy);
 	      if (incl_entry == NULL)
 		return FALSE;
@@ -4372,7 +4372,7 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd)
 		{
 		  /* This is the first time we have seen this header
                      file with this set of stabs strings.  */
-		  t = bfd_hash_allocate (&finfo->includes.root,
+		  t = bfd_hash_allocate (&flaginfo->includes.root,
 					 sizeof *t);
 		  if (t == NULL)
 		    return FALSE;
@@ -4419,7 +4419,7 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd)
 	 write out.  */
       H_PUT_8 (output_bfd, type, outsym->e_type);
       copy = FALSE;
-      if (! finfo->info->keep_memory)
+      if (! flaginfo->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.
@@ -4429,7 +4429,7 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd)
 	  else
 	    copy = TRUE;
 	}
-      strtab_index = add_to_stringtab (output_bfd, finfo->strtab,
+      strtab_index = add_to_stringtab (output_bfd, flaginfo->strtab,
 				       name, copy);
       if (strtab_index == (bfd_size_type) -1)
 	return FALSE;
@@ -4441,17 +4441,17 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd)
     }
 
   /* Write out the output symbols we have just constructed.  */
-  if (outsym > finfo->output_syms)
+  if (outsym > flaginfo->output_syms)
     {
       bfd_size_type size;
 
-      if (bfd_seek (output_bfd, finfo->symoff, SEEK_SET) != 0)
+      if (bfd_seek (output_bfd, flaginfo->symoff, SEEK_SET) != 0)
 	return FALSE;
-      size = outsym - finfo->output_syms;
+      size = outsym - flaginfo->output_syms;
       size *= EXTERNAL_NLIST_SIZE;
-      if (bfd_bwrite ((void *) finfo->output_syms, size, output_bfd) != size)
+      if (bfd_bwrite ((void *) flaginfo->output_syms, size, output_bfd) != size)
 	return FALSE;
-      finfo->symoff += size;
+      flaginfo->symoff += size;
     }
 
   return TRUE;
diff --git a/bfd/pef.c b/bfd/pef.c
index d4ad33a..ca4c454 100644
--- a/bfd/pef.c
+++ b/bfd/pef.c
@@ -19,6 +19,10 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+/* PEF (Preferred Executable Format) is the binary file format for late
+   classic Mac OS versions (before Darwin).  It is supported by both m68k
+   and PowerPc.  It is also called CFM (Code Fragment Manager).  */
+
 #include "sysdep.h"
 #include "safe-ctype.h"
 #include "pef.h"
@@ -503,10 +507,9 @@ bfd_pef_scan_start_address (bfd *abfd)
 }
 
 int
-bfd_pef_scan (abfd, header, mdata)
-     bfd *abfd;
-     bfd_pef_header *header;
-     bfd_pef_data_struct *mdata;
+bfd_pef_scan (bfd *abfd,
+	      bfd_pef_header *header,
+	      bfd_pef_data_struct *mdata)
 {
   unsigned int i;
   enum bfd_architecture cputype;
diff --git a/bfd/pef.h b/bfd/pef.h
index db8d18c..d73ff37 100644
--- a/bfd/pef.h
+++ b/bfd/pef.h
@@ -19,6 +19,7 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include "bfd.h"
 
 #include <stdio.h>
diff --git a/bfd/peicode.h b/bfd/peicode.h
index 5d10029..e835792 100644
--- a/bfd/peicode.h
+++ b/bfd/peicode.h
@@ -1,6 +1,7 @@
 /* Support for the generic parts of PE/PEI, for BFD.
    Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-   2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+   2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+   Free Software Foundation, Inc.
    Written by Cygnus Solutions.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -545,7 +546,7 @@ pe_ILF_make_a_symbol (pe_ILF_vars *  vars,
   sprintf (vars->string_ptr, "%s%s", prefix, symbol_name);
 
   if (section == NULL)
-    section = (asection_ptr) & bfd_und_section;
+    section = bfd_und_section_ptr;
 
   /* Initialise the external symbol.  */
   H_PUT_32 (vars->abfd, vars->string_ptr - vars->string_table,
diff --git a/bfd/plugin.c b/bfd/plugin.c
index 064e273..8d2c4b2 100644
--- a/bfd/plugin.c
+++ b/bfd/plugin.c
@@ -1,5 +1,5 @@
 /* Plugin support for BFD.
-   Copyright 2009, 2010, 2011
+   Copyright 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -19,21 +19,57 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include "config.h"
+#include "sysdep.h"
 #include "bfd.h"
 
 #if BFD_SUPPORTS_PLUGINS
 
 #include <assert.h>
+#ifdef HAVE_DLFCN_H
 #include <dlfcn.h>
+#elif defined (HAVE_WINDOWS_H)
+#include <windows.h>
+#else
+#error Unknown how to handle dynamic-load-libraries.
+#endif
 #include <stdarg.h>
 #include "plugin-api.h"
-#include "sysdep.h"
 #include "plugin.h"
 #include "libbfd.h"
 #include "libiberty.h"
 #include <dirent.h>
 
+#if !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H)
+
+#define RTLD_NOW 0      /* Dummy value.  */
+
+static void *
+dlopen (const char *file, int mode ATTRIBUTE_UNUSED)
+{
+  return LoadLibrary (file);
+}
+
+static void *
+dlsym (void *handle, const char *name)
+{
+  return GetProcAddress (handle, name);
+}
+
+static int ATTRIBUTE_UNUSED
+dlclose (void *handle)
+{
+  FreeLibrary (handle);
+  return 0;
+}
+
+static const char *
+dlerror (void)
+{
+  return "Unable to load DLL.";
+}
+
+#endif /* !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H)  */
+
 #define bfd_plugin_close_and_cleanup                  _bfd_generic_close_and_cleanup
 #define bfd_plugin_bfd_free_cached_info               _bfd_generic_bfd_free_cached_info
 #define bfd_plugin_new_section_hook                   _bfd_generic_new_section_hook
diff --git a/bfd/po/SRC-POTFILES.in b/bfd/po/SRC-POTFILES.in
index 7154688..ccdb207 100644
--- a/bfd/po/SRC-POTFILES.in
+++ b/bfd/po/SRC-POTFILES.in
@@ -112,6 +112,7 @@ cpu-pdp11.c
 cpu-pj.c
 cpu-plugin.c
 cpu-powerpc.c
+cpu-rl78.c
 cpu-rs6000.c
 cpu-rx.c
 cpu-s390.c
@@ -195,6 +196,7 @@ elf32-openrisc.c
 elf32-or32.c
 elf32-pj.c
 elf32-ppc.c
+elf32-rl78.c
 elf32-rx.c
 elf32-s390.c
 elf32-score.c
diff --git a/bfd/po/uk.gmo b/bfd/po/uk.gmo
new file mode 100644
index 0000000..a85f3e1
Binary files /dev/null and b/bfd/po/uk.gmo differ
diff --git a/bfd/po/uk.po b/bfd/po/uk.po
new file mode 100644
index 0000000..99cdeed
--- /dev/null
+++ b/bfd/po/uk.po
@@ -0,0 +1,6122 @@
+# bfd Ukrainian translation
+# Copyright (C) 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the binutils package.
+#
+# Yuri Chornoivan <yurchor at ukr.net>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: bfd 2.21.53\n"
+"Report-Msgid-Bugs-To: bug-binutils at gnu.org\n"
+"POT-Creation-Date: 2011-06-02 14:25+0100\n"
+"PO-Revision-Date: 2012-06-23 17:57+0300\n"
+"Last-Translator: Yuri Chornoivan <yurchor at ukr.net>\n"
+"Language-Team: Ukrainian <translation-team-uk at lists.sourceforge.net>\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Lokalize 1.5\n"
+
+#: aout-adobe.c:127
+msgid "%B: Unknown section type in a.out.adobe file: %x\n"
+msgstr "%B: невідомий тип розділу у файлі a.out.adobe: %x\n"
+
+#: aout-cris.c:199
+#, c-format
+msgid "%s: Invalid relocation type exported: %d"
+msgstr "%s: експортовано некоректний тип пересування: %d"
+
+#: aout-cris.c:242
+msgid "%B: Invalid relocation type imported: %d"
+msgstr "%B: імпортовано некоректний тип пересування: %d"
+
+#: aout-cris.c:253
+msgid "%B: Bad relocation record imported: %d"
+msgstr "%B: імпортовано помилковий запис пересування: %d"
+
+#: aoutx.h:1273 aoutx.h:1611
+#, c-format
+msgid "%s: can not represent section `%s' in a.out object file format"
+msgstr "%s: відтворення розділу «%s» у форматі об’єктних файлів a.out неможливе"
+
+#: aoutx.h:1577
+#, c-format
+msgid "%s: can not represent section for symbol `%s' in a.out object file format"
+msgstr "%s: відтворення розділу для символу «%s» у форматі об’єктних файлів a.out неможливе"
+
+#: aoutx.h:1579 vms-alpha.c:7668
+msgid "*unknown*"
+msgstr "*невідомо*"
+
+#: aoutx.h:4017 aoutx.h:4343
+msgid "%P: %B: unexpected relocation type\n"
+msgstr "%P: %B: неочікуваний тип пересування\n"
+
+#: aoutx.h:5374
+#, c-format
+msgid "%s: relocatable link from %s to %s not supported"
+msgstr "%s: підтримки придатних до пересування посилань з %s до %s не передбачено"
+
+#: archive.c:2194
+msgid "Warning: writing archive was slow: rewriting timestamp\n"
+msgstr "Попередження: записування архіву було повільним: перезаписуємо часову позначку\n"
+
+#: archive.c:2482
+msgid "Reading archive file mod timestamp"
+msgstr "Читання часової позначки mod архівного файла"
+
+#: archive.c:2506
+msgid "Writing updated armap timestamp"
+msgstr "Записування оновленої часової позначки armap"
+
+#: bfd.c:398
+msgid "No error"
+msgstr "Немає помилок"
+
+#: bfd.c:399
+msgid "System call error"
+msgstr "Помилка системного виклику"
+
+#: bfd.c:400
+msgid "Invalid bfd target"
+msgstr "Некоректне призначення bfd"
+
+#: bfd.c:401
+msgid "File in wrong format"
+msgstr "Файл у помилковому форматі"
+
+#: bfd.c:402
+msgid "Archive object file in wrong format"
+msgstr "Архівний об’єктний файл у помилковому форматі"
+
+#: bfd.c:403
+msgid "Invalid operation"
+msgstr "Некоректна дія"
+
+#: bfd.c:404
+msgid "Memory exhausted"
+msgstr "Пам’ять вичерпано"
+
+#: bfd.c:405
+msgid "No symbols"
+msgstr "Немає символів"
+
+#: bfd.c:406
+msgid "Archive has no index; run ranlib to add one"
+msgstr "У архіві немає покажчика; запустіть ranlib, щоб його додати"
+
+#: bfd.c:407
+msgid "No more archived files"
+msgstr "Більше архівованих файлів немає"
+
+#: bfd.c:408
+msgid "Malformed archive"
+msgstr "Архів з пошкодженим форматуванням"
+
+#: bfd.c:409
+msgid "File format not recognized"
+msgstr "Формат файла не розпізнано"
+
+#: bfd.c:410
+msgid "File format is ambiguous"
+msgstr "Формат файла є неоднозначним"
+
+#: bfd.c:411
+msgid "Section has no contents"
+msgstr "Розділ не має вмісту"
+
+#: bfd.c:412
+msgid "Nonrepresentable section on output"
+msgstr "Розділ, непридатний для виведення даних"
+
+#: bfd.c:413
+msgid "Symbol needs debug section which does not exist"
+msgstr "Символ потребує розділу діагностики, якого не існує"
+
+#: bfd.c:414
+msgid "Bad value"
+msgstr "помилкове значення"
+
+#: bfd.c:415
+msgid "File truncated"
+msgstr "Файл обрізано"
+
+#: bfd.c:416
+msgid "File too big"
+msgstr "Файл є надто великим"
+
+#: bfd.c:417
+#, c-format
+msgid "Error reading %s: %s"
+msgstr "Помилка під час читання %s: %s"
+
+#: bfd.c:418
+msgid "#<Invalid error code>"
+msgstr "#<некоректний код помилки>"
+
+#: bfd.c:945
+#, c-format
+msgid "BFD %s assertion fail %s:%d"
+msgstr "Оператором контролю BFD %s виявлено помилку %s:%d"
+
+#: bfd.c:957
+#, c-format
+msgid "BFD %s internal error, aborting at %s line %d in %s\n"
+msgstr "Внутрішня помилка BFD %s, перериваємо роботу у %s, рядок %d у %s\n"
+
+#: bfd.c:961
+#, c-format
+msgid "BFD %s internal error, aborting at %s line %d\n"
+msgstr "Внутрішня помилка BFD %s, перериваємо роботу у %s, рядок %d\n"
+
+#: bfd.c:963
+msgid "Please report this bug.\n"
+msgstr "Будь ласка, повідомте про цю ваду.\n"
+
+#: bfdwin.c:206
+#, c-format
+msgid "not mapping: data=%lx mapped=%d\n"
+msgstr "не відображено: дані=%lx відображено=%d\n"
+
+#: bfdwin.c:209
+#, c-format
+msgid "not mapping: env var not set\n"
+msgstr "не відображено: не встановлено змінну середовища var\n"
+
+#: binary.c:271
+#, c-format
+msgid "Warning: Writing section `%s' to huge (ie negative) file offset 0x%lx."
+msgstr "Попередження: виконується запис розділу «%s» за надто великим (тобто від’ємним) відступом у файлі, 0x%lx."
+
+#: bout.c:1146 elf-m10300.c:2075 elf32-avr.c:1654 elf32-frv.c:5731
+#: elfxx-sparc.c:2796 reloc.c:5677 reloc16.c:162 elf32-ia64.c:360
+#: elf64-ia64.c:360
+msgid "%P%F: --relax and -r may not be used together\n"
+msgstr "%P%F: --relax і -r не можна використовувати одночасно\n"
+
+#: cache.c:226
+msgid "reopening %B: %s\n"
+msgstr "повторне відкриття %B: %s\n"
+
+#: coff-alpha.c:491
+msgid ""
+"%B: Cannot handle compressed Alpha binaries.\n"
+"   Use compiler flags, or objZ, to generate uncompressed binaries."
+msgstr ""
+"%B: обробка стиснутих двійкових файлів Alpha неможлива.\n"
+"   Скористайтеся прапорцями компілятора або objZ для створення нестиснених двійкових файлів."
+
+#: coff-alpha.c:648
+msgid "%B: unknown/unsupported relocation type %d"
+msgstr "%B: невідомий або непідтримуваний тип пересування %d"
+
+#: coff-alpha.c:900 coff-alpha.c:937 coff-alpha.c:2025 coff-mips.c:1003
+msgid "GP relative relocation used when GP not defined"
+msgstr "Використано відносне пересування GP, втім, GP не визначено"
+
+#: coff-alpha.c:1502
+msgid "using multiple gp values"
+msgstr "використовується декілька значень gp"
+
+#: coff-alpha.c:1561
+msgid "%B: unsupported relocation: ALPHA_R_GPRELHIGH"
+msgstr "%B: пересування, підтримки якого не передбачено: ALPHA_R_GPRELHIGH"
+
+#: coff-alpha.c:1568
+msgid "%B: unsupported relocation: ALPHA_R_GPRELLOW"
+msgstr "%B: пересування, підтримки якого не передбачено: ALPHA_R_GPRELLOW"
+
+#: coff-alpha.c:1575 elf32-m32r.c:2493 elf64-alpha.c:4079 elf64-alpha.c:4228
+#: elf32-ia64.c:3845 elf64-ia64.c:3845
+msgid "%B: unknown relocation type %d"
+msgstr "%B: невідомий тип пересування %d"
+
+#: coff-arm.c:1038
+#, c-format
+msgid "%B: unable to find THUMB glue '%s' for `%s'"
+msgstr "%B: не вдалося знайти склейку THUMB «%s» для «%s»"
+
+#: coff-arm.c:1067
+#, c-format
+msgid "%B: unable to find ARM glue '%s' for `%s'"
+msgstr "%B: не вдалося знайти склейку ARM «%s» для «%s»"
+
+#: coff-arm.c:1369 elf32-arm.c:6980
+#, c-format
+msgid ""
+"%B(%s): warning: interworking not enabled.\n"
+"  first occurrence: %B: arm call to thumb"
+msgstr ""
+"%B(%s): попередження: сумісну роботу не увімкнено.\n"
+"  перша згадка: %B: виклик arm до thumb"
+
+#: coff-arm.c:1459
+#, c-format
+msgid ""
+"%B(%s): warning: interworking not enabled.\n"
+"  first occurrence: %B: thumb call to arm\n"
+"  consider relinking with --support-old-code enabled"
+msgstr ""
+"%B(%s): попередження: сумісну роботу не увімкнено.\n"
+"  перша згадка: %B: виклик arm до arm\n"
+"  спробуйте повторне об’єднання з увімкненим --support-old-code"
+
+#: coff-arm.c:1754 coff-tic80.c:695 cofflink.c:3081
+msgid "%B: bad reloc address 0x%lx in section `%A'"
+msgstr "%B: помилкова адреса пересування 0x%lx у розділі «%A»"
+
+#: coff-arm.c:2079
+msgid "%B: illegal symbol index in reloc: %d"
+msgstr "%B: некоректний індекс символу у пересуванні: %d"
+
+#: coff-arm.c:2210
+#, c-format
+msgid "error: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%d"
+msgstr "помилка: %B зібрано для APCS-%d, а %B зібрано для APCS-%d"
+
+#: coff-arm.c:2226 elf32-arm.c:15580
+#, c-format
+msgid "error: %B passes floats in float registers, whereas %B passes them in integer registers"
+msgstr "помилка: %B передає числа з рухомою комою до регістрів, а %B передає їх у цілочисельні регістри"
+
+#: coff-arm.c:2229 elf32-arm.c:15584
+#, c-format
+msgid "error: %B passes floats in integer registers, whereas %B passes them in float registers"
+msgstr "помилка: %B передає цілі числа до регістрів, а %B передає їх у регістри чисел з рухомою комою"
+
+#: coff-arm.c:2243
+#, c-format
+msgid "error: %B is compiled as position independent code, whereas target %B is absolute position"
+msgstr "помилка: %B зібрано як код з незалежним позиціюванням, а призначення %B визначено у форматі абсолютної позиції"
+
+#: coff-arm.c:2246
+#, c-format
+msgid "error: %B is compiled as absolute position code, whereas target %B is position independent"
+msgstr "помилка: %B зібрано як код з абсолютним позиціюванням, а призначення %B визначено у форматі незалежної позиції"
+
+#: coff-arm.c:2274 elf32-arm.c:15649
+#, c-format
+msgid "Warning: %B supports interworking, whereas %B does not"
+msgstr "Попередження: у %B передбачено сумісну роботу, а у %B не передбачено"
+
+#: coff-arm.c:2277 elf32-arm.c:15655
+#, c-format
+msgid "Warning: %B does not support interworking, whereas %B does"
+msgstr "Попередження: у %B не передбачено сумісної роботи, а у %B передбачено"
+
+#: coff-arm.c:2301
+#, c-format
+msgid "private flags = %x:"
+msgstr "закриті прапорці = %x:"
+
+#: coff-arm.c:2309 elf32-arm.c:11752
+#, c-format
+msgid " [floats passed in float registers]"
+msgstr " [числа з рухомою комою передано до регістрів чисел з рухомою комою]"
+
+#: coff-arm.c:2311
+#, c-format
+msgid " [floats passed in integer registers]"
+msgstr " [числа з рухомою комою передано до цілочисельних регістрів]"
+
+#: coff-arm.c:2314 elf32-arm.c:11755
+#, c-format
+msgid " [position independent]"
+msgstr " [незалежний від позиції]"
+
+#: coff-arm.c:2316
+#, c-format
+msgid " [absolute position]"
+msgstr " [з абсолютним позиціюванням]"
+
+#: coff-arm.c:2320
+#, c-format
+msgid " [interworking flag not initialised]"
+msgstr " [прапорець сумісної роботи не ініціалізовано]"
+
+#: coff-arm.c:2322
+#, c-format
+msgid " [interworking supported]"
+msgstr " [підтримується сумісна робота]"
+
+#: coff-arm.c:2324
+#, c-format
+msgid " [interworking not supported]"
+msgstr " [сумісна робота не підтримується]"
+
+#: coff-arm.c:2370 elf32-arm.c:10787
+#, c-format
+msgid "Warning: Not setting interworking flag of %B since it has already been specified as non-interworking"
+msgstr "Попередження: прапорець сумісної роботи у %B не встановлено, оскільки його вже було визначено так, щоб він забороняв сумісну роботу"
+
+#: coff-arm.c:2374 elf32-arm.c:10791
+#, c-format
+msgid "Warning: Clearing the interworking flag of %B due to outside request"
+msgstr "Попередження: знято прапорець сумісної роботи у %B у відповідь на запит ззовні"
+
+#: coff-h8300.c:1122
+#, c-format
+msgid "cannot handle R_MEM_INDIRECT reloc when using %s output"
+msgstr "пересування неможливо обробити R_MEM_INDIRECT, якщо використано виведення до %s"
+
+#: coff-i860.c:147
+#, c-format
+msgid "relocation `%s' not yet implemented"
+msgstr "пересування «%s» ще не реалізовано"
+
+#: coff-i860.c:605 coff-tic54x.c:398 coffcode.h:5192
+msgid "%B: warning: illegal symbol index %ld in relocs"
+msgstr "%B: попередження: некоректний індекс символу %ld у пересуваннях"
+
+#: coff-i960.c:143 coff-i960.c:506
+msgid "uncertain calling convention for non-COFF symbol"
+msgstr "непевні правила виклику для символу поза COFF"
+
+#: coff-m68k.c:506 elf32-bfin.c:5689 elf32-cr16.c:2897 elf32-m68k.c:4677
+msgid "unsupported reloc type"
+msgstr "непідтримуваний тип пересування"
+
+#: coff-mips.c:688 elf32-mips.c:1014 elf32-score.c:430 elf32-score7.c:330
+#: elf64-mips.c:2019 elfn32-mips.c:1832
+msgid "GP relative relocation when _gp not defined"
+msgstr "відносне пересування GP, але _gp не визначено"
+
+#: coff-or32.c:229
+msgid "Unrecognized reloc"
+msgstr "Нерозпізнане пересування"
+
+#: coff-rs6000.c:2676
+#, c-format
+msgid "%s: unsupported relocation type 0x%02x"
+msgstr "%s: непідтримуваний тип пересування 0x%02x"
+
+#: coff-rs6000.c:2761
+#, c-format
+msgid "%s: TOC reloc at 0x%x to symbol `%s' with no TOC entry"
+msgstr "%s: пересування TOC за адресою 0x%x до символу «%s», який немає запису у TOC"
+
+#: coff-rs6000.c:3512 coff64-rs6000.c:2111
+msgid "%B: symbol `%s' has unrecognized smclas %d"
+msgstr "%B: символ «%s» належить до нерозпізнаного smclas %d"
+
+#: coff-sh.c:521
+#, c-format
+msgid "SH Error: unknown reloc type %d"
+msgstr "Помилка SH: невідомий тип пересування, %d"
+
+#: coff-tic4x.c:195 coff-tic54x.c:299 coff-tic80.c:458
+#, c-format
+msgid "Unrecognized reloc type 0x%x"
+msgstr "Нерозпізнаний тип пересування 0x%x"
+
+#: coff-tic4x.c:240
+#, c-format
+msgid "%s: warning: illegal symbol index %ld in relocs"
+msgstr "%s: попередження: некоректний індекс символу %ld у пересуваннях"
+
+#: coff-w65.c:367
+#, c-format
+msgid "ignoring reloc %s\n"
+msgstr "ігноруємо пересування %s\n"
+
+#: coffcode.h:991
+msgid "%B: warning: COMDAT symbol '%s' does not match section name '%s'"
+msgstr "%B: попередження: символ COMDAT «%s» не відповідає назві розділу «%s»"
+
+#. Generate a warning message rather using the 'unhandled'
+#. variable as this will allow some .sys files generate by
+#. other toolchains to be processed.  See bugzilla issue 196.
+#: coffcode.h:1215
+msgid "%B: Warning: Ignoring section flag IMAGE_SCN_MEM_NOT_PAGED in section %s"
+msgstr "%B: попередження: ігноруємо прапорець розділу IMAGE_SCN_MEM_NOT_PAGED у розділі %s"
+
+#: coffcode.h:1282
+msgid "%B (%s): Section flag %s (0x%x) ignored"
+msgstr "%B (%s): прапорець розділу %s (0x%x) проігноровано"
+
+#: coffcode.h:2424
+#, c-format
+msgid "Unrecognized TI COFF target id '0x%x'"
+msgstr "Нерозпізнаний ідентифікатор призначення TI COFF, «0x%x»"
+
+#: coffcode.h:2738
+msgid "%B: reloc against a non-existant symbol index: %ld"
+msgstr "%B: пересування за нествореним індексом символу: %ld"
+
+#: coffcode.h:3296
+msgid "%B: too many sections (%d)"
+msgstr "%B: занадто багато розділів (%d)"
+
+#: coffcode.h:3712
+msgid "%B: section %s: string table overflow at offset %ld"
+msgstr "%B: розділ %s: переповнення таблиці рядків за відступом %ld"
+
+#: coffcode.h:4517
+msgid "%B: warning: line number table read failed"
+msgstr "%B: попередження: помилка читання з таблиці номерів рядків"
+
+#: coffcode.h:4547
+msgid "%B: warning: illegal symbol index %ld in line numbers"
+msgstr "%B: попередження: некоректний індекс символу %ld у номерах рядків"
+
+#: coffcode.h:4561
+msgid "%B: warning: duplicate line number information for `%s'"
+msgstr "%B: попередження: дублювання даних щодо номерів рядків для «%s»"
+
+#: coffcode.h:4961
+msgid "%B: Unrecognized storage class %d for %s symbol `%s'"
+msgstr "%B: невідомий клас зберігання даних %d для символу %s «%s»"
+
+#: coffcode.h:5087
+msgid "warning: %B: local symbol `%s' has no section"
+msgstr "попередження: %B: локальний символ «%s» не має розділу"
+
+#: coffcode.h:5231
+msgid "%B: illegal relocation type %d at address 0x%lx"
+msgstr "%B: некоректний тип пересування %d за адресою 0x%lx"
+
+#: coffgen.c:1578
+msgid "%B: bad string table size %lu"
+msgstr "%B: помилковий розмір таблиці рядків %lu"
+
+#: cofflink.c:533 elflink.c:4353
+msgid "Warning: type of symbol `%s' changed from %d to %d in %B"
+msgstr "Попередження: тип символу «%s» змінено з %d на %d у %B"
+
+#: cofflink.c:2330
+msgid "%B: relocs in section `%A', but it has no contents"
+msgstr "%B: пересування у розділі «%A», але у цьому розділі немає змісту"
+
+#: cofflink.c:2392 elflink.c:9554
+msgid "%X`%s' referenced in section `%A' of %B: defined in discarded section `%A' of %B\n"
+msgstr "На %X«%s» посилається розділ «%A» %B: визначено у відкинутому розділі «%A» %B\n"
+
+#: cofflink.c:2690 coffswap.h:826
+#, c-format
+msgid "%s: %s: reloc overflow: 0x%lx > 0xffff"
+msgstr "%s: %s: переповнення під час пересування: 0x%lx > 0xffff"
+
+#: cofflink.c:2699 coffswap.h:812
+#, c-format
+msgid "%s: warning: %s: line number overflow: 0x%lx > 0xffff"
+msgstr "%s: попередження: %s: переповнення номера рядка: 0x%lx > 0xffff"
+
+#: cpu-arm.c:189 cpu-arm.c:200
+msgid "error: %B is compiled for the EP9312, whereas %B is compiled for XScale"
+msgstr "помилка: B зібрано для EP9312, а %B зібрано для XScale"
+
+#: cpu-arm.c:333
+#, c-format
+msgid "warning: unable to update contents of %s section in %s"
+msgstr "попередження: не вдалося оновити зміст розділу %s у %s"
+
+#: dwarf2.c:490
+#, c-format
+msgid "Dwarf Error: Can't find %s section."
+msgstr "Помилка dwarf: не вдалося знайти розділ %s."
+
+#: dwarf2.c:518
+#, c-format
+msgid "Dwarf Error: Offset (%lu) greater than or equal to %s size (%lu)."
+msgstr "Помилка dwarf: відступ (%lu) є більшим або рівним за розмір %s (%lu)."
+
+#: dwarf2.c:940
+#, c-format
+msgid "Dwarf Error: Invalid or unhandled FORM value: %u."
+msgstr "Помилка dwarf: некоректне або непридатне до обробки значення FORM: %u."
+
+#: dwarf2.c:1191
+msgid "Dwarf Error: mangled line number section (bad file number)."
+msgstr "Помилка dwarf: пошкоджений розділ номерів рядків (помилковий номер файла)."
+
+#: dwarf2.c:1443
+#, c-format
+msgid "Dwarf Error: Unhandled .debug_line version %d."
+msgstr "Помилка dwarf: непридатна до обробки версія .debug_line, %d."
+
+#: dwarf2.c:1465
+msgid "Dwarf Error: Invalid maximum operations per instruction."
+msgstr "Помилка dwarf: некоректна максимальна кількість дій на команду."
+
+#: dwarf2.c:1652
+msgid "Dwarf Error: mangled line number section."
+msgstr "Помилка dwarf: пошкоджений розділ номерів рядків."
+
+#: dwarf2.c:1978 dwarf2.c:2098 dwarf2.c:2383
+#, c-format
+msgid "Dwarf Error: Could not find abbrev number %u."
+msgstr "Помилка dwarf: не вдалося знайти скорочений номер %u."
+
+#: dwarf2.c:2344
+#, c-format
+msgid "Dwarf Error: found dwarf version '%u', this reader only handles version 2, 3 and 4 information."
+msgstr "Помилка dwarf: виявлено версію dwarf «%u», але у цій функції читання передбачено обробку лише версій даних 2, 3 і 4."
+
+#: dwarf2.c:2351
+#, c-format
+msgid "Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'."
+msgstr "Помилка у dwarf: виявлено розмір адреси «%u», втім у функції читання не передбачено розмірів, що перевищують «%u»."
+
+#: dwarf2.c:2374
+#, c-format
+msgid "Dwarf Error: Bad abbrev number: %u."
+msgstr "Помилка dwarf: помилковий скорочений номер: %u."
+
+#: ecoff.c:1237
+#, c-format
+msgid "Unknown basic type %d"
+msgstr "Невідомий основний тип %d"
+
+#: ecoff.c:1494
+#, c-format
+msgid ""
+"\n"
+"      End+1 symbol: %ld"
+msgstr ""
+"\n"
+"      Символ за кінцем: %ld"
+
+#: ecoff.c:1501 ecoff.c:1504
+#, c-format
+msgid ""
+"\n"
+"      First symbol: %ld"
+msgstr ""
+"\n"
+"      Перший символ: %ld"
+
+#: ecoff.c:1516
+#, c-format
+msgid ""
+"\n"
+"      End+1 symbol: %-7ld   Type:  %s"
+msgstr ""
+"\n"
+"      Символ за кінцем: %-7ld   Тип:  %s"
+
+#: ecoff.c:1523
+#, c-format
+msgid ""
+"\n"
+"      Local symbol: %ld"
+msgstr ""
+"\n"
+"      Локальний символ: %ld"
+
+#: ecoff.c:1531
+#, c-format
+msgid ""
+"\n"
+"      struct; End+1 symbol: %ld"
+msgstr ""
+"\n"
+"      struct; символ за кінцем: %ld"
+
+#: ecoff.c:1536
+#, c-format
+msgid ""
+"\n"
+"      union; End+1 symbol: %ld"
+msgstr ""
+"\n"
+"      union; символ за кінцем: %ld"
+
+#: ecoff.c:1541
+#, c-format
+msgid ""
+"\n"
+"      enum; End+1 symbol: %ld"
+msgstr ""
+"\n"
+"      enum; символ за кінцем: %ld"
+
+#: ecoff.c:1547
+#, c-format
+msgid ""
+"\n"
+"      Type: %s"
+msgstr ""
+"\n"
+"      Тип: %s"
+
+#: elf-attrs.c:569
+msgid "error: %B: Object has vendor-specific contents that must be processed by the '%s' toolchain"
+msgstr "помилка: %B: у об’єкті містяться дані у специфічному форматі, ці дані має бути оброблено набором інструментів «%s»"
+
+#: elf-attrs.c:578
+msgid "error: %B: Object tag '%d, %s' is incompatible with tag '%d, %s'"
+msgstr "помилка: %B: мітка об’єкта «%d, %s» несумісна з міткою «%d, %s»"
+
+#: elf-eh-frame.c:913
+msgid "%P: error in %B(%A); no .eh_frame_hdr table will be created.\n"
+msgstr "%P: помилка у %B(%A); таблицю .eh_frame_hdr не буде створено.\n"
+
+#: elf-eh-frame.c:1165
+msgid "%P: fde encoding in %B(%A) prevents .eh_frame_hdr table being created.\n"
+msgstr "%P: кодування fde у %B(%A) перешкоджає створенню таблиці .eh_frame_hdr.\n"
+
+#: elf-eh-frame.c:1583
+msgid "%P: DW_EH_PE_datarel unspecified for this architecture.\n"
+msgstr "%P: DW_EH_PE_datarel не визначено для цієї архітектури.\n"
+
+#: elf-ifunc.c:179
+msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%B' can not be used when making an executable; recompile with -fPIE and relink with -pie\n"
+msgstr ""
+
+#: elf-m10200.c:450 elf-m10300.c:1571 elf32-avr.c:1221 elf32-bfin.c:3209
+#: elf32-cr16.c:1482 elf32-cr16c.c:780 elf32-cris.c:2077 elf32-crx.c:922
+#: elf32-d10v.c:509 elf32-fr30.c:609 elf32-frv.c:4102 elf32-h8300.c:509
+#: elf32-i860.c:1211 elf32-ip2k.c:1468 elf32-iq2000.c:684 elf32-lm32.c:1168
+#: elf32-m32c.c:553 elf32-m32r.c:3111 elf32-m68hc1x.c:1138 elf32-mep.c:535
+#: elf32-microblaze.c:1231 elf32-moxie.c:282 elf32-msp430.c:486 elf32-mt.c:395
+#: elf32-openrisc.c:404 elf32-score.c:2731 elf32-score7.c:2540
+#: elf32-spu.c:5042 elf32-v850.c:2143 elf32-xstormy16.c:941 elf64-mmix.c:1522
+msgid "internal error: out of range error"
+msgstr "внутрішня помилка: вихід за межі діапазону"
+
+#: elf-m10200.c:454 elf-m10300.c:1575 elf32-avr.c:1225 elf32-bfin.c:3213
+#: elf32-cr16.c:1486 elf32-cr16c.c:784 elf32-cris.c:2081 elf32-crx.c:926
+#: elf32-d10v.c:513 elf32-fr30.c:613 elf32-frv.c:4106 elf32-h8300.c:513
+#: elf32-i860.c:1215 elf32-iq2000.c:688 elf32-lm32.c:1172 elf32-m32c.c:557
+#: elf32-m32r.c:3115 elf32-m68hc1x.c:1142 elf32-mep.c:539
+#: elf32-microblaze.c:1235 elf32-moxie.c:286 elf32-msp430.c:490
+#: elf32-openrisc.c:408 elf32-score.c:2735 elf32-score7.c:2544
+#: elf32-spu.c:5046 elf32-v850.c:2147 elf32-xstormy16.c:945 elf64-mmix.c:1526
+#: elfxx-mips.c:9193
+msgid "internal error: unsupported relocation error"
+msgstr "внутрішня помилка: непідтримувана помилка пересування"
+
+#: elf-m10200.c:458 elf32-cr16.c:1490 elf32-cr16c.c:788 elf32-crx.c:930
+#: elf32-d10v.c:517 elf32-h8300.c:517 elf32-lm32.c:1176 elf32-m32r.c:3119
+#: elf32-m68hc1x.c:1146 elf32-microblaze.c:1239 elf32-score.c:2739
+#: elf32-score7.c:2548 elf32-spu.c:5050
+msgid "internal error: dangerous error"
+msgstr "внутрішня помилка: небезпечна помилка"
+
+#: elf-m10200.c:462 elf-m10300.c:1591 elf32-avr.c:1233 elf32-bfin.c:3221
+#: elf32-cr16.c:1494 elf32-cr16c.c:792 elf32-cris.c:2089 elf32-crx.c:934
+#: elf32-d10v.c:521 elf32-fr30.c:621 elf32-frv.c:4114 elf32-h8300.c:521
+#: elf32-i860.c:1223 elf32-ip2k.c:1483 elf32-iq2000.c:696 elf32-lm32.c:1180
+#: elf32-m32c.c:565 elf32-m32r.c:3123 elf32-m68hc1x.c:1150 elf32-mep.c:547
+#: elf32-microblaze.c:1243 elf32-moxie.c:294 elf32-msp430.c:498 elf32-mt.c:403
+#: elf32-openrisc.c:416 elf32-score.c:2748 elf32-score7.c:2552
+#: elf32-spu.c:5054 elf32-v850.c:2167 elf32-xstormy16.c:953 elf64-mmix.c:1534
+msgid "internal error: unknown error"
+msgstr "внутрішня помилка: невідома помилка"
+
+#: elf-m10300.c:1515 elf32-arm.c:10365 elf32-i386.c:4107 elf32-m32r.c:2604
+#: elf32-m68k.c:4156 elf32-s390.c:3010 elf32-sh.c:4223 elf32-xtensa.c:3067
+#: elf64-s390.c:2985 elf64-sh64.c:1636 elf64-x86-64.c:3882 elfxx-sparc.c:3807
+msgid "%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"
+msgstr "%B(%A+0x%lx): нерозв’язне пересування %s щодо символу «%s»"
+
+#: elf-m10300.c:1580
+msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)"
+msgstr "помилка: невідповідний тип пересування для бібліотеки спільного використання (забули -fpic?)"
+
+#: elf-m10300.c:1583
+msgid "%B: error: taking the address of protected function '%s' cannot be done when making a shared library"
+msgstr "%B: помилка: не можна виконувати отримання адреси захищеної функції «%s» під час створення бібліотеки спільного використання"
+
+#: elf-m10300.c:1586
+msgid "internal error: suspicious relocation type used in shared library"
+msgstr "внутрішня помилка: підозріливий тип пересування у бібліотеці спільного використання"
+
+#: elf-m10300.c:4384 elf32-arm.c:12743 elf32-cr16.c:2451 elf32-cris.c:3044
+#: elf32-hppa.c:1894 elf32-i370.c:503 elf32-i386.c:2043 elf32-lm32.c:1868
+#: elf32-m32r.c:1927 elf32-m68k.c:3252 elf32-s390.c:1652 elf32-sh.c:2931
+#: elf32-tic6x.c:2160 elf32-vax.c:1040 elf64-s390.c:1635 elf64-sh64.c:3377
+#: elf64-x86-64.c:1985 elfxx-sparc.c:2104
+#, c-format
+msgid "dynamic variable `%s' is zero size"
+msgstr "динамічна змінна «%s» має нульовий розмір"
+
+#: elf.c:334
+msgid "%B: invalid string offset %u >= %lu for section `%s'"
+msgstr "%B: некоректний відступ рядка, %u >= %lu, для розділу «%s»"
+
+#: elf.c:446
+msgid "%B symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section"
+msgstr "%B номер символу %lu посилається на розділ SHT_SYMTAB_SHNDX, якого не існує"
+
+#: elf.c:602
+msgid "%B: Corrupt size field in group section header: 0x%lx"
+msgstr "%B: пошкоджені дані поля розміру у заголовку розділу груп: 0x%lx"
+
+#: elf.c:638
+msgid "%B: invalid SHT_GROUP entry"
+msgstr "%B: некоректний запис SHT_GROUP"
+
+#: elf.c:708
+msgid "%B: no group info for section %A"
+msgstr "%B: немає даних щодо групи для розділу %A"
+
+#: elf.c:737 elf.c:3121 elflink.c:10144
+msgid "%B: warning: sh_link not set for section `%A'"
+msgstr "%B: попередження: не встановлено sh_link для розділу «%A»"
+
+#: elf.c:756
+msgid "%B: sh_link [%d] in section `%A' is incorrect"
+msgstr "%B: sh_link [%d] у розділі «%A» є некоректним"
+
+#: elf.c:791
+msgid "%B: unknown [%d] section `%s' in group [%s]"
+msgstr "%B: невідомий [%d] розділ «%s» у групі [%s]"
+
+#: elf.c:1041
+msgid "%B: unable to initialize commpress status for section %s"
+msgstr "%B: не вдалося ініціалізувати стан стискання для розділу %s"
+
+#: elf.c:1061
+msgid "%B: unable to initialize decommpress status for section %s"
+msgstr "%B: не вдалося ініціалізувати стан розпакування для розділу %s"
+
+#: elf.c:1181
+#, c-format
+msgid ""
+"\n"
+"Program Header:\n"
+msgstr ""
+"\n"
+"Заголовок програми:\n"
+
+#: elf.c:1223
+#, c-format
+msgid ""
+"\n"
+"Dynamic Section:\n"
+msgstr ""
+"\n"
+"Динамічний розділ:\n"
+
+#: elf.c:1359
+#, c-format
+msgid ""
+"\n"
+"Version definitions:\n"
+msgstr ""
+"\n"
+"Визначення версій:\n"
+
+#: elf.c:1384
+#, c-format
+msgid ""
+"\n"
+"Version References:\n"
+msgstr ""
+"\n"
+"Посилання на версії:\n"
+
+#: elf.c:1389
+#, c-format
+msgid "  required from %s:\n"
+msgstr "  потрібні %s:\n"
+
+#: elf.c:1796
+msgid "%B: invalid link %lu for reloc section %s (index %u)"
+msgstr "%B: некоректне посилання %lu для розділу пересування %s (індекс %u)"
+
+#: elf.c:1966
+msgid "%B: don't know how to handle allocated, application specific section `%s' [0x%8x]"
+msgstr "%B: спосіб обробки розміщеного невідомий, специфічний для програми розділ «%s» [0x%8x]"
+
+#: elf.c:1978
+msgid "%B: don't know how to handle processor specific section `%s' [0x%8x]"
+msgstr "%B: спосіб обробки специфічного для процесора розділу `%s' [0x%8x] невідомий"
+
+#: elf.c:1989
+msgid "%B: don't know how to handle OS specific section `%s' [0x%8x]"
+msgstr "%B: спосіб обробки специфічного для ОС розділу «%s» [0x%8x] невідомий"
+
+#: elf.c:1999
+msgid "%B: don't know how to handle section `%s' [0x%8x]"
+msgstr "%B: спосіб обробки розділу «%s» [0x%8x] невідомий"
+
+#: elf.c:2634
+#, c-format
+msgid "warning: section `%A' type changed to PROGBITS"
+msgstr "попередження: тип розділу «%A» змінено на PROGBITS"
+
+#: elf.c:3078
+msgid "%B: sh_link of section `%A' points to discarded section `%A' of `%B'"
+msgstr "%B: sh_link розділу «%A» вказує на відкинутий розділ «%A» «%B»"
+
+#: elf.c:3101
+msgid "%B: sh_link of section `%A' points to removed section `%A' of `%B'"
+msgstr "%B: sh_link розділу «%A» вказує на вилучений розділ «%A» «%B»"
+
+#: elf.c:4527
+msgid "%B: The first section in the PT_DYNAMIC segment is not the .dynamic section"
+msgstr "%B: перший розділ у сегменті PT_DYNAMIC не є розділом .dynamic"
+
+#: elf.c:4554
+msgid "%B: Not enough room for program headers, try linking with -N"
+msgstr "%B: недостатньо місця для заголовків програми, спробуйте виконати компонування з -N"
+
+#: elf.c:4641
+msgid "%B: section %A lma %#lx adjusted to %#lx"
+msgstr "%B: lma %#lx розділу %A скориговано до %#lx"
+
+#: elf.c:4774
+msgid "%B: section `%A' can't be allocated in segment %d"
+msgstr "%B: розділ «%A» не може бути розподілено у сегменті %d"
+
+#: elf.c:4822
+msgid "%B: warning: allocated section `%s' not in segment"
+msgstr "%B: попередження: розподілений розділ «%s» перебуває за межами сегмента"
+
+#: elf.c:5322
+msgid "%B: symbol `%s' required but not present"
+msgstr "%B: потрібен символ «%s», але його немає"
+
+#: elf.c:5660
+msgid "%B: warning: Empty loadable segment detected, is this intentional ?\n"
+msgstr "%B: попередження: виявлено порожній завантажувальний сегмент, так і треба?\n"
+
+#: elf.c:6688
+#, c-format
+msgid "Unable to find equivalent output section for symbol '%s' from section '%s'"
+msgstr "Не вдалося знайти рівноцінний розділ виведення даних для символу «%s» з розділу «%s»"
+
+#: elf.c:7684
+msgid "%B: unsupported relocation type %s"
+msgstr "%B: непідтримуваний тип пересування %s"
+
+#: elf32-arm.c:3590
+msgid ""
+"%B(%s): warning: interworking not enabled.\n"
+"  first occurrence: %B: Thumb call to ARM"
+msgstr ""
+"%B(%s): попередження: сумісну роботу не увімкнено.\n"
+"  перша згадка: %B: виклик thumb до ARM"
+
+#: elf32-arm.c:3637
+msgid ""
+"%B(%s): warning: interworking not enabled.\n"
+"  first occurrence: %B: ARM call to Thumb"
+msgstr ""
+"%B(%s): попередження: сумісну роботу не увімкнено.\n"
+"  перша згадка: %B: виклик ARM до Thumb"
+
+#: elf32-arm.c:3849 elf32-arm.c:5286
+#, c-format
+msgid "%s: cannot create stub entry %s"
+msgstr "%s: не вдалося створити шаблонний запис %s"
+
+#: elf32-arm.c:5402
+#, c-format
+msgid "unable to find THUMB glue '%s' for '%s'"
+msgstr "не вдалося знайти склейку THUMB «%s» для «%s»"
+
+#: elf32-arm.c:5438
+#, c-format
+msgid "unable to find ARM glue '%s' for '%s'"
+msgstr "не вдалося знайти склейку ARM «%s» для «%s»"
+
+#: elf32-arm.c:5964
+msgid "%B: BE8 images only valid in big-endian mode."
+msgstr "%B: образи BE8 є чинними лише у режимі big-endian."
+
+#. Give a warning, but do as the user requests anyway.
+#: elf32-arm.c:6194
+msgid "%B: warning: selected VFP11 erratum workaround is not necessary for target architecture"
+msgstr "%B: попередження: вибраний спосіб уникнення помилки VFP11 не є необхідним для архітектури призначення"
+
+#: elf32-arm.c:6738 elf32-arm.c:6758
+msgid "%B: unable to find VFP11 veneer `%s'"
+msgstr ""
+
+#: elf32-arm.c:6806
+#, c-format
+msgid "Invalid TARGET2 relocation type '%s'."
+msgstr "Некоректний тип пересування у TARGET2, «%s»."
+
+#: elf32-arm.c:6890
+msgid ""
+"%B(%s): warning: interworking not enabled.\n"
+"  first occurrence: %B: thumb call to arm"
+msgstr ""
+"%B(%s): попередження: сумісну роботу не увімкнено.\n"
+"  перша згадка: %B: виклик thumb до arm"
+
+#: elf32-arm.c:7674
+msgid "%B(%A+0x%lx):unexpected Thumb instruction '0x%x' in TLS trampoline"
+msgstr ""
+
+#: elf32-arm.c:7713
+msgid "%B(%A+0x%lx):unexpected ARM instruction '0x%x' in TLS trampoline"
+msgstr ""
+
+#: elf32-arm.c:8166
+msgid "\\%B: Warning: Arm BLX instruction targets Arm function '%s'."
+msgstr ""
+
+#: elf32-arm.c:8575
+msgid "%B: Warning: Thumb BLX instruction targets thumb function '%s'."
+msgstr ""
+
+#: elf32-arm.c:9408
+msgid "%B(%A+0x%lx):unexpected Thumb instruction '0x%x' referenced by TLS_GOTDESC"
+msgstr ""
+
+#: elf32-arm.c:9431
+msgid "%B(%A+0x%lx):unexpected ARM instruction '0x%x' referenced by TLS_GOTDESC"
+msgstr ""
+
+#: elf32-arm.c:9460
+msgid "%B(%A+0x%lx): R_ARM_TLS_LE32 relocation not permitted in shared object"
+msgstr ""
+
+#: elf32-arm.c:9675
+msgid "%B(%A+0x%lx): Only ADD or SUB instructions are allowed for ALU group relocations"
+msgstr ""
+
+#: elf32-arm.c:9715 elf32-arm.c:9802 elf32-arm.c:9885 elf32-arm.c:9970
+msgid "%B(%A+0x%lx): Overflow whilst splitting 0x%lx for group relocation %s"
+msgstr "%B(%A+0x%lx): переповнення під час спроби поділу 0x%lx з метою групового пересування %s"
+
+#: elf32-arm.c:10209 elf32-sh.c:4112 elf64-sh64.c:1544
+msgid "%B(%A+0x%lx): %s relocation against SEC_MERGE section"
+msgstr "%B(%A+0x%lx): пересування %s щодо розділу SEC_MERGE"
+
+#: elf32-arm.c:10320 elf32-m68k.c:4191 elf32-xtensa.c:2805
+msgid "%B(%A+0x%lx): %s used with TLS symbol %s"
+msgstr "%B(%A+0x%lx): %s використовується з символом TLS %s"
+
+#: elf32-arm.c:10321 elf32-m68k.c:4192 elf32-xtensa.c:2806
+msgid "%B(%A+0x%lx): %s used with non-TLS symbol %s"
+msgstr "%B(%A+0x%lx): %s використовується з символом поза TLS %s"
+
+#: elf32-arm.c:10399 elf32-tic6x.c:2751
+msgid "out of range"
+msgstr "поза діапазоном"
+
+#: elf32-arm.c:10403 elf32-tic6x.c:2755
+msgid "unsupported relocation"
+msgstr "непідтримуване пересування"
+
+#: elf32-arm.c:10411 elf32-tic6x.c:2763
+msgid "unknown error"
+msgstr "невідома помилка"
+
+#: elf32-arm.c:10836
+msgid "Warning: Clearing the interworking flag of %B because non-interworking code in %B has been linked with it"
+msgstr ""
+
+#: elf32-arm.c:10930
+msgid "%B: Unknown mandatory EABI object attribute %d"
+msgstr "%B: невідомий обов’язковий атрибути об’єкта EABI %d"
+
+#: elf32-arm.c:10938
+msgid "Warning: %B: Unknown EABI object attribute %d"
+msgstr "Попередження: %B: невідомий атрибут об’єкта EABI %d"
+
+#: elf32-arm.c:11119
+msgid "error: %B: Unknown CPU architecture"
+msgstr "помилка: %B: невідома архітектура процесора"
+
+#: elf32-arm.c:11157
+msgid "error: %B: Conflicting CPU architectures %d/%d"
+msgstr "помилка: %B: конфлікт архітектур процесорів %d/%d"
+
+#: elf32-arm.c:11206
+msgid "Error: %B has both the current and legacy Tag_MPextension_use attributes"
+msgstr "Помилка: для %B визначено одразу обидва атрибути Tag_MPextension_use, current і legacy"
+
+#: elf32-arm.c:11231
+msgid "error: %B uses VFP register arguments, %B does not"
+msgstr "помилка: у %B використовуються аргументи регістри VFP, а у %B — ні"
+
+#: elf32-arm.c:11376
+msgid "error: %B: unable to merge virtualization attributes with %B"
+msgstr "помилка: %B: об’єднання атрибутів віртуалізації з %B неможливе"
+
+#: elf32-arm.c:11402
+msgid "error: %B: Conflicting architecture profiles %c/%c"
+msgstr "помилка: %B: конфлікт профілів архітектур, %c/%c"
+
+#: elf32-arm.c:11503
+msgid "Warning: %B: Conflicting platform configuration"
+msgstr "Попередження: %B: конфлікт налаштувань платформ"
+
+#: elf32-arm.c:11512
+msgid "error: %B: Conflicting use of R9"
+msgstr "помилка: %B: конфлікт у використанні R9"
+
+#: elf32-arm.c:11524
+msgid "error: %B: SB relative addressing conflicts with use of R9"
+msgstr "помилка: %B: використання відносної адресації SB конфліктує з використанням R9"
+
+#: elf32-arm.c:11537
+msgid "warning: %B uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail"
+msgstr ""
+
+#: elf32-arm.c:11568
+msgid "warning: %B uses %s enums yet the output is to use %s enums; use of enum values across objects may fail"
+msgstr ""
+
+#: elf32-arm.c:11580
+msgid "error: %B uses iWMMXt register arguments, %B does not"
+msgstr "помилка: у %B використовуються аргументи-регістри iWMMXt, а у %B — ні"
+
+#: elf32-arm.c:11597
+msgid "error: fp16 format mismatch between %B and %B"
+msgstr "помилка: розбіжності у визначенні форматування fp16 між %B та %B"
+
+#: elf32-arm.c:11621
+msgid "DIV usage mismatch between %B and %B"
+msgstr "розбіжності у використанні DIV між %B та %B"
+
+#: elf32-arm.c:11640
+msgid "%B has has both the current and legacy Tag_MPextension_use attributes"
+msgstr ""
+
+#. Ignore init flag - it may not be set, despite the flags field
+#. containing valid data.
+#. Ignore init flag - it may not be set, despite the flags field containing valid data.
+#: elf32-arm.c:11728 elf32-bfin.c:5075 elf32-cris.c:4162 elf32-m68hc1x.c:1282
+#: elf32-m68k.c:1235 elf32-score.c:3996 elf32-score7.c:3803 elf32-vax.c:528
+#: elfxx-mips.c:12857
+#, c-format
+msgid "private flags = %lx:"
+msgstr "закриті прапорці = %lx:"
+
+#: elf32-arm.c:11737
+#, c-format
+msgid " [interworking enabled]"
+msgstr " [увімкнено сумісну роботу]"
+
+#: elf32-arm.c:11745
+#, c-format
+msgid " [VFP float format]"
+msgstr " [формат float VFP]"
+
+#: elf32-arm.c:11747
+#, c-format
+msgid " [Maverick float format]"
+msgstr " [формат float Maverick]"
+
+#: elf32-arm.c:11749
+#, c-format
+msgid " [FPA float format]"
+msgstr " [формат float FPA]"
+
+#: elf32-arm.c:11758
+#, c-format
+msgid " [new ABI]"
+msgstr " [новий ABI]"
+
+#: elf32-arm.c:11761
+#, c-format
+msgid " [old ABI]"
+msgstr " [старий ABI]"
+
+#: elf32-arm.c:11764
+#, c-format
+msgid " [software FP]"
+msgstr " [програмна FP]"
+
+#: elf32-arm.c:11773
+#, c-format
+msgid " [Version1 EABI]"
+msgstr " [Версія1 EABI]"
+
+#: elf32-arm.c:11776 elf32-arm.c:11787
+#, c-format
+msgid " [sorted symbol table]"
+msgstr " [впорядкована таблиця символів]"
+
+#: elf32-arm.c:11778 elf32-arm.c:11789
+#, c-format
+msgid " [unsorted symbol table]"
+msgstr " [невпорядкована таблиця символів]"
+
+#: elf32-arm.c:11784
+#, c-format
+msgid " [Version2 EABI]"
+msgstr " [Версія2 EABI]"
+
+#: elf32-arm.c:11792
+#, c-format
+msgid " [dynamic symbols use segment index]"
+msgstr " [динамічні символи використовують індекс сегмента]"
+
+#: elf32-arm.c:11795
+#, c-format
+msgid " [mapping symbols precede others]"
+msgstr " [символи відображення передують іншим]"
+
+#: elf32-arm.c:11802
+#, c-format
+msgid " [Version3 EABI]"
+msgstr " [Версія3 EABI]"
+
+#: elf32-arm.c:11806
+#, c-format
+msgid " [Version4 EABI]"
+msgstr " [Версія4 EABI]"
+
+#: elf32-arm.c:11810
+#, c-format
+msgid " [Version5 EABI]"
+msgstr " [Версія5 EABI]"
+
+#: elf32-arm.c:11813
+#, c-format
+msgid " [BE8]"
+msgstr " [BE8]"
+
+#: elf32-arm.c:11816
+#, c-format
+msgid " [LE8]"
+msgstr " [LE8]"
+
+#: elf32-arm.c:11822
+#, c-format
+msgid " <EABI version unrecognised>"
+msgstr " <нерозпізнана версія EABI>"
+
+#: elf32-arm.c:11829
+#, c-format
+msgid " [relocatable executable]"
+msgstr " [придатний до пересування виконуваний файл]"
+
+#: elf32-arm.c:11832
+#, c-format
+msgid " [has entry point]"
+msgstr " [має вхідну точку]"
+
+#: elf32-arm.c:11837
+#, c-format
+msgid "<Unrecognised flag bits set>"
+msgstr "<Нерозпізнаний набір бітів прапорців>"
+
+#: elf32-arm.c:12135 elf32-i386.c:1323 elf32-s390.c:1000 elf32-tic6x.c:2827
+#: elf32-xtensa.c:1009 elf64-s390.c:960 elf64-x86-64.c:1172 elfxx-sparc.c:1370
+msgid "%B: bad symbol index: %d"
+msgstr "%B: помилковий індекс символу: %d"
+
+#: elf32-arm.c:12283 elf64-x86-64.c:1370 elf64-x86-64.c:1541 elfxx-mips.c:7949
+msgid "%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"
+msgstr ""
+
+#: elf32-arm.c:13412
+#, c-format
+msgid "Errors encountered processing file %s"
+msgstr "Під час обробки файла сталися помилки, %s"
+
+#: elf32-arm.c:14795
+msgid "%B: error: Cortex-A8 erratum stub is allocated in unsafe location"
+msgstr ""
+
+#. There's not much we can do apart from complain if this
+#. happens.
+#: elf32-arm.c:14822
+msgid "%B: error: Cortex-A8 erratum stub out of range (input file too large)"
+msgstr ""
+
+#: elf32-arm.c:14916 elf32-arm.c:14938
+msgid "%B: error: VFP11 veneer out of range"
+msgstr ""
+
+#: elf32-arm.c:15477
+msgid "error: %B is already in final BE8 format"
+msgstr ""
+
+#: elf32-arm.c:15553
+msgid "error: Source object %B has EABI version %d, but target %B has EABI version %d"
+msgstr ""
+
+#: elf32-arm.c:15569
+msgid "error: %B is compiled for APCS-%d, whereas target %B uses APCS-%d"
+msgstr ""
+
+#: elf32-arm.c:15594
+msgid "error: %B uses VFP instructions, whereas %B does not"
+msgstr ""
+
+#: elf32-arm.c:15598
+msgid "error: %B uses FPA instructions, whereas %B does not"
+msgstr ""
+
+#: elf32-arm.c:15608
+msgid "error: %B uses Maverick instructions, whereas %B does not"
+msgstr ""
+
+#: elf32-arm.c:15612
+msgid "error: %B does not use Maverick instructions, whereas %B does"
+msgstr ""
+
+#: elf32-arm.c:15631
+msgid "error: %B uses software FP, whereas %B uses hardware FP"
+msgstr ""
+
+#: elf32-arm.c:15635
+msgid "error: %B uses hardware FP, whereas %B uses software FP"
+msgstr ""
+
+#: elf32-avr.c:1229 elf32-bfin.c:3217 elf32-cris.c:2085 elf32-fr30.c:617
+#: elf32-frv.c:4110 elf32-i860.c:1219 elf32-ip2k.c:1479 elf32-iq2000.c:692
+#: elf32-m32c.c:561 elf32-mep.c:543 elf32-moxie.c:290 elf32-msp430.c:494
+#: elf32-mt.c:399 elf32-openrisc.c:412 elf32-v850.c:2151 elf32-xstormy16.c:949
+#: elf64-mmix.c:1530
+msgid "internal error: dangerous relocation"
+msgstr "внутрішня помилка: небезпечне пересування"
+
+#: elf32-avr.c:2415 elf32-hppa.c:598 elf32-m68hc1x.c:166
+msgid "%B: cannot create stub entry %s"
+msgstr "%B: не вдалося створити шаблонний запис %s"
+
+#: elf32-bfin.c:107 elf32-bfin.c:363
+msgid "relocation should be even number"
+msgstr "пересування має бути вказано парним числом"
+
+#: elf32-bfin.c:1591
+msgid "%B(%A+0x%lx): unresolvable relocation against symbol `%s'"
+msgstr ""
+
+#: elf32-bfin.c:1624 elf32-i386.c:4150 elf32-m68k.c:4233 elf32-s390.c:3062
+#: elf64-s390.c:3037 elf64-x86-64.c:3923
+msgid "%B(%A+0x%lx): reloc against `%s': error %d"
+msgstr "%B(%A+0x%lx): пересування щодо «%s»: помилка %d"
+
+#: elf32-bfin.c:2723
+msgid "%B: relocation at `%A+0x%x' references symbol `%s' with nonzero addend"
+msgstr ""
+
+#: elf32-bfin.c:2737
+msgid "relocation references symbol not defined in the module"
+msgstr "пересування посилається на символ, який не визначено у модулі"
+
+#: elf32-bfin.c:2834
+msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend"
+msgstr ""
+
+#: elf32-bfin.c:2875 elf32-bfin.c:2998
+msgid "cannot emit fixups in read-only section"
+msgstr ""
+
+#: elf32-bfin.c:2906 elf32-bfin.c:3036 elf32-lm32.c:1103 elf32-sh.c:5021
+msgid "cannot emit dynamic relocations in read-only section"
+msgstr ""
+
+#: elf32-bfin.c:2956
+msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"
+msgstr ""
+
+#: elf32-bfin.c:3121
+msgid "relocations between different segments are not supported"
+msgstr "підтримки пересування між різними сегментами не передбачено"
+
+#: elf32-bfin.c:3122
+msgid "warning: relocation references a different segment"
+msgstr "попередження: у пересуванні виявлено посилання на інший сегмент"
+
+#: elf32-bfin.c:4967
+msgid "%B: unsupported relocation type %i"
+msgstr "%B: непідтримуваний тип пересування %i"
+
+#: elf32-bfin.c:5121 elf32-frv.c:6805
+#, c-format
+msgid "%s: cannot link non-fdpic object file into fdpic executable"
+msgstr ""
+
+#: elf32-bfin.c:5125 elf32-frv.c:6809
+#, c-format
+msgid "%s: cannot link fdpic object file into non-fdpic executable"
+msgstr ""
+
+#: elf32-bfin.c:5279
+#, c-format
+msgid "*** check this relocation %s"
+msgstr "*** перевірте це пересування: %s"
+
+#: elf32-cris.c:1172
+msgid "%B, section %A: unresolvable relocation %s against symbol `%s'"
+msgstr ""
+
+#: elf32-cris.c:1234
+msgid "%B, section %A: No PLT nor GOT for relocation %s against symbol `%s'"
+msgstr ""
+
+#: elf32-cris.c:1236
+msgid "%B, section %A: No PLT for relocation %s against symbol `%s'"
+msgstr ""
+
+#: elf32-cris.c:1242 elf32-cris.c:1375 elf32-cris.c:1635 elf32-cris.c:1718
+#: elf32-cris.c:1871 elf32-tic6x.c:2660
+msgid "[whose name is lost]"
+msgstr "[чию назву втрачено]"
+
+#: elf32-cris.c:1361 elf32-tic6x.c:2645
+msgid "%B, section %A: relocation %s with non-zero addend %d against local symbol"
+msgstr ""
+
+#: elf32-cris.c:1369 elf32-cris.c:1712 elf32-cris.c:1865 elf32-tic6x.c:2653
+msgid "%B, section %A: relocation %s with non-zero addend %d against symbol `%s'"
+msgstr ""
+
+#: elf32-cris.c:1395
+msgid "%B, section %A: relocation %s is not allowed for global symbol: `%s'"
+msgstr ""
+
+#: elf32-cris.c:1411
+msgid "%B, section %A: relocation %s with no GOT created"
+msgstr ""
+
+#. We shouldn't get here for GCC-emitted code.
+#: elf32-cris.c:1626
+msgid "%B, section %A: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?"
+msgstr ""
+
+#: elf32-cris.c:1998
+msgid "%B, section %A: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?"
+msgstr ""
+
+#: elf32-cris.c:2051
+msgid "(too many global variables for -fpic: recompile with -fPIC)"
+msgstr ""
+
+#: elf32-cris.c:2058
+msgid "(thread-local data too big for -fpic or -msmall-tls: recompile with -fPIC or -mno-small-tls)"
+msgstr ""
+
+#: elf32-cris.c:3248
+msgid ""
+"%B, section %A:\n"
+"  v10/v32 compatible object %s must not contain a PIC relocation"
+msgstr ""
+
+#: elf32-cris.c:3353
+msgid ""
+"%B, section %A:\n"
+"  relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC"
+msgstr ""
+
+#: elf32-cris.c:3567
+msgid ""
+"%B, section %A:\n"
+"  relocation %s should not be used in a shared object; recompile with -fPIC"
+msgstr ""
+
+#: elf32-cris.c:3992
+msgid ""
+"%B, section `%A', to symbol `%s':\n"
+"  relocation %s should not be used in a shared object; recompile with -fPIC"
+msgstr ""
+
+#: elf32-cris.c:4111
+msgid "Unexpected machine number"
+msgstr "Неочікуваний номер машини"
+
+#: elf32-cris.c:4165
+#, c-format
+msgid " [symbols have a _ prefix]"
+msgstr " [символи містять префікс _]"
+
+#: elf32-cris.c:4168
+#, c-format
+msgid " [v10 and v32]"
+msgstr " [v10 та v32]"
+
+#: elf32-cris.c:4171
+#, c-format
+msgid " [v32]"
+msgstr " [v32]"
+
+#: elf32-cris.c:4216
+msgid "%B: uses _-prefixed symbols, but writing file with non-prefixed symbols"
+msgstr ""
+
+#: elf32-cris.c:4217
+msgid "%B: uses non-prefixed symbols, but writing file with _-prefixed symbols"
+msgstr ""
+
+#: elf32-cris.c:4236
+msgid "%B contains CRIS v32 code, incompatible with previous objects"
+msgstr ""
+
+#: elf32-cris.c:4238
+msgid "%B contains non-CRIS-v32 code, incompatible with previous objects"
+msgstr ""
+
+#: elf32-dlx.c:142
+#, c-format
+msgid "BFD Link Error: branch (PC rel16) to section (%s) not supported"
+msgstr ""
+
+#: elf32-dlx.c:204
+#, c-format
+msgid "BFD Link Error: jump (PC rel26) to section (%s) not supported"
+msgstr ""
+
+#: elf32-frv.c:1509 elf32-frv.c:1658
+msgid "relocation requires zero addend"
+msgstr ""
+
+#: elf32-frv.c:2888
+msgid "%H: relocation to `%s+%v' may have caused the error above\n"
+msgstr ""
+
+#: elf32-frv.c:2902
+msgid "%H: relocation references symbol not defined in the module\n"
+msgstr ""
+
+#: elf32-frv.c:2978
+msgid "%H: R_FRV_GETTLSOFF not applied to a call instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3019
+msgid "%H: R_FRV_GOTTLSDESC12 not applied to an lddi instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3090
+msgid "%H: R_FRV_GOTTLSDESCHI not applied to a sethi instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3127
+msgid "%H: R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3174
+msgid "%H: R_FRV_TLSDESC_RELAX not applied to an ldd instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3258
+msgid "%H: R_FRV_GETTLSOFF_RELAX not applied to a calll instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3312
+msgid "%H: R_FRV_GOTTLSOFF12 not applied to an ldi instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3342
+msgid "%H: R_FRV_GOTTLSOFFHI not applied to a sethi instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3371
+msgid "%H: R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3401
+msgid "%H: R_FRV_TLSOFF_RELAX not applied to an ld instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3446
+msgid "%H: R_FRV_TLSMOFFHI not applied to a sethi instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3473
+msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction\n"
+msgstr ""
+
+#: elf32-frv.c:3594
+msgid "%H: R_FRV_FUNCDESC references dynamic symbol with nonzero addend\n"
+msgstr ""
+
+#: elf32-frv.c:3635 elf32-frv.c:3757
+msgid "%H: cannot emit fixups in read-only section\n"
+msgstr ""
+
+#: elf32-frv.c:3666 elf32-frv.c:3800
+msgid "%H: cannot emit dynamic relocations in read-only section\n"
+msgstr ""
+
+#: elf32-frv.c:3715
+msgid "%H: R_FRV_FUNCDESC_VALUE references dynamic symbol with nonzero addend\n"
+msgstr ""
+
+#: elf32-frv.c:3971
+msgid "%H: reloc against `%s' references a different segment\n"
+msgstr ""
+
+#: elf32-frv.c:4121
+msgid "%H: reloc against `%s': %s\n"
+msgstr "%H: пересування щодо «%s»: %s\n"
+
+#: elf32-frv.c:6397
+msgid "%B: unsupported relocation type %i\n"
+msgstr "%B: непідтримуваний тип пересування %i\n"
+
+#: elf32-frv.c:6719
+#, c-format
+msgid "%s: compiled with %s and linked with modules that use non-pic relocations"
+msgstr ""
+
+#: elf32-frv.c:6772 elf32-iq2000.c:845 elf32-m32c.c:807
+#, c-format
+msgid "%s: compiled with %s and linked with modules compiled with %s"
+msgstr ""
+
+#: elf32-frv.c:6784
+#, c-format
+msgid "%s: uses different unknown e_flags (0x%lx) fields than previous modules (0x%lx)"
+msgstr ""
+
+#: elf32-frv.c:6834 elf32-iq2000.c:882 elf32-m32c.c:843 elf32-mt.c:576
+#: elf32-rx.c:2937
+#, c-format
+msgid "private flags = 0x%lx:"
+msgstr "закриті прапорці = 0x%lx:"
+
+#: elf32-gen.c:69 elf64-gen.c:69
+msgid "%B: Relocations in generic ELF (EM: %d)"
+msgstr ""
+
+#: elf32-hppa.c:850 elf32-hppa.c:3610
+msgid "%B(%A+0x%lx): cannot reach %s, recompile with -ffunction-sections"
+msgstr ""
+
+#: elf32-hppa.c:1284
+msgid "%B: relocation %s can not be used when making a shared object; recompile with -fPIC"
+msgstr ""
+
+#: elf32-hppa.c:2803
+msgid "%B: duplicate export stub %s"
+msgstr ""
+
+#: elf32-hppa.c:3449
+msgid "%B(%A+0x%lx): %s fixup for insn 0x%x is not supported in a non-shared link"
+msgstr ""
+
+#: elf32-hppa.c:4296
+msgid "%B(%A+0x%lx): cannot handle %s for %s"
+msgstr ""
+
+#: elf32-hppa.c:4608
+msgid ".got section not immediately after .plt section"
+msgstr ""
+
+#. Unknown relocation.
+#: elf32-i386.c:372 elf32-m68k.c:383 elf32-ppc.c:1675 elf32-s390.c:379
+#: elf32-tic6x.c:2682 elf64-ppc.c:2285 elf64-s390.c:403 elf64-x86-64.c:243
+msgid "%B: invalid relocation type %d"
+msgstr "%B: некоректний тип пересування %d"
+
+#: elf32-i386.c:1266 elf64-x86-64.c:1116
+msgid "%B: TLS transition from %s to %s against `%s' at 0x%lx in section `%A' failed"
+msgstr ""
+
+#: elf32-i386.c:1411 elf32-i386.c:3090 elf64-x86-64.c:1296 elf64-x86-64.c:2909
+#: elfxx-sparc.c:3077
+msgid "%B: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s"
+msgstr ""
+
+#: elf32-i386.c:1573 elf32-s390.c:1182 elf32-sh.c:6367 elf32-xtensa.c:1182
+#: elf64-s390.c:1151 elfxx-sparc.c:1547
+msgid "%B: `%s' accessed both as normal and thread local symbol"
+msgstr ""
+
+#: elf32-i386.c:2405 elf64-x86-64.c:2320
+msgid "%P: %B: warning: relocation against `%s' in readonly section `%A'.\n"
+msgstr ""
+
+#: elf32-i386.c:2496 elf64-x86-64.c:2407
+msgid "%P: %B: warning: relocation in readonly section `%A'.\n"
+msgstr ""
+
+#: elf32-i386.c:2932
+msgid "%B: unrecognized relocation (0x%x) in section `%A'"
+msgstr ""
+
+#: elf32-i386.c:3339 elf64-x86-64.c:3295
+msgid "hidden symbol"
+msgstr "прихований символ"
+
+#: elf32-i386.c:3342 elf64-x86-64.c:3298
+msgid "internal symbol"
+msgstr "внутрішній символ"
+
+#: elf32-i386.c:3345 elf64-x86-64.c:3301
+msgid "protected symbol"
+msgstr "захищений символ"
+
+#: elf32-i386.c:3348 elf64-x86-64.c:3304
+msgid "symbol"
+msgstr "символ"
+
+#: elf32-i386.c:3353
+msgid "%B: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object"
+msgstr ""
+
+#: elf32-i386.c:3363
+msgid "%B: relocation R_386_GOTOFF against protected function `%s' can not be used when making a shared object"
+msgstr ""
+
+#: elf32-i386.c:4660 elf64-x86-64.c:4378
+#, c-format
+msgid "discarded output section: `%A'"
+msgstr "відкинуто розділ виведення даних: «%A»"
+
+#: elf32-ip2k.c:857 elf32-ip2k.c:863 elf32-ip2k.c:930 elf32-ip2k.c:936
+msgid "ip2k relaxer: switch table without complete matching relocation information."
+msgstr ""
+
+#: elf32-ip2k.c:880 elf32-ip2k.c:963
+msgid "ip2k relaxer: switch table header corrupt."
+msgstr ""
+
+#: elf32-ip2k.c:1292
+#, c-format
+msgid "ip2k linker: missing page instruction at 0x%08lx (dest = 0x%08lx)."
+msgstr ""
+
+#: elf32-ip2k.c:1308
+#, c-format
+msgid "ip2k linker: redundant page instruction at 0x%08lx (dest = 0x%08lx)."
+msgstr ""
+
+#. Only if it's not an unresolved symbol.
+#: elf32-ip2k.c:1475
+msgid "unsupported relocation between data/insn address spaces"
+msgstr "непідтримуване пересування між просторами адрес data та insn"
+
+#: elf32-iq2000.c:858 elf32-m32c.c:819
+#, c-format
+msgid "%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"
+msgstr "%s: використовуються інші поля e_flags (0x%lx) ніж у попередніх модулях (0x%lx)"
+
+#: elf32-lm32.c:706
+msgid "global pointer relative relocation when _gp not defined"
+msgstr "відносне перенесення загального вказівника без визначення _gp"
+
+#: elf32-lm32.c:761
+msgid "global pointer relative address out of range"
+msgstr "відносна адреса загального вказівника лежить за межами дозволеного діапазону"
+
+#: elf32-lm32.c:1057
+msgid "internal error: addend should be zero for R_LM32_16_GOT"
+msgstr "внутрішня помилка: доданок має бути нульовим для R_LM32_16_GOT"
+
+#: elf32-m32r.c:1453
+msgid "SDA relocation when _SDA_BASE_ not defined"
+msgstr "перенесення SDA без визначення _SDA_BASE_"
+
+#: elf32-m32r.c:3048
+msgid "%B: The target (%s) of an %s relocation is in the wrong section (%A)"
+msgstr ""
+
+#: elf32-m32r.c:3576
+msgid "%B: Instruction set mismatch with previous modules"
+msgstr "%B: невідповідність набору команду цього модуля наборам команд попередніх модулів"
+
+#: elf32-m32r.c:3597
+#, c-format
+msgid "private flags = %lx"
+msgstr "закриті прапорці = %lx"
+
+#: elf32-m32r.c:3602
+#, c-format
+msgid ": m32r instructions"
+msgstr ": команди m32r"
+
+#: elf32-m32r.c:3603
+#, c-format
+msgid ": m32rx instructions"
+msgstr ": команди m32rx"
+
+#: elf32-m32r.c:3604
+#, c-format
+msgid ": m32r2 instructions"
+msgstr ": команди m32r2"
+
+#: elf32-m68hc1x.c:1050
+#, c-format
+msgid "Reference to the far symbol `%s' using a wrong relocation may result in incorrect execution"
+msgstr ""
+
+#: elf32-m68hc1x.c:1073
+#, c-format
+msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)"
+msgstr ""
+
+#: elf32-m68hc1x.c:1092
+#, c-format
+msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx"
+msgstr ""
+
+#: elf32-m68hc1x.c:1225
+msgid "%B: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers"
+msgstr ""
+
+#: elf32-m68hc1x.c:1232
+msgid "%B: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double"
+msgstr ""
+
+#: elf32-m68hc1x.c:1241
+msgid "%B: linking files compiled for HCS12 with others compiled for HC12"
+msgstr ""
+
+#: elf32-m68hc1x.c:1257 elf32-ppc.c:4214 elf64-sparc.c:705 elfxx-mips.c:12719
+msgid "%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"
+msgstr ""
+
+#: elf32-m68hc1x.c:1285
+#, c-format
+msgid "[abi=32-bit int, "
+msgstr "[abi=32-бітове ціле, "
+
+#: elf32-m68hc1x.c:1287
+#, c-format
+msgid "[abi=16-bit int, "
+msgstr "[abi=16-бітове ціле, "
+
+#: elf32-m68hc1x.c:1290
+#, c-format
+msgid "64-bit double, "
+msgstr "64-бітове double, "
+
+#: elf32-m68hc1x.c:1292
+#, c-format
+msgid "32-bit double, "
+msgstr "32-бітове double, "
+
+#: elf32-m68hc1x.c:1295
+#, c-format
+msgid "cpu=HC11]"
+msgstr "процесор=HC11]"
+
+#: elf32-m68hc1x.c:1297
+#, c-format
+msgid "cpu=HCS12]"
+msgstr "процесор=HCS12]"
+
+#: elf32-m68hc1x.c:1299
+#, c-format
+msgid "cpu=HC12]"
+msgstr "процесор=HC12]"
+
+#: elf32-m68hc1x.c:1302
+#, c-format
+msgid " [memory=bank-model]"
+msgstr ""
+
+#: elf32-m68hc1x.c:1304
+#, c-format
+msgid " [memory=flat]"
+msgstr ""
+
+#: elf32-m68k.c:1250 elf32-m68k.c:1251 vms-alpha.c:7311 vms-alpha.c:7326
+msgid "unknown"
+msgstr "невідомо"
+
+#: elf32-m68k.c:1714
+msgid "%B: GOT overflow: Number of relocations with 8-bit offset > %d"
+msgstr ""
+
+#: elf32-m68k.c:1720
+msgid "%B: GOT overflow: Number of relocations with 8- or 16-bit offset > %d"
+msgstr ""
+
+#: elf32-m68k.c:3959
+msgid "%B(%A+0x%lx): R_68K_TLS_LE32 relocation not permitted in shared object"
+msgstr ""
+
+#: elf32-mcore.c:99 elf32-mcore.c:442
+msgid "%B: Relocation %s (%d) is not currently supported.\n"
+msgstr ""
+
+#: elf32-mcore.c:428
+msgid "%B: Unknown relocation type %d\n"
+msgstr "%B: невідомий тип пересування %d\n"
+
+#. Pacify gcc -Wall.
+#: elf32-mep.c:157
+#, c-format
+msgid "mep: no reloc for code %d"
+msgstr "mep: немає пересування для коду %d"
+
+#: elf32-mep.c:163
+#, c-format
+msgid "MeP: howto %d has type %d"
+msgstr "MeP: howto %d належить до типу %d"
+
+#: elf32-mep.c:648
+msgid "%B and %B are for different cores"
+msgstr "%B і %B призначено для різних ядер"
+
+#: elf32-mep.c:665
+msgid "%B and %B are for different configurations"
+msgstr "%B і %B призначено для різних конфігурацій"
+
+#: elf32-mep.c:702
+#, c-format
+msgid "private flags = 0x%lx"
+msgstr "закриті прапорці = 0x%lx"
+
+#: elf32-microblaze.c:742
+#, c-format
+msgid "%s: unknown relocation type %d"
+msgstr "%s: невідомий тип пересування %d"
+
+#: elf32-microblaze.c:867 elf32-microblaze.c:912
+#, c-format
+msgid "%s: The target (%s) of an %s relocation is in the wrong section (%s)"
+msgstr ""
+
+#: elf32-microblaze.c:1155 elfxx-sparc.c:3451
+msgid "%B: probably compiled without -fPIC?"
+msgstr "%B: ймовірно зібрано без -fPIC?"
+
+#: elf32-microblaze.c:2074
+msgid "%B: bad relocation section name `%s'"
+msgstr "%B: помилкова назва розділу для пересування «%s»"
+
+#: elf32-mips.c:1045 elf64-mips.c:2084 elfn32-mips.c:1888
+msgid "literal relocation occurs for an external symbol"
+msgstr ""
+
+#: elf32-mips.c:1085 elf32-score.c:569 elf32-score7.c:469 elf64-mips.c:2127
+#: elfn32-mips.c:1929
+msgid "32bits gp relative relocation occurs for an external symbol"
+msgstr ""
+
+#: elf32-ppc.c:1740
+#, c-format
+msgid "generic linker can't handle %s"
+msgstr "типовий компонувальник не може обробляти %s"
+
+#: elf32-ppc.c:2183
+msgid "corrupt %s section in %B"
+msgstr "пошкоджений розділ %s у %B"
+
+#: elf32-ppc.c:2202
+msgid "unable to read in %s section from %B"
+msgstr "читання у розділі %s неможливе з %B"
+
+#: elf32-ppc.c:2243
+msgid "warning: unable to set size of %s section in %B"
+msgstr "попередження: не вдалося встановити для розміру розділу %s значення %B"
+
+#: elf32-ppc.c:2293
+msgid "failed to allocate space for new APUinfo section."
+msgstr "не вдалося розмістити новий розділ APUinfo."
+
+#: elf32-ppc.c:2312
+msgid "failed to compute new APUinfo section."
+msgstr "не вдалося обчислити новий розділ APUinfo."
+
+#: elf32-ppc.c:2315
+msgid "failed to install new APUinfo section."
+msgstr "не вдалося встановити новий розділ APUinfo."
+
+#: elf32-ppc.c:3343
+msgid "%B: relocation %s cannot be used when making a shared object"
+msgstr ""
+
+#. It does not make sense to have a procedure linkage
+#. table entry for a local symbol.
+#: elf32-ppc.c:3687
+msgid "%H: %s reloc against local symbol\n"
+msgstr "%H: %s пересування за локальним символом\n"
+
+#: elf32-ppc.c:4026 elf32-ppc.c:4041 elfxx-mips.c:12423 elfxx-mips.c:12449
+#: elfxx-mips.c:12471 elfxx-mips.c:12497
+msgid "Warning: %B uses hard float, %B uses soft float"
+msgstr ""
+
+#: elf32-ppc.c:4029 elf32-ppc.c:4033
+msgid "Warning: %B uses double-precision hard float, %B uses single-precision hard float"
+msgstr ""
+
+#: elf32-ppc.c:4037
+msgid "Warning: %B uses soft float, %B uses single-precision hard float"
+msgstr ""
+
+#: elf32-ppc.c:4044 elf32-ppc.c:4048 elfxx-mips.c:12403 elfxx-mips.c:12407
+msgid "Warning: %B uses unknown floating point ABI %d"
+msgstr ""
+
+#: elf32-ppc.c:4090 elf32-ppc.c:4094
+msgid "Warning: %B uses unknown vector ABI %d"
+msgstr "Попередження: %B використовує невідомий векторний ABI %d"
+
+#: elf32-ppc.c:4098
+msgid "Warning: %B uses vector ABI \"%s\", %B uses \"%s\""
+msgstr ""
+
+#: elf32-ppc.c:4115 elf32-ppc.c:4118
+msgid "Warning: %B uses r3/r4 for small structure returns, %B uses memory"
+msgstr ""
+
+#: elf32-ppc.c:4121 elf32-ppc.c:4125
+msgid "Warning: %B uses unknown small structure return convention %d"
+msgstr ""
+
+#: elf32-ppc.c:4179
+msgid "%B: compiled with -mrelocatable and linked with modules compiled normally"
+msgstr ""
+
+#: elf32-ppc.c:4187
+msgid "%B: compiled normally and linked with modules compiled with -mrelocatable"
+msgstr ""
+
+#: elf32-ppc.c:4275
+msgid "Using bss-plt due to %B"
+msgstr ""
+
+#. Uh oh, we didn't find the expected call.  We
+#. could just mark this symbol to exclude it
+#. from tls optimization but it's safer to skip
+#. the entire optimization.
+#: elf32-ppc.c:4771 elf64-ppc.c:7778
+msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n"
+msgstr ""
+
+#: elf32-ppc.c:5006 elf64-ppc.c:6494
+#, c-format
+msgid "dynamic variable `%s' is zero size\n"
+msgstr "динамічна змінна «%s» має нульовий розмір\n"
+
+#: elf32-ppc.c:7204 elf64-ppc.c:12431
+msgid "%B: unknown relocation type %d for symbol %s\n"
+msgstr "%B: невідомий тип пересування %d для символу %s\n"
+
+#: elf32-ppc.c:7465
+msgid "%H: non-zero addend on %s reloc against `%s'\n"
+msgstr ""
+
+#: elf32-ppc.c:7661 elf64-ppc.c:12936
+msgid "%H: relocation %s for indirect function %s unsupported\n"
+msgstr ""
+
+#: elf32-ppc.c:7889 elf32-ppc.c:7919 elf32-ppc.c:7966
+msgid "%B: the target (%s) of a %s relocation is in the wrong output section (%s)\n"
+msgstr ""
+
+#: elf32-ppc.c:8038
+msgid "%B: relocation %s is not yet supported for symbol %s\n"
+msgstr ""
+
+#: elf32-ppc.c:8097 elf64-ppc.c:13237
+msgid "%H: unresolvable %s relocation against symbol `%s'\n"
+msgstr ""
+
+#: elf32-ppc.c:8144 elf64-ppc.c:13282
+msgid "%H: %s reloc against `%s': error %d\n"
+msgstr ""
+
+#: elf32-ppc.c:8635
+#, c-format
+msgid "%s not defined in linker created %s\n"
+msgstr ""
+
+#: elf32-rx.c:553
+msgid "%B:%A: Warning: deprecated Red Hat reloc "
+msgstr "%B:%A: попередження: застарілий формат пересування Red Hat "
+
+#: elf32-rx.c:1095
+msgid "Warning: RX_SYM reloc with an unknown symbol"
+msgstr ""
+
+#: elf32-rx.c:1260
+msgid "%B(%A): error: call to undefined function '%s'"
+msgstr ""
+
+#: elf32-rx.c:1274
+msgid "%B(%A): warning: unaligned access to symbol '%s' in the small data area"
+msgstr ""
+
+#: elf32-rx.c:1278
+msgid "%B(%A): internal error: out of range error"
+msgstr "%B(%A): внутрішня помилка: вихід за межі діапазону"
+
+#: elf32-rx.c:1282
+msgid "%B(%A): internal error: unsupported relocation error"
+msgstr "%B(%A): внутрішня помилка: непідтримувана помилка пересування"
+
+#: elf32-rx.c:1286
+msgid "%B(%A): internal error: dangerous relocation"
+msgstr "%B(%A): внутрішня помилка: небезпечне пересування"
+
+#: elf32-rx.c:1290
+msgid "%B(%A): internal error: unknown error"
+msgstr "%B(%A): внутрішня помилка: невідома помилка"
+
+#: elf32-rx.c:2940
+#, c-format
+msgid " [64-bit doubles]"
+msgstr " [64-бітові double]"
+
+#: elf32-rx.c:2942
+#, c-format
+msgid " [dsp]"
+msgstr " [dsp]"
+
+#: elf32-s390.c:2209 elf64-s390.c:2196
+msgid "%B(%A+0x%lx): invalid instruction for TLS relocation %s"
+msgstr ""
+
+#: elf32-score.c:1522 elf32-score7.c:1382 elfxx-mips.c:3324
+msgid "not enough GOT space for local GOT entries"
+msgstr ""
+
+#: elf32-score.c:2744
+msgid "address not word align"
+msgstr "адресу не вирівняно за межею слова"
+
+#: elf32-score.c:2829 elf32-score7.c:2634
+#, c-format
+msgid "%s: Malformed reloc detected for section %s"
+msgstr "%s: для розділу %s виявлено помилку у форматуванні перенесення"
+
+#: elf32-score.c:2880 elf32-score7.c:2685
+msgid "%B: CALL15 reloc at 0x%lx not against global symbol"
+msgstr ""
+
+#: elf32-score.c:3999 elf32-score7.c:3806
+#, c-format
+msgid " [pic]"
+msgstr " [pic]"
+
+#: elf32-score.c:4003 elf32-score7.c:3810
+#, c-format
+msgid " [fix dep]"
+msgstr ""
+
+#: elf32-score.c:4045 elf32-score7.c:3852
+msgid "%B: warning: linking PIC files with non-PIC files"
+msgstr ""
+
+#: elf32-sh-symbian.c:130
+msgid "%B: IMPORT AS directive for %s conceals previous IMPORT AS"
+msgstr ""
+
+#: elf32-sh-symbian.c:383
+msgid "%B: Unrecognised .directive command: %s"
+msgstr "%B: нерозпізнана команда .directive: %s"
+
+#: elf32-sh-symbian.c:504
+msgid "%B: Failed to add renamed symbol %s"
+msgstr "%B: не вдалося додати перейменований символ %s"
+
+#: elf32-sh.c:568
+msgid "%B: 0x%lx: warning: bad R_SH_USES offset"
+msgstr "%B: 0x%lx: попередження: помилковий відступ R_SH_USES"
+
+#: elf32-sh.c:580
+msgid "%B: 0x%lx: warning: R_SH_USES points to unrecognized insn 0x%x"
+msgstr ""
+
+#: elf32-sh.c:597
+msgid "%B: 0x%lx: warning: bad R_SH_USES load offset"
+msgstr "%B: 0x%lx: попередження: помилковий відступ завантаження R_SH_USES"
+
+#: elf32-sh.c:612
+msgid "%B: 0x%lx: warning: could not find expected reloc"
+msgstr "%B: 0x%lx: попередження: не вдалося знайти очікуване пересування"
+
+#: elf32-sh.c:640
+msgid "%B: 0x%lx: warning: symbol in unexpected section"
+msgstr "%B: 0x%lx: попередження: символ у неочікуваному розділі"
+
+#: elf32-sh.c:766
+msgid "%B: 0x%lx: warning: could not find expected COUNT reloc"
+msgstr "%B: 0x%lx: попередження: не вдалося знайти очікуване пересування COUNT"
+
+#: elf32-sh.c:775
+msgid "%B: 0x%lx: warning: bad count"
+msgstr "%B: 0x%lx: попередження: помилковий лічильник"
+
+#: elf32-sh.c:1179 elf32-sh.c:1549
+msgid "%B: 0x%lx: fatal: reloc overflow while relaxing"
+msgstr ""
+
+#: elf32-sh.c:4057 elf64-sh64.c:1514
+msgid "Unexpected STO_SH5_ISA32 on local symbol is not handled"
+msgstr ""
+
+#: elf32-sh.c:4304
+msgid "%B: 0x%lx: fatal: unaligned branch target for relax-support relocation"
+msgstr ""
+
+#: elf32-sh.c:4337 elf32-sh.c:4352
+msgid "%B: 0x%lx: fatal: unaligned %s relocation 0x%lx"
+msgstr "%B: 0x%lx: критична помилка: невирівняне пересування %s, 0x%lx"
+
+#: elf32-sh.c:4366
+msgid "%B: 0x%lx: fatal: R_SH_PSHA relocation %d not in range -32..32"
+msgstr ""
+
+#: elf32-sh.c:4380
+msgid "%B: 0x%lx: fatal: R_SH_PSHL relocation %d not in range -32..32"
+msgstr ""
+
+#: elf32-sh.c:4524 elf32-sh.c:4994
+msgid "%B(%A+0x%lx): cannot emit fixup to `%s' in read-only section"
+msgstr ""
+
+#: elf32-sh.c:5101
+msgid "%B(%A+0x%lx): %s relocation against external symbol \"%s\""
+msgstr "%B(%A+0x%lx): пересування %s за зовнішнім символом «%s»"
+
+#: elf32-sh.c:5574
+#, c-format
+msgid "%X%C: relocation to \"%s\" references a different segment\n"
+msgstr "%X%C: пересування за «%s» посилається на інший сегмент\n"
+
+#: elf32-sh.c:5580
+#, c-format
+msgid "%C: warning: relocation to \"%s\" references a different segment\n"
+msgstr "%C: попередження: пересування за «%s» посилається на інший сегмент\n"
+
+#: elf32-sh.c:6358 elf32-sh.c:6441
+msgid "%B: `%s' accessed both as normal and FDPIC symbol"
+msgstr ""
+
+#: elf32-sh.c:6363 elf32-sh.c:6445
+msgid "%B: `%s' accessed both as FDPIC and thread local symbol"
+msgstr ""
+
+#: elf32-sh.c:6393
+msgid "%B: Function descriptor relocation with non-zero addend"
+msgstr ""
+
+#: elf32-sh.c:6629 elf64-alpha.c:4648
+msgid "%B: TLS local exec code cannot be linked into shared objects"
+msgstr ""
+
+#: elf32-sh64.c:223 elf64-sh64.c:2314
+#, c-format
+msgid "%s: compiled as 32-bit object and %s is 64-bit"
+msgstr "%s: зібрано як 32- бітовий об’єкт, а %s є 64-бітовим"
+
+#: elf32-sh64.c:226 elf64-sh64.c:2317
+#, c-format
+msgid "%s: compiled as 64-bit object and %s is 32-bit"
+msgstr "%s: зібрано як 64-бітовий об’єкт, а %s є 32-бітовим"
+
+#: elf32-sh64.c:228 elf64-sh64.c:2319
+#, c-format
+msgid "%s: object size does not match that of target %s"
+msgstr "%s: розмір об’єкта не збігається з розміром призначення %s"
+
+#: elf32-sh64.c:451 elf64-sh64.c:2833
+#, c-format
+msgid "%s: encountered datalabel symbol in input"
+msgstr ""
+
+#: elf32-sh64.c:528
+msgid "PTB mismatch: a SHmedia address (bit 0 == 1)"
+msgstr ""
+
+#: elf32-sh64.c:531
+msgid "PTA mismatch: a SHcompact address (bit 0 == 0)"
+msgstr ""
+
+#: elf32-sh64.c:549
+#, c-format
+msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16"
+msgstr ""
+
+#: elf32-sh64.c:598
+msgid "%B: error: unaligned relocation type %d at %08x reloc %p\n"
+msgstr ""
+
+#: elf32-sh64.c:674
+#, c-format
+msgid "%s: could not write out added .cranges entries"
+msgstr ""
+
+#: elf32-sh64.c:734
+#, c-format
+msgid "%s: could not write out sorted .cranges entries"
+msgstr "%s: не вдалося виконати запис впорядкованих записів .cranges"
+
+#: elf32-sparc.c:89
+msgid "%B: compiled for a 64 bit system and target is 32 bit"
+msgstr "%B: зібрано для 64-бітової системи, системою ж призначення є 32-бітова"
+
+#: elf32-sparc.c:102
+msgid "%B: linking little endian files with big endian files"
+msgstr "%B: компонування файлів зі зворотним порядком байтів з файлами з прямим порядком байтів"
+
+#: elf32-spu.c:719
+msgid "%X%P: overlay section %A does not start on a cache line.\n"
+msgstr ""
+
+#: elf32-spu.c:727
+msgid "%X%P: overlay section %A is larger than a cache line.\n"
+msgstr ""
+
+#: elf32-spu.c:747
+msgid "%X%P: overlay section %A is not in cache area.\n"
+msgstr ""
+
+#: elf32-spu.c:787
+msgid "%X%P: overlay sections %A and %A do not start at the same address.\n"
+msgstr ""
+
+#: elf32-spu.c:1011
+msgid "warning: call to non-function symbol %s defined in %B"
+msgstr ""
+
+#: elf32-spu.c:1361
+msgid "%A:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n"
+msgstr ""
+
+#: elf32-spu.c:1880
+msgid "%B is not allowed to define %s"
+msgstr "%B не може визначати %s"
+
+#: elf32-spu.c:1888
+#, c-format
+msgid "you are not allowed to define %s in a script"
+msgstr "не можна визначати %s у скрипті"
+
+#: elf32-spu.c:1922
+#, c-format
+msgid "%s in overlay section"
+msgstr ""
+
+#: elf32-spu.c:1951
+msgid "overlay stub relocation overflow"
+msgstr ""
+
+#: elf32-spu.c:1960
+msgid "stubs don't match calculated size"
+msgstr ""
+
+#: elf32-spu.c:2542
+#, c-format
+msgid "warning: %s overlaps %s\n"
+msgstr ""
+
+#: elf32-spu.c:2558
+#, c-format
+msgid "warning: %s exceeds section size\n"
+msgstr ""
+
+#: elf32-spu.c:2589
+msgid "%A:0x%v not found in function table\n"
+msgstr "%A:0x%v не знайдено у таблиці функцій\n"
+
+#: elf32-spu.c:2729
+msgid "%B(%A+0x%v): call to non-code section %B(%A), analysis incomplete\n"
+msgstr "%B(%A+0x%v): виклик розділу, який не містить код, %B(%A), аналіз є неповним\n"
+
+#: elf32-spu.c:3297
+#, c-format
+msgid "Stack analysis will ignore the call from %s to %s\n"
+msgstr "Під час аналізу стека буде проігноровано виклик з %s до %s\n"
+
+#: elf32-spu.c:3988
+msgid "  %s: 0x%v\n"
+msgstr "  %s: 0x%v\n"
+
+#: elf32-spu.c:3989
+msgid "%s: 0x%v 0x%v\n"
+msgstr "%s: 0x%v 0x%v\n"
+
+#: elf32-spu.c:3994
+msgid "  calls:\n"
+msgstr "  виклики:\n"
+
+#: elf32-spu.c:4002
+#, c-format
+msgid "   %s%s %s\n"
+msgstr "   %s%s %s\n"
+
+#: elf32-spu.c:4307
+#, c-format
+msgid "%s duplicated in %s\n"
+msgstr "%s повторюється у %s\n"
+
+#: elf32-spu.c:4311
+#, c-format
+msgid "%s duplicated\n"
+msgstr "%s дубльовано\n"
+
+#: elf32-spu.c:4318
+msgid "sorry, no support for duplicate object files in auto-overlay script\n"
+msgstr ""
+
+#: elf32-spu.c:4359
+msgid "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store\n"
+msgstr ""
+
+#: elf32-spu.c:4514
+msgid "%B:%A%s exceeds overlay size\n"
+msgstr ""
+
+#: elf32-spu.c:4676
+msgid "Stack size for call graph root nodes.\n"
+msgstr ""
+
+#: elf32-spu.c:4677
+msgid ""
+"\n"
+"Stack size for functions.  Annotations: '*' max stack, 't' tail call\n"
+msgstr ""
+
+#: elf32-spu.c:4687
+msgid "Maximum stack required is 0x%v\n"
+msgstr "Максимальний потрібний розмір стека — 0x%v\n"
+
+#: elf32-spu.c:4778
+msgid "fatal error while creating .fixup"
+msgstr "критична помилка під час спроби створення .fixup"
+
+#: elf32-spu.c:5006
+msgid "%B(%s+0x%lx): unresolvable %s relocation against symbol `%s'"
+msgstr "%B(%s+0x%lx): нерозв’язне пересування %s щодо символу «%s»"
+
+#: elf32-tic6x.c:1602
+msgid "warning: generating a shared library containing non-PIC code"
+msgstr "попередження: створюється бібліотека спільного використання, яка містить код, несумісний з PIC"
+
+#: elf32-tic6x.c:1607
+msgid "warning: generating a shared library containing non-PID code"
+msgstr ""
+
+#: elf32-tic6x.c:2539
+msgid "%B: SB-relative relocation but __c6xabi_DSBT_BASE not defined"
+msgstr ""
+
+#: elf32-tic6x.c:2759
+msgid "dangerous relocation"
+msgstr "небезпечне пересування"
+
+#: elf32-tic6x.c:3740
+msgid "%B: error: unknown mandatory EABI object attribute %d"
+msgstr ""
+
+#: elf32-tic6x.c:3748
+msgid "%B: warning: unknown EABI object attribute %d"
+msgstr ""
+
+#: elf32-tic6x.c:3860 elf32-tic6x.c:3868
+msgid "error: %B requires more stack alignment than %B preserves"
+msgstr ""
+
+#: elf32-tic6x.c:3878 elf32-tic6x.c:3887
+msgid "error: unknown Tag_ABI_array_object_alignment value in %B"
+msgstr ""
+
+#: elf32-tic6x.c:3896 elf32-tic6x.c:3905
+msgid "error: unknown Tag_ABI_array_object_align_expected value in %B"
+msgstr ""
+
+#: elf32-tic6x.c:3913 elf32-tic6x.c:3920
+msgid "error: %B requires more array alignment than %B preserves"
+msgstr ""
+
+#: elf32-tic6x.c:3942
+msgid "warning: %B and %B differ in wchar_t size"
+msgstr ""
+
+#: elf32-tic6x.c:3960
+msgid "warning: %B and %B differ in whether code is compiled for DSBT"
+msgstr ""
+
+#: elf32-v850.c:173
+#, c-format
+msgid "Variable `%s' cannot occupy in multiple small data regions"
+msgstr ""
+
+#: elf32-v850.c:176
+#, c-format
+msgid "Variable `%s' can only be in one of the small, zero, and tiny data regions"
+msgstr ""
+
+#: elf32-v850.c:179
+#, c-format
+msgid "Variable `%s' cannot be in both small and zero data regions simultaneously"
+msgstr ""
+
+#: elf32-v850.c:182
+#, c-format
+msgid "Variable `%s' cannot be in both small and tiny data regions simultaneously"
+msgstr ""
+
+#: elf32-v850.c:185
+#, c-format
+msgid "Variable `%s' cannot be in both zero and tiny data regions simultaneously"
+msgstr ""
+
+#: elf32-v850.c:483
+msgid "FAILED to find previous HI16 reloc"
+msgstr "НЕ ВДАЛОСЯ знайти попереднє пересування HI16"
+
+#: elf32-v850.c:2155
+msgid "could not locate special linker symbol __gp"
+msgstr "не вдалося знайти спеціальний символ компонувальника __gp"
+
+#: elf32-v850.c:2159
+msgid "could not locate special linker symbol __ep"
+msgstr "не вдалося знайти спеціальний символ компонувальника __ep"
+
+#: elf32-v850.c:2163
+msgid "could not locate special linker symbol __ctbp"
+msgstr "не вдалося знайти спеціальний символ компонувальника __ctbp"
+
+#: elf32-v850.c:2341
+msgid "%B: Architecture mismatch with previous modules"
+msgstr "%B: невідповідність архітектур з попередніми модулями"
+
+#. xgettext:c-format.
+#: elf32-v850.c:2360
+#, c-format
+msgid "private flags = %lx: "
+msgstr "закриті прапорці = %lx: "
+
+#: elf32-v850.c:2365
+#, c-format
+msgid "v850 architecture"
+msgstr "архітектура v850"
+
+#: elf32-v850.c:2366
+#, c-format
+msgid "v850e architecture"
+msgstr "архітектура v850e"
+
+#: elf32-v850.c:2367
+#, c-format
+msgid "v850e1 architecture"
+msgstr "архітектура v850e1"
+
+#: elf32-v850.c:2368
+#, c-format
+msgid "v850e2 architecture"
+msgstr "архітектура v850e2"
+
+#: elf32-v850.c:2369
+#, c-format
+msgid "v850e2v3 architecture"
+msgstr "архітектура v850e2v3"
+
+#: elf32-vax.c:531
+#, c-format
+msgid " [nonpic]"
+msgstr ""
+
+#: elf32-vax.c:534
+#, c-format
+msgid " [d-float]"
+msgstr ""
+
+#: elf32-vax.c:537
+#, c-format
+msgid " [g-float]"
+msgstr ""
+
+#: elf32-vax.c:654
+#, c-format
+msgid "%s: warning: GOT addend of %ld to `%s' does not match previous GOT addend of %ld"
+msgstr ""
+
+#: elf32-vax.c:1587
+#, c-format
+msgid "%s: warning: PLT addend of %d to `%s' from %s section ignored"
+msgstr ""
+
+#: elf32-vax.c:1714
+#, c-format
+msgid "%s: warning: %s relocation against symbol `%s' from %s section"
+msgstr ""
+
+#: elf32-vax.c:1720
+#, c-format
+msgid "%s: warning: %s relocation to 0x%x from %s section"
+msgstr ""
+
+#: elf32-xstormy16.c:451 elf32-ia64.c:2342 elf64-ia64.c:2342
+msgid "non-zero addend in @fptr reloc"
+msgstr ""
+
+#: elf32-xtensa.c:918
+msgid "%B(%A): invalid property table"
+msgstr ""
+
+#: elf32-xtensa.c:2780
+msgid "%B(%A+0x%lx): relocation offset out of range (size=0x%x)"
+msgstr ""
+
+#: elf32-xtensa.c:2859 elf32-xtensa.c:2980
+msgid "dynamic relocation in read-only section"
+msgstr ""
+
+#: elf32-xtensa.c:2956
+msgid "TLS relocation invalid without dynamic sections"
+msgstr ""
+
+#: elf32-xtensa.c:3173
+msgid "internal inconsistency in size of .got.loc section"
+msgstr ""
+
+#: elf32-xtensa.c:3486
+msgid "%B: incompatible machine type. Output is 0x%x. Input is 0x%x"
+msgstr ""
+
+#: elf32-xtensa.c:4715 elf32-xtensa.c:4723
+msgid "Attempt to convert L32R/CALLX to CALL failed"
+msgstr ""
+
+#: elf32-xtensa.c:6333 elf32-xtensa.c:6409 elf32-xtensa.c:7525
+msgid "%B(%A+0x%lx): could not decode instruction; possible configuration mismatch"
+msgstr ""
+
+#: elf32-xtensa.c:7265
+msgid "%B(%A+0x%lx): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch"
+msgstr ""
+
+#: elf32-xtensa.c:9024
+msgid "invalid relocation address"
+msgstr ""
+
+#: elf32-xtensa.c:9073
+msgid "overflow after relaxation"
+msgstr ""
+
+#: elf32-xtensa.c:10205
+msgid "%B(%A+0x%lx): unexpected fix for %s relocation"
+msgstr ""
+
+#: elf64-alpha.c:460
+msgid "GPDISP relocation did not find ldah and lda instructions"
+msgstr ""
+
+#: elf64-alpha.c:2495
+msgid "%B: .got subsegment exceeds 64K (size %d)"
+msgstr ""
+
+#: elf64-alpha.c:4392 elf64-alpha.c:4404
+msgid "%B: gp-relative relocation against dynamic symbol %s"
+msgstr ""
+
+#: elf64-alpha.c:4430 elf64-alpha.c:4565
+msgid "%B: pc-relative relocation against dynamic symbol %s"
+msgstr ""
+
+#: elf64-alpha.c:4458
+msgid "%B: change in gp: BRSGP %s"
+msgstr ""
+
+#: elf64-alpha.c:4483
+msgid "<unknown>"
+msgstr ""
+
+#: elf64-alpha.c:4488
+msgid "%B: !samegp reloc against symbol without .prologue: %s"
+msgstr ""
+
+#: elf64-alpha.c:4540
+msgid "%B: unhandled dynamic relocation against %s"
+msgstr ""
+
+#: elf64-alpha.c:4572
+msgid "%B: pc-relative relocation against undefined weak symbol %s"
+msgstr ""
+
+#: elf64-alpha.c:4632
+msgid "%B: dtp-relative relocation against dynamic symbol %s"
+msgstr ""
+
+#: elf64-alpha.c:4655
+msgid "%B: tp-relative relocation against dynamic symbol %s"
+msgstr ""
+
+#: elf64-hppa.c:2094
+#, c-format
+msgid "stub entry for %s cannot load .plt, dp offset = %ld"
+msgstr ""
+
+#: elf64-hppa.c:3292
+msgid "%B(%A+0x%lx): cannot reach %s"
+msgstr ""
+
+#: elf64-mmix.c:1177
+#, c-format
+msgid ""
+"%s: Internal inconsistency error for value for\n"
+" linker-allocated global register: linked: 0x%lx%08lx != relaxed: 0x%lx%08lx\n"
+msgstr ""
+
+#: elf64-mmix.c:1607
+#, c-format
+msgid "%s: base-plus-offset relocation against register symbol: (unknown) in %s"
+msgstr ""
+
+#: elf64-mmix.c:1612
+#, c-format
+msgid "%s: base-plus-offset relocation against register symbol: %s in %s"
+msgstr ""
+
+#: elf64-mmix.c:1656
+#, c-format
+msgid "%s: register relocation against non-register symbol: (unknown) in %s"
+msgstr ""
+
+#: elf64-mmix.c:1661
+#, c-format
+msgid "%s: register relocation against non-register symbol: %s in %s"
+msgstr ""
+
+#: elf64-mmix.c:1698
+#, c-format
+msgid "%s: directive LOCAL valid only with a register or absolute value"
+msgstr ""
+
+#: elf64-mmix.c:1726
+#, c-format
+msgid "%s: LOCAL directive: Register $%ld is not a local register.  First global register is $%ld."
+msgstr ""
+
+#: elf64-mmix.c:2190
+#, c-format
+msgid "%s: Error: multiple definition of `%s'; start of %s is set in a earlier linked file\n"
+msgstr ""
+
+#: elf64-mmix.c:2248
+msgid "Register section has contents\n"
+msgstr ""
+
+#: elf64-mmix.c:2440
+#, c-format
+msgid ""
+"Internal inconsistency: remaining %u != max %u.\n"
+"  Please report this bug."
+msgstr ""
+
+#: elf64-ppc.c:2744 libbfd.c:1012
+msgid "%B: compiled for a big endian system and target is little endian"
+msgstr ""
+
+#: elf64-ppc.c:2747 libbfd.c:1014
+msgid "%B: compiled for a little endian system and target is big endian"
+msgstr ""
+
+#: elf64-ppc.c:4160
+msgid "%B: cannot create stub entry %s\n"
+msgstr ""
+
+#: elf64-ppc.c:6484
+#, c-format
+msgid "copy reloc against `%s' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n"
+msgstr ""
+
+#: elf64-ppc.c:6912
+msgid "dynreloc miscount for %B, section %A\n"
+msgstr ""
+
+#: elf64-ppc.c:6996
+msgid "%B: .opd is not a regular array of opd entries"
+msgstr ""
+
+#: elf64-ppc.c:7005
+msgid "%B: unexpected reloc type %u in .opd section"
+msgstr ""
+
+#: elf64-ppc.c:7026
+msgid "%B: undefined sym `%s' in .opd section"
+msgstr ""
+
+#: elf64-ppc.c:7584
+msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n"
+msgstr ""
+
+#: elf64-ppc.c:7929 elf64-ppc.c:8450
+#, c-format
+msgid "%s defined on removed toc entry"
+msgstr ""
+
+#: elf64-ppc.c:9474
+#, c-format
+msgid "cannot find opd entry toc for %s\n"
+msgstr ""
+
+#: elf64-ppc.c:9556
+#, c-format
+msgid "long branch stub `%s' offset overflow\n"
+msgstr ""
+
+#: elf64-ppc.c:9615
+#, c-format
+msgid "can't find branch stub `%s'\n"
+msgstr ""
+
+#: elf64-ppc.c:9677 elf64-ppc.c:9819
+#, c-format
+msgid "linkage table error against `%s'\n"
+msgstr ""
+
+#: elf64-ppc.c:9993
+#, c-format
+msgid "can't build branch stub `%s'\n"
+msgstr ""
+
+#: elf64-ppc.c:10814
+msgid "%B section %A exceeds stub group size"
+msgstr ""
+
+#: elf64-ppc.c:11457
+msgid "stubs don't match calculated size\n"
+msgstr ""
+
+#: elf64-ppc.c:11469
+#, c-format
+msgid ""
+"linker stubs in %u group%s\n"
+"  branch       %lu\n"
+"  toc adjust   %lu\n"
+"  long branch  %lu\n"
+"  long toc adj %lu\n"
+"  plt call     %lu"
+msgstr ""
+
+#: elf64-ppc.c:11819
+msgid "%H: %s used with TLS symbol %s\n"
+msgstr ""
+
+#: elf64-ppc.c:11820
+msgid "%H: %s used with non-TLS symbol %s\n"
+msgstr ""
+
+#: elf64-ppc.c:12318
+msgid "%H: automatic multiple TOCs not supported using your crt files; recompile with -mminimal-toc or upgrade gcc\n"
+msgstr ""
+
+#: elf64-ppc.c:12324
+msgid "%H: sibling call optimization to `%s' does not allow automatic multiple TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, or make `%s' extern\n"
+msgstr ""
+
+#: elf64-ppc.c:13041
+msgid "%B: relocation %s is not supported for symbol %s\n"
+msgstr ""
+
+#: elf64-ppc.c:13218
+msgid "%H: error: %s not a multiple of %u\n"
+msgstr ""
+
+#: elf64-sh64.c:1682
+#, c-format
+msgid "%s: error: unaligned relocation type %d at %08x reloc %08x\n"
+msgstr ""
+
+#: elf64-sparc.c:445
+msgid "%B: Only registers %%g[2367] can be declared using STT_REGISTER"
+msgstr ""
+
+#: elf64-sparc.c:465
+msgid "Register %%g%d used incompatibly: %s in %B, previously %s in %B"
+msgstr ""
+
+#: elf64-sparc.c:488
+msgid "Symbol `%s' has differing types: REGISTER in %B, previously %s in %B"
+msgstr ""
+
+#: elf64-sparc.c:533
+msgid "Symbol `%s' has differing types: %s in %B, previously REGISTER in %B"
+msgstr ""
+
+#: elf64-sparc.c:686
+msgid "%B: linking UltraSPARC specific with HAL specific code"
+msgstr ""
+
+#: elf64-x86-64.c:1236
+msgid "%B: relocation %s against symbol `%s' isn't supported in x32 mode"
+msgstr ""
+
+#: elf64-x86-64.c:1465
+msgid "%B: '%s' accessed both as normal and thread local symbol"
+msgstr ""
+
+#: elf64-x86-64.c:2934
+msgid "%B: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %d"
+msgstr ""
+
+#: elf64-x86-64.c:3193
+msgid "%B: relocation R_X86_64_GOTOFF64 against protected function `%s' can not be used when making a shared object"
+msgstr ""
+
+#: elf64-x86-64.c:3305
+msgid "; recompile with -fPIC"
+msgstr ""
+
+#: elf64-x86-64.c:3310
+msgid "%B: relocation %s against %s `%s' can not be used when making a shared object%s"
+msgstr ""
+
+#: elf64-x86-64.c:3312
+msgid "%B: relocation %s against undefined %s `%s' can not be used when making a shared object%s"
+msgstr ""
+
+#: elfcode.h:827
+#, c-format
+msgid "warning: %s has a corrupt string table index - ignoring"
+msgstr ""
+
+#: elfcode.h:1237
+#, c-format
+msgid "%s: version count (%ld) does not match symbol count (%ld)"
+msgstr ""
+
+#: elfcode.h:1491
+#, c-format
+msgid "%s(%s): relocation %d has invalid symbol index %ld"
+msgstr ""
+
+#: elfcore.h:312
+msgid "Warning: %B is truncated: expected core file size >= %lu, found: %lu."
+msgstr ""
+
+#: elflink.c:1119
+msgid "%s: TLS definition in %B section %A mismatches non-TLS definition in %B section %A"
+msgstr ""
+
+#: elflink.c:1123
+msgid "%s: TLS reference in %B mismatches non-TLS reference in %B"
+msgstr ""
+
+#: elflink.c:1127
+msgid "%s: TLS definition in %B section %A mismatches non-TLS reference in %B"
+msgstr ""
+
+#: elflink.c:1131
+msgid "%s: TLS reference in %B mismatches non-TLS definition in %B section %A"
+msgstr ""
+
+#: elflink.c:1764
+msgid "%B: unexpected redefinition of indirect versioned symbol `%s'"
+msgstr ""
+
+#: elflink.c:2077
+msgid "%B: version node not found for symbol %s"
+msgstr ""
+
+#: elflink.c:2167
+msgid "%B: bad reloc symbol index (0x%lx >= 0x%lx) for offset 0x%lx in section `%A'"
+msgstr ""
+
+#: elflink.c:2178
+msgid "%B: non-zero symbol index (0x%lx) for offset 0x%lx in section `%A' when the object file has no symbol table"
+msgstr ""
+
+#: elflink.c:2368
+msgid "%B: relocation size mismatch in %B section %A"
+msgstr ""
+
+#: elflink.c:2663
+#, c-format
+msgid "warning: type and size of dynamic symbol `%s' are not defined"
+msgstr ""
+
+#: elflink.c:3421
+msgid "%P: alternate ELF machine code found (%d) in %B, expecting %d\n"
+msgstr ""
+
+#: elflink.c:4067
+msgid "%B: %s: invalid version %u (max %d)"
+msgstr ""
+
+#: elflink.c:4103
+msgid "%B: %s: invalid needed version %d"
+msgstr ""
+
+#: elflink.c:4299
+msgid "Warning: alignment %u of common symbol `%s' in %B is greater than the alignment (%u) of its section %A"
+msgstr ""
+
+#: elflink.c:4305
+msgid "Warning: alignment %u of symbol `%s' in %B is smaller than %u in %B"
+msgstr ""
+
+#: elflink.c:4320
+msgid "Warning: size of symbol `%s' changed from %lu in %B to %lu in %B"
+msgstr ""
+
+#: elflink.c:4489
+msgid "%B: undefined reference to symbol '%s'"
+msgstr ""
+
+#: elflink.c:4492
+msgid "note: '%s' is defined in DSO %B so try adding it to the linker command line"
+msgstr ""
+
+#: elflink.c:5795
+#, c-format
+msgid "%s: undefined version: %s"
+msgstr ""
+
+#: elflink.c:5863
+msgid "%B: .preinit_array section is not allowed in DSO"
+msgstr ""
+
+#: elflink.c:7617
+#, c-format
+msgid "undefined %s reference in complex symbol: %s"
+msgstr ""
+
+#: elflink.c:7771
+#, c-format
+msgid "unknown operator '%c' in complex symbol"
+msgstr ""
+
+#: elflink.c:8110 elflink.c:8127 elflink.c:8164 elflink.c:8181
+msgid "%B: Unable to sort relocs - they are in more than one size"
+msgstr ""
+
+#: elflink.c:8141 elflink.c:8195
+msgid "%B: Unable to sort relocs - they are of an unknown size"
+msgstr ""
+
+#: elflink.c:8246
+msgid "Not enough memory to sort relocations"
+msgstr ""
+
+#: elflink.c:8439
+msgid "%B: Too many sections: %d (>= %d)"
+msgstr ""
+
+#: elflink.c:8686
+msgid "%B: internal symbol `%s' in %B is referenced by DSO"
+msgstr ""
+
+#: elflink.c:8688
+msgid "%B: hidden symbol `%s' in %B is referenced by DSO"
+msgstr ""
+
+#: elflink.c:8690
+msgid "%B: local symbol `%s' in %B is referenced by DSO"
+msgstr ""
+
+#: elflink.c:8785
+msgid "%B: could not find output section %A for input section %A"
+msgstr ""
+
+#: elflink.c:8908
+msgid "%B: protected symbol `%s' isn't defined"
+msgstr ""
+
+#: elflink.c:8910
+msgid "%B: internal symbol `%s' isn't defined"
+msgstr ""
+
+#: elflink.c:8912
+msgid "%B: hidden symbol `%s' isn't defined"
+msgstr ""
+
+#: elflink.c:9441
+msgid "error: %B: size of section %A is not multiple of address size"
+msgstr ""
+
+#: elflink.c:9488
+msgid "error: %B contains a reloc (0x%s) for section %A that references a non-existent global symbol"
+msgstr ""
+
+#: elflink.c:10223
+msgid "%A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections"
+msgstr ""
+
+#: elflink.c:10228
+#, c-format
+msgid "%A has both ordered and unordered sections"
+msgstr ""
+
+#: elflink.c:10793
+msgid "%B: file class %s incompatible with %s"
+msgstr ""
+
+#: elflink.c:11104 elflink.c:11148
+msgid "%B: could not find output section %s"
+msgstr ""
+
+#: elflink.c:11109
+#, c-format
+msgid "warning: %s section has zero size"
+msgstr ""
+
+#: elflink.c:11214
+msgid "%P: warning: creating a DT_TEXTREL in a shared object.\n"
+msgstr ""
+
+#: elflink.c:11401
+msgid "%P%X: can not read symbols: %E\n"
+msgstr ""
+
+#: elflink.c:11750
+msgid "Removing unused section '%s' in file '%B'"
+msgstr ""
+
+#: elflink.c:11962
+msgid "Warning: gc-sections option ignored"
+msgstr ""
+
+#: elflink.c:12511
+msgid "%B: ignoring duplicate section `%A'"
+msgstr ""
+
+#: elflink.c:12518 elflink.c:12525
+msgid "%B: duplicate section `%A' has different size"
+msgstr ""
+
+#: elflink.c:12533 elflink.c:12538
+msgid "%B: warning: could not read contents of section `%A'"
+msgstr ""
+
+#: elflink.c:12542
+msgid "%B: warning: duplicate section `%A' has different contents"
+msgstr ""
+
+#: elflink.c:12643 linker.c:3086
+msgid "%F%P: already_linked_table: %E\n"
+msgstr ""
+
+#: elfxx-mips.c:1221
+msgid "static procedure (no name)"
+msgstr ""
+
+#: elfxx-mips.c:5628
+msgid "%B: %A+0x%lx: Direct jumps between ISA modes are not allowed; consider recompiling with interlinking enabled."
+msgstr ""
+
+#: elfxx-mips.c:6288 elfxx-mips.c:6511
+msgid "%B: Warning: bad `%s' option size %u smaller than its header"
+msgstr ""
+
+#: elfxx-mips.c:7262 elfxx-mips.c:7387
+msgid "%B: Warning: cannot determine the target function for stub section `%s'"
+msgstr ""
+
+#: elfxx-mips.c:7516
+msgid "%B: Malformed reloc detected for section %s"
+msgstr ""
+
+#: elfxx-mips.c:7556
+msgid "%B: GOT reloc at 0x%lx not expected in executables"
+msgstr ""
+
+#: elfxx-mips.c:7678
+msgid "%B: CALL16 reloc at 0x%lx not against global symbol"
+msgstr ""
+
+#: elfxx-mips.c:8372
+#, c-format
+msgid "non-dynamic relocations refer to dynamic symbol %s"
+msgstr ""
+
+#: elfxx-mips.c:9075
+msgid "%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"
+msgstr ""
+
+#: elfxx-mips.c:9214
+msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)"
+msgstr ""
+
+#: elfxx-mips.c:12038
+#, c-format
+msgid "%s: illegal section name `%s'"
+msgstr ""
+
+#: elfxx-mips.c:12417 elfxx-mips.c:12443
+msgid "Warning: %B uses -msingle-float, %B uses -mdouble-float"
+msgstr ""
+
+#: elfxx-mips.c:12429 elfxx-mips.c:12485
+msgid "Warning: %B uses -msingle-float, %B uses -mips32r2 -mfp64"
+msgstr ""
+
+#: elfxx-mips.c:12455 elfxx-mips.c:12491
+msgid "Warning: %B uses -mdouble-float, %B uses -mips32r2 -mfp64"
+msgstr ""
+
+#: elfxx-mips.c:12533
+msgid "%B: endianness incompatible with that of the selected emulation"
+msgstr ""
+
+#: elfxx-mips.c:12544
+msgid "%B: ABI is incompatible with that of the selected emulation"
+msgstr ""
+
+#: elfxx-mips.c:12628
+msgid "%B: warning: linking abicalls files with non-abicalls files"
+msgstr ""
+
+#: elfxx-mips.c:12645
+msgid "%B: linking 32-bit code with 64-bit code"
+msgstr ""
+
+#: elfxx-mips.c:12673
+msgid "%B: linking %s module with previous %s modules"
+msgstr ""
+
+#: elfxx-mips.c:12696
+msgid "%B: ABI mismatch: linking %s module with previous %s modules"
+msgstr ""
+
+#: elfxx-mips.c:12860
+#, c-format
+msgid " [abi=O32]"
+msgstr ""
+
+#: elfxx-mips.c:12862
+#, c-format
+msgid " [abi=O64]"
+msgstr ""
+
+#: elfxx-mips.c:12864
+#, c-format
+msgid " [abi=EABI32]"
+msgstr ""
+
+#: elfxx-mips.c:12866
+#, c-format
+msgid " [abi=EABI64]"
+msgstr ""
+
+#: elfxx-mips.c:12868
+#, c-format
+msgid " [abi unknown]"
+msgstr ""
+
+#: elfxx-mips.c:12870
+#, c-format
+msgid " [abi=N32]"
+msgstr ""
+
+#: elfxx-mips.c:12872
+#, c-format
+msgid " [abi=64]"
+msgstr ""
+
+#: elfxx-mips.c:12874
+#, c-format
+msgid " [no abi set]"
+msgstr ""
+
+#: elfxx-mips.c:12895
+#, c-format
+msgid " [unknown ISA]"
+msgstr ""
+
+#: elfxx-mips.c:12906
+#, c-format
+msgid " [not 32bitmode]"
+msgstr ""
+
+#: elfxx-sparc.c:595
+#, c-format
+msgid "invalid relocation type %d"
+msgstr ""
+
+#: i386linux.c:454 m68klinux.c:458 sparclinux.c:452
+#, c-format
+msgid "Output file requires shared library `%s'\n"
+msgstr ""
+
+#: i386linux.c:462 m68klinux.c:466 sparclinux.c:460
+#, c-format
+msgid "Output file requires shared library `%s.so.%s'\n"
+msgstr ""
+
+#: i386linux.c:651 i386linux.c:701 m68klinux.c:658 m68klinux.c:706
+#: sparclinux.c:650 sparclinux.c:700
+#, c-format
+msgid "Symbol %s not defined for fixups\n"
+msgstr ""
+
+#: i386linux.c:725 m68klinux.c:730 sparclinux.c:724
+msgid "Warning: fixup count mismatch\n"
+msgstr ""
+
+#: ieee.c:159
+#, c-format
+msgid "%s: string too long (%d chars, max 65535)"
+msgstr ""
+
+#: ieee.c:286
+#, c-format
+msgid "%s: unrecognized symbol `%s' flags 0x%x"
+msgstr ""
+
+#: ieee.c:792
+msgid "%B: unimplemented ATI record %u for symbol %u"
+msgstr ""
+
+#: ieee.c:816
+msgid "%B: unexpected ATN type %d in external part"
+msgstr ""
+
+#: ieee.c:838
+msgid "%B: unexpected type after ATN"
+msgstr ""
+
+#: ihex.c:230
+msgid "%B:%d: unexpected character `%s' in Intel Hex file"
+msgstr ""
+
+#: ihex.c:337
+msgid "%B:%u: bad checksum in Intel Hex file (expected %u, found %u)"
+msgstr ""
+
+#: ihex.c:392
+msgid "%B:%u: bad extended address record length in Intel Hex file"
+msgstr ""
+
+#: ihex.c:409
+msgid "%B:%u: bad extended start address length in Intel Hex file"
+msgstr ""
+
+#: ihex.c:426
+msgid "%B:%u: bad extended linear address record length in Intel Hex file"
+msgstr ""
+
+#: ihex.c:443
+msgid "%B:%u: bad extended linear start address length in Intel Hex file"
+msgstr ""
+
+#: ihex.c:460
+msgid "%B:%u: unrecognized ihex type %u in Intel Hex file"
+msgstr ""
+
+#: ihex.c:579
+msgid "%B: internal error in ihex_read_section"
+msgstr ""
+
+#: ihex.c:613
+msgid "%B: bad section length in ihex_read_section"
+msgstr ""
+
+#: ihex.c:826
+#, c-format
+msgid "%s: address 0x%s out of range for Intel Hex file"
+msgstr ""
+
+#: libbfd.c:863
+msgid "%B: unable to get decompressed section %A"
+msgstr ""
+
+#: libbfd.c:1043
+#, c-format
+msgid "Deprecated %s called at %s line %d in %s\n"
+msgstr ""
+
+#: libbfd.c:1046
+#, c-format
+msgid "Deprecated %s called\n"
+msgstr ""
+
+#: linker.c:1859
+msgid "%B: indirect symbol `%s' to `%s' is a loop"
+msgstr ""
+
+#: linker.c:2726
+#, c-format
+msgid "Attempt to do relocatable link with %s input and %s output"
+msgstr ""
+
+#: linker.c:3053
+msgid "%B: warning: ignoring duplicate section `%A'\n"
+msgstr ""
+
+#: linker.c:3067
+msgid "%B: warning: duplicate section `%A' has different size\n"
+msgstr ""
+
+#: mach-o.c:381
+msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols"
+msgstr ""
+
+#: mach-o.c:1253
+#, c-format
+msgid "unable to write unknown load command 0x%lx"
+msgstr ""
+
+#: mach-o.c:1654
+#, c-format
+msgid "bfd_mach_o_read_symtab_symbol: unable to read %d bytes at %lu"
+msgstr ""
+
+#: mach-o.c:1671
+#, c-format
+msgid "bfd_mach_o_read_symtab_symbol: symbol name out of range (%lu >= %lu)"
+msgstr ""
+
+#: mach-o.c:1756
+#, c-format
+msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid section %d (max %lu): setting to undefined"
+msgstr ""
+
+#: mach-o.c:1764
+#, c-format
+msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" is unsupported 'indirect' reference: setting to undefined"
+msgstr ""
+
+#: mach-o.c:1770
+#, c-format
+msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid type field 0x%x: setting to undefined"
+msgstr ""
+
+#: mach-o.c:1840
+msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols"
+msgstr ""
+
+#: mach-o.c:1874
+#, c-format
+msgid "bfd_mach_o_read_dysymtab_symbol: unable to read %lu bytes at %lu"
+msgstr ""
+
+#: mach-o.c:2556
+#, c-format
+msgid "unable to read unknown load command 0x%lx"
+msgstr ""
+
+#: mach-o.c:2736
+#, c-format
+msgid "bfd_mach_o_scan: unknown architecture 0x%lx/0x%lx"
+msgstr ""
+
+#: mach-o.c:2832
+#, c-format
+msgid "unknown header byte-order value 0x%lx"
+msgstr ""
+
+#: mach-o.c:3402
+msgid "Mach-O header:\n"
+msgstr ""
+
+#: mach-o.c:3403
+#, c-format
+msgid " magic     : %08lx\n"
+msgstr ""
+
+#: mach-o.c:3404
+#, c-format
+msgid " cputype   : %08lx (%s)\n"
+msgstr ""
+
+#: mach-o.c:3406
+#, c-format
+msgid " cpusubtype: %08lx\n"
+msgstr ""
+
+#: mach-o.c:3407
+#, c-format
+msgid " filetype  : %08lx (%s)\n"
+msgstr ""
+
+#: mach-o.c:3410
+#, c-format
+msgid " ncmds     : %08lx (%lu)\n"
+msgstr ""
+
+#: mach-o.c:3411
+#, c-format
+msgid " sizeofcmds: %08lx\n"
+msgstr ""
+
+#: mach-o.c:3412
+#, c-format
+msgid " flags     : %08lx ("
+msgstr ""
+
+#: mach-o.c:3414 vms-alpha.c:7671
+msgid ")\n"
+msgstr ")\n"
+
+#: mach-o.c:3415
+#, c-format
+msgid " reserved  : %08x\n"
+msgstr ""
+
+#: mach-o.c:3425
+msgid "Segments and Sections:\n"
+msgstr ""
+
+#: mach-o.c:3426
+msgid " #: Segment name     Section name     Address\n"
+msgstr ""
+
+#: merge.c:832
+#, c-format
+msgid "%s: access beyond end of merged section (%ld)"
+msgstr ""
+
+#: mmo.c:456
+#, c-format
+msgid "%s: No core to allocate section name %s\n"
+msgstr ""
+
+#: mmo.c:531
+#, c-format
+msgid "%s: No core to allocate a symbol %d bytes long\n"
+msgstr ""
+
+#: mmo.c:1187
+#, c-format
+msgid "%s: invalid mmo file: initialization value for $255 is not `Main'\n"
+msgstr ""
+
+#: mmo.c:1332
+#, c-format
+msgid "%s: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n"
+msgstr ""
+
+#: mmo.c:1565
+#, c-format
+msgid "%s: invalid mmo file: unsupported lopcode `%d'\n"
+msgstr ""
+
+#: mmo.c:1575
+#, c-format
+msgid "%s: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n"
+msgstr ""
+
+#: mmo.c:1611
+#, c-format
+msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n"
+msgstr ""
+
+#: mmo.c:1657
+#, c-format
+msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n"
+msgstr ""
+
+#: mmo.c:1696
+#, c-format
+msgid "%s: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n"
+msgstr ""
+
+#: mmo.c:1705
+#, c-format
+msgid "%s: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n"
+msgstr ""
+
+#: mmo.c:1728
+#, c-format
+msgid "%s: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n"
+msgstr ""
+
+#: mmo.c:1751
+#, c-format
+msgid "%s: cannot allocate file name for file number %d, %d bytes\n"
+msgstr ""
+
+#: mmo.c:1771
+#, c-format
+msgid "%s: invalid mmo file: file number %d `%s', was already entered as `%s'\n"
+msgstr ""
+
+#: mmo.c:1784
+#, c-format
+msgid "%s: invalid mmo file: file name for number %d was not specified before use\n"
+msgstr ""
+
+#: mmo.c:1890
+#, c-format
+msgid "%s: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n"
+msgstr ""
+
+#: mmo.c:1926
+#, c-format
+msgid "%s: invalid mmo file: lop_end not last item in file\n"
+msgstr ""
+
+#: mmo.c:1939
+#, c-format
+msgid "%s: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n"
+msgstr ""
+
+#: mmo.c:2649
+#, c-format
+msgid "%s: invalid symbol table: duplicate symbol `%s'\n"
+msgstr ""
+
+#: mmo.c:2889
+#, c-format
+msgid "%s: Bad symbol definition: `Main' set to %s rather than the start address %s\n"
+msgstr ""
+
+#: mmo.c:2981
+#, c-format
+msgid "%s: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d.  Only `Main' will be emitted.\n"
+msgstr ""
+
+#: mmo.c:3026
+#, c-format
+msgid "%s: internal error, symbol table changed size from %d to %d words\n"
+msgstr ""
+
+#: mmo.c:3078
+#, c-format
+msgid "%s: internal error, internal register section %s had contents\n"
+msgstr ""
+
+#: mmo.c:3129
+#, c-format
+msgid "%s: no initialized registers; section length 0\n"
+msgstr ""
+
+#: mmo.c:3135
+#, c-format
+msgid "%s: too many initialized registers; section length %ld\n"
+msgstr ""
+
+#: mmo.c:3140
+#, c-format
+msgid "%s: invalid start address for initialized registers of length %ld: 0x%lx%08lx\n"
+msgstr ""
+
+#: oasys.c:882
+#, c-format
+msgid "%s: can not represent section `%s' in oasys"
+msgstr ""
+
+#: osf-core.c:140
+#, c-format
+msgid "Unhandled OSF/1 core file section type %d\n"
+msgstr ""
+
+#: pe-mips.c:607
+msgid "%B: `ld -r' not supported with PE MIPS objects\n"
+msgstr ""
+
+#. OK, at this point the following variables are set up:
+#. src = VMA of the memory we're fixing up
+#. mem = pointer to memory we're fixing up
+#. val = VMA of what we need to refer to.
+#: pe-mips.c:719
+msgid "%B: unimplemented %s\n"
+msgstr "%B: нереалізований %s\n"
+
+#: pe-mips.c:745
+msgid "%B: jump too far away\n"
+msgstr ""
+
+#: pe-mips.c:771
+msgid "%B: bad pair/reflo after refhi\n"
+msgstr ""
+
+#: pef.c:519
+#, c-format
+msgid "bfd_pef_scan: unknown architecture 0x%lx"
+msgstr ""
+
+#: pei-x86_64.c:444
+#, c-format
+msgid "warning: .pdata section size (%ld) is not a multiple of %d\n"
+msgstr "попередження: розмір розділу .pdata (%ld) не є кратним до %d\n"
+
+#: pei-x86_64.c:448 peigen.c:1618 peigen.c:1801 pepigen.c:1618 pepigen.c:1801
+#: pex64igen.c:1618 pex64igen.c:1801
+#, c-format
+msgid ""
+"\n"
+"The Function Table (interpreted .pdata section contents)\n"
+msgstr ""
+
+#: pei-x86_64.c:450
+#, c-format
+msgid "vma:\t\t\tBeginAddress\t EndAddress\t  UnwindData\n"
+msgstr ""
+
+#. XXX code yet to be written.
+#: peicode.h:751
+msgid "%B: Unhandled import type; %x"
+msgstr ""
+
+#: peicode.h:756
+msgid "%B: Unrecognised import type; %x"
+msgstr ""
+
+#: peicode.h:770
+msgid "%B: Unrecognised import name type; %x"
+msgstr ""
+
+#: peicode.h:1162
+msgid "%B: Unrecognised machine type (0x%x) in Import Library Format archive"
+msgstr ""
+
+#: peicode.h:1174
+msgid "%B: Recognised but unhandled machine type (0x%x) in Import Library Format archive"
+msgstr ""
+
+#: peicode.h:1192
+msgid "%B: size field is zero in Import Library Format header"
+msgstr ""
+
+#: peicode.h:1223
+msgid "%B: string not null terminated in ILF object file."
+msgstr ""
+
+#: ppcboot.c:414
+#, c-format
+msgid ""
+"\n"
+"ppcboot header:\n"
+msgstr ""
+"\n"
+"Заголовок ppcboot:\n"
+
+#: ppcboot.c:415
+#, c-format
+msgid "Entry offset        = 0x%.8lx (%ld)\n"
+msgstr "Відступ входу       = 0x%.8lx (%ld)\n"
+
+#: ppcboot.c:417
+#, c-format
+msgid "Length              = 0x%.8lx (%ld)\n"
+msgstr "Довжина             = 0x%.8lx (%ld)\n"
+
+#: ppcboot.c:421
+#, c-format
+msgid "Flag field          = 0x%.2x\n"
+msgstr ""
+
+#: ppcboot.c:427
+#, c-format
+msgid "Partition name      = \"%s\"\n"
+msgstr "Назва розділу       = \"%s\"\n"
+
+#: ppcboot.c:446
+#, c-format
+msgid ""
+"\n"
+"Partition[%d] start  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
+msgstr ""
+"\n"
+"Початок розділу[%d]  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
+
+#: ppcboot.c:452
+#, c-format
+msgid "Partition[%d] end    = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
+msgstr "Кінець розділу[%d]   = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"
+
+#: ppcboot.c:458
+#, c-format
+msgid "Partition[%d] sector = 0x%.8lx (%ld)\n"
+msgstr "Сектор розділу[%d]   = 0x%.8lx (%ld)\n"
+
+#: ppcboot.c:460
+#, c-format
+msgid "Partition[%d] length = 0x%.8lx (%ld)\n"
+msgstr "Довжина розділу[%d] = 0x%.8lx (%ld)\n"
+
+#: rs6000-core.c:448
+#, c-format
+msgid "%s: warning core file truncated"
+msgstr ""
+
+#: som.c:5471
+#, c-format
+msgid ""
+"\n"
+"Exec Auxiliary Header\n"
+msgstr ""
+
+#: som.c:5776
+msgid "som_sizeof_headers unimplemented"
+msgstr "som_sizeof_headers не реалізовано"
+
+#: srec.c:261
+msgid "%B:%d: Unexpected character `%s' in S-record file\n"
+msgstr ""
+
+#: srec.c:567 srec.c:600
+msgid "%B:%d: Bad checksum in S-record file\n"
+msgstr ""
+
+#: stabs.c:279
+msgid "%B(%A+0x%lx): Stabs entry has invalid string index."
+msgstr ""
+
+#: syms.c:1079
+msgid "Unsupported .stab relocation"
+msgstr "Непідтримуване пересування .stab"
+
+#: vms-alpha.c:1299
+#, c-format
+msgid "Unknown EGSD subtype %d"
+msgstr ""
+
+#: vms-alpha.c:1330
+#, c-format
+msgid "Stack overflow (%d) in _bfd_vms_push"
+msgstr ""
+
+#: vms-alpha.c:1343
+msgid "Stack underflow in _bfd_vms_pop"
+msgstr ""
+
+#. These names have not yet been added to this switch statement.
+#: vms-alpha.c:1580
+#, c-format
+msgid "unknown ETIR command %d"
+msgstr ""
+
+#: vms-alpha.c:1767
+#, c-format
+msgid "bad section index in %s"
+msgstr "помилковий номер розділу у %s"
+
+#: vms-alpha.c:1780
+#, c-format
+msgid "unsupported STA cmd %s"
+msgstr ""
+
+#. Insert field.
+#. Unsigned shift.
+#. Rotate.
+#. Redefine symbol to current location.
+#. Define a literal.
+#: vms-alpha.c:1956 vms-alpha.c:1987 vms-alpha.c:2234
+#, c-format
+msgid "%s: not supported"
+msgstr "%s: підтримки не передбачено"
+
+#: vms-alpha.c:1962
+#, c-format
+msgid "%s: not implemented"
+msgstr "%s: не реалізовано"
+
+#: vms-alpha.c:2218
+#, c-format
+msgid "invalid use of %s with contexts"
+msgstr ""
+
+#: vms-alpha.c:2252
+#, c-format
+msgid "reserved cmd %d"
+msgstr ""
+
+#: vms-alpha.c:2337
+msgid "Object module NOT error-free !\n"
+msgstr ""
+
+#: vms-alpha.c:2766
+#, c-format
+msgid "Symbol %s replaced by %s\n"
+msgstr "Символ %s замінено на %s\n"
+
+#: vms-alpha.c:3769
+#, c-format
+msgid "SEC_RELOC with no relocs in section %s"
+msgstr ""
+
+#: vms-alpha.c:3822 vms-alpha.c:4053
+#, c-format
+msgid "Size error in section %s"
+msgstr "Помилка у розмірі у розділі %s"
+
+#: vms-alpha.c:3992
+msgid "Spurious ALPHA_R_BSR reloc"
+msgstr ""
+
+#: vms-alpha.c:4040
+#, c-format
+msgid "Unhandled relocation %s"
+msgstr ""
+
+#: vms-alpha.c:4330
+#, c-format
+msgid "unknown source command %d"
+msgstr "невідома початкова команда %d"
+
+#: vms-alpha.c:4391
+msgid "DST__K_SET_LINUM_INCR not implemented"
+msgstr "DST__K_SET_LINUM_INCR не реалізовано"
+
+#: vms-alpha.c:4397
+msgid "DST__K_SET_LINUM_INCR_W not implemented"
+msgstr "DST__K_SET_LINUM_INCR_W не реалізовано"
+
+#: vms-alpha.c:4403
+msgid "DST__K_RESET_LINUM_INCR not implemented"
+msgstr "DST__K_RESET_LINUM_INCR не реалізовано"
+
+#: vms-alpha.c:4409
+msgid "DST__K_BEG_STMT_MODE not implemented"
+msgstr "DST__K_BEG_STMT_MODE не реалізовано"
+
+#: vms-alpha.c:4415
+msgid "DST__K_END_STMT_MODE not implemented"
+msgstr "DST__K_END_STMT_MODE не реалізовано"
+
+#: vms-alpha.c:4442
+msgid "DST__K_SET_PC not implemented"
+msgstr "DST__K_SET_PC не реалізовано"
+
+#: vms-alpha.c:4448
+msgid "DST__K_SET_PC_W not implemented"
+msgstr "DST__K_SET_PC_W не реалізовано"
+
+#: vms-alpha.c:4454
+msgid "DST__K_SET_PC_L not implemented"
+msgstr "DST__K_SET_PC_L не реалізовано"
+
+#: vms-alpha.c:4460
+msgid "DST__K_SET_STMTNUM not implemented"
+msgstr "DST__K_SET_STMTNUM не реалізовано"
+
+#: vms-alpha.c:4503
+#, c-format
+msgid "unknown line command %d"
+msgstr "невідома рядкова команда %d"
+
+#: vms-alpha.c:4957 vms-alpha.c:4974 vms-alpha.c:4988 vms-alpha.c:5003
+#: vms-alpha.c:5015 vms-alpha.c:5026 vms-alpha.c:5038
+#, c-format
+msgid "Unknown reloc %s + %s"
+msgstr ""
+
+#: vms-alpha.c:5093
+#, c-format
+msgid "Unknown reloc %s"
+msgstr ""
+
+#: vms-alpha.c:5106
+msgid "Invalid section index in ETIR"
+msgstr ""
+
+#: vms-alpha.c:5153
+#, c-format
+msgid "Unknown symbol in command %s"
+msgstr ""
+
+#: vms-alpha.c:5668
+#, c-format
+msgid "  EMH %u (len=%u): "
+msgstr ""
+
+#: vms-alpha.c:5677
+#, c-format
+msgid "Module header\n"
+msgstr ""
+
+#: vms-alpha.c:5678
+#, c-format
+msgid "   structure level: %u\n"
+msgstr ""
+
+#: vms-alpha.c:5679
+#, c-format
+msgid "   max record size: %u\n"
+msgstr ""
+
+#: vms-alpha.c:5682
+#, c-format
+msgid "   module name    : %.*s\n"
+msgstr "   назва модуля   : %.*s\n"
+
+#: vms-alpha.c:5684
+#, c-format
+msgid "   module version : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:5686
+#, c-format
+msgid "   compile date   : %.17s\n"
+msgstr ""
+
+#: vms-alpha.c:5691
+#, c-format
+msgid "Language Processor Name\n"
+msgstr ""
+
+#: vms-alpha.c:5692
+#, c-format
+msgid "   language name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:5699
+#, c-format
+msgid "Source Files Header\n"
+msgstr ""
+
+#: vms-alpha.c:5700
+#, c-format
+msgid "   file: %.*s\n"
+msgstr "   файл: %.*s\n"
+
+#: vms-alpha.c:5707
+#, c-format
+msgid "Title Text Header\n"
+msgstr ""
+
+#: vms-alpha.c:5708
+#, c-format
+msgid "   title: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:5715
+#, c-format
+msgid "Copyright Header\n"
+msgstr ""
+
+#: vms-alpha.c:5716
+#, c-format
+msgid "   copyright: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:5722
+#, c-format
+msgid "unhandled emh subtype %u\n"
+msgstr ""
+
+#: vms-alpha.c:5732
+#, c-format
+msgid "  EEOM (len=%u):\n"
+msgstr ""
+
+#: vms-alpha.c:5733
+#, c-format
+msgid "   number of cond linkage pairs: %u\n"
+msgstr ""
+
+#: vms-alpha.c:5735
+#, c-format
+msgid "   completion code: %u\n"
+msgstr ""
+
+#: vms-alpha.c:5739
+#, c-format
+msgid "   transfer addr flags: 0x%02x\n"
+msgstr ""
+
+#: vms-alpha.c:5740
+#, c-format
+msgid "   transfer addr psect: %u\n"
+msgstr ""
+
+#: vms-alpha.c:5742
+#, c-format
+msgid "   transfer address   : 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:5751
+msgid " WEAK"
+msgstr " WEAK"
+
+#: vms-alpha.c:5753
+msgid " DEF"
+msgstr " DEF"
+
+#: vms-alpha.c:5755
+msgid " UNI"
+msgstr " UNI"
+
+#: vms-alpha.c:5757 vms-alpha.c:5778
+msgid " REL"
+msgstr ""
+
+#: vms-alpha.c:5759
+msgid " COMM"
+msgstr " COMM"
+
+#: vms-alpha.c:5761
+msgid " VECEP"
+msgstr ""
+
+#: vms-alpha.c:5763
+msgid " NORM"
+msgstr " NORM"
+
+#: vms-alpha.c:5765
+msgid " QVAL"
+msgstr ""
+
+#: vms-alpha.c:5772
+msgid " PIC"
+msgstr " PIC"
+
+#: vms-alpha.c:5774
+msgid " LIB"
+msgstr " LIB"
+
+#: vms-alpha.c:5776
+msgid " OVR"
+msgstr " OVR"
+
+#: vms-alpha.c:5780
+msgid " GBL"
+msgstr ""
+
+#: vms-alpha.c:5782
+msgid " SHR"
+msgstr " SHR"
+
+#: vms-alpha.c:5784
+msgid " EXE"
+msgstr ""
+
+#: vms-alpha.c:5786
+msgid " RD"
+msgstr " RD"
+
+#: vms-alpha.c:5788
+msgid " WRT"
+msgstr ""
+
+#: vms-alpha.c:5790
+msgid " VEC"
+msgstr " VEC"
+
+#: vms-alpha.c:5792
+msgid " NOMOD"
+msgstr ""
+
+#: vms-alpha.c:5794
+msgid " COM"
+msgstr " COM"
+
+#: vms-alpha.c:5796
+msgid " 64B"
+msgstr " 64B"
+
+#: vms-alpha.c:5805
+#, c-format
+msgid "  EGSD (len=%u):\n"
+msgstr ""
+
+#: vms-alpha.c:5817
+#, c-format
+msgid "  EGSD entry %2u (type: %u, len: %u): "
+msgstr ""
+
+#: vms-alpha.c:5829
+#, c-format
+msgid "PSC - Program section definition\n"
+msgstr ""
+
+#: vms-alpha.c:5830 vms-alpha.c:5847
+#, c-format
+msgid "   alignment  : 2**%u\n"
+msgstr ""
+
+#: vms-alpha.c:5831 vms-alpha.c:5848
+#, c-format
+msgid "   flags      : 0x%04x"
+msgstr ""
+
+#: vms-alpha.c:5835
+#, c-format
+msgid "   alloc (len): %u (0x%08x)\n"
+msgstr ""
+
+#: vms-alpha.c:5836 vms-alpha.c:5893 vms-alpha.c:5942
+#, c-format
+msgid "   name       : %.*s\n"
+msgstr "   назва      : %.*s\n"
+
+#: vms-alpha.c:5846
+#, c-format
+msgid "SPSC - Shared Image Program section def\n"
+msgstr ""
+
+#: vms-alpha.c:5852
+#, c-format
+msgid "   alloc (len)   : %u (0x%08x)\n"
+msgstr ""
+
+#: vms-alpha.c:5853
+#, c-format
+msgid "   image offset  : 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:5855
+#, c-format
+msgid "   symvec offset : 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:5857
+#, c-format
+msgid "   name          : %.*s\n"
+msgstr "   назва         : %.*s\n"
+
+#: vms-alpha.c:5870
+#, c-format
+msgid "SYM - Global symbol definition\n"
+msgstr ""
+
+#: vms-alpha.c:5871 vms-alpha.c:5931 vms-alpha.c:5952 vms-alpha.c:5971
+#, c-format
+msgid "   flags: 0x%04x"
+msgstr ""
+
+#: vms-alpha.c:5874
+#, c-format
+msgid "   psect offset: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:5878
+#, c-format
+msgid "   code address: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:5880
+#, c-format
+msgid "   psect index for entry point : %u\n"
+msgstr ""
+
+#: vms-alpha.c:5883 vms-alpha.c:5959 vms-alpha.c:5978
+#, c-format
+msgid "   psect index : %u\n"
+msgstr "   індекс psect: %u\n"
+
+#: vms-alpha.c:5885 vms-alpha.c:5961 vms-alpha.c:5980
+#, c-format
+msgid "   name        : %.*s\n"
+msgstr "   назва       : %.*s\n"
+
+#: vms-alpha.c:5892
+#, c-format
+msgid "SYM - Global symbol reference\n"
+msgstr ""
+
+#: vms-alpha.c:5904
+#, c-format
+msgid "IDC - Ident Consistency check\n"
+msgstr ""
+
+#: vms-alpha.c:5905
+#, c-format
+msgid "   flags         : 0x%08x"
+msgstr ""
+
+#: vms-alpha.c:5909
+#, c-format
+msgid "   id match      : %x\n"
+msgstr ""
+
+#: vms-alpha.c:5911
+#, c-format
+msgid "   error severity: %x\n"
+msgstr ""
+
+#: vms-alpha.c:5914
+#, c-format
+msgid "   entity name   : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:5916
+#, c-format
+msgid "   object name   : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:5919
+#, c-format
+msgid "   binary ident  : 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:5922
+#, c-format
+msgid "   ascii ident   : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:5930
+#, c-format
+msgid "SYMG - Universal symbol definition\n"
+msgstr ""
+
+#: vms-alpha.c:5934
+#, c-format
+msgid "   symbol vector offset: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:5936
+#, c-format
+msgid "   entry point: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:5938
+#, c-format
+msgid "   proc descr : 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:5940
+#, c-format
+msgid "   psect index: %u\n"
+msgstr "   індекс psect: %u\n"
+
+#: vms-alpha.c:5951
+#, c-format
+msgid "SYMV - Vectored symbol definition\n"
+msgstr ""
+
+#: vms-alpha.c:5955
+#, c-format
+msgid "   vector      : 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:5957 vms-alpha.c:5976
+#, c-format
+msgid "   psect offset: %u\n"
+msgstr ""
+
+#: vms-alpha.c:5970
+#, c-format
+msgid "SYMM - Global symbol definition with version\n"
+msgstr ""
+
+#: vms-alpha.c:5974
+#, c-format
+msgid "   version mask: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:5985
+#, c-format
+msgid "unhandled egsd entry type %u\n"
+msgstr ""
+
+#: vms-alpha.c:6019
+#, c-format
+msgid "    linkage index: %u, replacement insn: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6022
+#, c-format
+msgid "    psect idx 1: %u, offset 1: 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:6026
+#, c-format
+msgid "    psect idx 2: %u, offset 2: 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:6031
+#, c-format
+msgid "    psect idx 3: %u, offset 3: 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:6036
+#, c-format
+msgid "    global name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6046
+#, c-format
+msgid "  %s (len=%u+%u):\n"
+msgstr ""
+
+#: vms-alpha.c:6061
+#, c-format
+msgid "   (type: %3u, size: 4+%3u): "
+msgstr ""
+
+#: vms-alpha.c:6065
+#, c-format
+msgid "STA_GBL (stack global) %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6069
+#, c-format
+msgid "STA_LW (stack longword) 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6073
+#, c-format
+msgid "STA_QW (stack quadword) 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:6078
+#, c-format
+msgid "STA_PQ (stack psect base + offset)\n"
+msgstr ""
+
+#: vms-alpha.c:6079
+#, c-format
+msgid "    psect: %u, offset: 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:6085
+#, c-format
+msgid "STA_LI (stack literal)\n"
+msgstr ""
+
+#: vms-alpha.c:6088
+#, c-format
+msgid "STA_MOD (stack module)\n"
+msgstr ""
+
+#: vms-alpha.c:6091
+#, c-format
+msgid "STA_CKARG (compare procedure argument)\n"
+msgstr ""
+
+#: vms-alpha.c:6095
+#, c-format
+msgid "STO_B (store byte)\n"
+msgstr ""
+
+#: vms-alpha.c:6098
+#, c-format
+msgid "STO_W (store word)\n"
+msgstr ""
+
+#: vms-alpha.c:6101
+#, c-format
+msgid "STO_LW (store longword)\n"
+msgstr ""
+
+#: vms-alpha.c:6104
+#, c-format
+msgid "STO_QW (store quadword)\n"
+msgstr ""
+
+#: vms-alpha.c:6110
+#, c-format
+msgid "STO_IMMR (store immediate repeat) %u bytes\n"
+msgstr ""
+
+#: vms-alpha.c:6117
+#, c-format
+msgid "STO_GBL (store global) %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6121
+#, c-format
+msgid "STO_CA (store code address) %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6125
+#, c-format
+msgid "STO_RB (store relative branch)\n"
+msgstr ""
+
+#: vms-alpha.c:6128
+#, c-format
+msgid "STO_AB (store absolute branch)\n"
+msgstr ""
+
+#: vms-alpha.c:6131
+#, c-format
+msgid "STO_OFF (store offset to psect)\n"
+msgstr ""
+
+#: vms-alpha.c:6137
+#, c-format
+msgid "STO_IMM (store immediate) %u bytes\n"
+msgstr ""
+
+#: vms-alpha.c:6144
+#, c-format
+msgid "STO_GBL_LW (store global longword) %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6148
+#, c-format
+msgid "STO_OFF (store LP with procedure signature)\n"
+msgstr ""
+
+#: vms-alpha.c:6151
+#, c-format
+msgid "STO_BR_GBL (store branch global) *todo*\n"
+msgstr ""
+
+#: vms-alpha.c:6154
+#, c-format
+msgid "STO_BR_PS (store branch psect + offset) *todo*\n"
+msgstr ""
+
+#: vms-alpha.c:6158
+#, c-format
+msgid "OPR_NOP (no-operation)\n"
+msgstr ""
+
+#: vms-alpha.c:6161
+#, c-format
+msgid "OPR_ADD (add)\n"
+msgstr ""
+
+#: vms-alpha.c:6164
+#, c-format
+msgid "OPR_SUB (substract)\n"
+msgstr ""
+
+#: vms-alpha.c:6167
+#, c-format
+msgid "OPR_MUL (multiply)\n"
+msgstr ""
+
+#: vms-alpha.c:6170
+#, c-format
+msgid "OPR_DIV (divide)\n"
+msgstr ""
+
+#: vms-alpha.c:6173
+#, c-format
+msgid "OPR_AND (logical and)\n"
+msgstr ""
+
+#: vms-alpha.c:6176
+#, c-format
+msgid "OPR_IOR (logical inclusive or)\n"
+msgstr ""
+
+#: vms-alpha.c:6179
+#, c-format
+msgid "OPR_EOR (logical exclusive or)\n"
+msgstr ""
+
+#: vms-alpha.c:6182
+#, c-format
+msgid "OPR_NEG (negate)\n"
+msgstr ""
+
+#: vms-alpha.c:6185
+#, c-format
+msgid "OPR_COM (complement)\n"
+msgstr ""
+
+#: vms-alpha.c:6188
+#, c-format
+msgid "OPR_INSV (insert field)\n"
+msgstr ""
+
+#: vms-alpha.c:6191
+#, c-format
+msgid "OPR_ASH (arithmetic shift)\n"
+msgstr ""
+
+#: vms-alpha.c:6194
+#, c-format
+msgid "OPR_USH (unsigned shift)\n"
+msgstr ""
+
+#: vms-alpha.c:6197
+#, c-format
+msgid "OPR_ROT (rotate)\n"
+msgstr ""
+
+#: vms-alpha.c:6200
+#, c-format
+msgid "OPR_SEL (select)\n"
+msgstr ""
+
+#: vms-alpha.c:6203
+#, c-format
+msgid "OPR_REDEF (redefine symbol to curr location)\n"
+msgstr ""
+
+#: vms-alpha.c:6206
+#, c-format
+msgid "OPR_REDEF (define a literal)\n"
+msgstr ""
+
+#: vms-alpha.c:6210
+#, c-format
+msgid "STC_LP (store cond linkage pair)\n"
+msgstr ""
+
+#: vms-alpha.c:6214
+#, c-format
+msgid "STC_LP_PSB (store cond linkage pair + signature)\n"
+msgstr ""
+
+#: vms-alpha.c:6215
+#, c-format
+msgid "   linkage index: %u, procedure: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6218
+#, c-format
+msgid "   signature: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6221
+#, c-format
+msgid "STC_GBL (store cond global)\n"
+msgstr ""
+
+#: vms-alpha.c:6222
+#, c-format
+msgid "   linkage index: %u, global: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6226
+#, c-format
+msgid "STC_GCA (store cond code address)\n"
+msgstr ""
+
+#: vms-alpha.c:6227
+#, c-format
+msgid "   linkage index: %u, procedure name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:6231
+#, c-format
+msgid "STC_PS (store cond psect + offset)\n"
+msgstr ""
+
+#: vms-alpha.c:6233
+#, c-format
+msgid "   linkage index: %u, psect: %u, offset: 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:6240
+#, c-format
+msgid "STC_NOP_GBL (store cond NOP at global addr)\n"
+msgstr ""
+
+#: vms-alpha.c:6244
+#, c-format
+msgid "STC_NOP_PS (store cond NOP at psect + offset)\n"
+msgstr ""
+
+#: vms-alpha.c:6248
+#, c-format
+msgid "STC_BSR_GBL (store cond BSR at global addr)\n"
+msgstr ""
+
+#: vms-alpha.c:6252
+#, c-format
+msgid "STC_BSR_PS (store cond BSR at psect + offset)\n"
+msgstr ""
+
+#: vms-alpha.c:6256
+#, c-format
+msgid "STC_LDA_GBL (store cond LDA at global addr)\n"
+msgstr ""
+
+#: vms-alpha.c:6260
+#, c-format
+msgid "STC_LDA_PS (store cond LDA at psect + offset)\n"
+msgstr ""
+
+#: vms-alpha.c:6264
+#, c-format
+msgid "STC_BOH_GBL (store cond BOH at global addr)\n"
+msgstr ""
+
+#: vms-alpha.c:6268
+#, c-format
+msgid "STC_BOH_PS (store cond BOH at psect + offset)\n"
+msgstr ""
+
+#: vms-alpha.c:6273
+#, c-format
+msgid "STC_NBH_GBL (store cond or hint at global addr)\n"
+msgstr ""
+
+#: vms-alpha.c:6277
+#, c-format
+msgid "STC_NBH_PS (store cond or hint at psect + offset)\n"
+msgstr ""
+
+#: vms-alpha.c:6281
+#, c-format
+msgid "CTL_SETRB (set relocation base)\n"
+msgstr ""
+
+#: vms-alpha.c:6287
+#, c-format
+msgid "CTL_AUGRB (augment relocation base) %u\n"
+msgstr ""
+
+#: vms-alpha.c:6291
+#, c-format
+msgid "CTL_DFLOC (define location)\n"
+msgstr "CTL_DFLOC (визначити розташування)\n"
+
+#: vms-alpha.c:6294
+#, c-format
+msgid "CTL_STLOC (set location)\n"
+msgstr "CTL_STLOC (вказати розташування)\n"
+
+#: vms-alpha.c:6297
+#, c-format
+msgid "CTL_STKDL (stack defined location)\n"
+msgstr "CTL_STKDL (розташування, визначене стеком)\n"
+
+#: vms-alpha.c:6300 vms-alpha.c:6714
+#, c-format
+msgid "*unhandled*\n"
+msgstr "*не оброблено*\n"
+
+#: vms-alpha.c:6330 vms-alpha.c:6369
+#, c-format
+msgid "cannot read GST record length\n"
+msgstr "не вдалося прочитати довжину запису GST\n"
+
+#. Ill-formed.
+#: vms-alpha.c:6351
+#, c-format
+msgid "cannot find EMH in first GST record\n"
+msgstr ""
+
+#: vms-alpha.c:6377
+#, c-format
+msgid "cannot read GST record header\n"
+msgstr "не вдалося прочитати заголовок запису GST\n"
+
+#: vms-alpha.c:6390
+#, c-format
+msgid " corrupted GST\n"
+msgstr " пошкоджений GST\n"
+
+#: vms-alpha.c:6398
+#, c-format
+msgid "cannot read GST record\n"
+msgstr "не вдалося прочитати запис GST\n"
+
+#: vms-alpha.c:6427
+#, c-format
+msgid " unhandled EOBJ record type %u\n"
+msgstr ""
+
+#: vms-alpha.c:6450
+#, c-format
+msgid "  bitcount: %u, base addr: 0x%08x\n"
+msgstr "  кількість бітів: %u, базова адреса: 0x%08x\n"
+
+#: vms-alpha.c:6463
+#, c-format
+msgid "   bitmap: 0x%08x (count: %u):\n"
+msgstr ""
+
+#: vms-alpha.c:6470
+#, c-format
+msgid " %08x"
+msgstr " %08x"
+
+#: vms-alpha.c:6495
+#, c-format
+msgid "  image %u (%u entries)\n"
+msgstr "  образ %u (%u записів)\n"
+
+#: vms-alpha.c:6500
+#, c-format
+msgid "   offset: 0x%08x, val: 0x%08x\n"
+msgstr "   відступ: 0x%08x, значення: 0x%08x\n"
+
+#: vms-alpha.c:6521
+#, c-format
+msgid "  image %u (%u entries), offsets:\n"
+msgstr ""
+
+#: vms-alpha.c:6528
+#, c-format
+msgid " 0x%08x"
+msgstr " 0x%08x"
+
+#. 64 bits.
+#: vms-alpha.c:6650
+#, c-format
+msgid "64 bits *unhandled*\n"
+msgstr ""
+
+#: vms-alpha.c:6654
+#, c-format
+msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6665
+#, c-format
+msgid "non-contiguous array of %s\n"
+msgstr "розривний масив %s\n"
+
+#: vms-alpha.c:6669
+#, c-format
+msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n"
+msgstr ""
+
+#: vms-alpha.c:6673
+#, c-format
+msgid "arsize: %u, a0: 0x%08x\n"
+msgstr "arsize: %u, a0: 0x%08x\n"
+
+#: vms-alpha.c:6677
+#, c-format
+msgid "Strides:\n"
+msgstr "Кроки:\n"
+
+#: vms-alpha.c:6682
+#, c-format
+msgid "[%u]: %u\n"
+msgstr "[%u]: %u\n"
+
+#: vms-alpha.c:6687
+#, c-format
+msgid "Bounds:\n"
+msgstr "Межі:\n"
+
+#: vms-alpha.c:6692
+#, c-format
+msgid "[%u]: Lower: %u, upper: %u\n"
+msgstr "[%u]: нижня: %u, верхня: %u\n"
+
+#: vms-alpha.c:6704
+#, c-format
+msgid "unaligned bit-string of %s\n"
+msgstr "невирівняний бітовий рядок %s\n"
+
+#: vms-alpha.c:6708
+#, c-format
+msgid "base: %u, pos: %u\n"
+msgstr "основа: %u, позиція: %u\n"
+
+#: vms-alpha.c:6728
+#, c-format
+msgid "vflags: 0x%02x, value: 0x%08x "
+msgstr "vflags: 0x%02x, значення: 0x%08x "
+
+#: vms-alpha.c:6734
+#, c-format
+msgid "(no value)\n"
+msgstr "(нема значення)\n"
+
+#: vms-alpha.c:6737
+#, c-format
+msgid "(not active)\n"
+msgstr "(неактивне)\n"
+
+#: vms-alpha.c:6740
+#, c-format
+msgid "(not allocated)\n"
+msgstr "(не розміщено)\n"
+
+#: vms-alpha.c:6743
+#, c-format
+msgid "(descriptor)\n"
+msgstr "(дескриптор)\n"
+
+#: vms-alpha.c:6747
+#, c-format
+msgid "(trailing value)\n"
+msgstr ""
+
+#: vms-alpha.c:6750
+#, c-format
+msgid "(value spec follows)\n"
+msgstr ""
+
+#: vms-alpha.c:6753
+#, c-format
+msgid "(at bit offset %u)\n"
+msgstr ""
+
+#: vms-alpha.c:6756
+#, c-format
+msgid "(reg: %u, disp: %u, indir: %u, kind: "
+msgstr ""
+
+#: vms-alpha.c:6763
+msgid "literal"
+msgstr "літерал"
+
+#: vms-alpha.c:6766
+msgid "address"
+msgstr "адреса"
+
+#: vms-alpha.c:6769
+msgid "desc"
+msgstr "деск"
+
+#: vms-alpha.c:6772
+msgid "reg"
+msgstr "рег"
+
+#: vms-alpha.c:6847
+#, c-format
+msgid "Debug symbol table:\n"
+msgstr "Таблиця символів зневаджування:\n"
+
+#: vms-alpha.c:6858
+#, c-format
+msgid "cannot read DST header\n"
+msgstr "не вдалося прочитати заголовок DST\n"
+
+#: vms-alpha.c:6863
+#, c-format
+msgid " type: %3u, len: %3u (at 0x%08x): "
+msgstr " тип: %3u, довжина: %3u (за 0x%08x): "
+
+#: vms-alpha.c:6877
+#, c-format
+msgid "cannot read DST symbol\n"
+msgstr "не вдалося прочитати символ DST\n"
+
+#: vms-alpha.c:6920
+#, c-format
+msgid "standard data: %s\n"
+msgstr "стандартні дані: %s\n"
+
+#: vms-alpha.c:6923 vms-alpha.c:7007
+#, c-format
+msgid "    name: %.*s\n"
+msgstr "    назва: %.*s\n"
+
+#: vms-alpha.c:6930
+#, c-format
+msgid "modbeg\n"
+msgstr "modbeg\n"
+
+#: vms-alpha.c:6931
+#, c-format
+msgid "   flags: %d, language: %u, major: %u, minor: %u\n"
+msgstr "   прапорці: %d, мова: %u, старший: %u, молодший: %u\n"
+
+#: vms-alpha.c:6937 vms-alpha.c:7203
+#, c-format
+msgid "   module name: %.*s\n"
+msgstr "   назва модуля: %.*s\n"
+
+#: vms-alpha.c:6940
+#, c-format
+msgid "   compiler   : %.*s\n"
+msgstr "   компілятор : %.*s\n"
+
+#: vms-alpha.c:6945
+#, c-format
+msgid "modend\n"
+msgstr "modend\n"
+
+#: vms-alpha.c:6952
+msgid "rtnbeg\n"
+msgstr "rtnbeg\n"
+
+#: vms-alpha.c:6953
+#, c-format
+msgid "    flags: %u, address: 0x%08x, pd-address: 0x%08x\n"
+msgstr "    прапорці: %u, адреса: 0x%08x, pd-адреса: 0x%08x\n"
+
+#: vms-alpha.c:6958
+#, c-format
+msgid "    routine name: %.*s\n"
+msgstr "    назва процедури: %.*s\n"
+
+#: vms-alpha.c:6966
+#, c-format
+msgid "rtnend: size 0x%08x\n"
+msgstr "rtnend: розмір 0x%08x\n"
+
+#: vms-alpha.c:6974
+#, c-format
+msgid "prolog: bkpt address 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:6982
+#, c-format
+msgid "epilog: flags: %u, count: %u\n"
+msgstr ""
+
+#: vms-alpha.c:6991
+#, c-format
+msgid "blkbeg: address: 0x%08x, name: %.*s\n"
+msgstr "blkbeg: адреса: 0x%08x, назва: %.*s\n"
+
+#: vms-alpha.c:7000
+#, c-format
+msgid "blkend: size: 0x%08x\n"
+msgstr "blkend: розмір: 0x%08x\n"
+
+#: vms-alpha.c:7006
+#, c-format
+msgid "typspec (len: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:7013
+#, c-format
+msgid "septyp, name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7022
+#, c-format
+msgid "recbeg: name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7029
+#, c-format
+msgid "recend\n"
+msgstr "recend\n"
+
+#: vms-alpha.c:7032
+#, c-format
+msgid "enumbeg, len: %u, name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7036
+#, c-format
+msgid "enumelt, name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7040
+#, c-format
+msgid "enumend\n"
+msgstr ""
+
+#: vms-alpha.c:7057
+#, c-format
+msgid "discontiguous range (nbr: %u)\n"
+msgstr "розривний діапазон (nbr: %u)\n"
+
+#: vms-alpha.c:7059
+#, c-format
+msgid "    address: 0x%08x, size: %u\n"
+msgstr "    адреса: 0x%08x, розмір: %u\n"
+
+#: vms-alpha.c:7069
+#, c-format
+msgid "line num  (len: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:7086
+#, c-format
+msgid "delta_pc_w %u\n"
+msgstr "delta_pc_w %u\n"
+
+#: vms-alpha.c:7093
+#, c-format
+msgid "incr_linum(b): +%u\n"
+msgstr "incr_linum(b): +%u\n"
+
+#: vms-alpha.c:7099
+#, c-format
+msgid "incr_linum_w: +%u\n"
+msgstr "incr_linum_w: +%u\n"
+
+#: vms-alpha.c:7105
+#, c-format
+msgid "incr_linum_l: +%u\n"
+msgstr "incr_linum_l: +%u\n"
+
+#: vms-alpha.c:7111
+#, c-format
+msgid "set_line_num(w) %u\n"
+msgstr "set_line_num(w) %u\n"
+
+#: vms-alpha.c:7116
+#, c-format
+msgid "set_line_num_b %u\n"
+msgstr "set_line_num_b %u\n"
+
+#: vms-alpha.c:7121
+#, c-format
+msgid "set_line_num_l %u\n"
+msgstr "set_line_num_l %u\n"
+
+#: vms-alpha.c:7126
+#, c-format
+msgid "set_abs_pc: 0x%08x\n"
+msgstr "set_abs_pc: 0x%08x\n"
+
+#: vms-alpha.c:7130
+#, c-format
+msgid "delta_pc_l: +0x%08x\n"
+msgstr "delta_pc_l: +0x%08x\n"
+
+#: vms-alpha.c:7135
+#, c-format
+msgid "term(b): 0x%02x"
+msgstr ""
+
+#: vms-alpha.c:7137
+#, c-format
+msgid "        pc: 0x%08x\n"
+msgstr "        pc: 0x%08x\n"
+
+#: vms-alpha.c:7142
+#, c-format
+msgid "term_w: 0x%04x"
+msgstr "term_w: 0x%04x"
+
+#: vms-alpha.c:7144
+#, c-format
+msgid "    pc: 0x%08x\n"
+msgstr "    pc: 0x%08x\n"
+
+#: vms-alpha.c:7150
+#, c-format
+msgid "delta pc +%-4d"
+msgstr ""
+
+#: vms-alpha.c:7153
+#, c-format
+msgid "    pc: 0x%08x line: %5u\n"
+msgstr ""
+
+#: vms-alpha.c:7158
+#, c-format
+msgid "    *unhandled* cmd %u\n"
+msgstr ""
+
+#: vms-alpha.c:7173
+#, c-format
+msgid "source (len: %u)\n"
+msgstr "джерело (довжина: %u)\n"
+
+#: vms-alpha.c:7187
+#, c-format
+msgid "   declfile: len: %u, flags: %u, fileid: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7191
+#, c-format
+msgid "   rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7200
+#, c-format
+msgid "   filename   : %.*s\n"
+msgstr "   назва файла: %.*s\n"
+
+#: vms-alpha.c:7209
+#, c-format
+msgid "   setfile %u\n"
+msgstr ""
+
+#: vms-alpha.c:7214 vms-alpha.c:7219
+#, c-format
+msgid "   setrec %u\n"
+msgstr ""
+
+#: vms-alpha.c:7224 vms-alpha.c:7229
+#, c-format
+msgid "   setlnum %u\n"
+msgstr ""
+
+#: vms-alpha.c:7234 vms-alpha.c:7239
+#, c-format
+msgid "   deflines %u\n"
+msgstr ""
+
+#: vms-alpha.c:7243
+#, c-format
+msgid "   formfeed\n"
+msgstr ""
+
+#: vms-alpha.c:7247
+#, c-format
+msgid "   *unhandled* cmd %u\n"
+msgstr ""
+
+#: vms-alpha.c:7259
+#, c-format
+msgid "*unhandled* dst type %u\n"
+msgstr ""
+
+#: vms-alpha.c:7291
+#, c-format
+msgid "cannot read EIHD\n"
+msgstr "не вдалося прочитати EIHD\n"
+
+#: vms-alpha.c:7294
+#, c-format
+msgid "EIHD: (size: %u, nbr blocks: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:7297
+#, c-format
+msgid " majorid: %u, minorid: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7305
+msgid "executable"
+msgstr "виконуваний"
+
+#: vms-alpha.c:7308
+msgid "linkable image"
+msgstr "компонований образ"
+
+#: vms-alpha.c:7314
+#, c-format
+msgid " image type: %u (%s)"
+msgstr " тип образу: %u (%s)"
+
+#: vms-alpha.c:7320
+msgid "native"
+msgstr "стандартний"
+
+#: vms-alpha.c:7323
+msgid "CLI"
+msgstr "CLI"
+
+#: vms-alpha.c:7329
+#, c-format
+msgid ", subtype: %u (%s)\n"
+msgstr ", підтип: %u (%s)\n"
+
+#: vms-alpha.c:7335
+#, c-format
+msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7339
+#, c-format
+msgid " fixup info rva: "
+msgstr ""
+
+#: vms-alpha.c:7341
+#, c-format
+msgid ", symbol vector rva: "
+msgstr ""
+
+#: vms-alpha.c:7344
+#, c-format
+msgid ""
+"\n"
+" version array off: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7348
+#, c-format
+msgid " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7354
+#, c-format
+msgid " linker flags: %08x:"
+msgstr " прапорці компонувальника: %08x:"
+
+#: vms-alpha.c:7384
+#, c-format
+msgid " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7390
+#, c-format
+msgid " BPAGE: %u"
+msgstr ""
+
+#: vms-alpha.c:7396
+#, c-format
+msgid ", ext fixup offset: %u, no_opt psect off: %u"
+msgstr ""
+
+#: vms-alpha.c:7399
+#, c-format
+msgid ", alias: %u\n"
+msgstr ", псевдонім: %u\n"
+
+#: vms-alpha.c:7407
+#, c-format
+msgid "system version array information:\n"
+msgstr "масив даних щодо версії системи:\n"
+
+#: vms-alpha.c:7411
+#, c-format
+msgid "cannot read EIHVN header\n"
+msgstr "не вдалося прочитати заголовок EIHVN\n"
+
+#: vms-alpha.c:7421
+#, c-format
+msgid "cannot read EIHVN version\n"
+msgstr "не вдалося прочитати версію EIHVN\n"
+
+#: vms-alpha.c:7424
+#, c-format
+msgid "   %02u "
+msgstr "   %02u "
+
+#: vms-alpha.c:7428
+msgid "BASE_IMAGE       "
+msgstr ""
+
+#: vms-alpha.c:7431
+msgid "MEMORY_MANAGEMENT"
+msgstr ""
+
+#: vms-alpha.c:7434
+msgid "IO               "
+msgstr "IO               "
+
+#: vms-alpha.c:7437
+msgid "FILES_VOLUMES    "
+msgstr ""
+
+#: vms-alpha.c:7440
+msgid "PROCESS_SCHED    "
+msgstr ""
+
+#: vms-alpha.c:7443
+msgid "SYSGEN           "
+msgstr ""
+
+#: vms-alpha.c:7446
+msgid "CLUSTERS_LOCKMGR "
+msgstr ""
+
+#: vms-alpha.c:7449
+msgid "LOGICAL_NAMES    "
+msgstr "LOGICAL_NAMES    "
+
+#: vms-alpha.c:7452
+msgid "SECURITY         "
+msgstr "SECURITY         "
+
+#: vms-alpha.c:7455
+msgid "IMAGE_ACTIVATOR  "
+msgstr "IMAGE_ACTIVATOR  "
+
+#: vms-alpha.c:7458
+msgid "NETWORKS         "
+msgstr "NETWORKS         "
+
+#: vms-alpha.c:7461
+msgid "COUNTERS         "
+msgstr "COUNTERS         "
+
+#: vms-alpha.c:7464
+msgid "STABLE           "
+msgstr "STABLE           "
+
+#: vms-alpha.c:7467
+msgid "MISC             "
+msgstr "MISC             "
+
+#: vms-alpha.c:7470
+msgid "CPU              "
+msgstr "CPU              "
+
+#: vms-alpha.c:7473
+msgid "VOLATILE         "
+msgstr "VOLATILE         "
+
+#: vms-alpha.c:7476
+msgid "SHELL            "
+msgstr "SHELL            "
+
+#: vms-alpha.c:7479
+msgid "POSIX            "
+msgstr "POSIX            "
+
+#: vms-alpha.c:7482
+msgid "MULTI_PROCESSING "
+msgstr "MULTI_PROCESSING "
+
+#: vms-alpha.c:7485
+msgid "GALAXY           "
+msgstr "GALAXY           "
+
+#: vms-alpha.c:7488
+msgid "*unknown*        "
+msgstr "*невідомо*       "
+
+#: vms-alpha.c:7491
+#, c-format
+msgid ": %u.%u\n"
+msgstr ": %u.%u\n"
+
+#: vms-alpha.c:7504 vms-alpha.c:7763
+#, c-format
+msgid "cannot read EIHA\n"
+msgstr ""
+
+#: vms-alpha.c:7507
+#, c-format
+msgid "Image activation:  (size=%u)\n"
+msgstr ""
+
+#: vms-alpha.c:7509
+#, c-format
+msgid " First address : 0x%08x 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7512
+#, c-format
+msgid " Second address: 0x%08x 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7515
+#, c-format
+msgid " Third address : 0x%08x 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7518
+#, c-format
+msgid " Fourth address: 0x%08x 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7521
+#, c-format
+msgid " Shared image  : 0x%08x 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7532
+#, c-format
+msgid "cannot read EIHI\n"
+msgstr ""
+
+#: vms-alpha.c:7535
+#, c-format
+msgid "Image identification: (major: %u, minor: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:7538
+#, c-format
+msgid " image name       : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7540
+#, c-format
+msgid " link time        : %s\n"
+msgstr ""
+
+#: vms-alpha.c:7542
+#, c-format
+msgid " image ident      : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7544
+#, c-format
+msgid " linker ident     : %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7546
+#, c-format
+msgid " image build ident: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7556
+#, c-format
+msgid "cannot read EIHS\n"
+msgstr ""
+
+#: vms-alpha.c:7559
+#, c-format
+msgid "Image symbol & debug table: (major: %u, minor: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:7564
+#, c-format
+msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n"
+msgstr ""
+
+#: vms-alpha.c:7568
+#, c-format
+msgid " global symbol table: vbn: %u, records: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7572
+#, c-format
+msgid " debug module table : vbn: %u, size: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7585
+#, c-format
+msgid "cannot read EISD\n"
+msgstr ""
+
+#: vms-alpha.c:7595
+#, c-format
+msgid "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:7602
+#, c-format
+msgid " section: base: 0x%08x%08x size: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7607
+#, c-format
+msgid " flags: 0x%04x"
+msgstr ""
+
+#: vms-alpha.c:7644
+#, c-format
+msgid " vbn: %u, pfc: %u, matchctl: %u type: %u ("
+msgstr ""
+
+#: vms-alpha.c:7650
+msgid "NORMAL"
+msgstr "NORMAL"
+
+#: vms-alpha.c:7653
+msgid "SHRFXD"
+msgstr "SHRFXD"
+
+#: vms-alpha.c:7656
+msgid "PRVFXD"
+msgstr "PRVFXD"
+
+#: vms-alpha.c:7659
+msgid "SHRPIC"
+msgstr "SHRPIC"
+
+#: vms-alpha.c:7662
+msgid "PRVPIC"
+msgstr "PRVPIC"
+
+#: vms-alpha.c:7665
+msgid "USRSTACK"
+msgstr ""
+
+#: vms-alpha.c:7673
+#, c-format
+msgid " ident: 0x%08x, name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7683
+#, c-format
+msgid "cannot read DMT\n"
+msgstr ""
+
+#: vms-alpha.c:7687
+#, c-format
+msgid "Debug module table:\n"
+msgstr ""
+
+#: vms-alpha.c:7696
+#, c-format
+msgid "cannot read DMT header\n"
+msgstr ""
+
+#: vms-alpha.c:7701
+#, c-format
+msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n"
+msgstr ""
+
+#: vms-alpha.c:7711
+#, c-format
+msgid "cannot read DMT psect\n"
+msgstr ""
+
+#: vms-alpha.c:7714
+#, c-format
+msgid "  psect start: 0x%08x, length: %u\n"
+msgstr ""
+
+#: vms-alpha.c:7727
+#, c-format
+msgid "cannot read DST\n"
+msgstr ""
+
+#: vms-alpha.c:7737
+#, c-format
+msgid "cannot read GST\n"
+msgstr ""
+
+#: vms-alpha.c:7741
+#, c-format
+msgid "Global symbol table:\n"
+msgstr ""
+
+#: vms-alpha.c:7769
+#, c-format
+msgid "Image activator fixup: (major: %u, minor: %u)\n"
+msgstr ""
+
+#: vms-alpha.c:7772
+#, c-format
+msgid "  iaflink : 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:7775
+#, c-format
+msgid "  fixuplnk: 0x%08x %08x\n"
+msgstr ""
+
+#: vms-alpha.c:7778
+#, c-format
+msgid "  size : %u\n"
+msgstr ""
+
+#: vms-alpha.c:7780
+#, c-format
+msgid "  flags: 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7784
+#, c-format
+msgid "  qrelfixoff: %5u, lrelfixoff: %5u\n"
+msgstr ""
+
+#: vms-alpha.c:7788
+#, c-format
+msgid "  qdotadroff: %5u, ldotadroff: %5u\n"
+msgstr ""
+
+#: vms-alpha.c:7792
+#, c-format
+msgid "  codeadroff: %5u, lpfixoff  : %5u\n"
+msgstr ""
+
+#: vms-alpha.c:7795
+#, c-format
+msgid "  chgprtoff : %5u\n"
+msgstr ""
+
+#: vms-alpha.c:7798
+#, c-format
+msgid "  shlstoff  : %5u, shrimgcnt : %5u\n"
+msgstr ""
+
+#: vms-alpha.c:7800
+#, c-format
+msgid "  shlextra  : %5u, permctx   : %5u\n"
+msgstr ""
+
+#: vms-alpha.c:7803
+#, c-format
+msgid "  base_va : 0x%08x\n"
+msgstr ""
+
+#: vms-alpha.c:7805
+#, c-format
+msgid "  lppsbfixoff: %5u\n"
+msgstr ""
+
+#: vms-alpha.c:7813
+#, c-format
+msgid " Shareable images:\n"
+msgstr ""
+
+#: vms-alpha.c:7817
+#, c-format
+msgid "  %u: size: %u, flags: 0x%02x, name: %.*s\n"
+msgstr ""
+
+#: vms-alpha.c:7824
+#, c-format
+msgid " quad-word relocation fixups:\n"
+msgstr ""
+
+#: vms-alpha.c:7829
+#, c-format
+msgid " long-word relocation fixups:\n"
+msgstr ""
+
+#: vms-alpha.c:7834
+#, c-format
+msgid " quad-word .address reference fixups:\n"
+msgstr ""
+
+#: vms-alpha.c:7839
+#, c-format
+msgid " long-word .address reference fixups:\n"
+msgstr ""
+
+#: vms-alpha.c:7844
+#, c-format
+msgid " Code Address Reference Fixups:\n"
+msgstr ""
+
+#: vms-alpha.c:7849
+#, c-format
+msgid " Linkage Pairs Referece Fixups:\n"
+msgstr ""
+
+#: vms-alpha.c:7858
+#, c-format
+msgid " Change Protection (%u entries):\n"
+msgstr ""
+
+#: vms-alpha.c:7863
+#, c-format
+msgid "  base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x "
+msgstr ""
+
+#. FIXME: we do not yet support relocatable link.  It is not obvious
+#. how to do it for debug infos.
+#: vms-alpha.c:8694
+msgid "%P: relocatable link is not supported\n"
+msgstr ""
+
+#: vms-alpha.c:8764
+msgid "%P: multiple entry points: in modules %B and %B\n"
+msgstr ""
+
+#: vms-lib.c:1421
+#, c-format
+msgid "could not open shared image '%s' from '%s'"
+msgstr ""
+
+#: vms-misc.c:360
+msgid "_bfd_vms_output_counted called with zero bytes"
+msgstr ""
+
+#: vms-misc.c:365
+msgid "_bfd_vms_output_counted called with too many bytes"
+msgstr ""
+
+#: xcofflink.c:836
+#, c-format
+msgid "%s: XCOFF shared object when not producing XCOFF output"
+msgstr ""
+
+#: xcofflink.c:857
+#, c-format
+msgid "%s: dynamic object with no .loader section"
+msgstr ""
+
+#: xcofflink.c:1416
+msgid "%B: `%s' has line numbers but no enclosing section"
+msgstr ""
+
+#: xcofflink.c:1468
+msgid "%B: class %d symbol `%s' has no aux entries"
+msgstr ""
+
+#: xcofflink.c:1490
+msgid "%B: symbol `%s' has unrecognized csect type %d"
+msgstr ""
+
+#: xcofflink.c:1502
+msgid "%B: bad XTY_ER symbol `%s': class %d scnum %d scnlen %d"
+msgstr ""
+
+#: xcofflink.c:1531
+msgid "%B: XMC_TC0 symbol `%s' is class %d scnlen %d"
+msgstr ""
+
+#: xcofflink.c:1677
+msgid "%B: csect `%s' not in enclosing section"
+msgstr ""
+
+#: xcofflink.c:1784
+msgid "%B: misplaced XTY_LD `%s'"
+msgstr ""
+
+#: xcofflink.c:2103
+msgid "%B: reloc %s:%d not in csect"
+msgstr ""
+
+#: xcofflink.c:3194
+#, c-format
+msgid "%s: no such symbol"
+msgstr ""
+
+#: xcofflink.c:3299
+#, c-format
+msgid "warning: attempt to export undefined symbol `%s'"
+msgstr ""
+
+#: xcofflink.c:3681
+msgid "error: undefined symbol __rtinit"
+msgstr ""
+
+#: xcofflink.c:4060
+msgid "%B: loader reloc in unrecognized section `%s'"
+msgstr ""
+
+#: xcofflink.c:4071
+msgid "%B: `%s' in loader reloc but not loader sym"
+msgstr ""
+
+#: xcofflink.c:4087
+msgid "%B: loader reloc in read-only section %A"
+msgstr ""
+
+#: xcofflink.c:5109
+#, c-format
+msgid "TOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compiling"
+msgstr ""
+
+#: elf32-ia64.c:628 elf64-ia64.c:628
+msgid "%B: Can't relax br at 0x%lx in section `%A'. Please use brl or indirect branch."
+msgstr ""
+
+#: elf32-ia64.c:2290 elf64-ia64.c:2290
+msgid "@pltoff reloc against local symbol"
+msgstr ""
+
+#: elf32-ia64.c:3693 elf64-ia64.c:3693
+#, c-format
+msgid "%s: short data segment overflowed (0x%lx >= 0x400000)"
+msgstr ""
+
+#: elf32-ia64.c:3704 elf64-ia64.c:3704
+#, c-format
+msgid "%s: __gp does not cover short data segment"
+msgstr ""
+
+#: elf32-ia64.c:3971 elf64-ia64.c:3971
+msgid "%B: non-pic code with imm relocation against dynamic symbol `%s'"
+msgstr ""
+
+#: elf32-ia64.c:4038 elf64-ia64.c:4038
+msgid "%B: @gprel relocation against dynamic symbol %s"
+msgstr ""
+
+#: elf32-ia64.c:4101 elf64-ia64.c:4101
+msgid "%B: linking non-pic code in a position independent executable"
+msgstr ""
+
+#: elf32-ia64.c:4238 elf64-ia64.c:4238
+msgid "%B: @internal branch to dynamic symbol %s"
+msgstr ""
+
+#: elf32-ia64.c:4240 elf64-ia64.c:4240
+msgid "%B: speculation fixup to dynamic symbol %s"
+msgstr ""
+
+#: elf32-ia64.c:4242 elf64-ia64.c:4242
+msgid "%B: @pcrel relocation against dynamic symbol %s"
+msgstr ""
+
+#: elf32-ia64.c:4439 elf64-ia64.c:4439
+msgid "unsupported reloc"
+msgstr ""
+
+#: elf32-ia64.c:4477 elf64-ia64.c:4477
+msgid "%B: missing TLS section for relocation %s against `%s' at 0x%lx in section `%A'."
+msgstr ""
+
+#: elf32-ia64.c:4492 elf64-ia64.c:4492
+msgid "%B: Can't relax br (%s) to `%s' at 0x%lx in section `%A' with size 0x%lx (> 0x1000000)."
+msgstr ""
+
+#: elf32-ia64.c:4754 elf64-ia64.c:4754
+msgid "%B: linking trap-on-NULL-dereference with non-trapping files"
+msgstr ""
+
+#: elf32-ia64.c:4763 elf64-ia64.c:4763
+msgid "%B: linking big-endian files with little-endian files"
+msgstr ""
+
+#: elf32-ia64.c:4772 elf64-ia64.c:4772
+msgid "%B: linking 64-bit files with 32-bit files"
+msgstr ""
+
+#: elf32-ia64.c:4781 elf64-ia64.c:4781
+msgid "%B: linking constant-gp files with non-constant-gp files"
+msgstr ""
+
+#: elf32-ia64.c:4791 elf64-ia64.c:4791
+msgid "%B: linking auto-pic files with non-auto-pic files"
+msgstr ""
+
+#: peigen.c:1002 pepigen.c:1002 pex64igen.c:1002
+#, c-format
+msgid "%s: line number overflow: 0x%lx > 0xffff"
+msgstr "%s: переповнення номерів рядків; 0x%lx > 0xffff"
+
+#: peigen.c:1029 pepigen.c:1029 pex64igen.c:1029
+msgid "Export Directory [.edata (or where ever we found it)]"
+msgstr ""
+
+#: peigen.c:1030 pepigen.c:1030 pex64igen.c:1030
+msgid "Import Directory [parts of .idata]"
+msgstr "Каталог імпортування [частини .idata]"
+
+#: peigen.c:1031 pepigen.c:1031 pex64igen.c:1031
+msgid "Resource Directory [.rsrc]"
+msgstr "Каталог ресурсів [.rsrc]"
+
+#: peigen.c:1032 pepigen.c:1032 pex64igen.c:1032
+msgid "Exception Directory [.pdata]"
+msgstr "Каталог виключень [.pdata]"
+
+#: peigen.c:1033 pepigen.c:1033 pex64igen.c:1033
+msgid "Security Directory"
+msgstr "Каталог захисту"
+
+#: peigen.c:1034 pepigen.c:1034 pex64igen.c:1034
+msgid "Base Relocation Directory [.reloc]"
+msgstr "Каталог базового пересування [.reloc]"
+
+#: peigen.c:1035 pepigen.c:1035 pex64igen.c:1035
+msgid "Debug Directory"
+msgstr "Каталог діагностики"
+
+#: peigen.c:1036 pepigen.c:1036 pex64igen.c:1036
+msgid "Description Directory"
+msgstr "Каталог описів"
+
+#: peigen.c:1037 pepigen.c:1037 pex64igen.c:1037
+msgid "Special Directory"
+msgstr "Особливий каталог"
+
+#: peigen.c:1038 pepigen.c:1038 pex64igen.c:1038
+msgid "Thread Storage Directory [.tls]"
+msgstr "Каталог зберігання потоків [.tls]"
+
+#: peigen.c:1039 pepigen.c:1039 pex64igen.c:1039
+msgid "Load Configuration Directory"
+msgstr ""
+
+#: peigen.c:1040 pepigen.c:1040 pex64igen.c:1040
+msgid "Bound Import Directory"
+msgstr ""
+
+#: peigen.c:1041 pepigen.c:1041 pex64igen.c:1041
+msgid "Import Address Table Directory"
+msgstr ""
+
+#: peigen.c:1042 pepigen.c:1042 pex64igen.c:1042
+msgid "Delay Import Directory"
+msgstr "Каталог відкладеного імпортування"
+
+#: peigen.c:1043 pepigen.c:1043 pex64igen.c:1043
+msgid "CLR Runtime Header"
+msgstr "Динамічний заголовок CLR"
+
+#: peigen.c:1044 pepigen.c:1044 pex64igen.c:1044
+msgid "Reserved"
+msgstr "Зарезервовано"
+
+#: peigen.c:1104 pepigen.c:1104 pex64igen.c:1104
+#, c-format
+msgid ""
+"\n"
+"There is an import table, but the section containing it could not be found\n"
+msgstr ""
+"\n"
+"Існує таблиця імпортування, але розділу, що її містить не знайдено\n"
+
+#: peigen.c:1109 pepigen.c:1109 pex64igen.c:1109
+#, c-format
+msgid ""
+"\n"
+"There is an import table in %s at 0x%lx\n"
+msgstr ""
+"\n"
+"У %s зберігається таблиця імпортування у 0x%lx\n"
+
+#: peigen.c:1151 pepigen.c:1151 pex64igen.c:1151
+#, c-format
+msgid ""
+"\n"
+"Function descriptor located at the start address: %04lx\n"
+msgstr ""
+"\n"
+"Дескриптор функції розташовано за початковою адресою %04lx\n"
+
+#: peigen.c:1154 pepigen.c:1154 pex64igen.c:1154
+#, c-format
+msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n"
+msgstr ""
+
+#: peigen.c:1162 pepigen.c:1162 pex64igen.c:1162
+#, c-format
+msgid ""
+"\n"
+"No reldata section! Function descriptor not decoded.\n"
+msgstr ""
+"\n"
+"Немає розділу reldata! Дескриптор функції не розшифровано.\n"
+
+#: peigen.c:1167 pepigen.c:1167 pex64igen.c:1167
+#, c-format
+msgid ""
+"\n"
+"The Import Tables (interpreted %s section contents)\n"
+msgstr ""
+"\n"
+"Таблиця імпортування (оброблений вміст розділу %s)\n"
+
+#: peigen.c:1170 pepigen.c:1170 pex64igen.c:1170
+#, c-format
+msgid ""
+" vma:            Hint    Time      Forward  DLL       First\n"
+"                 Table   Stamp     Chain    Name      Thunk\n"
+msgstr ""
+
+#: peigen.c:1218 pepigen.c:1218 pex64igen.c:1218
+#, c-format
+msgid ""
+"\n"
+"\tDLL Name: %s\n"
+msgstr ""
+"\n"
+"\tНазва DLL: %s\n"
+
+#: peigen.c:1229 pepigen.c:1229 pex64igen.c:1229
+#, c-format
+msgid "\tvma:  Hint/Ord Member-Name Bound-To\n"
+msgstr ""
+
+#: peigen.c:1254 pepigen.c:1254 pex64igen.c:1254
+#, c-format
+msgid ""
+"\n"
+"There is a first thunk, but the section containing it could not be found\n"
+msgstr ""
+
+#: peigen.c:1415 pepigen.c:1415 pex64igen.c:1415
+#, c-format
+msgid ""
+"\n"
+"There is an export table, but the section containing it could not be found\n"
+msgstr ""
+
+#: peigen.c:1424 pepigen.c:1424 pex64igen.c:1424
+#, c-format
+msgid ""
+"\n"
+"There is an export table in %s, but it does not fit into that section\n"
+msgstr ""
+
+#: peigen.c:1430 pepigen.c:1430 pex64igen.c:1430
+#, c-format
+msgid ""
+"\n"
+"There is an export table in %s at 0x%lx\n"
+msgstr ""
+
+#: peigen.c:1458 pepigen.c:1458 pex64igen.c:1458
+#, c-format
+msgid ""
+"\n"
+"The Export Tables (interpreted %s section contents)\n"
+"\n"
+msgstr ""
+
+#: peigen.c:1462 pepigen.c:1462 pex64igen.c:1462
+#, c-format
+msgid "Export Flags \t\t\t%lx\n"
+msgstr "Прапорці експортування\t\t%lx\n"
+
+#: peigen.c:1465 pepigen.c:1465 pex64igen.c:1465
+#, c-format
+msgid "Time/Date stamp \t\t%lx\n"
+msgstr "Позначка часу/дати\t\t%lx\n"
+
+#: peigen.c:1468 pepigen.c:1468 pex64igen.c:1468
+#, c-format
+msgid "Major/Minor \t\t\t%d/%d\n"
+msgstr ""
+
+#: peigen.c:1471 pepigen.c:1471 pex64igen.c:1471
+#, c-format
+msgid "Name \t\t\t\t"
+msgstr "Назва\t\t\t\t"
+
+#: peigen.c:1477 pepigen.c:1477 pex64igen.c:1477
+#, c-format
+msgid "Ordinal Base \t\t\t%ld\n"
+msgstr "Основа впорядковування\t\t%ld\n"
+
+#: peigen.c:1480 pepigen.c:1480 pex64igen.c:1480
+#, c-format
+msgid "Number in:\n"
+msgstr "Номер у:\n"
+
+#: peigen.c:1483 pepigen.c:1483 pex64igen.c:1483
+#, c-format
+msgid "\tExport Address Table \t\t%08lx\n"
+msgstr "\tТаблиця експортованих адрес \t\t%08lx\n"
+
+#: peigen.c:1487 pepigen.c:1487 pex64igen.c:1487
+#, c-format
+msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n"
+msgstr ""
+
+#: peigen.c:1490 pepigen.c:1490 pex64igen.c:1490
+#, c-format
+msgid "Table Addresses\n"
+msgstr "Табличні адреси\n"
+
+#: peigen.c:1493 pepigen.c:1493 pex64igen.c:1493
+#, c-format
+msgid "\tExport Address Table \t\t"
+msgstr "\tТаблиця експортованих адрес \t\t"
+
+#: peigen.c:1498 pepigen.c:1498 pex64igen.c:1498
+#, c-format
+msgid "\tName Pointer Table \t\t"
+msgstr ""
+
+#: peigen.c:1503 pepigen.c:1503 pex64igen.c:1503
+#, c-format
+msgid "\tOrdinal Table \t\t\t"
+msgstr "\tТаблиця номерів \t\t\t"
+
+#: peigen.c:1517 pepigen.c:1517 pex64igen.c:1517
+#, c-format
+msgid ""
+"\n"
+"Export Address Table -- Ordinal Base %ld\n"
+msgstr ""
+
+#: peigen.c:1536 pepigen.c:1536 pex64igen.c:1536
+msgid "Forwarder RVA"
+msgstr ""
+
+#: peigen.c:1547 pepigen.c:1547 pex64igen.c:1547
+msgid "Export RVA"
+msgstr "Експортований RVA"
+
+#: peigen.c:1554 pepigen.c:1554 pex64igen.c:1554
+#, c-format
+msgid ""
+"\n"
+"[Ordinal/Name Pointer] Table\n"
+msgstr ""
+
+#: peigen.c:1614 peigen.c:1797 pepigen.c:1614 pepigen.c:1797 pex64igen.c:1614
+#: pex64igen.c:1797
+#, c-format
+msgid "Warning, .pdata section size (%ld) is not a multiple of %d\n"
+msgstr "Попередження: розмір розділу .pdata (%ld) не є кратним до %d\n"
+
+#: peigen.c:1621 pepigen.c:1621 pex64igen.c:1621
+#, c-format
+msgid " vma:\t\t\tBegin Address    End Address      Unwind Info\n"
+msgstr ""
+
+#: peigen.c:1623 pepigen.c:1623 pex64igen.c:1623
+#, c-format
+msgid ""
+" vma:\t\tBegin    End      EH       EH       PrologEnd  Exception\n"
+"     \t\tAddress  Address  Handler  Data     Address    Mask\n"
+msgstr ""
+
+#: peigen.c:1697 pepigen.c:1697 pex64igen.c:1697
+#, c-format
+msgid " Register save millicode"
+msgstr " Мілікод збереження регістра"
+
+#: peigen.c:1700 pepigen.c:1700 pex64igen.c:1700
+#, c-format
+msgid " Register restore millicode"
+msgstr " Мілікод відновлення регістра"
+
+#: peigen.c:1703 pepigen.c:1703 pex64igen.c:1703
+#, c-format
+msgid " Glue code sequence"
+msgstr ""
+
+#: peigen.c:1803 pepigen.c:1803 pex64igen.c:1803
+#, c-format
+msgid ""
+" vma:\t\tBegin    Prolog   Function Flags    Exception EH\n"
+"     \t\tAddress  Length   Length   32b exc  Handler   Data\n"
+msgstr ""
+
+#: peigen.c:1929 pepigen.c:1929 pex64igen.c:1929
+#, c-format
+msgid ""
+"\n"
+"\n"
+"PE File Base Relocations (interpreted .reloc section contents)\n"
+msgstr ""
+
+#: peigen.c:1958 pepigen.c:1958 pex64igen.c:1958
+#, c-format
+msgid ""
+"\n"
+"Virtual Address: %08lx Chunk size %ld (0x%lx) Number of fixups %ld\n"
+msgstr ""
+
+#: peigen.c:1971 pepigen.c:1971 pex64igen.c:1971
+#, c-format
+msgid "\treloc %4d offset %4x [%4lx] %s"
+msgstr "\tпересування %4d відступ %4x [%4lx] %s"
+
+#. The MS dumpbin program reportedly ands with 0xff0f before
+#. printing the characteristics field.  Not sure why.  No reason to
+#. emulate it here.
+#: peigen.c:2010 pepigen.c:2010 pex64igen.c:2010
+#, c-format
+msgid ""
+"\n"
+"Characteristics 0x%x\n"
+msgstr ""
+"\n"
+"Характеристики 0x%x\n"
+
+#: peigen.c:2310 pepigen.c:2310 pex64igen.c:2310
+msgid "%B: unable to fill in DataDictionary[1] because .idata$2 is missing"
+msgstr "%B: не вдалося заповнити DataDictionary[1], оскільки не вистачає .idata$2"
+
+#: peigen.c:2330 pepigen.c:2330 pex64igen.c:2330
+msgid "%B: unable to fill in DataDictionary[1] because .idata$4 is missing"
+msgstr "%B: не вдалося заповнити DataDictionary[1], оскільки не вистачає .idata$4"
+
+#: peigen.c:2351 pepigen.c:2351 pex64igen.c:2351
+msgid "%B: unable to fill in DataDictionary[12] because .idata$5 is missing"
+msgstr "%B: не вдалося заповнити DataDictionary[12], оскільки не вистачає .idata$5"
+
+#: peigen.c:2371 pepigen.c:2371 pex64igen.c:2371
+msgid "%B: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing"
+msgstr "%B: не вдалося заповнити DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)], оскільки не вистачає .idata$6"
+
+#: peigen.c:2413 pepigen.c:2413 pex64igen.c:2413
+msgid "%B: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing"
+msgstr "%B: не вдалося заповнити DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)], оскільки .idata$6 не вистачає"
+
+#: peigen.c:2438 pepigen.c:2438 pex64igen.c:2438
+msgid "%B: unable to fill in DataDictionary[9] because __tls_used is missing"
+msgstr ""
diff --git a/bfd/ppcboot.c b/bfd/ppcboot.c
index c2b4c3b..b0718d8 100644
--- a/bfd/ppcboot.c
+++ b/bfd/ppcboot.c
@@ -1,6 +1,6 @@
 /* BFD back-end for PPCbug boot records.
    Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-   2007, 2008, 2009, 2011 Free Software Foundation, Inc.
+   2007, 2008, 2009, 2011, 2012 Free Software Foundation, Inc.
    Written by Michael Meissner, Cygnus Support, <meissner at cygnus.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -40,7 +40,8 @@
 #include "libbfd.h"
 
 /* PPCbug location structure */
-typedef struct ppcboot_location {
+typedef struct ppcboot_location
+{
   bfd_byte	ind;
   bfd_byte	head;
   bfd_byte	sector;
@@ -48,7 +49,8 @@ typedef struct ppcboot_location {
 } ppcboot_location_t;
 
 /* PPCbug partition table layout */
-typedef struct ppcboot_partition {
+typedef struct ppcboot_partition
+{
   ppcboot_location_t	partition_begin;	/* partition begin */
   ppcboot_location_t	partition_end;		/* partition end */
   bfd_byte		sector_begin[4];	/* 32-bit start RBA (zero-based), little endian */
@@ -56,7 +58,8 @@ typedef struct ppcboot_partition {
 } ppcboot_partition_t;
 
 /* PPCbug boot layout.  */
-typedef struct ppcboot_hdr {
+typedef struct ppcboot_hdr
+{
   bfd_byte		pc_compatibility[446];	/* x86 instruction field */
   ppcboot_partition_t	partition[4];		/* partition information */
   bfd_byte		signature[2];		/* 0x55 and 0xaa */
@@ -80,7 +83,8 @@ ppcboot_hdr_t;
 #define PPC_IND 0x41
 
 /* Information needed for ppcboot header */
-typedef struct ppcboot_data {
+typedef struct ppcboot_data
+{
   ppcboot_hdr_t	header;				/* raw header */
   asection *sec;				/* single section */
 } ppcboot_data_t;
@@ -89,28 +93,13 @@ typedef struct ppcboot_data {
    a start symbol, an end symbol, and an absolute length symbol.  */
 #define PPCBOOT_SYMS 3
 
-static bfd_boolean ppcboot_mkobject PARAMS ((bfd *));
-static const bfd_target *ppcboot_object_p PARAMS ((bfd *));
-static bfd_boolean ppcboot_set_arch_mach
-  PARAMS ((bfd *, enum bfd_architecture, unsigned long));
-static bfd_boolean ppcboot_get_section_contents
-  PARAMS ((bfd *, asection *, PTR, file_ptr, bfd_size_type));
-static long ppcboot_get_symtab_upper_bound PARAMS ((bfd *));
-static char *mangle_name PARAMS ((bfd *, char *));
-static long ppcboot_canonicalize_symtab PARAMS ((bfd *, asymbol **));
-static void ppcboot_get_symbol_info PARAMS ((bfd *, asymbol *, symbol_info *));
-static bfd_boolean ppcboot_set_section_contents
-  PARAMS ((bfd *, asection *, const PTR, file_ptr, bfd_size_type));
-static bfd_boolean ppcboot_bfd_print_private_bfd_data PARAMS ((bfd *, PTR));
-
-#define ppcboot_set_tdata(abfd, ptr) ((abfd)->tdata.any = (PTR) (ptr))
+#define ppcboot_set_tdata(abfd, ptr) ((abfd)->tdata.any = (ptr))
 #define ppcboot_get_tdata(abfd) ((ppcboot_data_t *) ((abfd)->tdata.any))
 

 /* Create a ppcboot object.  Invoked via bfd_set_format.  */
 
 static bfd_boolean
-ppcboot_mkobject (abfd)
-     bfd *abfd;
+ppcboot_mkobject (bfd *abfd)
 {
   if (!ppcboot_get_tdata (abfd))
     {
@@ -124,10 +113,9 @@ ppcboot_mkobject (abfd)
 

 /* Set the architecture to PowerPC */
 static bfd_boolean
-ppcboot_set_arch_mach (abfd, arch, machine)
-     bfd *abfd;
-     enum bfd_architecture arch;
-     unsigned long machine;
+ppcboot_set_arch_mach (bfd *abfd,
+		       enum bfd_architecture arch,
+		       unsigned long machine)
 {
   if (arch == bfd_arch_unknown)
     arch = bfd_arch_powerpc;
@@ -144,8 +132,7 @@ ppcboot_set_arch_mach (abfd, arch, machine)
    being ppcboot.  */
 
 static const bfd_target *
-ppcboot_object_p (abfd)
-     bfd *abfd;
+ppcboot_object_p (bfd *abfd)
 {
   struct stat statbuf;
   asection *sec;
@@ -175,7 +162,7 @@ ppcboot_object_p (abfd)
       return NULL;
     }
 
-  if (bfd_bread ((PTR) &hdr, (bfd_size_type) sizeof (hdr), abfd)
+  if (bfd_bread (&hdr, (bfd_size_type) sizeof (hdr), abfd)
       != sizeof (hdr))
     {
       if (bfd_get_error () != bfd_error_system_call)
@@ -218,7 +205,7 @@ ppcboot_object_p (abfd)
   ppcboot_mkobject (abfd);
   tdata = ppcboot_get_tdata (abfd);
   tdata->sec = sec;
-  memcpy ((PTR) &tdata->header, (PTR) &hdr, sizeof (ppcboot_hdr_t));
+  memcpy (&tdata->header, &hdr, sizeof (ppcboot_hdr_t));
 
   ppcboot_set_arch_mach (abfd, bfd_arch_powerpc, 0L);
   return abfd->xvec;
@@ -232,12 +219,11 @@ ppcboot_object_p (abfd)
 /* Get contents of the only section.  */
 
 static bfd_boolean
-ppcboot_get_section_contents (abfd, section, location, offset, count)
-     bfd *abfd;
-     asection *section ATTRIBUTE_UNUSED;
-     PTR location;
-     file_ptr offset;
-     bfd_size_type count;
+ppcboot_get_section_contents (bfd *abfd,
+			      asection *section ATTRIBUTE_UNUSED,
+			      void * location,
+			      file_ptr offset,
+			      bfd_size_type count)
 {
   if (bfd_seek (abfd, offset + (file_ptr) sizeof (ppcboot_hdr_t), SEEK_SET) != 0
       || bfd_bread (location, count, abfd) != count)
@@ -249,8 +235,7 @@ ppcboot_get_section_contents (abfd, section, location, offset, count)
 /* Return the amount of memory needed to read the symbol table.  */
 
 static long
-ppcboot_get_symtab_upper_bound (abfd)
-     bfd *abfd ATTRIBUTE_UNUSED;
+ppcboot_get_symtab_upper_bound (bfd *abfd ATTRIBUTE_UNUSED)
 {
   return (PPCBOOT_SYMS + 1) * sizeof (asymbol *);
 }
@@ -259,9 +244,7 @@ ppcboot_get_symtab_upper_bound (abfd)
 /* Create a symbol name based on the bfd's filename.  */
 
 static char *
-mangle_name (abfd, suffix)
-     bfd *abfd;
-     char *suffix;
+mangle_name (bfd *abfd, char *suffix)
 {
   bfd_size_type size;
   char *buf;
@@ -289,9 +272,7 @@ mangle_name (abfd, suffix)
 /* Return the symbol table.  */
 
 static long
-ppcboot_canonicalize_symtab (abfd, alocation)
-     bfd *abfd;
-     asymbol **alocation;
+ppcboot_canonicalize_symtab (bfd *abfd, asymbol **alocation)
 {
   asection *sec = ppcboot_get_tdata (abfd)->sec;
   asymbol *syms;
@@ -339,10 +320,9 @@ ppcboot_canonicalize_symtab (abfd, alocation)
 /* Get information about a symbol.  */
 
 static void
-ppcboot_get_symbol_info (ignore_abfd, symbol, ret)
-     bfd *ignore_abfd ATTRIBUTE_UNUSED;
-     asymbol *symbol;
-     symbol_info *ret;
+ppcboot_get_symbol_info (bfd *ignore_abfd ATTRIBUTE_UNUSED,
+			 asymbol *symbol,
+			 symbol_info *ret)
 {
   bfd_symbol_info (symbol, ret);
 }
@@ -360,12 +340,11 @@ ppcboot_get_symbol_info (ignore_abfd, symbol, ret)
 /* Write section contents of a ppcboot file.  */
 
 static bfd_boolean
-ppcboot_set_section_contents (abfd, sec, data, offset, size)
-     bfd *abfd;
-     asection *sec;
-     const PTR data;
-     file_ptr offset;
-     bfd_size_type size;
+ppcboot_set_section_contents (bfd *abfd,
+			      asection *sec,
+			      const void * data,
+			      file_ptr offset,
+			      bfd_size_type size)
 {
   if (! abfd->output_has_begun)
     {
@@ -401,14 +380,12 @@ ppcboot_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
 /* Print out the program headers.  */
 
 static bfd_boolean
-ppcboot_bfd_print_private_bfd_data (abfd, farg)
-     bfd *abfd;
-     PTR farg;
+ppcboot_bfd_print_private_bfd_data (bfd *abfd, void * farg)
 {
   FILE *f = (FILE *)farg;
   ppcboot_data_t *tdata = ppcboot_get_tdata (abfd);
-  long entry_offset = bfd_getl_signed_32 ((PTR) tdata->header.entry_offset);
-  long length = bfd_getl_signed_32 ((PTR) tdata->header.length);
+  long entry_offset = bfd_getl_signed_32 (tdata->header.entry_offset);
+  long length = bfd_getl_signed_32 (tdata->header.length);
   int i;
 
   fprintf (f, _("\nppcboot header:\n"));
@@ -428,8 +405,8 @@ ppcboot_bfd_print_private_bfd_data (abfd, farg)
 
   for (i = 0; i < 4; i++)
     {
-      long sector_begin  = bfd_getl_signed_32 ((PTR) tdata->header.partition[i].sector_begin);
-      long sector_length = bfd_getl_signed_32 ((PTR) tdata->header.partition[i].sector_length);
+      long sector_begin  = bfd_getl_signed_32 (tdata->header.partition[i].sector_begin);
+      long sector_length = bfd_getl_signed_32 (tdata->header.partition[i].sector_length);
 
       /* Skip all 0 entries */
       if (!tdata->header.partition[i].partition_begin.ind
diff --git a/bfd/ptrace-core.c b/bfd/ptrace-core.c
index 77eaaeb..9f6ffdf 100644
--- a/bfd/ptrace-core.c
+++ b/bfd/ptrace-core.c
@@ -1,6 +1,6 @@
 /* BFD backend for core files which use the ptrace_user structure
    Copyright 1993, 1994, 1995, 1996, 1998, 1999, 2001, 2002, 2003, 2004,
-   2005, 2006, 2007  Free Software Foundation, Inc.
+   2005, 2006, 2007, 2012  Free Software Foundation, Inc.
    The structure of this file is based on trad-core.c written by John Gilmore
    of Cygnus Support.
    Modified to work with the ptrace_user structure by Kevin A. Buettner.
@@ -35,31 +35,29 @@
 #include <sys/ptrace.h>
 
 struct trad_core_struct
-  {
-    asection *data_section;
-    asection *stack_section;
-    asection *reg_section;
-    struct ptrace_user u;
-  };
+{
+  asection *data_section;
+  asection *stack_section;
+  asection *reg_section;
+  struct ptrace_user u;
+};
 
-#define core_upage(bfd) (&((bfd)->tdata.trad_core_data->u))
-#define core_datasec(bfd) ((bfd)->tdata.trad_core_data->data_section)
+#define core_upage(bfd)  (&((bfd)->tdata.trad_core_data->u))
+#define core_datasec(bfd)  ((bfd)->tdata.trad_core_data->data_section)
 #define core_stacksec(bfd) ((bfd)->tdata.trad_core_data->stack_section)
-#define core_regsec(bfd) ((bfd)->tdata.trad_core_data->reg_section)
+#define core_regsec(bfd)   ((bfd)->tdata.trad_core_data->reg_section)
 
 /* forward declarations */
 
-const bfd_target *ptrace_unix_core_file_p PARAMS ((bfd *abfd));
-char * ptrace_unix_core_file_failing_command PARAMS ((bfd *abfd));
-int ptrace_unix_core_file_failing_signal PARAMS ((bfd *abfd));
+const bfd_target *ptrace_unix_core_file_p (bfd *abfd);
+char * ptrace_unix_core_file_failing_command (bfd *abfd);
+int ptrace_unix_core_file_failing_signal (bfd *abfd);
 #define ptrace_unix_core_file_matches_executable_p generic_core_file_matches_executable_p
 #define ptrace_unix_core_file_pid _bfd_nocore_core_file_pid
-static void swap_abort PARAMS ((void));
+static void swap_abort (void);
 
 const bfd_target *
-ptrace_unix_core_file_p (abfd)
-     bfd *abfd;
-
+ptrace_unix_core_file_p (bfd *abfd)
 {
   int val;
   struct ptrace_user u;
@@ -137,10 +135,10 @@ ptrace_unix_core_file_p (abfd)
 }
 
 char *
-ptrace_unix_core_file_failing_command (abfd)
-     bfd *abfd;
+ptrace_unix_core_file_failing_command (bfd *abfd)
 {
   char *com = abfd->tdata.trad_core_data->u.pt_comm;
+
   if (*com)
     return com;
   else
@@ -148,15 +146,14 @@ ptrace_unix_core_file_failing_command (abfd)
 }
 
 int
-ptrace_unix_core_file_failing_signal (abfd)
-     bfd *abfd;
+ptrace_unix_core_file_failing_signal (bfd *abfd)
 {
   return abfd->tdata.trad_core_data->u.pt_sigframe.sig_num;
 }
 

 /* If somebody calls any byte-swapping routines, shoot them.  */
 static void
-swap_abort ()
+swap_abort (void)
 {
   abort (); /* This way doesn't require any declaration for ANSI to fuck up */
 }
@@ -215,7 +212,7 @@ const bfd_target ptrace_core_vec =
 
     NULL,
 
-    (PTR) 0			/* backend_data */
+    NULL			/* backend_data */
   };
 
 #endif /* PTRACE_CORE */
diff --git a/bfd/reloc.c b/bfd/reloc.c
index e0b5f62..19c1f96 100644
--- a/bfd/reloc.c
+++ b/bfd/reloc.c
@@ -1,6 +1,7 @@
 /* BFD support for handling relocation entries.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
+   2012
    Free Software Foundation, Inc.
    Written by Cygnus Support.
 
@@ -1942,6 +1943,14 @@ ENUMX
   BFD_RELOC_SPARC_L44
 ENUMX
   BFD_RELOC_SPARC_REGISTER
+ENUMX
+  BFD_RELOC_SPARC_H34
+ENUMX
+  BFD_RELOC_SPARC_SIZE32
+ENUMX
+  BFD_RELOC_SPARC_SIZE64
+ENUMX
+  BFD_RELOC_SPARC_WDISP10
 ENUMDOC
   SPARC64 relocations
 
@@ -2247,6 +2256,23 @@ ENUMDOC
   MIPS16 low 16 bits.
 
 ENUM
+  BFD_RELOC_MIPS16_TLS_GD
+ENUMX
+  BFD_RELOC_MIPS16_TLS_LDM
+ENUMX
+  BFD_RELOC_MIPS16_TLS_DTPREL_HI16
+ENUMX
+  BFD_RELOC_MIPS16_TLS_DTPREL_LO16
+ENUMX
+  BFD_RELOC_MIPS16_TLS_GOTTPREL
+ENUMX
+  BFD_RELOC_MIPS16_TLS_TPREL_HI16
+ENUMX
+  BFD_RELOC_MIPS16_TLS_TPREL_LO16
+ENUMDOC
+  MIPS16 TLS relocations
+
+ENUM
   BFD_RELOC_MIPS_LITERAL
 ENUMX
   BFD_RELOC_MICROMIPS_LITERAL
@@ -2530,6 +2556,36 @@ ENUMDOC
   The addend of this reloc is an alignment power that must
   be honoured at the offset's location, regardless of linker
   relaxation.
+ENUM
+  BFD_RELOC_MN10300_TLS_GD
+ENUMX
+  BFD_RELOC_MN10300_TLS_LD
+ENUMX
+  BFD_RELOC_MN10300_TLS_LDO
+ENUMX
+  BFD_RELOC_MN10300_TLS_GOTIE
+ENUMX
+  BFD_RELOC_MN10300_TLS_IE
+ENUMX
+  BFD_RELOC_MN10300_TLS_LE
+ENUMX
+  BFD_RELOC_MN10300_TLS_DTPMOD
+ENUMX
+  BFD_RELOC_MN10300_TLS_DTPOFF
+ENUMX
+  BFD_RELOC_MN10300_TLS_TPOFF
+ENUMDOC
+  Various TLS-related relocations.
+ENUM
+  BFD_RELOC_MN10300_32_PCREL
+ENUMDOC
+  This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the
+  instruction.
+ENUM
+  BFD_RELOC_MN10300_16_PCREL
+ENUMDOC
+  This is a 16bit pcrel reloc for the mn10300, offset by two bytes in the
+  instruction.
 COMMENT
 
 ENUM
@@ -2750,6 +2806,40 @@ ENUMX
 ENUMX
   BFD_RELOC_PPC_EMB_RELSDA
 ENUMX
+  BFD_RELOC_PPC_VLE_REL8
+ENUMX
+  BFD_RELOC_PPC_VLE_REL15
+ENUMX
+  BFD_RELOC_PPC_VLE_REL24
+ENUMX
+  BFD_RELOC_PPC_VLE_LO16A
+ENUMX
+  BFD_RELOC_PPC_VLE_LO16D
+ENUMX
+  BFD_RELOC_PPC_VLE_HI16A
+ENUMX
+  BFD_RELOC_PPC_VLE_HI16D
+ENUMX
+  BFD_RELOC_PPC_VLE_HA16A
+ENUMX
+  BFD_RELOC_PPC_VLE_HA16D
+ENUMX
+  BFD_RELOC_PPC_VLE_SDA21
+ENUMX
+  BFD_RELOC_PPC_VLE_SDA21_LO
+ENUMX
+  BFD_RELOC_PPC_VLE_SDAREL_LO16A
+ENUMX
+  BFD_RELOC_PPC_VLE_SDAREL_LO16D
+ENUMX
+  BFD_RELOC_PPC_VLE_SDAREL_HI16A
+ENUMX
+  BFD_RELOC_PPC_VLE_SDAREL_HI16D
+ENUMX
+  BFD_RELOC_PPC_VLE_SDAREL_HA16A
+ENUMX
+  BFD_RELOC_PPC_VLE_SDAREL_HA16D
+ENUMX
   BFD_RELOC_PPC64_HIGHER
 ENUMX
   BFD_RELOC_PPC64_HIGHER_S
@@ -3904,16 +3994,6 @@ ENUM
   BFD_RELOC_V850_DATA
 ENUMDOC
   start data in text.
-ENUM
-  BFD_RELOC_MN10300_32_PCREL
-ENUMDOC
-  This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the
-  instruction.
-ENUM
-  BFD_RELOC_MN10300_16_PCREL
-ENUMDOC
-  This is a 16bit pcrel reloc for the mn10300, offset by two bytes in the
-  instruction.
 
 ENUM
   BFD_RELOC_TIC30_LDP
@@ -4314,6 +4394,21 @@ ENUM
 ENUMDOC
   This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw
   instructions
+ENUM
+  BFD_RELOC_AVR_8_LO
+ENUMDOC
+  This is a 8 bit reloc for the AVR that stores bits 0..7 of a symbol
+  in .byte lo8(symbol)
+ENUM
+  BFD_RELOC_AVR_8_HI
+ENUMDOC
+  This is a 8 bit reloc for the AVR that stores bits 8..15 of a symbol
+  in .byte hi8(symbol)
+ENUM
+  BFD_RELOC_AVR_8_HLO
+ENUMDOC
+  This is a 8 bit reloc for the AVR that stores bits 16..23 of a symbol
+  in .byte hlo8(symbol)
 
 ENUM
   BFD_RELOC_RL78_NEG8
@@ -4599,6 +4694,11 @@ ENUMDOC
   Long displacement extension.
 
 ENUM
+  BFD_RELOC_390_IRELATIVE
+ENUMDOC
+  STT_GNU_IFUNC relocation.
+
+ENUM
   BFD_RELOC_SCORE_GPREL15
 ENUMDOC
   Score relocations
@@ -4933,7 +5033,101 @@ ENUM
 ENUMDOC
   Motorola 68HC12 reloc.
   This is the 5 bits of a value.
-
+ENUM
+  BFD_RELOC_XGATE_RL_JUMP
+ENUMDOC
+  Freescale XGATE reloc.
+  This reloc marks the beginning of a bra/jal instruction.
+ENUM
+  BFD_RELOC_XGATE_RL_GROUP
+ENUMDOC
+  Freescale XGATE reloc.
+  This reloc marks a group of several instructions that gcc generates
+  and for which the linker relaxation pass can modify and/or remove
+  some of them.
+ENUM
+  BFD_RELOC_XGATE_LO16
+ENUMDOC
+  Freescale XGATE reloc.
+  This is the 16-bit lower part of an address.  It is used for the '16-bit'
+  instructions.
+ENUM
+  BFD_RELOC_XGATE_GPAGE
+ENUMDOC
+  Freescale XGATE reloc.
+ENUM
+  BFD_RELOC_XGATE_24
+ENUMDOC
+  Freescale XGATE reloc.
+ENUM
+  BFD_RELOC_XGATE_PCREL_9
+ENUMDOC
+  Freescale XGATE reloc.
+  This is a 9-bit pc-relative reloc.
+ENUM
+  BFD_RELOC_XGATE_PCREL_10
+ENUMDOC
+  Freescale XGATE reloc.
+  This is a 10-bit pc-relative reloc.
+ENUM
+  BFD_RELOC_XGATE_IMM8_LO
+ENUMDOC
+  Freescale XGATE reloc.
+  This is the 16-bit lower part of an address.  It is used for the '16-bit'
+  instructions.
+ENUM
+  BFD_RELOC_XGATE_IMM8_HI
+ENUMDOC
+  Freescale XGATE reloc.
+  This is the 16-bit higher part of an address.  It is used for the '16-bit'
+  instructions.
+ENUM
+  BFD_RELOC_XGATE_IMM3
+ENUMDOC
+  Freescale XGATE reloc.
+  This is a 3-bit pc-relative reloc.
+ENUM
+  BFD_RELOC_XGATE_IMM4
+ENUMDOC
+  Freescale XGATE reloc.
+  This is a 4-bit pc-relative reloc.
+ENUM
+  BFD_RELOC_XGATE_IMM5
+ENUMDOC
+  Freescale XGATE reloc.
+  This is a 5-bit pc-relative reloc.
+ENUM
+  BFD_RELOC_M68HC12_9B
+ENUMDOC
+  Motorola 68HC12 reloc.
+  This is the 9 bits of a value.
+ENUM
+  BFD_RELOC_M68HC12_16B
+ENUMDOC
+  Motorola 68HC12 reloc.
+  This is the 16 bits of a value.
+ENUM
+  BFD_RELOC_M68HC12_9_PCREL
+ENUMDOC
+  Motorola 68HC12/XGATE reloc.
+  This is a PCREL9 branch.
+ENUM
+  BFD_RELOC_M68HC12_10_PCREL
+ENUMDOC
+  Motorola 68HC12/XGATE reloc.
+  This is a PCREL10 branch.
+ENUM
+  BFD_RELOC_M68HC12_LO8XG
+ENUMDOC
+  Motorola 68HC12/XGATE reloc.
+  This is the 8 bit low part of an absolute address and immediately precedes
+  a matching HI8XG part.
+ENUM
+  BFD_RELOC_M68HC12_HI8XG
+ENUMDOC
+  Motorola 68HC12/XGATE reloc.
+  This is the 8 bit high part of an absolute address and immediately follows
+  a matching LO8XG part.
 ENUM
   BFD_RELOC_16C_NUM08
 ENUMX
@@ -5577,6 +5771,10 @@ ENUMDOC
   Difference between two section addreses.  Must be followed by a
   BFD_RELOC_MACH_O_PAIR.
 ENUM
+  BFD_RELOC_MACH_O_LOCAL_SECTDIFF
+ENUMDOC
+  Like BFD_RELOC_MACH_O_SECTDIFF but with a local symbol.
+ENUM
   BFD_RELOC_MACH_O_PAIR
 ENUMDOC
   Pair of relocation.  Contains the first symbol.
@@ -5778,6 +5976,18 @@ ENUMX
 ENUMX
   BFD_RELOC_TILEPRO_SHAMT_Y1
 ENUMX
+  BFD_RELOC_TILEPRO_TLS_GD_CALL
+ENUMX
+  BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD
+ENUMX
+  BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD
+ENUMX
+  BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD
+ENUMX
+  BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD
+ENUMX
+  BFD_RELOC_TILEPRO_TLS_IE_LOAD
+ENUMX
   BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD
 ENUMX
   BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD
@@ -5815,6 +6025,22 @@ ENUMX
   BFD_RELOC_TILEPRO_TLS_DTPOFF32
 ENUMX
   BFD_RELOC_TILEPRO_TLS_TPOFF32
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA
+ENUMX
+  BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA
 ENUMDOC
   Tilera TILEPro Relocations.
 
@@ -5933,18 +6159,6 @@ ENUMX
 ENUMX
   BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW1_GOT
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW1_GOT
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_GOT
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_GOT
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW3_GOT
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW3_GOT
-ENUMX
   BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT
 ENUMX
   BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT
@@ -5953,25 +6167,21 @@ ENUMX
 ENUMX
   BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_GOT
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_GOT
-ENUMX
   BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD
 ENUMX
   BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_GD
+  BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_GD
+  BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_GD
+  BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_GD
+  BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_GD
+  BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_GD
+  BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE
 ENUMX
   BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD
 ENUMX
@@ -5981,26 +6191,10 @@ ENUMX
 ENUMX
   BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_GD
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_GD
-ENUMX
   BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE
 ENUMX
   BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW1_TLS_IE
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW1_TLS_IE
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_TLS_IE
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_TLS_IE
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW3_TLS_IE
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW3_TLS_IE
-ENUMX
   BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE
 ENUMX
   BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE
@@ -6009,10 +6203,6 @@ ENUMX
 ENUMX
   BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE
 ENUMX
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_TLS_IE
-ENUMX
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_TLS_IE
-ENUMX
   BFD_RELOC_TILEGX_TLS_DTPMOD64
 ENUMX
   BFD_RELOC_TILEGX_TLS_DTPOFF64
@@ -6024,6 +6214,26 @@ ENUMX
   BFD_RELOC_TILEGX_TLS_DTPOFF32
 ENUMX
   BFD_RELOC_TILEGX_TLS_TPOFF32
+ENUMX
+  BFD_RELOC_TILEGX_TLS_GD_CALL
+ENUMX
+  BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD
+ENUMX
+  BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD
+ENUMX
+  BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD
+ENUMX
+  BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD
+ENUMX
+  BFD_RELOC_TILEGX_TLS_IE_LOAD
+ENUMX
+  BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD
+ENUMX
+  BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD
+ENUMX
+  BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD
+ENUMX
+  BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD
 ENUMDOC
   Tilera TILE-Gx Relocations.
 
@@ -6210,23 +6420,26 @@ INTERNAL_FUNCTION
 	bfd_generic_lookup_section_flags
 
 SYNOPSIS
-	void bfd_generic_lookup_section_flags
-	  (struct bfd_link_info *, struct flag_info *);
+	bfd_boolean bfd_generic_lookup_section_flags
+	  (struct bfd_link_info *, struct flag_info *, asection *);
 
 DESCRIPTION
 	Provides default handling for section flags lookup
 	-- i.e., does nothing.
+	Returns FALSE if the section should be omitted, otherwise TRUE.
 */
 
-void
+bfd_boolean
 bfd_generic_lookup_section_flags (struct bfd_link_info *info ATTRIBUTE_UNUSED,
-				  struct flag_info *finfo) 
+				  struct flag_info *flaginfo,
+				  asection *section ATTRIBUTE_UNUSED)
 {
-  if (finfo != NULL)
+  if (flaginfo != NULL)
     {
       (*_bfd_error_handler) (_("INPUT_SECTION_FLAGS are not supported.\n"));
-      return;
+      return FALSE;
     }
+  return TRUE;
 }
 
 /*
@@ -6314,7 +6527,7 @@ bfd_generic_get_relocated_section_contents (bfd *abfd,
 	  bfd_reloc_status_type r;
 
 	  symbol = *(*parent)->sym_ptr_ptr;
-	  if (symbol->section && elf_discarded_section (symbol->section))
+	  if (symbol->section && discarded_section (symbol->section))
 	    {
 	      bfd_byte *p;
 	      static reloc_howto_type none_howto
@@ -6324,7 +6537,7 @@ bfd_generic_get_relocated_section_contents (bfd *abfd,
 	      p = data + (*parent)->address * bfd_octets_per_byte (input_bfd);
 	      _bfd_clear_contents ((*parent)->howto, input_bfd, input_section,
 				   p);
-	      (*parent)->sym_ptr_ptr = bfd_abs_section.symbol_ptr_ptr;
+	      (*parent)->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
 	      (*parent)->addend = 0;
 	      (*parent)->howto = &none_howto;
 	      r = bfd_reloc_ok;
@@ -6373,6 +6586,15 @@ bfd_generic_get_relocated_section_contents (bfd *abfd,
 		    goto error_return;
 		  break;
 		case bfd_reloc_outofrange:
+		  /* PR ld/13730:
+		     This error can result when processing some partially
+		     complete binaries.  Do not abort, but issue an error
+		     message instead.  */
+		  link_info->callbacks->einfo
+		    (_("%X%P: %B(%A): relocation \"%R\" goes out of range\n"),
+		     abfd, input_section, * parent);
+		  goto error_return;
+
 		default:
 		  abort ();
 		  break;
diff --git a/bfd/reloc16.c b/bfd/reloc16.c
index 768b288..31fc15d 100644
--- a/bfd/reloc16.c
+++ b/bfd/reloc16.c
@@ -1,6 +1,7 @@
 /* 8 and 16 bit COFF relocation functions, for BFD.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2001,
-   2002, 2003, 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
+   2002, 2003, 2004, 2005, 2007, 2008, 2009, 2012
+   Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -43,10 +44,9 @@
 #include "libcoff.h"
 
 bfd_vma
-bfd_coff_reloc16_get_value (reloc, link_info, input_section)
-     arelent *reloc;
-     struct bfd_link_info *link_info;
-     asection *input_section;
+bfd_coff_reloc16_get_value (arelent *reloc,
+			    struct bfd_link_info *link_info,
+			    asection *input_section)
 {
   bfd_vma value;
   asymbol *symbol = *(reloc->sym_ptr_ptr);
@@ -104,11 +104,10 @@ bfd_coff_reloc16_get_value (reloc, link_info, input_section)
 }
 
 void
-bfd_perform_slip (abfd, slip, input_section, value)
-     bfd *abfd;
-     unsigned int slip;
-     asection *input_section;
-     bfd_vma value;
+bfd_perform_slip (bfd *abfd,
+		  unsigned int slip,
+		  asection *input_section,
+		  bfd_vma value)
 {
   asymbol **s;
 
@@ -143,11 +142,10 @@ bfd_perform_slip (abfd, slip, input_section, value)
 }
 
 bfd_boolean
-bfd_coff_reloc16_relax_section (abfd, input_section, link_info, again)
-     bfd *abfd;
-     asection *input_section;
-     struct bfd_link_info *link_info;
-     bfd_boolean *again;
+bfd_coff_reloc16_relax_section (bfd *abfd,
+				asection *input_section,
+				struct bfd_link_info *link_info,
+				bfd_boolean *again)
 {
   /* Get enough memory to hold the stuff.  */
   bfd *input_bfd = input_section->owner;
@@ -247,18 +245,13 @@ bfd_coff_reloc16_relax_section (abfd, input_section, link_info, again)
 }
 
 bfd_byte *
-bfd_coff_reloc16_get_relocated_section_contents (in_abfd,
-						 link_info,
-						 link_order,
-						 data,
-						 relocatable,
-						 symbols)
-     bfd *in_abfd;
-     struct bfd_link_info *link_info;
-     struct bfd_link_order *link_order;
-     bfd_byte *data;
-     bfd_boolean relocatable;
-     asymbol **symbols;
+bfd_coff_reloc16_get_relocated_section_contents
+  (bfd *in_abfd,
+   struct bfd_link_info *link_info,
+   struct bfd_link_order *link_order,
+   bfd_byte *data,
+   bfd_boolean relocatable,
+   asymbol **symbols)
 {
   /* Get enough memory to hold the stuff.  */
   bfd *input_bfd = link_order->u.indirect.section->owner;
diff --git a/bfd/riscix.c b/bfd/riscix.c
index 0d07d01..7e24fd9 100644
--- a/bfd/riscix.c
+++ b/bfd/riscix.c
@@ -1,6 +1,6 @@
 /* BFD back-end for RISC iX (Acorn, arm) binaries.
    Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004,
-   2005, 2007, 2010 Free Software Foundation, Inc.
+   2005, 2007, 2010, 2012 Free Software Foundation, Inc.
    Contributed by Richard Earnshaw (rwe at pegasus.esprit.ec.org)
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -207,7 +207,7 @@ riscix_fix_pcrel_26 (bfd *abfd,
   bfd_reloc_status_type flag = bfd_reloc_ok;
 
   /* If this is an undefined symbol, return error.  */
-  if (symbol->section == &bfd_und_section
+  if (bfd_is_und_section (symbol->section)
       && (symbol->flags & BSF_WEAK) == 0)
     return output_bfd ? bfd_reloc_continue : bfd_reloc_undefined;
 
@@ -341,10 +341,10 @@ riscix_swap_std_reloc_out (bfd *abfd,
      check for that here.  */
 
   if (bfd_is_com_section (output_section)
-      || output_section == & bfd_abs_section
-      || output_section == & bfd_und_section)
+      || bfd_is_abs_section (output_section)
+      || bfd_is_und_section (output_section))
     {
-      if (bfd_abs_section.symbol == sym)
+      if (bfd_abs_section_ptr->symbol == sym)
 	{
 	  /* Whoops, looked like an abs symbol, but is really an offset
 	     from the abs section.  */
diff --git a/bfd/sco5-core.c b/bfd/sco5-core.c
index 2eea7ff..896a970 100644
--- a/bfd/sco5-core.c
+++ b/bfd/sco5-core.c
@@ -1,6 +1,6 @@
 /* BFD back end for SCO5 core files (U-area and raw sections)
    Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
-   2010, 2011
+   2010, 2011, 2012
    Free Software Foundation, Inc.
    Written by Jouke Numan <jnuman at hiscom.nl>
 
@@ -45,24 +45,16 @@ struct sco5_core_struct
 
 /* forward declarations */
 
-static asection *make_bfd_asection
-  PARAMS ((bfd *, const char *, flagword, bfd_size_type, bfd_vma, file_ptr));
-static struct user *read_uarea PARAMS ((bfd *, int));
-const bfd_target *sco5_core_file_p PARAMS ((bfd *abfd));
-char *sco5_core_file_failing_command PARAMS ((bfd *abfd));
-int sco5_core_file_failing_signal PARAMS ((bfd *abfd));
 #define sco5_core_file_matches_executable_p generic_core_file_matches_executable_p
 #define sco5_core_file_pid _bfd_nocore_core_file_pid
-static void swap_abort PARAMS ((void));
 
 static asection *
-make_bfd_asection (abfd, name, flags, size, vma, filepos)
-     bfd *abfd;
-     const char *name;
-     flagword flags;
-     bfd_size_type size;
-     bfd_vma vma;
-     file_ptr filepos;
+make_bfd_asection (bfd *abfd,
+		   const char *name,
+		   flagword flags,
+		   bfd_size_type size,
+		   bfd_vma vma,
+		   file_ptr filepos)
 {
   asection *asect;
 
@@ -78,10 +70,7 @@ make_bfd_asection (abfd, name, flags, size, vma, filepos)
 }
 
 static struct user *
-read_uarea(abfd, filepos)
-     bfd *abfd;
-     int filepos;
-
+read_uarea (bfd *abfd, int filepos)
 {
   struct sco5_core_struct *rawptr;
   bfd_size_type amt = sizeof (struct sco5_core_struct);
@@ -115,8 +104,7 @@ read_uarea(abfd, filepos)
 }
 
 const bfd_target *
-sco5_core_file_p (abfd)
-     bfd *abfd;
+sco5_core_file_p (bfd *abfd)
 {
   int coffset_siz, val, nsecs, cheadoffs;
   int coresize;
@@ -327,8 +315,7 @@ sco5_core_file_p (abfd)
 }
 
 char *
-sco5_core_file_failing_command (abfd)
-     bfd *abfd;
+sco5_core_file_failing_command (bfd *abfd)
 {
   char *com = abfd->tdata.sco5_core_data->u.u_comm;
   if (*com)
@@ -338,8 +325,7 @@ sco5_core_file_failing_command (abfd)
 }
 
 int
-sco5_core_file_failing_signal (ignore_abfd)
-     bfd *ignore_abfd;
+sco5_core_file_failing_signal (bfd *ignore_abfd)
 {
   return ((ignore_abfd->tdata.sco5_core_data->u.u_sysabort != 0)
 	  ? ignore_abfd->tdata.sco5_core_data->u.u_sysabort
@@ -348,7 +334,7 @@ sco5_core_file_failing_signal (ignore_abfd)
 
 /* If somebody calls any byte-swapping routines, shoot them.  */
 static void
-swap_abort ()
+swap_abort (void)
 {
   abort (); /* This way doesn't require any declaration for ANSI to fuck up */
 }
@@ -408,5 +394,5 @@ const bfd_target sco5_core_vec =
 
     NULL,
 
-    (PTR) 0			/* backend_data */
+    NULL			/* backend_data */
   };
diff --git a/bfd/section.c b/bfd/section.c
index 7c1f750..a3b7c56 100644
--- a/bfd/section.c
+++ b/bfd/section.c
@@ -1,6 +1,7 @@
 /* Object file "section" support for the BFD library.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
+   2012
    Free Software Foundation, Inc.
    Written by Cygnus Support.
 
@@ -382,11 +383,11 @@ CODE_FRAGMENT
 .
 .  {* Type of sec_info information.  *}
 .  unsigned int sec_info_type:3;
-.#define ELF_INFO_TYPE_NONE      0
-.#define ELF_INFO_TYPE_STABS     1
-.#define ELF_INFO_TYPE_MERGE     2
-.#define ELF_INFO_TYPE_EH_FRAME  3
-.#define ELF_INFO_TYPE_JUST_SYMS 4
+.#define SEC_INFO_TYPE_NONE      0
+.#define SEC_INFO_TYPE_STABS     1
+.#define SEC_INFO_TYPE_MERGE     2
+.#define SEC_INFO_TYPE_EH_FRAME  3
+.#define SEC_INFO_TYPE_JUST_SYMS 4
 .
 .  {* Nonzero if this section uses RELA relocations, rather than REL.  *}
 .  unsigned int use_rela_p:1;
@@ -516,9 +517,6 @@ CODE_FRAGMENT
 .  {* The BFD which owns the section.  *}
 .  bfd *owner;
 .
-.  {* INPUT_SECTION_FLAGS if specified in the linker script.  *}
-.  struct flag_info *section_flag_info;
-.
 .  {* A symbol which points at this section only.  *}
 .  struct bfd_symbol *symbol;
 .  struct bfd_symbol **symbol_ptr_ptr;
@@ -546,28 +544,25 @@ CODE_FRAGMENT
 .
 .{* These sections are global, and are managed by BFD.  The application
 .   and target back end are not permitted to change the values in
-.   these sections.  New code should use the section_ptr macros rather
-.   than referring directly to the const sections.  The const sections
-.   may eventually vanish.  *}
+.   these sections.  *}
+.extern asection std_section[4];
+.
 .#define BFD_ABS_SECTION_NAME "*ABS*"
 .#define BFD_UND_SECTION_NAME "*UND*"
 .#define BFD_COM_SECTION_NAME "*COM*"
 .#define BFD_IND_SECTION_NAME "*IND*"
 .
-.{* The absolute section.  *}
-.extern asection bfd_abs_section;
-.#define bfd_abs_section_ptr ((asection *) &bfd_abs_section)
-.#define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr)
-.{* Pointer to the undefined section.  *}
-.extern asection bfd_und_section;
-.#define bfd_und_section_ptr ((asection *) &bfd_und_section)
-.#define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr)
 .{* Pointer to the common section.  *}
-.extern asection bfd_com_section;
-.#define bfd_com_section_ptr ((asection *) &bfd_com_section)
+.#define bfd_com_section_ptr (&std_section[0])
+.{* Pointer to the undefined section.  *}
+.#define bfd_und_section_ptr (&std_section[1])
+.{* Pointer to the absolute section.  *}
+.#define bfd_abs_section_ptr (&std_section[2])
 .{* Pointer to the indirect section.  *}
-.extern asection bfd_ind_section;
-.#define bfd_ind_section_ptr ((asection *) &bfd_ind_section)
+.#define bfd_ind_section_ptr (&std_section[3])
+.
+.#define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr)
+.#define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr)
 .#define bfd_is_ind_section(sec) ((sec) == bfd_ind_section_ptr)
 .
 .#define bfd_is_const_section(SEC)		\
@@ -682,8 +677,8 @@ CODE_FRAGMENT
 .  {* vma, lma, size, rawsize, compressed_size, relax, relax_count, *}	\
 .     0,   0,   0,    0,       0,               0,     0,		\
 .									\
-.  {* output_offset, output_section,              alignment_power,  *}	\
-.     0,             (struct bfd_section *) &SEC, 0,			\
+.  {* output_offset, output_section, alignment_power,               *}	\
+.     0,             &SEC,           0,					\
 .									\
 .  {* relocation, orelocation, reloc_count, filepos, rel_filepos,   *}	\
 .     NULL,       NULL,        0,           0,       0,			\
@@ -697,9 +692,6 @@ CODE_FRAGMENT
 .  {* target_index, used_by_bfd, constructor_chain, owner,          *}	\
 .     0,            NULL,        NULL,              NULL,		\
 .									\
-.  {* flag_info,						    *}  \
-.     NULL,								\
-.									\
 .  {* symbol,                    symbol_ptr_ptr,                    *}	\
 .     (struct bfd_symbol *) SYM, &SEC.symbol,				\
 .									\
@@ -715,10 +707,10 @@ CODE_FRAGMENT
  /* the_bfd, name, value, attr, section [, udata] */
 #ifdef __STDC__
 #define GLOBAL_SYM_INIT(NAME, SECTION) \
-  { 0, NAME, 0, BSF_SECTION_SYM, (asection *) SECTION, { 0 }}
+  { 0, NAME, 0, BSF_SECTION_SYM, SECTION, { 0 }}
 #else
 #define GLOBAL_SYM_INIT(NAME, SECTION) \
-  { 0, NAME, 0, BSF_SECTION_SYM, (asection *) SECTION }
+  { 0, NAME, 0, BSF_SECTION_SYM, SECTION }
 #endif
 
 /* These symbols are global, not specific to any BFD.  Therefore, anything
@@ -726,20 +718,21 @@ CODE_FRAGMENT
 
 static const asymbol global_syms[] =
 {
-  GLOBAL_SYM_INIT (BFD_COM_SECTION_NAME, &bfd_com_section),
-  GLOBAL_SYM_INIT (BFD_UND_SECTION_NAME, &bfd_und_section),
-  GLOBAL_SYM_INIT (BFD_ABS_SECTION_NAME, &bfd_abs_section),
-  GLOBAL_SYM_INIT (BFD_IND_SECTION_NAME, &bfd_ind_section)
+  GLOBAL_SYM_INIT (BFD_COM_SECTION_NAME, bfd_com_section_ptr),
+  GLOBAL_SYM_INIT (BFD_UND_SECTION_NAME, bfd_und_section_ptr),
+  GLOBAL_SYM_INIT (BFD_ABS_SECTION_NAME, bfd_abs_section_ptr),
+  GLOBAL_SYM_INIT (BFD_IND_SECTION_NAME, bfd_ind_section_ptr)
 };
 
-#define STD_SECTION(SEC, FLAGS, NAME, IDX)				\
-  asection SEC = BFD_FAKE_SECTION(SEC, FLAGS, &global_syms[IDX],	\
-				  NAME, IDX)
+#define STD_SECTION(NAME, IDX, FLAGS) \
+  BFD_FAKE_SECTION(std_section[IDX], FLAGS, &global_syms[IDX], NAME, IDX)
 
-STD_SECTION (bfd_com_section, SEC_IS_COMMON, BFD_COM_SECTION_NAME, 0);
-STD_SECTION (bfd_und_section, 0, BFD_UND_SECTION_NAME, 1);
-STD_SECTION (bfd_abs_section, 0, BFD_ABS_SECTION_NAME, 2);
-STD_SECTION (bfd_ind_section, 0, BFD_IND_SECTION_NAME, 3);
+asection std_section[] = {
+  STD_SECTION (BFD_COM_SECTION_NAME, 0, SEC_IS_COMMON),
+  STD_SECTION (BFD_UND_SECTION_NAME, 1, 0),
+  STD_SECTION (BFD_ABS_SECTION_NAME, 2, 0),
+  STD_SECTION (BFD_IND_SECTION_NAME, 3, 0)
+};
 #undef STD_SECTION
 
 /* Initialize an entry in the section hash table.  */
@@ -852,14 +845,8 @@ SYNOPSIS
 	asection *bfd_get_section_by_name (bfd *abfd, const char *name);
 
 DESCRIPTION
-	Run through @var{abfd} and return the one of the
-	<<asection>>s whose name matches @var{name}, otherwise <<NULL>>.
-	@xref{Sections}, for more information.
-
-	This should only be used in special cases; the normal way to process
-	all sections of a given name is to use <<bfd_map_over_sections>> and
-	<<strcmp>> on the name (or better yet, base it on the section flags
-	or something else) for each section.
+	Return the most recently created section attached to @var{abfd}
+	named @var{name}.  Return NULL if no such section exists.
 */
 
 asection *
@@ -876,6 +863,63 @@ bfd_get_section_by_name (bfd *abfd, const char *name)
 
 /*
 FUNCTION
+       bfd_get_next_section_by_name
+
+SYNOPSIS
+       asection *bfd_get_next_section_by_name (asection *sec);
+
+DESCRIPTION
+       Given @var{sec} is a section returned by @code{bfd_get_section_by_name},
+       return the next most recently created section attached to the same
+       BFD with the same name.  Return NULL if no such section exists.
+*/
+
+asection *
+bfd_get_next_section_by_name (asection *sec)
+{
+  struct section_hash_entry *sh;
+  const char *name;
+  unsigned long hash;
+
+  sh = ((struct section_hash_entry *)
+	((char *) sec - offsetof (struct section_hash_entry, section)));
+
+  hash = sh->root.hash;
+  name = sec->name;
+  for (sh = (struct section_hash_entry *) sh->root.next;
+       sh != NULL;
+       sh = (struct section_hash_entry *) sh->root.next)
+    if (sh->root.hash == hash
+       && strcmp (sh->root.string, name) == 0)
+      return &sh->section;
+
+  return NULL;
+}
+
+/*
+FUNCTION
+	bfd_get_linker_section
+
+SYNOPSIS
+	asection *bfd_get_linker_section (bfd *abfd, const char *name);
+
+DESCRIPTION
+	Return the linker created section attached to @var{abfd}
+	named @var{name}.  Return NULL if no such section exists.
+*/
+
+asection *
+bfd_get_linker_section (bfd *abfd, const char *name)
+{
+  asection *sec = bfd_get_section_by_name (abfd, name);
+
+  while (sec != NULL && (sec->flags & SEC_LINKER_CREATED) == 0)
+    sec = bfd_get_next_section_by_name (sec);
+  return sec;
+}
+
+/*
+FUNCTION
 	bfd_get_section_by_name_if
 
 SYNOPSIS
diff --git a/bfd/som.c b/bfd/som.c
index 0726f84..efaf400 100644
--- a/bfd/som.c
+++ b/bfd/som.c
@@ -1,7 +1,7 @@
 /* bfd back-end for HP PA-RISC SOM objects.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
-   Free Software Foundation, Inc.
+   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
+   2012  Free Software Foundation, Inc.
 
    Contributed by the Center for Software Science at the
    University of Utah.
@@ -23,8 +23,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
    02110-1301, USA.  */
 
-#include "alloca-conf.h"
 #include "sysdep.h"
+#include "alloca-conf.h"
 #include "bfd.h"
 
 #include "libbfd.h"
diff --git a/bfd/som.h b/bfd/som.h
index c456abe..cf8dcbf 100644
--- a/bfd/som.h
+++ b/bfd/som.h
@@ -1,6 +1,6 @@
 /* HP PA-RISC SOM object file format:  definitions internal to BFD.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2001,
-   2002, 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+   2002, 2003, 2004, 2005, 2007, 2008, 2012 Free Software Foundation, Inc.
 
    Contributed by the Center for Software Science at the
    University of Utah (pa-gdb-bugs at cs.utah.edu).
@@ -63,7 +63,7 @@ typedef struct som_symbol
       unsigned int hppa_arg_reloc;
       unsigned int hppa_priv_level;
     } ap;
-    PTR any;
+    void * any;
   }
   tc_data;
 
diff --git a/bfd/sparclinux.c b/bfd/sparclinux.c
index b7fef22..6edfeeb 100644
--- a/bfd/sparclinux.c
+++ b/bfd/sparclinux.c
@@ -1,6 +1,6 @@
 /* BFD back-end for linux flavored sparc a.out binaries.
    Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002,
-   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2011
+   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -49,15 +49,10 @@ extern const bfd_target MY(vec);
    becomes important.  */
 
 static void MY_final_link_callback
-  PARAMS ((bfd *, file_ptr *, file_ptr *, file_ptr *));
-
-static bfd_boolean sparclinux_bfd_final_link
-  PARAMS ((bfd *abfd, struct bfd_link_info *info));
+  (bfd *, file_ptr *, file_ptr *, file_ptr *);
 
 static bfd_boolean
-sparclinux_bfd_final_link (abfd, info)
-     bfd *abfd;
-     struct bfd_link_info *info;
+sparclinux_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
 {
   obj_aout_subformat (abfd) = q_magic_format;
   return NAME(aout,final_link) (abfd, info, MY_final_link_callback);
@@ -67,11 +62,8 @@ sparclinux_bfd_final_link (abfd, info)
 
 /* Set the machine type correctly.  */
 
-static bfd_boolean sparclinux_write_object_contents PARAMS ((bfd *abfd));
-
 static bfd_boolean
-sparclinux_write_object_contents (abfd)
-     bfd *abfd;
+sparclinux_write_object_contents (bfd *abfd)
 {
   struct external_exec exec_bytes;
   struct internal_exec *execp = exec_hdr (abfd);
@@ -170,31 +162,13 @@ struct linux_link_hash_table
   struct fixup *fixup_list;
 };
 
-static struct bfd_hash_entry *linux_link_hash_newfunc
-  PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
-static struct bfd_link_hash_table *linux_link_hash_table_create
-  PARAMS ((bfd *));
-static struct fixup *new_fixup
-  PARAMS ((struct bfd_link_info *, struct linux_link_hash_entry *,
-	  bfd_vma, int));
-static bfd_boolean linux_link_create_dynamic_sections
-  PARAMS ((bfd *, struct bfd_link_info *));
-static bfd_boolean linux_add_one_symbol
-  PARAMS ((struct bfd_link_info *, bfd *, const char *, flagword, asection *,
-	  bfd_vma, const char *, bfd_boolean, bfd_boolean,
-	  struct bfd_link_hash_entry **));
-static bfd_boolean linux_tally_symbols
-  PARAMS ((struct linux_link_hash_entry *, PTR));
-static bfd_boolean linux_finish_dynamic_link
-  PARAMS ((bfd *, struct bfd_link_info *));
 
 /* Routine to create an entry in an Linux link hash table.  */
 
 static struct bfd_hash_entry *
-linux_link_hash_newfunc (entry, table, string)
-     struct bfd_hash_entry *entry;
-     struct bfd_hash_table *table;
-     const char *string;
+linux_link_hash_newfunc (struct bfd_hash_entry *entry,
+			 struct bfd_hash_table *table,
+			 const char *string)
 {
   struct linux_link_hash_entry *ret = (struct linux_link_hash_entry *) entry;
 
@@ -221,8 +195,7 @@ linux_link_hash_newfunc (entry, table, string)
 /* Create a Linux link hash table.  */
 
 static struct bfd_link_hash_table *
-linux_link_hash_table_create (abfd)
-     bfd *abfd;
+linux_link_hash_table_create (bfd *abfd)
 {
   struct linux_link_hash_table *ret;
   bfd_size_type amt = sizeof (struct linux_link_hash_table);
@@ -258,7 +231,7 @@ linux_link_hash_table_create (abfd)
 #define linux_link_hash_traverse(table, func, info)		       \
   (aout_link_hash_traverse					       \
    (&(table)->root,						       \
-    (bfd_boolean (*) PARAMS ((struct aout_link_hash_entry *, PTR))) (func), \
+    (bfd_boolean (*) (struct aout_link_hash_entry *, void *)) (func),  \
     (info)))
 
 /* Get the Linux link hash table from the info structure.  This is
@@ -269,11 +242,10 @@ linux_link_hash_table_create (abfd)
 /* Store the information for a new fixup.  */
 
 static struct fixup *
-new_fixup (info, h, value, builtin)
-     struct bfd_link_info *info;
-     struct linux_link_hash_entry *h;
-     bfd_vma value;
-     int builtin;
+new_fixup (struct bfd_link_info *info,
+	   struct linux_link_hash_entry *h,
+	   bfd_vma value,
+	   int builtin)
 {
   struct fixup *f;
 
@@ -299,12 +271,11 @@ new_fixup (info, h, value, builtin)
    create it for now.  */
 
 static bfd_boolean
-linux_link_create_dynamic_sections (abfd, info)
-     bfd *abfd;
-     struct bfd_link_info *info ATTRIBUTE_UNUSED;
+linux_link_create_dynamic_sections (bfd *abfd,
+				    struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
   flagword flags;
-  register asection *s;
+  asection *s;
 
   /* Note that we set the SEC_IN_MEMORY flag.  */
   flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY;
@@ -326,18 +297,16 @@ linux_link_create_dynamic_sections (abfd, info)
    tweaking needed for dynamic linking support.  */
 
 static bfd_boolean
-linux_add_one_symbol (info, abfd, name, flags, section, value, string,
-		      copy, collect, hashp)
-     struct bfd_link_info *info;
-     bfd *abfd;
-     const char *name;
-     flagword flags;
-     asection *section;
-     bfd_vma value;
-     const char *string;
-     bfd_boolean copy;
-     bfd_boolean collect;
-     struct bfd_link_hash_entry **hashp;
+linux_add_one_symbol (struct bfd_link_info *info,
+		      bfd *abfd,
+		      const char *name,
+		      flagword flags,
+		      asection *section,
+		      bfd_vma value,
+		      const char *string,
+		      bfd_boolean copy,
+		      bfd_boolean collect,
+		      struct bfd_link_hash_entry **hashp)
 {
   struct linux_link_hash_entry *h;
   bfd_boolean insert;
@@ -548,9 +517,8 @@ linux_tally_symbols (struct linux_link_hash_entry *h, void * data)
    are required.  */
 
 bfd_boolean
-bfd_sparclinux_size_dynamic_sections (output_bfd, info)
-     bfd *output_bfd;
-     struct bfd_link_info *info;
+bfd_sparclinux_size_dynamic_sections (bfd *output_bfd,
+				      struct bfd_link_info *info)
 {
   struct fixup *f;
   asection *s;
@@ -561,7 +529,7 @@ bfd_sparclinux_size_dynamic_sections (output_bfd, info)
   /* First find the fixups...  */
   linux_link_hash_traverse (linux_hash_table (info),
 			    linux_tally_symbols,
-			    (PTR) info);
+			    info);
 
   /* If there are builtin fixups, leave room for a marker.  This is
      used by the dynamic linker so that it knows that all that follow
@@ -603,9 +571,7 @@ bfd_sparclinux_size_dynamic_sections (output_bfd, info)
    the stuff we need.  */
 
 static bfd_boolean
-linux_finish_dynamic_link (output_bfd, info)
-     bfd *output_bfd;
-     struct bfd_link_info *info;
+linux_finish_dynamic_link (bfd *output_bfd, struct bfd_link_info *info)
 {
   asection *s, *os, *is;
   bfd_byte *fixup_table;
@@ -755,7 +721,7 @@ linux_finish_dynamic_link (output_bfd, info)
 		SEEK_SET) != 0)
     return FALSE;
 
-  if (bfd_bwrite ((PTR) s->contents, s->size, output_bfd) != s->size)
+  if (bfd_bwrite (s->contents, s->size, output_bfd) != s->size)
     return FALSE;
 
   return TRUE;
diff --git a/bfd/sparclynx.c b/bfd/sparclynx.c
index 93f9a87..c8a6aa0 100644
--- a/bfd/sparclynx.c
+++ b/bfd/sparclynx.c
@@ -1,6 +1,6 @@
 /* BFD support for Sparc binaries under LynxOS.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1997, 1998, 2000,
-   2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
+   2001, 2002, 2003, 2005, 2007, 2012 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -37,15 +37,15 @@
 #include "aout/stab_gnu.h"
 #include "aout/ar.h"
 
-void NAME (lynx,set_arch_mach) PARAMS ((bfd *, unsigned long));
-static void choose_reloc_size PARAMS ((bfd *));
-static bfd_boolean NAME (aout,sparclynx_write_object_contents) PARAMS ((bfd *));
+void NAME (lynx,set_arch_mach) (bfd *, unsigned long);
+static void choose_reloc_size (bfd *);
+static bfd_boolean NAME (aout,sparclynx_write_object_contents) (bfd *);
 
 /* This is needed to reject a NewsOS file, e.g. in
    gdb/testsuite/gdb.t10/crossload.exp. <kingdon at cygnus.com>
    I needed to add M_UNKNOWN to recognize a 68000 object, so this will
    probably no longer reject a NewsOS object.  <ian at cygnus.com>.  */
-#define MACHTYPE_OK(mtype) ((mtype) == M_UNKNOWN \
+#define MACHTYPE_OK(mtype) (   (mtype) == M_UNKNOWN \
 			    || (mtype) == M_68010 \
 			    || (mtype) == M_68020 \
 			    || (mtype) == M_SPARC)
@@ -70,9 +70,7 @@ static bfd_boolean NAME (aout,sparclynx_write_object_contents) PARAMS ((bfd *));
    @end table  */
 
 void
-NAME(lynx,set_arch_mach) (abfd, machtype)
-     bfd *abfd;
-     unsigned long machtype;
+NAME(lynx,set_arch_mach) (bfd *abfd, unsigned long machtype)
 {
   /* Determine the architecture and machine type of the object file.  */
   enum bfd_architecture arch;
@@ -130,8 +128,7 @@ NAME(lynx,set_arch_mach) (abfd, machtype)
 /* Determine the size of a relocation entry, based on the architecture.  */
 
 static void
-choose_reloc_size (abfd)
-     bfd *abfd;
+choose_reloc_size (bfd *abfd)
 {
   switch (bfd_get_arch (abfd))
     {
@@ -149,8 +146,7 @@ choose_reloc_size (abfd)
   file header, symbols, and relocation.  */
 
 static bfd_boolean
-NAME(aout,sparclynx_write_object_contents) (abfd)
-     bfd *abfd;
+NAME(aout,sparclynx_write_object_contents) (bfd *abfd)
 {
   struct external_exec exec_bytes;
   struct internal_exec *execp = exec_hdr (abfd);
@@ -190,11 +186,10 @@ NAME(aout,sparclynx_write_object_contents) (abfd)
 }
 
 #define MY_set_sizes sparclynx_set_sizes
-static bfd_boolean sparclynx_set_sizes PARAMS ((bfd *));
+static bfd_boolean sparclynx_set_sizes (bfd *);
 
 static bfd_boolean
-sparclynx_set_sizes (abfd)
-     bfd *abfd;
+sparclynx_set_sizes (bfd *abfd)
 {
   switch (bfd_get_arch (abfd))
     {
@@ -228,7 +223,7 @@ static const struct aout_backend_data sparclynx_aout_backend =
 #define MY_bfd_debug_info_start		bfd_void
 #define MY_bfd_debug_info_end		bfd_void
 #define MY_bfd_debug_info_accumulate	\
-		(void (*) PARAMS ((bfd *, struct bfd_section *))) bfd_void
+		(void (*) (bfd *, struct bfd_section *)) bfd_void
 
 #define MY_write_object_contents	NAME(aout,sparclynx_write_object_contents)
 #define MY_backend_data			&sparclynx_aout_backend
diff --git a/bfd/stab-syms.c b/bfd/stab-syms.c
index 9e9274f..8e65ddc 100644
--- a/bfd/stab-syms.c
+++ b/bfd/stab-syms.c
@@ -1,5 +1,5 @@
 /* Table of stab names for the BFD library.
-   Copyright 1990, 1991, 1992, 1994, 1995, 1996, 2000, 2005, 2007
+   Copyright 1990, 1991, 1992, 1994, 1995, 1996, 2000, 2005, 2007, 2012
    Free Software Foundation, Inc.
    Written by Cygnus Support.
 
@@ -20,6 +20,7 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include "bfd.h"
 
 #define ARCH_SIZE 32		/* Value doesn't matter.  */
diff --git a/bfd/sunos.c b/bfd/sunos.c
index 8ef25ed..028fb28 100644
--- a/bfd/sunos.c
+++ b/bfd/sunos.c
@@ -1,6 +1,6 @@
 /* BFD backend for SunOS binaries.
    Copyright 1990, 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2011
+   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2011, 2012
    Free Software Foundation, Inc.
    Written by Cygnus Support.
 
@@ -28,6 +28,7 @@
    the tokens.  */
 #define MY(OP) CONCAT2 (sunos_big_,OP)
 
+#include "sysdep.h"
 #include "bfd.h"
 #include "bfdlink.h"
 #include "libaout.h"
@@ -747,49 +748,53 @@ sunos_create_dynamic_sections (bfd *abfd,
       /* The .dynamic section holds the basic dynamic information: the
 	 sun4_dynamic structure, the dynamic debugger information, and
 	 the sun4_dynamic_link structure.  */
-      s = bfd_make_section_with_flags (abfd, ".dynamic", flags);
+      s = bfd_make_section_anyway_with_flags (abfd, ".dynamic", flags);
       if (s == NULL
 	  || ! bfd_set_section_alignment (abfd, s, 2))
 	return FALSE;
 
       /* The .got section holds the global offset table.  The address
 	 is put in the ld_got field.  */
-      s = bfd_make_section_with_flags (abfd, ".got", flags);
+      s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
       if (s == NULL
 	  || ! bfd_set_section_alignment (abfd, s, 2))
 	return FALSE;
 
       /* The .plt section holds the procedure linkage table.  The
 	 address is put in the ld_plt field.  */
-      s = bfd_make_section_with_flags (abfd, ".plt", flags | SEC_CODE);
+      s = bfd_make_section_anyway_with_flags (abfd, ".plt", flags | SEC_CODE);
       if (s == NULL
 	  || ! bfd_set_section_alignment (abfd, s, 2))
 	return FALSE;
 
       /* The .dynrel section holds the dynamic relocs.  The address is
 	 put in the ld_rel field.  */
-      s = bfd_make_section_with_flags (abfd, ".dynrel", flags | SEC_READONLY);
+      s = bfd_make_section_anyway_with_flags (abfd, ".dynrel",
+					      flags | SEC_READONLY);
       if (s == NULL
 	  || ! bfd_set_section_alignment (abfd, s, 2))
 	return FALSE;
 
       /* The .hash section holds the dynamic hash table.  The address
 	 is put in the ld_hash field.  */
-      s = bfd_make_section_with_flags (abfd, ".hash", flags | SEC_READONLY);
+      s = bfd_make_section_anyway_with_flags (abfd, ".hash",
+					      flags | SEC_READONLY);
       if (s == NULL
 	  || ! bfd_set_section_alignment (abfd, s, 2))
 	return FALSE;
 
       /* The .dynsym section holds the dynamic symbols.  The address
 	 is put in the ld_stab field.  */
-      s = bfd_make_section_with_flags (abfd, ".dynsym", flags | SEC_READONLY);
+      s = bfd_make_section_anyway_with_flags (abfd, ".dynsym",
+					      flags | SEC_READONLY);
       if (s == NULL
 	  || ! bfd_set_section_alignment (abfd, s, 2))
 	return FALSE;
 
       /* The .dynstr section holds the dynamic symbol string table.
 	 The address is put in the ld_symbols field.  */
-      s = bfd_make_section_with_flags (abfd, ".dynstr", flags | SEC_READONLY);
+      s = bfd_make_section_anyway_with_flags (abfd, ".dynstr",
+					      flags | SEC_READONLY);
       if (s == NULL
 	  || ! bfd_set_section_alignment (abfd, s, 2))
 	return FALSE;
@@ -804,7 +809,7 @@ sunos_create_dynamic_sections (bfd *abfd,
 
       dynobj = sunos_hash_table (info)->dynobj;
 
-      s = bfd_get_section_by_name (dynobj, ".got");
+      s = bfd_get_linker_section (dynobj, ".got");
       if (s->size == 0)
 	s->size = BYTES_IN_WORD;
 
@@ -1324,11 +1329,11 @@ sunos_scan_std_relocs (struct bfd_link_info *info,
 	  if (! sunos_create_dynamic_sections (abfd, info, FALSE))
 	    return FALSE;
 	  dynobj = sunos_hash_table (info)->dynobj;
-	  splt = bfd_get_section_by_name (dynobj, ".plt");
-	  srel = bfd_get_section_by_name (dynobj, ".dynrel");
+	  splt = bfd_get_linker_section (dynobj, ".plt");
+	  srel = bfd_get_linker_section (dynobj, ".dynrel");
 	  BFD_ASSERT (splt != NULL && srel != NULL);
 
-	  sgot = bfd_get_section_by_name (dynobj, ".got");
+	  sgot = bfd_get_linker_section (dynobj, ".got");
 	  BFD_ASSERT (sgot != NULL);
 	  if (sgot->size == 0)
 	    sgot->size = BYTES_IN_WORD;
@@ -1474,9 +1479,9 @@ sunos_scan_ext_relocs (struct bfd_link_info *info,
 	      if (! sunos_create_dynamic_sections (abfd, info, FALSE))
 		return FALSE;
 	      dynobj = sunos_hash_table (info)->dynobj;
-	      splt = bfd_get_section_by_name (dynobj, ".plt");
-	      sgot = bfd_get_section_by_name (dynobj, ".got");
-	      srel = bfd_get_section_by_name (dynobj, ".dynrel");
+	      splt = bfd_get_linker_section (dynobj, ".plt");
+	      sgot = bfd_get_linker_section (dynobj, ".got");
+	      srel = bfd_get_linker_section (dynobj, ".dynrel");
 	      BFD_ASSERT (splt != NULL && sgot != NULL && srel != NULL);
 
 	      /* Make sure we have an initial entry in the .got table.  */
@@ -1542,9 +1547,9 @@ sunos_scan_ext_relocs (struct bfd_link_info *info,
 		  if (! sunos_create_dynamic_sections (abfd, info, TRUE))
 		    return FALSE;
 		  dynobj = sunos_hash_table (info)->dynobj;
-		  splt = bfd_get_section_by_name (dynobj, ".plt");
-		  sgot = bfd_get_section_by_name (dynobj, ".got");
-		  srel = bfd_get_section_by_name (dynobj, ".dynrel");
+		  splt = bfd_get_linker_section (dynobj, ".plt");
+		  sgot = bfd_get_linker_section (dynobj, ".got");
+		  srel = bfd_get_linker_section (dynobj, ".dynrel");
 		  BFD_ASSERT (splt != NULL && sgot != NULL && srel != NULL);
 		}
 
@@ -1589,9 +1594,9 @@ sunos_scan_ext_relocs (struct bfd_link_info *info,
 	  if (! sunos_create_dynamic_sections (abfd, info, FALSE))
 	    return FALSE;
 	  dynobj = sunos_hash_table (info)->dynobj;
-	  splt = bfd_get_section_by_name (dynobj, ".plt");
-	  sgot = bfd_get_section_by_name (dynobj, ".got");
-	  srel = bfd_get_section_by_name (dynobj, ".dynrel");
+	  splt = bfd_get_linker_section (dynobj, ".plt");
+	  sgot = bfd_get_linker_section (dynobj, ".got");
+	  srel = bfd_get_linker_section (dynobj, ".dynrel");
 	  BFD_ASSERT (splt != NULL && sgot != NULL && srel != NULL);
 
 	  /* Make sure we have an initial entry in the .got table.  */
@@ -1814,7 +1819,7 @@ sunos_scan_dynamic_symbol (struct sunos_link_hash_entry *h, void * data)
 	 regular symbols includes the debugging symbols, which have
 	 long names and are often duplicated in several object files.
 	 There are no debugging symbols in the dynamic symbols.  */
-      s = bfd_get_section_by_name (dynobj, ".dynstr");
+      s = bfd_get_linker_section (dynobj, ".dynstr");
       BFD_ASSERT (s != NULL);
       contents = bfd_realloc (s->contents, s->size + len + 1);
       if (contents == NULL)
@@ -1833,7 +1838,7 @@ sunos_scan_dynamic_symbol (struct sunos_link_hash_entry *h, void * data)
       hash &= 0x7fffffff;
       hash %= sunos_hash_table (info)->bucketcount;
 
-      s = bfd_get_section_by_name (dynobj, ".hash");
+      s = bfd_get_linker_section (dynobj, ".hash");
       BFD_ASSERT (s != NULL);
 
       if (GET_SWORD (dynobj, s->contents + hash * HASH_ENTRY_SIZE) == -1)
@@ -1930,14 +1935,14 @@ bfd_sunos_size_dynamic_sections (bfd *output_bfd,
 	  ++sunos_hash_table (info)->dynsymcount;
 	  h->dynindx = -2;
 	}
+      s = bfd_get_linker_section (dynobj, ".got");
+      BFD_ASSERT (s != NULL);
       h->root.root.type = bfd_link_hash_defined;
-      h->root.root.u.def.section = bfd_get_section_by_name (dynobj, ".got");
+      h->root.root.u.def.section = s;
 
       /* If the .got section is more than 0x1000 bytes, we set
 	 __GLOBAL_OFFSET_TABLE_ to be 0x1000 bytes into the section,
 	 so that 13 bit relocations have a greater chance of working.  */
-      s = bfd_get_section_by_name (dynobj, ".got");
-      BFD_ASSERT (s != NULL);
       if (s->size >= 0x1000)
 	h->root.root.u.def.value = 0x1000;
       else
@@ -1950,7 +1955,7 @@ bfd_sunos_size_dynamic_sections (bfd *output_bfd,
      up the dynamic linking information.  */
   if (sunos_hash_table (info)->dynamic_sections_needed)
     {
-      *sdynptr = bfd_get_section_by_name (dynobj, ".dynamic");
+      *sdynptr = bfd_get_linker_section (dynobj, ".dynamic");
 
       /* The .dynamic section is always the same size.  */
       s = *sdynptr;
@@ -1967,7 +1972,7 @@ bfd_sunos_size_dynamic_sections (bfd *output_bfd,
 	 symbols.  We build the dynamic symbol string table (.dynstr)
 	 in a traversal of the symbol table using
 	 sunos_scan_dynamic_symbol.  */
-      s = bfd_get_section_by_name (dynobj, ".dynsym");
+      s = bfd_get_linker_section (dynobj, ".dynsym");
       BFD_ASSERT (s != NULL);
       s->size = dynsymcount * sizeof (struct external_nlist);
       s->contents = bfd_alloc (output_bfd, s->size);
@@ -1988,7 +1993,7 @@ bfd_sunos_size_dynamic_sections (bfd *output_bfd,
 	bucketcount = dynsymcount;
       else
 	bucketcount = 1;
-      s = bfd_get_section_by_name (dynobj, ".hash");
+      s = bfd_get_linker_section (dynobj, ".hash");
       BFD_ASSERT (s != NULL);
       hashalloc = (dynsymcount + bucketcount - 1) * HASH_ENTRY_SIZE;
       s->contents = bfd_zalloc (dynobj, hashalloc);
@@ -2012,7 +2017,7 @@ bfd_sunos_size_dynamic_sections (bfd *output_bfd,
       /* The SunOS native linker seems to align the total size of the
 	 symbol strings to a multiple of 8.  I don't know if this is
 	 important, but it can't hurt much.  */
-      s = bfd_get_section_by_name (dynobj, ".dynstr");
+      s = bfd_get_linker_section (dynobj, ".dynstr");
       BFD_ASSERT (s != NULL);
       if ((s->size & 7) != 0)
 	{
@@ -2031,7 +2036,7 @@ bfd_sunos_size_dynamic_sections (bfd *output_bfd,
 
   /* Now that we have worked out the sizes of the procedure linkage
      table and the dynamic relocs, allocate storage for them.  */
-  s = bfd_get_section_by_name (dynobj, ".plt");
+  s = bfd_get_linker_section (dynobj, ".plt");
   BFD_ASSERT (s != NULL);
   if (s->size != 0)
     {
@@ -2055,7 +2060,7 @@ bfd_sunos_size_dynamic_sections (bfd *output_bfd,
 	}
     }
 
-  s = bfd_get_section_by_name (dynobj, ".dynrel");
+  s = bfd_get_linker_section (dynobj, ".dynrel");
   if (s->size != 0)
     {
       s->contents = bfd_alloc (dynobj, s->size);
@@ -2067,7 +2072,7 @@ bfd_sunos_size_dynamic_sections (bfd *output_bfd,
   s->reloc_count = 0;
 
   /* Make space for the global offset table.  */
-  s = bfd_get_section_by_name (dynobj, ".got");
+  s = bfd_get_linker_section (dynobj, ".got");
   s->contents = bfd_alloc (dynobj, s->size);
   if (s->contents == NULL)
     return FALSE;
@@ -2113,10 +2118,10 @@ sunos_write_dynamic_symbol (bfd *output_bfd,
       bfd_vma r_address;
 
       dynobj = sunos_hash_table (info)->dynobj;
-      splt = bfd_get_section_by_name (dynobj, ".plt");
+      splt = bfd_get_linker_section (dynobj, ".plt");
       p = splt->contents + h->plt_offset;
 
-      s = bfd_get_section_by_name (dynobj, ".dynrel");
+      s = bfd_get_linker_section (dynobj, ".dynrel");
 
       r_address = (splt->output_section->vma
 		   + splt->output_offset
@@ -2300,7 +2305,7 @@ sunos_write_dynamic_symbol (bfd *output_bfd,
       return TRUE;
     }
 
-  s = bfd_get_section_by_name (sunos_hash_table (info)->dynobj, ".dynsym");
+  s = bfd_get_linker_section (sunos_hash_table (info)->dynobj, ".dynsym");
   BFD_ASSERT (s != NULL);
   outsym = ((struct external_nlist *)
 	    (s->contents + h->dynindx * EXTERNAL_NLIST_SIZE));
@@ -2355,7 +2360,7 @@ sunos_check_dynamic_reloc (struct bfd_link_info *info,
       asection *splt;
 
       /* Redirect the relocation to the PLT entry.  */
-      splt = bfd_get_section_by_name (dynobj, ".plt");
+      splt = bfd_get_linker_section (dynobj, ".plt");
       *relocationp = (splt->output_section->vma
 		      + splt->output_offset
 		      + h->plt_offset);
@@ -2450,7 +2455,7 @@ sunos_check_dynamic_reloc (struct bfd_link_info *info,
 
       BFD_ASSERT (got_offsetp != NULL && *got_offsetp != 0);
 
-      sgot = bfd_get_section_by_name (dynobj, ".got");
+      sgot = bfd_get_linker_section (dynobj, ".got");
 
       /* We set the least significant bit to indicate whether we have
 	 already initialized the GOT entry.  */
@@ -2472,7 +2477,7 @@ sunos_check_dynamic_reloc (struct bfd_link_info *info,
 	      /* We need to create a GLOB_DAT or 32 reloc to tell the
 		 dynamic linker to fill in this entry in the table.  */
 
-	      s = bfd_get_section_by_name (dynobj, ".dynrel");
+	      s = bfd_get_linker_section (dynobj, ".dynrel");
 	      BFD_ASSERT (s != NULL);
 	      BFD_ASSERT (s->reloc_count * obj_reloc_entry_size (dynobj)
 			  < s->size);
@@ -2602,7 +2607,7 @@ sunos_check_dynamic_reloc (struct bfd_link_info *info,
 
   /* It looks like this is a reloc we are supposed to copy.  */
 
-  s = bfd_get_section_by_name (dynobj, ".dynrel");
+  s = bfd_get_linker_section (dynobj, ".dynrel");
   BFD_ASSERT (s != NULL);
   BFD_ASSERT (s->reloc_count * obj_reloc_entry_size (dynobj) < s->size);
 
@@ -2700,7 +2705,7 @@ sunos_finish_dynamic_link (bfd *abfd, struct bfd_link_info *info)
 
   dynobj = sunos_hash_table (info)->dynobj;
 
-  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
   BFD_ASSERT (sdyn != NULL);
 
   /* Finish up the .need section.  The linker emulation code filled it
@@ -2730,7 +2735,7 @@ sunos_finish_dynamic_link (bfd *abfd, struct bfd_link_info *info)
 
   /* The first entry in the .got section is the address of the
      dynamic information, unless this is a shared library.  */
-  s = bfd_get_section_by_name (dynobj, ".got");
+  s = bfd_get_linker_section (dynobj, ".got");
   BFD_ASSERT (s != NULL);
   if (info->shared || sdyn->size == 0)
     PUT_WORD (dynobj, 0, s->contents);
@@ -2792,30 +2797,30 @@ sunos_finish_dynamic_link (bfd *abfd, struct bfd_link_info *info)
 	PUT_WORD (dynobj, s->output_section->filepos + s->output_offset,
 		  esdl.ld_rules);
 
-      s = bfd_get_section_by_name (dynobj, ".got");
+      s = bfd_get_linker_section (dynobj, ".got");
       BFD_ASSERT (s != NULL);
       PUT_WORD (dynobj, s->output_section->vma + s->output_offset,
 		esdl.ld_got);
 
-      s = bfd_get_section_by_name (dynobj, ".plt");
+      s = bfd_get_linker_section (dynobj, ".plt");
       BFD_ASSERT (s != NULL);
       PUT_WORD (dynobj, s->output_section->vma + s->output_offset,
 		esdl.ld_plt);
       PUT_WORD (dynobj, s->size, esdl.ld_plt_sz);
 
-      s = bfd_get_section_by_name (dynobj, ".dynrel");
+      s = bfd_get_linker_section (dynobj, ".dynrel");
       BFD_ASSERT (s != NULL);
       BFD_ASSERT (s->reloc_count * obj_reloc_entry_size (dynobj)
 		  == s->size);
       PUT_WORD (dynobj, s->output_section->filepos + s->output_offset,
 		esdl.ld_rel);
 
-      s = bfd_get_section_by_name (dynobj, ".hash");
+      s = bfd_get_linker_section (dynobj, ".hash");
       BFD_ASSERT (s != NULL);
       PUT_WORD (dynobj, s->output_section->filepos + s->output_offset,
 		esdl.ld_hash);
 
-      s = bfd_get_section_by_name (dynobj, ".dynsym");
+      s = bfd_get_linker_section (dynobj, ".dynsym");
       BFD_ASSERT (s != NULL);
       PUT_WORD (dynobj, s->output_section->filepos + s->output_offset,
 		esdl.ld_stab);
@@ -2825,7 +2830,7 @@ sunos_finish_dynamic_link (bfd *abfd, struct bfd_link_info *info)
       PUT_WORD (dynobj, (bfd_vma) sunos_hash_table (info)->bucketcount,
 		esdl.ld_buckets);
 
-      s = bfd_get_section_by_name (dynobj, ".dynstr");
+      s = bfd_get_linker_section (dynobj, ".dynstr");
       BFD_ASSERT (s != NULL);
       PUT_WORD (dynobj, s->output_section->filepos + s->output_offset,
 		esdl.ld_symbols);
diff --git a/bfd/syms.c b/bfd/syms.c
index e819eae..bf5a488 100644
--- a/bfd/syms.c
+++ b/bfd/syms.c
@@ -1,6 +1,6 @@
 /* Generic symbol-table support for the BFD library.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009
+   2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2012
    Free Software Foundation, Inc.
    Written by Cygnus Support.
 
@@ -107,6 +107,7 @@ SUBSECTION
 	which has been created using <<bfd_make_empty_symbol>>.  Here is an
 	example showing the creation of a symbol table with only one element:
 
+|	#include "sysdep.h"
 |	#include "bfd.h"
 |	int main (void)
 |	{
diff --git a/bfd/sysdep.h b/bfd/sysdep.h
index 20ef56d..b4fed10 100644
--- a/bfd/sysdep.h
+++ b/bfd/sysdep.h
@@ -23,6 +23,10 @@
 #ifndef BFD_SYSDEP_H
 #define BFD_SYSDEP_H
 
+#ifdef PACKAGE
+#error sysdep.h must be included in lieu of config.h
+#endif
+
 #include "config.h"
 
 #include "ansidecl.h"
diff --git a/bfd/targets.c b/bfd/targets.c
index 4cf8e8f..cfa91a8 100644
--- a/bfd/targets.c
+++ b/bfd/targets.c
@@ -1,6 +1,6 @@
 /* Generic target-file-type support for the BFD library.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
    Written by Cygnus Support.
 
@@ -497,8 +497,9 @@ BFD_JUMP_TABLE macros.
 .  bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *);
 .
 .  {* Sets the bitmask of allowed and disallowed section flags.  *}
-.  void (*_bfd_lookup_section_flags) (struct bfd_link_info *,
-.				      struct flag_info *);
+.  bfd_boolean (*_bfd_lookup_section_flags) (struct bfd_link_info *,
+.					     struct flag_info *,
+.					     asection *);
 .
 .  {* Attempt to merge SEC_MERGE sections.  *}
 .  bfd_boolean (*_bfd_merge_sections) (bfd *, struct bfd_link_info *);
@@ -596,6 +597,7 @@ extern const bfd_target bfd_elf32_bfinfdpic_vec;
 extern const bfd_target bfd_elf32_big_generic_vec;
 extern const bfd_target bfd_elf32_bigarc_vec;
 extern const bfd_target bfd_elf32_bigarm_vec;
+extern const bfd_target bfd_elf32_bigarm_nacl_vec;
 extern const bfd_target bfd_elf32_bigarm_symbian_vec;
 extern const bfd_target bfd_elf32_bigarm_vxworks_vec;
 extern const bfd_target bfd_elf32_bigmips_vec;
@@ -634,6 +636,7 @@ extern const bfd_target bfd_elf32_lm32fdpic_vec;
 extern const bfd_target bfd_elf32_little_generic_vec;
 extern const bfd_target bfd_elf32_littlearc_vec;
 extern const bfd_target bfd_elf32_littlearm_vec;
+extern const bfd_target bfd_elf32_littlearm_nacl_vec;
 extern const bfd_target bfd_elf32_littlearm_symbian_vec;
 extern const bfd_target bfd_elf32_littlearm_vxworks_vec;
 extern const bfd_target bfd_elf32_littlemips_vec;
@@ -704,7 +707,8 @@ extern const bfd_target bfd_elf32_tic6x_elf_be_vec;
 extern const bfd_target bfd_elf32_tic6x_elf_le_vec;
 extern const bfd_target bfd_elf32_tic6x_linux_be_vec;
 extern const bfd_target bfd_elf32_tic6x_linux_le_vec;
-extern const bfd_target bfd_elf32_tilegx_vec;
+extern const bfd_target bfd_elf32_tilegx_be_vec;
+extern const bfd_target bfd_elf32_tilegx_le_vec;
 extern const bfd_target bfd_elf32_tilepro_vec;
 extern const bfd_target bfd_elf32_tradbigmips_vec;
 extern const bfd_target bfd_elf32_tradlittlemips_vec;
@@ -714,6 +718,7 @@ extern const bfd_target bfd_elf32_us_cris_vec;
 extern const bfd_target bfd_elf32_v850_vec;
 extern const bfd_target bfd_elf32_vax_vec;
 extern const bfd_target bfd_elf32_xc16x_vec;
+extern const bfd_target bfd_elf32_xgate_vec;
 extern const bfd_target bfd_elf32_xstormy16_vec;
 extern const bfd_target bfd_elf32_xtensa_be_vec;
 extern const bfd_target bfd_elf32_xtensa_le_vec;
@@ -743,14 +748,17 @@ extern const bfd_target bfd_elf64_sh64nbsd_vec;
 extern const bfd_target bfd_elf64_sparc_vec;
 extern const bfd_target bfd_elf64_sparc_freebsd_vec;
 extern const bfd_target bfd_elf64_sparc_sol2_vec;
-extern const bfd_target bfd_elf64_tilegx_vec;
+extern const bfd_target bfd_elf64_tilegx_be_vec;
+extern const bfd_target bfd_elf64_tilegx_le_vec;
 extern const bfd_target bfd_elf64_tradbigmips_vec;
 extern const bfd_target bfd_elf64_tradlittlemips_vec;
 extern const bfd_target bfd_elf64_tradbigmips_freebsd_vec;
 extern const bfd_target bfd_elf64_tradlittlemips_freebsd_vec;
 extern const bfd_target bfd_elf64_x86_64_freebsd_vec;
+extern const bfd_target bfd_elf64_x86_64_nacl_vec;
 extern const bfd_target bfd_elf64_x86_64_sol2_vec;
 extern const bfd_target bfd_elf64_x86_64_vec;
+extern const bfd_target bfd_elf32_x86_64_nacl_vec;
 extern const bfd_target bfd_elf32_x86_64_vec;
 extern const bfd_target bfd_elf64_l1om_freebsd_vec;
 extern const bfd_target bfd_elf64_l1om_vec;
@@ -1073,7 +1081,8 @@ static const bfd_target * const _bfd_target_vector[] =
 	&bfd_elf32_spu_vec,
 	&bfd_elf32_tic6x_be_vec,
 	&bfd_elf32_tic6x_le_vec,
-	&bfd_elf32_tilegx_vec,
+	&bfd_elf32_tilegx_be_vec,
+	&bfd_elf32_tilegx_le_vec,
 	&bfd_elf32_tilepro_vec,
 	&bfd_elf32_tradbigmips_vec,
 	&bfd_elf32_tradlittlemips_vec,
@@ -1083,6 +1092,7 @@ static const bfd_target * const _bfd_target_vector[] =
 	&bfd_elf32_v850_vec,
 	&bfd_elf32_vax_vec,
 	&bfd_elf32_xc16x_vec,
+	&bfd_elf32_xgate_vec,
 	&bfd_elf32_xstormy16_vec,
 	&bfd_elf32_xtensa_be_vec,
 	&bfd_elf32_xtensa_le_vec,
@@ -1113,14 +1123,17 @@ static const bfd_target * const _bfd_target_vector[] =
 	&bfd_elf64_sparc_vec,
 	&bfd_elf64_sparc_freebsd_vec,
 	&bfd_elf64_sparc_sol2_vec,
-	&bfd_elf64_tilegx_vec,
+	&bfd_elf64_tilegx_be_vec,
+	&bfd_elf64_tilegx_le_vec,
 	&bfd_elf64_tradbigmips_vec,
 	&bfd_elf64_tradlittlemips_vec,
 	&bfd_elf64_tradbigmips_freebsd_vec,
 	&bfd_elf64_tradlittlemips_freebsd_vec,
 	&bfd_elf64_x86_64_freebsd_vec,
+	&bfd_elf64_x86_64_nacl_vec,
 	&bfd_elf64_x86_64_sol2_vec,
 	&bfd_elf64_x86_64_vec,
+	&bfd_elf32_x86_64_nacl_vec,
 	&bfd_elf32_x86_64_vec,
 	&bfd_elf64_l1om_freebsd_vec,
 	&bfd_elf64_l1om_vec,
diff --git a/bfd/ticoff.h b/bfd/ticoff.h
index e2c9316..d34ca21 100644
--- a/bfd/ticoff.h
+++ b/bfd/ticoff.h
@@ -21,9 +21,8 @@
 #define	F_LSYMS		F_LSYMS_TICOFF
 
 static bfd_boolean
-ticoff0_bad_format_hook (abfd, filehdr)
-     bfd *abfd;
-     PTR filehdr;
+ticoff0_bad_format_hook (bfd * abfd,
+			 void * filehdr)
 {
   struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
 
@@ -34,9 +33,8 @@ ticoff0_bad_format_hook (abfd, filehdr)
 }
 
 static bfd_boolean
-ticoff1_bad_format_hook (abfd, filehdr)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     PTR filehdr;
+ticoff1_bad_format_hook (bfd * abfd ATTRIBUTE_UNUSED,
+			 void * filehdr)
 {
   struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
 
@@ -49,9 +47,8 @@ ticoff1_bad_format_hook (abfd, filehdr)
 /* Replace the stock _bfd_coff_is_local_label_name
    to recognize TI COFF local labels.  */
 static bfd_boolean 
-ticoff_bfd_is_local_label_name (abfd, name)
-  bfd *abfd ATTRIBUTE_UNUSED;
-  const char *name;
+ticoff_bfd_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
+				const char *name)
 {
   if (TICOFF_LOCAL_LABEL_P(name))
     return TRUE;
diff --git a/bfd/trad-core.c b/bfd/trad-core.c
index 4b9d14d..da52c31 100644
--- a/bfd/trad-core.c
+++ b/bfd/trad-core.c
@@ -1,6 +1,6 @@
 /* BFD back end for traditional Unix core files (U-area and raw sections)
    Copyright 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2011
+   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2011, 2012
    Free Software Foundation, Inc.
    Written by John Gilmore of Cygnus Support.
 
@@ -60,26 +60,21 @@ struct trad_core_struct
   struct user u;
 };
 
-#define core_upage(bfd) (&((bfd)->tdata.trad_core_data->u))
-#define core_datasec(bfd) ((bfd)->tdata.trad_core_data->data_section)
+#define core_upage(bfd)  (&((bfd)->tdata.trad_core_data->u))
+#define core_datasec(bfd)  ((bfd)->tdata.trad_core_data->data_section)
 #define core_stacksec(bfd) ((bfd)->tdata.trad_core_data->stack_section)
-#define core_regsec(bfd) ((bfd)->tdata.trad_core_data->reg_section)
+#define core_regsec(bfd)   ((bfd)->tdata.trad_core_data->reg_section)
 
 /* forward declarations */
 
-const bfd_target *trad_unix_core_file_p PARAMS ((bfd *abfd));
-char * trad_unix_core_file_failing_command PARAMS ((bfd *abfd));
-int trad_unix_core_file_failing_signal PARAMS ((bfd *abfd));
 #define trad_unix_core_file_matches_executable_p generic_core_file_matches_executable_p
 #define trad_unix_core_file_pid _bfd_nocore_core_file_pid
-static void swap_abort PARAMS ((void));
 
-/* Handle 4.2-style (and perhaps also sysV-style) core dump file.  */
 
-const bfd_target *
-trad_unix_core_file_p (abfd)
-     bfd *abfd;
+/* Handle 4.2-style (and perhaps also sysV-style) core dump file.  */
 
+static const bfd_target *
+trad_unix_core_file_p (bfd *abfd)
 {
   int val;
   struct user u;
@@ -236,9 +231,8 @@ trad_unix_core_file_p (abfd)
   return NULL;
 }
 
-char *
-trad_unix_core_file_failing_command (abfd)
-     bfd *abfd;
+static char *
+trad_unix_core_file_failing_command (bfd *abfd)
 {
 #ifndef NO_CORE_COMMAND
   char *com = abfd->tdata.trad_core_data->u.u_comm;
@@ -249,9 +243,8 @@ trad_unix_core_file_failing_command (abfd)
     return 0;
 }
 
-int
-trad_unix_core_file_failing_signal (ignore_abfd)
-     bfd *ignore_abfd ATTRIBUTE_UNUSED;
+static int
+trad_unix_core_file_failing_signal (bfd *ignore_abfd ATTRIBUTE_UNUSED)
 {
 #ifdef TRAD_UNIX_CORE_FILE_FAILING_SIGNAL
   return TRAD_UNIX_CORE_FILE_FAILING_SIGNAL(ignore_abfd);
@@ -262,7 +255,7 @@ trad_unix_core_file_failing_signal (ignore_abfd)
 

 /* If somebody calls any byte-swapping routines, shoot them.  */
 static void
-swap_abort ()
+swap_abort (void)
 {
   abort (); /* This way doesn't require any declaration for ANSI to fuck up */
 }
@@ -322,5 +315,5 @@ const bfd_target trad_core_vec =
 
     NULL,
 
-    (PTR) 0			/* backend_data */
+    NULL			/* backend_data */
   };
diff --git a/bfd/versados.c b/bfd/versados.c
index 7f7766a..ae6f671 100644
--- a/bfd/versados.c
+++ b/bfd/versados.c
@@ -1,6 +1,6 @@
 /* BFD back-end for VERSAdos-E objects.
    Copyright 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-   2006, 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
+   2006, 2007, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
    Written by Steve Chamberlain of Cygnus Support <sac at cygnus.com>.
 
    Versados is a Motorola trademark.
@@ -287,7 +287,7 @@ process_esd (bfd *abfd, struct ext_esd *esd, int pass)
 	  sec->flags |= SEC_ALLOC;
 	  break;
 	case ESD_XDEF_IN_ABS:
-	  sec = (asection *) & bfd_abs_section;
+	  sec = bfd_abs_section_ptr;
 	case ESD_XDEF_IN_SEC:
 	  {
 	    int snum = VDATA (abfd)->def_idx++;
@@ -768,7 +768,7 @@ versados_canonicalize_reloc (bfd *abfd,
 	  int esdid = (int) (size_t) src[count].sym_ptr_ptr;
 
 	  if (esdid == 0)
-	    src[count].sym_ptr_ptr = bfd_abs_section.symbol_ptr_ptr;
+	    src[count].sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
 	  else if (esdid < ES_BASE)
 	    {
 	      /* Section relative thing.  */
diff --git a/bfd/version.h b/bfd/version.h
index f246094..ecf6d14 100644
--- a/bfd/version.h
+++ b/bfd/version.h
@@ -1,4 +1,4 @@
-#define BFD_VERSION_DATE 20111213
+#define BFD_VERSION_DATE 20120718
 #define BFD_VERSION @bfd_version@
 #define BFD_VERSION_STRING  @bfd_version_package@ @bfd_version_string@
 #define REPORT_BUGS_TO @report_bugs_to@
diff --git a/bfd/vms-lib.c b/bfd/vms-lib.c
index b325d74..fa23b78 100644
--- a/bfd/vms-lib.c
+++ b/bfd/vms-lib.c
@@ -35,7 +35,8 @@
 #endif
 
 /* Maximum key length (which is also the maximum symbol length in archive).  */
-#define MAX_KEYLEN 129
+#define MAX_KEYLEN 128
+#define MAX_EKEYLEN 1024
 
 /* DCX Submaps.  */
 
@@ -277,6 +278,9 @@ vms_traverse_index (bfd *abfd, unsigned int vbn, struct carsym_mem *cs)
       if (idx_vbn == 0)
         return FALSE;
 
+      /* Point to the next index entry.  */
+      p = keyname + keylen;
+
       if (idx_off == RFADEF__C_INDEX)
         {
           /* Indirect entry.  Recurse.  */
@@ -368,9 +372,6 @@ vms_traverse_index (bfd *abfd, unsigned int vbn, struct carsym_mem *cs)
                 return FALSE;
             }
         }
-
-      /* Point to the next index entry.  */
-      p = keyname + keylen;
     }
 
   return TRUE;
@@ -1295,6 +1296,7 @@ _bfd_vms_lib_get_module (bfd *abfd, unsigned int modidx)
   struct lib_tdata *tdata = bfd_libdata (abfd);
   bfd *res;
   file_ptr file_off;
+  char *name;
 
   /* Sanity check.  */
   if (modidx >= tdata->nbr_modules)
@@ -1356,7 +1358,25 @@ _bfd_vms_lib_get_module (bfd *abfd, unsigned int modidx)
       res->origin = file_off + tdata->mhd_size;
     }
 
-  res->filename = tdata->modules[modidx].name;
+  /* Set filename.  */
+  name = tdata->modules[modidx].name;
+  switch (tdata->type)
+    {
+    case LBR__C_TYP_IOBJ:
+    case LBR__C_TYP_EOBJ:
+      /* For object archives, append .obj to mimic standard behaviour.  */
+      {
+	size_t namelen = strlen (name);
+	char *name1 = bfd_alloc (res, namelen + 4 + 1);
+	memcpy (name1, name, namelen);
+	strcpy (name1 + namelen, ".obj");
+	name = name1;
+      }
+      break;
+    default:
+      break;
+    }
+  res->filename = name;
 
   tdata->cache[modidx] = res;
 
@@ -1567,15 +1587,23 @@ vms_write_index (bfd *abfd,
                  struct lib_index *idx, unsigned int nbr, unsigned int *vbn,
                  unsigned int *topvbn, bfd_boolean is_elfidx)
 {
+  /* The index is organized as a tree.  This function implements a naive
+     algorithm to balance the tree: it fills the leaves, and create a new
+     branch when all upper leaves and branches are full.  We only keep in
+     memory a path to the current leaf.  */
   unsigned int i;
   int j;
   int level;
+  /* Disk blocks for the current path.  */
   struct vms_indexdef *rblk[MAX_LEVEL];
+  /* Info on the current blocks.  */
   struct idxblk
   {
-    unsigned int vbn;
-    unsigned short len;
-    unsigned short lastlen;
+    unsigned int vbn;		/* VBN of the block.  */
+    /* The last entry is identified so that it could be copied to the
+       parent block.  */
+    unsigned short len;		/* Length up to the last entry.  */
+    unsigned short lastlen;	/* Length of the last entry.  */
   } blk[MAX_LEVEL];
 
   /* The kbn blocks are used to store long symbol names.  */
@@ -1614,7 +1642,7 @@ vms_write_index (bfd *abfd,
 
       idxlen = get_idxlen (idx, is_elfidx);
 
-      if (is_elfidx && idx->namlen >= MAX_KEYLEN)
+      if (is_elfidx && idx->namlen > MAX_KEYLEN)
         {
           /* If the key (ie name) is too long, write it in the kbn block.  */
           unsigned int kl = idx->namlen;
@@ -1693,7 +1721,7 @@ vms_write_index (bfd *abfd,
          block and all the blocks below it.  */
       for (j = 0; j < level; j++)
         if (blk[j].len + blk[j].lastlen + idxlen > INDEXDEF__BLKSIZ)
-          flush = j + 1;
+	  flush = j + 1;
 
       for (j = 0; j < level; j++)
         {
@@ -1714,23 +1742,25 @@ vms_write_index (bfd *abfd,
                     }
                   blk[level].vbn = (*vbn)++;
                   blk[level].len = 0;
-                  blk[level].lastlen = 0;
+                  blk[level].lastlen = blk[j].lastlen;
 
                   level++;
                 }
 
-              /* Update parent block: write the new entry.  */
+              /* Update parent block: write the last entry from the current
+		 block.  */
               if (abfd != NULL)
                 {
                   struct vms_rfa *rfa;
 
+		  /* Pointer to the last entry in parent block.  */
+		  rfa = (struct vms_rfa *)(rblk[j + 1]->keys + blk[j + 1].len);
+
                   /* Copy the whole entry.  */
-                  memcpy (rblk[j + 1]->keys + blk[j + 1].len,
-                          rblk[j]->keys + blk[j].len,
-                          blk[j].lastlen);
+		  BFD_ASSERT (blk[j + 1].lastlen == blk[j].lastlen);
+                  memcpy (rfa, rblk[j]->keys + blk[j].len, blk[j].lastlen);
                   /* Fix the entry (which in always the first field of an
 		     entry.  */
-                  rfa = (struct vms_rfa *)(rblk[j + 1]->keys + blk[j + 1].len);
                   bfd_putl32 (blk[j].vbn, rfa->vbn);
                   bfd_putl16 (RFADEF__C_INDEX, rfa->offset);
                 }
@@ -1740,7 +1770,7 @@ vms_write_index (bfd *abfd,
                   /* And allocate it.  Do it only on the block that won't be
                      flushed (so that the parent of the parent can be
                      updated too).  */
-                  blk[j + 1].len += blk[j].lastlen;
+                  blk[j + 1].len += blk[j + 1].lastlen;
                   blk[j + 1].lastlen = 0;
                 }
 
@@ -1761,6 +1791,7 @@ vms_write_index (bfd *abfd,
           /* Append it to the block.  */
           if (j == 0)
             {
+	      /* Keep the previous last entry.  */
               blk[j].len += blk[j].lastlen;
 
               if (abfd != NULL)
@@ -1805,12 +1836,14 @@ vms_write_index (bfd *abfd,
                       memcpy (en->keyname, idx->name, idx->namlen);
                     }
                 }
-            }
-
-          blk[j].lastlen = idxlen;
+	    }
+	  /* The last added key can now be the last one all blocks in the
+	     path.  */
+	  blk[j].lastlen = idxlen;
         }
     }
 
+  /* Save VBN of the root.  */
   if (topvbn != NULL)
     *topvbn = blk[level - 1].vbn;
 
@@ -1827,6 +1860,7 @@ vms_write_index (bfd *abfd,
 
       en = rblk[j - 1]->keys + blk[j - 1].len;
       par = rblk[j]->keys + blk[j].len;
+      BFD_ASSERT (blk[j].lastlen == blk[j - 1].lastlen);
       memcpy (par, en, blk[j - 1].lastlen);
       rfa = (struct vms_rfa *)par;
       bfd_putl32 (blk[j - 1].vbn, rfa->vbn);
@@ -1848,6 +1882,7 @@ vms_write_index (bfd *abfd,
     {
       if (vms_write_block (abfd, kbn_vbn, kbn_blk) != TRUE)
         return FALSE;
+      free (kbn_blk);
     }
 
   return TRUE;
@@ -2006,6 +2041,7 @@ _bfd_vms_lib_write_archive_contents (bfd *arch)
   unsigned int mod_idx_vbn;
   unsigned int sym_idx_vbn;
   bfd_boolean is_elfidx = tdata->kind == vms_lib_ia64;
+  unsigned int max_keylen = is_elfidx ? MAX_EKEYLEN : MAX_KEYLEN;
 
   /* Count the number of modules (and do a first sanity check).  */
   nbr_modules = 0;
@@ -2037,7 +2073,7 @@ _bfd_vms_lib_write_archive_contents (bfd *arch)
        current != NULL;
        current = current->archive_next, i++)
     {
-      int nl;
+      unsigned int nl;
 
       modules[i].abfd = current;
       modules[i].name = vms_get_module_name (current->filename, FALSE);
@@ -2045,7 +2081,7 @@ _bfd_vms_lib_write_archive_contents (bfd *arch)
 
       /* FIXME: silently truncate long names ?  */
       nl = strlen (modules[i].name);
-      modules[i].namlen = (nl > MAX_KEYLEN ? MAX_KEYLEN : nl);
+      modules[i].namlen = (nl > max_keylen ? max_keylen : nl);
     }
 
   /* Create the module index.  */
@@ -2236,20 +2272,27 @@ _bfd_vms_lib_write_archive_contents (bfd *arch)
     bfd_putl32 (nbr_modules, lhd->modcnt);
     bfd_putl32 (nbr_modules, lhd->modhdrs);
 
+    /* Number of blocks for index.  */
+    bfd_putl32 (nbr_mod_iblk + nbr_sym_iblk, lhd->idxblks);
     bfd_putl32 (vbn - 1, lhd->hipreal);
     bfd_putl32 (vbn - 1, lhd->hiprusd);
 
+    /* VBN of the next free block.  */
+    bfd_putl32 ((off / VMS_BLOCK_SIZE) + 1, lhd->nextvbn);
+    bfd_putl32 ((off / VMS_BLOCK_SIZE) + 1, lhd->nextrfa + 0);
+    bfd_putl16 (0, lhd->nextrfa + 4);
+
     /* First index (modules name).  */
     idd_flags = IDD__FLAGS_ASCII | IDD__FLAGS_VARLENIDX
       | IDD__FLAGS_NOCASECMP | IDD__FLAGS_NOCASENTR;
     bfd_putl16 (idd_flags, idd->flags);
-    bfd_putl16 (MAX_KEYLEN, idd->keylen);
+    bfd_putl16 (max_keylen + 1, idd->keylen);
     bfd_putl16 (mod_idx_vbn, idd->vbn);
     idd++;
 
     /* Second index (symbols name).  */
     bfd_putl16 (idd_flags, idd->flags);
-    bfd_putl16 (MAX_KEYLEN, idd->keylen);
+    bfd_putl16 (max_keylen + 1, idd->keylen);
     bfd_putl16 (sym_idx_vbn, idd->vbn);
     idd++;
 
@@ -2303,5 +2346,5 @@ const bfd_target vms_lib_txt_vec =
 
   NULL,
 
-  (PTR) 0
+  NULL
 };
diff --git a/bfd/xsym.c b/bfd/xsym.c
index 01434e1..e0819a9 100644
--- a/bfd/xsym.c
+++ b/bfd/xsym.c
@@ -1,6 +1,6 @@
 /* xSYM symbol-file support for BFD.
    Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
-   2009, 2010, 2011 Free Software Foundation, Inc.
+   2009, 2010, 2011, 2012  Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -19,8 +19,10 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include "alloca-conf.h"
+/* xSYM is the debugging format used by CodeWarrior on Mac OS classic.  */
+
 #include "sysdep.h"
+#include "alloca-conf.h"
 #include "xsym.h"
 #include "bfd.h"
 #include "libbfd.h"
diff --git a/bfd/xsym.h b/bfd/xsym.h
index 85e173a..87c4546 100644
--- a/bfd/xsym.h
+++ b/bfd/xsym.h
@@ -1,5 +1,5 @@
 /* xSYM symbol-file support for BFD.
-   Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007
+   Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -19,6 +19,7 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include "bfd.h"
 #include <stdio.h>
 
@@ -549,7 +550,7 @@ typedef struct bfd_sym_data_struct bfd_sym_data_struct;
 extern bfd_boolean bfd_sym_mkobject
   (bfd *);
 extern void bfd_sym_print_symbol
-  (bfd *, PTR, asymbol *, bfd_print_symbol_type);
+  (bfd *, void *, asymbol *, bfd_print_symbol_type);
 extern bfd_boolean bfd_sym_valid
   (bfd *);
 extern unsigned char * bfd_sym_read_name_table
diff --git a/config.sub b/config.sub
index 78176a4..59bb593 100755
--- a/config.sub
+++ b/config.sub
@@ -2,9 +2,9 @@
 # Configuration validation subroutine script.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
 #   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-#   2011 Free Software Foundation, Inc.
+#   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2011-10-29'
+timestamp='2012-04-18'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -21,9 +21,7 @@ timestamp='2011-10-29'
 # 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., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -76,8 +74,8 @@ version="\
 GNU config.sub ($timestamp)
 
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free
-Software Foundation, Inc.
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -132,6 +130,10 @@ case $maybe_os in
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
+  android-linux)
+    os=-linux-android
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+    ;;
   *)
     basic_machine=`echo $1 | sed 's/-[^-]*$//'`
     if [ $basic_machine != $1 ]
@@ -223,6 +225,12 @@ case $os in
 	-isc*)
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
+	-lynx*178)
+		os=-lynxos178
+		;;
+	-lynx*5)
+		os=-lynxos5
+		;;
 	-lynx*)
 		os=-lynxos
 		;;
@@ -247,6 +255,7 @@ case $basic_machine in
 	# Some are omitted here because they have special meanings below.
 	1750a | 580 \
 	| a29k \
+	| aarch64 | aarch64_be \
 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
 	| am33_2.0 \
@@ -319,8 +328,7 @@ case $basic_machine in
 	c6x)
 		basic_machine=tic6x-unknown
 		;;
-	m6811 | m68hc11 | m6812 | m68hc12 | picochip)
-		# Motorola 68HC11/12.
+	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
 		basic_machine=$basic_machine-unknown
 		os=-none
 		;;
@@ -333,7 +341,10 @@ case $basic_machine in
 	strongarm | thumb | xscale)
 		basic_machine=arm-unknown
 		;;
-
+	xgate)
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
 	xscaleeb)
 		basic_machine=armeb-unknown
 		;;
@@ -356,6 +367,7 @@ case $basic_machine in
 	# Recognize the basic CPU types with company name.
 	580-* \
 	| a29k-* \
+	| aarch64-* | aarch64_be-* \
 	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
 	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
@@ -719,7 +731,6 @@ case $basic_machine in
 	i370-ibm* | ibm*)
 		basic_machine=i370-ibm
 		;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
 	i*86v32)
 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-sysv32
@@ -816,6 +827,10 @@ case $basic_machine in
 	ms1-*)
 		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
 		;;
+	msys)
+		basic_machine=i386-pc
+		os=-msys
+		;;
 	mvs)
 		basic_machine=i370-ibm
 		os=-mvs
@@ -1343,7 +1358,7 @@ case $os in
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
 	      | -chorusos* | -chorusrdb* | -cegcc* \
-	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
 	      | -mingw32* | -linux-gnu* | -linux-android* \
 	      | -linux-newlib* | -linux-uclibc* \
 	      | -uxpv* | -beos* | -mpeix* | -udk* \
@@ -1555,9 +1570,6 @@ case $basic_machine in
 		;;
 	m68000-sun)
 		os=-sunos3
-		# This also exists in the configure program, but was not the
-		# default.
-		# os=-sunos4
 		;;
 	m68*-cisco)
 		os=-aout
diff --git a/config/ChangeLog b/config/ChangeLog
index ea203bc..42fcfce 100644
--- a/config/ChangeLog
+++ b/config/ChangeLog
@@ -1,3 +1,62 @@
+2012-05-29  Joseph Myers  <joseph at codesourcery.com>
+
+	* mt-sde: Fix typos.
+	* stdint.m4: Fix typos.
+	* tcl.m4: Fix typos.
+
+2012-04-03  Tristan Gingold  <gingold at adacore.com>
+
+	* mmap.m4: Use *vms* instead of vms*.
+
+2012-04-02  Tristan Gingold  <gingold at adacore.com>
+
+	* math.m4 (GCC_CHECK_MATH_FUNC): Remove if-present
+	argument.  Define the variable.
+
+2012-03-26  Tristan Gingold  <gingold at adacore.com>
+
+	* math.m4: New file.
+
+2012-03-12  Rainer Orth  <ro at CeBiTec.Uni-Bielefeld.DE>
+
+	* weakref.m4 (GCC_CHECK_ELF_STYLE_WEAKREF): Remove
+	alpha*-dec-osf*.
+
+2012-01-22  Douglas B Rupp  <rupp at gnat.com>
+
+	* config/mh-interix: Remove as unneeded.
+	* config/picflag.m4 (i[[34567]]86-*-interix3*):
+        Change triplet to i[[34567]]86-*-interix[[3-9]]*.
+
+2012-01-04  Andreas Krebbel  <Andreas.Krebbel at de.ibm.com>
+
+	PR bootstrap/51734
+	* picflag.m4: Remove s390 case statement.
+
+2011-12-20  Andreas Schwab  <schwab at linux-m68k.org>
+
+	* warnings.m4 (ACX_PROG_CC_WARNING_OPTS): Avoid leading dash in
+	expr call.
+
+2011-12-19  Andreas Schwab  <schwab at linux-m68k.org>
+
+	PR bootstrap/51388
+	* warnings.m4 (ACX_PROG_CC_WARNING_OPTS)
+	(ACX_PROG_CC_WARNING_ALMOST_PEDANTIC): Run the test without the
+	no- prefix.
+
+2011-12-18  Eric Botcazou  <ebotcazou at adacore.com>
+
+	* acx.m4 (Test for GNAT): Update comment and add quotes in final test.
+
+2011-11-22  Iain Sandoe  <iains at gcc.gnu.org>
+
+	* weakref.m4: New file.
+
+2011-11-09  Richard Henderson  <rth at redhat.com>
+
+	* asmcfi.m4: New file.
+
 2011-11-02  Rainer Orth  <ro at CeBiTec.Uni-Bielefeld.DE>
 
 	* mh-interix (LIBGCC2_DEBUG_CFLAGS): Remove.
@@ -10,6 +69,15 @@
 
 	* elf.m4 (target_elf): Remove *-netware*.
 
+2011-07-06  Uros Bizjak  <ubizjak at gmail.com>
+
+	* mt-alphaieee (GOCFLAGS_FOR_TARGET): Add -mieee.
+
+2011-06-15  Mike Stump  <mikestump at comcast.net>
+
+	PR target/49461
+	* mh-darwin: Turn off -pie on darwin11 and later.
+
 2011-04-20  Eric Botcazou  <ebotcazou at adacore.com>
 
 	* bootstrap-lto.mk: Remove obsolete requirement.
diff --git a/config/acx.m4 b/config/acx.m4
index b559c03..9ff31eb 100644
--- a/config/acx.m4
+++ b/config/acx.m4
@@ -356,9 +356,9 @@ m4_define([AC_CHECK_HEADER],m4_defn([_AC_CHECK_HEADER_OLD]))
 ac_c_preproc_warn_flag=yes])# AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -387,7 +387,7 @@ if test x"$errors" = x && test -f conftest.$ac_objext; then
 fi
 rm -f conftest.*])
 
-if test x$GNATBIND != xno && test x$GNATMAKE != xno && test x$acx_cv_cc_gcc_supports_ada != xno; then
+if test "x$GNATBIND" != xno && test "x$GNATMAKE" != xno && test x$acx_cv_cc_gcc_supports_ada != xno; then
   have_gnat=yes
 else
   have_gnat=no
diff --git a/config/asmcfi.m4 b/config/asmcfi.m4
new file mode 100644
index 0000000..a725aa1
--- /dev/null
+++ b/config/asmcfi.m4
@@ -0,0 +1,15 @@
+;; Cribbed from libffi
+
+AC_DEFUN([GCC_AS_CFI_PSEUDO_OP],
+[AC_CACHE_CHECK([assembler .cfi pseudo-op support],
+    gcc_cv_as_cfi_pseudo_op, [
+    gcc_cv_as_cfi_pseudo_op=unknown
+    AC_TRY_COMPILE([asm (".cfi_startproc\n\t.cfi_endproc");],,
+		   [gcc_cv_as_cfi_pseudo_op=yes],
+		   [gcc_cv_as_cfi_pseudo_op=no])
+ ])
+ if test "x$gcc_cv_as_cfi_pseudo_op" = xyes; then
+    AC_DEFINE(HAVE_AS_CFI_PSEUDO_OP, 1,
+	      [Define if your assembler supports .cfi_* directives.])
+ fi
+])
diff --git a/config/math.m4 b/config/math.m4
new file mode 100644
index 0000000..23835f2
--- /dev/null
+++ b/config/math.m4
@@ -0,0 +1,50 @@
+dnl GCC_CHECK_LIBM
+dnl
+dnl Check whether -lm is available.  This is a pre-requisite for
+dnl GCC_CHECK_MATH_FUNC so that it will link with -lm.
+AC_DEFUN([GCC_CHECK_LIBM],
+[AC_CHECK_LIB([m],[sin])])
+
+dnl GCC_CHECK_MATH_HEADERS
+dnl
+dnl Check for math.h and complex.h.  This is a pre-requisite for
+dnl GCC_CHECK_MATH_FUNC so that it includes the right headers.
+dnl (Some systems, such as AIX or OpenVMS may define macro for math
+dnl  functions).
+AC_DEFUN([GCC_CHECK_MATH_HEADERS],
+[AC_CHECK_HEADERS_ONCE(math.h complex.h)])
+
+dnl GCC_CHECK_MATH_FUNC([name])
+dnl
+dnl Check whether math function NAME is available on the system (by compiling
+dnl and linking a C program) and run define HAVE_name on success.
+dnl
+dnl Note that OpenVMS system insists on including complex.h before math.h
+AC_DEFUN([GCC_CHECK_MATH_FUNC],
+[
+  AC_REQUIRE([GCC_CHECK_LIBM])
+  AC_REQUIRE([GCC_CHECK_MATH_HEADERS])
+  AC_CACHE_CHECK([for $1], [gcc_cv_math_func_$1],
+		 [AC_LINK_IFELSE([
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())$1;
+
+int
+main ()
+{
+  return 0;
+}
+],
+[gcc_cv_math_func_$1=yes],
+[gcc_cv_math_func_$1=no])])
+  if test $gcc_cv_math_func_$1 = yes; then
+    AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$1),[1],
+                       [Define to 1 if you have the `$1' function.])
+  fi
+])
diff --git a/config/mh-darwin b/config/mh-darwin
index 66f68b6..19bf265 100644
--- a/config/mh-darwin
+++ b/config/mh-darwin
@@ -1,5 +1,7 @@
 # The -mdynamic-no-pic ensures that the compiler executable is built without
 # position-independent-code -- the usual default on Darwin. This fix speeds
 # compiles by 3-5%.
-
 BOOT_CFLAGS += -mdynamic-no-pic
+
+# Ensure we don't try and use -pie, as it is incompatible with pch.
+BOOT_LDFLAGS += `case ${host} in *-*-darwin[1][1-9]*) echo -Wl,-no_pie ;; esac;`
diff --git a/config/mh-interix b/config/mh-interix
deleted file mode 100644
index 3be195b..0000000
--- a/config/mh-interix
+++ /dev/null
@@ -1,2 +0,0 @@
-# The shell may not be in /bin. 
-SHELL = sh
diff --git a/config/mh-ppc-aix b/config/mh-ppc-aix
index 4a97d81..a866f7f 100644
--- a/config/mh-ppc-aix
+++ b/config/mh-ppc-aix
@@ -5,4 +5,4 @@
 # don't do it any more.
 BOOT_ADAFLAGS = -gnatapg
 BOOT_LDFLAGS = -Wl,-bbigtoc
-LDFLAGS = `case $(CC) in *gcc*) echo -Wl,-bbigtoc ;; esac;`
+LDFLAGS = `case '$(CC)' in *gcc*) echo -Wl,-bbigtoc ;; esac;`
diff --git a/config/mmap.m4 b/config/mmap.m4
new file mode 100644
index 0000000..fba0d9d
--- /dev/null
+++ b/config/mmap.m4
@@ -0,0 +1,97 @@
+dnl ----------------------------------------------------------------------
+dnl This whole bit snagged from gcc
+
+dnl
+dnl mmap(2) blacklisting.  Some platforms provide the mmap library routine
+dnl but don't support all of the features we need from it.
+dnl
+AC_DEFUN([GCC_AC_FUNC_MMAP_BLACKLIST],
+[
+AC_CHECK_HEADER([sys/mman.h],
+		[gcc_header_sys_mman_h=yes], [gcc_header_sys_mman_h=no])
+AC_CHECK_FUNC([mmap], [gcc_func_mmap=yes], [gcc_func_mmap=no])
+if test "$gcc_header_sys_mman_h" != yes \
+ || test "$gcc_func_mmap" != yes; then
+   gcc_cv_func_mmap_file=no
+   gcc_cv_func_mmap_dev_zero=no
+   gcc_cv_func_mmap_anon=no
+else
+   AC_CACHE_CHECK([whether read-only mmap of a plain file works], 
+  gcc_cv_func_mmap_file,
+  [# Add a system to this blacklist if 
+   # mmap(0, stat_size, PROT_READ, MAP_PRIVATE, fd, 0) doesn't return a
+   # memory area containing the same data that you'd get if you applied
+   # read() to the same fd.  The only system known to have a problem here
+   # is VMS, where text files have record structure.
+   case "$host_os" in
+     *vms* | ultrix*)
+        gcc_cv_func_mmap_file=no ;;
+     *)
+        gcc_cv_func_mmap_file=yes;;
+   esac])
+   AC_CACHE_CHECK([whether mmap from /dev/zero works],
+  gcc_cv_func_mmap_dev_zero,
+  [# Add a system to this blacklist if it has mmap() but /dev/zero
+   # does not exist, or if mmapping /dev/zero does not give anonymous
+   # zeroed pages with both the following properties:
+   # 1. If you map N consecutive pages in with one call, and then
+   #    unmap any subset of those pages, the pages that were not
+   #    explicitly unmapped remain accessible.
+   # 2. If you map two adjacent blocks of memory and then unmap them
+   #    both at once, they must both go away.
+   # Systems known to be in this category are Windows (all variants),
+   # VMS, and Darwin.
+   case "$host_os" in
+     *vms* | cygwin* | pe | mingw* | darwin* | ultrix* | hpux10* | hpux11.00)
+        gcc_cv_func_mmap_dev_zero=no ;;
+     *)
+        gcc_cv_func_mmap_dev_zero=yes;;
+   esac])
+
+   # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for.
+   AC_CACHE_CHECK([for MAP_ANON(YMOUS)], gcc_cv_decl_map_anon,
+    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+[#include <sys/types.h>
+#include <sys/mman.h>
+#include <unistd.h>
+
+#ifndef MAP_ANONYMOUS
+#define MAP_ANONYMOUS MAP_ANON
+#endif
+],
+[int n = MAP_ANONYMOUS;])],
+    gcc_cv_decl_map_anon=yes,
+    gcc_cv_decl_map_anon=no)])
+
+   if test $gcc_cv_decl_map_anon = no; then
+     gcc_cv_func_mmap_anon=no
+   else
+     AC_CACHE_CHECK([whether mmap with MAP_ANON(YMOUS) works],
+     gcc_cv_func_mmap_anon,
+  [# Add a system to this blacklist if it has mmap() and MAP_ANON or
+   # MAP_ANONYMOUS, but using mmap(..., MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
+   # doesn't give anonymous zeroed pages with the same properties listed
+   # above for use of /dev/zero.
+   # Systems known to be in this category are Windows, VMS, and SCO Unix.
+   case "$host_os" in
+     *vms* | cygwin* | pe | mingw* | sco* | udk* )
+        gcc_cv_func_mmap_anon=no ;;
+     *)
+        gcc_cv_func_mmap_anon=yes;;
+   esac])
+   fi
+fi
+
+if test $gcc_cv_func_mmap_file = yes; then
+  AC_DEFINE(HAVE_MMAP_FILE, 1,
+	    [Define if read-only mmap of a plain file works.])
+fi
+if test $gcc_cv_func_mmap_dev_zero = yes; then
+  AC_DEFINE(HAVE_MMAP_DEV_ZERO, 1,
+	    [Define if mmap of /dev/zero works.])
+fi
+if test $gcc_cv_func_mmap_anon = yes; then
+  AC_DEFINE(HAVE_MMAP_ANON, 1,
+	    [Define if mmap with MAP_ANON(YMOUS) works.])
+fi
+])
diff --git a/config/mt-alphaieee b/config/mt-alphaieee
index 9c20531..80c17cd 100644
--- a/config/mt-alphaieee
+++ b/config/mt-alphaieee
@@ -1,2 +1,3 @@
 CFLAGS_FOR_TARGET += -mieee
 CXXFLAGS_FOR_TARGET += -mieee
+GOCFLAGS_FOR_TARGET += -mieee
diff --git a/config/mt-sde b/config/mt-sde
index cb20420..d6992e4 100644
--- a/config/mt-sde
+++ b/config/mt-sde
@@ -5,6 +5,6 @@
 # as they have the D-to-I redirect for PC-relative loads.  -mno-gpopt
 # has two purposes: it allows libraries to be used in situations where
 # $gp != our _gp, and it allows them to be built with -G8 while
-# retaining link compability with -G0 and -G4.
+# retaining link compatibility with -G0 and -G4.
 CFLAGS_FOR_TARGET += -Os -minterlink-mips16 -mcode-xonly -mno-gpopt
 CXXFLAGS_FOR_TARGET += -Os -minterlink-mips16 -mcode-xonly -mno-gpopt
diff --git a/config/picflag.m4 b/config/picflag.m4
index f6f1b44..bd81812 100644
--- a/config/picflag.m4
+++ b/config/picflag.m4
@@ -19,7 +19,7 @@ case "${$2}" in
 	;;
     i[[34567]]86-*-cygwin* | i[[34567]]86-*-mingw* | x86_64-*-mingw*)
 	;;
-    i[[34567]]86-*-interix3*)
+    i[[34567]]86-*-interix[[3-9]]*)
 	# Interix 3.x gcc -fpic/-fPIC options generate broken code.
 	# Instead, we relocate shared libraries at runtime.
 	;;
@@ -51,9 +51,6 @@ case "${$2}" in
     m68k-*-*)
 	$1=-fpic
 	;;
-    s390*-*-*)
-	$1=-fpic
-	;;
     # FIXME: Override -fPIC default in libgcc only? 
     sh-*-linux* | sh[[2346lbe]]*-*-linux*)
 	$1=-fpic
diff --git a/config/stdint.m4 b/config/stdint.m4
index fbdd586..61898a7 100644
--- a/config/stdint.m4
+++ b/config/stdint.m4
@@ -18,7 +18,7 @@ dnl the "ISO C9X: 7.18 Integer types <stdint.h>" section requires the
 dnl existence of an include file <stdint.h> that defines a set of
 dnl typedefs, especially uint8_t,int32_t,uintptr_t.
 dnl Many older installations will not provide this file, but some will
-dnl have the very same definitions in <inttypes.h>. In other enviroments
+dnl have the very same definitions in <inttypes.h>. In other environments
 dnl we can use the inet-types in <sys/types.h> which would define the
 dnl typedefs int8_t and u_int8_t respectivly.
 dnl
diff --git a/config/tcl.m4 b/config/tcl.m4
index 900a2ce..59a0c7e 100644
--- a/config/tcl.m4
+++ b/config/tcl.m4
@@ -290,7 +290,7 @@ AC_DEFUN([SC_LOAD_TCLCONFIG], [
     elif test "`uname -s`" = "Darwin"; then
 	# If Tcl was built as a framework, attempt to use the libraries
 	# from the framework at the given location so that linking works
-	# against Tcl.framework installed in an arbitary location.
+	# against Tcl.framework installed in an arbitrary location.
 	case ${TCL_DEFS} in
 	    *TCL_FRAMEWORK*)
 		if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then
@@ -373,7 +373,7 @@ AC_DEFUN([SC_LOAD_TKCONFIG], [
     elif test "`uname -s`" = "Darwin"; then
 	# If Tk was built as a framework, attempt to use the libraries
 	# from the framework at the given location so that linking works
-	# against Tk.framework installed in an arbitary location.
+	# against Tk.framework installed in an arbitrary location.
 	case ${TK_DEFS} in
 	    *TK_FRAMEWORK*)
 		if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then
@@ -815,7 +815,7 @@ AC_DEFUN([SC_ENABLE_LANGINFO], [
 #
 #	Defines the following variable:
 #
-#	MAN_FLAGS -	The apropriate flags for installManPage
+#	MAN_FLAGS -	The appropriate flags for installManPage
 #			according to the user's selection.
 #
 #--------------------------------------------------------------------
diff --git a/config/warnings.m4 b/config/warnings.m4
index 3801c85..b64b594 100644
--- a/config/warnings.m4
+++ b/config/warnings.m4
@@ -1,6 +1,6 @@
 # Autoconf include file defining macros related to compile-time warnings.
 
-# Copyright 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
+# Copyright 2004, 2005, 2007, 2009, 2011 Free Software Foundation, Inc.
 
 #This file is part of GCC.
 
@@ -28,7 +28,13 @@ AC_SUBST(acx_Var)dnl
 m4_expand_once([acx_Var=
 ],m4_quote(acx_Var=))dnl
 save_CFLAGS="$CFLAGS"
-for option in $1; do
+for real_option in $1; do
+  # Do the check with the no- prefix removed since gcc silently
+  # accepts any -Wno-* option on purpose
+  case $real_option in
+    -Wno-*) option=-W`expr x$real_option : 'x-Wno-\(.*\)'` ;;
+    *) option=$real_option ;;
+  esac
   AS_VAR_PUSHDEF([acx_Woption], [acx_cv_prog_cc_warning_$option])
   AC_CACHE_CHECK([whether $CC supports $option], acx_Woption,
     [CFLAGS="$option"
@@ -37,14 +43,14 @@ for option in $1; do
       [AS_VAR_SET(acx_Woption, no)])
   ])
   AS_IF([test AS_VAR_GET(acx_Woption) = yes],
-        [acx_Var="$acx_Var${acx_Var:+ }$option"])
+        [acx_Var="$acx_Var${acx_Var:+ }$real_option"])
   AS_VAR_POPDEF([acx_Woption])dnl
 done
 CFLAGS="$save_CFLAGS"
 m4_popdef([acx_Var])dnl
 ])# ACX_PROG_CC_WARNING_OPTS
 
-# ACX_PROG_CC_WARNING_ALMOST_PEDANTIC(WARNINGS, [VARIABLE = WARN_PEDANTIC)
+# ACX_PROG_CC_WARNING_ALMOST_PEDANTIC(WARNINGS, [VARIABLE = WARN_PEDANTIC])
 #   Append to VARIABLE "-pedantic" + the argument, if the compiler is GCC
 #   and accepts all of those options simultaneously, otherwise to nothing.
 AC_DEFUN([ACX_PROG_CC_WARNING_ALMOST_PEDANTIC],
@@ -53,11 +59,14 @@ m4_pushdef([acx_Var], [m4_default([$2], [WARN_PEDANTIC])])dnl
 AC_SUBST(acx_Var)dnl
 m4_expand_once([acx_Var=
 ],m4_quote(acx_Var=))dnl
-AS_VAR_PUSHDEF([acx_Pedantic], [acx_cv_prog_cc_pedantic_$1])dnl
+# Do the check with the no- prefix removed from the warning options
+# since gcc silently accepts any -Wno-* option on purpose
+m4_pushdef([acx_Woptions], [m4_bpatsubst([$1], [-Wno-], [-W])])dnl
+AS_VAR_PUSHDEF([acx_Pedantic], [acx_cv_prog_cc_pedantic_]acx_Woptions)dnl
 AS_IF([test "$GCC" = yes],
-[AC_CACHE_CHECK([whether $CC supports -pedantic $1], acx_Pedantic,
+[AC_CACHE_CHECK([whether $CC supports -pedantic ]acx_Woptions, acx_Pedantic,
 [save_CFLAGS="$CFLAGS"
-CFLAGS="-pedantic $1"
+CFLAGS="-pedantic acx_Woptions"
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
    [AS_VAR_SET(acx_Pedantic, yes)],
    [AS_VAR_SET(acx_Pedantic, no)])
@@ -66,6 +75,7 @@ AS_IF([test AS_VAR_GET(acx_Pedantic) = yes],
       [acx_Var="$acx_Var${acx_Var:+ }-pedantic $1"])
 ])
 AS_VAR_POPDEF([acx_Pedantic])dnl
+m4_popdef([acx_Woptions])dnl
 m4_popdef([acx_Var])dnl
 ])# ACX_PROG_CC_WARNING_ALMOST_PEDANTIC
 
diff --git a/config/weakref.m4 b/config/weakref.m4
new file mode 100644
index 0000000..ecb8567
--- /dev/null
+++ b/config/weakref.m4
@@ -0,0 +1,47 @@
+
+dnl Check if the target supports weak.
+AC_DEFUN([GCC_CHECK_ATTRIBUTE_WEAK], [
+  AC_CACHE_CHECK([whether the target supports weak],
+		 ac_cv_have_attribute_weak, [
+  weakref_m4_saved_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -Werror"
+  AC_TRY_COMPILE([void __attribute__((weak)) foo(void) { }],
+		 [], ac_cv_have_attribute_weak=yes,
+		 ac_cv_have_attribute_weak=no)
+  CFLAGS="$weakref_m4_saved_CFLAGS"])
+  if test x"$ac_cv_have_attribute_weak" = xyes; then
+    AC_DEFINE(HAVE_ATTRIBUTE_WEAK, 1,
+      [Define to 1 if the target supports __attribute__((weak)).])
+  fi])
+
+dnl Check whether weak refs work like the ELF ones.
+dnl This means that the weak reference works without having to satify 
+dnl linkage for the item.
+dnl There are targets (at least Darwin) where we have fully functional
+dnl weakrefs at runtime, but must supply the referenced item at link time.
+AC_DEFUN([GCC_CHECK_ELF_STYLE_WEAKREF], [
+  AC_CACHE_CHECK([whether weak refs work like ELF],
+                  ac_cv_have_elf_style_weakref, [
+  weakref_m4_saved_CFLAGS="$CFLAGS"
+  case "${host}" in
+    *-apple-darwin*) CFLAGS="$CFLAGS -Wl,-undefined,dynamic_lookup" ;;
+    *) ;;
+  esac  
+  AC_RUN_IFELSE([AC_LANG_SOURCE([[
+extern void fNotToBeFound(void) __attribute__((weak));
+int main () 
+{
+  if (fNotToBeFound)
+    return 1;
+  else
+    return 0;
+}
+]])], ac_cv_have_elf_style_weakref=yes, ac_cv_have_elf_style_weakref=no, [
+case "${host}" in
+  *-apple-darwin[[89]]*) ac_cv_have_elf_style_weakref=no ;;
+  *) ac_cv_have_elf_style_weakref=yes;;
+esac])CFLAGS="$weakref_m4_saved_CFLAGS"])
+if test x"$ac_cv_have_elf_style_weakref" = xyes; then
+  AC_DEFINE(HAVE_ELF_STYLE_WEAKREF, 1, [Define to 1 if target has a weakref that works like the ELF one.])
+fi])
+
diff --git a/configure b/configure
index 9a0086c..6079e6c 100755
--- a/configure
+++ b/configure
@@ -2869,7 +2869,7 @@ case "${ENABLE_GOLD}" in
       *-*-elf* | *-*-sysv4* | *-*-unixware* | *-*-eabi* | hppa*64*-*-hpux* \
       | *-*-linux* | frv-*-uclinux* | *-*-irix5* | *-*-irix6* \
       | *-*-netbsd* | *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* \
-      | *-*-solaris2* | *-*-nto*)
+      | *-*-solaris2* | *-*-nto* | *-*-nacl*)
         case "${target}" in
           *-*-linux*aout* | *-*-linux*oldld*)
             ;;
@@ -3054,7 +3054,7 @@ if test x$enable_libgomp = x ; then
 	;;
     *-*-netbsd* | *-*-freebsd* | *-*-openbsd* | *-*-dragonfly*)
 	;;
-    *-*-solaris2* | *-*-irix6* | *-*-osf* | *-*-hpux11*)
+    *-*-solaris2* | *-*-hpux11*)
 	;;
     *-*-darwin* | *-*-aix*)
 	;;
@@ -3093,7 +3093,9 @@ case "${target}" in
     noconfigdirs="$noconfigdirs target-libssp"
     ;;
   rl78-*-*)
-    # Dereferencing -1 is a compile-time error
+    # libssp uses a misaligned load to trigger a fault, but the RL78
+    # doesn't fault for those - instead, it gives a build-time error
+    # for explicit misaligned loads.
     noconfigdirs="$noconfigdirs target-libssp"
     ;;
 esac
@@ -3143,7 +3145,7 @@ case "${target}" in
     ;;
   m68k-*-*)
     ;;
-  mips-sgi-irix6.* | mips*-*-rtems*)
+  mips*-*-rtems*)
     ;;
   mips*-*-linux*)
     ;;
@@ -3259,13 +3261,6 @@ case "${target}" in
   rs6000-*-aix*)
     noconfigdirs="$noconfigdirs ${libgcj}"
     ;;
-  mips*-*-irix6*)
-    # Linking libjava exceeds command-line length limits on at least
-    # IRIX 6.2, but not on IRIX 6.5.
-    # Also, boehm-gc won't build on IRIX 6.5, according to Jeffrey Oldham
-    # <oldham at codesourcery.com>
-    noconfigdirs="$noconfigdirs ${libgcj}"
-    ;;
   *-*-lynxos*)
     noconfigdirs="$noconfigdirs ${libgcj}"
     ;;
@@ -3503,8 +3498,7 @@ case "${target}" in
     noconfigdirs="$noconfigdirs libgui itcl ld"
     ;;
   ia64*-*-*vms*)
-    # No gdb or ld support yet.
-    noconfigdirs="$noconfigdirs readline libgui itcl gdb ld"
+    noconfigdirs="$noconfigdirs libgui itcl"
     ;;
   i[3456789]86-w64-mingw*)
     ;;
@@ -4977,7 +4971,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_cc_gcc_supports_ada" >&5
 $as_echo "$acx_cv_cc_gcc_supports_ada" >&6; }
 
-if test x$GNATBIND != xno && test x$GNATMAKE != xno && test x$acx_cv_cc_gcc_supports_ada != xno; then
+if test "x$GNATBIND" != xno && test "x$GNATMAKE" != xno && test x$acx_cv_cc_gcc_supports_ada != xno; then
   have_gnat=yes
 else
   have_gnat=no
@@ -5195,9 +5189,16 @@ if test "x$with_mpfr_lib" != x; then
   gmplibs="-L$with_mpfr_lib $gmplibs"
 fi
 if test "x$with_mpfr$with_mpfr_include$with_mpfr_lib" = x && test -d ${srcdir}/mpfr; then
-  gmplibs='-L$$r/$(HOST_SUBDIR)/mpfr/'"$lt_cv_objdir $gmplibs"
-  gmpinc='-I$$r/$(HOST_SUBDIR)/mpfr -I$$s/mpfr '"$gmpinc"
-  extra_mpc_mpfr_configure_flags='--with-mpfr-include=$$s/mpfr --with-mpfr-lib=$$r/$(HOST_SUBDIR)/mpfr/'"$lt_cv_objdir"
+  # MPFR v3.1.0 moved the sources into a src sub-directory.
+  if test -d ${srcdir}/mpfr/src; then
+    gmplibs='-L$$r/$(HOST_SUBDIR)/mpfr/src/'"$lt_cv_objdir $gmplibs"
+    gmpinc='-I$$r/$(HOST_SUBDIR)/mpfr/src -I$$s/mpfr/src '"$gmpinc"
+    extra_mpc_mpfr_configure_flags='--with-mpfr-include=$$s/mpfr/src --with-mpfr-lib=$$r/$(HOST_SUBDIR)/mpfr/src/'"$lt_cv_objdir"
+  else
+    gmplibs='-L$$r/$(HOST_SUBDIR)/mpfr/'"$lt_cv_objdir $gmplibs"
+    gmpinc='-I$$r/$(HOST_SUBDIR)/mpfr -I$$s/mpfr '"$gmpinc"
+    extra_mpc_mpfr_configure_flags='--with-mpfr-include=$$s/mpfr --with-mpfr-lib=$$r/$(HOST_SUBDIR)/mpfr/'"$lt_cv_objdir"
+  fi
   # Do not test the mpfr version.  Assume that it is sufficient, since
   # it is in the source tree, and the library has not been built yet
   # but it would be included on the link line in the version check below
@@ -6666,11 +6667,11 @@ if test "x$CFLAGS_FOR_TARGET" = x; then
   CFLAGS_FOR_TARGET=$CFLAGS
   case " $CFLAGS " in
     *" -O2 "*) ;;
-    *) CFLAGS_FOR_TARGET="-O2 $CFLAGS" ;;
+    *) CFLAGS_FOR_TARGET="-O2 $CFLAGS_FOR_TARGET" ;;
   esac
   case " $CFLAGS " in
     *" -g "* | *" -g3 "*) ;;
-    *) CFLAGS_FOR_TARGET="-g $CFLAGS" ;;
+    *) CFLAGS_FOR_TARGET="-g $CFLAGS_FOR_TARGET" ;;
   esac
 fi
 
@@ -6679,11 +6680,11 @@ if test "x$CXXFLAGS_FOR_TARGET" = x; then
   CXXFLAGS_FOR_TARGET=$CXXFLAGS
   case " $CXXFLAGS " in
     *" -O2 "*) ;;
-    *) CXXFLAGS_FOR_TARGET="-O2 $CXXFLAGS" ;;
+    *) CXXFLAGS_FOR_TARGET="-O2 $CXXFLAGS_FOR_TARGET" ;;
   esac
   case " $CXXFLAGS " in
     *" -g "* | *" -g3 "*) ;;
-    *) CXXFLAGS_FOR_TARGET="-g $CXXFLAGS" ;;
+    *) CXXFLAGS_FOR_TARGET="-g $CXXFLAGS_FOR_TARGET" ;;
   esac
 fi
 
@@ -6873,18 +6874,6 @@ case "${enable_target_optspace}:${target}" in
     ;;
 esac
 
-# Default to using --with-stabs for certain targets.
-if test x${with_stabs} = x ; then
-  case "${target}" in
-  mips*-*-irix[56]*)
-    ;;
-  mips*-*-* | alpha*-*-osf*)
-    with_stabs=yes;
-    extra_host_args="${extra_host_args} --with-stabs"
-    ;;
-  esac
-fi
-
 # Some systems (e.g., one of the i386-aix systems the gas testers are
 # using) don't handle "\$" correctly, so don't use it here.
 tooldir='${exec_prefix}'/${target_noncanonical}
diff --git a/configure.ac b/configure.ac
index 9ef2e35..d68b5f3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-#   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+#   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
 #   Free Software Foundation, Inc.
 #
 # This file is free software; you can redistribute it and/or modify it
@@ -112,11 +112,11 @@ extra_host_args=
 ### or a host dependent tool.  Then put it into the appropriate list
 ### (library or tools, host or target), doing a dependency sort.
 
-# Subdirs will be configured in the order listed in build_configdirs, 
+# Subdirs will be configured in the order listed in build_configdirs,
 # configdirs, or target_configdirs; see the serialization section below.
 
-# Dependency sorting is only needed when *configuration* must be done in 
-# a particular order.  In all cases a dependency should be specified in 
+# Dependency sorting is only needed when *configuration* must be done in
+# a particular order.  In all cases a dependency should be specified in
 # the Makefile, whether or not it's implicitly specified here.
 
 # Double entries in build_configdirs, configdirs, or target_configdirs may
@@ -209,7 +209,7 @@ if test x"${host}" = x"${target}" ; then
   is_cross_compiler=no
 else
   is_cross_compiler=yes
-fi	
+fi
 
 # Find the build and target subdir names.
 GCC_TOPLEV_SUBDIRS
@@ -245,7 +245,7 @@ if test x$with_system_zlib = xyes ; then
   noconfigdirs="$noconfigdirs zlib"
 fi
 
-# some tools are so dependent upon X11 that if we're not building with X, 
+# some tools are so dependent upon X11 that if we're not building with X,
 # it's not even worth trying to configure, much less build, that tool.
 
 case ${with_x} in
@@ -253,7 +253,7 @@ case ${with_x} in
   no)
     skipdirs="${skipdirs} tk itcl libgui"
     # We won't be able to build gdbtk without X.
-    enable_gdbtk=no 
+    enable_gdbtk=no
     ;;
   *)  echo "*** bad value \"${with_x}\" for -with-x flag; ignored" 1>&2 ;;
 esac
@@ -313,7 +313,7 @@ case "${ENABLE_GOLD}" in
       *-*-elf* | *-*-sysv4* | *-*-unixware* | *-*-eabi* | hppa*64*-*-hpux* \
       | *-*-linux* | frv-*-uclinux* | *-*-irix5* | *-*-irix6* \
       | *-*-netbsd* | *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* \
-      | *-*-solaris2* | *-*-nto*)
+      | *-*-solaris2* | *-*-nto* | *-*-nacl*)
         case "${target}" in
           *-*-linux*aout* | *-*-linux*oldld*)
             ;;
@@ -379,7 +379,7 @@ esac
 # Only spaces may be used in this macro; not newlines or tabs.
 unsupported_languages=
 
-# Remove more programs from consideration, based on the host or 
+# Remove more programs from consideration, based on the host or
 # target this usually means that a port of the program doesn't
 # exist yet.
 
@@ -483,7 +483,7 @@ if test x$enable_libgomp = x ; then
 	;;
     *-*-netbsd* | *-*-freebsd* | *-*-openbsd* | *-*-dragonfly*)
 	;;
-    *-*-solaris2* | *-*-irix6* | *-*-osf* | *-*-hpux11*)
+    *-*-solaris2* | *-*-hpux11*)
 	;;
     *-*-darwin* | *-*-aix*)
 	;;
@@ -519,7 +519,9 @@ case "${target}" in
     noconfigdirs="$noconfigdirs target-libssp"
     ;;
   rl78-*-*)
-    # Dereferencing -1 is a compile-time error
+    # libssp uses a misaligned load to trigger a fault, but the RL78
+    # doesn't fault for those - instead, it gives a build-time error
+    # for explicit misaligned loads.
     noconfigdirs="$noconfigdirs target-libssp"
     ;;
 esac
@@ -569,7 +571,7 @@ case "${target}" in
     ;;
   m68k-*-*)
     ;;
-  mips-sgi-irix6.* | mips*-*-rtems*)
+  mips*-*-rtems*)
     ;;
   mips*-*-linux*)
     ;;
@@ -685,16 +687,9 @@ case "${target}" in
   rs6000-*-aix*)
     noconfigdirs="$noconfigdirs ${libgcj}"
     ;;
-  mips*-*-irix6*)
-    # Linking libjava exceeds command-line length limits on at least
-    # IRIX 6.2, but not on IRIX 6.5.
-    # Also, boehm-gc won't build on IRIX 6.5, according to Jeffrey Oldham
-    # <oldham at codesourcery.com>
-    noconfigdirs="$noconfigdirs ${libgcj}"
-    ;;
   *-*-lynxos*)
     noconfigdirs="$noconfigdirs ${libgcj}"
-    ;; 
+    ;;
 esac
 
 # Default libgloss CPU subdirectory.
@@ -779,7 +774,7 @@ case "${target}" in
     ;;
   *-*-lynxos*)
     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
-    ;; 
+    ;;
   *-*-mingw*)
     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
     ;;
@@ -929,8 +924,7 @@ case "${target}" in
     noconfigdirs="$noconfigdirs libgui itcl ld"
     ;;
   ia64*-*-*vms*)
-    # No gdb or ld support yet.
-    noconfigdirs="$noconfigdirs readline libgui itcl gdb ld"
+    noconfigdirs="$noconfigdirs libgui itcl"
     ;;
   i[[3456789]]86-w64-mingw*)
     ;;
@@ -1084,7 +1078,7 @@ case "${host}" in
   hppa*-hp-hpux*)
     host_makefile_frag="config/mh-pa"
     ;;
-  hppa*-*)	
+  hppa*-*)
     host_makefile_frag="config/mh-pa"
     ;;
   *-*-darwin*)
@@ -1283,9 +1277,16 @@ if test "x$with_mpfr_lib" != x; then
   gmplibs="-L$with_mpfr_lib $gmplibs"
 fi
 if test "x$with_mpfr$with_mpfr_include$with_mpfr_lib" = x && test -d ${srcdir}/mpfr; then
-  gmplibs='-L$$r/$(HOST_SUBDIR)/mpfr/'"$lt_cv_objdir $gmplibs"
-  gmpinc='-I$$r/$(HOST_SUBDIR)/mpfr -I$$s/mpfr '"$gmpinc"
-  extra_mpc_mpfr_configure_flags='--with-mpfr-include=$$s/mpfr --with-mpfr-lib=$$r/$(HOST_SUBDIR)/mpfr/'"$lt_cv_objdir"
+  # MPFR v3.1.0 moved the sources into a src sub-directory.
+  if test -d ${srcdir}/mpfr/src; then
+    gmplibs='-L$$r/$(HOST_SUBDIR)/mpfr/src/'"$lt_cv_objdir $gmplibs"
+    gmpinc='-I$$r/$(HOST_SUBDIR)/mpfr/src -I$$s/mpfr/src '"$gmpinc"
+    extra_mpc_mpfr_configure_flags='--with-mpfr-include=$$s/mpfr/src --with-mpfr-lib=$$r/$(HOST_SUBDIR)/mpfr/src/'"$lt_cv_objdir"
+  else
+    gmplibs='-L$$r/$(HOST_SUBDIR)/mpfr/'"$lt_cv_objdir $gmplibs"
+    gmpinc='-I$$r/$(HOST_SUBDIR)/mpfr -I$$s/mpfr '"$gmpinc"
+    extra_mpc_mpfr_configure_flags='--with-mpfr-include=$$s/mpfr --with-mpfr-lib=$$r/$(HOST_SUBDIR)/mpfr/'"$lt_cv_objdir"
+  fi
   # Do not test the mpfr version.  Assume that it is sufficient, since
   # it is in the source tree, and the library has not been built yet
   # but it would be included on the link line in the version check below
@@ -1780,7 +1781,7 @@ if test -d ${srcdir}/gcc; then
       # an apparent bug in bash 1.12 on linux.
       ${srcdir}/gcc/[[*]]/config-lang.in) ;;
       *)
-        # From the config-lang.in, get $language, $target_libs, 
+        # From the config-lang.in, get $language, $target_libs,
         # $lang_dirs, $boot_language, and $build_by_default
         language=
         target_libs=
@@ -2025,7 +2026,7 @@ done
 build_configdirs_all="$build_configdirs"
 build_configdirs=
 for i in ${build_configdirs_all} ; do
-  j=`echo $i | sed -e s/build-//g` 
+  j=`echo $i | sed -e s/build-//g`
   if test -f ${srcdir}/$j/configure ; then
     build_configdirs="${build_configdirs} $i"
   fi
@@ -2042,7 +2043,7 @@ done
 target_configdirs_all="$target_configdirs"
 target_configdirs=
 for i in ${target_configdirs_all} ; do
-  j=`echo $i | sed -e s/target-//g` 
+  j=`echo $i | sed -e s/target-//g`
   if test -f ${srcdir}/$j/configure ; then
     target_configdirs="${target_configdirs} $i"
   fi
@@ -2093,7 +2094,7 @@ ACX_TOOL_DIRS
 
 copy_dirs=
 
-AC_ARG_WITH([build-sysroot], 
+AC_ARG_WITH([build-sysroot],
   [AS_HELP_STRING([--with-build-sysroot=SYSROOT],
 		  [use sysroot as the system root during the build])],
   [if test x"$withval" != x ; then
@@ -2124,11 +2125,11 @@ if test "x$CFLAGS_FOR_TARGET" = x; then
   CFLAGS_FOR_TARGET=$CFLAGS
   case " $CFLAGS " in
     *" -O2 "*) ;;
-    *) CFLAGS_FOR_TARGET="-O2 $CFLAGS" ;;
+    *) CFLAGS_FOR_TARGET="-O2 $CFLAGS_FOR_TARGET" ;;
   esac
   case " $CFLAGS " in
     *" -g "* | *" -g3 "*) ;;
-    *) CFLAGS_FOR_TARGET="-g $CFLAGS" ;;
+    *) CFLAGS_FOR_TARGET="-g $CFLAGS_FOR_TARGET" ;;
   esac
 fi
 AC_SUBST(CFLAGS_FOR_TARGET)
@@ -2137,11 +2138,11 @@ if test "x$CXXFLAGS_FOR_TARGET" = x; then
   CXXFLAGS_FOR_TARGET=$CXXFLAGS
   case " $CXXFLAGS " in
     *" -O2 "*) ;;
-    *) CXXFLAGS_FOR_TARGET="-O2 $CXXFLAGS" ;;
+    *) CXXFLAGS_FOR_TARGET="-O2 $CXXFLAGS_FOR_TARGET" ;;
   esac
   case " $CXXFLAGS " in
     *" -g "* | *" -g3 "*) ;;
-    *) CXXFLAGS_FOR_TARGET="-g $CXXFLAGS" ;;
+    *) CXXFLAGS_FOR_TARGET="-g $CXXFLAGS_FOR_TARGET" ;;
   esac
 fi
 AC_SUBST(CXXFLAGS_FOR_TARGET)
@@ -2184,11 +2185,11 @@ fi
 # This is done by determining whether or not the appropriate directory
 # is available, and by checking whether or not specific configurations
 # have requested that this magic not happen.
-# 
-# The command line options always override the explicit settings in 
+#
+# The command line options always override the explicit settings in
 # configure.in, and the settings in configure.in override this magic.
 #
-# If the default for a toolchain is to use GNU as and ld, and you don't 
+# If the default for a toolchain is to use GNU as and ld, and you don't
 # want to do that, then you should use the --without-gnu-as and
 # --without-gnu-ld options for the configure script.  Similarly, if
 # the default is to use the included zlib and you don't want to do that,
@@ -2289,7 +2290,7 @@ case "${target}" in
     target_makefile_frag="config/mt-gnu"
     ;;
   *-*-aix4.[[3456789]]* | *-*-aix[[56789]].*)
-    # nm and ar from AIX 4.3 and above require -X32_64 flag to all ar and nm 
+    # nm and ar from AIX 4.3 and above require -X32_64 flag to all ar and nm
     # commands to handle both 32-bit and 64-bit objects.  These flags are
     # harmless if we're using GNU nm or ar.
     extra_arflags_for_target=" -X32_64"
@@ -2331,18 +2332,6 @@ case "${enable_target_optspace}:${target}" in
     ;;
 esac
 
-# Default to using --with-stabs for certain targets.
-if test x${with_stabs} = x ; then
-  case "${target}" in
-  mips*-*-irix[[56]]*)
-    ;;
-  mips*-*-* | alpha*-*-osf*)
-    with_stabs=yes;
-    extra_host_args="${extra_host_args} --with-stabs"
-    ;;
-  esac
-fi
-
 # Some systems (e.g., one of the i386-aix systems the gas testers are
 # using) don't handle "\$" correctly, so don't use it here.
 tooldir='${exec_prefix}'/${target_noncanonical}
@@ -2375,7 +2364,7 @@ if test $? = 0 ; then
   if test -s conftest || test -s conftest.exe ; then
     we_are_ok=yes
   fi
-fi 
+fi
 case $we_are_ok in
   no)
     echo 1>&2 "*** The command '${CC} -o conftest ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} conftest.c' failed."
@@ -2745,7 +2734,7 @@ baseargs=`echo "x$baseargs" | sed -e 's/^x *//' -e 's,\\$,$$,g'`
 # --program-suffix have been applied to it.  Autoconf has already
 # doubled dollar signs and backslashes in program_transform_name; we want
 # the backslashes un-doubled, and then the entire thing wrapped in single
-# quotes, because this will be expanded first by make and then by the shell. 
+# quotes, because this will be expanded first by make and then by the shell.
 # Also, because we want to override the logic in subdir configure scripts to
 # choose program_transform_name, replace any s,x,x, with s,y,y,.
 sed -e "s,\\\\\\\\,\\\\,g; s,','\\\\'',g; s/s,x,x,/s,y,y,/" <<EOF_SED > conftestsed.out
@@ -3070,7 +3059,7 @@ AC_SUBST(CFLAGS)
 AC_SUBST(CXXFLAGS)
 
 # Target tools.
-AC_ARG_WITH([build-time-tools], 
+AC_ARG_WITH([build-time-tools],
   [AS_HELP_STRING([--with-build-time-tools=PATH],
 		  [use given path to find target tools during the build])],
   [case x"$withval" in
@@ -3175,7 +3164,7 @@ if test "$USE_MAINTAINER_MODE" = yes; then
 else
   MAINTAINER_MODE_TRUE='#'
   MAINTAINER_MODE_FALSE=
-fi	
+fi
 MAINT=$MAINTAINER_MODE_TRUE
 AC_SUBST(MAINT)dnl
 
diff --git a/cpu/ChangeLog b/cpu/ChangeLog
index d04a554..bd82d13 100644
--- a/cpu/ChangeLog
+++ b/cpu/ChangeLog
@@ -1,3 +1,12 @@
+2012-02-27  Alan Modra  <amodra at gmail.com>
+
+	* mt.opc (print_dollarhex): Trim values to 32 bits.
+
+2011-12-15  Nick Clifton  <nickc at redhat.com>
+
+	* frv.opc (parse_uhi16): Fix handling of %hi operator on 64-bit
+	hosts.
+
 2011-10-26  Joern Rennecke  <joern.rennecke at embecosm.com>
 
 	* epiphany.opc (parse_branch_addr): Fix type of valuep.
diff --git a/cpu/frv.opc b/cpu/frv.opc
index f81cef0..869155d 100644
--- a/cpu/frv.opc
+++ b/cpu/frv.opc
@@ -1343,11 +1343,11 @@ parse_uhi16 (CGEN_CPU_DESC cd,
 	  if (errmsg == NULL
 	      && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
 	    {
-	      /* If bfd_vma is wider than 32 bits, but we have a sign-
-		 or zero-extension, truncate it.  */
-	      if (value >= - ((bfd_vma)1 << 31)
-		  || value <= ((bfd_vma)1 << 31) - (bfd_vma)1)
-		value &= (((bfd_vma)1 << 16) << 16) - 1;
+ 	      /* If value is wider than 32 bits then be
+ 		 careful about how we extract bits 16-31.  */
+ 	      if (sizeof (value) > 4)
+ 		value &= (((bfd_vma)1 << 16) << 16) - 1;
+
 	      value >>= 16;
 	    }
 	  *valuep = value;
diff --git a/cpu/mt.opc b/cpu/mt.opc
index 3da6d0e..d988cc2 100644
--- a/cpu/mt.opc
+++ b/cpu/mt.opc
@@ -1,5 +1,5 @@
 /* Morpho Technologies mRISC opcode support, for GNU Binutils.  -*- C -*-
-   Copyright 2001, 2007, 2008, 2009 Free Software Foundation, Inc.
+   Copyright 2001, 2007, 2008, 2009, 2012 Free Software Foundation, Inc.
 
    Contributed by Red Hat Inc; developed under contract from
    Morpho Technologies.
@@ -447,7 +447,7 @@ print_dollarhex (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
 {
   disassemble_info *info = (disassemble_info *) dis_info;
 
-  info->fprintf_func (info->stream, "$%lx", value);
+  info->fprintf_func (info->stream, "$%lx", value & 0xffffffff);
 
   if (0)
     print_normal (cd, dis_info, value, attrs, pc, length);
diff --git a/djunpack.bat b/djunpack.bat
index 7dc1489..fdcdc48 100644
--- a/djunpack.bat
+++ b/djunpack.bat
@@ -17,8 +17,8 @@ Rem
 Rem The following 2 lines need to be changed with each new GDB release, to
 Rem be identical to the name of the top-level directory where the GDB
 Rem distribution unpacks itself.
-set GDBVER=gdb-7.4.1
-if "%GDBVER%"=="gdb-7.4.1" GoTo EnvOk
+set GDBVER=gdb-7.5
+if "%GDBVER%"=="gdb-7.5" GoTo EnvOk
 Rem If their environment space is too small, re-exec with a larger one
 command.com /e:4096 /c %0 %1
 GoTo End
diff --git a/etc/configure.info b/etc/configure.info
new file mode 100644
index 0000000..cee206a
--- /dev/null
+++ b/etc/configure.info
@@ -0,0 +1,2773 @@
+This is configure.info, produced by makeinfo version 4.8 from
+./configure.texi.
+
+INFO-DIR-SECTION GNU admin
+START-INFO-DIR-ENTRY
+* configure: (configure).	The GNU configure and build system
+END-INFO-DIR-ENTRY
+
+   This file documents the GNU configure and build system.
+
+   Copyright (C) 1998 Cygnus Solutions.
+
+   Permission is granted to make and distribute verbatim copies of this
+manual provided the copyright notice and this permission notice are
+preserved on all copies.
+
+   Permission is granted to copy and distribute modified versions of
+this manual under the conditions for verbatim copying, provided that
+the entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+   Permission is granted to copy and distribute translations of this
+manual into another language, under the above conditions for modified
+versions, except that this permission notice may be stated in a
+translation approved by the Foundation.
+
+
+File: configure.info,  Node: Top,  Next: Introduction,  Up: (dir)
+
+GNU configure and build system
+******************************
+
+The GNU configure and build system.
+
+* Menu:
+
+* Introduction::		Introduction.
+* Getting Started::		Getting Started.
+* Files::			Files.
+* Configuration Names::		Configuration Names.
+* Cross Compilation Tools::	Cross Compilation Tools.
+* Canadian Cross::		Canadian Cross.
+* Cygnus Configure::		Cygnus Configure.
+* Multilibs::			Multilibs.
+* FAQ::				Frequently Asked Questions.
+* Index::			Index.
+
+
+File: configure.info,  Node: Introduction,  Next: Getting Started,  Prev: Top,  Up: Top
+
+1 Introduction
+**************
+
+This document describes the GNU configure and build systems.  It
+describes how autoconf, automake, libtool, and make fit together.  It
+also includes a discussion of the older Cygnus configure system.
+
+   This document does not describe in detail how to use each of the
+tools; see the respective manuals for that.  Instead, it describes
+which files the developer must write, which files are machine generated
+and how they are generated, and where certain common problems should be
+addressed.
+
+   This document draws on several sources, including the autoconf
+manual by David MacKenzie (*note autoconf overview: (autoconf)Top.),
+the automake manual by David MacKenzie and Tom Tromey (*note automake
+overview: (automake)Top.), the libtool manual by Gordon Matzigkeit
+(*note libtool overview: (libtool)Top.), and the Cygnus configure
+manual by K. Richard Pixley.
+
+* Menu:
+
+* Goals::			Goals.
+* Tools::			The tools.
+* History::			History.
+* Building::			Building.
+
+
+File: configure.info,  Node: Goals,  Next: Tools,  Up: Introduction
+
+1.1 Goals
+=========
+
+The GNU configure and build system has two main goals.
+
+   The first is to simplify the development of portable programs.  The
+system permits the developer to concentrate on writing the program,
+simplifying many details of portability across Unix and even Windows
+systems, and permitting the developer to describe how to build the
+program using simple rules rather than complex Makefiles.
+
+   The second is to simplify the building of programs distributed as
+source code.  All programs are built using a simple, standardized, two
+step process.  The program builder need not install any special tools in
+order to build the program.
+
+
+File: configure.info,  Node: Tools,  Next: History,  Prev: Goals,  Up: Introduction
+
+1.2 Tools
+=========
+
+The GNU configure and build system is comprised of several different
+tools.  Program developers must build and install all of these tools.
+
+   People who just want to build programs from distributed sources
+normally do not need any special tools beyond a Unix shell, a make
+program, and a C compiler.
+
+autoconf
+     provides a general portability framework, based on testing the
+     features of the host system at build time.
+
+automake
+     a system for describing how to build a program, permitting the
+     developer to write a simplified `Makefile'.
+
+libtool
+     a standardized approach to building shared libraries.
+
+gettext
+     provides a framework for translation of text messages into other
+     languages; not really discussed in this document.
+
+m4
+     autoconf requires the GNU version of m4; the standard Unix m4 does
+     not suffice.
+
+perl
+     automake requires perl.
+
+
+File: configure.info,  Node: History,  Next: Building,  Prev: Tools,  Up: Introduction
+
+1.3 History
+===========
+
+This is a very brief and probably inaccurate history.
+
+   As the number of Unix variants increased during the 1980s, it became
+harder to write programs which could run on all variants.  While it was
+often possible to use `#ifdef' to identify particular systems,
+developers frequently did not have access to every system, and the
+characteristics of some systems changed from version to version.
+
+   By 1992, at least three different approaches had been developed:
+   * The Metaconfig program, by Larry Wall, Harlan Stenn, and Raphael
+     Manfredi.
+
+   * The Cygnus configure script, by K. Richard Pixley, and the gcc
+     configure script, by Richard Stallman.  These use essentially the
+     same approach, and the developers communicated regularly.
+
+   * The autoconf program, by David MacKenzie.
+
+   The Metaconfig program is still used for Perl and a few other
+programs.  It is part of the Dist package.  I do not know if it is
+being developed.
+
+   In 1994, David MacKenzie and others modified autoconf to incorporate
+all the features of Cygnus configure.  Since then, there has been a
+slow but steady conversion of GNU programs from Cygnus configure to
+autoconf. gcc has been converted, eliminating the gcc configure script.
+
+   GNU autoconf was regularly maintained until late 1996.  As of this
+writing in June, 1998, it has no public maintainer.
+
+   Most programs are built using the make program, which requires the
+developer to write Makefiles describing how to build the programs.
+Since most programs are built in pretty much the same way, this led to a
+lot of duplication.
+
+   The X Window system is built using the imake tool, which uses a
+database of rules to eliminate the duplication.  However, building a
+tool which was developed using imake requires that the builder have
+imake installed, violating one of the goals of the GNU system.
+
+   The new BSD make provides a standard library of Makefile fragments,
+which permits developers to write very simple Makefiles.  However, this
+requires that the builder install the new BSD make program.
+
+   In 1994, David MacKenzie wrote the first version of automake, which
+permitted writing a simple build description which was converted into a
+Makefile which could be used by the standard make program.  In 1995, Tom
+Tromey completely rewrote automake in Perl, and he continues to enhance
+it.
+
+   Various free packages built libraries, and by around 1995 several
+included support to build shared libraries on various platforms.
+However, there was no consistent approach.  In early 1996, Gordon
+Matzigkeit began working on libtool, which provided a standardized
+approach to building shared libraries.  This was integrated into
+automake from the start.
+
+   The development of automake and libtool was driven by the GNITS
+project, a group of GNU maintainers who designed standardized tools to
+help meet the GNU coding standards.
+
+
+File: configure.info,  Node: Building,  Prev: History,  Up: Introduction
+
+1.4 Building
+============
+
+Most readers of this document should already know how to build a tool by
+running `configure' and `make'.  This section may serve as a quick
+introduction or reminder.
+
+   Building a tool is normally as simple as running `configure'
+followed by `make'.  You should normally run `configure' from an empty
+directory, using some path to refer to the `configure' script in the
+source directory.  The directory in which you run `configure' is called
+the "object directory".
+
+   In order to use a object directory which is different from the source
+directory, you must be using the GNU version of `make', which has the
+required `VPATH' support.  Despite this restriction, using a different
+object directory is highly recommended:
+   * It keeps the files generated during the build from cluttering up
+     your sources.
+
+   * It permits you to remove the built files by simply removing the
+     entire build directory.
+
+   * It permits you to build from the same sources with several sets of
+     configure options simultaneously.
+
+   If you don't have GNU `make', you will have to run `configure' in
+the source directory.  All GNU packages should support this; in
+particular, GNU packages should not assume the presence of GNU `make'.
+
+   After running `configure', you can build the tools by running `make'.
+
+   To install the tools, run `make install'.  Installing the tools will
+copy the programs and any required support files to the "installation
+directory".  The location of the installation directory is controlled
+by `configure' options, as described below.
+
+   In the Cygnus tree at present, the info files are built and
+installed as a separate step.  To build them, run `make info'.  To
+install them, run `make install-info'. The equivalent html files are
+also built and installed in a separate step. To build the html files,
+run `make html'. To install the html files run `make install-html'.
+
+   All `configure' scripts support a wide variety of options.  The most
+interesting ones are `--with' and `--enable' options which are
+generally specific to particular tools.  You can usually use the
+`--help' option to get a list of interesting options for a particular
+configure script.
+
+   The only generic options you are likely to use are the `--prefix'
+and `--exec-prefix' options.  These options are used to specify the
+installation directory.
+
+   The directory named by the `--prefix' option will hold machine
+independent files such as info files.
+
+   The directory named by the `--exec-prefix' option, which is normally
+a subdirectory of the `--prefix' directory, will hold machine dependent
+files such as executables.
+
+   The default for `--prefix' is `/usr/local'.  The default for
+`--exec-prefix' is the value used for `--prefix'.
+
+   The convention used in Cygnus releases is to use a `--prefix' option
+of `/usr/cygnus/RELEASE', where RELEASE is the name of the release, and
+to use a `--exec-prefix' option of `/usr/cygnus/RELEASE/H-HOST', where
+HOST is the configuration name of the host system (*note Configuration
+Names::).
+
+   Do not use either the source or the object directory as the
+installation directory.  That will just lead to confusion.
+
+
+File: configure.info,  Node: Getting Started,  Next: Files,  Prev: Introduction,  Up: Top
+
+2 Getting Started
+*****************
+
+To start using the GNU configure and build system with your software
+package, you must write three files, and you must run some tools to
+manually generate additional files.
+
+* Menu:
+
+* Write configure.in::		Write configure.in.
+* Write Makefile.am::		Write Makefile.am.
+* Write acconfig.h::		Write acconfig.h.
+* Generate files::		Generate files.
+* Getting Started Example::	Example.
+
+
+File: configure.info,  Node: Write configure.in,  Next: Write Makefile.am,  Up: Getting Started
+
+2.1 Write configure.in
+======================
+
+You must first write the file `configure.in'.  This is an autoconf
+input file, and the autoconf manual describes in detail what this file
+should look like.
+
+   You will write tests in your `configure.in' file to check for
+conditions that may change from one system to another, such as the
+presence of particular header files or functions.
+
+   For example, not all systems support the `gettimeofday' function.
+If you want to use the `gettimeofday' function when it is available,
+and to use some other function when it is not, you would check for this
+by putting `AC_CHECK_FUNCS(gettimeofday)' in `configure.in'.
+
+   When the configure script is run at build time, this will arrange to
+define the preprocessor macro `HAVE_GETTIMEOFDAY' to the value 1 if the
+`gettimeofday' function is available, and to not define the macro at
+all if the function is not available.  Your code can then use `#ifdef'
+to test whether it is safe to call `gettimeofday'.
+
+   If you have an existing body of code, the `autoscan' program may
+help identify potential portability problems, and hence configure tests
+that you will want to use.  *Note Invoking autoscan: (autoconf)Invoking
+autoscan.
+
+   Another handy tool for an existing body of code is `ifnames'.  This
+will show you all the preprocessor conditionals that the code already
+uses.  *Note Invoking ifnames: (autoconf)Invoking ifnames.
+
+   Besides the portability tests which are specific to your particular
+package, every `configure.in' file should contain the following macros.
+
+`AC_INIT'
+     This macro takes a single argument, which is the name of a file in
+     your package.  For example, `AC_INIT(foo.c)'.
+
+`AC_PREREQ(VERSION)'
+     This macro is optional.  It may be used to indicate the version of
+     `autoconf' that you are using.  This will prevent users from
+     running an earlier version of `autoconf' and perhaps getting an
+     invalid `configure' script.  For example, `AC_PREREQ(2.12)'.
+
+`AM_INIT_AUTOMAKE'
+     This macro takes two arguments: the name of the package, and a
+     version number.  For example, `AM_INIT_AUTOMAKE(foo, 1.0)'.  (This
+     macro is not needed if you are not using automake).
+
+`AM_CONFIG_HEADER'
+     This macro names the header file which will hold the preprocessor
+     macro definitions at run time.  Normally this should be
+     `config.h'.  Your sources would then use `#include "config.h"' to
+     include it.
+
+     This macro may optionally name the input file for that header
+     file; by default, this is `config.h.in', but that file name works
+     poorly on DOS filesystems.  Therefore, it is often better to name
+     it explicitly as `config.in'.
+
+     This is what you should normally put in `configure.in':
+          AM_CONFIG_HEADER(config.h:config.in)
+
+     (If you are not using automake, use `AC_CONFIG_HEADER' rather than
+     `AM_CONFIG_HEADER').
+
+`AM_MAINTAINER_MODE'
+     This macro always appears in Cygnus configure scripts.  Other
+     programs may or may not use it.
+
+     If this macro is used, the `--enable-maintainer-mode' option is
+     required to enable automatic rebuilding of generated files used by
+     the configure system.  This of course requires that developers be
+     aware of, and use, that option.
+
+     If this macro is not used, then the generated files will always be
+     rebuilt automatically.  This will cause problems if the wrong
+     versions of autoconf, automake, or others are in the builder's
+     `PATH'.
+
+     (If you are not using automake, you do not need to use this macro).
+
+`AC_EXEEXT'
+     Either this macro or `AM_EXEEXT' always appears in Cygnus configure
+     files.  Other programs may or may not use one of them.
+
+     This macro looks for the executable suffix used on the host
+     system.  On Unix systems, this is the empty string.  On Windows
+     systems, this is `.exe'.  This macro directs automake to use the
+     executable suffix as appropriate when creating programs.  This
+     macro does not take any arguments.
+
+     The `AC_EXEEXT' form is new, and is part of a Cygnus patch to
+     autoconf to support compiling with Visual C++.  Older programs use
+     `AM_EXEEXT' instead.
+
+     (Programs which do not use automake use neither `AC_EXEEXT' nor
+     `AM_EXEEXT').
+
+`AC_PROG_CC'
+     If you are writing C code, you will normally want to use this
+     macro.  It locates the C compiler to use.  It does not take any
+     arguments.
+
+     However, if this `configure.in' file is for a library which is to
+     be compiled by a cross compiler which may not fully work, then you
+     will not want to use `AC_PROG_CC'.  Instead, you will want to use a
+     variant which does not call the macro `AC_PROG_CC_WORKS'.  Examples
+     can be found in various `configure.in' files for libraries that are
+     compiled with cross compilers, such as libiberty or libgloss.
+     This is essentially a bug in autoconf, and there will probably be
+     a better workaround at some point.
+
+`AC_PROG_CXX'
+     If you are writing C++ code, you will want to use this macro.  It
+     locates the C++ compiler to use.  It does not take any arguments.
+     The same cross compiler comments apply as for `AC_PROG_CC'.
+
+`AM_PROG_LIBTOOL'
+     If you want to build libraries, and you want to permit them to be
+     shared, or you want to link against libraries which were built
+     using libtool, then you will need this macro.  This macro is
+     required in order to use libtool.
+
+     By default, this will cause all libraries to be built as shared
+     libraries.  To prevent this-to change the default-use
+     `AM_DISABLE_SHARED' before `AM_PROG_LIBTOOL'.  The configure
+     options `--enable-shared' and `--disable-shared' may be used to
+     override the default at build time.
+
+`AC_DEFINE(_GNU_SOURCE)'
+     GNU packages should normally include this line before any other
+     feature tests.  This defines the macro `_GNU_SOURCE' when
+     compiling, which directs the libc header files to provide the
+     standard GNU system interfaces including all GNU extensions.  If
+     this macro is not defined, certain GNU extensions may not be
+     available.
+
+`AC_OUTPUT'
+     This macro takes a list of file names which the configure process
+     should produce.  This is normally a list of one or more `Makefile'
+     files in different directories.  If your package lives entirely in
+     a single directory, you would use simply `AC_OUTPUT(Makefile)'.
+     If you also have, for example, a `lib' subdirectory, you would use
+     `AC_OUTPUT(Makefile lib/Makefile)'.
+
+   If you want to use locally defined macros in your `configure.in'
+file, then you will need to write a `acinclude.m4' file which defines
+them (if not using automake, this file is called `aclocal.m4').
+Alternatively, you can put separate macros in an `m4' subdirectory, and
+put `ACLOCAL_AMFLAGS = -I m4' in your `Makefile.am' file so that the
+`aclocal' program will be able to find them.
+
+   The different macro prefixes indicate which tool defines the macro.
+Macros which start with `AC_' are part of autoconf.  Macros which start
+with `AM_' are provided by automake or libtool.
+
+
+File: configure.info,  Node: Write Makefile.am,  Next: Write acconfig.h,  Prev: Write configure.in,  Up: Getting Started
+
+2.2 Write Makefile.am
+=====================
+
+You must write the file `Makefile.am'.  This is an automake input file,
+and the automake manual describes in detail what this file should look
+like.
+
+   The automake commands in `Makefile.am' mostly look like variable
+assignments in a `Makefile'.  automake recognizes special variable
+names, and automatically add make rules to the output as needed.
+
+   There will be one `Makefile.am' file for each directory in your
+package.  For each directory with subdirectories, the `Makefile.am'
+file should contain the line
+     SUBDIRS = DIR DIR ...
+   where each DIR is the name of a subdirectory.
+
+   For each `Makefile.am', there should be a corresponding `Makefile'
+in the `AC_OUTPUT' macro in `configure.in'.
+
+   Every `Makefile.am' written at Cygnus should contain the line
+     AUTOMAKE_OPTIONS = cygnus
+   This puts automake into Cygnus mode.  See the automake manual for
+details.
+
+   You may to include the version number of `automake' that you are
+using on the `AUTOMAKE_OPTIONS' line.  For example,
+     AUTOMAKE_OPTIONS = cygnus 1.3
+   This will prevent users from running an earlier version of
+`automake' and perhaps getting an invalid `Makefile.in'.
+
+   If your package builds a program, then in the directory where that
+program is built you will normally want a line like
+     bin_PROGRAMS = PROGRAM
+   where PROGRAM is the name of the program.  You will then want a line
+like
+     PROGRAM_SOURCES = FILE FILE ...
+   where each FILE is the name of a source file to link into the
+program (e.g., `foo.c').
+
+   If your package builds a library, and you do not want the library to
+ever be built as a shared library, then in the directory where that
+library is built you will normally want a line like
+     lib_LIBRARIES = libNAME.a
+   where `libNAME.a' is the name of the library.  You will then want a
+line like
+     libNAME_a_SOURCES = FILE FILE ...
+   where each FILE is the name of a source file to add to the library.
+
+   If your package builds a library, and you want to permit building the
+library as a shared library, then in the directory where that library is
+built you will normally want a line like
+     lib_LTLIBRARIES = libNAME.la
+   The use of `LTLIBRARIES', and the `.la' extension, indicate a
+library to be built using libtool.  As usual, you will then want a line
+like
+     libNAME_la_SOURCES = FILE FILE ...
+
+   The strings `bin' and `lib' that appear above in `bin_PROGRAMS' and
+`lib_LIBRARIES' are not arbitrary.  They refer to particular
+directories, which may be set by the `--bindir' and `--libdir' options
+to `configure'.  If those options are not used, the default values are
+based on the `--prefix' or `--exec-prefix' options to `configure'.  It
+is possible to use other names if the program or library should be
+installed in some other directory.
+
+   The `Makefile.am' file may also contain almost anything that may
+appear in a normal `Makefile'.  automake also supports many other
+special variables, as well as conditionals.
+
+   See the automake manual for more information.
+
+
+File: configure.info,  Node: Write acconfig.h,  Next: Generate files,  Prev: Write Makefile.am,  Up: Getting Started
+
+2.3 Write acconfig.h
+====================
+
+If you are generating a portability header file, (i.e., you are using
+`AM_CONFIG_HEADER' in `configure.in'), then you will have to write a
+`acconfig.h' file.  It will have to contain the following lines.
+
+     /* Name of package.  */
+     #undef PACKAGE
+
+     /* Version of package.  */
+     #undef VERSION
+
+   This requirement is really a bug in the system, and the requirement
+may be eliminated at some later date.
+
+   The `acconfig.h' file will also similar comment and `#undef' lines
+for any unusual macros in the `configure.in' file, including any macro
+which appears in a `AC_DEFINE' macro.
+
+   In particular, if you are writing a GNU package and therefore include
+`AC_DEFINE(_GNU_SOURCE)' in `configure.in' as suggested above, you will
+need lines like this in `acconfig.h':
+     /* Enable GNU extensions.  */
+     #undef _GNU_SOURCE
+
+   Normally the `autoheader' program will inform you of any such
+requirements by printing an error message when it is run.  However, if
+you do anything particular odd in your `configure.in' file, you will
+have to make sure that the right entries appear in `acconfig.h', since
+otherwise the results of the tests may not be available in the
+`config.h' file which your code will use.
+
+   (Thee `PACKAGE' and `VERSION' lines are not required if you are not
+using automake, and in that case you may not need a `acconfig.h' file
+at all).
+
+
+File: configure.info,  Node: Generate files,  Next: Getting Started Example,  Prev: Write acconfig.h,  Up: Getting Started
+
+2.4 Generate files
+==================
+
+Once you have written `configure.in', `Makefile.am', `acconfig.h', and
+possibly `acinclude.m4', you must use autoconf and automake programs to
+produce the first versions of the generated files.  This is done by
+executing the following sequence of commands.
+
+     aclocal
+     autoconf
+     autoheader
+     automake
+
+   The `aclocal' and `automake' commands are part of the automake
+package, and the `autoconf' and `autoheader' commands are part of the
+autoconf package.
+
+   If you are using a `m4' subdirectory for your macros, you will need
+to use the `-I m4' option when you run `aclocal'.
+
+   If you are not using the Cygnus tree, use the `-a' option when
+running `automake' command in order to copy the required support files
+into your source directory.
+
+   If you are using libtool, you must build and install the libtool
+package with the same `--prefix' and `--exec-prefix' options as you
+used with the autoconf and automake packages.  You must do this before
+running any of the above commands.  If you are not using the Cygnus
+tree, you will need to run the `libtoolize' program to copy the libtool
+support files into your directory.
+
+   Once you have managed to run these commands without getting any
+errors, you should create a new empty directory, and run the `configure'
+script which will have been created by `autoconf' with the
+`--enable-maintainer-mode' option.  This will give you a set of
+Makefiles which will include rules to automatically rebuild all the
+generated files.
+
+   After doing that, whenever you have changed some of the input files
+and want to regenerated the other files, go to your object directory
+and run `make'.  Doing this is more reliable than trying to rebuild the
+files manually, because there are complex order dependencies and it is
+easy to forget something.
+
+
+File: configure.info,  Node: Getting Started Example,  Prev: Generate files,  Up: Getting Started
+
+2.5 Example
+===========
+
+Let's consider a trivial example.
+
+   Suppose we want to write a simple version of `touch'.  Our program,
+which we will call `poke', will take a single file name argument, and
+use the `utime' system call to set the modification and access times of
+the file to the current time.  We want this program to be highly
+portable.
+
+   We'll first see what this looks like without using autoconf and
+automake, and then see what it looks like with them.
+
+* Menu:
+
+* Getting Started Example 1::		First Try.
+* Getting Started Example 2::		Second Try.
+* Getting Started Example 3::		Third Try.
+* Generate Files in Example::		Generate Files.
+
+
+File: configure.info,  Node: Getting Started Example 1,  Next: Getting Started Example 2,  Up: Getting Started Example
+
+2.5.1 First Try
+---------------
+
+Here is our first try at `poke.c'.  Note that we've written it without
+ANSI/ISO C prototypes, since we want it to be highly portable.
+
+     #include <stdio.h>
+     #include <stdlib.h>
+     #include <sys/types.h>
+     #include <utime.h>
+
+     int
+     main (argc, argv)
+          int argc;
+          char **argv;
+     {
+       if (argc != 2)
+         {
+           fprintf (stderr, "Usage: poke file\n");
+           exit (1);
+         }
+
+       if (utime (argv[1], NULL) < 0)
+         {
+           perror ("utime");
+           exit (1);
+         }
+
+       exit (0);
+     }
+
+   We also write a simple `Makefile'.
+
+     CC = gcc
+     CFLAGS = -g -O2
+
+     all: poke
+
+     poke: poke.o
+     	$(CC) -o poke $(CFLAGS) $(LDFLAGS) poke.o
+
+   So far, so good.
+
+   Unfortunately, there are a few problems.
+
+   On older Unix systems derived from BSD 4.3, the `utime' system call
+does not accept a second argument of `NULL'.  On those systems, we need
+to pass a pointer to `struct utimbuf' structure.  Unfortunately, even
+older systems don't define that structure; on those systems, we need to
+pass an array of two `long' values.
+
+   The header file `stdlib.h' was invented by ANSI C, and older systems
+don't have a copy.  We included it above to get a declaration of `exit'.
+
+   We can find some of these portability problems by running
+`autoscan', which will create a `configure.scan' file which we can use
+as a prototype for our `configure.in' file.  I won't show the output,
+but it will notice the potential problems with `utime' and `stdlib.h'.
+
+   In our `Makefile', we don't provide any way to install the program.
+This doesn't matter much for such a simple example, but a real program
+will need an `install' target.  For that matter, we will also want a
+`clean' target.
+
+
+File: configure.info,  Node: Getting Started Example 2,  Next: Getting Started Example 3,  Prev: Getting Started Example 1,  Up: Getting Started Example
+
+2.5.2 Second Try
+----------------
+
+Here is our second try at this program.
+
+   We modify `poke.c' to use preprocessor macros to control what
+features are available.  (I've cheated a bit by using the same macro
+names which autoconf will use).
+
+     #include <stdio.h>
+
+     #ifdef STDC_HEADERS
+     #include <stdlib.h>
+     #endif
+
+     #include <sys/types.h>
+
+     #ifdef HAVE_UTIME_H
+     #include <utime.h>
+     #endif
+
+     #ifndef HAVE_UTIME_NULL
+
+     #include <time.h>
+
+     #ifndef HAVE_STRUCT_UTIMBUF
+
+     struct utimbuf
+     {
+       long actime;
+       long modtime;
+     };
+
+     #endif
+
+     static int
+     utime_now (file)
+          char *file;
+     {
+       struct utimbuf now;
+
+       now.actime = now.modtime = time (NULL);
+       return utime (file, &now);
+     }
+
+     #define utime(f, p) utime_now (f)
+
+     #endif /* HAVE_UTIME_NULL  */
+
+     int
+     main (argc, argv)
+          int argc;
+          char **argv;
+     {
+       if (argc != 2)
+         {
+           fprintf (stderr, "Usage: poke file\n");
+           exit (1);
+         }
+
+       if (utime (argv[1], NULL) < 0)
+         {
+           perror ("utime");
+           exit (1);
+         }
+
+       exit (0);
+     }
+
+   Here is the associated `Makefile'.  We've added support for the
+preprocessor flags we use.  We've also added `install' and `clean'
+targets.
+
+     # Set this to your installation directory.
+     bindir = /usr/local/bin
+
+     # Uncomment this if you have the standard ANSI/ISO C header files.
+     # STDC_HDRS = -DSTDC_HEADERS
+
+     # Uncomment this if you have utime.h.
+     # UTIME_H = -DHAVE_UTIME_H
+
+     # Uncomment this if utime (FILE, NULL) works on your system.
+     # UTIME_NULL = -DHAVE_UTIME_NULL
+
+     # Uncomment this if struct utimbuf is defined in utime.h.
+     # UTIMBUF = -DHAVE_STRUCT_UTIMBUF
+
+     CC = gcc
+     CFLAGS = -g -O2
+
+     ALL_CFLAGS = $(STDC_HDRS) $(UTIME_H) $(UTIME_NULL) $(UTIMBUF) $(CFLAGS)
+
+     all: poke
+
+     poke: poke.o
+     	$(CC) -o poke $(ALL_CFLAGS) $(LDFLAGS) poke.o
+
+     .c.o:
+     	$(CC) -c $(ALL_CFLAGS) poke.c
+
+     install: poke
+     	cp poke $(bindir)/poke
+
+     clean:
+     	rm poke poke.o
+
+   Some problems with this approach should be clear.
+
+   Users who want to compile poke will have to know how `utime' works
+on their systems, so that they can uncomment the `Makefile' correctly.
+
+   The installation is done using `cp', but many systems have an
+`install' program which may be used, and which supports optional
+features such as stripping debugging information out of the installed
+binary.
+
+   The use of `Makefile' variables like `CC', `CFLAGS' and `LDFLAGS'
+follows the requirements of the GNU standards.  This is convenient for
+all packages, since it reduces surprises for users.  However, it is
+easy to get the details wrong, and wind up with a slightly nonstandard
+distribution.
+
+
+File: configure.info,  Node: Getting Started Example 3,  Next: Generate Files in Example,  Prev: Getting Started Example 2,  Up: Getting Started Example
+
+2.5.3 Third Try
+---------------
+
+For our third try at this program, we will write a `configure.in'
+script to discover the configuration features on the host system, rather
+than requiring the user to edit the `Makefile'.  We will also write a
+`Makefile.am' rather than a `Makefile'.
+
+   The only change to `poke.c' is to add a line at the start of the
+file:
+     #include "config.h"
+
+   The new `configure.in' file is as follows.
+
+     AC_INIT(poke.c)
+     AM_INIT_AUTOMAKE(poke, 1.0)
+     AM_CONFIG_HEADER(config.h:config.in)
+     AC_PROG_CC
+     AC_HEADER_STDC
+     AC_CHECK_HEADERS(utime.h)
+     AC_EGREP_HEADER(utimbuf, utime.h, AC_DEFINE(HAVE_STRUCT_UTIMBUF))
+     AC_FUNC_UTIME_NULL
+     AC_OUTPUT(Makefile)
+
+   The first four macros in this file, and the last one, were described
+above; see *Note Write configure.in::.  If we omit these macros, then
+when we run `automake' we will get a reminder that we need them.
+
+   The other macros are standard autoconf macros.
+
+`AC_HEADER_STDC'
+     Check for standard C headers.
+
+`AC_CHECK_HEADERS'
+     Check whether a particular header file exists.
+
+`AC_EGREP_HEADER'
+     Check for a particular string in a particular header file, in this
+     case checking for `utimbuf' in `utime.h'.
+
+`AC_FUNC_UTIME_NULL'
+     Check whether `utime' accepts a NULL second argument to set the
+     file change time to the current time.
+
+   See the autoconf manual for a more complete description.
+
+   The new `Makefile.am' file is as follows.  Note how simple this is
+compared to our earlier `Makefile'.
+
+     bin_PROGRAMS = poke
+
+     poke_SOURCES = poke.c
+
+   This means that we should build a single program name `poke'.  It
+should be installed in the binary directory, which we called `bindir'
+earlier.  The program `poke' is built from the source file `poke.c'.
+
+   We must also write a `acconfig.h' file.  Besides `PACKAGE' and
+`VERSION', which must be mentioned for all packages which use automake,
+we must include `HAVE_STRUCT_UTIMBUF', since we mentioned it in an
+`AC_DEFINE'.
+
+     /* Name of package.  */
+     #undef PACKAGE
+
+     /* Version of package.  */
+     #undef VERSION
+
+     /* Whether utime.h defines struct utimbuf.  */
+     #undef HAVE_STRUCT_UTIMBUF
+
+
+File: configure.info,  Node: Generate Files in Example,  Prev: Getting Started Example 3,  Up: Getting Started Example
+
+2.5.4 Generate Files
+--------------------
+
+We must now generate the other files, using the following commands.
+
+     aclocal
+     autoconf
+     autoheader
+     automake
+
+   When we run `autoheader', it will remind us of any macros we forgot
+to add to `acconfig.h'.
+
+   When we run `automake', it will want to add some files to our
+distribution.  It will add them automatically if we use the
+`--add-missing' option.
+
+   By default, `automake' will run in GNU mode, which means that it
+will want us to create certain additional files; as of this writing, it
+will want `NEWS', `README', `AUTHORS', and `ChangeLog', all of which
+are files which should appear in a standard GNU distribution.  We can
+either add those files, or run `automake' with the `--foreign' option.
+
+   Running these tools will generate the following files, all of which
+are described in the next chapter.
+
+   * `aclocal.m4'
+
+   * `configure'
+
+   * `config.in'
+
+   * `Makefile.in'
+
+   * `stamp-h.in'
+
+
+File: configure.info,  Node: Files,  Next: Configuration Names,  Prev: Getting Started,  Up: Top
+
+3 Files
+*******
+
+As was seen in the previous chapter, the GNU configure and build system
+uses a number of different files.  The developer must write a few files.
+The others are generated by various tools.
+
+   The system is rather flexible, and can be used in many different
+ways.  In describing the files that it uses, I will describe the common
+case, and mention some other cases that may arise.
+
+* Menu:
+
+* Developer Files::		Developer Files.
+* Build Files::			Build Files.
+* Support Files::		Support Files.
+
+
+File: configure.info,  Node: Developer Files,  Next: Build Files,  Up: Files
+
+3.1 Developer Files
+===================
+
+This section describes the files written or generated by the developer
+of a package.
+
+* Menu:
+
+* Developer Files Picture::	Developer Files Picture.
+* Written Developer Files::	Written Developer Files.
+* Generated Developer Files::	Generated Developer Files.
+
+
+File: configure.info,  Node: Developer Files Picture,  Next: Written Developer Files,  Up: Developer Files
+
+3.1.1 Developer Files Picture
+-----------------------------
+
+Here is a picture of the files which are written by the developer, the
+generated files which would be included with a complete source
+distribution, and the tools which create those files.  The file names
+are plain text and the tool names are enclosed by `*' characters (e.g.,
+`autoheader' is the name of a tool, not the name of a file).
+
+   acconfig.h       configure.in                 Makefile.am
+       |                |                           |
+       |  --------------+----------------------     |
+       |  |             |                     |     |
+       v  v             |    acinclude.m4     |     |
+   *autoheader*         |         |           v     v
+       |                |         v      --->*automake*
+       v                |--->*aclocal*   |       |
+   config.in            |         |      |       v
+                        |         v      |   Makefile.in
+                        |    aclocal.m4---
+                        |     |
+                        v     v
+                       *autoconf*
+                           |
+                           v
+                       configure
+
+
+File: configure.info,  Node: Written Developer Files,  Next: Generated Developer Files,  Prev: Developer Files Picture,  Up: Developer Files
+
+3.1.2 Written Developer Files
+-----------------------------
+
+The following files would be written by the developer.
+
+`configure.in'
+     This is the configuration script.  This script contains
+     invocations of autoconf macros.  It may also contain ordinary
+     shell script code.  This file will contain feature tests for
+     portability issues.  The last thing in the file will normally be
+     an `AC_OUTPUT' macro listing which files to create when the
+     builder runs the configure script.  This file is always required
+     when using the GNU configure system.  *Note Write configure.in::.
+
+`Makefile.am'
+     This is the automake input file.  It describes how the code should
+     be built.  It consists of definitions of automake variables.  It
+     may also contain ordinary Makefile targets.  This file is only
+     needed when using automake (newer tools normally use automake, but
+     there are still older tools which have not been converted, in
+     which the developer writes `Makefile.in' directly).  *Note Write
+     Makefile.am::.
+
+`acconfig.h'
+     When the configure script creates a portability header file, by
+     using `AM_CONFIG_HEADER' (or, if not using automake,
+     `AC_CONFIG_HEADER'), this file is used to describe macros which are
+     not recognized by the `autoheader' command.  This is normally a
+     fairly uninteresting file, consisting of a collection of `#undef'
+     lines with comments.  Normally any call to `AC_DEFINE' in
+     `configure.in' will require a line in this file. *Note Write
+     acconfig.h::.
+
+`acinclude.m4'
+     This file is not always required.  It defines local autoconf
+     macros.  These macros may then be used in `configure.in'.  If you
+     don't need any local autoconf macros, then you don't need this
+     file at all.  In fact, in general, you never need local autoconf
+     macros, since you can put everything in `configure.in', but
+     sometimes a local macro is convenient.
+
+     Newer tools may omit `acinclude.m4', and instead use a
+     subdirectory, typically named `m4', and define `ACLOCAL_AMFLAGS =
+     -I m4' in `Makefile.am' to force `aclocal' to look there for macro
+     definitions.  The macro definitions are then placed in separate
+     files in that directory.
+
+     The `acinclude.m4' file is only used when using automake; in older
+     tools, the developer writes `aclocal.m4' directly, if it is needed.
+
+
+File: configure.info,  Node: Generated Developer Files,  Prev: Written Developer Files,  Up: Developer Files
+
+3.1.3 Generated Developer Files
+-------------------------------
+
+The following files would be generated by the developer.
+
+   When using automake, these files are normally not generated manually
+after the first time.  Instead, the generated `Makefile' contains rules
+to automatically rebuild the files as required.  When
+`AM_MAINTAINER_MODE' is used in `configure.in' (the normal case in
+Cygnus code), the automatic rebuilding rules will only be defined if
+you configure using the `--enable-maintainer-mode' option.
+
+   When using automatic rebuilding, it is important to ensure that all
+the various tools have been built and installed on your `PATH'.  Using
+automatic rebuilding is highly recommended, so much so that I'm not
+going to explain what you have to do if you don't use it.
+
+`configure'
+     This is the configure script which will be run when building the
+     package.  This is generated by `autoconf' from `configure.in' and
+     `aclocal.m4'.  This is a shell script.
+
+`Makefile.in'
+     This is the file which the configure script will turn into the
+     `Makefile' at build time.  This file is generated by `automake'
+     from `Makefile.am'.  If you aren't using automake, you must write
+     this file yourself.  This file is pretty much a normal `Makefile',
+     with some configure substitutions for certain variables.
+
+`aclocal.m4'
+     This file is created by the `aclocal' program, based on the
+     contents of `configure.in' and `acinclude.m4' (or, as noted in the
+     description of `acinclude.m4' above, on the contents of an `m4'
+     subdirectory).  This file contains definitions of autoconf macros
+     which `autoconf' will use when generating the file `configure'.
+     These autoconf macros may be defined by you in `acinclude.m4' or
+     they may be defined by other packages such as automake, libtool or
+     gettext.  If you aren't using automake, you will normally write
+     this file yourself; in that case, if `configure.in' uses only
+     standard autoconf macros, this file will not be needed at all.
+
+`config.in'
+     This file is created by `autoheader' based on `acconfig.h' and
+     `configure.in'.  At build time, the configure script will define
+     some of the macros in it to create `config.h', which may then be
+     included by your program.  This permits your C code to use
+     preprocessor conditionals to change its behaviour based on the
+     characteristics of the host system.  This file may also be called
+     `config.h.in'.
+
+`stamp.h-in'
+     This rather uninteresting file, which I omitted from the picture,
+     is generated by `automake'.  It always contains the string
+     `timestamp'.  It is used as a timestamp file indicating whether
+     `config.in' is up to date.  Using a timestamp file means that
+     `config.in' can be marked as up to date without actually changing
+     its modification time.  This is useful since `config.in' depends
+     upon `configure.in', but it is easy to change `configure.in' in a
+     way which does not affect `config.in'.
+
+
+File: configure.info,  Node: Build Files,  Next: Support Files,  Prev: Developer Files,  Up: Files
+
+3.2 Build Files
+===============
+
+This section describes the files which are created at configure and
+build time.  These are the files which somebody who builds the package
+will see.
+
+   Of course, the developer will also build the package.  The
+distinction between developer files and build files is not that the
+developer does not see the build files, but that somebody who only
+builds the package does not have to worry about the developer files.
+
+* Menu:
+
+* Build Files Picture::		Build Files Picture.
+* Build Files Description::	Build Files Description.
+
+
+File: configure.info,  Node: Build Files Picture,  Next: Build Files Description,  Up: Build Files
+
+3.2.1 Build Files Picture
+-------------------------
+
+Here is a picture of the files which will be created at build time.
+`config.status' is both a created file and a shell script which is run
+to create other files, and the picture attempts to show that.
+
+   config.in        *configure*      Makefile.in
+      |                  |               |
+      |                  v               |
+      |             config.status        |
+      |                  |               |
+   *config.status*<======+==========>*config.status*
+      |                                  |
+      v                                  v
+   config.h                          Makefile
+
+
+File: configure.info,  Node: Build Files Description,  Prev: Build Files Picture,  Up: Build Files
+
+3.2.2 Build Files Description
+-----------------------------
+
+This is a description of the files which are created at build time.
+
+`config.status'
+     The first step in building a package is to run the `configure'
+     script.  The `configure' script will create the file
+     `config.status', which is itself a shell script.  When you first
+     run `configure', it will automatically run `config.status'.  An
+     `Makefile' derived from an automake generated `Makefile.in' will
+     contain rules to automatically run `config.status' again when
+     necessary to recreate certain files if their inputs change.
+
+`Makefile'
+     This is the file which make will read to build the program.  The
+     `config.status' script will transform `Makefile.in' into
+     `Makefile'.
+
+`config.h'
+     This file defines C preprocessor macros which C code can use to
+     adjust its behaviour on different systems.  The `config.status'
+     script will transform `config.in' into `config.h'.
+
+`config.cache'
+     This file did not fit neatly into the picture, and I omitted it.
+     It is used by the `configure' script to cache results between
+     runs.  This can be an important speedup.  If you modify
+     `configure.in' in such a way that the results of old tests should
+     change (perhaps you have added a new library to `LDFLAGS'), then
+     you will have to remove `config.cache' to force the tests to be
+     rerun.
+
+     The autoconf manual explains how to set up a site specific cache
+     file.  This can speed up running `configure' scripts on your
+     system.
+
+`stamp.h'
+     This file, which I omitted from the picture, is similar to
+     `stamp-h.in'.  It is used as a timestamp file indicating whether
+     `config.h' is up to date.  This is useful since `config.h' depends
+     upon `config.status', but it is easy for `config.status' to change
+     in a way which does not affect `config.h'.
+
+
+File: configure.info,  Node: Support Files,  Prev: Build Files,  Up: Files
+
+3.3 Support Files
+=================
+
+The GNU configure and build system requires several support files to be
+included with your distribution.  You do not normally need to concern
+yourself with these.  If you are using the Cygnus tree, most are already
+present.  Otherwise, they will be installed with your source by
+`automake' (with the `--add-missing' option) and `libtoolize'.
+
+   You don't have to put the support files in the top level directory.
+You can put them in a subdirectory, and use the `AC_CONFIG_AUX_DIR'
+macro in `configure.in' to tell `automake' and the `configure' script
+where they are.
+
+   In this section, I describe the support files, so that you can know
+what they are and why they are there.
+
+`ABOUT-NLS'
+     Added by automake if you are using gettext.  This is a
+     documentation file about the gettext project.
+
+`ansi2knr.c'
+     Used by an automake generated `Makefile' if you put `ansi2knr' in
+     `AUTOMAKE_OPTIONS' in `Makefile.am'.  This permits compiling ANSI
+     C code with a K&R C compiler.
+
+`ansi2knr.1'
+     The man page which goes with `ansi2knr.c'.
+
+`config.guess'
+     A shell script which determines the configuration name for the
+     system on which it is run.
+
+`config.sub'
+     A shell script which canonicalizes a configuration name entered by
+     a user.
+
+`elisp-comp'
+     Used to compile Emacs LISP files.
+
+`install-sh'
+     A shell script which installs a program.  This is used if the
+     configure script can not find an install binary.
+
+`ltconfig'
+     Used by libtool.  This is a shell script which configures libtool
+     for the particular system on which it is used.
+
+`ltmain.sh'
+     Used by libtool.  This is the actual libtool script which is used,
+     after it is configured by `ltconfig' to build a library.
+
+`mdate-sh'
+     A shell script used by an automake generated `Makefile' to pretty
+     print the modification time of a file.  This is used to maintain
+     version numbers for texinfo files.
+
+`missing'
+     A shell script used if some tool is missing entirely.  This is
+     used by an automake generated `Makefile' to avoid certain sorts of
+     timestamp problems.
+
+`mkinstalldirs'
+     A shell script which creates a directory, including all parent
+     directories.  This is used by an automake generated `Makefile'
+     during installation.
+
+`texinfo.tex'
+     Required if you have any texinfo files.  This is used when
+     converting Texinfo files into DVI using `texi2dvi' and TeX.
+
+`ylwrap'
+     A shell script used by an automake generated `Makefile' to run
+     programs like `bison', `yacc', `flex', and `lex'.  These programs
+     default to producing output files with a fixed name, and the
+     `ylwrap' script runs them in a subdirectory to avoid file name
+     conflicts when using a parallel make program.
+
+
+File: configure.info,  Node: Configuration Names,  Next: Cross Compilation Tools,  Prev: Files,  Up: Top
+
+4 Configuration Names
+*********************
+
+The GNU configure system names all systems using a "configuration
+name".  All such names used to be triplets (they may now contain four
+parts in certain cases), and the term "configuration triplet" is still
+seen.
+
+* Menu:
+
+* Configuration Name Definition::	Configuration Name Definition.
+* Using Configuration Names::		Using Configuration Names.
+
+
+File: configure.info,  Node: Configuration Name Definition,  Next: Using Configuration Names,  Up: Configuration Names
+
+4.1 Configuration Name Definition
+=================================
+
+This is a string of the form CPU-MANUFACTURER-OPERATING_SYSTEM.  In
+some cases, this is extended to a four part form:
+CPU-MANUFACTURER-KERNEL-OPERATING_SYSTEM.
+
+   When using a configuration name in a configure option, it is normally
+not necessary to specify an entire name.  In particular, the
+MANUFACTURER field is often omitted, leading to strings such as
+`i386-linux' or `sparc-sunos'.  The shell script `config.sub' will
+translate these shortened strings into the canonical form.  autoconf
+will arrange for `config.sub' to be run automatically when it is needed.
+
+   The fields of a configuration name are as follows:
+
+CPU
+     The type of processor.  This is typically something like `i386' or
+     `sparc'.  More specific variants are used as well, such as
+     `mipsel' to indicate a little endian MIPS processor.
+
+MANUFACTURER
+     A somewhat freeform field which indicates the manufacturer of the
+     system.  This is often simply `unknown'.  Other common strings are
+     `pc' for an IBM PC compatible system, or the name of a workstation
+     vendor, such as `sun'.
+
+OPERATING_SYSTEM
+     The name of the operating system which is run on the system.  This
+     will be something like `solaris2.5' or `irix6.3'.  There is no
+     particular restriction on the version number, and strings like
+     `aix4.1.4.0' are seen.  For an embedded system, which has no
+     operating system, this field normally indicates the type of object
+     file format, such as `elf' or `coff'.
+
+KERNEL
+     This is used mainly for GNU/Linux.  A typical GNU/Linux
+     configuration name is `i586-pc-linux-gnulibc1'.  In this case the
+     kernel, `linux', is separated from the operating system,
+     `gnulibc1'.
+
+   The shell script `config.guess' will normally print the correct
+configuration name for the system on which it is run.  It does by
+running `uname' and by examining other characteristics of the system.
+
+   Because `config.guess' can normally determine the configuration name
+for a machine, it is normally only necessary to specify a configuration
+name when building a cross-compiler or when building using a
+cross-compiler.
+
+
+File: configure.info,  Node: Using Configuration Names,  Prev: Configuration Name Definition,  Up: Configuration Names
+
+4.2 Using Configuration Names
+=============================
+
+A configure script will sometimes have to make a decision based on a
+configuration name.  You will need to do this if you have to compile
+code differently based on something which can not be tested using a
+standard autoconf feature test.
+
+   It is normally better to test for particular features, rather than to
+test for a particular system.  This is because as Unix evolves,
+different systems copy features from one another.  Even if you need to
+determine whether the feature is supported based on a configuration
+name, you should define a macro which describes the feature, rather than
+defining a macro which describes the particular system you are on.
+
+   Testing for a particular system is normally done using a case
+statement in `configure.in'.  The case statement might look something
+like the following, assuming that `host' is a shell variable holding a
+canonical configuration name (which will be the case if `configure.in'
+uses the `AC_CANONICAL_HOST' or `AC_CANONICAL_SYSTEM' macro).
+
+     case "${host}" in
+     i[3-7]86-*-linux-gnu*) do something ;;
+     sparc*-sun-solaris2.[56789]*) do something ;;
+     sparc*-sun-solaris*) do something ;;
+     mips*-*-elf*) do something ;;
+     esac
+
+   It is particularly important to use `*' after the operating system
+field, in order to match the version number which will be generated by
+`config.guess'.
+
+   In most cases you must be careful to match a range of processor
+types.  For most processor families, a trailing `*' suffices, as in
+`mips*' above.  For the i386 family, something along the lines of
+`i[3-7]86' suffices at present.  For the m68k family, you will need
+something like `m68*'.  Of course, if you do not need to match on the
+processor, it is simpler to just replace the entire field by a `*', as
+in `*-*-irix*'.
+
+
+File: configure.info,  Node: Cross Compilation Tools,  Next: Canadian Cross,  Prev: Configuration Names,  Up: Top
+
+5 Cross Compilation Tools
+*************************
+
+The GNU configure and build system can be used to build "cross
+compilation" tools.  A cross compilation tool is a tool which runs on
+one system and produces code which runs on another system.
+
+* Menu:
+
+* Cross Compilation Concepts::		Cross Compilation Concepts.
+* Host and Target::			Host and Target.
+* Using the Host Type::			Using the Host Type.
+* Specifying the Target::       	Specifying the Target.
+* Using the Target Type::		Using the Target Type.
+* Cross Tools in the Cygnus Tree::	Cross Tools in the Cygnus Tree
+
+
+File: configure.info,  Node: Cross Compilation Concepts,  Next: Host and Target,  Up: Cross Compilation Tools
+
+5.1 Cross Compilation Concepts
+==============================
+
+A compiler which produces programs which run on a different system is a
+cross compilation compiler, or simply a "cross compiler".  Similarly,
+we speak of cross assemblers, cross linkers, etc.
+
+   In the normal case, a compiler produces code which runs on the same
+system as the one on which the compiler runs.  When it is necessary to
+distinguish this case from the cross compilation case, such a compiler
+is called a "native compiler".  Similarly, we speak of native
+assemblers, etc.
+
+   Although the debugger is not strictly speaking a compilation tool,
+it is nevertheless meaningful to speak of a cross debugger: a debugger
+which is used to debug code which runs on another system.  Everything
+that is said below about configuring cross compilation tools applies to
+the debugger as well.
+
+
+File: configure.info,  Node: Host and Target,  Next: Using the Host Type,  Prev: Cross Compilation Concepts,  Up: Cross Compilation Tools
+
+5.2 Host and Target
+===================
+
+When building cross compilation tools, there are two different systems
+involved: the system on which the tools will run, and the system for
+which the tools generate code.
+
+   The system on which the tools will run is called the "host" system.
+
+   The system for which the tools generate code is called the "target"
+system.
+
+   For example, suppose you have a compiler which runs on a GNU/Linux
+system and generates ELF programs for a MIPS embedded system.  In this
+case the GNU/Linux system is the host, and the MIPS ELF system is the
+target.  Such a compiler could be called a GNU/Linux cross MIPS ELF
+compiler, or, equivalently, a `i386-linux-gnu' cross `mips-elf'
+compiler.
+
+   Naturally, most programs are not cross compilation tools.  For those
+programs, it does not make sense to speak of a target.  It only makes
+sense to speak of a target for tools like `gcc' or the `binutils' which
+actually produce running code.  For example, it does not make sense to
+speak of the target of a tool like `bison' or `make'.
+
+   Most cross compilation tools can also serve as native tools.  For a
+native compilation tool, it is still meaningful to speak of a target.
+For a native tool, the target is the same as the host.  For example, for
+a GNU/Linux native compiler, the host is GNU/Linux, and the target is
+also GNU/Linux.
+
+
+File: configure.info,  Node: Using the Host Type,  Next: Specifying the Target,  Prev: Host and Target,  Up: Cross Compilation Tools
+
+5.3 Using the Host Type
+=======================
+
+In almost all cases the host system is the system on which you run the
+`configure' script, and on which you build the tools (for the case when
+they differ, *note Canadian Cross::).
+
+   If your configure script needs to know the configuration name of the
+host system, and the package is not a cross compilation tool and
+therefore does not have a target, put `AC_CANONICAL_HOST' in
+`configure.in'.  This macro will arrange to define a few shell
+variables when the `configure' script is run.
+
+`host'
+     The canonical configuration name of the host.  This will normally
+     be determined by running the `config.guess' shell script, although
+     the user is permitted to override this by using an explicit
+     `--host' option.
+
+`host_alias'
+     In the unusual case that the user used an explicit `--host' option,
+     this will be the argument to `--host'.  In the normal case, this
+     will be the same as the `host' variable.
+
+`host_cpu'
+`host_vendor'
+`host_os'
+     The first three parts of the canonical configuration name.
+
+   The shell variables may be used by putting shell code in
+`configure.in'.  For an example, see *Note Using Configuration Names::.
+
+
+File: configure.info,  Node: Specifying the Target,  Next: Using the Target Type,  Prev: Using the Host Type,  Up: Cross Compilation Tools
+
+5.4 Specifying the Target
+=========================
+
+By default, the `configure' script will assume that the target is the
+same as the host.  This is the more common case; for example, it leads
+to a native compiler rather than a cross compiler.
+
+   If you want to build a cross compilation tool, you must specify the
+target explicitly by using the `--target' option when you run
+`configure'.  The argument to `--target' is the configuration name of
+the system for which you wish to generate code.  *Note Configuration
+Names::.
+
+   For example, to build tools which generate code for a MIPS ELF
+embedded system, you would use `--target mips-elf'.
+
+
+File: configure.info,  Node: Using the Target Type,  Next: Cross Tools in the Cygnus Tree,  Prev: Specifying the Target,  Up: Cross Compilation Tools
+
+5.5 Using the Target Type
+=========================
+
+When writing `configure.in' for a cross compilation tool, you will need
+to use information about the target.  To do this, put
+`AC_CANONICAL_SYSTEM' in `configure.in'.
+
+   `AC_CANONICAL_SYSTEM' will look for a `--target' option and
+canonicalize it using the `config.sub' shell script.  It will also run
+`AC_CANONICAL_HOST' (*note Using the Host Type::).
+
+   The target type will be recorded in the following shell variables.
+Note that the host versions of these variables will also be defined by
+`AC_CANONICAL_HOST'.
+
+`target'
+     The canonical configuration name of the target.
+
+`target_alias'
+     The argument to the `--target' option.  If the user did not specify
+     a `--target' option, this will be the same as `host_alias'.
+
+`target_cpu'
+`target_vendor'
+`target_os'
+     The first three parts of the canonical target configuration name.
+
+   Note that if `host' and `target' are the same string, you can assume
+a native configuration.  If they are different, you can assume a cross
+configuration.
+
+   It is arguably possible for `host' and `target' to represent the
+same system, but for the strings to not be identical.  For example, if
+`config.guess' returns `sparc-sun-sunos4.1.4', and somebody configures
+with `--target sparc-sun-sunos4.1', then the slight differences between
+the two versions of SunOS may be unimportant for your tool.  However,
+in the general case it can be quite difficult to determine whether the
+differences between two configuration names are significant or not.
+Therefore, by convention, if the user specifies a `--target' option
+without specifying a `--host' option, it is assumed that the user wants
+to configure a cross compilation tool.
+
+   The variables `target' and `target_alias' should be handled
+differently.
+
+   In general, whenever the user may actually see a string,
+`target_alias' should be used.  This includes anything which may appear
+in the file system, such as a directory name or part of a tool name.
+It also includes any tool output, unless it is clearly labelled as the
+canonical target configuration name.  This permits the user to use the
+`--target' option to specify how the tool will appear to the outside
+world.
+
+   On the other hand, when checking for characteristics of the target
+system, `target' should be used.  This is because a wide variety of
+`--target' options may map into the same canonical configuration name.
+You should not attempt to duplicate the canonicalization done by
+`config.sub' in your own code.
+
+   By convention, cross tools are installed with a prefix of the
+argument used with the `--target' option, also known as `target_alias'
+(*note Using the Target Type::).  If the user does not use the
+`--target' option, and thus is building a native tool, no prefix is
+used.
+
+   For example, if gcc is configured with `--target mips-elf', then the
+installed binary will be named `mips-elf-gcc'.  If gcc is configured
+without a `--target' option, then the installed binary will be named
+`gcc'.
+
+   The autoconf macro `AC_ARG_PROGRAM' will handle this for you.  If
+you are using automake, no more need be done; the programs will
+automatically be installed with the correct prefixes.  Otherwise, see
+the autoconf documentation for `AC_ARG_PROGRAM'.
+
+
+File: configure.info,  Node: Cross Tools in the Cygnus Tree,  Prev: Using the Target Type,  Up: Cross Compilation Tools
+
+5.6 Cross Tools in the Cygnus Tree
+==================================
+
+The Cygnus tree is used for various packages including gdb, the GNU
+binutils, and egcs.  It is also, of course, used for Cygnus releases.
+
+   In the Cygnus tree, the top level `configure' script uses the old
+Cygnus configure system, not autoconf.  The top level `Makefile.in' is
+written to build packages based on what is in the source tree, and
+supports building a large number of tools in a single
+`configure'/`make' step.
+
+   The Cygnus tree may be configured with a `--target' option.  The
+`--target' option applies recursively to every subdirectory, and
+permits building an entire set of cross tools at once.
+
+* Menu:
+
+* Host and Target Libraries::		Host and Target Libraries.
+* Target Library Configure Scripts::	Target Library Configure Scripts.
+* Make Targets in Cygnus Tree::         Make Targets in Cygnus Tree.
+* Target libiberty::			Target libiberty
+
+
+File: configure.info,  Node: Host and Target Libraries,  Next: Target Library Configure Scripts,  Up: Cross Tools in the Cygnus Tree
+
+5.6.1 Host and Target Libraries
+-------------------------------
+
+The Cygnus tree distinguishes host libraries from target libraries.
+
+   Host libraries are built with the compiler used to build the programs
+which run on the host, which is called the host compiler.  This includes
+libraries such as `bfd' and `tcl'.  These libraries are built with the
+host compiler, and are linked into programs like the binutils or gcc
+which run on the host.
+
+   Target libraries are built with the target compiler.  If gcc is
+present in the source tree, then the target compiler is the gcc that is
+built using the host compiler.  Target libraries are libraries such as
+`newlib' and `libstdc++'.  These libraries are not linked into the host
+programs, but are instead made available for use with programs built
+with the target compiler.
+
+   For the rest of this section, assume that gcc is present in the
+source tree, so that it will be used to build the target libraries.
+
+   There is a complication here.  The configure process needs to know
+which compiler you are going to use to build a tool; otherwise, the
+feature tests will not work correctly.  The Cygnus tree handles this by
+not configuring the target libraries until the target compiler is
+built.  In order to permit everything to build using a single
+`configure'/`make', the configuration of the target libraries is
+actually triggered during the make step.
+
+   When the target libraries are configured, the `--target' option is
+not used.  Instead, the `--host' option is used with the argument of
+the `--target' option for the overall configuration.  If no `--target'
+option was used for the overall configuration, the `--host' option will
+be passed with the output of the `config.guess' shell script.  Any
+`--build' option is passed down unchanged.
+
+   This translation of configuration options is done because since the
+target libraries are compiled with the target compiler, they are being
+built in order to run on the target of the overall configuration.  By
+the definition of host, this means that their host system is the same as
+the target system of the overall configuration.
+
+   The same process is used for both a native configuration and a cross
+configuration.  Even when using a native configuration, the target
+libraries will be configured and built using the newly built compiler.
+This is particularly important for the C++ libraries, since there is no
+reason to assume that the C++ compiler used to build the host tools (if
+there even is one) uses the same ABI as the g++ compiler which will be
+used to build the target libraries.
+
+   There is one difference between a native configuration and a cross
+configuration.  In a native configuration, the target libraries are
+normally configured and built as siblings of the host tools.  In a cross
+configuration, the target libraries are normally built in a subdirectory
+whose name is the argument to `--target'.  This is mainly for
+historical reasons.
+
+   To summarize, running `configure' in the Cygnus tree configures all
+the host libraries and tools, but does not configure any of the target
+libraries.  Running `make' then does the following steps:
+
+   * Build the host libraries.
+
+   * Build the host programs, including gcc.  Note that we call gcc
+     both a host program (since it runs on the host) and a target
+     compiler (since it generates code for the target).
+
+   * Using the newly built target compiler, configure the target
+     libraries.
+
+   * Build the target libraries.
+
+   The steps need not be done in precisely this order, since they are
+actually controlled by `Makefile' targets.
+
+
+File: configure.info,  Node: Target Library Configure Scripts,  Next: Make Targets in Cygnus Tree,  Prev: Host and Target Libraries,  Up: Cross Tools in the Cygnus Tree
+
+5.6.2 Target Library Configure Scripts
+--------------------------------------
+
+There are a few things you must know in order to write a configure
+script for a target library.  This is just a quick sketch, and beginners
+shouldn't worry if they don't follow everything here.
+
+   The target libraries are configured and built using a newly built
+target compiler.  There may not be any startup files or libraries for
+this target compiler.  In fact, those files will probably be built as
+part of some target library, which naturally means that they will not
+exist when your target library is configured.
+
+   This means that the configure script for a target library may not use
+any test which requires doing a link.  This unfortunately includes many
+useful autoconf macros, such as `AC_CHECK_FUNCS'.  autoconf macros
+which do a compile but not a link, such as `AC_CHECK_HEADERS', may be
+used.
+
+   This is a severe restriction, but normally not a fatal one, as target
+libraries can often assume the presence of other target libraries, and
+thus know which functions will be available.
+
+   As of this writing, the autoconf macro `AC_PROG_CC' does a link to
+make sure that the compiler works.  This may fail in a target library,
+so target libraries must use a different set of macros to locate the
+compiler.  See the `configure.in' file in a directory like `libiberty'
+or `libgloss' for an example.
+
+   As noted in the previous section, target libraries are sometimes
+built in directories which are siblings to the host tools, and are
+sometimes built in a subdirectory.  The `--with-target-subdir' configure
+option will be passed when the library is configured.  Its value will be
+an empty string if the target library is a sibling.  Its value will be
+the name of the subdirectory if the target library is in a subdirectory.
+
+   If the overall build is not a native build (i.e., the overall
+configure used the `--target' option), then the library will be
+configured with the `--with-cross-host' option.  The value of this
+option will be the host system of the overall build.  Recall that the
+host system of the library will be the target of the overall build.  If
+the overall build is a native build, the `--with-cross-host' option
+will not be used.
+
+   A library which can be built both standalone and as a target library
+may want to install itself into different directories depending upon the
+case.  When built standalone, or when built native, the library should
+be installed in `$(libdir)'.  When built as a target library which is
+not native, the library should be installed in `$(tooldir)/lib'.  The
+`--with-cross-host' option may be used to distinguish these cases.
+
+   This same test of `--with-cross-host' may be used to see whether it
+is OK to use link tests in the configure script.  If the
+`--with-cross-host' option is not used, then the library is being built
+either standalone or native, and a link should work.
+
+
+File: configure.info,  Node: Make Targets in Cygnus Tree,  Next: Target libiberty,  Prev: Target Library Configure Scripts,  Up: Cross Tools in the Cygnus Tree
+
+5.6.3 Make Targets in Cygnus Tree
+---------------------------------
+
+The top level `Makefile' in the Cygnus tree defines targets for every
+known subdirectory.
+
+   For every subdirectory DIR which holds a host library or program,
+the `Makefile' target `all-DIR' will build that library or program.
+
+   There are dependencies among host tools.  For example, building gcc
+requires first building gas, because the gcc build process invokes the
+target assembler.  These dependencies are reflected in the top level
+`Makefile'.
+
+   For every subdirectory DIR which holds a target library, the
+`Makefile' target `configure-target-DIR' will configure that library.
+The `Makefile' target `all-target-DIR' will build that library.
+
+   Every `configure-target-DIR' target depends upon `all-gcc', since
+gcc, the target compiler, is required to configure the tool.  Every
+`all-target-DIR' target depends upon the corresponding
+`configure-target-DIR' target.
+
+   There are several other targets which may be of interest for each
+directory: `install-DIR', `clean-DIR', and `check-DIR'.  There are also
+corresponding `target' versions of these for the target libraries ,
+such as `install-target-DIR'.
+
+
+File: configure.info,  Node: Target libiberty,  Prev: Make Targets in Cygnus Tree,  Up: Cross Tools in the Cygnus Tree
+
+5.6.4 Target libiberty
+----------------------
+
+The `libiberty' subdirectory is currently a special case, in that it is
+the only directory which is built both using the host compiler and
+using the target compiler.
+
+   This is because the files in `libiberty' are used when building the
+host tools, and they are also incorporated into the `libstdc++' target
+library as support code.
+
+   This duality does not pose any particular difficulties.  It means
+that there are targets for both `all-libiberty' and
+`all-target-libiberty'.
+
+   In a native configuration, when target libraries are not built in a
+subdirectory, the same objects are normally used as both the host build
+and the target build.  This is normally OK, since libiberty contains
+only C code, and in a native configuration the results of the host
+compiler and the target compiler are normally interoperable.
+
+   Irix 6 is again an exception here, since the SGI native compiler
+defaults to using the `O32' ABI, and gcc defaults to using the `N32'
+ABI.  On Irix 6, the target libraries are built in a subdirectory even
+for a native configuration, avoiding this problem.
+
+   There are currently no other libraries built for both the host and
+the target, but there is no conceptual problem with adding more.
+
+
+File: configure.info,  Node: Canadian Cross,  Next: Cygnus Configure,  Prev: Cross Compilation Tools,  Up: Top
+
+6 Canadian Cross
+****************
+
+It is possible to use the GNU configure and build system to build a
+program which will run on a system which is different from the system on
+which the tools are built.  In other words, it is possible to build
+programs using a cross compiler.
+
+   This is referred to as a "Canadian Cross".
+
+* Menu:
+
+* Canadian Cross Example::		Canadian Cross Example.
+* Canadian Cross Concepts::		Canadian Cross Concepts.
+* Build Cross Host Tools::		Build Cross Host Tools.
+* Build and Host Options::		Build and Host Options.
+* CCross not in Cygnus Tree::		Canadian Cross not in Cygnus Tree.
+* CCross in Cygnus Tree::		Canadian Cross in Cygnus Tree.
+* Supporting Canadian Cross::		Supporting Canadian Cross.
+
+
+File: configure.info,  Node: Canadian Cross Example,  Next: Canadian Cross Concepts,  Up: Canadian Cross
+
+6.1 Canadian Cross Example
+==========================
+
+Here is an example of a Canadian Cross.
+
+   While running on a GNU/Linux, you can build a program which will run
+on a Solaris system.  You would use a GNU/Linux cross Solaris compiler
+to build the program.
+
+   Of course, you could not run the resulting program on your GNU/Linux
+system.  You would have to copy it over to a Solaris system before you
+would run it.
+
+   Of course, you could also simply build the programs on the Solaris
+system in the first place.  However, perhaps the Solaris system is not
+available for some reason; perhaps you actually don't have one, but you
+want to build the tools for somebody else to use.  Or perhaps your
+GNU/Linux system is much faster than your Solaris system.
+
+   A Canadian Cross build is most frequently used when building
+programs to run on a non-Unix system, such as DOS or Windows.  It may
+be simpler to configure and build on a Unix system than to support the
+configuration machinery on a non-Unix system.
+
+
+File: configure.info,  Node: Canadian Cross Concepts,  Next: Build Cross Host Tools,  Prev: Canadian Cross Example,  Up: Canadian Cross
+
+6.2 Canadian Cross Concepts
+===========================
+
+When building a Canadian Cross, there are at least two different systems
+involved: the system on which the tools are being built, and the system
+on which the tools will run.
+
+   The system on which the tools are being built is called the "build"
+system.
+
+   The system on which the tools will run is called the host system.
+
+   For example, if you are building a Solaris program on a GNU/Linux
+system, as in the previous section, the build system would be GNU/Linux,
+and the host system would be Solaris.
+
+   It is, of course, possible to build a cross compiler using a Canadian
+Cross (i.e., build a cross compiler using a cross compiler).  In this
+case, the system for which the resulting cross compiler generates code
+is called the target system.  (For a more complete discussion of host
+and target systems, *note Host and Target::).
+
+   An example of building a cross compiler using a Canadian Cross would
+be building a Windows cross MIPS ELF compiler on a GNU/Linux system.  In
+this case the build system would be GNU/Linux, the host system would be
+Windows, and the target system would be MIPS ELF.
+
+   The name Canadian Cross comes from the case when the build, host, and
+target systems are all different.  At the time that these issues were
+all being hashed out, Canada had three national political parties.
+
+
+File: configure.info,  Node: Build Cross Host Tools,  Next: Build and Host Options,  Prev: Canadian Cross Concepts,  Up: Canadian Cross
+
+6.3 Build Cross Host Tools
+==========================
+
+In order to configure a program for a Canadian Cross build, you must
+first build and install the set of cross tools you will use to build the
+program.
+
+   These tools will be build cross host tools.  That is, they will run
+on the build system, and will produce code that runs on the host system.
+
+   It is easy to confuse the meaning of build and host here.  Always
+remember that the build system is where you are doing the build, and the
+host system is where the resulting program will run.  Therefore, you
+need a build cross host compiler.
+
+   In general, you must have a complete cross environment in order to do
+the build.  This normally means a cross compiler, cross assembler, and
+so forth, as well as libraries and include files for the host system.
+
+
+File: configure.info,  Node: Build and Host Options,  Next: CCross not in Cygnus Tree,  Prev: Build Cross Host Tools,  Up: Canadian Cross
+
+6.4 Build and Host Options
+==========================
+
+When you run `configure', you must use both the `--build' and `--host'
+options.
+
+   The `--build' option is used to specify the configuration name of
+the build system.  This can normally be the result of running the
+`config.guess' shell script, and it is reasonable to use
+`--build=`config.guess`'.
+
+   The `--host' option is used to specify the configuration name of the
+host system.
+
+   As we explained earlier, `config.guess' is used to set the default
+value for the `--host' option (*note Using the Host Type::).  We can
+now see that since `config.guess' returns the type of system on which
+it is run, it really identifies the build system.  Since the host
+system is normally the same as the build system (i.e., people do not
+normally build using a cross compiler), it is reasonable to use the
+result of `config.guess' as the default for the host system when the
+`--host' option is not used.
+
+   It might seem that if the `--host' option were used without the
+`--build' option that the configure script could run `config.guess' to
+determine the build system, and presume a Canadian Cross if the result
+of `config.guess' differed from the `--host' option.  However, for
+historical reasons, some configure scripts are routinely run using an
+explicit `--host' option, rather than using the default from
+`config.guess'.  As noted earlier, it is difficult or impossible to
+reliably compare configuration names (*note Using the Target Type::).
+Therefore, by convention, if the `--host' option is used, but the
+`--build' option is not used, then the build system defaults to the
+host system.
+
+
+File: configure.info,  Node: CCross not in Cygnus Tree,  Next: CCross in Cygnus Tree,  Prev: Build and Host Options,  Up: Canadian Cross
+
+6.5 Canadian Cross not in Cygnus Tree.
+======================================
+
+If you are not using the Cygnus tree, you must explicitly specify the
+cross tools which you want to use to build the program.  This is done by
+setting environment variables before running the `configure' script.
+
+   You must normally set at least the environment variables `CC', `AR',
+and `RANLIB' to the cross tools which you want to use to build.
+
+   For some programs, you must set additional cross tools as well, such
+as `AS', `LD', or `NM'.
+
+   You would set these environment variables to the build cross tools
+which you are going to use.
+
+   For example, if you are building a Solaris program on a GNU/Linux
+system, and your GNU/Linux cross Solaris compiler were named
+`solaris-gcc', then you would set the environment variable `CC' to
+`solaris-gcc'.
+
+
+File: configure.info,  Node: CCross in Cygnus Tree,  Next: Supporting Canadian Cross,  Prev: CCross not in Cygnus Tree,  Up: Canadian Cross
+
+6.6 Canadian Cross in Cygnus Tree
+=================================
+
+This section describes configuring and building a Canadian Cross when
+using the Cygnus tree.
+
+* Menu:
+
+* Standard Cygnus CCross::	Building a Normal Program.
+* Cross Cygnus CCross::		Building a Cross Program.
+
+
+File: configure.info,  Node: Standard Cygnus CCross,  Next: Cross Cygnus CCross,  Up: CCross in Cygnus Tree
+
+6.6.1 Building a Normal Program
+-------------------------------
+
+When configuring a Canadian Cross in the Cygnus tree, all the
+appropriate environment variables are automatically set to `HOST-TOOL',
+where HOST is the value used for the `--host' option, and TOOL is the
+name of the tool (e.g., `gcc', `as', etc.).  These tools must be on
+your `PATH'.
+
+   Adding a prefix of HOST will give the usual name for the build cross
+host tools.  To see this, consider that when these cross tools were
+built, they were configured to run on the build system and to produce
+code for the host system.  That is, they were configured with a
+`--target' option that is the same as the system which we are now
+calling the host.  Recall that the default name for installed cross
+tools uses the target system as a prefix (*note Using the Target
+Type::).  Since that is the system which we are now calling the host,
+HOST is the right prefix to use.
+
+   For example, if you configure with `--build=i386-linux-gnu' and
+`--host=solaris', then the Cygnus tree will automatically default to
+using the compiler `solaris-gcc'.  You must have previously built and
+installed this compiler, probably by doing a build with no `--host'
+option and with a `--target' option of `solaris'.
+
+
+File: configure.info,  Node: Cross Cygnus CCross,  Prev: Standard Cygnus CCross,  Up: CCross in Cygnus Tree
+
+6.6.2 Building a Cross Program
+------------------------------
+
+There are additional considerations if you want to build a cross
+compiler, rather than a native compiler, in the Cygnus tree using a
+Canadian Cross.
+
+   When you build a cross compiler using the Cygnus tree, then the
+target libraries will normally be built with the newly built target
+compiler (*note Host and Target Libraries::).  However, this will not
+work when building with a Canadian Cross.  This is because the newly
+built target compiler will be a program which runs on the host system,
+and therefore will not be able to run on the build system.
+
+   Therefore, when building a cross compiler with the Cygnus tree, you
+must first install a set of build cross target tools.  These tools will
+be used when building the target libraries.
+
+   Note that this is not a requirement of a Canadian Cross in general.
+For example, it would be possible to build just the host cross target
+tools on the build system, to copy the tools to the host system, and to
+build the target libraries on the host system.  The requirement for
+build cross target tools is imposed by the Cygnus tree, which expects
+to be able to build both host programs and target libraries in a single
+`configure'/`make' step.  Because it builds these in a single step, it
+expects to be able to build the target libraries on the build system,
+which means that it must use a build cross target toolchain.
+
+   For example, suppose you want to build a Windows cross MIPS ELF
+compiler on a GNU/Linux system.  You must have previously installed
+both a GNU/Linux cross Windows compiler and a GNU/Linux cross MIPS ELF
+compiler.
+
+   In order to build the Windows (configuration name `i386-cygwin32')
+cross MIPS ELF (configure name `mips-elf') compiler, you might execute
+the following commands (long command lines are broken across lines with
+a trailing backslash as a continuation character).
+
+     mkdir linux-x-cygwin32
+     cd linux-x-cygwin32
+     SRCDIR/configure --target i386-cygwin32 --prefix=INSTALLDIR \
+       --exec-prefix=INSTALLDIR/H-i386-linux
+     make
+     make install
+     cd ..
+     mkdir linux-x-mips-elf
+     cd linux-x-mips-elf
+     SRCDIR/configure --target mips-elf --prefix=INSTALLDIR \
+       --exec-prefix=INSTALLDIR/H-i386-linux
+     make
+     make install
+     cd ..
+     mkdir cygwin32-x-mips-elf
+     cd cygwin32-x-mips-elf
+     SRCDIR/configure --build=i386-linux-gnu --host=i386-cygwin32 \
+       --target=mips-elf --prefix=WININSTALLDIR \
+       --exec-prefix=WININSTALLDIR/H-i386-cygwin32
+     make
+     make install
+
+   You would then copy the contents of WININSTALLDIR over to the
+Windows machine, and run the resulting programs.
+
+
+File: configure.info,  Node: Supporting Canadian Cross,  Prev: CCross in Cygnus Tree,  Up: Canadian Cross
+
+6.7 Supporting Canadian Cross
+=============================
+
+If you want to make it possible to build a program you are developing
+using a Canadian Cross, you must take some care when writing your
+configure and make rules.  Simple cases will normally work correctly.
+However, it is not hard to write configure and make tests which will
+fail in a Canadian Cross.
+
+* Menu:
+
+* CCross in Configure::		Supporting Canadian Cross in Configure Scripts.
+* CCross in Make::		Supporting Canadian Cross in Makefiles.
+
+
+File: configure.info,  Node: CCross in Configure,  Next: CCross in Make,  Up: Supporting Canadian Cross
+
+6.7.1 Supporting Canadian Cross in Configure Scripts
+----------------------------------------------------
+
+In a `configure.in' file, after calling `AC_PROG_CC', you can find out
+whether this is a Canadian Cross configure by examining the shell
+variable `cross_compiling'.  In a Canadian Cross, which means that the
+compiler is a cross compiler, `cross_compiling' will be `yes'.  In a
+normal configuration, `cross_compiling' will be `no'.
+
+   You ordinarily do not need to know the type of the build system in a
+configure script.  However, if you do need that information, you can get
+it by using the macro `AC_CANONICAL_SYSTEM', the same macro that is
+used to determine the target system.  This macro will set the variables
+`build', `build_alias', `build_cpu', `build_vendor', and `build_os',
+which correspond to the similar `target' and `host' variables, except
+that they describe the build system.
+
+   When writing tests in `configure.in', you must remember that you
+want to test the host environment, not the build environment.
+
+   Macros like `AC_CHECK_FUNCS' which use the compiler will test the
+host environment.  That is because the tests will be done by running the
+compiler, which is actually a build cross host compiler.  If the
+compiler can find the function, that means that the function is present
+in the host environment.
+
+   Tests like `test -f /dev/ptyp0', on the other hand, will test the
+build environment.  Remember that the configure script is running on the
+build system, not the host system.  If your configure scripts examines
+files, those files will be on the build system.  Whatever you determine
+based on those files may or may not be the case on the host system.
+
+   Most autoconf macros will work correctly for a Canadian Cross.  The
+main exception is `AC_TRY_RUN'.  This macro tries to compile and run a
+test program.  This will fail in a Canadian Cross, because the program
+will be compiled for the host system, which means that it will not run
+on the build system.
+
+   The `AC_TRY_RUN' macro provides an optional argument to tell the
+configure script what to do in a Canadian Cross.  If that argument is
+not present, you will get a warning when you run `autoconf':
+     warning: AC_TRY_RUN called without default to allow cross compiling
+   This tells you that the resulting `configure' script will not work
+with a Canadian Cross.
+
+   In some cases while it may better to perform a test at configure
+time, it is also possible to perform the test at run time.  In such a
+case you can use the cross compiling argument to `AC_TRY_RUN' to tell
+your program that the test could not be performed at configure time.
+
+   There are a few other autoconf macros which will not work correctly
+with a Canadian Cross: a partial list is `AC_FUNC_GETPGRP',
+`AC_FUNC_SETPGRP', `AC_FUNC_SETVBUF_REVERSED', and
+`AC_SYS_RESTARTABLE_SYSCALLS'.  The `AC_CHECK_SIZEOF' macro is
+generally not very useful with a Canadian Cross; it permits an optional
+argument indicating the default size, but there is no way to know what
+the correct default should be.
+
+
+File: configure.info,  Node: CCross in Make,  Prev: CCross in Configure,  Up: Supporting Canadian Cross
+
+6.7.2 Supporting Canadian Cross in Makefiles.
+---------------------------------------------
+
+The main Canadian Cross issue in a `Makefile' arises when you want to
+use a subsidiary program to generate code or data which you will then
+include in your real program.
+
+   If you compile this subsidiary program using `$(CC)' in the usual
+way, you will not be able to run it.  This is because `$(CC)' will
+build a program for the host system, but the program is being built on
+the build system.
+
+   You must instead use a compiler for the build system, rather than the
+host system.  In the Cygnus tree, this make variable `$(CC_FOR_BUILD)'
+will hold a compiler for the build system.
+
+   Note that you should not include `config.h' in a file you are
+compiling with `$(CC_FOR_BUILD)'.  The `configure' script will build
+`config.h' with information for the host system.  However, you are
+compiling the file using a compiler for the build system (a native
+compiler).  Subsidiary programs are normally simple filters which do no
+user interaction, and it is normally possible to write them in a highly
+portable fashion so that the absence of `config.h' is not crucial.
+
+   The gcc `Makefile.in' shows a complex situation in which certain
+files, such as `rtl.c', must be compiled into both subsidiary programs
+run on the build system and into the final program.  This approach may
+be of interest for advanced build system hackers.  Note that the build
+system compiler is rather confusingly called `HOST_CC'.
+
+
+File: configure.info,  Node: Cygnus Configure,  Next: Multilibs,  Prev: Canadian Cross,  Up: Top
+
+7 Cygnus Configure
+******************
+
+The Cygnus configure script predates autoconf.  All of its interesting
+features have been incorporated into autoconf.  No new programs should
+be written to use the Cygnus configure script.
+
+   However, the Cygnus configure script is still used in a few places:
+at the top of the Cygnus tree and in a few target libraries in the
+Cygnus tree.  Until those uses have been replaced with autoconf, some
+brief notes are appropriate here.  This is not complete documentation,
+but it should be possible to use this as a guide while examining the
+scripts themselves.
+
+* Menu:
+
+* Cygnus Configure Basics::		Cygnus Configure Basics.
+* Cygnus Configure in C++ Libraries::	Cygnus Configure in C++ Libraries.
+
+
+File: configure.info,  Node: Cygnus Configure Basics,  Next: Cygnus Configure in C++ Libraries,  Up: Cygnus Configure
+
+7.1 Cygnus Configure Basics
+===========================
+
+Cygnus configure does not use any generated files; there is no program
+corresponding to `autoconf'.  Instead, there is a single shell script
+named `configure' which may be found at the top of the Cygnus tree.
+This shell script was written by hand; it was not generated by
+autoconf, and it is incorrect, and indeed harmful, to run `autoconf' in
+the top level of a Cygnus tree.
+
+   Cygnus configure works in a particular directory by examining the
+file `configure.in' in that directory.  That file is broken into four
+separate shell scripts.
+
+   The first is the contents of `configure.in' up to a line that starts
+with `# per-host:'.  This is the common part.
+
+   The second is the rest of `configure.in' up to a line that starts
+with `# per-target:'.  This is the per host part.
+
+   The third is the rest of `configure.in' up to a line that starts
+with `# post-target:'.  This is the per target part.
+
+   The fourth is the remainder of `configure.in'.  This is the post
+target part.
+
+   If any of these comment lines are missing, the corresponding shell
+script is empty.
+
+   Cygnus configure will first execute the common part.  This must set
+the shell variable `srctrigger' to the name of a source file, to
+confirm that Cygnus configure is looking at the right directory.  This
+may set the shell variables `package_makefile_frag' and
+`package_makefile_rules_frag'.
+
+   Cygnus configure will next set the `build' and `host' shell
+variables, and execute the per host part.  This may set the shell
+variable `host_makefile_frag'.
+
+   Cygnus configure will next set the `target' variable, and execute
+the per target part.  This may set the shell variable
+`target_makefile_frag'.
+
+   Any of these scripts may set the `subdirs' shell variable.  This
+variable is a list of subdirectories where a `Makefile.in' file may be
+found.  Cygnus configure will automatically look for a `Makefile.in'
+file in the current directory.  The `subdirs' shell variable is not
+normally used, and I believe that the only directory which uses it at
+present is `newlib'.
+
+   For each `Makefile.in', Cygnus configure will automatically create a
+`Makefile' by adding definitions for `make' variables such as `host'
+and `target', and automatically editing the values of `make' variables
+such as `prefix' if they are present.
+
+   Also, if any of the `makefile_frag' shell variables are set, Cygnus
+configure will interpret them as file names relative to either the
+working directory or the source directory, and will read the contents of
+the file into the generated `Makefile'.  The file contents will be read
+in after the first line in `Makefile.in' which starts with `####'.
+
+   These `Makefile' fragments are used to customize behaviour for a
+particular host or target.  They serve to select particular files to
+compile, and to define particular preprocessor macros by providing
+values for `make' variables which are then used during compilation.
+Cygnus configure, unlike autoconf, normally does not do feature tests,
+and normally requires support to be added manually for each new host.
+
+   The `Makefile' fragment support is similar to the autoconf
+`AC_SUBST_FILE' macro.
+
+   After creating each `Makefile', the post target script will be run
+(i.e., it may be run several times).  This script may further customize
+the `Makefile'.  When it is run, the shell variable `Makefile' will
+hold the name of the `Makefile', including the appropriate directory
+component.
+
+   Like an autoconf generated `configure' script, Cygnus configure will
+create a file named `config.status' which, when run, will automatically
+recreate the configuration.  The `config.status' file will simply
+execute the Cygnus configure script again with the appropriate
+arguments.
+
+   Any of the parts of `configure.in' may set the shell variables
+`files' and `links'.  Cygnus configure will set up symlinks from the
+names in `links' to the files named in `files'.  This is similar to the
+autoconf `AC_LINK_FILES' macro.
+
+   Finally, any of the parts of `configure.in' may set the shell
+variable `configdirs' to a set of subdirectories.  If it is set, Cygnus
+configure will recursively run the configure process in each
+subdirectory.  If the subdirectory uses Cygnus configure, it will
+contain a `configure.in' file but no `configure' file, in which case
+Cygnus configure will invoke itself recursively.  If the subdirectory
+has a `configure' file, Cygnus configure assumes that it is an autoconf
+generated `configure' script, and simply invokes it directly.
+
+
+File: configure.info,  Node: Cygnus Configure in C++ Libraries,  Prev: Cygnus Configure Basics,  Up: Cygnus Configure
+
+7.2 Cygnus Configure in C++ Libraries
+=====================================
+
+The C++ library configure system, written by Per Bothner, deserves
+special mention.  It uses Cygnus configure, but it does feature testing
+like that done by autoconf generated `configure' scripts.  This
+approach is used in the libraries `libio', `libstdc++', and `libg++'.
+
+   Most of the `Makefile' information is written out by the shell
+script `libio/config.shared'.  Each `configure.in' file sets certain
+shell variables, and then invokes `config.shared' to create two package
+`Makefile' fragments.  These fragments are then incorporated into the
+resulting `Makefile' by the Cygnus configure script.
+
+   The file `_G_config.h' is created in the `libio' object directory by
+running the shell script `libio/gen-params'.  This shell script uses
+feature tests to define macros and typedefs in `_G_config.h'.
+
+
+File: configure.info,  Node: Multilibs,  Next: FAQ,  Prev: Cygnus Configure,  Up: Top
+
+8 Multilibs
+***********
+
+For some targets gcc may have different processor requirements depending
+upon command line options.  An obvious example is the `-msoft-float'
+option supported on several processors.  This option means that the
+floating point registers are not available, which means that floating
+point operations must be done by calling an emulation subroutine rather
+than by using machine instructions.
+
+   For such options, gcc is often configured to compile target libraries
+twice: once with `-msoft-float' and once without.  When gcc compiles
+target libraries more than once, the resulting libraries are called
+"multilibs".
+
+   Multilibs are not really part of the GNU configure and build system,
+but we discuss them here since they require support in the `configure'
+scripts and `Makefile's used for target libraries.
+
+* Menu:
+
+* Multilibs in gcc::		        Multilibs in gcc.
+* Multilibs in Target Libraries::	Multilibs in Target Libraries.
+
+
+File: configure.info,  Node: Multilibs in gcc,  Next: Multilibs in Target Libraries,  Up: Multilibs
+
+8.1 Multilibs in gcc
+====================
+
+In gcc, multilibs are defined by setting the variable
+`MULTILIB_OPTIONS' in the target `Makefile' fragment.  Several other
+`MULTILIB' variables may also be defined there.  *Note The Target
+Makefile Fragment: (gcc)Target Fragment.
+
+   If you have built gcc, you can see what multilibs it uses by running
+it with the `-print-multi-lib' option.  The output `.;' means that no
+multilibs are used.  In general, the output is a sequence of lines, one
+per multilib.  The first part of each line, up to the `;', is the name
+of the multilib directory.  The second part is a list of compiler
+options separated by `@' characters.
+
+   Multilibs are built in a tree of directories.  The top of the tree,
+represented by `.' in the list of multilib directories, is the default
+library to use when no special compiler options are used.  The
+subdirectories of the tree hold versions of the library to use when
+particular compiler options are used.
+
+
+File: configure.info,  Node: Multilibs in Target Libraries,  Prev: Multilibs in gcc,  Up: Multilibs
+
+8.2 Multilibs in Target Libraries
+=================================
+
+The target libraries in the Cygnus tree are automatically built with
+multilibs.  That means that each library is built multiple times.
+
+   This default is set in the top level `configure.in' file, by adding
+`--enable-multilib' to the list of arguments passed to configure when
+it is run for the target libraries (*note Host and Target Libraries::).
+
+   Each target library uses the shell script `config-ml.in', written by
+Doug Evans, to prepare to build target libraries.  This shell script is
+invoked after the `Makefile' has been created by the `configure'
+script.  If multilibs are not enabled, it does nothing, otherwise it
+modifies the `Makefile' to support multilibs.
+
+   The `config-ml.in' script makes one copy of the `Makefile' for each
+multilib in the appropriate subdirectory.  When configuring in the
+source directory (which is not recommended), it will build a symlink
+tree of the sources in each subdirectory.
+
+   The `config-ml.in' script sets several variables in the various
+`Makefile's.  The `Makefile.in' must have definitions for these
+variables already; `config-ml.in' simply changes the existing values.
+The `Makefile' should use default values for these variables which will
+do the right thing in the subdirectories.
+
+`MULTISRCTOP'
+     `config-ml.in' will set this to a sequence of `../' strings, where
+     the number of strings is the number of multilib levels in the
+     source tree.  The default value should be the empty string.
+
+`MULTIBUILDTOP'
+     `config-ml.in' will set this to a sequence of `../' strings, where
+     the number of strings is number of multilib levels in the object
+     directory.  The default value should be the empty string.  This
+     will differ from `MULTISRCTOP' when configuring in the source tree
+     (which is not recommended).
+
+`MULTIDIRS'
+     In the top level `Makefile' only, `config-ml.in' will set this to
+     the list of multilib subdirectories.  The default value should be
+     the empty string.
+
+`MULTISUBDIR'
+     `config-ml.in' will set this to the installed subdirectory name to
+     use for this subdirectory, with a leading `/'.  The default value
+     shold be the empty string.
+
+`MULTIDO'
+`MULTICLEAN'
+     In the top level `Makefile' only, `config-ml.in' will set these
+     variables to commands to use when doing a recursive make.  These
+     variables should both default to the string `true', so that by
+     default nothing happens.
+
+   All references to the parent of the source directory should use the
+variable `MULTISRCTOP'.  Instead of writing `$(srcdir)/..', you must
+write `$(srcdir)/$(MULTISRCTOP)..'.
+
+   Similarly, references to the parent of the object directory should
+use the variable `MULTIBUILDTOP'.
+
+   In the installation target, the libraries should be installed in the
+subdirectory `MULTISUBDIR'.  Instead of installing
+`$(libdir)/libfoo.a', install `$(libdir)$(MULTISUBDIR)/libfoo.a'.
+
+   The `config-ml.in' script also modifies the top level `Makefile' to
+add `multi-do' and `multi-clean' targets which are used when building
+multilibs.
+
+   The default target of the `Makefile' should include the following
+command:
+     @$(MULTIDO) $(FLAGS_TO_PASS) DO=all multi-do
+   This assumes that `$(FLAGS_TO_PASS)' is defined as a set of
+variables to pass to a recursive invocation of `make'.  This will build
+all the multilibs.  Note that the default value of `MULTIDO' is `true',
+so by default this command will do nothing.  It will only do something
+in the top level `Makefile' if multilibs were enabled.
+
+   The `install' target of the `Makefile' should include the following
+command:
+     @$(MULTIDO) $(FLAGS_TO_PASS) DO=install multi-do
+
+   In general, any operation, other than clean, which should be
+performed on all the multilibs should use a `$(MULTIDO)' line, setting
+the variable `DO' to the target of each recursive call to `make'.
+
+   The `clean' targets (`clean', `mostlyclean', etc.) should use
+`$(MULTICLEAN)'.  For example, the `clean' target should do this:
+     @$(MULTICLEAN) DO=clean multi-clean
+
+
+File: configure.info,  Node: FAQ,  Next: Index,  Prev: Multilibs,  Up: Top
+
+9 Frequently Asked Questions
+****************************
+
+Which do I run first, `autoconf' or `automake'?
+     Except when you first add autoconf or automake support to a
+     package, you shouldn't run either by hand.  Instead, configure
+     with the `--enable-maintainer-mode' option, and let `make' take
+     care of it.
+
+`autoconf' says something about undefined macros.
+     This means that you have macros in your `configure.in' which are
+     not defined by `autoconf'.  You may be using an old version of
+     `autoconf'; try building and installing a newer one.  Make sure the
+     newly installled `autoconf' is first on your `PATH'.  Also, see
+     the next question.
+
+My `configure' script has stuff like `CY_GNU_GETTEXT' in it.
+     This means that you have macros in your `configure.in' which should
+     be defined in your `aclocal.m4' file, but aren't.  This usually
+     means that `aclocal' was not able to appropriate definitions of the
+     macros.  Make sure that you have installed all the packages you
+     need.  In particular, make sure that you have installed libtool
+     (this is where `AM_PROG_LIBTOOL' is defined) and gettext (this is
+     where `CY_GNU_GETTEXT' is defined, at least in the Cygnus version
+     of gettext).
+
+My `Makefile' has `@' characters in it.
+     This may mean that you tried to use an autoconf substitution in
+     your `Makefile.in' without adding the appropriate `AC_SUBST' call
+     to your `configure' script.  Or it may just mean that you need to
+     rebuild `Makefile' in your build directory.  To rebuild `Makefile'
+     from `Makefile.in', run the shell script `config.status' with no
+     arguments.  If you need to force `configure' to run again, first
+     run `config.status --recheck'.  These runs are normally done
+     automatically by `Makefile' targets, but if your `Makefile' has
+     gotten messed up you'll need to help them along.
+
+Why do I have to run both `config.status --recheck' and `config.status'?
+     Normally, you don't; they will be run automatically by `Makefile'
+     targets.  If you do need to run them, use `config.status --recheck'
+     to run the `configure' script again with the same arguments as the
+     first time you ran it.  Use `config.status' (with no arguments) to
+     regenerate all files (`Makefile', `config.h', etc.) based on the
+     results of the configure script.  The two cases are separate
+     because it isn't always necessary to regenerate all the files
+     after running `config.status --recheck'.  The `Makefile' targets
+     generated by automake will use the environment variables
+     `CONFIG_FILES' and `CONFIG_HEADERS' to only regenerate files as
+     they are needed.
+
+What is the Cygnus tree?
+     The Cygnus tree is used for various packages including gdb, the GNU
+     binutils, and egcs.  It is also, of course, used for Cygnus
+     releases.  It is the build system which was developed at Cygnus,
+     using the Cygnus configure script.  It permits building many
+     different packages with a single configure and make.  The
+     configure scripts in the tree are being converted to autoconf, but
+     the general build structure remains intact.
+
+Why do I have to keep rebuilding and reinstalling the tools?
+     I know, it's a pain.  Unfortunately, there are bugs in the tools
+     themselves which need to be fixed, and each time that happens
+     everybody who uses the tools need to reinstall new versions of
+     them.  I don't know if there is going to be a clever fix until the
+     tools stabilize.
+
+Why not just have a Cygnus tree `make' target to update the tools?
+     The tools unfortunately need to be installed before they can be
+     used.  That means that they must be built using an appropriate
+     prefix, and it seems unwise to assume that every configuration
+     uses an appropriate prefix.  It might be possible to make them
+     work in place, or it might be possible to install them in some
+     subdirectory; so far these approaches have not been implemented.
+
+
+File: configure.info,  Node: Index,  Prev: FAQ,  Up: Top
+
+Index
+*****
+
+ [index ]
+* Menu:
+
+* --build option:                        Build and Host Options.
+                                                              (line   9)
+* --host option:                         Build and Host Options.
+                                                              (line  14)
+* --target option:                       Specifying the Target.
+                                                              (line  10)
+* _GNU_SOURCE:                           Write configure.in.  (line 134)
+* AC_CANONICAL_HOST:                     Using the Host Type. (line  10)
+* AC_CANONICAL_SYSTEM:                   Using the Target Type.
+                                                              (line   6)
+* AC_CONFIG_HEADER:                      Write configure.in.  (line  66)
+* AC_EXEEXT:                             Write configure.in.  (line  86)
+* AC_INIT:                               Write configure.in.  (line  38)
+* AC_OUTPUT:                             Write configure.in.  (line 142)
+* AC_PREREQ:                             Write configure.in.  (line  42)
+* AC_PROG_CC:                            Write configure.in.  (line 103)
+* AC_PROG_CXX:                           Write configure.in.  (line 117)
+* acconfig.h:                            Written Developer Files.
+                                                              (line  27)
+* acconfig.h, writing:                   Write acconfig.h.    (line   6)
+* acinclude.m4:                          Written Developer Files.
+                                                              (line  37)
+* aclocal.m4:                            Generated Developer Files.
+                                                              (line  33)
+* AM_CONFIG_HEADER:                      Write configure.in.  (line  53)
+* AM_DISABLE_SHARED:                     Write configure.in.  (line 127)
+* AM_EXEEXT:                             Write configure.in.  (line  86)
+* AM_INIT_AUTOMAKE:                      Write configure.in.  (line  48)
+* AM_MAINTAINER_MODE:                    Write configure.in.  (line  70)
+* AM_PROG_LIBTOOL:                       Write configure.in.  (line 122)
+* AM_PROG_LIBTOOL in configure:          FAQ.                 (line  19)
+* build option:                          Build and Host Options.
+                                                              (line   9)
+* building with a cross compiler:        Canadian Cross.      (line   6)
+* canadian cross:                        Canadian Cross.      (line   6)
+* canadian cross in configure:           CCross in Configure. (line   6)
+* canadian cross in cygnus tree:         CCross in Cygnus Tree.
+                                                              (line   6)
+* canadian cross in makefile:            CCross in Make.      (line   6)
+* canadian cross, configuring:           Build and Host Options.
+                                                              (line   6)
+* canonical system names:                Configuration Names. (line   6)
+* config.cache:                          Build Files Description.
+                                                              (line  28)
+* config.h:                              Build Files Description.
+                                                              (line  23)
+* config.h.in:                           Generated Developer Files.
+                                                              (line  45)
+* config.in:                             Generated Developer Files.
+                                                              (line  45)
+* config.status:                         Build Files Description.
+                                                              (line   9)
+* config.status --recheck:               FAQ.                 (line  40)
+* configuration names:                   Configuration Names. (line   6)
+* configuration triplets:                Configuration Names. (line   6)
+* configure:                             Generated Developer Files.
+                                                              (line  21)
+* configure build system:                Build and Host Options.
+                                                              (line   9)
+* configure host:                        Build and Host Options.
+                                                              (line  14)
+* configure target:                      Specifying the Target.
+                                                              (line  10)
+* configure.in:                          Written Developer Files.
+                                                              (line   9)
+* configure.in, writing:                 Write configure.in.  (line   6)
+* configuring a canadian cross:          Build and Host Options.
+                                                              (line   6)
+* cross compiler:                        Cross Compilation Concepts.
+                                                              (line   6)
+* cross compiler, building with:         Canadian Cross.      (line   6)
+* cross tools:                           Cross Compilation Tools.
+                                                              (line   6)
+* CY_GNU_GETTEXT in configure:           FAQ.                 (line  19)
+* cygnus configure:                      Cygnus Configure.    (line   6)
+* goals:                                 Goals.               (line   6)
+* history:                               History.             (line   6)
+* host names:                            Configuration Names. (line   6)
+* host option:                           Build and Host Options.
+                                                              (line  14)
+* host system:                           Host and Target.     (line   6)
+* host triplets:                         Configuration Names. (line   6)
+* HOST_CC:                               CCross in Make.      (line  27)
+* libg++ configure:                      Cygnus Configure in C++ Libraries.
+                                                              (line   6)
+* libio configure:                       Cygnus Configure in C++ Libraries.
+                                                              (line   6)
+* libstdc++ configure:                   Cygnus Configure in C++ Libraries.
+                                                              (line   6)
+* Makefile:                              Build Files Description.
+                                                              (line  18)
+* Makefile, garbage characters:          FAQ.                 (line  29)
+* Makefile.am:                           Written Developer Files.
+                                                              (line  18)
+* Makefile.am, writing:                  Write Makefile.am.   (line   6)
+* Makefile.in:                           Generated Developer Files.
+                                                              (line  26)
+* multilibs:                             Multilibs.           (line   6)
+* stamp-h:                               Build Files Description.
+                                                              (line  41)
+* stamp-h.in:                            Generated Developer Files.
+                                                              (line  54)
+* system names:                          Configuration Names. (line   6)
+* system types:                          Configuration Names. (line   6)
+* target option:                         Specifying the Target.
+                                                              (line  10)
+* target system:                         Host and Target.     (line   6)
+* triplets:                              Configuration Names. (line   6)
+* undefined macros:                      FAQ.                 (line  12)
+
+
+
+Tag Table:
+Node: Top971
+Node: Introduction1499
+Node: Goals2581
+Node: Tools3305
+Node: History4299
+Node: Building7297
+Node: Getting Started10560
+Node: Write configure.in11073
+Node: Write Makefile.am18324
+Node: Write acconfig.h21501
+Node: Generate files23038
+Node: Getting Started Example25004
+Node: Getting Started Example 125759
+Node: Getting Started Example 227680
+Node: Getting Started Example 330675
+Node: Generate Files in Example33039
+Node: Files34129
+Node: Developer Files34740
+Node: Developer Files Picture35120
+Node: Written Developer Files36408
+Node: Generated Developer Files38960
+Node: Build Files42104
+Node: Build Files Picture42765
+Node: Build Files Description43529
+Node: Support Files45535
+Node: Configuration Names48417
+Node: Configuration Name Definition48917
+Node: Using Configuration Names51240
+Node: Cross Compilation Tools53210
+Node: Cross Compilation Concepts53901
+Node: Host and Target54869
+Node: Using the Host Type56370
+Node: Specifying the Target57719
+Node: Using the Target Type58508
+Node: Cross Tools in the Cygnus Tree61939
+Node: Host and Target Libraries62996
+Node: Target Library Configure Scripts66745
+Node: Make Targets in Cygnus Tree69837
+Node: Target libiberty71185
+Node: Canadian Cross72572
+Node: Canadian Cross Example73413
+Node: Canadian Cross Concepts74532
+Node: Build Cross Host Tools76044
+Node: Build and Host Options76996
+Node: CCross not in Cygnus Tree78782
+Node: CCross in Cygnus Tree79760
+Node: Standard Cygnus CCross80181
+Node: Cross Cygnus CCross81545
+Node: Supporting Canadian Cross84345
+Node: CCross in Configure84960
+Node: CCross in Make88128
+Node: Cygnus Configure89731
+Node: Cygnus Configure Basics90566
+Node: Cygnus Configure in C++ Libraries95244
+Node: Multilibs96251
+Node: Multilibs in gcc97296
+Node: Multilibs in Target Libraries98374
+Node: FAQ102565
+Node: Index106665
+
+End Tag Table
diff --git a/etc/configure.texi b/etc/configure.texi
index 8b13789..58c5285 100644
--- a/etc/configure.texi
+++ b/etc/configure.texi
@@ -1 +1,2646 @@
+\input texinfo
+ at c %**start of header
+ at setfilename configure.info
+ at settitle The GNU configure and build system
+ at setchapternewpage off
+ at c %**end of header
 
+ at dircategory GNU admin
+ at direntry
+* configure: (configure).	The GNU configure and build system
+ at end direntry
+
+ at ifnottex
+This file documents the GNU configure and build system.
+
+Copyright (C) 1998 Cygnus Solutions.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+ at ignore
+Permission is granted to process this file through TeX and print the
+results, provided the printed document carries copying permission
+notice identical to this one except for the removal of this paragraph
+
+
+ at end ignore
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that this permission notice may be stated in a translation approved
+by the Foundation.
+ at end ifnottex
+
+ at titlepage
+ at title The GNU configure and build system
+ at author Ian Lance Taylor
+
+ at page
+ at vskip 0pt plus 1filll
+Copyright @copyright{} 1998 Cygnus Solutions
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that this permission notice may be stated in a translation
+approved by the Free Software Foundation.
+ at end titlepage
+
+ at ifnottex
+ at node Top
+ at top GNU configure and build system
+
+The GNU configure and build system.
+
+ at menu
+* Introduction::		Introduction.
+* Getting Started::		Getting Started.
+* Files::			Files.
+* Configuration Names::		Configuration Names.
+* Cross Compilation Tools::	Cross Compilation Tools.
+* Canadian Cross::		Canadian Cross.
+* Cygnus Configure::		Cygnus Configure.
+* Multilibs::			Multilibs.
+* FAQ::				Frequently Asked Questions.
+* Index::			Index.
+ at end menu
+
+ at end ifnottex
+
+ at node Introduction
+ at chapter Introduction
+
+This document describes the GNU configure and build systems.  It
+describes how autoconf, automake, libtool, and make fit together.  It
+also includes a discussion of the older Cygnus configure system.
+
+This document does not describe in detail how to use each of the tools;
+see the respective manuals for that.  Instead, it describes which files
+the developer must write, which files are machine generated and how they
+are generated, and where certain common problems should be addressed.
+
+ at ifnothtml
+This document draws on several sources, including the autoconf manual by
+David MacKenzie (@pxref{Top, , autoconf overview, autoconf, Autoconf}),
+the automake manual by David MacKenzie and Tom Tromey (@pxref{Top, ,
+automake overview, automake, GNU Automake}), the libtool manual by
+Gordon Matzigkeit (@pxref{Top, , libtool overview, libtool, GNU
+libtool}), and the Cygnus configure manual by K. Richard Pixley.
+ at end ifnothtml
+ at ifhtml
+This document draws on several sources, including
+ at uref{http://www.delorie.com/gnu/docs/autoconf/autoconf_toc.html, the
+autoconf manual} by David MacKenzie,
+ at uref{http://www.delorie.com/gnu/docs/automake/automake_toc.html, the
+automake manual} by David MacKenzie and Tom Tromey,
+ at uref{http://www.delorie.com/gnu/docs/libtool/libtool_toc.html, the
+libtool manual} by Gordon Matzigkeit, and the Cygnus configure manual by
+K. Richard Pixley.
+ at end ifhtml
+
+ at menu
+* Goals::			Goals.
+* Tools::			The tools.
+* History::			History.
+* Building::			Building.
+ at end menu
+
+ at node Goals
+ at section Goals
+ at cindex goals
+
+The GNU configure and build system has two main goals.
+
+The first is to simplify the development of portable programs.  The
+system permits the developer to concentrate on writing the program,
+simplifying many details of portability across Unix and even Windows
+systems, and permitting the developer to describe how to build the
+program using simple rules rather than complex Makefiles.
+
+The second is to simplify the building of programs distributed as source
+code.  All programs are built using a simple, standardized, two step
+process.  The program builder need not install any special tools in
+order to build the program.
+
+ at node Tools
+ at section Tools
+
+The GNU configure and build system is comprised of several different
+tools.  Program developers must build and install all of these tools.
+
+People who just want to build programs from distributed sources normally
+do not need any special tools beyond a Unix shell, a make program, and a
+C compiler.
+
+ at table @asis
+ at item autoconf
+provides a general portability framework, based on testing the features
+of the host system at build time.
+ at item automake
+a system for describing how to build a program, permitting the developer
+to write a simplified @file{Makefile}.
+ at item libtool
+a standardized approach to building shared libraries.
+ at item gettext
+provides a framework for translation of text messages into other
+languages; not really discussed in this document.
+ at item m4
+autoconf requires the GNU version of m4; the standard Unix m4 does not
+suffice.
+ at item perl
+automake requires perl.
+ at end table
+
+ at node History
+ at section History
+ at cindex history
+
+This is a very brief and probably inaccurate history.
+
+As the number of Unix variants increased during the 1980s, it became
+harder to write programs which could run on all variants.  While it was
+often possible to use @code{#ifdef} to identify particular systems,
+developers frequently did not have access to every system, and the
+characteristics of some systems changed from version to version.
+
+By 1992, at least three different approaches had been developed:
+ at itemize @bullet
+ at item
+The Metaconfig program, by Larry Wall, Harlan Stenn, and Raphael
+Manfredi.
+ at item
+The Cygnus configure script, by K. Richard Pixley, and the gcc configure
+script, by Richard Stallman.  These use essentially the same approach,
+and the developers communicated regularly.
+ at item
+The autoconf program, by David MacKenzie.
+ at end itemize
+
+The Metaconfig program is still used for Perl and a few other programs.
+It is part of the Dist package.  I do not know if it is being developed.
+
+In 1994, David MacKenzie and others modified autoconf to incorporate all
+the features of Cygnus configure.  Since then, there has been a slow but
+steady conversion of GNU programs from Cygnus configure to autoconf. gcc
+has been converted, eliminating the gcc configure script.
+
+GNU autoconf was regularly maintained until late 1996.  As of this
+writing in June, 1998, it has no public maintainer.
+
+Most programs are built using the make program, which requires the
+developer to write Makefiles describing how to build the programs.
+Since most programs are built in pretty much the same way, this led to a
+lot of duplication.
+
+The X Window system is built using the imake tool, which uses a database
+of rules to eliminate the duplication.  However, building a tool which
+was developed using imake requires that the builder have imake
+installed, violating one of the goals of the GNU system.
+
+The new BSD make provides a standard library of Makefile fragments,
+which permits developers to write very simple Makefiles.  However, this
+requires that the builder install the new BSD make program.
+
+In 1994, David MacKenzie wrote the first version of automake, which
+permitted writing a simple build description which was converted into a
+Makefile which could be used by the standard make program.  In 1995, Tom
+Tromey completely rewrote automake in Perl, and he continues to enhance
+it.
+
+Various free packages built libraries, and by around 1995 several
+included support to build shared libraries on various platforms.
+However, there was no consistent approach.  In early 1996, Gordon
+Matzigkeit began working on libtool, which provided a standardized
+approach to building shared libraries.  This was integrated into
+automake from the start.
+
+The development of automake and libtool was driven by the GNITS project,
+a group of GNU maintainers who designed standardized tools to help meet
+the GNU coding standards.
+
+ at node Building
+ at section Building
+
+Most readers of this document should already know how to build a tool by
+running @samp{configure} and @samp{make}.  This section may serve as a
+quick introduction or reminder.
+
+Building a tool is normally as simple as running @samp{configure}
+followed by @samp{make}.  You should normally run @samp{configure} from
+an empty directory, using some path to refer to the @samp{configure}
+script in the source directory.  The directory in which you run
+ at samp{configure} is called the @dfn{object directory}.
+
+In order to use a object directory which is different from the source
+directory, you must be using the GNU version of @samp{make}, which has
+the required @samp{VPATH} support.  Despite this restriction, using a
+different object directory is highly recommended:
+ at itemize @bullet
+ at item
+It keeps the files generated during the build from cluttering up your
+sources.
+ at item 
+It permits you to remove the built files by simply removing the entire
+build directory.
+ at item
+It permits you to build from the same sources with several sets of
+configure options simultaneously.
+ at end itemize
+
+If you don't have GNU @samp{make}, you will have to run @samp{configure}
+in the source directory.  All GNU packages should support this; in
+particular, GNU packages should not assume the presence of GNU
+ at samp{make}.
+
+After running @samp{configure}, you can build the tools by running
+ at samp{make}.
+
+To install the tools, run @samp{make install}.  Installing the tools
+will copy the programs and any required support files to the
+ at dfn{installation directory}.  The location of the installation
+directory is controlled by @samp{configure} options, as described below.
+
+In the Cygnus tree at present, the info files are built and installed as
+a separate step.  To build them, run @samp{make info}.  To install them,
+run @samp{make install-info}. The equivalent html files are also built
+and installed in a separate step. To build the html files, run
+ at samp{make html}. To install the html files run @samp{make install-html}.
+
+All @samp{configure} scripts support a wide variety of options.  The
+most interesting ones are @samp{--with} and @samp{--enable} options
+which are generally specific to particular tools.  You can usually use
+the @samp{--help} option to get a list of interesting options for a
+particular configure script.
+
+The only generic options you are likely to use are the @samp{--prefix}
+and @samp{--exec-prefix} options.  These options are used to specify the
+installation directory.
+
+The directory named by the @samp{--prefix} option will hold machine
+independent files such as info files.
+
+The directory named by the @samp{--exec-prefix} option, which is
+normally a subdirectory of the @samp{--prefix} directory, will hold
+machine dependent files such as executables.
+
+The default for @samp{--prefix} is @file{/usr/local}.  The default for
+ at samp{--exec-prefix} is the value used for @samp{--prefix}.
+
+The convention used in Cygnus releases is to use a @samp{--prefix}
+option of @file{/usr/cygnus/@var{release}}, where @var{release} is the
+name of the release, and to use a @samp{--exec-prefix} option of
+ at file{/usr/cygnus/@var{release}/H- at var{host}}, where @var{host} is the
+configuration name of the host system (@pxref{Configuration Names}).
+
+Do not use either the source or the object directory as the installation
+directory.  That will just lead to confusion.
+
+ at node Getting Started
+ at chapter Getting Started
+
+To start using the GNU configure and build system with your software
+package, you must write three files, and you must run some tools to
+manually generate additional files.
+
+ at menu
+* Write configure.in::		Write configure.in.
+* Write Makefile.am::		Write Makefile.am.
+* Write acconfig.h::		Write acconfig.h.
+* Generate files::		Generate files.
+* Getting Started Example::	Example.
+ at end menu
+
+ at node Write configure.in
+ at section Write configure.in
+ at cindex @file{configure.in}, writing
+
+You must first write the file @file{configure.in}.  This is an autoconf
+input file, and the autoconf manual describes in detail what this file
+should look like.
+
+You will write tests in your @file{configure.in} file to check for
+conditions that may change from one system to another, such as the
+presence of particular header files or functions.
+
+For example, not all systems support the @samp{gettimeofday} function.
+If you want to use the @samp{gettimeofday} function when it is
+available, and to use some other function when it is not, you would
+check for this by putting @samp{AC_CHECK_FUNCS(gettimeofday)} in
+ at file{configure.in}.
+
+When the configure script is run at build time, this will arrange to
+define the preprocessor macro @samp{HAVE_GETTIMEOFDAY} to the value 1 if
+the @samp{gettimeofday} function is available, and to not define the
+macro at all if the function is not available.  Your code can then use
+ at samp{#ifdef} to test whether it is safe to call @samp{gettimeofday}.
+
+If you have an existing body of code, the @samp{autoscan} program may
+help identify potential portability problems, and hence configure tests
+that you will want to use.
+ at ifnothtml
+ at xref{Invoking autoscan, , , autoconf, the autoconf manual}.
+ at end ifnothtml
+ at ifhtml
+See @uref{http://www.delorie.com/gnu/docs/autoconf/autoconf_4.html, the
+autoscan documentation}.
+ at end ifhtml
+
+Another handy tool for an existing body of code is @samp{ifnames}.  This
+will show you all the preprocessor conditionals that the code already
+uses.
+ at ifnothtml
+ at xref{Invoking ifnames, , , autoconf, the autoconf manual}.
+ at end ifnothtml
+ at ifhtml
+See @uref{http://www.delorie.com/gnu/docs/autoconf/autoconf_5.html, the
+ifnames documentation}.
+ at end ifhtml
+
+Besides the portability tests which are specific to your particular
+package, every @file{configure.in} file should contain the following
+macros.
+
+ at table @samp
+ at item AC_INIT
+ at cindex @samp{AC_INIT}
+This macro takes a single argument, which is the name of a file in your
+package.  For example, @samp{AC_INIT(foo.c)}.
+
+ at item AC_PREREQ(@var{VERSION})
+ at cindex @samp{AC_PREREQ}
+This macro is optional.  It may be used to indicate the version of
+ at samp{autoconf} that you are using.  This will prevent users from
+running an earlier version of @samp{autoconf} and perhaps getting an
+invalid @file{configure} script.  For example, @samp{AC_PREREQ(2.12)}.
+
+ at item AM_INIT_AUTOMAKE
+ at cindex @samp{AM_INIT_AUTOMAKE}
+This macro takes two arguments: the name of the package, and a version
+number.  For example, @samp{AM_INIT_AUTOMAKE(foo, 1.0)}.  (This macro is
+not needed if you are not using automake).
+
+ at item AM_CONFIG_HEADER
+ at cindex @samp{AM_CONFIG_HEADER}
+This macro names the header file which will hold the preprocessor macro
+definitions at run time.  Normally this should be @file{config.h}.  Your
+sources would then use @samp{#include "config.h"} to include it.
+
+This macro may optionally name the input file for that header file; by
+default, this is @file{config.h.in}, but that file name works poorly on
+DOS filesystems.  Therefore, it is often better to name it explicitly as
+ at file{config.in}.
+
+This is what you should normally put in @file{configure.in}:
+ at example
+AM_CONFIG_HEADER(config.h:config.in)
+ at end example
+
+ at cindex @samp{AC_CONFIG_HEADER}
+(If you are not using automake, use @samp{AC_CONFIG_HEADER} rather than
+ at samp{AM_CONFIG_HEADER}).
+
+ at item AM_MAINTAINER_MODE
+ at cindex @samp{AM_MAINTAINER_MODE}
+This macro always appears in Cygnus configure scripts.  Other programs
+may or may not use it.
+
+If this macro is used, the @samp{--enable-maintainer-mode} option is
+required to enable automatic rebuilding of generated files used by the
+configure system.  This of course requires that developers be aware of,
+and use, that option.
+
+If this macro is not used, then the generated files will always be
+rebuilt automatically.  This will cause problems if the wrong versions
+of autoconf, automake, or others are in the builder's @samp{PATH}.
+
+(If you are not using automake, you do not need to use this macro).
+
+ at item AC_EXEEXT
+ at cindex @samp{AC_EXEEXT}
+ at cindex @samp{AM_EXEEXT}
+Either this macro or @samp{AM_EXEEXT} always appears in Cygnus configure
+files.  Other programs may or may not use one of them.
+
+This macro looks for the executable suffix used on the host system.  On
+Unix systems, this is the empty string.  On Windows systems, this is
+ at samp{.exe}.  This macro directs automake to use the executable suffix
+as appropriate when creating programs.  This macro does not take any
+arguments.
+
+The @samp{AC_EXEEXT} form is new, and is part of a Cygnus patch to
+autoconf to support compiling with Visual C++.  Older programs use
+ at samp{AM_EXEEXT} instead.
+
+(Programs which do not use automake use neither @samp{AC_EXEEXT} nor
+ at samp{AM_EXEEXT}).
+
+ at item AC_PROG_CC
+ at cindex @samp{AC_PROG_CC}
+If you are writing C code, you will normally want to use this macro.  It
+locates the C compiler to use.  It does not take any arguments.
+
+However, if this @file{configure.in} file is for a library which is to
+be compiled by a cross compiler which may not fully work, then you will
+not want to use @samp{AC_PROG_CC}.  Instead, you will want to use a
+variant which does not call the macro @samp{AC_PROG_CC_WORKS}.  Examples
+can be found in various @file{configure.in} files for libraries that are
+compiled with cross compilers, such as libiberty or libgloss.  This is
+essentially a bug in autoconf, and there will probably be a better
+workaround at some point.
+
+ at item AC_PROG_CXX
+ at cindex @samp{AC_PROG_CXX}
+If you are writing C++ code, you will want to use this macro.  It
+locates the C++ compiler to use.  It does not take any arguments.  The
+same cross compiler comments apply as for @samp{AC_PROG_CC}.
+
+ at item AM_PROG_LIBTOOL
+ at cindex @samp{AM_PROG_LIBTOOL}
+If you want to build libraries, and you want to permit them to be
+shared, or you want to link against libraries which were built using
+libtool, then you will need this macro.  This macro is required in order
+to use libtool.
+
+ at cindex @samp{AM_DISABLE_SHARED}
+By default, this will cause all libraries to be built as shared
+libraries.  To prevent this--to change the default--use
+ at samp{AM_DISABLE_SHARED} before @samp{AM_PROG_LIBTOOL}.  The configure
+options @samp{--enable-shared} and @samp{--disable-shared} may be used
+to override the default at build time.
+
+ at item AC_DEFINE(_GNU_SOURCE)
+ at cindex @samp{_GNU_SOURCE}
+GNU packages should normally include this line before any other feature
+tests.  This defines the macro @samp{_GNU_SOURCE} when compiling, which
+directs the libc header files to provide the standard GNU system
+interfaces including all GNU extensions.  If this macro is not defined,
+certain GNU extensions may not be available.
+
+ at item AC_OUTPUT
+ at cindex @samp{AC_OUTPUT}
+This macro takes a list of file names which the configure process should
+produce.  This is normally a list of one or more @file{Makefile} files
+in different directories.  If your package lives entirely in a single
+directory, you would use simply @samp{AC_OUTPUT(Makefile)}.  If you also
+have, for example, a @file{lib} subdirectory, you would use
+ at samp{AC_OUTPUT(Makefile lib/Makefile)}.
+ at end table
+
+If you want to use locally defined macros in your @file{configure.in}
+file, then you will need to write a @file{acinclude.m4} file which
+defines them (if not using automake, this file is called
+ at file{aclocal.m4}).  Alternatively, you can put separate macros in an
+ at file{m4} subdirectory, and put @samp{ACLOCAL_AMFLAGS = -I m4} in your
+ at file{Makefile.am} file so that the @samp{aclocal} program will be able
+to find them.
+
+The different macro prefixes indicate which tool defines the macro.
+Macros which start with @samp{AC_} are part of autoconf.  Macros which
+start with @samp{AM_} are provided by automake or libtool.
+
+ at node Write Makefile.am
+ at section Write Makefile.am
+ at cindex @file{Makefile.am}, writing
+
+You must write the file @file{Makefile.am}.  This is an automake input
+file, and the automake manual describes in detail what this file should
+look like.
+
+The automake commands in @file{Makefile.am} mostly look like variable
+assignments in a @file{Makefile}.  automake recognizes special variable
+names, and automatically add make rules to the output as needed.
+
+There will be one @file{Makefile.am} file for each directory in your
+package.  For each directory with subdirectories, the @file{Makefile.am}
+file should contain the line
+ at smallexample
+SUBDIRS = @var{dir} @var{dir} @dots{}
+ at end smallexample
+ at noindent
+where each @var{dir} is the name of a subdirectory.
+
+For each @file{Makefile.am}, there should be a corresponding
+ at file{Makefile} in the @samp{AC_OUTPUT} macro in @file{configure.in}.
+
+Every @file{Makefile.am} written at Cygnus should contain the line
+ at smallexample
+AUTOMAKE_OPTIONS = cygnus
+ at end smallexample
+ at noindent
+This puts automake into Cygnus mode.  See the automake manual for
+details.
+
+You may to include the version number of @samp{automake} that you are
+using on the @samp{AUTOMAKE_OPTIONS} line.  For example,
+ at smallexample
+AUTOMAKE_OPTIONS = cygnus 1.3
+ at end smallexample
+ at noindent
+This will prevent users from running an earlier version of
+ at samp{automake} and perhaps getting an invalid @file{Makefile.in}.
+
+If your package builds a program, then in the directory where that
+program is built you will normally want a line like
+ at smallexample
+bin_PROGRAMS = @var{program}
+ at end smallexample
+ at noindent
+where @var{program} is the name of the program.  You will then want a
+line like
+ at smallexample
+ at var{program}_SOURCES = @var{file} @var{file} @dots{}
+ at end smallexample
+ at noindent
+where each @var{file} is the name of a source file to link into the
+program (e.g., @samp{foo.c}).
+
+If your package builds a library, and you do not want the library to
+ever be built as a shared library, then in the directory where that
+library is built you will normally want a line like
+ at smallexample
+lib_LIBRARIES = lib at var{name}.a
+ at end smallexample
+ at noindent
+where @samp{lib at var{name}.a} is the name of the library.  You will then
+want a line like
+ at smallexample
+lib at var{name}_a_SOURCES = @var{file} @var{file} @dots{}
+ at end smallexample
+ at noindent
+where each @var{file} is the name of a source file to add to the
+library.
+
+If your package builds a library, and you want to permit building the
+library as a shared library, then in the directory where that library is
+built you will normally want a line like
+ at smallexample
+lib_LTLIBRARIES = lib at var{name}.la
+ at end smallexample
+The use of @samp{LTLIBRARIES}, and the @samp{.la} extension, indicate a
+library to be built using libtool.  As usual, you will then want a line
+like
+ at smallexample
+lib at var{name}_la_SOURCES = @var{file} @var{file} @dots{}
+ at end smallexample
+
+The strings @samp{bin} and @samp{lib} that appear above in
+ at samp{bin_PROGRAMS} and @samp{lib_LIBRARIES} are not arbitrary.  They
+refer to particular directories, which may be set by the @samp{--bindir}
+and @samp{--libdir} options to @file{configure}.  If those options are
+not used, the default values are based on the @samp{--prefix} or
+ at samp{--exec-prefix} options to @file{configure}.  It is possible to use
+other names if the program or library should be installed in some other
+directory.
+
+The @file{Makefile.am} file may also contain almost anything that may
+appear in a normal @file{Makefile}.  automake also supports many other
+special variables, as well as conditionals.
+
+See the automake manual for more information.
+
+ at node Write acconfig.h
+ at section Write acconfig.h
+ at cindex @file{acconfig.h}, writing
+
+If you are generating a portability header file, (i.e., you are using
+ at samp{AM_CONFIG_HEADER} in @file{configure.in}), then you will have to
+write a @file{acconfig.h} file.  It will have to contain the following
+lines.
+
+ at smallexample
+/* Name of package.  */
+#undef PACKAGE
+
+/* Version of package.  */
+#undef VERSION
+ at end smallexample
+
+This requirement is really a bug in the system, and the requirement may
+be eliminated at some later date.
+
+The @file{acconfig.h} file will also similar comment and @samp{#undef}
+lines for any unusual macros in the @file{configure.in} file, including
+any macro which appears in a @samp{AC_DEFINE} macro.
+
+In particular, if you are writing a GNU package and therefore include
+ at samp{AC_DEFINE(_GNU_SOURCE)} in @file{configure.in} as suggested above,
+you will need lines like this in @file{acconfig.h}:
+ at smallexample
+/* Enable GNU extensions.  */
+#undef _GNU_SOURCE
+ at end smallexample
+
+Normally the @samp{autoheader} program will inform you of any such
+requirements by printing an error message when it is run.  However, if
+you do anything particular odd in your @file{configure.in} file, you
+will have to make sure that the right entries appear in
+ at file{acconfig.h}, since otherwise the results of the tests may not be
+available in the @file{config.h} file which your code will use.
+
+(Thee @samp{PACKAGE} and @samp{VERSION} lines are not required if you
+are not using automake, and in that case you may not need a
+ at file{acconfig.h} file at all).
+
+ at node Generate files
+ at section Generate files
+
+Once you have written @file{configure.in}, @file{Makefile.am},
+ at file{acconfig.h}, and possibly @file{acinclude.m4}, you must use
+autoconf and automake programs to produce the first versions of the
+generated files.  This is done by executing the following sequence of
+commands.
+
+ at smallexample
+aclocal
+autoconf
+autoheader
+automake
+ at end smallexample
+
+The @samp{aclocal} and @samp{automake} commands are part of the automake
+package, and the @samp{autoconf} and @samp{autoheader} commands are part
+of the autoconf package.
+
+If you are using a @file{m4} subdirectory for your macros, you will need
+to use the @samp{-I m4} option when you run @samp{aclocal}.
+
+If you are not using the Cygnus tree, use the @samp{-a} option when
+running @samp{automake} command in order to copy the required support
+files into your source directory.
+
+If you are using libtool, you must build and install the libtool package
+with the same @samp{--prefix} and @samp{--exec-prefix} options as you
+used with the autoconf and automake packages.  You must do this before
+running any of the above commands.  If you are not using the Cygnus
+tree, you will need to run the @samp{libtoolize} program to copy the
+libtool support files into your directory.
+
+Once you have managed to run these commands without getting any errors,
+you should create a new empty directory, and run the @samp{configure}
+script which will have been created by @samp{autoconf} with the
+ at samp{--enable-maintainer-mode} option.  This will give you a set of
+Makefiles which will include rules to automatically rebuild all the
+generated files.
+
+After doing that, whenever you have changed some of the input files and
+want to regenerated the other files, go to your object directory and run
+ at samp{make}.  Doing this is more reliable than trying to rebuild the
+files manually, because there are complex order dependencies and it is
+easy to forget something.
+
+ at node Getting Started Example
+ at section Example
+
+Let's consider a trivial example.
+
+Suppose we want to write a simple version of @samp{touch}.  Our program,
+which we will call @samp{poke}, will take a single file name argument,
+and use the @samp{utime} system call to set the modification and access
+times of the file to the current time.  We want this program to be
+highly portable.
+
+We'll first see what this looks like without using autoconf and
+automake, and then see what it looks like with them.
+
+ at menu
+* Getting Started Example 1::		First Try.
+* Getting Started Example 2::		Second Try.
+* Getting Started Example 3::		Third Try.
+* Generate Files in Example::		Generate Files.
+ at end menu
+
+ at node Getting Started Example 1
+ at subsection First Try
+
+Here is our first try at @samp{poke.c}.  Note that we've written it
+without ANSI/ISO C prototypes, since we want it to be highly portable.
+
+ at example
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <utime.h>
+
+int
+main (argc, argv)
+     int argc;
+     char **argv;
+@{
+  if (argc != 2)
+    @{
+      fprintf (stderr, "Usage: poke file\n");
+      exit (1);
+    @}
+
+  if (utime (argv[1], NULL) < 0)
+    @{
+      perror ("utime");
+      exit (1);
+    @}
+
+  exit (0);
+@}
+ at end example
+
+We also write a simple @file{Makefile}.
+
+ at example
+CC = gcc
+CFLAGS = -g -O2
+
+all: poke
+
+poke: poke.o
+	$(CC) -o poke $(CFLAGS) $(LDFLAGS) poke.o
+ at end example
+
+So far, so good.
+
+Unfortunately, there are a few problems.
+
+On older Unix systems derived from BSD 4.3, the @samp{utime} system call
+does not accept a second argument of @samp{NULL}.  On those systems, we
+need to pass a pointer to @samp{struct utimbuf} structure.
+Unfortunately, even older systems don't define that structure; on those
+systems, we need to pass an array of two @samp{long} values.
+
+The header file @file{stdlib.h} was invented by ANSI C, and older
+systems don't have a copy.  We included it above to get a declaration of
+ at samp{exit}.
+
+We can find some of these portability problems by running
+ at samp{autoscan}, which will create a @file{configure.scan} file which we
+can use as a prototype for our @file{configure.in} file.  I won't show
+the output, but it will notice the potential problems with @samp{utime}
+and @file{stdlib.h}.
+
+In our @file{Makefile}, we don't provide any way to install the program.
+This doesn't matter much for such a simple example, but a real program
+will need an @samp{install} target.  For that matter, we will also want
+a @samp{clean} target.
+
+ at node Getting Started Example 2
+ at subsection Second Try
+
+Here is our second try at this program.
+
+We modify @file{poke.c} to use preprocessor macros to control what
+features are available.  (I've cheated a bit by using the same macro
+names which autoconf will use).
+
+ at example
+#include <stdio.h>
+
+#ifdef STDC_HEADERS
+#include <stdlib.h>
+#endif
+
+#include <sys/types.h>
+
+#ifdef HAVE_UTIME_H
+#include <utime.h>
+#endif
+
+#ifndef HAVE_UTIME_NULL
+
+#include <time.h>
+
+#ifndef HAVE_STRUCT_UTIMBUF
+
+struct utimbuf
+@{
+  long actime;
+  long modtime;
+@};
+
+#endif
+
+static int
+utime_now (file)
+     char *file;
+@{
+  struct utimbuf now;
+
+  now.actime = now.modtime = time (NULL);
+  return utime (file, &now);
+@}
+
+#define utime(f, p) utime_now (f)
+
+#endif /* HAVE_UTIME_NULL  */
+
+int
+main (argc, argv)
+     int argc;
+     char **argv;
+@{
+  if (argc != 2)
+    @{
+      fprintf (stderr, "Usage: poke file\n");
+      exit (1);
+    @}
+
+  if (utime (argv[1], NULL) < 0)
+    @{
+      perror ("utime");
+      exit (1);
+    @}
+
+  exit (0);
+@}
+ at end example
+
+Here is the associated @file{Makefile}.  We've added support for the
+preprocessor flags we use.  We've also added @samp{install} and
+ at samp{clean} targets.
+
+ at example
+# Set this to your installation directory.
+bindir = /usr/local/bin
+
+# Uncomment this if you have the standard ANSI/ISO C header files.
+# STDC_HDRS = -DSTDC_HEADERS
+
+# Uncomment this if you have utime.h.
+# UTIME_H = -DHAVE_UTIME_H
+
+# Uncomment this if utime (FILE, NULL) works on your system.
+# UTIME_NULL = -DHAVE_UTIME_NULL
+
+# Uncomment this if struct utimbuf is defined in utime.h.
+# UTIMBUF = -DHAVE_STRUCT_UTIMBUF
+
+CC = gcc
+CFLAGS = -g -O2
+
+ALL_CFLAGS = $(STDC_HDRS) $(UTIME_H) $(UTIME_NULL) $(UTIMBUF) $(CFLAGS)
+
+all: poke
+
+poke: poke.o
+	$(CC) -o poke $(ALL_CFLAGS) $(LDFLAGS) poke.o
+
+.c.o:
+	$(CC) -c $(ALL_CFLAGS) poke.c
+
+install: poke
+	cp poke $(bindir)/poke
+
+clean:
+	rm poke poke.o
+ at end example
+
+Some problems with this approach should be clear.
+
+Users who want to compile poke will have to know how @samp{utime} works
+on their systems, so that they can uncomment the @file{Makefile}
+correctly.
+
+The installation is done using @samp{cp}, but many systems have an
+ at samp{install} program which may be used, and which supports optional
+features such as stripping debugging information out of the installed
+binary.
+
+The use of @file{Makefile} variables like @samp{CC}, @samp{CFLAGS} and
+ at samp{LDFLAGS} follows the requirements of the GNU standards.  This is
+convenient for all packages, since it reduces surprises for users.
+However, it is easy to get the details wrong, and wind up with a
+slightly nonstandard distribution.
+
+ at node Getting Started Example 3
+ at subsection Third Try
+
+For our third try at this program, we will write a @file{configure.in}
+script to discover the configuration features on the host system, rather
+than requiring the user to edit the @file{Makefile}.  We will also write
+a @file{Makefile.am} rather than a @file{Makefile}.
+
+The only change to @file{poke.c} is to add a line at the start of the
+file:
+ at smallexample
+#include "config.h"
+ at end smallexample
+
+The new @file{configure.in} file is as follows.
+
+ at example
+AC_INIT(poke.c)
+AM_INIT_AUTOMAKE(poke, 1.0)
+AM_CONFIG_HEADER(config.h:config.in)
+AC_PROG_CC
+AC_HEADER_STDC
+AC_CHECK_HEADERS(utime.h)
+AC_EGREP_HEADER(utimbuf, utime.h, AC_DEFINE(HAVE_STRUCT_UTIMBUF))
+AC_FUNC_UTIME_NULL
+AC_OUTPUT(Makefile)
+ at end example
+
+The first four macros in this file, and the last one, were described
+above; see @ref{Write configure.in}.  If we omit these macros, then when
+we run @samp{automake} we will get a reminder that we need them.
+
+The other macros are standard autoconf macros.
+
+ at table @samp
+ at item AC_HEADER_STDC
+Check for standard C headers.
+ at item AC_CHECK_HEADERS
+Check whether a particular header file exists.
+ at item AC_EGREP_HEADER
+Check for a particular string in a particular header file, in this case
+checking for @samp{utimbuf} in @file{utime.h}.
+ at item AC_FUNC_UTIME_NULL
+Check whether @samp{utime} accepts a NULL second argument to set the
+file change time to the current time.
+ at end table
+
+See the autoconf manual for a more complete description.
+
+The new @file{Makefile.am} file is as follows.  Note how simple this is
+compared to our earlier @file{Makefile}.
+
+ at example
+bin_PROGRAMS = poke
+
+poke_SOURCES = poke.c
+ at end example
+
+This means that we should build a single program name @samp{poke}.  It
+should be installed in the binary directory, which we called
+ at samp{bindir} earlier.  The program @samp{poke} is built from the source
+file @file{poke.c}.
+
+We must also write a @file{acconfig.h} file.  Besides @samp{PACKAGE} and
+ at samp{VERSION}, which must be mentioned for all packages which use
+automake, we must include @samp{HAVE_STRUCT_UTIMBUF}, since we mentioned
+it in an @samp{AC_DEFINE}.
+
+ at example
+/* Name of package.  */
+#undef PACKAGE
+
+/* Version of package.  */
+#undef VERSION
+
+/* Whether utime.h defines struct utimbuf.  */
+#undef HAVE_STRUCT_UTIMBUF
+ at end example
+
+ at node Generate Files in Example
+ at subsection Generate Files
+
+We must now generate the other files, using the following commands.
+
+ at smallexample
+aclocal
+autoconf
+autoheader
+automake
+ at end smallexample
+
+When we run @samp{autoheader}, it will remind us of any macros we forgot
+to add to @file{acconfig.h}.
+
+When we run @samp{automake}, it will want to add some files to our
+distribution.  It will add them automatically if we use the
+ at samp{--add-missing} option.
+
+By default, @samp{automake} will run in GNU mode, which means that it
+will want us to create certain additional files; as of this writing, it
+will want @file{NEWS}, @file{README}, @file{AUTHORS}, and
+ at file{ChangeLog}, all of which are files which should appear in a
+standard GNU distribution.  We can either add those files, or run
+ at samp{automake} with the @samp{--foreign} option.
+
+Running these tools will generate the following files, all of which are
+described in the next chapter.
+
+ at itemize @bullet
+ at item
+ at file{aclocal.m4}
+ at item
+ at file{configure}
+ at item
+ at file{config.in}
+ at item
+ at file{Makefile.in}
+ at item
+ at file{stamp-h.in}
+ at end itemize
+
+ at node Files
+ at chapter Files
+
+As was seen in the previous chapter, the GNU configure and build system
+uses a number of different files.  The developer must write a few files.
+The others are generated by various tools.
+
+The system is rather flexible, and can be used in many different ways.
+In describing the files that it uses, I will describe the common case,
+and mention some other cases that may arise.
+
+ at menu
+* Developer Files::		Developer Files.
+* Build Files::			Build Files.
+* Support Files::		Support Files.
+ at end menu
+
+ at node Developer Files
+ at section Developer Files
+
+This section describes the files written or generated by the developer
+of a package.
+
+ at menu
+* Developer Files Picture::	Developer Files Picture.
+* Written Developer Files::	Written Developer Files.
+* Generated Developer Files::	Generated Developer Files.
+ at end menu
+
+ at node Developer Files Picture
+ at subsection Developer Files Picture
+
+Here is a picture of the files which are written by the developer, the
+generated files which would be included with a complete source
+distribution, and the tools which create those files.
+ at ifinfo
+The file names are plain text and the tool names are enclosed by
+ at samp{*} characters
+ at end ifinfo
+ at ifnotinfo
+The file names are in rectangles with square corners and the tool names
+are in rectangles with rounded corners
+ at end ifnotinfo
+(e.g., @samp{autoheader} is the name of a tool, not the name of a file).
+
+ at image{configdev,,,,jpg}
+
+ at node Written Developer Files
+ at subsection Written Developer Files
+
+The following files would be written by the developer.
+
+ at table @file
+ at item configure.in
+ at cindex @file{configure.in}
+This is the configuration script.  This script contains invocations of
+autoconf macros.  It may also contain ordinary shell script code.  This
+file will contain feature tests for portability issues.  The last thing
+in the file will normally be an @samp{AC_OUTPUT} macro listing which
+files to create when the builder runs the configure script.  This file
+is always required when using the GNU configure system.  @xref{Write
+configure.in}.
+
+ at item Makefile.am
+ at cindex @file{Makefile.am}
+This is the automake input file.  It describes how the code should be
+built.  It consists of definitions of automake variables.  It may also
+contain ordinary Makefile targets.  This file is only needed when using
+automake (newer tools normally use automake, but there are still older
+tools which have not been converted, in which the developer writes
+ at file{Makefile.in} directly).  @xref{Write Makefile.am}.
+
+ at item acconfig.h
+ at cindex @file{acconfig.h}
+When the configure script creates a portability header file, by using
+ at samp{AM_CONFIG_HEADER} (or, if not using automake,
+ at samp{AC_CONFIG_HEADER}), this file is used to describe macros which are
+not recognized by the @samp{autoheader} command.  This is normally a
+fairly uninteresting file, consisting of a collection of @samp{#undef}
+lines with comments.  Normally any call to @samp{AC_DEFINE} in
+ at file{configure.in} will require a line in this file. @xref{Write
+acconfig.h}.
+
+ at item acinclude.m4
+ at cindex @file{acinclude.m4}
+This file is not always required.  It defines local autoconf macros.
+These macros may then be used in @file{configure.in}.  If you don't need
+any local autoconf macros, then you don't need this file at all.  In
+fact, in general, you never need local autoconf macros, since you can
+put everything in @file{configure.in}, but sometimes a local macro is
+convenient.
+
+Newer tools may omit @file{acinclude.m4}, and instead use a
+subdirectory, typically named @file{m4}, and define
+ at samp{ACLOCAL_AMFLAGS = -I m4} in @file{Makefile.am} to force
+ at samp{aclocal} to look there for macro definitions.  The macro
+definitions are then placed in separate files in that directory.
+
+The @file{acinclude.m4} file is only used when using automake; in older
+tools, the developer writes @file{aclocal.m4} directly, if it is needed.
+ at end table
+
+ at node Generated Developer Files
+ at subsection Generated Developer Files
+
+The following files would be generated by the developer.
+
+When using automake, these files are normally not generated manually
+after the first time.  Instead, the generated @file{Makefile} contains
+rules to automatically rebuild the files as required.  When
+ at samp{AM_MAINTAINER_MODE} is used in @file{configure.in} (the normal
+case in Cygnus code), the automatic rebuilding rules will only be
+defined if you configure using the @samp{--enable-maintainer-mode}
+option.
+
+When using automatic rebuilding, it is important to ensure that all the
+various tools have been built and installed on your @samp{PATH}.  Using
+automatic rebuilding is highly recommended, so much so that I'm not
+going to explain what you have to do if you don't use it.
+
+ at table @file
+ at item configure
+ at cindex @file{configure}
+This is the configure script which will be run when building the
+package.  This is generated by @samp{autoconf} from @file{configure.in}
+and @file{aclocal.m4}.  This is a shell script.
+
+ at item Makefile.in
+ at cindex @file{Makefile.in}
+This is the file which the configure script will turn into the
+ at file{Makefile} at build time.  This file is generated by
+ at samp{automake} from @file{Makefile.am}.  If you aren't using automake,
+you must write this file yourself.  This file is pretty much a normal
+ at file{Makefile}, with some configure substitutions for certain
+variables.
+
+ at item aclocal.m4
+ at cindex @file{aclocal.m4}
+This file is created by the @samp{aclocal} program, based on the
+contents of @file{configure.in} and @file{acinclude.m4} (or, as noted in
+the description of @file{acinclude.m4} above, on the contents of an
+ at file{m4} subdirectory).  This file contains definitions of autoconf
+macros which @samp{autoconf} will use when generating the file
+ at file{configure}.  These autoconf macros may be defined by you in
+ at file{acinclude.m4} or they may be defined by other packages such as
+automake, libtool or gettext.  If you aren't using automake, you will
+normally write this file yourself; in that case, if @file{configure.in}
+uses only standard autoconf macros, this file will not be needed at all.
+
+ at item config.in
+ at cindex @file{config.in}
+ at cindex @file{config.h.in}
+This file is created by @samp{autoheader} based on @file{acconfig.h} and
+ at file{configure.in}.  At build time, the configure script will define
+some of the macros in it to create @file{config.h}, which may then be
+included by your program.  This permits your C code to use preprocessor
+conditionals to change its behaviour based on the characteristics of the
+host system.  This file may also be called @file{config.h.in}.
+
+ at item stamp.h-in
+ at cindex @file{stamp-h.in}
+This rather uninteresting file, which I omitted from the picture, is
+generated by @samp{automake}.  It always contains the string
+ at samp{timestamp}.  It is used as a timestamp file indicating whether
+ at file{config.in} is up to date.  Using a timestamp file means that
+ at file{config.in} can be marked as up to date without actually changing
+its modification time.  This is useful since @file{config.in} depends
+upon @file{configure.in}, but it is easy to change @file{configure.in}
+in a way which does not affect @file{config.in}.
+ at end table
+
+ at node Build Files
+ at section Build Files
+
+This section describes the files which are created at configure and
+build time.  These are the files which somebody who builds the package
+will see.
+
+Of course, the developer will also build the package.  The distinction
+between developer files and build files is not that the developer does
+not see the build files, but that somebody who only builds the package
+does not have to worry about the developer files.
+
+ at menu
+* Build Files Picture::		Build Files Picture.
+* Build Files Description::	Build Files Description.
+ at end menu
+
+ at node Build Files Picture
+ at subsection Build Files Picture
+
+Here is a picture of the files which will be created at build time.
+ at file{config.status} is both a created file and a shell script which is
+run to create other files, and the picture attempts to show that.
+
+ at image{configbuild,,,,jpg}
+
+ at node Build Files Description
+ at subsection Build Files Description
+
+This is a description of the files which are created at build time.
+
+ at table @file
+ at item config.status
+ at cindex @file{config.status}
+The first step in building a package is to run the @file{configure}
+script.  The @file{configure} script will create the file
+ at file{config.status}, which is itself a shell script.  When you first
+run @file{configure}, it will automatically run @file{config.status}.
+An @file{Makefile} derived from an automake generated @file{Makefile.in}
+will contain rules to automatically run @file{config.status} again when
+necessary to recreate certain files if their inputs change.
+
+ at item Makefile
+ at cindex @file{Makefile}
+This is the file which make will read to build the program.  The
+ at file{config.status} script will transform @file{Makefile.in} into
+ at file{Makefile}.
+
+ at item config.h
+ at cindex @file{config.h}
+This file defines C preprocessor macros which C code can use to adjust
+its behaviour on different systems.  The @file{config.status} script
+will transform @file{config.in} into @file{config.h}.
+
+ at item config.cache
+ at cindex @file{config.cache}
+This file did not fit neatly into the picture, and I omitted it.  It is
+used by the @file{configure} script to cache results between runs.  This
+can be an important speedup.  If you modify @file{configure.in} in such
+a way that the results of old tests should change (perhaps you have
+added a new library to @samp{LDFLAGS}), then you will have to remove
+ at file{config.cache} to force the tests to be rerun.
+
+The autoconf manual explains how to set up a site specific cache file.
+This can speed up running @file{configure} scripts on your system.
+
+ at item stamp.h
+ at cindex @file{stamp-h}
+This file, which I omitted from the picture, is similar to
+ at file{stamp-h.in}.  It is used as a timestamp file indicating whether
+ at file{config.h} is up to date.  This is useful since @file{config.h}
+depends upon @file{config.status}, but it is easy for
+ at file{config.status} to change in a way which does not affect
+ at file{config.h}.
+ at end table
+
+ at node Support Files
+ at section Support Files
+
+The GNU configure and build system requires several support files to be
+included with your distribution.  You do not normally need to concern
+yourself with these.  If you are using the Cygnus tree, most are already
+present.  Otherwise, they will be installed with your source by
+ at samp{automake} (with the @samp{--add-missing} option) and
+ at samp{libtoolize}.
+
+You don't have to put the support files in the top level directory.  You
+can put them in a subdirectory, and use the @samp{AC_CONFIG_AUX_DIR}
+macro in @file{configure.in} to tell @samp{automake} and the
+ at file{configure} script where they are.
+
+In this section, I describe the support files, so that you can know what
+they are and why they are there.
+
+ at table @file
+ at item ABOUT-NLS
+Added by automake if you are using gettext.  This is a documentation
+file about the gettext project.
+ at item ansi2knr.c
+Used by an automake generated @file{Makefile} if you put @samp{ansi2knr}
+in @samp{AUTOMAKE_OPTIONS} in @file{Makefile.am}.  This permits
+compiling ANSI C code with a K&R C compiler.
+ at item ansi2knr.1
+The man page which goes with @file{ansi2knr.c}.
+ at item config.guess
+A shell script which determines the configuration name for the system on
+which it is run.
+ at item config.sub
+A shell script which canonicalizes a configuration name entered by a
+user.
+ at item elisp-comp
+Used to compile Emacs LISP files.
+ at item install-sh
+A shell script which installs a program.  This is used if the configure
+script can not find an install binary.
+ at item ltconfig
+Used by libtool.  This is a shell script which configures libtool for
+the particular system on which it is used.
+ at item ltmain.sh
+Used by libtool.  This is the actual libtool script which is used, after
+it is configured by @file{ltconfig} to build a library.
+ at item mdate-sh
+A shell script used by an automake generated @file{Makefile} to pretty
+print the modification time of a file.  This is used to maintain version
+numbers for texinfo files.
+ at item missing
+A shell script used if some tool is missing entirely.  This is used by
+an automake generated @file{Makefile} to avoid certain sorts of
+timestamp problems.
+ at item mkinstalldirs
+A shell script which creates a directory, including all parent
+directories.  This is used by an automake generated @file{Makefile}
+during installation.
+ at item texinfo.tex
+Required if you have any texinfo files.  This is used when converting
+Texinfo files into DVI using @samp{texi2dvi} and @TeX{}.
+ at item ylwrap
+A shell script used by an automake generated @file{Makefile} to run
+programs like @samp{bison}, @samp{yacc}, @samp{flex}, and @samp{lex}.
+These programs default to producing output files with a fixed name, and
+the @file{ylwrap} script runs them in a subdirectory to avoid file name
+conflicts when using a parallel make program.
+ at end table
+
+ at node Configuration Names
+ at chapter Configuration Names
+ at cindex configuration names
+ at cindex configuration triplets
+ at cindex triplets
+ at cindex host names
+ at cindex host triplets
+ at cindex canonical system names
+ at cindex system names
+ at cindex system types
+
+The GNU configure system names all systems using a @dfn{configuration
+name}.  All such names used to be triplets (they may now contain four
+parts in certain cases), and the term @dfn{configuration triplet} is
+still seen.
+
+ at menu
+* Configuration Name Definition::	Configuration Name Definition.
+* Using Configuration Names::		Using Configuration Names.
+ at end menu
+
+ at node Configuration Name Definition
+ at section Configuration Name Definition
+
+This is a string of the form
+ at var{cpu}- at var{manufacturer}- at var{operating_system}.  In some cases,
+this is extended to a four part form:
+ at var{cpu}- at var{manufacturer}- at var{kernel}- at var{operating_system}.
+
+When using a configuration name in a configure option, it is normally
+not necessary to specify an entire name.  In particular, the
+ at var{manufacturer} field is often omitted, leading to strings such as
+ at samp{i386-linux} or @samp{sparc-sunos}.  The shell script
+ at file{config.sub} will translate these shortened strings into the
+canonical form.  autoconf will arrange for @file{config.sub} to be run
+automatically when it is needed.
+
+The fields of a configuration name are as follows:
+
+ at table @var
+ at item cpu
+The type of processor.  This is typically something like @samp{i386} or
+ at samp{sparc}.  More specific variants are used as well, such as
+ at samp{mipsel} to indicate a little endian MIPS processor.
+ at item manufacturer
+A somewhat freeform field which indicates the manufacturer of the
+system.  This is often simply @samp{unknown}.  Other common strings are
+ at samp{pc} for an IBM PC compatible system, or the name of a workstation
+vendor, such as @samp{sun}.
+ at item operating_system
+The name of the operating system which is run on the system.  This will
+be something like @samp{solaris2.5} or @samp{irix6.3}.  There is no
+particular restriction on the version number, and strings like
+ at samp{aix4.1.4.0} are seen.  For an embedded system, which has no
+operating system, this field normally indicates the type of object file
+format, such as @samp{elf} or @samp{coff}.
+ at item kernel
+This is used mainly for GNU/Linux.  A typical GNU/Linux configuration
+name is @samp{i586-pc-linux-gnulibc1}.  In this case the kernel,
+ at samp{linux}, is separated from the operating system, @samp{gnulibc1}.
+ at end table
+
+The shell script @file{config.guess} will normally print the correct
+configuration name for the system on which it is run.  It does by
+running @samp{uname} and by examining other characteristics of the
+system.
+
+Because @file{config.guess} can normally determine the configuration
+name for a machine, it is normally only necessary to specify a
+configuration name when building a cross-compiler or when building using
+a cross-compiler.
+
+ at node Using Configuration Names
+ at section Using Configuration Names
+
+A configure script will sometimes have to make a decision based on a
+configuration name.  You will need to do this if you have to compile
+code differently based on something which can not be tested using a
+standard autoconf feature test.
+
+It is normally better to test for particular features, rather than to
+test for a particular system.  This is because as Unix evolves,
+different systems copy features from one another.  Even if you need to
+determine whether the feature is supported based on a configuration
+name, you should define a macro which describes the feature, rather than
+defining a macro which describes the particular system you are on.
+
+Testing for a particular system is normally done using a case statement
+in @file{configure.in}.  The case statement might look something like
+the following, assuming that @samp{host} is a shell variable holding a
+canonical configuration name (which will be the case if
+ at file{configure.in} uses the @samp{AC_CANONICAL_HOST} or
+ at samp{AC_CANONICAL_SYSTEM} macro).
+
+ at smallexample
+case "$@{host@}" in
+i[3-7]86-*-linux-gnu*) do something ;;
+sparc*-sun-solaris2.[56789]*) do something ;;
+sparc*-sun-solaris*) do something ;;
+mips*-*-elf*) do something ;;
+esac
+ at end smallexample
+
+It is particularly important to use @samp{*} after the operating system
+field, in order to match the version number which will be generated by
+ at file{config.guess}.
+
+In most cases you must be careful to match a range of processor types.
+For most processor families, a trailing @samp{*} suffices, as in
+ at samp{mips*} above.  For the i386 family, something along the lines of
+ at samp{i[3-7]86} suffices at present.  For the m68k family, you will
+need something like @samp{m68*}.  Of course, if you do not need to match
+on the processor, it is simpler to just replace the entire field by a
+ at samp{*}, as in @samp{*-*-irix*}.
+
+ at node Cross Compilation Tools
+ at chapter Cross Compilation Tools
+ at cindex cross tools
+
+The GNU configure and build system can be used to build @dfn{cross
+compilation} tools.  A cross compilation tool is a tool which runs on
+one system and produces code which runs on another system.
+
+ at menu
+* Cross Compilation Concepts::		Cross Compilation Concepts.
+* Host and Target::			Host and Target.
+* Using the Host Type::			Using the Host Type.
+* Specifying the Target::       	Specifying the Target.
+* Using the Target Type::		Using the Target Type.
+* Cross Tools in the Cygnus Tree::	Cross Tools in the Cygnus Tree
+ at end menu
+
+ at node Cross Compilation Concepts
+ at section Cross Compilation Concepts
+
+ at cindex cross compiler
+A compiler which produces programs which run on a different system is a
+cross compilation compiler, or simply a @dfn{cross compiler}.
+Similarly, we speak of cross assemblers, cross linkers, etc.
+
+In the normal case, a compiler produces code which runs on the same
+system as the one on which the compiler runs.  When it is necessary to
+distinguish this case from the cross compilation case, such a compiler
+is called a @dfn{native compiler}.  Similarly, we speak of native
+assemblers, etc.
+
+Although the debugger is not strictly speaking a compilation tool, it is
+nevertheless meaningful to speak of a cross debugger: a debugger which
+is used to debug code which runs on another system.  Everything that is
+said below about configuring cross compilation tools applies to the
+debugger as well.
+
+ at node Host and Target
+ at section Host and Target
+ at cindex host system
+ at cindex target system
+
+When building cross compilation tools, there are two different systems
+involved: the system on which the tools will run, and the system for
+which the tools generate code.
+
+The system on which the tools will run is called the @dfn{host} system.
+
+The system for which the tools generate code is called the @dfn{target}
+system.
+
+For example, suppose you have a compiler which runs on a GNU/Linux
+system and generates ELF programs for a MIPS embedded system.  In this
+case the GNU/Linux system is the host, and the MIPS ELF system is the
+target.  Such a compiler could be called a GNU/Linux cross MIPS ELF
+compiler, or, equivalently, a @samp{i386-linux-gnu} cross
+ at samp{mips-elf} compiler.
+
+Naturally, most programs are not cross compilation tools.  For those
+programs, it does not make sense to speak of a target.  It only makes
+sense to speak of a target for tools like @samp{gcc} or the
+ at samp{binutils} which actually produce running code.  For example, it
+does not make sense to speak of the target of a tool like @samp{bison}
+or @samp{make}.
+
+Most cross compilation tools can also serve as native tools.  For a
+native compilation tool, it is still meaningful to speak of a target.
+For a native tool, the target is the same as the host.  For example, for
+a GNU/Linux native compiler, the host is GNU/Linux, and the target is
+also GNU/Linux.
+
+ at node Using the Host Type
+ at section Using the Host Type
+
+In almost all cases the host system is the system on which you run the
+ at samp{configure} script, and on which you build the tools (for the case
+when they differ, @pxref{Canadian Cross}).
+
+ at cindex @samp{AC_CANONICAL_HOST}
+If your configure script needs to know the configuration name of the
+host system, and the package is not a cross compilation tool and
+therefore does not have a target, put @samp{AC_CANONICAL_HOST} in
+ at file{configure.in}.  This macro will arrange to define a few shell
+variables when the @samp{configure} script is run.
+
+ at table @samp
+ at item host
+The canonical configuration name of the host.  This will normally be
+determined by running the @file{config.guess} shell script, although the
+user is permitted to override this by using an explicit @samp{--host}
+option.
+ at item host_alias
+In the unusual case that the user used an explicit @samp{--host} option,
+this will be the argument to @samp{--host}.  In the normal case, this
+will be the same as the @samp{host} variable.
+ at item host_cpu
+ at itemx host_vendor
+ at itemx host_os
+The first three parts of the canonical configuration name.
+ at end table
+
+The shell variables may be used by putting shell code in
+ at file{configure.in}.  For an example, see @ref{Using Configuration
+Names}.
+
+ at node Specifying the Target
+ at section Specifying the Target
+
+By default, the @samp{configure} script will assume that the target is
+the same as the host.  This is the more common case; for example, it
+leads to a native compiler rather than a cross compiler.
+
+ at cindex @samp{--target} option
+ at cindex target option
+ at cindex configure target
+If you want to build a cross compilation tool, you must specify the
+target explicitly by using the @samp{--target} option when you run
+ at samp{configure}.  The argument to @samp{--target} is the configuration
+name of the system for which you wish to generate code.
+ at xref{Configuration Names}.
+
+For example, to build tools which generate code for a MIPS ELF embedded
+system, you would use @samp{--target mips-elf}.
+
+ at node Using the Target Type
+ at section Using the Target Type
+
+ at cindex @samp{AC_CANONICAL_SYSTEM}
+When writing @file{configure.in} for a cross compilation tool, you will
+need to use information about the target.  To do this, put
+ at samp{AC_CANONICAL_SYSTEM} in @file{configure.in}.
+
+ at samp{AC_CANONICAL_SYSTEM} will look for a @samp{--target} option and
+canonicalize it using the @file{config.sub} shell script.  It will also
+run @samp{AC_CANONICAL_HOST} (@pxref{Using the Host Type}).
+
+The target type will be recorded in the following shell variables.  Note
+that the host versions of these variables will also be defined by
+ at samp{AC_CANONICAL_HOST}.
+
+ at table @samp
+ at item target
+The canonical configuration name of the target.
+ at item target_alias
+The argument to the @samp{--target} option.  If the user did not specify
+a @samp{--target} option, this will be the same as @samp{host_alias}.
+ at item target_cpu
+ at itemx target_vendor
+ at itemx target_os
+The first three parts of the canonical target configuration name.
+ at end table
+
+Note that if @samp{host} and @samp{target} are the same string, you can
+assume a native configuration.  If they are different, you can assume a
+cross configuration.
+
+It is arguably possible for @samp{host} and @samp{target} to represent
+the same system, but for the strings to not be identical.  For example,
+if @samp{config.guess} returns @samp{sparc-sun-sunos4.1.4}, and somebody
+configures with @samp{--target sparc-sun-sunos4.1}, then the slight
+differences between the two versions of SunOS may be unimportant for
+your tool.  However, in the general case it can be quite difficult to
+determine whether the differences between two configuration names are
+significant or not.  Therefore, by convention, if the user specifies a
+ at samp{--target} option without specifying a @samp{--host} option, it is
+assumed that the user wants to configure a cross compilation tool.
+
+The variables @samp{target} and @samp{target_alias} should be handled
+differently.
+
+In general, whenever the user may actually see a string,
+ at samp{target_alias} should be used.  This includes anything which may
+appear in the file system, such as a directory name or part of a tool
+name.  It also includes any tool output, unless it is clearly labelled
+as the canonical target configuration name.  This permits the user to
+use the @samp{--target} option to specify how the tool will appear to
+the outside world.
+
+On the other hand, when checking for characteristics of the target
+system, @samp{target} should be used.  This is because a wide variety of
+ at samp{--target} options may map into the same canonical configuration
+name.  You should not attempt to duplicate the canonicalization done by
+ at samp{config.sub} in your own code.
+
+By convention, cross tools are installed with a prefix of the argument
+used with the @samp{--target} option, also known as @samp{target_alias}
+(@pxref{Using the Target Type}).  If the user does not use the
+ at samp{--target} option, and thus is building a native tool, no prefix is
+used.
+
+For example, if gcc is configured with @samp{--target mips-elf}, then
+the installed binary will be named @samp{mips-elf-gcc}.  If gcc is
+configured without a @samp{--target} option, then the installed binary
+will be named @samp{gcc}.
+
+The autoconf macro @samp{AC_ARG_PROGRAM} will handle this for you.  If
+you are using automake, no more need be done; the programs will
+automatically be installed with the correct prefixes.  Otherwise, see
+the autoconf documentation for @samp{AC_ARG_PROGRAM}.
+
+ at node Cross Tools in the Cygnus Tree
+ at section Cross Tools in the Cygnus Tree
+
+The Cygnus tree is used for various packages including gdb, the GNU
+binutils, and egcs.  It is also, of course, used for Cygnus releases.
+
+In the Cygnus tree, the top level @file{configure} script uses the old
+Cygnus configure system, not autoconf.  The top level @file{Makefile.in}
+is written to build packages based on what is in the source tree, and
+supports building a large number of tools in a single
+ at samp{configure}/@samp{make} step.
+
+The Cygnus tree may be configured with a @samp{--target} option.  The
+ at samp{--target} option applies recursively to every subdirectory, and
+permits building an entire set of cross tools at once.
+
+ at menu
+* Host and Target Libraries::		Host and Target Libraries.
+* Target Library Configure Scripts::	Target Library Configure Scripts.
+* Make Targets in Cygnus Tree::         Make Targets in Cygnus Tree.
+* Target libiberty::			Target libiberty
+ at end menu
+
+ at node Host and Target Libraries
+ at subsection Host and Target Libraries
+
+The Cygnus tree distinguishes host libraries from target libraries.
+
+Host libraries are built with the compiler used to build the programs
+which run on the host, which is called the host compiler.  This includes
+libraries such as @samp{bfd} and @samp{tcl}.  These libraries are built
+with the host compiler, and are linked into programs like the binutils
+or gcc which run on the host.
+
+Target libraries are built with the target compiler.  If gcc is present
+in the source tree, then the target compiler is the gcc that is built
+using the host compiler.  Target libraries are libraries such as
+ at samp{newlib} and @samp{libstdc++}.  These libraries are not linked into
+the host programs, but are instead made available for use with programs
+built with the target compiler.
+
+For the rest of this section, assume that gcc is present in the source
+tree, so that it will be used to build the target libraries.
+
+There is a complication here.  The configure process needs to know which
+compiler you are going to use to build a tool; otherwise, the feature
+tests will not work correctly.  The Cygnus tree handles this by not
+configuring the target libraries until the target compiler is built.  In
+order to permit everything to build using a single
+ at samp{configure}/@samp{make}, the configuration of the target libraries
+is actually triggered during the make step.
+
+When the target libraries are configured, the @samp{--target} option is
+not used.  Instead, the @samp{--host} option is used with the argument
+of the @samp{--target} option for the overall configuration.  If no
+ at samp{--target} option was used for the overall configuration, the
+ at samp{--host} option will be passed with the output of the
+ at file{config.guess} shell script.  Any @samp{--build} option is passed
+down unchanged.
+
+This translation of configuration options is done because since the
+target libraries are compiled with the target compiler, they are being
+built in order to run on the target of the overall configuration.  By
+the definition of host, this means that their host system is the same as
+the target system of the overall configuration.
+
+The same process is used for both a native configuration and a cross
+configuration.  Even when using a native configuration, the target
+libraries will be configured and built using the newly built compiler.
+This is particularly important for the C++ libraries, since there is no
+reason to assume that the C++ compiler used to build the host tools (if
+there even is one) uses the same ABI as the g++ compiler which will be
+used to build the target libraries.
+
+There is one difference between a native configuration and a cross
+configuration.  In a native configuration, the target libraries are
+normally configured and built as siblings of the host tools.  In a cross
+configuration, the target libraries are normally built in a subdirectory
+whose name is the argument to @samp{--target}.  This is mainly for
+historical reasons.
+
+To summarize, running @samp{configure} in the Cygnus tree configures all
+the host libraries and tools, but does not configure any of the target
+libraries.  Running @samp{make} then does the following steps:
+
+ at itemize @bullet
+ at item
+Build the host libraries.
+ at item
+Build the host programs, including gcc.  Note that we call gcc both a
+host program (since it runs on the host) and a target compiler (since it
+generates code for the target).
+ at item
+Using the newly built target compiler, configure the target libraries.
+ at item
+Build the target libraries.
+ at end itemize
+
+The steps need not be done in precisely this order, since they are
+actually controlled by @file{Makefile} targets.
+
+ at node Target Library Configure Scripts
+ at subsection Target Library Configure Scripts
+
+There are a few things you must know in order to write a configure
+script for a target library.  This is just a quick sketch, and beginners
+shouldn't worry if they don't follow everything here.
+
+The target libraries are configured and built using a newly built target
+compiler.  There may not be any startup files or libraries for this
+target compiler.  In fact, those files will probably be built as part of
+some target library, which naturally means that they will not exist when
+your target library is configured.
+
+This means that the configure script for a target library may not use
+any test which requires doing a link.  This unfortunately includes many
+useful autoconf macros, such as @samp{AC_CHECK_FUNCS}.  autoconf macros
+which do a compile but not a link, such as @samp{AC_CHECK_HEADERS}, may
+be used.
+
+This is a severe restriction, but normally not a fatal one, as target
+libraries can often assume the presence of other target libraries, and
+thus know which functions will be available.
+
+As of this writing, the autoconf macro @samp{AC_PROG_CC} does a link to
+make sure that the compiler works.  This may fail in a target library,
+so target libraries must use a different set of macros to locate the
+compiler.  See the @file{configure.in} file in a directory like
+ at file{libiberty} or @file{libgloss} for an example.
+
+As noted in the previous section, target libraries are sometimes built
+in directories which are siblings to the host tools, and are sometimes
+built in a subdirectory.  The @samp{--with-target-subdir} configure
+option will be passed when the library is configured.  Its value will be
+an empty string if the target library is a sibling.  Its value will be
+the name of the subdirectory if the target library is in a subdirectory.
+
+If the overall build is not a native build (i.e., the overall configure
+used the @samp{--target} option), then the library will be configured
+with the @samp{--with-cross-host} option.  The value of this option will
+be the host system of the overall build.  Recall that the host system of
+the library will be the target of the overall build.  If the overall
+build is a native build, the @samp{--with-cross-host} option will not be
+used.
+
+A library which can be built both standalone and as a target library may
+want to install itself into different directories depending upon the
+case.  When built standalone, or when built native, the library should
+be installed in @samp{$(libdir)}.  When built as a target library which
+is not native, the library should be installed in @samp{$(tooldir)/lib}.
+The @samp{--with-cross-host} option may be used to distinguish these
+cases.
+
+This same test of @samp{--with-cross-host} may be used to see whether it
+is OK to use link tests in the configure script.  If the
+ at samp{--with-cross-host} option is not used, then the library is being
+built either standalone or native, and a link should work.
+
+ at node Make Targets in Cygnus Tree
+ at subsection Make Targets in Cygnus Tree
+
+The top level @file{Makefile} in the Cygnus tree defines targets for
+every known subdirectory.
+
+For every subdirectory @var{dir} which holds a host library or program,
+the @file{Makefile} target @samp{all- at var{dir}} will build that library
+or program.
+
+There are dependencies among host tools.  For example, building gcc
+requires first building gas, because the gcc build process invokes the
+target assembler.  These dependencies are reflected in the top level
+ at file{Makefile}.
+
+For every subdirectory @var{dir} which holds a target library, the
+ at file{Makefile} target @samp{configure-target- at var{dir}} will configure
+that library.  The @file{Makefile} target @samp{all-target- at var{dir}}
+will build that library.
+
+Every @samp{configure-target- at var{dir}} target depends upon
+ at samp{all-gcc}, since gcc, the target compiler, is required to configure
+the tool.  Every @samp{all-target- at var{dir}} target depends upon the
+corresponding @samp{configure-target- at var{dir}} target.
+
+There are several other targets which may be of interest for each
+directory: @samp{install- at var{dir}}, @samp{clean- at var{dir}}, and
+ at samp{check- at var{dir}}.  There are also corresponding @samp{target}
+versions of these for the target libraries , such as
+ at samp{install-target- at var{dir}}.
+
+ at node Target libiberty
+ at subsection Target libiberty
+
+The @file{libiberty} subdirectory is currently a special case, in that
+it is the only directory which is built both using the host compiler and
+using the target compiler.
+
+This is because the files in @file{libiberty} are used when building the
+host tools, and they are also incorporated into the @file{libstdc++}
+target library as support code.
+
+This duality does not pose any particular difficulties.  It means that
+there are targets for both @samp{all-libiberty} and
+ at samp{all-target-libiberty}.
+
+In a native configuration, when target libraries are not built in a
+subdirectory, the same objects are normally used as both the host build
+and the target build.  This is normally OK, since libiberty contains
+only C code, and in a native configuration the results of the host
+compiler and the target compiler are normally interoperable.
+
+Irix 6 is again an exception here, since the SGI native compiler
+defaults to using the @samp{O32} ABI, and gcc defaults to using the
+ at samp{N32} ABI.  On Irix 6, the target libraries are built in a
+subdirectory even for a native configuration, avoiding this problem.
+
+There are currently no other libraries built for both the host and the
+target, but there is no conceptual problem with adding more.
+
+ at node Canadian Cross
+ at chapter Canadian Cross
+ at cindex canadian cross
+ at cindex building with a cross compiler
+ at cindex cross compiler, building with
+
+It is possible to use the GNU configure and build system to build a
+program which will run on a system which is different from the system on
+which the tools are built.  In other words, it is possible to build
+programs using a cross compiler.
+
+This is referred to as a @dfn{Canadian Cross}.
+
+ at menu
+* Canadian Cross Example::		Canadian Cross Example.
+* Canadian Cross Concepts::		Canadian Cross Concepts.
+* Build Cross Host Tools::		Build Cross Host Tools.
+* Build and Host Options::		Build and Host Options.
+* CCross not in Cygnus Tree::		Canadian Cross not in Cygnus Tree.
+* CCross in Cygnus Tree::		Canadian Cross in Cygnus Tree.
+* Supporting Canadian Cross::		Supporting Canadian Cross.
+ at end menu
+
+ at node Canadian Cross Example
+ at section Canadian Cross Example
+
+Here is an example of a Canadian Cross.
+
+While running on a GNU/Linux, you can build a program which will run on
+a Solaris system.  You would use a GNU/Linux cross Solaris compiler to
+build the program.
+
+Of course, you could not run the resulting program on your GNU/Linux
+system.  You would have to copy it over to a Solaris system before you
+would run it.
+
+Of course, you could also simply build the programs on the Solaris
+system in the first place.  However, perhaps the Solaris system is not
+available for some reason; perhaps you actually don't have one, but you
+want to build the tools for somebody else to use.  Or perhaps your
+GNU/Linux system is much faster than your Solaris system.
+
+A Canadian Cross build is most frequently used when building programs to
+run on a non-Unix system, such as DOS or Windows.  It may be simpler to
+configure and build on a Unix system than to support the configuration
+machinery on a non-Unix system.
+
+ at node Canadian Cross Concepts
+ at section Canadian Cross Concepts
+
+When building a Canadian Cross, there are at least two different systems
+involved: the system on which the tools are being built, and the system
+on which the tools will run.
+
+The system on which the tools are being built is called the @dfn{build}
+system.
+
+The system on which the tools will run is called the host system.
+
+For example, if you are building a Solaris program on a GNU/Linux
+system, as in the previous section, the build system would be GNU/Linux,
+and the host system would be Solaris.
+
+It is, of course, possible to build a cross compiler using a Canadian
+Cross (i.e., build a cross compiler using a cross compiler).  In this
+case, the system for which the resulting cross compiler generates code
+is called the target system.  (For a more complete discussion of host
+and target systems, @pxref{Host and Target}).
+
+An example of building a cross compiler using a Canadian Cross would be
+building a Windows cross MIPS ELF compiler on a GNU/Linux system.  In
+this case the build system would be GNU/Linux, the host system would be
+Windows, and the target system would be MIPS ELF.
+
+The name Canadian Cross comes from the case when the build, host, and
+target systems are all different.  At the time that these issues were
+all being hashed out, Canada had three national political parties.
+
+ at node Build Cross Host Tools
+ at section Build Cross Host Tools
+
+In order to configure a program for a Canadian Cross build, you must
+first build and install the set of cross tools you will use to build the
+program.
+
+These tools will be build cross host tools.  That is, they will run on
+the build system, and will produce code that runs on the host system.
+
+It is easy to confuse the meaning of build and host here.  Always
+remember that the build system is where you are doing the build, and the
+host system is where the resulting program will run.  Therefore, you
+need a build cross host compiler.
+
+In general, you must have a complete cross environment in order to do
+the build.  This normally means a cross compiler, cross assembler, and
+so forth, as well as libraries and include files for the host system.
+
+ at node Build and Host Options
+ at section Build and Host Options
+ at cindex configuring a canadian cross
+ at cindex canadian cross, configuring
+
+When you run @file{configure}, you must use both the @samp{--build} and
+ at samp{--host} options.
+
+ at cindex @samp{--build} option
+ at cindex build option
+ at cindex configure build system
+The @samp{--build} option is used to specify the configuration name of
+the build system.  This can normally be the result of running the
+ at file{config.guess} shell script, and it is reasonable to use
+ at samp{--build=`config.guess`}.
+
+ at cindex @samp{--host} option
+ at cindex host option
+ at cindex configure host
+The @samp{--host} option is used to specify the configuration name of
+the host system.
+
+As we explained earlier, @file{config.guess} is used to set the default
+value for the @samp{--host} option (@pxref{Using the Host Type}).  We
+can now see that since @file{config.guess} returns the type of system on
+which it is run, it really identifies the build system.  Since the host
+system is normally the same as the build system (i.e., people do not
+normally build using a cross compiler), it is reasonable to use the
+result of @file{config.guess} as the default for the host system when
+the @samp{--host} option is not used.
+
+It might seem that if the @samp{--host} option were used without the
+ at samp{--build} option that the configure script could run
+ at file{config.guess} to determine the build system, and presume a
+Canadian Cross if the result of @file{config.guess} differed from the
+ at samp{--host} option.  However, for historical reasons, some configure
+scripts are routinely run using an explicit @samp{--host} option, rather
+than using the default from @file{config.guess}.  As noted earlier, it
+is difficult or impossible to reliably compare configuration names
+(@pxref{Using the Target Type}).  Therefore, by convention, if the
+ at samp{--host} option is used, but the @samp{--build} option is not used,
+then the build system defaults to the host system.
+
+ at node CCross not in Cygnus Tree
+ at section Canadian Cross not in Cygnus Tree.
+
+If you are not using the Cygnus tree, you must explicitly specify the
+cross tools which you want to use to build the program.  This is done by
+setting environment variables before running the @file{configure}
+script.
+
+You must normally set at least the environment variables @samp{CC},
+ at samp{AR}, and @samp{RANLIB} to the cross tools which you want to use to
+build.
+
+For some programs, you must set additional cross tools as well, such as
+ at samp{AS}, @samp{LD}, or @samp{NM}.
+
+You would set these environment variables to the build cross tools which
+you are going to use.
+
+For example, if you are building a Solaris program on a GNU/Linux
+system, and your GNU/Linux cross Solaris compiler were named
+ at samp{solaris-gcc}, then you would set the environment variable
+ at samp{CC} to @samp{solaris-gcc}.
+
+ at node CCross in Cygnus Tree
+ at section Canadian Cross in Cygnus Tree
+ at cindex canadian cross in cygnus tree
+
+This section describes configuring and building a Canadian Cross when
+using the Cygnus tree.
+
+ at menu
+* Standard Cygnus CCross::	Building a Normal Program.
+* Cross Cygnus CCross::		Building a Cross Program.
+ at end menu
+
+ at node Standard Cygnus CCross
+ at subsection Building a Normal Program
+
+When configuring a Canadian Cross in the Cygnus tree, all the
+appropriate environment variables are automatically set to
+ at samp{@var{host}- at var{tool}}, where @var{host} is the value used for the
+ at samp{--host} option, and @var{tool} is the name of the tool (e.g.,
+ at samp{gcc}, @samp{as}, etc.).  These tools must be on your @samp{PATH}.
+
+Adding a prefix of @var{host} will give the usual name for the build
+cross host tools.  To see this, consider that when these cross tools
+were built, they were configured to run on the build system and to
+produce code for the host system.  That is, they were configured with a
+ at samp{--target} option that is the same as the system which we are now
+calling the host.  Recall that the default name for installed cross
+tools uses the target system as a prefix (@pxref{Using the Target
+Type}).  Since that is the system which we are now calling the host,
+ at var{host} is the right prefix to use.
+
+For example, if you configure with @samp{--build=i386-linux-gnu} and
+ at samp{--host=solaris}, then the Cygnus tree will automatically default
+to using the compiler @samp{solaris-gcc}.  You must have previously
+built and installed this compiler, probably by doing a build with no
+ at samp{--host} option and with a @samp{--target} option of
+ at samp{solaris}.
+
+ at node Cross Cygnus CCross
+ at subsection Building a Cross Program
+
+There are additional considerations if you want to build a cross
+compiler, rather than a native compiler, in the Cygnus tree using a
+Canadian Cross.
+
+When you build a cross compiler using the Cygnus tree, then the target
+libraries will normally be built with the newly built target compiler
+(@pxref{Host and Target Libraries}).  However, this will not work when
+building with a Canadian Cross.  This is because the newly built target
+compiler will be a program which runs on the host system, and therefore
+will not be able to run on the build system.
+
+Therefore, when building a cross compiler with the Cygnus tree, you must
+first install a set of build cross target tools.  These tools will be
+used when building the target libraries.
+
+Note that this is not a requirement of a Canadian Cross in general.  For
+example, it would be possible to build just the host cross target tools
+on the build system, to copy the tools to the host system, and to build
+the target libraries on the host system.  The requirement for build
+cross target tools is imposed by the Cygnus tree, which expects to be
+able to build both host programs and target libraries in a single
+ at samp{configure}/@samp{make} step.  Because it builds these in a single
+step, it expects to be able to build the target libraries on the build
+system, which means that it must use a build cross target toolchain.
+
+For example, suppose you want to build a Windows cross MIPS ELF compiler
+on a GNU/Linux system.  You must have previously installed both a
+GNU/Linux cross Windows compiler and a GNU/Linux cross MIPS ELF
+compiler.
+
+In order to build the Windows (configuration name @samp{i386-cygwin32})
+cross MIPS ELF (configure name @samp{mips-elf}) compiler, you might
+execute the following commands (long command lines are broken across
+lines with a trailing backslash as a continuation character).
+
+ at example
+mkdir linux-x-cygwin32
+cd linux-x-cygwin32
+ at var{srcdir}/configure --target i386-cygwin32 --prefix=@var{installdir} \
+  --exec-prefix=@var{installdir}/H-i386-linux
+make
+make install
+cd ..
+mkdir linux-x-mips-elf
+cd linux-x-mips-elf
+ at var{srcdir}/configure --target mips-elf --prefix=@var{installdir} \
+  --exec-prefix=@var{installdir}/H-i386-linux
+make
+make install
+cd ..
+mkdir cygwin32-x-mips-elf
+cd cygwin32-x-mips-elf
+ at var{srcdir}/configure --build=i386-linux-gnu --host=i386-cygwin32 \
+  --target=mips-elf --prefix=@var{wininstalldir} \
+  --exec-prefix=@var{wininstalldir}/H-i386-cygwin32
+make
+make install
+ at end example
+
+You would then copy the contents of @var{wininstalldir} over to the
+Windows machine, and run the resulting programs.
+
+ at node Supporting Canadian Cross
+ at section Supporting Canadian Cross
+
+If you want to make it possible to build a program you are developing
+using a Canadian Cross, you must take some care when writing your
+configure and make rules.  Simple cases will normally work correctly.
+However, it is not hard to write configure and make tests which will
+fail in a Canadian Cross.
+
+ at menu
+* CCross in Configure::		Supporting Canadian Cross in Configure Scripts.
+* CCross in Make::		Supporting Canadian Cross in Makefiles.
+ at end menu
+
+ at node CCross in Configure
+ at subsection Supporting Canadian Cross in Configure Scripts
+ at cindex canadian cross in configure
+
+In a @file{configure.in} file, after calling @samp{AC_PROG_CC}, you can
+find out whether this is a Canadian Cross configure by examining the
+shell variable @samp{cross_compiling}.  In a Canadian Cross, which means
+that the compiler is a cross compiler, @samp{cross_compiling} will be
+ at samp{yes}.  In a normal configuration, @samp{cross_compiling} will be
+ at samp{no}.
+
+You ordinarily do not need to know the type of the build system in a
+configure script.  However, if you do need that information, you can get
+it by using the macro @samp{AC_CANONICAL_SYSTEM}, the same macro that is
+used to determine the target system.  This macro will set the variables
+ at samp{build}, @samp{build_alias}, @samp{build_cpu}, @samp{build_vendor},
+and @samp{build_os}, which correspond to the similar @samp{target} and
+ at samp{host} variables, except that they describe the build system.
+
+When writing tests in @file{configure.in}, you must remember that you
+want to test the host environment, not the build environment.
+
+Macros like @samp{AC_CHECK_FUNCS} which use the compiler will test the
+host environment.  That is because the tests will be done by running the
+compiler, which is actually a build cross host compiler.  If the
+compiler can find the function, that means that the function is present
+in the host environment.
+
+Tests like @samp{test -f /dev/ptyp0}, on the other hand, will test the
+build environment.  Remember that the configure script is running on the
+build system, not the host system.  If your configure scripts examines
+files, those files will be on the build system.  Whatever you determine
+based on those files may or may not be the case on the host system.
+
+Most autoconf macros will work correctly for a Canadian Cross.  The main
+exception is @samp{AC_TRY_RUN}.  This macro tries to compile and run a
+test program.  This will fail in a Canadian Cross, because the program
+will be compiled for the host system, which means that it will not run
+on the build system.
+
+The @samp{AC_TRY_RUN} macro provides an optional argument to tell the
+configure script what to do in a Canadian Cross.  If that argument is
+not present, you will get a warning when you run @samp{autoconf}:
+ at smallexample
+warning: AC_TRY_RUN called without default to allow cross compiling
+ at end smallexample
+ at noindent
+This tells you that the resulting @file{configure} script will not work
+with a Canadian Cross.
+
+In some cases while it may better to perform a test at configure time,
+it is also possible to perform the test at run time.  In such a case you
+can use the cross compiling argument to @samp{AC_TRY_RUN} to tell your
+program that the test could not be performed at configure time.
+
+There are a few other autoconf macros which will not work correctly with
+a Canadian Cross: a partial list is @samp{AC_FUNC_GETPGRP},
+ at samp{AC_FUNC_SETPGRP}, @samp{AC_FUNC_SETVBUF_REVERSED}, and
+ at samp{AC_SYS_RESTARTABLE_SYSCALLS}.  The @samp{AC_CHECK_SIZEOF} macro is
+generally not very useful with a Canadian Cross; it permits an optional
+argument indicating the default size, but there is no way to know what
+the correct default should be.
+
+ at node CCross in Make
+ at subsection Supporting Canadian Cross in Makefiles.
+ at cindex canadian cross in makefile
+
+The main Canadian Cross issue in a @file{Makefile} arises when you want
+to use a subsidiary program to generate code or data which you will then
+include in your real program.
+
+If you compile this subsidiary program using @samp{$(CC)} in the usual
+way, you will not be able to run it.  This is because @samp{$(CC)} will
+build a program for the host system, but the program is being built on
+the build system.
+
+You must instead use a compiler for the build system, rather than the
+host system.  In the Cygnus tree, this make variable
+ at samp{$(CC_FOR_BUILD)} will hold a compiler for the build system.
+
+Note that you should not include @file{config.h} in a file you are
+compiling with @samp{$(CC_FOR_BUILD)}.  The @file{configure} script will
+build @file{config.h} with information for the host system.  However,
+you are compiling the file using a compiler for the build system (a
+native compiler).  Subsidiary programs are normally simple filters which
+do no user interaction, and it is normally possible to write them in a
+highly portable fashion so that the absence of @file{config.h} is not
+crucial.
+
+ at cindex @samp{HOST_CC}
+The gcc @file{Makefile.in} shows a complex situation in which certain
+files, such as @file{rtl.c}, must be compiled into both subsidiary
+programs run on the build system and into the final program.  This
+approach may be of interest for advanced build system hackers.  Note
+that the build system compiler is rather confusingly called
+ at samp{HOST_CC}.
+
+ at node Cygnus Configure
+ at chapter Cygnus Configure
+ at cindex cygnus configure
+
+The Cygnus configure script predates autoconf.  All of its interesting
+features have been incorporated into autoconf.  No new programs should
+be written to use the Cygnus configure script.
+
+However, the Cygnus configure script is still used in a few places: at
+the top of the Cygnus tree and in a few target libraries in the Cygnus
+tree.  Until those uses have been replaced with autoconf, some brief
+notes are appropriate here.  This is not complete documentation, but it
+should be possible to use this as a guide while examining the scripts
+themselves.
+
+ at menu
+* Cygnus Configure Basics::		Cygnus Configure Basics.
+* Cygnus Configure in C++ Libraries::	Cygnus Configure in C++ Libraries.
+ at end menu
+
+ at node Cygnus Configure Basics
+ at section Cygnus Configure Basics
+
+Cygnus configure does not use any generated files; there is no program
+corresponding to @samp{autoconf}.  Instead, there is a single shell
+script named @samp{configure} which may be found at the top of the
+Cygnus tree.  This shell script was written by hand; it was not
+generated by autoconf, and it is incorrect, and indeed harmful, to run
+ at samp{autoconf} in the top level of a Cygnus tree.
+
+Cygnus configure works in a particular directory by examining the file
+ at file{configure.in} in that directory.  That file is broken into four
+separate shell scripts.
+
+The first is the contents of @file{configure.in} up to a line that
+starts with @samp{# per-host:}.  This is the common part.
+
+The second is the rest of @file{configure.in} up to a line that starts
+with @samp{# per-target:}.  This is the per host part.
+
+The third is the rest of @file{configure.in} up to a line that starts
+with @samp{# post-target:}.  This is the per target part.
+
+The fourth is the remainder of @file{configure.in}.  This is the post
+target part.
+
+If any of these comment lines are missing, the corresponding shell
+script is empty.
+
+Cygnus configure will first execute the common part.  This must set the
+shell variable @samp{srctrigger} to the name of a source file, to
+confirm that Cygnus configure is looking at the right directory.  This
+may set the shell variables @samp{package_makefile_frag} and
+ at samp{package_makefile_rules_frag}.
+
+Cygnus configure will next set the @samp{build} and @samp{host} shell
+variables, and execute the per host part.  This may set the shell
+variable @samp{host_makefile_frag}.
+
+Cygnus configure will next set the @samp{target} variable, and execute
+the per target part.  This may set the shell variable
+ at samp{target_makefile_frag}.
+
+Any of these scripts may set the @samp{subdirs} shell variable.  This
+variable is a list of subdirectories where a @file{Makefile.in} file may
+be found.  Cygnus configure will automatically look for a
+ at file{Makefile.in} file in the current directory.  The @samp{subdirs}
+shell variable is not normally used, and I believe that the only
+directory which uses it at present is @file{newlib}.
+
+For each @file{Makefile.in}, Cygnus configure will automatically create
+a @file{Makefile} by adding definitions for @samp{make} variables such
+as @samp{host} and @samp{target}, and automatically editing the values
+of @samp{make} variables such as @samp{prefix} if they are present.
+
+Also, if any of the @samp{makefile_frag} shell variables are set, Cygnus
+configure will interpret them as file names relative to either the
+working directory or the source directory, and will read the contents of
+the file into the generated @file{Makefile}.  The file contents will be
+read in after the first line in @file{Makefile.in} which starts with
+ at samp{####}.
+
+These @file{Makefile} fragments are used to customize behaviour for a
+particular host or target.  They serve to select particular files to
+compile, and to define particular preprocessor macros by providing
+values for @samp{make} variables which are then used during compilation.
+Cygnus configure, unlike autoconf, normally does not do feature tests,
+and normally requires support to be added manually for each new host.
+
+The @file{Makefile} fragment support is similar to the autoconf
+ at samp{AC_SUBST_FILE} macro.
+
+After creating each @file{Makefile}, the post target script will be run
+(i.e., it may be run several times).  This script may further customize
+the @file{Makefile}.  When it is run, the shell variable @samp{Makefile}
+will hold the name of the @file{Makefile}, including the appropriate
+directory component.
+
+Like an autoconf generated @file{configure} script, Cygnus configure
+will create a file named @file{config.status} which, when run, will
+automatically recreate the configuration.  The @file{config.status} file
+will simply execute the Cygnus configure script again with the
+appropriate arguments.
+
+Any of the parts of @file{configure.in} may set the shell variables
+ at samp{files} and @samp{links}.  Cygnus configure will set up symlinks
+from the names in @samp{links} to the files named in @samp{files}.  This
+is similar to the autoconf @samp{AC_LINK_FILES} macro.
+
+Finally, any of the parts of @file{configure.in} may set the shell
+variable @samp{configdirs} to a set of subdirectories.  If it is set,
+Cygnus configure will recursively run the configure process in each
+subdirectory.  If the subdirectory uses Cygnus configure, it will
+contain a @file{configure.in} file but no @file{configure} file, in
+which case Cygnus configure will invoke itself recursively.  If the
+subdirectory has a @file{configure} file, Cygnus configure assumes that
+it is an autoconf generated @file{configure} script, and simply invokes
+it directly.
+
+ at node Cygnus Configure in C++ Libraries
+ at section Cygnus Configure in C++ Libraries
+ at cindex @file{libstdc++} configure
+ at cindex @file{libio} configure
+ at cindex @file{libg++} configure
+
+The C++ library configure system, written by Per Bothner, deserves
+special mention.  It uses Cygnus configure, but it does feature testing
+like that done by autoconf generated @file{configure} scripts.  This
+approach is used in the libraries @file{libio}, @file{libstdc++}, and
+ at file{libg++}.
+
+Most of the @file{Makefile} information is written out by the shell
+script @file{libio/config.shared}.  Each @file{configure.in} file sets
+certain shell variables, and then invokes @file{config.shared} to create
+two package @file{Makefile} fragments.  These fragments are then
+incorporated into the resulting @file{Makefile} by the Cygnus configure
+script.
+
+The file @file{_G_config.h} is created in the @file{libio} object
+directory by running the shell script @file{libio/gen-params}.  This
+shell script uses feature tests to define macros and typedefs in
+ at file{_G_config.h}.
+
+ at node Multilibs
+ at chapter Multilibs
+ at cindex multilibs
+
+For some targets gcc may have different processor requirements depending
+upon command line options.  An obvious example is the
+ at samp{-msoft-float} option supported on several processors.  This option
+means that the floating point registers are not available, which means
+that floating point operations must be done by calling an emulation
+subroutine rather than by using machine instructions.
+
+For such options, gcc is often configured to compile target libraries
+twice: once with @samp{-msoft-float} and once without.  When gcc
+compiles target libraries more than once, the resulting libraries are
+called @dfn{multilibs}.
+
+Multilibs are not really part of the GNU configure and build system, but
+we discuss them here since they require support in the @file{configure}
+scripts and @file{Makefile}s used for target libraries.
+
+ at menu
+* Multilibs in gcc::		        Multilibs in gcc.
+* Multilibs in Target Libraries::	Multilibs in Target Libraries.
+ at end menu
+
+ at node Multilibs in gcc
+ at section Multilibs in gcc
+
+In gcc, multilibs are defined by setting the variable
+ at samp{MULTILIB_OPTIONS} in the target @file{Makefile} fragment.  Several
+other @samp{MULTILIB} variables may also be defined there.  @xref{Target
+Fragment, , The Target Makefile Fragment, gcc, Using and Porting GNU
+CC}.
+
+If you have built gcc, you can see what multilibs it uses by running it
+with the @samp{-print-multi-lib} option.  The output @samp{.;} means
+that no multilibs are used.  In general, the output is a sequence of
+lines, one per multilib.  The first part of each line, up to the
+ at samp{;}, is the name of the multilib directory.  The second part is a
+list of compiler options separated by @samp{@@} characters.
+
+Multilibs are built in a tree of directories.  The top of the tree,
+represented by @samp{.} in the list of multilib directories, is the
+default library to use when no special compiler options are used.  The
+subdirectories of the tree hold versions of the library to use when
+particular compiler options are used.
+
+ at node Multilibs in Target Libraries
+ at section Multilibs in Target Libraries
+
+The target libraries in the Cygnus tree are automatically built with
+multilibs.  That means that each library is built multiple times.
+
+This default is set in the top level @file{configure.in} file, by adding
+ at samp{--enable-multilib} to the list of arguments passed to configure
+when it is run for the target libraries (@pxref{Host and Target
+Libraries}).
+
+Each target library uses the shell script @file{config-ml.in}, written
+by Doug Evans, to prepare to build target libraries.  This shell script
+is invoked after the @file{Makefile} has been created by the
+ at file{configure} script.  If multilibs are not enabled, it does nothing,
+otherwise it modifies the @file{Makefile} to support multilibs.
+
+The @file{config-ml.in} script makes one copy of the @file{Makefile} for
+each multilib in the appropriate subdirectory.  When configuring in the
+source directory (which is not recommended), it will build a symlink
+tree of the sources in each subdirectory.
+
+The @file{config-ml.in} script sets several variables in the various
+ at file{Makefile}s.  The @file{Makefile.in} must have definitions for
+these variables already; @file{config-ml.in} simply changes the existing
+values.  The @file{Makefile} should use default values for these
+variables which will do the right thing in the subdirectories.
+
+ at table @samp
+ at item MULTISRCTOP
+ at file{config-ml.in} will set this to a sequence of @samp{../} strings,
+where the number of strings is the number of multilib levels in the
+source tree.  The default value should be the empty string.
+ at item MULTIBUILDTOP
+ at file{config-ml.in} will set this to a sequence of @samp{../} strings,
+where the number of strings is number of multilib levels in the object
+directory.  The default value should be the empty string.  This will
+differ from @samp{MULTISRCTOP} when configuring in the source tree
+(which is not recommended).
+ at item MULTIDIRS
+In the top level @file{Makefile} only, @file{config-ml.in} will set this
+to the list of multilib subdirectories.  The default value should be the
+empty string.
+ at item MULTISUBDIR
+ at file{config-ml.in} will set this to the installed subdirectory name to
+use for this subdirectory, with a leading @samp{/}.  The default value
+shold be the empty string.
+ at item MULTIDO
+ at itemx MULTICLEAN
+In the top level @file{Makefile} only, @file{config-ml.in} will set
+these variables to commands to use when doing a recursive make.  These
+variables should both default to the string @samp{true}, so that by
+default nothing happens.
+ at end table
+
+All references to the parent of the source directory should use the
+variable @samp{MULTISRCTOP}.  Instead of writing @samp{$(srcdir)/..},
+you must write @samp{$(srcdir)/$(MULTISRCTOP)..}.
+
+Similarly, references to the parent of the object directory should use
+the variable @samp{MULTIBUILDTOP}.
+
+In the installation target, the libraries should be installed in the
+subdirectory @samp{MULTISUBDIR}.  Instead of installing
+ at samp{$(libdir)/libfoo.a}, install
+ at samp{$(libdir)$(MULTISUBDIR)/libfoo.a}.
+
+The @file{config-ml.in} script also modifies the top level
+ at file{Makefile} to add @samp{multi-do} and @samp{multi-clean} targets
+which are used when building multilibs.
+
+The default target of the @file{Makefile} should include the following
+command:
+ at smallexample
+@@$(MULTIDO) $(FLAGS_TO_PASS) DO=all multi-do
+ at end smallexample
+ at noindent
+This assumes that @samp{$(FLAGS_TO_PASS)} is defined as a set of
+variables to pass to a recursive invocation of @samp{make}.  This will
+build all the multilibs.  Note that the default value of @samp{MULTIDO}
+is @samp{true}, so by default this command will do nothing.  It will
+only do something in the top level @file{Makefile} if multilibs were
+enabled.
+
+The @samp{install} target of the @file{Makefile} should include the
+following command:
+ at smallexample
+@@$(MULTIDO) $(FLAGS_TO_PASS) DO=install multi-do
+ at end smallexample
+
+In general, any operation, other than clean, which should be performed
+on all the multilibs should use a @samp{$(MULTIDO)} line, setting the
+variable @samp{DO} to the target of each recursive call to @samp{make}.
+
+The @samp{clean} targets (@samp{clean}, @samp{mostlyclean}, etc.) should
+use @samp{$(MULTICLEAN)}.  For example, the @samp{clean} target should
+do this:
+ at smallexample
+@@$(MULTICLEAN) DO=clean multi-clean
+ at end smallexample
+
+ at node FAQ
+ at chapter Frequently Asked Questions
+
+ at table @asis
+ at item Which do I run first, @samp{autoconf} or @samp{automake}?
+Except when you first add autoconf or automake support to a package, you
+shouldn't run either by hand.  Instead, configure with the
+ at samp{--enable-maintainer-mode} option, and let @samp{make} take care of
+it.
+
+ at cindex undefined macros
+ at item @samp{autoconf} says something about undefined macros.
+This means that you have macros in your @file{configure.in} which are
+not defined by @samp{autoconf}.  You may be using an old version of
+ at samp{autoconf}; try building and installing a newer one.  Make sure the
+newly installled @samp{autoconf} is first on your @samp{PATH}.  Also,
+see the next question.
+
+ at cindex @samp{CY_GNU_GETTEXT} in @file{configure}
+ at cindex @samp{AM_PROG_LIBTOOL} in @file{configure}
+ at item My @file{configure} script has stuff like @samp{CY_GNU_GETTEXT} in it.
+This means that you have macros in your @file{configure.in} which should
+be defined in your @file{aclocal.m4} file, but aren't.  This usually
+means that @samp{aclocal} was not able to appropriate definitions of the
+macros.  Make sure that you have installed all the packages you need.
+In particular, make sure that you have installed libtool (this is where
+ at samp{AM_PROG_LIBTOOL} is defined) and gettext (this is where
+ at samp{CY_GNU_GETTEXT} is defined, at least in the Cygnus version of
+gettext).
+
+ at cindex @file{Makefile}, garbage characters
+ at item My @file{Makefile} has @samp{@@} characters in it.
+This may mean that you tried to use an autoconf substitution in your
+ at file{Makefile.in} without adding the appropriate @samp{AC_SUBST} call
+to your @file{configure} script.  Or it may just mean that you need to
+rebuild @file{Makefile} in your build directory.  To rebuild
+ at file{Makefile} from @file{Makefile.in}, run the shell script
+ at file{config.status} with no arguments.  If you need to force
+ at file{configure} to run again, first run @samp{config.status --recheck}.
+These runs are normally done automatically by @file{Makefile} targets,
+but if your @file{Makefile} has gotten messed up you'll need to help
+them along.
+
+ at cindex @samp{config.status --recheck}
+ at item Why do I have to run both @samp{config.status --recheck} and @samp{config.status}?
+Normally, you don't; they will be run automatically by @file{Makefile}
+targets.  If you do need to run them, use @samp{config.status --recheck}
+to run the @file{configure} script again with the same arguments as the
+first time you ran it.  Use @samp{config.status} (with no arguments) to
+regenerate all files (@file{Makefile}, @file{config.h}, etc.) based on
+the results of the configure script.  The two cases are separate because
+it isn't always necessary to regenerate all the files after running
+ at samp{config.status --recheck}.  The @file{Makefile} targets generated
+by automake will use the environment variables @samp{CONFIG_FILES} and
+ at samp{CONFIG_HEADERS} to only regenerate files as they are needed.
+
+ at item What is the Cygnus tree?
+The Cygnus tree is used for various packages including gdb, the GNU
+binutils, and egcs.  It is also, of course, used for Cygnus releases.
+It is the build system which was developed at Cygnus, using the Cygnus
+configure script.  It permits building many different packages with a
+single configure and make.  The configure scripts in the tree are being
+converted to autoconf, but the general build structure remains intact.
+
+ at item Why do I have to keep rebuilding and reinstalling the tools?
+I know, it's a pain.  Unfortunately, there are bugs in the tools
+themselves which need to be fixed, and each time that happens everybody
+who uses the tools need to reinstall new versions of them.  I don't know
+if there is going to be a clever fix until the tools stabilize.
+
+ at item Why not just have a Cygnus tree @samp{make} target to update the tools?
+The tools unfortunately need to be installed before they can be used.
+That means that they must be built using an appropriate prefix, and it
+seems unwise to assume that every configuration uses an appropriate
+prefix.  It might be possible to make them work in place, or it might be
+possible to install them in some subdirectory; so far these approaches
+have not been implemented.
+ at end table
+
+ at node Index
+ at unnumbered Index
+
+ at printindex cp
+
+ at contents
+ at bye
diff --git a/etc/fdl.texi b/etc/fdl.texi
index 8b13789..7c26c34 100644
--- a/etc/fdl.texi
+++ b/etc/fdl.texi
@@ -1 +1,505 @@
+ at c The GNU Free Documentation License.
+ at center Version 1.3, 3 November 2008
 
+ at c This file is intended to be included within another document,
+ at c hence no sectioning command or @node.
+
+ at display
+Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ at uref{http://fsf.org/}
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+ at end display
+
+ at enumerate 0
+ at item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{free} in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense.  It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does.  But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book.  We recommend this License
+principally for works whose purpose is instruction or reference.
+
+ at item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License.  Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein.  The ``Document'', below,
+refers to any such manual or work.  Any member of the public is a
+licensee, and is addressed as ``you''.  You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject.  (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.)  The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.  If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant.  The Document may contain zero
+Invariant Sections.  If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.  A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters.  A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text.  A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+ at sc{ascii} without markup, Texinfo input format, La at TeX{} input
+format, @acronym{SGML} or @acronym{XML} using a publicly available
+ at acronym{DTD}, and standard-conforming simple @acronym{HTML},
+PostScript or @acronym{PDF} designed for human modification.  Examples
+of transparent image formats include @acronym{PNG}, @acronym{XCF} and
+ at acronym{JPG}.  Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, @acronym{SGML} or
+ at acronym{XML} for which the @acronym{DTD} and/or processing tools are
+not generally available, and the machine-generated @acronym{HTML},
+PostScript or @acronym{PDF} produced by some word processors for
+output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page.  For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+The ``publisher'' means any person or entity that distributes copies
+of the Document to the public.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language.  (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.)  To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document.  These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+ at item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License.  You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute.  However, you may accept
+compensation in exchange for copies.  If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+ at item
+COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover.  Both covers must also clearly and legibly identify
+you as the publisher of these copies.  The front cover must present
+the full title with all words of the title equally prominent and
+visible.  You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+ at item
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it.  In addition, you must do these things in the Modified Version:
+
+ at enumerate A
+ at item
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document).  You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
+ at item
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
+ at item
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+ at item
+Preserve all the copyright notices of the Document.
+
+ at item
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+ at item
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
+ at item
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+ at item
+Include an unaltered copy of this License.
+
+ at item
+Preserve the section Entitled ``History'', Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page.  If
+there is no section Entitled ``History'' in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
+ at item
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on.  These may be placed in the ``History'' section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
+ at item
+For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
+ at item
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles.  Section numbers
+or the equivalent are not considered part of the section titles.
+
+ at item
+Delete any section Entitled ``Endorsements''.  Such a section
+may not be included in the Modified Version.
+
+ at item
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
+ at item
+Preserve any Warranty Disclaimers.
+ at end enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant.  To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version.  Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity.  If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+ at item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy.  If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''.  You must delete all
+sections Entitled ``Endorsements.''
+
+ at item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+ at item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+ at item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections.  You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers.  In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+ at item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
+ at item
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation 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.  See
+ at uref{http://www.gnu.org/copyleft/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation.  If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.  If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+ at item
+RELICENSING
+
+``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works.  A
+public wiki that anybody can edit is an example of such a server.  A
+``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
+site means any set of copyrightable works thus published on the MMC
+site.
+
+``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+
+``Incorporate'' means to publish or republish a Document, in whole or
+in part, as part of another Document.
+
+An MMC is ``eligible for relicensing'' if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole
+or in part into the MMC, (1) had no cover texts or invariant sections,
+and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
+ at end enumerate
+
+ at page
+ at heading ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+ at smallexample
+ at group
+  Copyright (C)  @var{year}  @var{your name}.
+  Permission is granted to copy, distribute and/or modify this document
+  under the terms of the GNU Free Documentation License, Version 1.3
+  or any later version published by the Free Software Foundation;
+  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+  Texts.  A copy of the license is included in the section entitled ``GNU
+  Free Documentation License''.
+ at end group
+ at end smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with at dots{}Texts.'' line with this:
+
+ at smallexample
+ at group
+    with the Invariant Sections being @var{list their titles}, with
+    the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+    being @var{list}.
+ at end group
+ at end smallexample
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+ at c Local Variables:
+ at c ispell-local-pdict: "ispell-dict"
+ at c End:
diff --git a/etc/gnu-oids.texi b/etc/gnu-oids.texi
index 8b13789..da9146c 100644
--- a/etc/gnu-oids.texi
+++ b/etc/gnu-oids.texi
@@ -1 +1,52 @@
+ at c This table of OID's is included in the GNU Coding Standards.
+ at c
+ at c Copyright 2008, 2009, 2010 Free Software Foundation, Inc.
+ at c
+ at c Copying and distribution of this file, with or without modification,
+ at c are permitted in any medium without royalty provided the copyright
+ at c notice and this notice are preserved.
+ at c
+ at c When adding new OIDs, please add them also to
+ at c http://www.alvestrand.no/objectid/  (except it gets an internal
+ at c server error, so never mind)
+ at c (Our page is http://www.alvestrand.no/objectid/1.3.6.1.4.1.11591.html.)
 
+1.3.6.1.4.1.11591 GNU
+
+1.3.6.1.4.1.11591.1 GNU Radius
+
+1.3.6.1.4.1.11591.2 GnuPG 
+  1.3.6.1.4.1.11591.2.1   notation
+  1.3.6.1.4.1.11591.2.1.1 pkaAddress
+
+1.3.6.1.4.1.11591.3 GNU Radar
+
+1.3.6.1.4.1.11591.4 GNU GSS
+
+ at c Added 2008-10-24 on request from Sergey Poznyakoff <gray at gnu.org.ua>
+1.3.6.1.4.1.11591.5 GNU Mailutils
+
+ at c Added 2009-03-03 on request from Simon Josefsson <simon at josefsson.org>
+1.3.6.1.4.1.11591.6 GNU Shishi
+
+ at c Added 2010-05-17 on request from Eric Blossom <eb at comsec.com>
+1.3.6.1.4.1.11591.7 GNU Radio
+
+1.3.6.1.4.1.11591.12 digestAlgorithm
+  1.3.6.1.4.1.11591.12.2 TIGER/192
+  1.3.6.1.4.1.11591.13 encryptionAlgorithm
+    1.3.6.1.4.1.11591.13.2 Serpent
+      1.3.6.1.4.1.11591.13.2.1 Serpent-128-ECB
+      1.3.6.1.4.1.11591.13.2.2 Serpent-128-CBC
+      1.3.6.1.4.1.11591.13.2.3 Serpent-128-OFB
+      1.3.6.1.4.1.11591.13.2.4 Serpent-128-CFB
+      1.3.6.1.4.1.11591.13.2.21 Serpent-192-ECB
+      1.3.6.1.4.1.11591.13.2.22 Serpent-192-CBC
+      1.3.6.1.4.1.11591.13.2.23 Serpent-192-OFB
+      1.3.6.1.4.1.11591.13.2.24 Serpent-192-CFB
+      1.3.6.1.4.1.11591.13.2.41 Serpent-256-ECB
+      1.3.6.1.4.1.11591.13.2.42 Serpent-256-CBC
+      1.3.6.1.4.1.11591.13.2.43 Serpent-256-OFB
+      1.3.6.1.4.1.11591.13.2.44 Serpent-256-CFB
+  1.3.6.1.4.1.11591.14 CRC algorithms
+    1.3.6.1.4.1.11591.14.1 CRC 32
diff --git a/etc/make-stds.texi b/etc/make-stds.texi
index 8b13789..91a1ed0 100644
--- a/etc/make-stds.texi
+++ b/etc/make-stds.texi
@@ -1 +1,1135 @@
+ at comment This file is included by both standards.texi and make.texinfo.
+ at comment It was broken out of standards.texi on 1/6/93 by roland.
 
+ at node Makefile Conventions
+ at chapter Makefile Conventions
+ at comment standards.texi does not print an index, but make.texinfo does.
+ at cindex makefile, conventions for
+ at cindex conventions for makefiles
+ at cindex standards for makefiles
+
+ at c Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001,
+ at c 2004, 2005, 2006 Free Software Foundation, Inc.
+
+ at c Permission is granted to copy, distribute and/or modify this document
+ at c under the terms of the GNU Free Documentation License, Version 1.2
+ at c or any later version published by the Free Software Foundation;
+ at c with no Invariant Sections, with no
+ at c Front-Cover Texts, and with no Back-Cover Texts.
+ at c A copy of the license is included in the section entitled ``GNU
+ at c Free Documentation License''.
+
+This
+ at ifinfo
+node
+ at end ifinfo
+ at iftex
+ at ifset CODESTD
+section
+ at end ifset
+ at ifclear CODESTD
+chapter
+ at end ifclear
+ at end iftex
+describes conventions for writing the Makefiles for GNU programs.
+Using Automake will help you write a Makefile that follows these
+conventions.
+
+ at menu
+* Makefile Basics::             General conventions for Makefiles.
+* Utilities in Makefiles::      Utilities to be used in Makefiles.
+* Command Variables::           Variables for specifying commands.
+* DESTDIR::                     Supporting staged installs.
+* Directory Variables::         Variables for installation directories.
+* Standard Targets::            Standard targets for users.
+* Install Command Categories::  Three categories of commands in the `install'
+                                  rule: normal, pre-install and post-install.
+ at end menu
+
+ at node Makefile Basics
+ at section General Conventions for Makefiles
+
+Every Makefile should contain this line:
+
+ at example
+SHELL = /bin/sh
+ at end example
+
+ at noindent
+to avoid trouble on systems where the @code{SHELL} variable might be
+inherited from the environment.  (This is never a problem with GNU
+ at code{make}.)
+
+Different @code{make} programs have incompatible suffix lists and
+implicit rules, and this sometimes creates confusion or misbehavior.  So
+it is a good idea to set the suffix list explicitly using only the
+suffixes you need in the particular Makefile, like this:
+
+ at example
+.SUFFIXES:
+.SUFFIXES: .c .o
+ at end example
+
+ at noindent
+The first line clears out the suffix list, the second introduces all
+suffixes which may be subject to implicit rules in this Makefile.
+
+Don't assume that @file{.} is in the path for command execution.  When
+you need to run programs that are a part of your package during the
+make, please make sure that it uses @file{./} if the program is built as
+part of the make or @file{$(srcdir)/} if the file is an unchanging part
+of the source code.  Without one of these prefixes, the current search
+path is used.
+
+The distinction between @file{./} (the @dfn{build directory}) and
+ at file{$(srcdir)/} (the @dfn{source directory}) is important because
+users can build in a separate directory using the @samp{--srcdir} option
+to @file{configure}.  A rule of the form:
+
+ at smallexample
+foo.1 : foo.man sedscript
+        sed -e sedscript foo.man > foo.1
+ at end smallexample
+
+ at noindent
+will fail when the build directory is not the source directory, because
+ at file{foo.man} and @file{sedscript} are in the source directory.
+
+When using GNU @code{make}, relying on @samp{VPATH} to find the source
+file will work in the case where there is a single dependency file,
+since the @code{make} automatic variable @samp{$<} will represent the
+source file wherever it is.  (Many versions of @code{make} set @samp{$<}
+only in implicit rules.)  A Makefile target like
+
+ at smallexample
+foo.o : bar.c
+        $(CC) -I. -I$(srcdir) $(CFLAGS) -c bar.c -o foo.o
+ at end smallexample
+
+ at noindent
+should instead be written as
+
+ at smallexample
+foo.o : bar.c
+        $(CC) -I. -I$(srcdir) $(CFLAGS) -c $< -o $@@
+ at end smallexample
+
+ at noindent
+in order to allow @samp{VPATH} to work correctly.  When the target has
+multiple dependencies, using an explicit @samp{$(srcdir)} is the easiest
+way to make the rule work well.  For example, the target above for
+ at file{foo.1} is best written as:
+
+ at smallexample
+foo.1 : foo.man sedscript
+        sed -e $(srcdir)/sedscript $(srcdir)/foo.man > $@@
+ at end smallexample
+
+GNU distributions usually contain some files which are not source
+files---for example, Info files, and the output from Autoconf, Automake,
+Bison or Flex.  Since these files normally appear in the source
+directory, they should always appear in the source directory, not in the
+build directory.  So Makefile rules to update them should put the
+updated files in the source directory.
+
+However, if a file does not appear in the distribution, then the
+Makefile should not put it in the source directory, because building a
+program in ordinary circumstances should not modify the source directory
+in any way.
+
+Try to make the build and installation targets, at least (and all their
+subtargets) work correctly with a parallel @code{make}.
+
+ at node Utilities in Makefiles
+ at section Utilities in Makefiles
+
+Write the Makefile commands (and any shell scripts, such as
+ at code{configure}) to run in @code{sh}, not in @code{csh}.  Don't use any
+special features of @code{ksh} or @code{bash}.
+
+The @code{configure} script and the Makefile rules for building and
+installation should not use any utilities directly except these:
+
+ at c dd find
+ at c gunzip gzip md5sum
+ at c mkfifo mknod tee uname
+
+ at example
+cat cmp cp diff echo egrep expr false grep install-info
+ln ls mkdir mv pwd rm rmdir sed sleep sort tar test touch true
+ at end example
+
+The compression program @code{gzip} can be used in the @code{dist} rule.
+
+Stick to the generally supported options for these programs.  For
+example, don't use @samp{mkdir -p}, convenient as it may be, because
+most systems don't support it.
+
+It is a good idea to avoid creating symbolic links in makefiles, since a
+few systems don't support them.
+
+The Makefile rules for building and installation can also use compilers
+and related programs, but should do so via @code{make} variables so that the
+user can substitute alternatives.  Here are some of the programs we
+mean:
+
+ at example
+ar bison cc flex install ld ldconfig lex
+make makeinfo ranlib texi2dvi yacc
+ at end example
+
+Use the following @code{make} variables to run those programs:
+
+ at example
+$(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LDCONFIG) $(LEX)
+$(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC)
+ at end example
+
+When you use @code{ranlib} or @code{ldconfig}, you should make sure
+nothing bad happens if the system does not have the program in question.
+Arrange to ignore an error from that command, and print a message before
+the command to tell the user that failure of this command does not mean
+a problem.  (The Autoconf @samp{AC_PROG_RANLIB} macro can help with
+this.)
+
+If you use symbolic links, you should implement a fallback for systems
+that don't have symbolic links.
+
+Additional utilities that can be used via Make variables are:
+
+ at example
+chgrp chmod chown mknod
+ at end example
+
+It is ok to use other utilities in Makefile portions (or scripts)
+intended only for particular systems where you know those utilities
+exist.
+
+ at node Command Variables
+ at section Variables for Specifying Commands
+
+Makefiles should provide variables for overriding certain commands, options,
+and so on.
+
+In particular, you should run most utility programs via variables.
+Thus, if you use Bison, have a variable named @code{BISON} whose default
+value is set with @samp{BISON = bison}, and refer to it with
+ at code{$(BISON)} whenever you need to use Bison.
+
+File management utilities such as @code{ln}, @code{rm}, @code{mv}, and
+so on, need not be referred to through variables in this way, since users
+don't need to replace them with other programs.
+
+Each program-name variable should come with an options variable that is
+used to supply options to the program.  Append @samp{FLAGS} to the
+program-name variable name to get the options variable name---for
+example, @code{BISONFLAGS}.  (The names @code{CFLAGS} for the C
+compiler, @code{YFLAGS} for yacc, and @code{LFLAGS} for lex, are
+exceptions to this rule, but we keep them because they are standard.)
+Use @code{CPPFLAGS} in any compilation command that runs the
+preprocessor, and use @code{LDFLAGS} in any compilation command that
+does linking as well as in any direct use of @code{ld}.
+
+If there are C compiler options that @emph{must} be used for proper
+compilation of certain files, do not include them in @code{CFLAGS}.
+Users expect to be able to specify @code{CFLAGS} freely themselves.
+Instead, arrange to pass the necessary options to the C compiler
+independently of @code{CFLAGS}, by writing them explicitly in the
+compilation commands or by defining an implicit rule, like this:
+
+ at smallexample
+CFLAGS = -g
+ALL_CFLAGS = -I. $(CFLAGS)
+.c.o:
+        $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
+ at end smallexample
+
+Do include the @samp{-g} option in @code{CFLAGS}, because that is not
+ at emph{required} for proper compilation.  You can consider it a default
+that is only recommended.  If the package is set up so that it is
+compiled with GCC by default, then you might as well include @samp{-O}
+in the default value of @code{CFLAGS} as well.
+
+Put @code{CFLAGS} last in the compilation command, after other variables
+containing compiler options, so the user can use @code{CFLAGS} to
+override the others.
+
+ at code{CFLAGS} should be used in every invocation of the C compiler,
+both those which do compilation and those which do linking.
+
+Every Makefile should define the variable @code{INSTALL}, which is the
+basic command for installing a file into the system.
+
+Every Makefile should also define the variables @code{INSTALL_PROGRAM}
+and @code{INSTALL_DATA}.  (The default for @code{INSTALL_PROGRAM} should
+be @code{$(INSTALL)}; the default for @code{INSTALL_DATA} should be
+ at code{$@{INSTALL@} -m 644}.)  Then it should use those variables as the
+commands for actual installation, for executables and non-executables
+respectively.  Minimal use of these variables is as follows:
+
+ at example
+$(INSTALL_PROGRAM) foo $(bindir)/foo
+$(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a
+ at end example
+
+However, it is preferable to support a @code{DESTDIR} prefix on the
+target files, as explained in the next section.
+
+ at noindent
+Always use a file name, not a directory name, as the second argument of
+the installation commands.  Use a separate command for each file to be
+installed.
+
+
+ at node DESTDIR
+ at section @code{DESTDIR}: support for staged installs
+
+ at vindex DESTDIR
+ at cindex staged installs
+ at cindex installations, staged
+
+ at code{DESTDIR} is a variable prepended to each installed target file,
+like this:
+
+ at example
+$(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo
+$(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a
+ at end example
+
+The @code{DESTDIR} variable is specified by the user on the @code{make}
+command line.  For example:
+
+ at example
+make DESTDIR=/tmp/stage install
+ at end example
+
+ at noindent
+ at code{DESTDIR} should be supported only in the @code{install*} and
+ at code{uninstall*} targets, as those are the only targets where it is
+useful.
+
+If your installation step would normally install
+ at file{/usr/local/bin/foo} and @file{/usr/local/lib/libfoo.a}, then an
+installation invoked as in the example above would install
+ at file{/tmp/stage/usr/local/bin/foo} and
+ at file{/tmp/stage/usr/local/lib/libfoo.a} instead.
+
+Prepending the variable @code{DESTDIR} to each target in this way
+provides for @dfn{staged installs}, where the installed files are not
+placed directly into their expected location but are instead copied
+into a temporary location (@code{DESTDIR}).  However, installed files
+maintain their relative directory structure and any embedded file names
+will not be modified.
+
+You should not set the value of @code{DESTDIR} in your @file{Makefile}
+at all; then the files are installed into their expected locations by
+default.  Also, specifying @code{DESTDIR} should not change the
+operation of the software in any way, so its value should not be
+included in any file contents.
+
+ at code{DESTDIR} support is commonly used in package creation.  It is
+also helpful to users who want to understand what a given package will
+install where, and to allow users who don't normally have permissions
+to install into protected areas to build and install before gaining
+those permissions.  Finally, it can be useful with tools such as
+ at code{stow}, where code is installed in one place but made to appear
+to be installed somewhere else using symbolic links or special mount
+operations.  So, we strongly recommend GNU packages support
+ at code{DESTDIR}, though it is not an absolute requirement.
+
+
+ at node Directory Variables
+ at section Variables for Installation Directories
+
+Installation directories should always be named by variables, so it is
+easy to install in a nonstandard place.  The standard names for these
+variables and the values they should have in GNU packages are
+described below.  They are based on a standard file system layout;
+variants of it are used in GNU/Linux and other modern operating
+systems.
+
+Installers are expected to override these values when calling
+ at command{make} (e.g., @kbd{make prefix=/usr install} or
+ at command{configure} (e.g., @kbd{configure --prefix=/usr}).  GNU
+packages should not try to guess which value should be appropriate for
+these variables on the system they are being installed onto: use the
+default settings specified here so that all GNU packages behave
+identically, allowing the installer to achieve any desired layout.
+
+These first two variables set the root for the installation.  All the
+other installation directories should be subdirectories of one of
+these two, and nothing should be directly installed into these two
+directories.
+
+ at table @code
+ at item prefix
+ at vindex prefix
+A prefix used in constructing the default values of the variables listed
+below.  The default value of @code{prefix} should be @file{/usr/local}.
+When building the complete GNU system, the prefix will be empty and
+ at file{/usr} will be a symbolic link to @file{/}.
+(If you are using Autoconf, write it as @samp{@@prefix@@}.)
+
+Running @samp{make install} with a different value of @code{prefix} from
+the one used to build the program should @emph{not} recompile the
+program.
+
+ at item exec_prefix
+ at vindex exec_prefix
+A prefix used in constructing the default values of some of the
+variables listed below.  The default value of @code{exec_prefix} should
+be @code{$(prefix)}.
+(If you are using Autoconf, write it as @samp{@@exec_prefix@@}.)
+
+Generally, @code{$(exec_prefix)} is used for directories that contain
+machine-specific files (such as executables and subroutine libraries),
+while @code{$(prefix)} is used directly for other directories.
+
+Running @samp{make install} with a different value of @code{exec_prefix}
+from the one used to build the program should @emph{not} recompile the
+program.
+ at end table
+
+Executable programs are installed in one of the following directories.
+
+ at table @code
+ at item bindir
+ at vindex bindir
+The directory for installing executable programs that users can run.
+This should normally be @file{/usr/local/bin}, but write it as
+ at file{$(exec_prefix)/bin}.
+(If you are using Autoconf, write it as @samp{@@bindir@@}.)
+
+ at item sbindir
+ at vindex sbindir
+The directory for installing executable programs that can be run from
+the shell, but are only generally useful to system administrators.  This
+should normally be @file{/usr/local/sbin}, but write it as
+ at file{$(exec_prefix)/sbin}.
+(If you are using Autoconf, write it as @samp{@@sbindir@@}.)
+
+ at item libexecdir
+ at vindex libexecdir
+ at comment This paragraph adjusted to avoid overfull hbox --roland 5jul94
+The directory for installing executable programs to be run by other
+programs rather than by users.  This directory should normally be
+ at file{/usr/local/libexec}, but write it as @file{$(exec_prefix)/libexec}.
+(If you are using Autoconf, write it as @samp{@@libexecdir@@}.)
+
+The definition of @samp{libexecdir} is the same for all packages, so
+you should install your data in a subdirectory thereof.  Most packages
+install their data under @file{$(libexecdir)/@var{package-name}/},
+possibly within additional subdirectories thereof, such as
+ at file{$(libexecdir)/@var{package-name}/@var{machine}/@var{version}}.
+ at end table
+
+Data files used by the program during its execution are divided into
+categories in two ways.
+
+ at itemize @bullet
+ at item
+Some files are normally modified by programs; others are never normally
+modified (though users may edit some of these).
+
+ at item
+Some files are architecture-independent and can be shared by all
+machines at a site; some are architecture-dependent and can be shared
+only by machines of the same kind and operating system; others may never
+be shared between two machines.
+ at end itemize
+
+This makes for six different possibilities.  However, we want to
+discourage the use of architecture-dependent files, aside from object
+files and libraries.  It is much cleaner to make other data files
+architecture-independent, and it is generally not hard.
+
+Here are the variables Makefiles should use to specify directories
+to put these various kinds of files in:
+
+ at table @samp
+ at item datarootdir
+The root of the directory tree for read-only architecture-independent
+data files.  This should normally be @file{/usr/local/share}, but
+write it as @file{$(prefix)/share}.  (If you are using Autoconf, write
+it as @samp{@@datarootdir@@}.)  @samp{datadir}'s default value is
+based on this variable; so are @samp{infodir}, @samp{mandir}, and
+others.
+
+ at item datadir
+The directory for installing idiosyncratic read-only
+architecture-independent data files for this program.  This is usually
+the same place as @samp{datarootdir}, but we use the two separate
+variables so that you can move these program-specific files without
+altering the location for Info files, man pages, etc.
+
+This should normally be @file{/usr/local/share}, but write it as
+ at file{$(datarootdir)}.  (If you are using Autoconf, write it as
+ at samp{@@datadir@@}.)
+
+The definition of @samp{datadir} is the same for all packages, so you
+should install your data in a subdirectory thereof.  Most packages
+install their data under @file{$(datadir)/@var{package-name}/}.
+
+ at item sysconfdir
+The directory for installing read-only data files that pertain to a
+single machine--that is to say, files for configuring a host.  Mailer
+and network configuration files, @file{/etc/passwd}, and so forth belong
+here.  All the files in this directory should be ordinary ASCII text
+files.  This directory should normally be @file{/usr/local/etc}, but
+write it as @file{$(prefix)/etc}.
+(If you are using Autoconf, write it as @samp{@@sysconfdir@@}.)
+
+Do not install executables here in this directory (they probably belong
+in @file{$(libexecdir)} or @file{$(sbindir)}).  Also do not install
+files that are modified in the normal course of their use (programs
+whose purpose is to change the configuration of the system excluded).
+Those probably belong in @file{$(localstatedir)}.
+
+ at item sharedstatedir
+The directory for installing architecture-independent data files which
+the programs modify while they run.  This should normally be
+ at file{/usr/local/com}, but write it as @file{$(prefix)/com}.
+(If you are using Autoconf, write it as @samp{@@sharedstatedir@@}.)
+
+ at item localstatedir
+The directory for installing data files which the programs modify while
+they run, and that pertain to one specific machine.  Users should never
+need to modify files in this directory to configure the package's
+operation; put such configuration information in separate files that go
+in @file{$(datadir)} or @file{$(sysconfdir)}.  @file{$(localstatedir)}
+should normally be @file{/usr/local/var}, but write it as
+ at file{$(prefix)/var}.
+(If you are using Autoconf, write it as @samp{@@localstatedir@@}.)
+ at end table
+
+These variables specify the directory for installing certain specific
+types of files, if your program has them.  Every GNU package should
+have Info files, so every program needs @samp{infodir}, but not all
+need @samp{libdir} or @samp{lispdir}.
+
+ at table @samp
+ at item includedir
+ at c rewritten to avoid overfull hbox --roland
+The directory for installing header files to be included by user
+programs with the C @samp{#include} preprocessor directive.  This
+should normally be @file{/usr/local/include}, but write it as
+ at file{$(prefix)/include}.
+(If you are using Autoconf, write it as @samp{@@includedir@@}.)
+
+Most compilers other than GCC do not look for header files in directory
+ at file{/usr/local/include}.  So installing the header files this way is
+only useful with GCC.  Sometimes this is not a problem because some
+libraries are only really intended to work with GCC.  But some libraries
+are intended to work with other compilers.  They should install their
+header files in two places, one specified by @code{includedir} and one
+specified by @code{oldincludedir}.
+
+ at item oldincludedir
+The directory for installing @samp{#include} header files for use with
+compilers other than GCC.  This should normally be @file{/usr/include}.
+(If you are using Autoconf, you can write it as @samp{@@oldincludedir@@}.)
+
+The Makefile commands should check whether the value of
+ at code{oldincludedir} is empty.  If it is, they should not try to use
+it; they should cancel the second installation of the header files.
+
+A package should not replace an existing header in this directory unless
+the header came from the same package.  Thus, if your Foo package
+provides a header file @file{foo.h}, then it should install the header
+file in the @code{oldincludedir} directory if either (1) there is no
+ at file{foo.h} there or (2) the @file{foo.h} that exists came from the Foo
+package.
+
+To tell whether @file{foo.h} came from the Foo package, put a magic
+string in the file---part of a comment---and @code{grep} for that string.
+
+ at item docdir
+The directory for installing documentation files (other than Info) for
+this package.  By default, it should be
+ at file{/usr/local/share/doc/@var{yourpkg}}, but it should be written as
+ at file{$(datarootdir)/doc/@var{yourpkg}}.  (If you are using Autoconf,
+write it as @samp{@@docdir@@}.)  The @var{yourpkg} subdirectory, which
+may include a version number, prevents collisions among files with
+common names, such as @file{README}.
+
+ at item infodir
+The directory for installing the Info files for this package.  By
+default, it should be @file{/usr/local/share/info}, but it should be
+written as @file{$(datarootdir)/info}.  (If you are using Autoconf,
+write it as @samp{@@infodir@@}.)  @code{infodir} is separate from
+ at code{docdir} for compatibility with existing practice.
+
+ at item htmldir
+ at itemx dvidir
+ at itemx pdfdir
+ at itemx psdir
+Directories for installing documentation files in the particular
+format.  They should all be set to @code{$(docdir)} by default.  (If
+you are using Autoconf, write them as @samp{@@htmldir@@},
+ at samp{@@dvidir@@}, etc.)  Packages which supply several translations
+of their documentation should install them in
+ at samp{$(htmldir)/}@var{ll}, @samp{$(pdfdir)/}@var{ll}, etc. where
+ at var{ll} is a locale abbreviation such as @samp{en} or @samp{pt_BR}.
+
+ at item libdir
+The directory for object files and libraries of object code.  Do not
+install executables here, they probably ought to go in @file{$(libexecdir)}
+instead.  The value of @code{libdir} should normally be
+ at file{/usr/local/lib}, but write it as @file{$(exec_prefix)/lib}.
+(If you are using Autoconf, write it as @samp{@@libdir@@}.)
+
+ at item lispdir
+The directory for installing any Emacs Lisp files in this package.  By
+default, it should be @file{/usr/local/share/emacs/site-lisp}, but it
+should be written as @file{$(datarootdir)/emacs/site-lisp}.
+
+If you are using Autoconf, write the default as @samp{@@lispdir@@}.
+In order to make @samp{@@lispdir@@} work, you need the following lines
+in your @file{configure.in} file:
+
+ at example
+lispdir='$@{datarootdir@}/emacs/site-lisp'
+AC_SUBST(lispdir)
+ at end example
+
+ at item localedir
+The directory for installing locale-specific message catalogs for this
+package.  By default, it should be @file{/usr/local/share/locale}, but
+it should be written as @file{$(datarootdir)/locale}.  (If you are
+using Autoconf, write it as @samp{@@localedir@@}.)  This directory
+usually has a subdirectory per locale.
+ at end table
+
+Unix-style man pages are installed in one of the following:
+
+ at table @samp
+ at item mandir
+The top-level directory for installing the man pages (if any) for this
+package.  It will normally be @file{/usr/local/share/man}, but you
+should write it as @file{$(datarootdir)/man}.  (If you are using
+Autoconf, write it as @samp{@@mandir@@}.)
+
+ at item man1dir
+The directory for installing section 1 man pages.  Write it as
+ at file{$(mandir)/man1}.
+ at item man2dir
+The directory for installing section 2 man pages.  Write it as
+ at file{$(mandir)/man2}
+ at item @dots{}
+
+ at strong{Don't make the primary documentation for any GNU software be a
+man page.  Write a manual in Texinfo instead.  Man pages are just for
+the sake of people running GNU software on Unix, which is a secondary
+application only.}
+
+ at item manext
+The file name extension for the installed man page.  This should contain
+a period followed by the appropriate digit; it should normally be @samp{.1}.
+
+ at item man1ext
+The file name extension for installed section 1 man pages.
+ at item man2ext
+The file name extension for installed section 2 man pages.
+ at item @dots{}
+Use these names instead of @samp{manext} if the package needs to install man
+pages in more than one section of the manual.
+ at end table
+
+And finally, you should set the following variable:
+
+ at table @samp
+ at item srcdir
+The directory for the sources being compiled.  The value of this
+variable is normally inserted by the @code{configure} shell script.
+(If you are using Autoconf, use @samp{srcdir = @@srcdir@@}.)
+ at end table
+
+For example:
+
+ at smallexample
+ at c I have changed some of the comments here slightly to fix an overfull
+ at c hbox, so the make manual can format correctly. --roland
+# Common prefix for installation directories.
+# NOTE: This directory must exist when you start the install.
+prefix = /usr/local
+datarootdir = $(prefix)/share
+datadir = $(datarootdir)
+exec_prefix = $(prefix)
+# Where to put the executable for the command `gcc'.
+bindir = $(exec_prefix)/bin
+# Where to put the directories used by the compiler.
+libexecdir = $(exec_prefix)/libexec
+# Where to put the Info files.
+infodir = $(datarootdir)/info
+ at end smallexample
+
+If your program installs a large number of files into one of the
+standard user-specified directories, it might be useful to group them
+into a subdirectory particular to that program.  If you do this, you
+should write the @code{install} rule to create these subdirectories.
+
+Do not expect the user to include the subdirectory name in the value of
+any of the variables listed above.  The idea of having a uniform set of
+variable names for installation directories is to enable the user to
+specify the exact same values for several different GNU packages.  In
+order for this to be useful, all the packages must be designed so that
+they will work sensibly when the user does so.
+
+At times, not all of these variables may be implemented in the current
+release of Autoconf and/or Automake; but as of Autoconf at tie{}2.60, we
+believe all of them are.  When any are missing, the descriptions here
+serve as specifications for what Autoconf will implement.  As a
+programmer, you can either use a development version of Autoconf or
+avoid using these variables until a stable release is made which
+supports them.
+
+
+ at node Standard Targets
+ at section Standard Targets for Users
+
+All GNU programs should have the following targets in their Makefiles:
+
+ at table @samp
+ at item all
+Compile the entire program.  This should be the default target.  This
+target need not rebuild any documentation files; Info files should
+normally be included in the distribution, and DVI (and other
+documentation format) files should be made only when explicitly asked
+for.
+
+By default, the Make rules should compile and link with @samp{-g}, so
+that executable programs have debugging symbols.  Users who don't mind
+being helpless can strip the executables later if they wish.
+
+ at item install
+Compile the program and copy the executables, libraries, and so on to
+the file names where they should reside for actual use.  If there is a
+simple test to verify that a program is properly installed, this target
+should run that test.
+
+Do not strip executables when installing them.  Devil-may-care users can
+use the @code{install-strip} target to do that.
+
+If possible, write the @code{install} target rule so that it does not
+modify anything in the directory where the program was built, provided
+ at samp{make all} has just been done.  This is convenient for building the
+program under one user name and installing it under another.
+
+The commands should create all the directories in which files are to be
+installed, if they don't already exist.  This includes the directories
+specified as the values of the variables @code{prefix} and
+ at code{exec_prefix}, as well as all subdirectories that are needed.
+One way to do this is by means of an @code{installdirs} target
+as described below.
+
+Use @samp{-} before any command for installing a man page, so that
+ at code{make} will ignore any errors.  This is in case there are systems
+that don't have the Unix man page documentation system installed.
+
+The way to install Info files is to copy them into @file{$(infodir)}
+with @code{$(INSTALL_DATA)} (@pxref{Command Variables}), and then run
+the @code{install-info} program if it is present.  @code{install-info}
+is a program that edits the Info @file{dir} file to add or update the
+menu entry for the given Info file; it is part of the Texinfo package.
+Here is a sample rule to install an Info file:
+
+ at comment This example has been carefully formatted for the Make manual.
+ at comment Please do not reformat it without talking to bug-make at gnu.org.
+ at smallexample
+$(DESTDIR)$(infodir)/foo.info: foo.info
+        $(POST_INSTALL)
+# There may be a newer info file in . than in srcdir.
+        -if test -f foo.info; then d=.; \
+         else d=$(srcdir); fi; \
+        $(INSTALL_DATA) $$d/foo.info $(DESTDIR)$@@; \
+# Run install-info only if it exists.
+# Use `if' instead of just prepending `-' to the
+# line so we notice real errors from install-info.
+# We use `$(SHELL) -c' because some shells do not
+# fail gracefully when there is an unknown command.
+        if $(SHELL) -c 'install-info --version' \
+           >/dev/null 2>&1; then \
+          install-info --dir-file=$(DESTDIR)$(infodir)/dir \
+                       $(DESTDIR)$(infodir)/foo.info; \
+        else true; fi
+ at end smallexample
+
+When writing the @code{install} target, you must classify all the
+commands into three categories: normal ones, @dfn{pre-installation}
+commands and @dfn{post-installation} commands.  @xref{Install Command
+Categories}.
+
+ at item install-html
+ at itemx install-dvi
+ at itemx install-pdf
+ at itemx install-ps
+These targets install documentation in formats other than Info;
+they're intended to be called explicitly by the person installing the
+package, if that format is desired.  GNU prefers Info files, so these
+must be installed by the @code{install} target.
+
+When you have many documentation files to install, we recommend that
+you avoid collisions and clutter by arranging for these targets to
+install in subdirectories of the appropriate installation directory,
+such as @code{htmldir}.  As one example, if your package has multiple
+manuals, and you wish to install HTML documentation with many files
+(such as the ``split'' mode output by @code{makeinfo --html}), you'll
+certainly want to use subdirectories, or two nodes with the same name
+in different manuals will overwrite each other.
+
+Please make these @code{install- at var{format}} targets invoke the
+commands for the @var{format} target, for example, by making
+ at var{format} a dependency.
+
+ at item uninstall
+Delete all the installed files---the copies that the @samp{install}
+and @samp{install-*} targets create.
+
+This rule should not modify the directories where compilation is done,
+only the directories where files are installed.
+
+The uninstallation commands are divided into three categories, just like
+the installation commands.  @xref{Install Command Categories}.
+
+ at item install-strip
+Like @code{install}, but strip the executable files while installing
+them.  In simple cases, this target can use the @code{install} target in
+a simple way:
+
+ at smallexample
+install-strip:
+        $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \
+                install
+ at end smallexample
+
+But if the package installs scripts as well as real executables, the
+ at code{install-strip} target can't just refer to the @code{install}
+target; it has to strip the executables but not the scripts.
+
+ at code{install-strip} should not strip the executables in the build
+directory which are being copied for installation.  It should only strip
+the copies that are installed.
+
+Normally we do not recommend stripping an executable unless you are sure
+the program has no bugs.  However, it can be reasonable to install a
+stripped executable for actual execution while saving the unstripped
+executable elsewhere in case there is a bug.
+
+ at comment The gratuitous blank line here is to make the table look better
+ at comment in the printed Make manual.  Please leave it in.
+ at item clean
+
+Delete all files in the current directory that are normally created by
+building the program.  Also delete files in other directories if they
+are created by this makefile.  However, don't delete the files that
+record the configuration.  Also preserve files that could be made by
+building, but normally aren't because the distribution comes with
+them.  There is no need to delete parent directories that were created
+with @samp{mkdir -p}, since they could have existed anyway.
+
+Delete @file{.dvi} files here if they are not part of the distribution.
+
+ at item distclean
+Delete all files in the current directory (or created by this
+makefile) that are created by configuring or building the program.  If
+you have unpacked the source and built the program without creating
+any other files, @samp{make distclean} should leave only the files
+that were in the distribution.  However, there is no need to delete
+parent directories that were created with @samp{mkdir -p}, since they
+could have existed anyway.
+
+ at item mostlyclean
+Like @samp{clean}, but may refrain from deleting a few files that people
+normally don't want to recompile.  For example, the @samp{mostlyclean}
+target for GCC does not delete @file{libgcc.a}, because recompiling it
+is rarely necessary and takes a lot of time.
+
+ at item maintainer-clean
+Delete almost everything that can be reconstructed with this Makefile.
+This typically includes everything deleted by @code{distclean}, plus
+more: C source files produced by Bison, tags tables, Info files, and
+so on.
+
+The reason we say ``almost everything'' is that running the command
+ at samp{make maintainer-clean} should not delete @file{configure} even
+if @file{configure} can be remade using a rule in the Makefile.  More
+generally, @samp{make maintainer-clean} should not delete anything
+that needs to exist in order to run @file{configure} and then begin to
+build the program.  Also, there is no need to delete parent
+directories that were created with @samp{mkdir -p}, since they could
+have existed anyway.  These are the only exceptions;
+ at code{maintainer-clean} should delete everything else that can be
+rebuilt.
+
+The @samp{maintainer-clean} target is intended to be used by a maintainer of
+the package, not by ordinary users.  You may need special tools to
+reconstruct some of the files that @samp{make maintainer-clean} deletes.
+Since these files are normally included in the distribution, we don't
+take care to make them easy to reconstruct.  If you find you need to
+unpack the full distribution again, don't blame us.
+
+To help make users aware of this, the commands for the special
+ at code{maintainer-clean} target should start with these two:
+
+ at smallexample
+@@echo 'This command is intended for maintainers to use; it'
+@@echo 'deletes files that may need special tools to rebuild.'
+ at end smallexample
+
+ at item TAGS
+Update a tags table for this program.
+ at c ADR: how?
+
+ at item info
+Generate any Info files needed.  The best way to write the rules is as
+follows:
+
+ at smallexample
+info: foo.info
+
+foo.info: foo.texi chap1.texi chap2.texi
+        $(MAKEINFO) $(srcdir)/foo.texi
+ at end smallexample
+
+ at noindent
+You must define the variable @code{MAKEINFO} in the Makefile.  It should
+run the @code{makeinfo} program, which is part of the Texinfo
+distribution.
+
+Normally a GNU distribution comes with Info files, and that means the
+Info files are present in the source directory.  Therefore, the Make
+rule for an info file should update it in the source directory.  When
+users build the package, ordinarily Make will not update the Info files
+because they will already be up to date.
+
+ at item dvi
+ at itemx html
+ at itemx pdf
+ at itemx ps
+Generate documentation files in the given format.  These targets
+should always exist, but any or all can be a no-op if the given output
+format cannot be generated.  These targets should not be dependencies
+of the @code{all} target; the user must manually invoke them.
+
+Here's an example rule for generating DVI files from Texinfo:
+
+ at smallexample
+dvi: foo.dvi
+
+foo.dvi: foo.texi chap1.texi chap2.texi
+        $(TEXI2DVI) $(srcdir)/foo.texi
+ at end smallexample
+
+ at noindent
+You must define the variable @code{TEXI2DVI} in the Makefile.  It should
+run the program @code{texi2dvi}, which is part of the Texinfo
+distribution. at footnote{@code{texi2dvi} uses @TeX{} to do the real work
+of formatting. @TeX{} is not distributed with Texinfo.}  Alternatively,
+write just the dependencies, and allow GNU @code{make} to provide the command.
+
+Here's another example, this one for generating HTML from Texinfo:
+
+ at smallexample
+html: foo.html
+
+foo.html: foo.texi chap1.texi chap2.texi
+        $(TEXI2HTML) $(srcdir)/foo.texi
+ at end smallexample
+
+ at noindent
+Again, you would define the variable @code{TEXI2HTML} in the Makefile;
+for example, it might run @code{makeinfo --no-split --html}
+(@command{makeinfo} is part of the Texinfo distribution).
+
+ at item dist
+Create a distribution tar file for this program.  The tar file should be
+set up so that the file names in the tar file start with a subdirectory
+name which is the name of the package it is a distribution for.  This
+name can include the version number.
+
+For example, the distribution tar file of GCC version 1.40 unpacks into
+a subdirectory named @file{gcc-1.40}.
+
+The easiest way to do this is to create a subdirectory appropriately
+named, use @code{ln} or @code{cp} to install the proper files in it, and
+then @code{tar} that subdirectory.
+
+Compress the tar file with @code{gzip}.  For example, the actual
+distribution file for GCC version 1.40 is called @file{gcc-1.40.tar.gz}.
+
+The @code{dist} target should explicitly depend on all non-source files
+that are in the distribution, to make sure they are up to date in the
+distribution.
+ at ifset CODESTD
+ at xref{Releases, , Making Releases}.
+ at end ifset
+ at ifclear CODESTD
+ at xref{Releases, , Making Releases, standards, GNU Coding Standards}.
+ at end ifclear
+
+ at item check
+Perform self-tests (if any).  The user must build the program before
+running the tests, but need not install the program; you should write
+the self-tests so that they work when the program is built but not
+installed.
+ at end table
+
+The following targets are suggested as conventional names, for programs
+in which they are useful.
+
+ at table @code
+ at item installcheck
+Perform installation tests (if any).  The user must build and install
+the program before running the tests.  You should not assume that
+ at file{$(bindir)} is in the search path.
+
+ at item installdirs
+It's useful to add a target named @samp{installdirs} to create the
+directories where files are installed, and their parent directories.
+There is a script called @file{mkinstalldirs} which is convenient for
+this; you can find it in the Texinfo package.
+ at c It's in /gd/gnu/lib/mkinstalldirs.
+You can use a rule like this:
+
+ at comment This has been carefully formatted to look decent in the Make manual.
+ at comment Please be sure not to make it extend any further to the right.--roland
+ at smallexample
+# Make sure all installation directories (e.g. $(bindir))
+# actually exist by making them if necessary.
+installdirs: mkinstalldirs
+        $(srcdir)/mkinstalldirs $(bindir) $(datadir) \
+                                $(libdir) $(infodir) \
+                                $(mandir)
+ at end smallexample
+
+ at noindent
+or, if you wish to support @env{DESTDIR},
+
+ at smallexample
+# Make sure all installation directories (e.g. $(bindir))
+# actually exist by making them if necessary.
+installdirs: mkinstalldirs
+        $(srcdir)/mkinstalldirs \
+            $(DESTDIR)$(bindir) $(DESTDIR)$(datadir) \
+            $(DESTDIR)$(libdir) $(DESTDIR)$(infodir) \
+            $(DESTDIR)$(mandir)
+ at end smallexample
+
+This rule should not modify the directories where compilation is done.
+It should do nothing but create installation directories.
+ at end table
+
+ at node Install Command Categories
+ at section Install Command Categories
+
+ at cindex pre-installation commands
+ at cindex post-installation commands
+When writing the @code{install} target, you must classify all the
+commands into three categories: normal ones, @dfn{pre-installation}
+commands and @dfn{post-installation} commands.
+
+Normal commands move files into their proper places, and set their
+modes.  They may not alter any files except the ones that come entirely
+from the package they belong to.
+
+Pre-installation and post-installation commands may alter other files;
+in particular, they can edit global configuration files or data bases.
+
+Pre-installation commands are typically executed before the normal
+commands, and post-installation commands are typically run after the
+normal commands.
+
+The most common use for a post-installation command is to run
+ at code{install-info}.  This cannot be done with a normal command, since
+it alters a file (the Info directory) which does not come entirely and
+solely from the package being installed.  It is a post-installation
+command because it needs to be done after the normal command which
+installs the package's Info files.
+
+Most programs don't need any pre-installation commands, but we have the
+feature just in case it is needed.
+
+To classify the commands in the @code{install} rule into these three
+categories, insert @dfn{category lines} among them.  A category line
+specifies the category for the commands that follow.
+
+A category line consists of a tab and a reference to a special Make
+variable, plus an optional comment at the end.  There are three
+variables you can use, one for each category; the variable name
+specifies the category.  Category lines are no-ops in ordinary execution
+because these three Make variables are normally undefined (and you
+ at emph{should not} define them in the makefile).
+
+Here are the three possible category lines, each with a comment that
+explains what it means:
+
+ at smallexample
+        $(PRE_INSTALL)     # @r{Pre-install commands follow.}
+        $(POST_INSTALL)    # @r{Post-install commands follow.}
+        $(NORMAL_INSTALL)  # @r{Normal commands follow.}
+ at end smallexample
+
+If you don't use a category line at the beginning of the @code{install}
+rule, all the commands are classified as normal until the first category
+line.  If you don't use any category lines, all the commands are
+classified as normal.
+
+These are the category lines for @code{uninstall}:
+
+ at smallexample
+        $(PRE_UNINSTALL)     # @r{Pre-uninstall commands follow.}
+        $(POST_UNINSTALL)    # @r{Post-uninstall commands follow.}
+        $(NORMAL_UNINSTALL)  # @r{Normal commands follow.}
+ at end smallexample
+
+Typically, a pre-uninstall command would be used for deleting entries
+from the Info directory.
+
+If the @code{install} or @code{uninstall} target has any dependencies
+which act as subroutines of installation, then you should start
+ at emph{each} dependency's commands with a category line, and start the
+main target's commands with a category line also.  This way, you can
+ensure that each command is placed in the right category regardless of
+which of the dependencies actually run.
+
+Pre-installation and post-installation commands should not run any
+programs except for these:
+
+ at example
+[ basename bash cat chgrp chmod chown cmp cp dd diff echo
+egrep expand expr false fgrep find getopt grep gunzip gzip
+hostname install install-info kill ldconfig ln ls md5sum
+mkdir mkfifo mknod mv printenv pwd rm rmdir sed sort tee
+test touch true uname xargs yes
+ at end example
+
+ at cindex binary packages
+The reason for distinguishing the commands in this way is for the sake
+of making binary packages.  Typically a binary package contains all the
+executables and other files that need to be installed, and has its own
+method of installing them---so it does not need to run the normal
+installation commands.  But installing the binary package does need to
+execute the pre-installation and post-installation commands.
+
+Programs to build binary packages work by extracting the
+pre-installation and post-installation commands.  Here is one way of
+extracting the pre-installation commands (the @option{-s} option to
+ at command{make} is needed to silence messages about entering
+subdirectories):
+
+ at smallexample
+make -s -n install -o all \
+      PRE_INSTALL=pre-install \
+      POST_INSTALL=post-install \
+      NORMAL_INSTALL=normal-install \
+  | gawk -f pre-install.awk
+ at end smallexample
+
+ at noindent
+where the file @file{pre-install.awk} could contain this:
+
+ at smallexample
+$0 ~ /^(normal-install|post-install)[ \t]*$/ @{on = 0@}
+on @{print $0@}
+$0 ~ /^pre-install[ \t]*$/ @{on = 1@}
+ at end smallexample
diff --git a/etc/standards.info b/etc/standards.info
new file mode 100644
index 0000000..2d39178
--- /dev/null
+++ b/etc/standards.info
@@ -0,0 +1,5744 @@
+This is standards.info, produced by makeinfo version 4.8 from
+./standards.texi.
+
+INFO-DIR-SECTION GNU organization
+START-INFO-DIR-ENTRY
+* Standards: (standards).       GNU coding standards.
+END-INFO-DIR-ENTRY
+
+   The GNU coding standards, last updated April 12, 2010.
+
+   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+
+File: standards.info,  Node: Top,  Next: Preface,  Prev: (dir),  Up: (dir)
+
+Version
+*******
+
+The GNU coding standards, last updated April 12, 2010.
+
+   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+* Menu:
+
+* Preface::                     About the GNU Coding Standards.
+* Legal Issues::                Keeping free software free.
+* Design Advice::               General program design.
+* Program Behavior::            Program behavior for all programs
+* Writing C::                   Making the best use of C.
+* Documentation::               Documenting programs.
+* Managing Releases::           The release process.
+* References::                  Mentioning non-free software or documentation.
+* GNU Free Documentation License::  Copying and sharing this manual.
+* Index::
+
+
+File: standards.info,  Node: Preface,  Next: Legal Issues,  Prev: Top,  Up: Top
+
+1 About the GNU Coding Standards
+********************************
+
+The GNU Coding Standards were written by Richard Stallman and other GNU
+Project volunteers.  Their purpose is to make the GNU system clean,
+consistent, and easy to install.  This document can also be read as a
+guide to writing portable, robust and reliable programs.  It focuses on
+programs written in C, but many of the rules and principles are useful
+even if you write in another programming language.  The rules often
+state reasons for writing in a certain way.
+
+   If you did not obtain this file directly from the GNU project and
+recently, please check for a newer version.  You can get the GNU Coding
+Standards from the GNU web server in many different formats, including
+the Texinfo source, PDF, HTML, DVI, plain text, and more, at:
+`http://www.gnu.org/prep/standards/'.
+
+   If you are maintaining an official GNU package, in addition to this
+document, please read and follow the GNU maintainer information (*note
+Contents: (maintain)Top.).
+
+   If you want to receive diffs for every change to these GNU documents,
+join the mailing list `gnustandards-commit at gnu.org', via the web
+interface at
+`http://lists.gnu.org/mailman/listinfo/gnustandards-commit'.  Archives
+are also available there.
+
+   Please send corrections or suggestions for this document to
+<bug-standards at gnu.org>.  If you make a suggestion, please include a
+suggested new wording for it, to help us consider the suggestion
+efficiently.  We prefer a context diff to the Texinfo source, but if
+that's difficult for you, you can make a context diff for some other
+version of this document, or propose it in any way that makes it clear.
+The source repository for this document can be found at
+`http://savannah.gnu.org/projects/gnustandards'.
+
+   These standards cover the minimum of what is important when writing a
+GNU package.  Likely, the need for additional standards will come up.
+Sometimes, you might suggest that such standards be added to this
+document.  If you think your standards would be generally useful, please
+do suggest them.
+
+   You should also set standards for your package on many questions not
+addressed or not firmly specified here.  The most important point is to
+be self-consistent--try to stick to the conventions you pick, and try
+to document them as much as possible.  That way, your program will be
+more maintainable by others.
+
+   The GNU Hello program serves as an example of how to follow the GNU
+coding standards for a trivial program.
+`http://www.gnu.org/software/hello/hello.html'.
+
+   This release of the GNU Coding Standards was last updated April 12,
+2010.
+
+
+File: standards.info,  Node: Legal Issues,  Next: Design Advice,  Prev: Preface,  Up: Top
+
+2 Keeping Free Software Free
+****************************
+
+This chapter discusses how you can make sure that GNU software avoids
+legal difficulties, and other related issues.
+
+* Menu:
+
+* Reading Non-Free Code::       Referring to proprietary programs.
+* Contributions::               Accepting contributions.
+* Trademarks::                  How we deal with trademark issues.
+
+
+File: standards.info,  Node: Reading Non-Free Code,  Next: Contributions,  Up: Legal Issues
+
+2.1 Referring to Proprietary Programs
+=====================================
+
+Don't in any circumstances refer to Unix source code for or during your
+work on GNU!  (Or to any other proprietary programs.)
+
+   If you have a vague recollection of the internals of a Unix program,
+this does not absolutely mean you can't write an imitation of it, but
+do try to organize the imitation internally along different lines,
+because this is likely to make the details of the Unix version
+irrelevant and dissimilar to your results.
+
+   For example, Unix utilities were generally optimized to minimize
+memory use; if you go for speed instead, your program will be very
+different.  You could keep the entire input file in memory and scan it
+there instead of using stdio.  Use a smarter algorithm discovered more
+recently than the Unix program.  Eliminate use of temporary files.  Do
+it in one pass instead of two (we did this in the assembler).
+
+   Or, on the contrary, emphasize simplicity instead of speed.  For some
+applications, the speed of today's computers makes simpler algorithms
+adequate.
+
+   Or go for generality.  For example, Unix programs often have static
+tables or fixed-size strings, which make for arbitrary limits; use
+dynamic allocation instead.  Make sure your program handles NULs and
+other funny characters in the input files.  Add a programming language
+for extensibility and write part of the program in that language.
+
+   Or turn some parts of the program into independently usable
+libraries.  Or use a simple garbage collector instead of tracking
+precisely when to free memory, or use a new GNU facility such as
+obstacks.
+
+
+File: standards.info,  Node: Contributions,  Next: Trademarks,  Prev: Reading Non-Free Code,  Up: Legal Issues
+
+2.2 Accepting Contributions
+===========================
+
+If the program you are working on is copyrighted by the Free Software
+Foundation, then when someone else sends you a piece of code to add to
+the program, we need legal papers to use it--just as we asked you to
+sign papers initially.  _Each_ person who makes a nontrivial
+contribution to a program must sign some sort of legal papers in order
+for us to have clear title to the program; the main author alone is not
+enough.
+
+   So, before adding in any contributions from other people, please tell
+us, so we can arrange to get the papers.  Then wait until we tell you
+that we have received the signed papers, before you actually use the
+contribution.
+
+   This applies both before you release the program and afterward.  If
+you receive diffs to fix a bug, and they make significant changes, we
+need legal papers for that change.
+
+   This also applies to comments and documentation files.  For copyright
+law, comments and code are just text.  Copyright applies to all kinds of
+text, so we need legal papers for all kinds.
+
+   We know it is frustrating to ask for legal papers; it's frustrating
+for us as well.  But if you don't wait, you are going out on a limb--for
+example, what if the contributor's employer won't sign a disclaimer?
+You might have to take that code out again!
+
+   You don't need papers for changes of a few lines here or there, since
+they are not significant for copyright purposes.  Also, you don't need
+papers if all you get from the suggestion is some ideas, not actual code
+which you use.  For example, if someone sent you one implementation, but
+you write a different implementation of the same idea, you don't need to
+get papers.
+
+   The very worst thing is if you forget to tell us about the other
+contributor.  We could be very embarrassed in court some day as a
+result.
+
+   We have more detailed advice for maintainers of programs; if you have
+reached the stage of actually maintaining a program for GNU (whether
+released or not), please ask us for a copy.  It is also available
+online for your perusal: `http://www.gnu.org/prep/maintain/'.
+
+
+File: standards.info,  Node: Trademarks,  Prev: Contributions,  Up: Legal Issues
+
+2.3 Trademarks
+==============
+
+Please do not include any trademark acknowledgements in GNU software
+packages or documentation.
+
+   Trademark acknowledgements are the statements that such-and-such is a
+trademark of so-and-so.  The GNU Project has no objection to the basic
+idea of trademarks, but these acknowledgements feel like kowtowing, and
+there is no legal requirement for them, so we don't use them.
+
+   What is legally required, as regards other people's trademarks, is to
+avoid using them in ways which a reader might reasonably understand as
+naming or labeling our own programs or activities.  For example, since
+"Objective C" is (or at least was) a trademark, we made sure to say
+that we provide a "compiler for the Objective C language" rather than
+an "Objective C compiler".  The latter would have been meant as a
+shorter way of saying the former, but it does not explicitly state the
+relationship, so it could be misinterpreted as using "Objective C" as a
+label for the compiler rather than for the language.
+
+   Please don't use "win" as an abbreviation for Microsoft Windows in
+GNU software or documentation.  In hacker terminology, calling
+something a "win" is a form of praise.  If you wish to praise Microsoft
+Windows when speaking on your own, by all means do so, but not in GNU
+software.  Usually we write the name "Windows" in full, but when
+brevity is very important (as in file names and sometimes symbol
+names), we abbreviate it to "w".  For instance, the files and functions
+in Emacs that deal with Windows start with `w32'.
+
+
+File: standards.info,  Node: Design Advice,  Next: Program Behavior,  Prev: Legal Issues,  Up: Top
+
+3 General Program Design
+************************
+
+This chapter discusses some of the issues you should take into account
+when designing your program.
+
+* Menu:
+
+* Source Language::             Which languages to use.
+* Compatibility::               Compatibility with other implementations.
+* Using Extensions::            Using non-standard features.
+* Standard C::                  Using standard C features.
+* Conditional Compilation::     Compiling code only if a conditional is true.
+
+
+File: standards.info,  Node: Source Language,  Next: Compatibility,  Up: Design Advice
+
+3.1 Which Languages to Use
+==========================
+
+When you want to use a language that gets compiled and runs at high
+speed, the best language to use is C.  Using another language is like
+using a non-standard feature: it will cause trouble for users.  Even if
+GCC supports the other language, users may find it inconvenient to have
+to install the compiler for that other language in order to build your
+program.  For example, if you write your program in C++, people will
+have to install the GNU C++ compiler in order to compile your program.
+
+   C has one other advantage over C++ and other compiled languages: more
+people know C, so more people will find it easy to read and modify the
+program if it is written in C.
+
+   So in general it is much better to use C, rather than the comparable
+alternatives.
+
+   But there are two exceptions to that conclusion:
+
+   * It is no problem to use another language to write a tool
+     specifically intended for use with that language.  That is because
+     the only people who want to build the tool will be those who have
+     installed the other language anyway.
+
+   * If an application is of interest only to a narrow part of the
+     community, then the question of which language it is written in
+     has less effect on other people, so you may as well please
+     yourself.
+
+   Many programs are designed to be extensible: they include an
+interpreter for a language that is higher level than C.  Often much of
+the program is written in that language, too.  The Emacs editor
+pioneered this technique.
+
+   The standard extensibility interpreter for GNU software is Guile
+(`http://www.gnu.org/software/guile/'), which implements the language
+Scheme (an especially clean and simple dialect of Lisp).  Guile also
+includes bindings for GTK+/GNOME, making it practical to write modern
+GUI functionality within Guile.  We don't reject programs written in
+other "scripting languages" such as Perl and Python, but using Guile is
+very important for the overall consistency of the GNU system.
+
+
+File: standards.info,  Node: Compatibility,  Next: Using Extensions,  Prev: Source Language,  Up: Design Advice
+
+3.2 Compatibility with Other Implementations
+============================================
+
+With occasional exceptions, utility programs and libraries for GNU
+should be upward compatible with those in Berkeley Unix, and upward
+compatible with Standard C if Standard C specifies their behavior, and
+upward compatible with POSIX if POSIX specifies their behavior.
+
+   When these standards conflict, it is useful to offer compatibility
+modes for each of them.
+
+   Standard C and POSIX prohibit many kinds of extensions.  Feel free
+to make the extensions anyway, and include a `--ansi', `--posix', or
+`--compatible' option to turn them off.  However, if the extension has
+a significant chance of breaking any real programs or scripts, then it
+is not really upward compatible.  So you should try to redesign its
+interface to make it upward compatible.
+
+   Many GNU programs suppress extensions that conflict with POSIX if the
+environment variable `POSIXLY_CORRECT' is defined (even if it is
+defined with a null value).  Please make your program recognize this
+variable if appropriate.
+
+   When a feature is used only by users (not by programs or command
+files), and it is done poorly in Unix, feel free to replace it
+completely with something totally different and better.  (For example,
+`vi' is replaced with Emacs.)  But it is nice to offer a compatible
+feature as well.  (There is a free `vi' clone, so we offer it.)
+
+   Additional useful features are welcome regardless of whether there
+is any precedent for them.
+
+
+File: standards.info,  Node: Using Extensions,  Next: Standard C,  Prev: Compatibility,  Up: Design Advice
+
+3.3 Using Non-standard Features
+===============================
+
+Many GNU facilities that already exist support a number of convenient
+extensions over the comparable Unix facilities.  Whether to use these
+extensions in implementing your program is a difficult question.
+
+   On the one hand, using the extensions can make a cleaner program.
+On the other hand, people will not be able to build the program unless
+the other GNU tools are available.  This might cause the program to
+work on fewer kinds of machines.
+
+   With some extensions, it might be easy to provide both alternatives.
+For example, you can define functions with a "keyword" `INLINE' and
+define that as a macro to expand into either `inline' or nothing,
+depending on the compiler.
+
+   In general, perhaps it is best not to use the extensions if you can
+straightforwardly do without them, but to use the extensions if they
+are a big improvement.
+
+   An exception to this rule are the large, established programs (such
+as Emacs) which run on a great variety of systems.  Using GNU
+extensions in such programs would make many users unhappy, so we don't
+do that.
+
+   Another exception is for programs that are used as part of
+compilation: anything that must be compiled with other compilers in
+order to bootstrap the GNU compilation facilities.  If these require
+the GNU compiler, then no one can compile them without having them
+installed already.  That would be extremely troublesome in certain
+cases.
+
+
+File: standards.info,  Node: Standard C,  Next: Conditional Compilation,  Prev: Using Extensions,  Up: Design Advice
+
+3.4 Standard C and Pre-Standard C
+=================================
+
+1989 Standard C is widespread enough now that it is ok to use its
+features in new programs.  There is one exception: do not ever use the
+"trigraph" feature of Standard C.
+
+   1999 Standard C is not widespread yet, so please do not require its
+features in programs.  It is ok to use its features if they are present.
+
+   However, it is easy to support pre-standard compilers in most
+programs, so if you know how to do that, feel free.  If a program you
+are maintaining has such support, you should try to keep it working.
+
+   To support pre-standard C, instead of writing function definitions in
+standard prototype form,
+
+     int
+     foo (int x, int y)
+     ...
+
+write the definition in pre-standard style like this,
+
+     int
+     foo (x, y)
+          int x, y;
+     ...
+
+and use a separate declaration to specify the argument prototype:
+
+     int foo (int, int);
+
+   You need such a declaration anyway, in a header file, to get the
+benefit of prototypes in all the files where the function is called.
+And once you have the declaration, you normally lose nothing by writing
+the function definition in the pre-standard style.
+
+   This technique does not work for integer types narrower than `int'.
+If you think of an argument as being of a type narrower than `int',
+declare it as `int' instead.
+
+   There are a few special cases where this technique is hard to use.
+For example, if a function argument needs to hold the system type
+`dev_t', you run into trouble, because `dev_t' is shorter than `int' on
+some machines; but you cannot use `int' instead, because `dev_t' is
+wider than `int' on some machines.  There is no type you can safely use
+on all machines in a non-standard definition.  The only way to support
+non-standard C and pass such an argument is to check the width of
+`dev_t' using Autoconf and choose the argument type accordingly.  This
+may not be worth the trouble.
+
+   In order to support pre-standard compilers that do not recognize
+prototypes, you may want to use a preprocessor macro like this:
+
+     /* Declare the prototype for a general external function.  */
+     #if defined (__STDC__) || defined (WINDOWSNT)
+     #define P_(proto) proto
+     #else
+     #define P_(proto) ()
+     #endif
+
+
+File: standards.info,  Node: Conditional Compilation,  Prev: Standard C,  Up: Design Advice
+
+3.5 Conditional Compilation
+===========================
+
+When supporting configuration options already known when building your
+program we prefer using `if (... )' over conditional compilation, as in
+the former case the compiler is able to perform more extensive checking
+of all possible code paths.
+
+   For example, please write
+
+       if (HAS_FOO)
+         ...
+       else
+         ...
+
+instead of:
+
+       #ifdef HAS_FOO
+         ...
+       #else
+         ...
+       #endif
+
+   A modern compiler such as GCC will generate exactly the same code in
+both cases, and we have been using similar techniques with good success
+in several projects.  Of course, the former method assumes that
+`HAS_FOO' is defined as either 0 or 1.
+
+   While this is not a silver bullet solving all portability problems,
+and is not always appropriate, following this policy would have saved
+GCC developers many hours, or even days, per year.
+
+   In the case of function-like macros like `REVERSIBLE_CC_MODE' in GCC
+which cannot be simply used in `if (...)' statements, there is an easy
+workaround.  Simply introduce another macro `HAS_REVERSIBLE_CC_MODE' as
+in the following example:
+
+       #ifdef REVERSIBLE_CC_MODE
+       #define HAS_REVERSIBLE_CC_MODE 1
+       #else
+       #define HAS_REVERSIBLE_CC_MODE 0
+       #endif
+
+
+File: standards.info,  Node: Program Behavior,  Next: Writing C,  Prev: Design Advice,  Up: Top
+
+4 Program Behavior for All Programs
+***********************************
+
+This chapter describes conventions for writing robust software.  It
+also describes general standards for error messages, the command line
+interface, and how libraries should behave.
+
+* Menu:
+
+* Non-GNU Standards::           We consider standards such as POSIX;
+                                  we don't "obey" them.
+* Semantics::                   Writing robust programs.
+* Libraries::                   Library behavior.
+* Errors::                      Formatting error messages.
+* User Interfaces::             Standards about interfaces generally.
+* Graphical Interfaces::        Standards for graphical interfaces.
+* Command-Line Interfaces::     Standards for command line interfaces.
+* Option Table::                Table of long options.
+* OID Allocations::             Table of OID slots for GNU.
+* Memory Usage::                When and how to care about memory needs.
+* File Usage::                  Which files to use, and where.
+
+
+File: standards.info,  Node: Non-GNU Standards,  Next: Semantics,  Up: Program Behavior
+
+4.1 Non-GNU Standards
+=====================
+
+The GNU Project regards standards published by other organizations as
+suggestions, not orders.  We consider those standards, but we do not
+"obey" them.  In developing a GNU program, you should implement an
+outside standard's specifications when that makes the GNU system better
+overall in an objective sense.  When it doesn't, you shouldn't.
+
+   In most cases, following published standards is convenient for
+users--it means that their programs or scripts will work more portably.
+For instance, GCC implements nearly all the features of Standard C as
+specified by that standard.  C program developers would be unhappy if
+it did not.  And GNU utilities mostly follow specifications of POSIX.2;
+shell script writers and users would be unhappy if our programs were
+incompatible.
+
+   But we do not follow either of these specifications rigidly, and
+there are specific points on which we decided not to follow them, so as
+to make the GNU system better for users.
+
+   For instance, Standard C says that nearly all extensions to C are
+prohibited.  How silly!  GCC implements many extensions, some of which
+were later adopted as part of the standard.  If you want these
+constructs to give an error message as "required" by the standard, you
+must specify `--pedantic', which was implemented only so that we can
+say "GCC is a 100% implementation of the standard," not because there
+is any reason to actually use it.
+
+   POSIX.2 specifies that `df' and `du' must output sizes by default in
+units of 512 bytes.  What users want is units of 1k, so that is what we
+do by default.  If you want the ridiculous behavior "required" by
+POSIX, you must set the environment variable `POSIXLY_CORRECT' (which
+was originally going to be named `POSIX_ME_HARDER').
+
+   GNU utilities also depart from the letter of the POSIX.2
+specification when they support long-named command-line options, and
+intermixing options with ordinary arguments.  This minor
+incompatibility with POSIX is never a problem in practice, and it is
+very useful.
+
+   In particular, don't reject a new feature, or remove an old one,
+merely because a standard says it is "forbidden" or "deprecated."
+
+
+File: standards.info,  Node: Semantics,  Next: Libraries,  Prev: Non-GNU Standards,  Up: Program Behavior
+
+4.2 Writing Robust Programs
+===========================
+
+Avoid arbitrary limits on the length or number of _any_ data structure,
+including file names, lines, files, and symbols, by allocating all data
+structures dynamically.  In most Unix utilities, "long lines are
+silently truncated".  This is not acceptable in a GNU utility.
+
+   Utilities reading files should not drop NUL characters, or any other
+nonprinting characters _including those with codes above 0177_.  The
+only sensible exceptions would be utilities specifically intended for
+interface to certain types of terminals or printers that can't handle
+those characters.  Whenever possible, try to make programs work
+properly with sequences of bytes that represent multibyte characters,
+using encodings such as UTF-8 and others.
+
+   Check every system call for an error return, unless you know you
+wish to ignore errors.  Include the system error text (from `perror' or
+equivalent) in _every_ error message resulting from a failing system
+call, as well as the name of the file if any and the name of the
+utility.  Just "cannot open foo.c" or "stat failed" is not sufficient.
+
+   Check every call to `malloc' or `realloc' to see if it returned
+zero.  Check `realloc' even if you are making the block smaller; in a
+system that rounds block sizes to a power of 2, `realloc' may get a
+different block if you ask for less space.
+
+   In Unix, `realloc' can destroy the storage block if it returns zero.
+GNU `realloc' does not have this bug: if it fails, the original block
+is unchanged.  Feel free to assume the bug is fixed.  If you wish to
+run your program on Unix, and wish to avoid lossage in this case, you
+can use the GNU `malloc'.
+
+   You must expect `free' to alter the contents of the block that was
+freed.  Anything you want to fetch from the block, you must fetch before
+calling `free'.
+
+   If `malloc' fails in a noninteractive program, make that a fatal
+error.  In an interactive program (one that reads commands from the
+user), it is better to abort the command and return to the command
+reader loop.  This allows the user to kill other processes to free up
+virtual memory, and then try the command again.
+
+   Use `getopt_long' to decode arguments, unless the argument syntax
+makes this unreasonable.
+
+   When static storage is to be written in during program execution, use
+explicit C code to initialize it.  Reserve C initialized declarations
+for data that will not be changed.
+
+   Try to avoid low-level interfaces to obscure Unix data structures
+(such as file directories, utmp, or the layout of kernel memory), since
+these are less likely to work compatibly.  If you need to find all the
+files in a directory, use `readdir' or some other high-level interface.
+These are supported compatibly by GNU.
+
+   The preferred signal handling facilities are the BSD variant of
+`signal', and the POSIX `sigaction' function; the alternative USG
+`signal' interface is an inferior design.
+
+   Nowadays, using the POSIX signal functions may be the easiest way to
+make a program portable.  If you use `signal', then on GNU/Linux
+systems running GNU libc version 1, you should include `bsd/signal.h'
+instead of `signal.h', so as to get BSD behavior.  It is up to you
+whether to support systems where `signal' has only the USG behavior, or
+give up on them.
+
+   In error checks that detect "impossible" conditions, just abort.
+There is usually no point in printing any message.  These checks
+indicate the existence of bugs.  Whoever wants to fix the bugs will have
+to read the source code and run a debugger.  So explain the problem with
+comments in the source.  The relevant data will be in variables, which
+are easy to examine with the debugger, so there is no point moving them
+elsewhere.
+
+   Do not use a count of errors as the exit status for a program.
+_That does not work_, because exit status values are limited to 8 bits
+(0 through 255).  A single run of the program might have 256 errors; if
+you try to return 256 as the exit status, the parent process will see 0
+as the status, and it will appear that the program succeeded.
+
+   If you make temporary files, check the `TMPDIR' environment
+variable; if that variable is defined, use the specified directory
+instead of `/tmp'.
+
+   In addition, be aware that there is a possible security problem when
+creating temporary files in world-writable directories.  In C, you can
+avoid this problem by creating temporary files in this manner:
+
+     fd = open (filename, O_WRONLY | O_CREAT | O_EXCL, 0600);
+
+or by using the `mkstemps' function from libiberty.
+
+   In bash, use `set -C' to avoid this problem.
+
+
+File: standards.info,  Node: Libraries,  Next: Errors,  Prev: Semantics,  Up: Program Behavior
+
+4.3 Library Behavior
+====================
+
+Try to make library functions reentrant.  If they need to do dynamic
+storage allocation, at least try to avoid any nonreentrancy aside from
+that of `malloc' itself.
+
+   Here are certain name conventions for libraries, to avoid name
+conflicts.
+
+   Choose a name prefix for the library, more than two characters long.
+All external function and variable names should start with this prefix.
+In addition, there should only be one of these in any given library
+member.  This usually means putting each one in a separate source file.
+
+   An exception can be made when two external symbols are always used
+together, so that no reasonable program could use one without the
+other; then they can both go in the same file.
+
+   External symbols that are not documented entry points for the user
+should have names beginning with `_'.  The `_' should be followed by
+the chosen name prefix for the library, to prevent collisions with
+other libraries.  These can go in the same files with user entry points
+if you like.
+
+   Static functions and variables can be used as you like and need not
+fit any naming convention.
+
+
+File: standards.info,  Node: Errors,  Next: User Interfaces,  Prev: Libraries,  Up: Program Behavior
+
+4.4 Formatting Error Messages
+=============================
+
+Error messages from compilers should look like this:
+
+     SOURCE-FILE-NAME:LINENO: MESSAGE
+
+If you want to mention the column number, use one of these formats:
+
+     SOURCE-FILE-NAME:LINENO:COLUMN: MESSAGE
+     SOURCE-FILE-NAME:LINENO.COLUMN: MESSAGE
+
+Line numbers should start from 1 at the beginning of the file, and
+column numbers should start from 1 at the beginning of the line.  (Both
+of these conventions are chosen for compatibility.)  Calculate column
+numbers assuming that space and all ASCII printing characters have
+equal width, and assuming tab stops every 8 columns.
+
+   The error message can also give both the starting and ending
+positions of the erroneous text.  There are several formats so that you
+can avoid redundant information such as a duplicate line number.  Here
+are the possible formats:
+
+     SOURCE-FILE-NAME:LINENO-1.COLUMN-1-LINENO-2.COLUMN-2: MESSAGE
+     SOURCE-FILE-NAME:LINENO-1.COLUMN-1-COLUMN-2: MESSAGE
+     SOURCE-FILE-NAME:LINENO-1-LINENO-2: MESSAGE
+
+When an error is spread over several files, you can use this format:
+
+     FILE-1:LINENO-1.COLUMN-1-FILE-2:LINENO-2.COLUMN-2: MESSAGE
+
+   Error messages from other noninteractive programs should look like
+this:
+
+     PROGRAM:SOURCE-FILE-NAME:LINENO: MESSAGE
+
+when there is an appropriate source file, or like this:
+
+     PROGRAM: MESSAGE
+
+when there is no relevant source file.
+
+   If you want to mention the column number, use this format:
+
+     PROGRAM:SOURCE-FILE-NAME:LINENO:COLUMN: MESSAGE
+
+   In an interactive program (one that is reading commands from a
+terminal), it is better not to include the program name in an error
+message.  The place to indicate which program is running is in the
+prompt or with the screen layout.  (When the same program runs with
+input from a source other than a terminal, it is not interactive and
+would do best to print error messages using the noninteractive style.)
+
+   The string MESSAGE should not begin with a capital letter when it
+follows a program name and/or file name, because that isn't the
+beginning of a sentence.  (The sentence conceptually starts at the
+beginning of the line.)  Also, it should not end with a period.
+
+   Error messages from interactive programs, and other messages such as
+usage messages, should start with a capital letter.  But they should not
+end with a period.
+
+
+File: standards.info,  Node: User Interfaces,  Next: Graphical Interfaces,  Prev: Errors,  Up: Program Behavior
+
+4.5 Standards for Interfaces Generally
+======================================
+
+Please don't make the behavior of a utility depend on the name used to
+invoke it.  It is useful sometimes to make a link to a utility with a
+different name, and that should not change what it does.
+
+   Instead, use a run time option or a compilation switch or both to
+select among the alternate behaviors.
+
+   Likewise, please don't make the behavior of the program depend on the
+type of output device it is used with.  Device independence is an
+important principle of the system's design; do not compromise it merely
+to save someone from typing an option now and then.  (Variation in error
+message syntax when using a terminal is ok, because that is a side issue
+that people do not depend on.)
+
+   If you think one behavior is most useful when the output is to a
+terminal, and another is most useful when the output is a file or a
+pipe, then it is usually best to make the default behavior the one that
+is useful with output to a terminal, and have an option for the other
+behavior.
+
+   Compatibility requires certain programs to depend on the type of
+output device.  It would be disastrous if `ls' or `sh' did not do so in
+the way all users expect.  In some of these cases, we supplement the
+program with a preferred alternate version that does not depend on the
+output device type.  For example, we provide a `dir' program much like
+`ls' except that its default output format is always multi-column
+format.
+
+
+File: standards.info,  Node: Graphical Interfaces,  Next: Command-Line Interfaces,  Prev: User Interfaces,  Up: Program Behavior
+
+4.6 Standards for Graphical Interfaces
+======================================
+
+When you write a program that provides a graphical user interface,
+please make it work with the X Window System and the GTK+ toolkit
+unless the functionality specifically requires some alternative (for
+example, "displaying jpeg images while in console mode").
+
+   In addition, please provide a command-line interface to control the
+functionality.  (In many cases, the graphical user interface can be a
+separate program which invokes the command-line program.)  This is so
+that the same jobs can be done from scripts.
+
+   Please also consider providing a D-bus interface for use from other
+running programs, such as within GNOME.  (GNOME used to use CORBA for
+this, but that is being phased out.)  In addition, consider providing a
+library interface (for use from C), and perhaps a keyboard-driven
+console interface (for use by users from console mode).  Once you are
+doing the work to provide the functionality and the graphical
+interface, these won't be much extra work.
+
+
+File: standards.info,  Node: Command-Line Interfaces,  Next: Option Table,  Prev: Graphical Interfaces,  Up: Program Behavior
+
+4.7 Standards for Command Line Interfaces
+=========================================
+
+It is a good idea to follow the POSIX guidelines for the command-line
+options of a program.  The easiest way to do this is to use `getopt' to
+parse them.  Note that the GNU version of `getopt' will normally permit
+options anywhere among the arguments unless the special argument `--'
+is used.  This is not what POSIX specifies; it is a GNU extension.
+
+   Please define long-named options that are equivalent to the
+single-letter Unix-style options.  We hope to make GNU more user
+friendly this way.  This is easy to do with the GNU function
+`getopt_long'.
+
+   One of the advantages of long-named options is that they can be
+consistent from program to program.  For example, users should be able
+to expect the "verbose" option of any GNU program which has one, to be
+spelled precisely `--verbose'.  To achieve this uniformity, look at the
+table of common long-option names when you choose the option names for
+your program (*note Option Table::).
+
+   It is usually a good idea for file names given as ordinary arguments
+to be input files only; any output files would be specified using
+options (preferably `-o' or `--output').  Even if you allow an output
+file name as an ordinary argument for compatibility, try to provide an
+option as another way to specify it.  This will lead to more consistency
+among GNU utilities, and fewer idiosyncrasies for users to remember.
+
+   All programs should support two standard options: `--version' and
+`--help'.  CGI programs should accept these as command-line options,
+and also if given as the `PATH_INFO'; for instance, visiting
+`http://example.org/p.cgi/--help' in a browser should output the same
+information as invoking `p.cgi --help' from the command line.
+
+* Menu:
+
+* --version::       The standard output for --version.
+* --help::          The standard output for --help.
+
+
+File: standards.info,  Node: --version,  Next: --help,  Up: Command-Line Interfaces
+
+4.7.1 `--version'
+-----------------
+
+The standard `--version' option should direct the program to print
+information about its name, version, origin and legal status, all on
+standard output, and then exit successfully.  Other options and
+arguments should be ignored once this is seen, and the program should
+not perform its normal function.
+
+   The first line is meant to be easy for a program to parse; the
+version number proper starts after the last space.  In addition, it
+contains the canonical name for this program, in this format:
+
+     GNU Emacs 19.30
+
+The program's name should be a constant string; _don't_ compute it from
+`argv[0]'.  The idea is to state the standard or canonical name for the
+program, not its file name.  There are other ways to find out the
+precise file name where a command is found in `PATH'.
+
+   If the program is a subsidiary part of a larger package, mention the
+package name in parentheses, like this:
+
+     emacsserver (GNU Emacs) 19.30
+
+If the package has a version number which is different from this
+program's version number, you can mention the package version number
+just before the close-parenthesis.
+
+   If you _need_ to mention the version numbers of libraries which are
+distributed separately from the package which contains this program,
+you can do so by printing an additional line of version info for each
+library you want to mention.  Use the same format for these lines as for
+the first line.
+
+   Please do not mention all of the libraries that the program uses
+"just for completeness"--that would produce a lot of unhelpful clutter.
+Please mention library version numbers only if you find in practice that
+they are very important to you in debugging.
+
+   The following line, after the version number line or lines, should
+be a copyright notice.  If more than one copyright notice is called
+for, put each on a separate line.
+
+   Next should follow a line stating the license, preferably using one
+of abbrevations below, and a brief statement that the program is free
+software, and that users are free to copy and change it.  Also mention
+that there is no warranty, to the extent permitted by law.  See
+recommended wording below.
+
+   It is ok to finish the output with a list of the major authors of the
+program, as a way of giving credit.
+
+   Here's an example of output that follows these rules:
+
+     GNU hello 2.3
+     Copyright (C) 2007 Free Software Foundation, Inc.
+     License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+     This is free software: you are free to change and redistribute it.
+     There is NO WARRANTY, to the extent permitted by law.
+
+   You should adapt this to your program, of course, filling in the
+proper year, copyright holder, name of program, and the references to
+distribution terms, and changing the rest of the wording as necessary.
+
+   This copyright notice only needs to mention the most recent year in
+which changes were made--there's no need to list the years for previous
+versions' changes.  You don't have to mention the name of the program in
+these notices, if that is inconvenient, since it appeared in the first
+line.  (The rules are different for copyright notices in source files;
+*note Copyright Notices: (maintain)Copyright Notices.)
+
+   Translations of the above lines must preserve the validity of the
+copyright notices (*note Internationalization::).  If the translation's
+character set supports it, the `(C)' should be replaced with the
+copyright symbol, as follows:
+
+   (the official copyright symbol, which is the letter C in a circle);
+
+   Write the word "Copyright" exactly like that, in English.  Do not
+translate it into another language.  International treaties recognize
+the English word "Copyright"; translations into other languages do not
+have legal significance.
+
+   Finally, here is the table of our suggested license abbreviations.
+Any abbreviation can be followed by `vVERSION[+]', meaning that
+particular version, or later versions with the `+', as shown above.
+
+   In the case of exceptions for extra permissions with the GPL, we use
+`/' for a separator; the version number can follow the license
+abbreviation as usual, as in the examples below.
+
+GPL
+     GNU General Public License, `http://www.gnu.org/licenses/gpl.html'.
+
+LGPL
+     GNU Lesser General Public License,
+     `http://www.gnu.org/licenses/lgpl.html'.
+
+GPL/Ada
+     GNU GPL with the exception for Ada.
+
+Apache
+     The Apache Software Foundation license,
+     `http://www.apache.org/licenses'.
+
+Artistic
+     The Artistic license used for Perl,
+     `http://www.perlfoundation.org/legal'.
+
+Expat
+     The Expat license, `http://www.jclark.com/xml/copying.txt'.
+
+MPL
+     The Mozilla Public License, `http://www.mozilla.org/MPL/'.
+
+OBSD
+     The original (4-clause) BSD license, incompatible with the GNU GPL
+     `http://www.xfree86.org/3.3.6/COPYRIGHT2.html#6'.
+
+PHP
+     The license used for PHP, `http://www.php.net/license/'.
+
+public domain
+     The non-license that is being in the public domain,
+     `http://www.gnu.org/licenses/license-list.html#PublicDomain'.
+
+Python
+     The license for Python, `http://www.python.org/2.0.1/license.html'.
+
+RBSD
+     The revised (3-clause) BSD, compatible with the GNU GPL,
+     `http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5'.
+
+X11
+     The simple non-copyleft license used for most versions of the X
+     Window System, `http://www.xfree86.org/3.3.6/COPYRIGHT2.html#3'.
+
+Zlib
+     The license for Zlib, `http://www.gzip.org/zlib/zlib_license.html'.
+
+
+   More information about these licenses and many more are on the GNU
+licensing web pages, `http://www.gnu.org/licenses/license-list.html'.
+
+
+File: standards.info,  Node: --help,  Prev: --version,  Up: Command-Line Interfaces
+
+4.7.2 `--help'
+--------------
+
+The standard `--help' option should output brief documentation for how
+to invoke the program, on standard output, then exit successfully.
+Other options and arguments should be ignored once this is seen, and
+the program should not perform its normal function.
+
+   Near the end of the `--help' option's output, please place lines
+giving the email address for bug reports, the package's home page
+(normally <http://www.gnu.org/software/PKG>, and the general page for
+help using GNU programs.  The format should be like this:
+
+     Report bugs to: MAILING-ADDRESS
+     PKG home page: <http://www.gnu.org/software/PKG/>
+     General help using GNU software: <http://www.gnu.org/gethelp/>
+
+   It is ok to mention other appropriate mailing lists and web pages.
+
+
+File: standards.info,  Node: Option Table,  Next: OID Allocations,  Prev: Command-Line Interfaces,  Up: Program Behavior
+
+4.8 Table of Long Options
+=========================
+
+Here is a table of long options used by GNU programs.  It is surely
+incomplete, but we aim to list all the options that a new program might
+want to be compatible with.  If you use names not already in the table,
+please send <bug-standards at gnu.org> a list of them, with their
+meanings, so we can update the table.
+
+`after-date'
+     `-N' in `tar'.
+
+`all'
+     `-a' in `du', `ls', `nm', `stty', `uname', and `unexpand'.
+
+`all-text'
+     `-a' in `diff'.
+
+`almost-all'
+     `-A' in `ls'.
+
+`append'
+     `-a' in `etags', `tee', `time'; `-r' in `tar'.
+
+`archive'
+     `-a' in `cp'.
+
+`archive-name'
+     `-n' in `shar'.
+
+`arglength'
+     `-l' in `m4'.
+
+`ascii'
+     `-a' in `diff'.
+
+`assign'
+     `-v' in `gawk'.
+
+`assume-new'
+     `-W' in `make'.
+
+`assume-old'
+     `-o' in `make'.
+
+`auto-check'
+     `-a' in `recode'.
+
+`auto-pager'
+     `-a' in `wdiff'.
+
+`auto-reference'
+     `-A' in `ptx'.
+
+`avoid-wraps'
+     `-n' in `wdiff'.
+
+`background'
+     For server programs, run in the background.
+
+`backward-search'
+     `-B' in `ctags'.
+
+`basename'
+     `-f' in `shar'.
+
+`batch'
+     Used in GDB.
+
+`baud'
+     Used in GDB.
+
+`before'
+     `-b' in `tac'.
+
+`binary'
+     `-b' in `cpio' and `diff'.
+
+`bits-per-code'
+     `-b' in `shar'.
+
+`block-size'
+     Used in `cpio' and `tar'.
+
+`blocks'
+     `-b' in `head' and `tail'.
+
+`break-file'
+     `-b' in `ptx'.
+
+`brief'
+     Used in various programs to make output shorter.
+
+`bytes'
+     `-c' in `head', `split', and `tail'.
+
+`c++'
+     `-C' in `etags'.
+
+`catenate'
+     `-A' in `tar'.
+
+`cd'
+     Used in various programs to specify the directory to use.
+
+`changes'
+     `-c' in `chgrp' and `chown'.
+
+`classify'
+     `-F' in `ls'.
+
+`colons'
+     `-c' in `recode'.
+
+`command'
+     `-c' in `su'; `-x' in GDB.
+
+`compare'
+     `-d' in `tar'.
+
+`compat'
+     Used in `gawk'.
+
+`compress'
+     `-Z' in `tar' and `shar'.
+
+`concatenate'
+     `-A' in `tar'.
+
+`confirmation'
+     `-w' in `tar'.
+
+`context'
+     Used in `diff'.
+
+`copyleft'
+     `-W copyleft' in `gawk'.
+
+`copyright'
+     `-C' in `ptx', `recode', and `wdiff'; `-W copyright' in `gawk'.
+
+`core'
+     Used in GDB.
+
+`count'
+     `-q' in `who'.
+
+`count-links'
+     `-l' in `du'.
+
+`create'
+     Used in `tar' and `cpio'.
+
+`cut-mark'
+     `-c' in `shar'.
+
+`cxref'
+     `-x' in `ctags'.
+
+`date'
+     `-d' in `touch'.
+
+`debug'
+     `-d' in `make' and `m4'; `-t' in Bison.
+
+`define'
+     `-D' in `m4'.
+
+`defines'
+     `-d' in Bison and `ctags'.
+
+`delete'
+     `-D' in `tar'.
+
+`dereference'
+     `-L' in `chgrp', `chown', `cpio', `du', `ls', and `tar'.
+
+`dereference-args'
+     `-D' in `du'.
+
+`device'
+     Specify an I/O device (special file name).
+
+`diacritics'
+     `-d' in `recode'.
+
+`dictionary-order'
+     `-d' in `look'.
+
+`diff'
+     `-d' in `tar'.
+
+`digits'
+     `-n' in `csplit'.
+
+`directory'
+     Specify the directory to use, in various programs.  In `ls', it
+     means to show directories themselves rather than their contents.
+     In `rm' and `ln', it means to not treat links to directories
+     specially.
+
+`discard-all'
+     `-x' in `strip'.
+
+`discard-locals'
+     `-X' in `strip'.
+
+`dry-run'
+     `-n' in `make'.
+
+`ed'
+     `-e' in `diff'.
+
+`elide-empty-files'
+     `-z' in `csplit'.
+
+`end-delete'
+     `-x' in `wdiff'.
+
+`end-insert'
+     `-z' in `wdiff'.
+
+`entire-new-file'
+     `-N' in `diff'.
+
+`environment-overrides'
+     `-e' in `make'.
+
+`eof'
+     `-e' in `xargs'.
+
+`epoch'
+     Used in GDB.
+
+`error-limit'
+     Used in `makeinfo'.
+
+`error-output'
+     `-o' in `m4'.
+
+`escape'
+     `-b' in `ls'.
+
+`exclude-from'
+     `-X' in `tar'.
+
+`exec'
+     Used in GDB.
+
+`exit'
+     `-x' in `xargs'.
+
+`exit-0'
+     `-e' in `unshar'.
+
+`expand-tabs'
+     `-t' in `diff'.
+
+`expression'
+     `-e' in `sed'.
+
+`extern-only'
+     `-g' in `nm'.
+
+`extract'
+     `-i' in `cpio'; `-x' in `tar'.
+
+`faces'
+     `-f' in `finger'.
+
+`fast'
+     `-f' in `su'.
+
+`fatal-warnings'
+     `-E' in `m4'.
+
+`file'
+     `-f' in `gawk', `info', `make', `mt', `sed', and `tar'.
+
+`field-separator'
+     `-F' in `gawk'.
+
+`file-prefix'
+     `-b' in Bison.
+
+`file-type'
+     `-F' in `ls'.
+
+`files-from'
+     `-T' in `tar'.
+
+`fill-column'
+     Used in `makeinfo'.
+
+`flag-truncation'
+     `-F' in `ptx'.
+
+`fixed-output-files'
+     `-y' in Bison.
+
+`follow'
+     `-f' in `tail'.
+
+`footnote-style'
+     Used in `makeinfo'.
+
+`force'
+     `-f' in `cp', `ln', `mv', and `rm'.
+
+`force-prefix'
+     `-F' in `shar'.
+
+`foreground'
+     For server programs, run in the foreground; in other words, don't
+     do anything special to run the server in the background.
+
+`format'
+     Used in `ls', `time', and `ptx'.
+
+`freeze-state'
+     `-F' in `m4'.
+
+`fullname'
+     Used in GDB.
+
+`gap-size'
+     `-g' in `ptx'.
+
+`get'
+     `-x' in `tar'.
+
+`graphic'
+     `-i' in `ul'.
+
+`graphics'
+     `-g' in `recode'.
+
+`group'
+     `-g' in `install'.
+
+`gzip'
+     `-z' in `tar' and `shar'.
+
+`hashsize'
+     `-H' in `m4'.
+
+`header'
+     `-h' in `objdump' and `recode'
+
+`heading'
+     `-H' in `who'.
+
+`help'
+     Used to ask for brief usage information.
+
+`here-delimiter'
+     `-d' in `shar'.
+
+`hide-control-chars'
+     `-q' in `ls'.
+
+`html'
+     In `makeinfo', output HTML.
+
+`idle'
+     `-u' in `who'.
+
+`ifdef'
+     `-D' in `diff'.
+
+`ignore'
+     `-I' in `ls'; `-x' in `recode'.
+
+`ignore-all-space'
+     `-w' in `diff'.
+
+`ignore-backups'
+     `-B' in `ls'.
+
+`ignore-blank-lines'
+     `-B' in `diff'.
+
+`ignore-case'
+     `-f' in `look' and `ptx'; `-i' in `diff' and `wdiff'.
+
+`ignore-errors'
+     `-i' in `make'.
+
+`ignore-file'
+     `-i' in `ptx'.
+
+`ignore-indentation'
+     `-I' in `etags'.
+
+`ignore-init-file'
+     `-f' in Oleo.
+
+`ignore-interrupts'
+     `-i' in `tee'.
+
+`ignore-matching-lines'
+     `-I' in `diff'.
+
+`ignore-space-change'
+     `-b' in `diff'.
+
+`ignore-zeros'
+     `-i' in `tar'.
+
+`include'
+     `-i' in `etags'; `-I' in `m4'.
+
+`include-dir'
+     `-I' in `make'.
+
+`incremental'
+     `-G' in `tar'.
+
+`info'
+     `-i', `-l', and `-m' in Finger.
+
+`init-file'
+     In some programs, specify the name of the file to read as the
+     user's init file.
+
+`initial'
+     `-i' in `expand'.
+
+`initial-tab'
+     `-T' in `diff'.
+
+`inode'
+     `-i' in `ls'.
+
+`interactive'
+     `-i' in `cp', `ln', `mv', `rm'; `-e' in `m4'; `-p' in `xargs';
+     `-w' in `tar'.
+
+`intermix-type'
+     `-p' in `shar'.
+
+`iso-8601'
+     Used in `date'
+
+`jobs'
+     `-j' in `make'.
+
+`just-print'
+     `-n' in `make'.
+
+`keep-going'
+     `-k' in `make'.
+
+`keep-files'
+     `-k' in `csplit'.
+
+`kilobytes'
+     `-k' in `du' and `ls'.
+
+`language'
+     `-l' in `etags'.
+
+`less-mode'
+     `-l' in `wdiff'.
+
+`level-for-gzip'
+     `-g' in `shar'.
+
+`line-bytes'
+     `-C' in `split'.
+
+`lines'
+     Used in `split', `head', and `tail'.
+
+`link'
+     `-l' in `cpio'.
+
+`lint'
+`lint-old'
+     Used in `gawk'.
+
+`list'
+     `-t' in `cpio'; `-l' in `recode'.
+
+`list'
+     `-t' in `tar'.
+
+`literal'
+     `-N' in `ls'.
+
+`load-average'
+     `-l' in `make'.
+
+`login'
+     Used in `su'.
+
+`machine'
+     Used in `uname'.
+
+`macro-name'
+     `-M' in `ptx'.
+
+`mail'
+     `-m' in `hello' and `uname'.
+
+`make-directories'
+     `-d' in `cpio'.
+
+`makefile'
+     `-f' in `make'.
+
+`mapped'
+     Used in GDB.
+
+`max-args'
+     `-n' in `xargs'.
+
+`max-chars'
+     `-n' in `xargs'.
+
+`max-lines'
+     `-l' in `xargs'.
+
+`max-load'
+     `-l' in `make'.
+
+`max-procs'
+     `-P' in `xargs'.
+
+`mesg'
+     `-T' in `who'.
+
+`message'
+     `-T' in `who'.
+
+`minimal'
+     `-d' in `diff'.
+
+`mixed-uuencode'
+     `-M' in `shar'.
+
+`mode'
+     `-m' in `install', `mkdir', and `mkfifo'.
+
+`modification-time'
+     `-m' in `tar'.
+
+`multi-volume'
+     `-M' in `tar'.
+
+`name-prefix'
+     `-a' in Bison.
+
+`nesting-limit'
+     `-L' in `m4'.
+
+`net-headers'
+     `-a' in `shar'.
+
+`new-file'
+     `-W' in `make'.
+
+`no-builtin-rules'
+     `-r' in `make'.
+
+`no-character-count'
+     `-w' in `shar'.
+
+`no-check-existing'
+     `-x' in `shar'.
+
+`no-common'
+     `-3' in `wdiff'.
+
+`no-create'
+     `-c' in `touch'.
+
+`no-defines'
+     `-D' in `etags'.
+
+`no-deleted'
+     `-1' in `wdiff'.
+
+`no-dereference'
+     `-d' in `cp'.
+
+`no-inserted'
+     `-2' in `wdiff'.
+
+`no-keep-going'
+     `-S' in `make'.
+
+`no-lines'
+     `-l' in Bison.
+
+`no-piping'
+     `-P' in `shar'.
+
+`no-prof'
+     `-e' in `gprof'.
+
+`no-regex'
+     `-R' in `etags'.
+
+`no-sort'
+     `-p' in `nm'.
+
+`no-splash'
+     Don't print a startup splash screen.
+
+`no-split'
+     Used in `makeinfo'.
+
+`no-static'
+     `-a' in `gprof'.
+
+`no-time'
+     `-E' in `gprof'.
+
+`no-timestamp'
+     `-m' in `shar'.
+
+`no-validate'
+     Used in `makeinfo'.
+
+`no-wait'
+     Used in `emacsclient'.
+
+`no-warn'
+     Used in various programs to inhibit warnings.
+
+`node'
+     `-n' in `info'.
+
+`nodename'
+     `-n' in `uname'.
+
+`nonmatching'
+     `-f' in `cpio'.
+
+`nstuff'
+     `-n' in `objdump'.
+
+`null'
+     `-0' in `xargs'.
+
+`number'
+     `-n' in `cat'.
+
+`number-nonblank'
+     `-b' in `cat'.
+
+`numeric-sort'
+     `-n' in `nm'.
+
+`numeric-uid-gid'
+     `-n' in `cpio' and `ls'.
+
+`nx'
+     Used in GDB.
+
+`old-archive'
+     `-o' in `tar'.
+
+`old-file'
+     `-o' in `make'.
+
+`one-file-system'
+     `-l' in `tar', `cp', and `du'.
+
+`only-file'
+     `-o' in `ptx'.
+
+`only-prof'
+     `-f' in `gprof'.
+
+`only-time'
+     `-F' in `gprof'.
+
+`options'
+     `-o' in `getopt', `fdlist', `fdmount', `fdmountd', and `fdumount'.
+
+`output'
+     In various programs, specify the output file name.
+
+`output-prefix'
+     `-o' in `shar'.
+
+`override'
+     `-o' in `rm'.
+
+`overwrite'
+     `-c' in `unshar'.
+
+`owner'
+     `-o' in `install'.
+
+`paginate'
+     `-l' in `diff'.
+
+`paragraph-indent'
+     Used in `makeinfo'.
+
+`parents'
+     `-p' in `mkdir' and `rmdir'.
+
+`pass-all'
+     `-p' in `ul'.
+
+`pass-through'
+     `-p' in `cpio'.
+
+`port'
+     `-P' in `finger'.
+
+`portability'
+     `-c' in `cpio' and `tar'.
+
+`posix'
+     Used in `gawk'.
+
+`prefix-builtins'
+     `-P' in `m4'.
+
+`prefix'
+     `-f' in `csplit'.
+
+`preserve'
+     Used in `tar' and `cp'.
+
+`preserve-environment'
+     `-p' in `su'.
+
+`preserve-modification-time'
+     `-m' in `cpio'.
+
+`preserve-order'
+     `-s' in `tar'.
+
+`preserve-permissions'
+     `-p' in `tar'.
+
+`print'
+     `-l' in `diff'.
+
+`print-chars'
+     `-L' in `cmp'.
+
+`print-data-base'
+     `-p' in `make'.
+
+`print-directory'
+     `-w' in `make'.
+
+`print-file-name'
+     `-o' in `nm'.
+
+`print-symdefs'
+     `-s' in `nm'.
+
+`printer'
+     `-p' in `wdiff'.
+
+`prompt'
+     `-p' in `ed'.
+
+`proxy'
+     Specify an HTTP proxy.
+
+`query-user'
+     `-X' in `shar'.
+
+`question'
+     `-q' in `make'.
+
+`quiet'
+     Used in many programs to inhibit the usual output.  Every program
+     accepting `--quiet' should accept `--silent' as a synonym.
+
+`quiet-unshar'
+     `-Q' in `shar'
+
+`quote-name'
+     `-Q' in `ls'.
+
+`rcs'
+     `-n' in `diff'.
+
+`re-interval'
+     Used in `gawk'.
+
+`read-full-blocks'
+     `-B' in `tar'.
+
+`readnow'
+     Used in GDB.
+
+`recon'
+     `-n' in `make'.
+
+`record-number'
+     `-R' in `tar'.
+
+`recursive'
+     Used in `chgrp', `chown', `cp', `ls', `diff', and `rm'.
+
+`reference'
+     `-r' in `touch'.
+
+`references'
+     `-r' in `ptx'.
+
+`regex'
+     `-r' in `tac' and `etags'.
+
+`release'
+     `-r' in `uname'.
+
+`reload-state'
+     `-R' in `m4'.
+
+`relocation'
+     `-r' in `objdump'.
+
+`rename'
+     `-r' in `cpio'.
+
+`replace'
+     `-i' in `xargs'.
+
+`report-identical-files'
+     `-s' in `diff'.
+
+`reset-access-time'
+     `-a' in `cpio'.
+
+`reverse'
+     `-r' in `ls' and `nm'.
+
+`reversed-ed'
+     `-f' in `diff'.
+
+`right-side-defs'
+     `-R' in `ptx'.
+
+`same-order'
+     `-s' in `tar'.
+
+`same-permissions'
+     `-p' in `tar'.
+
+`save'
+     `-g' in `stty'.
+
+`se'
+     Used in GDB.
+
+`sentence-regexp'
+     `-S' in `ptx'.
+
+`separate-dirs'
+     `-S' in `du'.
+
+`separator'
+     `-s' in `tac'.
+
+`sequence'
+     Used by `recode' to chose files or pipes for sequencing passes.
+
+`shell'
+     `-s' in `su'.
+
+`show-all'
+     `-A' in `cat'.
+
+`show-c-function'
+     `-p' in `diff'.
+
+`show-ends'
+     `-E' in `cat'.
+
+`show-function-line'
+     `-F' in `diff'.
+
+`show-tabs'
+     `-T' in `cat'.
+
+`silent'
+     Used in many programs to inhibit the usual output.  Every program
+     accepting `--silent' should accept `--quiet' as a synonym.
+
+`size'
+     `-s' in `ls'.
+
+`socket'
+     Specify a file descriptor for a network server to use for its
+     socket, instead of opening and binding a new socket.  This
+     provides a way to run, in a non-privileged process, a server that
+     normally needs a reserved port number.
+
+`sort'
+     Used in `ls'.
+
+`source'
+     `-W source' in `gawk'.
+
+`sparse'
+     `-S' in `tar'.
+
+`speed-large-files'
+     `-H' in `diff'.
+
+`split-at'
+     `-E' in `unshar'.
+
+`split-size-limit'
+     `-L' in `shar'.
+
+`squeeze-blank'
+     `-s' in `cat'.
+
+`start-delete'
+     `-w' in `wdiff'.
+
+`start-insert'
+     `-y' in `wdiff'.
+
+`starting-file'
+     Used in `tar' and `diff' to specify which file within a directory
+     to start processing with.
+
+`statistics'
+     `-s' in `wdiff'.
+
+`stdin-file-list'
+     `-S' in `shar'.
+
+`stop'
+     `-S' in `make'.
+
+`strict'
+     `-s' in `recode'.
+
+`strip'
+     `-s' in `install'.
+
+`strip-all'
+     `-s' in `strip'.
+
+`strip-debug'
+     `-S' in `strip'.
+
+`submitter'
+     `-s' in `shar'.
+
+`suffix'
+     `-S' in `cp', `ln', `mv'.
+
+`suffix-format'
+     `-b' in `csplit'.
+
+`sum'
+     `-s' in `gprof'.
+
+`summarize'
+     `-s' in `du'.
+
+`symbolic'
+     `-s' in `ln'.
+
+`symbols'
+     Used in GDB and `objdump'.
+
+`synclines'
+     `-s' in `m4'.
+
+`sysname'
+     `-s' in `uname'.
+
+`tabs'
+     `-t' in `expand' and `unexpand'.
+
+`tabsize'
+     `-T' in `ls'.
+
+`terminal'
+     `-T' in `tput' and `ul'.  `-t' in `wdiff'.
+
+`text'
+     `-a' in `diff'.
+
+`text-files'
+     `-T' in `shar'.
+
+`time'
+     Used in `ls' and `touch'.
+
+`timeout'
+     Specify how long to wait before giving up on some operation.
+
+`to-stdout'
+     `-O' in `tar'.
+
+`total'
+     `-c' in `du'.
+
+`touch'
+     `-t' in `make', `ranlib', and `recode'.
+
+`trace'
+     `-t' in `m4'.
+
+`traditional'
+     `-t' in `hello'; `-W traditional' in `gawk'; `-G' in `ed', `m4',
+     and `ptx'.
+
+`tty'
+     Used in GDB.
+
+`typedefs'
+     `-t' in `ctags'.
+
+`typedefs-and-c++'
+     `-T' in `ctags'.
+
+`typeset-mode'
+     `-t' in `ptx'.
+
+`uncompress'
+     `-z' in `tar'.
+
+`unconditional'
+     `-u' in `cpio'.
+
+`undefine'
+     `-U' in `m4'.
+
+`undefined-only'
+     `-u' in `nm'.
+
+`update'
+     `-u' in `cp', `ctags', `mv', `tar'.
+
+`usage'
+     Used in `gawk'; same as `--help'.
+
+`uuencode'
+     `-B' in `shar'.
+
+`vanilla-operation'
+     `-V' in `shar'.
+
+`verbose'
+     Print more information about progress.  Many programs support this.
+
+`verify'
+     `-W' in `tar'.
+
+`version'
+     Print the version number.
+
+`version-control'
+     `-V' in `cp', `ln', `mv'.
+
+`vgrind'
+     `-v' in `ctags'.
+
+`volume'
+     `-V' in `tar'.
+
+`what-if'
+     `-W' in `make'.
+
+`whole-size-limit'
+     `-l' in `shar'.
+
+`width'
+     `-w' in `ls' and `ptx'.
+
+`word-regexp'
+     `-W' in `ptx'.
+
+`writable'
+     `-T' in `who'.
+
+`zeros'
+     `-z' in `gprof'.
+
+
+File: standards.info,  Node: OID Allocations,  Next: Memory Usage,  Prev: Option Table,  Up: Program Behavior
+
+4.9 OID Allocations
+===================
+
+The OID (object identifier) 1.3.6.1.4.1.11591 has been assigned to the
+GNU Project (thanks to Werner Koch).  These are used for SNMP, LDAP,
+X.509 certificates, and so on.  The web site
+`http://www.alvestrand.no/objectid' has a (voluntary) listing of many
+OID assignments.
+
+   If you need a new slot for your GNU package, write
+<maintainers at gnu.org>.  Here is a list of arcs currently assigned:
+
+
+     1.3.6.1.4.1.11591 GNU
+
+     1.3.6.1.4.1.11591.1 GNU Radius
+
+     1.3.6.1.4.1.11591.2 GnuPG
+       1.3.6.1.4.1.11591.2.1   notation
+       1.3.6.1.4.1.11591.2.1.1 pkaAddress
+
+     1.3.6.1.4.1.11591.3 GNU Radar
+
+     1.3.6.1.4.1.11591.4 GNU GSS
+
+     1.3.6.1.4.1.11591.5 GNU Mailutils
+
+     1.3.6.1.4.1.11591.6 GNU Shishi
+
+     1.3.6.1.4.1.11591.7 GNU Radio
+
+     1.3.6.1.4.1.11591.12 digestAlgorithm
+       1.3.6.1.4.1.11591.12.2 TIGER/192
+       1.3.6.1.4.1.11591.13 encryptionAlgorithm
+         1.3.6.1.4.1.11591.13.2 Serpent
+           1.3.6.1.4.1.11591.13.2.1 Serpent-128-ECB
+           1.3.6.1.4.1.11591.13.2.2 Serpent-128-CBC
+           1.3.6.1.4.1.11591.13.2.3 Serpent-128-OFB
+           1.3.6.1.4.1.11591.13.2.4 Serpent-128-CFB
+           1.3.6.1.4.1.11591.13.2.21 Serpent-192-ECB
+           1.3.6.1.4.1.11591.13.2.22 Serpent-192-CBC
+           1.3.6.1.4.1.11591.13.2.23 Serpent-192-OFB
+           1.3.6.1.4.1.11591.13.2.24 Serpent-192-CFB
+           1.3.6.1.4.1.11591.13.2.41 Serpent-256-ECB
+           1.3.6.1.4.1.11591.13.2.42 Serpent-256-CBC
+           1.3.6.1.4.1.11591.13.2.43 Serpent-256-OFB
+           1.3.6.1.4.1.11591.13.2.44 Serpent-256-CFB
+       1.3.6.1.4.1.11591.14 CRC algorithms
+         1.3.6.1.4.1.11591.14.1 CRC 32
+
+
+File: standards.info,  Node: Memory Usage,  Next: File Usage,  Prev: OID Allocations,  Up: Program Behavior
+
+4.10 Memory Usage
+=================
+
+If a program typically uses just a few meg of memory, don't bother
+making any effort to reduce memory usage.  For example, if it is
+impractical for other reasons to operate on files more than a few meg
+long, it is reasonable to read entire input files into memory to
+operate on them.
+
+   However, for programs such as `cat' or `tail', that can usefully
+operate on very large files, it is important to avoid using a technique
+that would artificially limit the size of files it can handle.  If a
+program works by lines and could be applied to arbitrary user-supplied
+input files, it should keep only a line in memory, because this is not
+very hard and users will want to be able to operate on input files that
+are bigger than will fit in memory all at once.
+
+   If your program creates complicated data structures, just make them
+in memory and give a fatal error if `malloc' returns zero.
+
+
+File: standards.info,  Node: File Usage,  Prev: Memory Usage,  Up: Program Behavior
+
+4.11 File Usage
+===============
+
+Programs should be prepared to operate when `/usr' and `/etc' are
+read-only file systems.  Thus, if the program manages log files, lock
+files, backup files, score files, or any other files which are modified
+for internal purposes, these files should not be stored in `/usr' or
+`/etc'.
+
+   There are two exceptions.  `/etc' is used to store system
+configuration information; it is reasonable for a program to modify
+files in `/etc' when its job is to update the system configuration.
+Also, if the user explicitly asks to modify one file in a directory, it
+is reasonable for the program to store other files in the same
+directory.
+
+
+File: standards.info,  Node: Writing C,  Next: Documentation,  Prev: Program Behavior,  Up: Top
+
+5 Making The Best Use of C
+**************************
+
+This chapter provides advice on how best to use the C language when
+writing GNU software.
+
+* Menu:
+
+* Formatting::                  Formatting your source code.
+* Comments::                    Commenting your work.
+* Syntactic Conventions::       Clean use of C constructs.
+* Names::                       Naming variables, functions, and files.
+* System Portability::          Portability among different operating systems.
+* CPU Portability::             Supporting the range of CPU types.
+* System Functions::            Portability and ``standard'' library functions.
+* Internationalization::        Techniques for internationalization.
+* Character Set::               Use ASCII by default.
+* Quote Characters::            Use `...' in the C locale.
+* Mmap::                        How you can safely use `mmap'.
+
+
+File: standards.info,  Node: Formatting,  Next: Comments,  Up: Writing C
+
+5.1 Formatting Your Source Code
+===============================
+
+It is important to put the open-brace that starts the body of a C
+function in column one, so that they will start a defun.  Several tools
+look for open-braces in column one to find the beginnings of C
+functions.  These tools will not work on code not formatted that way.
+
+   Avoid putting open-brace, open-parenthesis or open-bracket in column
+one when they are inside a function, so that they won't start a defun.
+The open-brace that starts a `struct' body can go in column one if you
+find it useful to treat that definition as a defun.
+
+   It is also important for function definitions to start the name of
+the function in column one.  This helps people to search for function
+definitions, and may also help certain tools recognize them.  Thus,
+using Standard C syntax, the format is this:
+
+     static char *
+     concat (char *s1, char *s2)
+     {
+       ...
+     }
+
+or, if you want to use traditional C syntax, format the definition like
+this:
+
+     static char *
+     concat (s1, s2)        /* Name starts in column one here */
+          char *s1, *s2;
+     {                     /* Open brace in column one here */
+       ...
+     }
+
+   In Standard C, if the arguments don't fit nicely on one line, split
+it like this:
+
+     int
+     lots_of_args (int an_integer, long a_long, short a_short,
+                   double a_double, float a_float)
+     ...
+
+   The rest of this section gives our recommendations for other aspects
+of C formatting style, which is also the default style of the `indent'
+program in version 1.2 and newer.  It corresponds to the options
+
+     -nbad -bap -nbc -bbo -bl -bli2 -bls -ncdb -nce -cp1 -cs -di2
+     -ndj -nfc1 -nfca -hnl -i2 -ip5 -lp -pcs -psl -nsc -nsob
+
+   We don't think of these recommendations as requirements, because it
+causes no problems for users if two different programs have different
+formatting styles.
+
+   But whatever style you use, please use it consistently, since a
+mixture of styles within one program tends to look ugly.  If you are
+contributing changes to an existing program, please follow the style of
+that program.
+
+   For the body of the function, our recommended style looks like this:
+
+     if (x < foo (y, z))
+       haha = bar[4] + 5;
+     else
+       {
+         while (z)
+           {
+             haha += foo (z, z);
+             z--;
+           }
+         return ++x + bar ();
+       }
+
+   We find it easier to read a program when it has spaces before the
+open-parentheses and after the commas.  Especially after the commas.
+
+   When you split an expression into multiple lines, split it before an
+operator, not after one.  Here is the right way:
+
+     if (foo_this_is_long && bar > win (x, y, z)
+         && remaining_condition)
+
+   Try to avoid having two operators of different precedence at the same
+level of indentation.  For example, don't write this:
+
+     mode = (inmode[j] == VOIDmode
+             || GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j])
+             ? outmode[j] : inmode[j]);
+
+   Instead, use extra parentheses so that the indentation shows the
+nesting:
+
+     mode = ((inmode[j] == VOIDmode
+              || (GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j])))
+             ? outmode[j] : inmode[j]);
+
+   Insert extra parentheses so that Emacs will indent the code properly.
+For example, the following indentation looks nice if you do it by hand,
+
+     v = rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000
+         + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000;
+
+but Emacs would alter it.  Adding a set of parentheses produces
+something that looks equally nice, and which Emacs will preserve:
+
+     v = (rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000
+          + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000);
+
+   Format do-while statements like this:
+
+     do
+       {
+         a = foo (a);
+       }
+     while (a > 0);
+
+   Please use formfeed characters (control-L) to divide the program into
+pages at logical places (but not within a function).  It does not matter
+just how long the pages are, since they do not have to fit on a printed
+page.  The formfeeds should appear alone on lines by themselves.
+
+
+File: standards.info,  Node: Comments,  Next: Syntactic Conventions,  Prev: Formatting,  Up: Writing C
+
+5.2 Commenting Your Work
+========================
+
+Every program should start with a comment saying briefly what it is for.
+Example: `fmt - filter for simple filling of text'.  This comment
+should be at the top of the source file containing the `main' function
+of the program.
+
+   Also, please write a brief comment at the start of each source file,
+with the file name and a line or two about the overall purpose of the
+file.
+
+   Please write the comments in a GNU program in English, because
+English is the one language that nearly all programmers in all
+countries can read.  If you do not write English well, please write
+comments in English as well as you can, then ask other people to help
+rewrite them.  If you can't write comments in English, please find
+someone to work with you and translate your comments into English.
+
+   Please put a comment on each function saying what the function does,
+what sorts of arguments it gets, and what the possible values of
+arguments mean and are used for.  It is not necessary to duplicate in
+words the meaning of the C argument declarations, if a C type is being
+used in its customary fashion.  If there is anything nonstandard about
+its use (such as an argument of type `char *' which is really the
+address of the second character of a string, not the first), or any
+possible values that would not work the way one would expect (such as,
+that strings containing newlines are not guaranteed to work), be sure
+to say so.
+
+   Also explain the significance of the return value, if there is one.
+
+   Please put two spaces after the end of a sentence in your comments,
+so that the Emacs sentence commands will work.  Also, please write
+complete sentences and capitalize the first word.  If a lower-case
+identifier comes at the beginning of a sentence, don't capitalize it!
+Changing the spelling makes it a different identifier.  If you don't
+like starting a sentence with a lower case letter, write the sentence
+differently (e.g., "The identifier lower-case is ...").
+
+   The comment on a function is much clearer if you use the argument
+names to speak about the argument values.  The variable name itself
+should be lower case, but write it in upper case when you are speaking
+about the value rather than the variable itself.  Thus, "the inode
+number NODE_NUM" rather than "an inode".
+
+   There is usually no purpose in restating the name of the function in
+the comment before it, because the reader can see that for himself.
+There might be an exception when the comment is so long that the
+function itself would be off the bottom of the screen.
+
+   There should be a comment on each static variable as well, like this:
+
+     /* Nonzero means truncate lines in the display;
+        zero means continue them.  */
+     int truncate_lines;
+
+   Every `#endif' should have a comment, except in the case of short
+conditionals (just a few lines) that are not nested.  The comment should
+state the condition of the conditional that is ending, _including its
+sense_.  `#else' should have a comment describing the condition _and
+sense_ of the code that follows.  For example:
+
+     #ifdef foo
+       ...
+     #else /* not foo */
+       ...
+     #endif /* not foo */
+     #ifdef foo
+       ...
+     #endif /* foo */
+
+but, by contrast, write the comments this way for a `#ifndef':
+
+     #ifndef foo
+       ...
+     #else /* foo */
+       ...
+     #endif /* foo */
+     #ifndef foo
+       ...
+     #endif /* not foo */
+
+
+File: standards.info,  Node: Syntactic Conventions,  Next: Names,  Prev: Comments,  Up: Writing C
+
+5.3 Clean Use of C Constructs
+=============================
+
+Please explicitly declare the types of all objects.  For example, you
+should explicitly declare all arguments to functions, and you should
+declare functions to return `int' rather than omitting the `int'.
+
+   Some programmers like to use the GCC `-Wall' option, and change the
+code whenever it issues a warning.  If you want to do this, then do.
+Other programmers prefer not to use `-Wall', because it gives warnings
+for valid and legitimate code which they do not want to change.  If you
+want to do this, then do.  The compiler should be your servant, not
+your master.
+
+   Declarations of external functions and functions to appear later in
+the source file should all go in one place near the beginning of the
+file (somewhere before the first function definition in the file), or
+else should go in a header file.  Don't put `extern' declarations inside
+functions.
+
+   It used to be common practice to use the same local variables (with
+names like `tem') over and over for different values within one
+function.  Instead of doing this, it is better to declare a separate
+local variable for each distinct purpose, and give it a name which is
+meaningful.  This not only makes programs easier to understand, it also
+facilitates optimization by good compilers.  You can also move the
+declaration of each local variable into the smallest scope that includes
+all its uses.  This makes the program even cleaner.
+
+   Don't use local variables or parameters that shadow global
+identifiers.
+
+   Don't declare multiple variables in one declaration that spans lines.
+Start a new declaration on each line, instead.  For example, instead of
+this:
+
+     int    foo,
+            bar;
+
+write either this:
+
+     int foo, bar;
+
+or this:
+
+     int foo;
+     int bar;
+
+(If they are global variables, each should have a comment preceding it
+anyway.)
+
+   When you have an `if'-`else' statement nested in another `if'
+statement, always put braces around the `if'-`else'.  Thus, never write
+like this:
+
+     if (foo)
+       if (bar)
+         win ();
+       else
+         lose ();
+
+always like this:
+
+     if (foo)
+       {
+         if (bar)
+           win ();
+         else
+           lose ();
+       }
+
+   If you have an `if' statement nested inside of an `else' statement,
+either write `else if' on one line, like this,
+
+     if (foo)
+       ...
+     else if (bar)
+       ...
+
+with its `then'-part indented like the preceding `then'-part, or write
+the nested `if' within braces like this:
+
+     if (foo)
+       ...
+     else
+       {
+         if (bar)
+           ...
+       }
+
+   Don't declare both a structure tag and variables or typedefs in the
+same declaration.  Instead, declare the structure tag separately and
+then use it to declare the variables or typedefs.
+
+   Try to avoid assignments inside `if'-conditions (assignments inside
+`while'-conditions are ok).  For example, don't write this:
+
+     if ((foo = (char *) malloc (sizeof *foo)) == 0)
+       fatal ("virtual memory exhausted");
+
+instead, write this:
+
+     foo = (char *) malloc (sizeof *foo);
+     if (foo == 0)
+       fatal ("virtual memory exhausted");
+
+   Don't make the program ugly to placate `lint'.  Please don't insert
+any casts to `void'.  Zero without a cast is perfectly fine as a null
+pointer constant, except when calling a varargs function.
+
+
+File: standards.info,  Node: Names,  Next: System Portability,  Prev: Syntactic Conventions,  Up: Writing C
+
+5.4 Naming Variables, Functions, and Files
+==========================================
+
+The names of global variables and functions in a program serve as
+comments of a sort.  So don't choose terse names--instead, look for
+names that give useful information about the meaning of the variable or
+function.  In a GNU program, names should be English, like other
+comments.
+
+   Local variable names can be shorter, because they are used only
+within one context, where (presumably) comments explain their purpose.
+
+   Try to limit your use of abbreviations in symbol names.  It is ok to
+make a few abbreviations, explain what they mean, and then use them
+frequently, but don't use lots of obscure abbreviations.
+
+   Please use underscores to separate words in a name, so that the Emacs
+word commands can be useful within them.  Stick to lower case; reserve
+upper case for macros and `enum' constants, and for name-prefixes that
+follow a uniform convention.
+
+   For example, you should use names like `ignore_space_change_flag';
+don't use names like `iCantReadThis'.
+
+   Variables that indicate whether command-line options have been
+specified should be named after the meaning of the option, not after
+the option-letter.  A comment should state both the exact meaning of
+the option and its letter.  For example,
+
+     /* Ignore changes in horizontal whitespace (-b).  */
+     int ignore_space_change_flag;
+
+   When you want to define names with constant integer values, use
+`enum' rather than `#define'.  GDB knows about enumeration constants.
+
+   You might want to make sure that none of the file names would
+conflict if the files were loaded onto an MS-DOS file system which
+shortens the names.  You can use the program `doschk' to test for this.
+
+   Some GNU programs were designed to limit themselves to file names of
+14 characters or less, to avoid file name conflicts if they are read
+into older System V systems.  Please preserve this feature in the
+existing GNU programs that have it, but there is no need to do this in
+new GNU programs.  `doschk' also reports file names longer than 14
+characters.
+
+
+File: standards.info,  Node: System Portability,  Next: CPU Portability,  Prev: Names,  Up: Writing C
+
+5.5 Portability between System Types
+====================================
+
+In the Unix world, "portability" refers to porting to different Unix
+versions.  For a GNU program, this kind of portability is desirable, but
+not paramount.
+
+   The primary purpose of GNU software is to run on top of the GNU
+kernel, compiled with the GNU C compiler, on various types of CPU.  So
+the kinds of portability that are absolutely necessary are quite
+limited.  But it is important to support Linux-based GNU systems, since
+they are the form of GNU that is popular.
+
+   Beyond that, it is good to support the other free operating systems
+(*BSD), and it is nice to support other Unix-like systems if you want
+to.  Supporting a variety of Unix-like systems is desirable, although
+not paramount.  It is usually not too hard, so you may as well do it.
+But you don't have to consider it an obligation, if it does turn out to
+be hard.
+
+   The easiest way to achieve portability to most Unix-like systems is
+to use Autoconf.  It's unlikely that your program needs to know more
+information about the host platform than Autoconf can provide, simply
+because most of the programs that need such knowledge have already been
+written.
+
+   Avoid using the format of semi-internal data bases (e.g.,
+directories) when there is a higher-level alternative (`readdir').
+
+   As for systems that are not like Unix, such as MSDOS, Windows, VMS,
+MVS, and older Macintosh systems, supporting them is often a lot of
+work.  When that is the case, it is better to spend your time adding
+features that will be useful on GNU and GNU/Linux, rather than on
+supporting other incompatible systems.
+
+   If you do support Windows, please do not abbreviate it as "win".  In
+hacker terminology, calling something a "win" is a form of praise.
+You're free to praise Microsoft Windows on your own if you want, but
+please don't do this in GNU packages.  Instead of abbreviating
+"Windows" to "win", you can write it in full or abbreviate it to "woe"
+or "w".  In GNU Emacs, for instance, we use `w32' in file names of
+Windows-specific files, but the macro for Windows conditionals is
+called `WINDOWSNT'.
+
+   It is a good idea to define the "feature test macro" `_GNU_SOURCE'
+when compiling your C files.  When you compile on GNU or GNU/Linux,
+this will enable the declarations of GNU library extension functions,
+and that will usually give you a compiler error message if you define
+the same function names in some other way in your program.  (You don't
+have to actually _use_ these functions, if you prefer to make the
+program more portable to other systems.)
+
+   But whether or not you use these GNU extensions, you should avoid
+using their names for any other meanings.  Doing so would make it hard
+to move your code into other GNU programs.
+
+
+File: standards.info,  Node: CPU Portability,  Next: System Functions,  Prev: System Portability,  Up: Writing C
+
+5.6 Portability between CPUs
+============================
+
+Even GNU systems will differ because of differences among CPU
+types--for example, difference in byte ordering and alignment
+requirements.  It is absolutely essential to handle these differences.
+However, don't make any effort to cater to the possibility that an
+`int' will be less than 32 bits.  We don't support 16-bit machines in
+GNU.
+
+   Similarly, don't make any effort to cater to the possibility that
+`long' will be smaller than predefined types like `size_t'.  For
+example, the following code is ok:
+
+     printf ("size = %lu\n", (unsigned long) sizeof array);
+     printf ("diff = %ld\n", (long) (pointer2 - pointer1));
+
+   1989 Standard C requires this to work, and we know of only one
+counterexample: 64-bit programs on Microsoft Windows.  We will leave it
+to those who want to port GNU programs to that environment to figure
+out how to do it.
+
+   Predefined file-size types like `off_t' are an exception: they are
+longer than `long' on many platforms, so code like the above won't work
+with them.  One way to print an `off_t' value portably is to print its
+digits yourself, one by one.
+
+   Don't assume that the address of an `int' object is also the address
+of its least-significant byte.  This is false on big-endian machines.
+Thus, don't make the following mistake:
+
+     int c;
+     ...
+     while ((c = getchar ()) != EOF)
+       write (file_descriptor, &c, 1);
+
+Instead, use `unsigned char' as follows.  (The `unsigned' is for
+portability to unusual systems where `char' is signed and where there
+is integer overflow checking.)
+
+     int c;
+     while ((c = getchar ()) != EOF)
+       {
+         unsigned char u = c;
+         write (file_descriptor, &u, 1);
+       }
+
+   It used to be ok to not worry about the difference between pointers
+and integers when passing arguments to functions.  However, on most
+modern 64-bit machines pointers are wider than `int'.  Conversely,
+integer types like `long long int' and `off_t' are wider than pointers
+on most modern 32-bit machines.  Hence it's often better nowadays to
+use prototypes to define functions whose argument types are not trivial.
+
+   In particular, if functions accept varying argument counts or types
+they should be declared using prototypes containing `...' and defined
+using `stdarg.h'.  For an example of this, please see the Gnulib
+(http://www.gnu.org/software/gnulib/) error module, which declares and
+defines the following function:
+
+     /* Print a message with `fprintf (stderr, FORMAT, ...)';
+        if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
+        If STATUS is nonzero, terminate the program with `exit (STATUS)'.  */
+
+     void error (int status, int errnum, const char *format, ...);
+
+   A simple way to use the Gnulib error module is to obtain the two
+source files `error.c' and `error.h' from the Gnulib library source
+code repository at `http://git.savannah.gnu.org/gitweb/?p=gnulib.git'.
+Here's a sample use:
+
+     #include "error.h"
+     #include <errno.h>
+     #include <stdio.h>
+
+     char *program_name = "myprogram";
+
+     FILE *
+     xfopen (char const *name)
+     {
+       FILE *fp = fopen (name, "r");
+       if (! fp)
+         error (1, errno, "cannot read %s", name);
+       return fp;
+     }
+
+   Avoid casting pointers to integers if you can.  Such casts greatly
+reduce portability, and in most programs they are easy to avoid.  In the
+cases where casting pointers to integers is essential--such as, a Lisp
+interpreter which stores type information as well as an address in one
+word--you'll have to make explicit provisions to handle different word
+sizes.  You will also need to make provision for systems in which the
+normal range of addresses you can get from `malloc' starts far away
+from zero.
+
+
+File: standards.info,  Node: System Functions,  Next: Internationalization,  Prev: CPU Portability,  Up: Writing C
+
+5.7 Calling System Functions
+============================
+
+C implementations differ substantially.  Standard C reduces but does
+not eliminate the incompatibilities; meanwhile, many GNU packages still
+support pre-standard compilers because this is not hard to do.  This
+chapter gives recommendations for how to use the more-or-less standard C
+library functions to avoid unnecessary loss of portability.
+
+   * Don't use the return value of `sprintf'.  It returns the number of
+     characters written on some systems, but not on all systems.
+
+   * Be aware that `vfprintf' is not always available.
+
+   * `main' should be declared to return type `int'.  It should
+     terminate either by calling `exit' or by returning the integer
+     status code; make sure it cannot ever return an undefined value.
+
+   * Don't declare system functions explicitly.
+
+     Almost any declaration for a system function is wrong on some
+     system.  To minimize conflicts, leave it to the system header
+     files to declare system functions.  If the headers don't declare a
+     function, let it remain undeclared.
+
+     While it may seem unclean to use a function without declaring it,
+     in practice this works fine for most system library functions on
+     the systems where this really happens; thus, the disadvantage is
+     only theoretical.  By contrast, actual declarations have
+     frequently caused actual conflicts.
+
+   * If you must declare a system function, don't specify the argument
+     types.  Use an old-style declaration, not a Standard C prototype.
+     The more you specify about the function, the more likely a
+     conflict.
+
+   * In particular, don't unconditionally declare `malloc' or `realloc'.
+
+     Most GNU programs use those functions just once, in functions
+     conventionally named `xmalloc' and `xrealloc'.  These functions
+     call `malloc' and `realloc', respectively, and check the results.
+
+     Because `xmalloc' and `xrealloc' are defined in your program, you
+     can declare them in other files without any risk of type conflict.
+
+     On most systems, `int' is the same length as a pointer; thus, the
+     calls to `malloc' and `realloc' work fine.  For the few
+     exceptional systems (mostly 64-bit machines), you can use
+     *conditionalized* declarations of `malloc' and `realloc'--or put
+     these declarations in configuration files specific to those
+     systems.
+
+   * The string functions require special treatment.  Some Unix systems
+     have a header file `string.h'; others have `strings.h'.  Neither
+     file name is portable.  There are two things you can do: use
+     Autoconf to figure out which file to include, or don't include
+     either file.
+
+   * If you don't include either strings file, you can't get
+     declarations for the string functions from the header file in the
+     usual way.
+
+     That causes less of a problem than you might think.  The newer
+     standard string functions should be avoided anyway because many
+     systems still don't support them.  The string functions you can
+     use are these:
+
+          strcpy   strncpy   strcat   strncat
+          strlen   strcmp    strncmp
+          strchr   strrchr
+
+     The copy and concatenate functions work fine without a declaration
+     as long as you don't use their values.  Using their values without
+     a declaration fails on systems where the width of a pointer
+     differs from the width of `int', and perhaps in other cases.  It
+     is trivial to avoid using their values, so do that.
+
+     The compare functions and `strlen' work fine without a declaration
+     on most systems, possibly all the ones that GNU software runs on.
+     You may find it necessary to declare them *conditionally* on a few
+     systems.
+
+     The search functions must be declared to return `char *'.  Luckily,
+     there is no variation in the data type they return.  But there is
+     variation in their names.  Some systems give these functions the
+     names `index' and `rindex'; other systems use the names `strchr'
+     and `strrchr'.  Some systems support both pairs of names, but
+     neither pair works on all systems.
+
+     You should pick a single pair of names and use it throughout your
+     program.  (Nowadays, it is better to choose `strchr' and `strrchr'
+     for new programs, since those are the standard names.)  Declare
+     both of those names as functions returning `char *'.  On systems
+     which don't support those names, define them as macros in terms of
+     the other pair.  For example, here is what to put at the beginning
+     of your file (or in a header) if you want to use the names
+     `strchr' and `strrchr' throughout:
+
+          #ifndef HAVE_STRCHR
+          #define strchr index
+          #endif
+          #ifndef HAVE_STRRCHR
+          #define strrchr rindex
+          #endif
+
+          char *strchr ();
+          char *strrchr ();
+
+   Here we assume that `HAVE_STRCHR' and `HAVE_STRRCHR' are macros
+defined in systems where the corresponding functions exist.  One way to
+get them properly defined is to use Autoconf.
+
+
+File: standards.info,  Node: Internationalization,  Next: Character Set,  Prev: System Functions,  Up: Writing C
+
+5.8 Internationalization
+========================
+
+GNU has a library called GNU gettext that makes it easy to translate the
+messages in a program into various languages.  You should use this
+library in every program.  Use English for the messages as they appear
+in the program, and let gettext provide the way to translate them into
+other languages.
+
+   Using GNU gettext involves putting a call to the `gettext' macro
+around each string that might need translation--like this:
+
+     printf (gettext ("Processing file `%s'..."));
+
+This permits GNU gettext to replace the string `"Processing file
+`%s'..."' with a translated version.
+
+   Once a program uses gettext, please make a point of writing calls to
+`gettext' when you add new strings that call for translation.
+
+   Using GNU gettext in a package involves specifying a "text domain
+name" for the package.  The text domain name is used to separate the
+translations for this package from the translations for other packages.
+Normally, the text domain name should be the same as the name of the
+package--for example, `coreutils' for the GNU core utilities.
+
+   To enable gettext to work well, avoid writing code that makes
+assumptions about the structure of words or sentences.  When you want
+the precise text of a sentence to vary depending on the data, use two or
+more alternative string constants each containing a complete sentences,
+rather than inserting conditionalized words or phrases into a single
+sentence framework.
+
+   Here is an example of what not to do:
+
+     printf ("%s is full", capacity > 5000000 ? "disk" : "floppy disk");
+
+   If you apply gettext to all strings, like this,
+
+     printf (gettext ("%s is full"),
+             capacity > 5000000 ? gettext ("disk") : gettext ("floppy disk"));
+
+the translator will hardly know that "disk" and "floppy disk" are meant
+to be substituted in the other string.  Worse, in some languages (like
+French) the construction will not work: the translation of the word
+"full" depends on the gender of the first part of the sentence; it
+happens to be not the same for "disk" as for "floppy disk".
+
+   Complete sentences can be translated without problems:
+
+     printf (capacity > 5000000 ? gettext ("disk is full")
+             : gettext ("floppy disk is full"));
+
+   A similar problem appears at the level of sentence structure with
+this code:
+
+     printf ("#  Implicit rule search has%s been done.\n",
+             f->tried_implicit ? "" : " not");
+
+Adding `gettext' calls to this code cannot give correct results for all
+languages, because negation in some languages requires adding words at
+more than one place in the sentence.  By contrast, adding `gettext'
+calls does the job straightforwardly if the code starts out like this:
+
+     printf (f->tried_implicit
+             ? "#  Implicit rule search has been done.\n",
+             : "#  Implicit rule search has not been done.\n");
+
+   Another example is this one:
+
+     printf ("%d file%s processed", nfiles,
+             nfiles != 1 ? "s" : "");
+
+The problem with this example is that it assumes that plurals are made
+by adding `s'.  If you apply gettext to the format string, like this,
+
+     printf (gettext ("%d file%s processed"), nfiles,
+             nfiles != 1 ? "s" : "");
+
+the message can use different words, but it will still be forced to use
+`s' for the plural.  Here is a better way, with gettext being applied to
+the two strings independently:
+
+     printf ((nfiles != 1 ? gettext ("%d files processed")
+              : gettext ("%d file processed")),
+             nfiles);
+
+But this still doesn't work for languages like Polish, which has three
+plural forms: one for nfiles == 1, one for nfiles == 2, 3, 4, 22, 23,
+24, ...  and one for the rest.  The GNU `ngettext' function solves this
+problem:
+
+     printf (ngettext ("%d files processed", "%d file processed", nfiles),
+             nfiles);
+
+
+File: standards.info,  Node: Character Set,  Next: Quote Characters,  Prev: Internationalization,  Up: Writing C
+
+5.9 Character Set
+=================
+
+Sticking to the ASCII character set (plain text, 7-bit characters) is
+preferred in GNU source code comments, text documents, and other
+contexts, unless there is good reason to do something else because of
+the application domain.  For example, if source code deals with the
+French Revolutionary calendar, it is OK if its literal strings contain
+accented characters in month names like "Flore'al".  Also, it is OK to
+use non-ASCII characters to represent proper names of contributors in
+change logs (*note Change Logs::).
+
+   If you need to use non-ASCII characters, you should normally stick
+with one encoding, as one cannot in general mix encodings reliably.
+
+
+File: standards.info,  Node: Quote Characters,  Next: Mmap,  Prev: Character Set,  Up: Writing C
+
+5.10 Quote Characters
+=====================
+
+In the C locale, GNU programs should stick to plain ASCII for quotation
+characters in messages to users: preferably 0x60 (``') for left quotes
+and 0x27 (`'') for right quotes.  It is ok, but not required, to use
+locale-specific quotes in other locales.
+
+   The Gnulib (http://www.gnu.org/software/gnulib/) `quote' and
+`quotearg' modules provide a reasonably straightforward way to support
+locale-specific quote characters, as well as taking care of other
+issues, such as quoting a filename that itself contains a quote
+character.  See the Gnulib documentation for usage details.
+
+   In any case, the documentation for your program should clearly
+specify how it does quoting, if different than the preferred method of
+``' and `''.  This is especially important if the output of your
+program is ever likely to be parsed by another program.
+
+   Quotation characters are a difficult area in the computing world at
+this time: there are no true left or right quote characters in Latin1;
+the ``' character we use was standardized there as a grave accent.
+Moreover, Latin1 is still not universally usable.
+
+   Unicode contains the unambiguous quote characters required, and its
+common encoding UTF-8 is upward compatible with Latin1.  However,
+Unicode and UTF-8 are not universally well-supported, either.
+
+   This may change over the next few years, and then we will revisit
+this.
+
+
+File: standards.info,  Node: Mmap,  Prev: Quote Characters,  Up: Writing C
+
+5.11 Mmap
+=========
+
+Don't assume that `mmap' either works on all files or fails for all
+files.  It may work on some files and fail on others.
+
+   The proper way to use `mmap' is to try it on the specific file for
+which you want to use it--and if `mmap' doesn't work, fall back on
+doing the job in another way using `read' and `write'.
+
+   The reason this precaution is needed is that the GNU kernel (the
+HURD) provides a user-extensible file system, in which there can be many
+different kinds of "ordinary files."  Many of them support `mmap', but
+some do not.  It is important to make programs handle all these kinds
+of files.
+
+
+File: standards.info,  Node: Documentation,  Next: Managing Releases,  Prev: Writing C,  Up: Top
+
+6 Documenting Programs
+**********************
+
+A GNU program should ideally come with full free documentation, adequate
+for both reference and tutorial purposes.  If the package can be
+programmed or extended, the documentation should cover programming or
+extending it, as well as just using it.
+
+* Menu:
+
+* GNU Manuals::                 Writing proper manuals.
+* Doc Strings and Manuals::     Compiling doc strings doesn't make a manual.
+* Manual Structure Details::    Specific structure conventions.
+* License for Manuals::         Writing the distribution terms for a manual.
+* Manual Credits::              Giving credit to documentation contributors.
+* Printed Manuals::             Mentioning the printed manual.
+* NEWS File::                   NEWS files supplement manuals.
+* Change Logs::                 Recording changes.
+* Man Pages::                   Man pages are secondary.
+* Reading other Manuals::       How far you can go in learning
+                                from other manuals.
+
+
+File: standards.info,  Node: GNU Manuals,  Next: Doc Strings and Manuals,  Up: Documentation
+
+6.1 GNU Manuals
+===============
+
+The preferred document format for the GNU system is the Texinfo
+formatting language.  Every GNU package should (ideally) have
+documentation in Texinfo both for reference and for learners.  Texinfo
+makes it possible to produce a good quality formatted book, using TeX,
+and to generate an Info file.  It is also possible to generate HTML
+output from Texinfo source.  See the Texinfo manual, either the
+hardcopy, or the on-line version available through `info' or the Emacs
+Info subsystem (`C-h i').
+
+   Nowadays some other formats such as Docbook and Sgmltexi can be
+converted automatically into Texinfo.  It is ok to produce the Texinfo
+documentation by conversion this way, as long as it gives good results.
+
+   Make sure your manual is clear to a reader who knows nothing about
+the topic and reads it straight through.  This means covering basic
+topics at the beginning, and advanced topics only later.  This also
+means defining every specialized term when it is first used.
+
+   Programmers tend to carry over the structure of the program as the
+structure for its documentation.  But this structure is not necessarily
+good for explaining how to use the program; it may be irrelevant and
+confusing for a user.
+
+   Instead, the right way to structure documentation is according to the
+concepts and questions that a user will have in mind when reading it.
+This principle applies at every level, from the lowest (ordering
+sentences in a paragraph) to the highest (ordering of chapter topics
+within the manual).  Sometimes this structure of ideas matches the
+structure of the implementation of the software being documented--but
+often they are different.  An important part of learning to write good
+documentation is to learn to notice when you have unthinkingly
+structured the documentation like the implementation, stop yourself,
+and look for better alternatives.
+
+   For example, each program in the GNU system probably ought to be
+documented in one manual; but this does not mean each program should
+have its own manual.  That would be following the structure of the
+implementation, rather than the structure that helps the user
+understand.
+
+   Instead, each manual should cover a coherent _topic_.  For example,
+instead of a manual for `diff' and a manual for `diff3', we have one
+manual for "comparison of files" which covers both of those programs,
+as well as `cmp'.  By documenting these programs together, we can make
+the whole subject clearer.
+
+   The manual which discusses a program should certainly document all of
+the program's command-line options and all of its commands.  It should
+give examples of their use.  But don't organize the manual as a list of
+features.  Instead, organize it logically, by subtopics.  Address the
+questions that a user will ask when thinking about the job that the
+program does.  Don't just tell the reader what each feature can do--say
+what jobs it is good for, and show how to use it for those jobs.
+Explain what is recommended usage, and what kinds of usage users should
+avoid.
+
+   In general, a GNU manual should serve both as tutorial and reference.
+It should be set up for convenient access to each topic through Info,
+and for reading straight through (appendixes aside).  A GNU manual
+should give a good introduction to a beginner reading through from the
+start, and should also provide all the details that hackers want.  The
+Bison manual is a good example of this--please take a look at it to see
+what we mean.
+
+   That is not as hard as it first sounds.  Arrange each chapter as a
+logical breakdown of its topic, but order the sections, and write their
+text, so that reading the chapter straight through makes sense.  Do
+likewise when structuring the book into chapters, and when structuring a
+section into paragraphs.  The watchword is, _at each point, address the
+most fundamental and important issue raised by the preceding text._
+
+   If necessary, add extra chapters at the beginning of the manual which
+are purely tutorial and cover the basics of the subject.  These provide
+the framework for a beginner to understand the rest of the manual.  The
+Bison manual provides a good example of how to do this.
+
+   To serve as a reference, a manual should have an Index that list all
+the functions, variables, options, and important concepts that are part
+of the program.  One combined Index should do for a short manual, but
+sometimes for a complex package it is better to use multiple indices.
+The Texinfo manual includes advice on preparing good index entries, see
+*Note Making Index Entries: (texinfo)Index Entries, and see *Note
+Defining the Entries of an Index: (texinfo)Indexing Commands.
+
+   Don't use Unix man pages as a model for how to write GNU
+documentation; most of them are terse, badly structured, and give
+inadequate explanation of the underlying concepts.  (There are, of
+course, some exceptions.)  Also, Unix man pages use a particular format
+which is different from what we use in GNU manuals.
+
+   Please include an email address in the manual for where to report
+bugs _in the text of the manual_.
+
+   Please do not use the term "pathname" that is used in Unix
+documentation; use "file name" (two words) instead.  We use the term
+"path" only for search paths, which are lists of directory names.
+
+   Please do not use the term "illegal" to refer to erroneous input to
+a computer program.  Please use "invalid" for this, and reserve the
+term "illegal" for activities prohibited by law.
+
+   Please do not write `()' after a function name just to indicate it
+is a function.  `foo ()' is not a function, it is a function call with
+no arguments.
+
+
+File: standards.info,  Node: Doc Strings and Manuals,  Next: Manual Structure Details,  Prev: GNU Manuals,  Up: Documentation
+
+6.2 Doc Strings and Manuals
+===========================
+
+Some programming systems, such as Emacs, provide a documentation string
+for each function, command or variable.  You may be tempted to write a
+reference manual by compiling the documentation strings and writing a
+little additional text to go around them--but you must not do it.  That
+approach is a fundamental mistake.  The text of well-written
+documentation strings will be entirely wrong for a manual.
+
+   A documentation string needs to stand alone--when it appears on the
+screen, there will be no other text to introduce or explain it.
+Meanwhile, it can be rather informal in style.
+
+   The text describing a function or variable in a manual must not stand
+alone; it appears in the context of a section or subsection.  Other text
+at the beginning of the section should explain some of the concepts, and
+should often make some general points that apply to several functions or
+variables.  The previous descriptions of functions and variables in the
+section will also have given information about the topic.  A description
+written to stand alone would repeat some of that information; this
+redundancy looks bad.  Meanwhile, the informality that is acceptable in
+a documentation string is totally unacceptable in a manual.
+
+   The only good way to use documentation strings in writing a good
+manual is to use them as a source of information for writing good text.
+
+
+File: standards.info,  Node: Manual Structure Details,  Next: License for Manuals,  Prev: Doc Strings and Manuals,  Up: Documentation
+
+6.3 Manual Structure Details
+============================
+
+The title page of the manual should state the version of the programs or
+packages documented in the manual.  The Top node of the manual should
+also contain this information.  If the manual is changing more
+frequently than or independent of the program, also state a version
+number for the manual in both of these places.
+
+   Each program documented in the manual should have a node named
+`PROGRAM Invocation' or `Invoking PROGRAM'.  This node (together with
+its subnodes, if any) should describe the program's command line
+arguments and how to run it (the sort of information people would look
+for in a man page).  Start with an `@example' containing a template for
+all the options and arguments that the program uses.
+
+   Alternatively, put a menu item in some menu whose item name fits one
+of the above patterns.  This identifies the node which that item points
+to as the node for this purpose, regardless of the node's actual name.
+
+   The `--usage' feature of the Info reader looks for such a node or
+menu item in order to find the relevant text, so it is essential for
+every Texinfo file to have one.
+
+   If one manual describes several programs, it should have such a node
+for each program described in the manual.
+
+
+File: standards.info,  Node: License for Manuals,  Next: Manual Credits,  Prev: Manual Structure Details,  Up: Documentation
+
+6.4 License for Manuals
+=======================
+
+Please use the GNU Free Documentation License for all GNU manuals that
+are more than a few pages long.  Likewise for a collection of short
+documents--you only need one copy of the GNU FDL for the whole
+collection.  For a single short document, you can use a very permissive
+non-copyleft license, to avoid taking up space with a long license.
+
+   See `http://www.gnu.org/copyleft/fdl-howto.html' for more explanation
+of how to employ the GFDL.
+
+   Note that it is not obligatory to include a copy of the GNU GPL or
+GNU LGPL in a manual whose license is neither the GPL nor the LGPL.  It
+can be a good idea to include the program's license in a large manual;
+in a short manual, whose size would be increased considerably by
+including the program's license, it is probably better not to include
+it.
+
+
+File: standards.info,  Node: Manual Credits,  Next: Printed Manuals,  Prev: License for Manuals,  Up: Documentation
+
+6.5 Manual Credits
+==================
+
+Please credit the principal human writers of the manual as the authors,
+on the title page of the manual.  If a company sponsored the work, thank
+the company in a suitable place in the manual, but do not cite the
+company as an author.
+
+
+File: standards.info,  Node: Printed Manuals,  Next: NEWS File,  Prev: Manual Credits,  Up: Documentation
+
+6.6 Printed Manuals
+===================
+
+The FSF publishes some GNU manuals in printed form.  To encourage sales
+of these manuals, the on-line versions of the manual should mention at
+the very start that the printed manual is available and should point at
+information for getting it--for instance, with a link to the page
+`http://www.gnu.org/order/order.html'.  This should not be included in
+the printed manual, though, because there it is redundant.
+
+   It is also useful to explain in the on-line forms of the manual how
+the user can print out the manual from the sources.
+
+
+File: standards.info,  Node: NEWS File,  Next: Change Logs,  Prev: Printed Manuals,  Up: Documentation
+
+6.7 The NEWS File
+=================
+
+In addition to its manual, the package should have a file named `NEWS'
+which contains a list of user-visible changes worth mentioning.  In
+each new release, add items to the front of the file and identify the
+version they pertain to.  Don't discard old items; leave them in the
+file after the newer items.  This way, a user upgrading from any
+previous version can see what is new.
+
+   If the `NEWS' file gets very long, move some of the older items into
+a file named `ONEWS' and put a note at the end referring the user to
+that file.
+
+
+File: standards.info,  Node: Change Logs,  Next: Man Pages,  Prev: NEWS File,  Up: Documentation
+
+6.8 Change Logs
+===============
+
+Keep a change log to describe all the changes made to program source
+files.  The purpose of this is so that people investigating bugs in the
+future will know about the changes that might have introduced the bug.
+Often a new bug can be found by looking at what was recently changed.
+More importantly, change logs can help you eliminate conceptual
+inconsistencies between different parts of a program, by giving you a
+history of how the conflicting concepts arose and who they came from.
+
+* Menu:
+
+* Change Log Concepts::
+* Style of Change Logs::
+* Simple Changes::
+* Conditional Changes::
+* Indicating the Part Changed::
+
+
+File: standards.info,  Node: Change Log Concepts,  Next: Style of Change Logs,  Up: Change Logs
+
+6.8.1 Change Log Concepts
+-------------------------
+
+You can think of the change log as a conceptual "undo list" which
+explains how earlier versions were different from the current version.
+People can see the current version; they don't need the change log to
+tell them what is in it.  What they want from a change log is a clear
+explanation of how the earlier version differed.
+
+   The change log file is normally called `ChangeLog' and covers an
+entire directory.  Each directory can have its own change log, or a
+directory can use the change log of its parent directory--it's up to
+you.
+
+   Another alternative is to record change log information with a
+version control system such as RCS or CVS.  This can be converted
+automatically to a `ChangeLog' file using `rcs2log'; in Emacs, the
+command `C-x v a' (`vc-update-change-log') does the job.
+
+   There's no need to describe the full purpose of the changes or how
+they work together.  However, sometimes it is useful to write one line
+to describe the overall purpose of a change or a batch of changes.  If
+you think that a change calls for explanation, you're probably right.
+Please do explain it--but please put the full explanation in comments
+in the code, where people will see it whenever they see the code.  For
+example, "New function" is enough for the change log when you add a
+function, because there should be a comment before the function
+definition to explain what it does.
+
+   In the past, we recommended not mentioning changes in non-software
+files (manuals, help files, etc.) in change logs.  However, we've been
+advised that it is a good idea to include them, for the sake of
+copyright records.
+
+   The easiest way to add an entry to `ChangeLog' is with the Emacs
+command `M-x add-change-log-entry'.  An entry should have an asterisk,
+the name of the changed file, and then in parentheses the name of the
+changed functions, variables or whatever, followed by a colon.  Then
+describe the changes you made to that function or variable.
+
+
+File: standards.info,  Node: Style of Change Logs,  Next: Simple Changes,  Prev: Change Log Concepts,  Up: Change Logs
+
+6.8.2 Style of Change Logs
+--------------------------
+
+Here are some simple examples of change log entries, starting with the
+header line that says who made the change and when it was installed,
+followed by descriptions of specific changes.  (These examples are
+drawn from Emacs and GCC.)
+
+     1998-08-17  Richard Stallman  <rms at gnu.org>
+
+     * register.el (insert-register): Return nil.
+     (jump-to-register): Likewise.
+
+     * sort.el (sort-subr): Return nil.
+
+     * tex-mode.el (tex-bibtex-file, tex-file, tex-region):
+     Restart the tex shell if process is gone or stopped.
+     (tex-shell-running): New function.
+
+     * expr.c (store_one_arg): Round size up for move_block_to_reg.
+     (expand_call): Round up when emitting USE insns.
+     * stmt.c (assign_parms): Round size up for move_block_from_reg.
+
+   It's important to name the changed function or variable in full.
+Don't abbreviate function or variable names, and don't combine them.
+Subsequent maintainers will often search for a function name to find all
+the change log entries that pertain to it; if you abbreviate the name,
+they won't find it when they search.
+
+   For example, some people are tempted to abbreviate groups of function
+names by writing `* register.el ({insert,jump-to}-register)'; this is
+not a good idea, since searching for `jump-to-register' or
+`insert-register' would not find that entry.
+
+   Separate unrelated change log entries with blank lines.  When two
+entries represent parts of the same change, so that they work together,
+then don't put blank lines between them.  Then you can omit the file
+name and the asterisk when successive entries are in the same file.
+
+   Break long lists of function names by closing continued lines with
+`)', rather than `,', and opening the continuation with `(' as in this
+example:
+
+     * keyboard.c (menu_bar_items, tool_bar_items)
+     (Fexecute_extended_command): Deal with `keymap' property.
+
+   When you install someone else's changes, put the contributor's name
+in the change log entry rather than in the text of the entry.  In other
+words, write this:
+
+     2002-07-14  John Doe  <jdoe at gnu.org>
+
+             * sewing.c: Make it sew.
+
+rather than this:
+
+     2002-07-14  Usual Maintainer  <usual at gnu.org>
+
+             * sewing.c: Make it sew.  Patch by jdoe at gnu.org.
+
+   As for the date, that should be the date you applied the change.
+
+
+File: standards.info,  Node: Simple Changes,  Next: Conditional Changes,  Prev: Style of Change Logs,  Up: Change Logs
+
+6.8.3 Simple Changes
+--------------------
+
+Certain simple kinds of changes don't need much detail in the change
+log.
+
+   When you change the calling sequence of a function in a simple
+fashion, and you change all the callers of the function to use the new
+calling sequence, there is no need to make individual entries for all
+the callers that you changed.  Just write in the entry for the function
+being called, "All callers changed"--like this:
+
+     * keyboard.c (Fcommand_execute): New arg SPECIAL.
+     All callers changed.
+
+   When you change just comments or doc strings, it is enough to write
+an entry for the file, without mentioning the functions.  Just "Doc
+fixes" is enough for the change log.
+
+   There's no technical need to make change log entries for
+documentation files.  This is because documentation is not susceptible
+to bugs that are hard to fix.  Documentation does not consist of parts
+that must interact in a precisely engineered fashion.  To correct an
+error, you need not know the history of the erroneous passage; it is
+enough to compare what the documentation says with the way the program
+actually works.
+
+   However, you should keep change logs for documentation files when the
+project gets copyright assignments from its contributors, so as to make
+the records of authorship more accurate.
+
+
+File: standards.info,  Node: Conditional Changes,  Next: Indicating the Part Changed,  Prev: Simple Changes,  Up: Change Logs
+
+6.8.4 Conditional Changes
+-------------------------
+
+C programs often contain compile-time `#if' conditionals.  Many changes
+are conditional; sometimes you add a new definition which is entirely
+contained in a conditional.  It is very useful to indicate in the
+change log the conditions for which the change applies.
+
+   Our convention for indicating conditional changes is to use square
+brackets around the name of the condition.
+
+   Here is a simple example, describing a change which is conditional
+but does not have a function or entity name associated with it:
+
+     * xterm.c [SOLARIS2]: Include string.h.
+
+   Here is an entry describing a new definition which is entirely
+conditional.  This new definition for the macro `FRAME_WINDOW_P' is
+used only when `HAVE_X_WINDOWS' is defined:
+
+     * frame.h [HAVE_X_WINDOWS] (FRAME_WINDOW_P): Macro defined.
+
+   Here is an entry for a change within the function `init_display',
+whose definition as a whole is unconditional, but the changes themselves
+are contained in a `#ifdef HAVE_LIBNCURSES' conditional:
+
+     * dispnew.c (init_display) [HAVE_LIBNCURSES]: If X, call tgetent.
+
+   Here is an entry for a change that takes affect only when a certain
+macro is _not_ defined:
+
+     (gethostname) [!HAVE_SOCKETS]: Replace with winsock version.
+
+
+File: standards.info,  Node: Indicating the Part Changed,  Prev: Conditional Changes,  Up: Change Logs
+
+6.8.5 Indicating the Part Changed
+---------------------------------
+
+Indicate the part of a function which changed by using angle brackets
+enclosing an indication of what the changed part does.  Here is an entry
+for a change in the part of the function `sh-while-getopts' that deals
+with `sh' commands:
+
+     * progmodes/sh-script.el (sh-while-getopts) <sh>: Handle case that
+     user-specified option string is empty.
+
+
+File: standards.info,  Node: Man Pages,  Next: Reading other Manuals,  Prev: Change Logs,  Up: Documentation
+
+6.9 Man Pages
+=============
+
+In the GNU project, man pages are secondary.  It is not necessary or
+expected for every GNU program to have a man page, but some of them do.
+It's your choice whether to include a man page in your program.
+
+   When you make this decision, consider that supporting a man page
+requires continual effort each time the program is changed.  The time
+you spend on the man page is time taken away from more useful work.
+
+   For a simple program which changes little, updating the man page may
+be a small job.  Then there is little reason not to include a man page,
+if you have one.
+
+   For a large program that changes a great deal, updating a man page
+may be a substantial burden.  If a user offers to donate a man page,
+you may find this gift costly to accept.  It may be better to refuse
+the man page unless the same person agrees to take full responsibility
+for maintaining it--so that you can wash your hands of it entirely.  If
+this volunteer later ceases to do the job, then don't feel obliged to
+pick it up yourself; it may be better to withdraw the man page from the
+distribution until someone else agrees to update it.
+
+   When a program changes only a little, you may feel that the
+discrepancies are small enough that the man page remains useful without
+updating.  If so, put a prominent note near the beginning of the man
+page explaining that you don't maintain it and that the Texinfo manual
+is more authoritative.  The note should say how to access the Texinfo
+documentation.
+
+   Be sure that man pages include a copyright statement and free
+license.  The simple all-permissive license is appropriate for simple
+man pages (*note License Notices for Other Files: (maintain)License
+Notices for Other Files.).
+
+   For long man pages, with enough explanation and documentation that
+they can be considered true manuals, use the GFDL (*note License for
+Manuals::).
+
+   Finally, the GNU help2man program
+(`http://www.gnu.org/software/help2man/') is one way to automate
+generation of a man page, in this case from `--help' output.  This is
+sufficient in many cases.
+
+
+File: standards.info,  Node: Reading other Manuals,  Prev: Man Pages,  Up: Documentation
+
+6.10 Reading other Manuals
+==========================
+
+There may be non-free books or documentation files that describe the
+program you are documenting.
+
+   It is ok to use these documents for reference, just as the author of
+a new algebra textbook can read other books on algebra.  A large portion
+of any non-fiction book consists of facts, in this case facts about how
+a certain program works, and these facts are necessarily the same for
+everyone who writes about the subject.  But be careful not to copy your
+outline structure, wording, tables or examples from preexisting non-free
+documentation.  Copying from free documentation may be ok; please check
+with the FSF about the individual case.
+
+
+File: standards.info,  Node: Managing Releases,  Next: References,  Prev: Documentation,  Up: Top
+
+7 The Release Process
+*********************
+
+Making a release is more than just bundling up your source files in a
+tar file and putting it up for FTP.  You should set up your software so
+that it can be configured to run on a variety of systems.  Your Makefile
+should conform to the GNU standards described below, and your directory
+layout should also conform to the standards discussed below.  Doing so
+makes it easy to include your package into the larger framework of all
+GNU software.
+
+* Menu:
+
+* Configuration::               How configuration of GNU packages should work.
+* Makefile Conventions::        Makefile conventions.
+* Releases::                    Making releases
+
+
+File: standards.info,  Node: Configuration,  Next: Makefile Conventions,  Up: Managing Releases
+
+7.1 How Configuration Should Work
+=================================
+
+Each GNU distribution should come with a shell script named
+`configure'.  This script is given arguments which describe the kind of
+machine and system you want to compile the program for.  The
+`configure' script must record the configuration options so that they
+affect compilation.
+
+   The description here is the specification of the interface for the
+`configure' script in GNU packages.  Many packages implement it using
+GNU Autoconf (*note Introduction: (autoconf)Top.)  and/or GNU Automake
+(*note Introduction: (automake)Top.), but you do not have to use these
+tools.  You can implement it any way you like; for instance, by making
+`configure' be a wrapper around a completely different configuration
+system.
+
+   Another way for the `configure' script to operate is to make a link
+from a standard name such as `config.h' to the proper configuration
+file for the chosen system.  If you use this technique, the
+distribution should _not_ contain a file named `config.h'.  This is so
+that people won't be able to build the program without configuring it
+first.
+
+   Another thing that `configure' can do is to edit the Makefile.  If
+you do this, the distribution should _not_ contain a file named
+`Makefile'.  Instead, it should include a file `Makefile.in' which
+contains the input used for editing.  Once again, this is so that people
+won't be able to build the program without configuring it first.
+
+   If `configure' does write the `Makefile', then `Makefile' should
+have a target named `Makefile' which causes `configure' to be rerun,
+setting up the same configuration that was set up last time.  The files
+that `configure' reads should be listed as dependencies of `Makefile'.
+
+   All the files which are output from the `configure' script should
+have comments at the beginning explaining that they were generated
+automatically using `configure'.  This is so that users won't think of
+trying to edit them by hand.
+
+   The `configure' script should write a file named `config.status'
+which describes which configuration options were specified when the
+program was last configured.  This file should be a shell script which,
+if run, will recreate the same configuration.
+
+   The `configure' script should accept an option of the form
+`--srcdir=DIRNAME' to specify the directory where sources are found (if
+it is not the current directory).  This makes it possible to build the
+program in a separate directory, so that the actual source directory is
+not modified.
+
+   If the user does not specify `--srcdir', then `configure' should
+check both `.' and `..' to see if it can find the sources.  If it finds
+the sources in one of these places, it should use them from there.
+Otherwise, it should report that it cannot find the sources, and should
+exit with nonzero status.
+
+   Usually the easy way to support `--srcdir' is by editing a
+definition of `VPATH' into the Makefile.  Some rules may need to refer
+explicitly to the specified source directory.  To make this possible,
+`configure' can add to the Makefile a variable named `srcdir' whose
+value is precisely the specified directory.
+
+   In addition, the `configure' script should take options
+corresponding to most of the standard directory variables (*note
+Directory Variables::).  Here is the list:
+
+     --prefix --exec-prefix --bindir --sbindir --libexecdir --sysconfdir
+     --sharedstatedir --localstatedir --libdir --includedir --oldincludedir
+     --datarootdir --datadir --infodir --localedir --mandir --docdir
+     --htmldir --dvidir --pdfdir --psdir
+
+   The `configure' script should also take an argument which specifies
+the type of system to build the program for.  This argument should look
+like this:
+
+     CPU-COMPANY-SYSTEM
+
+   For example, an Athlon-based GNU/Linux system might be
+`i686-pc-linux-gnu'.
+
+   The `configure' script needs to be able to decode all plausible
+alternatives for how to describe a machine.  Thus,
+`athlon-pc-gnu/linux' would be a valid alias.  There is a shell script
+called `config.sub'
+(http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD)
+that you can use as a subroutine to validate system types and
+canonicalize aliases.
+
+   The `configure' script should also take the option
+`--build=BUILDTYPE', which should be equivalent to a plain BUILDTYPE
+argument.  For example, `configure --build=i686-pc-linux-gnu' is
+equivalent to `configure i686-pc-linux-gnu'.  When the build type is
+not specified by an option or argument, the `configure' script should
+normally guess it using the shell script `config.guess'
+(http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD).
+
+   Other options are permitted to specify in more detail the software
+or hardware present on the machine, to include or exclude optional parts
+of the package, or to adjust the name of some tools or arguments to
+them:
+
+`--enable-FEATURE[=PARAMETER]'
+     Configure the package to build and install an optional user-level
+     facility called FEATURE.  This allows users to choose which
+     optional features to include.  Giving an optional PARAMETER of
+     `no' should omit FEATURE, if it is built by default.
+
+     No `--enable' option should *ever* cause one feature to replace
+     another.  No `--enable' option should ever substitute one useful
+     behavior for another useful behavior.  The only proper use for
+     `--enable' is for questions of whether to build part of the program
+     or exclude it.
+
+`--with-PACKAGE'
+     The package PACKAGE will be installed, so configure this package
+     to work with PACKAGE.
+
+     Possible values of PACKAGE include `gnu-as' (or `gas'), `gnu-ld',
+     `gnu-libc', `gdb', `x', and `x-toolkit'.
+
+     Do not use a `--with' option to specify the file name to use to
+     find certain files.  That is outside the scope of what `--with'
+     options are for.
+
+`VARIABLE=VALUE'
+     Set the value of the variable VARIABLE to VALUE.  This is used to
+     override the default values of commands or arguments in the build
+     process.  For example, the user could issue `configure CFLAGS=-g
+     CXXFLAGS=-g' to build with debugging information and without the
+     default optimization.
+
+     Specifying variables as arguments to `configure', like this:
+          ./configure CC=gcc
+     is preferable to setting them in environment variables:
+          CC=gcc ./configure
+     as it helps to recreate the same configuration later with
+     `config.status'.  However, both methods should be supported.
+
+   All `configure' scripts should accept all of the "detail" options
+and the variable settings, whether or not they make any difference to
+the particular package at hand.  In particular, they should accept any
+option that starts with `--with-' or `--enable-'.  This is so users
+will be able to configure an entire GNU source tree at once with a
+single set of options.
+
+   You will note that the categories `--with-' and `--enable-' are
+narrow: they *do not* provide a place for any sort of option you might
+think of.  That is deliberate.  We want to limit the possible
+configuration options in GNU software.  We do not want GNU programs to
+have idiosyncratic configuration options.
+
+   Packages that perform part of the compilation process may support
+cross-compilation.  In such a case, the host and target machines for the
+program may be different.
+
+   The `configure' script should normally treat the specified type of
+system as both the host and the target, thus producing a program which
+works for the same type of machine that it runs on.
+
+   To compile a program to run on a host type that differs from the
+build type, use the configure option `--host=HOSTTYPE', where HOSTTYPE
+uses the same syntax as BUILDTYPE.  The host type normally defaults to
+the build type.
+
+   To configure a cross-compiler, cross-assembler, or what have you, you
+should specify a target different from the host, using the configure
+option `--target=TARGETTYPE'.  The syntax for TARGETTYPE is the same as
+for the host type.  So the command would look like this:
+
+     ./configure --host=HOSTTYPE --target=TARGETTYPE
+
+   The target type normally defaults to the host type.  Programs for
+which cross-operation is not meaningful need not accept the `--target'
+option, because configuring an entire operating system for
+cross-operation is not a meaningful operation.
+
+   Some programs have ways of configuring themselves automatically.  If
+your program is set up to do this, your `configure' script can simply
+ignore most of its arguments.
+
+
+File: standards.info,  Node: Makefile Conventions,  Next: Releases,  Prev: Configuration,  Up: Managing Releases
+
+7.2 Makefile Conventions
+========================
+
+This node describes conventions for writing the Makefiles for GNU
+programs.  Using Automake will help you write a Makefile that follows
+these conventions.
+
+* Menu:
+
+* Makefile Basics::             General conventions for Makefiles.
+* Utilities in Makefiles::      Utilities to be used in Makefiles.
+* Command Variables::           Variables for specifying commands.
+* DESTDIR::                     Supporting staged installs.
+* Directory Variables::         Variables for installation directories.
+* Standard Targets::            Standard targets for users.
+* Install Command Categories::  Three categories of commands in the `install'
+                                  rule: normal, pre-install and post-install.
+
+
+File: standards.info,  Node: Makefile Basics,  Next: Utilities in Makefiles,  Up: Makefile Conventions
+
+7.2.1 General Conventions for Makefiles
+---------------------------------------
+
+Every Makefile should contain this line:
+
+     SHELL = /bin/sh
+
+to avoid trouble on systems where the `SHELL' variable might be
+inherited from the environment.  (This is never a problem with GNU
+`make'.)
+
+   Different `make' programs have incompatible suffix lists and
+implicit rules, and this sometimes creates confusion or misbehavior.  So
+it is a good idea to set the suffix list explicitly using only the
+suffixes you need in the particular Makefile, like this:
+
+     .SUFFIXES:
+     .SUFFIXES: .c .o
+
+The first line clears out the suffix list, the second introduces all
+suffixes which may be subject to implicit rules in this Makefile.
+
+   Don't assume that `.' is in the path for command execution.  When
+you need to run programs that are a part of your package during the
+make, please make sure that it uses `./' if the program is built as
+part of the make or `$(srcdir)/' if the file is an unchanging part of
+the source code.  Without one of these prefixes, the current search
+path is used.
+
+   The distinction between `./' (the "build directory") and
+`$(srcdir)/' (the "source directory") is important because users can
+build in a separate directory using the `--srcdir' option to
+`configure'.  A rule of the form:
+
+     foo.1 : foo.man sedscript
+             sed -e sedscript foo.man > foo.1
+
+will fail when the build directory is not the source directory, because
+`foo.man' and `sedscript' are in the source directory.
+
+   When using GNU `make', relying on `VPATH' to find the source file
+will work in the case where there is a single dependency file, since
+the `make' automatic variable `$<' will represent the source file
+wherever it is.  (Many versions of `make' set `$<' only in implicit
+rules.)  A Makefile target like
+
+     foo.o : bar.c
+             $(CC) -I. -I$(srcdir) $(CFLAGS) -c bar.c -o foo.o
+
+should instead be written as
+
+     foo.o : bar.c
+             $(CC) -I. -I$(srcdir) $(CFLAGS) -c $< -o $@
+
+in order to allow `VPATH' to work correctly.  When the target has
+multiple dependencies, using an explicit `$(srcdir)' is the easiest way
+to make the rule work well.  For example, the target above for `foo.1'
+is best written as:
+
+     foo.1 : foo.man sedscript
+             sed -e $(srcdir)/sedscript $(srcdir)/foo.man > $@
+
+   GNU distributions usually contain some files which are not source
+files--for example, Info files, and the output from Autoconf, Automake,
+Bison or Flex.  Since these files normally appear in the source
+directory, they should always appear in the source directory, not in the
+build directory.  So Makefile rules to update them should put the
+updated files in the source directory.
+
+   However, if a file does not appear in the distribution, then the
+Makefile should not put it in the source directory, because building a
+program in ordinary circumstances should not modify the source directory
+in any way.
+
+   Try to make the build and installation targets, at least (and all
+their subtargets) work correctly with a parallel `make'.
+
+
+File: standards.info,  Node: Utilities in Makefiles,  Next: Command Variables,  Prev: Makefile Basics,  Up: Makefile Conventions
+
+7.2.2 Utilities in Makefiles
+----------------------------
+
+Write the Makefile commands (and any shell scripts, such as
+`configure') to run in `sh', not in `csh'.  Don't use any special
+features of `ksh' or `bash'.
+
+   The `configure' script and the Makefile rules for building and
+installation should not use any utilities directly except these:
+
+     cat cmp cp diff echo egrep expr false grep install-info
+     ln ls mkdir mv pwd rm rmdir sed sleep sort tar test touch true
+
+   The compression program `gzip' can be used in the `dist' rule.
+
+   Stick to the generally supported options for these programs.  For
+example, don't use `mkdir -p', convenient as it may be, because most
+systems don't support it.
+
+   It is a good idea to avoid creating symbolic links in makefiles,
+since a few systems don't support them.
+
+   The Makefile rules for building and installation can also use
+compilers and related programs, but should do so via `make' variables
+so that the user can substitute alternatives.  Here are some of the
+programs we mean:
+
+     ar bison cc flex install ld ldconfig lex
+     make makeinfo ranlib texi2dvi yacc
+
+   Use the following `make' variables to run those programs:
+
+     $(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LDCONFIG) $(LEX)
+     $(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC)
+
+   When you use `ranlib' or `ldconfig', you should make sure nothing
+bad happens if the system does not have the program in question.
+Arrange to ignore an error from that command, and print a message before
+the command to tell the user that failure of this command does not mean
+a problem.  (The Autoconf `AC_PROG_RANLIB' macro can help with this.)
+
+   If you use symbolic links, you should implement a fallback for
+systems that don't have symbolic links.
+
+   Additional utilities that can be used via Make variables are:
+
+     chgrp chmod chown mknod
+
+   It is ok to use other utilities in Makefile portions (or scripts)
+intended only for particular systems where you know those utilities
+exist.
+
+
+File: standards.info,  Node: Command Variables,  Next: DESTDIR,  Prev: Utilities in Makefiles,  Up: Makefile Conventions
+
+7.2.3 Variables for Specifying Commands
+---------------------------------------
+
+Makefiles should provide variables for overriding certain commands,
+options, and so on.
+
+   In particular, you should run most utility programs via variables.
+Thus, if you use Bison, have a variable named `BISON' whose default
+value is set with `BISON = bison', and refer to it with `$(BISON)'
+whenever you need to use Bison.
+
+   File management utilities such as `ln', `rm', `mv', and so on, need
+not be referred to through variables in this way, since users don't
+need to replace them with other programs.
+
+   Each program-name variable should come with an options variable that
+is used to supply options to the program.  Append `FLAGS' to the
+program-name variable name to get the options variable name--for
+example, `BISONFLAGS'.  (The names `CFLAGS' for the C compiler,
+`YFLAGS' for yacc, and `LFLAGS' for lex, are exceptions to this rule,
+but we keep them because they are standard.)  Use `CPPFLAGS' in any
+compilation command that runs the preprocessor, and use `LDFLAGS' in
+any compilation command that does linking as well as in any direct use
+of `ld'.
+
+   If there are C compiler options that _must_ be used for proper
+compilation of certain files, do not include them in `CFLAGS'.  Users
+expect to be able to specify `CFLAGS' freely themselves.  Instead,
+arrange to pass the necessary options to the C compiler independently
+of `CFLAGS', by writing them explicitly in the compilation commands or
+by defining an implicit rule, like this:
+
+     CFLAGS = -g
+     ALL_CFLAGS = -I. $(CFLAGS)
+     .c.o:
+             $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
+
+   Do include the `-g' option in `CFLAGS', because that is not
+_required_ for proper compilation.  You can consider it a default that
+is only recommended.  If the package is set up so that it is compiled
+with GCC by default, then you might as well include `-O' in the default
+value of `CFLAGS' as well.
+
+   Put `CFLAGS' last in the compilation command, after other variables
+containing compiler options, so the user can use `CFLAGS' to override
+the others.
+
+   `CFLAGS' should be used in every invocation of the C compiler, both
+those which do compilation and those which do linking.
+
+   Every Makefile should define the variable `INSTALL', which is the
+basic command for installing a file into the system.
+
+   Every Makefile should also define the variables `INSTALL_PROGRAM'
+and `INSTALL_DATA'.  (The default for `INSTALL_PROGRAM' should be
+`$(INSTALL)'; the default for `INSTALL_DATA' should be `${INSTALL} -m
+644'.)  Then it should use those variables as the commands for actual
+installation, for executables and non-executables respectively.
+Minimal use of these variables is as follows:
+
+     $(INSTALL_PROGRAM) foo $(bindir)/foo
+     $(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a
+
+   However, it is preferable to support a `DESTDIR' prefix on the
+target files, as explained in the next section.
+
+Always use a file name, not a directory name, as the second argument of
+the installation commands.  Use a separate command for each file to be
+installed.
+
+
+File: standards.info,  Node: DESTDIR,  Next: Directory Variables,  Prev: Command Variables,  Up: Makefile Conventions
+
+7.2.4 `DESTDIR': support for staged installs
+--------------------------------------------
+
+`DESTDIR' is a variable prepended to each installed target file, like
+this:
+
+     $(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo
+     $(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a
+
+   The `DESTDIR' variable is specified by the user on the `make'
+command line.  For example:
+
+     make DESTDIR=/tmp/stage install
+
+`DESTDIR' should be supported only in the `install*' and `uninstall*'
+targets, as those are the only targets where it is useful.
+
+   If your installation step would normally install
+`/usr/local/bin/foo' and `/usr/local/lib/libfoo.a', then an
+installation invoked as in the example above would install
+`/tmp/stage/usr/local/bin/foo' and `/tmp/stage/usr/local/lib/libfoo.a'
+instead.
+
+   Prepending the variable `DESTDIR' to each target in this way
+provides for "staged installs", where the installed files are not
+placed directly into their expected location but are instead copied
+into a temporary location (`DESTDIR').  However, installed files
+maintain their relative directory structure and any embedded file names
+will not be modified.
+
+   You should not set the value of `DESTDIR' in your `Makefile' at all;
+then the files are installed into their expected locations by default.
+Also, specifying `DESTDIR' should not change the operation of the
+software in any way, so its value should not be included in any file
+contents.
+
+   `DESTDIR' support is commonly used in package creation.  It is also
+helpful to users who want to understand what a given package will
+install where, and to allow users who don't normally have permissions
+to install into protected areas to build and install before gaining
+those permissions.  Finally, it can be useful with tools such as
+`stow', where code is installed in one place but made to appear to be
+installed somewhere else using symbolic links or special mount
+operations.  So, we strongly recommend GNU packages support `DESTDIR',
+though it is not an absolute requirement.
+
+
+File: standards.info,  Node: Directory Variables,  Next: Standard Targets,  Prev: DESTDIR,  Up: Makefile Conventions
+
+7.2.5 Variables for Installation Directories
+--------------------------------------------
+
+Installation directories should always be named by variables, so it is
+easy to install in a nonstandard place.  The standard names for these
+variables and the values they should have in GNU packages are described
+below.  They are based on a standard file system layout; variants of it
+are used in GNU/Linux and other modern operating systems.
+
+   Installers are expected to override these values when calling `make'
+(e.g., `make prefix=/usr install' or `configure' (e.g., `configure
+--prefix=/usr').  GNU packages should not try to guess which value
+should be appropriate for these variables on the system they are being
+installed onto: use the default settings specified here so that all GNU
+packages behave identically, allowing the installer to achieve any
+desired layout.
+
+   These first two variables set the root for the installation.  All the
+other installation directories should be subdirectories of one of these
+two, and nothing should be directly installed into these two
+directories.
+
+`prefix'
+     A prefix used in constructing the default values of the variables
+     listed below.  The default value of `prefix' should be
+     `/usr/local'.  When building the complete GNU system, the prefix
+     will be empty and `/usr' will be a symbolic link to `/'.  (If you
+     are using Autoconf, write it as `@prefix@'.)
+
+     Running `make install' with a different value of `prefix' from the
+     one used to build the program should _not_ recompile the program.
+
+`exec_prefix'
+     A prefix used in constructing the default values of some of the
+     variables listed below.  The default value of `exec_prefix' should
+     be `$(prefix)'.  (If you are using Autoconf, write it as
+     `@exec_prefix@'.)
+
+     Generally, `$(exec_prefix)' is used for directories that contain
+     machine-specific files (such as executables and subroutine
+     libraries), while `$(prefix)' is used directly for other
+     directories.
+
+     Running `make install' with a different value of `exec_prefix'
+     from the one used to build the program should _not_ recompile the
+     program.
+
+   Executable programs are installed in one of the following
+directories.
+
+`bindir'
+     The directory for installing executable programs that users can
+     run.  This should normally be `/usr/local/bin', but write it as
+     `$(exec_prefix)/bin'.  (If you are using Autoconf, write it as
+     `@bindir@'.)
+
+`sbindir'
+     The directory for installing executable programs that can be run
+     from the shell, but are only generally useful to system
+     administrators.  This should normally be `/usr/local/sbin', but
+     write it as `$(exec_prefix)/sbin'.  (If you are using Autoconf,
+     write it as `@sbindir@'.)
+
+`libexecdir'
+     The directory for installing executable programs to be run by other
+     programs rather than by users.  This directory should normally be
+     `/usr/local/libexec', but write it as `$(exec_prefix)/libexec'.
+     (If you are using Autoconf, write it as `@libexecdir@'.)
+
+     The definition of `libexecdir' is the same for all packages, so
+     you should install your data in a subdirectory thereof.  Most
+     packages install their data under `$(libexecdir)/PACKAGE-NAME/',
+     possibly within additional subdirectories thereof, such as
+     `$(libexecdir)/PACKAGE-NAME/MACHINE/VERSION'.
+
+   Data files used by the program during its execution are divided into
+categories in two ways.
+
+   * Some files are normally modified by programs; others are never
+     normally modified (though users may edit some of these).
+
+   * Some files are architecture-independent and can be shared by all
+     machines at a site; some are architecture-dependent and can be
+     shared only by machines of the same kind and operating system;
+     others may never be shared between two machines.
+
+   This makes for six different possibilities.  However, we want to
+discourage the use of architecture-dependent files, aside from object
+files and libraries.  It is much cleaner to make other data files
+architecture-independent, and it is generally not hard.
+
+   Here are the variables Makefiles should use to specify directories
+to put these various kinds of files in:
+
+`datarootdir'
+     The root of the directory tree for read-only
+     architecture-independent data files.  This should normally be
+     `/usr/local/share', but write it as `$(prefix)/share'.  (If you
+     are using Autoconf, write it as `@datarootdir@'.)  `datadir''s
+     default value is based on this variable; so are `infodir',
+     `mandir', and others.
+
+`datadir'
+     The directory for installing idiosyncratic read-only
+     architecture-independent data files for this program.  This is
+     usually the same place as `datarootdir', but we use the two
+     separate variables so that you can move these program-specific
+     files without altering the location for Info files, man pages, etc.
+
+     This should normally be `/usr/local/share', but write it as
+     `$(datarootdir)'.  (If you are using Autoconf, write it as
+     `@datadir@'.)
+
+     The definition of `datadir' is the same for all packages, so you
+     should install your data in a subdirectory thereof.  Most packages
+     install their data under `$(datadir)/PACKAGE-NAME/'.
+
+`sysconfdir'
+     The directory for installing read-only data files that pertain to a
+     single machine-that is to say, files for configuring a host.
+     Mailer and network configuration files, `/etc/passwd', and so
+     forth belong here.  All the files in this directory should be
+     ordinary ASCII text files.  This directory should normally be
+     `/usr/local/etc', but write it as `$(prefix)/etc'.  (If you are
+     using Autoconf, write it as `@sysconfdir@'.)
+
+     Do not install executables here in this directory (they probably
+     belong in `$(libexecdir)' or `$(sbindir)').  Also do not install
+     files that are modified in the normal course of their use (programs
+     whose purpose is to change the configuration of the system
+     excluded).  Those probably belong in `$(localstatedir)'.
+
+`sharedstatedir'
+     The directory for installing architecture-independent data files
+     which the programs modify while they run.  This should normally be
+     `/usr/local/com', but write it as `$(prefix)/com'.  (If you are
+     using Autoconf, write it as `@sharedstatedir@'.)
+
+`localstatedir'
+     The directory for installing data files which the programs modify
+     while they run, and that pertain to one specific machine.  Users
+     should never need to modify files in this directory to configure
+     the package's operation; put such configuration information in
+     separate files that go in `$(datadir)' or `$(sysconfdir)'.
+     `$(localstatedir)' should normally be `/usr/local/var', but write
+     it as `$(prefix)/var'.  (If you are using Autoconf, write it as
+     `@localstatedir@'.)
+
+   These variables specify the directory for installing certain specific
+types of files, if your program has them.  Every GNU package should
+have Info files, so every program needs `infodir', but not all need
+`libdir' or `lispdir'.
+
+`includedir'
+     The directory for installing header files to be included by user
+     programs with the C `#include' preprocessor directive.  This
+     should normally be `/usr/local/include', but write it as
+     `$(prefix)/include'.  (If you are using Autoconf, write it as
+     `@includedir@'.)
+
+     Most compilers other than GCC do not look for header files in
+     directory `/usr/local/include'.  So installing the header files
+     this way is only useful with GCC.  Sometimes this is not a problem
+     because some libraries are only really intended to work with GCC.
+     But some libraries are intended to work with other compilers.
+     They should install their header files in two places, one
+     specified by `includedir' and one specified by `oldincludedir'.
+
+`oldincludedir'
+     The directory for installing `#include' header files for use with
+     compilers other than GCC.  This should normally be `/usr/include'.
+     (If you are using Autoconf, you can write it as `@oldincludedir@'.)
+
+     The Makefile commands should check whether the value of
+     `oldincludedir' is empty.  If it is, they should not try to use
+     it; they should cancel the second installation of the header files.
+
+     A package should not replace an existing header in this directory
+     unless the header came from the same package.  Thus, if your Foo
+     package provides a header file `foo.h', then it should install the
+     header file in the `oldincludedir' directory if either (1) there
+     is no `foo.h' there or (2) the `foo.h' that exists came from the
+     Foo package.
+
+     To tell whether `foo.h' came from the Foo package, put a magic
+     string in the file--part of a comment--and `grep' for that string.
+
+`docdir'
+     The directory for installing documentation files (other than Info)
+     for this package.  By default, it should be
+     `/usr/local/share/doc/YOURPKG', but it should be written as
+     `$(datarootdir)/doc/YOURPKG'.  (If you are using Autoconf, write
+     it as `@docdir@'.)  The YOURPKG subdirectory, which may include a
+     version number, prevents collisions among files with common names,
+     such as `README'.
+
+`infodir'
+     The directory for installing the Info files for this package.  By
+     default, it should be `/usr/local/share/info', but it should be
+     written as `$(datarootdir)/info'.  (If you are using Autoconf,
+     write it as `@infodir@'.)  `infodir' is separate from `docdir' for
+     compatibility with existing practice.
+
+`htmldir'
+`dvidir'
+`pdfdir'
+`psdir'
+     Directories for installing documentation files in the particular
+     format.  They should all be set to `$(docdir)' by default.  (If
+     you are using Autoconf, write them as `@htmldir@', `@dvidir@',
+     etc.)  Packages which supply several translations of their
+     documentation should install them in `$(htmldir)/'LL,
+     `$(pdfdir)/'LL, etc. where LL is a locale abbreviation such as
+     `en' or `pt_BR'.
+
+`libdir'
+     The directory for object files and libraries of object code.  Do
+     not install executables here, they probably ought to go in
+     `$(libexecdir)' instead.  The value of `libdir' should normally be
+     `/usr/local/lib', but write it as `$(exec_prefix)/lib'.  (If you
+     are using Autoconf, write it as `@libdir@'.)
+
+`lispdir'
+     The directory for installing any Emacs Lisp files in this package.
+     By default, it should be `/usr/local/share/emacs/site-lisp', but
+     it should be written as `$(datarootdir)/emacs/site-lisp'.
+
+     If you are using Autoconf, write the default as `@lispdir@'.  In
+     order to make `@lispdir@' work, you need the following lines in
+     your `configure.in' file:
+
+          lispdir='${datarootdir}/emacs/site-lisp'
+          AC_SUBST(lispdir)
+
+`localedir'
+     The directory for installing locale-specific message catalogs for
+     this package.  By default, it should be `/usr/local/share/locale',
+     but it should be written as `$(datarootdir)/locale'.  (If you are
+     using Autoconf, write it as `@localedir@'.)  This directory
+     usually has a subdirectory per locale.
+
+   Unix-style man pages are installed in one of the following:
+
+`mandir'
+     The top-level directory for installing the man pages (if any) for
+     this package.  It will normally be `/usr/local/share/man', but you
+     should write it as `$(datarootdir)/man'.  (If you are using
+     Autoconf, write it as `@mandir@'.)
+
+`man1dir'
+     The directory for installing section 1 man pages.  Write it as
+     `$(mandir)/man1'.
+
+`man2dir'
+     The directory for installing section 2 man pages.  Write it as
+     `$(mandir)/man2'
+
+`...'
+     *Don't make the primary documentation for any GNU software be a
+     man page.  Write a manual in Texinfo instead.  Man pages are just
+     for the sake of people running GNU software on Unix, which is a
+     secondary application only.*
+
+`manext'
+     The file name extension for the installed man page.  This should
+     contain a period followed by the appropriate digit; it should
+     normally be `.1'.
+
+`man1ext'
+     The file name extension for installed section 1 man pages.
+
+`man2ext'
+     The file name extension for installed section 2 man pages.
+
+`...'
+     Use these names instead of `manext' if the package needs to
+     install man pages in more than one section of the manual.
+
+   And finally, you should set the following variable:
+
+`srcdir'
+     The directory for the sources being compiled.  The value of this
+     variable is normally inserted by the `configure' shell script.
+     (If you are using Autoconf, use `srcdir = @srcdir@'.)
+
+   For example:
+
+     # Common prefix for installation directories.
+     # NOTE: This directory must exist when you start the install.
+     prefix = /usr/local
+     datarootdir = $(prefix)/share
+     datadir = $(datarootdir)
+     exec_prefix = $(prefix)
+     # Where to put the executable for the command `gcc'.
+     bindir = $(exec_prefix)/bin
+     # Where to put the directories used by the compiler.
+     libexecdir = $(exec_prefix)/libexec
+     # Where to put the Info files.
+     infodir = $(datarootdir)/info
+
+   If your program installs a large number of files into one of the
+standard user-specified directories, it might be useful to group them
+into a subdirectory particular to that program.  If you do this, you
+should write the `install' rule to create these subdirectories.
+
+   Do not expect the user to include the subdirectory name in the value
+of any of the variables listed above.  The idea of having a uniform set
+of variable names for installation directories is to enable the user to
+specify the exact same values for several different GNU packages.  In
+order for this to be useful, all the packages must be designed so that
+they will work sensibly when the user does so.
+
+   At times, not all of these variables may be implemented in the
+current release of Autoconf and/or Automake; but as of Autoconf 2.60, we
+believe all of them are.  When any are missing, the descriptions here
+serve as specifications for what Autoconf will implement.  As a
+programmer, you can either use a development version of Autoconf or
+avoid using these variables until a stable release is made which
+supports them.
+
+
+File: standards.info,  Node: Standard Targets,  Next: Install Command Categories,  Prev: Directory Variables,  Up: Makefile Conventions
+
+7.2.6 Standard Targets for Users
+--------------------------------
+
+All GNU programs should have the following targets in their Makefiles:
+
+`all'
+     Compile the entire program.  This should be the default target.
+     This target need not rebuild any documentation files; Info files
+     should normally be included in the distribution, and DVI (and other
+     documentation format) files should be made only when explicitly
+     asked for.
+
+     By default, the Make rules should compile and link with `-g', so
+     that executable programs have debugging symbols.  Users who don't
+     mind being helpless can strip the executables later if they wish.
+
+`install'
+     Compile the program and copy the executables, libraries, and so on
+     to the file names where they should reside for actual use.  If
+     there is a simple test to verify that a program is properly
+     installed, this target should run that test.
+
+     Do not strip executables when installing them.  Devil-may-care
+     users can use the `install-strip' target to do that.
+
+     If possible, write the `install' target rule so that it does not
+     modify anything in the directory where the program was built,
+     provided `make all' has just been done.  This is convenient for
+     building the program under one user name and installing it under
+     another.
+
+     The commands should create all the directories in which files are
+     to be installed, if they don't already exist.  This includes the
+     directories specified as the values of the variables `prefix' and
+     `exec_prefix', as well as all subdirectories that are needed.  One
+     way to do this is by means of an `installdirs' target as described
+     below.
+
+     Use `-' before any command for installing a man page, so that
+     `make' will ignore any errors.  This is in case there are systems
+     that don't have the Unix man page documentation system installed.
+
+     The way to install Info files is to copy them into `$(infodir)'
+     with `$(INSTALL_DATA)' (*note Command Variables::), and then run
+     the `install-info' program if it is present.  `install-info' is a
+     program that edits the Info `dir' file to add or update the menu
+     entry for the given Info file; it is part of the Texinfo package.
+     Here is a sample rule to install an Info file:
+
+          $(DESTDIR)$(infodir)/foo.info: foo.info
+                  $(POST_INSTALL)
+          # There may be a newer info file in . than in srcdir.
+                  -if test -f foo.info; then d=.; \
+                   else d=$(srcdir); fi; \
+                  $(INSTALL_DATA) $$d/foo.info $(DESTDIR)$@; \
+          # Run install-info only if it exists.
+          # Use `if' instead of just prepending `-' to the
+          # line so we notice real errors from install-info.
+          # We use `$(SHELL) -c' because some shells do not
+          # fail gracefully when there is an unknown command.
+                  if $(SHELL) -c 'install-info --version' \
+                     >/dev/null 2>&1; then \
+                    install-info --dir-file=$(DESTDIR)$(infodir)/dir \
+                                 $(DESTDIR)$(infodir)/foo.info; \
+                  else true; fi
+
+     When writing the `install' target, you must classify all the
+     commands into three categories: normal ones, "pre-installation"
+     commands and "post-installation" commands.  *Note Install Command
+     Categories::.
+
+`install-html'
+`install-dvi'
+`install-pdf'
+`install-ps'
+     These targets install documentation in formats other than Info;
+     they're intended to be called explicitly by the person installing
+     the package, if that format is desired.  GNU prefers Info files,
+     so these must be installed by the `install' target.
+
+     When you have many documentation files to install, we recommend
+     that you avoid collisions and clutter by arranging for these
+     targets to install in subdirectories of the appropriate
+     installation directory, such as `htmldir'.  As one example, if
+     your package has multiple manuals, and you wish to install HTML
+     documentation with many files (such as the "split" mode output by
+     `makeinfo --html'), you'll certainly want to use subdirectories,
+     or two nodes with the same name in different manuals will
+     overwrite each other.
+
+     Please make these `install-FORMAT' targets invoke the commands for
+     the FORMAT target, for example, by making FORMAT a dependency.
+
+`uninstall'
+     Delete all the installed files--the copies that the `install' and
+     `install-*' targets create.
+
+     This rule should not modify the directories where compilation is
+     done, only the directories where files are installed.
+
+     The uninstallation commands are divided into three categories,
+     just like the installation commands.  *Note Install Command
+     Categories::.
+
+`install-strip'
+     Like `install', but strip the executable files while installing
+     them.  In simple cases, this target can use the `install' target in
+     a simple way:
+
+          install-strip:
+                  $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \
+                          install
+
+     But if the package installs scripts as well as real executables,
+     the `install-strip' target can't just refer to the `install'
+     target; it has to strip the executables but not the scripts.
+
+     `install-strip' should not strip the executables in the build
+     directory which are being copied for installation.  It should only
+     strip the copies that are installed.
+
+     Normally we do not recommend stripping an executable unless you
+     are sure the program has no bugs.  However, it can be reasonable
+     to install a stripped executable for actual execution while saving
+     the unstripped executable elsewhere in case there is a bug.
+
+`clean'
+     Delete all files in the current directory that are normally
+     created by building the program.  Also delete files in other
+     directories if they are created by this makefile.  However, don't
+     delete the files that record the configuration.  Also preserve
+     files that could be made by building, but normally aren't because
+     the distribution comes with them.  There is no need to delete
+     parent directories that were created with `mkdir -p', since they
+     could have existed anyway.
+
+     Delete `.dvi' files here if they are not part of the distribution.
+
+`distclean'
+     Delete all files in the current directory (or created by this
+     makefile) that are created by configuring or building the program.
+     If you have unpacked the source and built the program without
+     creating any other files, `make distclean' should leave only the
+     files that were in the distribution.  However, there is no need to
+     delete parent directories that were created with `mkdir -p', since
+     they could have existed anyway.
+
+`mostlyclean'
+     Like `clean', but may refrain from deleting a few files that people
+     normally don't want to recompile.  For example, the `mostlyclean'
+     target for GCC does not delete `libgcc.a', because recompiling it
+     is rarely necessary and takes a lot of time.
+
+`maintainer-clean'
+     Delete almost everything that can be reconstructed with this
+     Makefile.  This typically includes everything deleted by
+     `distclean', plus more: C source files produced by Bison, tags
+     tables, Info files, and so on.
+
+     The reason we say "almost everything" is that running the command
+     `make maintainer-clean' should not delete `configure' even if
+     `configure' can be remade using a rule in the Makefile.  More
+     generally, `make maintainer-clean' should not delete anything that
+     needs to exist in order to run `configure' and then begin to build
+     the program.  Also, there is no need to delete parent directories
+     that were created with `mkdir -p', since they could have existed
+     anyway.  These are the only exceptions; `maintainer-clean' should
+     delete everything else that can be rebuilt.
+
+     The `maintainer-clean' target is intended to be used by a
+     maintainer of the package, not by ordinary users.  You may need
+     special tools to reconstruct some of the files that `make
+     maintainer-clean' deletes.  Since these files are normally
+     included in the distribution, we don't take care to make them easy
+     to reconstruct.  If you find you need to unpack the full
+     distribution again, don't blame us.
+
+     To help make users aware of this, the commands for the special
+     `maintainer-clean' target should start with these two:
+
+          @echo 'This command is intended for maintainers to use; it'
+          @echo 'deletes files that may need special tools to rebuild.'
+
+`TAGS'
+     Update a tags table for this program.
+
+`info'
+     Generate any Info files needed.  The best way to write the rules
+     is as follows:
+
+          info: foo.info
+
+          foo.info: foo.texi chap1.texi chap2.texi
+                  $(MAKEINFO) $(srcdir)/foo.texi
+
+     You must define the variable `MAKEINFO' in the Makefile.  It should
+     run the `makeinfo' program, which is part of the Texinfo
+     distribution.
+
+     Normally a GNU distribution comes with Info files, and that means
+     the Info files are present in the source directory.  Therefore,
+     the Make rule for an info file should update it in the source
+     directory.  When users build the package, ordinarily Make will not
+     update the Info files because they will already be up to date.
+
+`dvi'
+`html'
+`pdf'
+`ps'
+     Generate documentation files in the given format.  These targets
+     should always exist, but any or all can be a no-op if the given
+     output format cannot be generated.  These targets should not be
+     dependencies of the `all' target; the user must manually invoke
+     them.
+
+     Here's an example rule for generating DVI files from Texinfo:
+
+          dvi: foo.dvi
+
+          foo.dvi: foo.texi chap1.texi chap2.texi
+                  $(TEXI2DVI) $(srcdir)/foo.texi
+
+     You must define the variable `TEXI2DVI' in the Makefile.  It should
+     run the program `texi2dvi', which is part of the Texinfo
+     distribution.(1)  Alternatively, write just the dependencies, and
+     allow GNU `make' to provide the command.
+
+     Here's another example, this one for generating HTML from Texinfo:
+
+          html: foo.html
+
+          foo.html: foo.texi chap1.texi chap2.texi
+                  $(TEXI2HTML) $(srcdir)/foo.texi
+
+     Again, you would define the variable `TEXI2HTML' in the Makefile;
+     for example, it might run `makeinfo --no-split --html' (`makeinfo'
+     is part of the Texinfo distribution).
+
+`dist'
+     Create a distribution tar file for this program.  The tar file
+     should be set up so that the file names in the tar file start with
+     a subdirectory name which is the name of the package it is a
+     distribution for.  This name can include the version number.
+
+     For example, the distribution tar file of GCC version 1.40 unpacks
+     into a subdirectory named `gcc-1.40'.
+
+     The easiest way to do this is to create a subdirectory
+     appropriately named, use `ln' or `cp' to install the proper files
+     in it, and then `tar' that subdirectory.
+
+     Compress the tar file with `gzip'.  For example, the actual
+     distribution file for GCC version 1.40 is called `gcc-1.40.tar.gz'.
+
+     The `dist' target should explicitly depend on all non-source files
+     that are in the distribution, to make sure they are up to date in
+     the distribution.  *Note Making Releases: Releases.
+
+`check'
+     Perform self-tests (if any).  The user must build the program
+     before running the tests, but need not install the program; you
+     should write the self-tests so that they work when the program is
+     built but not installed.
+
+   The following targets are suggested as conventional names, for
+programs in which they are useful.
+
+`installcheck'
+     Perform installation tests (if any).  The user must build and
+     install the program before running the tests.  You should not
+     assume that `$(bindir)' is in the search path.
+
+`installdirs'
+     It's useful to add a target named `installdirs' to create the
+     directories where files are installed, and their parent
+     directories.  There is a script called `mkinstalldirs' which is
+     convenient for this; you can find it in the Texinfo package.  You
+     can use a rule like this:
+
+          # Make sure all installation directories (e.g. $(bindir))
+          # actually exist by making them if necessary.
+          installdirs: mkinstalldirs
+                  $(srcdir)/mkinstalldirs $(bindir) $(datadir) \
+                                          $(libdir) $(infodir) \
+                                          $(mandir)
+
+     or, if you wish to support `DESTDIR',
+
+          # Make sure all installation directories (e.g. $(bindir))
+          # actually exist by making them if necessary.
+          installdirs: mkinstalldirs
+                  $(srcdir)/mkinstalldirs \
+                      $(DESTDIR)$(bindir) $(DESTDIR)$(datadir) \
+                      $(DESTDIR)$(libdir) $(DESTDIR)$(infodir) \
+                      $(DESTDIR)$(mandir)
+
+     This rule should not modify the directories where compilation is
+     done.  It should do nothing but create installation directories.
+
+   ---------- Footnotes ----------
+
+   (1) `texi2dvi' uses TeX to do the real work of formatting. TeX is
+not distributed with Texinfo.
+
+
+File: standards.info,  Node: Install Command Categories,  Prev: Standard Targets,  Up: Makefile Conventions
+
+7.2.7 Install Command Categories
+--------------------------------
+
+When writing the `install' target, you must classify all the commands
+into three categories: normal ones, "pre-installation" commands and
+"post-installation" commands.
+
+   Normal commands move files into their proper places, and set their
+modes.  They may not alter any files except the ones that come entirely
+from the package they belong to.
+
+   Pre-installation and post-installation commands may alter other
+files; in particular, they can edit global configuration files or data
+bases.
+
+   Pre-installation commands are typically executed before the normal
+commands, and post-installation commands are typically run after the
+normal commands.
+
+   The most common use for a post-installation command is to run
+`install-info'.  This cannot be done with a normal command, since it
+alters a file (the Info directory) which does not come entirely and
+solely from the package being installed.  It is a post-installation
+command because it needs to be done after the normal command which
+installs the package's Info files.
+
+   Most programs don't need any pre-installation commands, but we have
+the feature just in case it is needed.
+
+   To classify the commands in the `install' rule into these three
+categories, insert "category lines" among them.  A category line
+specifies the category for the commands that follow.
+
+   A category line consists of a tab and a reference to a special Make
+variable, plus an optional comment at the end.  There are three
+variables you can use, one for each category; the variable name
+specifies the category.  Category lines are no-ops in ordinary execution
+because these three Make variables are normally undefined (and you
+_should not_ define them in the makefile).
+
+   Here are the three possible category lines, each with a comment that
+explains what it means:
+
+             $(PRE_INSTALL)     # Pre-install commands follow.
+             $(POST_INSTALL)    # Post-install commands follow.
+             $(NORMAL_INSTALL)  # Normal commands follow.
+
+   If you don't use a category line at the beginning of the `install'
+rule, all the commands are classified as normal until the first category
+line.  If you don't use any category lines, all the commands are
+classified as normal.
+
+   These are the category lines for `uninstall':
+
+             $(PRE_UNINSTALL)     # Pre-uninstall commands follow.
+             $(POST_UNINSTALL)    # Post-uninstall commands follow.
+             $(NORMAL_UNINSTALL)  # Normal commands follow.
+
+   Typically, a pre-uninstall command would be used for deleting entries
+from the Info directory.
+
+   If the `install' or `uninstall' target has any dependencies which
+act as subroutines of installation, then you should start _each_
+dependency's commands with a category line, and start the main target's
+commands with a category line also.  This way, you can ensure that each
+command is placed in the right category regardless of which of the
+dependencies actually run.
+
+   Pre-installation and post-installation commands should not run any
+programs except for these:
+
+     [ basename bash cat chgrp chmod chown cmp cp dd diff echo
+     egrep expand expr false fgrep find getopt grep gunzip gzip
+     hostname install install-info kill ldconfig ln ls md5sum
+     mkdir mkfifo mknod mv printenv pwd rm rmdir sed sort tee
+     test touch true uname xargs yes
+
+   The reason for distinguishing the commands in this way is for the
+sake of making binary packages.  Typically a binary package contains
+all the executables and other files that need to be installed, and has
+its own method of installing them--so it does not need to run the normal
+installation commands.  But installing the binary package does need to
+execute the pre-installation and post-installation commands.
+
+   Programs to build binary packages work by extracting the
+pre-installation and post-installation commands.  Here is one way of
+extracting the pre-installation commands (the `-s' option to `make' is
+needed to silence messages about entering subdirectories):
+
+     make -s -n install -o all \
+           PRE_INSTALL=pre-install \
+           POST_INSTALL=post-install \
+           NORMAL_INSTALL=normal-install \
+       | gawk -f pre-install.awk
+
+where the file `pre-install.awk' could contain this:
+
+     $0 ~ /^(normal-install|post-install)[ \t]*$/ {on = 0}
+     on {print $0}
+     $0 ~ /^pre-install[ \t]*$/ {on = 1}
+
+
+File: standards.info,  Node: Releases,  Prev: Makefile Conventions,  Up: Managing Releases
+
+7.3 Making Releases
+===================
+
+You should identify each release with a pair of version numbers, a
+major version and a minor.  We have no objection to using more than two
+numbers, but it is very unlikely that you really need them.
+
+   Package the distribution of `Foo version 69.96' up in a gzipped tar
+file with the name `foo-69.96.tar.gz'.  It should unpack into a
+subdirectory named `foo-69.96'.
+
+   Building and installing the program should never modify any of the
+files contained in the distribution.  This means that all the files
+that form part of the program in any way must be classified into "source
+files" and "non-source files".  Source files are written by humans and
+never changed automatically; non-source files are produced from source
+files by programs under the control of the Makefile.
+
+   The distribution should contain a file named `README' which gives
+the name of the package, and a general description of what it does.  It
+is also good to explain the purpose of each of the first-level
+subdirectories in the package, if there are any.  The `README' file
+should either state the version number of the package, or refer to where
+in the package it can be found.
+
+   The `README' file should refer to the file `INSTALL', which should
+contain an explanation of the installation procedure.
+
+   The `README' file should also refer to the file which contains the
+copying conditions.  The GNU GPL, if used, should be in a file called
+`COPYING'.  If the GNU LGPL is used, it should be in a file called
+`COPYING.LESSER'.
+
+   Naturally, all the source files must be in the distribution.  It is
+okay to include non-source files in the distribution, provided they are
+up-to-date and machine-independent, so that building the distribution
+normally will never modify them.  We commonly include non-source files
+produced by Bison, `lex', TeX, and `makeinfo'; this helps avoid
+unnecessary dependencies between our distributions, so that users can
+install whichever packages they want to install.
+
+   Non-source files that might actually be modified by building and
+installing the program should *never* be included in the distribution.
+So if you do distribute non-source files, always make sure they are up
+to date when you make a new distribution.
+
+   Make sure that all the files in the distribution are world-readable,
+and that directories are world-readable and world-searchable (octal
+mode 755).  We used to recommend that all directories in the
+distribution also be world-writable (octal mode 777), because ancient
+versions of `tar' would otherwise not cope when extracting the archive
+as an unprivileged user.  That can easily lead to security issues when
+creating the archive, however, so now we recommend against that.
+
+   Don't include any symbolic links in the distribution itself.  If the
+tar file contains symbolic links, then people cannot even unpack it on
+systems that don't support symbolic links.  Also, don't use multiple
+names for one file in different directories, because certain file
+systems cannot handle this and that prevents unpacking the distribution.
+
+   Try to make sure that all the file names will be unique on MS-DOS.  A
+name on MS-DOS consists of up to 8 characters, optionally followed by a
+period and up to three characters.  MS-DOS will truncate extra
+characters both before and after the period.  Thus, `foobarhacker.c'
+and `foobarhacker.o' are not ambiguous; they are truncated to
+`foobarha.c' and `foobarha.o', which are distinct.
+
+   Include in your distribution a copy of the `texinfo.tex' you used to
+test print any `*.texinfo' or `*.texi' files.
+
+   Likewise, if your program uses small GNU software packages like
+regex, getopt, obstack, or termcap, include them in the distribution
+file.  Leaving them out would make the distribution file a little
+smaller at the expense of possible inconvenience to a user who doesn't
+know what other files to get.
+
+
+File: standards.info,  Node: References,  Next: GNU Free Documentation License,  Prev: Managing Releases,  Up: Top
+
+8 References to Non-Free Software and Documentation
+***************************************************
+
+A GNU program should not recommend, promote, or grant legitimacy to the
+use of any non-free program.  Proprietary software is a social and
+ethical problem, and our aim is to put an end to that problem.  We
+can't stop some people from writing proprietary programs, or stop other
+people from using them, but we can and should refuse to advertise them
+to new potential customers, or to give the public the idea that their
+existence is ethical.
+
+   The GNU definition of free software is found on the GNU web site at
+`http://www.gnu.org/philosophy/free-sw.html', and the definition of
+free documentation is found at
+`http://www.gnu.org/philosophy/free-doc.html'.  The terms "free" and
+"non-free", used in this document, refer to those definitions.
+
+   A list of important licenses and whether they qualify as free is in
+`http://www.gnu.org/licenses/license-list.html'.  If it is not clear
+whether a license qualifies as free, please ask the GNU Project by
+writing to <licensing at gnu.org>.  We will answer, and if the license is
+an important one, we will add it to the list.
+
+   When a non-free program or system is well known, you can mention it
+in passing--that is harmless, since users who might want to use it
+probably already know about it.  For instance, it is fine to explain
+how to build your package on top of some widely used non-free operating
+system, or how to use it together with some widely used non-free
+program.
+
+   However, you should give only the necessary information to help those
+who already use the non-free program to use your program with it--don't
+give, or refer to, any further information about the proprietary
+program, and don't imply that the proprietary program enhances your
+program, or that its existence is in any way a good thing.  The goal
+should be that people already using the proprietary program will get
+the advice they need about how to use your free program with it, while
+people who don't already use the proprietary program will not see
+anything likely to lead them to take an interest in it.
+
+   If a non-free program or system is obscure in your program's domain,
+your program should not mention or support it at all, since doing so
+would tend to popularize the non-free program more than it popularizes
+your program.  (You cannot hope to find many additional users for your
+program among the users of Foobar, if the existence of Foobar is not
+generally known among people who might want to use your program.)
+
+   Sometimes a program is free software in itself but depends on a
+non-free platform in order to run.  For instance, many Java programs
+depend on some non-free Java libraries.  To recommend or promote such a
+program is to promote the other programs it needs.  This is why we are
+careful about listing Java programs in the Free Software Directory: we
+don't want to promote the non-free Java libraries.
+
+   We hope this particular problem with Java will be gone by and by, as
+we replace the remaining non-free standard Java libraries with free
+software, but the general principle will remain the same: don't
+recommend, promote or legitimize programs that depend on non-free
+software to run.
+
+   Some free programs strongly encourage the use of non-free software.
+A typical example is `mplayer'.  It is free software in itself, and the
+free code can handle some kinds of files.  However, `mplayer'
+recommends use of non-free codecs for other kinds of files, and users
+that install `mplayer' are very likely to install those codecs along
+with it.  To recommend `mplayer' is, in effect, to promote use of the
+non-free codecs.
+
+   Thus, you should not recommend programs that strongly encourage the
+use of non-free software.  This is why we do not list `mplayer' in the
+Free Software Directory.
+
+   A GNU package should not refer the user to any non-free documentation
+for free software.  Free documentation that can be included in free
+operating systems is essential for completing the GNU system, or any
+free operating system, so encouraging it is a priority; to recommend
+use of documentation that we are not allowed to include undermines the
+impetus for the community to produce documentation that we can include.
+So GNU packages should never recommend non-free documentation.
+
+   By contrast, it is ok to refer to journal articles and textbooks in
+the comments of a program for explanation of how it functions, even
+though they are non-free.  This is because we don't include such things
+in the GNU system even they are free--they are outside the scope of
+what a software distribution needs to include.
+
+   Referring to a web site that describes or recommends a non-free
+program is promoting that program, so please do not make links (or
+mention by name) web sites that contain such material.  This policy is
+relevant particularly for the web pages for a GNU package.
+
+   Following links from nearly any web site can lead eventually to
+non-free software; this is inherent in the nature of the web.  So it
+makes no sense to criticize a site for having such links.  As long as
+the site does not itself recommend a non-free program, there is no need
+to consider the question of the sites that it links to for other
+reasons.
+
+   Thus, for example, you should not refer to AT&T's web site if that
+recommends AT&T's non-free software packages; you should not refer to a
+site that links to AT&T's site presenting it as a place to get some
+non-free program, because that link recommends and legitimizes the
+non-free program.  However, that a site contains a link to AT&T's web
+site for some other purpose (such as long-distance telephone service)
+is not an objection against it.
+
+
+File: standards.info,  Node: GNU Free Documentation License,  Next: Index,  Prev: References,  Up: Top
+
+Appendix A GNU Free Documentation License
+*****************************************
+
+                     Version 1.3, 3 November 2008
+
+     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+     `http://fsf.org/'
+
+     Everyone is permitted to copy and distribute verbatim copies
+     of this license document, but changing it is not allowed.
+
+  0. PREAMBLE
+
+     The purpose of this License is to make a manual, textbook, or other
+     functional and useful document "free" in the sense of freedom: to
+     assure everyone the effective freedom to copy and redistribute it,
+     with or without modifying it, either commercially or
+     noncommercially.  Secondarily, this License preserves for the
+     author and publisher a way to get credit for their work, while not
+     being considered responsible for modifications made by others.
+
+     This License is a kind of "copyleft", which means that derivative
+     works of the document must themselves be free in the same sense.
+     It complements the GNU General Public License, which is a copyleft
+     license designed for free software.
+
+     We have designed this License in order to use it for manuals for
+     free software, because free software needs free documentation: a
+     free program should come with manuals providing the same freedoms
+     that the software does.  But this License is not limited to
+     software manuals; it can be used for any textual work, regardless
+     of subject matter or whether it is published as a printed book.
+     We recommend this License principally for works whose purpose is
+     instruction or reference.
+
+  1. APPLICABILITY AND DEFINITIONS
+
+     This License applies to any manual or other work, in any medium,
+     that contains a notice placed by the copyright holder saying it
+     can be distributed under the terms of this License.  Such a notice
+     grants a world-wide, royalty-free license, unlimited in duration,
+     to use that work under the conditions stated herein.  The
+     "Document", below, refers to any such manual or work.  Any member
+     of the public is a licensee, and is addressed as "you".  You
+     accept the license if you copy, modify or distribute the work in a
+     way requiring permission under copyright law.
+
+     A "Modified Version" of the Document means any work containing the
+     Document or a portion of it, either copied verbatim, or with
+     modifications and/or translated into another language.
+
+     A "Secondary Section" is a named appendix or a front-matter section
+     of the Document that deals exclusively with the relationship of the
+     publishers or authors of the Document to the Document's overall
+     subject (or to related matters) and contains nothing that could
+     fall directly within that overall subject.  (Thus, if the Document
+     is in part a textbook of mathematics, a Secondary Section may not
+     explain any mathematics.)  The relationship could be a matter of
+     historical connection with the subject or with related matters, or
+     of legal, commercial, philosophical, ethical or political position
+     regarding them.
+
+     The "Invariant Sections" are certain Secondary Sections whose
+     titles are designated, as being those of Invariant Sections, in
+     the notice that says that the Document is released under this
+     License.  If a section does not fit the above definition of
+     Secondary then it is not allowed to be designated as Invariant.
+     The Document may contain zero Invariant Sections.  If the Document
+     does not identify any Invariant Sections then there are none.
+
+     The "Cover Texts" are certain short passages of text that are
+     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+     that says that the Document is released under this License.  A
+     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+     be at most 25 words.
+
+     A "Transparent" copy of the Document means a machine-readable copy,
+     represented in a format whose specification is available to the
+     general public, that is suitable for revising the document
+     straightforwardly with generic text editors or (for images
+     composed of pixels) generic paint programs or (for drawings) some
+     widely available drawing editor, and that is suitable for input to
+     text formatters or for automatic translation to a variety of
+     formats suitable for input to text formatters.  A copy made in an
+     otherwise Transparent file format whose markup, or absence of
+     markup, has been arranged to thwart or discourage subsequent
+     modification by readers is not Transparent.  An image format is
+     not Transparent if used for any substantial amount of text.  A
+     copy that is not "Transparent" is called "Opaque".
+
+     Examples of suitable formats for Transparent copies include plain
+     ASCII without markup, Texinfo input format, LaTeX input format,
+     SGML or XML using a publicly available DTD, and
+     standard-conforming simple HTML, PostScript or PDF designed for
+     human modification.  Examples of transparent image formats include
+     PNG, XCF and JPG.  Opaque formats include proprietary formats that
+     can be read and edited only by proprietary word processors, SGML or
+     XML for which the DTD and/or processing tools are not generally
+     available, and the machine-generated HTML, PostScript or PDF
+     produced by some word processors for output purposes only.
+
+     The "Title Page" means, for a printed book, the title page itself,
+     plus such following pages as are needed to hold, legibly, the
+     material this License requires to appear in the title page.  For
+     works in formats which do not have any title page as such, "Title
+     Page" means the text near the most prominent appearance of the
+     work's title, preceding the beginning of the body of the text.
+
+     The "publisher" means any person or entity that distributes copies
+     of the Document to the public.
+
+     A section "Entitled XYZ" means a named subunit of the Document
+     whose title either is precisely XYZ or contains XYZ in parentheses
+     following text that translates XYZ in another language.  (Here XYZ
+     stands for a specific section name mentioned below, such as
+     "Acknowledgements", "Dedications", "Endorsements", or "History".)
+     To "Preserve the Title" of such a section when you modify the
+     Document means that it remains a section "Entitled XYZ" according
+     to this definition.
+
+     The Document may include Warranty Disclaimers next to the notice
+     which states that this License applies to the Document.  These
+     Warranty Disclaimers are considered to be included by reference in
+     this License, but only as regards disclaiming warranties: any other
+     implication that these Warranty Disclaimers may have is void and
+     has no effect on the meaning of this License.
+
+  2. VERBATIM COPYING
+
+     You may copy and distribute the Document in any medium, either
+     commercially or noncommercially, provided that this License, the
+     copyright notices, and the license notice saying this License
+     applies to the Document are reproduced in all copies, and that you
+     add no other conditions whatsoever to those of this License.  You
+     may not use technical measures to obstruct or control the reading
+     or further copying of the copies you make or distribute.  However,
+     you may accept compensation in exchange for copies.  If you
+     distribute a large enough number of copies you must also follow
+     the conditions in section 3.
+
+     You may also lend copies, under the same conditions stated above,
+     and you may publicly display copies.
+
+  3. COPYING IN QUANTITY
+
+     If you publish printed copies (or copies in media that commonly
+     have printed covers) of the Document, numbering more than 100, and
+     the Document's license notice requires Cover Texts, you must
+     enclose the copies in covers that carry, clearly and legibly, all
+     these Cover Texts: Front-Cover Texts on the front cover, and
+     Back-Cover Texts on the back cover.  Both covers must also clearly
+     and legibly identify you as the publisher of these copies.  The
+     front cover must present the full title with all words of the
+     title equally prominent and visible.  You may add other material
+     on the covers in addition.  Copying with changes limited to the
+     covers, as long as they preserve the title of the Document and
+     satisfy these conditions, can be treated as verbatim copying in
+     other respects.
+
+     If the required texts for either cover are too voluminous to fit
+     legibly, you should put the first ones listed (as many as fit
+     reasonably) on the actual cover, and continue the rest onto
+     adjacent pages.
+
+     If you publish or distribute Opaque copies of the Document
+     numbering more than 100, you must either include a
+     machine-readable Transparent copy along with each Opaque copy, or
+     state in or with each Opaque copy a computer-network location from
+     which the general network-using public has access to download
+     using public-standard network protocols a complete Transparent
+     copy of the Document, free of added material.  If you use the
+     latter option, you must take reasonably prudent steps, when you
+     begin distribution of Opaque copies in quantity, to ensure that
+     this Transparent copy will remain thus accessible at the stated
+     location until at least one year after the last time you
+     distribute an Opaque copy (directly or through your agents or
+     retailers) of that edition to the public.
+
+     It is requested, but not required, that you contact the authors of
+     the Document well before redistributing any large number of
+     copies, to give them a chance to provide you with an updated
+     version of the Document.
+
+  4. MODIFICATIONS
+
+     You may copy and distribute a Modified Version of the Document
+     under the conditions of sections 2 and 3 above, provided that you
+     release the Modified Version under precisely this License, with
+     the Modified Version filling the role of the Document, thus
+     licensing distribution and modification of the Modified Version to
+     whoever possesses a copy of it.  In addition, you must do these
+     things in the Modified Version:
+
+       A. Use in the Title Page (and on the covers, if any) a title
+          distinct from that of the Document, and from those of
+          previous versions (which should, if there were any, be listed
+          in the History section of the Document).  You may use the
+          same title as a previous version if the original publisher of
+          that version gives permission.
+
+       B. List on the Title Page, as authors, one or more persons or
+          entities responsible for authorship of the modifications in
+          the Modified Version, together with at least five of the
+          principal authors of the Document (all of its principal
+          authors, if it has fewer than five), unless they release you
+          from this requirement.
+
+       C. State on the Title page the name of the publisher of the
+          Modified Version, as the publisher.
+
+       D. Preserve all the copyright notices of the Document.
+
+       E. Add an appropriate copyright notice for your modifications
+          adjacent to the other copyright notices.
+
+       F. Include, immediately after the copyright notices, a license
+          notice giving the public permission to use the Modified
+          Version under the terms of this License, in the form shown in
+          the Addendum below.
+
+       G. Preserve in that license notice the full lists of Invariant
+          Sections and required Cover Texts given in the Document's
+          license notice.
+
+       H. Include an unaltered copy of this License.
+
+       I. Preserve the section Entitled "History", Preserve its Title,
+          and add to it an item stating at least the title, year, new
+          authors, and publisher of the Modified Version as given on
+          the Title Page.  If there is no section Entitled "History" in
+          the Document, create one stating the title, year, authors,
+          and publisher of the Document as given on its Title Page,
+          then add an item describing the Modified Version as stated in
+          the previous sentence.
+
+       J. Preserve the network location, if any, given in the Document
+          for public access to a Transparent copy of the Document, and
+          likewise the network locations given in the Document for
+          previous versions it was based on.  These may be placed in
+          the "History" section.  You may omit a network location for a
+          work that was published at least four years before the
+          Document itself, or if the original publisher of the version
+          it refers to gives permission.
+
+       K. For any section Entitled "Acknowledgements" or "Dedications",
+          Preserve the Title of the section, and preserve in the
+          section all the substance and tone of each of the contributor
+          acknowledgements and/or dedications given therein.
+
+       L. Preserve all the Invariant Sections of the Document,
+          unaltered in their text and in their titles.  Section numbers
+          or the equivalent are not considered part of the section
+          titles.
+
+       M. Delete any section Entitled "Endorsements".  Such a section
+          may not be included in the Modified Version.
+
+       N. Do not retitle any existing section to be Entitled
+          "Endorsements" or to conflict in title with any Invariant
+          Section.
+
+       O. Preserve any Warranty Disclaimers.
+
+     If the Modified Version includes new front-matter sections or
+     appendices that qualify as Secondary Sections and contain no
+     material copied from the Document, you may at your option
+     designate some or all of these sections as invariant.  To do this,
+     add their titles to the list of Invariant Sections in the Modified
+     Version's license notice.  These titles must be distinct from any
+     other section titles.
+
+     You may add a section Entitled "Endorsements", provided it contains
+     nothing but endorsements of your Modified Version by various
+     parties--for example, statements of peer review or that the text
+     has been approved by an organization as the authoritative
+     definition of a standard.
+
+     You may add a passage of up to five words as a Front-Cover Text,
+     and a passage of up to 25 words as a Back-Cover Text, to the end
+     of the list of Cover Texts in the Modified Version.  Only one
+     passage of Front-Cover Text and one of Back-Cover Text may be
+     added by (or through arrangements made by) any one entity.  If the
+     Document already includes a cover text for the same cover,
+     previously added by you or by arrangement made by the same entity
+     you are acting on behalf of, you may not add another; but you may
+     replace the old one, on explicit permission from the previous
+     publisher that added the old one.
+
+     The author(s) and publisher(s) of the Document do not by this
+     License give permission to use their names for publicity for or to
+     assert or imply endorsement of any Modified Version.
+
+  5. COMBINING DOCUMENTS
+
+     You may combine the Document with other documents released under
+     this License, under the terms defined in section 4 above for
+     modified versions, provided that you include in the combination
+     all of the Invariant Sections of all of the original documents,
+     unmodified, and list them all as Invariant Sections of your
+     combined work in its license notice, and that you preserve all
+     their Warranty Disclaimers.
+
+     The combined work need only contain one copy of this License, and
+     multiple identical Invariant Sections may be replaced with a single
+     copy.  If there are multiple Invariant Sections with the same name
+     but different contents, make the title of each such section unique
+     by adding at the end of it, in parentheses, the name of the
+     original author or publisher of that section if known, or else a
+     unique number.  Make the same adjustment to the section titles in
+     the list of Invariant Sections in the license notice of the
+     combined work.
+
+     In the combination, you must combine any sections Entitled
+     "History" in the various original documents, forming one section
+     Entitled "History"; likewise combine any sections Entitled
+     "Acknowledgements", and any sections Entitled "Dedications".  You
+     must delete all sections Entitled "Endorsements."
+
+  6. COLLECTIONS OF DOCUMENTS
+
+     You may make a collection consisting of the Document and other
+     documents released under this License, and replace the individual
+     copies of this License in the various documents with a single copy
+     that is included in the collection, provided that you follow the
+     rules of this License for verbatim copying of each of the
+     documents in all other respects.
+
+     You may extract a single document from such a collection, and
+     distribute it individually under this License, provided you insert
+     a copy of this License into the extracted document, and follow
+     this License in all other respects regarding verbatim copying of
+     that document.
+
+  7. AGGREGATION WITH INDEPENDENT WORKS
+
+     A compilation of the Document or its derivatives with other
+     separate and independent documents or works, in or on a volume of
+     a storage or distribution medium, is called an "aggregate" if the
+     copyright resulting from the compilation is not used to limit the
+     legal rights of the compilation's users beyond what the individual
+     works permit.  When the Document is included in an aggregate, this
+     License does not apply to the other works in the aggregate which
+     are not themselves derivative works of the Document.
+
+     If the Cover Text requirement of section 3 is applicable to these
+     copies of the Document, then if the Document is less than one half
+     of the entire aggregate, the Document's Cover Texts may be placed
+     on covers that bracket the Document within the aggregate, or the
+     electronic equivalent of covers if the Document is in electronic
+     form.  Otherwise they must appear on printed covers that bracket
+     the whole aggregate.
+
+  8. TRANSLATION
+
+     Translation is considered a kind of modification, so you may
+     distribute translations of the Document under the terms of section
+     4.  Replacing Invariant Sections with translations requires special
+     permission from their copyright holders, but you may include
+     translations of some or all Invariant Sections in addition to the
+     original versions of these Invariant Sections.  You may include a
+     translation of this License, and all the license notices in the
+     Document, and any Warranty Disclaimers, provided that you also
+     include the original English version of this License and the
+     original versions of those notices and disclaimers.  In case of a
+     disagreement between the translation and the original version of
+     this License or a notice or disclaimer, the original version will
+     prevail.
+
+     If a section in the Document is Entitled "Acknowledgements",
+     "Dedications", or "History", the requirement (section 4) to
+     Preserve its Title (section 1) will typically require changing the
+     actual title.
+
+  9. TERMINATION
+
+     You may not copy, modify, sublicense, or distribute the Document
+     except as expressly provided under this License.  Any attempt
+     otherwise to copy, modify, sublicense, or distribute it is void,
+     and will automatically terminate your rights under this License.
+
+     However, if you cease all violation of this License, then your
+     license from a particular copyright holder is reinstated (a)
+     provisionally, unless and until the copyright holder explicitly
+     and finally terminates your license, and (b) permanently, if the
+     copyright holder fails to notify you of the violation by some
+     reasonable means prior to 60 days after the cessation.
+
+     Moreover, your license from a particular copyright holder is
+     reinstated permanently if the copyright holder notifies you of the
+     violation by some reasonable means, this is the first time you have
+     received notice of violation of this License (for any work) from
+     that copyright holder, and you cure the violation prior to 30 days
+     after your receipt of the notice.
+
+     Termination of your rights under this section does not terminate
+     the licenses of parties who have received copies or rights from
+     you under this License.  If your rights have been terminated and
+     not permanently reinstated, receipt of a copy of some or all of
+     the same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+     The Free Software Foundation may publish new, revised versions of
+     the GNU Free Documentation 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.  See
+     `http://www.gnu.org/copyleft/'.
+
+     Each version of the License is given a distinguishing version
+     number.  If the Document specifies that a particular numbered
+     version of this License "or any later version" applies to it, you
+     have the option of following the terms and conditions either of
+     that specified version or of any later version that has been
+     published (not as a draft) by the Free Software Foundation.  If
+     the Document does not specify a version number of this License,
+     you may choose any version ever published (not as a draft) by the
+     Free Software Foundation.  If the Document specifies that a proxy
+     can decide which future versions of this License can be used, that
+     proxy's public statement of acceptance of a version permanently
+     authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+     World Wide Web server that publishes copyrightable works and also
+     provides prominent facilities for anybody to edit those works.  A
+     public wiki that anybody can edit is an example of such a server.
+     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+     site means any set of copyrightable works thus published on the MMC
+     site.
+
+     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+     license published by Creative Commons Corporation, a not-for-profit
+     corporation with a principal place of business in San Francisco,
+     California, as well as future copyleft versions of that license
+     published by that same organization.
+
+     "Incorporate" means to publish or republish a Document, in whole or
+     in part, as part of another Document.
+
+     An MMC is "eligible for relicensing" if it is licensed under this
+     License, and if all works that were first published under this
+     License somewhere other than this MMC, and subsequently
+     incorporated in whole or in part into the MMC, (1) had no cover
+     texts or invariant sections, and (2) were thus incorporated prior
+     to November 1, 2008.
+
+     The operator of an MMC Site may republish an MMC contained in the
+     site under CC-BY-SA on the same site at any time before August 1,
+     2009, provided the MMC is eligible for relicensing.
+
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+       Copyright (C)  YEAR  YOUR NAME.
+       Permission is granted to copy, distribute and/or modify this document
+       under the terms of the GNU Free Documentation License, Version 1.3
+       or any later version published by the Free Software Foundation;
+       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+       Texts.  A copy of the license is included in the section entitled ``GNU
+       Free Documentation License''.
+
+   If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+         with the Invariant Sections being LIST THEIR TITLES, with
+         the Front-Cover Texts being LIST, and with the Back-Cover Texts
+         being LIST.
+
+   If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+   If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License, to
+permit their use in free software.
+
+
+File: standards.info,  Node: Index,  Prev: GNU Free Documentation License,  Up: Top
+
+Index
+*****
+
+ [index ]
+* Menu:
+
+* #endif, commenting:                    Comments.            (line  60)
+* --help output:                         --help.              (line   6)
+* --version output:                      --version.           (line   6)
+* -Wall compiler option:                 Syntactic Conventions.
+                                                              (line  10)
+* accepting contributions:               Contributions.       (line   6)
+* address for bug reports:               --help.              (line  11)
+* ANSI C standard:                       Standard C.          (line   6)
+* arbitrary limits on data:              Semantics.           (line   6)
+* ASCII characters:                      Character Set.       (line   6)
+* autoconf:                              System Portability.  (line  23)
+* avoiding proprietary code:             Reading Non-Free Code.
+                                                              (line   6)
+* behavior, dependent on program's name: User Interfaces.     (line   6)
+* binary packages:                       Install Command Categories.
+                                                              (line  80)
+* bindir:                                Directory Variables. (line  54)
+* braces, in C source:                   Formatting.          (line   6)
+* bug reports:                           --help.              (line  11)
+* bug-standards at gnu.org email address:   Preface.             (line  30)
+* canonical name of a program:           --version.           (line  12)
+* casting pointers to integers:          CPU Portability.     (line  89)
+* CGI programs, standard options for:    Command-Line Interfaces.
+                                                              (line  31)
+* change logs:                           Change Logs.         (line   6)
+* change logs, conditional changes:      Conditional Changes. (line   6)
+* change logs, style:                    Style of Change Logs.
+                                                              (line   6)
+* character set:                         Character Set.       (line   6)
+* command-line arguments, decoding:      Semantics.           (line  46)
+* command-line interface:                Command-Line Interfaces.
+                                                              (line   6)
+* commenting:                            Comments.            (line   6)
+* compatibility with C and POSIX standards: Compatibility.    (line   6)
+* compiler warnings:                     Syntactic Conventions.
+                                                              (line  10)
+* conditional changes, and change logs:  Conditional Changes. (line   6)
+* conditionals, comments for:            Comments.            (line  60)
+* configure:                             Configuration.       (line   6)
+* control-L:                             Formatting.          (line 118)
+* conventions for makefiles:             Makefile Conventions.
+                                                              (line   6)
+* CORBA:                                 Graphical Interfaces.
+                                                              (line  16)
+* credits for manuals:                   Manual Credits.      (line   6)
+* D-bus:                                 Graphical Interfaces.
+                                                              (line  16)
+* data types, and portability:           CPU Portability.     (line   6)
+* declaration for system functions:      System Functions.    (line  21)
+* DESTDIR:                               DESTDIR.             (line   6)
+* documentation:                         Documentation.       (line   6)
+* doschk:                                Names.               (line  38)
+* downloading this manual:               Preface.             (line  14)
+* encodings:                             Character Set.       (line   6)
+* error messages:                        Semantics.           (line  19)
+* error messages, formatting:            Errors.              (line   6)
+* exec_prefix:                           Directory Variables. (line  36)
+* expressions, splitting:                Formatting.          (line  81)
+* FDL, GNU Free Documentation License:   GNU Free Documentation License.
+                                                              (line   6)
+* file usage:                            File Usage.          (line   6)
+* file-name limitations:                 Names.               (line  38)
+* formatting error messages:             Errors.              (line   6)
+* formatting source code:                Formatting.          (line   6)
+* formfeed:                              Formatting.          (line 118)
+* function argument, declaring:          Syntactic Conventions.
+                                                              (line   6)
+* function prototypes:                   Standard C.          (line  17)
+* getopt:                                Command-Line Interfaces.
+                                                              (line   6)
+* gettext:                               Internationalization.
+                                                              (line   6)
+* GNOME:                                 Graphical Interfaces.
+                                                              (line  16)
+* GNOME and Guile:                       Source Language.     (line  38)
+* gnustandards project repository:       Preface.             (line  30)
+* gnustandards-commit at gnu.org mailing list: Preface.          (line  24)
+* graphical user interface:              Graphical Interfaces.
+                                                              (line   6)
+* grave accent:                          Quote Characters.    (line   6)
+* GTK+:                                  Graphical Interfaces.
+                                                              (line   6)
+* Guile:                                 Source Language.     (line  38)
+* implicit int:                          Syntactic Conventions.
+                                                              (line   6)
+* impossible conditions:                 Semantics.           (line  70)
+* installations, staged:                 DESTDIR.             (line   6)
+* interface styles:                      Graphical Interfaces.
+                                                              (line   6)
+* internationalization:                  Internationalization.
+                                                              (line   6)
+* keyboard interface:                    Graphical Interfaces.
+                                                              (line  16)
+* LDAP:                                  OID Allocations.     (line   6)
+* left quote:                            Quote Characters.    (line   6)
+* legal aspects:                         Legal Issues.        (line   6)
+* legal papers:                          Contributions.       (line   6)
+* libexecdir:                            Directory Variables. (line  67)
+* libraries:                             Libraries.           (line   6)
+* library functions, and portability:    System Functions.    (line   6)
+* library interface:                     Graphical Interfaces.
+                                                              (line  16)
+* license for manuals:                   License for Manuals. (line   6)
+* lint:                                  Syntactic Conventions.
+                                                              (line 109)
+* locale-specific quote characters:      Quote Characters.    (line   6)
+* long option names:                     Option Table.        (line   6)
+* long-named options:                    Command-Line Interfaces.
+                                                              (line  12)
+* makefile, conventions for:             Makefile Conventions.
+                                                              (line   6)
+* malloc return value:                   Semantics.           (line  25)
+* man pages:                             Man Pages.           (line   6)
+* manual structure:                      Manual Structure Details.
+                                                              (line   6)
+* memory allocation failure:             Semantics.           (line  25)
+* memory usage:                          Memory Usage.        (line   6)
+* message text, and internationalization: Internationalization.
+                                                              (line  29)
+* mmap:                                  Mmap.                (line   6)
+* multiple variables in a line:          Syntactic Conventions.
+                                                              (line  35)
+* names of variables, functions, and files: Names.            (line   6)
+* NEWS file:                             NEWS File.           (line   6)
+* non-ASCII characters:                  Character Set.       (line   6)
+* non-POSIX systems, and portability:    System Portability.  (line  32)
+* non-standard extensions:               Using Extensions.    (line   6)
+* NUL characters:                        Semantics.           (line  11)
+* OID allocations for GNU:               OID Allocations.     (line   6)
+* open brace:                            Formatting.          (line   6)
+* optional features, configure-time:     Configuration.       (line 100)
+* options for compatibility:             Compatibility.       (line  14)
+* options, standard command-line:        Command-Line Interfaces.
+                                                              (line  31)
+* output device and program's behavior:  User Interfaces.     (line  13)
+* packaging:                             Releases.            (line   6)
+* PATH_INFO, specifying standard options as: Command-Line Interfaces.
+                                                              (line  31)
+* portability, and data types:           CPU Portability.     (line   6)
+* portability, and library functions:    System Functions.    (line   6)
+* portability, between system types:     System Portability.  (line   6)
+* POSIX compatibility:                   Compatibility.       (line   6)
+* POSIXLY_CORRECT, environment variable: Compatibility.       (line  21)
+* post-installation commands:            Install Command Categories.
+                                                              (line   6)
+* pre-installation commands:             Install Command Categories.
+                                                              (line   6)
+* prefix:                                Directory Variables. (line  26)
+* program configuration:                 Configuration.       (line   6)
+* program design:                        Design Advice.       (line   6)
+* program name and its behavior:         User Interfaces.     (line   6)
+* program's canonical name:              --version.           (line  12)
+* programming languages:                 Source Language.     (line   6)
+* proprietary programs:                  Reading Non-Free Code.
+                                                              (line   6)
+* quote characters:                      Quote Characters.    (line   6)
+* README file:                           Releases.            (line  21)
+* references to non-free material:       References.          (line   6)
+* releasing:                             Managing Releases.   (line   6)
+* Savannah repository for gnustandards:  Preface.             (line  30)
+* sbindir:                               Directory Variables. (line  60)
+* signal handling:                       Semantics.           (line  59)
+* SNMP:                                  OID Allocations.     (line   6)
+* spaces before open-paren:              Formatting.          (line  75)
+* staged installs:                       DESTDIR.             (line   6)
+* standard command-line options:         Command-Line Interfaces.
+                                                              (line  31)
+* standards for makefiles:               Makefile Conventions.
+                                                              (line   6)
+* string library functions:              System Functions.    (line  55)
+* syntactic conventions:                 Syntactic Conventions.
+                                                              (line   6)
+* table of long options:                 Option Table.        (line   6)
+* temporary files:                       Semantics.           (line  84)
+* temporary variables:                   Syntactic Conventions.
+                                                              (line  23)
+* texinfo.tex, in a distribution:        Releases.            (line  70)
+* TMPDIR environment variable:           Semantics.           (line  84)
+* trademarks:                            Trademarks.          (line   6)
+* user interface styles:                 Graphical Interfaces.
+                                                              (line   6)
+* where to obtain standards.texi:        Preface.             (line  14)
+* X.509:                                 OID Allocations.     (line   6)
+
+
+
+Tag Table:
+Node: Top814
+Node: Preface2089
+Node: Legal Issues4802
+Node: Reading Non-Free Code5272
+Node: Contributions7002
+Node: Trademarks9240
+Node: Design Advice10875
+Node: Source Language11467
+Node: Compatibility13593
+Node: Using Extensions15221
+Node: Standard C16797
+Node: Conditional Compilation19200
+Node: Program Behavior20598
+Node: Non-GNU Standards21714
+Node: Semantics23995
+Node: Libraries28715
+Node: Errors29960
+Node: User Interfaces32453
+Node: Graphical Interfaces34058
+Node: Command-Line Interfaces35242
+Node: --version37274
+Node: --help43011
+Node: Option Table43884
+Node: OID Allocations58839
+Node: Memory Usage60636
+Node: File Usage61672
+Node: Writing C62422
+Node: Formatting63394
+Node: Comments67683
+Node: Syntactic Conventions71235
+Node: Names74697
+Node: System Portability76909
+Node: CPU Portability79800
+Node: System Functions83701
+Node: Internationalization88898
+Node: Character Set92892
+Node: Quote Characters93705
+Node: Mmap95225
+Node: Documentation95933
+Node: GNU Manuals97039
+Node: Doc Strings and Manuals102777
+Node: Manual Structure Details104330
+Node: License for Manuals105748
+Node: Manual Credits106722
+Node: Printed Manuals107115
+Node: NEWS File107801
+Node: Change Logs108479
+Node: Change Log Concepts109233
+Node: Style of Change Logs111336
+Node: Simple Changes113836
+Node: Conditional Changes115278
+Node: Indicating the Part Changed116700
+Node: Man Pages117227
+Node: Reading other Manuals119433
+Node: Managing Releases120224
+Node: Configuration121005
+Node: Makefile Conventions129670
+Node: Makefile Basics130552
+Node: Utilities in Makefiles133726
+Node: Command Variables135871
+Node: DESTDIR139093
+Node: Directory Variables141242
+Node: Standard Targets155735
+Ref: Standard Targets-Footnote-1169250
+Node: Install Command Categories169350
+Node: Releases173883
+Node: References177888
+Node: GNU Free Documentation License183735
+Node: Index208902
+
+End Tag Table
diff --git a/etc/standards.texi b/etc/standards.texi
index 8b13789..4b1c03d 100644
--- a/etc/standards.texi
+++ b/etc/standards.texi
@@ -1 +1,4235 @@
+\input texinfo @c -*-texinfo-*-
+ at c %**start of header
+ at setfilename standards.info
+ at settitle GNU Coding Standards
+ at c This date is automagically updated when you save this file:
+ at set lastupdate April 12, 2010
+ at c %**end of header
 
+ at dircategory GNU organization
+ at direntry
+* Standards: (standards).       GNU coding standards.
+ at end direntry
+
+ at c @setchapternewpage odd
+ at setchapternewpage off
+
+ at c Put everything in one index (arbitrarily chosen to be the concept index).
+ at syncodeindex fn cp
+ at syncodeindex ky cp
+ at syncodeindex pg cp
+ at syncodeindex vr cp
+
+ at c This is used by a cross ref in make-stds.texi
+ at set CODESTD  1
+
+ at copying
+The GNU coding standards, last updated @value{lastupdate}.
+
+Copyright @copyright{} 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the section entitled
+``GNU Free Documentation License''.
+ at end copying
+
+ at titlepage
+ at title GNU Coding Standards
+ at author Richard Stallman, et al.
+ at author last updated @value{lastupdate}
+ at page
+ at vskip 0pt plus 1filll
+ at insertcopying
+ at end titlepage
+
+ at contents
+
+ at ifnottex
+ at node Top, Preface, (dir), (dir)
+ at top Version
+
+ at insertcopying
+ at end ifnottex
+
+ at menu
+* Preface::                     About the GNU Coding Standards.
+* Legal Issues::                Keeping free software free.
+* Design Advice::               General program design.
+* Program Behavior::            Program behavior for all programs
+* Writing C::                   Making the best use of C.
+* Documentation::               Documenting programs.
+* Managing Releases::           The release process.
+* References::                  Mentioning non-free software or documentation.
+* GNU Free Documentation License::  Copying and sharing this manual.
+* Index::
+
+ at end menu
+
+ at node Preface
+ at chapter About the GNU Coding Standards
+
+The GNU Coding Standards were written by Richard Stallman and other GNU
+Project volunteers.  Their purpose is to make the GNU system clean,
+consistent, and easy to install.  This document can also be read as a
+guide to writing portable, robust and reliable programs.  It focuses on
+programs written in C, but many of the rules and principles are useful
+even if you write in another programming language.  The rules often
+state reasons for writing in a certain way.
+
+ at cindex where to obtain @code{standards.texi}
+ at cindex downloading this manual
+If you did not obtain this file directly from the GNU project and
+recently, please check for a newer version.  You can get the GNU
+Coding Standards from the GNU web server in many
+different formats, including the Texinfo source, PDF, HTML, DVI, plain
+text, and more, at: @uref{http://www.gnu.org/prep/standards/}.
+
+If you are maintaining an official GNU package, in addition to this
+document, please read and follow the GNU maintainer information
+(@pxref{Top, , Contents, maintain, Information for Maintainers of GNU
+Software}).
+
+ at cindex @code{gnustandards-commit@@gnu.org} mailing list
+If you want to receive diffs for every change to these GNU documents,
+join the mailing list @code{gnustandards-commit@@gnu.org}, via the web
+interface at
+ at url{http://lists.gnu.org/mailman/listinfo/gnustandards-commit}.
+Archives are also available there.
+
+ at cindex @code{bug-standards@@gnu.org} email address
+ at cindex Savannah repository for gnustandards
+ at cindex gnustandards project repository
+Please send corrections or suggestions for this document to
+ at email{bug-standards@@gnu.org}.  If you make a suggestion, please
+include a suggested new wording for it, to help us consider the
+suggestion efficiently.  We prefer a context diff to the Texinfo
+source, but if that's difficult for you, you can make a context diff
+for some other version of this document, or propose it in any way that
+makes it clear.  The source repository for this document can be found
+at @url{http://savannah.gnu.org/projects/gnustandards}.
+
+These standards cover the minimum of what is important when writing a
+GNU package.  Likely, the need for additional standards will come up.
+Sometimes, you might suggest that such standards be added to this
+document.  If you think your standards would be generally useful, please
+do suggest them.
+
+You should also set standards for your package on many questions not
+addressed or not firmly specified here.  The most important point is to
+be self-consistent---try to stick to the conventions you pick, and try
+to document them as much as possible.  That way, your program will be
+more maintainable by others.
+
+The GNU Hello program serves as an example of how to follow the GNU
+coding standards for a trivial program.
+ at uref{http://www.gnu.org/software/hello/hello.html}.
+
+This release of the GNU Coding Standards was last updated
+ at value{lastupdate}.
+
+
+ at node Legal Issues
+ at chapter Keeping Free Software Free
+ at cindex legal aspects
+
+This chapter discusses how you can make sure that GNU software
+avoids legal difficulties, and other related issues.
+
+ at menu
+* Reading Non-Free Code::       Referring to proprietary programs.
+* Contributions::               Accepting contributions.
+* Trademarks::                  How we deal with trademark issues.
+ at end menu
+
+ at node Reading Non-Free Code
+ at section Referring to Proprietary Programs
+ at cindex proprietary programs
+ at cindex avoiding proprietary code
+
+Don't in any circumstances refer to Unix source code for or during
+your work on GNU!  (Or to any other proprietary programs.)
+
+If you have a vague recollection of the internals of a Unix program,
+this does not absolutely mean you can't write an imitation of it, but
+do try to organize the imitation internally along different lines,
+because this is likely to make the details of the Unix version
+irrelevant and dissimilar to your results.
+
+For example, Unix utilities were generally optimized to minimize
+memory use; if you go for speed instead, your program will be very
+different.  You could keep the entire input file in memory and scan it
+there instead of using stdio.  Use a smarter algorithm discovered more
+recently than the Unix program.  Eliminate use of temporary files.  Do
+it in one pass instead of two (we did this in the assembler).
+
+Or, on the contrary, emphasize simplicity instead of speed.  For some
+applications, the speed of today's computers makes simpler algorithms
+adequate.
+
+Or go for generality.  For example, Unix programs often have static
+tables or fixed-size strings, which make for arbitrary limits; use
+dynamic allocation instead.  Make sure your program handles NULs and
+other funny characters in the input files.  Add a programming language
+for extensibility and write part of the program in that language.
+
+Or turn some parts of the program into independently usable libraries.
+Or use a simple garbage collector instead of tracking precisely when
+to free memory, or use a new GNU facility such as obstacks.
+
+ at node Contributions
+ at section Accepting Contributions
+ at cindex legal papers
+ at cindex accepting contributions
+
+If the program you are working on is copyrighted by the Free Software
+Foundation, then when someone else sends you a piece of code to add to
+the program, we need legal papers to use it---just as we asked you to
+sign papers initially.  @emph{Each} person who makes a nontrivial
+contribution to a program must sign some sort of legal papers in order
+for us to have clear title to the program; the main author alone is not
+enough.
+
+So, before adding in any contributions from other people, please tell
+us, so we can arrange to get the papers.  Then wait until we tell you
+that we have received the signed papers, before you actually use the
+contribution.
+
+This applies both before you release the program and afterward.  If
+you receive diffs to fix a bug, and they make significant changes, we
+need legal papers for that change.
+
+This also applies to comments and documentation files.  For copyright
+law, comments and code are just text.  Copyright applies to all kinds of
+text, so we need legal papers for all kinds.
+
+We know it is frustrating to ask for legal papers; it's frustrating for
+us as well.  But if you don't wait, you are going out on a limb---for
+example, what if the contributor's employer won't sign a disclaimer?
+You might have to take that code out again!
+
+You don't need papers for changes of a few lines here or there, since
+they are not significant for copyright purposes.  Also, you don't need
+papers if all you get from the suggestion is some ideas, not actual code
+which you use.  For example, if someone sent you one implementation, but
+you write a different implementation of the same idea, you don't need to
+get papers.
+
+The very worst thing is if you forget to tell us about the other
+contributor.  We could be very embarrassed in court some day as a
+result.
+
+We have more detailed advice for maintainers of programs; if you have
+reached the stage of actually maintaining a program for GNU (whether
+released or not), please ask us for a copy.  It is also available
+online for your perusal: @uref{http://www.gnu.org/prep/maintain/}.
+
+ at node Trademarks
+ at section Trademarks
+ at cindex trademarks
+
+Please do not include any trademark acknowledgements in GNU software
+packages or documentation.
+
+Trademark acknowledgements are the statements that such-and-such is a
+trademark of so-and-so.  The GNU Project has no objection to the basic
+idea of trademarks, but these acknowledgements feel like kowtowing,
+and there is no legal requirement for them, so we don't use them.
+
+What is legally required, as regards other people's trademarks, is to
+avoid using them in ways which a reader might reasonably understand as
+naming or labeling our own programs or activities.  For example, since
+``Objective C'' is (or at least was) a trademark, we made sure to say
+that we provide a ``compiler for the Objective C language'' rather
+than an ``Objective C compiler''.  The latter would have been meant as
+a shorter way of saying the former, but it does not explicitly state
+the relationship, so it could be misinterpreted as using ``Objective
+C'' as a label for the compiler rather than for the language.
+
+Please don't use ``win'' as an abbreviation for Microsoft Windows in
+GNU software or documentation.  In hacker terminology, calling
+something a ``win'' is a form of praise.  If you wish to praise
+Microsoft Windows when speaking on your own, by all means do so, but
+not in GNU software.  Usually we write the name ``Windows'' in full,
+but when brevity is very important (as in file names and sometimes
+symbol names), we abbreviate it to ``w''.  For instance, the files and
+functions in Emacs that deal with Windows start with @samp{w32}.
+
+ at node Design Advice
+ at chapter General Program Design
+ at cindex program design
+
+This chapter discusses some of the issues you should take into
+account when designing your program.
+
+ at c                         Standard or ANSI C
+ at c
+ at c In 1989 the American National Standards Institute (ANSI) standardized
+ at c C   as  standard  X3.159-1989.    In  December   of  that   year  the
+ at c International Standards Organization ISO  adopted the ANSI C standard
+ at c making  minor changes.   In 1990  ANSI then  re-adopted  ISO standard
+ at c C. This version of C is known as either ANSI C or Standard C.
+
+ at c A major revision of the C Standard appeared in 1999.
+
+ at menu
+* Source Language::             Which languages to use.
+* Compatibility::               Compatibility with other implementations.
+* Using Extensions::            Using non-standard features.
+* Standard C::                  Using standard C features.
+* Conditional Compilation::     Compiling code only if a conditional is true.
+ at end menu
+
+ at node Source Language
+ at section Which Languages to Use
+ at cindex programming languages
+
+When you want to use a language that gets compiled and runs at high
+speed, the best language to use is C.  Using another language is like
+using a non-standard feature: it will cause trouble for users.  Even if
+GCC supports the other language, users may find it inconvenient to have
+to install the compiler for that other language in order to build your
+program.  For example, if you write your program in C++, people will
+have to install the GNU C++ compiler in order to compile your program.
+
+C has one other advantage over C++ and other compiled languages: more
+people know C, so more people will find it easy to read and modify the
+program if it is written in C.
+
+So in general it is much better to use C, rather than the
+comparable alternatives.
+
+But there are two exceptions to that conclusion:
+
+ at itemize @bullet
+ at item
+It is no problem to use another language to write a tool specifically
+intended for use with that language.  That is because the only people
+who want to build the tool will be those who have installed the other
+language anyway.
+
+ at item
+If an application is of interest only to a narrow part of the community,
+then the question of which language it is written in has less effect on
+other people, so you may as well please yourself.
+ at end itemize
+
+Many programs are designed to be extensible: they include an interpreter
+for a language that is higher level than C.  Often much of the program
+is written in that language, too.  The Emacs editor pioneered this
+technique.
+
+ at cindex Guile
+ at cindex GNOME and Guile
+The standard extensibility interpreter for GNU software is Guile
+(@uref{http://www.gnu.org/@/software/@/guile/}), which implements the
+language Scheme (an especially clean and simple dialect of Lisp).
+Guile also includes bindings for GTK+/GNOME, making it practical to
+write modern GUI functionality within Guile.  We don't reject programs
+written in other ``scripting languages'' such as Perl and Python, but
+using Guile is very important for the overall consistency of the GNU
+system.
+
+
+ at node Compatibility
+ at section Compatibility with Other Implementations
+ at cindex compatibility with C and @sc{posix} standards
+ at cindex @sc{posix} compatibility
+
+With occasional exceptions, utility programs and libraries for GNU
+should be upward compatible with those in Berkeley Unix, and upward
+compatible with Standard C if Standard C specifies their
+behavior, and upward compatible with @sc{posix} if @sc{posix} specifies
+their behavior.
+
+When these standards conflict, it is useful to offer compatibility
+modes for each of them.
+
+ at cindex options for compatibility
+Standard C and @sc{posix} prohibit many kinds of extensions.  Feel
+free to make the extensions anyway, and include a @samp{--ansi},
+ at samp{--posix}, or @samp{--compatible} option to turn them off.
+However, if the extension has a significant chance of breaking any real
+programs or scripts, then it is not really upward compatible.  So you
+should try to redesign its interface to make it upward compatible.
+
+ at cindex @code{POSIXLY_CORRECT}, environment variable
+Many GNU programs suppress extensions that conflict with @sc{posix} if the
+environment variable @code{POSIXLY_CORRECT} is defined (even if it is
+defined with a null value).  Please make your program recognize this
+variable if appropriate.
+
+When a feature is used only by users (not by programs or command
+files), and it is done poorly in Unix, feel free to replace it
+completely with something totally different and better.  (For example,
+ at code{vi} is replaced with Emacs.)  But it is nice to offer a compatible
+feature as well.  (There is a free @code{vi} clone, so we offer it.)
+
+Additional useful features are welcome regardless of whether
+there is any precedent for them.
+
+ at node Using Extensions
+ at section Using Non-standard Features
+ at cindex non-standard extensions
+
+Many GNU facilities that already exist support a number of convenient
+extensions over the comparable Unix facilities.  Whether to use these
+extensions in implementing your program is a difficult question.
+
+On the one hand, using the extensions can make a cleaner program.
+On the other hand, people will not be able to build the program
+unless the other GNU tools are available.  This might cause the
+program to work on fewer kinds of machines.
+
+With some extensions, it might be easy to provide both alternatives.
+For example, you can define functions with a ``keyword'' @code{INLINE}
+and define that as a macro to expand into either @code{inline} or
+nothing, depending on the compiler.
+
+In general, perhaps it is best not to use the extensions if you can
+straightforwardly do without them, but to use the extensions if they
+are a big improvement.
+
+An exception to this rule are the large, established programs (such as
+Emacs) which run on a great variety of systems.  Using GNU extensions in
+such programs would make many users unhappy, so we don't do that.
+
+Another exception is for programs that are used as part of compilation:
+anything that must be compiled with other compilers in order to
+bootstrap the GNU compilation facilities.  If these require the GNU
+compiler, then no one can compile them without having them installed
+already.  That would be extremely troublesome in certain cases.
+
+ at node Standard C
+ at section Standard C and Pre-Standard C
+ at cindex @sc{ansi} C standard
+
+1989 Standard C is widespread enough now that it is ok to use its
+features in new programs.  There is one exception: do not ever use the
+``trigraph'' feature of Standard C.
+
+1999 Standard C is not widespread yet, so please do not require its
+features in programs.  It is ok to use its features if they are present.
+
+However, it is easy to support pre-standard compilers in most programs,
+so if you know how to do that, feel free.  If a program you are
+maintaining has such support, you should try to keep it working.
+
+ at cindex function prototypes
+To support pre-standard C, instead of writing function definitions in
+standard prototype form,
+
+ at example
+int
+foo (int x, int y)
+ at dots{}
+ at end example
+
+ at noindent
+write the definition in pre-standard style like this,
+
+ at example
+int
+foo (x, y)
+     int x, y;
+ at dots{}
+ at end example
+
+ at noindent
+and use a separate declaration to specify the argument prototype:
+
+ at example
+int foo (int, int);
+ at end example
+
+You need such a declaration anyway, in a header file, to get the benefit
+of prototypes in all the files where the function is called.  And once
+you have the declaration, you normally lose nothing by writing the
+function definition in the pre-standard style.
+
+This technique does not work for integer types narrower than @code{int}.
+If you think of an argument as being of a type narrower than @code{int},
+declare it as @code{int} instead.
+
+There are a few special cases where this technique is hard to use.  For
+example, if a function argument needs to hold the system type
+ at code{dev_t}, you run into trouble, because @code{dev_t} is shorter than
+ at code{int} on some machines; but you cannot use @code{int} instead,
+because @code{dev_t} is wider than @code{int} on some machines.  There
+is no type you can safely use on all machines in a non-standard
+definition.  The only way to support non-standard C and pass such an
+argument is to check the width of @code{dev_t} using Autoconf and choose
+the argument type accordingly.  This may not be worth the trouble.
+
+In order to support pre-standard compilers that do not recognize
+prototypes, you may want to use a preprocessor macro like this:
+
+ at example
+/* Declare the prototype for a general external function.  */
+#if defined (__STDC__) || defined (WINDOWSNT)
+#define P_(proto) proto
+#else
+#define P_(proto) ()
+#endif
+ at end example
+
+ at node Conditional Compilation
+ at section Conditional Compilation
+
+When supporting configuration options already known when building your
+program we prefer using @code{if (... )} over conditional compilation,
+as in the former case the compiler is able to perform more extensive
+checking of all possible code paths.
+
+For example, please write
+
+ at smallexample
+  if (HAS_FOO)
+    ...
+  else
+    ...
+ at end smallexample
+
+ at noindent
+instead of:
+
+ at smallexample
+  #ifdef HAS_FOO
+    ...
+  #else
+    ...
+  #endif
+ at end smallexample
+
+A modern compiler such as GCC will generate exactly the same code in
+both cases, and we have been using similar techniques with good success
+in several projects.  Of course, the former method assumes that
+ at code{HAS_FOO} is defined as either 0 or 1.
+
+While this is not a silver bullet solving all portability problems,
+and is not always appropriate, following this policy would have saved
+GCC developers many hours, or even days, per year.
+
+In the case of function-like macros like @code{REVERSIBLE_CC_MODE} in
+GCC which cannot be simply used in @code{if (...)} statements, there is
+an easy workaround.  Simply introduce another macro
+ at code{HAS_REVERSIBLE_CC_MODE} as in the following example:
+
+ at smallexample
+  #ifdef REVERSIBLE_CC_MODE
+  #define HAS_REVERSIBLE_CC_MODE 1
+  #else
+  #define HAS_REVERSIBLE_CC_MODE 0
+  #endif
+ at end smallexample
+
+ at node Program Behavior
+ at chapter Program Behavior for All Programs
+
+This chapter describes conventions for writing robust
+software.  It also describes general standards for error messages, the
+command line interface, and how libraries should behave.
+
+ at menu
+* Non-GNU Standards::           We consider standards such as POSIX;
+                                  we don't "obey" them.
+* Semantics::                   Writing robust programs.
+* Libraries::                   Library behavior.
+* Errors::                      Formatting error messages.
+* User Interfaces::             Standards about interfaces generally.
+* Graphical Interfaces::        Standards for graphical interfaces.
+* Command-Line Interfaces::     Standards for command line interfaces.
+* Option Table::                Table of long options.
+* OID Allocations::             Table of OID slots for GNU.
+* Memory Usage::                When and how to care about memory needs.
+* File Usage::                  Which files to use, and where.
+ at end menu
+
+ at node Non-GNU Standards
+ at section Non-GNU Standards
+
+The GNU Project regards standards published by other organizations as
+suggestions, not orders.  We consider those standards, but we do not
+``obey'' them.  In developing a GNU program, you should implement
+an outside standard's specifications when that makes the GNU system
+better overall in an objective sense.  When it doesn't, you shouldn't.
+
+In most cases, following published standards is convenient for
+users---it means that their programs or scripts will work more
+portably.  For instance, GCC implements nearly all the features of
+Standard C as specified by that standard.  C program developers would
+be unhappy if it did not.  And GNU utilities mostly follow
+specifications of POSIX.2; shell script writers and users would be
+unhappy if our programs were incompatible.
+
+But we do not follow either of these specifications rigidly, and there
+are specific points on which we decided not to follow them, so as to
+make the GNU system better for users.
+
+For instance, Standard C says that nearly all extensions to C are
+prohibited.  How silly!  GCC implements many extensions, some of which
+were later adopted as part of the standard.  If you want these
+constructs to give an error message as ``required'' by the standard,
+you must specify @samp{--pedantic}, which was implemented only so that
+we can say ``GCC is a 100% implementation of the standard,'' not
+because there is any reason to actually use it.
+
+POSIX.2 specifies that @samp{df} and @samp{du} must output sizes by
+default in units of 512 bytes.  What users want is units of 1k, so
+that is what we do by default.  If you want the ridiculous behavior
+``required'' by POSIX, you must set the environment variable
+ at samp{POSIXLY_CORRECT} (which was originally going to be named
+ at samp{POSIX_ME_HARDER}).
+
+GNU utilities also depart from the letter of the POSIX.2 specification
+when they support long-named command-line options, and intermixing
+options with ordinary arguments.  This minor incompatibility with
+POSIX is never a problem in practice, and it is very useful.
+
+In particular, don't reject a new feature, or remove an old one,
+merely because a standard says it is ``forbidden'' or ``deprecated.''
+
+ at node Semantics
+ at section Writing Robust Programs
+
+ at cindex arbitrary limits on data
+Avoid arbitrary limits on the length or number of @emph{any} data
+structure, including file names, lines, files, and symbols, by allocating
+all data structures dynamically.  In most Unix utilities, ``long lines
+are silently truncated''.  This is not acceptable in a GNU utility.
+
+ at cindex @code{NUL} characters
+Utilities reading files should not drop NUL characters, or any other
+nonprinting characters @emph{including those with codes above 0177}.
+The only sensible exceptions would be utilities specifically intended
+for interface to certain types of terminals or printers
+that can't handle those characters.
+Whenever possible, try to make programs work properly with
+sequences of bytes that represent multibyte characters, using encodings
+such as UTF-8 and others.
+
+ at cindex error messages
+Check every system call for an error return, unless you know you wish to
+ignore errors.  Include the system error text (from @code{perror} or
+equivalent) in @emph{every} error message resulting from a failing
+system call, as well as the name of the file if any and the name of the
+utility.  Just ``cannot open foo.c'' or ``stat failed'' is not
+sufficient.
+
+ at cindex @code{malloc} return value
+ at cindex memory allocation failure
+Check every call to @code{malloc} or @code{realloc} to see if it
+returned zero.  Check @code{realloc} even if you are making the block
+smaller; in a system that rounds block sizes to a power of 2,
+ at code{realloc} may get a different block if you ask for less space.
+
+In Unix, @code{realloc} can destroy the storage block if it returns
+zero.  GNU @code{realloc} does not have this bug: if it fails, the
+original block is unchanged.  Feel free to assume the bug is fixed.  If
+you wish to run your program on Unix, and wish to avoid lossage in this
+case, you can use the GNU @code{malloc}.
+
+You must expect @code{free} to alter the contents of the block that was
+freed.  Anything you want to fetch from the block, you must fetch before
+calling @code{free}.
+
+If @code{malloc} fails in a noninteractive program, make that a fatal
+error.  In an interactive program (one that reads commands from the
+user), it is better to abort the command and return to the command
+reader loop.  This allows the user to kill other processes to free up
+virtual memory, and then try the command again.
+
+ at cindex command-line arguments, decoding
+Use @code{getopt_long} to decode arguments, unless the argument syntax
+makes this unreasonable.
+
+When static storage is to be written in during program execution, use
+explicit C code to initialize it.  Reserve C initialized declarations
+for data that will not be changed.
+ at c ADR: why?
+
+Try to avoid low-level interfaces to obscure Unix data structures (such
+as file directories, utmp, or the layout of kernel memory), since these
+are less likely to work compatibly.  If you need to find all the files
+in a directory, use @code{readdir} or some other high-level interface.
+These are supported compatibly by GNU.
+
+ at cindex signal handling
+The preferred signal handling facilities are the BSD variant of
+ at code{signal}, and the @sc{posix} @code{sigaction} function; the
+alternative USG @code{signal} interface is an inferior design.
+
+Nowadays, using the @sc{posix} signal functions may be the easiest way
+to make a program portable.  If you use @code{signal}, then on GNU/Linux
+systems running GNU libc version 1, you should include
+ at file{bsd/signal.h} instead of @file{signal.h}, so as to get BSD
+behavior.  It is up to you whether to support systems where
+ at code{signal} has only the USG behavior, or give up on them.
+
+ at cindex impossible conditions
+In error checks that detect ``impossible'' conditions, just abort.
+There is usually no point in printing any message.  These checks
+indicate the existence of bugs.  Whoever wants to fix the bugs will have
+to read the source code and run a debugger.  So explain the problem with
+comments in the source.  The relevant data will be in variables, which
+are easy to examine with the debugger, so there is no point moving them
+elsewhere.
+
+Do not use a count of errors as the exit status for a program.
+ at emph{That does not work}, because exit status values are limited to 8
+bits (0 through 255).  A single run of the program might have 256
+errors; if you try to return 256 as the exit status, the parent process
+will see 0 as the status, and it will appear that the program succeeded.
+
+ at cindex temporary files
+ at cindex @code{TMPDIR} environment variable
+If you make temporary files, check the @code{TMPDIR} environment
+variable; if that variable is defined, use the specified directory
+instead of @file{/tmp}.
+
+In addition, be aware that there is a possible security problem when
+creating temporary files in world-writable directories.  In C, you can
+avoid this problem by creating temporary files in this manner:
+
+ at example
+fd = open (filename, O_WRONLY | O_CREAT | O_EXCL, 0600);
+ at end example
+
+ at noindent
+or by using the @code{mkstemps} function from libiberty.
+
+In bash, use @code{set -C} to avoid this problem.
+
+ at node Libraries
+ at section Library Behavior
+ at cindex libraries
+
+Try to make library functions reentrant.  If they need to do dynamic
+storage allocation, at least try to avoid any nonreentrancy aside from
+that of @code{malloc} itself.
+
+Here are certain name conventions for libraries, to avoid name
+conflicts.
+
+Choose a name prefix for the library, more than two characters long.
+All external function and variable names should start with this
+prefix.  In addition, there should only be one of these in any given
+library member.  This usually means putting each one in a separate
+source file.
+
+An exception can be made when two external symbols are always used
+together, so that no reasonable program could use one without the
+other; then they can both go in the same file.
+
+External symbols that are not documented entry points for the user
+should have names beginning with @samp{_}.  The @samp{_} should be
+followed by the chosen name prefix for the library, to prevent
+collisions with other libraries.  These can go in the same files with
+user entry points if you like.
+
+Static functions and variables can be used as you like and need not
+fit any naming convention.
+
+ at node Errors
+ at section Formatting Error Messages
+ at cindex formatting error messages
+ at cindex error messages, formatting
+
+Error messages from compilers should look like this:
+
+ at example
+ at var{source-file-name}:@var{lineno}: @var{message}
+ at end example
+
+ at noindent
+If you want to mention the column number, use one of these formats:
+
+ at example
+ at var{source-file-name}:@var{lineno}:@var{column}: @var{message}
+ at var{source-file-name}:@var{lineno}. at var{column}: @var{message}
+
+ at end example
+
+ at noindent
+Line numbers should start from 1 at the beginning of the file, and
+column numbers should start from 1 at the beginning of the line.  (Both
+of these conventions are chosen for compatibility.)  Calculate column
+numbers assuming that space and all ASCII printing characters have
+equal width, and assuming tab stops every 8 columns.
+
+The error message can also give both the starting and ending positions
+of the erroneous text.  There are several formats so that you can
+avoid redundant information such as a duplicate line number.
+Here are the possible formats:
+
+ at example
+ at var{source-file-name}:@var{lineno-1}. at var{column-1}- at var{lineno-2}. at var{column-2}: @var{message}
+ at var{source-file-name}:@var{lineno-1}. at var{column-1}- at var{column-2}: @var{message}
+ at var{source-file-name}:@var{lineno-1}- at var{lineno-2}: @var{message}
+ at end example
+
+ at noindent
+When an error is spread over several files, you can use this format:
+
+ at example
+ at var{file-1}:@var{lineno-1}. at var{column-1}- at var{file-2}:@var{lineno-2}. at var{column-2}: @var{message}
+ at end example
+
+Error messages from other noninteractive programs should look like this:
+
+ at example
+ at var{program}:@var{source-file-name}:@var{lineno}: @var{message}
+ at end example
+
+ at noindent
+when there is an appropriate source file, or like this:
+
+ at example
+ at var{program}: @var{message}
+ at end example
+
+ at noindent
+when there is no relevant source file.
+
+If you want to mention the column number, use this format:
+
+ at example
+ at var{program}:@var{source-file-name}:@var{lineno}:@var{column}: @var{message}
+ at end example
+
+In an interactive program (one that is reading commands from a
+terminal), it is better not to include the program name in an error
+message.  The place to indicate which program is running is in the
+prompt or with the screen layout.  (When the same program runs with
+input from a source other than a terminal, it is not interactive and
+would do best to print error messages using the noninteractive style.)
+
+The string @var{message} should not begin with a capital letter when
+it follows a program name and/or file name, because that isn't the
+beginning of a sentence.  (The sentence conceptually starts at the
+beginning of the line.)  Also, it should not end with a period.
+
+Error messages from interactive programs, and other messages such as
+usage messages, should start with a capital letter.  But they should not
+end with a period.
+
+ at node User Interfaces
+ at section Standards for Interfaces Generally
+
+ at cindex program name and its behavior
+ at cindex behavior, dependent on program's name
+Please don't make the behavior of a utility depend on the name used
+to invoke it.  It is useful sometimes to make a link to a utility
+with a different name, and that should not change what it does.
+
+Instead, use a run time option or a compilation switch or both
+to select among the alternate behaviors.
+
+ at cindex output device and program's behavior
+Likewise, please don't make the behavior of the program depend on the
+type of output device it is used with.  Device independence is an
+important principle of the system's design; do not compromise it merely
+to save someone from typing an option now and then.  (Variation in error
+message syntax when using a terminal is ok, because that is a side issue
+that people do not depend on.)
+
+If you think one behavior is most useful when the output is to a
+terminal, and another is most useful when the output is a file or a
+pipe, then it is usually best to make the default behavior the one that
+is useful with output to a terminal, and have an option for the other
+behavior.
+
+Compatibility requires certain programs to depend on the type of output
+device.  It would be disastrous if @code{ls} or @code{sh} did not do so
+in the way all users expect.  In some of these cases, we supplement the
+program with a preferred alternate version that does not depend on the
+output device type.  For example, we provide a @code{dir} program much
+like @code{ls} except that its default output format is always
+multi-column format.
+
+
+ at node Graphical Interfaces
+ at section Standards for Graphical Interfaces
+ at cindex graphical user interface
+ at cindex interface styles
+ at cindex user interface styles
+
+ at cindex GTK+
+When you write a program that provides a graphical user interface,
+please make it work with the X Window System and the GTK+ toolkit
+unless the functionality specifically requires some alternative (for
+example, ``displaying jpeg images while in console mode'').
+
+In addition, please provide a command-line interface to control the
+functionality.  (In many cases, the graphical user interface can be a
+separate program which invokes the command-line program.)  This is
+so that the same jobs can be done from scripts.
+
+ at cindex CORBA
+ at cindex GNOME
+ at cindex D-bus
+ at cindex keyboard interface
+ at cindex library interface
+Please also consider providing a D-bus interface for use from other
+running programs, such as within GNOME.  (GNOME used to use CORBA
+for this, but that is being phased out.)  In addition, consider
+providing a library interface (for use from C), and perhaps a
+keyboard-driven console interface (for use by users from console
+mode).  Once you are doing the work to provide the functionality and
+the graphical interface, these won't be much extra work.
+
+
+ at node Command-Line Interfaces
+ at section Standards for Command Line Interfaces
+ at cindex command-line interface
+
+ at findex getopt
+It is a good idea to follow the @sc{posix} guidelines for the
+command-line options of a program.  The easiest way to do this is to use
+ at code{getopt} to parse them.  Note that the GNU version of @code{getopt}
+will normally permit options anywhere among the arguments unless the
+special argument @samp{--} is used.  This is not what @sc{posix}
+specifies; it is a GNU extension.
+
+ at cindex long-named options
+Please define long-named options that are equivalent to the
+single-letter Unix-style options.  We hope to make GNU more user
+friendly this way.  This is easy to do with the GNU function
+ at code{getopt_long}.
+
+One of the advantages of long-named options is that they can be
+consistent from program to program.  For example, users should be able
+to expect the ``verbose'' option of any GNU program which has one, to be
+spelled precisely @samp{--verbose}.  To achieve this uniformity, look at
+the table of common long-option names when you choose the option names
+for your program (@pxref{Option Table}).
+
+It is usually a good idea for file names given as ordinary arguments to
+be input files only; any output files would be specified using options
+(preferably @samp{-o} or @samp{--output}).  Even if you allow an output
+file name as an ordinary argument for compatibility, try to provide an
+option as another way to specify it.  This will lead to more consistency
+among GNU utilities, and fewer idiosyncrasies for users to remember.
+
+ at cindex standard command-line options
+ at cindex options, standard command-line
+ at cindex CGI programs, standard options for
+ at cindex PATH_INFO, specifying standard options as
+All programs should support two standard options: @samp{--version}
+and @samp{--help}.  CGI programs should accept these as command-line
+options, and also if given as the @env{PATH_INFO}; for instance,
+visiting @url{http://example.org/p.cgi/--help} in a browser should
+output the same information as invoking @samp{p.cgi --help} from the
+command line.
+
+ at menu
+* --version::       The standard output for --version.
+* --help::          The standard output for --help.
+ at end menu
+
+ at node --version
+ at subsection @option{--version}
+
+ at cindex @samp{--version} output
+
+The standard @code{--version} option should direct the program to
+print information about its name, version, origin and legal status,
+all on standard output, and then exit successfully.  Other options and
+arguments should be ignored once this is seen, and the program should
+not perform its normal function.
+
+ at cindex canonical name of a program
+ at cindex program's canonical name
+The first line is meant to be easy for a program to parse; the version
+number proper starts after the last space.  In addition, it contains
+the canonical name for this program, in this format:
+
+ at example
+GNU Emacs 19.30
+ at end example
+
+ at noindent
+The program's name should be a constant string; @emph{don't} compute it
+from @code{argv[0]}.  The idea is to state the standard or canonical
+name for the program, not its file name.  There are other ways to find
+out the precise file name where a command is found in @code{PATH}.
+
+If the program is a subsidiary part of a larger package, mention the
+package name in parentheses, like this:
+
+ at example
+emacsserver (GNU Emacs) 19.30
+ at end example
+
+ at noindent
+If the package has a version number which is different from this
+program's version number, you can mention the package version number
+just before the close-parenthesis.
+
+If you @emph{need} to mention the version numbers of libraries which
+are distributed separately from the package which contains this program,
+you can do so by printing an additional line of version info for each
+library you want to mention.  Use the same format for these lines as for
+the first line.
+
+Please do not mention all of the libraries that the program uses ``just
+for completeness''---that would produce a lot of unhelpful clutter.
+Please mention library version numbers only if you find in practice that
+they are very important to you in debugging.
+
+The following line, after the version number line or lines, should be a
+copyright notice.  If more than one copyright notice is called for, put
+each on a separate line.
+
+Next should follow a line stating the license, preferably using one of
+abbrevations below, and a brief statement that the program is free
+software, and that users are free to copy and change it.  Also mention
+that there is no warranty, to the extent permitted by law.  See
+recommended wording below.
+
+It is ok to finish the output with a list of the major authors of the
+program, as a way of giving credit.
+
+Here's an example of output that follows these rules:
+
+ at smallexample
+GNU hello 2.3
+Copyright (C) 2007 Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+ at end smallexample
+
+You should adapt this to your program, of course, filling in the proper
+year, copyright holder, name of program, and the references to
+distribution terms, and changing the rest of the wording as necessary.
+
+This copyright notice only needs to mention the most recent year in
+which changes were made---there's no need to list the years for previous
+versions' changes.  You don't have to mention the name of the program in
+these notices, if that is inconvenient, since it appeared in the first
+line.  (The rules are different for copyright notices in source files;
+ at pxref{Copyright Notices,,,maintain,Information for GNU Maintainers}.)
+
+Translations of the above lines must preserve the validity of the
+copyright notices (@pxref{Internationalization}).  If the translation's
+character set supports it, the @samp{(C)} should be replaced with the
+copyright symbol, as follows:
+
+ at ifinfo
+(the official copyright symbol, which is the letter C in a circle);
+ at end ifinfo
+ at ifnotinfo
+ at copyright{}
+ at end ifnotinfo
+
+Write the word ``Copyright'' exactly like that, in English.  Do not
+translate it into another language.  International treaties recognize
+the English word ``Copyright''; translations into other languages do not
+have legal significance.
+
+Finally, here is the table of our suggested license abbreviations.
+Any abbreviation can be followed by @samp{v at var{version}[+]}, meaning
+that particular version, or later versions with the @samp{+}, as shown
+above.
+
+In the case of exceptions for extra permissions with the GPL, we use
+ at samp{/} for a separator; the version number can follow the license
+abbreviation as usual, as in the examples below.
+
+ at table @asis
+ at item GPL
+GNU General Public License, @url{http://www.gnu.org/@/licenses/@/gpl.html}.
+
+ at item LGPL
+GNU Lesser General Public License, @url{http://www.gnu.org/@/licenses/@/lgpl.html}.
+
+ at item GPL/Ada
+GNU GPL with the exception for Ada.
+
+ at item Apache
+The Apache Software Foundation license,
+ at url{http://www.apache.org/@/licenses}.
+
+ at item Artistic
+The Artistic license used for Perl, @url{http://www.perlfoundation.org/@/legal}.
+
+ at item Expat
+The Expat license, @url{http://www.jclark.com/@/xml/@/copying.txt}.
+
+ at item MPL
+The Mozilla Public License, @url{http://www.mozilla.org/@/MPL/}.
+
+ at item OBSD
+The original (4-clause) BSD license, incompatible with the GNU GPL
+ at url{http://www.xfree86.org/@/3.3.6/@/COPYRIGHT2.html#6}.
+
+ at item PHP
+The license used for PHP, @url{http://www.php.net/@/license/}.
+
+ at item public domain
+The non-license that is being in the public domain,
+ at url{http://www.gnu.org/@/licenses/@/license-list.html#PublicDomain}.
+
+ at item Python
+The license for Python, @url{http://www.python.org/@/2.0.1/@/license.html}.
+
+ at item RBSD
+The revised (3-clause) BSD, compatible with the GNU GPL,@*
+ at url{http://www.xfree86.org/@/3.3.6/@/COPYRIGHT2.html#5}.
+
+ at item X11
+The simple non-copyleft license used for most versions of the X Window
+System, @url{http://www.xfree86.org/@/3.3.6/@/COPYRIGHT2.html#3}.
+
+ at item Zlib
+The license for Zlib, @url{http://www.gzip.org/@/zlib/@/zlib_license.html}.
+
+ at end table
+
+More information about these licenses and many more are on the GNU
+licensing web pages,
+ at url{http://www.gnu.org/@/licenses/@/license-list.html}.
+
+
+ at node --help
+ at subsection @option{--help}
+
+ at cindex @samp{--help} output
+
+The standard @code{--help} option should output brief documentation
+for how to invoke the program, on standard output, then exit
+successfully.  Other options and arguments should be ignored once this
+is seen, and the program should not perform its normal function.
+
+ at cindex address for bug reports
+ at cindex bug reports
+Near the end of the @samp{--help} option's output, please place lines
+giving the email address for bug reports, the package's home page
+(normally @indicateurl{http://www.gnu.org/software/@var{pkg}}, and the
+general page for help using GNU programs.  The format should be like this:
+
+ at example
+Report bugs to: @var{mailing-address}
+ at var{pkg} home page: <http://www.gnu.org/software/@var{pkg}/>
+General help using GNU software: <http://www.gnu.org/gethelp/>
+ at end example
+
+It is ok to mention other appropriate mailing lists and web pages.
+
+
+ at node Option Table
+ at section Table of Long Options
+ at cindex long option names
+ at cindex table of long options
+
+Here is a table of long options used by GNU programs.  It is surely
+incomplete, but we aim to list all the options that a new program might
+want to be compatible with.  If you use names not already in the table,
+please send @email{bug-standards@@gnu.org} a list of them, with their
+meanings, so we can update the table.
+
+ at c Please leave newlines between items in this table; it's much easier
+ at c to update when it isn't completely squashed together and unreadable.
+ at c When there is more than one short option for a long option name, put
+ at c a semicolon between the lists of the programs that use them, not a
+ at c period.   --friedman
+
+ at table @samp
+ at item after-date
+ at samp{-N} in @code{tar}.
+
+ at item all
+ at samp{-a} in @code{du}, @code{ls}, @code{nm}, @code{stty}, @code{uname},
+and @code{unexpand}.
+
+ at item all-text
+ at samp{-a} in @code{diff}.
+
+ at item almost-all
+ at samp{-A} in @code{ls}.
+
+ at item append
+ at samp{-a} in @code{etags}, @code{tee}, @code{time};
+ at samp{-r} in @code{tar}.
+
+ at item archive
+ at samp{-a} in @code{cp}.
+
+ at item archive-name
+ at samp{-n} in @code{shar}.
+
+ at item arglength
+ at samp{-l} in @code{m4}.
+
+ at item ascii
+ at samp{-a} in @code{diff}.
+
+ at item assign
+ at samp{-v} in @code{gawk}.
+
+ at item assume-new
+ at samp{-W} in @code{make}.
+
+ at item assume-old
+ at samp{-o} in @code{make}.
+
+ at item auto-check
+ at samp{-a} in @code{recode}.
+
+ at item auto-pager
+ at samp{-a} in @code{wdiff}.
+
+ at item auto-reference
+ at samp{-A} in @code{ptx}.
+
+ at item avoid-wraps
+ at samp{-n} in @code{wdiff}.
+
+ at item background
+For server programs, run in the background.
+
+ at item backward-search
+ at samp{-B} in @code{ctags}.
+
+ at item basename
+ at samp{-f} in @code{shar}.
+
+ at item batch
+Used in GDB.
+
+ at item baud
+Used in GDB.
+
+ at item before
+ at samp{-b} in @code{tac}.
+
+ at item binary
+ at samp{-b} in @code{cpio} and @code{diff}.
+
+ at item bits-per-code
+ at samp{-b} in @code{shar}.
+
+ at item block-size
+Used in @code{cpio} and @code{tar}.
+
+ at item blocks
+ at samp{-b} in @code{head} and @code{tail}.
+
+ at item break-file
+ at samp{-b} in @code{ptx}.
+
+ at item brief
+Used in various programs to make output shorter.
+
+ at item bytes
+ at samp{-c} in @code{head}, @code{split}, and @code{tail}.
+
+ at item c at t{++}
+ at samp{-C} in @code{etags}.
+
+ at item catenate
+ at samp{-A} in @code{tar}.
+
+ at item cd
+Used in various programs to specify the directory to use.
+
+ at item changes
+ at samp{-c} in @code{chgrp} and @code{chown}.
+
+ at item classify
+ at samp{-F} in @code{ls}.
+
+ at item colons
+ at samp{-c} in @code{recode}.
+
+ at item command
+ at samp{-c} in @code{su};
+ at samp{-x} in GDB.
+
+ at item compare
+ at samp{-d} in @code{tar}.
+
+ at item compat
+Used in @code{gawk}.
+
+ at item compress
+ at samp{-Z} in @code{tar} and @code{shar}.
+
+ at item concatenate
+ at samp{-A} in @code{tar}.
+
+ at item confirmation
+ at samp{-w} in @code{tar}.
+
+ at item context
+Used in @code{diff}.
+
+ at item copyleft
+ at samp{-W copyleft} in @code{gawk}.
+
+ at item copyright
+ at samp{-C} in @code{ptx}, @code{recode}, and @code{wdiff};
+ at samp{-W copyright} in @code{gawk}.
+
+ at item core
+Used in GDB.
+
+ at item count
+ at samp{-q} in @code{who}.
+
+ at item count-links
+ at samp{-l} in @code{du}.
+
+ at item create
+Used in @code{tar} and @code{cpio}.
+
+ at item cut-mark
+ at samp{-c} in @code{shar}.
+
+ at item cxref
+ at samp{-x} in @code{ctags}.
+
+ at item date
+ at samp{-d} in @code{touch}.
+
+ at item debug
+ at samp{-d} in @code{make} and @code{m4};
+ at samp{-t} in Bison.
+
+ at item define
+ at samp{-D} in @code{m4}.
+
+ at item defines
+ at samp{-d} in Bison and @code{ctags}.
+
+ at item delete
+ at samp{-D} in @code{tar}.
+
+ at item dereference
+ at samp{-L} in @code{chgrp}, @code{chown}, @code{cpio}, @code{du},
+ at code{ls}, and @code{tar}.
+
+ at item dereference-args
+ at samp{-D} in @code{du}.
+
+ at item device
+Specify an I/O device (special file name).
+
+ at item diacritics
+ at samp{-d} in @code{recode}.
+
+ at item dictionary-order
+ at samp{-d} in @code{look}.
+
+ at item diff
+ at samp{-d} in @code{tar}.
+
+ at item digits
+ at samp{-n} in @code{csplit}.
+
+ at item directory
+Specify the directory to use, in various programs.  In @code{ls}, it
+means to show directories themselves rather than their contents.  In
+ at code{rm} and @code{ln}, it means to not treat links to directories
+specially.
+
+ at item discard-all
+ at samp{-x} in @code{strip}.
+
+ at item discard-locals
+ at samp{-X} in @code{strip}.
+
+ at item dry-run
+ at samp{-n} in @code{make}.
+
+ at item ed
+ at samp{-e} in @code{diff}.
+
+ at item elide-empty-files
+ at samp{-z} in @code{csplit}.
+
+ at item end-delete
+ at samp{-x} in @code{wdiff}.
+
+ at item end-insert
+ at samp{-z} in @code{wdiff}.
+
+ at item entire-new-file
+ at samp{-N} in @code{diff}.
+
+ at item environment-overrides
+ at samp{-e} in @code{make}.
+
+ at item eof
+ at samp{-e} in @code{xargs}.
+
+ at item epoch
+Used in GDB.
+
+ at item error-limit
+Used in @code{makeinfo}.
+
+ at item error-output
+ at samp{-o} in @code{m4}.
+
+ at item escape
+ at samp{-b} in @code{ls}.
+
+ at item exclude-from
+ at samp{-X} in @code{tar}.
+
+ at item exec
+Used in GDB.
+
+ at item exit
+ at samp{-x} in @code{xargs}.
+
+ at item exit-0
+ at samp{-e} in @code{unshar}.
+
+ at item expand-tabs
+ at samp{-t} in @code{diff}.
+
+ at item expression
+ at samp{-e} in @code{sed}.
+
+ at item extern-only
+ at samp{-g} in @code{nm}.
+
+ at item extract
+ at samp{-i} in @code{cpio};
+ at samp{-x} in @code{tar}.
+
+ at item faces
+ at samp{-f} in @code{finger}.
+
+ at item fast
+ at samp{-f} in @code{su}.
+
+ at item fatal-warnings
+ at samp{-E} in @code{m4}.
+
+ at item file
+ at samp{-f} in @code{gawk}, @code{info}, @code{make}, @code{mt},
+ at code{sed}, and @code{tar}.
+
+ at item field-separator
+ at samp{-F} in @code{gawk}.
+
+ at item file-prefix
+ at samp{-b} in Bison.
+
+ at item file-type
+ at samp{-F} in @code{ls}.
+
+ at item files-from
+ at samp{-T} in @code{tar}.
+
+ at item fill-column
+Used in @code{makeinfo}.
+
+ at item flag-truncation
+ at samp{-F} in @code{ptx}.
+
+ at item fixed-output-files
+ at samp{-y} in Bison.
+
+ at item follow
+ at samp{-f} in @code{tail}.
+
+ at item footnote-style
+Used in @code{makeinfo}.
+
+ at item force
+ at samp{-f} in @code{cp}, @code{ln}, @code{mv}, and @code{rm}.
+
+ at item force-prefix
+ at samp{-F} in @code{shar}.
+
+ at item foreground
+For server programs, run in the foreground;
+in other words, don't do anything special to run the server
+in the background.
+
+ at item format
+Used in @code{ls}, @code{time}, and @code{ptx}.
+
+ at item freeze-state
+ at samp{-F} in @code{m4}.
+
+ at item fullname
+Used in GDB.
+
+ at item gap-size
+ at samp{-g} in @code{ptx}.
+
+ at item get
+ at samp{-x} in @code{tar}.
+
+ at item graphic
+ at samp{-i} in @code{ul}.
+
+ at item graphics
+ at samp{-g} in @code{recode}.
+
+ at item group
+ at samp{-g} in @code{install}.
+
+ at item gzip
+ at samp{-z} in @code{tar} and @code{shar}.
+
+ at item hashsize
+ at samp{-H} in @code{m4}.
+
+ at item header
+ at samp{-h} in @code{objdump} and @code{recode}
+
+ at item heading
+ at samp{-H} in @code{who}.
+
+ at item help
+Used to ask for brief usage information.
+
+ at item here-delimiter
+ at samp{-d} in @code{shar}.
+
+ at item hide-control-chars
+ at samp{-q} in @code{ls}.
+
+ at item html
+In @code{makeinfo}, output HTML.
+
+ at item idle
+ at samp{-u} in @code{who}.
+
+ at item ifdef
+ at samp{-D} in @code{diff}.
+
+ at item ignore
+ at samp{-I} in @code{ls};
+ at samp{-x} in @code{recode}.
+
+ at item ignore-all-space
+ at samp{-w} in @code{diff}.
+
+ at item ignore-backups
+ at samp{-B} in @code{ls}.
+
+ at item ignore-blank-lines
+ at samp{-B} in @code{diff}.
+
+ at item ignore-case
+ at samp{-f} in @code{look} and @code{ptx};
+ at samp{-i} in @code{diff} and @code{wdiff}.
+
+ at item ignore-errors
+ at samp{-i} in @code{make}.
+
+ at item ignore-file
+ at samp{-i} in @code{ptx}.
+
+ at item ignore-indentation
+ at samp{-I} in @code{etags}.
+
+ at item ignore-init-file
+ at samp{-f} in Oleo.
+
+ at item ignore-interrupts
+ at samp{-i} in @code{tee}.
+
+ at item ignore-matching-lines
+ at samp{-I} in @code{diff}.
+
+ at item ignore-space-change
+ at samp{-b} in @code{diff}.
+
+ at item ignore-zeros
+ at samp{-i} in @code{tar}.
+
+ at item include
+ at samp{-i} in @code{etags};
+ at samp{-I} in @code{m4}.
+
+ at item include-dir
+ at samp{-I} in @code{make}.
+
+ at item incremental
+ at samp{-G} in @code{tar}.
+
+ at item info
+ at samp{-i}, @samp{-l}, and @samp{-m} in Finger.
+
+ at item init-file
+In some programs, specify the name of the file to read as the user's
+init file.
+
+ at item initial
+ at samp{-i} in @code{expand}.
+
+ at item initial-tab
+ at samp{-T} in @code{diff}.
+
+ at item inode
+ at samp{-i} in @code{ls}.
+
+ at item interactive
+ at samp{-i} in @code{cp}, @code{ln}, @code{mv}, @code{rm};
+ at samp{-e} in @code{m4};
+ at samp{-p} in @code{xargs};
+ at samp{-w} in @code{tar}.
+
+ at item intermix-type
+ at samp{-p} in @code{shar}.
+
+ at item iso-8601
+Used in @code{date}
+
+ at item jobs
+ at samp{-j} in @code{make}.
+
+ at item just-print
+ at samp{-n} in @code{make}.
+
+ at item keep-going
+ at samp{-k} in @code{make}.
+
+ at item keep-files
+ at samp{-k} in @code{csplit}.
+
+ at item kilobytes
+ at samp{-k} in @code{du} and @code{ls}.
+
+ at item language
+ at samp{-l} in @code{etags}.
+
+ at item less-mode
+ at samp{-l} in @code{wdiff}.
+
+ at item level-for-gzip
+ at samp{-g} in @code{shar}.
+
+ at item line-bytes
+ at samp{-C} in @code{split}.
+
+ at item lines
+Used in @code{split}, @code{head}, and @code{tail}.
+
+ at item link
+ at samp{-l} in @code{cpio}.
+
+ at item lint
+ at itemx lint-old
+Used in @code{gawk}.
+
+ at item list
+ at samp{-t} in @code{cpio};
+ at samp{-l} in @code{recode}.
+
+ at item list
+ at samp{-t} in @code{tar}.
+
+ at item literal
+ at samp{-N} in @code{ls}.
+
+ at item load-average
+ at samp{-l} in @code{make}.
+
+ at item login
+Used in @code{su}.
+
+ at item machine
+Used in @code{uname}.
+
+ at item macro-name
+ at samp{-M} in @code{ptx}.
+
+ at item mail
+ at samp{-m} in @code{hello} and @code{uname}.
+
+ at item make-directories
+ at samp{-d} in @code{cpio}.
+
+ at item makefile
+ at samp{-f} in @code{make}.
+
+ at item mapped
+Used in GDB.
+
+ at item max-args
+ at samp{-n} in @code{xargs}.
+
+ at item max-chars
+ at samp{-n} in @code{xargs}.
+
+ at item max-lines
+ at samp{-l} in @code{xargs}.
+
+ at item max-load
+ at samp{-l} in @code{make}.
+
+ at item max-procs
+ at samp{-P} in @code{xargs}.
+
+ at item mesg
+ at samp{-T} in @code{who}.
+
+ at item message
+ at samp{-T} in @code{who}.
+
+ at item minimal
+ at samp{-d} in @code{diff}.
+
+ at item mixed-uuencode
+ at samp{-M} in @code{shar}.
+
+ at item mode
+ at samp{-m} in @code{install}, @code{mkdir}, and @code{mkfifo}.
+
+ at item modification-time
+ at samp{-m} in @code{tar}.
+
+ at item multi-volume
+ at samp{-M} in @code{tar}.
+
+ at item name-prefix
+ at samp{-a} in Bison.
+
+ at item nesting-limit
+ at samp{-L} in @code{m4}.
+
+ at item net-headers
+ at samp{-a} in @code{shar}.
+
+ at item new-file
+ at samp{-W} in @code{make}.
+
+ at item no-builtin-rules
+ at samp{-r} in @code{make}.
+
+ at item no-character-count
+ at samp{-w} in @code{shar}.
+
+ at item no-check-existing
+ at samp{-x} in @code{shar}.
+
+ at item no-common
+ at samp{-3} in @code{wdiff}.
+
+ at item no-create
+ at samp{-c} in @code{touch}.
+
+ at item no-defines
+ at samp{-D} in @code{etags}.
+
+ at item no-deleted
+ at samp{-1} in @code{wdiff}.
+
+ at item no-dereference
+ at samp{-d} in @code{cp}.
+
+ at item no-inserted
+ at samp{-2} in @code{wdiff}.
+
+ at item no-keep-going
+ at samp{-S} in @code{make}.
+
+ at item no-lines
+ at samp{-l} in Bison.
+
+ at item no-piping
+ at samp{-P} in @code{shar}.
+
+ at item no-prof
+ at samp{-e} in @code{gprof}.
+
+ at item no-regex
+ at samp{-R} in @code{etags}.
+
+ at item no-sort
+ at samp{-p} in @code{nm}.
+
+ at item no-splash
+Don't print a startup splash screen.
+
+ at item no-split
+Used in @code{makeinfo}.
+
+ at item no-static
+ at samp{-a} in @code{gprof}.
+
+ at item no-time
+ at samp{-E} in @code{gprof}.
+
+ at item no-timestamp
+ at samp{-m} in @code{shar}.
+
+ at item no-validate
+Used in @code{makeinfo}.
+
+ at item no-wait
+Used in @code{emacsclient}.
+
+ at item no-warn
+Used in various programs to inhibit warnings.
+
+ at item node
+ at samp{-n} in @code{info}.
+
+ at item nodename
+ at samp{-n} in @code{uname}.
+
+ at item nonmatching
+ at samp{-f} in @code{cpio}.
+
+ at item nstuff
+ at samp{-n} in @code{objdump}.
+
+ at item null
+ at samp{-0} in @code{xargs}.
+
+ at item number
+ at samp{-n} in @code{cat}.
+
+ at item number-nonblank
+ at samp{-b} in @code{cat}.
+
+ at item numeric-sort
+ at samp{-n} in @code{nm}.
+
+ at item numeric-uid-gid
+ at samp{-n} in @code{cpio} and @code{ls}.
+
+ at item nx
+Used in GDB.
+
+ at item old-archive
+ at samp{-o} in @code{tar}.
+
+ at item old-file
+ at samp{-o} in @code{make}.
+
+ at item one-file-system
+ at samp{-l} in @code{tar}, @code{cp}, and @code{du}.
+
+ at item only-file
+ at samp{-o} in @code{ptx}.
+
+ at item only-prof
+ at samp{-f} in @code{gprof}.
+
+ at item only-time
+ at samp{-F} in @code{gprof}.
+
+ at item options
+ at samp{-o} in @code{getopt}, @code{fdlist}, @code{fdmount},
+ at code{fdmountd}, and @code{fdumount}.
+
+ at item output
+In various programs, specify the output file name.
+
+ at item output-prefix
+ at samp{-o} in @code{shar}.
+
+ at item override
+ at samp{-o} in @code{rm}.
+
+ at item overwrite
+ at samp{-c} in @code{unshar}.
+
+ at item owner
+ at samp{-o} in @code{install}.
+
+ at item paginate
+ at samp{-l} in @code{diff}.
+
+ at item paragraph-indent
+Used in @code{makeinfo}.
+
+ at item parents
+ at samp{-p} in @code{mkdir} and @code{rmdir}.
+
+ at item pass-all
+ at samp{-p} in @code{ul}.
+
+ at item pass-through
+ at samp{-p} in @code{cpio}.
+
+ at item port
+ at samp{-P} in @code{finger}.
+
+ at item portability
+ at samp{-c} in @code{cpio} and @code{tar}.
+
+ at item posix
+Used in @code{gawk}.
+
+ at item prefix-builtins
+ at samp{-P} in @code{m4}.
+
+ at item prefix
+ at samp{-f} in @code{csplit}.
+
+ at item preserve
+Used in @code{tar} and @code{cp}.
+
+ at item preserve-environment
+ at samp{-p} in @code{su}.
+
+ at item preserve-modification-time
+ at samp{-m} in @code{cpio}.
+
+ at item preserve-order
+ at samp{-s} in @code{tar}.
+
+ at item preserve-permissions
+ at samp{-p} in @code{tar}.
+
+ at item print
+ at samp{-l} in @code{diff}.
+
+ at item print-chars
+ at samp{-L} in @code{cmp}.
+
+ at item print-data-base
+ at samp{-p} in @code{make}.
+
+ at item print-directory
+ at samp{-w} in @code{make}.
+
+ at item print-file-name
+ at samp{-o} in @code{nm}.
+
+ at item print-symdefs
+ at samp{-s} in @code{nm}.
+
+ at item printer
+ at samp{-p} in @code{wdiff}.
+
+ at item prompt
+ at samp{-p} in @code{ed}.
+
+ at item proxy
+Specify an HTTP proxy.
+
+ at item query-user
+ at samp{-X} in @code{shar}.
+
+ at item question
+ at samp{-q} in @code{make}.
+
+ at item quiet
+Used in many programs to inhibit the usual output.  Every
+program accepting @samp{--quiet} should accept @samp{--silent} as a
+synonym.
+
+ at item quiet-unshar
+ at samp{-Q} in @code{shar}
+
+ at item quote-name
+ at samp{-Q} in @code{ls}.
+
+ at item rcs
+ at samp{-n} in @code{diff}.
+
+ at item re-interval
+Used in @code{gawk}.
+
+ at item read-full-blocks
+ at samp{-B} in @code{tar}.
+
+ at item readnow
+Used in GDB.
+
+ at item recon
+ at samp{-n} in @code{make}.
+
+ at item record-number
+ at samp{-R} in @code{tar}.
+
+ at item recursive
+Used in @code{chgrp}, @code{chown}, @code{cp}, @code{ls}, @code{diff},
+and @code{rm}.
+
+ at item reference
+ at samp{-r} in @code{touch}.
+
+ at item references
+ at samp{-r} in @code{ptx}.
+
+ at item regex
+ at samp{-r} in @code{tac} and @code{etags}.
+
+ at item release
+ at samp{-r} in @code{uname}.
+
+ at item reload-state
+ at samp{-R} in @code{m4}.
+
+ at item relocation
+ at samp{-r} in @code{objdump}.
+
+ at item rename
+ at samp{-r} in @code{cpio}.
+
+ at item replace
+ at samp{-i} in @code{xargs}.
+
+ at item report-identical-files
+ at samp{-s} in @code{diff}.
+
+ at item reset-access-time
+ at samp{-a} in @code{cpio}.
+
+ at item reverse
+ at samp{-r} in @code{ls} and @code{nm}.
+
+ at item reversed-ed
+ at samp{-f} in @code{diff}.
+
+ at item right-side-defs
+ at samp{-R} in @code{ptx}.
+
+ at item same-order
+ at samp{-s} in @code{tar}.
+
+ at item same-permissions
+ at samp{-p} in @code{tar}.
+
+ at item save
+ at samp{-g} in @code{stty}.
+
+ at item se
+Used in GDB.
+
+ at item sentence-regexp
+ at samp{-S} in @code{ptx}.
+
+ at item separate-dirs
+ at samp{-S} in @code{du}.
+
+ at item separator
+ at samp{-s} in @code{tac}.
+
+ at item sequence
+Used by @code{recode} to chose files or pipes for sequencing passes.
+
+ at item shell
+ at samp{-s} in @code{su}.
+
+ at item show-all
+ at samp{-A} in @code{cat}.
+
+ at item show-c-function
+ at samp{-p} in @code{diff}.
+
+ at item show-ends
+ at samp{-E} in @code{cat}.
+
+ at item show-function-line
+ at samp{-F} in @code{diff}.
+
+ at item show-tabs
+ at samp{-T} in @code{cat}.
+
+ at item silent
+Used in many programs to inhibit the usual output.
+Every program accepting
+ at samp{--silent} should accept @samp{--quiet} as a synonym.
+
+ at item size
+ at samp{-s} in @code{ls}.
+
+ at item socket
+Specify a file descriptor for a network server to use for its socket,
+instead of opening and binding a new socket.  This provides a way to
+run, in a non-privileged process, a server that normally needs a
+reserved port number.
+
+ at item sort
+Used in @code{ls}.
+
+ at item source
+ at samp{-W source} in @code{gawk}.
+
+ at item sparse
+ at samp{-S} in @code{tar}.
+
+ at item speed-large-files
+ at samp{-H} in @code{diff}.
+
+ at item split-at
+ at samp{-E} in @code{unshar}.
+
+ at item split-size-limit
+ at samp{-L} in @code{shar}.
+
+ at item squeeze-blank
+ at samp{-s} in @code{cat}.
+
+ at item start-delete
+ at samp{-w} in @code{wdiff}.
+
+ at item start-insert
+ at samp{-y} in @code{wdiff}.
+
+ at item starting-file
+Used in @code{tar} and @code{diff} to specify which file within
+a directory to start processing with.
+
+ at item statistics
+ at samp{-s} in @code{wdiff}.
+
+ at item stdin-file-list
+ at samp{-S} in @code{shar}.
+
+ at item stop
+ at samp{-S} in @code{make}.
+
+ at item strict
+ at samp{-s} in @code{recode}.
+
+ at item strip
+ at samp{-s} in @code{install}.
+
+ at item strip-all
+ at samp{-s} in @code{strip}.
+
+ at item strip-debug
+ at samp{-S} in @code{strip}.
+
+ at item submitter
+ at samp{-s} in @code{shar}.
+
+ at item suffix
+ at samp{-S} in @code{cp}, @code{ln}, @code{mv}.
+
+ at item suffix-format
+ at samp{-b} in @code{csplit}.
+
+ at item sum
+ at samp{-s} in @code{gprof}.
+
+ at item summarize
+ at samp{-s} in @code{du}.
+
+ at item symbolic
+ at samp{-s} in @code{ln}.
+
+ at item symbols
+Used in GDB and @code{objdump}.
+
+ at item synclines
+ at samp{-s} in @code{m4}.
+
+ at item sysname
+ at samp{-s} in @code{uname}.
+
+ at item tabs
+ at samp{-t} in @code{expand} and @code{unexpand}.
+
+ at item tabsize
+ at samp{-T} in @code{ls}.
+
+ at item terminal
+ at samp{-T} in @code{tput} and @code{ul}.
+ at samp{-t} in @code{wdiff}.
+
+ at item text
+ at samp{-a} in @code{diff}.
+
+ at item text-files
+ at samp{-T} in @code{shar}.
+
+ at item time
+Used in @code{ls} and @code{touch}.
+
+ at item timeout
+Specify how long to wait before giving up on some operation.
+
+ at item to-stdout
+ at samp{-O} in @code{tar}.
+
+ at item total
+ at samp{-c} in @code{du}.
+
+ at item touch
+ at samp{-t} in @code{make}, @code{ranlib}, and @code{recode}.
+
+ at item trace
+ at samp{-t} in @code{m4}.
+
+ at item traditional
+ at samp{-t} in @code{hello};
+ at samp{-W traditional} in @code{gawk};
+ at samp{-G} in @code{ed}, @code{m4}, and @code{ptx}.
+
+ at item tty
+Used in GDB.
+
+ at item typedefs
+ at samp{-t} in @code{ctags}.
+
+ at item typedefs-and-c++
+ at samp{-T} in @code{ctags}.
+
+ at item typeset-mode
+ at samp{-t} in @code{ptx}.
+
+ at item uncompress
+ at samp{-z} in @code{tar}.
+
+ at item unconditional
+ at samp{-u} in @code{cpio}.
+
+ at item undefine
+ at samp{-U} in @code{m4}.
+
+ at item undefined-only
+ at samp{-u} in @code{nm}.
+
+ at item update
+ at samp{-u} in @code{cp}, @code{ctags}, @code{mv}, @code{tar}.
+
+ at item usage
+Used in @code{gawk}; same as @samp{--help}.
+
+ at item uuencode
+ at samp{-B} in @code{shar}.
+
+ at item vanilla-operation
+ at samp{-V} in @code{shar}.
+
+ at item verbose
+Print more information about progress.  Many programs support this.
+
+ at item verify
+ at samp{-W} in @code{tar}.
+
+ at item version
+Print the version number.
+
+ at item version-control
+ at samp{-V} in @code{cp}, @code{ln}, @code{mv}.
+
+ at item vgrind
+ at samp{-v} in @code{ctags}.
+
+ at item volume
+ at samp{-V} in @code{tar}.
+
+ at item what-if
+ at samp{-W} in @code{make}.
+
+ at item whole-size-limit
+ at samp{-l} in @code{shar}.
+
+ at item width
+ at samp{-w} in @code{ls} and @code{ptx}.
+
+ at item word-regexp
+ at samp{-W} in @code{ptx}.
+
+ at item writable
+ at samp{-T} in @code{who}.
+
+ at item zeros
+ at samp{-z} in @code{gprof}.
+ at end table
+
+ at node OID Allocations
+ at section OID Allocations
+ at cindex OID allocations for GNU
+ at cindex SNMP
+ at cindex LDAP
+ at cindex X.509
+
+The OID (object identifier) 1.3.6.1.4.1.11591 has been assigned to the
+GNU Project (thanks to Werner Koch).  These are used for SNMP, LDAP,
+X.509 certificates, and so on.  The web site
+ at url{http://www.alvestrand.no/objectid} has a (voluntary) listing of
+many OID assignments.
+
+If you need a new slot for your GNU package, write
+ at email{maintainers@@gnu.org}.  Here is a list of arcs currently
+assigned:
+
+ at example
+ at include gnu-oids.texi
+ at end example
+
+
+ at node Memory Usage
+ at section Memory Usage
+ at cindex memory usage
+
+If a program typically uses just a few meg of memory, don't bother making any
+effort to reduce memory usage.  For example, if it is impractical for
+other reasons to operate on files more than a few meg long, it is
+reasonable to read entire input files into memory to operate on them.
+
+However, for programs such as @code{cat} or @code{tail}, that can
+usefully operate on very large files, it is important to avoid using a
+technique that would artificially limit the size of files it can handle.
+If a program works by lines and could be applied to arbitrary
+user-supplied input files, it should keep only a line in memory, because
+this is not very hard and users will want to be able to operate on input
+files that are bigger than will fit in memory all at once.
+
+If your program creates complicated data structures, just make them in
+memory and give a fatal error if @code{malloc} returns zero.
+
+ at node File Usage
+ at section File Usage
+ at cindex file usage
+
+Programs should be prepared to operate when @file{/usr} and @file{/etc}
+are read-only file systems.  Thus, if the program manages log files,
+lock files, backup files, score files, or any other files which are
+modified for internal purposes, these files should not be stored in
+ at file{/usr} or @file{/etc}.
+
+There are two exceptions.  @file{/etc} is used to store system
+configuration information; it is reasonable for a program to modify
+files in @file{/etc} when its job is to update the system configuration.
+Also, if the user explicitly asks to modify one file in a directory, it
+is reasonable for the program to store other files in the same
+directory.
+
+ at node Writing C
+ at chapter Making The Best Use of C
+
+This chapter provides advice on how best to use the C language
+when writing GNU software.
+
+ at menu
+* Formatting::                  Formatting your source code.
+* Comments::                    Commenting your work.
+* Syntactic Conventions::       Clean use of C constructs.
+* Names::                       Naming variables, functions, and files.
+* System Portability::          Portability among different operating systems.
+* CPU Portability::             Supporting the range of CPU types.
+* System Functions::            Portability and ``standard'' library functions.
+* Internationalization::        Techniques for internationalization.
+* Character Set::               Use ASCII by default.
+* Quote Characters::            Use `...' in the C locale.
+* Mmap::                        How you can safely use @code{mmap}.
+ at end menu
+
+ at node Formatting
+ at section Formatting Your Source Code
+ at cindex formatting source code
+
+ at cindex open brace
+ at cindex braces, in C source
+It is important to put the open-brace that starts the body of a C
+function in column one, so that they will start a defun.  Several
+tools look for open-braces in column one to find the beginnings of C
+functions.  These tools will not work on code not formatted that way.
+
+Avoid putting open-brace, open-parenthesis or open-bracket in column
+one when they are inside a function, so that they won't start a defun.
+The open-brace that starts a @code{struct} body can go in column one
+if you find it useful to treat that definition as a defun.
+
+It is also important for function definitions to start the name of the
+function in column one.  This helps people to search for function
+definitions, and may also help certain tools recognize them.  Thus,
+using Standard C syntax, the format is this:
+
+ at example
+static char *
+concat (char *s1, char *s2)
+@{
+  @dots{}
+@}
+ at end example
+
+ at noindent
+or, if you want to use traditional C syntax, format the definition like
+this:
+
+ at example
+static char *
+concat (s1, s2)        /* Name starts in column one here */
+     char *s1, *s2;
+@{                     /* Open brace in column one here */
+  @dots{}
+@}
+ at end example
+
+In Standard C, if the arguments don't fit nicely on one line,
+split it like this:
+
+ at example
+int
+lots_of_args (int an_integer, long a_long, short a_short,
+              double a_double, float a_float)
+ at dots{}
+ at end example
+
+The rest of this section gives our recommendations for other aspects of
+C formatting style, which is also the default style of the @code{indent}
+program in version 1.2 and newer.  It corresponds to the options
+
+ at smallexample
+-nbad -bap -nbc -bbo -bl -bli2 -bls -ncdb -nce -cp1 -cs -di2
+-ndj -nfc1 -nfca -hnl -i2 -ip5 -lp -pcs -psl -nsc -nsob
+ at end smallexample
+
+We don't think of these recommendations as requirements, because it
+causes no problems for users if two different programs have different
+formatting styles.
+
+But whatever style you use, please use it consistently, since a mixture
+of styles within one program tends to look ugly.  If you are
+contributing changes to an existing program, please follow the style of
+that program.
+
+For the body of the function, our recommended style looks like this:
+
+ at example
+if (x < foo (y, z))
+  haha = bar[4] + 5;
+else
+  @{
+    while (z)
+      @{
+        haha += foo (z, z);
+        z--;
+      @}
+    return ++x + bar ();
+  @}
+ at end example
+
+ at cindex spaces before open-paren
+We find it easier to read a program when it has spaces before the
+open-parentheses and after the commas.  Especially after the commas.
+
+When you split an expression into multiple lines, split it
+before an operator, not after one.  Here is the right way:
+
+ at cindex expressions, splitting
+ at example
+if (foo_this_is_long && bar > win (x, y, z)
+    && remaining_condition)
+ at end example
+
+Try to avoid having two operators of different precedence at the same
+level of indentation.  For example, don't write this:
+
+ at example
+mode = (inmode[j] == VOIDmode
+        || GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j])
+        ? outmode[j] : inmode[j]);
+ at end example
+
+Instead, use extra parentheses so that the indentation shows the nesting:
+
+ at example
+mode = ((inmode[j] == VOIDmode
+         || (GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j])))
+        ? outmode[j] : inmode[j]);
+ at end example
+
+Insert extra parentheses so that Emacs will indent the code properly.
+For example, the following indentation looks nice if you do it by hand,
+
+ at example
+v = rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000
+    + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000;
+ at end example
+
+ at noindent
+but Emacs would alter it.  Adding a set of parentheses produces
+something that looks equally nice, and which Emacs will preserve:
+
+ at example
+v = (rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000
+     + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000);
+ at end example
+
+Format do-while statements like this:
+
+ at example
+do
+  @{
+    a = foo (a);
+  @}
+while (a > 0);
+ at end example
+
+ at cindex formfeed
+ at cindex control-L
+Please use formfeed characters (control-L) to divide the program into
+pages at logical places (but not within a function).  It does not matter
+just how long the pages are, since they do not have to fit on a printed
+page.  The formfeeds should appear alone on lines by themselves.
+
+ at node Comments
+ at section Commenting Your Work
+ at cindex commenting
+
+Every program should start with a comment saying briefly what it is for.
+Example: @samp{fmt - filter for simple filling of text}.  This comment
+should be at the top of the source file containing the @samp{main}
+function of the program.
+
+Also, please write a brief comment at the start of each source file,
+with the file name and a line or two about the overall purpose of the
+file.
+
+Please write the comments in a GNU program in English, because English
+is the one language that nearly all programmers in all countries can
+read.  If you do not write English well, please write comments in
+English as well as you can, then ask other people to help rewrite them.
+If you can't write comments in English, please find someone to work with
+you and translate your comments into English.
+
+Please put a comment on each function saying what the function does,
+what sorts of arguments it gets, and what the possible values of
+arguments mean and are used for.  It is not necessary to duplicate in
+words the meaning of the C argument declarations, if a C type is being
+used in its customary fashion.  If there is anything nonstandard about
+its use (such as an argument of type @code{char *} which is really the
+address of the second character of a string, not the first), or any
+possible values that would not work the way one would expect (such as,
+that strings containing newlines are not guaranteed to work), be sure
+to say so.
+
+Also explain the significance of the return value, if there is one.
+
+Please put two spaces after the end of a sentence in your comments, so
+that the Emacs sentence commands will work.  Also, please write
+complete sentences and capitalize the first word.  If a lower-case
+identifier comes at the beginning of a sentence, don't capitalize it!
+Changing the spelling makes it a different identifier.  If you don't
+like starting a sentence with a lower case letter, write the sentence
+differently (e.g., ``The identifier lower-case is @dots{}'').
+
+The comment on a function is much clearer if you use the argument
+names to speak about the argument values.  The variable name itself
+should be lower case, but write it in upper case when you are speaking
+about the value rather than the variable itself.  Thus, ``the inode
+number NODE_NUM'' rather than ``an inode''.
+
+There is usually no purpose in restating the name of the function in
+the comment before it, because the reader can see that for himself.
+There might be an exception when the comment is so long that the function
+itself would be off the bottom of the screen.
+
+There should be a comment on each static variable as well, like this:
+
+ at example
+/* Nonzero means truncate lines in the display;
+   zero means continue them.  */
+int truncate_lines;
+ at end example
+
+ at cindex conditionals, comments for
+ at cindex @code{#endif}, commenting
+Every @samp{#endif} should have a comment, except in the case of short
+conditionals (just a few lines) that are not nested.  The comment should
+state the condition of the conditional that is ending, @emph{including
+its sense}.  @samp{#else} should have a comment describing the condition
+ at emph{and sense} of the code that follows.  For example:
+
+ at example
+ at group
+#ifdef foo
+  @dots{}
+#else /* not foo */
+  @dots{}
+#endif /* not foo */
+ at end group
+ at group
+#ifdef foo
+  @dots{}
+#endif /* foo */
+ at end group
+ at end example
+
+ at noindent
+but, by contrast, write the comments this way for a @samp{#ifndef}:
+
+ at example
+ at group
+#ifndef foo
+  @dots{}
+#else /* foo */
+  @dots{}
+#endif /* foo */
+ at end group
+ at group
+#ifndef foo
+  @dots{}
+#endif /* not foo */
+ at end group
+ at end example
+
+ at node Syntactic Conventions
+ at section Clean Use of C Constructs
+ at cindex syntactic conventions
+
+ at cindex implicit @code{int}
+ at cindex function argument, declaring
+Please explicitly declare the types of all objects.  For example, you
+should explicitly declare all arguments to functions, and you should
+declare functions to return @code{int} rather than omitting the
+ at code{int}.
+
+ at cindex compiler warnings
+ at cindex @samp{-Wall} compiler option
+Some programmers like to use the GCC @samp{-Wall} option, and change the
+code whenever it issues a warning.  If you want to do this, then do.
+Other programmers prefer not to use @samp{-Wall}, because it gives
+warnings for valid and legitimate code which they do not want to change.
+If you want to do this, then do.  The compiler should be your servant,
+not your master.
+
+Declarations of external functions and functions to appear later in the
+source file should all go in one place near the beginning of the file
+(somewhere before the first function definition in the file), or else
+should go in a header file.  Don't put @code{extern} declarations inside
+functions.
+
+ at cindex temporary variables
+It used to be common practice to use the same local variables (with
+names like @code{tem}) over and over for different values within one
+function.  Instead of doing this, it is better to declare a separate local
+variable for each distinct purpose, and give it a name which is
+meaningful.  This not only makes programs easier to understand, it also
+facilitates optimization by good compilers.  You can also move the
+declaration of each local variable into the smallest scope that includes
+all its uses.  This makes the program even cleaner.
+
+Don't use local variables or parameters that shadow global identifiers.
+
+ at cindex multiple variables in a line
+Don't declare multiple variables in one declaration that spans lines.
+Start a new declaration on each line, instead.  For example, instead
+of this:
+
+ at example
+ at group
+int    foo,
+       bar;
+ at end group
+ at end example
+
+ at noindent
+write either this:
+
+ at example
+int foo, bar;
+ at end example
+
+ at noindent
+or this:
+
+ at example
+int foo;
+int bar;
+ at end example
+
+ at noindent
+(If they are global variables, each should have a comment preceding it
+anyway.)
+
+When you have an @code{if}- at code{else} statement nested in another
+ at code{if} statement, always put braces around the @code{if}- at code{else}.
+Thus, never write like this:
+
+ at example
+if (foo)
+  if (bar)
+    win ();
+  else
+    lose ();
+ at end example
+
+ at noindent
+always like this:
+
+ at example
+if (foo)
+  @{
+    if (bar)
+      win ();
+    else
+      lose ();
+  @}
+ at end example
+
+If you have an @code{if} statement nested inside of an @code{else}
+statement, either write @code{else if} on one line, like this,
+
+ at example
+if (foo)
+  @dots{}
+else if (bar)
+  @dots{}
+ at end example
+
+ at noindent
+with its @code{then}-part indented like the preceding @code{then}-part,
+or write the nested @code{if} within braces like this:
+
+ at example
+if (foo)
+  @dots{}
+else
+  @{
+    if (bar)
+      @dots{}
+  @}
+ at end example
+
+Don't declare both a structure tag and variables or typedefs in the
+same declaration.  Instead, declare the structure tag separately
+and then use it to declare the variables or typedefs.
+
+Try to avoid assignments inside @code{if}-conditions (assignments
+inside @code{while}-conditions are ok).  For example, don't write
+this:
+
+ at example
+if ((foo = (char *) malloc (sizeof *foo)) == 0)
+  fatal ("virtual memory exhausted");
+ at end example
+
+ at noindent
+instead, write this:
+
+ at example
+foo = (char *) malloc (sizeof *foo);
+if (foo == 0)
+  fatal ("virtual memory exhausted");
+ at end example
+
+ at pindex lint
+Don't make the program ugly to placate @code{lint}.  Please don't insert any
+casts to @code{void}.  Zero without a cast is perfectly fine as a null
+pointer constant, except when calling a varargs function.
+
+ at node Names
+ at section Naming Variables, Functions, and Files
+
+ at cindex names of variables, functions, and files
+The names of global variables and functions in a program serve as
+comments of a sort.  So don't choose terse names---instead, look for
+names that give useful information about the meaning of the variable or
+function.  In a GNU program, names should be English, like other
+comments.
+
+Local variable names can be shorter, because they are used only within
+one context, where (presumably) comments explain their purpose.
+
+Try to limit your use of abbreviations in symbol names.  It is ok to
+make a few abbreviations, explain what they mean, and then use them
+frequently, but don't use lots of obscure abbreviations.
+
+Please use underscores to separate words in a name, so that the Emacs
+word commands can be useful within them.  Stick to lower case; reserve
+upper case for macros and @code{enum} constants, and for name-prefixes
+that follow a uniform convention.
+
+For example, you should use names like @code{ignore_space_change_flag};
+don't use names like @code{iCantReadThis}.
+
+Variables that indicate whether command-line options have been
+specified should be named after the meaning of the option, not after
+the option-letter.  A comment should state both the exact meaning of
+the option and its letter.  For example,
+
+ at example
+ at group
+/* Ignore changes in horizontal whitespace (-b).  */
+int ignore_space_change_flag;
+ at end group
+ at end example
+
+When you want to define names with constant integer values, use
+ at code{enum} rather than @samp{#define}.  GDB knows about enumeration
+constants.
+
+ at cindex file-name limitations
+ at pindex doschk
+You might want to make sure that none of the file names would conflict
+if the files were loaded onto an MS-DOS file system which shortens the
+names.  You can use the program @code{doschk} to test for this.
+
+Some GNU programs were designed to limit themselves to file names of 14
+characters or less, to avoid file name conflicts if they are read into
+older System V systems.  Please preserve this feature in the existing
+GNU programs that have it, but there is no need to do this in new GNU
+programs.  @code{doschk} also reports file names longer than 14
+characters.
+
+ at node System Portability
+ at section Portability between System Types
+ at cindex portability, between system types
+
+In the Unix world, ``portability'' refers to porting to different Unix
+versions.  For a GNU program, this kind of portability is desirable, but
+not paramount.
+
+The primary purpose of GNU software is to run on top of the GNU kernel,
+compiled with the GNU C compiler, on various types of @sc{cpu}.  So the
+kinds of portability that are absolutely necessary are quite limited.
+But it is important to support Linux-based GNU systems, since they
+are the form of GNU that is popular.
+
+Beyond that, it is good to support the other free operating systems
+(*BSD), and it is nice to support other Unix-like systems if you want
+to.  Supporting a variety of Unix-like systems is desirable, although
+not paramount.  It is usually not too hard, so you may as well do it.
+But you don't have to consider it an obligation, if it does turn out to
+be hard.
+
+ at pindex autoconf
+The easiest way to achieve portability to most Unix-like systems is to
+use Autoconf.  It's unlikely that your program needs to know more
+information about the host platform than Autoconf can provide, simply
+because most of the programs that need such knowledge have already been
+written.
+
+Avoid using the format of semi-internal data bases (e.g., directories)
+when there is a higher-level alternative (@code{readdir}).
+
+ at cindex non- at sc{posix} systems, and portability
+As for systems that are not like Unix, such as MSDOS, Windows, VMS, MVS,
+and older Macintosh systems, supporting them is often a lot of work.
+When that is the case, it is better to spend your time adding features
+that will be useful on GNU and GNU/Linux, rather than on supporting
+other incompatible systems.
+
+If you do support Windows, please do not abbreviate it as ``win''.  In
+hacker terminology, calling something a ``win'' is a form of praise.
+You're free to praise Microsoft Windows on your own if you want, but
+please don't do this in GNU packages.  Instead of abbreviating
+``Windows'' to ``win'', you can write it in full or abbreviate it to
+``woe'' or ``w''.  In GNU Emacs, for instance, we use @samp{w32} in
+file names of Windows-specific files, but the macro for Windows
+conditionals is called @code{WINDOWSNT}.
+
+It is a good idea to define the ``feature test macro''
+ at code{_GNU_SOURCE} when compiling your C files.  When you compile on GNU
+or GNU/Linux, this will enable the declarations of GNU library extension
+functions, and that will usually give you a compiler error message if
+you define the same function names in some other way in your program.
+(You don't have to actually @emph{use} these functions, if you prefer
+to make the program more portable to other systems.)
+
+But whether or not you use these GNU extensions, you should avoid
+using their names for any other meanings.  Doing so would make it hard
+to move your code into other GNU programs.
+
+ at node CPU Portability
+ at section Portability between @sc{cpu}s
+
+ at cindex data types, and portability
+ at cindex portability, and data types
+Even GNU systems will differ because of differences among @sc{cpu}
+types---for example, difference in byte ordering and alignment
+requirements.  It is absolutely essential to handle these differences.
+However, don't make any effort to cater to the possibility that an
+ at code{int} will be less than 32 bits.  We don't support 16-bit machines
+in GNU.
+
+Similarly, don't make any effort to cater to the possibility that
+ at code{long} will be smaller than predefined types like @code{size_t}.
+For example, the following code is ok:
+
+ at example
+printf ("size = %lu\n", (unsigned long) sizeof array);
+printf ("diff = %ld\n", (long) (pointer2 - pointer1));
+ at end example
+
+1989 Standard C requires this to work, and we know of only one
+counterexample: 64-bit programs on Microsoft Windows.  We will
+leave it to those who want to port GNU programs to that environment
+to figure out how to do it.
+
+Predefined file-size types like @code{off_t} are an exception: they are
+longer than @code{long} on many platforms, so code like the above won't
+work with them.  One way to print an @code{off_t} value portably is to
+print its digits yourself, one by one.
+
+Don't assume that the address of an @code{int} object is also the
+address of its least-significant byte.  This is false on big-endian
+machines.  Thus, don't make the following mistake:
+
+ at example
+int c;
+ at dots{}
+while ((c = getchar ()) != EOF)
+  write (file_descriptor, &c, 1);
+ at end example
+
+ at noindent Instead, use @code{unsigned char} as follows.  (The @code{unsigned}
+is for portability to unusual systems where @code{char} is signed and
+where there is integer overflow checking.)
+
+ at example
+int c;
+while ((c = getchar ()) != EOF)
+  @{
+    unsigned char u = c;
+    write (file_descriptor, &u, 1);
+  @}
+ at end example
+
+It used to be ok to not worry about the difference between pointers
+and integers when passing arguments to functions.  However, on most
+modern 64-bit machines pointers are wider than @code{int}.
+Conversely, integer types like @code{long long int} and @code{off_t}
+are wider than pointers on most modern 32-bit machines.  Hence it's
+often better nowadays to use prototypes to define functions whose
+argument types are not trivial.
+
+In particular, if functions accept varying argument counts or types
+they should be declared using prototypes containing @samp{...} and
+defined using @file{stdarg.h}.  For an example of this, please see the
+ at uref{http://www.gnu.org/software/gnulib/, Gnulib} error module, which
+declares and defines the following function:
+
+ at example
+/* Print a message with `fprintf (stderr, FORMAT, ...)';
+   if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
+   If STATUS is nonzero, terminate the program with `exit (STATUS)'.  */
+
+void error (int status, int errnum, const char *format, ...);
+ at end example
+
+A simple way to use the Gnulib error module is to obtain the two
+source files @file{error.c} and @file{error.h} from the Gnulib library
+source code repository at
+ at uref{http://git.savannah.gnu.org/@/gitweb/@/?p=gnulib.git}.
+Here's a sample use:
+
+ at example
+#include "error.h"
+#include <errno.h>
+#include <stdio.h>
+
+char *program_name = "myprogram";
+
+FILE *
+xfopen (char const *name)
+@{
+  FILE *fp = fopen (name, "r");
+  if (! fp)
+    error (1, errno, "cannot read %s", name);
+  return fp;
+@}
+ at end example
+
+ at cindex casting pointers to integers
+Avoid casting pointers to integers if you can.  Such casts greatly
+reduce portability, and in most programs they are easy to avoid.  In the
+cases where casting pointers to integers is essential---such as, a Lisp
+interpreter which stores type information as well as an address in one
+word---you'll have to make explicit provisions to handle different word
+sizes.  You will also need to make provision for systems in which the
+normal range of addresses you can get from @code{malloc} starts far away
+from zero.
+
+ at node System Functions
+ at section Calling System Functions
+ at cindex library functions, and portability
+ at cindex portability, and library functions
+
+C implementations differ substantially.  Standard C reduces but does
+not eliminate the incompatibilities; meanwhile, many GNU packages still
+support pre-standard compilers because this is not hard to do.  This
+chapter gives recommendations for how to use the more-or-less standard C
+library functions to avoid unnecessary loss of portability.
+
+ at itemize @bullet
+ at item
+Don't use the return value of @code{sprintf}.  It returns the number of
+characters written on some systems, but not on all systems.
+
+ at item
+Be aware that @code{vfprintf} is not always available.
+
+ at item
+ at code{main} should be declared to return type @code{int}.  It should
+terminate either by calling @code{exit} or by returning the integer
+status code; make sure it cannot ever return an undefined value.
+
+ at cindex declaration for system functions
+ at item
+Don't declare system functions explicitly.
+
+Almost any declaration for a system function is wrong on some system.
+To minimize conflicts, leave it to the system header files to declare
+system functions.  If the headers don't declare a function, let it
+remain undeclared.
+
+While it may seem unclean to use a function without declaring it, in
+practice this works fine for most system library functions on the
+systems where this really happens; thus, the disadvantage is only
+theoretical.  By contrast, actual declarations have frequently caused
+actual conflicts.
+
+ at item
+If you must declare a system function, don't specify the argument types.
+Use an old-style declaration, not a Standard C prototype.  The more you
+specify about the function, the more likely a conflict.
+
+ at item
+In particular, don't unconditionally declare @code{malloc} or
+ at code{realloc}.
+
+Most GNU programs use those functions just once, in functions
+conventionally named @code{xmalloc} and @code{xrealloc}.  These
+functions call @code{malloc} and @code{realloc}, respectively, and
+check the results.
+
+Because @code{xmalloc} and @code{xrealloc} are defined in your program,
+you can declare them in other files without any risk of type conflict.
+
+On most systems, @code{int} is the same length as a pointer; thus, the
+calls to @code{malloc} and @code{realloc} work fine.  For the few
+exceptional systems (mostly 64-bit machines), you can use
+ at strong{conditionalized} declarations of @code{malloc} and
+ at code{realloc}---or put these declarations in configuration files
+specific to those systems.
+
+ at cindex string library functions
+ at item
+The string functions require special treatment.  Some Unix systems have
+a header file @file{string.h}; others have @file{strings.h}.  Neither
+file name is portable.  There are two things you can do: use Autoconf to
+figure out which file to include, or don't include either file.
+
+ at item
+If you don't include either strings file, you can't get declarations for
+the string functions from the header file in the usual way.
+
+That causes less of a problem than you might think.  The newer standard
+string functions should be avoided anyway because many systems still
+don't support them.  The string functions you can use are these:
+
+ at example
+strcpy   strncpy   strcat   strncat
+strlen   strcmp    strncmp
+strchr   strrchr
+ at end example
+
+The copy and concatenate functions work fine without a declaration as
+long as you don't use their values.  Using their values without a
+declaration fails on systems where the width of a pointer differs from
+the width of @code{int}, and perhaps in other cases.  It is trivial to
+avoid using their values, so do that.
+
+The compare functions and @code{strlen} work fine without a declaration
+on most systems, possibly all the ones that GNU software runs on.
+You may find it necessary to declare them @strong{conditionally} on a
+few systems.
+
+The search functions must be declared to return @code{char *}.  Luckily,
+there is no variation in the data type they return.  But there is
+variation in their names.  Some systems give these functions the names
+ at code{index} and @code{rindex}; other systems use the names
+ at code{strchr} and @code{strrchr}.  Some systems support both pairs of
+names, but neither pair works on all systems.
+
+You should pick a single pair of names and use it throughout your
+program.  (Nowadays, it is better to choose @code{strchr} and
+ at code{strrchr} for new programs, since those are the standard
+names.)  Declare both of those names as functions returning @code{char
+*}.  On systems which don't support those names, define them as macros
+in terms of the other pair.  For example, here is what to put at the
+beginning of your file (or in a header) if you want to use the names
+ at code{strchr} and @code{strrchr} throughout:
+
+ at example
+#ifndef HAVE_STRCHR
+#define strchr index
+#endif
+#ifndef HAVE_STRRCHR
+#define strrchr rindex
+#endif
+
+char *strchr ();
+char *strrchr ();
+ at end example
+ at end itemize
+
+Here we assume that @code{HAVE_STRCHR} and @code{HAVE_STRRCHR} are
+macros defined in systems where the corresponding functions exist.
+One way to get them properly defined is to use Autoconf.
+
+ at node Internationalization
+ at section Internationalization
+ at cindex internationalization
+
+ at pindex gettext
+GNU has a library called GNU gettext that makes it easy to translate the
+messages in a program into various languages.  You should use this
+library in every program.  Use English for the messages as they appear
+in the program, and let gettext provide the way to translate them into
+other languages.
+
+Using GNU gettext involves putting a call to the @code{gettext} macro
+around each string that might need translation---like this:
+
+ at example
+printf (gettext ("Processing file `%s'..."));
+ at end example
+
+ at noindent
+This permits GNU gettext to replace the string @code{"Processing file
+`%s'..."} with a translated version.
+
+Once a program uses gettext, please make a point of writing calls to
+ at code{gettext} when you add new strings that call for translation.
+
+Using GNU gettext in a package involves specifying a @dfn{text domain
+name} for the package.  The text domain name is used to separate the
+translations for this package from the translations for other packages.
+Normally, the text domain name should be the same as the name of the
+package---for example, @samp{coreutils} for the GNU core utilities.
+
+ at cindex message text, and internationalization
+To enable gettext to work well, avoid writing code that makes
+assumptions about the structure of words or sentences.  When you want
+the precise text of a sentence to vary depending on the data, use two or
+more alternative string constants each containing a complete sentences,
+rather than inserting conditionalized words or phrases into a single
+sentence framework.
+
+Here is an example of what not to do:
+
+ at smallexample
+printf ("%s is full", capacity > 5000000 ? "disk" : "floppy disk");
+ at end smallexample
+
+If you apply gettext to all strings, like this,
+
+ at smallexample
+printf (gettext ("%s is full"),
+        capacity > 5000000 ? gettext ("disk") : gettext ("floppy disk"));
+ at end smallexample
+
+ at noindent
+the translator will hardly know that "disk" and "floppy disk" are meant to
+be substituted in the other string.  Worse, in some languages (like French)
+the construction will not work: the translation of the word "full" depends
+on the gender of the first part of the sentence; it happens to be not the
+same for "disk" as for "floppy disk".
+
+Complete sentences can be translated without problems:
+
+ at example
+printf (capacity > 5000000 ? gettext ("disk is full")
+        : gettext ("floppy disk is full"));
+ at end example
+
+A similar problem appears at the level of sentence structure with this
+code:
+
+ at example
+printf ("#  Implicit rule search has%s been done.\n",
+        f->tried_implicit ? "" : " not");
+ at end example
+
+ at noindent
+Adding @code{gettext} calls to this code cannot give correct results for
+all languages, because negation in some languages requires adding words
+at more than one place in the sentence.  By contrast, adding
+ at code{gettext} calls does the job straightforwardly if the code starts
+out like this:
+
+ at example
+printf (f->tried_implicit
+        ? "#  Implicit rule search has been done.\n",
+        : "#  Implicit rule search has not been done.\n");
+ at end example
+
+Another example is this one:
+
+ at example
+printf ("%d file%s processed", nfiles,
+        nfiles != 1 ? "s" : "");
+ at end example
+
+ at noindent
+The problem with this example is that it assumes that plurals are made
+by adding `s'.  If you apply gettext to the format string, like this,
+
+ at example
+printf (gettext ("%d file%s processed"), nfiles,
+        nfiles != 1 ? "s" : "");
+ at end example
+
+ at noindent
+the message can use different words, but it will still be forced to use
+`s' for the plural.  Here is a better way, with gettext being applied to
+the two strings independently:
+
+ at example
+printf ((nfiles != 1 ? gettext ("%d files processed")
+         : gettext ("%d file processed")),
+        nfiles);
+ at end example
+
+ at noindent
+But this still doesn't work for languages like Polish, which has three
+plural forms: one for nfiles == 1, one for nfiles == 2, 3, 4, 22, 23, 24, ...
+and one for the rest.  The GNU @code{ngettext} function solves this problem:
+
+ at example
+printf (ngettext ("%d files processed", "%d file processed", nfiles),
+        nfiles);
+ at end example
+
+
+ at node Character Set
+ at section Character Set
+ at cindex character set
+ at cindex encodings
+ at cindex ASCII characters
+ at cindex non-ASCII characters
+
+Sticking to the ASCII character set (plain text, 7-bit characters) is
+preferred in GNU source code comments, text documents, and other
+contexts, unless there is good reason to do something else because of
+the application domain.  For example, if source code deals with the
+French Revolutionary calendar, it is OK if its literal strings contain
+accented characters in month names like ``Flor@'eal''.  Also, it is OK
+to use non-ASCII characters to represent proper names of contributors in
+change logs (@pxref{Change Logs}).
+
+If you need to use non-ASCII characters, you should normally stick with
+one encoding, as one cannot in general mix encodings reliably.
+
+
+ at node Quote Characters
+ at section Quote Characters
+ at cindex quote characters
+ at cindex locale-specific quote characters
+ at cindex left quote
+ at cindex grave accent
+
+In the C locale, GNU programs should stick to plain ASCII for quotation
+characters in messages to users: preferably 0x60 (@samp{`}) for left
+quotes and 0x27 (@samp{'}) for right quotes.  It is ok, but not
+required, to use locale-specific quotes in other locales.
+
+The @uref{http://www.gnu.org/software/gnulib/, Gnulib} @code{quote} and
+ at code{quotearg} modules provide a reasonably straightforward way to
+support locale-specific quote characters, as well as taking care of
+other issues, such as quoting a filename that itself contains a quote
+character.  See the Gnulib documentation for usage details.
+
+In any case, the documentation for your program should clearly specify
+how it does quoting, if different than the preferred method of @samp{`}
+and @samp{'}.  This is especially important if the output of your
+program is ever likely to be parsed by another program.
+
+Quotation characters are a difficult area in the computing world at
+this time: there are no true left or right quote characters in Latin1;
+the @samp{`} character we use was standardized there as a grave
+accent.  Moreover, Latin1 is still not universally usable.
+
+Unicode contains the unambiguous quote characters required, and its
+common encoding UTF-8 is upward compatible with Latin1.  However,
+Unicode and UTF-8 are not universally well-supported, either.
+
+This may change over the next few years, and then we will revisit
+this.
+
+
+ at node Mmap
+ at section Mmap
+ at findex mmap
+
+Don't assume that @code{mmap} either works on all files or fails
+for all files.  It may work on some files and fail on others.
+
+The proper way to use @code{mmap} is to try it on the specific file for
+which you want to use it---and if @code{mmap} doesn't work, fall back on
+doing the job in another way using @code{read} and @code{write}.
+
+The reason this precaution is needed is that the GNU kernel (the HURD)
+provides a user-extensible file system, in which there can be many
+different kinds of ``ordinary files.''  Many of them support
+ at code{mmap}, but some do not.  It is important to make programs handle
+all these kinds of files.
+
+ at node Documentation
+ at chapter Documenting Programs
+ at cindex documentation
+
+A GNU program should ideally come with full free documentation, adequate
+for both reference and tutorial purposes.  If the package can be
+programmed or extended, the documentation should cover programming or
+extending it, as well as just using it.
+
+ at menu
+* GNU Manuals::                 Writing proper manuals.
+* Doc Strings and Manuals::     Compiling doc strings doesn't make a manual.
+* Manual Structure Details::    Specific structure conventions.
+* License for Manuals::         Writing the distribution terms for a manual.
+* Manual Credits::              Giving credit to documentation contributors.
+* Printed Manuals::             Mentioning the printed manual.
+* NEWS File::                   NEWS files supplement manuals.
+* Change Logs::                 Recording changes.
+* Man Pages::                   Man pages are secondary.
+* Reading other Manuals::       How far you can go in learning
+                                from other manuals.
+ at end menu
+
+ at node GNU Manuals
+ at section GNU Manuals
+
+The preferred document format for the GNU system is the Texinfo
+formatting language.  Every GNU package should (ideally) have
+documentation in Texinfo both for reference and for learners.  Texinfo
+makes it possible to produce a good quality formatted book, using
+ at TeX{}, and to generate an Info file.  It is also possible to generate
+HTML output from Texinfo source.  See the Texinfo manual, either the
+hardcopy, or the on-line version available through @code{info} or the
+Emacs Info subsystem (@kbd{C-h i}).
+
+Nowadays some other formats such as Docbook and Sgmltexi can be
+converted automatically into Texinfo.  It is ok to produce the Texinfo
+documentation by conversion this way, as long as it gives good results.
+
+Make sure your manual is clear to a reader who knows nothing about the
+topic and reads it straight through.  This means covering basic topics
+at the beginning, and advanced topics only later.  This also means
+defining every specialized term when it is first used.
+
+Programmers tend to carry over the structure of the program as the
+structure for its documentation.  But this structure is not
+necessarily good for explaining how to use the program; it may be
+irrelevant and confusing for a user.
+
+Instead, the right way to structure documentation is according to the
+concepts and questions that a user will have in mind when reading it.
+This principle applies at every level, from the lowest (ordering
+sentences in a paragraph) to the highest (ordering of chapter topics
+within the manual).  Sometimes this structure of ideas matches the
+structure of the implementation of the software being documented---but
+often they are different.  An important part of learning to write good
+documentation is to learn to notice when you have unthinkingly
+structured the documentation like the implementation, stop yourself,
+and look for better alternatives.
+
+For example, each program in the GNU system probably ought to be
+documented in one manual; but this does not mean each program should
+have its own manual.  That would be following the structure of the
+implementation, rather than the structure that helps the user
+understand.
+
+Instead, each manual should cover a coherent @emph{topic}.  For example,
+instead of a manual for @code{diff} and a manual for @code{diff3}, we
+have one manual for ``comparison of files'' which covers both of those
+programs, as well as @code{cmp}.  By documenting these programs
+together, we can make the whole subject clearer.
+
+The manual which discusses a program should certainly document all of
+the program's command-line options and all of its commands.  It should
+give examples of their use.  But don't organize the manual as a list
+of features.  Instead, organize it logically, by subtopics.  Address
+the questions that a user will ask when thinking about the job that
+the program does.  Don't just tell the reader what each feature can
+do---say what jobs it is good for, and show how to use it for those
+jobs.  Explain what is recommended usage, and what kinds of usage
+users should avoid.
+
+In general, a GNU manual should serve both as tutorial and reference.
+It should be set up for convenient access to each topic through Info,
+and for reading straight through (appendixes aside).  A GNU manual
+should give a good introduction to a beginner reading through from the
+start, and should also provide all the details that hackers want.
+The Bison manual is a good example of this---please take a look at it
+to see what we mean.
+
+That is not as hard as it first sounds.  Arrange each chapter as a
+logical breakdown of its topic, but order the sections, and write their
+text, so that reading the chapter straight through makes sense.  Do
+likewise when structuring the book into chapters, and when structuring a
+section into paragraphs.  The watchword is, @emph{at each point, address
+the most fundamental and important issue raised by the preceding text.}
+
+If necessary, add extra chapters at the beginning of the manual which
+are purely tutorial and cover the basics of the subject.  These provide
+the framework for a beginner to understand the rest of the manual.  The
+Bison manual provides a good example of how to do this.
+
+To serve as a reference, a manual should have an Index that list all the
+functions, variables, options, and important concepts that are part of
+the program.  One combined Index should do for a short manual, but
+sometimes for a complex package it is better to use multiple indices.
+The Texinfo manual includes advice on preparing good index entries, see
+ at ref{Index Entries, , Making Index Entries, texinfo, GNU Texinfo}, and
+see @ref{Indexing Commands, , Defining the Entries of an
+Index, texinfo, GNU Texinfo}.
+
+Don't use Unix man pages as a model for how to write GNU documentation;
+most of them are terse, badly structured, and give inadequate
+explanation of the underlying concepts.  (There are, of course, some
+exceptions.)  Also, Unix man pages use a particular format which is
+different from what we use in GNU manuals.
+
+Please include an email address in the manual for where to report
+bugs @emph{in the text of the manual}.
+
+Please do not use the term ``pathname'' that is used in Unix
+documentation; use ``file name'' (two words) instead.  We use the term
+``path'' only for search paths, which are lists of directory names.
+
+Please do not use the term ``illegal'' to refer to erroneous input to
+a computer program.  Please use ``invalid'' for this, and reserve the
+term ``illegal'' for activities prohibited by law.
+
+Please do not write @samp{()} after a function name just to indicate
+it is a function.  @code{foo ()} is not a function, it is a function
+call with no arguments.
+
+ at node Doc Strings and Manuals
+ at section Doc Strings and Manuals
+
+Some programming systems, such as Emacs, provide a documentation string
+for each function, command or variable.  You may be tempted to write a
+reference manual by compiling the documentation strings and writing a
+little additional text to go around them---but you must not do it.  That
+approach is a fundamental mistake.  The text of well-written
+documentation strings will be entirely wrong for a manual.
+
+A documentation string needs to stand alone---when it appears on the
+screen, there will be no other text to introduce or explain it.
+Meanwhile, it can be rather informal in style.
+
+The text describing a function or variable in a manual must not stand
+alone; it appears in the context of a section or subsection.  Other text
+at the beginning of the section should explain some of the concepts, and
+should often make some general points that apply to several functions or
+variables.  The previous descriptions of functions and variables in the
+section will also have given information about the topic.  A description
+written to stand alone would repeat some of that information; this
+redundancy looks bad.  Meanwhile, the informality that is acceptable in
+a documentation string is totally unacceptable in a manual.
+
+The only good way to use documentation strings in writing a good manual
+is to use them as a source of information for writing good text.
+
+ at node Manual Structure Details
+ at section Manual Structure Details
+ at cindex manual structure
+
+The title page of the manual should state the version of the programs or
+packages documented in the manual.  The Top node of the manual should
+also contain this information.  If the manual is changing more
+frequently than or independent of the program, also state a version
+number for the manual in both of these places.
+
+Each program documented in the manual should have a node named
+ at samp{@var{program} Invocation} or @samp{Invoking @var{program}}.  This
+node (together with its subnodes, if any) should describe the program's
+command line arguments and how to run it (the sort of information people
+would look for in a man page).  Start with an @samp{@@example}
+containing a template for all the options and arguments that the program
+uses.
+
+Alternatively, put a menu item in some menu whose item name fits one of
+the above patterns.  This identifies the node which that item points to
+as the node for this purpose, regardless of the node's actual name.
+
+The @samp{--usage} feature of the Info reader looks for such a node
+or menu item in order to find the relevant text, so it is essential
+for every Texinfo file to have one.
+
+If one manual describes several programs, it should have such a node for
+each program described in the manual.
+
+ at node License for Manuals
+ at section License for Manuals
+ at cindex license for manuals
+
+Please use the GNU Free Documentation License for all GNU manuals that
+are more than a few pages long.  Likewise for a collection of short
+documents---you only need one copy of the GNU FDL for the whole
+collection.  For a single short document, you can use a very permissive
+non-copyleft license, to avoid taking up space with a long license.
+
+See @uref{http://www.gnu.org/copyleft/fdl-howto.html} for more explanation
+of how to employ the GFDL.
+
+Note that it is not obligatory to include a copy of the GNU GPL or GNU
+LGPL in a manual whose license is neither the GPL nor the LGPL.  It can
+be a good idea to include the program's license in a large manual; in a
+short manual, whose size would be increased considerably by including
+the program's license, it is probably better not to include it.
+
+ at node Manual Credits
+ at section Manual Credits
+ at cindex credits for manuals
+
+Please credit the principal human writers of the manual as the authors,
+on the title page of the manual.  If a company sponsored the work, thank
+the company in a suitable place in the manual, but do not cite the
+company as an author.
+
+ at node Printed Manuals
+ at section Printed Manuals
+
+The FSF publishes some GNU manuals in printed form.  To encourage sales
+of these manuals, the on-line versions of the manual should mention at
+the very start that the printed manual is available and should point at
+information for getting it---for instance, with a link to the page
+ at url{http://www.gnu.org/order/order.html}.  This should not be included
+in the printed manual, though, because there it is redundant.
+
+It is also useful to explain in the on-line forms of the manual how the
+user can print out the manual from the sources.
+
+ at node NEWS File
+ at section The NEWS File
+ at cindex @file{NEWS} file
+
+In addition to its manual, the package should have a file named
+ at file{NEWS} which contains a list of user-visible changes worth
+mentioning.  In each new release, add items to the front of the file and
+identify the version they pertain to.  Don't discard old items; leave
+them in the file after the newer items.  This way, a user upgrading from
+any previous version can see what is new.
+
+If the @file{NEWS} file gets very long, move some of the older items
+into a file named @file{ONEWS} and put a note at the end referring the
+user to that file.
+
+ at node Change Logs
+ at section Change Logs
+ at cindex change logs
+
+Keep a change log to describe all the changes made to program source
+files.  The purpose of this is so that people investigating bugs in the
+future will know about the changes that might have introduced the bug.
+Often a new bug can be found by looking at what was recently changed.
+More importantly, change logs can help you eliminate conceptual
+inconsistencies between different parts of a program, by giving you a
+history of how the conflicting concepts arose and who they came from.
+
+ at menu
+* Change Log Concepts::
+* Style of Change Logs::
+* Simple Changes::
+* Conditional Changes::
+* Indicating the Part Changed::
+ at end menu
+
+ at node Change Log Concepts
+ at subsection Change Log Concepts
+
+You can think of the change log as a conceptual ``undo list'' which
+explains how earlier versions were different from the current version.
+People can see the current version; they don't need the change log
+to tell them what is in it.  What they want from a change log is a
+clear explanation of how the earlier version differed.
+
+The change log file is normally called @file{ChangeLog} and covers an
+entire directory.  Each directory can have its own change log, or a
+directory can use the change log of its parent directory---it's up to
+you.
+
+Another alternative is to record change log information with a version
+control system such as RCS or CVS.  This can be converted automatically
+to a @file{ChangeLog} file using @code{rcs2log}; in Emacs, the command
+ at kbd{C-x v a} (@code{vc-update-change-log}) does the job.
+
+There's no need to describe the full purpose of the changes or how
+they work together.  However, sometimes it is useful to write one line
+to describe the overall purpose of a change or a batch of changes.  If
+you think that a change calls for explanation, you're probably right.
+Please do explain it---but please put the full explanation in comments
+in the code, where people will see it whenever they see the code.  For
+example, ``New function'' is enough for the change log when you add a
+function, because there should be a comment before the function
+definition to explain what it does.
+
+In the past, we recommended not mentioning changes in non-software
+files (manuals, help files, etc.) in change logs.  However, we've been
+advised that it is a good idea to include them, for the sake of
+copyright records.
+
+The easiest way to add an entry to @file{ChangeLog} is with the Emacs
+command @kbd{M-x add-change-log-entry}.  An entry should have an
+asterisk, the name of the changed file, and then in parentheses the name
+of the changed functions, variables or whatever, followed by a colon.
+Then describe the changes you made to that function or variable.
+
+ at node Style of Change Logs
+ at subsection Style of Change Logs
+ at cindex change logs, style
+
+Here are some simple examples of change log entries, starting with the
+header line that says who made the change and when it was installed,
+followed by descriptions of specific changes.  (These examples are
+drawn from Emacs and GCC.)
+
+ at example
+1998-08-17  Richard Stallman  <rms@@gnu.org>
+
+* register.el (insert-register): Return nil.
+(jump-to-register): Likewise.
+
+* sort.el (sort-subr): Return nil.
+
+* tex-mode.el (tex-bibtex-file, tex-file, tex-region):
+Restart the tex shell if process is gone or stopped.
+(tex-shell-running): New function.
+
+* expr.c (store_one_arg): Round size up for move_block_to_reg.
+(expand_call): Round up when emitting USE insns.
+* stmt.c (assign_parms): Round size up for move_block_from_reg.
+ at end example
+
+It's important to name the changed function or variable in full.  Don't
+abbreviate function or variable names, and don't combine them.
+Subsequent maintainers will often search for a function name to find all
+the change log entries that pertain to it; if you abbreviate the name,
+they won't find it when they search.
+
+For example, some people are tempted to abbreviate groups of function
+names by writing @samp{* register.el (@{insert,jump-to@}-register)};
+this is not a good idea, since searching for @code{jump-to-register} or
+ at code{insert-register} would not find that entry.
+
+Separate unrelated change log entries with blank lines.  When two
+entries represent parts of the same change, so that they work together,
+then don't put blank lines between them.  Then you can omit the file
+name and the asterisk when successive entries are in the same file.
+
+Break long lists of function names by closing continued lines with
+ at samp{)}, rather than @samp{,}, and opening the continuation with
+ at samp{(} as in this example:
+
+ at example
+* keyboard.c (menu_bar_items, tool_bar_items)
+(Fexecute_extended_command): Deal with `keymap' property.
+ at end example
+
+When you install someone else's changes, put the contributor's name in
+the change log entry rather than in the text of the entry.  In other
+words, write this:
+
+ at example
+2002-07-14  John Doe  <jdoe@@gnu.org>
+
+        * sewing.c: Make it sew.
+ at end example
+
+ at noindent
+rather than this:
+
+ at example
+2002-07-14  Usual Maintainer  <usual@@gnu.org>
+
+        * sewing.c: Make it sew.  Patch by jdoe@@gnu.org.
+ at end example
+
+As for the date, that should be the date you applied the change.
+
+ at node Simple Changes
+ at subsection Simple Changes
+
+Certain simple kinds of changes don't need much detail in the change
+log.
+
+When you change the calling sequence of a function in a simple fashion,
+and you change all the callers of the function to use the new calling
+sequence, there is no need to make individual entries for all the
+callers that you changed.  Just write in the entry for the function
+being called, ``All callers changed''---like this:
+
+ at example
+* keyboard.c (Fcommand_execute): New arg SPECIAL.
+All callers changed.
+ at end example
+
+When you change just comments or doc strings, it is enough to write an
+entry for the file, without mentioning the functions.  Just ``Doc
+fixes'' is enough for the change log.
+
+There's no technical need to make change log entries for documentation
+files.  This is because documentation is not susceptible to bugs that
+are hard to fix.  Documentation does not consist of parts that must
+interact in a precisely engineered fashion.  To correct an error, you
+need not know the history of the erroneous passage; it is enough to
+compare what the documentation says with the way the program actually
+works.
+
+However, you should keep change logs for documentation files when the
+project gets copyright assignments from its contributors, so as to
+make the records of authorship more accurate.
+
+ at node Conditional Changes
+ at subsection Conditional Changes
+ at cindex conditional changes, and change logs
+ at cindex change logs, conditional changes
+
+C programs often contain compile-time @code{#if} conditionals.  Many
+changes are conditional; sometimes you add a new definition which is
+entirely contained in a conditional.  It is very useful to indicate in
+the change log the conditions for which the change applies.
+
+Our convention for indicating conditional changes is to use square
+brackets around the name of the condition.
+
+Here is a simple example, describing a change which is conditional but
+does not have a function or entity name associated with it:
+
+ at example
+* xterm.c [SOLARIS2]: Include string.h.
+ at end example
+
+Here is an entry describing a new definition which is entirely
+conditional.  This new definition for the macro @code{FRAME_WINDOW_P} is
+used only when @code{HAVE_X_WINDOWS} is defined:
+
+ at example
+* frame.h [HAVE_X_WINDOWS] (FRAME_WINDOW_P): Macro defined.
+ at end example
+
+Here is an entry for a change within the function @code{init_display},
+whose definition as a whole is unconditional, but the changes themselves
+are contained in a @samp{#ifdef HAVE_LIBNCURSES} conditional:
+
+ at example
+* dispnew.c (init_display) [HAVE_LIBNCURSES]: If X, call tgetent.
+ at end example
+
+Here is an entry for a change that takes affect only when
+a certain macro is @emph{not} defined:
+
+ at example
+(gethostname) [!HAVE_SOCKETS]: Replace with winsock version.
+ at end example
+
+ at node Indicating the Part Changed
+ at subsection Indicating the Part Changed
+
+Indicate the part of a function which changed by using angle brackets
+enclosing an indication of what the changed part does.  Here is an entry
+for a change in the part of the function @code{sh-while-getopts} that
+deals with @code{sh} commands:
+
+ at example
+* progmodes/sh-script.el (sh-while-getopts) <sh>: Handle case that
+user-specified option string is empty.
+ at end example
+
+
+ at node Man Pages
+ at section Man Pages
+ at cindex man pages
+
+In the GNU project, man pages are secondary.  It is not necessary or
+expected for every GNU program to have a man page, but some of them do.
+It's your choice whether to include a man page in your program.
+
+When you make this decision, consider that supporting a man page
+requires continual effort each time the program is changed.  The time
+you spend on the man page is time taken away from more useful work.
+
+For a simple program which changes little, updating the man page may be
+a small job.  Then there is little reason not to include a man page, if
+you have one.
+
+For a large program that changes a great deal, updating a man page may
+be a substantial burden.  If a user offers to donate a man page, you may
+find this gift costly to accept.  It may be better to refuse the man
+page unless the same person agrees to take full responsibility for
+maintaining it---so that you can wash your hands of it entirely.  If
+this volunteer later ceases to do the job, then don't feel obliged to
+pick it up yourself; it may be better to withdraw the man page from the
+distribution until someone else agrees to update it.
+
+When a program changes only a little, you may feel that the
+discrepancies are small enough that the man page remains useful without
+updating.  If so, put a prominent note near the beginning of the man
+page explaining that you don't maintain it and that the Texinfo manual
+is more authoritative.  The note should say how to access the Texinfo
+documentation.
+
+Be sure that man pages include a copyright statement and free license.
+The simple all-permissive license is appropriate for simple man pages
+(@pxref{License Notices for Other Files,,,maintain,Information for GNU
+Maintainers}).
+
+For long man pages, with enough explanation and documentation that
+they can be considered true manuals, use the GFDL (@pxref{License for
+Manuals}).
+
+Finally, the GNU help2man program
+(@uref{http://www.gnu.org/software/help2man/}) is one way to automate
+generation of a man page, in this case from @option{--help} output.
+This is sufficient in many cases.
+
+ at node Reading other Manuals
+ at section Reading other Manuals
+
+There may be non-free books or documentation files that describe the
+program you are documenting.
+
+It is ok to use these documents for reference, just as the author of a
+new algebra textbook can read other books on algebra.  A large portion
+of any non-fiction book consists of facts, in this case facts about how
+a certain program works, and these facts are necessarily the same for
+everyone who writes about the subject.  But be careful not to copy your
+outline structure, wording, tables or examples from preexisting non-free
+documentation.  Copying from free documentation may be ok; please check
+with the FSF about the individual case.
+
+ at node Managing Releases
+ at chapter The Release Process
+ at cindex releasing
+
+Making a release is more than just bundling up your source files in a
+tar file and putting it up for FTP.  You should set up your software so
+that it can be configured to run on a variety of systems.  Your Makefile
+should conform to the GNU standards described below, and your directory
+layout should also conform to the standards discussed below.  Doing so
+makes it easy to include your package into the larger framework of
+all GNU software.
+
+ at menu
+* Configuration::               How configuration of GNU packages should work.
+* Makefile Conventions::        Makefile conventions.
+* Releases::                    Making releases
+ at end menu
+
+ at node Configuration
+ at section How Configuration Should Work
+ at cindex program configuration
+
+ at pindex configure
+Each GNU distribution should come with a shell script named
+ at code{configure}.  This script is given arguments which describe the
+kind of machine and system you want to compile the program for.
+The @code{configure} script must record the configuration options so
+that they affect compilation.
+
+The description here is the specification of the interface for the
+ at code{configure} script in GNU packages.  Many packages implement it
+using GNU Autoconf (@pxref{Top,, Introduction, autoconf, Autoconf})
+and/or GNU Automake (@pxref{Top,, Introduction, automake, Automake}),
+but you do not have to use these tools.  You can implement it any way
+you like; for instance, by making @code{configure} be a wrapper around
+a completely different configuration system.
+
+Another way for the @code{configure} script to operate is to make a
+link from a standard name such as @file{config.h} to the proper
+configuration file for the chosen system.  If you use this technique,
+the distribution should @emph{not} contain a file named
+ at file{config.h}.  This is so that people won't be able to build the
+program without configuring it first.
+
+Another thing that @code{configure} can do is to edit the Makefile.  If
+you do this, the distribution should @emph{not} contain a file named
+ at file{Makefile}.  Instead, it should include a file @file{Makefile.in} which
+contains the input used for editing.  Once again, this is so that people
+won't be able to build the program without configuring it first.
+
+If @code{configure} does write the @file{Makefile}, then @file{Makefile}
+should have a target named @file{Makefile} which causes @code{configure}
+to be rerun, setting up the same configuration that was set up last
+time.  The files that @code{configure} reads should be listed as
+dependencies of @file{Makefile}.
+
+All the files which are output from the @code{configure} script should
+have comments at the beginning explaining that they were generated
+automatically using @code{configure}.  This is so that users won't think
+of trying to edit them by hand.
+
+The @code{configure} script should write a file named @file{config.status}
+which describes which configuration options were specified when the
+program was last configured.  This file should be a shell script which,
+if run, will recreate the same configuration.
+
+The @code{configure} script should accept an option of the form
+ at samp{--srcdir=@var{dirname}} to specify the directory where sources are found
+(if it is not the current directory).  This makes it possible to build
+the program in a separate directory, so that the actual source directory
+is not modified.
+
+If the user does not specify @samp{--srcdir}, then @code{configure} should
+check both @file{.} and @file{..} to see if it can find the sources.  If
+it finds the sources in one of these places, it should use them from
+there.  Otherwise, it should report that it cannot find the sources, and
+should exit with nonzero status.
+
+Usually the easy way to support @samp{--srcdir} is by editing a
+definition of @code{VPATH} into the Makefile.  Some rules may need to
+refer explicitly to the specified source directory.  To make this
+possible, @code{configure} can add to the Makefile a variable named
+ at code{srcdir} whose value is precisely the specified directory.
+
+In addition, the @samp{configure} script should take options
+corresponding to most of the standard directory variables
+(@pxref{Directory Variables}).  Here is the list:
+
+ at example
+--prefix --exec-prefix --bindir --sbindir --libexecdir --sysconfdir
+--sharedstatedir --localstatedir --libdir --includedir --oldincludedir
+--datarootdir --datadir --infodir --localedir --mandir --docdir
+--htmldir --dvidir --pdfdir --psdir
+ at end example
+
+The @code{configure} script should also take an argument which specifies the
+type of system to build the program for.  This argument should look like
+this:
+
+ at example
+ at var{cpu}- at var{company}- at var{system}
+ at end example
+
+For example, an Athlon-based GNU/Linux system might be
+ at samp{i686-pc-linux-gnu}.
+
+The @code{configure} script needs to be able to decode all plausible
+alternatives for how to describe a machine.  Thus,
+ at samp{athlon-pc-gnu/linux} would be a valid alias.  There is a shell
+script called
+ at uref{http://git.savannah.gnu.org/@/gitweb/@/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD,
+ at file{config.sub}} that you can use as a subroutine to validate system
+types and canonicalize aliases.
+
+The @code{configure} script should also take the option
+ at option{--build=@var{buildtype}}, which should be equivalent to a
+plain @var{buildtype} argument.  For example, @samp{configure
+--build=i686-pc-linux-gnu} is equivalent to @samp{configure
+i686-pc-linux-gnu}.  When the build type is not specified by an option
+or argument, the @code{configure} script should normally guess it using
+the shell script
+ at uref{http://git.savannah.gnu.org/@/gitweb/@/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD,
+ at file{config.guess}}.
+
+ at cindex optional features, configure-time
+Other options are permitted to specify in more detail the software
+or hardware present on the machine, to include or exclude optional parts
+of the package, or to adjust the name of some tools or arguments to them:
+
+ at table @samp
+ at item --enable- at var{feature}@r{[}=@var{parameter}@r{]}
+Configure the package to build and install an optional user-level
+facility called @var{feature}.  This allows users to choose which
+optional features to include.  Giving an optional @var{parameter} of
+ at samp{no} should omit @var{feature}, if it is built by default.
+
+No @samp{--enable} option should @strong{ever} cause one feature to
+replace another.  No @samp{--enable} option should ever substitute one
+useful behavior for another useful behavior.  The only proper use for
+ at samp{--enable} is for questions of whether to build part of the program
+or exclude it.
+
+ at item --with- at var{package}
+ at c @r{[}=@var{parameter}@r{]}
+The package @var{package} will be installed, so configure this package
+to work with @var{package}.
+
+ at c  Giving an optional @var{parameter} of
+ at c @samp{no} should omit @var{package}, if it is used by default.
+
+Possible values of @var{package} include
+ at samp{gnu-as} (or @samp{gas}), @samp{gnu-ld}, @samp{gnu-libc},
+ at samp{gdb},
+ at samp{x},
+and
+ at samp{x-toolkit}.
+
+Do not use a @samp{--with} option to specify the file name to use to
+find certain files.  That is outside the scope of what @samp{--with}
+options are for.
+
+ at item @var{variable}=@var{value}
+Set the value of the variable @var{variable} to @var{value}.  This is
+used to override the default values of commands or arguments in the
+build process.  For example, the user could issue @samp{configure
+CFLAGS=-g CXXFLAGS=-g} to build with debugging information and without
+the default optimization.
+
+Specifying variables as arguments to @code{configure}, like this:
+ at example
+./configure CC=gcc
+ at end example
+is preferable to setting them in environment variables:
+ at example
+CC=gcc ./configure
+ at end example
+as it helps to recreate the same configuration later with
+ at file{config.status}.  However, both methods should be supported.
+ at end table
+
+All @code{configure} scripts should accept all of the ``detail''
+options and the variable settings, whether or not they make any
+difference to the particular package at hand.  In particular, they
+should accept any option that starts with @samp{--with-} or
+ at samp{--enable-}.  This is so users will be able to configure an
+entire GNU source tree at once with a single set of options.
+
+You will note that the categories @samp{--with-} and @samp{--enable-}
+are narrow: they @strong{do not} provide a place for any sort of option
+you might think of.  That is deliberate.  We want to limit the possible
+configuration options in GNU software.  We do not want GNU programs to
+have idiosyncratic configuration options.
+
+Packages that perform part of the compilation process may support
+cross-compilation.  In such a case, the host and target machines for the
+program may be different.
+
+The @code{configure} script should normally treat the specified type of
+system as both the host and the target, thus producing a program which
+works for the same type of machine that it runs on.
+
+To compile a program to run on a host type that differs from the build
+type, use the configure option @option{--host=@var{hosttype}}, where
+ at var{hosttype} uses the same syntax as @var{buildtype}.  The host type
+normally defaults to the build type.
+
+To configure a cross-compiler, cross-assembler, or what have you, you
+should specify a target different from the host, using the configure
+option @samp{--target=@var{targettype}}.  The syntax for
+ at var{targettype} is the same as for the host type.  So the command would
+look like this:
+
+ at example
+./configure --host=@var{hosttype} --target=@var{targettype}
+ at end example
+
+The target type normally defaults to the host type.
+Programs for which cross-operation is not meaningful need not accept the
+ at samp{--target} option, because configuring an entire operating system for
+cross-operation is not a meaningful operation.
+
+Some programs have ways of configuring themselves automatically.  If
+your program is set up to do this, your @code{configure} script can simply
+ignore most of its arguments.
+
+ at comment The makefile standards are in a separate file that is also
+ at comment included by make.texinfo.  Done by roland at gnu.ai.mit.edu on 1/6/93.
+ at comment For this document, turn chapters into sections, etc.
+ at lowersections
+ at include make-stds.texi
+ at raisesections
+
+ at node Releases
+ at section Making Releases
+ at cindex packaging
+
+You should identify each release with a pair of version numbers, a
+major version and a minor.  We have no objection to using more than
+two numbers, but it is very unlikely that you really need them.
+
+Package the distribution of @code{Foo version 69.96} up in a gzipped tar
+file with the name @file{foo-69.96.tar.gz}.  It should unpack into a
+subdirectory named @file{foo-69.96}.
+
+Building and installing the program should never modify any of the files
+contained in the distribution.  This means that all the files that form
+part of the program in any way must be classified into @dfn{source
+files} and @dfn{non-source files}.  Source files are written by humans
+and never changed automatically; non-source files are produced from
+source files by programs under the control of the Makefile.
+
+ at cindex @file{README} file
+The distribution should contain a file named @file{README} which gives
+the name of the package, and a general description of what it does.  It
+is also good to explain the purpose of each of the first-level
+subdirectories in the package, if there are any.  The @file{README} file
+should either state the version number of the package, or refer to where
+in the package it can be found.
+
+The @file{README} file should refer to the file @file{INSTALL}, which
+should contain an explanation of the installation procedure.
+
+The @file{README} file should also refer to the file which contains the
+copying conditions.  The GNU GPL, if used, should be in a file called
+ at file{COPYING}.  If the GNU LGPL is used, it should be in a file called
+ at file{COPYING.LESSER}.
+
+Naturally, all the source files must be in the distribution.  It is okay
+to include non-source files in the distribution, provided they are
+up-to-date and machine-independent, so that building the distribution
+normally will never modify them.  We commonly include non-source files
+produced by Bison, @code{lex}, @TeX{}, and @code{makeinfo}; this helps avoid
+unnecessary dependencies between our distributions, so that users can
+install whichever packages they want to install.
+
+Non-source files that might actually be modified by building and
+installing the program should @strong{never} be included in the
+distribution.  So if you do distribute non-source files, always make
+sure they are up to date when you make a new distribution.
+
+Make sure that all the files in the distribution are world-readable, and
+that directories are world-readable and world-searchable (octal mode 755).
+We used to recommend that all directories in the distribution also be
+world-writable (octal mode 777), because ancient versions of @code{tar}
+would otherwise not cope when extracting the archive as an unprivileged
+user.  That can easily lead to security issues when creating the archive,
+however, so now we recommend against that.
+
+Don't include any symbolic links in the distribution itself.  If the tar
+file contains symbolic links, then people cannot even unpack it on
+systems that don't support symbolic links.  Also, don't use multiple
+names for one file in different directories, because certain file
+systems cannot handle this and that prevents unpacking the
+distribution.
+
+Try to make sure that all the file names will be unique on MS-DOS.  A
+name on MS-DOS consists of up to 8 characters, optionally followed by a
+period and up to three characters.  MS-DOS will truncate extra
+characters both before and after the period.  Thus,
+ at file{foobarhacker.c} and @file{foobarhacker.o} are not ambiguous; they
+are truncated to @file{foobarha.c} and @file{foobarha.o}, which are
+distinct.
+
+ at cindex @file{texinfo.tex}, in a distribution
+Include in your distribution a copy of the @file{texinfo.tex} you used
+to test print any @file{*.texinfo} or @file{*.texi} files.
+
+Likewise, if your program uses small GNU software packages like regex,
+getopt, obstack, or termcap, include them in the distribution file.
+Leaving them out would make the distribution file a little smaller at
+the expense of possible inconvenience to a user who doesn't know what
+other files to get.
+
+ at node References
+ at chapter References to Non-Free Software and Documentation
+ at cindex references to non-free material
+
+A GNU program should not recommend, promote, or grant legitimacy to
+the use of any non-free program.  Proprietary software is a social and
+ethical problem, and our aim is to put an end to that problem.  We
+can't stop some people from writing proprietary programs, or stop
+other people from using them, but we can and should refuse to
+advertise them to new potential customers, or to give the public the
+idea that their existence is ethical.
+
+The GNU definition of free software is found on the GNU web site at
+ at url{http://www.gnu.org/@/philosophy/@/free-sw.html}, and the definition
+of free documentation is found at
+ at url{http://www.gnu.org/@/philosophy/@/free-doc.html}.  The terms ``free''
+and ``non-free'', used in this document, refer to those definitions.
+
+A list of important licenses and whether they qualify as free is in
+ at url{http://www.gnu.org/@/licenses/@/license-list.html}.  If it is not
+clear whether a license qualifies as free, please ask the GNU Project
+by writing to @email{licensing@@gnu.org}.  We will answer, and if the
+license is an important one, we will add it to the list.
+
+When a non-free program or system is well known, you can mention it in
+passing---that is harmless, since users who might want to use it
+probably already know about it.  For instance, it is fine to explain
+how to build your package on top of some widely used non-free
+operating system, or how to use it together with some widely used
+non-free program.
+
+However, you should give only the necessary information to help those
+who already use the non-free program to use your program with
+it---don't give, or refer to, any further information about the
+proprietary program, and don't imply that the proprietary program
+enhances your program, or that its existence is in any way a good
+thing.  The goal should be that people already using the proprietary
+program will get the advice they need about how to use your free
+program with it, while people who don't already use the proprietary
+program will not see anything likely to lead them to take an interest
+in it.
+
+If a non-free program or system is obscure in your program's domain,
+your program should not mention or support it at all, since doing so
+would tend to popularize the non-free program more than it popularizes
+your program.  (You cannot hope to find many additional users for your
+program among the users of Foobar, if the existence of Foobar is not
+generally known among people who might want to use your program.)
+
+Sometimes a program is free software in itself but depends on a
+non-free platform in order to run.  For instance, many Java programs
+depend on some non-free Java libraries.  To recommend or promote such
+a program is to promote the other programs it needs.  This is why we
+are careful about listing Java programs in the Free Software
+Directory: we don't want to promote the non-free Java libraries.
+
+We hope this particular problem with Java will be gone by and by, as
+we replace the remaining non-free standard Java libraries with free
+software, but the general principle will remain the same: don't
+recommend, promote or legitimize programs that depend on non-free
+software to run.
+
+Some free programs strongly encourage the use of non-free software.  A
+typical example is @command{mplayer}.  It is free software in itself,
+and the free code can handle some kinds of files.  However,
+ at command{mplayer} recommends use of non-free codecs for other kinds of
+files, and users that install @command{mplayer} are very likely to
+install those codecs along with it.  To recommend @command{mplayer}
+is, in effect, to promote use of the non-free codecs.
+
+Thus, you should not recommend programs that strongly encourage the
+use of non-free software.  This is why we do not list
+ at command{mplayer} in the Free Software Directory.
+
+A GNU package should not refer the user to any non-free documentation
+for free software.  Free documentation that can be included in free
+operating systems is essential for completing the GNU system, or any
+free operating system, so encouraging it is a priority; to recommend
+use of documentation that we are not allowed to include undermines the
+impetus for the community to produce documentation that we can
+include.  So GNU packages should never recommend non-free
+documentation.
+
+By contrast, it is ok to refer to journal articles and textbooks in
+the comments of a program for explanation of how it functions, even
+though they are non-free.  This is because we don't include such
+things in the GNU system even they are free---they are outside the
+scope of what a software distribution needs to include.
+
+Referring to a web site that describes or recommends a non-free
+program is promoting that program, so please do not make links (or
+mention by name) web sites that contain such material.  This policy is
+relevant particularly for the web pages for a GNU package.
+
+Following links from nearly any web site can lead eventually to
+non-free software; this is inherent in the nature of the web.  So it
+makes no sense to criticize a site for having such links.  As long as
+the site does not itself recommend a non-free program, there is no
+need to consider the question of the sites that it links to for other
+reasons.
+
+Thus, for example, you should not refer to AT&T's web site if that
+recommends AT&T's non-free software packages; you should not refer to
+a site that links to AT&T's site presenting it as a place to get some
+non-free program, because that link recommends and legitimizes the
+non-free program.  However, that a site contains a link to AT&T's web
+site for some other purpose (such as long-distance telephone service)
+is not an objection against it.
+
+ at node GNU Free Documentation License
+ at appendix GNU Free Documentation License
+
+ at cindex FDL, GNU Free Documentation License
+ at include fdl.texi
+
+ at node Index
+ at unnumbered Index
+ at printindex cp
+
+ at bye
+
+Local variables:
+eval: (add-hook 'write-file-hooks 'time-stamp)
+time-stamp-start: "@set lastupdate "
+time-stamp-end: "$"
+time-stamp-format: "%:b %:d, %:y"
+compile-command: "cd work.s && make"
+End:
diff --git a/gdb/.dir-locals.el b/gdb/.dir-locals.el
new file mode 100644
index 0000000..8eca9e0
--- /dev/null
+++ b/gdb/.dir-locals.el
@@ -0,0 +1,24 @@
+;; Emacs settings.
+;; Copyright (C) 2012 Free Software Foundation, Inc.
+
+;; 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 3 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, see <http://www.gnu.org/licenses/>.
+
+(
+ (tcl-mode . ((tcl-indent-level . 4)
+	      (tcl-continued-indent-level . 4)
+	      (indent-tabs-mode . t)))
+ (nil . ((bug-reference-url-format . "http://sourceware.org/bugzilla/show_bug.cgi?id=%s")))
+ (c-mode . ((c-file-style . "GNU")
+	    (indent-tabs-mode . t)))
+)
diff --git a/gdb/.gitignore b/gdb/.gitignore
index ea3a4f9..7a0dd1a 100644
--- a/gdb/.gitignore
+++ b/gdb/.gitignore
@@ -9,6 +9,7 @@
 /gdb
 /gdbtui
 /init.c
+/jit-reader.h
 /jv-exp.c
 /m2-exp.c
 /objc-exp.c
diff --git a/gdb/CONTRIBUTE b/gdb/CONTRIBUTE
index 2d24bba..cdec246 100644
--- a/gdb/CONTRIBUTE
+++ b/gdb/CONTRIBUTE
@@ -71,9 +71,9 @@ o	Submitting Patches
 	documentation (i.e., .texi files).
 
 	The patch itself. If you are accessing the CVS repository use
-	"cvs update; cvs diff -cp"; else, use "diff -cp OLD NEW" or
-	"diff -up OLD NEW". If your version of diff does not support
-	these options, then get the latest version of GNU diff.
+	"cvs update; cvs diff -up"; else, use "diff -up OLD NEW". If
+	your version of diff does not support these options, then get
+	the latest version of GNU diff.
 
 	We accept patches as plain text (preferred for the compilers
 	themselves), MIME attachments (preferred for the web pages),
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 67a46b4..b88226f 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,12488 +1,8419 @@
-2012-04-26  Joel Brobecker  <brobecker at adacore.com>
+2012-08-17  Joel Brobecker  <brobecker at adacore.com>
 
-	* version.in: Update GDB version number to 7.4.1.
+	* version.in: Update GDB version number to 7.5.
 
-2012-04-24  Marc Khouzam  <marc.khouzam at ericsson.com>
+2012-08-16  Tom Tromey  <tromey at redhat.com>
 
-	* mi/mi-main.c (mi_cmd_execute): Choose a live thread not just
-	any thread.
+	PR python/14386:
+	* varobj.c (update_dynamic_varobj_children): Don't call
+	PyIter_Check.
 
-2012-04-13  Pierre Muller  <muller at ics.u-strasbg.fr>
+2012-08-06  Tom Tromey  <tromey at redhat.com>
 
-	* p-typeprint.c (pascal_type_print_method_args):
-	Fix display of parameter of methods.
+	* dwarf2-frame.c (clear_pointer_cleanup): New function.
+	(dwarf2_frame_cache): Use it.
+	* frame-unwind.h (frame_sniffer_ftype): Document prologue
+	cache initialization constraint.
 
-2012-03-20  Pedro Alves  <palves at redhat.com>
+2012-08-06  Tom Tromey  <tromey at redhat.com>
 
-	* remote.c (remote_start_remote): Clear `rs->starting_up' on early
-	returns.
+	PR cli/14392:
+	* cli/cli-cmds.c (list_command): Filter 'sals_end'.
 
-2012-03-13  Hui Zhu  <teawater at gmail.com>
-	    Pedro Alves  <palves at redhat.com>
+2012-08-03  Tom Tromey  <tromey at redhat.com>
 
-	* breakpoint.c (init_breakpoint_sal): New flags parameter.  Handle
-	CREATE_BREAKPOINT_FLAGS_INSERTED.
-	(create_breakpoint_sal, create_breakpoints_sal)
-	(create_breakpoint): New flags parameter.  Pass it down.
-	(break_command_1, handle_gnu_v3_exceptions, trace_command)
-	(ftrace_command, strace_command): Adjust.
-	(create_tracepoint_from_upload): Pass
-	CREATE_BREAKPOINT_FLAGS_INSERTED.
-	* breakpoint.h (enum breakpoint_create_flags): New.
-	(create_breakpoint): New flags parameter.
-	* mi/mi-cmd-break.c (mi_cmd_break_insert): Adjust.
-	* python/py-breakpoint.c (bppy_init): Adjust.
-	* python/py-finishbreakpoint.c (bpfinishpy_init): Adjust.
-	* spu-tdep.c (spu_catch_start): Adjust.
+	* dwarf2-frame.c (dwarf2_frame_cache): Call do_cleanups before
+	return.
 
-2012-03-13  Pedro Alves  <palves at redhat.com>
-	    Hui Zhu  <teawater at gmail.com>
-	    Yao Qi  <yao at codesourcery.com>
+2012-08-02  Ulrich Weigand  <ulrich.weigand at linaro.org>
 
-	* remote.c (struct remote_state): New field `starting_up'.
-	(remote_start_remote): Set and clear it.
-	(remote_can_download_tracepoint): If starting up, return false.
+	* inf-child.c (inf_child_fileio_pwrite): If pwrite fails, fall back
+	to attempting lseek/write.
+	(inf_child_fileio_pread): Likewise for pread.
 
-2012-03-06  Pedro Alves  <palves at redhat.com>
+2012-08-01  Richard Henderson  <rth at redhat.com>
 
-	PR gdb/13766
+	* configure.tgt (m32c-*-*) [gdb_target_obs]: Remove prologue-value.o.
+	(mep-*-*) [gdb_target_obs]: Likewise.
 
-	* i387-tdep.c (i387_supply_xsave): If we have an xsave buffer, and
-	the register state is clear, supply explicit zero, instead of
-	marking the register unavailable.
+2012-08-01  Ulrich Weigand  <ulrich.weigand at linaro.org>
 
-2012-02-23  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* arm-linux-nat.c (arm_linux_hw_breakpoint_initialize): Do not
+	attempt to 4-byte-align HW breakpoint addresses for Thumb.
 
-	PR backtrace/13716
-	* infcmd.c (finish_forward): New variable frame_id, initialize it, use
-	it after set_momentary_breakpoint.
+2012-07-31  Andreas Schwab  <schwab at linux-m68k.org>
 
-2012-02-21  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* ppc-linux-tdep.c (ppc_linux_init_abi): Register
+	linux_get_siginfo_type.
 
-	PR build/13638
-	* configure.ac (MAKEINFO): Replace AC_CHECK_PROG by AC_ARG_VAR.
-	(MAKEINFOFLAGS): Replace static string by AC_ARG_VAR.
-	* configure: Regenerate.
+2012-07-31  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2012-02-21  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* infcall.c (call_function_by_hand): Move BP_ADDR comment to
+	AT_ENTRY_POINT.
+	(call_function_by_hand) <ON_STACK>: Call write_memory with
+	gdbarch_breakpoint_from_pc, if possible.
+	(call_function_by_hand) <AT_ENTRY_POINT>: The BP_ADDR comment is moved
+	here.
 
-	* configure: Regenerate.
-	* config.in: Regenerate.
+2012-07-30  Keith Seitz  <keiths at redhat.com>
 
-2012-01-24  Joel Brobecker  <brobecker at adacore.com>
+	* linespec.c (linespec_lexer_lex_number): A number followed
+	by quotes is a valid number, too.
 
-	* version.in: Set version to 7.4.0.20120124-cvs.
+2012-07-26  Keith Seitz  <keiths at redhat.com>
 
-2012-01-24  Joel Brobecker  <brobecker at adacore.com>
+	* linespec.c (linespec_lexer_lex_number): The input
+	is also a valid number if the next character is a comma
+	or colon.
 
-	GDB 7.4 released.
+2012-07-25  Ralf Corsépius  <ralf.corsepius at rtems.org>
 
-2012-01-24  Joel Brobecker  <brobecker at adacore.com>
+	* configure.tgt: Add v850*-*-rtems*.
 
-	* NEWS: Change "since GDB 7.3.1" into "in GDB 7.4".
+2012-07-25  Hui Zhu  <hui_zhu at mentor.com>
 
-2012-01-24  Joel Brobecker  <brobecker at adacore.com>
+	* linespec.c (linespec_lexer_lex_number): Update comments,
+	change the return and add check to make sure the input is
+	the decimal numbers.
+	(linespec_lexer_lex_one): If linespec_lexer_lex_number return
+	false, call linespec_lexer_lex_string.
 
-	* version.in: Update GDB version number to 7.4.
+2012-07-24  Marc Khouzam  <marc.khouzam at ericsson.com>
 
-2012-01-14  Doug Evans  <dje at google.com>
+	* breakpoint.c (create_breakpoint): Store condition for pending
+	breakpoints.
 
-	Restore "mt set python print-stack on|off" for 7.4.
-	* NEWS: Update to indicate "mt set python print-stack" is deprecated,
-	but not deleted yet, and will be gone in gdb 7.5.
-	* python/python.c (maint_set_python_list, maint_show_python_list):
-	New global vars.
-	(maint_set_python, maint_show_python): New functions.
-	(gdbpy_should_print_stack_deprecated): New global var.
-	(set_maint_python_print_stack): New function.
-	(show_maint_python_print_stack): New function.
-	(_initialize_python): Define commands
-	"mt set python print-stack on|off" and ""mt show python print-stack".
+2012-07-23  Keith Seitz  <keiths at redhat.com>
 
-2012-01-13  Eli Zaretskii  <eliz at gnu.org>
+	* linespec.c (convert_linespec_to_sal): Don't add
+	any symbols to the result vector if symbol_to_sal
+	returns zero.
 
-	* gdb_curses.h (MOUSE_MOVED) [__MINGW32__]: Undefine before
-	including curses.h.
+2012-07-20  Doug Evans  <dje at google.com>
 
-2012-01-12  Pedro Alves  <palves at redhat.com>
+	* NEWS: Document new options "set/show use-deprecated-index-sections",
+	and delete reference to --use-deprecated-index-sections.
+	* symfile.h (use_deprecated_index_sections): Delete.
+	* dwarf2read.c (use_deprecated_index_sections): Make static.
+	(read_index_from_section): Update wording of how to load
+	deprecated index sections.
+	(_initialize_dwarf2_read): New options
+	"set/show use-deprecated-index-sections".
+	* main.c (captured_main): Delete --use-deprecated-index-sections.
 
-	* i386-tdep.c (i386_frame_cache_1): Also mark the frame base as
-	available when %ebp is found to be zero (outermost).
+2012-07-18  Joel Brobecker  <brobecker at adacore.com>
 
-2012-01-10  Doug Evans  <dje at google.com>
+	* version.in: Set version to 7.4.91.20120718-cvs.
 
-	* dwarf2read.c (dwarf_decode_lines): Remove arg "abfd".  New arg
-	"want_line_info".  All callers updated.
-	(dwarf_decode_lines_1): New function.
-	(handle_DW_AT_stmt_list): Add function comment.
-	New arg "want_line_info".  All callers updated.
-	(read_file_scope,read_type_unit_scope): Move comment from
-	handle_DW_AT_stmt_list to here.
+2012-07-18  Joel Brobecker  <brobecker at adacore.com>
 
-2012-01-06  Joel Brobecker  <brobecker at adacore.com>
+	GDB 7.4.91 released.
 
-	* version.in: Set version to 7.3.92.20120106-cvs.
+2012-07-18  Joel Brobecker  <brobecker at adacore.com>
 
-2012-01-06  Joel Brobecker  <brobecker at adacore.com>
+	* NEWS: Replace "Changes since GDB 7.4" with "Changes in GDB 7.5".
 
-	GDB 7.3.92 released.
+2012-07-18  Joel Brobecker  <brobecker at adacore.com>
 
-2012-01-06  Joel Brobecker  <brobecker at adacore.com>
+	* version.in: Update GDB version number to 7.4.91.
 
-	* version.in: Update GDB version number to 7.3.92.
+2012-07-18  Joel Brobecker  <brobecker at adacore.com>
 
-2012-01-06  Joel Brobecker  <brobecker at adacore.com>
+	* configure.ac (development): Set to false.
+	* configure: Regenerate.
 
-	Copyright year update in most files of the GDB Project.
+2012-07-18  Joel Brobecker  <brobecker at adacore.com>
 
-2012-01-06  Joel Brobecker  <brobecker at adacore.com>
+	GDB 7.5 branch created (branch timestamp: 2012-07-18 03:22 UTC)
+	* version.in: Bump version to 7.4.90.20120718-cvs.
 
-	* README (Copyright and License Notices): New section.
+2012-07-16  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2012-01-06  Joel Brobecker  <brobecker at adacore.com>
+	PR 11914
+	* f-valprint.c (info_common_command): New variable frame_id.
+	Reinitialize FI form FRAME_ID after each print_variable_and_value.
+	* printcmd.c (print_variable_and_value): Extend function comment.
+	Add comment for invalidated FRAME.
+	* stack.c (backtrace_command_1): New variable frame_id.  Reinitialize
+	FI form FRAME_ID after each print_frame_local_vars.
+	(struct print_variable_and_value_data): Change frame to frame_id.
+	(do_print_variable_and_value): New variable frame, initialize it from
+	p->frame_id.  Add comment for invalidated FRAME.
+	(print_frame_local_vars, print_frame_arg_vars): New function comment.
+	Update CB_DATA.FRAME to CB_DATA.FRAME_ID initialization.  Add comment
+	for invalidated FRAME.
 
-	* ada-lang.c: Reformat the copyright notice.
+2012-07-16  Marc Khouzam  <marc.khouzam at ericsson.com>
+	    Pedro Alves  <palves at redhat.com>
 
-2012-01-06  Joel Brobecker  <brobecker at adacore.com>
+	* linux-nat.c (linux_nat_detach): Don't unregister from the event
+	loop.
+
+2012-07-16  Tom Tromey  <tromey at redhat.com>
+
+	* jv-typeprint.c (c_type_print_varspec_suffix): Don't declare.
+
+2012-07-15  Doug Evans  <dje at google.com>
+
+	* dwarf2read.c (stmt_list_hash): New struct.
+	(type_unit_group): Embed "per_cu" member, remove pointer.
+	New union member "t", move member "tus" into it, all uses updated.
+	New member "hash", replaces member "line_offset, all uses updated.
+	(quick_file_names): Replace member "offset" with "hash", all uses
+	updated.
+	(hash_stmt_list_entry, eq_stmt_list_entry): New functions.
+	(hash_file_name_entry, eq_file_name_entry): Call them.
+	(hash_type_unit_group, eq_type_unit_group): Ditto.
+	(dw2_get_cu, dw2_get_primary_cu): Replace assert with a better one.
+	(dw2_get_file_names_reader): Fix file name table calculation for TUs.
+	(dw2_get_file_names): Update.
+	(create_type_unit_group): Replace "per_cu" arg with "cu".
+	All callers updated.  Fix "quick" (.gdb_index) handling.
+	(get_type_unit_group): Replace "per_cu" arg with "cu".
+	All callers updated.
+	(build_type_unit_groups): Don't reset tu_stats.
 
-	* gdb/common/gdb_thread_db.h, gdb/dbxread.c, gdb/environ.c,
-	gdb/gcore.h, gdb/rs6000-tdep.h, gdb/s390-nat.c, gdb/tic6x-tdep.c:
-	Reformat the copyright header.
+	* symtab.c (filename_seen_cache): Delete members "tab_alloc_size",
+	"tab_cur_size".  Change member "tab" to be a htab_t.
+	(create_filename_seen_cache): Update.
+	(clear_filename_seen_cache, delete_filename_seen_cache): Update.
+	(filename_seen): Update.
 
-2012-01-06  Joel Brobecker  <brobecker at adacore.com>
+2012-07-13  Doug Evans  <dje at google.com>
 
-	* top.c (print_gdb_version): Update copyright year.
+	* symtab.c (filename_seen): Update comment.
 
-2012-01-04  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-07-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	    Doug Evans  <dje at google.com>
 
-	Revert:
-	2012-01-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
-		    Joel Brobecker  <brobecker at adacore.com>
-	Fix regression for gdb.cp/gdb2495.exp with gcc-4.7.
-	* arch-utils.c (displaced_step_at_entry_point): Incrase BP_LEN skip to
-	3 times.
-	* infcall.c (call_function_by_hand) <AT_SYMBOL>: Move it upwards and
-	fall through into AT_ENTRY_POINT.
-	(call_function_by_hand) <AT_ENTRY_POINT>: New variable bp_len.  Adjust
-	DUMMY_ADDR with it.
-	* ppc-linux-tdep.c (ppc_linux_displaced_step_location): Increase
-	PPC_INSN_SIZE skip to 3 times.
+	* buildsym.c (end_symtab_1): Split it to ...
+	(end_symtab_get_static_block): ... this ...
+	(end_symtab_from_static_block): ... and this function.
+	(end_symtab, end_expandable_symtab): Call them.
+	* buildsym.h (end_symtab_get_static_block)
+	(end_symtab_from_static_block): New declarations.
+	* dwarf2read.c (process_full_comp_unit): New variable static_block.
+	Set its valid CU ranges.
 
-2012-01-04  Joel Brobecker  <brobecker at adacore.com>
+2012-07-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* linespec.c (add_minsym): Preserve function descriptors.
+	* dwarf2loc.c (disassemble_dwarf_expression): Handle
+	DW_OP_GNU_parameter_ref.
 
-2012-01-04  Joel Brobecker  <brobecker at adacore.com>
+2012-07-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* linespec.c (struct collect_minsyms) [list_mode]: New field.
-	(add_minsym): Ignore data symbols if not in list mode.
-	(search_minsyms_for_name): Set local.list_mode.
+	* dwarf2read.c (read_call_site_scope): Do not gdb_assert for invalid
+	read-in CALL_SITE_PARAMETER_PARAM_OFFSET.
 
-2012-01-04  Ulrich Weigand  <uweigand at de.ibm.com>
+2012-07-13  Doug Evans  <dje at google.com>
 
-	* breakpoint.c (all_locations_are_pending): Consider locations
-	in program spaces executing during startup pending as well.
+	* symtab.c (output_source_filename): Delete unnecessary forward decl.
+	(filename_seen_cache): New struct.
+	(INITIAL_FILENAME_SEEN_CACHE_SIZE): New macro.
+	(create_filename_seen_cache): New function.
+	(clear_filename_seen_cache, delete_filename_seen_cache): New functions.
+	(filename_seen): Delete arg "first".  New arg "cache".  All callers
+	updated.
+	(output_source_filename_data): New struct.
+	(output_source_filename): Delete arg "first".  New arg "data".
+	All callers updated.
+	(sources_info): Delete local "first".  New locals "data", "cleanups".
+	Rewrite to use filename_seen_cache.
+	(add_partial_filename_data): Delete member "first".  New member
+	"filename_seen_cache".  All uses updated.
+	(make_source_files_completion_list): Rewrite to use
+	filename_seen_cache.
+
+2012-07-12  Doug Evans  <dje at google.com>
+
+	* psymtab.c (map_symbol_filenames_psymtab): Skip shared psymtabs.
+
+2012-07-10  Doug Evans  <dje at google.com>
+
+	PR gdb/13498
+	* dwarf2read.c (dwarf2_per_objfile): New members n_type_unit_groups,
+	all_type_unit_groups, type_unit_groups, tu_stats.
+	(dwarf2_per_cu_data): Move "imported_symtabs" into new union "s".
+	All uses updated.  Add type_unit_group to union "s".
+	(type_unit_group): New struct.
+	(IS_TYPE_UNIT_GROUP): New macro.
+	(abbrev_table): Delete unused member "section".
+	(dw2_do_instantiate_symtab): Early exit if type_unit_group.
+	(dw2_get_cu): Assert not used with type_unit_group.
+	(dw2_get_primary_cu): New function.
+	(dw2_build_type_unit_groups_reader): New function.
+	(dw2_build_type_unit_groups): New function.
+	(dw2_get_file_names): Assert not called on type units.
+	(dw2_map_symtabs_matching_filename): Call dw2_build_type_unit_groups.
+	Redo loop to iterate over type unit groups instead of type units.
+	(dw2_expand_symtabs_matching, dw2_map_symbol_filenames): Ditto.
+	(read_abbrev_offset): New function.
+	(init_cutu_and_read_dies): New arg "abbrev_table".  All callers
+	updated.
+	(create_partial_symtab): New function.
+	(process_psymtab_comp_unit_reader): Assert not used with type units.
+	Call create_partial_symtab.
+	(process_psymtab_type_unit): Delete.
+	(hash_type_unit_group, eq_type_unit_group): New functions.
+	(allocate_type_unit_groups_table): New function.
+	(NO_STMT_LIST_TYPE_UNIT_PSYMTAB): New macro.
+	(NO_STMT_LIST_TYPE_UNIT_PSYMTAB_SIZE): New macro.
+	(create_type_unit_group, get_type_unit_group): New functions.
+	(tu_abbrev_offset): New struct.
+	(sort_tu_by_abbrev_offset): New function.
+	(add_type_unit_group_to_table): New function.
+	(build_type_unit_groups): New function.
+	(build_type_psymtabs_reader): New function.
+	(build_type_psymtab_dependencies): New function.
+	(build_type_psymtabs): Rewrite.
+	(scan_partial_symbols): Flag an error if a DW_TAG_imported_unit
+	is seen in a type unit.
+	(process_queue): Move symtab expansion debugging printfs here.
+	Call process_full_type_unit for type units.
+	(compute_symtab_includes): Assert not called for type units.
+	(process_cu_includes): Don't call compute_symtab_includes for
+	type units.
+	(process_full_type_unit): New function.
+	(process_imported_unit_die): Flag an error if called for type units.
+	(handle_DW_AT_stmt_list): Delete arg "want_line_info".  All callers
+	updated.  Assert not called for type units.
+	(read_file_scope): Call dwarf2_start_symtab.
+	(setup_type_unit_groups): New function.
+	(read_type_unit_scope): Rewrite.
+	(abbrev_table_read_table): Initialize abbrev_table->offset.
+	(abbrev_table_free_cleanup): New function.
+	(dwarf2_start_symtab): New function.
+	(load_full_type_unit): Assert not called for type unit groups.
+	* buildsym.c (finish_block_internal): New arg "expandable".
+	All callers updated.
+	(start_symtab): Move most contents to ...
+	(restart_symtab): ... here.  New function.
+	(reset_symtab_globals): New function.
+	(end_symtab_1): Renamed from end_symtab.  New arg "expandable".
+	Call reset_symtab_globals.
+	(end_symtab, end_expandable_symtab): New functions.
+	(set_missing_symtab, augment_type_symtab): New functions.
+	* buildsym.h (end_expandable_symtab): Declare.
+	(augment_type_symtab, restart_symtab): Declare.
+	* psympriv.h (struct partial_symtab): New member "anonymous".
+	* psymtab.c (partial_map_symtabs_matching_filename): Ignore
+	anonymous psymtabs.
+	(read_psymtabs_with_filename): Ditto.
+	(map_symbol_filenames_psymtab, psymtab_to_fullname): Ditto.
+	(expand_symtabs_matching_via_partial): Ditto.
+	(dump_psymtab): Update.
+	* dictionary.c (dict_add_pending): New function.
+	* dictionary.h (dict_add_pending): Declare.
+
+2012-07-09  Doug Evans  <dje at google.com>
+
+	* buildsym.c (start_subfile): Remove unnecessary check for
+	name == NULL.
+
+	* psymtab.c (allocate_psymtab): Use host_address_to_string.
+
+	* dwarf2read.c (load_full_type_unit): Simplify.
+
+	* dwarf2read.c (dwarf2_per_objfile): Change type of all_type_units
+	to struct signatured_type **.  All uses updated.
+
+	* dwarf2read.c (dwarf2_attr_no_follow): Delete unused arg "cu".
+	All callers updated.
 
-2012-01-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
-	    Joel Brobecker  <brobecker at adacore.com>
+2012-07-09  Tom Tromey  <tromey at redhat.com>
 
-	Fix regression for gdb.cp/gdb2495.exp with gcc-4.7.
-	* arch-utils.c (displaced_step_at_entry_point): Incrase BP_LEN skip to
-	3 times.
-	* infcall.c (call_function_by_hand) <AT_SYMBOL>: Move it upwards and
-	fall through into AT_ENTRY_POINT.
-	(call_function_by_hand) <AT_ENTRY_POINT>: New variable bp_len.  Adjust
-	DUMMY_ADDR with it.
-	* ppc-linux-tdep.c (ppc_linux_displaced_step_location): Increase
-	PPC_INSN_SIZE skip to 3 times.
+	* c-exp.y (check_parameter_typelist): New function.
+	(parameter_typelist): Call it.
+	* eval.c (make_params): Handle '(void)' case.
+	* gdbtypes.c (lookup_function_type_with_arguments): Handle
+	'(void)' case.
 
-2012-01-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* NEWS (Changes in GDB 7.4): Add gdbtui deprecation note.
-	* tui/tui-main.c: Likewise.
-
-2011-12-23  Kevin Pouget  <kevin.pouget at st.com>
-
-	Introduce gdb.FinishBreakpoint in Python
-	* Makefile.in (SUBDIR_PYTHON_OBS): Add py-finishbreakpoint.o.
-	(SUBDIR_PYTHON_SRCS): Add python/py-finishbreakpoint.c.
-	Add build rule for this file.
-	* infcmd.c (print_return_value): Split to create get_return_value.
-	(get_return_value): New function based on print_return_value. Handle
-	case where stop_registers are not set.
-	* inferior.h (get_return_value): New prototype.
-	* python/py-breakpoint.c (bppy_pending_object): Make non-static.
-	(gdbpy_breakpoint_created): Set is_py_finish_bp is necessary.
-	(struct breakpoint_object): Move to python-internal.h
-	(BPPY_REQUIRE_VALID): Likewise.
-	(BPPY_SET_REQUIRE_VALID): Likewise.
-	(gdbpy_breakpoint_created): Initialize is_finish_bp.
-	(gdbpy_should_stop): Add  pre/post hooks before/after calling stop
-	method.
-	* python/python-internal.h (breakpoint_object_type): Add as extern.
-	(bppy_pending_object): Likewise.
-	(typedef struct breakpoint_object) Removed.
-	(struct breakpoint_object): Moved from py-breakpoint.c.
-	Add field is_finish_bp.
-	(BPPY_REQUIRE_VALID): Moved from py-breakpoint.c.
-	(BPPY_SET_REQUIRE_VALID): Likewise.
-	(frame_object_to_frame_info): New prototype.
-	(gdbpy_initialize_finishbreakpoints): New prototype.
-	(bpfinishpy_is_finish_bp): Likewise.
-	(bpfinishpy_pre_stop_hook): Likewise.
-	(bpfinishpy_post_stop_hook): Likewise.
-	* python/py-finishbreakpoint.c: New file.
-	* python/py-frame.c(frame_object_to_frame_info): Make non-static and
-	accept PyObject instead of frame_object.
-	(frapy_is_valid): Don't cast to frame_object.
-	(frapy_name): Likewise.
-	(frapy_type): Likewise.
-	(frapy_unwind_stop_reason): Likewise.
-	(frapy_pc): Likewise.
-	(frapy_block): Likewise.
-	(frapy_function): Likewise.
-	(frapy_older): Likewise.
-	(frapy_newer): Likewise.
-	(frapy_find_sal): Likewise.
-	(frapy_read_var): Likewise.
-	(frapy_select): Likewise.
-	* python/python.c (gdbpy_is_stopped_at_finish_bp): New noop function.
-	(_initialize_python): Add gdbpy_initialize_finishbreakpoints.
-	* python/python.h: Include breakpoint.h
-	(gdbpy_is_stopped_at_finish_bp): New prototype.
-
-2011-12-22  Andreas Schwab  <schwab at linux-m68k.org>
-
-	* ppc-linux-nat.c (create_watchpoint_request): Only use ranged
-	watchpoints when supported.
-
-	* cp-name-parser.y (cp_merge_demangle_parse_infos): Don't use
-	obstack_empty_p.
-
-2011-12-21  Ulrich Weigand  <ulrich.weigand at linaro.org>
+2012-07-07  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	PR tdep/12797
-	* arm-tdep.c (arm_return_value): Handle complex types.
+	* common/linux-ptrace.c: Include gdb_assert.h.
+	<__i386__> (linux_ptrace_test_ret_to_nx_instr): New declaration.
+	<__i386__>: Include sys/reg.h, sys/mman.h, signal.h, sys/wait.h and
+	stdint.h.
+	(linux_ptrace_test_ret_to_nx, linux_ptrace_init_warnings): New
+	functions.
+	* common/linux-ptrace.h (linux_ptrace_init_warnings): New declarations.
+	* linux-nat.c (linux_child_post_attach)
+	(linux_child_post_startup_inferior): Call linux_ptrace_init_warnings.
 
-2011-12-19  Doug Evans  <dje at google.com>
+2012-07-07  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* python/py-auto-load.c (info_auto_load_scripts): Pass address of
-	scripts vector to collect_matching_scripts.
-	(collect_matching_scripts): Update.
+	* linux-thread-db.c (thread_db_find_new_threads_silently): Do not apply
+	nptl <2.7 bug workaround for core files.
 
-2011-12-19  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-07-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* symfile.c (reread_symbols): Move free_objfile_separate_debug,
-	preserve_values, sym_finish and clear_objfile_data calls before BFD
-	close.  Move free_objfile_separate_debug as the very first call.  New
-	comment on the ordering.
+	* linux-nat.c (resume_lwp, linux_nat_resume): Remove LP->SIGINFO
+	clearing.
+	(save_siginfo): Remove.
+	(stop_wait_callback, linux_nat_filter_event): Remove the save_siginfo
+	call.
+	(resume_stopped_resumed_lwps): Remove LP->SIGINFO clearing.
+	(linux_nat_get_siginfo): Use PTRACE_GETSIGINFO.
+	* linux-nat.h (struct lwp_info): Remove field siginfo.
+
+2012-07-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup for the next patch.
+	* arm-linux-nat.c (arm_linux_stopped_data_address): Change variable
+	siginfo_p to siginfo, update its users incl. the linux_nat_get_siginfo
+	call for it.
+	* ia64-linux-nat.c (ia64_linux_stopped_data_address): Likewise.
+	(ia64_linux_stopped_data_address):
+	* linux-nat.c (linux_nat_get_siginfo): Add parameter siginfo, change
+	the return value.
+	* linux-nat.h (linux_nat_get_siginfo): Likewise.
+	* ppc-linux-nat.c (ppc_linux_stopped_data_address): Change variable
+	siginfo_p to siginfo, update its users incl. the linux_nat_get_siginfo
+	call for it.
+
+2012-07-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	PR 14321
+	* findcmd.c (parse_find_args): New variable pattern_buf_size_need.
+	Increase buffer sizes to 2x we need, not just 2x of the previous size.
+
+2012-07-06  Tom Tromey  <tromey at redhat.com>
+
+	* c-exp.y (DOTDOTDOT): New token.
+	(func_mod, exp): Use parameter_typelist.
+	(parameter_typelist): New production.
+	(tokentab3): Add "..." token.
+	* eval.c (make_params): Handle varargs.
+	* gdbtypes.c (lookup_function_type_with_arguments): Handle
+	varargs.
+
+2012-07-06  Tom Tromey  <tromey at redhat.com>
+
+	PR exp/9608:
+	* c-exp.y (%union) <tvec>: Change type.
+	(func_mod): Now uses <tvec> type.
+	(exp): Update for tvec change.
+	(direct_abs_decl): Push the typelist.
+	(func_mod): Return a typelist.
+	(nonempty_typelist): Update for tvec change.
+	* gdbtypes.c (lookup_function_type_with_arguments): New function.
+	* gdbtypes.h (lookup_function_type_with_arguments): Declare.
+	* parse.c (pop_type_list): New function.
+	(push_typelist): New function.
+	(follow_types): Handle tp_function_with_arguments.
+	* parser-defs.h (type_ptr): New typedef.  Define a VEC.
+	(enum type_pieces) <tp_function_with_arguments>: New constant.
+	(union type_stack_elt) <typelist_val>: New field.
+	(push_typelist): Declare.
+
+2012-07-06  Tom Tromey  <tromey at redhat.com>
+
+	* c-exp.y (%union) <type_stack>: New field.
+	(abs_decl, direct_abs_decl): Use <type_stack> type.  Update.
+	(ptr_operator_ts): New production.
+	(ptype): Update.
+	* parse.c (type_stack_reserve): New function.
+	(check_type_stack_depth): Use it.
+	(pop_type_stack, append_type_stack, push_type_stack)
+	(get_type_stack, type_stack_cleanup): New functions.
+	(follow_types): Handle tp_type_stack.
+	(_initialize_parse): Simplify initialization.
+	* parser-defs.h (enum type_pieces) <tp_type_stack>: New
+	constant.
+	(union type_stack_elt) <stack_val>: New field.
+	(get_type_stack, append_type_stack, push_type_stack)
+	(type_stack_cleanup): Declare.
+
+2012-07-06  Tom Tromey  <tromey at redhat.com>
+
+	* parser-defs.h (type_stack, type_stack_size, type_stack_depth):
+	Remove.
+	(struct type_stack): New.
+	* parse.c (type_stack, type_stack_size, type_stack_depth):
+	Remove.
+	(type_stack): New global.
+	(parse_exp_in_context, check_type_stack_depth)
+	(insert_into_type_stack, insert_type, push_type, push_type_int)
+	(insert_type_address_space, pop_type, pop_type_int)
+	(_initialize_parse): Update.
 
-2011-12-19  Ulrich Weigand  <uweigand at de.ibm.com>
+2012-07-06  Tom Tromey  <tromey at redhat.com>
 
-	* s390-tdep.c (s390_push_dummy_call): Set addressing mode bit
-	in return PSWA.
+	* c-exp.y (func_mod, direct_abs_decl, abs_decl, ptr_operator):
+	Remove %type.
 
-2011-12-17  Mark Kettenis  <kettenis at gnu.org>
+2012-07-06  Siddhesh Poyarekar  <siddhesh at redhat.com>
 
-	* amd64obsd-tdep.c (amd64obsd_init_abi): Don't set
-	regset_from_core_section.
-	(amd64obsd_core_init_abi): New function that sets
-	regset_from_core_section.
-	(_initialize_amd64obsd_tdep): Use amd64obsd_core_init_abi for
-	traditional core dumps.
+	* c-lang.c (c_printstr): Remove ununsed variable WIDTH.
 
-2011-12-17  Mark Kettenis  <kettenis at gnu.org>
+2012-07-06  Siddhesh Poyarekar  <siddhesh at redhat.com>
+	    Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* amd64obsd-tdep.c (amd64obsd_sigtramp_p): Detect new signal
-	trampoline to be introduced in OpenBSD 5.0.
+	* cp-valprint.c (cp_print_value): Replace potentially unsafe
+	alloca with xmalloc/xfree.
 
-2011-12-16  Tom Tromey  <tromey at redhat.com>
+2012-07-06  Siddhesh Poyarekar  <siddhesh at redhat.com>
 
-	* linespec.c (collect_symbols): Call maybe_add_address after
-	calling symbol_to_sal.
-	(minsym_found): Call maybe_add_address here.
-	(search_minsyms_for_name): Don't call maybe_add_address.
+	* MAINTAINERS (Write After Approval): Add myself to the list.
 
-2011-12-16  Tom Tromey  <tromey at redhat.com>
+2012-07-05  Doug Evans  <dje at google.com>
 
-	* linespec.c (struct collect_info) <objfile>: Remove field.
-	(decode_objc): Update.
-	(find_method): Update.
-	(decode_variable): Update.
-	(struct minsym_and_objfile): New.
-	(struct collect_minsyms): New.
-	(classify_mtype): New function.
-	(compare_msyms): Likewise.
-	(add_minsym): Likewise.
-	(check_minsym): Remove.
-	(search_minsyms_for_name): Sort minsyms and apply only those with
-	top priority.
+	* dwarf2read.c (dw2_expand_symtabs_matching): Fix typo.
 
-2011-12-16  Tom Tromey  <tromey at redhat.com>
+2012-07-05  Hui Zhu  <hui_zhu at mentor.com>
 
-	* cli/cli-cmds.c (filter_sals): Filter out sals with NULL symtab.
+	* ax-gdb.c (cli/cli-utils.h): New include.
+	(linespec.h): Ditto.
+	(agent_eval_command_one): New function.
+	(agent_command_1): Ditto.
+	(agent_command): Call function agent_command_1.
+	(agent_eval_command): Ditto.
+	(_initialize_ax_gdb): Change help for "maint agent"
+	and "maint agent-eval".
 
-2011-12-16  Phil Muldoon  <pmuldoon at redhat.com>
+2012-07-05  Hui Zhu  <hui_zhu at mentor.com>
 
-	* python/python.c: Define python_excp_enums.
-	(eval_python_from_control_command): Do not call gdbpy_print_stack.
-	(python_command): Ditto.
-	(gdbpy_print_stack): Rewrite to use new enum constants.
-	(maint_set_python): Remove function.
-	(maint_show_python): Ditto.
-	(_initialize_python): Do not add "maint" commands.  Add "set/show
-	python print-stack commands".
-	* NEWS: Update to reflect removal for "maint set/show
-	print-stack"
+	* breakpoint.c (check_for_argument): Move to file cli/cli-utils.c.
+	* cli/cli-utils.c (check_for_argument): New function.
+	* cli/cli-utils.h (check_for_argument): Ditto.
 
-2011-12-15  Tom Tromey  <tromey at redhat.com>
+2012-07-04  H.J. Lu  <hongjiu.lu at intel.com>
 
-	* symfile.c (symbol_file_add_with_addrs_or_offsets): Remove bad
-	do_cleanups call.
+	* NEWS: Mention x32 ABI support.
 
-2011-12-14  Pedro Alves  <pedro at codesourcery.com>
+2012-07-04  H.J. Lu  <hongjiu.lu at intel.com>
 
-	* ia64-tdep.c (ia64_memory_remove_breakpoint): Use
-	target_write_raw_memory.
-	* m32r-tdep.c (m32r_memory_remove_breakpoint): Use
-	target_write_raw_memory.
-	* microblaze-linux-tdep.c
-	(microblaze_linux_memory_remove_breakpoint): Use
-	target_write_raw_memory.
-	* ppc-linux-tdep.c (ppc_linux_memory_remove_breakpoint): Use
-	target_write_raw_memory.
+	* amd64-tdep.c (amd64_x32_init_abi): Set sp_regnum_from_eax to
+	AMD64_RSP_REGNUM and pc_regnum_from_eax to AMD64_RIP_REGNUM.
 
-2011-12-14  Yao Qi  <yao at codesourcery.com>
+	* i386-tdep.c (i386_gdbarch_init): Initialize sp_regnum_from_eax
+	and pc_regnum_from_eax to -1.  Update SP regnum from
+	sp_regnum_from_eax and PC regnum from pc_regnum_from_eax if
+	needed.
 
-	* breakpoint.c (create_breakpoint): Set canonical.addr_string
-	for static tracepoint.
+	* i386-tdep.h (gdbarch_tdep): Add sp_regnum_from_eax and
+	pc_regnum_from_eax.
 
-2011-12-13  Joel Brobecker  <brobecker at adacore.com>
+2012-07-03  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* version.in: Set version to 7.3.91.20111213-cvs.
+	Fix 'warning: parameter has incomplete type' with gcc-3.4.6.
+	* dwarf2expr.h: Include gdbtypes.h.
+	(enum call_site_parameter_kind, union call_site_parameter_u): Remove
+	these forward declarations.
+	(cu_offset, sect_offset): Move these ...
+	* gdbtypes.h: Remove include dwarf2expr.h.
+	(cu_offset, sect_offset): ... here.
 
-2011-12-13  Joel Brobecker  <brobecker at adacore.com>
+2012-07-03  H.J. Lu  <hongjiu.lu at intel.com>
 
-	GDB 7.3.91 released.
+	* amd64-linux-tdep.c (linux_sigtramp_code): Renamed to ...
+	(amd64_linux_sigtramp_code): This.
+	(amd64_x32_linux_sigtramp_code): New.
+	(LINUX_SIGTRAMP_LEN): Updated.
+	(amd64_linux_sigtramp_start): Check x32 sigtramp.
 
-2011-12-13  Joel Brobecker  <brobecker at adacore.com>
+2012-07-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* version.in: Update GDB version number to 7.3.91.
+	* linux-thread-db.c (thread_db_new_objfile): Fix comment typos.
 
-2011-12-13  Joel Brobecker  <brobecker at adacore.com>
+2012-07-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* configure.ac: Disable -Werror by default.
+	* config.in: Regenerate.
 	* configure: Regenerate.
+	* configure.ac: Remove check for gnu/libc-version.h.
+	* linux-thread-db.c <HAVE_GNU_LIBC_VERSION_H>: Remove include of
+	gnu/libc-version.h.
+	(enable_thread_event_reporting) <HAVE_GNU_LIBC_VERSION_H>: Remove
+	variables libc_version, libc_major and libc_minor.  Replace sscanf by
+	inferior_has_bug.  Extend the comment.
+
+2012-07-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* linux-thread-db.c (inferior_has_bug): New function.
+	(thread_db_find_new_threads_silently): Return boolean as checked by
+	inferior_has_bug, describe it in the comments.
+	(try_thread_db_load_1): Move call to thread_db_find_new_threads_silently
+	earlier.  Abort the initialization if it returned non-zero.
+	(thread_db_new_objfile): Exclude debug files.
+	(thread_db_find_new_threads_2): Preinitialize ERR.  Check errors also
+	if UNTIL_NO_NEW,
+
+2012-07-02  Doug Evans  <dje at google.com>
+
+	* dwarf2read.c (maybe_queue_comp_unit): Move definition next to others
+	related to queue management.
+
+	* dwarf2read.c (create_debug_types_hash_table): Use "debug dwarf2-read"
+	instead of "debug dwarf2-die" in debugging printfs.
+	(create_debug_info_hash_table_reader): Ditto.
+	(create_debug_info_hash_table): Ditto.
+	(init_dwo_file): Ditto.
+	(init_cutu_and_read_dies): Add debugging printf.
+	(init_cutu_and_read_dies_no_follow): Ditto.
+	(process_psymtab_comp_unit_reader): Ditto.
+
+2012-07-02  Stan Shebs  <stan at codesourcery.com>
+
+	Add target-side support for dynamic printf.
+	* NEWS: Mention the additional style.
+	* breakpoint.h (struct bp_target_info): New fields tcommands, persist.
+	(struct bp_location): New field cmd_bytecode.
+	* breakpoint.c: Include format.h.
+	(disconnected_dprintf): New global.
+	(parse_cmd_to_aexpr): New function.
+	(build_target_command_list): New function.
+	(insert_bp_location): Call it.
+	(remove_breakpoints_pid): Skip dprintf breakpoints.
+	(print_one_breakpoint_location): Ditto.
+	(dprintf_style_agent): New global.
+	(dprintf_style_enums): Add dprintf_style_agent.
+	(update_dprintf_command_list): Add agent case.
+	(agent_printf_command): New function.
+	(_initialize_breakpoint): Add new commands.
+	* common/ax.def (printf): New bytecode.
+	* ax.h (ax_string): Declare.
+	* ax-gdb.h (gen_printf): Declare.
+	* ax-gdb.c: Include cli-utils.h, format.h.
+	(gen_printf): New function.
+	(maint_agent_print_command): New function.
+	(_initialize_ax_gdb): Add maint agent-printf command.
+	* ax-general.c (ax_string): New function.
+	(ax_print): Add printf disassembly.
+	* Makefile.in (SFILES): Add format.c
+	(COMMON_OBS): Add format.o.
+	* common/format.h: New file.
+	* common/format.c: New file.
+	* printcmd.c: Include format.h.
+	(ui_printf): Call parse_format_string.
+	* remote.c (remote_state): New field breakpoint_commands.
+	(PACKET_BreakpointCommands): New enum.
+	(remote_breakpoint_commands_feature): New function.
+	(remote_protocol_features): Add new BreakpointCommands entry.
+	(remote_can_run_breakpoint_commands): New function.
+	(remote_add_target_side_commands): New function.
+	(remote_insert_breakpoint): Call it.
+	(remote_insert_hw_breakpoint): Ditto.
+	(_initialize_remote): Add new packet configuration for
+	target-side breakpoint commands.
+	* target.h (struct target_ops): New field
+	to_can_run_breakpoint_commands.
+	(target_can_run_breakpoint_commands): New macro.
+	* target.c (update_current_target): Handle
+	to_can_run_breakpoint_commands.
+
+2012-07-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Execute -ix and -iex only after system and user gdbinit files.
+	* main.c (captured_main): Move CMDARG_INIT_FILE and CMDARG_INIT_COMMAND
+	processing down after gdbinit files.
+
+2012-07-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Add fnmatch-gnu module.
+	* gnulib/Makefile.in (aclocal_m4_deps): Add new files and remove one.
+	* gnulib/configure.ac (AC_INIT): Use now import/memmem.c.
+	* gnulib/aclocal.m4: Regenerate.
+	* gnulib/config.in: Regenerate.
+	* gnulib/configure: Regenerate.
+	* gnulib/import/dummy.c: Remove.
+	* gnulib/import/Makefile.am: Regenerate.
+	* gnulib/import/Makefile.in: Likewise.
+	* gnulib/import/m4/gnulib-cache.m4: Likewise.
+	* gnulib/import/m4/gnulib-comp.m4: Likewise.
+	* gnulib/import/alloca.c: New file.
+	* gnulib/import/alloca.in.h: Likewise.
+	* gnulib/import/config.charset: Likewise.
+	* gnulib/import/fnmatch.c: Likewise.
+	* gnulib/import/fnmatch.in.h: Likewise.
+	* gnulib/import/fnmatch_loop.c: Likewise.
+	* gnulib/import/localcharset.c: Likewise.
+	* gnulib/import/localcharset.h: Likewise.
+	* gnulib/import/m4/alloca.m4: Likewise.
+	* gnulib/import/m4/codeset.m4: Likewise.
+	* gnulib/import/m4/configmake.m4: Likewise.
+	* gnulib/import/m4/fcntl-o.m4: Likewise.
+	* gnulib/import/m4/fnmatch.m4: Likewise.
+	* gnulib/import/m4/glibc21.m4: Likewise.
+	* gnulib/import/m4/localcharset.m4: Likewise.
+	* gnulib/import/m4/locale-fr.m4: Likewise.
+	* gnulib/import/m4/locale-ja.m4: Likewise.
+	* gnulib/import/m4/locale-zh.m4: Likewise.
+	* gnulib/import/m4/mbrtowc.m4: Likewise.
+	* gnulib/import/m4/mbsinit.m4: Likewise.
+	* gnulib/import/m4/mbsrtowcs.m4: Likewise.
+	* gnulib/import/m4/mbstate_t.m4: Likewise.
+	* gnulib/import/m4/stdbool.m4: Likewise.
+	* gnulib/import/m4/wchar_h.m4: Likewise.
+	* gnulib/import/m4/wctype_h.m4: Likewise.
+	* gnulib/import/m4/wint_t.m4: Likewise.
+	* gnulib/import/mbrtowc.c: Likewise.
+	* gnulib/import/mbsinit.c: Likewise.
+	* gnulib/import/mbsrtowcs-impl.h: Likewise.
+	* gnulib/import/mbsrtowcs-state.c: Likewise.
+	* gnulib/import/mbsrtowcs.c: Likewise.
+	* gnulib/import/ref-add.sin: Likewise.
+	* gnulib/import/ref-del.sin: Likewise.
+	* gnulib/import/stdbool.in.h: Likewise.
+	* gnulib/import/streq.h: Likewise.
+	* gnulib/import/strnlen1.c: Likewise.
+	* gnulib/import/strnlen1.h: Likewise.
+	* gnulib/import/verify.h: Likewise.
+	* gnulib/import/wchar.in.h: Likewise.
+	* gnulib/import/wctype.in.h: Likewise.
+
+2012-07-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Support shell wildcards for 'set auto-load safe-path'.
+	* auto-load.c: Include fnmatch.h.
+	(filename_is_in_dir): Rename to ...
+	(filename_is_in_pattern_1, filename_is_in_pattern): ... here and split
+	it.  Update function comment.  Rename dir_len to pattern_len.  New
+	variables filename_len, pattern and filename.  Add more DEBUG_AUTO_LOAD
+	messages.  Use gdb_filename_fnmatch.
+	(filename_is_in_auto_load_safe_path_vec): Rename variable dir to
+	pattern.
+	(_initialize_auto_load): Extend the "set auto-load safe-path" help text.
+	* defs.h (gdb_filename_fnmatch): New declaration.
+	* utils.c: Include fnmatch.h.
+	(gdb_filename_fnmatch): New function.
+
+2012-07-02  Sergio Durigan Junior  <sergiodj at redhat.com>
+
+	* breakpoint.c (BREAK_ARGS_HELP): Include help message for the new
+	`-probe' and `-probe-stap' options.
+
+2012-07-01  Yao Qi  <yao at codesourcery.com>
+
+	* breakpoint.c: Removed always_inserted_auto, always_inserted_on,
+	always_inserted_off, and always_inserted_enums.
+	Change always_inserted_mode's type to 'enum auto_boolean'.
+	(show_always_inserted_mode, breakpoint_always_inserted_mode): Update
+	callers.
+	(_initialize_breakpoint): Call add_setshow_auto_boolean_cmd instead
+	of add_setshow_enum_cmd.
+	* infrun.c: Remove can_use_displaced_stepping_auto,
+	can_use_displaced_stepping_on, can_use_displaced_stepping_off, and
+	can_use_displaced_stepping_enum.
+	Change can_use_displaced_stepping's type to 'enum auto_boolean'.
+	(show_can_use_displaced_stepping, use_displaced_stepping): Update callers.
+	(_initialize_infrun): Call add_setshow_auto_boolean_cmd instead of
+	add_setshow_enum_cmd.
+
+2012-06-30  Doug Evans  <dje at google.com>
+
+	* dwarf2read.c (signatured_type): Make "per_cu" member first.
+	(init_cutu_and_read_dies): Handle rereading a DWO CU while it's
+	currently being read.  Propagate DW_AT_comp_dir to DWO DIE.
+
+2012-06-29  Doug Evans  <dje at google.com>
+
+	* linespec.c: #include "stack.h".
+	(decode_line_with_current_source): Moved here from symtab.c and
+	renamed from decode_line_spec.  All callers updated.
+	(decode_line_with_last_displayed): Moved here from breakpoint.c and
+	renamed from decode_line_spec_1.  All callers updated.
+	* linespec.h (decode_line_with_current_source): Move declaration here
+	from symtab.h and renamed from decode_line_spec.
+	(decode_line_with_last_displayed): Move declaration here from symtab.h
+	and renamed from decode_line_spec_1.
+	* macrocmd.c: #include "linespec.h".
+	* symtab.c: Remove #include "linespec.h".
+
+2012-06-28  Doug Evans  <dje at google.com>
+
+	* dwarf2read.c (get_cu_length): New function.
+	(offset_in_cu_p, error_check_comp_unit_head): Call it.
+	(create_debug_types_hash_table): Ditto.
+	(init_cutu_and_read_dies): Ditto.
+	(init_cutu_and_read_dies_no_follow): Ditto.
+
+	* dwarf2read.c (dwarf2_find_base_address): Move definition.
+
+	* dwarf2read.c (ABBREV_HASH_SIZE): Remove enclosing #ifndef/#endif.
+	(struct abbrev_table): Define.
+	(dwarf2_cu): Replace members dwarf2_abbrevs, abbrev_obstack with
+	abbrev_table.
+	(init_cutu_and_read_dies): Update.
+	(abbrev_table_alloc_abbrev): New function.  Replaces
+	dwarf_alloc_abbrev.  All callers updated.
+	(abbrev_table_add_abbrev): New function.
+	(abbrev_table_lookup_abbrev): New function.  Replaces
+	dwarf2_lookup_abbrev.  All callers updated.
+	(abbrev_table_read_table): New function.  Contents moved here from
+	dwarf2_read_abbrevs.
+	(dwarf2_read_abbrevs): Call it.
+	(abbrev_table_free): New function.
+	(dwarf2_free_abbrev_table): Call it.
+
+2012-06-28  Stan Shebs  <stan at codesourcery.com>
+
+	* osdata.c (info_osdata_command): Filter out "Title" columns
+	from non-MI uses.
+	* common/linux-osdata.c (struct osdata_type): Add title field.
+	(osdata_table): Add titles to each entry.
+	(linux_command_xfer_osdata): Add a column for title data.
+
+2012-06-28  Stan Shebs  <stan at codesourcery.com>
+
+	Make logging work for MI.
+	* NEWS: Mention it.
+	* interps.h (interp_set_logging_ftype): New typedef.
+	(struct interp_procs): New field set_logging_proc.
+	(current_interp_set_logging): Declare.
+	* interps.c (current_interp_set_logging): New function.
+	* cli/cli-logging.c: Include interps.h.
+	(set_logging_redirect): Call current_interp_set_logging.
+	(pop_output_files): Ditto.
+	(handle_redirections): Ditto, plus skip ui-out redirect if MI.
+	* mi/mi-console.h (mi_console_set_raw): Declare.
+	* mi/mi-console.c (mi_console_set_raw): New function.
+	* mi/mi-interp.c (saved_raw_stdout): New global.
+	(mi_set_logging): New function.
+	(_initialize_mi_interp): Add it to interp procs.
+
+2012-06-28  Doug Evans  <dje at google.com>
+
+	* symtab.c (lookup_symbol_aux_objfile): Use
+	ALL_OBJFILE_PRIMARY_SYMTABS.
+
+	* gdbtypes.c (lookup_typename): Rename local variable "tmp" to "type".
+
+2012-06-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* common/buffer.c: Include inttypes.h and stdint.h.
+	(buffer_xml_printf): Use PRId64, PRIu64, PRIx64 and PRIo64.
+
+2012-06-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	    Pedro Alves  <palves at redhat.com>
 
-2011-12-13  Joel Brobecker  <brobecker at adacore.com>
+	* gdbthread.h (ALL_THREADS): New macro.
+	(thread_list): Declare.
+	* infrun.c (handle_inferior_event) <spurious signal>: Don't keep
+	going, but instead fall through to the stepping handling.
+	* linux-nat.c (resume_lwp): New parameter 'signo'.  Resume with
+	the passed in signal.  Adjust debug output.
+	(resume_callback): Rename to ...
+	(linux_nat_resume_callback): ... this.  Pass the thread's last
+	stop signal, if in "pass" state.
+	(linux_nat_resume): Adjust to rename.
+	(stop_wait_callback): New assertion.  Don't respawn signals;
+	instead let the LWP remain with SIGNALLED set.
+	(linux_nat_wait_1): Remove flushing of pending SIGSTOPs.
+	* remote.c (append_pending_thread_resumptions): New.
+	(remote_vcont_resume): Call it.
+	* target.h (target_resume): Extend comment.
+
+2012-06-28  Iain Sandoe  <iain at codesourcery.com>
+
+	* auxv.c (fprint_target_auxv): Handle extended cache data tags.
+
+2012-06-27  Doug Evans  <dje at google.com>
+
+	* dwarf2read.c (dwarf2_cu): Add ranges_base.
+	Delete have_addr_base, unused.  All uses updated.
+	(init_cutu_and_read_dies): Process DW_AT_GNU_ranges_base.
+	(dwarf2_get_pc_bounds): Add ranges_base.
+	(dwarf2_record_block_ranges): Ditto.
+
+2012-06-27  Tom Tromey  <tromey at redhat.com>
+
+	PR macros/7961:
+	* varobj.c (varobj_create): Update.
+	(varobj_set_value): Update.
+	* tracepoint.c (validate_actionline): Update.
+	(encode_actions_1): Update.
+	* parse.c (parse_exp_1): Add 'pc' argument.
+	(parse_exp_in_context): Add 'pc' argument.  Change how
+	expression_context_pc is set.
+	(parse_expression): Update.
+	(parse_field_expression): Update.
+	* expression.h (parse_exp_1): Update.
+	* eval.c (parse_to_comma_and_eval): Update.
+	* breakpoint.c (set_breakpoint_condition): Update.
+	(update_watchpoint): Update.
+	(init_breakpoint_sal): Update
+	(find_condition_and_thread): Update.
+	(watch_command_1): Update.
+	(update_breakpoint_locations): Update.
+	* ada-lang.c (ada_read_renaming_var_value): Update.
+	(create_excep_cond_exprs): Update.
+
+2012-06-27  Doug Evans  <dje at google.com>
+
+	* dwarf2read.c (per_cu_header_read_in): Simplify, and handle
+	type units.
+
+2012-06-26  Doug Evans  <dje at google.com>
+
+	* dwarf2read.c (read_and_check_comp_unit_head): Delete unnecessary
+	prototype.
+	(error_check_comp_unit_head): New arg abbrev_section.  All callers
+	updated.
+	(read_and_check_comp_unit_head): Ditto.
+	(read_and_check_type_unit_head): Ditto.
+
+2012-06-26  Siva Chandra Reddy  <sivachandra at google.com>
+
+	New attribute 'last' for gdb.Symtab_and_line.
+	* NEWS (Python Scripting): Add entry about the new attribute.
+	* python/py-symtab.c (salpy_get_last): New function which
+	implements the get method for the 'last' attribute of
+	gdb.Symtab_and_line.
+	(sal_object_getset): Add entry for the 'last' attribute.
+
+2012-06-26  Doug Evans  <dje at google.com>
+
+	* dwarf2read.c (dwo_section_names): Add macinfo_dwo, macro_dwo.
+	(dwo_sections): Add macinfo, macro.
+	(dwarf2_locate_dwo_sections): Watch for macro sections.
+	(dwarf_decode_macros): Remove args lh, abfd, section, section_name.
+	All callers updated.  Handle DWO files.
+
+	* NEWS: Mention new options "set debug dwarf2-read" and
+	"set debug symtab-create".
+	* dwarf2read.c (dwarf2_read_debug): New static global.
+	(dwarf2_build_psymtabs_hard): Add debugging printfs.
+	(process_queue): Ditto.
+	(process_full_comp_unit): Ditto.
+	(_initialize_dwarf2_read): Add new option "set debug dwarf2-read".
+	* elfread.c (elf_symfile_read): Add debugging printf.
+	* minsyms.c (install_minimal_symbols): Ditto.
+	* psymtab.c (allocate_psymtab): Ditto.
+	* symfile.c (allocate_symtab): Ditto.
+	* symtab.c (symtab_create_debug): New global.
+	(_initialize_symtab): Add new option "set debug symtab-create".
+	* symtab.h (symtab_create_debug): Declare.
+
+	* dwarf2read.c (lookup_dwo_comp_unit): Enhance comment.
+	(lookup_dwo_type_unit): Ditto.
+
+2012-06-26  Roland McGrath  <roland at hack.frob.com>
+	    H.J. Lu  <hongjiu.lu at intel.com>
+
+	* amd64-linux-nat.c: Include <sys/user.h>.
+	(ps_get_thread_area): Use PTRACE_PEEKUSER to get fs_base/gs_base
+	if HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE or
+	HAVE_STRUCT_USER_REGS_STRUCT_GS_BASE is defined.
+
+	* configure.ac: Check if the fs_base and gs_base members of
+	`struct user_regs_struct' exist.
+	* config.in: Regenerated.
+	* configure: Likewise.
+
+2012-06-25  Michael Eager  <eager at eagercon.com>
+
+	PR python/14291
+	* python/python.c (gdbpy_write): Check for interrupted output. 
+
+2012-06-25  Greta Yorsh  <greta.yorsh at arm.com>
+
+	* arm-tdep.c (arm_in_function_epilogue_p): Recognize POP with a single
+	register as a stack alignment in ARM mode.
+
+2012-06-24  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Update gnulib to GIT commit a39f53ccb70a613e647e1019fb4c63645220267e.
+	* gnulib/config.in: Regenerate.
+	* gnulib/configure: Likewise.
+	* gnulib/import/m4/extensions.m4: Update it.
+	* gnulib/import/m4/gnulib-common.m4: Likewise.
+	* gnulib/import/m4/memmem.m4: Likewise.
+	* gnulib/import/m4/mmap-anon.m4: Likewise.
+	* gnulib/import/m4/multiarch.m4: Likewise.
+	* gnulib/import/stdint.in.h: Likewise.
+
+2012-06-24  Yao Qi  <yao at codesourcery.com>
+
+	* corefile.c (write_memory_with_notification): New.
+	* gdbcore.h: Declare write_memory_with_notification.
+	* ada-lang.c (ada_value_assign): Replace 'write_memory' and
+	'observer_notify_memory_changed' with 'write_memory_with_notification'.
+	* valops.c (value_assign): Likewise.
+	* python/py-inferior.c (infpy_write_memory): Call
+	'write_memory_with_notification'.
+
+2012-06-24  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* cc-with-index.sh: Use also -ex "set auto-load no".
+
+2012-06-23  Doug Evans  <dje at google.com>
+
+	PR 14125
+	* NEWS: Document additions to .gdb_index.
+	* dwarf2read.c: #include "gdb/gdb-index.h".
+	(DW2_GDB_INDEX_SYMBOL_STATIC_SET_VALUE): New macro.
+	(DW2_GDB_INDEX_SYMBOL_KIND_SET_VALUE): New macro.
+	(DW2_GDB_INDEX_CU_SET_VALUE): New macro.
+	(dwarf2_read_index): Recognize version 7.
+	(dw2_do_expand_symtabs_matching): New args want_specific_block,
+	block_kind, domain): All callers updated.
+	(dw2_find_symbol_file): Handle new index CU values.
+	(dw2_expand_symtabs_matching): Match symbol kind if requested.
+	(add_index_entry): New args is_static, kind.  All callers updated.
+	(offset_type_compare, uniquify_cu_indices): New functions
+	(symbol_kind): New function.
+	(write_psymtabs_to_index): Remove duplicate CU values.
+	(write_psymtabs_to_index): Write .gdb_index version 7.
+
+2012-06-22  Joel Brobecker  <brobecker at adacore.com>
+
+	* configure.ac (build_warnings): Add -Wdeclaration-after-statement.
+	* configure: Regenerate.
 
-	GDB 7.4 branch created (branch timestamp: 2011-12-13 13:00 UTC)
-	* version.in: Bump version to 7.3.90.20111213-cvs.
+2012-06-20  Yao Qi  <yao at codesourcery.com>
+
+	* python/py-inferior.c: Update comments of infpy_read_memory
+	and infpy_write_memory.
+
+2012-06-19  Tom Tromey  <tromey at redhat.com>
+
+	PR exp/9514:
+	* parser-defs.h (insert_type, insert_type_address_space): Declare.
+	(push_type_address_space): Remove.
+	* parse.c (insert_into_type_stack): New function.
+	(insert_type): Likewise.
+	(insert_type_address_space): Rename from push_type_address_space.
+	Insert tp_space_identifier.
+	* c-exp.y (ptr_operator): New production.
+	(abs_decl): Use ptr_operator.
+	(space_identifier): Call insert_type_address_space.
+	(ptype): Don't use const_or_volatile_or_space_identifier.
+	(const_or_volatile_noopt): Call insert_type.
+	(conversion_type_id, conversion_declarator): New productions.
+	(operator): Use conversion_type_id.
+
+2012-06-18  Doug Evans  <dje at google.com>
+
+	* symtab.h (minimal_symbol): New member created_by_gdb.
+	* elfread.c (elf_symtab_read): Set created_by_gdb for @plt minsym
+	created by gdb.
+	* symtab.c (lookup_symbol_in_objfile_from_linkage_name): New function.
+	(search_symbols): Call it instead of lookup_symbol.
+	Skip symbols created by gdb.  Only scan minsyms if nfiles == 0.
+
+	* dwarf2expr.c (execute_stack_op): Handle DW_OP_GNU_const_index.
+	Adjust address for DW_OP_GNU_addr_index.
+	* dwarf2expr.h (dwarf_expr_context): Update comment.
+	* dwarf2loc.c (locexpr_describe_location_piece): New arg per_cu,
+	all callers updated.  Handle TLS vars described with
+	DW_OP_GNU_const_index.
+	(disassemble_dwarf_expression): Handle DW_OP_GNU_addr_index
+	and DW_OP_GNU_const_index.
+	* dwarf2read.c (decode_locdesc): Handle DW_OP_GNU_addr_index.
+
+	* block.c (find_block_in_blockvector): Make explicit the fact that we
+	ignore GLOBAL_BLOCK.
+
+2012-06-18  Tom Tromey  <tromey at redhat.com>
+
+	* c-exp.y (operator): Remove trailing space after "delete" and
+	"delete[]".
+
+2012-06-18  Mark Kettenis  <kettenis at gnu.org>
+	    Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-12-11  Joel Brobecker  <brobecker at adacore.com>
+	Switch i386 and derived targets to ON_STACK.
+	* amd64-dicos-tdep.c (amd64_dicos_push_dummy_code): Remove.
+	(amd64_dicos_init_abi): Remove its installment.
+	* dicos-tdep.c (dicos_init_abi): Remove the
+	set_gdbarch_call_dummy_location call.  Update the comment here.
+	* i386-dicos-tdep.c (i386_dicos_push_dummy_code): Remove.
+	(i386_dicos_init_abi): Remove its installment.
+	* i386-tdep.c (i386_push_dummy_code): New function.
+	(i386_gdbarch_init): Call set_gdbarch_call_dummy_location, install
+	i386_push_dummy_code.
+
+2012-06-18  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Remove stale dummy frames.
+	* breakpoint.c: Include dummy-frame.h.
+	(longjmp_breakpoint_ops): New variable.
+	(update_breakpoints_after_exec, breakpoint_init_inferior): Delete also
+	bp_longjmp_call_dummy.
+	(bpstat_what, bptype_string, print_one_breakpoint_location)
+	(init_bp_location): Support bp_longjmp_call_dummy.
+	(set_longjmp_breakpoint): Use longjmp_breakpoint_ops.  Comment why.
+	(set_longjmp_breakpoint_for_call_dummy)
+	(check_longjmp_breakpoint_for_call_dummy, longjmp_bkpt_dtor): New
+	functions.
+	(initialize_breakpoint_ops): Initialize longjmp_breakpoint_ops.
+	* breakpoint.h (enum bptype): New item bp_longjmp_call_dummy.  Delete
+	FIXME comment and extend the other comment for bp_call_dummy.
+	(set_longjmp_breakpoint_for_call_dummy)
+	(check_longjmp_breakpoint_for_call_dummy): New declarations.
+	* dummy-frame.c: Include gdbthread.h.
+	(pop_dummy_frame_bpt): New function.
+	(pop_dummy_frame): Call pop_dummy_frame_bpt.
+	(dummy_frame_discard): New function.
+	(cleanup_dummy_frames): Update the comment about longjmps.
+	* dummy-frame.h (dummy_frame_discard): New declaration.
+	* gdbthread.h (struct thread_info): Extend initiating_frame comment.
+	* infcall.c (call_function_by_hand): New variable longjmp_b.  Call
+	set_longjmp_breakpoint_for_call_dummy.  Chain its breakpoints with BPT.
+	* infrun.c (handle_inferior_event) <BPSTAT_WHAT_CLEAR_LONGJMP_RESUME>:
+	Add case 4 comment.  Call check_longjmp_breakpoint_for_call_dummy and
+	keep_going if IS_LONGJMP and there is no other reason to stop.
+
+2012-06-18  Greta Yorsh  <Greta.Yorsh at arm.com>
+
+	* remote-sim.c (sim_command_completer): Initialize
+	variable 'result'.
+
+2012-06-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* dwarf2expr.c (execute_stack_op): Support DW_OP_GNU_parameter_ref.
+	* dwarf2loc.c (call_site_parameter_matches): Support
+	CALL_SITE_PARAMETER_PARAM_OFFSET.
+	(needs_dwarf_reg_entry_value): Push stub value.
+	* dwarf2read.c (read_call_site_scope): New variable origin.  Support
+	CALL_SITE_PARAMETER_PARAM_OFFSET and its DW_AT_abstract_origin.
+	* gdbtypes.h (enum call_site_parameter_kind): New item
+	CALL_SITE_PARAMETER_PARAM_OFFSET.
+	(struct call_site.parameter.u): New field param_offset.
+
+2012-06-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup: Generalize call_site.parameter key.
+	* dwarf2expr.c (execute_stack_op) <DW_OP_GNU_entry_value>: Remove
+	variable dwarf_reg.  New variable kind_u.  Update parameters to
+	push_dwarf_reg_entry_value.
+	(ctx_no_push_dwarf_reg_entry_value): Update parameters.
+	* dwarf2expr.h (enum call_site_parameter_kind)
+	(union call_site_parameter_u): Forward declarations.
+	(struct dwarf_expr_context_funcs): Update parameters and their
+	description for push_dwarf_reg_entry_value.
+	(ctx_no_push_dwarf_reg_entry_value): Update parameters.
+	* dwarf2loc.c (call_site_parameter_matches): New function.
+	(dwarf_expr_reg_to_entry_parameter): Update parameters and their
+	description.  Use call_site_parameter_matches.
+	(dwarf_expr_push_dwarf_reg_entry_value, value_of_dwarf_reg_entry):
+	Update parameters and their description.
+	(value_of_dwarf_block_entry): Remove variables dwarf_reg and fb_offset.
+	New variable kind_u.  Adjust the caller for updated parameters.
+	(needs_dwarf_reg_entry_value): Update parameters.
+	* dwarf2read.c (read_call_site_scope): New variable loc.  Use it
+	instead of attr.  Update for the changed fields of struct
+	call_site_parameter.
+	* gdbtypes.h: Include dwarf2expr.h.
+	(enum call_site_parameter_kind): New.
+	(struct call_site.parameter): New field kind.  Wrap dwarf_reg and
+	fb_offset into new union u.
+
+2012-06-16  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* amd64-tdep.c (amd64_x32_analyze_stack_align): New function.
+	(amd64_analyze_prologue): Call amd64_x32_analyze_stack_align
+	for x32.
+
+2012-06-16  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* amd64-linux-nat.c (compat_x32_clock_t): New.
+	(compat_x32_siginfo_t): Likewise.
+	(compat_x32_siginfo_from_siginfo): Likewise.
+	(siginfo_from_compat_x32_siginfo): Likewise.
+	(amd64_linux_siginfo_fixup): Call compat_x32_siginfo_from_siginfo
+	and siginfo_from_compat_x32_siginfo for x32.
+
+2012-06-15  Hui Zhu  <hui_zhu at mentor.com>
+
+	* tracepoint.c (tfile_xfer_partial): Add a lseek.
+
+2012-06-15  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* amd64-linux-nat.c (ps_get_thread_area): Check bits_per_word
+	instead of gdbarch_ptr_bit.
+	* amd64-nat.c (amd64_native_gregset_reg_offset): Likewise.
+	(amd64_supply_native_gregset): Likewise.
+	(amd64_collect_native_gregset): Likewise.
+	* amd64-tdep.c (amd64_supply_fxsave): Likewise.
+	(amd64_supply_xsave): Likewise.
+	(amd64_collect_fxsave): Likewise.
+	(amd64_collect_xsave): Likewise.
+
+2012-06-15  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* amd64-linux-nat.c (AMD64_LINUX_X32_DS): New.
+	(amd64_linux_read_description): Check DS segment register for
+	x32 process.
+
+2012-06-15  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2read.c (dw2_find_symbol_file): Unconditionally use
+	init_cutu_and_read_dies.
+
+2012-06-15  Iain Sandoe <iain at codesourcery.com>
 
-	* ada-lang.c (ada_exception_support_info_sniffer): Improve
-	error message.
+	* MAINTAINERS (Write After Approval): Add myself to the list.
 
-2011-12-11  Joel Brobecker  <brobecker at adacore.com>
+2012-06-15  Tom Tromey  <tromey at redhat.com>
 
-	* ada-lang.c (struct ada_inferior_data) [exception_info]:
-	New field.
-	(exception_info): Delete.
-	(ada_exception_support_info_sniffer): Get exception_support_info
-	data from our per-inferior data.  Adjust code accordingly.
-	(ada_unhandled_exception_name_addr_from_raise): Likewise.
-	(ada_exception_name_addr_1, ada_exception_sym_name): Ditto.
-	(ada_executable_changed_observer): Delete.
-	(_initialize_ada_language): Remove call to
-	observer_attach_executable_changed.
+	* valops.c (value_find_oload_method_list): Now static.
+	* value.h (value_find_oload_method_list): Don't declare.
 
-2011-12-11  Joel Brobecker  <brobecker at adacore.com>
+2012-06-15  Tom Tromey  <tromey at redhat.com>
 
-	* ada-lang.c (ada_has_this_exception_support): Raise an error
-	if we could find the Ada exception hook in the Ada runtime,
-	but no debugging info for that hook.
+	* valops.c (find_overload_match): Use value_ind.
 
-2011-12-11  Joel Brobecker  <brobecker at adacore.com>
+2012-06-15  Maciej W. Rozycki  <macro at codesourcery.com>
 
-	* ada-lang.c (ada_has_this_exception_support): New function,
-	extracted out of ada_exception_sal and ada_exception_sal.
-	(ada_exception_support_info_sniffer): Simplify by using
-	ada_has_this_exception_support.
-	(ada_exception_sal): Replace unnecessary checks by assertions.
-	Minor simplifications.
+	* infrun.c (handle_inferior_event): Correct indentation.
 
-2011-12-10  Andrey Smirnov  <andrew.smirnov at gmail.com>
+2012-06-14  Doug Evans  <dje at google.com>
 
-	* breakpoint.c (update_global_location_list): Remove nested
-	definition of `b'(-Wshadow).
+	* dwarf2loc.c (debug_loc_kind): Add DEBUG_LOC_START_LENGTH.
+	(DEBUG_LOC_START_END): Renamed from DEBUG_LOC_NORMAL.
+	All uses updated.
+	(decode_debug_loc_dwo_addresses): New arg "byte_order".  All callers
+	updated.  Handle DEBUG_LOC_START_LENGTH.
+	(dwarf2_find_location_expression): Handle DEBUG_LOC_START_LENGTH.
+	(loclist_describe_location): Ditto.
 
-2011-12-10  Andrey Smirnov  <andrew.smirnov at gmail.com>
+2012-06-14  Maciej W. Rozycki  <macro at codesourcery.com>
 
-	* breakpoint.c (insert_breakpoint_locations): Rename `error' to
-	`error_flag'(-Wshadow).
+	PR backtrace/13866
+	* infrun.c (handle_inferior_event): Re-fetch frame and gdbarch
+	after hiding inline functions.
 
-2011-12-10  Andrey Smirnov  <andrew.smirnov at gmail.com>
+2012-06-13  Joel Brobecker  <brobecker at adacore.com>
 
-	* bfd-target.c (target_bfd_reopen): Rename `bfd' to
-	`abfd'(-Wshadow).
+	* inf-ttrace.c (_initialize_hppa_hpux_nat): Rename into
+	_initialize_inf_ttrace.
 
-2011-12-10  Andrey Smirnov  <andrew.smirnov at gmail.com>
+2012-06-13  Joel Brobecker  <brobecker at adacore.com>
 
-	* annotate.c (annotate_array_section_begin): Rename `index' to
-	`idx'(-Wshadow).
+	* ia64-hpux-nat.c (_initialize_ia64_hpux_nat): Renames
+	_initialize_hppa_hpux_nat.
 
-2011-12-10  Andrey Smirnov  <andrew.smirnov at gmail.com>
+2012-06-13  Joel Brobecker  <brobecker at adacore.com>
 
-	* amd64-tdep.c (amd64_get_unused_input_int_reg): Rename `index' to
-	`idx'(-Wshadow).
+	* remote-sim.c (sim_command_completer): Change type of return
+	value to "VEC (char_ptr) *".  Adjust implementation accordingly.
 
-2011-12-10  Andrey Smirnov  <andrew.smirnov at gmail.com>
+2012-06-13  Mark Kettenis  <kettenis at gnu.org>
+	    Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* amd64-linux-tdep.c (amd64_canonicalize_syscall): Rename
-	`syscall' to `syscall_number'(-Wshadow).
+	PR tdep/14222
+	* i386-tdep.c (i386_push_dummy_call): Unconditionally align the
+	stack on a 16-byte boundary.
+
+2012-06-13  Kaushik Srenevasan  <kaushik at twitter.com>
+
+	* jit.c (finalize_symtab): Set function's return type to 'void' by
+	default.
+
+2012-06-13  Mark Kettenis  <kettenis at gnu.org>
+	    H.J. Lu  <hongjiu.lu at intel.com>
+
+	* amd64-linux-tdep.c (amd64_linux_init_abi_common): New function.
+	Move bits common to both the classic LP64 and the new x32 ILP32
+	ABI here.
+	(amd64_linux_init_abi): Call amd64_linux_init_abi_common.
+	(amd64_x32_linux_init_abi): New function.
+	(_initialize_amd64_linux_tdep): Register osabi for bfd_mach_x64_32
+	subtype.
+
+	* i386-tdep.h (i386_pseudo_register_name): New prototype.
+	* i386-tdep.c (i386_pseudo_register_name): Make public.
+	* amd64-tdep.h (amd64_x32_init_abi): New prototype.
+	* amd64-tdep.c (amd64_dword_names): Add "eip".
+	(amd64_x32_pseudo_register_type): New function
+	(amd64_x32_init_abi): New function.
+
+2012-06-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	PR build/14003
+	* inferior.h (struct inferior_suspend_state): Comment out.
+	(struct inferior): Comment out the field suspend.
+	* infrun.c (struct infcall_suspend_state): Comment out the field
+	inferior_suspend.
+	(save_infcall_suspend_state, restore_infcall_suspend_state): Comment
+	out its assignment.
+
+2012-06-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	PR c++/14177 - Fix parsing TYPENAME:: in parentheses.
+	* c-exp.y (classify_inner_name): Remove caller assumptions in the
+	function comment.  Return ERROR for unresolved cases.  Implement
+	returning proper NAME.
+	(yylex): Accept also NAME from classify_inner_name.
+	* cp-namespace.c (cp_lookup_nested_type): Rename to ...
+	(cp_lookup_nested_symbol): ... here.  Return any found symbol, not just
+	LOC_TYPEDEF type.
+	* cp-support.h (cp_lookup_nested_type): Update its declaration.
+
+2012-06-13  Tom Tromey  <tromey at redhat.com>
+
+	* breakpoint.c (condition_completer): New function.
+	(_initialize_breakpoint): Use it.
+	* value.c (complete_internalvar): New function.
+	* value.h (complete_internalvar): Declare.
+
+2012-06-13  Tom Tromey  <tromey at redhat.com>
+
+	* ada-lang.c (ada_make_symbol_completion_list): Return a VEC.
+	* breakpoint.c (catch_syscall_completer): Return a VEC.
+	* cli/cli-cmds.c (complete_command): Update.
+	* cli/cli-decode.c (complete_on_cmdlist): Return a VEC.
+	(complete_on_enum): Likewise.
+	* command.h: Include gdb_vecs.h.
+	(completer_ftype): Change return type.
+	(complete_on_cmdlist, complete_on_enum): Likewise.
+	* completer.c (noop_completer, filename_completer)
+	(location_completer): Return a VEC.
+	(add_struct_fields): Remove 'nextp' argument.  Change 'output'
+	to a VEC.
+	(expression_completer, complete_line_internal, complete_line)
+	(command_completer): Return a VEC.
+	(gdb_completion_word_break_characters, line_completion_function):
+	Update.
+	* completer.h: Include gdb_vecs.h.
+	(complete_line, noop_completer, filename_completer)
+	(expression_completer, location_completer, command_completer):
+	Update.
+	* f-lang.c (f_word_break_characters): Return a VEC.
+	* interps.c (interpreter_completer): Return a VEC.
+	* language.h (struct language_defn)
+	<la_make_symbol_completion_list>: Return a VEC.
+	* python/py-cmd.c (cmdpy_completer): Return a VEC.
+	* symtab.c (free_completion_list): Take a VEC.
+	(return_val_size, return_val_index): Remove.
+	(return_val): Now a VEC.
+	(completion_list_add_name): Update.
+	(default_make_symbol_completion_list_break_on)
+	(default_make_symbol_completion_list, make_symbol_completion_list)
+	(make_symbol_completion_list_fn, make_file_symbol_completion_list):
+	Return a VEC.
+	(add_filename_to_list): Update.
+	(struct add_partial_filename_data) <list_used, list_alloced>: Remove.
+	<list>: Now a VEC.
+	(maybe_add_partial_symtab_filename): Update.
+	(make_source_files_completion_list): Return a VEC.
+	* symtab.h (default_make_symbol_completion_list_break_on)
+	(default_make_symbol_completion_list, make_symbol_completion_list)
+	(make_symbol_completion_list_fn, make_file_symbol_completion_list)
+	(make_source_files_completion_list): Update.
+
+2012-06-13  Tom Tromey  <tromey at redhat.com>
+
+	* breakpoint.c (add_catch_command): Use completer_ftype.
+	* breakpoint.h: Include command.h.
+	(add_catch_command): Use completer_ftype.
+	* cli/cli-decode.c (set_cmd_completer): Use completer_ftype.
+	* cli/cli-decode.h (struct cmd_list_element) <completer>:
+	Use completer_ftype.
+	* command.h (completer_ftype): New typedef.
+	(set_cmd_completer): Use it.
+	* python/py-cmd.c (struct cmdpy_completer) <completer>: Use
+	completer_ftype.
+
+2012-06-13  Pedro Alves  <palves at redhat.com>
+
+	Partial revert of previous change.
+
+	* serial.c (scb_base): New global.
+	(serial_for_fd): New.
+	(serial_open, serial_fdopen_ops): Link new serial in open serials
+	chain.
+	(do_serial_close): Unlink serial from the open serials chain.
+
+2012-06-12  Pedro Alves  <palves at redhat.com>
+
+	* infrun.c (infrun_thread_stop_requested_callback): Don't switch
+	threads here.
+	(prepare_for_detach): No longer context switch here in non-stop
+	mode.
+	(fetch_inferior_event): Ditto.
+	(handle_inferior_event) <STOP_QUIETLY || NO_STOP_QUIETLY>: Switch
+	to the event thread before removing breakpoints.  Switch to the
+	event thread before inserting breakpoints and resuming.
+	(handle_inferior_event) <TARGET_WAITKIND_SPURIOUS>: Switch to the
+	event thread before resuming.
+	(handle_inferior_event) <stepping_past_singlestep_breakpoint>:
+	Switch to the event thread before removing breakpoints.
 
-2011-12-10  Andrey Smirnov  <andrew.smirnov at gmail.com>
+2012-06-12  Eli Zaretskii  <eliz at gnu.org>
 
-	* ada-lang.c (remove_extra_symbols): Rename `remove' to
-	`remove_p'(-Wshadow).
+	* infcmd.c (construct_inferior_arguments) [__MINGW32__]: Quote
+	special characters correctly for the Windows shells.  See
+	http://sourceware.org/ml/gdb/2012-06/msg00047.html for the bug
+	report.
+	[!__MINGW32__]: Remove extra double quote character from special
+	characters.
 
-2011-12-10  Andrey Smirnov  <andrew.smirnov at gmail.com>
+2012-06-11  Stan Shebs  <stan at codesourcery.com>
 
-	* ada-exp.y (write_var_or_type): Rename nested `renaming' to
-	`ren_sym'(-Wshadow).
+	* ui-out.h: Remove #if 0 declarations.
+	* ui-out.c: Remove #if 0 functions.
 
-2011-12-10  Doug Evans  <dje at google.com>
+2012-06-11  Pedro Alves  <palves at redhat.com>
 
-	* dwarf2read.c (dwarf2_per_cu_data): Rename debug_type_section to
-	debug_types_section.  All uses updated.
-	(partial_read_comp_unit_head): Rename parameter is_debug_type_section
-	to is_debug_types_section.
+	* ser-base.c (run_async_handler_and_reschedule): New.
+	(fd_event, push_event): Use it.
+	* serial.c (serial_open, serial_fdopen_ops): Set the initial
+	reference count to 1.
+	(do_serial_close): Set the bufp field to NULL.  Use serial_unref
+	instead of xfree.
+	(serial_is_open, serial_ref, serial_unref): New.
+	* serial.h (serial_open): Adjust comment.
+	(serial_is_open): Declare.
+	(serial_close): Adjust comment.
+	(serial_ref, serial_unref) Declare.
+	(struct serial): New field 'refcnt'.
 
-	* python/py-auto-load.c (source_section_scripts): Call xfree
-	instead of free.
+2012-06-11  Pedro Alves  <palves at redhat.com>
 
-2011-12-10  Hui Zhu  <teawater at gmail.com>
-	    Yao Qi  <yao at codesourcery.com>
+	Remove #if 0'd "connect" command, and unnecessary associated
+	refcounting and serial reuse bits.
 
-	* tracepoint.c (start_tracing): Clear `inserted' flag.
+	* serial.h (struct serial): Remove fields 'next' and 'refcnt'.
+	* serial.c (last_serial_opened): Delete.
+	(scb_base): Delete.
+	(serial_open): Adjust.
+	(serial_for_fd): Delete.
+	(serial_fdopen_ops, do_serial_close): Adjust.
+	(serial_fdopen_ops): Adjust.
 
-2011-12-10  Hui Zhu  <teawater at gmail.com>
+2012-06-11  Pedro Alves  <palves at redhat.com>
 
-	* tracepoint.c (create_tsv_from_upload): Change sprintf to xstrprintf.
+	* serial.c (do_serial_close): Remove early return when SCB is
+	null.
 
-2011-12-09  Andrey Smirnov  <andrew.smirnov at gmail.com>
+2012-06-11  Tom Tromey  <tromey at redhat.com>
 
-	* breakpoint.c (bp_loc_is_permanent): Rename `brk' to
-	`bpoint'(-Wshadow).
+	* dwarf2read.c (dw2_get_file_names_reader): Ignore partial units.
 
-2011-12-09  Andrey Smirnov  <andrew.smirnov at gmail.com>
+2012-06-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* breakpoint.c (update_static_tracepoint): Rename nested `sal' and
-	`marker' variables to `sal2' and `tpmarker' respectively
-	(-Wshadow).
+	Fix regression by the "ambiguous linespec" series.
+	* breakpoint.c (parse_breakpoint_sals): New variable cursal.  Use
+	get_last_displayed_symtab and get_last_displayed_line and depending
+	on CURSAL.
 
-2011-12-09  Andrew Pinski  <apinski at cavium.com>
+2012-06-11  Tom Tromey  <tromey at redhat.com>
 
-	* linespec.c (hash_address_entry): Use iterative_hash_object on each
-	field rather than the struct itself.
+	* dwarf2read.c (dw2_get_primary_filename_reader): New function.
+	(dw2_find_symbol_file): Use it.
 
-2011-12-09  Tom Tromey  <tromey at redhat.com>
+2012-06-11  Michael Eager  <eager at eagercon.com>
 
-	* breakpoint.c (compare_breakpoints): New function.
-	(clear_command): Remove duplicate breakpoints.  Properly clean
-	up.
+	* mips-linux-tdep.c (mips_gdb_signal_from_target): New
+	* mips-linux-tdep.h (mips_signals): New
 
-2011-12-08  Maciej W. Rozycki  <macro at mips.com>
-            Maciej W. Rozycki  <macro at codesourcery.com>
+2012-06-11  Tom Tromey  <tromey at redhat.com>
 
-	* mips-tdep.c (mips_skip_mips16_trampoline_code): Sign-extend
-	address chunks retrieved from decoded lui/addiu pairs.
+	* infrun.c (handle_inferior_event)
+	<BPSTAT_WHAT_SET_LONGJMP_RESUME>: Don't delete the step-resume
+	breakpoint.
+	<BPSTAT_WHAT_CLEAR_LONGJMP_RESUME>: Remove longjmp logic; use
+	exception logic in all cases.  Update comments.
+	(insert_longjmp_resume_breakpoint): Set the exception resume
+	breakpoint.
 
-2011-12-08  Maciej W. Rozycki  <macro at codesourcery.com>
+2012-06-11  Maciej W. Rozycki  <macro at codesourcery.com>
 
-	* mips-tdep.c (extended_offset): Correct calculation.
-	(unpack_mips16): Correct bitfield positions used for extraction
-	of the immediate argument; fix sign-extension of same.
-	(extended_mips16_next_pc): Correct B instruction's offset
-	calculation.  Correct register decoding of the BEQZ and BNEZ
-	as well as jump-register instructions.  Handle compact jumps.
+	* mips-tdep.c (mips_push_dummy_code): Handle microMIPS code.
 
-2011-12-08  Tom Tromey  <tromey at redhat.com>
+2012-06-09  Siva Chandra Reddy  <sivachandra at google.com>
 
-	* objfiles.h (struct objfile): Remove obsolete comment.
-	* objfiles.c (build_objfile_section_table): Remove obsolete
-	comment.
+	* valarith.c (binop_types_user_defined_p): Fix a typo.
 
-2011-12-07  Stan Shebs  <stan at codesourcery.com>
+2012-06-08  Yao Qi  <yao at codesourcery.com>
+            Chung-Lin Tang <cltang at codesourcery.com>
 
-	* MAINTAINERS (Responsible Maintainers): Add Yao Qi as
-	maintainer of the tic6x target.
+	* arch-utils.c (default_return_in_first_hidden_param_p): New.
+	* arch-utils.h: Declare.
+	* gdbarch.sh: Add return_in_first_hidden_param_p.
+	* gdbarch.c, gdbarch.h: Regenerated.
+	* infcall.c (call_function_by_hand): Call
+	gdbarch_return_in_first_hidden_param_p instead of
+	language_pass_by_reference.
 
-2011-12-07  Ulrich Weigand  <ulrich.weigand at linaro.org>
+	* m68k-tdep.c (m68k_return_in_first_hidden_param_p): New.
+	(m68k_gdbarch_init): Install m68k_return_in_first_hidden_param_p.
+	* sh-tdep.c (sh_return_in_first_hidden_param_p): New.
+	(sh_gdbarch_init): Install sh_return_in_first_hidden_param_p.
+	* tic6x-tdep.c (tic6x_push_dummy_call): Remove local variable
+	`cplus_return_struct_by_reference'.
+	(tic6x_return_value): Handle language cplusplus.
+	(tic6x_return_in_first_hidden_param_p): New.
+	(tic6x_gdbarch_init): Install tic6x_return_in_first_hidden_param_p.
 
-	* arm-tdep.h (arm_deal_with_atomic_sequence): Add prototype.
-	* arm-tdep.c (thumb_deal_with_atomic_sequence_raw): New function.
-	(arm_deal_with_atomic_sequence_raw): Likewise.
-	(arm_deal_with_atomic_sequence): Likewise.
-	(arm_software_single_step): Call it.
-	* arm-linux-tdep.c (arm_linux_software_single_step): Likewise.
+2012-06-07  Doug Evans  <dje at google.com>
 
-2011-12-07  Ulrich Weigand  <uweigand at de.ibm.com>
+	* dwarf2read.c (dwarf2_cu): Add comment.
 
-	* s390-tdep.c: Replace "Linux" by "GNU/Linux" in comments
-	where appropriate.
-	* s390-tdep.h: Likewise.
+2012-06-06  Maciej W. Rozycki  <macro at codesourcery.com>
 
-2011-12-07  Tristan Gingold  <gingold at adacore.com>
+	* mips-tdep.c (mips_pseudo_register_type): Remove tdep local
+	variable.
+	(mips_eabi_push_dummy_call): Likewise.
+	(mips_n32n64_push_dummy_call): Likewise.
+	(mips_o32_push_dummy_call): Likewise.
+	(mips_o64_push_dummy_call): Likewise.
 
-	* machoread.c (macho_symtab_read): Do not consider N_OPT as
-	a debugging stab.  Improve complaint message.
+2012-06-06  Maciej W. Rozycki  <macro at codesourcery.com>
 
-2011-12-07  Maciej W. Rozycki  <macro at codesourcery.com>
+	* mips-tdep.c (mips_convert_register_p): Correct coding style.
 
-	* mips-tdep.c (mips32_scan_prologue): Only update the immediate
-	load adjustment if still within the prologue.
+2012-06-06  Maciej W. Rozycki  <macro at codesourcery.com>
 
-2011-12-06  Maciej W. Rozycki  <macro at codesourcery.com>
+	* mips-tdep.c (mips_pseudo_register_type): Use
+	mips_float_register_p.
 
-	* mips-tdep.c (mips32_next_pc): Fix floating point condition
-	code mask.
+2012-06-06  Pedro Alves  <palves at redhat.com>
 
-2011-12-06  Maciej W. Rozycki  <macro at codesourcery.com>
+	* infrun.c (handle_inferior_event): Remove calls to
+	reinit_frame_cache that follow a context_switch call.
 
-	* mips-tdep.c (deal_with_atomic_sequence): Fix the handling
-	of BLTZ* and BGEZ* instructions.
+2012-06-06  Pedro Alves  <palves at redhat.com>
 
-2011-12-06  Maciej W. Rozycki  <macro at codesourcery.com>
+	* infrun.c (handle_inferior_event) <deferred_step_ptid>: Use
+	context_switch and remove stale comment.
 
-	* mips-tdep.c (mips_pc_is_mips16): Reverse the order of checks
-	performed to determine whether an address refers to standard
-	MIPS or MIPS16 code.
-	(mips16_next_pc): Use mips_pc_is_mips16 instead of
-	is_mips16_addr.
+2012-06-06  Pedro Alves  <palves at redhat.com>
 
-2011-12-06  Pedro Alves  <pedro at codesourcery.com>
+	* infrun.c (struct execution_control_state): Remove
+	`new_thread_event' field.
+	(handle_inferior_event): Simplify new threads handling; don't
+	resume the inferior if we find a new thread.
 
-	* breakpoint.c (breakpoint_restore_shadows): Rename to ...
-	(breakpoint_xfer_memory): ... this.  Change prototype.  Handle
-	memory writes too.
-	* breakpoint.h (breakpoint_restore_shadows): Delete.
-	(breakpoint_xfer_memory): Declare.
-	* mem-break.c (default_memory_insert_breakpoint)
-	(default_memory_remove_breakpoint): Use target_write_raw_memory.
-	(memory_xfer_partial): Rename to ...
-	(memory_xfer_partial_1): ... this.  Don't mask out breakpoints
-	here.
-	(memory_xfer_partial): New.
-	(target_write_raw_memory): New.
-	* target.h (target_write_raw_memory): New.
-
-2011-12-06  Doug Evans  <dje at google.com>
-
-	* linespec.c (decode_dollar): Avoid "may be used uninitialized" warning.
-
-2011-12-06  Joel Brobecker  <brobecker at acacore.com>
-
-        * language.h (struct language_defn): Add new component
-        la_symbol_name_compare.
-        * symfile.h (struct quick_symbol_functions): Update the profile
-        of parameter "name_matcher" for the expand_symtabs_matching
-        method.  Update the documentation accordingly.
-        * ada-lang.h (ada_name_for_lookup): Add declaration.
-        * ada-lang.c (ada_name_for_lookup): New function, extracted out
-        from ada_iterate_over_symbols.
-        (ada_iterate_over_symbols): Do not encode symbol name anymore.
-        (ada_expand_partial_symbol_name): Adjust profile.
-        (ada_language_defn): Add value for la_symbol_name_compare field.
-        * linespec.c: #include "ada-lang.h".
-        (iterate_name_matcher): Add language parameter. Replace call
-        to strcmp_iw by call to language->la_symbol_name_compare.
-        (decode_variable): Encode COPY if current language is Ada.
-        * dwarf2read.c (dw2_expand_symtabs_matching): Adjust profile
-        of name_matcher parameter.  Adjust call to name_matcher.
-        * psymtab.c (expand_symtabs_matching_via_partial): Likewise.
-        (expand_partial_symbol_names): Update profile of parameter "fun".
-        * psymtab.h (expand_partial_symbol_names): Update profile of
-        parameter "fun".
-        * symtab.c (demangle_for_lookup): Update function documentation.
-        (search_symbols_name_matches): Add language parameter.
-        (expand_partial_symbol_name): Likewise.
-        * c-lang.c (c_language_defn, cplus_language_defn)
-        (asm_language_defn, minimal_language_defn): Add value for
-        la_symbol_name_compare field.
-        * d-lang.c (d_language_defn): Likewise.
-        * f-lang.c (f_language_defn): Ditto.
-        * jv-lang.c (java_language_defn): Ditto.
-        * m2-lang.c (m2_language_defn): Ditto.
-        * objc-lang.c (objc_language_defn): Ditto.
-        * opencl-lang.c (opencl_language_defn): Ditto.
-        * p-lang.c (pascal_language_defn): Ditto.
-        * language.c (unknown_language_defn, auto_language_defn)
-        (local_language_defn): Ditto.
-
-2011-12-06  Tom Tromey  <tromey at redhat.com>
-
-	* linespec.c (iterate_over_all_matching_symtabs): Use
-	LA_ITERATE_OVER_SYMBOLS.
-	(lookup_prefix_sym, add_matching_symbols_to_info): Likewise.
-	(find_function_symbols, decode_variable): Remove Ada special
-	case.
-	* language.h (struct language_defn) <la_iterate_over_symbols>: New
-	field.
-	(LA_ITERATE_OVER_SYMBOLS): New macro.
-	* language.c (unknown_language_defn, auto_language_defn)
-	(local_language_defn): Update.
-	* c-lang.c (c_language_defn, cplus_language_defn)
-	(asm_language_defn, minimal_language_defn): Update.
-	* d-lang.c (d_language_defn): Update.
-	* f-lang.c (f_language_defn): Update.
-	* jv-lang.c (java_language_defn): Update.
-	* m2-lang.c (m2_language_defn): Update.
-	* objc-lang.c (objc_language_defn): Update.
-	* opencl-lang.c (opencl_language_defn): Update.
-	* p-lang.c (pascal_language_defn): Update.
-	* ada-lang.c (ada_iterate_over_symbols): New function.
-	(ada_language_defn): Update.
-
-2011-12-06  Tom Tromey  <tromey at redhat.com>
-	    Joel Brobecker  <brobecker at acacore.com>
-
-	PR breakpoints/13105, PR objc/8341, PR objc/8343, PR objc/8366,
-	PR objc/8535, PR breakpoints/11657, PR breakpoints/11970,
-	PR breakpoints/12023, PR breakpoints/12334, PR breakpoints/12856,
-	PR shlibs/8929, PR shlibs/7393:
-	* python/py-type.c (compare_maybe_null_strings): Rename from
-	compare_strings.
-	(check_types_equal): Update.
-	* utils.c (compare_strings): New function.
-	* tui/tui-winsource.c (tui_update_breakpoint_info): Update for
-	location changes.
-	* tracepoint.c (scope_info): Update.
-	(trace_find_line_command): Use DECODE_LINE_FUNFIRSTLINE.
-	* symtab.h (iterate_over_minimal_symbols)
-	(iterate_over_some_symtabs, iterate_over_symtabs)
-	(find_pcs_for_symtab_line, iterate_over_symbols)
-	(demangle_for_lookup): Declare.
-	(expand_line_sal): Remove.
-	* symtab.c (iterate_over_some_symtabs, iterate_over_symtabs)
-	(lookup_symtab_callback): New functions.
-	(lookup_symtab): Rewrite.
-	(demangle_for_lookup): New function, extract from
-	lookup_symbol_in_language.
-	(lookup_symbol_in_language): Use it.
-	(iterate_over_symbols): New function.
-	(find_line_symtab): Update.
-	(find_pcs_for_symtab_line): New functions.
-	(find_line_common): Add 'start' argument.
-	(decode_line_spec): Update.  Change argument to 'flags', change
-	interpretation.
-	(append_expanded_sal): Remove.
-	(append_exact_match_to_sals): Remove.
-	(expand_line_sal): Remove.
-	* symfile.h (struct quick_symbol_functions) <lookup_symtab>:
-	Remove.
-	<map_symtabs_matching_filename>: New field.
-	* stack.c (func_command): Only look in the current program space.
-	Use DECODE_LINE_FUNFIRSTLINE.
-	* source.c (line_info): Set pspace on sal.  Check program space in
-	the loop.  Use DECODE_LINE_LIST_MODE.
-	(select_source_symtab): Use DECODE_LINE_FUNFIRSTLINE.
-	* solib-target.c: Remove DEF_VEC_I(CORE_ADDR).
-	* python/python.c (gdbpy_decode_line): Update.
-	* psymtab.c (partial_map_expand_apply): New function.
-	(partial_map_symtabs_matching_filename): Rename from
-	lookup_partial_symbol.  Update arguments.
-	(lookup_symtab_via_partial_symtab): Remove.
-	(psym_functions): Update.
-	* objc-lang.h (parse_selector, parse_method): Don't declare.
-	(find_imps): Update.
-	* objc-lang.c (parse_selector, parse_method): Now static.
-	(find_methods): Change arguments.  Fill in a vector of symbol
-	names.
-	(uniquify_strings): New function.
-	(find_imps): Change arguments.
-	* minsyms.c (iterate_over_minimal_symbols): New function.
-	* linespec.h (enum decode_line_flags): New.
-	(struct linespec_sals): New.
-	(struct linespec_result) <canonical>: Remove.
-	<pre_expanded, addr_string, sals>: New fields.
-	(destroy_linespec_result, make_cleanup_destroy_linespec_result)
-	(decode_line_full): Declare.
-	(decode_line_1): Update.
-	* linespec.c (struct address_entry, struct linespec_state, struct
-	collect_info): New types.
-	(add_sal_to_sals_basic, add_sal_to_sals, hash_address_entry)
-	(eq_address_entry, maybe_add_address): New functions.
-	(total_number_of_methods): Remove.
-	(iterate_name_matcher, iterate_over_all_matching_symtabs): New
-	functions.
-	(find_methods): Change arguments.  Don't canonicalize input.
-	Simplify logic.
-	(add_matching_methods, add_constructors)
-	(build_canonical_line_spec): Remove.
-	(filter_results, convert_results_to_lsals): New functions.
-	(decode_line_2): Change arguments.  Rewrite for new data
-	structures.
-	(decode_line_internal): Rename from decode_line_1.  Change
-	arguments.  Add cleanups.  Update for new data structures.
-	(linespec_state_constructor, linespec_state_destructor)
-	(decode_line_full, decode_line_1): New functions.
-	(decode_indirect): Change arguments.  Update.
-	(locate_first_half): Use skip_spaces.
-	(decode_objc): Change arguments.  Update for new data structures.
-	Simplify logic.
-	(decode_compound): Change arguments.  Add cleanups.  Remove
-	fallback code, replace with error.
-	(struct decode_compound_collector): New type.
-	(collect_one_symbol): New function.
-	(lookup_prefix_sym): Change arguments.  Update.
-	(compare_symbol_name, add_all_symbol_names_from_pspace)
-	(find_superclass_methods ): New functions.
-	(find_method): Rewrite.
-	(struct symtab_collector): New type.
-	(add_symtabs_to_list, collect_symtabs_from_filename): New
-	functions.
-	(symtabs_from_filename): Change API.  Rename from
-	symtab_from_filename.
-	(collect_function_symbols): New function.
-	(find_function_symbols): Change API.  Rename from
-	find_function_symbol.  Rewrite.
-	(decode_all_digits): Change arguments.  Rewrite.
-	(decode_dollar): Change arguments.  Use decode_variable.
-	(decode_label): Change arguments.  Rewrite.
-	(collect_symbols): New function.
-	(minsym_found): Change arguments.  Rewrite.
-	(check_minsym, search_minsyms_for_name)
-	(add_matching_symbols_to_info): New function.
-	(decode_variable): Change arguments.  Iterate over all symbols.
-	(symbol_found): Remove.
-	(symbol_to_sal): New function.
-	(init_linespec_result, destroy_linespec_result)
-	(cleanup_linespec_result, make_cleanup_destroy_linespec_result):
-	New functions.
-	(decode_digits_list_mode, decode_digits_ordinary): New functions.
-	* dwarf2read.c (dw2_map_expand_apply): New function.
-	(dw2_map_symtabs_matching_filename): Rename from
-	dw2_lookup_symtab.  Change arguments.
-	(dwarf2_gdb_index_functions): Update.
-	* dwarf2loc.c: Remove DEF_VEC_I(CORE_ADDR).
-	* defs.h (compare_strings): Declare.
-	* cli/cli-cmds.c (compare_strings): Move to utils.c.
-	(edit_command, list_command): Use DECODE_LINE_LIST_MODE.  Call
-	filter_sals.
-	(compare_symtabs, filter_sals): New functions.
-	* breakpoint.h (struct bp_location) <line_number, source_file>:
-	New fields.
-	(struct breakpoint) <line_number, source_file>: Remove.
-	<filter>: New field.
-	* breakpoint.c (print_breakpoint_location, init_raw_breakpoint)
-	(momentary_breakpoint_from_master, add_location_to_breakpoint):
-	Update for changes to locations.
-	(init_breakpoint_sal): Add 'filter' argument.  Set 'filter' on
-	breakpoint.
-	(create_breakpoint_sal): Add 'filter' argument.
-	(remove_sal, expand_line_sal_maybe): Remove.
-	(create_breakpoints_sal): Remove 'sals' argument.  Handle
-	pre-expanded sals and the filter.
-	(parse_breakpoint_sals): Use decode_line_full.
-	(check_fast_tracepoint_sals): Use get_sal_arch.
-	(create_breakpoint): Create a linespec_sals.  Update.
-	(break_range_command): Use decode_line_full.  Update.
-	(until_break_command): Update.
-	(clear_command): Update match conditions for linespec.c changes.
-	Use DECODE_LINE_LIST_MODE.
-	(say_where): Update for changes to locations.
-	(bp_location_dtor): Free 'source_file'.
-	(base_breakpoint_dtor): Free 'filter'.  Don't free 'source_file'.
-	(update_static_tracepoint): Update for changes to locations.
-	(update_breakpoint_locations): Disable ranged breakpoint if too
-	many locations match.  Update.
-	(addr_string_to_sals): Use decode_line_full.  Resolve all sal
-	PCs.
-	(breakpoint_re_set_default): Don't call expand_line_sal_maybe.
-	(decode_line_spec_1): Update.  Change argument name to 'flags',
-	change interpretation.
-	* block.h (block_containing_function): Declare.
-	* block.c (block_containing_function): New function.
-	* skip.c (skip_function_command): Update.
-	(skip_re_set): Update.
-	* infcmd.c (jump_command): Use DECODE_LINE_FUNFIRSTLINE.
-	* mi/mi-main.c (mi_cmd_trace_find): Use DECODE_LINE_FUNFIRSTLINE.
-	* NEWS: Add entry.
-
-2011-12-06  Tom Tromey  <tromey at redhat.com>
-
-	* elfread.c (elf_gnu_ifunc_resolver_return_stop): Allow
-	breakpoint's pspace to be NULL.
-	* breakpoint.h (struct breakpoint) <pspace>: Update comment.
-	* breakpoint.c (init_raw_breakpoint): Conditionally set
-	breakpoint's pspace.
-	(init_breakpoint_sal): Don't set breakpoint's pspace.
-	(prepare_re_set_context): Conditionally switch program space.
-	(addr_string_to_sals): Check executing_startup on location's
-	program space.
-
-2011-12-06  Tom Tromey  <tromey at redhat.com>
-
-	* breakpoint.h (enum enable_state) <bp_startup_disabled>: Remove.
-	* breakpoint.c (should_be_inserted): Explicitly check if program
-	space is executing startup.
-	(describe_other_breakpoints): Update.
-	(disable_breakpoints_before_startup): Change executing_startup
-	earlier.  Remove loop.
-	(enable_breakpoints_after_startup): Likewise.
-	(init_breakpoint_sal): Don't use bp_startup_disabled.
-	(create_breakpoint): Don't use bp_startup_disabled.
-	(update_global_location_list): Use should_be_inserted.
-	(bkpt_re_set): Update.
-
-2011-12-06  Tom Tromey  <tromey at redhat.com>
-
-	* python/lib/gdb/command/pretty_printers.py
-	(InfoPrettyPrinter.invoke1): Remove extra double quote.
-
-2011-12-06  Tom Tromey  <tromey at redhat.com>
-
-	* NEWS: Add MI news.
-
-2011-12-06  Ulrich Weigand  <uweigand at de.ibm.com>
-
-	* s390-tdep.h (S390_ORIG_R2_REGNUM): Define.
-	(S390_LAST_BREAK_REGNUM): Likewise.
-	(S390_SYSTEM_CALL_REGNUM): Likewise.
-	(S390_NUM_REGS): Update.
-
-	(s390_regmap_last_break): Add declaration.
-	(s390x_regmap_last_break): Likewise.
-	(s390_regmap_system_call): Likewise.
-
-	(tdesc_s390_linux32v1): Add declaration.
-	(tdesc_s390_linux32v2): Likewise.
-	(tdesc_s390_linux64v1): Likewise.
-	(tdesc_s390_linux64v2): Likewise.
-	(tdesc_s390x_linux64v1): Likewise.
-	(tdesc_s390x_linux64v2): Likewise.
-
-	* s390-tdep.c: Include new target description files
-	"features/s390-linux32v1.c", "features/s390-linux32v2.c",
-	"features/s390-linux64v1.c", "features/s390-linux64v2.c",
-	"features/s390x-linux64v1.c", and "features/s390x-linux64v2.c".
-	(s390_cannot_store_register): New function.
-	(s390_write_pc): Likewise.
-	(s390_dwarf_regmap): Add fields for new registers.
-	(s390_regmap_gregset): Likewise.
-	(s390x_regmap_gregset): Likewise.
-	(s390_regmap_fpregset): Likewise.
-	(s390_regmap_upper): Likewise.
-	(s390_regmap_last_break): New variable.
-	(s390x_regmap_last_break): Likewise.
-	(s390_regmap_system_call): Likewise.
-	(s390_last_break_regset): Likewise.
-	(s390x_last_break_regset): Likewise.
-	(s390_system_call_regset): Likewise.
-	(s390_upper_regset_sections): Rename to ...
-	(s390_linux64_regset_sections): ... this.
-	(s390_linux32_regset_sections): New variable.
-	(s390x_linux64_regset_sections): Likewise.
-	(s390_linux32v1_regset_sections): Likewise.
-	(s390_linux32v2_regset_sections): Likewise.
-	(s390_linux64v1_regset_sections): Likewise.
-	(s390_linux64v2_regset_sections): Likewise.
-	(s390x_linux64v1_regset_sections): Likewise.
-	(s390x_linux64v2_regset_sections): Likewise.
-	(s390_regset_from_core_section): Handle .reg-s390-last-break and
-	.reg-s390-system-call core file sections.
-	(s390_core_read_description): Check for presence of
-	.reg-s390-last-break and .reg-s390-system-call core file
-	sections and return appropriate target description.
-	(s390_gdbarch_init): Detect Linux-specific registers "orig_r2",
-	"last_break" and "system_call" in target description.  Install
-	appropriate gdbarch_core_regset_sections array.
-	Call set_gdbarch_cannot_store_register and set_gdbarch_write_pc.
-	(_initialize_s390_tdep): Initialize additional target descriptions.
-
-	* s390-nat.c: Include "elf/common.h".
-	(PTRACE_GETREGSET, PTRACE_SETREGSET): Define if undefined.
-	(have_regset_last_break): New static variable.
-	(have_regset_system_call): Likewise.
-	(s390_native_supply): Handle S390_ORIG_R2_REGNUM.
-	(s390_native_collect): Likewise.
-	(fetch_regset, store_regset, check_regset): New functions.
-	(s390_linux_fetch_inferior_registers): Handle S390_LAST_BREAK_REGNUM
-	and S390_SYSTEM_CALL_REGNUM.
-	(s390_linux_store_inferior_registers): Likewise.
-	(s390_read_description): Check for presence of NT_S390_LAST_BREAK
-	and NT_S390_SYSTEM_CALL regsets and use appropriate description.
-
-	* features/Makefile (WHICH): Add s390-linux32v1, s390-linux64v1,
-	s390x-linux64v1, s390-linux32v2, s390-linux64v2, and s390x-linux64v2.
-	(s390-linux32v1-expedite): Define.
-	(s390-linux32v2-expedite): Likewise.
-	(s390-linux64v1-expedite): Likewise.
-	(s390-linux64v2-expedite): Likewise.
-	(s390x-linux64v1-expedite): Likewise.
-	(s390x-linux64v2-expedite): Likewise.
-
-	* features/s390-linux32.xml: Add orig_r2 register.
-	* features/s390-linux64.xml: Likewise.
-	* features/s390x-linux64.xml: Likewise.
-	* features/s390-linux32v1.xml: New file.
-	* features/s390-linux32v2.xml: Likewise.
-	* features/s390-linux64v1.xml: Likewise.
-	* features/s390-linux64v2.xml: Likewise.
-	* features/s390x-linux64v1.xml: Likewise.
-	* features/s390x-linux64v2.xml: Likewise.
-
-	* features/s390-linux32.c: Regenerate.
-	* features/s390-linux64.c: Likewise.
-	* features/s390x-linux64.c: Likewise.
-	* features/s390-linux32v1.c: New generated file.
-	* features/s390-linux32v2.c: Likewise.
-	* features/s390-linux64v1.c: Likewise.
-	* features/s390-linux64v2.c: Likewise.
-	* features/s390x-linux64v1.c: Likewise.
-	* features/s390x-linux64v2.c: Likewise.
+2012-06-06  Thomas Schwinge  <thomas at codesourcery.com>
 
-	* regformats/s390-linux32.dat: Regenerate.
-	* regformats/s390-linux64.dat: Regenerate.
-	* regformats/s390x-linux64.dat: Regenerate.
-	* regformats/s390-linux32v1.dat: New generated file.
-	* regformats/s390-linux32v2.dat: Likewise.
-	* regformats/s390-linux64v1.dat: Likewise.
-	* regformats/s390-linux64v2.dat: Likewise.
-	* regformats/s390x-linux64v1.dat: Likewise.
-	* regformats/s390x-linux64v2.dat: Likewise.
+	* NEWS: Document the deprecation of SH's 'regs' command.
+	* inferior.h (all_registers_info): Add function declaration.
+	* sh-tdep.c (sh_show_regs): Remove variable.
+	(sh_generic_show_regs, sh3_show_regs, sh2e_show_regs, sh2a_show_regs)
+	(sh2a_nofpu_show_regs, sh3e_show_regs, sh3_dsp_show_regs)
+	(sh4_show_regs, sh4_nofpu_show_regs, sh_dsp_show_regs)
+	(sh_show_regs_command): Remove functions.
+	(sh_gdbarch_init): Don't set sh_show_regs.
+	(_initialize_sh_tdep): Make the 'regs' command an deprecated alias to
+	'info all-registers'.
+	* sh64-tdep.c (sh64_show_media_regs, sh64_show_compact_regs)
+	(sh64_show_regs): Remove functions.
+	* sh64-tdep.h (sh64_show_regs): Remove function declaration.
 
-2011-12-05  Pedro Alves  <pedro at codesourcery.com>
+2012-06-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* linux-nat.c (resume_stopped_resumed_lwps): Call
-	registers_changed.
+	* configure.ac: Move development=true below AC_INIT.
+	* configure: Regenerate.
 
-2011-12-05  Pedro Alves  <pedro at codesourcery.com>
+2012-06-05  Stan Shebs  <stan at codesourcery.com>
 
-	* breakpoint.c: Include record.h.
-	(breakpoints_always_inserted_mode): Return false when the record
-	target is in use.
+	* mi/mi-interp.c (mi_interpreter_init): Set raw_stdout from
+	gdb_stdout.
 
-2011-12-05  Pedro Alves  <pedro at codesourcery.com>
+2012-06-05  Siddhesh Poyarekar  <siddhesh at redhat.com>
 
-	* amd64-linux-nat.c (amd64_linux_dr_get): Remove FIXME comment.
-	Reinstate perror_with_name call on ptrace error.  Remove #if 0.
-	* i386-linux-nat.c (i386_linux_dr_get): Likewise.
-	* i386bsd-nat.c (i386bsd_dr_get_status): Likewise.
+	* corefile.c (read_memory, read_stack, write_memory): Accept LEN
+	argument as ssize_t.
+	* gdbcore.h (read_memory, read_stack, write_memory): Likewise.
+	* remote.c (remote_write_bytes_aux, remote_write_bytes): Likewise.
+	* target.c (target_read_stack, target_write_memory)
+	(target_write_raw_memory): Likewise.
+	* target.h (target_read_stack, target_write_memory)
+	(target_write_raw_memory): Likewise.
 
-2011-12-05  Andrey Smirnov  <andrew.smirnov at gmail.com>
+2012-06-05  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* breakpoint.c (init_breakpoint_sal): Remove nested definitions of
-	`i'(-Wshadow).
+	* symfile-mem.c: Change gdb_static_assert to ssize_t.
+	(target_read_memory_bfd): Cast gdb_assert LEN to ssize_t.
+	* target.c (target_read_memory): Change LEN to ssize_t.
+	* target.h (target_read_memory): Change LEN to ssize_t.
 
-2011-12-05  Andrey Smirnov  <andrew.smirnov at gmail.com>
+2012-06-05  Pedro Alves  <palves at redhat.com>
 
-	* bcache.c (bcache): Rename `bcache' to `cache'(-Wshadow).
+	PR backtrace/13866
 
-2011-12-05  Andrey Smirnov  <andrew.smirnov at gmail.com>
+	* breakpoint.c (until_break_command): Only fetch the selected
+	frame after decode_line_1.
 
-	* amd64-tdep.c (amd64_push_dummy_call): Remove nested definition
-	of `tdep'(-Wshadow).
+2012-06-05  Joakim Tjernlund  <Joakim.Tjernlund at transmode.se>
 
-2011-12-03  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* solib-svr4.c (enable_break): Don't fallback to setting the solib
+	event breakpoint at _start, __start or main if a program
+	interpreter is not found.
 
-	Fix compilation --without-expat.
-	* solib-svr4.c (svr4_free_so, svr4_free_library_list): Move them here
-	from ...
-	[HAVE_LIBEXPAT] (svr4_free_so, svr4_free_library_list): ... here.
+2012-06-05  Joel Brobecker  <brobecker at adacore.com>
 
-2011-12-02  Paul Pluzhnikov  <ppluzhnikov at google.com>
-	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* windows-tdep.h (windows_iterate_over_objfiles_in_search_order):
+	Add declaration.
+	* windows-tdep.c: #include "objfiles.h".
+	(windows_iterate_over_objfiles_in_search_order): New function.
+	* amd64-windows-tdep.c (amd64_windows_init_abi): Set
+	iterate_over_objfiles_in_search_order gdbarch method to
+	windows_iterate_over_objfiles_in_search_order.
+	* i386-cygwin-tdep.c (i386_cygwin_init_abi): Likewise.
 
-	* Makefile.in (XMLFILES): Add library-list-svr4.dtd.
-	* features/library-list-svr4.dtd: New file.
-	* remote.c (PACKET_qXfer_libraries_svr4): New.
-	(remote_protocol_features): new entry for PACKET_qXfer_libraries_svr4.
-	(remote_xfer_partial): Handle TARGET_OBJECT_LIBRARIES_SVR4.
-	* solib-svr4.c (struct svr4_library_list): New.
-	[HAVE_LIBEXPAT]: Include xml-support.h.
-	[HAVE_LIBEXPAT] (svr4_library_list_start_library)
-	[HAVE_LIBEXPAT] (svr4_library_list_start_list, svr4_library_attributes)
-	[HAVE_LIBEXPAT] (svr4_library_list_children)
-	[HAVE_LIBEXPAT] (svr4_library_list_attributes)
-	[HAVE_LIBEXPAT] (svr4_library_list_elements, svr4_parse_libraries)
-	[HAVE_LIBEXPAT] (svr4_current_sos_via_xfer_libraries)
-	[!HAVE_LIBEXPAT] (svr4_current_sos_via_xfer_libraries): New.
-	(svr4_read_so_list): Extend the corruption message by addresses.
-	(svr4_current_sos): New variable library_list, call
-	svr4_current_sos_via_xfer_libraries.
-	* target.h (enum target_object): New TARGET_OBJECT_LIBRARIES_SVR4.
-
-2011-12-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	PR threads/13448
-	* dwarf2read.c (decode_locdesc): Handle DW_OP_const8u.
-	For DW_OP_GNU_push_tls_address increment the value, new comment for it.
-
-2011-12-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	PR breakpoints/13346
-	* dwarf2read.c (process_psymtab_comp_unit): Set
-	PSYMTABS_ADDRMAP_SUPPORTED.
-	* psympriv.h (struct partial_symtab): Comment textlow and texthigh
-	validity.  New field psymtabs_addrmap_supported.
-	* psymtab.c (find_pc_sect_psymtab_closer): New gdb_assert on
-	psymtabs_addrmap_supported.
-	(find_pc_sect_psymtab): Do not fallback to TEXTLOW and TEXTHIGH for
-	!PSYMTABS_ADDRMAP_SUPPORTED.
-	(dump_psymtab, maintenance_info_psymtabs): Print also
-	psymtabs_addrmap_supported.
-
-2011-12-01  Doug Evans  <dje at google.com>
-
-	* python/py-type.c (type_object_methods): Fix "array" doc string.
-
-2011-12-01  Andrew Burgess  <aburgess at broadcom.com>
-
-	* source.c (print_source_lines_base): Fix missing braces on else
-	clause leading to additional output.
-
-2011-11-30  Ulrich Weigand  <uweigand at de.ibm.com>
-
-	* s390-nat.c (SUBOFF): Remove.
-	(s390_native_supply, s390_native_collect): New functions.
-	(supply_gregset, supply_fpregset): Use s390_native_supply.
-	(fill_gregset, fill_fpregset): Use s390_native_collect.
-
-	* s390-tdep.c (s390_pseudo_register_reggroup_p): Update comment.
-	(s390_unwind_pseudo_register): New function.
-	(s390_prologue_frame_unwind_cache): Unwind PSW address and mask
-	registers instead of PC and CC.
-	(s390_backchain_frame_unwind_cache): Likewise.
-	(s390_sigtramp_frame_unwind_cache): Do not unwind PC, CC, or
-	full GPR pseudos.
-	(s390_trad_frame_prev_register): New function.
-	(s390_frame_prev_register): Use it.
-	(s390_sigtramp_frame_prev_register): Likewise.
-	(s390_dwarf2_prev_register): Use s390_unwind_pseudo_register.
-	(s390_dwarf2_frame_init_reg): Unwind PSW address and mask.  Use
-	special callback to unwind any pseudo.
-
-	* features/s390-core32.xml: Add pswm/pswa to save/restore group.
-	* features/s390-core64.xml: Likewise.
-	* features/s390x-core64.xml: Likewise.
-	* features/s390-linux32.c: Regenerate.
-	* features/s390-linux64.c: Likewise.
-	* features/s390x-linux64.c: Likewise.
+2012-06-05  Joel Brobecker  <brobecker at adacore.com>
 
-2011-11-30  Ulrich Weigand  <uweigand at de.ibm.com>
+	* gdbarch.sh: Add generation of
+	"iterate_over_objfiles_in_search_order_cb_ftype" typedef in
+	gdbarch.h.  Add include of "objfiles.h" in gdbarch.c.
+	(iterate_over_objfiles_in_search_order): New gdbarch method.
+	* gdbarch.h, gdbarch.c: Regenerate.
+	* objfiles.h (default_iterate_over_objfiles_in_search_order):
+	Add declaration.
+	* objfiles.c (default_iterate_over_objfiles_in_search_order):
+	New function.
+	* symtab.c (lookup_symbol_aux_objfile): New function, extracted
+	out of lookup_symbol_aux_symtabs.
+	(lookup_symbol_aux_symtabs): Replace extracted-out code by
+	call to lookup_symbol_aux_objfile.
+	(struct global_sym_lookup_data): New type.
+	(lookup_symbol_global_iterator_cb): New function.
+	(lookup_symbol_global): Search for symbol using
+	gdbarch_iterate_over_objfiles_in_search_order and
+	lookup_symbol_global_iterator_cb.
+	* findvar.c (struct minsym_lookup_data): New type.
+	(minsym_lookup_iterator_cb): New function.
+	(default_read_var_value) [case LOC_UNRESOLVED]: Resolve the
+	symbol's address via gdbarch_iterate_over_objfiles_in_search_order
+	and minsym_lookup_iterator_cb.
 
-	* s390-tdep.c (s390_gdbarch_init): Call set_gdbarch_get_siginfo_type.
+2012-06-05  Joel Brobecker  <brobecker at adacore.com>
 
-2011-11-30  Ulrich Weigand  <uweigand at de.ibm.com>
+	Revert the following patch:
+	* findvar.c (default_read_var_value): For LOC_UNRESOLVED symbols,
+	try locating the symbol in the symbol's own objfile first, before
+	extending the search to all objfiles.
+	* symtab.c (lookup_symbol_aux_objfile): New function, extracted
+	out of lookup_symbol_aux_symtabs.
+	(lookup_symbol_aux_symtabs): Add new parameter "exclude_objfile".
+	Replace extracted-out code by call to lookup_symbol_aux_objfile.
+	Do not search EXCLUDE_OBJFILE.
+	(lookup_static_symbol_aux): Update call to lookup_symbol_aux_symtabs.
+	(lookup_symbol_global): Search for matches in the block's objfile
+	first, before searching all other objfiles.
 
-	* s390-tdep.c (s390_displaced_step_fixup): Fix processing of LARL
-	instruction.  Add more diagnostic output.
+2012-06-05  Joel Brobecker  <brobecker at adacore.com>
 
-2011-11-29  Andrey Smirnov  <andrew.smirnov at gmail.com>
+	* breakpoint.c (find_condition_and_thread): Stop parsing
+	as soon as the first invalid keyword is found.
 
-	* MAINTAINERS (Write After Approval): Add myself to the list.
+2012-06-05  Joel Brobecker  <brobecker at adacore.com>
 
-2011-11-29  Sanjoy Das  <sdas at igalia.com>
+	* copyright.py (EXCLUDE_LIST): Add 'gdb/CONTRIBUTE' to list.
 
-	* jit.c (add_objfile_entry, jit_reader_try_read_symtab)
-	(jit_bfd_try_read_symtab): Fix comments.
+2012-06-05  Joel Brobecker  <brobecker at adacore.com>
 
-2011-11-28  DJ Delorie  <dj at redhat.com>
+	* config/djgpp/djcheck.sh: Add copyright header.
 
-	* NEWS: Mention RL78 simulator.
+2012-06-05  Joel Brobecker  <brobecker at adacore.com>
 
-2011-11-28  Joel Brobecker  <brobecker at adacore.com>
+	* copyright.py (update_files, main): Fix path to update-copyright
+	script.
 
-	* symfile.h (struct quick_symbol_functions): Fix the documentation
-	of field map_matching_symbols, as symbols are sorted using
-	strcmp_iw_ordered, not strcmp_iw.
+2012-06-05  Joel Brobecker  <brobecker at adacore.com>
 
-2011-11-28  Paul Hilfinger  <hilfinger at adacore.com>
+	* copyright.py (MULTIPLE_COPYRIGHT_HEADERS): New constant.
+	(main): Add MULTIPLE_COPYRIGHT_HEADERS to the list of files
+	for which a reminder to update by hand is printed.
 
-	* symfile.h (struct quick_symbol_functions): Update the
-	documentation for field map_matching_symbols.
+2012-06-04  Doug Evans  <dje at google.com>
 
-2011-11-28  Joel Brobecker  <brobecker at adacore.com>
+	* buildsym.c (make_blockvector): Add comment.
 
-	* ada-lang.c (compare_names): Fix wrong return value in case
-	string1 starts with the same contents as string2, followed
-	by an underscore that do not start a symbol name suffix.
+2012-06-04  Pedro Alves  <palves at redhat.com>
 
-2011-11-28  Phil Muldoon  <pmuldoon at redhat.com>
+	* arch-utils.c (default_gdb_signal_from_target): Delete.
+	* arch-utils.h (default_gdb_signal_from_target): Delete.
+	* corelow.c (core_open) <signal mapping>: Extended comment.  Check
+	gdbarch_gdb_signal_from_target_p.
+	* gdbarch.sh (gdb_signal_from_target): Make it an M method (with
+	predicate).
+	* gdbarch.h: Regenerate.
+	* gdbarch.c: Regenerate.
 
-	PR python/13369
-	PR python/13374
+2012-06-04  Pedro Alves  <palves at redhat.com>
 
-	* python/python.c (gdbpy_decode_line): Do not acquire GIL.
-	* python/py-inferior.c (inferior_to_inferior_object): Ditto.
-	* python/py-value.c (valpy_nonzero): Use TRY_CATCH to catch GDB
-	exceptions.
-	* python/py-type.c (typy_strip_typedefs): Ditto.
-	(typy_legacy_template_argument): Ditto.
-	* python/py-inferior.c (inferior_to_inferior_object): Ditto.
-	* python/py-breakpoint.c (bppy_set_ignore_count): Ditto.
+	* gdbarch.sh (gdb_signal_from_target): Mention that the
+	implementation of the method must be host independent.
+	* gdbarch.h: Regenerate.
 
-2011-11-27  Joel Brobecker  <brobecker at acacore.com>
+2012-06-04  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* remote.c (remote_get_tracepoint_status): Delete addrbuf
-	local variable.  Avoid use of sprintf_vma.
+	* symfile-mem.c: 3 new gdb_static_assert for target_read_memory_bfd
+	parameters.
+	(target_read_memory_bfd): New function.
+	(symbol_file_add_from_memory): Use it.
 
-2011-11-27  Sanjoy Das  <sdas at igalia.com>
+2012-06-03  Doug Evans  <dje at google.com>
 
-	Fix regression in jit.exp.
-	* jit.c (jit_reader_try_read_symtab, jit_bfd_try_read_symtab)
-	(jit_register_code): Set the jit_objfile_data field to the correct
-	value.
+	* symtab.c (lookup_global_symbol_from_objfile): Only scan blockvector
+	of primary symtab.
+	(basic_lookup_transparent_type): Ditto.
 
-2011-11-25  Uros Bizjak  <ubizjak at gmail.com>
+	* objfiles.h (ALL_OBJFILE_PRIMARY_SYMTABS): New macro.
+	(ALL_PRIMARY_SYMTABS): Use it.
+	(ALL_PSPACE_PRIMARY_SYMTABS): Ditto.
+	* dwarf2read.c (dw2_find_symbol_file): Ditto.
+	* linespec.c (iterate_over_all_matching_symtabs): Ditto.
+	* symtab.c (lookup_symbol_aux_objfile): Ditto.
+	(basic_lookup_transparent_type): Ditto.
 
-	* alpha-tdep.c (br_opcode): New.
-	(ldl_l_opcode, ldq_l_opcode, stl_c_opcode, stq_c_opcode): Ditto.
-	(alpha_deal_with_atomic_sequence): New function.
-	(alpha_gdbarch_init): Handle single stepping of atomic sequences
-	with alpha_deal_with_atomic_sequence.
+2012-06-02  Sergio Durigan Junior  <sergiodj at redhat.com>
 
-2011-11-24  Tristan Gingold  <gingold at adacore.com>
+	* symtab.c (symbol_demangled_name): New variable `dem_name'.  Use
+	it to optimize resolution of demangled name.
 
-	* machoread.c (oso_el): Remove num_Sections, symbols, offsets
-	fields.  Add oso_sym, end_sym and nbr_syms.
-	(macho_register_oso): Change interface.
-	(macho_symtab_add_minsym): New function.
-	(macho_symtab_read): Rewritten.
-	(get_archive_prefix_len): Remove trailing blanks.
-	(oso_el_compare_name): Add comment.
-	(struct macho_sym_hash_entry): New structure.
-	(macho_relocate_common_syms): Remove.
-	(macho_sym_hash_newfunc): New function.
-	(macho_resolve_oso_sym_with_minsym): Likewise.
-	(macho_add_oso_symfile): Rewritten.
-	(macho_symfile_read_all_oso): Remove trailing blanks.
-	Adjust code to free oso vector.
-	(macho_symfile_read): Likewise.
-	Move code to initialize minimal symbol
+2012-06-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-11-24  Maciej W. Rozycki  <macro at codesourcery.com>
+	* configure.ac (development): Define new variable.
+	Call AC_CHECK_LIB for mcheck if $development.
+	(ERROR_ON_WARNING): Enable it by default only if $development.
+	* config.in: Regenerate.
+	* configure: Regenerate.
 
-	* mips-tdep.c (extended_offset): Fix formatting.
-
-2011-11-23  Doug Evans  <dje at google.com>
-
-	* dwarf2read.c (dw2_lookup_symtab): Add comment.
-	(dw2_expand_symtabs_with_filename): Ditto.
-	(dw2_expand_symtabs_matching): Ditto.
-	(dw2_map_symbol_filenames): Ditto.
-
-2011-11-23  Andrey Smirnov  <andrew.smirnov at gmail.com>
-
-	* ada-lang.c (assign_aggregate): Minor reformatting.
-
-2011-11-23  Andrey Smirnov  <andrew.smirnov at gmail.com>
-
-	* ada-lang.c (assign_aggregate): Remove declaration of local
-	variable `i' which is shadowing another variable with the same
-	name declared in the outer scope.
-
-2011-11-23  Joel Brobecker  <brobecker at adacore.com>
-
-	* ada-lang.c (get_base_type): Renames base_type.  Adjust all
-	calls throughout this file.
-
-2011-11-23  Joel Brobecker  <brobecker at adacore.com>
-
-	* gdb-dlfcn.c (gdb_dlopen): Add missing coma in call to
-	FormatMessage.
-
-2011-11-22  Tom Tromey  <tromey at redhat.com>
-
-	PR mi/8444:
-	* mi/mi-common.h (EXEC_ASYNC_SOLIB_EVENT, EXEC_ASYNC_FORK)
-	(EXEC_ASYNC_VFORK, EXEC_ASYNC_SYSCALL_ENTRY)
-	(EXEC_ASYNC_SYSCALL_RETURN, EXEC_ASYNC_EXEC): New constants.
-	* mi/mi-common.c (async_reason_string_lookup): Add new reasons.
-	* breakpoint.c (print_it_catch_fork, print_it_catch_vfork)
-	(print_it_catch_syscall, print_it_catch_exec)
-	(internal_bkpt_print_it): Use ui_out.  Emit stop reason.
-	(bpstat_print): Add 'kind' argument.  Handle
-	TARGET_WAITKIND_LOADED.
-	* infrun.c (normal_stop): Update for bpstat_print change.  Don't
-	handle TARGET_WAITKIND_LOADED here.
-	* breakpoint.h (bpstat_print): Update.
-
-2011-11-22  Tom Tromey  <tromey at redhat.com>
-
-	* mi/mi-interp.c (mi_on_normal_stop): Call bpstat_print.
-
-2011-11-22  Tom Tromey  <tromey at redhat.com>
-
-	* mi/mi-common.c (_initialize_gdb_mi_common): Remove.
-	Use static_assert to check the size of
-	async_reason_string_lookup.
-	* common/gdb_assert.h (static_assert): New macro.
-
-2011-11-22  Alan Modra  <amodra at gmail.com>
-
-	* rs6000-tdep.c (ppc_deal_with_atomic_sequence): Correct branch
-	destination calculation.  Don't expect >> to sign extend.  Don't
-	add a break if branch lands inside the sequence anywhere.
-
-2011-11-21  Keith Seitz  <keiths at redhat.com>
-
-	* gdb.mi/mi-var-display.exp: Remove XFAIL for c_variable-7.51,
-	-var-evaluate-expression of an enumeration and fix expected result.
-	* gdb.mi/mi2-varvdisplay.exp: Likewise.
-
-2011-11-21  Kwok Cheung Yeung  <kcy at codesourcery.com>
-
-	* osdata.c (info_osdata_command): Rename nprocs to nrows.  Handle
-	the case where osdata->items is empty.  Rename column names to a
-	canonical form to avoid problems with unusual column names.
-
-2011-11-21  Yao Qi  <yao at codesourcery.com>
-
-	* MAINTAINERS (Write After Approval): Keep list in alphabetical order.
-
-2011-11-20  Stan Shebs  <stan at codesourcery.com>
-
-	* NEWS: Mention tracepoint additions.
-	* breakpoint.h (struct tracepoint): New field traceframe_usage.
-	* breakpoint.c (print_one_breakpoint_location): Identify
-	tracepoints as such when reporting hit counts, report
-	trace buffer usage.
-	(create_tracepoint_from_upload): Copy status info.
-	* tracepoint.h (struct trace_status): Rename error_desc to stop_desc,
-	add fields user_name, notes, start_time, stop_time.
-	(struct uploaded_tp): Add fields hit_count, traceframe_usage.
-	* tracepoint.c (trace_user): New global.
-	(trace_notes): New global.
-	(trace_stop_notes): New global.
-	(start_tracing): Add argument and trace note handling.
-	(stop_tracing): Ditto.
-	(trace_start_command): Add notes argument.
-	(trace_stop_command): Ditto.
-	(trace_status_command): Report additional status info.
-	(trace_status_mi): Similarly.
-	(trace_save): Update, record tracepoint status.
-	(set_disconnected_tracing): Call target method directly.
-	(send_disconnected_tracing_value): Remove.
-	(set_trace_user): New function.
-	(set_trace_notes): New function.
-	(set_trace_stop_notes): New function.
-	(parse_trace_status): Handle additional status.
-	(parse_tracepoint_status): New function.
-	(parse_tracepoint_definition): Call it.
-	(tfile_get_tracepoint_status): New function.
-	(init_tfile_ops): Use it.
-	(_initialize_tracepoint): Add new setshows.
-	* target.h (struct target_ops): New methods to_get_tracepoint_status
-	and to_set_trace_notes.
-	(target_get_tracepoint_status): New macro.
-	(target_set_trace_notes): New macro.
-	* target.c (update_current_target): Add new methods.
-	* remote.c (remote_get_tracepoint_status): New function.
-	(remote_set_trace_notes): New function.
-	(init_remote_ops): Add them.
-	* mi/mi-main.c (mi_cmd_trace_start): Add argument to call.
-	(mi_cmd_trace_stop): Ditto.
-
-2011-11-20  Sanjoy Das  <sdas at igalia.com>
-
-	* jit.c: Include regcache.h.
-	(jit_gdbarch_data, jit_frame_unwind): New static variables.
-	(jit_unwind_reg_set_impl, free_reg_value_impl)
-	(jit_unwind_reg_get_impl, jit_frame_sniffer)
-	(jit_frame_unwind_stop_reason, jit_frame_this_id)
-	(jit_frame_prev_register, jit_dealloc_cache)
-	(jit_prepend_unwinder, jit_gdbarch_data_init): New functions.
-	(jit_inferior_init): Prepend (new) pseudo unwinder by calling
-	jit_prepend_unwinder.
-	(_initialize_jit): Register new gdbarch data jit_gdbarch_data.
-
-2011-11-20  Sanjoy Das  <sdas at igalia.com>
-
-	* jit.c: Include block.h, dictionary.h and frame-unwind.h.
-	(add_objfile_entry, jit_target_read_impl, jit_object_open_impl)
-	(jit_symtab_open_impl, compare_block, jit_block_open_impl)
-	(jit_symtab_line_mapping_add_impl, jit_symtab_close_impl)
-	(finalize_symtab, jit_object_close_impl)
-	(jit_reader_try_read_symtab, jit_bfd_try_read_symtab)
-	(free_objfile_data): New functions.
-	(_initialize_jit): Register jit_objfile_data with a proper cleanup
-	function.
+2012-06-01  Siddhesh Poyarekar  <siddhesh at redhat.com>
 
-2011-11-20  Sanjoy Das  <sdas at igalia.com>
+	* target.c (target_read_memory): Make LEN argument as size_t.
+	* target.h (target_read_memory): Likewise.
 
-	* jit.c: Include gdb-dlfcn.h.
-	(loaded_jit_reader, reader_init_fn_sym): New static variables.
-	(jit_reader_load, jit_reader_load_command)
-	(jit_reader_unload_command): New functions.
-	(_initialize_jit): Add commands "jit-reader-load" and
-	"jit-reader-unload".
+2012-06-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-11-20  Sanjoy Das  <sdas at igalia.com>
+	* tilegx-linux-tdep.c (tilegx_l): Use ULL for 64-bit values.
 
-	* Makefile.in: Add gdb-dlfcn.c and gdb-dlfcn.h to build system.
-	* config.in: Add new #define HAVE_LIBDL.
-	* configure.ac: Add check for -ldl.
-	* configure: Re-generated by autoconf.
-	* gdb-dlfcn.c: New file.
-	* gdb-dlfcn.h: New file.
+2012-05-31  Edjunior Machado  <emachado at linux.vnet.ibm.com>
 
-2011-11-20  Sanjoy Das  <sdas at igalia.com>
+	* ppc-linux-nat.c (have_ptrace_booke_interface): Disable ptrace
+	BookE interface for PowerPC server processors if not available
+	in the Linux Kernel.
 
-	* config.in: Add new #defines: JIT_READER_DIR and
-	JIT_READER_DIR_RELOCATABLE.
-	* configure.ac: New GDB directory entry for jit-reader-dir.
-	* configure: Re-generated by autoconf.
-	* jit.c: New static variable: const char *jit_reader_dir.
-	(_initialize_jit): Relocate jit_reader_dir.
+2012-05-31  Keith Seitz  <keiths at redhat.com>
 
-2011-11-20  Sanjoy Das  <sdas at igalia.com>
+	* linespec.c (decode_objc): Add cleanup to free
+	INFO.FILE_SYMTABS.
+	(find_linespec_symbols): Add cleanup to free CLASSES.
+	* symfile.c (find_separate_debug_file_by_debuglink): Add
+	cleanup to free DEBUGLINK.
+	* ui-out.c (clear_header_list): No need to check if
+	HEADER_NEXT.COLHDR is NULL.
+	Free HEADER_NEXT.COL_NAME.
 
-	* Makefile.in: Add jit-reader.h as a header.  Have it installed in
-	$(includedir)/gdb.
-	* configure.ac: Generate a correct value for TARGET_PTR for
-	jit-reader.h.  Tell configure to generate jit-reader.h from
-	jit-reader.in.
-	* configure: Re-generated by autoconf.
-	* jit-reader.in: New file.
-	* jit.c: Include jit-reader.h.
+2012-05-31  Matthew Gretton-Dann  <matthew.gretton-dann at arm.com>
 
-2011-11-20  Sanjoy Das  <sdas at igalia.com>
+	* ada-lang.c (standard_lookup): Prevent uninitialized variable
+	warning.
 
-	* MAINTAINERS (Write After Approval): Add myself to the list.
+2012-05-30  Jeff Kenton  <jkenton at tilera.com>
 
-2011-11-18  Ulrich Weigand  <uweigand at de.ibm.com>
+	* configure.host (gdb_host_cpu): Handle tilegx*.
+	(gdb_host): Handle tilegx-*-linux*.
+	* tilegx-linux-nat.c: New file.
+	* config/tilegx/linux.mh: New file.
 
-	* findvar.c (read_frame_register_value): Respect value_offset
-	of the register value.  Remove big-endian special case.
+2012-05-30  Jeff Kenton  <jkenton at tilera.com>
 
-2011-11-18  Tom Tromey  <tromey at redhat.com>
+	* Makefile.in (ALL_TARGET_OBJS): Add tilegx-tdep.o and
+	tilegx-linux-tdep.o.
+	(ALLDEPFILES): Add tilegx-linux-nat.c, tilegx-tdep.c and
+	tilegx-linux-tdep.c.
+	* configure.tgt: Handle tilegx-*-linux*.
+	* tilegx-tdep.h: New file.
+	* tilegx-tdep.c: New file.
+	* tilegx-linux-tdep.c: New file.
+	* regformats/reg-tilegx.dat: New file.
 
-	PR build/7196:
-	* remote.c (putpkt_for_catch_errors): New function.
-	(remote_kill): Use it.
+2012-05-30  Edjunior Machado  <emachado at linux.vnet.ibm.com>
 
-2011-11-18  Yao Qi  <yao at codesourcery.com>
+	* ppc-linux-nat.c (ppc_linux_can_use_hw_breakpoint): fix
+	accounting of hw watchpoints on ppc.
 
-	* breakpoint.c (create_breakpoint): Produce query message according to
-	breakpoint's type.
-	Allocate tracepoint per correct type.
-	Don't check SALs for pending fast tracepoints.
-	* tracepoint.c (process_tracepoint_on_disconnect): New.
-	(disconnect_tracing): Call process_tracepoint_on_disconnect.
+2012-05-30  Thiago Jung Bauermann  <thiago.bauermann at linaro.org>
 
-2011-11-18  Yao Qi  <yao at codesourcery.com>
+	* source.c (openp): Expand tilde in path entries.
 
-	* breakpoint.c (install_breakpoint):  Add one more parameter so that
-	update_global_location_list is called conditionally.
-	(create_fork_vfork_event_catchpoint): Update.
-	(create_syscall_event_catchpoint): Update.
-	(create_breakpoint_sal): Update.
-	(create_breakpoint_sal): Update. Call do_cleanups before
-	install_breakpoint.
-	* ada-lang.c (create_ada_exception_catchpoint): Update.
-	* breakpoint.h (install_breakpoint): Update declaration.
+2012-05-29  Doug Evans  <dje at google.com>
 
-2011-11-16  Ulrich Weigand  <uweigand at de.ibm.com>
+	* buildsym.c (block_compar): Fix comment.
+	(end_symtab): Fix and clarify some comments.
 
-	* spu-tdep.c (spu_return_value): Fix handling of
-	TYPE_CALLING_CONVENTION annotation.
+	* stabsread.h (cleanup_undefined_stabs_types): Renamed from
+	cleanup_undefined_types.
+	* stabsread.c (cleanup_undefined_stabs_types): Ditto.
+	All callers updated.
 
-2011-11-16  Ulrich Weigand  <uweigand at de.ibm.com>
-
-	* skip.c (skip_function_command): Work around uninitialized
-	variable warning.
-
-2011-11-16  David S. Miller  <davem at davemloft.net>
-
-	* utils.c (report_command_stats): Cast delta_wall_time 'tv_sec' and
-	'tv_usec' to long for printf since these fields have a type which
-	varies.
-
-2011-11-15  Doug Evans  <dje at google.com>
-
-	* buildsym.c (add_symbol_to_list): Delete outdated comment.
-
-2011-11-15  Paul Koning  <paul_koning at dell.com>
-
-	* python/py-type.c (typy_get_composite): New function.
-	(typy_nonzero): New function.
-	(typy_values): Rename from typy_fields.
-	(typy_fields): New function.
-	(typy_length): Raise exception if not struct, union, or enum type.
-	(typy_getitem): Ditto.
-	(typy_has_key): Ditto.
-	(typy_make_iter): Ditto.
-
-2011-11-15  Doug Evans  <dje at google.com>
-
-	PR gdb/8367
-	* NEWS: Mention new parameter basenames-may-differ.
-	* dwarf2read.c (dw2_lookup_symtab): Avoid calling gdb_realpath if
-	! basenames_may_differ.
-	* psymtab.c (lookup_partial_symtab): Ditto.
-	* symtab.c (lookup_symtab): Ditto.
-	(basenames_may_differ): New global.
-	(_initialize_symtab): New parameter basenames-may-differ.
-	* symtab.h (basenames_may_differ): Declare.
-
-2011-11-15  Pedro Alves  <pedro at codesourcery.com>
-	    Luis Machado  <lgustavo at codesourcery.com>
-
-	* auxv.c: Include observer.h.
-	(auxv_inferior_data_cleanup): New.
-	(invalidate_auxv_cache_inf): New.
-	(invalidate_auxv_cache): New.
-	(get_auxv_inferior_data): New.
-	(auxv_inferior_data): New static global.
-	(auxv_info): New structure.
-	(target_auxv_search): Use get_auxv_inferior_data instead of
-	target_read_alloc and don't free cached buffers.
-	(fprint_target_auxv): Likewise
-	(_initialize_auxv): Register per-inferior auxv cache and register
-	observers to invalidate auxv cache when needed.
-
-2011-11-14  Doug Evans  <dje at google.com>
-
-	PR gdb/7200 Make "!" an alias for "shell".
-	* NEWS: Add mention.
-	* cli/cli-cmds.c (init_cli_cmds): Remove xdb_commands condition on
-	adding "!" command, always add it.
-	* cli/cli-decode.c (find_command_name_length): Recognize "!" as a
-	command of length one.
-
-2011-11-14  Stan Shebs  <stan at codesourcery.com>
-	    Kwok Cheung Yeung  <kcy at codesourcery.com>
+2012-05-29  Tom Tromey  <tromey at redhat.com>
 
-	* NEWS: Document shorter fast tracepoints and qTMinFTPILen packet.
-	* i386-tdep.c (i386_fast_tracepoint_valid_at): Query target for
-	the minimum instruction size for fast tracepoints.
-	* target.h (struct target_ops): Add new method
-	to_get_min_fast_tracepoint_insn_len.
-	(target_get_min_fast_tracepoint_insn_len): New.
-	* target.c (update_current_target): Set up new target operation.
-	* remote.c (remote_write_bytes_aux): Fix typo.
-	(remote_get_min_fast_tracepoint_insn_len): New.
-	(init_remote_ops): Initialize new field.
-
-2011-11-14  Tom Tromey  <tromey at redhat.com>
-
-	* tracepoint.c (encode_actions_1): Use the location's gdbarch.
-	(encode_actions): Likewise.
-
-2011-11-14  Yao Qi  <yao at codesourcery.com>
-
-	* remote.c (struct remote_state): <install_in_trace> new field.
-	(PACKET_InstallInTrace): New enum value.
-	(remote_install_in_trace_feature): Support InstallInTrace.
-	(remote_supports_install_in_trace): Likewise.
-	(remote_protocol_features): Likewise.
-	(_initialize_remote): Likewise.
-	(remote_can_download_tracepoint): New.
-	* target.h (struct target): New field
-	`to_can_download_tracepoint'.
-	(target_can_download_tracepoint): New macro.
-	* target.c (update_current_target): Update.
-	* breakpoint.h (struct bp_location): Add comment on field
-	`duplicate'.
-	* breakpoint.c (should_be_inserted): Don't differentiate breakpoint
-	and tracepoint.
-	(remove_breakpoints): Don't remove tracepoints.
-	(tracepoint_locations_match ): New.
-	(breakpoint_locations_match): Call it.
-	(disable_breakpoints_in_unloaded_shlib): Handle tracepoint.
-	(download_tracepoint_locations): New.
-	(update_global_location_list): Call it.
-	* tracepoint.c (find_matching_tracepoint): Delete.
-	(find_matching_tracepoint_location): Renamed from
-	find_matching_tracepoint.  Return bp_location rather than
-	tracepoint.
-	(merge_uploaded_tracepoints): Set `inserted' field to 1 if
-	tracepoint is found.
-
-2011-11-14  Yao Qi  <yao at codesourcery.com>
-
-	* target.h (struct target): <to_download_tracepoint> Change type
-	of parameter from tracepoint to bp_location.
-	* target.c (update_current_target): Update.
-	* tracepoint.c (start_tracing): Update.
-	* remote.c (remote_download_tracepoint): Remove loop for each location
-	of a tracepoint.
+	* symfile.c (symfile_bfd_open): Don't close desc if bfd_fopen
+	fails.
+	* solib.c (solib_bfd_fopen): Don't close fd if bfd_fopen fails.
+	* exec.c (exec_file_attach): Don't close scratch_chan if bfd_fopen
+	fails.
+	* dwarf2read.c (try_open_dwo_file): Don't close fd if bfd_fopen
+	fails.
 
-2011-11-14  Maciej W. Rozycki  <macro at codesourcery.com>
+2012-05-29  Tristan Gingold  <gingold at adacore.com>
 
-	* i386-nat.c (i386_insert_hw_breakpoint): Call
-	i386_update_inferior_debug_regs.
-	(i386_remove_hw_breakpoint): Likewise.
+	* solib-darwin.c (dyld_all_image_addr, dyld_all_image): Move into...
+	(struct darwin_info): ... New struct.
+	(solib_darwin_pspace_data): New variable.
+	(darwin_pspace_data_cleanup): New function.
+	(get_darwin_info): Likewise.
+	(darwin_dyld_version_ok, darwin_load_image_infos)
+	(darwin_solib_get_all_image_info_addr_at_init)
+	(darwin_solib_read_all_image_info_addr): Add info argument.
+	Adjust code.
+	(darwin_current_sos): Use per pspace structure.
+	(darwin_solib_create_inferior_hook): Likewise.
+	(darwin_clear_solib): Likewise.
+	(_initialize_darwin_solib): Initialize solib_darwin_pspace_data.
 
-2011-11-14  Yao Qi  <yao at codesourcery.com>
+2012-05-28  Pedro Alves  <palves at redhat.com>
 
-	* breakpoint.c (init_raw_breakpoint): Call
-	add_location_to_breakpoint to replace duplicated code.
-	(add_location_to_breakpoint): Adjust the breakpoint's
-	address prior to allocating a location.
+	* infrun.c (wait_for_inferior): Move ecss and ecs locals to the
+	block that uses them.  Clear ecss before handling each event.
 
-2011-11-12  Matt Rice  <ratmice at gmail.com>
+2012-05-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* macrocmd.c (macro_no_macro_info): New function.
-	(macro_expand_command): Use macro_no_macro_info.
-	(macro_expand_once_command): Ditto.
-	(info_macro_command): Add argument processing,
-	move info_definitions_command here.
-	(_initialize_macrocmd): Remove info definitions command.
-	Add arguments to info macro help text.
-	* NEWS: Replace info definitions command with new info macro options.
+	* solib-svr4.c (svr4_current_sos): New comment on
+	svr4_current_sos_via_xfer_libraries fall back.
 
-2011-11-11  Keith Seitz  <keiths at redhat.com>
+2012-05-24  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	PR gdb/12843
-	* linespec.c (locate_first_half): Keep ':' if it looks
-	like it could be part of a Windows path starting with
-	a drive letter.
+	* psymtab.c (lookup_symbol_aux_psymtabs): New variable stab_best.  Use
+	it as a fallback for TYPE_IS_OPAQUE.
+	* symfile.h (struct quick_symbol_functions): Mention TYPE_OPAQUE
+	symbols for lookup_symbol.
 
-2011-11-10  Pedro Alves  <pedro at codesourcery.com>
+2012-05-24  John Steele Scott  <toojays at toojays.net>
 
-	* linux-nat.c (linux_nat_wait): Don't force waking up the event
-	loop when returning a TARGET_WAITKIND_NO_RESUMED.
+	PR symtab/13277: Resolving opaque structures in ICC generated binaries.
+	* dwarf2read.c (struct dwarf2_cu) <producer_is_icc>: New field.
+	(producer_is_gxx_lt_4_6): Move the checking and caching to...
+	(check_producer): ... this new function, which also checks for ICC
+	and caches the result.
+	(producer_is_icc): New function.
+	(read_structure_type): Don't set TYPE_STUB_SUPPORTED if the
+	producer was ICC.
 
-2011-11-10  Pedro Alves  <pedro at codesourcery.com>
+2012-05-24  Pedro Alves  <palves at redhat.com>
 
-	* target.c (target_waitstatus_to_string): Handle
-	TARGET_WAITKIND_NO_RESUMED.
+	PR gdb/7205
 
-2011-11-10  Doug Evans  <dje at google.com>
+	* arch-utils.c (default_gdb_signal_to_host): Rename to ...
+	(default_gdb_signal_to_target): ... this.  Add comment.
+	(default_gdb_signal_from_host): Rename to ...
+	(default_gdb_signal_from_target): ... this.  Add comment.
+	* arch-utils.h (default_gdb_signal_to_host): Rename to ...
+	(default_gdb_signal_to_target): ... this.
+	(default_gdb_signal_from_host): Rename to ...
+	(default_gdb_signal_from_target): ... this.
+	* corelow.c (core_open): Adjust to naming change.  Replace comment.
+	* gdbarch.sh (gdb_signal_from_host): Rename to ...
+	(gdb_signal_from_target): ... this.  Adjust to
+	default_gdb_signal_from_host naming change.  Extend comment.
+	(gdb_signal_to_host): Rename to ...
+	(gdb_signal_to_target): ... this.  Adjust to
+	default_gdb_signal_to_host naming change.
+	* gdbarch.h, gdbarch.c: Renegerate.
 
-	* dwarf2read.c (dw2_map_symbol_filenames): New parameter
-	`need_fullname'.
-	* psymtab.c (map_symbol_filenames_psymtab): Ditto.
-	(map_partial_symbol_filenames): Ditto.  All callers updated.
-	* psymtab.h (map_partial_symbol_filenames): Update prototype.
-	* symfile.h (struct quick_symbol_functions, map_symbol_filenames): New
-	parameter need_fullname.
+2012-05-24  Pedro Alves  <palves at redhat.com>
 
-	* psymtab.c (psymtab_to_fullname): Use cached copy if it exists.
-	* source.c (symtab_to_fullname): Ditto.
+	PR gdb/7205
 
-	* defs.h (is_cplus_marker, set_demangling_style): Moved to ...
-	* gdb-demangle.h: ... here.  New file.
-	* demangle.c: #include "gdb-demangle.h".
-	(_initialize_demangler): Use initialize_file_ftype for prototype.
-	Move "set demangle" and "set asm-demangle" parameters here from utils.c
-	(demangle, show_demangle, asm_demangle, show_asm_demangle): Move here
-	from utils.c
-	* utils.c: Update. #include "gdb-demangle.h".
-	* symtab.h (asm_demangle): Delete.
-	(demangle): Move declaration next to use.
-	* breakpoint.c: #include "gdb-demangle.h" instead of "demangle.h".
-	* dwarf2read.c: #include "gdb-demangle.h".
-	* gnu-v2-abi.c: Ditto.
-	* jv-typeprint.c: Ditto.
-	* mdebugread.c: Ditto.
-	* p-typeprint.c: Ditto.
-	* stabsread.c: Ditto.
-	* printcmd.c: Ditto.
-	(asm_demangle): Delete declaration.
-	* tui/tui-stack.c: #include "gdb-demangle.h".
+        Replace TARGET_SIGNAL_ with GDB_SIGNAL_ throughout.
 
-	* python/py-type.c (typy_fields_items): Call check_typedef.
+2012-05-24  Pedro Alves  <palves at redhat.com>
 
-2011-11-10  Joel Brobecker  <brobecker at adacore.com>
+	PR gdb/7205
 
-	* findvar.c (read_frame_register_value): Read the correct bytes
-	from registers on big-endian architectures.
+	Replace target_signal with gdb_signal throughout.
 
-2011-11-10  Tom Tromey  <tromey at redhat.com>
+2012-05-24  Pedro Alves  <palves at redhat.com>
 
-	* procfs.c (load_syscalls): Make a cleanup.
-	(open_procinfo_files): fd==0 is ok.
+	PR tui/14159
 
-2011-11-10  Joel Brobecker  <brobecker at adacore.com>
+	* tui/tui-hooks.c (tui_query_hook): Pre-compute the question
+	string, instead of reusing the va_list argument.
 
-	* procfs.c (iterate_over_mappings): Call do_cleanups before
-	returning.
+2012-05-24  Tom Tromey  <tromey at redhat.com>
 
-2011-11-09  Doug Evans  <dje at google.com>
+	* cp-support.h (cp_finalize_namespace, cp_initialize_namespace):
+	Remove.
 
-	* gdbtypes.c (check_typedef): Document that this function can
-	throw an exception.
+2012-05-23  Doug Evans  <dje at google.com>
+
+	* symtab.c (search_symbols): Formatting fixes.
+	(print_symbol_info): Formatting fixes.
+
+	* dwarf2-frame.c (execute_cfa_program): Update to handle long long ->
+	int64_t change to leb128 API.
+	(read_encoded_value, decode_frame_entry_1): Ditto.
+	* dwarf2expr.c (safe_read_uleb128, safe_read_sleb128): Ditto.
+	(dwarf_block_to_dwarf_reg, dwarf_block_to_dwarf_reg_deref): Ditto.
+	(dwarf_block_to_fb_offset, dwarf_block_to_sp_offset): Ditto.
+	(execute_stack_op): Ditto.
+	* dwarf2expr.h (gdb_read_uleb128, gdb_read_sleb128): Ditto.
+	(safe_read_uleb128, safe_read_sleb128): Ditto.
+	* dwarf2loc.c (decode_debug_loc_dwo_addresses): Ditto.
+	(dwarf2_compile_expr_to_ax): Ditto.
+	(locexpr_describe_location_piece): Ditto.
+	(disassemble_dwarf_expression): Ditto.
+	(locexpr_describe_location_1): Ditto.
+
+2012-05-23  Stan Shebs  <stan at codesourcery.com>
+	    Kwok Cheung Yeung  <kcy at codesourcery.com>
 
-2011-11-09  Tom Tromey  <tromey at redhat.com>
+	* Makefile.in (SUBDIR_MI_OBS): Add mi-cmd-info.o.
+	(SUBDIR_MI_SRCS): Add mi-cmd-info.c.
+	(mi-cmd-info.o): New rule.
+	* osdata.h (info_osdata_command): New declaration.
+	* osdata.c (info_osdata_command): Change to non-static.
+	* mi/mi-cmds.h (mi_cmd_info_os): New declaration.
+	* mi/mi-cmds.c (mi_cmds): Add -info-os MI command.
+	* mi/mi-cmd-info.c: New file.
 
-	PR c++/13342:
-	* valops.c (value_full_object): Return early if real type is
-	smaller than the enclosing type.
+2012-05-23  Doug Evans  <dje at google.com>
 
-2011-11-08  Yao Qi  <yao at codesourcery.com>
+	* symtab.c (search_symbols): Pass NULL for file_matcher to
+	expand_symtabs_matching if there are no files to match.
 
-	* amd64-tdep.c (amd64_relocate_instruction): Make it static.
+	* gdbtypes.c (lookup_typename): Simplify.
 
-2011-11-08  Meador Inge  <meadori at codesourcery.com>
+2012-05-23  Pedro Alves  <palves at redhat.com>
 
-	* arm-tdep.c (thumb_analyze_prologue): Always fallback on the SP
-	register when the frame can't be determined.
-	* arm-tdep.c (arm_analyze_prologue): Ditto.
+	* arch-utils.h (default_target_signal_to_host): Delete.
+	* arch-utils.c (default_target_signal_to_host): Delete.
+	* gdbarch.sh (target_signal_to_host): Remove.
+	* gdbarch.h, gdbarch.c: Regenerate.
 
-2011-11-07  Stan Shebs  <stan at codesourcery.com>
+2012-05-22  Doug Evans  <dje at google.com>
+
+	* dwarf2-frame.c (struct dwarf2_cie): Make initial_instructions, end
+	"const gdb_byte *".
+	(struct dwarf2_fde): Make instructions, end "const gdb_byte *".
+	(execute_cfa_program): Update to match API of leb128 functions.
+	(read_1_byte, read_4_bytes, read_8_bytes): Make buf parameter
+	"const gdb_byte *".
+	(read_unsigned_leb128, read_signed_leb128): Delete.
+	(read_initial_length): Change type of buf argument to
+	"const gdb_byte *".
+	(read_encoded_value): Update to match API of leb128 functions.
+	(decode_frame_entry): Change result to "const gdb_byte *", and
+	similarly for "start" parameter.
+	(decode_frame_entry_1): Ditto.  Use new leb128 reader functions.
+	(dwarf2_build_frame_info): Change local frame_ptr to
+	"const gdb_byte *".
+	* dwarf2expr.c (safe_read_uleb128, safe_read_sleb128): Replaces
+	read_uleb128, read_sleb128.  All callers updated.
+	(safe_skip_leb128): New function.
+	(dwarf_block_to_dwarf_reg): Update to match API of leb128 functions.
+	Call gdb_read_uleb128, gdb_skip_leb128 instead of read_uleb128.
+	(dwarf_block_to_dwarf_reg_deref): Update to match API of leb128
+	functions.  Call gdb_read_uleb128, gdb_read_sleb128 instead of
+	read_uleb128, read_sleb128.
+	(dwarf_block_to_fb_offset, dwarf_block_to_sp_offset): Ditto.
+	(execute_stack_op): Update to match API of leb128 functions.
+	* dwarf2expr.h: #include "leb128.h".
+	(read_uleb128, read_sleb128): Delete.
+	(gdb_read_uleb128, gdb_read_sleb128, gdb_skip_leb128): New functions.
+	(safe_read_uleb128, safe_read_sleb128, safe_skip_leb128): Declare.
+	* dwarf2loc.c (debug_loc_kind): New enum.
+	(decode_debug_loc_addresses): New function.
+	(decode_debug_loc_dwo_addresses): New function.
+	(dwarf2_find_location_expression): Rewrite.
+	(dwarf2_compile_expr_to_ax): Update to match API of leb128 functions.
+	(locexpr_describe_location_piece): Ditto.
+	(disassemble_dwarf_expression): Ditto.
+	(locexpr_describe_location_1): Ditto.
+	(loclist_describe_location): Rewrite.
+	* dwarf2loc.h (dwarf2_loclist_baton): New member "from_dwo".
+	* dwarf2read.c (die_reader_specs): New member "buffer_end".
+	(dwarf2_section_buffer_overflow_complaint): Renamed from
+	dwarf2_macros_too_long_complaint.  All callers updated.
+	(skip_leb128): Delete.
+	(init_cu_die_reader): Initialize reader->buffer_end.
+	(skip_one_die): Replace call to skip_leb128 with safe_skip_leb128.
+	(skip_form_bytes): New arg buffer_end.  All callers updated.
+	Replace call to skip_leb128 with gdb_skip_leb128.
+	(skip_unknown_opcode): New arg mac_end.  All callers updated.
+	(fill_in_loclist_baton): Initialize baton->from_dwo.
+
+2012-05-22  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* mips-linux-nat.c (mips_linux_read_description): Use a more
+	verbose error message.
+
+2012-05-22  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* NEWS: Add MIPS/Linux DSP support.
+	* mips-linux-tdep.c: Document post-2.6.12 o32 sigcontext layout.
+	(SIGCONTEXT_DSPCTL): New macro.
+	(SIGCONTEXT_HI1, SIGCONTEXT_LO1): Likewise.
+	(SIGCONTEXT_HI2, SIGCONTEXT_LO2): Likewise.
+	(SIGCONTEXT_HI3, SIGCONTEXT_LO3): Likewise.
+	(N64_SIGCONTEXT_HI1, N64_SIGCONTEXT_HI2): Likewise.
+	(N64_SIGCONTEXT_HI3): Likewise.
+	(N64_SIGCONTEXT_LO1, N64_SIGCONTEXT_LO2): Likewise.
+	(N64_SIGCONTEXT_LO3): Likewise.
+	(N64_SIGCONTEXT_DSPCTL): Likewise.
+	(N64_SIGCONTEXT_FPCSR): Clarify definition.
+	(mips_linux_o32_sigframe_init): Handle DSP registers.
+	(mips_linux_n32n64_sigframe_init): Likewise.
+
+2012-05-22  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	* common/buffer.c (buffer_grow): ARI fix: Remove unneeded
+	call to abort.
+
+2012-05-22  Pedro Alves  <palves at redhat.com>
+
+	* target.h (store_waitstatus): Move declaration ...
+	* inf-child.h (store_waitstatus): ... here.
+	* target.c: Move inclusion of gdb_wait.h, and ...
+	(store_waitstatus): ... this ...
+	* inf-child.c: ... here.
+	* linux-nat.c: Include inf-child.h.
+	* rs6000-nat.c: Include inf-child.h.
+	* spu-linux-nat.c: Include inf-child.h.
+
+2012-05-22  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	* tracepoint.c (start_tracing): Add missing i18n markup.
+	(stop_tracing, set_trace_user): Ditto.
+	(set_trace_notes, set_trace_stop_notes): Ditto.
+
+2012-05-21  Tom Tromey  <tromey at redhat.com>
+
+	PR c++/7173:
+	* gnu-v3-abi.c (gnuv3_baseclass_offset): Return early for Java
+	types.
+	* value.h (value_cast_pointers): Update.
+	* valops.c (value_cast_pointers): Add 'subclass_check' argument.
+	(value_cast): Update.
+	(update_search_result): New function.
+	(do_search_struct_field): New, from search_struct_field.  Check
+	for ambiguous results.
+	(search_struct_field): Rewrite.
+	* infcall.c (value_arg_coerce): Update.
+	* eval.c (evaluate_subexp_standard) <STRUCTOP_MEMBER>: Use
+	value_cast_pointers.
+	* ada-lang.c (ada_convert_actual): Update.
+
+2012-05-21  Tom Tromey  <tromey at redhat.com>
+
+	* macroexp.c (macro_stringify): Terminate the string.
+
+2012-05-20  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* NEWS (--with-auto-load-dir): Prepend $debugdir to the default path.
+	Describe it.
+	* auto-load.c (auto_load_expand_dir_vars): New function.
+	(auto_load_safe_path_vec_update): Use it, remove the
+	substitute_path_component call thanks to it.
+	(auto_load_objfile_script): Remove the debug_file_directory processing.
+	Use auto_load_expand_dir_vars, remove the substitute_path_component
+	call thanks to it.
+	* configure: Regenerate.
+	* configure.ac (--with-auto-load-dir): Prepend $debugdir to the default
+	path.  Escape $ also for $debugdir.
+	(--with_auto_load_safe_path): Escape $ also for $debugdir.
+	* utils.c (substitute_path_component): Accept also DIRNAME_SEPARATOR.
+
+2012-05-20  Doug Evans  <dje at google.com>
+
+	* dwarf2read.c (recursively_find_pc_sect_symtab): Initialize "s"
+	before use.  Check for symtab->includes == NULL before scanning it.
+
+2012-05-18  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* mips-tdep.c (mips_reg3_to_reg): Optimize storage.
+
+2012-05-18  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* NEWS: Add microMIPS support and "set mips compression",
+	"show mips compression" commands.
+	* mips-tdep.h (mips_isa): New enum.
+	(gdbarch_tdep): Add mips_isa.
+	(mips_pc_is_mips16): Update prototype.
+	(mips_pc_is_mips, mips_pc_is_micromips): New prototypes.
+	* mips-tdep.c (mips_compression_mips16): New variable.
+	(mips_compression_micromips): Likewise.
+	(mips_compression_strings): Likewise.
+	(mips_compression_string): Likewise.
+	(is_mips16_isa, is_micromips_isa): New functions.
+	(is_mips16_addr): Rename to...
+	(is_compact_addr): ... this.
+	(unmake_mips16_addr): Likewise to...
+	(unmake_compact_addr): ... this.
+	(make_mips16_addr): Likewise to...
+	(make_compact_addr): ... this.
+	(is_mips_addr, is_mips16_addr, is_micromips_addr): New
+	functions.
+	(mips_elf_make_msymbol_special): Handle microMIPS code.
+	(msymbol_is_special): Rename to...
+	(msymbol_is_mips16): ... this.
+	(mips_make_symbol_special, mips_pc_is_mips16): Update
+	accordingly.
+	(msymbol_is_mips, msymbol_is_micromips): New functions.
+	(mips16_to_32_reg): Rename to...
+	(mips_reg3_to_reg): ... this.
+	(mips_pc_is_mips, mips_pc_is_micromips): New functions.
+	(mips_pc_isa): Likewise.
+	(mips_read_pc, mips_unwind_pc, mips_write_pc): Handle microMIPS
+	code.
+	(mips_fetch_instruction): Pass return status instead of printing
+	an error message if requested.  Handle microMIPS code.  Bail out
+	on an invalid ISA.
+	(micromips_op): New macro.
+	(b0s4_imm, b0s5_imm, b0s5_reg, b0s7_imm, b0s10_imm): Likewise.
+	(b1s9_imm, b2s3_cc, b4s2_regl, b5s5_op, b5s5_reg): Likewise.
+	(b6s4_op, b7s3_reg): Likewise.
+	(b0s6_op, b0s11_op, b0s12_imm, b0s16_imm, b0s26_imm): Likewise.
+	(b6s10_ext, b11s5_reg, b12s4_op): Likewise.
+	(mips_insn_size): New function.
+	(mips32_next_pc): Update mips_fetch_instruction call.
+	(micromips_relative_offset7): New function.
+	(micromips_relative_offset10): Likewise.
+	(micromips_relative_offset16): Likewise.
+	(micromips_pc_insn_size): Likewise.
+	(micromips_bc1_pc): Likewise.
+	(micromips_next_pc): Likewise.
+	(unpack_mips16): Update mips_fetch_instruction call.
+	(extended_mips16_next_pc): Update according to change to
+	mips16_to_32_reg.
+	(mips_next_pc): Update mips_pc_is_mips16 call.  Handle microMIPS
+	code.
+	(mips16_scan_prologue): Update mips_fetch_instruction call.
+	Update according to change to mips16_to_32_reg.
+	(mips_insn16_frame_sniffer): Update mips_pc_is_mips16 call.
+	(mips_insn16_frame_base_sniffer): Likewise.
+	(micromips_decode_imm9): New function.
+	(micromips_scan_prologue): Likewise.
+	(mips_micro_frame_cache): Likewise.
+	(mips_micro_frame_this_id): Likewise.
+	(mips_micro_frame_prev_register): Likewise.
+	(mips_micro_frame_sniffer): Likewise.
+	(mips_micro_frame_unwind): New variable.
+	(mips_micro_frame_base_address): New function.
+	(mips_micro_frame_base): New variable.
+	(mips_micro_frame_base_sniffer): New function.
+	(mips32_scan_prologue): Update mips_fetch_instruction call.
+	(mips_insn32_frame_sniffer): Check for the standard MIPS ISA
+	rather than for MIPS16.
+	(mips_insn32_frame_base_sniffer): Likewise.
+	(mips_addr_bits_remove): Handle microMIPS code.
+	(deal_with_atomic_sequence): Rename to...
+	(mips_deal_with_atomic_sequence): ... this.  Update the type
+	of the variable used to hold an instruction.  Remove the ISA bit
+	check.  Update mips_fetch_instruction call.
+	(micromips_deal_with_atomic_sequence): New function.
+	(deal_with_atomic_sequence): Likewise.
+	(mips_about_to_return): Handle microMIPS code.  Update
+	mips_fetch_instruction call.
+	(heuristic_proc_start): Check for the standard MIPS ISA rather
+	than for MIPS16.  Update mips_pc_is_mips16 and
+	mips_fetch_instruction calls.  Handle microMIPS code.
+	(mips_push_dummy_code): Handle microMIPS code.
+	(mips_eabi_push_dummy_call): Likewise.
+	(mips_o32_return_value): Update mips_pc_is_mips16 call.
+	(mips_o64_push_dummy_call): Handle microMIPS code.
+	(mips_o64_return_value): Update mips_pc_is_mips16 call.
+	(is_delayed): Remove function.
+	(mips_single_step_through_delay): Replace the call to is_delayed
+	with mips32_instruction_has_delay_slot.  Correct MIPS16 handling.
+	Handle microMIPS code.
+	(mips_skip_prologue): Update mips_pc_is_mips16 call.  Handle
+	microMIPS code.
+	(mips32_in_function_epilogue_p): Update mips_fetch_instruction
+	call.
+	(micromips_in_function_epilogue_p): New function.
+	(mips16_in_function_epilogue_p): Update mips_fetch_instruction
+	call.
+	(mips_in_function_epilogue_p): Update mips_pc_is_mips16 call.
+	Handle microMIPS.
+	(gdb_print_insn_mips): Likewise.
+	(mips_breakpoint_from_pc): Likewise.
+	(mips_remote_breakpoint_from_pc): New function.
+	(mips32_instruction_has_delay_slot): Simplify making use of the
+	updated mips_fetch_instruction interface.
+	(micromips_instruction_has_delay_slot): New function.
+	(mips16_instruction_has_delay_slot): Simplify making use of the
+	updated mips_fetch_instruction interface.
+	(mips_adjust_breakpoint_address): Check for the standard MIPS
+	ISA rather than for MIPS16 ISA.  Update for unmake_compact_addr 
+	calls.  Handle microMIPS code.
+	(mips_get_mips16_fn_stub_pc): Update mips_fetch_instruction call.
+	(mips_skip_trampoline_code): Handle microMIPS code.
+	(global_mips_compression): New function.
+	(mips_gdbarch_init): Handle the compressed ISA setting from ELF
+	file flags.  Register the microMIPS remote breakpoint handler
+	and heuristic frame unwinder.
+	(show_mips_compression): New function.
+	(_initialize_mips_tdep): Add the "set mips compression" and
+	"show mips compression" commands.
+
+2012-05-18  Sergio Durigan Junior  <sergiodj at redhat.com>
+
+	* ada-lang.c:
+	* ada-tasks.c:
+	* ada-varobj.c:
+	* amd64-darwin-tdep.c:
+	* arm-symbian-tdep.c:
+	* arm-tdep.c:
+	* avr-tdep.c:
+	* ax-gdb.c:
+	* bfin-linux-tdep.c:
+	* breakpoint.c:
+	* c-valprint.c:
+	* cli/cli-cmds.c:
+	* coffread.c:
+	* cp-support.c:
+	* cris-tdep.c:
+	* dwarf2-frame-tailcall.c:
+	* dwarf2-frame.c:
+	* dwarf2expr.c:
+	* dwarf2loc.c:
+	* dwarf2read.c:
+	* elfread.c:
+	* eval.c:
+	* expprint.c:
+	* f-valprint.c:
+	* frv-tdep.c:
+	* h8300-tdep.c:
+	* hppa-hpux-tdep.c:
+	* hppa-tdep.c:
+	* hppanbsd-tdep.c:
+	* i386-nto-tdep.c:
+	* i386-tdep.c:
+	* i387-tdep.c:
+	* ia64-tdep.c:
+	* jit.c:
+	* linespec.c:
+	* linux-tdep.c:
+	* lm32-tdep.c:
+	* m2-valprint.c:
+	* m32c-tdep.c:
+	* m32r-rom.c:
+	* m32r-tdep.c:
+	* m68k-tdep.c:
+	* m68klinux-tdep.c:
+	* mi/mi-main.c:
+	* microblaze-tdep.c:
+	* mips-linux-tdep.c:
+	* mips-tdep.c:
+	* mn10300-tdep.c:
+	* p-valprint.c:
+	* parse.c:
+	* ppc-linux-tdep.c:
+	* ppc-sysv-tdep.c:
+	* printcmd.c:
+	* python/py-finishbreakpoint.c:
+	* python/py-inferior.c:
+	* python/py-infthread.c:
+	* python/py-type.c:
+	* python/python.c:
+	* remote-fileio.c:
+	* remote-m32r-sdi.c:
+	* remote-mips.c:
+	* reverse.c:
+	* rl78-tdep.c:
+	* rs6000-aix-tdep.c:
+	* rs6000-tdep.c:
+	* s390-tdep.c:
+	* score-tdep.c:
+	* sh64-tdep.c:
+	* skip.c:
+	* solib-darwin.c:
+	* solib-dsbt.c:
+	* solib-frv.c:
+	* sparc-tdep.c:
+	* spu-multiarch.c:
+	* spu-tdep.c:
+	* stack.c:
+	* symfile.c:
+	* symtab.c:
+	* tic6x-tdep.c:
+	* tracepoint.c:
+	* v850-tdep.c:
+	* valarith.c:
+	* valprint.c:
+	* value.c:
+	* xcoffread.c:
+	* xtensa-tdep.c:
+	* ada-lang.c:
+	* ada-tasks.c:
+	* ada-varobj.c:
+	* amd64-darwin-tdep.c:
+	* arm-symbian-tdep.c:
+	* arm-tdep.c: Delete unused variables.
+
+2012-05-18  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Rename $ddir to $datadir.
+	* NEWS (--with-auto-load-dir): Rename $ddir to $datadir.
+	* auto-load.c (auto_load_safe_path_vec_update)
+	(auto_load_gdb_datadir_changed, auto_load_objfile_script): Likewise.
+	* configure: Regenerate.
+	* configure.ac (--with-auto-load-dir, --with-auto-load-safe-path):
+	Likewise.  Remove the 'use $ddir' help string.
 
-	* MAINTAINERS: Move Michael Snyder to Past Maintainers.
+2012-05-18  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-11-07  Joel Brobecker  <brobecker at adacore.com>
+	* auto-load.c (show_auto_load_safe_path): Accept any combination of
+	DIRNAME_SEPARATOR and IS_DIR_SEPARATOR for wild-match.
 
-	* infrun.c (handle_inferior_event): Minor reformatting.
+2012-05-18  Tom Tromey  <tromey at redhat.com>
 
-2011-11-05  Doug Evans  <dje at google.com>
+	PR exp/13907:
+	* valprint.h (struct value_print_options) <symbol_print>: New
+	field.
+	* valprint.c (user_print_options): Add default for symbol_print.
+	(show_symbol_print): New function.
+	(generic_val_print): Respect symbol_print.
+	(_initialize_valprint): Add "print symbol" setting.
+	* f-valprint.c (f_val_print): Respect symbol_print.
+	* c-valprint.c (c_val_print): Respect symbol_print.
+	* NEWS: Update.
+	* printcmd.c (print_address_symbolic): Return int.  Ignore some
+	zero-size symbols.
+	(print_address_demangle): Return int.
+	* defs.h: (print_address_symbolic): Return int.
+	* value.h (print_address_demangle): Return int.
+
+2012-05-18  Tom Tromey  <tromey at redhat.com>
+
+	* valprint.c (val_print_string): Don't print leading space.
+	* p-valprint.c (pascal_val_print) <TYPE_CODE_PTR>: Optionally
+	print space before string or vtbl.
+	* m2-valprint.c (print_unpacked_pointer): Optionally print space
+	before string.
+	* jv-valprint.c (java_value_print): Print space before string.
+	* go-valprint.c (print_go_string): Print space before string.
+	* f-valprint.c (f_val_print) <TYPE_CODE_PTR>: Optionally print
+	space before string.
+	* c-valprint.c (c_val_print) <TYPE_CODE_PTR>: Optionally print
+	space before string or vtbl.
+	* auxv.c (fprint_target_auxv): Print space after address.
+
+2012-05-18  Tom Tromey  <tromey at redhat.com>
+
+	* printcmd.c (print_address_demangle): Remove special case for 0.
+
+2012-05-18  Tom Tromey  <tromey at redhat.com>
+
+	* printcmd.c (print_address_demangle): Add 'opts' argument.
+	* p-valprint.c (pascal_val_print): Update.
+	* jv-valprint.c (java_val_print): Update.
+	* value.h: Update.
+	* valprint.c (generic_val_print): Update.
+	(print_function_pointer_address): Add 'options' argument.  Remove
+	'addressprint' argument.  Update.
+	* m2-valprint.c (print_unpacked_pointer): Update.
+	* gnu-v3-abi.c (print_one_vtable): Update.
+	(gnuv3_print_method_ptr): Update.
+	* f-valprint.c (f_val_print): Update.
+	* cp-valprint.c (cp_print_value_fields): Update.
+	* valprint.h (print_function_pointer_address): Update.
+	* c-valprint.c (c_val_print): Update.
+
+2012-05-18  Tom Tromey  <tromey at redhat.com>
+
+	* psymtab.c (find_pc_sect_symtab_from_partial): Return the symtab
+	directly corresponding to the found psymtab.
+	* dwarf2read.c (recursively_find_pc_sect_symtab): New function.
+	(dw2_find_pc_sect_symtab): Use it.
+	* block.h (blockvector_contains_pc): Declare.
+	* block.c (find_block_in_blockvector): New function.
+	(blockvector_for_pc_sect): Use it.
+	(blockvector_contains_pc): New function.
+
+2012-05-18  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* mips-tdep.h (mips_write_pc): New prototype.
+	* mips-tdep.c (mips_write_pc): Make external, add description.
+	* mips-linux-tdep.c (mips_linux_write_pc): Use mips_write_pc,
+	add description.
+
+2012-05-18  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* mips-tdep.c (mips_read_pc): Use gdbarch_pc_regnum instead of
+	mips_regnum->pc.
+	(mips_unwind_pc, mips_write_pc): Likewise.
+	(mips_gdbarch_init): Remove a comment on gdbarch_pc_regnum and
+	gdbarch_read_pc.
+
+2012-05-17  Joel Brobecker  <brobecker at adacore.com>
+
+	* procfs.c (procfs_find_new_threads, procfs_pid_to_str,
+	proc_warn, proc_error, proc_get_status, proc_flags,
+	proc_why, proc_what, proc_nsysarg, proc_sysargs,
+	proc_set_run_on_last_close, proc_unset_run_on_last_close,
+	proc_unset_inherit_on_fork, proc_set_async, proc_unset_async,
+	proc_stop_process, proc_wait_for_stop, proc_run_process,
+	proc_set_traced_signals, proc_set_traced_faults,
+	proc_set_traced_sysentry, proc_set_traced_sysexit,
+	proc_set_held_signals, proc_get_held_signals,
+	proc_get_traced_signals, proc_get_traced_faults,
+	proc_get_traced_sysentry, proc_get_traced_sysexit,
+	proc_clear_current_fault, proc_set_current_signal,
+	proc_clear_current_signal, proc_get_gregs, proc_get_fpregs,
+	proc_set_gregs, proc_set_fpregs, proc_kill, proc_parent_pid,
+	proc_get_nthreads, proc_get_nthreads, proc_get_nthreads,
+	proc_get_current_thread, proc_get_current_thread,
+	proc_get_current_thread, proc_update_threads,
+	proc_update_threads, proc_update_threads, proc_update_threads,
+	proc_iterate_over_threads, procfs_find_new_threads,
+	procfs_pid_to_str): Make static.  Remove advance declaration.
+	(proc_cursig): Make static.  Conditionalized defintion on
+	PROCFS_DONT_PIOCSSIG_CURSIG being defined.
+	(proc_syscall, proc_set_kill_on_last_close,
+	proc_unset_kill_on_last_close, proc_set_inherit_on_fork,
+	proc_get_pending_signals, proc_get_signal_actions,
+	proc_trace_signal, proc_ignore_signal): Delete.
+
+2012-05-16  Sergio Durigan Junior  <sergiodj at redhat.com>
+
+	* coffread.c (cs_section_address): Passing proper argument for
+	`bfd_get_section_vma'.
+	* dwarf2read.c (dwarf2_locate_sections): Likewise, for
+	`bfd_get_section_flags'.
+	* remote.c (remote_trace_set_readonly_regions): Likewise, for
+	`bfd_get_section_vma'.
+
+2012-05-16  Tom Tromey  <tromey at redhat.com>
+
+	PR macros/13205:
+	* macrotab.h: (macro_define_special): Declare.
+	(enum macro_special_kind): New.
+	(struct macro_definition) <argc, replacement>: Update comments.
+	* macrotab.c (new_macro_definition): Unconditionally set 'argc'.
+	(macro_define_object_internal): New function.
+	(macro_define_object): Use it.
+	(macro_define_special): New function.
+	(fixup_definition): New function.
+	(macro_lookup_definition, foreach_macro_in_scope)
+	(foreach_macro): Use fixup_definition.
+	* macroexp.h (macro_stringify): Declare.
+	* macroexp.c (free_buffer_return_text): New function.
+	(stringify): Constify "arg".
+	(macro_stringify): New function.
+	* dwarf2read.c (macro_start_file): Call macro_define_special.
+
+2012-05-16  Maciej W. Rozycki  <macro at codesourcery.com>
+            Maciej W. Rozycki  <macro at mips.com>
+
+	* breakpoint.h (bp_location): Add related_address member.
+	* inferior.h (get_return_value): Take a pointer to struct value
+	instead of struct type for the function requested.
+	* value.h (using_struct_return): Likewise.
+	* gdbarch.sh (return_value): Take a pointer to struct value
+	instead of struct type for the function requested.
+	* breakpoint.c (set_breakpoint_location_function): Initialize
+	related_address for bp_gnu_ifunc_resolver breakpoints.
+	* elfread.c (elf_gnu_ifunc_resolver_return_stop): Pass the
+	requested function's address to gdbarch_return_value.
+	* eval.c (evaluate_subexp_standard): Pass the requested
+	function's address to using_struct_return.
+	* infcall.c (call_function_by_hand): Pass the requested
+	function's address to using_struct_return and
+	gdbarch_return_value.
+	* infcmd.c (get_return_value): Take a pointer to struct value
+	instead of struct type for the function requested.
+	(print_return_value): Update accordingly.
+	(finish_command_continuation): Likewise.
+	* stack.c (return_command): Pass the requested function's
+	address to using_struct_return and gdbarch_return_value.
+	* value.c (using_struct_return): Take a pointer to struct value
+	instead of struct type for the function requested.  Pass the
+	requested function's address to gdbarch_return_value.
+	* python/py-finishbreakpoint.c (finish_breakpoint_object):
+	New function_value member, replacing function_type.
+	(bpfinishpy_dealloc): Update accordingly.
+	(bpfinishpy_pre_stop_hook): Likewise.
+	(bpfinishpy_init): Likewise.  Record the requested function's
+	address.
+	* mips-tdep.c (mips_fval_reg): New enum.
+	(mips_o32_push_dummy_call): For MIPS16 FP doubles do not swap
+	words put in GP registers.
+	(mips_o64_push_dummy_call): Update a comment.
+	(mips_o32_return_value): Take a pointer to struct value instead
+	of struct type for the function requested and use it to check if
+	using the MIPS16 calling convention.  Return the designated
+	general purpose registers for floating-point values returned in
+	MIPS16 mode.
+	(mips_o64_return_value): Likewise.
+	* ppc-tdep.h (ppc_sysv_abi_return_value): Update prototype.
+	(ppc_sysv_abi_broken_return_value): Likewise.
+	(ppc64_sysv_abi_return_value): Likewise.
+	* alpha-tdep.c (alpha_return_value): Take a pointer to struct
+	value instead of struct type for the function requested.
+	* amd64-tdep.c (amd64_return_value): Likewise.
+	* amd64-windows-tdep.c (amd64_windows_return_value): Likewise.
+	* arm-tdep.c (arm_return_value): Likewise.
+	* avr-tdep.c (avr_return_value): Likewise.
+	* bfin-tdep.c (bfin_return_value): Likewise.
+	* cris-tdep.c (cris_return_value): Likewise.
+	* frv-tdep.c (frv_return_value): Likewise.
+	* h8300-tdep.c (h8300_return_value): Likewise.
+	(h8300h_return_value): Likewise.
+	* hppa-tdep.c (hppa32_return_value): Likewise.
+	(hppa64_return_value): Likewise.
+	* i386-tdep.c (i386_return_value): Likewise.
+	* ia64-tdep.c (ia64_return_value): Likewise.
+	* iq2000-tdep.c (iq2000_return_value): Likewise.
+	* lm32-tdep.c (lm32_return_value): Likewise.
+	* m32c-tdep.c (m32c_return_value): Likewise.
+	* m32r-tdep.c (m32r_return_value): Likewise.
+	* m68hc11-tdep.c (m68hc11_return_value): Likewise.
+	* m68k-tdep.c (m68k_return_value): Likewise.
+	(m68k_svr4_return_value): Likewise.
+	* m88k-tdep.c (m88k_return_value): Likewise.
+	* mep-tdep.c (mep_return_value): Likewise.
+	* microblaze-tdep.c (microblaze_return_value): Likewise.
+	* mn10300-tdep.c (mn10300_return_value): Likewise.
+	* moxie-tdep.c (moxie_return_value): Likewise.
+	* mt-tdep.c (mt_return_value): Likewise.
+	* ppc-linux-tdep.c (ppc_linux_return_value): Likewise.
+	* ppc-sysv-tdep.c (ppc_sysv_abi_return_value): Likewise.
+	(ppc_sysv_abi_broken_return_value): Likewise.
+	(ppc64_sysv_abi_return_value): Likewise.
+	* ppcnbsd-tdep.c (ppcnbsd_return_value): Likewise.
+	* rl78-tdep.c (rl78_return_value): Likewise.
+	* rs6000-aix-tdep.c (rs6000_return_value): Likewise.
+	* rx-tdep.c (rx_return_value): Likewise.
+	* s390-tdep.c (s390_return_value): Likewise.
+	* score-tdep.c (score_return_value): Likewise.
+	* sh-tdep.c (sh_return_value_nofpu): Likewise.
+	(sh_return_value_fpu): Likewise.
+	* sh64-tdep.c (sh64_return_value): Likewise.
+	* sparc-tdep.c (sparc32_return_value): Likewise.
+	* sparc64-tdep.c (sparc64_return_value): Likewise.
+	* spu-tdep.c (spu_return_value): Likewise.
+	* tic6x-tdep.c (tic6x_return_value): Likewise.
+	* v850-tdep.c (v850_return_value): Likewise.
+	* vax-tdep.c (vax_return_value): Likewise.
+	* xstormy16-tdep.c (xstormy16_return_value): Likewise.
+	* xtensa-tdep.c (xtensa_return_value): Likewise.
+	* gdbarch.c: Regenerate.
+	* gdbarch.h: Regenerate.
 
-	* source.c (forget_cached_source_info_for_objfile): Move call to
-	objfile->sf->qf->forget_cached_source_info outside of
-	ALL_OBJFILE_SYMTABS loop.
-	(forget_cached_source_info): Delete unused variable `s'.
+2012-05-15  Tom Tromey  <tromey at redhat.com>
 
-2011-11-05  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* python/python.c (gdbpy_find_pc_line): Use gdb_py_ulongest.
 
-	* i386-nat.c (dr_ref_count): Remove unused variable.
+2012-05-15  Joel Brobecker  <brobecker at adacore.com>
 
-2011-11-05  Doug Evans  <dje at google.com>
+	* breakpoint.c (init_breakpoint_sal): Add quotes around part
+	of command in two error message.
 
-	* main.c (captured_main): Set lim_at_start before calling
-	make_command_stats_cleanup.
+2012-05-15  Joel Brobecker  <brobecker at adacore.com>
 
-2011-11-04  Doug Evans  <dje at google.com>
+	* breakpoint.c (init_breakpoint_sal): Remove trailing spaces.
 
-	* utils.c: #include "timeval-utils.h".
-	(cmd_stats): Rename start_time to start_cpu_time.
-	New member start_wall_time.
-	(report_command_stats): Report wall time.
-	(make_command_stats_cleanup): Record start wall time.
+2012-05-15  Joel Brobecker  <brobecker at adacore.com>
 
-2011-11-04  Tom Tromey  <tromey at redhat.com>
+	* breakpoint.c (find_condition_and_thread): Minor reformatting.
 
-	* cp-namespace.c (cp_lookup_symbol_imports): Reindent.
+2012-05-15  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-11-04  Rainer Orth  <ro at CeBiTec.Uni-Bielefeld.DE>
+	* NEWS (show auto-load scripts-directory): Add forgotten command.
 
-	* coff-pe-read.c: Include defs.h before bfd.h.
+2012-05-15  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-11-04  Phil Muldoon  <pmuldoon at redhat.com>
+	* spu-tdep.c (spu_catch_start): Update create_breakpoint caller
+	parameters.
 
-	PR Python/13345
+2012-05-14  H.J. Lu  <hongjiu.lu at intel.com>
 
-	* python/python.c (python_run_simple_file): Expand tilde in path.
+	* amd64-tdep.c: Include features/i386/x32.c and
+	features/i386/x32-avx.c.
+	(_initialize_amd64_tdep): Call initialize_tdesc_x32 and
+	initialize_tdesc_x32_avx.
 
-2011-11-04  Phil Muldoon  <pmuldoon at redhat.com>
+2012-05-14  Stan Shebs  <stan at codesourcery.com>
 
-	PR Python/13363
+	Add dynamic printf.
+	* breakpoint.h (enum bptype): New type bp_dprintf.
+	(struct breakpoint): New field extra_string.
+	(struct breakpoint_ops): Add arg to create_breakpoints_sal.
+	(create_breakpoint): Add extra_string arg.
+	* breakpoint.c (dprintf_breakpoint_ops): New.
+	(is_breakpoint): Add bp_dprintf.
+	(bpstat_what): Add dprintf case.
+	(bptype_string): Ditto.
+	(print_one_breakpoint_location): Ditto.
+	(init_bp_location): Ditto.
+	(bkpt_print_mention): Ditto.
+	(dprintf_style_enums): New array.
+	(dprintf_style): New global.
+	(dprintf_function): New global.
+	(dprintf_channel): New global.
+	(update_dprintf_command_list): New function.
+	(update_dprintf_commands): New function.
+	(init_breakpoint_sal): Add extra_string argument, handle it.
+	(create_breakpoint_sal): Add extra_string argument.
+	(create_breakpoints_sal): Add extra_string argument, update callers.
+	(find_condition_and_thread): Add extra argument.
+	(create_breakpoint): Add extra_string argument, record it.
+	(dprintf_command): New function.
+	(break_command_1): Add arg to create_breakpoint call.
+	(handle_gnu_v3_exceptions): Ditto.
+	(trace_command): Ditto.
+	(ftrace_command): Ditto.
+	(strace_command): Ditto.
+	(bkpt_print_mention): Add dprintf case.
+	(create_breakpoint_sal_default): Add extra_string argument.
+	(_initialize_breakpoint): Add new commands.
+	* mi/mi-cmd-break.c (mi_cmd_break_insert): Add arg to call.
+	* python/py-breakpoint.c (bppy_init): Ditto.
+	* python/py-finishbreakpoint.c (bpfinishpy_init): Ditto.
 
-	* python/py-type.c (typy_lookup_type): Do not return a type in
-          an exception handler.
+2012-05-14  Maciej W. Rozycki  <macro at codesourcery.com>
 
-2011-11-03  Jan Kratochvil  <jan.kratochvil at redhat.com>
-	    Eli Zaretskii  <eliz at gnu.org>
+	* mips-tdep.c (mips_push_dummy_code): Correct description typo.
 
-	* linux-nat.c (_initialize_linux_nat): Improve help
-	for `info proc stat', `info proc status', `info proc cwd',
-	`info proc cmdline' and `info proc exe'.
+2012-05-14  Siva Chandra Reddy  <sivachandra at google.com>
 
-2011-11-02  Stan Shebs  <stan at codesourcery.com>
+	* python/python.c (gdbpy_find_pc_line): Use ULONGEST instead of
+	unsigned long long.
 
-	String collection for tracepoints.
-	* NEWS: Mention string collection.
-	* common/ax.def (tracenz): New bytecode.
-	* ax-gdb.h (trace_string_kludge): Declare.
-	* ax-gdb.c: Include valprint.h and c-lang.h.
-	(trace_string_kludge): New global.
-	(gen_traced_pop): Add string case.
-	(agent_command): Add string case.
-	* tracepoint.h (decode_agent_options): Declare.
-	* tracepoint.c: Include cli-utils.h.
-	(decode_agent_options): New function.
-	(validate_actionline): Call it.
-	(encode_actions_1): Ditto.
-	* target.h (struct target_ops): New method to_supports_string_tracing.
-	(target_supports_string_tracing): New macro.
-	* target.c (update_current_target): Add to_supports_string_tracing.
-	* remote.c (struct remote_state): New field string_tracing.
-	(remote_string_tracing_feature): New function.
-	(remote_protocol_features): New feature tracenz.
-	(remote_supports_string_tracing): New function.
-	(init_remote_ops): Set to_supports_string_tracing.
+2012-05-13  Siva Chandra Reddy  <sivachandra at google.com>
 
-2011-11-02  Pedro Alves  <pedro at codesourcery.com>
-	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+	Add a new function gdb.find_pc_line to the Python API.
+	* NEWS (Python Scripting): Add entry about the new function.
+	* python/python.c (gdbpy_find_pc_line): New function which
+	implements gdb.find_pc_line.
+	(GdbMethods): Add entry for the new function.
 
-	* linux-nat.c: Include cli/cli-utils.h.
-	(enum info_proc_what): New.
-	(linux_nat_info_proc_cmd): Rename to ...
-	(linux_nat_info_proc_cmd_1): ... here.  Remove variables argv and all.
-	New parameter what.  Initialize cmdline_f, cwd_f, exe_f, mappings_f,
-	status_f and stat_f from WHAT.  Throw error on extra parameters.
-	(linux_nat_info_proc_cmd, linux_nat_info_proc_cmd_mappings)
-	(linux_nat_info_proc_cmd_stat, linux_nat_info_proc_cmd_status)
-	(linux_nat_info_proc_cmd_cwd, linux_nat_info_proc_cmd_cmdline)
-	(linux_nat_info_proc_cmd_exe, linux_nat_info_proc_cmd_all): New.
-	(_initialize_linux_nat): New variable info_proc_cmdlist.  Install `info
-	proc mappings', `info proc stat`, `info proc status', `info proc cwd',
-	`info proc cmdline', `info proc exe' and `info proc all' as real
-	subcommands of `info proc'.
-
-2011-11-01  Justin Lebar  <justin.lebar at gmail.com>
-
-	* Makefile.in: (SFILES): Add skip.c.
-	(HFILES_NO_SRCDIR): Add skip.h.
-	(COMMON_OBS): Add skip.o.
-	* skip.h, skip.c: New.
-	* breakpoint.h (set_default_breakpoint): Remove.
-	(get_sal_arch): Declare.
-	* breakpoint.c: Remove default_breakpoint_valid,
-	default_breakpoint_address, default_breakpoint_symtab,
-	default_breakpoint_line, default_breakpoint_pspace variables.
-	(get_sal_arch): Make public.
-	(set_default_breakpoint): Remove.
-	(parse_breakpoint_sals, create_breakpoint, clear_command,
-	decode_line_spec_1): Remove uses of default_breakpoint variables;
-	replaced with function calls into stack.c.
-	* cli/cli-cmds.h: Add cmd_list_element *skiplist.
-	* cli/cli-cmds.c: Add skiplist.
-	(init_cmd_lists): Initialize skiplist.
-	(init_cli_cmds): Fix comment (classes of commands appear in
-	alphabetical order).
-	* infrun.c (handle_inferior_event): Add check that we don't step into
-	a function whose pc is marked for skip.
-	* stack.c: Declare last_displayed_sal_valid, last_displayed_pspace,
-	last_displayed_addr, last_displayed_symtab, last_displayed_line
-	variables.
-	(set_last_displayed_sal): New static function.
-	(print_frame_info): Switch call to set_default_breakpoint to call to
-	set_last_displayed_sal.
-	(clear_last_displayed_sal, last_displayed_sal_is_valid,
-	get_last_displayed_pspace, get_last_displayed_addr,
-	get_last_displayed_symtab, get_last_displayed_line,
-	get_last_displayed_sal): New public functions.
-	* stack.h (clear_last_displayed_sal, last_displayed_sal_is_valid,
-	get_last_displayed_pspace, get_last_displayed_addr,
-	get_last_displayed_symtab, get_last_displayed_line,
-	get_last_displayed_sal): Declare.
-
-2011-11-01  Justin Lebar <justin.lebar at gmail.com>
+2012-05-12  Pedro Alves  <palves at redhat.com>
 
-	* MAINTAINERS (Write After Approval): Add myself to the list.
+	* amd64-linux-tdep.c (_initialize_amd64_linux_tdep): Call
+	initialize_tdesc_x32_linux and initialize_tdesc_x32_avx_linux.
 
-2011-10-29  Yao Qi  <yao at codesourcery.com>
+2012-05-12  Eli Zaretskii  <eliz at gnu.org>
 
-	* infcmd.c (disconnect_command): Call disconnect_tracing.
+	* inferior.c: Include completer.h
+	(initialize_inferiors): Set completer of add-inferior to
+	filename_completer.
 
-2011-10-29  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-05-11  H.J. Lu  <hongjiu.lu at intel.com>
 
-	Code cleanup.
-	* symtab.c (skip_prologue_sal): Code reformatting.
+	* amd64-linux-tdep.c (amd64_linux_core_read_description): Check
+	gdbarch_ptr_bit for x32 core dump.
 
-2011-10-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-05-11  H.J. Lu  <hongjiu.lu at intel.com>
 
-	PR symtab/13208
-	* jit.c (jit_register_code): Remove unused variable my_cleanups.  Check
-	for NULL from bfd_open_from_target_memory.  Fix ownership of NBFD and
-	SAI.
+	* amd64-linux-tdep.c: Include features/i386/x32-linux.c
+	and features/i386/x32-avx-linux.c.
 
-2011-10-28  Pedro Alves  <pedro at codesourcery.com>
+2012-05-11  Stan Shebs  <stan at codesourcery.com>
+	    Kwok Cheung Yeung  <kcy at codesourcery.com>
 
-	* linux-nat.c (linux_nat_filter_event): Remove `options'
-	parameter, and dead code that used it.  If we're handling a
-	PTRACE_EVENT_EXEC event, and the thread group leader is no longer
-	in our lwp list, re-add it.
-	(check_zombie_leaders): New.
-	(linux_nat_wait_1): Remove `options' and `pid' locals.  Always
-	wait for children with WNOHANG, and always wait for all children.
-	Don't check for no resumed children upfront.  Simplify wait loop.
-	Check for zombie thread group leaders after handling all wait
-	statuses.  Return TARGET_WAITKIND_NO_RESUMED if there no
-	unwaited-for children left.
-	* infrun.c (fetch_inferior_event): Handle TARGET_WAITKIND_NO_RESUMED.
-	(handle_inferior_event): Handle TARGET_WAITKIND_NO_RESUMED.
-	(normal_stop): Handle TARGET_WAITKIND_NO_RESUMED.
-	* target.h (enum target_waitkind) <TARGET_WAITKIND_NO_RESUMED>: New.
+	* NEWS: Describe new info os commands.
+	* common/linux-osdata.c (PID_T, TIME_T): Define.
+	(MAX_PID_T_STRLEN): New.
+	(linux_common_core_of_thread): Add comment.  Change to use PID_T and
+	MAX_PID_T_STRLEN.
+	(command_from_pid): Add comment.  Change to use PID_T.
+	(commandline_from_pid):  Change to use PID_T.
+	(user_from_pid): Add comment.
+	(get_process_owner): Add comment. Change to use PID_T and
+	MAX_PID_T_STRLEN.
+	(get_number_of_cpu_cores): Add comment.
+	(get_cores_used_by_process): Add comment.  Change to use PID_T and
+	MAX_PID_T_STRLEN.
+	(linux_xfer_osdata_processes): Change to use PID_T and
+	MAX_PID_T_STRLEN.
+	(compare_processes): New function.
+	(linux_xfer_osdata_processgroups): New function.
+	(linux_xfer_osdata_threads): Change to use PID_T.
+	(linux_xfer_osdata_fds): New function.
+	(format_socket_state, print_sockets): New functions.
+	(union socket_addr): New union.
+	(linux_xfer_osdata_isockets): New function.
+	(time_from_time_t, group_from_gid): New functions.
+	(linux_xfer_osdata_shm): New function.
+	(linux_xfer_osdata_sem): New function.
+	(linux_xfer_osdata_msg): New function.
+	(linux_xfer_osdata_modules): New function.
+	(osdata_table): Add new entries.
+	* common/buffer.c (buffer_xml_printf): Add support for long and
+	long long format specifiers.
+
+2012-05-11  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* amd64-linux-tdep.h (tdesc_x32_linux): New.
+	(tdesc_x32_avx_linux): Likewise.
+
+2012-05-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Implement multi-component --with-auto-load-dir.
+	* NEWS (set auto-load scripts-directory, --with-auto-load-dir): New
+	entries.
+	(--with-auto-load-safe-path): Update the default value description.
+	* auto-load.c (auto_load_dir, set_auto_load_dir, show_auto_load_dir):
+	New.
+	(auto_load_objfile_script): Add DEBUG_AUTO_LOAD output.  Remove
+	GDB_DATADIR NULL check.  Replace GDB_DATADIR/auto-load by
+	AUTO_LOAD_DIR.  Support $ddir and multiple components in it.
+	(_initialize_auto_load): Initialize also auto_load_dir.  Install new
+	"set auto-load scripts-directory".
+	* config.in: Regenerate.
+	* configure: Regenerate.
+	* configure.ac (--with-auto-load-dir): New configure option.
+	(--auto-load-safe-path): Change the default to --with-auto-load-dir.
 
-2011-10-28  Sterling Augustine  <saugustine at google.com>
+2012-05-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* psymtab.c (map_symbol_filenames_psymtab): Call QUIT.
-	* symtab.c (free_completion_list): New function.
-	(do_free_completion_list): Likewise.
-	(default_make_symbol_completion_list_break_on): New variable
-	back_to. Call make_cleanup and discard_cleanups.
-	(make_source_files_completion_list): Likewise.
+	Provide $ddir substitution for --with-auto-load-safe-path.
+	* NEWS (--with-auto-load-safe-path, --without-auto-load-safe-path): New
+	entries.
+	* auto-load.c: Include observer.h.
+	(auto_load_safe_path_vec_update): Call substitute_path_component for
+	each component.  New variable ddir_subst.
+	(auto_load_gdb_datadir_changed): New function.
+	(set_auto_load_safe_path): Rename DEFAULT_AUTO_LOAD_SAFE_PATH to
+	AUTO_LOAD_SAFE_PATH.  New comment.
+	(_initialize_auto_load): Rename DEFAULT_AUTO_LOAD_SAFE_PATH to
+	AUTO_LOAD_SAFE_PATH.  Install auto_load_gdb_datadir_changed.
+	* config.in: Regenerate.
+	* configure: Regenerate.
+	* configure.ac (--auto-load-safe-path): Rename
+	DEFAULT_AUTO_LOAD_SAFE_PATH to AUTO_LOAD_SAFE_PATH.  Default to
+	GDB_DATADIR/auto-load.
+	* defs.h (substitute_path_component): New declaration.
+	* top.c: Include observer.h.
+	(set_gdb_datadir): New function.
+	(init_main): Install it for "set data-directory".
+	* utils.c (substitute_path_component): New function.
 
-2011-10-28  Paul Koning  <paul_koning at dell.com>
+2012-05-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* python/lib/gdb/types.py (deep_items): Rename from deepitems.
-	* NEWS: Mention deep_items.
+	Make auto-load handle multiple components of DEBUG_FILE_DIRECTORY.
+	* auto-load.c (auto_load_objfile_script): Remove check for NULL
+	DEBUG_FILE_DIRECTORY.  Handle multiple components of
+	DEBUG_FILE_DIRECTORY.
 
-2011-10-28  Alen Skondro  <askondro at gmail.com>
+2012-05-10  Tom Tromey  <tromey at redhat.com>
 
-	* ser-tcp.c [USE_WIN32API] (ETIMEDOUT): Don't define if already
-	defined.
+	* dwarf2read.c (recursively_write_psymbols): New function.
+	(write_psymtabs_to_index): Use it.
 
-2011-10-27  Meador Inge  <meadori at codesourcery.com>
+	* dwarf2read.c (struct dwarf2_queue_item) <pretend_language>: New
+	field.
+	(load_cu, dw2_do_instantiate_symtab, process_psymtab_comp_unit)
+	(load_partial_comp_unit): Update.
+	(queue_comp_unit): Add argument 'pretend_language'.
+	(process_queue): Update.
+	(psymtab_to_symtab_1): Skip dependencies that have a user.
+	(load_partial_comp_unit_reader): Give meaning to the 'data'
+	argument.
+	(load_full_comp_unit): Add 'pretend_language' argument.
+	(process_full_comp_unit): Add 'pretend_language' argument.  Set
+	language on CU.
+	(process_imported_unit_die, read_file_scope, read_type_unit_scope):
+	Update.
+	(maybe_queue_comp_unit): Add 'pretend_language' argument.
+	(follow_die_offset, follow_die_sig, read_signatured_type_reader):
+	Update.
+	(prepare_one_comp_unit): Add 'pretend_language' argument.
+
+	* dwarf2read.c: (dwarf2_per_cu_ptr): New typedef.
+	(struct dwarf2_per_objfile) <just_read_cus>: New field.
+	(struct dwarf2_per_cu_data) <imported_symtabs>: New field.
+	(dw2_do_instantiate_symtab): Check whether symtab was read in
+	before queueing.
+	(dw2_instantiate_symtab): Add assertion.  Call
+	process_cu_includes.
+	(process_psymtab_comp_unit): Compute 'dependencies' for psymtab.
+	(partial_symtab_p): New typedef.
+	(set_partial_user): New function.
+	(dwarf2_build_psymtabs_hard): Use set_partial_user.
+	(scan_partial_symbols): Add imported CU to imported_symtabs.
+	(dwarf2_psymtab_to_symtab): Call process_cu_includes.
+	(psymtab_to_symtab_1): Do nothing if psymtab is readin.
+	(get_symtab, recursively_compute_inclusions)
+	(compute_symtab_includes, process_cu_includes)
+	(process_imported_unit_die): New functions.
+	(process_die) <DW_TAG_imported_unit>: New case.
+	(dwarf2_per_objfile_free): Free 'imported_symtabs'.
+
+	* dwarf2read.c (struct dwarf2_per_cu_data) <psymtab>: Update
+	comment.
+	(struct partial_die_info) <locdesc>: Remove.
+	<d>: New field.
+	(process_psymtab_comp_unit): Add 'read_partial' argument.
+	Update.
+	(process_type_comp_unit, dwarf2_build_psymtabs_hard): Update.
+	(scan_partial_symbols): Handle DW_TAG_imported_unit.
+	(add_partial_symbol): Update.
+	(process_die): Handle DW_TAG_partial_unit.
+	(read_file_scope): Update comment.
+	(load_partial_dies): Handle DW_TAG_imported_unit.
+	(read_partial_die): Handle DW_TAG_partial_unit, DW_AT_import.
+	(determine_prefix, dwarf2_name): Handle DW_TAG_partial_unit.
+
+2012-05-10  Tom Tromey  <tromey at redhat.com>
+
+	* cc-with-dwz.sh: New file.
+
+2012-05-10  Tom Tromey  <tromey at redhat.com>
+
+	* symtab.h (struct symtab) <includes, user>: New fields.
+	* block.h (struct block_iterator) <d, idx, which>: New fields.
+	* block.c (initialize_block_iterator, find_iterator_symtab)
+	(block_iterator_step, block_iter_name_step)
+	(block_iter_match_step): New functions.
+	(block_iterator_first, block_iterator_next)
+	(block_iter_name_first, block_iter_name_next)
+	(block_iter_match_first, block_iter_match_next): Rewrite.
+	(get_block_symtab): New function.
+
+2012-05-10  Tom Tromey  <tromey at redhat.com>
+
+	* jv-lang.c (get_java_class_symtab): Use allocate_global_block,
+	set_block_symtab.
+	* jit.c (finalize_symtab): Use allocate_global_block,
+	set_block_symtab.
+	* buildsym.c (finish_block_internal): New function, from old
+	finish_block.
+	(finish_block): Rewrite.
+	(end_symtab): Use finish_block_internal, set_block_symtab.
+	* block.h (struct global_block): New.
+	(allocate_global_block, set_block_symtab): Declare.
+	* block.c (allocate_global_block, set_block_symtab): New
+	functions.
 
-	* MAINTAINERS (Write After Approval): Add myself to the list.
+2012-05-10  Tom Tromey  <tromey at redhat.com>
 
-2011-10-27  Joel Brobecker  <brobecker at adacore.com>
+	* psymtab.c (partial_map_expand_apply): Add assertion.
+	(partial_map_symtabs_matching_filename): Skip included psymtabs.
+	(psymtab_to_symtab): Find unshared psymtab.
+	(dump_psymtab): Print including psymtabs.
+	(recursively_search_psymtabs): New function.
+	(expand_symtabs_matching_via_partial): Use it.
+	* psympriv.h (struct partial_symtab) <user, searched_flag>: New
+	fields.
+	(enum psymtab_search_status): New.
 
-	* value.h (read_frame_register_value): Add declaration.
-	* findvar.c (read_frame_register_value): New function.
-	(value_from_register): Use read_frame_register_value
-	instead of get_frame_register_value + value_contents_copy
-	to get value contents.
+2012-05-10  Tom Tromey  <tromey at redhat.com>
 
-2011-10-27  Doug Evans  <dje at google.com>
+	* tracepoint.c (scope_info): Update.
+	* symtab.c (lookup_block_symbol, iterate_over_symbols)
+	(find_pc_sect_symtab, search_symbols)
+	(default_make_symbol_completion_list_break_on)
+	(make_file_symbol_completion_list): Update.
+	* symmisc.c (dump_symtab_1): Update.
+	* stack.c (print_frame_args, iterate_over_block_locals)
+	(print_frame_labels, iterate_over_block_arg_vars): Update.
+	* python/py-block.c (block_object) <dict>: Remove.
+	<block>: New field.
+	<iter>: Change type.
+	(blpy_iter): Update.
+	(blpy_block_syms_iternext): Update.
+	* psymtab.c (map_block): Use block iterators.
+	* objfiles.c (objfile_relocate1): Use ALL_DICT_SYMBOLS.
+	* mi/mi-cmd-stack.c (list_args_or_locals): Update.
+	* mdebugread.c (parse_symbol, mylookup_symbol): Update.
+	* infrun.c (check_exception_resume): Update.
+	* cp-support.c (make_symbol_overload_list_block): Update.
+	* coffread.c (patch_opaque_types): Update.
+	* buildsym.c (finish_block, end_symtab): Use ALL_DICT_SYMBOLS.
+	* block.h (struct block_iterator): New.
+	(block_iterator_first, block_iterator_next, block_iter_name_first)
+	(block_iter_name_next, block_iter_match_first)
+	(block_iter_match_next): Declare.
+	(ALL_BLOCK_SYMBOLS): Redefine.
+	* block.c (block_iterator_first, block_iterator_next)
+	(block_iter_name_first, block_iter_name_next)
+	(block_iter_match_first, block_iter_match_next): New functions.
+	* ada-lang.c (ada_add_block_symbols)
+	(ada_make_symbol_completion_list): Use block iterator.
+
+2012-05-10  Tom Tromey  <tromey at redhat.com>
+
+	* psymtab.c (PSYMTAB_TO_SYMTAB): Remove.
+	(find_pc_sect_symtab_from_partial, lookup_symbol_aux_psymtabs)
+	(lookup_partial_symbol, find_last_source_symtab_from_partial)
+	(read_psymtabs_with_filename, map_matching_symbols_psymtab)
+	(expand_symtabs_matching_via_partial, maintenance_check_symtabs):
+	Update.
 
-	* cli/cli-cmds.c (source_script_with_search): Pass full path to
-	source_script_from_stream if it may have been found on the search path.
-	* python/py-auto-load.c (source_section_scripts): Pass full path to
-	source_python_script_for_objfile.
-	* python/python.c (source_python_script): Delete stream parameter.
-	All callers updated.
-	(source_python_script_for_objfile): Ditto.
-	* python/python-internal.h (source_python_script_for_objfile): Update.
-	* python/python.h (source_python_script): Update.
+2012-05-10  Joel Brobecker  <brobecker at adacore.com>
 
-2011-10-27  Tom Tromey  <tromey at redhat.com>
+	* config/djgpp/fnchange.lst: Add entries for print-file-var-lib1.c,
+	print-file-var-lib2.c, print-file-var-main.c and
+	print-file-var.exp (located in gdb/testsuite/gdb.base).
 
-	* ada-lang.h (ada_start_decode_line_1, ada_finish_decode_line_1)
-	(ada_sals_for_line): Remove declarations.
+2012-05-10  Joel Brobecker  <brobecker at adacore.com>
 
-2011-10-27  Kevin Pouget  <kevin.pouget at st.com>
+	* findvar.c (default_read_var_value): For LOC_UNRESOLVED symbols,
+	try locating the symbol in the symbol's own objfile first, before
+	extending the search to all objfiles.
+	* symtab.c (lookup_symbol_aux_objfile): New function, extracted
+	out of lookup_symbol_aux_symtabs.
+	(lookup_symbol_aux_symtabs): Add new parameter "exclude_objfile".
+	Replace extracted-out code by call to lookup_symbol_aux_objfile.
+	Do not search EXCLUDE_OBJFILE.
+	(lookup_static_symbol_aux): Update call to lookup_symbol_aux_symtabs.
+	(lookup_symbol_global): Search for matches in the block's objfile
+	first, before searching all other objfiles.
 
-	Move unwind reasons to an external .def file
-	* frame.c (frame_stop_reason_string): Rewrite using
-	unwind_stop_reasons.def.
-	* frame.h (enum unwind_stop_reason): Likewise.
-	* python/py-frame.c (gdbpy_initialize_frames): Likewise.
-	(gdbpy_frame_stop_reason_string): Use new enum unwind_stop_reason
-	constants for bound-checking.
-	* unwind_stop_reasons.def: New file.
-	* stack.c (backtrace_command_1): Handle UNWIND_FIRST_ERROR as an alias
-	instead of a distinct value.
+2012-05-10  Tristan Gingold  <gingold at adacore.com>
 
-2011-10-27  Phil Muldoon  <pmuldoon at redhat.com>
+	* printcmd.c (set_command): Add pre/post inc/dec.
 
-        PR python/13331
+2012-05-09  Frank Ch. Eigler  <fche at redhat.com>
 
-	* python/py-function.c (fnpy_call): Check 'args' is not NULL.
-	(convert_values_to_python): Return on Python tuple allocation
-	failure.  Return NULL on value conversion error.
+	* gdb.1: Document -ex option.
 
-2011-10-27  Phil Muldoon  <pmuldoon at redhat.com>
+2012-05-09  Joel Brobecker  <brobecker at adacore.com>
 
-	* python/py-breakpoint.c (bppy_set_enabled): Use TRY_CATCH.
-	(bppy_set_task): Ditto.
-	(bppy_delete_breakpoint): Ditto.
-	* python/py-symbol.c (gdbpy_lookup_symbol): Ditto.
-	(gdbpy_lookup_global_symbol): Ditto.
-	* python/py-lazy-string.c (stpy_convert_to_value): Ditto.
-	* python/py-frame.c (frapy_is_valid): Ditto.
-	(frame_info_to_frame_object): Ditto.
-	* python/py-type.c (typy_lookup_type): Ditto.
-	(typy_getitem): Ditto.
-	(typy_has_key): Ditto.
-	(typy_richcompare): Use TRY_CATCH.  Do not return Py_NE on error.
+	* infcall.c (call_function_by_hand): Remove AT_SYMBOL handling.
+	* inferior.h (AT_SYMBOL): Delete.
 
-2011-10-26  Joel Brobecker  <brobecker at adacore.com>
+2012-05-09  Joel Brobecker  <brobecker at adacore.com>
 
-	* gdbarch.h: Regenerate.
+	* mips-tdep.c (mips_push_dummy_code): New function.
+	(mips_gdbarch_init): Set the gdbarch call_dummy_location to
+	ON_STACK and install mips_push_dummy_code as our gdbarch
+	push_dummy_code routine.
 
-2011-10-26  Meador Inge  <meadori at codesourcery.com>
+2012-05-09  Pedro Alves  <palves at redhat.com>
 
-	* gdbarch.sh (function_list): Use 'pstring' when printing
-	'gcore_bfd_target'.
-	* gdbarch.c: Regenerate.
+	* target.c (set_maintenance_target_async_permitted): Rename to ...
+	(set_target_async_command): ... this.
+	(show_maintenance_target_async_permitted): Rename to ...
+	(show_target_async_command): ... this.
+	(initialize_targets): Adjust.
 
-2011-10-26  Ulrich Weigand  <uweigand at de.ibm.com>
+2012-05-08  Doug Evans  <dje at google.com>
 
-	* regcache.c (registers_changed_ptid): Invalidate thread architecture
-	and frame caches if PTID refers to all threads of a process.
+	* go-exp.y (classify_name): Add missing assignment of fields of
+	yylval.ssym.
 
-2011-10-26  Ulrich Weigand  <uweigand at de.ibm.com>
+2012-05-08  Eli Zaretskii  <eliz at gnu.org>
 
-	* spu-tdep.c (spu_catch_start): Pass non-NULL breakpoint ops
-	to create_breakpoint.
+	Display the ">" prompt in interactive mode while reading canned
+	commands, even when the current interpreter is MI.
 
-2011-10-26  Ulrich Weigand  <uweigand at de.ibm.com>
+	* interps.c (interp_set_temp): New function.
 
-	* ppc-sysv-tdep.c (ppc_sysv_use_opencl_abi): New function.
-	(ppc_sysv_abi_push_dummy_call): Use it.
-	(do_ppc_sysv_return_value): Likewise.
-	(ppc64_sysv_abi_push_dummy_call): Likewise.
-	(ppc64_sysv_abi_return_value): Likewise.
+	* interps.h (interp_set_temp): Add prototype.
 
-2011-10-26  Paul Koning  <paul_koning at dell.com>
+	* cli/cli-script.c (restore_interp): New cleanup function.
+	(read_command_lines): Temporarily override the current interpreter
+	with CLI and arrange for restoring the original one.
 
-	* python/lib/gdb/types.py (deepitems): New function.
-	
-2011-10-25  Paul Koning  <paul_koning at dell.com>
+2012-05-12  Joel Sherrill <joel.sherrill at oarcorp.com>
 
-	PR python/13327
-	
-	* python/py-value.c (value_to_value_object): Remove fetching of
-	the value if it was lazy.
-	(valpy_get_is_lazy): New function.
-	(valpy_fetch_lazy): New function.
+	* microblaze-rom.c (_initialize_picobug_rom): Add prototype.
 
-2011-10-24  Joel Brobecker  <brobecker at adacore.com>
+2012-05-07  Sergio Durigan Junior  <sergiodj at redhat.com>
 
-	* ppc-sysv-tdep.c (do_ppc_sysv_return_value): Do not check
-	FUNC_TYPE's calling convention if FUNC_TYPE is not a function.
+	* probe.c (parse_probes): Move conditional to check for
+	debuginfo files from here...
+	* stap-probe.c (stap_get_probes): ... to here.
 
-2011-10-24  Pedro Alves  <pedro at codesourcery.com>
+2012-05-07  Mark Kettenis  <kettenis at gnu.org>
+	    H.J. Lu  <hongjiu.lu at intel.com>
 
-	* linux-nat.c (linux_handle_extended_wait): When handling a clone
-	event, in non-stop, if not stopping, make sure the new lwp has
-	last_resume_kind set to resume_continue.  Assert that when we're
-	resuming the new lwp, its last_resume_kind is resume_continue.
+	* amd64-tdep.c (amd64_analyze_prologue): Additionally check for
+	`movl %esp, %ebp' for the X32 ABI.
 
-2011-10-24  Pedro Alves  <pedro at codesourcery.com>
+2012-05-07  Tom Tromey  <tromey at redhat.com>
 
-	* infrun.c (handle_inferior_event): Don't assume inferior_ptid is
-	already set when marking the event thread as not executing in
-	non-stop mode.
+	* dwarf2read.c (dwarf_tag_name): Return const char *.  Use
+	get_DW_TAG_name.
+	(dwarf_attr_name): Return const char *.  Use get_DW_AT_name.
+	(dwarf_form_name): Return const char *.  Use get_DW_FORM_name.
+	(dwarf_stack_op_name): Remove.
+	(dwarf_cfi_name): Return const char *.  Use get_DW_ATE_name.
+	(decode_locdesc): Use get_DW_OP_name.
+	* dwarf2loc.c (unimplemented): Use get_DW_OP_name.
+	(dwarf2_compile_expr_to_ax): Likewise.
+	(disassemble_dwarf_expression): Likewise.
+	* dwarf2expr.h: (dwarf_stack_op_name): Remove.
 
-2011-10-24  Pedro Alves  <pedro at codesourcery.com>
+2012-05-07  Chung-Lin Tang  <cltang at codesourcery.com>
 
-	* infrun.c (handle_inferior_event): Add debug output for
-	TARGET_WAITKIND_NO_HISTORY.
+	* sh-linux-tdep.c: Include trad-frame.h and tramp-frame.h.
+	(sh_linux_sigtramp_cache): New function.
+	(sh_linux_sigreturn_init): New function.
+	(sh_linux_rt_sigreturn_init): New function.
+	(SH_MOVW,SH_TRAP,SH_OR_R0_R0): New symbols for instruction
+	patterns.
+	(SH_NR_SIGRETURN,SH_NR_RT_SIGRETURN): New symbols for sigreturn
+	syscall codes.
+	(sh_linux_sigreturn_tramp_frame): New tramp_frame definition.
+	(sh_linux_rt_sigreturn_tramp_frame): Likewise.
+	(sh_linux_init_abi): Add init calls to register new tramp_frame
+	definitions under 32-bit SH, update comments.
 
-2011-10-24  Phil Muldoon  <pmuldoon at redhat.com>
+2012-05-07  Pedro Alves  <palves at redhat.com>
 
-	* NEWS: Move set/show extended-prompt to "New Options". Expand
-	description. Fix typos.
+	PR gdb/10952
 
-2011-10-24  Phil Muldoon  <pmuldoon at redhat.com>
+	* amd64-linux-tdep.c: Include glibc-tdep.h.
+	(amd64_linux_init_abi): Install glibc_skip_solib_resolver as
+	gdbarch_skip_solib_resolver callback.
 
-        PR python/13310
+2012-05-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* python/py-param.c (call_doc_function): Correctly deference on
-	function exit.
+	* auto-load.c (set_auto_load_safe_path): Reset AUTO_LOAD_SAFE_PATH
+	back to DEFAULT_AUTO_LOAD_SAFE_PATH if it is being set to "".
+	(show_auto_load_safe_path): Check any-directory by comparison with "/".
+	(add_auto_load_safe_path): Change the error message.
+	(_initialize_auto_load): Change the "safe-path" help text.
+	* configure: Regenerate
+	* configure.ac (--without-auto-load-safe-path): Set
+	WITH_AUTO_LOAD_SAFE_PATH to /.
 
-2011-10-21  Joel Brobecker  <brobecker at adacore.com>
+2012-05-05  Sergio Durigan Junior  <sergiodj at redhat.com>
 
-	* ada-tasks.c (print_ada_task_info): Fix computation of
-	number of tasks displayed in command output.
+	* stap-probe.h: Do not include unecessary `probe.h'.
 
-2011-10-20  Jan Kratochvil  <jan.kratochvil at redhat.com>
-	    Ulrich Weigand  <uweigand at de.ibm.com>
+2012-05-05  Alan Modra  <amodra at gmail.com>
 
-	* dwarf2-frame-tailcall.c: Include dwarf2-frame.h.
-	(dwarf2_tailcall_prev_register_first): Use dwarf2_frame_cfa.
-	(dwarf2_tailcall_sniffer_first): Remove variable pc_regnum.  Replace
-	gdbarch_pc_regnum and frame_unwind_register_unsigned by
-	gdbarch_unwind_pc.
+	* elfread.c (elf_symtab_read): Use bfd_abs_section_ptr and
+	bfd_und_section_ptr.
+	* machoread.c (macho_symtab_add_minsym): Use bfd_abs_section_ptr
+	and bfd_com_section_ptr.
 
-2011-10-20  Cary Coutant  <ccoutant at google.com>
+2012-05-04  Joel Brobecker  <brobecker at adacore.com>
 
-	* dwarf2read.c (dw2_get_file_names): Move adjustment for type
-	section to...
-	(partial_read_comp_unit_head): ...here.  Add is_debug_type_section
-	flag.  Adjust all callers.
-	(process_psymtab_comp_unit): Remove adjustment for type section.
+	* MAINTAINERS (Past Maintainers): Add Chris Faylor.
 
-2011-10-20  Aleksandar Ristovski  <aristovski at qnx.com>
+2012-05-04  Joel Brobecker  <brobecker at adacore.com>
 
-	* cp-namespace.c (cp_scan_for_anonymous_namespaces): Changed function
-	arguments by adding OBJFILE.  Instead of getting objfile from
-	symbol's symtab, use new argument OBJFILE.
-	* cp-support.h (cp_scan_for_anonymous_namespaces): Changed function
-	arguments by adding OBJFILE.
-	* gdb/dwarf2read.c (new_symbol_full): Change call to
-	cp_scan_for_anonymous_namespaces to match new signature.
-	* gdb/stabsread.c (define_symbol): Change call to
-	cp_scan_for_anonymous_namespaces to match new signature.
+	* windows-nat.h (segment_register_p_ftype): New typedef.
+	(windows_set_segment_register_p): Add declaration.
+	* windows-nat.c (segment_register_p): New static global.
+	(windows_set_segment_register_p): New function.
+	(do_windows_fetch_inferior_registers): Add special handling
+	for segment registers.
+	* amd64-windows-nat.c: #include "amd64-tdep.h".
+	(amd64_windows_segment_register_p): New function.
+	(_initialize_amd64_windows_nat): Call windows_set_segment_register_p.
+	* i386-windows-nat.c: #include "i386-tdep.h".
+	(i386_windows_segment_register_p): New function.
+	(_initialize_i386_windows_nat): Call windows_set_segment_register_p.
 
-2011-10-20  Phil Muldoon  <pmuldoon at redhat.com>
+2012-05-04  Tristan Gingold  <gingold at adacore.com>
 
-        PR python/13308
-        PR python/13309
+	* printcmd.c (set_command): Emit a warning if the expression is not
+	an assignment.
 
-	* python/py-breakpoint.c (gdbpy_breakpoints): Fix List reference
-	leak.
-	* python/py-inferior.c (gdbpy_inferiors): Fix List reference
-	leak.  Delete unused variables.
+2012-05-03  Joel Brobecker  <brobecker at adacore.com>
 
-2011-10-20  Phil Muldoon  <pmuldoon at redhat.com>
+	* nto-procfs.c (procfs_find_new_threads, procfs_pid_to_str):
+	Make static.
 
-	PR python/12656
+2012-05-03  Sergio Durigan Junior  <sergiodj at redhat.com>
 
-	* python/py-frame.c (frapy_read_var): Use const struct *block.
-	* python/py-type.c (typy_lookup_typename): Likewise.
-	(typy_lookup_type): Likewise.
-	(typy_legacy_template_argument): Likewise.
-	(typy_template_argument): Likewise.
-	(gdbpy_lookup_type): Likewise.
-	* python/py-symbol.c (gdbpy_lookup_symbol): Likewise.
-	* python/py-block.c (blpy_block_object): Likewise.
-	(blpy_iter): Likewise.
-	(blpy_get_start): Likewise.
-	(blpy_get_end): Likewise.
-	(blpy_get_function): Likewise.
-	(blpy_get_superblock): Likewise.
-	(set_block):  Likewise.
-	(block_to_block_object): Likewise.
-	(block_object_to_block): Likewise.
-	(blpy_is_valid): Likewise.
-	(blpy_get_global_block): New function.
-	(blpy_get_static_block): New function.
-	(blpy_is_global): New function.
-	(blpy_is_static): New function.
-	* blockframe.c (block_innermost_frame): Likewise.
-	* valops.c (value_of_variable): Likewise.
-	* frame.h: Update prototypes.
-	* python/python-internal.h: Likewise.
-	* value.h: Likewise.
+	* stap-probe.c (stap_is_operator): Change declaration.
+	(stap_get_opcode): Change return value.
+	(stap_parse_argument_1): Update calls to `stap_get_opcode' and
+	`stap_parse_argument_1'.
 
-2011-10-19  Cary Coutant  <ccoutant at google.com>
+2012-05-03  Pedro Alves  <pedro at codesourcery.com>
 
-	* dwarf2read.c (create_debug_types_hash_table): Fix size of
-	type_offset field.
+	* infrun.c (displaced_step_fixup): Add "displaced:" prefix to
+	debug log.
 
-2011-10-19  Cary Coutant  <ccoutant at google.com>
+2012-05-03  Siva Chandra Reddy  <sivachandra at google.com>
 
-	* dwarf2read.c (peek_abbrev_code): New function.
-	(dw2_get_file_names): Check for dummy compilation units.
-	(create_debug_types_hash_table): Likewise.
-	(process_psymtab_comp_unit): Likewise.
-	(load_partial_comp_unit): Likewise.
-	(load_full_comp_unit): Likewise.
-
-2011-10-18  Aleksandar Ristovski  <aristovski at qnx.com>
-
-	* solib-svr4.c (read_program_header): New variables pt_phdr, pt_phdr_p,
-	initialize them from target PT_PHDR p_vaddr, relocate sect_addr by
-	pt_phdr if PT_PHDR was found.
-
-2011-10-17  Joost van der Sluis  <joost at cnoc.nl>
-
-	* gdbtypes.h: Added TYPE_SAFE_NAME macro to get the name of a
-	type or "<unnamed type"> when there is no name assigned.
-	* gnu-v3-abi.c (gnuv3_rtti_type): Use TYPE_SAFE_NAME macro to
-	avoid a sigint when no name is assigned.
-
-2011-10-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	Add two new methods global_block and static_block to gdb.Symtab
+	objects.
+	* NEWS (Python scripting): Add entry about the new methods.
+	* python/py-symtab.c (stpy_global_block): New function which
+	implements the gdb.Symtab.global_block() method.
+	(stpy_static_block): New function which implements the
+	gdb.Symtab.static_block() method.
+	(symtab_object_methods): Add entries for the two new methods.
 
-	Revert:
-	2011-07-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
-        * dwarf2expr.c (ctx_no_read_reg): New function.
-        * dwarf2expr.h (ctx_no_read_reg): New declaration.
-        * dwarf2read.c (read_2_signed_bytes, read_4_signed_bytes): Remove.
-        (decode_locdesc_read_mem, decode_locdesc_ctx_funcs): New.
-        (decode_locdesc): Replace by a caller of dwarf_expr_eval.
-
-2011-10-16  Doug Evans  <dje at google.com>
-
-	* NEWS: Document python gdb.printing.register_pretty_printer's new
-	`replace' parameter.
-
-2011-10-14  Keith Seitz  <keiths at redhat.com>
-
-	PR c++/13225
-	* eval.c (evaluate_subexp_standard): Do not construct
-	an array of types; pass the value array directly to
-	find_overload_match.
-	* gdbtypes.h (NULL_POINTER_CONVERSION_BADNESS): Declare.
-	(rank_function): Take an array of values instead of types.
-	(rank_one_type): Add struct value * parameter.
-	* gdbtypes.c (NULL_POINTER_CONVERSION_BADNESS): Define.
-	(rank_function): For each argument, pass the argument's
-	value to rank_one_type.
-	(rank_one_type): Add VALUE parameter.
-	If the parameter type is a pointer and the argument type
-	is an integer, return NULL_POINTER_CONVERSION_BADNESS if
-	VALUE is zero.
-	Update all calls to rank_one_type, passing NULL for new
-	VALUE parameter.
-	* valarith.c (value_user_defined_cpp_op): Do not construct
-	an array of types; pass the value array directly to
-	find_overload_match.
-	* valops.c (find_overload_method_list): Take an array of
-	values instead of types.
-	Save the type of OBJP for later use.
-	Update calls to find_oload_champ, and find_oload_champ_namespace.
-	(find_oload_champ_namespace): Take an array of values instead
-	of types.
-	(find_oload_champ_namespace_loop): Likewise.
-	(find_oload_champ): Likewise.
-	(classify_oload_match): Inspect all arguments
-	until INCOMPATIBLE is found. Return the worst badness found
-	otherwise.
-	(compare_parameters): Update call to rank_one_type.
-	* value.h (find_overload_match): Take an array of values instead
-	of types.
-
-2011-10-14  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Drop lazy lm_info reading.
-	* solib-svr4.c (struct lm_info): Remove field lm.  New fields l_addr_p,
-	l_addr_inferior, l_ld, l_next, l_prev and l_name.
-	(lm_info_read): New function.
-	(lm_addr_from_link_map, lm_dynamic_from_link_map): Remove.
-	(lm_addr_check): Use l_addr_p.  No longer use lm_addr_from_link_map and
-	lm_dynamic_from_link_map.
-	(lm_next, lm_prev, lm_name): Remove.
-	(svr4_keep_data_in_core): Use lm_info_read, drop the lm_info entries
-	initialization incl. read_memory.  No longer use lm_name.
-	(svr4_free_so): Drop lm_info->lm freeing.
-	(svr4_default_sos): Initialize lminfo with zeroes.  Use l_addr_p.  Drop
-	explicit lm_addr and lm initialization.
-	(svr4_read_so_list): Use lm_info_read, drop the initailization of
-	fields by hand, incl. read_memory.  No longer use lm_next, lm_prev and
-	lm_name.
-
-2011-10-14  Jan Kratochvil  <jan.kratochvil at redhat.com>
-	    Paul Pluzhnikov  <ppluzhnikov at google.com>
-
-	* defs.h (struct so_list): New forward declaration.
-	(make_cleanup_free_so): New declaration.
-	* solib-svr4.c (ignore_first_link_map_entry): Remove.
-	(svr4_free_so): Move the function here from downwards.  Handle NULL
-	so->lm_info.
-	(svr4_free_library_list): New.
-	(svr4_read_so_list): New, moved here code from svr4_current_sos.
-	Use more cleanups.  Use new parameter ignore_first instead of
-	ignore_first_link_map_entry.
-	(svr4_current_sos): New variable ignore_first, initialize it.  New
-	variable back_to, use it for svr4_free_library_list protection.
-	(svr4_free_so): Remove - move upwards.
-	* utils.c: Include solist.h.
-	(do_free_so, make_cleanup_free_so): New functions.
-
-2011-10-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix internal error regression.
-	* value.c (value_primitive_field): Handle value_optimized_out.  Move
-	packed bitfields comment.
-
-2011-10-13  Tom Tromey  <tromey at redhat.com>
-
-	* python/py-breakpoint.c (gdbpy_breakpoint_deleted): Ensure GIL is
-	always released.
-
-2011-10-13  Tom Tromey  <tromey at redhat.com>
-
-	* python/py-type.c (typy_has_key): Make 'field' const.
-
-2011-10-13  Luis Machado  <lgustavo at codesourcery.com>
-
-	* remote.c (remote_save_trace_data): Invert comparison.
-
-2011-10-13  Luis Machado  <lgustavo at codesourcery.com>
-
-	* tracepoint.c (trace_save_command): Use filename instead of
-	args when printing.
-
-2011-10-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* dwarf2read.c (dwarf2_fetch_die_location_block): Initialize .data even
-	if .size is 0.
-
-2011-10-13  Yao Qi  <yao at codesourcery.com>
-
-	PR gdb/12703
-	* arm-tdep.c (thumb_analyze_prologue): Call thumb_insn_size to check
-	whether insn is a 32-bit Thumb-2 instruction.
-	(thumb_in_function_epilogue_p): Likewise.
-	(thumb_get_next_pc_raw): Likewise.
-	(arm_breakpoint_from_pc): Likewise.
-
-2011-10-12  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix empty DWARF expressions DATA vs. SIZE conditionals.
-	* dwarf2loc.c (dwarf2_find_location_expression): Clear *LOCEXPR_LENGTH.
-	(dwarf_expr_frame_base_1): Indicate unavailability via zero *LENGTH.
-	(locexpr_tracepoint_var_ref): Check only zero SIZE, not zero DATA.
-	(loclist_read_variable, loclist_tracepoint_var_ref): Do not check for
-	zero DATA.
-	* dwarf2loc.h (struct dwarf2_locexpr_baton): Comment DATA vs. SIZE
-	validity.
-	* dwarf2read.c (struct dwarf_block): Comment DATA validity.
-	(dwarf2_fetch_die_location_block, dwarf2_symbol_mark_computed): Do not
-	clear DATA on zero SIZE.
-
-2011-10-12  Doug Evans  <dje at google.com>
-
-	* dwarf2read.c (partial_read_comp_unit_head): Set header->offset,
-	header->first_die_offset here.  All callers updated.
-
-2011-10-12  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix compatibility with texinfo versions older than 4.12.
-	* Makefile.in (MAKEINFO): Set to @MAKEINFO at .
-	(MAKEINFOFLAGS, MAKEINFO_EXTRA_FLAGS, MAKEINFO_CMD): New.
-	(MAKEHTMLFLAGS): Use MAKEINFO_CMD.
-	(FLAGS_TO_PASS): Add MAKEINFOFLAGS and MAKEINFO_EXTRA_FLAGS.
-	* configure: Regenerate.
-	* configure.ac (MAKEINFO): Find it, from libiberty/configure.ac.
-	(MAKEINFOFLAGS): Pre-set it to --split-size=5000000.
-	(MAKEINFO_EXTRA_FLAGS): New test for -DHAVE_MAKEINFO_CLICK.
+2012-05-03  Doug Evans  <dje at google.com>
 
-2011-10-12  Gary Benson  <gbenson at redhat.com>
+	* dwarf2read.c (dw2_find_symbol_file): Don't crash if there are no
+	files.
 
-	* breakpoint.h (pc_at_non_inline_function): Declare.
-	* breakpoint.c (is_non_inline_function,
-	pc_at_non_inline_function): New functions.
-	* infrun.c (handle_inferior_event): Don't call skip_inline_frames
-	if the stop is at a location where functions cannot be inlined.
+2012-05-03  Yao Qi  <yao at codesourcery.com>
 
-2011-10-12  Pedro Alves  <pedro at codesourcery.com>
+	* i386-tdep.c (i386_fetch_pointer_argument): Remove extra
+	space.
+	(i386_process_record): Ditto.
 
-	* linux-nat.c (stop_and_resume_callback): Don't re-resume LWPs if
-	the core wanted them stopped, or if they now have a pending event
-	to report.
-	(linux_nat_filter_event): New parameter `new_pending_p'.  Pass it
-	down to stop_and_resume_callback.
-	(linux_nat_wait_1): Always clear `options' when retrying.  Handle
-	having new pending events after calling linux_nat_filter_event.
+2012-05-02  Joel Brobecker  <brobecker at adacore.com>
 
-2011-10-11  Sterling Augustine  <saugustine at google.com>
+	* infcall.c (unwind_on_signal_p): Make static.
 
-	* dwarf2read.c: Undo inadvertent changes in previous commit.
+2012-05-02  Joel Brobecker  <brobecker at adacore.com>
 
-2011-10-11  Sterling Augustine  <saugustine at google.com>
+	* sol-thread.c (solaris_pid_to_str): Make static.
+	(_initialize_sol_thread): Add prototype.
 
-	* dwarf2read.c (partial_die_parent_scope): Rearrange conditional
-	logic.
+2012-05-02  Joel Brobecker  <brobecker at adacore.com>
 
-2011-10-11  Ulrich Weigand  <ulrich.weigand at linaro.org>
+	* sol-thread.c (procfs_pid_to_str): Delete extern declaration.
 
-	* symfile.c (separate_debug_file_exists): Fix condition.
+2012-05-02  Christopher Faylor  <me.cygwin2012 at cgf.cx>
 
-2011-10-11  David S. Miller  <davem at davemloft.net>
+	* MAINTAINERS: Remove myself.
 
-	* regcache.c (regcache_restore): Do not write unavailable regs, mark
-	static.
-	* regcache.h (regcache_restore): Remove declaration.
+2012-05-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* gdbarch.sh: New field 'long_long_align_bit'.
-	* gdbarch.c, gdbarch.h: Regenerate.
-	* i386-tdep.c (i386_gdbarch_init): Set long_long_align_bit to 32.
-	* jit.c (jit_read_code_entry): Use it to determine correct size offset.
+	Fix --without-auto-load-safe-path for MS-Windows host platform.
+	* auto-load.c (filename_is_in_dir): Return 1 for DIR_LEN 0.
 
-2011-10-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-05-02  Eli Zaretskii  <eliz at gnu.org>
 
-	Revert this part of:
-	2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
-	Support @entry in input expressions.
-	* c-exp.y (ENTRY, unknown_cpp_name): New.
-	(exp: UNKNOWN_CPP_NAME): Change to `exp: unknown_cpp_name'.
-	(unknown_cpp_name: UNKNOWN_CPP_NAME, unknown_cpp_name: ENTRY)
-	(variable: name_not_typename '@' ENTRY, name: ENTRY)
-	(name_not_typename: ENTRY): New.
-	(yylex): Recognize ENTRY.
+	* gdb_curses.h: Undefine KEY_EVENT before including curses
+	headers.  Move "#undef MOUSE_MOVED" before any curses header
+	inclusion.
 
-	Reimplement @entry in input expressions.
-	* c-exp.y (ENTRY): New.
-	(variable: name_not_typename ENTRY): New.
-	(lex_one_token): Optionally return ENTRY instead of the '@' lex.
-
-2011-10-11  Pedro Alves  <pedro at codesourcery.com>
-
-	* linux-nat.c (linux_handle_extended_wait): Always dump both the
-	parent and child's pids as soon as we detect a clone event.
-	Adjust another debug message.
-
-2011-10-11  Pedro Alves  <pedro at codesourcery.com>
-
-	* linux-nat.c (linux_lwp_is_zombie): Return early if the LWP is
-	not zombie instead of reading the whole file.
-
-2011-10-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix separate debuginfo warning with "remote:" access.
-	* objfiles.h (struct objfile): New fields crc32 and crc32_p.
-	* symfile.c (get_file_crc): New function with the code moved from ...
-	(separate_debug_file_exists): ... this function, specifically variables
-	buffer and count.  New variable verified_as_different, set it.  Remove
-	file_crc initialization.  Verify also if both files are not the same
-	manually, if needed.
-
-2011-10-11  Yao Qi  <yao at codesourcery.com>
-
-	* arm-tdep.c (arm_get_next_pc_raw): Use read_memory_unsigned_integer
-	to get address.
-
-2011-10-10  Doug Evans  <dje at google.com>
-
-	* linux-thread-db.c (thread_db_new_objfile): Only try to load
-	libthread_db when we load libpthread or the main symbol file.
-	(thread_db_inferior_created): New function.
-	(_initialize_thread_db): Attach inferior_created observer.
-	* linux-nat.c (linux_child_post_attach): Remove call to
-	check_for_thread_db.
-	(linux_child_post_startup_inferior): Ditto.
-	* objfiles.h (OBJF_MAINLINE): Define.
-	* symfile.c (symbol_file_add_with_addrs_or_offsets): Pass it to
-	allocate_objfile when appropriate.
-
-2011-10-10  Ulrich Weigand  <ulrich.weigand at linaro.org>
-
-	PR gdb/13218
-	* arm-linux-nat.c (os_version, os_major, os_minor, os_release):
-	Remove unused variables.
-	(get_linux_version): Remove function.
-	(_initialize_arm_linux_nat): Do not call it.
-
-2011-10-10  Pedro Alves  <pedro at codesourcery.com>
-
-	* linux-nat.c (linux_handle_extended_wait): Don't resume the new
-	new clone lwp if the core asked it to stop.  Don't pass on
-	unexpected signals to the new clone; leave them pending instead.
-
-2011-10-10  Pedro Alves  <pedro at codesourcery.com>
-
-	* linux-nat.c (resume_lwp): Remove redundant debug output.
-
-2011-10-10  Pedro Alves  <pedro at codesourcery.com>
-
-	* linux-nat.c (linux_nat_wait_1): Copy the event lwp's
-	last_resume_kind before clearing it, and use the copy instead to
-	determine whether to report a SIGSTOP as TARGET_SIGNAL_0.  Use
-	resume_clear_callback in the non-stop path too.
-
-2011-10-09  Yao Qi  <yao at codesourcery.com>
-
-	* valprint.c (value_check_printable): Add one parameter OPTIONS.
-	Honor OPTIONS and VAL's type.
-	(common_val_print, value_print): Update to pass one more parameter.
-
-2011-10-09  Doug Evans  <dje at google.com>
-
-	Add new "alias" command.
-	* NEWS: Mention new command.
-	* command.h (valid_user_defined_cmd_name_p): Declare.
-	* defs.h (make_cleanup_dyn_string_delete): Declare.
-	* utils.c: #include "dyn-string.h".
-	(do_dyn_string_delete, make_cleanup_dyn_string_delete): New functions.
-	* cli/cli-cmds.c: #include "dyn-string.h".
-	(argv_to_dyn_string, valid_command_p, alias_command): New functions.
-	(init_cli_cmds): Add new command.
-	* cli/cli-decode.c (valid_user_defined_cmd_name_p): New function.
-
-2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix compatibility with older GCCs.
-	* dwarf2loc.c (dwarf_expr_reg_to_entry_parameter): Initialize parameter.
-	* stack.c (read_frame_arg): Initialize val_deref.
-
-2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Entry values NEWS entries, DWARF disassembly support.
-	* NEWS: New entry values entry.
-	(set print entry-values, show print entry-values)
-	(set debug entry-values, show debug entry-values): New entries.
-	* dwarf2loc.c (disassemble_dwarf_expression): New parameters start and
-	indent.  Remove variable start.  Move header printing out.  Respect
-	INDENT.  Support DW_OP_GNU_entry_value.
-	(locexpr_describe_location_1): Move the header printing here, extend
-	the disassemble_dwarf_expression passed parameters.
-
-2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Display @entry parameter values even for references.
-	* ada-valprint.c (ada_val_print_1) <TYPE_CODE_REF>: Try also
-	coerce_ref_if_computed.
-	* c-valprint.c (c_val_print) <TYPE_CODE_REF>: Likewise.
-	* dwarf2expr.c (dwarf_block_to_dwarf_reg_deref): New function.
-	(execute_stack_op) <DW_OP_GNU_entry_value>: Add -1 deref_size to the
-	existing push_dwarf_reg_entry_value call.  Add new detection calling
-	dwarf_block_to_dwarf_reg_deref.  Update the error message.
-	(ctx_no_push_dwarf_reg_entry_value): New parameter deref_size.
-	* dwarf2expr.h
-	(struct dwarf_expr_context_funcs) <push_dwarf_reg_entry_value>: Add new
-	parameter deref_size, describe it in the comment.
-	(ctx_no_push_dwarf_reg_entry_value): Add new parameter deref_size.
-	(dwarf_block_to_dwarf_reg_deref): New declaration.
-	* dwarf2loc.c (dwarf_entry_parameter_to_value): Add new parameter
-	deref_size, describe it in the function comment.  New variables
-	data_src and size, fetch the alternative block accoring to DEREF_SIZE.
-	(dwarf_expr_push_dwarf_reg_entry_value): Add new parameter deref_size,
-	describe it in the function comment.  Fetch the alternative block
-	accoring to DEREF_SIZE.
-	(entry_data_value_coerce_ref, entry_data_value_copy_closure)
-	(entry_data_value_free_closure, entry_data_value_funcs): New.
-	(value_of_dwarf_reg_entry): New variables checked_type, target_type,
-	outer_val, target_val, val and addr.  Try to fetch and create also
-	referenced value content.
-	(pieced_value_funcs): NULL value for coerce_ref.
-	(needs_dwarf_reg_entry_value): Add new parameter deref_size.
-	* f-valprint.c (f_val_print) <TYPE_CODE_REF>: Try also
-	coerce_ref_if_computed.
-	* opencl-lang.c (opencl_value_funcs): NULL value for coerce_ref.
-	* p-valprint.c (pascal_val_print) <TYPE_CODE_REF>: Likewise.
-	* stack.c (read_frame_arg): Compare also dereferenced values.
-	* value.c (value_computed_funcs): Make the parameter v const, use
-	value_lval_const for it.
-	(value_lval_const, coerce_ref_if_computed): New function.
-	(coerce_ref): New variable retval.  Call also coerce_ref_if_computed.
-	* value.h (struct lval_funcs): New field coerce_ref.
-	(value_computed_funcs): Make the parameter v const.
-	(value_lval_const, coerce_ref_if_computed): New declarations.
-
-2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Support @entry in input expressions.
-	* c-exp.y (ENTRY, unknown_cpp_name): New.
-	(exp: UNKNOWN_CPP_NAME): Change to `exp: unknown_cpp_name'.
-	(unknown_cpp_name: UNKNOWN_CPP_NAME, unknown_cpp_name: ENTRY)
-	(variable: name_not_typename '@' ENTRY, name: ENTRY)
-	(name_not_typename: ENTRY): New.
-	(yylex): Recognize ENTRY.
-	* eval.c (evaluate_subexp_standard): Support also OP_VAR_ENTRY_VALUE.
-	* expprint.c (print_subexp_standard, dump_subexp_body_standard):
-	Likewise.
-	* parse.c (operator_length_standard): Likewise.
-	* std-operator.def: New operator OP_VAR_ENTRY_VALUE.
+2012-05-02  Sergio Durigan Junior  <sergiodj at gmail.com>
 
-2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* features/i386/i386-mmx-linux.c: Regenerate.
+	* features/rs6000/powerpc-32.c: Likewise.
+	* features/rs6000/powerpc-32l.c: Likewise.
+	* features/rs6000/powerpc-403.c: Likewise.
+	* features/rs6000/powerpc-403gc.c: Likewise.
+	* features/rs6000/powerpc-405.c: Likewise.
+	* features/rs6000/powerpc-505.c: Likewise.
+	* features/rs6000/powerpc-601.c: Likewise.
+	* features/rs6000/powerpc-602.c: Likewise.
+	* features/rs6000/powerpc-603.c: Likewise.
+	* features/rs6000/powerpc-604.c: Likewise.
+	* features/rs6000/powerpc-64.c: Likewise.
+	* features/rs6000/powerpc-64l.c: Likewise.
+	* features/rs6000/powerpc-750.c: Likewise.
+	* features/rs6000/powerpc-860.c: Likewise.
+	* features/rs6000/powerpc-e500.c: Likewise.
+	* features/rs6000/powerpc-e500l.c: Likewise.
+	* features/rs6000/powerpc-isa205-32l.c: Likewise.
+	* features/rs6000/powerpc-isa205-64l.c: Likewise.
+	* features/rs6000/rs6000.c: Likewise.
 
-	Display referenced values in backtraces.
-	* printcmd.c (print_variable_and_value): Set OPTS.DEREF_REF to 1.
-	* stack.c (print_frame_arg): Likewise.
+2012-05-02  Sergio Durigan Junior  <sergiodj at gmail.com>
 
-2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* i386-tdep.c (i386_stap_parse_special_token) <s>: Remove unused
+	variable.
+	* stap-probe.c (stap_parse_single_operand) <reg_suffix,
+	reg_ind_suffix, reg_suffix_len, reg_ind_suffix_len>: Likewise.
+	(stap_parse_argument) <e>: Likewise.
+	(handle_stap_probe) <byte_order>: Likewise.
 
-	Make some lval_funcs methods to default on NULL.
-	* valops.c (value_fetch_lazy): Check if lval_computed read method is
-	NULL.
-	(value_assign): Check if lval_computed write method is NULL.
-	* value.h (struct lval_funcs): Comment NULL values for read and write
-	methods.
+2012-04-30  Doug Evans  <dje at google.com>
 
-2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* dwarf2read.c (init_cutu_and_read_dies): Renamed from
+	init_and_read_dies_worker.  All callers updated.
+	(init_cu_and_read_dies, init_tu_and_read_dies): Delete.  All calls
+	replaced with init_cutu_and_read_dies.
+	(load_partial_comp_unit): Pass 1 for use_existing_cu.
+	(find_partial_die): Remove FIXME.  Don't free current CU.
 
-	Display @entry parameter values (without references).
-	* dwarf2expr.c (dwarf_block_to_fb_offset, dwarf_block_to_sp_offset):
-	New functions.
-	* dwarf2expr.h (dwarf_block_to_fb_offset, dwarf_block_to_sp_offset):
-	New declarations.
-	* dwarf2loc.c (dwarf2_find_location_expression): Support location list
-	entry record.
-	(dwarf_entry_parameter_to_value, value_of_dwarf_reg_entry)
-	(value_of_dwarf_block_entry, locexpr_read_variable_at_entry): New
-	functions.
-	(dwarf2_locexpr_funcs): Install locexpr_read_variable_at_entry.
-	(loclist_read_variable_at_entry): New function.
-	(dwarf2_loclist_funcs): Install loclist_read_variable_at_entry.
-	* dwarf2read.c (read_call_site_scope): Support also DW_OP_fbreg in
-	DW_AT_location, call dwarf_block_to_sp_offset for it.
-	* frame.h (print_entry_values_no, print_entry_values_only)
-	(print_entry_values_preferred, print_entry_values_if_needed)
-	(print_entry_values_both, print_entry_values_compact)
-	(print_entry_values_default, print_entry_values): New declarations.
-	(struct frame_arg): New field entry_kind.
-	(read_frame_arg): New parameter entryargp.
-	* mi/mi-cmd-stack.c (list_arg_or_local): New gdb_assert for
-	arg->entry_kind.  Optionally print the `@entry' suffix.
-	(list_args_or_locals): New variable entryarg, initialize it.
-	Initialize also entry_kind of arg and entryarg.  Conditionalize
-	list_arg_or_local for arg, add list_arg_or_local for entryarg.  Call
-	xfree for entryarg.error.
-	* stack.c (print_entry_values_no, print_entry_values_only)
-	(print_entry_values_preferred, print_entry_values_if_needed)
-	(print_entry_values_both, print_entry_values_compact)
-	(print_entry_values_default, print_entry_values_choices)
-	(print_entry_values): New variables.
-	(print_frame_arg): New gdb_assert for arg->entry_kind.  Optionally
-	print the `@entry' suffix, possibly in combination for
-	print_entry_values_compact.
-	(read_frame_arg): New parameter entryargp, new variables entryval,
-	entryval_error and val_equal.  Read in also entryargp, respect
-	print_entry_values, compare the values using val_equal, fill in also
-	argp->entry_kind (together with entryargp->entry_kind).
-	(print_frame_args): New variable entryarg, initialize it.
-	Conditionalize print_frame_arg for arg, add print_frame_arg for
-	entryarg.  Call xfree for entryarg.error.
-	(_initialize_stack): Call add_setshow_enum_cmd for `entry-values'.
-	* symtab.h (struct symbol_computed_ops): New field
-	read_variable_at_entry.
-
-2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Code reshuffle.
-	* frame.h (struct frame_arg): New definition.
-	(read_frame_arg): New declaration.
-	* mi/mi-cmd-stack.c (list_arg_or_local): New functiom from ...
-	(list_args_or_locals): ... the code here.  New variable arg, call
-	read_frame_arg and list_arg_or_local with it.  Unify the
-	PRINT_SIMPLE_VALUES and PRINT_ALL_VALUES cases.  Call xfree for
-	arg.error.
-	* stack.c (print_frame_arg): New functiom from the code of
-	print_frame_args.
-	(read_frame_arg): New function.
-	(print_frame_args): Remove variable val.  New variable arg, call
-	read_frame_arg and print_frame_arg with it.  Call xfree for arg.error.
-
-2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Protect entry values against self tail calls.
-	* dwarf2loc.c (VEC (CORE_ADDR), func_verify_no_selftailcall): New.
-	(dwarf_expr_dwarf_reg_entry_value): Call func_verify_no_selftailcall.
-
-2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Recognize virtual tail call frames.
-	* Makefile.in (SFILES): Add dwarf2-frame-tailcall.c.
-	(HFILES_NO_SRCDIR): Add dwarf2-frame-tailcall.h.
-	(COMMON_OBS): Add dwarf2-frame-tailcall.o.
-	* dwarf2-frame-tailcall.c: New file.
-	* dwarf2-frame-tailcall.h: New file.
-	* dwarf2-frame.c: Include dwarf2-frame-tailcall.h.
-	(execute_cfa_program): New function comment.  Return INSN_PTR.  Reset
-	REGS.PREV only after CIE execution.
-	(struct dwarf2_frame_cache): New field tailcall_cache.
-	(dwarf2_frame_cache): New variables entry_pc, entry_cfa_sp_offset,
-	entry_cfa_sp_offset_p and instr.  Execute FDE instructions in two
-	parts, try to find entry_cfa_sp_offset.  Call
-	dwarf2_tailcall_sniffer_first.
-	(dwarf2_frame_prev_register): Call dwarf2_tailcall_prev_register_first
-	when appropriate.
-	(dwarf2_frame_dealloc_cache): New function.
-	(dwarf2_frame_sniffer): Preinitialize cache by dwarf2_frame_cache.
-	(dwarf2_frame_unwind): Install dwarf2_frame_dealloc_cache.
-	(dwarf2_signal_frame_unwind): Do not install dwarf2_frame_dealloc_cache.
-	(dwarf2_append_unwinders): Add dwarf2_tailcall_frame_unwind.
-	(dwarf2_frame_cfa): Support also dwarf2_tailcall_frame_unwind.
-	* dwarf2loc.c (func_addr_to_tail_call_list)
-	(tailcall_dump, call_sitep, VEC (call_sitep), chain_candidate)
-	(call_site_find_chain_1, call_site_find_chain): New.
-	* dwarf2loc.h (struct call_site_chain): New.
-	(call_site_find_chain): New declaration.
-	* frame.c (get_frame_address_in_block): Support also TAILCALL_FRAME.
-	* frame.h (enum frame_type): New entry TAILCALL_FRAME.
-	* python/py-frame.c (gdbpy_initialize_frames): Add TAILCALL_FRAME.
-	* stack.c (frame_info): Support also TAILCALL_FRAME.
-
-2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Tail call sites reader implementation.
-	* dwarf2read.c (read_call_site_scope): Recognize DW_AT_GNU_tail_call,
-	fill in TYPE_TAIL_CALL_LIST.
-	* gdbtypes.h (struct func_type): New field tail_call_list.
-	(struct call_site): New field tail_call_next.
-	(TYPE_TAIL_CALL_LIST): New definition.
-
-2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Implement basic support for DW_TAG_GNU_call_site.
-	* block.c: Include gdbtypes.h and exceptions.h.
-	(call_site_for_pc): New function.
-	* block.h (call_site_for_pc): New declaration.
-	* defs.h: Include hashtab.h.
-	(make_cleanup_htab_delete, core_addr_hash, core_addr_eq): New
-	declarations.
-	* dwarf2-frame.c (dwarf2_frame_ctx_funcs): Install
-	ctx_no_push_dwarf_reg_entry_value.
-	* dwarf2expr.c (read_uleb128, read_sleb128): Support R as NULL.
-	(dwarf_block_to_dwarf_reg): New function.
-	(execute_stack_op) <DW_OP_GNU_entry_value>: Implement it.
-	(ctx_no_push_dwarf_reg_entry_value): New function.
-	* dwarf2expr.h (struct dwarf_expr_context_funcs): New field
-	push_dwarf_reg_entry_value.
-	(ctx_no_push_dwarf_reg_entry_value, dwarf_block_to_dwarf_reg): New
-	declarations.
-	* dwarf2loc.c: Include gdbcmd.h.
-	(dwarf_expr_ctx_funcs): New forward declaration.
-	(entry_values_debug, show_entry_values_debug, call_site_to_target_addr)
-	(dwarf_expr_reg_to_entry_parameter)
-	(dwarf_expr_push_dwarf_reg_entry_value): New.
-	(dwarf_expr_ctx_funcs): Install dwarf_expr_push_dwarf_reg_entry_value.
-	(dwarf2_evaluate_loc_desc_full): Handle NO_ENTRY_VALUE_ERROR.
-	(needs_dwarf_reg_entry_value): New function.
-	(needs_frame_ctx_funcs): Install it.
-	(_initialize_dwarf2loc): New function.
-	* dwarf2loc.h (entry_values_debug): New declaration.
-	* dwarf2read.c (struct dwarf2_cu): New field call_site_htab.
-	(read_call_site_scope): New forward declaration.
-	(process_full_comp_unit): Copy call_site_htab.
-	(process_die): Support DW_TAG_GNU_call_site.
-	(read_call_site_scope): New function.
-	(dwarf2_get_pc_bounds): Support NULL HIGHPC.
-	(dwarf_tag_name): Support DW_TAG_GNU_call_site.
-	(cleanup_htab): Delete.
-	(write_psymtabs_to_index): Use make_cleanup_htab_delete instead of it.
-	* exceptions.h (enum errors): New NO_ENTRY_VALUE_ERROR.
-	* gdb-gdb.py (StructMainTypePrettyPrinter): Support
-	FIELD_LOC_KIND_DWARF_BLOCK.
-	* gdbtypes.h (enum field_loc_kind): New entry
-	FIELD_LOC_KIND_DWARF_BLOCK.
-	(struct main_type): New loc entry dwarf_block.
-	(struct call_site, FIELD_DWARF_BLOCK, SET_FIELD_DWARF_BLOCK)
-	(TYPE_FIELD_DWARF_BLOCK): New.
-	* python/py-type.c: Include dwarf2loc.h.
-	(check_types_equal): Support FIELD_LOC_KIND_DWARF_BLOCK.  New
-	internal_error call on unknown FIELD_LOC_KIND.
-	* symtab.h (struct symtab): New field call_site_htab.
-	* utils.c (do_htab_delete_cleanup, make_cleanup_htab_delete)
-	(core_addr_hash, core_addr_eq): New functions.
-
-2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Code reshuffle.
-	* gdb-gdb.py (StructMainTypePrettyPrinter): Change
-	TYPE_SPECIFIC_CALLING_CONVENTION to TYPE_SPECIFIC_FUNC.  Move
-	calling_convention under func_stuff there.
-	* gdbtypes.c (make_function_type): Call INIT_FUNC_SPECIFIC.
-	(init_type) <TYPE_CODE_FUNC>: Likewise.
-	(recursive_dump_type): Change TYPE_SPECIFIC_CALLING_CONVENTION to
-	TYPE_SPECIFIC_FUNC.  New comment for tail_call_list.
-	* gdbtypes.h (enum type_specific_kind): Change
-	TYPE_SPECIFIC_CALLING_CONVENTION to TYPE_SPECIFIC_FUNC.
-	(struct main_type) <type_specific>: Change calling_convention to
-	func_stuff.  Move calling_convention to ...
-	(struct func_type): ... this new struct.
-	(INIT_FUNC_SPECIFIC): New #define.
-	(TYPE_CALLING_CONVENTION): Change calling_convention to func_stuff.
-
-2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix DW_OP_GNU_implicit_pointer for DWARF32 v3+ on 64-bit arches.
-	* dwarf2-frame.c (execute_stack_op): Initialize ctx->ref_addr_size.
-	* dwarf2expr.c (execute_stack_op) <DW_OP_GNU_implicit_pointer>: Use
-	ctx->ref_addr_size.  Handle its invalid value.
-	* dwarf2expr.h (struct dwarf_expr_context): New field ref_addr_size.
-	* dwarf2loc.c (dwarf2_evaluate_loc_desc_full)
-	(dwarf2_loc_desc_needs_frame): Initialize ctx->ref_addr_size.
-	* dwarf2loc.h (dwarf2_per_cu_ref_addr_size): New declaration.
-	* dwarf2read.c (decode_locdesc): Initialize ctx->ref_addr_size.
-	(dwarf2_per_cu_ref_addr_size): New function.
-
-2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-04-30  Sterling Augustine  <saugustine at google.com>
 
-	Code cleanup.
-	* dwarf2read.c (per_cu_header_read_in): New function.
-	(dwarf2_per_cu_addr_size, dwarf2_per_cu_offset_size): Use it, with new
-	variables cu_header_local and cu_headerp.
+	* contrib: New directory.
+	* contrib/test_pubnames_and_indexes.py: New file.
 
-2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-04-30  Doug Evans  <dje at google.com>
 
-	Fix initial language detection with -readnow.
-	* dwarf2read.c (dw2_find_symbol_file): Handle OBJF_READNOW case.
-	* symfile.h (struct quick_symbol_functions): State find_symbol_file
-	searches only for global symbols.
+	* dwarf2read.c (dwarf_decode_macros): New arg section_name.
+	All callers updated.
+	(init_cu_die_reader): Verify the section is non-empty.
+	(dwarf_decode_line_header): Don't dereference section->asection
+	until we know the section is present.
+
+2012-04-29  Sergio Durigan Junior  <sergiodj at redhat.com>
+
+	* tracepoint.c (start_tracing, stop_tracing): Checking for NULL
+	probes.
+
+2012-04-29  Yao Qi  <yao at codesourcery.com>
+
+	* gdb-code-style.el: New hook gdb-markup-hook
+	and gdb-comment-hook.
+
+2012-04-28  Doug Evans  <dje at google.com>
+
+	Initial support for Fission.  http://gcc.gnu.org/wiki/DebugFission
+	* symfile.c (default_symfile_relocate): Use sectp->owner instead of
+	objfile->obfd.
+	* symfile.h (dwarf2_debug_sections): New member addr.
+	* dwarf2expr.c (execute_stack_op): New case DW_OP_GNU_addr_index.
+	(ctx_no_get_addr_index): New function.
+	* dwarf2expr.h (dwarf_expr_context_funcs): New member get_addr_index.
+	(ctx_no_get_addr_index): Declare.
+	* dwarf2-frame.c (dwarf2_frame_ctx_funcs): Update.
+	* dwarf2loc.c (dwarf_expr_get_addr_index): New function.
+	(dwarf_expr_ctx_funcs): Update.
+	(needs_get_addr_index): New function.
+	(needs_frame_ctx_funcs): Update.
+	* dwarf2loc.h (dwarf2_read_addr_index): Declare.
+	* dwarf2read.c: #include "gdbcore.h".
+	(dwarf2_per_objfile): New members addr, dwo_files.
+	(dwarf2_elf_names): Add entry for addr.
+	(struct dwo_section_names): New type.
+	(dwo_section_names): New static global.
+	(dwarf2_cu): New members dwo_unit, addr_base, have_addr_base.
+	(dwarf2_per_cu_data): New member is_debug_types, all boolean uses of
+	old debug_types_section member updated to use this.
+	Rename member debug_types_section to info_or_types_section,
+	all uses updated.
+	(signatured_type): Rename member type_offset to type_offset_in_tu,
+	all uses updated.  New member type_offset_in_section.
+	(struct dwo_sections): New type.
+	(struct dwo_unit): New type.
+	(struct dwo_file): New type.
+	(die_reader_specs): New member dwo_file.
+	(dwarf2_locate_sections): Watch for .debug_addr.
+	(zlib_decompress_section): Use sectp->owner instead of objfile->obfd.
+	(dwarf2_read_section): Get bfd of section from bfd's asection,
+	instead of objfile.
+	(create_cus_from_index): Initialize the_cu->info_or_types_section.
+	(create_signatured_type_table_from_index): Initialize
+	sig_type->info_or_types_section.
+	(dw2_get_file_names): Statement lists for type units with DWO files
+	live in the DWO file.
+	(create_debug_types_hash_table): New function.
+	(create_all_type_units): Rewrite.
+	(init_cu_die_reader): New arg dwo_file, all callers updated.
+	(init_and_read_dies_worker): Get section from
+	this_cu->info_or_types_section.  Set sig_type->type_offset_in_section.
+	Watch for DW_AT_GNU_dwo_name and if present lookup the file and
+	continue reading the CU/TU from there.
+	(init_cutu_and_read_dies_no_follow): New arg dwo_file, all callers
+	updated.  Get section from this_cu->info_or_types_section.
+	(create_all_comp_units): Initialize this_cu->info_or_types_section.
+	(skip_one_die): New cases DW_FORM_GNU_addr_index,
+	DW_FORM_GNU_str_index.
+	(hash_dwo_file, eq_dwo_file): New functions.
+	(allocate_dwo_file_hash_table): New function.
+	(hash_dwo_unit, eq_dwo_unit): New functions.
+	(allocate_dwo_unit_table): New function.
+	(dwarf2_locate_dwo_sections): New function.
+	(struct create_dwo_info_table_data): New type.
+	(create_debug_info_hash_table_reader): New function.
+	(create_debug_info_hash_table): New function.
+	(try_open_dwo_file, open_dwo_file, init_dwo_file): New function.
+	(lookup_dwo_file): New function.
+	(lookup_dwo_comp_unit, lookup_dwo_type_unit): New functions.
+	(free_dwo_file, free_dwo_file_cleanup): New functions.
+	(free_dwo_file_from_slot, free_dwo_files): New functions.
+	(dwarf2_get_pc_bounds): Handle DW_FORM_GNU_addr_index.
+	(dwarf2_record_block_ranges): Ditto.
+	(read_partial_die): Ditto.
+	(process_enumeration_scope): Update to use type_offset_in_section.
+	(read_full_die_1): New function.
+	(read_full_die): Rewrite.
+	(read_attribute_value): New cases DW_FORM_GNU_addr_index,
+	DW_FORM_GNU_str_index.
+	(read_addr_index_1, read_addr_index): New functions.
+	(read_addr_index_from_leb128): New function.
+	(struct dwarf2_read_addr_index_data): New type.
+	(dwarf2_read_addr_index_reader): New function.
+	(dwarf2_read_addr_index): New function.
+	(read_str_index): New function.
+	(leb128_size): New function.
+	(dwarf_decode_line_header): Delete arg abfd, all callers updated.
+	If processing a type unit from a DWO file, get the line section
+	from the DWO file.
+	(var_decode_location): Watch for DW_OP_GNU_addr_index.
+	(dwarf2_const_value_attr): New cases DW_FORM_GNU_addr_index,
+	DW_FORM_GNU_str_index.
+	(lookup_die_type): Check whether section offset of type's die is
+	known before looking it up.  Remove assert.  Condition can
+	legimately happen for inter-cu type references.
+	(dwarf_attr_name): Handle Fission attributes.
+	(dwarf_form_name): Handle Fission forms.
+	(dump_die_shallow): New cases DW_FORM_GNU_addr_index,
+	DW_FORM_GNU_str_index.
+	(follow_die_sig): Update to use type_offset_in_section.
+	(decode_locdesc): New case DW_OP_GNU_addr_index.
+	(skip_form_bytes): New cases DW_FORM_GNU_addr_index,
+	DW_FORM_GNU_str_index.
+	(cu_debug_loc_section): New function.
+	(fill_in_loclist_baton, dwarf2_symbol_mark_computed): Call it.
+	(dwarf2_per_objfile_free): Unmap .debug_addr section.
+	Free DWO files if present.
+	* xcoffread.c (dwarf2_xcoff_names): Add .debug_addr.
+
+	Refactor DIE reading.
+	* dwarf2read.c (dwarf2_per_objfile): Replace members
+	debug_info_type_hash and debug_types_type_hash with die_type_hash.
+	(die_reader_specs): New member "die_section".  Temporarily make
+	member "buffer" non-const, pending constifying all info_ptr uses.
+	(die_reader_func_ftype): New typedef.
+	(dw2_get_file_names_reader): New function.
+	(dw2_get_file_names): Rewrite.
+	(read_and_check_type_unit_head): Rename arg type_offset to
+	type_offset_in_tu.
+	(create_all_type_units): Improve debugging message.
+	Improve dummy type unit check.
+	(init_cu_die_reader): New arg "section".  All callers updated.
+	(init_and_read_dies_worker): New function.
+	(init_cu_and_read_dies, init_tu_and_read_dies): New functions.
+	(init_cutu_and_read_dies_no_follow): New function.
+	(init_cutu_and_read_dies_simple): New function.
+	(process_psymtab_comp_unit_reader): New function.
+	(process_psymtab_comp_unit): Delete args section,
+	is_debug_types_section.  Rewrite.  All callers updated.
+	(process_psymtab_type_unit): Renamed from process_type_comp_unit.
+	All callers updated.  Rewrite.
+	(load_partial_comp_unit_reader): New function.
+	(load_partial_comp_unit): Rewrite.
+	(skip_children): New arg reader.  Delete args buffer, cu.
+	All callers updated.
+	(skip_one_die): New arg reader.  Delete args buffer, cu.
+	All callers updated.
+	(locate_pdi_sibling): New arg reader.  Delete args buffer, abfd, cu.
+	All callers updated.
+	(load_full_comp_unit_reader): New function.
+	(load_full_comp_unit): Rewrite.
+	(read_comp_unit): Delete.
+	(read_die_and_children_1): Delete, contents moved ...
+	(read_die_and_children): ... here.
+	(dwarf2_read_abbrevs): New arg abbrev_section.  All callers updated.
+	(load_partial_dies): New arg reader.  Delete args abfd, buffer, cu.
+	All callers updated.
+	(read_partial_die): New arg reader.  Delete args abfd, buffer, cu.
+	All callers updated.
+	(find_partial_die): Rewrite load_all_dies support.
+	(read_attribute_value): New arg reader.  Delete args abfd, cu.
+	All callers updated.
+	(read_attribute): New arg reader.  Delete args abfd, cu.
+	All callers updated.
+	(load_full_type_unit): Add assert.
+	(read_signatured_type_reader): New function.
+	(read_signatured_type): Rewrite.
+	(free_stack_comp_unit): Remove call to age_cached_comp_units.
+	(free_one_cached_comp_unit): Change target_cu arg to target_per_cu.
+	All callers updated.  Set per_cu->cu = NULL after freeing it.
+	(dwarf2_per_cu_offset_and_type): Renamed from dwarf2_offset_and_type.
+	(per_cu_offset_and_type_hash): Renamed from offset_and_type_hash.
+	(per_cu_offset_and_type_eq): Renamed from offset_and_type_eq.
+	(set_die_type): Update.
+	(get_die_type_at_offset): Update.
+	(read_file_scope): Call prepare_one_comp_unit.
+	(read_type_unit_scope): Ditto.
+	(prepare_one_comp_unit): Set producer if present.
+
+2012-04-28  Sergio Durigan Junior  <sergiodj at redhat.com>
+
+	* probe.c (compile_rx_or_error): Silence ARI warning about missing
+	 gettext function on `error'.
+
+2012-04-27  Doug Evans  <dje at google.com>
+
+	* dwarf2read.c (dwarf2_read_index): Don't use index if symbol table
+	is empty.
+
+2012-04-27  Sergio Durigan Junior  <sergiodj at redhat.com>
+	    Tom Tromey  <tromey at redhat.com>
 
-2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* breakpoint.c (struct breakpoint_objfile_data)
+	<longjmp_searched>,<longjmp_probes>,<exception_searched>,
+	<exception_probes>: New fields.
+	(free_breakpoint_probes): New function.
+	(create_longjmp_master_breakpoint): Prefer SystemTap probe over
+	`_Unwind_DebugHook'.
+	(create_exception_master_breakpoint): Likewise.
+	(_initialize_breakpoint): Registering cleanup for SystemTap probes.
+	* infrun.c: Including necessary header files for handling SystemTap
+	probes.
+	(handle_inferior_event): Handling longjmp breakpoint and exceptions
+	via SystemTap probes.
+	(check_exception_resume): Remove `func' argument.  Handle exception
+	unwinding breakpoint set via a SystemTap probe.
+	(insert_exception_resume_from_probe): New function.
+
+2012-04-27  Sergio Durigan Junior  <sergiodj at redhat.com>
+	    Tom Tromey  <tromey at redhat.com>
+	    Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	Fix printed anonymous struct name.
-	* dwarf2read.c (fixup_partial_die): Handle for anonymous structs also
-	DW_TAG_interface_type.  Strip for anonymous structs any prefixes.
-	(anonymous_struct_prefix): New function.
-	(determine_prefix): New variables retval.  Call anonymous_struct_prefix.
-	(dwarf2_name): Strip for anonymous structs any prefixes.
+	* Makefile.in (SFILES): Add `probe' and `stap-probe'.
+	(COMMON_OBS): Likewise.
+	(HFILES_NO_SRCDIR): Add `probe'.
+	* NEWS: Mention support for static and SystemTap probes.
+	* amd64-tdep.c (amd64_init_abi): Initializing proper fields used by
+	SystemTap probes' arguments parser.
+	* arm-linux-tdep.c: Including headers needed to perform the parsing
+	of SystemTap probes' arguments.
+	(arm_stap_is_single_operand): New function.
+	(arm_stap_parse_special_token): Likewise.
+	(arm_linux_init_abi): Initializing proper fields used by SystemTap
+	probes' arguments parser.
+	* ax-gdb.c (require_rvalue): Removing static declaration.
+	(gen_expr): Likewise.
+	* ax-gdb.h (gen_expr): Declaring function.
+	(require_rvalue): Likewise.
+	* breakpoint.c: Include `gdb_regex.h' and `probe.h'.
+	(bkpt_probe_breakpoint_ops): New variable.
+	(momentary_breakpoint_from_master): Set the `probe' value.
+	(add_location_to_breakpoint): Likewise.
+	(break_command_1): Using proper breakpoint_ops according to the
+	argument passed by the user in the command line.
+	(bkpt_probe_insert_location): New function.
+	(bkpt_probe_remove_location): Likewise.
+	(bkpt_probe_create_sals_from_address): Likewise.
+	(bkpt_probe_decode_linespec): Likewise.
+	(tracepoint_probe_create_sals_from_address): Likewise.
+	(tracepoint_probe_decode_linespec): Likewise.
+	(tracepoint_probe_breakpoint_ops): New variable.
+	(trace_command): Using proper breakpoint_ops according to the
+	argument passed by the user in the command line.
+	(initialize_breakpoint_ops): Initializing breakpoint_ops for
+	static probes on breakpoints and tracepoints.
+	* breakpoint.h (struct bp_location) <probe>: New field.
+	* cli-utils.c (skip_spaces_const): New function.
+	(extract_arg): Likewise.
+	* cli-utils.h (skip_spaces_const): Likewise.
+	(extract_arg): Likewise.
+	* coffread.c (coff_sym_fns): Add `sym_probe_fns' value.
+	* configure.ac: Append `stap-probe.o' to be generated when ELF
+	support is present.
+	* configure: Regenerate.
+	* dbxread.c (aout_sym_fns): Add `sym_probe_fns' value.
+	* elfread.c: Include `probe.h' and `arch-utils.h'.
+	(probe_key): New variable.
+	(elf_get_probes): New function.
+	(elf_get_probe_argument_count): Likewise.
+	(elf_evaluate_probe_argument): Likewise.
+	(elf_compile_to_ax): Likewise.
+	(elf_symfile_relocate_probe): Likewise.
+	(stap_probe_key_free): Likewise.
+	(elf_probe_fns): New variable.
+	(elf_sym_fns): Add `sym_probe_fns' value.
+	(elf_sym_fns_lazy_psyms): Likewise.
+	(elf_sym_fns_gdb_index): Likewise.
+	(_initialize_elfread): Initialize objfile cache for static
+	probes.
+	* gdb_vecs.h (struct probe): New forward declaration.
+	(probe_p): New VEC declaration.
+	* gdbarch.c: Regenerate.
+	* gdbarch.h: Regenerate.
+	* gdbarch.sh (stap_integer_prefix): New variable.
+	(stap_integer_suffix): Likewise.
+	(stap_register_prefix): Likewise.
+	(stap_register_suffix): Likewise.
+	(stap_register_indirection_prefix): Likewise.
+	(stap_register_indirection_suffix): Likewise.
+	(stap_gdb_register_prefix): Likewise.
+	(stap_gdb_register_suffix): Likewise.
+	(stap_is_single_operand): New function.
+	(stap_parse_special_token): Likewise.
+	(struct stap_parse_info): Forward declaration.
+	* i386-tdep.c: Including headers needed to perform the parsing
+	of SystemTap probes' arguments.
+	(i386_stap_is_single_operand): New function.
+	(i386_stap_parse_special_token): Likewise.
+	(i386_elf_init_abi): Initializing proper fields used by SystemTap
+	probes' arguments parser.
+	* i386-tdep.h (i386_stap_is_single_operand): New function.
+	(i386_stap_parse_special_token): Likewise.
+	* machoread.c (macho_sym_fns): Add `sym_probe_fns' value.
+	* mipsread.c (ecoff_sym_fns): Likewise.
+	* objfiles.c (objfile_relocate1): Support relocation for static
+	probes.
+	* parse.c (prefixify_expression): Remove static declaration.
+	(initialize_expout): Likewise.
+	(reallocate_expout): Likewise.
+	* parser-defs.h (initialize_expout): Declare function.
+	(reallocate_expout): Likewise.
+	(prefixify_expression): Likewise.
+	* ppc-linux-tdep.c: Including headers needed to perform the parsing
+	of SystemTap probes' arguments.
+	(ppc_stap_is_single_operand): New function.
+	(ppc_stap_parse_special_token): Likewise.
+	(ppc_linux_init_abi): Initializing proper fields used by SystemTap
+	probes' arguments parser.
+	* probe.c: New file, for generic statically defined probe support.
+	* probe.h: Likewise.
+	* s390-tdep.c: Including headers needed to perform the parsing of
+	SystemTap probes' arguments.
+	(s390_stap_is_single_operand): New function.
+	(s390_gdbarch_init): Initializing proper fields used by SystemTap
+	probes' arguments parser.
+	* somread.c (som_sym_fns): Add `sym_probe_fns' value.
+	* stap-probe.c: New file, for SystemTap probe support.
+	* stap-probe.h: Likewise.
+	* symfile.h: Include `gdb_vecs.h'.
+	(struct sym_probe_fns): New struct.
+	(struct sym_fns) <sym_probe_fns>: New field.
+	* symtab.c (init_sal): Initialize `probe' field.
+	* symtab.h (struct probe): Forward declaration.
+	(struct symtab_and_line) <probe>: New field.
+	* tracepoint.c (start_tracing): Adjust semaphore on breakpoints
+	locations.
+	(stop_tracing): Likewise.
+	* xcoffread.c (xcoff_sym_fns): Add `sym_probe_fns' value.
+
+2012-04-27  Sergio Durigan Junior  <sergiodj at redhat.com>
+	    Tom Tromey  <tromey at redhat.com>
 
-2011-10-07  Doug Evans  <dje at google.com>
+	* ax-gdb.c (gen_expr): Clean up code to handle internal variables
+	and to compile agent expressions.
+	* infrun.c (siginfo_make_value): New argument `ignore'.
+	(siginfo_funcs): New struct.
+	(_initialize_infrun): New argument when calling
+	`create_internalvar_type_lazy'.
+	* thread.c (thread_id_make_value): New argument `ignore'.
+	(thread_funcs): New struct.
+	(_initialize_thread): New argument when calling
+	`create_internalvar_type_lazy'.
+	* tracepoint.c (sdata_make_value): New argument `ignore'.
+	(sdata_funcs): New struct.
+	(_initialize_tracepoint): New argument when calling
+	`create_internalvar_type_lazy'.
+	* value.c (make_value): New struct.
+	(create_internalvar_type_lazy): New argument `data'.
+	(compile_internalvar_to_ax): New function.
+	(value_of_internalvar): Properly handling `make_value' case.
+	(clear_internalvar): Likewise.
+	(show_convenience): Adding `TRY_CATCH' block.
+	* value.h (internalvar_make_value): Delete, replace by...
+	(struct internalvar_funcs): ... this.
+	(create_internalvar_type_lazy) <fun>: Delete argument.
+	(create_internalvar_type_lazy) <funcs>, <data>: New arguments.
+	(compile_internalvar_to_ax): New function.
+	* windows-tdep.c (tlb_make_value): New argument `ignore'.
+	(tlb_funcs): New struct.
+	(_initialize_windows_tdep): New argument when calling
+	`create_internalvar_type_lazy'.
+
+2012-04-27  Mark Wielaard  <mjw at redhat.com>
+
+	* dwarf2read.c (dwarf2_get_pc_bounds): Check DW_AT_high_pc form to
+	see whether it is an address or a constant offset from DW_AT_low_pc.
+	(dwarf2_record_block_ranges): Likewise.
+	(read_partial_die): Likewise.
 
-	* python/lib/gdb/printing.py (register_pretty_printer): New argument
-	`replace'.
+2012-04-26  Mark Wielaard  <mjw at redhat.com>
 
-	* python/lib/gdb/printing.py: Whitespace cleanup.
-
-	* python/py-value.c (valpy_call): Initialize ftype to avoid compiler
-	warning.
-
-2011-10-07  Pedro Alves  <pedro at codesourcery.com>
-
-	* linux-nat.h (ALL_LWPS): Remove the ptid parameter.
-	* amd64-linux-nat.c (amd64_linux_dr_set_control)
-	(amd64_linux_dr_set_addr, amd64_linux_dr_unset_status): Adjust.
-	* arm-linux-nat.c (arm_linux_insert_hw_breakpoint)
-	(arm_linux_remove_hw_breakpoint, arm_linux_insert_watchpoint)
-	(arm_linux_remove_watchpoint): Adjust.
-	* i386-linux-nat.c (i386_linux_dr_set_control)
-	(i386_linux_dr_set_addr, i386_linux_dr_unset_status): Adjust.
-	* ia64-linux-nat.c (ia64_linux_insert_watchpoint)
-	(ia64_linux_remove_watchpoint): Adjust.
-	* mips-linux-nat.c (write_watchpoint_regs): Adjust.
-	* ppc-linux-nat.c (ppc_linux_insert_hw_breakpoint)
-	(ppc_linux_insert_hw_breakpoint, ppc_linux_remove_hw_breakpoint)
-	(ppc_linux_insert_mask_watchpoint)
-	(ppc_linux_remove_mask_watchpoint, ppc_linux_insert_watchpoint)
-	(ppc_linux_remove_watchpoint): Adjust.
-	* s390-nat.c (s390_insert_watchpoint, s390_remove_watchpoint):
-	Adjust.
-
-2011-10-07  Corinna Vinschen  <vinschen at redhat.com>
-
-	* windows-nat.c: Include wchar.h to avoid compiler warnings.
-	(clear_win32_environment): New function for Cygwin to clear out
-	Win32 environment.
-	(windows_create_inferior): Prepare new environment from in_env
-	for Cygwin, too.
-
-2011-10-07  Phil Muldoon  <pmuldoon at redhat.com>
-
-	PR python/13264
-	* python/py-value.c (valpy_call): Check that arguments are
-	a tuple.
-        (is_intlike): Remove call to CHECK_TYPEDEF.
-	(valpy_nonzero): Catch GDB exceptions.
-	(valpy_absolute): Ditto.
-        (valpy_lazy_string): Ditto.
-        (valpy_call): Ditto.
-        (valpy_get_is_optimized_out): Ditto.
-        (valpy_long): Ditto.
-        (valpy_float): Ditto.
-        (valpy_int): Call CHECK_TYPEDEF.  Catch GDB exceptions.
-        (valpy_richcompare): Ditto.
-
-2011-10-07  Ulrich Weigand  <ulrich.weigand at linaro.org>
-
-	* inferior.h (disable_randomization): Declare.
-	* infrun.c (disable_randomization): New global variable.
-	(show_disable_randomization): New function.
-	(set_disable_randomization): Likewise.
-	(_initialize_infrun): Install set/show disable-randomization
-	commands.
-	* linux-nat.c (disable_randomization): Remove.
-	(show_disable_randomization): Likewise.
-	(set_disable_randomization): Likewise.
-	(_initialize_linux_nat): No longer install set/show
-	disable-randomization commands here.
-	(linux_nat_supports_disable_randomization): New function.
-	(linux_nat_add_target): Install it.
-	* remote.c (PACKET_QDisableRandomization): New enum value.
-	(remote_protocol_packets): Support QDisableRandomization.
-	(_initialize_remote): Likewise.
-	(remote_supports_disable_randomization): New function.
-	(init_remote_ops): Install it.
-	(extended_remote_supports_disable_randomization): New function.
-	(init_extended_remote_ops): Install it.
-	(extended_remote_disable_randomization): New function.
-	(extended_remote_create_inferior_1): Call it.
-	* target.h (struct target_ops): Add to_supports_disable_randomization.
-	(target_supports_disable_randomization): Add prototype.
-	* target.c (target_supports_disable_randomization): New function.
-	(find_default_supports_disable_randomization): Likewise.
-	(init_dummy_target): Install it.
-
-2011-10-07  Kevin Pouget  <kevin.pouget at st.com>
-
-	Allow Python notification of new object-file loadings.
-	* Makefile.in (SUBDIR_PYTHON_SRCS): Add py-newobjfilevent.c.
-	(SUBDIR_PYTHON_OBS): Add py-newobjfileevent.o.
-	Add build rule for this file.
-	* python/py-event.h (emit_new_objfile_event): New prototype.
-	(newobjfile): New Python event emitter.
-	* python/py-evts.c (gdbpy_initialize_py_events): Add new_objfile to
-	Python event registry.
-	* python/py-inferior.c: Include objfiles.h
-	(python_new_objfile): New function.
-	(gdbpy_initialize_inferior): Add python_new_objfile to the new objfile
-	observers.
-	* python/py-newobjfileevent.c: New file.
-	* python-internal.h (gdbpy_initialize_new_objfile_event): New
-	prototype.
-	* python/python.c (_initialize_python): Add 
-	gdbpy_initialize_new_objfile_event call.
-	* NEWS: Add item for new Python event "gdb.newobjfile"
-
-2011-10-05  Tristan Gingold  <gingold at adacore.com>
-
-	* ada-tasks.c (read_atcb): Make ravenscar_task_name static.
-	Extract the ravenscar task name from the symbol for the atcb.
-
-2011-10-04  Paul Koning  <paul_koning at dell.com>
-
-	* python/py-type.c (typy_make_iter): Add forward declaration.
-	(typy_fields_items):  Use the gdb.Type iterator.
-
-2011-10-04  Paul Koning  <paul_koning at dell.com>
-
-	* NEWS: Add entry for Python gdb.Type mapping methods.
-
-2011-10-04  Kevin Pouget  <kevin.pouget at st.com>
-
-	PR python/12691: Add the inferior to Python exited event
-	* python/py-exitedevent.c (create_exited_event_object): Add inferior
-	to exited_event.
-	* python/py-event.h (emit_exited_event): Likewise
-	* python/-inferior.c (python_inferior_exit): Likewise
-
-2011-10-03  Joel Brobecker  <brobecker at adacore.com>
-
-	* ada-tasks.c (print_ada_task_info): Add "thread-id" field
-	in output of -ada-task-info GDB/MI command.
-
-2011-10-03  Joel Brobecker  <brobecker at adacore.com>
+	* MAINTAINERS (Write After Approval): Add myself to the list.
 
-	* ada-lang.h (struct inferior): Declare.
-	(print_ada_task_info): Add declaration.
-	* ada-tasks.c (print_ada_task_info): Make non-static.
-	* mi/mi-cmds.c (mi_cmds): Add "ada-task-info".
-	* mi/mi-cmds.h (mi_cmd_ada_task_info): Add declaration.
-	* mi/mi-main.c: #include "ada-lang.h".
-	(mi_cmd_list_features): Add "ada-task-info" to the list
-	of supported features.
-	(mi_cmd_ada_task_info): New function.
+2012-04-26  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* proc-utils.h (proc_prettyprint_signalset): New prototype.
+	(proc_prettyprint_signal): Likewise.
+	(proc_prettyprint_faultset): Likewise.
+	(proc_prettyprint_fault): Likewise.
+	(proc_prettyprint_actionset): Likewise.
+	(proc_prettyprint_flags): Move to new proc-flags.c section.
+	(proc_prettyfprint_flags): New prototype.
+	* procfs.c (proc_nsysarg, proc_sysargs): Add prototypes.
+	(proc_syscall, proc_cursig): Likewise.
+	(proc_set_kill_on_last_close): Likewise.
+	(proc_unset_kill_on_last_close): Likewise.
+	(proc_set_watchpoint): Make static.
+	(proc_delete_dead_threads): Likewise.
+	(procfs_set_watchpoint): Likewise.
+	(_initialize_procfs): Add prototype.
+	* proc-events.c: Include proc-utils.h.
+	(init_syscall_table): Make static.
+	* proc-api.c (_initialize_proc_api): Add prototype.
+	* proc-flags.c: Include proc-utils.h.
+
+2012-04-26  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* configure.ac: Add AC_ARG_PROGRAM.
+	* configure: Regenerate.
 
-2011-10-03  Joel Brobecker  <brobecker at adacore.com>
+2012-04-26  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* python/python.c (python_run_simple_file): New function.
-	(source_python_script, source_python_script_for_objfile):
-	Replace call to PyRun_SimpleFile by call to
-	python_run_simple_file.
+	Fix DW_AT_lower_bound defaults for DWARF-4+.
+	* dwarf2read.c (read_subrange_type): Remove initialization of low and
+	high.  New variable low_default_is_valid.  Implement DWARF-4+
+	DW_AT_lower_bound defaults.  Print complaint for DW_AT_lower_bound with
+	no default by the DWARF standard.
 
-2011-10-03  Paul Koning  <paul_koning at dell.com>
+2012-04-26  Maciej W. Rozycki  <macro at mips.com>
+            Maciej W. Rozycki  <macro at codesourcery.com>
 
-	* python/py-value.c (valpy_get_address): Use Py_XINCREF.
-	(value_to_value_object): Fetch value if it was lazy.
+	* infrun.c (handle_inferior_event): Move the check for return
+	trampolines ahead of the check for function trampolines.
+	* mips-tdep.h (MIPS_S2_REGNUM, MIPS_GP_REGNUM): New macros.
+	* mips-tdep.c (mips_str_mips16_call_stub): New variable.
+	(mips_str_mips16_ret_stub): Likewise.
+	(mips_str_call_fp_stub): Likewise.
+	(mips_str_call_stub): Likewise.
+	(mips_str_fn_stub): Likewise.
+	(mips_str_pic): Likewise.
+	(mips_in_frame_stub): New function.
+	(mips_unwind_pc): Return the return address rather than the PC
+	if the PC of an intermediate frame is inside a call thunk.
+	(mips_is_stub_suffix): New function.
+	(mips_is_stub_mode): Likewise.
+	(mips_get_mips16_fn_stub_pc): Likewise.
+	(mips_skip_mips16_trampoline_code): Update to handle all the
+	currently generated stub types.  Don't recurse into __fn_stub
+	thunks.  Remove heuristics to handle stubs beyond etext/_etext.
+	Use cooked register accesses.
+	(mips_in_return_stub): Reintroduce function.
+	(mips_skip_trampoline_code): Traverse trampolines recursively.
+	(mips_gdbarch_init): Handle MIPS16 return trampolines.
 
-2011-10-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-04-26  Joel Brobecker  <brobecker at adacore.com>
 
-	Code cleanup.
-	* solib-svr4.c (svr4_default_sos):  Remove variables head and link_ptr.
-	Rearrange the code for it.
-
-2011-10-02  Joel Brobecker  <brobecker at adacore.com>
-
-	* breakpoint.c (bkpt_print_recreate): Add call to
-	print_recreate_thread.
-
-2011-09-29  Mike Frysinger  <vapier at gentoo.org>
-
-	* common/linux-ptrace.h (PTRACE_GETFDPIC, PTRACE_GETFDPIC_EXEC,
-	PTRACE_GETFDPIC_INTERP): Define.
-
-2011-09-28  Yao Qi  <yao at codesourcery.com>
-
-	* symfile.c (add_symbol_file_command): Update message on usage.
-
-2011-09-28  Paul Koning  <paul_koning at dell.com>
-
-	* python/py-type.c (make_fielditem, typy_field_names, typy_items)
-	(typy_length, typy_get, typy_has_key, typy_make_iter)
-	(typy_iterkeys, typy_iteritems, typy_itervalues, typy_iter)
-	(typy_iterator_iter, typy_iterator_iternext)
-	(typy_iterator_dealloc): New functions to implement standard
-	Python mapping methods on gdb.Type object.
-	(gdb.TypeIterator): New Python type.
-	* python/python-internal.h (gdbpy_iter_kind): New enum.
-
-2011-09-28  David S. Miller  <davem at davemloft.net>
-
-	* sparc-tdep.h (SPARC_F2_REGNUM, SPARC_F3_REGNUM, SPARC_F4_REGNUM,
-	SPARC_F5_REGNUM, SPARC_F6_REGNUM, SPARC_F7_REGNUM): New enums.
-	* sparc-tdep.c (sparc_complex_floating_p): New function.
-	(sparc32_store_arguments): Handle complex floats.
-	(sparc32_extract_return_value): Likewise.
-	(sparc32_store_return_value): Likewise.
-	(sparc32_stabs_argument_has_addr): Likewise.
-	* sparc64-tdep.c (sparc64_complex_floating_p): New function.
-	(sparc64_store_floating_fields): Handle complex floats.
-	(sparc64_store_arguments): Likewise.
-	(sparc64_store_return_value): Likewise.
-
-2011-09-28  Eli Zaretskii  <eliz at gnu.org>
-
-	* windows-nat.c (env_sort) [!__CYGWIN__]: Function restored from
-	before the change on 2006-12-09.
-	(windows_create_inferior) [!__CYGWIN__]: Restore code that
-	generates the environment block for CreateProcessA, modulo the
-	Cygwin-specific parts that are not needed here.
-
-2011-09-27  Tristan Gingold  <gingold at adacore.com>
-
-	* target.h (enum target_object): Add TARGET_OBJECT_DARWIN_DYLD_INFO.
-	* solib-darwin.c (DYLD_VERSION_MAX): Update number.
-	(darwin_solib_get_all_image_info_addr_at_init): New function.
-	(darwin_solib_read_all_image_info_addr): Likewise.
-	(darwin_solib_create_inferior_hook): Use the above two functions.
-	* darwin-nat.c (darwin_execvp): Renames retval to res.
-	(darwin_read_write_inferior): Update comment.
-	(darwin_read_dyld_info): New function.
-	(darwin_xfer_partial): Handle DYLD_INFO.
-
-2011-09-27  Stan Shebs  <stan at codesourcery.com>
-
-	Add return address collection for tracepoints.
-	* tracepoint.c (encode_actions_1): Add case for $_ret.
-	(validate_actionline): Check for $_ret.
-	(trace_dump_actions): Ditto.
-	* ax-gdb.h (gen_trace_for_return_address): Declare.
-	* ax-gdb.c: Include arch-utils.h.
-	(gen_trace_for_return_address): New function.
-	(agent_command): Add return address special case.
-	* amd64-tdep.c: Include ax.h and ax-gdb.h.
-	(amd64_gen_return_address): New function.
-	(amd64_init_abi): Call it.
-	* i386-tdep.c: Include ax.h and ax-gdb.h.
-	(i386_gen_return_address): New function.
-	(i386_init_abi): Call it.
-	* arch-utils.h (default_gen_return_address): Declare.
-	* arch-utils.c (default_gen_return_address): New function.
-	* gdbarch.sh (gen_return_address): New method.
-	* gdbarch.h, gdbarch.c: Regenerate.
+	GDB 7.4.1 released.
+
+2012-04-26  Jonathan Larmour  <jifl at eCosCentric.com>
+
+	* arm-tdep.h (VFP_REGISTER_SIZE): Define.
+	* features/arm-with-m-vfp-d16.xml: New file. Describes
+	Cortex-M with VFPv4-sp-d16 FPU register layout.
+	* features/Makefile (WHICH): Add arm-with-m-vfp-d16.
+	* features/arm-with-m-vfp-d16.c: New. Generated from above.
+	* arm-tdep.c: Include arm-with-m-vfp-d16.c.
+	(arm-register_g_packet_guesses): Add vfp-d16 guess.
+	(_initialise_arm_tdep): Initialize arm-with-m-vfp-d16 tdesc.
+
+2012-04-25  Doug Evans  <dje at google.com>
+
+	* cli/cli-decode.c (print_doc_line): Use stream instead of
+	current_uiout.
+
+2012-04-25  Sergio Durigan Junior  <sergiodj at redhat.com>
+
+	* features/arm-with-iwmmxt.c: Regenerate.
+	* features/arm-with-m-fpa-layout.c: Likewise.
+	* features/arm-with-m.c: Likewise.
+	* features/arm-with-neon.c: Likewise.
+	* features/arm-with-vfpv2.c: Likewise.
+	* features/arm-with-vfpv3.c: Likewise.
+	* features/mips-dsp-linux.c: Likewise.
+	* features/mips-linux.c: Likewise.
+	* features/mips64-dsp-linux.c: Likewise.
+	* features/mips64-linux.c: Likewise.
+	* features/s390-linux32.c: Likewise.
+	* features/s390-linux32v1.c: Likewise.
+	* features/s390-linux32v2.c: Likewise.
+	* features/s390-linux64.c: Likewise.
+	* features/s390-linux64v1.c: Likewise.
+	* features/s390-linux64v2.c: Likewise.
+	* features/s390x-linux64.c: Likewise.
+	* features/s390x-linux64v1.c: Likewise.
+	* features/s390x-linux64v2.c: Likewise.
+	* features/tic6x-c62x-linux.c: Likewise.
+	* features/tic6x-c62x.c: Likewise.
+	* features/tic6x-c64x-linux.c: Likewise.
+	* features/tic6x-c64x.c: Likewise.
+	* features/tic6x-c64xp-linux.c: Likewise.
+	* features/tic6x-c64xp.c: Likewise.
+	* target-descriptions.c: Only generate `field_type' and `type'
+	variables when needed.
+
+2012-04-25  Fredrik Hederstierna  <fredrikh.hederstierna at securitas-direct.com>
+
+	* cli/cli-cmds.c (cd_command): Use memmove instead of strcpy.
+
+2012-04-25  Doug Evans  <dje at google.com>
+
+	Initial pass at Go language support.
+	* NEWS: Mention Go.
+	* Makefile.in (SFILES): Add go-exp.y, go-lang.c, go-typeprint.c,
+	go-valprint.c.
+	(COMMON_OBS): Add go-lang.o, go-val.print.o, go-typeprint.o.
+	(YYFILES): Add go-exp.c.
+	(YYOBJ): Add go-exp.o.
+	(local-maintainer-clean): Delete go-exp.c.
+	* defs.h (enum language): Add language_go.
+	* dwarf2read.c: #include "go-lang.h".
+	(fixup_go_packaging): New function.
+	(process_full_comp_unit): Call it when processing Go CUs.
+	(dwarf2_physname): Add Go support.
+	(read_file_scope): Handle missing language spec for GNU Go.
+	(set_cu_language): Handle DW_LANG_Go.
+	* go-exp.y: New file.
+	* go-lang.h: New file.
+	* go-lang.c: New file.
+	* go-typeprint.c: New file.
+	* go-valprint.c: New file.
+	* symtab.c: #include "go-lang.h".
+	(symbol_set_language): Handle language_go.
+	(symbol_find_demangled_name, symbol_set_names): Ditto.
+	(symbol_natural_name, demangle_for_lookup, find_main_name): Ditto.
+
+2012-04-24  Jim Meyering  <meyering at redhat.com>
+
+	avoid a few strncpy-induced buffer overruns
+	* procfs.c (procfs_make_note_section): Be sure to NUL-terminate
+	fname and psargs before trying to concatenate.
+	* tui/tui-stack.c (tui_get_function_from_frame): NUL-terminate
+	"name" before applying strchr.
+
+2012-04-25  Siva Chandra Reddy  <sivachandra at google.com>
+
+	* CONTRIBUTE: Use unified diff instead of context diff when
+	generating patches.
+
+2012-04-24  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* mips-tdep.c (mips_about_to_return): Remove dead MIPS16 support
+	code.  Handle JR.HB correctly.
+
+2012-04-24  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* mips-tdep.c
+	(is_mips16_addr, unmake_mips16_addr, make_mips16_addr): Group
+	with the other MIPS16 helpers.
+
+2012-04-24  Sergio Durigan Junior  <sergiodj at redhat.com>
+
+	* observer.sh: Conditionally declare `args', thus cleaning up
+	unused instances of this variable.
+
+2012-04-24  Yao Qi  <yao at codesourcery.com>
+
+	Revert this patch to allow breakpoint always-inserted
+	in record target.
+	2011-12-05  Pedro Alves  <pedro at codesourcery.com>
+        * breakpoint.c: Include record.h.
+        (breakpoints_always_inserted_mode): Return false when the record
+        target is in use.
+
+	* breakpoint.c (iterate_over_bp_locations): New.
+	* breakpoint.h: Declare.
+	New typedef walk_bp_location_callback.
+	* record.c (record_open): Call record_init_record_breakpoints.
+	(record_sync_record_breakpoints): New.
+	(record_init_record_breakpoints): New.
+	* NEWS: Mention supporting breakpoint always-inserted mode in
+	record target.
 
-2011-09-23  Joseph Myers  <joseph at codesourcery.com>
+2012-04-24  Marc Khouzam  <marc.khouzam at ericsson.com>
 
-	PR gdb/13079
-	* i386-tdep.c (i386_frame_align): New.
-	(i386_gdbarch_init): Use i386_frame_align.
+	* mi/mi-main.c (mi_cmd_execute): Choose a live thread not just
+	any thread.
 
-2011-09-23  Yao Qi  <yao at codesourcery.com>
+2012-04-24  Yao Qi  <yao at codesourcery.com>
 
-	* i386-linux-nat.c (i386_linux_resume): Use read_memory_unsigned_integer
-	to get address.
+	* breakpoint.c (ep_is_catchpoint): Renamed to ...
+	(is_catchpoint): ... it.
+	(print_one_breakpoint_location): Caller update.
+	* breakpoint.h: Update declaration.
 
-2011-09-22  Tristan Gingold  <gingold at adacore.com>
+2012-04-23  David S. Miller  <davem at davemloft.net>
 
-	* fork-child.c (fork_inferior): Add exec_fun parameter.
-	Call exec_fun or execvp.
-	* inferior.h: Adjust prototype.
-	* gnu-nat.c (gnu_create_inferior): Adjust fork_inferior call.
-	* inf-ttrace.c (inf_ttrace_create_inferior): Ditto.
-	* inf-ptrace.c (inf_ptrace_create_inferior): Ditto.
-	* procfs.c (procfs_create_inferior): Ditto.
-	* darwin-nat.c (darwin_execvp): New function.
-	(darwin_create_inferior): Use it.
+	* configure.tgt (sparc-*-linux*): Set build_gdbserver to yes.
 
-2011-09-22  Yao Qi  <yao at codesourcery.com>
+2012-04-23  Tom Tromey  <tromey at redhat.com>
 
-	* infrun.c (context_switch): Print debug message when switching to
-	a different thread.
+	* buildsym.c (add_free_pendings): Remove.
+	* buildsym.h (add_free_pendings): Remove.
 
-2011-09-21  Ulrich Weigand  <uweigand at de.ibm.com>
+2012-04-23  Doug Evans  <dje at google.com>
 
-	* s390-tdep.c (s390_function_arg_pass_by_reference): Handle
-	complex and vector types.
-	(s390_return_value_convention): Likewise.
+	* dwarf2read.c (partial_die_full_name): Record DW_FORM_ref_addr in
+	attr.u.unsnd instead of attr.u.addr.
+	(read_attribute_value) Ditto for cases DW_FORM_ref_addr,
+	DW_FORM_ref1, DW_FORM_ref2, DW_FORM_ref4, DW_FORM_reg8,
+	DW_FORM_ref_udata.
+	(dump_die_shallow): Update cases DW_FORM_ref_addr,
+	DW_FORM_ref1, DW_FORM_ref2, DW_FORM_ref4.  Add cases DW_FORM_ref8,
+	DW_FORM_ref_udata.
+	(dwarf2_get_ref_die_offset): Use DW_UNSND for reference attributes.
 
-	(s390_value_from_register): Call check_typedef.
-	(extend_simple_arg): Likewise.
-	(alignment_of): Likewise.
-	(s390_push_dummy_call): Likewise.
-	(s390_return_value): Likewise.
+2012-04-23  Maciej W. Rozycki  <macro at codesourcery.com>
 
-2011-09-21  Joseph Myers  <joseph at codesourcery.com>
+	* mips-tdep.c (mips_n32n64_return_value): Fix coding style.
+	(mips_o32_return_value): Likewise.
+	(mips_o64_return_value): Likewise.
 
-	* event-top.c (async_disconnect): If an exception is thrown from
-	quit_cover, call pop_all_targets.  Use TRY_CATCH instead of
-	catch_errors.
-	* top.c (quit_cover): Return void and take no arguments.
-	* top.h (quit_cover): Update prototype.
+2012-04-21  Paul Hilfinger  <hilfinger at adacore.com>
 
-2011-09-20  Joseph Myers  <joseph at codesourcery.com>
+	* ada-lang.c (ada_evaluate_subexp): Add cases for
+        TYPE_CODE_INTERNAL_FUNCTION and for TYPE_GNU_IFUNC, following
+        their treatment in eval.c.
 
-	* mi/mi-main.c (mi_load_progress): Restore saved_uiout value to
-	current_uiout, not uiout.
+2012-04-21  David S. Miller  <davem at davemloft.net>
 
-2011-09-19  Doug Evans  <dje at google.com>
+	* sparc-tdep.c (X_DISP10): Define.
+	(sparc_analyze_control_transfer): Handle compare-and-branch.
 
-	* python/py-auto-load.c (source_section_scripts): Fix file
-	descriptor leak.
-	* python/python.c (source_python_script_for_objfile): Tweak comments.
+2012-04-21  Jonathan Larmour  <jifl at eCosCentric.com>
 
-2011-09-18  Yao Qi  <yao at codesourcery.com>
-	    Ulrich Weigand  <ulrich.weigand at linaro.org>
+	* features/Makefile (WHICH): Add arm-with-m and arm-with-m-fpa-layout.
+	* arm-tdep.c (arm_register_g_packet_guesses): Fix comment.
 
-	Support displaced stepping for Thumb 16-bit insns.
-	* arm-tdep.c (THUMB_NOP) Define.
-	(thumb_copy_unmodified_16bit): New.
-	(thumb_copy_b, thumb_copy_bx_blx_reg): New.
-	(thumb_copy_alu_reg): New.
-	(arm_copy_svc): Move some common code to ...
-	(install_svc): ... here.  New.
-	(thumb_copy_svc): New.
-	(install_pc_relative): New.
-	(thumb_copy_pc_relative_16bit): New.
-	(thumb_decode_pc_relative_16bit): New.
-	(thumb_copy_16bit_ldr_literal): New.
-	(thumb_copy_cbnz_cbz): New.
-	(cleanup_pop_pc_16bit_all): New.
-	(thumb_copy_pop_pc_16bit): New.
-	(thumb_process_displaced_16bit_insn): New.
-	(thumb_process_displaced_32bit_insn): New.
-	(thumb_process_displaced_insn): process thumb instruction.
-
-	Support displaced stepping for Thumb 32-bit insns.
-	* arm-tdep.c (thumb_copy_unmodified_32bit): New.
-	(thumb2_copy_preload): New.
-	(thumb2_copy_copro_load_store): New.
-	(thumb2_copy_b_bl_blx): New.
-	(thumb2_copy_alu_imm): New.
-	(thumb2_copy_load_reg_imm): New.
-	(thumb2_copy_load_literal): New
-	(thumb2_copy_block_xfer): New.
-	(thumb_32bit_copy_undef): New.
-	(thumb_32bit_copy_unpred): New.
-	(thumb2_decode_ext_reg_ld_st): New.
-	(thumb2_decode_svc_copro): New.
-	(decode_thumb_32bit_store_single_data_item): New.
-	(thumb_copy_pc_relative_32bit): New.
-	(thumb_decode_pc_relative_32bit): New.
-	(decode_thumb_32bit_ld_mem_hints): New.
-	(thumb2_copy_table_branch): New
-	(thumb_process_displaced_32bit_insn): Process Thumb 32-bit
-	instructions.
-
-2011-09-18  Yao Qi  <yao at codesourcery.com>
-
-	* arm-tdep.c (install_copro_load_store): PC is set 4-byte aligned.
-	(install_b_bl_blx): Likewise.
-
-2011-09-17  Yao Qi  <yao at codesourcery.com>
-
-        * arm-tdep.c (install_ldr_str_ldrb_strb): Renamed to ...
-        (install_load_store): ... this.  New.
-        Change parameter BYTE to SIZE.
-        (arm_copy_ldr_str_ldrb_strb): Update caller.
-        (arm_decode_ld_st_word_ubyte): Update caller.
-
-2011-09-17  Yao Qi  <yao at codesourcery.com>
-
-	* infrun.c (displaced_step_fixup): Move some code ...
-	(displaced_step_restore): ... here.  New function.
-	(handle_inferior_event): Cleanup displaced stepping state for both
-	child and parent when get forked or vforked event.
-	* regcache.c (get_thread_arch_aspace_regcache): New function.
-	get_thread_arch_regcache (): Call it.
-
-2011-09-16  Joel Brobecker  <brobecker at adacore.com>
-
-	* ada-tasks.c (print_ada_task_info): New function, merging
-	short_task_info and info_tasks together.  Reimplement using
-	ui-out instead of printing to stdout directly.  Move the code
-	building and checking the task list here, instead of leaving it
-	in info_tasks_command.
-	(info_task): Move the code building and checking the task
-	list here, instead of leaving it in info_tasks_command.
-	(info_tasks_command): Delete code building and checking
-	the task list - moved elsewhere.  Update calls to info_tasks
-	and info_task.
-
-2011-09-16  Joel Brobecker  <brobecker at adacore.com>
-
-	* ada-tasks.c (info_task): Delete parameter `from_tty'.
-
-2011-09-16  Joel Brobecker  <brobecker at adacore.com>
-
-	* ada-tasks.c (info_tasks): Delete parameter `from_tty'.
-
-2011-09-16  Joel Brobecker  <brobecker at adacore.com>
-
-	* ada-lang.h (ada_build_task_list): Remove parameter
-	`warn_if_null'.
-	* ada-tasks.c (ada_build_task_list): Remove parameter
-	`warn_if_null'.  Adjust implementation and documentation.
-	(valid_task_id, ada_get_environment_task)
-	iterate_over_live_ada_tasks): Adjust call to ada_build_task_list.
-	(info_tasks_command): Adjust implementation.
-	(task_command): Likewise.
-	* ravenscar-thread.c (ravenscar_find_new_threads): Fix call
-	to ada_build_task_list.
-
-2011-09-16  Joel Brobecker  <brobecker at adacore.com>
-
-	* ada-tasks.c (ada_tasks_check_symbol_table, task_list): Delete.
-	(enum ada_known_tasks_kind, struct ada_tasks_inferior_data): New.
-	(ada_tasks_inferior_data_handle): New static global.
-	(get_ada_tasks_inferior_data): New function.
-	(ada_get_task_number, get_task_number_from_id, valid_task_id)
-	(ada_get_environment_task, iterate_over_live_ada_tasks)
-	(add_ada_task, read_known_tasks_array, read_known_tasks_list):
-	Adjust.
-	(ada_set_current_inferior_known_tasks_addr): New function.
-	(read_known_tasks, ada_build_task_list, short_task_info)
-	(info_tasks, info_task, info_tasks_command, task_command_1)
-	(task_command, ada_task_list_changed): Adjust.
-	(ada_tasks_invalidate_inferior_data): New function.
-	(ada_normal_stop_observer, ada_new_objfile_observer): Adjust.
-	(_initialize_tasks): Set ada_tasks_inferior_data_handle.
-	* ada-lang.h (struct inferior): Add declaration.
-	(ada_task_list_changed): Update profile.
-	* remote-wtx-pd.c: #include "inferior.h".
-	(switch_to_pd_internal): Update call to ada_task_list_changed.
-
-2011-09-16  Joel Brobecker  <brobecker at adacore.com>
-
-	* ada-tasks.c: #include "progspace.h" and "objfiles.h".
-	(atcb_type, atcb_common_type, atcb_ll_type, atcb_call_type)
-	(atcb_fieldno): Delete these static globals.
-	(struct ada_tasks_pspace_data): New struct.
-	(ada_tasks_pspace_data_handle): New static global.
-	(get_ada_tasks_pspace_data): New function.
-	(ada_tasks_invalidate_pspace_data): New function.
-	(get_tcb_types_info, ptid_from_atcb_common, read_atcb)
-	(read_known_tasks_list, ada_new_objfile_observer): Adjust.
-	(_initialize_tasks): Create this module's per-progspace
-	data handle.
-
-2011-09-16  Joel Brobecker  <brobecker at adacore.com>
-
-	* ada-tasks.c (struct atcb_fieldnos): Renames struct tcb_fieldnos.
-
-2011-09-16  Tristan Gingold  <gingold at adacore.com>
-
-	* fork-child.c (fork_inferior): Update comment.  Use alloca
-	instead of xmalloc for argv.  Move len and shell_command
-	declarations in the block where they are used.
-	Only call execvp.  Factorize failure code.
-
-2011-09-16  Abhijit Halder  <abhijit.k.halder at gmail.com>
+2012-04-20  Nigel Stephens  <nigel at mips.com>
+            Maciej W. Rozycki  <macro at codesourcery.com>
 
-	Code cleanup.
-	* parse.c (write_exp_elt): Change argument to pass a pointer of union
-	`exp_element' instead of an element of the same and make the function
-	static.
-	(write_exp_elt_opcode, write_exp_elt_sym, write_exp_elt_block)
-	(write_exp_elt_objfile, write_exp_elt_longcst, write_exp_elt_dblcst)
-	(write_exp_elt_decfloatcst, write_exp_elt_type, write_exp_elt_intern):
-	Change argument of `write_exp_elt' function call.
-	Remove extra spaces from comments.
-	* parser-defs.h (write_exp_elt): Remove prototype.
+	* mips-tdep.c (mips_float_register_p): New function.
+	(mips_convert_register_float_case_p): Use mips_float_register_p.
+	(mips_register_type): Likewise.
+	(mips_print_register): Likewise.
+	(print_gp_register_row): Likewise.
+	(mips_print_registers_info): Likewise.
 
-2011-09-15  Paul Koning  <paul_koning at dell.com>
+2012-04-20  Shun-Yen Lu  <dark.asparagus at gmail.com>
 
-	* python/py-cmd.c (gdbpy_string_to_argv): Decrement reference
-	count of item appended to list.
-	* python/py-type.c (typy_fields): Likewise.
+	* mips-tdep.c (mips_elf_make_msymbol_special): Fix identification
+	of mips16 symbols.
 
-2011-09-15  Paul Koning  <paul_koning at dell.com>
+2012-04-20  Andrew Pinski  <apinski at cavium.com>
 
 	* MAINTAINERS (Write After Approval): Add myself to the list.
 
-2011-09-15  Kevin Pouget  <kevin.pouget at st.com>
-
-	PR threads/12628
-	* linux-fork.c (checkpoint_command): Disallow checkpointing of
-	processes with multiple threads.
-	(inf_has_multiple_thread_cb): New function.
-	(inf_has_multiple_threads): New function.
-
-2011-09-15  Kevin Pouget  <kevin.pouget at st.com>
-
-	PR Python/12692 Add gdb.selected_inferior() to Python interface.
-	* python/py-inferior.c (GdbMethods): New Python method definition.
-
-2011-09-15  Kevin Pouget  <kevin.pouget at st.com>
-
-	Handle multiple breakpoint hits in Python interface:
-	* python/py-bpevent.c (create_breakpoint_event_object): Rename C/Python
-	variable to breakpoints.
-	* python/py-stopevent.c (emit_stop_event): Return a Python tuple of
-	bps instead of single breakpoint. Fix some space typos.
-	* python/py-stopevent.c (create_breakpoint_event_object): Rename
-	variable to breakpoints.
-
-2011-09-15  Kevin Pouget  <kevin.pouget at st.com>
-
-	* breakpoint.c (describe_other_breakpoints): Do not write 'duplicate'
-	note if the breakpoint is internal.
-
-2011-09-15  Kevin Pouget  <kevin.pouget at st.com>
-
-	* MAINTAINERS (Write After Approval): Add myself to the list
-
-2011-09-14  Pedro Alves  <pedro at codesourcery.com>
-
-	* infrun.c (prepare_for_detach, wait_for_inferior)
-	(fetch_inferior_event): Don't flush the register cache.
-	* remote.c (struct stop_reply) <regcache>: Add comment.
-
-2011-09-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Remove excessive DWARF expressions memory duplication.
-	* dwarf2loc.c (per_cu_dwarf_call): Remove variable back_to and its use
-	for block.data.
-	(indirect_pieced_value): Remove variable result.  Remove variable
-	back_to and its use for baton.data.
-	(dwarf2_compile_expr_to_ax): Remove variable back_to and its use for
-	block.data.
-	* dwarf2read.c (dwarf2_fetch_die_location_block): Remove xmemdup.
-	Update the function comment.
-
-2011-09-13  Pedro Alves  <pedro at codesourcery.com>
-
-	* inferior.h (ALL_INFERIORS): New.
-	* linux-thread-db.c (thread_db_find_new_threads_2): Remove check
-	for a stopped thread.
-	(thread_db_find_new_threads): Look for threads in all inferiors.
-
-2011-09-13  Pedro Alves  <pedro at codesourcery.com>
-
-	* breakpoint.c (update_watchpoint): Handle the case of the
-	watchpoint to update not being in the breakpoint list yet.
-	(hw_watchpoint_use_count): New, factored out from
-	hw_watchpoint_used_count.
-	(hw_watchpoint_used_count): Rename to ...
-	(hw_watchpoint_used_count_others): ... this.  Add `except'
-	parameter.  Don't count resources of `except'.  Use
-	hw_watchpoint_use_count.
-
-2011-09-13  Pedro Alves  <pedro at codesourcery.com>
-
-	* gdbthread.h (enum thread_state): Moved here.
-	(struct thread_info): Rename `executing_' field to `executing' and
-	`state_' to `state'.
-	* thread.c (enum thread_state): Moved to gdbthread.h.
-	(new_thread, add_thread_silent, delete_thread_1)
-	(any_live_thread_of_process, thread_alive, set_running)
-	(set_running, is_thread_state, any_running, is_executing)
-	(set_executing, finish_thread_state, print_thread_info)
-	(do_captured_thread_select): Adjust.
-
-2011-09-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix compatibility with gcc < 4.3 and non-gcc compilers.
-	* amd64-tdep.c (amd64_skip_xmm_prologue): Convert 0b constants.
-
-2011-09-12  Pedro Alves  <pedro at codesourcery.com>
-	    Matt Rice  <ratmice at gmail.com>
-
-	PR gdb/13175
-
-	* interps.c (struct interp) <interpreter_out>: Delete field.
-	(interp_new): Remove the data and uiout parameters and adjust.
-	(interp_set): Only set the current_uiout from the interpreter's
-	uiout after initializing the interpreter.  Adjust call to
-	init_proc.
-	(interp_ui_out): Adjust to call procs->ui_out_proc.
-	(interp_data, interp_name): New.
-	* interps.h (interp_init_ftype): Add `self' parameter.
-	(interp_ui_out_ftype): New typedef.
-	(struct interp_procs) <ui_out_proc>: New method pointer.
-	(interp_new): Remove the data and uiout parameters.
-	(interp_data, interp_name): Declare.
-	* tui/tui-interp.c (tui_init): Adjust prototype.
-	(tui_ui_out): New.
-	(_initialize_tui_interp): Install tui_ui_out.  Don't instanciate
-	tui_out here.  Adjust call to interp_new.
-	* tui/tui-io.c (tui_initialize_io): Don't set current_uiout here.
-	* cli/cli-interp.c (cli_interpreter_init): Adjust prototype.
-	(cli_ui_out): New.
-	(_initialize_cli_interp): Install it.  Adjust call to interp_new.
-	* mi/mi-common.h (struct mi_interp) <uiout>: New field.
-	* mi/mi-interp.c (mi_interpreter_init): Adjust prototype.
-	Initialize mi->uiout depending on the mi_version as extracted from
-	the interpreter's name.
-	(mi_ui_out): New.
-	(_initialize_mi_interp): Install mi_ui_out.  Adjust calls to
-	interp_new.  Don't allocate the ui_out's of the interpreters here.
-
-2011-09-12  Aleksandar Ristovski  <aristovski at qnx.com>
-
-	* solib.c (solib_used): New function.
-	(update_solib_list, reload_shared_libraries_1): Check if objfile is used
-	by another so_list object before freeing it.
-
-2011-09-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Code cleanup.
-	* mi/mi-cmd-stack.c (list_args_or_locals): Use enum for the parameter
-	values.
-
-2011-09-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Code cleanup.
-	* amd64-tdep.c (amd64_skip_prologue): Move the XMM code to ...
-	(amd64_skip_xmm_prologue): ... this new function.  Describe its
-	parameters.  No longer use amd64_prologue_line_bug.
-	* defs.h (producer_is_gcc_ge_4): New declaration.
-	* dwarf2read.c (producer_is_gcc_ge_4): Move to utils.c.
-	(process_full_comp_unit): Update its caller.  Remove
-	amd64_prologue_line_bug initialization.
-	* symtab.h (struct symtab): Remove field amd64_prologue_line_bug.
-	* utils.c (producer_is_gcc_ge_4): Moved here from dwarf2read.c.
-
-2011-09-09  Pedro Alves  <pedro at codesourcery.com>
-
-	* linux-nat.h (enum resume_kind): New.
-	(struct lwp_info) <last_resume_kind>: New field.
-	* linux-nat.c (linux_child_follow_fork): Set last_resume_kind to
-	resume_stop on the new lwp.
-	(add_lwp): Set last_resume_kind as resume_continue by default.
-	(lin_lwp_attach_lwp): Set last_resume_kind as resume_stop.
-	(resume_lwp): New, factored out from resume_callback.  Also check
-	for pending status in lp->waitstatus.
-	(resume_callback): Reimplement.
-	(resume_clear_callback): Set last_resume_kind as resume_stop.
-	(resume_set_callback): Set last_resume_kind as resume_continue.
-	(linux_nat_resume, linux_handle_extended_wait): Set
-	last_resume_kind.
-	(running_callback): Also check lp->waitstatus for pending events.
-	(select_singlestep_lwp_callback): Check that lp->last_resume_kind
-	is resume_step.
-	(stop_and_resume_callback): Don't re-resume if the core wanted the
-	lwp stopped.  Use resume_lwp instead of resume_callback.  Avoid
-	using an invalidated pointer.
-	(linux_nat_filter_event): Don't discard SIGSTOPs as delayed
-	SIGSTOPs if the core wanted the LWP to stop.
-	(linux_nat_wait_1) Don't consume a pending SIGSTOP if the core
-	wanted the lwp to stop.  If the core wanted the lwp to stop, and
-	the lwp stopped with a SIGSTOP, report a TARGET_SIGNAL_0 instead
-	of TARGET_SIGNAL_STOP.
-	(linux_nat_stop_lwp): Don't synchronously wait for the lwp to stop
-	here.  Instead, signal the lwp, and set the last_resume_kind to
-	resume_stop.
-
-2011-09-09  Pedro Alves  <pedro at codesourcery.com>
-
-	* linux-nat.c (lin_lwp_attach_lwp): Return 1 (ignore) instead of
-	-1 (error), if the lwp exits right after attaching.
-
-2011-09-08  Doug Evans  <dje at google.com>
-
-	* py-cmd.c: Some minor formatting fixes.
-	(gdbpy_parse_command_name): Rename text arg to name, make const.
-	All callers updated.
-	* python-internal.h (gdbpy_parse_command_name): Update.
-
-	* cli/cli-decode.c (add_cmd): Add comment.
-
-2011-09-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	PR breakpoints/12435
-	* amd64-tdep.c (amd64_skip_prologue): New variables start_pc_sal,
-	next_sal, buf, offset and xmmreg.  Advance PC if it sees the PR.
-	* dwarf2read.c (process_full_comp_unit): Initialize
-	amd64_prologue_line_bug.
-	* symtab.h (struct symtab): New field amd64_prologue_line_bug.
-
-2011-09-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix TUI screen corruption.
-	* utils.c (fputs_maybe_filtered): Replace !input_from_terminal_p by
-	batch_flag.
+2012-04-20  Sergio Durigan Junior  <sergiodj at redhat.com>
 
-2011-09-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* MAINTAINERS: Update my e-mail address.
 
-	* findvar.c (read_var_value): Never return NULL, throw an error
-	instead.  Update the function comment.  State symbol name in the error
-	messages.
-	* python/py-frame.c (frapy_read_var): Remove handling of NULL from
-	read_var_value.
-	* stack.c (print_frame_args): Likewise.
-	* valops.c (value_of_variable): Likewise.
+2012-04-20  Pedro Alves  <palves at redhat.com>
 
-2011-09-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* acx_configure_dir.m4 (ACX_CONFIGURE_DIR): Handle absolute
+	$srcdir.
+	* configure: Regenerate.
 
-	* stack.c (print_frame_args): New variable except.  Wrap
-	read_var_value and common_val_print into TRY_CATCH.
+2012-04-20  Sergio Durigan Junior  <sergiodj at redhat.com>
 
-2011-09-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* cp-support.h: Include `gdb_vecs.h'.  Delete `const_char_ptr' VEC
+	declaration.
+	* gdb_vecs.h: Declare `const_char_ptr' VEC.
+
+2012-04-20  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix compilation compatibility with python-2.4
+	* python/py-type.c (convert_field): Cast ADDRSTRING for
+	PyObject_SetAttrString as non-const.  New comment.
+
+2012-04-19  Tom Tromey  <tromey at redhat.com>
+
+	* top.c (quit_target): Use all_cleanups.
+	* main.c (captured_command_loop): Use all_cleanups.
+	* exceptions.c (throw_exception): Use all_cleanups.
+
+2012-04-19  Pedro Alves  <palves at redhat.com>
+
+	* Makefile.in (GNULIB_BUILDDIR): New.
+	(LIBGNU, INCGNU, GNULIB_H): Adjust.
+	(SUBDIRS): Add $(GNULIB_BUILDDIR).
+	(CLEANDIRS). Remove gnulib/import.
+	(REQUIRED_SUBDIRS): Replace gnulib/import with $(GNULIB_BUILDDIR).
+	(all-lib): Ditto.
+	(distclean): Remove the $(GNULIB_BUILDDIR) directory.
+	(gnulib/import/Makefile): Replace gnulib/import with
+	$(GNULIB_BUILDDIR).  Set CONFIG_FILES to just Makefile.
+	(ACLOCAL_AMFLAGS): Remove '-I gnulib/import/m4'.
+	(aclocal_m4_deps): Remove the gnulib dependencies.  Add
+	acx_configure_dir.m4.
+	* acinclude.m4: Include acx_configure_dir.m4.
+	* acx_configure_dir.m4: New file.
+	* aclocal.m4: Regenerate.
+	* configure.ac: Remove gl_EARLY, gl_INIT and AM_INIT_AUTOMAKE
+	calls.	Configure gnulib using ACX_CONFIGURE_DIR.
+	(GNULIB): New variable.
+	(GNULIB_STDINT_H): Adjust.
+	(AC_OUTPUT): Don't output gnulib/Makefile.
+	* gdb/defs.h: Include build-gnulib/config.h.
+	* aclocal.m4: Regenerate.
+	* config.in: Regenerate.
+	* configure: Regenerate.
 
-	* eval.c (evaluate_subexp_standard) <OP_THIS>: Update the value_of_this
-	caller to value_of_this.
-	* p-exp.y: Update the value_of_this caller to value_of_this_silent.
-	Twice.
-	* valops.c (value_of_this): Remove parameter complain and variable ret.
-	Update function comment.  Never return NULL by this code.
-	(value_of_this_silent): New function.
-	* value.h (value_of_this): Remove parameter complain.
-	(value_of_this_silent): New declaration.
+	* gnulib/Makefile.in: New file.
+	* gnulib/configure.ac: New file.
+	* gnulib/aclocal.m4: New file.
+	* gnulib/config.in: New file.
+	* gnulib/configure: New file.
+	* gnulib/: Re-run gnulib-tool to adjust.
+
+2012-04-19  Doug Evans  <dje at google.com>
+
+	* cleanups.h (struct cleanup): Move to cleanups.c.
+	(make_cleanup_dtor_ftype): New typedef.
+	(make_cleanup_dtor): Use it.
+	(ALL_CLEANUPS): Replace with ...
+	(all_cleanups): ... this.  Declare.  All uses updated.
+	* cleanups.c: #include "gdb_assert.h".
+	(sentinel_cleanup): New static global.
+	(SENTINEL_CLEANUP): Define.
+	(cleanup_chain, final_cleanup_chain): Initialize to SENTINEL_CLEANUP.
+	(make_my_cleanup2): Assert result is non-NULL.
+	(all_cleanups): New function.
+	(save_my_cleanups): Initialize new chain to SENTINEL_CLEANUP instead
+	of NULL.
+
+2012-04-19  Pedro Alves  <palves at redhat.com>
+
+	* Makefile.in (HFILES_NO_SRCDIR): Remove gnulib/wchar.in.h.
+	Adjust paths to gnulib imported files.
+
+2012-04-19  Pedro Alves  <palves at redhat.com>
+
+	* gnulib/: Move whole directory ...
+	* gnulib/import/: ... here, and re-rerun gnulib-tool to adjust.
+	* Makefile.in (LIBGNU, INCGNU, GNULIB_H, CLEANDIRS)
+	(REQUIRED_SUBDIRS, all-lib, gnulib/Makefile, ACLOCAL_AMFLAGS)
+	(aclocal_m4_deps): Adjust.
+	* aclocal.m4: Regenerate.
+	* configure: Regenerate.
+	* configure.ac: Adjust AC_OUTPUT output.
+
+2012-04-19  Yao Qi  <yao at codesourcery.com>
+
+	* Makefile.in (SFILES): Add common/vec.c and remove vec.c.
+	(vec.o): New rule.
+	* vec.c: Move it ...
+	* common/vec.c: ... here.
+	* vec.h: Move it ...
+	* common/vec.h: ... here.
+
+2012-04-19  Yao Qi  <yao at codesourcery.com>
+
+	* gdb-code-style.el: New.
+
+2012-04-18  Pedro Alves  <palves at redhat.com>
+
+	Update gnulib from latest git.
+	(639ea5ae15e39fe48d43e04864b2997301e4b969)
+
+	* gnulib/Makefile.am: Update.
+	* gnulib/dummy.c: Update.
+	* gnulib/extra/arg-nonnull.h: Update.
+	* gnulib/extra/c++defs.h: Update.
+	* gnulib/extra/update-copyright: Update.
+	* gnulib/extra/warn-on-use.h: Update.
+	* gnulib/inttypes.in.h: Update.
+	* gnulib/m4/00gnulib.m4: Update.
+	* gnulib/m4/extensions.m4: Update.
+	* gnulib/m4/gnulib-cache.m4: Update.
+	* gnulib/m4/gnulib-common.m4: Update.
+	* gnulib/m4/gnulib-comp.m4: Update.
+	* gnulib/m4/gnulib-tool.m4: Update.
+	* gnulib/m4/include_next.m4: Update.
+	* gnulib/m4/inttypes-pri.m4: Update.
+	* gnulib/m4/inttypes.m4: Update.
+	* gnulib/m4/longlong.m4: Update.
+	* gnulib/m4/memchr.m4: Update.
+	* gnulib/m4/memmem.m4: Update.
+	* gnulib/m4/mmap-anon.m4: Update.
+	* gnulib/m4/multiarch.m4: Update.
+	* gnulib/m4/onceonly.m4: Update.
+	* gnulib/m4/stddef_h.m4: Update.
+	* gnulib/m4/stdint.m4: Update.
+	* gnulib/m4/string_h.m4: Update.
+	* gnulib/m4/warn-on-use.m4: Update.
+	* gnulib/m4/wchar_h.m4: Update.
+	* gnulib/m4/wchar_t.m4: Update.
+	* gnulib/m4/wint_t.m4: Update.
+	* gnulib/memchr.c: Update.
+	* gnulib/memmem.c: Update.
+	* gnulib/stddef.in.h: Update.
+	* gnulib/stdint.in.h: Update.
+	* gnulib/str-two-way.h: Update.
+	* gnulib/string.in.h: Update.
+	* gnulib/wchar.in.h: Update.
+
+	* gnulib/extra/arg-nonnull.h: Delete.
+	* gnulib/extra/c++defs.h: Delete.
+	* gnulib/extra/warn-on-use.h: Delete.
+	* gnulib/m4/wchar_h.m4: Delete.
+	* gnulib/m4/wint_t.m4: Delete.
+	* gnulib/wchar.in.h: Delete.
+
+	* gnulib/extra/snippets/arg-nonnull.h: New.
+	* gnulib/extra/snippets/c++defs.h: New.
+	* gnulib/extra/snippets/warn-on-use.h: New.
+
+	* aclocal.m4: Regenerate.
+	* config.in: Regenerate.
+	* configure: Regenerate.
+	* gnulib/Makefile.in: Regenerate.
 
-2011-09-07  Yao Qi  <yao at codesourcery.com>
+2012-04-18  Pedro Alves  <palves at redhat.com>
 
-	* gdbthread.h (struct thread_info): Remove fields
-	`stepping_through_solib_after_catch' and
-	`stepping_through_solib_catchpoints'.
-	* infrun.c (init_thread_stepping_state): Update.
-	(process_event_stop_test, currently_stepping): Update.
-	(currently_stepping_or_nexting_callback): Update.
+	Reimport the update-copyright module from gnulib
+	(250b80067c1e1d8faa0c42fb572f721975b929c5).
 
-2011-09-07  Yao Qi  <yao at codesourcery.com>
+	* configure: Regenerate.
+	* gnulib/Makefile.am: Update.
+	* gnulib/Makefile.in: Regenerate.
+	* gnulib/extra/update-copyright: Update.
+	* gnulib/m4/gnulib-cache.m4: Update.
+	* gnulib/m4/gnulib-comp.m4: Update.
 
-	* gdbthread.h (struct thread_info): Comment on field
-	`step_after_step_resume_breakpoint'.
+2012-04-18  Tristan Gingold  <gingold at adacore.com>
 
-2011-09-07  Abhijit Halder  <abhijit.k.halder at gmail.com>
+	* configure.ac (aix): Put -lpthread into libs.
+	* configure: Regenerate.
 
-	* remote.c (remote_console_output): Reindent.
+2012-04-18  Tom Tromey  <tromey at redhat.com>
 
-2011-09-06  Luis Machado  <lgustavo at codesourcery.com>
+	* linespec.c (convert_linespec_to_sals): Don't use
+	SYMBOL_OBJ_SECTION.
+	(compare_msymbols): Arguments are minsym_and_objfile, not
+	minimal_symbol*.  Don't use SYMBOL_OBJ_SECTION.
 
-	* frame.c (has_stack_frames): Check for currently selected
-	traceframe.
+2012-04-18  Pedro Alves  <palves at redhat.com>
 
-2011-09-06  Pedro Alves  <pedro at codesourcery.com>
+	Revert gnulib/ part of:
+	2011-01-01  Joel Brobecker  <brobecker at adacore.com>
+	Copyright year update in most files (performed by copyright.sh).
 
-	* event-top.h (MAXPROMPTS, struct prompts): Delete.
-	(set_async_annotation_level, set_async_prompt, pop_prompt)
-	(push_prompt, new_async_prompt): Delete declarations.
-	* top.h (get_prompt, set_prompt): Change prototype.
-	(get_prefix, set_prefix, get_suffix, set_suffix): Delete
+2012-04-18  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix 64-bit constants on 32-bit hosts.
+	* dwarf2read.c (read_unsigned_leb128): Change declaration return type
+	from unsigned long to ULONGEST.
+	(read_signed_leb128): Change declaration return type from long to
+	LONGEST.
+	(dwarf2_const_value_attr): Change declaration parameter value from long
+	to LONGEST.
+	(dwarf2_compute_name): Change variable value from long to LONGEST.
+	(read_unsigned_leb128): Change return type, variable result and some
+	casts from unsigned long to ULONGEST.
+	(read_signed_leb128): Change return type, variable result and some
+	casts from long to LONGEST.
+	(dwarf2_const_value_data, dwarf2_const_value_attr): Change parameter
+	value from long to LONGEST.
+	(dwarf2_const_value): Change variable value from long to LONGEST.
+	* symmisc.c (print_symbol): Change SYMBOL_VALUE format strings to use
+	plongest and hex_string.
+	* symtab.h (struct general_symbol_info): Change ivalue from long to
+	LONGEST, remove the comment.
+	* tracepoint.c (validate_actionline, collect_symbol, scope_info):
+	Change SYMBOL_VALUE format strings to use plongest and hex_string.
+
+2012-04-18  Siddhesh Poyarekar  <siddhesh at redhat.com>
+
+	PR symtab/7259:
+	* ada-exp.y (convert_char_literal): Use TYPE_FIELD_ENUMVAL.
+	* ada-lang.c (ada_discrete_type_high_bound)
+	(ada_discrete_type_low_bound): Fix function comment.  Use
+	TYPE_FIELD_ENUMVAL for TYPE_CODE_ENUM.
+	(ada_identical_enum_types_p): Use TYPE_FIELD_ENUMVAL.
+	(pos_atr, value_val_atr): Use TYPE_FIELD_ENUMVAL for TYPE_CODE_ENUM.
+	* ada-typeprint.c (print_enum_type): Change variable lastval to LONGEST.
+	Use TYPE_FIELD_ENUMVAL.
+	* ada-valprint.c (print_optional_low_bound, ada_print_scalar)
+	(ada_val_print_1): Use TYPE_FIELD_ENUMVAL for TYPE_CODE_ENUM.
+	* c-typeprint.c (c_type_print_base): Move variable lastval to inner
+	block, change it to LONGEST.  Use TYPE_FIELD_ENUMVAL for
+	TYPE_CODE_ENUM.
+	* coffread.c (coff_read_enum_type): Use SET_FIELD_ENUMVAL.
+	* dwarf2read.c (process_enumeration_scope): Likewise.
+	* gdb-gdb.py (TypeFlagsPrinter): Use field.enumval instead of
+	field.bitpos.
+	(class StructMainTypePrettyPrinter): Support also
+	FIELD_LOC_KIND_ENUMVAL.
+	* gdbtypes.c (get_discrete_bounds): Use TYPE_FIELD_ENUMVAL for
+	TYPE_CODE_ENUM.
+	(recursive_dump_type): Use TYPE_FIELD_ENUMVAL for TYPE_CODE_ENUM.
+	(copy_type_recursive): Support also FIELD_LOC_KIND_ENUMVAL.
+	* gdbtypes.h (enum field_loc_kind): New FIELD_LOC_KIND_ENUMVAL.
+	(struct main_type.flds_bnds.fields.loc): Adjust bitpos comment.  New
+	field enumval.
+	(struct main_type.flds_bnds.bields): Adjust loc_kind and bitsize to
+	accommodate enumval.
+	(struct call_site): Adjust loc_kind to accommodate enumval.
+	(FIELD_ENUMVAL, FIELD_ENUMVAL_LVAL, SET_FIELD_ENUMVAL)
+	(TYPE_FIELD_ENUMVAL): New macros.
+	* m2-typeprint.c (m2_enum): Use TYPE_FIELD_ENUMVAL.
+	* mdebugread.c (parse_symbol): Use TYPE_FIELD_ENUMVAL for
+	TYPE_CODE_ENUM.
+	* p-typeprint.c (pascal_type_print_base): Likewise.
+	* python/lib/gdb/printing.py (class FlagEnumerationPrinter): Use
+	enumval.
+	* python/lib/gdb/types.py (make_enum_dict): Likewise.
+	* python/py-type.c (convert_field): New variable addrstring.  Use
+	TYPE_FIELD_ENUMVAL for TYPE_CODE_ENUM.
+	(check_types_equal): Support also FIELD_LOC_KIND_ENUMVAL.
+	* stabsread.c (read_enum_type): Use SET_FIELD_ENUMVAL.
+	* typepint.c (print_type_scalar): Use TYPE_FIELD_ENUMVAL for
+	TYPE_CODE_ENUM.
+	* valprint.c (generic_val_print): Likewise.
+
+2012-04-17  Doug Evans  <dje at google.com>
+
+	* dwarf2read.c (lookup_signatured_type): Return NULL instead of 0.
+
+	* dwarf2read.c: Whitespace fixes.
+	(lookup_signatured_type): Tweak comment.
+	(get_die_type_at_offset): Fix comment.
+
+2012-04-17  Joel Brobecker  <brobecker at adacore.com>
+
+	* xcoffread.c (xcoff_secnum_to_sections): New function.
+	(secnum_to_section, secnum_to_bfd_section): Reimplement
+	using xcoff_secnum_to_sections.  Rename "secnum" parameter
+	into "n_scnum".
+	(RECORD_MINIMAL_SYMBOL): Delete.
+	(record_minimal_symbol): New function.
+	(scan_xcoff_symtab): Replace uses of RECORD_MINIMAL_SYMBOL
+	by call to record_minimal_symbol and set misc_func_recorded
+	to 1.  Set last_csect_sec to the XCOFF section index instead
+	of GDB's section_offset index.  Update calls to
+	prim_record_minimal_symbol_and_info to pass the BFD section
+	as well.
+
+2012-04-17  Joel Brobecker  <brobecker at adacore.com>
+
+	* xcoffread.c (read_xcoff_symtab): Delete variables
+	last_csect_val and last_csect_sec and associated code.
+
+2012-04-17  Doug Evans  <dje at google.com>
+
+	* cleanups.c (make_my_cleanup,make_my_cleanup2): Make static.
+	(discard_my_cleanups,save_my_cleanups,restore_my_cleanups): Ditto.
+	* cleanups.h (make_my_cleanup,make_my_cleanup2): Delete
+	(discard_my_cleanups,save_my_cleanups,restore_my_cleanups): Delete.
+
+	* cleanups.h: New file.
+	* cleanups.c: New file.
+	* Makefile.in (SFILES): Add cleanups.c.
+	(HFILES_NO_SRCDIR): Add cleanups.h.
+	(COMMON_OBS): Add cleanups.o.
+	* defs.h (struct cleanup): Moved to cleanups.h.
+	(do_cleanups,do_final_cleanups): Ditto.
+	(discard_cleanups,discard_final_cleanups): Ditto
+	(make_cleanup,make_cleanup_dtor,make_final_cleanup): Ditto.
+	(save_cleanups,save_final_cleanups): Ditto.
+	(restore_cleanups,restore_final_cleanups): Ditto.
+	(null_cleanup): Ditto.
+	(make_my_cleanup,make_my_cleanup2): Ditto.
+	(discard_my_cleanups,save_my_cleanups,restore_my_cleanups): Ditto.
+	* utils.c (cleanup_chain,final_cleanup_chain): Moved to cleanups.c.
+	(do_cleanups,do_final_cleanups): Ditto.
+	(discard_cleanups,discard_final_cleanups): Ditto
+	(make_cleanup,make_cleanup_dtor,make_final_cleanup): Ditto.
+	(save_cleanups,save_final_cleanups): Ditto.
+	(restore_cleanups,restore_final_cleanups): Ditto.
+	(null_cleanup): Ditto.
+	(make_my_cleanup,make_my_cleanup2): Ditto.
+	(discard_my_cleanups,save_my_cleanups,restore_my_cleanups): Ditto.
+
+	* utils.c (make_cleanup_freeargv): Use make_cleanup instead of
+	make_my_cleanup.
+	(make_cleanup_dyn_string_delete): Ditto.
+	(make_cleanup_ui_file_delete): Ditto.
+	(make_cleanup_ui_out_redirect_pop): Ditto.
+	(make_cleanup_free_section_addr_info): Ditto.
+	(make_cleanup_restore_integer): Ditto.
+	(make_cleanup_unpush_target): Ditto.
+	(make_cleanup_value_free_to_mark): Ditto.
+	(make_cleanup_value_free): Ditto.
+	(make_cleanup_free_so): Ditto.
+
+2012-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	New option "set debug auto-load".
+	* NEWS: New commands "set debug auto-load" and "show debug auto-load".
+	* auto-load.c (debug_auto_load, show_debug_auto_load: New.
+	(auto_load_safe_path_vec_update)
+	(filename_is_in_auto_load_safe_path_vec): Call fprintf_unfiltered
+	if DEBUG_AUTO_LOAD.
+	(file_is_auto_load_safe): New parameters debug_fmt and ....
+	Call fprintf_unfiltered if DEBUG_AUTO_LOAD.
+	(source_gdb_script_for_objfile): Extend the file_is_auto_load_safe
+	caller by explanatory string.
+	(_initialize_auto_load): Register "set debug auto-load".
+	* auto-load.h (file_is_auto_load_safe): New parameters debug_fmt
+	and ....
+	* linux-thread-db.c (try_thread_db_load_from_pdir_1)
+	(try_thread_db_load_from_dir): Extend the file_is_auto_load_safe caller
+	by explanatory string.
+	* main.c (captured_main): Likewise.
+	* python/py-auto-load.c (gdbpy_load_auto_script_for_objfile)
+	(source_section_scripts): Likewise.
+
+2012-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	New option "set auto-load safe-path".
+	* NEWS: New commands "set auto-load safe-path"
+	and "show auto-load safe-path".
+	* auto-load.c: Include gdb_vecs.h, readline/tilde.h and completer.h.
+	(auto_load_safe_path, auto_load_safe_path_vec)
+	(auto_load_safe_path_vec_update, set_auto_load_safe_path)
+	(show_auto_load_safe_path, add_auto_load_safe_path, filename_is_in_dir)
+	(filename_is_in_auto_load_safe_path_vec, file_is_auto_load_safe): New.
+	(source_gdb_script_for_objfile): New variable is_safe.  Call
+	file_is_auto_load_safe.  Return if it is not.
+	(struct loaded_script): New field loaded.
+	(maybe_add_script): Add parameter loaded.  Initialize SLOT with it.
+	(print_script): Use LOADED indicator instead of FULL_PATH.  Change
+	output "Missing" to "No".
+	(_initialize_auto_load): New variable cmd.  Initialize
+	auto_load_safe_path.  Register "set auto-load safe-path",
+	"show auto-load safe-path" and "add-auto-load-safe-path".
+	* auto-load.h (maybe_add_script): Add parameter loaded.
+	(file_is_auto_load_safe): New declaration.
+	* config.in: Regenerate.
+	* configure: Regenerate.
+	* configure.ac: New parameters --with-auto-load-safe-path
+	and --without-auto-load-safe-path.
+	* linux-thread-db.c (try_thread_db_load_from_pdir_1)
+	(try_thread_db_load_from_dir): Check file_is_auto_load_safe first.
+	* main.c (captured_main): Check file_is_auto_load_safe for
+	LOCAL_GDBINIT.
+	* python/py-auto-load.c (gdbpy_load_auto_script_for_objfile): New
+	variable is_safe.  Call file_is_auto_load_safe.  Return if it is not.
+	(source_section_scripts): Call file_is_auto_load_safe.  Return if it is
+	not.
+
+2012-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	auto-load: Implementation.
+	* NEWS: New descriptions for "info auto-load",
+	"info auto-load gdb-scripts", "info auto-load python-scripts",
+	"info auto-load local-gdbinit" and "info auto-load libthread-db".
+	Deprecate "info auto-load-scripts", "set auto-load-scripts on|off"
+	and "show auto-load-scripts".  New description for "set auto-load",
+	"show auto-load", "set auto-load gdb-scripts",
+	"show auto-load gdb-scripts", "set auto-load python-scripts",
+	"show auto-load python-scripts", "set auto-load local-gdbinit",
+	"show auto-load local-gdbinit", "set auto-load libthread-db" and
+	"show auto-load libthread-db".
+	* auto-load.c: Remove include python/python-internal.h.  Add includes
+	exceptions.h, cli/cli-script.h, gdbcmd.h, cli/cli-decode.h and
+	cli/cli-setshow.h.
+	(GDB_AUTO_FILE_NAME, source_gdb_script_for_objfile)
+	(auto_load_gdb_scripts, show_auto_load_gdb_scripts): New.
+	(gdbpy_global_auto_load): Rename to ...
+	(global_auto_load): ... here.
+	(auto_load_local_gdbinit, auto_load_local_gdbinit_pathname)
+	(auto_load_local_gdbinit_loaded, show_auto_load_local_gdbinit)
+	(script_language_gdb, source_gdb_script_for_objfile): New.
+	(struct loaded_script): New field language.
+	(hash_loaded_script_entry, eq_loaded_script_entry): Calculate also
+	LANGUAGE.
+	(maybe_add_script): Add parameter language.  Drop redundant
+	entry.full_path initialization.  Initialize entry.language and
+	(*slot)->language.
+	(auto_load_objfile_script): Change parameter suffix to language.
+	Remove the call of maybe_add_script.
+	Call language->source_script_for_objfile.
+	(load_auto_scripts_for_objfile, struct collect_matching_scripts_data):
+	New.
+	(collect_matching_scripts): Adjust it for
+	struct collect_matching_scripts_data.
+	(auto_load_info_scripts_pattern_nl): New variable.
+	(info_auto_load_scripts): Rename to ...
+	(auto_load_info_scripts): ... here, add parameter language.  Adjust it
+	for struct collect_matching_scripts_data.
+	(info_auto_load_gdb_scripts, info_auto_load_local_gdbinit)
+	(set_auto_load_cmd, auto_load_set_cmdlist_get, show_auto_load_cmd)
+	(auto_load_show_cmdlist_get, info_auto_load_cmd)
+	(auto_load_info_cmdlist_get): New.
+	(_initialize_auto_load): Move add_info of "auto-load-scripts" to
+	python/py-auto-load.c.  New installment for "set auto-load gdb-scripts",
+	"info auto-load gdb-scripts", "set auto-load local-gdbinit" and
+	"info auto-load local-gdbinit".
+	* auto-load.h (struct script_language): New.
+	(gdbpy_global_auto_load): Rename to ...
+	(global_auto_load): ... here.
+	(auto_load_local_gdbinit, auto_load_local_gdbinit_pathname)
+	(auto_load_local_gdbinit_loaded): New declarations.
+	(maybe_add_script): New parameter language.
+	(auto_load_objfile_script): Change parameter suffix to language.
+	(load_auto_scripts_for_objfile, auto_load_info_scripts_pattern_nl)
+	(auto_load_info_scripts, auto_load_set_cmdlist_get)
+	(auto_load_show_cmdlist_get, auto_load_info_cmdlist_get): New
 	declarations.
-	* top.c (command_loop):
-	(top_prompt): New global.
-	(get_prefix, set_prefix, get_suffix, ): Delete.
-	(get_prompt, set_prompt): Rewrite.
-	(show_new_async_prompt): Rename to ...
-	(show_prompt): ... this.
-	(init_main): Adjust.  Don't handle --annotate=2 here.
-	* event-top.c (new_async_prompt): Delete.
-	(the_prompts): Delete.
-	(more_to_come): Make static.
-	(display_gdb_prompt): Use top_level_prompt() to compute the top
-	level prompt, and don't notify the before_prompt observers
-	directly here.  Always trick readline into not trying to display
-	the prompt if sync_execution and displaying the primary prompt.
-	If displaying a local/secondary prompt, always show it, even if
-	sync_execution is set.
-	(change_annotation_level): Delete.
-	(top_level_prompt): New, based on change_annotation_level.
-	(push_prompt, pop_prompt): Delete.
-	(async_disable_stdin): No longer pushes prompt.
-	(command_line_handler): No longer pushes or pops prompt.  If more
-	input is expected, call display_gdb_prompt with an explicit empty
-	prompt.
-	(async_stop_sig): Adjust.
-	(set_async_annotation_level, set_async_prompt): Delete.
-	* python/python.c (before_prompt_hook): Adjust.
-
-2011-09-05  Pedro Alves  <pedro at codesourcery.com>
-
-	PR cli/13110
-
-	* infrun.c (fetch_inferior_event): Check if there's a selected
-	thread before checking if the selected thread is executing.
-
-2011-09-05  Pedro Alves  <pedro at codesourcery.com>
-
-	* inf-loop.c (execute_command): Don't check if the current thread
-	if running before synchronously waiting for command completion.
-	* infrun.c (fetch_inferior_event): Handle "set exec-done-display"
-	here.
-	(normal_stop): Call async_enable_stdin here.
-	* inf-loop.c (inferior_event_handler): Don't call
-	async_enable_stdin, nor handle "set exec-done-display" here.
-
-2011-09-04  Joel Brobecker  <brobecker at adacore.com>
-
-	GDB 7.3.1 released.
-
-2011-09-04  Joel Brobecker  <brobecker at adacore.com>
-
-	* NEWS: Change `7.3' into `7.3.1' in `Changes since GDB 7.3'.
-
-2011-09-04  Joel Brobecker  <brobecker at adacore.com>
-
-	* NEWS: Add entry for OpenBSD/NetBSD build failure.
-
-2011-09-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* config/s390/s390.mh (NATDEPFILES): Add linux-procfs.o dependency.
-
-2011-09-02  Matt Rice  <ratmice at gmail.com>
-
-	PR gdb/10720
-	* event-top.c (cli_command_loop): Replace readline setup with
-	direct call to display_gdb_prompt.
-	(display_gdb_prompt): Do not call observer mechanism during
-	synchronous execution.
-
-2011-09-02  Pedro Alves  <pedro at codesourcery.com>
-
-	* linux-nat.c (in_pid_list_p): New.
-	(linux_record_stopped_pid): Delete.
-	(lin_lwp_attach_lwp): Check if PTRACE_ATTACH failed because we're
-	already attached to the LWP.  Return an indication if so.
-	(linux_nat_filter_event): Adjust.
-	* linux-thread-db.c (attach_thread): Handle lin_lwp_attach_lwp
-	returning an indication to ignore this thread.
-
-2011-09-02  Pedro Alves  <pedro at codesourcery.com>
-
-	* top.c: Include interps.h.
-	(execute_command): If the target can async, but the interpreter is
-	in sync mode, synchronously wait for the command to finish before
-	returning.
-	(execute_command_to_string): Force the interpreter to sync mode.
-	* infrun.c: Include interps.h.
-	(fetch_inferior_event): Don't restore the prompt yet if the
-	interpreter is in sync mode.
-	* interps.c (interpreter_async): New global.
-	* interps.h (interpreter_async): Declare.
-	* inf-loop.c: Include interps.h.
-	(inferior_event_handler): Don't print the language change or run
-	breakpoint commands yet if the interpreter in is sync mode.
-	* main.c (captured_command_loop): Flip the interpreter to async
-	mode.
-	* cli/cli-script.c: Include interps.h.
-	(execute_user_command, while_command, if_command): Force the
-	interpreter to sync mode.
-	* python/python.c: Include interps.h.
-	(python_command, execute_gdb_command): Force the interpreter to
-	sync mode.
-
-2011-09-02  Pedro Alves  <pedro at codesourcery.com>
-
-	* value.c (show_convenience): Catch errors thrown while printing
-	each internal variable.
-	* infrun.c (validate_siginfo_access): New function.
-	(siginfo_value_read, siginfo_value_write): Call it.
-
-2011-09-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Revert:
-	2010-05-21  Pierre Muller  <muller at ics.u-strasbg.fr>
-	* dwarf2read.c (new_symbol): Handle DW_AT_variable_parameter
-	attribute.
-
-2011-08-29  Yao Qi  <yao at codesourcery.com>
-
-	* solib-dsbt.c (bfd_lookup_symbol): Removed.
-	(cmp_name): New.
-	(enable_break2): Update caller.
-	* solib-frv.c (bfd_lookup_symbol): Removed.
-	(cmp_name): New.
-	(enable_break2): Update caller.
-	* solib-pa64.c (bfd_lookup_symbol): Removed.
-	(cmp_name): New.
-	* solib-svr4.c (bfd_lookup_symbol): Removed.
-	(cmp_name_and_sec_flags): New.
-	(enable_break): Update caller.
-	* solib.c (gdb_bfd_lookup_symbol_from_symtab): New.
-	(gdb_bfd_lookup_symbol_from_dyn_symtab): New.
-	(gdb_bfd_lookup_symbol): New.
-	* solib.h: Functions declarations.
-
-2011-08-29  Yao Qi  <yao at codesourcery.com>
-
-	* Makefile.in (ALL_TARGET_OBS): Add tic6x-tdep.o tic6x-linux-tdep.o
-	and solib-dsbt.o.
-
-2011-08-29  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix TUI stepi on code without symbols.
-	* tui/tui-stack.c (tui_show_frame_info): Remove error, set LOW for
-	current PC instead.
-
-2011-08-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Code cleanup.
-	* mi/mi-cmd-stack.c (list_args_or_locals): Remove stb initialization
-	and the static keyword.
-	* mi/mi-cmd-target.c (mi_cmd_target_file_get, mi_cmd_target_file_put):
-	Make prefix an array.
-	* mi/mi-cmd-target.c (mi_cmd_target_file_delete): Likewise.
-	* mi/mi-main.c (get_register): Remove stb initialization and the static
-	keyword.
-
-2011-08-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Code cleanup - make mi_opt const.
-	* mi/mi-cmd-break.c (mi_cmd_break_insert, mi_cmd_break_watch): Make
-	opts const.
-	* mi/mi-cmd-disas.c (mi_cmd_disassemble): Likewise.
-	* mi/mi-cmd-env.c (mi_cmd_env_path): Likewise.
-	(mi_cmd_env_dir): Likewise.
-	* mi/mi-cmd-target.c (mi_cmd_target_file_get): Likewise.
-	(mi_cmd_target_file_put): Likewise.
-	* mi/mi-cmd-target.c (mi_cmd_target_file_delete): Likewise.
-	* mi/mi-cmd-var.c (mi_cmd_var_evaluate_expression): Likewise.
-	* mi/mi-getopt.c (mi_getopt): Make opts and opt const.
-	(mi_valid_noargs): Make opts const.
-	* mi/mi-getopt.h (mi_getopt): Make opts and opt const.
-	* mi/mi-main.c (mi_cmd_list_thread_groups): Make opts const.
-	(mi_cmd_data_read_memory): Likewise.
-	(mi_cmd_data_read_memory_bytes): Likewise.
-	(mi_cmd_data_write_memory): Likewise.
-
-2011-08-26  Matt Rice  <ratmice at gmail.com>
-
-	* solib-sunos.c (allocate_rt_common_objfile): Add missing arguments to
-	bcache_xmalloc,  replace bcache_xmalloc with call to
-	psymbol_bcache_init for psymbol_cache.
-	* symfile.c (reread_symbols): Remove extra calls to bcache_xmalloc.
-
-2011-08-26  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* inf-loop.c (inferior_event_handler): Add exception_print in
-	INF_EXEC_COMPLETE.
-
-2011-08-26  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* breakpoint.c (bpstat_do_actions): New variable cleanup_if_error, call
-	make_bpstat_clear_actions_cleanup and discard_cleanups for it.
-	* defs.h (make_bpstat_clear_actions_cleanup): New declaration.
-	* exceptions.c (throw_exception): Remove the bpstat_clear_actions call.
-	* inf-loop.c (inferior_event_handler): New variable cleanup_if_error,
-	call make_bpstat_clear_actions_cleanup and discard_cleanups for it.
-	Call bpstat_clear_actions for failed fetch_inferior_event_wrapper.
-	* infrun.c (fetch_inferior_event): Call
-	make_bpstat_clear_actions_cleanup.
-	* top.c (execute_command): New variable cleanup_if_error, call
-	make_bpstat_clear_actions_cleanup and discard_cleanups for it.
-	* utils.c (do_bpstat_clear_actions_cleanup)
-	(make_bpstat_clear_actions_cleanup): New functions.
-
-2011-08-26  Pedro Alves  <pedro at codesourcery.com>
-
-	* linux-nat.c (linux_child_follow_fork): Don't set lp->resumed on
-	either the parent or the child forks.  Rename a couple locals.
-
-2011-08-26  Pedro Alves  <pedro at codesourcery.com>
-
-	* linux-nat.c (wait_lwp): Avoid assuming errno is preserved by a
-	library call.  Avoid reading the `status' local if all waitpid
-	calls failed.
-
-2011-08-26  Pedro Alves  <pedro at codesourcery.com>
-
-	* common/linux-osdata.c (get_cores_used_by_process): Don't assume
-	opening /proc/PID/task always succeeds.
-
-2011-08-26  Aleksandar Ristovski <aristovski at qnx.com>
-
-	* linespec.c (symtab_from_filename): Check for the end of string.
-
-2011-08-26  Marc Khouzam  <marc.khouzam at ericsson.com>
-
-	PR mi/11912
-	* varobj.c (cplus_describe_child): Add the keyword
-	'class' to the output of the method when dealing 
-	with a cast to a base class.
-
-2011-08-26  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	No functionality change.
-	* breakpoint.c (bpstat_clear_actions): Remove the BS parameter, make
-	function comment a reference, new variables tp and bs, move here code
-	from throw_exception.
-	* breakpoint.h (bpstat_clear_actions): Remove the BS parameter,
-	describe it in the comment.
-	* exceptions.c (throw_exception): Remove variable tp, move the code for
-	bpstat_clear_actions to bpstat_clear_actions.
-
-2011-08-24  Luis Machado  <lgustavo at codesourcery.com>
-
-	* linux-nat.h (linux_proc_get_tgid): Remove declaration.
-	* linux-nat.c: Include linux-procfs.h.
-	(linux_proc_get_tgid): Move to ...
-	* common/linux-procfs.c: ... here. New file.
-	* common/linux-procfs.h: New file.
-	* linux-thread-db.c: Include linux-procfs.h.
-	* Makefile.in: Update dependencies.
-	* config/alpha/alpha-linux.mh: Add linux-procfs.o dependency.
-	* config/arm/linux.mh: Likewise.
-	* config/i386/linux.mh: Likewise.
-	* config/i386/linux64.mh: Likewise.
-	* config/ia64/linux.mh: Likewise.
-	* config/m32r/linux.mh: Likewise.
-	* config/m68k/linux.mh: Likewise.
-	* config/mips/linux.mh: Likewise.
-	* config/pa/linux.mh: Likewise.
-	* config/pa/linux.mh: Likewise.
-	* config/powerpc/linux.mh: Likewise.
-	* config/powerpc/ppc64-linux.mh: Likewise.
-	* config/powerpc/spu-linux.mh: Likewise.
-	* config/sparc/linux.mh: Likewise.
-	* config/sparc/linux64.mh: Likewise.
-	* config/xtensa/linux.mh: Likewise.
-
-2011-08-24  Hui Zhu  <teawater at gmail.com>
-
-	* tracepoint.c (cond_string_is_same): New function.
-	(find_matching_tracepoint): Add condition check
-	by cond_string_is_same.
-
-2011-08-23  Josh Matthews  <josh at joshmatthews.net>
-
-	Fix build error in Darwin port.
-	* darwin-nat-info.c (darwin_debug_regions_recurse): New variable uiout.
-
-2011-08-21  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* linux-thread-db.c: Include auto-load.h and ctype.h.
+	(auto_load_thread_db, show_auto_load_thread_db): New.
+	(struct thread_db_info): New field filename.
+	(delete_thread_db_info): Call xfree for FILENAME.
+	(try_thread_db_load): Initialize FILENAME.
+	(try_thread_db_load_from_pdir, try_thread_db_load_from_dir): Return
+	if !AUTO_LOAD_THREAD_DB.
+	(info_auto_load_libthread_db_compare, info_auto_load_libthread_db): New.
+	(_initialize_thread_db): Install auto_load_thread_db
+	as "set auto-load libthread-db" and install info_auto_load_libthread_db
+	as "info auto-load libthread-db".
+	* main.c (captured_main): Rename gdbpy_global_auto_load to
+	global_auto_load.  Initialize AUTO_LOAD_LOCAL_GDBINIT_PATHNAME and
+	AUTO_LOAD_LOCAL_GDBINIT_LOADED.
+	(print_gdb_help): Extend the help for 'local init file'.
+	* python/py-auto-load.c: Remove a comment about gdb scripts extension.
+	(GDBPY_AUTO_SECTION_NAME): Extend the comment it is Python specific.
+	(auto_load_scripts): Rename to ...
+	(auto_load_python_scripts): ... here, update the comment.
+	(gdbpy_load_auto_script_for_objfile): New declaration.
+	(show_auto_load_python_scripts, script_language_python)
+	(gdbpy_load_auto_script_for_objfile): New.
+	(source_section_scripts): Refactor the code.
+	(load_auto_scripts_for_objfile): Rename to ...
+	(gdbpy_load_auto_scripts_for_objfile): ... here, update the
+	auto_load_objfile_script caller, drop GDBPY_GLOBAL_AUTO_LOAD checking.
+	(info_auto_load_python_scripts): New.
+	(gdbpy_initialize_auto_load): New variables cmd and cmd_name.
+	Rename "set auto-load-scripts" to "set auto-load python-scripts".
+	Register "set auto-load-scripts" as its deprecated alias.  Register
+	"info auto-load python-scripts".  Register "info auto-load-scripts" as
+	its deprecated alias.
+	(load_auto_scripts_for_objfile): Rename to ...
+	(gdbpy_load_auto_scripts_for_objfile): ... here.
+	* python/python.h (load_auto_scripts_for_objfile): Rename to ...
+	(gdbpy_load_auto_scripts_for_objfile): ... here.
+
+2012-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	auto-load: Move files.
+	* Makefile.in (SFILES): Add auto-load.c.
+	(HFILES_NO_SRCDIR): Add auto-load.h.
+	(COMMON_OBS): Add auto-load.o.
+	(distclean): Change .gdbinit for gdb-gdb.gdb.
+	* auto-load.c: New file, with parts from python/py-auto-load.c.
+	* auto-load.h: New file, with parts from python/python.h.
+	* configure: Regenerate.
+	* configure.ac (AC_OUTPUT): Change .gdbinit for gdb-gdb.gdb.
+	* gdb-gdb.gdb.in: New file, renamed from gdbinit.in.
+	* gdbinit.in: Remove file, rename it to gdb-gdb.gdb.in.
+	* main.c: Include auto-load.h.
+	* python/py-auto-load.c: Move include filenames.h, gdb_regex.h,
+	command.h, observer.h and progspace.h to auto-load.c.  Add include
+	auto-load.h.
+	(gdbpy_global_auto_load, struct auto_load_pspace_info)
+	(struct loaded_script, auto_load_pspace_data)
+	(auto_load_pspace_data_cleanup, get_auto_load_pspace_data)
+	(hash_loaded_script_entry, eq_loaded_script_entry)
+	(init_loaded_scripts_info, get_auto_load_pspace_data_for_loading)
+	(maybe_add_script): Move to auto-load.c.
+	(source_section_scripts): Change maybe_add_script parameters passing,
+	use script_not_found_warning_print.
+	(clear_section_scripts, auto_load_objfile_script)
+	(auto_load_new_objfile, loaded_script_ptr)
+	(DEF_VEC_P (loaded_script_ptr), collect_matching_scripts, print_script)
+	(sort_scripts_by_name, info_auto_load_scripts): Move to auto-load.c.
+	(gdbpy_initialize_auto_load): Move auto_load_pspace_data,
+	auto_load_new_objfile and info_auto_load_scripts initizations to
+	auto-load.c.
+	* python/python.h (gdbpy_global_auto_load): Move to auto-load.h.
+
+2012-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
 	Code cleanup.
-	* breakpoint.c (bpstat_clear_actions): Remove clearing of commands_left.
-	(command_line_is_silent): New function.
-	(bpstat_do_actions_1): No longer use commands_left, use
-	command_line_is_silent for commands.
-	(bpstat_alloc): Remove clearing of commands_left.
-	(bpstat_stop_status): Remove initialization of commands_left, use
-	command_line_is_silent.
-	* breakpoint.h (struct bpstats): Remove commands_left.
-
-2011-08-18  Keith Seitz  <keiths at redhat.com>
-
-	PR c++/12266
-	* cp-name-parser.y (struct demangle_info): Remove unused
-	member PREV.
-	(d_grab): Likewise.
-	(allocate_info): Change return type to struct demangle_info *.
-	Always allocate a new demangle_info.
-	Remove unused PREV pointer.
-	(cp_new_demangle_parse_info): New function.
-	(cp_demangled_name_parse_free): New function.
-	(do_demangled_name_parse_free_cleanup): New function.
-	(make_cleanup_cp_demangled_name_parse_free): New function.
-	(cp_demangled_name_to_comp): Change return type to
-	struct demangle_parse_info *.
-	Allocate a new storage for each call.
-	(main): Update usage for cp_demangled_name_to_comp
-	API change.
-	* cp-support.h (struct demangle_parse_info): New structure.
-	(cp_demangled_name_to_comp): Update API change for
-	return type.
-	(cp_new_demangle_parse_info): Declare.
-	(make_cleanup_cp_demangled_name_parse_free): New declaration.
-	(cp_demangled_name_parse_free): Declare.
-	* cp-support.c (cp_canonicalize_string): Update API
-	change for cp_demangled_name_to_comp.
-	(mangled_name_to_comp): Likewise.
-	Return struct demangle_parse_info, too.
-	(cp_class_name_from_physname): Update mangled_name_to_comp
-	API change.
-	(method_name_from_physname): Likewise.
-	(cp_func_name): Update API change for cp_demangled_name_to_comp.
-	(cp_remove_params): Likewise.
-	* python/py-type.c (typy_legacy_template_argument): Likewise.
-
-	* cp-support.h (cp_canonicalize_string_no_typedefs): Declare.
-	(cp_merge_demangle_parse_infos): Declare.
-	* cp-support.c (ignore_typedefs): New file global.
-	(copy_string_to_obstack): New function.
-	(inspect_type): New function.
-	(replace_typedefs): New function.
-	(replace_typedefs_qualified_name): New function.
-	(cp_canonicalize_string_no_typedefs): New function.
-	* cp-name-parser.y (cp_merge_demangle_parse_infos): New function.
-	(cp_new_demangle__parse_info): Allocate and initialize the obstack.
-	* linespec.c (find_methods): Use cp_canonicalize_string_no_typedefs
-	instead of cp_canonicalize_string.
-	(find_method): Likewise.
-	(decode_compound): Before looking up the name, call
-	cp_canonicalize_string_no_typedefs.
-	(decode_variable): Likewise.
-
-2011-08-17  Phil Muldoon  <pmuldoon at redhat.com>
-            Tom Tromey  <tromey at redhat.com>
-            Matt Rice <ratmice at gmail.com>
-
-        * python/lib/gdb/prompt.py: New file.
-        * python/lib/gdb/command/prompt.py: New file.
-        * NEWS: Document set extended-prompt and gdb.prompt library
-
-2011-08-16  Yao Qi  <yao at codesourcery.com>
-
-	* tic6x-linux-tdep.c: Move const arrays definition from here...
-	* tic6x-tdep.c: to here ...
-
-2011-08-14  Yao Qi  <yao at codesourcery.com>
-
-	* NEWS: New port to Texas Instruments TMS320C6x.
-
-2011-08-14  Andrew Jenner  <andrew at codesourcery.com>
-	    Bernd Schmidt  <bernds at codesourcery.com>
-	    Yao Qi  <yao at codesourcery.com>
-
-	* configure.tgt: Handle tic6x-*-*linux and tic6x-*-*.
-	* solib-dsbt.c: New file.  Support DSBT shared object.
-	* tic6x-linux-tdep.c: New file.
-	* tic6x-tdep.c: New file.
-	* tic6x-tdep.h: New file.
-
-2011-08-14  Andrew Stubbs <ams at codesourcery.com>
-	    Yao Qi  <yao at codesourcery.com>
-
-	* remote.c (PACKET_qXfer_fdpic): New enum value.
-	(remote_protocol_features): Add qXfer:fdpic:read packet.
-	(remote_xfer_partial): Support TARGET_OBJECT_FDPIC.
-	(_initialize_remote): Add set/show remote read-fdpic-loadmap command.
-	* target.h (enum target_object): Add TARGET_OBJECT_FDPIC.
-
-2011-08-14  Yao Qi  <yao at codesourcery.com>
-
-	Target description for tic6x.
-	* features/Makefile (WHICH): Add tic6x-c64xp tic6x-c64x tic6x-c62x
-	tic6x-c64xp-linux tic6x-c64x-linux and tic6x-c62x-linux.
-	* features/tic6x-c6xp.xml, features/tic6x-core.xml: New.
-	* features/tic6x-gp.xml, features/tic6x-c62x.xml: New.
-	* features/tic6x-c64x.xml, features/tic6x-c64xp.xml: New.
-	* features/tic6x-c62x-linux.xml, features/tic6x-c64x-linux.xml: New.
-	* features/tic6x-c64xp-linux.xml: New.
-	* features/tic6x-c64xp.c, features/tic6x-c64x.c: Generated.
-	* features/tic6x-c62x.c, features/tic6x-c64xp-linux.c: Generated.
-	* features/tic6x-c64x-linux.c, features/tic6x-c62x-linux.c: Generated.
-	* regformats/tic6x-c62x.dat, regformats/tic6x-c64x.dat: Generated.
-	* regformats/tic6x-c64xp.dat,
-	regformats/tic6x-c62x-linux.dat: Generated.
-	* regformats/tic6x-c64x-linux.dat,
-	regformats/tic6x-c64xp-linux.dat: Generated.
-	* config/djgpp/fnchange.lst: Add features/tic6x-*.xml and
-	features/tic6x-*.c files.
-	Add regformats/tic6x-*.dat files.
-
-2011-08-12  Doug Evans  <dje at google.com>
-
-	* NEWS: Mention new "type" attribute of python gdb.Symbol objects.
-	* python/py-symbol.c (sympy_get_type): New function.
-	(symbol_object_getset): Add "type".
-
-2011-08-12  Pedro Alves  <pedro at codesourcery.com>
-
-	PR tui/13073
-
-	* tui/tui-regs.c (tui_show_register_group): Skip registers with an
-	empty name.
-	(tui_show_register_group): Don't store a byte buffer in the data
-	element's value.
-	(tui_register_format): Skip registers with an empty name.
-	(tui_get_register): Store a struct value in the data element's
-	value field instead of a byte buffer holding the raw register
-	contents.  Account for optimized-out and unavailable registers
-	when comparing register contents.
-
-2011-08-09  Pedro Alves  <pedro at codesourcery.com>
-
-	* printcmd.c (current_display_number): Update comment.
-	(disable_current_display_cleanup): Delete.
-	(do_one_display): Use make_cleanup_restore_integer.  Gracefully
-	catch errors thrown while evaluating and printing the display.
-
-2011-08-09  Tom Tromey  <tromey at redhat.com>
-
-	* mi/mi-cmd-break.c (mi_cmd_break_passcount): Fix typo.
-
-2011-08-09  Pedro Alves  <pedro at codesourcery.com>
-
-	* elfread.c (elf_symtab_read): Rework comments.
-	* maint.c (maintenance_command): Ditto.
-	* somread.c (som_symtab_read): Ditto.
-	* solib.c (solib_find, solib_map_sections, update_solib_list)
-	(solib_add, info_sharedlibrary_command, solib_name_from_address)
-	(solib_create_inferior_hook, in_solib_dynsym_resolve_code)
-	(sharedlibrary_command, no_shared_libraries): Ditto.
-	* solib-irix.c (locate_base, disable_break, enable_break)
-	(irix_solib_create_inferior_hook, irix_solib_create_inferior_hook)
-	(irix_current_sos, irix_open_symbol_file_object)
-	(irix_special_symbol_handling): Ditto.
-	* solib-sunos.c (locate_base, first_link_map_member)
-	(sunos_current_sos, disable_break, enable_break)
-	(sunos_special_symbol_handling, sunos_solib_create_inferior_hook):
-	Ditto.
-	* solib-svr4.c (bfd_lookup_symbol, elf_locate_base, locate_base)
-	(open_symbol_file_object, svr4_current_sos, enable_break)
-	(svr4_special_symbol_handling, svr4_solib_create_inferior_hook):
-	Ditto.
-	* solib-frv.c (bfd_lookup_symbol, open_symbol_file_object)
-	(frv_current_sos, enable_break, frv_special_symbol_handling)
-	(frv_solib_create_inferior_hook): Ditto.
-	* solist.h (struct target_so_ops): Extend the comments of the
-	special_symbol_handling, current_sos and open_symbol_file_object
-	methods.
-
-2011-08-09  Phil Muldoon  <pmuldoon at redhat.com>
-
-	* python/lib/gdb/__init__.py: Auto-load files in command and
-	function directories.
-	* python/python.c (finish_python_initialization): Use
-	os.path.join.
-	* python/lib/gdb/command/pretty_printers.py: Self register
-	command.
-	* NEWS: Document auto-loading.
-
-2011-08-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* dwarf2loc.c (dwarf2_evaluate_loc_desc_full) <DWARF_VALUE_STACK>
-	(dwarf2_evaluate_loc_desc_full) <DWARF_VALUE_LITERAL>: New variable
-	objfile_gdbarch.  Fix BFD_ENDIAN_BIG case.
-
-2011-08-08  Tom Tromey  <tromey at redhat.com>
-
-	* breakpoint.c (clean_up_filters): Remove.
-	(catch_syscall_split_args): Use VEC_cleanup.
-
-2011-08-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* cp-name-parser.y (xfree): Wrap the name free by CONCAT2.
-	(main): Uncomment "Demangling error\n".
-
-2011-08-05  Paul Pluzhnikov  <ppluzhnikov at google.com>
-
-	* solib-target.c (segment_attributes): Make them static.
-	(section_attributes, library_children, library_attributes): Likewise.
-	(library_list_children, library_list_attributes): Likesise.
-	(library_list_elements): Likewise.
-
-2011-08-05  Pedro Alves  <pedro at codesourcery.com>
-
-	* exceptions.c (throw_exception): Don't disable the current
-	display.
-	* printcmd.c (disable_current_display_cleanup): New function.
-	(do_one_display): Install a cleanup to disable the current display
-	if doing the display throws.
-
-2011-08-05  Eli Zaretskii  <eliz at gnu.org>
-
-	* python/py-breakpoint.c (gdbpy_initialize_breakpoints): Move the
-	initialization of the tp_new member to the corresponding
-	gdbpy_initialize_* function.
-	* python/py-cmd.c (gdbpy_initialize_commands): Likewise.
-	* python/py-frame.c (gdbpy_initialize_frames): Likewise.
-	* python/py-function.c (gdbpy_initialize_functions): Likewise.
-	* python/py-inferior.c (gdbpy_initialize_inferior): Likewise.
-	* python/py-param.c (gdbpy_initialize_parameters): Likewise.
-
-2011-08-05  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* spu-tdep.c (info_spu_event_command, info_spu_signal_command)
-	(info_spu_mailbox_list, info_spu_mailbox_command, info_spu_dma_cmdlist)
-	(info_spu_dma_command, info_spu_proxydma_command): Rename uiout
-	references to current_uiout.
-
-2011-08-04  Pedro Alves  <pedro at codesourcery.com>
-
-	* event-loop.c (gdb_do_one_event): Remove `data' parameter.
-	(start_event_loop): Use TRY_CATCH instead of catch_errors.
-	* event-loop.h (gdb_do_one_event): Remove `data' parameter.
-	* top.c (gdb_readline_wrapper): Adjust.
-	* tui/tui-interp.c (tui_command_loop):
-	(_initialize_tui_interp): Don't install it.
-
-2011-08-04  Pedro Alves  <pedro at codesourcery.com>
-
-	* ui-out.h (uiout): Rename to ...
-	(current_uiout): ... this.
-	* ui-out.c (uiout): Rename to ...
-	(current_uiout): ... this.
-	* ada-lang.c (print_it_exception, print_one_exception)
-	(print_mention_exception): Adjust.
-	* breakpoint.c (watchpoint_check): Adjust.
-	(print_breakpoint_location, print_one_breakpoint, breakpoint_1)
-	(default_collect_info, watchpoints_info, print_one_catch_fork)
-	(print_one_catch_vfork, print_one_catch_syscall)
-	(print_one_catch_exec, mention, print_it_ranged_breakpoint)
-	(print_one_ranged_breakpoint, print_mention_ranged_breakpoint)
-	(print_it_watchpoint, print_mention_watchpoint)
-	(print_it_masked_watchpoint, print_mention_masked_watchpoint)
-	(print_it_exception_catchpoint, print_one_exception_catchpoint)
-	(print_mention_exception_catchpoint, say_where, bkpt_print_it)
-	(bkpt_print_mention, momentary_bkpt_print_it)
-	(tracepoint_print_mention, update_static_tracepoint)
-	(tracepoints_info, save_breakpoints): Adjust.
-	* cli-out.c (field_separator): Adjust.
-	* cp-abi.c (list_cp_abis, show_cp_abi_cmd): Adjust.
-	* exceptions.c (catch_exceptions_with_msg, catch_errors): Adjust.
-	* frame.c (get_current_frame): Adjust.
-	* infcmd.c (run_command_1, print_return_value): Adjust.
-	* inferior.c (inferior_command, info_inferiors_command): Adjust.
-	* infrun.c (print_end_stepping_range_reason): Adjust.
-	(print_signal_exited_reason, print_exited_reason): Adjust.
-	(print_signal_received_reason, print_no_history_reason): Adjust.
-	* interps.c (interp_set): Adjust.
-	* osdata.c (info_osdata_command): Adjust.
-	* progspace.c (maintenance_info_program_spaces_command): Adjust.
-	* remote-fileio.c (remote_fileio_request): Adjust.
-	* remote.c (show_remote_cmd): Adjust.
-	* solib.c (info_sharedlibrary_command): Adjust.
-	* source.c (print_source_lines_base): Adjust.
-	* stack.c (print_stack_frame): Adjust.
-	(do_gdb_disassembly, print_frame_info, print_frame): Adjust.
-	* symfile-mem.c (add_vsyscall_page): Adjust.
-	* symfile.c (load_progress, generic_load)
-	(print_transfer_performance): Adjust.
-	* thread.c (info_threads_command, restore_selected_frame)
-	(thread_command): Adjust.
-	* top.c (make_cleanup_restore_ui_file): Adjust.
-	* tracepoint.c (tvariables_info_1, trace_status_mi, tfind_1)
-	(print_one_static_tracepoint_marker): Adjust.
-	* cli/cli-cmds.c (print_disassembly): Adjust.
-	* cli/cli-decode.c (print_doc_line): Adjust.
-	* cli/cli-interp.c (safe_execute_command): Adjust.
-	* cli/cli-logging.c (set_logging_redirect, pop_output_files)
-	(handle_redirections): Adjust.
-	* cli/cli-script.c (show_user_1): Adjust.
-	* cli/cli-setshow.c (do_setshow_command, cmd_show_list): Adjust.
-	* mi/mi-cmd-break.c (breakpoint_notify): Adjust.
-	* mi/mi-cmd-disas.c (mi_cmd_disassemble): Adjust.
-	* mi/mi-cmd-env.c (mi_cmd_env_pwd, mi_cmd_env_path)
-	(mi_cmd_env_dir): Adjust.
-	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_file)
-	(print_partial_file_name, mi_cmd_file_list_exec_source_files): Adjust.
-	* mi/mi-cmd-stack.c (mi_cmd_stack_list_frames)
-	(mi_cmd_stack_info_depth, mi_cmd_stack_list_args)
-	(list_args_or_locals): Adjust.
-	* mi/mi-cmd-var.c (print_varobj, mi_cmd_var_create)
-	(mi_cmd_var_delete, mi_cmd_var_set_format, mi_cmd_var_set_frozen)
-	(mi_cmd_var_show_format, mi_cmd_var_info_num_children)
-	(mi_cmd_var_list_children, mi_cmd_var_info_type)
-	(mi_cmd_var_info_path_expression, mi_cmd_var_info_expression)
-	(mi_cmd_var_show_attributes, mi_cmd_var_evaluate_expression)
-	(mi_cmd_var_assign, mi_cmd_var_update, varobj_update_one): Adjust.
-	* mi/mi-interp.c (mi_on_normal_stop): Adjust.
-	* mi/mi-main.c (mi_cmd_gdb_exit, mi_cmd_thread_select)
-	(mi_cmd_thread_list_ids, mi_cmd_thread_info, print_one_inferior)
-	(list_available_thread_groups, mi_cmd_list_thread_groups)
-	(mi_cmd_data_list_register_names)
-	(mi_cmd_data_list_changed_registers)
-	(mi_cmd_data_list_register_values, get_register)
-	(mi_cmd_data_evaluate_expression, mi_cmd_data_read_memory)
-	(mi_cmd_data_read_memory_bytes, mi_cmd_list_features)
-	(mi_cmd_list_target_features, mi_cmd_add_inferior)
-	(mi_execute_command, mi_load_progress): Adjust.
-	* mi/mi-symbol-cmds.c (mi_cmd_symbol_list_lines): Adjust.
-	* python/py-auto-load.c (print_script, info_auto_load_scripts):
-	Adjust.
-	* python/py-breakpoint.c (bppy_get_commands): Adjust.
-	* tui/tui-interp.c (tui_command_loop): Adjust.
-	* tui/tui-io.c (tui_setup_io, tui_initialize_io): Adjust.
-
-2011-08-04  Pedro Alves  <pedro at codesourcery.com>
-
-	* exceptions.c (struct catcher): Remove saved_uiout field.
-	(exceptions_state_mc_init): Remove the `func_uiout' parameter, and
-	no longer save/resvore the global ui_out builder.
-	(catch_exceptions_with_msg): Save/override/restore the global
-	ui_out builder manually instead of relying on TRY_CATCH to do it.
-	(catch_errors): Save/restore the global ui_out builder manually
-	instead of relying on TRY_CATCH to do it.
-	* exceptions.h (exceptions_state_mc_init): Remove the `func_uiout'
-	parameter.
-	(TRY_CATCH): Adjust.
-	* cli/cli-interp.c (safe_execute_command): Save/override/restore
-	the global ui_out builder manually instead of relying on TRY_CATCH
-	to do it.
-
-2011-08-03  Philippe Waroquiers  <philippe.waroquiers at skynet.be>
-
-	* breakpoint.c (update_global_location_list): Ensure
-	invariant 'first loc marked not duplicated and inserted,
-	following locs marked duplicated/not inserted' is respected
-	for multiple locations at the same address.
-	(unduplicated_should_be_inserted) New function.
-	(swap_insertion) New function.
-
-2011-08-03  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* stack.c (print_frame_arguments_choices): Comment typo fix.
-
-2011-08-01  Thiago Jung Bauermann  <bauerman at br.ibm.com>
-
-	Revert:
-	2011-07-31  Thiago Jung Bauermann  <bauerman at br.ibm.com>
-	* breakpoint.c (insert_bp_location): Remove disabled_breaks
-	argument.  Update callers.
-
-2011-08-01  Paul Pluzhnikov  <ppluzhnikov at google.com>
-
-	PR gdb/13045
-	* doublest.c (convert_doublest_to_floatformat): Pass correct
-	mantissa length to put_field.
-
-2011-08-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* stack.c (do_gdb_disassembly): Use RETURN_MASK_ERROR, simplify the
-	exception_print code path.
-	(backtrace_command): Remove variable e.  Protect arg by make_cleanup in
-	advance.  Simplify memset.  Remove TRY_CATCH.  Remove explicit xfree.
-	(backtrace_full_command):  Remove variable e.  Remove TRY_CATCH.
-
-2011-08-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* charset.c (find_charset_names): Remove variables ix and elt.
+	Use free_char_ptr_vec.
+	* elfread.c (build_id_to_debug_filename): New variables debugdir_vec,
+	back_to and ix.  Use dirnames_to_char_ptr_vec.  Remove variable
+	debugdir_end.  New variable debugdir_len.
+	* gdb_vecs.h (free_char_ptr_vec, make_cleanup_free_char_ptr_vec)
+	(dirnames_to_char_ptr_vec_append, dirnames_to_char_ptr_vec): New
+	declarations.
+	* progspace.c (clear_program_space_solib_cache): Remove variables ix
+	and elt.  Use free_char_ptr_vec.
+	* source.c (add_path): Remove variables argv, arg and argv_index.
+	New variables dir_vec, back_to, ix and name.
+	Use dirnames_to_char_ptr_vec_append.  Use freeargv instead of
+	make_cleanup_freeargv.  Remove variable separator.  Simplify the code
+	no longer expecting DIRNAME_SEPARATOR.
+	(openp): Remove variable p, p1 and len.  New variables dir_vec,
+	back_to, ix and dir.  Use dirnames_to_char_ptr_vec.  Simplify the code
+	no longer expecting DIRNAME_SEPARATOR.
+	* symfile.c (find_separate_debug_file): New variables debugdir_vec,
+	back_to and ix.  Use dirnames_to_char_ptr_vec.  Remove variable
+	debugdir_end.
+	* utils.c (free_char_ptr_vec, do_free_char_ptr_vec)
+	(make_cleanup_free_char_ptr_vec, dirnames_to_char_ptr_vec_append)
+	(dirnames_to_char_ptr_vec): New functions.
+
+2012-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
 	Code cleanup.
-	* stack.c (struct print_stack_frame_args, print_stack_frame_stub):
-	Remove, merge them into ...
-	(print_stack_frame): ... here with a TRY_CATCH.  New variable e, remove
-	variable args and its initialization.
-	(struct print_args_args, print_args_stub): Remove, merge them into
-	print_frame.
-	(struct gdb_disassembly_stub_args, gdb_disassembly_stub): Remove, merge
-	them into ...
-	(do_gdb_disassembly): ... here.  Remove variable args and its
-	initialization.
-	(print_frame): Remove variable args and its initialization, new
-	variable gdbarch and numargs (from print_args_stub), inline here
-	print_args_stub with a TRY_CATCH.
-	(struct backtrace_command_args, backtrace_command_stub): Remove, merge
-	them into ...
-	(backtrace_command, backtrace_full_command): ... here with a TRY_CATCH.
-	New variable e, remove variable btargs and its initialization.
-
-2011-08-01  Tristan Gingold  <gingold at adacore.com>
-
-	* darwin-nat.c (darwin_decode_exception_message): Adjust assertion.
-
-2011-07-31  Thiago Jung Bauermann  <bauerman at br.ibm.com>
-
-	* breakpoint.c (insert_bp_location): Document return value.
-	(insert_breakpoint_locations): Fix documentation.
-	(remove_breakpoints): Add documentation.
-
-2011-07-31  Thiago Jung Bauermann  <bauerman at br.ibm.com>
-
-	* breakpoint.c (insert_bp_location): Remove disabled_breaks
-	argument.  Update callers.
-
-2011-07-30  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* stack.c (print_frame_info): Comment typo fix.
-
-2011-07-29  Sterling Augustine  <saugustine at google.com>
-
-	* MAINTAINERS (Write After Approval): Add myself to the list.
-
-2011-07-29  Tom Tromey  <tromey at redhat.com>
-
-	* solib-target.c: Use DEF_VEC_I, not DEF_VEC_O.
-	(library_list_start_segment): Update.
-	(library_list_start_section): Update.
-
-2011-07-28  Phil Muldoon  <pmuldoon at redhat.com>
-
-	* varobj.c (value_get_print_value): Move hint check later into the
-	function.  Comment function.  Free thevalue before reusing it.
-
-2011-07-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
-	    Pedro Alves  <pedro at codesourcery.com>
-
-	* eval.c (evaluate_subexp_standard): Remove not_lval from all calls of
-	value_one.
-	* valops.c (value_one): Remove parameter lv.  Do not pass it to itself.
-	Assert the result kind.
-	* value.h (value_one): Remove parameter lv.
-
-2011-07-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix crash on lval_computed values.
-	* valops.c (value_zero): Use not_lval for lval_computed.
-
-2011-07-27  Tom Tromey  <tromey at redhat.com>
-
-	* Makefile.in (HFILES_NO_SRCDIR): Add 'common' prefix for
-	gdb_assert.h, gdb_locale.h, gdb_dirent.h.
-
-2011-07-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* typeprint.c (_initialize_typeprint): Extend the help of "whatis" and
-	"ptype" by their typedefs difference.
-
-2011-07-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* dwarf2expr.c (ctx_no_read_reg): New function.
-	* dwarf2expr.h (ctx_no_read_reg): New declaration.
-	* dwarf2read.c (read_2_signed_bytes, read_4_signed_bytes): Remove.
-	(decode_locdesc_read_mem, decode_locdesc_ctx_funcs): New.
-	(decode_locdesc): Replace by a caller of dwarf_expr_eval.
-
-2011-07-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* dwarf2-frame.c (no_get_frame_base, no_get_frame_cfa, no_get_frame_pc)
-	(no_get_tls_address, no_dwarf_call, no_base_type): Move to the other
-	file.
-	(dwarf2_frame_ctx_funcs): Reference the renamed functions.
-	* dwarf2expr.c (ctx_no_get_frame_base, ctx_no_get_frame_cfa)
-	(ctx_no_get_frame_pc, ctx_no_get_tls_address, ctx_no_dwarf_call)
-	(ctx_no_get_base_type): Move the functions here.
-	* dwarf2expr.h (ctx_no_get_frame_base, ctx_no_get_frame_cfa)
-	(ctx_no_get_frame_pc, ctx_no_get_tls_address, ctx_no_dwarf_call)
-	(ctx_no_get_base_type): New declarations.
-
-2011-07-27  Tom Tromey  <tromey at redhat.com>
-
-	* xcoffread.c (dwarf2_xcoff_names): Add 'macro' and 'sentinel'
-	entries.
-	* symfile.h (struct dwarf2_debug_sections) <sentinel>: New field.
-	* dwarf2read.c (dwarf2_elf_names): Add sentinel entry.
-
-2011-07-26  Sterling Augustine  <saugustine at google.com>
-
-	* cli/cli-dump.c (dump_binary_file): Change parameter type to
-	ULONGEST.
-	(dump_bfd_file): Likewise.
-
-2011-07-26  Philippe Waroquiers  <philippe.waroquiers at skynet.be>
-
-	* remote.c (remote_region_ok_for_hw_watchpoint): New function.
-	(remote_hw_watchpoint_length_limit): New variable.
-	(_initialize_remote) add set,show cmds for this new variable.
-	* gdb.texinfo: document these new commands.
-	* NEWS: Mention these new commands.
-
-2011-07-26  Pedro Alves  <pedro at codesourcery.com>
-
-	* breakpoint.c (works_in_software_mode_watchpoint): Also return
-	true for software watchpoints.
-
-2011-07-26  Joel Brobecker  <brobecker at adacore.com>
-
-	GDB 7.3 released.
-
-2011-07-26  Tom Tromey  <tromey at redhat.com>
-
-	* symfile.h (struct dwarf2_debug_sections) <macro>: New field.
-	* dwarf2read.c (read_indirect_string_at_offset): New function.
-	(read_indirect_string): Use it.
-	(dwarf_decode_macro_bytes): New function, taken from
-	dwarf_decode_macros.  Handle DW_MACRO_GNU_*.
-	(dwarf_decode_macros): Use it.  handle DW_MACRO_GNU_*.
-	(dwarf_parse_macro_header, skip_form_bytes, skip_unknown_opcode):
-	New functions.
-	(struct dwarf2_per_objfile) <macro>: New field.
-	(dwarf2_elf_names): Add .debug_macro.
-	(dwarf2_macros_too_long_complaint): Add 'section' argument.
-	(dwarf2_locate_sections): Handle new section.
-	(read_file_scope): Handle DW_AT_GNU_macros.
-	(dwarf2_per_objfile_free): Unmap the .debug_macro section.
-
-2011-07-26  Paul Pluzhnikov  <ppluzhnikov at google.com>
-
-	* NEWS: Mention dcache configuration.
-	* dcache.c (dcache_set_list, dcache_show_list): New variables.
-	(dcache_size, dcache_line_size): New variables.
-	(LINE_SIZE_MASK, XFORM, MASK): Adjust.
-	(struct dcache_block): Make it expandable.
-	(struct dcache_struct): New field.
-	(dcache_invalidate): Discard freelist upon dcache_line_size changes.
-	(dcache_hit, dcache_alloc, dcache_peek_byte): Adjust.
-	(dcache_poke_byte, dcache_print_line): Adjust.
-	(set_dcache_size, set_dcache_line_size): New functions.
-	(set_dcache_command, show_dcache_command): New functions.
-	(_initialize_dcache): Add new commands.
-
-2011-07-26  Paul Pluzhnikov  <ppluzhnikov at google.com>
-
-	* progspace.h (struct program_space): Add solib_add_generation.
-	* infcmd.c (post_create_inferior): Only call solib_add if not
-	already done.
-	* solib.c (solib_add): Increment solib_add_generation.
-
-2011-07-25  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix implicit pointer offsets.
-	* dwarf2loc.c (indirect_pieced_value): Comment byte_offset.  Use also
-	ptr.OFFSET.
-
-2011-07-25  Tom Tromey  <tromey at redhat.com>
-
-	* ada-lang.c (ada_exception_breakpoint_ops): Make return type
-	const.
-	(ada_exception_sal): Make 'ops' const.
-	(ada_decode_exception_location): Likewise.
-	(ada_decode_assert_location): Likewise.
-	(catch_assert_command): Update.
-	(catch_ada_exception_command): Update.
-	(create_ada_exception_catchpoint): Make 'ops' const.
-	* breakpoint.c (set_raw_breakpoint_without_location)
-	(set_raw_breakpoint, momentary_breakpoint_from_master): Make 'ops'
-	const.
-	(create_internal_breakpoint): Update.
-	(init_raw_breakpoint_without_location): Make 'ops' const.
-	(init_raw_breakpoint, init_catchpoint)
-	(create_fork_vfork_event_catchpoint)
-	(create_syscall_event_catchpoint, init_breakpoint_sal)
-	(create_breakpoint_sal, create_breakpoints_sal)
-	(create_breakpoint, init_ada_exception_breakpoint): Likewise.
-	* breakpoint.h (struct breakpoint) <ops>: Now const.
-	(init_ada_exception_breakpoint, create_breakpoint): Make 'ops'
-	const.
-
-2011-07-25  Paul Pluzhnikov  <ppluzhnikov at google.com>
-
-	* linux-thread-db.c (thread_from_lwp): Initialize th.th_unique.
-
-2011-07-25  Pedro Alves  <pedro at codesourcery.com>
-
-	* breakpoint.h (print_recreate_thread): Declare.
-	(struct breakpoint): Move step_count, pass_count,
-	number_on_target, static_trace_marker_id,
-	static_trace_marker_id_idx ...
-	(struct tracepoint): ... to this new struct.
-	(get_tracepoint, get_tracepoint_by_number_on_target)
-	(get_tracepoint_by_number): Change return type to struct
-	tracepoint pointer.
-	* breakpoint.c (is_tracepoint_type): New, factored out from
-	is_tracepoint.
-	(is_tracepoint): Adjust.
-	(print_one_breakpoint_location): Cast to struct tracepoint as
-	necessary, and adjust.
-	(print_recreate_catch_fork, print_recreate_catch_vfork)
-	(print_recreate_catch_syscall, print_recreate_catch_exec): Call
-	print_recreate_thread.
-	(init_breakpoint_sal): New, factored out from
-	create_breakpoint_sal.
-	(create_breakpoint_sal): Reimplement.
-	(create_breakpoint): Allocate a struct tracecepoint if the caller
-	wanted a tracepoint.  Use init_breakpoint_sal and
-	install_breakpoint.
-	(print_recreate_ranged_breakpoint, print_recreate_watchpoint)
-	(print_recreate_masked_watchpoint)
-	(print_recreate_exception_catchpoint): Call print_recreate_thread.
-	(tracepoint_print_one_detail): Adjust.
-	(tracepoint_print_recreate): Adjust.  Call print_recreate_thread.
-	Dump the pass count here.
-	(update_static_tracepoint): Adjust.
-	(addr_string_to_sals): Adjust.
-	(create_tracepoint_from_upload): Adjust.  Change return type to
-	struct tracepoint pointer.
-	(trace_pass_set_count): Change parameter type to struct tracepoint
-	pointer, and adjust.
-	(trace_pass_command): Adjust.
-	(get_tracepoint, get_tracepoint_by_number_on_target)
-	(get_tracepoint_by_number): Change return type to struct
-	tracepoint pointer, and adjust.
-	(print_recreate_thread): New, factored out from save_breakpoints.
-	(save_breakpoints): Don't print thread and task and passcount
-	recreation here.
-	* remote.c (remote_download_tracepoint): Adjust.
-	* tracepoint.c (trace_actions_command, validate_actionline)
-	(start_tracing, tfind_1, trace_find_tracepoint_command)
-	(trace_dump_command): Adjust.
-	(find_matching_tracepoint): Change return type to struct
-	tracepoint pointer, and adjust.
-	(merge_uploaded_tracepoints, tfile_get_traceframe_address)
-	(tfile_trace_find, tfile_fetch_registers): Adjust.
-	* tracepoint.h (create_tracepoint_from_upload): Change return type
-	to struct tracepoint pointer.
-	* ada-lang.c (print_recreate_exception): Call
-	print_recreate_thread.
-	* mi/mi-cmd-break.c (mi_cmd_break_passcount): Adjust.
-
-2011-07-25  Pedro Alves  <pedro at codesourcery.com>
-
-	* breakpoint.h (struct breakpoint): Move ops as first field.  Move
-	exp_string, exp_string_reparse, exp, exp_valid_block, cond_exp,
-	cond_exp_valid_block, val, val_valid, watchpoint_frame,
-	watchpoint_thread, watchpoint_triggered ...
-	(struct watchpoint): ... to this new struct.
-	(is_watchpoint): Declare.
-	(install_breakpoint): Add new `internal' parameter.
-	* breakpoint.c (is_watchpoint): Delete declaration.
-	(set_breakpoint_condition): Handle watchpoints.
-	(is_watchpoint): Make public.
-	(watchpoint_in_thread_scope): Change parameter type to struct
-	watchpoint.
-	(watchpoint_del_at_next_stop): Change parameter type to struct
-	watchpoint.  Remove assertion.  Adjust.
-	(update_watchpoint): Ditto.
-	(insert_breakpoints, breakpoint_init_inferior)
-	(watchpoints_triggered, watchpoint_check)
-	(bpstat_check_watchpoint, bpstat_check_breakpoint_conditions)
-	(bpstat_stop_status, print_one_breakpoint_location)
-	(print_one_breakpoint_location, watchpoint_locations_match): Cast
-	to struct watchpoint as necessary, and adjust.
-	(install_breakpoint): Add `internal' argument.  If true, don't
-	mention the new breakpoint.  Use set_breakpoint_number.
-	(create_fork_vfork_event_catchpoint)
-	(create_syscall_event_catchpoint): Adjust.
-	(dtor_watchpoint): New.
-	(re_set_watchpoint, insert_watchpoint, remove_watchpoint)
-	(breakpoint_hit_watchpoint, resources_needed_watchpoint)
-	(print_it_watchpoint, print_mention_watchpoint)
-	(print_recreate_watchpoint, insert_masked_watchpoint)
-	(remove_masked_watchpoint, resources_needed_masked_watchpoint)
-	(print_one_detail_masked_watchpoint)
-	(print_mention_masked_watchpoint)
-	(print_recreate_masked_watchpoint): Cast to struct watchpoint as
-	necessary, and adjust.
-	(watch_command_1): Allocate and initialize a struct watchpoint
-	instead of a struct breakpoint.  Use install_breakpoint.
-	(catch_exec_command_1): Adjust.
-	(base_breakpoint_dtor): Delete accesses to watchpoint specific
-	fields.
-	(delete_breakpoint, enable_breakpoint_disp)
-	(invalidate_bp_value_on_memory_change): Cast to struct watchpoint
-	as necessary, and adjust.
-	(initialize_breakpoint_ops): Install dtor_watchpoint as
-	watchpoints' dtor method.
-	* ada-lang.c (create_ada_exception_catchpoint): Adjust.
-	* python/py-breakpoint.c (bppy_get_expression): Use is_watchpoint.
-	to struct watchpoint as necessary, and adjust.
-
-2011-07-25  Pedro Alves  <pedro at codesourcery.com>
-
-	* ada-lang.c (dtor_exception, re_set_exception): Indirect through
-	the the base class ops table.
-	(catch_exception_breakpoint_ops)
-	(catch_exception_unhandled_breakpoint_ops)
-	(catch_assert_breakpoint_ops): Don't statically initialize.
-	(initialize_ada_catchpoint_ops): New.
-	(_initialize_ada_language): Call it.
-	* breakpoint.c (base_breakpoint_ops, bkpt_base_breakpoint_ops)
-	(bkpt_breakpoint_ops): Forward declare.
-	(catch_fork_breakpoint_ops, catch_vfork_breakpoint_ops)
-	(catch_syscall_breakpoint_ops, catch_exec_breakpoint_ops)
-	(ranged_breakpoint_ops, watchpoint_breakpoint_ops)
-	(masked_watchpoint_breakpoint_ops)
-	(gnu_v3_exception_catchpoint_ops): Don't statically initialize.
-	(dtor_catch_syscall, dtor_catch_exec): Indirect through the the
-	base class ops table.
-	(null_re_set, null_check_status, null_works_in_software_mode)
-	(null_resources_needed, null_print_one_detail): Delete.
-	(bkpt_dtor): Rename to ...
-	(base_breakpoint_dtor): ... this.  Make static.
-	(bkpt_allocate_location): Rename to ...
-	(base_breakpoint_allocate_location): ... this.  Make static.
-	(base_breakpoint_re_set): New.
-	(internal_error_pure_virtual_called): New.
-	(base_breakpoint_insert_location, base_breakpoint_remove_location)
-	(base_breakpoint_breakpoint_hit, base_breakpoint_check_status)
-	(base_breakpoint_works_in_software_mode)
-	(base_breakpoint_resources_needed, base_breakpoint_print_it)
-	(base_breakpoint_print_one_detail, base_breakpoint_print_mention)
-	(base_breakpoint_print_recreate): New functions.
-	(base_breakpoint_ops): New global.
-	(bkpt_re_set, bkpt_insert_location, bkpt_remove_location)
-	(bkpt_breakpoint_hit): Make static.
-	(bkpt_check_status): Delete.
-	(bkpt_resources_needed): Make static.
-	(bkpt_works_in_software_mode): Delete.
-	(bkpt_print_it, bkpt_print_mention, bkpt_print_recreate): Make
-	static.
-	(bkpt_breakpoint_ops, internal_breakpoint_ops)
-	(momentary_breakpoint_ops): Don't statically initialize.
-	(internal_bkpt_print_recreate, momentary_bkpt_print_recreate):
-	Delete.
-	(tracepoint_insert_location, tracepoint_remove_location)
-	(tracepoint_check_status, tracepoint_works_in_software_mode)
-	(tracepoint_print_it): Delete.
-	(tracepoint_breakpoint_ops): Don't statically initialize.
-	(initialize_breakpoint_ops): New.
-	(_initialize_breakpoint): Call it.
-	* breakpoint.h (null_re_set, null_works_in_software_mode)
-	(null_resources_needed, null_check_status, null_print_one_detail):
-	(bkpt_dtor, bkpt_allocate_location, bkpt_re_set)
-	(bkpt_insert_location, bkpt_remove_location, bkpt_breakpoint_hit)
-	(bkpt_check_status, bkpt_resources_needed)
-	(bkpt_works_in_software_mode, bkpt_print_it)
-	(null_print_one_detail, bkpt_print_mention, bkpt_print_recreate):
-	Delete declarations.
-	(initialize_breakpoint_ops): Declare.
-
-2011-07-25  Pedro Alves  <pedro at codesourcery.com>
-
-	* breakpoint.c (bkpt_print_it, internal_bkpt_print_it)
-	(momentary_bkpt_print_it): Simplify.
-
-2011-07-25  Pedro Alves  <pedro at codesourcery.com>
-
-	Split internal, momentary and user breakpoints breakpoint_ops
-	tables.
-
-	* breakpoint.c (internal_breakpoint_ops)
-	(momentary_breakpoint_ops): Forward declare.
-	(create_internal_breakpoint): Add new breakpoint_ops parameter.
-	Pass it down, rather than hardcoding bkpt_breakpoint_ops.
-	(create_overlay_event_breakpoint)
-	(create_std_terminate_master_breakpoint)
-	(create_exception_master_breakpoint): Create breakpoints with
-	internal_breakpoint_ops vtable.
-	(set_longjmp_breakpoint): Create momentary breakpoints with
-	momentary_breakpoint_ops vtable, using
-	momentary_breakpoint_from_master.
-	(create_thread_event_breakpoint, create_jit_event_breakpoint)
-	(create_solib_event_breakpoint): Create breakpoints with
-	internal_breakpoint_ops vtable.
-	(set_momentary_breakpoint): Create breakpoints with
-	momentary_breakpoint_ops vtable.
-	(momentary_breakpoint_from_master): New, factored out from
-	clone_momentary_breakpoint.
-	(clone_momentary_breakpoint): Adjust.
-	(watch_command_1): Create scope breakpoints with
-	momentary_breakpoint_ops vtable.
-	(bkpt_re_set): Remove handling of internal and momentary
-	breakpoints.
-	(bkpt_print_mention, bkpt_print_recreate): New.
-	(bkpt_breakpoint_ops): Adjust.
-	(internal_bkpt_re_set, internal_bkpt_check_status)
-	(internal_bkpt_print_it, internal_bkpt_print_mention)
-	(internal_bkpt_print_recreate, internal_breakpoint_ops): New.
-	(momentary_bkpt_re_set, momentary_bkpt_check_status)
-	(momentary_bkpt_print_it, momentary_bkpt_print_mention)
-	(momentary_bkpt_print_recreate): New.
-	(momentary_breakpoint_ops): New.
-
-2011-07-25  Pedro Alves  <pedro at codesourcery.com>
-
-	Implement most breakpoint_ops methods for all breakpoint types,
-	and move the default handlings to the proper callbacks.
-
-	* breakpoint.c (update_watchpoint): Always call the breakpoint's
-	works_in_software_mode method.
-	(insert_bp_location): Go through breakpoint_ops->insert_location
-	for software and hardware watchpoints.
-	(create_internal_breakpoint): Pass bkpt_breakpoint_ops as
-	breakpoint_ops.
-	(remove_breakpoint_1): Go through breakpoint_ops->remove_location
-	for software and hardware watchpoints.
-	(print_it_typical): Delete.
-	(print_bp_stop_message): Always call the breakpoint_ops->print_it
-	method.
-	(watchpoint_check): Adjust comment.
-	(bpstat_check_location): Simply always call the breakpoint's
-	breakpoint_hit method.
-	(bpstat_stop_status): Always call the breakpoint's check_status
-	method.  Remove special cases for watchpoints and internal event
-	breakpoints from here (moved to the check_status implementations).
-	(print_one_breakpoint_location): Assume b->ops is never NULL.
-	Remove static tracepoint marker id printing from here (moved to
-	the print_one_detail callback implementation of tracepoints).
-	(init_bp_location): Assert OPS is never NULL.
-	(allocate_bp_location): Always call the breakpoint's
-	allocate_location method, and remove the default code from here.
-	(free_bp_location): Always call the location's dtor method, and
-	remove the default code from here.
-	(init_raw_breakpoint_without_location): Assert OPS is never NULL.
-	(set_raw_breakpoint_without_location): Add new breakpoint_ops
-	parameter.  Pass it down.
-	(set_raw_breakpoint): Ditto.
-	(print_it_catch_fork): Adjust to take a bpstat as argument.
-	(catch_fork_breakpoint_ops): Install methods.
-	(print_it_catch_vfork): Adjust to take a bpstat as argument.
-	(catch_vfork_breakpoint_ops): Install methods.
-	(dtor_catch_syscall): Call the base dtor.
-	(print_it_catch_syscall): Adjust to take a bpstat as argument.
-	(catch_syscall_breakpoint_ops): Install methods.
-	(dtor_catch_exec): Call the base dtor.
-	(print_it_catch_exec): Adjust to take a bpstat as argument.
-	(catch_exec_breakpoint_ops): Install methods.
-	(hw_breakpoint_used_count, hw_watchpoint_used_count): Always call
-	the breakpoint's resources_needed method, and remove the default
-	code from here.
-	(set_momentary_breakpoint): Pass bkpt_breakpoint_ops as
-	breakpoint_ops.
-	(clone_momentary_breakpoint): Clone the original's ops.
-	(mention): Always call the breakpoint's print_mention method, and
-	remove the default code from here.
-	(create_breakpoint_sal): Adjust to pass the ops to
-	set_raw_breakpoint rather than setting it manually.
-	(create_breakpoint): Assert ops is never NULL.  Adjust to pass the
-	ops to set_raw_breakpoint_without_location rather than setting it
-	manually.
-	(break_command_1): Pass bkpt_breakpoint_ops as breakpoint_ops.
-	(print_it_ranged_breakpoint): Adjust to take a bpstat as argument.
-	(ranged_breakpoint_ops): Install methods.
-	(break_range_command): Adjust to pass the ops to
-	set_raw_breakpoint rather than setting it manually.
-	(re_set_watchpoint, breakpoint_hit_watchpoint)
-	(check_status_watchpoint, resources_needed_watchpoint)
-	(works_in_software_mode_watchpoint, print_it_watchpoint)
-	(print_mention_watchpoint, print_recreate_watchpoint): New
-	functions.
-	(watchpoint_breakpoint_ops): Install new methods.
-	(print_it_masked_watchpoint): New function.
-	(masked_watchpoint_breakpoint_ops): Install new methods.
-	(watch_command_1): Adjust to pass the right breakpoint_ops to
-	set_raw_breakpoint_without_location rather than setting it
-	manually later.  Record the current pspace.
-	(print_it_exception_catchpoint): Adjust to take a bpstat as
-	argument.
-	(gnu_v3_exception_catchpoint_ops): Install new methods.
-	(say_where): New function.
-	(null_re_set, null_check_status, null_works_in_software_mode)
-	(null_resources_needed, null_print_one_detail, bp_location_dtor):
-	New functions.
-	(bp_location_ops): New global.
-	(bkpt_dtor, bkpt_allocate_location, bkpt_re_set)
-	(bkpt_insert_location, bkpt_remove_location, bkpt_breakpoint_hit)
-	(bkpt_check_status, bkpt_resources_needed)
-	(bkpt_works_in_software_mode, bkpt_print_it, bkpt_print_mention)
-	(bkpt_print_recreate): New functions.
-	(bkpt_breakpoint_ops): New global.
-	(tracepoint_re_set, tracepoint_insert_location)
-	(tracepoint_remove_location, tracepoint_breakpoint_hit)
-	(tracepoint_check_status, tracepoint_works_in_software_mode)
-	(tracepoint_print_it, tracepoint_print_one_detail)
-	(tracepoint_print_mention, tracepoint_print_recreate): New
-	functions.
-	(tracepoint_breakpoint_ops): New global.
-	(delete_breakpoint): Always call the breakpoint's dtor method, and
-	remove the default handling from here.
-	(breakpoint_re_set_default): Make static.
-	(breakpoint_re_set_one): Always call the breakpoints re_set
-	method, and remove the default handling from here.
-	(trace_command, ftrace_command, strace_command)
-	(create_tracepoint_from_upload): Pass appropriate breakpoints_ops
-	to create_breakpoint.
-	(save_breakpoints): Always call the breakpoint's print_recreate
-	method, and remove the default handling from here.
-
-	* ada-lang.c (dtor_exception): Call the base dtor.
-	(re_set_exception): Call the base method.
-	(print_it_exception, print_it_catch_exception): Adjust to take a
-	bpstat as argument.
-	(catch_exception_breakpoint_ops): Install methods.
-	(print_it_catch_exception_unhandled): Adjust to take a bpstat as
-	argument.
-	(catch_exception_unhandled_breakpoint_ops): Install methods.
-	(print_it_catch_assert): Adjust to take a bpstat as argument.
-	(catch_assert_breakpoint_ops): Install methods.
-
-	* breakpoint.h (struct breakpoint_ops): Adjust the print_it method
-	to take a bpstat as argument.
-	(enum print_stop_action): Add describing comments to each enum
-	value.
-	(breakpoint_re_set_default): Delete declaration.
-	(null_re_set, null_works_in_software_mode, null_resources_needed)
-	(null_check_status, null_print_one_detail): Declare.
-	(bkpt_breakpoint_ops): Declare.
-	(bkpt_dtor, bkpt_allocate_location, bkpt_re_set)
-	(bkpt_insert_location, bkpt_remove_location, bkpt_breakpoint_hit)
-	(bkpt_check_status, bkpt_resources_needed)
-	(bkpt_works_in_software_mode, bkpt_print_it)
-	(null_print_one_detail, bkpt_print_mention, bkpt_print_recreate):
-	Declare.
-
-	* mi/mi-cmd-break.c (mi_cmd_break_insert): Adjust to pass
-	bkpt_breakpoint_ops.
-	* python/py-breakpoint.c (bppy_init): Ditto.
-
-2011-07-15  Philippe Waroquiers  <philippe.waroquiers at skynet.be>
-
-	* MAINTAINERS (Write After Approval): Add myself to the list.
+	* source.c (add_path): Remove always true conditional 'p == 0' and
+	unindent its code block.
+
+2012-04-17  Pedro Alves  <palves at redhat.com>
+
+	* gdbtypes.h (FIELD_BITPOS): Rename to ...
+	(FIELD_BITPOS_LVAL): ... this.
+	(FIELD_BITPOS): New.
+	(SET_FIELD_BITPOS): Adjust to use FIELD_BITPOS_LVAL.
+	* dwarf2read.c (dwarf2_add_field): Use SET_FIELD_BITPOS.
+	* gdbtypes.c (append_composite_type_field_aligned): Adjust to use
+	SET_FIELD_BITPOS.
+	* gnu-v3-abi.c (build_gdb_vtable_type): Adjust to use
+	SET_FIELD_BITPOS.
+	* stabsread.c (read_cpp_abbrev, read_one_struct_field)
+	(read_baseclasses): Adjust to use SET_FIELD_BITPOS.
+	* target-descriptions.c (tdesc_gdb_type): Adjust to use
+	SET_FIELD_BITPOS.
+
+2012-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Do not rely on FIELD_LOC_KIND_BITPOS being zero.
+	* ada-lang.c (ada_template_to_fixed_record_type_1): Replace
+	TYPE_FIELD_BITPOS used as lvalue by SET_FIELD_BITPOS.
+	* gdbtypes.c (append_flags_type_flag): Likewise, twice.
+	* jv-lang.c (java_link_class_type): Likewise, once.
+	* stabsread.c (read_enum_type): Likewise.
+
+2012-04-16  Yao Qi  <yao at codesourcery.com>
+
+	* common/agent.c (agent_run_command): Add one more parameter `len'.
+	Update callers.
+	* common/agent.h: Update declaration.
+	* linux-nat.c (linux_child_static_tracepoint_markers_by_strid):
+	Update.
+	(linux_child_static_tracepoint_markers_by_strid): Ditto.
 
-2011-07-23  Paul Pluzhnikov  <ppluzhnikov at google.com>
-
-	* elfread.c (elf_rel_plt_read): Fix off-by-one bug.
-
-2011-07-22  Pedro Alves  <pedro at codesourcery.com>
-
-	* i386-nat.c (I386_DR_VACANT, I386_DR_LOCAL_ENABLE)
-	(I386_DR_GLOBAL_ENABLE, I386_DR_DISABLE, I386_DR_SET_RW_LEN)
-	(I386_DR_GET_RW_LEN, I386_DR_WATCH_HIT): Add state parameter and
-	adjust.
-	(dr_mirror, dr_status_mirror, dr_control_mirror): Delete.
-	(struct i386_debug_reg_state): New.
-	(i386_init_dregs): New.
-	(dr_mirror): New.
-	(i386_cleanup_dregs): Use i386_init_dregs.
-	(i386_show_dr): Add state parameter and adjust.
-	(i386_insert_aligned_watchpoint): Ditto.  Don't pass the info to
-	the inferior here.
-	(i386_remove_aligned_watchpoint): Likewise.
-	(i386_handle_nonaligned_watchpoint): Add state parameter and adjust.
-	(i386_update_inferior_debug_regs): New.
-	(i386_insert_watchpoint): Work on a local mirror of the debug
-	registers, and only update the inferior on success.
-	(i386_remove_watchpoint): Ditto.
-	(i386_region_ok_for_watchpoint): Adjust.
-	(i386_stopped_data_address): Adjust.
-	(i386_insert_hw_breakpoint): Adjust.
-	(i386_remove_hw_breakpoint): Adjust.
-
-2011-07-22  Tom Tromey  <tromey at redhat.com>
-
-	* amd64-tdep.c (amd64_pseudo_register_read_value): Rename
-	from amd64_pseudo_register_read.  Change arguments.  Call
-	mark_value_bytes_unavailable when needed.
-	(amd64_init_abi): Use set_gdbarch_pseudo_register_read_value, not
-	set_gdbarch_pseudo_register_read.
-	* sentinel-frame.c (sentinel_frame_prev_register): Use
-	regcache_cooked_read_value.
-	* regcache.h (regcache_cooked_read_value): Declare.
-	* regcache.c (regcache_cooked_read_value): New function.
-	(regcache_cooked_read): Call
-	gdbarch_pseudo_register_read_value if available.
-	* i386-tdep.h (i386_pseudo_register_read_value): Declare.
-	(i386_pseudo_register_read): Remove.
-	* i386-tdep.c (i386_pseudo_register_read_into_value): Rename from
-	i386_pseudo_register_read.  Change arguments.  Call
-	mark_value_bytes_unavailable when needed.
-	(i386_pseudo_register_read_value): New function.
-	(i386_gdbarch_init): Call set_gdbarch_pseudo_register_read_value,
-	not set_gdbarch_pseudo_register_read.
-	* gdbarch.sh (pseudo_register_read_value): New method.
-	* gdbarch.c, gdbarch.h: Rebuild.
-	* findvar.c (value_from_register): Call get_frame_register_value.
-
-2011-07-22  Phil Muldoon  <pmuldoon at redhat.com>
-
-	* event-top.c (cli_command_loop): Use get_prompt, get_suffix,
-	get_prefix.
-	(display_gdb_prompt): Likewise.
-	(change_annotation_level): Likewise.
-	(push_prompt): Likewise.
-	(pop_prompt): Likewise.
-	(handle_stop_sig): Use get_prompt with a level.
-	* top.c (command_loop): Use get_prompt with a level.
-	(set_async_annotation_level): Use set_prompt with a level.
-	(get_prefix): New function.
-	(set_prefix): Ditto.
-	(set_suffix): Ditto.
-	(get_suffix): Ditto.
-	(get_prompt): Accept a level argument.
-	(set_prompt): Accept a level argument.  Free old prompts.  Set
-	new_async_prompt if level is 0.
-	(init_main): Use set_prompt with a level.  Do not set
-	new_async_prompt.
-	* event-top.h (PROMPT, SUFFIX, PREFIX): Move to top.c
-	* top.h: Declare set_suffix, get_suffix, set_prefix, get_prefix.
-	Modify set_prompt, get_prompt to account for levels.
-	* tui/tui-interp.c (tui_command_loop): Use get_prompt with a
-	level.
-	* python/python.c (before_prompt_hook): Use set_prompt.
-	
-2011-07-22  Kwok Cheung Yeung  <kcy at codesourcery.com>
-
-	* defs.h: Add guard against inclusion in gdbserver.
-	(struct ptid, ptid_t): Move to common/ptid.h.
-	(xfree, xzalloc, xasprintf, xvasprintf, xstrprintf, xstrvprintf,
-	xsnprintf, internal_error): Move to common/common-utils.h.
-	(nomem): Delete.
-	* gdb_assert.h: Move into common/ sub-directory.
-	* gdb_locale.h: Ditto.
-	* gdb_dirent.h: Ditto.
-	* inferior.h (minus_one_ptid, null_ptid, ptid_build, pid_to_ptid,
-	ptid_get_pid, ptid_get_lwp, ptid_get_tid, ptid_equal, ptid_is_pid):
-	Move into common/ptid.h.
-	* xml-support.c (xml_escape_text): Move into common/xml-utils.c.
-	(gdb_xml_create_parser_and_cleanup_1, xml_fetch_context_from_file):
-	Change nomem to malloc_failure.
-	* xml-support.h (xml_escape_text): Move into common/xml-utils.h.
-	* utils.c (nomem): Rename to malloc_failure.
-	(xmalloc, xzalloc, xrealloc, xcalloc, xfree, xstrprintf, xasprintf,
-	xvasprintf, xstrvprintf, xsnprintf): Move to common/common-utils.c.
-	(gdb_buildargv): Change nomem to malloc_failure.
-	* infrun.c (null_ptid, minus_one_ptid, ptid_build, pid_to_ptid,
-	ptid_get_pid, ptid_get_lwp, ptid_get_tid, ptid_equal,
-	ptid_is_pid): Move into common/ptid.c.
-	(initialize_infrun): Delete initialization of null_ptid and
-	minus_one_ptid.
-	* linux-nat.c (linux_nat_xfer_osdata): Defer to
-	linux_common_xfer_osdata.
-	* Makefile.in (SFILES): Add common/common-utils.c, common/xml-utils.c,
-	common/ptid.c and common/buffer.c.
-	(HFILES_NO_SRCDIR): Add common/common-utils.h, common/xml-utils.h,
-	common/ptid.h, common/buffer.h and common/linux-osdata.h.
-	(COMMON_OBS): Add xml-utils.o, common-utils.o, buffer.o and ptid.o.
-	(common-utils.o, xml-utils.o, ptid.o, buffer.o, linux-osdata.o): New
-	rules.
-	* common/gdb_assert.h: New.
-	* common/gdb_dirent.h: New.
-	* common/gdb_locale.h: New.
-	* common/buffer.c: New.
-	* common/buffer.h: New.
-	* common/ptid.c: New.
-	* common/ptid.h: New.
-	* common/xml-utils.c: New.
-	* common/xml-utils.h: New.
-	* common/common-utils.c: New.
-	* common/common-utils.h: New.
-	* common/linux-osdata.c: New.
-	* common/linux-osdata.h: New.
-	* config/alpha/alpha-linux.mh (NATDEPFILES): Add linux-osdata.o.
-	* config/arm/linux.mh (NATDEPFILES): Ditto.
-	* config/i386/linux.mh (NATDEPFILES): Ditto.
-	* config/i386/linux64.mh (NATDEPFILES): Ditto.
-	* config/ia64/linux.mh (NATDEPFILES): Ditto.
-	* config/m32r/linux.mh (NATDEPFILES): Ditto.
-	* config/m68k/linux.mh (NATDEPFILES): Ditto.
-	* config/mips/linux.mh (NATDEPFILES): Ditto.
-	* config/pa/linux.mh (NATDEPFILES): Ditto.
-	* config/powerpc/linux.mh (NATDEPFILES): Ditto.
-	* config/powerpc/ppc64-linux.mh (NATDEPFILES): Ditto.
-	* config/s390/s390.mh (NATDEPFILES): Ditto.
-	* config/sparc/linux.mh (NATDEPFILES): Ditto.
-	* config/sparc/linux64.mh (NATDEPFILES): Ditto.
-	* config/xtensa/linux.mh (NATDEPFILES): Ditto.
-
-2011-07-21  Matt Rice  <ratmice at gmail.com>
-
-	* NEWS: Add info macros and info definitions commands.
-
-2011-07-21  Phil Muldoon  <pmuldoon at redhat.com>
-
-	* NEWS: Document Python prompt substitution hook.
-
-2011-07-18  Matt Rice  <ratmice at gmail.com>
-
-	PR macros/12999
-	* macrotab.h (macro_callback_fn): Add new arguments to callback.
-	* macrotab.c (foreach_macro): Ditto.
-	(foreach_macro_in_scope): Ditto.
-	* macrocmd.c (print_macro_callback): New function.
-	(info_macro_command): Move some code to print_macro_definition.
-	(print_macro_definition): New function.
-	(print_one_macro): Add new arguments to callback.
-	(info_definitions_command): New function.
-	(info_macros_command): Ditto.
-	(_initialize_macrocmd): Add info macros and info definitions commands.
-	* symtab.c (add_macro_name): Add new arguments to callback.
-
-2011-07-21  Phil Muldoon  <pmuldoon at redhat.com>
-            Tom Tromey  <tromey at redhat.com>
-
-	* top.c (set_prompt): Rewrite to free previous prompt, free
-	asynch_new_prompt and set both on new prompts.
-	* event-top.c (display_gdb_prompt): Add prompt substitution
-	logic.
-	* python/python.c (before_prompt_hook): New function.
-
-2011-07-20  Matt Rice  <ratmice at gmail.com>
-
-	* bfin-tdep.c (bfin_extract_return_value): Fix swapped
-	arguments to store_unsigned_integer.
-
-2011-07-20  Tom Tromey  <tromey at redhat.com>
-
-	* dwarf2read.c (process_enumeration_scope): Do not call new_symbol
-	in some declaration-only cases.
-
-2011-07-18  Tom Tromey  <tromey at redhat.com>
-
-	PR symtab/12984:
-	* dwarf2read.c (dwarf2_section_info_def): New typedef.
-	(struct dwarf2_per_objfile) <types>: Change to a VEC.
-	(struct dwarf2_per_cu_data) <from_debug_types>: Remove.
-	<debug_type_section>: New field.
-	(dwarf2_locate_sections): Push .debug_types sections onto VEC.
-	(load_cu): Use appropriate section.
-	(create_signatured_type_table_from_index): Add 'section'
-	argument.
-	(dwarf2_read_index): Only allow a single .debug_types section.
-	(dw2_get_file_names): Use appropriate section.
-	(read_type_comp_unit_head): Add 'section' argument.
-	(create_debug_types_hash_table): Loop over all .debug_types
-	sections.
-	(init_cu_die_reader): Use appropriate section.
-	(process_psymtab_comp_unit, load_partial_comp_unit)
-	(load_full_comp_unit, read_die_and_children, find_partial_die)
-	(lookup_die_type, determine_prefix, follow_die_offset): Update.
-	(lookup_signatured_type_at_offset): Add 'section' argument.
-	(read_signatured_type_at_offset): Add 'sect' argument.
-	(read_signatured_type): Use appropriate section.
-	(set_die_type, get_die_type_at_offset): Update.
-	(dwarf2_per_objfile_free): Free all .debug_types sections, and
-	VEC.
-	(write_psymtabs_to_index): Don't allow index with more than one
-	.debug_types section.
-
-2011-07-19  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix crash if referenced CU is aged out.
-	* dwarf2loc.c (per_cu_dwarf_call): New variable back_to, use to for
-	xfree of block.data.
-	(indirect_pieced_value): New variable back_to, use to for xfree of
-	baton.data.
-	(dwarf2_compile_expr_to_ax): New variable back_to, use to for xfree of
-	block.data.
-	* dwarf2read.c (dwarf2_find_base_address): New prototype.
-	(load_cu): New function from ...
-	(dw2_do_instantiate_symtab): ... the code here ...
-	(process_full_comp_unit): ... and here.
-	(dwarf2_fetch_die_location_block): Call load_cu first.  Call xmemdup on
-	retval.data.
-
-2011-07-19  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* dwarf2loc.c (indirect_pieced_value): Use check_typedef for VALUE's
-	type.
-
-2011-07-19  Gary Benson  <gbenson at redhat.com>
-
-	* infrun.c (struct execution_control_state): New member
-	stop_func_filled_in.
-	(clear_stop_func, fill_in_stop_func): New functions.
-	(handle_inferior_event): Call clear_stop_func rather than
-	manipulating the execution control state directly.
-	Call fill_in_stop_func lazily as required rather than
-	directly calling find_pc_partial_function in all cases.
-
-2011-07-18  Tom Tromey  <tromey at redhat.com>
-
-	* dwarf2read.c (read_subrange_type): Use attr_form_is_block when
-	checking for variable-sized array.
-
-2011-07-18  Jean-Charles Delay  <delay at adacore.com>
-
-	* varobj.h (varobj_languages): Add vlang_ada definition to the list
-	of supported languages.
-	* varobj.c: Add top definitions and basic implementation of the
-	following callbacks: ada_number_of_children, ada_name_of_variable,
-	ada_name_of_child, ada_path_expr_of_child, ada_value_of_root,
-	ada_value_of_child, ada_type_of_child, ada_value_of_variable.
-	(languages): Register Ada-specific callbacks.
-	(variable_language): Add the Ada case in the language setter switch.
-
-2011-07-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* remote-mips.c (pmon_download): Fix ignored return value GCC warning.
-
-2011-07-15  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-04-14  Anton Gorenkov <xgsa at yandex.ru>
 
-	Code cleanup.
-	* dwarf2-frame.c (dwarf2_frame_ctx_funcs): New.
-	(execute_stack_op): Use dwarf2_frame_ctx_funcs
-	* dwarf2expr.c (dwarf_get_base_type): Access get_base_type via funcs.
-	(execute_stack_op): Access read_reg, get_frame_base, read_mem,
-	get_frame_cfa, get_tls_address and dwarf_call via funcs.
-	* dwarf2expr.h (struct dwarf_expr_context): New forward declaration.
-	(struct dwarf_expr_context_funcs): New, move here methods from ...
-	(struct dwarf_expr_context): ... here.  New fields funcs.
-	* dwarf2loc.c (dwarf_expr_dwarf_call): Access get_frame_pc via funcs.
-	(dwarf_expr_ctx_funcs): New.
-	(dwarf2_evaluate_loc_desc_full): Use dwarf_expr_ctx_funcs.
-	(needs_frame_dwarf_call): Access get_frame_pc via funcs.
-	(needs_frame_ctx_funcs): New.
-	(dwarf2_loc_desc_needs_frame): Use needs_frame_ctx_funcs.
-
-2011-07-15  Fawzi Mohamed  <fawzi.mohamed at nokia.com>
+	PR mi/13393
+	* value.c (value_actual_type): New function.
+	* value.h (value_actual_type): New declaration.
+	* varobj.c (update_type_if_necessary): New function.
+	(varobj_create): Call value_actual_type instead of
+	value_type.
+	(install_dynamic_child): distinct changed and type changed MI variable
+	objects.
+	(update_dynamic_varobj_children): Updated for install_dynamic_child
+	change.  All callers updated.
+	(varobj_update): Support for MI variable object type change if
+	the value changed and RTTI is used to determine the type.
+	(create_child_with_value): Call value_actual_type instead of
+	value_type.
+	(adjust_value_for_child_access): Extended with a new parameter which
+	specify whether the given value should be casted to enclosing type.
+	All callers updated.
 
-	* MAINTAINERS (Write After Approval): Add myself to the list.
+2012-04-14  Yao Qi  <yao at codesourcery.com>
 
-2011-07-15  Fawzi Mohamed  <fawzi.mohamed at nokia.com>
+	Import gnulib module inttypes from git
+	(250b80067c1e1d8faa0c42fb572f721975b929c5)
+	* Makefile.in (HFILES_NO_SRCDIR): Add gnulib/inttypes.in.h.
+	(aclocal_m4_deps): Add gnulib/m4/inttypes.m4 and
+	gnulib/m4/inttypes-pri.m4
+	* aclocal.m4, config.in, configure: Regenerated.
+	* gnulib/Makefile.am: Update.
+	* gnulib/Makefile.in: Update.
+	* gnulib/m4/gnulib-cache.m4: Update.
+	* gnulib/m4/gnulib-comp.m4: Update.
+	* gnulib/inttypes.in.h: New.
+	* gnulib/m4/inttypes-pri.m4: New.
+	* gnulib/m4/inttypes.m4: New.
 
-	* dwarf2-frame.c (decode_frame_entry, decode_frame_entry_1): Ensure
-	that CIE pointer of an FDE really points to a CIE .
+2012-04-13  Luis Machado  <lgustavo at codesourcery.com>
 
-2011-07-15  Hui Zhu  <teawater at gmail.com>
+	* infrun.c (resume): Update PC address to the real PC after
+	preparing to do displaced stepping.
 
-	* remote.c (remote_get_trace_status): Add comments.
+2012-04-12  Doug Evans  <dje at google.com>
 
-2011-07-14  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* dwarf2read.c (lookup_signatured_type): Remove arg "objfile", unused.
+	All callers updated.
 
-	Code cleanup - constify struct lval_funcs.
-	* dwarf2loc.c (pieced_value_funcs): Make it const.
-	* infrun.c (siginfo_value_funcs): Likewise.
-	* opencl-lang.c (opencl_value_funcs): Likewise.
-	* valops.c (value_assign, value_ind): Make the funcs variable const.
-	* value.c (struct value): Make location.computed.funcs target const.
-	Rearrange the comments.
-	(allocate_computed_value): Make the funcs parameter target const.
-	(value_computed_funcs): Return the funcs target const.
-	(value_free, value_copy, set_value_component_location): Make the funcs
-	variable const.
-	* value.h (allocate_computed_value): Make the funcs parameter target
-	const.
-	(value_computed_funcs): Return the funcs target const.
-	* windows-tdep.c (tlb_value_funcs): Make it const.
+2012-04-12  Mark Kettenis  <kettenis at gnu.org>
 
-2011-07-14  Hui Zhu  <teawater at gmail.com>
+	* i386bsd-nat.c (_initialize_i386bsd_nat): Add missing prototype.
 
-	* remote.c (remote_get_trace_status): Initialize p.
+2012-04-12  Doug Evans  <dje at google.com>
 
-2011-07-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* dwarf2read.c (create_all_type_units): Renamed from
+	create_debug_types_hash_table.  All callers updated.
 
-	Work around kgdb.
-	* remote.c (remote_get_trace_status): New variable ex.  Put
-	remote_get_noisy_reply into TRY_CATCH.  Call exception_fprintf for it.
+	* dwarf2read.c (create_signatured_type_table_from_index): Rename
+	local type_sig to sig_type, type_offset to type_offset_in_tu.
+	(hash_signatured_type): Renamed from hash_type_signature,
+	all callers updated.
+	(eq_signatured_type): Renamed from eq_type_signature,
+	all callers updated.
+	(create_debug_types_hash_table): Rename local type_sig to sig_type.
+	(process_enumeration_scope): Ditto.
+	(lookup_signatured_type_at_offset): Ditto.
+	(load_full_type_unit, read_signatured_type): Ditto.
 
-2011-07-13  Tom Tromey  <tromey at redhat.com>
+2012-04-12  Yao Qi  <yao at codesourcery.com>
 
-	* dwarf2expr.c (execute_stack_op) <DW_OP_GNU_regval_type>: Use
-	value_from_contents for final conversion.
+	* remote.c (async_remote_interrupt): Correct function name in
+	debug message.
+	(async_remote_interrupt_twice): Ditto.
 
-2011-07-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-04-11  Yuanhui Zhang  <asmwarrior at gmail.com>
 
-	Code cleanup.
-	* dwarf2loc.c (dwarf_expr_frame_base_1, dwarf2_evaluate_loc_desc_full):
-	Indent prototypes so they do not get into tags.
+	* source.c (find_and_open_source): Consistently pass resulting
+	full path through xfullpath.
 
-2011-07-12  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-04-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	Code cleanup making also optimized out values lazy.
-	* dwarf2loc.c (dwarf2_evaluate_loc_desc_full): Use
-	allocate_optimized_out_value.  Twice.
-	(loclist_read_variable)  Use allocate_optimized_out_value.  Once.
-	* findvar.c (read_var_value): Likewise.
-	* value.c (allocate_optimized_out_value): New function.
-	* value.h (allocate_optimized_out_value): New declaration.
+	Provide more specific displaced-stepping memory error message.
+	* infrun.c (displaced_step_prepare): New variable status.  Call
+	target_read_memory instead of read_memory, provide more specific
+	error message.
 
-2011-07-12  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-04-11  Tristan Gingold  <gingold at adacore.com>
 
-	Fix occasional crash of CTRL-C during DWARF read in.
-	* dwarf2read.c (dwarf2_mark_helper): Return on NULL CU.
+	PR gdb/13901
+	* darwin-nat.c (darwin_execvp): Revert previous patch.
 
-2011-07-11  Tom Tromey  <tromey at redhat.com>
+2012-04-11  Tristan Gingold  <gingold at adacore.com>
 
-	* regcache.c (struct regcache_descr): Fix typo.
-	* i387-tdep.c (i387_supply_xsave): Fix typo.
+	PR gdb/13901
+	* darwin-nat.c (darwin_resume_thread): Call darwin_set_sstep only
+	in case of change.
 
-2011-07-11  Tom Tromey  <tromey at redhat.com>
+2012-04-11  Tristan Gingold  <gingold at adacore.com>
 
-	* dwarf2read.c (handle_DW_AT_stmt_list): New function.
-	(read_file_scope, read_type_unit_scope): Use it.
+	* i386-darwin-nat.c (i386_darwin_fetch_inferior_registers): Fix
+	warning.
 
-2011-07-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-04-11  Siva Chandra Reddy  <sivachandra at google.com>
 
-	* dwarf2expr.c (read_sleb128): Fix signed extension overflowing host
-	`int'.
+	New command 'explore' which helps explore values and types in
+	scope.
+	* NEWS: Add an entry about the new 'explore' command.
+	* data-directory/Makefile.in: Add gdb/command/explore.py
+	* python/lib/gdb/command/explore.py: Implemention of the 'explore'
+	command using the GDB Python API.
 
-2011-07-11  Phil Muldoon  <pmuldoon at redhat.com>
+2012-04-10  Maciej W. Rozycki  <macro at codesourcery.com>
 
-        PR python/12438
-	* python/python.c: Set gdbpy_should_print_stack default to off.
-	(set_python): Deprecate maint set python print-stack to
-	class_deprecate.
-	(_initialize_python): Deprecate maint set/show python print-stack.
-	Add new prefix command, python.  Add new setting, print-backtrace.
-	* NEWS: Document set python print-stack.  Document default change.
+	* mips-tdep.c (mips_skip_pic_trampoline_code): Correct sign
+	extension in jump target calculation.
 
-2011-07-11  Phil Muldoon  <pmuldoon at redhat.com>
+2012-04-10  Maciej W. Rozycki  <macro at codesourcery.com>
 
-	* python/py-inferior.c (infpy_dealloc): New function.
-        (inferior_to_inferior_object): Return a new object, or a
-	new reference to the existing object.
-        (find_thread_object): Cleanup references to inferior.
-        (delete_thread_object): Ditto.
-        * python/py-infthread.c (create_thread_object): Do not increment
-	inferior reference count.
+	* mips-tdep.c (mips32_next_pc): Handle JALX.
 
-2011-07-08  Tom Tromey  <tromey at redhat.com>
+2012-04-10  Yao Qi  <yao at codesourcery.com>
 
-	* dwarf2loc.c (locexpr_regname): New function.
-	(locexpr_describe_location_piece): Use it.
-	(disassemble_dwarf_expression): Add per_cu argument.  Use
-	locexpr_regname.
-	<DW_OP_GNU_deref_type, DW_OP_GNU_const_type,
-	DW_OP_GNU_regval_type, DW_OP_GNU_convert, DW_OP_GNU_reinterpret>:
-	New cases.
-	(locexpr_describe_location_1): Add per_cu argument.
-	(locexpr_describe_location): Update.
-	(loclist_describe_location): Update.
+	* Makefile.in (gnulib/Makefile): Remove duplicated dependency.
 
-2011-07-08  Tom Tromey  <tromey at redhat.com>
+2012-04-10  Yao Qi  <yao at codesourcery.com>
 
-	* dwarf2expr.c (execute_stack_op): Add QUIT.
+	* Makefile.in (aclocal_m4_deps): Add gnulib/m4/gnulib-cache.m4
+	and gnulib/m4/gnulib-tool.m4.
 
-2011-07-07  Hui Zhu  <teawater at gmail.com>
+2012-04-10  Doug Evans  <dje at google.com>
 
-	Revert:
-	2011-07-06  Hui Zhu  <teawater at gmail.com>
-	* remote.c (remote_start_remote): Add TRY_CATCH for
-	remote_get_trace_status.
-	* tracepoint.c (disconnect_tracing): Ditto.
+	* dwarf2read.c (dwarf2_per_cu_data). Clarify comment.
+	(load_partial_dies): Clarify comment.
+	(find_partial_die): Support rereading type units.
+	Clarify CU handling, if we know offset is in CU, don't search for the
+	containing CU.  Add comment regarding memory waste.
+
+2012-04-10  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* features/Makefile (WHICH): Add i386/x32, i386/x32-linux,
+	i386/x32-avx and i386/x32-avx-linux.
+	(i386/x32-expedite): New.
+	(i386/x32-linux-expedite): Likewise.
+	(i386/x32-avx-expedite): Likewise.
+	(i386/x32-avx-linux-expedite): Likewise.
+	($(outdir)/i386/x32.dat): Likewise.
+	($(outdir)/i386/x32-linux.dat): Likewise.
+	($(outdir)/i386/x32-avx.dat): Likewise.
+	($(outdir)/i386/x32-avx-linux.dat): Likewise.
+
+	* features/i386/x32-avx-linux.xml: New file.
+	* features/i386/x32-avx.xml: Likewise.
+	* features/i386/x32-core.xml: Likewise.
+	* features/i386/x32-linux.xml: Likewise.
+	* features/i386/x32.xml: Likewise.
+
+	* features/i386/x32-avx-linux.c: New.  Generated.
+	* features/i386/x32-avx.c: Likewise.
+	* features/i386/x32-linux.c: Likewise.
+	* features/i386/x32.c: Likewise.
+	* regformats/i386/x32-avx-linux.dat: Likewise.
+	* regformats/i386/x32-avx.dat: Likewise.
+	* regformats/i386/x32-linux.dat: Likewise.
+	* regformats/i386/x32.dat: Likewise.
+
+2012-04-10  Tristan Gingold  <gingold at adacore.com>
+
+	* darwin-nat.c (darwin_kill_inferior): Always use the no ptrace
+	code to kill the inferior.
+
+2012-04-09  Mark Kettenis  <kettenis at gnu.org>
+
+	* ada-exp.y (yyss, yysslim, yyssp, yystacksize, yyvs, yyvsp): New
+	defines.
+	* c-exp.y (yyss, yysslim, yyssp, yystacksize, yyvs, yyvsp): New
+	defines.
+	* cp-name-parser.y (yyss, yysslim, yyssp, yystacksize, yyvs)
+	(yyvsp): New defines.
+	* f-exp.y (yyss, yysslim, yyssp, yystacksize, yyvs, yyvsp): New
+	defines.
+	* jv-exp.y (yyss, yysslim, yyssp, yystacksize, yyvs, yyvsp): New
+	defines.
+	* m2-exp.y (yyss, yysslim, yyssp, yystacksize, yyvs, yyvsp): New
+	defines.
+	* objc-exp.y (yyss, yysslim, yyssp, yystacksize, yyvs, yyvsp): New
+	defines.
+	* p-exp.y (yyss, yysslim, yyssp, yystacksize, yyvs, yyvsp): New
+	defines.
+
+2012-04-09  Mark Kettenis  <kettenis at gnu.org>
+
+	* sparc64-tdep.c (sparc64_store_arguments)
+	(sparc64_store_arguments): Fix coding style.
+
+2012-04-07  Mark Kettenis  <kettenis at gnu.org>
+
+	* sparc64-tdep.c (sparc64_store_arguments): Fix handling of
+	complex floats, adjust some related comments and tighten a related
+	assertion.
+	(sparc64_extract_return_value): Handle complex floats.
+
+2012-04-07  Doug Evans  <dje at google.com>
+
+	* dwarf2read.c (load_partial_dies): Change condition to assert.
+
+2012-04-06  Doug Evans  <dje at google.com>
+
+	* amd64-tdep.c (amd64_analyze_prologue): Recognize both variations of
+	"mov %rsp,%rbp".
+
+2012-04-05  Kevin Buettner  <kevinb at redhat.com>
+
+	* v850-tdep.c (E_NUM_OF_V850_REGS, E_NUM_OF_V850E_REGS): Fix
+	fencepost error.
+	(v850_frame_cache): Use gdbarch_num_regs() instead of E_NUM_REGS.
+	(v850_gdbarch_init): Set `num_regs' as appropriate for the
+	architecture.
+
+2012-04-05  Keith Seitz  <keiths at redhat.com>
+
+	* linespec.c (decode_compound): Remove.
+	(enum offset_relative_sign): New enum.
+	(struct line_offset): New struct.
+	(struct linespec): New struct.
+	(struct linespec_state): Move file_symtabs,
+	user_filename, and user_function into struct linespec.
+	Make result an anonymous struct holding vectors of
+	symbolp and minsym_and_objfile_d.
+	Add language member.
+	(enum ls_token_type): New enum.
+	(linespec_keywords): New array.
+	(struct ls_token): New struct.
+	(struct ls_parser): New struct.
+	(linespec_lexer_lex_number): New function.
+	(linespec_lexer_lex_keyword): New function.
+	(is_ada_operator): New function.
+	(skip_quote_char): New function.
+	(copy_token_string): New function.
+	(is_closing_quote_enclosed): New function.
+	(find_parameter_list_end): New function.
+	(linespec_lexer_lex_string): New function.
+	(linespec_lexer_lex_one): New function.
+	(linespec_lexer_consume_token): New function.
+	(linespec_lexer_peek_token): New function.
+	(cplusplus_error): Remove unused function.
+	(find_methods): Update comment.
+	(find_toplevel_char): Return const.
+	(is_objc_method_format): Remove unused function.
+	(find_toplevel_string): New function.
+	(is_linespec_boundary): Remove.
+	(symbol_not_found_error): New function.
+	(find_method_overload_end): Remove function.
+	(unexpected_linespec_error): New function.
+	(keep_name_info): Remove.
+	(linespec_parse_line_offset): New function.
+	(linespec_parse_basic): New function.
+	(canonicalize_linespec): New function.
+	(decode_line_internal): Remove.
+	(create_sals_line_offset): New function adapted from
+	decode_all_digits.
+	(convert_linespec_to_sals): New function.
+	(parse_linespec): New function.
+	(linespec_parser_new): New function.
+	(linespec_state_destructor): Change parameter type to
+	struct linespec_state *.
+	Add language parameter.
+	Remove freeing of moved members.
+	(linespec_parser_delete): New function.
+	(decode_line_full): Use parse_linespec and linespec_parser_new.
+	(decode_line_1): Likewise.
+	(decode_indirect): Rename to ...
+	(linespec_expression_to_pc): ... this and rewrite
+	to simply find CORE_ADDR, storing this result for later
+	conversion to SALs.
+	(locate_first_half): Remove.
+	(deocde_objc): Add parameter LS.
+	Initialize new struct collect_info members.
+	Handle minimal symbols, too.
+	(decode_compound): Delete.
+	(lookup_prefix_sym): Rewrite.
+	(compare_msymbols): New function.
+	(find_method): Rewrite.
+	Do not call cplusplus_error.
+	(symtabs_from_filename): Rewrite.
+	(collect_function_symbols): Delete.
+	(find_function_symbols): Rewrite without ARGPTR-style
+	processing.
+	(decode_all_digits): Delete. (Rewritten as create_sals_line_offset.)
+	(decode_dollar): Adapted and renamed to ...
+	(linespec_parse_variable): ... this.
+	(find_linespec_symbols): New function.
+	(decode_label): Adapted and renamed to ...
+	(find_label_symbols): ... this.
+	(decode_digits_list_mode): Add and use LS argument.
+	(decode_digits_ordinary): Likewise.
+	(collect_symbols): Do not collect SALs, just symbols and msymbols.
+	If in list mode, allow any symbol class.  Otherwise, only
+	permit LOC_BLOCK symbols.
+	(minsym_found): Update comments.
+	(search_minsyms_for_name): Do not convert the matching symbol
+	into a SAL.  Simply push the symbol and objfile into the
+	result vector.
+	(decode_variable): Delete. Contents adapted into
+	find_linespec_symbols.
 
-2011-07-07  Andrew Burgess  <aburgess at broadcom.com>
+	* cp-support.c (SKIP_SPACE): Remove.
+	(operator_tokens): Remove unused global.
+	(cp_validate_operator): Remove.
+	* cp-support.h (cp_validate_operator): Remove declaration.
+
+2012-04-03  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* cli/cli-setshow.c (do_setshow_command): Display var_zinteger
-	variables as signed, not unsigned.
+	* cp-valprint.c (cp_print_value_fields): Check valprint_check_validity
+	for TYPE_VPTR_FIELDNO.
+	* valprint.c (valprint_check_validity): Make it global, move the
+	function comment ...
+	* value.h (valprint_check_validity): ... to this new declaration.
 
-2011-07-06  Joel Brobecker  <brobecker at adacore.com>
+2012-04-02  Tristan Gingold  <gingold at adacore.com>
 
-	* jit.c (jit_inferior_init): Reformat forward declaration.
+	* i386-darwin-nat.c (i386_darwin_fetch_inferior_registers): Use
+	the STATE32 api for i386 state.
+	(i386_darwin_store_inferior_registers): Likewise.
 
-2011-07-06  Matt Rice  <ratmice at gmail.com>
+2012-04-02  Tristan Gingold  <gingold at adacore.com>
 
-	* MAINTAINERS (Write After Approval): Add myself to the list.
+	* i386-darwin-tdep.c (i386_darwin_thread_state_reg_offset): Fix
+	SS offset.
+	* i386-darwin-nat.c (i386_darwin_fetch_inferior_registers): Fix
+	format_string.
 
-2011-07-06  Hui Zhu  <teawater at gmail.com>
+2012-04-02  Tristan Gingold  <gingold at adacore.com>
 
-	* remote.c (remote_start_remote): Add TRY_CATCH for
-	remote_get_trace_status.
-	* tracepoint.c (disconnect_tracing): Ditto.
+	PR gdb/13901
+	* darwin-nat.c (darwin_execvp): Set binary preference.
 
-2011-07-05  Tom Tromey  <tromey at redhat.com>
+2012-04-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* symtab.c (operator_chars): Now static.
-	* linespec.c (operator_chars): Don't declare.
+	* NEWS (set breakpoint condition-evaluation): Use imperative mood.
 
-2011-07-05  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+2012-03-30  Tom Tromey  <tromey at redhat.com>
 
-	* ui-out.h (ui_out_field_core_addr): Fix typo in comment.
+	* python/python.c (gdbpy_decode_line): Move cleanup creation out
+	of TRY_CATCH.  Fix error handling.
+	* python/py-value.c (convert_value_from_python): Move 'old'
+	declaration to innermost scope.
 
-2011-07-05  Tom Tromey  <tromey at redhat.com>
+2012-03-29  Joel Brobecker  <brobecker at adacore.com>
+	    Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	-Wshadow warning fix.
+	* ada-lang.c (ada_make_symbol_completion_list): Rename parameters
+	"wild_match" and "encoded" into "wild_match_p" and "encoded_p".
+	Adjust code accordingly.
 
-	* gnu-v3-abi.c (gnuv3_rtti_type): Check TYPE_CPLUS_REALLY_JAVA.
-	* gdbtypes.h (struct cplus_struct_type) <is_java>: New field.
-	(TYPE_CPLUS_REALLY_JAVA): New macro.
-	* dwarf2read.c (process_structure_scope): Set
-	TYPE_CPLUS_REALLY_JAVA.
+2012-03-29  Joel Brobecker  <brobecker at adacore.com>
 
-2011-07-05  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+	* ada-lang.c (symbol_completion_add): Rename parameter
+	"encoded" into "encoded_p".  Ajust code and documentation
+	accordingly.
 
-	* ada-lang.c: Fix typos.
-	* amd64-tdep.c: Likewise.
-	* breakpoint.c: Likewise.
-	* cli/cli-decode.c: Likewise.
-	* findcmd.c: Likewise.
-	* inline-frame.c: Likewise.
-	* mi/mi-main.c: Likewise.
-	* minsyms.c: Likewise.
-	* monitor.c: Likewise.
-	* monitor.h: Likewise.
-	* prologue-value.c: Likewise.
-	* reverse.c: Likewise.
-	* s390-tdep.c: Likewise.
+2012-03-29  Joel Brobecker  <brobecker at adacore.com>
+	    Andrey Smirnov  <andrew.smirnov at gmail.com>
 
-2011-07-06  Paul Pluzhnikov  <ppluzhnikov at google.com>
+	-Wshadow warning fix.
+	* ada-lang.c (symbol_completion_add): Rename parameter
+	"wild_match" into wild_match_p.  Update code and documentation
+	accordingly.
 
-	* jit.c (jit_inferior_init): Forward declare.
-	(jit_breakpoint_re_set_internal): Call jit_inferior_init.
+2012-03-29  Joel Brobecker  <brobecker at adacore.com>
 
-2011-07-04  Joel Brobecker  <brobecker at adacore.com>
+	* ada-lang.c (symbol_completion_match): Rename parameter
+	"encoded" into "encoded_p".  Ajust code and documentation
+	accordingly.
 
-        * osabi.c (generic_elf_osabi_sniffer): Minor comment reformatting.
+2012-03-29  Joel Brobecker  <brobecker at adacore.com>
+	    Andrey Smirnov  <andrew.smirnov at gmail.com>
 
-2011-07-04  Tristan Gingold  <gingold at adacore.com>
+	-Wshadow warning fix.
+	* ada-lang.c (symbol_completion_match): Rename parameter
+	"wild_match" into "wild_match_p".  Adjust code and function
+	documentation accordingly.
 
-	* ada-tasks.c (KNOWN_TASKS_LIST): New macro.
-	(tcb_fieldno): Add activation_link field.
-	(get_known_tasks_addr): Moved and rewritten.
-	(get_tcb_types_info): Set activation_link field.
-	(read_known_tasks_array): Add parameter.  Rewritten.
-	(read_known_tasks_list): New function.
-	(read_known_tasks): New function.
-	(ada_build_task_list): Call read_known_tasks instead of
-	read_known_tasks_array.
-	* ravenscar-thread.c: Add first_task_name constant.
-	(has_ravenscar_runtime): Check for task list too.
+2012-03-29  Joel Brobecker  <brobecker at adacore.com>
+	    Andrey Smirnov  <andrew.smirnov at gmail.com>
 
-2011-07-04  Tristan Gingold  <gingold at adacore.com>
+	-Wshadow warning fix.
+	* ada-lang.c (ada_lookup_encoded_symbol): Rename parameter
+	"symbol_info" into "info".  Adjust code accordingly.
+	(ada_lookup_symbol): Likewise.
 
-	* ada-tasks.c: Renames fieldno to actb_fieldno.
-	(ada_get_task_number): Indentation.
-	(get_tcb_types_info): Remove all parameters.  Write directly
-	the globals.
-	(ptid_from_atcb_common): Adjust.
-	(read_atcb): Adjust.
+2012-03-29  Joel Brobecker  <brobecker at adacore.com>
 
-2011-07-04  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+	* ada-lang.c (ada_lookup_symbol_list): Minor reformatting
+	of this function's documentation.
 
-	* symtab.c (in_prologue): Remove mention of ppc's refine_prologue_limit.
+2012-03-29  Joel Brobecker  <brobecker at adacore.com>
+	    Andrey Smirnov  <andrew.smirnov at gmail.com>
 
-2011-07-04  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+	-Wshadow warning fix.
+	* ada-lang.c (ada_lookup_symbol_list): Rename "wild_match"
+	variable into "wild_match_p".  Adjust code accordingly.
 
-	* ui-out.c (ui_out_field_core_addr): Mention that the function
-	description is in the header file.
-	* ui-out.h (ui_out_field_core_addr): Document function.
+2012-03-29  Joel Brobecker  <brobecker at adacore.com>
+	    Andrey Smirnov  <andrew.smirnov at gmail.com>
 
-2011-07-04  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+	-Wshadow warning fix.
+	* ada-lang.c (ada_add_local_symbols): Rename "wild_match"
+	parameter into "wild_match_p".  Adjust code accordingly.
+	Document this parameter in the function description.
 
-	* ui-out.c (ui_out_get_field_separator): Remove unused function.
-	* ui-out.h (ui_out_get_field_separator): Remove prototype.
+2012-03-29  Joel Brobecker  <brobecker at adacore.com>
+	    Andrey Smirnov  <andrew.smirnov at gmail.com>
 
-2011-07-04  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+	-Wshadow warning fix.
+	* ada-lang.c (add_symbols_from_enclosing_procs): Rename
+	"wild_match" parameter to "wild_match_p" (-Wshadow).
 
-	* symtab.c (expand_line_sal): Remove empty line.
+2012-03-29  Joel Brobecker  <brobecker at adacore.com>
 
-2011-07-04  Thomas Schwinge  <thomas at schwinge.name>
+	* ada-lang.c (ada_lookup_simple_minsym): Remove trailing spaces
+	in function documentation.
 
-	* osabi.c (generic_elf_osabi_sniffer) <ELFOSABI_GNU>: Handle in the
-	same way as ELFOSABI_NONE.
-	<ELFOSABI_LINUX, ELFOSABI_HURD>: Remove cases.
+2012-03-29  Joel Brobecker  <brobecker at adacore.com>
+	    Andrey Smirnov  <andrew.smirnov at gmail.com>
 
-2011-07-04  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+	-Wshadow warning fix.
+	* ada-lang.c (ada_lookup_simple_minsym): Rename wild_match local
+	variable into wild_match_p.  Adjust code accordingly.
 
-	* breakpoint.c: Fix typos in comments.
-	* linespec.c: Likewise.
-	* symtab.c: Likewise.
+2012-03-29  Joel Brobecker  <brobecker at adacore.com>
+	    Andrey Smirnov  <andrew.smirnov at gmail.com>
 
-2011-07-04  Joel Brobecker  <brobecker at adacore.com>
+	* ada-valprint.c (ada_val_print_1): Move the code handling
+	TYPE_CODE_ENUM inside its own lexical block.  Declare
+	variables len and val there, instead of in the function's
+	top level block.  Avoid declaring deref_val again in a way
+	that shadows another variable of the same name declared
+	in one of the up-level blocks.  Just re-use the up-level
+	variable instead.
 
-	* dwarf2-frame.c (dwarf2_build_frame_info): Do not load .eh_frame
-	section in separate object files.
+2012-03-29  Joel Brobecker  <brobecker at adacore.com>
 
-2011-07-04  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* ada-lang.c (ada_lookup_encoded_symbol): Now returns void.
+	Replace block_found argument by symbol_info.  Adjust
+	implementation accordingly.  Add function documentation.
+	(ada_lookup_symbol): Adjust to new ada_lookup_encoded_symbol.
+	Fix documentation.
+	* ada-lang.h (ada_lookup_encoded_symbol): Update declaration.
+	* ada-exp.y (write_object_renaming): Adjust to new
+	ada_lookup_encoded_symbol API.
 
-	Fix false GCC warning.
-	* linespec.c (decode_line_1): Initialize values.
+2012-03-29  Joel Brobecker  <brobecker at adacore.com>
 
-2011-07-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* ada-lang.h (struct ada_symbol_info): Reformat.  Improve
+	documentation.
 
-	* linespec.c (find_method): Accept the function type automatically only
-	if it was specified with parameter types.
+2012-03-28  Rathish C  <rathish.c at kpitcummins.com>
 
-2011-07-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* v850-tdep.c: Add the enum values for mpu and fpu registers.
+	(v850_register_name): Add the mpu and fpu register names.
+	(v850e_register_name): Add the mpu and fpu register names.
+	(v850e2_register_name): New function.
+	(v850_gdbarch_init): Add case for bfd_mach_v850e2 and
+	bfd_mach_v850e2v3.
 
-	Stop on first linespec terminator instead of eating what we can.
-	* linespec.c (is_linespec_boundary): New function.
-	(name_end): Remove function.
-	(keep_name_info): New parameter on_boundary, replace the body.
-	(decode_line_1): Provide the parameter to keep_name_info.
-	(decode_compound): Likewise.  Drop the trailing java return type
-	handling.  Twice.
+2012-03-28  Joel Brobecker  <brobecker at adacore.com>
 
-2011-07-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* NEWS: Add entry for Ada varobj support.
 
-	Fall back linespec to minimal symbols.
-	* linespec.c (decode_line_1): New variable ex, saved_argptr.  Protect
-	decode_compound by TRY_CATCH, fall back on minsyms if it failed.
-	(find_method, symbol_found): Change error to cplusplus_error.
+2012-03-28  Joel Brobecker  <brobecker at adacore.com>
 
-2011-07-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* varobj.c (default_value_is_changeable_p): New function,
+	extracted from varobj_value_is_changeable_p.  Add declaration.
+	(ada_value_is_changeable_p): New function, extracted from
+	varobj_value_is_changeable_p.  Add declaration.
+	(struct language_specific): New field "value_is_changeable_p".
+	(languages): Add entries for new field.
+	(varobj_create): Set language before calling install_new_value.
+	(varobj_value_is_changeable_p): Reimplement to call the varobj's
+	"value_is_changeable_p" language callback.
 
-	* symtab.c (symbol_find_demangled_name): Remove DMGL_VERBOSE.
+2012-03-28  Joel Brobecker  <brobecker at adacore.com>
 
-2011-07-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
-	    Tom Tromey  <tromey at redhat.com>
+	* ada-varobj.h, ada-varobj.c: New files.
+	* Makefile.in (SFILES): Add ada-varobj.c.
+	(HFILES_NO_SRCDIR): Add ada-varobj.h.
+	(COMMON_OBS): Add ada-varobj.o.
 
-	* dwarf2read.c (check_physname): New variable.
-	(dwarf2_physname): Prefer DW_AT_linkage_name over dwarf2_compute_name.
-	(show_check_physname): New function.
-	(_initialize_dwarf2_read): Add `check-physname' for check_physname.
+2012-03-28  Joel Brobecker  <brobecker at adacore.com>
 
-2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+	* varobj.c (ada_value_has_mutated): Add declaration.  New function.
+	(struct language_specific): New field "value_has_mutated".
+	(languages): Set field "value_has_mutated" in each entry of array.
+	(varobj_value_has_mutated): New function.
+	(varobj_udpdate): Add handling of type mutation.
+	(value_of_root): Add handling of type mutation.
+	(ada_value_has_mutated): New function.
 
-	* machoread.c (macho_symfile_read): Delete OBE comment.
+2012-03-28  Pedro Alves  <palves at redhat.com>
 
-2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+	* ia64-linux-nat.c (supply_fpregset, ia64_linux_fetch_register):
+	Always supply $fr0 as 0.0 and $fr1 as 1.0.
 
-	* machoread.c (struct macho_oso_data): Delete.
-	(current_oso): Delete.
-	(macho_relocate_common_syms): New function, mostly extracted
-	out of
-	(macho_add_oso_symfile): Call macho_relocate_common_syms.
-	Remove code that sets and unset current_oso.
-	(macho_symfile_relocate): Delete handling of common symbols,
-	now moved to macho_relocate_common_syms.
+2012-03-28  Tom Tromey  <tromey at redhat.com>
 
-2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+	* python/py-inferior.c (infpy_read_memory): Remove cleanups and
+	explicitly free 'buffer' on exit paths.  Decref 'membuf_object'
+	before returning.
 
-	* darwin-nat.c (darwin_ptrace): Add documentation.
-	Set errno to zero before calling ptrace.  If ptrace returns
-	-1 and errno is zero, then change then return zero.
-	(darwin_kill_inferior): Issue a warning instead of triggering
-	a failed assertion when the PT_KILL ptrace operations returned
-	nonzero.
+2012-03-28  Tom Tromey  <tromey at redhat.com>
 
-2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+	* .dir-locals.el: New file.
 
-	* darwin-nat.c (darwin_detach): Call darwin_resume_inferior
-	only when inf->private->no_ptrace.
+2012-03-28  Pedro Alves  <palves at redhat.com>
 
-2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+	* ia64-linux-nat.c (u_offsets): Map IA64_EC_REGNUM to PT_AR_EC.
 
-	* ada-lang.c (print_it_exception): Print temporary catchpoints
-	as "Temporary catchpoint".
-	(print_mention_exception): Likewise.
+2012-03-28  Joel Brobecker  <brobecker at adacore.com>
 
-2011-07-01  Tom Tromey  <tromey at redhat.com>
+	* ia64-linux-nat.c (ia64_linux_fetch_register): Add special
+	handling for r0.
 
-	* jv-lang.c (java_language_defn): Use java_printchar,
-	java_printstr.
-	(java_get_encoding): New function.
-	(java_emit_char): Use generic_emit_char.
-	(java_printchar): New function.
-	(java_printstr): Likewise.
+2012-03-27  Pedro Alves  <palves at redhat.com>
 
-2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+	Eliminate struct ui_stream.
 
-	* ada-typeprint.c (print_record_type): If unable to decode
-	the name of the parent type, use the encoded name.
+	* ui-out.h (struct ui_stream): Delete.
+	(ui_out_field_stream): Adjust prototype.
+	(ui_out_stream_new, ui_out_stream_delete)
+	(make_cleanup_ui_out_stream_delete): Delete declarations.
+	* ui-out.c (ui_out_field_stream): Change prototype to take a
+	ui_file instead of a ui_stream.  Adjust.
+	(ui_out_stream_new, ui_out_stream_delete, do_stream_delete)
+	(make_cleanup_ui_out_stream_delete): Delete.
+	* breakpoint.c (print_breakpoint_location)
+	(print_one_detail_ranged_breakpoint, print_it_watchpoint): Use
+	ui_file/mem_fileopen instead of ui_stream/ui_out_stream_new.
+	* disasm.c (dump_insns): Ditto.
+	(do_mixed_source_and_assembly, do_assembly_only): Adjust
+	prototype.
+	(gdb_disassembly): Use ui_file/mem_fileopen instead of
+	ui_stream/ui_out_stream_new.
+	* infcmd.c (print_return_value): Ditto.
+	* osdata.c (info_osdata_command): Don't allocate a local
+	ui_stream.
+	* stack.c (print_frame_arg, print_frame_args, print_frame): Use
+	ui_file/mem_fileopen instead of ui_stream/ui_out_stream_new.
+	* tracepoint.c (print_one_static_tracepoint_marker): Don't
+	allocate a local ui_stream.
+	* mi/mi-cmd-stack.c (list_arg_or_local): Use ui_file/mem_fileopen
+	instead of ui_stream/ui_out_stream_new.
+	(list_args_or_locals): Don't allocate a local ui_stream.
+	* mi/mi-main.c (get_register, mi_cmd_data_evaluate_expression)
+	(mi_cmd_data_read_memory): Use ui_file/mem_fileopen instead of
+	ui_stream/ui_out_stream_new.
+	* cli/cli-setshow.c (do_setshow_command): Ditto.
+
+2012-03-27  Oza Pawandeep  <oza.pawandeep at gmail.com>
+
+	* arm-linux-tdep.c (arm_linux_init_abi): Call
+	set_gdbarch_process_record.  Initialize `arm_swi_record' field.
+	* arm-tdep.c (arm_process_record): New function.
+	(deallocate_reg_mem): New function.
+	(decode_insn): New function.
+	(thumb_record_branch): New function.
+	(thumb_record_ldm_stm_swi(): New function.
+	(thumb_record_misc): New function.
+	(thumb_record_ld_st_stack): New function.
+	(thumb_record_ld_st_imm_offset): New function.
+	(thumb_record_ld_st_reg_offset(): New function.
+	(thumb_record_add_sub_cmp_mov): New function.
+	(thumb_record_shift_add_sub): New function.
+	(arm_record_coproc_data_proc): New function.
+	(arm_record_coproc): New function.
+	(arm_record_b_bl): New function.
+	(arm_record_ld_st_multiple): New function.
+	(arm_record_ld_st_reg_offset): New function.
+	(arm_record_ld_st_imm_offset): New function.
+	(arm_record_data_proc_imm): New function.
+	(arm_record_data_proc_misc_ld_str): New function.
+	(arm_record_extension_space): New function.
+	(arm_record_strx): New function.
+	(sbo_sbz): New function.
+	(struct insn_decode_record): New structure for arm insn record.
+	(REG_ALLOC): New macro for reg allocations.
+	(MEM_ALLOC): New macro for memory allocations.
+	* arm-tdep.h (struct gdbarch_tdep): New field 'arm_swi_record'.
+
+2012-03-27  Andreas Schwab  <schwab at linux-m68k.org>
+
+	* m68klinux-nat.c (fetch_register): Fix strict-aliasing violation.
+	(store_register): Likewise.
+
+2012-03-26  Oza Pawandeep  <oza.pawandeep at gmail.com>
 
-2011-07-01  Jean-Charles Delay  <delay at adacore.com>
+	* MAINTAINERS (Write After Approval): Add myself to the list.
 
-	* ada-typeprint.c (ada_print_type): Fix both PAD type and
-	pointer to constrained packed array type output.
-	* ada-valprint.c (ada_val_print_1): Fix pointer to constrained
-	packed array output.
+2012-03-25  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-07-01  Jean-Charles Delay  <delay at adacore.com>
+	* NEWS (set breakpoint condition-evaluation): Change "gdb" to "host".
+	Describe also the option "auto".
 
-	* ada-typeprint.c (print_array_type): removed if condition on show
-	being negative for bounds printing.
+2012-03-22  Richard Henderson  <rth at redhat.com>
 
-2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+	* sparc-linux-nat.c (_initialize_sparc_linux_nat): Fix prototype.
+	* sparc-nat.c (sparc_xfer_wcookie): Make static.
 
-	* ada-lang.c (ada_identical_enum_types_p): New function.
-	(symbols_are_identical_enums): New function.
-	(remove_extra_symbols): Do nothing if NSYMS < 2.
-	Use symbols_are_identical_enums.
+2012-03-22  Richard Henderson  <rth at redhat.com>
 
-2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+	* jit.c (jit_read_code_entry): Compute alignment and offset of
+	int64_t member before computing entry_size.
 
-	* ada-valprint.c (ada_value_print): Handle typedefs.
+2012-03-22  Siva Chandra Reddy  <sivachandra at google.com>
 
-2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+	Python scripting: Add new method Value.referenced_value to
+	gdb.Value which can dereference pointer as well as reference
+	values.
+	* NEWS: Add entry under 'Python scripting' about the new method
+	Value.referenced_value on gdb.Value objects.
+	* python/py-value.c (valpy_referenced_value): New function
+	defining a new method on gdb.Value objects which can dereference
+	pointer and reference values.
 
-	* ada-lang.c (ada_evaluate_subexp): Add missing word in comment.
+2012-03-22  Siva Chandra Reddy  <sivachandra at google.com>
 
-2011-07-01  Eric Botcazou  <ebotcazou at adacore.com>
+	* MAINTAINERS (Write After Approval): Add myself to the list.
 
-	* ada-lang.c (thin_descriptor_type): Deal with typedefs.
-	(decode_constrained_packed_array): Likewise.
-	(ada_evaluate_subexp) <TERNOP_SLICE>: Likewise.
+2012-03-21  Kevin Buettner  <kevinb at redhat.com>
 
-2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+	* symtab.c (skip_prologue_sal): Change test to check for "main()"
+	in addition to "main".
 
-	* ada-exp.y (convert_char_literal): Handle typedef types.
+2012-03-21  Joel Brobecker  <brobecker at adacore.com>
 
-2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+	* expression.h (op_name): Add declaration.
+	* expprint.c (op_name): Remove declaration.  Make non-static.
+	* ax-gdb.c (gen_expr): Use op_name instead of op_string.
 
-	* ada-lang.c (ada_remove_trailing_digits): Expand documentation.
+2012-03-21  Thomas Schwinge  <thomas at codesourcery.com>
 
-2011-06-30  Tom Tromey  <tromey at redhat.com>
+	* amd64-linux-nat.c (amd64_linux_siginfo_fixup): Use siginfo_t instead
+	of struct siginfo.
+	* arm-linux-nat.c (arm_linux_stopped_data_address): Likewise.
+	* ia64-linux-nat.c (ia64_linux_stopped_data_address): Likewise.
+	* linux-nat.c (linux_nat_siginfo_fixup, siginfo_fixup)
+	(linux_xfer_siginfo, linux_nat_set_siginfo_fixup)
+	(linux_nat_get_siginfo): Likewise.
+	* linux-nat.h (struct lwp_info, linux_nat_set_siginfo_fixup)
+	(linux_nat_get_siginfo): Likewise.
+	* linux-tdep.c (linux_get_siginfo_type): Likewise.
+	* ppc-linux-nat.c (ppc_linux_stopped_data_address): Likewise.
+	* procfs.c (gdb_siginfo_t): Likewise.
 
-	* varobj.c (varobj_create): Call do_cleanups on early exit path.
-	* valops.c (find_overload_match): Call do_cleanups on early exit
-	path.
-	* solib.c (solib_find): Call do_cleanups on early exit path.
+2012-03-21  Mike Frysinger  <vapier at gentoo.org>
 
-2011-06-30  Tom Tromey  <tromey at redhat.com>
+	* .gitignore: Ignore more files.
 
-	* symfile-mem.c (symbol_file_add_from_memory): Call do_cleanups.
-	* solib-svr4.c (open_symbol_file_object): Call do_cleanups on all
-	return paths.  Defer final do_cleanups until last return.
-	* arm-tdep.c (arm_exidx_new_objfile): Make null cleanup after
-	early return.
+2012-03-20  Pedro Alves  <palves at redhat.com>
 
-2011-06-30  Tom Tromey  <tromey at redhat.com>
+	* remote.c (remote_start_remote): Clear `rs->starting_up' on early
+	returns.
 
-	* Makefile.in (SUBDIR_MI_CFLAGS): Don't add -DMI_OUT=1.
+2012-03-20  Yao Qi  <yao at codesourcery.com>
 
-2011-06-30  Andrew Burgess  <aburgess at broadcom.com>
+	* amd64-tdep.c (amd64_displaced_step_copy_insn): Complete missing "}" in
+	comment.
 
-	* MAINTAINERS (Write After Approval): Add myself to the list.
+2012-03-19  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanupp: Use cu_offset and sect_offset compile time type checking.
+	* dwarf2expr.c (add_piece, dwarf_get_base_type, execute_stack_op)
+	(ctx_no_dwarf_call, ctx_no_get_base_type): Use cu_offset and
+	sect_offset.
+	* dwarf2expr.h (cu_offset, sect_offset): New types.
+	(struct dwarf_expr_context_funcs) <dwarf_call>
+	(struct dwarf_expr_context_funcs) <get_base_type>: Use cu_offset and
+	sect_offset.
+	(struct dwarf_expr_context) <len>: Improve the comment.
+	(struct dwarf_expr_piece, ctx_no_dwarf_call, ctx_no_get_base_type): Use
+	cu_offset and sect_offset.
+	* dwarf2loc.c (per_cu_dwarf_call, dwarf_expr_dwarf_call)
+	(dwarf_expr_get_base_type, needs_frame_dwarf_call)
+	(dwarf2_compile_expr_to_ax, disassemble_dwarf_expression): Likewise.
+	* dwarf2loc.h: Include dwarf2expr.h.
+	(dwarf2_fetch_die_location_block, dwarf2_get_die_type): Use cu_offset
+	and sect_offset.
+	* dwarf2read.c (struct dwarf2_per_objfile) <debug_types_type_hash>:
+	Improve the comment.
+	(struct comp_unit_head, struct dwarf2_cu, struct dwarf2_per_cu_data)
+	(struct signatured_type, struct line_header, struct partial_die_info)
+	(struct die_info, find_partial_die, dwarf2_get_ref_die_offset)
+	(lookup_signatured_type_at_offset, dwarf2_find_containing_comp_unit)
+	(get_die_type_at_offset, create_cus_from_index)
+	(create_signatured_type_table_from_index, dw2_get_file_names)
+	(offset_in_cu_p, read_comp_unit_head, error_check_comp_unit_head)
+	(read_and_check_comp_unit_head, read_and_check_type_unit_head)
+	(create_debug_types_hash_table, process_psymtab_comp_unit)
+	(load_partial_comp_unit, create_all_comp_units)
+	(partial_die_parent_scope, partial_die_full_name, skip_one_die)
+	(load_full_comp_unit, dwarf2_physname, read_import_statement)
+	(inherit_abstract_dies, read_func_scope, read_call_site_scope)
+	(dwarf2_add_member_fn, process_enumeration_scope, read_module_type)
+	(read_typedef, die_hash, die_eq, read_full_die, dwarf2_read_abbrevs)
+	(load_partial_dies, read_partial_die, find_partial_die_in_comp_unit)
+	(find_partial_die, read_attribute_value, lookup_die_type)
+	(dump_die_shallow, store_in_ref_table): Use cu_offset and sect_offset.
+	(is_ref_attr): New function comment.
+	(dwarf2_get_ref_die_offset): New function comment, new variable retval.
+	Use cu_offset and sect_offset.
+	(follow_die_offset, follow_die_ref, dwarf2_fetch_die_location_block)
+	(dwarf2_get_die_type, follow_die_sig, lookup_signatured_type_at_offset)
+	(load_full_type_unit, read_signatured_type, per_cu_header_read_in)
+	(dwarf2_find_containing_comp_unit, struct dwarf2_offset_and_type)
+	(offset_and_type_hash, offset_and_type_eq, set_die_type)
+	(get_die_type_at_offset, partial_die_hash, partial_die_eq)
+	(write_one_signatured_type, write_psymtabs_to_index): Use cu_offset and
+	sect_offset.
+
+2012-03-19  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-06-29  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Disable epilogue unwinders on recent GCCs.
-	* amd64-tdep.c (amd64_in_function_epilogue_p): New variable symtab,
-	initialize it, return 0 on EPILOGUE_UNWIND_VALID.
-	* dwarf2read.c (process_full_comp_unit): Initialize
-	EPILOGUE_UNWIND_VALID.
-	* i386-tdep.c (i386_in_function_epilogue_p): New variable symtab,
-	initialize it, return 0 on EPILOGUE_UNWIND_VALID.
-	* symtab.h (struct symtab): New field epilogue_unwind_valid.
-
-2011-06-29  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Code cleanup - reformatting.
-	* dwarf2read.c (producer_is_gcc_ge_4_0): Rename to ...
-	(producer_is_gcc_ge_4): ... here, change the return value.
-	(process_full_comp_unit): New variable gcc_4_minor, adjust the value
-	interpretation.
-
-2011-06-29  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix non-only rename list for Fortran modules import.
-	* cp-namespace.c (cp_scan_for_anonymous_namespaces): Adjust the
-	cp_add_using_directive caller.
-	(cp_add_using_directive): New parameter excludes, describe it.  New
-	variables ix and param.  Compare if also excludes match.  Allocate NEW
-	with variable size, initialize EXCLUDES there.
-	(cp_lookup_symbol_imports): New variable excludep, test
-	current->EXCLUDES with it.
-	* cp-support.h: Include vec.h.
-	(struct using_direct): New field excludes, describe it.
-	(DEF_VEC_P (const_char_ptr)): New.
-	(cp_add_using_directive): New parameter excludes.
-	* defs.h (const_char_ptr): New typedef.
-	* dwarf2read.c (read_import_statement): New variables child_die,
-	excludes and cleanups, read in excludes.
-	(read_namespace): Adjust the cp_add_using_directive caller.
-
-2011-06-29  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	Code cleanup.
+	* python/py-auto-load.c (source_section_scripts): New variable back_to.
+	Turn fclose and xfree calls into make_cleanup_fclose and make_cleanup
+	with xfree.
+	(auto_load_objfile_script): Turn fclose into make_cleanup_fclose.
+
+2012-03-19  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* NEWS: Describe new options --init-command=FILE, -ix and
+	--init-eval-command=COMMAND, -iex.
+	* main.c (struct cmdarg): New enum items CMDARG_INIT_FILE and
+	CMDARG_INIT_COMMAND.
+	(captured_main): New enum items OPT_IX and OPT_IEX.  Add
+	"init-command", "init-eval-command", "ix" and "iex" to the variable
+	long_options.  Handle OPT_IX and OPT_IEX.  Process them from CMDARG_VEC.
+	New comment for CMDARG_FILE and CMDARG_COMMAND processing.
+	(print_gdb_help): Describe --init-command=FILE, -ix and
+	--init-eval-command=COMMAND, -iex.
+
+2012-03-19  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
 	Code cleanup.
-	* cp-namespace.c (cp_add_using_directive): Turn positive comparison to
-	negative comparisons.
-
-2011-06-29  André Pönitz  <andre.poenitz at nokia.com>
-
-	* mi/mi-main.c (mi_cmd_list_features): Emit
-	breakpoint-notifications.
-
-2011-06-29  Tom Tromey  <tromey at redhat.com>
-
-	PR fortran/10036:
-	* valprint.h (generic_emit_char, generic_printstr): Declare.
-	* valprint.c (wchar_printable, append_string_as_wide)
-	(print_wchar): Move from c-lang.c.
-	(generic_emit_char): New function; mostly taken from c_emit_char.
-	(generic_printstr): New function; mostly taken from c_printstr.
-	* f-valprint.c (f_val_print) <TYPE_CODE_ARRAY>: Handle strings
-	represented as arrays.
-	<TYPE_CODE_CHAR>: Treat as TYPE_CODE_INT; recognize as character
-	type.
-	* f-typeprint.c (f_type_print_base) <TYPE_CODE_CHAR>: Treat
-	identically to TYPE_CODE_INT.
-	* f-lang.c (f_get_encoding): New function.
-	(f_emit_char): Use generic_emit_char.
-	(f_printchar): Replace comment.
-	(f_printstr): Use generic_printstr.
-	* dwarf2read.c (read_base_type) <DW_ATE_unsigned>: Handle Fortran
-	"character" types specially.
-	<DW_ATE_signed_char, DW_ATE_unsigned_char>: Make TYPE_CODE_CHAR
-	for Fortran.
-	* c-lang.c (wchar_printable, append_string_as_wide, print_wchar):
-	Move to valprint.c
-	(c_emit_char): Call generic_emit_char.
-	(c_printstr): Call generic_printstr.
-
-2011-06-29  Gary Benson  <gbenson at redhat.com>
-
-	* breakpoint.c (bpstat_what): Removed duplicated case.
-
-2011-06-28  Tom Tromey  <tromey at redhat.com>
-
-	* python/python-internal.h (PY_SSIZE_T_CLEAN): Define.
-
-2011-06-27  Tom Tromey  <tromey at redhat.com>
-
-	* valops.c (find_overload_match): Call do_cleanups before early
-	return.
-	* top.c (execute_command): Call do_cleanups before early return.
-	(command_loop): Likewise.
-	* stack.c (backtrace_command): Make a null cleanup early.  Don't
-	conditionally call do_cleanups.
-	* python/py-value.c (TRY_CATCH): Move cleanup handling into
-	TRY_CATCH.
-	* python/py-breakpoint.c (gdbpy_breakpoint_has_py_cond): Rearrange
-	so cleanups are always run.
-	* mi/mi-cmd-var.c (mi_cmd_var_delete): Reset old_cleanups.
-	* findcmd.c (parse_find_args): Call do_cleanups on early return
-	path.
-	* dbxread.c (elfstab_build_psymtabs): Make a null cleanup early.
-	Don't conditionally call do_cleanups.
-	* cli/cli-script.c (execute_user_command): Initialize 'old_chain'
-	later.
-
-2011-06-27  Eric Botcazou  <ebotcazou at adacore.com>
-
-	* MAINTAINERS (Write After Approval): Use default email address.
-
-2011-06-27  Joel Brobecker  <brobecker at adacore.com>
-
-	* MAINTAINERS (Write After Approval): Add Eric Botcazou.
-
-2011-06-27  Eric Botcazou  <ebotcazou at adacore.com>
-
-	* sparc-tdep.h (struct sparc_frame_cache): Add frame_offset,
-	saved_regs_mask and copied_regs_mask fields.
-	(sparc_record_save_insn): New prototype.
-	* sparc-tdep.c (sparc_alloc_frame_cache): Initialize the new fields.
-	(sparc_record_save_insn): New function.
-	(sparc_analyze_prologue): Add head comment.  Recognize store insns
-	of call-saved registers.  Use OFFSET consistently.  Recognize flat
-	frames and cache their settings.
-	(sparc32_skip_prologue): Handle flat frames.
-	(sparc_frame_cache): Add frame_offset to the base address.
-	(sparc32_frame_cache): Adjust to new frame description.
-	(sparc32_frame_prev_register): Likewise.
-	* sparc64-tdep.c (sparc64_frame_prev_register): Likewise.
-	* sparc-sol2-tdep.c (sparc32_sol2_sigtramp_frame_cache): Likewise.
-	* sparc64-sol2-tdep.c (sparc64_sol2_sigtramp_frame_cache): Likewise.
-	* sparcnbsd-tdep.c (sparc32nbsd_sigcontext_frame_cache): Force the
-	frame by calling sparc_record_save_insn.
-	* sparc64nbsd-tdep.c (sparc64nbsd_sigcontext_frame_cache): Likewise.
-	* sparcobsd-tdep.c (sparc32obsd_sigtramp_frame_cache): Likewise.
-	* sparc64obsd-tdep.c (sparc64obsd_frame_cache): Likewise.
-
-2011-06-27  Tristan Gingold  <gingold at adacore.com>
-
-	* dwarf2read.c (struct dwarf2_section_info): Replace was_mmapped
-	field by map_addr and map_len.
-	(dwarf2_read_section): Adjust for the new bfd_mmap api.
-	(munmap_section_buffer): Likewise.
-
-2011-06-24  Tom Tromey  <tromey at redhat.com>
-
-	* varobj.c (update_dynamic_varobj_children): Make 'name' const.
-	* symtab.h (lookup_struct, lookup_union, lookup_enum): Update.
-	* python/python.c (gdbpy_parameter): Make 'arg' const.
-	(execute_gdb_command): Likewise.
-	(gdbpy_decode_line): Likewise.  Copy it.
-	(gdbpy_parse_and_eval): Make 'expr_string' const.  Copy it.
-	(gdbpy_write): Make 'arg' const.
-	* python/py-type.c (typy_lookup_typename): Make 'type_name'
-	const.
-	(gdbpy_lookup_type): Likewise.
-	* python/py-prettyprint.c (print_children): Make 'name' const.
-	* python/py-param.c (parmpy_init): Make 'name' const.  Copy it.
-	* python/py-inferior.c (infpy_write_memory): Make 'buf_len' a
-	Py_ssize_t.
-	* python/py-function.c (fnpy_init): Make 'name' const.
-	* python/py-cmd.c (cmdpy_init): Make 'name' const.  Copy it.
-	(gdbpy_string_to_argv): Make 'input' const.
-	* python/py-breakpoint.c (bppy_init): Make 'spec' const.  Copy
-	it.
-	* gdbtypes.h (lookup_typename): Update.
-	* gdbtypes.c (lookup_typename): Make 'name' const.
-	(lookup_struct): Likewise.
-	(lookup_union): Likewise.
-	(lookup_enum): Likewise.
-
-2011-06-24  Tom Tromey  <tromey at redhat.com>
-
-	* Makefile.in (HFILES_NO_SRCDIR): Add "common/" to
-	gdb_thread_db.h.  Move all common/ entries to be together.
-	(TAGS): Don't depend on DEPFILES.
-
-2011-06-23  Yao Qi  <yao at codesourcery.com>
-
-	* infrun.c (start_remote): Move call init_wait_for_inferior to ...
-	* remote.c (remote_start_remote): ... here.
-	* monitor.c (monitor_open): ... here.
-
-2011-06-23  Andrew Burgess  <aburgess at broadcom.com>
-
-	* gdbtypes.c (append_composite_type_field_aligned): Fix
-	calculation of bit position based on alignment.
-
-2011-06-22  Pedro Alves  <pedro at codesourcery.com>
-
-	* breakpoint.c (bpstat_stop_status): Call the check_status
-	breakpoint_ops method.
-	(print_one_breakpoint_location): Also print the condition for Ada
-	exception catchpoints.
-	(allocate_bp_location): New, factored out from
-	allocate_bp_location.
-	(allocate_bp_location): Adjust.  Call the owner breakpoint's
-	allocate_location method, if there is one.
-	(free_bp_location): Call the locations's dtor method, if there is
-	one.
-	(init_raw_breakpoint_without_location): New breakpoint_ops
-	parameter.  Use it.
-	(set_raw_breakpoint_without_location): Adjust.
-	(init_raw_breakpoint): New breakpoint_ops parameter.  Pass it down.
-	(set_raw_breakpoint): Adjust.
-	(catch_fork_breakpoint_ops, catch_vfork_breakpoint_ops)
-	(catch_syscall_breakpoint_ops): Install NULL allocate_location,
-	re_set and check_status methods.
-	(init_catchpoint): Don't memset, initialize thread, addr_string
-	and enable_state.  Pass the ops down to init_raw_breakpoint.
-	(install_catchpoint): Rename to ...
-	(install_breakpoint): ... this, and make extern.
-	(create_fork_vfork_event_catchpoint): Adjust.
-	(catch_exec_breakpoint_ops): Install NULL allocate_location,
-	re_set and check_status methods.
-	(create_syscall_event_catchpoint): Adjust.
-	(ranged_breakpoint_ops, watchpoint_breakpoint_ops)
-	(masked_watchpoint_breakpoint_ops): Install NULL
-	allocate_location, re_set and check_status methods.
-	(catch_exec_command_1): Adjust.
-	(gnu_v3_exception_catchpoint_ops): Install NULL allocate_location,
-	re_set and check_status methods.
-	(create_ada_exception_breakpoint): Rename to ...
-	(init_ada_exception_breakpoint): ... this.  Add a struct
-	breakpoint parameter, and delete the exp_string, cond_string and
-	cond parameters.  Use init_raw_breakpoint, and don't install or
-	mention the breakpoint yet.  Don't clear breakpoint fields that
-	init_raw_breakpoint already clears.
-	(re_set_breakpoint): Delete, split into ...
-	(breakpoint_re_set_default, prepare_re_set_context): ... these new
+	* main.c (struct cmdarg): Move it here from main.  Add more comments.
+	(cmdarg_s, VEC (cmdarg_s)): New.
+	(main): Move struct cmdarg from here.  New variables cmdarg_vec and
+	cmdarg_p.  Remove variables cmdsize and ncmd and their initialization.
+	Install cleanup for cmdarg_vec.  Update filling for options 'x' and
+	'X'.  Replace cmdarg processing by cmdarg_vec processing.  Remove xfree
+	of CMDARG.
+
+2012-03-19  Tom Tromey  <tromey at redhat.com>
+
+	* gnu-v3-abi.c (gnuv3_print_vtable): Initialize 'result_vec'.
+
+2012-03-16  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	PR symtab/13777
+	* dwarf2read.c (process_full_comp_unit): Set LOCATIONS_VALID only for
+	GCC >=4.5.
+
+2012-03-16  Chris January  <chris.january at allinea.com>
+
+	* tui-tui.win.c (tui_resize_all): Use erase and clearok instead
+	of clear.
+
+2012-03-16  Chris January  <chris.january at allinea.com>
+
+	* source.c (add_path): Use memmove instead of strcpy because the
+	strings overlap.
+
+2012-03-16  Joel Brobecker  <brobecker at adacore.com>
+
+	* value.h (set_value_parent): Add declaration.
+	* value.c (set_value_parent): New function.
+	(value_address): If VALUE->PARENT is not NULL, then use it as
+	the base address instead of VALUE->LOCATION.address.
+	* ada-lang.c (ada_value_primitive_packed_val): Keep V's address
+	the same as OBJ's address.  Adjust V's offset accordingly.
+	Set V's parent.
+
+2012-03-16  Gary Benson  <gbenson at redhat.com>
+
+	PR breakpoints/10738
+	* dwarf2read.c (use_deprecated_index_sections): New global.
+	(struct partial_die_info): New member may_be_inlined.
+	(read_partial_die): Set may_be_inlined where appropriate.
+	(add_partial_subprogram): Add partial symbols for partial
+	DIEs that may be inlined.
+	(new_symbol_full): Add inlined subroutines to the current
+	scope.
+	(write_psymtabs_to_index): Bump version number.
+	(dwarf2_read_index): Read only version 6 indices unless
+	use_deprecated_index_sections is set.
+	* linespec.c (symbol_and_data_callback): New structure.
+	(iterate_inline_only): New function.
+	(iterate_over_all_matching_symtabs): New argument
+	"include_inline".  If nonzero, also call the callback for
+	symbols representing inlined subroutines.
+	(lookup_prefix_sym): Pass extra argument to the above.
+	(find_function_symbols): Likewise.
+	(add_matching_symbols_to_info): Likewise.
+	* NEWS: Mention that GDB can now set breakpoints on inlined
 	functions.
-	(breakpoint_re_set_one): Call the breakpoint's
-	breakpoint_ops->re_set implementation, if there's one.  Adjust.
-	* breakpoint.h: Forward declare struct bpstats and struct bp_location.
-	(struct bp_location_ops): New type.
-	(struct bp_location): New field `ops'.
-	(struct breakpoint_ops): New `allocate_location', `re_set' and
-	`check_status' fields.  Make `breakpoint_hit''s description match
-	reality.
-	(init_bp_location): Declare.
-	(breakpoint_re_set_default): Declare.
-	(create_ada_exception_breakpoint): Rename to ...
-	(init_ada_exception_breakpoint): ... this.  Add a struct
-	breakpoint parameter, and delete the exp_string, cond_string and
-	cond parameters.
-	(install_breakpoint): Declare.
-	* ada-lang.c: Include exceptions.h.
-	<Ada exceptions description>: Update.
-	(struct ada_catchpoint_location): New type.
-	(ada_catchpoint_location_dtor): New function.
-	(ada_catchpoint_location_ops): New global.
-	(ada_catchpoint): New type.
-	(create_excep_cond_exprs): New function.
-	(dtor_exception, allocate_location_exception, re_set_exception)
-	(should_stop_exception, check_status_exception): New functions.
-	(print_one_exception, print_mention_exception)
-	(print_recreate_exception): Adjust.
-	(dtor_catch_exception, allocate_location_catch_exception)
-	(re_set_catch_exception, check_status_catch_exception): New
-	functions.
-	(catch_exception_breakpoint_ops): Install them.
-	(dtor_catch_exception_unhandled)
-	(allocate_location_catch_exception_unhandled)
-	(re_set_catch_exception_unhandled)
-	(check_status_catch_exception_unhandled): New functions.
-	(catch_exception_unhandled_breakpoint_ops): Install them.
-	(dtor_catch_assert, allocate_location_catch_assert)
-	(re_set_catch_assert, check_status_catch_assert): New functions.
-	(catch_assert_breakpoint_ops): Install them.
-	(ada_exception_catchpoint_p): Delete.
-	(catch_ada_exception_command_split)
-	(ada_exception_catchpoint_cond_string): Rename exp_string
-	parameter to excep_string.  Adjust.
-	(ada_parse_catchpoint_condition): Delete.
-	(ada_exception_sal): Rename the exp_string parameter to
-	excep_string.  Delete the cond_string and cond parameters.
-	Adjust.
-	(ada_decode_exception_location): Rename the exp_string parameter
-	to excep_string.  Delete the cond_string and cond parameters.
-	Adjust.
-	(create_ada_exception_catchpoint): New function.
-	(catch_ada_exception_command, ada_decode_assert_location)
-	(catch_assert_command): Adjust.
-	* ada-lang.h (ada_exception_catchpoint_p): Delete declaration.
-
-2011-06-22  Pedro Alves  <pedro at codesourcery.com>
-
-	* ada-lang.c: Include arch-utils.h.
-	(ada_decode_exception_location): Make static.
-	(catch_ada_exception_command): Moved here from breakpoint.c.
-	(ada_decode_assert_location): Make static.
-	(catch_assert_command): Moved here from breakpoint.c.
-	(_initialize_ada_lang): Install the exception and assert
-	catchpoint commands here.
-	* ada-lang.h (ada_decode_exception_location)
-	(ada_decode_assert_location): Delete declarations.
-	* breakpoint.c (CATCH_PERMANENT, CATCH_TEMPORARY): Moved to
-	breakpoint.h.
-	(create_ada_exception_breakpoint): Make extern.
-	(catch_ada_exception_command, catch_assert_command): Moved to
-	ada-lang.c.
-	(add_catch_command): Make extern.
-	(_initilize_breakpoint): Don't install the exception and assert
-	catchpoint commands here.
-	* breakpoint.h (CATCH_PERMANENT, CATCH_TEMPORARY): Moved from
-	breakpoint.c
-	(add_catch_command, create_ada_exception_breakpoint): Declare.
-
-2011-06-22  Pedro Alves  <pedro at codesourcery.com>
-
-	* breakpoint.c (init_raw_breakpoint_without_location): Don't add
-	the breakpoint to the breakpoint chain here.
-	(set_raw_breakpoint_without_location): Add the breakpoint to the
-	breakpoint chain here.
-	(init_raw_breakpoint): Adjust comments.
-	(set_raw_breakpoint): Add the breakpoint to the breakpoint chain
-	here.
-	(init_catchpoint): Don't set the catchpoint's breakpoint number
-	here.
-	(install_catchpoint): New function.
-	(create_fork_vfork_event_catchpoint)
-	(create_syscall_event_catchpoint, catch_exec_command_1): Adjust to
-	use install_catchpoint.
-
-2011-06-22  Pedro Alves  <pedro at codesourcery.com>
-
-	* breakpoint.c (create_catchpoint_without_mention)
-	(create_catchpoint): Delete.
-
-2011-06-22  Pedro Alves  <pedro at codesourcery.com>
-
-	* breakpoint.h (struct breakpoint): Delete field `exec_pathname'.
-	* breakpoint.c (init_raw_breakpoint_without_location): Remove
-	reference to exec_pathname.
-	(struct exec_catchpoint): New type.
-	(dtor_catch_exec): New function.
-	(insert_catch_exec, print_it_catch_exec, print_one_catch_exec): Adjust.
-	(catch_exec_breakpoint_ops): Install dtor_catch_syscall.
-	(catch_exec_command_1): Adjust to use init_catchpoint.
-	(delete_breakpoint): Remove reference to exec_pathname.
-
-2011-06-22  Pedro Alves  <pedro at codesourcery.com>
-
-	* breakpoint.h (struct breakpoint_ops): New field `dtor'.
-	(struct breakpoint): Delete field `syscalls_to_be_caught'.
-	* breakpoint.c (init_raw_breakpoint_without_location): Remove
-	reference to syscalls_to_be_caught.
-	(catch_fork_breakpoint_ops, catch_vfork_breakpoint_ops): Install a
-	NULL `dtor'.
-	(struct syscall_catchpoint): New type.
-	(dtor_catch_syscall): New function.
-	(insert_catch_syscall, remove_catch_syscall)
-	(breakpoint_hit_catch_syscall, print_one_catch_syscall)
-	(print_recreate_catch_syscall): Adjust.
-	(catch_syscall_breakpoint_ops): Install dtor_catch_syscall.
-	(catch_exec_breakpoint_ops): Install a NULL `dtor'.
-	(create_syscall_event_catchpoint): Adjust to use init_catchpoint.
-	(ranged_breakpoint_ops, watchpoint_breakpoint_ops)
-	(masked_watchpoint_breakpoint_ops)
-	(gnu_v3_exception_catchpoint_ops): Install a NULL `dtor'.
-	(delete_breakpoint): Call the `dtor' breakpoint_ops method, if
-	there is one.  Remove references to syscalls_to_be_caught.
-	(catching_syscall_number): Adjust.
-	* ada-lang.c (catch_exception_breakpoint_ops)
-	(catch_exception_unhandled_breakpoint_ops)
-	(catch_assert_breakpoint_ops): Install a NULL `dtor'.
-
-2011-06-22  Pedro Alves  <pedro at codesourcery.com>
-
-	* breakpoint.h (struct breakpoint): Delete forked_inferior_pid
-	field.
-	* breakpoint.c (init_raw_breakpoint_without_location): Remove
-	reference to forked_inferior_pid.
-	(struct fork_catchpoint): New type.
-	(breakpoint_hit_catch_fork, print_it_catch_fork)
-	(print_one_catch_fork, breakpoint_hit_catch_vfork)
-	(print_it_catch_vfork, print_one_catch_vfork): Adjust.
-	(create_fork_vfork_event_catchpoint): Adjust to use
-	init_catchpoint.
-
-2011-06-22  Pedro Alves  <pedro at codesourcery.com>
-
-	* breakpoint.c (add_to_breakpoint_chain)
-	(init_raw_breakpoint_without_location): New functions, factored
-	out from ...
-	(set_raw_breakpoint_without_location): ... this one.
-	(init_raw_breakpoint): New function, factored out from
-	set_raw_breakpoint and adjusted to use
-	init_raw_breakpoint_without_location.
-	(set_raw_breakpoint): Adjust.
-	(init_catchpoint): New function, factored out from
-	create_catchpoint_without_mention and adjusted to use
-	init_raw_breakpoint.
-	(create_catchpoint_without_mention): Adjust.
-
-2011-06-22  Tom Tromey  <tromey at redhat.com>
-
-	* dwarf2expr.c (execute_stack_op) <DW_OP_GNU_convert>: Treat type
-	argument of 0 specially.
-
-2011-06-22  Yao Qi  <yao at codesourcery.com>
 
-	* infrun.c (handle_inferior_event): Remove write-only local variable
-	`sw_single_step_trap_p'.
+2012-03-16  Pierre Muller  <muller at ics.u-strasbg.fr>
 
-2011-06-20  Tom Tromey  <tromey at redhat.com>
-
-	* symtab.c (lookup_language_this): End loop if block is NULL.
+	* p-typeprint.c (pascal_type_print_method_args):
+	Fix display of parameter of methods.
 
-2011-06-17  Tom Tromey  <tromey at redhat.com>
+2012-03-16  Pierre Muller  <muller at ics.u-strasbg.fr>
 
-	* valops.c (value_of_this): Use lookup_language_this.
-	* symtab.h (lookup_language_this): Declare.
-	* symtab.c (lookup_language_this): New function.
-	(lookup_symbol_aux): Use lookup_language_this.
-	* ax-gdb.c (gen_expr) <OP_THIS>: Use lookup_language_this.
+	* amd64-windows-nat.c (_initialize_amd64_windows_nat):
+	Add missing prototype.
 
-2011-06-17  Tom Tromey  <tromey at redhat.com>
+2012-03-16  Yao Qi  <yao at codesourcery.com>
+	    Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* value.h (value_of_this): Update.
-	(value_of_local): Remove.
-	* valops.c (value_of_this): Rename from value_of_local.  Change
-	parameters.
-	* p-exp.y (exp): Update.
-	(variable): Likewise.
-	* eval.c (evaluate_subexp_standard) <OP_THIS>: Use value_of_this.
-
-2011-06-17  Tom Tromey  <tromey at redhat.com>
-
-	* valops.c (value_of_local): Complain if NAME is NULL.
-	* std-operator.def (OP_OBJC_SELF): Remove.
-	* parse.c (operator_length_standard) <OP_OBJC_SELF>: Remove.
-	* objc-exp.y (name_not_typename): Use OP_THIS.
-	* expprint.c (print_subexp_standard) <OP_THIS>: Print language's
-	name for "this".
-	<OP_OBJC_SELF>: Remove.
-	* eval.c (evaluate_subexp_standard) <OP_OBJC_SELF>: Remove.
-
-2011-06-16  Tristan Gingold  <gingold at adacore.com>
-
-	* python/py-events.h (gdb_py_events): Make it extern.
-	* python/py-evtregistry.c (gdb_py_events): Declare.
-
-2011-06-16  Hui Zhu  <teawater at gmail.com>
-
-	* remote.c (remote_trace_set_readonly_regions): Add check for
-	remote_protocol_packets[PACKET_qXfer_traceframe_info].support before
-	output warning.
-
-2011-06-15  Ulrich Weigand  <ulrich.weigand at linaro.org>
-
-	* arm-linux-tdep.c: Include "auxv.h".
-	(AT_HWCAP): Define.
-	(ARM_LINUX_SIZEOF_VFP): Define.
-	(arm_linux_supply_vfp): New function.
-	(arm_linux_collect_vfp): Likewise.
-	(arm_linux_regset_from_core_section): Handle .reg-arm-vfp sections.
-	(arm_linux_fpa_regset_sections): New variable.
-	(arm_linux_vfp_regset_sections): Likewise.
-	(arm_linux_core_read_description): New function.
-	(arm_linux_init_abi): Install arm_linux_core_read_description and
-	arm_linux_fpa_regset_sections or arm_linux_vfp_regset_sections as
-	appropriate for the architecture.
-	* arm-tdep.h (struct gdbarch_tdep): Add member "vfpregset".
-	(tdesc_arm_with_m): Declare.
-	(tdesc_arm_with_iwmmxt): Likewise.
-	(tdesc_arm_with_vfpv2): Likewise.
-	(tdesc_arm_with_vfpv3): Likewise.
-	(tdesc_arm_with_neon): Likewise.
-	* arm-linux-nat.c: Move features/*.c includes ...
-	* arm-tdep.c: ... here.
-	* arm-linux-nat.c (arm_linux_read_description): Move initializing
-	target description data structures ...
-	* arm-tdep.c (_initialize_arm_tdep): ... here.
-	* arm-linux-nat.c (HWCAP_VFP, HWCAP_IWMMXT, HWCAP_NEON, HWCAP_VFPv3,
-	HWCAP_VFPv3D16): Move definitions ...
-	* arm-linux-tdep.h: ... here.
-
-2011-06-15  Hui Zhu  <teawater at gmail.com>
-
-	* remote.c (remote_trace_set_readonly_regions): Add a check for
-	target_buf_size.
-
-2011-06-14  Tom Tromey  <tromey at redhat.com>
-
-	* coffread.c (coffread_objfile): Rename from current_objfile.
-	* dbxread.c (dbxread_objfile): Rename from current_objfile.
-	* mdebugread.c (mdebugread_objfile): Rename from current_objfile.
-
-2011-06-14  Tom Tromey  <tromey at redhat.com>
-
-	* jv-lang.c (jv_type_objfile_data_key, dynamics_objfile)
-	(class_symtab): Remove.
-	(jv_dynamics_progspace_key): New global.
-	(jv_per_objfile_free): Reset program space data.  Update assert.
-	Don't clear globals.
-	(get_dynamics_objfile): Use and set program space data.
-	(get_java_class_symtab): Use get_dynamics_objfile.
-	(add_class_symbol): Likewise.
-	(java_link_class_type): Likewise.
-	(java_object_type, jv_clear_object_type, set_java_object_type):
-	Remove.
-	(get_java_object_type): Update.  Don't cache result.
-	(is_object_type): Don't call set_java_object_type.
-	(_initialize_java_language): Don't set jv_type_objfile_data_key;
-	initialize jv_dynamics_progspace_key.
-
-2011-06-14  Tom Tromey  <tromey at redhat.com>
-
-	* symtab.h (current_objfile): Don't declare.
-	* objfiles.h (current_objfile): Don't declare.
-	* objfiles.c (current_objfile): Remove.
-	* mdebugread.c (current_objfile): New file-scope global.
-	* dbxread.c (current_objfile): New file-scope global.
-	* coffread.c (current_objfile): New file-scope global.
-
-2011-06-13  Pedro Alves  <pedro at codesourcery.com>
-
-	* top.h (line): Rename to ...
-	(saved_command_line): ... this.
-	(linesize): Rename to ...
-	(saved_command_line_size): ... this.
-	* top.c (line): Rename to ...
-	(saved_command_line): ... this.
-	(linesize): Rename to ...
-	(saved_command_line_size): ... this.
-	(dont_repeat, command_line_input, dont_repeat_command): Adjust.
-	* event-top.c (command_line_handler): Adjust.
-	* main.c (captured_main): Adjust.
-
-2011-06-12  Mark Kettenis  <kettenis at gnu.org>
-
-	* i386-tdep.c (i386_epilogue_frame_cache): Simplify code.  Call
-	get_frame_func instead of get_frame_pc to determine the code
-	address used to construct the frame ID.
-	(i386_epilogue_frame_unwind_stop_reason): Fix coding style.
-	(i386_epilogue_frame_this_id): Likewise.
-	(i386_epilogue_frame_prev_register): New function.
-	(i386_epilogue_frame_unwind): Use i386_epilogue_frame_prev_register.
-	(i386_stack_tramp_frame_sniffer): Fix coding style.
-	(i386_stack_tramp_frame_unwind): Use i386_epilogue_frame_prev_register.
-	(i386_gdbarch_init): Fix comments.
-
-2011-06-12  Mark Kettenis  <kettenis at gnu.org>
-
-	* i386-tdep.c (i386_match_insn_block): Use length of the proper
-	instruction when walking back through the instruction stream.
-
-2011-06-10  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* symtab.c (output_partial_symbol_filename): Exchange the filename and
-	fullname parameters order.
-
-2011-06-10  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	Fix false compilation warning.
+	* gnu-v3-abi.c (print_one_vtable): Initialize ADDR.
 
-	Code cleanup.
-	* dwarf2read.c (dw2_map_symbol_filenames): Use symbol_filename_ftype
-	for fun.
-	* psymtab.c (map_symbol_filenames_psymtab)
-	(map_partial_symbol_filenames): Likewise.
-	* psymtab.h: Include symfile.h.
-	(map_partial_symbol_filenames): Use symbol_filename_ftype for fun.
-	* symfile.h (symbol_filename_ftype): New.
-	(struct quick_symbol_functions): Use symbol_filename_ftype for fun of
-	map_symbol_filenames, clarify more the naming in comment.
-
-2011-06-07  Doug Evans  <dje at google.com>
-
-	* cc-with-index.sh: Fix typos in comment.
-	Look for ../../gdb, for fullname.exp.
-
-2011-06-07  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-03-15  Jonathan Larmour  <jifl at eCosCentric.com>
 	    Pedro Alves  <pedro at codesourcery.com>
 
-	* cli/cli-cmds.c (shell_escape): Use waitpid.
-	* rs6000-nat.c (exec_one_dummy_insn): Likewise.
-
-2011-06-07  Tristan Gingold  <gingold at adacore.com>
-
-	* xcoffread.c (dwarf2_xcoff_names): New variable.
-	(aix_process_linenos): Add a guard.
-	(xcoff_symfile_finish): Free dwarf2.
-	(xcoff_initial_scan): Add dwarf2 support.
-
-2011-06-06  Pedro Alves  <pedro at codesourcery.com>
-
-	* infcall.c (run_inferior_call): Don't mask async.  Instead force
-	a synchronous wait, if the target can async.
-
-	* target.h (struct target_ops): Delete to_async_mask.
-	(target_async_mask): Delete.
-	* target.c (update_current_target): Delete references to to_async_mask.
-	* linux-nat.c (linux_nat_async_mask_value): Delete.
-	(linux_nat_is_async_p, linux_nat_can_async_p): Remove references
-	to linux_nat_async_mask_value.
-	(linux_nat_async_mask): Delete.
-	(linux_nat_async, linux_nat_close): Remove references to
-	linux_nat_async_mask_value.
-	* record.c (record_async_mask_value): Delete.
-	(record_async): Remove references to record_async_mask_value.
-	(record_async_mask): Delete.
-	(record_can_async_p, record_is_async_p): Remove references to
-	record_async_mask_value.
-	(init_record_ops, init_record_core_ops): Remove references to
-	record_async_mask.
-	* remote.c (remote_async_mask_value): Delete.
-	(init_remote_ops): Remove reference to remote_async_mask.
-	(remote_can_async_p, remote_is_async_p): Remove references to
-	remote_async_mask_value.
-	(remote_async): Remove references to remote_async_mask_value.
-	(remote_async_mask): Delete.
-
-	* infrun.c (fetch_inferior_event): Don't claim registers changed
-	if the current thread is already not executing.
-
-2011-06-03  Joel Brobecker  <brobecker at adacore.com>  (obvious fix)
-
-	From Stephen Kitt  <steve at sk2.org>
-	* breakpoint.c, breakpoint.h, cli/cli-dump.c, dwarf2expr.c,
-	gdbarch.c, gdbarch.sh, remote.c: Various spelling fixes.
-
-2011-06-03  Joel Brobecker  <brobecker at adacore.com>
-
-	* dwarf2expr.c (execute_stack_op) [DW_OP_deref]: Handle
-	the case where ADDR_SIZE is different from TYPE_LENGTH (type).
-
-2011-06-03  Tom Tromey  <tromey at redhat.com>
-
-	* python/py-inferior.c (python_inferior_exit): Use inferior's exit
-	code fields.
-	* python/py-exitedevent.c (create_exited_event_object): Change
-	type of 'exit_code'.  Optionally add exit_code attribute.
-	(emit_exited_event): Change type of 'exit_code'.
-	* python/py-event.h (emit_exited_event): Update.
-	* mi/mi-interp.c (mi_inferior_exit): Print exit code.
-	* infrun.c (handle_inferior_event): Set exit code fields on
-	inferior.
-	* inferior.h (struct inferior) <has_exit_code, exit_code>: New
-	fields.
-	* inferior.c (exit_inferior_1): Initialize new fields.
-
-2011-06-03  Tom Tromey  <tromey at redhat.com>
-
-	* dwarf2expr.c (get_signed_type): New function.
-	(execute_stack_op) <DW_OP_shra>: Always perform a signed shift.
-
-2011-06-02  Keith Seitz  <keiths at redhat.com>
-
-	* objc-lang.c (find_methods): Increment objfile_csym earlier.
-
-2011-06-02  Pedro Alves  <pedro at codesourcery.com>
-
-	* top.h (simplified_command_loop): Delete declaration.
-
-2011-06-01  Mike Frysinger  <vapier at gentoo.org>
-
-	* remote-sim.c (gdbsim_open): Add the strlen of " --sysroot=" and
-	gdb_sysroot to the "len" variable.  Append both to "arg_buf".
-
-2011-06-01  Yao Qi  <yao at codesourcery.com>
-
-	* objfiles.h (obj_section_addr): Update reference to objfile from
-	`abfd' to `obfd'.
-	(obj_section_endaddr): Likewise.
-
-2011-06-01  Daniel Jacobowitz  <drow at false.org>
-
-	* MAINTAINERS: Update my email address and affiliation.  Also
-	update Ian Lance Taylor's affiliation.  Use UTF-8 for ludo at gnu.org.
-
-2010-05-31  Keith Seitz  <keiths at redhat.com>
-
-	PR c++/12750
-	* linespec.c (get_search_block): New function.
-	(find_methods): Add FILE_SYMTATB parameter and use it and
-	get_search_block to pass an appropriate block to
-	lookup_symbol_in_namespace.
-	(decode_line_1): Record if *ARGPTR is single-quote enclosed.
-	Check if *ARGPTR starts with a filename first.
-	If it does, call locate_first_half again to locate the next
-	"first half" of the linespec.
-	Pass FILE_SYMTATB to decode_objc and decode_compound.
-	Swallow the trailing single-quote if IS_SQUOTE_ENCLOSED.
-	(locate_first_half): Stop on the first colon seen.
-	(decode_compound): Add FILE_SYMTAB parameter.
-	Pass FILE_SYMTAB to lookup_prefix_sym and find_method.
-	(lookup_prefix_sym): Add FILE_SYMTAB parameter and use
-	get_search_block with lookup_symbol.
-	(find_method): Add FILE_SYMTAB parameter and pass it to
-	find_methods.
-	(decode_objc): Use get_search_block.
-
-2010-05-31  Keith Seitz  <keiths at redhat.com>
-
-	PR symtab/12704
-	* cp-namespace.c (ANONYMOUS_NAMESPACE_LEN): Remove.
-	(cp_scan_for_anonymous_namespaces): Use CP_ANONYMOUS_NAMESPACE_STR
-	and CP_ANONYMOUS_NAMESPACE_LEN.
-	(cp_is_anonymous): Likewise.
-	* cp-support.h (CP_ANONYMOUS_NAMESPACE_STR): Define.
-	(CP_ANONYMOUS_NAMESPACE_LEN): Define.
-	* dwarf2read.c (namespace_name): Likewise.
-	(fixup_partial_die): Likewise.
-	* linespec.c (decode_compound): If CP_ANONYMOUS_NAMESPACE_STR is
-	seen in the input, keep it.
-
-2011-05-30  Pedro Alves  <pedro at codesourcery.com>
-
-	* target.h (enum inferior_event_type): Delete INF_QUIT_REQ.
-	* inf-loop.h (inferior_event_handler_wrapper): Delete.
-	* inf-loop.c (inferior_event_handler_wrapper): Delete.
-	(inferior_event_handler): Don't handle INF_QUIT_REQ.
-	* remote.c (_initialize_remote): Register
-	async_remote_interrupt_twice directly as
-	sigint_remote_twice_token event.
-
-2011-05-30  Pedro Alves  <pedro at codesourcery.com>
-
-	* target.h (enum inferior_event_type): Delete INF_ERROR.
-	* inf-loop.c (inferior_event_handler): Don't handle INF_ERROR.
-
-2011-05-30  Pedro Alves  <pedro at codesourcery.com>
-
-	* interps.c (interp_set): Don't cancel continuations.
-
-2011-05-30  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* linux-nat.c (linux_lwp_is_zombie): Use xsnprintf.
-
-2011-05-30  Pedro Alves  <pedro at codesourcery.com>
-
-	* continuations.h (continuation_ftype): Add `err' parameter.
-	Document parameters.
-	(do_all_continuations, do_all_continuations_thread)
-	(do_all_intermediate_continuations)
-	(do_all_intermediate_continuations_thread)
-	(do_all_inferior_continuations): Add `err' parameter.
-	* continuations.c (do_my_continuations_1, do_my_continuations)
-	(do_all_inferior_continuations, do_all_continuations_ptid)
-	(do_all_continuations_thread_callback)
-	(do_all_continuations_thread, do_all_continuations)
-	(do_all_intermediate_continuations_thread_callback)
-	(do_all_intermediate_continuations_thread)
-	(do_all_intermediate_continuations): Add `err' parameter, and pass
-	it down all the way to the continuations proper.
-	* inf-loop.c (inferior_event_handler): If fetching an inferior
-	event throws an error, don't pop the target, and still call the
-	continuations, but with `err' set.  Adjust all other continuation
-	calls.
-	* breakpoint.c (until_break_command_continuation): Add `err'
-	parameter.
-	* infcmd.c (step_1_continuation): Add `err' parameter.  Don't
-	issue another step if `err' is set.
-	(struct until_next_continuation_args): New.
-	(until_next_continuation): Add `err' parameter.  Adjust.
-	(until_next_command): Adjust.
-	(struct finish_command_continuation_args): Add `thread' field.
-	(finish_command_continuation): Add `err' parameter.  Handle it.
-	(finish_forward): Adjust.
-	(attach_command_continuation): Add `err' parameter.  Handle it.
-	* infrun.c (infrun_thread_stop_requested_callback): Adjust to
-	cancel the continuations.
-	* interps.c (interp_set): Adjust to cancel the continuations.
-	* thread.c (clear_thread_inferior_resources): Adjust to cancel the
-	continuations rather than discarding.
-	(free_thread): Don't clear thread inferior resources here.
-	(delete_thread_1): Do it here instead.  And do it before removing
-	the thread from the threads list.  Tag the thread as exited before
-	clearing thread inferior resources.
-
-2011-05-30  Joel Brobecker  <brobecker at adacore.com>
-
-	* infcall.c (call_function_by_hand): Rephrase error message.
-
-2011-05-27  Pedro Alves  <pedro at codesourcery.com>
-
-	* defs.h (struct thread_info, struct inferior): Delete forward
-	declarations.
-	* breakpoint.h (struct thread_info): New forward declaration.
-	* observer.sh (struct inferior): New forward declaration.
-	* python/python-internal.h (struct inferior): New forward
-	declaration.
-
-2011-05-27  Pedro Alves  <pedro at codesourcery.com>
-
-	* defs.h (struct continuation, continuation_ftype)
-	(continuation_free_arg_ftype, add_continuation)
-	(do_all_continuations, do_all_continuations_thread)
-	(discard_all_continuations, discard_all_continuations_thread)
-	(add_intermediate_continuation, do_all_intermediate_continuations)
-	(do_all_intermediate_continuations_thread)
-	(discard_all_intermediate_continuations)
-	(discard_all_intermediate_continuations_thread)
-	(add_inferior_continuation, do_all_inferior_continuations)
-	(discard_all_inferior_continuations): Move to ...
-	* continuations.h: ... this new file.
-	* breakpoint.c, continuations.c, event-top.c, inf-loop.c,
-	infcmd.c, inferior.c, infrun.c, interps.c: Include
-	continuations.h.
-
-2011-05-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
-	    Doug Evans  <dje at google.com>
-
-	Fix PR 10970, PR 12702.
-	* linux-nat.c (linux_lwp_is_zombie): New function.
-	(wait_lwp): Initialize status.  New variable prev_mask.  Block signals.
-	Check for linux_lwp_is_zombie.  Use WNOHANG and sigsuspend.
-
-2011-05-27  Pedro Alves  <pedro at codesourcery.com>
-
-	* defs.h (continuation_ftype, continuation_free_arg_ftype): New
-	typedefs.
-	(add_continuation, add_intermediate_continuation)
-	(add_inferior_continuation): Use them.
-	* continuations.c (struct continuation): Use them.
-	(make_continuation_ftype): Delete.
-	(make_continuation, add_inferior_continuation, add_continuation)
-	(add_intermediate_continuation): Use continuation_ftype and
-	continuation_free_arg_ftype.  Rename parameters to shorter names.
-
-2011-05-27  Pedro Alves  <pedro at codesourcery.com>
-
-	* continuations.c (make_continuation): Make it return void.
-	(do_my_continuations): Rename to ...
-	(do_my_continuations_1): ... this.  Remove old_chain parameter and
-	adjust.
-	(do_my_continuations): New.
-	(discard_my_continuations): Rename to ...
-	(discard_my_continuations_1): ... this.  Remove old_chain
-	parameter and adjust.
-	(discard_my_continuations): New.
-	(add_inferior_continuation): Simplify.
-	(do_all_inferior_continuations): Reimplement on top
-	do_my_continuations.
-	(discard_all_inferior_continuations): Simplify.
-	(add_continuation): Simplify.
-	(do_all_continuations_ptid): Simplify.
-	(discard_all_continuations_thread_callback): Simplify.
-	(add_intermediate_continuation): Simplify.
-	(discard_all_intermediate_continuations_thread_callback):
-	Simplify.
-
-2011-05-27  Pedro Alves  <pedro at codesourcery.com>
-
-	* utils.c (struct continuation, add_continuation)
-	(add_inferior_continuation)
-	(do_all_inferior_continuations, discard_all_inferior_continuations)
-	(restore_thread_cleanup, do_all_continuations_ptid)
-	(do_all_continuations_thread_callback)
-	(do_all_continuations_thread, do_all_continuations)
-	(discard_all_continuations_thread_callback)
-	(discard_all_continuations_thread, discard_all_continuations)
-	(add_intermediate_continuation)
-	(do_all_intermediate_continuations_thread_callback)
-	(do_all_intermediate_continuations_thread)
-	(do_all_intermediate_continuations)
-	(discard_all_intermediate_continuations_thread_callback)
-	(discard_all_intermediate_continuations_thread)
-	(discard_all_intermediate_continuations): Move to ...
-	* continuations.c: ... this new file, and adjust to no longer
-	implement continuations on top of cleanups.
-	* Makefile.in (SFILES): Add continuations.c.
-	(COMMON_OBS): Add continuations.o.
-
-2011-05-26  Pedro Alves  <pedro at codesourcery.com>
-
-	* inferior.h (enum exec_direction_kind): Delete EXEC_ERROR.
-	* infrun.c (show_exec_direction_func): Don't handle EXEC_ERROR.
-	Internal error on invalid values.
-	* reverse.c: Don't handle EXEC_ERROR.
-	* mi/mi-main.c: Don't handle EXEC_ERROR.
-
-2011-05-26  Pedro Alves  <pedro at codesourcery.com>
-
-	* record.c: Include event-loop.h, inf-loop.h.
-	(record_beneath_to_async): New global.
-	(tmp_to_async): New global.
-	(record_async_inferior_event_token): New global.
-	(record_open_1): Don't error out if async is enabled.
-	(record_open): Handle to_async.  Create an async event source in
-	the event loop.
-	(record_close): Delete the async event source.
-	(record_resumed): New global.
-	(record_execution_dir): New global.
-	(record_resume, record_core_resume): Set them.  Register the
-	target on the event loop.
-	(record_wait): Rename to ...
-	(record_wait_1): ... this.  Add more debug output.  Handle
-	TARGET_WNOHANG, and the target beneath returning
-	TARGET_WAITKIND_IGNORE.
-	(record_wait): Reimplement on top of record_wait_1.
-	(record_async_mask_value): New global.
-	(record_async, record_async_mask, record_can_async_p)
-	(record_is_async_p, record_execution_direction): New functions.
-	(init_record_ops, init_record_core_ops): Install new methods.
-	* infrun.c (fetch_inferior_event): Temporarily switch the global
-	execution direction to the direction the target was going.
-	(execution_direction): Change type to int.
-	* target.c (default_execution_direction): New function.
-	(update_current_target): Inherit and de_fault
-	to_execution_direction.
-	* target.h (struct target_ops) <to_execution_direction>: New
-	field.
-	(target_execution_direction): New macro.
-	* inferior.h (execution_direction): Change type to int.
-
-2011-05-26  Pedro Alves  <pedro at codesourcery.com>
-
-	* infcall.c (call_function_by_hand): Don't allow calling functions
-	in reverse execution mode.
-
-2011-05-26  Pedro Alves  <pedro at codesourcery.com>
-
-	* infcmd.c (finish_command): Allow async finish in reverse.
-
-2011-05-26  Yao Qi  <yao at codesourcery.com>
-
-	* gdb_thread_db.h: Delete.  Move to ...
-	* common/gdb_thread_db.h: ... here.
-
-2011-05-26  Pedro Alves  <pedro at codesourcery.com>
-
-	* infcmd.c (finish_backward): Set a step-resume breakpoint at the
-	function's entry point instead of a manually managed momentary
-	breakpoint, and only ever issue one proceed call.
-	* infrun.c (handle_inferior_event) <BPSTAT_WHAT_STEP_RESUME>: If
-	doing a reverse-finish, switch to stepi mode, to do another step.
-	(insert_step_resume_breakpoint_at_sal): Make public.
-	(normal_stop): No need to save function value return registers if
-	going reverse.
-	* inferior.h (insert_step_resume_breakpoint_at_sal): Declare.
-
-2011-05-26  Pedro Alves  <pedro at codesourcery.com>
-
-	* breakpoint.h (enum bptype) <bp_hp_step_resume>: New.
-	(enum bpstat_what_main_action): Move BPSTAT_WHAT_STEP_RESUME
-	before BPSTAT_WHAT_STOP_SILENT.  Add BPSTAT_WHAT_HP_STEP_RESUME
-	at the end.
-	* breakpoint.c (update_breakpoints_after_exec): Also delete hp
-	step-resume breakpoints.
-	(print_it_typical): Handle bp_hp_step_resume.
-	(bpstat_what): Ditto.
-	(bptype_string): Ditto.
-	(print_one_breakpoint_location): Ditto.
-	(allocate_bp_location): Ditto.
-	(mention): Ditto.
-	(breakpoint_re_set_one): Ditto.
-	* infrun.c (handle_inferior_event): Adjust.  Split
-	BPSTAT_WHAT_STEP_RESUME handling in BPSTAT_WHAT_STEP_RESUME and
-	BPSTAT_WHAT_HP_STEP_RESUME.
-	(insert_step_resume_breakpoint_at_sal): Rename to ...
-	(insert_step_resume_breakpoint_at_sal_1): ... this.  Add bptype
-	parameter.  Handle it.
-	(insert_step_resume_breakpoint_at_sal): Reimplement on top of
-	insert_step_resume_breakpoint_at_sal_1.
-	(insert_step_resume_breakpoint_at_frame): Rename to ...
-	(insert_hp_step_resume_breakpoint_at_frame): ... this.  Adjust to
-	set a high-priority step-resume breakpoint.
-	(insert_step_resume_breakpoint_at_frame): Adjust comment.
-	(insert_step_resume_breakpoint_at_caller): Ditto.
-
-2011-05-26  Pedro Alves  <pedro at codesourcery.com>
-
-	* breakpoint.c (iterate_over_related_breakpoints): New.
-	(do_map_delete_breakpoint): New.
-	(delete_command): Pass do_map_delete_breakpoint to
-	map_breakpoint_numbers.
-	(do_disable_breakpoint): New.
-	(do_map_disable_breakpoint): Iterate over the breakpoint's related
-	breakpoints.
-	(do_enable_breakpoint): Rename to ...
-	(enable_breakpoint_disp): ... this.
-	(enable_breakpoint): Adjust.
-	(do_enable_breakpoint): New.
-	(enable_once_breakpoint): Delete.
-	(do_map_enable_breakpoint): New.
-	(do_map_enable_once_breakpoint): New.
-	(enable_once_command, enable_delete_command)
-	(delete_trace_command): Iterate over the breakpoint's related
-	breakpoints.
-
-2011-05-26  Pedro Alves  <pedro at codesourcery.com>
-
-	* alpha-tdep.c (alpha_cannot_fetch_register): Don't return true
-	for ALPHA_ZERO_REGNUM.
-	(alpha_supply_int_regs): Explicitly supply zero as the value for
-	ALPHA_ZERO_REGNUM in the register cache.
-	* alpha-nat.c (fetch_osf_core_registers): Ditto.
-
-2011-05-26  Yao Qi  <yao at codesourcery.com>
-
-	* gdb/gdb_thread_db.h: Remove HAVE_UINTPTR_T.
-
-2011-05-26  Tristan Gingold  <gingold at adacore.com>
-
-	* symfile.h (struct dwarf2_section_names): New type.
-	(struct dwarf2_debug_sections): New type.
-	(dwarf2_has_info): Add parameter.
-	* dwarf2read.c (dwarf2_elf_names): New variable.
-	(INFO_SECTION, ABBREV_SECTION, LINE_SECTION, LOC_SECTION)
-	(MACINFO_SECTION, STR_SECTION, RANGES_SECTION, TYPES_SECTION)
-	(FRAME_SECTION, EH_FRAME_SECTION, GDB_INDEX_SECTION): Remove.
-	(dwarf2_has_info): Add names parameter.  Pass names
-	to dwarf2_locate_sections.
-	(section_is_p): Rewrite using the names parameter.
-	(dwarf2_locate_sections): Use section names from the names parameter.
-	* coffread.c (coff_symfile_read): Adjust call to dwarf2_has_info.
-	* elfread.c (read_psyms): Ditto.
-	* machoread.c (macho_symfile_read): Ditto.
-
-2011-05-25  Andreas Schwab  <schwab at redhat.com>
-
-	PR gdb/8677
-	* event-loop.c (handle_file_event): Don't handle POLLHUP as error.
-
-2011-05-24  Keith Seitz  <keiths at redhat.com>
-
-	PR breakpoint/12803
-	* linespec.c (keep_name_info): Add handling for "volatile" keyword.
-	(decode_compound): Unconditionally call	keep_name_info.
-
-2011-05-24  Pedro Alves  <pedro at codesourcery.com>
-
-	* breakpoint.c (watchpoint_check): If the watchpoint went out of
-	scope, clear its command list.
-	(map_breakpoint_numbers): Don't walk the related breakpoints list
-	of each breakpoint.
-
-2011-05-24  Tom Tromey  <tromey at redhat.com>
-
-	* MAINTAINERS: Move Jim Blandy to past maintainers.
-
-2011-05-24  Tristan Gingold  <gingold at adacore.com>
-
-	* symfile.h (enum dwarf2_section_enum): New type.
-	(dwarf2_get_section_info): New prototype.
-	* dwarf2read.c (dwarf2_get_section_info): Replace parameter
-	section_name by sect.  Use a switch to select the info.
-	* dwarf2-frame.c (warf2_get_section_info): Remove prototype.
-	(dwarf2_build_frame_info): Adjust calls to dwarf2_get_section_info.
-
-2011-05-24  Pedro Alves  <pedro at codesourcery.com>
-
-	* solib-svr4.c (svr4_solib_create_inferior_hook): Skip setting
-	shared library event breakpoint if there's no execution.
-
-2011-05-24  Thiago Jung Bauermann  <bauerman at br.ibm.com>
-
-	* breakpont.c (remove_hw_watchpoints): Remove unused function.
-	* breakpoint.h remove_hw_watchpoints(): Remove prototype.
-
-2011-05-23  Tom Tromey  <tromey at redhat.com>
-
-	* c-lang.c (evaluate_subexp_c): Use expect_type if it is not
-	NULL.
-
-2011-05-23  Doug Evans  <dje at google.com>
-
-	* python/lib/gdb/printing.py (register_pretty_printer): Add missing
-	entry for RuntimeError to doc string.
-
-2011-05-23  Jerome Guitton  <guitton at adacore.com>
-
-	* sparc-tdep.c (sparc_skip_stack_check): Recognize a new instruction
-	sequence for probing loops.
-
-2011-05-23  Pedro Alves  <pedro at codesourcery.com>
+	* arm-tdep.c: Include "remote.h" and "features/arm-with-m-fpa-layout.c".
+	(arm_register_g_packet_guesses): New function.
+	(arm_gdbarch_init): Don't force a target description with
+	registers when the executable is detected as M-profile.  Instead
+	set gdbarch->tdep->is_m.  Register `g' packet guesses.
+	(_initialize_arm_tdep): Initialize the new target description.
+	* features/arm-with-m-fpa-layout.xml: New description.
+	* features/arm-with-m-fpa-layout.c: New, generated.
 
-	* infrun.c (user_visible_resume_ptid): Fix typos in describing
-	comment.
-
-2011-05-21  Mark Kettenis  <kettenis at gnu.org>
-
-	* sparc-nat.c (sparc_fetch_inferior_registers): Explicitly supply
-	zero as the value for %g0 in the register cache.
-	* sparc-tdep.c (sparc32_supply_gregset): Likewise.
-	* sparc64-tdep.c (sparc64_supply_gregset): Likewise.
-
-2011-05-20  Pedro Alves  <pedro at codesourcery.com>
-
-	* infrun.c (proceed): Set previous_inferior_ptid here.
-	(init_wait_for_inferior): Initialize previous_inferior_ptid from
-	inferior_ptid, not null_ptid.
-	(wait_for_inferior): Don't initialize previous_inferior_ptid here.
-	(fetch_inferior_event): Nor here.
-
-2011-05-20  Pedro Alves  <pedro at codesourcery.com>
-
-	* inf-loop.c (inferior_event_handler): Only output a message if
-	verbose.
-
-2011-05-20  Luis Machado  <lgustavo at codesourcery.com>
-
-	* MAINTAINERS: Update my e-mail address.
-
-2011-05-20  Pedro Alves  <pedro at codesourcery.com>
-
-	* infrun.c (proceed): Switch the inferior event loop to
-	INF_EXEC_COMPLETE if the target refused to resume from a
-	vfork/fork.
-
-2011-05-20  Pedro Alves  <pedro at codesourcery.com>
-
-	* infcmd.c: Include "inf-loop.h".
-	(step_once): When stepping into an inline subroutine, pretend the
-	target has run.  If the target can async, switch the inferior
-	event loop to INF_EXEC_COMPLETE.
-	* inferior.h (user_visible_resume_ptid): Declare.
-	* infrun.c (user_visible_resume_ptid): New function, factored out
-	from `resume'.
-	(resume): Use it.
-	* mi/mi-main.c (mi_execute_async_cli_command): Remove assertion
-	that the current thread is running.  Merge async and sync
-	branches.
-
-2011-05-20  Pedro Alves  <pedro at codesourcery.com>
-
-	* infcmd.c (step_1): Simplify synchronous case.
-
-2011-05-20  Pedro Alves  <pedro at codesourcery.com>
-
-	* tracepoint.c: Include exceptions.h.
-	(TFILE_PID): Move higher in file.
-	(tfile_open): Delay pushing the tfile target until we're assured
-	the tfile header is present in the file.  Wrap reading the initial
-	newline-terminated lines in TRY_CATCH.  Pop the target if the
-	initial setup failed.  Add the tfile's thread immediately
-	aftwards, before any non-essential setup.  Don't skip
-	post_create_inferior if there are no traceframes present in the
-	file.
-	(tfile_close): Remove redundant check for null before xfree call.
-	(tfile_thread_alive): New function.
-	(init_tfile_ops): Register it as to_thread_alive callback.
-
-2011-05-20  Pedro Alves  <pedro at codesourcery.com>
-
-	* tracepoint.c (tfile_open): Delete #if 0'd code.
-
-2011-05-20  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix -readnow for -gdwarf-4 unused type units.
-	* dwarf2read.c (struct signatured_type): Remove the field offset.
-	(create_signatured_type_table_from_index): Remove its initialization.
-	(create_debug_types_hash_table): Likewise.  Initialize per_cu.offset
-	instead.  Add a complaint call.
-	(process_psymtab_comp_unit): Change assignment to gdb_assert.
-	(process_type_comp_unit, lookup_die_type, dump_die_shallow)
-	(lookup_signatured_type_at_offset, read_signatured_type)
-	(write_one_signatured_type): Update the field for per_cu.
-
-2011-05-19  Tom Tromey  <tromey at redhat.com>
-
-	* python/py-inferior.c (python_inferior_exit): Use
-	target_gdbarch.
-	(python_on_resume): Likewise.
-
-2011-05-19  Matt Rice  <ratmice at gmail.com>
+2012-03-15  Joel Brobecker  <brobecker at adacore.com>
 
-        * breakpoint.c (bpstat_do_actions_1): Call prevent_dont_repeat.
+	* breakpoint.c (breakpoint_xfer_memory): Add assertion.
+	Update function description.
+	(insert_bp_location): Do not wipe bl->target_info out.
+	* mem-break.c: #include "gdb_string.h".
+	(default_memory_insert_breakpoint): Do not call target_read_memory
+	with a pointer to the breakpoint's shadow_contents buffer.  Use
+	a local buffer instead.
+	* m32r-tdep.c (m32r_memory_insert_breakpoint): Ditto.
 
-2011-05-19  Hui Zhu  <teawater at gmail.com>
+2012-03-15  Tom Tromey  <tromey at redhat.com>
 
-	* tracepoint.c (tfile_trace_find): Return directly when num is -1.
+	* NEWS: Mention "info vtbl", not "info vtable".
+	* cp-support.c (info_vtbl_command): Fix comment.
+	(_initialize_cp_support): Fix text.
 
-2011-05-19  Hui Zhu  <teawater at gmail.com>
+2012-03-15  Tom Tromey  <tromey at redhat.com>
 
-	* xcoffread.c (read_xcoff_symtab): Initialize fcn_aux_saved.
-
-2011-05-18  Tom Tromey  <tromey at redhat.com>
-
-	* dwarf2read.c (dwarf2_add_field): Constify.
-	* value.c (value_static_field): Constify.
-	* gdbtypes.h (struct main_type) <field.field_location.physname>:
-	Now const.
-	* ax-gdb.c (gen_static_field): Constify
-
-2011-05-18  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* linux-nat.c (kill_callback): Use SIGKILL first.
-
-2011-05-18  Joel Brobecker  <brobecker at adacore.com>
-
-	* ada-lang.c (print_it_exception): Avoid use of sprintf.
-
-2011-05-18  Tom Tromey  <tromey at redhat.com>
-
-	* value.c (value_fn_field): Constify.
-	* symtab.c (gdb_mangle_name): Constify.
-	* stabsread.c (update_method_name_from_physname): Make 'physname'
-	argument const.
-	* p-typeprint.c (pascal_type_print_method_args): Make arguments
-	const.  Use explicit fputc_filtered loop.
-	(pascal_type_print_base): Constify.
-	* p-lang.h (pascal_type_print_method_args): Update.
-	* linespec.c (add_matching_methods): Constify.
-	(add_constructors): Likewise.
-	* jv-typeprint.c (java_type_print_base): Constify.
-	* gdbtypes.h (struct cplus_struct_type)
-	<fn_fieldlist.fn_field.physname>: Now const.
-	* dwarf2read.c (compute_delayed_physnames): Constify.
-	(dwarf2_add_member_fn): Likewise.
-	* c-typeprint.c (c_type_print_base): Constify.  Use cleanups.
-
-2011-05-18  Pedro Alves  <pedro at codesourcery.com>
-
-	* infrun.c (resume): Mention which is the current thread, and its
-	current PC in debug output.
-	(prepare_to_proceed): Mention the thread switching in debug
-	output.
-
-2011-05-18  Tom Tromey  <tromey at redhat.com>
+	* cp-valprint.c (cp_print_value_fields): Use
+	print_function_pointer_address for vtable slot.
 
-	* linux-thread-db.c (try_thread_db_load_from_pdir_1): Fix absolute
-	path check.  Use xmalloc and cleanups.
-	(try_thread_db_load_from_dir): Use xmalloc and cleanups.
+2012-03-15  Tom Tromey  <tromey at redhat.com>
 
-2011-05-17  Tom Tromey  <tromey at redhat.com>
+	* gnu-v3-abi.c (struct value_and_voffset): New.
+	(hash_value_and_voffset, eq_value_and_voffset)
+	(compare_value_and_voffset, compute_vtable_size)
+	(print_one_vtable, gnuv3_print_vtable): New functions.
+	(init_gnuv3_ops): Initialize 'print_vtable' field.
+	* cp-support.c (info_vtbl_command): New function.
+	(_initialize_cp_support): Add "info vtbl".
+	* cp-abi.h (cplus_print_vtable): Declare.
+	(struct cp_abi_ops) <print_vtable>: New field.
+	* cp-abi.c (cplus_print_vtable): New function.
+	* NEWS: Update.
 
-	* cp-valprint.c (cp_print_value_fields): Catch errors from
-	value_static_field.
-
-2011-05-17  Tom Tromey  <tromey at redhat.com>
-
-	* dwarf2read.c (dwarf2_get_die_type): Call
-	get_die_type_at_offset.
-	* dwarf2expr.c (dwarf_get_base_type): Handle NULL return from
-	get_base_type function.
+2012-03-15  Tom Tromey  <tromey at redhat.com>
 
-2011-05-17  Tomas Martinec  <fyzmat at gmail.com>
+	* d-lang.c (d_language_defn) <la_iterate_over_symbols>: Set to
+	iterate_over_symbols.
 
-	* infrun.c (handle_inferior_event) <handling deferred step>: Clear
-	trap_expected.
+2012-03-14  Doug Evans  <dje at google.com>
 
-2011-05-16  Doug Evans  <dje at google.com>
-
-	* python/py-auto-load.c (source_section_scripts): Mention objfile
-	name in warning.
-
-2011-05-15  Doug Evans  <dje at google.com>
-
-	* linux-thread-db.c (try_thread_db_load_from_pdir_1): New function.
-	(try_thread_db_load_from_pdir): Call it.  If unable to find
-	libthread_db in directory of libpthread, see if we're looking at
-	the separate-debug-info copy.
-
-	* python/py-autoload.c (print_script): Print "Missing" instead of
-	"No" for missing scripts.
-	(info_auto_load_scripts): Tweak "Loaded" column to fit "Missing".
-
-2011-05-13  Doug Evans  <dje at google.com>
-
-	* ui-file.c (stdio_file_write_async_safe): Add comment.
-
-2011-05-14  Hui Zhu  <teawater at gmail.com>
-
-	* ui-file.c (stdio_file_write_async_safe): Add empty check for build.
-
-2011-05-13  Doug Evans  <dje at google.com>
-
-	Support $pdir and $sdir in libthread-db-search-path.
-	* NEWS: Mention $sdir,$pdir.
-	* gdb_thread_db.h (LIBTHREAD_DB_SEARCH_PATH): Add $sdir:$pdir.
-	* linux-thread-db.c (try_thread_db_load_from_pdir): New function.
-	(try_thread_db_load_from_sdir): New function.
-	(try_thread_db_load_from_dir): New function.
-	(thread_db_load_search): Handle $pdir, $sdir.  Remove trying of
-	system directories if search of libthread-db-search-path fails,
-	that is now done via $sdir.
-	(has_libpthread): New function.
-	(thread_db_load): Remove search for libthread_db in directory of
-	libpthread, that is now done via $pdir.
-
-	* NEWS: Mention "info auto-load-scripts".
-	* python/py-auto-load.c (struct auto_load_pspace_info): New member
-	script_not_found_warning_printed.
-	(init_loaded_scripts_info): Renamed from create_loaded_scripts_hash,
-	all callers updated.  Initialize script_not_found_warning_printed.
-	(get_auto_load_pspace_data_for_loading): New function.
-	(maybe_add_script): New function.
-	(source_section_scripts): Simplify.  Only print one warning regardless
-	of the number of auto-load scripts not found.
-	(clear_section_scripts): Clear script_not_found_warning_printed.
-	(auto_load_objfile_script): Record script in hash table.
-	(count_matching_scripts): New function.
-	(maybe_print_script): Renamed from maybe_print_section_script, all
-	callers updated.  Rewrite to use ui_out_*.
-	(info_auto_load_scripts): Renamed from
-	maintenance_print_section_scripts, all callers updated.
-	(gdbpy_initialize_auto_load): "maintenance print section-scripts"
-	renamed as "info auto-load-scripts".
-
-2011-05-13  Tom Tromey  <tromey at redhat.com>
-
-	* dwarf2expr.c (read_uleb128): Cast intermediate result.
-	(read_sleb128): Likewise.
-
-2011-05-13  Tom Tromey  <tromey at redhat.com>
-
-	* dwarf2loc.c (disassemble_dwarf_expression): Fix instruction
-	offset display.
-
-2011-05-13  Doug Evans  <dje at google.com>
-
-	* linux-nat.c (debug_linux_nat_async): Delete.
-	Replace all references to use debug_linux_nat instead.
-	(show_debug_linux_nat_async): Delete.
-	(sigchld_handler): Call ui_file_write_async_safe instead of
-	fprintf_unfiltered.
-	(_initialize_linux_nat): Remove `set debug lin-lwp-async'.
-	* ui-file.c (struct ui_file): New member to_write_async_safe.
-	(null_file_write_async_safe): New function.
-	(ui_file_write_async_safe): New function.
-	(set_ui_file_write_async_safe): New function.
-	(ui_file_new): Initialize to_write_async_safe.
-	(stdio_file_write_async_safe): New function.
-	(struct stdio_file): New member fd.
-	(stdio_file_new): Initialize to_write_async_safe, fd.
-	(stdio_file_read, stdio_file_isatty): New stdio->fd instead of calling
-	fileno.
-	* ui-file.h (ui_file_write_async_safe_ftype): New typedef.
-	(set_ui_file_write_async_safe): Declare.
-	(ui_file_write_async_safe): Declare.
-
-2011-05-13  Tom Tromey  <tromey at redhat.com>
-
-	* utils.c (do_value_free): New function.
-	(make_cleanup_value_free): Likewise.
-	* dwarf2loc.c (dwarf2_evaluate_loc_desc_full): Handle value
-	freeing correctly.
-	(dwarf2_loc_desc_needs_frame): Call
-	make_cleanup_value_free_to_mark.
-	* dwarf2expr.h (struct dwarf_expr_context) <mark>: Remove field.
-	* dwarf2expr.c (free_dwarf_expr_context): Don't call
-	value_free_to_mark.
-	(new_dwarf_expr_context): Don't call value_mark.
-	* dwarf2-frame.c (execute_stack_op): Call
-	make_cleanup_value_free_to_mark.
-	* defs.h (make_cleanup_value_free): Declare.
-
-2011-05-13  Thiago Jung Bauermann  <bauerman at br.ibm.com>
-
-	* mi/mi-main.c (mi_cmd_execute): Use cleanup from
-	prepare_execute_command.
-	* top.c (prepare_execute_command): Return cleanup.
-	(execute_command): Use cleanup from prepare_execute_command.
-	* top.h (prepare_execute_command): Change prototype to return
-	cleanup.
-	* defs.h (struct value): Add opaque declaration.
-	(make_cleanup_value_free_to_mark): Add prototype.
-	* utils.c (do_value_free_to_mark): New function.
-	(make_cleanup_value_free_to_mark): Likewise.
-
-2011-05-12  Tom Tromey  <tromey at redhat.com>
-
-	* dwarf2expr.c (execute_stack_op) <DW_OP_shr>: Unconditionally
-	cast left-hand-side to unsigned.
-
-2011-05-12  Tom Tromey  <tromey at redhat.com>
-
-	PR gdb/12617:
-	* value.h (value_from_contents): Declare.
-	* value.c (value_from_contents): New function.
-	* dwarf2read.c (dwarf_stack_op_name): Add new values.
-	(dwarf2_get_die_type): New function.
-	* dwarf2loc.c (dwarf_expr_get_base_type): New function.
-	(allocate_piece_closure): Acquire reference to values.
-	(read_pieced_value): Update for value-based expressions.
-	(write_pieced_value): Likewise.
-	(free_pieced_value_closure): Call value_free as needed.
-	(dwarf2_evaluate_loc_desc_full): Set get_base_type field.
-	Update for value-based expressions.
-	* dwarf2loc.h (dwarf2_get_die_type): Declare.
-	* dwarf2expr.h (struct dwarf_stack_value) <value>: Change type.
-	<get_base_type>: New field.
-	(struct dwarf_expr_piece) <v.value>: Change type.
-	<v.regno>: New field.
-	(struct dwarf_expr_context) <mark>: New field.
-	(dwarf_expr_piece, dwarf_expr_fetch): Update.
-	(dwarf_expr_pop, dwarf_expr_push): Remove.
-	(dwarf_expr_push_address): Declare.
-	* dwarf2expr.c (dwarf_arch_cookie): New global.
-	(struct dwarf_gdbarch_types): New.
-	(dwarf_gdbarch_types_init, dwarf_expr_address_type): New
-	functions.
-	(dwarf_expr_push): Change type of 'value' argument.  Update.  Now
-	static.
-	(dwarf_expr_push_address): New function.
-	(dwarf_expr_pop): Now static.
-	(dwarf_expr_fetch): Change return type.
-	(dwarf_require_integral): New function.
-	(dwarf_expr_fetch): Simplify.
-	(add_piece): Update.
-	(base_types_equal_p, dwarf_get_base_type, get_unsigned_type): New
-	functions.
-	(execute_stack_op) <sign_ext>: Remove.
-	Use values for DWARF stack.
-	<DW_OP_GNU_const_type, DW_OP_GNU_deref_type,
-	DW_OP_GNU_regval_type, DW_OP_GNU_convert, DW_OP_GNU_reinterpret>:
-	New cases.
-	(_initialize_dwarf2expr): New function.
-	(add_piece): Update.
-	(new_dwarf_expr_context): Set new field.
-	(free_dwarf_expr_context): Call value_free_to_mark.
-	* dwarf2-frame.c (no_base_type): New function.
-	(execute_stack_op): Set get_base_type field.  Update.
-
-2011-05-12  Tom Tromey  <tromey at redhat.com>
-
-	* dwarf2read.c (read_common_block): Fix formatting.
-
-2011-05-12  Kwok Cheung Yeung  <kcy at codesourcery.com>
-
-	* breakpoint.c (disable_breakpoint): Disable all locations
-  	associated with a tracepoint on target if a trace experiment is
-	running.
- 	(disable_command): Disable a specific tracepoint location on target if
- 	a trace	experiment is running.
- 	(do_enable_breakpoint): Enable all locations associated with a
- 	tracepoint on target if a trace experiment is running.
- 	(enable_command) Enable a specific tracepoint location on target if a
- 	trace experiment is running.
- 	* target.c (update_current_target): Add INHERIT and de_fault clauses for
- 	to_supports_enable_disable_tracepoint, to_enable_tracepoint and
-	to_disable_tracepoint.
- 	* target.h: Add declaration of struct bp_location.
- 	(struct target_ops): Add new functions
-	to_supports_enable_disable_tracepoint, to_enable_tracepoint and
- 	to_disable_tracepoint to target operations.
-	(target_supports_enable_disable_tracepoint): New macro.
- 	(target_enable_tracepoint): New macro.
- 	(target_disable_tracepoint): New macro.
- 	* remote.c (struct remote_state): Add new field.
-	(remote_enable_disable_tracepoint_feature): New.
-	(remote_protocol_features): Add new entry.
-	(remote_supports_enable_disable_tracepoint): New.
-	(remote_enable_tracepoint): New.
- 	(remote_disable_tracepoint): New.
- 	(init_remote_ops): Add remote_enable_tracepoint,
-	remote_disable_tracepoint and remote_supports_enable_disable_tracepoint
-	to remote operations.
- 	* tracepoint.c (start_tracing): Allow tracing to start without any
- 	tracepoints enabled with just a warning if they can be re-enabled
-	later.
- 	* NEWS: Add news item for the new behaviour of the enable and disable
- 	GDB commands when applied to tracepoints.
- 	Add news items for the new remote packets QTEnable and QTDisable.
-
-2011-05-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* dwarf2read.c (dwarf_stack_op_name): Add DW_OP_GNU_encoded_addr,
+	DW_OP_GNU_parameter_ref.
 
-	* config.in: Regenerate.
-	* configure: Regenerate.
-	* configure.ac <--with-system-readline> (for readline_echoing_p):
-	Remove the test.
-	* tui/tui-io.c (tui_old_readline_echoing_p): Rename to ...
-	(tui_old_rl_echoing_p): ... here.
-	(tui_setup_io): Rename extern declaration readline_echoing_p to
-	_rl_echoing_p.  Adjust assignments for the both renames.
+2012-03-14  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-05-11  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+	Fix double prompt of 'interpreter-exec mi'.
+	* mi/mi-interp.c (mi_execute_command_input_handler): New prototype.
+	(mi_interpreter_resume): use it.
+	(mi_execute_command_input_handler): New function.
+	* mi/mi-main.c (mi_execute_command): Move prompt printing to
+	mi_execute_command_input_handler.
 
-	* symtab.c (lookup_symtab): Run cleanup before returning.
+2012-03-13  Josh Matthews  <josh at joshmatthews.net>  (tiny change)
 
-2011-05-11  Tom Tromey  <tromey at redhat.com>
+	* darwin-nat-info.c (_initialize_darwin_info_commands): Add
+	prototype.
+	(darwin_debug_port_info): Make static.
+	* darwin-nat.c (_initialize_darwin_inferior): Add prototype.
+	* machoread.c (_initialize_machoread): Add prototype.
+	* i386-darwin-nat.c (i386_darwin_dr_set, i386_darwin_dr_get)
+	(i386_darwin_set_control, i386_darwin_get_control)
+	i386_darwin_dr_set_addr, i386_darwin_get_addr)
+	i386_darwin_get_status, i386_darwin_get_control):
+	Comment out with HW_WATCHPOINT_NOT_YET_ENABLED macro.
 
-	* dwarf2read.c (handle_data_member_location): New function.
-	(dwarf2_add_field): Use it.
-	(read_common_block): Likewise.
+2012-03-13  Joel Brobecker  <brobecker at adacore.com>
 
-2011-05-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* ax-gdb.c (gen_usual_unary): Remove special handling of
+	enum and bool types.
 
-	Make addrs->SECTINDEX always defined.
-	* symfile.c (relative_addr_info_to_section_offsets): Check for
-	SECTINDEX -1, not for zero ADDR.
-	(addrs_section_compar): Remove checking for invalid SECTINDEX.
-	(addr_info_make_relative): Set SECTINDEX to -1 for unmatched entries.
-	* symfile.h (struct section_addr_info) <sectindex>: Update the comment
-	on its validity.
+2012-03-13  Joel Brobecker  <brobecker at adacore.com>
 
-2011-05-10  Doug Evans  <dje at google.com>
+	* ax-gdb.c (gen_fetch): Add handling for TYPE_CODE_RANGE types.
 
-	* linux-thread-db.c: Whitespace cleanup.
-	(try_thread_db_load_1): Fix comment.
+2012-03-13  Joel Brobecker  <brobecker at adacore.com>
 
-	* linux-thread-db.c (set_libthread_db_search_path): New function.
-	(_initialize_thread_db): Add setter for libthread-db-search-path.
+	* aix-thread.c (supply_fprs): Make more consistent with fill_fprs.
 
-2011-05-09  Doug Evans  <dje at google.com>
+2012-03-13  Chris January  <chris.january at allinea.com>
 
-	* NEWS: Mention --with-iconv-bin.
-	* configure.ac: New option --with-iconv-bin.
-	* configure: Regenerate.
-	* config.in: Regenerate.
-	* defs.h (relocate_gdb_directory): Declare.
-	* main.c (relocate_gdb_directory): Renamed from relocate_directory,
-	removed progname parameter, and exported.  All callers updated.
-	* charset.c (find_charset_names): Use --with-iconv-bin if specified.
+	* aix-thread.c (fill_sprs): Store the floating point registers
+	at the correct offsets into vals.
 
-	* linux-nat.c (lin_lwp_attach_lwp): For !WIPSTOPPED case,
-	adding missing call to restore_child_signals_mask.
+2012-03-13  Doug Evans  <dje at google.com>
 
-2011-05-09  Pedro Alves  <pedro at codesourcery.com>
+	* NEWS: Mention symbol-reloading has been deleted.
+	* symfile.c (symbol_reloading): Delete.
+	(show_symbol_reloading): Delete.
+	(_initialize_symfile): Delete set/show symbol-reloading.
 
-	* inferior.h (wait_for_inferior): Remove `thread_exec_as_sigtrap'
-	parameter.
-	* infrun.c (proceed, start_remote): Adjust.
-	(wait_for_inferior): Remove `thread_exec_as_sigtrap' parameter,
-	and adjust to not handle it.
-	* solib-irix.c (irix_solib_create_inferior_hook): Adjust.
-	* solib-osf.c (osf_solib_create_inferior_hook): Adjust.
-	* solib-sunos.c (sunos_solib_create_inferior_hook): Adjust.
-	* solib-svr4.c (svr4_solib_create_inferior_hook): Adjust.
-	* windows-nat.c (do_initial_windows_stuff): Adjust.
-	* infcmd.c (attach_command): Adjust.
-	(notice_new_inferior): Adjust.
+	* dwarf2read.c (load_partial_comp_unit): Defer adding cu to
+	read_in_chain until we have successfully read it in.
+	(load_full_comp_unit): Ditto.
+	(read_signatured_type): Add comment.
 
-2011-05-06  Ulrich Weigand  <uweigand at de.ibm.com>
+2012-03-13  Chris January  <chris.january at allinea.com>
 
-	* ppc-linux-tdep.c (ppu2spu_prev_register): Handle pseudo registers.
-	(ppu2spu_unwind_register): Mark pseudo registers unavailable.
-	* spu-tdep.c (op_selb): Use correct value.
+	* stabsread.c (fix_common_block): Change type of valu argument
+	to CORE_ADDR.
 
-2011-05-06  Ulrich Weigand  <uweigand at de.ibm.com>
+2012-03-13  Chris January  <chris.january at allinea.com>
 
-	* spu-linux-nat.c (spu_symbol_file_add_from_memory): Add NULL
-	"parent" parameter to symbol_file_add_from_bfd call.
+	* rs6000-tdep.c (skip_prologue): Support the oril r29, r1, 0x0
+	instruction.
 
-2011-05-06  Sergio Durigan Junior  <sergiodj at linux.vnet.ibm.com>
-	    Thiago Jung Bauermann  <bauerman at br.ibm.com>
+2012-03-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	Implement support for PowerPC BookE masked watchpoints.
-	* NEWS: Mention masked watchpoint support.  Create "Changed commands"
-	section.
-	* breakpoint.h (struct breakpoint_ops) <works_in_software_mode>: New
-	method.  Initialize to NULL in all existing breakpoint_ops instances.
-	(struct breakpoint) <hw_wp_mask>: New field.
-	* breakpoint.c (is_masked_watchpoint): Add prototype.
-	(update_watchpoint): Don't set b->val for masked watchpoints.  Call
-	breakpoint's breakpoint_ops.works_in_software_mode if available.
-	(watchpoints_triggered): Handle the case of a hardware masked
-	watchpoint trigger.
-	(watchpoint_check): Likewise.
-	(works_in_software_mode_watchpoint): New function.
-	(insert_masked_watchpoint, remove_masked_watchpoint)
-	(resources_needed_masked_watchpoint)
-	(works_in_software_mode_masked_watchpoint, print_it_masked_watchpoint)
-	(print_one_detail_masked_watchpoint, print_mention_masked_watchpoint)
-	(print_recreate_masked_watchpoint, is_masked_watchpoint): New
-	functions.
-	(masked_watchpoint_breakpoint_ops): New structure.
-	(watch_command_1): Check for the existence of the `mask' parameter.
-	Set b->ops according to the type of hardware watchpoint being created.
-	* ppc-linux-nat.c (ppc_linux_insert_mask_watchpoint)
-	(ppc_linux_remove_mask_watchpoint)
-	(ppc_linux_masked_watch_num_registers): New functions.
-	(_initialize_ppc_linux_nat): Initialize to_insert_mask_watchpoint,
-	to_remove_mask_watchpoint and to_masked_watch_num_registers.
-	* target.c (update_current_target): Mention to_insert_mask_watchpoint,
-	to_remove_mask_watchpoint, and to_masked_watch_num_registers.
-	(target_insert_mask_watchpoint, target_remove_mask_watchpoint)
-	(target_masked_watch_num_registers): New functions.
-	* target.h (struct target_ops) <to_insert_mask_watchpoint>,
-	<to_remove_mask_watchpoint>, <to_masked_watch_num_registers>: New
-	methods.
-	(target_insert_mask_watchpoint, target_remove_mask_watchpoint)
-	(target_masked_watch_num_registers): Add prototypes.
-
-2011-05-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	PR 12573
-	* dwarf2read.c (struct dwarf2_cu): New field has_loclist.
-	(producer_is_gcc_ge_4_0): New function.
-	(process_full_comp_unit): Set also symtab->locations_valid.  Move the
-	symtab->language code.
-	(var_decode_location): Set cu->has_loclist.
-	* symtab.c (skip_prologue_sal): New variables saved_pc, force_skip and
-	skip.  Intialize force_skip from locations_valid.  Move the prologue
-	skipping code into two passes.
-	* symtab.h (struct symtab): Make the primary field a bitfield.  New
-	field locations_valid.
-
-2011-05-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* c-exp.y (qualified_name): Call destructor_name_p with $1.type.
-	(classify_inner_name): Call cp_lookup_nested_type with
-	yylval.tsym.type.
-	* cp-namespace.c (cp_lookup_nested_type): New variable
-	saved_parent_type.  Call CHECK_TYPEDEF for parent_type.  Call
-	type_name_no_tag_or_error with saved_parent_type.
-	* dwarf2read.c (load_partial_dies): Read in any children of
-	DW_TAG_typedef with complaint in such case.
-	* gdbtypes.c (type_name_no_tag_or_error): New function.
-	* gdbtypes.h (type_name_no_tag_or_error): New prototype.
-	* valops.c (destructor_name_p): New comment for parameter type.  Remove
-	type const.  Make dname and cp const.  Call type_name_no_tag_or_error.
-	* value.h (destructor_name_p): Remove type const.
-
-2011-05-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* symtab.c (compare_symbol_name): New function.
-	(completion_list_add_name, expand_partial_symbol_name): Call it,
-	remove the variable ncmp.
-	(default_make_symbol_completion_list_break_on): Reduce SYM_TEXT_LEN,
-	gdb_assert it.
-
-2011-05-05  Thiago Jung Bauermann  <bauerman at br.ibm.com>
-
-	Demote to sw watchpoint only in update_watchpoint.
-	* breakpoint.c (update_watchpoint): Change between software and
-	hardware watchpoint for all kinds of watchpoints, not just
-	read/write ones.  Determine b->exact value here instead of
-	in watch_command_1.  Error out if there are not enough resources
-	for a read or access hardware watchpoint.
-	(watch_command_1): Remove logic of checking whether there are
-	enough resources available, since update_watchpoint will do that
-	work now.  Don't set b->exact here.  Catch exceptions thrown by
-	update_watchpoint and delete the watchpoint.
-	(can_use_hardware_watchpoint): Remove exact_watchpoints argument.
-	Use target_exact_watchpoints instead.
-	(delete_breakpoint): Notify observers only if deleted watchpoint
-	has a breakpoint number assigned to it.
-
-2011-05-05  Janis Johnson  <janisjo at codesourcery.com>
-
-	* MAINTAINERS: Add myself as a write-after-approval maintainer.
-
-2011-05-05  Jerome Guitton  <guitton at adacore.com>
-
-	* i386-tdep.c (i386_in_stack_tramp_p, i386_stack_tramp_frame_sniffer):
-	New functions.
-	(i386_stack_tramp_frame_unwind): New static global.
-	(i386_match_pattern): New function, extracted from i386_match_insn.
-	(i386_match_insn): Use i386_match_pattern.
-	(i386_match_insn_block): New function.
-	(i386_tramp_chain_in_reg_insns)
-	(i386_tramp_chain_on_stack_insns): New static variables.
-	(i386_gdbarch_init): Add i386_stack_tramp_frame_unwind to list
-	of unwinders.
-
-2011-05-04  Joseph Myers  <joseph at codesourcery.com>
-
-	* configure.host (xscale*): Don't handle target.
-	* configure.tgt (thumb*-*-* | strongarm*-*-* | xscale-*-*): Don't
-	handle targets.
-
-2011-05-04  Yao Qi  <yao at codesourcery.com>
-
-	* gdb_wait.h: remove WAITTYPE and WCOREDUMP.
-
-2011-05-03  Joel Brobecker <brobecker at adacore.com>
-
-        Revert:
-	| 2011-03-07  Michael Snyder  <msnyder at vmware.com>
-	| * elfread.c (elf_symtab_read): Stop memory leak.
-
-2011-05-03  Pierre Muller  <muller at ics.u-strasbg.fr>
-
-	* nto-tdep.c (nto_target): Replace deprecated call to
-	cygwin_conv_to_posix_path functions by cygwin_conv_path calls.
-
-2011-05-03  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix false GCC warning.
-	* breakpoint.c (do_enable_breakpoint): Initialize orig_enable_state.
-
-2011-05-03  Thiago Jung Bauermann  <bauerman at br.ibm.com>
-
-	* breakpoint.c (update_watchpoint): Move code to change
-	the enable state of breakpoint from here ...
-	(do_enable_breakpoint): ... to here.
-
-2011-04-26  Andrew Gontarek  <andrewg at cray.com>
-
-	* valprint.c (val_print_array_elements): Fixed poor performance
-	of printing very large arrays with repeat_count_threshold set
-	to unlimited.  New comment.
-
-2011-04-29  Tom Tromey  <tromey at redhat.com>
-
-	* mi/mi-parse.c (mi_parse): Remove incorrect sizeof.
-	(mi_parse): Likewise.
-	* breakpoint.c (break_range_command): Use sizeof char*, not
-	char**.
-	(create_breakpoint): Likewise.
-	(parse_breakpoint_sals): Likewise.
-
-2011-04-29  Pedro Alves  <pedro at codesourcery.com>
-
-	* linux-nat.c (linux_child_remove_fork_catchpoint)
-	(linux_child_remove_vfork_catchpoint)
-	(linux_child_remove_exec_catchpoint): New functions.
-	(linux_target_install_ops): Install them.
-
-2011-04-29  Phil Muldoon  <pmuldoon at redhat.com>
-
-	PR mi/12531
-
-	* varobj.c (install_default_visualizer): Do not install a
-	visualizer if the varobj is CPLUS_FAKE_CHILD.
-	(construct_visualizer): Likewise.
-
-2011-04-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* symtab.c (expand_partial_symbol_name): New variable NCMP.  Support
-	case insensitive comparison.
-
-2011-04-28  Ulrich Weigand  <ulrich.weigand at linaro.org>
-
-	* infrun.c (proceed): Revert previous change.
-	(resume): Instead, handle the case of signal delivery while stepping
-	off a breakpoint location here, and only if software single-stepping
-	is used.  Handle nested signals.
-
-2011-04-28  Yao Qi  <yao at codesourcery.com>
-
-	* arm-tdep.c (copy_unmodified): Rename to ...
-	(arm_copy_unmodified): .. this.  New.
-	(copy_preload): Move common part to ...
-	(install_preload): .. this.  New.
-	(arm_copy_preload): New.
-	(copy_preload_reg): Move common part to ...
-	(install_preload_reg): ... this.  New.
-	(arm_copy_preload_reg): New.
-	(copy_b_bl_blx): Move common part to ...
-	(install_b_bl_blx): .. this.  New.
-	(arm_copy_b_bl_blx): New.
-	(copy_bx_blx_reg): Move common part to ...
-	(install_bx_blx_reg): ... this. New.
-	(arm_copy_bx_blx_reg): New.
-	(copy_alu_reg): Move common part to ...
-	(install_alu_reg): ... this.  New.
-	(arm_copy_alu_reg): New.
-	(copy_alu_shifted_reg): Move common part to ...
-	(install_alu_shifted_reg): ... this.  New.
-	(copy_ldr_str_ldrb_strb): Move common part to ...
-	(install_ldr_str_ldrb_strb): ... this.  New.
-	(arm_copy_ldr_str_ldrb_strb): New.
-	(copy_copro_load_store): Move some common part to ...
-	(install_copy_copro_load_store): ... this.  New.
-	(arm_copy_copro_load_store): New.
-	(copy_svc): Delete.
-	(arm_copy_svc): Renamed from copy_svc.
-	(copy_undef): Delete.
-	(arm_copy_undef): Renamed from copy_undef.
-	(decode_ext_reg_ld_st): Delete.
-	(arm_decode_ext_reg_ld_st): Renamed from decode_ext_reg_ld_st.
-	(decode_svc_copro): Delete.
-	(arm_decode_svc_copro): Renamed from decode_svc_copro.
-	(copy_copro_load_store, copy_alu_imm): update callers.
-	(copy_extra_ld_st, copy_block_xfer): Likewise.
-	(decode_misc_memhint_neon, decode_unconditional): Likewise.
-	(decode_miscellaneous, decode_dp_misc): Likewise.
-	(decode_ld_st_word_ubyte, decode_media): Likewise.
-	(decode_b_bl_ldmstm, decode_ext_reg_ld_st): Likewise.
-	(decode_svc_copro, decode_misc_memhint_neon): Likewise.
-	(decode_unconditional, decode_miscellaneous): Likewise.
-	(decode_media, decode_b_bl_ldmstm): Likewise.
-	(arm_process_displaced_insn): Likewise..
-	(decode_misc_memhint_neon): Delete.
-	(arm_decode_misc_memhint_neon): Renamed from decode_misc_memhint_neon.
-	(decode_miscellaneous): Delete.
-	(arm_decode_miscellaneous): Renamed from decode_miscellaneous.
-	(decode_dp_misc): Delete.
-	(arm_decode_dp_misc): Renamed from decode_dp_misc.
-	(decode_ld_st_word_ubyte): Delete.
-	(arm_decode_ld_st_word_ubyte): Renamed from decode_ld_st_word_ubyte.
-	(decode_media): Delete.
-	(arm_decode_media): Renamed from decode_media.
-	(decode_b_bl_ldmstm): Delete.
-	(arm_decode_b_bl_ldmstm): Renamed from decode_b_bl_ldmstm.
-	(decode_ext_reg_ld_st): Delete.
-	(arm_decode_ext_reg_ld_st): Renamed from decode_ext_reg_ld_st.
-	(decode_unconditional): Delete.
-	(arm_decode_unconditional): Renamed from decode_unconditional.
-
-2011-04-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Case insensitive lookups implementation.
-	* dwarf2read.c: Include ctype.h.
-	(struct mapped_index): New field version.
-	(mapped_index_string_hash): New parameter index_version.  New comment
-	for it.  Call tolower appropriately.
-	(find_slot_in_mapped_hash): New variable cmp, initialize it, use it.
-	Choose the right index version for mapped_index_string_hash.
-	(dwarf2_read_index): Support also the index version 5.  Initialize the
-	new struct mapped_index field version.
-	(hash_strtab_entry): Pass INT_MAX for the new parameter, explain why.
-	(find_slot): Explain the version needs.  Pass INT_MAX for the new
-	parameter.
-	(write_psymtabs_to_index): Produce version 5.
-	* minsyms.c (lookup_minimal_symbol): New variable cmp, initialize it,
-	use it.  New comment for SYMBOL_MATCHES_SEARCH_NAME.
-	* psymtab.c (lookup_partial_symbol): Find the
-	SYMBOL_MATCHES_SEARCH_NAME start of the found block of matching
-	entries.
-	* symtab.c (lookup_symbol_in_language): Remove the case_sensitive_off
-	NAME lowercasing.
-	(search_symbols): Pass REG_ICASE to regcomp for case_sensitive_off.
-	(completion_list_add_name): New variable ncmp, initialize it, use it.
-	* symtab.h (SYMBOL_HASH_NEXT): Always call tolower.
-	* utils.c (strcmp_iw): Support case_sensitive_off.
-	(strcmp_iw_ordered): Sort in a way compatible with case_sensitive_off.
-	New function comment part.  New variables saved_string1,
-	saved_string2 and case_pass.  Add a proper second pass.
-
-2011-04-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Replace re_comp/re_exec by regcomp/regexec.
-	* symtab.c (struct search_symbols_data): New fields preg, preg_p.
-	(search_symbols_name_matches): Use them, use regexec.
-	(search_symbols): New variable retval_chain, adjust the use of
-	old_chain against it.  Replace re_comp by regcomp.  Use the new struct
-	search_symbols_data fields, use regexec instead of re_exec.
-
-2011-04-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Format the code for the next patch.
-	* dwarf2read.c (struct mapped_index): Include delimiting newlines.
-	* utils.c (strcmp_iw_ordered): Reformat the code for the next patch.
-	New variables c1 and c2.
-
-2011-04-27  Ulrich Weigand  <ulrich.weigand at linaro.org>
-
-	* infrun.c (proceed): Do not single-step into signal delivery
-	when stepping off a breakpoint location.
-	(insert_step_resume_breakpoint_at_frame): Move prototype earlier.
-	(insert_step_resume_breakpoint_at_caller): Likewise.
-	(insert_step_resume_breakpoint_at_sal): Likewise.
-	(insert_longjmp_resume_breakpoint): Likewise.
-
-2011-04-27  Yao Qi  <yao at codesourcery.com>
-
-	* common/linux-ptrace.h: Remove include <sys/wait.h>.
-
-2011-04-27  Joel Brobecker  <brobecker at adacore.com>
-
-	* procfs.c (procfs_pass_signals): Fix advance declaration.
-
-2011-04-27  Ulrich Weigand  <ulrich.weigand at linaro.org>
-
-	* target.h (struct target_ops): Remove to_notice_signals;
-	add to_pass_signals.
-	(target_notice_signals): Remove.
-	(target_pass_signals): Add prototype.
-	* target.c (update_current_target): Remove to_notice_signals;
-	mention to_pass_signals.
-	(target_pass_signals): New function.
-	(debug_to_notice_signals): Remove.
-	(setup_target_debug): Do not install debug_to_notice_signals.
-
-	* infrun.c (signal_pass): New global.
-	(resume): Call target_pass_signals.
-	(handle_inferior_event): Report all signals while stepping over
-	non-steppable watchpoint.  Reset trap_expected to ensure breakpoints
-	are re-inserted when stepping over a signal handler.
-	(signal_cache_update): New function.
-	(signal_stop_update): Call it.
-	(signal_print_update): Likewise.
-	(signal_pass_update): Likewise.
-	(handle_command): Call signal_cache_update and target_pass_signals
-	instead of target_notice_signals.
-	(_initialize_infrun): Initialize signal_pass.
-
-	* linux-nat.c (pass_mask): New global.
-	(linux_nat_pass_signals): New function.
-	(linux_nat_create_inferior): Report all signals initially.
-	(linux_nat_attach): Likewise.
-	(linux_nat_resume): Use pass_mask to decide whether to directly
-	handle an inferior signal.
-	(linux_nat_wait_1): Likewise.
-	(linux_nat_add_target): Install to_pass_signals callback.
-
-	* nto-procfs.c (notice_signals): Remove.
-	(procfs_resume): Do not call notice_signals.
-	(procfs_notice_signals): Remove.
-	(procfs_pass_signals): New function.
-	(init_procfs_ops): Install to_pass_signals callback instead of
-	to_notice_signals callback.
-	(_initialize_procfs): Report all signals initially.
-
-	* procfs.c (procfs_notice_signals): Remove.
-	(procfs_pass_signals): New function.
-	(procfs_target): Install to_pass_signals callback instead of
-	to_notice_signals callback.
-	(register_gdb_signals): Remove.
-	(procfs_debug_inferior): Report all signals initially.
-	(procfs_init_inferior): Remove redundant register_gdb_signals call.
-
-	* remote.c (remote_pass_signals): Add numsigs and pass_signals
-	parameters; use them instead of calling signal_..._state routines.
-	(remote_notice_signals): Remove.
-	(remote_start_remote): Report all signals initially.
-	(remote_resume): Do not call remote_pass_signals.
-	(_initialize_remote): Install to_pass_signals callback instead of
-	to_notice_signals callback.
-
-2011-04-27  Pedro Alves  <pedro at codesourcery.com>
-
-	* breakpoint.c (user_settable_breakpoint): Delete.
-	(user_breakpoint_p): Remove check on user_settable_breakpoint.
-	(delete_command): Check user_breakpoint_p instead of looking at
-	the breakpoint's type.
-	(disable_command): Ditto.
-	(enable_command): Ditto.
-	(delete_trace_command): Use user_breakpoint_p instead of looking
-	at the breakpoint number directly.  When checking if there are
-	user visible tracepoints, in order to know whether to ask the user
-	for confirmation, check whether the breakpoint is actually a
-	tracepoint.
-
-2011-04-27  Vladimir Prus  <vladimir at codesourcery.com>
-
-	* python/py-breakpoint.c (gdbpy_breakpoint_created): Fix
-	compilation.
-
-2011-04-27  Vladimir Prus  <vladimir at codesourcery.com>
-
-	MI breakpoint notifications.
-
-	* annotate.c (breakpoint_changed): Adjust parameter type.
-	* breakpoint.c (set_breakpoint_condition): Adjust to change
-	in breakpoint_modified type.
-	(breakpoint_set_commands): Likewise.
-	(do_map_commands_command): Likewise.
-	(bpstat_check_breakpoint_conditions): Notify that breakpoint has
-	changed after bumping hit count.
-	(bpstat_stop_status): Likewise.
-	(print_one_breakpoint_location): Don't wrap in tuple here.
-	(print_one_breakpoint): Always print individual locations.
-	For locations, use unnamed tuple.
-	(disable_breakpoints_in_unloaded_shlib): Notify that breakpoint
-	has changed.
-	(create_catchpoint, create_syscall_event_catchpoint): Call
-	breakpoint_created obsever.
-	(mention): Don't call breakpoint_created observer.
-	(create_breakpoint_sal): Call breakpoint_created observer.
-	(create_breakpoint, watch_command_1): Likewise.
-	(create_ada_exception_breakpoint): Likewise.
-	(delete_breakpoint): Call breakpoint_deleted breakpoint.
-	(locations_are_equal): New.
-	(update_breakpoint_locations): If locations were changed, notify.
-	(set_ignore_count, disable_breakpoint, do_enable_breakpoint):
-	Call breakpoint_modified observer.
-
-	* mi/mi-cmd-break.c (breakpoint_notify): Adjust.
-	(mi_cmd_break_insert): Don't set observers for modify and delete.
-	* mi/mi-interp.c (mi_suppress_breakpoint_notifications): New.
-	(mi_breakpoint_created, mi_breakpoint_deleted)
-	(mi_breakpoint_modified): New.
-	(mi_interpreter_init): Hook the above.
-	* mi/mi-main.c (mi_cmd_execute): Disable breakpoint notifications
-	while -break-* commands are executing.
-	* mi/mi-main.h (mi_suppress_breakpoint_notifications): New.
-	* mi/mi-out.c (struct ui_out_data): New field original_buffer.
-	(mi_redirect): New.
-	(mi_ui_out_impl): Hook in mi_redirect.
-	(mi_field_skip): True to the name, skip the field, don't output
-	a field with an empty value.
-
-	* python/py-breakpoint.c (gdbpy_breakpoint_created)
-	(gdbpy_breakpoint_deleted): Adjust.
-	* tui/tui-hooks.c (tui_event_create_breakpoint)
-	(tui_event_delete_breakpoint, tui_event_modify_breakpoint): Adjust.
-
-2011-04-26  Aleksandar Ristovski  <aristovski at qnx.com>
-
-	* nto-procfs.c (procfs_insert_hw_watchpoint): Fix prototype.
-	(procfs_remove_hw_watchpoint): Likewise.
-
-2011-04-26  Michael Walle  <michael at walle.cc>
-
-	* remote.c (remote_start_remote): Ack packet after sending the
-	interrupt sequence.
-
-2011-04-26  Yao Qi  <yao at codesourcery.com>
-
-	* linux-nat.c: Move common macros to ...
-	Include linux-ptrace.h.
-	* common/linux-ptrace.h: ... here.  New.
-
-2011-04-25  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* elfread.c (elf_symfile_read): Protect dwarf2_initialize_objfile by
-	!objfile_has_partial_symbols.  New comment.
-	* objfiles.c (objfile_has_partial_symbols): Call HAS_SYMBOLS if
-	SYM_READ_PSYMBOLS is not present. Extend the comment.
-	* symfile.h (struct sym_fns): Extend the sym_read_psymbols comment.
-
-2011-04-25  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* defs.h (ENUM_BITFIELD): Remove.
-
-2011-04-24  Jan Kratochvil  <jan.kratochvil at redhat.com>
-	    Eli Zaretskii  <eliz at gnu.org>
-
-	* NEWS: Document the new gdbserver --once option.
-
-2011-04-21  Jie Zhang  <jzhang918 at gmail.com>
-
-	* MAINTAINERS: Update my email address.
-
-2011-04-21  Pierre Muller  <muller at ics.u-strasbg.fr>
-
-	* gdb_wchar.h (USE_INTERMEDIATE_ENCODING_FUNCTION): New macro.
-	(INTERMEDIATE_ENCODING): Change value to intermediate_encoding
-	function call if __STDC_ISO_10646__ macro is defined.
-	(intermediate_encoding): New prototype.
-	* charset.c (your_gdb_wchar_t_is_bogus): New extern test variable
-	to generate compile time error for unsupported gdb_wchar_t size.
-	(ENDIAN_SUFFIX): New macro.
-	(intermediate_encoding): New function.
-
-2011-04-20  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* ada-lang.c (struct add_partial_datum): Update the comment for
-	expand_partial_symbol_name.
-	(ada_add_partial_symbol_completions): Rename to ...
-	(ada_expand_partial_symbol_name): ... here, change return type, update
-	function comment, call symbol_completion_match instead of
-	symbol_completion_add.
-	(ada_make_symbol_completion_list): Use now expand_partial_symbol_names
-	and ada_expand_partial_symbol_name.
-	* dwarf2read.c (dw2_expand_symtabs_matching): Support NULL
-	FILE_MATCHER.
-	(dw2_map_symbol_names): Remove.
-	(dwarf2_gdb_index_functions): Unlist dw2_map_symbol_names.
-	* psymtab.c (map_symbol_names_psymtab): Remove.
-	(expand_symtabs_matching_via_partial): Support NULL FILE_MATCHER.
-	Support KIND == ALL_DOMAIN.  Exchange the NAME_MATCHER and KIND check
-	order.
-	(psym_functions): Unlist map_symbol_names_psymtab.
-	(map_partial_symbol_names): Rename to ...
-	(expand_partial_symbol_names): ... here, change the FUN type, call
-	expand_symtabs_matching with ALL_DOMAIN and NULL FILE_MATCHER now.
-	* psymtab.h (map_partial_symbol_names): Rename to ...
-	(expand_partial_symbol_names): ... here, change the FUN type.
-	* symfile.h (struct quick_symbol_functions): Update the description of
-	expand_symtabs_matching.  Remove map_symbol_names.
-	* symtab.c (search_symbols): Add ALL_DOMAIN to the function comment.
-	(struct add_name_data): Update the comment for
-	expand_partial_symbol_name.
-	(add_partial_symbol_name): Rename to ...
-	(expand_partial_symbol_name): ... here.  Replace
-	completion_list_add_name call by strncmp.
-	(default_make_symbol_completion_list_break_on): Use now
-	expand_partial_symbol_names and expand_partial_symbol_name.
-	* symtab.h (enum search_domain): New element ALL_DOMAIN.
-
-2011-04-20  Tom Tromey  <tromey at redhat.com>
-
-	* dwarf2read.c (save_gdb_index_command): Replace format
-	documentation with a pointer to the manual.
-
-2011-04-20  Pedro Alves  <pedro at codesourcery.com>
-
-	* regcache.c: Include remote.h.
-	(enum regcache_dump_what) <regcache_dump_remote>: New enum value.
-	(regcache_dump): Handle regcache_dump_remote.
-	(maintenance_print_remote_registers): New function.
-	(_initialize_regcache): Install "maint print remote-registers"
-	command.
-	* remote.c (map_regcache_remote_table): New function, factored out
-	from ...
-	(init_remote_state): ... here.
-	(remote_register_number_and_offset): New.
-	* remote.h (remote_register_number_and_offset): Declare.
-
-2011-04-20  Pedro Alves  <pedro at codesourcery.com>
-
-	* regcache.c (get_thread_arch_regcache): If creating a regcache for
-	null_ptid, assume and allow a NULL address space, instead of
-	asking the target for the ptid's address space.
-	* infrun.c (ptid_is_pid): Remove assertion.
-
-2011-04-19  Tom Tromey  <tromey at redhat.com>
-
-	* windows-tdep.c (windows_xfer_shared_library):
-	* windows-nat.c (get_module_name, windows_make_so):
-	* v850-tdep.c (v850_handle_pushm):
-	* utils.c (null_cleanup, gdb_realpath):
-	* ui-out.c (get_next_header):
-	* tracepoint.c (clear_traceframe_info):
-	* symtab.c (lookup_symtab):
-	* serial.h (struct serial_ops):
-	* mipsread.c (read_alphacoff_dynamic_symtab):
-	* infcmd.c (print_return_value):
-	* ia64-linux-tdep.c (ia64_linux_sigcontext_register_address):
-	* f-exp.y (parse_number):
-	* exceptions.c (catch_exceptions):
-	* dummy-frame.c (dummy_frame_this_id):
-	* defs.h (struct cleanup):
-	* breakpoint.c (disable_breakpoints_in_unloaded_shlib):
-	* arm-tdep.c (arm_push_dummy_call):
-	* amd64-tdep.h (amd64_collect_xsave):
-	* amd64-tdep.c (amd64_collect_xsave):
-	* alpha-tdep.c (alpha_heuristic_frame_unwind_cache):
-	* README (typing): Remove duplicate words.
-	* cli/cli-decode.c (lookup_cmd_composition): Add comma.
-	* infrun.c (siginfo_value_read): Fix typo.
-	* solib-frv.c (frv_fdpic_find_global_pointer): Likewise.
-	* top.c (source_line_number): Add comma.
-
-2011-04-19  Marc Khouzam  <marc.khouzam at ericsson.com>
-
-	* thread.c (any_live_thread_of_process): Prioritize threads
-	that are not executing.
-	* gdbthread.h (any_live_thread_of_process): Update comment
-	as per above change.
-
-2011-04-19  Andreas Schwab  <schwab at linux-m68k.org>
-
-	* xcoffread.c (process_xcoff_symbol): Remove useless cast.
-	(scan_xcoff_symtab): Likewise.
-
-2011-04-19  Pierre Muller  <muller at ics.u-strasbg.fr>
-
-	* xcoffread.c (process_xcoff_symbol): ARI fix: Avoid assignment
-	inside if clause.
-
-2011-04-19  Pierre Muller  <muller at ics.u-strasbg.fr>
-	    Pedro Alves  <pedro at codesourcery.com>
+	* common/linux-procfs.c (linux_proc_get_int): New, from
+	linux_proc_get_tgid, change its LWPID type to pid_t, add parameter
+	field.
+	(linux_proc_get_tgid): Only call linux_proc_get_int.
+	(linux_proc_get_tracerpid): New.
+	(linux_proc_pid_has_state): New, from linux_proc_pid_is_zombie.
+	(linux_proc_pid_is_stopped, linux_proc_pid_is_zombie): Only call
+	linux_proc_pid_has_state.
+	* common/linux-procfs.h (linux_proc_get_tracerpid): New declaration.
+	* common/linux-ptrace.c: Include linux-procfs.h and buffer.h.
+	(linux_ptrace_attach_warnings): New.
+	* common/linux-ptrace.h (struct buffer, linux_ptrace_attach_warnings):
+	New declaration.
+	* linux-nat.c: Include exceptions.h, linux-ptrace.h and buffer.h.
+	(linux_nat_attach): New variables ex, buffer, message and message_s.
+	Wrap to_attach by TRY_CATCH and call linux_ptrace_attach_warnings.
+
+2012-03-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* Makefile.in (linux-ptrace.o): New.
+	* common/linux-procfs.c (linux_proc_pid_is_zombie): New,
+	from linux-nat.c.
+	* common/linux-procfs.h (linux_proc_pid_is_zombie): New declaration.
+	* common/linux-ptrace.c: New file.
+	* config/alpha/alpha-linux.mh (NATDEPFILES): Add linux-ptrace.o.
+	* config/arm/linux.mh: Likewise.
+	* config/i386/linux.mh: Likewise.
+	* config/i386/linux64.mh: Likewise.
+	* config/ia64/linux.mh: Likewise.
+	* config/m32r/linux.mh: Likewise.
+	* config/m68k/linux.mh: Likewise.
+	* config/mips/linux.mh: Likewise.
+	* config/pa/linux.mh: Likewise.
+	* config/powerpc/linux.mh: Likewise.
+	* config/powerpc/ppc64-linux.mh: Likewise.
+	* config/powerpc/spu-linux.mh: Likewise.
+	* config/s390/s390.mh: Likewise.
+	* config/sparc/linux.mh: Likewise.
+	* config/sparc/linux64.mh: Likewise.
+	* config/xtensa/linux.mh: Likewise.
+	* linux-nat.c (linux_lwp_is_zombie): Remove, move it to
+	common/linux-procfs.c.
+	(wait_lwp): Rename linux_lwp_is_zombie to linux_proc_pid_is_zombie.
 
-	* xstormy16-tdep.c (xstormy16_push_dummy_call): Add local
-	variables to simplify code and avoid == operator at end of
-	line as this is against GNU coding standards.
-
-2011-04-19  Pierre Muller  <muller at ics.u-strasbg.fr>
-
-	* solib-svr4.c (svr4_keep_data_in_core): Rename local variable
-	lm_name to name_lm to avoid conflict with lm_name function.
-
-2011-04-19  Pierre Muller  <muller at ics.u-strasbg.fr>
-
-	ARI fixes: Use only lowercase function name for static functions.
-	* nto-tdep.c (LM_ADDR): Rename to...
-	(lm_addr): New function name.
-	(nto_relocate_section_addresses): Adapt to change above.
-	* solib-sunos.c (LM_ADDR): Rename to...
-	(lm_addr): New function name.
-	(LM_NEXT): Rename to...
-	(lm_next): New function name.
-	(sunos_current_sos, sunos_relocate_section_addresses): Adapt to
-	function name changes above.
-	* solib-svr4.c (LM_ADDR_FROM_LINK_MAP): Rename to...
-	(lm_addr_from_link_map): New function name.
-	(HAS_LM_DYNAMIC_FROM_LINK_MAP): Rename to...
-	(has_lm_dynamic_from_link_map): New function name.
-	(LM_DYNAMIC_FROM_LINK_MAP): Rename to...
-	(lm_dynamic_from_link_map): New function name.
-	(LM_ADDR_CHECK): Rename to...
-	(lm_addr_check): New function name.
-	(LM_NEXT): Rename to...
-	(lm_next): New function name.
-	(LM_PREV): Rename to...
-	(lm_prev): New function name.
-	(LM_NAME): Rename to...
-	(lm_name): New function name.
-	(IGNORE_FIRST_LINK_MAP_ENTRY): Rename to...
-	(ignore_first_link_map_entry): New function name.
-	(svr4_keep_data_in_core): Adapt to function name changes above.
-	(svr4_current_sos): Likewise.
-	(enable_break): Likewise.
-	(svr4_relocate_section_addresses): Likewise.
+2012-03-13  Hui Zhu  <teawater at gmail.com>
+	    Pedro Alves  <palves at redhat.com>
 
-2011-04-19  Pierre Muller  <muller at ics.u-strasbg.fr>
+	* breakpoint.c (init_breakpoint_sal): New flags parameter.  Handle
+	CREATE_BREAKPOINT_FLAGS_INSERTED.
+	(create_breakpoint_sal, create_breakpoints_sal)
+	(base_breakpoint_create_breakpoints_sal)
+	(tracepoint_create_breakpoints_sal)
+	(strace_marker_create_breakpoints_sal): New flags parameter.  Pass
+	down.
+	(break_command_1, handle_gnu_v3_exceptions, trace_command)
+	(ftrace_command, strace_command): Adjust.
+	(create_tracepoint_from_upload): Pass
+	CREATE_BREAKPOINT_FLAGS_INSERTED.
+	* breakpoint.h (enum breakpoint_create_flags): New.
+	(create_breakpoint): New flags parameter.
+	* mi/mi-cmd-break.c (mi_cmd_break_insert): Adjust.
+	* python/py-breakpoint.c (bppy_init): Adjust.
+	* python/py-finishbreakpoint.c (bpfinishpy_init): Adjust.
+	* spu-tdep.c (spu_catch_start): Adjust.
 
-	ARI cleanup.
-	* xtensa-tdep.c (xtensa_register_type): Use xstrprintf instead of
-	sprintf. Simplify code and avoid loosing memory.
-	(xtensa_register_reggroup_p): Extract assignment out of IF clause.
-	(call0_frame_cache): Remove && operator from end of line.
+2012-03-13  Pedro Alves  <palves at redhat.com>
+	    Hui Zhu  <teawater at gmail.com>
+	    Yao Qi  <yao at codesourcery.com>
 
-2011-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* remote.c (struct remote_state): New field `starting_up'.
+	(remote_start_remote): Set and clear it.
+	(remote_can_download_tracepoint): If starting up, return false.
 
-	Fix libraries displacement if they change whether they were prelinked.
-	* solib-svr4.c (LM_ADDR_CHECK): Set L_ADDR even if the DYNAMIC pointer
-	does not match.  Comment why.
+2012-03-13  Yao Qi  <yao at codesourcery.com>
+
+	* inferior.h (struct inferior): Remove fields any_syscall_count,
+	syscalls_counts and total_syscalls_count.  Move them to new
+	struct catch_syscall_inferior_data in breakpoint.c.
+	* breakpoint.c: Call DEF_VEC_I(int).
+	(struct catch_syscall_inferior_data): New.
+	(get_catch_syscall_inferior_data): New.
+	(catch_syscall_inferior_data_cleanup): New.
+	(insert_catch_syscall): Update to access data in
+	struct catch_syscall_inferior_data.
+	(insert_catch_syscall): Likewise.
+	(remove_catch_syscall): Likewise.
+	(remove_catch_syscall): Likewise.
+	(is_syscall_catchpoint_enabled): Likewise.
+	(add_catch_command): Likewise.
+	(_initialize_breakpoint): Register cleanup.
+	* breakpoint.h: Removed DEF_VEC_I(int).
+	* dwarf2loc.c: Call DEF_VEC_I(int).
+	* mi/mi-main.c: Likewise.
 
-2011-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-03-12  Mark Kettenis  <kettenis at gnu.org>
 
-	* corelow.c: Include wrapper.h.
-	(core_open): Call now gdb_target_find_new_threads.
-	* wrapper.c: Include target.h.
-	(gdb_target_find_new_threads): New.
-	* wrapper.h (gdb_target_find_new_threads): New declaration.
+	* inf-ptrace.c (inf_ptrace_post_attach): Make static.
 
-2011-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-03-12  Chris January  <chris.january at allinea.com>
 
-	* linux-thread-db.c (find_new_threads_callback): Exit on zero TI_TID
-	even if !TARGET_HAS_EXECUTION.
+	* aix-thread.c (_initialize_aix_thread): Add prototype.
+	* rs6000-nat.c (_initialize_rs6000_nat): Ditto.
+	* xcoffsolib.c (_initialize_xcoffsolib): Ditto.
 
-2011-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-03-12  Joel Brobecker  <brobecker at adacore.com>
 
-	Fix convert_code_addr_to_desc_addr for ppc64 files after eu-strip.
-	* elfread.c (elf_symfile_read): New variable synth_abfd, pass it to
-	bfd_get_synthetic_symtab.
-	* jit.c (jit_register_code): Pass NULL to the new parameter parent.
-	* machoread.c (macho_add_oso_symfile): Pass main_objfile to the new
-	parameter parent, remove the call to add_separate_debug_objfile.
-	* solib.c (solib_read_symbols): Pass NULL to the new parameter parent.
-	* symfile-mem.c (symbol_file_add_from_memory): Likewise.
-	* symfile.c (symbol_file_add_with_addrs_or_offsets): New parameter
-	parent, new comment for it, call add_separate_debug_objfile for it.
-	(symbol_file_add_separate): Pass objfile as the parameter parent,
-	remove the call to add_separate_debug_objfile.
-	(symbol_file_add_from_bfd): New parameter parent, pass it.
-	(symbol_file_add): Pass NULL to the new parameter parent.
-	* symfile.h (symbol_file_add_from_bfd): New parameter parent.
+	* amd64bsd-nat.c: Move #include of "amd64bsd-nat.h" after
+	include of "amd64-nat.h".
 
-2011-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-03-12  Tom Tromey  <tromey at redhat.com>
 
-	* elfread.c (elf_symtab_read): Do not ignore .L symbols if they are
-	BSF_SYNTHETIC.
+	* buildsym.c (record_pending_block): Now static.
+	* buildsym.h: (record_pending_block): Remove.
 
-2011-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-03-12  Andreas Tobler  <andreast at fgznet.ch>
 
-	Fix Python access to inlined frames.
-	* python/py-frame.c (frapy_read_var): Find BLOCK using get_frame_block.
-	* python/py-symbol.c (gdbpy_lookup_symbol): Likewise.
+	* amd64bsd-nat.c: Include amd64bsd-nat.h.
 
-2011-04-15  Tom Tromey  <tromey at redhat.com>
+2012-03-09  Tom Tromey  <tromey at redhat.com>
 
-	* dwarf2read.c (add_index_entry): Use VEC_last, not VEC_length.
+	* dwarf2read.c (struct dwarf2_cu) <checked_producer,
+	producer_is_gxx_lt_4_6>: New fields.
+	(producer_is_gxx_lt_4_6): Use and update producer cache fields.
 
-2011-04-15  Gary Benson  <gbenson at redhat.com>
+2012-03-09  Tom Tromey  <tromey at redhat.com>
 
-	* MAINTAINERS: Add myself to write-after-approval section.
+	* dwarf2read.c (dwarf2_attr): Avoid tail-recursive call.
 
-2011-04-14  Mike Frysinger  <vapier at gentoo.org>
+2012-03-08  Joel Brobecker  <brobecker at adacore.com>
 
-	* remote-sim.c (sim_command_completer): New function.
-	(_initialize_remote_sim): Set completer to sim_command_completer.
+	* ravenscar-sparc-thread.c (_initialize_ravenscar_sparc): Add
+	prototype.
 
-2011-04-13  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+2012-03-08  Joel Brobecker  <brobecker at adacore.com>
 
-	* breakpoint.c (print_exception_catchpoint): Rename to ...
-	(print_it_exception_catchpoint): ... this.
-	(gnu_v3_exception_catchpoint_ops): Update with new name
-	for print_it_exception_catchpoint.
+	* ravenscar-thread.c (_initialize_ravenscar): Add prototype.
 
-2011-04-13  Edjunior Machado  <emachado at linux.vnet.ibm.com>
+2012-03-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* MAINTAINERS: Add myself for write after approval privileges.
+	Fix -Wmissing-prototypes build.
+	* arm-linux-nat.c (get_thread_id): Make it static.
+	* xtensa-linux-nat.c (get_thread_id): Likewise.
 
-2011-04-13  Marek Polacek  <mpolacek at redhat.com>
+2012-03-08  Joel Brobecker  <brobecker at adacore.com>
 
-	* MAINTAINERS: Add myself as a write-after-approval maintainer.
+	* server.c (process_point_options): If a conditional expression
+	is found, only print a message if remote_debug is nonzero.
 
-2011-04-13  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+2012-03-08  Luis Machado  <lgustavo at codesourcery.com>
 
-	* breakpoint.c (watch_command_1): Remove colon from exp_string.
+	* ax-gdb.c (gen_fetch): Fail gracefully and use error instead
+	of internal error for unknown/unsupported types.
 
-2011-04-13  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+2012-03-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* breakpoint.c (save_breakpoints): Verify whether
-	breakpoint_ops.print_recreate is defined before calling it.
+	Fix CU relative vs. absolute DIE offsets.
+	* dwarf2loc.h (dwarf2_fetch_die_location_block): Rename parameter
+	offset to offset_in_cu.
+	* dwarf2read.c (process_enumeration_scope): Add CU offset to
+	TYPE_OFFSET.
+	(dwarf2_fetch_die_location_block): Rename parameter offset to
+	offset_in_cu.  New variable offset, add CU offset to OFFSET_IN_CU.
 
-2011-04-11  Gary Benson  <gbenson at redhat.com>
+2012-03-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	Fix failure with --enable-maintainer-mode.
-	* Makefile.in (aclocal_m4_deps): Updated gnulib dependencies.
+	* libunwind-frame.c: Rename to ...
+	* ia64-libunwind-tdep.c: ... here.
+	* libunwind-frame.h: Rename to ...
+	* ia64-libunwind-tdep.h: ... here.
+	* Makefile.in (HFILES_NO_SRCDIR): Rename libunwind-frame.h to
+	ia64-libunwind-tdep.h.
+	(ALLDEPFILES): Rename libunwind-frame.c to ia64-libunwind-tdep.c.
+	* README (--with-libunwind): Rename to ...
+	(--with-libunwind-ia64): ... here, note it is ia64 specific now.
+	* config.in: Regenerate.
+	* configure: Regenerate.
+	* configure.ac: New option --with-libunwind-ia64, make the
+	AS_HELP_STRING ia64 specific.  Deprecate option --with-libunwind.
+	Remove AC_DEFINE for HAVE_LIBUNWIND.
+	* ia64-libunwind-tdep.c: Make the file top comment ia64 specific.
+	Rename libunwind-frame.h #include to ia64-libunwind-tdep.h.
+	Rename libunwind-frame in the general comment.
+	* ia64-libunwind-tdep.h: Make the file top comment ia64 specific.
+	Rename symbol LIBUNWIND_FRAME_H to IA64_TDEP_LIBUNWIND_FRAME_H.
+	Move forward declarations inside #ifndef.  Rename libunwind-frame in
+	the general comment.
+	* ia64-tdep.c: Rename libunwind-frame.h #include to
+	ia64-libunwind-tdep.h.
+	(ia64_gdb2uw_regnum, ia64_uw2gdb_regnum, ia64_is_fpreg)
+	(ia64_libunwind_descr): Rename libunwind-frame to
+	ia64-libunwind-tdep in these function comments.
+	* ia64-tdep.h: Rename libunwind-frame.h #include to
+	ia64-libunwind-tdep.h.
+	* ia64-vms-tdep.c (ia64_vms_libunwind_descr): Rename libunwind-frame to
+	ia64-libunwind-tdep in that data comment.
+
+2012-03-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* libunwind-frame.h (struct frame_unwind): New declaration.
+
+2012-03-08  Joel Brobecker  <brobecker at adacore.com>
+
+	* breakpoint.c (_initialize_breakpoint): Fix error in help of
+	"set breakpoint condition-evaluation" command.
+
+2012-03-08  Tristan Gingold  <gingold at adacore.com>
+
+	* sparc-stub.c: Move to stubs/
+	* sh-stub.c: Likewise.
+	* m68k-stub.c: Likewise.
+	* m32r-stub.c: Likewise.
+	* i386-stub.c: Likewise.
+
+2012-03-08  Andreas Schwab  <schwab at linux-m68k.org>
+
+	* m68klinux-tdep.c (m68k_linux_init_abi): Register
+	linux_get_siginfo_type.
+
+	* m68klinux-nat.c: Include "gdb_proc_service.h".
+	(PTRACE_GET_THREAD_AREA): Define.
+	(ps_get_thread_area): New function.
+
+2012-03-08  Yao Qi  <yao at codesourcery.com>
+
+	* remote.c (remote_get_noisy_reply): Replace `sprintf' with
+	`xsnprintf'.
+	(remote_query_attached): Likewise.
+	(remote_static_tracepoint_marker_at): Likewise.
+	(remote_set_permissions): Likewise.
+	(remote_detach_1, extended_remote_attach_1): Likewise.
+	(send_g_packet, remote_vkill): Likewise.
+	(extended_remote_disable_randomization): Likewise.
+	(remote_add_target_side_condition): Likewise.
+	(remote_insert_breakpoint): Likewise.
+	(remote_remove_breakpoint): Likewise.
+	(remote_insert_watchpoint): Likewise.
+	(remote_remove_watchpoint): Likewise.
+	(remote_insert_hw_breakpoint): Likewise.
+	(remote_insert_hw_breakpoint): Likewise.
+	(remote_remove_hw_breakpoint): Likewise.
+	(remote_download_command_source): Likewise.
+	(remote_download_tracepoint): Likewise.
+	(remote_download_trace_state_variable): Likewise.
+	(remote_disable_tracepoint): Likewise.
+	(remote_trace_set_readonly_regions): Likewise.
+	(remote_get_tracepoint_status): Likewise.
+	(remote_trace_find): Likewise.
+	(remote_get_trace_state_variable_value): Likewise.
+	(remote_set_disconnected_tracing): Likewise.
+	(remote_set_circular_trace_buffer): Likewise.
+	(remote_get_min_fast_tracepoint_insn_len): Likewise.
+	(remote_use_agent): Likewise.
+	(remote_add_target_side_condition): Add one parameter BUF_SIZE.
+	Update callers.
+
+2012-03-07  Pedro Alves  <palves at redhat.com>
+
+	* NEWS: Mention QProgramSignals.
+	* inferior.h (update_signals_program_target): Declare.
+	* infrun.c: (update_signals_program_target): New.
+	(handle_command): Update the target of the new program signals
+	array changes.
+	* remote.c (PACKET_QProgramSignals): New enum.
+	(last_program_signals_packet): New global.
+	(remote_program_signals): New.
+	(remote_start_remote): Update the target with the program signals
+	list.
+	(remote_protocol_features): Add entry for QPassSignals.
+	(remote_open_1): Free anc clear last_program_signals_packet.
+	(init_remote_ops): Install remote_program_signals.
+	* target.c (update_current_target): Adjust.
+	(target_program_signals): New.
+	* target.h (struct target_ops) <to_program_signals>: New field.
+	(target_program_signals): Declare.
+
+2012-03-07  Pedro Alves  <palves at redhat.com>
+
+	* NEWS: Add subtitle for new z0/z1 conditional breakpoint
+	extensions.
+
+2012-03-07  Andreas Schwab  <schwab at linux-m68k.org>
+
+	* m68klinux-nat.c (getregs_supplies): Make static.
+	(getfpregs_supplies): Likewise.
+	(have_ptrace_getregs): Likewise.
+
+2012-03-06  Joel Brobecker  <brobecker at adacore.com>
+
+	* dwarf2read.c (dwarf2_get_die_type): Pass absolute offset
+	in call to get_die_type_at_offset.
+
+2012-03-06  Stan Shebs  <stan at codesourcery.com>
+
+	* mi/mi-cmd-break.c: Enforce coding standards, fix comments.
+	* mi/mi-cmd-disas.c: Ditto.
+	* mi/mi-cmd-env.c: Ditto.
+	* mi/mi-cmd-file.c: Ditto.
+	* mi/mi-cmd-stack.c: Ditto.
+	* mi/mi-cmd-target.c: Ditto.
+	* mi/mi-cmd-var.c: Ditto.
+	* mi/mi-cmds.c: Ditto.
+	* mi/mi-cmds.h: Ditto.
+	* mi/mi-console.c: Ditto.
+	* mi/mi-getopt.c: Ditto.
+	* mi/mi-getopt.h: Ditto.
+	* mi/mi-interp.c: Ditto.
+	* mi/mi-main.c: Ditto.
+	* mi/mi-out.c: Ditto.
+	* mi/mi-parse.c: Ditto.
+	* mi/mi-parse.h: Ditto.
+	* mi/mi-symbol-cmds.c: Ditto.
 
-2011-04-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* mi/mi-getopt.h: Move mi_opt struct up.
+	* mi/mi-main.c (captured_mi_execute_command): Remove redundant
+	return.
+	* mi/mi-out.c (_initialize_mi_out): Remove empty initialize.
 
-	Code cleanup.
-	* symtab.c (search_symbols): Reorder the KIND description in the
-	function comment.  Remove the unused 4th element of types, types2,
-	types3 and types4.  New gdb_assert on KIND.
-	(symtab_symbol_info): Remove the unused 4th element of classnames.
-	New gdb_assert on KIND.
-	* symtab.h (enum search_domain): New warning in the enum comment.
-	Assign numbers to the elements VARIABLES_DOMAIN, FUNCTIONS_DOMAIN and
-	TYPES_DOMAIN.
-
-2011-04-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix crash of gdb save-index on a STABS file.
-	* dwarf2read.c (write_psymtabs_to_index): Return also on no
-	PSYMTABS_ADDRMAP.
-
-2011-04-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix DW_AT_accessibility compatibility with gcc-4.6+.
-	* dwarf2read.c: Include ctype.h.
-	(producer_is_gxx_lt_4_6, dwarf2_default_access_attribute): New
-	functions.
-	(dwarf2_add_field): Fix new_field->accessibility by calling
-	dwarf2_default_access_attribute.  Restructure setting accessibility
-	vs. virtuality.
-	(dwarf2_add_member_fn): New variable accessibility.  Fix fnp
-	is_private and is_protected by calling
-	dwarf2_default_access_attribute.
+2012-03-06  Tom Tromey  <tromey at redhat.com>
 
-2011-04-08  Kevin Buettner  <kevinb at redhat.com>
+	* proc-service.c (ps_pglobal_lookup): Set the current program
+	space.
 
-	* rx-tdep.c (rx_frame_unwind): Add default_frame_unwind_stop_reason
-	to the initialization.
+2012-03-06  Pedro Alves  <palves at redhat.com>
 
-2011-04-08  Steve Ellcey  <sje at cup.hp.com>
+	* gregset.h [HAVE_SYS_PROCFS_H]: Include <sys/procfs.h>.
 
-	* Add default_frame_unwind_stop_reason value to libunwind_frame_unwind
-	initalization.
+2012-03-05  Joel Brobecker  <brobecker at adacore.com>
 
-2011-04-07  Pierre Muller  <muller at ics.u-strasbg.fr>
+	* MAINTAINERS: List Maciej W. Rozycki as the mips maintainer.
 
-	Remove support for old Cygwin 1.5 versions.
-	* remote-fileio.c: Remove macros used to emulate new cygwin_conv_path
-	function on old Cygwin version.
-	* windows-nat.c: Remove cygwin version check and always define
-	__USEWIDE for Cygwin compilation.
+2012-03-05  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-04-07  Yao Qi  <yao at codesourcery.com>
+	Code cleanup.
+	* common/linux-osdata.c (linux_common_core_of_thread): New function
+	comment.
+	* linux-nat.c (linux_nat_wait_1): Replace linux_nat_core_of_thread_1
+	call by linux_common_core_of_thread.
+	(linux_nat_core_of_thread_1): Remove.
+	* linux-nat.h (linux_nat_core_of_thread_1): Remove declaration.
+	* linux-thread-db.c: Include linux-osdata.h.
+	(update_thread_core): Replace linux_nat_core_of_thread_1 call by
+	linux_common_core_of_thread.
 
-	* arm-linux-tdep.c (arm_linux_copy_svc): Remove parameters INSN
-	and TO.
-	* arm-tdep.c (cleanup_svc): Handle variable instruction size.
-	(arm_copy_svc): Remove parameters INSN and TO.
-	(decode_svc_copro): Update caller.
-	* arm-tdep.h (struct displaced_step_closure): Remove parameters
-	from function pointer `copy_svc_os'.
+2012-03-05  Tom Tromey  <tromey at redhat.com>
 
-2011-04-07  Yao Qi  <yao at codesourcery.com>
+	* value.c (value_primitive_field): Don't fetch contents for
+	non-virtual bases.
 
-	* arm-tdep.c (cleanup_branch): Set a correct return address in
-	LR for ARM and Thumb.
+2012-03-05  Tom Tromey  <tromey at redhat.com>
 
-2011-04-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* jv-valprint.c (java_value_print): Correctly compute 'obj_addr'.
 
-	Code cleanup.
-	* dictionary.c (dict_hash): Use SYMBOL_HASH_NEXT.
-	* dwarf2read.c (mapped_index_string_hash): Refer to SYMBOL_HASH_NEXT
-	in the function comment, a new note on values compatibility.
-	* minsyms.c (msymbol_hash_iw, msymbol_hash): Use SYMBOL_HASH_NEXT.
-	* symtab.h (SYMBOL_HASH_NEXT): New.
+2012-03-05  Andreas Arnez  <arnez at linux.vnet.ibm.com>
 
-2011-04-06  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+	* s390-nat.c: Include "gregset.h".
 
-	* ppc-linux-nat.c (check_condition): Add len output parameter.
-	Set it based on the memory region referenced in the condition
-	expression.  Update all callers.
+2012-03-05  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-04-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* libunwind-frame.c (LIBUNWIND_SO): Change .7 to .8.
+	[!LIBUNWIND_SO] (LIBUNWIND_SO_7): New #define.
+	(libunwind_load): New variable so_error, use it for dlerror.  Try to
+	load also LIBUNWIND_SO_7.
 
-	Fix crash regression on systems featuring .gdb_index.
-	* objfiles.c (free_objfile): Move the
-	forget_cached_source_info_for_objfile call earlier.  Comment it.
-	Extend the comment for objfile_free_data.
+2012-03-05  Pedro Alves  <palves at redhat.com>
 
-2011-04-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* i387-tdep.c (i387_supply_xsave): Assert the xsave section buffer
+	is not NULL, and remove resulting dead code.
 
-	Fix regression of displaying the debug format.
-	* buildsym.c (end_symtab): Set symtab's debugformat and producer from
-	subfile.
+2012-03-05  Thomas Schwinge  <thomas at codesourcery.com>
 
-2011-04-04  Tom Tromey  <tromey at redhat.com>
+	* sh-tdep.c (sh_skip_prologue): Provide an upper limit on the function
+	prologue to sh_analyze_prologue.
+	(sh_analyze_prologue): Make better use of such an upper limit, and
+	generally be more cautious about accessing memory.
 
-	* cli/cli-interp.c (struct captured_execute_command_args):
-	Remove.
-	(do_captured_execute_command): Remove.
-	(safe_execute_command): Use TRY_CATCH.
-	* cli/cli-script.c (struct wrapped_read_command_file_args):
-	Remove.
-	(wrapped_read_command_file): Remove.
-	(script_from_file): Use TRY_CATCH.
-	* exceptions.c (catch_exception): Remove.
-	* exceptions.h (catch_exception): Remove.
-	(deprecated_throw_reason): Update comment.
-	* mi/mi-main.c (captured_mi_execute_command): Change 'data'
-	argument to 'context'.
-	(mi_execute_command): Use TRY_CATCH.
-	* remote.c (struct start_remote_args): Remove.
-	(remote_start_remote): Update; change arguments.
-	(remote_open_1): Use TRY_CATCH.
-
-2011-04-04  Tom Tromey  <tromey at redhat.com>
+2012-03-05  Tom Tromey  <tromey at redhat.com>
 
-	* tracepoint.c (scope_info): Update.
-	* symtab.c (decode_line_spec): Update.
-	* python/python.c (gdbpy_decode_line): Update.
-	* linespec.h (decode_line_1): Update.
-	* linespec.c (decode_line_1): Remove 'not_found_ptr' argument.
-	(decode_compound, find_method, symtab_from_filename)
-	(decode_variable): Likewise.
-	* cli/cli-cmds.c (edit_command): Update.
-	(list_command): Update.
-	* breakpoint.c (parse_breakpoint_sals): Remove 'not_found_ptr'
-	argument.
-	(create_breakpoint): Update.
-	(until_break_command): Update.
-	(addr_string_to_sals): Update.
-	(decode_line_spec_1): Update.
-
-2011-04-04  Tom Tromey  <tromey at redhat.com>
-
-	* breakpoint.c (struct captured_parse_breakpoint_args): Remove.
-	(do_captured_parse_breakpoint): Remove.
-	(create_breakpoint): `e' is now volatile.  Remove `parse_args'.
-	Use TRY_CATCH directly.
-
-2011-04-04  Tom Tromey  <tromey at redhat.com>
-
-	* symtab.h (free_symtab): Remove.
-	(forget_cached_source_info_for_objfile): Declare.
-	* symmisc.c (free_symtab): Remove.
-	* source.c (forget_cached_source_info_for_objfile): New function.
-	(forget_cached_source_info): Use it.
-	* objfiles.c (free_objfile): Simplify check before calling
-	clear_current_source_symtab_and_line.  Call
-	forget_cached_source_info_for_objfile.
-
-2011-04-04  Tom Tromey  <tromey at redhat.com>
-
-	* mdebugread.c (psymtab_to_symtab_1): Copy linetable to obstack.
-	(new_symtab): Don't set `free_code' on symtab.
-	(new_linetable): Properly handle size==0.
-	* symtab.h (struct symtab) <free_code, free_func>: Remove.
-	* symmisc.c (free_symtab): Don't free the linetable.  Don't call
-	free_func.
-	* jv-lang.c (struct jv_per_objfile_data): New.
-	(jv_per_objfile_free): Free the data.
-	(get_dynamics_objfile): Allocate a jv_per_objfile_data.
-	(get_java_class_symtab): Set the `dict' field on the
-	jv_per_objfile_data.
-	(free_class_block): Remove.
-	* buildsym.c (end_symtab): Don't set `free_code' or `free_func' on
-	the symtab.
-
-2011-04-04  Tom Tromey  <tromey at redhat.com>
-
-	* symfile.c (reread_symbols): Update.
-	* objfiles.h (struct objfile) <cp_namespace_symtab>: Remove
-	field.
-	* objfiles.c (allocate_objfile): Update.
-	* cp-support.h (cp_check_possible_namespace_symbols): Don't
-	declare.
-	* cp-namespace.c (lookup_symbol_file): Don't call
-	lookup_possible_namespace_symbol.
-	(initialize_namespace_symtab, get_possible_namespace_block)
-	(free_namespace_block, cp_check_possible_namespace_symbols)
-	(check_possible_namespace_symbols_loop)
-	(check_one_possible_namespace_symbol)
-	(lookup_possible_namespace_symbol): Remove.
-	(maintenance_cplus_namespace): Replace with notice.
-	(_initialize_cp_namespace): Deprecate `maint cplus namespace'.
-
-2011-04-04  Tom Tromey  <tromey at redhat.com>
-
-	* xcoffread.c (read_xcoff_symtab): Make `debugfmt' const.
-	* symtab.h (struct symtab) <producer, debugformat>: Now const.
-	* symmisc.c (free_symtab): Don't free debugformat.
-	* buildsym.h (struct subfile) <producer, debugformat>: Now const.
-	(record_debugformat, record_producer): Document.
-	* buildsym.c (end_symtab): Don't save debugformat and producer
-	names on obstack.
-	(end_symtab): Don't free debugformat and producer fields.
-	(record_debugformat): Don't call xstrdup.
-	(record_producer): Likewise.
-
-2011-04-04  Tom Tromey  <tromey at redhat.com>
-
-	* source.c (find_source_lines): Remove LSEEK_NOT_LINEAR code.
-	(source_line_charpos, source_charpos_line): Remove.
-
-2011-04-04  Tom Tromey  <tromey at redhat.com>
-
-	* symtab.h (domain_enum): Split in two...
-	(enum search_domain): New.
-	(search_symbols): Update.
-	* symtab.c (print_symbol_info, symtab_symbol_info): Remove
-	redundant declarations.
-	(search_symbols): Change 'kind' argument to search_domain.
-	Update.
-	(print_symbol_info): Likewise.
-	(symtab_symbol_info): Likewise.
-	* symfile.h (struct quick_symbol_functions)
-	<pre_expand_symtabs_matching>: Change type of 'kind' argument.
-	<expand_symtabs_matching>: Likewise.
-	* psymtab.c (pre_expand_symtabs_matching_psymtabs): Update.
-	(expand_symtabs_matching_via_partial): Update.
-	* dwarf2read.c (dw2_pre_expand_symtabs_matching): Update.
-	(dw2_expand_symtabs_for_function): Update.
-	* block.h: Moved anonymous enum...
-	* defs.h (enum block_enum): ... here.  Now named.
+	* ia64-vms-tdep.c (_initialize_ia64_vms_tdep): Rename from
+	_initialize_ia64_hpux_tdep.
 
-2011-04-03  Joel Brobecker  <brobecker at adacore.com>
+2012-03-05  Pedro Alves  <palves at redhat.com>
 
-	GDB 7.3 branch created (branch timestamp: 2011-04-01 01:00 UTC)
-	* version.in: Bump version to 7.3.50.20110403-cvs.
+	PR gdb/13766
 
-2011-04-03  Joel Brobecker  <brobecker at adacore.com>
+	* i387-tdep.c (i387_supply_xsave): If we have an xsave buffer, and
+	the register state is clear, supply explicit zero, instead of
+	marking the register unavailable.
 
-	* NEWS: Create a new section for the next release branch.
-	Rename the section of the current branch, now that it has
-	been cut.
+2012-03-05  Tristan Gingold  <gingold at adacore.com>
 
-2011-04-01  Ulrich Weigand  <ulrich.weigand at linaro.org>
+	* NEWS: Mention OpenVMS ia64 new target.
 
-	* arm-tdep.c (arm_gdbarch_init): Enfore correct register number
-	for "fpscr" in target description.
+2012-03-05  Tristan Gingold  <gingold at adacore.com>
 
-2011-04-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* ia64-tdep.h: Include libunwind-frame.h and libunwind-ia64.h.
+	(ia64_unw_accessors, ia64_unw_rse_accessors)
+	(ia64_libunwind_descr): Declare.
+	* ia64-vms-tdep.c: New file.
+	* ia64-tdep.c (ia64_unw_accessors, ia64_unw_rse_accessors)
+	(ia64_libunwind_descr): Make them public.
+	* configure.tgt: Add ia64-*-*vms*.
+	* Makefile.in (ALL_64_TARGET_OBS): Add ia64-vms-tdep.o
+	(ALLDEPFILES): Add ia64-vms-tdep.c
 
-	* dwarf2read.c (find_slot_in_mapped_hash): New variable back_to,
-	initialize it.  Delay HASH initialization.  Strip the part after open
-	parenthesis for languages with qualifiers.  Call do_cleanups.
+2012-03-05  Tristan Gingold  <gingold at adacore.com>
 
-2011-04-01  Tom Tromey  <tromey at redhat.com>
+	* target.h (target_object): Add TARGET_OBJECT_OPENVMS_UIB.
+	* remote.c (PACKET_qXfer_uib): New enum value.
+	(remote_protocol_features): Add entry for PACKET_qXfer_uib.
+	(remote_xfer_partial): Handle TARGET_OBJECT_OPENVMS_UIB.
+	(_initialize_remote): Call add_packet_config_cmd for
+	xfer:uib packet.
 
-	* utils.c (report_command_stats): Don't print `-' for negative
-	number.
+2012-03-05  Tristan Gingold  <gingold at adacore.com>
 
-2011-04-01  Eric Botcazou  <ebotcazou at adacore.com>
+	* osabi.c (gdb_osabi_names): Add OpenVMS.
+	(generic_elf_osabi_sniffer): Likewise.
+	* defs.h (gdb_osabi): Add GDB_OSABI_OPENVMS.
 
-	* ada-lang.c (ada_is_simple_array_type, ada_value_slice_from_ptr)
-	(ada_value_slice, empty_array, to_fixed_array_type): Deal with
-	typedefs.
+2012-03-04  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-04-01  Joel Brobecker  <brobecker at adacore.com>
+	Removed unused code.
+	* libunwind-frame.c (libunwind_frame_unwind)
+	(libunwind_frame_base_address): Remove.
+	* libunwind-frame.h (libunwind_frame_base_address): Remove declaration.
 
-	* breakpoint.h (bpdisp_text): Add declaration.
-	* breakpoint.c (bpdisp_text): Make non-static.
-	* ada-lang.c: #include "mi/mi-common.h".
-	(print_it_exception): Rewrite to improve GDB/MI output.
+2012-03-04  Yao Qi  <yao at codesourcery.com>
 
-2011-04-01  Pedro Alves  <pedro at codesourcery.com>
+	* common/agent.c (gdb_connect_sync_socket): Add _ markup and
+	remove trailing new line.
+	(agent_run_command, agent_run_command): Add _ markup.
+	(agent_capability_check): Likewise.
 
-	* arm-tdep.h (struct address_space): Add forward declaration.
+2012-03-03  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-04-01  Ulrich Weigand  <ulrich.weigand at linaro.org>
+	* breakpoint.c (set_condition_evaluation_mode): Set
+	CONDITION_EVALUATION_MODE unconditionally.
 
-	* arm-tdep.h (arm_insert_single_step_breakpoint): Add prototype.
-	* arm-tdep.c (arm_override_mode): New global.
-	(arm_pc_is_thumb): Respect arm_override_mode.  Remove single-step
-	execution mode heuristics.
-	(thumb_get_next_pc_raw): Remove INSERT_BKTP argument; always insert
-	second single-step breakpoint if needed, using
-	arm_insert_single_step_breakpoint.
-	(arm_get_next_pc_raw): Remove INSERT_BKTP argument.  Only handle
-	ARM execution mode, do not call thumb_get_next_pc_raw.
-	(arm_get_next_pc): Encode execution mode in return value.  Call
-	either arm_get_next_pc_raw or thumb_get_next_pc_raw.
-	(arm_insert_single_step_breakpoint): New function.
-	(arm_software_single_step): Call it.
-	* arm-linux-tdep.c (arm_linux_sigreturn_return_addr): Add IS_THUMB
-	argument to return execution mode of sigreturn target.
-	(arm_linux_syscall_next_pc): Use it.
-	(arm_linux_copy_svc): Update call.
-	(arm_linux_software_single_step): Call
-	arm_insert_single_step_breakpoint.
+2012-03-03  Yao Qi  <yao at codesourcery.com>
 
-2011-03-31  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* common/agent.c (agent_look_up_symbols): Add one parameter 'arg'.
+	* common/agent.h: Update declaration.
+	* inf-child.c (inf_child_use_agent): New.
+	(inf_child_can_use_agent): New.
+	(inf_child_target): Initialize fields `to_use_agent'
+	and `to_can_use_agent'.
+	* agent.c (agent_new_objfile): New.
+	(_initialize_agent): Add agent_new_objfile to new_objfile
+	observer.
 
-	* dwarf2read.c (dwarf2_read_index): Fix .gdb_index version number in
-	the comment.
+	* linux-nat.c (linux_child_static_tracepoint_markers_by_strid):
+	New.
+	(linux_target_install_ops): Initialize field
+	`to_static_tracepoint_markers_by_strid'.
+	* remote.c (free_current_marker): Move it to ...
+	* tracepoint.c (free_current_marker): ... here.  New.
+	(cleanup_target_stop): New.
+	* tracepoint.h: Declare free_current_marker.
+	* NEWS: Add one entry about `info static-tracepoint-marker'.
 
-2011-03-31  Tom Tromey  <tromey at redhat.com>
+2012-03-03  Yao Qi  <yao at codesourcery.com>
 
-	* varobj.c (update_dynamic_varobj_children): Properly handle
-	errors from iterator.
+	* common/agent.c (agent_loaded_p): New.
+	(agent_look_up_symbols): New global.
+	* common/agent.h: Declare agent_loaded_p.
 
-2011-03-31  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-03-03  Yao Qi  <yao at codesourcery.com>
 
-	* dwarf2read.c (dwarf2_name): Initialize DEMANGLED.  Avoid demangling
-	struct linkage name twice.
+	* common/agent.c (struct ipa_sym_addresses) <addr_capability>: New.
+	(agent_capability_check, agent_capability_invalidate): New.
+	(symbol_list): New array element.
+	* common/agent.h (enum agent_capa): New.
+	* target.c (target_pre_inferior): Call agent_capability_invalidate.
 
-2011-03-31  Tom Tromey  <tromey at redhat.com>
+2012-03-03  Yao Qi  <yao at codesourcery.com>
 
-	* python/py-prettyprint.c (print_stack_unless_memory_error): Add
-	missing ">" to message.
+	* target.h (struct target_ops) <to_use_agent>: New field.
+	(struct target_ops) <to_can_use_agent>: New field.
+	(target_use_agent, target_can_use_agent): New macro.
+	* target.c (update_current_target): Update.
+	* remote.c: New enum `PACKET_QAgent'.
+	(remote_protocol_features): Add a new element.
+	(remote_use_agent, remote_can_use_agent): New.
+	(init_remote_ops): Initialize field `can_use_agent' with
+	remote_can_use_agent.  Intiailize field `use_agent' with
+	remote_use_agent.
+	* common/agent.c (use_agent): New global.
+	* common/agent.h: Declare it.
+	* tracepoint.c (info_static_tracepoint_markers_command): Add
+	comment.
+	* Makefile.in (SFILES): Add common/agent.c and agent.c.
+	(COMMON_OBS): Add common/agent.o and agent.o
+	(common-agent.o): New rule.
+	* agent.c: New.
 
-2011-03-31  Tom Tromey  <tromey at redhat.com>
+2012-03-03  Yao Qi  <yao at codesourcery.com>
 
-	* varobj.c (instantiate_pretty_printer): Remove duplicate
-	'return'.
+	* common/agent.c: New.
+	* common/agent.h: New.
+	* configure.ac: Add `sys/socket.h' and `sys/un.h' to
+	AC_CHECK_HEADERS.
+	* configure, configh.in: Regenerated.
 
-2011-03-31  Ulrich Weigand  <ulrich.weigand at linaro.org>
+2012-03-02  Kevin Buettner  <kevinb at redhat.com>
 
-	* i386-tdep.c (i386_frame_prev_register): Unwind SP from memory
-	if neither saved value nor register available (e.g. signal frame).
+	* sh-tdep.c (sh_frame_cache): Don't fetch the FPSCR register
+	unless it exists for this architecture.
 
-2011-03-31  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+2012-03-02  Joel Brobecker  <brobecker at adacore.com>
 
-	* macroexp.c (expand): Avoid uninitialized variable
-	compiler warning.
+	* language.h (struct language_defn): New "method" la_read_var_value.
+	* findvar.c: #include "language.h".
+	(default_read_var_value): Renames read_var_value.  Rewrite
+	function description.
+	(read_var_value): New function.
+	* value.h (default_read_var_value): Add prototype.
+	* ada-lang.c (ada_read_renaming_var_value, ada_read_var_value):
+	New functions.
+	(ada_language_defn): Add entry for la_read_var_value.
+	* c-lang.c, d-lang.c, f-lang.c, jv-lang.c, language.c,
+	* m2-lang.c, objc-lang.c, opencl-lang.c, p-lang.c: Update
+	language_defn structures to add entry for new la_read_var_value
+	field.
 
-2011-03-31  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+2012-03-02  Tom Tromey  <tromey at redhat.com>
+	    Pedro Alves  <palves at redhat.com>
 
-	* breakpoint.c (break_range_command): Fix typo in comment.
+	PR breakpoints/13776:
+	* breakpoint.c (breakpoint_init_inferior): Delete step-resume
+	breakpoints.
+	(delete_longjmp_breakpoint_at_next_stop): New.
+	* breakpoint.h (delete_longjmp_breakpoint_at_next_stop): Declare.
+	* target.c (generic_mourn_inferior): Call mark_breakpoints_out
+	before deleting the inferior.  Add comments.
+	* thread.c (clear_thread_inferior_resources): Don't delete lonjmp
+	breakpoints immediately, but only on next stop.  Move that code
+	next to where we mark other breakpoints for deletion.
 
-2011-03-31  Thiago Jung Bauermann  <bauerman at br.ibm.com>
-	    Sergio Durigan Junior  <sergiodj at linux.vnet.ibm.com>
+2012-03-02  Joel Brobecker  <brobecker at adacore.com>
 
-	Implement support for PowerPC BookE ranged breakpoints.
-	* NEWS: Mention support for ranged breakpoints on embedded PowerPC.
-	* breakpoint.h (struct bp_target_info) <length>: New member
-	variable.
-	(struct breakpoint_ops) <breakpoint_hit>: Take struct bp_location
-	instead of struct breakpoint as argument, and also add ASPACE
-	and BP_ADDR arguments.  Update all callers.
-	(struct breakpoint_ops) <print_one_detail>: New method.
-	(struct breakpoint) <addr_string_range_end>: New member variable.
-	* breakpoint.c (breakpoint_location_address_match): Add function
-	prototype.
-	(insert_bp_location): Set bl->target_info.length.
-	(breakpoint_here_p): Call breakpoint_location_address_match.
-	(moribund_breakpoint_here_p): Likewise.
-	(regular_breakpoint_inserted_here_p): Likewise.
-	(breakpoint_thread_match): Likewise.
-	(bpstat_stop_status): Likewise.
-	(bpstat_check_location): Move call to
-	breakpoint_ops.breakpoint_hit to the top.
-	(print_one_breakpoint_location): Call
-	breakpoint_ops.print_one_detail if available.
-	(breakpoint_address_match_range): New function.
-	(breakpoint_location_address_match): Likewise.
-	(breakpoint_locations_match): Compare the length field of the
-	locations too.
-	(hw_breakpoint_used_count): Count resources used by all locations
-	in a breakpoint, and use breakpoint_ops.resources_needed if
-	available.
-	(breakpoint_hit_ranged_breakpoint): New function.
-	(resources_needed_ranged_breakpoint): Likewise.
-	(print_it_ranged_breakpoint): Likewise.
-	(print_one_ranged_breakpoint): Likewise.
-	(print_one_detail_ranged_breakpoint): Likewise.
-	(print_mention_ranged_breakpoint): Likewise.
-	(print_recreate_ranged_breakpoint): Likewise.
-	(ranged_breakpoint_ops): New structure.
-	(find_breakpoint_range_end): New function.
-	(break_range_command): Likewise.
-	(delete_breakpoint): Free addr_string_range_end.
-	(update_breakpoint_locations): Add SALS_END argument.  Update
-	all callers.  Calculate breakpoint length if a non-zero SALS_END
-	is given.  Call breakpoint_locations_match instead of
-	breakpoint_address_match.
-	(reset_breakpoint): Find SaL of the end of the range if B is a
-	ranged breakpoint.
-	(_initialize_breakpoint): Register break-range command.
-	* defs.h (print_core_address): Add function prototype.
-	* ppc-linux-nat.c (ppc_linux_ranged_break_num_registers): New
-	function.
-	(ppc_linux_insert_hw_breakpoint): Support ranged breakpoints.
-	(ppc_linux_remove_hw_breakpoint): Likewise.
-	(_initialize_ppc_linux_nat): Initialize
-	to_ranged_break_num_registers.
-	* target.c (update_current_target): Add comment about
-	to_ranged_break_num_registers.
-	(target_ranged_break_num_registers): New function.
-	* target.h (struct target_ops) <to_ranged_break_num_registers>:
-	New method.
-	(target_ranged_break_num_registers): Add function prototype.
-	* ui-out.c (ui_out_field_core_addr): Move address-printing logic to ...
-	* utils.c (print_core_address): ... here.
+	* mips-linux-nat.c (mips_linux_read_description): Add missing i18n
+	marker.
+	* mips-tdep.c (mips_linux_reg_names): Improve comment to avoid ARI
+	violation.
 
-2011-03-31  Ulrich Weigand  <uweigand at de.ibm.com>
+2012-03-02  Pedro Alves  <palves at redhat.com>
 
-	* breakpoint.c (addr_string_to_sals): Avoid uninitialized
-	variable compiler warning.
+	* linux-thread-db.c (attach_thread): Avoid in_thread_list call.
 
-2011-03-30  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+2012-03-02  Ulrich Weigand  <uweigand at de.ibm.com>
 
-	* breakpoint.c (breakpoint_re_set_one): Factor out breakpoint-resetting
-	code from here ...
-	(re_set_breakpoint): ... to here ...
-	(addr_string_to_sals): ... and here.
+	Fix -Wmissing-prototypes build.
+	* ppc-linux-nat.c (ppc_linux_get_hwcap): Make static.
+	* remote-sim.c (gdbsim_has_all_memory): Likewise.
+	(gdbsim_has_memory): Likewise.
 
-2011-03-29  Pierre Muller  <muller at ics.u-strasbg.fr>
+2012-03-02  Yao Qi  <yao at codesourcery.com>
 
-	* Makefile.in (SFILES): Add missing C sources.
-	(HFILES_NO_SRCDIR): Remove gdbserver subdirectory headers.
-	Add missing headers.
+	Fix -Wmissing-prototypes build.
+	* charset.c (phony_iconv_open): Make static.
+	(phony_iconv_close, phony_iconv): Likewise.
+	* i386-linux-nat.c (_initialize_i386_linux_nat): New prototype.
+	* i386-windows-nat.c (_initialize_i386_windows_nat): New
+	prototype.
+	* mingw-hdep.c (_initialize_mingw_hdep): New prototype.
+	* ser-mingw.c (create_select_thread): Make static.
+	* windows-termcap.c (tgetent): New prototype.
+	(tgetnum, tgetflag, tgetstr, tputs, tgoto): Likewise.
+
+2012-03-02  Zhang Yuanhui  <asmwarrior at gmail.com>
+
+	Fix -Wmissing-prototypes build.
+	* windows-nat.c (dll_symbol_command, ctrl_c_handler): Make them static.
+	(_initialize_windows_nat, _initialize_check_for_gdb_ini)
+	(_initialize_loadable): New prototypes.
+
+2012-03-02  Doug Evans  <dje at google.com>
+
+	* dwarf2read.c (load_full_comp_unit): Remove unnecessary reading of
+	abbrev table, read_comp_unit will do it.
+
+2012-03-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix -Wmissing-prototypes build.
+	* alpha-tdep.c (alpha_deal_with_atomic_sequence): Make it static.
+	* amd64-darwin-tdep.c (_initialize_amd64_darwin_tdep): New prototype.
+	* amd64-windows-tdep.c (_initialize_amd64_windows_tdep): Likewise.
+	* arm-symbian-tdep.c (arm_symbian_skip_trampoline_code): Make it static.
+	(_initialize_arm_symbian_tdep): New prototype.
+	* arm-wince-tdep.c (arm_wince_skip_main_prologue): Make it static.
+	* i386-darwin-tdep.c (_initialize_i386_darwin_tdep): New prototype.
+	* i386-linux-tdep.c (i386_linux_displaced_step_copy_insn): Make it
+	static.
+	* lm32-tdep.c (_initialize_lm32_tdep): New prototype.
+	* microblaze-linux-tdep.c (_initialize_microblaze_linux_tdep): New
+	prototype.
+	* microblaze-tdep.c (microblaze_debug, microblaze_fetch_instruction)
+	(microblaze_skip_prologue, microblaze_frame_cache): Make them static.
+	* mips-linux-tdep.c (mips_linux_regset_from_core_section): Make it
+	static.
+	* moxie-tdep.c (moxie_process_record): Likewise.
+	* remote-mips.c (mips_can_use_watchpoint, mips_insert_watchpoint)
+	(mips_remove_watchpoint, mips_stopped_by_watchpoint): Make them static.
+	* rl78-tdep.c (rl78_breakpoint_from_pc): Make it static.
+	(_initialize_rl78_tdep): New prototype.
+	* rx-tdep.c (rx_breakpoint_from_pc): Make it static.
+	(_initialize_rx_tdep): New prototype.
+	* solib-darwin.c (darwin_in_dynsym_resolve_code): Make it static.
+	(_initialize_darwin_solib): New prototype.
+	* solib-spu.c: Include solib-spu.h.
+	(_initialize_spu_solib): New prototype.
+	* spu-multiarch.c (_initialize_spu_multiarch): New prototype.
+	* tic6x-tdep.c (tic6x_analyze_prologue, tic6x_skip_prologue)
+	(tic6x_breakpoint_from_pc, tic6x_frame_unwind_cache)
+	(tic6x_software_single_step): Make it static.
+	(_initialize_tic6x_tdep): New prototype.
+
+2012-03-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix -Wmissing-prototypes build.
+	* cris-tdep.c (cris_can_use_hardware_watchpoint)
+	(cris_region_ok_for_watchpoint, cris_stopped_data_address): Remove.
+
+2012-03-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix -Wmissing-prototypes build.
+	* frv-tdep.c (frv_check_watch_resources, frv_stopped_data_address)
+	(frv_have_stopped_data_address): Remove.
+
+2012-03-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix -Wmissing-prototypes build.
+	* Makefile.in (HFILES_NO_SRCDIR): Add sh64-tdep.h.
+	* sh-tdep.c: Include sh64-tdep.h.
+	* sh-tdep.h (sh64_gdbarch_init, sh64_show_regs): Remove declarations.
+	* sh64-tdep.c: Include sh64-tdep.h.
+	* sh64-tdep.h: New file.
+
+2012-03-01  Maciej W. Rozycki <macro at codesourcery.com>
+
+	* mips-tdep.c (mips32_scan_prologue): Correct indentation.
+
+2012-03-01  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* mips-tdep.c (mips_gdbarch_init): Only set pc_regnum and
+	sp_regnum once the gdbarch_init_osabi hook has been called.
+
+2012-03-01  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* mips-tdep.c (mips32_bc1_pc): New function.
+	(mips32_next_pc): Handle BC1ANY2F, BC1ANY2T, BC1ANY4F, BC1ANY4T,
+	BPOSGE32 and BPOSGE64 instructions.
+	(deal_with_atomic_sequence): Likewise.
+	(mips32_instruction_has_delay_slot): Likewise.
+
+2012-03-01  Maciej W. Rozycki  <macro at mips.com>
+	    Chris Dearman  <chris at mips.com>
+	    Maciej W. Rozycki  <macro at codesourcery.com>
+	    Joseph Myers  <joseph at codesourcery.com>
+
+	* features/mips-dsp.xml: New file.
+	* features/mips64-dsp.xml: New file.
+	* features/mips-dsp-linux.xml: New file.
+	* features/mips64-dsp-linux.xml: New file.
+	* features/Makefile (WHICH): Add mips-dsp-linux and
+	mips64-dsp-linux.
+	(mips-dsp-expedite, mips64-dsp-expedite): New variables.
+	* features/mips-dsp-linux.c: New file.
+	* features/mips64-dsp-linux.c: New file.
+	* regformats/mips-dsp-linux.dat: New file.
+	* regformats/mips64-dsp-linux.dat: New file.
+	* mips-linux-nat.c (mips_linux_register_addr): Handle DSP
+	registers.
+	(mips64_linux_register_addr): Likewise.
+	(mips64_linux_regsets_fetch_registers): Likewise.
+	(mips64_linux_regsets_store_registers): Likewise.
+	(mips64_linux_fetch_registers): Update call to
+	mips64_linux_regsets_fetch_registers.
+	(mips64_linux_store_registers): Update call to
+	mips64_linux_regsets_store_registers.
+	(mips_linux_read_description): Probe for DSP registers.
+	(_initialize_mips_linux_nat): Call initialize_tdesc_mips_dsp_linux
+	and initialize_tdesc_mips64_dsp_linux.
+	* mips-linux-tdep.c (supply_gregset, mips64_supply_gregset):
+	Remove padding of no longer used embedded register slots.
+	* mips-linux-tdep.h (DSP_BASE, DSP_CONTROL): New macros.
+	(MIPS_RESTART_REGNUM): Redefine enum value.
+	* mips-tdep.c (mips_generic_reg_names): Remove trailing null
+	strings.
+	(mips_tx39_reg_names): Likewise.
+	(mips_linux_reg_names): New array of register names for Linux
+	targets.
+	(mips_register_name): Check for a null pointer in
+	mips_processor_reg_names and return an empty string.
+	(mips_register_type): Exclude embedded registers for the IRIX
+	and Linux ABIs.
+	(mips_pseudo_register_type): Likewise.  Use dynamic numbers to
+	refer to FP registers, LO, HI, BadVAddr, Cause and PC.  Handle
+	DSP registers.
+	(mips_stab_reg_to_regnum): Handle DSP accumulators.
+	(mips_dwarf_dwarf2_ecoff_reg_to_regnum): Likewise.
+	(mips_gdbarch_init): Likewise.  Initialize internal register
+	indices for the Linux ABI.  Use dynamic numbers to refer to
+	registers, as applicable, while parsing the target description.
+	* mips-tdep.h (struct mips_regnum): Add dspacc/dspctl offsets.
+
+2012-03-01  Joel Brobecker  <brobecker at adacore.com>
+
+	* frame.h (read_frame_register_unsigned): Fix typo in function
+	description.
 
-2011-03-29  Mike Frysinger  <vapier at gentoo.org>
+2012-03-01  Pedro Alves  <palves at redhat.com>
 
-	* .gitignore: New file.
+	* jit-reader.in [!__cplusplus]
+	(GDB_DECLARE_GPL_COMPATIBLE_READER): Add missing backslash.
 
-2011-03-29  Mike Frysinger  <vapier at gentoo.org>
+2012-03-01  Pedro Alves  <palves at redhat.com>
 
-	* NEWS: Mention new cfi device simulation.
+	* configure.ac (build_warnings): Add -Wmissing-prototypes.
+	* configure: Regenerate.
 
-2011-03-29  Tom Tromey  <tromey at redhat.com>
+2012-03-01  Pedro Alves  <palves at redhat.com>
+
+	* amd64-linux-tdep.c (amd64_linux_record_signal): Make static.
+	* breakpoint.c (create_exception_master_breakpoint, trace_command)
+	(ftrace_command, strace_command): Make static.
+	* d-lang.c (_initialize_d_language): Declare.
+	* dwarf2expr.c (_initialize_dwarf2expr): Declare.
+	* dwarf2loc.c (_initialize_dwarf2loc):
+	* dwarf2read.c (process_psymtab_comp_unit): Make static.
+	* exec.c (exec_get_section_table): Make static.
+	* i386-linux-tdep.c (i386_linux_record_signal): Make static.
+	* infcmd.c (ensure_valid_thread, ensure_not_tfind_mode): Make static.
+	* inferior.c (remove_inferior_command, add_inferior_command)
+	(clone_inferior_command): Make static.
+	* linux-nat.c (linux_nat_thread_address_space)
+	(linux_nat_core_of_thread): Make static.
+	* linux-tdep.c (_initialize_linux_tdep): Declare.
+	* objc-lang.c (_initialize_objc_lang): Declare.
+	* opencl-lang.c (builtin_opencl_type, opencl_language_arch_info):
+	Make static.
+	(_initialize_opencl_language): Declare.
+	* record.c (_initialize_record): Declare.
+	* remote.c (demand_private_info, remote_get_tib_address)
+	(remote_supports_cond_tracepoints)
+	(remote_supports_fast_tracepoints, remote_get_tracepoint_status):
+	Make static.
+	* skip.c (_initialize_step_skip): Declare.
+	* symtab.c (skip_prologue_using_lineinfo): Make static.
+	* tracepoint.c (delete_trace_state_variable)
+	(trace_variable_command, delete_trace_variable_command)
+	(get_uploaded_tsv, find_matching_tracepoint_location)
+	(find_matching_tsv, create_tsv_from_upload, get_traceframe_info):
+	Make static.
+	* value.c (pack_unsigned_long): Make static.
+	* varobj.c (varobj_ensure_python_env): Make static.
+	* windows-tdep.c (_initialize_windows_tdep): Declare.
+	* xml-syscall.c (make_cleanup_free_syscalls_info): Make static.
+
+2012-03-01  Pedro Alves  <palves at redhat.com>
+
+	* linux-tdep.c (linux_has_shared_address_space): Make static.  Add
+	gdbarch parameter.
+	(linux_init_abi): Install it as has_shared_address_space gdbarch
+	callback.
+
+2012-03-01  Pedro Alves  <palves at redhat.com>
+
+	* observer.c (observer_test_first_notification_function)
+	(observer_test_second_notification_function)
+	(observer_test_third_notification_function): Add declarations.
+
+2012-03-01  Pedro Alves  <palves at redhat.com>
+
+	* common/signals.c (default_target_signal_to_host)
+	(default_target_signal_from_host): Move ...
+	* arch-utils.c: ... here.
+	* arch-utils.h (default_target_signal_to_host)
+	(default_target_signal_from_host): Declare.
+
+	* common/signals.c (target_signal_from_command): Move ...
+	* infrun.c: ... here.
+	* inferior.h (target_signal_from_command): Declare.
+	* target.h (target_signal_from_command)
+	(default_target_signal_from_host, default_target_signal_to_host):
+	Delete declarations.
 
-	* dwarf2read.c (fixup_partial_die): Handle linkage name on
-	otherwise anonymous types.
-	(dwarf2_name): Likewise.
-	* valops.c (value_struct_elt_for_reference): Refine artificial
-	type logic.  Call error if j==-1.
+	* common/signals.c (_initialize_signals): Delete.
 
-2011-03-29  Andreas Tobler  <andreast-list at fgznet.ch>
+2012-03-01  Pedro Alves  <palves at redhat.com>
 
-	Fix false GCC warning.
-	* infcall.c (find_function_addr): Initialize funaddr.
+	* jit-reader.in (plugin_is_GPL_compatible): Add declarations for
+	both __cplusplus and !__cplusplus.
 
-2011-03-29  Pierre Muller  <muller at ics.u-strasbg.fr>
+2012-03-01  Pedro Alves  <palves at redhat.com>
 
-	Fix mingw compilation with --enable-targets=all.
-	* remote-mips.c (gdb_usleep.h): Include header.
-	(mips_enter_debug): Use gdb_usleep instead of sleep.
+	* psymtab.c (find_and_open_source): Delete declaration.
+	* source.c (find_and_open_source): Move comment ...
+	* source.h (find_and_open_source): ... to this new declaration.
 
-2011-03-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-03-01  Pedro Alves  <palves at redhat.com>
 
-	Support resolution of STT_GNU_IFUNC via breakpoints.
-	* breakpoint.c (print_it_typical): Support bp_gnu_ifunc_resolver and
-	bp_gnu_ifunc_resolver_return.
-	(bpstat_what): Rename parameter to bs_head, new variable bs, adjust
-	the loop.  Support bp_gnu_ifunc_resolver and
-	bp_gnu_ifunc_resolver_return.  New comment after the loop.  New loop
-	for bp_gnu_ifunc_resolver and bp_gnu_ifunc_resolver_return
-	breakpoints.
-	(bptype_string, print_one_breakpoint_location): Support
-	bp_gnu_ifunc_resolver and bp_gnu_ifunc_resolver_return.
-	(user_settable_breakpoint): Return true also for
-	bp_gnu_ifunc_resolver.
-	(allocate_bp_location): Support bp_gnu_ifunc_resolver and
-	bp_gnu_ifunc_resolver_return.
-	(set_breakpoint_location_function): New parameter explicit_loc,
-	describe it.  Call find_pc_partial_function_gnu_ifunc with new
-	variable IS_GNU_IFUNC and adjust the address for STT_GNU_IFUNC if
-	EXPLICIT_LOC is not set.
-	(set_raw_breakpoint): Set EXPLICIT_LOC for
-	set_breakpoint_location_function.
-	(clone_momentary_breakpoint): Use true for EXPLICIT_LOC of
-	set_breakpoint_location_function.
-	(mention): Support bp_gnu_ifunc_resolver and
-	bp_gnu_ifunc_resolver_return.
-	(add_location_to_breakpoint): Set EXPLICIT_LOC for
-	set_breakpoint_location_function.
-	(update_breakpoint_locations): Remove static.
-	(breakpoint_re_set_one): Support bp_gnu_ifunc_resolver and
-	bp_gnu_ifunc_resolver_return.
-	* breakpoint.h (enum bptype): New fields bp_gnu_ifunc_resolver and
-	bp_gnu_ifunc_resolver_return.
-	(update_breakpoint_locations): New declaration.
-	* elfread.c: Include gdbthread.h and regcache.h.
-	(elf_gnu_ifunc_resolver_stop, elf_gnu_ifunc_resolver_return_stop): New
-	functions.
-	(elf_gnu_ifunc_fns): Install them.
-	* minsyms.c (stub_gnu_ifunc_resolver_stop)
-	(stub_gnu_ifunc_resolver_return_stop): New functions.
-	(stub_gnu_ifunc_fns): Install them.
-	* symtab.h (struct gnu_ifunc_fns): New fields gnu_ifunc_resolver_stop
-	and gnu_ifunc_resolver_return_stop.
-	(gnu_ifunc_resolver_stop, gnu_ifunc_resolver_return_stop): New.
-
-2011-03-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	STT_GNU_IFUNC reader implementation.
-	* elfread.c: Include gdbtypes.h, value.h and infcall.h.
-	(SYMBOL_GOT_PLT_SUFFIX, elf_rel_plt_read)
-	(elf_objfile_gnu_ifunc_cache_data, struct elf_gnu_ifunc_cache)
-	(elf_gnu_ifunc_cache_hash, elf_gnu_ifunc_cache_eq)
-	(elf_gnu_ifunc_record_cache, elf_gnu_ifunc_resolve_by_cache)
-	(elf_gnu_ifunc_resolve_by_got, elf_gnu_ifunc_resolve_name)
-	(elf_gnu_ifunc_resolve_addr): New.
-	(elf_symfile_read): Call elf_rel_plt_read.
-	(elf_gnu_ifunc_fns): New.
-	(_initialize_elfread): Initialize elf_objfile_gnu_ifunc_cache_data.
-	Install elf_gnu_ifunc_fns.
-	* infcall.c (find_function_return_type): New function.
-	(find_function_addr): Resolve TYPE_GNU_IFUNC functions, if possible.
-	* minsyms.c (stub_gnu_ifunc_resolve_addr)
-	(stub_gnu_ifunc_resolve_name): New functions.
-	(stub_gnu_ifunc_fns, gnu_ifunc_fns_p): New variables.
-	* symtab.h (struct gnu_ifunc_fns, gnu_ifunc_resolve_addr)
-	(gnu_ifunc_resolve_name, gnu_ifunc_fns_p): New.
-
-2011-03-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Code cleanup for later STT_GNU_IFUNC support.
-	* infcall.c (find_function_addr): Remove variable code, use explicit
-	dereferences for it.  Move VALUE_TYPE initialization later.
-
-2011-03-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	GDB find_pc_partial_function support for STT_GNU_IFUNC.
-	* blockframe.c (cache_pc_function_is_gnu_ifunc): New variable.
-	(clear_pc_function_cache): Clear it.
-	(find_pc_partial_function): Rename to ...
-	(find_pc_partial_function_gnu_ifunc): ... this function.  New
-	parameter is_gnu_ifunc_p, describe it.  Set *IS_GNU_IFUNC_P.
-	(find_pc_partial_function): New wrapper for this function.
-	* symtab.h (find_pc_partial_function_gnu_ifunc): New declaration.
-
-2011-03-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	GDB internal type support for STT_GNU_IFUNC.
-	* elfread.c (record_minimal_symbol): Support mst_text_gnu_ifunc.
-	(elf_symtab_read): Set mst_text_gnu_ifunc for
-	BSF_GNU_INDIRECT_FUNCTION.
-	* eval.c (evaluate_subexp_standard): Support TYPE_GNU_IFUNC.
-	* gdbtypes.c (init_type): Support TYPE_FLAG_GNU_IFUNC,
-	builtin_func_func, nodebug_text_gnu_ifunc_symbol and
-	nodebug_got_plt_symbol.
-	* gdbtypes.h (enum type_flag_value): New entry TYPE_FLAG_GNU_IFUNC.
-	(TYPE_GNU_IFUNC): New.
-	(struct main_type): New field flag_gnu_ifunc.
-	(struct builtin_type): New field builtin_func_func.
-	(struct objfile_type): New fields nodebug_text_gnu_ifunc_symbol and
-	nodebug_got_plt_symbol.
-	* minsyms.c (lookup_minimal_symbol_text): Support mst_text_gnu_ifunc.
-	(in_gnu_ifunc_stub): New.
-	(prim_record_minimal_symbol, find_solib_trampoline_target): Support
-	mst_text_gnu_ifunc.
-	* parse.c (write_exp_msymbol): New variable ifunc_msym.  Detect and
-	support mst_text_gnu_ifunc.  Support mst_slot_got_plt.
-	* solib-svr4.c (svr4_in_dynsym_resolve_code): Return true also for
-	in_gnu_ifunc_stub.
-	* symmisc.c (dump_msymbols): Support mst_text_gnu_ifunc.
-	* symtab.c (search_symbols): Likewise.
-	* symtab.h (enum minimal_symbol_type): New fields mst_text_gnu_ifunc
-	and mst_slot_got_plt.
-	(in_gnu_ifunc_stub): New declaration.
-
-2011-03-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Support a ring of related breakpoints.
-	* breakpoint.c (watchpoint_del_at_next_stop): New, move here code from
-	other functions, add gdb_assert.
-	(update_watchpoint, watchpoint_check): Add gdb_assert.  Use
-	watchpoint_del_at_next_stop.
-	(bpstat_check_watchpoint): Use watchpoint_del_at_next_stop.
-	(bpstat_stop_status): Handle ring in related_breakpoint.
-	(set_raw_breakpoint_without_location): Initialize ring in
-	related_breakpoint.
-	(delete_breakpoint): Handle ring in related_breakpoint, use
-	watchpoint_del_at_next_stop.
-	(map_breakpoint_numbers): Handle ring in related_breakpoint.
-
-2011-03-28  Tom Tromey  <tromey at redhat.com>
-
-	PR symtab/12441:
-	* dwarf2read.c (prepare_one_comp_unit): Don't call set_cu_language
-	with `language_minimal'.
-
-2011-03-25  Ulrich Weigand  <ulrich.weigand at linaro.org>
-
-	* arm-tdep.c (arm_elf_make_msymbol_special): Use ARM_SYM_BRANCH_TYPE
-	instead of checking for STT_ARM_TFUNC symbol type.
-
-2011-03-25  Tom Tromey  <tromey at redhat.com>
-
-	* linespec.c (symbol_found): Restore line-based result for
-	non-LOC_LABEL symbols.
-
-2011-03-25  Kai Tietz  <ktietz at redhat.com>
-
-	* tui/tui-source.c (tui_set_source_content): Use filename_cmp
-	instead of strcmp for comparison.
-	(tui_source_is_displayed): Likewise.
-	* tui/tui-winsource.c (tui_update_breakpoint_info): Likewise.
-
-2011-03-24  Mark Wielaard  <mjw at redhat.com>
-
-	* dwarf2read.c (lookup_signatured_type): Use DW_FORM_ref_sig8 in
-	complaint.
-	(skip_one_die): Use DW_FORM_ref_sig8, not DW_FORM_sig8.
-	(find_partial_die_in_comp_unit): Likewise in comment.
-	(read_attribute_value): Likewise.
-	(lookup_die_type): Likewise.
-	(dwarf_form_name): Likewise.
-	(dump_die_shallow): Likewise.
-	(follow_die_ref_or_sig): Likewise.
-
-2011-03-24  Tom Tromey  <tromey at redhat.com>
-
-	PR breakpoints/11816:
-	* linespec.c (decode_line_1): Parse `function:label' linespecs.
-	(decode_compound): Update.
-	(find_function_symbol): New function.
-	(decode_dollar): Update.
-	(decode_label): Add 'function_symbol' parameter.  Handle
-	function-relative labels.
-	(decode_variable): Update.
-	(symbol_found): Add 'function_symbol' parameter.  Use label's PC,
-	not its line.  Set `special_display' and canonical name for
-	labels.
-
-2011-03-24  Tom Tromey  <tromey at redhat.com>
-
-	* linespec.h (struct linespec_result) <special_display>: New
-	field.
-	* breakpoint.h (struct breakpoint) <display_canonical>: New
-	field.
-	* breakpoint.c (print_breakpoint_location): Respect
-	display_canonical.
-	(create_breakpoint_sal): Add 'display_canonical' parameter.
-	(create_breakpoints_sal): Update.
-	(create_breakpoint): Update.
-
-2011-03-24  Tom Tromey  <tromey at redhat.com>
-
-	* symtab.c (decode_line_spec): Update.
-	* linespec.c (build_canonical_line_spec): Change type of
-	'canonical'.
-	(decode_line_2, decode_line_1, decode_objc, decode_compound)
-	(find_method, decode_all_digits, decode_dollar, decode_label)
-	(symbol_found): Likewise.
-	(init_linespec_result): New function.
-	* breakpoint.c (struct captured_parse_breakpoint_args)
-	<canonical_p>: New field, replaces addr_string_p.
-	(create_breakpoints_sal): Add 'canonical' parameter, replacing
-	'addr_string'.
-	(parse_breakpoint_sals): Likewise.
-	(do_captured_parse_breakpoint): Update.
-	(create_breakpoint): Use struct linespec_result.
-	(until_break_command): Update.
-	(breakpoint_re_set_one): Update.
-	(decode_line_spec_1): Update.
-	* linespec.h (struct linespec_result): New.
-	(init_linespec_result): Declare.
-
-2011-03-23  Pedro Alves  <pedro at codesourcery.com>
-
-	* regcache.c (regcache_raw_read): If the target didn't supply a
-	given raw register, mark it as unavailable.
-
-2011-03-23  Kai Tietz  <ktietz at redhat.com>
-
-	* breakpoint.c (clear_command): Use filename_cmp
-	instead of strcmp for comparison.
-	* buildsym.c (watch_main_source_file_lossage): Likewise.
-	(patch_subfile_names): Use IS_DIR_SEPARATOR instead of
-	checking just for slash.
-	* dbxread.c (read_dbx_symtab): Use lbasename instead of
-	strrchr and filename_cmp instead of strcmp for filenames.
-	(add_old_header_file): Use filename_cmp
-	instead of strcmp for comparison.
-	* exec.c (exec_set_section_address): Likewise.
-	* macrotab.c (macro_lookup_inclusion): Likewise.
-	(macro_lookup_inclusion): Likewise.
-	* elfread.c (_initialize_elfread): Likewise.
-	(elfstab_offset_sections): Likewise.
-	(elfstab_offset_sections): Use lbasename instead of
-	strrchr.
-	* mdebugread.c (parse_partial_symbols): Likewise.
-	(arse_partial_symbols): Use filename_(n)cmp instead of
-	str(n)cmp for comparison.
-	* minsyms.c (lookup_minimal_symbol): Likewise.
-	* psymtab.c (read_psymtabs_with_filename): Likewise.
-	* solib.c (solib_read_symbols): Likewise.
-	(reload_shared_libraries_1): Likewise.
-	* symmisc.c (maintenance_print_symbols): Likewise.
-	* symfile.c (separate_debug_file_exists): Likewise.
-	(reread_symbols): Likewise.
-	(find_separate_debug_file_by_debuglink): Likewise.
-	* remote-fileio.c (remote_fileio_func_rename): Likewise.
-	* source.c (add_path): Likewise.
-	* symtab.c (filename_seen): Likewise.
-	(file_matches): Likewise.
-	(print_symbol_info): Likewise.
-	(maybe_add_partial_symtab_filename): Likewise.
-	(make_source_files_completion_list): Likewise.
-	* xml-syscall.c (init_sysinfo): Likewise.
-	* windows-nat.c (_initialize_check_for_gdb_ini): Use
-	IS_DIR_SEPARATOR for checking for trailing path separator.
-
-2011-03-22  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* dwarf2expr.c (execute_stack_op): Handle DW_OP_GNU_entry_value.  New
-	label abort_expression.
-	* dwarf2loc.c (dwarf2_evaluate_loc_desc_full): Handle
-	DWARF_VALUE_OPTIMIZED_OUT.
-
-2011-03-22  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* inline-frame.c: Include inline-frame.h.
 
-	Code cleanup.
-	* c-typeprint.c (c_type_print_args): Change parameter show_artificial
-	to linkage_name.  Invert its value.  Update the function comment.
-	(c_type_print_varspec_suffix): Invert it at the caller.
-	* dwarf2read.c (dwarf2_compute_name): Invert it at the caller.
+2012-03-01  Pedro Alves  <palves at redhat.com>
 
-2011-03-22  Pedro Alves  <pedro at codesourcery.com>
+	* tui/tui-data.c (set_gen_win_origin): Delete.
+	* tui/tui-data.h (tui_set_gen_win_origin): Delete declaration.
+	* tui/tui-regs.c (tui_last_reg_element_no_in_line): Delete.
 
-	* infcmd.c (post_create_inferior): Ignore NOT_AVAILABLE_ERROR
-	errors when reading the `stop_pc'.
-	* printcmd.c (pc_prefix): Use get_frame_pc_if_available instead of
-	get_frame_pc.
+2012-03-01  Pedro Alves  <palves at redhat.com>
 
-2011-03-22  Phil Muldoon  <pmuldoon at redhat.com>
+	* remote.c (encode_actions): Delete declaration.
+	* tracepoint.c (encode_actions): Make extern.
+	* tracepoint.h (encode_actions): Declare.
 
-	* NEWS: Document gdb.Write stream keyword.
+2012-03-01  Pedro Alves  <palves at redhat.com>
 
-2011-03-22  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* python/py-breakpoint.c: Include python.h.
+	* python/py-continueevent.c (create_continue_event_object): Make
+	static.
+	* python/py-lazy-string.c (stpy_get_type): Make static.
+	* python/py-newobjfileevent.c (create_new_objfile_event_object):
+	Make static.
+	* python/py-utils.c (unicode_to_target_python_string): Make
+	static.
+	* python/py-value.c: Include python.h.
 
-	Revert:
-	2011-03-21  Jan Kratochvil  <jan.kratochvil at redhat.com>
-	* dwarf2read.c (producer_is_gxx_lt_4_6): New function.
-	(dwarf2_add_field): Fix new_field->accessibility for
-	cu->header.version >= 3 while verifying also producer_is_gxx_lt_4_6.
+2012-03-01  Pedro Alves  <palves at redhat.com>
 
-2011-03-22  Phil Muldoon  <pmuldoon at redhat.com>
+	* inferior.c (delete_threads_of_inferior): Delete.
 
-	PR python/12183
+2012-03-01  Pedro Alves  <palves at redhat.com>
 
-	* python/py-function.c (fnpy_call): Treat GdbErrors differently to
-	other error classes.  Do not print stack trace.
+	Import fallback definitions from glibc.
 
-2011-03-21  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* gdb_proc_service.h [!HAVE_PROC_SERVICE_H] (struct
+	ps_prochandle): Forward declare.
+	(ps_err_e): Use glibc's comments.
+	[!HAVE_PROC_SERVICE_H] (ps_pdread, ps_pdwrite, ps_ptread)
+	(ps_ptwrite, ps_lgetregs, ps_lsetregs, ps_lgetfpregs)
+	(ps_lsetfpregs, ps_getpid, ps_get_thread_area, ps_pglobal_lookup)
+	(ps_pstop, ps_pcontinue, ps_lstop, ps_lcontinue, ps_lgetxregsize)
+	(ps_lgetxregs, ps_lsetxregs, ps_plog): Declare.
+	(struct ps_prochandle): Adjust comment.
 
-	* dwarf2read.c (producer_is_gxx_lt_4_6): New function.
-	(dwarf2_add_field): Fix new_field->accessibility for
-	cu->header.version >= 3 while verifying also producer_is_gxx_lt_4_6.
+2012-03-01  Pedro Alves  <palves at redhat.com>
 
-2011-03-21  Ulrich Weigand  <ulrich.weigand at linaro.org>
+	* ada-lang.c (ada_modulus_from_name): Delete.
+	* ada-lex.l (lexer_init): Make static.
 
-	* arm-tdep.c (arm_analyze_prologue): Do not abort parsing when
-	encountering a load via a non-SP register.
+2012-03-01  Pedro Alves  <palves at redhat.com>
 
-2011-03-21  Ulrich Weigand  <uweigand at de.ibm.com>
+	PR gdb/13767
 
-	* tramp-frame.c (tramp_frame_prepend_unwinder): Set stop_reason
-	field in returned unwinder.
+	* frame.c (read_frame_register_unsigned): New.
+	* frame.h (read_frame_register_unsigned): Declare.
+	* i387-tdep.c (print_i387_status_word): New parameter `status_p'.
+	Handle it.
+	(print_i387_control_word): New parameter `control_p'.  Handle it.
+	(i387_print_float_info): Handle unavailable float registers.
 
-2012-03-21  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-03-01  Keith Seitz  <keiths at redhat.com>
 
-	* ada-lang.c (replace_operator_with_call): Copy also GDBARCH.
+	* linespec.c (decode_line_2): Sort the list of methods
+	alphabetically before presenting the user with a selection
+	menu.
 
-2012-03-21  Joel Brobecker  <brobecker at adacore.com>
+2012-03-01  Doug Evans  <dje at google.com>
 
-	* ada-lang.c (replace_operator_with_call): Use xzalloc instead
-	of xmalloc.
-
-2012-03-18  Pedro Alves  <pedro at codesourcery.com>
-
-	* frame.c (frame_unwind_register): Throw an error if unwinding the
-	register failed.
-	* get_prev_frame_1 (get_prev_frame_1): Ask the unwinder if there's
-	an unwind stop reason.
-	(frame_stop_reason_string): Handle UNWIND_UNAVAILABLE.
-	* frame.h (enum unwind_stop_reason) <UNWIND_OUTERMOST,
-	UNWIND_UNAVAILABLE>: New.
-	* inline-frame.c (inline_frame_unwind): Install
-	default_frame_unwind_stop_reason.
-	* frame-unwind.c: Include "exceptions.h".
-	(frame_unwind_find_by_frame): Swallow NOT_AVAILABLE_ERROR errors.
-	(default_frame_unwind_stop_reason): New.
-	* frame-unwind.h (frame_unwind_stop_reason_ftype): New typedef.
-	(default_frame_unwind_stop_reason): Declare.
-	(struct frame_unwind) <stop_reason>: New function pointer.
-
-	* dummy-frame.c: Install default_frame_unwind_stop_reason.
-	* dwarf2-frame.c: Include exceptions.h.
-	(struct dwarf2_frame_cache) <unavailable_retaddr>: New field.
-	(dwarf2_frame_cache): Swallow NOT_AVAILABLE_ERROR errors when
-	computing the CFA.  If such an error was thrown, set
-	unavailable_retaddr.
-	(dwarf2_frame_unwind_stop_reason): New.
-	(dwarf2_frame_this_id): Don't build a frame id if the CFA was
-	unavailable.
-	(dwarf2_frame_unwind): Install dwarf2_frame_unwind_stop_reason.
-	(dwarf2_signal_frame_unwind): Ditto.
-
-	* amd64-tdep.c: Include "exceptions.h".
-	(struct amd64_frame_cache): New field "base_p".
-	(amd64_init_frame_cache): Clear it.
-	(amd64_frame_cache_1): New, factored out from amd64_frame_cache.
-	Avoid reading registers with functions that throw if the register
-	is not necessary to compute the frame base.
-	(amd64_frame_cache): Reimplement wrapping amd64_frame_cache_1, and
-	swallowing NOT_AVAILABLE_ERROR.
-	(amd64_frame_unwind_stop_reason): New.
-	(amd64_frame_this_id): Don't build a frame id if the frame base
-	was unavailable.
-	(amd64_frame_unwind): Install amd64_frame_unwind_stop_reason.
-	(amd64_sigtramp_frame_cache): Swallow NOT_AVAILABLE_ERROR, and set
-	base_p if the frame base was computable.
-	(amd64_sigtramp_frame_unwind_stop_reason): New.
-	(amd64_sigtramp_frame_this_id): Don't build a frame id if the
-	frame base was unavailable.
-	(amd64_sigtramp_frame_unwind): Install
-	amd64_sigtramp_frame_unwind_stop_reason.
-	(amd64_epilogue_frame_cache): Swallow NOT_AVAILABLE_ERROR, and set
-	base_p if the frame base was computable.
-	(amd64_epilogue_frame_unwind_stop_reason): New.
-	(amd64_epilogue_frame_this_id): Don't build a frame id if the
-	frame base was unavailable.
-	(amd64_epilogue_frame_unwind): Install
-	amd64_epilogue_frame_unwind_stop_reason.
-	* i386-tdep.c: Include "exceptions.h".
-	(struct i386_frame_cache): New field "base_p".
-	(i386_init_frame_cache): Clear it.
-	(i386_frame_cache_1): New, factored out from amd64_frame_cache.
-	Avoid reading registers with functions that throw if the register
-	is not necessary to compute the frame base.
-	(i386_frame_cache): Reimplement wrapping amd64_frame_cache_1, and
-	swallowing NOT_AVAILABLE_ERROR.
-	(i386_frame_unwind_stop_reason): New.
-	(i386_frame_this_id): Don't build a frame id if the frame base was
-	unavailable.
-	(i386_frame_prev_register): Handle unavailable SP.
-	(i386_frame_unwind): Install i386_frame_unwind_stop_reason.
-	(i386_epilogue_frame_cache): Swallow NOT_AVAILABLE_ERROR, and set
-	base_p if the frame base was computable.
-	(i386_epilogue_frame_unwind_stop_reason): New.
-	(i386_epilogue_frame_this_id): Don't build a frame id if the frame
-	base was unavailable.
-	(i386_epilogue_frame_unwind): Install
-	i386_epilogue_frame_unwind_stop_reason.
-	(i386_sigtramp_frame_cache): Swallow NOT_AVAILABLE_ERROR, and set
-	base_p if the frame base was computable.
-	(i386_sigtramp_frame_unwind_stop_reason): New.
-	(i386_sigtramp_frame_this_id): Don't build a frame id if the frame
-	base was unavailable.
-	(i386_sigtramp_frame_unwind): Install
-	i386_sigtramp_frame_unwind_stop_reason.
-	* sentinel-frame.c (sentinel_frame_prev_register): Use the value
-	type's size, not the register's.
-	(sentinel_frame_unwind): Install default_frame_unwind_stop_reason.
-
-	* alpha-mdebug-tdep.c (alpha_mdebug_frame_unwind): Install
-	default_frame_unwind_stop_reason.
-	* alpha-tdep.c (alpha_sigtramp_frame_unwind)
-	(alpha_heuristic_frame_unwind): Ditto.
-	* amd64obsd-tdep.c (amd64obsd_trapframe_unwind): Ditto.
-	* arm-tdep.c (arm_prologue_unwind, arm_stub_unwind): Ditto.
-	* avr-tdep.c (avr_frame_unwind): Ditto.
-	* cris-tdep.c (cris_sigtramp_frame_unwind, cris_frame_unwind):
-	Ditto.
-	* frv-linux-tdep.c (frv_linux_sigtramp_frame_unwind): Ditto.
-	* frv-tdep.c (frv_frame_unwind): Ditto.
-	* h8300-tdep.c (h8300_frame_unwind): Ditto.
-	* hppa-hpux-tdep.c (hppa_hpux_sigtramp_frame_unwind): Ditto.
-	* hppa-linux-tdep.c (hppa_linux_sigtramp_frame_unwind): Ditto.
-	* hppa-tdep.c (hppa_frame_unwind, hppa_fallback_frame_unwind)
-	(hppa_stub_frame_unwind): Ditto.
-	* i386obsd-tdep.c (i386obsd_trapframe_unwind): Ditto.
-	* ia64-tdep.c (ia64_frame_unwind, ia64_sigtramp_frame_unwind)
-	(ia64_libunwind_frame_unwind)
-	(ia64_libunwind_sigtramp_frame_unwind): Ditto.
-	* iq2000-tdep.c (iq2000_frame_unwind): Ditto.
-	* lm32-tdep.c (lm32_frame_unwind): Ditto.
-	* m32c-tdep.c (m32c_unwind): Ditto.
-	* m32r-linux-tdep.c (m32r_linux_sigtramp_frame_unwind): Ditto.
-	* m32r-tdep.c (m32r_frame_unwind): Ditto.
-	* m68hc11-tdep.c (m68hc11_frame_unwind): Ditto.
-	* m68k-tdep.c (m68k_frame_unwind): Ditto.
-	* m68klinux-tdep.c (m68k_linux_sigtramp_frame_unwind): Ditto.
-	* m88k-tdep.c (m88k_frame_unwind): Ditto.
-	* mep-tdep.c (mep_frame_unwind): Ditto.
-	* microblaze-tdep.c (microblaze_frame_unwind): Ditto.
-	* mips-tdep.c (mips_insn16_frame_unwind, mips_insn32_frame_unwind)
-	(mips_stub_frame_unwind): Ditto.
-	* mn10300-tdep.c (mn10300_frame_unwind): Ditto.
-	* moxie-tdep.c (moxie_frame_unwind): Ditto.
-	* mt-tdep.c (mt_frame_unwind): Ditto.
-	* ppc-linux-tdep.c (ppu2spu_unwind): Ditto.
-	* ppcobsd-tdep.c (ppcobsd_sigtramp_frame_unwind): Ditto.
-	* rs6000-tdep.c (rs6000_frame_unwind): Ditto.
-	* s390-tdep.c (s390_frame_unwind, s390_stub_frame_unwind)
-	(s390_sigtramp_frame_unwind): Ditto.
-	* score-tdep.c (score_prologue_unwind): Ditto.
-	* sh-tdep.c (sh_frame_unwind): Ditto.
-	* sh64-tdep.c (sh64_frame_unwind): Ditto.
-	* sparc-sol2-tdep.c (sparc32_sol2_sigtramp_frame_unwind): Ditto.
-	* sparc-tdep.c (sparc32_frame_unwind): Ditto.
-	* sparc64-sol2-tdep.c (sparc64_sol2_sigtramp_frame_unwind): Ditto.
-	* sparc64-tdep.c (sparc64_frame_unwind): Ditto.
-	* sparc64fbsd-tdep.c (sparc64fbsd_sigtramp_frame_unwind): Ditto.
-	* sparc64nbsd-tdep.c (sparc64nbsd_sigcontext_frame_unwind): Ditto.
-	* sparc64obsd-tdep.c (sparc64obsd_frame_unwind)
-	(sparc64obsd_trapframe_unwind): Ditto.
-	* sparcnbsd-tdep.c (sparc32nbsd_sigcontext_frame_unwind): Ditto.
-	* sparcobsd-tdep.c (sparc32obsd_sigtramp_frame_unwind): Ditto.
-	* spu-tdep.c (spu_frame_unwind, spu2ppu_unwind): Ditto.
-	* v850-tdep.c (v850_frame_unwind): Ditto.
-	* vax-tdep.c (vax_frame_unwind): Ditto.
-	* vaxobsd-tdep.c (vaxobsd_sigtramp_frame_unwind): Ditto.
-	* xstormy16-tdep.c (frame_unwind xstormy16_frame_unwind): Ditto.
-	* xtensa-tdep.c (xtensa_unwind): Ditto.
-
-2011-03-18  Pedro Alves  <pedro at codesourcery.com>
-
-	* tui/tui-hooks.c (tui_selected_frame_level_changed_hook): Assume
-	there's always a frame.  Use get_frame_pc_if_available instead of
-	get_frame_pc, and if there's no PC available, don't look up a
-	symtab.
-
-2011-03-18  Pedro Alves  <pedro at codesourcery.com>
-
-	* stack.c (print_frame_local_vars, print_frame_arg_vars): Handle
-	unavailable PC.
-
-2011-03-18  Pedro Alves  <pedro at codesourcery.com>
-
-	* tracepoint.c (set_traceframe_context): Handle unavailable PC
-	gracefully.
-
-2011-03-18  Pedro Alves  <pedro at codesourcery.com>
-
-	* frame.h (frame_unwind_caller_pc_if_available): Declare.
-	* frame.c (frame_unwind_caller_pc_if_available): New.
-	* stack.c (frame_info): Handle unavailable PC.
-
-2011-03-18  Pedro Alves  <pedro at codesourcery.com>
-
-	* frame.c (frame_unwind_pc): Rename to ...
-	(frame_unwind_pc_if_available): ... this.  New `pc' output
-	parameter.  Change return type to int.  Gracefully handle
-	gdbarch_unwind_pc throwing NOT_AVAILABLE_ERROR.  Return 0 if that
-	happened, or 1 otherwise.
-	(frame_unwind_pc): Reimplement on top of
-	frame_unwind_pc_if_available.
-	(get_frame_func): Rename to ...
-	(get_frame_func_if_available): New `pc' output parameter.  Change
-	return type to int.  Gracefully handle the PC not being available.
-	(get_frame_func): Reimplement on top of
-	get_frame_func_if_available.
-	(select_frame): Handle the PC being unavailable.
-	(get_prev_frame): Handle the PC being unavailable.
-	(get_frame_pc_if_available): New.
-	(get_frame_address_in_block_if_available): New.
-	(find_frame_sal): Handle the frame PC not being available.
-	* frame.h (get_frame_pc_if_available): Declare.
-	(get_frame_address_in_block_if_available): Declare.
-	(get_frame_func_if_available): Declare.
-	* stack.c (print_frame_info): Handle the PC being unavailable.
-	(find_frame_funname): Ditto.
-	(print_frame): Handle the PC being unavailable.
-	(get_frame_language): Ditto.
-	* blockframe.c (get_frame_block): Ditto.
-	* macroscope.c (default_macro_scope): Ditto.
-	* tui/tui-stack.c (tui_show_frame_info): Ditto.
-
-2011-03-18  Pedro Alves  <pedro at codesourcery.com>
-
-	* dwarf2loc.c (dwarf2_evaluate_loc_desc): Catch
-	NOT_AVAILABLE_ERROR when evaluating the location expression.
-
-2011-03-18  Pedro Alves  <pedro at codesourcery.com>
-
-	* dwarf2loc.c (read_pieced_value): Handle get_frame_register_bytes
-	returning that the register piece is unavailable/optimized out.
-	(write_pieced_value): Handle get_frame_register_bytes returning
-	that the register piece is unavailable/optimized out when doing a
-	read-modify write of a bitfield.
-	* findvar.c (value_from_register): Handle get_frame_register_bytes
-	returning that the register piece is unavailable/optimized out.
-	* frame.c (get_frame_register_bytes): New parameters `optimizedp'
-	and `unavailablep'.  Throw error on bad debug info.  Use
-	frame_register instead of frame_register_read, to fill in the new
-	arguments.
-	* frame.h (get_frame_register_bytes): New parameters `optimizedp'
-	and `unavailablep'.
-	* valops.c: (value_assign): Adjust, and handle
-	get_frame_register_bytes failing.
-	* spu-tdep.c: Include exceptions.h.
-	(spu_software_single_step): Adjust, and handle
-	get_frame_register_bytes failing.
-	(spu_get_longjmp_target): Ditto.
-	* gdbarch.sh (register_to_value): Change to return int.  New
-	parameters `optimizedp' and `unavailablep'.
-	* gdbarch.h, gdbarch.c: Regenerate.
-	* i386-tdep.c (i386_register_to_value): Adjust to new
-	gdbarch_register_to_value interface.
-	* i387-tdep.c (i387_register_to_value): Ditto.
-	* i387-tdep.h (i387_register_to_value): Ditto.
-	* alpha-tdep.c (alpha_register_to_value): Ditto.
-	* ia64-tdep.c (ia64_register_to_value): Ditto.
-	* m68k-tdep.c (m68k_register_to_value): Ditto.
-	* mips-tdep.c (mips_register_to_value): Ditto.
-	* rs6000-tdep.c (rs6000_register_to_value): Ditto.
-
-2011-03-18  Pedro Alves  <pedro at codesourcery.com>
-
-	* findvar.c (value_of_register): Mark the value as unavailable, if
-	the register is unavailable.
-	* frame.h (frame_register_unwind): New `unavailablep' parameter.
-	(frame_register): New `unavailablep' parameter.
-	(frame_register_read): Update comment.
-	* frame.c (frame_register_unwind): New `unavailablep' parameter.
-	Set it if the register is unavailable.  If the register is
-	unavailable, clear the output buffer.
-	(frame_register): New `unavailablep' parameter.  Pass it down.
-	(frame_unwind_register): Adjust.
-	(put_frame_register): Adjust.
-	(frame_register_read): Adjust.  Also return false if the register
-	is not available.
-	(frame_register_unwind_location): Adjust.
-	* sentinel-frame.c (sentinel_frame_prev_register): If the register
-	is unavailable, mark the value accordingly.
-	* stack.c (frame_info): Handle unavailable registers.
-
-2011-03-18  Pedro Alves  <pedro at codesourcery.com>
-
-	* mi/mi-main.c (register_changed_p): Handle REG_UNAVAILABLE, and
-	simplify, using regcache_cooked_read.
-
-2011-03-18  Pedro Alves  <pedro at codesourcery.com>
-
-	* regcache.h (regcache_raw_read, regcache_raw_read_signed)
-	(regcache_raw_read_unsigned, regcache_raw_read_signed)
-	(regcache_raw_read_unsigned, regcache_raw_read_part)
-	(regcache_cooked_read, regcache_cooked_read_signed)
-	(regcache_cooked_read_unsigned, regcache_cooked_read_part)
-	(regcache_cooked_read_ftype): Change return to enum
-	register_status.
-	* regcache.c: Include exceptions.h
-	(regcache_save): Adjust to handle REG_UNAVAILABLE registers.
-	(do_cooked_read): Change return to enum register_status.  Always
-	forward to regcache_cooked_read.
-	(regcache_raw_read): Change return to enum register_status.  If
-	the register is not REG_VALID, memset the buffer.  Return the
-	register's status.
-	(regcache_raw_read_signed): Handle non-REG_VALID registers and
-	return the register's status.
-	(regcache_raw_read_unsigned): Ditto.
-	(regcache_cooked_read): Change return to enum register_status.
-	Assert that with read-only regcaches, the register's status must
-	be known.  If the regcache is read-only, and the register is not
-	REG_VALID, memset the buffer.  Return the register's status.
-	(regcache_cooked_read_signed): Change return to enum
-	register_status.  Handle non-REG_VALID registers and return the
-	register's status.
-	(regcache_cooked_read_unsigned): Change return to enum
-	register_status.  Handle non-REG_VALID registers and return the
-	register's status.
-	(regcache_xfer_part, regcache_raw_read_part)
-	(regcache_cooked_read_part): Change return to enum
-	register_status.  Return the register's status.
-	(regcache_read_pc): Throw NOT_AVAILABLE_ERROR if the register is
-	unavailable.
-	(regcache_dump): Handle unavailable cooked registers.
-	* frame.c (do_frame_register_read): Adjust interface to match
-	regcache_cooked_read_ftype.
-	* gdbarch.sh (pseudo_register_read): Change return to enum
-	register_status.
-	* gdbarch.h, gdbarch.c: Regenerate.
+	* dwarf2read.c (dwarf2_cu): Remove unused members has_form_ref_addr,
+	has_namespace_info.
+	(dwarf2_read_abbrevs): Remove corresponding initialization.
 
-	* i386-tdep.h (i386_pseudo_register_read): Change return to enum
-	register_status.
-	* i386-tdep.c (i386_pseudo_register_read): Change return to enum
-	register_status.  If reading a raw register indicates the raw
-	register is not valid, return the raw register's status,
-	otherwise, return REG_VALID.
-	* amd64-tdep.c (amd64_pseudo_register_read): Change return to enum
-	register_status.  Handle non-REG_VALID raw registers and return
-	the register's status.
-	* arm-tdep.c (arm_neon_quad_read)
-	(arm_pseudo_read): Change return to enum register_status.  Handle
-	non-REG_VALID raw registers and return the register's status.
-	* avr-tdep.c (avr_pseudo_register_read): Ditto.
-	* frv-tdep.c (frv_pseudo_register_read): Ditto.
-	* h8300-tdep.c (h8300_pseudo_register_read): Ditto.
-	* hppa-tdep.c (hppa_pseudo_register_read): Ditto.
-	* m32c-tdep.c (m32c_move_reg_t): Change return to enum
-	register_status.
-	(m32c_raw_read, m32c_raw_write, m32c_banked_read)
-	(m32c_banked_write, m32c_sb_read, m32c_sb_write, m32c_part_read)
-	(m32c_part_write, m32c_cat_read, m32c_cat_write)
-	(m32c_r3r2r1r0_read, m32c_r3r2r1r0_write)
-	(m32c_pseudo_register_read): Change return to enum
-	register_status.  Adjust.
-	* m68hc11-tdep.c (m68hc11_pseudo_register_read): Change return to
-	enum register_status.  Return the register's status.
-	* mep-tdep.c (mep_pseudo_cr32_read): Change return to enum
-	register_status.  Return the register's status.
-	(mep_pseudo_cr64_read, mep_pseudo_register_read): Ditto.
-	* mips-tdep.c (mips_pseudo_register_read): Ditto.
-	* mt-tdep.c (mt_pseudo_register_read): Ditto.
-	* rs6000-tdep.c (move_ev_register_func): New typedef.
-	(e500_move_ev_register): Use it.  Change return to enum
-	register_status.  Return the register's status.
-	(do_regcache_raw_read): New function.
-	(do_regcache_raw_write): New function.
-	(e500_pseudo_register_read): Change return to enum
-	register_status.  Return the register's status.  Use
-	do_regcache_raw_read.
-	(e500_pseudo_register_write): Adjust.  Use do_regcache_raw_write.
-	(dfp_pseudo_register_read): Change return to enum register_status.
-	Return the register's status.
-	(vsx_pseudo_register_read): Ditto.
-	(efpr_pseudo_register_read): Ditto.
-	(rs6000_pseudo_register_read): Ditto.
-	* s390-tdep.c (s390_pseudo_register_read): Change return to enum
-	register_status.  Return the register's status.
-	* sh64-tdep.c (pseudo_register_read_portions): New function.
-	(sh64_pseudo_register_read): Change return to enum
-	register_status.  Use pseudo_register_read_portions.  Return the
-	register's status.
-	* ia64-tdep.c (ia64_pseudo_register_read): Change return to enum
-	register_status.  Return the register's status.
-	* sh-tdep.c (pseudo_register_read_portions): New function.
-	(sh_pseudo_register_read): Change return to enum register_status.
-	Use pseudo_register_read_portions.  Return the register's status.
-	* sparc-tdep.c (sparc32_pseudo_register_read): Change return to
-	enum register_status.  Return the register's status.
-	* sparc64-tdep.c (sparc64_pseudo_register_read): Ditto.
-	* spu-tdep.c (spu_pseudo_register_read_spu)
-	(spu_pseudo_register_read): Ditto.
-	* xtensa-tdep.c (xtensa_register_read_masked)
-	(xtensa_pseudo_register_read): Ditto.
-	* bfin-tdep.c (bfin_pseudo_register_read): Ditto.
-
-2011-03-18  Pierre Muller  <muller at ics.u-strasbg.fr>
-
-	* python/py-value.c (valpy_getitem): Fix formatting of error function
-	call.
+2012-03-01  Scott J. Goldman <scottjg at vmware.com>
 
-2011-03-18  Pierre Muller  <muller at ics.u-strasbg.fr>
+	* NEWS: Mention new python command class gdb.COMMAND_USER.
+	* cli/cli-cmds.c (show_user): Print error when used on a python
+	command.
+	(init_cli_cmds): Update documentation strings for "show user" and
+	"set/show max-user-call-depth" to clarify that it does not apply to
+	python commands.
+	* python/py-cmd.c (cmdpy_init): Treat class_user as a valid class in
+	error check.
+	(gdbpy_initialize_commands): Add COMMAND_USER as a constant in
+	gdb python api.
+	* top.c (execute_command): Only execute a user-defined command as a
+	legacy macro if c->user_commands is set.
+
+2012-03-01  Tom Tromey  <tromey at redhat.com>
+
+	* valprint.h (struct generic_val_print_decorations): New.
+	(generic_val_print): Declare.
+	* valprint.c (generic_val_print): New function.
+	* p-valprint.c (p_decorations): New global.
+	(pascal_val_print) <TYPE_CODE_REF, TYPE_CODE_ENUM,
+	TYPE_CODE_FLAGS, TYPE_CODE_FUNC, TYPE_CODE_RANGE, TYPE_CODE_INT,
+	TYPE_CODE_FLT, TYPE_CODE_VOID, TYPE_CODE_ERROR, TYPE_CODE_UNDEF,
+	TYPE_CODE_BOOL, TYPE_CODE_CHAR>: Call generic_val_print.
+	* m2-valprint.c (m2_decorations): New global.
+	(m2_val_print) <TYPE_CODE_REF, TYPE_CODE_ENUM, TYPE_CODE_FUNC,
+	TYPE_CODE_BOOL, TYPE_CODE_RANGE, TYPE_CODE_INT, TYPE_CODE_CHAR,
+	TYPE_CODE_FLT, TYPE_CODE_METHOD, TYPE_CODE_VOID, TYPE_CODE_UNDEF,
+	TYPE_CODE_ERROR>: Call generic_val_print.
+	* f-valprint.c (f_decorations): New global.
+	(f_val_print): Use print_function_pointer_address.
+	<TYPE_CODE_REF, TYPE_CODE_FUNC, TYPE_CODE_CHAR, TYPE_CODE_FLAGS,
+	TYPE_CODE_FLT, TYPE_CODE_VOID, TYPE_CODE_ENUM, TYPE_CODE_RANGE,
+	TYPE_CODE_BOOL, TYPE_CODE_COMPLEX, TYPE_CODE_UNDEF>: Call
+	generic_val_print.
+	* c-valprint.c (c_decorations): New global.
+	(c_val_print) <TYPE_CODE_MEMBERPTR, TYPE_CODE_REF, TYPE_CODE_ENUM,
+	TYPE_CODE_FLAGS, TYPE_CODE_FUNC, TYPE_CODE_METHOD, TYPE_CODE_BOOL,
+	TYPE_CODE_RANGE, TYPE_CODE_CHAR, TYPE_CODE_FLT,
+	TYPE_CODE_DECFLOAT, TYPE_CODE_VOID, TYPE_CODE_ERROR,
+	TYPE_CODE_UNDEF, TYPE_CODE_COMPLEX>: Call generic_val_print.
+	* ada-valprint.c (ada_val_print_1) <TYPE_CODE_FLAGS>: Remove
+	case.
 
-	ARI fixes: Add missing internationalization markups throughout
-	C source files.
-	* darwin-nat-info.c: Ditto.
-	* record.c: Ditto.
-	* remote.c: Ditto.
-	* mi/mi-main.c: Ditto.
+2012-03-01  Tom Tromey  <tromey at redhat.com>
 
-2011-03-18  Pierre Muller  <muller at ics.u-strasbg.fr>
+	* valprint.c (val_print): Update.
+	* p-valprint (pascal_val_print): Return void.
+	* p-lang.h (pascal_val_print): Return void.
+	* m2-valprint.c (m2_val_print): Return void.
+	* m2-lang.h (m2_val_print): Return void.
+	* language.h (struct language_defn) <la_val_print>: Return void.
+	* language.c (unk_lang_val_print): Return void.
+	* jv-valprint.c (java_val_print): Return void.
+	* jv-lang.h (java_val_print): Return void.
+	* f-valprint.c (f_val_print): Return void.
+	* f-lang.h (f_val_print): Return void.
+	* d-valprint.c (d_val_print): Return void.
+	(dynamic_array_type): Update.
+	* d-lang.h (d_val_print): Return void.
+	* c-valprint.c (c_val_print): Return void.
+	* c-lang.h (c_val_print): Return void.
+	* ada-valprint.c (ada_vada_val_print, ada_val_print_1): Return
+	void.
+	* ada-lang.h (ada_val_print): Return void.
 
-	ARI fixes: Add missing internationalization markups throughout
-	yacc files.
-	* c-exp.y: Ditto.
-	* cp-name-parser.y: Ditto.
-	* f-exp.y: Ditto.
-	* m2-exp.y: Ditto.
-	* objc-exp.y: Ditto.
-	* p-exp.y: Ditto.
+2012-03-01  Tom Tromey  <tromey at redhat.com>
 
-2011-03-18  Pierre Muller  <muller at ics.u-strasbg.fr>
+	* value.h (val_print): Return void.
+	* valprint.c (val_print): Return void.
 
-	ARI fixes: Messages should have no trailing new lines.
-	* darwin-nat.c (mach_check_error): Remove trailing new line from
-	warning function call message.
-	* record.c (bfdcore_read): Idem for error call.
+2012-03-01  Tom Tromey  <tromey at redhat.com>
 
-2011-03-18  Pierre Muller  <muller at ics.u-strasbg.fr>
+	* value.h (common_val_print): Return void.
+	* valprint.c (common_val_print): Return void.
 
-	* common/signals.c (target_signal_from_host): Add _ markup to error
-	function call message.
-	(target_signal_to_host): Add _ markup and remove trailing new line
-	from warning call message.
-	(target_signal_from_command): Add _ markup to error function call
-	message.
+2012-03-01  Tom Tromey  <tromey at redhat.com>
 
-2011-03-18  Phil Muldoon  <pmuldoon at redhat.com>
+	* value.h (value_print): Return void.
+	* valprint.c (value_print): Return void.
+	* p-valprint.c (pascal_value_print): Return void.
+	* p-lang.h (pascal_value_print): Return void.
+	* language.h (struct language_defn) <la_value_print>: Return
+	void.
+	* language.c (unk_lang_value_print): Return void.
+	* jv-valprint.c (java_value_print): Return void.
+	* jv-lang.h (java_value_print): Return void.
+	* f-valprint.c (c_value_print): Don't declare.
+	Include c-lang.h.
+	* c-valprint.c (c_value_print): Return void.
+	* c-lang.h (c_value_print): Return void.
+	* ada-valprint.c (ada_value_print): Return void.
+	* ada-lang.h (ada_value_print): Return void.
 
-	PR python/12149
+2012-03-01  Tom Tromey  <tromey at redhat.com>
 
-	* python/python.c (gdbpy_write): Accept a stream argument and
-	operate to the appropriate stream.
-	(gdbpy_flush): Likewise.
-	(_initialize_python): Add stream constants.
-	(finish_python_initialization): Add GdbOutputErrorFile class.
+	* value.c (value_primitive_field): Handle virtual base classes.
 
-2011-03-18  Kwok Cheung Yeung  <kcy at codesourcery.com>
+2012-03-01  Tom Tromey  <tromey at redhat.com>
 
-	* MAINTAINERS: Add myself as a write-after-approval maintainer.
+	* gdbtypes.h (struct vbase): Remove.
 
-2011-03-18  Kwok Cheung Yeung  <kcy at codesourcery.com>
+2012-03-01  Tom Tromey  <tromey at redhat.com>
 
-	* amd64-tdep.c (amd64_relocate_instruction): Fix ordering of arguments
-	to store_signed_integer.  Add debug message when relocating CALL
-	instructions.  Fix formatting of debug message.
-	* i386-tdep.c (i386_relocate_instruction): Ditto.
+	* c-valprint.c (print_function_pointer_address): Move...
+	* valprint.c: ... here.  Make non-static.
+	* m2-valprint.c (print_function_pointer_address): Remove.
+	* valprint.h (print_function_pointer_address): Declare.
 
-2011-03-17  Joel Brobecker  <brobecker at gnat.com>
+2012-03-01  Joel Brobecker  <brobecker at adacore.com>
 
-	* target.h (struct target_ops): Remove to_lookup_symbol field.
-	(target_lookup_symbol): Delete macro.
-	* target.c (nosymbol, debug_to_lookup_symbol): Delete.
-	(update_current_target, setup_target_debug): Remove handling
-	of to_lookup_symbol target_ops field.
-	* ada-tasks.c (get_known_tasks_addr): Remove use of
-	target_lookup_symbol.
-	* coffread.c (coff_symtab_read): Likewise.
-	* dbxread.c (read_dbx_symtab): Ditto.
+	* NEWS: Document the fact that one can provide a condition when
+	creating an Ada exception catchpoint.
 
-2011-03-17  Joel Brobecker  <brobecker at gnat.com>
+2012-03-01  Tom Tromey  <tromey at redhat.com>
 
-	PR gdb/12116:
-	* configure.ac: Add getthrds declaration check.
-	* configure, config.in: Regenerate.
-	* aix-thread.c (getthrds): Declare only if not already declared
-	in procinfo.h.  More declaration out of get_signaled_thread to
-	global scope.
-
-2011-03-17  Phil Muldoon  <pmuldoon at redhat.com>
-
-	* python/py-symtab.c: Populate symtab_object_methods,
-	sal_object_methods.
-	(stpy_is_valid): New function.
-	(salpy_is_valid): Ditto.
-	* python/py-symbol.c: Declare symbol_object_methods.  Populate.
-	(sympy_is_valid): New function.
-	* python/py-objfile.c: Declare objfile_object_methods.  Populate.
-	(objfpy_is_valid): New function.
-	* python/py-inferior.c: Populate inferior_object_methods.
-	(infpy_is_valid): New function.
-	* python/py-infthread.c: Populate thread_object_methods.
-	(thpy_is_valid): New function.
-	* python/py-block.c: Declare block_object_methods.  Populate.  Declare
-	block_iterator_object_methods.  Populate.
-	(blpy_is_valid): New function.
-	(blpy_iter_is_valid): Ditto.
-
-2011-03-16  Keith Seitz  <keiths at redhat.com>
-
-	* linespec.c (find_methods): Canonicalize NAME before looking
-	up the symbol.
-	(name_end): New function.
-	(keep_name_info): New function.
-	(decode_line_1): Use keep_name_info.
-	(decode_compound): Likewise.
-	* cli/cli-utils.h (remove_trailing_whitespace): New function.
-	* cli/cli-utils.c (remove_trailing_whitespace): Likewise.
-
-	PR c++/12273
-	* linespec.c (locate_first_half): Keep overload information, too.
-	(decode_compound): Use a string to represent break characters
-	to escape the loop.
-	If P points to a break character, do not increment it.
-	For C++ and Java, keep overload information and relevant keywords.
-	If we cannot find a symbol, search the minimal symbols.
-
-	PR c++/11734
-	* linespec.c (decode_compound): Rename SAVED_ARG to
-	THE_REAL_SAVED_ARG.
-	Make a copy of THE_REAL_SAVED_ARG in SAVED_ARG and strip
-	single-quotes.
-	Pass a valid block to lookup_symbol.
-	(lookup_prefix_sym): Likewise.
-	(find_method): Construct search name based on SYM_CLASS instead
-	of SAVED_ARG.
-	* psymtab.c (lookup_partial_symbol): Add language parameter.
-	(lookup_symbol_aux_psymtabs): Likewise.
-	Don't assume that the psymtab we found was the right one. Search
-	for the desired symbol in the symtab to be certain.
-	(psymtab_search_name): New function.
-	(lookup_partial_symbol): Use psymtab_search_name.
-	Add language parameter.
-	(read_symtabs_for_function): Add language parameter and pass to
-	lookup_partial_symbol.
-	(find_symbol_file_from_partial): Likewise.
+	* valprint.c (val_print_type_code_flags): Fix placement of
+	trailing brace.
 
-2011-03-16  Paul Pluzhnikov  <ppluzhnikov at google.com>
+2012-03-01  Joel Brobecker  <brobecker at adacore.com>
 
-	PR gdb/12528
-	* dwarf2read.c (noop_record_line): New function.
-	(dwarf_decode_lines): Ignore line tables for GCd functions.
+	* copyright.py (MULTILINE_COMMENT_PREFIXES): Delete.
+	(update_files): Do not set MULTILINE_COMMENT_PREFIXES
+	environment variable before calling update-copyright.
 
-2011-03-16  Pierre Muller  <muller at ics.u-strasbg.fr>
+2012-03-01  Joel Brobecker  <brobecker at adacore.com>
 
-	Fix ARI warnings about new lines at the end of messages, which
-	are unneeded as there is a new line added at the end of the message
-	automatically.
-	* darwin-nat.c (darwin_stop_inferior): Ditto.
-	* dec-thread.c (dec_thread_get_ada_task_ptid): Ditto.
-	* dfp.c (decimal_to_number): Ditto.
-	* exec.c (print_section_info): Ditto.
-	* i386-darwin-nat.c (darwin_set_sstep): Ditto.
-	* osdata.c (get_osdata): Ditto.
-	* record.c (bfdcore_write): Ditto.
-	* remote-mips.c (mips_readchar): Ditto.
-	* remote.c (read_ptid): Ditto.
-	* ser-mingw.c (ser_windows_raw): Ditto.
-	* tracepoint.c (add_local_symbols): Ditto.
-	* windows-nat.c (fake_create_process): Ditto.
+	* gnulib/extra/update-copyright: Update to the latest from
+	gnulib's git repository.
+	* copyright.py: Set UPDATE_COPYRIGHT_USE_INTERVALS environment
+	variable to 2 instead of 1.
 
-2011-03-16  Tom Tromey  <tromey at redhat.com>
+2012-02-29  Joel Brobecker  <brobecker at adacore.com>
 
-	* tracepoint.c (stop_tracing): Don't declare.
-	* event-top.c (after_char_processing_hook): Add `(void)'.
+	* varobj.c (c_value_of_variable): Remove dead code.
 
-2011-03-16  Phil Muldoon  <pmuldoon at redhat.com>
+2012-02-29  Joel Brobecker  <brobecker at adacore.com>
 
-	* NEWS: Add Parameter sub-classing description.
+	* ada-lex.p (processId): Do not modify already encoded IDs.
+	Update function documentation.
 
-2011-03-16  Kai Tietz  <ktietz at redhat.com>
+2012-02-29  Joel Brobecker  <brobecker at adacore.com>
 
-	* MAINTAINERS: Update my e-mail address.
+	* ada-lang.h (ada_find_renaming_symbol): Replace parameter
+	"name" with "struct symbol *name_sym".
+	* ada-exp.y (write_var_or_type): Update call to
+	ada_find_renaming_symbol.
+	"name" with "struct symbol *name_sym". Adjust Implementation
+	accordingly.  Adjust the function documentation.
 
-2011-03-15  Andreas Tobler  <andreast at fgznet.ch>
+2012-02-29  Joel Brobecker  <brobecker at adacore.com>
 
-	* MAINTAINERS: Add myself for write after approval privileges.
+	* ada-lang.h (ada_find_any_symbol, ada_find_any_type): Delete.
+	* ada-lang.c (ada_find_any_type): Add advance declaration.
+	Make static.  Replace ada_find_any_symbol by
+	ada_find_any_type_symbol.
+	(ada_find_any_type_symbol): Renames ada_find_any_symbol.
+	Improve function description.  Make static.
+	(ada_find_renaming_symbol, find_old_style_renaming_symbol):
+	Replace ada_find_any_symbol by ada_find_any_type_symbol.
 
-2011-03-15  Michael Snyder  <msnyder at vmware.com>
+2012-02-29  Joel Brobecker  <brobecker at adacore.com>
 
-	* frame.c (find_frame_sal): Assert sym is not null.
+	* ada-lang.c (struct tag_args): Delete.
+	(ada_get_tsd_type): Function body moved up in source file.
+	(ada_tag_name_1, ada_tag_name_2): Delete.
+	(ada_get_tsd_from_tag): New function.
+	(ada_tag_name_from_tsd): New function.
+	(ada_tag_name): Use a TRY_CATCH block instead of catch_errors
+	to determine the tag name.
 
-	* dbxread.c (process_one_symbol): Assert 'name' is not null.
+2012-02-29  Joel Brobecker  <brobecker at adacore.com>
 
-	* objc-lang.c (selectors_info): Check strchr for null result.
+	* ada-lang.h (ada_get_decoded_value, ada_get_decoded_type): Add
+	declaration.
+	* ada-lang.c (ada_get_decoded_value, ada_get_decoded_type): New
+	function.
 
-	* stabsread.c (define_symbol): Guard against bad stabstring input.
+2012-02-29  Joel Brobecker  <brobecker at adacore.com>
 
-2011-03-15  Pierre Muller  <muller at ics.u-strasbg.fr>
+	* ada-lang.c (ada_is_ignored_field): Rewrite wrong comment.
 
-	Remove trailing spaces and tabulations from pascal language
-	support sources.
-	p-exp.y: Ditto.
-	p-lang.c: Ditto.
-	p-lang.h: Ditto.
-	p-valprint.c: Ditto.
+2012-02-29  Joel Brobecker  <brobecker at adacore.com>
 
-2011-03-15  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* ada-lang.c (ada_lookup_symbol_list): Only cache the result of
+	full searches.
 
-	* dwarf2read.c (dwarf2_get_pc_bounds): Require HIGH strictly higher
-	than LOW.  Comment it.
-	(read_partial_die): Call complaint for inappropriate zero LOWPC or
-	HIGHPC not strictly higher than LOWPC.
+2012-02-29  Joel Brobecker  <brobecker at adacore.com>
 
-2011-03-15  Pierre Muller  <muller at ics.u-strasbg.fr>
+	* ada-lang.c (constrained_packed_array_type): If there is a
+	parallel XA type, use it to determine the array index type.
 
-	Fix formatting of function declarations returning a pointer in
-	previous commit.
-	* varobj.c (varobj_add_child): Ditto.
-	* hppa-tdep.h (hppa_init_objfile_priv_data): Ditto.
-	* inferior.h (get_displaced_step_closure_by_addr): Ditto.
+2012-02-29  Joel Brobecker  <brobecker at adacore.com>
 
-2011-03-15  Ulrich Weigand  <uweigand at de.ibm.com>
+	* ada-valprint.c (ada_val_print_1): If our value is a reference
+	to an array descriptor, dereference it before converting it
+	to a simple array.
 
-	* ppc-sysv-tdep.c (ppc64_sysv_abi_push_dummy_call): Add support
-	for the "generic" vector ABI used with GCC 4.3 and later.
-	(ppc64_sysv_abi_return_value): Likewise.
+2012-02-29  Joel Brobecker  <brobecker at adacore.com>
 
-2011-03-15  Ulrich Weigand  <uweigand at de.ibm.com>
-
-	* infcall.c (call_function_by_hand): Function return value is
-	always a non_lval, even when using struct_return.
-
-2011-03-15  Pedro Alves  <pedro at codesourcery.com>
-
-	* printcmd.c (ALL_DISPLAYS_SAFE): New.
-	(map_display_numbers): New.
-	(do_delete_display): New.
-	(undisplay_command): Use map_display_numbers.
-	(do_enable_disable_display): New.
-	(enable_disable_display_command): New function.
-	(enable_display): Delete.
-	(enable_display_command): New.
-	(disable_display_command): Reimplement.
-	(_initialize_printcmd): Adjust "enable display" command to use
-	`enable_display_command' as callback.
+	* ada-lang.c (ada_to_fixed_value): Call unwrap_value before
+	creating fixed value.
+	(ada_value_ind, ada_coerce_ref, assign_component)
+	(ada_evaluate_subexp): Remove call to unwrap_value before
+	call to ada_to_fixed_value.
 
-2011-03-14  Phil Muldoon  <pmuldoon at redhat.com>
+2012-02-29  Joel Brobecker  <brobecker at adacore.com>
 
-	* NEWS: Add Python breakpoint 'stop' operation.
-
-2011-03-14  Phil Muldoon  <pmuldoon at redhat.com>
+	* ada-lang.c (to_fixed_array_type): Set result's type name.
 
-	* NEWS: Delete duplicate entry. Fix typo.
+2012-02-29  Joel Brobecker  <brobecker at adacore.com>
 
-2011-03-14  Pierre Muller  <muller at ics.u-strasbg.fr>
+	* ada-lang.c (catch_ada_exception_command_split): Add new
+	argument cond_string.  Add support for condition at end of
+	"catch exception" commands.
+	(ada_decode_exception_location): Add new argument cond_string.
+	Update call to catch_ada_exception_command_split.
+	(create_ada_exception_catchpoint): Add new argument cond_string.
+	Set the breakpoint condition if needed.
+	(catch_ada_exception_command): Update call to
+	ada_decode_exception_location.
+	(ada_decode_assert_location): Add function documentation.
+	Add support for condition at end of "catch assert" command.
+	(catch_assert_command): Update calls to ada_decode_assert_location
+	and create_ada_exception_catchpoint.
 
-	Fix ARI warning about function names in first column.
-	Put prototype declaration on same line as return type.
-	* objc-exp.y: Ditto.
-	* p-exp.y: Ditto.
-	* python/py-stopevent.h: Ditto.
-	For long function names, split parameters to
-	allow function name on same line as return type.
-	* solib-pa64.c: Ditto.
-	* varobj.c: Ditto.
-	* varobj.h: Ditto.
-	For long function declaration, use single line.
-	* hppa-tdep.h: Ditto.
-	* inferior.h: Ditto.
-
-2011-03-14  Phil Muldoon  <pmuldoon at redhat.com>
-
-	* python/python.h: Declare gdbpy_should_stop and
-	gdbpy_breakpoint_has_py_cond.
-	* python/python.c: Add python.h to includes.  Remove python.h from
-	HAVE_PYTHON definition
-	(gdbpy_should_stop): New dummy function.
-	(gdbpy_breakpoint_has_py_cond): New dummy function.
-	* python/py-breakpoint.c (bppy_init): Rewrite to allow
-	sub-classing capabilities.
-	(gdbpy_should_stop): New function.
-	(gdbpy_breakpoint_has_py_cond): New function.
-	(local_setattro): New function.
-	* breakpoint.c (condition_command): Add check for Python 'stop'
-	operation.
-	(bpstat_check_breakpoint_conditions): Execute Python 'stop'
-	operation function as part of stop/continue tests.
-
-2011-03-14  Tom Tromey  <tromey at redhat.com>
-
-	PR gdb/12576:
-	* dwarf2loc.c (dwarf_expr_dwarf_call): Remove 'return'.
-	(needs_frame_dwarf_call): Likewise.
-
-2011-03-14  Pierre Muller  <muller at ics.u-strasbg.fr>
-
-	Fix ARI warning about functions without parameters that do not
-	use (void).
-	* breakpoint.c (all_tracepoints): Replace () by (void).
-	* f-exp.y (match_string_literal): Ditto.
-	(yylex): Ditto.
-	* m2-exp.y (yylex): Ditto.
-	* mep-tdep.c (current_me_module): Ditto.
-	(current_options): Ditto.
-	(current_cop_data_bus_width): Ditto.
-	(current_cr_names): Ditto.
-	(current_cr_is_float): Ditto.
-	(current_ccr_names): Ditto.
-	* objc-exp.y (yylex): Ditto.
-	* p-exp.y (yylex): Ditto.
-	* remote.c (send_interrupt_sequence): Ditto.
-	* tracepoint.c (current_trace_status): Ditto.
-	* python/py-evts.c (gdbpy_initialize_py_events): Ditto.
-	* python/py-prettyprint.c (push_dummy_python_frame): Ditto.
-
-2011-03-11  Michael Snyder  <msnyder at vmware.com>
-
-	* cli/cli-decode.h (CMD_LIST_AMBIGUOUS): Define.
-	* cli/cli-decode.c (lookup_cmd_1): Use CMD_LIST_AMBIGUOUS.
-	(lookup_cmd): Test for CMD_LIST_AMBIGUOUS.
-	* completer.c (complete_line_internal): Use CMD_LIST_AMBIGUOUS.
-	* top.c (set_verbose): Use CMD_LIST_AMBIGUOUS.
-
-	* event-loop-c (delete_async_signal_handler): Assert prev_ptr.
-	(delete_async_event_handler): Ditto.
-
-	* python/py-breakpoint.c (bppy_set_condition): Stop memory leak.
-
-	* python/py-breakpoint.c (bppy_get_commands): Fix memory leak.
-
-	* top.c (set_verbose): Assert showcmd was found.
-
-2011-03-11  Maxim Grigoriev  <maxim2405 at gmail.com>
-
-	* xtensa-tdep.c (warning_once): Correct style issues.
-
-2011-03-11  Yao Qi  <yao at codesourcery.com>
-
-	* arm-tdep.c (copy_ldr_str_ldrb_strb): Remove redundant statements.
-
-2011-03-11  Andreas Schwab  <schwab at redhat.com>
-
-	* common/aclocal.m4: Remove.
-
-2011-03-10  Maxim Grigoriev  <maxim2405 at gmail.com>
-
-	* xtensa-tdep.c (windowing_enabled): Remove inline attribute.
-	(xtensa_write_register, xtensa_read_register): Likewise.
-	(xtensa_hextochar): Removed.
-	(xtensa_init_reggroups): Replace xtensa_hextochar () by explicit code.
-
-2011-03-10  Maxim Grigoriev  <maxim2405 at gmail.com>
-
-	* xtensa-tdep.c (xtensa_c0reg_t): Update comments.
-	(xtensa_call0_frame_cache_t): Update comments.  New fields added.
-	(xtensa_alloc_frame_cache): Add initialization for new fields.
-	(xtensa_frame_cache): Change the way how call0_frame_cache () is called.
-	(warning_once): New function.
-	(xtensa_insn_kind): New item c0opc_and.
-	(call0_classify_opcode): Add the case for AND instruction.
-	(call0_track_op): Change arguments.  New local variable litbase.
-	Add the case to handle c0opc_and.  Update algorithms for c0opc_mov,
-	c0opc_l32r, c0opc_s32i to take into account dynamic stack adjustments
-	in the prologue.
-	Add cases for c0opc_l32e, c0opc_s32e, c0opc_rfwo, c0opc_rfwu.
-	(call0_analyze_prologue): Update the comments.  Change arguments.
-	Add the variety of updates to handle extended prologues, which now can
-	conduct dynamic stack adjustments.
-	(call0_frame_cache): Likewise.
-	(xtensa_skip_prologue): Update call0_analyze_prologue () function call.
-	(xtensa_gdbarch_init): Initialize xtensa_session_once_reported.
-
-2011-03-10  Michael Snyder  <msnyder at vmware.com>
-
-	* tracepoint.c (cmd_qtv): Discard unused value 'packet'.
-	(cmd_qtframe): Ditto.
-	(cmd_qtbuffer): Ditto.
-	(cmd_bigqtbuffer): Ditto.
-
-2011-03-10  Tom Tromey  <tromey at redhat.com>
-
-	* tracepoint.c (trace_actions_command): Update.
-	* thread.c (thread_apply_command): Update.
-	* reverse.c (delete_bookmark_command): Update.
-	(bookmarks_info): Update.
-	* printcmd.c (undisplay_command): Update.
-	* memattr.c (mem_enable_command): Update.
-	(mem_disable_command): Update.
-	(mem_delete_command): Update.
-	* inferior.c (detach_inferior_command): Update.
-	(kill_inferior_command): Update.
-	(remove_inferior_command): Update.
-	* cli/cli-utils.h (struct get_number_or_range_state): New.
-	(init_number_or_range): Declare.
-	(get_number_or_range): Update.
-	* cli/cli-utils.c (init_number_or_range): New function.
-	(get_number_or_range): Change 'pp' parameter to 'state'.  Remove
-	static variables.
-	(number_is_in_list): Update.
-	* breakpoint.h (get_tracepoint_by_number): Update.
-	* breakpoint.c (map_breakpoint_numbers): Update for change to
-	get_number_or_range.
-	(find_location_by_number): Use get_number, not
-	get_number_or_range.
-	(trace_pass_set_count): New function.
-	(trace_pass_command): Update for change to get_number_or_range.
-	Rework loop logic.
-	(get_tracepoint_by_number): Remove 'multi_p' parameter; add
-	'state' parameter.
-
-2011-03-10  Phil Muldoon  <pmuldoon at redhat.com>
-
-	* python/py-param.c (add_setshow_generic): Add set/show callback
-	parameters.  Register Python object context.
-	(get_show_value): New function.
-	(get_set_value): New function.
-	(call_doc_function): New function.
-	(get_doc_string): Move behind get_show_value/get_set_value.
-
-2011-03-10  Andreas Tobler  <andreast-list at fgznet.ch>
-
-	* fbsd-nat.c (fbsd_make_corefile_notes): Constify local `fname'.
-
-2011-03-09  Maxim Grigoriev  <maxim2405 at gmail.com>
-
-	* xtensa-tdep.c (xtensa_read_register): Add comment.
-	(xtensa_write_register): Likewise.
-	(xtensa_hextochar): Add comment and update to match coding conventions.
-	(xtensa_frame_cache, xtensa_return_value): Follow coding conventions.
-	(execute_l32e, execute_s32e, execute_code): Update comments.
-	(xtensa_exception_handler_t): Update to match coding conventions.
-	(xtensa_insn_kind): Likewise.
-
-2011-03-09  Michael Snyder  <msnyder at vmware.com>
-
-	* mi-cmd-disas.c (mi_cmd_disassemble): Fix memory leak.
-
-2011-03-09  Pedro Alves  <pedro at codesourcery.com>
-
-	* nto-tdep.c (nto_find_and_open_solib): Constify local `base'.
-
-2011-03-09  Tom Tromey  <tromey at redhat.com>
-
-	* thread.c (restore_selected_frame): Handle frame_level == -1.
-	(make_cleanup_restore_current_thread): Use
-	get_selected_frame_if_set.
-	* frame.h (get_selected_frame_if_set): Declare.
-	* frame.c (get_selected_frame_if_set): New function.
-
-2011-03-09  Pedro Alves  <pedro at codesourcery.com>
-
-	* cli/cli-cmds.c (shell_escape): Use lbasename.
-	* coffread.c (coff_start_symtab): Constify parameter.
-	(complete_symtab): Constify `name' parameter.
-	(coff_symtab_read): Constify `filestring' local.
-	(coff_getfilename): Constify return and `result' local.
-	Use lbasename.
-	* fbsd-nat.c (fbsd_make_corefile_notes): Use lbasename.
-	* linux-fork.c (info_checkpoints_command): Use lbasename.
-	* linux-nat.c (linux_nat_make_corefile_notes): Use lbasename.
-	* minsyms.c (lookup_minimal_symbol): Use lbasename.
-	* nto-tdep.c (nto_find_and_open_solib): Use lbasename.
-	* procfs.c (procfs_make_note_section): Use lbasename.
-	* tui/tui-io.c (printable_part): Constity return and parameter.
-	Use lbasename.
-	(print_filename): Constify parameters, and local `s'.
-	(tui_rl_display_match_list): Constify local `temp'.
-
-2011-03-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-02-29  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	Revert:
-	2011-03-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
-	Fix DWARF-3+ DW_AT_accessibility default assumption.
-	* dwarf2read.c (dwarf2_add_field): Fix new_field->accessibility for
-	cu->header.version >= 3.
+	Fix disp-step-syscall.exp: fork: single step over fork.
+	* i386-linux-tdep.c (-i386_linux_get_syscall_number): Rename to ...
+	(i386_linux_get_syscall_number_from_regcache): ... here, new function
+	comment, change parameters gdbarch and ptid to regcache.  Remove
+	parameter regcache, initialize gdbarch from regcache here.
+	(i386_linux_get_syscall_number, i386_linux_displaced_step_copy_insn):
+	New functions.
+	(i386_linux_init_abi): Install i386_linux_displaced_step_copy_insn
+	instead.
+	* i386-tdep.c (i386_syscall_p): Check also for 'sysenter' and
+	'syscall'.  Make the 'int' check more strict.
 
-2011-03-09  Yao Qi  <yao at codesourcery.com>
+2012-02-29  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* common/Makefile.in: Remove.
-	* common/configure: Remove.
-	* common/configure.ac: Remove.
+	Fix reverse mode for syscall on AMD CPUs in 32-bit mode.
+	* i386-linux-tdep.c (i386_linux_intx80_sysenter_record): Rename to ...
+	(i386_linux_intx80_sysenter_syscall_record): ... here.
+	(i386_linux_init_abi): Initialize also I386_SYSCALL_RECORD.
+	Use the renamed function name.
 
-2011-03-09  Yao Qi  <yao at codesourcery.com>
+2012-02-29  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	Revert:
-	2011-02-11  Yao Qi  <yao at codesourcery.com>
+	* arm-linux-tdep.c (arm_linux_copy_svc): Reset stale FRAME.
+	* breakpoint.c (until_break_command): Likewise.
+	* elfread.c (elf_gnu_ifunc_resolver_stop): Likewise.
+	* infcall.c (call_function_by_hand): Likewise.
+	* infcmd.c (finish_forward): Likewise.
+	* infrun.c (insert_exception_resume_breakpoint): Likewise.
 
-	* common/Makefile.in: Add copyright header.
+2012-02-28  Tristan Gingold  <gingold at adacore.com>
 
-	2011-02-11  Yao Qi  <yao at codesourcery.com>
+	* ada-tasks.c (ada_tasks_inferior_data_sniffer): Rework code to
+	avoid variable assignments inside condition.
 
-	* Makefile.in: Remove signals.o from COMMON_OBS.  Link
-	libcommon.a.
-	* configure.ac: Add common to sub dir.
-	* configure: Regenerate.
+2012-02-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-03-08  Maxim Grigoriev  <maxim2405 at gmail.com>
+	Fix static analysis issue found by cppcheck.
+	* microblaze-tdep.c (microblaze_extract_return_value): Fix
+	uninitialized BUF for size 2.
 
-	* xtensa-tdep.c (call0_ret): New function.
-	(xtensa_skip_prologue): Speed up analysis.
+2012-02-27  Chris Dearman  <chris at mips.com>
+	    Nathan Froyd  <froydnj at codesourcery.com>
+	    Maciej W. Rozycki  <macro at codesourcery.com>
 
-2011-03-08  Maxim Grigoriev  <maxim2405 at gmail.com>
+	* mips-tdep.c (mips32_instruction_has_delay_slot): New function.
+	(mips16_instruction_has_delay_slot): Likewise.
+	(mips_segment_boundary): Likewise.
+	(mips_adjust_breakpoint_address): Likewise.
+	(mips_gdbarch_init): Use mips_adjust_breakpoint_address.
 
-	* xtensa-tdep.c (xtensa_register_reggroup_p): Count in all registers
-	while executing MI command -data-list-changed-registers.
+2012-02-27  Maciej W. Rozycki  <macro at mips.com>
+	    Maciej W. Rozycki  <macro at codesourcery.com>
 
-2011-03-08  Maxim Grigoriev  <maxim2405 at gmail.com>
+	* infrun.c (handle_inferior_event): Don't proceed through
+	shared library trampolines if stepping at the machine
+	instruction level.
 
-	* xtensa-tdep.c (xtensa_read_register): New function.
-	(xtensa_write_register): New function.
-	(xtensa_find_register_by_name): New function.
-	(xtensa_windowed_frame_cache): Update comments in type description.
-	(xtensa_frame_cache): Likewise.
-	(xtensa_window_interrupt_insn): New function.
-	(xtensa_frame_cache): Add analysis for Xtensa Window Exception frames.
-	(xtensa_insn_kind): Add new instructions.
-	(rwx_special_register): New function.
-	(call0_classify_opcode): Add new instructions to the analysis.
-	(a0_saved, a7_saved, a11_saved): New variables.
-	(a0_was_saved, a7_was_saved, a11_was_saved): New variables.
-	(execute_l32e): New function.
-	(execute_s32e): New function.
-	(xtensa_exception_handler_t): New type.
-	(execute_code): New function.
-	(xtensa_window_interrupt_frame_cache): New function to conduct frame
-	analysis for Xtensa Window Exception handlers.
-
-2011-03-08  Maxim Grigoriev  <maxim2405 at gmail.com>
-
-	* xtensa-tdep.c (TX_PS): New.
-	(windowing_enabled): Update to count for Call0 ABI.
-	(xtensa_hextochar): New.
-	(xtensa_init_reggroups): Make algorithm generic.
-	(xtensa_frame_cache): Use TX_PS on Tiny Xtensa.
-
-2011-03-08  Maxim Grigoriev  <maxim2405 at gmail.com>
-
-	* xtensa-tdep.h (XTENSA_MAX_COPROCESSOR): Update.
-
-2011-03-08  Michael Snyder  <msnyder at vmware.com>
-
-	* i386-tdep.c (i386_follow_jump): Check return value of
-	target_read_memory.
-	(i386_analyze_struct_return): Ditto.
-	(i386_skip_probe): Ditto.
-	(i386_match_insn): Ditto.
-	(i386_skip_noop): Ditto.
-	(i386_analyze_frame_setup): Ditto.
-	(i386_analyze_register_saves): Ditto.
-	(i386_skip_prologue): Ditto.
-	(i386_skip_main_prologue): Ditto.
-
-	* target.c (read_whatever_is_readable): Fix memory leak.
-
-	* i386-tdep.c (i386_process_record): Document fall through.
-
-2011-03-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix DWARF-3+ DW_AT_accessibility default assumption.
-	* dwarf2read.c (dwarf2_add_field): Fix new_field->accessibility for
-	cu->header.version >= 3.
-
-2011-03-08  Pedro Alves  <pedro at codesourcery.com>
-
-	* remote.c (remote_check_symbols): Skip if the target has no
-	execution.
-
-2011-03-08  Joel Brobecker  <brobecker at adacore.com>
-
-	* target.c (read_whatever_is_readable): Reformat comment,
-	with a minor typo fix. Minor reformatting of the code.
-
-2011-03-08  Yao Qi  <yao at codesourcery.com>
-
-	* arm-tdep.c: Remove prototype declaration displaced_in_arm_mode.
-	(displaced_read_reg): Add `dsc' parameter, remove `from' parameter.
-	Use cached result instead of calling displaced_in_arm_mode again.
-	(branch_write_pc, alu_write_pc, load_write_pc): Add `dsc' parameter.
-	(displaced_write_reg, copy_preload, copy_preload_reg): Callers update.
-	(cleanup_copro_load_store, copy_copro_load_store): Likewise.
-	(cleanup_branch, copy_bx_blx_reg, copy_alu_imm): Likewise.
-	(cleanup_alu_reg, copy_alu_reg, cleanup_alu_shifted_reg): Likewise.
-	(copy_alu_shifted_reg, cleanup_load, cleanup_store): Likewise.
-	(copy_extra_ld_st, copy_ldr_str_ldrb_strb): Likewise.
-	(cleanup_block_load_all, cleanup_block_store_pc): Likewise.
-	(cleanup_block_load_pc, copy_block_xfer): Likewise.
-	* arm-linux-tdep.c (arm_linux_copy_svc): Callers update.
-	(arm_catch_kernel_helper_return): Likewise.
-	* gdb/arm-tdep.h : Update function declarations.
-
-2011-03-07  Michael Snyder  <msnyder at vmware.com>
-
-	* dwarf2loc.c (indirect_pieced_value): Assert 'piece' not null.
-
-	* ser-unix.c (hardwire_get_tty_state): Stop memory leak.
-
-	* mi/mi-cmd-env.c (_initialize_mi_cmd_env): Free environment.
-
-	* elfread.c (elf_symtab_read): Stop memory leak.
-
-	* main.c (captured_main): Fix memory leak.
-
-2011-03-07  Andreas Schwab  <schwab at linux-m68k.org>
-
-	* ada-lang.c (compare_names): Call is_name_suffix with string1
-	instead of string2.
-
-2011-03-07  Tom Tromey  <tromey at redhat.com>
-
-	* xcoffread.c (xcoff_sym_fns): Update.
-	* symfile.h (struct sym_fns) <sym_read_psymbols>: New field.
-	(enum symfile_add_flags) <SYMFILE_NO_READ>: New constant.
-	* symfile.c (syms_from_objfile): Handle SYMFILE_NO_READ.
-	(symbol_file_add_with_addrs_or_offsets): Likewise.
-	(reread_symbols): Handle OBJF_PSYMTABS_READ.
-	* somread.c (som_sym_fns): Update.
-	* psymtab.h (require_partial_symbols): Declare.
-	* psymtab.c (require_partial_symbols): New function.
-	(ALL_OBJFILE_PSYMTABS_REQUIRED): New macro.
-	(ALL_OBJFILE_PSYMTABS): Undef.
-	(ALL_PSYMTABS): Move from psympriv.h.
-	(lookup_partial_symtab, find_pc_sect_psymtab)
-	(lookup_symbol_aux_psymtabs, relocate_psymtabs)
-	(find_last_source_symtab_from_partial)
-	(forget_cached_source_info_partial)
-	(print_psymtab_stats_for_objfile, read_symtabs_for_function)
-	(expand_partial_symbol_tables, read_psymtabs_with_filename)
-	(map_symbol_names_psymtab, map_symbol_filenames_psymtab)
-	(find_symbol_file_from_partial, map_matching_symbols_psymtab)
-	(expand_symtabs_matching_via_partial, maintenance_info_psymtabs):
-	Use ALL_OBJFILE_PSYMTABS_REQUIRED.
-	* psympriv.h (ALL_PSYMTABS): Move to psymtab.c.
-	* objfiles.h (OBJF_PSYMTABS_READ): New macro.
-	* objfiles.c (objfile_has_partial_symbols): Handle lazily-read
-	psymtabs.
-	* mipsread.c (ecoff_sym_fns): Update.
-	* machoread.c (macho_sym_fns): Update.
-	* elfread.c (elf_symfile_read): Set up for lazy psymtab reading.
-	(read_psyms): New function.
-	(elf_sym_fns, elf_sym_fns_gdb_index): Update.
-	(elf_sym_fns_lazy_psyms): New global.
-	* dwarf2read.c (dwarf2_initialize_objfile): Don't call
-	dwarf2_build_psymtabs.
-	* dbxread.c (aout_sym_fns): Update.
-	* coffread.c (coff_sym_fns): Update.
-
-2011-03-07  Tom Tromey  <tromey at redhat.com>
-
-	* infrun.c (print_exited_reason): Include inferior id and pid in
-	message.
-
-2011-03-07  Tom Tromey  <tromey at redhat.com>
-
-	* target.h (struct target_ops) <to_has_execution>: Add ptid_t
-	parameter.
-	(target_has_execution_1): Update.
-	(target_has_execution_current): Declare.
-	(target_has_execution): Call target_has_execution_current.
-	(default_child_has_execution): Update.
-	* target.c (default_child_has_execution): Add 'the_ptid'
-	parameter.
-	(target_has_execution_1): Likewise.
-	(target_has_execution_current): New function.
-	(add_target): Update.
-	(init_dummy_target): Update.
-	* remote-m32r-sdi.c (m32r_has_execution): New function.
-	(init_m32r_ops): Use it.
-	* record.c (record_core_has_execution): Now static.  Add
-	'the_ptid' parameter.
-	* inferior.c (have_live_inferiors): Don't save current thread.
-	Use target_has_execution_1.
+2012-02-27  Maciej W. Rozycki  <macro at codesourcery.com>
 
-2011-03-07  Yao Qi  <yao at codesourcery.com>
+	* mips-linux-tdep.c (mips_linux_init_abi): Set num_pseudo_regs
+	too.
 
-	* Makefile.in (aclocal_m4_deps): Remove gnulib/m4/memcmp.m4.
+2012-02-27  Thomas Schwinge  <thomas at codesourcery.com>
 
-2011-03-07  Joel Brobecker  <brobecker at adacore.com>
+	* sh-tdep.c (sh_make_stub_cache, sh_stub_this_id)
+	(sh_stub_unwind_sniffer): New functions.
+	(sh_stub_unwind): New variable.
+	(sh_gdbarch_init): Wire everything.
 
-	* elfread.c (elf_symtab_read): Minor reformatting.
+2012-02-27  Pedro Alves  <palves at redhat.com>
 
-2011-03-07  Joel Brobecker  <brobecker at adacore.com>
+	* linux-nat.c (pid_is_stopped): Delete, moved to common/.
+	(linux_nat_post_attach_wait): Adjust to use
+	linux_proc_pid_is_stopped.
+	* common/linux-procfs.h (linux_proc_pid_is_stopped): Declare.
+	* common/linux-procfs.c (linux_proc_pid_is_stopped): New function,
+	based on pid_is_stopped from both linux-nat.c and
+	gdbserver/linux-low.c, and renamed.
 
-	* objc-lang.c (selectors_info): Minor reformatting.
+2012-02-24  Maciej W. Rozycki  <macro at codesourcery.com>
 
-2011-03-07  Joel Brobecker  <brobecker at adacore.com>
+	* remote.c (remote_watchpoint_addr_within_range): New function.
+	(init_remote_ops): Use it.
 
-	* ada-lang.c (compare_names): Add FALLTHROUGH comment.
+2012-02-24  Maciej W. Rozycki  <macro at codesourcery.com>
 
-2011-03-07  Joel Brobecker  <brobecker at adacore.com>
-	    Michael Snyder  <msnyder at vmware.com>
+	* target.h (target_watchpoint_addr_within_range): Document macro.
 
-	* ada-valprint.c (ada_val_print_array): Move the declaration of
-	"byte_order" and "elttype" inside the block where these variables
-	are actually used.  Remove some special handling for the case
-	where "elttype" and "eltlen" are null.  Replace by a comment
-	and a couple of assertion checks.
+2012-02-24  Pedro Alves  <palves at redhat.com>
 
-2011-03-05  Michael Snyder  <msnyder at vmware.com>
+	* stack.c (set_last_displayed_sal): Issue internal_error instead
+	of warning, and issue it after clearing the last displayed sal.
 
-	* source.c (add_path): Replace semicolon at end of block.
-	* dwarf2expr.c (execute_stack_op): Ditto.
+2012-02-24  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	    Pedro Alves  <palves at redhat.com>
 
-2011-03-05  Mike Frysinger  <vapier at gentoo.org>
+	* breakpoint.c (until_break_command): Install breakpoints after
+	all frame manipulations.
 
-	* bfin-tdep.c: Include sim-regno.h and gdb/sim-bfin.h.
-	* configure.tgt (bfin-*-*linux*): Define gdb_sim.
-	(bfin-*-*): Likewise.
+2012-02-24  Luis Machado  <lgustavo at codesourcery.com>
 
-2011-03-05  Michael Snyder  <msnyder at vmware.com>
+	* remote.c (remote_supports_cond_breakpoints): New forward
+	declaration.
+	(remote_add_target_side_condition): New function.
+	(remote_insert_breakpoint): Add target-side breakpoint
+	conditional if supported.
+	(remote_insert_hw_breakpoint): Likewise.
+	(init_remote_ops): Set to_supports_evaluation_of_breakpoint_conditions
+	hook.
+
+	* target.c (update_current_target): Inherit
+	to_supports_evaluation_of_breakpoint_conditions.
+	Default to_supports_evaluation_of_breakpoint_conditions to return_zero.
+
+	* target.h (struct target_ops)
+	<to_supports_evaluation_of_breakpoint_conditions>: New field.
+	(target_supports_evaluation_of_breakpoint_conditions): New #define.
+
+	* breakpoint.c (get_first_locp_gte_addr): New forward declaration.
+	(condition_evaluation_both, condition_evaluation_auto,
+	condition_evaluation_host, condition_evaluation_target,
+	condition_evaluation_enums, condition_evaluation_mode_1,
+	condition_evaluation_mode): New	static globals.
+	(translate_condition_evaluation_mode): New function.
+	(breakpoint_condition_evaluation_mode): New function.
+	(gdb_evaluates_breakpoint_condition_p): New function.
+	(ALL_BP_LOCATIONS_AT_ADDR): New helper macro.
+	(mark_breakpoint_modified): New function.
+	(mark_breakpoint_location_modified): New function.
+	(set_condition_evaluation_mode): New function.
+	(show_condition_evaluation_mode): New function.
+	(bp_location_compare_addrs): New function.
+	(get_first_location_gte_addr): New helper function.
+	(set_breakpoint_condition): Free condition bytecode if locations
+	has become unconditional.  Call mark_breakpoint_modified (...).
+	(condition_command): Call update_global_location_list (1) for
+	breakpoints.
+	(breakpoint_xfer_memory): Use is_breakpoint (...).
+	(is_breakpoint): New function.
+	(parse_cond_to_aexpr): New function.
+	(build_target_condition_list): New function.
+	(insert_bp_location): Handle target-side conditional
+	breakpoints and call build_target_condition_list (...).
+	(update_inserted_breakpoint_locations): New function.
+	(insert_breakpoint_locations): Handle target-side conditional
+	breakpoints.
+	(bpstat_check_breakpoint_conditions): Add comment.
+	(bp_condition_evaluator): New function.
+	(bp_location_condition_evaluator): New function.
+	(print_breakpoint_location): Print information on where the condition
+	will be evaluated.
+	(print_one_breakpoint_location): Likewise.
+	(init_bp_location): Call mark_breakpoint_location_modified (...) for
+	breakpoint location.
+	(force_breakpoint_reinsertion): New functions.
+	(update_global_location_list): Handle target-side breakpoint
+	conditions.
+	Reinsert locations that are already inserted if conditions have
+	changed.
+	(bp_location_dtor): Free agent expression bytecode.
+	(disable_breakpoint): Call mark_breakpoint_modified (...).
+	Call update_global_location_list (...) with parameter 1 for breakpoints.
+	(disable_command): Call mark_breakpoint_location_modified (...).
+	Call update_global_location_list (...) with parameter 1 for breakpoints.
+	(enable_breakpoint_disp): Call mark_breakpoint_modified (...).
+	(enable_command): mark_breakpoint_location_modified (...).
+	(_initialize_breakpoint): Update documentation and add
+	condition-evaluation breakpoint subcommand.
+
+	* breakpoint.h: Include ax.h.
+	(condition_list): New data structure.
+	(condition_status): New enum.
+	(bp_target_info) <cond_list>: New field.
+	(bp_location) <condition_changed, cond_bytecode>: New fields.
+	(is_breakpoint): New prototype.
+
+2012-02-24  Luis Machado  <lgustavo at codesourcery.com>
+
+	* remote.c (remote_state) <cond_breakpoints>: New field.
+	(PACKET_ConditionalBreakpoints): New enum.
+	(remote_cond_breakpoint_feature): New function.
+	(remote_protocol_features): Add new ConditionalBreakpoints entry.
+	(remote_supports_cond_breakpoints): New function.
+	(_initialize_remote): Add new packet configuration for
+	target-side conditional breakpoints.
+
+2012-02-24  Luis Machado  <lgustavo at codesourcery.com>
+
+	* NEWS: Mention target-side conditional breakpoint support,
+	new condition-evaluation breakpoint subcommand and remote
+	packet extensions.
+
+2012-02-24  Luis Machado  <lgustavo at codesourcery.com>
+
+	* breakpoint.c (bp_location_compare): Sort by pspace before sorting by
+	number.
 
-	* dwarf2expr.c (execute_stack_op): Delete superfluous semicolon.
-	* mdebugread.c (parse_symbol): Ditto.
-	* parse.c (parse_exp_in_context): Ditto.
-	* source.c (add_path): Ditto.
-	* utils.c (gnu_debuglink_crc32): Ditto.
-	* varobj.c (variable_language): Ditto.
+2012-02-24  Thomas Schwinge  <thomas at codesourcery.com>
 
-	* linux-tdep.c (linux_get_siginfo_type): Stop memory leak.
+	* sh-tdep.c (sh_skip_prologue): Use skip_prologue_using_sal.
+	(after_prologue): Remove.
 
-2011-03-04  Michael Snyder  <msnyder at vmware.com>
+2012-02-23  Tom Tromey  <tromey at redhat.com>
 
-	* linux-fork.c (inferior_call_waitptid): Fix copy/paste error.
+	* jv-valprint.c (java_val_print): Remove dead code.
 
-	* symfile.c (simple_overlay_update): Check for null return value
-	from lookup_minimal_symbol.
+2012-02-23  Tristan Gingold  <gingold at adacore.com>
 
-	* xml-syscall.c (syscall_start_syscall): Assert name is non null.
+	* ada-tasks.c (struct ada_tasks_inferior_data): Add
+	known_tasks_element and known_tasks_length fields.
+	(read_known_tasks_array): Change argument type.  Use pointer type
+	and number of elements from DATA.  Adjust.
+	(read_known_tasks_list): Likewise.
+	(get_known_tasks_addr): Remove.
+	(ada_set_current_inferior_known_tasks_addr): Renamed to ...
+	(ada_tasks_inferior_data_sniffer): ... this.  Use symtab for element
+	type and array length.	Merge former get_known_tasks_addr code.
 
-2011-03-04  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+2012-02-23  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* eval.c (parse_and_eval_address_1): Remove function.
-	* linespec.c (decode_indirect): Call parse_to_comma_and_eval
-	instead of parse_and_eval_address_1.
-	* value.h (parse_and_eval_address_1): Remove prototype.
+	PR backtrace/13716
+	* infcmd.c (finish_forward): New variable frame_id, initialize it, use
+	it after set_momentary_breakpoint.
 
-2011-03-04  Michael Snyder  <msnyder at vmware.com>
+2012-02-22  Sterling Augustine  <saugustine at google.com>
 
-	* remote.c (putpkt_binary): Document that case stmt falls through.
+	PR 13689:
+	* breakpoint.c (watchpoint_exp_is_constant): Add UNOP_CAST to switch.
 
-2011-03-04  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+2012-02-22  Gary Benson  <gbenson at redhat.com>
 
-	* breakpointc (print_it_typical): Move NULL check from here...
-	(print_bp_stop_message): ... to here.
+	* dwarf2read.c (dwarf2_read_index): Correct misspelling.
+	(find_slot_in_mapped_hash): Likewise.
 
-2011-03-04  Michael Snyder  <msnyder at msnyder-server.eng.vmware.com>
+2012-02-21  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* breakpoint.c (enable_command): Use break instead of continue,
-	and fill in a missing break.
-	(disable_command): Ditto.
+	PR build/13638
+	* configure.ac (MAKEINFO): Replace AC_CHECK_PROG by AC_ARG_VAR.
+	(MAKEINFOFLAGS): Replace static string by AC_ARG_VAR.
+	* configure: Regenerate.
 
-2011-03-04  Ulrich Weigand  <ulrich.weigand at linaro.org>
+2012-02-21  Tristan Gingold  <gingold at adacore.com>
+	    Pedro Alves  <palves at redhat.com>
 
-	* inflow.c (terminal_init_inferior_with_pgrp): Copy ttystate.
-	(terminal_save_ours): Remove misleading comment.
-	(inflow_inferior_data_cleanup): Free ttystate.
-	(inflow_inferior_exit): Likewise.
-	(copy_terminal_info): Copy ttystate.
+	* ia64-tdep.c: Do not include libunwind-ia64.h.
+	* libunwind-frame.h: Remove #ifdef HAVE_LIBUNWIND_H guard.
+	Include libunwind-ia64.h instead of libunwind.h.
+	* configure.ac (--with-libunwind, $enable_libunwind): Don't check
+	for libunwind.h existence.
+	* configure, config.in: Regenerate.
 
-	* serial.c (serial_copy_tty_state): New function.
-	* serial.h (serial_copy_tty_state): Add prototype.
-	(struct serial_ops): Add copy_tty_state callback.
-	* ser-base.c (ser_base_copy_tty_state): New function.
-	* ser-base.h (ser_base_copy_tty_state): Add prototype.
-	* ser-go32.c (dos_copy_tty_state): New function.
-	(dos_ops): Install copy_tty_state callback.
-	* ser-mingw.c (_initialize_ser_windows): Likewise.
-	* ser-pipe.c (_initialize_ser_pipe): Likewise.
-	* ser-unix.c (hardwire_copy_tty_state): New function.
-	(_initialize_ser_hardwire): Install it.
+2012-02-21  Anton Gorenkov  <xgsa at yandex.ru>
+
+	* c-valprint.c (c_value_print): Use value_rtti_indirect_type
+	instead of value_rtti_target_type.
+	* eval.c (evaluate_subexp_standard): Use value_rtti_indirect_type
+	instead of value_rtti_target_type.
+	* typeprint.c (whatis_exp): Use value_rtti_indirect_type instead of
+	value_rtti_target_type.
+	* valops.c (value_ind): Extract function readjust_indirect_value_type.
+	(value_rtti_target_type): Rename to ...
+	(value_rtti_indirect_type): ... here and make it indirect.  Update
+	function comment.
+	* value.c (readjust_indirect_value_type): New function.
+	(coerce_ref): Support for enclosing type setting for references
+	with readjust_indirect_value_type.
+	* value.h (readjust_value_type): New declaration.
+	(value_rtti_target_type): Rename to ...
+	(value_rtti_indirect_type): ... here.
+
+2012-02-21  Anton Gorenkov  <xgsa at yandex.ru>
 
-2011-03-04  Michael Snyder  <msnyder at vmware.com>
+	* MAINTAINERS (Write After Approval): Add myself to the list.
 
-	* breakpoint.c (create_breakpoint): Add missing break statement.
+2012-02-20  Doug Evans  <dje at google.com>
 
-	Reverting this patch:
-	* infcall.c (call_function_by_hand): Add break statements for lint.
+	* objfiles.c (add_to_objfile_sections): Remove outdated comments.
+	Rename objfile_p_char parameter to objfilep.
+	(build_objfile_section_table): Result is now void.  All callers
+	updated.
+	* objfiles.h (struct objfile): Tweak comments, whitespace.
+	(build_objfile_section_table): Update.
 
-	Reverting this patch:
-	* cli/cli-script.c (script_from_file): Add break for lint.
+	* elfread.c (elf_symfile_segments): Fix warning text.
 
-2011-03-04  Michael Snyder  <msnyder at vmware.com>
+2012-02-20  Tom Tromey  <tromey at redhat.com>
 
-	* solib.c (reload_shared_libraries_1): Close memory leak.
+	PR gdb/13498:
+	* dwarf2read.c (dw2_expand_symtabs_matching): Only visit a
+	particular set of file names once.
+	(dw2_map_symbol_filenames): Likewise.
 
-2011-03-03  Tom Tromey  <tromey at redhat.com>
+2012-02-20  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	PR gdb/12538:
-	* dwarf2read.c (process_psymtab_comp_unit): Handle case where
-	DW_STRING is NULL.
+	Code cleanup.
+	* main.c (write_files): Remove the declaration.
+	(external_editor_command): Move the declaration ...
+	[GDBTK] (external_editor_command): ... here.  Fix the comment.
 
-2011-03-03  Michael Snyder  <msnyder at vmware.com>
+2012-02-20  Tom Tromey  <tromey at redhat.com>
 
-	* remote-fileio.c (remote_fileio_func_fstat): Initialize all
-	fields of struct 'st' to zero.
+	* dwarf2read.c (dw2_map_symtabs_matching_filename): Remove
+	extraneous block.
 
-	* tui/tui-winsource.c (tui_update_source_window_as_is): Initialize
-	sal.pspace before calling set_current_source_symtab_and_line.
+2012-02-20  Tristan Gingold  <gingold at adacore.com>
 
-2011-03-03  Yao Qi  <yao at codesourcery.com>
+	* darwin-nat.h (enum darwin_msg_state): Add comments.
 
-	* Makefile.in (configure-common): Remove.  Let Makefile
-	in dir common to rebuild itself.
-	(common/Makefile): Likewise.
+2012-02-20  Tristan Gingold  <gingold at adacore.com>
 
-2011-03-03  Joel Brobecker  <brobecker at adacore.com>
+	* amd64-darwin-tdep.c (x86_darwin_init_abi_64): Fix jb_pc_offset
+	value.
 
-	* utils.c (parse_escape): Add i18n markup in error message.
+2012-20-18  Joel Brobecker  <brobecker at adacore.com>
 
-2011-03-03  Yao Qi  <yao at codesourcery.com>
+	* breakpoint.c (watchpoint_exp_is_const): Add missing empty line
+	between function description and implementation.
 
-	* gdb/arm-tdep.c (shifted_reg_val): Replace magic number 15 with
-	ARM_PC_REGNUM.
-	(thumb_get_next_pc_raw, arm_get_next_pc_raw): Likewise.
-	(displaced_write_reg, displaced_read_reg): Likewise.
-	(copy_ldr_str_ldrb_strb, cleanup_block_load_all): Likewise.
-	(cleanup_block_load_pc, copy_block_xfer): Likewise.
-	(cleanup_branch): Replace magic number 14 and 15 with
-	ARM_LR_REGNUM and ARM_PC_REGNUM respectively.
+2012-02-17  Tom Tromey  <tromey at redhat.com>
 
-2011-03-02  Michael Snyder  <msnyder at vmware.com>
+	PR python/12070:
+	* python/py-event.c (event_object_getset): New global.
+	(event_object_type): Reference it.
+	* python/py-type.c (field_object_getset): New global.
+	(field_object_type): Reference it.
+	* python/python-internal.h (gdb_py_generic_dict): Declare.
+	* python/py-utils.c (gdb_py_generic_dict): New function.
 
-	* maint.c (maintenance_do_deprecate): No need to check for NULL.
+2012-02-17  Tristan Gingold  <gingold at adacore.com>
 
-	* cli/cli-script.c (script_from_file): Add break for lint.
+	* solib-darwin.c (darwin_current_sos): Check magic and filetype
 
-	* mdebugread.c (parse_partial_symbols): Fix indent.
+2012-02-17  Thomas Schwinge  <thomas at codesourcery.com>
 
-	* target-descriptions.c (tdesc_gdb_type): No need to call
-	xstrdup, callee saves a copy.
+	* sh-tdep.c (sh_is_renesas_calling_convention): Fix handling of
+	TYPE_CALLING_CONVENTION annotation.
 
-	* printcmd.c (print_scalar_formatted): Use strncpy for safety.
+2012-02-16  Kevin Buettner  <kevinb at redhat.com>
 
-	* infcall.c (call_function_by_hand): Add break statements for lint.
+	* MAINTAINERS: Add rx to target ISA section.
+	* Makefile.in (ALL_TARGET_OBS): Add rx-tdep.o.
+	(ALLDEPFILES): Add rx-tdep.c.
 
-	* utils.c (parse_escape): Escape the escape char.
+2012-02-16  Tom Tromey  <tromey at redhat.com>
 
-	* python/py-inferior.c (build_inferior_list): Error out if
-	PyList_Append fails.
-	(gdbpy_inferiors): Error out if build_inferior_list fails.
+	* symfile.c (symbol_file_add_main_1): Use inferior's
+	symfile_flags.
+	* solib.c (solib_read_symbols): Use inferior's symfile_flags.
+	* linux-nat.c (linux_child_follow_fork): Set symfile_flags on
+	inferior.
+	* infrun.c (handle_vfork_child_exec_or_exit): Set symfile_flags on
+	inferior.
+	(follow_exec): Use inferior's symfile_flags.
+	* inferior.h (struct inferior) <symfile_flags>: New field.
 
-	* linux-nat.c (linux_nat_xfer_partial): Preserve errno around
-	a function call.
+2012-02-16  Mike Frysinger  <vapier at gentoo.org>
 
-	* record.c (record_restore): Move printf to before error return.
+	PR gdb/9734:
+	* remote-sim.c (gdbsim_create_inferior): Call error() when
+	sim_create_inferior() fails.
 
-2011-03-02  Yao Qi  <yao at codesourcery.com>
+2012-02-16  Josh Matthews  <josh at joshmatthews.net>
 
-	* arm-tdep.h (struct displaced_step_closure): Add two new fields
-	is_thumb and insn_size.
-	* arm-tdep.c (displaced_read_reg): Adjust correct pipeline offset
-	on both ARM and Thumb mode.
-	(arm_process_displaced_insn): Set is_thumb and insn_size.
-	(arm_displaced_init_closure): Handle both 16-bit and 32-bit.
-	(arm_displaced_step_fixup): Likewise.
+	* machoread.c: Initialize nbr_syms to avoid warnings-as-errors failure.
 
-2011-03-01  Michael Snyder  <msnyder at vmware.com>
+2012-02-16  Tom Tromey  <tromey at redhat.com>
 
-	* cli/cli-dump.c (dump_bfd_file): Check error return and warn.
+	PR c++/13653:
+	* thread.c (struct current_thread_cleanup) <was_removable>: New
+	field.
+	(restore_current_thread_cleanup_dtor): Restore 'removable' field.
+	(make_cleanup_restore_current_thread): Initialize new field.
+
+2012-02-15  Kevin Buettner  <kevinb at redhat.com>
+
+	* MAINTAINERS: Add rl78 to target ISA section.
+	* Makefile.in (ALL_TARGET_OBS): Add rl78-tdep.o.
+	(ALLDEPFILES): Add rl78-tdep.c.
+	* NEWS: Mention rl78 as a new target.
+
+2012-02-15  Aleksandar Ristovski  <aristovski at qnx.com>
+
+	* frame.c (find_frame_sal): Initialize sal->pspace field from frame
+	data.
+	* stack.c (set_last_displayed_sal): Validate that PSPACE is not NULL.
+
+2012-02-15  Tom Tromey  <tromey at redhat.com>
+
+	PR gdb/12659:
+	* infcmd.c (registers_info): Print just the current register's
+	name.
+
+2012-02-15  Tom Tromey  <tromey at redhat.com>
+
+	* python/py-symbol.c (sympy_value): Use _().
+
+2012-02-15  Pedro Alves  <palves at redhat.com>
+
+	* remote.c (remote_detach_1, extended_remote_attach_1): Tweak
+	output to be like native targets'.
+	(remote_pid_to_str): Special case the null ptid.
+
+2012-02-14  Stan Shebs  <stan at codesourcery.com>
+
+	* NEWS: Mention enable count command.
+	* breakpoint.h (struct breakpoint): New field enable_count.
+	* breakpoint.c (enable_breakpoint_disp): Add count argument.
+	(enable_breakpoint): Add arg to call.
+	(struct disp_data): New struct.
+	(do_enable_breakpoint_disp): Interp arg as disp_data and unpack.
+	(do_map_enable_once_breakpoint): Create a struct and pass it.
+	(do_map_enable_delete_breakpoint): Ditto.
+	(do_map_enable_count_breakpoint): New function.
+	(enable_count_command): New function.
+	(bpstat_stop_status): Decrement enable_count.
+	(print_one_breakpoint_location): Report enable count.
+	(_initialize_breakpoint): Add enable count command.
+
+2012-02-14  Kevin Buettner  <kevinb at redhat.com>
+
+	* rl78-tdep.c (reggroups.h): Include.
+	(RL78_RAW_BANK0_R0_REGNUM, RL78_RAW_BANK0_R1_REGNUM)
+	(RL78_RAW_BANK0_R2_REGNUM, RL78_RAW_BANK0_R3_REGNUM)
+	(RL78_RAW_BANK0_R4_REGNUM, RL78_RAW_BANK0_R5_REGNUM)
+	(RL78_RAW_BANK0_R6_REGNUM, RL78_RAW_BANK0_R7_REGNUM)
+	(RL78_RAW_BANK1_R0_REGNUM, RL78_RAW_BANK1_R1_REGNUM)
+	(RL78_RAW_BANK1_R2_REGNUM, RL78_RAW_BANK1_R3_REGNUM)
+	(RL78_RAW_BANK1_R4_REGNUM, RL78_RAW_BANK1_R5_REGNUM)
+	(RL78_RAW_BANK1_R6_REGNUM, RL78_RAW_BANK1_R7_REGNUM)
+	(RL78_RAW_BANK2_R0_REGNUM, RL78_RAW_BANK2_R1_REGNUM)
+	(RL78_RAW_BANK2_R2_REGNUM, RL78_RAW_BANK2_R3_REGNUM)
+	(RL78_RAW_BANK2_R4_REGNUM, RL78_RAW_BANK2_R5_REGNUM)
+	(RL78_RAW_BANK2_R6_REGNUM, RL78_RAW_BANK2_R7_REGNUM)
+	(RL78_RAW_BANK3_R0_REGNUM, RL78_RAW_BANK3_R1_REGNUM)
+	(RL78_RAW_BANK3_R2_REGNUM, RL78_RAW_BANK3_R3_REGNUM)
+	(RL78_RAW_BANK3_R4_REGNUM, RL78_RAW_BANK3_R5_REGNUM)
+	(RL78_RAW_BANK3_R6_REGNUM, RL78_RAW_BANK3_R7_REGNUM): Add to
+	beginning of register list.
+	(RL78_BANK0_R0_REGNUM, RL78_BANK0_R1_REGNUM, RL78_BANK0_R2_REGNUM)
+	(RL78_BANK0_R3_REGNUM, RL78_BANK0_R4_REGNUM, RL78_BANK0_R5_REGNUM)
+	(RL78_BANK0_R6_REGNUM, RL78_BANK0_R7_REGNUM, RL78_BANK1_R0_REGNUM)
+	(RL78_BANK1_R1_REGNUM, RL78_BANK1_R2_REGNUM, RL78_BANK1_R3_REGNUM)
+	(RL78_BANK1_R4_REGNUM, RL78_BANK1_R5_REGNUM, RL78_BANK1_R6_REGNUM)
+	(RL78_BANK1_R7_REGNUM, RL78_BANK2_R0_REGNUM, RL78_BANK2_R1_REGNUM)
+	(RL78_BANK2_R2_REGNUM, RL78_BANK2_R3_REGNUM, RL78_BANK2_R4_REGNUM)
+	(RL78_BANK2_R5_REGNUM, RL78_BANK2_R6_REGNUM, RL78_BANK2_R7_REGNUM)
+	(RL78_BANK3_R0_REGNUM, RL78_BANK3_R1_REGNUM, RL78_BANK3_R2_REGNUM)
+	(RL78_BANK3_R3_REGNUM, RL78_BANK3_R4_REGNUM, RL78_BANK3_R5_REGNUM)
+	(RL78_BANK3_R6_REGNUM, RL78_BANK3_R7_REGNUM): Move these into
+	the pseudo registers.  Rearrange other pseudo registers too so
+	that the bank registers appear at the end.
+	(rl78_register_type): Account for the fact that the byte sized
+	bank registers are now pseudo-registers.
+	(rl78_register_name): Rearrange the register name array.  Make
+	initial set of raw banked registers inaccessible.
+	(rl78_register_reggroup_p, rl78_register_sim_regno): New functions.
+	(rl78_pseudo_register_read, rl78_pseudo_register_write): Add
+	case for copying bytes back and forth between raw and pseudo
+	versions of the banked registers.  Update other cases to reflect
+	the changed names.
+	(rl78_return_value): Update to account for changed names of
+	raw registers.
+	(rl78_gdbarch_init): Register rl78_register_reggroup_p() and
+	rl78_register_sim_regno().
+
+2012-02-14  Kevin Buettner  <kevinb at redhat.com>
+
+	* rl78-tdep.c (rl78_skip_prologue): Make `const' the type of
+	the name parameter being passed to find_pc_partial_function().
+
+2012-02-14  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* MAINTAINERS: Step down from being ia64 target maintainer.
+
+2012-02-12  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* ppc-linux-nat.c (fetch_register, store_register): Fix GCC aliasing
+	compilation warning.
+
+2012-02-12  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix crash on loaded shlibs without loaded exec_bfd.
+	* exec.c (exec_files_info): Do not crash on NULL EXEC_BFD.
+	(set_section_command): Replace exec_bfd by p->bfd.
+
+2012-02-10  Tom Tromey  <tromey at redhat.com>
+
+	* linespec.c (decode_line_internal): Skip symtabs_from_filename
+	when we have a C++ qualified name.
+
+2012-02-10  Pedro Alves  <palves at redhat.com>
+
+	* inferior.c (inferior_pid_to_str): New.
+	(print_inferior, inferior_command): Use it.
+
+2012-02-10  Pedro Alves  <palves at redhat.com>
+
+	* configure.ac (HAVE_ELF test): Put the old CFLAGS at the end of
+	the test CFLAGS.
+	* configure: Regenerate.
 
-	* jv-lang.c (evaluate_subexp_java): Conditional can't be true.
+2012-02-10  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* linespec.c (decode_line_internal): Fix comment correctness.
+
+2012-02-09  Valery Khromov  <valery.khromov at gmail.com>
+
+	PR gdb/12953
+	* Makefile.in (HFILES_NO_SRCDIR): Add amd64bsd-nat.h.
+	* amd64bsd-nat.c: Add support for debug registers (adapted from
+	i386bsd-nat.c).
+	[HAVE_PT_GETDBREGS] (amd64bsd_dr_get, amd64bsd_dr_set)
+	(amd64bsd_dr_set_control, amd64bsd_dr_set_addr)
+	(amd64bsd_dr_get_addr, amd64bsd_dr_get_status)
+	(amd64bsd_dr_get_control): New functions.
+	* amd64bsd-nat.h: New file (adapted from i386bsd-nat.h).
+	* amd64fbsd-nat.c: Include "amd64bsd-nat.h", "i386-nat.h".
+	[HAVE_PT_GETDBREGS] (_initialize_amd64fbsd_nat): Add hardware
+	watchpoints initialization.
+	* config/i386/fbsd64.mh (NATDEPFILES): Add i386-nat.o.
+
+2012-02-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb-gdb.py (StructMainTypePrettyPrinter) <struct_field_img>: Print
+	flds_bnds.fields.
+	(StructMainTypePrettyPrinter) <bounds_img>: Print flds_bnds.bounds.
+
+2012-02-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* breakpoint.c (bp_location_compare): Fix comment.  Reindent the code.
+
+2012-02-08  Joel Brobecker  <brobecker at adacore.com>
+
+	* language.h (symbol_name_cmp_ftype): Renames
+	symbol_name_match_p_ftype.
+	(struct language_defn)[la_get_symbol_name_cmp]: Renames
+	la_get_symbol_name_match_p.
+	* ada-lang.c (ada_get_symbol_name_cmp): Renames
+	ada_get_symbol_name_match_p.  Update comment.
+	(ada_language_defn)[la_get_symbol_name_cmp]: Update value.
+	* linespec.c (struct symbol_matcher_data)[symbol_name_cmp]:
+	Renames symbol_name_match_p.  Update field type.
+	(iterate_name_matcher, iterate_over_all_matching_symtabs): Adjust.
+	* c-lang.c, d-lang.c, f-lang.c, jv-lang.c, m2-lang.c, objc-lang.c,
+	opencl-lang.c, p-lang.c: Replace "la_get_symbol_name_match_p" by
+	"la_get_symbol_name_cmp" in comments.
+	* language.c: Likewise.
+
+2012-02-08  Rainer Orth  <ro at CeBiTec.Uni-Bielefeld.DE>
+
+	* amd64-sol2-tdep.c (amd64_sol2_gregset_reg_offset): Correct
+	%eflags offset.
+	* i386-sol2-nat.c (amd64_sol2_gregset64_reg_offs)
+	(amd64_sol2_gregset32_reg_offs): Likewise.
+
+2012-02-08  Joel Brobecker  <brobecker at adacore.com>
+
+	* solib-darwin.c (darwin_bfd_open): Make sure that the filename
+	of the returned BFD is allocated by GDB.
+
+2012-02-07  Tom Tromey  <tromey at redhat.com>
+
+	PR python/12027:
+	* python/python-internal.h (frame_object_type): Declare.
+	* python/py-symbol.c (sympy_needs_frame): New function.
+	(sympy_value): New function.
+	(symbol_object_getset): Add "needs_frame".
+	(symbol_object_methods): Add "value".
+	* python/py-frame.c (frame_object_type): No longer static.
+
+2012-02-07  Tom Tromey  <tromey at redhat.com>
+
+	PR python/13599:
+	* python/py-symbol.c (sympy_line): New function.
+	(symbol_object_getset): Add "line".
+
+2012-02-07  Tom Tromey  <tromey at redhat.com>
+
+	* charset.c (find_charset_names): Check 'in' against NULL.
+
+2012-02-06  Doug Evans  <dje at google.com>
+
+	* gdbtypes.h (struct main_type): Change type of name,tag_name,
+	and fields.name members from char * to const char *.  All uses updated.
+	(struct cplus_struct_type): Change type of fn_fieldlists.name member
+	from char * to const char *.  All uses updated.
+	(type_name_no_tag): Update.
+	(lookup_unsigned_typename, lookup_signed_typename): Update.
+	* gdbtypes.c (type_name_no_tag): Change result type
+	from char * to const char *.  All callers updated.
+	(lookup_unsigned_typename, lookup_signed_typename): Change type of
+	name parameter from char * to const char *.
+	* symtab.h (struct cplus_specific): Change type of demangled_name
+	member from char * to const char *.  All uses updated.
+	(struct general_symbol_info): Change type of name and
+	mangled_lang.demangled_name members from char * to const char *.
+	All uses updated.
+	(symbol_get_demangled_name, symbol_natural_name): Update.
+	(symbol_demangled_name, symbol_search_name): Update.
+	* symtab.c (symbol_get_demangled_name): Change result type
+	from char * to const char *.  All callers updated.
+	(symbol_natural_name, symbol_demangled_name): Ditto.
+	(symbol_search_name): Ditto.
+	(completion_list_add_name): Change type of symname,sym_text,
+	text,word parameters from char * to const char *.
+	(completion_list_objc_symbol): Change type of sym_text,
+	text,word parameters from char * to const char *.
+	* ada-lang.c (find_struct_field): Change type of name parameter
+	from char * to const char *.
+	(encoded_ordered_before): Similarly for N0,N1 parameters.
+	(old_renaming_is_invisible): Similarly for function_name parameter.
+	(ada_type_name): Change result type from char * to const char *.
+	All callers updated.
+	* ada-lang.h (ada_type_name): Update.
+	* buildsym.c (hashname): Change type of name parameter
+	from char * to const char *.
+	* buildsym.h (hashname): Update.
+	* dbxread.c (end_psymtab): Change type of include_list parameter
+	from char ** to const char **.
+	* dwarf2read.c (determine_prefix): Change result type
+	from char * to const char *.  All callers updated.
+	* f-lang.c (find_common_for_function): Change type of name, funcname
+	parameters from char * to const char *.
+	* f-lang.c (find_common_for_function): Update.
+	* f-valprint.c (list_all_visible_commons): Change type of funcname
+	parameters from char * to const char *.
+	* gdbarch.sh (static_transform_name): Change type of name parameter
+	and result from char * to const char *.
+	* gdbarch.c: Regenerate.
+	* gdbarch.h: Regenerate.
+	* i386-sol2-tdep.c (i386_sol2_static_transform_name): Change type
+	of name parameter from char * to const char *.
+	* jv-lang.c (java_primitive_type_from_name): Ditto.
+	(java_demangled_signature_length): Similarly for signature parameter.
+	(java_demangled_signature_copy): Ditto.
+	(java_demangle_type_signature): Ditto.
+	* jv-lang.h (java_primitive_type_from_name): Update.
+	(java_demangle_type_signature): Update.
+	* objc-lang.c (specialcmp): Change type of a,b parameters
+	from char * to const char *.
+	* p-lang.c (is_pascal_string_type): Change type of arrayname parameter
+	from char * to const char *.  All callers updated.
+	* p-lang.h (is_pascal_string_type): Update.
+	* solib-frv.c (find_canonical_descriptor_in_load_object): Change type
+	of name parameter from char * to const char *.
+	* sparc-sol2-tdep.c (sparc_sol2_static_transform_name): Ditto.
+	* utils.c (fprintf_symbol_filtered): Ditto.
+	* defs.h (fprintf_symbol_filtered): Update.
+	* sparc-tdep.h (sparc_sol2_static_transform_name): Update.
+	* stabsread.h (end_psymtab): Update.
+	* stack.c (find_frame_funname): Change type of funname parameter
+	from char ** to const char **.
+	* stack.h (find_frame_funname): Update.
+	* typeprint.c (type_print): Change type of varstring parameter
+	from char * to const char *.
+	* value.h (type_print): Update.
+	* xcoffread.c (xcoff_start_psymtab): Change type of filename parameter
+	from char * to const char *.  All callers updated.
+	(xcoff_end_psymtab): Change type of include_list parameter
+	from char ** to const char **.  All callers updated.
+	(swap_sym): Similarly for name parameter.  All callers updated.
+	* coffread.c (patch_type): Add (char*) cast to xfree parameter.
+	Use xstrdup.
+	(process_coff_symbol): Use xstrdup.
+	* stabsread.c (stabs_method_name_from_physname): Renamed from
+	update_method_name_from_physname.  Change result type from void
+	to char *.  All callers updated.
+	(read_member_functions): In has_destructor case, store name in objfile
+	obstack instead of malloc space.  In !has_stub case, fix mem leak.
+
+2012-02-06  Luca Pizzamiglio  <luca.pizzamiglio at gmail.com>
+
+	* configure: Rebuild.
+	* configure.ac: Put -L../bfd and -L../libiberty at the front of
+	LDFLAGS.
+
+2012-02-03  Kevin Buettner  <kevinb at redhat.com>
+
+	* configure.tgt (rl78-*-elf): New target.
+	* rl78-tdep.c: New file.
+
+2012-02-03  Philippe Waroquiers  <philippe.waroquiers at skynet.be>
+
+	* remote.c (remote_rcmd): Use getpkt_sane to detect timeout
+	and continue the loop.  Add QUIT statement.
+
+2012-02-03  Tom Tromey  <tromey at redhat.com>
+
+	PR gdb/13596:
+	* solib.h (gdb_bfd_lookup_symbol_from_symtab): Rename from
+	bfd_lookup_symbol_from_symtab.
+	* solib-pa64.c (pa64_solib_create_inferior_hook): Use
+	gdb_bfd_lookup_symbol_from_symtab.
+
+2012-02-03  Joel Brobecker  <brobecker at adacore.com>
+
+	* mi/mi-cmd-stack.c (list_args_or_locals): For argument symbols,
+	use SYMBOL_LINKAGE_NAME to find the corresponding non-argument
+	symbol.  Add assertion that sym2 is never NULL.
+
+2012-02-02  Doug Evans  <dje at google.com>
+
+	* blockframe.c (find_pc_partial_function_gnu_ifunc): Change type of
+	"name" parameter to const char ** from char **.  All callers updated.
+	(find_pc_partial_function): Ditto.
+	(cache_pc_function_name): Change type to const char * from char *.
+	* symtab.h ((find_pc_partial_function_gnu_ifunc): Update.
+	(find_pc_partial_function): Update.
+	* alpha-tdep.h (struct gdbarch_tdep, member pc_in_sigtramp): Change
+	type of "name" parameter to const char * from char *.
+	All uses updated.
+	* arch-utils.c (generic_in_solib_return_trampoline): Change
+	type of "name" parameter to const char * from char *.
+	* arch-utils.h (generic_in_solib_return_trampoline): Update.
+	* frv-linux-tdep.c (frv_linux_pc_in_sigtramp): Change
+	type of "name" parameter to const char * from char *.
+	* gdbarch.sh (in_solib_return_trampoline): Ditto.
+	* gdbarch.c: Regenerate.
+	* gdbarch.h: Regenerate.
+	* hppa-hpux-tdep.c (hppa_hpux_in_solib_return_trampoline): Update.
+	* rs6000-tdep.c (rs6000_in_solib_return_trampoline): Update.
+	* m32r-linux-tdep.c (m32r_linux_pc_in_sigtramp): Change
+	type of "name" parameter to const char * from char *.
+	* skip.c (skip_function_pc): Ditto.
+	* sparc-sol2-tdep.c (sparc_sol2_pc_in_sigtramp): Ditto.
+	* sparc-tdep.h (sparc_sol2_pc_in_sigtramp): Update.
+	* sparc64fbsd-tdep.c (sparc64fbsd_pc_in_sigtramp): Ditto.
+	* sparc64nbsd-tdep.c (sparc64nbsd_pc_in_sigtramp): Ditto.
+	* sparc64obsd-tdep.c (sparc64obsd_pc_in_sigtramp): Ditto.
+	* sparcnbsd-tdep.c (sparc32nbsd_pc_in_sigtramp): Ditto.
+	* sparcobsd-tdep.c (sparc32obsd_pc_in_sigtramp): Ditto.
+	* nbsd-tdep.c (nbsd_pc_in_sigtramp): Similary for "func_name".
+	* nbsd-tdep.h (nbsd_pc_in_sigtramp): Update.
+
+2012-02-02  Pedro Alves  <palves at redhat.com>
+
+	* remote.c (remote_get_min_fast_tracepoint_insn_len): Return 0 if
+	the current inferior has no execution.  Make sure the current
+	remote process matches gdb's current inferior.
+
+2012-02-02  Tom Tromey  <tromey at redhat.com>
+
+	PR gdb/13405:
+	* tui/tui-win.c (parse_scrolling_args): Don't write to possibly
+	read-only memory.
+
+2012-02-02  Tom Tromey  <tromey at redhat.com>
+
+	PR gdb/9307:
+	* symtab.c (lookup_language_this): Set block_found.
+
+2012-02-01  Tom Tromey  <tromey at redhat.com>
+
+	PR gdb/13431:
+	* jit.c (struct jit_inferior_data): Rewrite.
+	(struct jit_objfile_data): New.
+	(get_jit_objfile_data): New function.
+	(add_objfile_entry): Update.
+	(jit_read_descriptor): Return int.  Replace descriptor_addr
+	argument with inf_data.  Update.  Don't call error.
+	(jit_breakpoint_re_set_internal): Reorder logic.  Update.  Look up
+	descriptor here.
+	(jit_inferior_init): Don't look up descriptor.  Don't call error.
+	(jit_reset_inferior_data_and_breakpoints)
+	(jit_inferior_created_observer): Remove.
+	(jit_inferior_exit_hook): Update.
+	(jit_executable_changed_observer): Remove.
+	(jit_event_handler): Update.
+	(free_objfile_data): Reset inferior data if needed.
+	(_initialize_jit): Update.
+
+2012-02-01  Tom Tromey  <tromey at redhat.com>
+
+	* jit.c (bfd_open_from_target_memory): Move higher in file.
+
+2012-02-01  Tristan Gingold  <gingold at adacore.com>
+
+	* libunwind-frame.c (libunwind_load): Display message if dlopen
+	failed.
+
+2012-02-01  Gary Benson  <gbenson at redhat.com>
+
+	* symtab.h (symbol_found_callback_ftype): New typedef.
+	(iterate_over_symbols): Use the above.
+	* symtab.c (iterate_over_symbols): Likewise.
+	* language.h (language_defn->la_iterate_over_symbols): Likewise.
+	* ada-lang.c (ada_iterate_over_symbols): Likewise.
+	* linespec.c (iterate_over_all_matching_symtabs): Likewise.
+	(iterate_name_matcher): Document return values.
+	(collect_one_symbol): Likewise.
+	(collect_function_symbols): Likewise.
+	(collect_symbols): Likewise.
+
+2012-02-01  Tom Tromey  <tromey at redhat.com>
+
+	* ada-lang.c (resolve_subexp): Update.
+	(ada_lookup_symbol_list): Add 'full_search' argument.
+	(ada_iterate_over_symbols): Pass 0 as full_search argument to
+	ada_lookup_symbol_list.
+	(ada_lookup_encoded_symbol): Update.
+	(get_var_value): Update.
+	* ada-exp.y (block_lookup): Update.
+	(write_var_or_type): Update.
+	(write_name_assoc): Update.
+	* ada-lang.h (ada_lookup_symbol_list): Update.
+
+2012-01-31  Tom Tromey  <tromey at redhat.com>
+
+	* language.h (struct language_defn) <la_iterate_over_symbols>: Fix
+	comment.
 
-	* dwarf2read.c (dwarf2_compute_name): NAME cannot be null here.
+2012-01-31  Doug Evans  <dje at google.com>
 
-	* cli/cli-dump.c (restore_binary_file): Validate ftell return value.
+	* symtab.h: Remove outdated comment.
+	(SYMBOL_MATCHES_NATURAL_NAME): Delete.
 
-	* ada-lang.c (ada_make_symbol_completion_list): Replace malloc
-	with xmalloc.
+2012-02-01  Josh Matthews  <josh at joshmatthews.net>  (tiny change)
 
-	* ada-lang.c (aggregate_assign_others): Rename inner scope variable
-	which shadows function parameter.
+	Fix build error in Darwin port.
+	* i386-darwin-nat.c: Include i386-nat.h.
 
-	* tracepoint.c (create_tsv_from_upload): Superfluous call
-	to xstrdup.  Callee already calls xstrdup.
+2012-01-30  Tom Tromey  <tromey at redhat.com>
 
-	* linespec.c (decode_line_1): Remove unnecessary null check.
+	PR breakpoints/13568:
+	* dwarf2read.c (dwarf_decode_macro_bytes): Add 'include_hash'
+	argument.  Check for recursive includes.
+	(dwarf_decode_macros): Create an include hash.
 
-	* tracepoint.c (scope_info): Fix mem leak, remove underused
-	variable.
+2012-01-30  Michael Eager  <eager at eagercon.com>
 
-	* python/py-prettyprint.c (apply_val_pretty_printer): Remove
-	superfluous null check.
+	* configure.tgt (powerpc-*-linux*): Add glibc-tdep.o.
+	* ppc-linux-tdep.c: Include glibc-tdep.h.
+	(powerpc32_plt_stub, powerpc32_plt_stub_so): Add PLT stub templates.
+	(powerpc_linux_in_plt_stub): New function.
+	(powerpc_linux_in_dynsym_resolve_code): New function.
+	(ppc_skip_trampoline_code): New function.
+	(ppc_linux_init_abi): Use PPC specific functions rather than generic.
+	Use glibc_skip_solib_resolver.
 
-	* std-regs.c (value_of_builtin_frame_pc_reg): Frame can't be null.
-	(value_of_builtin_frame_fp_reg): Ditto.
+2012-01-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* event-top.c (display_gdb_prompt): Remove superfluous null check.
+	Code cleanup: Make 1440 bytes of data segment read-only.
+	* arch-utils.c (endian_enum): Make it const char *const [].
+	* arm-tdep.c (fp_model_strings, arm_abi_strings, arm_mode_strings):
+	Likewise.
+	* breakpoint.c (always_inserted_enums): Likewise.
+	* cli/cli-cmds.c (script_ext_enums): Likewise.
+	* cli/cli-decode.c (add_setshow_enum_cmd, complete_on_enum): Make the
+	enumlist parameter const char *const *.
+	* cli/cli-decode.h (struct cmd_list_element): Make the enums field
+	const char *const *.
+	* command.h (complete_on_enum, add_setshow_enum_cmd): Make the enumlist
+	parameter const char *const *.
+	* cris-tdep.c (cris_modes): Make it const char *const [].
+	* filesystem.c (target_file_system_kinds): Likewise.
+	* i386-tdep.c (valid_flavors, valid_conventions): Likewise.
+	* infrun.c (follow_fork_mode_kind_names, follow_exec_mode_names)
+	(can_use_displaced_stepping_enum, scheduler_enums)
+	(exec_direction_names): Likewise.
+	* language.c (_initialize_language): Make the type_or_range_names and
+	case_sensitive_names variables const char *const [].
+	* mips-tdep.c (mips_abi_strings): Make it const char *const [].
+	* python/python.c (python_excp_enums): Likewise.
+	* remote.c (interrupt_sequence_modes): Likewise.
+	* rs6000-tdep.c (powerpc_vector_strings): Likewise.
+	* serial.c (logbase_enums): Likewise.
+	* sh-tdep.c (sh_cc_enum): Likewise.
+	* stack.c (print_frame_arguments_choices, print_entry_values_choices):
+	Likewise.
+	* symtab.c (multiple_symbols_modes): Likewise.
+	* tui/tui-win.c (tui_border_kind_enums, tui_border_mode_enums):
+	Likewise.
+	* utils.c (internal_problem_modes): Likewise.
 
-	* python/py-prettyprint.c (apply_val_pretty_printer): VAL may
-	be null.
+2012-01-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* linespec.c (decode_line_1): Check for null before dereference.
+	Fix the 2012-01-26 regression by la_get_symbol_name_match_p.
+	* linespec.c (iterate_name_matcher): Negate the SYMBOL_NAME_MATCH_P
+	result.
 
-	* reverse.c (record_restore): Move null-check to before pointer
-	dereference.
+2012-01-27  Doug Evans  <dje at google.com>
 
-	* python/py-utils.c (gdbpy_obj_to_string): Delete unused variable.
+	* configure.ac (with_python): Fix absolute path handling for win32.
+	* configure: Regenerate.
 
-	* objc-lang.c (selectors_info): Add explanitory comment.
-	(classes_info): Ditto.
+2012-01-26  Doug Evans  <dje at google.com>
+
+	* symtab.c: Whitespace cleanup, no code changes.
+
+	* symtab.c (lookup_symbol_in_language): Improve comment.
+	(lookup_symbol_aux): Fix comment.
+
+	* psymtab.c (add_psymbol_to_list): Result is now "void".
+	* psympriv.h (add_psymbol_to_list): Update.
+
+	* dwarf2read.c (add_partial_symbol): Delete local psym, unused.
+
+2012-01-26  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Do not open script filenames twice.
+	* cli/cli-cmds.c (source_script_from_stream): Pass to
+	source_python_script also STREAM.
+	* python/py-auto-load.c (source_section_scripts): Pass to
+	source_python_script_for_objfile also STREAM.
+	(auto_load_objfile_script): Pass to source_python_script_for_objfile
+	also INPUT.
+	* python/python-internal.h (source_python_script_for_objfile): New
+	parameter file, rename parameter file to filename.
+	* python/python.c (python_run_simple_file): Call PyRun_SimpleFile
+	instead if !_WIN32.  Update the function comment.
+	(source_python_script, source_python_script_for_objfile)
+	(source_python_script): New parameter file, rename parameter file to
+	filename.  Pass FILENAME to python_run_simple_file.
+	* python/python.h (source_python_script): New parameter file, rename
+	parameter file to filename.
+
+2012-01-26  Pedro Alves  <palves at redhat.com>
+
+	* corelow.c (core_has_fake_pid): Delete.
+	(core_close): Delete references to `core_has_fake_pid'.
+	(add_to_thread_list): Adjust to mark the inferior's pid as fake.
+	(core_open): Delete references to `core_has_fake_pid'.
+	(core_pid_to_str): Adjust to check inferior->fake_pid_p instead of
+	the removed global.
+
+2012-01-26  Joel Brobecker  <brobecker at adacore.com>
+
+	* symfile.h (struct quick_symbol_functions) [expand_symtabs_matching]:
+	Remove language parameter from name_matcher.  Adjust the comment.
+	* symtab.c (search_symbols_name_matches, expand_partial_symbol_name):
+	Remove language parameter.
+	* ada-lang.c (ada_expand_partial_symbol_name): Likewise.
+	* linespec.c (iterate_name_matcher): Likewise.
+	* dwarf2read.c (dw2_expand_symtabs_matching): Adjust type of
+	name_matcher.  Adjust call accordingly.
+	* psymtab.c (expand_symtabs_matching_via_partial): Likewise.
+	(maintenance_check_symtabs): Adjust type of parameter "fun".
+	* psymtab.h (maintenance_check_symtabs): Likewise.
+
+2012-01-26  Joel Brobecker  <brobecker at adacore.com>
+
+	* language.h (symbol_name_match_p_ftype): New typedef.
+	(struct language_defn): Replace field la_symbol_name_compare
+	by la_get_symbol_name_match_p.
+	* ada-lang.c (ada_get_symbol_name_match_p): New function.
+	(ada_language_defn): Use it.
+	* linespec.c (struct symbol_matcher_data): New type.
+	(iterate_name_matcher): Rewrite.
+	(iterate_over_all_matching_symtabs): Pass a pointer to
+	a symbol_matcher_data struct to expand_symtabs_matching
+	instead of just the lookup name.
+	* c-lang.c, d-lang.c, jv-lang.c, m2-lang.c, objc-lang.c,
+	opencl-lang.c, p-lang.c, language.c: Delete field
+	la_symbol_name_compare, and replace by NULL for new field
+	la_get_symbol_name_match_p.
+	* symfile.h (struct quick_symbol_functions): Update comment.
+
+2012-01-25  Tom Tromey  <tromey at redhat.com>
+
+	* breakpoint.c (bpstat_stop_status): Check 'breakpoint_at' before
+	dereferencing.
+
+2012-01-24  Tom Tromey  <tromey at redhat.com>
+
+	PR symtab/12406:
+	* solib.c (update_solib_list): Update the program space's
+	added_solibs and deleted_solibs fields.
+	* progspace.h (struct program_space) <added_solibs,
+	deleted_solibs>: New fields.
+	(clear_program_space_solib_cache): Declare.
+	* progspace.c (release_program_space): Call
+	clear_program_space_solib_cache.
+	(clear_program_space_solib_cache): New function.
+	* infrun.c (handle_inferior_event) <TARGET_WAITKIND_LOADED>: Call
+	bpstat_stop_status.  Use handle_solib_event.
+	* breakpoint.c: Include gdb_regex.h.
+	(print_solib_event): New function.
+	(bpstat_print): Use print_solib_event.
+	(bpstat_stop_status): Add special case for bp_shlib_event.
+	(handle_solib_event): New function.
+	(bpstat_what): Use handle_solib_event.
+	(struct solib_catchpoint): New.
+	(dtor_catch_solib, insert_catch_solib, remove_catch_solib)
+	(breakpoint_hit_catch_solib, check_status_catch_solib)
+	(print_it_catch_solib, print_one_catch_solib)
+	(print_mention_catch_solib, print_recreate_catch_solib): New
+	functions.
+	(catch_solib_breakpoint_ops): New global.
+	(catch_load_or_unload, catch_load_command_1)
+	(catch_unload_command_1): New functions.
+	(internal_bkpt_check_status): Add special case for
+	bp_shlib_event.
+	(internal_bkpt_print_it): Use print_solib_event.
+	(initialize_breakpoint_ops): Initialize
+	catch_solib_breakpoint_ops.
+	(_initialize_breakpoint): Register "catch load" and "catch
+	unload".
+	* breakpoint.h (handle_solib_event): Declare.
+	* NEWS: Add entry for "catch load" and "catch unload".
+
+2012-01-24  Tom Tromey  <tromey at redhat.com>
+
+	* ada-lang.c: Include gdb_vecs.h.
+	* charset.c: Include gdb_vecs.h.
+	* tracepoint.h: Include gdb_vecs.h.
+	* gdb_vecs.h: New file.
+
+2012-01-24  Pedro Alves  <pedro at codesourcery.com>
+
+	* breakpoint.c (breakpoint_hit_catch_fork)
+	(breakpoint_hit_catch_vfork, breakpoint_hit_catch_syscall)
+	(breakpoint_hit_catch_exec): Make use of the `ws' argument.
+	* infrun.c (inferior_has_forked, inferior_has_vforked)
+	(inferior_has_execd, inferior_has_called_syscall): Delete.
+	(handle_syscall_event): Get syscall_number from the execution
+	control state's wait status.
+	(wait_for_inferior): Don't clear syscall_number.
+
+2012-01-24  Pedro Alves  <palves at redhat.com>
+
+	* breakpoint.c (bpstat_check_location, bpstat_stop_status,
+	pc_at_non_inline_function): Add `ws' parameter, and pass it down.
+	(breakpoint_hit_catch_fork, breakpoint_hit_catch_vfork)
+	(breakpoint_hit_catch_syscall, breakpoint_hit_catch_exec): Add
+	`ws' parameter.
+	(breakpoint_hit_ranged_breakpoint): Add `ws' parameter.  Return
+	false for events other than TARGET_SIGNAL_TRAP.
+	(breakpoint_hit_watchpoint, base_breakpoint_breakpoint_hit):
+	Add `ws' parameter.
+	(bkpt_breakpoint_hit): Add `ws' parameter.  Return false for
+	events other than TARGET_SIGNAL_TRAP.
+	(tracepoint_breakpoint_hit): Add `ws' parameter.
+	* breakpoint.h (struct breakpoint_ops) <breakpoint_hit>: Add `ws'
+	parameter.
+	(bpstat_stop_status): Same.
+	(pc_at_non_inline_function): Same.
+	* infrun.c (handle_syscall_event, handle_inferior_event): Adjust
+	to pass the current event's waitstatus to bpstat_stop_status
+	and pc_at_non_inline_function.
 
-2011-03-01  Ulrich Weigand  <ulrich.weigand at linaro.org>
+2012-01-24  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* arm-linux-tdep.c (ARM_LDR_PC_SP_4): Add define.
-	(arm_linux_restart_syscall_init): Handle both on-stack and in-kernel
-	versions of the trampoline.  Handle Thumb vs. ARM addresses.
-	(arm_kernel_linux_restart_syscall_tramp_frame): New global.
-	(arm_linux_init_abi): Install it.
-	* arm-tdep.c (arm_psr_thumb_bit): Make global.
-	* arm-tdep.c (arm_psr_thumb_bit): Add prototype.
+	Code cleanup.
+	* cli/cli-cmds.c (source_script_from_stream): Never fclose STREAM.
+	Update the function comment for it.
+	(source_script_with_search): Call make_cleanup_fclose for STREAM.
+	* cli/cli-script.c (script_from_file): Do not call make_cleanup_fclose
+	for STREAM.
 
-2011-02-28  Michael Snyder  <msnyder at vmware.com>
+2012-01-24  Pedro Alves  <palves at redhat.com>
 
-	* ui-out.c (ui_out_field_core_addr): Make local char buffer
-	a little bigger, to avoid possibility of an overflow.
+	* breakpoint.c (bpstat_stop_status): Moving clearing print_it
+	outside `bs->stop' block.
+	(bpstat_what): Rework bp_shlib_event handling.
+	(internal_bkpt_check_status): If the breakpoint is a
+	bp_shlib_event, then set bs->stop and bs->print if
+	stop_on_solib_events is set.
 
-	* breakpoint.c (breakpoint_adjustment_warning): Make local char
-	buffers a little bigger, to avoid possibility of an overflow.
+2012-01-24  Gary Benson  <gbenson at redhat.com>
 
-	* coffread.c (coff_getfilename): Add check to avoid overflow.
+	Delete #if 0'd out code.
+	* stack.c (print_frame_label_vars): Remove.
+	(catch_info): Likewise.
+	(_initialize_stack): Remove "info catch" command.
+	* NEWS: Mention the above.
 
-	* objc-lang.c (selectors_info): Add a small safety margin to
-	avoid overflow.
-	(classes_info): Error out on too long REGEXP.
+2012-01-24  Pedro Alves  <palves at redhat.com>
 
-	* infrun.c (handle_inferior_event): Remove unused function call.
+	* remote.c (remote_add_inferior): New `fake_pid_p' parameter.  Use
+	it.
+	(remote_notice_new_inferior): If the remote end doesn't support
+	the multiprocess extensions, then the PID is fake.
+	(add_current_inferior_and_thread): New.
+	(remote_start_remote): Use it.
+	(extended_remote_attach_1): Adjust.
+	(extended_remote_create_inferior_1): Use
+	add_current_inferior_and_thread.
+
+2012-01-24  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix watchpoints to be specific for each inferior.
+	* breakpoint.c (watchpoint_in_thread_scope): Verify also
+	current_program_space.
+	* i386-nat.c (i386_inferior_data_cleanup): New.
+	(i386_inferior_data_get): Replace variable inf_data_local by an
+	inferior_data call.
+	(i386_use_watchpoints): Initialize i386_inferior_data.
+	* linux-nat.c (linux_nat_iterate_watchpoint_lwps): Use INFERIOR_PTID
+	specific iterate_over_lwps.
+
+2012-01-24  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix watchpoints across inferior fork.
+	* amd64-linux-nat.c (update_debug_registers_callback): Update the
+	comment for linux_nat_iterate_watchpoint_lwps.
+	(amd64_linux_dr_set_control, amd64_linux_dr_set_addr): Use
+	linux_nat_iterate_watchpoint_lwps.
+	(amd64_linux_prepare_to_resume): New comment on Linux kernel.
+	* i386-linux-nat.c (update_debug_registers_callback): Update the
+	comment for linux_nat_iterate_watchpoint_lwps.
+	(i386_linux_dr_set_control, i386_linux_dr_set_addr): Use
+	linux_nat_iterate_watchpoint_lwps.
+	(i386_linux_prepare_to_resume): New comment on Linux kernel.
+	* i386-nat.c: Include inferior.h.
+	(dr_mirror): Remove.
+	(i386_inferior_data, struct i386_inferior_data)
+	(i386_inferior_data_get): New.
+	(i386_debug_reg_state): Use i386_inferior_data_get.
+	(i386_cleanup_dregs, i386_update_inferior_debug_regs)
+	(i386_insert_watchpoint, i386_remove_watchpoint)
+	(i386_stopped_data_address, i386_insert_hw_breakpoint)
+	(i386_remove_hw_breakpoint): New variable state, use
+	i386_debug_reg_state instead of DR_MIRROR.
+	* linux-nat.c (delete_lwp): New declaration.
+	(num_lwps): Move here from downwards.
+	(delete_lwp_cleanup): New.
+	(linux_child_follow_fork): Create new child_lp, call
+	linux_nat_new_thread and linux_nat_prepare_to_resume before calling
+	PTRACE_DETACH.
+	(num_lwps): Move upwards.
+	(linux_nat_iterate_watchpoint_lwps): New.
+	* linux-nat.h (linux_nat_iterate_watchpoint_lwps_ftype): New.
+	(linux_nat_iterate_watchpoint_lwps_ftype): New declaration.
 
-	* fork-child.c (fork_inferior): Remove ifdef'd code and
-	unused variable.
+2012-01-24  Joel Brobecker  <brobecker at adacore.com>
 
-	* linux-thread-db.c (attach_thread): Discard unused value.
+	GDB 7.4 released.
 
-	* linux-nat.c (linux_handle_extended_wait): Delete unused variable.
+2012-01-23  Pedro Alves  <palves at redhat.com>
 
-	* remote.c (remote_get_noisy_reply): Discard unused value.
-	(remote_vcont_resume): Ditto.
-	(remote_stop_ns): Ditto.
+	* top.c (caution): Rename to ...
+	(confirm): ... this.
+	(show_caution): Rename to ...
+	(show_confirm): ... this.
+	(quit_cover): Adjust.
+	(init_main): Adjust.
+	* top.h (caution): Rename to ...
+	(confirm): ... this.
+	* utils.c (internal_vproblem, defaulted_query): Adjust.
 
-	* linespec.c (decode_objc): Delete unused variable.
+2012-01-23  Pedro Alves  <palves at redhat.com>
 
-	* tui/tui-regs.c (tui_register_format): Delete unused variable.
+	* top.c (caution): Update comment.
+	(execute_command): Don't consider the current value of `caution'.
 
-	* dwarf2read.c (add_partial_symbol): Discard unused values.
-	(read_base_type): Delete unused variable.
+2012-01-23  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* dbxread.c (read_dbx_symtab): Discard unused value.
+	* cli/cli-cmds.c (find_and_open_script): Handle failure of fdopen.
 
-	* eval.c (evaluate_subexp_standard): Delete unused variable,
-	and discard unused values.
+2012-01-23  Ulrich Weigand  <ulrich.weigand at linaro.org>
 
-	* infcmd.c (_initialize_infcmd): Discard unused values.
+	* inf-child.c: Include "gdb_stat.h" instead of <sys/stat.h>.
+	* linux-tdep.c (linux_info_proc): Avoid ARI coding style warning.
+	* target.c (target_fileio_pwrite): Remove buffer address from
+	debug output.
+	(target_fileio_pread): Likewise.
 
-	* stabsread.c (rs6000_builtin_type): Missing break statement.
+2012-01-20  Ulrich Weigand  <ulrich.weigand at linaro.org>
 
-	* dbxread.c (process_one_symbol): Discard unused value.
+	* NEWS: Document remote "info proc" and "generate-core-file".
 
-	* coffread.c (coff_end_symtab): Delete unused variable.
+2012-01-20  Ulrich Weigand  <ulrich.weigand at linaro.org>
 
-	* dwarf2read.c (dw2_get_file_names): Discard unused value.
-	(dwarf2_add_typedef): Delete unused variable.
-	(read_namespace): Ditto.
-	(dwarf_decode_macros): Ditto.
+	* gdbarch.sh (find_memory_regions): New callback.
+	* gdbarch.c, gdbarch.h: Regenerate.
 
-	* m2-lang.c (evaluate_subexp_modula2): Discard unused variable.
+	* gcore.c (gcore_memory_sections): Try gdbarch find_memory_regions
+	callback before falling back to target method.
 
-	* opencl-lang.c (evaluate_subexp_opencl): Discard unused value.
+	* linux-nat.c (read_mapping, linux_nat_find_memory_regions): Remove.
+	(linux_target_install_ops): No longer install it.
 
-	* p-valprint.c (pascal_val_print): Discard unused value.
+	* linux-tdep.c (linux_find_memory_regions): New function.
+	(linux_init_abi): Install it.
 
-	* utils.c (nquery): Call va_end before return;
-	(yquery): Ditto.
-	(query): Ditto.
+2012-01-20  Ulrich Weigand  <ulrich.weigand at linaro.org>
 
-	* proc-service.c (ps_plog): Call va_end before return.
+	* gdbarch.sh (make_corefile_notes): New architecture callback.
+	* gdbarch.c: Regenerate.
+	* gdbarch.h: Likewise.
+
+	* gcore.c (write_gcore_file): Try gdbarch_make_corefile_notes
+	before target_make_corefile_notes.  If NULL is returned, the
+	target does not support core file generation.
+
+	* linux-nat.c: Include "linux-tdep.h".
+	(find_signalled_thread, find_stop_signal): Remove.
+	(linux_nat_do_thread_registers): Likewise.
+	(struct linux_nat_corefile_thread_data): Likewise.
+	(linux_nat_corefile_thread_callback): Likewise.
+	(iterate_over_spus): Likewise.
+	(struct linux_spu_corefile_data): Likewise.
+	(linux_spu_corefile_callback): Likewise.
+	(linux_spu_make_corefile_notes): Likewise.
+	(linux_nat_collect_thread_registers): New function.
+	(linux_nat_make_corefile_notes): Replace contents by call to
+	linux_make_corefile_notes passing linux_nat_collect_thread_registers
+	as native-only callback.
+
+	* linux-tdep.h: Include "bfd.h".
+	(struct regcache): Add forward declaration.
+	(linux_collect_thread_registers_ftype): New typedef.
+	(linux_make_corefile_notes): Add prototype.
+	* linux-tdep.c: Include "gdbthread.h", "gdbcore.h", "regcache.h",
+	"regset.h", and "elf-bfd.h".
+	(find_signalled_thread, find_stop_signal): New functions.
+	(linux_spu_make_corefile_notes): Likewise.
+	(linux_collect_thread_registers): Likewise.
+	(struct linux_corefile_thread_data): New data structure.
+	(linux_corefile_thread_callback): New funcion.
+	(linux_make_corefile_notes): Likewise.
+	(linux_make_corefile_notes_1): Likewise.
+	(linux_init_abi): Install it.
+
+2012-01-20  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* gdbarch.sh (info_proc): New callback.
+	* gdbarch.c, gdbarch.h: Regenerate.
 
-2011-02-28  Tom Tromey  <tromey at redhat.com>
+	* infcmd.c (info_proc_cmd_1): Try gdbarch info_proc callback
+	before falling back to the target info_proc callback.
+
+	* linux-nat.c: Do not include "cli/cli-utils.h".
+	(linux_nat_info_proc): Remove.
+	(linux_target_install_ops): No longer install it.
+
+	* linux-tdep.c: Include "cli/cli-utils.h" and <ctype.h>.
+	(read_mapping): New function.
+	(linux_info_proc): Likewise.
+	(linux_init_abi): Install it.
+
+2012-01-20  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* defs.h (enum info_proc_what): Moved here from linux-nat.c
+	* infcmd.c: (info_proc_cmd_1): New function.
+	(info_proc_cmd): New function, moved here from equivalent routine
+	orignally in linux-nat.c.
+	(info_proc_cmd_mappings): Likewise.
+	(info_proc_cmd_stat): Likewise.
+	(info_proc_cmd_status): Likewise.
+	(info_proc_cmd_cwd): Likewise.
+	(info_proc_cmd_cmdline): Likewise.
+	(info_proc_cmd_exe): Likewise.
+	(info_proc_cmd_all): Likewise.
+	(_initialize_infcmd): Install "info proc" command and subcommands.
+
+	* target.h (struct target_ops): Add to_info_proc.
+	(target_info_proc): Add prototype.
+	* target.c (target_info_proc): New function.
+
+	* procfs.c (procfs_info_proc): Add prototype.
+	(info_proc_cmd): Rename into ...
+	(procfs_info_proc): ... this.  Update argument types as appropriate
+	for a to_info_proc implementation.  Handle "what" argument.
+	(procfs_target): Install procfs_info_proc.
+	(_initialize_procfs): No longer install "info proc" command.
+
+	* linux-nat.c: (enum info_proc_what): Remove.
+	(linux_nat_info_proc_cmd_1): Rename into ...
+	(linux_nat_info_proc): ... this.  Update argument types as appropriate
+	for a to_info_proc implementation.
+	(linux_nat_info_proc_cmd): Remove.
+	(linux_nat_info_proc_cmd_mappings): Likewise.
+	(linux_nat_info_proc_cmd_stat): Likewise.
+	(linux_nat_info_proc_cmd_status): Likewise.
+	(linux_nat_info_proc_cmd_cwd): Likewise.
+	(linux_nat_info_proc_cmd_cmdline): Likewise.
+	(linux_nat_info_proc_cmd_exe): Likewise.
+	(linux_nat_info_proc_cmd_all): Likewise.
+	(linux_target_install_ops): Install linux_nat_info_proc.
+	(_initialize_linux_nat): No longer install "info proc" command
+	and subcommands.
+
+2012-01-20  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* configure.ac [AC_CHECK_FUNCS]: Check for readlink.
+	* config.in, configure: Regenerate.
+
+	* target.h (struct target_ops): Add to_fileio_readlink.
+	(target_fileio_readlink): Add prototype.
+	* target.c (target_fileio_readlink): New function.
+
+	* inf-child.c: Conditionally include <sys/param.h>.
+	(inf_child_fileio_readlink): New function.
+	(inf_child_target): Install it.
+
+	* remote.c (PACKET_vFile_readlink): New enum value.
+	(remote_hostio_readlink): New function.
+	(init_remote_ops): Install it.
+	(_initialize_remote): Handle vFile:readlink packet type.
 
-	* python/python.c (gdbpy_value_cst): New global.
-	(_initialize_python): Initialize it.
-	* python/python-internal.h (gdbpy_value_cst): Declare.
-	* python/py-value.c (convert_value_from_python): Use
-	gdbpy_value_cst.
+2012-01-20  Pedro Alves  <palves at redhat.com>
+	    Ulrich Weigand  <ulrich.weigand at linaro.org>
 
-2011-02-28  Michael Snyder  <msnyder at vmware.com>
+	* configure.ac [AC_CHECK_FUNCS]: Check for pread and pwrite.
+	* config.in, configure: Regenerate.
+
+	* target.h (struct target_ops): Add to_fileio_open, to_fileio_pwrite,
+	to_fileio_pread, to_fileio_close, to_fileio_unlink.
+	(target_fileio_open): Add prototype.
+	(target_fileio_pwrite): Likewise.
+	(target_fileio_pread): Likewise.
+	(target_fileio_close): Likewise.
+	(target_fileio_unlink): Likewise.
+	(target_fileio_read_alloc): Likewise.
+	(target_fileio_read_stralloc): Likewise.
+
+	* target.c: Include "gdb/fileio.h".
+	(target_read_stralloc): Accept trailing, but not embedded NUL bytes.
+	(default_fileio_target): New function.
+	(target_fileio_open): Likewise.
+	(target_fileio_pwrite): Likewise.
+	(target_fileio_pread): Likewise.
+	(target_fileio_close): Likewise.
+	(target_fileio_unlink): Likewise.
+	(target_fileio_close_cleanup): Likewise.
+	(target_fileio_read_alloc_1): Likewise.
+	(target_fileio_read_alloc): Likewise.
+	(target_fileio_read_stralloc): Likewise.
+
+	* inf-child.c: Include "gdb/fileio.h", <sys/types.h>, <sys/stat.h>,
+	<fcntl.h>, and <unistd.h>.
+	(inf_child_fileio_open_flags_to_host): New function.
+	(inf_child_errno_to_fileio_error): Likewise.
+	(inf_child_fileio_open): Likewise.
+	(inf_child_fileio_pwrite): Likewise.
+	(inf_child_fileio_pread): Likewise.
+	(inf_child_fileio_close): Likewise.
+	(inf_child_fileio_unlink): Likewise.
+	(inf_child_target): Install to_fileio routines.
+
+	* remote.c (init_remote_ops): Install to_fileio routines.
+
+2012-01-20  Pedro Alves  <palves at redhat.com>
+	    Ulrich Weigand  <ulrich.weigand at linaro.org>
 
-	* python/py-cmd.c (cmdpy_init): Fix memory leak.
+	* remote.c (remote_multi_process_p): Only check for multi-process
+	protocol feature, do not check for extended protocol.
+	(remote_supports_multi_process): Check for extended protocol here.
+	(set_general_process): Likewise.
+	(extended_remote_kill): Likewise.
+	(remote_pid_to_str): Likewise.
+	(remote_query_supported): Always query multiprocess mode.
 
-	* breakpoint.c (catch_syscall_completer): Free malloced list.
+2012-01-20  Pedro Alves  <palves at redhat.com>
+	    Ulrich Weigand  <ulrich.weigand at linaro.org>
 
-	* jv-lang.c (java_primitive_type_from_name): Add missing break.
+	* inferior.h (struct inferior): Add fake_pid_p.
+	* inferior.c (exit_inferior_1): Clear fake_pid_p.
+	* remote.c (remote_start_remote): Set fake_pid_p if we have to use
+	magic_null_ptid since the remote side doesn't provide a real PID.
 
-	* opencl-lang.c (lval_func_check_validity): Rename inner variables.
-	(lval_func_check_synthetic_pointer): Ditto.
-	(lval_func_free_closure): Fix use-after-free.
+2012-01-19  Tom Tromey  <tromey at redhat.com>
 
-2011-02-28  Tom Tromey  <tromey at redhat.com>
+	* NEWS: Combine the two Python sections.
 
-	* psymtab.c (expand_partial_symbol_tables): Use
-	ALL_OBJFILE_PSYMTABS.
+2012-01-19  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-02-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* target.h (target_close): Update comment on the target's unpush state.
 
-	* objc-lang.c (selectors_info): Error on too long REGEXP.
+2012-01-19  Pedro Alves  <palves at redhat.com>
 
-2011-02-28  Michael Snyder  <msnyder at vmware.com>
+	* linux-nat.c (linux_nat_close): Call linux_nat_is_async_p and
+	linux_nat_async directly instead of going through the target
+	vector.
+	* target.c (unpush_target): Close target after unpushing it, not
+	before.
 
-	* python/py-param.c (set_parameter_value): Add missing
-	break statement.
+2012-01-19  Gary Benson  <gbenson at redhat.com>
 
-	* linux-record.c (record_linux_system_call): Add missing
-	break statement.
+	* mdebugread.c (sort_blocks): Replace integer constants with ones
+	derived from FIRST_LOCAL_BLOCK.
 
-2011-02-28  Ulrich Weigand  <uweigand at de.ibm.com>
+2012-01-18  Paul Pluzhnikov  <ppluzhnikov at google.com>
+	    Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* breakpoint.c (print_one_breakpoint_location): Remove unused
-	argument PRINT_ADDRESS_BITS.  Update callers.
-	(print_one_breakpoint): Likewise.
+	PR gdb/9538
+	* symfile.c (find_separate_debug_file): New function.
+	(terminate_after_last_dir_separator): Likewise.
+	(find_separate_debug_file_by_debuglink): Also try realpath.
+	* configure.ac (AC_CHECK_FUNCS): Add lstat.
+	* configure: Regenerate.
+	* config.in: Regenerate.
 
-2011-02-28  Ulrich Weigand  <uweigand at de.ibm.com>
+2012-01-18  Doug Evans  <dje at google.com>
 
-	* breakpoint.c (wrap_indent_at_field): New function.
-	(print_breakpoint_location): Use it instead of WRAP_INDENT argument.
-	Allocate ui_stream locally instead of using STB argument.
-	(print_one_breakpoint_location): Update call.
-	* ui-out.c (ui_out_query_field): New function.
-	* ui-out.h (ui_out_query_field): Add prototype.
+	* Makefile.in (TARGET_SYSTEM_ROOT, TARGET_SYSTEM_ROOT_DEFINE): Delete.
+	(main.o): Remove rule.
+	* configure.ac (BINDIR): Define with AC_DEFINE_DIR.
+	(--with-sysroot): Rewrite.
+	* configure: Regenerate.
+	* config.in: Regenerate.
 
-2011-02-28  Joel Brobecker  <brobecker at adacore.com>
+2012-01-18  Sergio Durigan Junior  <sergiodj at redhat.com>
 
-	From Michael Snyder  <msnyder at vmware.com>
-	* ada-exp.y (write_object_renaming): Add FALLTHROUGH comment.
+	* parse.c (initialize_expout): New function.
+	(reallocate_expout): Likewise.
+	(parse_exp_in_context): Use `initialize_expout' and
+	`reallocate_expout' when appropriate.
 
-2011-02-27  Michael Snyder  <msnyder at vmware.com>
+2012-01-18  Pedro Alves  <palves at redhat.com>
 
-	* objc-lang.c (selectors_info): Prevent string overrun.
+	* record.c (struct record_breakpoint, record_breakpoint_p)
+	(record_breakpoints): New.
+	(record_insert_breakpoint, record_remove_breakpoint): Manage
+	record breakpoints list.  Only remove breakpoints from the
+	inferior if they had been inserted there in the first place.
 
-	* tui/tui-stack.c (tui_get_function_from_frame): Fix off by one
-	error in strncpy.
+2012-01-17  Doug Evans  <dje at google.com>
 
-	* symtab.c (rbreak_command): Move variable 'file_name' to
-	outer scope.
+	* linespec.c (decode_line_internal): Don't call symtabs_from_filename
+	if we know we don't have a file name to look for.
 
-	* d-valprint.c (dynamic_array_type): Avoid shadowing a function
-	param with a local variable of the same name.
+2012-01-17  Pedro Alves  <palves at redhat.com>
 
-2011-02-27  Michael Snyder  <msnyder at vmware.com>
+	* dwarf2-frame.c (dwarf2_frame_cfa): Throw NOT_AVAILABLE_ERROR, if
+	the frame's stop reason is UNWIND_UNAVAILABLE.
 
-	* value.c (value_from_history_ref): New function.
-	* value.h (value_from_history_ref): Export.
-	* cli/cli-utils.c (get_number_trailer): Use value_from_history_ref
-	to parse value history references.
-	* cli/cli-utils.h (get_number_trailer): Update comment.
+2012-01-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-02-27  Michael Snyder  <msnyder at vmware.com>
+	Fix compilation error.
+	* m2-exp.y (yyerror): Use ANSI C prototype.
 
-	* inferior.c (detach_inferior_command): Use get_number_or_range.
-	(kill_inferior_command): Ditto.
-	(remove_inferior_command): Ditto.
-	(initialize_inferiors): Make command names plural.
-	Update help strings.
+2012-01-16  Sergio Durigan Junior  <sergiodj at redhat.com>
 
-2011-02-27  Michael Snyder  <msnyder at vmware.com>
+	* f-exp.y (parse_number): Convert prototype from K&R to ANSI C.
+	(growbuf_by_size): Likewise.
+	(yyerror): Likewise.
+	* m2-exp.y (make_qualname): Remove function (was #if 0'ed).
+	(modblock): Remove variable (was #if 0'ed).
+	(parse_number): Convert prototype from K&R to ANSI C.
+	(yyerror): Likewise.
+	* objc-exp.y (parse_number): Likewise.
+	(yyerror): Likewise.
+	(yylex): Remove #if 0'ed code.
+	* p-exp.y (uptok): Convert prototype from K&R to ANSI C.
+	(yyerror): Likewise.
 
-	* darwin-nat-info.c: Fix comment typo.
-	* dwarf2expr.h: Ditto.
-	* fbsd-nat.c: Ditto.
-	* fbsd-nat.h: Ditto.
-	* frame-unwind.h: Ditto.
-	* frame.h: Ditto.
-	* hppa-hpux-tdep.c: Ditto.
-	* i386-linux-nat.c: Ditto.
-	* linux-nat.c: Ditto.
-	* nbsd-nat.c: Ditto.
-	* nbsd-nat.h: Ditto.
-	* ppc-linux-tdep.c: Ditto.
-	* serial.c: Ditto.
-	* ui-file.h: Ditto.
-	* tui/tui-winsource.c: Ditto.
+2012-01-16  Tom Tromey  <tromey at redhat.com>
 
-2011-02-26  Michael Snyder  <msnyder at vmware.com>
+	* NEWS: Add item.
+	* symtab.h (compare_filenames_for_search): Declare.
+	* symtab.c (compare_filenames_for_search): New function.
+	(iterate_over_some_symtabs): Use it.
+	* symfile.h (struct quick_symbol_functions)
+	<map_symtabs_matching_filename>: Change spec.
+	* psymtab.c (partial_map_symtabs_matching_filename): Use
+	compare_filenames_for_search.  Update for new spec.
+	* dwarf2read.c (dw2_map_symtabs_matching_filename): Use
+	compare_filenames_for_search.  Update for new spec.
+	* breakpoint.c (clear_command): Use compare_filenames_for_search.
+
+2012-01-16  Tom Tromey  <tromey at redhat.com>
+
+	PR python/13281:
+	* gdbtypes.h (TYPE_FLAG_ENUM): New macro.
+	(struct main_type) <flag_flag_enum>: New field.
+	* dwarf2read.c (process_enumeration_scope): Detect "flag" enums.
+	* NEWS: Add entries.
+	* c-valprint.c (c_val_print) <TYPE_CODE_ENUM>: Handle "flag"
+	enums.
+	* python/lib/gdb/printing.py (_EnumInstance): New class.
+	(FlagEnumerationPrinter): Likewise.
+
+2012-01-16  Sergio Durigan Junior  <sergiodj at redhat.com>
+
+	* breakpoint.c (create_sals_from_address_default): New function.
+	(create_breakpoints_sal_default): Likewise.
+	(decode_linespec_default): Likewise.
+	(is_marker_spec): Removed.
+	(strace_marker_p): New function.
+	(init_breakpoint_sal): Using `strace_marker_p' instead of
+	`is_marker_spec'.
+	(create_breakpoint): Call method `create_sals_from_address' from
+	breakpoint_ops, replacing code that created SALs conditionally
+	on the type of the breakpoint.  Call method `create_breakpoints_sal',
+	replacing code that created breakpoints conditionally on the type
+	wanted.
+	(base_breakpoint_create_sals_from_address): New function.
+	(base_breakpoint_create_breakpoints_sal): Likewise.
+	(base_breakpoint_decode_linespec): Likewise.
+	(base_breakpoint_ops): Add methods
+	`base_breakpoint_create_sals_from_address',
+	`base_breakpoint_create_breakpoints_sal' and
+	`base_breakpoint_decode_linespec'.
+	(bkpt_create_sals_from_address): New function.
+	(bkpt_create_breakpoints_sal): Likewise.
+	(bkpt_decode_linespec): Likewise.
+	(tracepoint_create_sals_from_address): Likewise.
+	(tracepoint_create_breakpoints_sal): Likewise.
+	(tracepoint_decode_linespec): Likewise.
+	(strace_marker_create_sals_from_address): Likewise.
+	(strace_marker_create_breakpoints_sal): Likewise.
+	(strace_marker_decode_linespec): Likewise.
+	(strace_marker_breakpoint_ops): New variable.
+	(addr_string_to_sals): Remove `marker_spec'.  Call method
+	`decode_linespec' from breakpoint_ops, replacing code that decoded
+	an address string into a SAL.  Use `strace_marker_p' instead of
+	`marker_spec'.
+	(strace_command): Decide whether we are dealing with a static
+	tracepoint with marker or not.  Use the appropriate breakpoint_ops.
+	(initialize_breakpoint_ops): Initialize new fields of breakpoint_ops.
+	* breakpoint.h (linespec_result, linespec_sals): New forward
+	declarations.
+	(breakpoint_ops) <create_sals_from_address>,
+	<create_breakpoints_sal>, <decode_linespec>: New methods.
 
-	* breakpoint.c (reattach_breakpoints): Avoid resource leak (ui_file).
+2012-01-14  Doug Evans  <dje at google.com>
 
-	* maint.c (maintenance_do_deprecate): Plug a memory leak.
-
-	* dwarf2loc.c (insert_bits): Avoid shadowing a function param
-	with a local variable of the same name.
-
-	* i387-tdep.c (i387_supply_fxsave): Avoid shadowing a function
-	param with a local variable of the same name.
-	(i387_supply_xsave): Ditto.
-
-	* linux-low.c (linux_nat_xfer_osdata): Rename local variable so
-	that it does not shadow a function parameter.
-
-	* i386-nat.c (i386_length_and_rw_bits): Document that case
-	statement is meant to fall through.
-
-	* expprint.c (dump_subexp_body_standard): Document that case
-	statement is meant to fall through.
-
-	* amd64-linux-tdep.c (amd64_linux_syscall_record): Delete
-	dead if statement.  Condition can't be false.
-
-2011-02-25  Michael Snyder  <msnyder at vmware.com>
-
-	* arm-tdep.c: Fix typos in comments.
-	* bsd-uthread.c: Ditto.
-	* completer.c: Ditto.
-	* corelow.c: Ditto.
-	* cp-namespace.c: Ditto.
-	* cp-support.c: Ditto.
-	* cris-tdep.c: Ditto.
-	* dbxread.c: Ditto.
-	* dwarf2read.c: Ditto.
-	* frame.h: Ditto.
-	* gdbtypes.h: Ditto.
-	* inferior.h: Ditto.
-	* mdebugread.c: Ditto.
-	* mips-tdep.c: Ditto.
-	* ppc-linux-nat.c: Ditto.
-	* ppc-linux-tdep.c: Ditto.
-	* printcmd.c: Ditto.
-	* sol-thread.c: Ditto.
-	* solib-frv.c: Ditto.
-	* solist.h: Ditto.
-	* sparc64-tdep.c: Ditto.
-	* spu-tdep.c: Ditto.
-	* stabsread.c: Ditto.
-	* symfile.c: Ditto.
-	* valops.c: Ditto.
-	* varobj.c: Ditto.
-	* vax-nat.c: Ditto.
-	* python/py-block.c: Ditto.
-	* python/py-symbol.c: Ditto.
-	* python/py-symtab.c: Ditto.
-	* python/py-value.c: Ditto.
-	* tui/tui-win.c: Ditto.
-
-2011-02-25  Michael Snyder  <msnyder at vmware.com>
-
-	* inferior.c (print_inferior): Accept a string instead of an int
-	for requested_inferiors, and use get_number_or_range to parse it.
-	(info_inferiors_command): Pass args string to print_inferior.
-	(initialize_inferiors): Change help string for info inferiors.
-	* inferior.h (print_inferior): Export prototype change.
-
-2011-02-25  Tom Tromey  <tromey at redhat.com>
-
-	* common/ax.def (invalid2): Set to 0x31.
-
-2011-02-25  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* dwarf2loc.c (disassemble_dwarf_expression) <DW_OP_breg[0-9]+>: Use
-	L and plongest.
-	(disassemble_dwarf_expression) <DW_OP_bregx>: Drop variable offset,
-	use L and plongest.
-	(disassemble_dwarf_expression) <DW_OP_fbreg>: Use L and plongest.
-
-2011-02-24  Michael Snyder  <msnyder at vmware.com>
-
-	* Makefile.in (clean): Make clean should remove generated files
-	observer.h and observer.inc.
-
-2011-02-24  Joel Brobecker  <brobecker at adacore.com>
-
-	Revert the following patch (not approved yet):
-	2011-02-21  Hui Zhu  <teawater at gmail.com>
-	* Makefile.in (HFILES_NO_SRCDIR): Add printcmd.h.
-	* ax-gdb.c (gen_printf_expr_callback): New function.
-	* ax-gdb.h (gen_printf_expr_callback): Forward declare.
-	* ax-general.c (ax_memcpy): New function.
-	(ax_print): Handle "printf".
-	(ax_reqs): Ditto.
-	* ax.h (ax_memcpy): Forward declare.
-	* common/ax.def (invalid2): Removed.
-	(printf): New entry.
-	* printcmd.c (printcmd.h): New include.
-	(string_printf): New function.
-	(ui_printf): Removed.
-	(printf_command): Remove static.  Call string_printf.
-	(eval_command): Call string_printf.
-	* printcmd.h: New file.
-	* tracepoint.c (validate_actionline,
-	encode_actions_1): handle printf_command.
-
-2011-02-23  Tom Tromey  <tromey at redhat.com>
-
-	* ax-general.c (ax_pick): Add missing newline.
-
-2011-02-23  Michael Snyder  <msnyder at vmware.com>
-
-	* breakpoint.c (breakpoint_1): Change first argument from an int
-	to a char pointer, so that the function now accepts a list of
-	breakpoints rather than just one.  Use new function
-	'number_is_in_list' to implement.
-	(breakpoints_info): Pass char * instead of int to breakpoint_1.
-	(watchpoints_info): Ditto.
-	(tracepoints_info): Ditto.
-	(maintenance_info_breakpoints): Ditto.
-	(_initialize_breakpoint): Update help strings to reflect the fact
-	that these functions can now take more than one argument.
-	* cli/cli-utils.c (number_is_in_list): New function.
-	* cli/cli-utils.h (number_is_in_list): Export.
-
-2011-02-23  Michael Snyder  <msnyder at vmware.com>
-
-	* memattr.c (mem_enable_command): Use get_number_or_range.
-	(mem_disable_command): Ditto.
-	(mem_delete_command): Ditto.
-	(_initialize_mem): Tweak usage message to reflect multiple
-	arguments.
-
-2011-02-22  Doug Evans  <dje at google.com>
-
-	Add gdb.lookup_global_symbol python function.
-	* NEWS: Add entry.
-	* python/py-symbol.c (gdbpy_lookup_global_symbol): New function.
-	* python/python-internal.h (gdbpy_lookup_global_symbol): Declare it.
-	* python/python.c (GdbMethods): Add entry for lookup_global_symbol.
-
-2011-02-22  Tom Tromey  <tromey at redhat.com>
-
-	* language.c (language_class_name_from_physname): Rename
-	'curr_language' argument to 'lang'; use in body.
-
-2011-02-22  Michael Snyder  <msnyder at vmware.com>
-
-	* cli/cli-utils.c (number_is_in_list): Check for zero return.
-
-2011-02-22  Pedro Alves  <pedro at codesourcery.com>
-
-	* frame-unwind.h: Fix comment to mention the this frame, not the
-	next.
-
-2011-02-22  Tom Tromey  <tromey at redhat.com>
-
-	* symfile.c (auto_solib_limit): Remove.
-	* symfile.h (auto_solib_limit): Remove.
-
-2011-02-22  Joel Brobecker  <brobecker at adacore.com>
-
-	* Makefile.in (INSTALLED_LIBS): Delete.  Update comment.
-
-2011-02-21  Michael Snyder  <msnyder at vmware.com>
-
-	* gdbthread.h (print_thread_info): Change prototype.
-	* thread.c (print_thread_info): Accept char* instead of int for
-	requested_threads argument.  Use new function number_is_in_list
-	to determine which threads to list.
-	(info_threads_command): Pass char* to print_thread_info.
-	* cli/cli-utils.c (number_is_in_list): New function.
-	* cli/cli-utils.h (number_is_in_list): Export.
-	* mi/mi-main.c (mi_cmd_thread_info): Pass char* to
-	print_thread_info.
-	(print_one_inferior): Ditto.
-	(mi_cmd_list_thread_groups): Ditto.
-
-2011-02-21  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* common/Makefile.in (CFLAGS): New.
-	(COMPILE): Add $(CFLAGS).
-
-2011-02-21  Tom Tromey  <tromey at redhat.com>
-
-	* breakpoint.c (catch_syscall_command_1): Fix typo.
-
-2011-02-21  Tom Tromey  <tromey at redhat.com>
-
-	* reverse.c: Include cli-utils.h.
-	* printcmd.c: Include cli-utils.h.
-	(string_printf): Use skip_spaces.
-	* cli/cli-utils.h: New file.
-	* cli/cli-utils.c: New file.
-	* cli/cli-dump.h (skip_spaces): Move to cli-utils.h.
-	* cli/cli-dump.c (skip_spaces): Move to cli-utils.c.
-	* breakpoint.h (get_number, get_number_or_range): Move to
-	cli-utils.h.
-	* breakpoint.c: Include cli-utils.h.
-	(get_number_trailer, get_number, get_number_or_range)
-	(ep_skip_leading_whitespace): Move to cli-utils.c.
-	(create_breakpoint_sal, find_condition_and_thread)
-	(decode_static_tracepoint_spec, watch_command_1)
-	(watch_maybe_just_location, ep_parse_optional_if_clause)
-	(catch_fork_command_1, catch_exec_command_1)
-	(catch_syscall_command_1): Use skip_spaces, skip_to_space.
-	* Makefile.in (SUBDIR_CLI_OBS): Add cli-utils.o.
-	(SUBDIR_CLI_SRCS): Add cli-utils.c.
-	(HFILES_NO_SRCDIR): Add cli-utils.h.
-	(cli-utils.o): New target.
-
-2011-02-18  Pierre Muller  <muller at ics.u-strasbg.fr>
-
-	* remote.c (remote_close): Reset INFERIOR_PTID to NULL_PTID
-	before calling discard_all_inferiors.
-
-2011-02-21  Ulrich Weigand  <uweigand at de.ibm.com>
-
-	* opencl-lang.c (STRUCT_OCL_TYPE): Remove.
-	(struct builtin_opencl_type): Remove.
-	(builtin_opencl_type): Change return type to "struct type **".
-	(lookup_opencl_vector_type): Update caller.
-	(opencl_language_arch_info): Copy primitive type vector from gdbarch.
-	(build_opencl_types): Install plain array of "struct type *"
-	instead of "struct builtin_opencl_type".
-
-2011-02-21  Matthew Gretton-Dann <matthew.gretton-dann at arm.com>
-	    Ulrich Weigand  <uweigand at de.ibm.com>
-
-	* arm-linux-nat.c: Include "observer.h" and "gdbthread.h".
-	(PTRACE_GETHBPREGS, PTRACE_SETHBPREGS): Define.
-	(struct arm_linux_hwbp_cap): New type.
-	(arm_linux_get_hwbp_cap): New function.
-	(arm_linux_get_hw_breakpoint_count): Likewise.
-	(arm_linux_get_hw_watchpoint_count): Likewise.
-	(arm_linux_can_use_hw_breakpoint): Likewise.
-	(arm_hwbp_type): New type.
-	(arm_hwbp_control_t): Likewise.
-	(struct arm_linux_hw_breakpoint): Likewise.
-	(struct arm_linux_thread_points): Likewise.
-	(arm_threads): New global variable.
-	(arm_linux_find_breakpoints_by_tid): New function.
-	(arm_hwbp_control_initialize): Likewise.
-	(arm_hwbp_control_is_enabled): Likewise.
-	(arm_hwbp_control_disable): Likewise.
-	(arm_linux_hw_breakpoint_initialize): Likewise.
-	(arm_linux_get_hwbp_type): Likewise.
-	(arm_linux_hw_watchpoint_initialize): Likewise.
-	(arm_linux_hw_breakpoint_equal): Likewise.
-	(arm_linux_insert_hw_breakpoint1): Likewise.
-	(arm_linux_remove_hw_breakpoint1): Likewise.
-	(arm_linux_insert_hw_breakpoint): Likewise.
-	(arm_linux_remove_hw_breakpoint): Likewise.
-	(arm_linux_region_ok_for_hw_watchpoint): Likewise.
-	(arm_linux_insert_watchpoint): Likewise.
-	(arm_linux_remove_watchpoint): Likewise.
-	(arm_linux_stopped_data_address): Likewise.
-	(arm_linux_stopped_by_watchpoint): Likewise.
-	(arm_linux_watchpoint_addr_within_range): Likewise.
-	(arm_linux_new_thread): Likewise.
-	(arm_linux_thread_exit): Likewise.
-	(_initialize_arm_linux_nat): Install hardware breakpoint/watchpoint
-	related target callbacks.  Register arm_linux_new_thread and
-	arm_linux_thread_exit.
-	* arm-tdep.h (arm_pc_is_thumb): Add prototype.
-	* arm-tdep.c (arm_pc_is_thumb): Make global.
-	(arm_gdbarch_init): Call set_gdbarch_have_nonsteppable_watchpoint.
-
-2011-02-21  Ulrich Weigand  <uweigand at de.ibm.com>
-
-	* breakpoint.c (update_watchpoint): Do not attempt to recreate
-	per-frame locations while within a function epilogue.
-
-2011-02-21  Pierre Muller  <muller at ics.u-strasbg.fr>
-
-	* ser-mingw.c (ser_windows_close): Reformat comment to better conform
-	to GNU coding standards.
-
-2011-02-21  Pierre Muller  <muller at ics.u-strasbg.fr>
-
-	Allow use of mingw native on Windows 95 OS.
-	* ser-mingw.c (CancelIo): New macro for dynamically loaded DLL entry.
-	(ser_windows_close): Only call CancelIo if function exists.
-	(_initialize_ser_windows): Use LoadLirary/GetProcAddress
-	to check for existence of CancelIo function in kernel32 DLL.
-
-2011-02-21  Hui Zhu  <teawater at gmail.com>
-
-	* Makefile.in (HFILES_NO_SRCDIR): Add printcmd.h.
-	* ax-gdb.c (gen_printf_expr_callback): New function.
-	* ax-gdb.h (gen_printf_expr_callback): Forward declare.
-	* ax-general.c (ax_memcpy): New function.
-	(ax_print): Handle "printf".
-	(ax_reqs): Ditto.
-	* ax.h (ax_memcpy): Forward declare.
-	* common/ax.def (invalid2): Removed.
-	(printf): New entry.
-	* printcmd.c (printcmd.h): New include.
-	(string_printf): New function.
-	(ui_printf): Removed.
-	(printf_command): Remove static.  Call string_printf.
-	(eval_command): Call string_printf.
-	* printcmd.h: New file.
-	* tracepoint.c (validate_actionline,
-	encode_actions_1): handle printf_command.
-
-2011-02-19  Michael Snyder  <msnyder at vmware.com>
-
-	* reverse.c (delete_one_bookmark): Argument is now bookmark
-	id rather than pointer to bookmark struct.
-	(delete_bookmark_command): Use get_number_or_range.
-	(goto_bookmark_command): Parse with get_number instead of strtoul.
-	(bookmark_1): New function.  Print info for one bookmark.
-	(bookmarks_info): Use get_number_or_range and bookmark_1.
-
-2011-02-18  Michael Snyder  <msnyder at vmware.com>
-
-	* thread.c (info_threads_command): Re-implement using
-	get_number_or_range.
-	(thread_apply_command): Ditto.
-
-2011-02-18  Tom Tromey  <tromey at redhat.com>
-
-	* common/ax.def: New file.
-	* ax.h (enum agent_op): Use ax.def.
-	* ax-general.c (aop_map): Use ax.def.
-
-2011-02-18  Tom Tromey  <tromey at redhat.com>
-
-	* ax-general.c (aop_map): Add pick and rot.
-	* dwarf2loc.c (compile_dwarf_to_ax) <DW_OP_over>: Reimplement.
-	<DW_OP_rot>: Implement.
-	* ax.h (enum agent_op) <aop_pick, aop_rot>: New constants.
-	(ax_pick): Declare.
-	* ax-general.c (ax_pick): New function.
-
-2011-02-18  Tom Tromey  <tromey at redhat.com>
-
-	* Makefile.in (HFILES_NO_SRCDIR): Don't mention ada-operator.inc.
-
-2011-02-18  Jan Kratochvil  <jan.kratochvil at redhat.com>
-	    Tom Tromey  <tromey at redhat.com>
+	* NEWS: Update text for "maint set python print-stack".
+	It is deprecated in gdb 7.4 and deleted in 7.5.
 
-	* cp-support.c (make_symbol_overload_list_namespace): Do not call
-	make_symbol_overload_list_block with NULL BLOCK.
-	* valarith.c (unop_user_defined_p): Resolve also TYPE_CODE_TYPEDEF.
+2012-01-13  Eli Zaretskii  <eliz at gnu.org>
 
-2011-02-18  Pedro Alves  <pedro at codesourcery.com>
+	* gdb_curses.h (MOUSE_MOVED) [__MINGW32__]: Undefine before
+	including curses.h.
 
-	* breakpoint.c (get_number_trailer): No longer accept a NULL PP.
-	* breakpoint.h (get_number_or_range): Declare.
-	* printcmd.c (ALL_DISPLAYS): Declare.
-	(delete_display): Reimplement taking a display pointer.
-	(undisplay_command): Accept a range of displays to delete, using
-	get_number_or_range.
+2012-01-12  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-02-18  Pierre Muller  <muller at ics.u-strasbg.fr>
+	* configure: Regenerate.
+	* config.in: Regenerate.
 
-	* c-valprint.c (c_val_print): Add embedded_offset to address
-	for arrays of unspecified length.
-	* p-valprint.c (pascal_val_print): Likewise.
+2012-01-12  Keith Seitz  <keiths at redhat.com>
+
+	PR mi/10586
+	* varobj.c (ANONYMOUS_STRUCT_NAME): Define.
+	(ANONYMOUS_UNION_NAME): Define.
+	(is_path_expr_parent): New function.
+	(get_path_expr_parent): New function.
+	(is_anonymous_child): New function.
+	(create_child_with_value): If the child is anonymous and without
+	a name, assign an object name to it.
+	(c_describe_child): Use get_path_expr_parent to determine
+	the parent expression.
+	If there field represents an anonymous struct or union and
+	has no name, set an appropriate display name and expression.
+	(cplus_describe_child): Likewise.
 
-2011-02-18  Yao Qi  <yao at codesourcery.com>
+2012-01-12  Pedro Alves  <palves at redhat.com>
 
-	* gdb/arm-tdep.c (arm_displaced_step_copy_insn): Move code to ...
-	(arm_process_displaced_insn): .. here. Remove parameter INSN.
-	(thumb_process_displaced_insn): New.
-	* gdb/arm-linux-tdep.c (arm_linux_displaced_step_copy_insn): Update
-	call to arm_process_displaced_insn.
-	* gdb/arm-tdep.h : Update declaration of arm_process_displaced_insn.
+	* i386-tdep.c (i386_frame_cache_1): Also mark the frame base as
+	available when %ebp is found to be zero (outermost).
 
-2011-02-17  Tom Tromey  <tromey at redhat.com>
+2012-01-11  Andreas Tobler  <andreast at fgznet.ch>
 
-	* dwarf2loc.h (dwarf2_compile_expr_to_ax): Declare.
-	* dwarf2loc.c (dwarf2_compile_expr_to_ax): Rename from
-	compile_dwarf_to_ax.  No longer static.  Call
-	dwarf2_compile_cfa_to_ax.
-	(locexpr_tracepoint_var_ref): Update.
-	(loclist_tracepoint_var_ref): Update.
-	* dwarf2-frame.h (dwarf2_compile_cfa_to_ax): Declare.
-	* dwarf2-frame.c (execute_cfa_program): Remove 'this_frame'
-	argument; add 'gdbarch' and 'pc'.
-	(dwarf2_compile_cfa_to_ax): New function.
-	(dwarf2_frame_cache): Update.
+	* common/gdb_assert.h (gdb_static_assert): Rename static_assert to
+	an internal gdb_static_assert.
+	* mi/mi-common.c: Rename static_assert to gdb_static_assert.
 
-2011-02-17  Joel Brobecker  <brobecker at adacore.com>
+2012-01-11  Tom Tromey  <tromey at redhat.com>
 
-	* ada-lang.c (ada_type_of_array): Fix the size of the array
-	in the case of an unconstrained packed array.
+	PR gdb/9598:
+	* breakpoint.c (_initialize_breakpoint): Fix help for "catch
+	catch" and "catch throw".
 
-2011-02-17  Yao Qi  <yao at codesourcery.com>
+2012-01-11  Paul Hilfinger  <hilfingr at adacore.com>
 
-	* common/Makefile.in: Add more targets for make.
+	* blockframe.c (block_innermost_frame): Start search from selected
+	frame, if present, or otherwise the current frame.
 
-2011-02-16  Tom Tromey  <tromey at redhat.com>
+	* c-exp.y (variable): Update innermost_block for
+	'block COLONCOLON NAME' clause.
+	* m2-exp.y (variable): Ditto.
+	* objc-exp.y (variable): Ditto.
 
-	* dwarf2loc.c (unimplemented): Fix typo.
+2012-01-10  Tom Tromey  <tromey at redhat.com>
 
-2011-02-16  Tom Tromey  <tromey at redhat.com>
+	PR python/13199:
+	* python/python.c (finish_python_initialization): Set sys.argv.
 
-	* dwarf2loc.c (unimplemented): Handle unnamed opcodes.
-	(compile_dwarf_to_ax) <default>: Use unimplemented.
-	<DW_OP_deref>: Update.
-	(disassemble_dwarf_expression): Update.
-	* dwarf2read.c (dwarf_stack_op_name): Remove 'def' argument.
-	(decode_locdesc): Update.
-	* dwarf2expr.h (dwarf_stack_op_name): Update.
+2012-01-10  Doug Evans  <dje at google.com>
 
-2011-02-16  Tom Tromey  <tromey at redhat.com>
+	* dwarf2read.c (dwarf_decode_lines): Remove arg "abfd".  New arg
+	"want_line_info".  All callers updated.
+	(dwarf_decode_lines_1): New function.
+	(handle_DW_AT_stmt_list): Add function comment.
+	New arg "want_line_info".  All callers updated.
+	(read_file_scope,read_type_unit_scope): Move comment from
+	handle_DW_AT_stmt_list to here.
 
-	* ax.h (struct aop_map) <name>: Now const.
+2012-01-10  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix regression after libiberty/ update for GCC PR 6057 and others.
+	* c-exp.y (operator) <OPERATOR DELETE>
+	(operator) <OPERATOR DELETE '[' ']'>: Add trailing space.
+	* cp-name-parser.y (fill_comp, make_operator, make_dtor)
+	(make_builtin_type, make_name): New variable i, add gdb_assert.
+	(operator) <OPERATOR NEW>: Update ARGS to 3.
+	(operator) <OPERATOR DELETE>: Add trailing space.
+	(operator) <OPERATOR NEW '[' ']'>: Update ARGS to 3.
+	(operator) <OPERATOR DELETE '[' ']'>: Add trailing space.
+	* cp-support.c (cp_canonicalize_string): Check NULL from
+	cp_comp_to_string, call warning and return.
+
+2012-01-10  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix duplicate .o files after omitting libbfd.a.
+	* Makefile.in (ALL_TARGET_OBS): Remove corelow.o.
+	(SFILES): Add corelow.c.
+	(COMMON_OBS): Add corelow.o.
+	(ALLDEPFILES): Remove corelow.c.
+	* config/alpha/alpha-linux.mh (NATDEPFILES): Remove corelow.o.
+	* config/alpha/alpha-osf3.mh: Likewise.
+	* config/alpha/fbsd.mh: Likewise.
+	* config/arm/nbsdaout.mh: Likewise.
+	* config/arm/nbsdelf.mh: Likewise.
+	* config/i386/i386gnu.mh: Likewise.
+	* config/ia64/hpux.mh: Likewise.
+	* config/ia64/linux.mh: Likewise.
+	* config/m32r/linux.mh: Likewise.
+	* config/m68k/linux.mh: Likewise.
+	* config/mips/irix5.mh: Likewise.
+	* config/mips/irix6.mh: Likewise.
+	* config/pa/hpux.mh: Likewise.
+	* config/pa/linux.mh: Likewise.
+	* config/powerpc/aix.mh: Likewise.
+	* config/sparc/linux.mh: Likewise.
+	* config/sparc/linux64.mh: Likewise.
+	* config/sparc/sol2.mh: Likewise.
+	* config/vax/vax.mh: Likewise.
+	* configure.tgt (alpha*-*-freebsd* alpha*-*-kfreebsd*-gnu)
+	(alpha*-*-netbsd*, alpha*-*-knetbsd*-gnu, alpha*-*-openbsd*)
+	(am33_2.0*-*-linux*, arm*-wince-pe, arm*-*-mingw32ce*, arm*-*-linux*)
+	(arm*-*-openbsd*, cris*, frv-*-*, hppa*-*-hpux*, hppa*-*-netbsd*)
+	(hppa*-*-openbsd*, i[34567]86-*-dicos*, i[34567]86-*-freebsd*)
+	(i[34567]86-*-kfreebsd*-gnu, i[34567]86-*-netbsd*)
+	(i[34567]86-*-knetbsd*-gnu, i[34567]86-*-openbsd*, i[34567]86-*-nto*)
+	(i[34567]86-*-solaris2.1[0-9]*, x86_64-*-solaris2.1[0-9]*)
+	(i[34567]86-*-solaris*, i[34567]86-*-linux*, i[34567]86-*-cygwin*)
+	(i[34567]86-*-mingw32*, m68*-*-netbsd*, m68*-*-knetbsd*-gnu)
+	(m68*-*-openbsd*, m88*-*-openbsd*, microblaze*-linux-*)
+	(microblaze*-*-linux*, mips*-*-linux*, mips*-*-netbsd*)
+	(mips*-*-knetbsd*-gnu, mips64*-*-openbsd*, powerpc-*-netbsd*)
+	(powerpc-*-knetbsd*-gnu, powerpc-*-openbsd*, powerpc-*-linux*)
+	(powerpc64-*-linux*, s390*-*-*, score-*-*, sh*-*-linux*)
+	(sh*-*-netbsdelf*, sh*-*-knetbsd*-gnu, sh*-*-openbsd*)
+	(sparc*-*-freebsd*, sparc*-*-kfreebsd*-gnu, sparc-*-netbsd*)
+	(sparc-*-knetbsd*-gnu, sparc64-*-netbsd*, sparc64-*-knetbsd*-gnu)
+	(sparc-*-openbsd*, sparc64-*-openbsd*, tic6x-*-*linux, vax-*-netbsd*)
+	(vax-*-knetbsd*-gnu, vax-*-openbsd*, x86_64-*-dicos*, x86_64-*-linux*)
+	(x86_64-*-freebsd*, x86_64-*-kfreebsd*-gnu, x86_64-*-netbsd*)
+	(x86_64-*-knetbsd*-gnu, x86_64-*-openbsd*, xtensa*-*-linux*): Remove
+	corelow.o from gdb_target_obs.
+	* corefile.c (core_target): Update the comment on NULL value.
+	(core_file_command): Replace error by gdb_assert on CORE_TARGET.
+	* corelow.c (sniff_core_bfd): Call error instead of warning on zero
+	MATCHES.  Drop YUMMY set on NULL.
+	(core_close): Do not call exit_inferior_silent on zero PID.  Do not
+	reclaim CORE_DATA if it is already NULL.
+
+2012-01-09  Doug Evans  <dje at google.com>
+
+	* gdbtypes.c (safe_parse_type): Initialize type to keep gcc happy.
+	* varobj.c (varobj_set_value): Initialize val,value to keep gcc happy.
+
+2012-01-09  Keith Seitz  <keiths at redhat.com>
+
+	* breakpoint.c (wrapper.h): Don't include.
+
+2012-01-09  Keith Seitz  <keiths at redhat.com>
+
+	* Makefile.in (SFILES): Remove wrapper.c.
+	(HFILES_NO_SRCDIR): Remove wrapper.h.
+	(COMMON_OBS): Remove wrapper.o.
+	* cli/cli-interp.c: Don't inlude wrapper.h.
+	* corelow.c: Likewise.
+	(core_open): Replace gdb_target_find_new_threads with
+	TRY_CATCH around target_find_new_threads.
+	* eval.c (fetch_subexp_value): Likewise for value_fetch_lazy.
+	* gdbtypes.c (safe_parse_type): Likewise for parse_and_eval_type.
+	* varobj.c (varobj_create): Likewise for parse_exp_1 and
+	evaluate_expression.
+	(varobj_set_value): Likewise for evaluate_expression and
+	value_assign.
+	(install_new_variable): Likewise for value_fetch_lazy.
+	(adjust_value_for_child_access): Likewise for value_ind.
+	(c_describe_child): Likewise for value_subscript and
+	value_ind.
+	(c_value_of_root): Likewise for evaluate_expression.
+	* wrapper.c: Remove.
+	* wrapper.h: Remove.
+
+2012-01-09  Doug Evans  <dje at google.com>
+
+	* dwarf2read.c (read_and_check_comp_unit_head): Renamed from
+	partial_read_comp_unit_head.  Replace "buffer", "buffer_size" and
+	"abfd" args with "section".  All callers updated.
+	Error checking code moved ...
+	(error_check_comp_unit_head): ... here.  New function.
+	(read_and_check_type_unit_head): Renamed from read_type_unit_head.
+	Delete arg "abfd".  New arg "type_offset".  All callers updated.
+	(create_debug_types_hash_table): Simplify by using
+	read_and_check_type_unit_head.
+
+	* parser-defs.h (namecopy): Delete.
+	* parse.c (namecopy, namecopy_size): Move into copy_name.
+
+2012-01-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Partially fix duplicate .o files after omitting libbfd.a.
+	* config/alpha/alpha-osf3.mh (NATDEPFILES): Remove solib.o.
+	* config/i386/nbsdaout.mh (NATDEPFILES): Remove solib.o.
+	* config/i386/obsdaout.mh (NATDEPFILES): Remove solib.o.
+	* config/m68k/nbsdaout.mh (NATDEPFILES): Remove solib.o.
+	* config/m68k/obsd.mh (NATDEPFILES): Remove solib.o.
+	* config/powerpc/aix.mh (NATDEPFILES): Remove xcoffread.o.
+	* config/vax/nbsdaout.mh (NATDEPFILES): Remove solib.o.
+
+2012-01-09  Pedro Alves  <palves at redhat.com>
 
-2011-02-16  Tom Tromey  <tromey at redhat.com>
+	* MAINTAINERS: Update my email address.
 
-	* ax-gdb.c.c (gen_expr) <UNOP_MEMVAL>: Handle value kinds other
-	than axs_rvalue.
+2012-01-08  Doug Evans  <dje at google.com>
 
-2011-02-16  Yao Qi  <yao at codesourcery.com>
+	* dwarf2read.c (dwarf2_per_objfile): Rename n_type_comp_units to
+	n_type_units.  Rename type_comp_units to all_type_units.
+	All uses updated.
+	(add_signatured_type_cu_to_table): Renamed from
+	add_signatured_type_cu_to_list.  All callers updated.
 
-	* infrun.c (get_displaced_step_closure_by_addr): New.
-	* inferior.h: Declare it.
-	* arm-tdep.c: (arm_pc_is_thumb): Call
-	get_displaced_step_closure_by_addr.  Adjust MEMADDR if it
-	returns non-NULL.
+	* gdbtypes.h (struct cplus_struct_type): Delete member
+	nfn_fields_total.  All uses removed.
 
-2011-02-16  Pedro Alves  <pedro at codesourcery.com>
-	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-01-06  Doug Evans  <dje at google.com>
 
-	gdb/
-	* tracepoint.c (memrange_sortmerge): Fix list A's end calculation.
+	* dwarf2read.c: Move FIXME from dwarf2_build_psymtabs_hard
+	to top of file.
+	(dwarf2_find_comp_unit): Delete.
+	(process_psymtab_comp_unit): Make result "void".
+	Delete args buffer, info_ptr, buffer_size, and replace with
+	"section".  All callers updated.
+	(dwarf2_build_psymtabs_hard): Simplify.
 
-2011-02-16  Pedro Alves  <pedro at codesourcery.com>
-	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-01-06  Sergio Durigan Junior  <sergiodj at redhat.com>
+	    Thiago Jung Bauermann  <bauerman at br.ibm.com>
 
-	* value.c (value_contents_copy_raw): Extend describing comment.
-	Assert that the destination contents we're overwriting are wholly
-	available.
-	(value_contents_copy): Extend describing comment.
+	* ada-lang.c (ada_exception_name_addr): Add `volatile' keyword
+	before `struct gdb_exception'.
+	* breakpoint.c (update_global_location_list_nothrow)
+	(update_breakpoint_locations, enable_breakpoint_disp): Likewise.
+	* cp-abi.c (value_rtti_type): Likewise.
+	* cp-support.c (cp_validate_operator): Likewise.
+	* infrun.c (insert_exception_resume_breakpoint)
+	(check_exception_resume, keep_going): Likewise.
+	* mi-interp.c (mi_breakpoint_created)
+	(mi_breakpoint_modified): Likewise.
+	* rs6000-aix-tdep.c (rs6000_convert_from_func_ptr_addr): Likewise.
+	* solib-ia64-hpux.c (ia64_hpux_at_dld_breakpoint_p)
+	(ia64_hpux_handle_dld_breakpoint_1): Likewise.
 
-2011-02-16  Pedro Alves  <pedro at codesourcery.com>
-	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-01-05  Doug Evans  <dje at google.com>
 
-	* value.c (value_available_contents_eq): Remove redundant local
-	variables.  Fix available contents comparision.
-	* value.h (value_available_contents_eq): Extend describing
-	comment.
+	* dwarf2read.c (statement_prologue): Delete, unused.
 
-2011-02-16  Yao Qi  <yao at codesourcery.com>
+	* dwarf2read.c (dwarf2_per_cu_addr_size): Make result type an int.
+	* dwarf2loc.h (dwarf2_per_cu_addr_size): Update.
 
-	* thread.c (info_threads_command): Add missing i18n markup and remove
-	trailing newline.
+	* dwarf2read.c (comp_unit_header): Delete, unused.
 
-2011-02-15  Paul Pluzhnikov  <ppluzhnikov at google.com>
+2012-01-05  Ulrich Weigand  <uweigand at de.ibm.com>
 
-	* breakpoint.c (longjmp_names): New variable.
-	(struct breakpoint_objfile_data): New type.
-	(breakpoint_objfile_key): New variable.
-	(msym_not_found): New variable.
-	(msym_not_found_p): New predicate.
-	(get_breakpoint_objfile_data): New function.
-	(create_overlay_event_breakpoint): Check per-objfile cache for
-	symbols first.
-	(create_longjmp_master_breakpoint): Likewise.
-	(create_std_terminate_master_breakpoint): Likewise.
-	(create_exception_master_breakpoint): Likewise.
-	(_initialize_breakpoint): Register per-objfile data key.
+	* configure.tgt [s390*-*-*] (gdb_target_obs): Add corelow.o.
+	* config/s390/s390.mh (NATDEPFILES): Remove corelow.o.
 
-2011-02-15  Paul Pluzhnikov  <ppluzhnikov at google.com>
+2012-01-05  Khoo Yit Phang  <khooyp at cs.umd.edu>
 
-	* breakpoint.c ((create_overlay_event_breakpoint): Const-propagate
-	parameter value.
-	(create_longjmp_master_breakpoint): Loop over longjmp names.
-	(create_std_terminate_master_breakpoint): Const-propagate parameter
-	value.
-	(update_breakpoints_after_exec): Adjust.
-	(breakpoint_re_set): Adjust.
+	* infrun.c (normal_stop): Don't skip calling the normal_stop
+	observers if the thread was doing a multi-step, but stopped for
+	some reason other than stepping.
 
-2011-02-15  Michael Snyder  <msnyder at vmware.com>
+2012-01-05  Pedro Alves  <alves.ped at gmail.com>
 
-	* thread.c (info_threads_command): Process arg as thread id,
-	or list of thread ids.
-	(thread_find_command): New command.
-	(_initialize_thread): Document argument for info threads.
-	Document 'thread find' command.
-	* NEWS: Document new command "thread find".
+	* cli/cli-decode.h: Add comments.
+	(CMD_LIST_AMBIGUOUS): Moved to command.h
+	(add_cmd, add_alias_cmd, add_prefix_cmd, add_abbrev_prefix_cmd)
+	(set_cmd_cfunc, set_cmd_sfunc, set_cmd_completer, cmd_cfunc_eq)
+	(set_cmd_context, get_cmd_context, lookup_cmd, lookup_cmd_1)
+	(deprecate_cmd, deprecated_cmd_warning, lookup_cmd_composition)
+	(add_com, add_com_alias, add_info, add_info_alias)
+	(complete_on_cmdlist, complete_on_enum, help_list): Remove
+	declarations.
+	* command.h: Add and adjust comments.
+	(CMD_LIST_AMBIGUOUS): Moved here.
+	(help_cmd, help_cmd_list): Delete declarations.
 
-2011-02-15  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-01-04  Doug Evans  <dje at google.com>
 
-	* Makefile.in (ACLOCAL_AMFLAGS): Add `-I ../config'.
-	* aclocal.m4: Regenerated with aclocal-1.11.1.
-	* common/configure: Regenerate with autoconf-2.64.
+	* dwarf2read.c (dwarf2_read_abbrevs): Delete arg "abfd".
+	All callers updated.
+	(load_full_type_unit): Renamed from read_signatured_type_at_offset.
+	Replace all arguments with "per_cu".  All callers updated.
 
-2011-02-15  Ken Werner  <ken.werner at de.ibm.com>
+	* dwarf2read.c (dwarf2_per_cu_data): Remove outdated comment.
 
-	* opencl-lang.c (build_opencl_types): Set the size of the built-in
-	bool data type to a size of one byte.
+	* dwarf2read.c (init_one_comp_unit): Delete arg "objfile".
+	New arg "per_cu".  All callers updated.
 
-2011-02-15  Pedro Alves  <pedro at codesourcery.com>
-	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+	Delete #if 0'd out code.
+	* language.c (binop_result_type): Delete.
+	(simple_type, ordered_type, same_type, integral_type): Delete.
+	(numeric_type, character_type, string_type, boolean_type): Delete.
+	(float_type, structured_type): Delete.
+	* language.h: Update.
 
-	* target.c (memory_xfer_live_readonly_partial): Document where to
-	look for interface description.
+2012-01-04  Tom Tromey  <tromey at redhat.com>
 
-2011-02-15  Yao Qi  <yao at codesourcery.com>
+	* python/py-value.c (valpy_binop): Initialize 'res_val'.
 
-	PR tdep/12352
-	* arm-tdep.c (copy_ldr_str_ldrb_strb): Replace PC with SP in
-	order to store PC value on stack instead of text section.
+2012-01-04  Joel Brobecker  <brobecker at adacore.com>
 
-2011-02-15  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+	* corefile.c (close_exec_file): Delete.
+	(reopen_exec_file): Remove commented out code that seems related
+	to close_exec_file, which is being deleted here.
+	* inferior.h (close_exec_file): Delete.
+	* fork-child.c (fork_inferior): Remove call to fork_inferior.
 
-	* rs6000-tdep.c (IS_EFP_PSEUDOREG): Use correct constant for
-	the EFP register set size.
-	(efpr_pseudo_register_read): Use regcache_raw_read_part to read
-	data from the VMX register.
-	(efpr_pseudo_register_write): Use regcache_raw_write_part to read
-	and write data from/to the VMX register.
+2012-01-04  Joel Brobecker  <brobecker at adacore.com>
 
-2011-02-14  Michael Snyder  <msnyder at vmware.com>
+	* ada-lang.c: #include "cli/cli-utils.h".
+	(get_selections): Use skip_spaces.
+	(ada_get_next_arg): Use skip_spaces and skip_to_space.
+	(catch_ada_exception_command_split): Use skip_spaces.
+	(ada_decode_assert_location): Likewise.
 
-	* command.h (enum command_class): New class 'no_set_class', for
-	"show" commands without a corresponding "set" command.
-	* value.c (_initialize_values): Use 'no_set_class' for "show values".
-	* copying.c (_initialize_copying): Ditto for "show copying" and
-	"show warranty".
-	* cli/cli-cmds.c (init_cli_cmds): Ditto for "show commands" and
-	"show version".
-	* cli/cli-setshow.c (cmd_show_list): Skip "show" commands for
-	which there is no corresponding "set" command (eg. "show copying").
+2012-01-04  Joel Brobecker  <brobecker at adacore.com>
 
-2011-02-14  Pedro Alves  <pedro at codesourcery.com>
-	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* linespec.c (decode_line_internal): Check for C++ or Java
+	compound constructs only if the current language is C, C++
+	or Java.
 
-	* exec.c (section_table_available_memory): Change `len' parameter
-	type to ULONGEST.
-	* exec.h (section_table_available_memory): Ditto.
-	* value.h (read_value_memory): Rename the `offset' parameter to
-	`embedded_offset'.
+2012-01-04  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-02-14  Pedro Alves  <pedro at codesourcery.com>
-	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+	Revert:
+	2012-01-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
+		    Joel Brobecker  <brobecker at adacore.com>
+	Fix regression for gdb.cp/gdb2495.exp with gcc-4.7.
+	* arch-utils.c (displaced_step_at_entry_point): Incrase BP_LEN skip to
+	3 times.
+	* infcall.c (call_function_by_hand) <AT_SYMBOL>: Move it upwards and
+	fall through into AT_ENTRY_POINT.
+	(call_function_by_hand) <AT_ENTRY_POINT>: New variable bp_len.  Adjust
+	DUMMY_ADDR with it.
+	* ppc-linux-tdep.c (ppc_linux_displaced_step_location): Increase
+	PPC_INSN_SIZE skip to 3 times.
 
-	* memrange.c (compare_mem_ranges): Mention sort order in
-	describing comment.
-	(normalize_mem_ranges): Add comment.  Fix ra->length calculation.
-	* tracepoint.c (traceframe_available_memory): Extend comment to
-	mention what happens to RESULT when the target does not support
-	the query.
+2012-01-04  Joel Brobecker  <brobecker at adacore.com>
 
-2011-02-14  Pedro Alves  <pedro at codesourcery.com>
-	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* linespec.c (add_minsym): Preserve function descriptors.
 
-	* value.c (mark_value_bytes_unavailable): Fix indexing the `bef'
-	range.
-
-2011-02-14  Pedro Alves  <pedro at codesourcery.com>
-
-	* value.c (value_bits_valid, value_bits_synthetic_pointer):
-	No longer handle NULL values.
-
-2011-02-14  Pedro Alves  <pedro at codesourcery.com>
-
-	* exceptions.h (NOT_AVAILABLE_ERROR): New error.
-	* value.c: Include "exceptions.h".
-	(require_available): Throw NOT_AVAILABLE_ERROR instead of a
-	generic error.
-	* cp-abi.c: Include gdb_assert.h.
-	(baseclass_offset): Add `embedded_offset' and `val' parameters.
-	Assert the method is implemented.  Wrap NOT_AVAILABLE_ERROR
-	errors.
-	* cp-abi.h (baseclass_offset): Add `embedded_offset' and `val'
-	parameters.  No longer returns -1 on error.
-	(struct cp_abi_ops) <baseclass_offset>: Add `embedded_offset' and
-	`val' parameters.
-	* cp-valprint.c: Include exceptions.h.
-	(cp_print_value): Handle NOT_AVAILABLE_ERROR errors when fetching
-	the baseclass_offset.  Handle unavailable base classes.  Use
-	val_print_invalid_address.
-	* p-valprint.c: Include exceptions.h.
-	(pascal_object_print_value): Handle NOT_AVAILABLE_ERROR errors
-	when fetching the baseclass_offset.  No longer expect
-	baseclass_offset returning -1.  Handle unavailable base classes.
-	Use val_print_invalid_address.
-	* valops.c (dynamic_cast_check_1): Rename `contents' parameter to
-	`valaddr' parameter, and change its type to gdb_byte pointer.  Add
-	`embedded_offset' and `val' parameters.  Adjust.
-	(dynamic_cast_check_2): Rename `contents' parameter to `valaddr'
-	parameter, and change its type to gdb_byte pointer.  Add
-	`embedded_offset' and `val' parameters.  Adjust.  No longer expect
-	baseclass_offset returning -1.
-	(value_dynamic_cast): Use value_contents_for_printing rather than
-	value_contents.  Adjust.
-	(search_struct_field): No longer expect baseclass_offset returning
-	-1.
-	(search_struct_method): If reading memory from the target is
-	necessary, wrap it in a new value to pass to baseclass_offset.  No
-	longer expect baseclass_offset returning -1.
-	(find_method_list): No longer expect baseclass_offset returning
-	-1.  Use value_contents_for_printing rather than value_contents.
-	* valprint.c (val_print_invalid_address): New function.
-	* valprint.h (val_print_invalid_address): Declare.
-	* gdbtypes.c (is_unique_ancestor_worker): New `embedded_offset'
-	and `val' parameters.  No longer expect baseclass_offset returning
-	-1.  Adjust.
-	* gnu-v2-abi.c: Include "exceptions.h".
-	(gnuv2_baseclass_offset): Add `embedded_offset' and `val'
-	parameters.  Handle unavailable memory.  Recurse through
-	gnuv2_baseclass_offset directly, rather than through
-	baseclass_offset.  No longer returns -1 on not found, instead
-	throw an error.
-	* gnu-v3-abi.c (gnuv3_baseclass_offset): Add `embedded_offset' and
-	`val' parameters.  Adjust.
-
-2011-02-14  Pedro Alves  <pedro at codesourcery.com>
-
-	* tracepoint.c (memrange_sortmerge): Don't merge ranges that are
-	almost but not quite adjacent.
-
-2011-02-14  Pedro Alves  <pedro at codesourcery.com>
-
-	* value.h (value_entirely_available): Declare.
-	* value.c (value_entirely_available): New function.
-	* c-valprint.c (c_value_print): Don't try fetching the pointer's
-	real type if the pointer is unavailable.
-
-2011-02-14  Pedro Alves  <pedro at codesourcery.com>
-
-	* valops.c (value_repeat): Use read_value_memory instead of
-	read_memory.
-
-2011-02-14  Pedro Alves  <pedro at codesourcery.com>
-
-	* value.h (value_contents_copy, value_contents_copy_raw): Declare.
-	* value.c (value_contents_copy_raw, value_contents_copy): New
-	functions.
-	(value_primitive_field): Use value_contents_copy_raw instead of
-	memcpy.
-	* valops.c (value_fetch_lazy): Use value_contents_copy instead of
-	memcpy.
-	(value_array, value_slice): Ditto.
-	* valarith.c (value_subscripted_rvalue): Use
-	value_contents_copy_raw instead of memcpy.
-
-2011-02-14  Pedro Alves  <pedro at codesourcery.com>
-
-	<unavailable> references.
-
-	* valops.c (get_value_at): Use value_from_contents_and_address,
-	avoiding read_memory.
-
-2011-02-14  Pedro Alves  <pedro at codesourcery.com>
-
-	* c-valprint.c (c_val_print): Print a string with unavailable
-	contents as an array.
-
-2011-02-14  Pedro Alves  <pedro at codesourcery.com>
-
-	* value.h (unpack_bits_as_long): Delete declaration.
-	(unpack_value_bits_as_long): Declare.
-	(unpack_value_field_as_long): Declare.
-	(value_field_bitfield): Declare.
-	* value.c (unpack_bits_as_long): Rename to...
-	(unpack_value_bits_as_long_1): ... this.  Add embedded_offset and
-	value parameters.  Return the extracted result in a new output
-	parameter.  If the value contents are unavailable, return false,
-	otherwise return true.
-	(unpack_value_bits_as_long): New.
-	(unpack_field_as_long): Rename to...
-	(unpack_value_field_as_long_1): ... this.  Add embedded_offset and
-	Add embedded_offset and value parameters.  Return the extracted
-	result in a new output parameter. If the value contents are
-	unavailable, return false, otherwise return true.
-	(unpack_value_field_as_long): New.
-	(unpack_field_as_long_1): New.
-	(unpack_field_as_long): Reimplement as wrapper around
-	unpack_value_field_as_long_1.
-	(value_field_bitfield): New function.
-	* valops.c (value_fetch_lazy): When fetching a bitfield, use
-	unpack_value_bits_as_long.  Mark the value as unavailable, if it
-	is unavailable.
-	* jv-valprint.c (java_print_value_fields): Use
-	value_field_bitfield.
-	* p-valprint.c (pascal_object_print_value_fields): Use
-	value_field_bitfield.
-	* cp-valprint.c (cp_print_value_fields): Use value_field_bitfield.
-
-2011-02-14  Pedro Alves  <pedro at codesourcery.com>
-
-	* value.c (get_internalvar_integer): Also return the int value of
-	TYPE_CODE_INT INTERNALVAR_VALUE values.
-	(set_internalvar): Don't special case TYPE_CODE_INT.
-
-2011-02-14  Pedro Alves  <pedro at codesourcery.com>
-
-	* value.c (struct internalvar) <enum internalvar_kind>: Remove
-	INTERNALVAR_POINTER.
-	<pointer>: Delete.
-	(value_of_internalvar): Remove INTERNALVAR_POINTER handling.
-	(set_internalvar): Remove special TYPE_CODE_PTR handling.
-	(preserve_one_internalvar): Remove INTERNALVAR_POINTER handling.
-
-2011-02-14  Pedro Alves  <pedro at codesourcery.com>
-
-	* value.h (value_available_contents_eq): Declare.
-	* value.c (find_first_range_overlap): New function.
-	(value_available_contents_eq): New function.
-	* valprint.c (val_print_array_elements): Use
-	value_available_contents_eq.
-	* ada-valprint.c (val_print_packed_array_elements): Use
-	value_available_contents_eq.
-	* jv-valprint.c (java_value_print): Use
-	value_available_contents_eq.
-
-2011-02-14  Pedro Alves  <pedro at codesourcery.com>
-
-	* target.c (target_read_live_memory): New function.
-	(memory_xfer_live_readonly_partial): New.
-	(memory_xfer_partial): If reading from a traceframe, fallback to
-	reading unavailable read-only memory from read-only regions of
-	live target memory.
-	* tracepoint.c (disconnect_tracing): Adjust.
-	(set_current_traceframe): New, factored out from
-	set_traceframe_number.
-	(set_traceframe_number): Reimplement to only change the traceframe
-	number on the GDB side.
-	(do_restore_current_traceframe_cleanup): Adjust.
-	(make_cleanup_restore_traceframe_number): New.
-	(cur_traceframe_number): New global.
-	(tfile_open): Set cur_traceframe_number to no traceframe.
-	(set_tfile_traceframe): New function.
-	(tfile_trace_find): If looking up a traceframe using any method
-	other than by number, make sure the current tfile traceframe
-	matches gdb's current traceframe.  Update the current tfile
-	traceframe if the lookup succeeded.
-	(tfile_fetch_registers, tfile_xfer_partial)
-	(tfile_get_trace_state_variable_value): Make sure the remote
-	traceframe matches gdb's current traceframe.
-	* remote.c (remote_traceframe_number): New global.
-	(remote_open_1): Set it to -1.
-	(set_remote_traceframe): New function.
-	(remote_fetch_registers, remote_store_registers)
-	(remote_xfer_memory, remote_xfer_partial)
-	(remote_get_trace_state_variable_value): Make sure the remote
-	traceframe matches gdb's current traceframe.
-	(remote_trace_find): If looking up a traceframe using any method
-	other than by number, make sure the current remote traceframe
-	matches gdb's current traceframe.  Update the current remote
-	traceframe if the lookup succeeded.
-	* infrun.c (fetch_inferior_event): Adjust.
-	* tracepoint.h (set_current_traceframe): Declare.
-	(get_traceframe_number, set_traceframe_number): Add describing
-	comments.
-
-2011-02-14  Pedro Alves  <pedro at codesourcery.com>
-
-	Mark pieces of values as unavailable if the corresponding memory
-	is unavailable.
-
-	* valops.c: Include tracepoint.h.
-	(value_fetch_lazy): Use read_value_memory.
-	(read_value_memory): New.
-	* value.h (read_value_memory): Declare.
-	* dwarf2loc.c (read_pieced_value): Use read_value_memory.
-	* exec.c (section_table_available_memory): New function.
-	* exec.h (section_table_available_memory): Declare.
-
-2011-02-14  Pedro Alves  <pedro at codesourcery.com>
-
-	* Makefile.in (SFILES): Add memrange.c.
-	(HFILES_NO_SRCDIR): Add memrange.h.
-	(COMMON_OBS): Add memrange.o.
-	* memrange.c: New file.
-	* memrange.h: New file.
-	* tracepoint.c: Include memrange.h.
-	(struct mem_range): Delete.
-	(mem_range_s): Delete.
-	(traceframe_available_memory): New function.
-	* tracepoint.h (traceframe_available_memory): Declare.
-
-2011-02-14  Pedro Alves  <pedro at codesourcery.com>
-
-	* target.h (struct traceframe_info): Forward declare.
-	(enum target_object): Add TARGET_OBJECT_TRACEFRAME_INFO.
-	(struct target_ops) <to_traceframe_info>: New field.
-	(target_traceframe_info): New.
-	* target.c (update_current_target): Inherit and default
-	to_traceframe_info.
-	* remote.c (PACKET_qXfer_traceframe_info): New.
-	(remote_protocol_features): Register qXfer:traceframe-info:read.
-	(remote_xfer_partial): Handle TARGET_OBJECT_TRACEFRAME_INFO.
-	(remote_traceframe_info): New.
-	(init_remote_ops): Install it.
-	(_initialize_remote): Install "set/show remote traceframe-info"
-	commands.
-	* tracepoint.h (parse_traceframe_info): Declare.
-	* tracepoint.c (struct mem_range): New.
-	(mem_range_s): New typedef.
-	(struct traceframe_info): New.
-	(traceframe_info): New global.
-	(free_traceframe_info): New function.
-	(clear_traceframe_info): New function.
-	(start_tracing, tfind_1, set_traceframe_number): Clear traceframe
-	info.
-	(build_traceframe_info): New function.
-	(tfile_traceframe_info): New function.
-	(init_tfile_ops): Install tfile_traceframe_info.
-	(traceframe_info_start_memory, free_result): New functions.
-	(memory_attributes, traceframe_info_elements): New globals.
-	(parse_traceframe_info, get_traceframe_info): New functions.
-	* features/traceframe-info.dtd: New file.
-	* Makefile.in (XMLFILES): Add traceframe-info.dtd.
-
-2011-02-14  Pedro Alves  <pedro at codesourcery.com>
-
-	Base support for <unavailable> value contents.
-
-	* value.h (value_bytes_available): Declare.
-	(mark_value_bytes_unavailable): Declare.
-	* value.c (struct range): New struct.
-	(range_s): New typedef.
-	(ranges_overlap): New function.
-	(range_lessthan): New function.
-	(ranges_contain_p): New function.
-	(struct value) <unavailable>: New field.
-	(value_bytes_available): New function.
-	(mark_value_bytes_unavailable): New function.
-	(require_not_optimized_out): Constify parameter.
-	(require_available): New function.
-	(value_contents_all, value_contents): Require all bytes be
-	available.
-	(value_free): Free `unavailable'.
-	(value_copy): Copy `unavailable'.
-	* valprint.h (val_print_unavailable): Declare.
-	* valprint.c (valprint_check_validity): Rename `offset' parameter
-	to `embedded_offset'.  If printing a scalar, check whether the
-	value chunk is available.
-	(val_print_unavailable): New.
-	(val_print_scalar_formatted): Check whether the value is
-	available.
-	* python/py-prettyprint.c (apply_val_pretty_printer): Refuse
-	pretty-printing unavailable values.
-
-2011-02-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix const/volatile qualifiers of C++ types, PR c++/12328.
-	* c-typeprint.c (c_type_print_args): Update the function comment.  New
-	variable param_type, initialize it.  Remove const/volatile qualifiers
-	for language_cplus and !show_artificial.  Use param_type.
-
-2011-02-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* symtab.c (find_pc_sect_line): New variable objfile, initialize it
-	from S.  Iterate S using ALL_OBJFILE_SYMTABS.  Verify BV for each S.
-	* symtab.h (struct symtab) <next>: Comment extension.
-
-2011-02-12  Yao Qi  <yao at codesourcery.com>
-
-	* Makefile.in (CLEANDIRS): Remove duplicated common dir.
-
-2011-02-11  Yao Qi  <yao at codesourcery.com>
-
-	* common/Makefile.in: Add copyright header.
-
-2011-02-11  Pedro Alves  <pedro at codesourcery.com>
-
-	* infrun.c (proceed): Move switching out and in of tfind mode from
-	here ...
-	(fetch_inferior_event): ... to here.
-
-2011-02-11  Yao Qi  <yao at codesourcery.com>
-
-	* Makefile.in: Remove signals.o from COMMON_OBS.  Link
-	libcommon.a.
-	* configure.ac: Add common to sub dir.
-	* configure: Regenerate.
+2012-01-04  Ulrich Weigand  <uweigand at de.ibm.com>
 
-2011-02-11  Yao Qi  <yao at codesourcery.com>
+	* breakpoint.c (all_locations_are_pending): Consider locations
+	in program spaces executing during startup pending as well.
 
-	Build libcommon.a.
+2012-01-04  Joel Brobecker  <brobecker at adacore.com>
 
-	* common/Makefile.in: New.
-	* common/configure.ac: New.
-	* common/aclocal.m4: New.
-	* common/configure: Generate.
+	Copyright year update in most files of the GDB Project.
 
-2011-02-10  Pedro Alves  <pedro at codesourcery.com>
+2012-01-04  Joel Brobecker  <brobecker at adacore.com>
 
-	* vec.h (VEC_block_remove): Place VEC_ASSERT_INFO on the right
-	side of the parenthesis.
+	* copyright.sh: Delete.
+	* copyright.py: Rewrite.
 
-	Merge from GCC:
-	2010-07-13  Jakub Jelinek  <jakub at redhat.com>
-	* vec.h (VEC_block_remove): Fix comment.
+2012-01-04  Joel Brobecker  <brobecker at adacore.com>
 
-2011-02-08  Michael Snyder  <msnyder at vmware.com>
+	* gnulib/extra/update-copyright: New file, imported from gnulib.
 
-	* linux-nat.c (linux_nat_filter_event): Fix typo in comment.
+2012-01-04  Joel Brobecker  <brobecker at adacore.com>
 
-2011-02-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* README (Copyright and License Notices): New section.
 
-	* i386-tdep.c (i386_process_record): Rename l suffixes to d suffixes
-	in comments for pcmpgtd, pcmpeqd, psubd, paddd, pcmpgtd, pcmpeqd,
-	psubd and paddd.
+2012-01-03  Tom Tromey  <tromey at redhat.com>
 
-2011-02-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	PR python/12533:
+	* python/py-value.c (valpy_dereference, valpy_get_address
+	valpy_get_dynamic_type, valpy_lazy_string, valpy_do_cast)
+	(valpy_getitem, valpy_call, valpy_binop, valpy_negative)
+	(valpy_absolute, valpy_richcompare): Free intermediate values.
 
-	PR 12361.
-	* i386-tdep.c (i386_process_record) <0x660f3807>: Fix the comment to
-	phsubsw.
-	(i386_process_record) <lddqu>: Fix the opcode to 0xf20ff0.
-	(i386_process_record) <0x0f3807>: Fix the comment to phsubsw.
+2011-01-03  Joel Brobecker  <brobecker at adacore.com>
 
-2011-02-08  Ulrich Weigand  <uweigand at de.ibm.com>
+	* ada-lang.c: Reformat the copyright notice.
 
-	* dwarf2read.c (read_subroutine_type): Set special calling
-	convention flag for functions compiled by IBM XL C for OpenCL.
-	* ppc-sysv-tdep.c: Include "dwarf2.h"
-	(ppc_sysv_abi_push_dummy_call): Implement IBM OpenCL vector types
-	calling convention.
-	(do_ppc_sysv_return_value): Add FUNC_TYPE argument.  Implement
-	IBM OpenCL vector types calling convention.
-	(ppc_sysv_abi_return_value): Pass through FUNC_TYPE.
-	(ppc_sysv_abi_broken_return_value): Likewise.
-	(ppc64_sysv_abi_push_dummy_call): Implement IBM OpenCL vector
-	types calling convention.
-	(ppc64_sysv_abi_return_value): Likewise.
-	* spu-tdep.c: Include "dwarf2.h"
-	(spu_return_value): Implement IBM OpenCL vector types calling
-	convention.
-
-2011-02-08  Ulrich Weigand  <uweigand at de.ibm.com>
-
-	* ppc-sysv-tdep.c (ppc64_sysv_abi_push_dummy_call): Implement
-	correct ABI for AltiVec vector arguments.
-
-2011-02-07  Pedro Alves  <pedro at codesourcery.com>
-
-	* valprint.c (val_print): Extend comment.
-	* ada-valprint.c (ada_valprint): Rewrite comment deferring
-	interface explanation to val_print.
-	(ada_val_print_array): Adjust comment to current interface.
-	(print_field_values): Adjust comment to current interface.
-	* c-valprint.c (c_val_print): Rewrite comment deferring interface
-	explanation to val_print.
-	* f-valprint.c (f_val_print): Ditto.
-	* jv-valprint.c (java_val_print): Ditto.
-	* m2-valprint.c (m2_val_print): Ditto.
-	* p-valprint.c (pascal_val_print): Ditto.
-
-2011-02-07  Thiago Jung Bauermann  <bauerman at br.ibm.com>
-
-	* breakpoint.c (parse_breakpoint_sals): Fix description.
-
-2011-02-04  Sami Wagiaalla  <swagiaal at redhat.com>
-	    Oguz Kayral <oguzkayral at gmail.com>
-
-	* python/py-inferior.c (python_on_normal_stop): New function.
-	(python_on_resume): New function.
-	(python_inferior_exit): New function.
-	(gdbpy_initialize_inferior): Add normal_stop, target_resumed, and
-	inferior_exit observers.
-	* python/py-evtregistry.c: New file.
-	* python/py-threadevent.c : New file.
-	* python/py-event.c: New file.
-	* python/py-evts.c: New file.
-	* python/py-continueevent.c: New file.
-	* python/py-bpevent.c: New file.
-	* python/py-signalevent.c: New file.
-	* python/py-exetiedevent.c: New file.
-	* python/py-breakpoint.c (gdbpy_breakpoint_from_bpstats): New function.
-	Move struct breakpoint_object from here...
-	* python/python-internal.h: ... to here.
-	* python/py-event.h: New file.
-	* python/py-events.h: New file.
-	* Makefile.in (SUBDIR_PYTHON_OBS): Add py-breakpointstopevent.o,
-	py-continueevent.o, py-event.o, py-eventregistry.o, py-events.o,
-	py-exitedevent.o, py-signalstopevent.o, and py-stopevent.o.
-	(SUBDIR_PYTHON_SRCS): Add py-breakpointstopevent.c,
-	py-continueevent.c, py-event.c, py-eventregistry.c, py-events.c,
-	py-exitedevent.c, py-signalstopevent.c, and py-stopevent.c.
-	Add build rules for all the above.
-
-2011-02-04  Tom Tromey  <tromey at redhat.com>
-
-	* dwarf2read.c (dwarf2_section_empty_p): New function.
-	(dwarf2_read_section): Use dwarf2_section_empty_p.
-	(dwarf2_section_size): New function.
-	(dwarf2_get_section_info): Unconditionally read section.
-	(dwarf2_read_index): Use dwarf2_section_empty_p.
-	(partial_read_comp_unit_head): Use dwarf2_section_size.
-	(dwarf2_symbol_mark_computed): Likewise.
-
-2011-02-04 David Daney <ddaney at caviumnetworks.com>
-
-	* NEWS: Add item for "catch syscall" on mips*-linux* targets.
-
-2011-02-04 David Daney <ddaney at caviumnetworks.com>
-
-	* mips-linux-tdep.c: Include xml-syscall.h.
-	(mips_linux_get_syscall_number): New function.
-	(mips_linux_init_abi): Add calls to
-	mips_linux_get_syscall_number() and set_xml_syscall_file_name().
-	* data-directory/Makefile.in (SYSCALLS_FILES): Add
-	mips-o32-linux.xml, mips-n32-linux.xml and mips-n64-linux.xml
-	* syscalls/mips-n32-linux.xml: New file.
-	* syscalls/mips-n64-linux.xml: New file.
-	* syscalls/mips-o32-linux.xml: New file.
-
-2011-02-04  Ulrich Weigand  <ulrich.weigand at linaro.org>
-
-	* dwarf2read.c (dwarf2_ranges_read): Skip empty range entries.
-	Complain about inverted range entries.
-	(dwarf2_record_block_ranges): Likewise.
+2012-01-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-02-04  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+	* Makefile.in (ALL_TARGET_OBS): Remove solib-target.o.
+	* configure.tgt (arm*-wince-pe, arm*-*-mingw32ce*, arm*-*-symbianelf*)
+	(i[34567]86-*-dicos*, i[34567]86-*-cygwin*, i[34567]86-*-mingw32*)
+	(x86_64-*-dicos*, x86_64-*-mingw*): Remove solib-target.o.
+	Revert this part of:
+	2012-01-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	Build gdb directly from *.o files not using libgdb.a.
+	* Makefile.in (COMMON_OBS): Remove solib-target.o.
 
-	Fix some typos.
-	* breakpoint.c (update_watchpoint): Fix name of the
-	update_global_location_list function.
-	(print_one_breakpoint): Fix typo.
-	(_initialize_breakpoint): Remove extra space in hbreak help
-	string.
-	* breakpoint.h (struct bp_location) <length>: Fix field
-	description.
+2012-01-02  Joel Brobecker  <brobecker at adacore.com>
 
-2011-02-04  Pedro Alves  <pedro at codesourcery.com>
-
-	* regcache.c (registers_changed_ptid): Don't explictly always
-	clear `current_regcache'.  Only clear current_thread_ptid and
-	current_thread_arch when PTID matches.  Only reinit the frame
-	cache if PTID matches the current inferior_ptid.  Move alloca(0)
-	call to ...
-	(registers_changed): ... here.
-
-2011-02-03  Ulrich Weigand  <ulrich.weigand at linaro.org>
-
-	* arm-tdep.c (arm_skip_stack_protector): Accept any symbol that
-	starts with __stack_chk_guard as stack guard symbol.
-
-2011-02-03  Andrew Burgess  <aburgess at broadcom.com>
-
-	* disasm.c (compare_lines): Handle the end of sequence markers
-	within the line table to better support disassembling over
-	compilation unit boundaries.
-
-2011-02-02  Ulrich Weigand  <ulrich.weigand at linaro.org>
-
-	* arm-tdep.c (skip_prologue_function): Add GDBARCH and IS_THUMB
-	arguments.  Skip in-prologue calls to glibc __aeabi_read_tp
-	implementation even if no symbols are available.
-	(thumb_analyze_prologue): Update call to skip_prologue_function.
-	(arm_analyze_prologue): Likewise.
-
-2011-02-02  Ulrich Weigand  <ulrich.weigand at linaro.org>
-
-	* arm-tdep.c: Include "observer.h".
-	(arm_prologue_this_id): Use frame PC if get_frame_func returns 0.
-	(arm_exidx_data_key): New static variable.
-	(struct arm_exidx_entry, arm_exidx_entry_s): New data types.
-	(struct arm_exidx_data): Likewise.
-	(arm_exidx_data_free): New function.
-	(arm_compare_exidx_entries): Likewise.
-	(arm_obj_section_from_vma): Likewise.
-	(arm_exidx_new_objfile): Likewise.
-	(arm_find_exidx_entry): Likewise.
-	(arm_exidx_fill_cache): Likewise.
-	(arm_exidx_unwind_sniffer): Likewise.
-	(arm_exidx_unwind): New global variable.
-	(arm_gdbarch_init): Append unwinder arm_exidx_unwind.
-	(_initialize_arm_tdep): Attach arm_exidx_new_objfile to new_objfile
-	observer.  Register arm_exidx_data_key as objfile data.
-
-2011-02-02  Ulrich Weigand  <ulrich.weigand at linaro.org>
-
-	* arm-tdep.c (arm_analyze_load_stack_chk_guard): Avoid build break
-	due to accessing uninitialized variable.  Fix indentation.
-
-2011-02-02  Pedro Alves  <pedro at codesourcery.com>
-
-	* c-valprint.c (c_value_print): When doing virtual base pointer
-	adjustment, create a new value with adjusted contents rather than
-	changing the contents of the value being printed (and getting it
-	wrong).
-
-2011-02-02  Pedro Alves  <pedro at codesourcery.com>
-
-	* xml-support.c (xml_find_attribute): New.
-	(xinclude_start_include): Use it.
-	* xml-support.h (xml_find_attribute): Declare.
-	* memory-map.c (memory_map_start_memory)
-	(memory_map_start_property): Use xml_find_attribute.
-	* osdata.c (osdata_start_osdata, osdata_start_column): Use
-	xml_find_attribute.
-	* remote.c (start_thread): Use xml_find_attribute.
-	* solib-target.c (library_list_start_segment)
-	(library_list_start_section, library_list_start_library)
-	(library_list_start_list): Use xml_find_attribute.
-	* xml-tdesc.c (tdesc_start_target, tdesc_start_feature)
-	(tdesc_start_union, tdesc_start_struct, tdesc_start_flags)
-	(tdesc_start_field): Use xml_find_attribute.
-
-2011-02-02  Ulrich Weigand  <uweigand at de.ibm.com>
-
-	* opencl-lang.c (STRINGIFY): Rename to OCL_STRING.
-	(BUILD_OCL_VTYPES): Update.
-
-2011-02-02  Joel Brobecker  <brobecker at adacore.com>
-
-	* configure.ac: Work around non-GNU sed limitation when computing
-	python version number.
-	* configure: Regenerate.
+	* gdb/common/gdb_thread_db.h, gdb/dbxread.c, gdb/environ.c,
+	gdb/gcore.h, gdb/rs6000-tdep.h, gdb/s390-nat.c, gdb/tic6x-tdep.c:
+	Reformat the copyright header.
 
-2011-02-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix debug printing of TYPE_INSTANCE.
-	* expprint.c (print_subexp_standard) <TYPE_INSTANCE>: New.
-	(dump_subexp_body_standard) <TYPE_INSTANCE>: New.
-
-2011-02-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix debug printing of BINOP_IN, OP_OBJC_MSGCALL,
-	OP_F77_UNDETERMINED_ARGLIST, OP_COMPLEX, OP_OBJC_SELECTOR, OP_NAME,
-	OP_OBJC_NSSTRING, OP_F90_RANGE and OP_DECFLOAT.
-	* ada-operator.inc: Rename the file to ...
-	* ada-operator.def: ... here, wrap all the entries by macro OP.
-	* expprint.c (op_name_standard): Remove all the entries.  Include
-	"std-operator.def" instead.
-	* expression.h (enum exp_opcode): Include "std-operator.def" and
-	"ada-operator.def".  Move all the entries ...
-	* std-operator.def: ... here, wrap all the entries by macro OP.
-
-2011-01-31  Paul Pluzhnikov  <ppluzhnikov at google.com>
-
-	* breakpoint.h (remove_jit_event_breakpoints): New prototype.
-	* breakpoint.c (remove_jit_event_breakpoints): New function.
-	* jit.c (jit_descriptor_addr): Delete.
-	(registering_code): Delete.
-	(clear_int): Delete.
-	(jit_inferior_data): New variable.
-	(struct jit_inferior_data): New type.
-	(get_jit_inferior_data): New function.
-	(jit_inferior_data_cleanup): New function.
-	(jit_read_descriptor): Adjust.
-	(jit_register_code): Adjust.
-	(jit_breakpoint_re_set_internal): New function; move code here ...
-	(jit_inferior_init): ... from here.
-	(jit_breakpoint_re_set): Adjust.
-	(jit_reset_inferior_data_and_breakpoints): New function.
-	(jit_inferior_created_observer): Adjust.
-	(jit_inferior_exit_hook): Adjust.
-	(jit_executable_changed_observer): New function.
-	(jit_event_handler): Adjust.
-	(_initialize_jit): Adjust.
-
-2011-01-31  Michael Snyder  <msnyder at vmware.com>
-
-	* m32r-tdep.c (m32r_gdbarch_init): Replace accidentally deleted
-	line.
-
-2011-01-31  Tom Tromey  <tromey at redhat.com>
-
-	PR python/12216:
-	* python/python.c (execute_gdb_command): Call
-	prevent_dont_repeat.
-	* top.c (suppress_dont_repeat): New global.
-	(dont_repeat): Use it.
-	(prevent_dont_repeat): New function.
-	* command.h (prevent_dont_repeat): Declare.
-
-2011-01-31  Tom Tromey  <tromey at redhat.com>
-
-	* infcmd.c (finish_backward): Use breakpoint_set_silent.
-	* python/py-breakpoint.c (bppy_set_silent): Use
-	breakpoint_set_silent.
-	(bppy_set_thread): Use breakpoint_set_thread.
-	(bppy_set_task): Use breakpoint_set_task.
-	* breakpoint.h (breakpoint_set_silent, breakpoint_set_thread)
-	(breakpoint_set_task): Declare.
-	(make_breakpoint_silent): Remove.
-	* breakpoint.c (breakpoint_set_silent): New function.
-	(breakpoint_set_thread): Likewise.
-	(breakpoint_set_task): Likewise.
-	(make_breakpoint_silent): Remove.
-
-2011-01-31  Tom Tromey  <tromey at redhat.com>
-
-	* breakpoint.h (user_breakpoint_p): Declare.
-	* breakpoint.c (user_breakpoint_p): New function.
-	(breakpoint_1): Use it.
-	(save_breakpoints): Likewise.
-
-2011-01-31  Joel Brobecker  <brobecker at adacore.com>
-
-	* configure.ac: Add handling of Python distribution on Windows.
-	* python-config.py: If the LIBS, SYSLIBS, LIBPL and/or LINKFORSHARED
-	sysconfig variables are not defined, then do not use them.
-	On Windows, if LIBPL is not defined, then use prefix + '/libs'
-	instead.  On Windows, return all paths using forward-slashes
-	rather than backslashes.
-
-2011-01-31  Joel Brobecker  <brobecker at adacore.com>
-
-	* configure.ac: Remove fallback behavior for building
-	against Python.  Remove tweaking of Python include path.
-	Add PYTHON_CPPFLAGS and PYTHON_LIBS substitution.
-	(AC_TRY_LIBPYTHON):  Adjust program used in linking test.
-	If link is successful, set PYTHON_CPPFLAGS and PYTHON_LIBS.
-	Always restore CPPFLAGS and LIBS after linking test.
-	* configure: Regenerated.
-	* Makefile.in (INTERNAL_CPPFLAGS): Add @PYTHON_CPPFLAGS at .
-	(INSTALLED_LIBS, CLIBS): Add @PYTHON_LIBS at .
-	* python/python-internal.h: Adjust includes of Python .h files.
-
-2011-01-31  Joel Brobecker  <brobecker at adacore.com>
-
-	* tracepoint.c (traceframe_walk_blocks): Add missing i18n markup
-	in error message.
-
-2011-01-31  Joel Brobecker  <brobecker at adacore.com>
-
-	* inflow.c (gdb_has_a_terminal): Fix typo in interactive_mode
-	value test.
-
-2011-01-31  Yao Qi  <yao at codesourcery.com>
-
-	* arm-linux-nat.c: Update calls to regcache_register_status
-	instead of regcache_valid_p.
-	* aix-thread.c: Likewise.
-	* i386gnu-nat.c: Likewise.
-
-2011-01-29  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix crash.
-	* valops.c (compare_parameters): Verify TYPE_NFIELDS before
-	touching TYPE_FIELD_ARTIFICIAL.
-
-2011-01-28  Richard Earnshaw  <rearnsha at arm.com>
-
-	* MAINTAINERS: Move myself from Responsible Maintainers to Authorized
-	Committers.
-
-2011-01-28  Pedro Alves  <pedro at codesourcery.com>
-
-	* tracepoint.c (tfile_xfer_partial): If there's no traceframe
-	selected, don't try iterating over the traceframe's blocks.
-	(tfile_has_stack): If there's no traceframe selected, then there's
-	no stack.
-	(tfile_has_registers): If there's no traceframe selected, then
-	there's no registers.
-
-2011-01-28  Pedro Alves  <pedro at codesourcery.com>
-
-	* target.c (memory_xfer_partial): No need to restore shadows if we
-	haven't read anything.
-
-2011-01-28  Pedro Alves  <pedro at codesourcery.com>
-
-	* mips-tdep.c (mips_print_register): Use get_frame_register_value
-	and val_print_scalar_formatted.
-
-2011-01-27  Pedro Alves  <pedro at codesourcery.com>
-
-	* tracepoint.c (tfile_read): New.
-	(tfile_open): Use it.
-	(tfile_get_traceframe_address): Use it.
-	(tfile_trace_find): Use it.
-	(walk_blocks_callback_func): New typedef.
-	(match_blocktype): New function.
-	(traceframe_walk_blocks): New function.
-	(traceframe_find_block_type): New function.
-	(tfile_fetch_registers, tfile_xfer_partial)
-	(tfile_get_trace_state_variable_value): Use
-	traceframe_find_block_type and tfile_read.
-
-2011-01-26  Kevin Buettner  <kevinb at redhat.com>
-
-	* remote-mips.c: Add internationalization mark ups.  Remove
-	trailing \n from already marked up strings.
-
-2011-01-26  Tom Tromey  <tromey at redhat.com>
-
-	* python/py-prettyprint.c (print_string_repr): Clear
-	'addressprint' option when calling val_print_string.
-	(print_children): Handle Val_pretty_default.  Clear 'addressprint'
-	option when calling val_print_string.
-
-2011-01-26  Tom Tromey  <tromey at redhat.com>
-
-	* python/python.c (gdbpy_solib_name): Use gdb_py_longest and
-	GDB_PY_LL_ARG.
-	* python/python-internal.h (GDB_PY_LL_ARG, GDB_PY_LLU_ARG): New
-	macros.
-	(gdb_py_longest, gdb_py_ulongest): New typedefs.
-	(gdb_py_long_from_longest, gdb_py_long_from_ulongest)
-	(gdb_py_long_as_ulongest): New defines.
-	(gdb_py_object_from_longest, gdb_py_object_from_ulongest)
-	(gdb_py_int_as_long): Declare.
-	* python/py-value.c (valpy_lazy_string): Use gdb_py_longest,
-	GDB_PY_LL_ARG, gdb_py_object_from_longest.
-	(valpy_long): Add comment.
-	* python/py-utils.c (get_addr_from_python): Use
-	gdb_py_long_as_ulongest.  Handle overflow properly.
-	(gdb_py_object_from_longest): New function.
-	(gdb_py_object_from_ulongest): Likewise.
-	(gdb_py_int_as_long): Likewise.
-	* python/py-type.c (typy_array): Use gdb_py_int_as_long.
-	* python/py-symtab.c (salpy_get_pc): Use
-	gdb_py_long_from_ulongest.
-	(salpy_get_line): Use PyInt_FromLong.
-	* python/py-param.c (set_parameter_value): Use
-	gdb_py_int_as_long.
-	* python/py-lazy-string.c (stpy_get_address): Use
-	gdb_py_long_from_ulongest.
-	* python/py-frame.c (frapy_pc): Use gdb_py_long_from_ulongest.
-	* python/py-cmd.c (cmdpy_completer): Use gdb_py_int_as_long.
-	* python/py-breakpoint.c (bppy_set_thread): Use
-	gdb_py_int_as_long.
-	(bppy_set_task): Likewise.
-	(bppy_set_ignore_count): Likewise.
-	(bppy_set_hit_count): Likewise.
-	* python/py-block.c (blpy_get_start): Use
-	gdb_py_object_from_ulongest.
-	(blpy_get_end): Likewise.
-	(gdbpy_block_for_pc): Use gdb_py_ulongest and GDB_PY_LLU_ARG.
-
-2011-01-25  Mathieu Lacage  <mathieu.lacage at inria.fr>
-
-	PR/symtab 11766:
-	* gdb/objfiles.h (struct objfile) <addr_low>: New field.
-	* gdb/solib.c (solib_read_symbols): Check for addr_low in
-	equality test for objfile, initialize addr_low if needed.
-
-2011-01-25  Pedro Alves  <pedro at codesourcery.com>
-
-	* tui/tui-regs.c (tui_register_format): Remove dead code.
-
-2011-01-25  Pedro Alves  <pedro at codesourcery.com>
-
-	* printcmd.c (print_formatted): Use val_print_scalar_formatted
-	instead of print_scalar_formatted.
-	(print_scalar_formatted): Don't handle 's' format strings here,
-	and add an assertion that we never see such format here.
-	* valprint.h (val_print_scalar_formatted): Declare.
-	* valprint.c (val_print_scalar_formatted): New.
-	* c-valprint.c (c_val_print): Use val_print_scalar_formatted
-	instead of print_scalar_formatted.
-	* jv-valprint.c (java_val_print): Ditto.
-	* p-valprint.c (pascal_val_print): Ditto.
-	* ada-valprint.c (ada_val_print_1): Ditto.
-	* f-valprint.c (f_val_print): Ditto.
-	* infcmd.c (registers_info): Ditto.
-	* m2-valprint.c (m2_val_print): Ditto.
-
-2011-01-25  Pedro Alves  <pedro at codesourcery.com>
-
-	* m2-valprint.c (print_unbounded_array): Pass
-	value_contents_for_printing rather than value_contents, to
-	m2_print_array_contents.  Also pass in the value.
-
-2011-01-25  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* dwarf2read.c (dwarf2_read_index, write_psymtabs_to_index)
-	(save_gdb_index_command): Switch to .gdb_index version 4.
-
-2011-01-25  Pedro Alves  <pedro at codesourcery.com>
-
-	* mi/mi-main.c (get_register): Use get_frame_register_value rather
-	than frame_register, and always pass a valid value to val_print.
-
-2011-01-25  Pedro Alves  <pedro at codesourcery.com>
-
-	Centralize printing "<optimized out>".
-
-	* valprint.h (val_print_optimized_out): Declare.
-	* cp-valprint.c (cp_print_value_fields): Use
-	val_print_optimized_out.
-	* jv-valprint.c (java_print_value_fields): Ditto.
-	* p-valprint.c (pascal_object_print_value_fields): Ditto.
-	* printcmd.c (print_formatted): Ditto.
-	* valprint.c (valprint_check_validity): Ditto.
-	(value_check_printable): Ditto.
-	(val_print_optimized_out): New.
-
-2011-01-25  Pedro Alves  <pedro at codesourcery.com>
-
-	* infcmd.c (default_print_registers_info): Allocate values so to
-	never pass a NULL value to val_print.
-
-2011-01-25  Pedro Alves  <pedro at codesourcery.com>
-
-	* cp-valprint.c (cp_print_value): Treat the 'skip' local as
-	boolean.  Make sure to always pass a value that matches the
-	contents buffer to callees.  Preserve `address' for following
-	iterations.
-	* value.c (value_contents_for_printing_const): New.
-	(value_address): Constify value argument.
-	* value.h (value_contents_for_printing_const): Declare.
-	(value_address): Constify value argument.
-
-2011-01-25  Pedro Alves  <pedro at codesourcery.com>
-
-	* regcache.c (struct regcache_descr): Rename
-	sizeof_raw_register_valid_p field to sizeof_raw_register_status,
-	and sizeof_cooked_register_valid_p to
-	sizeof_cooked_register_status.
-	(init_regcache_descr): Adjust.
-	(struct regcache): Rename register_valid_p field to
-	register_status.
-	(regcache_xmalloc_1, regcache_xfree, regcache_save)
-	(do_cooked_read): Adjust.
-	(regcache_valid_p): Rename to ...
-	(regcache_register_status): ... this.  Adjust.
-	(regcache_invalidate): Adjust.
-	(regcache_raw_read, regcache_cooked_read, regcache_raw_write):
-	Adjust.
-	(regcache_raw_supply): Adjust.  If buf i NULL, mark the register
-	as unavailable, not valid.
-	(regcache_dump): Adjust.
-	* regcache.h (enum register_status): New.
-	(regcache_register_status): Declare.
-	(regcache_invalidate): Delete declaration.
-	* corelow.c (get_core_registers): Adjust.
-	* tracepoint.c (tfile_fetch_registers): Adjust.
-	* trad-frame.c (REG_VALUE): Rename to ...
-	(TF_REG_VALUE): ... this.
-	(REG_UNKNOWN): Rename to ...
-	(TF_REG_UNKNOWN): ... this.
-	(trad_frame_set_value, trad_frame_set_unknown): Adjust.
-	* mi/mi-main.c (register_changed_p): Adjust.
-
-2011-01-25  Pedro Alves  <pedro at codesourcery.com>
-
-	* regcache.c (struct regcache_descr): Remove outdated comment.
-	(init_regcache_descr): Remove sizeof_raw_register_valid_p
-	overallocate hack.
-	(regcache_xmalloc): Rename to ...
-	(regcache_xmalloc_1): ... this.  Add `readonly_p' parameter.
-	Allocate the regcache type accordingly.
-	(regcache_xmalloc): New as wrapper around regcache_xmalloc_1.
-	(regcache_xfree): Asser the source is also readonly.  Copy sizeof
-	cooked registers, not raw.
-	(regcache_dup_no_passthrough): Delete.
-	(get_thread_arch_regcache): Use regcache_xmalloc_1.
-	* h8300-tdep.c (h8300_push_dummy_call): Tweak comment to not
-	mention obsolete write_register_bytes.
-	* regcache.h (regcache_dup_no_passthrough): Delete declaration.
-
-2011-01-25  Pedro Alves  <pedro at codesourcery.com>
-
-	Stop remote_read_bytes from handling partial reads itself.
-
-	* remote-fileio.c: Include target.h.
-	(remote_fileio_write_bytes): Delete.
-	(remote_fileio_func_open, remote_fileio_func_write)
-	(remote_fileio_func_rename, remote_fileio_func_unlink): Use
-	target_read_memory.
-	(remote_fileio_func_stat): Use target_read_memory and
-	target_write_memory.
-	(remote_fileio_func_gettimeofday): Use target_write_memory.
-	(remote_fileio_func_system): Use target_read_memory.
-	* remote.c (remote_write_bytes): Make it static.
-	(remote_read_bytes): Don't handle partial reads here.
-	* remote.h (remote_read_bytes): Delete declaration.
-
-2011-01-25  Pedro Alves  <pedro at codesourcery.com>
-
-	Simplify XML parsing a bit.
-
-	* xml-support.h (gdb_xml_parse_quick): Declare.
-	* xml-support.c (gdb_xml_create_parser_and_cleanup_1): Renamed
-	from gdb_xml_create_parser_and_cleanup, and added `old_chain'
-	parameter.
-	(gdb_xml_create_parser_and_cleanup): Reimplement on top of
-	gdb_xml_create_parser_and_cleanup_1.
-	(gdb_xml_parse_quick): New.
-	* memory-map.c (parse_memory_map): Use gdb_xml_parse_quick.
-	* osdata.c (osdata_parse): Ditto.
-	* remote.c (remote_threads_info): Ditto.
-	* solib-target.c (solib_target_parse_libraries): Ditto.
-	* xml-syscall.c (syscall_parse_xml): Ditto.
-	* xml-tdesc.c (tdesc_parse_xml): Ditto.
-
-2011-01-24  Kevin Buettner  <kevinb at redhat.com>
-
-	* configure.tgt (mips*-*-elf): New; just like mips*-*-*, but
-	with remote-mips.o added to gdb_target_obs.
-	* Makefile.in (ALL_TARGET_OBS): Add remote-mips.o.
-
-2011-01-24  Pedro Alves  <pedro at codesourcery.com>
-
-	* ada-valprint.c (val_print_packed_array_elements): Pass the
-	correct struct value to val_print.
-	(ada_val_print_1): Ditto.
-
-2011-01-24  Pedro Alves  <pedro at codesourcery.com>
-
-	Don't lose embedded_offset in printing routines throughout.
-
-	* valprint.h (val_print_array_elements): Change prototype.
-	* valprint.c (val_print_array_elements): Add `embedded_offset'
-	parameter, and adjust to pass it down to val_print, while passing
-	`valaddr' or `address' unmodified.  Take embedded_offset into
-	account when checking repetitions.
-	* c-valprint.c (c_val_print): Pass embedded_offset to
-	val_print_array_elements instead of adjusting `valaddr' and
-	`address'.
-	* m2-valprint.c (m2_print_array_contents, m2_val_print): Pass
-	embedded_offset to val_print_array_elements instead of adjusting
-	`valaddr'.
-	* p-lang.h (pascal_object_print_value_fields): Adjust prototype.
-	* p-valprint.c (pascal_val_print): Pass embedded_offset to
-	val_print_array_elements and pascal_object_print_value_fields
-	instead of adjusting `valaddr'.
-	(pascal_object_print_value_fields): Add `offset' parameter, and
-	adjust to use it.
-	(pascal_object_print_value): Add `offset' parameter, and adjust to
-	use it.
-	(pascal_object_print_static_field): Use
-	value_contents_for_printing/value_embedded_offset, rather than
-	value_contents.
-	* ada-valprint.c (val_print_packed_array_elements): Add `offset'
-	parameter, and adjust to use it.  Use
-	value_contents_for_printing/value_embedded_offset, rather than
-	value_contents.
-	(ada_val_print): Rename `valaddr0' parameter to `valaddr'.
-	(ada_val_print_array): Add `offset' parameter, and adjust to use
-	it.
-	(ada_val_print_1): Rename `valaddr0' parameter to `valaddr', and
-	`embedded_offset' to `offset'.  Don't re-adjust `valaddr'.
-	Instead work with offsets.  Use
-	value_contents_for_printing/value_embedded_offset, rather than
-	value_contents.  Change `defer_val_int' local type to CORE_ADDR,
-	and use value_from_pointer to extract a target pointer, rather
-	than value_from_longest.
-	(print_variant_part): Add `offset' parameter.  Replace
-	`outer_valaddr' parameter by a new `outer_offset' parameter.
-	Don't re-adjust `valaddr'.  Instead pass down adjusted offsets.
-	(ada_value_print): Use
-	value_contents_for_printing/value_embedded_offset, rather than
-	value_contents.
-	(print_record): Add `offset' parameter, and adjust to pass it
-	down.
-	(print_field_values): Add `offset' parameter.  Replace
-	`outer_valaddr' parameter by a new `outer_offset' parameter.
-	Don't re-adjust `valaddr'.  Instead pass down adjusted offsets.
-	Use value_contents_for_printing/value_embedded_offset, rather than
-	value_contents.
-	* d-valprint.c (dynamic_array_type): Use
-	value_contents_for_printing/value_embedded_offset, rather than
-	value_contents.
-	* jv-valprint.c (java_print_value_fields): Add `offset' parameter.
-	Don't re-adjust `valaddr'.  Instead pass down adjusted offsets.
-	(java_print_value_fields): Take `offset' into account.  Don't
-	re-adjust `valaddr'.  Instead pass down adjusted offsets.
-	(java_val_print): Take `embedded_offset' into account.  Pass it to
-	java_print_value_fields.
-	* f-valprint.c (f77_print_array_1): Add `embedded_offset'
-	parameter.  Don't re-adjust `valaddr' or `address'.  Instead pass
-	down adjusted offsets.
-	(f77_print_array): Add `embedded_offset' parameter.  Pass it down.
-	(f_val_print): Take `embedded_offset' into account.
-
-2011-01-21  Joel Brobecker  <brobecker at adacore.com>
-
-	* inflow.c: Include "gdbcmd.h".
-	(interactive_mode): New static global, moved here from top.c.
-	(show_interactive_mode): New function, moved here from top.c.
-	use gdb_has_a_terminal instead of input_from_terminal_p to
-	determine the current mode.
-	(gdb_has_a_terminal): Add handling of the "iteractive-mode"
-	setting.
-	(_initialize_inflow): Add the "set/show interactive-mode"
-	commands.  Moved here from top.c, after having adjusted slightly
-	the help text.
-	* top.c (interactive_mode, show_interactive_mode): Delete, moved
-	to inflow.c.
-	(input_from_terminal_p): Remove handling of "interactive-mode"
-	setting, moved to infow.c.
-	(init_main): Remove creation of the "set/show interactive-mode"
-	commands, moved to inflow.c.
-
-2011-01-19  Joel Brobecker  <brobecker at adacore.com>
-
-	* NEWS: Add entry for native ia64-hpux support.
-
-2011-01-19  Tom Tromey  <tromey at redhat.com>
-
-	PR mi/8618:
-	* thread.c (free_thread): Free 'name'.
-	(print_thread_info): Emit thread name.  Change CLI output.
-	(thread_name_command): New function.
-	(do_captured_thread_select): Emit newline.
-	(_initialize_thread): Register 'thread name' command.
-	* target.h (struct target_ops) <to_thread_name>: New field.
-	(target_thread_name): New macro.
-	* target.c (update_current_target): Handle to_thread_name.
-	* python/py-infthread.c (thpy_get_name): New function.
-	(thpy_set_name): Likewise.
-	(thread_object_getset): Add "name".
-	* linux-nat.c (linux_nat_thread_name): New function.
-	(linux_nat_add_target): Set to_thread_name.
-	* gdbthread.h (struct thread_info) <name>: New field.
-
-2011-01-18  Joel Brobecker  <brobecker at adacore.com>
-
-	* ada-valprint.c (ada_print_scalar): Remove unsigned char downcast.
-	(ada_val_print_1): Likewise.
-
-2011-01-18  Joel Brobecker  <brobecker at adacore.com>
-
-	* rs6000-tdep.c (rs6000_skip_prologue): Make sure that the prologue
-	upper limit address is not greater than the function end address
-	when the upper limit could not be computed using the debugging
-	info.
-
-2011-01-17  Tom Tromey  <tromey at redhat.com>
-
-	* cli/cli-cmds.c (apropos_command): Free the compiled regex.  Use
-	get_regcomp_error.
-	* utils.c: Include gdb_regex.h.
-	(do_regfree_cleanup): New function.
-	(make_regfree_cleanup): Likewise.
-	(get_regcomp_error): Likewise.
-	* gdb_regex.h (make_regfree_cleanup, get_regcomp_error): Declare.
-
-2011-01-17  Tom Tromey  <tromey at redhat.com>
-
-	* cli/cli-cmds.c (apropos_command): Fix formatting.  Don't call
-	re_compile_fastmap.
-
-2011-01-17  Pierre Muller  <muller at ics.u-strasbg.fr>
-
-	* p-exp.y (intvar): New static variable, used to set CURRENT_TYPE
-	for internal variables.
-	(last_was_structop): New static variable.
-	(COMPLETE): New token.
-	(field_exp): New rule to group all '.' suffix handling.
-	Add mark_struct_expression calls when approriate to be able
-	to correctly find fields for completion.
-	(yylex): Adapt to handle field completion and set INTVAR when
-	required.
-
-2011-01-14  Yao Qi  <yao at codesourcery.com>
-
-	* arm-tdep.c (arm_register_reggroup_p): FPS register is in
-	save_reggroup, restore_reggroup and all_reggroup.
-
-2011-01-14  Joel Brobecker  <brobecker at adacore.com>
-
-	* ada-valprint. (ada_printchar): Use the correct type length
-	in call to ada_emit_char.
-	* c-valprint.c (c_val_print): Remove cast in call to LA_PRINT_CHAR.
-
-2011-01-14  Pierre Muller  <muller at ics.u-strasbg.fr>
-
-	* solib-som.h (hpux_major_release): Declare variable here.
-	* solib-som.c:  Remove <sys/utsname.h> header.
-	(DEFAULT_HPUX_MAJOR_RELEASE): New macro.
-	(hpux_major_release): Make global, change default value to
-	DEFAULT_HPUX_MAJOR_RELEASE.
-	(get_hpux_major_release): Simply return HPUX_MAJOR_RELEASE.
-	* hppa-hpux-nat.c: Add <sys/utsname.h> include.
-	Add "solib-som.h" header.
-	(set_hpux_major_release): New function.
-	(_initialize_hppa_hpux_nat): Call set_hpux_major_release.
-
-2011-01-14  Mike Frysinger  <vapier at gentoo.org>
-
-	* configure.tgt (*-*-uclinux*): Match more Linux os targets
-
-2011-01-14  Joel Brobecker  <brobecker at adacore.com>
-
-	* ia64-hpux-nat.c (ia64_hpux_fetch_register): Remove trailing
-	new-line at end of warning message.
-	(ia64_hpux_store_register): Remove trailing new-line at end of
-	error message.
-	* ia64-hpux-tdep.c: Rephrase comment.
-	* solib-ia64-hpux.c (struct dld_info): Change type of field
-	dld_flags from "long long" to ULONGEST.
+2012-01-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-01-14  Pedro Alves  <pedro at codesourcery.com>
+	Revert this part of:
+	2012-01-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	Remove the gdbtui binary.
+	* gdb.c (main): Remove args.interpreter_p initialization.
+	* main.c (captured_main): Set INTERPRETER_P directly by INTERP_CONSOLE.
+	* main.h (struct captured_main_args): Remove interpreter_p.
 
-	* target.h (deprecated_child_ops): Delete declaration.
-	* target.c (deprecated_child_ops): Delete definition.
+2012-01-02  Joel Brobecker  <brobecker at adacore.com>
 
-2011-01-14  Pedro Alves  <pedro at codesourcery.com>
+	* config/djgpp/fnchange.lst: Add entry for ChangeLog-2011.
 
-	* Makefile.in (hpux-thread.o): Delete rule.
-	* configure.ac: Don't check for HPUX DCE threads support.
-	* configure, config.in: Regenerate.
-	* hppa-hpux-nat.c (child_suppress_run): Delete.
-	(hppa_hpux_child_can_run): Delete.
-	(_initialize_hppa_hpux_nat): Don't override to_can_run.
-	* hpux-thread.c: Delete.
-
-2011-01-13  Joel Brobecker  <brobecker at adacore.com>
-
-	* hpux-thread.c (hpux_pid_to_str): Delete.
-
-2011-01-13  Joel Brobecker  <brobecker at adacore.com>
-
-	* ada-valprint.c (ada_emit_char): Remove strange code.
-	Check that c is <= UCHAR_MAX before passing it to isascii.
-	(char_at): Do not assume that TYPE_LEN is either 1 or 2.
-
-2011-01-13  Joel Brobecker  <brobecker at adacore.com>
-
-	* top.c (input_from_terminal_p): Restrict the use of interactive_mode
-	to the case where instream is stdin.
-
-2011-01-13  Joel Brobecker  <brobecker at adacore.com>
-
-	* ia64-tdep.h (struct regcache): Forward declare.
-	(struct ia64_infcall_ops): New struct type.
-	(struct gdbarch_tdep): New fields "find_global_pointer_from_solib"
-	and "infcall_ops".
-	* ia64-tdep.c (ia64_find_global_pointer_from_dynamic_section):
-	Renames ia64_find_global_pointer.
-	(ia64_find_global_pointer, ia64_allocate_new_rse_frame)
-	(ia64_store_argument_in_slot, ia64_set_function_addr: New function.
-	(ia64_push_dummy_call): Adjust to use the new tdep ia64_infocall_ops
-	methods.
-	(ia64_infcall_ops): New static global constant.
-	(ia64_gdbarch_init): Set tdep->infcall_ops.
-	* ia64-hpux-nat.c (ia64_hpux_xfer_solib_got): New function.
-	(ia64_hpux_xfer_partial): Add TARGET_OBJECT_HPUX_SOLIB_GOT handing.
-	* ia64-hpux-tdep.c: Include "regcache.h", "gdbcore.h" and "inferior.h".
-	(ia64_hpux_dummy_code): New static global constant.
-	(ia64_hpux_push_dummy_code, ia64_hpux_allocate_new_rse_frame)
-	(ia64_hpux_store_argument_in_slot, ia64_hpux_set_function_addr)
-	(ia64_hpux_dummy_id, ia64_hpux_find_global_pointer_from_solib):
-	New function.
-	(ia64_hpux_infcall_ops): New static global constant.
-	(ia64_hpux_init_abi): Install gdbarch and tdep methods needed
-	for inferior function calls to work properly on ia64-hpux.
-
-2011-01-13  Joel Brobecker  <brobecker at adacore.com>
-
-	* target.h (enum target_object): Add TARGET_OBJECT_HPUX_UREGS.
-	* ia64-tdep.h (struct frame_info): forward declaration.
-	(struct gdbarch_tdep): Add field size_of_register_frame.
-	* ia64-tdep.c (ia64_access_reg): Use tdep->size_of_register_frame
-	to determine the size of the register frame.
-	(ia64_size_of_register_frame): New function.
-	(ia64_gdbarch_init): Set tdep->size_of_register_frame.
-	* ia64-hpux-tdep.c: Include "target.h" and "frame.h".
-	(IA64_HPUX_UREG_REASON): New macro.
-	(ia64_hpux_stopped_in_syscall, ia64_hpux_size_of_register_frame):
-	New functions.
-	(ia64_hpux_init_abi): Set tdep->size_of_register_frame.
-	* ia64-hpux-nat.c (ia64_hpux_xfer_uregs): New function.
-	(ia64_hpux_xfer_partial): Add handling of TARGET_OBJECT_HPUX_UREGS
-	objects.
+2012-01-02  Joel Brobecker  <brobecker at adacore.com>
 
-2011-01-13  Joel Brobecker  <brobecker at adacore.com>
-
-	Add support for ia64-hpux.
-	* config/ia64/hpux.mh, ia64-hpux-nat.c, ia64-hpux-tdep.c,
-	ia64-hpux-tdep.h, solib-ia64-hpux.c, solib-ia64-hpux.h: New files.
-
-	* configure.host: Add handling for ia64-hpux hosts.  Add associated
-	floatformats.
-	* configure.tgt: Add handling for ia64-hpux targets.
-	* Makefile.in (ALL_64_TARGET_OBS): Add ia64-hpux-tdep.o.
-	(HFILES_NO_SRCDIR): Add ia64-hpux-tdep.h.
-	(ALLDEPFILES): Add ia64-hpux-nat.c ia64-hpux-tdep.c.
-
-2011-01-13  Joel Brobecker  <brobecker at adacore.com>
-
-	[ttrace] Compute thread list immediately after attach.
-	* inf_ttrace_attach (inf_ttrace_create_threads_after_attach):
-	New subprogram.
-	(inf_ttrace_attach): Use it.
-
-2011-01-13  Joel Brobecker  <brobecker at adacore.com>
-
-	* libunwind-frame.c (libunwind_frame_cache): Do not return NULL
-	if we could not determine the frame's function address.  Instead,
-	use the frame's PC, and then continue.
-
-2011-01-13  Joel Brobecker  <brobecker at adacore.com>
-
-	* libunwind-frame.c (__LITTLE_ENDIAN, __BIG_ENDIAN): Define if
-	not already defined.
-
-2011-01-13  Joel Brobecker  <brobecker at adacore.com>
-
-	* ia64-tdep.c (ia64_struct_type_p): New function.
-	(ia64_extract_return_value): Handle integral values that are
-	less than 8 bytes long.
-	(ia64_push_dummy_call): Likewise.
-
-2011-01-13  Joel Brobecker  <brobecker at adacore.com>
-
-	* ia64-tdep.c (floatformat_ia64_ext_little): Renames
-	floatformat_ia64_ext.
-	(floatformat_ia64_ext_big): New static const.
-	(floatformats_ia64_ext): Set first entry to &floatformat_ia64_ext_big.
-
-2011-01-12  Tom Tromey  <tromey at redhat.com>
-
-	* mi/mi-symbol-cmds.c (mi_cmd_symbol_list_lines): Fix error
-	messages.
-	* mi/mi-main.c (mi_cmd_thread_select): Fix error messages.
-	(mi_cmd_thread_list_ids): Likewise.
-	(mi_cmd_data_list_changed_registers): Likewise.
-	(mi_cmd_data_list_register_values): Likewise.
-	(mi_cmd_data_write_register_values): Likewise.
-	(mi_cmd_data_evaluate_expression): Likewise.
-	(mi_cmd_data_read_memory): Likewise.
-	(mi_cmd_data_read_memory_bytes): Likewise.
-	(mi_cmd_data_write_memory): Likewise.
-	(mi_cmd_enable_timings): Likewise.
-	* mi/mi-interp.c (mi_cmd_interpreter_exec): Fix error messages.
-	* mi/mi-cmd-var.c (mi_cmd_var_create): Fix error messages.
-	(mi_cmd_var_delete): Likewise.
-	(mi_cmd_var_set_format): Likewise.
-	(mi_cmd_var_show_format): Likewise.
-	(mi_cmd_var_info_num_children): Likewise.
-	(mi_cmd_var_list_children): Likewise.
-	(mi_cmd_var_info_type): Likewise.
-	(mi_cmd_var_info_expression): Likewise.
-	(mi_cmd_var_show_attributes): Likewise.
-	(mi_cmd_var_assign): Likewise.
-	(mi_cmd_var_update): Likewise.
-	(mi_cmd_enable_pretty_printing): Likewise.
-	(mi_cmd_var_set_update_range): Likewise.
-	* mi/mi-cmd-target.c (mi_cmd_target_file_get): Fix error
-	messages.
-	(mi_cmd_target_file_put): Likewise.
-	(mi_cmd_target_file_delete): Likewise.
-	* mi/mi-cmd-stack.c (mi_cmd_stack_list_frames): Fix error
-	messages.
-	(mi_cmd_stack_info_depth): Likewise.
-	(mi_cmd_stack_list_locals): Likewise.
-	(mi_cmd_stack_list_args): Likewise.
-	(mi_cmd_stack_select_frame): Likewise.
-	(mi_cmd_stack_select_frame): Likewise.
-	(mi_cmd_stack_info_frame): Likewise.
-	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_file): Fix error
-	messages.
-	(mi_cmd_file_list_exec_source_files): Likewise.
-	* mi/mi-cmd-env.c (mi_cmd_env_pwd): Fix error messages.
-	(mi_cmd_env_cd): Likewise.
-	(mi_cmd_env_path): Likewise.
-	(mi_cmd_env_dir): Likewise.
-	(mi_cmd_inferior_tty_show): Likewise.
-	* mi/mi-cmd-disas.c (mi_cmd_disassemble): Fix error messages.
-	* mi/mi-cmd-break.c (mi_cmd_break_insert): Fix error messages.
-	(mi_cmd_break_watch): Likewise.
-
-2011-01-12  Thiago Jung Bauermann  <bauerman at br.ibm.com>
-
-	* ppc-linux-nat.c (booke_cmp_hw_point): Fix whitespace.
-	(ppc_linux_insert_hw_breakpoint): Likewise.
-	(ppc_linux_remove_hw_breakpoint): Likewise.
-	(ppc_linux_insert_watchpoint): Likewise.
-
-2011-01-12  Andrew Burgess  <aburgess at broadcom.com>
-	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* top.c (print_gdb_version): Update copyright year.
 
-	PR fortran/11104 and DWARF unbound arrays detection.
-	* dwarf2read.c (read_subrange_type): Set zero length on unspecified
-	upper bound.  Set TYPE_HIGH_BOUND_UNDEFINED if not language_ada on
-	unspecified upper bound.
-	* eval.c (evaluate_subexp_standard) <multi_f77_subscript>: Remove
-	variables array_size_array, tmp_type and offset_item.  New variable
-	array.  Remove call to f77_get_upperbound.  New variables array_type
-	and index.  Call value_subscripted_rvalue for each dimenasion.  Remove
-	the final call to deprecated_set_value_type.
-
-2011-01-12  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Make value allocations more lazy.
-	* ada-lang.c (coerce_unspec_val_to_type): Use allocate_value_lazy
-	instead of allocate_value and set_value_lazy when possible.
-	* dwarf2loc.c (dwarf2_evaluate_loc_desc_full): Use allocate_value_lazy
-	instead of allocate_value and set_value_lazy.
-	* findvar.c (value_of_register_lazy): Likewise.
-	(read_var_value): Remove V preallocation, call just check_typedef in
-	advance.  Move allocate_value to LOC_CONST, LOC_LABEL,
-	LOC_CONST_BYTES.  Use allocate_value_lazy in LOC_STATIC, LOC_ARG,
-	LOC_REF_ARG, LOC_LOCAL, LOC_BLOCK.  Set ADDR instead of
-	set_value_address and break in LOC_BLOCK.  Use allocate_value_lazy and
-	remove lval_memory set in LOC_REGPARM_ADDR.  Use allocate_value_lazy
-	in LOC_UNRESOLVED and LOC_OPTIMIZED_OUT.  Add setting lval_memory at
-	the end, remove set_value_lazy there.
-	* valarith.c (value_subscripted_rvalue): Use allocate_value_lazy
-	instead of allocate_value and set_value_lazy when possible.
-	* valops.c (value_fetch_lazy): Do nop for value_optimized_out VAL.
-	* value.c (allocate_computed_value): Use allocate_value_lazy instead
-	of allocate_value and set_value_lazy.
-	(value_from_contents_and_address): Use allocate_value_lazy instead of
-	allocate_value and set_value_lazy when possible.
-
-2011-01-12  Andrew Burgess  <aburgess at broadcom.com>
-
-	* disasm.c (dump_insns): Support dumping opcodes for MI.
-	* mi/mi-cmd-disas.c (mi_cmd_disassemble): Allow mode to control
-	dumping of instruction opcodes.
-
-2011-01-09  Robert Millan  <rmh at gnu.org>  (tiny patch)
-
-	* configure.tgt: Detect GNU/kFreeBSD and set `gdb_osabi'
-	appropiately.
-
-2011-01-11  Tom Tromey  <tromey at redhat.com>
-
-	* thread.c (do_captured_thread_select): Emit newline before
-	printing frame.
-
-2011-01-11  Michael Snyder  <msnyder at vmware.com>
-
-	* s390-tdep.c: Comment cleanup, mostly periods and spaces.
-	* score-tdep.c: Ditto.
-	* score-tdep.h: Ditto.
-	* ser-base.c: Ditto.
-	* ser-go32.c: Ditto.
-	* serial.c: Ditto.
-	* serial.h: Ditto.
-	* ser-mingw.c: Ditto.
-	* ser-pipe.c: Ditto.
-	* ser-tcp.c: Ditto.
-	* ser-unix.c: Ditto.
-	* sh64-tdep.c: Ditto.
-	* shnbsd-nat.c: Ditto.
-	* sh-tdep.c: Ditto.
-	* sh-tdep.h: Ditto.
-	* solib.c: Ditto.
-	* solib-darwin.c: Ditto.
-	* solib-frv.c: Ditto.
-	* solib.h: Ditto.
-	* solib-irix.c: Ditto.
-	* solib-osf.c: Ditto.
-	* solib-pa64.c: Ditto.
-	* solib-som.c: Ditto.
-	* solib-spu.c: Ditto.
-	* solib-sunos.c: Ditto.
-	* solib-svr4.c: Ditto.
-	* solist.h: Ditto.
-	* sol-thread.c: Ditto.
-	* somread.c: Ditto.
-	* source.c: Ditto.
-	* source.h: Ditto.
-	* sparc64-linux-tdep.c: Ditto.
-	* sparc64-tdep.c: Ditto.
-	* sparc-linux-nat.c: Ditto.
-	* sparc-linux-tdep.c: Ditto.
-	* sparc-sol2-nat.c: Ditto.
-	* sparc-sol2-tdep.c: Ditto.
-	* sparc-tdep.c: Ditto.
-	* sparc-tdep.h: Ditto.
-	* spu-tdep.c: Ditto.
-	* stabsread.c: Ditto.
-	* stabsread.h: Ditto.
-	* stack.c: Ditto.
-	* symfile.c: Ditto.
-	* symfile.h: Ditto.
-	* symmisc.c: Ditto.
-	* symtab.c: Ditto.
-	* symtab.h: Ditto.
-	* target.c: Ditto.
-	* target-descriptions.c: Ditto.
-	* target-descriptions.h: Ditto.
-	* target.h: Ditto.
-	* target-memory.c: Ditto.
-	* terminal.h: Ditto.
-	* thread.c: Ditto.
-	* top.c: Ditto.
-	* tracepoint.c: Ditto.
-	* tracepoint.h: Ditto.
-	* trad-frame.h: Ditto.
-	* typeprint.c: Ditto.
-
-2011-01-11  Michael Snyder  <msnyder at vmware.com>
-
-	* ui-file.c: Comment cleanup, mostly periods and spaces.
-	* ui-file.h: Ditto.
-	* ui-out.c: Ditto.
-	* ui-out.h: Ditto.
-	* utils.c: Ditto.
-	* v850-tdep.c: Ditto.
-	* valarith.c: Ditto.
-	* valops.c: Ditto.
-	* valprint.c: Ditto.
-	* valprint.h: Ditto.
-	* value.c: Ditto.
-	* value.h: Ditto.
-	* varobj.c: Ditto.
-	* varobj.h: Ditto.
-	* vax-tdep.c: Ditto.
-	* vec.c: Ditto.
-	* vec.h: Ditto.
-	* version.h: Ditto.
-	* windows-nat.c: Ditto.
-	* windows-tdep.c: Ditto.
-	* xcoffread.c: Ditto.
-	* xcoffsolib.c: Ditto.
-	* xml-support.c: Ditto.
-	* xstormy16-tdep.c: Ditto.
-	* xtensa-tdep.c: Ditto.
-	* xtensa-tdep.h: Ditto.
-
-2011-01-11  Thiago Jung Bauermann  <bauerman at br.ibm.com>
-
-	* breakpoint.c (resources_needed_watchpoint): Fix indentation.
-	* gdbtypes.c (is_scalar_type_recursive): Fix formatting.
-
-2011-01-11  Sergio Durigan Junior  <sergiodj at linux.vnet.ibm.com>
-	    Thiago Jung Bauermann  <bauerman at br.ibm.com>
+2012-01-02  Yao Qi  <yao at codesourcery.com>
 
-	Implement support for PowerPC BookE ranged watchpoints.
-	* breakpoint.h
-	(struct breakpoint_ops) <resources_needed>: New method.
-	Initialize to NULL in all existing breakpoint_ops instances.
-	(struct breakpoint) <exact>: New field.
-	(target_exact_watchpoints): Declare external global.
-	* breakpoint.c (target_exact_watchpoints): New global flag.
-	(update_watchpoint): Set b->type to bp_hardware_watchpoint and
-	b->enable_state to bp_enabled before calling
-	hw_watchpoint_used_count.
-	(hw_watchpoint_used_count): Iterate over all bp_locations in a
-	watchpoint.  Call breakpoint's breakpoint_ops.resources_needed
-	if available.
-	(insert_watchpoint, remove_watchpoint): Use fixed length of 1 byte
-	if the watchpoint is exact.
-	(resources_needed_watchpoint): New function.
-	(watchpoint_breakpoint_ops): Add resources_needed_watchpoint.
-	(watch_command_1): Set b->exact if the user asked for an exact
-	watchpoint and one can be set.
-	(can_use_hardware_watchpoint): Add exact_watchpoints argument.
-	Pass fixed length of 1 to target_region_ok_for_hw_watchpoint if
-	the user asks for an exact watchpoint and one can be set.  Return
-	number of needed debug registers to watch the expression.
-	* gdbtypes.c (is_scalar_type): New function, based on
-	valprint.c:scalar_type_p.
-	(is_scalar_type_recursive): New function.
-	* gdbtypes.h (is_scalar_type_recursive): Declare.
-	* ppc-linux-nat.c (ppc_linux_region_ok_for_hw_watchpoint): Always
-	handle regions when ranged watchpoints are available.
-	(create_watchpoint_request): New function.
-	(ppc_linux_insert_watchpoint, ppc_linux_remove_watchpoint): Use
-	create_watchpoint_request.
-	* rs6000-tdep.c (show_powerpc_exact_watchpoints): New function.
-	(_initialize_rs6000_tdep): Add `exact-watchpoints' boolean to the
-	`set powerpc' and `show powerpc' commands.
-	* target.h (struct target_ops) <to_region_ok_for_hw_watchpoint>:
-	Mention documentation comment in the target macro.
-	(target_region_ok_for_hw_watchpoint): Document return value.
-
-2011-01-11  Thiago Jung Bauermann  <bauerman at br.ibm.com>
-
-	* breakpoint.c (update_watchpoint): Decide on using a software or
-	hardware watchpoint after the bp_locations are created.
-
-2010-01-11  Thiago Jung Bauermann  <bauerman at br.ibm.com>
-
-	Convert hardware watchpoints to use breakpoint_ops.
-	* breakpoint.h (breakpoint_ops) <insert>: Rename to...
-	<insert_location>: ... this.  Return int instead of void.
-	Accept pointer to struct bp_location instead of pointer to
-	struct breakpoint.  Adapt all implementations.
-	(breakpoint_ops) <remove>: Rename to...
-	<remove_location>: ... this.  Accept pointer to struct bp_location
-	instead of pointer to struct breakpoint.  Adapt all implementations.
-	* breakpoint.c (insert_catchpoint): Delete function.
-	(insert_bp_location): Call the watchpoint or catchpoint's
-	breakpoint_ops.insert method.
-	(remove_breakpoint_1): Call the watchpoint or catchpoint's
-	breakpoint_ops.remove method.
-	(insert_watchpoint, remove_watchpoint): New functions.
-	(watchpoint_breakpoint_ops): New structure.
-	(watch_command_1): Initialize the OPS field.
-	* inf-child.c (inf_child_insert_fork_catchpoint)
-	(inf_child_remove_fork_catchpoint, inf_child_insert_vfork_catchpoint)
-	(inf_child_remove_vfork_catchpoint, inf_child_insert_exec_catchpoint)
-	(inf_child_remove_exec_catchpoint, inf_child_set_syscall_catchpoint):
-	Delete functions.
-	(inf_child_target): Remove initialization of to_insert_fork_catchpoint,
-	to_remove_fork_catchpoint, to_insert_vfork_catchpoint,
-	to_remove_vfork_catchpoint, to_insert_exec_catchpoint,
-	to_remove_exec_catchpoint and to_set_syscall_catchpoint.
-	* target.c (update_current_target): Change default implementation of
-	to_insert_fork_catchpoint, to_remove_fork_catchpoint,
-	to_insert_vfork_catchpoint, to_remove_vfork_catchpoint,
-	to_insert_exec_catchpoint, to_remove_exec_catchpoint and
-	to_set_syscall_catchpoint to return_one.
-	(debug_to_insert_fork_catchpoint, debug_to_insert_vfork_catchpoint)
-	(debug_to_insert_exec_catchpoint): Report return value.
-	* target.h (to_insert_fork_catchpoint, to_insert_vfork_catchpoint)
-	(to_insert_exec_catchpoint): Change declaration to return int instead
-	of void.
-
-2011-01-11  Michael Snyder  <msnyder at vmware.com>
-
-	* arm-tdep.c: Internationalization.
-	* c-lang.c: Ditto.
-	* charset.c: Ditto.
-	* fork-child.c: Ditto.
-	* nto-procfs.c: Ditto.
-	* ppc-sysv-tdep.c: Ditto.
-	* procfs.c: Ditto.
-	* remote-mips.c: Ditto.
-	* remote.c: Ditto.
-	* rs6000-nat.c: Ditto.
-	* rs6000-tdep.c: Ditto.
-	* target.c: Ditto.
-	* valops.c: Ditto.
-	* value.c: Ditto.
-	* xml-support.c: Ditto.
-	* mi/mi-cmd-break.c: Ditto.
-	* mi/mi-cmd-var.c: Ditto.
-	* mi/mi-interp.c: Ditto.
-	* mi/mi-main.c: Ditto.
+	* inf-ptrace.c (inf_ptrace_xfer_partial): Reindent.
 
-2011-01-11  Andrew Burgess  <aburgess at broadcom.com>
-
-	* remote-sim.c (gdbsim_store_register): Update API to
-	sim_store_register to check more error conditions.
-
-2011-01-10  Michael Snyder  <msnyder at vmware.com>
-
-	* nto-procfs.c: Comment cleanup, mostly periods and spaces.
-	* nto-tdep.c: Ditto.
-	* nto-tdep.h: Ditto.
-	* objc-exp.y: Ditto.
-	* objc-lang.c: Ditto.
-	* objfiles.c: Ditto.
-	* objfiles.h: Ditto.
-	* observer.c: Ditto.
-	* opencl-lang.c: Ditto.
-	* osabi.c: Ditto.
-	* parse.c: Ditto.
-	* parser-defs.h: Ditto.
-	* p-exp.y: Ditto.
-	* p-lang.c: Ditto.
-	* posix-hdep.c: Ditto.
-	* ppcbug-rom.c: Ditto.
-	* ppc-linux-nat.c: Ditto.
-	* ppc-linux-tdep.c: Ditto.
-	* ppc-linux-tdep.h: Ditto.
-	* ppcnbsd-tdep.c: Ditto.
-	* ppcobsd-tdep.c: Ditto.
-	* ppcobsd-tdep.h: Ditto.
-	* ppc-sysv-tdep.c: Ditto.
-	* ppc-tdep.h: Ditto.
-	* printcmd.c: Ditto.
-	* proc-abi.c: Ditto.
-	* proc-flags.c: Ditto.
-	* procfs.c: Ditto.
-	* proc-utils.h: Ditto.
-	* progspace.h: Ditto.
-	* prologue-value.c: Ditto.
-	* prologue-value.h: Ditto.
-	* psympriv.h: Ditto.
-	* psymtab.c: Ditto.
-	* p-typeprint.c: Ditto.
-	* p-valprint.c: Ditto.
-	* ravenscar-sparc-thread.c: Ditto.
-	* ravenscar-thread.c: Ditto.
-	* ravenscar-thread.h: Ditto.
-	* record.c: Ditto.
-	* regcache.c: Ditto.
-	* regcache.h: Ditto.
-	* remote.c: Ditto.
-	* remote-fileio.c: Ditto.
-	* remote-fileio.h: Ditto.
-	* remote.h: Ditto.
-	* remote-m32r-sdi.c: Ditto.
-	* remote-mips.c: Ditto.
-	* remote-sim.c: Ditto.
-	* rs6000-aix-tdep.c: Ditto.
-	* rs6000-nat.c: Ditto.
-	* rs6000-tdep.c: Ditto.
-
-2011-01-10  Michael Snyder  <msnyder at vmware.com>
-
-	* charset.c (validate): Internationalization.
-	* coffread.c (read_one_sym): Ditto.
-	* dwarf2read.c (dwarf2_attach_fields_to_type): Ditto.
-	* h8300-tdep.c (H8300_extract_return_value): Ditto.
-	* inflow.c (new_tty): Ditto.
-	* iq2000-tdep.c (iq2000_breakpoint_from_pc): Ditto.
-	* m32c-tdep.c (m32c_return_value): Ditto.
-	* mep-tdep.c (mep_store_return_value): Ditto.
-	* score-tdep.c (score7_fetch_insn): Ditto.
-	* ser-mingw.c (pipe_windows_open): Ditto.
-	* sh64-tdep.c (sh64_extract_return_value): Ditto.
-	* spu-tdep.c (spu_register_type): Ditto.
-	* tracepoint.c (trace_find_command): Ditto.
-	* valarith.c (value_pos): Ditto.
-
-2011-01-10  Joel Brobecker  <brobecker at adacore.com>
-
-	* ada-valprint.c (printstr): Minor comment reformatting.
-
-2011-01-08  Michael Snyder  <msnyder at vmware.com>
-
-	* m32r-rom.c (m32r_upload_command): Fix up ARI warnings for _
-	markup.
-
-2011-01-08  Michael Snyder  <msnyder at vmware.com>
-
-	* h8300-tdep.c: Comment cleanup, mostly periods and spaces.
-	* hppa-hpux-tdep.c: Ditto.
-	* hppa-linux-nat.c: Ditto.
-	* hppa-linux-tdep.c: Ditto.
-	* hppanbsd-tdep.c: Ditto.
-	* hppa-tdep.c: Ditto.
-	* hppa-tdep.h: Ditto.
-	* hpux-thread.c: Ditto.
-	* i386-cygwin-tdep.c: Ditto.
-	* i386-darwin-nat.c: Ditto.
-	* i386gnu-nat.c: Ditto.
-	* i386-linux-nat.c: Ditto.
-	* i386-linux-tdep.c: Ditto.
-	* i386-nat.c: Ditto.
-	* i386-nat.h: Ditto.
-	* i386nbsd-tdep.c: Ditto.
-	* i386-sol2-nat.c: Ditto.
-	* i386-stub.c: Ditto.
-	* i386-tdep.c: Ditto.
-	* i386-tdep.h: Ditto.
-	* i387-tdep.c: Ditto.
-	* ia64-linux-nat.c: Ditto.
-	* ia64-linux-tdep.c: Ditto.
-	* ia64-tdep.c: Ditto.
-	* infcall.c: Ditto.
-	* infcall.h: Ditto.
-	* infcmd.c: Ditto.
-	* inferior.c: Ditto.
-	* inferior.h: Ditto.
-	* infloop.c: Ditto.
-	* inflow.c: Ditto.
-	* infrun.c: Ditto.
-	* interps.c: Ditto.
-	* interps.h: Ditto.
-	* iq2000-tdep.c: Ditto.
-	* irix5-nat.c: Ditto.
-	* jit.c: Ditto.
-	* jit.h: Ditto.
-	* jv-exp.y: Ditto.
-	* jv-lang.c: Ditto.
-	* jv-lang.h: Ditto.
-	* jv-typeprint.c: Ditto.
-	* jv-valprint.c: Ditto.
-	* language.c: Ditto.
-	* language.h: Ditto.
-	* linespec.c: Ditto.
-	* linux-fork.c: Ditto.
-	* linux-nat.c: Ditto.
-	* linux-thread-db.c: Ditto.
-	* lm32-tdep.c: Ditto.
-
-2011-01-08  Michael Snyder  <msnyder at vmware.com>
-
-	* m2-exp.y: Comment cleanup, mostly periods and spaces.
-	* m2-lang.c: Ditto.
-	* m2-typeprint.c: Ditto.
-	* m2-valprint.c: Ditto.
-	* m32c-tdep.c: Ditto.
-	* m32r-linux-nat.c: Ditto.
-	* m32r-rom.c: Ditto.
-	* m32r-tdep.c: Ditto.
-	* m32r-tdep.h: Ditto.
-	* m68hc11-tdep.c: Ditto.
-	* m58klinux-nat.c: Ditto.
-	* m68k-tdep.c: Ditto.
-	* m88k-tdep.c: Ditto.
-	* m88k-tdep.h: Ditto.
-	* machoread.c: Ditto.
-	* macrocmd.c: Ditto.
-	* macroexp.c: Ditto.
-	* macrotab.c: Ditto.
-	* main.c: Ditto.
-	* maint.c: Ditto.
-	* mdebugread.c: Ditto.
-	* mdebugread.h: Ditto.
-	* memattr.c: Ditto.
-	* memattr.h: Ditto.
-	* memory-map.h: Ditto.
-	* mep-tdep.c: Ditto.
-	* microblaze-rom.c: Ditto.
-	* microblaze-tdep.c: Ditto.
-	* minsyms.c: Ditto.
-	* mips-irix-tdep.c: Ditto.
-	* mips-linux-nat.c: Ditto.
-	* mips-linux-tdep.c: Ditto.
-	* mips-linux-tdep.h: Ditto.
-	* mipsnbsd-nat.c: Ditto.
-	* mipsnbsd-tdep.c: Ditto.
-	* mipsread.c: Ditto.
-	* mips-tdep.c: Ditto.
-	* mips-tdep.h: Ditto.
-	* mn10300-linux-tdep.c: Ditto.
-	* mn10300-tdep.c: Ditto.
-	* mn10300-tdep.h: Ditto.
-	* monitor.c: Ditto.
-	* monitor.h: Ditto.
-	* moxie-tdep.c: Ditto.
-	* moxie-tdep.h: Ditto.
-	* mt-tdep.c: Ditto.
-
-2011-01-08  Mike Frysinger  <vapier at gentoo.org>
-
-	* bfin-tdep.h (BFIN_A0_DOT_W_REGNUM): Fix typo in name.
-
-2011-01-08  Robert Millan  <rmh at gnu.org>
-
-	* fbsd-nat.c (fbsd_find_memory_regions): Fix typo.
-
-2011-01-07  Michael Snyder  <msnyder at vmware.com>
-
-	* charset.c (_initialize_charset): Fix typo in string.
-
-2011-01-07  Michael Snyder  <msnyder at vmware.com>
-
-	* mi/mi-cmd-disas.c (mi_cmd_disassemble): Mark up error message
-	for i18n.
-	* tui/tui-layout.c (tui_set_layout_for_display_command):
-	Split line so that operator goes to beginning of line.
-	* tui/tui-winsource.c (tui_horizontal_source_scroll): Move
-	assignment out of if statement.
-
-2011-01-07  Michael Snyder  <msnyder at vmware.com>
-
-	* ada-lang.c: Comment cleanup, mostly periods and spaces.
-	* ada-lang.h: Ditto.
-	* ada-tasks.c: Ditto.
-	* ada-valprint.c: Ditto.
-	* aix-threads.c: Ditto.
-	* alpha-linux-nat.c: Ditto.
-	* alpha-linux-tdep.c: Ditto.
-	* alpha-mdebug-tdep.c: Ditto.
-	* alpha-nat.c: Ditto.
-	* alpha-osf1-tdep.c: Ditto.
-	* alpha-tdep.c: Ditto.
-	* alphabsd-nat.c: Ditto.
-	* alphabsd-tdep.c: Ditto.
-	* amd64-darwin-tdep.c: Ditto.
-	* amd64-linux-nat.c: Ditto.
-	* amd64-linux-tdep.c: Ditto.
-	* amd64-sol2-tdep.c: Ditto.
-	* amd64-tdep.c: Ditto.
-	* amd64-fbsd-tdep.c: Ditto.
-	* amd64-nbsd-tdep.c: Ditto.
-	* amd64-obsd-tdep.c: Ditto.
-	* amd64-linux-nat.c: Ditto.
-	* amd64-linux-tdep.c: Ditto.
-	* arm-tdep.c: Ditto.
-	* arm-tdep.h: Ditto.
-	* armnbsd-nat.c: Ditto.
-	* avr-tdep.c: Ditto.
-	* bfin-tdep.c: Ditto.
-	* bsd-kvm.c: Ditto.
-	* c-typeprintc: Ditto.
-	* c-valprint.c: Ditto.
-	* coff-pe-read.h: Ditto.
-	* coffreead.c: Ditto.
-	* cris-tdep.c: Ditto.
-	* d-lang.c: Ditto.
-	* darwin-nat-info.c: Ditto.
-	* darwin-nat.c: Ditto.
-	* dbug-rom.c: Ditto.
-	* dbxread.c: Ditto.
-	* dcache.c: Ditto.
-	* dcache.h: Ditto.
-	* dec-thread.c: Ditto.
-	* defs.h: Ditto.
-	* demangle.c: Ditto.
-	* dicos-tdep.c: Ditto.
-	* dictionary.c: Ditto.
-	* dictionary.h: Ditto.
-	* dink32-rom.c: Ditto.
-	* disasm.c: Ditto.
-	* doublest.c: Ditto.
-	* dsrec.c: Ditto.
-	* dummy-frame.c: Ditto.
-	* dwarf2-frame.c: Ditto.
-	* dwarf2expr.c: Ditto.
-	* dwarf2loc.c: Ditto.
-	* dwarf2read.c: Ditto.
-	* elfread.c: Ditto.
-	* environ.c: Ditto.
-	* eval.c: Ditto.
-	* event-top.h: Ditto.
-	* exceptions.c: Ditto.
-	* exceptions.h: Ditto.
-	* exec.c: Ditto.
-	* expprint.c: Ditto.
-	* expression.h: Ditto.
-	* f-exp.y: Ditto.
-	* f-lang.c: Ditto.
-	* f-lang.h: Ditto.
-	* f-typeprint.c: Ditto.
-	* f-valprint.c: Ditto.
-	* fbsd-nat.c: Ditto.
-	* findvar.c: Ditto.
-	* fork-child.c: Ditto.
-	* frame.c: Ditto.
-	* frame.h: Ditto.
-	* frv-linux-tdep.c: Ditto.
-	* frv-tdep.c: Ditto.
-	* gcore.c: Ditto.
-	* gdb-stabs.h: Ditto.
-	* gdb_assert.h: Ditto.
-	* gdb_string.h: Ditto.
-	* gdb_thread_db.h: Ditto.
-	* gdb_wait.h: Ditto.
-	* gdbarch.sh: Ditto.
-	* gdbcore.h: Ditto.
-	* gdbthread.h: Ditto.
-	* gdbtypes.c: Ditto.
-	* gdbtypes.h: Ditto.
-	* gnu-nat.c: Ditto.
-	* gnu-nat.h: Ditto.
-	* gnu-v2-abi.c: Ditto.
-	* gnu-v3-abi.c: Ditto.
-	* go32-nat.c: Ditto.
-	* gdbarch.c: Regenerate.
-	* gdbarch.h: Regenerate.
+2012-01-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	    Joel Brobecker  <brobecker at adacore.com>
 
-2011-01-07  Michael Snyder  <msnyder at vmware.com>
+	Fix regression for gdb.cp/gdb2495.exp with gcc-4.7.
+	* arch-utils.c (displaced_step_at_entry_point): Incrase BP_LEN skip to
+	3 times.
+	* infcall.c (call_function_by_hand) <AT_SYMBOL>: Move it upwards and
+	fall through into AT_ENTRY_POINT.
+	(call_function_by_hand) <AT_ENTRY_POINT>: New variable bp_len.  Adjust
+	DUMMY_ADDR with it.
+	* ppc-linux-tdep.c (ppc_linux_displaced_step_location): Increase
+	PPC_INSN_SIZE skip to 3 times.
 
-	* ax-gdb.c: Adjust some long output strings.
-	* breakpoint.c: Ditto.
-	* charset.c: Ditto.
-	* cp-abi.c: Ditto.
-	* infcall.c: Ditto.
-	* infrun.c: Ditto.
-	* linux-nat.c: Ditto.
-	* solib-pa64.c: Ditto.
-	* solib-som.c: Ditto.
+2012-01-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-01-06  Tom Tromey  <tromey at redhat.com>
+	* amd64-linux-nat.c (update_debug_registers_callback): New comment on
+	the return value.
+	* i386-linux-nat.c (update_debug_registers_callback): Likewise.
 
-	PR python/12367:
-	* NEWS: Add item.
-	* python/python.c (GdbMethods): Add "newest_frame" method.
-	* python/python-internal.h (gdbpy_newest_frame): Declare.
-	* python/py-frame.c (gdbpy_newest_frame): New function.
-
-2010-01-06  Paul Pluzhnikov  <ppluzhnikov at google.com>
-
-	* jit.h (struct jit_code_entry): use ULONGEST for symfile_size.
-	* jit.c (jit_debug): New variable.
-	(show_jit_debug): New function.
-	(struct target_buffer): Use ULONGEST.
-	(bfd_open_from_target_memory): Likewise.
-	(jit_register_code, jit_inferior_init): Add debug output.
-	(_initialize_jit): Register "debug jit" command.
-
-2011-01-06  Tom Tromey  <tromey at redhat.com>
-
-	* frame.h (enum frame_type) <INLINE_FRAME>: Fix comment.
-	* python/py-frame.c (gdbpy_initialize_frames): Add INLINE_FRAME
-	and ARCH_FRAME.
-
-2011-01-06  Tom Tromey  <tromey at redhat.com>
-
-	* python/py-frame.c (frapy_block): Use get_frame_block.
-
-2011-01-06  Joel Brobecker  <brobecker at adacore.com>
-
-	Do not stop on SIGPRIO signals by default
-	* infrun.c (_initialize_infrun): Unset signal_stop and
-	signal_print for TARGET_SIGNAL_PRIO.
-
-2011-01-06  Joel Brobecker  <brobecker at adacore.com>
-
-	* ada-tasks.c: Fix style violation in comment.
-
-2011-01-06  Joel Brobecker  <brobecker at adacore.com>
-
-	* linespec.c (decode_compound, find_method): Remove trailing \n
-	at end of error string.
-	* solib-irix.c (irix_current_sos): Likewise.
-	* varobj.c (uninstall_variable): Likewise.
-
-2011-01-06  Joel Brobecker  <brobecker at adacore.com>
-
-	* copyright.py: New script.
-	* copyright.sh (byhand): Add *.ads, *.adb, *.gpr and *.inc.
-	Launch emacs without exec'ing. Call copyright.py afterwards.
-
-2011-01-05  Michael Snyder  <msnyder at vmware.com>
-
-	* addrmap.c: Shorten lines of >= 80 columns.
-	* arch-utils.c: Ditto.
-	* arch-utils.h: Ditto.
-	* ax-gdb.c: Ditto.
-	* ax-general.c: Ditto.
-	* bcache.c: Ditto.
-	* blockframe.c: Ditto.
-	* breakpoint.c: Ditto.
-	* buildsym.c: Ditto.
-	* c-lang.c: Ditto.
-	* c-typeprint.c: Ditto.
-	* charset.c: Ditto.
-	* coffread.c: Ditto.
-	* command.h: Ditto.
-	* corelow.c: Ditto.
-	* cp-abi.c: Ditto.
-	* cp-namespace.c: Ditto.
-	* cp-support.c: Ditto.
-	* dbug-rom.c: Ditto.
-	* dbxread.c: Ditto.
-	* defs.h: Ditto.
-	* dfp.c: Ditto.
-	* dfp.h: Ditto.
-	* dictionary.c: Ditto.
-	* disasm.c: Ditto.
-	* doublest.c: Ditto.
-	* dwarf2-frame.c: Ditto.
-	* dwarf2expr.c: Ditto.
-	* dwarf2loc.c: Ditto.
-	* dwarf2read.c: Ditto.
-	* elfread.c: Ditto.
-	* eval.c: Ditto.
-	* event-loop.c: Ditto.
-	* event-loop.h: Ditto.
-	* exceptions.h: Ditto.
-	* exec.c: Ditto.
-	* expprint.c: Ditto.
-	* expression.h: Ditto.
-	* f-lang.c: Ditto.
-	* f-valprint.c: Ditto.
-	* findcmd.c: Ditto.
-	* frame-base.c: Ditto.
-	* frame-unwind.c: Ditto.
-	* frame-unwind.h: Ditto.
-	* frame.c: Ditto.
-	* frame.h: Ditto.
-	* gcore.c: Ditto.
-	* gdb-stabs.h: Ditto.
-	* gdb_assert.h: Ditto.
-	* gdb_dirent.h: Ditto.
-	* gdb_obstack.h: Ditto.
-	* gdbcore.h: Ditto.
-	* gdbtypes.c: Ditto.
-	* gdbtypes.h: Ditto.
-	* inf-ttrace.c: Ditto.
-	* infcall.c: Ditto.
-	* infcmd.c: Ditto.
-	* inflow.c: Ditto.
-	* infrun.c: Ditto.
-	* inline-frame.h: Ditto.
-	* language.c: Ditto.
-	* language.h: Ditto.
-	* libunwind-frame.c: Ditto.
-	* libunwind-frame.h: Ditto.
-	* linespec.c: Ditto.
-	* linux-nat.c: Ditto.
-	* linux-nat.h: Ditto.
-	* linux-thread-db.c: Ditto.
-	* machoread.c: Ditto.
-	* macroexp.c: Ditto.
-	* macrotab.c: Ditto.
-	* main.c: Ditto.
-	* maint.c: Ditto.
-	* mdebugread.c: Ditto.
-	* memattr.c: Ditto.
-	* minsyms.c: Ditto.
-	* monitor.c: Ditto.
-	* monitor.h: Ditto.
-	* objfiles.c: Ditto.
-	* objfiles.h: Ditto.
-	* osabi.c: Ditto.
-	* p-typeprint.c: Ditto.
-	* p-valprint.c: Ditto.
-	* parse.c: Ditto.
-	* printcmd.c: Ditto.
-	* proc-events.c: Ditto.
-	* procfs.c: Ditto.
-	* progspace.c: Ditto.
-	* progspace.h: Ditto.
-	* psympriv.h: Ditto.
-	* psymtab.c: Ditto.
-	* record.c: Ditto.
-	* regcache.c: Ditto.
-	* regcache.h: Ditto.
-	* remote-fileio.c: Ditto.
-	* remote.c: Ditto.
-	* ser-mingw.c: Ditto.
-	* ser-tcp.c: Ditto.
-	* ser-unix.c: Ditto.
-	* serial.c: Ditto.
-	* serial.h: Ditto.
-	* solib-frv.c: Ditto.
-	* solib-irix.c: Ditto.
-	* solib-osf.c: Ditto.
-	* solib-pa64.c: Ditto.
-	* solib-som.c: Ditto.
-	* solib-sunos.c: Ditto.
-	* solib-svr4.c: Ditto.
-	* solib-target.c: Ditto.
-	* solib.c: Ditto.
-	* somread.c: Ditto.
-	* source.c: Ditto.
-	* stabsread.c: Ditto.
-	* stabsread.c: Ditto.
-	* stack.c: Ditto.
-	* stack.h: Ditto.
-	* symfile-mem.c: Ditto.
-	* symfile.c: Ditto.
-	* symfile.h: Ditto.
-	* symmisc.c: Ditto.
-	* symtab.c: Ditto.
-	* symtab.h: Ditto.
-	* target-descriptions.c: Ditto.
-	* target-memory.c: Ditto.
-	* target.c: Ditto.
-	* target.h: Ditto.
-	* terminal.h: Ditto.
-	* thread.c: Ditto.
-	* top.c: Ditto.
-	* tracepoint.c: Ditto.
-	* tracepoint.h: Ditto.
-	* ui-file.c: Ditto.
-	* ui-file.h: Ditto.
-	* ui-out.h: Ditto.
-	* user-regs.c: Ditto.
-	* user-regs.h: Ditto.
-	* utils.c: Ditto.
-	* valarith.c: Ditto.
-	* valops.c: Ditto.
-	* valprint.c: Ditto.
-	* valprint.h: Ditto.
-	* value.c: Ditto.
-	* varobj.c: Ditto.
-	* varobj.h: Ditto.
-	* vec.h: Ditto.
-	* xcoffread.c: Ditto.
-	* xcoffsolib.c: Ditto.
-	* xcoffsolib.h: Ditto.
-	* xml-syscall.c: Ditto.
-	* xml-tdesc.c: Ditto.
-
-2011-01-05  Michael Snyder  <msnyder at vmware.com>
-
-	* cli/cli-cmds.c: Shorten lines of >= 80 columns.
-	* cli/cli-decode.c: Ditto.
-	* cli/cli-dump.c: Ditto.
-	* cli/cli-logging.c: Ditto.
-	* cli/cli-script.c: Ditto.
-	* cli/cli-setshow.c: Ditto.
-	* common/signals.c: Ditto.
-	* mi/mi-cmd-break.c: Ditto.
-	* mi/mi-cmd-disas.c: Ditto.
-	* mi/mi-cmd-stack.c: Ditto.
-	* mi/mi-cmd-var.c: Ditto.
-	* mi/mi-cmds.c: Ditto.
-	* mi/mi-common.h: Ditto.
-	* mi/mi-console.c: Ditto.
-	* mi/mi-interp.c: Ditto.
-	* mi/mi-main.c: Ditto.
-	* osf-share/cma_attr.c: Ditto.
-	* osf-share/cma_deb_core.h: Ditto.
-	* osf-share/cma_debug_client.h: Ditto.
-	* osf-share/cma_handle.h: Ditto.
-	* osf-share/cma_mutex.h: Ditto.
-	* osf-share/cma_stack_int.h: Ditto.
-	* osf-share/cma_tcb_defs.h: Ditto.
-	* python/py-auto-load.c: Ditto.
-	* python/py-breakpoint.c: Ditto.
-	* python/py-cmd.c: Ditto.
-	* python/py-frame.c: Ditto.
-	* python/py-objfile.c: Ditto.
-	* python/py-param.c: Ditto.
-	* python/py-progspace.c: Ditto.
-	* python/py-symbol.c: Ditto.
-	* python/py-value.c: Ditto.
-	* python/python-internal.h: Ditto.
-	* python/python.c: Ditto.
-	* tui/tui-data.c: Ditto.
-	* tui/tui-disasm.c: Ditto.
-	* tui/tui-hooks.c: Ditto.
-	* tui/tui-io.c: Ditto.
-	* tui/tui-layout.c: Ditto.
-	* tui/tui-regs.c: Ditto.
-	* tui/tui-source.c: Ditto.
-	* tui/tui-stack.c: Ditto.
-	* tui/tui-win.c: Ditto.
-	* tui/tui-windata.c: Ditto.
-	* tui/tui-winsource.c: Ditto.
-
-2011-01-05  Joel Brobecker  <brobecker at adacore.com>
-
-	* configure.ac, gdb.1: Copyright year update.
-
-2011-01-03  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* frame.c (get_prev_frame_1) <UNWIND_INNER_ID>: New variables
-	this_pc_in_block, morestack_msym and morestack_name.  Check for
-	"__morestack" minimal symbol there.
+2012-01-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-01-03  Joel Brobecker  <brobecker at adacore.com>
+	Build gdb directly from *.o files not using libgdb.a.
+	* Makefile.in (SUBDIR_TUI_OBS): Remove duplicate tui.o.
+	(COMMON_OBS): Remove solib-target.o.
+	(LIBGDB_OBS, libgdb.a): Move it before the gdb$(EXEEXT) rule.
+	(gdb$(EXEEXT)): Replace libgdb.a with $(LIBGDB_OBS).
+	(LIBGDB_OBS, libgdb.a): Move it above.
+	* configure.tgt (alpha*-*-linux*, alpha*-*-freebsd*)
+	(alpha*-*-kfreebsd*-gnu, alpha*-*-netbsd*, alpha*-*-knetbsd*-gnu)
+	(alpha*-*-openbsd*, am33_2.0*-*-linux*, arm*-wince-pe)
+	(arm*-*-mingw32ce*, arm*-*-linux*, arm*-*-netbsd*, arm*-*-knetbsd*-gnu)
+	(arm*-*-openbsd*, cris*, frv-*-*, hppa*-*-hpux*, hppa*-*-linux*)
+	(hppa*-*-netbsd*, hppa*-*-openbsd*, i[34567]86-*-darwin*)
+	(i[34567]86-*-dicos*, i[34567]86-*-freebsd*, i[34567]86-*-kfreebsd*-gnu)
+	(i[34567]86-*-netbsd*, i[34567]86-*-knetbsd*-gnu, i[34567]86-*-openbsd*)
+	(i[34567]86-*-nto*, i[34567]86-*-solaris2.1[0-9]*)
+	(x86_64-*-solaris2.1[0-9]*, i[34567]86-*-solaris*, i[34567]86-*-linux*)
+	(i[34567]86-*-gnu*, ia64-*-linux*, m32r*-*-linux*, m68*-*-linux*)
+	(m68*-*-netbsd*, m68*-*-knetbsd*-gnu, m68*-*-openbsd*)
+	(microblaze*-linux-*, microblaze*-*-linux*, mips*-sgi-irix5*)
+	(mips*-sgi-irix6*, mips*-*-linux*, mips*-*-netbsd*)
+	(mips*-*-knetbsd*-gnu, mips64*-*-openbsd*, powerpc-*-netbsd*)
+	(powerpc-*-knetbsd*-gnu, powerpc-*-openbsd*, powerpc-*-aix*, rs6000-*-*)
+	(powerpc-*-linux*, powerpc64-*-linux*, powerpc*-*-*, s390*-*-*)
+	(sh*-*-linux*, sh*-*-netbsdelf*, sh*-*-knetbsd*-gnu, sh*-*-openbsd*)
+	(sparc-*-linux*, sparc64-*-linux*, sparc*-*-freebsd*)
+	(sparc*-*-kfreebsd*-gnu, sparc-*-netbsd*, sparc-*-knetbsd*-gnu)
+	(sparc64-*-netbsd*, sparc64-*-knetbsd*-gnu, sparc-*-openbsd*)
+	(sparc64-*-openbsd*, sparc-*-solaris2.[0-6], sparc-*-solaris2.[0-6].*)
+	(sparc-*-solaris2*, sparcv9-*-solaris2*, sparc64-*-solaris2*)
+	(vax-*-netbsd*, vax-*-knetbsd*-gnu, x86_64-*-darwin*, x86_64-*-dicos*)
+	(x86_64-*-linux*, x86_64-*-freebsd*, x86_64-*-kfreebsd*-gnu)
+	(x86_64-*-netbsd*, x86_64-*-knetbsd*-gnu, x86_64-*-openbsd*)
+	(xtensa*-*-linux*, xtensa*): Remove solib.o from gdb_target_obs.
 
-	* symfile.c (find_sym_fns): Add call to dont_repeat.
+2012-01-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-2011-01-01  Joel Brobecker  <brobecker at adacore.com>
+	Remove the gdbtui binary.
+	* .gitignore (/gdbtui): Remove.
+	* Makefile.in (TUI): Remove.
+	(SUBDIR_TUI_OBS): Remove tui-main.o.
+	(SUBDIR_TUI_SRCS): Remove tui/tui-main.c.
+	(all-tui, install-tui, uninstall-tui, $(TUI)$(EXEEXT), clean-tui)
+	(tui-main.o): Remove.
+	(all_object_files): Remove tui-main.o.
+	* NEWS: New note for the gdbtui removal.
+	* configure: Rebuilt.
+	* configure.ac: No longer add all-tui, clean-tui, install-tui and
+	uninstall-tui to CONFIG_ALL, CONFIG_CLEAN, CONFIG_INSTALL and
+	CONFIG_UNINSTALL respectively.
+	* gdb.c (main): Remove args.interpreter_p initialization.
+	* main.c (captured_main): Set INTERPRETER_P directly by INTERP_CONSOLE.
+	* main.h (struct captured_main_args): Remove interpreter_p.
+	* tui/tui-main.c: Remove.
+
+2012-01-01  Doug Evans  <dje at google.com>
+
+	* dwarf2read.c (dwarf2_compute_name): Simplify objfile references.
+	(dwarf2_physname, read_import_statement): Ditto.
+	(read_call_site_scope, dwarf2_record_block_ranges): Ditto.
+	(process_structure_scope read_subroutine_type): Ditto.
+	(read_typedef, load_partial_dies, read_partial_die): Ditto.
+	(find_partial_die, dwarf_decode_lines, lookup_die_type): Ditto.
+	(dwarf2_fetch_die_location_block): Ditto.
+	(dwarf_decode_macros, dwarf2_symbol_mark_computed): Ditto.
+
+	* dwarf2read.c (read_signatured_type): Delete `objfile' arg.
+	All callers updated.
+	(load_full_comp_unit, queue_comp_unit, process_queue): Ditto.
+	(dw2_do_instantiate_symtab, dw2_instantiate_symtab): Ditto.
+	(process_psymtab_comp_unit, load_partial_comp_unit): Ditto.
 
-	Copyright year update in most files (performed by copyright.sh).
+	* dwarf2read.c (load_cu): Move assert to more useful location.
 
-2011-01-01  Joel Brobecker  <brobecker at adacore.com>
+	* dwarf2read.c (free_heap_comp_unit): Renamed from free_one_comp_unit.
+	All callers updated.
 
-	* top.c (print_gdb_version): Update copyright year in version output.
+	* dwarf2read.c (dwarf2_per_objfile): Add comment.
+	(dwarf2_elf_names): Minor reformat.
+	(dwarf2_per_cu_data): Tweak comment.
+	(dwarf2_read_section): Fix comment.
+	(create_all_comp_units): Fix comment.
+	(load_full_comp_unit): Fix comment.
+	(process_full_comp_unit): Fix comment.
+	(read_signatured_type): Fix comment.
 
-For older changes see ChangeLog-2010.
+For older changes see ChangeLog-2011.
 

 Local Variables:
 mode: change-log
diff --git a/gdb/ChangeLog-2011 b/gdb/ChangeLog-2011
new file mode 100644
index 0000000..5ef00d9
--- /dev/null
+++ b/gdb/ChangeLog-2011
@@ -0,0 +1,12658 @@
+2011-12-30  Doug Evans  <dje at google.com>
+
+	* dwarf2read.c (read_typedef): Guard against self-referential typedefs.
+
+2011-12-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdbarch.sh (max_insn_length): Extend the comment by unit.
+	* gdbarch.h: Regenerate.
+
+2011-12-28  Joel Brobecker  <brobecker at adacore.com>
+
+	* varobj.c (varobj_update): Minor reformatting, putting the function
+	name at the start of the next line.
+
+2011-12-27  Doug Evans  <dje at google.com>
+
+	* dwarf2read.c (struct dwarf2_cu): Delete members first_fn, last_fn,
+	cached_fn.
+	(struct function_range): Delete.
+	(initialize_cu_func_list, add_to_cu_func_list): Delete.  All callers
+	updated.
+	(check_cu_functions): Ditto.
+
+2011-12-27  Mark Kettenis  <kettenis at gnu.org>
+
+	* inf-ptrace.c [PT_IO && PIOD_READ_AUXV]
+	(inf_ptrace_xfer_partial): Implement TARGET_OBJECT_AUXV.
+	(inf_ptrace_auxv_parse): New function.
+	(inf_ptrace_target): Initialize to_auxv_parse field.
+
+2011-12-27  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-lang.c (should_use_wild_match): New function.
+	(ada_lookup_simple_minsym): Use should_use_wild_match.
+	Minor simplification.  Add comment.
+	(ada_lookup_symbol_list): Use should_use_wild_match.
+	Minor simplification.
+
+2011-12-27  Joel Brobecker  <brobecker at adacore.com>
+
+	* py-finishbreakpoint.c (bpfinishpy_init): Replace call to
+	sprintf by call to xsnprintf.
+
+2011-12-27  Joel Brobecker  <brobecker at adacore.com>
+
+	* linespec.c (struct collect_minsyms) [list_mode]: New field.
+	(add_minsym): Ignore data symbols if not in list mode.
+	(search_minsyms_for_name): Set local.list_mode.
+
+2011-12-27  Joel Brobecker  <brobecker at adacore.com>
+
+	* utils.c (gdb_realpath): Add better support for Windows hosts.
+
+2011-12-23  Kevin Pouget  <kevin.pouget at st.com>
+
+	Introduce gdb.FinishBreakpoint in Python.
+	* NEWS: Add entry for FinishBreakpoint.
+	* Makefile.in (SUBDIR_PYTHON_OBS): Add py-finishbreakpoint.o.
+	(SUBDIR_PYTHON_SRCS): Add python/py-finishbreakpoint.c.
+	Add build rule for this file.
+	* infcmd.c (print_return_value): Split to create get_return_value.
+	(get_return_value): New function based on print_return_value. Handle
+	case where stop_registers are not set.
+	* inferior.h (get_return_value): New prototype.
+	* python/py-breakpoint.c (bppy_pending_object): Make non-static.
+	(gdbpy_breakpoint_created): Set is_py_finish_bp is necessary.
+	(struct breakpoint_object): Move to python-internal.h
+	(BPPY_REQUIRE_VALID): Likewise.
+	(BPPY_SET_REQUIRE_VALID): Likewise.
+	(gdbpy_breakpoint_created): Initialize is_finish_bp.
+	(gdbpy_should_stop): Add  pre/post hooks before/after calling stop
+	method.
+	* python/python-internal.h (breakpoint_object_type): Add as extern.
+	(bppy_pending_object): Likewise.
+	(typedef struct breakpoint_object) Removed.
+	(struct breakpoint_object): Moved from py-breakpoint.c.
+	Add field is_finish_bp.
+	(BPPY_REQUIRE_VALID): Moved from py-breakpoint.c.
+	(BPPY_SET_REQUIRE_VALID): Likewise.
+	(frame_object_to_frame_info): New prototype.
+	(gdbpy_initialize_finishbreakpoints): New prototype.
+	(bpfinishpy_is_finish_bp): Likewise.
+	(bpfinishpy_pre_stop_hook): Likewise.
+	(bpfinishpy_post_stop_hook): Likewise.
+	* python/py-finishbreakpoint.c: New file.
+	* python/py-frame.c(frame_object_to_frame_info): Make non-static and
+	accept PyObject instead of frame_object.
+	(frapy_is_valid): Don't cast to frame_object.
+	(frapy_name): Likewise.
+	(frapy_type): Likewise.
+	(frapy_unwind_stop_reason): Likewise.
+	(frapy_pc): Likewise.
+	(frapy_block): Likewise.
+	(frapy_function): Likewise.
+	(frapy_older): Likewise.
+	(frapy_newer): Likewise.
+	(frapy_find_sal): Likewise.
+	(frapy_read_var): Likewise.
+	(frapy_select): Likewise.
+	* python/python.c (gdbpy_is_stopped_at_finish_bp): New noop function.
+	(_initialize_python): Add gdbpy_initialize_finishbreakpoints.
+	* python/python.h: Include breakpoint.h
+	(gdbpy_is_stopped_at_finish_bp): New prototype.
+
+2011-12-22  Tom Tromey  <tromey at redhat.com>
+
+	PR python/12533:
+	* value.h (release_value_or_incref): Declare.
+	* value.c (struct value) <released>: New field.
+	(free_all_values, release_value, value_release_to_mark): Update
+	'released'.
+	(release_value_or_incref): New function.
+	* python/py-value.c (valpy_new): Use release_value_or_incref.
+	(value_to_value_object): Likewise.
+	* varobj.c (install_new_value): Move value_incref earlier.
+
+2011-12-22  Tom Tromey  <tromey at redhat.com>
+
+	* value.c (struct value) <modifiable, lazy, optimized_out,
+	initialized, stack>: Now bitfields.  Move to top.
+	<reference_count>: Move earlier.
+
+2011-12-21  Tom Tromey  <tromey at redhat.com>
+
+	* minsyms.h: Rearrange.  Document header and all functions.
+	* minsyms.c: Move some comments to minsyms.h.
+
+2011-12-21  Tom Tromey  <tromey at redhat.com>
+
+	* symtab.h: Include minsyms.h.
+	(prim_record_minimal_symbol, prim_record_minimal_symbol_full)
+	(prim_record_minimal_symbol_and_info, msymbol_hash_iw)
+	(msymbol_hash, SYMBOL_HASH_NEXT, msymbol_objfile)
+	(lookup_minimal_symbol, lookup_minimal_symbol_text)
+	(lookup_minimal_symbol_solib_trampoline)
+	(lookup_minimal_symbol_by_pc_name, lookup_minimal_symbol_by_pc)
+	(iterate_over_minimal_symbols, lookup_minimal_symbol_and_objfile)
+	(lookup_minimal_symbol_by_pc_section)
+	(lookup_solib_trampoline_symbol_by_pc)
+	(init_minimal_symbol_collection)
+	(make_cleanup_discard_minimal_symbols, install_minimal_symbols)
+	(msymbols_sort): Move to minsyms.h.
+	* objfiles.c (terminate_minimal_symbol_table): Move to minsyms.c.
+	* minsyms.c (terminate_minimal_symbol_table): Move from
+	objfiles.c.
+	* minsyms.h: New file.
+
+2011-12-21  Tom Tromey  <tromey at redhat.com>
+
+	* hppa-hpux-tdep.c (hppa64_hpux_search_dummy_call_sequence): Use
+	ALL_OBJFILE_MSYMBOLS.
+	(hppa_hpux_find_dummy_bpaddr): Likewise.
+	* jit.c (jit_object_close_impl): Use
+	terminate_minimal_symbol_table.
+
+2011-12-21  Tom Tromey  <tromey at redhat.com>
+
+	* elfread.c (elf_symtab_read): Put the filename in the filename
+	bcache.
+
+2011-12-21  Tom Tromey  <tromey at redhat.com>
+
+	* symtab.h (struct minimal_symbol) <filename>: Now const.
+
+2011-12-21  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	PR tdep/12797
+	* arm-tdep.c (arm_return_value): Handle complex types.
+
+2011-12-21  Andreas Schwab  <schwab at linux-m68k.org>
+
+	* ppc-linux-nat.c (create_watchpoint_request): Only use ranged
+	watchpoints when supported.
+
+2011-12-21  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* symfile.c (objfilep): New typedef and new DEF_VEC_P.
+	(reread_symbols): Remove variable reread_one, new variables
+	new_objfiles, all_cleanups and ix.  Use new_objfiles instead of
+	reread_one.  Push changed objfiles to new_objfiles, call
+	observer_notify_new_objfile for them later.
+
+2011-12-21  Joel Brobecker  <brobecker at adacore.com>
+
+	* psymtab.c (expand_symtabs_matching_via_partial): Match
+	the partial symbols using their SYMBOL_SEARCH_NAME.
+	* symfile.h (struct quick_symbol_functions): Udate the
+	documentation of expand_symtabs_matching.
+	* dwarf2read.c (write_psymbols): Use SYMBOL_SEARCH_NAME instead
+	of SYMBOL_NATURAL_NAME in index entry.
+
+2011-12-21  Joel Brobecker  <brobecker at adacore.com>
+
+	* linespec.c (locate_first_half): Add handling of Ada operators
+	when the current language is Ada.
+
+2011-12-21  Joel Brobecker  <brobecker at adacore.com>
+
+	* objfiles.c (insert_section_p): Do not detect overlay sections
+	if overlay debugging is off.
+
+2011-12-21  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-lang.c (is_name_suffix): Add handling of "TKB" suffixes.
+	Update function documentation.
+	* dictionary.c (dict_hash): Ignore "TKB" suffixes in hash
+	computation.
+
+2011-12-20  Pedro Alves  <alves.ped at gmail.com>
+	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+        * linux-nat.c (add_lwp): Don't call linux_nat_new_thread on the
+	first LWP.
+	* amd64-linux-nat.c (update_debug_registers_callback): Instantiate
+	`lwp->arch_private' if NULL.
+	(amd64_linux_prepare_to_resume): Do nothing if `lwp->arch_private'
+	is NULL.
+	* i386-linux-nat.c (update_debug_registers_callback): Instantiate
+	`lwp->arch_private' if NULL.
+	(i386_linux_prepare_to_resume): Do nothing if `lwp->arch_private'
+	is NULL.
+
+2011-12-19  Doug Evans  <dje at google.com>
+
+	* python/py-auto-load.c (info_auto_load_scripts): Pass address of
+	scripts vector to collect_matching_scripts.
+	(collect_matching_scripts): Update.
+
+2011-12-19  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* symfile.c (reread_symbols): Move free_objfile_separate_debug,
+	preserve_values, sym_finish and clear_objfile_data calls before BFD
+	close.  Move free_objfile_separate_debug as the very first call.  New
+	comment on the ordering.
+
+2011-12-19  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* s390-tdep.c (s390_push_dummy_call): Set addressing mode bit
+	in return PSWA.
+
+2011-12-19  Tom Tromey  <tromey at redhat.com>
+
+	* symtab.h (add_minsym_to_hash_table): Don't declare.
+	* minsyms.c (add_minsym_to_hash_table): Now static.
+
+2011-12-19  Joel Brobecker  <brobecker at adacore.com>
+
+	* elfread.c (elf_symtab_read): Ignore undefined symbols with
+	nonzero addresses if they do not correspond to a .plt section
+	when one is available in the objfile.
+
+2011-12-17  Andreas Schwab  <schwab at linux-m68k.org>
+
+	* cp-name-parser.y (cp_merge_demangle_parse_infos): Don't use
+	obstack_empty_p.
+
+2011-12-17  Mark Kettenis  <kettenis at gnu.org>
+
+	* amd64obsd-tdep.c (amd64obsd_init_abi): Don't set
+	regset_from_core_section.
+	(amd64obsd_core_init_abi): New function that sets
+	regset_from_core_section.
+	(_initialize_amd64obsd_tdep): Use amd64obsd_core_init_abi for
+	traditional core dumps.
+
+2011-12-17  Mark Kettenis  <kettenis at gnu.org>
+
+	* amd64obsd-tdep.c (amd64obsd_sigtramp_p): Detect new signal
+	trampoline to be introduced in OpenBSD 5.0.
+
+2011-12-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix build regression from the PR threads/10729 fix.
+	* s390-nat.c (s390_insert_watchpoint, s390_remove_watchpoint): Use LP,
+	not LP->PTID.
+
+2011-12-16  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* mi/mi-main.c (mi_cmd_list_thread_groups): Rename `optind' and
+	`optarg' to `oind' and `oarg', respectively(-Wshadow).
+	(mi_cmd_data_read_memory): Ditto.
+	(mi_cmd_data_read_memory_bytes): Ditto.
+	(mi_cmd_data_write_memory): Ditto.
+
+2011-12-16  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* mi/mi-getopt.c (mi_getopt): Rename `optind' and `optarg' to
+	`oind' and `oarg', respectively(-Wshadow).
+	(mi_valid_noargs): Ditto.
+
+2011-12-16  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* mi/mi-cmd-var.c (print_varobj): Rename `optind' and `optarg' to
+	`oind' and `oarg', respectively(-Wshadow).
+
+2011-12-16  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* mi/mi-cmd-target.c (mi_cmd_target_file_get): Rename `optind' and
+	`optarg' to `oind' and `oarg', respectively(-Wshadow).
+	(mi_cmd_target_file_put): Ditto.
+	(mi_cmd_target_file_delete): Ditto.
+
+2011-12-16  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* mi/mi-cmd-env.c (mi_cmd_env_path): Rename `optind' and
+	`optarg' to `oind' and `oarg', respectively(-Wshadow).
+	(mi_cmd_env_dir): Ditto.
+
+2011-12-16  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* mi/mi-cmd-disas.c (mi_cmd_disassemble): Rename `optind' and
+	`optarg' to `oind' and `oarg', respectively(-Wshadow).
+
+2011-12-16  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* mi/mi-cmd-break.c (mi_cmd_break_insert): Rename `optind' and
+	`optparg' to `oind' and `oarg', respectively(-Wshadow).
+	(mi_cmd_break_watch): Ditto.
+
+2011-12-16  Tom Tromey  <tromey at redhat.com>
+
+	* linespec.c (collect_symbols): Call maybe_add_address after
+	calling symbol_to_sal.
+	(minsym_found): Call maybe_add_address here.
+	(search_minsyms_for_name): Don't call maybe_add_address.
+
+2011-12-16  Tom Tromey  <tromey at redhat.com>
+
+	* linespec.c (struct collect_info) <objfile>: Remove field.
+	(decode_objc): Update.
+	(find_method): Update.
+	(decode_variable): Update.
+	(struct minsym_and_objfile): New.
+	(struct collect_minsyms): New.
+	(classify_mtype): New function.
+	(compare_msyms): Likewise.
+	(add_minsym): Likewise.
+	(check_minsym): Remove.
+	(search_minsyms_for_name): Sort minsyms and apply only those with
+	top priority.
+
+2011-12-16  Tom Tromey  <tromey at redhat.com>
+
+	* cli/cli-cmds.c (filter_sals): Filter out sals with NULL symtab.
+
+2011-12-16  Pedro Alves  <pedro at codesourcery.com>
+
+	* inf-loop.c: Include top.h.
+	(inferior_event_handler): Call check_frame_language.
+	* top.c (check_frame_language_change): New, factored out from ...
+	(execute_command): ... this.  Use check_frame_language_change.
+	* top.h (check_frame_language_change): Declare.
+
+2011-12-16  asmwarrior  <asmwarrior at gmail.com>	(obvious fix)
+
+	* windows-nat.c (cygwin_get_dr, cygwin_get_dr7): Add missing
+	prototypes.
+
+2011-12-16  Doug Evans  <dje at google.com>
+
+	* NEWS: Add entry for stdio gdbserver.
+
+2011-12-16  Phil Muldoon  <pmuldoon at redhat.com>
+
+	* python/python.c: Define python_excp_enums.
+	(eval_python_from_control_command): Do not call gdbpy_print_stack.
+	(python_command): Ditto.
+	(gdbpy_print_stack): Rewrite to use new enum constants.
+	(maint_set_python): Remove function.
+	(maint_show_python): Ditto.
+	(_initialize_python): Do not add "maint" commands.  Add "set/show
+	python print-stack commands".
+	* NEWS: Update to reflect removal for "maint set/show
+	print-stack"
+
+2011-12-15  Doug Evans  <dje at google.com>
+
+	* exceptions.c (catcher_list_size): New function.
+	(last_message): Delete.
+	(exception_messages, exception_messages_size): New static globals.
+	(throw_it): Use exception_messages array to handle nested calls.
+
+2011-12-15  Tom Tromey  <tromey at redhat.com>
+
+	* symfile.c (symbol_file_add_with_addrs_or_offsets): Remove bad
+	do_cleanups call.
+
+2011-12-14  Doug Evans  <dje at google.com>
+
+	* defs.h (wait_to_die_with_timeout): Declare.
+	* utils.c: #include "gdb_wait.h".
+	(sigalrm_handler, wait_to_die_with_timeout): New functions.
+	* ser-pipe.c: Don't #include "gdb_wait.h".
+	(pipe_close): Give child a chance to die on its own after closing
+	its stdin before SIGTERM'ing it.
+
+2011-12-14  Joel Brobecker  <brobecker at adacore.com>
+	    Tom Tromey  <tromey at redhat.com>
+
+	* ada-lang.c (add_nonlocal_symbols): Initialize data to
+	all zeros.  Remove setting of data.arg_sym to NULL.
+
+2011-12-14  Pedro Alves  <pedro at codesourcery.com>
+
+	PR threads/10729
+
+	* linux-nat.c (linux_nat_new_thread): Change parameter to an lwp
+	pointer.
+	(linux_nat_prepare_to_resume): New global.
+	(lwp_free): New.
+	(purge_lwp_list): Use it.
+	(add_lwp): Call linux_nat_new_thread even on the first LWP.
+	Adjust to interface change.
+	(delete_lwp): Call lwp_free instead of xfree.
+	(detach_callback, linux_nat_detach, resume_lwp, linux_nat_resume)
+	(linux_handle_syscall_trap, linux_handle_extended_wait)
+	(linux_nat_filter_event, resume_stopped_resumed_lwps): Call
+	linux_nat_prepare_to_resume before resuming.
+	(linux_stop_lwp): New.
+	(linux_nat_set_new_thread): Adjust.
+	(linux_nat_set_prepare_to_resume): New.
+	* linux-nat.h (struct arch_lwp_info): Forward declare.
+	(struct lwp_info) <arch_private>: New field.
+	(linux_stop_lwp): Declare.
+	(linux_nat_set_new_thread): Adjust.
+	(linux_nat_set_prepare_to_resume): New.
+
+	* i386-nat.c (DR_NADDR, DR_STATUS, DR_CONTROL)
+	(struct i386_debug_reg_state): Move to i386-nat.h.
+	(dr_mirror): Comment.
+	(i386_debug_reg_state): New.
+	(i386_update_inferior_debug_regs): Simplify.
+	(i386_stopped_data_address): Use the debug register state from the
+	inferior, not from the local cache.
+	* i386-nat.h (struct i386_dr_low_type): Delete reset_addr and
+	unset_status fields.  New get_addr and get_control fields.
+	(DR_FIRSTADDR, DR_LASTADDR, DR_CONTROL): Moved from i386-nat.c.
+	(DR_NADDR, DR_STATUS): New.
+	(struct i386_debug_reg_state): Moved from i386-nat.c.
+
+	* amd64-linux-nat.c (struct arch_lwp_info): New.
+	(amd64_linux_dr): Delete global.
+	(amd64_linux_dr_get_addr): New.
+	(amd64_linux_dr_get_control): New.
+	(amd64_linux_dr_unset_status): Delete.
+	(amd64_linux_dr_set_addr): Reimplement.
+	(amd64_linux_dr_reset_addr): Delete.
+	(update_debug_registers_callback): New.
+	(amd64_linux_dr_set_control): Reimplement.
+	(amd64_linux_dr_set_addr): Reimplement.
+	(amd64_linux_prepare_to_resume): New.
+	(amd64_linux_new_thread): Change parameter to an lwp pointer.
+	Reimplement.
+	(_initialize_amd64_linux_nat): No longer install
+	i386_dr_low.reset_addr and i386_dr_low.unset_status.  Install
+	amd64_linux_dr_get_control as i386_dr_low.get_control.  Install
+	amd64_linux_dr_get_addr as i386_dr_low.get_addr.  Install
+	amd64_linux_prepare_to_resume.
+	* i386-linux-nat.c (DR_FIRSTADDR, DR_LASTADDR, DR_STATUS)
+	(DR_CONTROL): Delete.
+	(struct arch_lwp_info): New.
+	(i386_linux_dr): Delete global.
+	(i386_linux_dr_set_control): Reimplement.
+	(i386_linux_dr_get_addr): New.
+	(i386_linux_dr_set_addr): Reimplement.
+	(i386_linux_dr_get_control): New.
+	(update_debug_registers_callback): New.
+	(i386_linux_dr_unset_status): Delete.
+	(i386_linux_dr_set_addr): Reimplement.
+	(i386_linux_prepare_to_resume): New.
+	(i386_linux_new_thread): Change parameter to an lwp pointer.
+	Reimplement.
+	(_initialize_i386_linux_nat): No longer install
+	i386_dr_low.reset_addr and i386_dr_low.unset_status.  Install
+	i386_linux_dr_get_control as i386_dr_low.get_control.  Install
+	i386_linux_dr_get_addr as i386_dr_low.get_addr.  Install
+	i386_linux_prepare_to_resume.
+
+	* arm-linux-nat.c (arm_linux_new_thread): Change parameter to an
+	lwp pointer.  Adjust.
+	* ia64-linux-nat.c (ia64_linux_new_thread): Likewise.
+	* mips-linux-nat.c (mips_linux_new_thread): Likewise.
+	* ppc-linux-nat.c (ppc_linux_new_thread): Likewise.
+	* s390-nat.c (s390_fix_watch_points): Likewise.
+
+	* i386-darwin-nat.c (DR_FIRSTADDR, DR_LASTADDR, DR_STATUS)
+	(DR_CONTROL): Delete.
+	(i386_darwin_dr_reset_addr): Delete.
+	(i386_darwin_dr_get_addr): New.
+	(i386_darwin_dr_get_control): New.
+	* go32-nat.c
+	(go32_get_dr7, go32_get_dr): New.
+	(init_go32_ops): No longer install i386_dr_low.reset_addr.
+	Install go32_get_dr7 as i386_dr_low.get_control.  Install
+	go32_get_dr as i386_dr_low.get_addr.
+	* i386bsd-nat.c (i386bsd_dr_get): New.
+	(i386bsd_dr_reset_addr): Delete.
+	(i386bsd_dr_get_addr): New.
+	(i386bsd_dr_get_status): Use i386bsd_dr_get.
+	(i386bsd_dr_get_control): New.
+	* i386bsd-nat.h (i386bsd_dr_reset_addr): Delete.
+	(i386bsd_dr_get_addr): New.
+	(i386bsd_dr_get_control): New.
+	* i386fbsd-nat.c (_initialize_i386fbsd_nat): No longer install
+	i386_dr_low.reset_addr and i386_dr_low.unset_status.  Install
+	i386bsd_dr_get_control as i386_dr_low.get_control.  Install
+	i386bsd_dr_get_addr as i386_dr_low.get_addr.
+	* windows-nat.c (init_windows_ops): No longer install
+	i386_dr_low.reset_addr and i386_dr_low.unset_status.  Install
+	cygwin_get_dr7 as i386_dr_low.get_control.  Install cygwin_get_dr
+	as i386_dr_low.get_addr.
+	(cygwin_get_dr): New.
+	(cygwin_get_dr7): New.
+
+2011-12-14  Pedro Alves  <pedro at codesourcery.com>
+
+	* ia64-tdep.c (ia64_memory_remove_breakpoint): Use
+	target_write_raw_memory.
+	* m32r-tdep.c (m32r_memory_remove_breakpoint): Use
+	target_write_raw_memory.
+	* microblaze-linux-tdep.c
+	(microblaze_linux_memory_remove_breakpoint): Use
+	target_write_raw_memory.
+	* ppc-linux-tdep.c (ppc_linux_memory_remove_breakpoint): Use
+	target_write_raw_memory.
+
+2011-12-14  Joel Brobecker  <brobecker at adacore.com>
+
+	* linespec.c (decode_line_internal): Make static.
+
+2011-12-14  Yao Qi  <yao at codesourcery.com>
+
+	* breakpoint.c (create_breakpoint): Set canonical.addr_string
+	for static tracepoint.
+
+2011-12-13  Joel Brobecker  <brobecker at adacore.com>
+
+	GDB 7.4 branch created (branch timestamp: 2011-12-13 13:00 UTC)
+	* version.in: Bump version to 7.4.50.20111213-cvs.
+
+2011-12-13  Joel Brobecker  <brobecker at adacore.com>
+
+	* NEWS: Create a new section for the next release branch.
+	Rename the section of the current branch, now that it has
+	been cut.
+
+2011-12-11  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-lang.c (ada_exception_support_info_sniffer): Improve
+	error message.
+
+2011-12-11  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-lang.c (struct ada_inferior_data) [exception_info]:
+	New field.
+	(exception_info): Delete.
+	(ada_exception_support_info_sniffer): Get exception_support_info
+	data from our per-inferior data.  Adjust code accordingly.
+	(ada_unhandled_exception_name_addr_from_raise): Likewise.
+	(ada_exception_name_addr_1, ada_exception_sym_name): Ditto.
+	(ada_executable_changed_observer): Delete.
+	(_initialize_ada_language): Remove call to
+	observer_attach_executable_changed.
+
+2011-12-11  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-lang.c (ada_has_this_exception_support): Raise an error
+	if we could find the Ada exception hook in the Ada runtime,
+	but no debugging info for that hook.
+
+2011-12-11  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-lang.c (ada_has_this_exception_support): New function,
+	extracted out of ada_exception_sal and ada_exception_sal.
+	(ada_exception_support_info_sniffer): Simplify by using
+	ada_has_this_exception_support.
+	(ada_exception_sal): Replace unnecessary checks by assertions.
+	Minor simplifications.
+
+2011-12-10  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* breakpoint.c (update_global_location_list): Remove nested
+	definition of `b'(-Wshadow).
+
+2011-12-10  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* breakpoint.c (insert_breakpoint_locations): Rename `error' to
+	`error_flag'(-Wshadow).
+
+2011-12-10  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* bfd-target.c (target_bfd_reopen): Rename `bfd' to
+	`abfd'(-Wshadow).
+
+2011-12-10  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* annotate.c (annotate_array_section_begin): Rename `index' to
+	`idx'(-Wshadow).
+
+2011-12-10  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* amd64-tdep.c (amd64_get_unused_input_int_reg): Rename `index' to
+	`idx'(-Wshadow).
+
+2011-12-10  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* amd64-linux-tdep.c (amd64_canonicalize_syscall): Rename
+	`syscall' to `syscall_number'(-Wshadow).
+
+2011-12-10  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* ada-lang.c (remove_extra_symbols): Rename `remove' to
+	`remove_p'(-Wshadow).
+
+2011-12-10  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* ada-exp.y (write_var_or_type): Rename nested `renaming' to
+	`ren_sym'(-Wshadow).
+
+2011-12-10  Doug Evans  <dje at google.com>
+
+	* dwarf2read.c (dwarf2_per_cu_data): Rename debug_type_section to
+	debug_types_section.  All uses updated.
+	(partial_read_comp_unit_head): Rename parameter is_debug_type_section
+	to is_debug_types_section.
+
+	* python/py-auto-load.c (source_section_scripts): Call xfree
+	instead of free.
+
+2011-12-10  Hui Zhu  <teawater at gmail.com>
+	    Yao Qi  <yao at codesourcery.com>
+
+	* tracepoint.c (start_tracing): Clear `inserted' flag.
+
+2011-12-10  Hui Zhu  <teawater at gmail.com>
+
+	* tracepoint.c (create_tsv_from_upload): Change sprintf to xstrprintf.
+
+2011-12-09  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* breakpoint.c (bp_loc_is_permanent): Rename `brk' to
+	`bpoint'(-Wshadow).
+
+2011-12-09  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* breakpoint.c (update_static_tracepoint): Rename nested `sal' and
+	`marker' variables to `sal2' and `tpmarker' respectively
+	(-Wshadow).
+
+2011-12-09  Andrew Pinski  <apinski at cavium.com>
+
+	* linespec.c (hash_address_entry): Use iterative_hash_object on each
+	field rather than the struct itself.
+
+2011-12-09  Tom Tromey  <tromey at redhat.com>
+
+	* breakpoint.c (compare_breakpoints): New function.
+	(clear_command): Remove duplicate breakpoints.  Properly clean
+	up.
+
+2011-12-08  Maciej W. Rozycki  <macro at mips.com>
+            Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* mips-tdep.c (mips_skip_mips16_trampoline_code): Sign-extend
+	address chunks retrieved from decoded lui/addiu pairs.
+
+2011-12-08  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* mips-tdep.c (extended_offset): Correct calculation.
+	(unpack_mips16): Correct bitfield positions used for extraction
+	of the immediate argument; fix sign-extension of same.
+	(extended_mips16_next_pc): Correct B instruction's offset
+	calculation.  Correct register decoding of the BEQZ and BNEZ
+	as well as jump-register instructions.  Handle compact jumps.
+
+2011-12-08  Tom Tromey  <tromey at redhat.com>
+
+	* objfiles.h (struct objfile): Remove obsolete comment.
+	* objfiles.c (build_objfile_section_table): Remove obsolete
+	comment.
+
+2011-12-07  Stan Shebs  <stan at codesourcery.com>
+
+	* MAINTAINERS (Responsible Maintainers): Add Yao Qi as
+	maintainer of the tic6x target.
+
+2011-12-07  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* arm-tdep.h (arm_deal_with_atomic_sequence): Add prototype.
+	* arm-tdep.c (thumb_deal_with_atomic_sequence_raw): New function.
+	(arm_deal_with_atomic_sequence_raw): Likewise.
+	(arm_deal_with_atomic_sequence): Likewise.
+	(arm_software_single_step): Call it.
+	* arm-linux-tdep.c (arm_linux_software_single_step): Likewise.
+
+2011-12-07  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* s390-tdep.c: Replace "Linux" by "GNU/Linux" in comments
+	where appropriate.
+	* s390-tdep.h: Likewise.
+
+2011-12-07  Tristan Gingold  <gingold at adacore.com>
+
+	* machoread.c (macho_symtab_read): Do not consider N_OPT as
+	a debugging stab.  Improve complaint message.
+
+2011-12-07  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* mips-tdep.c (mips32_scan_prologue): Only update the immediate
+	load adjustment if still within the prologue.
+
+2011-12-06  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* mips-tdep.c (mips32_next_pc): Fix floating point condition
+	code mask.
+
+2011-12-06  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* mips-tdep.c (deal_with_atomic_sequence): Fix the handling
+	of BLTZ* and BGEZ* instructions.
+
+2011-12-06  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* mips-tdep.c (mips_pc_is_mips16): Reverse the order of checks
+	performed to determine whether an address refers to standard
+	MIPS or MIPS16 code.
+	(mips16_next_pc): Use mips_pc_is_mips16 instead of
+	is_mips16_addr.
+
+2011-12-06  Pedro Alves  <pedro at codesourcery.com>
+
+	* breakpoint.c (breakpoint_restore_shadows): Rename to ...
+	(breakpoint_xfer_memory): ... this.  Change prototype.  Handle
+	memory writes too.
+	* breakpoint.h (breakpoint_restore_shadows): Delete.
+	(breakpoint_xfer_memory): Declare.
+	* mem-break.c (default_memory_insert_breakpoint)
+	(default_memory_remove_breakpoint): Use target_write_raw_memory.
+	(memory_xfer_partial): Rename to ...
+	(memory_xfer_partial_1): ... this.  Don't mask out breakpoints
+	here.
+	(memory_xfer_partial): New.
+	(target_write_raw_memory): New.
+	* target.h (target_write_raw_memory): New.
+
+2011-12-06  Doug Evans  <dje at google.com>
+
+	* linespec.c (decode_dollar): Avoid "may be used uninitialized" warning.
+
+2011-12-06  Joel Brobecker  <brobecker at acacore.com>
+
+        * language.h (struct language_defn): Add new component
+        la_symbol_name_compare.
+        * symfile.h (struct quick_symbol_functions): Update the profile
+        of parameter "name_matcher" for the expand_symtabs_matching
+        method.  Update the documentation accordingly.
+        * ada-lang.h (ada_name_for_lookup): Add declaration.
+        * ada-lang.c (ada_name_for_lookup): New function, extracted out
+        from ada_iterate_over_symbols.
+        (ada_iterate_over_symbols): Do not encode symbol name anymore.
+        (ada_expand_partial_symbol_name): Adjust profile.
+        (ada_language_defn): Add value for la_symbol_name_compare field.
+        * linespec.c: #include "ada-lang.h".
+        (iterate_name_matcher): Add language parameter. Replace call
+        to strcmp_iw by call to language->la_symbol_name_compare.
+        (decode_variable): Encode COPY if current language is Ada.
+        * dwarf2read.c (dw2_expand_symtabs_matching): Adjust profile
+        of name_matcher parameter.  Adjust call to name_matcher.
+        * psymtab.c (expand_symtabs_matching_via_partial): Likewise.
+        (expand_partial_symbol_names): Update profile of parameter "fun".
+        * psymtab.h (expand_partial_symbol_names): Update profile of
+        parameter "fun".
+        * symtab.c (demangle_for_lookup): Update function documentation.
+        (search_symbols_name_matches): Add language parameter.
+        (expand_partial_symbol_name): Likewise.
+        * c-lang.c (c_language_defn, cplus_language_defn)
+        (asm_language_defn, minimal_language_defn): Add value for
+        la_symbol_name_compare field.
+        * d-lang.c (d_language_defn): Likewise.
+        * f-lang.c (f_language_defn): Ditto.
+        * jv-lang.c (java_language_defn): Ditto.
+        * m2-lang.c (m2_language_defn): Ditto.
+        * objc-lang.c (objc_language_defn): Ditto.
+        * opencl-lang.c (opencl_language_defn): Ditto.
+        * p-lang.c (pascal_language_defn): Ditto.
+        * language.c (unknown_language_defn, auto_language_defn)
+        (local_language_defn): Ditto.
+
+2011-12-06  Tom Tromey  <tromey at redhat.com>
+
+	* linespec.c (iterate_over_all_matching_symtabs): Use
+	LA_ITERATE_OVER_SYMBOLS.
+	(lookup_prefix_sym, add_matching_symbols_to_info): Likewise.
+	(find_function_symbols, decode_variable): Remove Ada special
+	case.
+	* language.h (struct language_defn) <la_iterate_over_symbols>: New
+	field.
+	(LA_ITERATE_OVER_SYMBOLS): New macro.
+	* language.c (unknown_language_defn, auto_language_defn)
+	(local_language_defn): Update.
+	* c-lang.c (c_language_defn, cplus_language_defn)
+	(asm_language_defn, minimal_language_defn): Update.
+	* d-lang.c (d_language_defn): Update.
+	* f-lang.c (f_language_defn): Update.
+	* jv-lang.c (java_language_defn): Update.
+	* m2-lang.c (m2_language_defn): Update.
+	* objc-lang.c (objc_language_defn): Update.
+	* opencl-lang.c (opencl_language_defn): Update.
+	* p-lang.c (pascal_language_defn): Update.
+	* ada-lang.c (ada_iterate_over_symbols): New function.
+	(ada_language_defn): Update.
+
+2011-12-06  Tom Tromey  <tromey at redhat.com>
+	    Joel Brobecker  <brobecker at acacore.com>
+
+	PR breakpoints/13105, PR objc/8341, PR objc/8343, PR objc/8366,
+	PR objc/8535, PR breakpoints/11657, PR breakpoints/11970,
+	PR breakpoints/12023, PR breakpoints/12334, PR breakpoints/12856,
+	PR shlibs/8929, PR shlibs/7393:
+	* python/py-type.c (compare_maybe_null_strings): Rename from
+	compare_strings.
+	(check_types_equal): Update.
+	* utils.c (compare_strings): New function.
+	* tui/tui-winsource.c (tui_update_breakpoint_info): Update for
+	location changes.
+	* tracepoint.c (scope_info): Update.
+	(trace_find_line_command): Use DECODE_LINE_FUNFIRSTLINE.
+	* symtab.h (iterate_over_minimal_symbols)
+	(iterate_over_some_symtabs, iterate_over_symtabs)
+	(find_pcs_for_symtab_line, iterate_over_symbols)
+	(demangle_for_lookup): Declare.
+	(expand_line_sal): Remove.
+	* symtab.c (iterate_over_some_symtabs, iterate_over_symtabs)
+	(lookup_symtab_callback): New functions.
+	(lookup_symtab): Rewrite.
+	(demangle_for_lookup): New function, extract from
+	lookup_symbol_in_language.
+	(lookup_symbol_in_language): Use it.
+	(iterate_over_symbols): New function.
+	(find_line_symtab): Update.
+	(find_pcs_for_symtab_line): New functions.
+	(find_line_common): Add 'start' argument.
+	(decode_line_spec): Update.  Change argument to 'flags', change
+	interpretation.
+	(append_expanded_sal): Remove.
+	(append_exact_match_to_sals): Remove.
+	(expand_line_sal): Remove.
+	* symfile.h (struct quick_symbol_functions) <lookup_symtab>:
+	Remove.
+	<map_symtabs_matching_filename>: New field.
+	* stack.c (func_command): Only look in the current program space.
+	Use DECODE_LINE_FUNFIRSTLINE.
+	* source.c (line_info): Set pspace on sal.  Check program space in
+	the loop.  Use DECODE_LINE_LIST_MODE.
+	(select_source_symtab): Use DECODE_LINE_FUNFIRSTLINE.
+	* solib-target.c: Remove DEF_VEC_I(CORE_ADDR).
+	* python/python.c (gdbpy_decode_line): Update.
+	* psymtab.c (partial_map_expand_apply): New function.
+	(partial_map_symtabs_matching_filename): Rename from
+	lookup_partial_symbol.  Update arguments.
+	(lookup_symtab_via_partial_symtab): Remove.
+	(psym_functions): Update.
+	* objc-lang.h (parse_selector, parse_method): Don't declare.
+	(find_imps): Update.
+	* objc-lang.c (parse_selector, parse_method): Now static.
+	(find_methods): Change arguments.  Fill in a vector of symbol
+	names.
+	(uniquify_strings): New function.
+	(find_imps): Change arguments.
+	* minsyms.c (iterate_over_minimal_symbols): New function.
+	* linespec.h (enum decode_line_flags): New.
+	(struct linespec_sals): New.
+	(struct linespec_result) <canonical>: Remove.
+	<pre_expanded, addr_string, sals>: New fields.
+	(destroy_linespec_result, make_cleanup_destroy_linespec_result)
+	(decode_line_full): Declare.
+	(decode_line_1): Update.
+	* linespec.c (struct address_entry, struct linespec_state, struct
+	collect_info): New types.
+	(add_sal_to_sals_basic, add_sal_to_sals, hash_address_entry)
+	(eq_address_entry, maybe_add_address): New functions.
+	(total_number_of_methods): Remove.
+	(iterate_name_matcher, iterate_over_all_matching_symtabs): New
+	functions.
+	(find_methods): Change arguments.  Don't canonicalize input.
+	Simplify logic.
+	(add_matching_methods, add_constructors)
+	(build_canonical_line_spec): Remove.
+	(filter_results, convert_results_to_lsals): New functions.
+	(decode_line_2): Change arguments.  Rewrite for new data
+	structures.
+	(decode_line_internal): Rename from decode_line_1.  Change
+	arguments.  Add cleanups.  Update for new data structures.
+	(linespec_state_constructor, linespec_state_destructor)
+	(decode_line_full, decode_line_1): New functions.
+	(decode_indirect): Change arguments.  Update.
+	(locate_first_half): Use skip_spaces.
+	(decode_objc): Change arguments.  Update for new data structures.
+	Simplify logic.
+	(decode_compound): Change arguments.  Add cleanups.  Remove
+	fallback code, replace with error.
+	(struct decode_compound_collector): New type.
+	(collect_one_symbol): New function.
+	(lookup_prefix_sym): Change arguments.  Update.
+	(compare_symbol_name, add_all_symbol_names_from_pspace)
+	(find_superclass_methods ): New functions.
+	(find_method): Rewrite.
+	(struct symtab_collector): New type.
+	(add_symtabs_to_list, collect_symtabs_from_filename): New
+	functions.
+	(symtabs_from_filename): Change API.  Rename from
+	symtab_from_filename.
+	(collect_function_symbols): New function.
+	(find_function_symbols): Change API.  Rename from
+	find_function_symbol.  Rewrite.
+	(decode_all_digits): Change arguments.  Rewrite.
+	(decode_dollar): Change arguments.  Use decode_variable.
+	(decode_label): Change arguments.  Rewrite.
+	(collect_symbols): New function.
+	(minsym_found): Change arguments.  Rewrite.
+	(check_minsym, search_minsyms_for_name)
+	(add_matching_symbols_to_info): New function.
+	(decode_variable): Change arguments.  Iterate over all symbols.
+	(symbol_found): Remove.
+	(symbol_to_sal): New function.
+	(init_linespec_result, destroy_linespec_result)
+	(cleanup_linespec_result, make_cleanup_destroy_linespec_result):
+	New functions.
+	(decode_digits_list_mode, decode_digits_ordinary): New functions.
+	* dwarf2read.c (dw2_map_expand_apply): New function.
+	(dw2_map_symtabs_matching_filename): Rename from
+	dw2_lookup_symtab.  Change arguments.
+	(dwarf2_gdb_index_functions): Update.
+	* dwarf2loc.c: Remove DEF_VEC_I(CORE_ADDR).
+	* defs.h (compare_strings): Declare.
+	* cli/cli-cmds.c (compare_strings): Move to utils.c.
+	(edit_command, list_command): Use DECODE_LINE_LIST_MODE.  Call
+	filter_sals.
+	(compare_symtabs, filter_sals): New functions.
+	* breakpoint.h (struct bp_location) <line_number, source_file>:
+	New fields.
+	(struct breakpoint) <line_number, source_file>: Remove.
+	<filter>: New field.
+	* breakpoint.c (print_breakpoint_location, init_raw_breakpoint)
+	(momentary_breakpoint_from_master, add_location_to_breakpoint):
+	Update for changes to locations.
+	(init_breakpoint_sal): Add 'filter' argument.  Set 'filter' on
+	breakpoint.
+	(create_breakpoint_sal): Add 'filter' argument.
+	(remove_sal, expand_line_sal_maybe): Remove.
+	(create_breakpoints_sal): Remove 'sals' argument.  Handle
+	pre-expanded sals and the filter.
+	(parse_breakpoint_sals): Use decode_line_full.
+	(check_fast_tracepoint_sals): Use get_sal_arch.
+	(create_breakpoint): Create a linespec_sals.  Update.
+	(break_range_command): Use decode_line_full.  Update.
+	(until_break_command): Update.
+	(clear_command): Update match conditions for linespec.c changes.
+	Use DECODE_LINE_LIST_MODE.
+	(say_where): Update for changes to locations.
+	(bp_location_dtor): Free 'source_file'.
+	(base_breakpoint_dtor): Free 'filter'.  Don't free 'source_file'.
+	(update_static_tracepoint): Update for changes to locations.
+	(update_breakpoint_locations): Disable ranged breakpoint if too
+	many locations match.  Update.
+	(addr_string_to_sals): Use decode_line_full.  Resolve all sal
+	PCs.
+	(breakpoint_re_set_default): Don't call expand_line_sal_maybe.
+	(decode_line_spec_1): Update.  Change argument name to 'flags',
+	change interpretation.
+	* block.h (block_containing_function): Declare.
+	* block.c (block_containing_function): New function.
+	* skip.c (skip_function_command): Update.
+	(skip_re_set): Update.
+	* infcmd.c (jump_command): Use DECODE_LINE_FUNFIRSTLINE.
+	* mi/mi-main.c (mi_cmd_trace_find): Use DECODE_LINE_FUNFIRSTLINE.
+	* NEWS: Add entry.
+
+2011-12-06  Tom Tromey  <tromey at redhat.com>
+
+	* elfread.c (elf_gnu_ifunc_resolver_return_stop): Allow
+	breakpoint's pspace to be NULL.
+	* breakpoint.h (struct breakpoint) <pspace>: Update comment.
+	* breakpoint.c (init_raw_breakpoint): Conditionally set
+	breakpoint's pspace.
+	(init_breakpoint_sal): Don't set breakpoint's pspace.
+	(prepare_re_set_context): Conditionally switch program space.
+	(addr_string_to_sals): Check executing_startup on location's
+	program space.
+
+2011-12-06  Tom Tromey  <tromey at redhat.com>
+
+	* breakpoint.h (enum enable_state) <bp_startup_disabled>: Remove.
+	* breakpoint.c (should_be_inserted): Explicitly check if program
+	space is executing startup.
+	(describe_other_breakpoints): Update.
+	(disable_breakpoints_before_startup): Change executing_startup
+	earlier.  Remove loop.
+	(enable_breakpoints_after_startup): Likewise.
+	(init_breakpoint_sal): Don't use bp_startup_disabled.
+	(create_breakpoint): Don't use bp_startup_disabled.
+	(update_global_location_list): Use should_be_inserted.
+	(bkpt_re_set): Update.
+
+2011-12-06  Tom Tromey  <tromey at redhat.com>
+
+	* python/lib/gdb/command/pretty_printers.py
+	(InfoPrettyPrinter.invoke1): Remove extra double quote.
+
+2011-12-06  Tom Tromey  <tromey at redhat.com>
+
+	* NEWS: Add MI news.
+
+2011-12-06  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* s390-tdep.h (S390_ORIG_R2_REGNUM): Define.
+	(S390_LAST_BREAK_REGNUM): Likewise.
+	(S390_SYSTEM_CALL_REGNUM): Likewise.
+	(S390_NUM_REGS): Update.
+
+	(s390_regmap_last_break): Add declaration.
+	(s390x_regmap_last_break): Likewise.
+	(s390_regmap_system_call): Likewise.
+
+	(tdesc_s390_linux32v1): Add declaration.
+	(tdesc_s390_linux32v2): Likewise.
+	(tdesc_s390_linux64v1): Likewise.
+	(tdesc_s390_linux64v2): Likewise.
+	(tdesc_s390x_linux64v1): Likewise.
+	(tdesc_s390x_linux64v2): Likewise.
+
+	* s390-tdep.c: Include new target description files
+	"features/s390-linux32v1.c", "features/s390-linux32v2.c",
+	"features/s390-linux64v1.c", "features/s390-linux64v2.c",
+	"features/s390x-linux64v1.c", and "features/s390x-linux64v2.c".
+	(s390_cannot_store_register): New function.
+	(s390_write_pc): Likewise.
+	(s390_dwarf_regmap): Add fields for new registers.
+	(s390_regmap_gregset): Likewise.
+	(s390x_regmap_gregset): Likewise.
+	(s390_regmap_fpregset): Likewise.
+	(s390_regmap_upper): Likewise.
+	(s390_regmap_last_break): New variable.
+	(s390x_regmap_last_break): Likewise.
+	(s390_regmap_system_call): Likewise.
+	(s390_last_break_regset): Likewise.
+	(s390x_last_break_regset): Likewise.
+	(s390_system_call_regset): Likewise.
+	(s390_upper_regset_sections): Rename to ...
+	(s390_linux64_regset_sections): ... this.
+	(s390_linux32_regset_sections): New variable.
+	(s390x_linux64_regset_sections): Likewise.
+	(s390_linux32v1_regset_sections): Likewise.
+	(s390_linux32v2_regset_sections): Likewise.
+	(s390_linux64v1_regset_sections): Likewise.
+	(s390_linux64v2_regset_sections): Likewise.
+	(s390x_linux64v1_regset_sections): Likewise.
+	(s390x_linux64v2_regset_sections): Likewise.
+	(s390_regset_from_core_section): Handle .reg-s390-last-break and
+	.reg-s390-system-call core file sections.
+	(s390_core_read_description): Check for presence of
+	.reg-s390-last-break and .reg-s390-system-call core file
+	sections and return appropriate target description.
+	(s390_gdbarch_init): Detect Linux-specific registers "orig_r2",
+	"last_break" and "system_call" in target description.  Install
+	appropriate gdbarch_core_regset_sections array.
+	Call set_gdbarch_cannot_store_register and set_gdbarch_write_pc.
+	(_initialize_s390_tdep): Initialize additional target descriptions.
+
+	* s390-nat.c: Include "elf/common.h".
+	(PTRACE_GETREGSET, PTRACE_SETREGSET): Define if undefined.
+	(have_regset_last_break): New static variable.
+	(have_regset_system_call): Likewise.
+	(s390_native_supply): Handle S390_ORIG_R2_REGNUM.
+	(s390_native_collect): Likewise.
+	(fetch_regset, store_regset, check_regset): New functions.
+	(s390_linux_fetch_inferior_registers): Handle S390_LAST_BREAK_REGNUM
+	and S390_SYSTEM_CALL_REGNUM.
+	(s390_linux_store_inferior_registers): Likewise.
+	(s390_read_description): Check for presence of NT_S390_LAST_BREAK
+	and NT_S390_SYSTEM_CALL regsets and use appropriate description.
+
+	* features/Makefile (WHICH): Add s390-linux32v1, s390-linux64v1,
+	s390x-linux64v1, s390-linux32v2, s390-linux64v2, and s390x-linux64v2.
+	(s390-linux32v1-expedite): Define.
+	(s390-linux32v2-expedite): Likewise.
+	(s390-linux64v1-expedite): Likewise.
+	(s390-linux64v2-expedite): Likewise.
+	(s390x-linux64v1-expedite): Likewise.
+	(s390x-linux64v2-expedite): Likewise.
+
+	* features/s390-linux32.xml: Add orig_r2 register.
+	* features/s390-linux64.xml: Likewise.
+	* features/s390x-linux64.xml: Likewise.
+	* features/s390-linux32v1.xml: New file.
+	* features/s390-linux32v2.xml: Likewise.
+	* features/s390-linux64v1.xml: Likewise.
+	* features/s390-linux64v2.xml: Likewise.
+	* features/s390x-linux64v1.xml: Likewise.
+	* features/s390x-linux64v2.xml: Likewise.
+
+	* features/s390-linux32.c: Regenerate.
+	* features/s390-linux64.c: Likewise.
+	* features/s390x-linux64.c: Likewise.
+	* features/s390-linux32v1.c: New generated file.
+	* features/s390-linux32v2.c: Likewise.
+	* features/s390-linux64v1.c: Likewise.
+	* features/s390-linux64v2.c: Likewise.
+	* features/s390x-linux64v1.c: Likewise.
+	* features/s390x-linux64v2.c: Likewise.
+
+	* regformats/s390-linux32.dat: Regenerate.
+	* regformats/s390-linux64.dat: Regenerate.
+	* regformats/s390x-linux64.dat: Regenerate.
+	* regformats/s390-linux32v1.dat: New generated file.
+	* regformats/s390-linux32v2.dat: Likewise.
+	* regformats/s390-linux64v1.dat: Likewise.
+	* regformats/s390-linux64v2.dat: Likewise.
+	* regformats/s390x-linux64v1.dat: Likewise.
+	* regformats/s390x-linux64v2.dat: Likewise.
+
+2011-12-05  Pedro Alves  <pedro at codesourcery.com>
+
+	* linux-nat.c (resume_stopped_resumed_lwps): Call
+	registers_changed.
+
+2011-12-05  Pedro Alves  <pedro at codesourcery.com>
+
+	* breakpoint.c: Include record.h.
+	(breakpoints_always_inserted_mode): Return false when the record
+	target is in use.
+
+2011-12-05  Pedro Alves  <pedro at codesourcery.com>
+
+	* amd64-linux-nat.c (amd64_linux_dr_get): Remove FIXME comment.
+	Reinstate perror_with_name call on ptrace error.  Remove #if 0.
+	* i386-linux-nat.c (i386_linux_dr_get): Likewise.
+	* i386bsd-nat.c (i386bsd_dr_get_status): Likewise.
+
+2011-12-05  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* breakpoint.c (init_breakpoint_sal): Remove nested definitions of
+	`i'(-Wshadow).
+
+2011-12-05  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* bcache.c (bcache): Rename `bcache' to `cache'(-Wshadow).
+
+2011-12-05  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* amd64-tdep.c (amd64_push_dummy_call): Remove nested definition
+	of `tdep'(-Wshadow).
+
+2011-12-03  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix compilation --without-expat.
+	* solib-svr4.c (svr4_free_so, svr4_free_library_list): Move them here
+	from ...
+	[HAVE_LIBEXPAT] (svr4_free_so, svr4_free_library_list): ... here.
+
+2011-12-02  Paul Pluzhnikov  <ppluzhnikov at google.com>
+	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* Makefile.in (XMLFILES): Add library-list-svr4.dtd.
+	* features/library-list-svr4.dtd: New file.
+	* remote.c (PACKET_qXfer_libraries_svr4): New.
+	(remote_protocol_features): new entry for PACKET_qXfer_libraries_svr4.
+	(remote_xfer_partial): Handle TARGET_OBJECT_LIBRARIES_SVR4.
+	* solib-svr4.c (struct svr4_library_list): New.
+	[HAVE_LIBEXPAT]: Include xml-support.h.
+	[HAVE_LIBEXPAT] (svr4_library_list_start_library)
+	[HAVE_LIBEXPAT] (svr4_library_list_start_list, svr4_library_attributes)
+	[HAVE_LIBEXPAT] (svr4_library_list_children)
+	[HAVE_LIBEXPAT] (svr4_library_list_attributes)
+	[HAVE_LIBEXPAT] (svr4_library_list_elements, svr4_parse_libraries)
+	[HAVE_LIBEXPAT] (svr4_current_sos_via_xfer_libraries)
+	[!HAVE_LIBEXPAT] (svr4_current_sos_via_xfer_libraries): New.
+	(svr4_read_so_list): Extend the corruption message by addresses.
+	(svr4_current_sos): New variable library_list, call
+	svr4_current_sos_via_xfer_libraries.
+	* target.h (enum target_object): New TARGET_OBJECT_LIBRARIES_SVR4.
+
+2011-12-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	PR threads/13448
+	* dwarf2read.c (decode_locdesc): Handle DW_OP_const8u.
+	For DW_OP_GNU_push_tls_address increment the value, new comment for it.
+
+2011-12-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	PR breakpoints/13346
+	* dwarf2read.c (process_psymtab_comp_unit): Set
+	PSYMTABS_ADDRMAP_SUPPORTED.
+	* psympriv.h (struct partial_symtab): Comment textlow and texthigh
+	validity.  New field psymtabs_addrmap_supported.
+	* psymtab.c (find_pc_sect_psymtab_closer): New gdb_assert on
+	psymtabs_addrmap_supported.
+	(find_pc_sect_psymtab): Do not fallback to TEXTLOW and TEXTHIGH for
+	!PSYMTABS_ADDRMAP_SUPPORTED.
+	(dump_psymtab, maintenance_info_psymtabs): Print also
+	psymtabs_addrmap_supported.
+
+2011-12-01  Doug Evans  <dje at google.com>
+
+	* python/py-type.c (type_object_methods): Fix "array" doc string.
+
+2011-12-01  Andrew Burgess  <aburgess at broadcom.com>
+
+	* source.c (print_source_lines_base): Fix missing braces on else
+	clause leading to additional output.
+
+2011-11-30  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* s390-nat.c (SUBOFF): Remove.
+	(s390_native_supply, s390_native_collect): New functions.
+	(supply_gregset, supply_fpregset): Use s390_native_supply.
+	(fill_gregset, fill_fpregset): Use s390_native_collect.
+
+	* s390-tdep.c (s390_pseudo_register_reggroup_p): Update comment.
+	(s390_unwind_pseudo_register): New function.
+	(s390_prologue_frame_unwind_cache): Unwind PSW address and mask
+	registers instead of PC and CC.
+	(s390_backchain_frame_unwind_cache): Likewise.
+	(s390_sigtramp_frame_unwind_cache): Do not unwind PC, CC, or
+	full GPR pseudos.
+	(s390_trad_frame_prev_register): New function.
+	(s390_frame_prev_register): Use it.
+	(s390_sigtramp_frame_prev_register): Likewise.
+	(s390_dwarf2_prev_register): Use s390_unwind_pseudo_register.
+	(s390_dwarf2_frame_init_reg): Unwind PSW address and mask.  Use
+	special callback to unwind any pseudo.
+
+	* features/s390-core32.xml: Add pswm/pswa to save/restore group.
+	* features/s390-core64.xml: Likewise.
+	* features/s390x-core64.xml: Likewise.
+	* features/s390-linux32.c: Regenerate.
+	* features/s390-linux64.c: Likewise.
+	* features/s390x-linux64.c: Likewise.
+
+2011-11-30  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* s390-tdep.c (s390_gdbarch_init): Call set_gdbarch_get_siginfo_type.
+
+2011-11-30  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* s390-tdep.c (s390_displaced_step_fixup): Fix processing of LARL
+	instruction.  Add more diagnostic output.
+
+2011-11-29  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* MAINTAINERS (Write After Approval): Add myself to the list.
+
+2011-11-29  Sanjoy Das  <sdas at igalia.com>
+
+	* jit.c (add_objfile_entry, jit_reader_try_read_symtab)
+	(jit_bfd_try_read_symtab): Fix comments.
+
+2011-11-28  DJ Delorie  <dj at redhat.com>
+
+	* NEWS: Mention RL78 simulator.
+
+2011-11-28  Joel Brobecker  <brobecker at adacore.com>
+
+	* symfile.h (struct quick_symbol_functions): Fix the documentation
+	of field map_matching_symbols, as symbols are sorted using
+	strcmp_iw_ordered, not strcmp_iw.
+
+2011-11-28  Paul Hilfinger  <hilfinger at adacore.com>
+
+	* symfile.h (struct quick_symbol_functions): Update the
+	documentation for field map_matching_symbols.
+
+2011-11-28  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-lang.c (compare_names): Fix wrong return value in case
+	string1 starts with the same contents as string2, followed
+	by an underscore that do not start a symbol name suffix.
+
+2011-11-28  Phil Muldoon  <pmuldoon at redhat.com>
+
+	PR python/13369
+	PR python/13374
+
+	* python/python.c (gdbpy_decode_line): Do not acquire GIL.
+	* python/py-inferior.c (inferior_to_inferior_object): Ditto.
+	* python/py-value.c (valpy_nonzero): Use TRY_CATCH to catch GDB
+	exceptions.
+	* python/py-type.c (typy_strip_typedefs): Ditto.
+	(typy_legacy_template_argument): Ditto.
+	* python/py-inferior.c (inferior_to_inferior_object): Ditto.
+	* python/py-breakpoint.c (bppy_set_ignore_count): Ditto.
+
+2011-11-27  Joel Brobecker  <brobecker at acacore.com>
+
+	* remote.c (remote_get_tracepoint_status): Delete addrbuf
+	local variable.  Avoid use of sprintf_vma.
+
+2011-11-27  Sanjoy Das  <sdas at igalia.com>
+
+	Fix regression in jit.exp.
+	* jit.c (jit_reader_try_read_symtab, jit_bfd_try_read_symtab)
+	(jit_register_code): Set the jit_objfile_data field to the correct
+	value.
+
+2011-11-25  Uros Bizjak  <ubizjak at gmail.com>
+
+	* alpha-tdep.c (br_opcode): New.
+	(ldl_l_opcode, ldq_l_opcode, stl_c_opcode, stq_c_opcode): Ditto.
+	(alpha_deal_with_atomic_sequence): New function.
+	(alpha_gdbarch_init): Handle single stepping of atomic sequences
+	with alpha_deal_with_atomic_sequence.
+
+2011-11-24  Tristan Gingold  <gingold at adacore.com>
+
+	* machoread.c (oso_el): Remove num_Sections, symbols, offsets
+	fields.  Add oso_sym, end_sym and nbr_syms.
+	(macho_register_oso): Change interface.
+	(macho_symtab_add_minsym): New function.
+	(macho_symtab_read): Rewritten.
+	(get_archive_prefix_len): Remove trailing blanks.
+	(oso_el_compare_name): Add comment.
+	(struct macho_sym_hash_entry): New structure.
+	(macho_relocate_common_syms): Remove.
+	(macho_sym_hash_newfunc): New function.
+	(macho_resolve_oso_sym_with_minsym): Likewise.
+	(macho_add_oso_symfile): Rewritten.
+	(macho_symfile_read_all_oso): Remove trailing blanks.
+	Adjust code to free oso vector.
+	(macho_symfile_read): Likewise.
+	Move code to initialize minimal symbol
+
+2011-11-24  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* mips-tdep.c (extended_offset): Fix formatting.
+
+2011-11-23  Doug Evans  <dje at google.com>
+
+	* dwarf2read.c (dw2_lookup_symtab): Add comment.
+	(dw2_expand_symtabs_with_filename): Ditto.
+	(dw2_expand_symtabs_matching): Ditto.
+	(dw2_map_symbol_filenames): Ditto.
+
+2011-11-23  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* ada-lang.c (assign_aggregate): Minor reformatting.
+
+2011-11-23  Andrey Smirnov  <andrew.smirnov at gmail.com>
+
+	* ada-lang.c (assign_aggregate): Remove declaration of local
+	variable `i' which is shadowing another variable with the same
+	name declared in the outer scope.
+
+2011-11-23  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-lang.c (get_base_type): Renames base_type.  Adjust all
+	calls throughout this file.
+
+2011-11-23  Joel Brobecker  <brobecker at adacore.com>
+
+	* gdb-dlfcn.c (gdb_dlopen): Add missing coma in call to
+	FormatMessage.
+
+2011-11-22  Tom Tromey  <tromey at redhat.com>
+
+	PR mi/8444:
+	* mi/mi-common.h (EXEC_ASYNC_SOLIB_EVENT, EXEC_ASYNC_FORK)
+	(EXEC_ASYNC_VFORK, EXEC_ASYNC_SYSCALL_ENTRY)
+	(EXEC_ASYNC_SYSCALL_RETURN, EXEC_ASYNC_EXEC): New constants.
+	* mi/mi-common.c (async_reason_string_lookup): Add new reasons.
+	* breakpoint.c (print_it_catch_fork, print_it_catch_vfork)
+	(print_it_catch_syscall, print_it_catch_exec)
+	(internal_bkpt_print_it): Use ui_out.  Emit stop reason.
+	(bpstat_print): Add 'kind' argument.  Handle
+	TARGET_WAITKIND_LOADED.
+	* infrun.c (normal_stop): Update for bpstat_print change.  Don't
+	handle TARGET_WAITKIND_LOADED here.
+	* breakpoint.h (bpstat_print): Update.
+
+2011-11-22  Tom Tromey  <tromey at redhat.com>
+
+	* mi/mi-interp.c (mi_on_normal_stop): Call bpstat_print.
+
+2011-11-22  Tom Tromey  <tromey at redhat.com>
+
+	* mi/mi-common.c (_initialize_gdb_mi_common): Remove.
+	Use static_assert to check the size of
+	async_reason_string_lookup.
+	* common/gdb_assert.h (static_assert): New macro.
+
+2011-11-22  Alan Modra  <amodra at gmail.com>
+
+	* rs6000-tdep.c (ppc_deal_with_atomic_sequence): Correct branch
+	destination calculation.  Don't expect >> to sign extend.  Don't
+	add a break if branch lands inside the sequence anywhere.
+
+2011-11-21  Keith Seitz  <keiths at redhat.com>
+
+	* gdb.mi/mi-var-display.exp: Remove XFAIL for c_variable-7.51,
+	-var-evaluate-expression of an enumeration and fix expected result.
+	* gdb.mi/mi2-varvdisplay.exp: Likewise.
+
+2011-11-21  Kwok Cheung Yeung  <kcy at codesourcery.com>
+
+	* osdata.c (info_osdata_command): Rename nprocs to nrows.  Handle
+	the case where osdata->items is empty.  Rename column names to a
+	canonical form to avoid problems with unusual column names.
+
+2011-11-21  Yao Qi  <yao at codesourcery.com>
+
+	* MAINTAINERS (Write After Approval): Keep list in alphabetical order.
+
+2011-11-20  Stan Shebs  <stan at codesourcery.com>
+
+	* NEWS: Mention tracepoint additions.
+	* breakpoint.h (struct tracepoint): New field traceframe_usage.
+	* breakpoint.c (print_one_breakpoint_location): Identify
+	tracepoints as such when reporting hit counts, report
+	trace buffer usage.
+	(create_tracepoint_from_upload): Copy status info.
+	* tracepoint.h (struct trace_status): Rename error_desc to stop_desc,
+	add fields user_name, notes, start_time, stop_time.
+	(struct uploaded_tp): Add fields hit_count, traceframe_usage.
+	* tracepoint.c (trace_user): New global.
+	(trace_notes): New global.
+	(trace_stop_notes): New global.
+	(start_tracing): Add argument and trace note handling.
+	(stop_tracing): Ditto.
+	(trace_start_command): Add notes argument.
+	(trace_stop_command): Ditto.
+	(trace_status_command): Report additional status info.
+	(trace_status_mi): Similarly.
+	(trace_save): Update, record tracepoint status.
+	(set_disconnected_tracing): Call target method directly.
+	(send_disconnected_tracing_value): Remove.
+	(set_trace_user): New function.
+	(set_trace_notes): New function.
+	(set_trace_stop_notes): New function.
+	(parse_trace_status): Handle additional status.
+	(parse_tracepoint_status): New function.
+	(parse_tracepoint_definition): Call it.
+	(tfile_get_tracepoint_status): New function.
+	(init_tfile_ops): Use it.
+	(_initialize_tracepoint): Add new setshows.
+	* target.h (struct target_ops): New methods to_get_tracepoint_status
+	and to_set_trace_notes.
+	(target_get_tracepoint_status): New macro.
+	(target_set_trace_notes): New macro.
+	* target.c (update_current_target): Add new methods.
+	* remote.c (remote_get_tracepoint_status): New function.
+	(remote_set_trace_notes): New function.
+	(init_remote_ops): Add them.
+	* mi/mi-main.c (mi_cmd_trace_start): Add argument to call.
+	(mi_cmd_trace_stop): Ditto.
+
+2011-11-20  Sanjoy Das  <sdas at igalia.com>
+
+	* jit.c: Include regcache.h.
+	(jit_gdbarch_data, jit_frame_unwind): New static variables.
+	(jit_unwind_reg_set_impl, free_reg_value_impl)
+	(jit_unwind_reg_get_impl, jit_frame_sniffer)
+	(jit_frame_unwind_stop_reason, jit_frame_this_id)
+	(jit_frame_prev_register, jit_dealloc_cache)
+	(jit_prepend_unwinder, jit_gdbarch_data_init): New functions.
+	(jit_inferior_init): Prepend (new) pseudo unwinder by calling
+	jit_prepend_unwinder.
+	(_initialize_jit): Register new gdbarch data jit_gdbarch_data.
+
+2011-11-20  Sanjoy Das  <sdas at igalia.com>
+
+	* jit.c: Include block.h, dictionary.h and frame-unwind.h.
+	(add_objfile_entry, jit_target_read_impl, jit_object_open_impl)
+	(jit_symtab_open_impl, compare_block, jit_block_open_impl)
+	(jit_symtab_line_mapping_add_impl, jit_symtab_close_impl)
+	(finalize_symtab, jit_object_close_impl)
+	(jit_reader_try_read_symtab, jit_bfd_try_read_symtab)
+	(free_objfile_data): New functions.
+	(_initialize_jit): Register jit_objfile_data with a proper cleanup
+	function.
+
+2011-11-20  Sanjoy Das  <sdas at igalia.com>
+
+	* jit.c: Include gdb-dlfcn.h.
+	(loaded_jit_reader, reader_init_fn_sym): New static variables.
+	(jit_reader_load, jit_reader_load_command)
+	(jit_reader_unload_command): New functions.
+	(_initialize_jit): Add commands "jit-reader-load" and
+	"jit-reader-unload".
+
+2011-11-20  Sanjoy Das  <sdas at igalia.com>
+
+	* Makefile.in: Add gdb-dlfcn.c and gdb-dlfcn.h to build system.
+	* config.in: Add new #define HAVE_LIBDL.
+	* configure.ac: Add check for -ldl.
+	* configure: Re-generated by autoconf.
+	* gdb-dlfcn.c: New file.
+	* gdb-dlfcn.h: New file.
+
+2011-11-20  Sanjoy Das  <sdas at igalia.com>
+
+	* config.in: Add new #defines: JIT_READER_DIR and
+	JIT_READER_DIR_RELOCATABLE.
+	* configure.ac: New GDB directory entry for jit-reader-dir.
+	* configure: Re-generated by autoconf.
+	* jit.c: New static variable: const char *jit_reader_dir.
+	(_initialize_jit): Relocate jit_reader_dir.
+
+2011-11-20  Sanjoy Das  <sdas at igalia.com>
+
+	* Makefile.in: Add jit-reader.h as a header.  Have it installed in
+	$(includedir)/gdb.
+	* configure.ac: Generate a correct value for TARGET_PTR for
+	jit-reader.h.  Tell configure to generate jit-reader.h from
+	jit-reader.in.
+	* configure: Re-generated by autoconf.
+	* jit-reader.in: New file.
+	* jit.c: Include jit-reader.h.
+
+2011-11-20  Sanjoy Das  <sdas at igalia.com>
+
+	* MAINTAINERS (Write After Approval): Add myself to the list.
+
+2011-11-18  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* findvar.c (read_frame_register_value): Respect value_offset
+	of the register value.  Remove big-endian special case.
+
+2011-11-18  Tom Tromey  <tromey at redhat.com>
+
+	PR build/7196:
+	* remote.c (putpkt_for_catch_errors): New function.
+	(remote_kill): Use it.
+
+2011-11-18  Yao Qi  <yao at codesourcery.com>
+
+	* breakpoint.c (create_breakpoint): Produce query message according to
+	breakpoint's type.
+	Allocate tracepoint per correct type.
+	Don't check SALs for pending fast tracepoints.
+	* tracepoint.c (process_tracepoint_on_disconnect): New.
+	(disconnect_tracing): Call process_tracepoint_on_disconnect.
+
+2011-11-18  Yao Qi  <yao at codesourcery.com>
+
+	* breakpoint.c (install_breakpoint):  Add one more parameter so that
+	update_global_location_list is called conditionally.
+	(create_fork_vfork_event_catchpoint): Update.
+	(create_syscall_event_catchpoint): Update.
+	(create_breakpoint_sal): Update.
+	(create_breakpoint_sal): Update. Call do_cleanups before
+	install_breakpoint.
+	* ada-lang.c (create_ada_exception_catchpoint): Update.
+	* breakpoint.h (install_breakpoint): Update declaration.
+
+2011-11-16  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* spu-tdep.c (spu_return_value): Fix handling of
+	TYPE_CALLING_CONVENTION annotation.
+
+2011-11-16  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* skip.c (skip_function_command): Work around uninitialized
+	variable warning.
+
+2011-11-16  David S. Miller  <davem at davemloft.net>
+
+	* utils.c (report_command_stats): Cast delta_wall_time 'tv_sec' and
+	'tv_usec' to long for printf since these fields have a type which
+	varies.
+
+2011-11-15  Doug Evans  <dje at google.com>
+
+	* buildsym.c (add_symbol_to_list): Delete outdated comment.
+
+2011-11-15  Paul Koning  <paul_koning at dell.com>
+
+	* python/py-type.c (typy_get_composite): New function.
+	(typy_nonzero): New function.
+	(typy_values): Rename from typy_fields.
+	(typy_fields): New function.
+	(typy_length): Raise exception if not struct, union, or enum type.
+	(typy_getitem): Ditto.
+	(typy_has_key): Ditto.
+	(typy_make_iter): Ditto.
+
+2011-11-15  Doug Evans  <dje at google.com>
+
+	PR gdb/8367
+	* NEWS: Mention new parameter basenames-may-differ.
+	* dwarf2read.c (dw2_lookup_symtab): Avoid calling gdb_realpath if
+	! basenames_may_differ.
+	* psymtab.c (lookup_partial_symtab): Ditto.
+	* symtab.c (lookup_symtab): Ditto.
+	(basenames_may_differ): New global.
+	(_initialize_symtab): New parameter basenames-may-differ.
+	* symtab.h (basenames_may_differ): Declare.
+
+2011-11-15  Pedro Alves  <pedro at codesourcery.com>
+	    Luis Machado  <lgustavo at codesourcery.com>
+
+	* auxv.c: Include observer.h.
+	(auxv_inferior_data_cleanup): New.
+	(invalidate_auxv_cache_inf): New.
+	(invalidate_auxv_cache): New.
+	(get_auxv_inferior_data): New.
+	(auxv_inferior_data): New static global.
+	(auxv_info): New structure.
+	(target_auxv_search): Use get_auxv_inferior_data instead of
+	target_read_alloc and don't free cached buffers.
+	(fprint_target_auxv): Likewise
+	(_initialize_auxv): Register per-inferior auxv cache and register
+	observers to invalidate auxv cache when needed.
+
+2011-11-14  Doug Evans  <dje at google.com>
+
+	PR gdb/7200 Make "!" an alias for "shell".
+	* NEWS: Add mention.
+	* cli/cli-cmds.c (init_cli_cmds): Remove xdb_commands condition on
+	adding "!" command, always add it.
+	* cli/cli-decode.c (find_command_name_length): Recognize "!" as a
+	command of length one.
+
+2011-11-14  Stan Shebs  <stan at codesourcery.com>
+	    Kwok Cheung Yeung  <kcy at codesourcery.com>
+
+	* NEWS: Document shorter fast tracepoints and qTMinFTPILen packet.
+	* i386-tdep.c (i386_fast_tracepoint_valid_at): Query target for
+	the minimum instruction size for fast tracepoints.
+	* target.h (struct target_ops): Add new method
+	to_get_min_fast_tracepoint_insn_len.
+	(target_get_min_fast_tracepoint_insn_len): New.
+	* target.c (update_current_target): Set up new target operation.
+	* remote.c (remote_write_bytes_aux): Fix typo.
+	(remote_get_min_fast_tracepoint_insn_len): New.
+	(init_remote_ops): Initialize new field.
+
+2011-11-14  Tom Tromey  <tromey at redhat.com>
+
+	* tracepoint.c (encode_actions_1): Use the location's gdbarch.
+	(encode_actions): Likewise.
+
+2011-11-14  Yao Qi  <yao at codesourcery.com>
+
+	* remote.c (struct remote_state): <install_in_trace> new field.
+	(PACKET_InstallInTrace): New enum value.
+	(remote_install_in_trace_feature): Support InstallInTrace.
+	(remote_supports_install_in_trace): Likewise.
+	(remote_protocol_features): Likewise.
+	(_initialize_remote): Likewise.
+	(remote_can_download_tracepoint): New.
+	* target.h (struct target): New field
+	`to_can_download_tracepoint'.
+	(target_can_download_tracepoint): New macro.
+	* target.c (update_current_target): Update.
+	* breakpoint.h (struct bp_location): Add comment on field
+	`duplicate'.
+	* breakpoint.c (should_be_inserted): Don't differentiate breakpoint
+	and tracepoint.
+	(remove_breakpoints): Don't remove tracepoints.
+	(tracepoint_locations_match ): New.
+	(breakpoint_locations_match): Call it.
+	(disable_breakpoints_in_unloaded_shlib): Handle tracepoint.
+	(download_tracepoint_locations): New.
+	(update_global_location_list): Call it.
+	* tracepoint.c (find_matching_tracepoint): Delete.
+	(find_matching_tracepoint_location): Renamed from
+	find_matching_tracepoint.  Return bp_location rather than
+	tracepoint.
+	(merge_uploaded_tracepoints): Set `inserted' field to 1 if
+	tracepoint is found.
+
+2011-11-14  Yao Qi  <yao at codesourcery.com>
+
+	* target.h (struct target): <to_download_tracepoint> Change type
+	of parameter from tracepoint to bp_location.
+	* target.c (update_current_target): Update.
+	* tracepoint.c (start_tracing): Update.
+	* remote.c (remote_download_tracepoint): Remove loop for each location
+	of a tracepoint.
+
+2011-11-14  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* i386-nat.c (i386_insert_hw_breakpoint): Call
+	i386_update_inferior_debug_regs.
+	(i386_remove_hw_breakpoint): Likewise.
+
+2011-11-14  Yao Qi  <yao at codesourcery.com>
+
+	* breakpoint.c (init_raw_breakpoint): Call
+	add_location_to_breakpoint to replace duplicated code.
+	(add_location_to_breakpoint): Adjust the breakpoint's
+	address prior to allocating a location.
+
+2011-11-12  Matt Rice  <ratmice at gmail.com>
+
+	* macrocmd.c (macro_no_macro_info): New function.
+	(macro_expand_command): Use macro_no_macro_info.
+	(macro_expand_once_command): Ditto.
+	(info_macro_command): Add argument processing,
+	move info_definitions_command here.
+	(_initialize_macrocmd): Remove info definitions command.
+	Add arguments to info macro help text.
+	* NEWS: Replace info definitions command with new info macro options.
+
+2011-11-11  Keith Seitz  <keiths at redhat.com>
+
+	PR gdb/12843
+	* linespec.c (locate_first_half): Keep ':' if it looks
+	like it could be part of a Windows path starting with
+	a drive letter.
+
+2011-11-10  Pedro Alves  <pedro at codesourcery.com>
+
+	* linux-nat.c (linux_nat_wait): Don't force waking up the event
+	loop when returning a TARGET_WAITKIND_NO_RESUMED.
+
+2011-11-10  Pedro Alves  <pedro at codesourcery.com>
+
+	* target.c (target_waitstatus_to_string): Handle
+	TARGET_WAITKIND_NO_RESUMED.
+
+2011-11-10  Doug Evans  <dje at google.com>
+
+	* dwarf2read.c (dw2_map_symbol_filenames): New parameter
+	`need_fullname'.
+	* psymtab.c (map_symbol_filenames_psymtab): Ditto.
+	(map_partial_symbol_filenames): Ditto.  All callers updated.
+	* psymtab.h (map_partial_symbol_filenames): Update prototype.
+	* symfile.h (struct quick_symbol_functions, map_symbol_filenames): New
+	parameter need_fullname.
+
+	* psymtab.c (psymtab_to_fullname): Use cached copy if it exists.
+	* source.c (symtab_to_fullname): Ditto.
+
+	* defs.h (is_cplus_marker, set_demangling_style): Moved to ...
+	* gdb-demangle.h: ... here.  New file.
+	* demangle.c: #include "gdb-demangle.h".
+	(_initialize_demangler): Use initialize_file_ftype for prototype.
+	Move "set demangle" and "set asm-demangle" parameters here from utils.c
+	(demangle, show_demangle, asm_demangle, show_asm_demangle): Move here
+	from utils.c
+	* utils.c: Update. #include "gdb-demangle.h".
+	* symtab.h (asm_demangle): Delete.
+	(demangle): Move declaration next to use.
+	* breakpoint.c: #include "gdb-demangle.h" instead of "demangle.h".
+	* dwarf2read.c: #include "gdb-demangle.h".
+	* gnu-v2-abi.c: Ditto.
+	* jv-typeprint.c: Ditto.
+	* mdebugread.c: Ditto.
+	* p-typeprint.c: Ditto.
+	* stabsread.c: Ditto.
+	* printcmd.c: Ditto.
+	(asm_demangle): Delete declaration.
+	* tui/tui-stack.c: #include "gdb-demangle.h".
+
+	* python/py-type.c (typy_fields_items): Call check_typedef.
+
+2011-11-10  Joel Brobecker  <brobecker at adacore.com>
+
+	* findvar.c (read_frame_register_value): Read the correct bytes
+	from registers on big-endian architectures.
+
+2011-11-10  Tom Tromey  <tromey at redhat.com>
+
+	* procfs.c (load_syscalls): Make a cleanup.
+	(open_procinfo_files): fd==0 is ok.
+
+2011-11-10  Joel Brobecker  <brobecker at adacore.com>
+
+	* procfs.c (iterate_over_mappings): Call do_cleanups before
+	returning.
+
+2011-11-09  Doug Evans  <dje at google.com>
+
+	* gdbtypes.c (check_typedef): Document that this function can
+	throw an exception.
+
+2011-11-09  Tom Tromey  <tromey at redhat.com>
+
+	PR c++/13342:
+	* valops.c (value_full_object): Return early if real type is
+	smaller than the enclosing type.
+
+2011-11-08  Yao Qi  <yao at codesourcery.com>
+
+	* amd64-tdep.c (amd64_relocate_instruction): Make it static.
+
+2011-11-08  Meador Inge  <meadori at codesourcery.com>
+
+	* arm-tdep.c (thumb_analyze_prologue): Always fallback on the SP
+	register when the frame can't be determined.
+	* arm-tdep.c (arm_analyze_prologue): Ditto.
+
+2011-11-07  Stan Shebs  <stan at codesourcery.com>
+
+	* MAINTAINERS: Move Michael Snyder to Past Maintainers.
+
+2011-11-07  Joel Brobecker  <brobecker at adacore.com>
+
+	* infrun.c (handle_inferior_event): Minor reformatting.
+
+2011-11-05  Doug Evans  <dje at google.com>
+
+	* source.c (forget_cached_source_info_for_objfile): Move call to
+	objfile->sf->qf->forget_cached_source_info outside of
+	ALL_OBJFILE_SYMTABS loop.
+	(forget_cached_source_info): Delete unused variable `s'.
+
+2011-11-05  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* i386-nat.c (dr_ref_count): Remove unused variable.
+
+2011-11-05  Doug Evans  <dje at google.com>
+
+	* main.c (captured_main): Set lim_at_start before calling
+	make_command_stats_cleanup.
+
+2011-11-04  Doug Evans  <dje at google.com>
+
+	* utils.c: #include "timeval-utils.h".
+	(cmd_stats): Rename start_time to start_cpu_time.
+	New member start_wall_time.
+	(report_command_stats): Report wall time.
+	(make_command_stats_cleanup): Record start wall time.
+
+2011-11-04  Tom Tromey  <tromey at redhat.com>
+
+	* cp-namespace.c (cp_lookup_symbol_imports): Reindent.
+
+2011-11-04  Rainer Orth  <ro at CeBiTec.Uni-Bielefeld.DE>
+
+	* coff-pe-read.c: Include defs.h before bfd.h.
+
+2011-11-04  Phil Muldoon  <pmuldoon at redhat.com>
+
+	PR Python/13345
+
+	* python/python.c (python_run_simple_file): Expand tilde in path.
+
+2011-11-04  Phil Muldoon  <pmuldoon at redhat.com>
+
+	PR Python/13363
+
+	* python/py-type.c (typy_lookup_type): Do not return a type in
+          an exception handler.
+
+2011-11-03  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	    Eli Zaretskii  <eliz at gnu.org>
+
+	* linux-nat.c (_initialize_linux_nat): Improve help
+	for `info proc stat', `info proc status', `info proc cwd',
+	`info proc cmdline' and `info proc exe'.
+
+2011-11-02  Stan Shebs  <stan at codesourcery.com>
+
+	String collection for tracepoints.
+	* NEWS: Mention string collection.
+	* common/ax.def (tracenz): New bytecode.
+	* ax-gdb.h (trace_string_kludge): Declare.
+	* ax-gdb.c: Include valprint.h and c-lang.h.
+	(trace_string_kludge): New global.
+	(gen_traced_pop): Add string case.
+	(agent_command): Add string case.
+	* tracepoint.h (decode_agent_options): Declare.
+	* tracepoint.c: Include cli-utils.h.
+	(decode_agent_options): New function.
+	(validate_actionline): Call it.
+	(encode_actions_1): Ditto.
+	* target.h (struct target_ops): New method to_supports_string_tracing.
+	(target_supports_string_tracing): New macro.
+	* target.c (update_current_target): Add to_supports_string_tracing.
+	* remote.c (struct remote_state): New field string_tracing.
+	(remote_string_tracing_feature): New function.
+	(remote_protocol_features): New feature tracenz.
+	(remote_supports_string_tracing): New function.
+	(init_remote_ops): Set to_supports_string_tracing.
+
+2011-11-02  Pedro Alves  <pedro at codesourcery.com>
+	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* linux-nat.c: Include cli/cli-utils.h.
+	(enum info_proc_what): New.
+	(linux_nat_info_proc_cmd): Rename to ...
+	(linux_nat_info_proc_cmd_1): ... here.  Remove variables argv and all.
+	New parameter what.  Initialize cmdline_f, cwd_f, exe_f, mappings_f,
+	status_f and stat_f from WHAT.  Throw error on extra parameters.
+	(linux_nat_info_proc_cmd, linux_nat_info_proc_cmd_mappings)
+	(linux_nat_info_proc_cmd_stat, linux_nat_info_proc_cmd_status)
+	(linux_nat_info_proc_cmd_cwd, linux_nat_info_proc_cmd_cmdline)
+	(linux_nat_info_proc_cmd_exe, linux_nat_info_proc_cmd_all): New.
+	(_initialize_linux_nat): New variable info_proc_cmdlist.  Install `info
+	proc mappings', `info proc stat`, `info proc status', `info proc cwd',
+	`info proc cmdline', `info proc exe' and `info proc all' as real
+	subcommands of `info proc'.
+
+2011-11-01  Justin Lebar  <justin.lebar at gmail.com>
+
+	* Makefile.in: (SFILES): Add skip.c.
+	(HFILES_NO_SRCDIR): Add skip.h.
+	(COMMON_OBS): Add skip.o.
+	* skip.h, skip.c: New.
+	* breakpoint.h (set_default_breakpoint): Remove.
+	(get_sal_arch): Declare.
+	* breakpoint.c: Remove default_breakpoint_valid,
+	default_breakpoint_address, default_breakpoint_symtab,
+	default_breakpoint_line, default_breakpoint_pspace variables.
+	(get_sal_arch): Make public.
+	(set_default_breakpoint): Remove.
+	(parse_breakpoint_sals, create_breakpoint, clear_command,
+	decode_line_spec_1): Remove uses of default_breakpoint variables;
+	replaced with function calls into stack.c.
+	* cli/cli-cmds.h: Add cmd_list_element *skiplist.
+	* cli/cli-cmds.c: Add skiplist.
+	(init_cmd_lists): Initialize skiplist.
+	(init_cli_cmds): Fix comment (classes of commands appear in
+	alphabetical order).
+	* infrun.c (handle_inferior_event): Add check that we don't step into
+	a function whose pc is marked for skip.
+	* stack.c: Declare last_displayed_sal_valid, last_displayed_pspace,
+	last_displayed_addr, last_displayed_symtab, last_displayed_line
+	variables.
+	(set_last_displayed_sal): New static function.
+	(print_frame_info): Switch call to set_default_breakpoint to call to
+	set_last_displayed_sal.
+	(clear_last_displayed_sal, last_displayed_sal_is_valid,
+	get_last_displayed_pspace, get_last_displayed_addr,
+	get_last_displayed_symtab, get_last_displayed_line,
+	get_last_displayed_sal): New public functions.
+	* stack.h (clear_last_displayed_sal, last_displayed_sal_is_valid,
+	get_last_displayed_pspace, get_last_displayed_addr,
+	get_last_displayed_symtab, get_last_displayed_line,
+	get_last_displayed_sal): Declare.
+
+2011-11-01  Justin Lebar <justin.lebar at gmail.com>
+
+	* MAINTAINERS (Write After Approval): Add myself to the list.
+
+2011-10-29  Yao Qi  <yao at codesourcery.com>
+
+	* infcmd.c (disconnect_command): Call disconnect_tracing.
+
+2011-10-29  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup.
+	* symtab.c (skip_prologue_sal): Code reformatting.
+
+2011-10-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	PR symtab/13208
+	* jit.c (jit_register_code): Remove unused variable my_cleanups.  Check
+	for NULL from bfd_open_from_target_memory.  Fix ownership of NBFD and
+	SAI.
+
+2011-10-28  Pedro Alves  <pedro at codesourcery.com>
+
+	* linux-nat.c (linux_nat_filter_event): Remove `options'
+	parameter, and dead code that used it.  If we're handling a
+	PTRACE_EVENT_EXEC event, and the thread group leader is no longer
+	in our lwp list, re-add it.
+	(check_zombie_leaders): New.
+	(linux_nat_wait_1): Remove `options' and `pid' locals.  Always
+	wait for children with WNOHANG, and always wait for all children.
+	Don't check for no resumed children upfront.  Simplify wait loop.
+	Check for zombie thread group leaders after handling all wait
+	statuses.  Return TARGET_WAITKIND_NO_RESUMED if there no
+	unwaited-for children left.
+	* infrun.c (fetch_inferior_event): Handle TARGET_WAITKIND_NO_RESUMED.
+	(handle_inferior_event): Handle TARGET_WAITKIND_NO_RESUMED.
+	(normal_stop): Handle TARGET_WAITKIND_NO_RESUMED.
+	* target.h (enum target_waitkind) <TARGET_WAITKIND_NO_RESUMED>: New.
+
+2011-10-28  Sterling Augustine  <saugustine at google.com>
+
+	* psymtab.c (map_symbol_filenames_psymtab): Call QUIT.
+	* symtab.c (free_completion_list): New function.
+	(do_free_completion_list): Likewise.
+	(default_make_symbol_completion_list_break_on): New variable
+	back_to. Call make_cleanup and discard_cleanups.
+	(make_source_files_completion_list): Likewise.
+
+2011-10-28  Paul Koning  <paul_koning at dell.com>
+
+	* python/lib/gdb/types.py (deep_items): Rename from deepitems.
+	* NEWS: Mention deep_items.
+
+2011-10-28  Alen Skondro  <askondro at gmail.com>
+
+	* ser-tcp.c [USE_WIN32API] (ETIMEDOUT): Don't define if already
+	defined.
+
+2011-10-27  Meador Inge  <meadori at codesourcery.com>
+
+	* MAINTAINERS (Write After Approval): Add myself to the list.
+
+2011-10-27  Joel Brobecker  <brobecker at adacore.com>
+
+	* value.h (read_frame_register_value): Add declaration.
+	* findvar.c (read_frame_register_value): New function.
+	(value_from_register): Use read_frame_register_value
+	instead of get_frame_register_value + value_contents_copy
+	to get value contents.
+
+2011-10-27  Doug Evans  <dje at google.com>
+
+	* cli/cli-cmds.c (source_script_with_search): Pass full path to
+	source_script_from_stream if it may have been found on the search path.
+	* python/py-auto-load.c (source_section_scripts): Pass full path to
+	source_python_script_for_objfile.
+	* python/python.c (source_python_script): Delete stream parameter.
+	All callers updated.
+	(source_python_script_for_objfile): Ditto.
+	* python/python-internal.h (source_python_script_for_objfile): Update.
+	* python/python.h (source_python_script): Update.
+
+2011-10-27  Tom Tromey  <tromey at redhat.com>
+
+	* ada-lang.h (ada_start_decode_line_1, ada_finish_decode_line_1)
+	(ada_sals_for_line): Remove declarations.
+
+2011-10-27  Kevin Pouget  <kevin.pouget at st.com>
+
+	Move unwind reasons to an external .def file
+	* frame.c (frame_stop_reason_string): Rewrite using
+	unwind_stop_reasons.def.
+	* frame.h (enum unwind_stop_reason): Likewise.
+	* python/py-frame.c (gdbpy_initialize_frames): Likewise.
+	(gdbpy_frame_stop_reason_string): Use new enum unwind_stop_reason
+	constants for bound-checking.
+	* unwind_stop_reasons.def: New file.
+	* stack.c (backtrace_command_1): Handle UNWIND_FIRST_ERROR as an alias
+	instead of a distinct value.
+
+2011-10-27  Phil Muldoon  <pmuldoon at redhat.com>
+
+        PR python/13331
+
+	* python/py-function.c (fnpy_call): Check 'args' is not NULL.
+	(convert_values_to_python): Return on Python tuple allocation
+	failure.  Return NULL on value conversion error.
+
+2011-10-27  Phil Muldoon  <pmuldoon at redhat.com>
+
+	* python/py-breakpoint.c (bppy_set_enabled): Use TRY_CATCH.
+	(bppy_set_task): Ditto.
+	(bppy_delete_breakpoint): Ditto.
+	* python/py-symbol.c (gdbpy_lookup_symbol): Ditto.
+	(gdbpy_lookup_global_symbol): Ditto.
+	* python/py-lazy-string.c (stpy_convert_to_value): Ditto.
+	* python/py-frame.c (frapy_is_valid): Ditto.
+	(frame_info_to_frame_object): Ditto.
+	* python/py-type.c (typy_lookup_type): Ditto.
+	(typy_getitem): Ditto.
+	(typy_has_key): Ditto.
+	(typy_richcompare): Use TRY_CATCH.  Do not return Py_NE on error.
+
+2011-10-26  Joel Brobecker  <brobecker at adacore.com>
+
+	* gdbarch.h: Regenerate.
+
+2011-10-26  Meador Inge  <meadori at codesourcery.com>
+
+	* gdbarch.sh (function_list): Use 'pstring' when printing
+	'gcore_bfd_target'.
+	* gdbarch.c: Regenerate.
+
+2011-10-26  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* regcache.c (registers_changed_ptid): Invalidate thread architecture
+	and frame caches if PTID refers to all threads of a process.
+
+2011-10-26  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* spu-tdep.c (spu_catch_start): Pass non-NULL breakpoint ops
+	to create_breakpoint.
+
+2011-10-26  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* ppc-sysv-tdep.c (ppc_sysv_use_opencl_abi): New function.
+	(ppc_sysv_abi_push_dummy_call): Use it.
+	(do_ppc_sysv_return_value): Likewise.
+	(ppc64_sysv_abi_push_dummy_call): Likewise.
+	(ppc64_sysv_abi_return_value): Likewise.
+
+2011-10-26  Paul Koning  <paul_koning at dell.com>
+
+	* python/lib/gdb/types.py (deepitems): New function.
+	
+2011-10-25  Paul Koning  <paul_koning at dell.com>
+
+	PR python/13327
+	
+	* python/py-value.c (value_to_value_object): Remove fetching of
+	the value if it was lazy.
+	(valpy_get_is_lazy): New function.
+	(valpy_fetch_lazy): New function.
+
+2011-10-24  Joel Brobecker  <brobecker at adacore.com>
+
+	* ppc-sysv-tdep.c (do_ppc_sysv_return_value): Do not check
+	FUNC_TYPE's calling convention if FUNC_TYPE is not a function.
+
+2011-10-24  Pedro Alves  <pedro at codesourcery.com>
+
+	* linux-nat.c (linux_handle_extended_wait): When handling a clone
+	event, in non-stop, if not stopping, make sure the new lwp has
+	last_resume_kind set to resume_continue.  Assert that when we're
+	resuming the new lwp, its last_resume_kind is resume_continue.
+
+2011-10-24  Pedro Alves  <pedro at codesourcery.com>
+
+	* infrun.c (handle_inferior_event): Don't assume inferior_ptid is
+	already set when marking the event thread as not executing in
+	non-stop mode.
+
+2011-10-24  Pedro Alves  <pedro at codesourcery.com>
+
+	* infrun.c (handle_inferior_event): Add debug output for
+	TARGET_WAITKIND_NO_HISTORY.
+
+2011-10-24  Phil Muldoon  <pmuldoon at redhat.com>
+
+	* NEWS: Move set/show extended-prompt to "New Options". Expand
+	description. Fix typos.
+
+2011-10-24  Phil Muldoon  <pmuldoon at redhat.com>
+
+        PR python/13310
+
+	* python/py-param.c (call_doc_function): Correctly deference on
+	function exit.
+
+2011-10-21  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-tasks.c (print_ada_task_info): Fix computation of
+	number of tasks displayed in command output.
+
+2011-10-20  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	    Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* dwarf2-frame-tailcall.c: Include dwarf2-frame.h.
+	(dwarf2_tailcall_prev_register_first): Use dwarf2_frame_cfa.
+	(dwarf2_tailcall_sniffer_first): Remove variable pc_regnum.  Replace
+	gdbarch_pc_regnum and frame_unwind_register_unsigned by
+	gdbarch_unwind_pc.
+
+2011-10-20  Cary Coutant  <ccoutant at google.com>
+
+	* dwarf2read.c (dw2_get_file_names): Move adjustment for type
+	section to...
+	(partial_read_comp_unit_head): ...here.  Add is_debug_type_section
+	flag.  Adjust all callers.
+	(process_psymtab_comp_unit): Remove adjustment for type section.
+
+2011-10-20  Aleksandar Ristovski  <aristovski at qnx.com>
+
+	* cp-namespace.c (cp_scan_for_anonymous_namespaces): Changed function
+	arguments by adding OBJFILE.  Instead of getting objfile from
+	symbol's symtab, use new argument OBJFILE.
+	* cp-support.h (cp_scan_for_anonymous_namespaces): Changed function
+	arguments by adding OBJFILE.
+	* gdb/dwarf2read.c (new_symbol_full): Change call to
+	cp_scan_for_anonymous_namespaces to match new signature.
+	* gdb/stabsread.c (define_symbol): Change call to
+	cp_scan_for_anonymous_namespaces to match new signature.
+
+2011-10-20  Phil Muldoon  <pmuldoon at redhat.com>
+
+        PR python/13308
+        PR python/13309
+
+	* python/py-breakpoint.c (gdbpy_breakpoints): Fix List reference
+	leak.
+	* python/py-inferior.c (gdbpy_inferiors): Fix List reference
+	leak.  Delete unused variables.
+
+2011-10-20  Phil Muldoon  <pmuldoon at redhat.com>
+
+	PR python/12656
+
+	* python/py-frame.c (frapy_read_var): Use const struct *block.
+	* python/py-type.c (typy_lookup_typename): Likewise.
+	(typy_lookup_type): Likewise.
+	(typy_legacy_template_argument): Likewise.
+	(typy_template_argument): Likewise.
+	(gdbpy_lookup_type): Likewise.
+	* python/py-symbol.c (gdbpy_lookup_symbol): Likewise.
+	* python/py-block.c (blpy_block_object): Likewise.
+	(blpy_iter): Likewise.
+	(blpy_get_start): Likewise.
+	(blpy_get_end): Likewise.
+	(blpy_get_function): Likewise.
+	(blpy_get_superblock): Likewise.
+	(set_block):  Likewise.
+	(block_to_block_object): Likewise.
+	(block_object_to_block): Likewise.
+	(blpy_is_valid): Likewise.
+	(blpy_get_global_block): New function.
+	(blpy_get_static_block): New function.
+	(blpy_is_global): New function.
+	(blpy_is_static): New function.
+	* blockframe.c (block_innermost_frame): Likewise.
+	* valops.c (value_of_variable): Likewise.
+	* frame.h: Update prototypes.
+	* python/python-internal.h: Likewise.
+	* value.h: Likewise.
+
+2011-10-19  Cary Coutant  <ccoutant at google.com>
+
+	* dwarf2read.c (create_debug_types_hash_table): Fix size of
+	type_offset field.
+
+2011-10-19  Cary Coutant  <ccoutant at google.com>
+
+	* dwarf2read.c (peek_abbrev_code): New function.
+	(dw2_get_file_names): Check for dummy compilation units.
+	(create_debug_types_hash_table): Likewise.
+	(process_psymtab_comp_unit): Likewise.
+	(load_partial_comp_unit): Likewise.
+	(load_full_comp_unit): Likewise.
+
+2011-10-18  Aleksandar Ristovski  <aristovski at qnx.com>
+
+	* solib-svr4.c (read_program_header): New variables pt_phdr, pt_phdr_p,
+	initialize them from target PT_PHDR p_vaddr, relocate sect_addr by
+	pt_phdr if PT_PHDR was found.
+
+2011-10-17  Joost van der Sluis  <joost at cnoc.nl>
+
+	* gdbtypes.h: Added TYPE_SAFE_NAME macro to get the name of a
+	type or "<unnamed type"> when there is no name assigned.
+	* gnu-v3-abi.c (gnuv3_rtti_type): Use TYPE_SAFE_NAME macro to
+	avoid a sigint when no name is assigned.
+
+2011-10-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Revert:
+	2011-07-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
+        * dwarf2expr.c (ctx_no_read_reg): New function.
+        * dwarf2expr.h (ctx_no_read_reg): New declaration.
+        * dwarf2read.c (read_2_signed_bytes, read_4_signed_bytes): Remove.
+        (decode_locdesc_read_mem, decode_locdesc_ctx_funcs): New.
+        (decode_locdesc): Replace by a caller of dwarf_expr_eval.
+
+2011-10-16  Doug Evans  <dje at google.com>
+
+	* NEWS: Document python gdb.printing.register_pretty_printer's new
+	`replace' parameter.
+
+2011-10-14  Keith Seitz  <keiths at redhat.com>
+
+	PR c++/13225
+	* eval.c (evaluate_subexp_standard): Do not construct
+	an array of types; pass the value array directly to
+	find_overload_match.
+	* gdbtypes.h (NULL_POINTER_CONVERSION_BADNESS): Declare.
+	(rank_function): Take an array of values instead of types.
+	(rank_one_type): Add struct value * parameter.
+	* gdbtypes.c (NULL_POINTER_CONVERSION_BADNESS): Define.
+	(rank_function): For each argument, pass the argument's
+	value to rank_one_type.
+	(rank_one_type): Add VALUE parameter.
+	If the parameter type is a pointer and the argument type
+	is an integer, return NULL_POINTER_CONVERSION_BADNESS if
+	VALUE is zero.
+	Update all calls to rank_one_type, passing NULL for new
+	VALUE parameter.
+	* valarith.c (value_user_defined_cpp_op): Do not construct
+	an array of types; pass the value array directly to
+	find_overload_match.
+	* valops.c (find_overload_method_list): Take an array of
+	values instead of types.
+	Save the type of OBJP for later use.
+	Update calls to find_oload_champ, and find_oload_champ_namespace.
+	(find_oload_champ_namespace): Take an array of values instead
+	of types.
+	(find_oload_champ_namespace_loop): Likewise.
+	(find_oload_champ): Likewise.
+	(classify_oload_match): Inspect all arguments
+	until INCOMPATIBLE is found. Return the worst badness found
+	otherwise.
+	(compare_parameters): Update call to rank_one_type.
+	* value.h (find_overload_match): Take an array of values instead
+	of types.
+
+2011-10-14  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Drop lazy lm_info reading.
+	* solib-svr4.c (struct lm_info): Remove field lm.  New fields l_addr_p,
+	l_addr_inferior, l_ld, l_next, l_prev and l_name.
+	(lm_info_read): New function.
+	(lm_addr_from_link_map, lm_dynamic_from_link_map): Remove.
+	(lm_addr_check): Use l_addr_p.  No longer use lm_addr_from_link_map and
+	lm_dynamic_from_link_map.
+	(lm_next, lm_prev, lm_name): Remove.
+	(svr4_keep_data_in_core): Use lm_info_read, drop the lm_info entries
+	initialization incl. read_memory.  No longer use lm_name.
+	(svr4_free_so): Drop lm_info->lm freeing.
+	(svr4_default_sos): Initialize lminfo with zeroes.  Use l_addr_p.  Drop
+	explicit lm_addr and lm initialization.
+	(svr4_read_so_list): Use lm_info_read, drop the initailization of
+	fields by hand, incl. read_memory.  No longer use lm_next, lm_prev and
+	lm_name.
+
+2011-10-14  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	    Paul Pluzhnikov  <ppluzhnikov at google.com>
+
+	* defs.h (struct so_list): New forward declaration.
+	(make_cleanup_free_so): New declaration.
+	* solib-svr4.c (ignore_first_link_map_entry): Remove.
+	(svr4_free_so): Move the function here from downwards.  Handle NULL
+	so->lm_info.
+	(svr4_free_library_list): New.
+	(svr4_read_so_list): New, moved here code from svr4_current_sos.
+	Use more cleanups.  Use new parameter ignore_first instead of
+	ignore_first_link_map_entry.
+	(svr4_current_sos): New variable ignore_first, initialize it.  New
+	variable back_to, use it for svr4_free_library_list protection.
+	(svr4_free_so): Remove - move upwards.
+	* utils.c: Include solist.h.
+	(do_free_so, make_cleanup_free_so): New functions.
+
+2011-10-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix internal error regression.
+	* value.c (value_primitive_field): Handle value_optimized_out.  Move
+	packed bitfields comment.
+
+2011-10-13  Tom Tromey  <tromey at redhat.com>
+
+	* python/py-breakpoint.c (gdbpy_breakpoint_deleted): Ensure GIL is
+	always released.
+
+2011-10-13  Tom Tromey  <tromey at redhat.com>
+
+	* python/py-type.c (typy_has_key): Make 'field' const.
+
+2011-10-13  Luis Machado  <lgustavo at codesourcery.com>
+
+	* remote.c (remote_save_trace_data): Invert comparison.
+
+2011-10-13  Luis Machado  <lgustavo at codesourcery.com>
+
+	* tracepoint.c (trace_save_command): Use filename instead of
+	args when printing.
+
+2011-10-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* dwarf2read.c (dwarf2_fetch_die_location_block): Initialize .data even
+	if .size is 0.
+
+2011-10-13  Yao Qi  <yao at codesourcery.com>
+
+	PR gdb/12703
+	* arm-tdep.c (thumb_analyze_prologue): Call thumb_insn_size to check
+	whether insn is a 32-bit Thumb-2 instruction.
+	(thumb_in_function_epilogue_p): Likewise.
+	(thumb_get_next_pc_raw): Likewise.
+	(arm_breakpoint_from_pc): Likewise.
+
+2011-10-12  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix empty DWARF expressions DATA vs. SIZE conditionals.
+	* dwarf2loc.c (dwarf2_find_location_expression): Clear *LOCEXPR_LENGTH.
+	(dwarf_expr_frame_base_1): Indicate unavailability via zero *LENGTH.
+	(locexpr_tracepoint_var_ref): Check only zero SIZE, not zero DATA.
+	(loclist_read_variable, loclist_tracepoint_var_ref): Do not check for
+	zero DATA.
+	* dwarf2loc.h (struct dwarf2_locexpr_baton): Comment DATA vs. SIZE
+	validity.
+	* dwarf2read.c (struct dwarf_block): Comment DATA validity.
+	(dwarf2_fetch_die_location_block, dwarf2_symbol_mark_computed): Do not
+	clear DATA on zero SIZE.
+
+2011-10-12  Doug Evans  <dje at google.com>
+
+	* dwarf2read.c (partial_read_comp_unit_head): Set header->offset,
+	header->first_die_offset here.  All callers updated.
+
+2011-10-12  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix compatibility with texinfo versions older than 4.12.
+	* Makefile.in (MAKEINFO): Set to @MAKEINFO at .
+	(MAKEINFOFLAGS, MAKEINFO_EXTRA_FLAGS, MAKEINFO_CMD): New.
+	(MAKEHTMLFLAGS): Use MAKEINFO_CMD.
+	(FLAGS_TO_PASS): Add MAKEINFOFLAGS and MAKEINFO_EXTRA_FLAGS.
+	* configure: Regenerate.
+	* configure.ac (MAKEINFO): Find it, from libiberty/configure.ac.
+	(MAKEINFOFLAGS): Pre-set it to --split-size=5000000.
+	(MAKEINFO_EXTRA_FLAGS): New test for -DHAVE_MAKEINFO_CLICK.
+
+2011-10-12  Gary Benson  <gbenson at redhat.com>
+
+	* breakpoint.h (pc_at_non_inline_function): Declare.
+	* breakpoint.c (is_non_inline_function,
+	pc_at_non_inline_function): New functions.
+	* infrun.c (handle_inferior_event): Don't call skip_inline_frames
+	if the stop is at a location where functions cannot be inlined.
+
+2011-10-12  Pedro Alves  <pedro at codesourcery.com>
+
+	* linux-nat.c (stop_and_resume_callback): Don't re-resume LWPs if
+	the core wanted them stopped, or if they now have a pending event
+	to report.
+	(linux_nat_filter_event): New parameter `new_pending_p'.  Pass it
+	down to stop_and_resume_callback.
+	(linux_nat_wait_1): Always clear `options' when retrying.  Handle
+	having new pending events after calling linux_nat_filter_event.
+
+2011-10-11  Sterling Augustine  <saugustine at google.com>
+
+	* dwarf2read.c: Undo inadvertent changes in previous commit.
+
+2011-10-11  Sterling Augustine  <saugustine at google.com>
+
+	* dwarf2read.c (partial_die_parent_scope): Rearrange conditional
+	logic.
+
+2011-10-11  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* symfile.c (separate_debug_file_exists): Fix condition.
+
+2011-10-11  David S. Miller  <davem at davemloft.net>
+
+	* regcache.c (regcache_restore): Do not write unavailable regs, mark
+	static.
+	* regcache.h (regcache_restore): Remove declaration.
+
+	* gdbarch.sh: New field 'long_long_align_bit'.
+	* gdbarch.c, gdbarch.h: Regenerate.
+	* i386-tdep.c (i386_gdbarch_init): Set long_long_align_bit to 32.
+	* jit.c (jit_read_code_entry): Use it to determine correct size offset.
+
+2011-10-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Revert this part of:
+	2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	Support @entry in input expressions.
+	* c-exp.y (ENTRY, unknown_cpp_name): New.
+	(exp: UNKNOWN_CPP_NAME): Change to `exp: unknown_cpp_name'.
+	(unknown_cpp_name: UNKNOWN_CPP_NAME, unknown_cpp_name: ENTRY)
+	(variable: name_not_typename '@' ENTRY, name: ENTRY)
+	(name_not_typename: ENTRY): New.
+	(yylex): Recognize ENTRY.
+
+	Reimplement @entry in input expressions.
+	* c-exp.y (ENTRY): New.
+	(variable: name_not_typename ENTRY): New.
+	(lex_one_token): Optionally return ENTRY instead of the '@' lex.
+
+2011-10-11  Pedro Alves  <pedro at codesourcery.com>
+
+	* linux-nat.c (linux_handle_extended_wait): Always dump both the
+	parent and child's pids as soon as we detect a clone event.
+	Adjust another debug message.
+
+2011-10-11  Pedro Alves  <pedro at codesourcery.com>
+
+	* linux-nat.c (linux_lwp_is_zombie): Return early if the LWP is
+	not zombie instead of reading the whole file.
+
+2011-10-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix separate debuginfo warning with "remote:" access.
+	* objfiles.h (struct objfile): New fields crc32 and crc32_p.
+	* symfile.c (get_file_crc): New function with the code moved from ...
+	(separate_debug_file_exists): ... this function, specifically variables
+	buffer and count.  New variable verified_as_different, set it.  Remove
+	file_crc initialization.  Verify also if both files are not the same
+	manually, if needed.
+
+2011-10-11  Yao Qi  <yao at codesourcery.com>
+
+	* arm-tdep.c (arm_get_next_pc_raw): Use read_memory_unsigned_integer
+	to get address.
+
+2011-10-10  Doug Evans  <dje at google.com>
+
+	* linux-thread-db.c (thread_db_new_objfile): Only try to load
+	libthread_db when we load libpthread or the main symbol file.
+	(thread_db_inferior_created): New function.
+	(_initialize_thread_db): Attach inferior_created observer.
+	* linux-nat.c (linux_child_post_attach): Remove call to
+	check_for_thread_db.
+	(linux_child_post_startup_inferior): Ditto.
+	* objfiles.h (OBJF_MAINLINE): Define.
+	* symfile.c (symbol_file_add_with_addrs_or_offsets): Pass it to
+	allocate_objfile when appropriate.
+
+2011-10-10  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	PR gdb/13218
+	* arm-linux-nat.c (os_version, os_major, os_minor, os_release):
+	Remove unused variables.
+	(get_linux_version): Remove function.
+	(_initialize_arm_linux_nat): Do not call it.
+
+2011-10-10  Pedro Alves  <pedro at codesourcery.com>
+
+	* linux-nat.c (linux_handle_extended_wait): Don't resume the new
+	new clone lwp if the core asked it to stop.  Don't pass on
+	unexpected signals to the new clone; leave them pending instead.
+
+2011-10-10  Pedro Alves  <pedro at codesourcery.com>
+
+	* linux-nat.c (resume_lwp): Remove redundant debug output.
+
+2011-10-10  Pedro Alves  <pedro at codesourcery.com>
+
+	* linux-nat.c (linux_nat_wait_1): Copy the event lwp's
+	last_resume_kind before clearing it, and use the copy instead to
+	determine whether to report a SIGSTOP as TARGET_SIGNAL_0.  Use
+	resume_clear_callback in the non-stop path too.
+
+2011-10-09  Yao Qi  <yao at codesourcery.com>
+
+	* valprint.c (value_check_printable): Add one parameter OPTIONS.
+	Honor OPTIONS and VAL's type.
+	(common_val_print, value_print): Update to pass one more parameter.
+
+2011-10-09  Doug Evans  <dje at google.com>
+
+	Add new "alias" command.
+	* NEWS: Mention new command.
+	* command.h (valid_user_defined_cmd_name_p): Declare.
+	* defs.h (make_cleanup_dyn_string_delete): Declare.
+	* utils.c: #include "dyn-string.h".
+	(do_dyn_string_delete, make_cleanup_dyn_string_delete): New functions.
+	* cli/cli-cmds.c: #include "dyn-string.h".
+	(argv_to_dyn_string, valid_command_p, alias_command): New functions.
+	(init_cli_cmds): Add new command.
+	* cli/cli-decode.c (valid_user_defined_cmd_name_p): New function.
+
+2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix compatibility with older GCCs.
+	* dwarf2loc.c (dwarf_expr_reg_to_entry_parameter): Initialize parameter.
+	* stack.c (read_frame_arg): Initialize val_deref.
+
+2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Entry values NEWS entries, DWARF disassembly support.
+	* NEWS: New entry values entry.
+	(set print entry-values, show print entry-values)
+	(set debug entry-values, show debug entry-values): New entries.
+	* dwarf2loc.c (disassemble_dwarf_expression): New parameters start and
+	indent.  Remove variable start.  Move header printing out.  Respect
+	INDENT.  Support DW_OP_GNU_entry_value.
+	(locexpr_describe_location_1): Move the header printing here, extend
+	the disassemble_dwarf_expression passed parameters.
+
+2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Display @entry parameter values even for references.
+	* ada-valprint.c (ada_val_print_1) <TYPE_CODE_REF>: Try also
+	coerce_ref_if_computed.
+	* c-valprint.c (c_val_print) <TYPE_CODE_REF>: Likewise.
+	* dwarf2expr.c (dwarf_block_to_dwarf_reg_deref): New function.
+	(execute_stack_op) <DW_OP_GNU_entry_value>: Add -1 deref_size to the
+	existing push_dwarf_reg_entry_value call.  Add new detection calling
+	dwarf_block_to_dwarf_reg_deref.  Update the error message.
+	(ctx_no_push_dwarf_reg_entry_value): New parameter deref_size.
+	* dwarf2expr.h
+	(struct dwarf_expr_context_funcs) <push_dwarf_reg_entry_value>: Add new
+	parameter deref_size, describe it in the comment.
+	(ctx_no_push_dwarf_reg_entry_value): Add new parameter deref_size.
+	(dwarf_block_to_dwarf_reg_deref): New declaration.
+	* dwarf2loc.c (dwarf_entry_parameter_to_value): Add new parameter
+	deref_size, describe it in the function comment.  New variables
+	data_src and size, fetch the alternative block accoring to DEREF_SIZE.
+	(dwarf_expr_push_dwarf_reg_entry_value): Add new parameter deref_size,
+	describe it in the function comment.  Fetch the alternative block
+	accoring to DEREF_SIZE.
+	(entry_data_value_coerce_ref, entry_data_value_copy_closure)
+	(entry_data_value_free_closure, entry_data_value_funcs): New.
+	(value_of_dwarf_reg_entry): New variables checked_type, target_type,
+	outer_val, target_val, val and addr.  Try to fetch and create also
+	referenced value content.
+	(pieced_value_funcs): NULL value for coerce_ref.
+	(needs_dwarf_reg_entry_value): Add new parameter deref_size.
+	* f-valprint.c (f_val_print) <TYPE_CODE_REF>: Try also
+	coerce_ref_if_computed.
+	* opencl-lang.c (opencl_value_funcs): NULL value for coerce_ref.
+	* p-valprint.c (pascal_val_print) <TYPE_CODE_REF>: Likewise.
+	* stack.c (read_frame_arg): Compare also dereferenced values.
+	* value.c (value_computed_funcs): Make the parameter v const, use
+	value_lval_const for it.
+	(value_lval_const, coerce_ref_if_computed): New function.
+	(coerce_ref): New variable retval.  Call also coerce_ref_if_computed.
+	* value.h (struct lval_funcs): New field coerce_ref.
+	(value_computed_funcs): Make the parameter v const.
+	(value_lval_const, coerce_ref_if_computed): New declarations.
+
+2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Support @entry in input expressions.
+	* c-exp.y (ENTRY, unknown_cpp_name): New.
+	(exp: UNKNOWN_CPP_NAME): Change to `exp: unknown_cpp_name'.
+	(unknown_cpp_name: UNKNOWN_CPP_NAME, unknown_cpp_name: ENTRY)
+	(variable: name_not_typename '@' ENTRY, name: ENTRY)
+	(name_not_typename: ENTRY): New.
+	(yylex): Recognize ENTRY.
+	* eval.c (evaluate_subexp_standard): Support also OP_VAR_ENTRY_VALUE.
+	* expprint.c (print_subexp_standard, dump_subexp_body_standard):
+	Likewise.
+	* parse.c (operator_length_standard): Likewise.
+	* std-operator.def: New operator OP_VAR_ENTRY_VALUE.
+
+2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Display referenced values in backtraces.
+	* printcmd.c (print_variable_and_value): Set OPTS.DEREF_REF to 1.
+	* stack.c (print_frame_arg): Likewise.
+
+2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Make some lval_funcs methods to default on NULL.
+	* valops.c (value_fetch_lazy): Check if lval_computed read method is
+	NULL.
+	(value_assign): Check if lval_computed write method is NULL.
+	* value.h (struct lval_funcs): Comment NULL values for read and write
+	methods.
+
+2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Display @entry parameter values (without references).
+	* dwarf2expr.c (dwarf_block_to_fb_offset, dwarf_block_to_sp_offset):
+	New functions.
+	* dwarf2expr.h (dwarf_block_to_fb_offset, dwarf_block_to_sp_offset):
+	New declarations.
+	* dwarf2loc.c (dwarf2_find_location_expression): Support location list
+	entry record.
+	(dwarf_entry_parameter_to_value, value_of_dwarf_reg_entry)
+	(value_of_dwarf_block_entry, locexpr_read_variable_at_entry): New
+	functions.
+	(dwarf2_locexpr_funcs): Install locexpr_read_variable_at_entry.
+	(loclist_read_variable_at_entry): New function.
+	(dwarf2_loclist_funcs): Install loclist_read_variable_at_entry.
+	* dwarf2read.c (read_call_site_scope): Support also DW_OP_fbreg in
+	DW_AT_location, call dwarf_block_to_sp_offset for it.
+	* frame.h (print_entry_values_no, print_entry_values_only)
+	(print_entry_values_preferred, print_entry_values_if_needed)
+	(print_entry_values_both, print_entry_values_compact)
+	(print_entry_values_default, print_entry_values): New declarations.
+	(struct frame_arg): New field entry_kind.
+	(read_frame_arg): New parameter entryargp.
+	* mi/mi-cmd-stack.c (list_arg_or_local): New gdb_assert for
+	arg->entry_kind.  Optionally print the `@entry' suffix.
+	(list_args_or_locals): New variable entryarg, initialize it.
+	Initialize also entry_kind of arg and entryarg.  Conditionalize
+	list_arg_or_local for arg, add list_arg_or_local for entryarg.  Call
+	xfree for entryarg.error.
+	* stack.c (print_entry_values_no, print_entry_values_only)
+	(print_entry_values_preferred, print_entry_values_if_needed)
+	(print_entry_values_both, print_entry_values_compact)
+	(print_entry_values_default, print_entry_values_choices)
+	(print_entry_values): New variables.
+	(print_frame_arg): New gdb_assert for arg->entry_kind.  Optionally
+	print the `@entry' suffix, possibly in combination for
+	print_entry_values_compact.
+	(read_frame_arg): New parameter entryargp, new variables entryval,
+	entryval_error and val_equal.  Read in also entryargp, respect
+	print_entry_values, compare the values using val_equal, fill in also
+	argp->entry_kind (together with entryargp->entry_kind).
+	(print_frame_args): New variable entryarg, initialize it.
+	Conditionalize print_frame_arg for arg, add print_frame_arg for
+	entryarg.  Call xfree for entryarg.error.
+	(_initialize_stack): Call add_setshow_enum_cmd for `entry-values'.
+	* symtab.h (struct symbol_computed_ops): New field
+	read_variable_at_entry.
+
+2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code reshuffle.
+	* frame.h (struct frame_arg): New definition.
+	(read_frame_arg): New declaration.
+	* mi/mi-cmd-stack.c (list_arg_or_local): New functiom from ...
+	(list_args_or_locals): ... the code here.  New variable arg, call
+	read_frame_arg and list_arg_or_local with it.  Unify the
+	PRINT_SIMPLE_VALUES and PRINT_ALL_VALUES cases.  Call xfree for
+	arg.error.
+	* stack.c (print_frame_arg): New functiom from the code of
+	print_frame_args.
+	(read_frame_arg): New function.
+	(print_frame_args): Remove variable val.  New variable arg, call
+	read_frame_arg and print_frame_arg with it.  Call xfree for arg.error.
+
+2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Protect entry values against self tail calls.
+	* dwarf2loc.c (VEC (CORE_ADDR), func_verify_no_selftailcall): New.
+	(dwarf_expr_dwarf_reg_entry_value): Call func_verify_no_selftailcall.
+
+2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Recognize virtual tail call frames.
+	* Makefile.in (SFILES): Add dwarf2-frame-tailcall.c.
+	(HFILES_NO_SRCDIR): Add dwarf2-frame-tailcall.h.
+	(COMMON_OBS): Add dwarf2-frame-tailcall.o.
+	* dwarf2-frame-tailcall.c: New file.
+	* dwarf2-frame-tailcall.h: New file.
+	* dwarf2-frame.c: Include dwarf2-frame-tailcall.h.
+	(execute_cfa_program): New function comment.  Return INSN_PTR.  Reset
+	REGS.PREV only after CIE execution.
+	(struct dwarf2_frame_cache): New field tailcall_cache.
+	(dwarf2_frame_cache): New variables entry_pc, entry_cfa_sp_offset,
+	entry_cfa_sp_offset_p and instr.  Execute FDE instructions in two
+	parts, try to find entry_cfa_sp_offset.  Call
+	dwarf2_tailcall_sniffer_first.
+	(dwarf2_frame_prev_register): Call dwarf2_tailcall_prev_register_first
+	when appropriate.
+	(dwarf2_frame_dealloc_cache): New function.
+	(dwarf2_frame_sniffer): Preinitialize cache by dwarf2_frame_cache.
+	(dwarf2_frame_unwind): Install dwarf2_frame_dealloc_cache.
+	(dwarf2_signal_frame_unwind): Do not install dwarf2_frame_dealloc_cache.
+	(dwarf2_append_unwinders): Add dwarf2_tailcall_frame_unwind.
+	(dwarf2_frame_cfa): Support also dwarf2_tailcall_frame_unwind.
+	* dwarf2loc.c (func_addr_to_tail_call_list)
+	(tailcall_dump, call_sitep, VEC (call_sitep), chain_candidate)
+	(call_site_find_chain_1, call_site_find_chain): New.
+	* dwarf2loc.h (struct call_site_chain): New.
+	(call_site_find_chain): New declaration.
+	* frame.c (get_frame_address_in_block): Support also TAILCALL_FRAME.
+	* frame.h (enum frame_type): New entry TAILCALL_FRAME.
+	* python/py-frame.c (gdbpy_initialize_frames): Add TAILCALL_FRAME.
+	* stack.c (frame_info): Support also TAILCALL_FRAME.
+
+2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Tail call sites reader implementation.
+	* dwarf2read.c (read_call_site_scope): Recognize DW_AT_GNU_tail_call,
+	fill in TYPE_TAIL_CALL_LIST.
+	* gdbtypes.h (struct func_type): New field tail_call_list.
+	(struct call_site): New field tail_call_next.
+	(TYPE_TAIL_CALL_LIST): New definition.
+
+2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Implement basic support for DW_TAG_GNU_call_site.
+	* block.c: Include gdbtypes.h and exceptions.h.
+	(call_site_for_pc): New function.
+	* block.h (call_site_for_pc): New declaration.
+	* defs.h: Include hashtab.h.
+	(make_cleanup_htab_delete, core_addr_hash, core_addr_eq): New
+	declarations.
+	* dwarf2-frame.c (dwarf2_frame_ctx_funcs): Install
+	ctx_no_push_dwarf_reg_entry_value.
+	* dwarf2expr.c (read_uleb128, read_sleb128): Support R as NULL.
+	(dwarf_block_to_dwarf_reg): New function.
+	(execute_stack_op) <DW_OP_GNU_entry_value>: Implement it.
+	(ctx_no_push_dwarf_reg_entry_value): New function.
+	* dwarf2expr.h (struct dwarf_expr_context_funcs): New field
+	push_dwarf_reg_entry_value.
+	(ctx_no_push_dwarf_reg_entry_value, dwarf_block_to_dwarf_reg): New
+	declarations.
+	* dwarf2loc.c: Include gdbcmd.h.
+	(dwarf_expr_ctx_funcs): New forward declaration.
+	(entry_values_debug, show_entry_values_debug, call_site_to_target_addr)
+	(dwarf_expr_reg_to_entry_parameter)
+	(dwarf_expr_push_dwarf_reg_entry_value): New.
+	(dwarf_expr_ctx_funcs): Install dwarf_expr_push_dwarf_reg_entry_value.
+	(dwarf2_evaluate_loc_desc_full): Handle NO_ENTRY_VALUE_ERROR.
+	(needs_dwarf_reg_entry_value): New function.
+	(needs_frame_ctx_funcs): Install it.
+	(_initialize_dwarf2loc): New function.
+	* dwarf2loc.h (entry_values_debug): New declaration.
+	* dwarf2read.c (struct dwarf2_cu): New field call_site_htab.
+	(read_call_site_scope): New forward declaration.
+	(process_full_comp_unit): Copy call_site_htab.
+	(process_die): Support DW_TAG_GNU_call_site.
+	(read_call_site_scope): New function.
+	(dwarf2_get_pc_bounds): Support NULL HIGHPC.
+	(dwarf_tag_name): Support DW_TAG_GNU_call_site.
+	(cleanup_htab): Delete.
+	(write_psymtabs_to_index): Use make_cleanup_htab_delete instead of it.
+	* exceptions.h (enum errors): New NO_ENTRY_VALUE_ERROR.
+	* gdb-gdb.py (StructMainTypePrettyPrinter): Support
+	FIELD_LOC_KIND_DWARF_BLOCK.
+	* gdbtypes.h (enum field_loc_kind): New entry
+	FIELD_LOC_KIND_DWARF_BLOCK.
+	(struct main_type): New loc entry dwarf_block.
+	(struct call_site, FIELD_DWARF_BLOCK, SET_FIELD_DWARF_BLOCK)
+	(TYPE_FIELD_DWARF_BLOCK): New.
+	* python/py-type.c: Include dwarf2loc.h.
+	(check_types_equal): Support FIELD_LOC_KIND_DWARF_BLOCK.  New
+	internal_error call on unknown FIELD_LOC_KIND.
+	* symtab.h (struct symtab): New field call_site_htab.
+	* utils.c (do_htab_delete_cleanup, make_cleanup_htab_delete)
+	(core_addr_hash, core_addr_eq): New functions.
+
+2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code reshuffle.
+	* gdb-gdb.py (StructMainTypePrettyPrinter): Change
+	TYPE_SPECIFIC_CALLING_CONVENTION to TYPE_SPECIFIC_FUNC.  Move
+	calling_convention under func_stuff there.
+	* gdbtypes.c (make_function_type): Call INIT_FUNC_SPECIFIC.
+	(init_type) <TYPE_CODE_FUNC>: Likewise.
+	(recursive_dump_type): Change TYPE_SPECIFIC_CALLING_CONVENTION to
+	TYPE_SPECIFIC_FUNC.  New comment for tail_call_list.
+	* gdbtypes.h (enum type_specific_kind): Change
+	TYPE_SPECIFIC_CALLING_CONVENTION to TYPE_SPECIFIC_FUNC.
+	(struct main_type) <type_specific>: Change calling_convention to
+	func_stuff.  Move calling_convention to ...
+	(struct func_type): ... this new struct.
+	(INIT_FUNC_SPECIFIC): New #define.
+	(TYPE_CALLING_CONVENTION): Change calling_convention to func_stuff.
+
+2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix DW_OP_GNU_implicit_pointer for DWARF32 v3+ on 64-bit arches.
+	* dwarf2-frame.c (execute_stack_op): Initialize ctx->ref_addr_size.
+	* dwarf2expr.c (execute_stack_op) <DW_OP_GNU_implicit_pointer>: Use
+	ctx->ref_addr_size.  Handle its invalid value.
+	* dwarf2expr.h (struct dwarf_expr_context): New field ref_addr_size.
+	* dwarf2loc.c (dwarf2_evaluate_loc_desc_full)
+	(dwarf2_loc_desc_needs_frame): Initialize ctx->ref_addr_size.
+	* dwarf2loc.h (dwarf2_per_cu_ref_addr_size): New declaration.
+	* dwarf2read.c (decode_locdesc): Initialize ctx->ref_addr_size.
+	(dwarf2_per_cu_ref_addr_size): New function.
+
+2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup.
+	* dwarf2read.c (per_cu_header_read_in): New function.
+	(dwarf2_per_cu_addr_size, dwarf2_per_cu_offset_size): Use it, with new
+	variables cu_header_local and cu_headerp.
+
+2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix initial language detection with -readnow.
+	* dwarf2read.c (dw2_find_symbol_file): Handle OBJF_READNOW case.
+	* symfile.h (struct quick_symbol_functions): State find_symbol_file
+	searches only for global symbols.
+
+2011-10-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix printed anonymous struct name.
+	* dwarf2read.c (fixup_partial_die): Handle for anonymous structs also
+	DW_TAG_interface_type.  Strip for anonymous structs any prefixes.
+	(anonymous_struct_prefix): New function.
+	(determine_prefix): New variables retval.  Call anonymous_struct_prefix.
+	(dwarf2_name): Strip for anonymous structs any prefixes.
+
+2011-10-07  Doug Evans  <dje at google.com>
+
+	* python/lib/gdb/printing.py (register_pretty_printer): New argument
+	`replace'.
+
+	* python/lib/gdb/printing.py: Whitespace cleanup.
+
+	* python/py-value.c (valpy_call): Initialize ftype to avoid compiler
+	warning.
+
+2011-10-07  Pedro Alves  <pedro at codesourcery.com>
+
+	* linux-nat.h (ALL_LWPS): Remove the ptid parameter.
+	* amd64-linux-nat.c (amd64_linux_dr_set_control)
+	(amd64_linux_dr_set_addr, amd64_linux_dr_unset_status): Adjust.
+	* arm-linux-nat.c (arm_linux_insert_hw_breakpoint)
+	(arm_linux_remove_hw_breakpoint, arm_linux_insert_watchpoint)
+	(arm_linux_remove_watchpoint): Adjust.
+	* i386-linux-nat.c (i386_linux_dr_set_control)
+	(i386_linux_dr_set_addr, i386_linux_dr_unset_status): Adjust.
+	* ia64-linux-nat.c (ia64_linux_insert_watchpoint)
+	(ia64_linux_remove_watchpoint): Adjust.
+	* mips-linux-nat.c (write_watchpoint_regs): Adjust.
+	* ppc-linux-nat.c (ppc_linux_insert_hw_breakpoint)
+	(ppc_linux_insert_hw_breakpoint, ppc_linux_remove_hw_breakpoint)
+	(ppc_linux_insert_mask_watchpoint)
+	(ppc_linux_remove_mask_watchpoint, ppc_linux_insert_watchpoint)
+	(ppc_linux_remove_watchpoint): Adjust.
+	* s390-nat.c (s390_insert_watchpoint, s390_remove_watchpoint):
+	Adjust.
+
+2011-10-07  Corinna Vinschen  <vinschen at redhat.com>
+
+	* windows-nat.c: Include wchar.h to avoid compiler warnings.
+	(clear_win32_environment): New function for Cygwin to clear out
+	Win32 environment.
+	(windows_create_inferior): Prepare new environment from in_env
+	for Cygwin, too.
+
+2011-10-07  Phil Muldoon  <pmuldoon at redhat.com>
+
+	PR python/13264
+	* python/py-value.c (valpy_call): Check that arguments are
+	a tuple.
+        (is_intlike): Remove call to CHECK_TYPEDEF.
+	(valpy_nonzero): Catch GDB exceptions.
+	(valpy_absolute): Ditto.
+        (valpy_lazy_string): Ditto.
+        (valpy_call): Ditto.
+        (valpy_get_is_optimized_out): Ditto.
+        (valpy_long): Ditto.
+        (valpy_float): Ditto.
+        (valpy_int): Call CHECK_TYPEDEF.  Catch GDB exceptions.
+        (valpy_richcompare): Ditto.
+
+2011-10-07  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* inferior.h (disable_randomization): Declare.
+	* infrun.c (disable_randomization): New global variable.
+	(show_disable_randomization): New function.
+	(set_disable_randomization): Likewise.
+	(_initialize_infrun): Install set/show disable-randomization
+	commands.
+	* linux-nat.c (disable_randomization): Remove.
+	(show_disable_randomization): Likewise.
+	(set_disable_randomization): Likewise.
+	(_initialize_linux_nat): No longer install set/show
+	disable-randomization commands here.
+	(linux_nat_supports_disable_randomization): New function.
+	(linux_nat_add_target): Install it.
+	* remote.c (PACKET_QDisableRandomization): New enum value.
+	(remote_protocol_packets): Support QDisableRandomization.
+	(_initialize_remote): Likewise.
+	(remote_supports_disable_randomization): New function.
+	(init_remote_ops): Install it.
+	(extended_remote_supports_disable_randomization): New function.
+	(init_extended_remote_ops): Install it.
+	(extended_remote_disable_randomization): New function.
+	(extended_remote_create_inferior_1): Call it.
+	* target.h (struct target_ops): Add to_supports_disable_randomization.
+	(target_supports_disable_randomization): Add prototype.
+	* target.c (target_supports_disable_randomization): New function.
+	(find_default_supports_disable_randomization): Likewise.
+	(init_dummy_target): Install it.
+
+2011-10-07  Kevin Pouget  <kevin.pouget at st.com>
+
+	Allow Python notification of new object-file loadings.
+	* Makefile.in (SUBDIR_PYTHON_SRCS): Add py-newobjfilevent.c.
+	(SUBDIR_PYTHON_OBS): Add py-newobjfileevent.o.
+	Add build rule for this file.
+	* python/py-event.h (emit_new_objfile_event): New prototype.
+	(newobjfile): New Python event emitter.
+	* python/py-evts.c (gdbpy_initialize_py_events): Add new_objfile to
+	Python event registry.
+	* python/py-inferior.c: Include objfiles.h
+	(python_new_objfile): New function.
+	(gdbpy_initialize_inferior): Add python_new_objfile to the new objfile
+	observers.
+	* python/py-newobjfileevent.c: New file.
+	* python-internal.h (gdbpy_initialize_new_objfile_event): New
+	prototype.
+	* python/python.c (_initialize_python): Add 
+	gdbpy_initialize_new_objfile_event call.
+	* NEWS: Add item for new Python event "gdb.newobjfile"
+
+2011-10-05  Tristan Gingold  <gingold at adacore.com>
+
+	* ada-tasks.c (read_atcb): Make ravenscar_task_name static.
+	Extract the ravenscar task name from the symbol for the atcb.
+
+2011-10-04  Paul Koning  <paul_koning at dell.com>
+
+	* python/py-type.c (typy_make_iter): Add forward declaration.
+	(typy_fields_items):  Use the gdb.Type iterator.
+
+2011-10-04  Paul Koning  <paul_koning at dell.com>
+
+	* NEWS: Add entry for Python gdb.Type mapping methods.
+
+2011-10-04  Kevin Pouget  <kevin.pouget at st.com>
+
+	PR python/12691: Add the inferior to Python exited event
+	* python/py-exitedevent.c (create_exited_event_object): Add inferior
+	to exited_event.
+	* python/py-event.h (emit_exited_event): Likewise
+	* python/-inferior.c (python_inferior_exit): Likewise
+
+2011-10-03  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-tasks.c (print_ada_task_info): Add "thread-id" field
+	in output of -ada-task-info GDB/MI command.
+
+2011-10-03  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-lang.h (struct inferior): Declare.
+	(print_ada_task_info): Add declaration.
+	* ada-tasks.c (print_ada_task_info): Make non-static.
+	* mi/mi-cmds.c (mi_cmds): Add "ada-task-info".
+	* mi/mi-cmds.h (mi_cmd_ada_task_info): Add declaration.
+	* mi/mi-main.c: #include "ada-lang.h".
+	(mi_cmd_list_features): Add "ada-task-info" to the list
+	of supported features.
+	(mi_cmd_ada_task_info): New function.
+
+2011-10-03  Joel Brobecker  <brobecker at adacore.com>
+
+	* python/python.c (python_run_simple_file): New function.
+	(source_python_script, source_python_script_for_objfile):
+	Replace call to PyRun_SimpleFile by call to
+	python_run_simple_file.
+
+2011-10-03  Paul Koning  <paul_koning at dell.com>
+
+	* python/py-value.c (valpy_get_address): Use Py_XINCREF.
+	(value_to_value_object): Fetch value if it was lazy.
+
+2011-10-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup.
+	* solib-svr4.c (svr4_default_sos):  Remove variables head and link_ptr.
+	Rearrange the code for it.
+
+2011-10-02  Joel Brobecker  <brobecker at adacore.com>
+
+	* breakpoint.c (bkpt_print_recreate): Add call to
+	print_recreate_thread.
+
+2011-09-29  Mike Frysinger  <vapier at gentoo.org>
+
+	* common/linux-ptrace.h (PTRACE_GETFDPIC, PTRACE_GETFDPIC_EXEC,
+	PTRACE_GETFDPIC_INTERP): Define.
+
+2011-09-28  Yao Qi  <yao at codesourcery.com>
+
+	* symfile.c (add_symbol_file_command): Update message on usage.
+
+2011-09-28  Paul Koning  <paul_koning at dell.com>
+
+	* python/py-type.c (make_fielditem, typy_field_names, typy_items)
+	(typy_length, typy_get, typy_has_key, typy_make_iter)
+	(typy_iterkeys, typy_iteritems, typy_itervalues, typy_iter)
+	(typy_iterator_iter, typy_iterator_iternext)
+	(typy_iterator_dealloc): New functions to implement standard
+	Python mapping methods on gdb.Type object.
+	(gdb.TypeIterator): New Python type.
+	* python/python-internal.h (gdbpy_iter_kind): New enum.
+
+2011-09-28  David S. Miller  <davem at davemloft.net>
+
+	* sparc-tdep.h (SPARC_F2_REGNUM, SPARC_F3_REGNUM, SPARC_F4_REGNUM,
+	SPARC_F5_REGNUM, SPARC_F6_REGNUM, SPARC_F7_REGNUM): New enums.
+	* sparc-tdep.c (sparc_complex_floating_p): New function.
+	(sparc32_store_arguments): Handle complex floats.
+	(sparc32_extract_return_value): Likewise.
+	(sparc32_store_return_value): Likewise.
+	(sparc32_stabs_argument_has_addr): Likewise.
+	* sparc64-tdep.c (sparc64_complex_floating_p): New function.
+	(sparc64_store_floating_fields): Handle complex floats.
+	(sparc64_store_arguments): Likewise.
+	(sparc64_store_return_value): Likewise.
+
+2011-09-28  Eli Zaretskii  <eliz at gnu.org>
+
+	* windows-nat.c (env_sort) [!__CYGWIN__]: Function restored from
+	before the change on 2006-12-09.
+	(windows_create_inferior) [!__CYGWIN__]: Restore code that
+	generates the environment block for CreateProcessA, modulo the
+	Cygwin-specific parts that are not needed here.
+
+2011-09-27  Tristan Gingold  <gingold at adacore.com>
+
+	* target.h (enum target_object): Add TARGET_OBJECT_DARWIN_DYLD_INFO.
+	* solib-darwin.c (DYLD_VERSION_MAX): Update number.
+	(darwin_solib_get_all_image_info_addr_at_init): New function.
+	(darwin_solib_read_all_image_info_addr): Likewise.
+	(darwin_solib_create_inferior_hook): Use the above two functions.
+	* darwin-nat.c (darwin_execvp): Renames retval to res.
+	(darwin_read_write_inferior): Update comment.
+	(darwin_read_dyld_info): New function.
+	(darwin_xfer_partial): Handle DYLD_INFO.
+
+2011-09-27  Stan Shebs  <stan at codesourcery.com>
+
+	Add return address collection for tracepoints.
+	* tracepoint.c (encode_actions_1): Add case for $_ret.
+	(validate_actionline): Check for $_ret.
+	(trace_dump_actions): Ditto.
+	* ax-gdb.h (gen_trace_for_return_address): Declare.
+	* ax-gdb.c: Include arch-utils.h.
+	(gen_trace_for_return_address): New function.
+	(agent_command): Add return address special case.
+	* amd64-tdep.c: Include ax.h and ax-gdb.h.
+	(amd64_gen_return_address): New function.
+	(amd64_init_abi): Call it.
+	* i386-tdep.c: Include ax.h and ax-gdb.h.
+	(i386_gen_return_address): New function.
+	(i386_init_abi): Call it.
+	* arch-utils.h (default_gen_return_address): Declare.
+	* arch-utils.c (default_gen_return_address): New function.
+	* gdbarch.sh (gen_return_address): New method.
+	* gdbarch.h, gdbarch.c: Regenerate.
+
+2011-09-23  Joseph Myers  <joseph at codesourcery.com>
+
+	PR gdb/13079
+	* i386-tdep.c (i386_frame_align): New.
+	(i386_gdbarch_init): Use i386_frame_align.
+
+2011-09-23  Yao Qi  <yao at codesourcery.com>
+
+	* i386-linux-nat.c (i386_linux_resume): Use read_memory_unsigned_integer
+	to get address.
+
+2011-09-22  Tristan Gingold  <gingold at adacore.com>
+
+	* fork-child.c (fork_inferior): Add exec_fun parameter.
+	Call exec_fun or execvp.
+	* inferior.h: Adjust prototype.
+	* gnu-nat.c (gnu_create_inferior): Adjust fork_inferior call.
+	* inf-ttrace.c (inf_ttrace_create_inferior): Ditto.
+	* inf-ptrace.c (inf_ptrace_create_inferior): Ditto.
+	* procfs.c (procfs_create_inferior): Ditto.
+	* darwin-nat.c (darwin_execvp): New function.
+	(darwin_create_inferior): Use it.
+
+2011-09-22  Yao Qi  <yao at codesourcery.com>
+
+	* infrun.c (context_switch): Print debug message when switching to
+	a different thread.
+
+2011-09-21  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* s390-tdep.c (s390_function_arg_pass_by_reference): Handle
+	complex and vector types.
+	(s390_return_value_convention): Likewise.
+
+	(s390_value_from_register): Call check_typedef.
+	(extend_simple_arg): Likewise.
+	(alignment_of): Likewise.
+	(s390_push_dummy_call): Likewise.
+	(s390_return_value): Likewise.
+
+2011-09-21  Joseph Myers  <joseph at codesourcery.com>
+
+	* event-top.c (async_disconnect): If an exception is thrown from
+	quit_cover, call pop_all_targets.  Use TRY_CATCH instead of
+	catch_errors.
+	* top.c (quit_cover): Return void and take no arguments.
+	* top.h (quit_cover): Update prototype.
+
+2011-09-20  Joseph Myers  <joseph at codesourcery.com>
+
+	* mi/mi-main.c (mi_load_progress): Restore saved_uiout value to
+	current_uiout, not uiout.
+
+2011-09-19  Doug Evans  <dje at google.com>
+
+	* python/py-auto-load.c (source_section_scripts): Fix file
+	descriptor leak.
+	* python/python.c (source_python_script_for_objfile): Tweak comments.
+
+2011-09-18  Yao Qi  <yao at codesourcery.com>
+	    Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	Support displaced stepping for Thumb 16-bit insns.
+	* arm-tdep.c (THUMB_NOP) Define.
+	(thumb_copy_unmodified_16bit): New.
+	(thumb_copy_b, thumb_copy_bx_blx_reg): New.
+	(thumb_copy_alu_reg): New.
+	(arm_copy_svc): Move some common code to ...
+	(install_svc): ... here.  New.
+	(thumb_copy_svc): New.
+	(install_pc_relative): New.
+	(thumb_copy_pc_relative_16bit): New.
+	(thumb_decode_pc_relative_16bit): New.
+	(thumb_copy_16bit_ldr_literal): New.
+	(thumb_copy_cbnz_cbz): New.
+	(cleanup_pop_pc_16bit_all): New.
+	(thumb_copy_pop_pc_16bit): New.
+	(thumb_process_displaced_16bit_insn): New.
+	(thumb_process_displaced_32bit_insn): New.
+	(thumb_process_displaced_insn): process thumb instruction.
+
+	Support displaced stepping for Thumb 32-bit insns.
+	* arm-tdep.c (thumb_copy_unmodified_32bit): New.
+	(thumb2_copy_preload): New.
+	(thumb2_copy_copro_load_store): New.
+	(thumb2_copy_b_bl_blx): New.
+	(thumb2_copy_alu_imm): New.
+	(thumb2_copy_load_reg_imm): New.
+	(thumb2_copy_load_literal): New
+	(thumb2_copy_block_xfer): New.
+	(thumb_32bit_copy_undef): New.
+	(thumb_32bit_copy_unpred): New.
+	(thumb2_decode_ext_reg_ld_st): New.
+	(thumb2_decode_svc_copro): New.
+	(decode_thumb_32bit_store_single_data_item): New.
+	(thumb_copy_pc_relative_32bit): New.
+	(thumb_decode_pc_relative_32bit): New.
+	(decode_thumb_32bit_ld_mem_hints): New.
+	(thumb2_copy_table_branch): New
+	(thumb_process_displaced_32bit_insn): Process Thumb 32-bit
+	instructions.
+
+2011-09-18  Yao Qi  <yao at codesourcery.com>
+
+	* arm-tdep.c (install_copro_load_store): PC is set 4-byte aligned.
+	(install_b_bl_blx): Likewise.
+
+2011-09-17  Yao Qi  <yao at codesourcery.com>
+
+        * arm-tdep.c (install_ldr_str_ldrb_strb): Renamed to ...
+        (install_load_store): ... this.  New.
+        Change parameter BYTE to SIZE.
+        (arm_copy_ldr_str_ldrb_strb): Update caller.
+        (arm_decode_ld_st_word_ubyte): Update caller.
+
+2011-09-17  Yao Qi  <yao at codesourcery.com>
+
+	* infrun.c (displaced_step_fixup): Move some code ...
+	(displaced_step_restore): ... here.  New function.
+	(handle_inferior_event): Cleanup displaced stepping state for both
+	child and parent when get forked or vforked event.
+	* regcache.c (get_thread_arch_aspace_regcache): New function.
+	get_thread_arch_regcache (): Call it.
+
+2011-09-16  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-tasks.c (print_ada_task_info): New function, merging
+	short_task_info and info_tasks together.  Reimplement using
+	ui-out instead of printing to stdout directly.  Move the code
+	building and checking the task list here, instead of leaving it
+	in info_tasks_command.
+	(info_task): Move the code building and checking the task
+	list here, instead of leaving it in info_tasks_command.
+	(info_tasks_command): Delete code building and checking
+	the task list - moved elsewhere.  Update calls to info_tasks
+	and info_task.
+
+2011-09-16  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-tasks.c (info_task): Delete parameter `from_tty'.
+
+2011-09-16  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-tasks.c (info_tasks): Delete parameter `from_tty'.
+
+2011-09-16  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-lang.h (ada_build_task_list): Remove parameter
+	`warn_if_null'.
+	* ada-tasks.c (ada_build_task_list): Remove parameter
+	`warn_if_null'.  Adjust implementation and documentation.
+	(valid_task_id, ada_get_environment_task)
+	iterate_over_live_ada_tasks): Adjust call to ada_build_task_list.
+	(info_tasks_command): Adjust implementation.
+	(task_command): Likewise.
+	* ravenscar-thread.c (ravenscar_find_new_threads): Fix call
+	to ada_build_task_list.
+
+2011-09-16  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-tasks.c (ada_tasks_check_symbol_table, task_list): Delete.
+	(enum ada_known_tasks_kind, struct ada_tasks_inferior_data): New.
+	(ada_tasks_inferior_data_handle): New static global.
+	(get_ada_tasks_inferior_data): New function.
+	(ada_get_task_number, get_task_number_from_id, valid_task_id)
+	(ada_get_environment_task, iterate_over_live_ada_tasks)
+	(add_ada_task, read_known_tasks_array, read_known_tasks_list):
+	Adjust.
+	(ada_set_current_inferior_known_tasks_addr): New function.
+	(read_known_tasks, ada_build_task_list, short_task_info)
+	(info_tasks, info_task, info_tasks_command, task_command_1)
+	(task_command, ada_task_list_changed): Adjust.
+	(ada_tasks_invalidate_inferior_data): New function.
+	(ada_normal_stop_observer, ada_new_objfile_observer): Adjust.
+	(_initialize_tasks): Set ada_tasks_inferior_data_handle.
+	* ada-lang.h (struct inferior): Add declaration.
+	(ada_task_list_changed): Update profile.
+	* remote-wtx-pd.c: #include "inferior.h".
+	(switch_to_pd_internal): Update call to ada_task_list_changed.
+
+2011-09-16  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-tasks.c: #include "progspace.h" and "objfiles.h".
+	(atcb_type, atcb_common_type, atcb_ll_type, atcb_call_type)
+	(atcb_fieldno): Delete these static globals.
+	(struct ada_tasks_pspace_data): New struct.
+	(ada_tasks_pspace_data_handle): New static global.
+	(get_ada_tasks_pspace_data): New function.
+	(ada_tasks_invalidate_pspace_data): New function.
+	(get_tcb_types_info, ptid_from_atcb_common, read_atcb)
+	(read_known_tasks_list, ada_new_objfile_observer): Adjust.
+	(_initialize_tasks): Create this module's per-progspace
+	data handle.
+
+2011-09-16  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-tasks.c (struct atcb_fieldnos): Renames struct tcb_fieldnos.
+
+2011-09-16  Tristan Gingold  <gingold at adacore.com>
+
+	* fork-child.c (fork_inferior): Update comment.  Use alloca
+	instead of xmalloc for argv.  Move len and shell_command
+	declarations in the block where they are used.
+	Only call execvp.  Factorize failure code.
+
+2011-09-16  Abhijit Halder  <abhijit.k.halder at gmail.com>
+
+	Code cleanup.
+	* parse.c (write_exp_elt): Change argument to pass a pointer of union
+	`exp_element' instead of an element of the same and make the function
+	static.
+	(write_exp_elt_opcode, write_exp_elt_sym, write_exp_elt_block)
+	(write_exp_elt_objfile, write_exp_elt_longcst, write_exp_elt_dblcst)
+	(write_exp_elt_decfloatcst, write_exp_elt_type, write_exp_elt_intern):
+	Change argument of `write_exp_elt' function call.
+	Remove extra spaces from comments.
+	* parser-defs.h (write_exp_elt): Remove prototype.
+
+2011-09-15  Paul Koning  <paul_koning at dell.com>
+
+	* python/py-cmd.c (gdbpy_string_to_argv): Decrement reference
+	count of item appended to list.
+	* python/py-type.c (typy_fields): Likewise.
+
+2011-09-15  Paul Koning  <paul_koning at dell.com>
+
+	* MAINTAINERS (Write After Approval): Add myself to the list.
+
+2011-09-15  Kevin Pouget  <kevin.pouget at st.com>
+
+	PR threads/12628
+	* linux-fork.c (checkpoint_command): Disallow checkpointing of
+	processes with multiple threads.
+	(inf_has_multiple_thread_cb): New function.
+	(inf_has_multiple_threads): New function.
+
+2011-09-15  Kevin Pouget  <kevin.pouget at st.com>
+
+	PR Python/12692 Add gdb.selected_inferior() to Python interface.
+	* python/py-inferior.c (GdbMethods): New Python method definition.
+
+2011-09-15  Kevin Pouget  <kevin.pouget at st.com>
+
+	Handle multiple breakpoint hits in Python interface:
+	* python/py-bpevent.c (create_breakpoint_event_object): Rename C/Python
+	variable to breakpoints.
+	* python/py-stopevent.c (emit_stop_event): Return a Python tuple of
+	bps instead of single breakpoint. Fix some space typos.
+	* python/py-stopevent.c (create_breakpoint_event_object): Rename
+	variable to breakpoints.
+
+2011-09-15  Kevin Pouget  <kevin.pouget at st.com>
+
+	* breakpoint.c (describe_other_breakpoints): Do not write 'duplicate'
+	note if the breakpoint is internal.
+
+2011-09-15  Kevin Pouget  <kevin.pouget at st.com>
+
+	* MAINTAINERS (Write After Approval): Add myself to the list
+
+2011-09-14  Pedro Alves  <pedro at codesourcery.com>
+
+	* infrun.c (prepare_for_detach, wait_for_inferior)
+	(fetch_inferior_event): Don't flush the register cache.
+	* remote.c (struct stop_reply) <regcache>: Add comment.
+
+2011-09-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Remove excessive DWARF expressions memory duplication.
+	* dwarf2loc.c (per_cu_dwarf_call): Remove variable back_to and its use
+	for block.data.
+	(indirect_pieced_value): Remove variable result.  Remove variable
+	back_to and its use for baton.data.
+	(dwarf2_compile_expr_to_ax): Remove variable back_to and its use for
+	block.data.
+	* dwarf2read.c (dwarf2_fetch_die_location_block): Remove xmemdup.
+	Update the function comment.
+
+2011-09-13  Pedro Alves  <pedro at codesourcery.com>
+
+	* inferior.h (ALL_INFERIORS): New.
+	* linux-thread-db.c (thread_db_find_new_threads_2): Remove check
+	for a stopped thread.
+	(thread_db_find_new_threads): Look for threads in all inferiors.
+
+2011-09-13  Pedro Alves  <pedro at codesourcery.com>
+
+	* breakpoint.c (update_watchpoint): Handle the case of the
+	watchpoint to update not being in the breakpoint list yet.
+	(hw_watchpoint_use_count): New, factored out from
+	hw_watchpoint_used_count.
+	(hw_watchpoint_used_count): Rename to ...
+	(hw_watchpoint_used_count_others): ... this.  Add `except'
+	parameter.  Don't count resources of `except'.  Use
+	hw_watchpoint_use_count.
+
+2011-09-13  Pedro Alves  <pedro at codesourcery.com>
+
+	* gdbthread.h (enum thread_state): Moved here.
+	(struct thread_info): Rename `executing_' field to `executing' and
+	`state_' to `state'.
+	* thread.c (enum thread_state): Moved to gdbthread.h.
+	(new_thread, add_thread_silent, delete_thread_1)
+	(any_live_thread_of_process, thread_alive, set_running)
+	(set_running, is_thread_state, any_running, is_executing)
+	(set_executing, finish_thread_state, print_thread_info)
+	(do_captured_thread_select): Adjust.
+
+2011-09-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix compatibility with gcc < 4.3 and non-gcc compilers.
+	* amd64-tdep.c (amd64_skip_xmm_prologue): Convert 0b constants.
+
+2011-09-12  Pedro Alves  <pedro at codesourcery.com>
+	    Matt Rice  <ratmice at gmail.com>
+
+	PR gdb/13175
+
+	* interps.c (struct interp) <interpreter_out>: Delete field.
+	(interp_new): Remove the data and uiout parameters and adjust.
+	(interp_set): Only set the current_uiout from the interpreter's
+	uiout after initializing the interpreter.  Adjust call to
+	init_proc.
+	(interp_ui_out): Adjust to call procs->ui_out_proc.
+	(interp_data, interp_name): New.
+	* interps.h (interp_init_ftype): Add `self' parameter.
+	(interp_ui_out_ftype): New typedef.
+	(struct interp_procs) <ui_out_proc>: New method pointer.
+	(interp_new): Remove the data and uiout parameters.
+	(interp_data, interp_name): Declare.
+	* tui/tui-interp.c (tui_init): Adjust prototype.
+	(tui_ui_out): New.
+	(_initialize_tui_interp): Install tui_ui_out.  Don't instanciate
+	tui_out here.  Adjust call to interp_new.
+	* tui/tui-io.c (tui_initialize_io): Don't set current_uiout here.
+	* cli/cli-interp.c (cli_interpreter_init): Adjust prototype.
+	(cli_ui_out): New.
+	(_initialize_cli_interp): Install it.  Adjust call to interp_new.
+	* mi/mi-common.h (struct mi_interp) <uiout>: New field.
+	* mi/mi-interp.c (mi_interpreter_init): Adjust prototype.
+	Initialize mi->uiout depending on the mi_version as extracted from
+	the interpreter's name.
+	(mi_ui_out): New.
+	(_initialize_mi_interp): Install mi_ui_out.  Adjust calls to
+	interp_new.  Don't allocate the ui_out's of the interpreters here.
+
+2011-09-12  Aleksandar Ristovski  <aristovski at qnx.com>
+
+	* solib.c (solib_used): New function.
+	(update_solib_list, reload_shared_libraries_1): Check if objfile is used
+	by another so_list object before freeing it.
+
+2011-09-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup.
+	* mi/mi-cmd-stack.c (list_args_or_locals): Use enum for the parameter
+	values.
+
+2011-09-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup.
+	* amd64-tdep.c (amd64_skip_prologue): Move the XMM code to ...
+	(amd64_skip_xmm_prologue): ... this new function.  Describe its
+	parameters.  No longer use amd64_prologue_line_bug.
+	* defs.h (producer_is_gcc_ge_4): New declaration.
+	* dwarf2read.c (producer_is_gcc_ge_4): Move to utils.c.
+	(process_full_comp_unit): Update its caller.  Remove
+	amd64_prologue_line_bug initialization.
+	* symtab.h (struct symtab): Remove field amd64_prologue_line_bug.
+	* utils.c (producer_is_gcc_ge_4): Moved here from dwarf2read.c.
+
+2011-09-09  Pedro Alves  <pedro at codesourcery.com>
+
+	* linux-nat.h (enum resume_kind): New.
+	(struct lwp_info) <last_resume_kind>: New field.
+	* linux-nat.c (linux_child_follow_fork): Set last_resume_kind to
+	resume_stop on the new lwp.
+	(add_lwp): Set last_resume_kind as resume_continue by default.
+	(lin_lwp_attach_lwp): Set last_resume_kind as resume_stop.
+	(resume_lwp): New, factored out from resume_callback.  Also check
+	for pending status in lp->waitstatus.
+	(resume_callback): Reimplement.
+	(resume_clear_callback): Set last_resume_kind as resume_stop.
+	(resume_set_callback): Set last_resume_kind as resume_continue.
+	(linux_nat_resume, linux_handle_extended_wait): Set
+	last_resume_kind.
+	(running_callback): Also check lp->waitstatus for pending events.
+	(select_singlestep_lwp_callback): Check that lp->last_resume_kind
+	is resume_step.
+	(stop_and_resume_callback): Don't re-resume if the core wanted the
+	lwp stopped.  Use resume_lwp instead of resume_callback.  Avoid
+	using an invalidated pointer.
+	(linux_nat_filter_event): Don't discard SIGSTOPs as delayed
+	SIGSTOPs if the core wanted the LWP to stop.
+	(linux_nat_wait_1) Don't consume a pending SIGSTOP if the core
+	wanted the lwp to stop.  If the core wanted the lwp to stop, and
+	the lwp stopped with a SIGSTOP, report a TARGET_SIGNAL_0 instead
+	of TARGET_SIGNAL_STOP.
+	(linux_nat_stop_lwp): Don't synchronously wait for the lwp to stop
+	here.  Instead, signal the lwp, and set the last_resume_kind to
+	resume_stop.
+
+2011-09-09  Pedro Alves  <pedro at codesourcery.com>
+
+	* linux-nat.c (lin_lwp_attach_lwp): Return 1 (ignore) instead of
+	-1 (error), if the lwp exits right after attaching.
+
+2011-09-08  Doug Evans  <dje at google.com>
+
+	* py-cmd.c: Some minor formatting fixes.
+	(gdbpy_parse_command_name): Rename text arg to name, make const.
+	All callers updated.
+	* python-internal.h (gdbpy_parse_command_name): Update.
+
+	* cli/cli-decode.c (add_cmd): Add comment.
+
+2011-09-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	PR breakpoints/12435
+	* amd64-tdep.c (amd64_skip_prologue): New variables start_pc_sal,
+	next_sal, buf, offset and xmmreg.  Advance PC if it sees the PR.
+	* dwarf2read.c (process_full_comp_unit): Initialize
+	amd64_prologue_line_bug.
+	* symtab.h (struct symtab): New field amd64_prologue_line_bug.
+
+2011-09-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix TUI screen corruption.
+	* utils.c (fputs_maybe_filtered): Replace !input_from_terminal_p by
+	batch_flag.
+
+2011-09-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* findvar.c (read_var_value): Never return NULL, throw an error
+	instead.  Update the function comment.  State symbol name in the error
+	messages.
+	* python/py-frame.c (frapy_read_var): Remove handling of NULL from
+	read_var_value.
+	* stack.c (print_frame_args): Likewise.
+	* valops.c (value_of_variable): Likewise.
+
+2011-09-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* stack.c (print_frame_args): New variable except.  Wrap
+	read_var_value and common_val_print into TRY_CATCH.
+
+2011-09-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* eval.c (evaluate_subexp_standard) <OP_THIS>: Update the value_of_this
+	caller to value_of_this.
+	* p-exp.y: Update the value_of_this caller to value_of_this_silent.
+	Twice.
+	* valops.c (value_of_this): Remove parameter complain and variable ret.
+	Update function comment.  Never return NULL by this code.
+	(value_of_this_silent): New function.
+	* value.h (value_of_this): Remove parameter complain.
+	(value_of_this_silent): New declaration.
+
+2011-09-07  Yao Qi  <yao at codesourcery.com>
+
+	* gdbthread.h (struct thread_info): Remove fields
+	`stepping_through_solib_after_catch' and
+	`stepping_through_solib_catchpoints'.
+	* infrun.c (init_thread_stepping_state): Update.
+	(process_event_stop_test, currently_stepping): Update.
+	(currently_stepping_or_nexting_callback): Update.
+
+2011-09-07  Yao Qi  <yao at codesourcery.com>
+
+	* gdbthread.h (struct thread_info): Comment on field
+	`step_after_step_resume_breakpoint'.
+
+2011-09-07  Abhijit Halder  <abhijit.k.halder at gmail.com>
+
+	* remote.c (remote_console_output): Reindent.
+
+2011-09-06  Luis Machado  <lgustavo at codesourcery.com>
+
+	* frame.c (has_stack_frames): Check for currently selected
+	traceframe.
+
+2011-09-06  Pedro Alves  <pedro at codesourcery.com>
+
+	* event-top.h (MAXPROMPTS, struct prompts): Delete.
+	(set_async_annotation_level, set_async_prompt, pop_prompt)
+	(push_prompt, new_async_prompt): Delete declarations.
+	* top.h (get_prompt, set_prompt): Change prototype.
+	(get_prefix, set_prefix, get_suffix, set_suffix): Delete
+	declarations.
+	* top.c (command_loop):
+	(top_prompt): New global.
+	(get_prefix, set_prefix, get_suffix, ): Delete.
+	(get_prompt, set_prompt): Rewrite.
+	(show_new_async_prompt): Rename to ...
+	(show_prompt): ... this.
+	(init_main): Adjust.  Don't handle --annotate=2 here.
+	* event-top.c (new_async_prompt): Delete.
+	(the_prompts): Delete.
+	(more_to_come): Make static.
+	(display_gdb_prompt): Use top_level_prompt() to compute the top
+	level prompt, and don't notify the before_prompt observers
+	directly here.  Always trick readline into not trying to display
+	the prompt if sync_execution and displaying the primary prompt.
+	If displaying a local/secondary prompt, always show it, even if
+	sync_execution is set.
+	(change_annotation_level): Delete.
+	(top_level_prompt): New, based on change_annotation_level.
+	(push_prompt, pop_prompt): Delete.
+	(async_disable_stdin): No longer pushes prompt.
+	(command_line_handler): No longer pushes or pops prompt.  If more
+	input is expected, call display_gdb_prompt with an explicit empty
+	prompt.
+	(async_stop_sig): Adjust.
+	(set_async_annotation_level, set_async_prompt): Delete.
+	* python/python.c (before_prompt_hook): Adjust.
+
+2011-09-05  Pedro Alves  <pedro at codesourcery.com>
+
+	PR cli/13110
+
+	* infrun.c (fetch_inferior_event): Check if there's a selected
+	thread before checking if the selected thread is executing.
+
+2011-09-05  Pedro Alves  <pedro at codesourcery.com>
+
+	* inf-loop.c (execute_command): Don't check if the current thread
+	if running before synchronously waiting for command completion.
+	* infrun.c (fetch_inferior_event): Handle "set exec-done-display"
+	here.
+	(normal_stop): Call async_enable_stdin here.
+	* inf-loop.c (inferior_event_handler): Don't call
+	async_enable_stdin, nor handle "set exec-done-display" here.
+
+2011-09-04  Joel Brobecker  <brobecker at adacore.com>
+
+	GDB 7.3.1 released.
+
+2011-09-04  Joel Brobecker  <brobecker at adacore.com>
+
+	* NEWS: Change `7.3' into `7.3.1' in `Changes since GDB 7.3'.
+
+2011-09-04  Joel Brobecker  <brobecker at adacore.com>
+
+	* NEWS: Add entry for OpenBSD/NetBSD build failure.
+
+2011-09-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* config/s390/s390.mh (NATDEPFILES): Add linux-procfs.o dependency.
+
+2011-09-02  Matt Rice  <ratmice at gmail.com>
+
+	PR gdb/10720
+	* event-top.c (cli_command_loop): Replace readline setup with
+	direct call to display_gdb_prompt.
+	(display_gdb_prompt): Do not call observer mechanism during
+	synchronous execution.
+
+2011-09-02  Pedro Alves  <pedro at codesourcery.com>
+
+	* linux-nat.c (in_pid_list_p): New.
+	(linux_record_stopped_pid): Delete.
+	(lin_lwp_attach_lwp): Check if PTRACE_ATTACH failed because we're
+	already attached to the LWP.  Return an indication if so.
+	(linux_nat_filter_event): Adjust.
+	* linux-thread-db.c (attach_thread): Handle lin_lwp_attach_lwp
+	returning an indication to ignore this thread.
+
+2011-09-02  Pedro Alves  <pedro at codesourcery.com>
+
+	* top.c: Include interps.h.
+	(execute_command): If the target can async, but the interpreter is
+	in sync mode, synchronously wait for the command to finish before
+	returning.
+	(execute_command_to_string): Force the interpreter to sync mode.
+	* infrun.c: Include interps.h.
+	(fetch_inferior_event): Don't restore the prompt yet if the
+	interpreter is in sync mode.
+	* interps.c (interpreter_async): New global.
+	* interps.h (interpreter_async): Declare.
+	* inf-loop.c: Include interps.h.
+	(inferior_event_handler): Don't print the language change or run
+	breakpoint commands yet if the interpreter in is sync mode.
+	* main.c (captured_command_loop): Flip the interpreter to async
+	mode.
+	* cli/cli-script.c: Include interps.h.
+	(execute_user_command, while_command, if_command): Force the
+	interpreter to sync mode.
+	* python/python.c: Include interps.h.
+	(python_command, execute_gdb_command): Force the interpreter to
+	sync mode.
+
+2011-09-02  Pedro Alves  <pedro at codesourcery.com>
+
+	* value.c (show_convenience): Catch errors thrown while printing
+	each internal variable.
+	* infrun.c (validate_siginfo_access): New function.
+	(siginfo_value_read, siginfo_value_write): Call it.
+
+2011-09-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Revert:
+	2010-05-21  Pierre Muller  <muller at ics.u-strasbg.fr>
+	* dwarf2read.c (new_symbol): Handle DW_AT_variable_parameter
+	attribute.
+
+2011-08-29  Yao Qi  <yao at codesourcery.com>
+
+	* solib-dsbt.c (bfd_lookup_symbol): Removed.
+	(cmp_name): New.
+	(enable_break2): Update caller.
+	* solib-frv.c (bfd_lookup_symbol): Removed.
+	(cmp_name): New.
+	(enable_break2): Update caller.
+	* solib-pa64.c (bfd_lookup_symbol): Removed.
+	(cmp_name): New.
+	* solib-svr4.c (bfd_lookup_symbol): Removed.
+	(cmp_name_and_sec_flags): New.
+	(enable_break): Update caller.
+	* solib.c (gdb_bfd_lookup_symbol_from_symtab): New.
+	(gdb_bfd_lookup_symbol_from_dyn_symtab): New.
+	(gdb_bfd_lookup_symbol): New.
+	* solib.h: Functions declarations.
+
+2011-08-29  Yao Qi  <yao at codesourcery.com>
+
+	* Makefile.in (ALL_TARGET_OBS): Add tic6x-tdep.o tic6x-linux-tdep.o
+	and solib-dsbt.o.
+
+2011-08-29  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix TUI stepi on code without symbols.
+	* tui/tui-stack.c (tui_show_frame_info): Remove error, set LOW for
+	current PC instead.
+
+2011-08-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup.
+	* mi/mi-cmd-stack.c (list_args_or_locals): Remove stb initialization
+	and the static keyword.
+	* mi/mi-cmd-target.c (mi_cmd_target_file_get, mi_cmd_target_file_put):
+	Make prefix an array.
+	* mi/mi-cmd-target.c (mi_cmd_target_file_delete): Likewise.
+	* mi/mi-main.c (get_register): Remove stb initialization and the static
+	keyword.
+
+2011-08-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup - make mi_opt const.
+	* mi/mi-cmd-break.c (mi_cmd_break_insert, mi_cmd_break_watch): Make
+	opts const.
+	* mi/mi-cmd-disas.c (mi_cmd_disassemble): Likewise.
+	* mi/mi-cmd-env.c (mi_cmd_env_path): Likewise.
+	(mi_cmd_env_dir): Likewise.
+	* mi/mi-cmd-target.c (mi_cmd_target_file_get): Likewise.
+	(mi_cmd_target_file_put): Likewise.
+	* mi/mi-cmd-target.c (mi_cmd_target_file_delete): Likewise.
+	* mi/mi-cmd-var.c (mi_cmd_var_evaluate_expression): Likewise.
+	* mi/mi-getopt.c (mi_getopt): Make opts and opt const.
+	(mi_valid_noargs): Make opts const.
+	* mi/mi-getopt.h (mi_getopt): Make opts and opt const.
+	* mi/mi-main.c (mi_cmd_list_thread_groups): Make opts const.
+	(mi_cmd_data_read_memory): Likewise.
+	(mi_cmd_data_read_memory_bytes): Likewise.
+	(mi_cmd_data_write_memory): Likewise.
+
+2011-08-26  Matt Rice  <ratmice at gmail.com>
+
+	* solib-sunos.c (allocate_rt_common_objfile): Add missing arguments to
+	bcache_xmalloc,  replace bcache_xmalloc with call to
+	psymbol_bcache_init for psymbol_cache.
+	* symfile.c (reread_symbols): Remove extra calls to bcache_xmalloc.
+
+2011-08-26  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* inf-loop.c (inferior_event_handler): Add exception_print in
+	INF_EXEC_COMPLETE.
+
+2011-08-26  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* breakpoint.c (bpstat_do_actions): New variable cleanup_if_error, call
+	make_bpstat_clear_actions_cleanup and discard_cleanups for it.
+	* defs.h (make_bpstat_clear_actions_cleanup): New declaration.
+	* exceptions.c (throw_exception): Remove the bpstat_clear_actions call.
+	* inf-loop.c (inferior_event_handler): New variable cleanup_if_error,
+	call make_bpstat_clear_actions_cleanup and discard_cleanups for it.
+	Call bpstat_clear_actions for failed fetch_inferior_event_wrapper.
+	* infrun.c (fetch_inferior_event): Call
+	make_bpstat_clear_actions_cleanup.
+	* top.c (execute_command): New variable cleanup_if_error, call
+	make_bpstat_clear_actions_cleanup and discard_cleanups for it.
+	* utils.c (do_bpstat_clear_actions_cleanup)
+	(make_bpstat_clear_actions_cleanup): New functions.
+
+2011-08-26  Pedro Alves  <pedro at codesourcery.com>
+
+	* linux-nat.c (linux_child_follow_fork): Don't set lp->resumed on
+	either the parent or the child forks.  Rename a couple locals.
+
+2011-08-26  Pedro Alves  <pedro at codesourcery.com>
+
+	* linux-nat.c (wait_lwp): Avoid assuming errno is preserved by a
+	library call.  Avoid reading the `status' local if all waitpid
+	calls failed.
+
+2011-08-26  Pedro Alves  <pedro at codesourcery.com>
+
+	* common/linux-osdata.c (get_cores_used_by_process): Don't assume
+	opening /proc/PID/task always succeeds.
+
+2011-08-26  Aleksandar Ristovski <aristovski at qnx.com>
+
+	* linespec.c (symtab_from_filename): Check for the end of string.
+
+2011-08-26  Marc Khouzam  <marc.khouzam at ericsson.com>
+
+	PR mi/11912
+	* varobj.c (cplus_describe_child): Add the keyword
+	'class' to the output of the method when dealing 
+	with a cast to a base class.
+
+2011-08-26  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	No functionality change.
+	* breakpoint.c (bpstat_clear_actions): Remove the BS parameter, make
+	function comment a reference, new variables tp and bs, move here code
+	from throw_exception.
+	* breakpoint.h (bpstat_clear_actions): Remove the BS parameter,
+	describe it in the comment.
+	* exceptions.c (throw_exception): Remove variable tp, move the code for
+	bpstat_clear_actions to bpstat_clear_actions.
+
+2011-08-24  Luis Machado  <lgustavo at codesourcery.com>
+
+	* linux-nat.h (linux_proc_get_tgid): Remove declaration.
+	* linux-nat.c: Include linux-procfs.h.
+	(linux_proc_get_tgid): Move to ...
+	* common/linux-procfs.c: ... here. New file.
+	* common/linux-procfs.h: New file.
+	* linux-thread-db.c: Include linux-procfs.h.
+	* Makefile.in: Update dependencies.
+	* config/alpha/alpha-linux.mh: Add linux-procfs.o dependency.
+	* config/arm/linux.mh: Likewise.
+	* config/i386/linux.mh: Likewise.
+	* config/i386/linux64.mh: Likewise.
+	* config/ia64/linux.mh: Likewise.
+	* config/m32r/linux.mh: Likewise.
+	* config/m68k/linux.mh: Likewise.
+	* config/mips/linux.mh: Likewise.
+	* config/pa/linux.mh: Likewise.
+	* config/pa/linux.mh: Likewise.
+	* config/powerpc/linux.mh: Likewise.
+	* config/powerpc/ppc64-linux.mh: Likewise.
+	* config/powerpc/spu-linux.mh: Likewise.
+	* config/sparc/linux.mh: Likewise.
+	* config/sparc/linux64.mh: Likewise.
+	* config/xtensa/linux.mh: Likewise.
+
+2011-08-24  Hui Zhu  <teawater at gmail.com>
+
+	* tracepoint.c (cond_string_is_same): New function.
+	(find_matching_tracepoint): Add condition check
+	by cond_string_is_same.
+
+2011-08-23  Josh Matthews  <josh at joshmatthews.net>
+
+	Fix build error in Darwin port.
+	* darwin-nat-info.c (darwin_debug_regions_recurse): New variable uiout.
+
+2011-08-21  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup.
+	* breakpoint.c (bpstat_clear_actions): Remove clearing of commands_left.
+	(command_line_is_silent): New function.
+	(bpstat_do_actions_1): No longer use commands_left, use
+	command_line_is_silent for commands.
+	(bpstat_alloc): Remove clearing of commands_left.
+	(bpstat_stop_status): Remove initialization of commands_left, use
+	command_line_is_silent.
+	* breakpoint.h (struct bpstats): Remove commands_left.
+
+2011-08-18  Keith Seitz  <keiths at redhat.com>
+
+	PR c++/12266
+	* cp-name-parser.y (struct demangle_info): Remove unused
+	member PREV.
+	(d_grab): Likewise.
+	(allocate_info): Change return type to struct demangle_info *.
+	Always allocate a new demangle_info.
+	Remove unused PREV pointer.
+	(cp_new_demangle_parse_info): New function.
+	(cp_demangled_name_parse_free): New function.
+	(do_demangled_name_parse_free_cleanup): New function.
+	(make_cleanup_cp_demangled_name_parse_free): New function.
+	(cp_demangled_name_to_comp): Change return type to
+	struct demangle_parse_info *.
+	Allocate a new storage for each call.
+	(main): Update usage for cp_demangled_name_to_comp
+	API change.
+	* cp-support.h (struct demangle_parse_info): New structure.
+	(cp_demangled_name_to_comp): Update API change for
+	return type.
+	(cp_new_demangle_parse_info): Declare.
+	(make_cleanup_cp_demangled_name_parse_free): New declaration.
+	(cp_demangled_name_parse_free): Declare.
+	* cp-support.c (cp_canonicalize_string): Update API
+	change for cp_demangled_name_to_comp.
+	(mangled_name_to_comp): Likewise.
+	Return struct demangle_parse_info, too.
+	(cp_class_name_from_physname): Update mangled_name_to_comp
+	API change.
+	(method_name_from_physname): Likewise.
+	(cp_func_name): Update API change for cp_demangled_name_to_comp.
+	(cp_remove_params): Likewise.
+	* python/py-type.c (typy_legacy_template_argument): Likewise.
+
+	* cp-support.h (cp_canonicalize_string_no_typedefs): Declare.
+	(cp_merge_demangle_parse_infos): Declare.
+	* cp-support.c (ignore_typedefs): New file global.
+	(copy_string_to_obstack): New function.
+	(inspect_type): New function.
+	(replace_typedefs): New function.
+	(replace_typedefs_qualified_name): New function.
+	(cp_canonicalize_string_no_typedefs): New function.
+	* cp-name-parser.y (cp_merge_demangle_parse_infos): New function.
+	(cp_new_demangle__parse_info): Allocate and initialize the obstack.
+	* linespec.c (find_methods): Use cp_canonicalize_string_no_typedefs
+	instead of cp_canonicalize_string.
+	(find_method): Likewise.
+	(decode_compound): Before looking up the name, call
+	cp_canonicalize_string_no_typedefs.
+	(decode_variable): Likewise.
+
+2011-08-17  Phil Muldoon  <pmuldoon at redhat.com>
+            Tom Tromey  <tromey at redhat.com>
+            Matt Rice <ratmice at gmail.com>
+
+        * python/lib/gdb/prompt.py: New file.
+        * python/lib/gdb/command/prompt.py: New file.
+        * NEWS: Document set extended-prompt and gdb.prompt library
+
+2011-08-16  Yao Qi  <yao at codesourcery.com>
+
+	* tic6x-linux-tdep.c: Move const arrays definition from here...
+	* tic6x-tdep.c: to here ...
+
+2011-08-14  Yao Qi  <yao at codesourcery.com>
+
+	* NEWS: New port to Texas Instruments TMS320C6x.
+
+2011-08-14  Andrew Jenner  <andrew at codesourcery.com>
+	    Bernd Schmidt  <bernds at codesourcery.com>
+	    Yao Qi  <yao at codesourcery.com>
+
+	* configure.tgt: Handle tic6x-*-*linux and tic6x-*-*.
+	* solib-dsbt.c: New file.  Support DSBT shared object.
+	* tic6x-linux-tdep.c: New file.
+	* tic6x-tdep.c: New file.
+	* tic6x-tdep.h: New file.
+
+2011-08-14  Andrew Stubbs <ams at codesourcery.com>
+	    Yao Qi  <yao at codesourcery.com>
+
+	* remote.c (PACKET_qXfer_fdpic): New enum value.
+	(remote_protocol_features): Add qXfer:fdpic:read packet.
+	(remote_xfer_partial): Support TARGET_OBJECT_FDPIC.
+	(_initialize_remote): Add set/show remote read-fdpic-loadmap command.
+	* target.h (enum target_object): Add TARGET_OBJECT_FDPIC.
+
+2011-08-14  Yao Qi  <yao at codesourcery.com>
+
+	Target description for tic6x.
+	* features/Makefile (WHICH): Add tic6x-c64xp tic6x-c64x tic6x-c62x
+	tic6x-c64xp-linux tic6x-c64x-linux and tic6x-c62x-linux.
+	* features/tic6x-c6xp.xml, features/tic6x-core.xml: New.
+	* features/tic6x-gp.xml, features/tic6x-c62x.xml: New.
+	* features/tic6x-c64x.xml, features/tic6x-c64xp.xml: New.
+	* features/tic6x-c62x-linux.xml, features/tic6x-c64x-linux.xml: New.
+	* features/tic6x-c64xp-linux.xml: New.
+	* features/tic6x-c64xp.c, features/tic6x-c64x.c: Generated.
+	* features/tic6x-c62x.c, features/tic6x-c64xp-linux.c: Generated.
+	* features/tic6x-c64x-linux.c, features/tic6x-c62x-linux.c: Generated.
+	* regformats/tic6x-c62x.dat, regformats/tic6x-c64x.dat: Generated.
+	* regformats/tic6x-c64xp.dat,
+	regformats/tic6x-c62x-linux.dat: Generated.
+	* regformats/tic6x-c64x-linux.dat,
+	regformats/tic6x-c64xp-linux.dat: Generated.
+	* config/djgpp/fnchange.lst: Add features/tic6x-*.xml and
+	features/tic6x-*.c files.
+	Add regformats/tic6x-*.dat files.
+
+2011-08-12  Doug Evans  <dje at google.com>
+
+	* NEWS: Mention new "type" attribute of python gdb.Symbol objects.
+	* python/py-symbol.c (sympy_get_type): New function.
+	(symbol_object_getset): Add "type".
+
+2011-08-12  Pedro Alves  <pedro at codesourcery.com>
+
+	PR tui/13073
+
+	* tui/tui-regs.c (tui_show_register_group): Skip registers with an
+	empty name.
+	(tui_show_register_group): Don't store a byte buffer in the data
+	element's value.
+	(tui_register_format): Skip registers with an empty name.
+	(tui_get_register): Store a struct value in the data element's
+	value field instead of a byte buffer holding the raw register
+	contents.  Account for optimized-out and unavailable registers
+	when comparing register contents.
+
+2011-08-09  Pedro Alves  <pedro at codesourcery.com>
+
+	* printcmd.c (current_display_number): Update comment.
+	(disable_current_display_cleanup): Delete.
+	(do_one_display): Use make_cleanup_restore_integer.  Gracefully
+	catch errors thrown while evaluating and printing the display.
+
+2011-08-09  Tom Tromey  <tromey at redhat.com>
+
+	* mi/mi-cmd-break.c (mi_cmd_break_passcount): Fix typo.
+
+2011-08-09  Pedro Alves  <pedro at codesourcery.com>
+
+	* elfread.c (elf_symtab_read): Rework comments.
+	* maint.c (maintenance_command): Ditto.
+	* somread.c (som_symtab_read): Ditto.
+	* solib.c (solib_find, solib_map_sections, update_solib_list)
+	(solib_add, info_sharedlibrary_command, solib_name_from_address)
+	(solib_create_inferior_hook, in_solib_dynsym_resolve_code)
+	(sharedlibrary_command, no_shared_libraries): Ditto.
+	* solib-irix.c (locate_base, disable_break, enable_break)
+	(irix_solib_create_inferior_hook, irix_solib_create_inferior_hook)
+	(irix_current_sos, irix_open_symbol_file_object)
+	(irix_special_symbol_handling): Ditto.
+	* solib-sunos.c (locate_base, first_link_map_member)
+	(sunos_current_sos, disable_break, enable_break)
+	(sunos_special_symbol_handling, sunos_solib_create_inferior_hook):
+	Ditto.
+	* solib-svr4.c (bfd_lookup_symbol, elf_locate_base, locate_base)
+	(open_symbol_file_object, svr4_current_sos, enable_break)
+	(svr4_special_symbol_handling, svr4_solib_create_inferior_hook):
+	Ditto.
+	* solib-frv.c (bfd_lookup_symbol, open_symbol_file_object)
+	(frv_current_sos, enable_break, frv_special_symbol_handling)
+	(frv_solib_create_inferior_hook): Ditto.
+	* solist.h (struct target_so_ops): Extend the comments of the
+	special_symbol_handling, current_sos and open_symbol_file_object
+	methods.
+
+2011-08-09  Phil Muldoon  <pmuldoon at redhat.com>
+
+	* python/lib/gdb/__init__.py: Auto-load files in command and
+	function directories.
+	* python/python.c (finish_python_initialization): Use
+	os.path.join.
+	* python/lib/gdb/command/pretty_printers.py: Self register
+	command.
+	* NEWS: Document auto-loading.
+
+2011-08-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* dwarf2loc.c (dwarf2_evaluate_loc_desc_full) <DWARF_VALUE_STACK>
+	(dwarf2_evaluate_loc_desc_full) <DWARF_VALUE_LITERAL>: New variable
+	objfile_gdbarch.  Fix BFD_ENDIAN_BIG case.
+
+2011-08-08  Tom Tromey  <tromey at redhat.com>
+
+	* breakpoint.c (clean_up_filters): Remove.
+	(catch_syscall_split_args): Use VEC_cleanup.
+
+2011-08-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* cp-name-parser.y (xfree): Wrap the name free by CONCAT2.
+	(main): Uncomment "Demangling error\n".
+
+2011-08-05  Paul Pluzhnikov  <ppluzhnikov at google.com>
+
+	* solib-target.c (segment_attributes): Make them static.
+	(section_attributes, library_children, library_attributes): Likewise.
+	(library_list_children, library_list_attributes): Likesise.
+	(library_list_elements): Likewise.
+
+2011-08-05  Pedro Alves  <pedro at codesourcery.com>
+
+	* exceptions.c (throw_exception): Don't disable the current
+	display.
+	* printcmd.c (disable_current_display_cleanup): New function.
+	(do_one_display): Install a cleanup to disable the current display
+	if doing the display throws.
+
+2011-08-05  Eli Zaretskii  <eliz at gnu.org>
+
+	* python/py-breakpoint.c (gdbpy_initialize_breakpoints): Move the
+	initialization of the tp_new member to the corresponding
+	gdbpy_initialize_* function.
+	* python/py-cmd.c (gdbpy_initialize_commands): Likewise.
+	* python/py-frame.c (gdbpy_initialize_frames): Likewise.
+	* python/py-function.c (gdbpy_initialize_functions): Likewise.
+	* python/py-inferior.c (gdbpy_initialize_inferior): Likewise.
+	* python/py-param.c (gdbpy_initialize_parameters): Likewise.
+
+2011-08-05  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* spu-tdep.c (info_spu_event_command, info_spu_signal_command)
+	(info_spu_mailbox_list, info_spu_mailbox_command, info_spu_dma_cmdlist)
+	(info_spu_dma_command, info_spu_proxydma_command): Rename uiout
+	references to current_uiout.
+
+2011-08-04  Pedro Alves  <pedro at codesourcery.com>
+
+	* event-loop.c (gdb_do_one_event): Remove `data' parameter.
+	(start_event_loop): Use TRY_CATCH instead of catch_errors.
+	* event-loop.h (gdb_do_one_event): Remove `data' parameter.
+	* top.c (gdb_readline_wrapper): Adjust.
+	* tui/tui-interp.c (tui_command_loop):
+	(_initialize_tui_interp): Don't install it.
+
+2011-08-04  Pedro Alves  <pedro at codesourcery.com>
+
+	* ui-out.h (uiout): Rename to ...
+	(current_uiout): ... this.
+	* ui-out.c (uiout): Rename to ...
+	(current_uiout): ... this.
+	* ada-lang.c (print_it_exception, print_one_exception)
+	(print_mention_exception): Adjust.
+	* breakpoint.c (watchpoint_check): Adjust.
+	(print_breakpoint_location, print_one_breakpoint, breakpoint_1)
+	(default_collect_info, watchpoints_info, print_one_catch_fork)
+	(print_one_catch_vfork, print_one_catch_syscall)
+	(print_one_catch_exec, mention, print_it_ranged_breakpoint)
+	(print_one_ranged_breakpoint, print_mention_ranged_breakpoint)
+	(print_it_watchpoint, print_mention_watchpoint)
+	(print_it_masked_watchpoint, print_mention_masked_watchpoint)
+	(print_it_exception_catchpoint, print_one_exception_catchpoint)
+	(print_mention_exception_catchpoint, say_where, bkpt_print_it)
+	(bkpt_print_mention, momentary_bkpt_print_it)
+	(tracepoint_print_mention, update_static_tracepoint)
+	(tracepoints_info, save_breakpoints): Adjust.
+	* cli-out.c (field_separator): Adjust.
+	* cp-abi.c (list_cp_abis, show_cp_abi_cmd): Adjust.
+	* exceptions.c (catch_exceptions_with_msg, catch_errors): Adjust.
+	* frame.c (get_current_frame): Adjust.
+	* infcmd.c (run_command_1, print_return_value): Adjust.
+	* inferior.c (inferior_command, info_inferiors_command): Adjust.
+	* infrun.c (print_end_stepping_range_reason): Adjust.
+	(print_signal_exited_reason, print_exited_reason): Adjust.
+	(print_signal_received_reason, print_no_history_reason): Adjust.
+	* interps.c (interp_set): Adjust.
+	* osdata.c (info_osdata_command): Adjust.
+	* progspace.c (maintenance_info_program_spaces_command): Adjust.
+	* remote-fileio.c (remote_fileio_request): Adjust.
+	* remote.c (show_remote_cmd): Adjust.
+	* solib.c (info_sharedlibrary_command): Adjust.
+	* source.c (print_source_lines_base): Adjust.
+	* stack.c (print_stack_frame): Adjust.
+	(do_gdb_disassembly, print_frame_info, print_frame): Adjust.
+	* symfile-mem.c (add_vsyscall_page): Adjust.
+	* symfile.c (load_progress, generic_load)
+	(print_transfer_performance): Adjust.
+	* thread.c (info_threads_command, restore_selected_frame)
+	(thread_command): Adjust.
+	* top.c (make_cleanup_restore_ui_file): Adjust.
+	* tracepoint.c (tvariables_info_1, trace_status_mi, tfind_1)
+	(print_one_static_tracepoint_marker): Adjust.
+	* cli/cli-cmds.c (print_disassembly): Adjust.
+	* cli/cli-decode.c (print_doc_line): Adjust.
+	* cli/cli-interp.c (safe_execute_command): Adjust.
+	* cli/cli-logging.c (set_logging_redirect, pop_output_files)
+	(handle_redirections): Adjust.
+	* cli/cli-script.c (show_user_1): Adjust.
+	* cli/cli-setshow.c (do_setshow_command, cmd_show_list): Adjust.
+	* mi/mi-cmd-break.c (breakpoint_notify): Adjust.
+	* mi/mi-cmd-disas.c (mi_cmd_disassemble): Adjust.
+	* mi/mi-cmd-env.c (mi_cmd_env_pwd, mi_cmd_env_path)
+	(mi_cmd_env_dir): Adjust.
+	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_file)
+	(print_partial_file_name, mi_cmd_file_list_exec_source_files): Adjust.
+	* mi/mi-cmd-stack.c (mi_cmd_stack_list_frames)
+	(mi_cmd_stack_info_depth, mi_cmd_stack_list_args)
+	(list_args_or_locals): Adjust.
+	* mi/mi-cmd-var.c (print_varobj, mi_cmd_var_create)
+	(mi_cmd_var_delete, mi_cmd_var_set_format, mi_cmd_var_set_frozen)
+	(mi_cmd_var_show_format, mi_cmd_var_info_num_children)
+	(mi_cmd_var_list_children, mi_cmd_var_info_type)
+	(mi_cmd_var_info_path_expression, mi_cmd_var_info_expression)
+	(mi_cmd_var_show_attributes, mi_cmd_var_evaluate_expression)
+	(mi_cmd_var_assign, mi_cmd_var_update, varobj_update_one): Adjust.
+	* mi/mi-interp.c (mi_on_normal_stop): Adjust.
+	* mi/mi-main.c (mi_cmd_gdb_exit, mi_cmd_thread_select)
+	(mi_cmd_thread_list_ids, mi_cmd_thread_info, print_one_inferior)
+	(list_available_thread_groups, mi_cmd_list_thread_groups)
+	(mi_cmd_data_list_register_names)
+	(mi_cmd_data_list_changed_registers)
+	(mi_cmd_data_list_register_values, get_register)
+	(mi_cmd_data_evaluate_expression, mi_cmd_data_read_memory)
+	(mi_cmd_data_read_memory_bytes, mi_cmd_list_features)
+	(mi_cmd_list_target_features, mi_cmd_add_inferior)
+	(mi_execute_command, mi_load_progress): Adjust.
+	* mi/mi-symbol-cmds.c (mi_cmd_symbol_list_lines): Adjust.
+	* python/py-auto-load.c (print_script, info_auto_load_scripts):
+	Adjust.
+	* python/py-breakpoint.c (bppy_get_commands): Adjust.
+	* tui/tui-interp.c (tui_command_loop): Adjust.
+	* tui/tui-io.c (tui_setup_io, tui_initialize_io): Adjust.
+
+2011-08-04  Pedro Alves  <pedro at codesourcery.com>
+
+	* exceptions.c (struct catcher): Remove saved_uiout field.
+	(exceptions_state_mc_init): Remove the `func_uiout' parameter, and
+	no longer save/resvore the global ui_out builder.
+	(catch_exceptions_with_msg): Save/override/restore the global
+	ui_out builder manually instead of relying on TRY_CATCH to do it.
+	(catch_errors): Save/restore the global ui_out builder manually
+	instead of relying on TRY_CATCH to do it.
+	* exceptions.h (exceptions_state_mc_init): Remove the `func_uiout'
+	parameter.
+	(TRY_CATCH): Adjust.
+	* cli/cli-interp.c (safe_execute_command): Save/override/restore
+	the global ui_out builder manually instead of relying on TRY_CATCH
+	to do it.
+
+2011-08-03  Philippe Waroquiers  <philippe.waroquiers at skynet.be>
+
+	* breakpoint.c (update_global_location_list): Ensure
+	invariant 'first loc marked not duplicated and inserted,
+	following locs marked duplicated/not inserted' is respected
+	for multiple locations at the same address.
+	(unduplicated_should_be_inserted) New function.
+	(swap_insertion) New function.
+
+2011-08-03  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* stack.c (print_frame_arguments_choices): Comment typo fix.
+
+2011-08-01  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	Revert:
+	2011-07-31  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+	* breakpoint.c (insert_bp_location): Remove disabled_breaks
+	argument.  Update callers.
+
+2011-08-01  Paul Pluzhnikov  <ppluzhnikov at google.com>
+
+	PR gdb/13045
+	* doublest.c (convert_doublest_to_floatformat): Pass correct
+	mantissa length to put_field.
+
+2011-08-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* stack.c (do_gdb_disassembly): Use RETURN_MASK_ERROR, simplify the
+	exception_print code path.
+	(backtrace_command): Remove variable e.  Protect arg by make_cleanup in
+	advance.  Simplify memset.  Remove TRY_CATCH.  Remove explicit xfree.
+	(backtrace_full_command):  Remove variable e.  Remove TRY_CATCH.
+
+2011-08-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup.
+	* stack.c (struct print_stack_frame_args, print_stack_frame_stub):
+	Remove, merge them into ...
+	(print_stack_frame): ... here with a TRY_CATCH.  New variable e, remove
+	variable args and its initialization.
+	(struct print_args_args, print_args_stub): Remove, merge them into
+	print_frame.
+	(struct gdb_disassembly_stub_args, gdb_disassembly_stub): Remove, merge
+	them into ...
+	(do_gdb_disassembly): ... here.  Remove variable args and its
+	initialization.
+	(print_frame): Remove variable args and its initialization, new
+	variable gdbarch and numargs (from print_args_stub), inline here
+	print_args_stub with a TRY_CATCH.
+	(struct backtrace_command_args, backtrace_command_stub): Remove, merge
+	them into ...
+	(backtrace_command, backtrace_full_command): ... here with a TRY_CATCH.
+	New variable e, remove variable btargs and its initialization.
+
+2011-08-01  Tristan Gingold  <gingold at adacore.com>
+
+	* darwin-nat.c (darwin_decode_exception_message): Adjust assertion.
+
+2011-07-31  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* breakpoint.c (insert_bp_location): Document return value.
+	(insert_breakpoint_locations): Fix documentation.
+	(remove_breakpoints): Add documentation.
+
+2011-07-31  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* breakpoint.c (insert_bp_location): Remove disabled_breaks
+	argument.  Update callers.
+
+2011-07-30  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* stack.c (print_frame_info): Comment typo fix.
+
+2011-07-29  Sterling Augustine  <saugustine at google.com>
+
+	* MAINTAINERS (Write After Approval): Add myself to the list.
+
+2011-07-29  Tom Tromey  <tromey at redhat.com>
+
+	* solib-target.c: Use DEF_VEC_I, not DEF_VEC_O.
+	(library_list_start_segment): Update.
+	(library_list_start_section): Update.
+
+2011-07-28  Phil Muldoon  <pmuldoon at redhat.com>
+
+	* varobj.c (value_get_print_value): Move hint check later into the
+	function.  Comment function.  Free thevalue before reusing it.
+
+2011-07-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	    Pedro Alves  <pedro at codesourcery.com>
+
+	* eval.c (evaluate_subexp_standard): Remove not_lval from all calls of
+	value_one.
+	* valops.c (value_one): Remove parameter lv.  Do not pass it to itself.
+	Assert the result kind.
+	* value.h (value_one): Remove parameter lv.
+
+2011-07-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix crash on lval_computed values.
+	* valops.c (value_zero): Use not_lval for lval_computed.
+
+2011-07-27  Tom Tromey  <tromey at redhat.com>
+
+	* Makefile.in (HFILES_NO_SRCDIR): Add 'common' prefix for
+	gdb_assert.h, gdb_locale.h, gdb_dirent.h.
+
+2011-07-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* typeprint.c (_initialize_typeprint): Extend the help of "whatis" and
+	"ptype" by their typedefs difference.
+
+2011-07-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* dwarf2expr.c (ctx_no_read_reg): New function.
+	* dwarf2expr.h (ctx_no_read_reg): New declaration.
+	* dwarf2read.c (read_2_signed_bytes, read_4_signed_bytes): Remove.
+	(decode_locdesc_read_mem, decode_locdesc_ctx_funcs): New.
+	(decode_locdesc): Replace by a caller of dwarf_expr_eval.
+
+2011-07-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* dwarf2-frame.c (no_get_frame_base, no_get_frame_cfa, no_get_frame_pc)
+	(no_get_tls_address, no_dwarf_call, no_base_type): Move to the other
+	file.
+	(dwarf2_frame_ctx_funcs): Reference the renamed functions.
+	* dwarf2expr.c (ctx_no_get_frame_base, ctx_no_get_frame_cfa)
+	(ctx_no_get_frame_pc, ctx_no_get_tls_address, ctx_no_dwarf_call)
+	(ctx_no_get_base_type): Move the functions here.
+	* dwarf2expr.h (ctx_no_get_frame_base, ctx_no_get_frame_cfa)
+	(ctx_no_get_frame_pc, ctx_no_get_tls_address, ctx_no_dwarf_call)
+	(ctx_no_get_base_type): New declarations.
+
+2011-07-27  Tom Tromey  <tromey at redhat.com>
+
+	* xcoffread.c (dwarf2_xcoff_names): Add 'macro' and 'sentinel'
+	entries.
+	* symfile.h (struct dwarf2_debug_sections) <sentinel>: New field.
+	* dwarf2read.c (dwarf2_elf_names): Add sentinel entry.
+
+2011-07-26  Sterling Augustine  <saugustine at google.com>
+
+	* cli/cli-dump.c (dump_binary_file): Change parameter type to
+	ULONGEST.
+	(dump_bfd_file): Likewise.
+
+2011-07-26  Philippe Waroquiers  <philippe.waroquiers at skynet.be>
+
+	* remote.c (remote_region_ok_for_hw_watchpoint): New function.
+	(remote_hw_watchpoint_length_limit): New variable.
+	(_initialize_remote) add set,show cmds for this new variable.
+	* gdb.texinfo: document these new commands.
+	* NEWS: Mention these new commands.
+
+2011-07-26  Pedro Alves  <pedro at codesourcery.com>
+
+	* breakpoint.c (works_in_software_mode_watchpoint): Also return
+	true for software watchpoints.
+
+2011-07-26  Joel Brobecker  <brobecker at adacore.com>
+
+	GDB 7.3 released.
+
+2011-07-26  Tom Tromey  <tromey at redhat.com>
+
+	* symfile.h (struct dwarf2_debug_sections) <macro>: New field.
+	* dwarf2read.c (read_indirect_string_at_offset): New function.
+	(read_indirect_string): Use it.
+	(dwarf_decode_macro_bytes): New function, taken from
+	dwarf_decode_macros.  Handle DW_MACRO_GNU_*.
+	(dwarf_decode_macros): Use it.  handle DW_MACRO_GNU_*.
+	(dwarf_parse_macro_header, skip_form_bytes, skip_unknown_opcode):
+	New functions.
+	(struct dwarf2_per_objfile) <macro>: New field.
+	(dwarf2_elf_names): Add .debug_macro.
+	(dwarf2_macros_too_long_complaint): Add 'section' argument.
+	(dwarf2_locate_sections): Handle new section.
+	(read_file_scope): Handle DW_AT_GNU_macros.
+	(dwarf2_per_objfile_free): Unmap the .debug_macro section.
+
+2011-07-26  Paul Pluzhnikov  <ppluzhnikov at google.com>
+
+	* NEWS: Mention dcache configuration.
+	* dcache.c (dcache_set_list, dcache_show_list): New variables.
+	(dcache_size, dcache_line_size): New variables.
+	(LINE_SIZE_MASK, XFORM, MASK): Adjust.
+	(struct dcache_block): Make it expandable.
+	(struct dcache_struct): New field.
+	(dcache_invalidate): Discard freelist upon dcache_line_size changes.
+	(dcache_hit, dcache_alloc, dcache_peek_byte): Adjust.
+	(dcache_poke_byte, dcache_print_line): Adjust.
+	(set_dcache_size, set_dcache_line_size): New functions.
+	(set_dcache_command, show_dcache_command): New functions.
+	(_initialize_dcache): Add new commands.
+
+2011-07-26  Paul Pluzhnikov  <ppluzhnikov at google.com>
+
+	* progspace.h (struct program_space): Add solib_add_generation.
+	* infcmd.c (post_create_inferior): Only call solib_add if not
+	already done.
+	* solib.c (solib_add): Increment solib_add_generation.
+
+2011-07-25  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix implicit pointer offsets.
+	* dwarf2loc.c (indirect_pieced_value): Comment byte_offset.  Use also
+	ptr.OFFSET.
+
+2011-07-25  Tom Tromey  <tromey at redhat.com>
+
+	* ada-lang.c (ada_exception_breakpoint_ops): Make return type
+	const.
+	(ada_exception_sal): Make 'ops' const.
+	(ada_decode_exception_location): Likewise.
+	(ada_decode_assert_location): Likewise.
+	(catch_assert_command): Update.
+	(catch_ada_exception_command): Update.
+	(create_ada_exception_catchpoint): Make 'ops' const.
+	* breakpoint.c (set_raw_breakpoint_without_location)
+	(set_raw_breakpoint, momentary_breakpoint_from_master): Make 'ops'
+	const.
+	(create_internal_breakpoint): Update.
+	(init_raw_breakpoint_without_location): Make 'ops' const.
+	(init_raw_breakpoint, init_catchpoint)
+	(create_fork_vfork_event_catchpoint)
+	(create_syscall_event_catchpoint, init_breakpoint_sal)
+	(create_breakpoint_sal, create_breakpoints_sal)
+	(create_breakpoint, init_ada_exception_breakpoint): Likewise.
+	* breakpoint.h (struct breakpoint) <ops>: Now const.
+	(init_ada_exception_breakpoint, create_breakpoint): Make 'ops'
+	const.
+
+2011-07-25  Paul Pluzhnikov  <ppluzhnikov at google.com>
+
+	* linux-thread-db.c (thread_from_lwp): Initialize th.th_unique.
+
+2011-07-25  Pedro Alves  <pedro at codesourcery.com>
+
+	* breakpoint.h (print_recreate_thread): Declare.
+	(struct breakpoint): Move step_count, pass_count,
+	number_on_target, static_trace_marker_id,
+	static_trace_marker_id_idx ...
+	(struct tracepoint): ... to this new struct.
+	(get_tracepoint, get_tracepoint_by_number_on_target)
+	(get_tracepoint_by_number): Change return type to struct
+	tracepoint pointer.
+	* breakpoint.c (is_tracepoint_type): New, factored out from
+	is_tracepoint.
+	(is_tracepoint): Adjust.
+	(print_one_breakpoint_location): Cast to struct tracepoint as
+	necessary, and adjust.
+	(print_recreate_catch_fork, print_recreate_catch_vfork)
+	(print_recreate_catch_syscall, print_recreate_catch_exec): Call
+	print_recreate_thread.
+	(init_breakpoint_sal): New, factored out from
+	create_breakpoint_sal.
+	(create_breakpoint_sal): Reimplement.
+	(create_breakpoint): Allocate a struct tracecepoint if the caller
+	wanted a tracepoint.  Use init_breakpoint_sal and
+	install_breakpoint.
+	(print_recreate_ranged_breakpoint, print_recreate_watchpoint)
+	(print_recreate_masked_watchpoint)
+	(print_recreate_exception_catchpoint): Call print_recreate_thread.
+	(tracepoint_print_one_detail): Adjust.
+	(tracepoint_print_recreate): Adjust.  Call print_recreate_thread.
+	Dump the pass count here.
+	(update_static_tracepoint): Adjust.
+	(addr_string_to_sals): Adjust.
+	(create_tracepoint_from_upload): Adjust.  Change return type to
+	struct tracepoint pointer.
+	(trace_pass_set_count): Change parameter type to struct tracepoint
+	pointer, and adjust.
+	(trace_pass_command): Adjust.
+	(get_tracepoint, get_tracepoint_by_number_on_target)
+	(get_tracepoint_by_number): Change return type to struct
+	tracepoint pointer, and adjust.
+	(print_recreate_thread): New, factored out from save_breakpoints.
+	(save_breakpoints): Don't print thread and task and passcount
+	recreation here.
+	* remote.c (remote_download_tracepoint): Adjust.
+	* tracepoint.c (trace_actions_command, validate_actionline)
+	(start_tracing, tfind_1, trace_find_tracepoint_command)
+	(trace_dump_command): Adjust.
+	(find_matching_tracepoint): Change return type to struct
+	tracepoint pointer, and adjust.
+	(merge_uploaded_tracepoints, tfile_get_traceframe_address)
+	(tfile_trace_find, tfile_fetch_registers): Adjust.
+	* tracepoint.h (create_tracepoint_from_upload): Change return type
+	to struct tracepoint pointer.
+	* ada-lang.c (print_recreate_exception): Call
+	print_recreate_thread.
+	* mi/mi-cmd-break.c (mi_cmd_break_passcount): Adjust.
+
+2011-07-25  Pedro Alves  <pedro at codesourcery.com>
+
+	* breakpoint.h (struct breakpoint): Move ops as first field.  Move
+	exp_string, exp_string_reparse, exp, exp_valid_block, cond_exp,
+	cond_exp_valid_block, val, val_valid, watchpoint_frame,
+	watchpoint_thread, watchpoint_triggered ...
+	(struct watchpoint): ... to this new struct.
+	(is_watchpoint): Declare.
+	(install_breakpoint): Add new `internal' parameter.
+	* breakpoint.c (is_watchpoint): Delete declaration.
+	(set_breakpoint_condition): Handle watchpoints.
+	(is_watchpoint): Make public.
+	(watchpoint_in_thread_scope): Change parameter type to struct
+	watchpoint.
+	(watchpoint_del_at_next_stop): Change parameter type to struct
+	watchpoint.  Remove assertion.  Adjust.
+	(update_watchpoint): Ditto.
+	(insert_breakpoints, breakpoint_init_inferior)
+	(watchpoints_triggered, watchpoint_check)
+	(bpstat_check_watchpoint, bpstat_check_breakpoint_conditions)
+	(bpstat_stop_status, print_one_breakpoint_location)
+	(print_one_breakpoint_location, watchpoint_locations_match): Cast
+	to struct watchpoint as necessary, and adjust.
+	(install_breakpoint): Add `internal' argument.  If true, don't
+	mention the new breakpoint.  Use set_breakpoint_number.
+	(create_fork_vfork_event_catchpoint)
+	(create_syscall_event_catchpoint): Adjust.
+	(dtor_watchpoint): New.
+	(re_set_watchpoint, insert_watchpoint, remove_watchpoint)
+	(breakpoint_hit_watchpoint, resources_needed_watchpoint)
+	(print_it_watchpoint, print_mention_watchpoint)
+	(print_recreate_watchpoint, insert_masked_watchpoint)
+	(remove_masked_watchpoint, resources_needed_masked_watchpoint)
+	(print_one_detail_masked_watchpoint)
+	(print_mention_masked_watchpoint)
+	(print_recreate_masked_watchpoint): Cast to struct watchpoint as
+	necessary, and adjust.
+	(watch_command_1): Allocate and initialize a struct watchpoint
+	instead of a struct breakpoint.  Use install_breakpoint.
+	(catch_exec_command_1): Adjust.
+	(base_breakpoint_dtor): Delete accesses to watchpoint specific
+	fields.
+	(delete_breakpoint, enable_breakpoint_disp)
+	(invalidate_bp_value_on_memory_change): Cast to struct watchpoint
+	as necessary, and adjust.
+	(initialize_breakpoint_ops): Install dtor_watchpoint as
+	watchpoints' dtor method.
+	* ada-lang.c (create_ada_exception_catchpoint): Adjust.
+	* python/py-breakpoint.c (bppy_get_expression): Use is_watchpoint.
+	to struct watchpoint as necessary, and adjust.
+
+2011-07-25  Pedro Alves  <pedro at codesourcery.com>
+
+	* ada-lang.c (dtor_exception, re_set_exception): Indirect through
+	the the base class ops table.
+	(catch_exception_breakpoint_ops)
+	(catch_exception_unhandled_breakpoint_ops)
+	(catch_assert_breakpoint_ops): Don't statically initialize.
+	(initialize_ada_catchpoint_ops): New.
+	(_initialize_ada_language): Call it.
+	* breakpoint.c (base_breakpoint_ops, bkpt_base_breakpoint_ops)
+	(bkpt_breakpoint_ops): Forward declare.
+	(catch_fork_breakpoint_ops, catch_vfork_breakpoint_ops)
+	(catch_syscall_breakpoint_ops, catch_exec_breakpoint_ops)
+	(ranged_breakpoint_ops, watchpoint_breakpoint_ops)
+	(masked_watchpoint_breakpoint_ops)
+	(gnu_v3_exception_catchpoint_ops): Don't statically initialize.
+	(dtor_catch_syscall, dtor_catch_exec): Indirect through the the
+	base class ops table.
+	(null_re_set, null_check_status, null_works_in_software_mode)
+	(null_resources_needed, null_print_one_detail): Delete.
+	(bkpt_dtor): Rename to ...
+	(base_breakpoint_dtor): ... this.  Make static.
+	(bkpt_allocate_location): Rename to ...
+	(base_breakpoint_allocate_location): ... this.  Make static.
+	(base_breakpoint_re_set): New.
+	(internal_error_pure_virtual_called): New.
+	(base_breakpoint_insert_location, base_breakpoint_remove_location)
+	(base_breakpoint_breakpoint_hit, base_breakpoint_check_status)
+	(base_breakpoint_works_in_software_mode)
+	(base_breakpoint_resources_needed, base_breakpoint_print_it)
+	(base_breakpoint_print_one_detail, base_breakpoint_print_mention)
+	(base_breakpoint_print_recreate): New functions.
+	(base_breakpoint_ops): New global.
+	(bkpt_re_set, bkpt_insert_location, bkpt_remove_location)
+	(bkpt_breakpoint_hit): Make static.
+	(bkpt_check_status): Delete.
+	(bkpt_resources_needed): Make static.
+	(bkpt_works_in_software_mode): Delete.
+	(bkpt_print_it, bkpt_print_mention, bkpt_print_recreate): Make
+	static.
+	(bkpt_breakpoint_ops, internal_breakpoint_ops)
+	(momentary_breakpoint_ops): Don't statically initialize.
+	(internal_bkpt_print_recreate, momentary_bkpt_print_recreate):
+	Delete.
+	(tracepoint_insert_location, tracepoint_remove_location)
+	(tracepoint_check_status, tracepoint_works_in_software_mode)
+	(tracepoint_print_it): Delete.
+	(tracepoint_breakpoint_ops): Don't statically initialize.
+	(initialize_breakpoint_ops): New.
+	(_initialize_breakpoint): Call it.
+	* breakpoint.h (null_re_set, null_works_in_software_mode)
+	(null_resources_needed, null_check_status, null_print_one_detail):
+	(bkpt_dtor, bkpt_allocate_location, bkpt_re_set)
+	(bkpt_insert_location, bkpt_remove_location, bkpt_breakpoint_hit)
+	(bkpt_check_status, bkpt_resources_needed)
+	(bkpt_works_in_software_mode, bkpt_print_it)
+	(null_print_one_detail, bkpt_print_mention, bkpt_print_recreate):
+	Delete declarations.
+	(initialize_breakpoint_ops): Declare.
+
+2011-07-25  Pedro Alves  <pedro at codesourcery.com>
+
+	* breakpoint.c (bkpt_print_it, internal_bkpt_print_it)
+	(momentary_bkpt_print_it): Simplify.
+
+2011-07-25  Pedro Alves  <pedro at codesourcery.com>
+
+	Split internal, momentary and user breakpoints breakpoint_ops
+	tables.
+
+	* breakpoint.c (internal_breakpoint_ops)
+	(momentary_breakpoint_ops): Forward declare.
+	(create_internal_breakpoint): Add new breakpoint_ops parameter.
+	Pass it down, rather than hardcoding bkpt_breakpoint_ops.
+	(create_overlay_event_breakpoint)
+	(create_std_terminate_master_breakpoint)
+	(create_exception_master_breakpoint): Create breakpoints with
+	internal_breakpoint_ops vtable.
+	(set_longjmp_breakpoint): Create momentary breakpoints with
+	momentary_breakpoint_ops vtable, using
+	momentary_breakpoint_from_master.
+	(create_thread_event_breakpoint, create_jit_event_breakpoint)
+	(create_solib_event_breakpoint): Create breakpoints with
+	internal_breakpoint_ops vtable.
+	(set_momentary_breakpoint): Create breakpoints with
+	momentary_breakpoint_ops vtable.
+	(momentary_breakpoint_from_master): New, factored out from
+	clone_momentary_breakpoint.
+	(clone_momentary_breakpoint): Adjust.
+	(watch_command_1): Create scope breakpoints with
+	momentary_breakpoint_ops vtable.
+	(bkpt_re_set): Remove handling of internal and momentary
+	breakpoints.
+	(bkpt_print_mention, bkpt_print_recreate): New.
+	(bkpt_breakpoint_ops): Adjust.
+	(internal_bkpt_re_set, internal_bkpt_check_status)
+	(internal_bkpt_print_it, internal_bkpt_print_mention)
+	(internal_bkpt_print_recreate, internal_breakpoint_ops): New.
+	(momentary_bkpt_re_set, momentary_bkpt_check_status)
+	(momentary_bkpt_print_it, momentary_bkpt_print_mention)
+	(momentary_bkpt_print_recreate): New.
+	(momentary_breakpoint_ops): New.
+
+2011-07-25  Pedro Alves  <pedro at codesourcery.com>
+
+	Implement most breakpoint_ops methods for all breakpoint types,
+	and move the default handlings to the proper callbacks.
+
+	* breakpoint.c (update_watchpoint): Always call the breakpoint's
+	works_in_software_mode method.
+	(insert_bp_location): Go through breakpoint_ops->insert_location
+	for software and hardware watchpoints.
+	(create_internal_breakpoint): Pass bkpt_breakpoint_ops as
+	breakpoint_ops.
+	(remove_breakpoint_1): Go through breakpoint_ops->remove_location
+	for software and hardware watchpoints.
+	(print_it_typical): Delete.
+	(print_bp_stop_message): Always call the breakpoint_ops->print_it
+	method.
+	(watchpoint_check): Adjust comment.
+	(bpstat_check_location): Simply always call the breakpoint's
+	breakpoint_hit method.
+	(bpstat_stop_status): Always call the breakpoint's check_status
+	method.  Remove special cases for watchpoints and internal event
+	breakpoints from here (moved to the check_status implementations).
+	(print_one_breakpoint_location): Assume b->ops is never NULL.
+	Remove static tracepoint marker id printing from here (moved to
+	the print_one_detail callback implementation of tracepoints).
+	(init_bp_location): Assert OPS is never NULL.
+	(allocate_bp_location): Always call the breakpoint's
+	allocate_location method, and remove the default code from here.
+	(free_bp_location): Always call the location's dtor method, and
+	remove the default code from here.
+	(init_raw_breakpoint_without_location): Assert OPS is never NULL.
+	(set_raw_breakpoint_without_location): Add new breakpoint_ops
+	parameter.  Pass it down.
+	(set_raw_breakpoint): Ditto.
+	(print_it_catch_fork): Adjust to take a bpstat as argument.
+	(catch_fork_breakpoint_ops): Install methods.
+	(print_it_catch_vfork): Adjust to take a bpstat as argument.
+	(catch_vfork_breakpoint_ops): Install methods.
+	(dtor_catch_syscall): Call the base dtor.
+	(print_it_catch_syscall): Adjust to take a bpstat as argument.
+	(catch_syscall_breakpoint_ops): Install methods.
+	(dtor_catch_exec): Call the base dtor.
+	(print_it_catch_exec): Adjust to take a bpstat as argument.
+	(catch_exec_breakpoint_ops): Install methods.
+	(hw_breakpoint_used_count, hw_watchpoint_used_count): Always call
+	the breakpoint's resources_needed method, and remove the default
+	code from here.
+	(set_momentary_breakpoint): Pass bkpt_breakpoint_ops as
+	breakpoint_ops.
+	(clone_momentary_breakpoint): Clone the original's ops.
+	(mention): Always call the breakpoint's print_mention method, and
+	remove the default code from here.
+	(create_breakpoint_sal): Adjust to pass the ops to
+	set_raw_breakpoint rather than setting it manually.
+	(create_breakpoint): Assert ops is never NULL.  Adjust to pass the
+	ops to set_raw_breakpoint_without_location rather than setting it
+	manually.
+	(break_command_1): Pass bkpt_breakpoint_ops as breakpoint_ops.
+	(print_it_ranged_breakpoint): Adjust to take a bpstat as argument.
+	(ranged_breakpoint_ops): Install methods.
+	(break_range_command): Adjust to pass the ops to
+	set_raw_breakpoint rather than setting it manually.
+	(re_set_watchpoint, breakpoint_hit_watchpoint)
+	(check_status_watchpoint, resources_needed_watchpoint)
+	(works_in_software_mode_watchpoint, print_it_watchpoint)
+	(print_mention_watchpoint, print_recreate_watchpoint): New
+	functions.
+	(watchpoint_breakpoint_ops): Install new methods.
+	(print_it_masked_watchpoint): New function.
+	(masked_watchpoint_breakpoint_ops): Install new methods.
+	(watch_command_1): Adjust to pass the right breakpoint_ops to
+	set_raw_breakpoint_without_location rather than setting it
+	manually later.  Record the current pspace.
+	(print_it_exception_catchpoint): Adjust to take a bpstat as
+	argument.
+	(gnu_v3_exception_catchpoint_ops): Install new methods.
+	(say_where): New function.
+	(null_re_set, null_check_status, null_works_in_software_mode)
+	(null_resources_needed, null_print_one_detail, bp_location_dtor):
+	New functions.
+	(bp_location_ops): New global.
+	(bkpt_dtor, bkpt_allocate_location, bkpt_re_set)
+	(bkpt_insert_location, bkpt_remove_location, bkpt_breakpoint_hit)
+	(bkpt_check_status, bkpt_resources_needed)
+	(bkpt_works_in_software_mode, bkpt_print_it, bkpt_print_mention)
+	(bkpt_print_recreate): New functions.
+	(bkpt_breakpoint_ops): New global.
+	(tracepoint_re_set, tracepoint_insert_location)
+	(tracepoint_remove_location, tracepoint_breakpoint_hit)
+	(tracepoint_check_status, tracepoint_works_in_software_mode)
+	(tracepoint_print_it, tracepoint_print_one_detail)
+	(tracepoint_print_mention, tracepoint_print_recreate): New
+	functions.
+	(tracepoint_breakpoint_ops): New global.
+	(delete_breakpoint): Always call the breakpoint's dtor method, and
+	remove the default handling from here.
+	(breakpoint_re_set_default): Make static.
+	(breakpoint_re_set_one): Always call the breakpoints re_set
+	method, and remove the default handling from here.
+	(trace_command, ftrace_command, strace_command)
+	(create_tracepoint_from_upload): Pass appropriate breakpoints_ops
+	to create_breakpoint.
+	(save_breakpoints): Always call the breakpoint's print_recreate
+	method, and remove the default handling from here.
+
+	* ada-lang.c (dtor_exception): Call the base dtor.
+	(re_set_exception): Call the base method.
+	(print_it_exception, print_it_catch_exception): Adjust to take a
+	bpstat as argument.
+	(catch_exception_breakpoint_ops): Install methods.
+	(print_it_catch_exception_unhandled): Adjust to take a bpstat as
+	argument.
+	(catch_exception_unhandled_breakpoint_ops): Install methods.
+	(print_it_catch_assert): Adjust to take a bpstat as argument.
+	(catch_assert_breakpoint_ops): Install methods.
+
+	* breakpoint.h (struct breakpoint_ops): Adjust the print_it method
+	to take a bpstat as argument.
+	(enum print_stop_action): Add describing comments to each enum
+	value.
+	(breakpoint_re_set_default): Delete declaration.
+	(null_re_set, null_works_in_software_mode, null_resources_needed)
+	(null_check_status, null_print_one_detail): Declare.
+	(bkpt_breakpoint_ops): Declare.
+	(bkpt_dtor, bkpt_allocate_location, bkpt_re_set)
+	(bkpt_insert_location, bkpt_remove_location, bkpt_breakpoint_hit)
+	(bkpt_check_status, bkpt_resources_needed)
+	(bkpt_works_in_software_mode, bkpt_print_it)
+	(null_print_one_detail, bkpt_print_mention, bkpt_print_recreate):
+	Declare.
+
+	* mi/mi-cmd-break.c (mi_cmd_break_insert): Adjust to pass
+	bkpt_breakpoint_ops.
+	* python/py-breakpoint.c (bppy_init): Ditto.
+
+2011-07-15  Philippe Waroquiers  <philippe.waroquiers at skynet.be>
+
+	* MAINTAINERS (Write After Approval): Add myself to the list.
+
+2011-07-23  Paul Pluzhnikov  <ppluzhnikov at google.com>
+
+	* elfread.c (elf_rel_plt_read): Fix off-by-one bug.
+
+2011-07-22  Pedro Alves  <pedro at codesourcery.com>
+
+	* i386-nat.c (I386_DR_VACANT, I386_DR_LOCAL_ENABLE)
+	(I386_DR_GLOBAL_ENABLE, I386_DR_DISABLE, I386_DR_SET_RW_LEN)
+	(I386_DR_GET_RW_LEN, I386_DR_WATCH_HIT): Add state parameter and
+	adjust.
+	(dr_mirror, dr_status_mirror, dr_control_mirror): Delete.
+	(struct i386_debug_reg_state): New.
+	(i386_init_dregs): New.
+	(dr_mirror): New.
+	(i386_cleanup_dregs): Use i386_init_dregs.
+	(i386_show_dr): Add state parameter and adjust.
+	(i386_insert_aligned_watchpoint): Ditto.  Don't pass the info to
+	the inferior here.
+	(i386_remove_aligned_watchpoint): Likewise.
+	(i386_handle_nonaligned_watchpoint): Add state parameter and adjust.
+	(i386_update_inferior_debug_regs): New.
+	(i386_insert_watchpoint): Work on a local mirror of the debug
+	registers, and only update the inferior on success.
+	(i386_remove_watchpoint): Ditto.
+	(i386_region_ok_for_watchpoint): Adjust.
+	(i386_stopped_data_address): Adjust.
+	(i386_insert_hw_breakpoint): Adjust.
+	(i386_remove_hw_breakpoint): Adjust.
+
+2011-07-22  Tom Tromey  <tromey at redhat.com>
+
+	* amd64-tdep.c (amd64_pseudo_register_read_value): Rename
+	from amd64_pseudo_register_read.  Change arguments.  Call
+	mark_value_bytes_unavailable when needed.
+	(amd64_init_abi): Use set_gdbarch_pseudo_register_read_value, not
+	set_gdbarch_pseudo_register_read.
+	* sentinel-frame.c (sentinel_frame_prev_register): Use
+	regcache_cooked_read_value.
+	* regcache.h (regcache_cooked_read_value): Declare.
+	* regcache.c (regcache_cooked_read_value): New function.
+	(regcache_cooked_read): Call
+	gdbarch_pseudo_register_read_value if available.
+	* i386-tdep.h (i386_pseudo_register_read_value): Declare.
+	(i386_pseudo_register_read): Remove.
+	* i386-tdep.c (i386_pseudo_register_read_into_value): Rename from
+	i386_pseudo_register_read.  Change arguments.  Call
+	mark_value_bytes_unavailable when needed.
+	(i386_pseudo_register_read_value): New function.
+	(i386_gdbarch_init): Call set_gdbarch_pseudo_register_read_value,
+	not set_gdbarch_pseudo_register_read.
+	* gdbarch.sh (pseudo_register_read_value): New method.
+	* gdbarch.c, gdbarch.h: Rebuild.
+	* findvar.c (value_from_register): Call get_frame_register_value.
+
+2011-07-22  Phil Muldoon  <pmuldoon at redhat.com>
+
+	* event-top.c (cli_command_loop): Use get_prompt, get_suffix,
+	get_prefix.
+	(display_gdb_prompt): Likewise.
+	(change_annotation_level): Likewise.
+	(push_prompt): Likewise.
+	(pop_prompt): Likewise.
+	(handle_stop_sig): Use get_prompt with a level.
+	* top.c (command_loop): Use get_prompt with a level.
+	(set_async_annotation_level): Use set_prompt with a level.
+	(get_prefix): New function.
+	(set_prefix): Ditto.
+	(set_suffix): Ditto.
+	(get_suffix): Ditto.
+	(get_prompt): Accept a level argument.
+	(set_prompt): Accept a level argument.  Free old prompts.  Set
+	new_async_prompt if level is 0.
+	(init_main): Use set_prompt with a level.  Do not set
+	new_async_prompt.
+	* event-top.h (PROMPT, SUFFIX, PREFIX): Move to top.c
+	* top.h: Declare set_suffix, get_suffix, set_prefix, get_prefix.
+	Modify set_prompt, get_prompt to account for levels.
+	* tui/tui-interp.c (tui_command_loop): Use get_prompt with a
+	level.
+	* python/python.c (before_prompt_hook): Use set_prompt.
+	
+2011-07-22  Kwok Cheung Yeung  <kcy at codesourcery.com>
+
+	* defs.h: Add guard against inclusion in gdbserver.
+	(struct ptid, ptid_t): Move to common/ptid.h.
+	(xfree, xzalloc, xasprintf, xvasprintf, xstrprintf, xstrvprintf,
+	xsnprintf, internal_error): Move to common/common-utils.h.
+	(nomem): Delete.
+	* gdb_assert.h: Move into common/ sub-directory.
+	* gdb_locale.h: Ditto.
+	* gdb_dirent.h: Ditto.
+	* inferior.h (minus_one_ptid, null_ptid, ptid_build, pid_to_ptid,
+	ptid_get_pid, ptid_get_lwp, ptid_get_tid, ptid_equal, ptid_is_pid):
+	Move into common/ptid.h.
+	* xml-support.c (xml_escape_text): Move into common/xml-utils.c.
+	(gdb_xml_create_parser_and_cleanup_1, xml_fetch_context_from_file):
+	Change nomem to malloc_failure.
+	* xml-support.h (xml_escape_text): Move into common/xml-utils.h.
+	* utils.c (nomem): Rename to malloc_failure.
+	(xmalloc, xzalloc, xrealloc, xcalloc, xfree, xstrprintf, xasprintf,
+	xvasprintf, xstrvprintf, xsnprintf): Move to common/common-utils.c.
+	(gdb_buildargv): Change nomem to malloc_failure.
+	* infrun.c (null_ptid, minus_one_ptid, ptid_build, pid_to_ptid,
+	ptid_get_pid, ptid_get_lwp, ptid_get_tid, ptid_equal,
+	ptid_is_pid): Move into common/ptid.c.
+	(initialize_infrun): Delete initialization of null_ptid and
+	minus_one_ptid.
+	* linux-nat.c (linux_nat_xfer_osdata): Defer to
+	linux_common_xfer_osdata.
+	* Makefile.in (SFILES): Add common/common-utils.c, common/xml-utils.c,
+	common/ptid.c and common/buffer.c.
+	(HFILES_NO_SRCDIR): Add common/common-utils.h, common/xml-utils.h,
+	common/ptid.h, common/buffer.h and common/linux-osdata.h.
+	(COMMON_OBS): Add xml-utils.o, common-utils.o, buffer.o and ptid.o.
+	(common-utils.o, xml-utils.o, ptid.o, buffer.o, linux-osdata.o): New
+	rules.
+	* common/gdb_assert.h: New.
+	* common/gdb_dirent.h: New.
+	* common/gdb_locale.h: New.
+	* common/buffer.c: New.
+	* common/buffer.h: New.
+	* common/ptid.c: New.
+	* common/ptid.h: New.
+	* common/xml-utils.c: New.
+	* common/xml-utils.h: New.
+	* common/common-utils.c: New.
+	* common/common-utils.h: New.
+	* common/linux-osdata.c: New.
+	* common/linux-osdata.h: New.
+	* config/alpha/alpha-linux.mh (NATDEPFILES): Add linux-osdata.o.
+	* config/arm/linux.mh (NATDEPFILES): Ditto.
+	* config/i386/linux.mh (NATDEPFILES): Ditto.
+	* config/i386/linux64.mh (NATDEPFILES): Ditto.
+	* config/ia64/linux.mh (NATDEPFILES): Ditto.
+	* config/m32r/linux.mh (NATDEPFILES): Ditto.
+	* config/m68k/linux.mh (NATDEPFILES): Ditto.
+	* config/mips/linux.mh (NATDEPFILES): Ditto.
+	* config/pa/linux.mh (NATDEPFILES): Ditto.
+	* config/powerpc/linux.mh (NATDEPFILES): Ditto.
+	* config/powerpc/ppc64-linux.mh (NATDEPFILES): Ditto.
+	* config/s390/s390.mh (NATDEPFILES): Ditto.
+	* config/sparc/linux.mh (NATDEPFILES): Ditto.
+	* config/sparc/linux64.mh (NATDEPFILES): Ditto.
+	* config/xtensa/linux.mh (NATDEPFILES): Ditto.
+
+2011-07-21  Matt Rice  <ratmice at gmail.com>
+
+	* NEWS: Add info macros and info definitions commands.
+
+2011-07-21  Phil Muldoon  <pmuldoon at redhat.com>
+
+	* NEWS: Document Python prompt substitution hook.
+
+2011-07-18  Matt Rice  <ratmice at gmail.com>
+
+	PR macros/12999
+	* macrotab.h (macro_callback_fn): Add new arguments to callback.
+	* macrotab.c (foreach_macro): Ditto.
+	(foreach_macro_in_scope): Ditto.
+	* macrocmd.c (print_macro_callback): New function.
+	(info_macro_command): Move some code to print_macro_definition.
+	(print_macro_definition): New function.
+	(print_one_macro): Add new arguments to callback.
+	(info_definitions_command): New function.
+	(info_macros_command): Ditto.
+	(_initialize_macrocmd): Add info macros and info definitions commands.
+	* symtab.c (add_macro_name): Add new arguments to callback.
+
+2011-07-21  Phil Muldoon  <pmuldoon at redhat.com>
+            Tom Tromey  <tromey at redhat.com>
+
+	* top.c (set_prompt): Rewrite to free previous prompt, free
+	asynch_new_prompt and set both on new prompts.
+	* event-top.c (display_gdb_prompt): Add prompt substitution
+	logic.
+	* python/python.c (before_prompt_hook): New function.
+
+2011-07-20  Matt Rice  <ratmice at gmail.com>
+
+	* bfin-tdep.c (bfin_extract_return_value): Fix swapped
+	arguments to store_unsigned_integer.
+
+2011-07-20  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2read.c (process_enumeration_scope): Do not call new_symbol
+	in some declaration-only cases.
+
+2011-07-18  Tom Tromey  <tromey at redhat.com>
+
+	PR symtab/12984:
+	* dwarf2read.c (dwarf2_section_info_def): New typedef.
+	(struct dwarf2_per_objfile) <types>: Change to a VEC.
+	(struct dwarf2_per_cu_data) <from_debug_types>: Remove.
+	<debug_type_section>: New field.
+	(dwarf2_locate_sections): Push .debug_types sections onto VEC.
+	(load_cu): Use appropriate section.
+	(create_signatured_type_table_from_index): Add 'section'
+	argument.
+	(dwarf2_read_index): Only allow a single .debug_types section.
+	(dw2_get_file_names): Use appropriate section.
+	(read_type_comp_unit_head): Add 'section' argument.
+	(create_debug_types_hash_table): Loop over all .debug_types
+	sections.
+	(init_cu_die_reader): Use appropriate section.
+	(process_psymtab_comp_unit, load_partial_comp_unit)
+	(load_full_comp_unit, read_die_and_children, find_partial_die)
+	(lookup_die_type, determine_prefix, follow_die_offset): Update.
+	(lookup_signatured_type_at_offset): Add 'section' argument.
+	(read_signatured_type_at_offset): Add 'sect' argument.
+	(read_signatured_type): Use appropriate section.
+	(set_die_type, get_die_type_at_offset): Update.
+	(dwarf2_per_objfile_free): Free all .debug_types sections, and
+	VEC.
+	(write_psymtabs_to_index): Don't allow index with more than one
+	.debug_types section.
+
+2011-07-19  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix crash if referenced CU is aged out.
+	* dwarf2loc.c (per_cu_dwarf_call): New variable back_to, use to for
+	xfree of block.data.
+	(indirect_pieced_value): New variable back_to, use to for xfree of
+	baton.data.
+	(dwarf2_compile_expr_to_ax): New variable back_to, use to for xfree of
+	block.data.
+	* dwarf2read.c (dwarf2_find_base_address): New prototype.
+	(load_cu): New function from ...
+	(dw2_do_instantiate_symtab): ... the code here ...
+	(process_full_comp_unit): ... and here.
+	(dwarf2_fetch_die_location_block): Call load_cu first.  Call xmemdup on
+	retval.data.
+
+2011-07-19  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* dwarf2loc.c (indirect_pieced_value): Use check_typedef for VALUE's
+	type.
+
+2011-07-19  Gary Benson  <gbenson at redhat.com>
+
+	* infrun.c (struct execution_control_state): New member
+	stop_func_filled_in.
+	(clear_stop_func, fill_in_stop_func): New functions.
+	(handle_inferior_event): Call clear_stop_func rather than
+	manipulating the execution control state directly.
+	Call fill_in_stop_func lazily as required rather than
+	directly calling find_pc_partial_function in all cases.
+
+2011-07-18  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2read.c (read_subrange_type): Use attr_form_is_block when
+	checking for variable-sized array.
+
+2011-07-18  Jean-Charles Delay  <delay at adacore.com>
+
+	* varobj.h (varobj_languages): Add vlang_ada definition to the list
+	of supported languages.
+	* varobj.c: Add top definitions and basic implementation of the
+	following callbacks: ada_number_of_children, ada_name_of_variable,
+	ada_name_of_child, ada_path_expr_of_child, ada_value_of_root,
+	ada_value_of_child, ada_type_of_child, ada_value_of_variable.
+	(languages): Register Ada-specific callbacks.
+	(variable_language): Add the Ada case in the language setter switch.
+
+2011-07-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* remote-mips.c (pmon_download): Fix ignored return value GCC warning.
+
+2011-07-15  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup.
+	* dwarf2-frame.c (dwarf2_frame_ctx_funcs): New.
+	(execute_stack_op): Use dwarf2_frame_ctx_funcs
+	* dwarf2expr.c (dwarf_get_base_type): Access get_base_type via funcs.
+	(execute_stack_op): Access read_reg, get_frame_base, read_mem,
+	get_frame_cfa, get_tls_address and dwarf_call via funcs.
+	* dwarf2expr.h (struct dwarf_expr_context): New forward declaration.
+	(struct dwarf_expr_context_funcs): New, move here methods from ...
+	(struct dwarf_expr_context): ... here.  New fields funcs.
+	* dwarf2loc.c (dwarf_expr_dwarf_call): Access get_frame_pc via funcs.
+	(dwarf_expr_ctx_funcs): New.
+	(dwarf2_evaluate_loc_desc_full): Use dwarf_expr_ctx_funcs.
+	(needs_frame_dwarf_call): Access get_frame_pc via funcs.
+	(needs_frame_ctx_funcs): New.
+	(dwarf2_loc_desc_needs_frame): Use needs_frame_ctx_funcs.
+
+2011-07-15  Fawzi Mohamed  <fawzi.mohamed at nokia.com>
+
+	* MAINTAINERS (Write After Approval): Add myself to the list.
+
+2011-07-15  Fawzi Mohamed  <fawzi.mohamed at nokia.com>
+
+	* dwarf2-frame.c (decode_frame_entry, decode_frame_entry_1): Ensure
+	that CIE pointer of an FDE really points to a CIE .
+
+2011-07-15  Hui Zhu  <teawater at gmail.com>
+
+	* remote.c (remote_get_trace_status): Add comments.
+
+2011-07-14  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup - constify struct lval_funcs.
+	* dwarf2loc.c (pieced_value_funcs): Make it const.
+	* infrun.c (siginfo_value_funcs): Likewise.
+	* opencl-lang.c (opencl_value_funcs): Likewise.
+	* valops.c (value_assign, value_ind): Make the funcs variable const.
+	* value.c (struct value): Make location.computed.funcs target const.
+	Rearrange the comments.
+	(allocate_computed_value): Make the funcs parameter target const.
+	(value_computed_funcs): Return the funcs target const.
+	(value_free, value_copy, set_value_component_location): Make the funcs
+	variable const.
+	* value.h (allocate_computed_value): Make the funcs parameter target
+	const.
+	(value_computed_funcs): Return the funcs target const.
+	* windows-tdep.c (tlb_value_funcs): Make it const.
+
+2011-07-14  Hui Zhu  <teawater at gmail.com>
+
+	* remote.c (remote_get_trace_status): Initialize p.
+
+2011-07-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Work around kgdb.
+	* remote.c (remote_get_trace_status): New variable ex.  Put
+	remote_get_noisy_reply into TRY_CATCH.  Call exception_fprintf for it.
+
+2011-07-13  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2expr.c (execute_stack_op) <DW_OP_GNU_regval_type>: Use
+	value_from_contents for final conversion.
+
+2011-07-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup.
+	* dwarf2loc.c (dwarf_expr_frame_base_1, dwarf2_evaluate_loc_desc_full):
+	Indent prototypes so they do not get into tags.
+
+2011-07-12  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup making also optimized out values lazy.
+	* dwarf2loc.c (dwarf2_evaluate_loc_desc_full): Use
+	allocate_optimized_out_value.  Twice.
+	(loclist_read_variable)  Use allocate_optimized_out_value.  Once.
+	* findvar.c (read_var_value): Likewise.
+	* value.c (allocate_optimized_out_value): New function.
+	* value.h (allocate_optimized_out_value): New declaration.
+
+2011-07-12  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix occasional crash of CTRL-C during DWARF read in.
+	* dwarf2read.c (dwarf2_mark_helper): Return on NULL CU.
+
+2011-07-11  Tom Tromey  <tromey at redhat.com>
+
+	* regcache.c (struct regcache_descr): Fix typo.
+	* i387-tdep.c (i387_supply_xsave): Fix typo.
+
+2011-07-11  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2read.c (handle_DW_AT_stmt_list): New function.
+	(read_file_scope, read_type_unit_scope): Use it.
+
+2011-07-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* dwarf2expr.c (read_sleb128): Fix signed extension overflowing host
+	`int'.
+
+2011-07-11  Phil Muldoon  <pmuldoon at redhat.com>
+
+        PR python/12438
+	* python/python.c: Set gdbpy_should_print_stack default to off.
+	(set_python): Deprecate maint set python print-stack to
+	class_deprecate.
+	(_initialize_python): Deprecate maint set/show python print-stack.
+	Add new prefix command, python.  Add new setting, print-backtrace.
+	* NEWS: Document set python print-stack.  Document default change.
+
+2011-07-11  Phil Muldoon  <pmuldoon at redhat.com>
+
+	* python/py-inferior.c (infpy_dealloc): New function.
+        (inferior_to_inferior_object): Return a new object, or a
+	new reference to the existing object.
+        (find_thread_object): Cleanup references to inferior.
+        (delete_thread_object): Ditto.
+        * python/py-infthread.c (create_thread_object): Do not increment
+	inferior reference count.
+
+2011-07-08  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2loc.c (locexpr_regname): New function.
+	(locexpr_describe_location_piece): Use it.
+	(disassemble_dwarf_expression): Add per_cu argument.  Use
+	locexpr_regname.
+	<DW_OP_GNU_deref_type, DW_OP_GNU_const_type,
+	DW_OP_GNU_regval_type, DW_OP_GNU_convert, DW_OP_GNU_reinterpret>:
+	New cases.
+	(locexpr_describe_location_1): Add per_cu argument.
+	(locexpr_describe_location): Update.
+	(loclist_describe_location): Update.
+
+2011-07-08  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2expr.c (execute_stack_op): Add QUIT.
+
+2011-07-07  Hui Zhu  <teawater at gmail.com>
+
+	Revert:
+	2011-07-06  Hui Zhu  <teawater at gmail.com>
+	* remote.c (remote_start_remote): Add TRY_CATCH for
+	remote_get_trace_status.
+	* tracepoint.c (disconnect_tracing): Ditto.
+
+2011-07-07  Andrew Burgess  <aburgess at broadcom.com>
+
+	* cli/cli-setshow.c (do_setshow_command): Display var_zinteger
+	variables as signed, not unsigned.
+
+2011-07-06  Joel Brobecker  <brobecker at adacore.com>
+
+	* jit.c (jit_inferior_init): Reformat forward declaration.
+
+2011-07-06  Matt Rice  <ratmice at gmail.com>
+
+	* MAINTAINERS (Write After Approval): Add myself to the list.
+
+2011-07-06  Hui Zhu  <teawater at gmail.com>
+
+	* remote.c (remote_start_remote): Add TRY_CATCH for
+	remote_get_trace_status.
+	* tracepoint.c (disconnect_tracing): Ditto.
+
+2011-07-05  Tom Tromey  <tromey at redhat.com>
+
+	* symtab.c (operator_chars): Now static.
+	* linespec.c (operator_chars): Don't declare.
+
+2011-07-05  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* ui-out.h (ui_out_field_core_addr): Fix typo in comment.
+
+2011-07-05  Tom Tromey  <tromey at redhat.com>
+
+	* gnu-v3-abi.c (gnuv3_rtti_type): Check TYPE_CPLUS_REALLY_JAVA.
+	* gdbtypes.h (struct cplus_struct_type) <is_java>: New field.
+	(TYPE_CPLUS_REALLY_JAVA): New macro.
+	* dwarf2read.c (process_structure_scope): Set
+	TYPE_CPLUS_REALLY_JAVA.
+
+2011-07-05  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* ada-lang.c: Fix typos.
+	* amd64-tdep.c: Likewise.
+	* breakpoint.c: Likewise.
+	* cli/cli-decode.c: Likewise.
+	* findcmd.c: Likewise.
+	* inline-frame.c: Likewise.
+	* mi/mi-main.c: Likewise.
+	* minsyms.c: Likewise.
+	* monitor.c: Likewise.
+	* monitor.h: Likewise.
+	* prologue-value.c: Likewise.
+	* reverse.c: Likewise.
+	* s390-tdep.c: Likewise.
+
+2011-07-06  Paul Pluzhnikov  <ppluzhnikov at google.com>
+
+	* jit.c (jit_inferior_init): Forward declare.
+	(jit_breakpoint_re_set_internal): Call jit_inferior_init.
+
+2011-07-04  Joel Brobecker  <brobecker at adacore.com>
+
+        * osabi.c (generic_elf_osabi_sniffer): Minor comment reformatting.
+
+2011-07-04  Tristan Gingold  <gingold at adacore.com>
+
+	* ada-tasks.c (KNOWN_TASKS_LIST): New macro.
+	(tcb_fieldno): Add activation_link field.
+	(get_known_tasks_addr): Moved and rewritten.
+	(get_tcb_types_info): Set activation_link field.
+	(read_known_tasks_array): Add parameter.  Rewritten.
+	(read_known_tasks_list): New function.
+	(read_known_tasks): New function.
+	(ada_build_task_list): Call read_known_tasks instead of
+	read_known_tasks_array.
+	* ravenscar-thread.c: Add first_task_name constant.
+	(has_ravenscar_runtime): Check for task list too.
+
+2011-07-04  Tristan Gingold  <gingold at adacore.com>
+
+	* ada-tasks.c: Renames fieldno to actb_fieldno.
+	(ada_get_task_number): Indentation.
+	(get_tcb_types_info): Remove all parameters.  Write directly
+	the globals.
+	(ptid_from_atcb_common): Adjust.
+	(read_atcb): Adjust.
+
+2011-07-04  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* symtab.c (in_prologue): Remove mention of ppc's refine_prologue_limit.
+
+2011-07-04  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* ui-out.c (ui_out_field_core_addr): Mention that the function
+	description is in the header file.
+	* ui-out.h (ui_out_field_core_addr): Document function.
+
+2011-07-04  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* ui-out.c (ui_out_get_field_separator): Remove unused function.
+	* ui-out.h (ui_out_get_field_separator): Remove prototype.
+
+2011-07-04  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* symtab.c (expand_line_sal): Remove empty line.
+
+2011-07-04  Thomas Schwinge  <thomas at schwinge.name>
+
+	* osabi.c (generic_elf_osabi_sniffer) <ELFOSABI_GNU>: Handle in the
+	same way as ELFOSABI_NONE.
+	<ELFOSABI_LINUX, ELFOSABI_HURD>: Remove cases.
+
+2011-07-04  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* breakpoint.c: Fix typos in comments.
+	* linespec.c: Likewise.
+	* symtab.c: Likewise.
+
+2011-07-04  Joel Brobecker  <brobecker at adacore.com>
+
+	* dwarf2-frame.c (dwarf2_build_frame_info): Do not load .eh_frame
+	section in separate object files.
+
+2011-07-04  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix false GCC warning.
+	* linespec.c (decode_line_1): Initialize values.
+
+2011-07-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* linespec.c (find_method): Accept the function type automatically only
+	if it was specified with parameter types.
+
+2011-07-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Stop on first linespec terminator instead of eating what we can.
+	* linespec.c (is_linespec_boundary): New function.
+	(name_end): Remove function.
+	(keep_name_info): New parameter on_boundary, replace the body.
+	(decode_line_1): Provide the parameter to keep_name_info.
+	(decode_compound): Likewise.  Drop the trailing java return type
+	handling.  Twice.
+
+2011-07-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fall back linespec to minimal symbols.
+	* linespec.c (decode_line_1): New variable ex, saved_argptr.  Protect
+	decode_compound by TRY_CATCH, fall back on minsyms if it failed.
+	(find_method, symbol_found): Change error to cplusplus_error.
+
+2011-07-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* symtab.c (symbol_find_demangled_name): Remove DMGL_VERBOSE.
+
+2011-07-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	    Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2read.c (check_physname): New variable.
+	(dwarf2_physname): Prefer DW_AT_linkage_name over dwarf2_compute_name.
+	(show_check_physname): New function.
+	(_initialize_dwarf2_read): Add `check-physname' for check_physname.
+
+2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+
+	* machoread.c (macho_symfile_read): Delete OBE comment.
+
+2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+
+	* machoread.c (struct macho_oso_data): Delete.
+	(current_oso): Delete.
+	(macho_relocate_common_syms): New function, mostly extracted
+	out of
+	(macho_add_oso_symfile): Call macho_relocate_common_syms.
+	Remove code that sets and unset current_oso.
+	(macho_symfile_relocate): Delete handling of common symbols,
+	now moved to macho_relocate_common_syms.
+
+2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+
+	* darwin-nat.c (darwin_ptrace): Add documentation.
+	Set errno to zero before calling ptrace.  If ptrace returns
+	-1 and errno is zero, then change then return zero.
+	(darwin_kill_inferior): Issue a warning instead of triggering
+	a failed assertion when the PT_KILL ptrace operations returned
+	nonzero.
+
+2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+
+	* darwin-nat.c (darwin_detach): Call darwin_resume_inferior
+	only when inf->private->no_ptrace.
+
+2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-lang.c (print_it_exception): Print temporary catchpoints
+	as "Temporary catchpoint".
+	(print_mention_exception): Likewise.
+
+2011-07-01  Tom Tromey  <tromey at redhat.com>
+
+	* jv-lang.c (java_language_defn): Use java_printchar,
+	java_printstr.
+	(java_get_encoding): New function.
+	(java_emit_char): Use generic_emit_char.
+	(java_printchar): New function.
+	(java_printstr): Likewise.
+
+2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-typeprint.c (print_record_type): If unable to decode
+	the name of the parent type, use the encoded name.
+
+2011-07-01  Jean-Charles Delay  <delay at adacore.com>
+
+	* ada-typeprint.c (ada_print_type): Fix both PAD type and
+	pointer to constrained packed array type output.
+	* ada-valprint.c (ada_val_print_1): Fix pointer to constrained
+	packed array output.
+
+2011-07-01  Jean-Charles Delay  <delay at adacore.com>
+
+	* ada-typeprint.c (print_array_type): removed if condition on show
+	being negative for bounds printing.
+
+2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-lang.c (ada_identical_enum_types_p): New function.
+	(symbols_are_identical_enums): New function.
+	(remove_extra_symbols): Do nothing if NSYMS < 2.
+	Use symbols_are_identical_enums.
+
+2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-valprint.c (ada_value_print): Handle typedefs.
+
+2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-lang.c (ada_evaluate_subexp): Add missing word in comment.
+
+2011-07-01  Eric Botcazou  <ebotcazou at adacore.com>
+
+	* ada-lang.c (thin_descriptor_type): Deal with typedefs.
+	(decode_constrained_packed_array): Likewise.
+	(ada_evaluate_subexp) <TERNOP_SLICE>: Likewise.
+
+2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-exp.y (convert_char_literal): Handle typedef types.
+
+2011-07-01  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-lang.c (ada_remove_trailing_digits): Expand documentation.
+
+2011-06-30  Tom Tromey  <tromey at redhat.com>
+
+	* varobj.c (varobj_create): Call do_cleanups on early exit path.
+	* valops.c (find_overload_match): Call do_cleanups on early exit
+	path.
+	* solib.c (solib_find): Call do_cleanups on early exit path.
+
+2011-06-30  Tom Tromey  <tromey at redhat.com>
+
+	* symfile-mem.c (symbol_file_add_from_memory): Call do_cleanups.
+	* solib-svr4.c (open_symbol_file_object): Call do_cleanups on all
+	return paths.  Defer final do_cleanups until last return.
+	* arm-tdep.c (arm_exidx_new_objfile): Make null cleanup after
+	early return.
+
+2011-06-30  Tom Tromey  <tromey at redhat.com>
+
+	* Makefile.in (SUBDIR_MI_CFLAGS): Don't add -DMI_OUT=1.
+
+2011-06-30  Andrew Burgess  <aburgess at broadcom.com>
+
+	* MAINTAINERS (Write After Approval): Add myself to the list.
+
+2011-06-29  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Disable epilogue unwinders on recent GCCs.
+	* amd64-tdep.c (amd64_in_function_epilogue_p): New variable symtab,
+	initialize it, return 0 on EPILOGUE_UNWIND_VALID.
+	* dwarf2read.c (process_full_comp_unit): Initialize
+	EPILOGUE_UNWIND_VALID.
+	* i386-tdep.c (i386_in_function_epilogue_p): New variable symtab,
+	initialize it, return 0 on EPILOGUE_UNWIND_VALID.
+	* symtab.h (struct symtab): New field epilogue_unwind_valid.
+
+2011-06-29  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup - reformatting.
+	* dwarf2read.c (producer_is_gcc_ge_4_0): Rename to ...
+	(producer_is_gcc_ge_4): ... here, change the return value.
+	(process_full_comp_unit): New variable gcc_4_minor, adjust the value
+	interpretation.
+
+2011-06-29  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix non-only rename list for Fortran modules import.
+	* cp-namespace.c (cp_scan_for_anonymous_namespaces): Adjust the
+	cp_add_using_directive caller.
+	(cp_add_using_directive): New parameter excludes, describe it.  New
+	variables ix and param.  Compare if also excludes match.  Allocate NEW
+	with variable size, initialize EXCLUDES there.
+	(cp_lookup_symbol_imports): New variable excludep, test
+	current->EXCLUDES with it.
+	* cp-support.h: Include vec.h.
+	(struct using_direct): New field excludes, describe it.
+	(DEF_VEC_P (const_char_ptr)): New.
+	(cp_add_using_directive): New parameter excludes.
+	* defs.h (const_char_ptr): New typedef.
+	* dwarf2read.c (read_import_statement): New variables child_die,
+	excludes and cleanups, read in excludes.
+	(read_namespace): Adjust the cp_add_using_directive caller.
+
+2011-06-29  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup.
+	* cp-namespace.c (cp_add_using_directive): Turn positive comparison to
+	negative comparisons.
+
+2011-06-29  André Pönitz  <andre.poenitz at nokia.com>
+
+	* mi/mi-main.c (mi_cmd_list_features): Emit
+	breakpoint-notifications.
+
+2011-06-29  Tom Tromey  <tromey at redhat.com>
+
+	PR fortran/10036:
+	* valprint.h (generic_emit_char, generic_printstr): Declare.
+	* valprint.c (wchar_printable, append_string_as_wide)
+	(print_wchar): Move from c-lang.c.
+	(generic_emit_char): New function; mostly taken from c_emit_char.
+	(generic_printstr): New function; mostly taken from c_printstr.
+	* f-valprint.c (f_val_print) <TYPE_CODE_ARRAY>: Handle strings
+	represented as arrays.
+	<TYPE_CODE_CHAR>: Treat as TYPE_CODE_INT; recognize as character
+	type.
+	* f-typeprint.c (f_type_print_base) <TYPE_CODE_CHAR>: Treat
+	identically to TYPE_CODE_INT.
+	* f-lang.c (f_get_encoding): New function.
+	(f_emit_char): Use generic_emit_char.
+	(f_printchar): Replace comment.
+	(f_printstr): Use generic_printstr.
+	* dwarf2read.c (read_base_type) <DW_ATE_unsigned>: Handle Fortran
+	"character" types specially.
+	<DW_ATE_signed_char, DW_ATE_unsigned_char>: Make TYPE_CODE_CHAR
+	for Fortran.
+	* c-lang.c (wchar_printable, append_string_as_wide, print_wchar):
+	Move to valprint.c
+	(c_emit_char): Call generic_emit_char.
+	(c_printstr): Call generic_printstr.
+
+2011-06-29  Gary Benson  <gbenson at redhat.com>
+
+	* breakpoint.c (bpstat_what): Removed duplicated case.
+
+2011-06-28  Tom Tromey  <tromey at redhat.com>
+
+	* python/python-internal.h (PY_SSIZE_T_CLEAN): Define.
+
+2011-06-27  Tom Tromey  <tromey at redhat.com>
+
+	* valops.c (find_overload_match): Call do_cleanups before early
+	return.
+	* top.c (execute_command): Call do_cleanups before early return.
+	(command_loop): Likewise.
+	* stack.c (backtrace_command): Make a null cleanup early.  Don't
+	conditionally call do_cleanups.
+	* python/py-value.c (TRY_CATCH): Move cleanup handling into
+	TRY_CATCH.
+	* python/py-breakpoint.c (gdbpy_breakpoint_has_py_cond): Rearrange
+	so cleanups are always run.
+	* mi/mi-cmd-var.c (mi_cmd_var_delete): Reset old_cleanups.
+	* findcmd.c (parse_find_args): Call do_cleanups on early return
+	path.
+	* dbxread.c (elfstab_build_psymtabs): Make a null cleanup early.
+	Don't conditionally call do_cleanups.
+	* cli/cli-script.c (execute_user_command): Initialize 'old_chain'
+	later.
+
+2011-06-27  Eric Botcazou  <ebotcazou at adacore.com>
+
+	* MAINTAINERS (Write After Approval): Use default email address.
+
+2011-06-27  Joel Brobecker  <brobecker at adacore.com>
+
+	* MAINTAINERS (Write After Approval): Add Eric Botcazou.
+
+2011-06-27  Eric Botcazou  <ebotcazou at adacore.com>
+
+	* sparc-tdep.h (struct sparc_frame_cache): Add frame_offset,
+	saved_regs_mask and copied_regs_mask fields.
+	(sparc_record_save_insn): New prototype.
+	* sparc-tdep.c (sparc_alloc_frame_cache): Initialize the new fields.
+	(sparc_record_save_insn): New function.
+	(sparc_analyze_prologue): Add head comment.  Recognize store insns
+	of call-saved registers.  Use OFFSET consistently.  Recognize flat
+	frames and cache their settings.
+	(sparc32_skip_prologue): Handle flat frames.
+	(sparc_frame_cache): Add frame_offset to the base address.
+	(sparc32_frame_cache): Adjust to new frame description.
+	(sparc32_frame_prev_register): Likewise.
+	* sparc64-tdep.c (sparc64_frame_prev_register): Likewise.
+	* sparc-sol2-tdep.c (sparc32_sol2_sigtramp_frame_cache): Likewise.
+	* sparc64-sol2-tdep.c (sparc64_sol2_sigtramp_frame_cache): Likewise.
+	* sparcnbsd-tdep.c (sparc32nbsd_sigcontext_frame_cache): Force the
+	frame by calling sparc_record_save_insn.
+	* sparc64nbsd-tdep.c (sparc64nbsd_sigcontext_frame_cache): Likewise.
+	* sparcobsd-tdep.c (sparc32obsd_sigtramp_frame_cache): Likewise.
+	* sparc64obsd-tdep.c (sparc64obsd_frame_cache): Likewise.
+
+2011-06-27  Tristan Gingold  <gingold at adacore.com>
+
+	* dwarf2read.c (struct dwarf2_section_info): Replace was_mmapped
+	field by map_addr and map_len.
+	(dwarf2_read_section): Adjust for the new bfd_mmap api.
+	(munmap_section_buffer): Likewise.
+
+2011-06-24  Tom Tromey  <tromey at redhat.com>
+
+	* varobj.c (update_dynamic_varobj_children): Make 'name' const.
+	* symtab.h (lookup_struct, lookup_union, lookup_enum): Update.
+	* python/python.c (gdbpy_parameter): Make 'arg' const.
+	(execute_gdb_command): Likewise.
+	(gdbpy_decode_line): Likewise.  Copy it.
+	(gdbpy_parse_and_eval): Make 'expr_string' const.  Copy it.
+	(gdbpy_write): Make 'arg' const.
+	* python/py-type.c (typy_lookup_typename): Make 'type_name'
+	const.
+	(gdbpy_lookup_type): Likewise.
+	* python/py-prettyprint.c (print_children): Make 'name' const.
+	* python/py-param.c (parmpy_init): Make 'name' const.  Copy it.
+	* python/py-inferior.c (infpy_write_memory): Make 'buf_len' a
+	Py_ssize_t.
+	* python/py-function.c (fnpy_init): Make 'name' const.
+	* python/py-cmd.c (cmdpy_init): Make 'name' const.  Copy it.
+	(gdbpy_string_to_argv): Make 'input' const.
+	* python/py-breakpoint.c (bppy_init): Make 'spec' const.  Copy
+	it.
+	* gdbtypes.h (lookup_typename): Update.
+	* gdbtypes.c (lookup_typename): Make 'name' const.
+	(lookup_struct): Likewise.
+	(lookup_union): Likewise.
+	(lookup_enum): Likewise.
+
+2011-06-24  Tom Tromey  <tromey at redhat.com>
+
+	* Makefile.in (HFILES_NO_SRCDIR): Add "common/" to
+	gdb_thread_db.h.  Move all common/ entries to be together.
+	(TAGS): Don't depend on DEPFILES.
+
+2011-06-23  Yao Qi  <yao at codesourcery.com>
+
+	* infrun.c (start_remote): Move call init_wait_for_inferior to ...
+	* remote.c (remote_start_remote): ... here.
+	* monitor.c (monitor_open): ... here.
+
+2011-06-23  Andrew Burgess  <aburgess at broadcom.com>
+
+	* gdbtypes.c (append_composite_type_field_aligned): Fix
+	calculation of bit position based on alignment.
+
+2011-06-22  Pedro Alves  <pedro at codesourcery.com>
+
+	* breakpoint.c (bpstat_stop_status): Call the check_status
+	breakpoint_ops method.
+	(print_one_breakpoint_location): Also print the condition for Ada
+	exception catchpoints.
+	(allocate_bp_location): New, factored out from
+	allocate_bp_location.
+	(allocate_bp_location): Adjust.  Call the owner breakpoint's
+	allocate_location method, if there is one.
+	(free_bp_location): Call the locations's dtor method, if there is
+	one.
+	(init_raw_breakpoint_without_location): New breakpoint_ops
+	parameter.  Use it.
+	(set_raw_breakpoint_without_location): Adjust.
+	(init_raw_breakpoint): New breakpoint_ops parameter.  Pass it down.
+	(set_raw_breakpoint): Adjust.
+	(catch_fork_breakpoint_ops, catch_vfork_breakpoint_ops)
+	(catch_syscall_breakpoint_ops): Install NULL allocate_location,
+	re_set and check_status methods.
+	(init_catchpoint): Don't memset, initialize thread, addr_string
+	and enable_state.  Pass the ops down to init_raw_breakpoint.
+	(install_catchpoint): Rename to ...
+	(install_breakpoint): ... this, and make extern.
+	(create_fork_vfork_event_catchpoint): Adjust.
+	(catch_exec_breakpoint_ops): Install NULL allocate_location,
+	re_set and check_status methods.
+	(create_syscall_event_catchpoint): Adjust.
+	(ranged_breakpoint_ops, watchpoint_breakpoint_ops)
+	(masked_watchpoint_breakpoint_ops): Install NULL
+	allocate_location, re_set and check_status methods.
+	(catch_exec_command_1): Adjust.
+	(gnu_v3_exception_catchpoint_ops): Install NULL allocate_location,
+	re_set and check_status methods.
+	(create_ada_exception_breakpoint): Rename to ...
+	(init_ada_exception_breakpoint): ... this.  Add a struct
+	breakpoint parameter, and delete the exp_string, cond_string and
+	cond parameters.  Use init_raw_breakpoint, and don't install or
+	mention the breakpoint yet.  Don't clear breakpoint fields that
+	init_raw_breakpoint already clears.
+	(re_set_breakpoint): Delete, split into ...
+	(breakpoint_re_set_default, prepare_re_set_context): ... these new
+	functions.
+	(breakpoint_re_set_one): Call the breakpoint's
+	breakpoint_ops->re_set implementation, if there's one.  Adjust.
+	* breakpoint.h: Forward declare struct bpstats and struct bp_location.
+	(struct bp_location_ops): New type.
+	(struct bp_location): New field `ops'.
+	(struct breakpoint_ops): New `allocate_location', `re_set' and
+	`check_status' fields.  Make `breakpoint_hit''s description match
+	reality.
+	(init_bp_location): Declare.
+	(breakpoint_re_set_default): Declare.
+	(create_ada_exception_breakpoint): Rename to ...
+	(init_ada_exception_breakpoint): ... this.  Add a struct
+	breakpoint parameter, and delete the exp_string, cond_string and
+	cond parameters.
+	(install_breakpoint): Declare.
+	* ada-lang.c: Include exceptions.h.
+	<Ada exceptions description>: Update.
+	(struct ada_catchpoint_location): New type.
+	(ada_catchpoint_location_dtor): New function.
+	(ada_catchpoint_location_ops): New global.
+	(ada_catchpoint): New type.
+	(create_excep_cond_exprs): New function.
+	(dtor_exception, allocate_location_exception, re_set_exception)
+	(should_stop_exception, check_status_exception): New functions.
+	(print_one_exception, print_mention_exception)
+	(print_recreate_exception): Adjust.
+	(dtor_catch_exception, allocate_location_catch_exception)
+	(re_set_catch_exception, check_status_catch_exception): New
+	functions.
+	(catch_exception_breakpoint_ops): Install them.
+	(dtor_catch_exception_unhandled)
+	(allocate_location_catch_exception_unhandled)
+	(re_set_catch_exception_unhandled)
+	(check_status_catch_exception_unhandled): New functions.
+	(catch_exception_unhandled_breakpoint_ops): Install them.
+	(dtor_catch_assert, allocate_location_catch_assert)
+	(re_set_catch_assert, check_status_catch_assert): New functions.
+	(catch_assert_breakpoint_ops): Install them.
+	(ada_exception_catchpoint_p): Delete.
+	(catch_ada_exception_command_split)
+	(ada_exception_catchpoint_cond_string): Rename exp_string
+	parameter to excep_string.  Adjust.
+	(ada_parse_catchpoint_condition): Delete.
+	(ada_exception_sal): Rename the exp_string parameter to
+	excep_string.  Delete the cond_string and cond parameters.
+	Adjust.
+	(ada_decode_exception_location): Rename the exp_string parameter
+	to excep_string.  Delete the cond_string and cond parameters.
+	Adjust.
+	(create_ada_exception_catchpoint): New function.
+	(catch_ada_exception_command, ada_decode_assert_location)
+	(catch_assert_command): Adjust.
+	* ada-lang.h (ada_exception_catchpoint_p): Delete declaration.
+
+2011-06-22  Pedro Alves  <pedro at codesourcery.com>
+
+	* ada-lang.c: Include arch-utils.h.
+	(ada_decode_exception_location): Make static.
+	(catch_ada_exception_command): Moved here from breakpoint.c.
+	(ada_decode_assert_location): Make static.
+	(catch_assert_command): Moved here from breakpoint.c.
+	(_initialize_ada_lang): Install the exception and assert
+	catchpoint commands here.
+	* ada-lang.h (ada_decode_exception_location)
+	(ada_decode_assert_location): Delete declarations.
+	* breakpoint.c (CATCH_PERMANENT, CATCH_TEMPORARY): Moved to
+	breakpoint.h.
+	(create_ada_exception_breakpoint): Make extern.
+	(catch_ada_exception_command, catch_assert_command): Moved to
+	ada-lang.c.
+	(add_catch_command): Make extern.
+	(_initilize_breakpoint): Don't install the exception and assert
+	catchpoint commands here.
+	* breakpoint.h (CATCH_PERMANENT, CATCH_TEMPORARY): Moved from
+	breakpoint.c
+	(add_catch_command, create_ada_exception_breakpoint): Declare.
+
+2011-06-22  Pedro Alves  <pedro at codesourcery.com>
+
+	* breakpoint.c (init_raw_breakpoint_without_location): Don't add
+	the breakpoint to the breakpoint chain here.
+	(set_raw_breakpoint_without_location): Add the breakpoint to the
+	breakpoint chain here.
+	(init_raw_breakpoint): Adjust comments.
+	(set_raw_breakpoint): Add the breakpoint to the breakpoint chain
+	here.
+	(init_catchpoint): Don't set the catchpoint's breakpoint number
+	here.
+	(install_catchpoint): New function.
+	(create_fork_vfork_event_catchpoint)
+	(create_syscall_event_catchpoint, catch_exec_command_1): Adjust to
+	use install_catchpoint.
+
+2011-06-22  Pedro Alves  <pedro at codesourcery.com>
+
+	* breakpoint.c (create_catchpoint_without_mention)
+	(create_catchpoint): Delete.
+
+2011-06-22  Pedro Alves  <pedro at codesourcery.com>
+
+	* breakpoint.h (struct breakpoint): Delete field `exec_pathname'.
+	* breakpoint.c (init_raw_breakpoint_without_location): Remove
+	reference to exec_pathname.
+	(struct exec_catchpoint): New type.
+	(dtor_catch_exec): New function.
+	(insert_catch_exec, print_it_catch_exec, print_one_catch_exec): Adjust.
+	(catch_exec_breakpoint_ops): Install dtor_catch_syscall.
+	(catch_exec_command_1): Adjust to use init_catchpoint.
+	(delete_breakpoint): Remove reference to exec_pathname.
+
+2011-06-22  Pedro Alves  <pedro at codesourcery.com>
+
+	* breakpoint.h (struct breakpoint_ops): New field `dtor'.
+	(struct breakpoint): Delete field `syscalls_to_be_caught'.
+	* breakpoint.c (init_raw_breakpoint_without_location): Remove
+	reference to syscalls_to_be_caught.
+	(catch_fork_breakpoint_ops, catch_vfork_breakpoint_ops): Install a
+	NULL `dtor'.
+	(struct syscall_catchpoint): New type.
+	(dtor_catch_syscall): New function.
+	(insert_catch_syscall, remove_catch_syscall)
+	(breakpoint_hit_catch_syscall, print_one_catch_syscall)
+	(print_recreate_catch_syscall): Adjust.
+	(catch_syscall_breakpoint_ops): Install dtor_catch_syscall.
+	(catch_exec_breakpoint_ops): Install a NULL `dtor'.
+	(create_syscall_event_catchpoint): Adjust to use init_catchpoint.
+	(ranged_breakpoint_ops, watchpoint_breakpoint_ops)
+	(masked_watchpoint_breakpoint_ops)
+	(gnu_v3_exception_catchpoint_ops): Install a NULL `dtor'.
+	(delete_breakpoint): Call the `dtor' breakpoint_ops method, if
+	there is one.  Remove references to syscalls_to_be_caught.
+	(catching_syscall_number): Adjust.
+	* ada-lang.c (catch_exception_breakpoint_ops)
+	(catch_exception_unhandled_breakpoint_ops)
+	(catch_assert_breakpoint_ops): Install a NULL `dtor'.
+
+2011-06-22  Pedro Alves  <pedro at codesourcery.com>
+
+	* breakpoint.h (struct breakpoint): Delete forked_inferior_pid
+	field.
+	* breakpoint.c (init_raw_breakpoint_without_location): Remove
+	reference to forked_inferior_pid.
+	(struct fork_catchpoint): New type.
+	(breakpoint_hit_catch_fork, print_it_catch_fork)
+	(print_one_catch_fork, breakpoint_hit_catch_vfork)
+	(print_it_catch_vfork, print_one_catch_vfork): Adjust.
+	(create_fork_vfork_event_catchpoint): Adjust to use
+	init_catchpoint.
+
+2011-06-22  Pedro Alves  <pedro at codesourcery.com>
+
+	* breakpoint.c (add_to_breakpoint_chain)
+	(init_raw_breakpoint_without_location): New functions, factored
+	out from ...
+	(set_raw_breakpoint_without_location): ... this one.
+	(init_raw_breakpoint): New function, factored out from
+	set_raw_breakpoint and adjusted to use
+	init_raw_breakpoint_without_location.
+	(set_raw_breakpoint): Adjust.
+	(init_catchpoint): New function, factored out from
+	create_catchpoint_without_mention and adjusted to use
+	init_raw_breakpoint.
+	(create_catchpoint_without_mention): Adjust.
+
+2011-06-22  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2expr.c (execute_stack_op) <DW_OP_GNU_convert>: Treat type
+	argument of 0 specially.
+
+2011-06-22  Yao Qi  <yao at codesourcery.com>
+
+	* infrun.c (handle_inferior_event): Remove write-only local variable
+	`sw_single_step_trap_p'.
+
+2011-06-20  Tom Tromey  <tromey at redhat.com>
+
+	* symtab.c (lookup_language_this): End loop if block is NULL.
+
+2011-06-17  Tom Tromey  <tromey at redhat.com>
+
+	* valops.c (value_of_this): Use lookup_language_this.
+	* symtab.h (lookup_language_this): Declare.
+	* symtab.c (lookup_language_this): New function.
+	(lookup_symbol_aux): Use lookup_language_this.
+	* ax-gdb.c (gen_expr) <OP_THIS>: Use lookup_language_this.
+
+2011-06-17  Tom Tromey  <tromey at redhat.com>
+
+	* value.h (value_of_this): Update.
+	(value_of_local): Remove.
+	* valops.c (value_of_this): Rename from value_of_local.  Change
+	parameters.
+	* p-exp.y (exp): Update.
+	(variable): Likewise.
+	* eval.c (evaluate_subexp_standard) <OP_THIS>: Use value_of_this.
+
+2011-06-17  Tom Tromey  <tromey at redhat.com>
+
+	* valops.c (value_of_local): Complain if NAME is NULL.
+	* std-operator.def (OP_OBJC_SELF): Remove.
+	* parse.c (operator_length_standard) <OP_OBJC_SELF>: Remove.
+	* objc-exp.y (name_not_typename): Use OP_THIS.
+	* expprint.c (print_subexp_standard) <OP_THIS>: Print language's
+	name for "this".
+	<OP_OBJC_SELF>: Remove.
+	* eval.c (evaluate_subexp_standard) <OP_OBJC_SELF>: Remove.
+
+2011-06-16  Tristan Gingold  <gingold at adacore.com>
+
+	* python/py-events.h (gdb_py_events): Make it extern.
+	* python/py-evtregistry.c (gdb_py_events): Declare.
+
+2011-06-16  Hui Zhu  <teawater at gmail.com>
+
+	* remote.c (remote_trace_set_readonly_regions): Add check for
+	remote_protocol_packets[PACKET_qXfer_traceframe_info].support before
+	output warning.
+
+2011-06-15  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* arm-linux-tdep.c: Include "auxv.h".
+	(AT_HWCAP): Define.
+	(ARM_LINUX_SIZEOF_VFP): Define.
+	(arm_linux_supply_vfp): New function.
+	(arm_linux_collect_vfp): Likewise.
+	(arm_linux_regset_from_core_section): Handle .reg-arm-vfp sections.
+	(arm_linux_fpa_regset_sections): New variable.
+	(arm_linux_vfp_regset_sections): Likewise.
+	(arm_linux_core_read_description): New function.
+	(arm_linux_init_abi): Install arm_linux_core_read_description and
+	arm_linux_fpa_regset_sections or arm_linux_vfp_regset_sections as
+	appropriate for the architecture.
+	* arm-tdep.h (struct gdbarch_tdep): Add member "vfpregset".
+	(tdesc_arm_with_m): Declare.
+	(tdesc_arm_with_iwmmxt): Likewise.
+	(tdesc_arm_with_vfpv2): Likewise.
+	(tdesc_arm_with_vfpv3): Likewise.
+	(tdesc_arm_with_neon): Likewise.
+	* arm-linux-nat.c: Move features/*.c includes ...
+	* arm-tdep.c: ... here.
+	* arm-linux-nat.c (arm_linux_read_description): Move initializing
+	target description data structures ...
+	* arm-tdep.c (_initialize_arm_tdep): ... here.
+	* arm-linux-nat.c (HWCAP_VFP, HWCAP_IWMMXT, HWCAP_NEON, HWCAP_VFPv3,
+	HWCAP_VFPv3D16): Move definitions ...
+	* arm-linux-tdep.h: ... here.
+
+2011-06-15  Hui Zhu  <teawater at gmail.com>
+
+	* remote.c (remote_trace_set_readonly_regions): Add a check for
+	target_buf_size.
+
+2011-06-14  Tom Tromey  <tromey at redhat.com>
+
+	* coffread.c (coffread_objfile): Rename from current_objfile.
+	* dbxread.c (dbxread_objfile): Rename from current_objfile.
+	* mdebugread.c (mdebugread_objfile): Rename from current_objfile.
+
+2011-06-14  Tom Tromey  <tromey at redhat.com>
+
+	* jv-lang.c (jv_type_objfile_data_key, dynamics_objfile)
+	(class_symtab): Remove.
+	(jv_dynamics_progspace_key): New global.
+	(jv_per_objfile_free): Reset program space data.  Update assert.
+	Don't clear globals.
+	(get_dynamics_objfile): Use and set program space data.
+	(get_java_class_symtab): Use get_dynamics_objfile.
+	(add_class_symbol): Likewise.
+	(java_link_class_type): Likewise.
+	(java_object_type, jv_clear_object_type, set_java_object_type):
+	Remove.
+	(get_java_object_type): Update.  Don't cache result.
+	(is_object_type): Don't call set_java_object_type.
+	(_initialize_java_language): Don't set jv_type_objfile_data_key;
+	initialize jv_dynamics_progspace_key.
+
+2011-06-14  Tom Tromey  <tromey at redhat.com>
+
+	* symtab.h (current_objfile): Don't declare.
+	* objfiles.h (current_objfile): Don't declare.
+	* objfiles.c (current_objfile): Remove.
+	* mdebugread.c (current_objfile): New file-scope global.
+	* dbxread.c (current_objfile): New file-scope global.
+	* coffread.c (current_objfile): New file-scope global.
+
+2011-06-13  Pedro Alves  <pedro at codesourcery.com>
+
+	* top.h (line): Rename to ...
+	(saved_command_line): ... this.
+	(linesize): Rename to ...
+	(saved_command_line_size): ... this.
+	* top.c (line): Rename to ...
+	(saved_command_line): ... this.
+	(linesize): Rename to ...
+	(saved_command_line_size): ... this.
+	(dont_repeat, command_line_input, dont_repeat_command): Adjust.
+	* event-top.c (command_line_handler): Adjust.
+	* main.c (captured_main): Adjust.
+
+2011-06-12  Mark Kettenis  <kettenis at gnu.org>
+
+	* i386-tdep.c (i386_epilogue_frame_cache): Simplify code.  Call
+	get_frame_func instead of get_frame_pc to determine the code
+	address used to construct the frame ID.
+	(i386_epilogue_frame_unwind_stop_reason): Fix coding style.
+	(i386_epilogue_frame_this_id): Likewise.
+	(i386_epilogue_frame_prev_register): New function.
+	(i386_epilogue_frame_unwind): Use i386_epilogue_frame_prev_register.
+	(i386_stack_tramp_frame_sniffer): Fix coding style.
+	(i386_stack_tramp_frame_unwind): Use i386_epilogue_frame_prev_register.
+	(i386_gdbarch_init): Fix comments.
+
+2011-06-12  Mark Kettenis  <kettenis at gnu.org>
+
+	* i386-tdep.c (i386_match_insn_block): Use length of the proper
+	instruction when walking back through the instruction stream.
+
+2011-06-10  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* symtab.c (output_partial_symbol_filename): Exchange the filename and
+	fullname parameters order.
+
+2011-06-10  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup.
+	* dwarf2read.c (dw2_map_symbol_filenames): Use symbol_filename_ftype
+	for fun.
+	* psymtab.c (map_symbol_filenames_psymtab)
+	(map_partial_symbol_filenames): Likewise.
+	* psymtab.h: Include symfile.h.
+	(map_partial_symbol_filenames): Use symbol_filename_ftype for fun.
+	* symfile.h (symbol_filename_ftype): New.
+	(struct quick_symbol_functions): Use symbol_filename_ftype for fun of
+	map_symbol_filenames, clarify more the naming in comment.
+
+2011-06-07  Doug Evans  <dje at google.com>
+
+	* cc-with-index.sh: Fix typos in comment.
+	Look for ../../gdb, for fullname.exp.
+
+2011-06-07  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	    Pedro Alves  <pedro at codesourcery.com>
+
+	* cli/cli-cmds.c (shell_escape): Use waitpid.
+	* rs6000-nat.c (exec_one_dummy_insn): Likewise.
+
+2011-06-07  Tristan Gingold  <gingold at adacore.com>
+
+	* xcoffread.c (dwarf2_xcoff_names): New variable.
+	(aix_process_linenos): Add a guard.
+	(xcoff_symfile_finish): Free dwarf2.
+	(xcoff_initial_scan): Add dwarf2 support.
+
+2011-06-06  Pedro Alves  <pedro at codesourcery.com>
+
+	* infcall.c (run_inferior_call): Don't mask async.  Instead force
+	a synchronous wait, if the target can async.
+
+	* target.h (struct target_ops): Delete to_async_mask.
+	(target_async_mask): Delete.
+	* target.c (update_current_target): Delete references to to_async_mask.
+	* linux-nat.c (linux_nat_async_mask_value): Delete.
+	(linux_nat_is_async_p, linux_nat_can_async_p): Remove references
+	to linux_nat_async_mask_value.
+	(linux_nat_async_mask): Delete.
+	(linux_nat_async, linux_nat_close): Remove references to
+	linux_nat_async_mask_value.
+	* record.c (record_async_mask_value): Delete.
+	(record_async): Remove references to record_async_mask_value.
+	(record_async_mask): Delete.
+	(record_can_async_p, record_is_async_p): Remove references to
+	record_async_mask_value.
+	(init_record_ops, init_record_core_ops): Remove references to
+	record_async_mask.
+	* remote.c (remote_async_mask_value): Delete.
+	(init_remote_ops): Remove reference to remote_async_mask.
+	(remote_can_async_p, remote_is_async_p): Remove references to
+	remote_async_mask_value.
+	(remote_async): Remove references to remote_async_mask_value.
+	(remote_async_mask): Delete.
+
+	* infrun.c (fetch_inferior_event): Don't claim registers changed
+	if the current thread is already not executing.
+
+2011-06-03  Joel Brobecker  <brobecker at adacore.com>  (obvious fix)
+
+	From Stephen Kitt  <steve at sk2.org>
+	* breakpoint.c, breakpoint.h, cli/cli-dump.c, dwarf2expr.c,
+	gdbarch.c, gdbarch.sh, remote.c: Various spelling fixes.
+
+2011-06-03  Joel Brobecker  <brobecker at adacore.com>
+
+	* dwarf2expr.c (execute_stack_op) [DW_OP_deref]: Handle
+	the case where ADDR_SIZE is different from TYPE_LENGTH (type).
+
+2011-06-03  Tom Tromey  <tromey at redhat.com>
+
+	* python/py-inferior.c (python_inferior_exit): Use inferior's exit
+	code fields.
+	* python/py-exitedevent.c (create_exited_event_object): Change
+	type of 'exit_code'.  Optionally add exit_code attribute.
+	(emit_exited_event): Change type of 'exit_code'.
+	* python/py-event.h (emit_exited_event): Update.
+	* mi/mi-interp.c (mi_inferior_exit): Print exit code.
+	* infrun.c (handle_inferior_event): Set exit code fields on
+	inferior.
+	* inferior.h (struct inferior) <has_exit_code, exit_code>: New
+	fields.
+	* inferior.c (exit_inferior_1): Initialize new fields.
+
+2011-06-03  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2expr.c (get_signed_type): New function.
+	(execute_stack_op) <DW_OP_shra>: Always perform a signed shift.
+
+2011-06-02  Keith Seitz  <keiths at redhat.com>
+
+	* objc-lang.c (find_methods): Increment objfile_csym earlier.
+
+2011-06-02  Pedro Alves  <pedro at codesourcery.com>
+
+	* top.h (simplified_command_loop): Delete declaration.
+
+2011-06-01  Mike Frysinger  <vapier at gentoo.org>
+
+	* remote-sim.c (gdbsim_open): Add the strlen of " --sysroot=" and
+	gdb_sysroot to the "len" variable.  Append both to "arg_buf".
+
+2011-06-01  Yao Qi  <yao at codesourcery.com>
+
+	* objfiles.h (obj_section_addr): Update reference to objfile from
+	`abfd' to `obfd'.
+	(obj_section_endaddr): Likewise.
+
+2011-06-01  Daniel Jacobowitz  <drow at false.org>
+
+	* MAINTAINERS: Update my email address and affiliation.  Also
+	update Ian Lance Taylor's affiliation.  Use UTF-8 for ludo at gnu.org.
+
+2010-05-31  Keith Seitz  <keiths at redhat.com>
+
+	PR c++/12750
+	* linespec.c (get_search_block): New function.
+	(find_methods): Add FILE_SYMTATB parameter and use it and
+	get_search_block to pass an appropriate block to
+	lookup_symbol_in_namespace.
+	(decode_line_1): Record if *ARGPTR is single-quote enclosed.
+	Check if *ARGPTR starts with a filename first.
+	If it does, call locate_first_half again to locate the next
+	"first half" of the linespec.
+	Pass FILE_SYMTATB to decode_objc and decode_compound.
+	Swallow the trailing single-quote if IS_SQUOTE_ENCLOSED.
+	(locate_first_half): Stop on the first colon seen.
+	(decode_compound): Add FILE_SYMTAB parameter.
+	Pass FILE_SYMTAB to lookup_prefix_sym and find_method.
+	(lookup_prefix_sym): Add FILE_SYMTAB parameter and use
+	get_search_block with lookup_symbol.
+	(find_method): Add FILE_SYMTAB parameter and pass it to
+	find_methods.
+	(decode_objc): Use get_search_block.
+
+2010-05-31  Keith Seitz  <keiths at redhat.com>
+
+	PR symtab/12704
+	* cp-namespace.c (ANONYMOUS_NAMESPACE_LEN): Remove.
+	(cp_scan_for_anonymous_namespaces): Use CP_ANONYMOUS_NAMESPACE_STR
+	and CP_ANONYMOUS_NAMESPACE_LEN.
+	(cp_is_anonymous): Likewise.
+	* cp-support.h (CP_ANONYMOUS_NAMESPACE_STR): Define.
+	(CP_ANONYMOUS_NAMESPACE_LEN): Define.
+	* dwarf2read.c (namespace_name): Likewise.
+	(fixup_partial_die): Likewise.
+	* linespec.c (decode_compound): If CP_ANONYMOUS_NAMESPACE_STR is
+	seen in the input, keep it.
+
+2011-05-30  Pedro Alves  <pedro at codesourcery.com>
+
+	* target.h (enum inferior_event_type): Delete INF_QUIT_REQ.
+	* inf-loop.h (inferior_event_handler_wrapper): Delete.
+	* inf-loop.c (inferior_event_handler_wrapper): Delete.
+	(inferior_event_handler): Don't handle INF_QUIT_REQ.
+	* remote.c (_initialize_remote): Register
+	async_remote_interrupt_twice directly as
+	sigint_remote_twice_token event.
+
+2011-05-30  Pedro Alves  <pedro at codesourcery.com>
+
+	* target.h (enum inferior_event_type): Delete INF_ERROR.
+	* inf-loop.c (inferior_event_handler): Don't handle INF_ERROR.
+
+2011-05-30  Pedro Alves  <pedro at codesourcery.com>
+
+	* interps.c (interp_set): Don't cancel continuations.
+
+2011-05-30  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* linux-nat.c (linux_lwp_is_zombie): Use xsnprintf.
+
+2011-05-30  Pedro Alves  <pedro at codesourcery.com>
+
+	* continuations.h (continuation_ftype): Add `err' parameter.
+	Document parameters.
+	(do_all_continuations, do_all_continuations_thread)
+	(do_all_intermediate_continuations)
+	(do_all_intermediate_continuations_thread)
+	(do_all_inferior_continuations): Add `err' parameter.
+	* continuations.c (do_my_continuations_1, do_my_continuations)
+	(do_all_inferior_continuations, do_all_continuations_ptid)
+	(do_all_continuations_thread_callback)
+	(do_all_continuations_thread, do_all_continuations)
+	(do_all_intermediate_continuations_thread_callback)
+	(do_all_intermediate_continuations_thread)
+	(do_all_intermediate_continuations): Add `err' parameter, and pass
+	it down all the way to the continuations proper.
+	* inf-loop.c (inferior_event_handler): If fetching an inferior
+	event throws an error, don't pop the target, and still call the
+	continuations, but with `err' set.  Adjust all other continuation
+	calls.
+	* breakpoint.c (until_break_command_continuation): Add `err'
+	parameter.
+	* infcmd.c (step_1_continuation): Add `err' parameter.  Don't
+	issue another step if `err' is set.
+	(struct until_next_continuation_args): New.
+	(until_next_continuation): Add `err' parameter.  Adjust.
+	(until_next_command): Adjust.
+	(struct finish_command_continuation_args): Add `thread' field.
+	(finish_command_continuation): Add `err' parameter.  Handle it.
+	(finish_forward): Adjust.
+	(attach_command_continuation): Add `err' parameter.  Handle it.
+	* infrun.c (infrun_thread_stop_requested_callback): Adjust to
+	cancel the continuations.
+	* interps.c (interp_set): Adjust to cancel the continuations.
+	* thread.c (clear_thread_inferior_resources): Adjust to cancel the
+	continuations rather than discarding.
+	(free_thread): Don't clear thread inferior resources here.
+	(delete_thread_1): Do it here instead.  And do it before removing
+	the thread from the threads list.  Tag the thread as exited before
+	clearing thread inferior resources.
+
+2011-05-30  Joel Brobecker  <brobecker at adacore.com>
+
+	* infcall.c (call_function_by_hand): Rephrase error message.
+
+2011-05-27  Pedro Alves  <pedro at codesourcery.com>
+
+	* defs.h (struct thread_info, struct inferior): Delete forward
+	declarations.
+	* breakpoint.h (struct thread_info): New forward declaration.
+	* observer.sh (struct inferior): New forward declaration.
+	* python/python-internal.h (struct inferior): New forward
+	declaration.
+
+2011-05-27  Pedro Alves  <pedro at codesourcery.com>
+
+	* defs.h (struct continuation, continuation_ftype)
+	(continuation_free_arg_ftype, add_continuation)
+	(do_all_continuations, do_all_continuations_thread)
+	(discard_all_continuations, discard_all_continuations_thread)
+	(add_intermediate_continuation, do_all_intermediate_continuations)
+	(do_all_intermediate_continuations_thread)
+	(discard_all_intermediate_continuations)
+	(discard_all_intermediate_continuations_thread)
+	(add_inferior_continuation, do_all_inferior_continuations)
+	(discard_all_inferior_continuations): Move to ...
+	* continuations.h: ... this new file.
+	* breakpoint.c, continuations.c, event-top.c, inf-loop.c,
+	infcmd.c, inferior.c, infrun.c, interps.c: Include
+	continuations.h.
+
+2011-05-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	    Doug Evans  <dje at google.com>
+
+	Fix PR 10970, PR 12702.
+	* linux-nat.c (linux_lwp_is_zombie): New function.
+	(wait_lwp): Initialize status.  New variable prev_mask.  Block signals.
+	Check for linux_lwp_is_zombie.  Use WNOHANG and sigsuspend.
+
+2011-05-27  Pedro Alves  <pedro at codesourcery.com>
+
+	* defs.h (continuation_ftype, continuation_free_arg_ftype): New
+	typedefs.
+	(add_continuation, add_intermediate_continuation)
+	(add_inferior_continuation): Use them.
+	* continuations.c (struct continuation): Use them.
+	(make_continuation_ftype): Delete.
+	(make_continuation, add_inferior_continuation, add_continuation)
+	(add_intermediate_continuation): Use continuation_ftype and
+	continuation_free_arg_ftype.  Rename parameters to shorter names.
+
+2011-05-27  Pedro Alves  <pedro at codesourcery.com>
+
+	* continuations.c (make_continuation): Make it return void.
+	(do_my_continuations): Rename to ...
+	(do_my_continuations_1): ... this.  Remove old_chain parameter and
+	adjust.
+	(do_my_continuations): New.
+	(discard_my_continuations): Rename to ...
+	(discard_my_continuations_1): ... this.  Remove old_chain
+	parameter and adjust.
+	(discard_my_continuations): New.
+	(add_inferior_continuation): Simplify.
+	(do_all_inferior_continuations): Reimplement on top
+	do_my_continuations.
+	(discard_all_inferior_continuations): Simplify.
+	(add_continuation): Simplify.
+	(do_all_continuations_ptid): Simplify.
+	(discard_all_continuations_thread_callback): Simplify.
+	(add_intermediate_continuation): Simplify.
+	(discard_all_intermediate_continuations_thread_callback):
+	Simplify.
+
+2011-05-27  Pedro Alves  <pedro at codesourcery.com>
+
+	* utils.c (struct continuation, add_continuation)
+	(add_inferior_continuation)
+	(do_all_inferior_continuations, discard_all_inferior_continuations)
+	(restore_thread_cleanup, do_all_continuations_ptid)
+	(do_all_continuations_thread_callback)
+	(do_all_continuations_thread, do_all_continuations)
+	(discard_all_continuations_thread_callback)
+	(discard_all_continuations_thread, discard_all_continuations)
+	(add_intermediate_continuation)
+	(do_all_intermediate_continuations_thread_callback)
+	(do_all_intermediate_continuations_thread)
+	(do_all_intermediate_continuations)
+	(discard_all_intermediate_continuations_thread_callback)
+	(discard_all_intermediate_continuations_thread)
+	(discard_all_intermediate_continuations): Move to ...
+	* continuations.c: ... this new file, and adjust to no longer
+	implement continuations on top of cleanups.
+	* Makefile.in (SFILES): Add continuations.c.
+	(COMMON_OBS): Add continuations.o.
+
+2011-05-26  Pedro Alves  <pedro at codesourcery.com>
+
+	* inferior.h (enum exec_direction_kind): Delete EXEC_ERROR.
+	* infrun.c (show_exec_direction_func): Don't handle EXEC_ERROR.
+	Internal error on invalid values.
+	* reverse.c: Don't handle EXEC_ERROR.
+	* mi/mi-main.c: Don't handle EXEC_ERROR.
+
+2011-05-26  Pedro Alves  <pedro at codesourcery.com>
+
+	* record.c: Include event-loop.h, inf-loop.h.
+	(record_beneath_to_async): New global.
+	(tmp_to_async): New global.
+	(record_async_inferior_event_token): New global.
+	(record_open_1): Don't error out if async is enabled.
+	(record_open): Handle to_async.  Create an async event source in
+	the event loop.
+	(record_close): Delete the async event source.
+	(record_resumed): New global.
+	(record_execution_dir): New global.
+	(record_resume, record_core_resume): Set them.  Register the
+	target on the event loop.
+	(record_wait): Rename to ...
+	(record_wait_1): ... this.  Add more debug output.  Handle
+	TARGET_WNOHANG, and the target beneath returning
+	TARGET_WAITKIND_IGNORE.
+	(record_wait): Reimplement on top of record_wait_1.
+	(record_async_mask_value): New global.
+	(record_async, record_async_mask, record_can_async_p)
+	(record_is_async_p, record_execution_direction): New functions.
+	(init_record_ops, init_record_core_ops): Install new methods.
+	* infrun.c (fetch_inferior_event): Temporarily switch the global
+	execution direction to the direction the target was going.
+	(execution_direction): Change type to int.
+	* target.c (default_execution_direction): New function.
+	(update_current_target): Inherit and de_fault
+	to_execution_direction.
+	* target.h (struct target_ops) <to_execution_direction>: New
+	field.
+	(target_execution_direction): New macro.
+	* inferior.h (execution_direction): Change type to int.
+
+2011-05-26  Pedro Alves  <pedro at codesourcery.com>
+
+	* infcall.c (call_function_by_hand): Don't allow calling functions
+	in reverse execution mode.
+
+2011-05-26  Pedro Alves  <pedro at codesourcery.com>
+
+	* infcmd.c (finish_command): Allow async finish in reverse.
+
+2011-05-26  Yao Qi  <yao at codesourcery.com>
+
+	* gdb_thread_db.h: Delete.  Move to ...
+	* common/gdb_thread_db.h: ... here.
+
+2011-05-26  Pedro Alves  <pedro at codesourcery.com>
+
+	* infcmd.c (finish_backward): Set a step-resume breakpoint at the
+	function's entry point instead of a manually managed momentary
+	breakpoint, and only ever issue one proceed call.
+	* infrun.c (handle_inferior_event) <BPSTAT_WHAT_STEP_RESUME>: If
+	doing a reverse-finish, switch to stepi mode, to do another step.
+	(insert_step_resume_breakpoint_at_sal): Make public.
+	(normal_stop): No need to save function value return registers if
+	going reverse.
+	* inferior.h (insert_step_resume_breakpoint_at_sal): Declare.
+
+2011-05-26  Pedro Alves  <pedro at codesourcery.com>
+
+	* breakpoint.h (enum bptype) <bp_hp_step_resume>: New.
+	(enum bpstat_what_main_action): Move BPSTAT_WHAT_STEP_RESUME
+	before BPSTAT_WHAT_STOP_SILENT.  Add BPSTAT_WHAT_HP_STEP_RESUME
+	at the end.
+	* breakpoint.c (update_breakpoints_after_exec): Also delete hp
+	step-resume breakpoints.
+	(print_it_typical): Handle bp_hp_step_resume.
+	(bpstat_what): Ditto.
+	(bptype_string): Ditto.
+	(print_one_breakpoint_location): Ditto.
+	(allocate_bp_location): Ditto.
+	(mention): Ditto.
+	(breakpoint_re_set_one): Ditto.
+	* infrun.c (handle_inferior_event): Adjust.  Split
+	BPSTAT_WHAT_STEP_RESUME handling in BPSTAT_WHAT_STEP_RESUME and
+	BPSTAT_WHAT_HP_STEP_RESUME.
+	(insert_step_resume_breakpoint_at_sal): Rename to ...
+	(insert_step_resume_breakpoint_at_sal_1): ... this.  Add bptype
+	parameter.  Handle it.
+	(insert_step_resume_breakpoint_at_sal): Reimplement on top of
+	insert_step_resume_breakpoint_at_sal_1.
+	(insert_step_resume_breakpoint_at_frame): Rename to ...
+	(insert_hp_step_resume_breakpoint_at_frame): ... this.  Adjust to
+	set a high-priority step-resume breakpoint.
+	(insert_step_resume_breakpoint_at_frame): Adjust comment.
+	(insert_step_resume_breakpoint_at_caller): Ditto.
+
+2011-05-26  Pedro Alves  <pedro at codesourcery.com>
+
+	* breakpoint.c (iterate_over_related_breakpoints): New.
+	(do_map_delete_breakpoint): New.
+	(delete_command): Pass do_map_delete_breakpoint to
+	map_breakpoint_numbers.
+	(do_disable_breakpoint): New.
+	(do_map_disable_breakpoint): Iterate over the breakpoint's related
+	breakpoints.
+	(do_enable_breakpoint): Rename to ...
+	(enable_breakpoint_disp): ... this.
+	(enable_breakpoint): Adjust.
+	(do_enable_breakpoint): New.
+	(enable_once_breakpoint): Delete.
+	(do_map_enable_breakpoint): New.
+	(do_map_enable_once_breakpoint): New.
+	(enable_once_command, enable_delete_command)
+	(delete_trace_command): Iterate over the breakpoint's related
+	breakpoints.
+
+2011-05-26  Pedro Alves  <pedro at codesourcery.com>
+
+	* alpha-tdep.c (alpha_cannot_fetch_register): Don't return true
+	for ALPHA_ZERO_REGNUM.
+	(alpha_supply_int_regs): Explicitly supply zero as the value for
+	ALPHA_ZERO_REGNUM in the register cache.
+	* alpha-nat.c (fetch_osf_core_registers): Ditto.
+
+2011-05-26  Yao Qi  <yao at codesourcery.com>
+
+	* gdb/gdb_thread_db.h: Remove HAVE_UINTPTR_T.
+
+2011-05-26  Tristan Gingold  <gingold at adacore.com>
+
+	* symfile.h (struct dwarf2_section_names): New type.
+	(struct dwarf2_debug_sections): New type.
+	(dwarf2_has_info): Add parameter.
+	* dwarf2read.c (dwarf2_elf_names): New variable.
+	(INFO_SECTION, ABBREV_SECTION, LINE_SECTION, LOC_SECTION)
+	(MACINFO_SECTION, STR_SECTION, RANGES_SECTION, TYPES_SECTION)
+	(FRAME_SECTION, EH_FRAME_SECTION, GDB_INDEX_SECTION): Remove.
+	(dwarf2_has_info): Add names parameter.  Pass names
+	to dwarf2_locate_sections.
+	(section_is_p): Rewrite using the names parameter.
+	(dwarf2_locate_sections): Use section names from the names parameter.
+	* coffread.c (coff_symfile_read): Adjust call to dwarf2_has_info.
+	* elfread.c (read_psyms): Ditto.
+	* machoread.c (macho_symfile_read): Ditto.
+
+2011-05-25  Andreas Schwab  <schwab at redhat.com>
+
+	PR gdb/8677
+	* event-loop.c (handle_file_event): Don't handle POLLHUP as error.
+
+2011-05-24  Keith Seitz  <keiths at redhat.com>
+
+	PR breakpoint/12803
+	* linespec.c (keep_name_info): Add handling for "volatile" keyword.
+	(decode_compound): Unconditionally call	keep_name_info.
+
+2011-05-24  Pedro Alves  <pedro at codesourcery.com>
+
+	* breakpoint.c (watchpoint_check): If the watchpoint went out of
+	scope, clear its command list.
+	(map_breakpoint_numbers): Don't walk the related breakpoints list
+	of each breakpoint.
+
+2011-05-24  Tom Tromey  <tromey at redhat.com>
+
+	* MAINTAINERS: Move Jim Blandy to past maintainers.
+
+2011-05-24  Tristan Gingold  <gingold at adacore.com>
+
+	* symfile.h (enum dwarf2_section_enum): New type.
+	(dwarf2_get_section_info): New prototype.
+	* dwarf2read.c (dwarf2_get_section_info): Replace parameter
+	section_name by sect.  Use a switch to select the info.
+	* dwarf2-frame.c (warf2_get_section_info): Remove prototype.
+	(dwarf2_build_frame_info): Adjust calls to dwarf2_get_section_info.
+
+2011-05-24  Pedro Alves  <pedro at codesourcery.com>
+
+	* solib-svr4.c (svr4_solib_create_inferior_hook): Skip setting
+	shared library event breakpoint if there's no execution.
+
+2011-05-24  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* breakpont.c (remove_hw_watchpoints): Remove unused function.
+	* breakpoint.h remove_hw_watchpoints(): Remove prototype.
+
+2011-05-23  Tom Tromey  <tromey at redhat.com>
+
+	* c-lang.c (evaluate_subexp_c): Use expect_type if it is not
+	NULL.
+
+2011-05-23  Doug Evans  <dje at google.com>
+
+	* python/lib/gdb/printing.py (register_pretty_printer): Add missing
+	entry for RuntimeError to doc string.
+
+2011-05-23  Jerome Guitton  <guitton at adacore.com>
+
+	* sparc-tdep.c (sparc_skip_stack_check): Recognize a new instruction
+	sequence for probing loops.
+
+2011-05-23  Pedro Alves  <pedro at codesourcery.com>
+
+	* infrun.c (user_visible_resume_ptid): Fix typos in describing
+	comment.
+
+2011-05-21  Mark Kettenis  <kettenis at gnu.org>
+
+	* sparc-nat.c (sparc_fetch_inferior_registers): Explicitly supply
+	zero as the value for %g0 in the register cache.
+	* sparc-tdep.c (sparc32_supply_gregset): Likewise.
+	* sparc64-tdep.c (sparc64_supply_gregset): Likewise.
+
+2011-05-20  Pedro Alves  <pedro at codesourcery.com>
+
+	* infrun.c (proceed): Set previous_inferior_ptid here.
+	(init_wait_for_inferior): Initialize previous_inferior_ptid from
+	inferior_ptid, not null_ptid.
+	(wait_for_inferior): Don't initialize previous_inferior_ptid here.
+	(fetch_inferior_event): Nor here.
+
+2011-05-20  Pedro Alves  <pedro at codesourcery.com>
+
+	* inf-loop.c (inferior_event_handler): Only output a message if
+	verbose.
+
+2011-05-20  Luis Machado  <lgustavo at codesourcery.com>
+
+	* MAINTAINERS: Update my e-mail address.
+
+2011-05-20  Pedro Alves  <pedro at codesourcery.com>
+
+	* infrun.c (proceed): Switch the inferior event loop to
+	INF_EXEC_COMPLETE if the target refused to resume from a
+	vfork/fork.
+
+2011-05-20  Pedro Alves  <pedro at codesourcery.com>
+
+	* infcmd.c: Include "inf-loop.h".
+	(step_once): When stepping into an inline subroutine, pretend the
+	target has run.  If the target can async, switch the inferior
+	event loop to INF_EXEC_COMPLETE.
+	* inferior.h (user_visible_resume_ptid): Declare.
+	* infrun.c (user_visible_resume_ptid): New function, factored out
+	from `resume'.
+	(resume): Use it.
+	* mi/mi-main.c (mi_execute_async_cli_command): Remove assertion
+	that the current thread is running.  Merge async and sync
+	branches.
+
+2011-05-20  Pedro Alves  <pedro at codesourcery.com>
+
+	* infcmd.c (step_1): Simplify synchronous case.
+
+2011-05-20  Pedro Alves  <pedro at codesourcery.com>
+
+	* tracepoint.c: Include exceptions.h.
+	(TFILE_PID): Move higher in file.
+	(tfile_open): Delay pushing the tfile target until we're assured
+	the tfile header is present in the file.  Wrap reading the initial
+	newline-terminated lines in TRY_CATCH.  Pop the target if the
+	initial setup failed.  Add the tfile's thread immediately
+	aftwards, before any non-essential setup.  Don't skip
+	post_create_inferior if there are no traceframes present in the
+	file.
+	(tfile_close): Remove redundant check for null before xfree call.
+	(tfile_thread_alive): New function.
+	(init_tfile_ops): Register it as to_thread_alive callback.
+
+2011-05-20  Pedro Alves  <pedro at codesourcery.com>
+
+	* tracepoint.c (tfile_open): Delete #if 0'd code.
+
+2011-05-20  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix -readnow for -gdwarf-4 unused type units.
+	* dwarf2read.c (struct signatured_type): Remove the field offset.
+	(create_signatured_type_table_from_index): Remove its initialization.
+	(create_debug_types_hash_table): Likewise.  Initialize per_cu.offset
+	instead.  Add a complaint call.
+	(process_psymtab_comp_unit): Change assignment to gdb_assert.
+	(process_type_comp_unit, lookup_die_type, dump_die_shallow)
+	(lookup_signatured_type_at_offset, read_signatured_type)
+	(write_one_signatured_type): Update the field for per_cu.
+
+2011-05-19  Tom Tromey  <tromey at redhat.com>
+
+	* python/py-inferior.c (python_inferior_exit): Use
+	target_gdbarch.
+	(python_on_resume): Likewise.
+
+2011-05-19  Matt Rice  <ratmice at gmail.com>
+
+        * breakpoint.c (bpstat_do_actions_1): Call prevent_dont_repeat.
+
+2011-05-19  Hui Zhu  <teawater at gmail.com>
+
+	* tracepoint.c (tfile_trace_find): Return directly when num is -1.
+
+2011-05-19  Hui Zhu  <teawater at gmail.com>
+
+	* xcoffread.c (read_xcoff_symtab): Initialize fcn_aux_saved.
+
+2011-05-18  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2read.c (dwarf2_add_field): Constify.
+	* value.c (value_static_field): Constify.
+	* gdbtypes.h (struct main_type) <field.field_location.physname>:
+	Now const.
+	* ax-gdb.c (gen_static_field): Constify
+
+2011-05-18  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* linux-nat.c (kill_callback): Use SIGKILL first.
+
+2011-05-18  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-lang.c (print_it_exception): Avoid use of sprintf.
+
+2011-05-18  Tom Tromey  <tromey at redhat.com>
+
+	* value.c (value_fn_field): Constify.
+	* symtab.c (gdb_mangle_name): Constify.
+	* stabsread.c (update_method_name_from_physname): Make 'physname'
+	argument const.
+	* p-typeprint.c (pascal_type_print_method_args): Make arguments
+	const.  Use explicit fputc_filtered loop.
+	(pascal_type_print_base): Constify.
+	* p-lang.h (pascal_type_print_method_args): Update.
+	* linespec.c (add_matching_methods): Constify.
+	(add_constructors): Likewise.
+	* jv-typeprint.c (java_type_print_base): Constify.
+	* gdbtypes.h (struct cplus_struct_type)
+	<fn_fieldlist.fn_field.physname>: Now const.
+	* dwarf2read.c (compute_delayed_physnames): Constify.
+	(dwarf2_add_member_fn): Likewise.
+	* c-typeprint.c (c_type_print_base): Constify.  Use cleanups.
+
+2011-05-18  Pedro Alves  <pedro at codesourcery.com>
+
+	* infrun.c (resume): Mention which is the current thread, and its
+	current PC in debug output.
+	(prepare_to_proceed): Mention the thread switching in debug
+	output.
+
+2011-05-18  Tom Tromey  <tromey at redhat.com>
+
+	* linux-thread-db.c (try_thread_db_load_from_pdir_1): Fix absolute
+	path check.  Use xmalloc and cleanups.
+	(try_thread_db_load_from_dir): Use xmalloc and cleanups.
+
+2011-05-17  Tom Tromey  <tromey at redhat.com>
+
+	* cp-valprint.c (cp_print_value_fields): Catch errors from
+	value_static_field.
+
+2011-05-17  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2read.c (dwarf2_get_die_type): Call
+	get_die_type_at_offset.
+	* dwarf2expr.c (dwarf_get_base_type): Handle NULL return from
+	get_base_type function.
+
+2011-05-17  Tomas Martinec  <fyzmat at gmail.com>
+
+	* infrun.c (handle_inferior_event) <handling deferred step>: Clear
+	trap_expected.
+
+2011-05-16  Doug Evans  <dje at google.com>
+
+	* python/py-auto-load.c (source_section_scripts): Mention objfile
+	name in warning.
+
+2011-05-15  Doug Evans  <dje at google.com>
+
+	* linux-thread-db.c (try_thread_db_load_from_pdir_1): New function.
+	(try_thread_db_load_from_pdir): Call it.  If unable to find
+	libthread_db in directory of libpthread, see if we're looking at
+	the separate-debug-info copy.
+
+	* python/py-autoload.c (print_script): Print "Missing" instead of
+	"No" for missing scripts.
+	(info_auto_load_scripts): Tweak "Loaded" column to fit "Missing".
+
+2011-05-13  Doug Evans  <dje at google.com>
+
+	* ui-file.c (stdio_file_write_async_safe): Add comment.
+
+2011-05-14  Hui Zhu  <teawater at gmail.com>
+
+	* ui-file.c (stdio_file_write_async_safe): Add empty check for build.
+
+2011-05-13  Doug Evans  <dje at google.com>
+
+	Support $pdir and $sdir in libthread-db-search-path.
+	* NEWS: Mention $sdir,$pdir.
+	* gdb_thread_db.h (LIBTHREAD_DB_SEARCH_PATH): Add $sdir:$pdir.
+	* linux-thread-db.c (try_thread_db_load_from_pdir): New function.
+	(try_thread_db_load_from_sdir): New function.
+	(try_thread_db_load_from_dir): New function.
+	(thread_db_load_search): Handle $pdir, $sdir.  Remove trying of
+	system directories if search of libthread-db-search-path fails,
+	that is now done via $sdir.
+	(has_libpthread): New function.
+	(thread_db_load): Remove search for libthread_db in directory of
+	libpthread, that is now done via $pdir.
+
+	* NEWS: Mention "info auto-load-scripts".
+	* python/py-auto-load.c (struct auto_load_pspace_info): New member
+	script_not_found_warning_printed.
+	(init_loaded_scripts_info): Renamed from create_loaded_scripts_hash,
+	all callers updated.  Initialize script_not_found_warning_printed.
+	(get_auto_load_pspace_data_for_loading): New function.
+	(maybe_add_script): New function.
+	(source_section_scripts): Simplify.  Only print one warning regardless
+	of the number of auto-load scripts not found.
+	(clear_section_scripts): Clear script_not_found_warning_printed.
+	(auto_load_objfile_script): Record script in hash table.
+	(count_matching_scripts): New function.
+	(maybe_print_script): Renamed from maybe_print_section_script, all
+	callers updated.  Rewrite to use ui_out_*.
+	(info_auto_load_scripts): Renamed from
+	maintenance_print_section_scripts, all callers updated.
+	(gdbpy_initialize_auto_load): "maintenance print section-scripts"
+	renamed as "info auto-load-scripts".
+
+2011-05-13  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2expr.c (read_uleb128): Cast intermediate result.
+	(read_sleb128): Likewise.
+
+2011-05-13  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2loc.c (disassemble_dwarf_expression): Fix instruction
+	offset display.
+
+2011-05-13  Doug Evans  <dje at google.com>
+
+	* linux-nat.c (debug_linux_nat_async): Delete.
+	Replace all references to use debug_linux_nat instead.
+	(show_debug_linux_nat_async): Delete.
+	(sigchld_handler): Call ui_file_write_async_safe instead of
+	fprintf_unfiltered.
+	(_initialize_linux_nat): Remove `set debug lin-lwp-async'.
+	* ui-file.c (struct ui_file): New member to_write_async_safe.
+	(null_file_write_async_safe): New function.
+	(ui_file_write_async_safe): New function.
+	(set_ui_file_write_async_safe): New function.
+	(ui_file_new): Initialize to_write_async_safe.
+	(stdio_file_write_async_safe): New function.
+	(struct stdio_file): New member fd.
+	(stdio_file_new): Initialize to_write_async_safe, fd.
+	(stdio_file_read, stdio_file_isatty): New stdio->fd instead of calling
+	fileno.
+	* ui-file.h (ui_file_write_async_safe_ftype): New typedef.
+	(set_ui_file_write_async_safe): Declare.
+	(ui_file_write_async_safe): Declare.
+
+2011-05-13  Tom Tromey  <tromey at redhat.com>
+
+	* utils.c (do_value_free): New function.
+	(make_cleanup_value_free): Likewise.
+	* dwarf2loc.c (dwarf2_evaluate_loc_desc_full): Handle value
+	freeing correctly.
+	(dwarf2_loc_desc_needs_frame): Call
+	make_cleanup_value_free_to_mark.
+	* dwarf2expr.h (struct dwarf_expr_context) <mark>: Remove field.
+	* dwarf2expr.c (free_dwarf_expr_context): Don't call
+	value_free_to_mark.
+	(new_dwarf_expr_context): Don't call value_mark.
+	* dwarf2-frame.c (execute_stack_op): Call
+	make_cleanup_value_free_to_mark.
+	* defs.h (make_cleanup_value_free): Declare.
+
+2011-05-13  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* mi/mi-main.c (mi_cmd_execute): Use cleanup from
+	prepare_execute_command.
+	* top.c (prepare_execute_command): Return cleanup.
+	(execute_command): Use cleanup from prepare_execute_command.
+	* top.h (prepare_execute_command): Change prototype to return
+	cleanup.
+	* defs.h (struct value): Add opaque declaration.
+	(make_cleanup_value_free_to_mark): Add prototype.
+	* utils.c (do_value_free_to_mark): New function.
+	(make_cleanup_value_free_to_mark): Likewise.
+
+2011-05-12  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2expr.c (execute_stack_op) <DW_OP_shr>: Unconditionally
+	cast left-hand-side to unsigned.
+
+2011-05-12  Tom Tromey  <tromey at redhat.com>
+
+	PR gdb/12617:
+	* value.h (value_from_contents): Declare.
+	* value.c (value_from_contents): New function.
+	* dwarf2read.c (dwarf_stack_op_name): Add new values.
+	(dwarf2_get_die_type): New function.
+	* dwarf2loc.c (dwarf_expr_get_base_type): New function.
+	(allocate_piece_closure): Acquire reference to values.
+	(read_pieced_value): Update for value-based expressions.
+	(write_pieced_value): Likewise.
+	(free_pieced_value_closure): Call value_free as needed.
+	(dwarf2_evaluate_loc_desc_full): Set get_base_type field.
+	Update for value-based expressions.
+	* dwarf2loc.h (dwarf2_get_die_type): Declare.
+	* dwarf2expr.h (struct dwarf_stack_value) <value>: Change type.
+	<get_base_type>: New field.
+	(struct dwarf_expr_piece) <v.value>: Change type.
+	<v.regno>: New field.
+	(struct dwarf_expr_context) <mark>: New field.
+	(dwarf_expr_piece, dwarf_expr_fetch): Update.
+	(dwarf_expr_pop, dwarf_expr_push): Remove.
+	(dwarf_expr_push_address): Declare.
+	* dwarf2expr.c (dwarf_arch_cookie): New global.
+	(struct dwarf_gdbarch_types): New.
+	(dwarf_gdbarch_types_init, dwarf_expr_address_type): New
+	functions.
+	(dwarf_expr_push): Change type of 'value' argument.  Update.  Now
+	static.
+	(dwarf_expr_push_address): New function.
+	(dwarf_expr_pop): Now static.
+	(dwarf_expr_fetch): Change return type.
+	(dwarf_require_integral): New function.
+	(dwarf_expr_fetch): Simplify.
+	(add_piece): Update.
+	(base_types_equal_p, dwarf_get_base_type, get_unsigned_type): New
+	functions.
+	(execute_stack_op) <sign_ext>: Remove.
+	Use values for DWARF stack.
+	<DW_OP_GNU_const_type, DW_OP_GNU_deref_type,
+	DW_OP_GNU_regval_type, DW_OP_GNU_convert, DW_OP_GNU_reinterpret>:
+	New cases.
+	(_initialize_dwarf2expr): New function.
+	(add_piece): Update.
+	(new_dwarf_expr_context): Set new field.
+	(free_dwarf_expr_context): Call value_free_to_mark.
+	* dwarf2-frame.c (no_base_type): New function.
+	(execute_stack_op): Set get_base_type field.  Update.
+
+2011-05-12  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2read.c (read_common_block): Fix formatting.
+
+2011-05-12  Kwok Cheung Yeung  <kcy at codesourcery.com>
+
+	* breakpoint.c (disable_breakpoint): Disable all locations
+  	associated with a tracepoint on target if a trace experiment is
+	running.
+ 	(disable_command): Disable a specific tracepoint location on target if
+ 	a trace	experiment is running.
+ 	(do_enable_breakpoint): Enable all locations associated with a
+ 	tracepoint on target if a trace experiment is running.
+ 	(enable_command) Enable a specific tracepoint location on target if a
+ 	trace experiment is running.
+ 	* target.c (update_current_target): Add INHERIT and de_fault clauses for
+ 	to_supports_enable_disable_tracepoint, to_enable_tracepoint and
+	to_disable_tracepoint.
+ 	* target.h: Add declaration of struct bp_location.
+ 	(struct target_ops): Add new functions
+	to_supports_enable_disable_tracepoint, to_enable_tracepoint and
+ 	to_disable_tracepoint to target operations.
+	(target_supports_enable_disable_tracepoint): New macro.
+ 	(target_enable_tracepoint): New macro.
+ 	(target_disable_tracepoint): New macro.
+ 	* remote.c (struct remote_state): Add new field.
+	(remote_enable_disable_tracepoint_feature): New.
+	(remote_protocol_features): Add new entry.
+	(remote_supports_enable_disable_tracepoint): New.
+	(remote_enable_tracepoint): New.
+ 	(remote_disable_tracepoint): New.
+ 	(init_remote_ops): Add remote_enable_tracepoint,
+	remote_disable_tracepoint and remote_supports_enable_disable_tracepoint
+	to remote operations.
+ 	* tracepoint.c (start_tracing): Allow tracing to start without any
+ 	tracepoints enabled with just a warning if they can be re-enabled
+	later.
+ 	* NEWS: Add news item for the new behaviour of the enable and disable
+ 	GDB commands when applied to tracepoints.
+ 	Add news items for the new remote packets QTEnable and QTDisable.
+
+2011-05-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* config.in: Regenerate.
+	* configure: Regenerate.
+	* configure.ac <--with-system-readline> (for readline_echoing_p):
+	Remove the test.
+	* tui/tui-io.c (tui_old_readline_echoing_p): Rename to ...
+	(tui_old_rl_echoing_p): ... here.
+	(tui_setup_io): Rename extern declaration readline_echoing_p to
+	_rl_echoing_p.  Adjust assignments for the both renames.
+
+2011-05-11  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* symtab.c (lookup_symtab): Run cleanup before returning.
+
+2011-05-11  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2read.c (handle_data_member_location): New function.
+	(dwarf2_add_field): Use it.
+	(read_common_block): Likewise.
+
+2011-05-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Make addrs->SECTINDEX always defined.
+	* symfile.c (relative_addr_info_to_section_offsets): Check for
+	SECTINDEX -1, not for zero ADDR.
+	(addrs_section_compar): Remove checking for invalid SECTINDEX.
+	(addr_info_make_relative): Set SECTINDEX to -1 for unmatched entries.
+	* symfile.h (struct section_addr_info) <sectindex>: Update the comment
+	on its validity.
+
+2011-05-10  Doug Evans  <dje at google.com>
+
+	* linux-thread-db.c: Whitespace cleanup.
+	(try_thread_db_load_1): Fix comment.
+
+	* linux-thread-db.c (set_libthread_db_search_path): New function.
+	(_initialize_thread_db): Add setter for libthread-db-search-path.
+
+2011-05-09  Doug Evans  <dje at google.com>
+
+	* NEWS: Mention --with-iconv-bin.
+	* configure.ac: New option --with-iconv-bin.
+	* configure: Regenerate.
+	* config.in: Regenerate.
+	* defs.h (relocate_gdb_directory): Declare.
+	* main.c (relocate_gdb_directory): Renamed from relocate_directory,
+	removed progname parameter, and exported.  All callers updated.
+	* charset.c (find_charset_names): Use --with-iconv-bin if specified.
+
+	* linux-nat.c (lin_lwp_attach_lwp): For !WIPSTOPPED case,
+	adding missing call to restore_child_signals_mask.
+
+2011-05-09  Pedro Alves  <pedro at codesourcery.com>
+
+	* inferior.h (wait_for_inferior): Remove `thread_exec_as_sigtrap'
+	parameter.
+	* infrun.c (proceed, start_remote): Adjust.
+	(wait_for_inferior): Remove `thread_exec_as_sigtrap' parameter,
+	and adjust to not handle it.
+	* solib-irix.c (irix_solib_create_inferior_hook): Adjust.
+	* solib-osf.c (osf_solib_create_inferior_hook): Adjust.
+	* solib-sunos.c (sunos_solib_create_inferior_hook): Adjust.
+	* solib-svr4.c (svr4_solib_create_inferior_hook): Adjust.
+	* windows-nat.c (do_initial_windows_stuff): Adjust.
+	* infcmd.c (attach_command): Adjust.
+	(notice_new_inferior): Adjust.
+
+2011-05-06  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* ppc-linux-tdep.c (ppu2spu_prev_register): Handle pseudo registers.
+	(ppu2spu_unwind_register): Mark pseudo registers unavailable.
+	* spu-tdep.c (op_selb): Use correct value.
+
+2011-05-06  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* spu-linux-nat.c (spu_symbol_file_add_from_memory): Add NULL
+	"parent" parameter to symbol_file_add_from_bfd call.
+
+2011-05-06  Sergio Durigan Junior  <sergiodj at linux.vnet.ibm.com>
+	    Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	Implement support for PowerPC BookE masked watchpoints.
+	* NEWS: Mention masked watchpoint support.  Create "Changed commands"
+	section.
+	* breakpoint.h (struct breakpoint_ops) <works_in_software_mode>: New
+	method.  Initialize to NULL in all existing breakpoint_ops instances.
+	(struct breakpoint) <hw_wp_mask>: New field.
+	* breakpoint.c (is_masked_watchpoint): Add prototype.
+	(update_watchpoint): Don't set b->val for masked watchpoints.  Call
+	breakpoint's breakpoint_ops.works_in_software_mode if available.
+	(watchpoints_triggered): Handle the case of a hardware masked
+	watchpoint trigger.
+	(watchpoint_check): Likewise.
+	(works_in_software_mode_watchpoint): New function.
+	(insert_masked_watchpoint, remove_masked_watchpoint)
+	(resources_needed_masked_watchpoint)
+	(works_in_software_mode_masked_watchpoint, print_it_masked_watchpoint)
+	(print_one_detail_masked_watchpoint, print_mention_masked_watchpoint)
+	(print_recreate_masked_watchpoint, is_masked_watchpoint): New
+	functions.
+	(masked_watchpoint_breakpoint_ops): New structure.
+	(watch_command_1): Check for the existence of the `mask' parameter.
+	Set b->ops according to the type of hardware watchpoint being created.
+	* ppc-linux-nat.c (ppc_linux_insert_mask_watchpoint)
+	(ppc_linux_remove_mask_watchpoint)
+	(ppc_linux_masked_watch_num_registers): New functions.
+	(_initialize_ppc_linux_nat): Initialize to_insert_mask_watchpoint,
+	to_remove_mask_watchpoint and to_masked_watch_num_registers.
+	* target.c (update_current_target): Mention to_insert_mask_watchpoint,
+	to_remove_mask_watchpoint, and to_masked_watch_num_registers.
+	(target_insert_mask_watchpoint, target_remove_mask_watchpoint)
+	(target_masked_watch_num_registers): New functions.
+	* target.h (struct target_ops) <to_insert_mask_watchpoint>,
+	<to_remove_mask_watchpoint>, <to_masked_watch_num_registers>: New
+	methods.
+	(target_insert_mask_watchpoint, target_remove_mask_watchpoint)
+	(target_masked_watch_num_registers): Add prototypes.
+
+2011-05-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	PR 12573
+	* dwarf2read.c (struct dwarf2_cu): New field has_loclist.
+	(producer_is_gcc_ge_4_0): New function.
+	(process_full_comp_unit): Set also symtab->locations_valid.  Move the
+	symtab->language code.
+	(var_decode_location): Set cu->has_loclist.
+	* symtab.c (skip_prologue_sal): New variables saved_pc, force_skip and
+	skip.  Intialize force_skip from locations_valid.  Move the prologue
+	skipping code into two passes.
+	* symtab.h (struct symtab): Make the primary field a bitfield.  New
+	field locations_valid.
+
+2011-05-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* c-exp.y (qualified_name): Call destructor_name_p with $1.type.
+	(classify_inner_name): Call cp_lookup_nested_type with
+	yylval.tsym.type.
+	* cp-namespace.c (cp_lookup_nested_type): New variable
+	saved_parent_type.  Call CHECK_TYPEDEF for parent_type.  Call
+	type_name_no_tag_or_error with saved_parent_type.
+	* dwarf2read.c (load_partial_dies): Read in any children of
+	DW_TAG_typedef with complaint in such case.
+	* gdbtypes.c (type_name_no_tag_or_error): New function.
+	* gdbtypes.h (type_name_no_tag_or_error): New prototype.
+	* valops.c (destructor_name_p): New comment for parameter type.  Remove
+	type const.  Make dname and cp const.  Call type_name_no_tag_or_error.
+	* value.h (destructor_name_p): Remove type const.
+
+2011-05-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* symtab.c (compare_symbol_name): New function.
+	(completion_list_add_name, expand_partial_symbol_name): Call it,
+	remove the variable ncmp.
+	(default_make_symbol_completion_list_break_on): Reduce SYM_TEXT_LEN,
+	gdb_assert it.
+
+2011-05-05  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	Demote to sw watchpoint only in update_watchpoint.
+	* breakpoint.c (update_watchpoint): Change between software and
+	hardware watchpoint for all kinds of watchpoints, not just
+	read/write ones.  Determine b->exact value here instead of
+	in watch_command_1.  Error out if there are not enough resources
+	for a read or access hardware watchpoint.
+	(watch_command_1): Remove logic of checking whether there are
+	enough resources available, since update_watchpoint will do that
+	work now.  Don't set b->exact here.  Catch exceptions thrown by
+	update_watchpoint and delete the watchpoint.
+	(can_use_hardware_watchpoint): Remove exact_watchpoints argument.
+	Use target_exact_watchpoints instead.
+	(delete_breakpoint): Notify observers only if deleted watchpoint
+	has a breakpoint number assigned to it.
+
+2011-05-05  Janis Johnson  <janisjo at codesourcery.com>
+
+	* MAINTAINERS: Add myself as a write-after-approval maintainer.
+
+2011-05-05  Jerome Guitton  <guitton at adacore.com>
+
+	* i386-tdep.c (i386_in_stack_tramp_p, i386_stack_tramp_frame_sniffer):
+	New functions.
+	(i386_stack_tramp_frame_unwind): New static global.
+	(i386_match_pattern): New function, extracted from i386_match_insn.
+	(i386_match_insn): Use i386_match_pattern.
+	(i386_match_insn_block): New function.
+	(i386_tramp_chain_in_reg_insns)
+	(i386_tramp_chain_on_stack_insns): New static variables.
+	(i386_gdbarch_init): Add i386_stack_tramp_frame_unwind to list
+	of unwinders.
+
+2011-05-04  Joseph Myers  <joseph at codesourcery.com>
+
+	* configure.host (xscale*): Don't handle target.
+	* configure.tgt (thumb*-*-* | strongarm*-*-* | xscale-*-*): Don't
+	handle targets.
+
+2011-05-04  Yao Qi  <yao at codesourcery.com>
+
+	* gdb_wait.h: remove WAITTYPE and WCOREDUMP.
+
+2011-05-03  Joel Brobecker <brobecker at adacore.com>
+
+        Revert:
+	| 2011-03-07  Michael Snyder  <msnyder at vmware.com>
+	| * elfread.c (elf_symtab_read): Stop memory leak.
+
+2011-05-03  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	* nto-tdep.c (nto_target): Replace deprecated call to
+	cygwin_conv_to_posix_path functions by cygwin_conv_path calls.
+
+2011-05-03  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix false GCC warning.
+	* breakpoint.c (do_enable_breakpoint): Initialize orig_enable_state.
+
+2011-05-03  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* breakpoint.c (update_watchpoint): Move code to change
+	the enable state of breakpoint from here ...
+	(do_enable_breakpoint): ... to here.
+
+2011-04-26  Andrew Gontarek  <andrewg at cray.com>
+
+	* valprint.c (val_print_array_elements): Fixed poor performance
+	of printing very large arrays with repeat_count_threshold set
+	to unlimited.  New comment.
+
+2011-04-29  Tom Tromey  <tromey at redhat.com>
+
+	* mi/mi-parse.c (mi_parse): Remove incorrect sizeof.
+	(mi_parse): Likewise.
+	* breakpoint.c (break_range_command): Use sizeof char*, not
+	char**.
+	(create_breakpoint): Likewise.
+	(parse_breakpoint_sals): Likewise.
+
+2011-04-29  Pedro Alves  <pedro at codesourcery.com>
+
+	* linux-nat.c (linux_child_remove_fork_catchpoint)
+	(linux_child_remove_vfork_catchpoint)
+	(linux_child_remove_exec_catchpoint): New functions.
+	(linux_target_install_ops): Install them.
+
+2011-04-29  Phil Muldoon  <pmuldoon at redhat.com>
+
+	PR mi/12531
+
+	* varobj.c (install_default_visualizer): Do not install a
+	visualizer if the varobj is CPLUS_FAKE_CHILD.
+	(construct_visualizer): Likewise.
+
+2011-04-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* symtab.c (expand_partial_symbol_name): New variable NCMP.  Support
+	case insensitive comparison.
+
+2011-04-28  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* infrun.c (proceed): Revert previous change.
+	(resume): Instead, handle the case of signal delivery while stepping
+	off a breakpoint location here, and only if software single-stepping
+	is used.  Handle nested signals.
+
+2011-04-28  Yao Qi  <yao at codesourcery.com>
+
+	* arm-tdep.c (copy_unmodified): Rename to ...
+	(arm_copy_unmodified): .. this.  New.
+	(copy_preload): Move common part to ...
+	(install_preload): .. this.  New.
+	(arm_copy_preload): New.
+	(copy_preload_reg): Move common part to ...
+	(install_preload_reg): ... this.  New.
+	(arm_copy_preload_reg): New.
+	(copy_b_bl_blx): Move common part to ...
+	(install_b_bl_blx): .. this.  New.
+	(arm_copy_b_bl_blx): New.
+	(copy_bx_blx_reg): Move common part to ...
+	(install_bx_blx_reg): ... this. New.
+	(arm_copy_bx_blx_reg): New.
+	(copy_alu_reg): Move common part to ...
+	(install_alu_reg): ... this.  New.
+	(arm_copy_alu_reg): New.
+	(copy_alu_shifted_reg): Move common part to ...
+	(install_alu_shifted_reg): ... this.  New.
+	(copy_ldr_str_ldrb_strb): Move common part to ...
+	(install_ldr_str_ldrb_strb): ... this.  New.
+	(arm_copy_ldr_str_ldrb_strb): New.
+	(copy_copro_load_store): Move some common part to ...
+	(install_copy_copro_load_store): ... this.  New.
+	(arm_copy_copro_load_store): New.
+	(copy_svc): Delete.
+	(arm_copy_svc): Renamed from copy_svc.
+	(copy_undef): Delete.
+	(arm_copy_undef): Renamed from copy_undef.
+	(decode_ext_reg_ld_st): Delete.
+	(arm_decode_ext_reg_ld_st): Renamed from decode_ext_reg_ld_st.
+	(decode_svc_copro): Delete.
+	(arm_decode_svc_copro): Renamed from decode_svc_copro.
+	(copy_copro_load_store, copy_alu_imm): update callers.
+	(copy_extra_ld_st, copy_block_xfer): Likewise.
+	(decode_misc_memhint_neon, decode_unconditional): Likewise.
+	(decode_miscellaneous, decode_dp_misc): Likewise.
+	(decode_ld_st_word_ubyte, decode_media): Likewise.
+	(decode_b_bl_ldmstm, decode_ext_reg_ld_st): Likewise.
+	(decode_svc_copro, decode_misc_memhint_neon): Likewise.
+	(decode_unconditional, decode_miscellaneous): Likewise.
+	(decode_media, decode_b_bl_ldmstm): Likewise.
+	(arm_process_displaced_insn): Likewise..
+	(decode_misc_memhint_neon): Delete.
+	(arm_decode_misc_memhint_neon): Renamed from decode_misc_memhint_neon.
+	(decode_miscellaneous): Delete.
+	(arm_decode_miscellaneous): Renamed from decode_miscellaneous.
+	(decode_dp_misc): Delete.
+	(arm_decode_dp_misc): Renamed from decode_dp_misc.
+	(decode_ld_st_word_ubyte): Delete.
+	(arm_decode_ld_st_word_ubyte): Renamed from decode_ld_st_word_ubyte.
+	(decode_media): Delete.
+	(arm_decode_media): Renamed from decode_media.
+	(decode_b_bl_ldmstm): Delete.
+	(arm_decode_b_bl_ldmstm): Renamed from decode_b_bl_ldmstm.
+	(decode_ext_reg_ld_st): Delete.
+	(arm_decode_ext_reg_ld_st): Renamed from decode_ext_reg_ld_st.
+	(decode_unconditional): Delete.
+	(arm_decode_unconditional): Renamed from decode_unconditional.
+
+2011-04-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Case insensitive lookups implementation.
+	* dwarf2read.c: Include ctype.h.
+	(struct mapped_index): New field version.
+	(mapped_index_string_hash): New parameter index_version.  New comment
+	for it.  Call tolower appropriately.
+	(find_slot_in_mapped_hash): New variable cmp, initialize it, use it.
+	Choose the right index version for mapped_index_string_hash.
+	(dwarf2_read_index): Support also the index version 5.  Initialize the
+	new struct mapped_index field version.
+	(hash_strtab_entry): Pass INT_MAX for the new parameter, explain why.
+	(find_slot): Explain the version needs.  Pass INT_MAX for the new
+	parameter.
+	(write_psymtabs_to_index): Produce version 5.
+	* minsyms.c (lookup_minimal_symbol): New variable cmp, initialize it,
+	use it.  New comment for SYMBOL_MATCHES_SEARCH_NAME.
+	* psymtab.c (lookup_partial_symbol): Find the
+	SYMBOL_MATCHES_SEARCH_NAME start of the found block of matching
+	entries.
+	* symtab.c (lookup_symbol_in_language): Remove the case_sensitive_off
+	NAME lowercasing.
+	(search_symbols): Pass REG_ICASE to regcomp for case_sensitive_off.
+	(completion_list_add_name): New variable ncmp, initialize it, use it.
+	* symtab.h (SYMBOL_HASH_NEXT): Always call tolower.
+	* utils.c (strcmp_iw): Support case_sensitive_off.
+	(strcmp_iw_ordered): Sort in a way compatible with case_sensitive_off.
+	New function comment part.  New variables saved_string1,
+	saved_string2 and case_pass.  Add a proper second pass.
+
+2011-04-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Replace re_comp/re_exec by regcomp/regexec.
+	* symtab.c (struct search_symbols_data): New fields preg, preg_p.
+	(search_symbols_name_matches): Use them, use regexec.
+	(search_symbols): New variable retval_chain, adjust the use of
+	old_chain against it.  Replace re_comp by regcomp.  Use the new struct
+	search_symbols_data fields, use regexec instead of re_exec.
+
+2011-04-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Format the code for the next patch.
+	* dwarf2read.c (struct mapped_index): Include delimiting newlines.
+	* utils.c (strcmp_iw_ordered): Reformat the code for the next patch.
+	New variables c1 and c2.
+
+2011-04-27  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* infrun.c (proceed): Do not single-step into signal delivery
+	when stepping off a breakpoint location.
+	(insert_step_resume_breakpoint_at_frame): Move prototype earlier.
+	(insert_step_resume_breakpoint_at_caller): Likewise.
+	(insert_step_resume_breakpoint_at_sal): Likewise.
+	(insert_longjmp_resume_breakpoint): Likewise.
+
+2011-04-27  Yao Qi  <yao at codesourcery.com>
+
+	* common/linux-ptrace.h: Remove include <sys/wait.h>.
+
+2011-04-27  Joel Brobecker  <brobecker at adacore.com>
+
+	* procfs.c (procfs_pass_signals): Fix advance declaration.
+
+2011-04-27  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* target.h (struct target_ops): Remove to_notice_signals;
+	add to_pass_signals.
+	(target_notice_signals): Remove.
+	(target_pass_signals): Add prototype.
+	* target.c (update_current_target): Remove to_notice_signals;
+	mention to_pass_signals.
+	(target_pass_signals): New function.
+	(debug_to_notice_signals): Remove.
+	(setup_target_debug): Do not install debug_to_notice_signals.
+
+	* infrun.c (signal_pass): New global.
+	(resume): Call target_pass_signals.
+	(handle_inferior_event): Report all signals while stepping over
+	non-steppable watchpoint.  Reset trap_expected to ensure breakpoints
+	are re-inserted when stepping over a signal handler.
+	(signal_cache_update): New function.
+	(signal_stop_update): Call it.
+	(signal_print_update): Likewise.
+	(signal_pass_update): Likewise.
+	(handle_command): Call signal_cache_update and target_pass_signals
+	instead of target_notice_signals.
+	(_initialize_infrun): Initialize signal_pass.
+
+	* linux-nat.c (pass_mask): New global.
+	(linux_nat_pass_signals): New function.
+	(linux_nat_create_inferior): Report all signals initially.
+	(linux_nat_attach): Likewise.
+	(linux_nat_resume): Use pass_mask to decide whether to directly
+	handle an inferior signal.
+	(linux_nat_wait_1): Likewise.
+	(linux_nat_add_target): Install to_pass_signals callback.
+
+	* nto-procfs.c (notice_signals): Remove.
+	(procfs_resume): Do not call notice_signals.
+	(procfs_notice_signals): Remove.
+	(procfs_pass_signals): New function.
+	(init_procfs_ops): Install to_pass_signals callback instead of
+	to_notice_signals callback.
+	(_initialize_procfs): Report all signals initially.
+
+	* procfs.c (procfs_notice_signals): Remove.
+	(procfs_pass_signals): New function.
+	(procfs_target): Install to_pass_signals callback instead of
+	to_notice_signals callback.
+	(register_gdb_signals): Remove.
+	(procfs_debug_inferior): Report all signals initially.
+	(procfs_init_inferior): Remove redundant register_gdb_signals call.
+
+	* remote.c (remote_pass_signals): Add numsigs and pass_signals
+	parameters; use them instead of calling signal_..._state routines.
+	(remote_notice_signals): Remove.
+	(remote_start_remote): Report all signals initially.
+	(remote_resume): Do not call remote_pass_signals.
+	(_initialize_remote): Install to_pass_signals callback instead of
+	to_notice_signals callback.
+
+2011-04-27  Pedro Alves  <pedro at codesourcery.com>
+
+	* breakpoint.c (user_settable_breakpoint): Delete.
+	(user_breakpoint_p): Remove check on user_settable_breakpoint.
+	(delete_command): Check user_breakpoint_p instead of looking at
+	the breakpoint's type.
+	(disable_command): Ditto.
+	(enable_command): Ditto.
+	(delete_trace_command): Use user_breakpoint_p instead of looking
+	at the breakpoint number directly.  When checking if there are
+	user visible tracepoints, in order to know whether to ask the user
+	for confirmation, check whether the breakpoint is actually a
+	tracepoint.
+
+2011-04-27  Vladimir Prus  <vladimir at codesourcery.com>
+
+	* python/py-breakpoint.c (gdbpy_breakpoint_created): Fix
+	compilation.
+
+2011-04-27  Vladimir Prus  <vladimir at codesourcery.com>
+
+	MI breakpoint notifications.
+
+	* annotate.c (breakpoint_changed): Adjust parameter type.
+	* breakpoint.c (set_breakpoint_condition): Adjust to change
+	in breakpoint_modified type.
+	(breakpoint_set_commands): Likewise.
+	(do_map_commands_command): Likewise.
+	(bpstat_check_breakpoint_conditions): Notify that breakpoint has
+	changed after bumping hit count.
+	(bpstat_stop_status): Likewise.
+	(print_one_breakpoint_location): Don't wrap in tuple here.
+	(print_one_breakpoint): Always print individual locations.
+	For locations, use unnamed tuple.
+	(disable_breakpoints_in_unloaded_shlib): Notify that breakpoint
+	has changed.
+	(create_catchpoint, create_syscall_event_catchpoint): Call
+	breakpoint_created obsever.
+	(mention): Don't call breakpoint_created observer.
+	(create_breakpoint_sal): Call breakpoint_created observer.
+	(create_breakpoint, watch_command_1): Likewise.
+	(create_ada_exception_breakpoint): Likewise.
+	(delete_breakpoint): Call breakpoint_deleted breakpoint.
+	(locations_are_equal): New.
+	(update_breakpoint_locations): If locations were changed, notify.
+	(set_ignore_count, disable_breakpoint, do_enable_breakpoint):
+	Call breakpoint_modified observer.
+
+	* mi/mi-cmd-break.c (breakpoint_notify): Adjust.
+	(mi_cmd_break_insert): Don't set observers for modify and delete.
+	* mi/mi-interp.c (mi_suppress_breakpoint_notifications): New.
+	(mi_breakpoint_created, mi_breakpoint_deleted)
+	(mi_breakpoint_modified): New.
+	(mi_interpreter_init): Hook the above.
+	* mi/mi-main.c (mi_cmd_execute): Disable breakpoint notifications
+	while -break-* commands are executing.
+	* mi/mi-main.h (mi_suppress_breakpoint_notifications): New.
+	* mi/mi-out.c (struct ui_out_data): New field original_buffer.
+	(mi_redirect): New.
+	(mi_ui_out_impl): Hook in mi_redirect.
+	(mi_field_skip): True to the name, skip the field, don't output
+	a field with an empty value.
+
+	* python/py-breakpoint.c (gdbpy_breakpoint_created)
+	(gdbpy_breakpoint_deleted): Adjust.
+	* tui/tui-hooks.c (tui_event_create_breakpoint)
+	(tui_event_delete_breakpoint, tui_event_modify_breakpoint): Adjust.
+
+2011-04-26  Aleksandar Ristovski  <aristovski at qnx.com>
+
+	* nto-procfs.c (procfs_insert_hw_watchpoint): Fix prototype.
+	(procfs_remove_hw_watchpoint): Likewise.
+
+2011-04-26  Michael Walle  <michael at walle.cc>
+
+	* remote.c (remote_start_remote): Ack packet after sending the
+	interrupt sequence.
+
+2011-04-26  Yao Qi  <yao at codesourcery.com>
+
+	* linux-nat.c: Move common macros to ...
+	Include linux-ptrace.h.
+	* common/linux-ptrace.h: ... here.  New.
+
+2011-04-25  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* elfread.c (elf_symfile_read): Protect dwarf2_initialize_objfile by
+	!objfile_has_partial_symbols.  New comment.
+	* objfiles.c (objfile_has_partial_symbols): Call HAS_SYMBOLS if
+	SYM_READ_PSYMBOLS is not present. Extend the comment.
+	* symfile.h (struct sym_fns): Extend the sym_read_psymbols comment.
+
+2011-04-25  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* defs.h (ENUM_BITFIELD): Remove.
+
+2011-04-24  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	    Eli Zaretskii  <eliz at gnu.org>
+
+	* NEWS: Document the new gdbserver --once option.
+
+2011-04-21  Jie Zhang  <jzhang918 at gmail.com>
+
+	* MAINTAINERS: Update my email address.
+
+2011-04-21  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	* gdb_wchar.h (USE_INTERMEDIATE_ENCODING_FUNCTION): New macro.
+	(INTERMEDIATE_ENCODING): Change value to intermediate_encoding
+	function call if __STDC_ISO_10646__ macro is defined.
+	(intermediate_encoding): New prototype.
+	* charset.c (your_gdb_wchar_t_is_bogus): New extern test variable
+	to generate compile time error for unsupported gdb_wchar_t size.
+	(ENDIAN_SUFFIX): New macro.
+	(intermediate_encoding): New function.
+
+2011-04-20  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* ada-lang.c (struct add_partial_datum): Update the comment for
+	expand_partial_symbol_name.
+	(ada_add_partial_symbol_completions): Rename to ...
+	(ada_expand_partial_symbol_name): ... here, change return type, update
+	function comment, call symbol_completion_match instead of
+	symbol_completion_add.
+	(ada_make_symbol_completion_list): Use now expand_partial_symbol_names
+	and ada_expand_partial_symbol_name.
+	* dwarf2read.c (dw2_expand_symtabs_matching): Support NULL
+	FILE_MATCHER.
+	(dw2_map_symbol_names): Remove.
+	(dwarf2_gdb_index_functions): Unlist dw2_map_symbol_names.
+	* psymtab.c (map_symbol_names_psymtab): Remove.
+	(expand_symtabs_matching_via_partial): Support NULL FILE_MATCHER.
+	Support KIND == ALL_DOMAIN.  Exchange the NAME_MATCHER and KIND check
+	order.
+	(psym_functions): Unlist map_symbol_names_psymtab.
+	(map_partial_symbol_names): Rename to ...
+	(expand_partial_symbol_names): ... here, change the FUN type, call
+	expand_symtabs_matching with ALL_DOMAIN and NULL FILE_MATCHER now.
+	* psymtab.h (map_partial_symbol_names): Rename to ...
+	(expand_partial_symbol_names): ... here, change the FUN type.
+	* symfile.h (struct quick_symbol_functions): Update the description of
+	expand_symtabs_matching.  Remove map_symbol_names.
+	* symtab.c (search_symbols): Add ALL_DOMAIN to the function comment.
+	(struct add_name_data): Update the comment for
+	expand_partial_symbol_name.
+	(add_partial_symbol_name): Rename to ...
+	(expand_partial_symbol_name): ... here.  Replace
+	completion_list_add_name call by strncmp.
+	(default_make_symbol_completion_list_break_on): Use now
+	expand_partial_symbol_names and expand_partial_symbol_name.
+	* symtab.h (enum search_domain): New element ALL_DOMAIN.
+
+2011-04-20  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2read.c (save_gdb_index_command): Replace format
+	documentation with a pointer to the manual.
+
+2011-04-20  Pedro Alves  <pedro at codesourcery.com>
+
+	* regcache.c: Include remote.h.
+	(enum regcache_dump_what) <regcache_dump_remote>: New enum value.
+	(regcache_dump): Handle regcache_dump_remote.
+	(maintenance_print_remote_registers): New function.
+	(_initialize_regcache): Install "maint print remote-registers"
+	command.
+	* remote.c (map_regcache_remote_table): New function, factored out
+	from ...
+	(init_remote_state): ... here.
+	(remote_register_number_and_offset): New.
+	* remote.h (remote_register_number_and_offset): Declare.
+
+2011-04-20  Pedro Alves  <pedro at codesourcery.com>
+
+	* regcache.c (get_thread_arch_regcache): If creating a regcache for
+	null_ptid, assume and allow a NULL address space, instead of
+	asking the target for the ptid's address space.
+	* infrun.c (ptid_is_pid): Remove assertion.
+
+2011-04-19  Tom Tromey  <tromey at redhat.com>
+
+	* windows-tdep.c (windows_xfer_shared_library):
+	* windows-nat.c (get_module_name, windows_make_so):
+	* v850-tdep.c (v850_handle_pushm):
+	* utils.c (null_cleanup, gdb_realpath):
+	* ui-out.c (get_next_header):
+	* tracepoint.c (clear_traceframe_info):
+	* symtab.c (lookup_symtab):
+	* serial.h (struct serial_ops):
+	* mipsread.c (read_alphacoff_dynamic_symtab):
+	* infcmd.c (print_return_value):
+	* ia64-linux-tdep.c (ia64_linux_sigcontext_register_address):
+	* f-exp.y (parse_number):
+	* exceptions.c (catch_exceptions):
+	* dummy-frame.c (dummy_frame_this_id):
+	* defs.h (struct cleanup):
+	* breakpoint.c (disable_breakpoints_in_unloaded_shlib):
+	* arm-tdep.c (arm_push_dummy_call):
+	* amd64-tdep.h (amd64_collect_xsave):
+	* amd64-tdep.c (amd64_collect_xsave):
+	* alpha-tdep.c (alpha_heuristic_frame_unwind_cache):
+	* README (typing): Remove duplicate words.
+	* cli/cli-decode.c (lookup_cmd_composition): Add comma.
+	* infrun.c (siginfo_value_read): Fix typo.
+	* solib-frv.c (frv_fdpic_find_global_pointer): Likewise.
+	* top.c (source_line_number): Add comma.
+
+2011-04-19  Marc Khouzam  <marc.khouzam at ericsson.com>
+
+	* thread.c (any_live_thread_of_process): Prioritize threads
+	that are not executing.
+	* gdbthread.h (any_live_thread_of_process): Update comment
+	as per above change.
+
+2011-04-19  Andreas Schwab  <schwab at linux-m68k.org>
+
+	* xcoffread.c (process_xcoff_symbol): Remove useless cast.
+	(scan_xcoff_symtab): Likewise.
+
+2011-04-19  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	* xcoffread.c (process_xcoff_symbol): ARI fix: Avoid assignment
+	inside if clause.
+
+2011-04-19  Pierre Muller  <muller at ics.u-strasbg.fr>
+	    Pedro Alves  <pedro at codesourcery.com>
+
+	* xstormy16-tdep.c (xstormy16_push_dummy_call): Add local
+	variables to simplify code and avoid == operator at end of
+	line as this is against GNU coding standards.
+
+2011-04-19  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	* solib-svr4.c (svr4_keep_data_in_core): Rename local variable
+	lm_name to name_lm to avoid conflict with lm_name function.
+
+2011-04-19  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	ARI fixes: Use only lowercase function name for static functions.
+	* nto-tdep.c (LM_ADDR): Rename to...
+	(lm_addr): New function name.
+	(nto_relocate_section_addresses): Adapt to change above.
+	* solib-sunos.c (LM_ADDR): Rename to...
+	(lm_addr): New function name.
+	(LM_NEXT): Rename to...
+	(lm_next): New function name.
+	(sunos_current_sos, sunos_relocate_section_addresses): Adapt to
+	function name changes above.
+	* solib-svr4.c (LM_ADDR_FROM_LINK_MAP): Rename to...
+	(lm_addr_from_link_map): New function name.
+	(HAS_LM_DYNAMIC_FROM_LINK_MAP): Rename to...
+	(has_lm_dynamic_from_link_map): New function name.
+	(LM_DYNAMIC_FROM_LINK_MAP): Rename to...
+	(lm_dynamic_from_link_map): New function name.
+	(LM_ADDR_CHECK): Rename to...
+	(lm_addr_check): New function name.
+	(LM_NEXT): Rename to...
+	(lm_next): New function name.
+	(LM_PREV): Rename to...
+	(lm_prev): New function name.
+	(LM_NAME): Rename to...
+	(lm_name): New function name.
+	(IGNORE_FIRST_LINK_MAP_ENTRY): Rename to...
+	(ignore_first_link_map_entry): New function name.
+	(svr4_keep_data_in_core): Adapt to function name changes above.
+	(svr4_current_sos): Likewise.
+	(enable_break): Likewise.
+	(svr4_relocate_section_addresses): Likewise.
+
+2011-04-19  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	ARI cleanup.
+	* xtensa-tdep.c (xtensa_register_type): Use xstrprintf instead of
+	sprintf. Simplify code and avoid loosing memory.
+	(xtensa_register_reggroup_p): Extract assignment out of IF clause.
+	(call0_frame_cache): Remove && operator from end of line.
+
+2011-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix libraries displacement if they change whether they were prelinked.
+	* solib-svr4.c (LM_ADDR_CHECK): Set L_ADDR even if the DYNAMIC pointer
+	does not match.  Comment why.
+
+2011-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* corelow.c: Include wrapper.h.
+	(core_open): Call now gdb_target_find_new_threads.
+	* wrapper.c: Include target.h.
+	(gdb_target_find_new_threads): New.
+	* wrapper.h (gdb_target_find_new_threads): New declaration.
+
+2011-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* linux-thread-db.c (find_new_threads_callback): Exit on zero TI_TID
+	even if !TARGET_HAS_EXECUTION.
+
+2011-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix convert_code_addr_to_desc_addr for ppc64 files after eu-strip.
+	* elfread.c (elf_symfile_read): New variable synth_abfd, pass it to
+	bfd_get_synthetic_symtab.
+	* jit.c (jit_register_code): Pass NULL to the new parameter parent.
+	* machoread.c (macho_add_oso_symfile): Pass main_objfile to the new
+	parameter parent, remove the call to add_separate_debug_objfile.
+	* solib.c (solib_read_symbols): Pass NULL to the new parameter parent.
+	* symfile-mem.c (symbol_file_add_from_memory): Likewise.
+	* symfile.c (symbol_file_add_with_addrs_or_offsets): New parameter
+	parent, new comment for it, call add_separate_debug_objfile for it.
+	(symbol_file_add_separate): Pass objfile as the parameter parent,
+	remove the call to add_separate_debug_objfile.
+	(symbol_file_add_from_bfd): New parameter parent, pass it.
+	(symbol_file_add): Pass NULL to the new parameter parent.
+	* symfile.h (symbol_file_add_from_bfd): New parameter parent.
+
+2011-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* elfread.c (elf_symtab_read): Do not ignore .L symbols if they are
+	BSF_SYNTHETIC.
+
+2011-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix Python access to inlined frames.
+	* python/py-frame.c (frapy_read_var): Find BLOCK using get_frame_block.
+	* python/py-symbol.c (gdbpy_lookup_symbol): Likewise.
+
+2011-04-15  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2read.c (add_index_entry): Use VEC_last, not VEC_length.
+
+2011-04-15  Gary Benson  <gbenson at redhat.com>
+
+	* MAINTAINERS: Add myself to write-after-approval section.
+
+2011-04-14  Mike Frysinger  <vapier at gentoo.org>
+
+	* remote-sim.c (sim_command_completer): New function.
+	(_initialize_remote_sim): Set completer to sim_command_completer.
+
+2011-04-13  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* breakpoint.c (print_exception_catchpoint): Rename to ...
+	(print_it_exception_catchpoint): ... this.
+	(gnu_v3_exception_catchpoint_ops): Update with new name
+	for print_it_exception_catchpoint.
+
+2011-04-13  Edjunior Machado  <emachado at linux.vnet.ibm.com>
+
+	* MAINTAINERS: Add myself for write after approval privileges.
+
+2011-04-13  Marek Polacek  <mpolacek at redhat.com>
+
+	* MAINTAINERS: Add myself as a write-after-approval maintainer.
+
+2011-04-13  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* breakpoint.c (watch_command_1): Remove colon from exp_string.
+
+2011-04-13  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* breakpoint.c (save_breakpoints): Verify whether
+	breakpoint_ops.print_recreate is defined before calling it.
+
+2011-04-11  Gary Benson  <gbenson at redhat.com>
+
+	Fix failure with --enable-maintainer-mode.
+	* Makefile.in (aclocal_m4_deps): Updated gnulib dependencies.
+
+2011-04-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup.
+	* symtab.c (search_symbols): Reorder the KIND description in the
+	function comment.  Remove the unused 4th element of types, types2,
+	types3 and types4.  New gdb_assert on KIND.
+	(symtab_symbol_info): Remove the unused 4th element of classnames.
+	New gdb_assert on KIND.
+	* symtab.h (enum search_domain): New warning in the enum comment.
+	Assign numbers to the elements VARIABLES_DOMAIN, FUNCTIONS_DOMAIN and
+	TYPES_DOMAIN.
+
+2011-04-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix crash of gdb save-index on a STABS file.
+	* dwarf2read.c (write_psymtabs_to_index): Return also on no
+	PSYMTABS_ADDRMAP.
+
+2011-04-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix DW_AT_accessibility compatibility with gcc-4.6+.
+	* dwarf2read.c: Include ctype.h.
+	(producer_is_gxx_lt_4_6, dwarf2_default_access_attribute): New
+	functions.
+	(dwarf2_add_field): Fix new_field->accessibility by calling
+	dwarf2_default_access_attribute.  Restructure setting accessibility
+	vs. virtuality.
+	(dwarf2_add_member_fn): New variable accessibility.  Fix fnp
+	is_private and is_protected by calling
+	dwarf2_default_access_attribute.
+
+2011-04-08  Kevin Buettner  <kevinb at redhat.com>
+
+	* rx-tdep.c (rx_frame_unwind): Add default_frame_unwind_stop_reason
+	to the initialization.
+
+2011-04-08  Steve Ellcey  <sje at cup.hp.com>
+
+	* Add default_frame_unwind_stop_reason value to libunwind_frame_unwind
+	initalization.
+
+2011-04-07  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	Remove support for old Cygwin 1.5 versions.
+	* remote-fileio.c: Remove macros used to emulate new cygwin_conv_path
+	function on old Cygwin version.
+	* windows-nat.c: Remove cygwin version check and always define
+	__USEWIDE for Cygwin compilation.
+
+2011-04-07  Yao Qi  <yao at codesourcery.com>
+
+	* arm-linux-tdep.c (arm_linux_copy_svc): Remove parameters INSN
+	and TO.
+	* arm-tdep.c (cleanup_svc): Handle variable instruction size.
+	(arm_copy_svc): Remove parameters INSN and TO.
+	(decode_svc_copro): Update caller.
+	* arm-tdep.h (struct displaced_step_closure): Remove parameters
+	from function pointer `copy_svc_os'.
+
+2011-04-07  Yao Qi  <yao at codesourcery.com>
+
+	* arm-tdep.c (cleanup_branch): Set a correct return address in
+	LR for ARM and Thumb.
+
+2011-04-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup.
+	* dictionary.c (dict_hash): Use SYMBOL_HASH_NEXT.
+	* dwarf2read.c (mapped_index_string_hash): Refer to SYMBOL_HASH_NEXT
+	in the function comment, a new note on values compatibility.
+	* minsyms.c (msymbol_hash_iw, msymbol_hash): Use SYMBOL_HASH_NEXT.
+	* symtab.h (SYMBOL_HASH_NEXT): New.
+
+2011-04-06  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* ppc-linux-nat.c (check_condition): Add len output parameter.
+	Set it based on the memory region referenced in the condition
+	expression.  Update all callers.
+
+2011-04-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix crash regression on systems featuring .gdb_index.
+	* objfiles.c (free_objfile): Move the
+	forget_cached_source_info_for_objfile call earlier.  Comment it.
+	Extend the comment for objfile_free_data.
+
+2011-04-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix regression of displaying the debug format.
+	* buildsym.c (end_symtab): Set symtab's debugformat and producer from
+	subfile.
+
+2011-04-04  Tom Tromey  <tromey at redhat.com>
+
+	* cli/cli-interp.c (struct captured_execute_command_args):
+	Remove.
+	(do_captured_execute_command): Remove.
+	(safe_execute_command): Use TRY_CATCH.
+	* cli/cli-script.c (struct wrapped_read_command_file_args):
+	Remove.
+	(wrapped_read_command_file): Remove.
+	(script_from_file): Use TRY_CATCH.
+	* exceptions.c (catch_exception): Remove.
+	* exceptions.h (catch_exception): Remove.
+	(deprecated_throw_reason): Update comment.
+	* mi/mi-main.c (captured_mi_execute_command): Change 'data'
+	argument to 'context'.
+	(mi_execute_command): Use TRY_CATCH.
+	* remote.c (struct start_remote_args): Remove.
+	(remote_start_remote): Update; change arguments.
+	(remote_open_1): Use TRY_CATCH.
+
+2011-04-04  Tom Tromey  <tromey at redhat.com>
+
+	* tracepoint.c (scope_info): Update.
+	* symtab.c (decode_line_spec): Update.
+	* python/python.c (gdbpy_decode_line): Update.
+	* linespec.h (decode_line_1): Update.
+	* linespec.c (decode_line_1): Remove 'not_found_ptr' argument.
+	(decode_compound, find_method, symtab_from_filename)
+	(decode_variable): Likewise.
+	* cli/cli-cmds.c (edit_command): Update.
+	(list_command): Update.
+	* breakpoint.c (parse_breakpoint_sals): Remove 'not_found_ptr'
+	argument.
+	(create_breakpoint): Update.
+	(until_break_command): Update.
+	(addr_string_to_sals): Update.
+	(decode_line_spec_1): Update.
+
+2011-04-04  Tom Tromey  <tromey at redhat.com>
+
+	* breakpoint.c (struct captured_parse_breakpoint_args): Remove.
+	(do_captured_parse_breakpoint): Remove.
+	(create_breakpoint): `e' is now volatile.  Remove `parse_args'.
+	Use TRY_CATCH directly.
+
+2011-04-04  Tom Tromey  <tromey at redhat.com>
+
+	* symtab.h (free_symtab): Remove.
+	(forget_cached_source_info_for_objfile): Declare.
+	* symmisc.c (free_symtab): Remove.
+	* source.c (forget_cached_source_info_for_objfile): New function.
+	(forget_cached_source_info): Use it.
+	* objfiles.c (free_objfile): Simplify check before calling
+	clear_current_source_symtab_and_line.  Call
+	forget_cached_source_info_for_objfile.
+
+2011-04-04  Tom Tromey  <tromey at redhat.com>
+
+	* mdebugread.c (psymtab_to_symtab_1): Copy linetable to obstack.
+	(new_symtab): Don't set `free_code' on symtab.
+	(new_linetable): Properly handle size==0.
+	* symtab.h (struct symtab) <free_code, free_func>: Remove.
+	* symmisc.c (free_symtab): Don't free the linetable.  Don't call
+	free_func.
+	* jv-lang.c (struct jv_per_objfile_data): New.
+	(jv_per_objfile_free): Free the data.
+	(get_dynamics_objfile): Allocate a jv_per_objfile_data.
+	(get_java_class_symtab): Set the `dict' field on the
+	jv_per_objfile_data.
+	(free_class_block): Remove.
+	* buildsym.c (end_symtab): Don't set `free_code' or `free_func' on
+	the symtab.
+
+2011-04-04  Tom Tromey  <tromey at redhat.com>
+
+	* symfile.c (reread_symbols): Update.
+	* objfiles.h (struct objfile) <cp_namespace_symtab>: Remove
+	field.
+	* objfiles.c (allocate_objfile): Update.
+	* cp-support.h (cp_check_possible_namespace_symbols): Don't
+	declare.
+	* cp-namespace.c (lookup_symbol_file): Don't call
+	lookup_possible_namespace_symbol.
+	(initialize_namespace_symtab, get_possible_namespace_block)
+	(free_namespace_block, cp_check_possible_namespace_symbols)
+	(check_possible_namespace_symbols_loop)
+	(check_one_possible_namespace_symbol)
+	(lookup_possible_namespace_symbol): Remove.
+	(maintenance_cplus_namespace): Replace with notice.
+	(_initialize_cp_namespace): Deprecate `maint cplus namespace'.
+
+2011-04-04  Tom Tromey  <tromey at redhat.com>
+
+	* xcoffread.c (read_xcoff_symtab): Make `debugfmt' const.
+	* symtab.h (struct symtab) <producer, debugformat>: Now const.
+	* symmisc.c (free_symtab): Don't free debugformat.
+	* buildsym.h (struct subfile) <producer, debugformat>: Now const.
+	(record_debugformat, record_producer): Document.
+	* buildsym.c (end_symtab): Don't save debugformat and producer
+	names on obstack.
+	(end_symtab): Don't free debugformat and producer fields.
+	(record_debugformat): Don't call xstrdup.
+	(record_producer): Likewise.
+
+2011-04-04  Tom Tromey  <tromey at redhat.com>
+
+	* source.c (find_source_lines): Remove LSEEK_NOT_LINEAR code.
+	(source_line_charpos, source_charpos_line): Remove.
+
+2011-04-04  Tom Tromey  <tromey at redhat.com>
+
+	* symtab.h (domain_enum): Split in two...
+	(enum search_domain): New.
+	(search_symbols): Update.
+	* symtab.c (print_symbol_info, symtab_symbol_info): Remove
+	redundant declarations.
+	(search_symbols): Change 'kind' argument to search_domain.
+	Update.
+	(print_symbol_info): Likewise.
+	(symtab_symbol_info): Likewise.
+	* symfile.h (struct quick_symbol_functions)
+	<pre_expand_symtabs_matching>: Change type of 'kind' argument.
+	<expand_symtabs_matching>: Likewise.
+	* psymtab.c (pre_expand_symtabs_matching_psymtabs): Update.
+	(expand_symtabs_matching_via_partial): Update.
+	* dwarf2read.c (dw2_pre_expand_symtabs_matching): Update.
+	(dw2_expand_symtabs_for_function): Update.
+	* block.h: Moved anonymous enum...
+	* defs.h (enum block_enum): ... here.  Now named.
+
+2011-04-03  Joel Brobecker  <brobecker at adacore.com>
+
+	GDB 7.3 branch created (branch timestamp: 2011-04-01 01:00 UTC)
+	* version.in: Bump version to 7.3.50.20110403-cvs.
+
+2011-04-03  Joel Brobecker  <brobecker at adacore.com>
+
+	* NEWS: Create a new section for the next release branch.
+	Rename the section of the current branch, now that it has
+	been cut.
+
+2011-04-01  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* arm-tdep.c (arm_gdbarch_init): Enfore correct register number
+	for "fpscr" in target description.
+
+2011-04-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* dwarf2read.c (find_slot_in_mapped_hash): New variable back_to,
+	initialize it.  Delay HASH initialization.  Strip the part after open
+	parenthesis for languages with qualifiers.  Call do_cleanups.
+
+2011-04-01  Tom Tromey  <tromey at redhat.com>
+
+	* utils.c (report_command_stats): Don't print `-' for negative
+	number.
+
+2011-04-01  Eric Botcazou  <ebotcazou at adacore.com>
+
+	* ada-lang.c (ada_is_simple_array_type, ada_value_slice_from_ptr)
+	(ada_value_slice, empty_array, to_fixed_array_type): Deal with
+	typedefs.
+
+2011-04-01  Joel Brobecker  <brobecker at adacore.com>
+
+	* breakpoint.h (bpdisp_text): Add declaration.
+	* breakpoint.c (bpdisp_text): Make non-static.
+	* ada-lang.c: #include "mi/mi-common.h".
+	(print_it_exception): Rewrite to improve GDB/MI output.
+
+2011-04-01  Pedro Alves  <pedro at codesourcery.com>
+
+	* arm-tdep.h (struct address_space): Add forward declaration.
+
+2011-04-01  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* arm-tdep.h (arm_insert_single_step_breakpoint): Add prototype.
+	* arm-tdep.c (arm_override_mode): New global.
+	(arm_pc_is_thumb): Respect arm_override_mode.  Remove single-step
+	execution mode heuristics.
+	(thumb_get_next_pc_raw): Remove INSERT_BKTP argument; always insert
+	second single-step breakpoint if needed, using
+	arm_insert_single_step_breakpoint.
+	(arm_get_next_pc_raw): Remove INSERT_BKTP argument.  Only handle
+	ARM execution mode, do not call thumb_get_next_pc_raw.
+	(arm_get_next_pc): Encode execution mode in return value.  Call
+	either arm_get_next_pc_raw or thumb_get_next_pc_raw.
+	(arm_insert_single_step_breakpoint): New function.
+	(arm_software_single_step): Call it.
+	* arm-linux-tdep.c (arm_linux_sigreturn_return_addr): Add IS_THUMB
+	argument to return execution mode of sigreturn target.
+	(arm_linux_syscall_next_pc): Use it.
+	(arm_linux_copy_svc): Update call.
+	(arm_linux_software_single_step): Call
+	arm_insert_single_step_breakpoint.
+
+2011-03-31  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* dwarf2read.c (dwarf2_read_index): Fix .gdb_index version number in
+	the comment.
+
+2011-03-31  Tom Tromey  <tromey at redhat.com>
+
+	* varobj.c (update_dynamic_varobj_children): Properly handle
+	errors from iterator.
+
+2011-03-31  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* dwarf2read.c (dwarf2_name): Initialize DEMANGLED.  Avoid demangling
+	struct linkage name twice.
+
+2011-03-31  Tom Tromey  <tromey at redhat.com>
+
+	* python/py-prettyprint.c (print_stack_unless_memory_error): Add
+	missing ">" to message.
+
+2011-03-31  Tom Tromey  <tromey at redhat.com>
+
+	* varobj.c (instantiate_pretty_printer): Remove duplicate
+	'return'.
+
+2011-03-31  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* i386-tdep.c (i386_frame_prev_register): Unwind SP from memory
+	if neither saved value nor register available (e.g. signal frame).
+
+2011-03-31  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* macroexp.c (expand): Avoid uninitialized variable
+	compiler warning.
+
+2011-03-31  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* breakpoint.c (break_range_command): Fix typo in comment.
+
+2011-03-31  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+	    Sergio Durigan Junior  <sergiodj at linux.vnet.ibm.com>
+
+	Implement support for PowerPC BookE ranged breakpoints.
+	* NEWS: Mention support for ranged breakpoints on embedded PowerPC.
+	* breakpoint.h (struct bp_target_info) <length>: New member
+	variable.
+	(struct breakpoint_ops) <breakpoint_hit>: Take struct bp_location
+	instead of struct breakpoint as argument, and also add ASPACE
+	and BP_ADDR arguments.  Update all callers.
+	(struct breakpoint_ops) <print_one_detail>: New method.
+	(struct breakpoint) <addr_string_range_end>: New member variable.
+	* breakpoint.c (breakpoint_location_address_match): Add function
+	prototype.
+	(insert_bp_location): Set bl->target_info.length.
+	(breakpoint_here_p): Call breakpoint_location_address_match.
+	(moribund_breakpoint_here_p): Likewise.
+	(regular_breakpoint_inserted_here_p): Likewise.
+	(breakpoint_thread_match): Likewise.
+	(bpstat_stop_status): Likewise.
+	(bpstat_check_location): Move call to
+	breakpoint_ops.breakpoint_hit to the top.
+	(print_one_breakpoint_location): Call
+	breakpoint_ops.print_one_detail if available.
+	(breakpoint_address_match_range): New function.
+	(breakpoint_location_address_match): Likewise.
+	(breakpoint_locations_match): Compare the length field of the
+	locations too.
+	(hw_breakpoint_used_count): Count resources used by all locations
+	in a breakpoint, and use breakpoint_ops.resources_needed if
+	available.
+	(breakpoint_hit_ranged_breakpoint): New function.
+	(resources_needed_ranged_breakpoint): Likewise.
+	(print_it_ranged_breakpoint): Likewise.
+	(print_one_ranged_breakpoint): Likewise.
+	(print_one_detail_ranged_breakpoint): Likewise.
+	(print_mention_ranged_breakpoint): Likewise.
+	(print_recreate_ranged_breakpoint): Likewise.
+	(ranged_breakpoint_ops): New structure.
+	(find_breakpoint_range_end): New function.
+	(break_range_command): Likewise.
+	(delete_breakpoint): Free addr_string_range_end.
+	(update_breakpoint_locations): Add SALS_END argument.  Update
+	all callers.  Calculate breakpoint length if a non-zero SALS_END
+	is given.  Call breakpoint_locations_match instead of
+	breakpoint_address_match.
+	(reset_breakpoint): Find SaL of the end of the range if B is a
+	ranged breakpoint.
+	(_initialize_breakpoint): Register break-range command.
+	* defs.h (print_core_address): Add function prototype.
+	* ppc-linux-nat.c (ppc_linux_ranged_break_num_registers): New
+	function.
+	(ppc_linux_insert_hw_breakpoint): Support ranged breakpoints.
+	(ppc_linux_remove_hw_breakpoint): Likewise.
+	(_initialize_ppc_linux_nat): Initialize
+	to_ranged_break_num_registers.
+	* target.c (update_current_target): Add comment about
+	to_ranged_break_num_registers.
+	(target_ranged_break_num_registers): New function.
+	* target.h (struct target_ops) <to_ranged_break_num_registers>:
+	New method.
+	(target_ranged_break_num_registers): Add function prototype.
+	* ui-out.c (ui_out_field_core_addr): Move address-printing logic to ...
+	* utils.c (print_core_address): ... here.
+
+2011-03-31  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* breakpoint.c (addr_string_to_sals): Avoid uninitialized
+	variable compiler warning.
+
+2011-03-30  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* breakpoint.c (breakpoint_re_set_one): Factor out breakpoint-resetting
+	code from here ...
+	(re_set_breakpoint): ... to here ...
+	(addr_string_to_sals): ... and here.
+
+2011-03-29  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	* Makefile.in (SFILES): Add missing C sources.
+	(HFILES_NO_SRCDIR): Remove gdbserver subdirectory headers.
+	Add missing headers.
+
+2011-03-29  Mike Frysinger  <vapier at gentoo.org>
+
+	* .gitignore: New file.
+
+2011-03-29  Mike Frysinger  <vapier at gentoo.org>
+
+	* NEWS: Mention new cfi device simulation.
+
+2011-03-29  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2read.c (fixup_partial_die): Handle linkage name on
+	otherwise anonymous types.
+	(dwarf2_name): Likewise.
+	* valops.c (value_struct_elt_for_reference): Refine artificial
+	type logic.  Call error if j==-1.
+
+2011-03-29  Andreas Tobler  <andreast-list at fgznet.ch>
+
+	Fix false GCC warning.
+	* infcall.c (find_function_addr): Initialize funaddr.
+
+2011-03-29  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	Fix mingw compilation with --enable-targets=all.
+	* remote-mips.c (gdb_usleep.h): Include header.
+	(mips_enter_debug): Use gdb_usleep instead of sleep.
+
+2011-03-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Support resolution of STT_GNU_IFUNC via breakpoints.
+	* breakpoint.c (print_it_typical): Support bp_gnu_ifunc_resolver and
+	bp_gnu_ifunc_resolver_return.
+	(bpstat_what): Rename parameter to bs_head, new variable bs, adjust
+	the loop.  Support bp_gnu_ifunc_resolver and
+	bp_gnu_ifunc_resolver_return.  New comment after the loop.  New loop
+	for bp_gnu_ifunc_resolver and bp_gnu_ifunc_resolver_return
+	breakpoints.
+	(bptype_string, print_one_breakpoint_location): Support
+	bp_gnu_ifunc_resolver and bp_gnu_ifunc_resolver_return.
+	(user_settable_breakpoint): Return true also for
+	bp_gnu_ifunc_resolver.
+	(allocate_bp_location): Support bp_gnu_ifunc_resolver and
+	bp_gnu_ifunc_resolver_return.
+	(set_breakpoint_location_function): New parameter explicit_loc,
+	describe it.  Call find_pc_partial_function_gnu_ifunc with new
+	variable IS_GNU_IFUNC and adjust the address for STT_GNU_IFUNC if
+	EXPLICIT_LOC is not set.
+	(set_raw_breakpoint): Set EXPLICIT_LOC for
+	set_breakpoint_location_function.
+	(clone_momentary_breakpoint): Use true for EXPLICIT_LOC of
+	set_breakpoint_location_function.
+	(mention): Support bp_gnu_ifunc_resolver and
+	bp_gnu_ifunc_resolver_return.
+	(add_location_to_breakpoint): Set EXPLICIT_LOC for
+	set_breakpoint_location_function.
+	(update_breakpoint_locations): Remove static.
+	(breakpoint_re_set_one): Support bp_gnu_ifunc_resolver and
+	bp_gnu_ifunc_resolver_return.
+	* breakpoint.h (enum bptype): New fields bp_gnu_ifunc_resolver and
+	bp_gnu_ifunc_resolver_return.
+	(update_breakpoint_locations): New declaration.
+	* elfread.c: Include gdbthread.h and regcache.h.
+	(elf_gnu_ifunc_resolver_stop, elf_gnu_ifunc_resolver_return_stop): New
+	functions.
+	(elf_gnu_ifunc_fns): Install them.
+	* minsyms.c (stub_gnu_ifunc_resolver_stop)
+	(stub_gnu_ifunc_resolver_return_stop): New functions.
+	(stub_gnu_ifunc_fns): Install them.
+	* symtab.h (struct gnu_ifunc_fns): New fields gnu_ifunc_resolver_stop
+	and gnu_ifunc_resolver_return_stop.
+	(gnu_ifunc_resolver_stop, gnu_ifunc_resolver_return_stop): New.
+
+2011-03-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	STT_GNU_IFUNC reader implementation.
+	* elfread.c: Include gdbtypes.h, value.h and infcall.h.
+	(SYMBOL_GOT_PLT_SUFFIX, elf_rel_plt_read)
+	(elf_objfile_gnu_ifunc_cache_data, struct elf_gnu_ifunc_cache)
+	(elf_gnu_ifunc_cache_hash, elf_gnu_ifunc_cache_eq)
+	(elf_gnu_ifunc_record_cache, elf_gnu_ifunc_resolve_by_cache)
+	(elf_gnu_ifunc_resolve_by_got, elf_gnu_ifunc_resolve_name)
+	(elf_gnu_ifunc_resolve_addr): New.
+	(elf_symfile_read): Call elf_rel_plt_read.
+	(elf_gnu_ifunc_fns): New.
+	(_initialize_elfread): Initialize elf_objfile_gnu_ifunc_cache_data.
+	Install elf_gnu_ifunc_fns.
+	* infcall.c (find_function_return_type): New function.
+	(find_function_addr): Resolve TYPE_GNU_IFUNC functions, if possible.
+	* minsyms.c (stub_gnu_ifunc_resolve_addr)
+	(stub_gnu_ifunc_resolve_name): New functions.
+	(stub_gnu_ifunc_fns, gnu_ifunc_fns_p): New variables.
+	* symtab.h (struct gnu_ifunc_fns, gnu_ifunc_resolve_addr)
+	(gnu_ifunc_resolve_name, gnu_ifunc_fns_p): New.
+
+2011-03-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup for later STT_GNU_IFUNC support.
+	* infcall.c (find_function_addr): Remove variable code, use explicit
+	dereferences for it.  Move VALUE_TYPE initialization later.
+
+2011-03-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	GDB find_pc_partial_function support for STT_GNU_IFUNC.
+	* blockframe.c (cache_pc_function_is_gnu_ifunc): New variable.
+	(clear_pc_function_cache): Clear it.
+	(find_pc_partial_function): Rename to ...
+	(find_pc_partial_function_gnu_ifunc): ... this function.  New
+	parameter is_gnu_ifunc_p, describe it.  Set *IS_GNU_IFUNC_P.
+	(find_pc_partial_function): New wrapper for this function.
+	* symtab.h (find_pc_partial_function_gnu_ifunc): New declaration.
+
+2011-03-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	GDB internal type support for STT_GNU_IFUNC.
+	* elfread.c (record_minimal_symbol): Support mst_text_gnu_ifunc.
+	(elf_symtab_read): Set mst_text_gnu_ifunc for
+	BSF_GNU_INDIRECT_FUNCTION.
+	* eval.c (evaluate_subexp_standard): Support TYPE_GNU_IFUNC.
+	* gdbtypes.c (init_type): Support TYPE_FLAG_GNU_IFUNC,
+	builtin_func_func, nodebug_text_gnu_ifunc_symbol and
+	nodebug_got_plt_symbol.
+	* gdbtypes.h (enum type_flag_value): New entry TYPE_FLAG_GNU_IFUNC.
+	(TYPE_GNU_IFUNC): New.
+	(struct main_type): New field flag_gnu_ifunc.
+	(struct builtin_type): New field builtin_func_func.
+	(struct objfile_type): New fields nodebug_text_gnu_ifunc_symbol and
+	nodebug_got_plt_symbol.
+	* minsyms.c (lookup_minimal_symbol_text): Support mst_text_gnu_ifunc.
+	(in_gnu_ifunc_stub): New.
+	(prim_record_minimal_symbol, find_solib_trampoline_target): Support
+	mst_text_gnu_ifunc.
+	* parse.c (write_exp_msymbol): New variable ifunc_msym.  Detect and
+	support mst_text_gnu_ifunc.  Support mst_slot_got_plt.
+	* solib-svr4.c (svr4_in_dynsym_resolve_code): Return true also for
+	in_gnu_ifunc_stub.
+	* symmisc.c (dump_msymbols): Support mst_text_gnu_ifunc.
+	* symtab.c (search_symbols): Likewise.
+	* symtab.h (enum minimal_symbol_type): New fields mst_text_gnu_ifunc
+	and mst_slot_got_plt.
+	(in_gnu_ifunc_stub): New declaration.
+
+2011-03-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Support a ring of related breakpoints.
+	* breakpoint.c (watchpoint_del_at_next_stop): New, move here code from
+	other functions, add gdb_assert.
+	(update_watchpoint, watchpoint_check): Add gdb_assert.  Use
+	watchpoint_del_at_next_stop.
+	(bpstat_check_watchpoint): Use watchpoint_del_at_next_stop.
+	(bpstat_stop_status): Handle ring in related_breakpoint.
+	(set_raw_breakpoint_without_location): Initialize ring in
+	related_breakpoint.
+	(delete_breakpoint): Handle ring in related_breakpoint, use
+	watchpoint_del_at_next_stop.
+	(map_breakpoint_numbers): Handle ring in related_breakpoint.
+
+2011-03-28  Tom Tromey  <tromey at redhat.com>
+
+	PR symtab/12441:
+	* dwarf2read.c (prepare_one_comp_unit): Don't call set_cu_language
+	with `language_minimal'.
+
+2011-03-25  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* arm-tdep.c (arm_elf_make_msymbol_special): Use ARM_SYM_BRANCH_TYPE
+	instead of checking for STT_ARM_TFUNC symbol type.
+
+2011-03-25  Tom Tromey  <tromey at redhat.com>
+
+	* linespec.c (symbol_found): Restore line-based result for
+	non-LOC_LABEL symbols.
+
+2011-03-25  Kai Tietz  <ktietz at redhat.com>
+
+	* tui/tui-source.c (tui_set_source_content): Use filename_cmp
+	instead of strcmp for comparison.
+	(tui_source_is_displayed): Likewise.
+	* tui/tui-winsource.c (tui_update_breakpoint_info): Likewise.
+
+2011-03-24  Mark Wielaard  <mjw at redhat.com>
+
+	* dwarf2read.c (lookup_signatured_type): Use DW_FORM_ref_sig8 in
+	complaint.
+	(skip_one_die): Use DW_FORM_ref_sig8, not DW_FORM_sig8.
+	(find_partial_die_in_comp_unit): Likewise in comment.
+	(read_attribute_value): Likewise.
+	(lookup_die_type): Likewise.
+	(dwarf_form_name): Likewise.
+	(dump_die_shallow): Likewise.
+	(follow_die_ref_or_sig): Likewise.
+
+2011-03-24  Tom Tromey  <tromey at redhat.com>
+
+	PR breakpoints/11816:
+	* linespec.c (decode_line_1): Parse `function:label' linespecs.
+	(decode_compound): Update.
+	(find_function_symbol): New function.
+	(decode_dollar): Update.
+	(decode_label): Add 'function_symbol' parameter.  Handle
+	function-relative labels.
+	(decode_variable): Update.
+	(symbol_found): Add 'function_symbol' parameter.  Use label's PC,
+	not its line.  Set `special_display' and canonical name for
+	labels.
+
+2011-03-24  Tom Tromey  <tromey at redhat.com>
+
+	* linespec.h (struct linespec_result) <special_display>: New
+	field.
+	* breakpoint.h (struct breakpoint) <display_canonical>: New
+	field.
+	* breakpoint.c (print_breakpoint_location): Respect
+	display_canonical.
+	(create_breakpoint_sal): Add 'display_canonical' parameter.
+	(create_breakpoints_sal): Update.
+	(create_breakpoint): Update.
+
+2011-03-24  Tom Tromey  <tromey at redhat.com>
+
+	* symtab.c (decode_line_spec): Update.
+	* linespec.c (build_canonical_line_spec): Change type of
+	'canonical'.
+	(decode_line_2, decode_line_1, decode_objc, decode_compound)
+	(find_method, decode_all_digits, decode_dollar, decode_label)
+	(symbol_found): Likewise.
+	(init_linespec_result): New function.
+	* breakpoint.c (struct captured_parse_breakpoint_args)
+	<canonical_p>: New field, replaces addr_string_p.
+	(create_breakpoints_sal): Add 'canonical' parameter, replacing
+	'addr_string'.
+	(parse_breakpoint_sals): Likewise.
+	(do_captured_parse_breakpoint): Update.
+	(create_breakpoint): Use struct linespec_result.
+	(until_break_command): Update.
+	(breakpoint_re_set_one): Update.
+	(decode_line_spec_1): Update.
+	* linespec.h (struct linespec_result): New.
+	(init_linespec_result): Declare.
+
+2011-03-23  Pedro Alves  <pedro at codesourcery.com>
+
+	* regcache.c (regcache_raw_read): If the target didn't supply a
+	given raw register, mark it as unavailable.
+
+2011-03-23  Kai Tietz  <ktietz at redhat.com>
+
+	* breakpoint.c (clear_command): Use filename_cmp
+	instead of strcmp for comparison.
+	* buildsym.c (watch_main_source_file_lossage): Likewise.
+	(patch_subfile_names): Use IS_DIR_SEPARATOR instead of
+	checking just for slash.
+	* dbxread.c (read_dbx_symtab): Use lbasename instead of
+	strrchr and filename_cmp instead of strcmp for filenames.
+	(add_old_header_file): Use filename_cmp
+	instead of strcmp for comparison.
+	* exec.c (exec_set_section_address): Likewise.
+	* macrotab.c (macro_lookup_inclusion): Likewise.
+	(macro_lookup_inclusion): Likewise.
+	* elfread.c (_initialize_elfread): Likewise.
+	(elfstab_offset_sections): Likewise.
+	(elfstab_offset_sections): Use lbasename instead of
+	strrchr.
+	* mdebugread.c (parse_partial_symbols): Likewise.
+	(arse_partial_symbols): Use filename_(n)cmp instead of
+	str(n)cmp for comparison.
+	* minsyms.c (lookup_minimal_symbol): Likewise.
+	* psymtab.c (read_psymtabs_with_filename): Likewise.
+	* solib.c (solib_read_symbols): Likewise.
+	(reload_shared_libraries_1): Likewise.
+	* symmisc.c (maintenance_print_symbols): Likewise.
+	* symfile.c (separate_debug_file_exists): Likewise.
+	(reread_symbols): Likewise.
+	(find_separate_debug_file_by_debuglink): Likewise.
+	* remote-fileio.c (remote_fileio_func_rename): Likewise.
+	* source.c (add_path): Likewise.
+	* symtab.c (filename_seen): Likewise.
+	(file_matches): Likewise.
+	(print_symbol_info): Likewise.
+	(maybe_add_partial_symtab_filename): Likewise.
+	(make_source_files_completion_list): Likewise.
+	* xml-syscall.c (init_sysinfo): Likewise.
+	* windows-nat.c (_initialize_check_for_gdb_ini): Use
+	IS_DIR_SEPARATOR for checking for trailing path separator.
+
+2011-03-22  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* dwarf2expr.c (execute_stack_op): Handle DW_OP_GNU_entry_value.  New
+	label abort_expression.
+	* dwarf2loc.c (dwarf2_evaluate_loc_desc_full): Handle
+	DWARF_VALUE_OPTIMIZED_OUT.
+
+2011-03-22  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup.
+	* c-typeprint.c (c_type_print_args): Change parameter show_artificial
+	to linkage_name.  Invert its value.  Update the function comment.
+	(c_type_print_varspec_suffix): Invert it at the caller.
+	* dwarf2read.c (dwarf2_compute_name): Invert it at the caller.
+
+2011-03-22  Pedro Alves  <pedro at codesourcery.com>
+
+	* infcmd.c (post_create_inferior): Ignore NOT_AVAILABLE_ERROR
+	errors when reading the `stop_pc'.
+	* printcmd.c (pc_prefix): Use get_frame_pc_if_available instead of
+	get_frame_pc.
+
+2011-03-22  Phil Muldoon  <pmuldoon at redhat.com>
+
+	* NEWS: Document gdb.Write stream keyword.
+
+2011-03-22  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Revert:
+	2011-03-21  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	* dwarf2read.c (producer_is_gxx_lt_4_6): New function.
+	(dwarf2_add_field): Fix new_field->accessibility for
+	cu->header.version >= 3 while verifying also producer_is_gxx_lt_4_6.
+
+2011-03-22  Phil Muldoon  <pmuldoon at redhat.com>
+
+	PR python/12183
+
+	* python/py-function.c (fnpy_call): Treat GdbErrors differently to
+	other error classes.  Do not print stack trace.
+
+2011-03-21  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* dwarf2read.c (producer_is_gxx_lt_4_6): New function.
+	(dwarf2_add_field): Fix new_field->accessibility for
+	cu->header.version >= 3 while verifying also producer_is_gxx_lt_4_6.
+
+2011-03-21  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* arm-tdep.c (arm_analyze_prologue): Do not abort parsing when
+	encountering a load via a non-SP register.
+
+2011-03-21  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* tramp-frame.c (tramp_frame_prepend_unwinder): Set stop_reason
+	field in returned unwinder.
+
+2012-03-21  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* ada-lang.c (replace_operator_with_call): Copy also GDBARCH.
+
+2012-03-21  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-lang.c (replace_operator_with_call): Use xzalloc instead
+	of xmalloc.
+
+2012-03-18  Pedro Alves  <pedro at codesourcery.com>
+
+	* frame.c (frame_unwind_register): Throw an error if unwinding the
+	register failed.
+	* get_prev_frame_1 (get_prev_frame_1): Ask the unwinder if there's
+	an unwind stop reason.
+	(frame_stop_reason_string): Handle UNWIND_UNAVAILABLE.
+	* frame.h (enum unwind_stop_reason) <UNWIND_OUTERMOST,
+	UNWIND_UNAVAILABLE>: New.
+	* inline-frame.c (inline_frame_unwind): Install
+	default_frame_unwind_stop_reason.
+	* frame-unwind.c: Include "exceptions.h".
+	(frame_unwind_find_by_frame): Swallow NOT_AVAILABLE_ERROR errors.
+	(default_frame_unwind_stop_reason): New.
+	* frame-unwind.h (frame_unwind_stop_reason_ftype): New typedef.
+	(default_frame_unwind_stop_reason): Declare.
+	(struct frame_unwind) <stop_reason>: New function pointer.
+
+	* dummy-frame.c: Install default_frame_unwind_stop_reason.
+	* dwarf2-frame.c: Include exceptions.h.
+	(struct dwarf2_frame_cache) <unavailable_retaddr>: New field.
+	(dwarf2_frame_cache): Swallow NOT_AVAILABLE_ERROR errors when
+	computing the CFA.  If such an error was thrown, set
+	unavailable_retaddr.
+	(dwarf2_frame_unwind_stop_reason): New.
+	(dwarf2_frame_this_id): Don't build a frame id if the CFA was
+	unavailable.
+	(dwarf2_frame_unwind): Install dwarf2_frame_unwind_stop_reason.
+	(dwarf2_signal_frame_unwind): Ditto.
+
+	* amd64-tdep.c: Include "exceptions.h".
+	(struct amd64_frame_cache): New field "base_p".
+	(amd64_init_frame_cache): Clear it.
+	(amd64_frame_cache_1): New, factored out from amd64_frame_cache.
+	Avoid reading registers with functions that throw if the register
+	is not necessary to compute the frame base.
+	(amd64_frame_cache): Reimplement wrapping amd64_frame_cache_1, and
+	swallowing NOT_AVAILABLE_ERROR.
+	(amd64_frame_unwind_stop_reason): New.
+	(amd64_frame_this_id): Don't build a frame id if the frame base
+	was unavailable.
+	(amd64_frame_unwind): Install amd64_frame_unwind_stop_reason.
+	(amd64_sigtramp_frame_cache): Swallow NOT_AVAILABLE_ERROR, and set
+	base_p if the frame base was computable.
+	(amd64_sigtramp_frame_unwind_stop_reason): New.
+	(amd64_sigtramp_frame_this_id): Don't build a frame id if the
+	frame base was unavailable.
+	(amd64_sigtramp_frame_unwind): Install
+	amd64_sigtramp_frame_unwind_stop_reason.
+	(amd64_epilogue_frame_cache): Swallow NOT_AVAILABLE_ERROR, and set
+	base_p if the frame base was computable.
+	(amd64_epilogue_frame_unwind_stop_reason): New.
+	(amd64_epilogue_frame_this_id): Don't build a frame id if the
+	frame base was unavailable.
+	(amd64_epilogue_frame_unwind): Install
+	amd64_epilogue_frame_unwind_stop_reason.
+	* i386-tdep.c: Include "exceptions.h".
+	(struct i386_frame_cache): New field "base_p".
+	(i386_init_frame_cache): Clear it.
+	(i386_frame_cache_1): New, factored out from amd64_frame_cache.
+	Avoid reading registers with functions that throw if the register
+	is not necessary to compute the frame base.
+	(i386_frame_cache): Reimplement wrapping amd64_frame_cache_1, and
+	swallowing NOT_AVAILABLE_ERROR.
+	(i386_frame_unwind_stop_reason): New.
+	(i386_frame_this_id): Don't build a frame id if the frame base was
+	unavailable.
+	(i386_frame_prev_register): Handle unavailable SP.
+	(i386_frame_unwind): Install i386_frame_unwind_stop_reason.
+	(i386_epilogue_frame_cache): Swallow NOT_AVAILABLE_ERROR, and set
+	base_p if the frame base was computable.
+	(i386_epilogue_frame_unwind_stop_reason): New.
+	(i386_epilogue_frame_this_id): Don't build a frame id if the frame
+	base was unavailable.
+	(i386_epilogue_frame_unwind): Install
+	i386_epilogue_frame_unwind_stop_reason.
+	(i386_sigtramp_frame_cache): Swallow NOT_AVAILABLE_ERROR, and set
+	base_p if the frame base was computable.
+	(i386_sigtramp_frame_unwind_stop_reason): New.
+	(i386_sigtramp_frame_this_id): Don't build a frame id if the frame
+	base was unavailable.
+	(i386_sigtramp_frame_unwind): Install
+	i386_sigtramp_frame_unwind_stop_reason.
+	* sentinel-frame.c (sentinel_frame_prev_register): Use the value
+	type's size, not the register's.
+	(sentinel_frame_unwind): Install default_frame_unwind_stop_reason.
+
+	* alpha-mdebug-tdep.c (alpha_mdebug_frame_unwind): Install
+	default_frame_unwind_stop_reason.
+	* alpha-tdep.c (alpha_sigtramp_frame_unwind)
+	(alpha_heuristic_frame_unwind): Ditto.
+	* amd64obsd-tdep.c (amd64obsd_trapframe_unwind): Ditto.
+	* arm-tdep.c (arm_prologue_unwind, arm_stub_unwind): Ditto.
+	* avr-tdep.c (avr_frame_unwind): Ditto.
+	* cris-tdep.c (cris_sigtramp_frame_unwind, cris_frame_unwind):
+	Ditto.
+	* frv-linux-tdep.c (frv_linux_sigtramp_frame_unwind): Ditto.
+	* frv-tdep.c (frv_frame_unwind): Ditto.
+	* h8300-tdep.c (h8300_frame_unwind): Ditto.
+	* hppa-hpux-tdep.c (hppa_hpux_sigtramp_frame_unwind): Ditto.
+	* hppa-linux-tdep.c (hppa_linux_sigtramp_frame_unwind): Ditto.
+	* hppa-tdep.c (hppa_frame_unwind, hppa_fallback_frame_unwind)
+	(hppa_stub_frame_unwind): Ditto.
+	* i386obsd-tdep.c (i386obsd_trapframe_unwind): Ditto.
+	* ia64-tdep.c (ia64_frame_unwind, ia64_sigtramp_frame_unwind)
+	(ia64_libunwind_frame_unwind)
+	(ia64_libunwind_sigtramp_frame_unwind): Ditto.
+	* iq2000-tdep.c (iq2000_frame_unwind): Ditto.
+	* lm32-tdep.c (lm32_frame_unwind): Ditto.
+	* m32c-tdep.c (m32c_unwind): Ditto.
+	* m32r-linux-tdep.c (m32r_linux_sigtramp_frame_unwind): Ditto.
+	* m32r-tdep.c (m32r_frame_unwind): Ditto.
+	* m68hc11-tdep.c (m68hc11_frame_unwind): Ditto.
+	* m68k-tdep.c (m68k_frame_unwind): Ditto.
+	* m68klinux-tdep.c (m68k_linux_sigtramp_frame_unwind): Ditto.
+	* m88k-tdep.c (m88k_frame_unwind): Ditto.
+	* mep-tdep.c (mep_frame_unwind): Ditto.
+	* microblaze-tdep.c (microblaze_frame_unwind): Ditto.
+	* mips-tdep.c (mips_insn16_frame_unwind, mips_insn32_frame_unwind)
+	(mips_stub_frame_unwind): Ditto.
+	* mn10300-tdep.c (mn10300_frame_unwind): Ditto.
+	* moxie-tdep.c (moxie_frame_unwind): Ditto.
+	* mt-tdep.c (mt_frame_unwind): Ditto.
+	* ppc-linux-tdep.c (ppu2spu_unwind): Ditto.
+	* ppcobsd-tdep.c (ppcobsd_sigtramp_frame_unwind): Ditto.
+	* rs6000-tdep.c (rs6000_frame_unwind): Ditto.
+	* s390-tdep.c (s390_frame_unwind, s390_stub_frame_unwind)
+	(s390_sigtramp_frame_unwind): Ditto.
+	* score-tdep.c (score_prologue_unwind): Ditto.
+	* sh-tdep.c (sh_frame_unwind): Ditto.
+	* sh64-tdep.c (sh64_frame_unwind): Ditto.
+	* sparc-sol2-tdep.c (sparc32_sol2_sigtramp_frame_unwind): Ditto.
+	* sparc-tdep.c (sparc32_frame_unwind): Ditto.
+	* sparc64-sol2-tdep.c (sparc64_sol2_sigtramp_frame_unwind): Ditto.
+	* sparc64-tdep.c (sparc64_frame_unwind): Ditto.
+	* sparc64fbsd-tdep.c (sparc64fbsd_sigtramp_frame_unwind): Ditto.
+	* sparc64nbsd-tdep.c (sparc64nbsd_sigcontext_frame_unwind): Ditto.
+	* sparc64obsd-tdep.c (sparc64obsd_frame_unwind)
+	(sparc64obsd_trapframe_unwind): Ditto.
+	* sparcnbsd-tdep.c (sparc32nbsd_sigcontext_frame_unwind): Ditto.
+	* sparcobsd-tdep.c (sparc32obsd_sigtramp_frame_unwind): Ditto.
+	* spu-tdep.c (spu_frame_unwind, spu2ppu_unwind): Ditto.
+	* v850-tdep.c (v850_frame_unwind): Ditto.
+	* vax-tdep.c (vax_frame_unwind): Ditto.
+	* vaxobsd-tdep.c (vaxobsd_sigtramp_frame_unwind): Ditto.
+	* xstormy16-tdep.c (frame_unwind xstormy16_frame_unwind): Ditto.
+	* xtensa-tdep.c (xtensa_unwind): Ditto.
+
+2011-03-18  Pedro Alves  <pedro at codesourcery.com>
+
+	* tui/tui-hooks.c (tui_selected_frame_level_changed_hook): Assume
+	there's always a frame.  Use get_frame_pc_if_available instead of
+	get_frame_pc, and if there's no PC available, don't look up a
+	symtab.
+
+2011-03-18  Pedro Alves  <pedro at codesourcery.com>
+
+	* stack.c (print_frame_local_vars, print_frame_arg_vars): Handle
+	unavailable PC.
+
+2011-03-18  Pedro Alves  <pedro at codesourcery.com>
+
+	* tracepoint.c (set_traceframe_context): Handle unavailable PC
+	gracefully.
+
+2011-03-18  Pedro Alves  <pedro at codesourcery.com>
+
+	* frame.h (frame_unwind_caller_pc_if_available): Declare.
+	* frame.c (frame_unwind_caller_pc_if_available): New.
+	* stack.c (frame_info): Handle unavailable PC.
+
+2011-03-18  Pedro Alves  <pedro at codesourcery.com>
+
+	* frame.c (frame_unwind_pc): Rename to ...
+	(frame_unwind_pc_if_available): ... this.  New `pc' output
+	parameter.  Change return type to int.  Gracefully handle
+	gdbarch_unwind_pc throwing NOT_AVAILABLE_ERROR.  Return 0 if that
+	happened, or 1 otherwise.
+	(frame_unwind_pc): Reimplement on top of
+	frame_unwind_pc_if_available.
+	(get_frame_func): Rename to ...
+	(get_frame_func_if_available): New `pc' output parameter.  Change
+	return type to int.  Gracefully handle the PC not being available.
+	(get_frame_func): Reimplement on top of
+	get_frame_func_if_available.
+	(select_frame): Handle the PC being unavailable.
+	(get_prev_frame): Handle the PC being unavailable.
+	(get_frame_pc_if_available): New.
+	(get_frame_address_in_block_if_available): New.
+	(find_frame_sal): Handle the frame PC not being available.
+	* frame.h (get_frame_pc_if_available): Declare.
+	(get_frame_address_in_block_if_available): Declare.
+	(get_frame_func_if_available): Declare.
+	* stack.c (print_frame_info): Handle the PC being unavailable.
+	(find_frame_funname): Ditto.
+	(print_frame): Handle the PC being unavailable.
+	(get_frame_language): Ditto.
+	* blockframe.c (get_frame_block): Ditto.
+	* macroscope.c (default_macro_scope): Ditto.
+	* tui/tui-stack.c (tui_show_frame_info): Ditto.
+
+2011-03-18  Pedro Alves  <pedro at codesourcery.com>
+
+	* dwarf2loc.c (dwarf2_evaluate_loc_desc): Catch
+	NOT_AVAILABLE_ERROR when evaluating the location expression.
+
+2011-03-18  Pedro Alves  <pedro at codesourcery.com>
+
+	* dwarf2loc.c (read_pieced_value): Handle get_frame_register_bytes
+	returning that the register piece is unavailable/optimized out.
+	(write_pieced_value): Handle get_frame_register_bytes returning
+	that the register piece is unavailable/optimized out when doing a
+	read-modify write of a bitfield.
+	* findvar.c (value_from_register): Handle get_frame_register_bytes
+	returning that the register piece is unavailable/optimized out.
+	* frame.c (get_frame_register_bytes): New parameters `optimizedp'
+	and `unavailablep'.  Throw error on bad debug info.  Use
+	frame_register instead of frame_register_read, to fill in the new
+	arguments.
+	* frame.h (get_frame_register_bytes): New parameters `optimizedp'
+	and `unavailablep'.
+	* valops.c: (value_assign): Adjust, and handle
+	get_frame_register_bytes failing.
+	* spu-tdep.c: Include exceptions.h.
+	(spu_software_single_step): Adjust, and handle
+	get_frame_register_bytes failing.
+	(spu_get_longjmp_target): Ditto.
+	* gdbarch.sh (register_to_value): Change to return int.  New
+	parameters `optimizedp' and `unavailablep'.
+	* gdbarch.h, gdbarch.c: Regenerate.
+	* i386-tdep.c (i386_register_to_value): Adjust to new
+	gdbarch_register_to_value interface.
+	* i387-tdep.c (i387_register_to_value): Ditto.
+	* i387-tdep.h (i387_register_to_value): Ditto.
+	* alpha-tdep.c (alpha_register_to_value): Ditto.
+	* ia64-tdep.c (ia64_register_to_value): Ditto.
+	* m68k-tdep.c (m68k_register_to_value): Ditto.
+	* mips-tdep.c (mips_register_to_value): Ditto.
+	* rs6000-tdep.c (rs6000_register_to_value): Ditto.
+
+2011-03-18  Pedro Alves  <pedro at codesourcery.com>
+
+	* findvar.c (value_of_register): Mark the value as unavailable, if
+	the register is unavailable.
+	* frame.h (frame_register_unwind): New `unavailablep' parameter.
+	(frame_register): New `unavailablep' parameter.
+	(frame_register_read): Update comment.
+	* frame.c (frame_register_unwind): New `unavailablep' parameter.
+	Set it if the register is unavailable.  If the register is
+	unavailable, clear the output buffer.
+	(frame_register): New `unavailablep' parameter.  Pass it down.
+	(frame_unwind_register): Adjust.
+	(put_frame_register): Adjust.
+	(frame_register_read): Adjust.  Also return false if the register
+	is not available.
+	(frame_register_unwind_location): Adjust.
+	* sentinel-frame.c (sentinel_frame_prev_register): If the register
+	is unavailable, mark the value accordingly.
+	* stack.c (frame_info): Handle unavailable registers.
+
+2011-03-18  Pedro Alves  <pedro at codesourcery.com>
+
+	* mi/mi-main.c (register_changed_p): Handle REG_UNAVAILABLE, and
+	simplify, using regcache_cooked_read.
+
+2011-03-18  Pedro Alves  <pedro at codesourcery.com>
+
+	* regcache.h (regcache_raw_read, regcache_raw_read_signed)
+	(regcache_raw_read_unsigned, regcache_raw_read_signed)
+	(regcache_raw_read_unsigned, regcache_raw_read_part)
+	(regcache_cooked_read, regcache_cooked_read_signed)
+	(regcache_cooked_read_unsigned, regcache_cooked_read_part)
+	(regcache_cooked_read_ftype): Change return to enum
+	register_status.
+	* regcache.c: Include exceptions.h
+	(regcache_save): Adjust to handle REG_UNAVAILABLE registers.
+	(do_cooked_read): Change return to enum register_status.  Always
+	forward to regcache_cooked_read.
+	(regcache_raw_read): Change return to enum register_status.  If
+	the register is not REG_VALID, memset the buffer.  Return the
+	register's status.
+	(regcache_raw_read_signed): Handle non-REG_VALID registers and
+	return the register's status.
+	(regcache_raw_read_unsigned): Ditto.
+	(regcache_cooked_read): Change return to enum register_status.
+	Assert that with read-only regcaches, the register's status must
+	be known.  If the regcache is read-only, and the register is not
+	REG_VALID, memset the buffer.  Return the register's status.
+	(regcache_cooked_read_signed): Change return to enum
+	register_status.  Handle non-REG_VALID registers and return the
+	register's status.
+	(regcache_cooked_read_unsigned): Change return to enum
+	register_status.  Handle non-REG_VALID registers and return the
+	register's status.
+	(regcache_xfer_part, regcache_raw_read_part)
+	(regcache_cooked_read_part): Change return to enum
+	register_status.  Return the register's status.
+	(regcache_read_pc): Throw NOT_AVAILABLE_ERROR if the register is
+	unavailable.
+	(regcache_dump): Handle unavailable cooked registers.
+	* frame.c (do_frame_register_read): Adjust interface to match
+	regcache_cooked_read_ftype.
+	* gdbarch.sh (pseudo_register_read): Change return to enum
+	register_status.
+	* gdbarch.h, gdbarch.c: Regenerate.
+
+	* i386-tdep.h (i386_pseudo_register_read): Change return to enum
+	register_status.
+	* i386-tdep.c (i386_pseudo_register_read): Change return to enum
+	register_status.  If reading a raw register indicates the raw
+	register is not valid, return the raw register's status,
+	otherwise, return REG_VALID.
+	* amd64-tdep.c (amd64_pseudo_register_read): Change return to enum
+	register_status.  Handle non-REG_VALID raw registers and return
+	the register's status.
+	* arm-tdep.c (arm_neon_quad_read)
+	(arm_pseudo_read): Change return to enum register_status.  Handle
+	non-REG_VALID raw registers and return the register's status.
+	* avr-tdep.c (avr_pseudo_register_read): Ditto.
+	* frv-tdep.c (frv_pseudo_register_read): Ditto.
+	* h8300-tdep.c (h8300_pseudo_register_read): Ditto.
+	* hppa-tdep.c (hppa_pseudo_register_read): Ditto.
+	* m32c-tdep.c (m32c_move_reg_t): Change return to enum
+	register_status.
+	(m32c_raw_read, m32c_raw_write, m32c_banked_read)
+	(m32c_banked_write, m32c_sb_read, m32c_sb_write, m32c_part_read)
+	(m32c_part_write, m32c_cat_read, m32c_cat_write)
+	(m32c_r3r2r1r0_read, m32c_r3r2r1r0_write)
+	(m32c_pseudo_register_read): Change return to enum
+	register_status.  Adjust.
+	* m68hc11-tdep.c (m68hc11_pseudo_register_read): Change return to
+	enum register_status.  Return the register's status.
+	* mep-tdep.c (mep_pseudo_cr32_read): Change return to enum
+	register_status.  Return the register's status.
+	(mep_pseudo_cr64_read, mep_pseudo_register_read): Ditto.
+	* mips-tdep.c (mips_pseudo_register_read): Ditto.
+	* mt-tdep.c (mt_pseudo_register_read): Ditto.
+	* rs6000-tdep.c (move_ev_register_func): New typedef.
+	(e500_move_ev_register): Use it.  Change return to enum
+	register_status.  Return the register's status.
+	(do_regcache_raw_read): New function.
+	(do_regcache_raw_write): New function.
+	(e500_pseudo_register_read): Change return to enum
+	register_status.  Return the register's status.  Use
+	do_regcache_raw_read.
+	(e500_pseudo_register_write): Adjust.  Use do_regcache_raw_write.
+	(dfp_pseudo_register_read): Change return to enum register_status.
+	Return the register's status.
+	(vsx_pseudo_register_read): Ditto.
+	(efpr_pseudo_register_read): Ditto.
+	(rs6000_pseudo_register_read): Ditto.
+	* s390-tdep.c (s390_pseudo_register_read): Change return to enum
+	register_status.  Return the register's status.
+	* sh64-tdep.c (pseudo_register_read_portions): New function.
+	(sh64_pseudo_register_read): Change return to enum
+	register_status.  Use pseudo_register_read_portions.  Return the
+	register's status.
+	* ia64-tdep.c (ia64_pseudo_register_read): Change return to enum
+	register_status.  Return the register's status.
+	* sh-tdep.c (pseudo_register_read_portions): New function.
+	(sh_pseudo_register_read): Change return to enum register_status.
+	Use pseudo_register_read_portions.  Return the register's status.
+	* sparc-tdep.c (sparc32_pseudo_register_read): Change return to
+	enum register_status.  Return the register's status.
+	* sparc64-tdep.c (sparc64_pseudo_register_read): Ditto.
+	* spu-tdep.c (spu_pseudo_register_read_spu)
+	(spu_pseudo_register_read): Ditto.
+	* xtensa-tdep.c (xtensa_register_read_masked)
+	(xtensa_pseudo_register_read): Ditto.
+	* bfin-tdep.c (bfin_pseudo_register_read): Ditto.
+
+2011-03-18  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	* python/py-value.c (valpy_getitem): Fix formatting of error function
+	call.
+
+2011-03-18  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	ARI fixes: Add missing internationalization markups throughout
+	C source files.
+	* darwin-nat-info.c: Ditto.
+	* record.c: Ditto.
+	* remote.c: Ditto.
+	* mi/mi-main.c: Ditto.
+
+2011-03-18  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	ARI fixes: Add missing internationalization markups throughout
+	yacc files.
+	* c-exp.y: Ditto.
+	* cp-name-parser.y: Ditto.
+	* f-exp.y: Ditto.
+	* m2-exp.y: Ditto.
+	* objc-exp.y: Ditto.
+	* p-exp.y: Ditto.
+
+2011-03-18  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	ARI fixes: Messages should have no trailing new lines.
+	* darwin-nat.c (mach_check_error): Remove trailing new line from
+	warning function call message.
+	* record.c (bfdcore_read): Idem for error call.
+
+2011-03-18  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	* common/signals.c (target_signal_from_host): Add _ markup to error
+	function call message.
+	(target_signal_to_host): Add _ markup and remove trailing new line
+	from warning call message.
+	(target_signal_from_command): Add _ markup to error function call
+	message.
+
+2011-03-18  Phil Muldoon  <pmuldoon at redhat.com>
+
+	PR python/12149
+
+	* python/python.c (gdbpy_write): Accept a stream argument and
+	operate to the appropriate stream.
+	(gdbpy_flush): Likewise.
+	(_initialize_python): Add stream constants.
+	(finish_python_initialization): Add GdbOutputErrorFile class.
+
+2011-03-18  Kwok Cheung Yeung  <kcy at codesourcery.com>
+
+	* MAINTAINERS: Add myself as a write-after-approval maintainer.
+
+2011-03-18  Kwok Cheung Yeung  <kcy at codesourcery.com>
+
+	* amd64-tdep.c (amd64_relocate_instruction): Fix ordering of arguments
+	to store_signed_integer.  Add debug message when relocating CALL
+	instructions.  Fix formatting of debug message.
+	* i386-tdep.c (i386_relocate_instruction): Ditto.
+
+2011-03-17  Joel Brobecker  <brobecker at gnat.com>
+
+	* target.h (struct target_ops): Remove to_lookup_symbol field.
+	(target_lookup_symbol): Delete macro.
+	* target.c (nosymbol, debug_to_lookup_symbol): Delete.
+	(update_current_target, setup_target_debug): Remove handling
+	of to_lookup_symbol target_ops field.
+	* ada-tasks.c (get_known_tasks_addr): Remove use of
+	target_lookup_symbol.
+	* coffread.c (coff_symtab_read): Likewise.
+	* dbxread.c (read_dbx_symtab): Ditto.
+
+2011-03-17  Joel Brobecker  <brobecker at gnat.com>
+
+	PR gdb/12116:
+	* configure.ac: Add getthrds declaration check.
+	* configure, config.in: Regenerate.
+	* aix-thread.c (getthrds): Declare only if not already declared
+	in procinfo.h.  More declaration out of get_signaled_thread to
+	global scope.
+
+2011-03-17  Phil Muldoon  <pmuldoon at redhat.com>
+
+	* python/py-symtab.c: Populate symtab_object_methods,
+	sal_object_methods.
+	(stpy_is_valid): New function.
+	(salpy_is_valid): Ditto.
+	* python/py-symbol.c: Declare symbol_object_methods.  Populate.
+	(sympy_is_valid): New function.
+	* python/py-objfile.c: Declare objfile_object_methods.  Populate.
+	(objfpy_is_valid): New function.
+	* python/py-inferior.c: Populate inferior_object_methods.
+	(infpy_is_valid): New function.
+	* python/py-infthread.c: Populate thread_object_methods.
+	(thpy_is_valid): New function.
+	* python/py-block.c: Declare block_object_methods.  Populate.  Declare
+	block_iterator_object_methods.  Populate.
+	(blpy_is_valid): New function.
+	(blpy_iter_is_valid): Ditto.
+
+2011-03-16  Keith Seitz  <keiths at redhat.com>
+
+	* linespec.c (find_methods): Canonicalize NAME before looking
+	up the symbol.
+	(name_end): New function.
+	(keep_name_info): New function.
+	(decode_line_1): Use keep_name_info.
+	(decode_compound): Likewise.
+	* cli/cli-utils.h (remove_trailing_whitespace): New function.
+	* cli/cli-utils.c (remove_trailing_whitespace): Likewise.
+
+	PR c++/12273
+	* linespec.c (locate_first_half): Keep overload information, too.
+	(decode_compound): Use a string to represent break characters
+	to escape the loop.
+	If P points to a break character, do not increment it.
+	For C++ and Java, keep overload information and relevant keywords.
+	If we cannot find a symbol, search the minimal symbols.
+
+	PR c++/11734
+	* linespec.c (decode_compound): Rename SAVED_ARG to
+	THE_REAL_SAVED_ARG.
+	Make a copy of THE_REAL_SAVED_ARG in SAVED_ARG and strip
+	single-quotes.
+	Pass a valid block to lookup_symbol.
+	(lookup_prefix_sym): Likewise.
+	(find_method): Construct search name based on SYM_CLASS instead
+	of SAVED_ARG.
+	* psymtab.c (lookup_partial_symbol): Add language parameter.
+	(lookup_symbol_aux_psymtabs): Likewise.
+	Don't assume that the psymtab we found was the right one. Search
+	for the desired symbol in the symtab to be certain.
+	(psymtab_search_name): New function.
+	(lookup_partial_symbol): Use psymtab_search_name.
+	Add language parameter.
+	(read_symtabs_for_function): Add language parameter and pass to
+	lookup_partial_symbol.
+	(find_symbol_file_from_partial): Likewise.
+
+2011-03-16  Paul Pluzhnikov  <ppluzhnikov at google.com>
+
+	PR gdb/12528
+	* dwarf2read.c (noop_record_line): New function.
+	(dwarf_decode_lines): Ignore line tables for GCd functions.
+
+2011-03-16  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	Fix ARI warnings about new lines at the end of messages, which
+	are unneeded as there is a new line added at the end of the message
+	automatically.
+	* darwin-nat.c (darwin_stop_inferior): Ditto.
+	* dec-thread.c (dec_thread_get_ada_task_ptid): Ditto.
+	* dfp.c (decimal_to_number): Ditto.
+	* exec.c (print_section_info): Ditto.
+	* i386-darwin-nat.c (darwin_set_sstep): Ditto.
+	* osdata.c (get_osdata): Ditto.
+	* record.c (bfdcore_write): Ditto.
+	* remote-mips.c (mips_readchar): Ditto.
+	* remote.c (read_ptid): Ditto.
+	* ser-mingw.c (ser_windows_raw): Ditto.
+	* tracepoint.c (add_local_symbols): Ditto.
+	* windows-nat.c (fake_create_process): Ditto.
+
+2011-03-16  Tom Tromey  <tromey at redhat.com>
+
+	* tracepoint.c (stop_tracing): Don't declare.
+	* event-top.c (after_char_processing_hook): Add `(void)'.
+
+2011-03-16  Phil Muldoon  <pmuldoon at redhat.com>
+
+	* NEWS: Add Parameter sub-classing description.
+
+2011-03-16  Kai Tietz  <ktietz at redhat.com>
+
+	* MAINTAINERS: Update my e-mail address.
+
+2011-03-15  Andreas Tobler  <andreast at fgznet.ch>
+
+	* MAINTAINERS: Add myself for write after approval privileges.
+
+2011-03-15  Michael Snyder  <msnyder at vmware.com>
+
+	* frame.c (find_frame_sal): Assert sym is not null.
+
+	* dbxread.c (process_one_symbol): Assert 'name' is not null.
+
+	* objc-lang.c (selectors_info): Check strchr for null result.
+
+	* stabsread.c (define_symbol): Guard against bad stabstring input.
+
+2011-03-15  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	Remove trailing spaces and tabulations from pascal language
+	support sources.
+	p-exp.y: Ditto.
+	p-lang.c: Ditto.
+	p-lang.h: Ditto.
+	p-valprint.c: Ditto.
+
+2011-03-15  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* dwarf2read.c (dwarf2_get_pc_bounds): Require HIGH strictly higher
+	than LOW.  Comment it.
+	(read_partial_die): Call complaint for inappropriate zero LOWPC or
+	HIGHPC not strictly higher than LOWPC.
+
+2011-03-15  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	Fix formatting of function declarations returning a pointer in
+	previous commit.
+	* varobj.c (varobj_add_child): Ditto.
+	* hppa-tdep.h (hppa_init_objfile_priv_data): Ditto.
+	* inferior.h (get_displaced_step_closure_by_addr): Ditto.
+
+2011-03-15  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* ppc-sysv-tdep.c (ppc64_sysv_abi_push_dummy_call): Add support
+	for the "generic" vector ABI used with GCC 4.3 and later.
+	(ppc64_sysv_abi_return_value): Likewise.
+
+2011-03-15  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* infcall.c (call_function_by_hand): Function return value is
+	always a non_lval, even when using struct_return.
+
+2011-03-15  Pedro Alves  <pedro at codesourcery.com>
+
+	* printcmd.c (ALL_DISPLAYS_SAFE): New.
+	(map_display_numbers): New.
+	(do_delete_display): New.
+	(undisplay_command): Use map_display_numbers.
+	(do_enable_disable_display): New.
+	(enable_disable_display_command): New function.
+	(enable_display): Delete.
+	(enable_display_command): New.
+	(disable_display_command): Reimplement.
+	(_initialize_printcmd): Adjust "enable display" command to use
+	`enable_display_command' as callback.
+
+2011-03-14  Phil Muldoon  <pmuldoon at redhat.com>
+
+	* NEWS: Add Python breakpoint 'stop' operation.
+
+2011-03-14  Phil Muldoon  <pmuldoon at redhat.com>
+
+	* NEWS: Delete duplicate entry. Fix typo.
+
+2011-03-14  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	Fix ARI warning about function names in first column.
+	Put prototype declaration on same line as return type.
+	* objc-exp.y: Ditto.
+	* p-exp.y: Ditto.
+	* python/py-stopevent.h: Ditto.
+	For long function names, split parameters to
+	allow function name on same line as return type.
+	* solib-pa64.c: Ditto.
+	* varobj.c: Ditto.
+	* varobj.h: Ditto.
+	For long function declaration, use single line.
+	* hppa-tdep.h: Ditto.
+	* inferior.h: Ditto.
+
+2011-03-14  Phil Muldoon  <pmuldoon at redhat.com>
+
+	* python/python.h: Declare gdbpy_should_stop and
+	gdbpy_breakpoint_has_py_cond.
+	* python/python.c: Add python.h to includes.  Remove python.h from
+	HAVE_PYTHON definition
+	(gdbpy_should_stop): New dummy function.
+	(gdbpy_breakpoint_has_py_cond): New dummy function.
+	* python/py-breakpoint.c (bppy_init): Rewrite to allow
+	sub-classing capabilities.
+	(gdbpy_should_stop): New function.
+	(gdbpy_breakpoint_has_py_cond): New function.
+	(local_setattro): New function.
+	* breakpoint.c (condition_command): Add check for Python 'stop'
+	operation.
+	(bpstat_check_breakpoint_conditions): Execute Python 'stop'
+	operation function as part of stop/continue tests.
+
+2011-03-14  Tom Tromey  <tromey at redhat.com>
+
+	PR gdb/12576:
+	* dwarf2loc.c (dwarf_expr_dwarf_call): Remove 'return'.
+	(needs_frame_dwarf_call): Likewise.
+
+2011-03-14  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	Fix ARI warning about functions without parameters that do not
+	use (void).
+	* breakpoint.c (all_tracepoints): Replace () by (void).
+	* f-exp.y (match_string_literal): Ditto.
+	(yylex): Ditto.
+	* m2-exp.y (yylex): Ditto.
+	* mep-tdep.c (current_me_module): Ditto.
+	(current_options): Ditto.
+	(current_cop_data_bus_width): Ditto.
+	(current_cr_names): Ditto.
+	(current_cr_is_float): Ditto.
+	(current_ccr_names): Ditto.
+	* objc-exp.y (yylex): Ditto.
+	* p-exp.y (yylex): Ditto.
+	* remote.c (send_interrupt_sequence): Ditto.
+	* tracepoint.c (current_trace_status): Ditto.
+	* python/py-evts.c (gdbpy_initialize_py_events): Ditto.
+	* python/py-prettyprint.c (push_dummy_python_frame): Ditto.
+
+2011-03-11  Michael Snyder  <msnyder at vmware.com>
+
+	* cli/cli-decode.h (CMD_LIST_AMBIGUOUS): Define.
+	* cli/cli-decode.c (lookup_cmd_1): Use CMD_LIST_AMBIGUOUS.
+	(lookup_cmd): Test for CMD_LIST_AMBIGUOUS.
+	* completer.c (complete_line_internal): Use CMD_LIST_AMBIGUOUS.
+	* top.c (set_verbose): Use CMD_LIST_AMBIGUOUS.
+
+	* event-loop-c (delete_async_signal_handler): Assert prev_ptr.
+	(delete_async_event_handler): Ditto.
+
+	* python/py-breakpoint.c (bppy_set_condition): Stop memory leak.
+
+	* python/py-breakpoint.c (bppy_get_commands): Fix memory leak.
+
+	* top.c (set_verbose): Assert showcmd was found.
+
+2011-03-11  Maxim Grigoriev  <maxim2405 at gmail.com>
+
+	* xtensa-tdep.c (warning_once): Correct style issues.
+
+2011-03-11  Yao Qi  <yao at codesourcery.com>
+
+	* arm-tdep.c (copy_ldr_str_ldrb_strb): Remove redundant statements.
+
+2011-03-11  Andreas Schwab  <schwab at redhat.com>
+
+	* common/aclocal.m4: Remove.
+
+2011-03-10  Maxim Grigoriev  <maxim2405 at gmail.com>
+
+	* xtensa-tdep.c (windowing_enabled): Remove inline attribute.
+	(xtensa_write_register, xtensa_read_register): Likewise.
+	(xtensa_hextochar): Removed.
+	(xtensa_init_reggroups): Replace xtensa_hextochar () by explicit code.
+
+2011-03-10  Maxim Grigoriev  <maxim2405 at gmail.com>
+
+	* xtensa-tdep.c (xtensa_c0reg_t): Update comments.
+	(xtensa_call0_frame_cache_t): Update comments.  New fields added.
+	(xtensa_alloc_frame_cache): Add initialization for new fields.
+	(xtensa_frame_cache): Change the way how call0_frame_cache () is called.
+	(warning_once): New function.
+	(xtensa_insn_kind): New item c0opc_and.
+	(call0_classify_opcode): Add the case for AND instruction.
+	(call0_track_op): Change arguments.  New local variable litbase.
+	Add the case to handle c0opc_and.  Update algorithms for c0opc_mov,
+	c0opc_l32r, c0opc_s32i to take into account dynamic stack adjustments
+	in the prologue.
+	Add cases for c0opc_l32e, c0opc_s32e, c0opc_rfwo, c0opc_rfwu.
+	(call0_analyze_prologue): Update the comments.  Change arguments.
+	Add the variety of updates to handle extended prologues, which now can
+	conduct dynamic stack adjustments.
+	(call0_frame_cache): Likewise.
+	(xtensa_skip_prologue): Update call0_analyze_prologue () function call.
+	(xtensa_gdbarch_init): Initialize xtensa_session_once_reported.
+
+2011-03-10  Michael Snyder  <msnyder at vmware.com>
+
+	* tracepoint.c (cmd_qtv): Discard unused value 'packet'.
+	(cmd_qtframe): Ditto.
+	(cmd_qtbuffer): Ditto.
+	(cmd_bigqtbuffer): Ditto.
+
+2011-03-10  Tom Tromey  <tromey at redhat.com>
+
+	* tracepoint.c (trace_actions_command): Update.
+	* thread.c (thread_apply_command): Update.
+	* reverse.c (delete_bookmark_command): Update.
+	(bookmarks_info): Update.
+	* printcmd.c (undisplay_command): Update.
+	* memattr.c (mem_enable_command): Update.
+	(mem_disable_command): Update.
+	(mem_delete_command): Update.
+	* inferior.c (detach_inferior_command): Update.
+	(kill_inferior_command): Update.
+	(remove_inferior_command): Update.
+	* cli/cli-utils.h (struct get_number_or_range_state): New.
+	(init_number_or_range): Declare.
+	(get_number_or_range): Update.
+	* cli/cli-utils.c (init_number_or_range): New function.
+	(get_number_or_range): Change 'pp' parameter to 'state'.  Remove
+	static variables.
+	(number_is_in_list): Update.
+	* breakpoint.h (get_tracepoint_by_number): Update.
+	* breakpoint.c (map_breakpoint_numbers): Update for change to
+	get_number_or_range.
+	(find_location_by_number): Use get_number, not
+	get_number_or_range.
+	(trace_pass_set_count): New function.
+	(trace_pass_command): Update for change to get_number_or_range.
+	Rework loop logic.
+	(get_tracepoint_by_number): Remove 'multi_p' parameter; add
+	'state' parameter.
+
+2011-03-10  Phil Muldoon  <pmuldoon at redhat.com>
+
+	* python/py-param.c (add_setshow_generic): Add set/show callback
+	parameters.  Register Python object context.
+	(get_show_value): New function.
+	(get_set_value): New function.
+	(call_doc_function): New function.
+	(get_doc_string): Move behind get_show_value/get_set_value.
+
+2011-03-10  Andreas Tobler  <andreast-list at fgznet.ch>
+
+	* fbsd-nat.c (fbsd_make_corefile_notes): Constify local `fname'.
+
+2011-03-09  Maxim Grigoriev  <maxim2405 at gmail.com>
+
+	* xtensa-tdep.c (xtensa_read_register): Add comment.
+	(xtensa_write_register): Likewise.
+	(xtensa_hextochar): Add comment and update to match coding conventions.
+	(xtensa_frame_cache, xtensa_return_value): Follow coding conventions.
+	(execute_l32e, execute_s32e, execute_code): Update comments.
+	(xtensa_exception_handler_t): Update to match coding conventions.
+	(xtensa_insn_kind): Likewise.
+
+2011-03-09  Michael Snyder  <msnyder at vmware.com>
+
+	* mi-cmd-disas.c (mi_cmd_disassemble): Fix memory leak.
+
+2011-03-09  Pedro Alves  <pedro at codesourcery.com>
+
+	* nto-tdep.c (nto_find_and_open_solib): Constify local `base'.
+
+2011-03-09  Tom Tromey  <tromey at redhat.com>
+
+	* thread.c (restore_selected_frame): Handle frame_level == -1.
+	(make_cleanup_restore_current_thread): Use
+	get_selected_frame_if_set.
+	* frame.h (get_selected_frame_if_set): Declare.
+	* frame.c (get_selected_frame_if_set): New function.
+
+2011-03-09  Pedro Alves  <pedro at codesourcery.com>
+
+	* cli/cli-cmds.c (shell_escape): Use lbasename.
+	* coffread.c (coff_start_symtab): Constify parameter.
+	(complete_symtab): Constify `name' parameter.
+	(coff_symtab_read): Constify `filestring' local.
+	(coff_getfilename): Constify return and `result' local.
+	Use lbasename.
+	* fbsd-nat.c (fbsd_make_corefile_notes): Use lbasename.
+	* linux-fork.c (info_checkpoints_command): Use lbasename.
+	* linux-nat.c (linux_nat_make_corefile_notes): Use lbasename.
+	* minsyms.c (lookup_minimal_symbol): Use lbasename.
+	* nto-tdep.c (nto_find_and_open_solib): Use lbasename.
+	* procfs.c (procfs_make_note_section): Use lbasename.
+	* tui/tui-io.c (printable_part): Constity return and parameter.
+	Use lbasename.
+	(print_filename): Constify parameters, and local `s'.
+	(tui_rl_display_match_list): Constify local `temp'.
+
+2011-03-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Revert:
+	2011-03-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	Fix DWARF-3+ DW_AT_accessibility default assumption.
+	* dwarf2read.c (dwarf2_add_field): Fix new_field->accessibility for
+	cu->header.version >= 3.
+
+2011-03-09  Yao Qi  <yao at codesourcery.com>
+
+	* common/Makefile.in: Remove.
+	* common/configure: Remove.
+	* common/configure.ac: Remove.
+
+2011-03-09  Yao Qi  <yao at codesourcery.com>
+
+	Revert:
+	2011-02-11  Yao Qi  <yao at codesourcery.com>
+
+	* common/Makefile.in: Add copyright header.
+
+	2011-02-11  Yao Qi  <yao at codesourcery.com>
+
+	* Makefile.in: Remove signals.o from COMMON_OBS.  Link
+	libcommon.a.
+	* configure.ac: Add common to sub dir.
+	* configure: Regenerate.
+
+2011-03-08  Maxim Grigoriev  <maxim2405 at gmail.com>
+
+	* xtensa-tdep.c (call0_ret): New function.
+	(xtensa_skip_prologue): Speed up analysis.
+
+2011-03-08  Maxim Grigoriev  <maxim2405 at gmail.com>
+
+	* xtensa-tdep.c (xtensa_register_reggroup_p): Count in all registers
+	while executing MI command -data-list-changed-registers.
+
+2011-03-08  Maxim Grigoriev  <maxim2405 at gmail.com>
+
+	* xtensa-tdep.c (xtensa_read_register): New function.
+	(xtensa_write_register): New function.
+	(xtensa_find_register_by_name): New function.
+	(xtensa_windowed_frame_cache): Update comments in type description.
+	(xtensa_frame_cache): Likewise.
+	(xtensa_window_interrupt_insn): New function.
+	(xtensa_frame_cache): Add analysis for Xtensa Window Exception frames.
+	(xtensa_insn_kind): Add new instructions.
+	(rwx_special_register): New function.
+	(call0_classify_opcode): Add new instructions to the analysis.
+	(a0_saved, a7_saved, a11_saved): New variables.
+	(a0_was_saved, a7_was_saved, a11_was_saved): New variables.
+	(execute_l32e): New function.
+	(execute_s32e): New function.
+	(xtensa_exception_handler_t): New type.
+	(execute_code): New function.
+	(xtensa_window_interrupt_frame_cache): New function to conduct frame
+	analysis for Xtensa Window Exception handlers.
+
+2011-03-08  Maxim Grigoriev  <maxim2405 at gmail.com>
+
+	* xtensa-tdep.c (TX_PS): New.
+	(windowing_enabled): Update to count for Call0 ABI.
+	(xtensa_hextochar): New.
+	(xtensa_init_reggroups): Make algorithm generic.
+	(xtensa_frame_cache): Use TX_PS on Tiny Xtensa.
+
+2011-03-08  Maxim Grigoriev  <maxim2405 at gmail.com>
+
+	* xtensa-tdep.h (XTENSA_MAX_COPROCESSOR): Update.
+
+2011-03-08  Michael Snyder  <msnyder at vmware.com>
+
+	* i386-tdep.c (i386_follow_jump): Check return value of
+	target_read_memory.
+	(i386_analyze_struct_return): Ditto.
+	(i386_skip_probe): Ditto.
+	(i386_match_insn): Ditto.
+	(i386_skip_noop): Ditto.
+	(i386_analyze_frame_setup): Ditto.
+	(i386_analyze_register_saves): Ditto.
+	(i386_skip_prologue): Ditto.
+	(i386_skip_main_prologue): Ditto.
+
+	* target.c (read_whatever_is_readable): Fix memory leak.
+
+	* i386-tdep.c (i386_process_record): Document fall through.
+
+2011-03-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix DWARF-3+ DW_AT_accessibility default assumption.
+	* dwarf2read.c (dwarf2_add_field): Fix new_field->accessibility for
+	cu->header.version >= 3.
+
+2011-03-08  Pedro Alves  <pedro at codesourcery.com>
+
+	* remote.c (remote_check_symbols): Skip if the target has no
+	execution.
+
+2011-03-08  Joel Brobecker  <brobecker at adacore.com>
+
+	* target.c (read_whatever_is_readable): Reformat comment,
+	with a minor typo fix. Minor reformatting of the code.
+
+2011-03-08  Yao Qi  <yao at codesourcery.com>
+
+	* arm-tdep.c: Remove prototype declaration displaced_in_arm_mode.
+	(displaced_read_reg): Add `dsc' parameter, remove `from' parameter.
+	Use cached result instead of calling displaced_in_arm_mode again.
+	(branch_write_pc, alu_write_pc, load_write_pc): Add `dsc' parameter.
+	(displaced_write_reg, copy_preload, copy_preload_reg): Callers update.
+	(cleanup_copro_load_store, copy_copro_load_store): Likewise.
+	(cleanup_branch, copy_bx_blx_reg, copy_alu_imm): Likewise.
+	(cleanup_alu_reg, copy_alu_reg, cleanup_alu_shifted_reg): Likewise.
+	(copy_alu_shifted_reg, cleanup_load, cleanup_store): Likewise.
+	(copy_extra_ld_st, copy_ldr_str_ldrb_strb): Likewise.
+	(cleanup_block_load_all, cleanup_block_store_pc): Likewise.
+	(cleanup_block_load_pc, copy_block_xfer): Likewise.
+	* arm-linux-tdep.c (arm_linux_copy_svc): Callers update.
+	(arm_catch_kernel_helper_return): Likewise.
+	* gdb/arm-tdep.h : Update function declarations.
+
+2011-03-07  Michael Snyder  <msnyder at vmware.com>
+
+	* dwarf2loc.c (indirect_pieced_value): Assert 'piece' not null.
+
+	* ser-unix.c (hardwire_get_tty_state): Stop memory leak.
+
+	* mi/mi-cmd-env.c (_initialize_mi_cmd_env): Free environment.
+
+	* elfread.c (elf_symtab_read): Stop memory leak.
+
+	* main.c (captured_main): Fix memory leak.
+
+2011-03-07  Andreas Schwab  <schwab at linux-m68k.org>
+
+	* ada-lang.c (compare_names): Call is_name_suffix with string1
+	instead of string2.
+
+2011-03-07  Tom Tromey  <tromey at redhat.com>
+
+	* xcoffread.c (xcoff_sym_fns): Update.
+	* symfile.h (struct sym_fns) <sym_read_psymbols>: New field.
+	(enum symfile_add_flags) <SYMFILE_NO_READ>: New constant.
+	* symfile.c (syms_from_objfile): Handle SYMFILE_NO_READ.
+	(symbol_file_add_with_addrs_or_offsets): Likewise.
+	(reread_symbols): Handle OBJF_PSYMTABS_READ.
+	* somread.c (som_sym_fns): Update.
+	* psymtab.h (require_partial_symbols): Declare.
+	* psymtab.c (require_partial_symbols): New function.
+	(ALL_OBJFILE_PSYMTABS_REQUIRED): New macro.
+	(ALL_OBJFILE_PSYMTABS): Undef.
+	(ALL_PSYMTABS): Move from psympriv.h.
+	(lookup_partial_symtab, find_pc_sect_psymtab)
+	(lookup_symbol_aux_psymtabs, relocate_psymtabs)
+	(find_last_source_symtab_from_partial)
+	(forget_cached_source_info_partial)
+	(print_psymtab_stats_for_objfile, read_symtabs_for_function)
+	(expand_partial_symbol_tables, read_psymtabs_with_filename)
+	(map_symbol_names_psymtab, map_symbol_filenames_psymtab)
+	(find_symbol_file_from_partial, map_matching_symbols_psymtab)
+	(expand_symtabs_matching_via_partial, maintenance_info_psymtabs):
+	Use ALL_OBJFILE_PSYMTABS_REQUIRED.
+	* psympriv.h (ALL_PSYMTABS): Move to psymtab.c.
+	* objfiles.h (OBJF_PSYMTABS_READ): New macro.
+	* objfiles.c (objfile_has_partial_symbols): Handle lazily-read
+	psymtabs.
+	* mipsread.c (ecoff_sym_fns): Update.
+	* machoread.c (macho_sym_fns): Update.
+	* elfread.c (elf_symfile_read): Set up for lazy psymtab reading.
+	(read_psyms): New function.
+	(elf_sym_fns, elf_sym_fns_gdb_index): Update.
+	(elf_sym_fns_lazy_psyms): New global.
+	* dwarf2read.c (dwarf2_initialize_objfile): Don't call
+	dwarf2_build_psymtabs.
+	* dbxread.c (aout_sym_fns): Update.
+	* coffread.c (coff_sym_fns): Update.
+
+2011-03-07  Tom Tromey  <tromey at redhat.com>
+
+	* infrun.c (print_exited_reason): Include inferior id and pid in
+	message.
+
+2011-03-07  Tom Tromey  <tromey at redhat.com>
+
+	* target.h (struct target_ops) <to_has_execution>: Add ptid_t
+	parameter.
+	(target_has_execution_1): Update.
+	(target_has_execution_current): Declare.
+	(target_has_execution): Call target_has_execution_current.
+	(default_child_has_execution): Update.
+	* target.c (default_child_has_execution): Add 'the_ptid'
+	parameter.
+	(target_has_execution_1): Likewise.
+	(target_has_execution_current): New function.
+	(add_target): Update.
+	(init_dummy_target): Update.
+	* remote-m32r-sdi.c (m32r_has_execution): New function.
+	(init_m32r_ops): Use it.
+	* record.c (record_core_has_execution): Now static.  Add
+	'the_ptid' parameter.
+	* inferior.c (have_live_inferiors): Don't save current thread.
+	Use target_has_execution_1.
+
+2011-03-07  Yao Qi  <yao at codesourcery.com>
+
+	* Makefile.in (aclocal_m4_deps): Remove gnulib/m4/memcmp.m4.
+
+2011-03-07  Joel Brobecker  <brobecker at adacore.com>
+
+	* elfread.c (elf_symtab_read): Minor reformatting.
+
+2011-03-07  Joel Brobecker  <brobecker at adacore.com>
+
+	* objc-lang.c (selectors_info): Minor reformatting.
+
+2011-03-07  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-lang.c (compare_names): Add FALLTHROUGH comment.
+
+2011-03-07  Joel Brobecker  <brobecker at adacore.com>
+	    Michael Snyder  <msnyder at vmware.com>
+
+	* ada-valprint.c (ada_val_print_array): Move the declaration of
+	"byte_order" and "elttype" inside the block where these variables
+	are actually used.  Remove some special handling for the case
+	where "elttype" and "eltlen" are null.  Replace by a comment
+	and a couple of assertion checks.
+
+2011-03-05  Michael Snyder  <msnyder at vmware.com>
+
+	* source.c (add_path): Replace semicolon at end of block.
+	* dwarf2expr.c (execute_stack_op): Ditto.
+
+2011-03-05  Mike Frysinger  <vapier at gentoo.org>
+
+	* bfin-tdep.c: Include sim-regno.h and gdb/sim-bfin.h.
+	* configure.tgt (bfin-*-*linux*): Define gdb_sim.
+	(bfin-*-*): Likewise.
+
+2011-03-05  Michael Snyder  <msnyder at vmware.com>
+
+	* dwarf2expr.c (execute_stack_op): Delete superfluous semicolon.
+	* mdebugread.c (parse_symbol): Ditto.
+	* parse.c (parse_exp_in_context): Ditto.
+	* source.c (add_path): Ditto.
+	* utils.c (gnu_debuglink_crc32): Ditto.
+	* varobj.c (variable_language): Ditto.
+
+	* linux-tdep.c (linux_get_siginfo_type): Stop memory leak.
+
+2011-03-04  Michael Snyder  <msnyder at vmware.com>
+
+	* linux-fork.c (inferior_call_waitptid): Fix copy/paste error.
+
+	* symfile.c (simple_overlay_update): Check for null return value
+	from lookup_minimal_symbol.
+
+	* xml-syscall.c (syscall_start_syscall): Assert name is non null.
+
+2011-03-04  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* eval.c (parse_and_eval_address_1): Remove function.
+	* linespec.c (decode_indirect): Call parse_to_comma_and_eval
+	instead of parse_and_eval_address_1.
+	* value.h (parse_and_eval_address_1): Remove prototype.
+
+2011-03-04  Michael Snyder  <msnyder at vmware.com>
+
+	* remote.c (putpkt_binary): Document that case stmt falls through.
+
+2011-03-04  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* breakpointc (print_it_typical): Move NULL check from here...
+	(print_bp_stop_message): ... to here.
+
+2011-03-04  Michael Snyder  <msnyder at msnyder-server.eng.vmware.com>
+
+	* breakpoint.c (enable_command): Use break instead of continue,
+	and fill in a missing break.
+	(disable_command): Ditto.
+
+2011-03-04  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* inflow.c (terminal_init_inferior_with_pgrp): Copy ttystate.
+	(terminal_save_ours): Remove misleading comment.
+	(inflow_inferior_data_cleanup): Free ttystate.
+	(inflow_inferior_exit): Likewise.
+	(copy_terminal_info): Copy ttystate.
+
+	* serial.c (serial_copy_tty_state): New function.
+	* serial.h (serial_copy_tty_state): Add prototype.
+	(struct serial_ops): Add copy_tty_state callback.
+	* ser-base.c (ser_base_copy_tty_state): New function.
+	* ser-base.h (ser_base_copy_tty_state): Add prototype.
+	* ser-go32.c (dos_copy_tty_state): New function.
+	(dos_ops): Install copy_tty_state callback.
+	* ser-mingw.c (_initialize_ser_windows): Likewise.
+	* ser-pipe.c (_initialize_ser_pipe): Likewise.
+	* ser-unix.c (hardwire_copy_tty_state): New function.
+	(_initialize_ser_hardwire): Install it.
+
+2011-03-04  Michael Snyder  <msnyder at vmware.com>
+
+	* breakpoint.c (create_breakpoint): Add missing break statement.
+
+	Reverting this patch:
+	* infcall.c (call_function_by_hand): Add break statements for lint.
+
+	Reverting this patch:
+	* cli/cli-script.c (script_from_file): Add break for lint.
+
+2011-03-04  Michael Snyder  <msnyder at vmware.com>
+
+	* solib.c (reload_shared_libraries_1): Close memory leak.
+
+2011-03-03  Tom Tromey  <tromey at redhat.com>
+
+	PR gdb/12538:
+	* dwarf2read.c (process_psymtab_comp_unit): Handle case where
+	DW_STRING is NULL.
+
+2011-03-03  Michael Snyder  <msnyder at vmware.com>
+
+	* remote-fileio.c (remote_fileio_func_fstat): Initialize all
+	fields of struct 'st' to zero.
+
+	* tui/tui-winsource.c (tui_update_source_window_as_is): Initialize
+	sal.pspace before calling set_current_source_symtab_and_line.
+
+2011-03-03  Yao Qi  <yao at codesourcery.com>
+
+	* Makefile.in (configure-common): Remove.  Let Makefile
+	in dir common to rebuild itself.
+	(common/Makefile): Likewise.
+
+2011-03-03  Joel Brobecker  <brobecker at adacore.com>
+
+	* utils.c (parse_escape): Add i18n markup in error message.
+
+2011-03-03  Yao Qi  <yao at codesourcery.com>
+
+	* gdb/arm-tdep.c (shifted_reg_val): Replace magic number 15 with
+	ARM_PC_REGNUM.
+	(thumb_get_next_pc_raw, arm_get_next_pc_raw): Likewise.
+	(displaced_write_reg, displaced_read_reg): Likewise.
+	(copy_ldr_str_ldrb_strb, cleanup_block_load_all): Likewise.
+	(cleanup_block_load_pc, copy_block_xfer): Likewise.
+	(cleanup_branch): Replace magic number 14 and 15 with
+	ARM_LR_REGNUM and ARM_PC_REGNUM respectively.
+
+2011-03-02  Michael Snyder  <msnyder at vmware.com>
+
+	* maint.c (maintenance_do_deprecate): No need to check for NULL.
+
+	* cli/cli-script.c (script_from_file): Add break for lint.
+
+	* mdebugread.c (parse_partial_symbols): Fix indent.
+
+	* target-descriptions.c (tdesc_gdb_type): No need to call
+	xstrdup, callee saves a copy.
+
+	* printcmd.c (print_scalar_formatted): Use strncpy for safety.
+
+	* infcall.c (call_function_by_hand): Add break statements for lint.
+
+	* utils.c (parse_escape): Escape the escape char.
+
+	* python/py-inferior.c (build_inferior_list): Error out if
+	PyList_Append fails.
+	(gdbpy_inferiors): Error out if build_inferior_list fails.
+
+	* linux-nat.c (linux_nat_xfer_partial): Preserve errno around
+	a function call.
+
+	* record.c (record_restore): Move printf to before error return.
+
+2011-03-02  Yao Qi  <yao at codesourcery.com>
+
+	* arm-tdep.h (struct displaced_step_closure): Add two new fields
+	is_thumb and insn_size.
+	* arm-tdep.c (displaced_read_reg): Adjust correct pipeline offset
+	on both ARM and Thumb mode.
+	(arm_process_displaced_insn): Set is_thumb and insn_size.
+	(arm_displaced_init_closure): Handle both 16-bit and 32-bit.
+	(arm_displaced_step_fixup): Likewise.
+
+2011-03-01  Michael Snyder  <msnyder at vmware.com>
+
+	* cli/cli-dump.c (dump_bfd_file): Check error return and warn.
+
+	* jv-lang.c (evaluate_subexp_java): Conditional can't be true.
+
+	* dwarf2read.c (dwarf2_compute_name): NAME cannot be null here.
+
+	* cli/cli-dump.c (restore_binary_file): Validate ftell return value.
+
+	* ada-lang.c (ada_make_symbol_completion_list): Replace malloc
+	with xmalloc.
+
+	* ada-lang.c (aggregate_assign_others): Rename inner scope variable
+	which shadows function parameter.
+
+	* tracepoint.c (create_tsv_from_upload): Superfluous call
+	to xstrdup.  Callee already calls xstrdup.
+
+	* linespec.c (decode_line_1): Remove unnecessary null check.
+
+	* tracepoint.c (scope_info): Fix mem leak, remove underused
+	variable.
+
+	* python/py-prettyprint.c (apply_val_pretty_printer): Remove
+	superfluous null check.
+
+	* std-regs.c (value_of_builtin_frame_pc_reg): Frame can't be null.
+	(value_of_builtin_frame_fp_reg): Ditto.
+
+	* event-top.c (display_gdb_prompt): Remove superfluous null check.
+
+	* python/py-prettyprint.c (apply_val_pretty_printer): VAL may
+	be null.
+
+	* linespec.c (decode_line_1): Check for null before dereference.
+
+	* reverse.c (record_restore): Move null-check to before pointer
+	dereference.
+
+	* python/py-utils.c (gdbpy_obj_to_string): Delete unused variable.
+
+	* objc-lang.c (selectors_info): Add explanitory comment.
+	(classes_info): Ditto.
+
+2011-03-01  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* arm-linux-tdep.c (ARM_LDR_PC_SP_4): Add define.
+	(arm_linux_restart_syscall_init): Handle both on-stack and in-kernel
+	versions of the trampoline.  Handle Thumb vs. ARM addresses.
+	(arm_kernel_linux_restart_syscall_tramp_frame): New global.
+	(arm_linux_init_abi): Install it.
+	* arm-tdep.c (arm_psr_thumb_bit): Make global.
+	* arm-tdep.c (arm_psr_thumb_bit): Add prototype.
+
+2011-02-28  Michael Snyder  <msnyder at vmware.com>
+
+	* ui-out.c (ui_out_field_core_addr): Make local char buffer
+	a little bigger, to avoid possibility of an overflow.
+
+	* breakpoint.c (breakpoint_adjustment_warning): Make local char
+	buffers a little bigger, to avoid possibility of an overflow.
+
+	* coffread.c (coff_getfilename): Add check to avoid overflow.
+
+	* objc-lang.c (selectors_info): Add a small safety margin to
+	avoid overflow.
+	(classes_info): Error out on too long REGEXP.
+
+	* infrun.c (handle_inferior_event): Remove unused function call.
+
+	* fork-child.c (fork_inferior): Remove ifdef'd code and
+	unused variable.
+
+	* linux-thread-db.c (attach_thread): Discard unused value.
+
+	* linux-nat.c (linux_handle_extended_wait): Delete unused variable.
+
+	* remote.c (remote_get_noisy_reply): Discard unused value.
+	(remote_vcont_resume): Ditto.
+	(remote_stop_ns): Ditto.
+
+	* linespec.c (decode_objc): Delete unused variable.
+
+	* tui/tui-regs.c (tui_register_format): Delete unused variable.
+
+	* dwarf2read.c (add_partial_symbol): Discard unused values.
+	(read_base_type): Delete unused variable.
+
+	* dbxread.c (read_dbx_symtab): Discard unused value.
+
+	* eval.c (evaluate_subexp_standard): Delete unused variable,
+	and discard unused values.
+
+	* infcmd.c (_initialize_infcmd): Discard unused values.
+
+	* stabsread.c (rs6000_builtin_type): Missing break statement.
+
+	* dbxread.c (process_one_symbol): Discard unused value.
+
+	* coffread.c (coff_end_symtab): Delete unused variable.
+
+	* dwarf2read.c (dw2_get_file_names): Discard unused value.
+	(dwarf2_add_typedef): Delete unused variable.
+	(read_namespace): Ditto.
+	(dwarf_decode_macros): Ditto.
+
+	* m2-lang.c (evaluate_subexp_modula2): Discard unused variable.
+
+	* opencl-lang.c (evaluate_subexp_opencl): Discard unused value.
+
+	* p-valprint.c (pascal_val_print): Discard unused value.
+
+	* utils.c (nquery): Call va_end before return;
+	(yquery): Ditto.
+	(query): Ditto.
+
+	* proc-service.c (ps_plog): Call va_end before return.
+
+2011-02-28  Tom Tromey  <tromey at redhat.com>
+
+	* python/python.c (gdbpy_value_cst): New global.
+	(_initialize_python): Initialize it.
+	* python/python-internal.h (gdbpy_value_cst): Declare.
+	* python/py-value.c (convert_value_from_python): Use
+	gdbpy_value_cst.
+
+2011-02-28  Michael Snyder  <msnyder at vmware.com>
+
+	* python/py-cmd.c (cmdpy_init): Fix memory leak.
+
+	* breakpoint.c (catch_syscall_completer): Free malloced list.
+
+	* jv-lang.c (java_primitive_type_from_name): Add missing break.
+
+	* opencl-lang.c (lval_func_check_validity): Rename inner variables.
+	(lval_func_check_synthetic_pointer): Ditto.
+	(lval_func_free_closure): Fix use-after-free.
+
+2011-02-28  Tom Tromey  <tromey at redhat.com>
+
+	* psymtab.c (expand_partial_symbol_tables): Use
+	ALL_OBJFILE_PSYMTABS.
+
+2011-02-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* objc-lang.c (selectors_info): Error on too long REGEXP.
+
+2011-02-28  Michael Snyder  <msnyder at vmware.com>
+
+	* python/py-param.c (set_parameter_value): Add missing
+	break statement.
+
+	* linux-record.c (record_linux_system_call): Add missing
+	break statement.
+
+2011-02-28  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* breakpoint.c (print_one_breakpoint_location): Remove unused
+	argument PRINT_ADDRESS_BITS.  Update callers.
+	(print_one_breakpoint): Likewise.
+
+2011-02-28  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* breakpoint.c (wrap_indent_at_field): New function.
+	(print_breakpoint_location): Use it instead of WRAP_INDENT argument.
+	Allocate ui_stream locally instead of using STB argument.
+	(print_one_breakpoint_location): Update call.
+	* ui-out.c (ui_out_query_field): New function.
+	* ui-out.h (ui_out_query_field): Add prototype.
+
+2011-02-28  Joel Brobecker  <brobecker at adacore.com>
+
+	From Michael Snyder  <msnyder at vmware.com>
+	* ada-exp.y (write_object_renaming): Add FALLTHROUGH comment.
+
+2011-02-27  Michael Snyder  <msnyder at vmware.com>
+
+	* objc-lang.c (selectors_info): Prevent string overrun.
+
+	* tui/tui-stack.c (tui_get_function_from_frame): Fix off by one
+	error in strncpy.
+
+	* symtab.c (rbreak_command): Move variable 'file_name' to
+	outer scope.
+
+	* d-valprint.c (dynamic_array_type): Avoid shadowing a function
+	param with a local variable of the same name.
+
+2011-02-27  Michael Snyder  <msnyder at vmware.com>
+
+	* value.c (value_from_history_ref): New function.
+	* value.h (value_from_history_ref): Export.
+	* cli/cli-utils.c (get_number_trailer): Use value_from_history_ref
+	to parse value history references.
+	* cli/cli-utils.h (get_number_trailer): Update comment.
+
+2011-02-27  Michael Snyder  <msnyder at vmware.com>
+
+	* inferior.c (detach_inferior_command): Use get_number_or_range.
+	(kill_inferior_command): Ditto.
+	(remove_inferior_command): Ditto.
+	(initialize_inferiors): Make command names plural.
+	Update help strings.
+
+2011-02-27  Michael Snyder  <msnyder at vmware.com>
+
+	* darwin-nat-info.c: Fix comment typo.
+	* dwarf2expr.h: Ditto.
+	* fbsd-nat.c: Ditto.
+	* fbsd-nat.h: Ditto.
+	* frame-unwind.h: Ditto.
+	* frame.h: Ditto.
+	* hppa-hpux-tdep.c: Ditto.
+	* i386-linux-nat.c: Ditto.
+	* linux-nat.c: Ditto.
+	* nbsd-nat.c: Ditto.
+	* nbsd-nat.h: Ditto.
+	* ppc-linux-tdep.c: Ditto.
+	* serial.c: Ditto.
+	* ui-file.h: Ditto.
+	* tui/tui-winsource.c: Ditto.
+
+2011-02-26  Michael Snyder  <msnyder at vmware.com>
+
+	* breakpoint.c (reattach_breakpoints): Avoid resource leak (ui_file).
+
+	* maint.c (maintenance_do_deprecate): Plug a memory leak.
+
+	* dwarf2loc.c (insert_bits): Avoid shadowing a function param
+	with a local variable of the same name.
+
+	* i387-tdep.c (i387_supply_fxsave): Avoid shadowing a function
+	param with a local variable of the same name.
+	(i387_supply_xsave): Ditto.
+
+	* linux-low.c (linux_nat_xfer_osdata): Rename local variable so
+	that it does not shadow a function parameter.
+
+	* i386-nat.c (i386_length_and_rw_bits): Document that case
+	statement is meant to fall through.
+
+	* expprint.c (dump_subexp_body_standard): Document that case
+	statement is meant to fall through.
+
+	* amd64-linux-tdep.c (amd64_linux_syscall_record): Delete
+	dead if statement.  Condition can't be false.
+
+2011-02-25  Michael Snyder  <msnyder at vmware.com>
+
+	* arm-tdep.c: Fix typos in comments.
+	* bsd-uthread.c: Ditto.
+	* completer.c: Ditto.
+	* corelow.c: Ditto.
+	* cp-namespace.c: Ditto.
+	* cp-support.c: Ditto.
+	* cris-tdep.c: Ditto.
+	* dbxread.c: Ditto.
+	* dwarf2read.c: Ditto.
+	* frame.h: Ditto.
+	* gdbtypes.h: Ditto.
+	* inferior.h: Ditto.
+	* mdebugread.c: Ditto.
+	* mips-tdep.c: Ditto.
+	* ppc-linux-nat.c: Ditto.
+	* ppc-linux-tdep.c: Ditto.
+	* printcmd.c: Ditto.
+	* sol-thread.c: Ditto.
+	* solib-frv.c: Ditto.
+	* solist.h: Ditto.
+	* sparc64-tdep.c: Ditto.
+	* spu-tdep.c: Ditto.
+	* stabsread.c: Ditto.
+	* symfile.c: Ditto.
+	* valops.c: Ditto.
+	* varobj.c: Ditto.
+	* vax-nat.c: Ditto.
+	* python/py-block.c: Ditto.
+	* python/py-symbol.c: Ditto.
+	* python/py-symtab.c: Ditto.
+	* python/py-value.c: Ditto.
+	* tui/tui-win.c: Ditto.
+
+2011-02-25  Michael Snyder  <msnyder at vmware.com>
+
+	* inferior.c (print_inferior): Accept a string instead of an int
+	for requested_inferiors, and use get_number_or_range to parse it.
+	(info_inferiors_command): Pass args string to print_inferior.
+	(initialize_inferiors): Change help string for info inferiors.
+	* inferior.h (print_inferior): Export prototype change.
+
+2011-02-25  Tom Tromey  <tromey at redhat.com>
+
+	* common/ax.def (invalid2): Set to 0x31.
+
+2011-02-25  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* dwarf2loc.c (disassemble_dwarf_expression) <DW_OP_breg[0-9]+>: Use
+	L and plongest.
+	(disassemble_dwarf_expression) <DW_OP_bregx>: Drop variable offset,
+	use L and plongest.
+	(disassemble_dwarf_expression) <DW_OP_fbreg>: Use L and plongest.
+
+2011-02-24  Michael Snyder  <msnyder at vmware.com>
+
+	* Makefile.in (clean): Make clean should remove generated files
+	observer.h and observer.inc.
+
+2011-02-24  Joel Brobecker  <brobecker at adacore.com>
+
+	Revert the following patch (not approved yet):
+	2011-02-21  Hui Zhu  <teawater at gmail.com>
+	* Makefile.in (HFILES_NO_SRCDIR): Add printcmd.h.
+	* ax-gdb.c (gen_printf_expr_callback): New function.
+	* ax-gdb.h (gen_printf_expr_callback): Forward declare.
+	* ax-general.c (ax_memcpy): New function.
+	(ax_print): Handle "printf".
+	(ax_reqs): Ditto.
+	* ax.h (ax_memcpy): Forward declare.
+	* common/ax.def (invalid2): Removed.
+	(printf): New entry.
+	* printcmd.c (printcmd.h): New include.
+	(string_printf): New function.
+	(ui_printf): Removed.
+	(printf_command): Remove static.  Call string_printf.
+	(eval_command): Call string_printf.
+	* printcmd.h: New file.
+	* tracepoint.c (validate_actionline,
+	encode_actions_1): handle printf_command.
+
+2011-02-23  Tom Tromey  <tromey at redhat.com>
+
+	* ax-general.c (ax_pick): Add missing newline.
+
+2011-02-23  Michael Snyder  <msnyder at vmware.com>
+
+	* breakpoint.c (breakpoint_1): Change first argument from an int
+	to a char pointer, so that the function now accepts a list of
+	breakpoints rather than just one.  Use new function
+	'number_is_in_list' to implement.
+	(breakpoints_info): Pass char * instead of int to breakpoint_1.
+	(watchpoints_info): Ditto.
+	(tracepoints_info): Ditto.
+	(maintenance_info_breakpoints): Ditto.
+	(_initialize_breakpoint): Update help strings to reflect the fact
+	that these functions can now take more than one argument.
+	* cli/cli-utils.c (number_is_in_list): New function.
+	* cli/cli-utils.h (number_is_in_list): Export.
+
+2011-02-23  Michael Snyder  <msnyder at vmware.com>
+
+	* memattr.c (mem_enable_command): Use get_number_or_range.
+	(mem_disable_command): Ditto.
+	(mem_delete_command): Ditto.
+	(_initialize_mem): Tweak usage message to reflect multiple
+	arguments.
+
+2011-02-22  Doug Evans  <dje at google.com>
+
+	Add gdb.lookup_global_symbol python function.
+	* NEWS: Add entry.
+	* python/py-symbol.c (gdbpy_lookup_global_symbol): New function.
+	* python/python-internal.h (gdbpy_lookup_global_symbol): Declare it.
+	* python/python.c (GdbMethods): Add entry for lookup_global_symbol.
+
+2011-02-22  Tom Tromey  <tromey at redhat.com>
+
+	* language.c (language_class_name_from_physname): Rename
+	'curr_language' argument to 'lang'; use in body.
+
+2011-02-22  Michael Snyder  <msnyder at vmware.com>
+
+	* cli/cli-utils.c (number_is_in_list): Check for zero return.
+
+2011-02-22  Pedro Alves  <pedro at codesourcery.com>
+
+	* frame-unwind.h: Fix comment to mention the this frame, not the
+	next.
+
+2011-02-22  Tom Tromey  <tromey at redhat.com>
+
+	* symfile.c (auto_solib_limit): Remove.
+	* symfile.h (auto_solib_limit): Remove.
+
+2011-02-22  Joel Brobecker  <brobecker at adacore.com>
+
+	* Makefile.in (INSTALLED_LIBS): Delete.  Update comment.
+
+2011-02-21  Michael Snyder  <msnyder at vmware.com>
+
+	* gdbthread.h (print_thread_info): Change prototype.
+	* thread.c (print_thread_info): Accept char* instead of int for
+	requested_threads argument.  Use new function number_is_in_list
+	to determine which threads to list.
+	(info_threads_command): Pass char* to print_thread_info.
+	* cli/cli-utils.c (number_is_in_list): New function.
+	* cli/cli-utils.h (number_is_in_list): Export.
+	* mi/mi-main.c (mi_cmd_thread_info): Pass char* to
+	print_thread_info.
+	(print_one_inferior): Ditto.
+	(mi_cmd_list_thread_groups): Ditto.
+
+2011-02-21  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* common/Makefile.in (CFLAGS): New.
+	(COMPILE): Add $(CFLAGS).
+
+2011-02-21  Tom Tromey  <tromey at redhat.com>
+
+	* breakpoint.c (catch_syscall_command_1): Fix typo.
+
+2011-02-21  Tom Tromey  <tromey at redhat.com>
+
+	* reverse.c: Include cli-utils.h.
+	* printcmd.c: Include cli-utils.h.
+	(string_printf): Use skip_spaces.
+	* cli/cli-utils.h: New file.
+	* cli/cli-utils.c: New file.
+	* cli/cli-dump.h (skip_spaces): Move to cli-utils.h.
+	* cli/cli-dump.c (skip_spaces): Move to cli-utils.c.
+	* breakpoint.h (get_number, get_number_or_range): Move to
+	cli-utils.h.
+	* breakpoint.c: Include cli-utils.h.
+	(get_number_trailer, get_number, get_number_or_range)
+	(ep_skip_leading_whitespace): Move to cli-utils.c.
+	(create_breakpoint_sal, find_condition_and_thread)
+	(decode_static_tracepoint_spec, watch_command_1)
+	(watch_maybe_just_location, ep_parse_optional_if_clause)
+	(catch_fork_command_1, catch_exec_command_1)
+	(catch_syscall_command_1): Use skip_spaces, skip_to_space.
+	* Makefile.in (SUBDIR_CLI_OBS): Add cli-utils.o.
+	(SUBDIR_CLI_SRCS): Add cli-utils.c.
+	(HFILES_NO_SRCDIR): Add cli-utils.h.
+	(cli-utils.o): New target.
+
+2011-02-18  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	* remote.c (remote_close): Reset INFERIOR_PTID to NULL_PTID
+	before calling discard_all_inferiors.
+
+2011-02-21  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* opencl-lang.c (STRUCT_OCL_TYPE): Remove.
+	(struct builtin_opencl_type): Remove.
+	(builtin_opencl_type): Change return type to "struct type **".
+	(lookup_opencl_vector_type): Update caller.
+	(opencl_language_arch_info): Copy primitive type vector from gdbarch.
+	(build_opencl_types): Install plain array of "struct type *"
+	instead of "struct builtin_opencl_type".
+
+2011-02-21  Matthew Gretton-Dann <matthew.gretton-dann at arm.com>
+	    Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* arm-linux-nat.c: Include "observer.h" and "gdbthread.h".
+	(PTRACE_GETHBPREGS, PTRACE_SETHBPREGS): Define.
+	(struct arm_linux_hwbp_cap): New type.
+	(arm_linux_get_hwbp_cap): New function.
+	(arm_linux_get_hw_breakpoint_count): Likewise.
+	(arm_linux_get_hw_watchpoint_count): Likewise.
+	(arm_linux_can_use_hw_breakpoint): Likewise.
+	(arm_hwbp_type): New type.
+	(arm_hwbp_control_t): Likewise.
+	(struct arm_linux_hw_breakpoint): Likewise.
+	(struct arm_linux_thread_points): Likewise.
+	(arm_threads): New global variable.
+	(arm_linux_find_breakpoints_by_tid): New function.
+	(arm_hwbp_control_initialize): Likewise.
+	(arm_hwbp_control_is_enabled): Likewise.
+	(arm_hwbp_control_disable): Likewise.
+	(arm_linux_hw_breakpoint_initialize): Likewise.
+	(arm_linux_get_hwbp_type): Likewise.
+	(arm_linux_hw_watchpoint_initialize): Likewise.
+	(arm_linux_hw_breakpoint_equal): Likewise.
+	(arm_linux_insert_hw_breakpoint1): Likewise.
+	(arm_linux_remove_hw_breakpoint1): Likewise.
+	(arm_linux_insert_hw_breakpoint): Likewise.
+	(arm_linux_remove_hw_breakpoint): Likewise.
+	(arm_linux_region_ok_for_hw_watchpoint): Likewise.
+	(arm_linux_insert_watchpoint): Likewise.
+	(arm_linux_remove_watchpoint): Likewise.
+	(arm_linux_stopped_data_address): Likewise.
+	(arm_linux_stopped_by_watchpoint): Likewise.
+	(arm_linux_watchpoint_addr_within_range): Likewise.
+	(arm_linux_new_thread): Likewise.
+	(arm_linux_thread_exit): Likewise.
+	(_initialize_arm_linux_nat): Install hardware breakpoint/watchpoint
+	related target callbacks.  Register arm_linux_new_thread and
+	arm_linux_thread_exit.
+	* arm-tdep.h (arm_pc_is_thumb): Add prototype.
+	* arm-tdep.c (arm_pc_is_thumb): Make global.
+	(arm_gdbarch_init): Call set_gdbarch_have_nonsteppable_watchpoint.
+
+2011-02-21  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* breakpoint.c (update_watchpoint): Do not attempt to recreate
+	per-frame locations while within a function epilogue.
+
+2011-02-21  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	* ser-mingw.c (ser_windows_close): Reformat comment to better conform
+	to GNU coding standards.
+
+2011-02-21  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	Allow use of mingw native on Windows 95 OS.
+	* ser-mingw.c (CancelIo): New macro for dynamically loaded DLL entry.
+	(ser_windows_close): Only call CancelIo if function exists.
+	(_initialize_ser_windows): Use LoadLirary/GetProcAddress
+	to check for existence of CancelIo function in kernel32 DLL.
+
+2011-02-21  Hui Zhu  <teawater at gmail.com>
+
+	* Makefile.in (HFILES_NO_SRCDIR): Add printcmd.h.
+	* ax-gdb.c (gen_printf_expr_callback): New function.
+	* ax-gdb.h (gen_printf_expr_callback): Forward declare.
+	* ax-general.c (ax_memcpy): New function.
+	(ax_print): Handle "printf".
+	(ax_reqs): Ditto.
+	* ax.h (ax_memcpy): Forward declare.
+	* common/ax.def (invalid2): Removed.
+	(printf): New entry.
+	* printcmd.c (printcmd.h): New include.
+	(string_printf): New function.
+	(ui_printf): Removed.
+	(printf_command): Remove static.  Call string_printf.
+	(eval_command): Call string_printf.
+	* printcmd.h: New file.
+	* tracepoint.c (validate_actionline,
+	encode_actions_1): handle printf_command.
+
+2011-02-19  Michael Snyder  <msnyder at vmware.com>
+
+	* reverse.c (delete_one_bookmark): Argument is now bookmark
+	id rather than pointer to bookmark struct.
+	(delete_bookmark_command): Use get_number_or_range.
+	(goto_bookmark_command): Parse with get_number instead of strtoul.
+	(bookmark_1): New function.  Print info for one bookmark.
+	(bookmarks_info): Use get_number_or_range and bookmark_1.
+
+2011-02-18  Michael Snyder  <msnyder at vmware.com>
+
+	* thread.c (info_threads_command): Re-implement using
+	get_number_or_range.
+	(thread_apply_command): Ditto.
+
+2011-02-18  Tom Tromey  <tromey at redhat.com>
+
+	* common/ax.def: New file.
+	* ax.h (enum agent_op): Use ax.def.
+	* ax-general.c (aop_map): Use ax.def.
+
+2011-02-18  Tom Tromey  <tromey at redhat.com>
+
+	* ax-general.c (aop_map): Add pick and rot.
+	* dwarf2loc.c (compile_dwarf_to_ax) <DW_OP_over>: Reimplement.
+	<DW_OP_rot>: Implement.
+	* ax.h (enum agent_op) <aop_pick, aop_rot>: New constants.
+	(ax_pick): Declare.
+	* ax-general.c (ax_pick): New function.
+
+2011-02-18  Tom Tromey  <tromey at redhat.com>
+
+	* Makefile.in (HFILES_NO_SRCDIR): Don't mention ada-operator.inc.
+
+2011-02-18  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	    Tom Tromey  <tromey at redhat.com>
+
+	* cp-support.c (make_symbol_overload_list_namespace): Do not call
+	make_symbol_overload_list_block with NULL BLOCK.
+	* valarith.c (unop_user_defined_p): Resolve also TYPE_CODE_TYPEDEF.
+
+2011-02-18  Pedro Alves  <pedro at codesourcery.com>
+
+	* breakpoint.c (get_number_trailer): No longer accept a NULL PP.
+	* breakpoint.h (get_number_or_range): Declare.
+	* printcmd.c (ALL_DISPLAYS): Declare.
+	(delete_display): Reimplement taking a display pointer.
+	(undisplay_command): Accept a range of displays to delete, using
+	get_number_or_range.
+
+2011-02-18  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	* c-valprint.c (c_val_print): Add embedded_offset to address
+	for arrays of unspecified length.
+	* p-valprint.c (pascal_val_print): Likewise.
+
+2011-02-18  Yao Qi  <yao at codesourcery.com>
+
+	* gdb/arm-tdep.c (arm_displaced_step_copy_insn): Move code to ...
+	(arm_process_displaced_insn): .. here. Remove parameter INSN.
+	(thumb_process_displaced_insn): New.
+	* gdb/arm-linux-tdep.c (arm_linux_displaced_step_copy_insn): Update
+	call to arm_process_displaced_insn.
+	* gdb/arm-tdep.h : Update declaration of arm_process_displaced_insn.
+
+2011-02-17  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2loc.h (dwarf2_compile_expr_to_ax): Declare.
+	* dwarf2loc.c (dwarf2_compile_expr_to_ax): Rename from
+	compile_dwarf_to_ax.  No longer static.  Call
+	dwarf2_compile_cfa_to_ax.
+	(locexpr_tracepoint_var_ref): Update.
+	(loclist_tracepoint_var_ref): Update.
+	* dwarf2-frame.h (dwarf2_compile_cfa_to_ax): Declare.
+	* dwarf2-frame.c (execute_cfa_program): Remove 'this_frame'
+	argument; add 'gdbarch' and 'pc'.
+	(dwarf2_compile_cfa_to_ax): New function.
+	(dwarf2_frame_cache): Update.
+
+2011-02-17  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-lang.c (ada_type_of_array): Fix the size of the array
+	in the case of an unconstrained packed array.
+
+2011-02-17  Yao Qi  <yao at codesourcery.com>
+
+	* common/Makefile.in: Add more targets for make.
+
+2011-02-16  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2loc.c (unimplemented): Fix typo.
+
+2011-02-16  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2loc.c (unimplemented): Handle unnamed opcodes.
+	(compile_dwarf_to_ax) <default>: Use unimplemented.
+	<DW_OP_deref>: Update.
+	(disassemble_dwarf_expression): Update.
+	* dwarf2read.c (dwarf_stack_op_name): Remove 'def' argument.
+	(decode_locdesc): Update.
+	* dwarf2expr.h (dwarf_stack_op_name): Update.
+
+2011-02-16  Tom Tromey  <tromey at redhat.com>
+
+	* ax.h (struct aop_map) <name>: Now const.
+
+2011-02-16  Tom Tromey  <tromey at redhat.com>
+
+	* ax-gdb.c.c (gen_expr) <UNOP_MEMVAL>: Handle value kinds other
+	than axs_rvalue.
+
+2011-02-16  Yao Qi  <yao at codesourcery.com>
+
+	* infrun.c (get_displaced_step_closure_by_addr): New.
+	* inferior.h: Declare it.
+	* arm-tdep.c: (arm_pc_is_thumb): Call
+	get_displaced_step_closure_by_addr.  Adjust MEMADDR if it
+	returns non-NULL.
+
+2011-02-16  Pedro Alves  <pedro at codesourcery.com>
+	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	gdb/
+	* tracepoint.c (memrange_sortmerge): Fix list A's end calculation.
+
+2011-02-16  Pedro Alves  <pedro at codesourcery.com>
+	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* value.c (value_contents_copy_raw): Extend describing comment.
+	Assert that the destination contents we're overwriting are wholly
+	available.
+	(value_contents_copy): Extend describing comment.
+
+2011-02-16  Pedro Alves  <pedro at codesourcery.com>
+	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* value.c (value_available_contents_eq): Remove redundant local
+	variables.  Fix available contents comparision.
+	* value.h (value_available_contents_eq): Extend describing
+	comment.
+
+2011-02-16  Yao Qi  <yao at codesourcery.com>
+
+	* thread.c (info_threads_command): Add missing i18n markup and remove
+	trailing newline.
+
+2011-02-15  Paul Pluzhnikov  <ppluzhnikov at google.com>
+
+	* breakpoint.c (longjmp_names): New variable.
+	(struct breakpoint_objfile_data): New type.
+	(breakpoint_objfile_key): New variable.
+	(msym_not_found): New variable.
+	(msym_not_found_p): New predicate.
+	(get_breakpoint_objfile_data): New function.
+	(create_overlay_event_breakpoint): Check per-objfile cache for
+	symbols first.
+	(create_longjmp_master_breakpoint): Likewise.
+	(create_std_terminate_master_breakpoint): Likewise.
+	(create_exception_master_breakpoint): Likewise.
+	(_initialize_breakpoint): Register per-objfile data key.
+
+2011-02-15  Paul Pluzhnikov  <ppluzhnikov at google.com>
+
+	* breakpoint.c ((create_overlay_event_breakpoint): Const-propagate
+	parameter value.
+	(create_longjmp_master_breakpoint): Loop over longjmp names.
+	(create_std_terminate_master_breakpoint): Const-propagate parameter
+	value.
+	(update_breakpoints_after_exec): Adjust.
+	(breakpoint_re_set): Adjust.
+
+2011-02-15  Michael Snyder  <msnyder at vmware.com>
+
+	* thread.c (info_threads_command): Process arg as thread id,
+	or list of thread ids.
+	(thread_find_command): New command.
+	(_initialize_thread): Document argument for info threads.
+	Document 'thread find' command.
+	* NEWS: Document new command "thread find".
+
+2011-02-15  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* Makefile.in (ACLOCAL_AMFLAGS): Add `-I ../config'.
+	* aclocal.m4: Regenerated with aclocal-1.11.1.
+	* common/configure: Regenerate with autoconf-2.64.
+
+2011-02-15  Ken Werner  <ken.werner at de.ibm.com>
+
+	* opencl-lang.c (build_opencl_types): Set the size of the built-in
+	bool data type to a size of one byte.
+
+2011-02-15  Pedro Alves  <pedro at codesourcery.com>
+	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* target.c (memory_xfer_live_readonly_partial): Document where to
+	look for interface description.
+
+2011-02-15  Yao Qi  <yao at codesourcery.com>
+
+	PR tdep/12352
+	* arm-tdep.c (copy_ldr_str_ldrb_strb): Replace PC with SP in
+	order to store PC value on stack instead of text section.
+
+2011-02-15  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* rs6000-tdep.c (IS_EFP_PSEUDOREG): Use correct constant for
+	the EFP register set size.
+	(efpr_pseudo_register_read): Use regcache_raw_read_part to read
+	data from the VMX register.
+	(efpr_pseudo_register_write): Use regcache_raw_write_part to read
+	and write data from/to the VMX register.
+
+2011-02-14  Michael Snyder  <msnyder at vmware.com>
+
+	* command.h (enum command_class): New class 'no_set_class', for
+	"show" commands without a corresponding "set" command.
+	* value.c (_initialize_values): Use 'no_set_class' for "show values".
+	* copying.c (_initialize_copying): Ditto for "show copying" and
+	"show warranty".
+	* cli/cli-cmds.c (init_cli_cmds): Ditto for "show commands" and
+	"show version".
+	* cli/cli-setshow.c (cmd_show_list): Skip "show" commands for
+	which there is no corresponding "set" command (eg. "show copying").
+
+2011-02-14  Pedro Alves  <pedro at codesourcery.com>
+	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* exec.c (section_table_available_memory): Change `len' parameter
+	type to ULONGEST.
+	* exec.h (section_table_available_memory): Ditto.
+	* value.h (read_value_memory): Rename the `offset' parameter to
+	`embedded_offset'.
+
+2011-02-14  Pedro Alves  <pedro at codesourcery.com>
+	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* memrange.c (compare_mem_ranges): Mention sort order in
+	describing comment.
+	(normalize_mem_ranges): Add comment.  Fix ra->length calculation.
+	* tracepoint.c (traceframe_available_memory): Extend comment to
+	mention what happens to RESULT when the target does not support
+	the query.
+
+2011-02-14  Pedro Alves  <pedro at codesourcery.com>
+	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* value.c (mark_value_bytes_unavailable): Fix indexing the `bef'
+	range.
+
+2011-02-14  Pedro Alves  <pedro at codesourcery.com>
+
+	* value.c (value_bits_valid, value_bits_synthetic_pointer):
+	No longer handle NULL values.
+
+2011-02-14  Pedro Alves  <pedro at codesourcery.com>
+
+	* exceptions.h (NOT_AVAILABLE_ERROR): New error.
+	* value.c: Include "exceptions.h".
+	(require_available): Throw NOT_AVAILABLE_ERROR instead of a
+	generic error.
+	* cp-abi.c: Include gdb_assert.h.
+	(baseclass_offset): Add `embedded_offset' and `val' parameters.
+	Assert the method is implemented.  Wrap NOT_AVAILABLE_ERROR
+	errors.
+	* cp-abi.h (baseclass_offset): Add `embedded_offset' and `val'
+	parameters.  No longer returns -1 on error.
+	(struct cp_abi_ops) <baseclass_offset>: Add `embedded_offset' and
+	`val' parameters.
+	* cp-valprint.c: Include exceptions.h.
+	(cp_print_value): Handle NOT_AVAILABLE_ERROR errors when fetching
+	the baseclass_offset.  Handle unavailable base classes.  Use
+	val_print_invalid_address.
+	* p-valprint.c: Include exceptions.h.
+	(pascal_object_print_value): Handle NOT_AVAILABLE_ERROR errors
+	when fetching the baseclass_offset.  No longer expect
+	baseclass_offset returning -1.  Handle unavailable base classes.
+	Use val_print_invalid_address.
+	* valops.c (dynamic_cast_check_1): Rename `contents' parameter to
+	`valaddr' parameter, and change its type to gdb_byte pointer.  Add
+	`embedded_offset' and `val' parameters.  Adjust.
+	(dynamic_cast_check_2): Rename `contents' parameter to `valaddr'
+	parameter, and change its type to gdb_byte pointer.  Add
+	`embedded_offset' and `val' parameters.  Adjust.  No longer expect
+	baseclass_offset returning -1.
+	(value_dynamic_cast): Use value_contents_for_printing rather than
+	value_contents.  Adjust.
+	(search_struct_field): No longer expect baseclass_offset returning
+	-1.
+	(search_struct_method): If reading memory from the target is
+	necessary, wrap it in a new value to pass to baseclass_offset.  No
+	longer expect baseclass_offset returning -1.
+	(find_method_list): No longer expect baseclass_offset returning
+	-1.  Use value_contents_for_printing rather than value_contents.
+	* valprint.c (val_print_invalid_address): New function.
+	* valprint.h (val_print_invalid_address): Declare.
+	* gdbtypes.c (is_unique_ancestor_worker): New `embedded_offset'
+	and `val' parameters.  No longer expect baseclass_offset returning
+	-1.  Adjust.
+	* gnu-v2-abi.c: Include "exceptions.h".
+	(gnuv2_baseclass_offset): Add `embedded_offset' and `val'
+	parameters.  Handle unavailable memory.  Recurse through
+	gnuv2_baseclass_offset directly, rather than through
+	baseclass_offset.  No longer returns -1 on not found, instead
+	throw an error.
+	* gnu-v3-abi.c (gnuv3_baseclass_offset): Add `embedded_offset' and
+	`val' parameters.  Adjust.
+
+2011-02-14  Pedro Alves  <pedro at codesourcery.com>
+
+	* tracepoint.c (memrange_sortmerge): Don't merge ranges that are
+	almost but not quite adjacent.
+
+2011-02-14  Pedro Alves  <pedro at codesourcery.com>
+
+	* value.h (value_entirely_available): Declare.
+	* value.c (value_entirely_available): New function.
+	* c-valprint.c (c_value_print): Don't try fetching the pointer's
+	real type if the pointer is unavailable.
+
+2011-02-14  Pedro Alves  <pedro at codesourcery.com>
+
+	* valops.c (value_repeat): Use read_value_memory instead of
+	read_memory.
+
+2011-02-14  Pedro Alves  <pedro at codesourcery.com>
+
+	* value.h (value_contents_copy, value_contents_copy_raw): Declare.
+	* value.c (value_contents_copy_raw, value_contents_copy): New
+	functions.
+	(value_primitive_field): Use value_contents_copy_raw instead of
+	memcpy.
+	* valops.c (value_fetch_lazy): Use value_contents_copy instead of
+	memcpy.
+	(value_array, value_slice): Ditto.
+	* valarith.c (value_subscripted_rvalue): Use
+	value_contents_copy_raw instead of memcpy.
+
+2011-02-14  Pedro Alves  <pedro at codesourcery.com>
+
+	<unavailable> references.
+
+	* valops.c (get_value_at): Use value_from_contents_and_address,
+	avoiding read_memory.
+
+2011-02-14  Pedro Alves  <pedro at codesourcery.com>
+
+	* c-valprint.c (c_val_print): Print a string with unavailable
+	contents as an array.
+
+2011-02-14  Pedro Alves  <pedro at codesourcery.com>
+
+	* value.h (unpack_bits_as_long): Delete declaration.
+	(unpack_value_bits_as_long): Declare.
+	(unpack_value_field_as_long): Declare.
+	(value_field_bitfield): Declare.
+	* value.c (unpack_bits_as_long): Rename to...
+	(unpack_value_bits_as_long_1): ... this.  Add embedded_offset and
+	value parameters.  Return the extracted result in a new output
+	parameter.  If the value contents are unavailable, return false,
+	otherwise return true.
+	(unpack_value_bits_as_long): New.
+	(unpack_field_as_long): Rename to...
+	(unpack_value_field_as_long_1): ... this.  Add embedded_offset and
+	Add embedded_offset and value parameters.  Return the extracted
+	result in a new output parameter. If the value contents are
+	unavailable, return false, otherwise return true.
+	(unpack_value_field_as_long): New.
+	(unpack_field_as_long_1): New.
+	(unpack_field_as_long): Reimplement as wrapper around
+	unpack_value_field_as_long_1.
+	(value_field_bitfield): New function.
+	* valops.c (value_fetch_lazy): When fetching a bitfield, use
+	unpack_value_bits_as_long.  Mark the value as unavailable, if it
+	is unavailable.
+	* jv-valprint.c (java_print_value_fields): Use
+	value_field_bitfield.
+	* p-valprint.c (pascal_object_print_value_fields): Use
+	value_field_bitfield.
+	* cp-valprint.c (cp_print_value_fields): Use value_field_bitfield.
+
+2011-02-14  Pedro Alves  <pedro at codesourcery.com>
+
+	* value.c (get_internalvar_integer): Also return the int value of
+	TYPE_CODE_INT INTERNALVAR_VALUE values.
+	(set_internalvar): Don't special case TYPE_CODE_INT.
+
+2011-02-14  Pedro Alves  <pedro at codesourcery.com>
+
+	* value.c (struct internalvar) <enum internalvar_kind>: Remove
+	INTERNALVAR_POINTER.
+	<pointer>: Delete.
+	(value_of_internalvar): Remove INTERNALVAR_POINTER handling.
+	(set_internalvar): Remove special TYPE_CODE_PTR handling.
+	(preserve_one_internalvar): Remove INTERNALVAR_POINTER handling.
+
+2011-02-14  Pedro Alves  <pedro at codesourcery.com>
+
+	* value.h (value_available_contents_eq): Declare.
+	* value.c (find_first_range_overlap): New function.
+	(value_available_contents_eq): New function.
+	* valprint.c (val_print_array_elements): Use
+	value_available_contents_eq.
+	* ada-valprint.c (val_print_packed_array_elements): Use
+	value_available_contents_eq.
+	* jv-valprint.c (java_value_print): Use
+	value_available_contents_eq.
+
+2011-02-14  Pedro Alves  <pedro at codesourcery.com>
+
+	* target.c (target_read_live_memory): New function.
+	(memory_xfer_live_readonly_partial): New.
+	(memory_xfer_partial): If reading from a traceframe, fallback to
+	reading unavailable read-only memory from read-only regions of
+	live target memory.
+	* tracepoint.c (disconnect_tracing): Adjust.
+	(set_current_traceframe): New, factored out from
+	set_traceframe_number.
+	(set_traceframe_number): Reimplement to only change the traceframe
+	number on the GDB side.
+	(do_restore_current_traceframe_cleanup): Adjust.
+	(make_cleanup_restore_traceframe_number): New.
+	(cur_traceframe_number): New global.
+	(tfile_open): Set cur_traceframe_number to no traceframe.
+	(set_tfile_traceframe): New function.
+	(tfile_trace_find): If looking up a traceframe using any method
+	other than by number, make sure the current tfile traceframe
+	matches gdb's current traceframe.  Update the current tfile
+	traceframe if the lookup succeeded.
+	(tfile_fetch_registers, tfile_xfer_partial)
+	(tfile_get_trace_state_variable_value): Make sure the remote
+	traceframe matches gdb's current traceframe.
+	* remote.c (remote_traceframe_number): New global.
+	(remote_open_1): Set it to -1.
+	(set_remote_traceframe): New function.
+	(remote_fetch_registers, remote_store_registers)
+	(remote_xfer_memory, remote_xfer_partial)
+	(remote_get_trace_state_variable_value): Make sure the remote
+	traceframe matches gdb's current traceframe.
+	(remote_trace_find): If looking up a traceframe using any method
+	other than by number, make sure the current remote traceframe
+	matches gdb's current traceframe.  Update the current remote
+	traceframe if the lookup succeeded.
+	* infrun.c (fetch_inferior_event): Adjust.
+	* tracepoint.h (set_current_traceframe): Declare.
+	(get_traceframe_number, set_traceframe_number): Add describing
+	comments.
+
+2011-02-14  Pedro Alves  <pedro at codesourcery.com>
+
+	Mark pieces of values as unavailable if the corresponding memory
+	is unavailable.
+
+	* valops.c: Include tracepoint.h.
+	(value_fetch_lazy): Use read_value_memory.
+	(read_value_memory): New.
+	* value.h (read_value_memory): Declare.
+	* dwarf2loc.c (read_pieced_value): Use read_value_memory.
+	* exec.c (section_table_available_memory): New function.
+	* exec.h (section_table_available_memory): Declare.
+
+2011-02-14  Pedro Alves  <pedro at codesourcery.com>
+
+	* Makefile.in (SFILES): Add memrange.c.
+	(HFILES_NO_SRCDIR): Add memrange.h.
+	(COMMON_OBS): Add memrange.o.
+	* memrange.c: New file.
+	* memrange.h: New file.
+	* tracepoint.c: Include memrange.h.
+	(struct mem_range): Delete.
+	(mem_range_s): Delete.
+	(traceframe_available_memory): New function.
+	* tracepoint.h (traceframe_available_memory): Declare.
+
+2011-02-14  Pedro Alves  <pedro at codesourcery.com>
+
+	* target.h (struct traceframe_info): Forward declare.
+	(enum target_object): Add TARGET_OBJECT_TRACEFRAME_INFO.
+	(struct target_ops) <to_traceframe_info>: New field.
+	(target_traceframe_info): New.
+	* target.c (update_current_target): Inherit and default
+	to_traceframe_info.
+	* remote.c (PACKET_qXfer_traceframe_info): New.
+	(remote_protocol_features): Register qXfer:traceframe-info:read.
+	(remote_xfer_partial): Handle TARGET_OBJECT_TRACEFRAME_INFO.
+	(remote_traceframe_info): New.
+	(init_remote_ops): Install it.
+	(_initialize_remote): Install "set/show remote traceframe-info"
+	commands.
+	* tracepoint.h (parse_traceframe_info): Declare.
+	* tracepoint.c (struct mem_range): New.
+	(mem_range_s): New typedef.
+	(struct traceframe_info): New.
+	(traceframe_info): New global.
+	(free_traceframe_info): New function.
+	(clear_traceframe_info): New function.
+	(start_tracing, tfind_1, set_traceframe_number): Clear traceframe
+	info.
+	(build_traceframe_info): New function.
+	(tfile_traceframe_info): New function.
+	(init_tfile_ops): Install tfile_traceframe_info.
+	(traceframe_info_start_memory, free_result): New functions.
+	(memory_attributes, traceframe_info_elements): New globals.
+	(parse_traceframe_info, get_traceframe_info): New functions.
+	* features/traceframe-info.dtd: New file.
+	* Makefile.in (XMLFILES): Add traceframe-info.dtd.
+
+2011-02-14  Pedro Alves  <pedro at codesourcery.com>
+
+	Base support for <unavailable> value contents.
+
+	* value.h (value_bytes_available): Declare.
+	(mark_value_bytes_unavailable): Declare.
+	* value.c (struct range): New struct.
+	(range_s): New typedef.
+	(ranges_overlap): New function.
+	(range_lessthan): New function.
+	(ranges_contain_p): New function.
+	(struct value) <unavailable>: New field.
+	(value_bytes_available): New function.
+	(mark_value_bytes_unavailable): New function.
+	(require_not_optimized_out): Constify parameter.
+	(require_available): New function.
+	(value_contents_all, value_contents): Require all bytes be
+	available.
+	(value_free): Free `unavailable'.
+	(value_copy): Copy `unavailable'.
+	* valprint.h (val_print_unavailable): Declare.
+	* valprint.c (valprint_check_validity): Rename `offset' parameter
+	to `embedded_offset'.  If printing a scalar, check whether the
+	value chunk is available.
+	(val_print_unavailable): New.
+	(val_print_scalar_formatted): Check whether the value is
+	available.
+	* python/py-prettyprint.c (apply_val_pretty_printer): Refuse
+	pretty-printing unavailable values.
+
+2011-02-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix const/volatile qualifiers of C++ types, PR c++/12328.
+	* c-typeprint.c (c_type_print_args): Update the function comment.  New
+	variable param_type, initialize it.  Remove const/volatile qualifiers
+	for language_cplus and !show_artificial.  Use param_type.
+
+2011-02-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* symtab.c (find_pc_sect_line): New variable objfile, initialize it
+	from S.  Iterate S using ALL_OBJFILE_SYMTABS.  Verify BV for each S.
+	* symtab.h (struct symtab) <next>: Comment extension.
+
+2011-02-12  Yao Qi  <yao at codesourcery.com>
+
+	* Makefile.in (CLEANDIRS): Remove duplicated common dir.
+
+2011-02-11  Yao Qi  <yao at codesourcery.com>
+
+	* common/Makefile.in: Add copyright header.
+
+2011-02-11  Pedro Alves  <pedro at codesourcery.com>
+
+	* infrun.c (proceed): Move switching out and in of tfind mode from
+	here ...
+	(fetch_inferior_event): ... to here.
+
+2011-02-11  Yao Qi  <yao at codesourcery.com>
+
+	* Makefile.in: Remove signals.o from COMMON_OBS.  Link
+	libcommon.a.
+	* configure.ac: Add common to sub dir.
+	* configure: Regenerate.
+
+2011-02-11  Yao Qi  <yao at codesourcery.com>
+
+	Build libcommon.a.
+
+	* common/Makefile.in: New.
+	* common/configure.ac: New.
+	* common/aclocal.m4: New.
+	* common/configure: Generate.
+
+2011-02-10  Pedro Alves  <pedro at codesourcery.com>
+
+	* vec.h (VEC_block_remove): Place VEC_ASSERT_INFO on the right
+	side of the parenthesis.
+
+	Merge from GCC:
+	2010-07-13  Jakub Jelinek  <jakub at redhat.com>
+	* vec.h (VEC_block_remove): Fix comment.
+
+2011-02-08  Michael Snyder  <msnyder at vmware.com>
+
+	* linux-nat.c (linux_nat_filter_event): Fix typo in comment.
+
+2011-02-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* i386-tdep.c (i386_process_record): Rename l suffixes to d suffixes
+	in comments for pcmpgtd, pcmpeqd, psubd, paddd, pcmpgtd, pcmpeqd,
+	psubd and paddd.
+
+2011-02-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	PR 12361.
+	* i386-tdep.c (i386_process_record) <0x660f3807>: Fix the comment to
+	phsubsw.
+	(i386_process_record) <lddqu>: Fix the opcode to 0xf20ff0.
+	(i386_process_record) <0x0f3807>: Fix the comment to phsubsw.
+
+2011-02-08  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* dwarf2read.c (read_subroutine_type): Set special calling
+	convention flag for functions compiled by IBM XL C for OpenCL.
+	* ppc-sysv-tdep.c: Include "dwarf2.h"
+	(ppc_sysv_abi_push_dummy_call): Implement IBM OpenCL vector types
+	calling convention.
+	(do_ppc_sysv_return_value): Add FUNC_TYPE argument.  Implement
+	IBM OpenCL vector types calling convention.
+	(ppc_sysv_abi_return_value): Pass through FUNC_TYPE.
+	(ppc_sysv_abi_broken_return_value): Likewise.
+	(ppc64_sysv_abi_push_dummy_call): Implement IBM OpenCL vector
+	types calling convention.
+	(ppc64_sysv_abi_return_value): Likewise.
+	* spu-tdep.c: Include "dwarf2.h"
+	(spu_return_value): Implement IBM OpenCL vector types calling
+	convention.
+
+2011-02-08  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* ppc-sysv-tdep.c (ppc64_sysv_abi_push_dummy_call): Implement
+	correct ABI for AltiVec vector arguments.
+
+2011-02-07  Pedro Alves  <pedro at codesourcery.com>
+
+	* valprint.c (val_print): Extend comment.
+	* ada-valprint.c (ada_valprint): Rewrite comment deferring
+	interface explanation to val_print.
+	(ada_val_print_array): Adjust comment to current interface.
+	(print_field_values): Adjust comment to current interface.
+	* c-valprint.c (c_val_print): Rewrite comment deferring interface
+	explanation to val_print.
+	* f-valprint.c (f_val_print): Ditto.
+	* jv-valprint.c (java_val_print): Ditto.
+	* m2-valprint.c (m2_val_print): Ditto.
+	* p-valprint.c (pascal_val_print): Ditto.
+
+2011-02-07  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* breakpoint.c (parse_breakpoint_sals): Fix description.
+
+2011-02-04  Sami Wagiaalla  <swagiaal at redhat.com>
+	    Oguz Kayral <oguzkayral at gmail.com>
+
+	* python/py-inferior.c (python_on_normal_stop): New function.
+	(python_on_resume): New function.
+	(python_inferior_exit): New function.
+	(gdbpy_initialize_inferior): Add normal_stop, target_resumed, and
+	inferior_exit observers.
+	* python/py-evtregistry.c: New file.
+	* python/py-threadevent.c : New file.
+	* python/py-event.c: New file.
+	* python/py-evts.c: New file.
+	* python/py-continueevent.c: New file.
+	* python/py-bpevent.c: New file.
+	* python/py-signalevent.c: New file.
+	* python/py-exetiedevent.c: New file.
+	* python/py-breakpoint.c (gdbpy_breakpoint_from_bpstats): New function.
+	Move struct breakpoint_object from here...
+	* python/python-internal.h: ... to here.
+	* python/py-event.h: New file.
+	* python/py-events.h: New file.
+	* Makefile.in (SUBDIR_PYTHON_OBS): Add py-breakpointstopevent.o,
+	py-continueevent.o, py-event.o, py-eventregistry.o, py-events.o,
+	py-exitedevent.o, py-signalstopevent.o, and py-stopevent.o.
+	(SUBDIR_PYTHON_SRCS): Add py-breakpointstopevent.c,
+	py-continueevent.c, py-event.c, py-eventregistry.c, py-events.c,
+	py-exitedevent.c, py-signalstopevent.c, and py-stopevent.c.
+	Add build rules for all the above.
+
+2011-02-04  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2read.c (dwarf2_section_empty_p): New function.
+	(dwarf2_read_section): Use dwarf2_section_empty_p.
+	(dwarf2_section_size): New function.
+	(dwarf2_get_section_info): Unconditionally read section.
+	(dwarf2_read_index): Use dwarf2_section_empty_p.
+	(partial_read_comp_unit_head): Use dwarf2_section_size.
+	(dwarf2_symbol_mark_computed): Likewise.
+
+2011-02-04 David Daney <ddaney at caviumnetworks.com>
+
+	* NEWS: Add item for "catch syscall" on mips*-linux* targets.
+
+2011-02-04 David Daney <ddaney at caviumnetworks.com>
+
+	* mips-linux-tdep.c: Include xml-syscall.h.
+	(mips_linux_get_syscall_number): New function.
+	(mips_linux_init_abi): Add calls to
+	mips_linux_get_syscall_number() and set_xml_syscall_file_name().
+	* data-directory/Makefile.in (SYSCALLS_FILES): Add
+	mips-o32-linux.xml, mips-n32-linux.xml and mips-n64-linux.xml
+	* syscalls/mips-n32-linux.xml: New file.
+	* syscalls/mips-n64-linux.xml: New file.
+	* syscalls/mips-o32-linux.xml: New file.
+
+2011-02-04  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* dwarf2read.c (dwarf2_ranges_read): Skip empty range entries.
+	Complain about inverted range entries.
+	(dwarf2_record_block_ranges): Likewise.
+
+2011-02-04  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	Fix some typos.
+	* breakpoint.c (update_watchpoint): Fix name of the
+	update_global_location_list function.
+	(print_one_breakpoint): Fix typo.
+	(_initialize_breakpoint): Remove extra space in hbreak help
+	string.
+	* breakpoint.h (struct bp_location) <length>: Fix field
+	description.
+
+2011-02-04  Pedro Alves  <pedro at codesourcery.com>
+
+	* regcache.c (registers_changed_ptid): Don't explictly always
+	clear `current_regcache'.  Only clear current_thread_ptid and
+	current_thread_arch when PTID matches.  Only reinit the frame
+	cache if PTID matches the current inferior_ptid.  Move alloca(0)
+	call to ...
+	(registers_changed): ... here.
+
+2011-02-03  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* arm-tdep.c (arm_skip_stack_protector): Accept any symbol that
+	starts with __stack_chk_guard as stack guard symbol.
+
+2011-02-03  Andrew Burgess  <aburgess at broadcom.com>
+
+	* disasm.c (compare_lines): Handle the end of sequence markers
+	within the line table to better support disassembling over
+	compilation unit boundaries.
+
+2011-02-02  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* arm-tdep.c (skip_prologue_function): Add GDBARCH and IS_THUMB
+	arguments.  Skip in-prologue calls to glibc __aeabi_read_tp
+	implementation even if no symbols are available.
+	(thumb_analyze_prologue): Update call to skip_prologue_function.
+	(arm_analyze_prologue): Likewise.
+
+2011-02-02  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* arm-tdep.c: Include "observer.h".
+	(arm_prologue_this_id): Use frame PC if get_frame_func returns 0.
+	(arm_exidx_data_key): New static variable.
+	(struct arm_exidx_entry, arm_exidx_entry_s): New data types.
+	(struct arm_exidx_data): Likewise.
+	(arm_exidx_data_free): New function.
+	(arm_compare_exidx_entries): Likewise.
+	(arm_obj_section_from_vma): Likewise.
+	(arm_exidx_new_objfile): Likewise.
+	(arm_find_exidx_entry): Likewise.
+	(arm_exidx_fill_cache): Likewise.
+	(arm_exidx_unwind_sniffer): Likewise.
+	(arm_exidx_unwind): New global variable.
+	(arm_gdbarch_init): Append unwinder arm_exidx_unwind.
+	(_initialize_arm_tdep): Attach arm_exidx_new_objfile to new_objfile
+	observer.  Register arm_exidx_data_key as objfile data.
+
+2011-02-02  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* arm-tdep.c (arm_analyze_load_stack_chk_guard): Avoid build break
+	due to accessing uninitialized variable.  Fix indentation.
+
+2011-02-02  Pedro Alves  <pedro at codesourcery.com>
+
+	* c-valprint.c (c_value_print): When doing virtual base pointer
+	adjustment, create a new value with adjusted contents rather than
+	changing the contents of the value being printed (and getting it
+	wrong).
+
+2011-02-02  Pedro Alves  <pedro at codesourcery.com>
+
+	* xml-support.c (xml_find_attribute): New.
+	(xinclude_start_include): Use it.
+	* xml-support.h (xml_find_attribute): Declare.
+	* memory-map.c (memory_map_start_memory)
+	(memory_map_start_property): Use xml_find_attribute.
+	* osdata.c (osdata_start_osdata, osdata_start_column): Use
+	xml_find_attribute.
+	* remote.c (start_thread): Use xml_find_attribute.
+	* solib-target.c (library_list_start_segment)
+	(library_list_start_section, library_list_start_library)
+	(library_list_start_list): Use xml_find_attribute.
+	* xml-tdesc.c (tdesc_start_target, tdesc_start_feature)
+	(tdesc_start_union, tdesc_start_struct, tdesc_start_flags)
+	(tdesc_start_field): Use xml_find_attribute.
+
+2011-02-02  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* opencl-lang.c (STRINGIFY): Rename to OCL_STRING.
+	(BUILD_OCL_VTYPES): Update.
+
+2011-02-02  Joel Brobecker  <brobecker at adacore.com>
+
+	* configure.ac: Work around non-GNU sed limitation when computing
+	python version number.
+	* configure: Regenerate.
+
+2011-02-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix debug printing of TYPE_INSTANCE.
+	* expprint.c (print_subexp_standard) <TYPE_INSTANCE>: New.
+	(dump_subexp_body_standard) <TYPE_INSTANCE>: New.
+
+2011-02-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix debug printing of BINOP_IN, OP_OBJC_MSGCALL,
+	OP_F77_UNDETERMINED_ARGLIST, OP_COMPLEX, OP_OBJC_SELECTOR, OP_NAME,
+	OP_OBJC_NSSTRING, OP_F90_RANGE and OP_DECFLOAT.
+	* ada-operator.inc: Rename the file to ...
+	* ada-operator.def: ... here, wrap all the entries by macro OP.
+	* expprint.c (op_name_standard): Remove all the entries.  Include
+	"std-operator.def" instead.
+	* expression.h (enum exp_opcode): Include "std-operator.def" and
+	"ada-operator.def".  Move all the entries ...
+	* std-operator.def: ... here, wrap all the entries by macro OP.
+
+2011-01-31  Paul Pluzhnikov  <ppluzhnikov at google.com>
+
+	* breakpoint.h (remove_jit_event_breakpoints): New prototype.
+	* breakpoint.c (remove_jit_event_breakpoints): New function.
+	* jit.c (jit_descriptor_addr): Delete.
+	(registering_code): Delete.
+	(clear_int): Delete.
+	(jit_inferior_data): New variable.
+	(struct jit_inferior_data): New type.
+	(get_jit_inferior_data): New function.
+	(jit_inferior_data_cleanup): New function.
+	(jit_read_descriptor): Adjust.
+	(jit_register_code): Adjust.
+	(jit_breakpoint_re_set_internal): New function; move code here ...
+	(jit_inferior_init): ... from here.
+	(jit_breakpoint_re_set): Adjust.
+	(jit_reset_inferior_data_and_breakpoints): New function.
+	(jit_inferior_created_observer): Adjust.
+	(jit_inferior_exit_hook): Adjust.
+	(jit_executable_changed_observer): New function.
+	(jit_event_handler): Adjust.
+	(_initialize_jit): Adjust.
+
+2011-01-31  Michael Snyder  <msnyder at vmware.com>
+
+	* m32r-tdep.c (m32r_gdbarch_init): Replace accidentally deleted
+	line.
+
+2011-01-31  Tom Tromey  <tromey at redhat.com>
+
+	PR python/12216:
+	* python/python.c (execute_gdb_command): Call
+	prevent_dont_repeat.
+	* top.c (suppress_dont_repeat): New global.
+	(dont_repeat): Use it.
+	(prevent_dont_repeat): New function.
+	* command.h (prevent_dont_repeat): Declare.
+
+2011-01-31  Tom Tromey  <tromey at redhat.com>
+
+	* infcmd.c (finish_backward): Use breakpoint_set_silent.
+	* python/py-breakpoint.c (bppy_set_silent): Use
+	breakpoint_set_silent.
+	(bppy_set_thread): Use breakpoint_set_thread.
+	(bppy_set_task): Use breakpoint_set_task.
+	* breakpoint.h (breakpoint_set_silent, breakpoint_set_thread)
+	(breakpoint_set_task): Declare.
+	(make_breakpoint_silent): Remove.
+	* breakpoint.c (breakpoint_set_silent): New function.
+	(breakpoint_set_thread): Likewise.
+	(breakpoint_set_task): Likewise.
+	(make_breakpoint_silent): Remove.
+
+2011-01-31  Tom Tromey  <tromey at redhat.com>
+
+	* breakpoint.h (user_breakpoint_p): Declare.
+	* breakpoint.c (user_breakpoint_p): New function.
+	(breakpoint_1): Use it.
+	(save_breakpoints): Likewise.
+
+2011-01-31  Joel Brobecker  <brobecker at adacore.com>
+
+	* configure.ac: Add handling of Python distribution on Windows.
+	* python-config.py: If the LIBS, SYSLIBS, LIBPL and/or LINKFORSHARED
+	sysconfig variables are not defined, then do not use them.
+	On Windows, if LIBPL is not defined, then use prefix + '/libs'
+	instead.  On Windows, return all paths using forward-slashes
+	rather than backslashes.
+
+2011-01-31  Joel Brobecker  <brobecker at adacore.com>
+
+	* configure.ac: Remove fallback behavior for building
+	against Python.  Remove tweaking of Python include path.
+	Add PYTHON_CPPFLAGS and PYTHON_LIBS substitution.
+	(AC_TRY_LIBPYTHON):  Adjust program used in linking test.
+	If link is successful, set PYTHON_CPPFLAGS and PYTHON_LIBS.
+	Always restore CPPFLAGS and LIBS after linking test.
+	* configure: Regenerated.
+	* Makefile.in (INTERNAL_CPPFLAGS): Add @PYTHON_CPPFLAGS at .
+	(INSTALLED_LIBS, CLIBS): Add @PYTHON_LIBS at .
+	* python/python-internal.h: Adjust includes of Python .h files.
+
+2011-01-31  Joel Brobecker  <brobecker at adacore.com>
+
+	* tracepoint.c (traceframe_walk_blocks): Add missing i18n markup
+	in error message.
+
+2011-01-31  Joel Brobecker  <brobecker at adacore.com>
+
+	* inflow.c (gdb_has_a_terminal): Fix typo in interactive_mode
+	value test.
+
+2011-01-31  Yao Qi  <yao at codesourcery.com>
+
+	* arm-linux-nat.c: Update calls to regcache_register_status
+	instead of regcache_valid_p.
+	* aix-thread.c: Likewise.
+	* i386gnu-nat.c: Likewise.
+
+2011-01-29  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix crash.
+	* valops.c (compare_parameters): Verify TYPE_NFIELDS before
+	touching TYPE_FIELD_ARTIFICIAL.
+
+2011-01-28  Richard Earnshaw  <rearnsha at arm.com>
+
+	* MAINTAINERS: Move myself from Responsible Maintainers to Authorized
+	Committers.
+
+2011-01-28  Pedro Alves  <pedro at codesourcery.com>
+
+	* tracepoint.c (tfile_xfer_partial): If there's no traceframe
+	selected, don't try iterating over the traceframe's blocks.
+	(tfile_has_stack): If there's no traceframe selected, then there's
+	no stack.
+	(tfile_has_registers): If there's no traceframe selected, then
+	there's no registers.
+
+2011-01-28  Pedro Alves  <pedro at codesourcery.com>
+
+	* target.c (memory_xfer_partial): No need to restore shadows if we
+	haven't read anything.
+
+2011-01-28  Pedro Alves  <pedro at codesourcery.com>
+
+	* mips-tdep.c (mips_print_register): Use get_frame_register_value
+	and val_print_scalar_formatted.
+
+2011-01-27  Pedro Alves  <pedro at codesourcery.com>
+
+	* tracepoint.c (tfile_read): New.
+	(tfile_open): Use it.
+	(tfile_get_traceframe_address): Use it.
+	(tfile_trace_find): Use it.
+	(walk_blocks_callback_func): New typedef.
+	(match_blocktype): New function.
+	(traceframe_walk_blocks): New function.
+	(traceframe_find_block_type): New function.
+	(tfile_fetch_registers, tfile_xfer_partial)
+	(tfile_get_trace_state_variable_value): Use
+	traceframe_find_block_type and tfile_read.
+
+2011-01-26  Kevin Buettner  <kevinb at redhat.com>
+
+	* remote-mips.c: Add internationalization mark ups.  Remove
+	trailing \n from already marked up strings.
+
+2011-01-26  Tom Tromey  <tromey at redhat.com>
+
+	* python/py-prettyprint.c (print_string_repr): Clear
+	'addressprint' option when calling val_print_string.
+	(print_children): Handle Val_pretty_default.  Clear 'addressprint'
+	option when calling val_print_string.
+
+2011-01-26  Tom Tromey  <tromey at redhat.com>
+
+	* python/python.c (gdbpy_solib_name): Use gdb_py_longest and
+	GDB_PY_LL_ARG.
+	* python/python-internal.h (GDB_PY_LL_ARG, GDB_PY_LLU_ARG): New
+	macros.
+	(gdb_py_longest, gdb_py_ulongest): New typedefs.
+	(gdb_py_long_from_longest, gdb_py_long_from_ulongest)
+	(gdb_py_long_as_ulongest): New defines.
+	(gdb_py_object_from_longest, gdb_py_object_from_ulongest)
+	(gdb_py_int_as_long): Declare.
+	* python/py-value.c (valpy_lazy_string): Use gdb_py_longest,
+	GDB_PY_LL_ARG, gdb_py_object_from_longest.
+	(valpy_long): Add comment.
+	* python/py-utils.c (get_addr_from_python): Use
+	gdb_py_long_as_ulongest.  Handle overflow properly.
+	(gdb_py_object_from_longest): New function.
+	(gdb_py_object_from_ulongest): Likewise.
+	(gdb_py_int_as_long): Likewise.
+	* python/py-type.c (typy_array): Use gdb_py_int_as_long.
+	* python/py-symtab.c (salpy_get_pc): Use
+	gdb_py_long_from_ulongest.
+	(salpy_get_line): Use PyInt_FromLong.
+	* python/py-param.c (set_parameter_value): Use
+	gdb_py_int_as_long.
+	* python/py-lazy-string.c (stpy_get_address): Use
+	gdb_py_long_from_ulongest.
+	* python/py-frame.c (frapy_pc): Use gdb_py_long_from_ulongest.
+	* python/py-cmd.c (cmdpy_completer): Use gdb_py_int_as_long.
+	* python/py-breakpoint.c (bppy_set_thread): Use
+	gdb_py_int_as_long.
+	(bppy_set_task): Likewise.
+	(bppy_set_ignore_count): Likewise.
+	(bppy_set_hit_count): Likewise.
+	* python/py-block.c (blpy_get_start): Use
+	gdb_py_object_from_ulongest.
+	(blpy_get_end): Likewise.
+	(gdbpy_block_for_pc): Use gdb_py_ulongest and GDB_PY_LLU_ARG.
+
+2011-01-25  Mathieu Lacage  <mathieu.lacage at inria.fr>
+
+	PR/symtab 11766:
+	* gdb/objfiles.h (struct objfile) <addr_low>: New field.
+	* gdb/solib.c (solib_read_symbols): Check for addr_low in
+	equality test for objfile, initialize addr_low if needed.
+
+2011-01-25  Pedro Alves  <pedro at codesourcery.com>
+
+	* tui/tui-regs.c (tui_register_format): Remove dead code.
+
+2011-01-25  Pedro Alves  <pedro at codesourcery.com>
+
+	* printcmd.c (print_formatted): Use val_print_scalar_formatted
+	instead of print_scalar_formatted.
+	(print_scalar_formatted): Don't handle 's' format strings here,
+	and add an assertion that we never see such format here.
+	* valprint.h (val_print_scalar_formatted): Declare.
+	* valprint.c (val_print_scalar_formatted): New.
+	* c-valprint.c (c_val_print): Use val_print_scalar_formatted
+	instead of print_scalar_formatted.
+	* jv-valprint.c (java_val_print): Ditto.
+	* p-valprint.c (pascal_val_print): Ditto.
+	* ada-valprint.c (ada_val_print_1): Ditto.
+	* f-valprint.c (f_val_print): Ditto.
+	* infcmd.c (registers_info): Ditto.
+	* m2-valprint.c (m2_val_print): Ditto.
+
+2011-01-25  Pedro Alves  <pedro at codesourcery.com>
+
+	* m2-valprint.c (print_unbounded_array): Pass
+	value_contents_for_printing rather than value_contents, to
+	m2_print_array_contents.  Also pass in the value.
+
+2011-01-25  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* dwarf2read.c (dwarf2_read_index, write_psymtabs_to_index)
+	(save_gdb_index_command): Switch to .gdb_index version 4.
+
+2011-01-25  Pedro Alves  <pedro at codesourcery.com>
+
+	* mi/mi-main.c (get_register): Use get_frame_register_value rather
+	than frame_register, and always pass a valid value to val_print.
+
+2011-01-25  Pedro Alves  <pedro at codesourcery.com>
+
+	Centralize printing "<optimized out>".
+
+	* valprint.h (val_print_optimized_out): Declare.
+	* cp-valprint.c (cp_print_value_fields): Use
+	val_print_optimized_out.
+	* jv-valprint.c (java_print_value_fields): Ditto.
+	* p-valprint.c (pascal_object_print_value_fields): Ditto.
+	* printcmd.c (print_formatted): Ditto.
+	* valprint.c (valprint_check_validity): Ditto.
+	(value_check_printable): Ditto.
+	(val_print_optimized_out): New.
+
+2011-01-25  Pedro Alves  <pedro at codesourcery.com>
+
+	* infcmd.c (default_print_registers_info): Allocate values so to
+	never pass a NULL value to val_print.
+
+2011-01-25  Pedro Alves  <pedro at codesourcery.com>
+
+	* cp-valprint.c (cp_print_value): Treat the 'skip' local as
+	boolean.  Make sure to always pass a value that matches the
+	contents buffer to callees.  Preserve `address' for following
+	iterations.
+	* value.c (value_contents_for_printing_const): New.
+	(value_address): Constify value argument.
+	* value.h (value_contents_for_printing_const): Declare.
+	(value_address): Constify value argument.
+
+2011-01-25  Pedro Alves  <pedro at codesourcery.com>
+
+	* regcache.c (struct regcache_descr): Rename
+	sizeof_raw_register_valid_p field to sizeof_raw_register_status,
+	and sizeof_cooked_register_valid_p to
+	sizeof_cooked_register_status.
+	(init_regcache_descr): Adjust.
+	(struct regcache): Rename register_valid_p field to
+	register_status.
+	(regcache_xmalloc_1, regcache_xfree, regcache_save)
+	(do_cooked_read): Adjust.
+	(regcache_valid_p): Rename to ...
+	(regcache_register_status): ... this.  Adjust.
+	(regcache_invalidate): Adjust.
+	(regcache_raw_read, regcache_cooked_read, regcache_raw_write):
+	Adjust.
+	(regcache_raw_supply): Adjust.  If buf i NULL, mark the register
+	as unavailable, not valid.
+	(regcache_dump): Adjust.
+	* regcache.h (enum register_status): New.
+	(regcache_register_status): Declare.
+	(regcache_invalidate): Delete declaration.
+	* corelow.c (get_core_registers): Adjust.
+	* tracepoint.c (tfile_fetch_registers): Adjust.
+	* trad-frame.c (REG_VALUE): Rename to ...
+	(TF_REG_VALUE): ... this.
+	(REG_UNKNOWN): Rename to ...
+	(TF_REG_UNKNOWN): ... this.
+	(trad_frame_set_value, trad_frame_set_unknown): Adjust.
+	* mi/mi-main.c (register_changed_p): Adjust.
+
+2011-01-25  Pedro Alves  <pedro at codesourcery.com>
+
+	* regcache.c (struct regcache_descr): Remove outdated comment.
+	(init_regcache_descr): Remove sizeof_raw_register_valid_p
+	overallocate hack.
+	(regcache_xmalloc): Rename to ...
+	(regcache_xmalloc_1): ... this.  Add `readonly_p' parameter.
+	Allocate the regcache type accordingly.
+	(regcache_xmalloc): New as wrapper around regcache_xmalloc_1.
+	(regcache_xfree): Asser the source is also readonly.  Copy sizeof
+	cooked registers, not raw.
+	(regcache_dup_no_passthrough): Delete.
+	(get_thread_arch_regcache): Use regcache_xmalloc_1.
+	* h8300-tdep.c (h8300_push_dummy_call): Tweak comment to not
+	mention obsolete write_register_bytes.
+	* regcache.h (regcache_dup_no_passthrough): Delete declaration.
+
+2011-01-25  Pedro Alves  <pedro at codesourcery.com>
+
+	Stop remote_read_bytes from handling partial reads itself.
+
+	* remote-fileio.c: Include target.h.
+	(remote_fileio_write_bytes): Delete.
+	(remote_fileio_func_open, remote_fileio_func_write)
+	(remote_fileio_func_rename, remote_fileio_func_unlink): Use
+	target_read_memory.
+	(remote_fileio_func_stat): Use target_read_memory and
+	target_write_memory.
+	(remote_fileio_func_gettimeofday): Use target_write_memory.
+	(remote_fileio_func_system): Use target_read_memory.
+	* remote.c (remote_write_bytes): Make it static.
+	(remote_read_bytes): Don't handle partial reads here.
+	* remote.h (remote_read_bytes): Delete declaration.
+
+2011-01-25  Pedro Alves  <pedro at codesourcery.com>
+
+	Simplify XML parsing a bit.
+
+	* xml-support.h (gdb_xml_parse_quick): Declare.
+	* xml-support.c (gdb_xml_create_parser_and_cleanup_1): Renamed
+	from gdb_xml_create_parser_and_cleanup, and added `old_chain'
+	parameter.
+	(gdb_xml_create_parser_and_cleanup): Reimplement on top of
+	gdb_xml_create_parser_and_cleanup_1.
+	(gdb_xml_parse_quick): New.
+	* memory-map.c (parse_memory_map): Use gdb_xml_parse_quick.
+	* osdata.c (osdata_parse): Ditto.
+	* remote.c (remote_threads_info): Ditto.
+	* solib-target.c (solib_target_parse_libraries): Ditto.
+	* xml-syscall.c (syscall_parse_xml): Ditto.
+	* xml-tdesc.c (tdesc_parse_xml): Ditto.
+
+2011-01-24  Kevin Buettner  <kevinb at redhat.com>
+
+	* configure.tgt (mips*-*-elf): New; just like mips*-*-*, but
+	with remote-mips.o added to gdb_target_obs.
+	* Makefile.in (ALL_TARGET_OBS): Add remote-mips.o.
+
+2011-01-24  Pedro Alves  <pedro at codesourcery.com>
+
+	* ada-valprint.c (val_print_packed_array_elements): Pass the
+	correct struct value to val_print.
+	(ada_val_print_1): Ditto.
+
+2011-01-24  Pedro Alves  <pedro at codesourcery.com>
+
+	Don't lose embedded_offset in printing routines throughout.
+
+	* valprint.h (val_print_array_elements): Change prototype.
+	* valprint.c (val_print_array_elements): Add `embedded_offset'
+	parameter, and adjust to pass it down to val_print, while passing
+	`valaddr' or `address' unmodified.  Take embedded_offset into
+	account when checking repetitions.
+	* c-valprint.c (c_val_print): Pass embedded_offset to
+	val_print_array_elements instead of adjusting `valaddr' and
+	`address'.
+	* m2-valprint.c (m2_print_array_contents, m2_val_print): Pass
+	embedded_offset to val_print_array_elements instead of adjusting
+	`valaddr'.
+	* p-lang.h (pascal_object_print_value_fields): Adjust prototype.
+	* p-valprint.c (pascal_val_print): Pass embedded_offset to
+	val_print_array_elements and pascal_object_print_value_fields
+	instead of adjusting `valaddr'.
+	(pascal_object_print_value_fields): Add `offset' parameter, and
+	adjust to use it.
+	(pascal_object_print_value): Add `offset' parameter, and adjust to
+	use it.
+	(pascal_object_print_static_field): Use
+	value_contents_for_printing/value_embedded_offset, rather than
+	value_contents.
+	* ada-valprint.c (val_print_packed_array_elements): Add `offset'
+	parameter, and adjust to use it.  Use
+	value_contents_for_printing/value_embedded_offset, rather than
+	value_contents.
+	(ada_val_print): Rename `valaddr0' parameter to `valaddr'.
+	(ada_val_print_array): Add `offset' parameter, and adjust to use
+	it.
+	(ada_val_print_1): Rename `valaddr0' parameter to `valaddr', and
+	`embedded_offset' to `offset'.  Don't re-adjust `valaddr'.
+	Instead work with offsets.  Use
+	value_contents_for_printing/value_embedded_offset, rather than
+	value_contents.  Change `defer_val_int' local type to CORE_ADDR,
+	and use value_from_pointer to extract a target pointer, rather
+	than value_from_longest.
+	(print_variant_part): Add `offset' parameter.  Replace
+	`outer_valaddr' parameter by a new `outer_offset' parameter.
+	Don't re-adjust `valaddr'.  Instead pass down adjusted offsets.
+	(ada_value_print): Use
+	value_contents_for_printing/value_embedded_offset, rather than
+	value_contents.
+	(print_record): Add `offset' parameter, and adjust to pass it
+	down.
+	(print_field_values): Add `offset' parameter.  Replace
+	`outer_valaddr' parameter by a new `outer_offset' parameter.
+	Don't re-adjust `valaddr'.  Instead pass down adjusted offsets.
+	Use value_contents_for_printing/value_embedded_offset, rather than
+	value_contents.
+	* d-valprint.c (dynamic_array_type): Use
+	value_contents_for_printing/value_embedded_offset, rather than
+	value_contents.
+	* jv-valprint.c (java_print_value_fields): Add `offset' parameter.
+	Don't re-adjust `valaddr'.  Instead pass down adjusted offsets.
+	(java_print_value_fields): Take `offset' into account.  Don't
+	re-adjust `valaddr'.  Instead pass down adjusted offsets.
+	(java_val_print): Take `embedded_offset' into account.  Pass it to
+	java_print_value_fields.
+	* f-valprint.c (f77_print_array_1): Add `embedded_offset'
+	parameter.  Don't re-adjust `valaddr' or `address'.  Instead pass
+	down adjusted offsets.
+	(f77_print_array): Add `embedded_offset' parameter.  Pass it down.
+	(f_val_print): Take `embedded_offset' into account.
+
+2011-01-21  Joel Brobecker  <brobecker at adacore.com>
+
+	* inflow.c: Include "gdbcmd.h".
+	(interactive_mode): New static global, moved here from top.c.
+	(show_interactive_mode): New function, moved here from top.c.
+	use gdb_has_a_terminal instead of input_from_terminal_p to
+	determine the current mode.
+	(gdb_has_a_terminal): Add handling of the "iteractive-mode"
+	setting.
+	(_initialize_inflow): Add the "set/show interactive-mode"
+	commands.  Moved here from top.c, after having adjusted slightly
+	the help text.
+	* top.c (interactive_mode, show_interactive_mode): Delete, moved
+	to inflow.c.
+	(input_from_terminal_p): Remove handling of "interactive-mode"
+	setting, moved to infow.c.
+	(init_main): Remove creation of the "set/show interactive-mode"
+	commands, moved to inflow.c.
+
+2011-01-19  Joel Brobecker  <brobecker at adacore.com>
+
+	* NEWS: Add entry for native ia64-hpux support.
+
+2011-01-19  Tom Tromey  <tromey at redhat.com>
+
+	PR mi/8618:
+	* thread.c (free_thread): Free 'name'.
+	(print_thread_info): Emit thread name.  Change CLI output.
+	(thread_name_command): New function.
+	(do_captured_thread_select): Emit newline.
+	(_initialize_thread): Register 'thread name' command.
+	* target.h (struct target_ops) <to_thread_name>: New field.
+	(target_thread_name): New macro.
+	* target.c (update_current_target): Handle to_thread_name.
+	* python/py-infthread.c (thpy_get_name): New function.
+	(thpy_set_name): Likewise.
+	(thread_object_getset): Add "name".
+	* linux-nat.c (linux_nat_thread_name): New function.
+	(linux_nat_add_target): Set to_thread_name.
+	* gdbthread.h (struct thread_info) <name>: New field.
+
+2011-01-18  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-valprint.c (ada_print_scalar): Remove unsigned char downcast.
+	(ada_val_print_1): Likewise.
+
+2011-01-18  Joel Brobecker  <brobecker at adacore.com>
+
+	* rs6000-tdep.c (rs6000_skip_prologue): Make sure that the prologue
+	upper limit address is not greater than the function end address
+	when the upper limit could not be computed using the debugging
+	info.
+
+2011-01-17  Tom Tromey  <tromey at redhat.com>
+
+	* cli/cli-cmds.c (apropos_command): Free the compiled regex.  Use
+	get_regcomp_error.
+	* utils.c: Include gdb_regex.h.
+	(do_regfree_cleanup): New function.
+	(make_regfree_cleanup): Likewise.
+	(get_regcomp_error): Likewise.
+	* gdb_regex.h (make_regfree_cleanup, get_regcomp_error): Declare.
+
+2011-01-17  Tom Tromey  <tromey at redhat.com>
+
+	* cli/cli-cmds.c (apropos_command): Fix formatting.  Don't call
+	re_compile_fastmap.
+
+2011-01-17  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	* p-exp.y (intvar): New static variable, used to set CURRENT_TYPE
+	for internal variables.
+	(last_was_structop): New static variable.
+	(COMPLETE): New token.
+	(field_exp): New rule to group all '.' suffix handling.
+	Add mark_struct_expression calls when approriate to be able
+	to correctly find fields for completion.
+	(yylex): Adapt to handle field completion and set INTVAR when
+	required.
+
+2011-01-14  Yao Qi  <yao at codesourcery.com>
+
+	* arm-tdep.c (arm_register_reggroup_p): FPS register is in
+	save_reggroup, restore_reggroup and all_reggroup.
+
+2011-01-14  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-valprint. (ada_printchar): Use the correct type length
+	in call to ada_emit_char.
+	* c-valprint.c (c_val_print): Remove cast in call to LA_PRINT_CHAR.
+
+2011-01-14  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	* solib-som.h (hpux_major_release): Declare variable here.
+	* solib-som.c:  Remove <sys/utsname.h> header.
+	(DEFAULT_HPUX_MAJOR_RELEASE): New macro.
+	(hpux_major_release): Make global, change default value to
+	DEFAULT_HPUX_MAJOR_RELEASE.
+	(get_hpux_major_release): Simply return HPUX_MAJOR_RELEASE.
+	* hppa-hpux-nat.c: Add <sys/utsname.h> include.
+	Add "solib-som.h" header.
+	(set_hpux_major_release): New function.
+	(_initialize_hppa_hpux_nat): Call set_hpux_major_release.
+
+2011-01-14  Mike Frysinger  <vapier at gentoo.org>
+
+	* configure.tgt (*-*-uclinux*): Match more Linux os targets
+
+2011-01-14  Joel Brobecker  <brobecker at adacore.com>
+
+	* ia64-hpux-nat.c (ia64_hpux_fetch_register): Remove trailing
+	new-line at end of warning message.
+	(ia64_hpux_store_register): Remove trailing new-line at end of
+	error message.
+	* ia64-hpux-tdep.c: Rephrase comment.
+	* solib-ia64-hpux.c (struct dld_info): Change type of field
+	dld_flags from "long long" to ULONGEST.
+
+2011-01-14  Pedro Alves  <pedro at codesourcery.com>
+
+	* target.h (deprecated_child_ops): Delete declaration.
+	* target.c (deprecated_child_ops): Delete definition.
+
+2011-01-14  Pedro Alves  <pedro at codesourcery.com>
+
+	* Makefile.in (hpux-thread.o): Delete rule.
+	* configure.ac: Don't check for HPUX DCE threads support.
+	* configure, config.in: Regenerate.
+	* hppa-hpux-nat.c (child_suppress_run): Delete.
+	(hppa_hpux_child_can_run): Delete.
+	(_initialize_hppa_hpux_nat): Don't override to_can_run.
+	* hpux-thread.c: Delete.
+
+2011-01-13  Joel Brobecker  <brobecker at adacore.com>
+
+	* hpux-thread.c (hpux_pid_to_str): Delete.
+
+2011-01-13  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-valprint.c (ada_emit_char): Remove strange code.
+	Check that c is <= UCHAR_MAX before passing it to isascii.
+	(char_at): Do not assume that TYPE_LEN is either 1 or 2.
+
+2011-01-13  Joel Brobecker  <brobecker at adacore.com>
+
+	* top.c (input_from_terminal_p): Restrict the use of interactive_mode
+	to the case where instream is stdin.
+
+2011-01-13  Joel Brobecker  <brobecker at adacore.com>
+
+	* ia64-tdep.h (struct regcache): Forward declare.
+	(struct ia64_infcall_ops): New struct type.
+	(struct gdbarch_tdep): New fields "find_global_pointer_from_solib"
+	and "infcall_ops".
+	* ia64-tdep.c (ia64_find_global_pointer_from_dynamic_section):
+	Renames ia64_find_global_pointer.
+	(ia64_find_global_pointer, ia64_allocate_new_rse_frame)
+	(ia64_store_argument_in_slot, ia64_set_function_addr: New function.
+	(ia64_push_dummy_call): Adjust to use the new tdep ia64_infocall_ops
+	methods.
+	(ia64_infcall_ops): New static global constant.
+	(ia64_gdbarch_init): Set tdep->infcall_ops.
+	* ia64-hpux-nat.c (ia64_hpux_xfer_solib_got): New function.
+	(ia64_hpux_xfer_partial): Add TARGET_OBJECT_HPUX_SOLIB_GOT handing.
+	* ia64-hpux-tdep.c: Include "regcache.h", "gdbcore.h" and "inferior.h".
+	(ia64_hpux_dummy_code): New static global constant.
+	(ia64_hpux_push_dummy_code, ia64_hpux_allocate_new_rse_frame)
+	(ia64_hpux_store_argument_in_slot, ia64_hpux_set_function_addr)
+	(ia64_hpux_dummy_id, ia64_hpux_find_global_pointer_from_solib):
+	New function.
+	(ia64_hpux_infcall_ops): New static global constant.
+	(ia64_hpux_init_abi): Install gdbarch and tdep methods needed
+	for inferior function calls to work properly on ia64-hpux.
+
+2011-01-13  Joel Brobecker  <brobecker at adacore.com>
+
+	* target.h (enum target_object): Add TARGET_OBJECT_HPUX_UREGS.
+	* ia64-tdep.h (struct frame_info): forward declaration.
+	(struct gdbarch_tdep): Add field size_of_register_frame.
+	* ia64-tdep.c (ia64_access_reg): Use tdep->size_of_register_frame
+	to determine the size of the register frame.
+	(ia64_size_of_register_frame): New function.
+	(ia64_gdbarch_init): Set tdep->size_of_register_frame.
+	* ia64-hpux-tdep.c: Include "target.h" and "frame.h".
+	(IA64_HPUX_UREG_REASON): New macro.
+	(ia64_hpux_stopped_in_syscall, ia64_hpux_size_of_register_frame):
+	New functions.
+	(ia64_hpux_init_abi): Set tdep->size_of_register_frame.
+	* ia64-hpux-nat.c (ia64_hpux_xfer_uregs): New function.
+	(ia64_hpux_xfer_partial): Add handling of TARGET_OBJECT_HPUX_UREGS
+	objects.
+
+2011-01-13  Joel Brobecker  <brobecker at adacore.com>
+
+	Add support for ia64-hpux.
+	* config/ia64/hpux.mh, ia64-hpux-nat.c, ia64-hpux-tdep.c,
+	ia64-hpux-tdep.h, solib-ia64-hpux.c, solib-ia64-hpux.h: New files.
+
+	* configure.host: Add handling for ia64-hpux hosts.  Add associated
+	floatformats.
+	* configure.tgt: Add handling for ia64-hpux targets.
+	* Makefile.in (ALL_64_TARGET_OBS): Add ia64-hpux-tdep.o.
+	(HFILES_NO_SRCDIR): Add ia64-hpux-tdep.h.
+	(ALLDEPFILES): Add ia64-hpux-nat.c ia64-hpux-tdep.c.
+
+2011-01-13  Joel Brobecker  <brobecker at adacore.com>
+
+	[ttrace] Compute thread list immediately after attach.
+	* inf_ttrace_attach (inf_ttrace_create_threads_after_attach):
+	New subprogram.
+	(inf_ttrace_attach): Use it.
+
+2011-01-13  Joel Brobecker  <brobecker at adacore.com>
+
+	* libunwind-frame.c (libunwind_frame_cache): Do not return NULL
+	if we could not determine the frame's function address.  Instead,
+	use the frame's PC, and then continue.
+
+2011-01-13  Joel Brobecker  <brobecker at adacore.com>
+
+	* libunwind-frame.c (__LITTLE_ENDIAN, __BIG_ENDIAN): Define if
+	not already defined.
+
+2011-01-13  Joel Brobecker  <brobecker at adacore.com>
+
+	* ia64-tdep.c (ia64_struct_type_p): New function.
+	(ia64_extract_return_value): Handle integral values that are
+	less than 8 bytes long.
+	(ia64_push_dummy_call): Likewise.
+
+2011-01-13  Joel Brobecker  <brobecker at adacore.com>
+
+	* ia64-tdep.c (floatformat_ia64_ext_little): Renames
+	floatformat_ia64_ext.
+	(floatformat_ia64_ext_big): New static const.
+	(floatformats_ia64_ext): Set first entry to &floatformat_ia64_ext_big.
+
+2011-01-12  Tom Tromey  <tromey at redhat.com>
+
+	* mi/mi-symbol-cmds.c (mi_cmd_symbol_list_lines): Fix error
+	messages.
+	* mi/mi-main.c (mi_cmd_thread_select): Fix error messages.
+	(mi_cmd_thread_list_ids): Likewise.
+	(mi_cmd_data_list_changed_registers): Likewise.
+	(mi_cmd_data_list_register_values): Likewise.
+	(mi_cmd_data_write_register_values): Likewise.
+	(mi_cmd_data_evaluate_expression): Likewise.
+	(mi_cmd_data_read_memory): Likewise.
+	(mi_cmd_data_read_memory_bytes): Likewise.
+	(mi_cmd_data_write_memory): Likewise.
+	(mi_cmd_enable_timings): Likewise.
+	* mi/mi-interp.c (mi_cmd_interpreter_exec): Fix error messages.
+	* mi/mi-cmd-var.c (mi_cmd_var_create): Fix error messages.
+	(mi_cmd_var_delete): Likewise.
+	(mi_cmd_var_set_format): Likewise.
+	(mi_cmd_var_show_format): Likewise.
+	(mi_cmd_var_info_num_children): Likewise.
+	(mi_cmd_var_list_children): Likewise.
+	(mi_cmd_var_info_type): Likewise.
+	(mi_cmd_var_info_expression): Likewise.
+	(mi_cmd_var_show_attributes): Likewise.
+	(mi_cmd_var_assign): Likewise.
+	(mi_cmd_var_update): Likewise.
+	(mi_cmd_enable_pretty_printing): Likewise.
+	(mi_cmd_var_set_update_range): Likewise.
+	* mi/mi-cmd-target.c (mi_cmd_target_file_get): Fix error
+	messages.
+	(mi_cmd_target_file_put): Likewise.
+	(mi_cmd_target_file_delete): Likewise.
+	* mi/mi-cmd-stack.c (mi_cmd_stack_list_frames): Fix error
+	messages.
+	(mi_cmd_stack_info_depth): Likewise.
+	(mi_cmd_stack_list_locals): Likewise.
+	(mi_cmd_stack_list_args): Likewise.
+	(mi_cmd_stack_select_frame): Likewise.
+	(mi_cmd_stack_select_frame): Likewise.
+	(mi_cmd_stack_info_frame): Likewise.
+	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_file): Fix error
+	messages.
+	(mi_cmd_file_list_exec_source_files): Likewise.
+	* mi/mi-cmd-env.c (mi_cmd_env_pwd): Fix error messages.
+	(mi_cmd_env_cd): Likewise.
+	(mi_cmd_env_path): Likewise.
+	(mi_cmd_env_dir): Likewise.
+	(mi_cmd_inferior_tty_show): Likewise.
+	* mi/mi-cmd-disas.c (mi_cmd_disassemble): Fix error messages.
+	* mi/mi-cmd-break.c (mi_cmd_break_insert): Fix error messages.
+	(mi_cmd_break_watch): Likewise.
+
+2011-01-12  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* ppc-linux-nat.c (booke_cmp_hw_point): Fix whitespace.
+	(ppc_linux_insert_hw_breakpoint): Likewise.
+	(ppc_linux_remove_hw_breakpoint): Likewise.
+	(ppc_linux_insert_watchpoint): Likewise.
+
+2011-01-12  Andrew Burgess  <aburgess at broadcom.com>
+	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	PR fortran/11104 and DWARF unbound arrays detection.
+	* dwarf2read.c (read_subrange_type): Set zero length on unspecified
+	upper bound.  Set TYPE_HIGH_BOUND_UNDEFINED if not language_ada on
+	unspecified upper bound.
+	* eval.c (evaluate_subexp_standard) <multi_f77_subscript>: Remove
+	variables array_size_array, tmp_type and offset_item.  New variable
+	array.  Remove call to f77_get_upperbound.  New variables array_type
+	and index.  Call value_subscripted_rvalue for each dimenasion.  Remove
+	the final call to deprecated_set_value_type.
+
+2011-01-12  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Make value allocations more lazy.
+	* ada-lang.c (coerce_unspec_val_to_type): Use allocate_value_lazy
+	instead of allocate_value and set_value_lazy when possible.
+	* dwarf2loc.c (dwarf2_evaluate_loc_desc_full): Use allocate_value_lazy
+	instead of allocate_value and set_value_lazy.
+	* findvar.c (value_of_register_lazy): Likewise.
+	(read_var_value): Remove V preallocation, call just check_typedef in
+	advance.  Move allocate_value to LOC_CONST, LOC_LABEL,
+	LOC_CONST_BYTES.  Use allocate_value_lazy in LOC_STATIC, LOC_ARG,
+	LOC_REF_ARG, LOC_LOCAL, LOC_BLOCK.  Set ADDR instead of
+	set_value_address and break in LOC_BLOCK.  Use allocate_value_lazy and
+	remove lval_memory set in LOC_REGPARM_ADDR.  Use allocate_value_lazy
+	in LOC_UNRESOLVED and LOC_OPTIMIZED_OUT.  Add setting lval_memory at
+	the end, remove set_value_lazy there.
+	* valarith.c (value_subscripted_rvalue): Use allocate_value_lazy
+	instead of allocate_value and set_value_lazy when possible.
+	* valops.c (value_fetch_lazy): Do nop for value_optimized_out VAL.
+	* value.c (allocate_computed_value): Use allocate_value_lazy instead
+	of allocate_value and set_value_lazy.
+	(value_from_contents_and_address): Use allocate_value_lazy instead of
+	allocate_value and set_value_lazy when possible.
+
+2011-01-12  Andrew Burgess  <aburgess at broadcom.com>
+
+	* disasm.c (dump_insns): Support dumping opcodes for MI.
+	* mi/mi-cmd-disas.c (mi_cmd_disassemble): Allow mode to control
+	dumping of instruction opcodes.
+
+2011-01-09  Robert Millan  <rmh at gnu.org>  (tiny patch)
+
+	* configure.tgt: Detect GNU/kFreeBSD and set `gdb_osabi'
+	appropiately.
+
+2011-01-11  Tom Tromey  <tromey at redhat.com>
+
+	* thread.c (do_captured_thread_select): Emit newline before
+	printing frame.
+
+2011-01-11  Michael Snyder  <msnyder at vmware.com>
+
+	* s390-tdep.c: Comment cleanup, mostly periods and spaces.
+	* score-tdep.c: Ditto.
+	* score-tdep.h: Ditto.
+	* ser-base.c: Ditto.
+	* ser-go32.c: Ditto.
+	* serial.c: Ditto.
+	* serial.h: Ditto.
+	* ser-mingw.c: Ditto.
+	* ser-pipe.c: Ditto.
+	* ser-tcp.c: Ditto.
+	* ser-unix.c: Ditto.
+	* sh64-tdep.c: Ditto.
+	* shnbsd-nat.c: Ditto.
+	* sh-tdep.c: Ditto.
+	* sh-tdep.h: Ditto.
+	* solib.c: Ditto.
+	* solib-darwin.c: Ditto.
+	* solib-frv.c: Ditto.
+	* solib.h: Ditto.
+	* solib-irix.c: Ditto.
+	* solib-osf.c: Ditto.
+	* solib-pa64.c: Ditto.
+	* solib-som.c: Ditto.
+	* solib-spu.c: Ditto.
+	* solib-sunos.c: Ditto.
+	* solib-svr4.c: Ditto.
+	* solist.h: Ditto.
+	* sol-thread.c: Ditto.
+	* somread.c: Ditto.
+	* source.c: Ditto.
+	* source.h: Ditto.
+	* sparc64-linux-tdep.c: Ditto.
+	* sparc64-tdep.c: Ditto.
+	* sparc-linux-nat.c: Ditto.
+	* sparc-linux-tdep.c: Ditto.
+	* sparc-sol2-nat.c: Ditto.
+	* sparc-sol2-tdep.c: Ditto.
+	* sparc-tdep.c: Ditto.
+	* sparc-tdep.h: Ditto.
+	* spu-tdep.c: Ditto.
+	* stabsread.c: Ditto.
+	* stabsread.h: Ditto.
+	* stack.c: Ditto.
+	* symfile.c: Ditto.
+	* symfile.h: Ditto.
+	* symmisc.c: Ditto.
+	* symtab.c: Ditto.
+	* symtab.h: Ditto.
+	* target.c: Ditto.
+	* target-descriptions.c: Ditto.
+	* target-descriptions.h: Ditto.
+	* target.h: Ditto.
+	* target-memory.c: Ditto.
+	* terminal.h: Ditto.
+	* thread.c: Ditto.
+	* top.c: Ditto.
+	* tracepoint.c: Ditto.
+	* tracepoint.h: Ditto.
+	* trad-frame.h: Ditto.
+	* typeprint.c: Ditto.
+
+2011-01-11  Michael Snyder  <msnyder at vmware.com>
+
+	* ui-file.c: Comment cleanup, mostly periods and spaces.
+	* ui-file.h: Ditto.
+	* ui-out.c: Ditto.
+	* ui-out.h: Ditto.
+	* utils.c: Ditto.
+	* v850-tdep.c: Ditto.
+	* valarith.c: Ditto.
+	* valops.c: Ditto.
+	* valprint.c: Ditto.
+	* valprint.h: Ditto.
+	* value.c: Ditto.
+	* value.h: Ditto.
+	* varobj.c: Ditto.
+	* varobj.h: Ditto.
+	* vax-tdep.c: Ditto.
+	* vec.c: Ditto.
+	* vec.h: Ditto.
+	* version.h: Ditto.
+	* windows-nat.c: Ditto.
+	* windows-tdep.c: Ditto.
+	* xcoffread.c: Ditto.
+	* xcoffsolib.c: Ditto.
+	* xml-support.c: Ditto.
+	* xstormy16-tdep.c: Ditto.
+	* xtensa-tdep.c: Ditto.
+	* xtensa-tdep.h: Ditto.
+
+2011-01-11  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* breakpoint.c (resources_needed_watchpoint): Fix indentation.
+	* gdbtypes.c (is_scalar_type_recursive): Fix formatting.
+
+2011-01-11  Sergio Durigan Junior  <sergiodj at linux.vnet.ibm.com>
+	    Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	Implement support for PowerPC BookE ranged watchpoints.
+	* breakpoint.h
+	(struct breakpoint_ops) <resources_needed>: New method.
+	Initialize to NULL in all existing breakpoint_ops instances.
+	(struct breakpoint) <exact>: New field.
+	(target_exact_watchpoints): Declare external global.
+	* breakpoint.c (target_exact_watchpoints): New global flag.
+	(update_watchpoint): Set b->type to bp_hardware_watchpoint and
+	b->enable_state to bp_enabled before calling
+	hw_watchpoint_used_count.
+	(hw_watchpoint_used_count): Iterate over all bp_locations in a
+	watchpoint.  Call breakpoint's breakpoint_ops.resources_needed
+	if available.
+	(insert_watchpoint, remove_watchpoint): Use fixed length of 1 byte
+	if the watchpoint is exact.
+	(resources_needed_watchpoint): New function.
+	(watchpoint_breakpoint_ops): Add resources_needed_watchpoint.
+	(watch_command_1): Set b->exact if the user asked for an exact
+	watchpoint and one can be set.
+	(can_use_hardware_watchpoint): Add exact_watchpoints argument.
+	Pass fixed length of 1 to target_region_ok_for_hw_watchpoint if
+	the user asks for an exact watchpoint and one can be set.  Return
+	number of needed debug registers to watch the expression.
+	* gdbtypes.c (is_scalar_type): New function, based on
+	valprint.c:scalar_type_p.
+	(is_scalar_type_recursive): New function.
+	* gdbtypes.h (is_scalar_type_recursive): Declare.
+	* ppc-linux-nat.c (ppc_linux_region_ok_for_hw_watchpoint): Always
+	handle regions when ranged watchpoints are available.
+	(create_watchpoint_request): New function.
+	(ppc_linux_insert_watchpoint, ppc_linux_remove_watchpoint): Use
+	create_watchpoint_request.
+	* rs6000-tdep.c (show_powerpc_exact_watchpoints): New function.
+	(_initialize_rs6000_tdep): Add `exact-watchpoints' boolean to the
+	`set powerpc' and `show powerpc' commands.
+	* target.h (struct target_ops) <to_region_ok_for_hw_watchpoint>:
+	Mention documentation comment in the target macro.
+	(target_region_ok_for_hw_watchpoint): Document return value.
+
+2011-01-11  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	* breakpoint.c (update_watchpoint): Decide on using a software or
+	hardware watchpoint after the bp_locations are created.
+
+2010-01-11  Thiago Jung Bauermann  <bauerman at br.ibm.com>
+
+	Convert hardware watchpoints to use breakpoint_ops.
+	* breakpoint.h (breakpoint_ops) <insert>: Rename to...
+	<insert_location>: ... this.  Return int instead of void.
+	Accept pointer to struct bp_location instead of pointer to
+	struct breakpoint.  Adapt all implementations.
+	(breakpoint_ops) <remove>: Rename to...
+	<remove_location>: ... this.  Accept pointer to struct bp_location
+	instead of pointer to struct breakpoint.  Adapt all implementations.
+	* breakpoint.c (insert_catchpoint): Delete function.
+	(insert_bp_location): Call the watchpoint or catchpoint's
+	breakpoint_ops.insert method.
+	(remove_breakpoint_1): Call the watchpoint or catchpoint's
+	breakpoint_ops.remove method.
+	(insert_watchpoint, remove_watchpoint): New functions.
+	(watchpoint_breakpoint_ops): New structure.
+	(watch_command_1): Initialize the OPS field.
+	* inf-child.c (inf_child_insert_fork_catchpoint)
+	(inf_child_remove_fork_catchpoint, inf_child_insert_vfork_catchpoint)
+	(inf_child_remove_vfork_catchpoint, inf_child_insert_exec_catchpoint)
+	(inf_child_remove_exec_catchpoint, inf_child_set_syscall_catchpoint):
+	Delete functions.
+	(inf_child_target): Remove initialization of to_insert_fork_catchpoint,
+	to_remove_fork_catchpoint, to_insert_vfork_catchpoint,
+	to_remove_vfork_catchpoint, to_insert_exec_catchpoint,
+	to_remove_exec_catchpoint and to_set_syscall_catchpoint.
+	* target.c (update_current_target): Change default implementation of
+	to_insert_fork_catchpoint, to_remove_fork_catchpoint,
+	to_insert_vfork_catchpoint, to_remove_vfork_catchpoint,
+	to_insert_exec_catchpoint, to_remove_exec_catchpoint and
+	to_set_syscall_catchpoint to return_one.
+	(debug_to_insert_fork_catchpoint, debug_to_insert_vfork_catchpoint)
+	(debug_to_insert_exec_catchpoint): Report return value.
+	* target.h (to_insert_fork_catchpoint, to_insert_vfork_catchpoint)
+	(to_insert_exec_catchpoint): Change declaration to return int instead
+	of void.
+
+2011-01-11  Michael Snyder  <msnyder at vmware.com>
+
+	* arm-tdep.c: Internationalization.
+	* c-lang.c: Ditto.
+	* charset.c: Ditto.
+	* fork-child.c: Ditto.
+	* nto-procfs.c: Ditto.
+	* ppc-sysv-tdep.c: Ditto.
+	* procfs.c: Ditto.
+	* remote-mips.c: Ditto.
+	* remote.c: Ditto.
+	* rs6000-nat.c: Ditto.
+	* rs6000-tdep.c: Ditto.
+	* target.c: Ditto.
+	* valops.c: Ditto.
+	* value.c: Ditto.
+	* xml-support.c: Ditto.
+	* mi/mi-cmd-break.c: Ditto.
+	* mi/mi-cmd-var.c: Ditto.
+	* mi/mi-interp.c: Ditto.
+	* mi/mi-main.c: Ditto.
+
+2011-01-11  Andrew Burgess  <aburgess at broadcom.com>
+
+	* remote-sim.c (gdbsim_store_register): Update API to
+	sim_store_register to check more error conditions.
+
+2011-01-10  Michael Snyder  <msnyder at vmware.com>
+
+	* nto-procfs.c: Comment cleanup, mostly periods and spaces.
+	* nto-tdep.c: Ditto.
+	* nto-tdep.h: Ditto.
+	* objc-exp.y: Ditto.
+	* objc-lang.c: Ditto.
+	* objfiles.c: Ditto.
+	* objfiles.h: Ditto.
+	* observer.c: Ditto.
+	* opencl-lang.c: Ditto.
+	* osabi.c: Ditto.
+	* parse.c: Ditto.
+	* parser-defs.h: Ditto.
+	* p-exp.y: Ditto.
+	* p-lang.c: Ditto.
+	* posix-hdep.c: Ditto.
+	* ppcbug-rom.c: Ditto.
+	* ppc-linux-nat.c: Ditto.
+	* ppc-linux-tdep.c: Ditto.
+	* ppc-linux-tdep.h: Ditto.
+	* ppcnbsd-tdep.c: Ditto.
+	* ppcobsd-tdep.c: Ditto.
+	* ppcobsd-tdep.h: Ditto.
+	* ppc-sysv-tdep.c: Ditto.
+	* ppc-tdep.h: Ditto.
+	* printcmd.c: Ditto.
+	* proc-abi.c: Ditto.
+	* proc-flags.c: Ditto.
+	* procfs.c: Ditto.
+	* proc-utils.h: Ditto.
+	* progspace.h: Ditto.
+	* prologue-value.c: Ditto.
+	* prologue-value.h: Ditto.
+	* psympriv.h: Ditto.
+	* psymtab.c: Ditto.
+	* p-typeprint.c: Ditto.
+	* p-valprint.c: Ditto.
+	* ravenscar-sparc-thread.c: Ditto.
+	* ravenscar-thread.c: Ditto.
+	* ravenscar-thread.h: Ditto.
+	* record.c: Ditto.
+	* regcache.c: Ditto.
+	* regcache.h: Ditto.
+	* remote.c: Ditto.
+	* remote-fileio.c: Ditto.
+	* remote-fileio.h: Ditto.
+	* remote.h: Ditto.
+	* remote-m32r-sdi.c: Ditto.
+	* remote-mips.c: Ditto.
+	* remote-sim.c: Ditto.
+	* rs6000-aix-tdep.c: Ditto.
+	* rs6000-nat.c: Ditto.
+	* rs6000-tdep.c: Ditto.
+
+2011-01-10  Michael Snyder  <msnyder at vmware.com>
+
+	* charset.c (validate): Internationalization.
+	* coffread.c (read_one_sym): Ditto.
+	* dwarf2read.c (dwarf2_attach_fields_to_type): Ditto.
+	* h8300-tdep.c (H8300_extract_return_value): Ditto.
+	* inflow.c (new_tty): Ditto.
+	* iq2000-tdep.c (iq2000_breakpoint_from_pc): Ditto.
+	* m32c-tdep.c (m32c_return_value): Ditto.
+	* mep-tdep.c (mep_store_return_value): Ditto.
+	* score-tdep.c (score7_fetch_insn): Ditto.
+	* ser-mingw.c (pipe_windows_open): Ditto.
+	* sh64-tdep.c (sh64_extract_return_value): Ditto.
+	* spu-tdep.c (spu_register_type): Ditto.
+	* tracepoint.c (trace_find_command): Ditto.
+	* valarith.c (value_pos): Ditto.
+
+2011-01-10  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-valprint.c (printstr): Minor comment reformatting.
+
+2011-01-08  Michael Snyder  <msnyder at vmware.com>
+
+	* m32r-rom.c (m32r_upload_command): Fix up ARI warnings for _
+	markup.
+
+2011-01-08  Michael Snyder  <msnyder at vmware.com>
+
+	* h8300-tdep.c: Comment cleanup, mostly periods and spaces.
+	* hppa-hpux-tdep.c: Ditto.
+	* hppa-linux-nat.c: Ditto.
+	* hppa-linux-tdep.c: Ditto.
+	* hppanbsd-tdep.c: Ditto.
+	* hppa-tdep.c: Ditto.
+	* hppa-tdep.h: Ditto.
+	* hpux-thread.c: Ditto.
+	* i386-cygwin-tdep.c: Ditto.
+	* i386-darwin-nat.c: Ditto.
+	* i386gnu-nat.c: Ditto.
+	* i386-linux-nat.c: Ditto.
+	* i386-linux-tdep.c: Ditto.
+	* i386-nat.c: Ditto.
+	* i386-nat.h: Ditto.
+	* i386nbsd-tdep.c: Ditto.
+	* i386-sol2-nat.c: Ditto.
+	* i386-stub.c: Ditto.
+	* i386-tdep.c: Ditto.
+	* i386-tdep.h: Ditto.
+	* i387-tdep.c: Ditto.
+	* ia64-linux-nat.c: Ditto.
+	* ia64-linux-tdep.c: Ditto.
+	* ia64-tdep.c: Ditto.
+	* infcall.c: Ditto.
+	* infcall.h: Ditto.
+	* infcmd.c: Ditto.
+	* inferior.c: Ditto.
+	* inferior.h: Ditto.
+	* infloop.c: Ditto.
+	* inflow.c: Ditto.
+	* infrun.c: Ditto.
+	* interps.c: Ditto.
+	* interps.h: Ditto.
+	* iq2000-tdep.c: Ditto.
+	* irix5-nat.c: Ditto.
+	* jit.c: Ditto.
+	* jit.h: Ditto.
+	* jv-exp.y: Ditto.
+	* jv-lang.c: Ditto.
+	* jv-lang.h: Ditto.
+	* jv-typeprint.c: Ditto.
+	* jv-valprint.c: Ditto.
+	* language.c: Ditto.
+	* language.h: Ditto.
+	* linespec.c: Ditto.
+	* linux-fork.c: Ditto.
+	* linux-nat.c: Ditto.
+	* linux-thread-db.c: Ditto.
+	* lm32-tdep.c: Ditto.
+
+2011-01-08  Michael Snyder  <msnyder at vmware.com>
+
+	* m2-exp.y: Comment cleanup, mostly periods and spaces.
+	* m2-lang.c: Ditto.
+	* m2-typeprint.c: Ditto.
+	* m2-valprint.c: Ditto.
+	* m32c-tdep.c: Ditto.
+	* m32r-linux-nat.c: Ditto.
+	* m32r-rom.c: Ditto.
+	* m32r-tdep.c: Ditto.
+	* m32r-tdep.h: Ditto.
+	* m68hc11-tdep.c: Ditto.
+	* m58klinux-nat.c: Ditto.
+	* m68k-tdep.c: Ditto.
+	* m88k-tdep.c: Ditto.
+	* m88k-tdep.h: Ditto.
+	* machoread.c: Ditto.
+	* macrocmd.c: Ditto.
+	* macroexp.c: Ditto.
+	* macrotab.c: Ditto.
+	* main.c: Ditto.
+	* maint.c: Ditto.
+	* mdebugread.c: Ditto.
+	* mdebugread.h: Ditto.
+	* memattr.c: Ditto.
+	* memattr.h: Ditto.
+	* memory-map.h: Ditto.
+	* mep-tdep.c: Ditto.
+	* microblaze-rom.c: Ditto.
+	* microblaze-tdep.c: Ditto.
+	* minsyms.c: Ditto.
+	* mips-irix-tdep.c: Ditto.
+	* mips-linux-nat.c: Ditto.
+	* mips-linux-tdep.c: Ditto.
+	* mips-linux-tdep.h: Ditto.
+	* mipsnbsd-nat.c: Ditto.
+	* mipsnbsd-tdep.c: Ditto.
+	* mipsread.c: Ditto.
+	* mips-tdep.c: Ditto.
+	* mips-tdep.h: Ditto.
+	* mn10300-linux-tdep.c: Ditto.
+	* mn10300-tdep.c: Ditto.
+	* mn10300-tdep.h: Ditto.
+	* monitor.c: Ditto.
+	* monitor.h: Ditto.
+	* moxie-tdep.c: Ditto.
+	* moxie-tdep.h: Ditto.
+	* mt-tdep.c: Ditto.
+
+2011-01-08  Mike Frysinger  <vapier at gentoo.org>
+
+	* bfin-tdep.h (BFIN_A0_DOT_W_REGNUM): Fix typo in name.
+
+2011-01-08  Robert Millan  <rmh at gnu.org>
+
+	* fbsd-nat.c (fbsd_find_memory_regions): Fix typo.
+
+2011-01-07  Michael Snyder  <msnyder at vmware.com>
+
+	* charset.c (_initialize_charset): Fix typo in string.
+
+2011-01-07  Michael Snyder  <msnyder at vmware.com>
+
+	* mi/mi-cmd-disas.c (mi_cmd_disassemble): Mark up error message
+	for i18n.
+	* tui/tui-layout.c (tui_set_layout_for_display_command):
+	Split line so that operator goes to beginning of line.
+	* tui/tui-winsource.c (tui_horizontal_source_scroll): Move
+	assignment out of if statement.
+
+2011-01-07  Michael Snyder  <msnyder at vmware.com>
+
+	* ada-lang.c: Comment cleanup, mostly periods and spaces.
+	* ada-lang.h: Ditto.
+	* ada-tasks.c: Ditto.
+	* ada-valprint.c: Ditto.
+	* aix-threads.c: Ditto.
+	* alpha-linux-nat.c: Ditto.
+	* alpha-linux-tdep.c: Ditto.
+	* alpha-mdebug-tdep.c: Ditto.
+	* alpha-nat.c: Ditto.
+	* alpha-osf1-tdep.c: Ditto.
+	* alpha-tdep.c: Ditto.
+	* alphabsd-nat.c: Ditto.
+	* alphabsd-tdep.c: Ditto.
+	* amd64-darwin-tdep.c: Ditto.
+	* amd64-linux-nat.c: Ditto.
+	* amd64-linux-tdep.c: Ditto.
+	* amd64-sol2-tdep.c: Ditto.
+	* amd64-tdep.c: Ditto.
+	* amd64-fbsd-tdep.c: Ditto.
+	* amd64-nbsd-tdep.c: Ditto.
+	* amd64-obsd-tdep.c: Ditto.
+	* amd64-linux-nat.c: Ditto.
+	* amd64-linux-tdep.c: Ditto.
+	* arm-tdep.c: Ditto.
+	* arm-tdep.h: Ditto.
+	* armnbsd-nat.c: Ditto.
+	* avr-tdep.c: Ditto.
+	* bfin-tdep.c: Ditto.
+	* bsd-kvm.c: Ditto.
+	* c-typeprintc: Ditto.
+	* c-valprint.c: Ditto.
+	* coff-pe-read.h: Ditto.
+	* coffreead.c: Ditto.
+	* cris-tdep.c: Ditto.
+	* d-lang.c: Ditto.
+	* darwin-nat-info.c: Ditto.
+	* darwin-nat.c: Ditto.
+	* dbug-rom.c: Ditto.
+	* dbxread.c: Ditto.
+	* dcache.c: Ditto.
+	* dcache.h: Ditto.
+	* dec-thread.c: Ditto.
+	* defs.h: Ditto.
+	* demangle.c: Ditto.
+	* dicos-tdep.c: Ditto.
+	* dictionary.c: Ditto.
+	* dictionary.h: Ditto.
+	* dink32-rom.c: Ditto.
+	* disasm.c: Ditto.
+	* doublest.c: Ditto.
+	* dsrec.c: Ditto.
+	* dummy-frame.c: Ditto.
+	* dwarf2-frame.c: Ditto.
+	* dwarf2expr.c: Ditto.
+	* dwarf2loc.c: Ditto.
+	* dwarf2read.c: Ditto.
+	* elfread.c: Ditto.
+	* environ.c: Ditto.
+	* eval.c: Ditto.
+	* event-top.h: Ditto.
+	* exceptions.c: Ditto.
+	* exceptions.h: Ditto.
+	* exec.c: Ditto.
+	* expprint.c: Ditto.
+	* expression.h: Ditto.
+	* f-exp.y: Ditto.
+	* f-lang.c: Ditto.
+	* f-lang.h: Ditto.
+	* f-typeprint.c: Ditto.
+	* f-valprint.c: Ditto.
+	* fbsd-nat.c: Ditto.
+	* findvar.c: Ditto.
+	* fork-child.c: Ditto.
+	* frame.c: Ditto.
+	* frame.h: Ditto.
+	* frv-linux-tdep.c: Ditto.
+	* frv-tdep.c: Ditto.
+	* gcore.c: Ditto.
+	* gdb-stabs.h: Ditto.
+	* gdb_assert.h: Ditto.
+	* gdb_string.h: Ditto.
+	* gdb_thread_db.h: Ditto.
+	* gdb_wait.h: Ditto.
+	* gdbarch.sh: Ditto.
+	* gdbcore.h: Ditto.
+	* gdbthread.h: Ditto.
+	* gdbtypes.c: Ditto.
+	* gdbtypes.h: Ditto.
+	* gnu-nat.c: Ditto.
+	* gnu-nat.h: Ditto.
+	* gnu-v2-abi.c: Ditto.
+	* gnu-v3-abi.c: Ditto.
+	* go32-nat.c: Ditto.
+	* gdbarch.c: Regenerate.
+	* gdbarch.h: Regenerate.
+
+2011-01-07  Michael Snyder  <msnyder at vmware.com>
+
+	* ax-gdb.c: Adjust some long output strings.
+	* breakpoint.c: Ditto.
+	* charset.c: Ditto.
+	* cp-abi.c: Ditto.
+	* infcall.c: Ditto.
+	* infrun.c: Ditto.
+	* linux-nat.c: Ditto.
+	* solib-pa64.c: Ditto.
+	* solib-som.c: Ditto.
+
+2011-01-06  Tom Tromey  <tromey at redhat.com>
+
+	PR python/12367:
+	* NEWS: Add item.
+	* python/python.c (GdbMethods): Add "newest_frame" method.
+	* python/python-internal.h (gdbpy_newest_frame): Declare.
+	* python/py-frame.c (gdbpy_newest_frame): New function.
+
+2010-01-06  Paul Pluzhnikov  <ppluzhnikov at google.com>
+
+	* jit.h (struct jit_code_entry): use ULONGEST for symfile_size.
+	* jit.c (jit_debug): New variable.
+	(show_jit_debug): New function.
+	(struct target_buffer): Use ULONGEST.
+	(bfd_open_from_target_memory): Likewise.
+	(jit_register_code, jit_inferior_init): Add debug output.
+	(_initialize_jit): Register "debug jit" command.
+
+2011-01-06  Tom Tromey  <tromey at redhat.com>
+
+	* frame.h (enum frame_type) <INLINE_FRAME>: Fix comment.
+	* python/py-frame.c (gdbpy_initialize_frames): Add INLINE_FRAME
+	and ARCH_FRAME.
+
+2011-01-06  Tom Tromey  <tromey at redhat.com>
+
+	* python/py-frame.c (frapy_block): Use get_frame_block.
+
+2011-01-06  Joel Brobecker  <brobecker at adacore.com>
+
+	Do not stop on SIGPRIO signals by default
+	* infrun.c (_initialize_infrun): Unset signal_stop and
+	signal_print for TARGET_SIGNAL_PRIO.
+
+2011-01-06  Joel Brobecker  <brobecker at adacore.com>
+
+	* ada-tasks.c: Fix style violation in comment.
+
+2011-01-06  Joel Brobecker  <brobecker at adacore.com>
+
+	* linespec.c (decode_compound, find_method): Remove trailing \n
+	at end of error string.
+	* solib-irix.c (irix_current_sos): Likewise.
+	* varobj.c (uninstall_variable): Likewise.
+
+2011-01-06  Joel Brobecker  <brobecker at adacore.com>
+
+	* copyright.py: New script.
+	* copyright.sh (byhand): Add *.ads, *.adb, *.gpr and *.inc.
+	Launch emacs without exec'ing. Call copyright.py afterwards.
+
+2011-01-05  Michael Snyder  <msnyder at vmware.com>
+
+	* addrmap.c: Shorten lines of >= 80 columns.
+	* arch-utils.c: Ditto.
+	* arch-utils.h: Ditto.
+	* ax-gdb.c: Ditto.
+	* ax-general.c: Ditto.
+	* bcache.c: Ditto.
+	* blockframe.c: Ditto.
+	* breakpoint.c: Ditto.
+	* buildsym.c: Ditto.
+	* c-lang.c: Ditto.
+	* c-typeprint.c: Ditto.
+	* charset.c: Ditto.
+	* coffread.c: Ditto.
+	* command.h: Ditto.
+	* corelow.c: Ditto.
+	* cp-abi.c: Ditto.
+	* cp-namespace.c: Ditto.
+	* cp-support.c: Ditto.
+	* dbug-rom.c: Ditto.
+	* dbxread.c: Ditto.
+	* defs.h: Ditto.
+	* dfp.c: Ditto.
+	* dfp.h: Ditto.
+	* dictionary.c: Ditto.
+	* disasm.c: Ditto.
+	* doublest.c: Ditto.
+	* dwarf2-frame.c: Ditto.
+	* dwarf2expr.c: Ditto.
+	* dwarf2loc.c: Ditto.
+	* dwarf2read.c: Ditto.
+	* elfread.c: Ditto.
+	* eval.c: Ditto.
+	* event-loop.c: Ditto.
+	* event-loop.h: Ditto.
+	* exceptions.h: Ditto.
+	* exec.c: Ditto.
+	* expprint.c: Ditto.
+	* expression.h: Ditto.
+	* f-lang.c: Ditto.
+	* f-valprint.c: Ditto.
+	* findcmd.c: Ditto.
+	* frame-base.c: Ditto.
+	* frame-unwind.c: Ditto.
+	* frame-unwind.h: Ditto.
+	* frame.c: Ditto.
+	* frame.h: Ditto.
+	* gcore.c: Ditto.
+	* gdb-stabs.h: Ditto.
+	* gdb_assert.h: Ditto.
+	* gdb_dirent.h: Ditto.
+	* gdb_obstack.h: Ditto.
+	* gdbcore.h: Ditto.
+	* gdbtypes.c: Ditto.
+	* gdbtypes.h: Ditto.
+	* inf-ttrace.c: Ditto.
+	* infcall.c: Ditto.
+	* infcmd.c: Ditto.
+	* inflow.c: Ditto.
+	* infrun.c: Ditto.
+	* inline-frame.h: Ditto.
+	* language.c: Ditto.
+	* language.h: Ditto.
+	* libunwind-frame.c: Ditto.
+	* libunwind-frame.h: Ditto.
+	* linespec.c: Ditto.
+	* linux-nat.c: Ditto.
+	* linux-nat.h: Ditto.
+	* linux-thread-db.c: Ditto.
+	* machoread.c: Ditto.
+	* macroexp.c: Ditto.
+	* macrotab.c: Ditto.
+	* main.c: Ditto.
+	* maint.c: Ditto.
+	* mdebugread.c: Ditto.
+	* memattr.c: Ditto.
+	* minsyms.c: Ditto.
+	* monitor.c: Ditto.
+	* monitor.h: Ditto.
+	* objfiles.c: Ditto.
+	* objfiles.h: Ditto.
+	* osabi.c: Ditto.
+	* p-typeprint.c: Ditto.
+	* p-valprint.c: Ditto.
+	* parse.c: Ditto.
+	* printcmd.c: Ditto.
+	* proc-events.c: Ditto.
+	* procfs.c: Ditto.
+	* progspace.c: Ditto.
+	* progspace.h: Ditto.
+	* psympriv.h: Ditto.
+	* psymtab.c: Ditto.
+	* record.c: Ditto.
+	* regcache.c: Ditto.
+	* regcache.h: Ditto.
+	* remote-fileio.c: Ditto.
+	* remote.c: Ditto.
+	* ser-mingw.c: Ditto.
+	* ser-tcp.c: Ditto.
+	* ser-unix.c: Ditto.
+	* serial.c: Ditto.
+	* serial.h: Ditto.
+	* solib-frv.c: Ditto.
+	* solib-irix.c: Ditto.
+	* solib-osf.c: Ditto.
+	* solib-pa64.c: Ditto.
+	* solib-som.c: Ditto.
+	* solib-sunos.c: Ditto.
+	* solib-svr4.c: Ditto.
+	* solib-target.c: Ditto.
+	* solib.c: Ditto.
+	* somread.c: Ditto.
+	* source.c: Ditto.
+	* stabsread.c: Ditto.
+	* stabsread.c: Ditto.
+	* stack.c: Ditto.
+	* stack.h: Ditto.
+	* symfile-mem.c: Ditto.
+	* symfile.c: Ditto.
+	* symfile.h: Ditto.
+	* symmisc.c: Ditto.
+	* symtab.c: Ditto.
+	* symtab.h: Ditto.
+	* target-descriptions.c: Ditto.
+	* target-memory.c: Ditto.
+	* target.c: Ditto.
+	* target.h: Ditto.
+	* terminal.h: Ditto.
+	* thread.c: Ditto.
+	* top.c: Ditto.
+	* tracepoint.c: Ditto.
+	* tracepoint.h: Ditto.
+	* ui-file.c: Ditto.
+	* ui-file.h: Ditto.
+	* ui-out.h: Ditto.
+	* user-regs.c: Ditto.
+	* user-regs.h: Ditto.
+	* utils.c: Ditto.
+	* valarith.c: Ditto.
+	* valops.c: Ditto.
+	* valprint.c: Ditto.
+	* valprint.h: Ditto.
+	* value.c: Ditto.
+	* varobj.c: Ditto.
+	* varobj.h: Ditto.
+	* vec.h: Ditto.
+	* xcoffread.c: Ditto.
+	* xcoffsolib.c: Ditto.
+	* xcoffsolib.h: Ditto.
+	* xml-syscall.c: Ditto.
+	* xml-tdesc.c: Ditto.
+
+2011-01-05  Michael Snyder  <msnyder at vmware.com>
+
+	* cli/cli-cmds.c: Shorten lines of >= 80 columns.
+	* cli/cli-decode.c: Ditto.
+	* cli/cli-dump.c: Ditto.
+	* cli/cli-logging.c: Ditto.
+	* cli/cli-script.c: Ditto.
+	* cli/cli-setshow.c: Ditto.
+	* common/signals.c: Ditto.
+	* mi/mi-cmd-break.c: Ditto.
+	* mi/mi-cmd-disas.c: Ditto.
+	* mi/mi-cmd-stack.c: Ditto.
+	* mi/mi-cmd-var.c: Ditto.
+	* mi/mi-cmds.c: Ditto.
+	* mi/mi-common.h: Ditto.
+	* mi/mi-console.c: Ditto.
+	* mi/mi-interp.c: Ditto.
+	* mi/mi-main.c: Ditto.
+	* osf-share/cma_attr.c: Ditto.
+	* osf-share/cma_deb_core.h: Ditto.
+	* osf-share/cma_debug_client.h: Ditto.
+	* osf-share/cma_handle.h: Ditto.
+	* osf-share/cma_mutex.h: Ditto.
+	* osf-share/cma_stack_int.h: Ditto.
+	* osf-share/cma_tcb_defs.h: Ditto.
+	* python/py-auto-load.c: Ditto.
+	* python/py-breakpoint.c: Ditto.
+	* python/py-cmd.c: Ditto.
+	* python/py-frame.c: Ditto.
+	* python/py-objfile.c: Ditto.
+	* python/py-param.c: Ditto.
+	* python/py-progspace.c: Ditto.
+	* python/py-symbol.c: Ditto.
+	* python/py-value.c: Ditto.
+	* python/python-internal.h: Ditto.
+	* python/python.c: Ditto.
+	* tui/tui-data.c: Ditto.
+	* tui/tui-disasm.c: Ditto.
+	* tui/tui-hooks.c: Ditto.
+	* tui/tui-io.c: Ditto.
+	* tui/tui-layout.c: Ditto.
+	* tui/tui-regs.c: Ditto.
+	* tui/tui-source.c: Ditto.
+	* tui/tui-stack.c: Ditto.
+	* tui/tui-win.c: Ditto.
+	* tui/tui-windata.c: Ditto.
+	* tui/tui-winsource.c: Ditto.
+
+2011-01-05  Joel Brobecker  <brobecker at adacore.com>
+
+	* configure.ac, gdb.1: Copyright year update.
+
+2011-01-03  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* frame.c (get_prev_frame_1) <UNWIND_INNER_ID>: New variables
+	this_pc_in_block, morestack_msym and morestack_name.  Check for
+	"__morestack" minimal symbol there.
+
+2011-01-03  Joel Brobecker  <brobecker at adacore.com>
+
+	* symfile.c (find_sym_fns): Add call to dont_repeat.
+
+2011-01-01  Joel Brobecker  <brobecker at adacore.com>
+
+	Copyright year update in most files (performed by copyright.sh).
+
+2011-01-01  Joel Brobecker  <brobecker at adacore.com>
+
+	* top.c (print_gdb_version): Update copyright year in version output.
+
+For older changes see ChangeLog-2010.
+

+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+coding: utf-8
+End:
diff --git a/gdb/MAINTAINERS b/gdb/MAINTAINERS
index a072f52..9d3e104 100644
--- a/gdb/MAINTAINERS
+++ b/gdb/MAINTAINERS
@@ -157,7 +157,7 @@ future, if there are, a reference to the list will be included here.
 
 The current global maintainers are (in alphabetical order):
 
-Pedro Alves                     pedro at codesourcery.com
+Pedro Alves                     palves at redhat.com
 Joel Brobecker			brobecker at adacore.com
 Kevin Buettner			kevinb at redhat.com
 Andrew Cagney			cagney at gnu.org
@@ -268,7 +268,6 @@ the native maintainer when resolving ABI issues.
 
 	ia64		--target=ia64-linux-gnu ,-Werror
 			(--target=ia64-elf broken)
-			Jan Kratochvil		jan.kratochvil at redhat.com
 
 	lm32		--target=lm32-elf ,-Werror
 
@@ -294,6 +293,7 @@ the native maintainer when resolving ABI issues.
 			Michael Eager		eager at eagercon.com
 
 	mips		--target=mips-elf ,-Werror
+			Maciej W. Rozycki	macro at codesourcery.com
 
 	mn10300		--target=mn10300-elf broken
 			(sim/ dies with make -j)
@@ -310,6 +310,10 @@ the native maintainer when resolving ABI issues.
 
 	powerpc		--target=powerpc-eabi ,-Werror
 
+	rl78		--target=rl78-elf ,-Werror
+
+	rx		--target=rx-elf ,-Werror
+
 	s390		--target=s390-linux-gnu ,-Werror
 
 	score	--target=score-elf
@@ -360,8 +364,6 @@ AIX			Joel Brobecker		brobecker at adacore.com
 Darwin			Tristan Gingold		gingold at adacore.com
 djgpp native		Eli Zaretskii		eliz at gnu.org
 GNU Hurd		Alfred M. Szmidt	ams at gnu.org
-MS Windows (NT, '00, 9x, Me, XP) host & native
-			Chris Faylor		cgf at alum.bu.edu
 GNU/Linux/x86 native & host
 			Mark Kettenis		kettenis at gnu.org
 GNU/Linux MIPS native & host
@@ -499,7 +501,7 @@ Dhananjay Deshpande				dhananjayd at kpitcummins.com
 Markus Deuling					deuling at de.ibm.com
 Klee Dienes					kdienes at apple.com
 Gabriel Dos Reis                                gdr at integrable-solutions.net
-Sergio Durigan Junior				sergiodj at linux.vnet.ibm.com
+Sergio Durigan Junior				sergiodj at redhat.com
 Michael Eager					eager at eagercon.com
 Richard Earnshaw				rearnsha at arm.com
 Steve Ellcey					sje at cup.hp.com
@@ -513,6 +515,7 @@ Nathan Froyd					froydnj at codesourcery.com
 Gary Funck					gary at intrepid.com
 Paul Gilliam					pgilliam at us.ibm.com
 Tristan Gingold					gingold at adacore.com
+Anton Gorenkov					xgsa at yandex.ru
 Raoul Gough					RaoulGough at yahoo.co.uk
 Anthony Green			 		green at redhat.com
 Matthew Green					mrg at eterna.com.au
@@ -578,13 +581,17 @@ Hans-Peter Nilsson				hp at bitrange.com
 David O'Brien					obrien at freebsd.org
 Alexandre Oliva					aoliva at redhat.com
 Karen Osmond					karen.osmond at gmail.com
+Pawandeep Oza					oza.pawandeep at gmail.com
 Denis Pilat					denis.pilat at st.com
+Andrew Pinski					apinski at cavium.com
 Kevin Pouget					kevin.pouget at st.com
 Paul Pluzhnikov					ppluzhnikov at google.com
 Marek Polacek					mpolacek at redhat.com
+Siddhesh Poyarekar				siddhesh at redhat.com
 Vladimir Prus                                   vladimir at codesourcery.com
 Yao Qi						yao at codesourcery.com
 Qinwei						qinwei at sunnorth.com.cn
+Siva Chandra Reddy				sivachandra at google.com
 Matt Rice					ratmice at gmail.com
 Frederic Riss					frederic.riss at st.com
 Aleksandar Ristovski				aristovski at qnx.com
@@ -598,6 +605,7 @@ Grace Sainsbury					graces at redhat.com
 Kei Sakamoto					sakamoto.kei at renesas.com
 Mark Salter					msalter at redhat.com
 Richard Sandiford				richard at codesourcery.com
+Iain Sandoe					iain at codesourcery.com
 Peter Schauer					Peter.Schauer at mytum.de
 Andreas Schwab					schwab at linux-m68k.org
 Thomas Schwinge					tschwinge at gnu.org
@@ -633,6 +641,7 @@ Kris Warkentin					kewarken at qnx.com
 Philippe Waroquiers				philippe.waroquiers at skynet.be
 Ulrich Weigand					uweigand at de.ibm.com
 Ken Werner					ken.werner at de.ibm.com
+Mark Wielaard					mjw at redhat.com
 Nathan Williams					nathanw at wasabisystems.com
 Bob Wilson					bob.wilson at acm.org
 Jim Wilson					wilson at tuliptree.org
@@ -644,7 +653,6 @@ Wu Zhou						woodzltc at cn.ibm.com
 Yoshinori Sato					ysato at users.sourceforge.jp
 Hui Zhu						teawater at gmail.com
 
-
 			Past Maintainers
 
 Whenever removing yourself, or someone else, from this file, consider
@@ -675,6 +683,7 @@ Michael Chastain (testsuite)			mec.gnu at mindspring dot com
 Fred Fish (global)
 Jim Blandy (global)				jimb at red-bean.com
 Michael Snyder (global)
+Christopher Faylor (MS Windows, host & native)
 
 
 Folks that have been caught up in a paper trail:
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index d79bc37..a41cff9 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -166,20 +166,17 @@ INTL = @LIBINTL@
 INTL_DEPS = @LIBINTL_DEP@
 INTL_CFLAGS = @INCINTL@
 
-# Did the user give us a --with-sysroot option?
-TARGET_SYSTEM_ROOT = @TARGET_SYSTEM_ROOT@
-TARGET_SYSTEM_ROOT_DEFINE = @TARGET_SYSTEM_ROOT_DEFINE@
-
 # Did the user give us a --with-gdb-datadir option?
 GDB_DATADIR = @GDB_DATADIR@
 
 # Helper code from gnulib.
-LIBGNU = gnulib/libgnu.a
-INCGNU = -I$(srcdir)/gnulib -Ignulib
+GNULIB_BUILDDIR = build-gnulib
+LIBGNU = $(GNULIB_BUILDDIR)/import/libgnu.a
+INCGNU = -I$(srcdir)/gnulib/import -I$(GNULIB_BUILDDIR)/import
 
 # Generated headers in the gnulib directory.  These must be listed
 # so that they are generated before other files are compiled.
-GNULIB_H = gnulib/string.h @GNULIB_STDINT_H@
+GNULIB_H = $(GNULIB_BUILDDIR)/import/string.h @GNULIB_STDINT_H@
 
 #
 # CLI sub directory definitons
@@ -205,14 +202,14 @@ SUBDIR_MI_OBS = \
 	mi-out.o mi-console.o \
 	mi-cmds.o mi-cmd-env.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o \
 	mi-cmd-file.o mi-cmd-disas.o mi-symbol-cmds.o mi-cmd-target.o \
-	mi-interp.o \
+	mi-cmd-info.o mi-interp.o \
 	mi-main.o mi-parse.o mi-getopt.o
 SUBDIR_MI_SRCS = \
 	mi/mi-out.c mi/mi-console.c \
 	mi/mi-cmds.c mi/mi-cmd-env.c \
 	mi/mi-cmd-var.c mi/mi-cmd-break.c mi/mi-cmd-stack.c \
 	mi/mi-cmd-file.c mi/mi-cmd-disas.c mi/mi-symbol-cmds.c \
-	mi/mi-cmd-target.c mi/mi-interp.c \
+	mi/mi-cmd-target.c mi/mi-cmd-info.c mi/mi-interp.c \
 	mi/mi-main.c mi/mi-parse.c mi/mi-getopt.c
 SUBDIR_MI_DEPS =
 SUBDIR_MI_LDFLAGS=
@@ -222,20 +219,16 @@ SUBDIR_MI_CFLAGS=
 # TUI sub directory definitions
 #
 
-# Name of the TUI program
-TUI=gdbtui
-
 SUBDIR_TUI_OBS = \
 	tui-command.o \
 	tui-data.o \
 	tui-disasm.o \
-	tui-file.o tui.o \
+	tui-file.o \
 	tui-hooks.o \
 	tui-interp.o \
 	tui-io.o \
 	tui-layout.o \
 	tui-out.o \
-	tui-main.o \
 	tui-regs.o \
 	tui-source.o \
 	tui-stack.o \
@@ -254,7 +247,6 @@ SUBDIR_TUI_SRCS = \
 	tui/tui-interp.c \
 	tui/tui-io.c \
 	tui/tui-layout.c \
-	tui/tui-main.c \
 	tui/tui-out.c \
 	tui/tui-regs.c \
 	tui/tui-source.c \
@@ -525,7 +517,7 @@ ALL_64_TARGET_OBS = \
 	amd64fbsd-tdep.o amd64-darwin-tdep.o amd64-dicos-tdep.o \
 	amd64-linux-tdep.o amd64nbsd-tdep.o \
 	amd64obsd-tdep.o amd64-sol2-tdep.o amd64-tdep.o amd64-windows-tdep.o \
-	ia64-hpux-tdep.o ia64-linux-tdep.o ia64-tdep.o \
+	ia64-hpux-tdep.o ia64-linux-tdep.o ia64-vms-tdep.o ia64-tdep.o \
 	mips64obsd-tdep.o \
 	sparc64fbsd-tdep.o sparc64-linux-tdep.o sparc64nbsd-tdep.o \
 	sparc64obsd-tdep.o sparc64-sol2-tdep.o sparc64-tdep.o
@@ -564,7 +556,9 @@ ALL_TARGET_OBS = \
 	mt-tdep.o \
 	nto-tdep.o \
 	ppc-linux-tdep.o ppcnbsd-tdep.o ppcobsd-tdep.o ppc-sysv-tdep.o \
+	rl78-tdep.o \
 	rs6000-aix-tdep.o rs6000-tdep.o \
+	rx-tdep.o \
 	s390-tdep.o \
 	score-tdep.o \
 	sh64-tdep.o sh-linux-tdep.o shnbsd-tdep.o sh-tdep.o \
@@ -572,6 +566,7 @@ ALL_TARGET_OBS = \
 	sparc-sol2-tdep.o sparc-tdep.o \
 	spu-tdep.o spu-multiarch.o solib-spu.o \
 	tic6x-tdep.o tic6x-linux-tdep.o \
+	tilegx-tdep.o tilegx-linux-tdep.o \
 	v850-tdep.o \
 	vaxnbsd-tdep.o vaxobsd-tdep.o vax-tdep.o \
 	xstormy16-tdep.o \
@@ -580,13 +575,12 @@ ALL_TARGET_OBS = \
 	bsd-uthread.o \
 	nbsd-tdep.o obsd-tdep.o \
 	sol2-tdep.o \
-	solib-frv.o solib-irix.o solib-svr4.o solib-target.o \
+	solib-frv.o solib-irix.o solib-svr4.o \
 	solib-som.o solib-pa64.o solib-darwin.o solib-dsbt.o \
 	dbug-rom.o dink32-rom.o ppcbug-rom.o m32r-rom.o dsrec.o monitor.o \
 	remote-m32r-sdi.o remote-mips.o \
 	xcoffread.o \
 	symfile-mem.o \
-	corelow.o \
 	windows-tdep.o \
 	linux-record.o
 
@@ -690,14 +684,16 @@ TARGET_FLAGS_TO_PASS = \
 # SFILES is used in building the distribution archive.
 
 SFILES = ada-exp.y ada-lang.c ada-typeprint.c ada-valprint.c ada-tasks.c \
-	addrmap.c \
+	ada-varobj.c \
+	addrmap.c auto-load.c \
 	auxv.c ax-general.c ax-gdb.c \
+	agent.c \
 	bcache.c \
 	bfd-target.c \
 	block.c blockframe.c breakpoint.c buildsym.c \
 	c-exp.y c-lang.c c-typeprint.c c-valprint.c \
-	charset.c cli-out.c coffread.c coff-pe-read.c \
-	complaints.c completer.c continuations.c corefile.c \
+	charset.c cleanups.c cli-out.c coffread.c coff-pe-read.c \
+	complaints.c completer.c continuations.c corefile.c corelow.c \
 	cp-abi.c cp-support.c cp-namespace.c cp-valprint.c \
 	d-lang.c d-valprint.c \
 	cp-name-parser.y \
@@ -709,6 +705,7 @@ SFILES = ada-exp.y ada-lang.c ada-typeprint.c ada-valprint.c ada-tasks.c \
 	f-exp.y f-lang.c f-typeprint.c f-valprint.c filesystem.c \
 	findcmd.c findvar.c frame.c frame-base.c frame-unwind.c \
 	gdbarch.c arch-utils.c gdbtypes.c gnu-v2-abi.c gnu-v3-abi.c \
+	go-exp.y go-lang.c go-typeprint.c go-valprint.c \
 	inf-loop.c \
 	infcall.c \
 	infcmd.c inflow.c infrun.c \
@@ -730,8 +727,8 @@ SFILES = ada-exp.y ada-lang.c ada-typeprint.c ada-valprint.c ada-tasks.c \
 	sentinel-frame.c \
 	serial.c ser-base.c ser-unix.c skip.c \
 	solib.c solib-target.c source.c \
-	stabsread.c stack.c std-regs.c symfile.c symfile-mem.c symmisc.c \
-	symtab.c \
+	stabsread.c stack.c probe.c stap-probe.c std-regs.c \
+	symfile.c symfile-mem.c symmisc.c symtab.c \
 	target.c target-descriptions.c target-memory.c \
 	thread.c top.c tracepoint.c \
 	trad-frame.c \
@@ -739,8 +736,7 @@ SFILES = ada-exp.y ada-lang.c ada-typeprint.c ada-valprint.c ada-tasks.c \
 	typeprint.c \
 	ui-out.c utils.c ui-file.h ui-file.c \
 	user-regs.c \
-	valarith.c valops.c valprint.c value.c varobj.c vec.c \
-	wrapper.c \
+	valarith.c valops.c valprint.c value.c varobj.c common/vec.c \
 	xml-tdesc.c xml-support.c \
 	inferior.c gdb_usleep.c \
 	record.c gcore.c \
@@ -749,7 +745,8 @@ SFILES = ada-exp.y ada-lang.c ada-typeprint.c ada-valprint.c ada-tasks.c \
 	annotate.c common/signals.c copying.c dfp.c gdb.c inf-child.c \
 	regset.c sol-thread.c windows-termcap.c \
 	common/common-utils.c common/xml-utils.c \
-	common/ptid.c common/buffer.c gdb-dlfcn.c
+	common/ptid.c common/buffer.c gdb-dlfcn.c common/agent.c \
+	common/format.c
 
 LINTFILES = $(SFILES) $(YYFILES) $(CONFIG_SRCS) init.c
 
@@ -772,30 +769,30 @@ common/gdb_signals.h common/gdb_thread_db.h common/i386-xstate.h \
 common/linux-ptrace.h \
 proc-utils.h arm-tdep.h ax-gdb.h ppcnbsd-tdep.h	\
 cli-out.h gdb_expat.h breakpoint.h infcall.h obsd-tdep.h \
-exec.h m32r-tdep.h osabi.h gdbcore.h solib-som.h \
+exec.h m32r-tdep.h osabi.h gdbcore.h solib-som.h amd64bsd-nat.h \
 i386bsd-nat.h xml-support.h xml-tdesc.h alphabsd-tdep.h gdb_obstack.h \
-ia64-tdep.h ada-lang.h varobj.h frv-tdep.h nto-tdep.h serial.h \
-c-lang.h d-lang.h frame.h event-loop.h block.h cli/cli-setshow.h	\
+ia64-tdep.h ada-lang.h ada-varobj.h varobj.h frv-tdep.h nto-tdep.h serial.h \
+c-lang.h d-lang.h golang.h frame.h event-loop.h block.h cli/cli-setshow.h \
 cli/cli-decode.h cli/cli-cmds.h cli/cli-dump.h cli/cli-utils.h \
-cli/cli-script.h macrotab.h symtab.h version.h gnulib/wchar.in.h \
-gnulib/string.in.h gnulib/str-two-way.h \
-gnulib/stdint.in.h remote.h gdb.h sparc-nat.h \
+cli/cli-script.h macrotab.h symtab.h version.h \
+gnulib/import/string.in.h gnulib/import/str-two-way.h \
+gnulib/import/stdint.in.h remote.h gdb.h sparc-nat.h \
 gdbthread.h dwarf2-frame.h dwarf2-frame-tailcall.h nbsd-nat.h dcache.h \
 amd64-nat.h s390-tdep.h arm-linux-tdep.h exceptions.h macroscope.h \
 gdbarch.h bsd-uthread.h gdb_stat.h memory-map.h	memrange.h \
 mdebugread.h m88k-tdep.h stabsread.h hppa-linux-offsets.h linux-fork.h \
 ser-unix.h inf-ptrace.h terminal.h ui-out.h frame-base.h \
 f-lang.h dwarf2loc.h value.h sparc-tdep.h defs.h target-descriptions.h \
-objfiles.h vec.h disasm.h mips-tdep.h ser-base.h \
+objfiles.h common/vec.h disasm.h mips-tdep.h ser-base.h \
 gdb_curses.h bfd-target.h memattr.h inferior.h ax.h dummy-frame.h \
-inflow.h fbsd-nat.h libunwind-frame.h completer.h inf-ttrace.h \
+inflow.h fbsd-nat.h ia64-libunwind-tdep.h completer.h inf-ttrace.h \
 solib-target.h gdb_vfork.h alpha-tdep.h dwarf2expr.h \
-m2-lang.h stack.h charset.h addrmap.h command.h solist.h source.h \
+m2-lang.h stack.h charset.h cleanups.h addrmap.h command.h solist.h source.h \
 target.h prologue-value.h cp-abi.h tui/tui-hooks.h tui/tui.h \
 tui/tui-file.h tui/tui-command.h tui/tui-disasm.h tui/tui-wingeneral.h \
 tui/tui-windata.h tui/tui-data.h tui/tui-win.h tui/tui-stack.h \
 tui/tui-winsource.h tui/tui-regs.h tui/tui-io.h tui/tui-layout.h \
-tui/tui-source.h xcoffsolib.h sol2-tdep.h gregset.h sh-tdep.h \
+tui/tui-source.h xcoffsolib.h sol2-tdep.h gregset.h sh-tdep.h sh64-tdep.h \
 expression.h score-tdep.h gdb_select.h ser-tcp.h buildsym.h valprint.h \
 call-cmds.h typeprint.h mi/mi-getopt.h mi/mi-parse.h mi/mi-console.h \
 mi/mi-out.h mi/mi-main.h mi/mi-common.h mi/mi-cmds.h linux-nat.h \
@@ -808,7 +805,7 @@ coff-pe-read.h parser-defs.h gdb_ptrace.h mips-linux-tdep.h \
 m68k-tdep.h spu-tdep.h jv-lang.h environ.h solib-irix.h amd64-tdep.h \
 doublest.h regset.h hppa-tdep.h ppc-linux-tdep.h rs6000-tdep.h \
 common/gdb_locale.h common/gdb_dirent.h arch-utils.h trad-frame.h gnu-nat.h \
-language.h nbsd-tdep.h wrapper.h solib-svr4.h \
+language.h nbsd-tdep.h solib-svr4.h \
 macroexp.h ui-file.h regcache.h gdb_string.h tracepoint.h i386-tdep.h \
 inf-child.h p-lang.h event-top.h gdbtypes.h user-regs.h \
 regformats/regdef.h config/alpha/nm-osf3.h  config/i386/nm-i386gnu.h \
@@ -827,10 +824,12 @@ i386-darwin-tdep.h i386-nat.h linux-record.h moxie-tdep.h \
 osdata.h procfs.h python/py-event.h python/py-events.h python/py-stopevent.h \
 python/python-internal.h python/python.h ravenscar-thread.h record.h \
 solib-darwin.h solib-ia64-hpux.h solib-spu.h windows-nat.h xcoffread.h \
-gnulib/extra/arg-nonnull.h gnulib/extra/c++defs.h gnulib/extra/warn-on-use.h \
-gnulib/stddef.in.h inline-frame.h skip.h \
+gnulib/import/extra/snippet/arg-nonnull.h gnulib/import/extra/snippet/c++defs.h \
+gnulib/import/extra/snippet/warn-on-use.h \
+gnulib/import/stddef.in.h gnulib/import/inttypes.in.h inline-frame.h skip.h \
 common/common-utils.h common/xml-utils.h common/buffer.h common/ptid.h \
-common/linux-osdata.h gdb-dlfcn.h
+common/format.h \
+common/linux-osdata.h gdb-dlfcn.h auto-load.h probe.h stap-probe.h
 
 # Header files that already have srcdir in them, or which are in objdir.
 
@@ -862,10 +861,11 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \
 	version.o \
 	annotate.o \
 	addrmap.o \
-	auxv.o \
+	auto-load.o auxv.o \
+	agent.o \
 	bfd-target.o \
-	blockframe.o breakpoint.o findvar.o regcache.o \
-	charset.o continuations.o disasm.o dummy-frame.o dfp.o \
+	blockframe.o breakpoint.o findvar.o regcache.o cleanups.o \
+	charset.o continuations.o corelow.o disasm.o dummy-frame.o dfp.o \
 	source.o value.o eval.o valops.o valarith.o valprint.o printcmd.o \
 	block.o symtab.o psymtab.o symfile.o symmisc.o linespec.o dictionary.o \
 	infcall.o \
@@ -890,9 +890,10 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \
 	dwarf2read.o mipsread.o stabsread.o corefile.o \
 	dwarf2expr.o dwarf2loc.o dwarf2-frame.o dwarf2-frame-tailcall.o \
 	ada-lang.o c-lang.o d-lang.o f-lang.o objc-lang.o \
-	ada-tasks.o \
+	ada-tasks.o ada-varobj.o \
 	ui-out.o cli-out.o \
-	varobj.o vec.o wrapper.o \
+	varobj.o vec.o \
+	go-lang.o go-valprint.o go-typeprint.o \
 	jv-lang.o jv-valprint.o jv-typeprint.o \
 	m2-lang.o opencl-lang.o p-lang.o p-typeprint.o p-valprint.o \
 	sentinel-frame.o \
@@ -916,19 +917,20 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \
 	xml-support.o xml-syscall.o xml-utils.o \
 	target-descriptions.o target-memory.o xml-tdesc.o xml-builtin.o \
 	inferior.o osdata.o gdb_usleep.o record.o gcore.o \
-	jit.o progspace.o skip.o \
-	common-utils.o buffer.o ptid.o gdb-dlfcn.o
+	jit.o progspace.o skip.o probe.o \
+	common-utils.o buffer.o ptid.o gdb-dlfcn.o common-agent.o \
+	format.o
 
 TSOBS = inflow.o
 
-SUBDIRS = doc @subdirs@ data-directory
-CLEANDIRS = $(SUBDIRS) gnulib 
+SUBDIRS = doc @subdirs@ data-directory $(GNULIB_BUILDDIR)
+CLEANDIRS = $(SUBDIRS)
 
 # List of subdirectories in the build tree that must exist.
 # This is used to force build failures in existing trees when
 # a new directory is added.
 # The format here is for the `case' shell command.
-REQUIRED_SUBDIRS = doc | testsuite | gnulib | data-directory
+REQUIRED_SUBDIRS = doc | testsuite | $(GNULIB_BUILDDIR) | data-directory
 
 # For now, shortcut the "configure GDB for fewer languages" stuff.
 YYFILES = c-exp.c \
@@ -937,13 +939,13 @@ YYFILES = c-exp.c \
 	ada-lex.c \
 	ada-exp.c \
 	jv-exp.c \
-	f-exp.c m2-exp.c p-exp.c
+	f-exp.c go-exp.c m2-exp.c p-exp.c
 YYOBJ = c-exp.o \
 	cp-name-parser.o \
 	objc-exp.o \
 	ada-exp.o \
 	jv-exp.o \
-	f-exp.o m2-exp.o p-exp.o
+	f-exp.o go-exp.o m2-exp.o p-exp.o
 
 # Things which need to be built when making a distribution.
 
@@ -960,8 +962,6 @@ generated_files = config.h observer.h observer.inc ada-lex.c jit-reader.h \
 
 all: gdb$(EXEEXT) $(CONFIG_ALL)
 	@$(MAKE) $(FLAGS_TO_PASS) DO=all "DODIRS=`echo $(SUBDIRS) | sed 's/testsuite//'`" subdir_do
-.PHONY: all-tui
-all-tui: $(TUI)$(EXEEXT)
 
 installcheck:
 
@@ -1040,22 +1040,6 @@ install-only: $(CONFIG_INSTALL)
 		$(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(includedir)/gdb ; \
 		$(INSTALL_DATA) jit-reader.h $(DESTDIR)$(includedir)/gdb/jit-reader.h
 	@$(MAKE) DO=install "DODIRS=$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do
-.PHONY: install-tui
-install-tui:
-	transformed_name=`t='$(program_transform_name)'; \
-			  echo $(TUI) | sed -e "$$t"` ; \
-		if test "x$$transformed_name" = x; then \
-		  transformed_name=$(TUI) ; \
-		else \
-		  true ; \
-		fi ; \
-		$(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(bindir) ; \
-		$(INSTALL_PROGRAM) $(TUI)$(EXEEXT) \
-			$(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) ; \
-		$(SHELL) $(srcdir)/../mkinstalldirs \
-			$(DESTDIR)$(man1dir) ; \
-		$(INSTALL_DATA) $(srcdir)/gdb.1 \
-			$(DESTDIR)$(man1dir)/$$transformed_name.1
 
 install-python:
 	$(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(GDB_DATADIR)/python/gdb
@@ -1071,17 +1055,6 @@ uninstall: force $(CONFIG_UNINSTALL)
 		rm -f $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) \
 		      $(DESTDIR)$(man1dir)/$$transformed_name.1
 	@$(MAKE) DO=uninstall "DODIRS=$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do
-.PHONY: uninstall-tui
-uninstall-tui:
-	transformed_name=`t='$(program_transform_name)'; \
-			  echo $(TUI) | sed -e $$t` ; \
-		if test "x$$transformed_name" = x; then \
-		  transformed_name=$(TUI) ; \
-		else \
-		  true ; \
-		fi ; \
-		rm -f $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) \
-		      $(DESTDIR)$(man1dir)/$$transformed_name.1
 
 # The C++ name parser can be built standalone for testing.
 test-cp-name-parser.o: cp-name-parser.c
@@ -1178,23 +1151,27 @@ init.c: $(INIT_FILES)
 
 .PRECIOUS: init.c
 
+# Create a library of the gdb object files and build GDB by linking
+# against that.
+#
+# init.o is very important.  It pulls in the rest of GDB.
+LIBGDB_OBS= $(COMMON_OBS) $(TSOBS) $(ADD_FILES) init.o
+libgdb.a: $(LIBGDB_OBS)
+	-rm -f libgdb.a
+	$(AR) q libgdb.a $(LIBGDB_OBS)
+	$(RANLIB) libgdb.a
+
 # Removing the old gdb first works better if it is running, at least on SunOS.
-gdb$(EXEEXT): gdb.o libgdb.a $(ADD_DEPS) $(CDEPS) $(TDEPLIBS)
+gdb$(EXEEXT): gdb.o $(LIBGDB_OBS) $(ADD_DEPS) $(CDEPS) $(TDEPLIBS)
 	rm -f gdb$(EXEEXT)
 	$(CC_LD) $(INTERNAL_LDFLAGS) $(WIN32LDAPP) \
-		-o gdb$(EXEEXT) gdb.o libgdb.a \
-		$(TDEPLIBS) $(TUI_LIBRARY) $(CLIBS) $(LOADLIBES)
-
-$(TUI)$(EXEEXT): tui-main.o libgdb.a $(ADD_DEPS) $(CDEPS) $(TDEPLIBS)
-	rm -f $(TUI)$(EXEEXT)
-	$(CC_LD) $(INTERNAL_LDFLAGS) $(WIN32LDAPP) \
-		-o $(TUI)$(EXEEXT) tui-main.o libgdb.a \
+		-o gdb$(EXEEXT) gdb.o $(LIBGDB_OBS) \
 		$(TDEPLIBS) $(TUI_LIBRARY) $(CLIBS) $(LOADLIBES)
 
 # Convenience rule to handle recursion.
 $(LIBGNU) $(GNULIB_H): all-lib
-all-lib: gnulib/Makefile
-	@$(MAKE) $(FLAGS_TO_PASS) DO=all DODIRS=gnulib subdir_do
+all-lib: $(GNULIB_BUILDDIR)/Makefile
+	@$(MAKE) $(FLAGS_TO_PASS) DO=all DODIRS=$(GNULIB_BUILDDIR) subdir_do
 .PHONY: all-lib
 
 # Convenience rule to handle recursion.
@@ -1202,16 +1179,6 @@ all-lib: gnulib/Makefile
 all-data-directory: data-directory/Makefile
 	@$(MAKE) $(FLAGS_TO_PASS) DO=all DODIRS=data-directory subdir_do
 
-# Create a library of the gdb object files and build GDB by linking
-# against that.
-#
-# init.o is very important.  It pulls in the rest of GDB.
-LIBGDB_OBS= $(COMMON_OBS) $(TSOBS) $(ADD_FILES) init.o
-libgdb.a: $(LIBGDB_OBS)
-	-rm -f libgdb.a
-	$(AR) q libgdb.a $(LIBGDB_OBS)
-	$(RANLIB) libgdb.a
-
 # This is useful when debugging GDB, because some Unix's don't let you run GDB
 # on itself without copying the executable.  So "make gdb1" will make
 # gdb and put a copy in gdb1, and you can run it with "gdb gdb1".
@@ -1251,10 +1218,6 @@ clean mostlyclean: $(CONFIG_CLEAN)
 	rm -f xml-builtin.c stamp-xml
 	rm -f $(DEPDIR)/*
 
-.PHONY: clean-tui
-clean-tui:
-	rm -f $(TUI)$(EXEEXT)
-
 # This used to depend on c-exp.c m2-exp.c TAGS
 # I believe this is wrong; the makefile standards for distclean just
 # describe removing files; the only sort of "re-create a distribution"
@@ -1263,10 +1226,11 @@ clean-tui:
 # always included in SUBDIRS.  Remove the gdbserver files explicitly.
 distclean: clean
 	@$(MAKE) $(FLAGS_TO_PASS) DO=distclean "DODIRS=$(CLEANDIRS)" subdir_do
+	rm -rf $(GNULIB_BUILDDIR)
 	rm -f gdbserver/config.status gdbserver/config.log
 	rm -f gdbserver/tm.h gdbserver/xm.h gdbserver/nm.h
 	rm -f gdbserver/Makefile gdbserver/config.cache
-	rm -f nm.h config.status config.h stamp-h .gdbinit jit-reader.h
+	rm -f nm.h config.status config.h stamp-h gdb-gdb.gdb jit-reader.h
 	rm -f y.output yacc.acts yacc.tmp y.tab.h
 	rm -f config.log config.cache
 	rm -f Makefile
@@ -1283,7 +1247,7 @@ local-maintainer-clean:
 		ada-lex.c ada-exp.c \
 	        objc-exp.c \
 		jv-exp.tab \
-		f-exp.c m2-exp.c p-exp.c
+		f-exp.c go-exp.c m2-exp.c p-exp.c
 	rm -f TAGS $(INFOFILES)
 	rm -f $(YYFILES)
 	rm -f nm.h config.status
@@ -1318,8 +1282,8 @@ Makefile: Makefile.in config.status @frags@
 	  CONFIG_HEADERS= \
 	  $(SHELL) config.status
 
-gnulib/Makefile: gnulib/Makefile.in gnulib/Makefile.in config.status @frags@
-	CONFIG_FILES="gnulib/Makefile" \
+$(GNULIB_BUILDDIR)/Makefile: gnulib/Makefile.in config.status @frags@
+	@cd $(GNULIB_BUILDDIR); CONFIG_FILES="Makefile" \
 	  CONFIG_COMMANDS="depfiles" \
 	  CONFIG_HEADERS= \
 	  CONFIG_LINKS= \
@@ -1347,27 +1311,10 @@ config.status: $(srcdir)/configure configure.tgt configure.host
 	$(SHELL) config.status --recheck
 
 ACLOCAL = aclocal
-ACLOCAL_AMFLAGS = -I gnulib/m4 -I ../config
+ACLOCAL_AMFLAGS = -I ../config
 aclocal_m4_deps = \
 	configure.ac \
-	gnulib/m4/00gnulib.m4 \
-	gnulib/m4/extensions.m4 \
-	gnulib/m4/gnulib-common.m4 \
-	gnulib/m4/gnulib-comp.m4 \
-	gnulib/m4/include_next.m4 \
-	gnulib/m4/longlong.m4 \
-	gnulib/m4/memchr.m4 \
-	gnulib/m4/memmem.m4 \
-	gnulib/m4/mmap-anon.m4 \
-	gnulib/m4/multiarch.m4 \
-	gnulib/m4/onceonly.m4 \
-	gnulib/m4/stddef_h.m4 \
-	gnulib/m4/stdint.m4 \
-	gnulib/m4/string_h.m4 \
-	gnulib/m4/warn-on-use.m4 \
-	gnulib/m4/wchar_h.m4 \
-	gnulib/m4/wchar_t.m4 \
-	gnulib/m4/wint_t.m4 \
+	acx_configure_dir.m4 \
 	../config/extensions.m4 \
 	../config/lead-dot.m4 \
 	../config/proginstall.m4 \
@@ -1483,7 +1430,7 @@ ALLDEPFILES = \
 	avr-tdep.c \
 	bfin-linux-tdep.c bfin-tdep.c \
 	bsd-uthread.c bsd-kvm.c \
-	core-regset.c corelow.c \
+	core-regset.c \
 	dcache.c dicos-tdep.c darwin-nat.c \
 	exec.c \
 	fbsd-nat.c \
@@ -1506,10 +1453,10 @@ ALLDEPFILES = \
 	i386-sol2-nat.c i386-sol2-tdep.c \
 	i386gnu-nat.c i386gnu-tdep.c \
 	ia64-hpux-nat.c ia64-hpux-tdep.c \
-	ia64-linux-nat.c ia64-linux-tdep.c ia64-tdep.c \
+	ia64-linux-nat.c ia64-linux-tdep.c ia64-tdep.c ia64-vms-tdep.c \
 	inf-ptrace.c inf-ttrace.c \
 	irix5-nat.c \
-	libunwind-frame.c \
+	ia64-libunwind-tdep.c \
 	linux-fork.c \
 	linux-tdep.c \
 	linux-record.c \
@@ -1539,7 +1486,9 @@ ALLDEPFILES = \
 	remote-m32r-sdi.c remote-mips.c \
 	remote-sim.c \
 	dcache.c \
+	rl78-tdep.c \
 	rs6000-nat.c rs6000-tdep.c \
+	rx-tdep.c \
 	s390-tdep.c s390-nat.c \
 	score-tdep.c \
 	ser-go32.c ser-pipe.c ser-tcp.c ser-mingw.c \
@@ -1553,6 +1502,7 @@ ALLDEPFILES = \
 	sparc64nbsd-nat.c sparc64nbsd-tdep.c sparc64obsd-tdep.c \
 	sparcnbsd-nat.c sparcnbsd-tdep.c sparcobsd-tdep.c \
 	spu-linux-nat.c spu-tdep.c spu-multiarch.c solib-spu.c \
+	tilegx-linux-nat.c tilegx-tdep.c tilegx-linux-tdep.c \
 	v850-tdep.c \
 	vax-nat.c vax-tdep.c vaxbsd-nat.c vaxnbsd-tdep.c \
 	windows-nat.c windows-tdep.c \
@@ -1564,11 +1514,6 @@ ALLDEPFILES = \
 # Some files need explicit build rules (due to -Werror problems) or due
 # to sub-directory fun 'n' games.
 
-# main.o needs an explicit build rule to get TARGET_SYSTEM_ROOT and BINDIR.
-main.o: $(srcdir)/main.c
-	$(COMPILE) $(TARGET_SYSTEM_ROOT_DEFINE) -DBINDIR=\"$(bindir)\" $(srcdir)/main.c
-	$(POSTCOMPILE)
-
 # FIXME: cagney/2003-08-10: "monitor.c" gets -Wformat-nonliteral
 # errors.  It turns out that that is the least of monitor.c's
 # problems.  The function print_vsprintf appears to be using
@@ -1897,6 +1842,10 @@ mi-cmd-file.o: $(srcdir)/mi/mi-cmd-file.c
 	$(COMPILE) $(srcdir)/mi/mi-cmd-file.c
 	$(POSTCOMPILE)
 
+mi-cmd-info.o: $(srcdir)/mi/mi-cmd-info.c
+	$(COMPILE) $(srcdir)/mi/mi-cmd-info.c
+	$(POSTCOMPILE)
+
 mi-cmds.o: $(srcdir)/mi/mi-cmds.c
 	$(COMPILE) $(srcdir)/mi/mi-cmds.c
 	$(POSTCOMPILE)
@@ -1970,6 +1919,10 @@ buffer.o: ${srcdir}/common/buffer.c
 	$(COMPILE) $(srcdir)/common/buffer.c
 	$(POSTCOMPILE)
 
+format.o: ${srcdir}/common/format.c
+	$(COMPILE) $(srcdir)/common/format.c
+	$(POSTCOMPILE)
+
 linux-osdata.o: ${srcdir}/common/linux-osdata.c
 	$(COMPILE) $(srcdir)/common/linux-osdata.c
 	$(POSTCOMPILE)
@@ -1978,6 +1931,18 @@ linux-procfs.o: $(srcdir)/common/linux-procfs.c
 	$(COMPILE) $(srcdir)/common/linux-procfs.c
 	$(POSTCOMPILE)
 
+linux-ptrace.o: $(srcdir)/common/linux-ptrace.c
+	$(COMPILE) $(srcdir)/common/linux-ptrace.c
+	$(POSTCOMPILE)
+
+common-agent.o: $(srcdir)/common/agent.c
+	$(COMPILE) $(srcdir)/common/agent.c
+	$(POSTCOMPILE)
+
+vec.o: ${srcdir}/common/vec.c
+	$(COMPILE) $(srcdir)/common/vec.c
+	$(POSTCOMPILE)
+
 #
 # gdb/tui/ dependencies
 #
@@ -2020,10 +1985,6 @@ tui-layout.o: $(srcdir)/tui/tui-layout.c
 	$(COMPILE) $(srcdir)/tui/tui-layout.c
 	$(POSTCOMPILE)
 
-tui-main.o: $(srcdir)/tui/tui-main.c
-	$(COMPILE) $(srcdir)/tui/tui-main.c
-	$(POSTCOMPILE)
-
 tui-out.o: $(srcdir)/tui/tui-out.c
 	$(COMPILE) $(srcdir)/tui/tui-out.c
 	$(POSTCOMPILE)
@@ -2209,7 +2170,7 @@ py-value.o: $(srcdir)/python/py-value.c
 
 # A list of all the objects we might care about in this build, for
 # dependency tracking.
-all_object_files = gdb.o tui-main.o $(LIBGDB_OBS) gdbtk-main.o \
+all_object_files = gdb.o $(LIBGDB_OBS) gdbtk-main.o \
 	test-cp-name-parser.o
 
 # Ensure that generated files are created early.  Use order-only
diff --git a/gdb/NEWS b/gdb/NEWS
index 07d0b3b..b281824 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -1,6 +1,313 @@
 		What has changed in GDB?
 	     (Organized release by release)
 
+*** Changes in GDB 7.5
+
+* GDB now supports x32 ABI.  Visit <http://sites.google.com/site/x32abi/>
+  for more x32 ABI info.
+
+* GDB now supports access to MIPS DSP registers on Linux targets.
+
+* GDB now supports debugging microMIPS binaries.
+
+* The "info os" command on GNU/Linux can now display information on
+  several new classes of objects managed by the operating system:
+    "info os procgroups" lists process groups
+    "info os files" lists file descriptors
+    "info os sockets" lists internet-domain sockets
+    "info os shm" lists shared-memory regions
+    "info os semaphores" lists semaphores
+    "info os msg" lists message queues
+    "info os modules" lists loaded kernel modules
+
+* GDB now has support for SDT (Static Defined Tracing) probes.  Currently,
+  the only implemented backend is for SystemTap probes (<sys/sdt.h>).  You
+  can set a breakpoint using the new "-probe, "-pstap" or "-probe-stap"
+  options and inspect the probe arguments using the new $_probe_arg family
+  of convenience variables.  You can obtain more information about SystemTap
+  in <http://sourceware.org/systemtap/>.
+
+* GDB now supports reversible debugging on ARM, it allows you to
+  debug basic ARM and THUMB instructions, and provides 
+  record/replay support.  
+
+* The option "symbol-reloading" has been deleted as it is no longer used.
+
+* Python scripting
+
+  ** GDB commands implemented in Python can now be put in command class
+     "gdb.COMMAND_USER".
+
+  ** The "maint set python print-stack on|off" is now deleted.
+
+  ** A new class, gdb.printing.FlagEnumerationPrinter, can be used to
+     apply "flag enum"-style pretty-printing to any enum.
+
+  ** gdb.lookup_symbol can now work when there is no current frame.
+
+  ** gdb.Symbol now has a 'line' attribute, holding the line number in
+     the source at which the symbol was defined.
+
+  ** gdb.Symbol now has the new attribute 'needs_frame' and the new
+     method 'value'.  The former indicates whether the symbol needs a
+     frame in order to compute its value, and the latter computes the
+     symbol's value.
+
+  ** A new method 'referenced_value' on gdb.Value objects which can
+     dereference pointer as well as C++ reference values.
+
+  ** New methods 'global_block' and 'static_block' on gdb.Symtab objects
+     which return the global and static blocks (as gdb.Block objects),
+     of the underlying symbol table, respectively.
+
+  ** New function gdb.find_pc_line which returns the gdb.Symtab_and_line
+     object associated with a PC value.
+
+  ** gdb.Symtab_and_line has new attribute 'last' which holds the end
+     of the address range occupied by code for the current source line.
+
+* Go language support.
+  GDB now supports debugging programs written in the Go programming
+  language.
+
+* GDBserver now supports stdio connections.
+  E.g. (gdb) target remote | ssh myhost gdbserver - hello
+
+* The binary "gdbtui" can no longer be built or installed.
+  Use "gdb -tui" instead.
+
+* GDB will now print "flag" enums specially.  A flag enum is one where
+  all the enumerator values have no bits in common when pairwise
+  "and"ed.  When printing a value whose type is a flag enum, GDB will
+  show all the constants, e.g., for enum E { ONE = 1, TWO = 2}:
+  (gdb) print (enum E) 3
+  $1 = (ONE | TWO)
+
+* The filename part of a linespec will now match trailing components
+  of a source file name.  For example, "break gcc/expr.c:1000" will
+  now set a breakpoint in build/gcc/expr.c, but not
+  build/libcpp/expr.c.
+
+* The "info proc" and "generate-core-file" commands will now also
+  work on remote targets connected to GDBserver on Linux.
+
+* The command "info catch" has been removed.  It has been disabled
+  since December 2007.
+
+* The "catch exception" and "catch assert" commands now accept
+  a condition at the end of the command, much like the "break"
+  command does. For instance:
+
+        (gdb) catch exception Constraint_Error if Barrier = True
+
+  Previously, it was possible to add a condition to such catchpoints,
+  but it had to be done as a second step, after the catchpoint had been
+  created, using the "condition" command.
+
+* The "info static-tracepoint-marker" command will now also work on
+  native Linux targets with in-process agent.
+
+* GDB can now set breakpoints on inlined functions.
+
+* The .gdb_index section has been updated to include symbols for
+  inlined functions.  GDB will ignore older .gdb_index sections by
+  default, which could cause symbol files to be loaded more slowly
+  until their .gdb_index sections can be recreated.  The new command
+  "set use-deprecated-index-sections on" will cause GDB to use any older
+  .gdb_index sections it finds.  This will restore performance, but the
+  ability to set breakpoints on inlined functions will be lost in symbol
+  files with older .gdb_index sections.
+
+  The .gdb_index section has also been updated to record more information
+  about each symbol.  This speeds up the "info variables", "info functions"
+  and "info types" commands when used with programs having the .gdb_index
+  section, as well as speeding up debugging with shared libraries using
+  the .gdb_index section.
+
+* Ada support for GDB/MI Variable Objects has been added.
+
+* GDB can now support 'breakpoint always-inserted mode' in 'record'
+  target.
+
+* MI changes
+
+  ** New command -info-os is the MI equivalent of "info os".
+
+  ** Output logs ("set logging" and related) now include MI output.
+
+* New commands
+
+  ** "set use-deprecated-index-sections on|off"
+     "show use-deprecated-index-sections on|off"
+     Controls the use of deprecated .gdb_index sections.
+
+  ** "catch load" and "catch unload" can be used to stop when a shared
+     library is loaded or unloaded, respectively.
+
+  ** "enable count" can be used to auto-disable a breakpoint after
+     several hits.
+
+  ** "info vtbl" can be used to show the virtual method tables for
+     C++ and Java objects.
+
+  ** "explore" and its sub commands "explore value" and "explore type"
+     can be used to reccursively explore values and types of
+     expressions.  These commands are available only if GDB is
+     configured with '--with-python'.
+
+  ** "info auto-load" shows status of all kinds of auto-loaded files,
+     "info auto-load gdb-scripts" shows status of auto-loading GDB canned
+     sequences of commands files, "info auto-load python-scripts"
+     shows status of auto-loading Python script files,
+     "info auto-load local-gdbinit" shows status of loading init file
+     (.gdbinit) from current directory and "info auto-load libthread-db" shows
+     status of inferior specific thread debugging shared library loading.
+
+  ** "info auto-load-scripts", "set auto-load-scripts on|off"
+     and "show auto-load-scripts" commands have been deprecated, use their
+     "info auto-load python-scripts", "set auto-load python-scripts on|off"
+     and "show auto-load python-scripts" counterparts instead.
+
+  ** "dprintf location,format,args..." creates a dynamic printf, which
+     is basically a breakpoint that does a printf and immediately
+     resumes your program's execution, so it is like a printf that you
+     can insert dynamically at runtime instead of at compiletime.
+
+  ** "set print symbol"
+     "show print symbol"
+     Controls whether GDB attempts to display the symbol, if any,
+     corresponding to addresses it prints.  This defaults to "on", but
+     you can set it to "off" to restore GDB's previous behavior.
+
+* Deprecated commands
+
+  ** For the Renesas Super-H architecture, the "regs" command has been
+     deprecated, and "info all-registers" should be used instead.
+
+* New targets
+
+Renesas RL78			rl78-*-elf
+HP OpenVMS ia64			ia64-hp-openvms*
+
+* GDBserver supports evaluation of breakpoint conditions.  When
+  support is advertised by GDBserver, GDB may be told to send the
+  breakpoint conditions in bytecode form to GDBserver.  GDBserver
+  will only report the breakpoint trigger to GDB when its condition
+  evaluates to true.
+
+* New options
+
+set mips compression
+show mips compression
+  Select the compressed ISA encoding used in functions that have no symbol
+  information available.  The encoding can be set to either of:
+    mips16
+    micromips
+  and is updated automatically from ELF file flags if available.
+
+set breakpoint condition-evaluation
+show breakpoint condition-evaluation
+  Control whether breakpoint conditions are evaluated by GDB ("host") or by
+  GDBserver ("target").  Default option "auto" chooses the most efficient
+  available mode.
+  This option can improve debugger efficiency depending on the speed of the
+  target.
+
+set auto-load off
+  Disable auto-loading globally.
+
+show auto-load
+  Show auto-loading setting of all kinds of auto-loaded files.
+
+set auto-load gdb-scripts on|off
+show auto-load gdb-scripts
+  Control auto-loading of GDB canned sequences of commands files.
+
+set auto-load python-scripts on|off
+show auto-load python-scripts
+  Control auto-loading of Python script files.
+
+set auto-load local-gdbinit on|off
+show auto-load local-gdbinit
+  Control loading of init file (.gdbinit) from current directory.
+
+set auto-load libthread-db on|off
+show auto-load libthread-db
+  Control auto-loading of inferior specific thread debugging shared library.
+
+set auto-load scripts-directory <dir1>[:<dir2>...]
+show auto-load scripts-directory
+  Set a list of directories from which to load auto-loaded scripts.
+  Automatically loaded Python scripts and GDB scripts are located in one
+  of the directories listed by this option.
+  The delimiter (':' above) may differ according to the host platform.
+
+set auto-load safe-path <dir1>[:<dir2>...]
+show auto-load safe-path
+  Set a list of directories from which it is safe to auto-load files.
+  The delimiter (':' above) may differ according to the host platform.
+
+set debug auto-load on|off
+show debug auto-load
+  Control display of debugging info for auto-loading the files above.
+
+set dprintf-style gdb|call|agent
+show dprintf-style
+  Control the way in which a dynamic printf is performed; "gdb"
+  requests a GDB printf command, while "call" causes dprintf to call a
+  function in the inferior.  "agent" requests that the target agent
+  (such as GDBserver) do the printing.
+
+set dprintf-function <expr>
+show dprintf-function
+set dprintf-channel <expr>
+show dprintf-channel
+  Set the function and optional first argument to the call when using
+  the "call" style of dynamic printf.
+
+set disconnected-dprintf on|off
+show disconnected-dprintf
+  Control whether agent-style dynamic printfs continue to be in effect
+  after GDB disconnects.
+
+* New configure options
+
+--with-auto-load-dir
+  Configure default value for the 'set auto-load scripts-directory'
+  setting above.  It defaults to '$debugdir:$datadir/auto-load',
+  $debugdir representing global debugging info directories (available
+  via 'show debug-file-directory') and $datadir representing GDB's data
+  directory (available via 'show data-directory').
+
+--with-auto-load-safe-path
+  Configure default value for the 'set auto-load safe-path' setting
+  above.  It defaults to the --with-auto-load-dir setting.
+
+--without-auto-load-safe-path
+  Set 'set auto-load safe-path' to '/', effectively disabling this
+  security feature.
+
+* New remote packets
+
+z0/z1 conditional breakpoints extension
+
+  The z0/z1 breakpoint insertion packets have been extended to carry
+  a list of conditional expressions over to the remote stub depending on the
+  condition evaluation mode.  The use of this extension can be controlled
+  via the "set remote conditional-breakpoints-packet" command.
+
+QProgramSignals:
+
+  Specify the signals which the remote stub may pass to the debugged
+  program without GDB involvement.
+
+* New command line options
+
+--init-command=FILE, -ix          Like --command, -x but execute it
+                                  before loading inferior.
+--init-eval-command=COMMAND, -iex Like --eval-command=COMMAND, -ex but
+                                  execute it before loading inferior.
+
 *** Changes in GDB 7.4
 
 * GDB now handles ambiguous linespecs more consistently; the existing
@@ -179,6 +486,16 @@ tstop [NOTES]
 
 * New options
 
+set debug dwarf2-read
+show debug dwarf2-read
+  Turns on or off display of debugging messages related to reading
+  DWARF debug info.  The default is off.
+
+set debug symtab-create
+show debug symtab-create
+  Turns on or off display of debugging messages related to symbol table
+  creation.  The default is off.
+
 set extended-prompt
 show extended-prompt
   Set the GDB prompt, and allow escape sequences to be inserted to
@@ -259,11 +576,6 @@ Texas Instruments TMS320C6x		tic6x-*-*
 
 Renesas RL78				rl78-*-elf
 
-* The binary "gdbtui" is deprecated.
-
-  The binary will be no longer built or installed in GDB 7.5.
-  Use "gdb -tui" instead.
-
 *** Changes in GDB 7.3.1
 
 * The build failure for NetBSD and OpenBSD targets have now been fixed.
diff --git a/gdb/README b/gdb/README
index 999f992..33516ac 100644
--- a/gdb/README
+++ b/gdb/README
@@ -446,10 +446,10 @@ prefer; but you may abbreviate option names if you use `--'.
      Build GDB with the gdbtk GUI interface.  Requires TCL/Tk to be
      installed.
 
-`--with-libunwind'
-     Use the libunwind library for unwinding function call stack.  See
-     http://www.nongnu.org/libunwind/index.html fro details.
-     Supported only on some platforms.
+`--with-libunwind-ia64'
+     Use the libunwind library for unwinding function call stack on ia64
+     target platforms.
+     See http://www.nongnu.org/libunwind/index.html for details.
 
 `--with-curses'
      Use the curses library instead of the termcap library, for
diff --git a/gdb/acinclude.m4 b/gdb/acinclude.m4
index 1942ef4..9d231e1 100644
--- a/gdb/acinclude.m4
+++ b/gdb/acinclude.m4
@@ -1,6 +1,8 @@
 dnl written by Rob Savoye <rob at cygnus.com> for Cygnus Support
 dnl major rewriting for Tcl 7.5 by Don Libes <libes at nist.gov>
 
+sinclude(acx_configure_dir.m4)
+
 dnl gdb/configure.in uses BFD_NEED_DECLARATION, so get its definition.
 sinclude(../bfd/bfd.m4)
 
diff --git a/gdb/aclocal.m4 b/gdb/aclocal.m4
index a6372d1..fdd8d08 100644
--- a/gdb/aclocal.m4
+++ b/gdb/aclocal.m4
@@ -11,103 +11,6 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
-m4_ifndef([AC_AUTOCONF_VERSION],
-  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.64],,
-[m4_warning([this file was generated for autoconf 2.64.
-You have another version of autoconf.  It may work, but is not guaranteed to.
-If you have problems, you may need to regenerate the build system entirely.
-To do so, use the procedure documented by the package, typically `autoreconf'.])])
-
-# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_AUTOMAKE_VERSION(VERSION)
-# ----------------------------
-# Automake X.Y traces this macro to ensure aclocal.m4 has been
-# generated from the m4 files accompanying Automake X.Y.
-# (This private macro should not be called outside this file.)
-AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.11'
-dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
-dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.11.1], [],
-      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
-])
-
-# _AM_AUTOCONF_VERSION(VERSION)
-# -----------------------------
-# aclocal traces this macro to find the Autoconf version.
-# This is a private macro too.  Using m4_define simplifies
-# the logic in aclocal, which can simply ignore this definition.
-m4_define([_AM_AUTOCONF_VERSION], [])
-
-# AM_SET_CURRENT_AUTOMAKE_VERSION
-# -------------------------------
-# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
-# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
-AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.11.1])dnl
-m4_ifndef([AC_AUTOCONF_VERSION],
-  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
-
-# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
-
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
-# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
-#
-# Of course, Automake must honor this variable whenever it calls a
-# tool from the auxiliary directory.  The problem is that $srcdir (and
-# therefore $ac_aux_dir as well) can be either absolute or relative,
-# depending on how configure is run.  This is pretty annoying, since
-# it makes $ac_aux_dir quite unusable in subdirectories: in the top
-# source directory, any form will work fine, but in subdirectories a
-# relative path needs to be adjusted first.
-#
-# $ac_aux_dir/missing
-#    fails when called from a subdirectory if $ac_aux_dir is relative
-# $top_srcdir/$ac_aux_dir/missing
-#    fails if $ac_aux_dir is absolute,
-#    fails when called from a subdirectory in a VPATH build with
-#          a relative $ac_aux_dir
-#
-# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
-# are both prefixed by $srcdir.  In an in-source build this is usually
-# harmless because $srcdir is `.', but things will broke when you
-# start a VPATH build or use an absolute $srcdir.
-#
-# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
-# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
-#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
-# and then we would define $MISSING as
-#   MISSING="\${SHELL} $am_aux_dir/missing"
-# This will work as long as MISSING is not called from configure, because
-# unfortunately $(top_srcdir) has no meaning in configure.
-# However there are other variables, like CC, which are often used in
-# configure, and could therefore not use this "fixed" $ac_aux_dir.
-#
-# Another solution, used here, is to always expand $ac_aux_dir to an
-# absolute PATH.  The drawback is that using absolute paths prevent a
-# configured tree to be moved without reconfiguration.
-
-AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-])
-
 # AM_CONDITIONAL                                            -*- Autoconf -*-
 
 # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
@@ -144,428 +47,6 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 10
-
-# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
-# written in clear, in which case automake, when reading aclocal.m4,
-# will think it sees a *use*, and therefore will trigger all it's
-# C support machinery.  Also note that it means that autoscan, seeing
-# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
-
-
-# _AM_DEPENDENCIES(NAME)
-# ----------------------
-# See how the compiler implements dependency checking.
-# NAME is "CC", "CXX", "GCJ", or "OBJC".
-# We try a few techniques and use that to set a single cache variable.
-#
-# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
-# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
-# dependency, and given that the user is not expected to run this macro,
-# just rely on AC_PROG_CC.
-AC_DEFUN([_AM_DEPENDENCIES],
-[AC_REQUIRE([AM_SET_DEPDIR])dnl
-AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
-AC_REQUIRE([AM_MAKE_INCLUDE])dnl
-AC_REQUIRE([AM_DEP_TRACK])dnl
-
-ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
-       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
-       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
-       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
-       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
-                   [depcc="$$1"   am_compiler_list=])
-
-AC_CACHE_CHECK([dependency style of $depcc],
-               [am_cv_$1_dependencies_compiler_type],
-[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_$1_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
-  fi
-  am__universal=false
-  m4_case([$1], [CC],
-    [case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac],
-    [CXX],
-    [case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac])
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
-      else
-	break
-      fi
-      ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_$1_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_$1_dependencies_compiler_type=none
-fi
-])
-AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
-AM_CONDITIONAL([am__fastdep$1], [
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
-])
-
-
-# AM_SET_DEPDIR
-# -------------
-# Choose a directory name for dependency files.
-# This macro is AC_REQUIREd in _AM_DEPENDENCIES
-AC_DEFUN([AM_SET_DEPDIR],
-[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
-])
-
-
-# AM_DEP_TRACK
-# ------------
-AC_DEFUN([AM_DEP_TRACK],
-[AC_ARG_ENABLE(dependency-tracking,
-[  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors])
-if test "x$enable_dependency_tracking" != xno; then
-  am_depcomp="$ac_aux_dir/depcomp"
-  AMDEPBACKSLASH='\'
-fi
-AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
-AC_SUBST([AMDEPBACKSLASH])dnl
-_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
-])
-
-# Generate code to set up dependency tracking.              -*- Autoconf -*-
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-#serial 5
-
-# _AM_OUTPUT_DEPENDENCY_COMMANDS
-# ------------------------------
-AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
-[{
-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
-  # are listed without --file.  Let's play safe and only enable the eval
-  # if we detect the quoting.
-  case $CONFIG_FILES in
-  *\'*) eval set x "$CONFIG_FILES" ;;
-  *)   set x $CONFIG_FILES ;;
-  esac
-  shift
-  for mf
-  do
-    # Strip MF so we end up with the name of the file.
-    mf=`echo "$mf" | sed -e 's/:.*$//'`
-    # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named `Makefile.in', but
-    # some people rename them; so instead we look at the file content.
-    # Grep'ing the first line is not enough: some people post-process
-    # each Makefile.in and add a new line on top of each file to say so.
-    # Grep'ing the whole file is not good either: AIX grep has a line
-    # limit of 2048, but all sed's we know have understand at least 4000.
-    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
-      dirpart=`AS_DIRNAME("$mf")`
-    else
-      continue
-    fi
-    # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running `make'.
-    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-    test -z "$DEPDIR" && continue
-    am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "am__include" && continue
-    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # When using ansi2knr, U may be empty or an underscore; expand it
-    U=`sed -n 's/^U = //p' < "$mf"`
-    # Find all dependency output files, they are included files with
-    # $(DEPDIR) in their names.  We invoke sed twice because it is the
-    # simplest approach to changing $(DEPDIR) to its actual value in the
-    # expansion.
-    for file in `sed -n "
-      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
-      # Make sure the directory exists.
-      test -f "$dirpart/$file" && continue
-      fdir=`AS_DIRNAME(["$file"])`
-      AS_MKDIR_P([$dirpart/$fdir])
-      # echo "creating $dirpart/$file"
-      echo '# dummy' > "$dirpart/$file"
-    done
-  done
-}
-])# _AM_OUTPUT_DEPENDENCY_COMMANDS
-
-
-# AM_OUTPUT_DEPENDENCY_COMMANDS
-# -----------------------------
-# This macro should only be invoked once -- use via AC_REQUIRE.
-#
-# This code is only required when automatic dependency tracking
-# is enabled.  FIXME.  This creates each `.P' file that we will
-# need in order to bootstrap the dependency handling code.
-AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
-[AC_CONFIG_COMMANDS([depfiles],
-     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
-     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
-])
-
-# Do all the work for Automake.                             -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 16
-
-# 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.
-
-# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
-# AM_INIT_AUTOMAKE([OPTIONS])
-# -----------------------------------------------
-# The call with PACKAGE and VERSION arguments is the old style
-# call (pre autoconf-2.50), which is being phased out.  PACKAGE
-# and VERSION should now be passed to AC_INIT and removed from
-# the call to AM_INIT_AUTOMAKE.
-# We support both call styles for the transition.  After
-# the next Automake release, Autoconf can make the AC_INIT
-# arguments mandatory, and then we can depend on a new Autoconf
-# release and drop the old call support.
-AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_PREREQ([2.62])dnl
-dnl Autoconf wants to disallow AM_ names.  We explicitly allow
-dnl the ones we care about.
-m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
-AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
-AC_REQUIRE([AC_PROG_INSTALL])dnl
-if test "`cd $srcdir && pwd`" != "`pwd`"; then
-  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
-  # is not polluted with repeated "-I."
-  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
-  # test to see if srcdir already configured
-  if test -f $srcdir/config.status; then
-    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
-  fi
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
-  if (cygpath --version) >/dev/null 2>/dev/null; then
-    CYGPATH_W='cygpath -w'
-  else
-    CYGPATH_W=echo
-  fi
-fi
-AC_SUBST([CYGPATH_W])
-
-# Define the identity of the package.
-dnl Distinguish between old-style and new-style calls.
-m4_ifval([$2],
-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
- AC_SUBST([PACKAGE], [$1])dnl
- AC_SUBST([VERSION], [$2])],
-[_AM_SET_OPTIONS([$1])dnl
-dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
-m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
-  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
-
-_AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
-
-# Some tools Automake needs.
-AC_REQUIRE([AM_SANITY_CHECK])dnl
-AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
-AM_MISSING_PROG(AUTOCONF, autoconf)
-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
-AM_MISSING_PROG(AUTOHEADER, autoheader)
-AM_MISSING_PROG(MAKEINFO, makeinfo)
-AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
-AC_REQUIRE([AM_PROG_MKDIR_P])dnl
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
-AC_REQUIRE([AC_PROG_AWK])dnl
-AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
-	      [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
-			     [_AM_PROG_TAR([v7])])])
-_AM_IF_OPTION([no-dependencies],,
-[AC_PROVIDE_IFELSE([AC_PROG_CC],
-		  [_AM_DEPENDENCIES(CC)],
-		  [define([AC_PROG_CC],
-			  defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_CXX],
-		  [_AM_DEPENDENCIES(CXX)],
-		  [define([AC_PROG_CXX],
-			  defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_OBJC],
-		  [_AM_DEPENDENCIES(OBJC)],
-		  [define([AC_PROG_OBJC],
-			  defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
-])
-_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
-dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
-dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
-dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
-AC_CONFIG_COMMANDS_PRE(dnl
-[m4_provide_if([_AM_COMPILER_EXEEXT],
-  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
-])
-
-dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
-dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
-dnl mangled by Autoconf and run in a shell conditional statement.
-m4_define([_AC_COMPILER_EXEEXT],
-m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
-
-
-# When config.status generates a header, we must update the stamp-h file.
-# This file resides in the same directory as the config header
-# that is generated.  The stamp files are numbered to have different names.
-
-# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
-# loop where config.status creates the headers, so we can generate
-# our stamp files there.
-AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
-[# Compute $1's index in $config_headers.
-_am_arg=$1
-_am_stamp_count=1
-for _am_header in $config_headers :; do
-  case $_am_header in
-    $_am_arg | $_am_arg:* )
-      break ;;
-    * )
-      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-  esac
-done
-echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
-
-# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_INSTALL_SH
-# ------------------
-# Define $install_sh.
-AC_DEFUN([AM_PROG_INSTALL_SH],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-if test x"${install_sh}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\	*)
-    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
-  *)
-    install_sh="\${SHELL} $am_aux_dir/install-sh"
-  esac
-fi
-AC_SUBST(install_sh)])
-
 # Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
 # From Jim Meyering
 
@@ -606,253 +87,6 @@ AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of
 
 AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
 
-# Check to see how 'make' treats includes.	            -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 4
-
-# AM_MAKE_INCLUDE()
-# -----------------
-# Check to see how make treats includes.
-AC_DEFUN([AM_MAKE_INCLUDE],
-[am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
-	@echo this is the am__doit target
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-AC_MSG_CHECKING([for style of include used by $am_make])
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# Ignore all kinds of additional output from `make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
-  am__include=include
-  am__quote=
-  _am_result=GNU
-  ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
-   echo '.include "confinc"' > confmf
-   case `$am_make -s -f confmf 2> /dev/null` in #(
-   *the\ am__doit\ target*)
-     am__include=.include
-     am__quote="\""
-     _am_result=BSD
-     ;;
-   esac
-fi
-AC_SUBST([am__include])
-AC_SUBST([am__quote])
-AC_MSG_RESULT([$_am_result])
-rm -f confinc confmf
-])
-
-# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
-
-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 6
-
-# AM_MISSING_PROG(NAME, PROGRAM)
-# ------------------------------
-AC_DEFUN([AM_MISSING_PROG],
-[AC_REQUIRE([AM_MISSING_HAS_RUN])
-$1=${$1-"${am_missing_run}$2"}
-AC_SUBST($1)])
-
-
-# AM_MISSING_HAS_RUN
-# ------------------
-# Define MISSING if not defined so far and test if it supports --run.
-# If it does, set am_missing_run to use it, otherwise, to nothing.
-AC_DEFUN([AM_MISSING_HAS_RUN],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-AC_REQUIRE_AUX_FILE([missing])dnl
-if test x"${MISSING+set}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\	*)
-    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
-  *)
-    MISSING="\${SHELL} $am_aux_dir/missing" ;;
-  esac
-fi
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
-else
-  am_missing_run=
-  AC_MSG_WARN([`missing' script is too old or missing])
-fi
-])
-
-# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_MKDIR_P
-# ---------------
-# Check for `mkdir -p'.
-AC_DEFUN([AM_PROG_MKDIR_P],
-[AC_PREREQ([2.60])dnl
-AC_REQUIRE([AC_PROG_MKDIR_P])dnl
-dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
-dnl while keeping a definition of mkdir_p for backward compatibility.
-dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
-dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
-dnl Makefile.ins that do not define MKDIR_P, so we do our own
-dnl adjustment using top_builddir (which is defined more often than
-dnl MKDIR_P).
-AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
-case $mkdir_p in
-  [[\\/$]]* | ?:[[\\/]]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-])
-
-# Helper functions for option handling.                     -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 4
-
-# _AM_MANGLE_OPTION(NAME)
-# -----------------------
-AC_DEFUN([_AM_MANGLE_OPTION],
-[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
-
-# _AM_SET_OPTION(NAME)
-# ------------------------------
-# Set option NAME.  Presently that only means defining a flag for this option.
-AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
-
-# _AM_SET_OPTIONS(OPTIONS)
-# ----------------------------------
-# OPTIONS is a space-separated list of Automake options.
-AC_DEFUN([_AM_SET_OPTIONS],
-[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
-
-# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
-# -------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-AC_DEFUN([_AM_IF_OPTION],
-[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-
-# Check to make sure that the build environment is sane.    -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 5
-
-# AM_SANITY_CHECK
-# ---------------
-AC_DEFUN([AM_SANITY_CHECK],
-[AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Reject unsafe characters in $srcdir or the absolute working directory
-# name.  Accept space and tab only in the latter.
-am_lf='
-'
-case `pwd` in
-  *[[\\\"\#\$\&\'\`$am_lf]]*)
-    AC_MSG_ERROR([unsafe absolute working directory name]);;
-esac
-case $srcdir in
-  *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
-    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
-esac
-
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments.  Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
-   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-   if test "$[*]" = "X"; then
-      # -L didn't work.
-      set X `ls -t "$srcdir/configure" conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$[*]" != "X $srcdir/configure conftest.file" \
-      && test "$[*]" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
-alias in your environment])
-   fi
-
-   test "$[2]" = conftest.file
-   )
-then
-   # Ok.
-   :
-else
-   AC_MSG_ERROR([newly created file is older than distributed files!
-Check your system clock])
-fi
-AC_MSG_RESULT(yes)])
-
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_INSTALL_STRIP
-# ---------------------
-# One issue with vendor `install' (even GNU) is that you can't
-# specify the program used to strip binaries.  This is especially
-# annoying in cross-compiling environments, where the build's strip
-# is unlikely to handle the host's binaries.
-# Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in `make install-strip', and initialize
-# STRIPPROG with the value of the STRIP variable (set by the user).
-AC_DEFUN([AM_PROG_INSTALL_STRIP],
-[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
-if test "$cross_compiling" != no; then
-  AC_CHECK_TOOL([STRIP], [strip], :)
-fi
-INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
-AC_SUBST([INSTALL_STRIP_PROGRAM])])
-
 # Copyright (C) 2006, 2008  Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
@@ -872,121 +106,7 @@ AC_DEFUN([_AM_SUBST_NOTMAKE])
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
-# Check how to create a tarball.                            -*- Autoconf -*-
-
-# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# _AM_PROG_TAR(FORMAT)
-# --------------------
-# Check how to create a tarball in format FORMAT.
-# FORMAT should be one of `v7', `ustar', or `pax'.
-#
-# Substitute a variable $(am__tar) that is a command
-# writing to stdout a FORMAT-tarball containing the directory
-# $tardir.
-#     tardir=directory && $(am__tar) > result.tar
-#
-# Substitute a variable $(am__untar) that extract such
-# a tarball read from stdin.
-#     $(am__untar) < result.tar
-AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.
-AM_MISSING_PROG([AMTAR], [tar])
-m4_if([$1], [v7],
-     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
-     [m4_case([$1], [ustar],, [pax],,
-              [m4_fatal([Unknown tar format])])
-AC_MSG_CHECKING([how to create a $1 tar archive])
-# Loop over all known methods to create a tar archive until one works.
-_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
-_am_tools=${am_cv_prog_tar_$1-$_am_tools}
-# Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of `-'.
-for _am_tool in $_am_tools
-do
-  case $_am_tool in
-  gnutar)
-    for _am_tar in tar gnutar gtar;
-    do
-      AM_RUN_LOG([$_am_tar --version]) && break
-    done
-    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
-    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
-    am__untar="$_am_tar -xf -"
-    ;;
-  plaintar)
-    # Must skip GNU tar: if it does not support --format= it doesn't create
-    # ustar tarball either.
-    (tar --version) >/dev/null 2>&1 && continue
-    am__tar='tar chf - "$$tardir"'
-    am__tar_='tar chf - "$tardir"'
-    am__untar='tar xf -'
-    ;;
-  pax)
-    am__tar='pax -L -x $1 -w "$$tardir"'
-    am__tar_='pax -L -x $1 -w "$tardir"'
-    am__untar='pax -r'
-    ;;
-  cpio)
-    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
-    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
-    am__untar='cpio -i -H $1 -d'
-    ;;
-  none)
-    am__tar=false
-    am__tar_=false
-    am__untar=false
-    ;;
-  esac
-
-  # If the value was cached, stop now.  We just wanted to have am__tar
-  # and am__untar set.
-  test -n "${am_cv_prog_tar_$1}" && break
-
-  # tar/untar a dummy directory, and stop if the command works
-  rm -rf conftest.dir
-  mkdir conftest.dir
-  echo GrepMe > conftest.dir/file
-  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
-  rm -rf conftest.dir
-  if test -s conftest.tar; then
-    AM_RUN_LOG([$am__untar <conftest.tar])
-    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
-  fi
-done
-rm -rf conftest.dir
-
-AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
-AC_MSG_RESULT([$am_cv_prog_tar_$1])])
-AC_SUBST([am__tar])
-AC_SUBST([am__untar])
-]) # _AM_PROG_TAR
-
 m4_include([../config/largefile.m4])
 m4_include([../config/lead-dot.m4])
 m4_include([../config/plugins.m4])
-m4_include([gnulib/m4/00gnulib.m4])
-m4_include([gnulib/m4/extensions.m4])
-m4_include([gnulib/m4/gnulib-common.m4])
-m4_include([gnulib/m4/gnulib-comp.m4])
-m4_include([gnulib/m4/include_next.m4])
-m4_include([gnulib/m4/longlong.m4])
-m4_include([gnulib/m4/memchr.m4])
-m4_include([gnulib/m4/memmem.m4])
-m4_include([gnulib/m4/mmap-anon.m4])
-m4_include([gnulib/m4/multiarch.m4])
-m4_include([gnulib/m4/onceonly.m4])
-m4_include([gnulib/m4/stddef_h.m4])
-m4_include([gnulib/m4/stdint.m4])
-m4_include([gnulib/m4/string_h.m4])
-m4_include([gnulib/m4/warn-on-use.m4])
-m4_include([gnulib/m4/wchar_h.m4])
-m4_include([gnulib/m4/wchar_t.m4])
-m4_include([gnulib/m4/wint_t.m4])
 m4_include([acinclude.m4])
diff --git a/gdb/acx_configure_dir.m4 b/gdb/acx_configure_dir.m4
new file mode 100644
index 0000000..e431875
--- /dev/null
+++ b/gdb/acx_configure_dir.m4
@@ -0,0 +1,117 @@
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2012 Free Software
+# Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# ACX_CONFIGURE_DIR(SRC-DIR-NAME, BUILD-DIR-NAME)
+# ---------------------------
+#
+# Configure a subdirectory.  This is an alternative to
+# AC_CONFIG_SUBDIRS that allows pointing the source directory
+# somewhere else.  The build directory is always a subdirectory of the
+# top build directory.  This is heavilly based on Autoconf 2.64's
+# _AC_OUTPUT_SUBDIRS.
+#
+# Inputs:
+#   - SRC-DIR-NAME is the source directory, relative to $srcdir.
+#   - BUILD-DIR-NAME is `top-build -> build'
+
+AC_DEFUN([ACX_CONFIGURE_DIR],
+[
+  in_src=$1
+  in_build=$2
+
+  # Remove --cache-file, --srcdir, and --disable-option-checking arguments
+  # so they do not pile up.
+  ac_sub_configure_args=
+  ac_prev=
+  eval "set x $ac_configure_args"
+  shift
+  for ac_arg
+  do
+    if test -n "$ac_prev"; then
+      ac_prev=
+      continue
+    fi
+    case $ac_arg in
+    -cache-file | --cache-file | --cache-fil | --cache-fi \
+    | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+      ac_prev=cache_file ;;
+    -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+    | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \
+    | --c=*)
+      ;;
+    --config-cache | -C)
+      ;;
+    -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+      ac_prev=srcdir ;;
+    -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+      ;;
+    -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+      ac_prev=prefix ;;
+    -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+      ;;
+    --disable-option-checking)
+      ;;
+    *)
+      case $ac_arg in
+      *\'*) ac_arg=`AS_ECHO(["$ac_arg"]) | sed "s/'/'\\\\\\\\''/g"` ;;
+      esac
+      AS_VAR_APPEND([ac_sub_configure_args], [" '$ac_arg'"]) ;;
+    esac
+  done
+
+  # Always prepend --prefix to ensure using the same prefix
+  # in subdir configurations.
+  ac_arg="--prefix=$prefix"
+  case $ac_arg in
+  *\'*) ac_arg=`AS_ECHO(["$ac_arg"]) | sed "s/'/'\\\\\\\\''/g"` ;;
+  esac
+  ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args"
+
+  # Pass --silent
+  if test "$silent" = yes; then
+    ac_sub_configure_args="--silent $ac_sub_configure_args"
+  fi
+
+  # Always prepend --disable-option-checking to silence warnings, since
+  # different subdirs can have different --enable and --with options.
+  ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args"
+
+  ac_popdir=`pwd`
+  ac_dir=$in_build
+
+  ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)"
+  _AS_ECHO_LOG([$ac_msg])
+  _AS_ECHO([$ac_msg])
+  AS_MKDIR_P(["$ac_dir"])
+
+  case $srcdir in
+  [[\\/]]* | ?:[[\\/]]* )
+    ac_srcdir=$srcdir/$in_src ;;
+  *) # Relative name.
+    ac_srcdir=../$srcdir/$in_src ;;
+  esac
+
+  cd "$ac_dir"
+
+  ac_sub_configure=$ac_srcdir/configure
+
+  # Make the cache file name correct relative to the subdirectory.
+  case $cache_file in
+  [[\\/]]* | ?:[[\\/]]* ) ac_sub_cache_file=$cache_file ;;
+  *) # Relative name.
+    ac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
+  esac
+
+  AC_MSG_NOTICE([running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir])
+  # The eval makes quoting arguments work.
+  eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \
+       --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" ||
+    AC_MSG_ERROR([$ac_sub_configure failed for $ac_dir])
+
+  cd "$ac_popdir"
+])# ACX_CONFIGURE_DIR
diff --git a/gdb/ada-exp.c b/gdb/ada-exp.c
index cd28cee..4aad95c 100644
--- a/gdb/ada-exp.c
+++ b/gdb/ada-exp.c
@@ -213,6 +213,12 @@
 #define yytoks	ada_toks		/* With YYDEBUG defined */
 #define yyname	ada_name		/* With YYDEBUG defined */
 #define yyrule	ada_rule		/* With YYDEBUG defined */
+#define yyss	ada_yyss
+#define yysslim	ada_yysslim
+#define yyssp	ada_yyssp
+#define yystacksize ada_yystacksize
+#define yyvs	ada_yyvs
+#define yyvsp	ada_yyvsp
 
 #ifndef YYDEBUG
 #define	YYDEBUG	1		/* Default to yydebug support */
@@ -292,7 +298,7 @@ static struct type *type_system_address (void);
 #endif
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 163 "ada-exp.y"
+#line 169 "ada-exp.y"
 typedef union YYSTYPE {
     LONGEST lval;
     struct {
@@ -309,7 +315,7 @@ typedef union YYSTYPE {
     struct internalvar *ivar;
   } YYSTYPE;
 /* Line 191 of yacc.c.  */
-#line 313 "ada-exp.c"
+#line 319 "ada-exp.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -321,7 +327,7 @@ typedef union YYSTYPE {
 
 
 /* Line 214 of yacc.c.  */
-#line 325 "ada-exp.c"
+#line 331 "ada-exp.c"
 
 #if ! defined (yyoverflow) || YYERROR_VERBOSE
 
@@ -553,19 +559,19 @@ static const yysigned_char yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short yyrline[] =
 {
-       0,   228,   228,   232,   233,   235,   240,   244,   248,   254,
-     273,   273,   285,   289,   291,   299,   310,   320,   324,   327,
-     330,   334,   338,   342,   346,   349,   351,   353,   355,   359,
-     372,   376,   380,   384,   388,   392,   396,   400,   404,   408,
-     411,   415,   419,   423,   425,   430,   438,   442,   448,   459,
-     463,   467,   471,   472,   473,   474,   475,   476,   480,   482,
-     487,   489,   494,   496,   501,   503,   507,   509,   521,   523,
-     529,   532,   535,   538,   540,   542,   544,   546,   548,   550,
-     554,   556,   561,   571,   573,   579,   583,   590,   598,   602,
-     608,   610,   614,   618,   620,   622,   630,   641,   643,   648,
-     657,   658,   664,   669,   675,   684,   685,   686,   690,   695,
-     710,   709,   712,   715,   714,   720,   719,   722,   725,   724,
-     732,   734,   736
+       0,   234,   234,   238,   239,   241,   246,   250,   254,   260,
+     279,   279,   291,   295,   297,   305,   316,   326,   330,   333,
+     336,   340,   344,   348,   352,   355,   357,   359,   361,   365,
+     378,   382,   386,   390,   394,   398,   402,   406,   410,   414,
+     417,   421,   425,   429,   431,   436,   444,   448,   454,   465,
+     469,   473,   477,   478,   479,   480,   481,   482,   486,   488,
+     493,   495,   500,   502,   507,   509,   513,   515,   527,   529,
+     535,   538,   541,   544,   546,   548,   550,   552,   554,   556,
+     560,   562,   567,   577,   579,   585,   589,   596,   604,   608,
+     614,   616,   620,   624,   626,   628,   636,   647,   649,   654,
+     663,   664,   670,   675,   681,   690,   691,   692,   696,   701,
+     716,   715,   718,   721,   720,   726,   725,   728,   731,   730,
+     738,   740,   742
 };
 #endif
 
@@ -1531,27 +1537,27 @@ yyreduce:
   switch (yyn)
     {
         case 4:
-#line 234 "ada-exp.y"
+#line 240 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_COMMA); }
     break;
 
   case 5:
-#line 236 "ada-exp.y"
+#line 242 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_ASSIGN); }
     break;
 
   case 6:
-#line 241 "ada-exp.y"
+#line 247 "ada-exp.y"
     { write_exp_elt_opcode (UNOP_IND); }
     break;
 
   case 7:
-#line 245 "ada-exp.y"
+#line 251 "ada-exp.y"
     { write_exp_op_with_string (STRUCTOP_STRUCT, yyvsp[0].sval); }
     break;
 
   case 8:
-#line 249 "ada-exp.y"
+#line 255 "ada-exp.y"
     {
 			  write_exp_elt_opcode (OP_FUNCALL);
 			  write_exp_elt_longcst (yyvsp[-1].lval);
@@ -1560,7 +1566,7 @@ yyreduce:
     break;
 
   case 9:
-#line 255 "ada-exp.y"
+#line 261 "ada-exp.y"
     {
 			  if (yyvsp[-3].tval != NULL)
 			    {
@@ -1580,12 +1586,12 @@ yyreduce:
     break;
 
   case 10:
-#line 273 "ada-exp.y"
+#line 279 "ada-exp.y"
     { type_qualifier = yyvsp[-2].tval; }
     break;
 
   case 11:
-#line 275 "ada-exp.y"
+#line 281 "ada-exp.y"
     {
 			  if (yyvsp[-6].tval == NULL)
 			    error (_("Type required for qualification"));
@@ -1597,17 +1603,17 @@ yyreduce:
     break;
 
   case 12:
-#line 285 "ada-exp.y"
+#line 291 "ada-exp.y"
     { yyval.tval = type_qualifier; }
     break;
 
   case 13:
-#line 290 "ada-exp.y"
+#line 296 "ada-exp.y"
     { write_exp_elt_opcode (TERNOP_SLICE); }
     break;
 
   case 14:
-#line 292 "ada-exp.y"
+#line 298 "ada-exp.y"
     { if (yyvsp[-5].tval == NULL) 
                             write_exp_elt_opcode (TERNOP_SLICE);
 			  else
@@ -1616,12 +1622,12 @@ yyreduce:
     break;
 
   case 15:
-#line 299 "ada-exp.y"
+#line 305 "ada-exp.y"
     { }
     break;
 
   case 16:
-#line 311 "ada-exp.y"
+#line 317 "ada-exp.y"
     { if (yyvsp[0].tval != NULL)
 			    {
 			      write_exp_elt_opcode (OP_TYPE);
@@ -1632,57 +1638,57 @@ yyreduce:
     break;
 
   case 17:
-#line 321 "ada-exp.y"
+#line 327 "ada-exp.y"
     { write_dollar_variable (yyvsp[0].sval); }
     break;
 
   case 20:
-#line 331 "ada-exp.y"
+#line 337 "ada-exp.y"
     { write_exp_elt_opcode (UNOP_NEG); }
     break;
 
   case 21:
-#line 335 "ada-exp.y"
+#line 341 "ada-exp.y"
     { write_exp_elt_opcode (UNOP_PLUS); }
     break;
 
   case 22:
-#line 339 "ada-exp.y"
+#line 345 "ada-exp.y"
     { write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
     break;
 
   case 23:
-#line 343 "ada-exp.y"
+#line 349 "ada-exp.y"
     { write_exp_elt_opcode (UNOP_ABS); }
     break;
 
   case 24:
-#line 346 "ada-exp.y"
+#line 352 "ada-exp.y"
     { yyval.lval = 0; }
     break;
 
   case 25:
-#line 350 "ada-exp.y"
+#line 356 "ada-exp.y"
     { yyval.lval = 1; }
     break;
 
   case 26:
-#line 352 "ada-exp.y"
+#line 358 "ada-exp.y"
     { yyval.lval = 1; }
     break;
 
   case 27:
-#line 354 "ada-exp.y"
+#line 360 "ada-exp.y"
     { yyval.lval = yyvsp[-2].lval + 1; }
     break;
 
   case 28:
-#line 356 "ada-exp.y"
+#line 362 "ada-exp.y"
     { yyval.lval = yyvsp[-4].lval + 1; }
     break;
 
   case 29:
-#line 361 "ada-exp.y"
+#line 367 "ada-exp.y"
     { 
 			  if (yyvsp[-2].tval == NULL)
 			    error (_("Type required within braces in coercion"));
@@ -1693,72 +1699,72 @@ yyreduce:
     break;
 
   case 30:
-#line 373 "ada-exp.y"
+#line 379 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_EXP); }
     break;
 
   case 31:
-#line 377 "ada-exp.y"
+#line 383 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_MUL); }
     break;
 
   case 32:
-#line 381 "ada-exp.y"
+#line 387 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_DIV); }
     break;
 
   case 33:
-#line 385 "ada-exp.y"
+#line 391 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_REM); }
     break;
 
   case 34:
-#line 389 "ada-exp.y"
+#line 395 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_MOD); }
     break;
 
   case 35:
-#line 393 "ada-exp.y"
+#line 399 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_REPEAT); }
     break;
 
   case 36:
-#line 397 "ada-exp.y"
+#line 403 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_ADD); }
     break;
 
   case 37:
-#line 401 "ada-exp.y"
+#line 407 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_CONCAT); }
     break;
 
   case 38:
-#line 405 "ada-exp.y"
+#line 411 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_SUB); }
     break;
 
   case 40:
-#line 412 "ada-exp.y"
+#line 418 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_EQUAL); }
     break;
 
   case 41:
-#line 416 "ada-exp.y"
+#line 422 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_NOTEQUAL); }
     break;
 
   case 42:
-#line 420 "ada-exp.y"
+#line 426 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_LEQ); }
     break;
 
   case 43:
-#line 424 "ada-exp.y"
+#line 430 "ada-exp.y"
     { write_exp_elt_opcode (TERNOP_IN_RANGE); }
     break;
 
   case 44:
-#line 426 "ada-exp.y"
+#line 432 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_IN_BOUNDS);
 			  write_exp_elt_longcst ((LONGEST) yyvsp[0].lval);
 			  write_exp_elt_opcode (BINOP_IN_BOUNDS);
@@ -1766,7 +1772,7 @@ yyreduce:
     break;
 
   case 45:
-#line 431 "ada-exp.y"
+#line 437 "ada-exp.y"
     { 
 			  if (yyvsp[0].tval == NULL)
 			    error (_("Right operand of 'in' must be type"));
@@ -1777,14 +1783,14 @@ yyreduce:
     break;
 
   case 46:
-#line 439 "ada-exp.y"
+#line 445 "ada-exp.y"
     { write_exp_elt_opcode (TERNOP_IN_RANGE);
 		          write_exp_elt_opcode (UNOP_LOGICAL_NOT);
 			}
     break;
 
   case 47:
-#line 443 "ada-exp.y"
+#line 449 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_IN_BOUNDS);
 			  write_exp_elt_longcst ((LONGEST) yyvsp[0].lval);
 			  write_exp_elt_opcode (BINOP_IN_BOUNDS);
@@ -1793,7 +1799,7 @@ yyreduce:
     break;
 
   case 48:
-#line 449 "ada-exp.y"
+#line 455 "ada-exp.y"
     { 
 			  if (yyvsp[0].tval == NULL)
 			    error (_("Right operand of 'in' must be type"));
@@ -1805,77 +1811,77 @@ yyreduce:
     break;
 
   case 49:
-#line 460 "ada-exp.y"
+#line 466 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_GEQ); }
     break;
 
   case 50:
-#line 464 "ada-exp.y"
+#line 470 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_LESS); }
     break;
 
   case 51:
-#line 468 "ada-exp.y"
+#line 474 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_GTR); }
     break;
 
   case 58:
-#line 481 "ada-exp.y"
+#line 487 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_BITWISE_AND); }
     break;
 
   case 59:
-#line 483 "ada-exp.y"
+#line 489 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_BITWISE_AND); }
     break;
 
   case 60:
-#line 488 "ada-exp.y"
+#line 494 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_LOGICAL_AND); }
     break;
 
   case 61:
-#line 490 "ada-exp.y"
+#line 496 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_LOGICAL_AND); }
     break;
 
   case 62:
-#line 495 "ada-exp.y"
+#line 501 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_BITWISE_IOR); }
     break;
 
   case 63:
-#line 497 "ada-exp.y"
+#line 503 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_BITWISE_IOR); }
     break;
 
   case 64:
-#line 502 "ada-exp.y"
+#line 508 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_LOGICAL_OR); }
     break;
 
   case 65:
-#line 504 "ada-exp.y"
+#line 510 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_LOGICAL_OR); }
     break;
 
   case 66:
-#line 508 "ada-exp.y"
+#line 514 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_BITWISE_XOR); }
     break;
 
   case 67:
-#line 510 "ada-exp.y"
+#line 516 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_BITWISE_XOR); }
     break;
 
   case 68:
-#line 522 "ada-exp.y"
+#line 528 "ada-exp.y"
     { write_exp_elt_opcode (UNOP_ADDR); }
     break;
 
   case 69:
-#line 524 "ada-exp.y"
+#line 530 "ada-exp.y"
     { write_exp_elt_opcode (UNOP_ADDR);
 			  write_exp_elt_opcode (UNOP_CAST);
 			  write_exp_elt_type (type_system_address ());
@@ -1884,70 +1890,70 @@ yyreduce:
     break;
 
   case 70:
-#line 530 "ada-exp.y"
+#line 536 "ada-exp.y"
     { write_int (yyvsp[0].lval, type_int ());
 			  write_exp_elt_opcode (OP_ATR_FIRST); }
     break;
 
   case 71:
-#line 533 "ada-exp.y"
+#line 539 "ada-exp.y"
     { write_int (yyvsp[0].lval, type_int ());
 			  write_exp_elt_opcode (OP_ATR_LAST); }
     break;
 
   case 72:
-#line 536 "ada-exp.y"
+#line 542 "ada-exp.y"
     { write_int (yyvsp[0].lval, type_int ());
 			  write_exp_elt_opcode (OP_ATR_LENGTH); }
     break;
 
   case 73:
-#line 539 "ada-exp.y"
+#line 545 "ada-exp.y"
     { write_exp_elt_opcode (OP_ATR_SIZE); }
     break;
 
   case 74:
-#line 541 "ada-exp.y"
+#line 547 "ada-exp.y"
     { write_exp_elt_opcode (OP_ATR_TAG); }
     break;
 
   case 75:
-#line 543 "ada-exp.y"
+#line 549 "ada-exp.y"
     { write_exp_elt_opcode (OP_ATR_MIN); }
     break;
 
   case 76:
-#line 545 "ada-exp.y"
+#line 551 "ada-exp.y"
     { write_exp_elt_opcode (OP_ATR_MAX); }
     break;
 
   case 77:
-#line 547 "ada-exp.y"
+#line 553 "ada-exp.y"
     { write_exp_elt_opcode (OP_ATR_POS); }
     break;
 
   case 78:
-#line 549 "ada-exp.y"
+#line 555 "ada-exp.y"
     { write_exp_elt_opcode (OP_ATR_VAL); }
     break;
 
   case 79:
-#line 551 "ada-exp.y"
+#line 557 "ada-exp.y"
     { write_exp_elt_opcode (OP_ATR_MODULUS); }
     break;
 
   case 80:
-#line 555 "ada-exp.y"
+#line 561 "ada-exp.y"
     { yyval.lval = 1; }
     break;
 
   case 81:
-#line 557 "ada-exp.y"
+#line 563 "ada-exp.y"
     { yyval.lval = yyvsp[-1].typed_val.val; }
     break;
 
   case 82:
-#line 562 "ada-exp.y"
+#line 568 "ada-exp.y"
     { 
 			  if (yyvsp[0].tval == NULL)
 			    error (_("Prefix must be type"));
@@ -1957,19 +1963,19 @@ yyreduce:
     break;
 
   case 84:
-#line 573 "ada-exp.y"
+#line 579 "ada-exp.y"
     { write_exp_elt_opcode (OP_TYPE);
 			  write_exp_elt_type (parse_type->builtin_void);
 			  write_exp_elt_opcode (OP_TYPE); }
     break;
 
   case 85:
-#line 580 "ada-exp.y"
+#line 586 "ada-exp.y"
     { write_int ((LONGEST) yyvsp[0].typed_val.val, yyvsp[0].typed_val.type); }
     break;
 
   case 86:
-#line 584 "ada-exp.y"
+#line 590 "ada-exp.y"
     { write_int (convert_char_literal (type_qualifier, yyvsp[0].typed_val.val),
 			       (type_qualifier == NULL) 
 			       ? yyvsp[0].typed_val.type : type_qualifier);
@@ -1977,7 +1983,7 @@ yyreduce:
     break;
 
   case 87:
-#line 591 "ada-exp.y"
+#line 597 "ada-exp.y"
     { write_exp_elt_opcode (OP_DOUBLE);
 			  write_exp_elt_type (yyvsp[0].typed_val_float.type);
 			  write_exp_elt_dblcst (yyvsp[0].typed_val_float.dval);
@@ -1986,44 +1992,44 @@ yyreduce:
     break;
 
   case 88:
-#line 599 "ada-exp.y"
+#line 605 "ada-exp.y"
     { write_int (0, type_int ()); }
     break;
 
   case 89:
-#line 603 "ada-exp.y"
+#line 609 "ada-exp.y"
     { 
 			  write_exp_op_with_string (OP_STRING, yyvsp[0].sval);
 			}
     break;
 
   case 90:
-#line 609 "ada-exp.y"
+#line 615 "ada-exp.y"
     { write_int (1, type_boolean ()); }
     break;
 
   case 91:
-#line 611 "ada-exp.y"
+#line 617 "ada-exp.y"
     { write_int (0, type_boolean ()); }
     break;
 
   case 92:
-#line 615 "ada-exp.y"
+#line 621 "ada-exp.y"
     { error (_("NEW not implemented.")); }
     break;
 
   case 93:
-#line 619 "ada-exp.y"
+#line 625 "ada-exp.y"
     { yyval.tval = write_var_or_type (NULL, yyvsp[0].sval); }
     break;
 
   case 94:
-#line 621 "ada-exp.y"
+#line 627 "ada-exp.y"
     { yyval.tval = write_var_or_type (yyvsp[-1].bval, yyvsp[0].sval); }
     break;
 
   case 95:
-#line 623 "ada-exp.y"
+#line 629 "ada-exp.y"
     { 
 			  yyval.tval = write_var_or_type (NULL, yyvsp[-1].sval);
 			  if (yyval.tval == NULL)
@@ -2034,7 +2040,7 @@ yyreduce:
     break;
 
   case 96:
-#line 631 "ada-exp.y"
+#line 637 "ada-exp.y"
     { 
 			  yyval.tval = write_var_or_type (yyvsp[-2].bval, yyvsp[-1].sval);
 			  if (yyval.tval == NULL)
@@ -2045,17 +2051,17 @@ yyreduce:
     break;
 
   case 97:
-#line 642 "ada-exp.y"
+#line 648 "ada-exp.y"
     { yyval.bval = block_lookup (NULL, yyvsp[-1].sval.ptr); }
     break;
 
   case 98:
-#line 644 "ada-exp.y"
+#line 650 "ada-exp.y"
     { yyval.bval = block_lookup (yyvsp[-2].bval, yyvsp[-1].sval.ptr); }
     break;
 
   case 99:
-#line 649 "ada-exp.y"
+#line 655 "ada-exp.y"
     {
 			  write_exp_elt_opcode (OP_AGGREGATE);
 			  write_exp_elt_longcst (yyvsp[-1].lval);
@@ -2064,12 +2070,12 @@ yyreduce:
     break;
 
   case 100:
-#line 657 "ada-exp.y"
+#line 663 "ada-exp.y"
     { yyval.lval = yyvsp[0].lval; }
     break;
 
   case 101:
-#line 659 "ada-exp.y"
+#line 665 "ada-exp.y"
     { write_exp_elt_opcode (OP_POSITIONAL);
 			  write_exp_elt_longcst (yyvsp[-1].lval);
 			  write_exp_elt_opcode (OP_POSITIONAL);
@@ -2078,12 +2084,12 @@ yyreduce:
     break;
 
   case 102:
-#line 665 "ada-exp.y"
+#line 671 "ada-exp.y"
     { yyval.lval = yyvsp[-1].lval + yyvsp[0].lval; }
     break;
 
   case 103:
-#line 670 "ada-exp.y"
+#line 676 "ada-exp.y"
     { write_exp_elt_opcode (OP_POSITIONAL);
 			  write_exp_elt_longcst (0);
 			  write_exp_elt_opcode (OP_POSITIONAL);
@@ -2092,7 +2098,7 @@ yyreduce:
     break;
 
   case 104:
-#line 676 "ada-exp.y"
+#line 682 "ada-exp.y"
     { write_exp_elt_opcode (OP_POSITIONAL);
 			  write_exp_elt_longcst (yyvsp[-2].lval);
 			  write_exp_elt_opcode (OP_POSITIONAL);
@@ -2101,27 +2107,27 @@ yyreduce:
     break;
 
   case 105:
-#line 684 "ada-exp.y"
+#line 690 "ada-exp.y"
     { yyval.lval = 1; }
     break;
 
   case 106:
-#line 685 "ada-exp.y"
+#line 691 "ada-exp.y"
     { yyval.lval = 1; }
     break;
 
   case 107:
-#line 687 "ada-exp.y"
+#line 693 "ada-exp.y"
     { yyval.lval = yyvsp[0].lval + 1; }
     break;
 
   case 108:
-#line 691 "ada-exp.y"
+#line 697 "ada-exp.y"
     { write_exp_elt_opcode (OP_OTHERS); }
     break;
 
   case 109:
-#line 696 "ada-exp.y"
+#line 702 "ada-exp.y"
     {
 			  write_exp_elt_opcode (OP_CHOICES);
 			  write_exp_elt_longcst (yyvsp[0].lval);
@@ -2130,69 +2136,69 @@ yyreduce:
     break;
 
   case 110:
-#line 710 "ada-exp.y"
+#line 716 "ada-exp.y"
     { write_name_assoc (yyvsp[-1].sval); }
     break;
 
   case 111:
-#line 711 "ada-exp.y"
+#line 717 "ada-exp.y"
     { yyval.lval = 1; }
     break;
 
   case 112:
-#line 713 "ada-exp.y"
+#line 719 "ada-exp.y"
     { yyval.lval = 1; }
     break;
 
   case 113:
-#line 715 "ada-exp.y"
+#line 721 "ada-exp.y"
     { write_exp_elt_opcode (OP_DISCRETE_RANGE);
 			  write_exp_op_with_string (OP_NAME, empty_stoken);
 			}
     break;
 
   case 114:
-#line 718 "ada-exp.y"
+#line 724 "ada-exp.y"
     { yyval.lval = 1; }
     break;
 
   case 115:
-#line 720 "ada-exp.y"
+#line 726 "ada-exp.y"
     { write_name_assoc (yyvsp[-1].sval); }
     break;
 
   case 116:
-#line 721 "ada-exp.y"
+#line 727 "ada-exp.y"
     { yyval.lval = yyvsp[0].lval + 1; }
     break;
 
   case 117:
-#line 723 "ada-exp.y"
+#line 729 "ada-exp.y"
     { yyval.lval = yyvsp[0].lval + 1; }
     break;
 
   case 118:
-#line 725 "ada-exp.y"
+#line 731 "ada-exp.y"
     { write_exp_elt_opcode (OP_DISCRETE_RANGE); }
     break;
 
   case 119:
-#line 726 "ada-exp.y"
+#line 732 "ada-exp.y"
     { yyval.lval = yyvsp[0].lval + 1; }
     break;
 
   case 120:
-#line 733 "ada-exp.y"
+#line 739 "ada-exp.y"
     { write_exp_elt_opcode (UNOP_IND); }
     break;
 
   case 121:
-#line 735 "ada-exp.y"
+#line 741 "ada-exp.y"
     { write_exp_elt_opcode (UNOP_ADDR); }
     break;
 
   case 122:
-#line 737 "ada-exp.y"
+#line 743 "ada-exp.y"
     { write_exp_elt_opcode (BINOP_SUBSCRIPT); }
     break;
 
@@ -2200,7 +2206,7 @@ yyreduce:
     }
 
 /* Line 1000 of yacc.c.  */
-#line 2204 "ada-exp.c"
+#line 2210 "ada-exp.c"
 

   yyvsp -= yylen;
   yyssp -= yylen;
@@ -2425,7 +2431,7 @@ yyreturn:
 }
 
 
-#line 740 "ada-exp.y"
+#line 746 "ada-exp.y"
 
 
 /* yylex defined in ada-lex.c: Reads one token, getting characters */
@@ -2556,8 +2562,7 @@ write_object_renaming (struct block *orig_left_context,
 {
   char *name;
   enum { SIMPLE_INDEX, LOWER_BOUND, UPPER_BOUND } slice_state;
-  struct symbol *sym;
-  struct block *block;
+  struct ada_symbol_info sym_info;
 
   if (max_depth <= 0)
     error (_("Could not find renamed symbol"));
@@ -2566,29 +2571,28 @@ write_object_renaming (struct block *orig_left_context,
     orig_left_context = get_selected_block (NULL);
 
   name = obsavestring (renamed_entity, renamed_entity_len, &temp_parse_space);
-  sym = ada_lookup_encoded_symbol (name, orig_left_context, VAR_DOMAIN, 
-				   &block);
-  if (sym == NULL)
+  ada_lookup_encoded_symbol (name, orig_left_context, VAR_DOMAIN, &sym_info);
+  if (sym_info.sym == NULL)
     error (_("Could not find renamed variable: %s"), ada_decode (name));
-  else if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
+  else if (SYMBOL_CLASS (sym_info.sym) == LOC_TYPEDEF)
     /* We have a renaming of an old-style renaming symbol.  Don't
        trust the block information.  */
-    block = orig_left_context;
+    sym_info.block = orig_left_context;
 
   {
     const char *inner_renamed_entity;
     int inner_renamed_entity_len;
     const char *inner_renaming_expr;
 
-    switch (ada_parse_renaming (sym, &inner_renamed_entity, 
+    switch (ada_parse_renaming (sym_info.sym, &inner_renamed_entity,
 				&inner_renamed_entity_len,
 				&inner_renaming_expr))
       {
       case ADA_NOT_RENAMING:
-	write_var_from_sym (orig_left_context, block, sym);
+	write_var_from_sym (orig_left_context, sym_info.block, sym_info.sym);
 	break;
       case ADA_OBJECT_RENAMING:
-	write_object_renaming (block,
+	write_object_renaming (sym_info.block,
 			       inner_renamed_entity, inner_renamed_entity_len,
 			       inner_renaming_expr, max_depth - 1);
 	break;
@@ -2628,7 +2632,7 @@ write_object_renaming (struct block *orig_left_context,
 	  {
 	    const char *end;
 	    char *index_name;
-	    struct symbol *index_sym;
+	    struct ada_symbol_info index_sym_info;
 
 	    end = strchr (renaming_expr, 'X');
 	    if (end == NULL)
@@ -2639,14 +2643,15 @@ write_object_renaming (struct block *orig_left_context,
 			    &temp_parse_space);
 	    renaming_expr = end;
 
-	    index_sym = ada_lookup_encoded_symbol (index_name, NULL,
-						   VAR_DOMAIN, &block);
-	    if (index_sym == NULL)
+	    ada_lookup_encoded_symbol (index_name, NULL, VAR_DOMAIN,
+				       &index_sym_info);
+	    if (index_sym_info.sym == NULL)
 	      error (_("Could not find %s"), index_name);
-	    else if (SYMBOL_CLASS (index_sym) == LOC_TYPEDEF)
+	    else if (SYMBOL_CLASS (index_sym_info.sym) == LOC_TYPEDEF)
 	      /* Index is an old-style renaming symbol.  */
-	      block = orig_left_context;
-	    write_var_from_sym (NULL, block, index_sym);
+	      index_sym_info.block = orig_left_context;
+	    write_var_from_sym (NULL, index_sym_info.block,
+				index_sym_info.sym);
 	  }
 	if (slice_state == SIMPLE_INDEX)
 	  {
@@ -2710,7 +2715,7 @@ block_lookup (struct block *context, char *raw_name)
   else
     name = ada_encode (raw_name);
 
-  nsyms = ada_lookup_symbol_list (name, context, VAR_DOMAIN, &syms);
+  nsyms = ada_lookup_symbol_list (name, context, VAR_DOMAIN, &syms, 1);
   if (context == NULL
       && (nsyms == 0 || SYMBOL_CLASS (syms[0].sym) != LOC_BLOCK))
     symtab = lookup_symtab (name);
@@ -2967,7 +2972,7 @@ write_var_or_type (struct block *block, struct stoken name0)
 
 	  encoded_name[tail_index] = '\0';
 	  nsyms = ada_lookup_symbol_list (encoded_name, block,
-					  VAR_DOMAIN, &syms);
+					  VAR_DOMAIN, &syms, 1);
 	  encoded_name[tail_index] = terminator;
 
 	  /* A single symbol may rename a package or object. */
@@ -2977,8 +2982,7 @@ write_var_or_type (struct block *block, struct stoken name0)
 	  if (nsyms == 1)
 	    {
 	      struct symbol *ren_sym =
-		ada_find_renaming_symbol (SYMBOL_LINKAGE_NAME (syms[0].sym), 
-					  syms[0].block);
+		ada_find_renaming_symbol (syms[0].sym, syms[0].block);
 
 	      if (ren_sym != NULL)
 		syms[0].sym = ren_sym;
@@ -3116,7 +3120,7 @@ write_name_assoc (struct stoken name)
     {
       struct ada_symbol_info *syms;
       int nsyms = ada_lookup_symbol_list (name.ptr, expression_context_block,
-					  VAR_DOMAIN, &syms);
+					  VAR_DOMAIN, &syms, 1);
       if (nsyms != 1 || SYMBOL_CLASS (syms[0].sym) == LOC_TYPEDEF)
 	write_exp_op_with_string (OP_NAME, name);
       else
@@ -3148,7 +3152,7 @@ convert_char_literal (struct type *type, LONGEST val)
   for (f = 0; f < TYPE_NFIELDS (type); f += 1)
     {
       if (strcmp (name, TYPE_FIELD_NAME (type, f)) == 0)
-	return TYPE_FIELD_BITPOS (type, f);
+	return TYPE_FIELD_ENUMVAL (type, f);
     }
   return val;
 }
diff --git a/gdb/ada-exp.y b/gdb/ada-exp.y
index d8c21a4..1a80b0b 100644
--- a/gdb/ada-exp.y
+++ b/gdb/ada-exp.y
@@ -94,6 +94,12 @@
 #define yytoks	ada_toks		/* With YYDEBUG defined */
 #define yyname	ada_name		/* With YYDEBUG defined */
 #define yyrule	ada_rule		/* With YYDEBUG defined */
+#define yyss	ada_yyss
+#define yysslim	ada_yysslim
+#define yyssp	ada_yyssp
+#define yystacksize ada_yystacksize
+#define yyvs	ada_yyvs
+#define yyvsp	ada_yyvsp
 
 #ifndef YYDEBUG
 #define	YYDEBUG	1		/* Default to yydebug support */
@@ -867,8 +873,7 @@ write_object_renaming (struct block *orig_left_context,
 {
   char *name;
   enum { SIMPLE_INDEX, LOWER_BOUND, UPPER_BOUND } slice_state;
-  struct symbol *sym;
-  struct block *block;
+  struct ada_symbol_info sym_info;
 
   if (max_depth <= 0)
     error (_("Could not find renamed symbol"));
@@ -877,29 +882,28 @@ write_object_renaming (struct block *orig_left_context,
     orig_left_context = get_selected_block (NULL);
 
   name = obsavestring (renamed_entity, renamed_entity_len, &temp_parse_space);
-  sym = ada_lookup_encoded_symbol (name, orig_left_context, VAR_DOMAIN, 
-				   &block);
-  if (sym == NULL)
+  ada_lookup_encoded_symbol (name, orig_left_context, VAR_DOMAIN, &sym_info);
+  if (sym_info.sym == NULL)
     error (_("Could not find renamed variable: %s"), ada_decode (name));
-  else if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
+  else if (SYMBOL_CLASS (sym_info.sym) == LOC_TYPEDEF)
     /* We have a renaming of an old-style renaming symbol.  Don't
        trust the block information.  */
-    block = orig_left_context;
+    sym_info.block = orig_left_context;
 
   {
     const char *inner_renamed_entity;
     int inner_renamed_entity_len;
     const char *inner_renaming_expr;
 
-    switch (ada_parse_renaming (sym, &inner_renamed_entity, 
+    switch (ada_parse_renaming (sym_info.sym, &inner_renamed_entity,
 				&inner_renamed_entity_len,
 				&inner_renaming_expr))
       {
       case ADA_NOT_RENAMING:
-	write_var_from_sym (orig_left_context, block, sym);
+	write_var_from_sym (orig_left_context, sym_info.block, sym_info.sym);
 	break;
       case ADA_OBJECT_RENAMING:
-	write_object_renaming (block,
+	write_object_renaming (sym_info.block,
 			       inner_renamed_entity, inner_renamed_entity_len,
 			       inner_renaming_expr, max_depth - 1);
 	break;
@@ -939,7 +943,7 @@ write_object_renaming (struct block *orig_left_context,
 	  {
 	    const char *end;
 	    char *index_name;
-	    struct symbol *index_sym;
+	    struct ada_symbol_info index_sym_info;
 
 	    end = strchr (renaming_expr, 'X');
 	    if (end == NULL)
@@ -950,14 +954,15 @@ write_object_renaming (struct block *orig_left_context,
 			    &temp_parse_space);
 	    renaming_expr = end;
 
-	    index_sym = ada_lookup_encoded_symbol (index_name, NULL,
-						   VAR_DOMAIN, &block);
-	    if (index_sym == NULL)
+	    ada_lookup_encoded_symbol (index_name, NULL, VAR_DOMAIN,
+				       &index_sym_info);
+	    if (index_sym_info.sym == NULL)
 	      error (_("Could not find %s"), index_name);
-	    else if (SYMBOL_CLASS (index_sym) == LOC_TYPEDEF)
+	    else if (SYMBOL_CLASS (index_sym_info.sym) == LOC_TYPEDEF)
 	      /* Index is an old-style renaming symbol.  */
-	      block = orig_left_context;
-	    write_var_from_sym (NULL, block, index_sym);
+	      index_sym_info.block = orig_left_context;
+	    write_var_from_sym (NULL, index_sym_info.block,
+				index_sym_info.sym);
 	  }
 	if (slice_state == SIMPLE_INDEX)
 	  {
@@ -1021,7 +1026,7 @@ block_lookup (struct block *context, char *raw_name)
   else
     name = ada_encode (raw_name);
 
-  nsyms = ada_lookup_symbol_list (name, context, VAR_DOMAIN, &syms);
+  nsyms = ada_lookup_symbol_list (name, context, VAR_DOMAIN, &syms, 1);
   if (context == NULL
       && (nsyms == 0 || SYMBOL_CLASS (syms[0].sym) != LOC_BLOCK))
     symtab = lookup_symtab (name);
@@ -1278,7 +1283,7 @@ write_var_or_type (struct block *block, struct stoken name0)
 
 	  encoded_name[tail_index] = '\0';
 	  nsyms = ada_lookup_symbol_list (encoded_name, block,
-					  VAR_DOMAIN, &syms);
+					  VAR_DOMAIN, &syms, 1);
 	  encoded_name[tail_index] = terminator;
 
 	  /* A single symbol may rename a package or object. */
@@ -1288,8 +1293,7 @@ write_var_or_type (struct block *block, struct stoken name0)
 	  if (nsyms == 1)
 	    {
 	      struct symbol *ren_sym =
-		ada_find_renaming_symbol (SYMBOL_LINKAGE_NAME (syms[0].sym), 
-					  syms[0].block);
+		ada_find_renaming_symbol (syms[0].sym, syms[0].block);
 
 	      if (ren_sym != NULL)
 		syms[0].sym = ren_sym;
@@ -1427,7 +1431,7 @@ write_name_assoc (struct stoken name)
     {
       struct ada_symbol_info *syms;
       int nsyms = ada_lookup_symbol_list (name.ptr, expression_context_block,
-					  VAR_DOMAIN, &syms);
+					  VAR_DOMAIN, &syms, 1);
       if (nsyms != 1 || SYMBOL_CLASS (syms[0].sym) == LOC_TYPEDEF)
 	write_exp_op_with_string (OP_NAME, name);
       else
@@ -1459,7 +1463,7 @@ convert_char_literal (struct type *type, LONGEST val)
   for (f = 0; f < TYPE_NFIELDS (type); f += 1)
     {
       if (strcmp (name, TYPE_FIELD_NAME (type, f)) == 0)
-	return TYPE_FIELD_BITPOS (type, f);
+	return TYPE_FIELD_ENUMVAL (type, f);
     }
   return val;
 }
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 2d81694..aa090af 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -57,12 +57,14 @@
 #include "observer.h"
 #include "vec.h"
 #include "stack.h"
+#include "gdb_vecs.h"
 
 #include "psymtab.h"
 #include "value.h"
 #include "mi/mi-common.h"
 #include "arch-utils.h"
 #include "exceptions.h"
+#include "cli/cli-utils.h"
 
 /* Define whether or not the C operator '/' truncates towards zero for
    differently signed operands (truncation direction is undefined in C).
@@ -221,7 +223,7 @@ static struct value *ada_search_struct_field (char *, struct value *, int,
 static struct value *ada_value_primitive_field (struct value *, int, int,
                                                 struct type *);
 
-static int find_struct_field (char *, struct type *, int,
+static int find_struct_field (const char *, struct type *, int,
                               struct type **, int *, int *, int *, int *);
 
 static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
@@ -269,6 +271,8 @@ static struct value *ada_evaluate_subexp (struct type *, struct expression *,
 
 static void ada_forward_operator_length (struct expression *, int, int *,
 					 int *);
+
+static struct type *ada_find_any_type (const char *name);
 

 
 
@@ -686,7 +690,7 @@ ada_discrete_type_high_bound (struct type *type)
     case TYPE_CODE_RANGE:
       return TYPE_HIGH_BOUND (type);
     case TYPE_CODE_ENUM:
-      return TYPE_FIELD_BITPOS (type, TYPE_NFIELDS (type) - 1);
+      return TYPE_FIELD_ENUMVAL (type, TYPE_NFIELDS (type) - 1);
     case TYPE_CODE_BOOL:
       return 1;
     case TYPE_CODE_CHAR:
@@ -697,7 +701,7 @@ ada_discrete_type_high_bound (struct type *type)
     }
 }
 
-/* The largest value in the domain of TYPE, a discrete type, as an integer.  */
+/* The smallest value in the domain of TYPE, a discrete type, as an integer.  */
 LONGEST
 ada_discrete_type_low_bound (struct type *type)
 {
@@ -706,7 +710,7 @@ ada_discrete_type_low_bound (struct type *type)
     case TYPE_CODE_RANGE:
       return TYPE_LOW_BOUND (type);
     case TYPE_CODE_ENUM:
-      return TYPE_FIELD_BITPOS (type, 0);
+      return TYPE_FIELD_ENUMVAL (type, 0);
     case TYPE_CODE_BOOL:
       return 0;
     case TYPE_CODE_CHAR:
@@ -731,6 +735,46 @@ get_base_type (struct type *type)
     }
   return type;
 }
+
+/* Return a decoded version of the given VALUE.  This means returning
+   a value whose type is obtained by applying all the GNAT-specific
+   encondings, making the resulting type a static but standard description
+   of the initial type.  */
+
+struct value *
+ada_get_decoded_value (struct value *value)
+{
+  struct type *type = ada_check_typedef (value_type (value));
+
+  if (ada_is_array_descriptor_type (type)
+      || (ada_is_constrained_packed_array_type (type)
+          && TYPE_CODE (type) != TYPE_CODE_PTR))
+    {
+      if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)  /* array access type.  */
+        value = ada_coerce_to_simple_array_ptr (value);
+      else
+        value = ada_coerce_to_simple_array (value);
+    }
+  else
+    value = ada_to_fixed_value (value);
+
+  return value;
+}
+
+/* Same as ada_get_decoded_value, but with the given TYPE.
+   Because there is no associated actual value for this type,
+   the resulting type might be a best-effort approximation in
+   the case of dynamic types.  */
+
+struct type *
+ada_get_decoded_type (struct type *type)
+{
+  type = to_static_fixed_type (type);
+  if (ada_is_constrained_packed_array_type (type))
+    type = ada_coerce_to_simple_array_type (type);
+  return type;
+}
+
 

 
                                 /* Language Selection */
@@ -1368,7 +1412,7 @@ ada_fixup_array_indexes_type (struct type *index_desc_type)
   /* Fixup each field of INDEX_DESC_TYPE.  */
   for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
    {
-     char *name = TYPE_FIELD_NAME (index_desc_type, i);
+     const char *name = TYPE_FIELD_NAME (index_desc_type, i);
      struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
 
      if (raw_type)
@@ -1960,8 +2004,8 @@ ada_is_unconstrained_packed_array_type (struct type *type)
 static long
 decode_packed_array_bitsize (struct type *type)
 {
-  char *raw_name;
-  char *tail;
+  const char *raw_name;
+  const char *tail;
   long bits;
 
   /* Access to arrays implemented as fat pointers are encoded as a typedef
@@ -2004,22 +2048,30 @@ constrained_packed_array_type (struct type *type, long *elt_bits)
 {
   struct type *new_elt_type;
   struct type *new_type;
+  struct type *index_type_desc;
+  struct type *index_type;
   LONGEST low_bound, high_bound;
 
   type = ada_check_typedef (type);
   if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
     return type;
 
+  index_type_desc = ada_find_parallel_type (type, "___XA");
+  if (index_type_desc)
+    index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0),
+				      NULL);
+  else
+    index_type = TYPE_INDEX_TYPE (type);
+
   new_type = alloc_type_copy (type);
   new_elt_type =
     constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
 				   elt_bits);
-  create_array_type (new_type, new_elt_type, TYPE_INDEX_TYPE (type));
+  create_array_type (new_type, new_elt_type, index_type);
   TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
   TYPE_NAME (new_type) = ada_type_name (type);
 
-  if (get_discrete_bounds (TYPE_INDEX_TYPE (type),
-                           &low_bound, &high_bound) < 0)
+  if (get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
     low_bound = high_bound = 0;
   if (high_bound < low_bound)
     *elt_bits = TYPE_LENGTH (new_type) = 0;
@@ -2040,9 +2092,9 @@ constrained_packed_array_type (struct type *type, long *elt_bits)
 static struct type *
 decode_constrained_packed_array_type (struct type *type)
 {
-  char *raw_name = ada_type_name (ada_check_typedef (type));
+  const char *raw_name = ada_type_name (ada_check_typedef (type));
   char *name;
-  char *tail;
+  const char *tail;
   struct type *shadow_type;
   long bits;
 
@@ -2245,10 +2297,9 @@ ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
     }
   else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
     {
-      v = value_at (type,
-                    value_address (obj) + offset);
+      v = value_at (type, value_address (obj));
       bytes = (unsigned char *) alloca (len);
-      read_memory (value_address (v), bytes, len);
+      read_memory (value_address (v) + offset, bytes, len);
     }
   else
     {
@@ -2258,18 +2309,22 @@ ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
 
   if (obj != NULL)
     {
-      CORE_ADDR new_addr;
+      long new_offset = offset;
 
       set_value_component_location (v, obj);
-      new_addr = value_address (obj) + offset;
       set_value_bitpos (v, bit_offset + value_bitpos (obj));
       set_value_bitsize (v, bit_size);
       if (value_bitpos (v) >= HOST_CHAR_BIT)
         {
-	  ++new_addr;
+	  ++new_offset;
           set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
         }
-      set_value_address (v, new_addr);
+      set_value_offset (v, new_offset);
+
+      /* Also set the parent value.  This is needed when trying to
+	 assign a new value (in inferior memory).  */
+      set_value_parent (v, obj);
+      value_incref (obj);
     }
   else
     set_value_bitsize (v, bit_size);
@@ -2479,8 +2534,7 @@ ada_value_assign (struct value *toval, struct value *fromval)
       else
         move_bits (buffer, value_bitpos (toval),
 		   value_contents (fromval), 0, bits, 0);
-      write_memory (to_addr, buffer, len);
-      observer_notify_memory_changed (to_addr, len, buffer);
+      write_memory_with_notification (to_addr, buffer, len);
 
       val = value_copy (toval);
       memcpy (value_contents_raw (val), value_contents (fromval),
@@ -3055,7 +3109,7 @@ resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
             ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
                                     (exp->elts[pc + 2].symbol),
                                     exp->elts[pc + 1].block, VAR_DOMAIN,
-                                    &candidates);
+                                    &candidates, 1);
 
           if (n_candidates > 1)
             {
@@ -3147,7 +3201,7 @@ resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
               ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
                                       (exp->elts[pc + 5].symbol),
                                       exp->elts[pc + 4].block, VAR_DOMAIN,
-                                      &candidates);
+                                      &candidates, 1);
             if (n_candidates == 1)
               i = 0;
             else
@@ -3199,7 +3253,7 @@ resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
           n_candidates =
             ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
                                     (struct block *) NULL, VAR_DOMAIN,
-                                    &candidates);
+                                    &candidates, 1);
           i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
                                     ada_decoded_op_name (op), NULL);
           if (i < 0)
@@ -3405,7 +3459,7 @@ ada_resolve_function (struct ada_symbol_info syms[],
    such symbols by their trailing number (__N  or $N).  */
 
 static int
-encoded_ordered_before (char *N0, char *N1)
+encoded_ordered_before (const char *N0, const char *N1)
 {
   if (N1 == NULL)
     return 0;
@@ -3611,8 +3665,7 @@ get_selections (int *choices, int n_choices, int max_results,
       char *args2;
       int choice, j;
 
-      while (isspace (*args))
-        args += 1;
+      args = skip_spaces (args);
       if (*args == '\0' && n_chosen == 0)
         error_no_arg (_("one or more choice numbers"));
       else if (*args == '\0')
@@ -3990,8 +4043,30 @@ parse_old_style_renaming (struct type *type,
   if (len != NULL)
     *len = suffix - info;
   return kind;
-}  
+}
+
+/* Compute the value of the given RENAMING_SYM, which is expected to
+   be a symbol encoding a renaming expression.  BLOCK is the block
+   used to evaluate the renaming.  */
+
+static struct value *
+ada_read_renaming_var_value (struct symbol *renaming_sym,
+			     struct block *block)
+{
+  char *sym_name;
+  struct expression *expr;
+  struct value *value;
+  struct cleanup *old_chain = NULL;
 
+  sym_name = xstrdup (SYMBOL_LINKAGE_NAME (renaming_sym));
+  old_chain = make_cleanup (xfree, sym_name);
+  expr = parse_exp_1 (&sym_name, 0, block, 0);
+  make_cleanup (free_current_contents, &expr);
+  value = evaluate_expression (expr);
+
+  do_cleanups (old_chain);
+  return value;
+}
 

 
                                 /* Evaluation: Function Calls */
@@ -4063,7 +4138,7 @@ ada_convert_actual (struct value *actual, struct type *formal_type0)
         }
       else
 	return actual;
-      return value_cast_pointers (formal_type, result);
+      return value_cast_pointers (formal_type, result, 0);
     }
   else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
     return ada_value_ind (actual);
@@ -4161,6 +4236,18 @@ cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
 

                                 /* Symbol Lookup */
 
+/* Return nonzero if wild matching should be used when searching for
+   all symbols matching LOOKUP_NAME.
+
+   LOOKUP_NAME is expected to be a symbol name after transformation
+   for Ada lookups (see ada_name_for_lookup).  */
+
+static int
+should_use_wild_match (const char *lookup_name)
+{
+  return (strstr (lookup_name, "__") == NULL);
+}
+
 /* Return the result of a standard (literal, C-like) lookup of NAME in
    given DOMAIN, visible from lexical block BLOCK.  */
 
@@ -4168,7 +4255,8 @@ static struct symbol *
 standard_lookup (const char *name, const struct block *block,
                  domain_enum domain)
 {
-  struct symbol *sym;
+  /* Initialize it just to avoid a GCC false warning.  */
+  struct symbol *sym = NULL;
 
   if (lookup_cached_symbol (name, domain, &sym, NULL))
     return sym;
@@ -4235,8 +4323,8 @@ lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
       {
         struct type *type0 = SYMBOL_TYPE (sym0);
         struct type *type1 = SYMBOL_TYPE (sym1);
-        char *name0 = SYMBOL_LINKAGE_NAME (sym0);
-        char *name1 = SYMBOL_LINKAGE_NAME (sym1);
+        const char *name0 = SYMBOL_LINKAGE_NAME (sym0);
+        const char *name1 = SYMBOL_LINKAGE_NAME (sym1);
         int len0 = strlen (name0);
 
         return
@@ -4317,8 +4405,8 @@ defns_collected (struct obstack *obstackp, int finish)
 }
 
 /* Return a minimal symbol matching NAME according to Ada decoding
-   rules.  Returns NULL if there is no such minimal symbol.  Names 
-   prefixed with "standard__" are handled specially: "standard__" is 
+   rules.  Returns NULL if there is no such minimal symbol.  Names
+   prefixed with "standard__" are handled specially: "standard__" is
    first stripped off, and only static and global symbols are searched.  */
 
 struct minimal_symbol *
@@ -4326,19 +4414,21 @@ ada_lookup_simple_minsym (const char *name)
 {
   struct objfile *objfile;
   struct minimal_symbol *msymbol;
-  int wild_match;
+  const int wild_match_p = should_use_wild_match (name);
 
+  /* Special case: If the user specifies a symbol name inside package
+     Standard, do a non-wild matching of the symbol name without
+     the "standard__" prefix.  This was primarily introduced in order
+     to allow the user to specifically access the standard exceptions
+     using, for instance, Standard.Constraint_Error when Constraint_Error
+     is ambiguous (due to the user defining its own Constraint_Error
+     entity inside its program).  */
   if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
-    {
-      name += sizeof ("standard__") - 1;
-      wild_match = 0;
-    }
-  else
-    wild_match = (strstr (name, "__") == NULL);
+    name += sizeof ("standard__") - 1;
 
   ALL_MSYMBOLS (objfile, msymbol)
   {
-    if (match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match)
+    if (match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match_p)
         && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
       return msymbol;
   }
@@ -4349,13 +4439,13 @@ ada_lookup_simple_minsym (const char *name)
 /* For all subprograms that statically enclose the subprogram of the
    selected frame, add symbols matching identifier NAME in DOMAIN
    and their blocks to the list of data in OBSTACKP, as for
-   ada_add_block_symbols (q.v.).   If WILD, treat as NAME with a
-   wildcard prefix.  */
+   ada_add_block_symbols (q.v.).   If WILD_MATCH_P, treat as NAME
+   with a wildcard prefix.  */
 
 static void
 add_symbols_from_enclosing_procs (struct obstack *obstackp,
                                   const char *name, domain_enum namespace,
-                                  int wild_match)
+                                  int wild_match_p)
 {
 }
 
@@ -4365,7 +4455,7 @@ add_symbols_from_enclosing_procs (struct obstack *obstackp,
 static int
 is_nondebugging_type (struct type *type)
 {
-  char *name = ada_type_name (type);
+  const char *name = ada_type_name (type);
 
   return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
 }
@@ -4389,15 +4479,15 @@ ada_identical_enum_types_p (struct type *type1, struct type *type2)
 
   /* All enums in the type should have an identical underlying value.  */
   for (i = 0; i < TYPE_NFIELDS (type1); i++)
-    if (TYPE_FIELD_BITPOS (type1, i) != TYPE_FIELD_BITPOS (type2, i))
+    if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
       return 0;
 
   /* All enumerals should also have the same name (modulo any numerical
      suffix).  */
   for (i = 0; i < TYPE_NFIELDS (type1); i++)
     {
-      char *name_1 = TYPE_FIELD_NAME (type1, i);
-      char *name_2 = TYPE_FIELD_NAME (type2, i);
+      const char *name_1 = TYPE_FIELD_NAME (type1, i);
+      const char *name_2 = TYPE_FIELD_NAME (type2, i);
       int len_1 = strlen (name_1);
       int len_2 = strlen (name_2);
 
@@ -4632,7 +4722,7 @@ is_package_name (const char *name)
    not visible from FUNCTION_NAME.  */
 
 static int
-old_renaming_is_invisible (const struct symbol *sym, char *function_name)
+old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
 {
   char *scope;
 
@@ -4702,7 +4792,7 @@ remove_irrelevant_renamings (struct ada_symbol_info *syms,
 			     int nsyms, const struct block *current_block)
 {
   struct symbol *current_function;
-  char *current_function_name;
+  const char *current_function_name;
   int i;
   int is_new_style_renaming;
 
@@ -4792,20 +4882,23 @@ remove_irrelevant_renamings (struct ada_symbol_info *syms,
    If no match was found, then extend the search to "enclosing"
    routines (in other words, if we're inside a nested function,
    search the symbols defined inside the enclosing functions).
+   If WILD_MATCH_P is nonzero, perform the naming matching in
+   "wild" mode (see function "wild_match" for more info).
 
    Note: This function assumes that OBSTACKP has 0 (zero) element in it.  */
 
 static void
 ada_add_local_symbols (struct obstack *obstackp, const char *name,
                        struct block *block, domain_enum domain,
-                       int wild_match)
+                       int wild_match_p)
 {
   int block_depth = 0;
 
   while (block != NULL)
     {
       block_depth += 1;
-      ada_add_block_symbols (obstackp, block, name, domain, NULL, wild_match);
+      ada_add_block_symbols (obstackp, block, name, domain, NULL,
+			     wild_match_p);
 
       /* If we found a non-function match, assume that's the one.  */
       if (is_nonfunction (defns_collected (obstackp, 0),
@@ -4818,7 +4911,7 @@ ada_add_local_symbols (struct obstack *obstackp, const char *name,
   /* If no luck so far, try to find NAME as a local symbol in some lexically
      enclosing subprogram.  */
   if (num_defns_collected (obstackp) == 0 && block_depth > 2)
-    add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match);
+    add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match_p);
 }
 
 /* An object of this type is used as the user_data argument when
@@ -4922,8 +5015,8 @@ add_nonlocal_symbols (struct obstack *obstackp, const char *name,
   struct objfile *objfile;
   struct match_data data;
 
+  memset (&data, 0, sizeof data);
   data.obstackp = obstackp;
-  data.arg_sym = NULL;
 
   ALL_OBJFILES (objfile)
     {
@@ -4957,28 +5050,30 @@ add_nonlocal_symbols (struct obstack *obstackp, const char *name,
 }
 
 /* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing
-   scope and in global scopes, returning the number of matches.  Sets
-   *RESULTS to point to a vector of (SYM,BLOCK) tuples,
+   scope and in global scopes, returning the number of matches.
+   Sets *RESULTS to point to a vector of (SYM,BLOCK) tuples,
    indicating the symbols found and the blocks and symbol tables (if
-   any) in which they were found.  This vector are transient---good only to 
-   the next call of ada_lookup_symbol_list.  Any non-function/non-enumeral 
+   any) in which they were found.  This vector are transient---good only to
+   the next call of ada_lookup_symbol_list.  Any non-function/non-enumeral
    symbol match within the nest of blocks whose innermost member is BLOCK0,
    is the one match returned (no other matches in that or
-     enclosing blocks is returned).  If there are any matches in or
-   surrounding BLOCK0, then these alone are returned.  Otherwise, the
-   search extends to global and file-scope (static) symbol tables.
-   Names prefixed with "standard__" are handled specially: "standard__" 
+   enclosing blocks is returned).  If there are any matches in or
+   surrounding BLOCK0, then these alone are returned.  Otherwise, if
+   FULL_SEARCH is non-zero, then the search extends to global and
+   file-scope (static) symbol tables.
+   Names prefixed with "standard__" are handled specially: "standard__"
    is first stripped off, and only static and global symbols are searched.  */
 
 int
 ada_lookup_symbol_list (const char *name0, const struct block *block0,
-                        domain_enum namespace,
-                        struct ada_symbol_info **results)
+			domain_enum namespace,
+			struct ada_symbol_info **results,
+			int full_search)
 {
   struct symbol *sym;
   struct block *block;
   const char *name;
-  int wild_match;
+  const int wild_match_p = should_use_wild_match (name0);
   int cacheIfUnique;
   int ndefns;
 
@@ -4989,7 +5084,6 @@ ada_lookup_symbol_list (const char *name0, const struct block *block0,
 
   /* Search specified block and its superiors.  */
 
-  wild_match = (strstr (name0, "__") == NULL);
   name = name0;
   block = (struct block *) block0;      /* FIXME: No cast ought to be
                                            needed, but adding const will
@@ -5004,7 +5098,6 @@ ada_lookup_symbol_list (const char *name0, const struct block *block0,
      entity inside its program).  */
   if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
     {
-      wild_match = 0;
       block = NULL;
       name = name0 + sizeof ("standard__") - 1;
     }
@@ -5012,8 +5105,8 @@ ada_lookup_symbol_list (const char *name0, const struct block *block0,
   /* Check the non-global symbols.  If we have ANY match, then we're done.  */
 
   ada_add_local_symbols (&symbol_list_obstack, name, block, namespace,
-                         wild_match);
-  if (num_defns_collected (&symbol_list_obstack) > 0)
+                         wild_match_p);
+  if (num_defns_collected (&symbol_list_obstack) > 0 || !full_search)
     goto done;
 
   /* No non-global symbols found.  Check our cache to see if we have
@@ -5031,14 +5124,14 @@ ada_lookup_symbol_list (const char *name0, const struct block *block0,
   /* Search symbols from all global blocks.  */
  
   add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 1,
-			wild_match);
+			wild_match_p);
 
   /* Now add symbols from all per-file blocks if we've gotten no hits
      (not strictly correct, but perhaps better than an error).  */
 
   if (num_defns_collected (&symbol_list_obstack) == 0)
     add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 0,
-			  wild_match);
+			  wild_match_p);
 
 done:
   ndefns = num_defns_collected (&symbol_list_obstack);
@@ -5046,10 +5139,10 @@ done:
 
   ndefns = remove_extra_symbols (*results, ndefns);
 
-  if (ndefns == 0)
+  if (ndefns == 0 && full_search)
     cache_symbol (name0, namespace, NULL, NULL);
 
-  if (ndefns == 1 && cacheIfUnique)
+  if (ndefns == 1 && full_search && cacheIfUnique)
     cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block);
 
   ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
@@ -5087,13 +5180,13 @@ ada_name_for_lookup (const char *name)
 static void
 ada_iterate_over_symbols (const struct block *block,
 			  const char *name, domain_enum domain,
-			  int (*callback) (struct symbol *, void *),
+			  symbol_found_callback_ftype *callback,
 			  void *data)
 {
   int ndefs, i;
   struct ada_symbol_info *results;
 
-  ndefs = ada_lookup_symbol_list (name, block, domain, &results);
+  ndefs = ada_lookup_symbol_list (name, block, domain, &results, 0);
   for (i = 0; i < ndefs; ++i)
     {
       if (! (*callback) (results[i].sym, data))
@@ -5101,41 +5194,52 @@ ada_iterate_over_symbols (const struct block *block,
     }
 }
 
-struct symbol *
-ada_lookup_encoded_symbol (const char *name, const struct block *block0,
-			   domain_enum namespace, struct block **block_found)
+/* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
+   to 1, but choosing the first symbol found if there are multiple
+   choices.
+
+   The result is stored in *INFO, which must be non-NULL.
+   If no match is found, INFO->SYM is set to NULL.  */
+
+void
+ada_lookup_encoded_symbol (const char *name, const struct block *block,
+			   domain_enum namespace,
+			   struct ada_symbol_info *info)
 {
   struct ada_symbol_info *candidates;
   int n_candidates;
 
-  n_candidates = ada_lookup_symbol_list (name, block0, namespace, &candidates);
+  gdb_assert (info != NULL);
+  memset (info, 0, sizeof (struct ada_symbol_info));
 
-  if (n_candidates == 0)
-    return NULL;
+  n_candidates = ada_lookup_symbol_list (name, block, namespace, &candidates,
+					 1);
 
-  if (block_found != NULL)
-    *block_found = candidates[0].block;
+  if (n_candidates == 0)
+    return;
 
-  return fixup_symbol_section (candidates[0].sym, NULL);
-}  
+  *info = candidates[0];
+  info->sym = fixup_symbol_section (info->sym, NULL);
+}
 
 /* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
    scope and in global scopes, or NULL if none.  NAME is folded and
    encoded first.  Otherwise, the result is as for ada_lookup_symbol_list,
    choosing the first symbol if there are multiple choices.
-   *IS_A_FIELD_OF_THIS is set to 0 and *SYMTAB is set to the symbol
-   table in which the symbol was found (in both cases, these
-   assignments occur only if the pointers are non-null).  */
+   If IS_A_FIELD_OF_THIS is not NULL, it is set to zero.  */
+
 struct symbol *
 ada_lookup_symbol (const char *name, const struct block *block0,
                    domain_enum namespace, int *is_a_field_of_this)
 {
+  struct ada_symbol_info info;
+
   if (is_a_field_of_this != NULL)
     *is_a_field_of_this = 0;
 
-  return
-    ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
-			       block0, namespace, NULL);
+  ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
+			     block0, namespace, &info);
+  return info.sym;
 }
 
 static struct symbol *
@@ -5154,6 +5258,7 @@ ada_lookup_symbol_nonlocal (const char *name,
 
    [.$][0-9]+       [nested subprogram suffix, on platforms such as GNU/Linux]
    ___[0-9]+        [nested subprogram suffix, on platforms such as HP/UX]
+   TKB              [subprogram suffix for task bodies]
    _E[0-9]+[bs]$    [protected object entry suffixes]
    (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
 
@@ -5199,6 +5304,11 @@ is_name_suffix (const char *str)
         return 1;
     }
 
+  /* "TKB" suffixes are used for subprograms implementing task bodies.  */
+
+  if (strcmp (str, "TKB") == 0)
+    return 1;
+
 #if 0
   /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
      with a N at the end.  Unfortunately, the compiler uses the same
@@ -5360,7 +5470,7 @@ advance_wild_match (const char **namep, const char *name0, int target0)
 static int
 wild_match (const char *name, const char *patn)
 {
-  const char *p, *n;
+  const char *p;
   const char *name0 = name;
 
   while (1)
@@ -5405,7 +5515,7 @@ ada_add_block_symbols (struct obstack *obstackp,
                        domain_enum domain, struct objfile *objfile,
                        int wild)
 {
-  struct dict_iterator iter;
+  struct block_iterator iter;
   int name_len = strlen (name);
   /* A matching argument symbol, if any.  */
   struct symbol *arg_sym;
@@ -5417,9 +5527,8 @@ ada_add_block_symbols (struct obstack *obstackp,
   found_sym = 0;
   if (wild)
     {
-      for (sym = dict_iter_match_first (BLOCK_DICT (block), name,
-					wild_match, &iter);
-	   sym != NULL; sym = dict_iter_match_next (name, wild_match, &iter))
+      for (sym = block_iter_match_first (block, name, wild_match, &iter);
+	   sym != NULL; sym = block_iter_match_next (name, wild_match, &iter))
       {
         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
                                    SYMBOL_DOMAIN (sym), domain)
@@ -5441,9 +5550,8 @@ ada_add_block_symbols (struct obstack *obstackp,
     }
   else
     {
-     for (sym = dict_iter_match_first (BLOCK_DICT (block), name,
-				       full_match, &iter);
-	   sym != NULL; sym = dict_iter_match_next (name, full_match, &iter))
+     for (sym = block_iter_match_first (block, name, full_match, &iter);
+	  sym != NULL; sym = block_iter_match_next (name, full_match, &iter))
       {
         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
                                    SYMBOL_DOMAIN (sym), domain))
@@ -5530,14 +5638,14 @@ ada_add_block_symbols (struct obstack *obstackp,
    does not need to be deallocated, but is only good until the next call.
 
    TEXT_LEN is equal to the length of TEXT.
-   Perform a wild match if WILD_MATCH is set.
-   ENCODED should be set if TEXT represents the start of a symbol name
+   Perform a wild match if WILD_MATCH_P is set.
+   ENCODED_P should be set if TEXT represents the start of a symbol name
    in its encoded form.  */
 
 static const char *
 symbol_completion_match (const char *sym_name,
                          const char *text, int text_len,
-                         int wild_match, int encoded)
+                         int wild_match_p, int encoded_p)
 {
   const int verbatim_match = (text[0] == '<');
   int match = 0;
@@ -5554,7 +5662,7 @@ symbol_completion_match (const char *sym_name,
   if (strncmp (sym_name, text, text_len) == 0)
     match = 1;
 
-  if (match && !encoded)
+  if (match && !encoded_p)
     {
       /* One needed check before declaring a positive match is to verify
          that iff we are doing a verbatim match, the decoded version
@@ -5585,7 +5693,7 @@ symbol_completion_match (const char *sym_name,
 
   /* Second: Try wild matching...  */
 
-  if (!match && wild_match)
+  if (!match && wild_match_p)
     {
       /* Since we are doing wild matching, this means that TEXT
          may represent an unqualified symbol name.  We therefore must
@@ -5604,14 +5712,12 @@ symbol_completion_match (const char *sym_name,
   if (verbatim_match)
     sym_name = add_angle_brackets (sym_name);
 
-  if (!encoded)
+  if (!encoded_p)
     sym_name = ada_decode (sym_name);
 
   return sym_name;
 }
 
-DEF_VEC_P (char_ptr);
-
 /* A companion function to ada_make_symbol_completion_list().
    Check if SYM_NAME represents a symbol which name would be suitable
    to complete TEXT (TEXT_LEN is the length of TEXT), in which case
@@ -5622,8 +5728,8 @@ DEF_VEC_P (char_ptr);
    completion should be performed.  These two parameters are used to
    determine which part of the symbol name should be added to the
    completion vector.
-   if WILD_MATCH is set, then wild matching is performed.
-   ENCODED should be set if TEXT represents a symbol name in its
+   if WILD_MATCH_P is set, then wild matching is performed.
+   ENCODED_P should be set if TEXT represents a symbol name in its
    encoded formed (in which case the completion should also be
    encoded).  */
 
@@ -5632,10 +5738,10 @@ symbol_completion_add (VEC(char_ptr) **sv,
                        const char *sym_name,
                        const char *text, int text_len,
                        const char *orig_text, const char *word,
-                       int wild_match, int encoded)
+                       int wild_match_p, int encoded_p)
 {
   const char *match = symbol_completion_match (sym_name, text, text_len,
-                                               wild_match, encoded);
+                                               wild_match_p, encoded_p);
   char *completion;
 
   if (match == NULL)
@@ -5682,8 +5788,7 @@ struct add_partial_datum
 
 /* A callback for expand_partial_symbol_names.  */
 static int
-ada_expand_partial_symbol_name (const struct language_defn *language,
-				const char *name, void *user_data)
+ada_expand_partial_symbol_name (const char *name, void *user_data)
 {
   struct add_partial_datum *data = user_data;
   
@@ -5691,17 +5796,16 @@ ada_expand_partial_symbol_name (const struct language_defn *language,
                                   data->wild_match, data->encoded) != NULL;
 }
 
-/* Return a list of possible symbol names completing TEXT0.  The list
-   is NULL terminated.  WORD is the entire command on which completion
-   is made.  */
+/* Return a list of possible symbol names completing TEXT0.  WORD is
+   the entire command on which completion is made.  */
 
-static char **
+static VEC (char_ptr) *
 ada_make_symbol_completion_list (char *text0, char *word)
 {
   char *text;
   int text_len;
-  int wild_match;
-  int encoded;
+  int wild_match_p;
+  int encoded_p;
   VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
   struct symbol *sym;
   struct symtab *s;
@@ -5709,15 +5813,15 @@ ada_make_symbol_completion_list (char *text0, char *word)
   struct objfile *objfile;
   struct block *b, *surrounding_static_block = 0;
   int i;
-  struct dict_iterator iter;
+  struct block_iterator iter;
 
   if (text0[0] == '<')
     {
       text = xstrdup (text0);
       make_cleanup (xfree, text);
       text_len = strlen (text);
-      wild_match = 0;
-      encoded = 1;
+      wild_match_p = 0;
+      encoded_p = 1;
     }
   else
     {
@@ -5727,12 +5831,12 @@ ada_make_symbol_completion_list (char *text0, char *word)
       for (i = 0; i < text_len; i++)
         text[i] = tolower (text[i]);
 
-      encoded = (strstr (text0, "__") != NULL);
+      encoded_p = (strstr (text0, "__") != NULL);
       /* If the name contains a ".", then the user is entering a fully
          qualified entity name, and the match must not be done in wild
          mode.  Similarly, if the user wants to complete what looks like
          an encoded name, the match must not be done in wild mode.  */
-      wild_match = (strchr (text0, '.') == NULL && !encoded);
+      wild_match_p = (strchr (text0, '.') == NULL && !encoded_p);
     }
 
   /* First, look at the partial symtab symbols.  */
@@ -5744,8 +5848,8 @@ ada_make_symbol_completion_list (char *text0, char *word)
     data.text_len = text_len;
     data.text0 = text0;
     data.word = word;
-    data.wild_match = wild_match;
-    data.encoded = encoded;
+    data.wild_match = wild_match_p;
+    data.encoded = encoded_p;
     expand_partial_symbol_names (ada_expand_partial_symbol_name, &data);
   }
 
@@ -5758,7 +5862,8 @@ ada_make_symbol_completion_list (char *text0, char *word)
   {
     QUIT;
     symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (msymbol),
-                           text, text_len, text0, word, wild_match, encoded);
+			   text, text_len, text0, word, wild_match_p,
+			   encoded_p);
   }
 
   /* Search upwards from currently selected frame (so that we can
@@ -5773,7 +5878,7 @@ ada_make_symbol_completion_list (char *text0, char *word)
       {
         symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
                                text, text_len, text0, word,
-                               wild_match, encoded);
+                               wild_match_p, encoded_p);
       }
     }
 
@@ -5788,7 +5893,7 @@ ada_make_symbol_completion_list (char *text0, char *word)
     {
       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
                              text, text_len, text0, word,
-                             wild_match, encoded);
+                             wild_match_p, encoded_p);
     }
   }
 
@@ -5803,28 +5908,11 @@ ada_make_symbol_completion_list (char *text0, char *word)
     {
       symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
                              text, text_len, text0, word,
-                             wild_match, encoded);
+                             wild_match_p, encoded_p);
     }
   }
 
-  /* Append the closing NULL entry.  */
-  VEC_safe_push (char_ptr, completions, NULL);
-
-  /* Make a copy of the COMPLETIONS VEC before we free it, and then
-     return the copy.  It's unfortunate that we have to make a copy
-     of an array that we're about to destroy, but there is nothing much
-     we can do about it.  Fortunately, it's typically not a very large
-     array.  */
-  {
-    const size_t completions_size = 
-      VEC_length (char_ptr, completions) * sizeof (char *);
-    char **result = xmalloc (completions_size);
-    
-    memcpy (result, VEC_address (char_ptr, completions), completions_size);
-
-    VEC_free (char_ptr, completions);
-    return result;
-  }
+  return completions;
 }
 
                                 /* Field Access */
@@ -5835,7 +5923,7 @@ ada_make_symbol_completion_list (char *text0, char *word)
 static int
 ada_is_dispatch_table_ptr_type (struct type *type)
 {
-  char *name;
+  const char *name;
 
   if (TYPE_CODE (type) != TYPE_CODE_PTR)
     return 0;
@@ -5855,7 +5943,7 @@ ada_is_ignored_field (struct type *type, int field_num)
 {
   if (field_num < 0 || field_num > TYPE_NFIELDS (type))
     return 1;
-   
+
   /* Check the name of that field.  */
   {
     const char *name = TYPE_FIELD_NAME (type, field_num);
@@ -5866,8 +5954,13 @@ ada_is_ignored_field (struct type *type, int field_num)
     if (name == NULL)
       return 1;
 
-    /* A field named "_parent" is internally generated by GNAT for
-       tagged types, and should not be printed either.  */
+    /* Normally, fields whose name start with an underscore ("_")
+       are fields that have been internally generated by the compiler,
+       and thus should not be printed.  The "_parent" field is special,
+       however: This is a field internally generated by the compiler
+       for tagged types, and it contains the components inherited from
+       the parent type.  This field should not be printed as is, but
+       should not be ignored either.  */
     if (name[0] == '_' && strncmp (name, "_parent", 7) != 0)
       return 1;
   }
@@ -5957,105 +6050,110 @@ type_from_tag (struct value *tag)
   return NULL;
 }
 
-struct tag_args
+/* Return the "ada__tags__type_specific_data" type.  */
+
+static struct type *
+ada_get_tsd_type (struct inferior *inf)
 {
-  struct value *tag;
-  char *name;
-};
+  struct ada_inferior_data *data = get_ada_inferior_data (inf);
 
+  if (data->tsd_type == 0)
+    data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
+  return data->tsd_type;
+}
 
-static int ada_tag_name_1 (void *);
-static int ada_tag_name_2 (struct tag_args *);
+/* Return the TSD (type-specific data) associated to the given TAG.
+   TAG is assumed to be the tag of a tagged-type entity.
 
-/* Wrapper function used by ada_tag_name.  Given a struct tag_args*
-   value ARGS, sets ARGS->name to the tag name of ARGS->tag.
-   The value stored in ARGS->name is valid until the next call to 
-   ada_tag_name_1.  */
+   May return NULL if we are unable to get the TSD.  */
 
-static int
-ada_tag_name_1 (void *args0)
+static struct value *
+ada_get_tsd_from_tag (struct value *tag)
 {
-  struct tag_args *args = (struct tag_args *) args0;
-  static char name[1024];
-  char *p;
   struct value *val;
+  struct type *type;
 
-  args->name = NULL;
-  val = ada_value_struct_elt (args->tag, "tsd", 1);
-  if (val == NULL)
-    return ada_tag_name_2 (args);
-  val = ada_value_struct_elt (val, "expanded_name", 1);
-  if (val == NULL)
-    return 0;
-  read_memory_string (value_as_address (val), name, sizeof (name) - 1);
-  for (p = name; *p != '\0'; p += 1)
-    if (isalpha (*p))
-      *p = tolower (*p);
-  args->name = name;
-  return 0;
-}
+  /* First option: The TSD is simply stored as a field of our TAG.
+     Only older versions of GNAT would use this format, but we have
+     to test it first, because there are no visible markers for
+     the current approach except the absence of that field.  */
 
-/* Return the "ada__tags__type_specific_data" type.  */
+  val = ada_value_struct_elt (tag, "tsd", 1);
+  if (val)
+    return val;
 
-static struct type *
-ada_get_tsd_type (struct inferior *inf)
-{
-  struct ada_inferior_data *data = get_ada_inferior_data (inf);
+  /* Try the second representation for the dispatch table (in which
+     there is no explicit 'tsd' field in the referent of the tag pointer,
+     and instead the tsd pointer is stored just before the dispatch
+     table.  */
 
-  if (data->tsd_type == 0)
-    data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
-  return data->tsd_type;
+  type = ada_get_tsd_type (current_inferior());
+  if (type == NULL)
+    return NULL;
+  type = lookup_pointer_type (lookup_pointer_type (type));
+  val = value_cast (type, tag);
+  if (val == NULL)
+    return NULL;
+  return value_ind (value_ptradd (val, -1));
 }
 
-/* Utility function for ada_tag_name_1 that tries the second
-   representation for the dispatch table (in which there is no
-   explicit 'tsd' field in the referent of the tag pointer, and instead
-   the tsd pointer is stored just before the dispatch table.  */
-   
-static int
-ada_tag_name_2 (struct tag_args *args)
+/* Given the TSD of a tag (type-specific data), return a string
+   containing the name of the associated type.
+
+   The returned value is good until the next call.  May return NULL
+   if we are unable to determine the tag name.  */
+
+static char *
+ada_tag_name_from_tsd (struct value *tsd)
 {
-  struct type *info_type;
   static char name[1024];
   char *p;
-  struct value *val, *valp;
+  struct value *val;
 
-  args->name = NULL;
-  info_type = ada_get_tsd_type (current_inferior());
-  if (info_type == NULL)
-    return 0;
-  info_type = lookup_pointer_type (lookup_pointer_type (info_type));
-  valp = value_cast (info_type, args->tag);
-  if (valp == NULL)
-    return 0;
-  val = value_ind (value_ptradd (valp, -1));
-  if (val == NULL)
-    return 0;
-  val = ada_value_struct_elt (val, "expanded_name", 1);
+  val = ada_value_struct_elt (tsd, "expanded_name", 1);
   if (val == NULL)
-    return 0;
+    return NULL;
   read_memory_string (value_as_address (val), name, sizeof (name) - 1);
   for (p = name; *p != '\0'; p += 1)
     if (isalpha (*p))
       *p = tolower (*p);
-  args->name = name;
-  return 0;
+  return name;
 }
 
 /* The type name of the dynamic type denoted by the 'tag value TAG, as
-   a C string.  */
+   a C string.
+
+   Return NULL if the TAG is not an Ada tag, or if we were unable to
+   determine the name of that tag.  The result is good until the next
+   call.  */
 
 const char *
 ada_tag_name (struct value *tag)
 {
-  struct tag_args args;
+  volatile struct gdb_exception e;
+  char *name = NULL;
 
   if (!ada_is_tag_type (value_type (tag)))
     return NULL;
-  args.tag = tag;
-  args.name = NULL;
-  catch_errors (ada_tag_name_1, &args, NULL, RETURN_MASK_ALL);
-  return args.name;
+
+  /* It is perfectly possible that an exception be raised while trying
+     to determine the TAG's name, even under normal circumstances:
+     The associated variable may be uninitialized or corrupted, for
+     instance. We do not let any exception propagate past this point.
+     instead we return NULL.
+
+     We also do not print the error message either (which often is very
+     low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
+     the caller print a more meaningful message if necessary.  */
+  TRY_CATCH (e, RETURN_MASK_ERROR)
+    {
+      struct value *tsd = ada_get_tsd_from_tag (tag);
+
+      if (tsd != NULL)
+	name = ada_tag_name_from_tsd (tsd);
+    }
+
+  return name;
 }
 
 /* The parent type of TYPE, or NULL if none.  */
@@ -6348,7 +6446,7 @@ ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
    Returns 1 if found, 0 otherwise.  */
 
 static int
-find_struct_field (char *name, struct type *type, int offset,
+find_struct_field (const char *name, struct type *type, int offset,
                    struct type **field_type_p,
                    int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
 		   int *index_p)
@@ -6370,7 +6468,7 @@ find_struct_field (char *name, struct type *type, int offset,
     {
       int bit_pos = TYPE_FIELD_BITPOS (type, i);
       int fld_offset = offset + bit_pos / 8;
-      char *t_field_name = TYPE_FIELD_NAME (type, i);
+      const char *t_field_name = TYPE_FIELD_NAME (type, i);
 
       if (t_field_name == NULL)
         continue;
@@ -6447,7 +6545,7 @@ ada_search_struct_field (char *name, struct value *arg, int offset,
   type = ada_check_typedef (type);
   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
     {
-      char *t_field_name = TYPE_FIELD_NAME (type, i);
+      const char *t_field_name = TYPE_FIELD_NAME (type, i);
 
       if (t_field_name == NULL)
         continue;
@@ -6706,7 +6804,7 @@ ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
 
   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
     {
-      char *t_field_name = TYPE_FIELD_NAME (type, i);
+      const char *t_field_name = TYPE_FIELD_NAME (type, i);
       struct type *t;
       int disp;
 
@@ -6745,7 +6843,7 @@ ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
 	         NOT wrapped in a struct, since the compiler sometimes
 		 generates these for unchecked variant types.  Revisit
 	         if the compiler changes this practice.  */
-	      char *v_field_name = TYPE_FIELD_NAME (field_type, j);
+	      const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
               disp = 0;
 	      if (v_field_name != NULL 
 		  && field_name_match (v_field_name, name))
@@ -6883,7 +6981,7 @@ ada_which_variant_applies (struct type *var_type, struct type *outer_type,
 struct value *
 ada_value_ind (struct value *val0)
 {
-  struct value *val = unwrap_value (value_ind (val0));
+  struct value *val = value_ind (val0);
 
   return ada_to_fixed_value (val);
 }
@@ -6899,7 +6997,6 @@ ada_coerce_ref (struct value *val0)
       struct value *val = val0;
 
       val = coerce_ref (val);
-      val = unwrap_value (val);
       return ada_to_fixed_value (val);
     }
   else
@@ -6946,10 +7043,10 @@ field_alignment (struct type *type, int f)
   return atoi (name + align_offset) * TARGET_CHAR_BIT;
 }
 
-/* Find a symbol named NAME.  Ignores ambiguity.  */
+/* Find a typedef or tag symbol named NAME.  Ignores ambiguity.  */
 
-struct symbol *
-ada_find_any_symbol (const char *name)
+static struct symbol *
+ada_find_any_type_symbol (const char *name)
 {
   struct symbol *sym;
 
@@ -6965,10 +7062,10 @@ ada_find_any_symbol (const char *name)
    solely for types defined by debug info, it will not search the GDB
    primitive types.  */
 
-struct type *
+static struct type *
 ada_find_any_type (const char *name)
 {
-  struct symbol *sym = ada_find_any_symbol (name);
+  struct symbol *sym = ada_find_any_type_symbol (name);
 
   if (sym != NULL)
     return SYMBOL_TYPE (sym);
@@ -6976,23 +7073,28 @@ ada_find_any_type (const char *name)
   return NULL;
 }
 
-/* Given NAME and an associated BLOCK, search all symbols for
-   NAME suffixed with  "___XR", which is the ``renaming'' symbol
-   associated to NAME.  Return this symbol if found, return
-   NULL otherwise.  */
+/* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
+   associated with NAME_SYM's name.  NAME_SYM may itself be a renaming
+   symbol, in which case it is returned.  Otherwise, this looks for
+   symbols whose name is that of NAME_SYM suffixed with  "___XR".
+   Return symbol if found, and NULL otherwise.  */
 
 struct symbol *
-ada_find_renaming_symbol (const char *name, struct block *block)
+ada_find_renaming_symbol (struct symbol *name_sym, struct block *block)
 {
+  const char *name = SYMBOL_LINKAGE_NAME (name_sym);
   struct symbol *sym;
 
+  if (strstr (name, "___XR") != NULL)
+     return name_sym;
+
   sym = find_old_style_renaming_symbol (name, block);
 
   if (sym != NULL)
     return sym;
 
   /* Not right yet.  FIXME pnh 7/20/2007.  */
-  sym = ada_find_any_symbol (name);
+  sym = ada_find_any_type_symbol (name);
   if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
     return sym;
   else
@@ -7011,7 +7113,7 @@ find_old_style_renaming_symbol (const char *name, struct block *block)
          qualified.  This means we need to prepend the function name
          as well as adding the ``___XR'' suffix to build the name of
          the associated renaming symbol.  */
-      char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
+      const char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
       /* Function names sometimes contain suffixes used
          for instance to qualify nested subprograms.  When building
          the XR type name, we need to make sure that this suffix is
@@ -7050,7 +7152,7 @@ find_old_style_renaming_symbol (const char *name, struct block *block)
       xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
     }
 
-  return ada_find_any_symbol (rename);
+  return ada_find_any_type_symbol (rename);
 }
 
 /* Because of GNAT encoding conventions, several GDB symbols may match a
@@ -7091,7 +7193,7 @@ ada_prefer_type (struct type *type0, struct type *type1)
 /* The name of TYPE, which is either its TYPE_NAME, or, if that is
    null, its TYPE_TAG_NAME.  Null if TYPE is null.  */
 
-char *
+const char *
 ada_type_name (struct type *type)
 {
   if (type == NULL)
@@ -7118,7 +7220,7 @@ find_parallel_type_by_descriptive_type (struct type *type, const char *name)
   result = TYPE_DESCRIPTIVE_TYPE (type);
   while (result != NULL)
     {
-      char *result_name = ada_type_name (result);
+      const char *result_name = ada_type_name (result);
 
       if (result_name == NULL)
         {
@@ -7170,7 +7272,8 @@ ada_find_parallel_type_with_name (struct type *type, const char *name)
 struct type *
 ada_find_parallel_type (struct type *type, const char *suffix)
 {
-  char *name, *typename = ada_type_name (type);
+  char *name;
+  const char *typename = ada_type_name (type);
   int len;
 
   if (typename == NULL)
@@ -7322,7 +7425,7 @@ ada_template_to_fixed_record_type_1 (struct type *type,
     {
       off = align_value (off, field_alignment (type, f))
 	+ TYPE_FIELD_BITPOS (type, f);
-      TYPE_FIELD_BITPOS (rtype, f) = off;
+      SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
       TYPE_FIELD_BITSIZE (rtype, f) = 0;
 
       if (ada_is_variant_part (type, f))
@@ -7806,6 +7909,11 @@ to_fixed_array_type (struct type *type0, struct value *dval,
         error (_("array type with dynamic size is larger than varsize-limit"));
     }
 
+  /* We want to preserve the type name.  This can be useful when
+     trying to get the type name of a value that has already been
+     printed (for instance, if the user did "print VAR; whatis $".  */
+  TYPE_NAME (result) = TYPE_NAME (type0);
+
   if (constrained_packed_array_p)
     {
       /* So far, the resulting type has been created as if the original
@@ -7876,7 +7984,7 @@ ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
            If there is, then it provides the actual size of our type.  */
         else if (ada_type_name (fixed_record_type) != NULL)
           {
-            char *name = ada_type_name (fixed_record_type);
+            const char *name = ada_type_name (fixed_record_type);
             char *xvz_name = alloca (strlen (name) + 7 /* "___XVZ\0" */);
             int xvz_found = 0;
             LONGEST size;
@@ -8071,7 +8179,7 @@ ada_check_typedef (struct type *type)
     return type;
   else
     {
-      char *name = TYPE_TAG_NAME (type);
+      const char *name = TYPE_TAG_NAME (type);
       struct type *type1 = ada_find_any_type (name);
 
       if (type1 == NULL)
@@ -8113,9 +8221,11 @@ ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
 struct value *
 ada_to_fixed_value (struct value *val)
 {
-  return ada_to_fixed_value_create (value_type (val),
-                                    value_address (val),
-                                    val);
+  val = unwrap_value (val);
+  val = ada_to_fixed_value_create (value_type (val),
+				      value_address (val),
+				      val);
+  return val;
 }
 

 
@@ -8168,7 +8278,7 @@ pos_atr (struct value *arg)
 
       for (i = 0; i < TYPE_NFIELDS (type); i += 1)
         {
-          if (v == TYPE_FIELD_BITPOS (type, i))
+          if (v == TYPE_FIELD_ENUMVAL (type, i))
             return i;
         }
       error (_("enumeration value is invalid: can't find 'POS"));
@@ -8199,7 +8309,7 @@ value_val_atr (struct type *type, struct value *arg)
 
       if (pos < 0 || pos >= TYPE_NFIELDS (type))
         error (_("argument to 'VAL out of range"));
-      return value_from_longest (type, TYPE_FIELD_BITPOS (type, pos));
+      return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
     }
   else
     return value_from_longest (type, value_as_long (arg));
@@ -8677,7 +8787,7 @@ assign_component (struct value *container, struct value *lhs, LONGEST index,
   else
     {
       elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
-      elt = ada_to_fixed_value (unwrap_value (elt));
+      elt = ada_to_fixed_value (elt);
     }
 
   if (exp->elts[*pos].opcode == OP_AGGREGATE)
@@ -8851,7 +8961,7 @@ aggregate_assign_from_choices (struct value *container,
       else
 	{
 	  int ind;
-	  char *name;
+	  const char *name;
 
 	  switch (op)
 	    {
@@ -9514,7 +9624,6 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
       else
         {
           arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
-          arg1 = unwrap_value (arg1);
           return ada_to_fixed_value (arg1);
         }
 
@@ -9588,8 +9697,25 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
         {
         case TYPE_CODE_FUNC:
           if (noside == EVAL_AVOID_SIDE_EFFECTS)
-            return allocate_value (TYPE_TARGET_TYPE (type));
+	    {
+	      struct type *rtype = TYPE_TARGET_TYPE (type);
+
+	      if (TYPE_GNU_IFUNC (type))
+		return allocate_value (TYPE_TARGET_TYPE (rtype));
+	      return allocate_value (rtype);
+	    }
           return call_function_by_hand (argvec[0], nargs, argvec + 1);
+	case TYPE_CODE_INTERNAL_FUNCTION:
+	  if (noside == EVAL_AVOID_SIDE_EFFECTS)
+	    /* We don't know anything about what the internal
+	       function might return, but we have to return
+	       something.  */
+	    return value_zero (builtin_type (exp->gdbarch)->builtin_int,
+			       not_lval);
+	  else
+	    return call_internal_function (exp->gdbarch, exp->language_defn,
+					   argvec[0], nargs, argvec + 1);
+
         case TYPE_CODE_STRUCT:
           {
             int arity;
@@ -9860,7 +9986,7 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
         else if (discrete_type_p (type_arg))
           {
             struct type *range_type;
-            char *name = ada_type_name (type_arg);
+            const char *name = ada_type_name (type_arg);
 
             range_type = NULL;
             if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
@@ -10343,7 +10469,7 @@ get_var_value (char *name, char *err_msg)
   int nsyms;
 
   nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
-                                  &syms);
+                                  &syms, 1);
 
   if (nsyms != 1)
     {
@@ -10392,7 +10518,7 @@ get_int_var_value (char *name, int *flag)
 static struct type *
 to_fixed_range_type (struct type *raw_type, struct value *dval)
 {
-  char *name;
+  const char *name;
   struct type *base_type;
   char *subtype_info;
 
@@ -10508,37 +10634,6 @@ ada_is_modular_type (struct type *type)
           && TYPE_UNSIGNED (subranged_type));
 }
 
-/* Try to determine the lower and upper bounds of the given modular type
-   using the type name only.  Return non-zero and set L and U as the lower
-   and upper bounds (respectively) if successful.  */
-
-int
-ada_modulus_from_name (struct type *type, ULONGEST *modulus)
-{
-  char *name = ada_type_name (type);
-  char *suffix;
-  int k;
-  LONGEST U;
-
-  if (name == NULL)
-    return 0;
-
-  /* Discrete type bounds are encoded using an __XD suffix.  In our case,
-     we are looking for static bounds, which means an __XDLU suffix.
-     Moreover, we know that the lower bound of modular types is always
-     zero, so the actual suffix should start with "__XDLU_0__", and
-     then be followed by the upper bound value.  */
-  suffix = strstr (name, "__XDLU_0__");
-  if (suffix == NULL)
-    return 0;
-  k = 10;
-  if (!ada_scan_number (suffix, k, &U, NULL))
-    return 0;
-
-  *modulus = (ULONGEST) U + 1;
-  return 1;
-}
-
 /* Assuming ada_is_modular_type (TYPE), the modulus of TYPE.  */
 
 ULONGEST
@@ -10706,7 +10801,6 @@ static void
 ada_exception_support_info_sniffer (void)
 {
   struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
-  struct symbol *sym;
 
   /* If the exception info is already known, then no need to recompute it.  */
   if (data->exception_info != NULL)
@@ -10762,7 +10856,7 @@ static int
 is_known_support_routine (struct frame_info *frame)
 {
   struct symtab_and_line sal;
-  char *func_name;
+  const char *func_name;
   enum language func_lang;
   int i;
 
@@ -10865,7 +10959,7 @@ ada_unhandled_exception_name_addr_from_raise (void)
 
   while (fi != NULL)
     {
-      char *func_name;
+      const char *func_name;
       enum language func_lang;
 
       find_frame_funname (fi, &func_name, &func_lang, NULL);
@@ -10925,7 +11019,7 @@ static CORE_ADDR
 ada_exception_name_addr (enum exception_catchpoint_kind ex,
                          struct breakpoint *b)
 {
-  struct gdb_exception e;
+  volatile struct gdb_exception e;
   CORE_ADDR result = 0;
 
   TRY_CATCH (e, RETURN_MASK_ERROR)
@@ -11046,7 +11140,8 @@ create_excep_cond_exprs (struct ada_catchpoint *c)
 	  s = cond_string;
 	  TRY_CATCH (e, RETURN_MASK_ERROR)
 	    {
-	      exp = parse_exp_1 (&s, block_for_pc (bl->address), 0);
+	      exp = parse_exp_1 (&s, bl->address,
+				 block_for_pc (bl->address), 0);
 	    }
 	  if (e.reason < 0)
 	    warning (_("failed to reevaluate internal exception condition "
@@ -11520,19 +11615,13 @@ ada_get_next_arg (char **argsp)
   char *end;
   char *result;
 
-  /* Skip any leading white space.  */
-
-  while (isspace (*args))
-    args++;
-
+  args = skip_spaces (args);
   if (args[0] == '\0')
     return NULL; /* No more arguments.  */
   
   /* Find the end of the current argument.  */
 
-  end = args;
-  while (*end != '\0' && !isspace (*end))
-    end++;
+  end = skip_to_space (args);
 
   /* Adjust ARGSP to point to the start of the next argument.  */
 
@@ -11550,25 +11639,53 @@ ada_get_next_arg (char **argsp)
 /* Split the arguments specified in a "catch exception" command.  
    Set EX to the appropriate catchpoint type.
    Set EXCEP_STRING to the name of the specific exception if
-   specified by the user.  */
+   specified by the user.
+   If a condition is found at the end of the arguments, the condition
+   expression is stored in COND_STRING (memory must be deallocated
+   after use).  Otherwise COND_STRING is set to NULL.  */
 
 static void
 catch_ada_exception_command_split (char *args,
                                    enum exception_catchpoint_kind *ex,
-                                   char **excep_string)
+				   char **excep_string,
+				   char **cond_string)
 {
   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
   char *exception_name;
+  char *cond = NULL;
 
   exception_name = ada_get_next_arg (&args);
+  if (exception_name != NULL && strcmp (exception_name, "if") == 0)
+    {
+      /* This is not an exception name; this is the start of a condition
+	 expression for a catchpoint on all exceptions.  So, "un-get"
+	 this token, and set exception_name to NULL.  */
+      xfree (exception_name);
+      exception_name = NULL;
+      args -= 2;
+    }
   make_cleanup (xfree, exception_name);
 
+  /* Check to see if we have a condition.  */
+
+  args = skip_spaces (args);
+  if (strncmp (args, "if", 2) == 0
+      && (isspace (args[2]) || args[2] == '\0'))
+    {
+      args += 2;
+      args = skip_spaces (args);
+
+      if (args[0] == '\0')
+        error (_("Condition missing after `if' keyword"));
+      cond = xstrdup (args);
+      make_cleanup (xfree, cond);
+
+      args += strlen (args);
+    }
+
   /* Check that we do not have any more arguments.  Anything else
      is unexpected.  */
 
-  while (isspace (*args))
-    args++;
-
   if (args[0] != '\0')
     error (_("Junk at end of expression"));
 
@@ -11592,6 +11709,7 @@ catch_ada_exception_command_split (char *args,
       *ex = ex_catch_exception;
       *excep_string = exception_name;
     }
+  *cond_string = cond;
 }
 
 /* Return the name of the symbol on which we should break in order to
@@ -11735,17 +11853,22 @@ ada_exception_sal (enum exception_catchpoint_kind ex, char *excep_string,
    If the user asked the catchpoint to catch only a specific
    exception, then save the exception name in ADDR_STRING.
 
+   If the user provided a condition, then set COND_STRING to
+   that condition expression (the memory must be deallocated
+   after use).  Otherwise, set COND_STRING to NULL.
+
    See ada_exception_sal for a description of all the remaining
    function arguments of this function.  */
 
 static struct symtab_and_line
 ada_decode_exception_location (char *args, char **addr_string,
                                char **excep_string,
+			       char **cond_string,
                                const struct breakpoint_ops **ops)
 {
   enum exception_catchpoint_kind ex;
 
-  catch_ada_exception_command_split (args, &ex, excep_string);
+  catch_ada_exception_command_split (args, &ex, excep_string, cond_string);
   return ada_exception_sal (ex, *excep_string, addr_string, ops);
 }
 
@@ -11756,6 +11879,7 @@ create_ada_exception_catchpoint (struct gdbarch *gdbarch,
 				 struct symtab_and_line sal,
 				 char *addr_string,
 				 char *excep_string,
+				 char *cond_string,
 				 const struct breakpoint_ops *ops,
 				 int tempflag,
 				 int from_tty)
@@ -11767,6 +11891,8 @@ create_ada_exception_catchpoint (struct gdbarch *gdbarch,
 				 ops, tempflag, from_tty);
   c->excep_string = excep_string;
   create_excep_cond_exprs (c);
+  if (cond_string != NULL)
+    set_breakpoint_condition (&c->base, cond_string, from_tty);
   install_breakpoint (0, &c->base, 1);
 }
 
@@ -11781,31 +11907,54 @@ catch_ada_exception_command (char *arg, int from_tty,
   struct symtab_and_line sal;
   char *addr_string = NULL;
   char *excep_string = NULL;
+  char *cond_string = NULL;
   const struct breakpoint_ops *ops = NULL;
 
   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
 
   if (!arg)
     arg = "";
-  sal = ada_decode_exception_location (arg, &addr_string, &excep_string, &ops);
+  sal = ada_decode_exception_location (arg, &addr_string, &excep_string,
+				       &cond_string, &ops);
   create_ada_exception_catchpoint (gdbarch, sal, addr_string,
-				   excep_string, ops, tempflag, from_tty);
+				   excep_string, cond_string, ops,
+				   tempflag, from_tty);
 }
 
+/* Assuming that ARGS contains the arguments of a "catch assert"
+   command, parse those arguments and return a symtab_and_line object
+   for a failed assertion catchpoint.
+
+   Set ADDR_STRING to the name of the function where the real
+   breakpoint that implements the catchpoint is set.
+
+   If ARGS contains a condition, set COND_STRING to that condition
+   (the memory needs to be deallocated after use).  Otherwise, set
+   COND_STRING to NULL.  */
+
 static struct symtab_and_line
 ada_decode_assert_location (char *args, char **addr_string,
+			    char **cond_string,
                             const struct breakpoint_ops **ops)
 {
-  /* Check that no argument where provided at the end of the command.  */
+  args = skip_spaces (args);
 
-  if (args != NULL)
+  /* Check whether a condition was provided.  */
+  if (strncmp (args, "if", 2) == 0
+      && (isspace (args[2]) || args[2] == '\0'))
     {
-      while (isspace (*args))
-        args++;
-      if (*args != '\0')
-        error (_("Junk at end of arguments."));
+      args += 2;
+      args = skip_spaces (args);
+      if (args[0] == '\0')
+        error (_("condition missing after `if' keyword"));
+      *cond_string = xstrdup (args);
     }
 
+  /* Otherwise, there should be no other argument at the end of
+     the command.  */
+  else if (args[0] != '\0')
+    error (_("Junk at end of arguments."));
+
   return ada_exception_sal (ex_catch_assert, NULL, addr_string, ops);
 }
 
@@ -11819,15 +11968,17 @@ catch_assert_command (char *arg, int from_tty,
   int tempflag;
   struct symtab_and_line sal;
   char *addr_string = NULL;
+  char *cond_string = NULL;
   const struct breakpoint_ops *ops = NULL;
 
   tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
 
   if (!arg)
     arg = "";
-  sal = ada_decode_assert_location (arg, &addr_string, &ops);
+  sal = ada_decode_assert_location (arg, &addr_string, &cond_string, &ops);
   create_ada_exception_catchpoint (gdbarch, sal, addr_string,
-				   NULL, ops, tempflag, from_tty);
+				   NULL, cond_string, ops, tempflag,
+				   from_tty);
 }
                                 /* Operators */
 /* Information about operators given special treatment in functions
@@ -12310,6 +12461,40 @@ static const struct exp_descriptor ada_exp_descriptor = {
   ada_evaluate_subexp
 };
 
+/* Implement the "la_get_symbol_name_cmp" language_defn method
+   for Ada.  */
+
+static symbol_name_cmp_ftype
+ada_get_symbol_name_cmp (const char *lookup_name)
+{
+  if (should_use_wild_match (lookup_name))
+    return wild_match;
+  else
+    return compare_names;
+}
+
+/* Implement the "la_read_var_value" language_defn method for Ada.  */
+
+static struct value *
+ada_read_var_value (struct symbol *var, struct frame_info *frame)
+{
+  struct block *frame_block = NULL;
+  struct symbol *renaming_sym = NULL;
+
+  /* The only case where default_read_var_value is not sufficient
+     is when VAR is a renaming...  */
+  if (frame)
+    frame_block = get_frame_block (frame, NULL);
+  if (frame_block)
+    renaming_sym = ada_find_renaming_symbol (var, frame_block);
+  if (renaming_sym != NULL)
+    return ada_read_renaming_var_value (renaming_sym, frame_block);
+
+  /* This is a typical case where we expect the default_read_var_value
+     function to work.  */
+  return default_read_var_value (var, frame);
+}
+
 const struct language_defn ada_language_defn = {
   "ada",                        /* Language name */
   language_ada,
@@ -12330,6 +12515,7 @@ const struct language_defn ada_language_defn = {
   ada_print_typedef,            /* Print a typedef using appropriate syntax */
   ada_val_print,                /* Print a value using appropriate syntax */
   ada_value_print,              /* Print a top-level value */
+  ada_read_var_value,		/* la_read_var_value */
   NULL,                         /* Language specific skip_trampoline */
   NULL,                         /* name_of_this */
   ada_lookup_symbol_nonlocal,   /* Looking up non-local symbols.  */
@@ -12346,7 +12532,7 @@ const struct language_defn ada_language_defn = {
   ada_print_array_index,
   default_pass_by_reference,
   c_get_string,
-  compare_names,
+  ada_get_symbol_name_cmp,	/* la_get_symbol_name_cmp */
   ada_iterate_over_symbols,
   LANG_MAGIC
 };
diff --git a/gdb/ada-lang.h b/gdb/ada-lang.h
index 9ab7b2d..9a93c50 100644
--- a/gdb/ada-lang.h
+++ b/gdb/ada-lang.h
@@ -80,11 +80,15 @@ struct ada_opname_map
 /* Defined in ada-lang.c */
 extern const struct ada_opname_map ada_opname_table[];
 
-/* A tuple, (symbol, block), representing one instance of a 
- * symbol-lookup operation.  */
-struct ada_symbol_info {
-  struct symbol* sym;
-  struct block* block;
+/* A tuple representing one instance of a symbol-lookup operation.  */
+
+struct ada_symbol_info
+{
+  /* The symbol that was found.  */
+  struct symbol *sym;
+
+  /* The block where the symbol was found.  */
+  struct block *block;
 };
 
 /* Denotes a type of renaming symbol (see ada_parse_renaming).  */
@@ -164,13 +168,13 @@ extern void ada_print_type (struct type *, const char *, struct ui_file *, int,
 extern void ada_print_typedef (struct type *type, struct symbol *new_symbol,
 			       struct ui_file *stream);
 
-extern int ada_val_print (struct type *, const gdb_byte *, int, CORE_ADDR,
-                          struct ui_file *, int,
-			  const struct value *,
-			  const struct value_print_options *);
+extern void ada_val_print (struct type *, const gdb_byte *, int, CORE_ADDR,
+			   struct ui_file *, int,
+			   const struct value *,
+			   const struct value_print_options *);
 
-extern int ada_value_print (struct value *, struct ui_file *,
-			    const struct value_print_options *);
+extern void ada_value_print (struct value *, struct ui_file *,
+			     const struct value_print_options *);
 
                                 /* Defined in ada-lang.c */
 
@@ -210,6 +214,10 @@ extern LONGEST ada_discrete_type_low_bound (struct type *);
 
 extern LONGEST ada_discrete_type_high_bound (struct type *);
 
+extern struct value *ada_get_decoded_value (struct value *value);
+
+extern struct type *ada_get_decoded_type (struct type *type);
+
 extern char *ada_decode_symbol (const struct general_symbol_info*);
 
 extern const char *ada_decode (const char*);
@@ -219,16 +227,17 @@ extern enum language ada_update_initial_language (enum language);
 extern void clear_ada_sym_cache (void);
 
 extern int ada_lookup_symbol_list (const char *, const struct block *,
-                                   domain_enum, struct ada_symbol_info**);
+                                   domain_enum, struct ada_symbol_info**,
+				   int);
 
 extern char *ada_fold_name (const char *);
 
 extern struct symbol *ada_lookup_symbol (const char *, const struct block *,
                                          domain_enum, int *);
 
-extern struct symbol *
-ada_lookup_encoded_symbol (const char *, const struct block *,
-			   domain_enum namespace, struct block **);
+extern void ada_lookup_encoded_symbol
+  (const char *name, const struct block *block, domain_enum namespace,
+   struct ada_symbol_info *symbol_info);
 
 extern struct minimal_symbol *ada_lookup_simple_minsym (const char *);
 
@@ -321,18 +330,14 @@ extern struct type *ada_template_to_fixed_record_type_1 (struct type *type,
 
 extern int ada_name_prefix_len (const char *);
 
-extern char *ada_type_name (struct type *);
+extern const char *ada_type_name (struct type *);
 
 extern struct type *ada_find_parallel_type (struct type *,
                                             const char *suffix);
 
 extern LONGEST get_int_var_value (char *, int *);
 
-extern struct symbol *ada_find_any_symbol (const char *name);
-
-extern struct type *ada_find_any_type (const char *name);
-
-extern struct symbol *ada_find_renaming_symbol (const char *name,
+extern struct symbol *ada_find_renaming_symbol (struct symbol *name_sym,
                                                 struct block *block);
 
 extern int ada_prefer_type (struct type *, struct type *);
diff --git a/gdb/ada-lex.c b/gdb/ada-lex.c
index 92cd92c..c962fec 100644
--- a/gdb/ada-lex.c
+++ b/gdb/ada-lex.c
@@ -2173,7 +2173,7 @@ int main()
 
 /* Initialize the lexer for processing new expression. */
 
-void
+static void
 lexer_init (FILE *inp)
 {
   BEGIN INITIAL;
@@ -2290,7 +2290,9 @@ processReal (const char *num0)
 
 
 /* Store a canonicalized version of NAME0[0..LEN-1] in yylval.ssym.  The
-   resulting string is valid until the next call to ada_parse.  It differs
+   resulting string is valid until the next call to ada_parse.  If
+   NAME0 contains the substring "___", it is assumed to be already
+   encoded and the resulting name is equal to it.  Otherwise, it differs
    from NAME0 in that:
     + Characters between '...' or <...> are transfered verbatim to 
       yylval.ssym.
@@ -2310,8 +2312,18 @@ processId (const char *name0, int len)
   int i0, i;
   struct stoken result;
 
+  result.ptr = name;
   while (len > 0 && isspace (name0[len-1]))
     len -= 1;
+
+  if (strstr (name0, "___") != NULL)
+    {
+      strncpy (name, name0, len);
+      name[len] = '\000';
+      result.length = len;
+      return result;
+    }
+
   i = i0 = 0;
   while (i0 < len)
     {
@@ -2351,7 +2363,6 @@ processId (const char *name0, int len)
     }
   name[i] = '\000';
 
-  result.ptr = name;
   result.length = i;
   return result;
 }
diff --git a/gdb/ada-lex.l b/gdb/ada-lex.l
index 48667d0..714265e 100644
--- a/gdb/ada-lex.l
+++ b/gdb/ada-lex.l
@@ -293,7 +293,7 @@ false		{ return FALSEKEYWORD; }
 
 /* Initialize the lexer for processing new expression. */
 
-void
+static void
 lexer_init (FILE *inp)
 {
   BEGIN INITIAL;
@@ -410,7 +410,9 @@ processReal (const char *num0)
 
 
 /* Store a canonicalized version of NAME0[0..LEN-1] in yylval.ssym.  The
-   resulting string is valid until the next call to ada_parse.  It differs
+   resulting string is valid until the next call to ada_parse.  If
+   NAME0 contains the substring "___", it is assumed to be already
+   encoded and the resulting name is equal to it.  Otherwise, it differs
    from NAME0 in that:
     + Characters between '...' or <...> are transfered verbatim to 
       yylval.ssym.
@@ -430,8 +432,18 @@ processId (const char *name0, int len)
   int i0, i;
   struct stoken result;
 
+  result.ptr = name;
   while (len > 0 && isspace (name0[len-1]))
     len -= 1;
+
+  if (strstr (name0, "___") != NULL)
+    {
+      strncpy (name, name0, len);
+      name[len] = '\000';
+      result.length = len;
+      return result;
+    }
+
   i = i0 = 0;
   while (i0 < len)
     {
@@ -471,7 +483,6 @@ processId (const char *name0, int len)
     }
   name[i] = '\000';
 
-  result.ptr = name;
   result.length = i;
   return result;
 }
diff --git a/gdb/ada-tasks.c b/gdb/ada-tasks.c
index 274d83a..0e441fb 100644
--- a/gdb/ada-tasks.c
+++ b/gdb/ada-tasks.c
@@ -215,6 +215,12 @@ struct ada_tasks_inferior_data
      above.  */
   CORE_ADDR known_tasks_addr;
 
+  /* Type of elements of the known task.  Usually a pointer.  */
+  struct type *known_tasks_element;
+
+  /* Number of elements in the known tasks array.  */
+  unsigned int known_tasks_length;
+
   /* When nonzero, this flag indicates that the task_list field
      below is up to date.  When set to zero, the list has either
      not been initialized, or has potentially become stale.  */
@@ -774,24 +780,21 @@ add_ada_task (CORE_ADDR task_id, struct inferior *inf)
    it in the current inferior's TASK_LIST.  Return non-zero upon success.  */
 
 static int
-read_known_tasks_array (CORE_ADDR known_tasks_addr)
+read_known_tasks_array (struct ada_tasks_inferior_data *data)
 {
-  const int target_ptr_byte =
-    gdbarch_ptr_bit (target_gdbarch) / TARGET_CHAR_BIT;
-  const int known_tasks_size = target_ptr_byte * MAX_NUMBER_OF_KNOWN_TASKS;
+  const int target_ptr_byte = TYPE_LENGTH (data->known_tasks_element);
+  const int known_tasks_size = target_ptr_byte * data->known_tasks_length;
   gdb_byte *known_tasks = alloca (known_tasks_size);
   int i;
 
   /* Build a new list by reading the ATCBs from the Known_Tasks array
      in the Ada runtime.  */
-  read_memory (known_tasks_addr, known_tasks, known_tasks_size);
-  for (i = 0; i < MAX_NUMBER_OF_KNOWN_TASKS; i++)
+  read_memory (data->known_tasks_addr, known_tasks, known_tasks_size);
+  for (i = 0; i < data->known_tasks_length; i++)
     {
-      struct type *data_ptr_type =
-        builtin_type (target_gdbarch)->builtin_data_ptr;
       CORE_ADDR task_id =
         extract_typed_address (known_tasks + i * target_ptr_byte,
-			       data_ptr_type);
+			       data->known_tasks_element);
 
       if (task_id != 0)
         add_ada_task (task_id, current_inferior ());
@@ -804,13 +807,10 @@ read_known_tasks_array (CORE_ADDR known_tasks_addr)
    the current inferior's TASK_LIST.  Return non-zero upon success.  */
 
 static int
-read_known_tasks_list (CORE_ADDR known_tasks_addr)
+read_known_tasks_list (struct ada_tasks_inferior_data *data)
 {
-  const int target_ptr_byte =
-    gdbarch_ptr_bit (target_gdbarch) / TARGET_CHAR_BIT;
+  const int target_ptr_byte = TYPE_LENGTH (data->known_tasks_element);
   gdb_byte *known_tasks = alloca (target_ptr_byte);
-  struct type *data_ptr_type =
-    builtin_type (target_gdbarch)->builtin_data_ptr;
   CORE_ADDR task_id;
   const struct ada_tasks_pspace_data *pspace_data
     = get_ada_tasks_pspace_data (current_program_space);
@@ -820,8 +820,8 @@ read_known_tasks_list (CORE_ADDR known_tasks_addr)
     return 0;
 
   /* Build a new list by reading the ATCBs.  Read head of the list.  */
-  read_memory (known_tasks_addr, known_tasks, target_ptr_byte);
-  task_id = extract_typed_address (known_tasks, data_ptr_type);
+  read_memory (data->known_tasks_addr, known_tasks, target_ptr_byte);
+  task_id = extract_typed_address (known_tasks, data->known_tasks_element);
   while (task_id != 0)
     {
       struct value *tcb_value;
@@ -841,51 +841,96 @@ read_known_tasks_list (CORE_ADDR known_tasks_addr)
   return 1;
 }
 
-/* Return the address of the variable NAME that contains all the known
-   tasks maintained in the Ada Runtime.  Return NULL if the variable
-   could not be found, meaning that the inferior program probably does
-   not use tasking.  */
-
-static CORE_ADDR
-get_known_tasks_addr (const char *name)
-{
-  struct minimal_symbol *msym;
-
-  msym = lookup_minimal_symbol (name, NULL, NULL);
-  if (msym == NULL)
-    return 0;
-
-  return SYMBOL_VALUE_ADDRESS (msym);
-}
-
-/* Assuming DATA is the ada-tasks' data for the current inferior,
-   set the known_tasks_kind and known_tasks_addr fields.  Do nothing
-   if those fields are already set and still up to date.  */
+/* Set all fields of the current inferior ada-tasks data pointed by DATA.
+   Do nothing if those fields are already set and still up to date.  */
 
 static void
-ada_set_current_inferior_known_tasks_addr (struct ada_tasks_inferior_data *data)
+ada_tasks_inferior_data_sniffer (struct ada_tasks_inferior_data *data)
 {
-  CORE_ADDR known_tasks_addr;
+  struct minimal_symbol *msym;
+  struct symbol *sym;
 
+  /* Return now if already set.  */
   if (data->known_tasks_kind != ADA_TASKS_UNKNOWN)
     return;
 
-  known_tasks_addr = get_known_tasks_addr (KNOWN_TASKS_NAME);
-  if (known_tasks_addr != 0)
+  /* Try array.  */
+
+  msym = lookup_minimal_symbol (KNOWN_TASKS_NAME, NULL, NULL);
+  if (msym != NULL)
     {
       data->known_tasks_kind = ADA_TASKS_ARRAY;
-      data->known_tasks_addr = known_tasks_addr;
+      data->known_tasks_addr = SYMBOL_VALUE_ADDRESS (msym);
+
+      /* Try to get pointer type and array length from the symtab.  */
+      sym = lookup_symbol_in_language (KNOWN_TASKS_NAME, NULL, VAR_DOMAIN,
+				       language_c, NULL);
+      if (sym != NULL)
+	{
+	  /* Validate.  */
+	  struct type *type = check_typedef (SYMBOL_TYPE (sym));
+	  struct type *eltype = NULL;
+	  struct type *idxtype = NULL;
+
+	  if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
+	    eltype = check_typedef (TYPE_TARGET_TYPE (type));
+	  if (eltype != NULL
+	      && TYPE_CODE (eltype) == TYPE_CODE_PTR)
+	    idxtype = check_typedef (TYPE_INDEX_TYPE (type));
+	  if (idxtype != NULL
+	      && !TYPE_LOW_BOUND_UNDEFINED (idxtype)
+	      && !TYPE_HIGH_BOUND_UNDEFINED (idxtype))
+	    {
+	      data->known_tasks_element = eltype;
+	      data->known_tasks_length =
+		TYPE_HIGH_BOUND (idxtype) - TYPE_LOW_BOUND (idxtype) + 1;
+	      return;
+	    }
+	}
+
+      /* Fallback to default values.  The runtime may have been stripped (as
+	 in some distributions), but it is likely that the executable still
+	 contains debug information on the task type (due to implicit with of
+	 Ada.Tasking).  */
+      data->known_tasks_element =
+	builtin_type (target_gdbarch)->builtin_data_ptr;
+      data->known_tasks_length = MAX_NUMBER_OF_KNOWN_TASKS;
       return;
     }
 
-  known_tasks_addr = get_known_tasks_addr (KNOWN_TASKS_LIST);
-  if (known_tasks_addr != 0)
+
+  /* Try list.  */
+
+  msym = lookup_minimal_symbol (KNOWN_TASKS_LIST, NULL, NULL);
+  if (msym != NULL)
     {
       data->known_tasks_kind = ADA_TASKS_LIST;
-      data->known_tasks_addr = known_tasks_addr;
+      data->known_tasks_addr = SYMBOL_VALUE_ADDRESS (msym);
+      data->known_tasks_length = 1;
+
+      sym = lookup_symbol_in_language (KNOWN_TASKS_LIST, NULL, VAR_DOMAIN,
+				       language_c, NULL);
+      if (sym != NULL && SYMBOL_VALUE_ADDRESS (sym) != 0)
+	{
+	  /* Validate.  */
+	  struct type *type = check_typedef (SYMBOL_TYPE (sym));
+
+	  if (TYPE_CODE (type) == TYPE_CODE_PTR)
+	    {
+	      data->known_tasks_element = type;
+	      return;
+	    }
+	}
+
+      /* Fallback to default values.  */
+      data->known_tasks_element =
+	builtin_type (target_gdbarch)->builtin_data_ptr;
+      data->known_tasks_length = 1;
       return;
     }
 
+  /* Can't find tasks.  */
+
   data->known_tasks_kind = ADA_TASKS_NOT_FOUND;
   data->known_tasks_addr = 0;
 }
@@ -909,7 +954,7 @@ read_known_tasks (void)
      return, as we don't want a stale task list to be used...  This can
      happen for instance when debugging a non-multitasking program after
      having debugged a multitasking one.  */
-  ada_set_current_inferior_known_tasks_addr (data);
+  ada_tasks_inferior_data_sniffer (data);
   gdb_assert (data->known_tasks_kind != ADA_TASKS_UNKNOWN);
 
   switch (data->known_tasks_kind)
@@ -917,9 +962,9 @@ read_known_tasks (void)
       case ADA_TASKS_NOT_FOUND: /* Tasking not in use in inferior.  */
         return 0;
       case ADA_TASKS_ARRAY:
-        return read_known_tasks_array (data->known_tasks_addr);
+        return read_known_tasks_array (data);
       case ADA_TASKS_LIST:
-        return read_known_tasks_list (data->known_tasks_addr);
+        return read_known_tasks_list (data);
     }
 
   /* Step 3: Set task_list_valid_p, to avoid re-reading the Known_Tasks
diff --git a/gdb/ada-typeprint.c b/gdb/ada-typeprint.c
index 97ab937..40f3058 100644
--- a/gdb/ada-typeprint.c
+++ b/gdb/ada-typeprint.c
@@ -76,7 +76,7 @@ decoded_type_name (struct type *type)
     return NULL;
   else
     {
-      char *raw_name = ada_type_name (type);
+      const char *raw_name = ada_type_name (type);
       char *s, *q;
 
       if (name_buffer == NULL || name_buffer_len <= strlen (raw_name))
@@ -223,9 +223,9 @@ print_dynamic_range_bound (struct type *type, const char *name, int name_len,
 static void
 print_range_type (struct type *raw_type, struct ui_file *stream)
 {
-  char *name;
+  const char *name;
   struct type *base_type;
-  char *subtype_info;
+  const char *subtype_info;
 
   gdb_assert (raw_type != NULL);
   name = TYPE_NAME (raw_type);
@@ -274,7 +274,8 @@ static void
 print_enum_type (struct type *type, struct ui_file *stream)
 {
   int len = TYPE_NFIELDS (type);
-  int i, lastval;
+  int i;
+  LONGEST lastval;
 
   fprintf_filtered (stream, "(");
   wrap_here (" ");
@@ -287,10 +288,11 @@ print_enum_type (struct type *type, struct ui_file *stream)
 	fprintf_filtered (stream, ", ");
       wrap_here ("    ");
       fputs_filtered (ada_enum_name (TYPE_FIELD_NAME (type, i)), stream);
-      if (lastval != TYPE_FIELD_BITPOS (type, i))
+      if (lastval != TYPE_FIELD_ENUMVAL (type, i))
 	{
-	  fprintf_filtered (stream, " => %d", TYPE_FIELD_BITPOS (type, i));
-	  lastval = TYPE_FIELD_BITPOS (type, i);
+	  fprintf_filtered (stream, " => %s",
+			    plongest (TYPE_FIELD_ENUMVAL (type, i)));
+	  lastval = TYPE_FIELD_ENUMVAL (type, i);
 	}
       lastval += 1;
     }
@@ -810,7 +812,7 @@ ada_print_type (struct type *type0, const char *varstring,
 	  print_fixed_point_type (type, stream);
 	else
 	  {
-	    char *name = ada_type_name (type);
+	    const char *name = ada_type_name (type);
 
 	    if (!ada_is_range_type_name (name))
 	      fprintf_filtered (stream, _("<%d-byte integer>"),
diff --git a/gdb/ada-valprint.c b/gdb/ada-valprint.c
index f43f3e3..95ec7ec 100644
--- a/gdb/ada-valprint.c
+++ b/gdb/ada-valprint.c
@@ -50,10 +50,10 @@ static int print_field_values (struct type *, const gdb_byte *,
 
 static void adjust_type_signedness (struct type *);
 
-static int ada_val_print_1 (struct type *, const gdb_byte *, int, CORE_ADDR,
-			    struct ui_file *, int,
-			    const struct value *,
-			    const struct value_print_options *);
+static void ada_val_print_1 (struct type *, const gdb_byte *, int, CORE_ADDR,
+			     struct ui_file *, int,
+			     const struct value *,
+			     const struct value_print_options *);
 

 
 /* Make TYPE unsigned if its range of values includes no negatives.  */
@@ -109,7 +109,7 @@ print_optional_low_bound (struct ui_file *stream, struct type *type,
 	return 0;
       break;
     case TYPE_CODE_ENUM:
-      if (low_bound == TYPE_FIELD_BITPOS (index_type, 0))
+      if (low_bound == TYPE_FIELD_ENUMVAL (index_type, 0))
 	return 0;
       break;
     case TYPE_CODE_UNDEF:
@@ -402,7 +402,7 @@ ada_print_scalar (struct type *type, LONGEST val, struct ui_file *stream)
       len = TYPE_NFIELDS (type);
       for (i = 0; i < len; i++)
 	{
-	  if (TYPE_FIELD_BITPOS (type, i) == val)
+	  if (TYPE_FIELD_ENUMVAL (type, i) == val)
 	    {
 	      break;
 	    }
@@ -566,10 +566,9 @@ ada_printstr (struct ui_file *stream, struct type *type,
 
 
 /* See val_print for a description of the various parameters of this
-   function; they are identical.  The semantics of the return value is
-   also identical to val_print.  */
+   function; they are identical.  */
 
-int
+void
 ada_val_print (struct type *type, const gdb_byte *valaddr,
 	       int embedded_offset, CORE_ADDR address,
 	       struct ui_file *stream, int recurse,
@@ -577,35 +576,26 @@ ada_val_print (struct type *type, const gdb_byte *valaddr,
 	       const struct value_print_options *options)
 {
   volatile struct gdb_exception except;
-  int result = 0;
 
   /* XXX: this catches QUIT/ctrl-c as well.  Isn't that busted?  */
   TRY_CATCH (except, RETURN_MASK_ALL)
     {
-      result = ada_val_print_1 (type, valaddr, embedded_offset, address,
-				stream, recurse, val, options);
+      ada_val_print_1 (type, valaddr, embedded_offset, address,
+		       stream, recurse, val, options);
     }
-
-  if (except.reason < 0)
-    result = 0;
-
-  return result;
 }
 
 /* Assuming TYPE is a simple array, print the value of this array located
    at VALADDR + OFFSET.  See ada_val_print for a description of the various
-   parameters of this function; they are identical.  The semantics
-   of the return value is also identical to ada_val_print.  */
+   parameters of this function; they are identical.  */
 
-static int
+static void
 ada_val_print_array (struct type *type, const gdb_byte *valaddr,
 		     int offset, CORE_ADDR address,
 		     struct ui_file *stream, int recurse,
 		     const struct value *val,
 		     const struct value_print_options *options)
 {
-  int result = 0;
-
   /* For an array of chars, print with string syntax.  */
   if (ada_is_string_type (type)
       && (options->format == 0 || options->format == 's'))
@@ -644,7 +634,6 @@ ada_val_print_array (struct type *type, const gdb_byte *valaddr,
         }
 
       printstr (stream, elttype, valaddr + offset, len, 0, eltlen, options);
-      result = len;
     }
   else
     {
@@ -658,24 +647,20 @@ ada_val_print_array (struct type *type, const gdb_byte *valaddr,
 				  stream, recurse, val, options, 0);
       fprintf_filtered (stream, ")");
     }
-
-  return result;
 }
 
 /* See the comment on ada_val_print.  This function differs in that it
    does not catch evaluation errors (leaving that to ada_val_print).  */
 
-static int
+static void
 ada_val_print_1 (struct type *type, const gdb_byte *valaddr,
 		 int offset, CORE_ADDR address,
 		 struct ui_file *stream, int recurse,
 		 const struct value *original_value,
 		 const struct value_print_options *options)
 {
-  unsigned int len;
   int i;
   struct type *elttype;
-  LONGEST val;
   int offset_aligned;
 
   type = ada_check_typedef (type);
@@ -684,11 +669,14 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr,
       || (ada_is_constrained_packed_array_type (type)
 	  && TYPE_CODE (type) != TYPE_CODE_PTR))
     {
-      int retn;
       struct value *mark = value_mark ();
       struct value *val;
 
       val = value_from_contents_and_address (type, valaddr + offset, address);
+      /* If this is a reference, coerce it now.  This helps taking care
+	 of the case where ADDRESS is meaningless because original_value
+	 was not an lval.  */
+      val = coerce_ref (val);
       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)  /* array access type.  */
 	val = ada_coerce_to_simple_array_ptr (val);
       else
@@ -697,16 +685,15 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr,
 	{
 	  gdb_assert (TYPE_CODE (type) == TYPE_CODE_TYPEDEF);
 	  fprintf_filtered (stream, "0x0");
-	  retn = 0;
 	}
       else
-	retn = ada_val_print_1 (value_type (val),
-				value_contents_for_printing (val),
-				value_embedded_offset (val),
-				value_address (val), stream, recurse,
-				val, options);
+	ada_val_print_1 (value_type (val),
+			 value_contents_for_printing (val),
+			 value_embedded_offset (val),
+			 value_address (val), stream, recurse,
+			 val, options);
       value_free_to_mark (mark);
-      return retn;
+      return;
     }
 
   offset_aligned = offset + ada_aligned_value_addr (type, valaddr) - valaddr;
@@ -715,13 +702,14 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr,
   switch (TYPE_CODE (type))
     {
     default:
-      return c_val_print (type, valaddr, offset, address, stream,
-			  recurse, original_value, options);
+      c_val_print (type, valaddr, offset, address, stream,
+		   recurse, original_value, options);
+      break;
 
     case TYPE_CODE_PTR:
       {
-	int ret = c_val_print (type, valaddr, offset, address,
-			       stream, recurse, original_value, options);
+	c_val_print (type, valaddr, offset, address,
+		     stream, recurse, original_value, options);
 
 	if (ada_is_tag_type (type))
 	  {
@@ -733,9 +721,8 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr,
 
 	    if (name != NULL) 
 	      fprintf_filtered (stream, " (%s)", name);
-	    return 0;
-	}
-	return ret;
+	  }
+	return;
       }
 
     case TYPE_CODE_INT:
@@ -747,7 +734,7 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr,
 
 	  fprintf_filtered (stream, len < 4 ? "%.11g" : "%.17g",
 			    (double) ada_fixed_to_float (type, v));
-	  return 0;
+	  return;
 	}
       else if (TYPE_CODE (type) == TYPE_CODE_RANGE)
 	{
@@ -763,16 +750,17 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr,
 		= value_from_contents_and_address (type, valaddr + offset, 0);
 	      struct value *v = value_cast (target_type, v1);
 
-	      return ada_val_print_1 (target_type,
-				      value_contents_for_printing (v),
-				      value_embedded_offset (v), 0,
- 				      stream, recurse + 1, v, options);
+	      ada_val_print_1 (target_type,
+			       value_contents_for_printing (v),
+			       value_embedded_offset (v), 0,
+			       stream, recurse + 1, v, options);
 	    }
 	  else
-	    return ada_val_print_1 (TYPE_TARGET_TYPE (type),
-				    valaddr, offset,
-				    address, stream, recurse,
-				    original_value, options);
+	    ada_val_print_1 (TYPE_TARGET_TYPE (type),
+			     valaddr, offset,
+			     address, stream, recurse,
+			     original_value, options);
+	  return;
 	}
       else
 	{
@@ -817,53 +805,53 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr,
 		  ada_printchar (c, type, stream);
 		}
 	    }
-	  return 0;
+	  return;
 	}
 
     case TYPE_CODE_ENUM:
-      if (options->format)
-	{
-	  val_print_scalar_formatted (type, valaddr, offset_aligned,
-				      original_value, options, 0, stream);
-	  break;
-	}
-      len = TYPE_NFIELDS (type);
-      val = unpack_long (type, valaddr + offset_aligned);
-      for (i = 0; i < len; i++)
-	{
-	  QUIT;
-	  if (val == TYPE_FIELD_BITPOS (type, i))
-	    {
-	      break;
-	    }
-	}
-      if (i < len)
-	{
-	  const char *name = ada_enum_name (TYPE_FIELD_NAME (type, i));
-
-	  if (name[0] == '\'')
-	    fprintf_filtered (stream, "%ld %s", (long) val, name);
-	  else
-	    fputs_filtered (name, stream);
-	}
-      else
-	{
-	  print_longest (stream, 'd', 0, val);
-	}
-      break;
+      {
+	unsigned int len;
+	LONGEST val;
 
-    case TYPE_CODE_FLAGS:
-      if (options->format)
-	val_print_scalar_formatted (type, valaddr, offset_aligned,
-				    original_value, options, 0, stream);
-      else
-	val_print_type_code_flags (type, valaddr + offset_aligned, stream);
-      break;
+	if (options->format)
+	  {
+	    val_print_scalar_formatted (type, valaddr, offset_aligned,
+					original_value, options, 0, stream);
+	    break;
+	  }
+	len = TYPE_NFIELDS (type);
+	val = unpack_long (type, valaddr + offset_aligned);
+	for (i = 0; i < len; i++)
+	  {
+	    QUIT;
+	    if (val == TYPE_FIELD_ENUMVAL (type, i))
+	      {
+		break;
+	      }
+	  }
+	if (i < len)
+	  {
+	    const char *name = ada_enum_name (TYPE_FIELD_NAME (type, i));
+
+	    if (name[0] == '\'')
+	      fprintf_filtered (stream, "%ld %s", (long) val, name);
+	    else
+	      fputs_filtered (name, stream);
+	  }
+	else
+	  {
+	    print_longest (stream, 'd', 0, val);
+	  }
+	break;
+      }
 
     case TYPE_CODE_FLT:
       if (options->format)
-	return c_val_print (type, valaddr, offset, address, stream,
-			    recurse, original_value, options);
+	{
+	  c_val_print (type, valaddr, offset, address, stream,
+		       recurse, original_value, options);
+	  return;
+	}
       else
 	ada_print_floating (valaddr + offset, type, stream);
       break;
@@ -873,19 +861,20 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr,
       if (ada_is_bogus_array_descriptor (type))
 	{
 	  fprintf_filtered (stream, "(...?)");
-	  return 0;
+	  return;
 	}
       else
 	{
 	  print_record (type, valaddr, offset_aligned,
 			stream, recurse, original_value, options);
-	  return 0;
+	  return;
 	}
 
     case TYPE_CODE_ARRAY:
-      return ada_val_print_array (type, valaddr, offset_aligned,
-				  address, stream, recurse, original_value,
-				  options);
+      ada_val_print_array (type, valaddr, offset_aligned,
+			   address, stream, recurse, original_value,
+			   options);
+      return;
 
     case TYPE_CODE_REF:
       /* For references, the debugger is expected to print the value as
@@ -911,7 +900,7 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr,
           deref_val_int = unpack_pointer (type, valaddr + offset_aligned);
           if (deref_val_int != 0)
             {
-              struct value *deref_val =
+              deref_val =
                 ada_value_ind (value_from_pointer
                                (lookup_pointer_type (elttype),
                                 deref_val_int));
@@ -931,7 +920,6 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr,
       break;
     }
   gdb_flush (stream);
-  return 0;
 }
 
 static int
@@ -959,7 +947,7 @@ print_variant_part (struct type *type, int field_num,
        comma_needed, outer_type, outer_offset);
 }
 
-int
+void
 ada_value_print (struct value *val0, struct ui_file *stream,
 		 const struct value_print_options *options)
 {
@@ -999,14 +987,14 @@ ada_value_print (struct value *val0, struct ui_file *stream,
       fprintf_filtered (stream, "(");
       type_print (type, "", stream, -1);
       fprintf_filtered (stream, ") (...?)");
-      return 0;
+      return;
     }
 
   opts = *options;
   opts.deref_ref = 1;
-  return (val_print (type, value_contents_for_printing (val),
-		     value_embedded_offset (val), address,
-		     stream, 0, val, &opts, current_language));
+  val_print (type, value_contents_for_printing (val),
+	     value_embedded_offset (val), address,
+	     stream, 0, val, &opts, current_language);
 }
 
 static void
diff --git a/gdb/ada-varobj.c b/gdb/ada-varobj.c
new file mode 100644
index 0000000..8623876
--- /dev/null
+++ b/gdb/ada-varobj.c
@@ -0,0 +1,888 @@
+/* varobj support for Ada.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "ada-varobj.h"
+#include "ada-lang.h"
+#include "language.h"
+#include "valprint.h"
+
+/* Implementation principle used in this unit:
+
+   For our purposes, the meat of the varobj object is made of two
+   elements: The varobj's (struct) value, and the varobj's (struct)
+   type.  In most situations, the varobj has a non-NULL value, and
+   the type becomes redundant, as it can be directly derived from
+   the value.  In the initial implementation of this unit, most
+   routines would only take a value, and return a value.
+
+   But there are many situations where it is possible for a varobj
+   to have a NULL value.  For instance, if the varobj becomes out of
+   scope.  Or better yet, when the varobj is the child of another
+   NULL pointer varobj.  In that situation, we must rely on the type
+   instead of the value to create the child varobj.
+
+   That's why most functions below work with a (value, type) pair.
+   The value may or may not be NULL.  But the type is always expected
+   to be set.  When the value is NULL, then we work with the type
+   alone, and keep the value NULL.  But when the value is not NULL,
+   then we work using the value, because it provides more information.
+   But we still always set the type as well, even if that type could
+   easily be derived from the value.  The reason behind this is that
+   it allows the code to use the type without having to worry about
+   it being set or not.  It makes the code clearer.  */
+
+/* A convenience function that decodes the VALUE_PTR/TYPE_PTR couple:
+   If there is a value (*VALUE_PTR not NULL), then perform the decoding
+   using it, and compute the associated type from the resulting value.
+   Otherwise, compute a static approximation of *TYPE_PTR, leaving
+   *VALUE_PTR unchanged.
+
+   The results are written in place.  */
+
+static void
+ada_varobj_decode_var (struct value **value_ptr, struct type **type_ptr)
+{
+  if (*value_ptr)
+    {
+      *value_ptr = ada_get_decoded_value (*value_ptr);
+      *type_ptr = ada_check_typedef (value_type (*value_ptr));
+    }
+  else
+    *type_ptr = ada_get_decoded_type (*type_ptr);
+}
+
+/* Return a string containing an image of the given scalar value.
+   VAL is the numeric value, while TYPE is the value's type.
+   This is useful for plain integers, of course, but even more
+   so for enumerated types.
+
+   The result should be deallocated by xfree after use.  */
+
+static char *
+ada_varobj_scalar_image (struct type *type, LONGEST val)
+{
+  struct ui_file *buf = mem_fileopen ();
+  struct cleanup *cleanups = make_cleanup_ui_file_delete (buf);
+  char *result;
+
+  ada_print_scalar (type, val, buf);
+  result = ui_file_xstrdup (buf, NULL);
+  do_cleanups (cleanups);
+
+  return result;
+}
+
+/* Assuming that the (PARENT_VALUE, PARENT_TYPE) pair designates
+   a struct or union, compute the (CHILD_VALUE, CHILD_TYPE) couple
+   corresponding to the field number FIELDNO.  */
+
+static void
+ada_varobj_struct_elt (struct value *parent_value,
+		       struct type *parent_type,
+		       int fieldno,
+		       struct value **child_value,
+		       struct type **child_type)
+{
+  struct value *value = NULL;
+  struct type *type = NULL;
+
+  if (parent_value)
+    {
+      value = value_field (parent_value, fieldno);
+      type = value_type (value);
+    }
+  else
+    type = TYPE_FIELD_TYPE (parent_type, fieldno);
+
+  if (child_value)
+    *child_value = value;
+  if (child_type)
+    *child_type = type;
+}
+
+/* Assuming that the (PARENT_VALUE, PARENT_TYPE) pair is a pointer or
+   reference, return a (CHILD_VALUE, CHILD_TYPE) couple corresponding
+   to the dereferenced value.  */
+
+static void
+ada_varobj_ind (struct value *parent_value,
+		struct type *parent_type,
+		struct value **child_value,
+		struct type **child_type)
+{
+  struct value *value = NULL;
+  struct type *type = NULL;
+
+  if (ada_is_array_descriptor_type (parent_type))
+    {
+      /* This can only happen when PARENT_VALUE is NULL.  Otherwise,
+	 ada_get_decoded_value would have transformed our parent_type
+	 into a simple array pointer type.  */
+      gdb_assert (parent_value == NULL);
+      gdb_assert (TYPE_CODE (parent_type) == TYPE_CODE_TYPEDEF);
+
+      /* Decode parent_type by the equivalent pointer to (decoded)
+	 array.  */
+      while (TYPE_CODE (parent_type) == TYPE_CODE_TYPEDEF)
+	parent_type = TYPE_TARGET_TYPE (parent_type);
+      parent_type = ada_coerce_to_simple_array_type (parent_type);
+      parent_type = lookup_pointer_type (parent_type);
+    }
+
+  /* If parent_value is a null pointer, then only perform static
+     dereferencing.  We cannot dereference null pointers.  */
+  if (parent_value && value_as_address (parent_value) == 0)
+    parent_value = NULL;
+
+  if (parent_value)
+    {
+      value = ada_value_ind (parent_value);
+      type = value_type (value);
+    }
+  else
+    type = TYPE_TARGET_TYPE (parent_type);
+
+  if (child_value)
+    *child_value = value;
+  if (child_type)
+    *child_type = type;
+}
+
+/* Assuming that the (PARENT_VALUE, PARENT_TYPE) pair is a simple
+   array (TYPE_CODE_ARRAY), return the (CHILD_VALUE, CHILD_TYPE)
+   pair corresponding to the element at ELT_INDEX.  */
+
+static void
+ada_varobj_simple_array_elt (struct value *parent_value,
+			     struct type *parent_type,
+			     int elt_index,
+			     struct value **child_value,
+			     struct type **child_type)
+{
+  struct value *value = NULL;
+  struct type *type = NULL;
+
+  if (parent_value)
+    {
+      struct value *index_value =
+	value_from_longest (TYPE_INDEX_TYPE (parent_type), elt_index);
+
+      value = ada_value_subscript (parent_value, 1, &index_value);
+      type = value_type (value);
+    }
+  else
+    type = TYPE_TARGET_TYPE (parent_type);
+
+  if (child_value)
+    *child_value = value;
+  if (child_type)
+    *child_type = type;
+}
+
+/* Given the decoded value and decoded type of a variable object,
+   adjust the value and type to those necessary for getting children
+   of the variable object.
+
+   The replacement is performed in place.  */
+
+static void
+ada_varobj_adjust_for_child_access (struct value **value,
+				    struct type **type)
+{
+   /* Pointers to struct/union types are special: Instead of having
+      one child (the struct), their children are the components of
+      the struct/union type.  We handle this situation by dereferencing
+      the (value, type) couple.  */
+  if (TYPE_CODE (*type) == TYPE_CODE_PTR
+      && (TYPE_CODE (TYPE_TARGET_TYPE (*type)) == TYPE_CODE_STRUCT
+          || TYPE_CODE (TYPE_TARGET_TYPE (*type)) == TYPE_CODE_UNION)
+      && !ada_is_array_descriptor_type (TYPE_TARGET_TYPE (*type))
+      && !ada_is_constrained_packed_array_type (TYPE_TARGET_TYPE (*type)))
+    ada_varobj_ind (*value, *type, value, type);
+}
+
+/* Assuming that the (PARENT_VALUE, PARENT_TYPE) pair is an array
+   (any type of array, "simple" or not), return the number of children
+   that this array contains.  */
+
+static int
+ada_varobj_get_array_number_of_children (struct value *parent_value,
+					 struct type *parent_type)
+{
+  LONGEST lo, hi;
+
+  if (!get_array_bounds (parent_type, &lo, &hi))
+    {
+      /* Could not get the array bounds.  Pretend this is an empty array.  */
+      warning (_("unable to get bounds of array, assuming null array"));
+      return 0;
+    }
+
+  /* Ada allows the upper bound to be less than the lower bound,
+     in order to specify empty arrays...  */
+  if (hi < lo)
+    return 0;
+
+  return hi - lo + 1;
+}
+
+/* Assuming that the (PARENT_VALUE, PARENT_TYPE) pair is a struct or
+   union, return the number of children this struct contains.  */
+
+static int
+ada_varobj_get_struct_number_of_children (struct value *parent_value,
+					  struct type *parent_type)
+{
+  int n_children = 0;
+  int i;
+
+  gdb_assert (TYPE_CODE (parent_type) == TYPE_CODE_STRUCT
+	      || TYPE_CODE (parent_type) == TYPE_CODE_UNION);
+
+  for (i = 0; i < TYPE_NFIELDS (parent_type); i++)
+    {
+      if (ada_is_ignored_field (parent_type, i))
+	continue;
+
+      if (ada_is_wrapper_field (parent_type, i))
+	{
+	  struct value *elt_value;
+	  struct type *elt_type;
+
+	  ada_varobj_struct_elt (parent_value, parent_type, i,
+				 &elt_value, &elt_type);
+	  if (ada_is_tagged_type (elt_type, 0))
+	    {
+	      /* We must not use ada_varobj_get_number_of_children
+		 to determine is element's number of children, because
+		 this function first calls ada_varobj_decode_var,
+		 which "fixes" the element.  For tagged types, this
+		 includes reading the object's tag to determine its
+		 real type, which happens to be the parent_type, and
+		 leads to an infinite loop (because the element gets
+		 fixed back into the parent).  */
+	      n_children += ada_varobj_get_struct_number_of_children
+		(elt_value, elt_type);
+	    }
+	  else
+	    n_children += ada_varobj_get_number_of_children (elt_value, elt_type);
+	}
+      else if (ada_is_variant_part (parent_type, i))
+	{
+	  /* In normal situations, the variant part of the record should
+	     have been "fixed". Or, in other words, it should have been
+	     replaced by the branch of the variant part that is relevant
+	     for our value.  But there are still situations where this
+	     can happen, however (Eg. when our parent is a NULL pointer).
+	     We do not support showing this part of the record for now,
+	     so just pretend this field does not exist.  */
+	}
+      else
+	n_children++;
+    }
+
+  return n_children;
+}
+
+/* Assuming that the (PARENT_VALUE, PARENT_TYPE) pair designates
+   a pointer, return the number of children this pointer has.  */
+
+static int
+ada_varobj_get_ptr_number_of_children (struct value *parent_value,
+				       struct type *parent_type)
+{
+  struct type *child_type = TYPE_TARGET_TYPE (parent_type);
+
+  /* Pointer to functions and to void do not have a child, since
+     you cannot print what they point to.  */
+  if (TYPE_CODE (child_type) == TYPE_CODE_FUNC
+      || TYPE_CODE (child_type) == TYPE_CODE_VOID)
+    return 0;
+
+  /* All other types have 1 child.  */
+  return 1;
+}
+
+/* Return the number of children for the (PARENT_VALUE, PARENT_TYPE)
+   pair.  */
+
+int
+ada_varobj_get_number_of_children (struct value *parent_value,
+				   struct type *parent_type)
+{
+  ada_varobj_decode_var (&parent_value, &parent_type);
+  ada_varobj_adjust_for_child_access (&parent_value, &parent_type);
+
+  /* A typedef to an array descriptor in fact represents a pointer
+     to an unconstrained array.  These types always have one child
+     (the unconstrained array).  */
+  if (ada_is_array_descriptor_type (parent_type)
+      && TYPE_CODE (parent_type) == TYPE_CODE_TYPEDEF)
+    return 1;
+
+  if (TYPE_CODE (parent_type) == TYPE_CODE_ARRAY)
+    return ada_varobj_get_array_number_of_children (parent_value,
+						    parent_type);
+
+  if (TYPE_CODE (parent_type) == TYPE_CODE_STRUCT
+      || TYPE_CODE (parent_type) == TYPE_CODE_UNION)
+    return ada_varobj_get_struct_number_of_children (parent_value,
+						     parent_type);
+
+  if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
+    return ada_varobj_get_ptr_number_of_children (parent_value,
+						  parent_type);
+
+  /* All other types have no child.  */
+  return 0;
+}
+
+/* Describe the child of the (PARENT_VALUE, PARENT_TYPE) pair
+   whose index is CHILD_INDEX:
+
+     - If CHILD_NAME is not NULL, then a copy of the child's name
+       is saved in *CHILD_NAME.  This copy must be deallocated
+       with xfree after use.
+
+     - If CHILD_VALUE is not NULL, then save the child's value
+       in *CHILD_VALUE. Same thing for the child's type with
+       CHILD_TYPE if not NULL.
+
+     - If CHILD_PATH_EXPR is not NULL, then compute the child's
+       path expression.  The resulting string must be deallocated
+       after use with xfree.
+
+       Computing the child's path expression requires the PARENT_PATH_EXPR
+       to be non-NULL.  Otherwise, PARENT_PATH_EXPR may be null if
+       CHILD_PATH_EXPR is NULL.
+
+  PARENT_NAME is the name of the parent, and should never be NULL.  */
+
+static void ada_varobj_describe_child (struct value *parent_value,
+				       struct type *parent_type,
+				       const char *parent_name,
+				       const char *parent_path_expr,
+				       int child_index,
+				       char **child_name,
+				       struct value **child_value,
+				       struct type **child_type,
+				       char **child_path_expr);
+
+/* Same as ada_varobj_describe_child, but limited to struct/union
+   objects.  */
+
+static void
+ada_varobj_describe_struct_child (struct value *parent_value,
+				  struct type *parent_type,
+				  const char *parent_name,
+				  const char *parent_path_expr,
+				  int child_index,
+				  char **child_name,
+				  struct value **child_value,
+				  struct type **child_type,
+				  char **child_path_expr)
+{
+  int fieldno;
+  int childno = 0;
+
+  gdb_assert (TYPE_CODE (parent_type) == TYPE_CODE_STRUCT);
+
+  for (fieldno = 0; fieldno < TYPE_NFIELDS (parent_type); fieldno++)
+    {
+      if (ada_is_ignored_field (parent_type, fieldno))
+	continue;
+
+      if (ada_is_wrapper_field (parent_type, fieldno))
+	{
+	  struct value *elt_value;
+	  struct type *elt_type;
+	  int elt_n_children;
+
+	  ada_varobj_struct_elt (parent_value, parent_type, fieldno,
+				 &elt_value, &elt_type);
+	  if (ada_is_tagged_type (elt_type, 0))
+	    {
+	      /* Same as in ada_varobj_get_struct_number_of_children:
+		 For tagged types, we must be careful to not call
+		 ada_varobj_get_number_of_children, to prevent our
+		 element from being fixed back into the parent.  */
+	      elt_n_children = ada_varobj_get_struct_number_of_children
+		(elt_value, elt_type);
+	    }
+	  else
+	    elt_n_children =
+	      ada_varobj_get_number_of_children (elt_value, elt_type);
+
+	  /* Is the child we're looking for one of the children
+	     of this wrapper field?  */
+	  if (child_index - childno < elt_n_children)
+	    {
+	      if (ada_is_tagged_type (elt_type, 0))
+		{
+		  /* Same as in ada_varobj_get_struct_number_of_children:
+		     For tagged types, we must be careful to not call
+		     ada_varobj_describe_child, to prevent our element
+		     from being fixed back into the parent.  */
+		  ada_varobj_describe_struct_child
+		    (elt_value, elt_type, parent_name, parent_path_expr,
+		     child_index - childno, child_name, child_value,
+		     child_type, child_path_expr);
+		}
+	      else
+		ada_varobj_describe_child (elt_value, elt_type,
+					   parent_name, parent_path_expr,
+					   child_index - childno,
+					   child_name, child_value,
+					   child_type, child_path_expr);
+	      return;
+	    }
+
+	  /* The child we're looking for is beyond this wrapper
+	     field, so skip all its children.  */
+	  childno += elt_n_children;
+	  continue;
+	}
+      else if (ada_is_variant_part (parent_type, fieldno))
+	{
+	  /* In normal situations, the variant part of the record should
+	     have been "fixed". Or, in other words, it should have been
+	     replaced by the branch of the variant part that is relevant
+	     for our value.  But there are still situations where this
+	     can happen, however (Eg. when our parent is a NULL pointer).
+	     We do not support showing this part of the record for now,
+	     so just pretend this field does not exist.  */
+	  continue;
+	}
+
+      if (childno == child_index)
+	{
+	  if (child_name)
+	    {
+	      /* The name of the child is none other than the field's
+		 name, except that we need to strip suffixes from it.
+		 For instance, fields with alignment constraints will
+		 have an __XVA suffix added to them.  */
+	      const char *field_name = TYPE_FIELD_NAME (parent_type, fieldno);
+	      int child_name_len = ada_name_prefix_len (field_name);
+
+	      *child_name = xstrprintf ("%.*s", child_name_len, field_name);
+	    }
+
+	  if (child_value && parent_value)
+	    ada_varobj_struct_elt (parent_value, parent_type, fieldno,
+				   child_value, NULL);
+
+	  if (child_type)
+	    ada_varobj_struct_elt (parent_value, parent_type, fieldno,
+				   NULL, child_type);
+
+	  if (child_path_expr)
+	    {
+	      /* The name of the child is none other than the field's
+		 name, except that we need to strip suffixes from it.
+		 For instance, fields with alignment constraints will
+		 have an __XVA suffix added to them.  */
+	      const char *field_name = TYPE_FIELD_NAME (parent_type, fieldno);
+	      int child_name_len = ada_name_prefix_len (field_name);
+
+	      *child_path_expr =
+		xstrprintf ("(%s).%.*s", parent_path_expr,
+			    child_name_len, field_name);
+	    }
+
+	  return;
+	}
+
+      childno++;
+    }
+
+  /* Something went wrong.  Either we miscounted the number of
+     children, or CHILD_INDEX was too high.  But we should never
+     reach here.  We don't have enough information to recover
+     nicely, so just raise an assertion failure.  */
+  gdb_assert_not_reached ("unexpected code path");
+}
+
+/* Same as ada_varobj_describe_child, but limited to pointer objects.
+
+   Note that CHILD_INDEX is unused in this situation, but still provided
+   for consistency of interface with other routines describing an object's
+   child.  */
+
+static void
+ada_varobj_describe_ptr_child (struct value *parent_value,
+			       struct type *parent_type,
+			       const char *parent_name,
+			       const char *parent_path_expr,
+			       int child_index,
+			       char **child_name,
+			       struct value **child_value,
+			       struct type **child_type,
+			       char **child_path_expr)
+{
+  if (child_name)
+    *child_name = xstrprintf ("%s.all", parent_name);
+
+  if (child_value && parent_value)
+    ada_varobj_ind (parent_value, parent_type, child_value, NULL);
+
+  if (child_type)
+    ada_varobj_ind (parent_value, parent_type, NULL, child_type);
+
+  if (child_path_expr)
+    *child_path_expr = xstrprintf ("(%s).all", parent_path_expr);
+}
+
+/* Same as ada_varobj_describe_child, limited to simple array objects
+   (TYPE_CODE_ARRAY only).
+
+   Assumes that the (PARENT_VALUE, PARENT_TYPE) pair is properly decoded.
+   This is done by ada_varobj_describe_child before calling us.  */
+
+static void
+ada_varobj_describe_simple_array_child (struct value *parent_value,
+					struct type *parent_type,
+					const char *parent_name,
+					const char *parent_path_expr,
+					int child_index,
+					char **child_name,
+					struct value **child_value,
+					struct type **child_type,
+					char **child_path_expr)
+{
+  struct type *index_desc_type;
+  struct type *index_type;
+  int real_index;
+
+  gdb_assert (TYPE_CODE (parent_type) == TYPE_CODE_ARRAY);
+
+  index_desc_type = ada_find_parallel_type (parent_type, "___XA");
+  ada_fixup_array_indexes_type (index_desc_type);
+  if (index_desc_type)
+    index_type = TYPE_FIELD_TYPE (index_desc_type, 0);
+  else
+    index_type = TYPE_INDEX_TYPE (parent_type);
+  real_index = child_index + ada_discrete_type_low_bound (index_type);
+
+  if (child_name)
+    *child_name = ada_varobj_scalar_image (index_type, real_index);
+
+  if (child_value && parent_value)
+    ada_varobj_simple_array_elt (parent_value, parent_type, real_index,
+				 child_value, NULL);
+
+  if (child_type)
+    ada_varobj_simple_array_elt (parent_value, parent_type, real_index,
+				 NULL, child_type);
+
+  if (child_path_expr)
+    {
+      char *index_img = ada_varobj_scalar_image (index_type, real_index);
+      struct cleanup *cleanups = make_cleanup (xfree, index_img);
+
+      /* Enumeration litterals by themselves are potentially ambiguous.
+	 For instance, consider the following package spec:
+
+	    package Pck is
+	       type Color is (Red, Green, Blue, White);
+	       type Blood_Cells is (White, Red);
+	    end Pck;
+
+	 In this case, the litteral "red" for instance, or even
+	 the fully-qualified litteral "pck.red" cannot be resolved
+	 by itself.  Type qualification is needed to determine which
+	 enumeration litterals should be used.
+
+	 The following variable will be used to contain the name
+	 of the array index type when such type qualification is
+	 needed.  */
+      const char *index_type_name = NULL;
+
+      /* If the index type is a range type, find the base type.  */
+      while (TYPE_CODE (index_type) == TYPE_CODE_RANGE)
+	index_type = TYPE_TARGET_TYPE (index_type);
+
+      if (TYPE_CODE (index_type) == TYPE_CODE_ENUM
+	  || TYPE_CODE (index_type) == TYPE_CODE_BOOL)
+	{
+	  index_type_name = ada_type_name (index_type);
+	  if (index_type_name)
+	    index_type_name = ada_decode (index_type_name);
+	}
+
+      if (index_type_name != NULL)
+	*child_path_expr =
+	  xstrprintf ("(%s)(%.*s'(%s))", parent_path_expr,
+		      ada_name_prefix_len (index_type_name),
+		      index_type_name, index_img);
+      else
+	*child_path_expr =
+	  xstrprintf ("(%s)(%s)", parent_path_expr, index_img);
+      do_cleanups (cleanups);
+    }
+}
+
+/* See description at declaration above.  */
+
+static void
+ada_varobj_describe_child (struct value *parent_value,
+			   struct type *parent_type,
+			   const char *parent_name,
+			   const char *parent_path_expr,
+			   int child_index,
+			   char **child_name,
+			   struct value **child_value,
+			   struct type **child_type,
+			   char **child_path_expr)
+{
+  /* We cannot compute the child's path expression without
+     the parent's path expression.  This is a pre-condition
+     for calling this function.  */
+  if (child_path_expr)
+    gdb_assert (parent_path_expr != NULL);
+
+  ada_varobj_decode_var (&parent_value, &parent_type);
+  ada_varobj_adjust_for_child_access (&parent_value, &parent_type);
+
+  if (child_name)
+    *child_name = NULL;
+  if (child_value)
+    *child_value = NULL;
+  if (child_type)
+    *child_type = NULL;
+  if (child_path_expr)
+    *child_path_expr = NULL;
+
+  if (ada_is_array_descriptor_type (parent_type)
+      && TYPE_CODE (parent_type) == TYPE_CODE_TYPEDEF)
+    {
+      ada_varobj_describe_ptr_child (parent_value, parent_type,
+				     parent_name, parent_path_expr,
+				     child_index, child_name,
+				     child_value, child_type,
+				     child_path_expr);
+      return;
+    }
+
+  if (TYPE_CODE (parent_type) == TYPE_CODE_ARRAY)
+    {
+      ada_varobj_describe_simple_array_child
+	(parent_value, parent_type, parent_name, parent_path_expr,
+	 child_index, child_name, child_value, child_type,
+	 child_path_expr);
+      return;
+    }
+
+  if (TYPE_CODE (parent_type) == TYPE_CODE_STRUCT)
+    {
+      ada_varobj_describe_struct_child (parent_value, parent_type,
+					parent_name, parent_path_expr,
+					child_index, child_name,
+					child_value, child_type,
+					child_path_expr);
+      return;
+    }
+
+  if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
+    {
+      ada_varobj_describe_ptr_child (parent_value, parent_type,
+				     parent_name, parent_path_expr,
+				     child_index, child_name,
+				     child_value, child_type,
+				     child_path_expr);
+      return;
+    }
+
+  /* It should never happen.  But rather than crash, report dummy names
+     and return a NULL child_value.  */
+  if (child_name)
+    *child_name = xstrdup ("???");
+}
+
+/* Return the name of the child number CHILD_INDEX of the (PARENT_VALUE,
+   PARENT_TYPE) pair.  PARENT_NAME is the name of the PARENT.
+
+   The result should be deallocated after use with xfree.  */
+
+char *
+ada_varobj_get_name_of_child (struct value *parent_value,
+			      struct type *parent_type,
+			      const char *parent_name, int child_index)
+{
+  char *child_name;
+
+  ada_varobj_describe_child (parent_value, parent_type, parent_name,
+			     NULL, child_index, &child_name, NULL,
+			     NULL, NULL);
+  return child_name;
+}
+
+/* Return the path expression of the child number CHILD_INDEX of
+   the (PARENT_VALUE, PARENT_TYPE) pair.  PARENT_NAME is the name
+   of the parent, and PARENT_PATH_EXPR is the parent's path expression.
+   Both must be non-NULL.
+
+   The result must be deallocated after use with xfree.  */
+
+char *
+ada_varobj_get_path_expr_of_child (struct value *parent_value,
+				   struct type *parent_type,
+				   const char *parent_name,
+				   const char *parent_path_expr,
+				   int child_index)
+{
+  char *child_path_expr;
+
+  ada_varobj_describe_child (parent_value, parent_type, parent_name,
+			     parent_path_expr, child_index, NULL,
+			     NULL, NULL, &child_path_expr);
+
+  return child_path_expr;
+}
+
+/* Return the value of child number CHILD_INDEX of the (PARENT_VALUE,
+   PARENT_TYPE) pair.  PARENT_NAME is the name of the parent.  */
+
+struct value *
+ada_varobj_get_value_of_child (struct value *parent_value,
+			       struct type *parent_type,
+			       const char *parent_name, int child_index)
+{
+  struct value *child_value;
+
+  ada_varobj_describe_child (parent_value, parent_type, parent_name,
+			     NULL, child_index, NULL, &child_value,
+			     NULL, NULL);
+
+  return child_value;
+}
+
+/* Return the type of child number CHILD_INDEX of the (PARENT_VALUE,
+   PARENT_TYPE) pair.  */
+
+struct type *
+ada_varobj_get_type_of_child (struct value *parent_value,
+			      struct type *parent_type,
+			      int child_index)
+{
+  struct type *child_type;
+
+  ada_varobj_describe_child (parent_value, parent_type, NULL, NULL,
+			     child_index, NULL, NULL, &child_type, NULL);
+
+  return child_type;
+}
+
+/* Return a string that contains the image of the given VALUE, using
+   the print options OPTS as the options for formatting the result.
+
+   The resulting string must be deallocated after use with xfree.  */
+
+static char *
+ada_varobj_get_value_image (struct value *value,
+			    struct value_print_options *opts)
+{
+  char *result;
+  struct ui_file *buffer;
+  struct cleanup *old_chain;
+
+  buffer = mem_fileopen ();
+  old_chain = make_cleanup_ui_file_delete (buffer);
+
+  common_val_print (value, buffer, 0, opts, current_language);
+  result = ui_file_xstrdup (buffer, NULL);
+
+  do_cleanups (old_chain);
+  return result;
+}
+
+/* Assuming that the (VALUE, TYPE) pair designates an array varobj,
+   return a string that is suitable for use in the "value" field of
+   the varobj output.  Most of the time, this is the number of elements
+   in the array inside square brackets, but there are situations where
+   it's useful to add more info.
+
+   OPTS are the print options used when formatting the result.
+
+   The result should be deallocated after use using xfree.  */
+
+static char *
+ada_varobj_get_value_of_array_variable (struct value *value,
+					struct type *type,
+					struct value_print_options *opts)
+{
+  char *result;
+  const int numchild = ada_varobj_get_array_number_of_children (value, type);
+
+  /* If we have a string, provide its contents in the "value" field.
+     Otherwise, the only other way to inspect the contents of the string
+     is by looking at the value of each element, as in any other array,
+     which is not very convenient...  */
+  if (value
+      && ada_is_string_type (type)
+      && (opts->format == 0 || opts->format == 's'))
+    {
+      char *str;
+      struct cleanup *old_chain;
+
+      str = ada_varobj_get_value_image (value, opts);
+      old_chain = make_cleanup (xfree, str);
+      result = xstrprintf ("[%d] %s", numchild, str);
+      do_cleanups (old_chain);
+    }
+  else
+    result = xstrprintf ("[%d]", numchild);
+
+  return result;
+}
+
+/* Return a string representation of the (VALUE, TYPE) pair, using
+   the given print options OPTS as our formatting options.  */
+
+char *
+ada_varobj_get_value_of_variable (struct value *value,
+				  struct type *type,
+				  struct value_print_options *opts)
+{
+  char *result = NULL;
+
+  ada_varobj_decode_var (&value, &type);
+
+  switch (TYPE_CODE (type))
+    {
+    case TYPE_CODE_STRUCT:
+    case TYPE_CODE_UNION:
+      result = xstrdup ("{...}");
+      break;
+    case TYPE_CODE_ARRAY:
+      result = ada_varobj_get_value_of_array_variable (value, type, opts);
+      break;
+    default:
+      if (!value)
+	result = xstrdup ("");
+      else
+	result = ada_varobj_get_value_image (value, opts);
+      break;
+    }
+
+  return result;
+}
+
+
diff --git a/gdb/ada-varobj.h b/gdb/ada-varobj.h
new file mode 100644
index 0000000..2ef1a70
--- /dev/null
+++ b/gdb/ada-varobj.h
@@ -0,0 +1,56 @@
+/* varobj support for Ada.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef ADA_VAROBJ_H
+#define ADA_VAROBJ_H
+
+#include "defs.h"
+#include "varobj.h"
+
+struct value;
+struct value_print_options;
+
+extern int ada_varobj_get_number_of_children (struct value *parent_value,
+					      struct type *parent_type);
+
+extern char *ada_varobj_get_name_of_child (struct value *parent_value,
+					   struct type *parent_type,
+					   const char *parent_name,
+					   int child_index);
+
+extern char *ada_varobj_get_path_expr_of_child (struct value *parent_value,
+						struct type *parent_type,
+						const char *parent_name,
+						const char *parent_path_expr,
+						int child_index);
+
+extern struct value *ada_varobj_get_value_of_child (struct value *parent_value,
+						    struct type *parent_type,
+						    const char *parent_name,
+						    int child_index);
+
+extern struct type *ada_varobj_get_type_of_child (struct value *parent_value,
+						  struct type *parent_type,
+						  int child_index);
+
+extern char *ada_varobj_get_value_of_variable
+  (struct value *value, struct type *type,
+   struct value_print_options *opts);
+
+#endif /* ADA_VAROBJ_H */
diff --git a/gdb/agent.c b/gdb/agent.c
new file mode 100644
index 0000000..a8958d7
--- /dev/null
+++ b/gdb/agent.c
@@ -0,0 +1,87 @@
+/* Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "command.h"
+#include "gdbcmd.h"
+#include "target.h"
+#include "agent.h"
+
+/* Enum strings for "set|show agent".  */
+
+static const char can_use_agent_on[] = "on";
+static const char can_use_agent_off[] = "off";
+static const char *can_use_agent_enum[] =
+{
+  can_use_agent_on,
+  can_use_agent_off,
+  NULL,
+};
+
+static const char *can_use_agent = can_use_agent_off;
+
+static void
+show_can_use_agent (struct ui_file *file, int from_tty,
+		    struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file,
+		    _("Debugger's willingness to use agent in inferior "
+		      "as a helper is %s.\n"), value);
+}
+
+static void
+set_can_use_agent (char *args, int from_tty, struct cmd_list_element *c)
+{
+  if (target_use_agent (can_use_agent == can_use_agent_on) == 0)
+    /* Something wrong during setting, set flag to default value.  */
+    can_use_agent = can_use_agent_off;
+}
+
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_agent;
+
+#include "observer.h"
+#include "objfiles.h"
+
+static void
+agent_new_objfile (struct objfile *objfile)
+{
+  if (objfile == NULL || agent_loaded_p ())
+    return;
+
+  agent_look_up_symbols (objfile);
+}
+
+void
+_initialize_agent (void)
+{
+  observer_attach_new_objfile (agent_new_objfile);
+
+  add_setshow_enum_cmd ("agent", class_run,
+			can_use_agent_enum,
+			&can_use_agent, _("\
+Set debugger's willingness to use agent as a helper."), _("\
+Show debugger's willingness to use agent as a helper."), _("\
+If on, GDB will delegate some of the debugging operations to the\n\
+agent, if the target supports it.  This will speed up those\n\
+operations that are supported by the agent.\n\
+If off, GDB will not use agent, even if such is supported by the\n\
+target."),
+			set_can_use_agent,
+			show_can_use_agent,
+			&setlist, &showlist);
+}
diff --git a/gdb/aix-thread.c b/gdb/aix-thread.c
index 0a9fae3..c7d73eb 100644
--- a/gdb/aix-thread.c
+++ b/gdb/aix-thread.c
@@ -970,7 +970,7 @@ aix_thread_detach (struct target_ops *ops, char *args, int from_tty)
 
 static void
 aix_thread_resume (struct target_ops *ops,
-                   ptid_t ptid, int step, enum target_signal sig)
+                   ptid_t ptid, int step, enum gdb_signal sig)
 {
   struct thread_info *thread;
   pthdb_tid_t tid[2];
@@ -999,10 +999,10 @@ aix_thread_resume (struct target_ops *ops,
 
       if (arch64)
 	ptrace64aix (PTT_CONTINUE, tid[0], 1, 
-		     target_signal_to_host (sig), (void *) tid);
+		     gdb_signal_to_host (sig), (void *) tid);
       else
 	ptrace32 (PTT_CONTINUE, tid[0], (int *) 1,
-		  target_signal_to_host (sig), (void *) tid);
+		  gdb_signal_to_host (sig), (void *) tid);
     }
 }
 
@@ -1028,7 +1028,7 @@ aix_thread_wait (struct target_ops *ops,
 
   /* Check whether libpthdebug might be ready to be initialized.  */
   if (!pd_active && status->kind == TARGET_WAITKIND_STOPPED
-      && status->value.sig == TARGET_SIGNAL_TRAP)
+      && status->value.sig == GDB_SIGNAL_TRAP)
     {
       struct regcache *regcache = get_thread_regcache (ptid);
       struct gdbarch *gdbarch = get_regcache_arch (regcache);
@@ -1075,9 +1075,11 @@ supply_fprs (struct regcache *regcache, double *vals)
      floating-point registers.  */
   gdb_assert (ppc_floating_point_unit_p (gdbarch));
 
-  for (regno = 0; regno < ppc_num_fprs; regno++)
-    regcache_raw_supply (regcache, regno + tdep->ppc_fp0_regnum,
-			 (char *) (vals + regno));
+  for (regno = tdep->ppc_fp0_regnum;
+       regno < tdep->ppc_fp0_regnum + ppc_num_fprs;
+       regno++)
+    regcache_raw_supply (regcache, regno,
+			 (char *) (vals + regno - tdep->ppc_fp0_regnum));
 }
 
 /* Predicate to test whether given register number is a "special" register.  */
@@ -1356,7 +1358,8 @@ fill_fprs (const struct regcache *regcache, double *vals)
        regno < tdep->ppc_fp0_regnum + ppc_num_fprs;
        regno++)
     if (REG_VALID == regcache_register_status (regcache, regno))
-      regcache_raw_collect (regcache, regno, vals + regno);
+      regcache_raw_collect (regcache, regno,
+			    vals + regno - tdep->ppc_fp0_regnum);
 }
 
 /* Store the special registers into the specified 64-bit and 32-bit
@@ -1829,6 +1832,8 @@ init_aix_thread_ops (void)
 /* Module startup initialization function, automagically called by
    init.c.  */
 
+void _initialize_aix_thread (void);
+
 void
 _initialize_aix_thread (void)
 {
diff --git a/gdb/alpha-linux-tdep.c b/gdb/alpha-linux-tdep.c
index 3fd9228..aaca985 100644
--- a/gdb/alpha-linux-tdep.c
+++ b/gdb/alpha-linux-tdep.c
@@ -92,7 +92,7 @@ alpha_linux_sigtramp_offset (struct gdbarch *gdbarch, CORE_ADDR pc)
 
 static int
 alpha_linux_pc_in_sigtramp (struct gdbarch *gdbarch,
-			    CORE_ADDR pc, char *func_name)
+			    CORE_ADDR pc, const char *func_name)
 {
   return alpha_linux_sigtramp_offset (gdbarch, pc) >= 0;
 }
diff --git a/gdb/alpha-mdebug-tdep.c b/gdb/alpha-mdebug-tdep.c
index d41f66a..4b46a3c 100644
--- a/gdb/alpha-mdebug-tdep.c
+++ b/gdb/alpha-mdebug-tdep.c
@@ -96,7 +96,7 @@ find_proc_desc (CORE_ADDR pc)
   struct block *b = block_for_pc (pc);
   struct mdebug_extra_func_info *proc_desc = NULL;
   struct symbol *sym = NULL;
-  char *sh_name = NULL;
+  const char *sh_name = NULL;
 
   if (b)
     {
diff --git a/gdb/alpha-osf1-tdep.c b/gdb/alpha-osf1-tdep.c
index bb88f59..f3bddaa 100644
--- a/gdb/alpha-osf1-tdep.c
+++ b/gdb/alpha-osf1-tdep.c
@@ -28,7 +28,7 @@
 
 static int
 alpha_osf1_pc_in_sigtramp (struct gdbarch *gdbarch,
-			   CORE_ADDR pc, char *func_name)
+			   CORE_ADDR pc, const char *func_name)
 {
   return (func_name != NULL && strcmp ("__sigtramp", func_name) == 0);
 }
diff --git a/gdb/alpha-tdep.c b/gdb/alpha-tdep.c
index cebc97a..5d3affa 100644
--- a/gdb/alpha-tdep.c
+++ b/gdb/alpha-tdep.c
@@ -612,7 +612,7 @@ alpha_store_return_value (struct type *valtype, struct regcache *regcache,
 }
 
 static enum return_value_convention
-alpha_return_value (struct gdbarch *gdbarch, struct type *func_type,
+alpha_return_value (struct gdbarch *gdbarch, struct value *function,
 		    struct type *type, struct regcache *regcache,
 		    gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -771,7 +771,7 @@ static const int stq_c_opcode = 0x2f;
    is found, attempt to step through it.  A breakpoint is placed at the end of 
    the sequence.  */
 
-int 
+static int 
 alpha_deal_with_atomic_sequence (struct frame_info *frame)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
@@ -999,7 +999,7 @@ alpha_sigtramp_frame_sniffer (const struct frame_unwind *self,
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   CORE_ADDR pc = get_frame_pc (this_frame);
-  char *name;
+  const char *name;
 
   /* NOTE: cagney/2004-04-30: Do not copy/clone this code.  Instead
      look at tramp-frame.h and other simplier per-architecture
diff --git a/gdb/alpha-tdep.h b/gdb/alpha-tdep.h
index 5d2ac19..ab871b4 100644
--- a/gdb/alpha-tdep.h
+++ b/gdb/alpha-tdep.h
@@ -86,7 +86,8 @@ struct gdbarch_tdep
   /* NOTE: cagney/2004-04-30: Do not copy/clone this code.  Instead
      look at tramp-frame.h and other simplier per-architecture
      sigtramp unwinders.  */
-  int (*pc_in_sigtramp) (struct gdbarch *gdbarch, CORE_ADDR pc, char *name);
+  int (*pc_in_sigtramp) (struct gdbarch *gdbarch, CORE_ADDR pc,
+			 const char *name);
 
   /* If TYPE will be returned in memory, return true.  */
   int (*return_in_memory) (struct type *type);
diff --git a/gdb/alphafbsd-tdep.c b/gdb/alphafbsd-tdep.c
index a11040f..d2c1d94 100644
--- a/gdb/alphafbsd-tdep.c
+++ b/gdb/alphafbsd-tdep.c
@@ -65,7 +65,7 @@ CORE_ADDR alphafbsd_sigtramp_end = 0x11ffffe0;
 
 static int
 alphafbsd_pc_in_sigtramp (struct gdbarch *gdbarch,
-			  CORE_ADDR pc, char *func_name)
+			  CORE_ADDR pc, const char *func_name)
 {
   return (pc >= alphafbsd_sigtramp_start && pc < alphafbsd_sigtramp_end);
 }
diff --git a/gdb/alphanbsd-tdep.c b/gdb/alphanbsd-tdep.c
index 636cf77..bc17385 100644
--- a/gdb/alphanbsd-tdep.c
+++ b/gdb/alphanbsd-tdep.c
@@ -241,7 +241,7 @@ alphanbsd_sigtramp_offset (struct gdbarch *gdbarch, CORE_ADDR pc)
 
 static int
 alphanbsd_pc_in_sigtramp (struct gdbarch *gdbarch,
-		 	  CORE_ADDR pc, char *func_name)
+		 	  CORE_ADDR pc, const char *func_name)
 {
   return (nbsd_pc_in_sigtramp (pc, func_name)
 	  || alphanbsd_sigtramp_offset (gdbarch, pc) >= 0);
diff --git a/gdb/alphaobsd-tdep.c b/gdb/alphaobsd-tdep.c
index 79940a8..4ed6112 100644
--- a/gdb/alphaobsd-tdep.c
+++ b/gdb/alphaobsd-tdep.c
@@ -47,7 +47,7 @@ alphaobsd_sigtramp_offset (struct gdbarch *gdbarch, CORE_ADDR pc)
 
 static int
 alphaobsd_pc_in_sigtramp (struct gdbarch *gdbarch,
-			  CORE_ADDR pc, char *name)
+			  CORE_ADDR pc, const char *name)
 {
   CORE_ADDR start_pc = (pc & ~(alphaobsd_page_size - 1));
   unsigned insn;
diff --git a/gdb/amd64-darwin-tdep.c b/gdb/amd64-darwin-tdep.c
index 6242ada..9fcee3f 100644
--- a/gdb/amd64-darwin-tdep.c
+++ b/gdb/amd64-darwin-tdep.c
@@ -84,7 +84,6 @@ amd64_darwin_sigcontext_addr (struct frame_info *this_frame)
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   CORE_ADDR rbx;
-  CORE_ADDR si;
   gdb_byte buf[8];
 
   /* A pointer to the ucontext is passed as the fourth argument
@@ -115,11 +114,14 @@ x86_darwin_init_abi_64 (struct gdbarch_info info, struct gdbarch *gdbarch)
   tdep->sc_reg_offset = amd64_darwin_thread_state_reg_offset;
   tdep->sc_num_regs = amd64_darwin_thread_state_num_regs;
 
-  tdep->jb_pc_offset = 148;
+  tdep->jb_pc_offset = 56;
 
   set_solib_ops (gdbarch, &darwin_so_ops);
 }
 
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_amd64_darwin_tdep;
+
 void
 _initialize_amd64_darwin_tdep (void)
 {
diff --git a/gdb/amd64-dicos-tdep.c b/gdb/amd64-dicos-tdep.c
index a262284..a983bb2 100644
--- a/gdb/amd64-dicos-tdep.c
+++ b/gdb/amd64-dicos-tdep.c
@@ -23,24 +23,6 @@
 #include "amd64-tdep.h"
 #include "dicos-tdep.h"
 
-static CORE_ADDR
-amd64_dicos_push_dummy_code (struct gdbarch *gdbarch,
-			     CORE_ADDR sp, CORE_ADDR funaddr,
-			     struct value **args, int nargs,
-			     struct type *value_type,
-			     CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
-			     struct regcache *regcache)
-{
-  int bplen;
-  CORE_ADDR bppc = sp;
-
-  gdbarch_breakpoint_from_pc (gdbarch, &bppc, &bplen);
-  *bp_addr = sp - bplen;
-  *real_pc = funaddr;
-
-  return *bp_addr;
-}
-
 static void
 amd64_dicos_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
@@ -49,8 +31,6 @@ amd64_dicos_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   amd64_init_abi (info, gdbarch);
 
   dicos_init_abi (gdbarch);
-
-  set_gdbarch_push_dummy_code (gdbarch, amd64_dicos_push_dummy_code);
 }
 
 static enum gdb_osabi
diff --git a/gdb/amd64-linux-nat.c b/gdb/amd64-linux-nat.c
index 0df06fc..01982ac 100644
--- a/gdb/amd64-linux-nat.c
+++ b/gdb/amd64-linux-nat.c
@@ -34,6 +34,7 @@
 #include <sys/debugreg.h>
 #include <sys/syscall.h>
 #include <sys/procfs.h>
+#include <sys/user.h>
 #include <asm/prctl.h>
 /* FIXME ezannoni-2003-07-09: we need <sys/reg.h> to be included after
    <asm/ptrace.h> because the latter redefines FS and GS for no apparent
@@ -63,6 +64,14 @@
 #define PTRACE_SETREGSET	0x4205
 #endif
 
+/* Per-thread arch-specific data we want to keep.  */
+
+struct arch_lwp_info
+{
+  /* Non-zero if our copy differs from what's recorded in the thread.  */
+  int debug_registers_changed;
+};
+
 /* Does the current host support PTRACE_GETREGSET?  */
 static int have_ptrace_getregset = -1;
 
@@ -264,8 +273,6 @@ amd64_linux_store_inferior_registers (struct target_ops *ops,
 

 /* Support for debug registers.  */
 
-static unsigned long amd64_linux_dr[DR_CONTROL + 1];
-
 static unsigned long
 amd64_linux_dr_get (ptid_t ptid, int regnum)
 {
@@ -303,75 +310,129 @@ amd64_linux_dr_set (ptid_t ptid, int regnum, unsigned long value)
     perror_with_name (_("Couldn't write debug register"));
 }
 
-/* Set DR_CONTROL to ADDR in all LWPs of LWP_LIST.  */
+/* Return the inferior's debug register REGNUM.  */
 
-static void
-amd64_linux_dr_set_control (unsigned long control)
+static CORE_ADDR
+amd64_linux_dr_get_addr (int regnum)
 {
-  struct lwp_info *lp;
+  /* DR6 and DR7 are retrieved with some other way.  */
+  gdb_assert (DR_FIRSTADDR <= regnum && regnum <= DR_LASTADDR);
 
-  amd64_linux_dr[DR_CONTROL] = control;
-  ALL_LWPS (lp)
-    amd64_linux_dr_set (lp->ptid, DR_CONTROL, control);
+  return amd64_linux_dr_get (inferior_ptid, regnum);
 }
 
-/* Set address REGNUM (zero based) to ADDR in all LWPs of LWP_LIST.  */
+/* Return the inferior's DR7 debug control register.  */
 
-static void
-amd64_linux_dr_set_addr (int regnum, CORE_ADDR addr)
+static unsigned long
+amd64_linux_dr_get_control (void)
 {
-  struct lwp_info *lp;
+  return amd64_linux_dr_get (inferior_ptid, DR_CONTROL);
+}
 
-  gdb_assert (regnum >= 0 && regnum <= DR_LASTADDR - DR_FIRSTADDR);
+/* Get DR_STATUS from only the one LWP of INFERIOR_PTID.  */
 
-  amd64_linux_dr[DR_FIRSTADDR + regnum] = addr;
-  ALL_LWPS (lp)
-    amd64_linux_dr_set (lp->ptid, DR_FIRSTADDR + regnum, addr);
+static unsigned long
+amd64_linux_dr_get_status (void)
+{
+  return amd64_linux_dr_get (inferior_ptid, DR_STATUS);
+}
+
+/* Callback for linux_nat_iterate_watchpoint_lwps.  Update the debug registers
+   of LWP.  */
+
+static int
+update_debug_registers_callback (struct lwp_info *lwp, void *arg)
+{
+  if (lwp->arch_private == NULL)
+    lwp->arch_private = XCNEW (struct arch_lwp_info);
+
+  /* The actual update is done later just before resuming the lwp, we
+     just mark that the registers need updating.  */
+  lwp->arch_private->debug_registers_changed = 1;
+
+  /* If the lwp isn't stopped, force it to momentarily pause, so we
+     can update its debug registers.  */
+  if (!lwp->stopped)
+    linux_stop_lwp (lwp);
+
+  /* Continue the iteration.  */
+  return 0;
 }
 
-/* Set address REGNUM (zero based) to zero in all LWPs of LWP_LIST.  */
+/* Set DR_CONTROL to CONTROL in all LWPs of the current inferior.  */
 
 static void
-amd64_linux_dr_reset_addr (int regnum)
+amd64_linux_dr_set_control (unsigned long control)
 {
-  amd64_linux_dr_set_addr (regnum, 0);
+  linux_nat_iterate_watchpoint_lwps (update_debug_registers_callback, NULL);
 }
 
-/* Get DR_STATUS from only the one LWP of INFERIOR_PTID.  */
+/* Set address REGNUM (zero based) to ADDR in all LWPs of the current
+   inferior.  */
 
-static unsigned long
-amd64_linux_dr_get_status (void)
+static void
+amd64_linux_dr_set_addr (int regnum, CORE_ADDR addr)
 {
-  return amd64_linux_dr_get (inferior_ptid, DR_STATUS);
+  gdb_assert (regnum >= 0 && regnum <= DR_LASTADDR - DR_FIRSTADDR);
+
+  linux_nat_iterate_watchpoint_lwps (update_debug_registers_callback, NULL);
 }
 
-/* Unset MASK bits in DR_STATUS in all LWPs of LWP_LIST.  */
+/* Called when resuming a thread.
+   If the debug regs have changed, update the thread's copies.  */
 
 static void
-amd64_linux_dr_unset_status (unsigned long mask)
+amd64_linux_prepare_to_resume (struct lwp_info *lwp)
 {
-  struct lwp_info *lp;
+  int clear_status = 0;
+
+  /* NULL means this is the main thread still going through the shell,
+     or, no watchpoint has been set yet.  In that case, there's
+     nothing to do.  */
+  if (lwp->arch_private == NULL)
+    return;
 
-  ALL_LWPS (lp)
+  if (lwp->arch_private->debug_registers_changed)
     {
-      unsigned long value;
-      
-      value = amd64_linux_dr_get (lp->ptid, DR_STATUS);
-      value &= ~mask;
-      amd64_linux_dr_set (lp->ptid, DR_STATUS, value);
+      struct i386_debug_reg_state *state = i386_debug_reg_state ();
+      int i;
+
+      /* On Linux kernel before 2.6.33 commit
+	 72f674d203cd230426437cdcf7dd6f681dad8b0d
+	 if you enable a breakpoint by the DR_CONTROL bits you need to have
+	 already written the corresponding DR_FIRSTADDR...DR_LASTADDR registers.
+
+	 Ensure DR_CONTROL gets written as the very last register here.  */
+
+      for (i = DR_FIRSTADDR; i <= DR_LASTADDR; i++)
+	if (state->dr_ref_count[i] > 0)
+	  {
+	    amd64_linux_dr_set (lwp->ptid, i, state->dr_mirror[i]);
+
+	    /* If we're setting a watchpoint, any change the inferior
+	       had done itself to the debug registers needs to be
+	       discarded, otherwise, i386_stopped_data_address can get
+	       confused.  */
+	    clear_status = 1;
+	  }
+
+      amd64_linux_dr_set (lwp->ptid, DR_CONTROL, state->dr_control_mirror);
+
+      lwp->arch_private->debug_registers_changed = 0;
     }
-}
 
+  if (clear_status || lwp->stopped_by_watchpoint)
+    amd64_linux_dr_set (lwp->ptid, DR_STATUS, 0);
+}
 
 static void
-amd64_linux_new_thread (ptid_t ptid)
+amd64_linux_new_thread (struct lwp_info *lp)
 {
-  int i;
+  struct arch_lwp_info *info = XCNEW (struct arch_lwp_info);
 
-  for (i = DR_FIRSTADDR; i <= DR_LASTADDR; i++)
-    amd64_linux_dr_set (ptid, i, amd64_linux_dr[i]);
+  info->debug_registers_changed = 1;
 
-  amd64_linux_dr_set (ptid, DR_CONTROL, amd64_linux_dr[DR_CONTROL]);
+  lp->arch_private = info;
 }
 

 
@@ -382,7 +443,7 @@ ps_err_e
 ps_get_thread_area (const struct ps_prochandle *ph,
                     lwpid_t lwpid, int idx, void **base)
 {
-  if (gdbarch_ptr_bit (target_gdbarch) == 32)
+  if (gdbarch_bfd_arch_info (target_gdbarch)->bits_per_word == 32)
     {
       /* The full structure is found in <asm-i386/ldt.h>.  The second
 	 integer is the LDT's base_address and that is used to locate
@@ -419,10 +480,39 @@ ps_get_thread_area (const struct ps_prochandle *ph,
       switch (idx)
 	{
 	case FS:
+#ifdef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE
+	    {
+	      /* PTRACE_ARCH_PRCTL is obsolete since 2.6.25, where the
+		 fs_base and gs_base fields of user_regs_struct can be
+		 used directly.  */
+	      unsigned long fs;
+	      errno = 0;
+	      fs = ptrace (PTRACE_PEEKUSER, lwpid,
+			   offsetof (struct user_regs_struct, fs_base), 0);
+	      if (errno == 0)
+		{
+		  *base = (void *) fs;
+		  return PS_OK;
+		}
+	    }
+#endif
 	  if (ptrace (PTRACE_ARCH_PRCTL, lwpid, base, ARCH_GET_FS) == 0)
 	    return PS_OK;
 	  break;
 	case GS:
+#ifdef HAVE_STRUCT_USER_REGS_STRUCT_GS_BASE
+	    {
+	      unsigned long gs;
+	      errno = 0;
+	      gs = ptrace (PTRACE_PEEKUSER, lwpid,
+			   offsetof (struct user_regs_struct, gs_base), 0);
+	      if (errno == 0)
+		{
+		  *base = (void *) gs;
+		  return PS_OK;
+		}
+	    }
+#endif
 	  if (ptrace (PTRACE_ARCH_PRCTL, lwpid, base, ARCH_GET_GS) == 0)
 	    return PS_OK;
 	  break;
@@ -531,6 +621,71 @@ typedef struct compat_siginfo
   } _sifields;
 } compat_siginfo_t;
 
+/* For x32, clock_t in _sigchld is 64bit aligned at 4 bytes.  */
+typedef struct compat_x32_clock
+{
+  int lower;
+  int upper;
+} compat_x32_clock_t;
+
+typedef struct compat_x32_siginfo
+{
+  int si_signo;
+  int si_errno;
+  int si_code;
+
+  union
+  {
+    int _pad[((128 / sizeof (int)) - 3)];
+
+    /* kill() */
+    struct
+    {
+      unsigned int _pid;
+      unsigned int _uid;
+    } _kill;
+
+    /* POSIX.1b timers */
+    struct
+    {
+      compat_timer_t _tid;
+      int _overrun;
+      compat_sigval_t _sigval;
+    } _timer;
+
+    /* POSIX.1b signals */
+    struct
+    {
+      unsigned int _pid;
+      unsigned int _uid;
+      compat_sigval_t _sigval;
+    } _rt;
+
+    /* SIGCHLD */
+    struct
+    {
+      unsigned int _pid;
+      unsigned int _uid;
+      int _status;
+      compat_x32_clock_t _utime;
+      compat_x32_clock_t _stime;
+    } _sigchld;
+
+    /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
+    struct
+    {
+      unsigned int _addr;
+    } _sigfault;
+
+    /* SIGPOLL */
+    struct
+    {
+      int _band;
+      int _fd;
+    } _sigpoll;
+  } _sifields;
+} compat_x32_siginfo_t;
+
 #define cpt_si_pid _sifields._kill._pid
 #define cpt_si_uid _sifields._kill._uid
 #define cpt_si_timerid _sifields._timer._tid
@@ -664,6 +819,124 @@ siginfo_from_compat_siginfo (siginfo_t *to, compat_siginfo_t *from)
     }
 }
 
+static void
+compat_x32_siginfo_from_siginfo (compat_x32_siginfo_t *to,
+				 siginfo_t *from)
+{
+  memset (to, 0, sizeof (*to));
+
+  to->si_signo = from->si_signo;
+  to->si_errno = from->si_errno;
+  to->si_code = from->si_code;
+
+  if (to->si_code == SI_TIMER)
+    {
+      to->cpt_si_timerid = from->si_timerid;
+      to->cpt_si_overrun = from->si_overrun;
+      to->cpt_si_ptr = (intptr_t) from->si_ptr;
+    }
+  else if (to->si_code == SI_USER)
+    {
+      to->cpt_si_pid = from->si_pid;
+      to->cpt_si_uid = from->si_uid;
+    }
+  else if (to->si_code < 0)
+    {
+      to->cpt_si_pid = from->si_pid;
+      to->cpt_si_uid = from->si_uid;
+      to->cpt_si_ptr = (intptr_t) from->si_ptr;
+    }
+  else
+    {
+      switch (to->si_signo)
+	{
+	case SIGCHLD:
+	  to->cpt_si_pid = from->si_pid;
+	  to->cpt_si_uid = from->si_uid;
+	  to->cpt_si_status = from->si_status;
+	  memcpy (&to->cpt_si_utime, &from->si_utime,
+		  sizeof (to->cpt_si_utime));
+	  memcpy (&to->cpt_si_stime, &from->si_stime,
+		  sizeof (to->cpt_si_stime));
+	  break;
+	case SIGILL:
+	case SIGFPE:
+	case SIGSEGV:
+	case SIGBUS:
+	  to->cpt_si_addr = (intptr_t) from->si_addr;
+	  break;
+	case SIGPOLL:
+	  to->cpt_si_band = from->si_band;
+	  to->cpt_si_fd = from->si_fd;
+	  break;
+	default:
+	  to->cpt_si_pid = from->si_pid;
+	  to->cpt_si_uid = from->si_uid;
+	  to->cpt_si_ptr = (intptr_t) from->si_ptr;
+	  break;
+	}
+    }
+}
+
+static void
+siginfo_from_compat_x32_siginfo (siginfo_t *to,
+				 compat_x32_siginfo_t *from)
+{
+  memset (to, 0, sizeof (*to));
+
+  to->si_signo = from->si_signo;
+  to->si_errno = from->si_errno;
+  to->si_code = from->si_code;
+
+  if (to->si_code == SI_TIMER)
+    {
+      to->si_timerid = from->cpt_si_timerid;
+      to->si_overrun = from->cpt_si_overrun;
+      to->si_ptr = (void *) (intptr_t) from->cpt_si_ptr;
+    }
+  else if (to->si_code == SI_USER)
+    {
+      to->si_pid = from->cpt_si_pid;
+      to->si_uid = from->cpt_si_uid;
+    }
+  if (to->si_code < 0)
+    {
+      to->si_pid = from->cpt_si_pid;
+      to->si_uid = from->cpt_si_uid;
+      to->si_ptr = (void *) (intptr_t) from->cpt_si_ptr;
+    }
+  else
+    {
+      switch (to->si_signo)
+	{
+	case SIGCHLD:
+	  to->si_pid = from->cpt_si_pid;
+	  to->si_uid = from->cpt_si_uid;
+	  to->si_status = from->cpt_si_status;
+	  memcpy (&to->si_utime, &from->cpt_si_utime,
+		  sizeof (to->si_utime));
+	  memcpy (&to->si_stime, &from->cpt_si_stime,
+		  sizeof (to->si_stime));
+	  break;
+	case SIGILL:
+	case SIGFPE:
+	case SIGSEGV:
+	case SIGBUS:
+	  to->si_addr = (void *) (intptr_t) from->cpt_si_addr;
+	  break;
+	case SIGPOLL:
+	  to->si_band = from->cpt_si_band;
+	  to->si_fd = from->cpt_si_fd;
+	  break;
+	default:
+	  to->si_pid = from->cpt_si_pid;
+	  to->si_uid = from->cpt_si_uid;
+	  to->si_ptr = (void* ) (intptr_t) from->cpt_si_ptr;
+	  break;
+	}
+    }
+}
+
 /* Convert a native/host siginfo object, into/from the siginfo in the
    layout of the inferiors' architecture.  Returns true if any
    conversion was done; false otherwise.  If DIRECTION is 1, then copy
@@ -671,13 +944,15 @@ siginfo_from_compat_siginfo (siginfo_t *to, compat_siginfo_t *from)
    INF.  */
 
 static int
-amd64_linux_siginfo_fixup (struct siginfo *native, gdb_byte *inf, int direction)
+amd64_linux_siginfo_fixup (siginfo_t *native, gdb_byte *inf, int direction)
 {
+  struct gdbarch *gdbarch = get_frame_arch (get_current_frame ());
+
   /* Is the inferior 32-bit?  If so, then do fixup the siginfo
      object.  */
-  if (gdbarch_addr_bit (get_frame_arch (get_current_frame ())) == 32)
+  if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
     {
-      gdb_assert (sizeof (struct siginfo) == sizeof (compat_siginfo_t));
+      gdb_assert (sizeof (siginfo_t) == sizeof (compat_siginfo_t));
 
       if (direction == 0)
 	compat_siginfo_from_siginfo ((struct compat_siginfo *) inf, native);
@@ -686,6 +961,20 @@ amd64_linux_siginfo_fixup (struct siginfo *native, gdb_byte *inf, int direction)
 
       return 1;
     }
+  /* No fixup for native x32 GDB.  */
+  else if (gdbarch_addr_bit (gdbarch) == 32 && sizeof (void *) == 8)
+    {
+      gdb_assert (sizeof (siginfo_t) == sizeof (compat_x32_siginfo_t));
+
+      if (direction == 0)
+	compat_x32_siginfo_from_siginfo ((struct compat_x32_siginfo *) inf,
+					 native);
+      else
+	siginfo_from_compat_x32_siginfo (native,
+					 (struct compat_x32_siginfo *) inf);
+
+      return 1;
+    }
   else
     return 0;
 }
@@ -695,16 +984,23 @@ amd64_linux_siginfo_fixup (struct siginfo *native, gdb_byte *inf, int direction)
    Value of CS segment register:
      1. 64bit process: 0x33.
      2. 32bit process: 0x23.
+
+   Value of DS segment register:
+     1. LP64 process: 0x0.
+     2. X32 process: 0x2b.
  */
 
 #define AMD64_LINUX_USER64_CS	0x33
+#define AMD64_LINUX_X32_DS	0x2b
 
 static const struct target_desc *
 amd64_linux_read_description (struct target_ops *ops)
 {
   unsigned long cs;
+  unsigned long ds;
   int tid;
   int is_64bit;
+  int is_x32;
   static uint64_t xcr0;
 
   /* GNU/Linux LWP ID's are process ID's.  */
@@ -721,6 +1017,18 @@ amd64_linux_read_description (struct target_ops *ops)
 
   is_64bit = cs == AMD64_LINUX_USER64_CS;
 
+  /* Get DS register.  */
+  errno = 0;
+  ds = ptrace (PTRACE_PEEKUSER, tid,
+	       offsetof (struct user_regs_struct, ds), 0);
+  if (errno != 0)
+    perror_with_name (_("Couldn't get DS register"));
+
+  is_x32 = ds == AMD64_LINUX_X32_DS;
+
+  if (sizeof (void *) == 4 && is_64bit && !is_x32)
+    error (_("Can't debug 64-bit process with 32-bit GDB"));
+
   if (have_ptrace_getregset == -1)
     {
       uint64_t xstateregs[(I386_XSTATE_SSE_SIZE / sizeof (uint64_t))];
@@ -748,14 +1056,24 @@ amd64_linux_read_description (struct target_ops *ops)
       && (xcr0 & I386_XSTATE_AVX_MASK) == I386_XSTATE_AVX_MASK)
     {
       if (is_64bit)
-	return tdesc_amd64_avx_linux;
+	{
+	  if (is_x32)
+	    return tdesc_x32_avx_linux;
+	  else
+	    return tdesc_amd64_avx_linux;
+	}
       else
 	return tdesc_i386_avx_linux;
     }
   else
     {
       if (is_64bit)
-	return tdesc_amd64_linux;
+	{
+	  if (is_x32)
+	    return tdesc_x32_linux;
+	  else
+	    return tdesc_amd64_linux;
+	}
       else
 	return tdesc_i386_linux;
     }
@@ -784,9 +1102,9 @@ _initialize_amd64_linux_nat (void)
 
   i386_dr_low.set_control = amd64_linux_dr_set_control;
   i386_dr_low.set_addr = amd64_linux_dr_set_addr;
-  i386_dr_low.reset_addr = amd64_linux_dr_reset_addr;
+  i386_dr_low.get_addr = amd64_linux_dr_get_addr;
   i386_dr_low.get_status = amd64_linux_dr_get_status;
-  i386_dr_low.unset_status = amd64_linux_dr_unset_status;
+  i386_dr_low.get_control = amd64_linux_dr_get_control;
   i386_set_debug_register_length (8);
 
   /* Override the GNU/Linux inferior startup hook.  */
@@ -803,4 +1121,5 @@ _initialize_amd64_linux_nat (void)
   linux_nat_add_target (t);
   linux_nat_set_new_thread (t, amd64_linux_new_thread);
   linux_nat_set_siginfo_fixup (t, amd64_linux_siginfo_fixup);
+  linux_nat_set_prepare_to_resume (t, amd64_linux_prepare_to_resume);
 }
diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c
index ca9ade6..d919216 100644
--- a/gdb/amd64-linux-tdep.c
+++ b/gdb/amd64-linux-tdep.c
@@ -38,9 +38,12 @@
 #include "amd64-tdep.h"
 #include "solib-svr4.h"
 #include "xml-syscall.h"
+#include "glibc-tdep.h"
 
 #include "features/i386/amd64-linux.c"
 #include "features/i386/amd64-avx-linux.c"
+#include "features/i386/x32-linux.c"
+#include "features/i386/x32-avx-linux.c"
 
 /* The syscall's XML filename for i386.  */
 #define XML_SYSCALL_FILENAME_AMD64 "syscalls/amd64-linux.xml"
@@ -104,7 +107,7 @@ int amd64_linux_gregset_reg_offset[] =
 #define LINUX_SIGTRAMP_INSN1	0x0f	/* syscall */
 #define LINUX_SIGTRAMP_OFFSET1	7
 
-static const gdb_byte linux_sigtramp_code[] =
+static const gdb_byte amd64_linux_sigtramp_code[] =
 {
   /* mov $__NR_rt_sigreturn, %rax */
   LINUX_SIGTRAMP_INSN0, 0xc7, 0xc0, 0x0f, 0x00, 0x00, 0x00,
@@ -112,7 +115,15 @@ static const gdb_byte linux_sigtramp_code[] =
   LINUX_SIGTRAMP_INSN1, 0x05
 };
 
-#define LINUX_SIGTRAMP_LEN (sizeof linux_sigtramp_code)
+static const gdb_byte amd64_x32_linux_sigtramp_code[] =
+{
+  /* mov $__NR_rt_sigreturn, %rax.  */
+  LINUX_SIGTRAMP_INSN0, 0xc7, 0xc0, 0x01, 0x02, 0x00, 0x40,
+  /* syscall */
+  LINUX_SIGTRAMP_INSN1, 0x05
+};
+
+#define LINUX_SIGTRAMP_LEN (sizeof amd64_linux_sigtramp_code)
 
 /* If PC is in a sigtramp routine, return the address of the start of
    the routine.  Otherwise, return 0.  */
@@ -120,6 +131,8 @@ static const gdb_byte linux_sigtramp_code[] =
 static CORE_ADDR
 amd64_linux_sigtramp_start (struct frame_info *this_frame)
 {
+  struct gdbarch *gdbarch;
+  const gdb_byte *sigtramp_code;
   CORE_ADDR pc = get_frame_pc (this_frame);
   gdb_byte buf[LINUX_SIGTRAMP_LEN];
 
@@ -143,7 +156,12 @@ amd64_linux_sigtramp_start (struct frame_info *this_frame)
 	return 0;
     }
 
-  if (memcmp (buf, linux_sigtramp_code, LINUX_SIGTRAMP_LEN) != 0)
+  gdbarch = get_frame_arch (this_frame);
+  if (gdbarch_ptr_bit (gdbarch) == 32)
+    sigtramp_code = amd64_x32_linux_sigtramp_code;
+  else
+    sigtramp_code = amd64_linux_sigtramp_code;
+  if (memcmp (buf, sigtramp_code, LINUX_SIGTRAMP_LEN) != 0)
     return 0;
 
   return pc;
@@ -156,7 +174,7 @@ static int
 amd64_linux_sigtramp_p (struct frame_info *this_frame)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
-  char *name;
+  const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
 
@@ -1225,10 +1243,10 @@ amd64_linux_syscall_record (struct regcache *regcache)
 #define AMD64_LINUX_xstate     512
 #define AMD64_LINUX_frame_size 560
 
-int
+static int
 amd64_linux_record_signal (struct gdbarch *gdbarch,
                            struct regcache *regcache,
-                           enum target_signal signal)
+                           enum gdb_signal signal)
 {
   ULONGEST rsp;
 
@@ -1272,48 +1290,25 @@ amd64_linux_core_read_description (struct gdbarch *gdbarch,
   switch ((xcr0 & I386_XSTATE_AVX_MASK))
     {
     case I386_XSTATE_AVX_MASK:
-      return tdesc_amd64_avx_linux;
+      if (gdbarch_ptr_bit (gdbarch) == 32)
+	return tdesc_x32_avx_linux;
+      else
+	return tdesc_amd64_avx_linux;
     default:
-      return tdesc_amd64_linux;
+      if (gdbarch_ptr_bit (gdbarch) == 32)
+	return tdesc_x32_linux;
+      else
+	return tdesc_amd64_linux;
     }
 }
 
 static void
-amd64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+amd64_linux_init_abi_common(struct gdbarch_info info, struct gdbarch *gdbarch)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-  const struct target_desc *tdesc = info.target_desc;
-  struct tdesc_arch_data *tdesc_data = (void *) info.tdep_info;
-  const struct tdesc_feature *feature;
-  int valid_p;
-
-  gdb_assert (tdesc_data);
 
   linux_init_abi (info, gdbarch);
 
-  tdep->gregset_reg_offset = amd64_linux_gregset_reg_offset;
-  tdep->gregset_num_regs = ARRAY_SIZE (amd64_linux_gregset_reg_offset);
-  tdep->sizeof_gregset = 27 * 8;
-
-  amd64_init_abi (info, gdbarch);
-
-  /* Reserve a number for orig_rax.  */
-  set_gdbarch_num_regs (gdbarch, AMD64_LINUX_NUM_REGS);
-
-  if (! tdesc_has_registers (tdesc))
-    tdesc = tdesc_amd64_linux;
-  tdep->tdesc = tdesc;
-
-  feature = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.linux");
-  if (feature == NULL)
-    return;
-
-  valid_p = tdesc_numbered_register (feature, tdesc_data,
-				     AMD64_LINUX_ORIG_RAX_REGNUM,
-				     "orig_rax");
-  if (!valid_p)
-    return;
-
   tdep->sigtramp_p = amd64_linux_sigtramp_p;
   tdep->sigcontext_addr = amd64_linux_sigcontext_addr;
   tdep->sc_reg_offset = amd64_linux_sc_reg_offset;
@@ -1321,10 +1316,6 @@ amd64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 
   tdep->xsave_xcr0_offset = I386_LINUX_XSAVE_XCR0_OFFSET;
 
-  /* GNU/Linux uses SVR4-style shared libraries.  */
-  set_solib_svr4_fetch_link_map_offsets
-    (gdbarch, svr4_lp64_fetch_link_map_offsets);
-
   /* Add the %orig_rax register used for syscall restarting.  */
   set_gdbarch_write_pc (gdbarch, amd64_linux_write_pc);
 
@@ -1342,6 +1333,9 @@ amd64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   /* GNU/Linux uses SVR4-style shared libraries.  */
   set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
 
+  /* GNU/Linux uses the dynamic linker included in the GNU C Library.  */
+  set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver);
+
   /* Install supported register note sections.  */
   set_gdbarch_core_regset_sections (gdbarch, amd64_linux_regset_sections);
 
@@ -1531,6 +1525,88 @@ amd64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 
   tdep->i386_syscall_record = amd64_linux_syscall_record;
 }
+
+static void
+amd64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  const struct target_desc *tdesc = info.target_desc;
+  struct tdesc_arch_data *tdesc_data = (void *) info.tdep_info;
+  const struct tdesc_feature *feature;
+  int valid_p;
+
+  gdb_assert (tdesc_data);
+
+  tdep->gregset_reg_offset = amd64_linux_gregset_reg_offset;
+  tdep->gregset_num_regs = ARRAY_SIZE (amd64_linux_gregset_reg_offset);
+  tdep->sizeof_gregset = 27 * 8;
+
+  amd64_init_abi (info, gdbarch);
+
+  /* Reserve a number for orig_rax.  */
+  set_gdbarch_num_regs (gdbarch, AMD64_LINUX_NUM_REGS);
+
+  if (! tdesc_has_registers (tdesc))
+    tdesc = tdesc_amd64_linux;
+  tdep->tdesc = tdesc;
+
+  feature = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.linux");
+  if (feature == NULL)
+    return;
+
+  valid_p = tdesc_numbered_register (feature, tdesc_data,
+				     AMD64_LINUX_ORIG_RAX_REGNUM,
+				     "orig_rax");
+  if (!valid_p)
+    return;
+
+  amd64_linux_init_abi_common (info, gdbarch);
+
+  /* GNU/Linux uses SVR4-style shared libraries.  */
+  set_solib_svr4_fetch_link_map_offsets
+    (gdbarch, svr4_lp64_fetch_link_map_offsets);
+}
+
+static void
+amd64_x32_linux_init_abi(struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  const struct target_desc *tdesc = info.target_desc;
+  struct tdesc_arch_data *tdesc_data = (void *) info.tdep_info;
+  const struct tdesc_feature *feature;
+  int valid_p;
+
+  gdb_assert (tdesc_data);
+
+  tdep->gregset_reg_offset = amd64_linux_gregset_reg_offset;
+  tdep->gregset_num_regs = ARRAY_SIZE (amd64_linux_gregset_reg_offset);
+  tdep->sizeof_gregset = 27 * 8;
+
+  amd64_x32_init_abi (info, gdbarch);
+
+  /* Reserve a number for orig_rax.  */
+  set_gdbarch_num_regs (gdbarch, AMD64_LINUX_NUM_REGS);
+
+  if (! tdesc_has_registers (tdesc))
+    tdesc = tdesc_x32_linux;
+  tdep->tdesc = tdesc;
+
+  feature = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.linux");
+  if (feature == NULL)
+    return;
+
+  valid_p = tdesc_numbered_register (feature, tdesc_data,
+				     AMD64_LINUX_ORIG_RAX_REGNUM,
+				     "orig_rax");
+  if (!valid_p)
+    return;
+
+  amd64_linux_init_abi_common (info, gdbarch);
+
+  /* GNU/Linux uses SVR4-style shared libraries.  */
+  set_solib_svr4_fetch_link_map_offsets
+    (gdbarch, svr4_ilp32_fetch_link_map_offsets);
+}
 

 
 /* Provide a prototype to silence -Wmissing-prototypes.  */
@@ -1541,8 +1617,12 @@ _initialize_amd64_linux_tdep (void)
 {
   gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64,
 			  GDB_OSABI_LINUX, amd64_linux_init_abi);
+  gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x64_32,
+			  GDB_OSABI_LINUX, amd64_x32_linux_init_abi);
 
   /* Initialize the Linux target description.  */
   initialize_tdesc_amd64_linux ();
   initialize_tdesc_amd64_avx_linux ();
+  initialize_tdesc_x32_linux ();
+  initialize_tdesc_x32_avx_linux ();
 }
diff --git a/gdb/amd64-linux-tdep.h b/gdb/amd64-linux-tdep.h
index 0338b6e..49bb95e 100644
--- a/gdb/amd64-linux-tdep.h
+++ b/gdb/amd64-linux-tdep.h
@@ -34,6 +34,8 @@
 /* Linux target description.  */
 extern struct target_desc *tdesc_amd64_linux;
 extern struct target_desc *tdesc_amd64_avx_linux;
+extern struct target_desc *tdesc_x32_linux;
+extern struct target_desc *tdesc_x32_avx_linux;
 
 /* Enum that defines the syscall identifiers for amd64 linux.
    Used for process record/replay, these will be translated into
diff --git a/gdb/amd64-nat.c b/gdb/amd64-nat.c
index 6865456..d79b71b 100644
--- a/gdb/amd64-nat.c
+++ b/gdb/amd64-nat.c
@@ -59,7 +59,7 @@ amd64_native_gregset_reg_offset (struct gdbarch *gdbarch, int regnum)
 
   gdb_assert (regnum >= 0);
 
-  if (gdbarch_ptr_bit (gdbarch) == 32)
+  if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
     {
       reg_offset = amd64_native_gregset32_reg_offset;
       num_regs = amd64_native_gregset32_num_regs;
@@ -96,7 +96,7 @@ amd64_supply_native_gregset (struct regcache *regcache,
   int num_regs = amd64_native_gregset64_num_regs;
   int i;
 
-  if (gdbarch_ptr_bit (gdbarch) == 32)
+  if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
     num_regs = amd64_native_gregset32_num_regs;
 
   if (num_regs > gdbarch_num_regs (gdbarch))
@@ -127,7 +127,7 @@ amd64_collect_native_gregset (const struct regcache *regcache,
   int num_regs = amd64_native_gregset64_num_regs;
   int i;
 
-  if (gdbarch_ptr_bit (gdbarch) == 32)
+  if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
     {
       num_regs = amd64_native_gregset32_num_regs;
 
diff --git a/gdb/amd64-sol2-tdep.c b/gdb/amd64-sol2-tdep.c
index 6d2f57f..dbc65d4 100644
--- a/gdb/amd64-sol2-tdep.c
+++ b/gdb/amd64-sol2-tdep.c
@@ -54,7 +54,7 @@ static int amd64_sol2_gregset_reg_offset[] = {
   1 * 8,
   0 * 8,			/* ... %r15 */
   17 * 8,			/* %rip */
-  16 * 8,			/* %eflags */
+  19 * 8,			/* %eflags */
   18 * 8,			/* %cs */
   21 * 8,			/* %ss */
   25 * 8,			/* %ds */
@@ -71,7 +71,7 @@ static int
 amd64_sol2_sigtramp_p (struct frame_info *this_frame)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
-  char *name;
+  const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
   return (name && (strcmp ("sigacthandler", name) == 0
diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c
index ea65d0d..5424926 100644
--- a/gdb/amd64-tdep.c
+++ b/gdb/amd64-tdep.c
@@ -43,6 +43,8 @@
 
 #include "features/i386/amd64.c"
 #include "features/i386/amd64-avx.c"
+#include "features/i386/x32.c"
+#include "features/i386/x32-avx.c"
 
 #include "ax.h"
 #include "ax-gdb.h"
@@ -256,7 +258,8 @@ static const char *amd64_word_names[] =
 static const char *amd64_dword_names[] =
 {
   "eax", "ebx", "ecx", "edx", "esi", "edi", "ebp", "esp", 
-  "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
+  "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d",
+  "eip"
 };
 
 /* Return the name of register REGNUM.  */
@@ -592,7 +595,7 @@ amd64_classify (struct type *type, enum amd64_reg_class class[2])
 }
 
 static enum return_value_convention
-amd64_return_value (struct gdbarch *gdbarch, struct type *func_type,
+amd64_return_value (struct gdbarch *gdbarch, struct value *function,
 		    struct type *type, struct regcache *regcache,
 		    gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -1258,7 +1261,7 @@ amd64_displaced_step_copy_insn (struct gdbarch *gdbarch,
 				struct regcache *regs)
 {
   int len = gdbarch_max_insn_length (gdbarch);
-  /* Extra space for sentinels so fixup_{riprel,displaced_copy don't have to
+  /* Extra space for sentinels so fixup_{riprel,displaced_copy} don't have to
      continually watch for running off the end of the buffer.  */
   int fixup_sentinel_space = len;
   struct displaced_step_closure *dsc =
@@ -1858,6 +1861,188 @@ amd64_analyze_stack_align (CORE_ADDR pc, CORE_ADDR current_pc,
   return min (pc + offset + 2, current_pc);
 }
 
+/* Similar to amd64_analyze_stack_align for x32.  */
+
+static CORE_ADDR
+amd64_x32_analyze_stack_align (CORE_ADDR pc, CORE_ADDR current_pc,
+			       struct amd64_frame_cache *cache) 
+{
+  /* There are 2 code sequences to re-align stack before the frame
+     gets set up:
+
+	1. Use a caller-saved saved register:
+
+		leaq  8(%rsp), %reg
+		andq  $-XXX, %rsp
+		pushq -8(%reg)
+
+	   or
+
+		[addr32] leal  8(%rsp), %reg
+		andl  $-XXX, %esp
+		[addr32] pushq -8(%reg)
+
+	2. Use a callee-saved saved register:
+
+		pushq %reg
+		leaq  16(%rsp), %reg
+		andq  $-XXX, %rsp
+		pushq -8(%reg)
+
+	   or
+
+		pushq %reg
+		[addr32] leal  16(%rsp), %reg
+		andl  $-XXX, %esp
+		[addr32] pushq -8(%reg)
+
+     "andq $-XXX, %rsp" can be either 4 bytes or 7 bytes:
+     
+     	0x48 0x83 0xe4 0xf0			andq $-16, %rsp
+     	0x48 0x81 0xe4 0x00 0xff 0xff 0xff	andq $-256, %rsp
+
+     "andl $-XXX, %esp" can be either 3 bytes or 6 bytes:
+     
+     	0x83 0xe4 0xf0			andl $-16, %esp
+     	0x81 0xe4 0x00 0xff 0xff 0xff	andl $-256, %esp
+   */
+
+  gdb_byte buf[19];
+  int reg, r;
+  int offset, offset_and;
+
+  if (target_read_memory (pc, buf, sizeof buf))
+    return pc;
+
+  /* Skip optional addr32 prefix.  */
+  offset = buf[0] == 0x67 ? 1 : 0;
+
+  /* Check caller-saved saved register.  The first instruction has
+     to be "leaq 8(%rsp), %reg" or "leal 8(%rsp), %reg".  */
+  if (((buf[offset] & 0xfb) == 0x48 || (buf[offset] & 0xfb) == 0x40)
+      && buf[offset + 1] == 0x8d
+      && buf[offset + 3] == 0x24
+      && buf[offset + 4] == 0x8)
+    {
+      /* MOD must be binary 10 and R/M must be binary 100.  */
+      if ((buf[offset + 2] & 0xc7) != 0x44)
+	return pc;
+
+      /* REG has register number.  */
+      reg = (buf[offset + 2] >> 3) & 7;
+
+      /* Check the REX.R bit.  */
+      if ((buf[offset] & 0x4) != 0)
+	reg += 8;
+
+      offset += 5;
+    }
+  else
+    {
+      /* Check callee-saved saved register.  The first instruction
+	 has to be "pushq %reg".  */
+      reg = 0;
+      if ((buf[offset] & 0xf6) == 0x40
+	  && (buf[offset + 1] & 0xf8) == 0x50)
+	{
+	  /* Check the REX.B bit.  */
+	  if ((buf[offset] & 1) != 0)
+	    reg = 8;
+
+	  offset += 1;
+	}
+      else if ((buf[offset] & 0xf8) != 0x50)
+	return pc;
+
+      /* Get register.  */
+      reg += buf[offset] & 0x7;
+
+      offset++;
+
+      /* Skip optional addr32 prefix.  */
+      if (buf[offset] == 0x67)
+	offset++;
+
+      /* The next instruction has to be "leaq 16(%rsp), %reg" or
+	 "leal 16(%rsp), %reg".  */
+      if (((buf[offset] & 0xfb) != 0x48 && (buf[offset] & 0xfb) != 0x40)
+	  || buf[offset + 1] != 0x8d
+	  || buf[offset + 3] != 0x24
+	  || buf[offset + 4] != 0x10)
+	return pc;
+
+      /* MOD must be binary 10 and R/M must be binary 100.  */
+      if ((buf[offset + 2] & 0xc7) != 0x44)
+	return pc;
+      
+      /* REG has register number.  */
+      r = (buf[offset + 2] >> 3) & 7;
+
+      /* Check the REX.R bit.  */
+      if ((buf[offset] & 0x4) != 0)
+	r += 8;
+
+      /* Registers in pushq and leaq have to be the same.  */
+      if (reg != r)
+	return pc;
+
+      offset += 5;
+    }
+
+  /* Rigister can't be %rsp nor %rbp.  */
+  if (reg == 4 || reg == 5)
+    return pc;
+
+  /* The next instruction may be "andq $-XXX, %rsp" or
+     "andl $-XXX, %esp".  */
+  if (buf[offset] != 0x48)
+    offset--;
+
+  if (buf[offset + 2] != 0xe4
+      || (buf[offset + 1] != 0x81 && buf[offset + 1] != 0x83))
+    return pc;
+
+  offset_and = offset;
+  offset += buf[offset + 1] == 0x81 ? 7 : 4;
+
+  /* Skip optional addr32 prefix.  */
+  if (buf[offset] == 0x67)
+    offset++;
+
+  /* The next instruction has to be "pushq -8(%reg)".  */
+  r = 0;
+  if (buf[offset] == 0xff)
+    offset++;
+  else if ((buf[offset] & 0xf6) == 0x40
+	   && buf[offset + 1] == 0xff)
+    {
+      /* Check the REX.B bit.  */
+      if ((buf[offset] & 0x1) != 0)
+	r = 8;
+      offset += 2;
+    }
+  else
+    return pc;
+
+  /* 8bit -8 is 0xf8.  REG must be binary 110 and MOD must be binary
+     01.  */
+  if (buf[offset + 1] != 0xf8
+      || (buf[offset] & 0xf8) != 0x70)
+    return pc;
+
+  /* R/M has register.  */
+  r += buf[offset] & 7;
+
+  /* Registers in leaq and pushq have to be the same.  */
+  if (reg != r)
+    return pc;
+
+  if (current_pc > pc + offset_and)
+    cache->saved_sp_reg = amd64_arch_reg_to_regnum (reg);
+
+  return min (pc + offset + 2, current_pc);
+}
+
 /* Do a limited analysis of the prologue at PC and update CACHE
    accordingly.  Bail out early if CURRENT_PC is reached.  Return the
    address where the analysis stopped.
@@ -1865,10 +2050,16 @@ amd64_analyze_stack_align (CORE_ADDR pc, CORE_ADDR current_pc,
    We will handle only functions beginning with:
 
       pushq %rbp        0x55
-      movq %rsp, %rbp   0x48 0x89 0xe5
+      movq %rsp, %rbp   0x48 0x89 0xe5 (or 0x48 0x8b 0xec)
 
-   Any function that doesn't start with this sequence will be assumed
-   to have no prologue and thus no valid frame pointer in %rbp.  */
+   or (for the X32 ABI):
+
+      pushq %rbp        0x55
+      movl %esp, %ebp   0x89 0xe5 (or 0x8b 0xec)
+
+   Any function that doesn't start with one of these sequences will be
+   assumed to have no prologue and thus no valid frame pointer in
+   %rbp.  */
 
 static CORE_ADDR
 amd64_analyze_prologue (struct gdbarch *gdbarch,
@@ -1876,14 +2067,23 @@ amd64_analyze_prologue (struct gdbarch *gdbarch,
 			struct amd64_frame_cache *cache)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  static gdb_byte proto[3] = { 0x48, 0x89, 0xe5 }; /* movq %rsp, %rbp */
+  /* There are two variations of movq %rsp, %rbp.  */
+  static const gdb_byte mov_rsp_rbp_1[3] = { 0x48, 0x89, 0xe5 };
+  static const gdb_byte mov_rsp_rbp_2[3] = { 0x48, 0x8b, 0xec };
+  /* Ditto for movl %esp, %ebp.  */
+  static const gdb_byte mov_esp_ebp_1[2] = { 0x89, 0xe5 };
+  static const gdb_byte mov_esp_ebp_2[2] = { 0x8b, 0xec };
+
   gdb_byte buf[3];
   gdb_byte op;
 
   if (current_pc <= pc)
     return current_pc;
 
-  pc = amd64_analyze_stack_align (pc, current_pc, cache);
+  if (gdbarch_ptr_bit (gdbarch) == 32)
+    pc = amd64_x32_analyze_stack_align (pc, current_pc, cache);
+  else
+    pc = amd64_analyze_stack_align (pc, current_pc, cache);
 
   op = read_memory_unsigned_integer (pc, 1, byte_order);
 
@@ -1898,14 +2098,30 @@ amd64_analyze_prologue (struct gdbarch *gdbarch,
       if (current_pc <= pc + 1)
         return current_pc;
 
-      /* Check for `movq %rsp, %rbp'.  */
       read_memory (pc + 1, buf, 3);
-      if (memcmp (buf, proto, 3) != 0)
-	return pc + 1;
 
-      /* OK, we actually have a frame.  */
-      cache->frameless_p = 0;
-      return pc + 4;
+      /* Check for `movq %rsp, %rbp'.  */
+      if (memcmp (buf, mov_rsp_rbp_1, 3) == 0
+	  || memcmp (buf, mov_rsp_rbp_2, 3) == 0)
+	{
+	  /* OK, we actually have a frame.  */
+	  cache->frameless_p = 0;
+	  return pc + 4;
+	}
+
+      /* For X32, also check for `movq %esp, %ebp'.  */
+      if (gdbarch_ptr_bit (gdbarch) == 32)
+	{
+	  if (memcmp (buf, mov_esp_ebp_1, 2) == 0
+	      || memcmp (buf, mov_esp_ebp_2, 2) == 0)
+	    {
+	      /* OK, we actually have a frame.  */
+	      cache->frameless_p = 0;
+	      return pc + 3;
+	    }
+	}
+
+      return pc + 1;
     }
 
   return pc;
@@ -2688,6 +2904,56 @@ amd64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   set_gdbarch_relocate_instruction (gdbarch, amd64_relocate_instruction);
 
   set_gdbarch_gen_return_address (gdbarch, amd64_gen_return_address);
+
+  /* SystemTap variables and functions.  */
+  set_gdbarch_stap_integer_prefix (gdbarch, "$");
+  set_gdbarch_stap_register_prefix (gdbarch, "%");
+  set_gdbarch_stap_register_indirection_prefix (gdbarch, "(");
+  set_gdbarch_stap_register_indirection_suffix (gdbarch, ")");
+  set_gdbarch_stap_is_single_operand (gdbarch,
+				      i386_stap_is_single_operand);
+  set_gdbarch_stap_parse_special_token (gdbarch,
+					i386_stap_parse_special_token);
+}
+

+
+static struct type *
+amd64_x32_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
+{
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+
+  switch (regnum - tdep->eax_regnum)
+    {
+    case AMD64_RBP_REGNUM:	/* %ebp */
+    case AMD64_RSP_REGNUM:	/* %esp */
+      return builtin_type (gdbarch)->builtin_data_ptr;
+    case AMD64_RIP_REGNUM:	/* %eip */
+      return builtin_type (gdbarch)->builtin_func_ptr;
+    }
+
+  return i386_pseudo_register_type (gdbarch, regnum);
+}
+
+void
+amd64_x32_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  const struct target_desc *tdesc = info.target_desc;
+
+  amd64_init_abi (info, gdbarch);
+
+  if (! tdesc_has_registers (tdesc))
+    tdesc = tdesc_x32;
+  tdep->tdesc = tdesc;
+
+  tdep->sp_regnum_from_eax = AMD64_RSP_REGNUM;
+  tdep->pc_regnum_from_eax = AMD64_RIP_REGNUM;
+
+  tdep->num_dword_regs = 17;
+  set_tdesc_pseudo_register_type (gdbarch, amd64_x32_pseudo_register_type);
+
+  set_gdbarch_long_bit (gdbarch, 32);
+  set_gdbarch_ptr_bit (gdbarch, 32);
 }
 
 /* Provide a prototype to silence -Wmissing-prototypes.  */
@@ -2698,6 +2964,8 @@ _initialize_amd64_tdep (void)
 {
   initialize_tdesc_amd64 ();
   initialize_tdesc_amd64_avx ();
+  initialize_tdesc_x32 ();
+  initialize_tdesc_x32_avx ();
 }
 

 
@@ -2722,7 +2990,8 @@ amd64_supply_fxsave (struct regcache *regcache, int regnum,
 
   i387_supply_fxsave (regcache, regnum, fxsave);
 
-  if (fxsave && gdbarch_ptr_bit (gdbarch) == 64)
+  if (fxsave
+      && gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 64)
     {
       const gdb_byte *regs = fxsave;
 
@@ -2744,7 +3013,8 @@ amd64_supply_xsave (struct regcache *regcache, int regnum,
 
   i387_supply_xsave (regcache, regnum, xsave);
 
-  if (xsave && gdbarch_ptr_bit (gdbarch) == 64)
+  if (xsave
+      && gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 64)
     {
       const gdb_byte *regs = xsave;
 
@@ -2772,7 +3042,7 @@ amd64_collect_fxsave (const struct regcache *regcache, int regnum,
 
   i387_collect_fxsave (regcache, regnum, fxsave);
 
-  if (gdbarch_ptr_bit (gdbarch) == 64)
+  if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 64)
     {
       if (regnum == -1 || regnum == I387_FISEG_REGNUM (tdep))
 	regcache_raw_collect (regcache, I387_FISEG_REGNUM (tdep), regs + 12);
@@ -2793,7 +3063,7 @@ amd64_collect_xsave (const struct regcache *regcache, int regnum,
 
   i387_collect_xsave (regcache, regnum, xsave, gcore);
 
-  if (gdbarch_ptr_bit (gdbarch) == 64)
+  if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 64)
     {
       if (regnum == -1 || regnum == I387_FISEG_REGNUM (tdep))
 	regcache_raw_collect (regcache, I387_FISEG_REGNUM (tdep),
diff --git a/gdb/amd64-tdep.h b/gdb/amd64-tdep.h
index 1ed109c..cb901cc 100644
--- a/gdb/amd64-tdep.h
+++ b/gdb/amd64-tdep.h
@@ -80,6 +80,8 @@ extern void amd64_displaced_step_fixup (struct gdbarch *gdbarch,
 					struct regcache *regs);
 
 extern void amd64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch);
+extern void amd64_x32_init_abi (struct gdbarch_info info,
+				struct gdbarch *gdbarch);
 
 /* Fill register REGNUM in REGCACHE with the appropriate
    floating-point or SSE register value from *FXSAVE.  If REGNUM is
diff --git a/gdb/amd64-windows-nat.c b/gdb/amd64-windows-nat.c
index 49119d1..e5fb0e0 100644
--- a/gdb/amd64-windows-nat.c
+++ b/gdb/amd64-windows-nat.c
@@ -18,6 +18,8 @@
 #include "defs.h"
 #include "windows-nat.h"
 #include "i386-nat.h"
+#include "amd64-tdep.h"
+
 #include <windows.h>
 
 #define context_offset(x) (offsetof (CONTEXT, x))
@@ -85,9 +87,21 @@ static const int mappings[] =
 };
 #undef context_offset
 
+/* segment_register_p_ftype implementation for amd64.  */
+
+static int
+amd64_windows_segment_register_p (int regnum)
+{
+  return regnum >= AMD64_CS_REGNUM && regnum <= AMD64_GS_REGNUM;
+}
+
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_amd64_windows_nat;
+
 void
 _initialize_amd64_windows_nat (void)
 {
   windows_set_context_register_offsets (mappings);
+  windows_set_segment_register_p (amd64_windows_segment_register_p);
   i386_set_debug_register_length (8);
 }
diff --git a/gdb/amd64-windows-tdep.c b/gdb/amd64-windows-tdep.c
index 29fd71a..41e0efa 100644
--- a/gdb/amd64-windows-tdep.c
+++ b/gdb/amd64-windows-tdep.c
@@ -23,6 +23,7 @@
 #include "gdbtypes.h"
 #include "gdbcore.h"
 #include "regcache.h"
+#include "windows-tdep.h"
 
 /* The registers used to pass integer arguments during a function call.  */
 static int amd64_windows_dummy_call_integer_regs[] =
@@ -73,7 +74,7 @@ amd64_windows_classify (struct type *type, enum amd64_reg_class class[2])
 /* Implement the "return_value" gdbarch method for amd64-windows.  */
 
 static enum return_value_convention
-amd64_windows_return_value (struct gdbarch *gdbarch, struct type *func_type,
+amd64_windows_return_value (struct gdbarch *gdbarch, struct value *function,
 			    struct type *type, struct regcache *regcache,
 			    gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -174,9 +175,15 @@ amd64_windows_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   set_gdbarch_return_value (gdbarch, amd64_windows_return_value);
   set_gdbarch_skip_main_prologue (gdbarch, amd64_skip_main_prologue);
 
+  set_gdbarch_iterate_over_objfiles_in_search_order
+    (gdbarch, windows_iterate_over_objfiles_in_search_order);
+
   set_solib_ops (gdbarch, &solib_target_so_ops);
 }
 
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_amd64_windows_tdep;
+
 void
 _initialize_amd64_windows_tdep (void)
 {
diff --git a/gdb/amd64bsd-nat.c b/gdb/amd64bsd-nat.c
index b7283e9..83e7ec2 100644
--- a/gdb/amd64bsd-nat.c
+++ b/gdb/amd64bsd-nat.c
@@ -32,6 +32,7 @@
 
 #include "amd64-tdep.h"
 #include "amd64-nat.h"
+#include "amd64bsd-nat.h"
 #include "inf-ptrace.h"
 

 
@@ -125,3 +126,75 @@ amd64bsd_target (void)
   t->to_store_registers = amd64bsd_store_inferior_registers;
   return t;
 }
+

+
+/* Support for debug registers.  */
+
+#ifdef HAVE_PT_GETDBREGS
+
+static unsigned long
+amd64bsd_dr_get (ptid_t ptid, int regnum)
+{
+  struct dbreg dbregs;
+
+  if (ptrace (PT_GETDBREGS, PIDGET (inferior_ptid),
+	      (PTRACE_TYPE_ARG3) &dbregs, 0) == -1)
+    perror_with_name (_("Couldn't read debug registers"));
+
+  return DBREG_DRX ((&dbregs), regnum);
+}
+
+static void
+amd64bsd_dr_set (int regnum, unsigned long value)
+{
+  struct dbreg dbregs;
+
+  if (ptrace (PT_GETDBREGS, PIDGET (inferior_ptid),
+              (PTRACE_TYPE_ARG3) &dbregs, 0) == -1)
+    perror_with_name (_("Couldn't get debug registers"));
+
+  /* For some mysterious reason, some of the reserved bits in the
+     debug control register get set.  Mask these off, otherwise the
+     ptrace call below will fail.  */
+  DBREG_DRX ((&dbregs), 7) &= ~(0xffffffff0000fc00);
+
+  DBREG_DRX ((&dbregs), regnum) = value;
+
+  if (ptrace (PT_SETDBREGS, PIDGET (inferior_ptid),
+              (PTRACE_TYPE_ARG3) &dbregs, 0) == -1)
+    perror_with_name (_("Couldn't write debug registers"));
+}
+
+void
+amd64bsd_dr_set_control (unsigned long control)
+{
+  amd64bsd_dr_set (7, control);
+}
+
+void
+amd64bsd_dr_set_addr (int regnum, CORE_ADDR addr)
+{
+  gdb_assert (regnum >= 0 && regnum <= 4);
+
+  amd64bsd_dr_set (regnum, addr);
+}
+
+CORE_ADDR
+amd64bsd_dr_get_addr (int regnum)
+{
+  return amd64bsd_dr_get (inferior_ptid, regnum);
+}
+
+unsigned long
+amd64bsd_dr_get_status (void)
+{
+  return amd64bsd_dr_get (inferior_ptid, 6);
+}
+
+unsigned long
+amd64bsd_dr_get_control (void)
+{
+  return amd64bsd_dr_get (inferior_ptid, 7);
+}
+
+#endif /* PT_GETDBREGS */
diff --git a/gdb/amd64bsd-nat.h b/gdb/amd64bsd-nat.h
new file mode 100644
index 0000000..bbceedc
--- /dev/null
+++ b/gdb/amd64bsd-nat.h
@@ -0,0 +1,35 @@
+/* Native-dependent code for AMD64 BSD's.
+
+   Copyright (C) 2011-2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef AMD64BSD_NAT_H
+#define AMD64BSD_NAT_H
+
+/* Low level amd64 debug register functions.  */
+
+extern void amd64bsd_dr_set_control (unsigned long control);
+
+extern void amd64bsd_dr_set_addr (int regnum, CORE_ADDR addr);
+
+extern CORE_ADDR amd64bsd_dr_get_addr (int regnum);
+
+extern unsigned long amd64bsd_dr_get_status (void);
+
+extern unsigned long amd64bsd_dr_get_control (void);
+
+#endif /* amd64bsd-nat.h */
diff --git a/gdb/amd64fbsd-nat.c b/gdb/amd64fbsd-nat.c
index 79c5295..ab2431c 100644
--- a/gdb/amd64fbsd-nat.c
+++ b/gdb/amd64fbsd-nat.c
@@ -33,6 +33,8 @@
 #include "fbsd-nat.h"
 #include "amd64-tdep.h"
 #include "amd64-nat.h"
+#include "amd64bsd-nat.h"
+#include "i386-nat.h"
 

 
 /* Offset in `struct reg' where MEMBER is stored.  */
@@ -154,6 +156,20 @@ _initialize_amd64fbsd_nat (void)
 
   /* Add some extra features to the common *BSD/i386 target.  */
   t = amd64bsd_target ();
+
+#ifdef HAVE_PT_GETDBREGS
+
+  i386_use_watchpoints (t);
+
+  i386_dr_low.set_control = amd64bsd_dr_set_control;
+  i386_dr_low.set_addr = amd64bsd_dr_set_addr;
+  i386_dr_low.get_addr = amd64bsd_dr_get_addr;
+  i386_dr_low.get_status = amd64bsd_dr_get_status;
+  i386_dr_low.get_control = amd64bsd_dr_get_control;
+  i386_set_debug_register_length (8);
+
+#endif /* HAVE_PT_GETDBREGS */
+
   t->to_pid_to_exec_file = fbsd_pid_to_exec_file;
   t->to_find_memory_regions = fbsd_find_memory_regions;
   t->to_make_corefile_notes = fbsd_make_corefile_notes;
diff --git a/gdb/amd64nbsd-tdep.c b/gdb/amd64nbsd-tdep.c
index 868e2f5..eacd46c 100644
--- a/gdb/amd64nbsd-tdep.c
+++ b/gdb/amd64nbsd-tdep.c
@@ -39,7 +39,7 @@ static int
 amd64nbsd_sigtramp_p (struct frame_info *this_frame)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
-  char *name;
+  const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
   return nbsd_pc_in_sigtramp (pc, name);
diff --git a/gdb/amd64obsd-tdep.c b/gdb/amd64obsd-tdep.c
index 0829cb0..f2a8ed9 100644
--- a/gdb/amd64obsd-tdep.c
+++ b/gdb/amd64obsd-tdep.c
@@ -101,7 +101,7 @@ amd64obsd_sigtramp_p (struct frame_info *this_frame)
   };
   size_t buflen = (sizeof sigreturn) + 1;
   gdb_byte *buf;
-  char *name;
+  const char *name;
 
   /* If the function has a valid symbol name, it isn't a
      trampoline.  */
@@ -360,7 +360,7 @@ amd64obsd_trapframe_cache (struct frame_info *this_frame, void **this_cache)
   struct trad_frame_cache *cache;
   CORE_ADDR func, sp, addr;
   ULONGEST cs;
-  char *name;
+  const char *name;
   int i;
 
   if (*this_cache)
@@ -425,7 +425,7 @@ amd64obsd_trapframe_sniffer (const struct frame_unwind *self,
 			     void **this_prologue_cache)
 {
   ULONGEST cs;
-  char *name;
+  const char *name;
 
   /* Check Current Privilege Level and bail out if we're not executing
      in kernel space.  */
diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c
index 45dccad..f4414b9 100644
--- a/gdb/arch-utils.c
+++ b/gdb/arch-utils.c
@@ -31,6 +31,7 @@
 #include "osabi.h"
 #include "target-descriptions.h"
 #include "objfiles.h"
+#include "language.h"
 
 #include "version.h"
 
@@ -120,7 +121,7 @@ generic_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
 
 int
 generic_in_solib_return_trampoline (struct gdbarch *gdbarch,
-				    CORE_ADDR pc, char *name)
+				    CORE_ADDR pc, const char *name)
 {
   return 0;
 }
@@ -251,7 +252,7 @@ static int target_byte_order_user = BFD_ENDIAN_UNKNOWN;
 static const char endian_big[] = "big";
 static const char endian_little[] = "little";
 static const char endian_auto[] = "auto";
-static const char *endian_enum[] =
+static const char *const endian_enum[] =
 {
   endian_big,
   endian_little,
@@ -793,6 +794,16 @@ default_gen_return_address (struct gdbarch *gdbarch,
   error (_("This architecture has no method to collect a return address."));
 }
 
+int
+default_return_in_first_hidden_param_p (struct gdbarch *gdbarch,
+					struct type *type)
+{
+  /* Usually, the return value's address is stored the in the "first hidden"
+     parameter if the return value should be passed by reference, as
+     specified in ABI.  */
+  return language_pass_by_reference (type);
+}
+
 /* */
 
 /* -Wmissing-prototypes */
diff --git a/gdb/arch-utils.h b/gdb/arch-utils.h
index 45ddf64..ef4cb26 100644
--- a/gdb/arch-utils.h
+++ b/gdb/arch-utils.h
@@ -99,7 +99,7 @@ extern CORE_ADDR generic_skip_solib_resolver (struct gdbarch *gdbarch,
 					      CORE_ADDR pc);
 
 extern int generic_in_solib_return_trampoline (struct gdbarch *gdbarch,
-					       CORE_ADDR pc, char *name);
+					       CORE_ADDR pc, const char *name);
 
 extern int generic_in_function_epilogue_p (struct gdbarch *gdbarch,
 					   CORE_ADDR pc);
@@ -172,4 +172,6 @@ extern void default_gen_return_address (struct gdbarch *gdbarch,
 extern const char *default_auto_charset (void);
 extern const char *default_auto_wide_charset (void);
 
+extern int default_return_in_first_hidden_param_p (struct gdbarch *,
+						   struct type *);
 #endif
diff --git a/gdb/arm-linux-nat.c b/gdb/arm-linux-nat.c
index 411f7f4..bf81c03 100644
--- a/gdb/arm-linux-nat.c
+++ b/gdb/arm-linux-nat.c
@@ -77,7 +77,7 @@ extern int arm_apcs_32;
    individual thread (process) ID.  get_thread_id () is used to get
    the thread id if it's available, and the process id otherwise.  */
 
-int
+static int
 get_thread_id (ptid_t ptid)
 {
   int tid = TIDGET (ptid);
@@ -896,11 +896,17 @@ arm_linux_hw_breakpoint_initialize (struct gdbarch *gdbarch,
   /* We have to create a mask for the control register which says which bits
      of the word pointed to by address to break on.  */
   if (arm_pc_is_thumb (gdbarch, address))
-    mask = 0x3 << (address & 2);
+    {
+      mask = 0x3;
+      address &= ~1;
+    }
   else
-    mask = 0xf;
+    {
+      mask = 0xf;
+      address &= ~3;
+    }
 
-  p->address = (unsigned int) (address & ~3);
+  p->address = (unsigned int) address;
   p->control = arm_hwbp_control_initialize (mask, arm_hwbp_break, 1);
 }
 
@@ -1137,24 +1143,29 @@ arm_linux_remove_watchpoint (CORE_ADDR addr, int len, int rw,
 static int
 arm_linux_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
 {
-  struct siginfo *siginfo_p = linux_nat_get_siginfo (inferior_ptid);
-  int slot = siginfo_p->si_errno;
+  siginfo_t siginfo;
+  int slot;
+
+  if (!linux_nat_get_siginfo (inferior_ptid, &siginfo))
+    return 0;
 
   /* This must be a hardware breakpoint.  */
-  if (siginfo_p->si_signo != SIGTRAP
-      || (siginfo_p->si_code & 0xffff) != 0x0004 /* TRAP_HWBKPT */)
+  if (siginfo.si_signo != SIGTRAP
+      || (siginfo.si_code & 0xffff) != 0x0004 /* TRAP_HWBKPT */)
     return 0;
 
   /* We must be able to set hardware watchpoints.  */
   if (arm_linux_get_hw_watchpoint_count () == 0)
     return 0;
 
+  slot = siginfo.si_errno;
+
   /* If we are in a positive slot then we're looking at a breakpoint and not
      a watchpoint.  */
   if (slot >= 0)
     return 0;
 
-  *addr_p = (CORE_ADDR) (uintptr_t) siginfo_p->si_addr;
+  *addr_p = (CORE_ADDR) (uintptr_t) siginfo.si_addr;
   return 1;
 }
 
@@ -1177,9 +1188,9 @@ arm_linux_watchpoint_addr_within_range (struct target_ops *target,
 /* Handle thread creation.  We need to copy the breakpoints and watchpoints
    in the parent thread to the child thread.  */
 static void
-arm_linux_new_thread (ptid_t ptid)
+arm_linux_new_thread (struct lwp_info *lp)
 {
-  int tid = TIDGET (ptid);
+  int tid = TIDGET (lp->ptid);
   const struct arm_linux_hwbp_cap *info = arm_linux_get_hwbp_cap ();
 
   if (info != NULL)
diff --git a/gdb/arm-linux-tdep.c b/gdb/arm-linux-tdep.c
index ac4860c..f4eaa5c 100644
--- a/gdb/arm-linux-tdep.c
+++ b/gdb/arm-linux-tdep.c
@@ -43,6 +43,12 @@
 #include "gdbthread.h"
 #include "symfile.h"
 
+#include "cli/cli-utils.h"
+#include "stap-probe.h"
+#include "parser-defs.h"
+#include "user-regs.h"
+#include <ctype.h>
+
 #include "gdb_string.h"
 
 /* This is defined in <elf.h> on ARM GNU/Linux systems.  */
@@ -937,6 +943,9 @@ arm_linux_copy_svc (struct gdbarch *gdbarch, struct regcache *regs,
         	= set_momentary_breakpoint (gdbarch, sal, get_frame_id (frame),
 					    bp_step_resume);
 
+	      /* set_momentary_breakpoint invalidates FRAME.  */
+	      frame = NULL;
+
 	      /* We need to make sure we actually insert the momentary
 	         breakpoint set above.  */
 	      insert_breakpoints ();
@@ -1053,6 +1062,122 @@ arm_linux_displaced_step_copy_insn (struct gdbarch *gdbarch,
   return dsc;
 }
 
+static int
+arm_stap_is_single_operand (struct gdbarch *gdbarch, const char *s)
+{
+  return (*s == '#' /* Literal number.  */
+	  || *s == '[' /* Register indirection or
+			  displacement.  */
+	  || isalpha (*s)); /* Register value.  */
+}
+
+/* This routine is used to parse a special token in ARM's assembly.
+
+   The special tokens parsed by it are:
+
+      - Register displacement (e.g, [fp, #-8])
+
+   It returns one if the special token has been parsed successfully,
+   or zero if the current token is not considered special.  */
+
+static int
+arm_stap_parse_special_token (struct gdbarch *gdbarch,
+			      struct stap_parse_info *p)
+{
+  if (*p->arg == '[')
+    {
+      /* Temporary holder for lookahead.  */
+      const char *tmp = p->arg;
+      /* Used to save the register name.  */
+      const char *start;
+      char *regname;
+      int len, offset;
+      int got_minus = 0;
+      long displacement;
+      struct stoken str;
+
+      ++tmp;
+      start = tmp;
+
+      /* Register name.  */
+      while (isalnum (*tmp))
+	++tmp;
+
+      if (*tmp != ',')
+	return 0;
+
+      len = tmp - start;
+      regname = alloca (len + 2);
+
+      offset = 0;
+      if (isdigit (*start))
+	{
+	  /* If we are dealing with a register whose name begins with a
+	     digit, it means we should prefix the name with the letter
+	     `r', because GDB expects this name pattern.  Otherwise (e.g.,
+	     we are dealing with the register `fp'), we don't need to
+	     add such a prefix.  */
+	  regname[0] = 'r';
+	  offset = 1;
+	}
+
+      strncpy (regname + offset, start, len);
+      len += offset;
+      regname[len] = '\0';
+
+      if (user_reg_map_name_to_regnum (gdbarch, regname, len) == -1)
+	error (_("Invalid register name `%s' on expression `%s'."),
+	       regname, p->saved_arg);
+
+      ++tmp;
+      tmp = skip_spaces_const (tmp);
+      if (*tmp++ != '#')
+	return 0;
+
+      if (*tmp == '-')
+	{
+	  ++tmp;
+	  got_minus = 1;
+	}
+
+      displacement = strtol (tmp, (char **) &tmp, 10);
+
+      /* Skipping last `]'.  */
+      if (*tmp++ != ']')
+	return 0;
+
+      /* The displacement.  */
+      write_exp_elt_opcode (OP_LONG);
+      write_exp_elt_type (builtin_type (gdbarch)->builtin_long);
+      write_exp_elt_longcst (displacement);
+      write_exp_elt_opcode (OP_LONG);
+      if (got_minus)
+	write_exp_elt_opcode (UNOP_NEG);
+
+      /* The register name.  */
+      write_exp_elt_opcode (OP_REGISTER);
+      str.ptr = regname;
+      str.length = len;
+      write_exp_string (str);
+      write_exp_elt_opcode (OP_REGISTER);
+
+      write_exp_elt_opcode (BINOP_ADD);
+
+      /* Casting to the expected type.  */
+      write_exp_elt_opcode (UNOP_CAST);
+      write_exp_elt_type (lookup_pointer_type (p->arg_type));
+      write_exp_elt_opcode (UNOP_CAST);
+
+      write_exp_elt_opcode (UNOP_IND);
+
+      p->arg = tmp;
+    }
+  else
+    return 0;
+
+  return 1;
+}
+
 static void
 arm_linux_init_abi (struct gdbarch_info info,
 		    struct gdbarch *gdbarch)
@@ -1152,8 +1277,23 @@ arm_linux_init_abi (struct gdbarch_info info,
 					   simple_displaced_step_free_closure);
   set_gdbarch_displaced_step_location (gdbarch, displaced_step_at_entry_point);
 
+  /* Reversible debugging, process record.  */
+  set_gdbarch_process_record (gdbarch, arm_process_record);
+
+  /* SystemTap functions.  */
+  set_gdbarch_stap_integer_prefix (gdbarch, "#");
+  set_gdbarch_stap_register_prefix (gdbarch, "r");
+  set_gdbarch_stap_register_indirection_prefix (gdbarch, "[");
+  set_gdbarch_stap_register_indirection_suffix (gdbarch, "]");
+  set_gdbarch_stap_gdb_register_prefix (gdbarch, "r");
+  set_gdbarch_stap_is_single_operand (gdbarch, arm_stap_is_single_operand);
+  set_gdbarch_stap_parse_special_token (gdbarch,
+					arm_stap_parse_special_token);
 
   tdep->syscall_next_pc = arm_linux_syscall_next_pc;
+
+  /* Syscall record.  */
+  tdep->arm_swi_record = NULL;
 }
 
 /* Provide a prototype to silence -Wmissing-prototypes.  */
diff --git a/gdb/arm-symbian-tdep.c b/gdb/arm-symbian-tdep.c
index 7994a9c..69821d3 100644
--- a/gdb/arm-symbian-tdep.c
+++ b/gdb/arm-symbian-tdep.c
@@ -29,7 +29,7 @@
 /* If PC is in a DLL import stub, return the address of the `real'
    function belonging to the stub.  */
 
-CORE_ADDR
+static CORE_ADDR
 arm_symbian_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
 {
   struct gdbarch *gdbarch;
@@ -89,7 +89,7 @@ arm_symbian_init_abi (struct gdbarch_info info,
 static enum gdb_osabi
 arm_symbian_osabi_sniffer (bfd *abfd)
 {
-  Elf_Internal_Phdr *phdrs, **segments;
+  Elf_Internal_Phdr *phdrs;
   long phdrs_size;
   int num_phdrs, i;
 
@@ -121,6 +121,9 @@ arm_symbian_osabi_sniffer (bfd *abfd)
   return GDB_OSABI_SYMBIAN;
 }
 
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_arm_symbian_tdep;
+
 void
 _initialize_arm_symbian_tdep (void)
 {
diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
index 1820451..568ace5 100644
--- a/gdb/arm-tdep.c
+++ b/gdb/arm-tdep.c
@@ -40,6 +40,7 @@
 #include "dwarf2-frame.h"
 #include "gdbtypes.h"
 #include "prologue-value.h"
+#include "remote.h"
 #include "target-descriptions.h"
 #include "user-regs.h"
 #include "observer.h"
@@ -54,7 +55,11 @@
 #include "gdb_assert.h"
 #include "vec.h"
 
+#include "record.h"
+
 #include "features/arm-with-m.c"
+#include "features/arm-with-m-fpa-layout.c"
+#include "features/arm-with-m-vfp-d16.c"
 #include "features/arm-with-iwmmxt.c"
 #include "features/arm-with-vfpv2.c"
 #include "features/arm-with-vfpv3.c"
@@ -97,7 +102,7 @@ static struct cmd_list_element *showarmcmdlist = NULL;
 
 /* The type of floating-point to use.  Keep this in sync with enum
    arm_float_model, and the help string in _initialize_arm_tdep.  */
-static const char *fp_model_strings[] =
+static const char *const fp_model_strings[] =
 {
   "auto",
   "softfpa",
@@ -112,7 +117,7 @@ static enum arm_float_model arm_fp_model = ARM_FLOAT_AUTO;
 static const char *current_fp_model = "auto";
 
 /* The ABI to use.  Keep this in sync with arm_abi_kind.  */
-static const char *arm_abi_strings[] =
+static const char *const arm_abi_strings[] =
 {
   "auto",
   "APCS",
@@ -125,7 +130,7 @@ static enum arm_abi_kind arm_abi_global = ARM_ABI_AUTO;
 static const char *arm_abi_string = "auto";
 
 /* The execution mode to assume.  */
-static const char *arm_mode_strings[] =
+static const char *const arm_mode_strings[] =
   {
     "auto",
     "arm",
@@ -375,7 +380,6 @@ arm_find_mapping_symbol (CORE_ADDR memaddr, CORE_ADDR *start)
 int
 arm_pc_is_thumb (struct gdbarch *gdbarch, CORE_ADDR memaddr)
 {
-  struct obj_section *sec;
   struct minimal_symbol *sym;
   char type;
   struct displaced_step_closure* dsc
@@ -1280,7 +1284,7 @@ static CORE_ADDR
 arm_skip_stack_protector(CORE_ADDR pc, struct gdbarch *gdbarch)
 {
   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
-  unsigned int address, basereg;
+  unsigned int basereg;
   struct minimal_symbol *stack_chk_guard;
   int offset;
   int is_thumb = arm_pc_is_thumb (gdbarch, pc);
@@ -1372,7 +1376,6 @@ arm_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
   unsigned long inst;
   CORE_ADDR skip_pc;
   CORE_ADDR func_addr, limit_pc;
-  struct symtab_and_line sal;
 
   /* See if we can determine the end of the prologue via the symbol table.
      If so, then return either PC, or the PC after the prologue, whichever
@@ -1531,7 +1534,6 @@ thumb_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR prev_pc,
 {
   CORE_ADDR prologue_start;
   CORE_ADDR prologue_end;
-  CORE_ADDR current_pc;
 
   if (find_pc_partial_function (block_addr, NULL, &prologue_start,
 				&prologue_end))
@@ -3215,6 +3217,9 @@ arm_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
       else if ((insn & 0x0fff0000) == 0x08bd0000)
 	/* POP (LDMIA).  */
 	found_stack_adjust = 1;
+      else if ((insn & 0x0fff0000) == 0x049d0000)
+	/* POP of a single register.  */
+	found_stack_adjust = 1;
     }
 
   if (found_stack_adjust)
@@ -5127,7 +5132,7 @@ static gdb_byte *
 extend_buffer_earlier (gdb_byte *buf, CORE_ADDR endaddr,
 		       int old_len, int new_len)
 {
-  gdb_byte *new_buf, *middle;
+  gdb_byte *new_buf;
   int bytes_to_read = new_len - old_len;
 
   new_buf = xmalloc (new_len);
@@ -5160,7 +5165,7 @@ arm_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
   gdb_byte *buf;
   char map_type;
   CORE_ADDR boundary, func_start;
-  int buf_len, buf2_len;
+  int buf_len;
   enum bfd_endian order = gdbarch_byte_order_for_code (gdbarch);
   int i, any, last_it, last_it_count;
 
@@ -6860,7 +6865,7 @@ cleanup_block_load_pc (struct gdbarch *gdbarch,
 		       struct displaced_step_closure *dsc)
 {
   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
-  int load_executed = condition_true (dsc->u.block.cond, status), i;
+  int load_executed = condition_true (dsc->u.block.cond, status);
   unsigned int mask = dsc->u.block.regmask, write_reg = ARM_PC_REGNUM;
   unsigned int regs_loaded = bitcount (mask);
   unsigned int num_to_shuffle = regs_loaded, clobbered;
@@ -8702,8 +8707,6 @@ static void
 arm_remote_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr,
 			       int *kindptr)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-
   arm_breakpoint_from_pc (gdbarch, pcptr, kindptr);
 
   if (arm_pc_is_thumb (gdbarch, *pcptr) && *kindptr == 4)
@@ -9006,11 +9009,12 @@ arm_store_return_value (struct type *type, struct regcache *regs,
 /* Handle function return values.  */
 
 static enum return_value_convention
-arm_return_value (struct gdbarch *gdbarch, struct type *func_type,
+arm_return_value (struct gdbarch *gdbarch, struct value *function,
 		  struct type *valtype, struct regcache *regcache,
 		  gdb_byte *readbuf, const gdb_byte *writebuf)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  struct type *func_type = function ? value_type (function) : NULL;
   enum arm_vfp_cprc_base_type vfp_base_type;
   int vfp_base_count;
 
@@ -9101,7 +9105,7 @@ arm_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
 CORE_ADDR
 arm_skip_stub (struct frame_info *frame, CORE_ADDR pc)
 {
-  char *name;
+  const char *name;
   int namelen;
   CORE_ADDR start_addr;
 
@@ -9277,8 +9281,6 @@ static void
 arm_show_fallback_mode (struct ui_file *file, int from_tty,
 			struct cmd_list_element *c, const char *value)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch);
-
   fprintf_filtered (file,
 		    _("The current execution mode assumed "
 		      "(when symbols are unavailable) is \"%s\".\n"),
@@ -9568,7 +9570,6 @@ arm_neon_quad_write (struct gdbarch *gdbarch, struct regcache *regcache,
 		     int regnum, const gdb_byte *buf)
 {
   char name_buf[4];
-  gdb_byte reg_buf[8];
   int offset, double_regnum;
 
   sprintf (name_buf, "d%d", regnum << 1);
@@ -9665,6 +9666,49 @@ arm_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
 }
 
 

+/* For backward-compatibility we allow two 'g' packet lengths with
+   the remote protocol depending on whether FPA registers are
+   supplied.  M-profile targets do not have FPA registers, but some
+   stubs already exist in the wild which use a 'g' packet which
+   supplies them albeit with dummy values.  The packet format which
+   includes FPA registers should be considered deprecated for
+   M-profile targets.  */
+
+static void
+arm_register_g_packet_guesses (struct gdbarch *gdbarch)
+{
+  if (gdbarch_tdep (gdbarch)->is_m)
+    {
+      /* If we know from the executable this is an M-profile target,
+	 cater for remote targets whose register set layout is the
+	 same as the FPA layout.  */
+      register_remote_g_packet_guess (gdbarch,
+				      /* r0-r12,sp,lr,pc; f0-f7; fps,xpsr */
+				      (16 * INT_REGISTER_SIZE)
+				      + (8 * FP_REGISTER_SIZE)
+				      + (2 * INT_REGISTER_SIZE),
+				      tdesc_arm_with_m_fpa_layout);
+
+      /* The regular M-profile layout.  */
+      register_remote_g_packet_guess (gdbarch,
+				      /* r0-r12,sp,lr,pc; xpsr */
+				      (16 * INT_REGISTER_SIZE)
+				      + INT_REGISTER_SIZE,
+				      tdesc_arm_with_m);
+
+      /* M-profile plus M4F VFP.  */
+      register_remote_g_packet_guess (gdbarch,
+				      /* r0-r12,sp,lr,pc; d0-d15; fpscr,xpsr */
+				      (16 * INT_REGISTER_SIZE)
+				      + (16 * VFP_REGISTER_SIZE)
+				      + (2 * INT_REGISTER_SIZE),
+				      tdesc_arm_with_m_vfp_d16);
+    }
+
+  /* Otherwise we don't have a useful guess.  */
+}
+
+

 /* Initialize the current architecture based on INFO.  If possible,
    re-use an architecture from ARCHES, which is a list of
    architectures already created during this debugging session.
@@ -9798,7 +9842,7 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 		  && (attr_arch == TAG_CPU_ARCH_V6_M
 		      || attr_arch == TAG_CPU_ARCH_V6S_M
 		      || attr_profile == 'M'))
-		tdesc = tdesc_arm_with_m;
+		is_m = 1;
 #endif
 	    }
 
@@ -10055,6 +10099,8 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   tdep->have_neon_pseudos = have_neon_pseudos;
   tdep->have_neon = have_neon;
 
+  arm_register_g_packet_guesses (gdbarch);
+
   /* Breakpoints.  */
   switch (info.byte_order_for_code)
     {
@@ -10291,6 +10337,8 @@ _initialize_arm_tdep (void)
 
   /* Initialize the standard target descriptions.  */
   initialize_tdesc_arm_with_m ();
+  initialize_tdesc_arm_with_m_fpa_layout ();
+  initialize_tdesc_arm_with_m_vfp_d16 ();
   initialize_tdesc_arm_with_iwmmxt ();
   initialize_tdesc_arm_with_vfpv2 ();
   initialize_tdesc_arm_with_vfpv3 ();
@@ -10404,3 +10452,2062 @@ vfp - VFP co-processor."),
 			   NULL, /* FIXME: i18n: "ARM debugging is %s.  */
 			   &setdebuglist, &showdebuglist);
 }
+
+/* ARM-reversible process record data structures.  */
+
+#define ARM_INSN_SIZE_BYTES 4    
+#define THUMB_INSN_SIZE_BYTES 2
+#define THUMB2_INSN_SIZE_BYTES 4
+
+
+#define INSN_S_L_BIT_NUM 20
+
+#define REG_ALLOC(REGS, LENGTH, RECORD_BUF) \
+        do  \
+          { \
+            unsigned int reg_len = LENGTH; \
+            if (reg_len) \
+              { \
+                REGS = XNEWVEC (uint32_t, reg_len); \
+                memcpy(&REGS[0], &RECORD_BUF[0], sizeof(uint32_t)*LENGTH); \
+              } \
+          } \
+        while (0)
+
+#define MEM_ALLOC(MEMS, LENGTH, RECORD_BUF) \
+        do  \
+          { \
+            unsigned int mem_len = LENGTH; \
+            if (mem_len) \
+            { \
+              MEMS =  XNEWVEC (struct arm_mem_r, mem_len);  \
+              memcpy(&MEMS->len, &RECORD_BUF[0], \
+                     sizeof(struct arm_mem_r) * LENGTH); \
+            } \
+          } \
+          while (0)
+
+/* Checks whether insn is already recorded or yet to be decoded. (boolean expression).  */
+#define INSN_RECORDED(ARM_RECORD) \
+        (0 != (ARM_RECORD)->reg_rec_count || 0 != (ARM_RECORD)->mem_rec_count)
+
+/* ARM memory record structure.  */
+struct arm_mem_r
+{
+  uint32_t len;    /* Record length.  */
+  CORE_ADDR addr;  /* Memory address.  */
+};
+
+/* ARM instruction record contains opcode of current insn
+   and execution state (before entry to decode_insn()),
+   contains list of to-be-modified registers and
+   memory blocks (on return from decode_insn()).  */
+
+typedef struct insn_decode_record_t
+{
+  struct gdbarch *gdbarch;
+  struct regcache *regcache;
+  CORE_ADDR this_addr;          /* Address of the insn being decoded.  */
+  uint32_t arm_insn;            /* Should accommodate thumb.  */
+  uint32_t cond;                /* Condition code.  */
+  uint32_t opcode;              /* Insn opcode.  */
+  uint32_t decode;              /* Insn decode bits.  */
+  uint32_t mem_rec_count;       /* No of mem records.  */
+  uint32_t reg_rec_count;       /* No of reg records.  */
+  uint32_t *arm_regs;           /* Registers to be saved for this record.  */
+  struct arm_mem_r *arm_mems;   /* Memory to be saved for this record.  */
+} insn_decode_record;
+
+
+/* Checks ARM SBZ and SBO mandatory fields.  */
+
+static int
+sbo_sbz (uint32_t insn, uint32_t bit_num, uint32_t len, uint32_t sbo)
+{
+  uint32_t ones = bits (insn, bit_num - 1, (bit_num -1) + (len - 1));
+
+  if (!len)
+    return 1;
+
+  if (!sbo)
+    ones = ~ones;
+
+  while (ones)
+    {
+      if (!(ones & sbo))
+        {
+          return 0;
+        }
+      ones = ones >> 1;
+    }
+  return 1;
+}
+
+typedef enum
+{
+  ARM_RECORD_STRH=1,
+  ARM_RECORD_STRD
+} arm_record_strx_t;
+
+typedef enum
+{
+  ARM_RECORD=1,
+  THUMB_RECORD,
+  THUMB2_RECORD
+} record_type_t;
+
+
+static int
+arm_record_strx (insn_decode_record *arm_insn_r, uint32_t *record_buf, 
+                 uint32_t *record_buf_mem, arm_record_strx_t str_type)
+{
+
+  struct regcache *reg_cache = arm_insn_r->regcache;
+  ULONGEST u_regval[2]= {0};
+
+  uint32_t reg_src1 = 0, reg_src2 = 0;
+  uint32_t immed_high = 0, immed_low = 0,offset_8 = 0, tgt_mem_addr = 0;
+  uint32_t opcode1 = 0;
+
+  arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
+  arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
+  opcode1 = bits (arm_insn_r->arm_insn, 20, 24);
+
+
+  if (14 == arm_insn_r->opcode || 10 == arm_insn_r->opcode)
+    {
+      /* 1) Handle misc store, immediate offset.  */
+      immed_low = bits (arm_insn_r->arm_insn, 0, 3);
+      immed_high = bits (arm_insn_r->arm_insn, 8, 11);
+      reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
+      regcache_raw_read_unsigned (reg_cache, reg_src1,
+                                  &u_regval[0]);
+      if (ARM_PC_REGNUM == reg_src1)
+        {
+          /* If R15 was used as Rn, hence current PC+8.  */
+          u_regval[0] = u_regval[0] + 8;
+        }
+      offset_8 = (immed_high << 4) | immed_low;
+      /* Calculate target store address.  */
+      if (14 == arm_insn_r->opcode)
+        {
+          tgt_mem_addr = u_regval[0] + offset_8;
+        }
+      else
+        {
+          tgt_mem_addr = u_regval[0] - offset_8;
+        }
+      if (ARM_RECORD_STRH == str_type)
+        {
+          record_buf_mem[0] = 2;
+          record_buf_mem[1] = tgt_mem_addr;
+          arm_insn_r->mem_rec_count = 1;
+        }
+      else if (ARM_RECORD_STRD == str_type)
+        {
+          record_buf_mem[0] = 4;
+          record_buf_mem[1] = tgt_mem_addr;
+          record_buf_mem[2] = 4;
+          record_buf_mem[3] = tgt_mem_addr + 4;
+          arm_insn_r->mem_rec_count = 2;
+        }
+    }
+  else if (12 == arm_insn_r->opcode || 8 == arm_insn_r->opcode)
+    {
+      /* 2) Store, register offset.  */
+      /* Get Rm.  */
+      reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
+      /* Get Rn.  */
+      reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
+      regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
+      regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
+      if (15 == reg_src2)
+        {
+          /* If R15 was used as Rn, hence current PC+8.  */
+          u_regval[0] = u_regval[0] + 8;
+        }
+      /* Calculate target store address, Rn +/- Rm, register offset.  */
+      if (12 == arm_insn_r->opcode)
+        {
+          tgt_mem_addr = u_regval[0] + u_regval[1];
+        }
+      else
+        {
+          tgt_mem_addr = u_regval[1] - u_regval[0];
+        }
+      if (ARM_RECORD_STRH == str_type)
+        {
+          record_buf_mem[0] = 2;
+          record_buf_mem[1] = tgt_mem_addr;
+          arm_insn_r->mem_rec_count = 1;
+        }
+      else if (ARM_RECORD_STRD == str_type)
+        {
+          record_buf_mem[0] = 4;
+          record_buf_mem[1] = tgt_mem_addr;
+          record_buf_mem[2] = 4;
+          record_buf_mem[3] = tgt_mem_addr + 4;
+          arm_insn_r->mem_rec_count = 2;
+        }
+    }
+  else if (11 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
+           || 2 == arm_insn_r->opcode  || 6 == arm_insn_r->opcode)
+    {
+      /* 3) Store, immediate pre-indexed.  */
+      /* 5) Store, immediate post-indexed.  */
+      immed_low = bits (arm_insn_r->arm_insn, 0, 3);
+      immed_high = bits (arm_insn_r->arm_insn, 8, 11);
+      offset_8 = (immed_high << 4) | immed_low;
+      reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
+      regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
+      /* Calculate target store address, Rn +/- Rm, register offset.  */
+      if (15 == arm_insn_r->opcode || 6 == arm_insn_r->opcode)
+        {
+          tgt_mem_addr = u_regval[0] + offset_8;
+        }
+      else
+        {
+          tgt_mem_addr = u_regval[0] - offset_8;
+        }
+      if (ARM_RECORD_STRH == str_type)
+        {
+          record_buf_mem[0] = 2;
+          record_buf_mem[1] = tgt_mem_addr;
+          arm_insn_r->mem_rec_count = 1;
+        }
+      else if (ARM_RECORD_STRD == str_type)
+        {
+          record_buf_mem[0] = 4;
+          record_buf_mem[1] = tgt_mem_addr;
+          record_buf_mem[2] = 4;
+          record_buf_mem[3] = tgt_mem_addr + 4;
+          arm_insn_r->mem_rec_count = 2;
+        }
+      /* Record Rn also as it changes.  */
+      *(record_buf) = bits (arm_insn_r->arm_insn, 16, 19);
+      arm_insn_r->reg_rec_count = 1;
+    }
+  else if (9 == arm_insn_r->opcode || 13 == arm_insn_r->opcode
+           || 0 == arm_insn_r->opcode || 4 == arm_insn_r->opcode)
+    {
+      /* 4) Store, register pre-indexed.  */
+      /* 6) Store, register post -indexed.  */
+      reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
+      reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
+      regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
+      regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
+      /* Calculate target store address, Rn +/- Rm, register offset.  */
+      if (13 == arm_insn_r->opcode || 4 == arm_insn_r->opcode)
+        {
+          tgt_mem_addr = u_regval[0] + u_regval[1];
+        }
+      else
+        {
+          tgt_mem_addr = u_regval[1] - u_regval[0];
+        }
+      if (ARM_RECORD_STRH == str_type)
+        {
+          record_buf_mem[0] = 2;
+          record_buf_mem[1] = tgt_mem_addr;
+          arm_insn_r->mem_rec_count = 1;
+        }
+      else if (ARM_RECORD_STRD == str_type)
+        {
+          record_buf_mem[0] = 4;
+          record_buf_mem[1] = tgt_mem_addr;
+          record_buf_mem[2] = 4;
+          record_buf_mem[3] = tgt_mem_addr + 4;
+          arm_insn_r->mem_rec_count = 2;
+        }
+      /* Record Rn also as it changes.  */
+      *(record_buf) = bits (arm_insn_r->arm_insn, 16, 19);
+      arm_insn_r->reg_rec_count = 1;
+    }
+  return 0;
+}
+
+/* Handling ARM extension space insns.  */
+
+static int
+arm_record_extension_space (insn_decode_record *arm_insn_r)
+{
+  uint32_t ret = 0;  /* Return value: -1:record failure ;  0:success  */
+  uint32_t opcode1 = 0, opcode2 = 0, insn_op1 = 0;
+  uint32_t record_buf[8], record_buf_mem[8];
+  uint32_t reg_src1 = 0;
+  uint32_t immed_high = 0, immed_low = 0,offset_8 = 0, tgt_mem_addr = 0;
+  struct regcache *reg_cache = arm_insn_r->regcache;
+  ULONGEST u_regval = 0;
+
+  gdb_assert (!INSN_RECORDED(arm_insn_r));
+  /* Handle unconditional insn extension space.  */
+
+  opcode1 = bits (arm_insn_r->arm_insn, 20, 27);
+  opcode2 = bits (arm_insn_r->arm_insn, 4, 7);
+  if (arm_insn_r->cond)
+    {
+      /* PLD has no affect on architectural state, it just affects
+         the caches.  */
+      if (5 == ((opcode1 & 0xE0) >> 5))
+        {
+          /* BLX(1) */
+          record_buf[0] = ARM_PS_REGNUM;
+          record_buf[1] = ARM_LR_REGNUM;
+          arm_insn_r->reg_rec_count = 2;
+        }
+      /* STC2, LDC2, MCR2, MRC2, CDP2: <TBD>, co-processor insn.  */
+    }
+
+
+  opcode1 = bits (arm_insn_r->arm_insn, 25, 27);
+  if (3 == opcode1 && bit (arm_insn_r->arm_insn, 4))
+    {
+      ret = -1;
+      /* Undefined instruction on ARM V5; need to handle if later 
+         versions define it.  */
+    }
+
+  opcode1 = bits (arm_insn_r->arm_insn, 24, 27);
+  opcode2 = bits (arm_insn_r->arm_insn, 4, 7);
+  insn_op1 = bits (arm_insn_r->arm_insn, 20, 23);
+
+  /* Handle arithmetic insn extension space.  */
+  if (!opcode1 && 9 == opcode2 && 1 != arm_insn_r->cond
+      && !INSN_RECORDED(arm_insn_r))
+    {
+      /* Handle MLA(S) and MUL(S).  */
+      if (0 <= insn_op1 && 3 >= insn_op1)
+      {
+        record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+        record_buf[1] = ARM_PS_REGNUM;
+        arm_insn_r->reg_rec_count = 2;
+      }
+      else if (4 <= insn_op1 && 15 >= insn_op1)
+      {
+        /* Handle SMLAL(S), SMULL(S), UMLAL(S), UMULL(S).  */
+        record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
+        record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
+        record_buf[2] = ARM_PS_REGNUM;
+        arm_insn_r->reg_rec_count = 3;
+      }
+    }
+
+  opcode1 = bits (arm_insn_r->arm_insn, 26, 27);
+  opcode2 = bits (arm_insn_r->arm_insn, 23, 24);
+  insn_op1 = bits (arm_insn_r->arm_insn, 21, 22);
+
+  /* Handle control insn extension space.  */
+
+  if (!opcode1 && 2 == opcode2 && !bit (arm_insn_r->arm_insn, 20)
+      && 1 != arm_insn_r->cond && !INSN_RECORDED(arm_insn_r))
+    {
+      if (!bit (arm_insn_r->arm_insn,25))
+        {
+          if (!bits (arm_insn_r->arm_insn, 4, 7))
+            {
+              if ((0 == insn_op1) || (2 == insn_op1))
+                {
+                  /* MRS.  */
+                  record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+                  arm_insn_r->reg_rec_count = 1;
+                }
+              else if (1 == insn_op1)
+                {
+                  /* CSPR is going to be changed.  */
+                  record_buf[0] = ARM_PS_REGNUM;
+                  arm_insn_r->reg_rec_count = 1;
+                }
+              else if (3 == insn_op1)
+                {
+                  /* SPSR is going to be changed.  */
+                  /* We need to get SPSR value, which is yet to be done.  */
+                  printf_unfiltered (_("Process record does not support "
+                                     "instruction  0x%0x at address %s.\n"),
+                                     arm_insn_r->arm_insn,
+                                     paddress (arm_insn_r->gdbarch, 
+                                     arm_insn_r->this_addr));
+                  return -1;
+                }
+            }
+          else if (1 == bits (arm_insn_r->arm_insn, 4, 7))
+            {
+              if (1 == insn_op1)
+                {
+                  /* BX.  */
+                  record_buf[0] = ARM_PS_REGNUM;
+                  arm_insn_r->reg_rec_count = 1;
+                }
+              else if (3 == insn_op1)
+                {
+                  /* CLZ.  */
+                  record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+                  arm_insn_r->reg_rec_count = 1;
+                }
+            }
+          else if (3 == bits (arm_insn_r->arm_insn, 4, 7))
+            {
+              /* BLX.  */
+              record_buf[0] = ARM_PS_REGNUM;
+              record_buf[1] = ARM_LR_REGNUM;
+              arm_insn_r->reg_rec_count = 2;
+            }
+          else if (5 == bits (arm_insn_r->arm_insn, 4, 7))
+            {
+              /* QADD, QSUB, QDADD, QDSUB */
+              record_buf[0] = ARM_PS_REGNUM;
+              record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
+              arm_insn_r->reg_rec_count = 2;
+            }
+          else if (7 == bits (arm_insn_r->arm_insn, 4, 7))
+            {
+              /* BKPT.  */
+              record_buf[0] = ARM_PS_REGNUM;
+              record_buf[1] = ARM_LR_REGNUM;
+              arm_insn_r->reg_rec_count = 2;
+
+              /* Save SPSR also;how?  */
+              printf_unfiltered (_("Process record does not support "
+                                  "instruction 0x%0x at address %s.\n"),
+                                  arm_insn_r->arm_insn,
+                  paddress (arm_insn_r->gdbarch, arm_insn_r->this_addr));
+              return -1;
+            }
+          else if(8 == bits (arm_insn_r->arm_insn, 4, 7) 
+                  || 10 == bits (arm_insn_r->arm_insn, 4, 7)
+                  || 12 == bits (arm_insn_r->arm_insn, 4, 7)
+                  || 14 == bits (arm_insn_r->arm_insn, 4, 7)
+                 )
+            {
+              if (0 == insn_op1 || 1 == insn_op1)
+                {
+                  /* SMLA<x><y>, SMLAW<y>, SMULW<y>.  */
+                  /* We dont do optimization for SMULW<y> where we
+                     need only Rd.  */
+                  record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+                  record_buf[1] = ARM_PS_REGNUM;
+                  arm_insn_r->reg_rec_count = 2;
+                }
+              else if (2 == insn_op1)
+                {
+                  /* SMLAL<x><y>.  */
+                  record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+                  record_buf[1] = bits (arm_insn_r->arm_insn, 16, 19);
+                  arm_insn_r->reg_rec_count = 2;
+                }
+              else if (3 == insn_op1)
+                {
+                  /* SMUL<x><y>.  */
+                  record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+                  arm_insn_r->reg_rec_count = 1;
+                }
+            }
+        }
+      else
+        {
+          /* MSR : immediate form.  */
+          if (1 == insn_op1)
+            {
+              /* CSPR is going to be changed.  */
+              record_buf[0] = ARM_PS_REGNUM;
+              arm_insn_r->reg_rec_count = 1;
+            }
+          else if (3 == insn_op1)
+            {
+              /* SPSR is going to be changed.  */
+              /* we need to get SPSR value, which is yet to be done  */
+              printf_unfiltered (_("Process record does not support "
+                                   "instruction 0x%0x at address %s.\n"),
+                                    arm_insn_r->arm_insn,
+                                    paddress (arm_insn_r->gdbarch, 
+                                    arm_insn_r->this_addr));
+              return -1;
+            }
+        }
+    }
+
+  opcode1 = bits (arm_insn_r->arm_insn, 25, 27);
+  opcode2 = bits (arm_insn_r->arm_insn, 20, 24);
+  insn_op1 = bits (arm_insn_r->arm_insn, 5, 6);
+
+  /* Handle load/store insn extension space.  */
+
+  if (!opcode1 && bit (arm_insn_r->arm_insn, 7) 
+      && bit (arm_insn_r->arm_insn, 4) && 1 != arm_insn_r->cond
+      && !INSN_RECORDED(arm_insn_r))
+    {
+      /* SWP/SWPB.  */
+      if (0 == insn_op1)
+        {
+          /* These insn, changes register and memory as well.  */
+          /* SWP or SWPB insn.  */
+          /* Get memory address given by Rn.  */
+          reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
+          regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
+          /* SWP insn ?, swaps word.  */
+          if (8 == arm_insn_r->opcode)
+            {
+              record_buf_mem[0] = 4;
+            }
+          else
+            {
+              /* SWPB insn, swaps only byte.  */
+              record_buf_mem[0] = 1;
+            }
+          record_buf_mem[1] = u_regval;
+          arm_insn_r->mem_rec_count = 1;
+          record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+          arm_insn_r->reg_rec_count = 1;
+        }
+      else if (1 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
+        {
+          /* STRH.  */
+          arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
+                          ARM_RECORD_STRH);
+        }
+      else if (2 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
+        {
+          /* LDRD.  */
+          record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+          record_buf[1] = record_buf[0] + 1;
+          arm_insn_r->reg_rec_count = 2;
+        }
+      else if (3 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
+        {
+          /* STRD.  */
+          arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
+                        ARM_RECORD_STRD);
+        }
+      else if (bit (arm_insn_r->arm_insn, 20) && insn_op1 <= 3)
+        {
+          /* LDRH, LDRSB, LDRSH.  */
+          record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+          arm_insn_r->reg_rec_count = 1;
+        }
+
+    }
+
+  opcode1 = bits (arm_insn_r->arm_insn, 23, 27);
+  if (24 == opcode1 && bit (arm_insn_r->arm_insn, 21)
+      && !INSN_RECORDED(arm_insn_r))
+    {
+      ret = -1;
+      /* Handle coprocessor insn extension space.  */
+    }
+
+  /* To be done for ARMv5 and later; as of now we return -1.  */
+  if (-1 == ret)
+    printf_unfiltered (_("Process record does not support instruction x%0x "
+                         "at address %s.\n"),arm_insn_r->arm_insn,
+                         paddress (arm_insn_r->gdbarch, arm_insn_r->this_addr));
+
+
+  REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
+  MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
+
+  return ret;
+}
+
+/* Handling opcode 000 insns.  */
+
+static int
+arm_record_data_proc_misc_ld_str (insn_decode_record *arm_insn_r)
+{
+  struct regcache *reg_cache = arm_insn_r->regcache;
+  uint32_t record_buf[8], record_buf_mem[8];
+  ULONGEST u_regval[2] = {0};
+
+  uint32_t reg_src1 = 0, reg_src2 = 0, reg_dest = 0;
+  uint32_t immed_high = 0, immed_low = 0, offset_8 = 0, tgt_mem_addr = 0;
+  uint32_t opcode1 = 0;
+
+  arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
+  arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
+  opcode1 = bits (arm_insn_r->arm_insn, 20, 24);
+
+  /* Data processing insn /multiply insn.  */
+  if (9 == arm_insn_r->decode
+      && ((4 <= arm_insn_r->opcode && 7 >= arm_insn_r->opcode)
+      ||  (0 == arm_insn_r->opcode || 1 == arm_insn_r->opcode)))
+    {
+      /* Handle multiply instructions.  */
+      /* MLA, MUL, SMLAL, SMULL, UMLAL, UMULL.  */
+        if (0 == arm_insn_r->opcode || 1 == arm_insn_r->opcode)
+          {
+            /* Handle MLA and MUL.  */
+            record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
+            record_buf[1] = ARM_PS_REGNUM;
+            arm_insn_r->reg_rec_count = 2;
+          }
+        else if (4 <= arm_insn_r->opcode && 7 >= arm_insn_r->opcode)
+          {
+            /* Handle SMLAL, SMULL, UMLAL, UMULL.  */
+            record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
+            record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
+            record_buf[2] = ARM_PS_REGNUM;
+            arm_insn_r->reg_rec_count = 3;
+          }
+    }
+  else if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM)
+           && (11 == arm_insn_r->decode || 13 == arm_insn_r->decode))
+    {
+      /* Handle misc load insns, as 20th bit  (L = 1).  */
+      /* LDR insn has a capability to do branching, if
+         MOV LR, PC is precceded by LDR insn having Rn as R15
+         in that case, it emulates branch and link insn, and hence we 
+         need to save CSPR and PC as well. I am not sure this is right
+         place; as opcode = 010 LDR insn make this happen, if R15 was
+         used.  */
+      reg_dest = bits (arm_insn_r->arm_insn, 12, 15);
+      if (15 != reg_dest)
+        {
+          record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+          arm_insn_r->reg_rec_count = 1;
+        }
+      else
+        {
+          record_buf[0] = reg_dest;
+          record_buf[1] = ARM_PS_REGNUM;
+          arm_insn_r->reg_rec_count = 2;
+        }
+    }
+  else if ((9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode)
+           && sbo_sbz (arm_insn_r->arm_insn, 5, 12, 0)
+           && sbo_sbz (arm_insn_r->arm_insn, 13, 4, 1)
+           && 2 == bits (arm_insn_r->arm_insn, 20, 21))
+    {
+      /* Handle MSR insn.  */
+      if (9 == arm_insn_r->opcode)
+        {
+          /* CSPR is going to be changed.  */
+          record_buf[0] = ARM_PS_REGNUM;
+          arm_insn_r->reg_rec_count = 1;
+        }
+      else
+        {
+          /* SPSR is going to be changed.  */
+          /* How to read SPSR value?  */
+          printf_unfiltered (_("Process record does not support instruction "
+                            "0x%0x at address %s.\n"),
+                            arm_insn_r->arm_insn,
+                        paddress (arm_insn_r->gdbarch, arm_insn_r->this_addr));
+          return -1;
+        }
+    }
+  else if (9 == arm_insn_r->decode
+           && (8 == arm_insn_r->opcode || 10 == arm_insn_r->opcode)
+           && !bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
+    {
+      /* Handling SWP, SWPB.  */
+      /* These insn, changes register and memory as well.  */
+      /* SWP or SWPB insn.  */
+
+      reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
+      regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
+      /* SWP insn ?, swaps word.  */
+      if (8 == arm_insn_r->opcode)
+        {
+          record_buf_mem[0] = 4;
+        }
+        else
+        {
+          /* SWPB insn, swaps only byte.  */
+          record_buf_mem[0] = 1;
+        }
+      record_buf_mem[1] = u_regval[0];
+      arm_insn_r->mem_rec_count = 1;
+      record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+      arm_insn_r->reg_rec_count = 1;
+    }
+  else if (3 == arm_insn_r->decode && 0x12 == opcode1
+           && sbo_sbz (arm_insn_r->arm_insn, 9, 12, 1))
+    {
+      /* Handle BLX, branch and link/exchange.  */
+      if (9 == arm_insn_r->opcode)
+      {
+        /* Branch is chosen by setting T bit of CSPR, bitp[0] of Rm,
+           and R14 stores the return address.  */
+        record_buf[0] = ARM_PS_REGNUM;
+        record_buf[1] = ARM_LR_REGNUM;
+        arm_insn_r->reg_rec_count = 2;
+      }
+    }
+  else if (7 == arm_insn_r->decode && 0x12 == opcode1)
+    {
+      /* Handle enhanced software breakpoint insn, BKPT.  */
+      /* CPSR is changed to be executed in ARM state,  disabling normal
+         interrupts, entering abort mode.  */
+      /* According to high vector configuration PC is set.  */
+      /* user hit breakpoint and type reverse, in
+         that case, we need to go back with previous CPSR and
+         Program Counter.  */
+      record_buf[0] = ARM_PS_REGNUM;
+      record_buf[1] = ARM_LR_REGNUM;
+      arm_insn_r->reg_rec_count = 2;
+
+      /* Save SPSR also; how?  */
+      printf_unfiltered (_("Process record does not support instruction "
+                           "0x%0x at address %s.\n"),arm_insn_r->arm_insn,
+                           paddress (arm_insn_r->gdbarch, 
+                           arm_insn_r->this_addr));
+      return -1;
+    }
+  else if (11 == arm_insn_r->decode
+           && !bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
+  {
+    /* Handle enhanced store insns and DSP insns (e.g. LDRD).  */
+
+    /* Handle str(x) insn */
+    arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
+                    ARM_RECORD_STRH);
+  }
+  else if (1 == arm_insn_r->decode && 0x12 == opcode1
+           && sbo_sbz (arm_insn_r->arm_insn, 9, 12, 1))
+    {
+      /* Handle BX, branch and link/exchange.  */
+      /* Branch is chosen by setting T bit of CSPR, bitp[0] of Rm.  */
+      record_buf[0] = ARM_PS_REGNUM;
+      arm_insn_r->reg_rec_count = 1;
+    }
+  else if (1 == arm_insn_r->decode && 0x16 == opcode1
+           && sbo_sbz (arm_insn_r->arm_insn, 9, 4, 1)
+           && sbo_sbz (arm_insn_r->arm_insn, 17, 4, 1))
+    {
+      /* Count leading zeros: CLZ.  */
+      record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+      arm_insn_r->reg_rec_count = 1;
+    }
+  else if (!bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM)
+           && (8 == arm_insn_r->opcode || 10 == arm_insn_r->opcode)
+           && sbo_sbz (arm_insn_r->arm_insn, 17, 4, 1)
+           && sbo_sbz (arm_insn_r->arm_insn, 1, 12, 0)
+          )
+    {
+      /* Handle MRS insn.  */
+      record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+      arm_insn_r->reg_rec_count = 1;
+    }
+  else if (arm_insn_r->opcode <= 15)
+    {
+      /* Normal data processing insns.  */
+      /* Out of 11 shifter operands mode, all the insn modifies destination
+         register, which is specified by 13-16 decode.  */
+      record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+      record_buf[1] = ARM_PS_REGNUM;
+      arm_insn_r->reg_rec_count = 2;
+    }
+  else
+    {
+      return -1;
+    }
+
+  REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
+  MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
+  return 0;
+}
+
+/* Handling opcode 001 insns.  */
+
+static int
+arm_record_data_proc_imm (insn_decode_record *arm_insn_r)
+{
+  uint32_t record_buf[8], record_buf_mem[8];
+
+  arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
+  arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
+
+  if ((9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode)
+      && 2 == bits (arm_insn_r->arm_insn, 20, 21)
+      && sbo_sbz (arm_insn_r->arm_insn, 13, 4, 1)
+     )
+    {
+      /* Handle MSR insn.  */
+      if (9 == arm_insn_r->opcode)
+        {
+          /* CSPR is going to be changed.  */
+          record_buf[0] = ARM_PS_REGNUM;
+          arm_insn_r->reg_rec_count = 1;
+        }
+      else
+        {
+          /* SPSR is going to be changed.  */
+        }
+    }
+  else if (arm_insn_r->opcode <= 15)
+    {
+      /* Normal data processing insns.  */
+      /* Out of 11 shifter operands mode, all the insn modifies destination
+         register, which is specified by 13-16 decode.  */
+      record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+      record_buf[1] = ARM_PS_REGNUM;
+      arm_insn_r->reg_rec_count = 2;
+    }
+  else
+    {
+      return -1;
+    }
+
+  REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
+  MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
+  return 0;
+}
+
+/* Handling opcode 010 insns.  */
+
+static int
+arm_record_ld_st_imm_offset (insn_decode_record *arm_insn_r)
+{
+  struct regcache *reg_cache = arm_insn_r->regcache;
+
+  uint32_t reg_src1 = 0 , reg_dest = 0;
+  uint32_t offset_12 = 0, tgt_mem_addr = 0;
+  uint32_t record_buf[8], record_buf_mem[8];
+
+  ULONGEST u_regval = 0;
+
+  arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
+  arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
+
+  if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
+    {
+      reg_dest = bits (arm_insn_r->arm_insn, 12, 15);
+      /* LDR insn has a capability to do branching, if
+         MOV LR, PC is precedded by LDR insn having Rn as R15
+         in that case, it emulates branch and link insn, and hence we
+         need to save CSPR and PC as well.  */
+      if (ARM_PC_REGNUM != reg_dest)
+        {
+          record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+          arm_insn_r->reg_rec_count = 1;
+        }
+      else
+        {
+          record_buf[0] = reg_dest;
+          record_buf[1] = ARM_PS_REGNUM;
+          arm_insn_r->reg_rec_count = 2;
+        }
+    }
+  else
+    {
+      /* Store, immediate offset, immediate pre-indexed,
+         immediate post-indexed.  */
+      reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
+      offset_12 = bits (arm_insn_r->arm_insn, 0, 11);
+      regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
+      /* U == 1 */
+      if (bit (arm_insn_r->arm_insn, 23))
+        {
+          tgt_mem_addr = u_regval + offset_12;
+        }
+      else
+        {
+          tgt_mem_addr = u_regval - offset_12;
+        }
+
+      switch (arm_insn_r->opcode)
+        {
+          /* STR.  */
+          case 8:
+          case 12:
+          /* STR.  */
+          case 9:
+          case 13:
+          /* STRT.  */    
+          case 1:
+          case 5:
+          /* STR.  */    
+          case 4:
+          case 0:
+            record_buf_mem[0] = 4;
+          break;
+
+          /* STRB.  */
+          case 10:
+          case 14:
+          /* STRB.  */    
+          case 11:
+          case 15:
+          /* STRBT.  */    
+          case 3:
+          case 7:
+          /* STRB.  */    
+          case 2:
+          case 6:
+            record_buf_mem[0] = 1;
+          break;
+
+          default:
+            gdb_assert_not_reached ("no decoding pattern found");
+          break;
+        }
+      record_buf_mem[1] = tgt_mem_addr;
+      arm_insn_r->mem_rec_count = 1;
+
+      if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
+          || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
+          || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
+          || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
+          || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
+          || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
+         )
+        {
+          /* We are handling pre-indexed mode; post-indexed mode;
+             where Rn is going to be changed.  */
+          record_buf[0] = reg_src1;
+          arm_insn_r->reg_rec_count = 1;
+        }
+    }
+
+  REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
+  MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
+  return 0;
+}
+
+/* Handling opcode 011 insns.  */
+
+static int
+arm_record_ld_st_reg_offset (insn_decode_record *arm_insn_r)
+{
+  struct regcache *reg_cache = arm_insn_r->regcache;
+
+  uint32_t shift_imm = 0;
+  uint32_t reg_src1 = 0, reg_src2 = 0, reg_dest = 0;
+  uint32_t offset_12 = 0, tgt_mem_addr = 0;
+  uint32_t record_buf[8], record_buf_mem[8];
+
+  LONGEST s_word;
+  ULONGEST u_regval[2];
+
+  arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
+  arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
+
+  /* Handle enhanced store insns and LDRD DSP insn,
+     order begins according to addressing modes for store insns
+     STRH insn.  */
+
+  /* LDR or STR?  */
+  if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
+    {
+      reg_dest = bits (arm_insn_r->arm_insn, 12, 15);
+      /* LDR insn has a capability to do branching, if
+         MOV LR, PC is precedded by LDR insn having Rn as R15
+         in that case, it emulates branch and link insn, and hence we
+         need to save CSPR and PC as well.  */
+      if (15 != reg_dest)
+        {
+          record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
+          arm_insn_r->reg_rec_count = 1;
+        }
+      else
+        {
+          record_buf[0] = reg_dest;
+          record_buf[1] = ARM_PS_REGNUM;
+          arm_insn_r->reg_rec_count = 2;
+        }
+    }
+  else
+    {
+      if (! bits (arm_insn_r->arm_insn, 4, 11))
+        {
+          /* Store insn, register offset and register pre-indexed,
+             register post-indexed.  */
+          /* Get Rm.  */
+          reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
+          /* Get Rn.  */
+          reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
+          regcache_raw_read_unsigned (reg_cache, reg_src1
+                                      , &u_regval[0]);
+          regcache_raw_read_unsigned (reg_cache, reg_src2
+                                      , &u_regval[1]);
+          if (15 == reg_src2)
+            {
+              /* If R15 was used as Rn, hence current PC+8.  */
+              /* Pre-indexed mode doesnt reach here ; illegal insn.  */
+                u_regval[0] = u_regval[0] + 8;
+            }
+          /* Calculate target store address, Rn +/- Rm, register offset.  */
+          /* U == 1.  */
+          if (bit (arm_insn_r->arm_insn, 23))
+            {
+              tgt_mem_addr = u_regval[0] + u_regval[1];
+            }
+          else
+            {
+              tgt_mem_addr = u_regval[1] - u_regval[0];
+            }
+
+          switch (arm_insn_r->opcode)
+            {
+              /* STR.  */
+              case 8:
+              case 12:
+              /* STR.  */    
+              case 9:
+              case 13:
+              /* STRT.  */
+              case 1:
+              case 5:
+              /* STR.  */
+              case 0:
+              case 4:
+                record_buf_mem[0] = 4;
+              break;
+
+              /* STRB.  */
+              case 10:
+              case 14:
+              /* STRB.  */
+              case 11:
+              case 15:
+              /* STRBT.  */    
+              case 3:
+              case 7:
+              /* STRB.  */
+              case 2:
+              case 6:
+                record_buf_mem[0] = 1;
+              break;
+
+              default:
+                gdb_assert_not_reached ("no decoding pattern found");
+              break;
+            }
+          record_buf_mem[1] = tgt_mem_addr;
+          arm_insn_r->mem_rec_count = 1;
+
+          if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
+              || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
+              || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
+              || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
+              || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
+              || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
+             )
+            {
+              /* Rn is going to be changed in pre-indexed mode and
+                 post-indexed mode as well.  */
+              record_buf[0] = reg_src2;
+              arm_insn_r->reg_rec_count = 1;
+            }
+        }
+      else
+        {
+          /* Store insn, scaled register offset; scaled pre-indexed.  */
+          offset_12 = bits (arm_insn_r->arm_insn, 5, 6);
+          /* Get Rm.  */
+          reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
+          /* Get Rn.  */
+          reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
+          /* Get shift_imm.  */
+          shift_imm = bits (arm_insn_r->arm_insn, 7, 11);
+          regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
+          regcache_raw_read_signed (reg_cache, reg_src1, &s_word);
+          regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
+          /* Offset_12 used as shift.  */
+          switch (offset_12)
+            {
+              case 0:
+                /* Offset_12 used as index.  */
+                offset_12 = u_regval[0] << shift_imm;
+              break;
+
+              case 1:
+                offset_12 = (!shift_imm)?0:u_regval[0] >> shift_imm;
+              break;
+
+              case 2:
+                if (!shift_imm)
+                  {
+                    if (bit (u_regval[0], 31))
+                      {
+                        offset_12 = 0xFFFFFFFF;
+                      }
+                    else
+                      {
+                        offset_12 = 0;
+                      }
+                  }
+                else
+                  {
+                    /* This is arithmetic shift.  */
+                    offset_12 = s_word >> shift_imm;
+                  }
+                break;
+
+              case 3:
+                if (!shift_imm)
+                  {
+                    regcache_raw_read_unsigned (reg_cache, ARM_PS_REGNUM,
+                                                &u_regval[1]);
+                    /* Get C flag value and shift it by 31.  */
+                    offset_12 = (((bit (u_regval[1], 29)) << 31) \
+                                  | (u_regval[0]) >> 1);
+                  }
+                else
+                  {
+                    offset_12 = (u_regval[0] >> shift_imm) \
+                                | (u_regval[0] <<
+                                (sizeof(uint32_t) - shift_imm));
+                  }
+              break;
+
+              default:
+                gdb_assert_not_reached ("no decoding pattern found");
+              break;
+            }
+
+          regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
+          /* bit U set.  */
+          if (bit (arm_insn_r->arm_insn, 23))
+            {
+              tgt_mem_addr = u_regval[1] + offset_12;
+            }
+          else
+            {
+              tgt_mem_addr = u_regval[1] - offset_12;
+            }
+
+          switch (arm_insn_r->opcode)
+            {
+              /* STR.  */
+              case 8:
+              case 12:
+              /* STR.  */    
+              case 9:
+              case 13:
+              /* STRT.  */
+              case 1:
+              case 5:
+              /* STR.  */
+              case 0:
+              case 4:
+                record_buf_mem[0] = 4;
+              break;
+
+              /* STRB.  */
+              case 10:
+              case 14:
+              /* STRB.  */
+              case 11:
+              case 15:
+              /* STRBT.  */    
+              case 3:
+              case 7:
+              /* STRB.  */
+              case 2:
+              case 6:
+                record_buf_mem[0] = 1;
+              break;
+
+              default:
+                gdb_assert_not_reached ("no decoding pattern found");
+              break;
+            }
+          record_buf_mem[1] = tgt_mem_addr;
+          arm_insn_r->mem_rec_count = 1;
+
+          if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
+              || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
+              || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
+              || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
+              || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
+              || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
+             )
+            {
+              /* Rn is going to be changed in register scaled pre-indexed
+                 mode,and scaled post indexed mode.  */
+              record_buf[0] = reg_src2;
+              arm_insn_r->reg_rec_count = 1;
+            }
+        }
+    }
+
+  REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
+  MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
+  return 0;
+}
+
+/* Handling opcode 100 insns.  */
+
+static int
+arm_record_ld_st_multiple (insn_decode_record *arm_insn_r)
+{
+  struct regcache *reg_cache = arm_insn_r->regcache;
+
+  uint32_t register_list[16] = {0}, register_count = 0, register_bits = 0;
+  uint32_t reg_src1 = 0, addr_mode = 0, no_of_regs = 0;
+  uint32_t start_address = 0, index = 0;
+  uint32_t record_buf[24], record_buf_mem[48];
+
+  ULONGEST u_regval[2] = {0};
+
+  /* This mode is exclusively for load and store multiple.  */
+  /* Handle incremenrt after/before and decrment after.before mode;
+     Rn is changing depending on W bit, but as of now we store Rn too
+     without optimization.  */
+
+  if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
+    {
+      /* LDM  (1,2,3) where LDM  (3) changes CPSR too.  */
+
+      if (bit (arm_insn_r->arm_insn, 20) && !bit (arm_insn_r->arm_insn, 22))
+        {
+          register_bits = bits (arm_insn_r->arm_insn, 0, 15);
+          no_of_regs = 15;
+        }
+      else
+        {
+          register_bits = bits (arm_insn_r->arm_insn, 0, 14);
+          no_of_regs = 14;
+        }
+      /* Get Rn.  */
+      reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
+      while (register_bits)
+      {
+        if (register_bits & 0x00000001)
+          register_list[register_count++] = 1;
+        register_bits = register_bits >> 1;
+      }
+
+        /* Extra space for Base Register and CPSR; wihtout optimization.  */
+        record_buf[register_count] = reg_src1;
+        record_buf[register_count + 1] = ARM_PS_REGNUM;
+        arm_insn_r->reg_rec_count = register_count + 2;
+
+        for (register_count = 0; register_count < no_of_regs; register_count++)
+          {
+            if  (register_list[register_count])
+              {
+                /* Register_count gives total no of registers
+                and dually working as reg number.  */
+                record_buf[index] = register_count;
+                index++;
+              }
+          }
+
+    }
+  else
+    {
+      /* It handles both STM(1) and STM(2).  */
+      addr_mode = bits (arm_insn_r->arm_insn, 23, 24);    
+
+      register_bits = bits (arm_insn_r->arm_insn, 0, 15);
+      /* Get Rn.  */
+      reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
+      regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
+      while (register_bits)
+        {
+          if (register_bits & 0x00000001)
+            register_count++;
+          register_bits = register_bits >> 1;
+        }
+
+      switch (addr_mode)
+        {
+          /* Decrement after.  */
+          case 0:                          
+            start_address = (u_regval[0]) - (register_count * 4) + 4;
+            arm_insn_r->mem_rec_count = register_count;
+            while (register_count)
+              {
+                record_buf_mem[(register_count * 2) - 1] = start_address;
+                record_buf_mem[(register_count * 2) - 2] = 4;
+                start_address = start_address + 4;
+                register_count--;
+              }
+          break;    
+
+          /* Increment after.  */
+          case 1:
+            start_address = u_regval[0];
+            arm_insn_r->mem_rec_count = register_count;
+            while (register_count)
+              {
+                record_buf_mem[(register_count * 2) - 1] = start_address;
+                record_buf_mem[(register_count * 2) - 2] = 4;
+                start_address = start_address + 4;
+                register_count--;
+              }
+          break;    
+
+          /* Decrement before.  */
+          case 2:
+
+            start_address = (u_regval[0]) - (register_count * 4);
+            arm_insn_r->mem_rec_count = register_count;
+            while (register_count)
+              {
+                record_buf_mem[(register_count * 2) - 1] = start_address;
+                record_buf_mem[(register_count * 2) - 2] = 4;
+                start_address = start_address + 4;
+                register_count--;
+              }
+          break;    
+
+          /* Increment before.  */
+          case 3:
+            start_address = u_regval[0] + 4;
+            arm_insn_r->mem_rec_count = register_count;
+            while (register_count)
+              {
+                record_buf_mem[(register_count * 2) - 1] = start_address;
+                record_buf_mem[(register_count * 2) - 2] = 4;
+                start_address = start_address + 4;
+                register_count--;
+              }
+          break;    
+
+          default:
+            gdb_assert_not_reached ("no decoding pattern found");
+          break;    
+        }
+
+      /* Base register also changes; based on condition and W bit.  */
+      /* We save it anyway without optimization.  */
+      record_buf[0] = reg_src1;
+      arm_insn_r->reg_rec_count = 1;
+    }
+
+  REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
+  MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
+  return 0;
+}
+
+/* Handling opcode 101 insns.  */
+
+static int
+arm_record_b_bl (insn_decode_record *arm_insn_r)
+{
+  uint32_t record_buf[8];
+
+  /* Handle B, BL, BLX(1) insns.  */
+  /* B simply branches so we do nothing here.  */
+  /* Note: BLX(1) doesnt fall here but instead it falls into
+     extension space.  */
+  if (bit (arm_insn_r->arm_insn, 24))
+  {
+    record_buf[0] = ARM_LR_REGNUM;
+    arm_insn_r->reg_rec_count = 1;
+  }
+
+  REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
+
+  return 0;
+}
+
+/* Handling opcode 110 insns.  */
+
+static int
+arm_record_coproc (insn_decode_record *arm_insn_r)
+{
+  printf_unfiltered (_("Process record does not support instruction "
+                    "0x%0x at address %s.\n"),arm_insn_r->arm_insn,
+                    paddress (arm_insn_r->gdbarch, arm_insn_r->this_addr));
+
+  return -1;
+}
+
+/* Handling opcode 111 insns.  */
+
+static int
+arm_record_coproc_data_proc (insn_decode_record *arm_insn_r)
+{
+  struct gdbarch_tdep *tdep = gdbarch_tdep (arm_insn_r->gdbarch);
+  struct regcache *reg_cache = arm_insn_r->regcache;
+  uint32_t ret = 0; /* function return value: -1:record failure ;  0:success  */
+
+  /* Handle SWI insn; system call would be handled over here.  */
+
+  arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 24, 27);
+  if (15 == arm_insn_r->opcode)
+  {
+    /* Handle arm syscall insn.  */
+    if (tdep->arm_swi_record != NULL)
+      {
+        ret = tdep->arm_swi_record(reg_cache);
+      }
+    else
+      {
+        printf_unfiltered (_("no syscall record support\n"));
+        ret = -1;
+      }
+  }
+
+  printf_unfiltered (_("Process record does not support instruction "
+                        "0x%0x at address %s.\n"),arm_insn_r->arm_insn,
+                        paddress (arm_insn_r->gdbarch, arm_insn_r->this_addr));
+  return ret;
+}
+
+/* Handling opcode 000 insns.  */
+
+static int
+thumb_record_shift_add_sub (insn_decode_record *thumb_insn_r)
+{
+  uint32_t record_buf[8];
+  uint32_t reg_src1 = 0;
+
+  reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
+
+  record_buf[0] = ARM_PS_REGNUM;
+  record_buf[1] = reg_src1;
+  thumb_insn_r->reg_rec_count = 2;
+
+  REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
+
+  return 0;
+}
+
+
+/* Handling opcode 001 insns.  */
+
+static int
+thumb_record_add_sub_cmp_mov (insn_decode_record *thumb_insn_r)
+{
+  uint32_t record_buf[8];
+  uint32_t reg_src1 = 0;
+
+  reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
+
+  record_buf[0] = ARM_PS_REGNUM;
+  record_buf[1] = reg_src1;
+  thumb_insn_r->reg_rec_count = 2;
+
+  REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
+
+  return 0;
+}
+
+/* Handling opcode 010 insns.  */
+
+static int
+thumb_record_ld_st_reg_offset (insn_decode_record *thumb_insn_r)
+{
+  struct regcache *reg_cache =  thumb_insn_r->regcache;
+  uint32_t record_buf[8], record_buf_mem[8];
+
+  uint32_t reg_src1 = 0, reg_src2 = 0;
+  uint32_t opcode1 = 0, opcode2 = 0, opcode3 = 0;
+
+  ULONGEST u_regval[2] = {0};
+
+  opcode1 = bits (thumb_insn_r->arm_insn, 10, 12);
+
+  if (bit (thumb_insn_r->arm_insn, 12))
+    {
+      /* Handle load/store register offset.  */
+      opcode2 = bits (thumb_insn_r->arm_insn, 9, 10);
+      if (opcode2 >= 12 && opcode2 <= 15)
+        {
+          /* LDR(2), LDRB(2) , LDRH(2), LDRSB, LDRSH.  */
+          reg_src1 = bits (thumb_insn_r->arm_insn,0, 2);
+          record_buf[0] = reg_src1;
+          thumb_insn_r->reg_rec_count = 1;
+        }
+      else if (opcode2 >= 8 && opcode2 <= 10)
+        {
+          /* STR(2), STRB(2), STRH(2) .  */
+          reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
+          reg_src2 = bits (thumb_insn_r->arm_insn, 6, 8);
+          regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
+          regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
+          if (8 == opcode2)
+            record_buf_mem[0] = 4;    /* STR (2).  */
+          else if (10 == opcode2)
+            record_buf_mem[0] = 1;    /*  STRB (2).  */
+          else if (9 == opcode2)
+            record_buf_mem[0] = 2;    /* STRH (2).  */
+          record_buf_mem[1] = u_regval[0] + u_regval[1];
+          thumb_insn_r->mem_rec_count = 1;
+        }
+    }
+  else if (bit (thumb_insn_r->arm_insn, 11))
+    {
+      /* Handle load from literal pool.  */
+      /* LDR(3).  */
+      reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
+      record_buf[0] = reg_src1;
+      thumb_insn_r->reg_rec_count = 1;
+    }
+  else if (opcode1)
+    {
+      opcode2 = bits (thumb_insn_r->arm_insn, 8, 9);
+      opcode3 = bits (thumb_insn_r->arm_insn, 0, 2);
+      if ((3 == opcode2) && (!opcode3))
+        {
+          /* Branch with exchange.  */
+          record_buf[0] = ARM_PS_REGNUM;
+          thumb_insn_r->reg_rec_count = 1;
+        }
+      else
+        {
+          /* Format 8; special data processing insns.  */
+          reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
+          record_buf[0] = ARM_PS_REGNUM;
+          record_buf[1] = reg_src1;
+          thumb_insn_r->reg_rec_count = 2;
+        }
+    }
+  else
+    {
+      /* Format 5; data processing insns.  */
+      reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
+      if (bit (thumb_insn_r->arm_insn, 7))
+        {
+          reg_src1 = reg_src1 + 8;
+        }
+      record_buf[0] = ARM_PS_REGNUM;
+      record_buf[1] = reg_src1;
+      thumb_insn_r->reg_rec_count = 2;
+    }
+
+  REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
+  MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
+             record_buf_mem);
+
+  return 0;
+}
+
+/* Handling opcode 001 insns.  */
+
+static int
+thumb_record_ld_st_imm_offset (insn_decode_record *thumb_insn_r)
+{
+  struct regcache *reg_cache = thumb_insn_r->regcache;
+  uint32_t record_buf[8], record_buf_mem[8];
+
+  uint32_t reg_src1 = 0;
+  uint32_t opcode = 0, immed_5 = 0;
+
+  ULONGEST u_regval = 0;
+
+  opcode = bits (thumb_insn_r->arm_insn, 11, 12);
+
+  if (opcode)
+    {
+      /* LDR(1).  */
+      reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
+      record_buf[0] = reg_src1;
+      thumb_insn_r->reg_rec_count = 1;
+    }
+  else
+    {
+      /* STR(1).  */
+      reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
+      immed_5 = bits (thumb_insn_r->arm_insn, 6, 10);
+      regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
+      record_buf_mem[0] = 4;
+      record_buf_mem[1] = u_regval + (immed_5 * 4);
+      thumb_insn_r->mem_rec_count = 1;
+    }
+
+  REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
+  MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count, 
+             record_buf_mem);
+
+  return 0;
+}
+
+/* Handling opcode 100 insns.  */
+
+static int
+thumb_record_ld_st_stack (insn_decode_record *thumb_insn_r)
+{
+  struct regcache *reg_cache = thumb_insn_r->regcache;
+  uint32_t record_buf[8], record_buf_mem[8];
+
+  uint32_t reg_src1 = 0;
+  uint32_t opcode = 0, immed_8 = 0, immed_5 = 0;
+
+  ULONGEST u_regval = 0;
+
+  opcode = bits (thumb_insn_r->arm_insn, 11, 12);
+
+  if (3 == opcode)
+    {
+      /* LDR(4).  */
+      reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
+      record_buf[0] = reg_src1;
+      thumb_insn_r->reg_rec_count = 1;
+    }
+  else if (1 == opcode)
+    {
+      /* LDRH(1).  */
+      reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
+      record_buf[0] = reg_src1;
+      thumb_insn_r->reg_rec_count = 1;
+    }
+  else if (2 == opcode)
+    {
+      /* STR(3).  */
+      immed_8 = bits (thumb_insn_r->arm_insn, 0, 7);
+      regcache_raw_read_unsigned (reg_cache, ARM_SP_REGNUM, &u_regval);
+      record_buf_mem[0] = 4;
+      record_buf_mem[1] = u_regval + (immed_8 * 4);
+      thumb_insn_r->mem_rec_count = 1;
+    }
+  else if (0 == opcode)
+    {
+      /* STRH(1).  */
+      immed_5 = bits (thumb_insn_r->arm_insn, 6, 10);
+      reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
+      regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
+      record_buf_mem[0] = 2;
+      record_buf_mem[1] = u_regval + (immed_5 * 2);
+      thumb_insn_r->mem_rec_count = 1;
+    }
+
+  REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
+  MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
+             record_buf_mem);
+
+  return 0;
+}
+
+/* Handling opcode 101 insns.  */
+
+static int
+thumb_record_misc (insn_decode_record *thumb_insn_r)
+{
+  struct regcache *reg_cache = thumb_insn_r->regcache;
+
+  uint32_t opcode = 0, opcode1 = 0, opcode2 = 0;
+  uint32_t register_bits = 0, register_count = 0;
+  uint32_t register_list[8] = {0}, index = 0, start_address = 0;
+  uint32_t record_buf[24], record_buf_mem[48];
+  uint32_t reg_src1;
+
+  ULONGEST u_regval = 0;
+
+  opcode = bits (thumb_insn_r->arm_insn, 11, 12);
+  opcode1 = bits (thumb_insn_r->arm_insn, 8, 12);
+  opcode2 = bits (thumb_insn_r->arm_insn, 9, 12);
+
+  if (14 == opcode2)
+    {
+      /* POP.  */
+      register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
+      while (register_bits)
+        {
+          if (register_bits & 0x00000001)
+            register_list[register_count++] = 1;
+          register_bits = register_bits >> 1;
+        }
+      record_buf[register_count] = ARM_PS_REGNUM;
+      record_buf[register_count + 1] = ARM_SP_REGNUM;
+      thumb_insn_r->reg_rec_count = register_count + 2;
+      for (register_count = 0; register_count < 8; register_count++)
+        {
+          if  (register_list[register_count])
+            {
+              record_buf[index] = register_count;
+              index++;
+            }
+        }
+    }
+  else if (10 == opcode2)
+    {
+      /* PUSH.  */
+      register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
+      regcache_raw_read_unsigned (reg_cache, ARM_PC_REGNUM, &u_regval);
+      while (register_bits)
+        {
+          if (register_bits & 0x00000001)
+            register_count++;
+          register_bits = register_bits >> 1;
+        }
+      start_address = u_regval -  \
+                  (4 * (bit (thumb_insn_r->arm_insn, 8) + register_count));
+      thumb_insn_r->mem_rec_count = register_count;
+      while (register_count)
+        {
+          record_buf_mem[(register_count * 2) - 1] = start_address;
+          record_buf_mem[(register_count * 2) - 2] = 4;
+          start_address = start_address + 4;
+          register_count--;
+        }
+      record_buf[0] = ARM_SP_REGNUM;
+      thumb_insn_r->reg_rec_count = 1;
+    }
+  else if (0x1E == opcode1)
+    {
+      /* BKPT insn.  */
+      /* Handle enhanced software breakpoint insn, BKPT.  */
+      /* CPSR is changed to be executed in ARM state,  disabling normal
+         interrupts, entering abort mode.  */
+      /* According to high vector configuration PC is set.  */
+      /* User hits breakpoint and type reverse, in that case, we need to go back with 
+      previous CPSR and Program Counter.  */
+      record_buf[0] = ARM_PS_REGNUM;
+      record_buf[1] = ARM_LR_REGNUM;
+      thumb_insn_r->reg_rec_count = 2;
+      /* We need to save SPSR value, which is not yet done.  */
+      printf_unfiltered (_("Process record does not support instruction "
+                           "0x%0x at address %s.\n"),
+                           thumb_insn_r->arm_insn,
+                           paddress (thumb_insn_r->gdbarch,
+                           thumb_insn_r->this_addr));
+      return -1;
+    }
+  else if ((0 == opcode) || (1 == opcode))
+    {
+      /* ADD(5), ADD(6).  */
+      reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
+      record_buf[0] = reg_src1;
+      thumb_insn_r->reg_rec_count = 1;
+    }
+  else if (2 == opcode)
+    {
+      /* ADD(7), SUB(4).  */
+      reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
+      record_buf[0] = ARM_SP_REGNUM;
+      thumb_insn_r->reg_rec_count = 1;
+    }
+
+  REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
+  MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
+             record_buf_mem);
+
+  return 0;
+}
+
+/* Handling opcode 110 insns.  */
+
+static int
+thumb_record_ldm_stm_swi (insn_decode_record *thumb_insn_r)                
+{
+  struct gdbarch_tdep *tdep = gdbarch_tdep (thumb_insn_r->gdbarch);
+  struct regcache *reg_cache = thumb_insn_r->regcache;
+
+  uint32_t ret = 0; /* function return value: -1:record failure ;  0:success  */
+  uint32_t reg_src1 = 0;
+  uint32_t opcode1 = 0, opcode2 = 0, register_bits = 0, register_count = 0;
+  uint32_t register_list[8] = {0}, index = 0, start_address = 0;
+  uint32_t record_buf[24], record_buf_mem[48];
+
+  ULONGEST u_regval = 0;
+
+  opcode1 = bits (thumb_insn_r->arm_insn, 8, 12);
+  opcode2 = bits (thumb_insn_r->arm_insn, 11, 12);
+
+  if (1 == opcode2)
+    {
+
+      /* LDMIA.  */
+      register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
+      /* Get Rn.  */
+      reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
+      while (register_bits)
+        {
+          if (register_bits & 0x00000001)
+            register_list[register_count++] = 1;
+          register_bits = register_bits >> 1;
+        }
+      record_buf[register_count] = reg_src1;
+      thumb_insn_r->reg_rec_count = register_count + 1;
+      for (register_count = 0; register_count < 8; register_count++)
+        {
+          if (register_list[register_count])
+            {
+              record_buf[index] = register_count;
+              index++;
+            }
+        }
+    }
+  else if (0 == opcode2)
+    {
+      /* It handles both STMIA.  */
+      register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
+      /* Get Rn.  */
+      reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
+      regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
+      while (register_bits)
+        {
+          if (register_bits & 0x00000001)
+            register_count++;
+          register_bits = register_bits >> 1;
+        }
+      start_address = u_regval;
+      thumb_insn_r->mem_rec_count = register_count;
+      while (register_count)
+        {
+          record_buf_mem[(register_count * 2) - 1] = start_address;
+          record_buf_mem[(register_count * 2) - 2] = 4;
+          start_address = start_address + 4;
+          register_count--;
+        }
+    }
+  else if (0x1F == opcode1)
+    {
+        /* Handle arm syscall insn.  */
+        if (tdep->arm_swi_record != NULL)
+          {
+            ret = tdep->arm_swi_record(reg_cache);
+          }
+        else
+          {
+            printf_unfiltered (_("no syscall record support\n"));
+            return -1;
+          }
+    }
+
+  /* B (1), conditional branch is automatically taken care in process_record,
+    as PC is saved there.  */
+
+  REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
+  MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
+             record_buf_mem);
+
+  return ret;
+}
+
+/* Handling opcode 111 insns.  */
+
+static int
+thumb_record_branch (insn_decode_record *thumb_insn_r)
+{
+  uint32_t record_buf[8];
+  uint32_t bits_h = 0;
+
+  bits_h = bits (thumb_insn_r->arm_insn, 11, 12);
+
+  if (2 == bits_h || 3 == bits_h)
+    {
+      /* BL */
+      record_buf[0] = ARM_LR_REGNUM;
+      thumb_insn_r->reg_rec_count = 1;
+    }
+  else if (1 == bits_h)
+    {
+      /* BLX(1). */
+      record_buf[0] = ARM_PS_REGNUM;
+      record_buf[1] = ARM_LR_REGNUM;
+      thumb_insn_r->reg_rec_count = 2;
+    }
+
+  /* B(2) is automatically taken care in process_record, as PC is 
+     saved there.  */
+
+  REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
+
+  return 0;     
+}
+
+
+/* Extracts arm/thumb/thumb2 insn depending on the size, and returns 0 on success 
+and positive val on fauilure.  */
+
+static int
+extract_arm_insn (insn_decode_record *insn_record, uint32_t insn_size)
+{
+  gdb_byte buf[insn_size];
+
+  memset (&buf[0], 0, insn_size);
+  
+  if (target_read_memory (insn_record->this_addr, &buf[0], insn_size))
+    return 1;
+  insn_record->arm_insn = (uint32_t) extract_unsigned_integer (&buf[0],
+                           insn_size, 
+                           gdbarch_byte_order (insn_record->gdbarch));
+  return 0;
+}
+
+typedef int (*sti_arm_hdl_fp_t) (insn_decode_record*);
+
+/* Decode arm/thumb insn depending on condition cods and opcodes; and
+   dispatch it.  */
+
+static int
+decode_insn (insn_decode_record *arm_record, record_type_t record_type,
+                uint32_t insn_size)
+{
+
+  /* (Starting from numerical 0); bits 25, 26, 27 decodes type of arm instruction.  */
+  static const sti_arm_hdl_fp_t const arm_handle_insn[8] =                    
+  {
+    arm_record_data_proc_misc_ld_str,   /* 000.  */
+    arm_record_data_proc_imm,           /* 001.  */
+    arm_record_ld_st_imm_offset,        /* 010.  */
+    arm_record_ld_st_reg_offset,        /* 011.  */
+    arm_record_ld_st_multiple,          /* 100.  */
+    arm_record_b_bl,                    /* 101.  */
+    arm_record_coproc,                  /* 110.  */
+    arm_record_coproc_data_proc         /* 111.  */
+  };
+
+  /* (Starting from numerical 0); bits 13,14,15 decodes type of thumb instruction.  */
+  static const sti_arm_hdl_fp_t const thumb_handle_insn[8] =
+  { \
+    thumb_record_shift_add_sub,        /* 000.  */
+    thumb_record_add_sub_cmp_mov,      /* 001.  */
+    thumb_record_ld_st_reg_offset,     /* 010.  */
+    thumb_record_ld_st_imm_offset,     /* 011.  */
+    thumb_record_ld_st_stack,          /* 100.  */
+    thumb_record_misc,                 /* 101.  */
+    thumb_record_ldm_stm_swi,          /* 110.  */
+    thumb_record_branch                /* 111.  */
+  };
+
+  uint32_t ret = 0;    /* return value: negative:failure   0:success.  */
+  uint32_t insn_id = 0;
+
+  if (extract_arm_insn (arm_record, insn_size))
+    {
+      if (record_debug)
+        {
+          printf_unfiltered (_("Process record: error reading memory at "
+                              "addr %s len = %d.\n"),
+          paddress (arm_record->gdbarch, arm_record->this_addr), insn_size);        
+        }
+      return -1;
+    }
+  else if (ARM_RECORD == record_type)
+    {
+      arm_record->cond = bits (arm_record->arm_insn, 28, 31);
+      insn_id = bits (arm_record->arm_insn, 25, 27);
+      ret = arm_record_extension_space (arm_record);
+      /* If this insn has fallen into extension space 
+         then we need not decode it anymore.  */
+      if (ret != -1 && !INSN_RECORDED(arm_record))
+        {
+          ret = arm_handle_insn[insn_id] (arm_record);
+        }
+    }
+  else if (THUMB_RECORD == record_type)
+    {
+      /* As thumb does not have condition codes, we set negative.  */
+      arm_record->cond = -1;
+      insn_id = bits (arm_record->arm_insn, 13, 15);
+      ret = thumb_handle_insn[insn_id] (arm_record);
+    }
+  else if (THUMB2_RECORD == record_type)
+    {
+      printf_unfiltered (_("Process record doesnt support thumb32 instruction "
+                           "0x%0x at address %s.\n"),arm_record->arm_insn,
+                           paddress (arm_record->gdbarch, 
+                           arm_record->this_addr));
+      ret = -1;
+    }
+  else
+    {
+      /* Throw assertion.  */
+      gdb_assert_not_reached ("not a valid instruction, could not decode");
+    }
+
+  return ret;
+}
+
+
+/* Cleans up local record registers and memory allocations.  */
+
+static void 
+deallocate_reg_mem (insn_decode_record *record)
+{
+  xfree (record->arm_regs);
+  xfree (record->arm_mems);    
+}
+
+
+/* Parse the current instruction and record the values of the registers and    
+   memory that will be changed in current instruction to record_arch_list".
+   Return -1 if something is wrong.  */
+
+int
+arm_process_record (struct gdbarch *gdbarch, struct regcache *regcache, 
+                        CORE_ADDR insn_addr)
+{
+
+  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+  uint32_t no_of_rec = 0;
+  uint32_t ret = 0;  /* return value: -1:record failure ;  0:success  */
+  ULONGEST t_bit = 0, insn_id = 0;
+
+  ULONGEST u_regval = 0;
+
+  insn_decode_record arm_record;
+
+  memset (&arm_record, 0, sizeof (insn_decode_record));
+  arm_record.regcache = regcache;
+  arm_record.this_addr = insn_addr;
+  arm_record.gdbarch = gdbarch;
+
+
+  if (record_debug > 1)
+    {
+      fprintf_unfiltered (gdb_stdlog, "Process record: arm_process_record "
+                                      "addr = %s\n",
+      paddress (gdbarch, arm_record.this_addr));
+    }
+
+  if (extract_arm_insn (&arm_record, 2))
+    {
+      if (record_debug)
+        {
+          printf_unfiltered (_("Process record: error reading memory at "
+                             "addr %s len = %d.\n"),
+                             paddress (arm_record.gdbarch, 
+                             arm_record.this_addr), 2);
+        }
+      return -1;
+    }
+
+  /* Check the insn, whether it is thumb or arm one.  */
+
+  t_bit = arm_psr_thumb_bit (arm_record.gdbarch);
+  regcache_raw_read_unsigned (arm_record.regcache, ARM_PS_REGNUM, &u_regval);
+
+
+  if (!(u_regval & t_bit))
+    {
+      /* We are decoding arm insn.  */
+      ret = decode_insn (&arm_record, ARM_RECORD, ARM_INSN_SIZE_BYTES);
+    }
+  else
+    {
+      insn_id = bits (arm_record.arm_insn, 11, 15);
+      /* is it thumb2 insn?  */
+      if ((0x1D == insn_id) || (0x1E == insn_id) || (0x1F == insn_id))
+        {
+          ret = decode_insn (&arm_record, THUMB2_RECORD, 
+                             THUMB2_INSN_SIZE_BYTES);
+        }
+      else
+        {
+          /* We are decoding thumb insn.  */
+          ret = decode_insn (&arm_record, THUMB_RECORD, THUMB_INSN_SIZE_BYTES);
+        }
+    }
+
+  if (0 == ret)
+    {
+      /* Record registers.  */
+      record_arch_list_add_reg (arm_record.regcache, ARM_PC_REGNUM);
+      if (arm_record.arm_regs)
+        {
+          for (no_of_rec = 0; no_of_rec < arm_record.reg_rec_count; no_of_rec++)
+            {
+              if (record_arch_list_add_reg (arm_record.regcache , 
+                                            arm_record.arm_regs[no_of_rec]))
+              ret = -1;
+            }
+        }
+      /* Record memories.  */
+      if (arm_record.arm_mems)
+        {
+          for (no_of_rec = 0; no_of_rec < arm_record.mem_rec_count; no_of_rec++)
+            {
+              if (record_arch_list_add_mem 
+                  ((CORE_ADDR)arm_record.arm_mems[no_of_rec].addr,
+                  arm_record.arm_mems[no_of_rec].len))
+                ret = -1;
+            }
+        }
+
+      if (record_arch_list_add_end ())
+        ret = -1;
+    }
+
+
+  deallocate_reg_mem (&arm_record);
+
+  return ret;
+}
+
diff --git a/gdb/arm-tdep.h b/gdb/arm-tdep.h
index 172fe74..97596d5 100644
--- a/gdb/arm-tdep.h
+++ b/gdb/arm-tdep.h
@@ -71,6 +71,10 @@ enum gdb_regnum {
    bits.  DWORD aligned they use 96 bits.  */
 #define FP_REGISTER_SIZE	12
 
+/* Say how long VFP double precision registers are.  Used for documentation
+   purposes and code readability.  These are fixed at 64 bits.  */
+#define VFP_REGISTER_SIZE	8
+
 /* Number of machine registers.  The only define actually required 
    is gdbarch_num_regs.  The other definitions are used for documentation
    purposes and code readability.  */
@@ -200,6 +204,9 @@ struct gdbarch_tdep
   /* Return the expected next PC if FRAME is stopped at a syscall
      instruction.  */
   CORE_ADDR (*syscall_next_pc) (struct frame_info *frame);
+
+   /* Parse swi insn args, sycall record.  */
+  int (*arm_swi_record) (struct regcache *regcache);
 };
 
 /* Structures used for displaced stepping.  */
@@ -330,6 +337,8 @@ extern int arm_psr_thumb_bit (struct gdbarch *);
    instruction?  */
 extern int arm_pc_is_thumb (struct gdbarch *, CORE_ADDR);
 
+extern int arm_process_record (struct gdbarch *gdbarch, 
+                               struct regcache *regcache, CORE_ADDR addr);
 /* Functions exported from armbsd-tdep.h.  */
 
 /* Return the appropriate register set for the core section identified
diff --git a/gdb/arm-wince-tdep.c b/gdb/arm-wince-tdep.c
index dabdf9e..5bc6473 100644
--- a/gdb/arm-wince-tdep.c
+++ b/gdb/arm-wince-tdep.c
@@ -44,7 +44,7 @@ arm_pe_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   ULONGEST indirect;
   struct minimal_symbol *indsym;
-  char *symname;
+  const char *symname;
   CORE_ADDR next_pc;
 
   /* The format of an ARM DLL trampoline is:
@@ -84,7 +84,7 @@ arm_pe_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
    the address of the instruction following that call.  Otherwise, it
    simply returns PC.  */
 
-CORE_ADDR
+static CORE_ADDR
 arm_wince_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
diff --git a/gdb/auto-load.c b/gdb/auto-load.c
new file mode 100644
index 0000000..87dd1e4
--- /dev/null
+++ b/gdb/auto-load.c
@@ -0,0 +1,1225 @@
+/* GDB routines for supporting auto-loaded scripts.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "auto-load.h"
+#include "progspace.h"
+#include "python/python.h"
+#include "gdb_regex.h"
+#include "ui-out.h"
+#include "filenames.h"
+#include "command.h"
+#include "observer.h"
+#include "objfiles.h"
+#include "exceptions.h"
+#include "cli/cli-script.h"
+#include "gdbcmd.h"
+#include "cli/cli-decode.h"
+#include "cli/cli-setshow.h"
+#include "gdb_vecs.h"
+#include "readline/tilde.h"
+#include "completer.h"
+#include "observer.h"
+#include "fnmatch.h"
+
+/* The suffix of per-objfile scripts to auto-load as non-Python command files.
+   E.g. When the program loads libfoo.so, look for libfoo-gdb.gdb.  */
+#define GDB_AUTO_FILE_NAME "-gdb.gdb"
+
+static void source_gdb_script_for_objfile (struct objfile *objfile, FILE *file,
+					   const char *filename);
+
+/* Value of the 'set debug auto-load' configuration variable.  */
+static int debug_auto_load = 0;
+
+/* "show" command for the debug_auto_load configuration variable.  */
+
+static void
+show_debug_auto_load (struct ui_file *file, int from_tty,
+		      struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file, _("Debugging output for files "
+			    "of 'set auto-load ...' is %s.\n"),
+		    value);
+}
+
+/* User-settable option to enable/disable auto-loading of GDB_AUTO_FILE_NAME
+   scripts:
+   set auto-load gdb-scripts on|off
+   This is true if we should auto-load associated scripts when an objfile
+   is opened, false otherwise.  */
+static int auto_load_gdb_scripts = 1;
+
+/* "show" command for the auto_load_gdb_scripts configuration variable.  */
+
+static void
+show_auto_load_gdb_scripts (struct ui_file *file, int from_tty,
+			    struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file, _("Auto-loading of canned sequences of commands "
+			    "scripts is %s.\n"),
+		    value);
+}
+
+/* Internal-use flag to enable/disable auto-loading.
+   This is true if we should auto-load python code when an objfile is opened,
+   false otherwise.
+
+   Both auto_load_scripts && global_auto_load must be true to enable
+   auto-loading.
+
+   This flag exists to facilitate deferring auto-loading during start-up
+   until after ./.gdbinit has been read; it may augment the search directories
+   used to find the scripts.  */
+int global_auto_load = 1;
+
+/* Auto-load .gdbinit file from the current directory?  */
+int auto_load_local_gdbinit = 1;
+
+/* Absolute pathname to the current directory .gdbinit, if it exists.  */
+char *auto_load_local_gdbinit_pathname = NULL;
+
+/* Boolean value if AUTO_LOAD_LOCAL_GDBINIT_PATHNAME has been loaded.  */
+int auto_load_local_gdbinit_loaded = 0;
+
+/* "show" command for the auto_load_local_gdbinit configuration variable.  */
+
+static void
+show_auto_load_local_gdbinit (struct ui_file *file, int from_tty,
+			      struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file, _("Auto-loading of .gdbinit script from current "
+			    "directory is %s.\n"),
+		    value);
+}
+
+/* Directory list from which to load auto-loaded scripts.  It is not checked
+   for absolute paths but they are strongly recommended.  It is initialized by
+   _initialize_auto_load.  */
+static char *auto_load_dir;
+
+/* "set" command for the auto_load_dir configuration variable.  */
+
+static void
+set_auto_load_dir (char *args, int from_tty, struct cmd_list_element *c)
+{
+  /* Setting the variable to "" resets it to the compile time defaults.  */
+  if (auto_load_dir[0] == '\0')
+    {
+      xfree (auto_load_dir);
+      auto_load_dir = xstrdup (AUTO_LOAD_DIR);
+    }
+}
+
+/* "show" command for the auto_load_dir configuration variable.  */
+
+static void
+show_auto_load_dir (struct ui_file *file, int from_tty,
+		    struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file, _("List of directories from which to load "
+			    "auto-loaded scripts is %s.\n"),
+		    value);
+}
+
+/* Directory list safe to hold auto-loaded files.  It is not checked for
+   absolute paths but they are strongly recommended.  It is initialized by
+   _initialize_auto_load.  */
+static char *auto_load_safe_path;
+
+/* Vector of directory elements of AUTO_LOAD_SAFE_PATH with each one normalized
+   by tilde_expand and possibly each entries has added its gdb_realpath
+   counterpart.  */
+static VEC (char_ptr) *auto_load_safe_path_vec;
+
+/* Expand $datadir and $debugdir in STRING according to the rules of
+   substitute_path_component.  Return vector from dirnames_to_char_ptr_vec,
+   this vector must be freed by free_char_ptr_vec by the caller.  */
+
+static VEC (char_ptr) *
+auto_load_expand_dir_vars (const char *string)
+{
+  VEC (char_ptr) *dir_vec;
+  char *s;
+
+  s = xstrdup (string);
+  substitute_path_component (&s, "$datadir", gdb_datadir);
+  substitute_path_component (&s, "$debugdir", debug_file_directory);
+
+  if (debug_auto_load && strcmp (s, string) != 0)
+    fprintf_unfiltered (gdb_stdlog,
+			_("auto-load: Expanded $-variables to \"%s\".\n"), s);
+
+  dir_vec = dirnames_to_char_ptr_vec (s);
+  xfree(s);
+
+  return dir_vec;
+}
+
+/* Update auto_load_safe_path_vec from current AUTO_LOAD_SAFE_PATH.  */
+
+static void
+auto_load_safe_path_vec_update (void)
+{
+  VEC (char_ptr) *dir_vec = NULL;
+  unsigned len;
+  int ix;
+
+  if (debug_auto_load)
+    fprintf_unfiltered (gdb_stdlog,
+			_("auto-load: Updating directories of \"%s\".\n"),
+			auto_load_safe_path);
+
+  free_char_ptr_vec (auto_load_safe_path_vec);
+
+  auto_load_safe_path_vec = auto_load_expand_dir_vars (auto_load_safe_path);
+  len = VEC_length (char_ptr, auto_load_safe_path_vec);
+
+  /* Apply tilde_expand and gdb_realpath to each AUTO_LOAD_SAFE_PATH_VEC
+     element.  */
+  for (ix = 0; ix < len; ix++)
+    {
+      char *dir = VEC_index (char_ptr, auto_load_safe_path_vec, ix);
+      char *expanded = tilde_expand (dir);
+      char *real_path = gdb_realpath (expanded);
+
+      /* Ensure the current entry is at least tilde_expand-ed.  */
+      VEC_replace (char_ptr, auto_load_safe_path_vec, ix, expanded);
+
+      if (debug_auto_load)
+	{
+	  if (strcmp (expanded, dir) == 0)
+	    fprintf_unfiltered (gdb_stdlog,
+				_("auto-load: Using directory \"%s\".\n"),
+				expanded);
+	  else
+	    fprintf_unfiltered (gdb_stdlog,
+				_("auto-load: Resolved directory \"%s\" "
+				  "as \"%s\".\n"),
+				dir, expanded);
+	}
+      xfree (dir);
+
+      /* If gdb_realpath returns a different content, append it.  */
+      if (strcmp (real_path, expanded) == 0)
+	xfree (real_path);
+      else
+	{
+	  VEC_safe_push (char_ptr, auto_load_safe_path_vec, real_path);
+
+	  if (debug_auto_load)
+	    fprintf_unfiltered (gdb_stdlog,
+				_("auto-load: And canonicalized as \"%s\".\n"),
+				real_path);
+	}
+    }
+}
+
+/* Variable gdb_datadir has been set.  Update content depending on $datadir.  */
+
+static void
+auto_load_gdb_datadir_changed (void)
+{
+  auto_load_safe_path_vec_update ();
+}
+
+/* "set" command for the auto_load_safe_path configuration variable.  */
+
+static void
+set_auto_load_safe_path (char *args, int from_tty, struct cmd_list_element *c)
+{
+  /* Setting the variable to "" resets it to the compile time defaults.  */
+  if (auto_load_safe_path[0] == '\0')
+    {
+      xfree (auto_load_safe_path);
+      auto_load_safe_path = xstrdup (AUTO_LOAD_SAFE_PATH);
+    }
+
+  auto_load_safe_path_vec_update ();
+}
+
+/* "show" command for the auto_load_safe_path configuration variable.  */
+
+static void
+show_auto_load_safe_path (struct ui_file *file, int from_tty,
+			  struct cmd_list_element *c, const char *value)
+{
+  const char *cs;
+
+  /* Check if user has entered either "/" or for example ":".
+     But while more complicate content like ":/foo" would still also
+     permit any location do not hide those.  */
+
+  for (cs = value; *cs && (*cs == DIRNAME_SEPARATOR || IS_DIR_SEPARATOR (*cs));
+       cs++);
+  if (*cs == 0)
+    fprintf_filtered (file, _("Auto-load files are safe to load from any "
+			      "directory.\n"));
+  else
+    fprintf_filtered (file, _("List of directories from which it is safe to "
+			      "auto-load files is %s.\n"),
+		      value);
+}
+
+/* "add-auto-load-safe-path" command for the auto_load_safe_path configuration
+   variable.  */
+
+static void
+add_auto_load_safe_path (char *args, int from_tty)
+{
+  char *s;
+
+  if (args == NULL || *args == 0)
+    error (_("\
+Directory argument required.\n\
+Use 'set auto-load safe-path /' for disabling the auto-load safe-path security.\
+"));
+
+  s = xstrprintf ("%s%c%s", auto_load_safe_path, DIRNAME_SEPARATOR, args);
+  xfree (auto_load_safe_path);
+  auto_load_safe_path = s;
+
+  auto_load_safe_path_vec_update ();
+}
+
+/* Implementation for filename_is_in_pattern overwriting the caller's FILENAME
+   and PATTERN.  */
+
+static int
+filename_is_in_pattern_1 (char *filename, char *pattern)
+{
+  size_t pattern_len = strlen (pattern);
+  size_t filename_len = strlen (filename);
+
+  if (debug_auto_load)
+    fprintf_unfiltered (gdb_stdlog, _("auto-load: Matching file \"%s\" "
+				      "to pattern \"%s\"\n"),
+			filename, pattern);
+
+  /* Trim trailing slashes ("/") from PATTERN.  Even for "d:\" paths as
+     trailing slashes are trimmed also from FILENAME it still matches
+     correctly.  */
+  while (pattern_len && IS_DIR_SEPARATOR (pattern[pattern_len - 1]))
+    pattern_len--;
+  pattern[pattern_len] = '\0';
+
+  /* Ensure auto_load_safe_path "/" matches any FILENAME.  On MS-Windows
+     platform FILENAME even after gdb_realpath does not have to start with
+     IS_DIR_SEPARATOR character, such as the 'C:\x.exe' filename.  */
+  if (pattern_len == 0)
+    {
+      if (debug_auto_load)
+	fprintf_unfiltered (gdb_stdlog,
+			    _("auto-load: Matched - empty pattern\n"));
+      return 1;
+    }
+
+  for (;;)
+    {
+      /* Trim trailing slashes ("/").  PATTERN also has slashes trimmed the
+         same way so they will match.  */
+      while (filename_len && IS_DIR_SEPARATOR (filename[filename_len - 1]))
+	filename_len--;
+      filename[filename_len] = '\0';
+      if (filename_len == 0)
+	{
+	  if (debug_auto_load)
+	    fprintf_unfiltered (gdb_stdlog,
+				_("auto-load: Not matched - pattern \"%s\".\n"),
+				pattern);
+	  return 0;
+	}
+
+      if (gdb_filename_fnmatch (pattern, filename, FNM_FILE_NAME | FNM_NOESCAPE)
+	  == 0)
+	{
+	  if (debug_auto_load)
+	    fprintf_unfiltered (gdb_stdlog, _("auto-load: Matched - file "
+					      "\"%s\" to pattern \"%s\".\n"),
+				filename, pattern);
+	  return 1;
+	}
+
+      /* Trim trailing FILENAME component.  */
+      while (filename_len > 0 && !IS_DIR_SEPARATOR (filename[filename_len - 1]))
+	filename_len--;
+    }
+}
+
+/* Return 1 if FILENAME matches PATTERN or if FILENAME resides in
+   a subdirectory of a directory that matches PATTERN.  Return 0 otherwise.
+   gdb_realpath normalization is never done here.  */
+
+static ATTRIBUTE_PURE int
+filename_is_in_pattern (const char *filename, const char *pattern)
+{
+  char *filename_copy, *pattern_copy;
+
+  filename_copy = alloca (strlen (filename) + 1);
+  strcpy (filename_copy, filename);
+  pattern_copy = alloca (strlen (pattern) + 1);
+  strcpy (pattern_copy, pattern);
+
+  return filename_is_in_pattern_1 (filename_copy, pattern_copy);
+}
+
+/* Return 1 if FILENAME belongs to one of directory components of
+   AUTO_LOAD_SAFE_PATH_VEC.  Return 0 otherwise.
+   auto_load_safe_path_vec_update is never called.
+   *FILENAME_REALP may be updated by gdb_realpath of FILENAME - it has to be
+   freed by the caller.  */
+
+static int
+filename_is_in_auto_load_safe_path_vec (const char *filename,
+					char **filename_realp)
+{
+  char *pattern;
+  int ix;
+
+  for (ix = 0; VEC_iterate (char_ptr, auto_load_safe_path_vec, ix, pattern);
+       ++ix)
+    if (*filename_realp == NULL && filename_is_in_pattern (filename, pattern))
+      break;
+  
+  if (pattern == NULL)
+    {
+      if (*filename_realp == NULL)
+	{
+	  *filename_realp = gdb_realpath (filename);
+	  if (debug_auto_load && strcmp (*filename_realp, filename) != 0)
+	    fprintf_unfiltered (gdb_stdlog,
+				_("auto-load: Resolved "
+				  "file \"%s\" as \"%s\".\n"),
+				filename, *filename_realp);
+	}
+
+      if (strcmp (*filename_realp, filename) != 0)
+	for (ix = 0;
+	     VEC_iterate (char_ptr, auto_load_safe_path_vec, ix, pattern); ++ix)
+	  if (filename_is_in_pattern (*filename_realp, pattern))
+	    break;
+    }
+
+  if (pattern != NULL)
+    {
+      if (debug_auto_load)
+	fprintf_unfiltered (gdb_stdlog, _("auto-load: File \"%s\" matches "
+					  "directory \"%s\".\n"),
+			    filename, pattern);
+      return 1;
+    }
+
+  return 0;
+}
+
+/* Return 1 if FILENAME is located in one of the directories of
+   AUTO_LOAD_SAFE_PATH.  Otherwise call warning and return 0.  FILENAME does
+   not have to be an absolute path.
+
+   Existence of FILENAME is not checked.  Function will still give a warning
+   even if the caller would quietly skip non-existing file in unsafe
+   directory.  */
+
+int
+file_is_auto_load_safe (const char *filename, const char *debug_fmt, ...)
+{
+  char *filename_real = NULL;
+  struct cleanup *back_to;
+
+  if (debug_auto_load)
+    {
+      va_list debug_args;
+
+      va_start (debug_args, debug_fmt);
+      vfprintf_unfiltered (gdb_stdlog, debug_fmt, debug_args);
+      va_end (debug_args);
+    }
+
+  back_to = make_cleanup (free_current_contents, &filename_real);
+
+  if (filename_is_in_auto_load_safe_path_vec (filename, &filename_real))
+    {
+      do_cleanups (back_to);
+      return 1;
+    }
+
+  auto_load_safe_path_vec_update ();
+  if (filename_is_in_auto_load_safe_path_vec (filename, &filename_real))
+    {
+      do_cleanups (back_to);
+      return 1;
+    }
+
+  warning (_("File \"%s\" auto-loading has been declined by your "
+	     "`auto-load safe-path' set to \"%s\"."),
+	   filename_real, auto_load_safe_path);
+
+  do_cleanups (back_to);
+  return 0;
+}
+
+/* Definition of script language for GDB canned sequences of commands.  */
+
+static const struct script_language script_language_gdb
+  = { GDB_AUTO_FILE_NAME, source_gdb_script_for_objfile };
+
+static void
+source_gdb_script_for_objfile (struct objfile *objfile, FILE *file,
+			       const char *filename)
+{
+  int is_safe;
+  struct auto_load_pspace_info *pspace_info;
+  volatile struct gdb_exception e;
+
+  is_safe = file_is_auto_load_safe (filename, _("auto-load: Loading canned "
+						"sequences of commands script "
+						"\"%s\" for objfile \"%s\".\n"),
+				    filename, objfile->name);
+
+  /* Add this script to the hash table too so "info auto-load gdb-scripts"
+     can print it.  */
+  pspace_info = get_auto_load_pspace_data_for_loading (current_program_space);
+  maybe_add_script (pspace_info, is_safe, filename, filename,
+		    &script_language_gdb);
+
+  if (!is_safe)
+    return;
+
+  TRY_CATCH (e, RETURN_MASK_ALL)
+    {
+      script_from_file (file, filename);
+    }
+  exception_print (gdb_stderr, e);
+}
+
+/* For scripts specified in .debug_gdb_scripts, multiple objfiles may load
+   the same script.  There's no point in loading the script multiple times,
+   and there can be a lot of objfiles and scripts, so we keep track of scripts
+   loaded this way.  */
+
+struct auto_load_pspace_info
+{
+  /* For each program space we keep track of loaded scripts.  */
+  struct htab *loaded_scripts;
+
+  /* Non-zero if we've issued the warning about an auto-load script not being
+     found.  We only want to issue this warning once.  */
+  int script_not_found_warning_printed;
+};
+
+/* Objects of this type are stored in the loaded script hash table.  */
+
+struct loaded_script
+{
+  /* Name as provided by the objfile.  */
+  const char *name;
+
+  /* Full path name or NULL if script wasn't found (or was otherwise
+     inaccessible).  */
+  const char *full_path;
+
+  /* Non-zero if this script has been loaded.  */
+  int loaded;
+
+  const struct script_language *language;
+};
+
+/* Per-program-space data key.  */
+static const struct program_space_data *auto_load_pspace_data;
+
+static void
+auto_load_pspace_data_cleanup (struct program_space *pspace, void *arg)
+{
+  struct auto_load_pspace_info *info;
+
+  info = program_space_data (pspace, auto_load_pspace_data);
+  if (info != NULL)
+    {
+      if (info->loaded_scripts)
+	htab_delete (info->loaded_scripts);
+      xfree (info);
+    }
+}
+
+/* Get the current autoload data.  If none is found yet, add it now.  This
+   function always returns a valid object.  */
+
+static struct auto_load_pspace_info *
+get_auto_load_pspace_data (struct program_space *pspace)
+{
+  struct auto_load_pspace_info *info;
+
+  info = program_space_data (pspace, auto_load_pspace_data);
+  if (info == NULL)
+    {
+      info = XZALLOC (struct auto_load_pspace_info);
+      set_program_space_data (pspace, auto_load_pspace_data, info);
+    }
+
+  return info;
+}
+
+/* Hash function for the loaded script hash.  */
+
+static hashval_t
+hash_loaded_script_entry (const void *data)
+{
+  const struct loaded_script *e = data;
+
+  return htab_hash_string (e->name) ^ htab_hash_pointer (e->language);
+}
+
+/* Equality function for the loaded script hash.  */
+
+static int
+eq_loaded_script_entry (const void *a, const void *b)
+{
+  const struct loaded_script *ea = a;
+  const struct loaded_script *eb = b;
+
+  return strcmp (ea->name, eb->name) == 0 && ea->language == eb->language;
+}
+
+/* Initialize the table to track loaded scripts.
+   Each entry is hashed by the full path name.  */
+
+static void
+init_loaded_scripts_info (struct auto_load_pspace_info *pspace_info)
+{
+  /* Choose 31 as the starting size of the hash table, somewhat arbitrarily.
+     Space for each entry is obtained with one malloc so we can free them
+     easily.  */
+
+  pspace_info->loaded_scripts = htab_create (31,
+					     hash_loaded_script_entry,
+					     eq_loaded_script_entry,
+					     xfree);
+
+  pspace_info->script_not_found_warning_printed = FALSE;
+}
+
+/* Wrapper on get_auto_load_pspace_data to also allocate the hash table
+   for loading scripts.  */
+
+struct auto_load_pspace_info *
+get_auto_load_pspace_data_for_loading (struct program_space *pspace)
+{
+  struct auto_load_pspace_info *info;
+
+  info = get_auto_load_pspace_data (pspace);
+  if (info->loaded_scripts == NULL)
+    init_loaded_scripts_info (info);
+
+  return info;
+}
+
+/* Add script NAME in LANGUAGE to hash table of PSPACE_INFO.  LOADED 1 if the
+   script has been (is going to) be loaded, 0 otherwise (such as if it has not
+   been found).  FULL_PATH is NULL if the script wasn't found.  The result is
+   true if the script was already in the hash table.  */
+
+int
+maybe_add_script (struct auto_load_pspace_info *pspace_info, int loaded,
+		  const char *name, const char *full_path,
+		  const struct script_language *language)
+{
+  struct htab *htab = pspace_info->loaded_scripts;
+  struct loaded_script **slot, entry;
+  int in_hash_table;
+
+  entry.name = name;
+  entry.language = language;
+  slot = (struct loaded_script **) htab_find_slot (htab, &entry, INSERT);
+  in_hash_table = *slot != NULL;
+
+  /* If this script is not in the hash table, add it.  */
+
+  if (! in_hash_table)
+    {
+      char *p;
+
+      /* Allocate all space in one chunk so it's easier to free.  */
+      *slot = xmalloc (sizeof (**slot)
+		       + strlen (name) + 1
+		       + (full_path != NULL ? (strlen (full_path) + 1) : 0));
+      p = ((char*) *slot) + sizeof (**slot);
+      strcpy (p, name);
+      (*slot)->name = p;
+      if (full_path != NULL)
+	{
+	  p += strlen (p) + 1;
+	  strcpy (p, full_path);
+	  (*slot)->full_path = p;
+	}
+      else
+	(*slot)->full_path = NULL;
+      (*slot)->loaded = loaded;
+      (*slot)->language = language;
+    }
+
+  return in_hash_table;
+}
+
+/* Clear the table of loaded section scripts.  */
+
+static void
+clear_section_scripts (void)
+{
+  struct program_space *pspace = current_program_space;
+  struct auto_load_pspace_info *info;
+
+  info = program_space_data (pspace, auto_load_pspace_data);
+  if (info != NULL && info->loaded_scripts != NULL)
+    {
+      htab_delete (info->loaded_scripts);
+      info->loaded_scripts = NULL;
+      info->script_not_found_warning_printed = FALSE;
+    }
+}
+
+/* Look for the auto-load script in LANGUAGE associated with OBJFILE and load
+   it.  */
+
+void
+auto_load_objfile_script (struct objfile *objfile,
+			  const struct script_language *language)
+{
+  char *realname;
+  char *filename, *debugfile;
+  int len;
+  FILE *input;
+  struct cleanup *cleanups;
+
+  realname = gdb_realpath (objfile->name);
+  len = strlen (realname);
+  filename = xmalloc (len + strlen (language->suffix) + 1);
+  memcpy (filename, realname, len);
+  strcpy (filename + len, language->suffix);
+
+  cleanups = make_cleanup (xfree, filename);
+  make_cleanup (xfree, realname);
+
+  input = fopen (filename, "r");
+  debugfile = filename;
+  if (debug_auto_load)
+    fprintf_unfiltered (gdb_stdlog, _("auto-load: Attempted file \"%s\" %s.\n"),
+			debugfile, input ? _("exists") : _("does not exist"));
+
+  if (!input)
+    {
+      VEC (char_ptr) *vec;
+      int ix;
+      char *dir;
+
+      /* Also try the same file in a subdirectory of gdb's data
+	 directory.  */
+
+      vec = auto_load_expand_dir_vars (auto_load_dir);
+      make_cleanup_free_char_ptr_vec (vec);
+
+      if (debug_auto_load)
+	fprintf_unfiltered (gdb_stdlog, _("auto-load: Searching 'set auto-load "
+					  "scripts-directory' path \"%s\".\n"),
+			    auto_load_dir);
+
+      for (ix = 0; VEC_iterate (char_ptr, vec, ix, dir); ++ix)
+	{
+	  debugfile = xmalloc (strlen (dir) + strlen (filename) + 1);
+	  strcpy (debugfile, dir);
+
+	  /* FILENAME is absolute, so we don't need a "/" here.  */
+	  strcat (debugfile, filename);
+
+	  make_cleanup (xfree, debugfile);
+	  input = fopen (debugfile, "r");
+	  if (debug_auto_load)
+	    fprintf_unfiltered (gdb_stdlog, _("auto-load: Attempted file "
+					      "\"%s\" %s.\n"),
+				debugfile,
+				input ? _("exists") : _("does not exist"));
+	  if (input != NULL)
+	    break;
+	}
+    }
+
+  if (input)
+    {
+      make_cleanup_fclose (input);
+
+      /* To preserve existing behaviour we don't check for whether the
+	 script was already in the table, and always load it.
+	 It's highly unlikely that we'd ever load it twice,
+	 and these scripts are required to be idempotent under multiple
+	 loads anyway.  */
+      language->source_script_for_objfile (objfile, input, debugfile);
+    }
+
+  do_cleanups (cleanups);
+}
+
+/* Load any auto-loaded scripts for OBJFILE.  */
+
+void
+load_auto_scripts_for_objfile (struct objfile *objfile)
+{
+  if (!global_auto_load)
+    return;
+
+  if (auto_load_gdb_scripts)
+    auto_load_objfile_script (objfile, &script_language_gdb);
+
+  gdbpy_load_auto_scripts_for_objfile (objfile);
+}
+
+/* This is a new_objfile observer callback to auto-load scripts.
+
+   Two flavors of auto-loaded scripts are supported.
+   1) based on the path to the objfile
+   2) from .debug_gdb_scripts section  */
+
+static void
+auto_load_new_objfile (struct objfile *objfile)
+{
+  if (!objfile)
+    {
+      /* OBJFILE is NULL when loading a new "main" symbol-file.  */
+      clear_section_scripts ();
+      return;
+    }
+
+  load_auto_scripts_for_objfile (objfile);
+}
+
+/* Collect scripts to be printed in a vec.  */
+
+typedef struct loaded_script *loaded_script_ptr;
+DEF_VEC_P (loaded_script_ptr);
+
+struct collect_matching_scripts_data
+{
+  VEC (loaded_script_ptr) **scripts_p;
+
+  const struct script_language *language;
+};
+
+/* Traversal function for htab_traverse.
+   Collect the entry if it matches the regexp.  */
+
+static int
+collect_matching_scripts (void **slot, void *info)
+{
+  struct loaded_script *script = *slot;
+  struct collect_matching_scripts_data *data = info;
+
+  if (script->language == data->language && re_exec (script->name))
+    VEC_safe_push (loaded_script_ptr, *data->scripts_p, script);
+
+  return 1;
+}
+
+/* Print SCRIPT.  */
+
+static void
+print_script (struct loaded_script *script)
+{
+  struct ui_out *uiout = current_uiout;
+  struct cleanup *chain;
+
+  chain = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
+
+  ui_out_field_string (uiout, "loaded", script->loaded ? "Yes" : "No");
+  ui_out_field_string (uiout, "script", script->name);
+  ui_out_text (uiout, "\n");
+
+  /* If the name isn't the full path, print it too.  */
+  if (script->full_path != NULL
+      && strcmp (script->name, script->full_path) != 0)
+    {
+      ui_out_text (uiout, "\tfull name: ");
+      ui_out_field_string (uiout, "full_path", script->full_path);
+      ui_out_text (uiout, "\n");
+    }
+
+  do_cleanups (chain);
+}
+
+/* Helper for info_auto_load_scripts to sort the scripts by name.  */
+
+static int
+sort_scripts_by_name (const void *ap, const void *bp)
+{
+  const struct loaded_script *a = *(const struct loaded_script **) ap;
+  const struct loaded_script *b = *(const struct loaded_script **) bp;
+
+  return FILENAME_CMP (a->name, b->name);
+}
+
+/* Special internal GDB value of auto_load_info_scripts's PATTERN identify
+   the "info auto-load XXX" command has been executed through the general
+   "info auto-load" invocation.  Extra newline will be printed if needed.  */
+char auto_load_info_scripts_pattern_nl[] = "";
+
+/* Implementation for "info auto-load gdb-scripts"
+   (and "info auto-load python-scripts").  List scripts in LANGUAGE matching
+   PATTERN.  FROM_TTY is the usual GDB boolean for user interactivity.  */
+
+void
+auto_load_info_scripts (char *pattern, int from_tty,
+			const struct script_language *language)
+{
+  struct ui_out *uiout = current_uiout;
+  struct auto_load_pspace_info *pspace_info;
+  struct cleanup *script_chain;
+  VEC (loaded_script_ptr) *scripts;
+  int nr_scripts;
+
+  dont_repeat ();
+
+  pspace_info = get_auto_load_pspace_data (current_program_space);
+
+  if (pattern && *pattern)
+    {
+      char *re_err = re_comp (pattern);
+
+      if (re_err)
+	error (_("Invalid regexp: %s"), re_err);
+    }
+  else
+    {
+      re_comp ("");
+    }
+
+  /* We need to know the number of rows before we build the table.
+     Plus we want to sort the scripts by name.
+     So first traverse the hash table collecting the matching scripts.  */
+
+  scripts = VEC_alloc (loaded_script_ptr, 10);
+  script_chain = make_cleanup (VEC_cleanup (loaded_script_ptr), &scripts);
+
+  if (pspace_info != NULL && pspace_info->loaded_scripts != NULL)
+    {
+      struct collect_matching_scripts_data data = { &scripts, language };
+
+      immediate_quit++;
+      /* Pass a pointer to scripts as VEC_safe_push can realloc space.  */
+      htab_traverse_noresize (pspace_info->loaded_scripts,
+			      collect_matching_scripts, &data);
+      immediate_quit--;
+    }
+
+  nr_scripts = VEC_length (loaded_script_ptr, scripts);
+
+  /* Table header shifted right by preceding "gdb-scripts:  " would not match
+     its columns.  */
+  if (nr_scripts > 0 && pattern == auto_load_info_scripts_pattern_nl)
+    ui_out_text (uiout, "\n");
+
+  make_cleanup_ui_out_table_begin_end (uiout, 2, nr_scripts,
+				       "AutoLoadedScriptsTable");
+
+  ui_out_table_header (uiout, 7, ui_left, "loaded", "Loaded");
+  ui_out_table_header (uiout, 70, ui_left, "script", "Script");
+  ui_out_table_body (uiout);
+
+  if (nr_scripts > 0)
+    {
+      int i;
+      loaded_script_ptr script;
+
+      qsort (VEC_address (loaded_script_ptr, scripts),
+	     VEC_length (loaded_script_ptr, scripts),
+	     sizeof (loaded_script_ptr), sort_scripts_by_name);
+      for (i = 0; VEC_iterate (loaded_script_ptr, scripts, i, script); ++i)
+	print_script (script);
+    }
+
+  do_cleanups (script_chain);
+
+  if (nr_scripts == 0)
+    {
+      if (pattern && *pattern)
+	ui_out_message (uiout, 0, "No auto-load scripts matching %s.\n",
+			pattern);
+      else
+	ui_out_message (uiout, 0, "No auto-load scripts.\n");
+    }
+}
+
+/* Wrapper for "info auto-load gdb-scripts".  */
+
+static void
+info_auto_load_gdb_scripts (char *pattern, int from_tty)
+{
+  auto_load_info_scripts (pattern, from_tty, &script_language_gdb);
+}
+
+/* Implement 'info auto-load local-gdbinit'.  */
+
+static void
+info_auto_load_local_gdbinit (char *args, int from_tty)
+{
+  if (auto_load_local_gdbinit_pathname == NULL)
+    printf_filtered (_("Local .gdbinit file was not found.\n"));
+  else if (auto_load_local_gdbinit_loaded)
+    printf_filtered (_("Local .gdbinit file \"%s\" has been loaded.\n"),
+		     auto_load_local_gdbinit_pathname);
+  else
+    printf_filtered (_("Local .gdbinit file \"%s\" has not been loaded.\n"),
+		     auto_load_local_gdbinit_pathname);
+}
+
+/* Return non-zero if SCRIPT_NOT_FOUND_WARNING_PRINTED of PSPACE_INFO was unset
+   before calling this function.  Always set SCRIPT_NOT_FOUND_WARNING_PRINTED
+   of PSPACE_INFO.  */
+
+int
+script_not_found_warning_print (struct auto_load_pspace_info *pspace_info)
+{
+  int retval = !pspace_info->script_not_found_warning_printed;
+
+  pspace_info->script_not_found_warning_printed = 1;
+
+  return retval;
+}
+
+/* The only valid "set auto-load" argument is off|0|no|disable.  */
+
+static void
+set_auto_load_cmd (char *args, int from_tty)
+{
+  struct cmd_list_element *list;
+  size_t length;
+
+  /* See parse_binary_operation in use by the sub-commands.  */
+
+  length = args ? strlen (args) : 0;
+
+  while (length > 0 && (args[length - 1] == ' ' || args[length - 1] == '\t'))
+    length--;
+
+  if (length == 0 || (strncmp (args, "off", length) != 0
+		      && strncmp (args, "0", length) != 0
+		      && strncmp (args, "no", length) != 0
+		      && strncmp (args, "disable", length) != 0))
+    error (_("Valid is only global 'set auto-load no'; "
+	     "otherwise check the auto-load sub-commands."));
+
+  for (list = *auto_load_set_cmdlist_get (); list != NULL; list = list->next)
+    if (list->var_type == var_boolean)
+      {
+	gdb_assert (list->type == set_cmd);
+	do_setshow_command (args, from_tty, list);
+      }
+}
+
+/* Initialize "set auto-load " commands prefix and return it.  */
+
+struct cmd_list_element **
+auto_load_set_cmdlist_get (void)
+{
+  static struct cmd_list_element *retval;
+
+  if (retval == NULL)
+    add_prefix_cmd ("auto-load", class_maintenance, set_auto_load_cmd, _("\
+Auto-loading specific settings.\n\
+Configure various auto-load-specific variables such as\n\
+automatic loading of Python scripts."),
+		    &retval, "set auto-load ",
+		    1/*allow-unknown*/, &setlist);
+
+  return &retval;
+}
+
+/* Command "show auto-load" displays summary of all the current
+   "show auto-load " settings.  */
+
+static void
+show_auto_load_cmd (char *args, int from_tty)
+{
+  cmd_show_list (*auto_load_show_cmdlist_get (), from_tty, "");
+}
+
+/* Initialize "show auto-load " commands prefix and return it.  */
+
+struct cmd_list_element **
+auto_load_show_cmdlist_get (void)
+{
+  static struct cmd_list_element *retval;
+
+  if (retval == NULL)
+    add_prefix_cmd ("auto-load", class_maintenance, show_auto_load_cmd, _("\
+Show auto-loading specific settings.\n\
+Show configuration of various auto-load-specific variables such as\n\
+automatic loading of Python scripts."),
+		    &retval, "show auto-load ",
+		    0/*allow-unknown*/, &showlist);
+
+  return &retval;
+}
+
+/* Command "info auto-load" displays whether the various auto-load files have
+   been loaded.  This is reimplementation of cmd_show_list which inserts
+   newlines at proper places.  */
+
+static void
+info_auto_load_cmd (char *args, int from_tty)
+{
+  struct cmd_list_element *list;
+  struct cleanup *infolist_chain;
+  struct ui_out *uiout = current_uiout;
+
+  infolist_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "infolist");
+
+  for (list = *auto_load_info_cmdlist_get (); list != NULL; list = list->next)
+    {
+      struct cleanup *option_chain
+	= make_cleanup_ui_out_tuple_begin_end (uiout, "option");
+
+      gdb_assert (!list->prefixlist);
+      gdb_assert (list->type == not_set_cmd);
+
+      ui_out_field_string (uiout, "name", list->name);
+      ui_out_text (uiout, ":  ");
+      cmd_func (list, auto_load_info_scripts_pattern_nl, from_tty);
+
+      /* Close the tuple.  */
+      do_cleanups (option_chain);
+    }
+
+  /* Close the tuple.  */
+  do_cleanups (infolist_chain);
+}
+
+/* Initialize "info auto-load " commands prefix and return it.  */
+
+struct cmd_list_element **
+auto_load_info_cmdlist_get (void)
+{
+  static struct cmd_list_element *retval;
+
+  if (retval == NULL)
+    add_prefix_cmd ("auto-load", class_info, info_auto_load_cmd, _("\
+Print current status of auto-loaded files.\n\
+Print whether various files like Python scripts or .gdbinit files have been\n\
+found and/or loaded."),
+		    &retval, "info auto-load ",
+		    0/*allow-unknown*/, &infolist);
+
+  return &retval;
+}
+
+void _initialize_auto_load (void);
+
+void
+_initialize_auto_load (void)
+{
+  struct cmd_list_element *cmd;
+
+  auto_load_pspace_data
+    = register_program_space_data_with_cleanup (auto_load_pspace_data_cleanup);
+
+  observer_attach_new_objfile (auto_load_new_objfile);
+
+  add_setshow_boolean_cmd ("gdb-scripts", class_support,
+			   &auto_load_gdb_scripts, _("\
+Enable or disable auto-loading of canned sequences of commands scripts."), _("\
+Show whether auto-loading of canned sequences of commands scripts is enabled."),
+			   _("\
+If enabled, canned sequences of commands are loaded when the debugger reads\n\
+an executable or shared library.\n\
+This options has security implications for untrusted inferiors."),
+			   NULL, show_auto_load_gdb_scripts,
+			   auto_load_set_cmdlist_get (),
+			   auto_load_show_cmdlist_get ());
+
+  add_cmd ("gdb-scripts", class_info, info_auto_load_gdb_scripts,
+	   _("Print the list of automatically loaded sequences of commands.\n\
+Usage: info auto-load gdb-scripts [REGEXP]"),
+	   auto_load_info_cmdlist_get ());
+
+  add_setshow_boolean_cmd ("local-gdbinit", class_support,
+			   &auto_load_local_gdbinit, _("\
+Enable or disable auto-loading of .gdbinit script in current directory."), _("\
+Show whether auto-loading .gdbinit script in current directory is enabled."),
+			   _("\
+If enabled, canned sequences of commands are loaded when debugger starts\n\
+from .gdbinit file in current directory.  Such files are deprecated,\n\
+use a script associated with inferior executable file instead.\n\
+This options has security implications for untrusted inferiors."),
+			   NULL, show_auto_load_local_gdbinit,
+			   auto_load_set_cmdlist_get (),
+			   auto_load_show_cmdlist_get ());
+
+  add_cmd ("local-gdbinit", class_info, info_auto_load_local_gdbinit,
+	   _("Print whether current directory .gdbinit file has been loaded.\n\
+Usage: info auto-load local-gdbinit"),
+	   auto_load_info_cmdlist_get ());
+
+  auto_load_dir = xstrdup (AUTO_LOAD_DIR);
+  add_setshow_optional_filename_cmd ("scripts-directory", class_support,
+				     &auto_load_dir, _("\
+Set the list of directories from which to load auto-loaded scripts."), _("\
+Show the list of directories from which to load auto-loaded scripts."), _("\
+Automatically loaded Python scripts and GDB scripts are located in one of the\n\
+directories listed by this option.  This option is ignored for the kinds of\n\
+scripts having 'set auto-load ... off'.  Directories listed here need to be\n\
+present also in the 'set auto-load safe-path' option."),
+				     set_auto_load_dir, show_auto_load_dir,
+				     auto_load_set_cmdlist_get (),
+				     auto_load_show_cmdlist_get ());
+
+  auto_load_safe_path = xstrdup (AUTO_LOAD_SAFE_PATH);
+  auto_load_safe_path_vec_update ();
+  add_setshow_optional_filename_cmd ("safe-path", class_support,
+				     &auto_load_safe_path, _("\
+Set the list of directories from which it is safe to auto-load files."), _("\
+Show the list of directories from which it is safe to auto-load files."), _("\
+Various files loaded automatically for the 'set auto-load ...' options must\n\
+be located in one of the directories listed by this option.  Warning will be\n\
+printed and file will not be used otherwise.\n\
+Setting this parameter to an empty list resets it to its default value.\n\
+Setting this parameter to '/' (without the quotes) allows any file\n\
+for the 'set auto-load ...' options.  Each directory can be also shell\n\
+wildcard pattern; '*' does not match directory separator.\n\
+This option is ignored for the kinds of files having 'set auto-load ... off'.\n\
+This options has security implications for untrusted inferiors."),
+				     set_auto_load_safe_path,
+				     show_auto_load_safe_path,
+				     auto_load_set_cmdlist_get (),
+				     auto_load_show_cmdlist_get ());
+  observer_attach_gdb_datadir_changed (auto_load_gdb_datadir_changed);
+
+  cmd = add_cmd ("add-auto-load-safe-path", class_support,
+		 add_auto_load_safe_path,
+		 _("Add entries to the list of directories from which it is safe "
+		   "to auto-load files.\n\
+See the commands 'set auto-load safe-path' and 'show auto-load safe-path' to\n\
+access the current full list setting."),
+		 &cmdlist);
+  set_cmd_completer (cmd, filename_completer);
+
+  add_setshow_boolean_cmd ("auto-load", class_maintenance,
+			   &debug_auto_load, _("\
+Set auto-load verifications debugging."), _("\
+Show auto-load verifications debugging."), _("\
+When non-zero, debugging output for files of 'set auto-load ...'\n\
+is displayed."),
+			    NULL, show_debug_auto_load,
+			    &setdebuglist, &showdebuglist);
+}
diff --git a/gdb/auto-load.h b/gdb/auto-load.h
new file mode 100644
index 0000000..16cad98
--- /dev/null
+++ b/gdb/auto-load.h
@@ -0,0 +1,61 @@
+/* GDB routines for supporting auto-loaded scripts.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef AUTO_LOAD_H
+#define AUTO_LOAD_H 1
+
+struct program_space;
+
+struct script_language
+{
+  const char *suffix;
+
+  void (*source_script_for_objfile) (struct objfile *objfile, FILE *file,
+				     const char *filename);
+};
+
+extern int global_auto_load;
+
+extern int auto_load_local_gdbinit;
+extern char *auto_load_local_gdbinit_pathname;
+extern int auto_load_local_gdbinit_loaded;
+
+extern struct auto_load_pspace_info *
+  get_auto_load_pspace_data_for_loading (struct program_space *pspace);
+extern int maybe_add_script (struct auto_load_pspace_info *pspace_info,
+			     int loaded, const char *name,
+			     const char *full_path,
+			     const struct script_language *language);
+extern void auto_load_objfile_script (struct objfile *objfile,
+				      const struct script_language *language);
+extern void load_auto_scripts_for_objfile (struct objfile *objfile);
+extern int
+  script_not_found_warning_print (struct auto_load_pspace_info *pspace_info);
+extern char auto_load_info_scripts_pattern_nl[];
+extern void auto_load_info_scripts (char *pattern, int from_tty,
+				    const struct script_language *language);
+
+extern struct cmd_list_element **auto_load_set_cmdlist_get (void);
+extern struct cmd_list_element **auto_load_show_cmdlist_get (void);
+extern struct cmd_list_element **auto_load_info_cmdlist_get (void);
+
+extern int file_is_auto_load_safe (const char *filename,
+				   const char *debug_fmt, ...);
+
+#endif /* AUTO_LOAD_H */
diff --git a/gdb/auxv.c b/gdb/auxv.c
index 23d1480..12dcb89 100644
--- a/gdb/auxv.c
+++ b/gdb/auxv.c
@@ -445,6 +445,10 @@ fprint_target_auxv (struct ui_file *file, struct target_ops *ops)
 	  TAG (AT_SECURE, _("Boolean, was exec setuid-like?"), dec);
 	  TAG (AT_SYSINFO, _("Special system info/entry points"), hex);
 	  TAG (AT_SYSINFO_EHDR, _("System-supplied DSO's ELF header"), hex);
+	  TAG (AT_L1I_CACHESHAPE, _("L1 Instruction cache information"), hex);
+	  TAG (AT_L1D_CACHESHAPE, _("L1 Data cache information"), hex);
+	  TAG (AT_L2_CACHESHAPE, _("L2 cache information"), hex);
+	  TAG (AT_L3_CACHESHAPE, _("L3 cache information"), hex);
 	  TAG (AT_SUN_UID, _("Effective user ID"), dec);
 	  TAG (AT_SUN_RUID, _("Real user ID"), dec);
 	  TAG (AT_SUN_GID, _("Effective group ID"), dec);
@@ -483,7 +487,7 @@ fprint_target_auxv (struct ui_file *file, struct target_ops *ops)
 
 	    get_user_print_options (&opts);
 	    if (opts.addressprint)
-	      fprintf_filtered (file, "%s", paddress (target_gdbarch, val));
+	      fprintf_filtered (file, "%s ", paddress (target_gdbarch, val));
 	    val_print_string (builtin_type (target_gdbarch)->builtin_char,
 			      NULL, val, -1, file, &opts);
 	    fprintf_filtered (file, "\n");
diff --git a/gdb/avr-tdep.c b/gdb/avr-tdep.c
index 34b0baf..864d288 100644
--- a/gdb/avr-tdep.c
+++ b/gdb/avr-tdep.c
@@ -742,7 +742,6 @@ avr_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR pc_beg, CORE_ADDR pc_end,
 	0xcd, 0xb7,		/* in r28,__SP_L__ */
 	0xde, 0xb7		/* in r29,__SP_H__ */
       };
-      unsigned short insn1;
 
       if (vpc + sizeof (img) < len
 	  && memcmp (prologue + vpc, img, sizeof (img)) == 0)
@@ -902,7 +901,7 @@ avr_breakpoint_from_pc (struct gdbarch *gdbarch,
    from WRITEBUF into REGCACHE.  */
 
 static enum return_value_convention
-avr_return_value (struct gdbarch *gdbarch, struct type *func_type,
+avr_return_value (struct gdbarch *gdbarch, struct value *function,
 		  struct type *valtype, struct regcache *regcache,
 		  gdb_byte *readbuf, const gdb_byte *writebuf)
 {
diff --git a/gdb/ax-gdb.c b/gdb/ax-gdb.c
index 31e91b9..845153d 100644
--- a/gdb/ax-gdb.c
+++ b/gdb/ax-gdb.c
@@ -41,10 +41,14 @@
 #include "tracepoint.h"
 #include "cp-support.h"
 #include "arch-utils.h"
+#include "cli/cli-utils.h"
+#include "linespec.h"
 
 #include "valprint.h"
 #include "c-lang.h"
 
+#include "format.h"
+
 /* To make sense of this file, you should read doc/agentexpr.texi.
    Then look at the types and enums in ax-gdb.h.  For the code itself,
    look at gen_expr, towards the bottom; that's the main function that
@@ -95,8 +99,6 @@ static void gen_int_literal (struct agent_expr *ax,
 			     struct axs_value *value,
 			     LONGEST k, struct type *type);
 
-
-static void require_rvalue (struct agent_expr *ax, struct axs_value *value);
 static void gen_usual_unary (struct expression *exp, struct agent_expr *ax,
 			     struct axs_value *value);
 static int type_wider_than (struct type *type1, struct type *type2);
@@ -157,8 +159,6 @@ static void gen_repeat (struct expression *exp, union exp_element **pc,
 static void gen_sizeof (struct expression *exp, union exp_element **pc,
 			struct agent_expr *ax, struct axs_value *value,
 			struct type *size_type);
-static void gen_expr (struct expression *exp, union exp_element **pc,
-		      struct agent_expr *ax, struct axs_value *value);
 static void gen_expr_binop_rest (struct expression *exp,
 				 enum exp_opcode op, union exp_element **pc,
 				 struct agent_expr *ax,
@@ -515,6 +515,9 @@ gen_fetch (struct agent_expr *ax, struct type *type)
       ax_trace_quick (ax, TYPE_LENGTH (type));
     }
 
+  if (TYPE_CODE (type) == TYPE_CODE_RANGE)
+    type = TYPE_TARGET_TYPE (type);
+
   switch (TYPE_CODE (type))
     {
     case TYPE_CODE_PTR:
@@ -553,12 +556,11 @@ gen_fetch (struct agent_expr *ax, struct type *type)
       break;
 
     default:
-      /* Either our caller shouldn't have asked us to dereference that
-         pointer (other code's fault), or we're not implementing
-         something we should be (this code's fault).  In any case,
-         it's a bug the user shouldn't see.  */
-      internal_error (__FILE__, __LINE__,
-		      _("gen_fetch: bad type code"));
+      /* Our caller requested us to dereference a pointer from an unsupported
+	 type.  Error out and give callers a chance to handle the failure
+	 gracefully.  */
+      error (_("gen_fetch: Unsupported type code `%s'."),
+	     TYPE_NAME (type));
     }
 }
 
@@ -789,7 +791,7 @@ gen_int_literal (struct agent_expr *ax, struct axs_value *value, LONGEST k,
 /* Take what's on the top of the stack (as described by VALUE), and
    try to make an rvalue out of it.  Signal an error if we can't do
    that.  */
-static void
+void
 require_rvalue (struct agent_expr *ax, struct axs_value *value)
 {
   /* Only deal with scalars, structs and such may be too large
@@ -878,12 +880,6 @@ gen_usual_unary (struct expression *exp, struct agent_expr *ax,
     case TYPE_CODE_STRUCT:
     case TYPE_CODE_UNION:
       return;
-
-      /* If the value is an enum or a bool, call it an integer.  */
-    case TYPE_CODE_ENUM:
-    case TYPE_CODE_BOOL:
-      value->type = builtin_type (exp->gdbarch)->builtin_int;
-      break;
     }
 
   /* If the value is an lvalue, dereference it.  */
@@ -1477,7 +1473,7 @@ gen_struct_ref_recursive (struct expression *exp, struct agent_expr *ax,
 
   for (i = TYPE_NFIELDS (type) - 1; i >= nbases; i--)
     {
-      char *this_name = TYPE_FIELD_NAME (type, i);
+      const char *this_name = TYPE_FIELD_NAME (type, i);
 
       if (this_name)
 	{
@@ -1625,7 +1621,7 @@ gen_struct_elt_for_reference (struct expression *exp,
 
   for (i = TYPE_NFIELDS (t) - 1; i >= TYPE_N_BASECLASSES (t); i--)
     {
-      char *t_field_name = TYPE_FIELD_NAME (t, i);
+      const char *t_field_name = TYPE_FIELD_NAME (t, i);
 
       if (t_field_name && strcmp (t_field_name, fieldname) == 0)
 	{
@@ -1807,7 +1803,7 @@ gen_sizeof (struct expression *exp, union exp_element **pc,
 /* XXX: i18n */
 /* A gen_expr function written by a Gen-X'er guy.
    Append code for the subexpression of EXPR starting at *POS_P to AX.  */
-static void
+void
 gen_expr (struct expression *exp, union exp_element **pc,
 	  struct agent_expr *ax, struct axs_value *value)
 {
@@ -2042,7 +2038,8 @@ gen_expr (struct expression *exp, union exp_element **pc,
 
     case OP_INTERNALVAR:
       {
-	const char *name = internalvar_name ((*pc)[1].internalvar);
+	struct internalvar *var = (*pc)[1].internalvar;
+	const char *name = internalvar_name (var);
 	struct trace_state_variable *tsv;
 
 	(*pc) += 3;
@@ -2056,7 +2053,7 @@ gen_expr (struct expression *exp, union exp_element **pc,
 	    value->kind = axs_rvalue;
 	    value->type = builtin_type (exp->gdbarch)->builtin_long_long;
 	  }
-	else
+	else if (! compile_internalvar_to_ax (var, ax, value))
 	  error (_("$%s is not a trace state variable; GDB agent "
 		   "expressions cannot use convenience variables."), name);
       }
@@ -2178,7 +2175,6 @@ gen_expr (struct expression *exp, union exp_element **pc,
 
     case OP_THIS:
       {
-	char *this_name;
 	struct symbol *sym, *func;
 	struct block *b;
 	const struct language_defn *lang;
@@ -2221,7 +2217,7 @@ gen_expr (struct expression *exp, union exp_element **pc,
 
     default:
       error (_("Unsupported operator %s (%d) in expression."),
-	     op_string (op), op);
+	     op_name (exp, op), op);
     }
 }
 
@@ -2511,41 +2507,86 @@ gen_trace_for_return_address (CORE_ADDR scope, struct gdbarch *gdbarch)
   return ax;
 }
 
+/* Given a collection of printf-style arguments, generate code to
+   evaluate the arguments and pass everything to a special
+   bytecode.  */
+
+struct agent_expr *
+gen_printf (CORE_ADDR scope, struct gdbarch *gdbarch,
+	    CORE_ADDR function, LONGEST channel,
+	    char *format, int fmtlen,
+	    struct format_piece *frags,
+	    int nargs, struct expression **exprs)
+{
+  struct expression *expr;
+  struct cleanup *old_chain = 0;
+  struct agent_expr *ax = new_agent_expr (gdbarch, scope);
+  union exp_element *pc;
+  struct axs_value value;
+  int i, tem, bot, fr, flen;
+  char *fmt;
+
+  old_chain = make_cleanup_free_agent_expr (ax);
+
+  /* Evaluate and push the args on the stack in reverse order,
+     for simplicity of collecting them on the target side.  */
+  for (tem = nargs - 1; tem >= 0; --tem)
+    {
+      pc = exprs[tem]->elts;
+      /* We're computing values, not doing side effects.  */
+      trace_kludge = 0;
+      value.optimized_out = 0;
+      gen_expr (exprs[tem], &pc, ax, &value);
+      require_rvalue (ax, &value);
+    }
+
+  /* Push function and channel.  */
+  ax_const_l (ax, channel);
+  ax_const_l (ax, function);
+
+  /* Issue the printf bytecode proper.  */
+  ax_simple (ax, aop_printf);
+  ax_simple (ax, nargs);
+  ax_string (ax, format, fmtlen);
+
+  /* And terminate.  */
+  ax_simple (ax, aop_end);
+
+  /* We have successfully built the agent expr, so cancel the cleanup
+     request.  If we add more cleanups that we always want done, this
+     will have to get more complicated.  */
+  discard_cleanups (old_chain);
+
+  return ax;
+}
+
 static void
-agent_command (char *exp, int from_tty)
+agent_eval_command_one (char *exp, int eval, CORE_ADDR pc)
 {
   struct cleanup *old_chain = 0;
   struct expression *expr;
   struct agent_expr *agent;
-  struct frame_info *fi = get_current_frame ();	/* need current scope */
 
-  /* We don't deal with overlay debugging at the moment.  We need to
-     think more carefully about this.  If you copy this code into
-     another command, change the error message; the user shouldn't
-     have to know anything about agent expressions.  */
-  if (overlay_debugging)
-    error (_("GDB can't do agent expression translation with overlays."));
-
-  if (exp == 0)
-    error_no_arg (_("expression to translate"));
-
-  trace_string_kludge = 0;
-  if (*exp == '/')
-    exp = decode_agent_options (exp);
+  if (!eval)
+    {
+      trace_string_kludge = 0;
+      if (*exp == '/')
+        exp = decode_agent_options (exp);
+    }
 
-  /* Recognize the return address collection directive specially.  Note
-     that it is not really an expression of any sort.  */
-  if (strcmp (exp, "$_ret") == 0)
+  if (!eval && strcmp (exp, "$_ret") == 0)
     {
-      agent = gen_trace_for_return_address (get_frame_pc (fi),
-					    get_current_arch ());
+      agent = gen_trace_for_return_address (pc, get_current_arch ());
       old_chain = make_cleanup_free_agent_expr (agent);
     }
   else
     {
-      expr = parse_expression (exp);
+      expr = parse_exp_1 (&exp, pc, block_for_pc (pc), 0);
       old_chain = make_cleanup (free_current_contents, &expr);
-      agent = gen_trace_for_expr (get_frame_pc (fi), expr);
+      if (eval)
+	agent = gen_eval_for_expr (pc, expr);
+      else
+	agent = gen_trace_for_expr (pc, expr);
       make_cleanup_free_agent_expr (agent);
     }
 
@@ -2559,6 +2600,59 @@ agent_command (char *exp, int from_tty)
   dont_repeat ();
 }
 
+static void
+agent_command_1 (char *exp, int eval)
+{
+  /* We don't deal with overlay debugging at the moment.  We need to
+     think more carefully about this.  If you copy this code into
+     another command, change the error message; the user shouldn't
+     have to know anything about agent expressions.  */
+  if (overlay_debugging)
+    error (_("GDB can't do agent expression translation with overlays."));
+
+  if (exp == 0)
+    error_no_arg (_("expression to translate"));
+
+  if (check_for_argument (&exp, "-at", sizeof ("-at") - 1))
+    {
+      struct linespec_result canonical;
+      int ix;
+      struct linespec_sals *iter;
+      struct cleanup *old_chain;
+
+      exp = skip_spaces (exp);
+      init_linespec_result (&canonical);
+      decode_line_full (&exp, DECODE_LINE_FUNFIRSTLINE,
+			(struct symtab *) NULL, 0, &canonical,
+			NULL, NULL);
+      old_chain = make_cleanup_destroy_linespec_result (&canonical);
+      exp = skip_spaces (exp);
+      if (exp[0] == ',')
+        {
+	  exp++;
+	  exp = skip_spaces (exp);
+	}
+      for (ix = 0; VEC_iterate (linespec_sals, canonical.sals, ix, iter); ++ix)
+        {
+	  int i;
+
+	  for (i = 0; i < iter->sals.nelts; i++)
+	    agent_eval_command_one (exp, eval, iter->sals.sals[i].pc);
+        }
+      do_cleanups (old_chain);
+    }
+  else
+    agent_eval_command_one (exp, eval, get_frame_pc (get_current_frame ()));
+
+  dont_repeat ();
+}
+
+static void
+agent_command (char *exp, int from_tty)
+{
+  agent_command_1 (exp, 0);
+}
+
 /* Parse the given expression, compile it into an agent expression
    that does direct evaluation, and display the resulting
    expression.  */
@@ -2566,10 +2660,24 @@ agent_command (char *exp, int from_tty)
 static void
 agent_eval_command (char *exp, int from_tty)
 {
+  agent_command_1 (exp, 1);
+}
+
+/* Parse the given expression, compile it into an agent expression
+   that does a printf, and display the resulting expression.  */
+
+static void
+maint_agent_printf_command (char *exp, int from_tty)
+{
   struct cleanup *old_chain = 0;
   struct expression *expr;
+  struct expression *argvec[100];
   struct agent_expr *agent;
   struct frame_info *fi = get_current_frame ();	/* need current scope */
+  char *cmdrest;
+  char *format_start, *format_end;
+  struct format_piece *fpieces;
+  int nargs;
 
   /* We don't deal with overlay debugging at the moment.  We need to
      think more carefully about this.  If you copy this code into
@@ -2581,9 +2689,52 @@ agent_eval_command (char *exp, int from_tty)
   if (exp == 0)
     error_no_arg (_("expression to translate"));
 
-  expr = parse_expression (exp);
-  old_chain = make_cleanup (free_current_contents, &expr);
-  agent = gen_eval_for_expr (get_frame_pc (fi), expr);
+  cmdrest = exp;
+
+  cmdrest = skip_spaces (cmdrest);
+
+  if (*cmdrest++ != '"')
+    error (_("Must start with a format string."));
+
+  format_start = cmdrest;
+
+  fpieces = parse_format_string (&cmdrest);
+
+  old_chain = make_cleanup (free_format_pieces_cleanup, &fpieces);
+
+  format_end = cmdrest;
+
+  if (*cmdrest++ != '"')
+    error (_("Bad format string, non-terminated '\"'."));
+  
+  cmdrest = skip_spaces (cmdrest);
+
+  if (*cmdrest != ',' && *cmdrest != 0)
+    error (_("Invalid argument syntax"));
+
+  if (*cmdrest == ',')
+    cmdrest++;
+  cmdrest = skip_spaces (cmdrest);
+
+  nargs = 0;
+  while (*cmdrest != '\0')
+    {
+      char *cmd1;
+
+      cmd1 = cmdrest;
+      expr = parse_exp_1 (&cmd1, 0, (struct block *) 0, 1);
+      argvec[nargs] = expr;
+      ++nargs;
+      cmdrest = cmd1;
+      if (*cmdrest == ',')
+	++cmdrest;
+      /* else complain? */
+    }
+
+
+  agent = gen_printf (get_frame_pc (fi), get_current_arch (), 0, 0,
+		      format_start, format_end - format_start,
+		      fpieces, nargs, argvec);
   make_cleanup_free_agent_expr (agent);
   ax_reqs (agent);
   ax_print (gdb_stdout, agent);
@@ -2603,12 +2754,23 @@ void
 _initialize_ax_gdb (void)
 {
   add_cmd ("agent", class_maintenance, agent_command,
-	   _("Translate an expression into "
-	     "remote agent bytecode for tracing."),
+	   _("\
+Translate an expression into remote agent bytecode for tracing.\n\
+Usage: maint agent [-at location,] EXPRESSION\n\
+If -at is given, generate remote agent bytecode for this location.\n\
+If not, generate remote agent bytecode for current frame pc address."),
 	   &maintenancelist);
 
   add_cmd ("agent-eval", class_maintenance, agent_eval_command,
+	   _("\
+Translate an expression into remote agent bytecode for evaluation.\n\
+Usage: maint agent-eval [-at location,] EXPRESSION\n\
+If -at is given, generate remote agent bytecode for this location.\n\
+If not, generate remote agent bytecode for current frame pc address."),
+	   &maintenancelist);
+
+  add_cmd ("agent-printf", class_maintenance, maint_agent_printf_command,
 	   _("Translate an expression into remote "
-	     "agent bytecode for evaluation."),
+	     "agent bytecode for evaluation and display the bytecodes."),
 	   &maintenancelist);
 }
diff --git a/gdb/ax-gdb.h b/gdb/ax-gdb.h
index 48c35a4..c357fb6 100644
--- a/gdb/ax-gdb.h
+++ b/gdb/ax-gdb.h
@@ -110,6 +110,17 @@ extern struct agent_expr *gen_trace_for_return_address (CORE_ADDR,
 
 extern struct agent_expr *gen_eval_for_expr (CORE_ADDR, struct expression *);
 
+extern void gen_expr (struct expression *exp, union exp_element **pc,
+		      struct agent_expr *ax, struct axs_value *value);
+
+extern void require_rvalue (struct agent_expr *ax, struct axs_value *value);
+
+struct format_piece;
+extern struct agent_expr *gen_printf (CORE_ADDR, struct gdbarch *,
+				      CORE_ADDR, LONGEST, char *, int,
+				      struct format_piece *,
+				      int, struct expression **);
+
 extern int trace_kludge;
 extern int trace_string_kludge;
 
diff --git a/gdb/ax-general.c b/gdb/ax-general.c
index 4f1ea20..6ea6f14 100644
--- a/gdb/ax-general.c
+++ b/gdb/ax-general.c
@@ -330,6 +330,30 @@ ax_tsv (struct agent_expr *x, enum agent_op op, int num)
   x->buf[x->len + 2] = (num) & 0xff;
   x->len += 3;
 }
+
+/* Append a string to the expression.  Note that the string is going
+   into the bytecodes directly, not on the stack.  As a precaution,
+   include both length as prefix, and terminate with a NUL.  (The NUL
+   is counted in the length.)  */
+
+void
+ax_string (struct agent_expr *x, char *str, int slen)
+{
+  int i;
+
+  /* Make sure the string length is reasonable.  */
+  if (slen < 0 || slen > 0xffff)
+    internal_error (__FILE__, __LINE__, 
+		    _("ax-general.c (ax_string): string "
+		      "length is %d, out of allowed range"), slen);
+
+  grow_expr (x, 2 + slen + 1);
+  x->buf[x->len++] = ((slen + 1) >> 8) & 0xff;
+  x->buf[x->len++] = (slen + 1) & 0xff;
+  for (i = 0; i < slen; ++i)
+    x->buf[x->len++] = str[i];
+  x->buf[x->len++] = '\0';
+}
 

 
 
@@ -391,6 +415,19 @@ ax_print (struct ui_file *f, struct agent_expr *x)
 	  print_longest (f, 'd', 0,
 			 read_const (x, i + 1, aop_map[op].op_size));
 	}
+      /* Handle the complicated printf arguments specially.  */
+      else if (op == aop_printf)
+	{
+	  int slen, nargs;
+
+	  i++;
+	  nargs = x->buf[i++];
+	  slen = x->buf[i++];
+	  slen = slen * 256 + x->buf[i++];
+	  fprintf_filtered (f, _(" \"%s\", %d args"),
+			    &(x->buf[i]), nargs);
+	  i += slen - 1;
+	}
       fprintf_filtered (f, "\n");
       i += 1 + aop_map[op].op_size;
 
diff --git a/gdb/ax.h b/gdb/ax.h
index a25a3d1..368f727 100644
--- a/gdb/ax.h
+++ b/gdb/ax.h
@@ -20,6 +20,7 @@
 #define AGENTEXPR_H
 
 #include "doublest.h"		/* For DOUBLEST.  */
+#include "vec.h"
 
 /* It's sometimes useful to be able to debug programs that you can't
    really stop for more than a fraction of a second.  To this end, the
@@ -144,6 +145,12 @@ struct agent_expr
     unsigned char *reg_mask;
   };
 
+/* Pointer to an agent_expr structure.  */
+typedef struct agent_expr *agent_expr_p;
+
+/* Vector of pointers to agent expressions.  */
+DEF_VEC_P (agent_expr_p);
+
 /* The actual values of the various bytecode operations.  */
 
 enum agent_op
@@ -212,6 +219,9 @@ extern void ax_reg_mask (struct agent_expr *ax, int reg);
 
 /* Assemble code to operate on a trace state variable.  */
 extern void ax_tsv (struct agent_expr *expr, enum agent_op op, int num);
+
+/* Append a string to the bytecode stream.  */
+extern void ax_string (struct agent_expr *x, char *str, int slen);
 

 
 /* Functions for printing out expressions, and otherwise debugging
diff --git a/gdb/bfin-linux-tdep.c b/gdb/bfin-linux-tdep.c
index 53eb98d..ae6d45c 100644
--- a/gdb/bfin-linux-tdep.c
+++ b/gdb/bfin-linux-tdep.c
@@ -103,7 +103,6 @@ bfin_linux_sigframe_init (const struct tramp_frame *self,
   CORE_ADDR sp = get_frame_sp (this_frame);
   CORE_ADDR pc = get_frame_pc (this_frame);
   CORE_ADDR sigcontext = sp + SIGCONTEXT_OFFSET;
-  struct frame_id this_id;
   const int *reg_offset = bfin_linux_sigcontext_reg_offset;
   int i;
 
diff --git a/gdb/bfin-tdep.c b/gdb/bfin-tdep.c
index a48758d..fb2ead0 100644
--- a/gdb/bfin-tdep.c
+++ b/gdb/bfin-tdep.c
@@ -663,7 +663,7 @@ bfin_store_return_value (struct type *type,
 
 static enum return_value_convention
 bfin_return_value (struct gdbarch *gdbarch,
-		   struct type *func_type,
+		   struct value *function,
 		   struct type *type,
 		   struct regcache *regcache,
 		   gdb_byte *readbuf,
diff --git a/gdb/block.c b/gdb/block.c
index 57ab4c2..a0f82ec 100644
--- a/gdb/block.c
+++ b/gdb/block.c
@@ -103,50 +103,28 @@ block_inlined_p (const struct block *bl)
   return BLOCK_FUNCTION (bl) != NULL && SYMBOL_INLINED (BLOCK_FUNCTION (bl));
 }
 
-/* Return the blockvector immediately containing the innermost lexical
-   block containing the specified pc value and section, or 0 if there
-   is none.  PBLOCK is a pointer to the block.  If PBLOCK is NULL, we
-   don't pass this information back to the caller.  */
+/* A helper function that checks whether PC is in the blockvector BL.
+   It returns the containing block if there is one, or else NULL.  */
 
-struct blockvector *
-blockvector_for_pc_sect (CORE_ADDR pc, struct obj_section *section,
-			 struct block **pblock, struct symtab *symtab)
+static struct block *
+find_block_in_blockvector (struct blockvector *bl, CORE_ADDR pc)
 {
   struct block *b;
   int bot, top, half;
-  struct blockvector *bl;
-
-  if (symtab == 0)		/* if no symtab specified by caller */
-    {
-      /* First search all symtabs for one whose file contains our pc */
-      symtab = find_pc_sect_symtab (pc, section);
-      if (symtab == 0)
-	return 0;
-    }
-
-  bl = BLOCKVECTOR (symtab);
-
-  /* Then search that symtab for the smallest block that wins.  */
 
   /* If we have an addrmap mapping code addresses to blocks, then use
      that.  */
   if (BLOCKVECTOR_MAP (bl))
-    {
-      b = addrmap_find (BLOCKVECTOR_MAP (bl), pc);
-      if (b)
-        {
-          if (pblock)
-            *pblock = b;
-          return bl;
-        }
-      else
-        return 0;
-    }
-
+    return addrmap_find (BLOCKVECTOR_MAP (bl), pc);
 
   /* Otherwise, use binary search to find the last block that starts
-     before PC.  */
-  bot = 0;
+     before PC.
+     Note: GLOBAL_BLOCK is block 0, STATIC_BLOCK is block 1.
+     They both have the same START,END values.
+     Historically this code would choose STATIC_BLOCK over GLOBAL_BLOCK but the
+     fact that this choice was made was subtle, now we make it explicit.  */
+  gdb_assert (BLOCKVECTOR_NBLOCKS (bl) >= 2);
+  bot = STATIC_BLOCK;
   top = BLOCKVECTOR_NBLOCKS (bl);
 
   while (top - bot > 1)
@@ -161,18 +139,55 @@ blockvector_for_pc_sect (CORE_ADDR pc, struct obj_section *section,
 
   /* Now search backward for a block that ends after PC.  */
 
-  while (bot >= 0)
+  while (bot >= STATIC_BLOCK)
     {
       b = BLOCKVECTOR_BLOCK (bl, bot);
       if (BLOCK_END (b) > pc)
-	{
-	  if (pblock)
-	    *pblock = b;
-	  return bl;
-	}
+	return b;
       bot--;
     }
-  return 0;
+
+  return NULL;
+}
+
+/* Return the blockvector immediately containing the innermost lexical
+   block containing the specified pc value and section, or 0 if there
+   is none.  PBLOCK is a pointer to the block.  If PBLOCK is NULL, we
+   don't pass this information back to the caller.  */
+
+struct blockvector *
+blockvector_for_pc_sect (CORE_ADDR pc, struct obj_section *section,
+			 struct block **pblock, struct symtab *symtab)
+{
+  struct blockvector *bl;
+  struct block *b;
+
+  if (symtab == 0)		/* if no symtab specified by caller */
+    {
+      /* First search all symtabs for one whose file contains our pc */
+      symtab = find_pc_sect_symtab (pc, section);
+      if (symtab == 0)
+	return 0;
+    }
+
+  bl = BLOCKVECTOR (symtab);
+
+  /* Then search that symtab for the smallest block that wins.  */
+  b = find_block_in_blockvector (bl, pc);
+  if (b == NULL)
+    return NULL;
+
+  if (pblock)
+    *pblock = b;
+  return bl;
+}
+
+/* Return true if the blockvector BV contains PC, false otherwise.  */
+
+int
+blockvector_contains_pc (struct blockvector *bv, CORE_ADDR pc)
+{
+  return find_block_in_blockvector (bv, pc) != NULL;
 }
 
 /* Return call_site for specified PC in GDBARCH.  PC must match exactly, it
@@ -369,3 +384,311 @@ allocate_block (struct obstack *obstack)
 
   return bl;
 }
+
+/* Allocate a global block.  */
+
+struct block *
+allocate_global_block (struct obstack *obstack)
+{
+  struct global_block *bl = OBSTACK_ZALLOC (obstack, struct global_block);
+
+  return &bl->block;
+}
+
+/* Set the symtab of the global block.  */
+
+void
+set_block_symtab (struct block *block, struct symtab *symtab)
+{
+  struct global_block *gb;
+
+  gdb_assert (BLOCK_SUPERBLOCK (block) == NULL);
+  gb = (struct global_block *) block;
+  gdb_assert (gb->symtab == NULL);
+  gb->symtab = symtab;
+}
+
+/* Return the symtab of the global block.  */
+
+static struct symtab *
+get_block_symtab (const struct block *block)
+{
+  struct global_block *gb;
+
+  gdb_assert (BLOCK_SUPERBLOCK (block) == NULL);
+  gb = (struct global_block *) block;
+  gdb_assert (gb->symtab != NULL);
+  return gb->symtab;
+}
+
+

+
+/* Initialize a block iterator, either to iterate over a single block,
+   or, for static and global blocks, all the included symtabs as
+   well.  */
+
+static void
+initialize_block_iterator (const struct block *block,
+			   struct block_iterator *iter)
+{
+  enum block_enum which;
+  struct symtab *symtab;
+
+  iter->idx = -1;
+
+  if (BLOCK_SUPERBLOCK (block) == NULL)
+    {
+      which = GLOBAL_BLOCK;
+      symtab = get_block_symtab (block);
+    }
+  else if (BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) == NULL)
+    {
+      which = STATIC_BLOCK;
+      symtab = get_block_symtab (BLOCK_SUPERBLOCK (block));
+    }
+  else
+    {
+      iter->d.block = block;
+      /* A signal value meaning that we're iterating over a single
+	 block.  */
+      iter->which = FIRST_LOCAL_BLOCK;
+      return;
+    }
+
+  /* If this is an included symtab, find the canonical includer and
+     use it instead.  */
+  while (symtab->user != NULL)
+    symtab = symtab->user;
+
+  /* Putting this check here simplifies the logic of the iterator
+     functions.  If there are no included symtabs, we only need to
+     search a single block, so we might as well just do that
+     directly.  */
+  if (symtab->includes == NULL)
+    {
+      iter->d.block = block;
+      /* A signal value meaning that we're iterating over a single
+	 block.  */
+      iter->which = FIRST_LOCAL_BLOCK;
+    }
+  else
+    {
+      iter->d.symtab = symtab;
+      iter->which = which;
+    }
+}
+
+/* A helper function that finds the current symtab over whose static
+   or global block we should iterate.  */
+
+static struct symtab *
+find_iterator_symtab (struct block_iterator *iterator)
+{
+  if (iterator->idx == -1)
+    return iterator->d.symtab;
+  return iterator->d.symtab->includes[iterator->idx];
+}
+
+/* Perform a single step for a plain block iterator, iterating across
+   symbol tables as needed.  Returns the next symbol, or NULL when
+   iteration is complete.  */
+
+static struct symbol *
+block_iterator_step (struct block_iterator *iterator, int first)
+{
+  struct symbol *sym;
+
+  gdb_assert (iterator->which != FIRST_LOCAL_BLOCK);
+
+  while (1)
+    {
+      if (first)
+	{
+	  struct symtab *symtab = find_iterator_symtab (iterator);
+	  const struct block *block;
+
+	  /* Iteration is complete.  */
+	  if (symtab == NULL)
+	    return  NULL;
+
+	  block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), iterator->which);
+	  sym = dict_iterator_first (BLOCK_DICT (block), &iterator->dict_iter);
+	}
+      else
+	sym = dict_iterator_next (&iterator->dict_iter);
+
+      if (sym != NULL)
+	return sym;
+
+      /* We have finished iterating the appropriate block of one
+	 symtab.  Now advance to the next symtab and begin iteration
+	 there.  */
+      ++iterator->idx;
+      first = 1;
+    }
+}
+
+/* See block.h.  */
+
+struct symbol *
+block_iterator_first (const struct block *block,
+		      struct block_iterator *iterator)
+{
+  initialize_block_iterator (block, iterator);
+
+  if (iterator->which == FIRST_LOCAL_BLOCK)
+    return dict_iterator_first (block->dict, &iterator->dict_iter);
+
+  return block_iterator_step (iterator, 1);
+}
+
+/* See block.h.  */
+
+struct symbol *
+block_iterator_next (struct block_iterator *iterator)
+{
+  if (iterator->which == FIRST_LOCAL_BLOCK)
+    return dict_iterator_next (&iterator->dict_iter);
+
+  return block_iterator_step (iterator, 0);
+}
+
+/* Perform a single step for a "name" block iterator, iterating across
+   symbol tables as needed.  Returns the next symbol, or NULL when
+   iteration is complete.  */
+
+static struct symbol *
+block_iter_name_step (struct block_iterator *iterator, const char *name,
+		      int first)
+{
+  struct symbol *sym;
+
+  gdb_assert (iterator->which != FIRST_LOCAL_BLOCK);
+
+  while (1)
+    {
+      if (first)
+	{
+	  struct symtab *symtab = find_iterator_symtab (iterator);
+	  const struct block *block;
+
+	  /* Iteration is complete.  */
+	  if (symtab == NULL)
+	    return  NULL;
+
+	  block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), iterator->which);
+	  sym = dict_iter_name_first (BLOCK_DICT (block), name,
+				      &iterator->dict_iter);
+	}
+      else
+	sym = dict_iter_name_next (name, &iterator->dict_iter);
+
+      if (sym != NULL)
+	return sym;
+
+      /* We have finished iterating the appropriate block of one
+	 symtab.  Now advance to the next symtab and begin iteration
+	 there.  */
+      ++iterator->idx;
+      first = 1;
+    }
+}
+
+/* See block.h.  */
+
+struct symbol *
+block_iter_name_first (const struct block *block,
+		       const char *name,
+		       struct block_iterator *iterator)
+{
+  initialize_block_iterator (block, iterator);
+
+  if (iterator->which == FIRST_LOCAL_BLOCK)
+    return dict_iter_name_first (block->dict, name, &iterator->dict_iter);
+
+  return block_iter_name_step (iterator, name, 1);
+}
+
+/* See block.h.  */
+
+struct symbol *
+block_iter_name_next (const char *name, struct block_iterator *iterator)
+{
+  if (iterator->which == FIRST_LOCAL_BLOCK)
+    return dict_iter_name_next (name, &iterator->dict_iter);
+
+  return block_iter_name_step (iterator, name, 0);
+}
+
+/* Perform a single step for a "match" block iterator, iterating
+   across symbol tables as needed.  Returns the next symbol, or NULL
+   when iteration is complete.  */
+
+static struct symbol *
+block_iter_match_step (struct block_iterator *iterator,
+		       const char *name,
+		       symbol_compare_ftype *compare,
+		       int first)
+{
+  struct symbol *sym;
+
+  gdb_assert (iterator->which != FIRST_LOCAL_BLOCK);
+
+  while (1)
+    {
+      if (first)
+	{
+	  struct symtab *symtab = find_iterator_symtab (iterator);
+	  const struct block *block;
+
+	  /* Iteration is complete.  */
+	  if (symtab == NULL)
+	    return  NULL;
+
+	  block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), iterator->which);
+	  sym = dict_iter_match_first (BLOCK_DICT (block), name,
+				       compare, &iterator->dict_iter);
+	}
+      else
+	sym = dict_iter_match_next (name, compare, &iterator->dict_iter);
+
+      if (sym != NULL)
+	return sym;
+
+      /* We have finished iterating the appropriate block of one
+	 symtab.  Now advance to the next symtab and begin iteration
+	 there.  */
+      ++iterator->idx;
+      first = 1;
+    }
+}
+
+/* See block.h.  */
+
+struct symbol *
+block_iter_match_first (const struct block *block,
+			const char *name,
+			symbol_compare_ftype *compare,
+			struct block_iterator *iterator)
+{
+  initialize_block_iterator (block, iterator);
+
+  if (iterator->which == FIRST_LOCAL_BLOCK)
+    return dict_iter_match_first (block->dict, name, compare,
+				  &iterator->dict_iter);
+
+  return block_iter_match_step (iterator, name, compare, 1);
+}
+
+/* See block.h.  */
+
+struct symbol *
+block_iter_match_next (const char *name,
+		       symbol_compare_ftype *compare,
+		       struct block_iterator *iterator)
+{
+  if (iterator->which == FIRST_LOCAL_BLOCK)
+    return dict_iter_match_next (name, compare, &iterator->dict_iter);
+
+  return block_iter_match_step (iterator, name, compare, 0);
+}
diff --git a/gdb/block.h b/gdb/block.h
index 2cbcc1b..99c4788 100644
--- a/gdb/block.h
+++ b/gdb/block.h
@@ -20,6 +20,8 @@
 #ifndef BLOCK_H
 #define BLOCK_H
 
+#include "dictionary.h"
+
 /* Opaque declarations.  */
 
 struct symbol;
@@ -27,7 +29,6 @@ struct symtab;
 struct block_namespace_info;
 struct using_direct;
 struct obstack;
-struct dictionary;
 struct addrmap;
 
 /* All of the name-scope contours of the program
@@ -98,6 +99,21 @@ struct block
   language_specific;
 };
 
+/* The global block is singled out so that we can provide a back-link
+   to the primary symtab.  */
+
+struct global_block
+{
+  /* The block.  */
+
+  struct block block;
+
+  /* This holds a pointer to the primary symtab holding this
+     block.  */
+
+  struct symtab *symtab;
+};
+
 #define BLOCK_START(bl)		(bl)->startaddr
 #define BLOCK_END(bl)		(bl)->endaddr
 #define BLOCK_FUNCTION(bl)	(bl)->function
@@ -105,13 +121,6 @@ struct block
 #define BLOCK_DICT(bl)		(bl)->dict
 #define BLOCK_NAMESPACE(bl)   (bl)->language_specific.cplus_specific.namespace
 
-/* Macro to loop through all symbols in a block BL, in no particular
-   order.  ITER helps keep track of the iteration, and should be a
-   struct dict_iterator.  SYM points to the current symbol.  */
-
-#define ALL_BLOCK_SYMBOLS(block, iter, sym)			\
-	ALL_DICT_SYMBOLS (BLOCK_DICT (block), iter, sym)
-
 struct blockvector
 {
   /* Number of blocks in the list.  */
@@ -143,6 +152,8 @@ extern struct blockvector *blockvector_for_pc_sect (CORE_ADDR,
 						    struct block **,
                                                     struct symtab *);
 
+extern int blockvector_contains_pc (struct blockvector *bv, CORE_ADDR pc);
+
 extern struct call_site *call_site_for_pc (struct gdbarch *gdbarch,
 					   CORE_ADDR pc);
 
@@ -167,4 +178,105 @@ extern const struct block *block_global_block (const struct block *block);
 
 extern struct block *allocate_block (struct obstack *obstack);
 
+extern struct block *allocate_global_block (struct obstack *obstack);
+
+extern void set_block_symtab (struct block *, struct symtab *);
+
+/* A block iterator.  This structure should be treated as though it
+   were opaque; it is only defined here because we want to support
+   stack allocation of iterators.  */
+
+struct block_iterator
+{
+  /* If we're iterating over a single block, this holds the block.
+     Otherwise, it holds the canonical symtab.  */
+
+  union
+  {
+    struct symtab *symtab;
+    const struct block *block;
+  } d;
+
+  /* If we're iterating over a single block, this is always -1.
+     Otherwise, it holds the index of the current "included" symtab in
+     the canonical symtab (that is, d.symtab->includes[idx]), with -1
+     meaning the canonical symtab itself.  */
+
+  int idx;
+
+  /* Which block, either static or global, to iterate over.  If this
+     is FIRST_LOCAL_BLOCK, then we are iterating over a single block.
+     This is used to select which field of 'd' is in use.  */
+
+  enum block_enum which;
+
+  /* The underlying dictionary iterator.  */
+
+  struct dict_iterator dict_iter;
+};
+
+/* Initialize ITERATOR to point at the first symbol in BLOCK, and
+   return that first symbol, or NULL if BLOCK is empty.  */
+
+extern struct symbol *block_iterator_first (const struct block *block,
+					    struct block_iterator *iterator);
+
+/* Advance ITERATOR, and return the next symbol, or NULL if there are
+   no more symbols.  Don't call this if you've previously received
+   NULL from block_iterator_first or block_iterator_next on this
+   iteration.  */
+
+extern struct symbol *block_iterator_next (struct block_iterator *iterator);
+
+/* Initialize ITERATOR to point at the first symbol in BLOCK whose
+   SYMBOL_SEARCH_NAME is NAME (as tested using strcmp_iw), and return
+   that first symbol, or NULL if there are no such symbols.  */
+
+extern struct symbol *block_iter_name_first (const struct block *block,
+					     const char *name,
+					     struct block_iterator *iterator);
+
+/* Advance ITERATOR to point at the next symbol in BLOCK whose
+   SYMBOL_SEARCH_NAME is NAME (as tested using strcmp_iw), or NULL if
+   there are no more such symbols.  Don't call this if you've
+   previously received NULL from block_iterator_first or
+   block_iterator_next on this iteration.  And don't call it unless
+   ITERATOR was created by a previous call to block_iter_name_first
+   with the same NAME.  */
+
+extern struct symbol *block_iter_name_next (const char *name,
+					    struct block_iterator *iterator);
+
+/* Initialize ITERATOR to point at the first symbol in BLOCK whose
+   SYMBOL_SEARCH_NAME is NAME, as tested using COMPARE (which must use
+   the same conventions as strcmp_iw and be compatible with any
+   block hashing function), and return that first symbol, or NULL
+   if there are no such symbols.  */
+
+extern struct symbol *block_iter_match_first (const struct block *block,
+					      const char *name,
+					      symbol_compare_ftype *compare,
+					      struct block_iterator *iterator);
+
+/* Advance ITERATOR to point at the next symbol in BLOCK whose
+   SYMBOL_SEARCH_NAME is NAME, as tested using COMPARE (see
+   block_iter_match_first), or NULL if there are no more such symbols.
+   Don't call this if you've previously received NULL from 
+   block_iterator_match_first or block_iterator_match_next on this
+   iteration.  And don't call it unless ITERATOR was created by a
+   previous call to block_iter_match_first with the same NAME and COMPARE.  */
+
+extern struct symbol *block_iter_match_next (const char *name,
+					     symbol_compare_ftype *compare,
+					     struct block_iterator *iterator);
+
+/* Macro to loop through all symbols in a block BL, in no particular
+   order.  ITER helps keep track of the iteration, and should be a
+   struct block_iterator.  SYM points to the current symbol.  */
+
+#define ALL_BLOCK_SYMBOLS(block, iter, sym)		\
+  for ((sym) = block_iterator_first ((block), &(iter));	\
+       (sym);						\
+       (sym) = block_iterator_next (&(iter)))
+
 #endif /* BLOCK_H */
diff --git a/gdb/blockframe.c b/gdb/blockframe.c
index 3897366..ba755a1 100644
--- a/gdb/blockframe.c
+++ b/gdb/blockframe.c
@@ -159,7 +159,7 @@ find_pc_function (CORE_ADDR pc)
 
 static CORE_ADDR cache_pc_function_low = 0;
 static CORE_ADDR cache_pc_function_high = 0;
-static char *cache_pc_function_name = 0;
+static const char *cache_pc_function_name = 0;
 static struct obj_section *cache_pc_function_section = NULL;
 static int cache_pc_function_is_gnu_ifunc = 0;
 
@@ -190,7 +190,7 @@ clear_pc_function_cache (void)
 /* Backward compatibility, no section argument.  */
 
 int
-find_pc_partial_function_gnu_ifunc (CORE_ADDR pc, char **name,
+find_pc_partial_function_gnu_ifunc (CORE_ADDR pc, const char **name,
 				    CORE_ADDR *address, CORE_ADDR *endaddr,
 				    int *is_gnu_ifunc_p)
 {
@@ -346,14 +346,15 @@ find_pc_partial_function_gnu_ifunc (CORE_ADDR pc, char **name,
    is omitted here for backward API compatibility.  */
 
 int
-find_pc_partial_function (CORE_ADDR pc, char **name, CORE_ADDR *address,
+find_pc_partial_function (CORE_ADDR pc, const char **name, CORE_ADDR *address,
 			  CORE_ADDR *endaddr)
 {
   return find_pc_partial_function_gnu_ifunc (pc, name, address, endaddr, NULL);
 }
 
-/* Return the innermost stack frame executing inside of BLOCK, or NULL
-   if there is no such frame.  If BLOCK is NULL, just return NULL.  */
+/* Return the innermost stack frame that is executing inside of BLOCK and is
+   at least as old as the selected frame. Return NULL if there is no
+   such frame.  If BLOCK is NULL, just return NULL.  */
 
 struct frame_info *
 block_innermost_frame (const struct block *block)
@@ -368,7 +369,9 @@ block_innermost_frame (const struct block *block)
   start = BLOCK_START (block);
   end = BLOCK_END (block);
 
-  frame = get_current_frame ();
+  frame = get_selected_frame_if_set ();
+  if (frame == NULL)
+    frame = get_current_frame ();
   while (frame != NULL)
     {
       struct block *frame_block = get_frame_block (frame, NULL);
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 5a8c29c..78fffd3 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -56,16 +56,21 @@
 #include "memattr.h"
 #include "ada-lang.h"
 #include "top.h"
-#include "wrapper.h"
 #include "valprint.h"
 #include "jit.h"
 #include "xml-syscall.h"
 #include "parser-defs.h"
+#include "gdb_regex.h"
+#include "probe.h"
 #include "cli/cli-utils.h"
 #include "continuations.h"
 #include "stack.h"
 #include "skip.h"
-#include "record.h"
+#include "gdb_regex.h"
+#include "ax-gdb.h"
+#include "dummy-frame.h"
+
+#include "format.h"
 
 /* readline include files */
 #include "readline/readline.h"
@@ -83,6 +88,8 @@ static void enable_delete_command (char *, int);
 
 static void enable_once_command (char *, int);
 
+static void enable_count_command (char *, int);
+
 static void disable_command (char *, int);
 
 static void enable_command (char *, int);
@@ -97,6 +104,23 @@ static int breakpoint_re_set_one (void *);
 
 static void breakpoint_re_set_default (struct breakpoint *);
 
+static void create_sals_from_address_default (char **,
+					      struct linespec_result *,
+					      enum bptype, char *,
+					      char **);
+
+static void create_breakpoints_sal_default (struct gdbarch *,
+					    struct linespec_result *,
+					    struct linespec_sals *,
+					    char *, char *, enum bptype,
+					    enum bpdisp, int, int,
+					    int,
+					    const struct breakpoint_ops *,
+					    int, int, int, unsigned);
+
+static void decode_linespec_default (struct breakpoint *, char **,
+				     struct symtabs_and_lines *);
+
 static void clear_command (char *, int);
 
 static void catch_command (char *, int);
@@ -190,7 +214,8 @@ static void hbreak_command (char *, int);
 
 static void thbreak_command (char *, int);
 
-static void enable_breakpoint_disp (struct breakpoint *, enum bpdisp);
+static void enable_breakpoint_disp (struct breakpoint *, enum bpdisp,
+				    int count);
 
 static void stop_command (char *arg, int from_tty);
 
@@ -238,10 +263,17 @@ static void trace_pass_command (char *, int);
 
 static int is_masked_watchpoint (const struct breakpoint *b);
 
-/* Assuming we're creating a static tracepoint, does S look like a
-   static tracepoint marker spec ("-m MARKER_ID")?  */
-#define is_marker_spec(s)						\
-  (s != NULL && strncmp (s, "-m", 2) == 0 && ((s)[2] == ' ' || (s)[2] == '\t'))
+static struct bp_location **get_first_locp_gte_addr (CORE_ADDR address);
+
+/* Return 1 if B refers to a static tracepoint set by marker ("-m"), zero
+   otherwise.  */
+
+static int strace_marker_p (struct breakpoint *b);
+
+static void init_catchpoint (struct breakpoint *b,
+			     struct gdbarch *gdbarch, int tempflag,
+			     char *cond_string,
+			     const struct breakpoint_ops *ops);
 
 /* The abstract base class all breakpoint_ops structures inherit
    from.  */
@@ -258,10 +290,58 @@ static struct breakpoint_ops internal_breakpoint_ops;
 /* Momentary breakpoints class type.  */
 static struct breakpoint_ops momentary_breakpoint_ops;
 
+/* Momentary breakpoints for bp_longjmp and bp_exception class type.  */
+static struct breakpoint_ops longjmp_breakpoint_ops;
+
 /* The breakpoint_ops structure to be used in regular user created
    breakpoints.  */
 struct breakpoint_ops bkpt_breakpoint_ops;
 
+/* Breakpoints set on probes.  */
+static struct breakpoint_ops bkpt_probe_breakpoint_ops;
+
+/* Dynamic printf class type.  */
+static struct breakpoint_ops dprintf_breakpoint_ops;
+
+/* The style in which to perform a dynamic printf.  This is a user
+   option because different output options have different tradeoffs;
+   if GDB does the printing, there is better error handling if there
+   is a problem with any of the arguments, but using an inferior
+   function lets you have special-purpose printers and sending of
+   output to the same place as compiled-in print functions.  */
+
+static const char dprintf_style_gdb[] = "gdb";
+static const char dprintf_style_call[] = "call";
+static const char dprintf_style_agent[] = "agent";
+static const char *const dprintf_style_enums[] = {
+  dprintf_style_gdb,
+  dprintf_style_call,
+  dprintf_style_agent,
+  NULL
+};
+static const char *dprintf_style = dprintf_style_gdb;
+
+/* The function to use for dynamic printf if the preferred style is to
+   call into the inferior.  The value is simply a string that is
+   copied into the command, so it can be anything that GDB can
+   evaluate to a callable address, not necessarily a function name.  */
+
+static char *dprintf_function = "";
+
+/* The channel to use for dynamic printf if the preferred style is to
+   call into the inferior; if a nonempty string, it will be passed to
+   the call as the first argument, with the format string as the
+   second.  As with the dprintf function, this can be anything that
+   GDB knows how to evaluate, so in addition to common choices like
+   "stderr", this could be an app-specific expression like
+   "mystreams[curlogger]".  */
+
+static char *dprintf_channel = "";
+
+/* True if dprintf commands should continue to operate even if GDB
+   has disconnected.  */
+static int disconnected_dprintf = 1;
+
 /* A reference-counted struct command_line.  This lets multiple
    breakpoints share a single command list.  */
 struct counted_command_line
@@ -348,21 +428,13 @@ show_automatic_hardware_breakpoints (struct ui_file *file, int from_tty,
    will remove breakpoints upon stop.  If auto, GDB will behave as ON
    if in non-stop mode, and as OFF if all-stop mode.*/
 
-static const char always_inserted_auto[] = "auto";
-static const char always_inserted_on[] = "on";
-static const char always_inserted_off[] = "off";
-static const char *always_inserted_enums[] = {
-  always_inserted_auto,
-  always_inserted_off,
-  always_inserted_on,
-  NULL
-};
-static const char *always_inserted_mode = always_inserted_auto;
+static enum auto_boolean always_inserted_mode = AUTO_BOOLEAN_AUTO;
+
 static void
 show_always_inserted_mode (struct ui_file *file, int from_tty,
 		     struct cmd_list_element *c, const char *value)
 {
-  if (always_inserted_mode == always_inserted_auto)
+  if (always_inserted_mode == AUTO_BOOLEAN_AUTO)
     fprintf_filtered (file,
 		      _("Always inserted breakpoint "
 			"mode is %s (currently %s).\n"),
@@ -376,9 +448,66 @@ show_always_inserted_mode (struct ui_file *file, int from_tty,
 int
 breakpoints_always_inserted_mode (void)
 {
-  return ((always_inserted_mode == always_inserted_on
-	   || (always_inserted_mode == always_inserted_auto && non_stop))
-	  && !RECORD_IS_USED);
+  return (always_inserted_mode == AUTO_BOOLEAN_TRUE
+	  || (always_inserted_mode == AUTO_BOOLEAN_AUTO && non_stop));
+}
+
+static const char condition_evaluation_both[] = "host or target";
+
+/* Modes for breakpoint condition evaluation.  */
+static const char condition_evaluation_auto[] = "auto";
+static const char condition_evaluation_host[] = "host";
+static const char condition_evaluation_target[] = "target";
+static const char *const condition_evaluation_enums[] = {
+  condition_evaluation_auto,
+  condition_evaluation_host,
+  condition_evaluation_target,
+  NULL
+};
+
+/* Global that holds the current mode for breakpoint condition evaluation.  */
+static const char *condition_evaluation_mode_1 = condition_evaluation_auto;
+
+/* Global that we use to display information to the user (gets its value from
+   condition_evaluation_mode_1.  */
+static const char *condition_evaluation_mode = condition_evaluation_auto;
+
+/* Translate a condition evaluation mode MODE into either "host"
+   or "target".  This is used mostly to translate from "auto" to the
+   real setting that is being used.  It returns the translated
+   evaluation mode.  */
+
+static const char *
+translate_condition_evaluation_mode (const char *mode)
+{
+  if (mode == condition_evaluation_auto)
+    {
+      if (target_supports_evaluation_of_breakpoint_conditions ())
+	return condition_evaluation_target;
+      else
+	return condition_evaluation_host;
+    }
+  else
+    return mode;
+}
+
+/* Discovers what condition_evaluation_auto translates to.  */
+
+static const char *
+breakpoint_condition_evaluation_mode (void)
+{
+  return translate_condition_evaluation_mode (condition_evaluation_mode);
+}
+
+/* Return true if GDB should evaluate breakpoint conditions or false
+   otherwise.  */
+
+static int
+gdb_evaluates_breakpoint_condition_p (void)
+{
+  const char *mode = breakpoint_condition_evaluation_mode ();
+
+  return (mode == condition_evaluation_host);
 }
 
 void _initialize_breakpoint (void);
@@ -412,6 +541,20 @@ int target_exact_watchpoints = 0;
 	     BP_TMP < bp_location + bp_location_count && (B = *BP_TMP);	\
 	     BP_TMP++)
 
+/* Iterates through locations with address ADDRESS for the currently selected
+   program space.  BP_LOCP_TMP points to each object.  BP_LOCP_START points
+   to where the loop should start from.
+   If BP_LOCP_START is a NULL pointer, the macro automatically seeks the
+   appropriate location to start with.  */
+
+#define ALL_BP_LOCATIONS_AT_ADDR(BP_LOCP_TMP, BP_LOCP_START, ADDRESS)	\
+	for (BP_LOCP_START = BP_LOCP_START == NULL ? get_first_locp_gte_addr (ADDRESS) : BP_LOCP_START, \
+	     BP_LOCP_TMP = BP_LOCP_START;				\
+	     BP_LOCP_START						\
+	     && (BP_LOCP_TMP < bp_location + bp_location_count		\
+	     && (*BP_LOCP_TMP)->address == ADDRESS);			\
+	     BP_LOCP_TMP++)
+
 /* Iterator for tracepoints only.  */
 
 #define ALL_TRACEPOINTS(B)  \
@@ -595,6 +738,178 @@ get_breakpoint (int num)
 
 

 
+/* Mark locations as "conditions have changed" in case the target supports
+   evaluating conditions on its side.  */
+
+static void
+mark_breakpoint_modified (struct breakpoint *b)
+{
+  struct bp_location *loc;
+
+  /* This is only meaningful if the target is
+     evaluating conditions and if the user has
+     opted for condition evaluation on the target's
+     side.  */
+  if (gdb_evaluates_breakpoint_condition_p ()
+      || !target_supports_evaluation_of_breakpoint_conditions ())
+    return;
+
+  if (!is_breakpoint (b))
+    return;
+
+  for (loc = b->loc; loc; loc = loc->next)
+    loc->condition_changed = condition_modified;
+}
+
+/* Mark location as "conditions have changed" in case the target supports
+   evaluating conditions on its side.  */
+
+static void
+mark_breakpoint_location_modified (struct bp_location *loc)
+{
+  /* This is only meaningful if the target is
+     evaluating conditions and if the user has
+     opted for condition evaluation on the target's
+     side.  */
+  if (gdb_evaluates_breakpoint_condition_p ()
+      || !target_supports_evaluation_of_breakpoint_conditions ())
+
+    return;
+
+  if (!is_breakpoint (loc->owner))
+    return;
+
+  loc->condition_changed = condition_modified;
+}
+
+/* Sets the condition-evaluation mode using the static global
+   condition_evaluation_mode.  */
+
+static void
+set_condition_evaluation_mode (char *args, int from_tty,
+			       struct cmd_list_element *c)
+{
+  const char *old_mode, *new_mode;
+
+  if ((condition_evaluation_mode_1 == condition_evaluation_target)
+      && !target_supports_evaluation_of_breakpoint_conditions ())
+    {
+      condition_evaluation_mode_1 = condition_evaluation_mode;
+      warning (_("Target does not support breakpoint condition evaluation.\n"
+		 "Using host evaluation mode instead."));
+      return;
+    }
+
+  new_mode = translate_condition_evaluation_mode (condition_evaluation_mode_1);
+  old_mode = translate_condition_evaluation_mode (condition_evaluation_mode);
+
+  /* Flip the switch.  Flip it even if OLD_MODE == NEW_MODE as one of the
+     settings was "auto".  */
+  condition_evaluation_mode = condition_evaluation_mode_1;
+
+  /* Only update the mode if the user picked a different one.  */
+  if (new_mode != old_mode)
+    {
+      struct bp_location *loc, **loc_tmp;
+      /* If the user switched to a different evaluation mode, we
+	 need to synch the changes with the target as follows:
+
+	 "host" -> "target": Send all (valid) conditions to the target.
+	 "target" -> "host": Remove all the conditions from the target.
+      */
+
+      if (new_mode == condition_evaluation_target)
+	{
+	  /* Mark everything modified and synch conditions with the
+	     target.  */
+	  ALL_BP_LOCATIONS (loc, loc_tmp)
+	    mark_breakpoint_location_modified (loc);
+  	}
+      else
+	{
+	  /* Manually mark non-duplicate locations to synch conditions
+	     with the target.  We do this to remove all the conditions the
+	     target knows about.  */
+	  ALL_BP_LOCATIONS (loc, loc_tmp)
+	    if (is_breakpoint (loc->owner) && loc->inserted)
+	      loc->needs_update = 1;
+	}
+
+      /* Do the update.  */
+      update_global_location_list (1);
+    }
+
+  return;
+}
+
+/* Shows the current mode of breakpoint condition evaluation.  Explicitly shows
+   what "auto" is translating to.  */
+
+static void
+show_condition_evaluation_mode (struct ui_file *file, int from_tty,
+				struct cmd_list_element *c, const char *value)
+{
+  if (condition_evaluation_mode == condition_evaluation_auto)
+    fprintf_filtered (file,
+		      _("Breakpoint condition evaluation "
+			"mode is %s (currently %s).\n"),
+		      value,
+		      breakpoint_condition_evaluation_mode ());
+  else
+    fprintf_filtered (file, _("Breakpoint condition evaluation mode is %s.\n"),
+		      value);
+}
+
+/* A comparison function for bp_location AP and BP that is used by
+   bsearch.  This comparison function only cares about addresses, unlike
+   the more general bp_location_compare function.  */
+
+static int
+bp_location_compare_addrs (const void *ap, const void *bp)
+{
+  struct bp_location *a = *(void **) ap;
+  struct bp_location *b = *(void **) bp;
+
+  if (a->address == b->address)
+    return 0;
+  else
+    return ((a->address > b->address) - (a->address < b->address));
+}
+
+/* Helper function to skip all bp_locations with addresses
+   less than ADDRESS.  It returns the first bp_location that
+   is greater than or equal to ADDRESS.  If none is found, just
+   return NULL.  */
+
+static struct bp_location **
+get_first_locp_gte_addr (CORE_ADDR address)
+{
+  struct bp_location dummy_loc;
+  struct bp_location *dummy_locp = &dummy_loc;
+  struct bp_location **locp_found = NULL;
+
+  /* Initialize the dummy location's address field.  */
+  memset (&dummy_loc, 0, sizeof (struct bp_location));
+  dummy_loc.address = address;
+
+  /* Find a close match to the first location at ADDRESS.  */
+  locp_found = bsearch (&dummy_locp, bp_location, bp_location_count,
+			sizeof (struct bp_location **),
+			bp_location_compare_addrs);
+
+  /* Nothing was found, nothing left to do.  */
+  if (locp_found == NULL)
+    return NULL;
+
+  /* We may have found a location that is at ADDRESS but is not the first in the
+     location's list.  Go backwards (if possible) and locate the first one.  */
+  while ((locp_found - 1) >= bp_location
+	 && (*(locp_found - 1))->address == address)
+    locp_found--;
+
+  return locp_found;
+}
+
 void
 set_breakpoint_condition (struct breakpoint *b, char *exp,
 			  int from_tty)
@@ -617,6 +932,10 @@ set_breakpoint_condition (struct breakpoint *b, char *exp,
 	{
 	  xfree (loc->cond);
 	  loc->cond = NULL;
+
+	  /* No need to free the condition agent expression
+	     bytecode (if we have one).  We will handle this
+	     when we go through update_global_location_list.  */
 	}
     }
 
@@ -640,7 +959,7 @@ set_breakpoint_condition (struct breakpoint *b, char *exp,
 
 	  innermost_block = NULL;
 	  arg = exp;
-	  w->cond_exp = parse_exp_1 (&arg, 0, 0);
+	  w->cond_exp = parse_exp_1 (&arg, 0, 0, 0);
 	  if (*arg)
 	    error (_("Junk at end of expression"));
 	  w->cond_exp_valid_block = innermost_block;
@@ -653,16 +972,75 @@ set_breakpoint_condition (struct breakpoint *b, char *exp,
 	    {
 	      arg = exp;
 	      loc->cond =
-		parse_exp_1 (&arg, block_for_pc (loc->address), 0);
+		parse_exp_1 (&arg, loc->address,
+			     block_for_pc (loc->address), 0);
 	      if (*arg)
 		error (_("Junk at end of expression"));
 	    }
 	}
     }
+  mark_breakpoint_modified (b);
+
   breakpoints_changed ();
   observer_notify_breakpoint_modified (b);
 }
 
+/* Completion for the "condition" command.  */
+
+static VEC (char_ptr) *
+condition_completer (struct cmd_list_element *cmd, char *text, char *word)
+{
+  char *space;
+
+  text = skip_spaces (text);
+  space = skip_to_space (text);
+  if (*space == '\0')
+    {
+      int len;
+      struct breakpoint *b;
+      VEC (char_ptr) *result = NULL;
+
+      if (text[0] == '$')
+	{
+	  /* We don't support completion of history indices.  */
+	  if (isdigit (text[1]))
+	    return NULL;
+	  return complete_internalvar (&text[1]);
+	}
+
+      /* We're completing the breakpoint number.  */
+      len = strlen (text);
+
+      ALL_BREAKPOINTS (b)
+      {
+	int single = b->loc->next == NULL;
+	struct bp_location *loc;
+	int count = 1;
+
+	for (loc = b->loc; loc; loc = loc->next)
+	  {
+	    char location[50];
+
+	    if (single)
+	      sprintf (location, "%d", b->number);
+	    else
+	      sprintf (location, "%d.%d", b->number, count);
+
+	    if (strncmp (location, text, len) == 0)
+	      VEC_safe_push (char_ptr, result, xstrdup (location));
+
+	    ++count;
+	  }
+      }
+
+      return result;
+    }
+
+  /* We're completing the expression part.  */
+  text = skip_spaces (space);
+  return expression_completer (cmd, text, word);
+}
+
 /* condition N EXP -- set break condition of breakpoint N to EXP.  */
 
 static void
@@ -692,6 +1070,10 @@ condition_command (char *arg, int from_tty)
 	  error (_("Cannot set a condition where a Python 'stop' "
 		   "method has been defined in the breakpoint."));
 	set_breakpoint_condition (b, p, from_tty);
+
+	if (is_breakpoint (b))
+	  update_global_location_list (1);
+
 	return;
       }
 
@@ -1035,6 +1417,10 @@ bp_location_has_shadow (struct bp_location *bl)
 /* Update BUF, which is LEN bytes read from the target address MEMADDR,
    by replacing any memory breakpoints with their shadowed contents.
 
+   If READBUF is not NULL, this buffer must not overlap with any of
+   the breakpoint location's shadow_contents buffers.  Otherwise,
+   a failed assertion internal error will be raised.
+
    The range of shadowed area by each bp_location is:
      bl->address - bp_location_placed_address_before_address_max
      up to bl->address + bp_location_shadow_len_after_address_max
@@ -1163,6 +1549,12 @@ breakpoint_xfer_memory (gdb_byte *readbuf, gdb_byte *writebuf,
 
     if (readbuf != NULL)
       {
+	/* Verify that the readbuf buffer does not overlap with
+	   the shadow_contents buffer.  */
+	gdb_assert (bl->target_info.shadow_contents >= readbuf + len
+		    || readbuf >= (bl->target_info.shadow_contents
+				   + bl->target_info.shadow_len));
+
 	/* Update the read buffer with this inserted breakpoint's
 	   shadow.  */
 	memcpy (readbuf + bp_addr - memaddr,
@@ -1191,6 +1583,17 @@ breakpoint_xfer_memory (gdb_byte *readbuf, gdb_byte *writebuf,
 }
 

 
+/* Return true if BPT is either a software breakpoint or a hardware
+   breakpoint.  */
+
+int
+is_breakpoint (const struct breakpoint *bpt)
+{
+  return (bpt->type == bp_breakpoint
+	  || bpt->type == bp_hardware_breakpoint
+	  || bpt->type == bp_dprintf);
+}
+
 /* Return true if BPT is of any hardware watchpoint kind.  */
 
 static int
@@ -1223,9 +1626,10 @@ is_watchpoint (const struct breakpoint *bpt)
 static int
 watchpoint_in_thread_scope (struct watchpoint *b)
 {
-  return (ptid_equal (b->watchpoint_thread, null_ptid)
-	  || (ptid_equal (inferior_ptid, b->watchpoint_thread)
-	      && !is_executing (inferior_ptid)));
+  return (b->base.pspace == current_program_space
+	  && (ptid_equal (b->watchpoint_thread, null_ptid)
+	      || (ptid_equal (inferior_ptid, b->watchpoint_thread)
+		  && !is_executing (inferior_ptid))));
 }
 
 /* Set watchpoint B to disp_del_at_next_stop, even including its possible
@@ -1361,7 +1765,7 @@ update_watchpoint (struct watchpoint *b, int reparse)
 	  b->exp = NULL;
 	}
       s = b->exp_string_reparse ? b->exp_string_reparse : b->exp_string;
-      b->exp = parse_exp_1 (&s, b->exp_valid_block, 0);
+      b->exp = parse_exp_1 (&s, 0, b->exp_valid_block, 0);
       /* If the meaning of expression itself changed, the old value is
 	 no longer relevant.  We don't want to report a watchpoint hit
 	 to the user when the old value and the new value may actually
@@ -1382,7 +1786,7 @@ update_watchpoint (struct watchpoint *b, int reparse)
 	    }
 
 	  s = b->base.cond_string;
-	  b->cond_exp = parse_exp_1 (&s, b->cond_exp_valid_block, 0);
+	  b->cond_exp = parse_exp_1 (&s, 0, b->cond_exp_valid_block, 0);
 	}
     }
 
@@ -1632,6 +2036,333 @@ unduplicated_should_be_inserted (struct bp_location *bl)
   return result;
 }
 
+/* Parses a conditional described by an expression COND into an
+   agent expression bytecode suitable for evaluation
+   by the bytecode interpreter.  Return NULL if there was
+   any error during parsing.  */
+
+static struct agent_expr *
+parse_cond_to_aexpr (CORE_ADDR scope, struct expression *cond)
+{
+  struct agent_expr *aexpr = NULL;
+  struct cleanup *old_chain = NULL;
+  volatile struct gdb_exception ex;
+
+  if (!cond)
+    return NULL;
+
+  /* We don't want to stop processing, so catch any errors
+     that may show up.  */
+  TRY_CATCH (ex, RETURN_MASK_ERROR)
+    {
+      aexpr = gen_eval_for_expr (scope, cond);
+    }
+
+  if (ex.reason < 0)
+    {
+      /* If we got here, it means the condition could not be parsed to a valid
+	 bytecode expression and thus can't be evaluated on the target's side.
+	 It's no use iterating through the conditions.  */
+      return NULL;
+    }
+
+  /* We have a valid agent expression.  */
+  return aexpr;
+}
+
+/* Based on location BL, create a list of breakpoint conditions to be
+   passed on to the target.  If we have duplicated locations with different
+   conditions, we will add such conditions to the list.  The idea is that the
+   target will evaluate the list of conditions and will only notify GDB when
+   one of them is true.  */
+
+static void
+build_target_condition_list (struct bp_location *bl)
+{
+  struct bp_location **locp = NULL, **loc2p;
+  int null_condition_or_parse_error = 0;
+  int modified = bl->needs_update;
+  struct bp_location *loc;
+
+  /* This is only meaningful if the target is
+     evaluating conditions and if the user has
+     opted for condition evaluation on the target's
+     side.  */
+  if (gdb_evaluates_breakpoint_condition_p ()
+      || !target_supports_evaluation_of_breakpoint_conditions ())
+    return;
+
+  /* Do a first pass to check for locations with no assigned
+     conditions or conditions that fail to parse to a valid agent expression
+     bytecode.  If any of these happen, then it's no use to send conditions
+     to the target since this location will always trigger and generate a
+     response back to GDB.  */
+  ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
+    {
+      loc = (*loc2p);
+      if (is_breakpoint (loc->owner) && loc->pspace->num == bl->pspace->num)
+	{
+	  if (modified)
+	    {
+	      struct agent_expr *aexpr;
+
+	      /* Re-parse the conditions since something changed.  In that
+		 case we already freed the condition bytecodes (see
+		 force_breakpoint_reinsertion).  We just
+		 need to parse the condition to bytecodes again.  */
+	      aexpr = parse_cond_to_aexpr (bl->address, loc->cond);
+	      loc->cond_bytecode = aexpr;
+
+	      /* Check if we managed to parse the conditional expression
+		 correctly.  If not, we will not send this condition
+		 to the target.  */
+	      if (aexpr)
+		continue;
+	    }
+
+	  /* If we have a NULL bytecode expression, it means something
+	     went wrong or we have a null condition expression.  */
+	  if (!loc->cond_bytecode)
+	    {
+	      null_condition_or_parse_error = 1;
+	      break;
+	    }
+	}
+    }
+
+  /* If any of these happened, it means we will have to evaluate the conditions
+     for the location's address on gdb's side.  It is no use keeping bytecodes
+     for all the other duplicate locations, thus we free all of them here.
+
+     This is so we have a finer control over which locations' conditions are
+     being evaluated by GDB or the remote stub.  */
+  if (null_condition_or_parse_error)
+    {
+      ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
+	{
+	  loc = (*loc2p);
+	  if (is_breakpoint (loc->owner) && loc->pspace->num == bl->pspace->num)
+	    {
+	      /* Only go as far as the first NULL bytecode is
+		 located.  */
+	      if (!loc->cond_bytecode)
+		return;
+
+	      free_agent_expr (loc->cond_bytecode);
+	      loc->cond_bytecode = NULL;
+	    }
+	}
+    }
+
+  /* No NULL conditions or failed bytecode generation.  Build a condition list
+     for this location's address.  */
+  ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
+    {
+      loc = (*loc2p);
+      if (loc->cond
+	  && is_breakpoint (loc->owner)
+	  && loc->pspace->num == bl->pspace->num
+	  && loc->owner->enable_state == bp_enabled
+	  && loc->enabled)
+	/* Add the condition to the vector.  This will be used later to send the
+	   conditions to the target.  */
+	VEC_safe_push (agent_expr_p, bl->target_info.conditions,
+		       loc->cond_bytecode);
+    }
+
+  return;
+}
+
+/* Parses a command described by string CMD into an agent expression
+   bytecode suitable for evaluation by the bytecode interpreter.
+   Return NULL if there was any error during parsing.  */
+
+static struct agent_expr *
+parse_cmd_to_aexpr (CORE_ADDR scope, char *cmd)
+{
+  struct cleanup *old_cleanups = 0;
+  struct expression *expr, **argvec;
+  struct agent_expr *aexpr = NULL;
+  struct cleanup *old_chain = NULL;
+  volatile struct gdb_exception ex;
+  char *cmdrest;
+  char *format_start, *format_end;
+  struct format_piece *fpieces;
+  int nargs;
+  struct gdbarch *gdbarch = get_current_arch ();
+
+  if (!cmd)
+    return NULL;
+
+  cmdrest = cmd;
+
+  if (*cmdrest == ',')
+    ++cmdrest;
+  cmdrest = skip_spaces (cmdrest);
+
+  if (*cmdrest++ != '"')
+    error (_("No format string following the location"));
+
+  format_start = cmdrest;
+
+  fpieces = parse_format_string (&cmdrest);
+
+  old_cleanups = make_cleanup (free_format_pieces_cleanup, &fpieces);
+
+  format_end = cmdrest;
+
+  if (*cmdrest++ != '"')
+    error (_("Bad format string, non-terminated '\"'."));
+  
+  cmdrest = skip_spaces (cmdrest);
+
+  if (!(*cmdrest == ',' || *cmdrest == '\0'))
+    error (_("Invalid argument syntax"));
+
+  if (*cmdrest == ',')
+    cmdrest++;
+  cmdrest = skip_spaces (cmdrest);
+
+  /* For each argument, make an expression.  */
+
+  argvec = (struct expression **) alloca (strlen (cmd)
+					 * sizeof (struct expression *));
+
+  nargs = 0;
+  while (*cmdrest != '\0')
+    {
+      char *cmd1;
+
+      cmd1 = cmdrest;
+      expr = parse_exp_1 (&cmd1, scope, block_for_pc (scope), 1);
+      argvec[nargs++] = expr;
+      cmdrest = cmd1;
+      if (*cmdrest == ',')
+	++cmdrest;
+    }
+
+  /* We don't want to stop processing, so catch any errors
+     that may show up.  */
+  TRY_CATCH (ex, RETURN_MASK_ERROR)
+    {
+      aexpr = gen_printf (scope, gdbarch, 0, 0,
+			  format_start, format_end - format_start,
+			  fpieces, nargs, argvec);
+    }
+
+  if (ex.reason < 0)
+    {
+      /* If we got here, it means the command could not be parsed to a valid
+	 bytecode expression and thus can't be evaluated on the target's side.
+	 It's no use iterating through the other commands.  */
+      return NULL;
+    }
+
+  do_cleanups (old_cleanups);
+
+  /* We have a valid agent expression, return it.  */
+  return aexpr;
+}
+
+/* Based on location BL, create a list of breakpoint commands to be
+   passed on to the target.  If we have duplicated locations with
+   different commands, we will add any such to the list.  */
+
+static void
+build_target_command_list (struct bp_location *bl)
+{
+  struct bp_location **locp = NULL, **loc2p;
+  int null_command_or_parse_error = 0;
+  int modified = bl->needs_update;
+  struct bp_location *loc;
+
+  /* For now, limit to agent-style dprintf breakpoints.  */
+  if (bl->owner->type != bp_dprintf
+      || strcmp (dprintf_style, dprintf_style_agent) != 0)
+    return;
+
+  if (!target_can_run_breakpoint_commands ())
+    return;
+
+  /* Do a first pass to check for locations with no assigned
+     conditions or conditions that fail to parse to a valid agent expression
+     bytecode.  If any of these happen, then it's no use to send conditions
+     to the target since this location will always trigger and generate a
+     response back to GDB.  */
+  ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
+    {
+      loc = (*loc2p);
+      if (is_breakpoint (loc->owner) && loc->pspace->num == bl->pspace->num)
+	{
+	  if (modified)
+	    {
+	      struct agent_expr *aexpr;
+
+	      /* Re-parse the commands since something changed.  In that
+		 case we already freed the command bytecodes (see
+		 force_breakpoint_reinsertion).  We just
+		 need to parse the command to bytecodes again.  */
+	      aexpr = parse_cmd_to_aexpr (bl->address,
+					  loc->owner->extra_string);
+	      loc->cmd_bytecode = aexpr;
+
+	      if (!aexpr)
+		continue;
+	    }
+
+	  /* If we have a NULL bytecode expression, it means something
+	     went wrong or we have a null command expression.  */
+	  if (!loc->cmd_bytecode)
+	    {
+	      null_command_or_parse_error = 1;
+	      break;
+	    }
+	}
+    }
+
+  /* If anything failed, then we're not doing target-side commands,
+     and so clean up.  */
+  if (null_command_or_parse_error)
+    {
+      ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
+	{
+	  loc = (*loc2p);
+	  if (is_breakpoint (loc->owner)
+	      && loc->pspace->num == bl->pspace->num)
+	    {
+	      /* Only go as far as the first NULL bytecode is
+		 located.  */
+	      if (!loc->cond_bytecode)
+		return;
+
+	      free_agent_expr (loc->cond_bytecode);
+	      loc->cond_bytecode = NULL;
+	    }
+	}
+    }
+
+  /* No NULL commands or failed bytecode generation.  Build a command list
+     for this location's address.  */
+  ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
+    {
+      loc = (*loc2p);
+      if (loc->owner->extra_string
+	  && is_breakpoint (loc->owner)
+	  && loc->pspace->num == bl->pspace->num
+	  && loc->owner->enable_state == bp_enabled
+	  && loc->enabled)
+	/* Add the command to the vector.  This will be used later
+	   to send the commands to the target.  */
+	VEC_safe_push (agent_expr_p, bl->target_info.tcommands,
+		       loc->cmd_bytecode);
+    }
+
+  bl->target_info.persist = 0;
+  /* Maybe flag this location as persistent.  */
+  if (bl->owner->type == bp_dprintf && disconnected_dprintf)
+    bl->target_info.persist = 1;
+}
+
 /* Insert a low-level "breakpoint" of some type.  BL is the breakpoint
    location.  Any error messages are printed to TMP_ERROR_STREAM; and
    DISABLED_BREAKS, and HW_BREAKPOINT_ERROR are used to report problems.
@@ -1648,15 +2379,35 @@ insert_bp_location (struct bp_location *bl,
 {
   int val = 0;
 
-  if (!should_be_inserted (bl) || bl->inserted)
+  if (!should_be_inserted (bl) || (bl->inserted && !bl->needs_update))
     return 0;
 
-  /* Initialize the target-specific information.  */
-  memset (&bl->target_info, 0, sizeof (bl->target_info));
+  /* Note we don't initialize bl->target_info, as that wipes out
+     the breakpoint location's shadow_contents if the breakpoint
+     is still inserted at that location.  This in turn breaks
+     target_read_memory which depends on these buffers when
+     a memory read is requested at the breakpoint location:
+     Once the target_info has been wiped, we fail to see that
+     we have a breakpoint inserted at that address and thus
+     read the breakpoint instead of returning the data saved in
+     the breakpoint location's shadow contents.  */
   bl->target_info.placed_address = bl->address;
   bl->target_info.placed_address_space = bl->pspace->aspace;
   bl->target_info.length = bl->length;
 
+  /* When working with target-side conditions, we must pass all the conditions
+     for the same breakpoint address down to the target since GDB will not
+     insert those locations.  With a list of breakpoint conditions, the target
+     can decide when to stop and notify GDB.  */
+
+  if (is_breakpoint (bl->owner))
+    {
+      build_target_condition_list (bl);
+      build_target_command_list (bl);
+      /* Reset the modification marker.  */
+      bl->needs_update = 0;
+    }
+
   if (bl->loc_type == bp_loc_software_breakpoint
       || bl->loc_type == bp_loc_hardware_breakpoint)
     {
@@ -1965,6 +2716,79 @@ insert_breakpoints (void)
     insert_breakpoint_locations ();
 }
 
+/* Invoke CALLBACK for each of bp_location.  */
+
+void
+iterate_over_bp_locations (walk_bp_location_callback callback)
+{
+  struct bp_location *loc, **loc_tmp;
+
+  ALL_BP_LOCATIONS (loc, loc_tmp)
+    {
+      callback (loc, NULL);
+    }
+}
+
+/* This is used when we need to synch breakpoint conditions between GDB and the
+   target.  It is the case with deleting and disabling of breakpoints when using
+   always-inserted mode.  */
+
+static void
+update_inserted_breakpoint_locations (void)
+{
+  struct bp_location *bl, **blp_tmp;
+  int error_flag = 0;
+  int val = 0;
+  int disabled_breaks = 0;
+  int hw_breakpoint_error = 0;
+
+  struct ui_file *tmp_error_stream = mem_fileopen ();
+  struct cleanup *cleanups = make_cleanup_ui_file_delete (tmp_error_stream);
+
+  /* Explicitly mark the warning -- this will only be printed if
+     there was an error.  */
+  fprintf_unfiltered (tmp_error_stream, "Warning:\n");
+
+  save_current_space_and_thread ();
+
+  ALL_BP_LOCATIONS (bl, blp_tmp)
+    {
+      /* We only want to update software breakpoints and hardware
+	 breakpoints.  */
+      if (!is_breakpoint (bl->owner))
+	continue;
+
+      /* We only want to update locations that are already inserted
+	 and need updating.  This is to avoid unwanted insertion during
+	 deletion of breakpoints.  */
+      if (!bl->inserted || (bl->inserted && !bl->needs_update))
+	continue;
+
+      switch_to_program_space_and_thread (bl->pspace);
+
+      /* For targets that support global breakpoints, there's no need
+	 to select an inferior to insert breakpoint to.  In fact, even
+	 if we aren't attached to any process yet, we should still
+	 insert breakpoints.  */
+      if (!gdbarch_has_global_breakpoints (target_gdbarch)
+	  && ptid_equal (inferior_ptid, null_ptid))
+	continue;
+
+      val = insert_bp_location (bl, tmp_error_stream, &disabled_breaks,
+				    &hw_breakpoint_error);
+      if (val)
+	error_flag = val;
+    }
+
+  if (error_flag)
+    {
+      target_terminal_ours_for_output ();
+      error_stream (tmp_error_stream);
+    }
+
+  do_cleanups (cleanups);
+}
+
 /* Used when starting or continuing the program.  */
 
 static void
@@ -1988,7 +2812,7 @@ insert_breakpoint_locations (void)
 
   ALL_BP_LOCATIONS (bl, blp_tmp)
     {
-      if (!should_be_inserted (bl) || bl->inserted)
+      if (!should_be_inserted (bl) || (bl->inserted && !bl->needs_update))
 	continue;
 
       /* There is no point inserting thread-specific breakpoints if
@@ -2099,6 +2923,9 @@ remove_breakpoints_pid (int pid)
     if (bl->pspace != inf->pspace)
       continue;
 
+    if (bl->owner->type == bp_dprintf)
+      continue;
+
     if (bl->inserted)
       {
 	val = remove_breakpoint (bl, mark_uninserted);
@@ -2208,11 +3035,23 @@ struct breakpoint_objfile_data
   /* Minimal symbol(s) for "longjmp", "siglongjmp", etc. (if any).  */
   struct minimal_symbol *longjmp_msym[NUM_LONGJMP_NAMES];
 
+  /* True if we have looked for longjmp probes.  */
+  int longjmp_searched;
+
+  /* SystemTap probe points for longjmp (if any).  */
+  VEC (probe_p) *longjmp_probes;
+
   /* Minimal symbol for "std::terminate()" (if any).  */
   struct minimal_symbol *terminate_msym;
 
   /* Minimal symbol for "_Unwind_DebugHook" (if any).  */
   struct minimal_symbol *exception_msym;
+
+  /* True if we have looked for exception probes.  */
+  int exception_searched;
+
+  /* SystemTap probe points for unwinding (if any).  */
+  VEC (probe_p) *exception_probes;
 };
 
 static const struct objfile_data *breakpoint_objfile_key;
@@ -2249,6 +3088,15 @@ get_breakpoint_objfile_data (struct objfile *objfile)
 }
 
 static void
+free_breakpoint_probes (struct objfile *obj, void *data)
+{
+  struct breakpoint_objfile_data *bp_objfile_data = data;
+
+  VEC_free (probe_p, bp_objfile_data->longjmp_probes);
+  VEC_free (probe_p, bp_objfile_data->exception_probes);
+}
+
+static void
 create_overlay_event_breakpoint (void)
 {
   struct objfile *objfile;
@@ -2325,6 +3173,37 @@ create_longjmp_master_breakpoint (void)
 
       bp_objfile_data = get_breakpoint_objfile_data (objfile);
 
+      if (!bp_objfile_data->longjmp_searched)
+	{
+	  bp_objfile_data->longjmp_probes
+	    = find_probes_in_objfile (objfile, "libc", "longjmp");
+	  bp_objfile_data->longjmp_searched = 1;
+	}
+
+      if (bp_objfile_data->longjmp_probes != NULL)
+	{
+	  int i;
+	  struct probe *probe;
+	  struct gdbarch *gdbarch = get_objfile_arch (objfile);
+
+	  for (i = 0;
+	       VEC_iterate (probe_p,
+			    bp_objfile_data->longjmp_probes,
+			    i, probe);
+	       ++i)
+	    {
+	      struct breakpoint *b;
+
+	      b = create_internal_breakpoint (gdbarch, probe->address,
+					      bp_longjmp_master,
+					      &internal_breakpoint_ops);
+	      b->addr_string = xstrdup ("-probe-stap libc:longjmp");
+	      b->enable_state = bp_disabled;
+	    }
+
+	  continue;
+	}
+
       for (i = 0; i < NUM_LONGJMP_NAMES; i++)
 	{
 	  struct breakpoint *b;
@@ -2420,7 +3299,7 @@ create_std_terminate_master_breakpoint (void)
 
 /* Install a master breakpoint on the unwinder's debug hook.  */
 
-void
+static void
 create_exception_master_breakpoint (void)
 {
   struct objfile *objfile;
@@ -2435,6 +3314,40 @@ create_exception_master_breakpoint (void)
 
       bp_objfile_data = get_breakpoint_objfile_data (objfile);
 
+      /* We prefer the SystemTap probe point if it exists.  */
+      if (!bp_objfile_data->exception_searched)
+	{
+	  bp_objfile_data->exception_probes
+	    = find_probes_in_objfile (objfile, "libgcc", "unwind");
+	  bp_objfile_data->exception_searched = 1;
+	}
+
+      if (bp_objfile_data->exception_probes != NULL)
+	{
+	  struct gdbarch *gdbarch = get_objfile_arch (objfile);
+	  int i;
+	  struct probe *probe;
+
+	  for (i = 0;
+	       VEC_iterate (probe_p,
+			    bp_objfile_data->exception_probes,
+			    i, probe);
+	       ++i)
+	    {
+	      struct breakpoint *b;
+
+	      b = create_internal_breakpoint (gdbarch, probe->address,
+					      bp_exception_master,
+					      &internal_breakpoint_ops);
+	      b->addr_string = xstrdup ("-probe-stap libgcc:unwind");
+	      b->enable_state = bp_disabled;
+	    }
+
+	  continue;
+	}
+
+      /* Otherwise, try the hook function.  */
+
       if (msym_not_found_p (bp_objfile_data->exception_msym))
 	continue;
 
@@ -2523,6 +3436,7 @@ update_breakpoints_after_exec (void)
     /* Longjmp and longjmp-resume breakpoints are also meaningless
        after an exec.  */
     if (b->type == bp_longjmp || b->type == bp_longjmp_resume
+	|| b->type == bp_longjmp_call_dummy
 	|| b->type == bp_exception || b->type == bp_exception_resume)
       {
 	delete_breakpoint (b);
@@ -2814,6 +3728,7 @@ breakpoint_init_inferior (enum inf_context context)
     switch (b->type)
       {
       case bp_call_dummy:
+      case bp_longjmp_call_dummy:
 
 	/* If the call dummy breakpoint is at the entry point it will
 	   cause problems when the inferior is rerun, so we better get
@@ -2839,6 +3754,10 @@ breakpoint_init_inferior (enum inf_context context)
 	   (gdb) tar rem :9999     # remote Windows gdbserver.
 	*/
 
+      case bp_step_resume:
+
+	/* Also remove step-resume breakpoints.  */
+
 	delete_breakpoint (b);
 	break;
 
@@ -3111,7 +4030,7 @@ breakpoint_thread_match (struct address_space *aspace, CORE_ADDR pc,
    in breakpoint.h.  */
 
 int
-ep_is_catchpoint (struct breakpoint *ep)
+is_catchpoint (struct breakpoint *ep)
 {
   return (ep->type == bp_catchpoint);
 }
@@ -3473,6 +4392,78 @@ print_bp_stop_message (bpstat bs)
     }
 }
 
+/* A helper function that prints a shared library stopped event.  */
+
+static void
+print_solib_event (int is_catchpoint)
+{
+  int any_deleted
+    = !VEC_empty (char_ptr, current_program_space->deleted_solibs);
+  int any_added
+    = !VEC_empty (so_list_ptr, current_program_space->added_solibs);
+
+  if (!is_catchpoint)
+    {
+      if (any_added || any_deleted)
+	ui_out_text (current_uiout,
+		     _("Stopped due to shared library event:\n"));
+      else
+	ui_out_text (current_uiout,
+		     _("Stopped due to shared library event (no "
+		       "libraries added or removed)\n"));
+    }
+
+  if (ui_out_is_mi_like_p (current_uiout))
+    ui_out_field_string (current_uiout, "reason",
+			 async_reason_lookup (EXEC_ASYNC_SOLIB_EVENT));
+
+  if (any_deleted)
+    {
+      struct cleanup *cleanup;
+      char *name;
+      int ix;
+
+      ui_out_text (current_uiout, _("  Inferior unloaded "));
+      cleanup = make_cleanup_ui_out_list_begin_end (current_uiout,
+						    "removed");
+      for (ix = 0;
+	   VEC_iterate (char_ptr, current_program_space->deleted_solibs,
+			ix, name);
+	   ++ix)
+	{
+	  if (ix > 0)
+	    ui_out_text (current_uiout, "    ");
+	  ui_out_field_string (current_uiout, "library", name);
+	  ui_out_text (current_uiout, "\n");
+	}
+
+      do_cleanups (cleanup);
+    }
+
+  if (any_added)
+    {
+      struct so_list *iter;
+      int ix;
+      struct cleanup *cleanup;
+
+      ui_out_text (current_uiout, _("  Inferior loaded "));
+      cleanup = make_cleanup_ui_out_list_begin_end (current_uiout,
+						    "added");
+      for (ix = 0;
+	   VEC_iterate (so_list_ptr, current_program_space->added_solibs,
+			ix, iter);
+	   ++ix)
+	{
+	  if (ix > 0)
+	    ui_out_text (current_uiout, "    ");
+	  ui_out_field_string (current_uiout, "library", iter->so_name);
+	  ui_out_text (current_uiout, "\n");
+	}
+
+      do_cleanups (cleanup);
+    }
+}
+
 /* Print a message indicating what happened.  This is called from
    normal_stop().  The input to this routine is the head of the bpstat
    list - a list of the eventpoints that caused this stop.  KIND is
@@ -3517,10 +4508,7 @@ bpstat_print (bpstat bs, int kind)
      OS-level shared library event, do the same thing.  */
   if (kind == TARGET_WAITKIND_LOADED)
     {
-      ui_out_text (current_uiout, _("Stopped due to shared library event\n"));
-      if (ui_out_is_mi_like_p (current_uiout))
-	ui_out_field_string (current_uiout, "reason",
-			     async_reason_lookup (EXEC_ASYNC_SOLIB_EVENT));
+      print_solib_event (0);
       return PRINT_NOTHING;
     }
 
@@ -3808,14 +4796,15 @@ which its expression is valid.\n");
 
 static int
 bpstat_check_location (const struct bp_location *bl,
-		       struct address_space *aspace, CORE_ADDR bp_addr)
+		       struct address_space *aspace, CORE_ADDR bp_addr,
+		       const struct target_waitstatus *ws)
 {
   struct breakpoint *b = bl->owner;
 
   /* BL is from an existing breakpoint.  */
   gdb_assert (b != NULL);
 
-  return b->ops->breakpoint_hit (bl, aspace, bp_addr);
+  return b->ops->breakpoint_hit (bl, aspace, bp_addr, ws);
 }
 
 /* Determine if the watched values have actually changed, and we
@@ -3996,6 +4985,10 @@ bpstat_check_breakpoint_conditions (bpstat bs, ptid_t ptid)
   b = bs->breakpoint_at;
   gdb_assert (b != NULL);
 
+  /* Even if the target evaluated the condition on its end and notified GDB, we
+     need to do so again since GDB does not know if we stopped due to a
+     breakpoint or a single step breakpoint.  */
+
   if (frame_id_p (b->frame_id)
       && !frame_id_eq (b->frame_id, get_stack_frame_id (get_current_frame ())))
     bs->stop = 0;
@@ -4125,7 +5118,8 @@ bpstat_check_breakpoint_conditions (bpstat bs, ptid_t ptid)
 
 bpstat
 bpstat_stop_status (struct address_space *aspace,
-		    CORE_ADDR bp_addr, ptid_t ptid)
+		    CORE_ADDR bp_addr, ptid_t ptid,
+		    const struct target_waitstatus *ws)
 {
   struct breakpoint *b = NULL;
   struct bp_location *bl;
@@ -4163,7 +5157,7 @@ bpstat_stop_status (struct address_space *aspace,
 	  if (bl->shlib_disabled)
 	    continue;
 
-	  if (!bpstat_check_location (bl, aspace, bp_addr))
+	  if (!bpstat_check_location (bl, aspace, bp_addr, ws))
 	    continue;
 
 	  /* Come here if it's a watchpoint, or if the break address
@@ -4203,6 +5197,19 @@ bpstat_stop_status (struct address_space *aspace,
 	}
     }
 
+  /* A bit of special processing for shlib breakpoints.  We need to
+     process solib loading here, so that the lists of loaded and
+     unloaded libraries are correct before we handle "catch load" and
+     "catch unload".  */
+  for (bs = bs_head; bs != NULL; bs = bs->next)
+    {
+      if (bs->breakpoint_at && bs->breakpoint_at->type == bp_shlib_event)
+	{
+	  handle_solib_event ();
+	  break;
+	}
+    }
+
   /* Now go through the locations that caused the target to stop, and
      check whether we're interested in reporting this stop to higher
      layers, or whether we should resume the target transparently.  */
@@ -4228,7 +5235,9 @@ bpstat_stop_status (struct address_space *aspace,
 	      /* We will stop here.  */
 	      if (b->disposition == disp_disable)
 		{
-		  if (b->enable_state != bp_permanent)
+		  --(b->enable_count);
+		  if (b->enable_count <= 0
+		      && b->enable_state != bp_permanent)
 		    b->enable_state = bp_disabled;
 		  removed_any = 1;
 		}
@@ -4241,10 +5250,12 @@ bpstat_stop_status (struct address_space *aspace,
 		bs->print = 0;
 	    }
 
-	  /* Print nothing for this entry if we don't stop or don't print.  */
-	  if (bs->stop == 0 || bs->print == 0)
-	    bs->print_it = print_it_noop;
 	}
+
+      /* Print nothing for this entry if we don't stop or don't
+	 print.  */
+      if (!bs->stop || !bs->print)
+	bs->print_it = print_it_noop;
     }
 
   /* If we aren't stopping, the value of some hardware watchpoint may
@@ -4290,6 +5301,25 @@ handle_jit_event (void)
   target_terminal_inferior ();
 }
 
+/* Handle an solib event by calling solib_add.  */
+
+void
+handle_solib_event (void)
+{
+  clear_program_space_solib_cache (current_inferior ()->pspace);
+
+  /* Check for any newly added shared libraries if we're supposed to
+     be adding them automatically.  Switch terminal for any messages
+     produced by breakpoint_re_set.  */
+  target_terminal_ours_for_output ();
+#ifdef SOLIB_ADD
+  SOLIB_ADD (NULL, 0, &current_target, auto_solib_add);
+#else
+  solib_add (NULL, 0, &current_target, auto_solib_add);
+#endif
+  target_terminal_inferior ();
+}
+
 /* Prepare WHAT final decision for infrun.  */
 
 /* Decide what infrun needs to do with this bpstat.  */
@@ -4298,10 +5328,6 @@ struct bpstat_what
 bpstat_what (bpstat bs_head)
 {
   struct bpstat_what retval;
-  /* We need to defer calling `solib_add', as adding new symbols
-     resets breakpoints, which in turn deletes breakpoint locations,
-     and hence may clear unprocessed entries in the BS chain.  */
-  int shlib_event = 0;
   int jit_event = 0;
   bpstat bs;
 
@@ -4333,6 +5359,7 @@ bpstat_what (bpstat bs_head)
 	case bp_hardware_breakpoint:
 	case bp_until:
 	case bp_finish:
+	case bp_shlib_event:
 	  if (bs->stop)
 	    {
 	      if (bs->print)
@@ -4361,9 +5388,10 @@ bpstat_what (bpstat bs_head)
 	    }
 	  break;
 	case bp_longjmp:
+	case bp_longjmp_call_dummy:
 	case bp_exception:
 	  this_action = BPSTAT_WHAT_SET_LONGJMP_RESUME;
-	  retval.is_longjmp = bptype == bp_longjmp;
+	  retval.is_longjmp = bptype != bp_exception;
 	  break;
 	case bp_longjmp_resume:
 	case bp_exception_resume:
@@ -4410,18 +5438,6 @@ bpstat_what (bpstat bs_head)
 		 This requires no further action.  */
 	    }
 	  break;
-	case bp_shlib_event:
-	  shlib_event = 1;
-
-	  /* If requested, stop when the dynamic linker notifies GDB
-	     of events.  This allows the user to get control and place
-	     breakpoints in initializer routines for dynamically
-	     loaded objects (among other things).  */
-	  if (stop_on_solib_events)
-	    this_action = BPSTAT_WHAT_STOP_NOISY;
-	  else
-	    this_action = BPSTAT_WHAT_SINGLE;
-	  break;
 	case bp_jit_event:
 	  jit_event = 1;
 	  this_action = BPSTAT_WHAT_SINGLE;
@@ -4456,6 +5472,11 @@ bpstat_what (bpstat bs_head)
 	     PC of the former breakpoint.  */
 	  this_action = BPSTAT_WHAT_KEEP_CHECKING;
 	  break;
+
+	case bp_dprintf:
+	  this_action = BPSTAT_WHAT_STOP_SILENT;
+	  break;
+
 	default:
 	  internal_error (__FILE__, __LINE__,
 			  _("bpstat_what: unhandled bptype %d"), (int) bptype);
@@ -4467,27 +5488,6 @@ bpstat_what (bpstat bs_head)
   /* These operations may affect the bs->breakpoint_at state so they are
      delayed after MAIN_ACTION is decided above.  */
 
-  if (shlib_event)
-    {
-      if (debug_infrun)
-	fprintf_unfiltered (gdb_stdlog, "bpstat_what: bp_shlib_event\n");
-
-      /* Check for any newly added shared libraries if we're supposed
-	 to be adding them automatically.  */
-
-      /* Switch terminal for any messages produced by
-	 breakpoint_re_set.  */
-      target_terminal_ours_for_output ();
-
-#ifdef SOLIB_ADD
-      SOLIB_ADD (NULL, 0, &current_target, auto_solib_add);
-#else
-      solib_add (NULL, 0, &current_target, auto_solib_add);
-#endif
-
-      target_terminal_inferior ();
-    }
-
   if (jit_event)
     {
       if (debug_infrun)
@@ -4563,13 +5563,73 @@ wrap_indent_at_field (struct ui_out *uiout, const char *col_name)
 	  memset (wrap_indent, ' ', total_width);
 	  wrap_indent[total_width] = 0;
 
-	  return wrap_indent;
-	}
+	  return wrap_indent;
+	}
+
+      total_width += width + 1;
+    }
+
+  return NULL;
+}
+
+/* Determine if the locations of this breakpoint will have their conditions
+   evaluated by the target, host or a mix of both.  Returns the following:
+
+    "host": Host evals condition.
+    "host or target": Host or Target evals condition.
+    "target": Target evals condition.
+*/
+
+static const char *
+bp_condition_evaluator (struct breakpoint *b)
+{
+  struct bp_location *bl;
+  char host_evals = 0;
+  char target_evals = 0;
+
+  if (!b)
+    return NULL;
+
+  if (!is_breakpoint (b))
+    return NULL;
 
-      total_width += width + 1;
+  if (gdb_evaluates_breakpoint_condition_p ()
+      || !target_supports_evaluation_of_breakpoint_conditions ())
+    return condition_evaluation_host;
+
+  for (bl = b->loc; bl; bl = bl->next)
+    {
+      if (bl->cond_bytecode)
+	target_evals++;
+      else
+	host_evals++;
     }
 
-  return NULL;
+  if (host_evals && target_evals)
+    return condition_evaluation_both;
+  else if (target_evals)
+    return condition_evaluation_target;
+  else
+    return condition_evaluation_host;
+}
+
+/* Determine the breakpoint location's condition evaluator.  This is
+   similar to bp_condition_evaluator, but for locations.  */
+
+static const char *
+bp_location_condition_evaluator (struct bp_location *bl)
+{
+  if (bl && !is_breakpoint (bl->owner))
+    return NULL;
+
+  if (gdb_evaluates_breakpoint_condition_p ()
+      || !target_supports_evaluation_of_breakpoint_conditions ())
+    return condition_evaluation_host;
+
+  if (bl && bl->cond_bytecode)
+    return condition_evaluation_target;
+  else
+    return condition_evaluation_host;
 }
 
 /* Print the LOC location out of the list of B->LOC locations.  */
@@ -4618,10 +5678,10 @@ print_breakpoint_location (struct breakpoint *b,
     }
   else if (loc)
     {
-      struct ui_stream *stb = ui_out_stream_new (uiout);
-      struct cleanup *stb_chain = make_cleanup_ui_out_stream_delete (stb);
+      struct ui_file *stb = mem_fileopen ();
+      struct cleanup *stb_chain = make_cleanup_ui_file_delete (stb);
 
-      print_address_symbolic (loc->gdbarch, loc->address, stb->stream,
+      print_address_symbolic (loc->gdbarch, loc->address, stb,
 			      demangle, "");
       ui_out_field_stream (uiout, "at", stb);
 
@@ -4630,6 +5690,16 @@ print_breakpoint_location (struct breakpoint *b,
   else
     ui_out_field_string (uiout, "pending", b->addr_string);
 
+  if (loc && is_breakpoint (b)
+      && breakpoint_condition_evaluation_mode () == condition_evaluation_target
+      && bp_condition_evaluator (b) == condition_evaluation_both)
+    {
+      ui_out_text (uiout, " (");
+      ui_out_field_string (uiout, "evaluated-by",
+			   bp_location_condition_evaluator (loc));
+      ui_out_text (uiout, ")");
+    }
+
   do_cleanups (old_chain);
 }
 
@@ -4654,6 +5724,7 @@ bptype_string (enum bptype type)
     {bp_access_watchpoint, "acc watchpoint"},
     {bp_longjmp, "longjmp"},
     {bp_longjmp_resume, "longjmp resume"},
+    {bp_longjmp_call_dummy, "longjmp for call dummy"},
     {bp_exception, "exception"},
     {bp_exception_resume, "exception resume"},
     {bp_step_resume, "step resume"},
@@ -4671,6 +5742,7 @@ bptype_string (enum bptype type)
     {bp_tracepoint, "tracepoint"},
     {bp_fast_tracepoint, "fast tracepoint"},
     {bp_static_tracepoint, "static tracepoint"},
+    {bp_dprintf, "dprintf"},
     {bp_jit_event, "jit events"},
     {bp_gnu_ifunc_resolver, "STT_GNU_IFUNC resolver"},
     {bp_gnu_ifunc_resolver_return, "STT_GNU_IFUNC resolver return"},
@@ -4795,6 +5867,7 @@ print_one_breakpoint_location (struct breakpoint *b,
       case bp_finish:
       case bp_longjmp:
       case bp_longjmp_resume:
+      case bp_longjmp_call_dummy:
       case bp_exception:
       case bp_exception_resume:
       case bp_step_resume:
@@ -4811,6 +5884,7 @@ print_one_breakpoint_location (struct breakpoint *b,
       case bp_tracepoint:
       case bp_fast_tracepoint:
       case bp_static_tracepoint:
+      case bp_dprintf:
       case bp_jit_event:
       case bp_gnu_ifunc_resolver:
       case bp_gnu_ifunc_resolver_return:
@@ -4905,6 +5979,18 @@ print_one_breakpoint_location (struct breakpoint *b,
       else
 	ui_out_text (uiout, "\tstop only if ");
       ui_out_field_string (uiout, "cond", b->cond_string);
+
+      /* Print whether the target is doing the breakpoint's condition
+	 evaluation.  If GDB is doing the evaluation, don't print anything.  */
+      if (is_breakpoint (b)
+	  && breakpoint_condition_evaluation_mode ()
+	  == condition_evaluation_target)
+	{
+	  ui_out_text (uiout, " (");
+	  ui_out_field_string (uiout, "evaluated-by",
+			       bp_condition_evaluator (b));
+	  ui_out_text (uiout, " evals)");
+	}
       ui_out_text (uiout, "\n");
     }
 
@@ -4919,7 +6005,7 @@ print_one_breakpoint_location (struct breakpoint *b,
   if (!part_of_multiple && b->hit_count)
     {
       /* FIXME should make an annotation for this.  */
-      if (ep_is_catchpoint (b))
+      if (is_catchpoint (b))
 	ui_out_text (uiout, "\tcatchpoint");
       else if (is_tracepoint (b))
 	ui_out_text (uiout, "\ttracepoint");
@@ -4947,6 +6033,23 @@ print_one_breakpoint_location (struct breakpoint *b,
       ui_out_text (uiout, " hits\n");
     }
 
+  /* Note that an enable count of 1 corresponds to "enable once"
+     behavior, which is reported by the combination of enablement and
+     disposition, so we don't need to mention it here.  */
+  if (!part_of_multiple && b->enable_count > 1)
+    {
+      annotate_field (8);
+      ui_out_text (uiout, "\tdisable after ");
+      /* Tweak the wording to clarify that ignore and enable counts
+	 are distinct, and have additive effect.  */
+      if (b->ignore_count)
+	ui_out_text (uiout, "additional ");
+      else
+	ui_out_text (uiout, "next ");
+      ui_out_field_int (uiout, "enable", b->enable_count);
+      ui_out_text (uiout, " hits\n");
+    }
+
   if (!part_of_multiple && is_tracepoint (b))
     {
       struct tracepoint *tp = (struct tracepoint *) b;
@@ -4959,6 +6062,15 @@ print_one_breakpoint_location (struct breakpoint *b,
 	}
     }
   
+  if (!part_of_multiple && b->extra_string
+      && b->type == bp_dprintf && !b->commands)
+    {
+      annotate_field (7);
+      ui_out_text (uiout, "\t(agent printf) ");
+      ui_out_field_string (uiout, "printf", b->extra_string);
+      ui_out_text (uiout, "\n");
+    }
+
   l = b->commands ? b->commands->commands : NULL;
   if (!part_of_multiple && l)
     {
@@ -5617,6 +6729,7 @@ init_bp_location (struct bp_location *loc, const struct bp_location_ops *ops,
   loc->ops = ops;
   loc->owner = owner;
   loc->cond = NULL;
+  loc->cond_bytecode = NULL;
   loc->shlib_disabled = 0;
   loc->enabled = 1;
 
@@ -5627,6 +6740,7 @@ init_bp_location (struct bp_location *loc, const struct bp_location_ops *ops,
     case bp_finish:
     case bp_longjmp:
     case bp_longjmp_resume:
+    case bp_longjmp_call_dummy:
     case bp_exception:
     case bp_exception_resume:
     case bp_step_resume:
@@ -5643,10 +6757,13 @@ init_bp_location (struct bp_location *loc, const struct bp_location_ops *ops,
     case bp_exception_master:
     case bp_gnu_ifunc_resolver:
     case bp_gnu_ifunc_resolver_return:
+    case bp_dprintf:
       loc->loc_type = bp_loc_software_breakpoint;
+      mark_breakpoint_location_modified (loc);
       break;
     case bp_hardware_breakpoint:
       loc->loc_type = bp_loc_hardware_breakpoint;
+      mark_breakpoint_location_modified (loc);
       break;
     case bp_hardware_watchpoint:
     case bp_read_watchpoint:
@@ -5782,16 +6899,18 @@ set_breakpoint_location_function (struct bp_location *loc, int explicit_loc)
       || is_tracepoint (loc->owner))
     {
       int is_gnu_ifunc;
+      const char *function_name;
+      CORE_ADDR func_addr;
 
-      find_pc_partial_function_gnu_ifunc (loc->address, &loc->function_name,
-					  NULL, NULL, &is_gnu_ifunc);
+      find_pc_partial_function_gnu_ifunc (loc->address, &function_name,
+					  &func_addr, NULL, &is_gnu_ifunc);
 
       if (is_gnu_ifunc && !explicit_loc)
 	{
 	  struct breakpoint *b = loc->owner;
 
 	  gdb_assert (loc->pspace == current_program_space);
-	  if (gnu_ifunc_resolve_name (loc->function_name,
+	  if (gnu_ifunc_resolve_name (function_name,
 				      &loc->requested_address))
 	    {
 	      /* Recalculate ADDRESS based on new REQUESTED_ADDRESS.  */
@@ -5805,11 +6924,14 @@ set_breakpoint_location_function (struct bp_location *loc, int explicit_loc)
 	      /* Create only the whole new breakpoint of this type but do not
 		 mess more complicated breakpoints with multiple locations.  */
 	      b->type = bp_gnu_ifunc_resolver;
+	      /* Remember the resolver's address for use by the return
+	         breakpoint.  */
+	      loc->related_address = func_addr;
 	    }
 	}
 
-      if (loc->function_name)
-	loc->function_name = xstrdup (loc->function_name);
+      if (function_name)
+	loc->function_name = xstrdup (function_name);
     }
 }
 
@@ -5922,8 +7044,10 @@ set_longjmp_breakpoint (struct thread_info *tp, struct frame_id frame)
 	enum bptype type = b->type == bp_longjmp_master ? bp_longjmp : bp_exception;
 	struct breakpoint *clone;
 
+	/* longjmp_breakpoint_ops ensures INITIATING_FRAME is cleared again
+	   after their removal.  */
 	clone = momentary_breakpoint_from_master (b, type,
-						  &momentary_breakpoint_ops);
+						  &longjmp_breakpoint_ops);
 	clone->thread = thread;
       }
 
@@ -5945,6 +7069,88 @@ delete_longjmp_breakpoint (int thread)
 }
 
 void
+delete_longjmp_breakpoint_at_next_stop (int thread)
+{
+  struct breakpoint *b, *b_tmp;
+
+  ALL_BREAKPOINTS_SAFE (b, b_tmp)
+    if (b->type == bp_longjmp || b->type == bp_exception)
+      {
+	if (b->thread == thread)
+	  b->disposition = disp_del_at_next_stop;
+      }
+}
+
+/* Place breakpoints of type bp_longjmp_call_dummy to catch longjmp for
+   INFERIOR_PTID thread.  Chain them all by RELATED_BREAKPOINT and return
+   pointer to any of them.  Return NULL if this system cannot place longjmp
+   breakpoints.  */
+
+struct breakpoint *
+set_longjmp_breakpoint_for_call_dummy (void)
+{
+  struct breakpoint *b, *retval = NULL;
+
+  ALL_BREAKPOINTS (b)
+    if (b->pspace == current_program_space && b->type == bp_longjmp_master)
+      {
+	struct breakpoint *new_b;
+
+	new_b = momentary_breakpoint_from_master (b, bp_longjmp_call_dummy,
+						  &momentary_breakpoint_ops);
+	new_b->thread = pid_to_thread_id (inferior_ptid);
+
+	/* Link NEW_B into the chain of RETVAL breakpoints.  */
+
+	gdb_assert (new_b->related_breakpoint == new_b);
+	if (retval == NULL)
+	  retval = new_b;
+	new_b->related_breakpoint = retval;
+	while (retval->related_breakpoint != new_b->related_breakpoint)
+	  retval = retval->related_breakpoint;
+	retval->related_breakpoint = new_b;
+      }
+
+  return retval;
+}
+
+/* Verify all existing dummy frames and their associated breakpoints for
+   THREAD.  Remove those which can no longer be found in the current frame
+   stack.
+
+   You should call this function only at places where it is safe to currently
+   unwind the whole stack.  Failed stack unwind would discard live dummy
+   frames.  */
+
+void
+check_longjmp_breakpoint_for_call_dummy (int thread)
+{
+  struct breakpoint *b, *b_tmp;
+
+  ALL_BREAKPOINTS_SAFE (b, b_tmp)
+    if (b->type == bp_longjmp_call_dummy && b->thread == thread)
+      {
+	struct breakpoint *dummy_b = b->related_breakpoint;
+
+	while (dummy_b != b && dummy_b->type != bp_call_dummy)
+	  dummy_b = dummy_b->related_breakpoint;
+	if (dummy_b->type != bp_call_dummy
+	    || frame_find_by_id (dummy_b->frame_id) != NULL)
+	  continue;
+	
+	dummy_frame_discard (dummy_b->frame_id);
+
+	while (b->related_breakpoint != b)
+	  {
+	    if (b_tmp == b->related_breakpoint)
+	      b_tmp = b->related_breakpoint->next;
+	    delete_breakpoint (b->related_breakpoint);
+	  }
+	delete_breakpoint (b);
+      }
+}
+
+void
 enable_overlay_breakpoints (void)
 {
   struct breakpoint *b;
@@ -6214,11 +7420,16 @@ remove_catch_fork (struct bp_location *bl)
 
 static int
 breakpoint_hit_catch_fork (const struct bp_location *bl,
-			   struct address_space *aspace, CORE_ADDR bp_addr)
+			   struct address_space *aspace, CORE_ADDR bp_addr,
+			   const struct target_waitstatus *ws)
 {
   struct fork_catchpoint *c = (struct fork_catchpoint *) bl->owner;
 
-  return inferior_has_forked (inferior_ptid, &c->forked_inferior_pid);
+  if (ws->kind != TARGET_WAITKIND_FORKED)
+    return 0;
+
+  c->forked_inferior_pid = ws->value.related_pid;
+  return 1;
 }
 
 /* Implement the "print_it" breakpoint_ops method for fork
@@ -6323,11 +7534,16 @@ remove_catch_vfork (struct bp_location *bl)
 
 static int
 breakpoint_hit_catch_vfork (const struct bp_location *bl,
-			    struct address_space *aspace, CORE_ADDR bp_addr)
+			    struct address_space *aspace, CORE_ADDR bp_addr,
+			    const struct target_waitstatus *ws)
 {
   struct fork_catchpoint *c = (struct fork_catchpoint *) bl->owner;
 
-  return inferior_has_vforked (inferior_ptid, &c->forked_inferior_pid);
+  if (ws->kind != TARGET_WAITKIND_VFORKED)
+    return 0;
+
+  c->forked_inferior_pid = ws->value.related_pid;
+  return 1;
 }
 
 /* Implement the "print_it" breakpoint_ops method for vfork
@@ -6378,35 +7594,294 @@ print_one_catch_vfork (struct breakpoint *b, struct bp_location **last_loc)
   ui_out_text (uiout, "vfork");
   if (!ptid_equal (c->forked_inferior_pid, null_ptid))
     {
-      ui_out_text (uiout, ", process ");
-      ui_out_field_int (uiout, "what",
-                        ptid_get_pid (c->forked_inferior_pid));
-      ui_out_spaces (uiout, 1);
+      ui_out_text (uiout, ", process ");
+      ui_out_field_int (uiout, "what",
+                        ptid_get_pid (c->forked_inferior_pid));
+      ui_out_spaces (uiout, 1);
+    }
+}
+
+/* Implement the "print_mention" breakpoint_ops method for vfork
+   catchpoints.  */
+
+static void
+print_mention_catch_vfork (struct breakpoint *b)
+{
+  printf_filtered (_("Catchpoint %d (vfork)"), b->number);
+}
+
+/* Implement the "print_recreate" breakpoint_ops method for vfork
+   catchpoints.  */
+
+static void
+print_recreate_catch_vfork (struct breakpoint *b, struct ui_file *fp)
+{
+  fprintf_unfiltered (fp, "catch vfork");
+  print_recreate_thread (b, fp);
+}
+
+/* The breakpoint_ops structure to be used in vfork catchpoints.  */
+
+static struct breakpoint_ops catch_vfork_breakpoint_ops;
+
+/* An instance of this type is used to represent an solib catchpoint.
+   It includes a "struct breakpoint" as a kind of base class; users
+   downcast to "struct breakpoint *" when needed.  A breakpoint is
+   really of this type iff its ops pointer points to
+   CATCH_SOLIB_BREAKPOINT_OPS.  */
+
+struct solib_catchpoint
+{
+  /* The base class.  */
+  struct breakpoint base;
+
+  /* True for "catch load", false for "catch unload".  */
+  unsigned char is_load;
+
+  /* Regular expression to match, if any.  COMPILED is only valid when
+     REGEX is non-NULL.  */
+  char *regex;
+  regex_t compiled;
+};
+
+static void
+dtor_catch_solib (struct breakpoint *b)
+{
+  struct solib_catchpoint *self = (struct solib_catchpoint *) b;
+
+  if (self->regex)
+    regfree (&self->compiled);
+  xfree (self->regex);
+
+  base_breakpoint_ops.dtor (b);
+}
+
+static int
+insert_catch_solib (struct bp_location *ignore)
+{
+  return 0;
+}
+
+static int
+remove_catch_solib (struct bp_location *ignore)
+{
+  return 0;
+}
+
+static int
+breakpoint_hit_catch_solib (const struct bp_location *bl,
+			    struct address_space *aspace,
+			    CORE_ADDR bp_addr,
+			    const struct target_waitstatus *ws)
+{
+  struct solib_catchpoint *self = (struct solib_catchpoint *) bl->owner;
+  struct breakpoint *other;
+
+  if (ws->kind == TARGET_WAITKIND_LOADED)
+    return 1;
+
+  ALL_BREAKPOINTS (other)
+  {
+    struct bp_location *other_bl;
+
+    if (other == bl->owner)
+      continue;
+
+    if (other->type != bp_shlib_event)
+      continue;
+
+    if (self->base.pspace != NULL && other->pspace != self->base.pspace)
+      continue;
+
+    for (other_bl = other->loc; other_bl != NULL; other_bl = other_bl->next)
+      {
+	if (other->ops->breakpoint_hit (other_bl, aspace, bp_addr, ws))
+	  return 1;
+      }
+  }
+
+  return 0;
+}
+
+static void
+check_status_catch_solib (struct bpstats *bs)
+{
+  struct solib_catchpoint *self
+    = (struct solib_catchpoint *) bs->breakpoint_at;
+  int ix;
+
+  if (self->is_load)
+    {
+      struct so_list *iter;
+
+      for (ix = 0;
+	   VEC_iterate (so_list_ptr, current_program_space->added_solibs,
+			ix, iter);
+	   ++ix)
+	{
+	  if (!self->regex
+	      || regexec (&self->compiled, iter->so_name, 0, NULL, 0) == 0)
+	    return;
+	}
+    }
+  else
+    {
+      char *iter;
+
+      for (ix = 0;
+	   VEC_iterate (char_ptr, current_program_space->deleted_solibs,
+			ix, iter);
+	   ++ix)
+	{
+	  if (!self->regex
+	      || regexec (&self->compiled, iter, 0, NULL, 0) == 0)
+	    return;
+	}
+    }
+
+  bs->stop = 0;
+  bs->print_it = print_it_noop;
+}
+
+static enum print_stop_action
+print_it_catch_solib (bpstat bs)
+{
+  struct breakpoint *b = bs->breakpoint_at;
+  struct ui_out *uiout = current_uiout;
+
+  annotate_catchpoint (b->number);
+  if (b->disposition == disp_del)
+    ui_out_text (uiout, "\nTemporary catchpoint ");
+  else
+    ui_out_text (uiout, "\nCatchpoint ");
+  ui_out_field_int (uiout, "bkptno", b->number);
+  ui_out_text (uiout, "\n");
+  if (ui_out_is_mi_like_p (uiout))
+    ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
+  print_solib_event (1);
+  return PRINT_SRC_AND_LOC;
+}
+
+static void
+print_one_catch_solib (struct breakpoint *b, struct bp_location **locs)
+{
+  struct solib_catchpoint *self = (struct solib_catchpoint *) b;
+  struct value_print_options opts;
+  struct ui_out *uiout = current_uiout;
+  char *msg;
+
+  get_user_print_options (&opts);
+  /* Field 4, the address, is omitted (which makes the columns not
+     line up too nicely with the headers, but the effect is relatively
+     readable).  */
+  if (opts.addressprint)
+    {
+      annotate_field (4);
+      ui_out_field_skip (uiout, "addr");
+    }
+
+  annotate_field (5);
+  if (self->is_load)
+    {
+      if (self->regex)
+	msg = xstrprintf (_("load of library matching %s"), self->regex);
+      else
+	msg = xstrdup (_("load of library"));
+    }
+  else
+    {
+      if (self->regex)
+	msg = xstrprintf (_("unload of library matching %s"), self->regex);
+      else
+	msg = xstrdup (_("unload of library"));
+    }
+  ui_out_field_string (uiout, "what", msg);
+  xfree (msg);
+}
+
+static void
+print_mention_catch_solib (struct breakpoint *b)
+{
+  struct solib_catchpoint *self = (struct solib_catchpoint *) b;
+
+  printf_filtered (_("Catchpoint %d (%s)"), b->number,
+		   self->is_load ? "load" : "unload");
+}
+
+static void
+print_recreate_catch_solib (struct breakpoint *b, struct ui_file *fp)
+{
+  struct solib_catchpoint *self = (struct solib_catchpoint *) b;
+
+  fprintf_unfiltered (fp, "%s %s",
+		      b->disposition == disp_del ? "tcatch" : "catch",
+		      self->is_load ? "load" : "unload");
+  if (self->regex)
+    fprintf_unfiltered (fp, " %s", self->regex);
+  fprintf_unfiltered (fp, "\n");
+}
+
+static struct breakpoint_ops catch_solib_breakpoint_ops;
+
+/* A helper function that does all the work for "catch load" and
+   "catch unload".  */
+
+static void
+catch_load_or_unload (char *arg, int from_tty, int is_load,
+		      struct cmd_list_element *command)
+{
+  struct solib_catchpoint *c;
+  struct gdbarch *gdbarch = get_current_arch ();
+  int tempflag;
+  struct cleanup *cleanup;
+
+  tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
+
+  if (!arg)
+    arg = "";
+  arg = skip_spaces (arg);
+
+  c = XCNEW (struct solib_catchpoint);
+  cleanup = make_cleanup (xfree, c);
+
+  if (*arg != '\0')
+    {
+      int errcode;
+
+      errcode = regcomp (&c->compiled, arg, REG_NOSUB);
+      if (errcode != 0)
+	{
+	  char *err = get_regcomp_error (errcode, &c->compiled);
+
+	  make_cleanup (xfree, err);
+	  error (_("Invalid regexp (%s): %s"), err, arg);
+	}
+      c->regex = xstrdup (arg);
     }
-}
 
-/* Implement the "print_mention" breakpoint_ops method for vfork
-   catchpoints.  */
+  c->is_load = is_load;
+  init_catchpoint (&c->base, gdbarch, tempflag, NULL,
+		   &catch_solib_breakpoint_ops);
+
+  discard_cleanups (cleanup);
+  install_breakpoint (0, &c->base, 1);
+}
 
 static void
-print_mention_catch_vfork (struct breakpoint *b)
+catch_load_command_1 (char *arg, int from_tty,
+		      struct cmd_list_element *command)
 {
-  printf_filtered (_("Catchpoint %d (vfork)"), b->number);
+  catch_load_or_unload (arg, from_tty, 1, command);
 }
 
-/* Implement the "print_recreate" breakpoint_ops method for vfork
-   catchpoints.  */
-
 static void
-print_recreate_catch_vfork (struct breakpoint *b, struct ui_file *fp)
+catch_unload_command_1 (char *arg, int from_tty,
+			struct cmd_list_element *command)
 {
-  fprintf_unfiltered (fp, "catch vfork");
-  print_recreate_thread (b, fp);
+  catch_load_or_unload (arg, from_tty, 0, command);
 }
 
-/* The breakpoint_ops structure to be used in vfork catchpoints.  */
-
-static struct breakpoint_ops catch_vfork_breakpoint_ops;
+DEF_VEC_I(int);
 
 /* An instance of this type is used to represent a syscall catchpoint.
    It includes a "struct breakpoint" as a kind of base class; users
@@ -6439,6 +7914,47 @@ dtor_catch_syscall (struct breakpoint *b)
   base_breakpoint_ops.dtor (b);
 }
 
+static const struct inferior_data *catch_syscall_inferior_data = NULL;
+
+struct catch_syscall_inferior_data
+{
+  /* We keep a count of the number of times the user has requested a
+     particular syscall to be tracked, and pass this information to the
+     target.  This lets capable targets implement filtering directly.  */
+
+  /* Number of times that "any" syscall is requested.  */
+  int any_syscall_count;
+
+  /* Count of each system call.  */
+  VEC(int) *syscalls_counts;
+
+  /* This counts all syscall catch requests, so we can readily determine
+     if any catching is necessary.  */
+  int total_syscalls_count;
+};
+
+static struct catch_syscall_inferior_data*
+get_catch_syscall_inferior_data (struct inferior *inf)
+{
+  struct catch_syscall_inferior_data *inf_data;
+
+  inf_data = inferior_data (inf, catch_syscall_inferior_data);
+  if (inf_data == NULL)
+    {
+      inf_data = XZALLOC (struct catch_syscall_inferior_data);
+      set_inferior_data (inf, catch_syscall_inferior_data, inf_data);
+    }
+
+  return inf_data;
+}
+
+static void
+catch_syscall_inferior_data_cleanup (struct inferior *inf, void *arg)
+{
+  xfree (arg);
+}
+
+
 /* Implement the "insert" breakpoint_ops method for syscall
    catchpoints.  */
 
@@ -6447,10 +7963,12 @@ insert_catch_syscall (struct bp_location *bl)
 {
   struct syscall_catchpoint *c = (struct syscall_catchpoint *) bl->owner;
   struct inferior *inf = current_inferior ();
+  struct catch_syscall_inferior_data *inf_data
+    = get_catch_syscall_inferior_data (inf);
 
-  ++inf->total_syscalls_count;
+  ++inf_data->total_syscalls_count;
   if (!c->syscalls_to_be_caught)
-    ++inf->any_syscall_count;
+    ++inf_data->any_syscall_count;
   else
     {
       int i, iter;
@@ -6461,28 +7979,31 @@ insert_catch_syscall (struct bp_location *bl)
 	{
           int elem;
 
-	  if (iter >= VEC_length (int, inf->syscalls_counts))
+	  if (iter >= VEC_length (int, inf_data->syscalls_counts))
 	    {
-              int old_size = VEC_length (int, inf->syscalls_counts);
+              int old_size = VEC_length (int, inf_data->syscalls_counts);
               uintptr_t vec_addr_offset
 		= old_size * ((uintptr_t) sizeof (int));
               uintptr_t vec_addr;
-              VEC_safe_grow (int, inf->syscalls_counts, iter + 1);
-              vec_addr = (uintptr_t) VEC_address (int, inf->syscalls_counts) +
-		vec_addr_offset;
+              VEC_safe_grow (int, inf_data->syscalls_counts, iter + 1);
+              vec_addr = ((uintptr_t) VEC_address (int,
+						  inf_data->syscalls_counts)
+			  + vec_addr_offset);
               memset ((void *) vec_addr, 0,
                       (iter + 1 - old_size) * sizeof (int));
 	    }
-          elem = VEC_index (int, inf->syscalls_counts, iter);
-          VEC_replace (int, inf->syscalls_counts, iter, ++elem);
+          elem = VEC_index (int, inf_data->syscalls_counts, iter);
+          VEC_replace (int, inf_data->syscalls_counts, iter, ++elem);
 	}
     }
 
   return target_set_syscall_catchpoint (PIDGET (inferior_ptid),
-					inf->total_syscalls_count != 0,
-					inf->any_syscall_count,
-					VEC_length (int, inf->syscalls_counts),
-					VEC_address (int, inf->syscalls_counts));
+					inf_data->total_syscalls_count != 0,
+					inf_data->any_syscall_count,
+					VEC_length (int,
+						    inf_data->syscalls_counts),
+					VEC_address (int,
+						     inf_data->syscalls_counts));
 }
 
 /* Implement the "remove" breakpoint_ops method for syscall
@@ -6493,10 +8014,12 @@ remove_catch_syscall (struct bp_location *bl)
 {
   struct syscall_catchpoint *c = (struct syscall_catchpoint *) bl->owner;
   struct inferior *inf = current_inferior ();
+  struct catch_syscall_inferior_data *inf_data
+    = get_catch_syscall_inferior_data (inf);
 
-  --inf->total_syscalls_count;
+  --inf_data->total_syscalls_count;
   if (!c->syscalls_to_be_caught)
-    --inf->any_syscall_count;
+    --inf_data->any_syscall_count;
   else
     {
       int i, iter;
@@ -6506,20 +8029,21 @@ remove_catch_syscall (struct bp_location *bl)
            i++)
 	{
           int elem;
-	  if (iter >= VEC_length (int, inf->syscalls_counts))
+	  if (iter >= VEC_length (int, inf_data->syscalls_counts))
 	    /* Shouldn't happen.  */
 	    continue;
-          elem = VEC_index (int, inf->syscalls_counts, iter);
-          VEC_replace (int, inf->syscalls_counts, iter, --elem);
+          elem = VEC_index (int, inf_data->syscalls_counts, iter);
+          VEC_replace (int, inf_data->syscalls_counts, iter, --elem);
         }
     }
 
   return target_set_syscall_catchpoint (PIDGET (inferior_ptid),
-					inf->total_syscalls_count != 0,
-					inf->any_syscall_count,
-					VEC_length (int, inf->syscalls_counts),
+					inf_data->total_syscalls_count != 0,
+					inf_data->any_syscall_count,
+					VEC_length (int,
+						    inf_data->syscalls_counts),
 					VEC_address (int,
-						     inf->syscalls_counts));
+						     inf_data->syscalls_counts));
 }
 
 /* Implement the "breakpoint_hit" breakpoint_ops method for syscall
@@ -6527,7 +8051,8 @@ remove_catch_syscall (struct bp_location *bl)
 
 static int
 breakpoint_hit_catch_syscall (const struct bp_location *bl,
-			      struct address_space *aspace, CORE_ADDR bp_addr)
+			      struct address_space *aspace, CORE_ADDR bp_addr,
+			      const struct target_waitstatus *ws)
 {
   /* We must check if we are catching specific syscalls in this
      breakpoint.  If we are, then we must guarantee that the called
@@ -6536,9 +8061,12 @@ breakpoint_hit_catch_syscall (const struct bp_location *bl,
   const struct syscall_catchpoint *c
     = (const struct syscall_catchpoint *) bl->owner;
 
-  if (!inferior_has_called_syscall (inferior_ptid, &syscall_number))
+  if (ws->kind != TARGET_WAITKIND_SYSCALL_ENTRY
+      && ws->kind != TARGET_WAITKIND_SYSCALL_RETURN)
     return 0;
 
+  syscall_number = ws->value.syscall_number;
+
   /* Now, checking if the syscall is the same.  */
   if (c->syscalls_to_be_caught)
     {
@@ -6572,7 +8100,6 @@ print_it_catch_syscall (bpstat bs)
   ptid_t ptid;
   struct target_waitstatus last;
   struct syscall s;
-  char *syscall_id;
 
   get_last_target_status (&ptid, &last);
 
@@ -6839,11 +8366,16 @@ remove_catch_exec (struct bp_location *bl)
 
 static int
 breakpoint_hit_catch_exec (const struct bp_location *bl,
-			   struct address_space *aspace, CORE_ADDR bp_addr)
+			   struct address_space *aspace, CORE_ADDR bp_addr,
+			   const struct target_waitstatus *ws)
 {
   struct exec_catchpoint *c = (struct exec_catchpoint *) bl->owner;
 
-  return inferior_has_execd (inferior_ptid, &c->exec_pathname);
+  if (ws->kind != TARGET_WAITKIND_EXECD)
+    return 0;
+
+  c->exec_pathname = xstrdup (ws->value.execd_pathname);
+  return 1;
 }
 
 static enum print_stop_action
@@ -7095,6 +8627,7 @@ momentary_breakpoint_from_master (struct breakpoint *orig,
   copy->loc->address = orig->loc->address;
   copy->loc->section = orig->loc->section;
   copy->loc->pspace = orig->loc->pspace;
+  copy->loc->probe = orig->loc->probe;
 
   if (orig->loc->source_file != NULL)
     copy->loc->source_file = xstrdup (orig->loc->source_file);
@@ -7180,6 +8713,7 @@ add_location_to_breakpoint (struct breakpoint *b,
   loc->requested_address = sal->pc;
   loc->address = adjusted_address;
   loc->pspace = sal->pspace;
+  loc->probe = sal->probe;
   gdb_assert (loc->pspace != NULL);
   loc->section = sal->section;
   loc->gdbarch = loc_gdbarch;
@@ -7235,7 +8769,101 @@ bp_loc_is_permanent (struct bp_location *loc)
   return retval;
 }
 
+/* Build a command list for the dprintf corresponding to the current
+   settings of the dprintf style options.  */
+
+static void
+update_dprintf_command_list (struct breakpoint *b)
+{
+  char *dprintf_args = b->extra_string;
+  char *printf_line = NULL;
+
+  if (!dprintf_args)
+    return;
+
+  dprintf_args = skip_spaces (dprintf_args);
+
+  /* Allow a comma, as it may have terminated a location, but don't
+     insist on it.  */
+  if (*dprintf_args == ',')
+    ++dprintf_args;
+  dprintf_args = skip_spaces (dprintf_args);
+
+  if (*dprintf_args != '"')
+    error (_("Bad format string, missing '\"'."));
+
+  if (strcmp (dprintf_style, dprintf_style_gdb) == 0)
+    printf_line = xstrprintf ("printf %s", dprintf_args);
+  else if (strcmp (dprintf_style, dprintf_style_call) == 0)
+    {
+      if (!dprintf_function)
+	error (_("No function supplied for dprintf call"));
+
+      if (dprintf_channel && strlen (dprintf_channel) > 0)
+	printf_line = xstrprintf ("call (void) %s (%s,%s)",
+				  dprintf_function,
+				  dprintf_channel,
+				  dprintf_args);
+      else
+	printf_line = xstrprintf ("call (void) %s (%s)",
+				  dprintf_function,
+				  dprintf_args);
+    }
+  else if (strcmp (dprintf_style, dprintf_style_agent) == 0)
+    {
+      if (target_can_run_breakpoint_commands ())
+	printf_line = xstrprintf ("agent-printf %s", dprintf_args);
+      else
+	{
+	  warning (_("Target cannot run dprintf commands, falling back to GDB printf"));
+	  printf_line = xstrprintf ("printf %s", dprintf_args);
+	}
+    }
+  else
+    internal_error (__FILE__, __LINE__,
+		    _("Invalid dprintf style."));
+
+  /* Manufacture a printf/continue sequence.  */
+  if (printf_line)
+    {
+      struct command_line *printf_cmd_line, *cont_cmd_line = NULL;
+
+      if (strcmp (dprintf_style, dprintf_style_agent) != 0)
+	{
+	  cont_cmd_line = xmalloc (sizeof (struct command_line));
+	  cont_cmd_line->control_type = simple_control;
+	  cont_cmd_line->body_count = 0;
+	  cont_cmd_line->body_list = NULL;
+	  cont_cmd_line->next = NULL;
+	  cont_cmd_line->line = xstrdup ("continue");
+	}
+
+      printf_cmd_line = xmalloc (sizeof (struct command_line));
+      printf_cmd_line->control_type = simple_control;
+      printf_cmd_line->body_count = 0;
+      printf_cmd_line->body_list = NULL;
+      printf_cmd_line->next = cont_cmd_line;
+      printf_cmd_line->line = printf_line;
+
+      breakpoint_set_commands (b, printf_cmd_line);
+    }
+}
+
+/* Update all dprintf commands, making their command lists reflect
+   current style settings.  */
 
+static void
+update_dprintf_commands (char *args, int from_tty,
+			 struct cmd_list_element *c)
+{
+  struct breakpoint *b;
+
+  ALL_BREAKPOINTS (b)
+    {
+      if (b->type == bp_dprintf)
+	update_dprintf_command_list (b);
+    }
+}
 
 /* Create a breakpoint with SAL as location.  Use ADDR_STRING
    as textual description of the location, and COND_STRING
@@ -7245,10 +8873,11 @@ static void
 init_breakpoint_sal (struct breakpoint *b, struct gdbarch *gdbarch,
 		     struct symtabs_and_lines sals, char *addr_string,
 		     char *filter, char *cond_string,
+		     char *extra_string,
 		     enum bptype type, enum bpdisp disposition,
 		     int thread, int task, int ignore_count,
 		     const struct breakpoint_ops *ops, int from_tty,
-		     int enabled, int internal,	unsigned flags,
+		     int enabled, int internal, unsigned flags,
 		     int display_canonical)
 {
   int i;
@@ -7289,8 +8918,9 @@ init_breakpoint_sal (struct breakpoint *b, struct gdbarch *gdbarch,
 	  init_raw_breakpoint (b, gdbarch, sal, type, ops);
 	  b->thread = thread;
 	  b->task = task;
-  
+
 	  b->cond_string = cond_string;
+	  b->extra_string = extra_string;
 	  b->ignore_count = ignore_count;
 	  b->enable_state = enabled ? bp_enabled : bp_disabled;
 	  b->disposition = disposition;
@@ -7303,7 +8933,7 @@ init_breakpoint_sal (struct breakpoint *b, struct gdbarch *gdbarch,
 	      struct tracepoint *t = (struct tracepoint *) b;
 	      struct static_tracepoint_marker marker;
 
-	      if (is_marker_spec (addr_string))
+	      if (strace_marker_p (b))
 		{
 		  /* We already know the marker exists, otherwise, we
 		     wouldn't see a sal for it.  */
@@ -7351,11 +8981,24 @@ init_breakpoint_sal (struct breakpoint *b, struct gdbarch *gdbarch,
       if (b->cond_string)
 	{
 	  char *arg = b->cond_string;
-	  loc->cond = parse_exp_1 (&arg, block_for_pc (loc->address), 0);
+	  loc->cond = parse_exp_1 (&arg, loc->address,
+				   block_for_pc (loc->address), 0);
 	  if (*arg)
-              error (_("Garbage %s follows condition"), arg);
+              error (_("Garbage '%s' follows condition"), arg);
+	}
+
+      /* Dynamic printf requires and uses additional arguments on the
+	 command line, otherwise it's an error.  */
+      if (type == bp_dprintf)
+	{
+	  if (b->extra_string)
+	    update_dprintf_command_list (b);
+	  else
+	    error (_("Format string required"));
 	}
-    }   
+      else if (b->extra_string)
+	error (_("Garbage '%s' at end of command"), b->extra_string);
+    }
 
   b->display_canonical = display_canonical;
   if (addr_string)
@@ -7372,6 +9015,7 @@ static void
 create_breakpoint_sal (struct gdbarch *gdbarch,
 		       struct symtabs_and_lines sals, char *addr_string,
 		       char *filter, char *cond_string,
+		       char *extra_string,
 		       enum bptype type, enum bpdisp disposition,
 		       int thread, int task, int ignore_count,
 		       const struct breakpoint_ops *ops, int from_tty,
@@ -7395,7 +9039,7 @@ create_breakpoint_sal (struct gdbarch *gdbarch,
 
   init_breakpoint_sal (b, gdbarch,
 		       sals, addr_string,
-		       filter, cond_string,
+		       filter, cond_string, extra_string,
 		       type, disposition,
 		       thread, task, ignore_count,
 		       ops, from_tty,
@@ -7424,7 +9068,7 @@ create_breakpoint_sal (struct gdbarch *gdbarch,
 static void
 create_breakpoints_sal (struct gdbarch *gdbarch,
 			struct linespec_result *canonical,
-			char *cond_string,
+			char *cond_string, char *extra_string,
 			enum bptype type, enum bpdisp disposition,
 			int thread, int task, int ignore_count,
 			const struct breakpoint_ops *ops, int from_tty,
@@ -7450,7 +9094,8 @@ create_breakpoints_sal (struct gdbarch *gdbarch,
       create_breakpoint_sal (gdbarch, lsal->sals,
 			     addr_string,
 			     filter_string,
-			     cond_string, type, disposition,
+			     cond_string, extra_string,
+			     type, disposition,
 			     thread, task, ignore_count, ops,
 			     from_tty, enabled, internal, flags,
 			     canonical->special_display);
@@ -7511,19 +9156,26 @@ parse_breakpoint_sals (char **address,
     }
   else
     {
+      struct symtab_and_line cursal = get_current_source_symtab_and_line ();
+
       /* Force almost all breakpoints to be in terms of the
          current_source_symtab (which is decode_line_1's default).
          This should produce the results we want almost all of the
-         time while leaving default_breakpoint_* alone.  */
-      if (last_displayed_sal_is_valid ())
+         time while leaving default_breakpoint_* alone.
+
+	 ObjC: However, don't match an Objective-C method name which
+	 may have a '+' or '-' succeeded by a '['.  */
+      if (last_displayed_sal_is_valid ()
+	  && (!cursal.symtab
+	      || ((strchr ("+-", (*address)[0]) != NULL)
+		  && ((*address)[1] != '['))))
 	decode_line_full (address, DECODE_LINE_FUNFIRSTLINE,
 			  get_last_displayed_symtab (),
 			  get_last_displayed_line (),
 			  canonical, NULL, NULL);
       else
 	decode_line_full (address, DECODE_LINE_FUNFIRSTLINE,
-			  (struct symtab *) NULL, 0,
-			  canonical, NULL, NULL);
+			  cursal.symtab, cursal.line, canonical, NULL, NULL);
     }
 }
 
@@ -7585,9 +9237,11 @@ check_fast_tracepoint_sals (struct gdbarch *gdbarch,
    PC identifies the context at which the condition should be parsed.
    If no condition is found, *COND_STRING is set to NULL.
    If no thread is found, *THREAD is set to -1.  */
-static void 
-find_condition_and_thread (char *tok, CORE_ADDR pc, 
-			   char **cond_string, int *thread, int *task)
+
+static void
+find_condition_and_thread (char *tok, CORE_ADDR pc,
+			   char **cond_string, int *thread, int *task,
+			   char **rest)
 {
   *cond_string = NULL;
   *thread = -1;
@@ -7599,26 +9253,31 @@ find_condition_and_thread (char *tok, CORE_ADDR pc,
       char *cond_end = NULL;
 
       tok = skip_spaces (tok);
-      
+
+      if ((*tok == '"' || *tok == ',') && rest)
+	{
+	  *rest = savestring (tok, strlen (tok));
+	  return;
+	}
+
       end_tok = skip_to_space (tok);
-      
+
       toklen = end_tok - tok;
-      
+
       if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
 	{
 	  struct expression *expr;
 
 	  tok = cond_start = end_tok + 1;
-	  expr = parse_exp_1 (&tok, block_for_pc (pc), 0);
+	  expr = parse_exp_1 (&tok, pc, block_for_pc (pc), 0);
 	  xfree (expr);
 	  cond_end = tok;
-	  *cond_string = savestring (cond_start, 
-				     cond_end - cond_start);
+	  *cond_string = savestring (cond_start, cond_end - cond_start);
 	}
       else if (toklen >= 1 && strncmp (tok, "thread", toklen) == 0)
 	{
 	  char *tmptok;
-	  
+
 	  tok = end_tok + 1;
 	  tmptok = tok;
 	  *thread = strtol (tok, &tok, 0);
@@ -7639,6 +9298,11 @@ find_condition_and_thread (char *tok, CORE_ADDR pc,
 	  if (!valid_task_id (*task))
 	    error (_("Unknown task %d."), *task);
 	}
+      else if (rest)
+	{
+	  *rest = savestring (tok, strlen (tok));
+	  return;
+	}
       else
 	error (_("Junk at end of arguments."));
     }
@@ -7651,8 +9315,6 @@ decode_static_tracepoint_spec (char **arg_p)
 {
   VEC(static_tracepoint_marker_p) *markers = NULL;
   struct symtabs_and_lines sals;
-  struct symtab_and_line sal;
-  struct symbol *sym;
   struct cleanup *old_chain;
   char *p = &(*arg_p)[3];
   char *endp;
@@ -7706,7 +9368,8 @@ decode_static_tracepoint_spec (char **arg_p)
 
 int
 create_breakpoint (struct gdbarch *gdbarch,
-		   char *arg, char *cond_string, int thread,
+		   char *arg, char *cond_string,
+		   int thread, char *extra_string,
 		   int parse_condition_and_thread,
 		   int tempflag, enum bptype type_wanted,
 		   int ignore_count,
@@ -7721,7 +9384,6 @@ create_breakpoint (struct gdbarch *gdbarch,
   struct linespec_result canonical;
   struct cleanup *old_chain;
   struct cleanup *bkpt_chain = NULL;
-  int i;
   int pending = 0;
   int task = 0;
   int prev_bkpt_count = breakpoint_count;
@@ -7730,32 +9392,19 @@ create_breakpoint (struct gdbarch *gdbarch,
 
   init_linespec_result (&canonical);
 
-  if (type_wanted == bp_static_tracepoint && is_marker_spec (arg))
-    {
-      int i;
-      struct linespec_sals lsal;
-
-      lsal.sals = decode_static_tracepoint_spec (&arg);
-
-      copy_arg = savestring (addr_start, arg - addr_start);
-
-      canonical.addr_string = xstrdup (copy_arg);
-      lsal.canonical = xstrdup (copy_arg);
-      VEC_safe_push (linespec_sals, canonical.sals, &lsal);
-
-      goto done;
-    }
-
   TRY_CATCH (e, RETURN_MASK_ALL)
     {
-      parse_breakpoint_sals (&arg, &canonical);
+      ops->create_sals_from_address (&arg, &canonical, type_wanted,
+				     addr_start, &copy_arg);
     }
 
   /* If caller is interested in rc value from parse, set value.  */
   switch (e.reason)
     {
-    case RETURN_QUIT:
-      throw_exception (e);
+    case GDB_NO_ERROR:
+      if (VEC_empty (linespec_sals, canonical.sals))
+	return 0;
+      break;
     case RETURN_ERROR:
       switch (e.error)
 	{
@@ -7797,12 +9446,9 @@ create_breakpoint (struct gdbarch *gdbarch,
 	}
       break;
     default:
-      if (VEC_empty (linespec_sals, canonical.sals))
-	return 0;
+      throw_exception (e);
     }
 
-  done:
-
   /* Create a chain of things that always need to be cleaned up.  */
   old_chain = make_cleanup_destroy_linespec_result (&canonical);
 
@@ -7844,16 +9490,22 @@ create_breakpoint (struct gdbarch *gdbarch,
 
       if (parse_condition_and_thread)
         {
+	    char *rest;
             /* Here we only parse 'arg' to separate condition
                from thread number, so parsing in context of first
                sal is OK.  When setting the breakpoint we'll 
                re-parse it in context of each sal.  */
             cond_string = NULL;
             thread = -1;
+	    rest = NULL;
             find_condition_and_thread (arg, lsal->sals.sals[0].pc, &cond_string,
-                                       &thread, &task);
+                                       &thread, &task, &rest);
             if (cond_string)
                 make_cleanup (xfree, cond_string);
+	    if (rest)
+	      make_cleanup (xfree, rest);
+	    if (rest)
+	      extra_string = rest;
         }
       else
         {
@@ -7863,59 +9515,19 @@ create_breakpoint (struct gdbarch *gdbarch,
                 cond_string = xstrdup (cond_string);
                 make_cleanup (xfree, cond_string);
             }
+            /* Create a private copy of any extra string.  */
+            if (extra_string)
+	      {
+                extra_string = xstrdup (extra_string);
+                make_cleanup (xfree, extra_string);
+	      }
         }
 
-      /* If the user is creating a static tracepoint by marker id
-	 (strace -m MARKER_ID), then store the sals index, so that
-	 breakpoint_re_set can try to match up which of the newly
-	 found markers corresponds to this one, and, don't try to
-	 expand multiple locations for each sal, given than SALS
-	 already should contain all sals for MARKER_ID.  */
-      if (type_wanted == bp_static_tracepoint
-	  && is_marker_spec (copy_arg))
-	{
-	  int i;
-
-	  for (i = 0; i < lsal->sals.nelts; ++i)
-	    {
-	      struct symtabs_and_lines expanded;
-	      struct tracepoint *tp;
-	      struct cleanup *old_chain;
-	      char *addr_string;
-
-	      expanded.nelts = 1;
-	      expanded.sals = &lsal->sals.sals[i];
-
-	      addr_string = xstrdup (canonical.addr_string);
-	      old_chain = make_cleanup (xfree, addr_string);
-
-	      tp = XCNEW (struct tracepoint);
-	      init_breakpoint_sal (&tp->base, gdbarch, expanded,
-				   addr_string, NULL,
-				   cond_string, type_wanted,
+      ops->create_breakpoints_sal (gdbarch, &canonical, lsal,
+				   cond_string, extra_string, type_wanted,
 				   tempflag ? disp_del : disp_donttouch,
 				   thread, task, ignore_count, ops,
-				   from_tty, enabled, internal, flags,
-				   canonical.special_display);
-	      /* Given that its possible to have multiple markers with
-		 the same string id, if the user is creating a static
-		 tracepoint by marker id ("strace -m MARKER_ID"), then
-		 store the sals index, so that breakpoint_re_set can
-		 try to match up which of the newly found markers
-		 corresponds to this one  */
-	      tp->static_trace_marker_id_idx = i;
-
-	      install_breakpoint (internal, &tp->base, 0);
-
-	      discard_cleanups (old_chain);
-	    }
-	}
-      else
-	create_breakpoints_sal (gdbarch, &canonical, cond_string,
-				type_wanted,
-				tempflag ? disp_del : disp_donttouch,
-				thread, task, ignore_count, ops, from_tty,
-				enabled, internal, flags);
+				   from_tty, enabled, internal, flags);
     }
   else
     {
@@ -7936,7 +9548,19 @@ create_breakpoint (struct gdbarch *gdbarch,
       init_raw_breakpoint_without_location (b, gdbarch, type_wanted, ops);
 
       b->addr_string = copy_arg;
-      b->cond_string = NULL;
+      if (parse_condition_and_thread)
+	b->cond_string = NULL;
+      else
+	{
+	  /* Create a private copy of condition string.  */
+	  if (cond_string)
+	    {
+	      cond_string = xstrdup (cond_string);
+	      make_cleanup (xfree, cond_string);
+	    }
+	  b->cond_string = cond_string;
+	}
+      b->extra_string = NULL;
       b->ignore_count = ignore_count;
       b->disposition = tempflag ? disp_del : disp_donttouch;
       b->condition_not_parsed = 1;
@@ -7981,14 +9605,22 @@ break_command_1 (char *arg, int flag, int from_tty)
   enum bptype type_wanted = (flag & BP_HARDWAREFLAG
 			     ? bp_hardware_breakpoint
 			     : bp_breakpoint);
+  struct breakpoint_ops *ops;
+  const char *arg_cp = arg;
+
+  /* Matching breakpoints on probes.  */
+  if (arg && probe_linespec_to_ops (&arg_cp) != NULL)
+    ops = &bkpt_probe_breakpoint_ops;
+  else
+    ops = &bkpt_breakpoint_ops;
 
   create_breakpoint (get_current_arch (),
 		     arg,
-		     NULL, 0, 1 /* parse arg */,
+		     NULL, 0, NULL, 1 /* parse arg */,
 		     tempflag, type_wanted,
 		     0 /* Ignore count */,
 		     pending_break_support,
-		     &bkpt_breakpoint_ops,
+		     ops,
 		     from_tty,
 		     1 /* enabled */,
 		     0 /* internal */,
@@ -8149,14 +9781,48 @@ stopat_command (char *arg, int from_tty)
     break_command_1 (arg, 0, from_tty);
 }
 
+void dprintf_command (char *arg, int from_tty);
+
+/* The dynamic printf command is mostly like a regular breakpoint, but
+   with a prewired command list consisting of a single output command,
+   built from extra arguments supplied on the dprintf command
+   line.  */
+
+void
+dprintf_command (char *arg, int from_tty)
+{
+  create_breakpoint (get_current_arch (),
+		     arg,
+		     NULL, 0, NULL, 1 /* parse arg */,
+		     0, bp_dprintf,
+		     0 /* Ignore count */,
+		     pending_break_support,
+		     &dprintf_breakpoint_ops,
+		     from_tty,
+		     1 /* enabled */,
+		     0 /* internal */,
+		     0);
+}
+
+static void
+agent_printf_command (char *arg, int from_tty)
+{
+  error (_("May only run agent-printf on the target"));
+}
+
 /* Implement the "breakpoint_hit" breakpoint_ops method for
    ranged breakpoints.  */
 
 static int
 breakpoint_hit_ranged_breakpoint (const struct bp_location *bl,
 				  struct address_space *aspace,
-				  CORE_ADDR bp_addr)
+				  CORE_ADDR bp_addr,
+				  const struct target_waitstatus *ws)
 {
+  if (ws->kind != TARGET_WAITKIND_STOPPED
+      || ws->value.sig != GDB_SIGNAL_TRAP)
+    return 0;
+
   return breakpoint_address_match_range (bl->pspace->aspace, bl->address,
 					 bl->length, aspace, bp_addr);
 }
@@ -8236,8 +9902,8 @@ print_one_detail_ranged_breakpoint (const struct breakpoint *b,
 {
   CORE_ADDR address_start, address_end;
   struct bp_location *bl = b->loc;
-  struct ui_stream *stb = ui_out_stream_new (uiout);
-  struct cleanup *cleanup = make_cleanup_ui_out_stream_delete (stb);
+  struct ui_file *stb = mem_fileopen ();
+  struct cleanup *cleanup = make_cleanup_ui_file_delete (stb);
 
   gdb_assert (bl);
 
@@ -8245,7 +9911,7 @@ print_one_detail_ranged_breakpoint (const struct breakpoint *b,
   address_end = address_start + bl->length - 1;
 
   ui_out_text (uiout, "\taddress range: ");
-  fprintf_unfiltered (stb->stream, "[%s, %s]",
+  fprintf_unfiltered (stb, "[%s, %s]",
 		      print_core_address (bl->gdbarch, address_start),
 		      print_core_address (bl->gdbarch, address_end));
   ui_out_field_stream (uiout, "addr", stb);
@@ -8441,6 +10107,7 @@ break_range_command (char *arg, int from_tty)
     means EXP is variable.  Also the constant detection may fail for
     some constant expressions and in such case still falsely return
     zero.  */
+
 static int
 watchpoint_exp_is_const (const struct expression *exp)
 {
@@ -8505,6 +10172,7 @@ watchpoint_exp_is_const (const struct expression *exp)
 	case UNOP_COMPLEMENT:
 	case UNOP_ADDR:
 	case UNOP_HIGH:
+	case UNOP_CAST:
 	  /* Unary, binary and ternary operators: We have to check
 	     their operands.  If they are constant, then so is the
 	     result of that operation.  For instance, if A and B are
@@ -8623,7 +10291,8 @@ remove_watchpoint (struct bp_location *bl)
 
 static int
 breakpoint_hit_watchpoint (const struct bp_location *bl,
-			   struct address_space *aspace, CORE_ADDR bp_addr)
+			   struct address_space *aspace, CORE_ADDR bp_addr,
+			   const struct target_waitstatus *ws)
 {
   struct breakpoint *b = bl->owner;
   struct watchpoint *w = (struct watchpoint *) b;
@@ -8677,7 +10346,7 @@ print_it_watchpoint (bpstat bs)
   struct cleanup *old_chain;
   struct breakpoint *b;
   const struct bp_location *bl;
-  struct ui_stream *stb;
+  struct ui_file *stb;
   enum print_stop_action result;
   struct watchpoint *w;
   struct ui_out *uiout = current_uiout;
@@ -8688,8 +10357,8 @@ print_it_watchpoint (bpstat bs)
   b = bs->breakpoint_at;
   w = (struct watchpoint *) b;
 
-  stb = ui_out_stream_new (uiout);
-  old_chain = make_cleanup_ui_out_stream_delete (stb);
+  stb = mem_fileopen ();
+  old_chain = make_cleanup_ui_file_delete (stb);
 
   switch (b->type)
     {
@@ -8703,10 +10372,10 @@ print_it_watchpoint (bpstat bs)
       mention (b);
       make_cleanup_ui_out_tuple_begin_end (uiout, "value");
       ui_out_text (uiout, "\nOld value = ");
-      watchpoint_value_print (bs->old_val, stb->stream);
+      watchpoint_value_print (bs->old_val, stb);
       ui_out_field_stream (uiout, "old", stb);
       ui_out_text (uiout, "\nNew value = ");
-      watchpoint_value_print (w->val, stb->stream);
+      watchpoint_value_print (w->val, stb);
       ui_out_field_stream (uiout, "new", stb);
       ui_out_text (uiout, "\n");
       /* More than one watchpoint may have been triggered.  */
@@ -8721,7 +10390,7 @@ print_it_watchpoint (bpstat bs)
       mention (b);
       make_cleanup_ui_out_tuple_begin_end (uiout, "value");
       ui_out_text (uiout, "\nValue = ");
-      watchpoint_value_print (w->val, stb->stream);
+      watchpoint_value_print (w->val, stb);
       ui_out_field_stream (uiout, "value", stb);
       ui_out_text (uiout, "\n");
       result = PRINT_UNKNOWN;
@@ -8738,7 +10407,7 @@ print_it_watchpoint (bpstat bs)
 	  mention (b);
 	  make_cleanup_ui_out_tuple_begin_end (uiout, "value");
 	  ui_out_text (uiout, "\nOld value = ");
-	  watchpoint_value_print (bs->old_val, stb->stream);
+	  watchpoint_value_print (bs->old_val, stb);
 	  ui_out_field_stream (uiout, "old", stb);
 	  ui_out_text (uiout, "\nNew value = ");
 	}
@@ -8752,7 +10421,7 @@ print_it_watchpoint (bpstat bs)
 	  make_cleanup_ui_out_tuple_begin_end (uiout, "value");
 	  ui_out_text (uiout, "\nValue = ");
 	}
-      watchpoint_value_print (w->val, stb->stream);
+      watchpoint_value_print (w->val, stb);
       ui_out_field_stream (uiout, "new", stb);
       ui_out_text (uiout, "\n");
       result = PRINT_UNKNOWN;
@@ -9137,7 +10806,7 @@ watch_command_1 (char *arg, int accessflag, int from_tty,
   /* Parse the rest of the arguments.  */
   innermost_block = NULL;
   exp_start = arg;
-  exp = parse_exp_1 (&arg, 0, 0);
+  exp = parse_exp_1 (&arg, 0, 0, 0);
   exp_end = arg;
   /* Remove trailing whitespace from the expression before saving it.
      This makes the eventual display of the expression string a bit
@@ -9192,7 +10861,7 @@ watch_command_1 (char *arg, int accessflag, int from_tty,
 
       innermost_block = NULL;
       tok = cond_start = end_tok + 1;
-      cond = parse_exp_1 (&tok, 0, 0);
+      cond = parse_exp_1 (&tok, 0, 0, 0);
 
       /* The watchpoint expression may not be local, but the condition
 	 may still be.  E.g.: `watch global if local > 0'.  */
@@ -9427,23 +11096,6 @@ watch_command_wrapper (char *arg, int from_tty, int internal)
   watch_command_1 (arg, hw_write, from_tty, 0, internal);
 }
 
-/* A helper function that looks for an argument at the start of a
-   string.  The argument must also either be at the end of the string,
-   or be followed by whitespace.  Returns 1 if it finds the argument,
-   0 otherwise.  If the argument is found, it updates *STR.  */
-
-static int
-check_for_argument (char **str, char *arg, int arg_len)
-{
-  if (strncmp (*str, arg, arg_len) == 0
-      && ((*str)[arg_len] == '\0' || isspace ((*str)[arg_len])))
-    {
-      *str += arg_len;
-      return 1;
-    }
-  return 0;
-}
-
 /* A helper function that looks for the "-location" argument and then
    calls watch_command_1.  */
 
@@ -9524,7 +11176,10 @@ until_break_command (char *arg, int from_tty, int anywhere)
 {
   struct symtabs_and_lines sals;
   struct symtab_and_line sal;
-  struct frame_info *frame = get_selected_frame (NULL);
+  struct frame_info *frame;
+  struct gdbarch *frame_gdbarch;
+  struct frame_id stack_frame_id;
+  struct frame_id caller_frame_id;
   struct breakpoint *breakpoint;
   struct breakpoint *breakpoint2 = NULL;
   struct cleanup *old_chain;
@@ -9555,41 +11210,56 @@ until_break_command (char *arg, int from_tty, int anywhere)
 
   resolve_sal_pc (&sal);
 
-  if (anywhere)
-    /* If the user told us to continue until a specified location,
-       we don't specify a frame at which we need to stop.  */
-    breakpoint = set_momentary_breakpoint (get_frame_arch (frame), sal,
-					   null_frame_id, bp_until);
-  else
-    /* Otherwise, specify the selected frame, because we want to stop
-       only at the very same frame.  */
-    breakpoint = set_momentary_breakpoint (get_frame_arch (frame), sal,
-					   get_stack_frame_id (frame),
-					   bp_until);
-
-  old_chain = make_cleanup_delete_breakpoint (breakpoint);
-
   tp = inferior_thread ();
   thread = tp->num;
 
+  old_chain = make_cleanup (null_cleanup, NULL);
+
+  /* Note linespec handling above invalidates the frame chain.
+     Installing a breakpoint also invalidates the frame chain (as it
+     may need to switch threads), so do any frame handling before
+     that.  */
+
+  frame = get_selected_frame (NULL);
+  frame_gdbarch = get_frame_arch (frame);
+  stack_frame_id = get_stack_frame_id (frame);
+  caller_frame_id = frame_unwind_caller_id (frame);
+
   /* Keep within the current frame, or in frames called by the current
      one.  */
 
-  if (frame_id_p (frame_unwind_caller_id (frame)))
+  if (frame_id_p (caller_frame_id))
     {
-      sal = find_pc_line (frame_unwind_caller_pc (frame), 0);
-      sal.pc = frame_unwind_caller_pc (frame);
+      struct symtab_and_line sal2;
+
+      sal2 = find_pc_line (frame_unwind_caller_pc (frame), 0);
+      sal2.pc = frame_unwind_caller_pc (frame);
       breakpoint2 = set_momentary_breakpoint (frame_unwind_caller_arch (frame),
-					      sal,
-					      frame_unwind_caller_id (frame),
+					      sal2,
+					      caller_frame_id,
 					      bp_until);
       make_cleanup_delete_breakpoint (breakpoint2);
 
-      set_longjmp_breakpoint (tp, frame_unwind_caller_id (frame));
+      set_longjmp_breakpoint (tp, caller_frame_id);
       make_cleanup (delete_longjmp_breakpoint_cleanup, &thread);
     }
 
-  proceed (-1, TARGET_SIGNAL_DEFAULT, 0);
+  /* set_momentary_breakpoint could invalidate FRAME.  */
+  frame = NULL;
+
+  if (anywhere)
+    /* If the user told us to continue until a specified location,
+       we don't specify a frame at which we need to stop.  */
+    breakpoint = set_momentary_breakpoint (frame_gdbarch, sal,
+					   null_frame_id, bp_until);
+  else
+    /* Otherwise, specify the selected frame, because we want to stop
+       only at the very same frame.  */
+    breakpoint = set_momentary_breakpoint (frame_gdbarch, sal,
+					   stack_frame_id, bp_until);
+  make_cleanup_delete_breakpoint (breakpoint);
+
+  proceed (-1, GDB_SIGNAL_DEFAULT, 0);
 
   /* If we are running asynchronously, and proceed call above has
      actually managed to start the target, arrange for breakpoints to
@@ -9841,7 +11511,7 @@ handle_gnu_v3_exceptions (int tempflag, char *cond_string,
     trigger_func_name = "__cxa_throw";
 
   create_breakpoint (get_current_arch (),
-		     trigger_func_name, cond_string, -1,
+		     trigger_func_name, cond_string, -1, NULL,
 		     0 /* condition and thread are valid.  */,
 		     tempflag, bp_breakpoint,
 		     0,
@@ -10077,8 +11747,9 @@ clear_command (char *arg, int from_tty)
 
   if (arg)
     {
-      sals = decode_line_spec (arg, (DECODE_LINE_FUNFIRSTLINE
-				     | DECODE_LINE_LIST_MODE));
+      sals = decode_line_with_current_source (arg,
+					      (DECODE_LINE_FUNFIRSTLINE
+					       | DECODE_LINE_LIST_MODE));
       default_match = 0;
     }
   else
@@ -10127,6 +11798,8 @@ clear_command (char *arg, int from_tty)
   make_cleanup (VEC_cleanup (breakpoint_p), &found);
   for (i = 0; i < sals.nelts; i++)
     {
+      int is_abs, sal_name_len;
+
       /* If exact pc given, clear bpts at that pc.
          If line given (pc == 0), clear all bpts on specified line.
          If defaulting, clear all bpts on default line
@@ -10140,6 +11813,8 @@ clear_command (char *arg, int from_tty)
          1              0             <can't happen> */
 
       sal = sals.sals[i];
+      is_abs = sal.symtab == NULL ? 1 : IS_ABSOLUTE_PATH (sal.symtab->filename);
+      sal_name_len = is_abs ? 0 : strlen (sal.symtab->filename);
 
       /* Find all matching breakpoints and add them to 'found'.  */
       ALL_BREAKPOINTS (b)
@@ -10159,13 +11834,24 @@ clear_command (char *arg, int from_tty)
 				  && (loc->address == sal.pc)
 				  && (!section_is_overlay (loc->section)
 				      || loc->section == sal.section));
-		  int line_match = ((default_match || sal.explicit_line)
-				    && loc->source_file != NULL
-				    && sal.symtab != NULL
-				    && sal.pspace == loc->pspace
-				    && filename_cmp (loc->source_file,
-						     sal.symtab->filename) == 0
-				    && loc->line_number == sal.line);
+		  int line_match = 0;
+
+		  if ((default_match || sal.explicit_line)
+		      && loc->source_file != NULL
+		      && sal.symtab != NULL
+		      && sal.pspace == loc->pspace
+		      && loc->line_number == sal.line)
+		    {
+		      if (filename_cmp (loc->source_file,
+					sal.symtab->filename) == 0)
+			line_match = 1;
+		      else if (!IS_ABSOLUTE_PATH (sal.symtab->filename)
+			       && compare_filenames_for_search (loc->source_file,
+								sal.symtab->filename,
+								sal_name_len))
+			line_match = 1;
+		    }
+
 		  if (pc_match || line_match)
 		    {
 		      match = 1;
@@ -10267,16 +11953,25 @@ bp_location_compare (const void *ap, const void *bp)
   if (a->address != b->address)
     return (a->address > b->address) - (a->address < b->address);
 
+  /* Sort locations at the same address by their pspace number, keeping
+     locations of the same inferior (in a multi-inferior environment)
+     grouped.  */
+
+  if (a->pspace->num != b->pspace->num)
+    return ((a->pspace->num > b->pspace->num)
+	    - (a->pspace->num < b->pspace->num));
+
   /* Sort permanent breakpoints first.  */
   if (a_perm != b_perm)
     return (a_perm < b_perm) - (a_perm > b_perm);
 
-  /* Make the user-visible order stable across GDB runs.  Locations of
-     the same breakpoint can be sorted in arbitrary order.  */
+  /* Make the internal GDB representation stable across GDB runs
+     where A and B memory inside GDB can differ.  Breakpoint locations of
+     the same type at the same address can be sorted in arbitrary order.  */
 
   if (a->owner->number != b->owner->number)
-    return (a->owner->number > b->owner->number)
-           - (a->owner->number < b->owner->number);
+    return ((a->owner->number > b->owner->number)
+	    - (a->owner->number < b->owner->number));
 
   return (a > b) - (a < b);
 }
@@ -10367,6 +12062,7 @@ swap_insertion (struct bp_location *left, struct bp_location *right)
 {
   const int left_inserted = left->inserted;
   const int left_duplicate = left->duplicate;
+  const int left_needs_update = left->needs_update;
   const struct bp_target_info left_target_info = left->target_info;
 
   /* Locations of tracepoints can never be duplicated.  */
@@ -10377,12 +12073,67 @@ swap_insertion (struct bp_location *left, struct bp_location *right)
 
   left->inserted = right->inserted;
   left->duplicate = right->duplicate;
+  left->needs_update = right->needs_update;
   left->target_info = right->target_info;
   right->inserted = left_inserted;
   right->duplicate = left_duplicate;
+  right->needs_update = left_needs_update;
   right->target_info = left_target_info;
 }
 
+/* Force the re-insertion of the locations at ADDRESS.  This is called
+   once a new/deleted/modified duplicate location is found and we are evaluating
+   conditions on the target's side.  Such conditions need to be updated on
+   the target.  */
+
+static void
+force_breakpoint_reinsertion (struct bp_location *bl)
+{
+  struct bp_location **locp = NULL, **loc2p;
+  struct bp_location *loc;
+  CORE_ADDR address = 0;
+  int pspace_num;
+
+  address = bl->address;
+  pspace_num = bl->pspace->num;
+
+  /* This is only meaningful if the target is
+     evaluating conditions and if the user has
+     opted for condition evaluation on the target's
+     side.  */
+  if (gdb_evaluates_breakpoint_condition_p ()
+      || !target_supports_evaluation_of_breakpoint_conditions ())
+    return;
+
+  /* Flag all breakpoint locations with this address and
+     the same program space as the location
+     as "its condition has changed".  We need to
+     update the conditions on the target's side.  */
+  ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, address)
+    {
+      loc = *loc2p;
+
+      if (!is_breakpoint (loc->owner)
+	  || pspace_num != loc->pspace->num)
+	continue;
+
+      /* Flag the location appropriately.  We use a different state to
+	 let everyone know that we already updated the set of locations
+	 with addr bl->address and program space bl->pspace.  This is so
+	 we don't have to keep calling these functions just to mark locations
+	 that have already been marked.  */
+      loc->condition_changed = condition_updated;
+
+      /* Free the agent expression bytecode as well.  We will compute
+	 it later on.  */
+      if (loc->cond_bytecode)
+	{
+	  free_agent_expr (loc->cond_bytecode);
+	  loc->cond_bytecode = NULL;
+	}
+    }
+}
+
 /* If SHOULD_INSERT is false, do not insert any breakpoint locations
    into the inferior, only remove already-inserted locations that no
    longer should be inserted.  Functions that delete a breakpoint or
@@ -10404,6 +12155,10 @@ update_global_location_list (int should_insert)
   struct breakpoint *b;
   struct bp_location **locp, *loc;
   struct cleanup *cleanups;
+  /* Last breakpoint location address that was marked for update.  */
+  CORE_ADDR last_addr = 0;
+  /* Last breakpoint location program space that was marked for update.  */
+  int last_pspace_num = -1;
 
   /* Used in the duplicates detection below.  When iterating over all
      bp_locations, points to the first bp_location of a given address.
@@ -10476,13 +12231,30 @@ update_global_location_list (int should_insert)
 	    && (*loc2p)->address == old_loc->address);
 	   loc2p++)
 	{
-	  if (*loc2p == old_loc)
+	  /* Check if this is a new/duplicated location or a duplicated
+	     location that had its condition modified.  If so, we want to send
+	     its condition to the target if evaluation of conditions is taking
+	     place there.  */
+	  if ((*loc2p)->condition_changed == condition_modified
+	      && (last_addr != old_loc->address
+		  || last_pspace_num != old_loc->pspace->num))
 	    {
-	      found_object = 1;
-	      break;
+	      force_breakpoint_reinsertion (*loc2p);
+	      last_pspace_num = old_loc->pspace->num;
 	    }
+
+	  if (*loc2p == old_loc)
+	    found_object = 1;
 	}
 
+      /* We have already handled this address, update it so that we don't
+	 have to go through updates again.  */
+      last_addr = old_loc->address;
+
+      /* Target-side condition evaluation: Handle deleted locations.  */
+      if (!found_object)
+	force_breakpoint_reinsertion (old_loc);
+
       /* If this location is no longer present, and inserted, look if
 	 there's maybe a new location at the same address.  If so,
 	 mark that one inserted, and don't remove this one.  This is
@@ -10502,6 +12274,10 @@ update_global_location_list (int should_insert)
 	    }
 	  else
 	    {
+	      /* This location still exists, but it won't be kept in the
+		 target since it may have been disabled.  We proceed to
+		 remove its target-side condition.  */
+
 	      /* The location is either no longer present, or got
 		 disabled.  See if there's another location at the
 		 same address, in which case we don't need to remove
@@ -10654,7 +12430,11 @@ update_global_location_list (int should_insert)
 	   never duplicated.  See the comments in field `duplicate' of
 	   `struct bp_location'.  */
 	  || is_tracepoint (b))
-	continue;
+	{
+	  /* Clear the condition modification flag.  */
+	  loc->condition_changed = condition_unchanged;
+	  continue;
+	}
 
       /* Permanent breakpoint should always be inserted.  */
       if (b->enable_state == bp_permanent && ! loc->inserted)
@@ -10677,6 +12457,13 @@ update_global_location_list (int should_insert)
 	{
 	  *loc_first_p = loc;
 	  loc->duplicate = 0;
+
+	  if (is_breakpoint (loc->owner) && loc->condition_changed)
+	    {
+	      loc->needs_update = 1;
+	      /* Clear the condition modification flag.  */
+	      loc->condition_changed = condition_unchanged;
+	    }
 	  continue;
 	}
 
@@ -10688,6 +12475,9 @@ update_global_location_list (int should_insert)
 	swap_insertion (loc, *loc_first_p);
       loc->duplicate = 1;
 
+      /* Clear the condition modification flag.  */
+      loc->condition_changed = condition_unchanged;
+
       if ((*loc_first_p)->owner->enable_state == bp_permanent && loc->inserted
 	  && b->enable_state != bp_permanent)
 	internal_error (__FILE__, __LINE__,
@@ -10695,11 +12485,22 @@ update_global_location_list (int should_insert)
 			"a permanent breakpoint"));
     }
 
-  if (breakpoints_always_inserted_mode () && should_insert
-      && (have_live_inferiors ()
-	  || (gdbarch_has_global_breakpoints (target_gdbarch))))
-    insert_breakpoint_locations ();
-
+  if (breakpoints_always_inserted_mode ()
+      && (have_live_inferiors ()
+	  || (gdbarch_has_global_breakpoints (target_gdbarch))))
+    {
+      if (should_insert)
+	insert_breakpoint_locations ();
+      else
+	{
+	  /* Though should_insert is false, we may need to update conditions
+	     on the target's side if it is evaluating such conditions.  We
+	     only update conditions for locations that are marked
+	     "needs_update".  */
+	  update_inserted_breakpoint_locations ();
+	}
+    }
+
   if (should_insert)
     download_tracepoint_locations ();
 
@@ -10724,7 +12525,7 @@ breakpoint_retire_moribund (void)
 static void
 update_global_location_list_nothrow (int inserting)
 {
-  struct gdb_exception e;
+  volatile struct gdb_exception e;
 
   TRY_CATCH (e, RETURN_MASK_ERROR)
     update_global_location_list (inserting);
@@ -10812,6 +12613,8 @@ static void
 bp_location_dtor (struct bp_location *self)
 {
   xfree (self->cond);
+  if (self->cond_bytecode)
+    free_agent_expr (self->cond_bytecode);
   xfree (self->function_name);
   xfree (self->source_file);
 }
@@ -10868,7 +12671,8 @@ base_breakpoint_remove_location (struct bp_location *bl)
 static int
 base_breakpoint_breakpoint_hit (const struct bp_location *bl,
 				struct address_space *aspace,
-				CORE_ADDR bp_addr)
+				CORE_ADDR bp_addr,
+				const struct target_waitstatus *ws)
 {
   internal_error_pure_virtual_called ();
 }
@@ -10922,6 +12726,40 @@ base_breakpoint_print_recreate (struct breakpoint *b, struct ui_file *fp)
   internal_error_pure_virtual_called ();
 }
 
+static void
+base_breakpoint_create_sals_from_address (char **arg,
+					  struct linespec_result *canonical,
+					  enum bptype type_wanted,
+					  char *addr_start,
+					  char **copy_arg)
+{
+  internal_error_pure_virtual_called ();
+}
+
+static void
+base_breakpoint_create_breakpoints_sal (struct gdbarch *gdbarch,
+					struct linespec_result *c,
+					struct linespec_sals *lsal,
+					char *cond_string,
+					char *extra_string,
+					enum bptype type_wanted,
+					enum bpdisp disposition,
+					int thread,
+					int task, int ignore_count,
+					const struct breakpoint_ops *o,
+					int from_tty, int enabled,
+					int internal, unsigned flags)
+{
+  internal_error_pure_virtual_called ();
+}
+
+static void
+base_breakpoint_decode_linespec (struct breakpoint *b, char **s,
+				 struct symtabs_and_lines *sals)
+{
+  internal_error_pure_virtual_called ();
+}
+
 static struct breakpoint_ops base_breakpoint_ops =
 {
   base_breakpoint_dtor,
@@ -10937,7 +12775,10 @@ static struct breakpoint_ops base_breakpoint_ops =
   NULL,
   base_breakpoint_print_one_detail,
   base_breakpoint_print_mention,
-  base_breakpoint_print_recreate
+  base_breakpoint_print_recreate,
+  base_breakpoint_create_sals_from_address,
+  base_breakpoint_create_breakpoints_sal,
+  base_breakpoint_decode_linespec,
 };
 
 /* Default breakpoint_ops methods.  */
@@ -10978,10 +12819,15 @@ bkpt_remove_location (struct bp_location *bl)
 
 static int
 bkpt_breakpoint_hit (const struct bp_location *bl,
-		     struct address_space *aspace, CORE_ADDR bp_addr)
+		     struct address_space *aspace, CORE_ADDR bp_addr,
+		     const struct target_waitstatus *ws)
 {
   struct breakpoint *b = bl->owner;
 
+  if (ws->kind != TARGET_WAITKIND_STOPPED
+      || ws->value.sig != GDB_SIGNAL_TRAP)
+    return 0;
+
   if (!breakpoint_address_match (bl->pspace->aspace, bl->address,
 				 aspace, bp_addr))
     return 0;
@@ -11058,6 +12904,9 @@ bkpt_print_mention (struct breakpoint *b)
     case bp_hardware_breakpoint:
       printf_filtered (_("Hardware assisted breakpoint %d"), b->number);
       break;
+    case bp_dprintf:
+      printf_filtered (_("Dprintf %d"), b->number);
+      break;
     }
 
   say_where (b);
@@ -11083,6 +12932,45 @@ bkpt_print_recreate (struct breakpoint *tp, struct ui_file *fp)
   print_recreate_thread (tp, fp);
 }
 
+static void
+bkpt_create_sals_from_address (char **arg,
+			       struct linespec_result *canonical,
+			       enum bptype type_wanted,
+			       char *addr_start, char **copy_arg)
+{
+  create_sals_from_address_default (arg, canonical, type_wanted,
+				    addr_start, copy_arg);
+}
+
+static void
+bkpt_create_breakpoints_sal (struct gdbarch *gdbarch,
+			     struct linespec_result *canonical,
+			     struct linespec_sals *lsal,
+			     char *cond_string,
+			     char *extra_string,
+			     enum bptype type_wanted,
+			     enum bpdisp disposition,
+			     int thread,
+			     int task, int ignore_count,
+			     const struct breakpoint_ops *ops,
+			     int from_tty, int enabled,
+			     int internal, unsigned flags)
+{
+  create_breakpoints_sal_default (gdbarch, canonical, lsal,
+				  cond_string, extra_string,
+				  type_wanted,
+				  disposition, thread, task,
+				  ignore_count, ops, from_tty,
+				  enabled, internal, flags);
+}
+
+static void
+bkpt_decode_linespec (struct breakpoint *b, char **s,
+		      struct symtabs_and_lines *sals)
+{
+  decode_linespec_default (b, s, sals);
+}
+
 /* Virtual table for internal breakpoints.  */
 
 static void
@@ -11113,8 +13001,17 @@ internal_bkpt_re_set (struct breakpoint *b)
 static void
 internal_bkpt_check_status (bpstat bs)
 {
-  /* We do not stop for these.  */
-  bs->stop = 0;
+  if (bs->breakpoint_at->type == bp_shlib_event)
+    {
+      /* If requested, stop when the dynamic linker notifies GDB of
+	 events.  This allows the user to get control and place
+	 breakpoints in initializer routines for dynamically loaded
+	 objects (among other things).  */
+      bs->stop = stop_on_solib_events;
+      bs->print = stop_on_solib_events;
+    }
+  else
+    bs->stop = 0;
 }
 
 static enum print_stop_action
@@ -11131,10 +13028,7 @@ internal_bkpt_print_it (bpstat bs)
       /* Did we stop because the user set the stop_on_solib_events
 	 variable?  (If so, we report this as a generic, "Stopped due
 	 to shlib event" message.) */
-      ui_out_text (uiout, _("Stopped due to shared library event\n"));
-      if (ui_out_is_mi_like_p (uiout))
-	ui_out_field_string (uiout, "reason",
-			     async_reason_lookup (EXEC_ASYNC_SOLIB_EVENT));
+      print_solib_event (0);
       break;
 
     case bp_thread_event:
@@ -11226,6 +13120,73 @@ momentary_bkpt_print_mention (struct breakpoint *b)
   /* Nothing to mention.  These breakpoints are internal.  */
 }
 
+/* Ensure INITIATING_FRAME is cleared when no such breakpoint exists.
+
+   It gets cleared already on the removal of the first one of such placed
+   breakpoints.  This is OK as they get all removed altogether.  */
+
+static void
+longjmp_bkpt_dtor (struct breakpoint *self)
+{
+  struct thread_info *tp = find_thread_id (self->thread);
+
+  if (tp)
+    tp->initiating_frame = null_frame_id;
+
+  momentary_breakpoint_ops.dtor (self);
+}
+
+/* Specific methods for probe breakpoints.  */
+
+static int
+bkpt_probe_insert_location (struct bp_location *bl)
+{
+  int v = bkpt_insert_location (bl);
+
+  if (v == 0)
+    {
+      /* The insertion was successful, now let's set the probe's semaphore
+	 if needed.  */
+      bl->probe->pops->set_semaphore (bl->probe, bl->gdbarch);
+    }
+
+  return v;
+}
+
+static int
+bkpt_probe_remove_location (struct bp_location *bl)
+{
+  /* Let's clear the semaphore before removing the location.  */
+  bl->probe->pops->clear_semaphore (bl->probe, bl->gdbarch);
+
+  return bkpt_remove_location (bl);
+}
+
+static void
+bkpt_probe_create_sals_from_address (char **arg,
+				     struct linespec_result *canonical,
+				     enum bptype type_wanted,
+				     char *addr_start, char **copy_arg)
+{
+  struct linespec_sals lsal;
+
+  lsal.sals = parse_probes (arg, canonical);
+
+  *copy_arg = xstrdup (canonical->addr_string);
+  lsal.canonical = xstrdup (*copy_arg);
+
+  VEC_safe_push (linespec_sals, canonical->sals, &lsal);
+}
+
+static void
+bkpt_probe_decode_linespec (struct breakpoint *b, char **s,
+			    struct symtabs_and_lines *sals)
+{
+  *sals = parse_probes (s, NULL);
+  if (!sals->sals)
+    error (_("probe not found"));
+}
+
 /* The breakpoint_ops structure to be used in tracepoints.  */
 
 static void
@@ -11236,7 +13197,8 @@ tracepoint_re_set (struct breakpoint *b)
 
 static int
 tracepoint_breakpoint_hit (const struct bp_location *bl,
-			   struct address_space *aspace, CORE_ADDR bp_addr)
+			   struct address_space *aspace, CORE_ADDR bp_addr,
+			   const struct target_waitstatus *ws)
 {
   /* By definition, the inferior does not report stops at
      tracepoints.  */
@@ -11309,8 +13271,173 @@ tracepoint_print_recreate (struct breakpoint *self, struct ui_file *fp)
     fprintf_unfiltered (fp, "  passcount %d\n", tp->pass_count);
 }
 
+static void
+tracepoint_create_sals_from_address (char **arg,
+				     struct linespec_result *canonical,
+				     enum bptype type_wanted,
+				     char *addr_start, char **copy_arg)
+{
+  create_sals_from_address_default (arg, canonical, type_wanted,
+				    addr_start, copy_arg);
+}
+
+static void
+tracepoint_create_breakpoints_sal (struct gdbarch *gdbarch,
+				   struct linespec_result *canonical,
+				   struct linespec_sals *lsal,
+				   char *cond_string,
+				   char *extra_string,
+				   enum bptype type_wanted,
+				   enum bpdisp disposition,
+				   int thread,
+				   int task, int ignore_count,
+				   const struct breakpoint_ops *ops,
+				   int from_tty, int enabled,
+				   int internal, unsigned flags)
+{
+  create_breakpoints_sal_default (gdbarch, canonical, lsal,
+				  cond_string, extra_string,
+				  type_wanted,
+				  disposition, thread, task,
+				  ignore_count, ops, from_tty,
+				  enabled, internal, flags);
+}
+
+static void
+tracepoint_decode_linespec (struct breakpoint *b, char **s,
+			    struct symtabs_and_lines *sals)
+{
+  decode_linespec_default (b, s, sals);
+}
+
 struct breakpoint_ops tracepoint_breakpoint_ops;
 
+/* The breakpoint_ops structure to be use on tracepoints placed in a
+   static probe.  */
+
+static void
+tracepoint_probe_create_sals_from_address (char **arg,
+					   struct linespec_result *canonical,
+					   enum bptype type_wanted,
+					   char *addr_start, char **copy_arg)
+{
+  /* We use the same method for breakpoint on probes.  */
+  bkpt_probe_create_sals_from_address (arg, canonical, type_wanted,
+				       addr_start, copy_arg);
+}
+
+static void
+tracepoint_probe_decode_linespec (struct breakpoint *b, char **s,
+				  struct symtabs_and_lines *sals)
+{
+  /* We use the same method for breakpoint on probes.  */
+  bkpt_probe_decode_linespec (b, s, sals);
+}
+
+static struct breakpoint_ops tracepoint_probe_breakpoint_ops;
+
+/* The breakpoint_ops structure to be used on static tracepoints with
+   markers (`-m').  */
+
+static void
+strace_marker_create_sals_from_address (char **arg,
+					struct linespec_result *canonical,
+					enum bptype type_wanted,
+					char *addr_start, char **copy_arg)
+{
+  struct linespec_sals lsal;
+
+  lsal.sals = decode_static_tracepoint_spec (arg);
+
+  *copy_arg = savestring (addr_start, *arg - addr_start);
+
+  canonical->addr_string = xstrdup (*copy_arg);
+  lsal.canonical = xstrdup (*copy_arg);
+  VEC_safe_push (linespec_sals, canonical->sals, &lsal);
+}
+
+static void
+strace_marker_create_breakpoints_sal (struct gdbarch *gdbarch,
+				      struct linespec_result *canonical,
+				      struct linespec_sals *lsal,
+				      char *cond_string,
+				      char *extra_string,
+				      enum bptype type_wanted,
+				      enum bpdisp disposition,
+				      int thread,
+				      int task, int ignore_count,
+				      const struct breakpoint_ops *ops,
+				      int from_tty, int enabled,
+				      int internal, unsigned flags)
+{
+  int i;
+
+  /* If the user is creating a static tracepoint by marker id
+     (strace -m MARKER_ID), then store the sals index, so that
+     breakpoint_re_set can try to match up which of the newly
+     found markers corresponds to this one, and, don't try to
+     expand multiple locations for each sal, given than SALS
+     already should contain all sals for MARKER_ID.  */
+
+  for (i = 0; i < lsal->sals.nelts; ++i)
+    {
+      struct symtabs_and_lines expanded;
+      struct tracepoint *tp;
+      struct cleanup *old_chain;
+      char *addr_string;
+
+      expanded.nelts = 1;
+      expanded.sals = &lsal->sals.sals[i];
+
+      addr_string = xstrdup (canonical->addr_string);
+      old_chain = make_cleanup (xfree, addr_string);
+
+      tp = XCNEW (struct tracepoint);
+      init_breakpoint_sal (&tp->base, gdbarch, expanded,
+			   addr_string, NULL,
+			   cond_string, extra_string,
+			   type_wanted, disposition,
+			   thread, task, ignore_count, ops,
+			   from_tty, enabled, internal, flags,
+			   canonical->special_display);
+      /* Given that its possible to have multiple markers with
+	 the same string id, if the user is creating a static
+	 tracepoint by marker id ("strace -m MARKER_ID"), then
+	 store the sals index, so that breakpoint_re_set can
+	 try to match up which of the newly found markers
+	 corresponds to this one  */
+      tp->static_trace_marker_id_idx = i;
+
+      install_breakpoint (internal, &tp->base, 0);
+
+      discard_cleanups (old_chain);
+    }
+}
+
+static void
+strace_marker_decode_linespec (struct breakpoint *b, char **s,
+			       struct symtabs_and_lines *sals)
+{
+  struct tracepoint *tp = (struct tracepoint *) b;
+
+  *sals = decode_static_tracepoint_spec (s);
+  if (sals->nelts > tp->static_trace_marker_id_idx)
+    {
+      sals->sals[0] = sals->sals[tp->static_trace_marker_id_idx];
+      sals->nelts = 1;
+    }
+  else
+    error (_("marker %s not found"), tp->static_trace_marker_id);
+}
+
+static struct breakpoint_ops strace_marker_breakpoint_ops;
+
+static int
+strace_marker_p (struct breakpoint *b)
+{
+  return b->ops == &strace_marker_breakpoint_ops;
+}
+
 /* Delete a breakpoint and clean up all traces of it in the data
    structures.  */
 
@@ -11592,7 +13719,6 @@ update_static_tracepoint (struct breakpoint *b, struct symtab_and_line sal)
   struct tracepoint *tp = (struct tracepoint *) b;
   struct static_tracepoint_marker marker;
   CORE_ADDR pc;
-  int i;
 
   pc = sal.pc;
   if (sal.line)
@@ -11764,12 +13890,13 @@ update_breakpoint_locations (struct breakpoint *b,
       if (b->cond_string != NULL)
 	{
 	  char *s;
-	  struct gdb_exception e;
+	  volatile struct gdb_exception e;
 
 	  s = b->cond_string;
 	  TRY_CATCH (e, RETURN_MASK_ERROR)
 	    {
-	      new_loc->cond = parse_exp_1 (&s, block_for_pc (sals.sals[i].pc), 
+	      new_loc->cond = parse_exp_1 (&s, sals.sals[i].pc,
+					   block_for_pc (sals.sals[i].pc), 
 					   0);
 	    }
 	  if (e.reason < 0)
@@ -11845,54 +13972,15 @@ static struct symtabs_and_lines
 addr_string_to_sals (struct breakpoint *b, char *addr_string, int *found)
 {
   char *s;
-  int marker_spec;
   struct symtabs_and_lines sals = {0};
   volatile struct gdb_exception e;
 
+  gdb_assert (b->ops != NULL);
   s = addr_string;
-  marker_spec = b->type == bp_static_tracepoint && is_marker_spec (s);
 
   TRY_CATCH (e, RETURN_MASK_ERROR)
     {
-      if (marker_spec)
-	{
-	  struct tracepoint *tp = (struct tracepoint *) b;
-
-	  sals = decode_static_tracepoint_spec (&s);
-	  if (sals.nelts > tp->static_trace_marker_id_idx)
-	    {
-	      sals.sals[0] = sals.sals[tp->static_trace_marker_id_idx];
-	      sals.nelts = 1;
-	    }
-	  else
-	    error (_("marker %s not found"), tp->static_trace_marker_id);
-	}
-      else
-	{
-	  struct linespec_result canonical;
-
-	  init_linespec_result (&canonical);
-	  decode_line_full (&s, DECODE_LINE_FUNFIRSTLINE,
-			    (struct symtab *) NULL, 0,
-			    &canonical, multiple_symbols_all,
-			    b->filter);
-
-	  /* We should get 0 or 1 resulting SALs.  */
-	  gdb_assert (VEC_length (linespec_sals, canonical.sals) < 2);
-
-	  if (VEC_length (linespec_sals, canonical.sals) > 0)
-	    {
-	      struct linespec_sals *lsal;
-
-	      lsal = VEC_index (linespec_sals, canonical.sals, 0);
-	      sals = lsal->sals;
-	      /* Arrange it so the destructor does not free the
-		 contents.  */
-	      lsal->sals.sals = NULL;
-	    }
-
-	  destroy_linespec_result (&canonical);
-	}
+      b->ops->decode_linespec (b, &s, &sals);
     }
   if (e.reason < 0)
     {
@@ -11935,17 +14023,21 @@ addr_string_to_sals (struct breakpoint *b, char *addr_string, int *found)
 	  char *cond_string = 0;
 	  int thread = -1;
 	  int task = 0;
+	  char *extra_string = NULL;
 
 	  find_condition_and_thread (s, sals.sals[0].pc,
-				     &cond_string, &thread, &task);
+				     &cond_string, &thread, &task,
+				     &extra_string);
 	  if (cond_string)
 	    b->cond_string = cond_string;
 	  b->thread = thread;
 	  b->task = task;
+	  if (extra_string)
+	    b->extra_string = extra_string;
 	  b->condition_not_parsed = 0;
 	}
 
-      if (b->type == bp_static_tracepoint && !marker_spec)
+      if (b->type == bp_static_tracepoint && !strace_marker_p (b))
 	sals.sals[0] = update_static_tracepoint (b, sals.sals[0]);
 
       *found = 1;
@@ -11988,6 +14080,75 @@ breakpoint_re_set_default (struct breakpoint *b)
   update_breakpoint_locations (b, expanded, expanded_end);
 }
 
+/* Default method for creating SALs from an address string.  It basically
+   calls parse_breakpoint_sals.  Return 1 for success, zero for failure.  */
+
+static void
+create_sals_from_address_default (char **arg,
+				  struct linespec_result *canonical,
+				  enum bptype type_wanted,
+				  char *addr_start, char **copy_arg)
+{
+  parse_breakpoint_sals (arg, canonical);
+}
+
+/* Call create_breakpoints_sal for the given arguments.  This is the default
+   function for the `create_breakpoints_sal' method of
+   breakpoint_ops.  */
+
+static void
+create_breakpoints_sal_default (struct gdbarch *gdbarch,
+				struct linespec_result *canonical,
+				struct linespec_sals *lsal,
+				char *cond_string,
+				char *extra_string,
+				enum bptype type_wanted,
+				enum bpdisp disposition,
+				int thread,
+				int task, int ignore_count,
+				const struct breakpoint_ops *ops,
+				int from_tty, int enabled,
+				int internal, unsigned flags)
+{
+  create_breakpoints_sal (gdbarch, canonical, cond_string,
+			  extra_string,
+			  type_wanted, disposition,
+			  thread, task, ignore_count, ops, from_tty,
+			  enabled, internal, flags);
+}
+
+/* Decode the line represented by S by calling decode_line_full.  This is the
+   default function for the `decode_linespec' method of breakpoint_ops.  */
+
+static void
+decode_linespec_default (struct breakpoint *b, char **s,
+			 struct symtabs_and_lines *sals)
+{
+  struct linespec_result canonical;
+
+  init_linespec_result (&canonical);
+  decode_line_full (s, DECODE_LINE_FUNFIRSTLINE,
+		    (struct symtab *) NULL, 0,
+		    &canonical, multiple_symbols_all,
+		    b->filter);
+
+  /* We should get 0 or 1 resulting SALs.  */
+  gdb_assert (VEC_length (linespec_sals, canonical.sals) < 2);
+
+  if (VEC_length (linespec_sals, canonical.sals) > 0)
+    {
+      struct linespec_sals *lsal;
+
+      lsal = VEC_index (linespec_sals, canonical.sals, 0);
+      *sals = lsal->sals;
+      /* Arrange it so the destructor does not free the
+	 contents.  */
+      lsal->sals.sals = NULL;
+    }
+
+  destroy_linespec_result (&canonical);
+}
+
 /* Prepare the global context for a re-set of breakpoint B.  */
 
 static struct cleanup *
@@ -12254,6 +14415,9 @@ disable_breakpoint (struct breakpoint *bpt)
 
   bpt->enable_state = bp_disabled;
 
+  /* Mark breakpoint locations modified.  */
+  mark_breakpoint_modified (bpt);
+
   if (target_supports_enable_disable_tracepoint ()
       && current_trace_status ()->running && is_tracepoint (bpt))
     {
@@ -12301,7 +14465,11 @@ disable_command (char *args, int from_tty)
       struct bp_location *loc = find_location_by_number (args);
       if (loc)
 	{
-	  loc->enabled = 0;
+	  if (loc->enabled)
+	    {
+	      loc->enabled = 0;
+	      mark_breakpoint_location_modified (loc);
+	    }
 	  if (target_supports_enable_disable_tracepoint ()
 	      && current_trace_status ()->running && loc->owner
 	      && is_tracepoint (loc->owner))
@@ -12314,7 +14482,8 @@ disable_command (char *args, int from_tty)
 }
 
 static void
-enable_breakpoint_disp (struct breakpoint *bpt, enum bpdisp disposition)
+enable_breakpoint_disp (struct breakpoint *bpt, enum bpdisp disposition,
+			int count)
 {
   int target_resources_ok;
 
@@ -12335,7 +14504,7 @@ enable_breakpoint_disp (struct breakpoint *bpt, enum bpdisp disposition)
     {
       /* Initialize it just to avoid a GCC false warning.  */
       enum enable_state orig_enable_state = 0;
-      struct gdb_exception e;
+      volatile struct gdb_exception e;
 
       TRY_CATCH (e, RETURN_MASK_ALL)
 	{
@@ -12357,6 +14526,11 @@ enable_breakpoint_disp (struct breakpoint *bpt, enum bpdisp disposition)
   if (bpt->enable_state != bp_permanent)
     bpt->enable_state = bp_enabled;
 
+  bpt->enable_state = bp_enabled;
+
+  /* Mark breakpoint locations modified.  */
+  mark_breakpoint_modified (bpt);
+
   if (target_supports_enable_disable_tracepoint ()
       && current_trace_status ()->running && is_tracepoint (bpt))
     {
@@ -12367,6 +14541,7 @@ enable_breakpoint_disp (struct breakpoint *bpt, enum bpdisp disposition)
     }
 
   bpt->disposition = disposition;
+  bpt->enable_count = count;
   update_global_location_list (1);
   breakpoints_changed ();
   
@@ -12377,7 +14552,7 @@ enable_breakpoint_disp (struct breakpoint *bpt, enum bpdisp disposition)
 void
 enable_breakpoint (struct breakpoint *bpt)
 {
-  enable_breakpoint_disp (bpt, bpt->disposition);
+  enable_breakpoint_disp (bpt, bpt->disposition, 0);
 }
 
 static void
@@ -12415,7 +14590,11 @@ enable_command (char *args, int from_tty)
       struct bp_location *loc = find_location_by_number (args);
       if (loc)
 	{
-	  loc->enabled = 1;
+	  if (!loc->enabled)
+	    {
+	      loc->enabled = 1;
+	      mark_breakpoint_location_modified (loc);
+	    }
 	  if (target_supports_enable_disable_tracepoint ()
 	      && current_trace_status ()->running && loc->owner
 	      && is_tracepoint (loc->owner))
@@ -12427,18 +14606,27 @@ enable_command (char *args, int from_tty)
     map_breakpoint_numbers (args, do_map_enable_breakpoint, NULL);
 }
 
+/* This struct packages up disposition data for application to multiple
+   breakpoints.  */
+
+struct disp_data
+{
+  enum bpdisp disp;
+  int count;
+};
+
 static void
 do_enable_breakpoint_disp (struct breakpoint *bpt, void *arg)
 {
-  enum bpdisp disp = *(enum bpdisp *) arg;
+  struct disp_data disp_data = *(struct disp_data *) arg;
 
-  enable_breakpoint_disp (bpt, disp);
+  enable_breakpoint_disp (bpt, disp_data.disp, disp_data.count);
 }
 
 static void
 do_map_enable_once_breakpoint (struct breakpoint *bpt, void *ignore)
 {
-  enum bpdisp disp = disp_disable;
+  struct disp_data disp = { disp_disable, 1 };
 
   iterate_over_related_breakpoints (bpt, do_enable_breakpoint_disp, &disp);
 }
@@ -12450,9 +14638,25 @@ enable_once_command (char *args, int from_tty)
 }
 
 static void
+do_map_enable_count_breakpoint (struct breakpoint *bpt, void *countptr)
+{
+  struct disp_data disp = { disp_disable, *(int *) countptr };
+
+  iterate_over_related_breakpoints (bpt, do_enable_breakpoint_disp, &disp);
+}
+
+static void
+enable_count_command (char *args, int from_tty)
+{
+  int count = get_number (&args);
+
+  map_breakpoint_numbers (args, do_map_enable_count_breakpoint, &count);
+}
+
+static void
 do_map_enable_delete_breakpoint (struct breakpoint *bpt, void *ignore)
 {
-  enum bpdisp disp = disp_del;
+  struct disp_data disp = { disp_del, 1 };
 
   iterate_over_related_breakpoints (bpt, do_enable_breakpoint_disp, &disp);
 }
@@ -12506,27 +14710,6 @@ invalidate_bp_value_on_memory_change (CORE_ADDR addr, int len,
       }
 }
 
-/* Use the last displayed codepoint's values, or nothing
-   if they aren't valid.  */
-
-struct symtabs_and_lines
-decode_line_spec_1 (char *string, int flags)
-{
-  struct symtabs_and_lines sals;
-
-  if (string == 0)
-    error (_("Empty line specification."));
-  if (last_displayed_sal_is_valid ())
-    sals = decode_line_1 (&string, flags,
-			  get_last_displayed_symtab (),
-			  get_last_displayed_line ());
-  else
-    sals = decode_line_1 (&string, flags, (struct symtab *) NULL, 0);
-  if (*string)
-    error (_("Junk at end of line specification: %s"), string);
-  return sals;
-}
-
 /* Create and insert a raw software breakpoint at PC.  Return an
    identifier, which should be used to remove the breakpoint later.
    In general, places which call this should be using something on the
@@ -12713,9 +14896,10 @@ is_syscall_catchpoint_enabled (struct breakpoint *bp)
 int
 catch_syscall_enabled (void)
 {
-  struct inferior *inf = current_inferior ();
+  struct catch_syscall_inferior_data *inf_data
+    = get_catch_syscall_inferior_data (current_inferior ());
 
-  return inf->total_syscalls_count != 0;
+  return inf_data->total_syscalls_count != 0;
 }
 
 int
@@ -12745,12 +14929,12 @@ catching_syscall_number (int syscall_number)
 }
 
 /* Complete syscall names.  Used by "catch syscall".  */
-static char **
+static VEC (char_ptr) *
 catch_syscall_completer (struct cmd_list_element *cmd,
                          char *text, char *word)
 {
   const char **list = get_syscall_names ();
-  char **retlist
+  VEC (char_ptr) *retlist
     = (list == NULL) ? NULL : complete_on_enum (list, text, word);
 
   xfree (list);
@@ -12767,29 +14951,37 @@ set_tracepoint_count (int num)
   set_internalvar_integer (lookup_internalvar ("tpnum"), num);
 }
 
-void
+static void
 trace_command (char *arg, int from_tty)
 {
+  struct breakpoint_ops *ops;
+  const char *arg_cp = arg;
+
+  if (arg && probe_linespec_to_ops (&arg_cp))
+    ops = &tracepoint_probe_breakpoint_ops;
+  else
+    ops = &tracepoint_breakpoint_ops;
+
   if (create_breakpoint (get_current_arch (),
 			 arg,
-			 NULL, 0, 1 /* parse arg */,
+			 NULL, 0, NULL, 1 /* parse arg */,
 			 0 /* tempflag */,
 			 bp_tracepoint /* type_wanted */,
 			 0 /* Ignore count */,
 			 pending_break_support,
-			 &tracepoint_breakpoint_ops,
+			 ops,
 			 from_tty,
 			 1 /* enabled */,
 			 0 /* internal */, 0))
     set_tracepoint_count (breakpoint_count);
 }
 
-void
+static void
 ftrace_command (char *arg, int from_tty)
 {
   if (create_breakpoint (get_current_arch (),
 			 arg,
-			 NULL, 0, 1 /* parse arg */,
+			 NULL, 0, NULL, 1 /* parse arg */,
 			 0 /* tempflag */,
 			 bp_fast_tracepoint /* type_wanted */,
 			 0 /* Ignore count */,
@@ -12803,17 +14995,26 @@ ftrace_command (char *arg, int from_tty)
 
 /* strace command implementation.  Creates a static tracepoint.  */
 
-void
+static void
 strace_command (char *arg, int from_tty)
 {
+  struct breakpoint_ops *ops;
+
+  /* Decide if we are dealing with a static tracepoint marker (`-m'),
+     or with a normal static tracepoint.  */
+  if (arg && strncmp (arg, "-m", 2) == 0 && isspace (arg[2]))
+    ops = &strace_marker_breakpoint_ops;
+  else
+    ops = &tracepoint_breakpoint_ops;
+
   if (create_breakpoint (get_current_arch (),
 			 arg,
-			 NULL, 0, 1 /* parse arg */,
+			 NULL, 0, NULL, 1 /* parse arg */,
 			 0 /* tempflag */,
 			 bp_static_tracepoint /* type_wanted */,
 			 0 /* Ignore count */,
 			 pending_break_support,
-			 &tracepoint_breakpoint_ops,
+			 ops,
 			 from_tty,
 			 1 /* enabled */,
 			 0 /* internal */, 0))
@@ -12873,7 +15074,8 @@ create_tracepoint_from_upload (struct uploaded_tp *utp)
 
   if (!create_breakpoint (get_current_arch (),
 			  addr_str,
-			  utp->cond_string, -1, 0 /* parse cond/thread */,
+			  utp->cond_string, -1, NULL,
+			  0 /* parse cond/thread */,
 			  0 /* tempflag */,
 			  utp->type /* type_wanted */,
 			  0 /* Ignore count */,
@@ -13323,7 +15525,10 @@ all_tracepoints (void)
    COMMAND should be a string constant containing the name of the
    command.  */
 #define BREAK_ARGS_HELP(command) \
-command" [LOCATION] [thread THREADNUM] [if CONDITION]\n\
+command" [PROBE_MODIFIER] [LOCATION] [thread THREADNUM] [if CONDITION]\n\
+PROBE_MODIFIER shall be present if the command is to be placed in a\n\
+probe point.  Accepted values are `-probe' (for a generic, automatically\n\
+guessed probe type) or `-probe-stap' (for a SystemTap probe).\n\
 LOCATION may be a line number, function name, or \"*\" and an address.\n\
 If a line number is specified, break at start of code for that line.\n\
 If a function is specified, break at start of code for that function.\n\
@@ -13349,8 +15554,7 @@ void
 add_catch_command (char *name, char *docstring,
 		   void (*sfunc) (char *args, int from_tty,
 				  struct cmd_list_element *command),
-                   char **(*completer) (struct cmd_list_element *cmd,
-                                         char *text, char *word),
+		   completer_ftype *completer,
 		   void *user_data_catch,
 		   void *user_data_tcatch)
 {
@@ -13372,9 +15576,12 @@ add_catch_command (char *name, char *docstring,
 static void
 clear_syscall_counts (struct inferior *inf)
 {
-  inf->total_syscalls_count = 0;
-  inf->any_syscall_count = 0;
-  VEC_free (int, inf->syscalls_counts);
+  struct catch_syscall_inferior_data *inf_data
+    = get_catch_syscall_inferior_data (inf);
+
+  inf_data->total_syscalls_count = 0;
+  inf_data->any_syscall_count = 0;
+  VEC_free (int, inf_data->syscalls_counts);
 }
 
 static void
@@ -13418,7 +15625,8 @@ is_non_inline_function (struct breakpoint *b)
    have been inlined.  */
 
 int
-pc_at_non_inline_function (struct address_space *aspace, CORE_ADDR pc)
+pc_at_non_inline_function (struct address_space *aspace, CORE_ADDR pc,
+			   const struct target_waitstatus *ws)
 {
   struct breakpoint *b;
   struct bp_location *bl;
@@ -13431,7 +15639,7 @@ pc_at_non_inline_function (struct address_space *aspace, CORE_ADDR pc)
       for (bl = b->loc; bl != NULL; bl = bl->next)
 	{
 	  if (!bl->shlib_disabled
-	      && bpstat_check_location (bl, aspace, pc))
+	      && bpstat_check_location (bl, aspace, pc, ws))
 	    return 1;
 	}
     }
@@ -13459,6 +15667,9 @@ initialize_breakpoint_ops (void)
   ops->insert_location = bkpt_insert_location;
   ops->remove_location = bkpt_remove_location;
   ops->breakpoint_hit = bkpt_breakpoint_hit;
+  ops->create_sals_from_address = bkpt_create_sals_from_address;
+  ops->create_breakpoints_sal = bkpt_create_breakpoints_sal;
+  ops->decode_linespec = bkpt_decode_linespec;
 
   /* The breakpoint_ops structure to be used in regular breakpoints.  */
   ops = &bkpt_breakpoint_ops;
@@ -13496,6 +15707,19 @@ initialize_breakpoint_ops (void)
   ops->print_it = momentary_bkpt_print_it;
   ops->print_mention = momentary_bkpt_print_mention;
 
+  /* Momentary breakpoints for bp_longjmp and bp_exception.  */
+  ops = &longjmp_breakpoint_ops;
+  *ops = momentary_breakpoint_ops;
+  ops->dtor = longjmp_bkpt_dtor;
+
+  /* Probe breakpoints.  */
+  ops = &bkpt_probe_breakpoint_ops;
+  *ops = bkpt_breakpoint_ops;
+  ops->insert_location = bkpt_probe_insert_location;
+  ops->remove_location = bkpt_probe_remove_location;
+  ops->create_sals_from_address = bkpt_probe_create_sals_from_address;
+  ops->decode_linespec = bkpt_probe_decode_linespec;
+
   /* GNU v3 exception catchpoints.  */
   ops = &gnu_v3_exception_catchpoint_ops;
   *ops = bkpt_breakpoint_ops;
@@ -13539,6 +15763,22 @@ initialize_breakpoint_ops (void)
   ops->print_one_detail = tracepoint_print_one_detail;
   ops->print_mention = tracepoint_print_mention;
   ops->print_recreate = tracepoint_print_recreate;
+  ops->create_sals_from_address = tracepoint_create_sals_from_address;
+  ops->create_breakpoints_sal = tracepoint_create_breakpoints_sal;
+  ops->decode_linespec = tracepoint_decode_linespec;
+
+  /* Probe tracepoints.  */
+  ops = &tracepoint_probe_breakpoint_ops;
+  *ops = tracepoint_breakpoint_ops;
+  ops->create_sals_from_address = tracepoint_probe_create_sals_from_address;
+  ops->decode_linespec = tracepoint_probe_decode_linespec;
+
+  /* Static tracepoints with marker (`-m').  */
+  ops = &strace_marker_breakpoint_ops;
+  *ops = tracepoint_breakpoint_ops;
+  ops->create_sals_from_address = strace_marker_create_sals_from_address;
+  ops->create_breakpoints_sal = strace_marker_create_breakpoints_sal;
+  ops->decode_linespec = strace_marker_decode_linespec;
 
   /* Fork catchpoints.  */
   ops = &catch_fork_breakpoint_ops;
@@ -13585,6 +15825,27 @@ initialize_breakpoint_ops (void)
   ops->print_one = print_one_catch_syscall;
   ops->print_mention = print_mention_catch_syscall;
   ops->print_recreate = print_recreate_catch_syscall;
+
+  /* Solib-related catchpoints.  */
+  ops = &catch_solib_breakpoint_ops;
+  *ops = base_breakpoint_ops;
+  ops->dtor = dtor_catch_solib;
+  ops->insert_location = insert_catch_solib;
+  ops->remove_location = remove_catch_solib;
+  ops->breakpoint_hit = breakpoint_hit_catch_solib;
+  ops->check_status = check_status_catch_solib;
+  ops->print_it = print_it_catch_solib;
+  ops->print_one = print_one_catch_solib;
+  ops->print_mention = print_mention_catch_solib;
+  ops->print_recreate = print_recreate_catch_solib;
+
+  ops = &dprintf_breakpoint_ops;
+  *ops = bkpt_base_breakpoint_ops;
+  ops->re_set = bkpt_re_set;
+  ops->resources_needed = bkpt_resources_needed;
+  ops->print_it = bkpt_print_it;
+  ops->print_mention = bkpt_print_mention;
+  ops->print_recreate = bkpt_print_recreate;
 }
 
 void
@@ -13598,7 +15859,11 @@ _initialize_breakpoint (void)
   observer_attach_inferior_exit (clear_syscall_counts);
   observer_attach_memory_changed (invalidate_bp_value_on_memory_change);
 
-  breakpoint_objfile_key = register_objfile_data ();
+  breakpoint_objfile_key
+    = register_objfile_data_with_cleanup (NULL, free_breakpoint_probes);
+
+  catch_syscall_inferior_data
+    = register_inferior_data_with_cleanup (catch_syscall_inferior_data_cleanup);
 
   breakpoint_chain = 0;
   /* Don't bother to call set_breakpoint_count.  $bpnum isn't useful
@@ -13622,10 +15887,11 @@ Type a line containing \"end\" to indicate the end of them.\n\
 Give \"silent\" as the first line to make the breakpoint silent;\n\
 then no output is printed when it is hit, except what the commands print."));
 
-  add_com ("condition", class_breakpoint, condition_command, _("\
+  c = add_com ("condition", class_breakpoint, condition_command, _("\
 Specify breakpoint number N to break only if COND is true.\n\
 Usage is `condition N COND', where N is an integer and COND is an\n\
 expression to be evaluated whenever breakpoint N is reached."));
+  set_cmd_completer (c, condition_completer);
 
   c = add_com ("tbreak", class_breakpoint, tbreak_command, _("\
 Set a temporary breakpoint.\n\
@@ -13686,6 +15952,12 @@ Enable breakpoints and delete when hit.  Give breakpoint numbers.\n\
 If a breakpoint is hit while enabled in this fashion, it is deleted."),
 	   &enablebreaklist);
 
+  add_cmd ("count", no_class, enable_count_command, _("\
+Enable breakpoints for COUNT hits.  Give count and then breakpoint numbers.\n\
+If a breakpoint is hit while enabled in this fashion,\n\
+the count is decremented; when it reaches zero, the breakpoint is disabled."),
+	   &enablebreaklist);
+
   add_cmd ("delete", no_class, enable_delete_command, _("\
 Enable breakpoints and delete when hit.  Give breakpoint numbers.\n\
 If a breakpoint is hit while enabled in this fashion, it is deleted."),
@@ -13696,6 +15968,12 @@ Enable breakpoints for one hit.  Give breakpoint numbers.\n\
 If a breakpoint is hit while enabled in this fashion, it becomes disabled."),
 	   &enablelist);
 
+  add_cmd ("count", no_class, enable_count_command, _("\
+Enable breakpoints for COUNT hits.  Give count and then breakpoint numbers.\n\
+If a breakpoint is hit while enabled in this fashion,\n\
+the count is decremented; when it reaches zero, the breakpoint is disabled."),
+	   &enablelist);
+
   add_prefix_cmd ("disable", class_breakpoint, disable_command, _("\
 Disable some breakpoints.\n\
 Arguments are breakpoint numbers with spaces in between.\n\
@@ -13862,15 +16140,13 @@ Set temporary catchpoints to catch events."),
 
   /* Add catch and tcatch sub-commands.  */
   add_catch_command ("catch", _("\
-Catch an exception, when caught.\n\
-With an argument, catch only exceptions with the given name."),
+Catch an exception, when caught."),
 		     catch_catch_command,
                      NULL,
 		     CATCH_PERMANENT,
 		     CATCH_TEMPORARY);
   add_catch_command ("throw", _("\
-Catch an exception, when thrown.\n\
-With an argument, catch only exceptions with the given name."),
+Catch an exception, when thrown."),
 		     catch_throw_command,
                      NULL,
 		     CATCH_PERMANENT,
@@ -13890,6 +16166,20 @@ With an argument, catch only exceptions with the given name."),
                      NULL,
 		     CATCH_PERMANENT,
 		     CATCH_TEMPORARY);
+  add_catch_command ("load", _("Catch loads of shared libraries.\n\
+Usage: catch load [REGEX]\n\
+If REGEX is given, only stop for libraries matching the regular expression."),
+		     catch_load_command_1,
+		     NULL,
+		     CATCH_PERMANENT,
+		     CATCH_TEMPORARY);
+  add_catch_command ("unload", _("Catch unloads of shared libraries.\n\
+Usage: catch unload [REGEX]\n\
+If REGEX is given, only stop for libraries matching the regular expression."),
+		     catch_unload_command_1,
+		     NULL,
+		     CATCH_PERMANENT,
+		     CATCH_TEMPORARY);
   add_catch_command ("syscall", _("\
 Catch system calls by their names and/or numbers.\n\
 Arguments say which system calls to catch.  If no arguments\n\
@@ -14089,8 +16379,8 @@ a warning will be emitted for such breakpoints."),
 			   &breakpoint_set_cmdlist,
 			   &breakpoint_show_cmdlist);
 
-  add_setshow_enum_cmd ("always-inserted", class_support,
-			always_inserted_enums, &always_inserted_mode, _("\
+  add_setshow_auto_boolean_cmd ("always-inserted", class_support,
+				&always_inserted_mode, _("\
 Set mode for inserting breakpoints."), _("\
 Show mode for inserting breakpoints."), _("\
 When this mode is off, breakpoints are inserted in inferior when it is\n\
@@ -14101,8 +16391,25 @@ the behaviour depends on the non-stop setting (see help set non-stop).\n\
 In this case, if gdb is controlling the inferior in non-stop mode, gdb\n\
 behaves as if always-inserted mode is on; if gdb is controlling the\n\
 inferior in all-stop mode, gdb behaves as if always-inserted mode is off."),
-			   NULL,
-			   &show_always_inserted_mode,
+				NULL,
+				&show_always_inserted_mode,
+				&breakpoint_set_cmdlist,
+				&breakpoint_show_cmdlist);
+
+  add_setshow_enum_cmd ("condition-evaluation", class_breakpoint,
+			condition_evaluation_enums,
+			&condition_evaluation_mode_1, _("\
+Set mode of breakpoint condition evaluation."), _("\
+Show mode of breakpoint condition evaluation."), _("\
+When this is set to \"host\", breakpoint conditions will be\n\
+evaluated on the host's side by GDB.  When it is set to \"target\",\n\
+breakpoint conditions will be downloaded to the target (if the target\n\
+supports such feature) and conditions will be evaluated on the target's side.\n\
+If this is set to \"auto\" (default), this will be automatically set to\n\
+\"target\" if it supports condition evaluation, otherwise it will\n\
+be set to \"gdb\""),
+			   &set_condition_evaluation_mode,
+			   &show_condition_evaluation_mode,
 			   &breakpoint_set_cmdlist,
 			   &breakpoint_show_cmdlist);
 
@@ -14122,6 +16429,58 @@ The breakpoint will stop execution of the inferior whenever it executes\n\
 an instruction at any address within the [START-LOCATION, END-LOCATION]\n\
 range (including START-LOCATION and END-LOCATION)."));
 
+  c = add_com ("dprintf", class_breakpoint, dprintf_command, _("\
+Set a dynamic printf at specified line or function.\n\
+dprintf location,format string,arg1,arg2,...\n\
+location may be a line number, function name, or \"*\" and an address.\n\
+If a line number is specified, break at start of code for that line.\n\
+If a function is specified, break at start of code for that function.\n\
+"));
+  set_cmd_completer (c, location_completer);
+
+  add_setshow_enum_cmd ("dprintf-style", class_support,
+			dprintf_style_enums, &dprintf_style, _("\
+Set the style of usage for dynamic printf."), _("\
+Show the style of usage for dynamic printf."), _("\
+This setting chooses how GDB will do a dynamic printf.\n\
+If the value is \"gdb\", then the printing is done by GDB to its own\n\
+console, as with the \"printf\" command.\n\
+If the value is \"call\", the print is done by calling a function in your\n\
+program; by default printf(), but you can choose a different function or\n\
+output stream by setting dprintf-function and dprintf-channel."),
+			update_dprintf_commands, NULL,
+			&setlist, &showlist);
+
+  dprintf_function = xstrdup ("printf");
+  add_setshow_string_cmd ("dprintf-function", class_support,
+			  &dprintf_function, _("\
+Set the function to use for dynamic printf"), _("\
+Show the function to use for dynamic printf"), NULL,
+			  update_dprintf_commands, NULL,
+			  &setlist, &showlist);
+
+  dprintf_channel = xstrdup ("");
+  add_setshow_string_cmd ("dprintf-channel", class_support,
+			  &dprintf_channel, _("\
+Set the channel to use for dynamic printf"), _("\
+Show the channel to use for dynamic printf"), NULL,
+			  update_dprintf_commands, NULL,
+			  &setlist, &showlist);
+
+  add_setshow_boolean_cmd ("disconnected-dprintf", no_class,
+			   &disconnected_dprintf, _("\
+Set whether dprintf continues after GDB disconnects."), _("\
+Show whether dprintf continues after GDB disconnects."), _("\
+Use this to let dprintf commands continue to hit and produce output\n\
+even if GDB disconnects or detaches from the target."),
+			   NULL,
+			   NULL,
+			   &setlist, &showlist);
+
+  add_com ("agent-printf", class_vars, agent_printf_command, _("\
+agent-printf \"printf format string\", arg1, arg2, arg3, ..., argn\n\
+(target agent only) This is useful for formatted output in user-defined commands."));
+
   automatic_hardware_breakpoints = 1;
 
   observer_attach_about_to_proceed (breakpoint_about_to_proceed);
diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h
index 3548d13..4e4f875 100644
--- a/gdb/breakpoint.h
+++ b/gdb/breakpoint.h
@@ -22,6 +22,8 @@
 #include "frame.h"
 #include "value.h"
 #include "vec.h"
+#include "ax.h"
+#include "command.h"
 
 struct value;
 struct block;
@@ -30,6 +32,8 @@ struct get_number_or_range_state;
 struct thread_info;
 struct bpstats;
 struct bp_location;
+struct linespec_result;
+struct linespec_sals;
 
 /* This is the maximum number of bytes a breakpoint instruction can
    take.  Feel free to increase it.  It's just used in a few places to
@@ -61,6 +65,12 @@ enum bptype
     bp_longjmp,			/* secret breakpoint to find longjmp() */
     bp_longjmp_resume,		/* secret breakpoint to escape longjmp() */
 
+    /* Breakpoint placed to the same location(s) like bp_longjmp but used to
+       protect against stale DUMMY_FRAME.  Multiple bp_longjmp_call_dummy and
+       one bp_call_dummy are chained together by related_breakpoint for each
+       DUMMY_FRAME.  */
+    bp_longjmp_call_dummy,
+
     /* An internal breakpoint that is installed on the unwinder's
        debug hook.  */
     bp_exception,
@@ -90,14 +100,8 @@ enum bptype
        3) It can never be disabled.  */
     bp_watchpoint_scope,
 
-    /* The breakpoint at the end of a call dummy.  */
-    /* FIXME: What if the function we are calling longjmp()s out of
-       the call, or the user gets out with the "return" command?  We
-       currently have no way of cleaning up the breakpoint in these
-       (obscure) situations.  (Probably can solve this by noticing
-       longjmp, "return", etc., it's similar to noticing when a
-       watchpoint on a local variable goes out of scope (with hardware
-       support for watchpoints)).  */
+    /* The breakpoint at the end of a call dummy.  See bp_longjmp_call_dummy it
+       is chained with by related_breakpoint.  */
     bp_call_dummy,
 
     /* A breakpoint set on std::terminate, that is used to catch
@@ -151,6 +155,13 @@ enum bptype
     bp_fast_tracepoint,
     bp_static_tracepoint,
 
+    /* A dynamic printf stops at the given location, does a formatted
+       print, then automatically continues.  (Although this is sort of
+       like a macro packaging up standard breakpoint functionality,
+       GDB doesn't have a way to construct types of breakpoint from
+       elements of behavior.)  */
+    bp_dprintf,
+
     /* Event for JIT compiled code generation or deletion.  */
     bp_jit_event,
 
@@ -213,6 +224,16 @@ enum target_hw_bp_type
   };
 
 
+/* Status of breakpoint conditions used when synchronizing
+   conditions with the target.  */
+
+enum condition_status
+  {
+    condition_unchanged = 0,
+    condition_modified,
+    condition_updated
+  };
+
 /* Information used by targets to insert and remove breakpoints.  */
 
 struct bp_target_info
@@ -247,6 +268,18 @@ struct bp_target_info
      (e.g. if a remote stub handled the details).  We may still need
      the size to remove the breakpoint safely.  */
   int placed_size;
+
+  /* Vector of conditions the target should evaluate if it supports target-side
+     breakpoint conditions.  */
+  VEC(agent_expr_p) *conditions;
+
+  /* Vector of commands the target should evaluate if it supports
+     target-side breakpoint commands.  */
+  VEC(agent_expr_p) *tcommands;
+
+  /* Flag that is true if the breakpoint should be left in place even
+     when GDB is not connected.  */
+  int persist;
 };
 
 /* GDB maintains two types of information about each breakpoint (or
@@ -313,6 +346,33 @@ struct bp_location
      the owner breakpoint object.  */
   struct expression *cond;
 
+  /* Conditional expression in agent expression
+     bytecode form.  This is used for stub-side breakpoint
+     condition evaluation.  */
+  struct agent_expr *cond_bytecode;
+
+  /* Signals that the condition has changed since the last time
+     we updated the global location list.  This means the condition
+     needs to be sent to the target again.  This is used together
+     with target-side breakpoint conditions.
+
+     condition_unchanged: It means there has been no condition changes.
+
+     condition_modified: It means this location had its condition modified.
+
+     condition_updated: It means we already marked all the locations that are
+     duplicates of this location and thus we don't need to call
+     force_breakpoint_reinsertion (...) for this location.  */
+
+  enum condition_status condition_changed;
+
+  struct agent_expr *cmd_bytecode;
+
+  /* Signals that breakpoint conditions and/or commands need to be
+     re-synched with the target.  This has no use other than
+     target-side breakpoints.  */
+  char needs_update;
+
   /* This location's address is in an unloaded solib, and so this
      location should not be inserted.  It will be automatically
      enabled when that solib is loaded.  */
@@ -377,6 +437,15 @@ struct bp_location
      processor's architectual constraints.  */
   CORE_ADDR requested_address;
 
+  /* An additional address assigned with this location.  This is currently
+     only used by STT_GNU_IFUNC resolver breakpoints to hold the address
+     of the resolver function.  */
+  CORE_ADDR related_address;
+
+  /* If the location comes from a probe point, this is the probe associated
+     with it.  */
+  struct probe *probe;
+
   char *function_name;
 
   /* Details of the placed breakpoint, when inserted.  */
@@ -436,9 +505,14 @@ struct breakpoint_ops
 
   /* Return true if it the target has stopped due to hitting
      breakpoint location BL.  This function does not check if we
-     should stop, only if BL explains the stop.  */
-  int (*breakpoint_hit) (const struct bp_location *bl, struct address_space *,
-			 CORE_ADDR);
+     should stop, only if BL explains the stop.  ASPACE is the address
+     space in which the event occurred, BP_ADDR is the address at
+     which the inferior stopped, and WS is the target_waitstatus
+     describing the event.  */
+  int (*breakpoint_hit) (const struct bp_location *bl,
+			 struct address_space *aspace,
+			 CORE_ADDR bp_addr,
+			 const struct target_waitstatus *ws);
 
   /* Check internal conditions of the breakpoint referred to by BS.
      If we should not stop for this breakpoint, set BS->stop to 0.  */
@@ -482,6 +556,38 @@ struct breakpoint_ops
 
   /* Print to FP the CLI command that recreates this breakpoint.  */
   void (*print_recreate) (struct breakpoint *, struct ui_file *fp);
+
+  /* Create SALs from address string, storing the result in linespec_result.
+
+     For an explanation about the arguments, see the function
+     `create_sals_from_address_default'.
+
+     This function is called inside `create_breakpoint'.  */
+  void (*create_sals_from_address) (char **, struct linespec_result *,
+				    enum bptype, char *, char **);
+
+  /* This method will be responsible for creating a breakpoint given its SALs.
+     Usually, it just calls `create_breakpoints_sal' (for ordinary
+     breakpoints).  However, there may be some special cases where we might
+     need to do some tweaks, e.g., see
+     `strace_marker_create_breakpoints_sal'.
+
+     This function is called inside `create_breakpoint'.  */
+  void (*create_breakpoints_sal) (struct gdbarch *,
+				  struct linespec_result *,
+				  struct linespec_sals *, char *,
+				  char *,
+				  enum bptype, enum bpdisp, int, int,
+				  int, const struct breakpoint_ops *,
+				  int, int, int, unsigned);
+
+  /* Given the address string (second parameter), this method decodes it
+     and provides the SAL locations related to it.  For ordinary breakpoints,
+     it calls `decode_line_full'.
+
+     This function is called inside `addr_string_to_sals'.  */
+  void (*decode_linespec) (struct breakpoint *, char **,
+			   struct symtabs_and_lines *);
 };
 
 /* Helper for breakpoint_ops->print_recreate implementations.  Prints
@@ -506,9 +612,6 @@ enum watchpoint_triggered
   watch_triggered_yes  
 };
 
-/* This is used to declare the VEC syscalls_to_be_caught.  */
-DEF_VEC_I(int);
-
 typedef struct bp_location *bp_location_p;
 DEF_VEC_P(bp_location_p);
 
@@ -558,6 +661,11 @@ struct breakpoint
     /* Number of stops at this breakpoint that should
        be continued automatically before really stopping.  */
     int ignore_count;
+
+    /* Number of stops at this breakpoint before it will be
+       disabled.  */
+    int enable_count;
+
     /* Chain of command lines to execute when this breakpoint is
        hit.  */
     struct counted_command_line *commands;
@@ -591,8 +699,9 @@ struct breakpoint
     /* String form of the breakpoint condition (malloc'd), or NULL if
        there is no condition.  */
     char *cond_string;
-    /* String form of exp to use for displaying to the user
-       (malloc'd), or NULL if none.  */
+
+    /* String form of extra parameters, or NULL if there are none.  */
+    char *extra_string;
 
     /* Holds the address of the related watchpoint_scope breakpoint
        when using watchpoints on local variables (might the concept of
@@ -683,6 +792,11 @@ struct watchpoint
   CORE_ADDR hw_wp_mask;
 };
 
+/* Return true if BPT is either a software breakpoint or a hardware
+   breakpoint.  */
+
+extern int is_breakpoint (const struct breakpoint *bpt);
+
 /* Returns true if BPT is really a watchpoint.  */
 
 extern int is_watchpoint (const struct breakpoint *bpt);
@@ -741,7 +855,8 @@ extern void bpstat_clear (bpstat *);
 extern bpstat bpstat_copy (bpstat);
 
 extern bpstat bpstat_stop_status (struct address_space *aspace,
-				  CORE_ADDR pc, ptid_t ptid);
+				  CORE_ADDR pc, ptid_t ptid,
+				  const struct target_waitstatus *ws);
 

 /* This bpstat_what stuff tells wait_for_inferior what to do with a
    breakpoint (a challenging task).
@@ -1046,6 +1161,10 @@ extern void delete_breakpoint (struct breakpoint *);
 
 extern void breakpoint_auto_delete (bpstat);
 
+typedef void (*walk_bp_location_callback) (struct bp_location *, void *);
+
+extern void iterate_over_bp_locations (walk_bp_location_callback);
+
 /* Return the chain of command lines to execute when this breakpoint
    is hit.  */
 extern struct command_line *breakpoint_commands (struct breakpoint *b);
@@ -1080,8 +1199,7 @@ extern void
   add_catch_command (char *name, char *docstring,
 		     void (*sfunc) (char *args, int from_tty,
 				    struct cmd_list_element *command),
-		     char **(*completer) (struct cmd_list_element *cmd,
-					  char *text, char *word),
+		     completer_ftype *completer,
 		     void *user_data_catch,
 		     void *user_data_tcatch);
 
@@ -1117,6 +1235,7 @@ enum breakpoint_create_flags
 
 extern int create_breakpoint (struct gdbarch *gdbarch, char *arg,
 			      char *cond_string, int thread,
+			      char *extra_string,
 			      int parse_condition_and_thread,
 			      int tempflag, enum bptype wanted_type,
 			      int ignore_count,
@@ -1176,6 +1295,12 @@ extern void set_longjmp_breakpoint (struct thread_info *tp,
 				    struct frame_id frame);
 extern void delete_longjmp_breakpoint (int thread);
 
+/* Mark all longjmp breakpoints from THREAD for later deletion.  */
+extern void delete_longjmp_breakpoint_at_next_stop (int thread);
+
+extern struct breakpoint *set_longjmp_breakpoint_for_call_dummy (void);
+extern void check_longjmp_breakpoint_for_call_dummy (int thread);
+
 extern void enable_overlay_breakpoints (void);
 extern void disable_overlay_breakpoints (void);
 
@@ -1277,7 +1402,7 @@ extern void remove_thread_event_breakpoints (void);
 extern void disable_breakpoints_in_shlibs (void);
 
 /* This function returns TRUE if ep is a catchpoint.  */
-extern int ep_is_catchpoint (struct breakpoint *);
+extern int is_catchpoint (struct breakpoint *);
 
 /* Enable breakpoints and delete when hit.  Called with ARG == NULL
    deletes all breakpoints.  */
@@ -1382,11 +1507,14 @@ extern struct breakpoint *iterate_over_breakpoints (int (*) (struct breakpoint *
    have been inlined.  */
 
 extern int pc_at_non_inline_function (struct address_space *aspace,
-				      CORE_ADDR pc);
+				      CORE_ADDR pc,
+				      const struct target_waitstatus *ws);
 
 extern int user_breakpoint_p (struct breakpoint *);
 
 /* Attempt to determine architecture of location identified by SAL.  */
 extern struct gdbarch *get_sal_arch (struct symtab_and_line sal);
 
+extern void handle_solib_event (void);
+
 #endif /* !defined (BREAKPOINT_H) */
diff --git a/gdb/bsd-uthread.c b/gdb/bsd-uthread.c
index ea9831b..948af8f 100644
--- a/gdb/bsd-uthread.c
+++ b/gdb/bsd-uthread.c
@@ -397,7 +397,7 @@ bsd_uthread_wait (struct target_ops *ops,
 
 static void
 bsd_uthread_resume (struct target_ops *ops,
-		    ptid_t ptid, int step, enum target_signal sig)
+		    ptid_t ptid, int step, enum gdb_signal sig)
 {
   /* Pass the request to the layer beneath.  */
   struct target_ops *beneath = find_target_beneath (ops);
diff --git a/gdb/buildsym.c b/gdb/buildsym.c
index 38bde22..d547012 100644
--- a/gdb/buildsym.c
+++ b/gdb/buildsym.c
@@ -49,7 +49,7 @@
 #include "buildsym.h"		/* Our own declarations.  */
 #undef	EXTERN
 
-/* For cleanup_undefined_types and finish_global_stabs (somewhat
+/* For cleanup_undefined_stabs_types and finish_global_stabs (somewhat
    questionable--see comment where we call them).  */
 
 #include "stabsread.h"
@@ -85,6 +85,10 @@ static int pending_addrmap_interesting;
 
 

 static int compare_line_numbers (const void *ln1p, const void *ln2p);
+
+static void record_pending_block (struct objfile *objfile,
+				  struct block *block,
+				  struct pending_block *opblock);
 

 
 /* Initial sizes of data structures.  These are realloc'd larger if
@@ -97,20 +101,6 @@ static int compare_line_numbers (const void *ln1p, const void *ln2p);
 
 /* Maintain the lists of symbols and blocks.  */
 
-/* Add a pending list to free_pendings.  */
-void
-add_free_pendings (struct pending *list)
-{
-  struct pending *link = list;
-
-  if (list)
-    {
-      while (link->next) link = link->next;
-      link->next = free_pendings;
-      free_pendings = list;
-    }
-}
-
 /* Add a symbol to one of the lists of symbols.  */
 
 void
@@ -151,7 +141,7 @@ struct symbol *
 find_symbol_in_list (struct pending *list, char *name, int length)
 {
   int j;
-  char *pp;
+  const char *pp;
 
   while (list != NULL)
     {
@@ -224,11 +214,12 @@ free_pending_blocks (void)
    the order the symbols have in the list (reversed from the input
    file).  Put the block on the list of pending blocks.  */
 
-struct block *
-finish_block (struct symbol *symbol, struct pending **listhead,
-	      struct pending_block *old_blocks,
-	      CORE_ADDR start, CORE_ADDR end,
-	      struct objfile *objfile)
+static struct block *
+finish_block_internal (struct symbol *symbol, struct pending **listhead,
+		       struct pending_block *old_blocks,
+		       CORE_ADDR start, CORE_ADDR end,
+		       struct objfile *objfile,
+		       int is_global, int expandable)
 {
   struct gdbarch *gdbarch = get_objfile_arch (objfile);
   struct pending *next, *next1;
@@ -236,7 +227,9 @@ finish_block (struct symbol *symbol, struct pending **listhead,
   struct pending_block *pblock;
   struct pending_block *opblock;
 
-  block = allocate_block (&objfile->objfile_obstack);
+  block = (is_global
+	   ? allocate_global_block (&objfile->objfile_obstack)
+	   : allocate_block (&objfile->objfile_obstack));
 
   if (symbol)
     {
@@ -245,15 +238,20 @@ finish_block (struct symbol *symbol, struct pending **listhead,
     }
   else
     {
-      BLOCK_DICT (block) = dict_create_hashed (&objfile->objfile_obstack,
-					       *listhead);
+      if (expandable)
+	{
+	  BLOCK_DICT (block) = dict_create_hashed_expandable ();
+	  dict_add_pending (BLOCK_DICT (block), *listhead);
+	}
+      else
+	{
+	  BLOCK_DICT (block) =
+	    dict_create_hashed (&objfile->objfile_obstack, *listhead);
+	}
     }
 
   BLOCK_START (block) = start;
   BLOCK_END (block) = end;
-  /* Superblock filled in when containing block is made.  */
-  BLOCK_SUPERBLOCK (block) = NULL;
-  BLOCK_NAMESPACE (block) = NULL;
 
   /* Put the block in as the value of the symbol that names it.  */
 
@@ -271,7 +269,10 @@ finish_block (struct symbol *symbol, struct pending **listhead,
 	     parameter symbols.  */
 	  int nparams = 0, iparams;
 	  struct symbol *sym;
-	  ALL_BLOCK_SYMBOLS (block, iter, sym)
+
+	  /* Here we want to directly access the dictionary, because
+	     we haven't fully initialized the block yet.  */
+	  ALL_DICT_SYMBOLS (BLOCK_DICT (block), iter, sym)
 	    {
 	      if (SYMBOL_IS_ARGUMENT (sym))
 		nparams++;
@@ -283,7 +284,9 @@ finish_block (struct symbol *symbol, struct pending **listhead,
 		TYPE_ALLOC (ftype, nparams * sizeof (struct field));
 
 	      iparams = 0;
-	      ALL_BLOCK_SYMBOLS (block, iter, sym)
+	      /* Here we want to directly access the dictionary, because
+		 we haven't fully initialized the block yet.  */
+	      ALL_DICT_SYMBOLS (BLOCK_DICT (block), iter, sym)
 		{
 		  if (iparams == nparams)
 		    break;
@@ -392,6 +395,15 @@ finish_block (struct symbol *symbol, struct pending **listhead,
   return block;
 }
 
+struct block *
+finish_block (struct symbol *symbol, struct pending **listhead,
+	      struct pending_block *old_blocks,
+	      CORE_ADDR start, CORE_ADDR end,
+	      struct objfile *objfile)
+{
+  return finish_block_internal (symbol, listhead, old_blocks,
+				start, end, objfile, 0, 0);
+}
 
 /* Record BLOCK on the list of all blocks in the file.  Put it after
    OPBLOCK, or at the beginning if opblock is NULL.  This puts the
@@ -400,7 +412,7 @@ finish_block (struct symbol *symbol, struct pending **listhead,
    Allocate the pending block struct in the objfile_obstack to save
    time.  This wastes a little space.  FIXME: Is it worth it?  */
 
-void
+static void
 record_pending_block (struct objfile *objfile, struct block *block,
 		      struct pending_block *opblock)
 {
@@ -492,10 +504,13 @@ make_blockvector (struct objfile *objfile)
       = addrmap_create_fixed (pending_addrmap, &objfile->objfile_obstack);
   else
     BLOCKVECTOR_MAP (blockvector) = 0;
-        
+
   /* Some compilers output blocks in the wrong order, but we depend on
      their being in the right order so we can binary search.  Check the
-     order and moan about it.  */
+     order and moan about it.
+     Note: Remember that the first two blocks are the global and static
+     blocks.  We could special case that fact and begin checking at block 2.
+     To avoid making that assumption we do not.  */
   if (BLOCKVECTOR_NBLOCKS (blockvector) > 1)
     {
       for (i = 1; i < BLOCKVECTOR_NBLOCKS (blockvector); i++)
@@ -565,7 +580,7 @@ start_subfile (const char *name, const char *dirname)
   current_subfile = subfile;
 
   /* Save its name and compilation directory name.  */
-  subfile->name = (name == NULL) ? NULL : xstrdup (name);
+  subfile->name = xstrdup (name);
   subfile->dirname = (dirname == NULL) ? NULL : xstrdup (dirname);
 
   /* Initialize line-number recording for this subfile.  */
@@ -798,7 +813,20 @@ compare_line_numbers (const void *ln1p, const void *ln2p)
 void
 start_symtab (char *name, char *dirname, CORE_ADDR start_addr)
 {
+  restart_symtab (start_addr);
   last_source_file = name;
+  start_subfile (name, dirname);
+}
+
+/* Restart compilation for a symtab.
+   This is used when a symtab is built from multiple sources.
+   The symtab is first built with start_symtab and then for each additional
+   piece call restart_symtab.  */
+
+void
+restart_symtab (CORE_ADDR start_addr)
+{
+  last_source_file = NULL;
   last_source_start_addr = start_addr;
   file_symbols = NULL;
   global_symbols = NULL;
@@ -820,10 +848,8 @@ start_symtab (char *name, char *dirname, CORE_ADDR start_addr)
 
   /* Initialize the list of sub source files with one entry for this
      file (the top-level source file).  */
-
   subfiles = NULL;
   current_subfile = NULL;
-  start_subfile (name, dirname);
 }
 
 /* Subroutine of end_symtab to simplify it.  Look for a subfile that
@@ -903,7 +929,7 @@ watch_main_source_file_lossage (void)
     }
 }
 
-/* Helper function for qsort.  Parametes are `struct block *' pointers,
+/* Helper function for qsort.  Parameters are `struct block *' pointers,
    function sorts them in descending order by their BLOCK_START.  */
 
 static int
@@ -916,38 +942,43 @@ block_compar (const void *ap, const void *bp)
 	  - (BLOCK_START (b) < BLOCK_START (a)));
 }
 
-/* Finish the symbol definitions for one main source file, close off
-   all the lexical contexts for that file (creating struct block's for
-   them), then make the struct symtab for that file and put it in the
-   list of all such.
+/* Reset globals used to build symtabs.  */
 
-   END_ADDR is the address of the end of the file's text.  SECTION is
-   the section number (in objfile->section_offsets) of the blockvector
-   and linetable.
+static void
+reset_symtab_globals (void)
+{
+  last_source_file = NULL;
+  current_subfile = NULL;
+  pending_macros = NULL;
+  if (pending_addrmap)
+    {
+      obstack_free (&pending_addrmap_obstack, NULL);
+      pending_addrmap = NULL;
+    }
+}
 
-   Note that it is possible for end_symtab() to return NULL.  In
-   particular, for the DWARF case at least, it will return NULL when
-   it finds a compilation unit that has exactly one DIE, a
-   TAG_compile_unit DIE.  This can happen when we link in an object
-   file that was compiled from an empty source file.  Returning NULL
-   is probably not the correct thing to do, because then gdb will
-   never know about this empty file (FIXME).  */
+/* Implementation of the first part of end_symtab.  It allows modifying
+   STATIC_BLOCK before it gets finalized by end_symtab_from_static_block.
+   If the returned value is NULL there is no blockvector created for
+   this symtab (you still must call end_symtab_from_static_block).
 
-struct symtab *
-end_symtab (CORE_ADDR end_addr, struct objfile *objfile, int section)
-{
-  struct symtab *symtab = NULL;
-  struct blockvector *blockvector;
-  struct subfile *subfile;
-  struct context_stack *cstk;
-  struct subfile *nextsub;
+   END_ADDR is the same as for end_symtab: the address of the end of the
+   file's text.
 
+   If EXPANDABLE is non-zero the STATIC_BLOCK dictionary is made
+   expandable.  */
+
+struct block *
+end_symtab_get_static_block (CORE_ADDR end_addr, struct objfile *objfile,
+			     int expandable)
+{
   /* Finish the lexical context of the last function in the file; pop
      the context stack.  */
 
   if (context_stack_depth > 0)
     {
-      cstk = pop_context ();
+      struct context_stack *cstk = pop_context ();
+
       /* Make a block for the local symbols within.  */
       finish_block (cstk->name, &local_symbols, cstk->old_blocks,
 		    cstk->start_addr, end_addr, objfile);
@@ -967,6 +998,7 @@ end_symtab (CORE_ADDR end_addr, struct objfile *objfile, int section)
 
   /* Reordered executables may have out of order pending blocks; if
      OBJF_REORDERED is true, then sort the pending blocks.  */
+
   if ((objfile->flags & OBJF_REORDERED) && pending_blocks)
     {
       unsigned count = 0;
@@ -997,13 +1029,13 @@ end_symtab (CORE_ADDR end_addr, struct objfile *objfile, int section)
      (this needs to be done before the finish_blocks so that
      file_symbols is still good).
 
-     Both cleanup_undefined_types and finish_global_stabs are stabs
+     Both cleanup_undefined_stabs_types and finish_global_stabs are stabs
      specific, but harmless for other symbol readers, since on gdb
      startup or when finished reading stabs, the state is set so these
      are no-ops.  FIXME: Is this handled right in case of QUIT?  Can
      we make this cleaner?  */
 
-  cleanup_undefined_types (objfile);
+  cleanup_undefined_stabs_types (objfile);
   finish_global_stabs (objfile);
 
   if (pending_blocks == NULL
@@ -1012,18 +1044,51 @@ end_symtab (CORE_ADDR end_addr, struct objfile *objfile, int section)
       && have_line_numbers == 0
       && pending_macros == NULL)
     {
-      /* Ignore symtabs that have no functions with real debugging
-         info.  */
+      /* Ignore symtabs that have no functions with real debugging info.  */
+      return NULL;
+    }
+  else
+    {
+      /* Define the STATIC_BLOCK.  */
+      return finish_block_internal (NULL, &file_symbols, NULL,
+				    last_source_start_addr, end_addr, objfile,
+				    0, expandable);
+    }
+}
+
+/* Implementation of the second part of end_symtab.  Pass STATIC_BLOCK
+   as value returned by end_symtab_get_static_block.
+
+   SECTION is the same as for end_symtab: the section number
+   (in objfile->section_offsets) of the blockvector and linetable.
+
+   If EXPANDABLE is non-zero the GLOBAL_BLOCK dictionary is made
+   expandable.  */
+
+struct symtab *
+end_symtab_from_static_block (struct block *static_block,
+			      struct objfile *objfile, int section,
+			      int expandable)
+{
+  struct symtab *symtab = NULL;
+  struct blockvector *blockvector;
+  struct subfile *subfile;
+  struct subfile *nextsub;
+
+  if (static_block == NULL)
+    {
+      /* Ignore symtabs that have no functions with real debugging info.  */
       blockvector = NULL;
     }
   else
     {
-      /* Define the STATIC_BLOCK & GLOBAL_BLOCK, and build the
+      CORE_ADDR end_addr = BLOCK_END (static_block);
+
+      /* Define after STATIC_BLOCK also GLOBAL_BLOCK, and build the
          blockvector.  */
-      finish_block (0, &file_symbols, 0, last_source_start_addr,
-		    end_addr, objfile);
-      finish_block (0, &global_symbols, 0, last_source_start_addr,
-		    end_addr, objfile);
+      finish_block_internal (NULL, &global_symbols, NULL,
+			     last_source_start_addr, end_addr, objfile,
+			     1, expandable);
       blockvector = make_blockvector (objfile);
     }
 
@@ -1122,7 +1187,7 @@ end_symtab (CORE_ADDR end_addr, struct objfile *objfile, int section)
             {
               /* Since we are ignoring that subfile, we also need
                  to unlink the associated empty symtab that we created.
-                 Otherwise, we can into trouble because various parts
+                 Otherwise, we can run into trouble because various parts
                  such as the block-vector are uninitialized whereas
                  the rest of the code assumes that they are.
                  
@@ -1163,6 +1228,14 @@ end_symtab (CORE_ADDR end_addr, struct objfile *objfile, int section)
   if (symtab)
     {
       symtab->primary = 1;
+
+      if (symtab->blockvector)
+	{
+	  struct block *b = BLOCKVECTOR_BLOCK (symtab->blockvector,
+					       GLOBAL_BLOCK);
+
+	  set_block_symtab (b, symtab);
+	}
     }
 
   /* Default any symbols without a specified symtab to the primary
@@ -1183,24 +1256,128 @@ end_symtab (CORE_ADDR end_addr, struct objfile *objfile, int section)
 	    if (SYMBOL_SYMTAB (BLOCK_FUNCTION (block)) == NULL)
 	      SYMBOL_SYMTAB (BLOCK_FUNCTION (block)) = symtab;
 
-	  for (sym = dict_iterator_first (BLOCK_DICT (block), &iter);
-	       sym != NULL;
-	       sym = dict_iterator_next (&iter))
+	  /* Note that we only want to fix up symbols from the local
+	     blocks, not blocks coming from included symtabs.  That is why
+	     we use ALL_DICT_SYMBOLS here and not ALL_BLOCK_SYMBOLS.  */
+	  ALL_DICT_SYMBOLS (BLOCK_DICT (block), iter, sym)
 	    if (SYMBOL_SYMTAB (sym) == NULL)
 	      SYMBOL_SYMTAB (sym) = symtab;
 	}
     }
 
-  last_source_file = NULL;
-  current_subfile = NULL;
-  pending_macros = NULL;
-  if (pending_addrmap)
+  reset_symtab_globals ();
+
+  return symtab;
+}
+
+/* Finish the symbol definitions for one main source file, close off
+   all the lexical contexts for that file (creating struct block's for
+   them), then make the struct symtab for that file and put it in the
+   list of all such.
+
+   END_ADDR is the address of the end of the file's text.  SECTION is
+   the section number (in objfile->section_offsets) of the blockvector
+   and linetable.
+
+   Note that it is possible for end_symtab() to return NULL.  In
+   particular, for the DWARF case at least, it will return NULL when
+   it finds a compilation unit that has exactly one DIE, a
+   TAG_compile_unit DIE.  This can happen when we link in an object
+   file that was compiled from an empty source file.  Returning NULL
+   is probably not the correct thing to do, because then gdb will
+   never know about this empty file (FIXME).
+
+   If you need to modify STATIC_BLOCK before it is finalized you should
+   call end_symtab_get_static_block and end_symtab_from_static_block
+   yourself.  */
+
+struct symtab *
+end_symtab (CORE_ADDR end_addr, struct objfile *objfile, int section)
+{
+  struct block *static_block;
+
+  static_block = end_symtab_get_static_block (end_addr, objfile, 0);
+  return end_symtab_from_static_block (static_block, objfile, section, 0);
+}
+
+/* Same as end_symtab except create a symtab that can be later added to.  */
+
+struct symtab *
+end_expandable_symtab (CORE_ADDR end_addr, struct objfile *objfile,
+		       int section)
+{
+  struct block *static_block;
+
+  static_block = end_symtab_get_static_block (end_addr, objfile, 1);
+  return end_symtab_from_static_block (static_block, objfile, section, 1);
+}
+
+/* Subroutine of augment_type_symtab to simplify it.
+   Attach SYMTAB to all symbols in PENDING_LIST that don't have one.  */
+
+static void
+set_missing_symtab (struct pending *pending_list, struct symtab *symtab)
+{
+  struct pending *pending;
+  int i;
+
+  for (pending = pending_list; pending != NULL; pending = pending->next)
     {
-      obstack_free (&pending_addrmap_obstack, NULL);
-      pending_addrmap = NULL;
+      for (i = 0; i < pending->nsyms; ++i)
+	{
+	  if (SYMBOL_SYMTAB (pending->symbol[i]) == NULL)
+	    SYMBOL_SYMTAB (pending->symbol[i]) = symtab;
+	}
     }
+}
 
-  return symtab;
+/* Same as end_symtab, but for the case where we're adding more symbols
+   to an existing symtab that is known to contain only type information.
+   This is the case for DWARF4 Type Units.  */
+
+void
+augment_type_symtab (struct objfile *objfile, struct symtab *primary_symtab)
+{
+  struct blockvector *blockvector = primary_symtab->blockvector;
+  int i;
+
+  if (context_stack_depth > 0)
+    {
+      complaint (&symfile_complaints,
+		 _("Context stack not empty in augment_type_symtab"));
+      context_stack_depth = 0;
+    }
+  if (pending_blocks != NULL)
+    complaint (&symfile_complaints, _("Blocks in a type symtab"));
+  if (pending_macros != NULL)
+    complaint (&symfile_complaints, _("Macro in a type symtab"));
+  if (have_line_numbers)
+    complaint (&symfile_complaints,
+	       _("Line numbers recorded in a type symtab"));
+
+  if (file_symbols != NULL)
+    {
+      struct block *block = BLOCKVECTOR_BLOCK (blockvector, STATIC_BLOCK);
+
+      /* First mark any symbols without a specified symtab as belonging
+	 to the primary symtab.  */
+      set_missing_symtab (file_symbols, primary_symtab);
+
+      dict_add_pending (BLOCK_DICT (block), file_symbols);
+    }
+
+  if (global_symbols != NULL)
+    {
+      struct block *block = BLOCKVECTOR_BLOCK (blockvector, GLOBAL_BLOCK);
+
+      /* First mark any symbols without a specified symtab as belonging
+	 to the primary symtab.  */
+      set_missing_symtab (global_symbols, primary_symtab);
+
+      dict_add_pending (BLOCK_DICT (block), global_symbols);
+    }
+
+  reset_symtab_globals ();
 }
 
 /* Push a context block.  Args are an identifying nesting level
@@ -1251,7 +1428,7 @@ pop_context (void)
 /* Compute a small integer hash code for the given name.  */
 
 int
-hashname (char *name)
+hashname (const char *name)
 {
     return (hash(name,strlen(name)) % HASHSIZE);
 }
diff --git a/gdb/buildsym.h b/gdb/buildsym.h
index 1604ef5..162ee8c 100644
--- a/gdb/buildsym.h
+++ b/gdb/buildsym.h
@@ -233,8 +233,6 @@ EXTERN int type_vector_length;
 
 #define	INITIAL_TYPE_VECTOR_LENGTH	160
 
-extern void add_free_pendings (struct pending *list);
-
 extern void add_symbol_to_list (struct symbol *symbol,
 				struct pending **listhead);
 
@@ -260,9 +258,25 @@ extern void push_subfile (void);
 
 extern char *pop_subfile (void);
 
+extern struct block *end_symtab_get_static_block (CORE_ADDR end_addr,
+						  struct objfile *objfile,
+						  int expandable);
+
+extern struct symtab *end_symtab_from_static_block (struct block *static_block,
+						    struct objfile *objfile,
+						    int section,
+						    int expandable);
+
 extern struct symtab *end_symtab (CORE_ADDR end_addr,
 				  struct objfile *objfile, int section);
 
+extern struct symtab *end_expandable_symtab (CORE_ADDR end_addr,
+					     struct objfile *objfile,
+					     int section);
+
+extern void augment_type_symtab (struct objfile *objfile,
+				 struct symtab *primary_symtab);
+
 /* Defined in stabsread.c.  */
 
 extern void scan_file_globals (struct objfile *objfile);
@@ -279,17 +293,11 @@ extern void record_line (struct subfile *subfile, int line, CORE_ADDR pc);
 
 extern void start_symtab (char *name, char *dirname, CORE_ADDR start_addr);
 
-extern int hashname (char *name);
-
-extern void free_pending_blocks (void);
+extern void restart_symtab (CORE_ADDR start_addr);
 
-/* FIXME: Note that this is used only in buildsym.c and dstread.c,
-   which should be fixed to not need direct access to
-   record_pending_block.  */
+extern int hashname (const char *name);
 
-extern void record_pending_block (struct objfile *objfile,
-				  struct block *block,
-				  struct pending_block *opblock);
+extern void free_pending_blocks (void);
 
 /* Record the name of the debug format in the current pending symbol
    table.  FORMAT must be a string with a lifetime at least as long as
diff --git a/gdb/c-exp.c b/gdb/c-exp.c
index d3657f9..7595990 100644
--- a/gdb/c-exp.c
+++ b/gdb/c-exp.c
@@ -107,7 +107,8 @@
      ARROW_STAR = 309,
      ARROW = 310,
      BLOCKNAME = 311,
-     FILENAME = 312
+     FILENAME = 312,
+     DOTDOTDOT = 313
    };
 #endif
 #define INT 258
@@ -165,6 +166,7 @@
 #define ARROW 310
 #define BLOCKNAME 311
 #define FILENAME 312
+#define DOTDOTDOT 313
 
 
 
@@ -240,6 +242,12 @@
 #define yygindex c_yygindex
 #define yytable	 c_yytable
 #define yycheck	 c_yycheck
+#define yyss	c_yyss
+#define yysslim	c_yysslim
+#define yyssp	c_yyssp
+#define yystacksize c_yystacksize
+#define yyvs	c_yyvs
+#define yyvsp	c_yyvsp
 
 #ifndef YYDEBUG
 #define	YYDEBUG 1		/* Default to yydebug support */
@@ -269,7 +277,7 @@ void yyerror (char *);
 #endif
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 126 "c-exp.y"
+#line 132 "c-exp.y"
 typedef union YYSTYPE {
     LONGEST lval;
     struct {
@@ -296,11 +304,13 @@ typedef union YYSTYPE {
     struct internalvar *ivar;
 
     struct stoken_vector svec;
-    struct type **tvec;
+    VEC (type_ptr) *tvec;
     int *ivec;
+
+    struct type_stack *type_stack;
   } YYSTYPE;
 /* Line 191 of yacc.c.  */
-#line 304 "c-exp.c"
+#line 314 "c-exp.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -309,15 +319,16 @@ typedef union YYSTYPE {
 
 
 /* Copy the second part of user declarations.  */
-#line 156 "c-exp.y"
+#line 164 "c-exp.y"
 
 /* YYSTYPE gets defined by %union */
 static int parse_number (char *, int, int, YYSTYPE *);
 static struct stoken operator_stoken (const char *);
+static void check_parameter_typelist (VEC (type_ptr) *);
 
 
 /* Line 214 of yacc.c.  */
-#line 321 "c-exp.c"
+#line 332 "c-exp.c"
 
 #if ! defined (yyoverflow) || YYERROR_VERBOSE
 
@@ -421,22 +432,22 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state. */
-#define YYFINAL  148
+#define YYFINAL  149
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1137
+#define YYLAST   1237
 
 /* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS  82
+#define YYNTOKENS  83
 /* YYNNTS -- Number of nonterminals. */
-#define YYNNTS  33
+#define YYNNTS  40
 /* YYNRULES -- Number of rules. */
-#define YYNRULES  212
+#define YYNRULES  222
 /* YYNRULES -- Number of states. */
-#define YYNSTATES  329
+#define YYNSTATES  341
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   312
+#define YYMAXUTOK   313
 
 #define YYTRANSLATE(YYX) 						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -447,16 +458,16 @@ static const unsigned char yytranslate[] =
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,    75,     2,     2,     2,    63,    49,     2,
-      69,    78,    61,    59,    41,    60,    67,    62,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    81,     2,
+       2,     2,     2,    76,     2,     2,     2,    63,    49,     2,
+      69,    79,    61,    59,    41,    60,    67,    62,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    82,     2,
       52,    43,    53,    44,    58,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,    68,     2,    77,    48,     2,     2,     2,     2,     2,
+       2,    68,     2,    78,    48,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,    79,    47,    80,    76,     2,     2,     2,
+       2,     2,     2,    80,    47,    81,    77,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -475,7 +486,7 @@ static const unsigned char yytranslate[] =
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    42,    45,    46,    50,
       51,    54,    55,    56,    57,    64,    65,    66,    70,    71,
-      72,    73,    74
+      72,    73,    74,    75
 };
 
 #if YYDEBUG
@@ -493,119 +504,124 @@ static const unsigned short yyprhs[] =
      244,   246,   248,   253,   261,   269,   277,   285,   287,   290,
      292,   294,   296,   298,   300,   304,   307,   311,   315,   320,
      326,   328,   331,   333,   336,   338,   339,   343,   345,   347,
-     349,   350,   352,   355,   357,   360,   362,   366,   369,   371,
-     374,   376,   379,   383,   386,   390,   392,   394,   396,   398,
-     400,   403,   407,   410,   414,   418,   422,   425,   428,   432,
-     437,   441,   445,   450,   454,   459,   463,   468,   471,   475,
-     478,   482,   485,   489,   491,   494,   497,   500,   503,   506,
-     509,   511,   514,   516,   522,   525,   528,   530,   532,   534,
-     536,   538,   542,   544,   549,   552,   555,   557,   559,   561,
-     564,   567,   572,   577,   580,   583,   586,   589,   592,   595,
-     598,   601,   604,   607,   610,   613,   616,   619,   622,   625,
-     628,   631,   634,   637,   640,   643,   646,   649,   652,   655,
-     658,   662,   666,   669,   671,   673,   675,   677,   679,   681,
-     683,   685,   687
+     349,   350,   351,   356,   357,   361,   363,   366,   368,   371,
+     373,   375,   379,   382,   384,   387,   389,   392,   396,   399,
+     403,   405,   407,   409,   411,   413,   416,   420,   423,   427,
+     431,   435,   438,   441,   445,   450,   454,   458,   463,   467,
+     472,   476,   481,   484,   488,   491,   495,   498,   502,   504,
+     507,   510,   513,   516,   519,   522,   524,   527,   529,   535,
+     538,   541,   543,   545,   547,   549,   551,   555,   557,   561,
+     563,   566,   569,   570,   573,   576,   579,   581,   583,   585,
+     588,   591,   596,   601,   604,   607,   610,   613,   616,   619,
+     622,   625,   628,   631,   634,   637,   640,   643,   646,   649,
+     652,   655,   658,   661,   664,   667,   670,   673,   676,   679,
+     682,   686,   690,   693,   695,   697,   699,   701,   703,   705,
+     707,   709,   711
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
 static const yysigned_char yyrhs[] =
 {
-      83,     0,    -1,    85,    -1,    84,    -1,   105,    -1,    86,
-      -1,    85,    41,    86,    -1,    61,    86,    -1,    49,    86,
-      -1,    60,    86,    -1,    59,    86,    -1,    75,    86,    -1,
-      76,    86,    -1,    65,    86,    -1,    64,    86,    -1,    86,
-      65,    -1,    86,    64,    -1,    18,    86,    -1,    86,    72,
-     113,    -1,    86,    72,   113,    10,    -1,    86,    72,    10,
-      -1,    86,    72,    95,    -1,    86,    71,    86,    -1,    86,
-      67,   113,    -1,    86,    67,   113,    10,    -1,    86,    67,
-      10,    -1,    86,    67,    95,    -1,    86,    70,    86,    -1,
-      86,    68,    85,    77,    -1,    -1,    86,    69,    87,    90,
-      78,    -1,    -1,     9,    69,    88,    90,    78,    -1,    79,
-      -1,    -1,    86,    -1,    90,    41,    86,    -1,    86,    69,
-     108,    78,    97,    -1,    80,    -1,    89,    90,    91,    -1,
-      89,   105,    91,    86,    -1,    69,   105,    78,    86,    -1,
-      69,    85,    78,    -1,    86,    58,    86,    -1,    86,    61,
-      86,    -1,    86,    62,    86,    -1,    86,    63,    86,    -1,
-      86,    59,    86,    -1,    86,    60,    86,    -1,    86,    57,
-      86,    -1,    86,    56,    86,    -1,    86,    51,    86,    -1,
-      86,    50,    86,    -1,    86,    55,    86,    -1,    86,    54,
-      86,    -1,    86,    52,    86,    -1,    86,    53,    86,    -1,
-      86,    49,    86,    -1,    86,    48,    86,    -1,    86,    47,
-      86,    -1,    86,    46,    86,    -1,    86,    45,    86,    -1,
-      86,    44,    86,    81,    86,    -1,    86,    43,    86,    -1,
-      86,    38,    86,    -1,     3,    -1,     7,    -1,    12,    -1,
-       4,    -1,     5,    -1,    94,    -1,    37,    -1,    18,    69,
-     105,    78,    -1,    25,    52,   105,    53,    69,    86,    78,
-      -1,    27,    52,   105,    53,    69,    86,    78,    -1,    26,
-      52,   105,    53,    69,    86,    78,    -1,    28,    52,   105,
-      53,    69,    86,    78,    -1,     6,    -1,    92,     6,    -1,
-      92,    -1,    39,    -1,    40,    -1,    73,    -1,    74,    -1,
-      93,    20,   113,    -1,   114,    29,    -1,    93,    20,   113,
-      -1,    11,    20,   113,    -1,    11,    20,    76,   113,    -1,
-      11,    20,   113,    20,   113,    -1,    95,    -1,    20,   114,
-      -1,   114,    -1,    58,     8,    -1,   111,    -1,    -1,    97,
-      96,    97,    -1,    98,    -1,   111,    -1,    99,    -1,    -1,
-      61,    -1,    61,   101,    -1,    49,    -1,    49,   101,    -1,
-     102,    -1,    69,   101,    78,    -1,   102,   103,    -1,   103,
-      -1,   102,   104,    -1,   104,    -1,    68,    77,    -1,    68,
-       3,    77,    -1,    69,    78,    -1,    69,   108,    78,    -1,
-     109,    -1,    11,    -1,    33,    -1,    31,    -1,    32,    -1,
-      31,    33,    -1,    31,    30,    33,    -1,    31,    30,    -1,
-      30,    31,    33,    -1,    19,    31,    33,    -1,    31,    19,
-      33,    -1,    31,    19,    -1,    31,    31,    -1,    31,    31,
-      33,    -1,    31,    31,    30,    33,    -1,    31,    31,    30,
-      -1,    30,    31,    31,    -1,    30,    31,    31,    33,    -1,
-      19,    31,    31,    -1,    19,    31,    31,    33,    -1,    31,
-      31,    19,    -1,    31,    31,    19,    33,    -1,    32,    33,
-      -1,    32,    30,    33,    -1,    32,    30,    -1,    19,    32,
-      33,    -1,    32,    19,    -1,    32,    19,    33,    -1,    36,
-      -1,    31,    36,    -1,    14,   113,    -1,    15,   113,    -1,
-      16,   113,    -1,    17,   113,    -1,    19,   107,    -1,    19,
-      -1,    30,   107,    -1,    30,    -1,    21,   113,    52,   105,
-      53,    -1,    99,   106,    -1,   106,    99,    -1,    11,    -1,
-      33,    -1,    31,    -1,    32,    -1,   105,    -1,   108,    41,
-     105,    -1,   106,    -1,   109,   100,   101,   100,    -1,    34,
-      35,    -1,    35,    34,    -1,   110,    -1,    34,    -1,    35,
-      -1,    13,    23,    -1,    13,    24,    -1,    13,    23,    68,
-      77,    -1,    13,    24,    68,    77,    -1,    13,    59,    -1,
-      13,    60,    -1,    13,    61,    -1,    13,    62,    -1,    13,
-      63,    -1,    13,    48,    -1,    13,    49,    -1,    13,    47,
-      -1,    13,    76,    -1,    13,    75,    -1,    13,    43,    -1,
-      13,    52,    -1,    13,    53,    -1,    13,    38,    -1,    13,
-      57,    -1,    13,    56,    -1,    13,    51,    -1,    13,    50,
-      -1,    13,    55,    -1,    13,    54,    -1,    13,    46,    -1,
-      13,    45,    -1,    13,    65,    -1,    13,    64,    -1,    13,
-      41,    -1,    13,    71,    -1,    13,    72,    -1,    13,    69,
-      78,    -1,    13,    68,    77,    -1,    13,   109,    -1,     8,
-      -1,    73,    -1,    11,    -1,    12,    -1,     9,    -1,   112,
-      -1,     8,    -1,    73,    -1,   112,    -1,     9,    -1
+      84,     0,    -1,    86,    -1,    85,    -1,   110,    -1,    87,
+      -1,    86,    41,    87,    -1,    61,    87,    -1,    49,    87,
+      -1,    60,    87,    -1,    59,    87,    -1,    76,    87,    -1,
+      77,    87,    -1,    65,    87,    -1,    64,    87,    -1,    87,
+      65,    -1,    87,    64,    -1,    18,    87,    -1,    87,    72,
+     121,    -1,    87,    72,   121,    10,    -1,    87,    72,    10,
+      -1,    87,    72,    96,    -1,    87,    71,    87,    -1,    87,
+      67,   121,    -1,    87,    67,   121,    10,    -1,    87,    67,
+      10,    -1,    87,    67,    96,    -1,    87,    70,    87,    -1,
+      87,    68,    86,    78,    -1,    -1,    87,    69,    88,    91,
+      79,    -1,    -1,     9,    69,    89,    91,    79,    -1,    80,
+      -1,    -1,    87,    -1,    91,    41,    87,    -1,    87,    69,
+     113,    79,    98,    -1,    81,    -1,    90,    91,    92,    -1,
+      90,   110,    92,    87,    -1,    69,   110,    79,    87,    -1,
+      69,    86,    79,    -1,    87,    58,    87,    -1,    87,    61,
+      87,    -1,    87,    62,    87,    -1,    87,    63,    87,    -1,
+      87,    59,    87,    -1,    87,    60,    87,    -1,    87,    57,
+      87,    -1,    87,    56,    87,    -1,    87,    51,    87,    -1,
+      87,    50,    87,    -1,    87,    55,    87,    -1,    87,    54,
+      87,    -1,    87,    52,    87,    -1,    87,    53,    87,    -1,
+      87,    49,    87,    -1,    87,    48,    87,    -1,    87,    47,
+      87,    -1,    87,    46,    87,    -1,    87,    45,    87,    -1,
+      87,    44,    87,    82,    87,    -1,    87,    43,    87,    -1,
+      87,    38,    87,    -1,     3,    -1,     7,    -1,    12,    -1,
+       4,    -1,     5,    -1,    95,    -1,    37,    -1,    18,    69,
+     110,    79,    -1,    25,    52,   110,    53,    69,    87,    79,
+      -1,    27,    52,   110,    53,    69,    87,    79,    -1,    26,
+      52,   110,    53,    69,    87,    79,    -1,    28,    52,   110,
+      53,    69,    87,    79,    -1,     6,    -1,    93,     6,    -1,
+      93,    -1,    39,    -1,    40,    -1,    73,    -1,    74,    -1,
+      94,    20,   121,    -1,   122,    29,    -1,    94,    20,   121,
+      -1,    11,    20,   121,    -1,    11,    20,    77,   121,    -1,
+      11,    20,   121,    20,   121,    -1,    96,    -1,    20,   122,
+      -1,   122,    -1,    58,     8,    -1,   119,    -1,    -1,    98,
+      97,    98,    -1,    99,    -1,   119,    -1,   100,    -1,    -1,
+      -1,   102,    61,   103,   101,    -1,    -1,    61,   104,   101,
+      -1,    49,    -1,    49,   102,    -1,   102,    -1,   105,   107,
+      -1,   105,    -1,   107,    -1,    69,   106,    79,    -1,   107,
+     108,    -1,   108,    -1,   107,   109,    -1,   109,    -1,    68,
+      78,    -1,    68,     3,    78,    -1,    69,    79,    -1,    69,
+     113,    79,    -1,   115,    -1,    11,    -1,    33,    -1,    31,
+      -1,    32,    -1,    31,    33,    -1,    31,    30,    33,    -1,
+      31,    30,    -1,    30,    31,    33,    -1,    19,    31,    33,
+      -1,    31,    19,    33,    -1,    31,    19,    -1,    31,    31,
+      -1,    31,    31,    33,    -1,    31,    31,    30,    33,    -1,
+      31,    31,    30,    -1,    30,    31,    31,    -1,    30,    31,
+      31,    33,    -1,    19,    31,    31,    -1,    19,    31,    31,
+      33,    -1,    31,    31,    19,    -1,    31,    31,    19,    33,
+      -1,    32,    33,    -1,    32,    30,    33,    -1,    32,    30,
+      -1,    19,    32,    33,    -1,    32,    19,    -1,    32,    19,
+      33,    -1,    36,    -1,    31,    36,    -1,    14,   121,    -1,
+      15,   121,    -1,    16,   121,    -1,    17,   121,    -1,    19,
+     112,    -1,    19,    -1,    30,   112,    -1,    30,    -1,    21,
+     121,    52,   110,    53,    -1,   100,   111,    -1,   111,   100,
+      -1,    11,    -1,    33,    -1,    31,    -1,    32,    -1,   114,
+      -1,   114,    41,    75,    -1,   110,    -1,   114,    41,   110,
+      -1,   111,    -1,   115,   106,    -1,   111,   117,    -1,    -1,
+     102,   117,    -1,    34,    35,    -1,    35,    34,    -1,   118,
+      -1,    34,    -1,    35,    -1,    13,    23,    -1,    13,    24,
+      -1,    13,    23,    68,    78,    -1,    13,    24,    68,    78,
+      -1,    13,    59,    -1,    13,    60,    -1,    13,    61,    -1,
+      13,    62,    -1,    13,    63,    -1,    13,    48,    -1,    13,
+      49,    -1,    13,    47,    -1,    13,    77,    -1,    13,    76,
+      -1,    13,    43,    -1,    13,    52,    -1,    13,    53,    -1,
+      13,    38,    -1,    13,    57,    -1,    13,    56,    -1,    13,
+      51,    -1,    13,    50,    -1,    13,    55,    -1,    13,    54,
+      -1,    13,    46,    -1,    13,    45,    -1,    13,    65,    -1,
+      13,    64,    -1,    13,    41,    -1,    13,    71,    -1,    13,
+      72,    -1,    13,    69,    79,    -1,    13,    68,    78,    -1,
+      13,   116,    -1,     8,    -1,    73,    -1,    11,    -1,    12,
+      -1,     9,    -1,   120,    -1,     8,    -1,    73,    -1,   120,
+      -1,     9,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short yyrline[] =
 {
-       0,   250,   250,   251,   254,   261,   262,   267,   271,   275,
-     279,   283,   287,   291,   295,   299,   303,   307,   311,   317,
-     324,   334,   342,   346,   352,   359,   369,   377,   381,   388,
-     385,   396,   395,   418,   422,   425,   429,   433,   445,   448,
-     455,   461,   467,   473,   477,   481,   485,   489,   493,   497,
-     501,   505,   509,   513,   517,   521,   525,   529,   533,   537,
-     541,   545,   549,   553,   557,   563,   570,   579,   590,   597,
-     604,   607,   613,   623,   629,   635,   641,   650,   667,   685,
-     719,   726,   735,   743,   749,   759,   774,   789,   804,   828,
-     837,   838,   866,   920,   926,   927,   930,   933,   934,   938,
-     939,   942,   944,   946,   948,   950,   953,   955,   960,   967,
-     969,   973,   975,   979,   981,   993,   997,   999,  1003,  1007,
-    1011,  1015,  1019,  1023,  1027,  1031,  1035,  1039,  1043,  1047,
-    1051,  1055,  1059,  1063,  1067,  1071,  1075,  1079,  1083,  1087,
-    1091,  1095,  1099,  1103,  1107,  1111,  1114,  1117,  1120,  1123,
-    1127,  1131,  1135,  1142,  1146,  1148,  1152,  1153,  1161,  1169,
-    1180,  1185,  1192,  1193,  1197,  1198,  1201,  1205,  1207,  1211,
-    1213,  1215,  1217,  1219,  1221,  1223,  1225,  1227,  1229,  1231,
-    1233,  1235,  1237,  1239,  1241,  1243,  1245,  1285,  1287,  1289,
-    1291,  1293,  1295,  1297,  1299,  1301,  1303,  1305,  1307,  1309,
-    1311,  1313,  1315,  1330,  1331,  1332,  1333,  1334,  1335,  1338,
-    1339,  1347,  1355
+       0,   263,   263,   264,   267,   274,   275,   280,   284,   288,
+     292,   296,   300,   304,   308,   312,   316,   320,   324,   330,
+     337,   347,   355,   359,   365,   372,   382,   390,   394,   401,
+     398,   409,   408,   431,   435,   438,   442,   446,   464,   467,
+     474,   480,   486,   492,   496,   500,   504,   508,   512,   516,
+     520,   524,   528,   532,   536,   540,   544,   548,   552,   556,
+     560,   564,   568,   572,   576,   582,   589,   598,   609,   616,
+     623,   626,   632,   642,   648,   654,   660,   669,   686,   704,
+     738,   745,   754,   762,   768,   778,   793,   815,   830,   854,
+     863,   864,   892,   946,   950,   951,   954,   957,   958,   962,
+     963,   968,   967,   971,   970,   973,   975,   979,   988,   990,
+     991,   994,   996,  1003,  1010,  1016,  1023,  1025,  1029,  1031,
+    1043,  1047,  1049,  1053,  1057,  1061,  1065,  1069,  1073,  1077,
+    1081,  1085,  1089,  1093,  1097,  1101,  1105,  1109,  1113,  1117,
+    1121,  1125,  1129,  1133,  1137,  1141,  1145,  1149,  1153,  1157,
+    1161,  1164,  1167,  1170,  1173,  1177,  1181,  1185,  1192,  1196,
+    1198,  1202,  1203,  1211,  1219,  1230,  1232,  1241,  1247,  1254,
+    1255,  1262,  1266,  1267,  1270,  1271,  1274,  1278,  1280,  1284,
+    1286,  1288,  1290,  1292,  1294,  1296,  1298,  1300,  1302,  1304,
+    1306,  1308,  1310,  1312,  1314,  1316,  1318,  1358,  1360,  1362,
+    1364,  1366,  1368,  1370,  1372,  1374,  1376,  1378,  1380,  1382,
+    1384,  1386,  1388,  1403,  1404,  1405,  1406,  1407,  1408,  1411,
+    1412,  1420,  1428
 };
 #endif
 
@@ -625,15 +641,18 @@ static const char *const yytname[] =
   "OROR", "ANDAND", "'|'", "'^'", "'&'", "NOTEQUAL", "EQUAL", "'<'", "'>'",
   "GEQ", "LEQ", "RSH", "LSH", "'@'", "'+'", "'-'", "'*'", "'/'", "'%'",
   "DECREMENT", "INCREMENT", "UNARY", "'.'", "'['", "'('", "DOT_STAR",
-  "ARROW_STAR", "ARROW", "BLOCKNAME", "FILENAME", "'!'", "'~'", "']'",
-  "')'", "'{'", "'}'", "':'", "$accept", "start", "type_exp", "exp1",
-  "exp", "@1", "@2", "lcurly", "arglist", "rcurly", "string_exp", "block",
-  "variable", "qualified_name", "space_identifier", "const_or_volatile",
-  "cv_with_space_id", "const_or_volatile_or_space_identifier_noopt",
-  "const_or_volatile_or_space_identifier", "abs_decl", "direct_abs_decl",
-  "array_mod", "func_mod", "type", "typebase", "typename",
-  "nonempty_typelist", "ptype", "const_and_volatile",
-  "const_or_volatile_noopt", "operator", "name", "name_not_typename", 0
+  "ARROW_STAR", "ARROW", "BLOCKNAME", "FILENAME", "DOTDOTDOT", "'!'",
+  "'~'", "']'", "')'", "'{'", "'}'", "':'", "$accept", "start", "type_exp",
+  "exp1", "exp", "@1", "@2", "lcurly", "arglist", "rcurly", "string_exp",
+  "block", "variable", "qualified_name", "space_identifier",
+  "const_or_volatile", "cv_with_space_id",
+  "const_or_volatile_or_space_identifier_noopt",
+  "const_or_volatile_or_space_identifier", "ptr_operator", "@3", "@4",
+  "ptr_operator_ts", "abs_decl", "direct_abs_decl", "array_mod",
+  "func_mod", "type", "typebase", "typename", "parameter_typelist",
+  "nonempty_typelist", "ptype", "conversion_type_id",
+  "conversion_declarator", "const_and_volatile", "const_or_volatile_noopt",
+  "operator", "name", "name_not_typename", 0
 };
 #endif
 
@@ -649,36 +668,37 @@ static const unsigned short yytoknum[] =
      295,    44,   296,    61,    63,   297,   298,   124,    94,    38,
      299,   300,    60,    62,   301,   302,   303,   304,    64,    43,
       45,    42,    47,    37,   305,   306,   307,    46,    91,    40,
-     308,   309,   310,   311,   312,    33,   126,    93,    41,   123,
-     125,    58
+     308,   309,   310,   311,   312,   313,    33,   126,    93,    41,
+     123,   125,    58
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const unsigned char yyr1[] =
 {
-       0,    82,    83,    83,    84,    85,    85,    86,    86,    86,
-      86,    86,    86,    86,    86,    86,    86,    86,    86,    86,
-      86,    86,    86,    86,    86,    86,    86,    86,    86,    87,
-      86,    88,    86,    89,    90,    90,    90,    86,    91,    86,
-      86,    86,    86,    86,    86,    86,    86,    86,    86,    86,
-      86,    86,    86,    86,    86,    86,    86,    86,    86,    86,
-      86,    86,    86,    86,    86,    86,    86,    86,    86,    86,
-      86,    86,    86,    86,    86,    86,    86,    92,    92,    86,
-      86,    86,    93,    93,    93,    94,    94,    95,    95,    95,
-      94,    94,    94,    96,    97,    97,    98,    99,    99,   100,
-     100,   101,   101,   101,   101,   101,   102,   102,   102,   102,
-     102,   103,   103,   104,   104,   105,   106,   106,   106,   106,
-     106,   106,   106,   106,   106,   106,   106,   106,   106,   106,
-     106,   106,   106,   106,   106,   106,   106,   106,   106,   106,
-     106,   106,   106,   106,   106,   106,   106,   106,   106,   106,
-     106,   106,   106,   106,   106,   106,   107,   107,   107,   107,
-     108,   108,   109,   109,   110,   110,   111,   111,   111,   112,
-     112,   112,   112,   112,   112,   112,   112,   112,   112,   112,
-     112,   112,   112,   112,   112,   112,   112,   112,   112,   112,
-     112,   112,   112,   112,   112,   112,   112,   112,   112,   112,
-     112,   112,   112,   113,   113,   113,   113,   113,   113,   114,
-     114,   114,   114
+       0,    83,    84,    84,    85,    86,    86,    87,    87,    87,
+      87,    87,    87,    87,    87,    87,    87,    87,    87,    87,
+      87,    87,    87,    87,    87,    87,    87,    87,    87,    88,
+      87,    89,    87,    90,    91,    91,    91,    87,    92,    87,
+      87,    87,    87,    87,    87,    87,    87,    87,    87,    87,
+      87,    87,    87,    87,    87,    87,    87,    87,    87,    87,
+      87,    87,    87,    87,    87,    87,    87,    87,    87,    87,
+      87,    87,    87,    87,    87,    87,    87,    93,    93,    87,
+      87,    87,    94,    94,    94,    95,    95,    96,    96,    96,
+      95,    95,    95,    97,    98,    98,    99,   100,   100,   101,
+     101,   103,   102,   104,   102,   102,   102,   105,   106,   106,
+     106,   107,   107,   107,   107,   107,   108,   108,   109,   109,
+     110,   111,   111,   111,   111,   111,   111,   111,   111,   111,
+     111,   111,   111,   111,   111,   111,   111,   111,   111,   111,
+     111,   111,   111,   111,   111,   111,   111,   111,   111,   111,
+     111,   111,   111,   111,   111,   111,   111,   111,   111,   111,
+     111,   112,   112,   112,   112,   113,   113,   114,   114,   115,
+     115,   116,   117,   117,   118,   118,   119,   119,   119,   120,
+     120,   120,   120,   120,   120,   120,   120,   120,   120,   120,
+     120,   120,   120,   120,   120,   120,   120,   120,   120,   120,
+     120,   120,   120,   120,   120,   120,   120,   120,   120,   120,
+     120,   120,   120,   121,   121,   121,   121,   121,   121,   122,
+     122,   122,   122
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -694,13 +714,14 @@ static const unsigned char yyr2[] =
        1,     1,     4,     7,     7,     7,     7,     1,     2,     1,
        1,     1,     1,     1,     3,     2,     3,     3,     4,     5,
        1,     2,     1,     2,     1,     0,     3,     1,     1,     1,
-       0,     1,     2,     1,     2,     1,     3,     2,     1,     2,
-       1,     2,     3,     2,     3,     1,     1,     1,     1,     1,
-       2,     3,     2,     3,     3,     3,     2,     2,     3,     4,
-       3,     3,     4,     3,     4,     3,     4,     2,     3,     2,
-       3,     2,     3,     1,     2,     2,     2,     2,     2,     2,
-       1,     2,     1,     5,     2,     2,     1,     1,     1,     1,
-       1,     3,     1,     4,     2,     2,     1,     1,     1,     2,
+       0,     0,     4,     0,     3,     1,     2,     1,     2,     1,
+       1,     3,     2,     1,     2,     1,     2,     3,     2,     3,
+       1,     1,     1,     1,     1,     2,     3,     2,     3,     3,
+       3,     2,     2,     3,     4,     3,     3,     4,     3,     4,
+       3,     4,     2,     3,     2,     3,     2,     3,     1,     2,
+       2,     2,     2,     2,     2,     1,     2,     1,     5,     2,
+       2,     1,     1,     1,     1,     1,     3,     1,     3,     1,
+       2,     2,     0,     2,     2,     2,     1,     1,     1,     2,
        2,     4,     4,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -713,337 +734,361 @@ static const unsigned char yyr2[] =
    means the default is an error.  */
 static const unsigned char yydefact[] =
 {
-      95,    65,    68,    69,    77,    66,   209,   212,   116,    67,
-      95,     0,     0,     0,     0,     0,   150,     0,     0,     0,
-       0,     0,     0,   152,   118,   119,   117,   167,   168,   143,
+      95,    65,    68,    69,    77,    66,   219,   222,   121,    67,
+      95,     0,     0,     0,     0,     0,   155,     0,     0,     0,
+       0,     0,     0,   157,   123,   124,   122,   177,   178,   148,
       71,    80,    81,     0,     0,     0,     0,     0,     0,    95,
-     210,    83,     0,     0,    33,     0,     3,     2,     5,    34,
-      79,     0,    70,    90,     0,    97,    95,     4,   162,   115,
-     166,    98,   211,    92,    31,     0,   116,   169,   170,   186,
-     197,   183,   194,   193,   180,   178,   179,   190,   189,   184,
-     185,   192,   191,   188,   187,   173,   174,   175,   176,   177,
-     196,   195,     0,     0,   198,   199,   182,   181,   202,   203,
-     207,   205,   206,   204,   208,   145,   146,   147,   148,     0,
-      95,    17,   156,   158,   159,   157,   149,   212,   210,    91,
-       0,    95,    95,    95,    95,   158,   159,   151,   126,   122,
-     127,   120,   144,   141,   139,   137,   164,   165,     8,    10,
-       9,     7,    14,    13,     0,     0,    11,    12,     1,     0,
+     220,    83,     0,     0,    33,     0,     3,     2,     5,    34,
+      79,     0,    70,    90,     0,    97,    95,     4,   169,   120,
+     176,    98,   221,    92,    31,     0,   121,   179,   180,   196,
+     207,   193,   204,   203,   190,   188,   189,   200,   199,   194,
+     195,   202,   201,   198,   197,   183,   184,   185,   186,   187,
+     206,   205,     0,     0,   208,   209,   192,   191,   172,   212,
+     213,   217,   215,   216,   214,   218,   150,   151,   152,   153,
+       0,    95,    17,   161,   163,   164,   162,   154,   222,   220,
+      91,     0,    95,    95,    95,    95,   163,   164,   156,   131,
+     127,   132,   125,   149,   146,   144,   142,   174,   175,     8,
+      10,     9,     7,    14,    13,     0,     0,    11,    12,     1,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    16,    15,     0,     0,    29,     0,     0,     0,
-      35,     0,     0,    78,     0,     0,    95,   154,   155,    99,
-       0,    85,    34,     0,    87,     0,     0,   201,   200,     0,
-     133,   124,   140,    95,     0,     0,     0,     0,   131,   123,
-     125,   121,   135,   130,   128,   142,   138,    42,     0,     6,
-      64,    63,     0,    61,    60,    59,    58,    57,    52,    51,
-      55,    56,    54,    53,    50,    49,    43,    47,    48,    44,
-      45,    46,    25,   205,    26,    23,     0,    34,   160,     0,
-      27,    22,    20,    21,    18,     0,    38,    39,     0,    86,
-      93,    96,    94,   103,   101,     0,    95,   100,   105,   108,
-     110,     0,    88,     0,   171,   172,    72,   134,     0,     0,
-       0,     0,     0,   132,   136,   129,    41,     0,    24,    28,
-       0,    95,    95,    19,    36,    40,   104,   102,     0,   111,
-     113,     0,     0,   163,    95,   107,   109,    32,    89,   153,
-       0,     0,     0,     0,    62,    30,   161,    37,   112,   106,
-     114,     0,     0,     0,     0,    73,    75,    74,    76
+       0,     0,     0,    16,    15,     0,     0,    29,     0,     0,
+       0,    35,     0,     0,    78,     0,     0,    95,   159,   160,
+     105,   103,     0,    95,   107,   109,   170,   110,   113,   115,
+      85,    34,     0,    87,     0,     0,   211,   210,   172,   171,
+       0,   138,   129,   145,    95,     0,     0,     0,     0,   136,
+     128,   130,   126,   140,   135,   133,   147,   143,    42,     0,
+       6,    64,    63,     0,    61,    60,    59,    58,    57,    52,
+      51,    55,    56,    54,    53,    50,    49,    43,    47,    48,
+      44,    45,    46,    25,   215,    26,    23,     0,    34,   167,
+       0,   165,    27,    22,    20,    21,    18,     0,    38,    39,
+       0,    86,    93,    96,    94,   106,   100,     0,   116,   118,
+       0,     0,   101,   108,    95,   112,   114,     0,    88,     0,
+     181,   182,   101,   173,    72,   139,     0,     0,     0,     0,
+       0,   137,   141,   134,    41,     0,    24,    28,     0,    95,
+      95,    19,    36,    40,    99,   104,   117,   111,   119,   100,
+      32,    89,   158,     0,     0,     0,     0,    62,    30,    37,
+     166,   168,   102,     0,     0,     0,     0,    73,    75,    74,
+      76
 };
 
 /* YYDEFGOTO[NTERM-NUM]. */
 static const short yydefgoto[] =
 {
-      -1,    45,    46,   144,    48,   247,   192,    49,   181,   257,
-      50,    51,    52,    53,   186,    54,    55,    56,   190,   267,
-     268,   269,   270,   248,    58,   116,   302,    59,    60,    61,
-      62,   105,    63
+      -1,    45,    46,   145,    48,   258,   201,    49,   182,   269,
+      50,    51,    52,    53,   187,    54,    55,    56,   315,   194,
+     319,   276,   195,   196,   197,   198,   199,   259,    58,   117,
+     281,   261,    59,    99,   209,    60,    61,    62,   106,    63
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -178
+#define YYPACT_NINF -187
 static const short yypact[] =
 {
-     373,  -178,  -178,  -178,  -178,  -178,  -178,   -43,    22,  -178,
-     593,   101,   101,   101,   101,   209,   148,    45,   101,     0,
-      31,    34,    55,   219,   226,    48,  -178,    39,   123,  -178,
-    -178,  -178,  -178,   450,   450,   450,   450,   450,   450,   373,
-     140,  -178,   450,   450,  -178,   161,  -178,   131,   855,   296,
-     158,   151,  -178,  -178,   118,  -178,   554,  -178,    37,   362,
-    -178,   124,  -178,   154,  -178,    24,  -178,   127,   155,  -178,
-    -178,  -178,  -178,  -178,  -178,  -178,  -178,  -178,  -178,  -178,
-    -178,  -178,  -178,  -178,  -178,  -178,  -178,  -178,  -178,  -178,
-    -178,  -178,   111,   141,  -178,  -178,  -178,  -178,   362,  -178,
-    -178,  -178,  -178,  -178,  -178,  -178,  -178,  -178,  -178,    22,
-     373,  1065,  -178,    63,   191,  -178,  -178,  -178,  -178,  -178,
-     173,   554,   554,   554,   554,   136,  -178,  -178,   193,   195,
-      54,  -178,  -178,   198,   200,  -178,  -178,  -178,  1065,  1065,
-    1065,  1065,  1065,  1065,   -10,   163,  1065,  1065,  -178,   450,
-     450,   450,   450,   450,   450,   450,   450,   450,   450,   450,
-     450,   450,   450,   450,   450,   450,   450,   450,   450,   450,
-     450,   450,  -178,  -178,    93,   450,   656,   450,   450,   120,
-     855,   -25,   159,  -178,   101,   234,    81,    37,  -178,  -178,
-     290,  -178,   450,   101,   224,   170,   177,  -178,  -178,   182,
-     222,  -178,  -178,   554,   210,   212,   213,   218,   242,  -178,
-    -178,  -178,   243,   244,  -178,  -178,  -178,  -178,   450,   855,
-     855,   855,   672,   911,   937,   962,   986,  1009,  1030,  1030,
-     637,   637,   637,   637,   433,   433,  1044,  1056,  1056,  1065,
-    1065,  1065,  -178,    22,  -178,   269,    16,   450,  -178,    -3,
-     130,   130,  -178,  -178,   270,   450,  -178,  -178,   450,   261,
-    -178,  -178,  -178,   -44,    52,    11,    30,    37,    58,  -178,
-    -178,    -2,  -178,   101,  -178,  -178,   527,  -178,   233,   220,
-     221,   225,   237,  -178,  -178,  -178,  1065,   450,  -178,  -178,
-       2,   554,    81,  -178,   855,  1065,  -178,  -178,   214,  -178,
-    -178,   215,     7,  -178,   175,  -178,  -178,  -178,  -178,  -178,
-     450,   450,   450,   450,   884,  -178,  -178,  -178,  -178,  -178,
-    -178,   711,   747,   783,   819,  -178,  -178,  -178,  -178
+     388,  -187,  -187,  -187,  -187,  -187,  -187,   -43,    32,  -187,
+     670,    56,    56,    56,    56,   197,    52,    16,    56,   -19,
+     -16,    10,    19,   100,    84,    88,  -187,    45,    47,  -187,
+    -187,  -187,  -187,   466,   466,   466,   466,   466,   466,   388,
+      72,  -187,   466,   466,  -187,    87,  -187,    65,   964,   310,
+     103,    92,  -187,  -187,    61,  -187,  1108,  -187,    24,   113,
+    -187,    64,  -187,   101,  -187,    31,  -187,    93,    97,  -187,
+    -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,
+    -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,
+    -187,  -187,    91,    94,  -187,  -187,  -187,  -187,    44,  -187,
+    -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,  -187,
+      32,   388,   449,  -187,    55,   138,  -187,  -187,  -187,  -187,
+    -187,   127,  1108,  1108,  1108,  1108,   135,  -187,  -187,   152,
+     155,   159,  -187,  -187,   162,   163,  -187,  -187,  -187,   449,
+     449,   449,   449,   449,   449,    -6,   114,   449,   449,  -187,
+     466,   466,   466,   466,   466,   466,   466,   466,   466,   466,
+     466,   466,   466,   466,   466,   466,   466,   466,   466,   466,
+     466,   466,   466,  -187,  -187,    37,   466,   760,   466,   466,
+      86,   964,    -9,   117,  -187,    56,   191,    20,    24,  -187,
+     146,  -187,    13,   611,   150,   115,  -187,   122,  -187,  -187,
+    -187,   466,    56,   192,   140,   141,  -187,  -187,    67,  -187,
+     134,   187,  -187,  -187,  1108,   168,   173,   180,   182,   205,
+    -187,  -187,  -187,   206,   207,  -187,  -187,  -187,  -187,   466,
+     964,   964,   964,   776,  1020,  1046,  1097,  1121,  1144,  1165,
+    1165,   606,   606,   606,   606,   234,   234,   293,   371,   371,
+     449,   449,   449,  -187,    32,  -187,   231,    12,   466,  -187,
+     165,   201,   160,   160,  -187,  -187,   235,   466,  -187,  -187,
+     466,   227,  -187,  -187,  -187,   150,    24,   171,  -187,  -187,
+     172,   174,  -187,   122,   571,  -187,  -187,    -4,  -187,    56,
+    -187,  -187,  -187,  -187,   544,  -187,   210,   181,   185,   190,
+     195,  -187,  -187,  -187,   449,   466,  -187,  -187,    -3,    20,
+     734,  -187,   964,   449,  -187,  -187,  -187,  -187,  -187,    24,
+    -187,  -187,  -187,   466,   466,   466,   466,   993,  -187,  -187,
+    -187,  -187,  -187,   816,   853,   890,   927,  -187,  -187,  -187,
+    -187
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const short yypgoto[] =
 {
-    -178,  -178,  -178,    10,   -15,  -178,  -178,  -178,  -177,   105,
-    -178,  -178,  -178,   -97,  -178,  -175,  -178,   -29,    51,  -174,
-    -178,    57,    66,     1,   263,   297,   162,   327,  -178,  -173,
-      -9,    -6,   323
+    -187,  -187,  -187,    11,   -15,  -187,  -187,  -187,  -184,    77,
+    -187,  -187,  -187,  -119,  -187,  -186,  -187,   -28,   -54,   -32,
+    -187,  -187,  -187,    74,    73,  -183,  -182,     2,    21,   246,
+      95,  -187,  -187,  -187,    68,  -187,  -175,    -8,    -5,   258
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -101
+#define YYTABLE_NINF -96
 static const short yytable[] =
 {
-     111,    57,   104,   104,   104,   104,   106,   107,   108,   104,
-      47,   261,   120,   262,   298,   271,   255,   264,   138,   139,
-     140,   141,   142,   143,   265,   266,    64,   146,   147,   188,
-     189,   149,    99,   100,   180,   101,   102,    10,   291,   255,
-     145,    66,    65,   255,    11,    12,    13,    14,   291,    16,
-     182,    18,   121,     6,   117,   256,   104,   149,    10,   194,
-      23,    24,    25,    26,    27,    28,    29,   133,   217,   189,
-     290,    27,    28,   212,   136,   292,   307,   244,   134,   263,
-     315,   135,   253,   122,   213,   320,   123,   214,   299,   296,
-     297,   264,   301,   289,   200,   -95,   201,   103,   265,   266,
-     193,    99,   100,   242,   243,   102,    10,   124,   300,    99,
-     100,   199,   101,   102,    10,    27,    28,   317,   118,   262,
-     265,   266,   204,   205,   206,   207,   265,   304,    99,   100,
-     252,   243,   102,    10,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   137,   188,   112,
-     -82,   148,   250,   251,   183,   104,   103,   208,   245,   209,
-     104,   184,   149,   254,   103,   104,   185,   180,   259,   113,
-     114,   115,   -94,   191,   104,   246,    66,   272,   197,    11,
-      12,    13,    14,   103,    16,   195,    18,   174,   175,   176,
-     177,   178,   179,   286,   278,    23,    24,    25,    26,    27,
-      28,    29,     1,     2,     3,     4,     5,     6,     7,   198,
-     109,     9,    10,   196,   202,   203,   210,    15,   211,    17,
-     112,   215,   180,   216,    19,    20,    21,    22,   189,   256,
-     294,   218,   260,   295,   273,   128,    30,   274,    31,    32,
-     125,   126,   115,   300,   275,   277,   129,   130,    33,   131,
-     276,   286,   132,   279,   104,   280,   281,   308,    34,    35,
-      36,   282,   314,    37,    38,   283,   284,   285,   110,   288,
-     293,   -84,    40,    41,    42,    43,   309,   258,    44,   310,
-     311,   318,   316,   319,   312,   321,   322,   323,   324,     1,
-       2,     3,     4,     5,     6,     7,   313,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,   303,   187,
-     127,    19,    20,    21,    22,   305,    23,    24,    25,    26,
-      27,    28,    29,    30,   306,    31,    32,    98,   249,   263,
-     119,     0,     0,     0,     0,    33,     0,     0,     0,     0,
-       0,   264,     0,     0,   -95,    34,    35,    36,   265,   266,
-      37,    38,     0,     0,     0,    39,     0,     0,     0,    40,
-      41,    42,    43,     0,     0,    44,     1,     2,     3,     4,
-       5,     6,     7,     0,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,     0,    27,    28,    19,    20,
-      21,    22,     0,    23,    24,    25,    26,    27,    28,    29,
-      30,  -100,    31,    32,     0,     0,     0,     0,     0,     0,
-     -95,     0,    33,  -100,     0,     0,     0,     0,     0,     0,
-    -100,  -100,    34,    35,    36,     0,     0,    37,    38,     0,
-       0,     0,    39,     0,     0,     0,    40,    41,    42,    43,
-       0,     0,    44,     1,     2,     3,     4,     5,     6,     7,
-       0,   109,     9,    10,     0,     0,     0,     0,    15,     0,
-      17,     0,     0,     0,     0,    19,    20,    21,    22,     0,
-       0,     0,     0,     0,     0,     0,     0,    30,     0,    31,
-      32,   166,   167,   168,   169,   170,   171,   172,   173,    33,
-     174,   175,   176,   177,   178,   179,     0,     0,     0,    34,
+     112,   273,    57,   105,   105,   105,   105,   107,   108,   109,
+     105,    47,   274,   121,   285,   286,   277,   287,   139,   140,
+     141,   142,   143,   144,     6,   118,    64,   147,   148,    10,
+     189,    98,   267,   122,   181,   150,   123,   267,   267,   100,
+     101,   146,   102,   103,    10,   100,   101,   253,   254,   103,
+      10,   183,    65,   150,    27,    28,   255,   105,    27,    28,
+     203,   265,   124,   113,   100,   101,   208,   102,   103,    10,
+     189,   125,   268,   228,   308,   320,   328,   188,    27,    28,
+     137,   138,   -95,   114,   115,   116,   211,   149,   212,   119,
+     307,   278,   -82,   190,   100,   101,   264,   254,   103,    10,
+     285,   286,   -95,   129,   104,   191,   150,   134,   202,   184,
+     104,   113,   185,   210,   130,   131,   190,   132,   135,   186,
+     133,   136,   -94,   329,   215,   216,   217,   218,   292,   104,
+     200,   126,   127,   116,   274,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   275,   104,
+     189,   204,   190,   262,   263,   205,   219,   105,   220,   206,
+     256,   213,   105,   207,   191,   266,   208,   105,   223,   214,
+     271,   192,   193,   192,   193,   221,   181,   257,   222,   224,
+     192,   284,   225,   229,   105,   226,   227,   288,   268,   272,
+       1,     2,     3,     4,     5,     6,     7,   191,   110,     9,
+      10,   282,   289,   294,   304,    15,   296,    17,   290,   291,
+     295,   297,    19,    20,    21,    22,   298,   175,   176,   177,
+     178,   179,   180,   299,    30,   300,    31,    32,   301,   302,
+     303,   306,   310,   181,   309,   311,    33,   -84,   314,   316,
+     323,   317,   312,   318,   324,   313,    34,    35,    36,   325,
+     270,    37,    38,   322,   326,   332,   111,   280,   283,   128,
+      40,    41,   260,    42,    43,   120,   293,    44,     0,   304,
+       0,   105,     0,     0,   321,     0,     0,     0,     0,     0,
+     327,   314,   167,   168,   169,   170,   171,   172,   173,   174,
+       0,   175,   176,   177,   178,   179,   180,     0,   333,   334,
+     335,   336,   331,     1,     2,     3,     4,     5,     6,     7,
+       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,     0,     0,     0,    19,    20,    21,    22,     0,
+      23,    24,    25,    26,    27,    28,    29,    30,     0,    31,
+      32,     0,   168,   169,   170,   171,   172,   173,   174,    33,
+     175,   176,   177,   178,   179,   180,     0,     0,   -95,    34,
       35,    36,     0,     0,    37,    38,     0,     0,     0,    39,
-       0,     0,     0,    40,    41,    42,    43,     0,     0,    44,
-       1,     2,     3,     4,     5,     6,     7,     0,   109,     9,
-      10,     0,     0,     0,     0,    15,     0,    17,     0,     0,
-       0,     0,    19,    20,    21,    22,     0,     0,     0,     0,
-       0,     0,     0,     0,    30,    66,    31,    32,    11,    12,
+       0,     0,     0,    40,    41,     0,    42,    43,     0,     0,
+      44,     1,     2,     3,     4,     5,     6,     7,     0,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+       0,     0,     0,    19,    20,    21,    22,     0,    23,    24,
+      25,    26,    27,    28,    29,    30,     0,    31,    32,     0,
+       0,     0,   170,   171,   172,   173,   174,    33,   175,   176,
+     177,   178,   179,   180,     0,     0,     0,    34,    35,    36,
+       0,     0,    37,    38,     0,     0,     0,    39,     0,     0,
+       0,    40,    41,     0,    42,    43,     0,     0,    44,     1,
+       2,     3,     4,     5,     6,     7,     0,   110,     9,    10,
+       0,     0,     0,     0,    15,     0,    17,     0,     0,     0,
+       0,    19,    20,    21,    22,     0,     0,     0,     0,     0,
+       0,     0,     0,    30,     0,    31,    32,     0,     0,     0,
+       0,     0,     0,   173,   174,    33,   175,   176,   177,   178,
+     179,   180,     0,     0,     0,    34,    35,    36,     0,     0,
+      37,    38,     0,     0,     0,    39,     0,     0,     0,    40,
+      41,     0,    42,    43,     0,     0,    44,     1,     2,     3,
+       4,     5,     6,     7,     0,   110,     9,    10,     0,     0,
+       0,     0,    15,     0,    17,     0,     0,     0,     0,    19,
+      20,    21,    22,     0,     0,     0,     0,     0,     0,     0,
+       0,    30,    66,    31,    32,    11,    12,    13,    14,     0,
+      16,     0,    18,     0,     0,     0,     0,     0,     0,     0,
+       0,    23,    24,    25,    26,    27,    28,    29,    37,    38,
+       0,     0,     0,    39,     0,     0,     0,    40,    41,     0,
+      42,    43,    66,     0,    44,    11,    12,    13,    14,     0,
+      16,     0,    18,     0,     0,     0,     0,     0,     0,     0,
+       0,    23,    24,    25,    26,    27,    28,    29,     0,     0,
+     279,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     190,     0,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   191,   175,   176,   177,   178,   179,   180,   192,
+     193,    66,     0,     0,    11,    12,    13,    14,     0,    16,
+     279,    18,     0,    67,    68,     0,     0,     0,     0,     0,
+      23,    24,    25,    26,    27,    28,    29,     0,    69,     0,
+       0,    70,     0,    71,     0,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,     0,    85,
+      86,    87,    88,    89,    90,    91,     0,     0,    92,    93,
+       0,    94,    95,     0,     0,    66,    96,    97,    11,    12,
       13,    14,     0,    16,     0,    18,     0,     0,     0,     0,
        0,     0,     0,     0,    23,    24,    25,    26,    27,    28,
-      29,    37,    38,     0,     0,     0,    39,     0,     0,     0,
-      40,    41,    42,    43,    66,     0,    44,    11,    12,    13,
-      14,     0,    16,     0,    18,     0,    67,    68,     0,     0,
-       0,     0,     0,    23,    24,    25,    26,    27,    28,    29,
-       0,    69,     0,     0,    70,     0,    71,     0,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,     0,    85,    86,    87,    88,    89,    90,    91,     0,
-       0,    92,    93,     0,    94,    95,     0,    66,    96,    97,
-      11,    12,    13,    14,     0,    16,     0,    18,     0,     0,
-       0,     0,     0,     0,     0,     0,    23,    24,    25,    26,
-      27,    28,    29,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,     0,   174,   175,   176,   177,   178,   179,
-     150,     0,     0,     0,   -95,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,     0,   174,
-     175,   176,   177,   178,   179,     0,     0,     0,     0,   150,
-       0,     0,     0,   287,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,     0,   174,   175,
-     176,   177,   178,   179,     0,   150,     0,     0,     0,   325,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,     0,   174,   175,   176,   177,   178,   179,
-       0,   150,     0,     0,     0,   326,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,     0,
-     174,   175,   176,   177,   178,   179,     0,   150,     0,     0,
-       0,   327,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,     0,   174,   175,   176,   177,
-     178,   179,     0,   150,     0,     0,     0,   328,   151,   152,
+      29,    66,     0,     0,    11,    12,    13,    14,     0,    16,
+       0,    18,     0,     0,     0,     0,     0,     0,     0,     0,
+      23,    24,    25,    26,    27,    28,    29,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   330,
+       0,     0,     0,     0,   151,     0,     0,     0,   -95,   152,
      153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,     0,   174,   175,   176,   177,   178,   179,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-       0,   174,   175,   176,   177,   178,   179,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,     0,   174,   175,
-     176,   177,   178,   179,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,     0,   174,   175,   176,   177,   178,   179,
+     173,   174,     0,   175,   176,   177,   178,   179,   180,     0,
+       0,     0,     0,     0,   151,     0,     0,     0,   305,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,     0,   175,   176,   177,   178,   179,   180,     0,
+       0,   151,     0,     0,     0,   337,   152,   153,   154,   155,
      156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,     0,   174,
-     175,   176,   177,   178,   179,   157,   158,   159,   160,   161,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,     0,
+     175,   176,   177,   178,   179,   180,     0,     0,   151,     0,
+       0,     0,   338,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,     0,   175,   176,   177,
+     178,   179,   180,     0,     0,   151,     0,     0,     0,   339,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
      162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,     0,   174,   175,   176,   177,   178,   179,   158,
+     172,   173,   174,     0,   175,   176,   177,   178,   179,   180,
+       0,     0,   151,     0,     0,     0,   340,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+       0,   175,   176,   177,   178,   179,   180,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,     0,
+     175,   176,   177,   178,   179,   180,   155,   156,   157,   158,
      159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,     0,   174,   175,   176,   177,
-     178,   179,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,     0,   174,   175,   176,
-     177,   178,   179,   167,   168,   169,   170,   171,   172,   173,
-       0,   174,   175,   176,   177,   178,   179,   169,   170,   171,
-     172,   173,     0,   174,   175,   176,   177,   178,   179,   172,
-     173,     0,   174,   175,   176,   177,   178,   179
+     169,   170,   171,   172,   173,   174,     0,   175,   176,   177,
+     178,   179,   180,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,     0,   175,   176,   177,   178,   179,   180,    66,
+       0,     0,    11,    12,    13,    14,     0,    16,     0,    18,
+       0,     0,     0,     0,     0,     0,     0,     0,    23,    24,
+      25,    26,    27,    28,    29,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,     0,   175,   176,   177,   178,   179,   180,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,     0,   175,   176,
+     177,   178,   179,   180,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+       0,   175,   176,   177,   178,   179,   180,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,     0,   175,   176,   177,   178,   179,   180
 };
 
 static const short yycheck[] =
 {
-      15,     0,    11,    12,    13,    14,    12,    13,    14,    18,
-       0,   186,    18,   186,     3,   192,    41,    61,    33,    34,
-      35,    36,    37,    38,    68,    69,    69,    42,    43,    58,
-      59,    41,     8,     9,    49,    11,    12,    13,    41,    41,
-      39,    11,    20,    41,    14,    15,    16,    17,    41,    19,
-      49,    21,    52,     8,     9,    80,    65,    41,    13,    65,
-      30,    31,    32,    33,    34,    35,    36,    19,    78,    98,
-     247,    34,    35,    19,    35,    78,    78,   174,    30,    49,
-      78,    33,   179,    52,    30,    78,    52,    33,    77,   263,
-     264,    61,   266,    77,    31,    58,    33,    73,    68,    69,
-      76,     8,     9,    10,    11,    12,    13,    52,    78,     8,
-       9,   110,    11,    12,    13,    34,    35,   292,    73,   292,
-      68,    69,   121,   122,   123,   124,    68,    69,     8,     9,
-      10,    11,    12,    13,   149,   150,   151,   152,   153,   154,
+      15,   187,     0,    11,    12,    13,    14,    12,    13,    14,
+      18,     0,   187,    18,   197,   197,     3,   201,    33,    34,
+      35,    36,    37,    38,     8,     9,    69,    42,    43,    13,
+      58,    10,    41,    52,    49,    41,    52,    41,    41,     8,
+       9,    39,    11,    12,    13,     8,     9,    10,    11,    12,
+      13,    49,    20,    41,    34,    35,   175,    65,    34,    35,
+      65,   180,    52,    11,     8,     9,    98,    11,    12,    13,
+      98,    52,    81,    79,   258,    79,    79,    56,    34,    35,
+      35,    34,    58,    31,    32,    33,    31,     0,    33,    73,
+      78,    78,    20,    49,     8,     9,    10,    11,    12,    13,
+     283,   283,    58,    19,    73,    61,    41,    19,    77,     6,
+      73,    11,    20,   111,    30,    31,    49,    33,    30,    58,
+      36,    33,    58,   309,   122,   123,   124,   125,    61,    73,
+      29,    31,    32,    33,   309,   150,   151,   152,   153,   154,
      155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,    34,   187,    11,
-      20,     0,   177,   178,     6,   174,    73,    31,   174,    33,
-     179,    20,    41,   179,    73,   184,    58,   192,   184,    31,
-      32,    33,    58,    29,   193,   175,    11,   193,    77,    14,
-      15,    16,    17,    73,    19,    68,    21,    67,    68,    69,
-      70,    71,    72,   218,   203,    30,    31,    32,    33,    34,
-      35,    36,     3,     4,     5,     6,     7,     8,     9,    78,
-      11,    12,    13,    68,    33,    52,    33,    18,    33,    20,
-      11,    33,   247,    33,    25,    26,    27,    28,   267,    80,
-     255,    78,     8,   258,    20,    19,    37,    77,    39,    40,
-      31,    32,    33,    78,    77,    33,    30,    31,    49,    33,
-      78,   276,    36,    53,   273,    53,    53,   273,    59,    60,
-      61,    53,   287,    64,    65,    33,    33,    33,    69,    10,
-      10,    20,    73,    74,    75,    76,    53,   182,    79,    69,
-      69,    77,   291,    78,    69,   310,   311,   312,   313,     3,
-       4,     5,     6,     7,     8,     9,    69,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,   267,    56,
-      23,    25,    26,    27,    28,   268,    30,    31,    32,    33,
-      34,    35,    36,    37,   268,    39,    40,    10,   176,    49,
-      17,    -1,    -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,
-      -1,    61,    -1,    -1,    58,    59,    60,    61,    68,    69,
-      64,    65,    -1,    -1,    -1,    69,    -1,    -1,    -1,    73,
-      74,    75,    76,    -1,    -1,    79,     3,     4,     5,     6,
-       7,     8,     9,    -1,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    -1,    34,    35,    25,    26,
-      27,    28,    -1,    30,    31,    32,    33,    34,    35,    36,
-      37,    49,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,
-      58,    -1,    49,    61,    -1,    -1,    -1,    -1,    -1,    -1,
-      68,    69,    59,    60,    61,    -1,    -1,    64,    65,    -1,
-      -1,    -1,    69,    -1,    -1,    -1,    73,    74,    75,    76,
-      -1,    -1,    79,     3,     4,     5,     6,     7,     8,     9,
-      -1,    11,    12,    13,    -1,    -1,    -1,    -1,    18,    -1,
-      20,    -1,    -1,    -1,    -1,    25,    26,    27,    28,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,    -1,    39,
-      40,    58,    59,    60,    61,    62,    63,    64,    65,    49,
-      67,    68,    69,    70,    71,    72,    -1,    -1,    -1,    59,
+     165,   166,   167,   168,   169,   170,   171,   172,   190,    73,
+     188,    68,    49,   178,   179,    68,    31,   175,    33,    78,
+     175,    33,   180,    79,    61,   180,   208,   185,    19,    52,
+     185,    68,    69,    68,    69,    33,   201,   176,    33,    30,
+      68,    69,    33,    79,   202,    33,    33,   202,    81,     8,
+       3,     4,     5,     6,     7,     8,     9,    61,    11,    12,
+      13,    61,    20,    79,   229,    18,   214,    20,    78,    78,
+      33,    53,    25,    26,    27,    28,    53,    67,    68,    69,
+      70,    71,    72,    53,    37,    53,    39,    40,    33,    33,
+      33,    10,    41,   258,    79,    10,    49,    20,   276,    78,
+      69,    79,   267,    79,    69,   270,    59,    60,    61,    69,
+     183,    64,    65,    53,    69,   319,    69,   193,   195,    23,
+      73,    74,   177,    76,    77,    17,   208,    80,    -1,   294,
+      -1,   289,    -1,    -1,   289,    -1,    -1,    -1,    -1,    -1,
+     305,   319,    58,    59,    60,    61,    62,    63,    64,    65,
+      -1,    67,    68,    69,    70,    71,    72,    -1,   323,   324,
+     325,   326,   310,     3,     4,     5,     6,     7,     8,     9,
+      -1,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    -1,    -1,    -1,    25,    26,    27,    28,    -1,
+      30,    31,    32,    33,    34,    35,    36,    37,    -1,    39,
+      40,    -1,    59,    60,    61,    62,    63,    64,    65,    49,
+      67,    68,    69,    70,    71,    72,    -1,    -1,    58,    59,
       60,    61,    -1,    -1,    64,    65,    -1,    -1,    -1,    69,
-      -1,    -1,    -1,    73,    74,    75,    76,    -1,    -1,    79,
-       3,     4,     5,     6,     7,     8,     9,    -1,    11,    12,
-      13,    -1,    -1,    -1,    -1,    18,    -1,    20,    -1,    -1,
-      -1,    -1,    25,    26,    27,    28,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    37,    11,    39,    40,    14,    15,
+      -1,    -1,    -1,    73,    74,    -1,    76,    77,    -1,    -1,
+      80,     3,     4,     5,     6,     7,     8,     9,    -1,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      -1,    -1,    -1,    25,    26,    27,    28,    -1,    30,    31,
+      32,    33,    34,    35,    36,    37,    -1,    39,    40,    -1,
+      -1,    -1,    61,    62,    63,    64,    65,    49,    67,    68,
+      69,    70,    71,    72,    -1,    -1,    -1,    59,    60,    61,
+      -1,    -1,    64,    65,    -1,    -1,    -1,    69,    -1,    -1,
+      -1,    73,    74,    -1,    76,    77,    -1,    -1,    80,     3,
+       4,     5,     6,     7,     8,     9,    -1,    11,    12,    13,
+      -1,    -1,    -1,    -1,    18,    -1,    20,    -1,    -1,    -1,
+      -1,    25,    26,    27,    28,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    37,    -1,    39,    40,    -1,    -1,    -1,
+      -1,    -1,    -1,    64,    65,    49,    67,    68,    69,    70,
+      71,    72,    -1,    -1,    -1,    59,    60,    61,    -1,    -1,
+      64,    65,    -1,    -1,    -1,    69,    -1,    -1,    -1,    73,
+      74,    -1,    76,    77,    -1,    -1,    80,     3,     4,     5,
+       6,     7,     8,     9,    -1,    11,    12,    13,    -1,    -1,
+      -1,    -1,    18,    -1,    20,    -1,    -1,    -1,    -1,    25,
+      26,    27,    28,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    37,    11,    39,    40,    14,    15,    16,    17,    -1,
+      19,    -1,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    30,    31,    32,    33,    34,    35,    36,    64,    65,
+      -1,    -1,    -1,    69,    -1,    -1,    -1,    73,    74,    -1,
+      76,    77,    11,    -1,    80,    14,    15,    16,    17,    -1,
+      19,    -1,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
+      79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      49,    -1,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    61,    67,    68,    69,    70,    71,    72,    68,
+      69,    11,    -1,    -1,    14,    15,    16,    17,    -1,    19,
+      79,    21,    -1,    23,    24,    -1,    -1,    -1,    -1,    -1,
+      30,    31,    32,    33,    34,    35,    36,    -1,    38,    -1,
+      -1,    41,    -1,    43,    -1,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
+      60,    61,    62,    63,    64,    65,    -1,    -1,    68,    69,
+      -1,    71,    72,    -1,    -1,    11,    76,    77,    14,    15,
       16,    17,    -1,    19,    -1,    21,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
-      36,    64,    65,    -1,    -1,    -1,    69,    -1,    -1,    -1,
-      73,    74,    75,    76,    11,    -1,    79,    14,    15,    16,
-      17,    -1,    19,    -1,    21,    -1,    23,    24,    -1,    -1,
-      -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
-      -1,    38,    -1,    -1,    41,    -1,    43,    -1,    45,    46,
+      36,    11,    -1,    -1,    14,    15,    16,    17,    -1,    19,
+      -1,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      30,    31,    32,    33,    34,    35,    36,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    75,
+      -1,    -1,    -1,    -1,    38,    -1,    -1,    -1,    58,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    -1,    67,    68,    69,    70,    71,    72,    -1,
+      -1,    -1,    -1,    -1,    38,    -1,    -1,    -1,    82,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    -1,    67,    68,    69,    70,    71,    72,    -1,
+      -1,    38,    -1,    -1,    -1,    79,    43,    44,    45,    46,
       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    -1,    59,    60,    61,    62,    63,    64,    65,    -1,
-      -1,    68,    69,    -1,    71,    72,    -1,    11,    75,    76,
-      14,    15,    16,    17,    -1,    19,    -1,    21,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
-      34,    35,    36,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    -1,    67,    68,    69,    70,    71,    72,
-      38,    -1,    -1,    -1,    58,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    -1,    67,
-      68,    69,    70,    71,    72,    -1,    -1,    -1,    -1,    38,
-      -1,    -1,    -1,    81,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    -1,    67,    68,
-      69,    70,    71,    72,    -1,    38,    -1,    -1,    -1,    78,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    -1,
+      67,    68,    69,    70,    71,    72,    -1,    -1,    38,    -1,
+      -1,    -1,    79,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    -1,    67,    68,    69,
+      70,    71,    72,    -1,    -1,    38,    -1,    -1,    -1,    79,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
       63,    64,    65,    -1,    67,    68,    69,    70,    71,    72,
-      -1,    38,    -1,    -1,    -1,    78,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    -1,
-      67,    68,    69,    70,    71,    72,    -1,    38,    -1,    -1,
-      -1,    78,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    -1,    67,    68,    69,    70,
-      71,    72,    -1,    38,    -1,    -1,    -1,    78,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    -1,    67,    68,    69,    70,    71,    72,    44,    45,
+      -1,    -1,    38,    -1,    -1,    -1,    79,    43,    44,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      -1,    67,    68,    69,    70,    71,    72,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    -1,    67,    68,
-      69,    70,    71,    72,    47,    48,    49,    50,    51,    52,
+      -1,    67,    68,    69,    70,    71,    72,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    -1,
+      67,    68,    69,    70,    71,    72,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    -1,    67,    68,    69,
+      70,    71,    72,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    -1,    67,    68,    69,    70,    71,    72,    11,
+      -1,    -1,    14,    15,    16,    17,    -1,    19,    -1,    21,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    30,    31,
+      32,    33,    34,    35,    36,    48,    49,    50,    51,    52,
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
       63,    64,    65,    -1,    67,    68,    69,    70,    71,    72,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    -1,    67,
-      68,    69,    70,    71,    72,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    -1,    67,    68,    69,    70,    71,    72,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    -1,    67,    68,    69,    70,
-      71,    72,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    -1,    67,    68,    69,
-      70,    71,    72,    59,    60,    61,    62,    63,    64,    65,
-      -1,    67,    68,    69,    70,    71,    72,    61,    62,    63,
-      64,    65,    -1,    67,    68,    69,    70,    71,    72,    64,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    -1,    67,    68,
+      69,    70,    71,    72,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      -1,    67,    68,    69,    70,    71,    72,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    -1,    67,    68,    69,    70,    71,    72
 };
 
@@ -1055,35 +1100,37 @@ static const unsigned char yystos[] =
       13,    14,    15,    16,    17,    18,    19,    20,    21,    25,
       26,    27,    28,    30,    31,    32,    33,    34,    35,    36,
       37,    39,    40,    49,    59,    60,    61,    64,    65,    69,
-      73,    74,    75,    76,    79,    83,    84,    85,    86,    89,
-      92,    93,    94,    95,    97,    98,    99,   105,   106,   109,
-     110,   111,   112,   114,    69,    20,    11,    23,    24,    38,
+      73,    74,    76,    77,    80,    84,    85,    86,    87,    90,
+      93,    94,    95,    96,    98,    99,   100,   110,   111,   115,
+     118,   119,   120,   122,    69,    20,    11,    23,    24,    38,
       41,    43,    45,    46,    47,    48,    49,    50,    51,    52,
       53,    54,    55,    56,    57,    59,    60,    61,    62,    63,
-      64,    65,    68,    69,    71,    72,    75,    76,   109,     8,
-       9,    11,    12,    73,   112,   113,   113,   113,   113,    11,
-      69,    86,    11,    31,    32,    33,   107,     9,    73,   114,
-     113,    52,    52,    52,    52,    31,    32,   107,    19,    30,
-      31,    33,    36,    19,    30,    33,    35,    34,    86,    86,
-      86,    86,    86,    86,    85,   105,    86,    86,     0,    41,
-      38,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    67,    68,    69,    70,    71,    72,
-      86,    90,   105,     6,    20,    58,    96,   106,    99,    99,
-     100,    29,    88,    76,   113,    68,    68,    77,    78,   105,
-      31,    33,    33,    52,   105,   105,   105,   105,    31,    33,
-      33,    33,    19,    30,    33,    33,    33,    78,    78,    86,
-      86,    86,    86,    86,    86,    86,    86,    86,    86,    86,
-      86,    86,    86,    86,    86,    86,    86,    86,    86,    86,
-      86,    86,    10,    11,    95,   113,    85,    87,   105,   108,
-      86,    86,    10,    95,   113,    41,    80,    91,    91,   113,
-       8,    97,   111,    49,    61,    68,    69,   101,   102,   103,
-     104,    90,   113,    20,    77,    77,    78,    33,   105,    53,
-      53,    53,    53,    33,    33,    33,    86,    81,    10,    77,
-      90,    41,    78,    10,    86,    86,   101,   101,     3,    77,
-      78,   101,   108,   100,    69,   103,   104,    78,   113,    53,
-      69,    69,    69,    69,    86,    78,   105,    97,    77,    78,
-      78,    86,    86,    86,    86,    78,    78,    78,    78
+      64,    65,    68,    69,    71,    72,    76,    77,   111,   116,
+       8,     9,    11,    12,    73,   120,   121,   121,   121,   121,
+      11,    69,    87,    11,    31,    32,    33,   112,     9,    73,
+     122,   121,    52,    52,    52,    52,    31,    32,   112,    19,
+      30,    31,    33,    36,    19,    30,    33,    35,    34,    87,
+      87,    87,    87,    87,    87,    86,   110,    87,    87,     0,
+      41,    38,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    67,    68,    69,    70,    71,
+      72,    87,    91,   110,     6,    20,    58,    97,   111,   100,
+      49,    61,    68,    69,   102,   105,   106,   107,   108,   109,
+      29,    89,    77,   121,    68,    68,    78,    79,   102,   117,
+     110,    31,    33,    33,    52,   110,   110,   110,   110,    31,
+      33,    33,    33,    19,    30,    33,    33,    33,    79,    79,
+      87,    87,    87,    87,    87,    87,    87,    87,    87,    87,
+      87,    87,    87,    87,    87,    87,    87,    87,    87,    87,
+      87,    87,    87,    10,    11,    96,   121,    86,    88,   110,
+     113,   114,    87,    87,    10,    96,   121,    41,    81,    92,
+      92,   121,     8,    98,   119,   102,   104,     3,    78,    79,
+     106,   113,    61,   107,    69,   108,   109,    91,   121,    20,
+      78,    78,    61,   117,    79,    33,   110,    53,    53,    53,
+      53,    33,    33,    33,    87,    82,    10,    78,    91,    79,
+      41,    10,    87,    87,   100,   101,    78,    79,    79,   103,
+      79,   121,    53,    69,    69,    69,    69,    87,    79,    98,
+      75,   110,   101,    87,    87,    87,    87,    79,    79,    79,
+      79
 };
 
 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
@@ -1694,81 +1741,81 @@ yyreduce:
   switch (yyn)
     {
         case 4:
-#line 255 "c-exp.y"
+#line 268 "c-exp.y"
     { write_exp_elt_opcode(OP_TYPE);
 			  write_exp_elt_type(yyvsp[0].tval);
 			  write_exp_elt_opcode(OP_TYPE);}
     break;
 
   case 6:
-#line 263 "c-exp.y"
+#line 276 "c-exp.y"
     { write_exp_elt_opcode (BINOP_COMMA); }
     break;
 
   case 7:
-#line 268 "c-exp.y"
+#line 281 "c-exp.y"
     { write_exp_elt_opcode (UNOP_IND); }
     break;
 
   case 8:
-#line 272 "c-exp.y"
+#line 285 "c-exp.y"
     { write_exp_elt_opcode (UNOP_ADDR); }
     break;
 
   case 9:
-#line 276 "c-exp.y"
+#line 289 "c-exp.y"
     { write_exp_elt_opcode (UNOP_NEG); }
     break;
 
   case 10:
-#line 280 "c-exp.y"
+#line 293 "c-exp.y"
     { write_exp_elt_opcode (UNOP_PLUS); }
     break;
 
   case 11:
-#line 284 "c-exp.y"
+#line 297 "c-exp.y"
     { write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
     break;
 
   case 12:
-#line 288 "c-exp.y"
+#line 301 "c-exp.y"
     { write_exp_elt_opcode (UNOP_COMPLEMENT); }
     break;
 
   case 13:
-#line 292 "c-exp.y"
+#line 305 "c-exp.y"
     { write_exp_elt_opcode (UNOP_PREINCREMENT); }
     break;
 
   case 14:
-#line 296 "c-exp.y"
+#line 309 "c-exp.y"
     { write_exp_elt_opcode (UNOP_PREDECREMENT); }
     break;
 
   case 15:
-#line 300 "c-exp.y"
+#line 313 "c-exp.y"
     { write_exp_elt_opcode (UNOP_POSTINCREMENT); }
     break;
 
   case 16:
-#line 304 "c-exp.y"
+#line 317 "c-exp.y"
     { write_exp_elt_opcode (UNOP_POSTDECREMENT); }
     break;
 
   case 17:
-#line 308 "c-exp.y"
+#line 321 "c-exp.y"
     { write_exp_elt_opcode (UNOP_SIZEOF); }
     break;
 
   case 18:
-#line 312 "c-exp.y"
+#line 325 "c-exp.y"
     { write_exp_elt_opcode (STRUCTOP_PTR);
 			  write_exp_string (yyvsp[0].sval);
 			  write_exp_elt_opcode (STRUCTOP_PTR); }
     break;
 
   case 19:
-#line 318 "c-exp.y"
+#line 331 "c-exp.y"
     { mark_struct_expression ();
 			  write_exp_elt_opcode (STRUCTOP_PTR);
 			  write_exp_string (yyvsp[-1].sval);
@@ -1776,7 +1823,7 @@ yyreduce:
     break;
 
   case 20:
-#line 325 "c-exp.y"
+#line 338 "c-exp.y"
     { struct stoken s;
 			  mark_struct_expression ();
 			  write_exp_elt_opcode (STRUCTOP_PTR);
@@ -1787,7 +1834,7 @@ yyreduce:
     break;
 
   case 21:
-#line 335 "c-exp.y"
+#line 348 "c-exp.y"
     { /* exp->type::name becomes exp->*(&type::name) */
 			  /* Note: this doesn't work if name is a
 			     static member!  FIXME */
@@ -1796,19 +1843,19 @@ yyreduce:
     break;
 
   case 22:
-#line 343 "c-exp.y"
+#line 356 "c-exp.y"
     { write_exp_elt_opcode (STRUCTOP_MPTR); }
     break;
 
   case 23:
-#line 347 "c-exp.y"
+#line 360 "c-exp.y"
     { write_exp_elt_opcode (STRUCTOP_STRUCT);
 			  write_exp_string (yyvsp[0].sval);
 			  write_exp_elt_opcode (STRUCTOP_STRUCT); }
     break;
 
   case 24:
-#line 353 "c-exp.y"
+#line 366 "c-exp.y"
     { mark_struct_expression ();
 			  write_exp_elt_opcode (STRUCTOP_STRUCT);
 			  write_exp_string (yyvsp[-1].sval);
@@ -1816,7 +1863,7 @@ yyreduce:
     break;
 
   case 25:
-#line 360 "c-exp.y"
+#line 373 "c-exp.y"
     { struct stoken s;
 			  mark_struct_expression ();
 			  write_exp_elt_opcode (STRUCTOP_STRUCT);
@@ -1827,7 +1874,7 @@ yyreduce:
     break;
 
   case 26:
-#line 370 "c-exp.y"
+#line 383 "c-exp.y"
     { /* exp.type::name becomes exp.*(&type::name) */
 			  /* Note: this doesn't work if name is a
 			     static member!  FIXME */
@@ -1836,29 +1883,29 @@ yyreduce:
     break;
 
   case 27:
-#line 378 "c-exp.y"
+#line 391 "c-exp.y"
     { write_exp_elt_opcode (STRUCTOP_MEMBER); }
     break;
 
   case 28:
-#line 382 "c-exp.y"
+#line 395 "c-exp.y"
     { write_exp_elt_opcode (BINOP_SUBSCRIPT); }
     break;
 
   case 29:
-#line 388 "c-exp.y"
+#line 401 "c-exp.y"
     { start_arglist (); }
     break;
 
   case 30:
-#line 390 "c-exp.y"
+#line 403 "c-exp.y"
     { write_exp_elt_opcode (OP_FUNCALL);
 			  write_exp_elt_longcst ((LONGEST) end_arglist ());
 			  write_exp_elt_opcode (OP_FUNCALL); }
     break;
 
   case 31:
-#line 396 "c-exp.y"
+#line 409 "c-exp.y"
     {
 			  /* This could potentially be a an argument defined
 			     lookup function (Koenig).  */
@@ -1876,7 +1923,7 @@ yyreduce:
     break;
 
   case 32:
-#line 411 "c-exp.y"
+#line 424 "c-exp.y"
     {
 			  write_exp_elt_opcode (OP_FUNCALL);
 			  write_exp_elt_longcst ((LONGEST) end_arglist ());
@@ -1885,40 +1932,46 @@ yyreduce:
     break;
 
   case 33:
-#line 419 "c-exp.y"
+#line 432 "c-exp.y"
     { start_arglist (); }
     break;
 
   case 35:
-#line 426 "c-exp.y"
+#line 439 "c-exp.y"
     { arglist_len = 1; }
     break;
 
   case 36:
-#line 430 "c-exp.y"
+#line 443 "c-exp.y"
     { arglist_len++; }
     break;
 
   case 37:
-#line 434 "c-exp.y"
+#line 447 "c-exp.y"
     { int i;
+			  VEC (type_ptr) *type_list = yyvsp[-2].tvec;
+			  struct type *type_elt;
+			  LONGEST len = VEC_length (type_ptr, type_list);
+
 			  write_exp_elt_opcode (TYPE_INSTANCE);
-			  write_exp_elt_longcst ((LONGEST) yyvsp[-2].ivec[0]);
-			  for (i = 0; i < yyvsp[-2].ivec[0]; ++i)
-			    write_exp_elt_type (yyvsp[-2].tvec[i + 1]);
-			  write_exp_elt_longcst((LONGEST) yyvsp[-2].ivec[0]);
+			  write_exp_elt_longcst (len);
+			  for (i = 0;
+			       VEC_iterate (type_ptr, type_list, i, type_elt);
+			       ++i)
+			    write_exp_elt_type (type_elt);
+			  write_exp_elt_longcst(len);
 			  write_exp_elt_opcode (TYPE_INSTANCE);
-			  xfree (yyvsp[-2].tvec);
+			  VEC_free (type_ptr, type_list);
 			}
     break;
 
   case 38:
-#line 446 "c-exp.y"
+#line 465 "c-exp.y"
     { yyval.lval = end_arglist () - 1; }
     break;
 
   case 39:
-#line 449 "c-exp.y"
+#line 468 "c-exp.y"
     { write_exp_elt_opcode (OP_ARRAY);
 			  write_exp_elt_longcst ((LONGEST) 0);
 			  write_exp_elt_longcst ((LONGEST) yyvsp[0].lval);
@@ -1926,138 +1979,138 @@ yyreduce:
     break;
 
   case 40:
-#line 456 "c-exp.y"
+#line 475 "c-exp.y"
     { write_exp_elt_opcode (UNOP_MEMVAL);
 			  write_exp_elt_type (yyvsp[-2].tval);
 			  write_exp_elt_opcode (UNOP_MEMVAL); }
     break;
 
   case 41:
-#line 462 "c-exp.y"
+#line 481 "c-exp.y"
     { write_exp_elt_opcode (UNOP_CAST);
 			  write_exp_elt_type (yyvsp[-2].tval);
 			  write_exp_elt_opcode (UNOP_CAST); }
     break;
 
   case 42:
-#line 468 "c-exp.y"
+#line 487 "c-exp.y"
     { }
     break;
 
   case 43:
-#line 474 "c-exp.y"
+#line 493 "c-exp.y"
     { write_exp_elt_opcode (BINOP_REPEAT); }
     break;
 
   case 44:
-#line 478 "c-exp.y"
+#line 497 "c-exp.y"
     { write_exp_elt_opcode (BINOP_MUL); }
     break;
 
   case 45:
-#line 482 "c-exp.y"
+#line 501 "c-exp.y"
     { write_exp_elt_opcode (BINOP_DIV); }
     break;
 
   case 46:
-#line 486 "c-exp.y"
+#line 505 "c-exp.y"
     { write_exp_elt_opcode (BINOP_REM); }
     break;
 
   case 47:
-#line 490 "c-exp.y"
+#line 509 "c-exp.y"
     { write_exp_elt_opcode (BINOP_ADD); }
     break;
 
   case 48:
-#line 494 "c-exp.y"
+#line 513 "c-exp.y"
     { write_exp_elt_opcode (BINOP_SUB); }
     break;
 
   case 49:
-#line 498 "c-exp.y"
+#line 517 "c-exp.y"
     { write_exp_elt_opcode (BINOP_LSH); }
     break;
 
   case 50:
-#line 502 "c-exp.y"
+#line 521 "c-exp.y"
     { write_exp_elt_opcode (BINOP_RSH); }
     break;
 
   case 51:
-#line 506 "c-exp.y"
+#line 525 "c-exp.y"
     { write_exp_elt_opcode (BINOP_EQUAL); }
     break;
 
   case 52:
-#line 510 "c-exp.y"
+#line 529 "c-exp.y"
     { write_exp_elt_opcode (BINOP_NOTEQUAL); }
     break;
 
   case 53:
-#line 514 "c-exp.y"
+#line 533 "c-exp.y"
     { write_exp_elt_opcode (BINOP_LEQ); }
     break;
 
   case 54:
-#line 518 "c-exp.y"
+#line 537 "c-exp.y"
     { write_exp_elt_opcode (BINOP_GEQ); }
     break;
 
   case 55:
-#line 522 "c-exp.y"
+#line 541 "c-exp.y"
     { write_exp_elt_opcode (BINOP_LESS); }
     break;
 
   case 56:
-#line 526 "c-exp.y"
+#line 545 "c-exp.y"
     { write_exp_elt_opcode (BINOP_GTR); }
     break;
 
   case 57:
-#line 530 "c-exp.y"
+#line 549 "c-exp.y"
     { write_exp_elt_opcode (BINOP_BITWISE_AND); }
     break;
 
   case 58:
-#line 534 "c-exp.y"
+#line 553 "c-exp.y"
     { write_exp_elt_opcode (BINOP_BITWISE_XOR); }
     break;
 
   case 59:
-#line 538 "c-exp.y"
+#line 557 "c-exp.y"
     { write_exp_elt_opcode (BINOP_BITWISE_IOR); }
     break;
 
   case 60:
-#line 542 "c-exp.y"
+#line 561 "c-exp.y"
     { write_exp_elt_opcode (BINOP_LOGICAL_AND); }
     break;
 
   case 61:
-#line 546 "c-exp.y"
+#line 565 "c-exp.y"
     { write_exp_elt_opcode (BINOP_LOGICAL_OR); }
     break;
 
   case 62:
-#line 550 "c-exp.y"
+#line 569 "c-exp.y"
     { write_exp_elt_opcode (TERNOP_COND); }
     break;
 
   case 63:
-#line 554 "c-exp.y"
+#line 573 "c-exp.y"
     { write_exp_elt_opcode (BINOP_ASSIGN); }
     break;
 
   case 64:
-#line 558 "c-exp.y"
+#line 577 "c-exp.y"
     { write_exp_elt_opcode (BINOP_ASSIGN_MODIFY);
 			  write_exp_elt_opcode (yyvsp[-1].opcode);
 			  write_exp_elt_opcode (BINOP_ASSIGN_MODIFY); }
     break;
 
   case 65:
-#line 564 "c-exp.y"
+#line 583 "c-exp.y"
     { write_exp_elt_opcode (OP_LONG);
 			  write_exp_elt_type (yyvsp[0].typed_val_int.type);
 			  write_exp_elt_longcst ((LONGEST)(yyvsp[0].typed_val_int.val));
@@ -2065,7 +2118,7 @@ yyreduce:
     break;
 
   case 66:
-#line 571 "c-exp.y"
+#line 590 "c-exp.y"
     {
 			  struct stoken_vector vec;
 			  vec.len = 1;
@@ -2075,7 +2128,7 @@ yyreduce:
     break;
 
   case 67:
-#line 580 "c-exp.y"
+#line 599 "c-exp.y"
     { YYSTYPE val;
 			  parse_number (yyvsp[0].ssym.stoken.ptr, yyvsp[0].ssym.stoken.length, 0, &val);
 			  write_exp_elt_opcode (OP_LONG);
@@ -2086,7 +2139,7 @@ yyreduce:
     break;
 
   case 68:
-#line 591 "c-exp.y"
+#line 610 "c-exp.y"
     { write_exp_elt_opcode (OP_DOUBLE);
 			  write_exp_elt_type (yyvsp[0].typed_val_float.type);
 			  write_exp_elt_dblcst (yyvsp[0].typed_val_float.dval);
@@ -2094,7 +2147,7 @@ yyreduce:
     break;
 
   case 69:
-#line 598 "c-exp.y"
+#line 617 "c-exp.y"
     { write_exp_elt_opcode (OP_DECFLOAT);
 			  write_exp_elt_type (yyvsp[0].typed_val_decfloat.type);
 			  write_exp_elt_decfloatcst (yyvsp[0].typed_val_decfloat.val);
@@ -2102,14 +2155,14 @@ yyreduce:
     break;
 
   case 71:
-#line 608 "c-exp.y"
+#line 627 "c-exp.y"
     {
 			  write_dollar_variable (yyvsp[0].sval);
 			}
     break;
 
   case 72:
-#line 614 "c-exp.y"
+#line 633 "c-exp.y"
     { write_exp_elt_opcode (OP_LONG);
 			  write_exp_elt_type (lookup_signed_typename
 					      (parse_language, parse_gdbarch,
@@ -2120,28 +2173,28 @@ yyreduce:
     break;
 
   case 73:
-#line 624 "c-exp.y"
+#line 643 "c-exp.y"
     { write_exp_elt_opcode (UNOP_REINTERPRET_CAST);
 			  write_exp_elt_type (yyvsp[-4].tval);
 			  write_exp_elt_opcode (UNOP_REINTERPRET_CAST); }
     break;
 
   case 74:
-#line 630 "c-exp.y"
+#line 649 "c-exp.y"
     { write_exp_elt_opcode (UNOP_CAST);
 			  write_exp_elt_type (yyvsp[-4].tval);
 			  write_exp_elt_opcode (UNOP_CAST); }
     break;
 
   case 75:
-#line 636 "c-exp.y"
+#line 655 "c-exp.y"
     { write_exp_elt_opcode (UNOP_DYNAMIC_CAST);
 			  write_exp_elt_type (yyvsp[-4].tval);
 			  write_exp_elt_opcode (UNOP_DYNAMIC_CAST); }
     break;
 
   case 76:
-#line 642 "c-exp.y"
+#line 661 "c-exp.y"
     { /* We could do more error checking here, but
 			     it doesn't seem worthwhile.  */
 			  write_exp_elt_opcode (UNOP_CAST);
@@ -2150,7 +2203,7 @@ yyreduce:
     break;
 
   case 77:
-#line 651 "c-exp.y"
+#line 670 "c-exp.y"
     {
 			  /* We copy the string here, and not in the
 			     lexer, to guarantee that we do not leak a
@@ -2169,7 +2222,7 @@ yyreduce:
     break;
 
   case 78:
-#line 668 "c-exp.y"
+#line 687 "c-exp.y"
     {
 			  /* Note that we NUL-terminate here, but just
 			     for convenience.  */
@@ -2188,7 +2241,7 @@ yyreduce:
     break;
 
   case 79:
-#line 686 "c-exp.y"
+#line 705 "c-exp.y"
     {
 			  int i;
 			  enum c_string_type type = C_STRING;
@@ -2222,7 +2275,7 @@ yyreduce:
     break;
 
   case 80:
-#line 720 "c-exp.y"
+#line 739 "c-exp.y"
     { write_exp_elt_opcode (OP_LONG);
                           write_exp_elt_type (parse_type->builtin_bool);
                           write_exp_elt_longcst ((LONGEST) 1);
@@ -2230,7 +2283,7 @@ yyreduce:
     break;
 
   case 81:
-#line 727 "c-exp.y"
+#line 746 "c-exp.y"
     { write_exp_elt_opcode (OP_LONG);
                           write_exp_elt_type (parse_type->builtin_bool);
                           write_exp_elt_longcst ((LONGEST) 0);
@@ -2238,7 +2291,7 @@ yyreduce:
     break;
 
   case 82:
-#line 736 "c-exp.y"
+#line 755 "c-exp.y"
     {
 			  if (yyvsp[0].ssym.sym)
 			    yyval.bval = SYMBOL_BLOCK_VALUE (yyvsp[0].ssym.sym);
@@ -2249,14 +2302,14 @@ yyreduce:
     break;
 
   case 83:
-#line 744 "c-exp.y"
+#line 763 "c-exp.y"
     {
 			  yyval.bval = yyvsp[0].bval;
 			}
     break;
 
   case 84:
-#line 750 "c-exp.y"
+#line 769 "c-exp.y"
     { struct symbol *tem
 			    = lookup_symbol (copy_name (yyvsp[0].sval), yyvsp[-2].bval,
 					     VAR_DOMAIN, (int *) NULL);
@@ -2267,7 +2320,7 @@ yyreduce:
     break;
 
   case 85:
-#line 760 "c-exp.y"
+#line 779 "c-exp.y"
     { struct symbol *sym = yyvsp[-1].ssym.sym;
 
 			  if (sym == NULL || !SYMBOL_IS_ARGUMENT (sym)
@@ -2283,13 +2336,20 @@ yyreduce:
     break;
 
   case 86:
-#line 775 "c-exp.y"
+#line 794 "c-exp.y"
     { struct symbol *sym;
 			  sym = lookup_symbol (copy_name (yyvsp[0].sval), yyvsp[-2].bval,
 					       VAR_DOMAIN, (int *) NULL);
 			  if (sym == 0)
 			    error (_("No symbol \"%s\" in specified context."),
 				   copy_name (yyvsp[0].sval));
+			  if (symbol_read_needs_frame (sym))
+			    {
+			      if (innermost_block == 0
+				  || contained_in (block_found,
+						   innermost_block))
+				innermost_block = block_found;
+			    }
 
 			  write_exp_elt_opcode (OP_VAR_VALUE);
 			  /* block_found is set by lookup_symbol.  */
@@ -2299,7 +2359,7 @@ yyreduce:
     break;
 
   case 87:
-#line 790 "c-exp.y"
+#line 816 "c-exp.y"
     {
 			  struct type *type = yyvsp[-2].tsym.type;
 			  CHECK_TYPEDEF (type);
@@ -2317,7 +2377,7 @@ yyreduce:
     break;
 
   case 88:
-#line 805 "c-exp.y"
+#line 831 "c-exp.y"
     {
 			  struct type *type = yyvsp[-3].tsym.type;
 			  struct stoken tmp_token;
@@ -2344,7 +2404,7 @@ yyreduce:
     break;
 
   case 89:
-#line 829 "c-exp.y"
+#line 855 "c-exp.y"
     {
 			  char *copy = copy_name (yyvsp[-2].sval);
 			  error (_("No type \"%s\" within class "
@@ -2354,7 +2414,7 @@ yyreduce:
     break;
 
   case 91:
-#line 839 "c-exp.y"
+#line 865 "c-exp.y"
     {
 			  char *name = copy_name (yyvsp[0].ssym.stoken);
 			  struct symbol *sym;
@@ -2383,7 +2443,7 @@ yyreduce:
     break;
 
   case 92:
-#line 867 "c-exp.y"
+#line 893 "c-exp.y"
     { struct symbol *sym = yyvsp[0].ssym.sym;
 
 			  if (sym)
@@ -2438,356 +2498,378 @@ yyreduce:
     break;
 
   case 93:
-#line 921 "c-exp.y"
-    { push_type_address_space (copy_name (yyvsp[0].ssym.stoken));
-		  push_type (tp_space_identifier);
-		}
+#line 947 "c-exp.y"
+    { insert_type_address_space (copy_name (yyvsp[0].ssym.stoken)); }
     break;
 
   case 101:
-#line 943 "c-exp.y"
-    { push_type (tp_pointer); yyval.voidval = 0; }
-    break;
-
-  case 102:
-#line 945 "c-exp.y"
-    { push_type (tp_pointer); yyval.voidval = yyvsp[0].voidval; }
+#line 968 "c-exp.y"
+    { insert_type (tp_pointer); }
     break;
 
   case 103:
-#line 947 "c-exp.y"
-    { push_type (tp_reference); yyval.voidval = 0; }
+#line 971 "c-exp.y"
+    { insert_type (tp_pointer); }
     break;
 
-  case 104:
-#line 949 "c-exp.y"
-    { push_type (tp_reference); yyval.voidval = yyvsp[0].voidval; }
+  case 105:
+#line 974 "c-exp.y"
+    { insert_type (tp_reference); }
     break;
 
   case 106:
-#line 954 "c-exp.y"
-    { yyval.voidval = yyvsp[-1].voidval; }
+#line 976 "c-exp.y"
+    { insert_type (tp_reference); }
     break;
 
   case 107:
-#line 956 "c-exp.y"
+#line 980 "c-exp.y"
+    {
+			  yyval.type_stack = get_type_stack ();
+			  /* This cleanup is eventually run by
+			     c_parse.  */
+			  make_cleanup (type_stack_cleanup, yyval.type_stack);
+			}
+    break;
+
+  case 108:
+#line 989 "c-exp.y"
+    { yyval.type_stack = append_type_stack (yyvsp[0].type_stack, yyvsp[-1].type_stack); }
+    break;
+
+  case 111:
+#line 995 "c-exp.y"
+    { yyval.type_stack = yyvsp[-1].type_stack; }
+    break;
+
+  case 112:
+#line 997 "c-exp.y"
     {
+			  push_type_stack (yyvsp[-1].type_stack);
 			  push_type_int (yyvsp[0].lval);
 			  push_type (tp_array);
+			  yyval.type_stack = get_type_stack ();
 			}
     break;
 
-  case 108:
-#line 961 "c-exp.y"
+  case 113:
+#line 1004 "c-exp.y"
     {
 			  push_type_int (yyvsp[0].lval);
 			  push_type (tp_array);
-			  yyval.voidval = 0;
+			  yyval.type_stack = get_type_stack ();
 			}
     break;
 
-  case 109:
-#line 968 "c-exp.y"
-    { push_type (tp_function); }
+  case 114:
+#line 1011 "c-exp.y"
+    {
+			  push_type_stack (yyvsp[-1].type_stack);
+			  push_typelist (yyvsp[0].tvec);
+			  yyval.type_stack = get_type_stack ();
+			}
     break;
 
-  case 110:
-#line 970 "c-exp.y"
-    { push_type (tp_function); }
+  case 115:
+#line 1017 "c-exp.y"
+    {
+			  push_typelist (yyvsp[0].tvec);
+			  yyval.type_stack = get_type_stack ();
+			}
     break;
 
-  case 111:
-#line 974 "c-exp.y"
+  case 116:
+#line 1024 "c-exp.y"
     { yyval.lval = -1; }
     break;
 
-  case 112:
-#line 976 "c-exp.y"
+  case 117:
+#line 1026 "c-exp.y"
     { yyval.lval = yyvsp[-1].typed_val_int.val; }
     break;
 
-  case 113:
-#line 980 "c-exp.y"
-    { yyval.voidval = 0; }
+  case 118:
+#line 1030 "c-exp.y"
+    { yyval.tvec = NULL; }
     break;
 
-  case 114:
-#line 982 "c-exp.y"
-    { xfree (yyvsp[-1].tvec); yyval.voidval = 0; }
+  case 119:
+#line 1032 "c-exp.y"
+    { yyval.tvec = yyvsp[-1].tvec; }
     break;
 
-  case 116:
-#line 998 "c-exp.y"
+  case 121:
+#line 1048 "c-exp.y"
     { yyval.tval = yyvsp[0].tsym.type; }
     break;
 
-  case 117:
-#line 1000 "c-exp.y"
+  case 122:
+#line 1050 "c-exp.y"
     { yyval.tval = lookup_signed_typename (parse_language,
 						       parse_gdbarch,
 						       "int"); }
     break;
 
-  case 118:
-#line 1004 "c-exp.y"
+  case 123:
+#line 1054 "c-exp.y"
     { yyval.tval = lookup_signed_typename (parse_language,
 						       parse_gdbarch,
 						       "long"); }
     break;
 
-  case 119:
-#line 1008 "c-exp.y"
+  case 124:
+#line 1058 "c-exp.y"
     { yyval.tval = lookup_signed_typename (parse_language,
 						       parse_gdbarch,
 						       "short"); }
     break;
 
-  case 120:
-#line 1012 "c-exp.y"
+  case 125:
+#line 1062 "c-exp.y"
     { yyval.tval = lookup_signed_typename (parse_language,
 						       parse_gdbarch,
 						       "long"); }
     break;
 
-  case 121:
-#line 1016 "c-exp.y"
+  case 126:
+#line 1066 "c-exp.y"
     { yyval.tval = lookup_signed_typename (parse_language,
 						       parse_gdbarch,
 						       "long"); }
     break;
 
-  case 122:
-#line 1020 "c-exp.y"
+  case 127:
+#line 1070 "c-exp.y"
     { yyval.tval = lookup_signed_typename (parse_language,
 						       parse_gdbarch,
 						       "long"); }
     break;
 
-  case 123:
-#line 1024 "c-exp.y"
+  case 128:
+#line 1074 "c-exp.y"
     { yyval.tval = lookup_signed_typename (parse_language,
 						       parse_gdbarch,
 						       "long"); }
     break;
 
-  case 124:
-#line 1028 "c-exp.y"
+  case 129:
+#line 1078 "c-exp.y"
     { yyval.tval = lookup_unsigned_typename (parse_language,
 							 parse_gdbarch,
 							 "long"); }
     break;
 
-  case 125:
-#line 1032 "c-exp.y"
+  case 130:
+#line 1082 "c-exp.y"
     { yyval.tval = lookup_unsigned_typename (parse_language,
 							 parse_gdbarch,
 							 "long"); }
     break;
 
-  case 126:
-#line 1036 "c-exp.y"
+  case 131:
+#line 1086 "c-exp.y"
     { yyval.tval = lookup_unsigned_typename (parse_language,
 							 parse_gdbarch,
 							 "long"); }
     break;
 
-  case 127:
-#line 1040 "c-exp.y"
+  case 132:
+#line 1090 "c-exp.y"
     { yyval.tval = lookup_signed_typename (parse_language,
 						       parse_gdbarch,
 						       "long long"); }
     break;
 
-  case 128:
-#line 1044 "c-exp.y"
+  case 133:
+#line 1094 "c-exp.y"
     { yyval.tval = lookup_signed_typename (parse_language,
 						       parse_gdbarch,
 						       "long long"); }
     break;
 
-  case 129:
-#line 1048 "c-exp.y"
+  case 134:
+#line 1098 "c-exp.y"
     { yyval.tval = lookup_signed_typename (parse_language,
 						       parse_gdbarch,
 						       "long long"); }
     break;
 
-  case 130:
-#line 1052 "c-exp.y"
+  case 135:
+#line 1102 "c-exp.y"
     { yyval.tval = lookup_signed_typename (parse_language,
 						       parse_gdbarch,
 						       "long long"); }
     break;
 
-  case 131:
-#line 1056 "c-exp.y"
+  case 136:
+#line 1106 "c-exp.y"
     { yyval.tval = lookup_signed_typename (parse_language,
 						       parse_gdbarch,
 						       "long long"); }
     break;
 
-  case 132:
-#line 1060 "c-exp.y"
+  case 137:
+#line 1110 "c-exp.y"
     { yyval.tval = lookup_signed_typename (parse_language,
 						       parse_gdbarch,
 						       "long long"); }
     break;
 
-  case 133:
-#line 1064 "c-exp.y"
+  case 138:
+#line 1114 "c-exp.y"
     { yyval.tval = lookup_unsigned_typename (parse_language,
 							 parse_gdbarch,
 							 "long long"); }
     break;
 
-  case 134:
-#line 1068 "c-exp.y"
+  case 139:
+#line 1118 "c-exp.y"
     { yyval.tval = lookup_unsigned_typename (parse_language,
 							 parse_gdbarch,
 							 "long long"); }
     break;
 
-  case 135:
-#line 1072 "c-exp.y"
+  case 140:
+#line 1122 "c-exp.y"
     { yyval.tval = lookup_unsigned_typename (parse_language,
 							 parse_gdbarch,
 							 "long long"); }
     break;
 
-  case 136:
-#line 1076 "c-exp.y"
+  case 141:
+#line 1126 "c-exp.y"
     { yyval.tval = lookup_unsigned_typename (parse_language,
 							 parse_gdbarch,
 							 "long long"); }
     break;
 
-  case 137:
-#line 1080 "c-exp.y"
+  case 142:
+#line 1130 "c-exp.y"
     { yyval.tval = lookup_signed_typename (parse_language,
 						       parse_gdbarch,
 						       "short"); }
     break;
 
-  case 138:
-#line 1084 "c-exp.y"
+  case 143:
+#line 1134 "c-exp.y"
     { yyval.tval = lookup_signed_typename (parse_language,
 						       parse_gdbarch,
 						       "short"); }
     break;
 
-  case 139:
-#line 1088 "c-exp.y"
+  case 144:
+#line 1138 "c-exp.y"
     { yyval.tval = lookup_signed_typename (parse_language,
 						       parse_gdbarch,
 						       "short"); }
     break;
 
-  case 140:
-#line 1092 "c-exp.y"
+  case 145:
+#line 1142 "c-exp.y"
     { yyval.tval = lookup_unsigned_typename (parse_language,
 							 parse_gdbarch,
 							 "short"); }
     break;
 
-  case 141:
-#line 1096 "c-exp.y"
+  case 146:
+#line 1146 "c-exp.y"
     { yyval.tval = lookup_unsigned_typename (parse_language,
 							 parse_gdbarch,
 							 "short"); }
     break;
 
-  case 142:
-#line 1100 "c-exp.y"
+  case 147:
+#line 1150 "c-exp.y"
     { yyval.tval = lookup_unsigned_typename (parse_language,
 							 parse_gdbarch,
 							 "short"); }
     break;
 
-  case 143:
-#line 1104 "c-exp.y"
+  case 148:
+#line 1154 "c-exp.y"
     { yyval.tval = lookup_typename (parse_language, parse_gdbarch,
 						"double", (struct block *) NULL,
 						0); }
     break;
 
-  case 144:
-#line 1108 "c-exp.y"
+  case 149:
+#line 1158 "c-exp.y"
     { yyval.tval = lookup_typename (parse_language, parse_gdbarch,
 						"long double",
 						(struct block *) NULL, 0); }
     break;
 
-  case 145:
-#line 1112 "c-exp.y"
+  case 150:
+#line 1162 "c-exp.y"
     { yyval.tval = lookup_struct (copy_name (yyvsp[0].sval),
 					      expression_context_block); }
     break;
 
-  case 146:
-#line 1115 "c-exp.y"
+  case 151:
+#line 1165 "c-exp.y"
     { yyval.tval = lookup_struct (copy_name (yyvsp[0].sval),
 					      expression_context_block); }
     break;
 
-  case 147:
-#line 1118 "c-exp.y"
+  case 152:
+#line 1168 "c-exp.y"
     { yyval.tval = lookup_union (copy_name (yyvsp[0].sval),
 					     expression_context_block); }
     break;
 
-  case 148:
-#line 1121 "c-exp.y"
+  case 153:
+#line 1171 "c-exp.y"
     { yyval.tval = lookup_enum (copy_name (yyvsp[0].sval),
 					    expression_context_block); }
     break;
 
-  case 149:
-#line 1124 "c-exp.y"
+  case 154:
+#line 1174 "c-exp.y"
     { yyval.tval = lookup_unsigned_typename (parse_language,
 							 parse_gdbarch,
 							 TYPE_NAME(yyvsp[0].tsym.type)); }
     break;
 
-  case 150:
-#line 1128 "c-exp.y"
+  case 155:
+#line 1178 "c-exp.y"
     { yyval.tval = lookup_unsigned_typename (parse_language,
 							 parse_gdbarch,
 							 "int"); }
     break;
 
-  case 151:
-#line 1132 "c-exp.y"
+  case 156:
+#line 1182 "c-exp.y"
     { yyval.tval = lookup_signed_typename (parse_language,
 						       parse_gdbarch,
 						       TYPE_NAME(yyvsp[0].tsym.type)); }
     break;
 
-  case 152:
-#line 1136 "c-exp.y"
+  case 157:
+#line 1186 "c-exp.y"
     { yyval.tval = lookup_signed_typename (parse_language,
 						       parse_gdbarch,
 						       "int"); }
     break;
 
-  case 153:
-#line 1143 "c-exp.y"
+  case 158:
+#line 1193 "c-exp.y"
     { yyval.tval = lookup_template_type(copy_name(yyvsp[-3].sval), yyvsp[-1].tval,
 						    expression_context_block);
 			}
     break;
 
-  case 154:
-#line 1147 "c-exp.y"
+  case 159:
+#line 1197 "c-exp.y"
     { yyval.tval = follow_types (yyvsp[0].tval); }
     break;
 
-  case 155:
-#line 1149 "c-exp.y"
+  case 160:
+#line 1199 "c-exp.y"
     { yyval.tval = follow_types (yyvsp[-1].tval); }
     break;
 
-  case 157:
-#line 1154 "c-exp.y"
+  case 162:
+#line 1204 "c-exp.y"
     {
 		  yyval.tsym.stoken.ptr = "int";
 		  yyval.tsym.stoken.length = 3;
@@ -2797,8 +2879,8 @@ yyreduce:
 		}
     break;
 
-  case 158:
-#line 1162 "c-exp.y"
+  case 163:
+#line 1212 "c-exp.y"
     {
 		  yyval.tsym.stoken.ptr = "long";
 		  yyval.tsym.stoken.length = 4;
@@ -2808,8 +2890,8 @@ yyreduce:
 		}
     break;
 
-  case 159:
-#line 1170 "c-exp.y"
+  case 164:
+#line 1220 "c-exp.y"
     {
 		  yyval.tsym.stoken.ptr = "short";
 		  yyval.tsym.stoken.length = 5;
@@ -2819,131 +2901,154 @@ yyreduce:
 		}
     break;
 
-  case 160:
-#line 1181 "c-exp.y"
-    { yyval.tvec = (struct type **) xmalloc (sizeof (struct type *) * 2);
-		  yyval.ivec[0] = 1;	/* Number of types in vector */
-		  yyval.tvec[1] = yyvsp[0].tval;
+  case 165:
+#line 1231 "c-exp.y"
+    { check_parameter_typelist (yyvsp[0].tvec); }
+    break;
+
+  case 166:
+#line 1233 "c-exp.y"
+    {
+			  VEC_safe_push (type_ptr, yyvsp[-2].tvec, NULL);
+			  check_parameter_typelist (yyvsp[-2].tvec);
+			  yyval.tvec = yyvsp[-2].tvec;
+			}
+    break;
+
+  case 167:
+#line 1242 "c-exp.y"
+    {
+		  VEC (type_ptr) *typelist = NULL;
+		  VEC_safe_push (type_ptr, typelist, yyvsp[0].tval);
+		  yyval.tvec = typelist;
 		}
     break;
 
-  case 161:
-#line 1186 "c-exp.y"
-    { int len = sizeof (struct type *) * (++(yyvsp[-2].ivec[0]) + 1);
-		  yyval.tvec = (struct type **) xrealloc ((char *) yyvsp[-2].tvec, len);
-		  yyval.tvec[yyval.ivec[0]] = yyvsp[0].tval;
+  case 168:
+#line 1248 "c-exp.y"
+    {
+		  VEC_safe_push (type_ptr, yyvsp[-2].tvec, yyvsp[0].tval);
+		  yyval.tvec = yyvsp[-2].tvec;
 		}
     break;
 
-  case 163:
-#line 1194 "c-exp.y"
-    { yyval.tval = follow_types (yyvsp[-3].tval); }
+  case 170:
+#line 1256 "c-exp.y"
+    {
+		  push_type_stack (yyvsp[0].type_stack);
+		  yyval.tval = follow_types (yyvsp[-1].tval);
+		}
     break;
 
-  case 166:
-#line 1202 "c-exp.y"
-    { push_type (tp_const);
-			  push_type (tp_volatile); 
+  case 171:
+#line 1263 "c-exp.y"
+    { yyval.tval = follow_types (yyvsp[-1].tval); }
+    break;
+
+  case 176:
+#line 1275 "c-exp.y"
+    { insert_type (tp_const);
+			  insert_type (tp_volatile); 
 			}
     break;
 
-  case 167:
-#line 1206 "c-exp.y"
-    { push_type (tp_const); }
+  case 177:
+#line 1279 "c-exp.y"
+    { insert_type (tp_const); }
     break;
 
-  case 168:
-#line 1208 "c-exp.y"
-    { push_type (tp_volatile); }
+  case 178:
+#line 1281 "c-exp.y"
+    { insert_type (tp_volatile); }
     break;
 
-  case 169:
-#line 1212 "c-exp.y"
+  case 179:
+#line 1285 "c-exp.y"
     { yyval.sval = operator_stoken (" new"); }
     break;
 
-  case 170:
-#line 1214 "c-exp.y"
+  case 180:
+#line 1287 "c-exp.y"
     { yyval.sval = operator_stoken (" delete"); }
     break;
 
-  case 171:
-#line 1216 "c-exp.y"
+  case 181:
+#line 1289 "c-exp.y"
     { yyval.sval = operator_stoken (" new[]"); }
     break;
 
-  case 172:
-#line 1218 "c-exp.y"
+  case 182:
+#line 1291 "c-exp.y"
     { yyval.sval = operator_stoken (" delete[]"); }
     break;
 
-  case 173:
-#line 1220 "c-exp.y"
+  case 183:
+#line 1293 "c-exp.y"
     { yyval.sval = operator_stoken ("+"); }
     break;
 
-  case 174:
-#line 1222 "c-exp.y"
+  case 184:
+#line 1295 "c-exp.y"
     { yyval.sval = operator_stoken ("-"); }
     break;
 
-  case 175:
-#line 1224 "c-exp.y"
+  case 185:
+#line 1297 "c-exp.y"
     { yyval.sval = operator_stoken ("*"); }
     break;
 
-  case 176:
-#line 1226 "c-exp.y"
+  case 186:
+#line 1299 "c-exp.y"
     { yyval.sval = operator_stoken ("/"); }
     break;
 
-  case 177:
-#line 1228 "c-exp.y"
+  case 187:
+#line 1301 "c-exp.y"
     { yyval.sval = operator_stoken ("%"); }
     break;
 
-  case 178:
-#line 1230 "c-exp.y"
+  case 188:
+#line 1303 "c-exp.y"
     { yyval.sval = operator_stoken ("^"); }
     break;
 
-  case 179:
-#line 1232 "c-exp.y"
+  case 189:
+#line 1305 "c-exp.y"
     { yyval.sval = operator_stoken ("&"); }
     break;
 
-  case 180:
-#line 1234 "c-exp.y"
+  case 190:
+#line 1307 "c-exp.y"
     { yyval.sval = operator_stoken ("|"); }
     break;
 
-  case 181:
-#line 1236 "c-exp.y"
+  case 191:
+#line 1309 "c-exp.y"
     { yyval.sval = operator_stoken ("~"); }
     break;
 
-  case 182:
-#line 1238 "c-exp.y"
+  case 192:
+#line 1311 "c-exp.y"
     { yyval.sval = operator_stoken ("!"); }
     break;
 
-  case 183:
-#line 1240 "c-exp.y"
+  case 193:
+#line 1313 "c-exp.y"
     { yyval.sval = operator_stoken ("="); }
     break;
 
-  case 184:
-#line 1242 "c-exp.y"
+  case 194:
+#line 1315 "c-exp.y"
     { yyval.sval = operator_stoken ("<"); }
     break;
 
-  case 185:
-#line 1244 "c-exp.y"
+  case 195:
+#line 1317 "c-exp.y"
     { yyval.sval = operator_stoken (">"); }
     break;
 
-  case 186:
-#line 1246 "c-exp.y"
+  case 196:
+#line 1319 "c-exp.y"
     { const char *op = "unknown";
 			  switch (yyvsp[0].opcode)
 			    {
@@ -2985,83 +3090,83 @@ yyreduce:
 			}
     break;
 
-  case 187:
-#line 1286 "c-exp.y"
+  case 197:
+#line 1359 "c-exp.y"
     { yyval.sval = operator_stoken ("<<"); }
     break;
 
-  case 188:
-#line 1288 "c-exp.y"
+  case 198:
+#line 1361 "c-exp.y"
     { yyval.sval = operator_stoken (">>"); }
     break;
 
-  case 189:
-#line 1290 "c-exp.y"
+  case 199:
+#line 1363 "c-exp.y"
     { yyval.sval = operator_stoken ("=="); }
     break;
 
-  case 190:
-#line 1292 "c-exp.y"
+  case 200:
+#line 1365 "c-exp.y"
     { yyval.sval = operator_stoken ("!="); }
     break;
 
-  case 191:
-#line 1294 "c-exp.y"
+  case 201:
+#line 1367 "c-exp.y"
     { yyval.sval = operator_stoken ("<="); }
     break;
 
-  case 192:
-#line 1296 "c-exp.y"
+  case 202:
+#line 1369 "c-exp.y"
     { yyval.sval = operator_stoken (">="); }
     break;
 
-  case 193:
-#line 1298 "c-exp.y"
+  case 203:
+#line 1371 "c-exp.y"
     { yyval.sval = operator_stoken ("&&"); }
     break;
 
-  case 194:
-#line 1300 "c-exp.y"
+  case 204:
+#line 1373 "c-exp.y"
     { yyval.sval = operator_stoken ("||"); }
     break;
 
-  case 195:
-#line 1302 "c-exp.y"
+  case 205:
+#line 1375 "c-exp.y"
     { yyval.sval = operator_stoken ("++"); }
     break;
 
-  case 196:
-#line 1304 "c-exp.y"
+  case 206:
+#line 1377 "c-exp.y"
     { yyval.sval = operator_stoken ("--"); }
     break;
 
-  case 197:
-#line 1306 "c-exp.y"
+  case 207:
+#line 1379 "c-exp.y"
     { yyval.sval = operator_stoken (","); }
     break;
 
-  case 198:
-#line 1308 "c-exp.y"
+  case 208:
+#line 1381 "c-exp.y"
     { yyval.sval = operator_stoken ("->*"); }
     break;
 
-  case 199:
-#line 1310 "c-exp.y"
+  case 209:
+#line 1383 "c-exp.y"
     { yyval.sval = operator_stoken ("->"); }
     break;
 
-  case 200:
-#line 1312 "c-exp.y"
+  case 210:
+#line 1385 "c-exp.y"
     { yyval.sval = operator_stoken ("()"); }
     break;
 
-  case 201:
-#line 1314 "c-exp.y"
+  case 211:
+#line 1387 "c-exp.y"
     { yyval.sval = operator_stoken ("[]"); }
     break;
 
-  case 202:
-#line 1316 "c-exp.y"
+  case 212:
+#line 1389 "c-exp.y"
     { char *name;
 			  long length;
 			  struct ui_file *buf = mem_fileopen ();
@@ -3074,38 +3179,38 @@ yyreduce:
 			}
     break;
 
-  case 203:
-#line 1330 "c-exp.y"
+  case 213:
+#line 1403 "c-exp.y"
     { yyval.sval = yyvsp[0].ssym.stoken; }
     break;
 
-  case 204:
-#line 1331 "c-exp.y"
+  case 214:
+#line 1404 "c-exp.y"
     { yyval.sval = yyvsp[0].ssym.stoken; }
     break;
 
-  case 205:
-#line 1332 "c-exp.y"
+  case 215:
+#line 1405 "c-exp.y"
     { yyval.sval = yyvsp[0].tsym.stoken; }
     break;
 
-  case 206:
-#line 1333 "c-exp.y"
+  case 216:
+#line 1406 "c-exp.y"
     { yyval.sval = yyvsp[0].ssym.stoken; }
     break;
 
-  case 207:
-#line 1334 "c-exp.y"
+  case 217:
+#line 1407 "c-exp.y"
     { yyval.sval = yyvsp[0].ssym.stoken; }
     break;
 
-  case 208:
-#line 1335 "c-exp.y"
+  case 218:
+#line 1408 "c-exp.y"
     { yyval.sval = yyvsp[0].sval; }
     break;
 
-  case 211:
-#line 1348 "c-exp.y"
+  case 221:
+#line 1421 "c-exp.y"
     {
 			  yyval.ssym.stoken = yyvsp[0].sval;
 			  yyval.ssym.sym = lookup_symbol (yyvsp[0].sval.ptr,
@@ -3119,7 +3224,7 @@ yyreduce:
     }
 
 /* Line 1000 of yacc.c.  */
-#line 3123 "c-exp.c"
+#line 3228 "c-exp.c"
 

   yyvsp -= yylen;
   yyssp -= yylen;
@@ -3344,7 +3449,7 @@ yyreturn:
 }
 
 
-#line 1358 "c-exp.y"
+#line 1431 "c-exp.y"
 
 
 /* Returns a stoken of the operator name given by OP (which does not
@@ -3364,6 +3469,37 @@ operator_stoken (const char *op)
   return st;
 };
 
+/* Validate a parameter typelist.  */
+
+static void
+check_parameter_typelist (VEC (type_ptr) *params)
+{
+  struct type *type;
+  int ix;
+
+  for (ix = 0; VEC_iterate (type_ptr, params, ix, type); ++ix)
+    {
+      if (type != NULL && TYPE_CODE (check_typedef (type)) == TYPE_CODE_VOID)
+	{
+	  if (ix == 0)
+	    {
+	      if (VEC_length (type_ptr, params) == 1)
+		{
+		  /* Ok.  */
+		  break;
+		}
+	      VEC_free (type_ptr, params);
+	      error (_("parameter types following 'void'"));
+	    }
+	  else
+	    {
+	      VEC_free (type_ptr, params);
+	      error (_("'void' invalid as parameter type"));
+	    }
+	}
+    }
+}
+
 /* Take care of parsing a number (anything that starts with a digit).
    Set yylval and return the token type; update lexptr.
    LEN is the number of characters in it.  */
@@ -3396,9 +3532,6 @@ parse_number (char *p, int len, int parsed_float, YYSTYPE *putithere)
 
   if (parsed_float)
     {
-      const char *suffix;
-      int suffix_len;
-
       /* If it ends at "df", "dd" or "dl", take it as type of decimal floating
          point.  Return DECFLOAT.  */
 
@@ -3876,7 +4009,8 @@ static const struct token tokentab3[] =
   {
     {">>=", ASSIGN_MODIFY, BINOP_RSH, 0},
     {"<<=", ASSIGN_MODIFY, BINOP_LSH, 0},
-    {"->*", ARROW_STAR, BINOP_END, 1}
+    {"->*", ARROW_STAR, BINOP_END, 1},
+    {"...", DOTDOTDOT, BINOP_END, 0}
   };
 
 static const struct token tokentab2[] =
@@ -4485,9 +4619,8 @@ classify_name (struct block *block)
 
 /* Like classify_name, but used by the inner loop of the lexer, when a
    name might have already been seen.  FIRST_NAME is true if the token
-   in `yylval' is the first component of a name, false otherwise.  If
-   this function returns NAME, it might not have updated `yylval'.
-   This is ok because the caller only cares about TYPENAME.  */
+   in `yylval' is the first component of a name, false otherwise.  */
+
 static int
 classify_inner_name (struct block *block, int first_name)
 {
@@ -4501,18 +4634,28 @@ classify_inner_name (struct block *block, int first_name)
   if (TYPE_CODE (type) != TYPE_CODE_STRUCT
       && TYPE_CODE (type) != TYPE_CODE_UNION
       && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
-    /* We know the caller won't expect us to update yylval.  */
-    return NAME;
+    return ERROR;
 
   copy = copy_name (yylval.tsym.stoken);
-  new_type = cp_lookup_nested_type (yylval.tsym.type, copy, block);
+  yylval.ssym.sym = cp_lookup_nested_symbol (yylval.tsym.type, copy, block);
+  if (yylval.ssym.sym == NULL)
+    return ERROR;
 
-  if (new_type == NULL)
-    /* We know the caller won't expect us to update yylval.  */
-    return NAME;
+  switch (SYMBOL_CLASS (yylval.ssym.sym))
+    {
+    case LOC_BLOCK:
+    case LOC_LABEL:
+      return ERROR;
 
-  yylval.tsym.type = new_type;
-  return TYPENAME;
+    case LOC_TYPEDEF:
+      yylval.tsym.type = SYMBOL_TYPE (yylval.ssym.sym);;
+      return TYPENAME;
+
+    default:
+      yylval.ssym.is_a_field_of_this = 0;
+      return NAME;
+    }
+  internal_error (__FILE__, __LINE__, _("not reached"));
 }
 
 /* The outer level of a two-level lexer.  This calls the inner lexer
@@ -4572,7 +4715,7 @@ yylex (void)
 						first_iter);
 	  /* We keep going until we either run out of names, or until
 	     we have a qualified name which is not a type.  */
-	  if (classification != TYPENAME)
+	  if (classification != TYPENAME && classification != NAME)
 	    {
 	      /* Push the final component and leave the loop.  */
 	      VEC_safe_push (token_and_value, token_fifo, &next);
diff --git a/gdb/c-exp.y b/gdb/c-exp.y
index bdcae33..0613799 100644
--- a/gdb/c-exp.y
+++ b/gdb/c-exp.y
@@ -103,6 +103,12 @@
 #define yygindex c_yygindex
 #define yytable	 c_yytable
 #define yycheck	 c_yycheck
+#define yyss	c_yyss
+#define yysslim	c_yysslim
+#define yyssp	c_yyssp
+#define yystacksize c_yystacksize
+#define yyvs	c_yyvs
+#define yyvsp	c_yyvsp
 
 #ifndef YYDEBUG
 #define	YYDEBUG 1		/* Default to yydebug support */
@@ -149,26 +155,31 @@ void yyerror (char *);
     struct internalvar *ivar;
 
     struct stoken_vector svec;
-    struct type **tvec;
+    VEC (type_ptr) *tvec;
     int *ivec;
+
+    struct type_stack *type_stack;
   }
 
 %{
 /* YYSTYPE gets defined by %union */
 static int parse_number (char *, int, int, YYSTYPE *);
 static struct stoken operator_stoken (const char *);
+static void check_parameter_typelist (VEC (type_ptr) *);
 %}
 
 %type <voidval> exp exp1 type_exp start variable qualified_name lcurly
 %type <lval> rcurly
 %type <tval> type typebase
-%type <tvec> nonempty_typelist
+%type <tvec> nonempty_typelist func_mod parameter_typelist
 /* %type <bval> block */
 
 /* Fancy type parsing.  */
-%type <voidval> func_mod direct_abs_decl abs_decl
 %type <tval> ptype
 %type <lval> array_mod
+%type <tval> conversion_type_id
+
+%type <type_stack> ptr_operator_ts abs_decl direct_abs_decl
 
 %token <typed_val_int> INT
 %token <typed_val_float> FLOAT
@@ -244,6 +255,8 @@ static struct stoken operator_stoken (const char *);
 %type <bval> block
 %left COLONCOLON
 
+%token DOTDOTDOT
+
 

 %%
 
@@ -430,15 +443,21 @@ arglist	:	arglist ',' exp   %prec ABOVE_COMMA
 			{ arglist_len++; }
 	;
 
-exp     :       exp '(' nonempty_typelist ')' const_or_volatile
+exp     :       exp '(' parameter_typelist ')' const_or_volatile
 			{ int i;
+			  VEC (type_ptr) *type_list = $3;
+			  struct type *type_elt;
+			  LONGEST len = VEC_length (type_ptr, type_list);
+
 			  write_exp_elt_opcode (TYPE_INSTANCE);
-			  write_exp_elt_longcst ((LONGEST) $<ivec>3[0]);
-			  for (i = 0; i < $<ivec>3[0]; ++i)
-			    write_exp_elt_type ($<tvec>3[i + 1]);
-			  write_exp_elt_longcst((LONGEST) $<ivec>3[0]);
+			  write_exp_elt_longcst (len);
+			  for (i = 0;
+			       VEC_iterate (type_ptr, type_list, i, type_elt);
+			       ++i)
+			    write_exp_elt_type (type_elt);
+			  write_exp_elt_longcst(len);
 			  write_exp_elt_opcode (TYPE_INSTANCE);
-			  free ($3);
+			  VEC_free (type_ptr, type_list);
 			}
 	;
 
@@ -778,6 +797,13 @@ variable:	block COLONCOLON name
 			  if (sym == 0)
 			    error (_("No symbol \"%s\" in specified context."),
 				   copy_name ($3));
+			  if (symbol_read_needs_frame (sym))
+			    {
+			      if (innermost_block == 0
+				  || contained_in (block_found,
+						   innermost_block))
+				innermost_block = block_found;
+			    }
 
 			  write_exp_elt_opcode (OP_VAR_VALUE);
 			  /* block_found is set by lookup_symbol.  */
@@ -918,9 +944,7 @@ variable:	name_not_typename
 	;
 
 space_identifier : '@' NAME
-		{ push_type_address_space (copy_name ($2.stoken));
-		  push_type (tp_space_identifier);
-		}
+		{ insert_type_address_space (copy_name ($2.stoken)); }
 	;
 
 const_or_volatile: const_or_volatile_noopt
@@ -939,14 +963,31 @@ const_or_volatile_or_space_identifier:
 	|
 	;
 
-abs_decl:	'*'
-			{ push_type (tp_pointer); $$ = 0; }
-	|	'*' abs_decl
-			{ push_type (tp_pointer); $$ = $2; }
+ptr_operator:
+		ptr_operator '*'
+			{ insert_type (tp_pointer); }
+		const_or_volatile_or_space_identifier
+	|	'*' 
+			{ insert_type (tp_pointer); }
+		const_or_volatile_or_space_identifier
 	|	'&'
-			{ push_type (tp_reference); $$ = 0; }
-	|	'&' abs_decl
-			{ push_type (tp_reference); $$ = $2; }
+			{ insert_type (tp_reference); }
+	|	'&' ptr_operator
+			{ insert_type (tp_reference); }
+	;
+
+ptr_operator_ts: ptr_operator
+			{
+			  $$ = get_type_stack ();
+			  /* This cleanup is eventually run by
+			     c_parse.  */
+			  make_cleanup (type_stack_cleanup, $$);
+			}
+	;
+
+abs_decl:	ptr_operator_ts direct_abs_decl
+			{ $$ = append_type_stack ($2, $1); }
+	|	ptr_operator_ts 
 	|	direct_abs_decl
 	;
 
@@ -954,20 +995,29 @@ direct_abs_decl: '(' abs_decl ')'
 			{ $$ = $2; }
 	|	direct_abs_decl array_mod
 			{
+			  push_type_stack ($1);
 			  push_type_int ($2);
 			  push_type (tp_array);
+			  $$ = get_type_stack ();
 			}
 	|	array_mod
 			{
 			  push_type_int ($1);
 			  push_type (tp_array);
-			  $$ = 0;
+			  $$ = get_type_stack ();
 			}
 
 	| 	direct_abs_decl func_mod
-			{ push_type (tp_function); }
+			{
+			  push_type_stack ($1);
+			  push_typelist ($2);
+			  $$ = get_type_stack ();
+			}
 	|	func_mod
-			{ push_type (tp_function); }
+			{
+			  push_typelist ($1);
+			  $$ = get_type_stack ();
+			}
 	;
 
 array_mod:	'[' ']'
@@ -977,9 +1027,9 @@ array_mod:	'[' ']'
 	;
 
 func_mod:	'(' ')'
-			{ $$ = 0; }
-	|	'(' nonempty_typelist ')'
-			{ free ($2); $$ = 0; }
+			{ $$ = NULL; }
+	|	'(' parameter_typelist ')'
+			{ $$ = $2; }
 	;
 
 /* We used to try to recognize pointer to member types here, but
@@ -1176,36 +1226,59 @@ typename:	TYPENAME
 		}
 	;
 
+parameter_typelist:
+		nonempty_typelist
+			{ check_parameter_typelist ($1); }
+	|	nonempty_typelist ',' DOTDOTDOT
+			{
+			  VEC_safe_push (type_ptr, $1, NULL);
+			  check_parameter_typelist ($1);
+			  $$ = $1;
+			}
+	;
+
 nonempty_typelist
 	:	type
-		{ $$ = (struct type **) malloc (sizeof (struct type *) * 2);
-		  $<ivec>$[0] = 1;	/* Number of types in vector */
-		  $$[1] = $1;
+		{
+		  VEC (type_ptr) *typelist = NULL;
+		  VEC_safe_push (type_ptr, typelist, $1);
+		  $$ = typelist;
 		}
 	|	nonempty_typelist ',' type
-		{ int len = sizeof (struct type *) * (++($<ivec>1[0]) + 1);
-		  $$ = (struct type **) realloc ((char *) $1, len);
-		  $$[$<ivec>$[0]] = $3;
+		{
+		  VEC_safe_push (type_ptr, $1, $3);
+		  $$ = $1;
 		}
 	;
 
 ptype	:	typebase
-	|	ptype const_or_volatile_or_space_identifier abs_decl const_or_volatile_or_space_identifier
+	|	ptype abs_decl
+		{
+		  push_type_stack ($2);
+		  $$ = follow_types ($1);
+		}
+	;
+
+conversion_type_id: typebase conversion_declarator
 		{ $$ = follow_types ($1); }
 	;
 
+conversion_declarator:  /* Nothing.  */
+	| ptr_operator conversion_declarator
+	;
+
 const_and_volatile: 	CONST_KEYWORD VOLATILE_KEYWORD
 	| 		VOLATILE_KEYWORD CONST_KEYWORD
 	;
 
 const_or_volatile_noopt:  	const_and_volatile 
-			{ push_type (tp_const);
-			  push_type (tp_volatile); 
+			{ insert_type (tp_const);
+			  insert_type (tp_volatile); 
 			}
 	| 		CONST_KEYWORD
-			{ push_type (tp_const); }
+			{ insert_type (tp_const); }
 	| 		VOLATILE_KEYWORD
-			{ push_type (tp_volatile); }
+			{ insert_type (tp_volatile); }
 	;
 
 operator:	OPERATOR NEW
@@ -1312,7 +1385,7 @@ operator:	OPERATOR NEW
 			{ $$ = operator_stoken ("()"); }
 	|	OPERATOR '[' ']'
 			{ $$ = operator_stoken ("[]"); }
-	|	OPERATOR ptype
+	|	OPERATOR conversion_type_id
 			{ char *name;
 			  long length;
 			  struct ui_file *buf = mem_fileopen ();
@@ -1374,6 +1447,37 @@ operator_stoken (const char *op)
   return st;
 };
 
+/* Validate a parameter typelist.  */
+
+static void
+check_parameter_typelist (VEC (type_ptr) *params)
+{
+  struct type *type;
+  int ix;
+
+  for (ix = 0; VEC_iterate (type_ptr, params, ix, type); ++ix)
+    {
+      if (type != NULL && TYPE_CODE (check_typedef (type)) == TYPE_CODE_VOID)
+	{
+	  if (ix == 0)
+	    {
+	      if (VEC_length (type_ptr, params) == 1)
+		{
+		  /* Ok.  */
+		  break;
+		}
+	      VEC_free (type_ptr, params);
+	      error (_("parameter types following 'void'"));
+	    }
+	  else
+	    {
+	      VEC_free (type_ptr, params);
+	      error (_("'void' invalid as parameter type"));
+	    }
+	}
+    }
+}
+
 /* Take care of parsing a number (anything that starts with a digit).
    Set yylval and return the token type; update lexptr.
    LEN is the number of characters in it.  */
@@ -1406,9 +1510,6 @@ parse_number (char *p, int len, int parsed_float, YYSTYPE *putithere)
 
   if (parsed_float)
     {
-      const char *suffix;
-      int suffix_len;
-
       /* If it ends at "df", "dd" or "dl", take it as type of decimal floating
          point.  Return DECFLOAT.  */
 
@@ -1886,7 +1987,8 @@ static const struct token tokentab3[] =
   {
     {">>=", ASSIGN_MODIFY, BINOP_RSH, 0},
     {"<<=", ASSIGN_MODIFY, BINOP_LSH, 0},
-    {"->*", ARROW_STAR, BINOP_END, 1}
+    {"->*", ARROW_STAR, BINOP_END, 1},
+    {"...", DOTDOTDOT, BINOP_END, 0}
   };
 
 static const struct token tokentab2[] =
@@ -2495,9 +2597,8 @@ classify_name (struct block *block)
 
 /* Like classify_name, but used by the inner loop of the lexer, when a
    name might have already been seen.  FIRST_NAME is true if the token
-   in `yylval' is the first component of a name, false otherwise.  If
-   this function returns NAME, it might not have updated `yylval'.
-   This is ok because the caller only cares about TYPENAME.  */
+   in `yylval' is the first component of a name, false otherwise.  */
+
 static int
 classify_inner_name (struct block *block, int first_name)
 {
@@ -2511,18 +2612,28 @@ classify_inner_name (struct block *block, int first_name)
   if (TYPE_CODE (type) != TYPE_CODE_STRUCT
       && TYPE_CODE (type) != TYPE_CODE_UNION
       && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
-    /* We know the caller won't expect us to update yylval.  */
-    return NAME;
+    return ERROR;
 
   copy = copy_name (yylval.tsym.stoken);
-  new_type = cp_lookup_nested_type (yylval.tsym.type, copy, block);
+  yylval.ssym.sym = cp_lookup_nested_symbol (yylval.tsym.type, copy, block);
+  if (yylval.ssym.sym == NULL)
+    return ERROR;
 
-  if (new_type == NULL)
-    /* We know the caller won't expect us to update yylval.  */
-    return NAME;
+  switch (SYMBOL_CLASS (yylval.ssym.sym))
+    {
+    case LOC_BLOCK:
+    case LOC_LABEL:
+      return ERROR;
 
-  yylval.tsym.type = new_type;
-  return TYPENAME;
+    case LOC_TYPEDEF:
+      yylval.tsym.type = SYMBOL_TYPE (yylval.ssym.sym);;
+      return TYPENAME;
+
+    default:
+      yylval.ssym.is_a_field_of_this = 0;
+      return NAME;
+    }
+  internal_error (__FILE__, __LINE__, _("not reached"));
 }
 
 /* The outer level of a two-level lexer.  This calls the inner lexer
@@ -2582,7 +2693,7 @@ yylex (void)
 						first_iter);
 	  /* We keep going until we either run out of names, or until
 	     we have a qualified name which is not a type.  */
-	  if (classification != TYPENAME)
+	  if (classification != TYPENAME && classification != NAME)
 	    {
 	      /* Push the final component and leave the loop.  */
 	      VEC_safe_push (token_and_value, token_fifo, &next);
diff --git a/gdb/c-lang.c b/gdb/c-lang.c
index c4d841f..b5135d5 100644
--- a/gdb/c-lang.c
+++ b/gdb/c-lang.c
@@ -87,7 +87,7 @@ classify_type (struct type *elttype, struct gdbarch *gdbarch,
      that would do the wrong thing.  */
   while (elttype)
     {
-      char *name = TYPE_NAME (elttype);
+      const char *name = TYPE_NAME (elttype);
 
       if (TYPE_CODE (elttype) == TYPE_CODE_CHAR || !name)
 	{
@@ -202,7 +202,6 @@ c_printstr (struct ui_file *stream, struct type *type,
   unsigned int things_printed = 0;
   int in_quotes = 0;
   int need_comma = 0;
-  int width = TYPE_LENGTH (type);
   struct obstack wchar_buf, output;
   struct cleanup *cleanup;
   struct wchar_iterator *iter;
@@ -847,6 +846,7 @@ const struct language_defn c_language_defn =
   c_print_typedef,		/* Print a typedef using appropriate syntax */
   c_val_print,			/* Print a value using appropriate syntax */
   c_value_print,		/* Print a top-level value */
+  default_read_var_value,	/* la_read_var_value */
   NULL,				/* Language specific skip_trampoline */
   NULL,				/* name_of_this */
   basic_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
@@ -863,7 +863,7 @@ const struct language_defn c_language_defn =
   default_print_array_index,
   default_pass_by_reference,
   c_get_string,
-  strcmp_iw_ordered,
+  NULL,				/* la_get_symbol_name_cmp */
   iterate_over_symbols,
   LANG_MAGIC
 };
@@ -970,6 +970,7 @@ const struct language_defn cplus_language_defn =
   c_print_typedef,		/* Print a typedef using appropriate syntax */
   c_val_print,			/* Print a value using appropriate syntax */
   c_value_print,		/* Print a top-level value */
+  default_read_var_value,	/* la_read_var_value */
   cplus_skip_trampoline,	/* Language specific skip_trampoline */
   "this",                       /* name_of_this */
   cp_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
@@ -986,7 +987,7 @@ const struct language_defn cplus_language_defn =
   default_print_array_index,
   cp_pass_by_reference,
   c_get_string,
-  strcmp_iw_ordered,
+  NULL,				/* la_get_symbol_name_cmp */
   iterate_over_symbols,
   LANG_MAGIC
 };
@@ -1011,6 +1012,7 @@ const struct language_defn asm_language_defn =
   c_print_typedef,		/* Print a typedef using appropriate syntax */
   c_val_print,			/* Print a value using appropriate syntax */
   c_value_print,		/* Print a top-level value */
+  default_read_var_value,	/* la_read_var_value */
   NULL,				/* Language specific skip_trampoline */
   NULL,				/* name_of_this */
   basic_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
@@ -1027,7 +1029,7 @@ const struct language_defn asm_language_defn =
   default_print_array_index,
   default_pass_by_reference,
   c_get_string,
-  strcmp_iw_ordered,
+  NULL,				/* la_get_symbol_name_cmp */
   iterate_over_symbols,
   LANG_MAGIC
 };
@@ -1057,6 +1059,7 @@ const struct language_defn minimal_language_defn =
   c_print_typedef,		/* Print a typedef using appropriate syntax */
   c_val_print,			/* Print a value using appropriate syntax */
   c_value_print,		/* Print a top-level value */
+  default_read_var_value,	/* la_read_var_value */
   NULL,				/* Language specific skip_trampoline */
   NULL,				/* name_of_this */
   basic_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
@@ -1073,7 +1076,7 @@ const struct language_defn minimal_language_defn =
   default_print_array_index,
   default_pass_by_reference,
   c_get_string,
-  strcmp_iw_ordered,
+  NULL,				/* la_get_symbol_name_cmp */
   iterate_over_symbols,
   LANG_MAGIC
 };
diff --git a/gdb/c-lang.h b/gdb/c-lang.h
index e8c632f..5cbe34d 100644
--- a/gdb/c-lang.h
+++ b/gdb/c-lang.h
@@ -71,14 +71,14 @@ extern void c_print_typedef (struct type *,
 			     struct symbol *,
 			     struct ui_file *);
 
-extern int c_val_print (struct type *, const gdb_byte *,
-			int, CORE_ADDR,
-			struct ui_file *, int,
-			const struct value *,
-			const struct value_print_options *);
-
-extern int c_value_print (struct value *, struct ui_file *,
-			  const struct value_print_options *);
+extern void c_val_print (struct type *, const gdb_byte *,
+			 int, CORE_ADDR,
+			 struct ui_file *, int,
+			 const struct value *,
+			 const struct value_print_options *);
+
+extern void c_value_print (struct value *, struct ui_file *,
+			   const struct value_print_options *);
 
 /* These are in c-lang.c: */
 
diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c
index db254dc..a5892b5 100644
--- a/gdb/c-typeprint.c
+++ b/gdb/c-typeprint.c
@@ -142,7 +142,7 @@ static void
 cp_type_print_derivation_info (struct ui_file *stream,
 			       struct type *type)
 {
-  char *name;
+  const char *name;
   int i;
 
   for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
@@ -165,8 +165,8 @@ cp_type_print_derivation_info (struct ui_file *stream,
 /* Print the C++ method arguments ARGS to the file STREAM.  */
 
 static void
-cp_type_print_method_args (struct type *mtype, char *prefix,
-			   char *varstring, int staticp,
+cp_type_print_method_args (struct type *mtype, const char *prefix,
+			   const char *varstring, int staticp,
 			   struct ui_file *stream)
 {
   struct field *args = TYPE_FIELDS (mtype);
@@ -238,7 +238,7 @@ c_type_print_varspec_prefix (struct type *type,
 			     int show, int passed_a_ptr,
 			     int need_post_space)
 {
-  char *name;
+  const char *name;
 
   if (type == 0)
     return;
@@ -471,7 +471,7 @@ is_type_conversion_operator (struct type *type, int i, int j)
      by their name is pretty terrible.  But I don't think our present
      data structure gives us any other way to tell.  If you know of
      some other way, feel free to rewrite this function.  */
-  char *name = TYPE_FN_FIELDLIST_NAME (type, i);
+  const char *name = TYPE_FN_FIELDLIST_NAME (type, i);
 
   if (strncmp (name, "operator", 8) != 0)
     return 0;
@@ -717,7 +717,6 @@ c_type_print_base (struct type *type, struct ui_file *stream,
 {
   int i;
   int len, real_len;
-  int lastval;
   enum
     {
       s_none, s_public, s_private, s_protected
@@ -990,8 +989,8 @@ c_type_print_base (struct type *type, struct ui_file *stream,
 	    {
 	      struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
 	      int j, len2 = TYPE_FN_FIELDLIST_LENGTH (type, i);
-	      char *method_name = TYPE_FN_FIELDLIST_NAME (type, i);
-	      char *name = type_name_no_tag (type);
+	      const char *method_name = TYPE_FN_FIELDLIST_NAME (type, i);
+	      const char *name = type_name_no_tag (type);
 	      int is_constructor = name && strcmp (method_name,
 						   name) == 0;
 
@@ -1194,9 +1193,10 @@ c_type_print_base (struct type *type, struct ui_file *stream,
 	}
       else if (show > 0 || TYPE_TAG_NAME (type) == NULL)
 	{
+	  LONGEST lastval = 0;
+
 	  fprintf_filtered (stream, "{");
 	  len = TYPE_NFIELDS (type);
-	  lastval = 0;
 	  for (i = 0; i < len; i++)
 	    {
 	      QUIT;
@@ -1204,11 +1204,11 @@ c_type_print_base (struct type *type, struct ui_file *stream,
 		fprintf_filtered (stream, ", ");
 	      wrap_here ("    ");
 	      fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
-	      if (lastval != TYPE_FIELD_BITPOS (type, i))
+	      if (lastval != TYPE_FIELD_ENUMVAL (type, i))
 		{
-		  fprintf_filtered (stream, " = %d", 
-				    TYPE_FIELD_BITPOS (type, i));
-		  lastval = TYPE_FIELD_BITPOS (type, i);
+		  fprintf_filtered (stream, " = %s",
+				    plongest (TYPE_FIELD_ENUMVAL (type, i)));
+		  lastval = TYPE_FIELD_ENUMVAL (type, i);
 		}
 	      lastval++;
 	    }
diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c
index 9949015..7a1bb02 100644
--- a/gdb/c-valprint.c
+++ b/gdb/c-valprint.c
@@ -31,31 +31,6 @@
 #include "target.h"
 

 
-/* Print function pointer with inferior address ADDRESS onto stdio
-   stream STREAM.  */
-
-static void
-print_function_pointer_address (struct gdbarch *gdbarch,
-				CORE_ADDR address,
-				struct ui_file *stream,
-				int addressprint)
-{
-  CORE_ADDR func_addr
-    = gdbarch_convert_from_func_ptr_addr (gdbarch, address,
-					  &current_target);
-
-  /* If the function pointer is represented by a description, print
-     the address of the description.  */
-  if (addressprint && func_addr != address)
-    {
-      fputs_filtered ("@", stream);
-      fputs_filtered (paddress (gdbarch, address), stream);
-      fputs_filtered (": ", stream);
-    }
-  print_address_demangle (gdbarch, func_addr, stream, demangle);
-}
-
-
 /* A helper for c_textual_element_type.  This checks the name of the
    typedef.  This is bogus but it isn't apparent that the compiler
    provides us the help we may need.  */
@@ -141,11 +116,22 @@ c_textual_element_type (struct type *type, char format)
   return 0;
 }
 
+/* Decorations for C.  */
+
+static const struct generic_val_print_decorations c_decorations =
+{
+  "",
+  " + ",
+  " * I",
+  "true",
+  "false",
+  "void"
+};
+
 /* See val_print for a description of the various parameters of this
-   function; they are identical.  The semantics of the return value is
-   also identical to val_print.  */
+   function; they are identical.  */
 
-int
+void
 c_val_print (struct type *type, const gdb_byte *valaddr,
 	     int embedded_offset, CORE_ADDR address,
 	     struct ui_file *stream, int recurse,
@@ -159,7 +145,6 @@ c_val_print (struct type *type, const gdb_byte *valaddr,
   struct type *elttype, *unresolved_elttype;
   struct type *unresolved_type = type;
   unsigned eltlen;
-  LONGEST val;
   CORE_ADDR addr;
 
   CHECK_TYPEDEF (type);
@@ -242,16 +227,6 @@ c_val_print (struct type *type, const gdb_byte *valaddr,
       addr = address + embedded_offset;
       goto print_unpacked_pointer;
 
-    case TYPE_CODE_MEMBERPTR:
-      if (options->format)
-	{
-	  val_print_scalar_formatted (type, valaddr, embedded_offset,
-				      original_value, options, 0, stream);
-	  break;
-	}
-      cp_print_class_member (valaddr + embedded_offset, type, stream, "&");
-      break;
-
     case TYPE_CODE_METHODPTR:
       cplus_print_method_ptr (valaddr + embedded_offset, type, stream);
       break;
@@ -272,28 +247,34 @@ c_val_print (struct type *type, const gdb_byte *valaddr,
 	  CORE_ADDR addr
 	    = extract_typed_address (valaddr + embedded_offset, type);
 
-	  print_function_pointer_address (gdbarch, addr, stream,
-					  options->addressprint);
+	  print_function_pointer_address (options, gdbarch, addr, stream);
 	  break;
 	}
       unresolved_elttype = TYPE_TARGET_TYPE (type);
       elttype = check_typedef (unresolved_elttype);
 	{
+	  int want_space;
+
 	  addr = unpack_pointer (type, valaddr + embedded_offset);
 	print_unpacked_pointer:
 
+	  want_space = 0;
+
 	  if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
 	    {
 	      /* Try to print what function it points to.  */
-	      print_function_pointer_address (gdbarch, addr, stream,
-					      options->addressprint);
-	      /* Return value is irrelevant except for string
-		 pointers.  */
-	      return (0);
+	      print_function_pointer_address (options, gdbarch, addr, stream);
+	      return;
 	    }
 
-	  if (options->addressprint)
-	    fputs_filtered (paddress (gdbarch, addr), stream);
+	  if (options->symbol_print)
+	    want_space = print_address_demangle (options, gdbarch, addr,
+						 stream, demangle);
+	  else if (options->addressprint)
+	    {
+	      fputs_filtered (paddress (gdbarch, addr), stream);
+	      want_space = 1;
+	    }
 
 	  /* For a pointer to a textual type, also print the string
 	     pointed to, unless pointer is null.  */
@@ -302,6 +283,8 @@ c_val_print (struct type *type, const gdb_byte *valaddr,
 				      options->format)
 	      && addr != 0)
 	    {
+	      if (want_space)
+		fputs_filtered (" ", stream);
 	      i = val_print_string (unresolved_elttype, NULL,
 				    addr, -1,
 				    stream, options);
@@ -312,16 +295,22 @@ c_val_print (struct type *type, const gdb_byte *valaddr,
 	      CORE_ADDR vt_address = unpack_pointer (type,
 						     valaddr
 						     + embedded_offset);
-
 	      struct minimal_symbol *msymbol =
 	      lookup_minimal_symbol_by_pc (vt_address);
-	      if ((msymbol != NULL)
+
+	      /* If 'symbol_print' is set, we did the work above.  */
+	      if (!options->symbol_print
+		  && (msymbol != NULL)
 		  && (vt_address == SYMBOL_VALUE_ADDRESS (msymbol)))
 		{
+		  if (want_space)
+		    fputs_filtered (" ", stream);
 		  fputs_filtered (" <", stream);
 		  fputs_filtered (SYMBOL_PRINT_NAME (msymbol), stream);
 		  fputs_filtered (">", stream);
+		  want_space = 1;
 		}
+
 	      if (vt_address && options->vtblprint)
 		{
 		  struct value *vt_val;
@@ -330,6 +319,9 @@ c_val_print (struct type *type, const gdb_byte *valaddr,
 		  struct block *block = (struct block *) NULL;
 		  int is_this_fld;
 
+		  if (want_space)
+		    fputs_filtered (" ", stream);
+
 		  if (msymbol != NULL)
 		    wsym = lookup_symbol (SYMBOL_LINKAGE_NAME (msymbol),
 					  block, VAR_DOMAIN,
@@ -353,51 +345,7 @@ c_val_print (struct type *type, const gdb_byte *valaddr,
 		    }
 		}
 	    }
-
-	  /* Return number of characters printed, including the
-	     terminating '\0' if we reached the end.  val_print_string
-	     takes care including the terminating '\0' if
-	     necessary.  */
-	  return i;
-	}
-      break;
-
-    case TYPE_CODE_REF:
-      elttype = check_typedef (TYPE_TARGET_TYPE (type));
-      if (options->addressprint)
-	{
-	  CORE_ADDR addr
-	    = extract_typed_address (valaddr + embedded_offset, type);
-
-	  fprintf_filtered (stream, "@");
-	  fputs_filtered (paddress (gdbarch, addr), stream);
-	  if (options->deref_ref)
-	    fputs_filtered (": ", stream);
-	}
-      /* De-reference the reference.  */
-      if (options->deref_ref)
-	{
-	  if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF)
-	    {
-	      struct value *deref_val;
-
-	      deref_val = coerce_ref_if_computed (original_value);
-	      if (deref_val != NULL)
-		{
-		  /* More complicated computed references are not supported.  */
-		  gdb_assert (embedded_offset == 0);
-		}
-	      else
-		deref_val = value_at (TYPE_TARGET_TYPE (type),
-				      unpack_pointer (type,
-						      (valaddr
-						       + embedded_offset)));
-
-	      common_val_print (deref_val, stream, recurse, options,
-				current_language);
-	    }
-	  else
-	    fputs_filtered ("???", stream);
+	  return;
 	}
       break;
 
@@ -424,8 +372,7 @@ c_val_print (struct type *type, const gdb_byte *valaddr,
 	  CORE_ADDR addr
 	    = extract_typed_address (valaddr + offset, field_type);
 
-	  print_function_pointer_address (gdbarch, addr, stream,
-					  options->addressprint);
+	  print_function_pointer_address (options, gdbarch, addr, stream);
 	}
       else
 	cp_print_value_fields_rtti (type, valaddr,
@@ -435,91 +382,6 @@ c_val_print (struct type *type, const gdb_byte *valaddr,
 				    NULL, 0);
       break;
 
-    case TYPE_CODE_ENUM:
-      if (options->format)
-	{
-	  val_print_scalar_formatted (type, valaddr, embedded_offset,
-				      original_value, options, 0, stream);
-	  break;
-	}
-      len = TYPE_NFIELDS (type);
-      val = unpack_long (type, valaddr + embedded_offset);
-      for (i = 0; i < len; i++)
-	{
-	  QUIT;
-	  if (val == TYPE_FIELD_BITPOS (type, i))
-	    {
-	      break;
-	    }
-	}
-      if (i < len)
-	{
-	  fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
-	}
-      else
-	{
-	  print_longest (stream, 'd', 0, val);
-	}
-      break;
-
-    case TYPE_CODE_FLAGS:
-      if (options->format)
-	val_print_scalar_formatted (type, valaddr, embedded_offset,
-				    original_value, options, 0, stream);
-      else
-	val_print_type_code_flags (type, valaddr + embedded_offset,
-				   stream);
-      break;
-
-    case TYPE_CODE_FUNC:
-    case TYPE_CODE_METHOD:
-      if (options->format)
-	{
-	  val_print_scalar_formatted (type, valaddr, embedded_offset,
-				      original_value, options, 0, stream);
-	  break;
-	}
-      /* FIXME, we should consider, at least for ANSI C language,
-         eliminating the distinction made between FUNCs and POINTERs
-         to FUNCs.  */
-      fprintf_filtered (stream, "{");
-      type_print (type, "", stream, -1);
-      fprintf_filtered (stream, "} ");
-      /* Try to print what function it points to, and its address.  */
-      print_address_demangle (gdbarch, address, stream, demangle);
-      break;
-
-    case TYPE_CODE_BOOL:
-      if (options->format || options->output_format)
-	{
-	  struct value_print_options opts = *options;
-	  opts.format = (options->format ? options->format
-			 : options->output_format);
-	  val_print_scalar_formatted (type, valaddr, embedded_offset,
-				      original_value, &opts, 0, stream);
-	}
-      else
-	{
-	  val = unpack_long (type, valaddr + embedded_offset);
-	  if (val == 0)
-	    fputs_filtered ("false", stream);
-	  else if (val == 1)
-	    fputs_filtered ("true", stream);
-	  else
-	    print_longest (stream, 'd', 0, val);
-	}
-      break;
-
-    case TYPE_CODE_RANGE:
-      /* FIXME: create_range_type does not set the unsigned bit in a
-         range type (I think it probably should copy it from the
-         target type), so we won't print values which are too large to
-         fit in a signed integer correctly.  */
-      /* FIXME: Doesn't handle ranges of enums correctly.  (Can't just
-         print with the target type, though, because the size of our
-         type and the target type might differ).  */
-      /* FALLTHROUGH */
-
     case TYPE_CODE_INT:
       if (options->format || options->output_format)
 	{
@@ -547,98 +409,38 @@ c_val_print (struct type *type, const gdb_byte *valaddr,
 	}
       break;
 
-    case TYPE_CODE_CHAR:
-      if (options->format || options->output_format)
-	{
-	  struct value_print_options opts = *options;
-	  opts.format = (options->format ? options->format
-			 : options->output_format);
-	  val_print_scalar_formatted (type, valaddr, embedded_offset,
-				      original_value, &opts, 0, stream);
-	}
-      else
+    case TYPE_CODE_MEMBERPTR:
+      if (!options->format)
 	{
-	  val = unpack_long (type, valaddr + embedded_offset);
-	  if (TYPE_UNSIGNED (type))
-	    fprintf_filtered (stream, "%u", (unsigned int) val);
-	  else
-	    fprintf_filtered (stream, "%d", (int) val);
-	  fputs_filtered (" ", stream);
-	  LA_PRINT_CHAR (val, unresolved_type, stream);
+	  cp_print_class_member (valaddr + embedded_offset, type, stream, "&");
+	  break;
 	}
-      break;
+      /* FALLTHROUGH */
 
+    case TYPE_CODE_REF:
+    case TYPE_CODE_ENUM:
+    case TYPE_CODE_FLAGS:
+    case TYPE_CODE_FUNC:
+    case TYPE_CODE_METHOD:
+    case TYPE_CODE_BOOL:
+    case TYPE_CODE_RANGE:
     case TYPE_CODE_FLT:
-      if (options->format)
-	{
-	  val_print_scalar_formatted (type, valaddr, embedded_offset,
-				      original_value, options, 0, stream);
-	}
-      else
-	{
-	  print_floating (valaddr + embedded_offset, type, stream);
-	}
-      break;
-
     case TYPE_CODE_DECFLOAT:
-      if (options->format)
-	val_print_scalar_formatted (type, valaddr, embedded_offset,
-				    original_value, options, 0, stream);
-      else
-	print_decimal_floating (valaddr + embedded_offset,
-				type, stream);
-      break;
-
     case TYPE_CODE_VOID:
-      fprintf_filtered (stream, "void");
-      break;
-
     case TYPE_CODE_ERROR:
-      fprintf_filtered (stream, "%s", TYPE_ERROR_NAME (type));
-      break;
-
     case TYPE_CODE_UNDEF:
-      /* This happens (without TYPE_FLAG_STUB set) on systems which
-         don't use dbx xrefs (NO_DBX_XREFS in gcc) if a file has a
-         "struct foo *bar" and no complete type for struct foo in that
-         file.  */
-      fprintf_filtered (stream, _("<incomplete type>"));
-      break;
-
     case TYPE_CODE_COMPLEX:
-      if (options->format)
-	val_print_scalar_formatted (TYPE_TARGET_TYPE (type),
-				    valaddr, embedded_offset,
-				    original_value, options, 0, stream);
-      else
-	print_floating (valaddr + embedded_offset,
-			TYPE_TARGET_TYPE (type),
-			stream);
-      fprintf_filtered (stream, " + ");
-      if (options->format)
-	val_print_scalar_formatted (TYPE_TARGET_TYPE (type),
-				    valaddr,
-				    embedded_offset
-				    + TYPE_LENGTH (TYPE_TARGET_TYPE (type)),
-				    original_value,
-				    options, 0, stream);
-      else
-	print_floating (valaddr + embedded_offset
-			+ TYPE_LENGTH (TYPE_TARGET_TYPE (type)),
-			TYPE_TARGET_TYPE (type),
-			stream);
-      fprintf_filtered (stream, " * I");
-      break;
-
+    case TYPE_CODE_CHAR:
     default:
-      error (_("Invalid C/C++ type code %d in symbol table."),
-	     TYPE_CODE (type));
+      generic_val_print (type, valaddr, embedded_offset, address,
+			 stream, recurse, original_value, options,
+			 &c_decorations);
+      break;
     }
   gdb_flush (stream);
-  return (0);
 }
 

-int
+void
 c_value_print (struct value *val, struct ui_file *stream, 
 	       const struct value_print_options *options)
 {
@@ -697,22 +499,13 @@ c_value_print (struct value *val, struct ui_file *stream,
 
 	  if (value_entirely_available (val))
  	    {
-	      real_type = value_rtti_target_type (val, &full, &top, &using_enc);
+	      real_type = value_rtti_indirect_type (val, &full, &top,
+						    &using_enc);
 	      if (real_type)
 		{
 		  /* RTTI entry found.  */
-		  if (TYPE_CODE (type) == TYPE_CODE_PTR)
-		    {
-		      /* Create a pointer type pointing to the real
-			 type.  */
-		      type = lookup_pointer_type (real_type);
-		    }
-		  else
-		    {
-		      /* Create a reference type referencing the real
-			 type.  */
-		      type = lookup_reference_type (real_type);
-		    }
+		  type = real_type;
+
 		  /* Need to adjust pointer value.  */
 		  val = value_from_pointer (type, value_as_address (val) - top);
 
@@ -751,10 +544,11 @@ c_value_print (struct value *val, struct ui_file *stream,
 			    full ? "" : _(" [incomplete object]"));
 	  /* Print out object: enclosing type is same as real_type if
 	     full.  */
-	  return val_print (value_enclosing_type (val),
-			    value_contents_for_printing (val), 0,
-			    value_address (val), stream, 0,
-			    val, &opts, current_language);
+	  val_print (value_enclosing_type (val),
+		     value_contents_for_printing (val), 0,
+		     value_address (val), stream, 0,
+		     val, &opts, current_language);
+	  return;
           /* Note: When we look up RTTI entries, we don't get any
              information on const or volatile attributes.  */
 	}
@@ -763,17 +557,18 @@ c_value_print (struct value *val, struct ui_file *stream,
 	  /* No RTTI information, so let's do our best.  */
 	  fprintf_filtered (stream, "(%s ?) ",
 			    TYPE_NAME (value_enclosing_type (val)));
-	  return val_print (value_enclosing_type (val),
-			    value_contents_for_printing (val), 0,
-			    value_address (val), stream, 0,
-			    val, &opts, current_language);
+	  val_print (value_enclosing_type (val),
+		     value_contents_for_printing (val), 0,
+		     value_address (val), stream, 0,
+		     val, &opts, current_language);
+	  return;
 	}
       /* Otherwise, we end up at the return outside this "if".  */
     }
 
-  return val_print (val_type, value_contents_for_printing (val),
-		    value_embedded_offset (val),
-		    value_address (val),
-		    stream, 0,
-		    val, &opts, current_language);
+  val_print (val_type, value_contents_for_printing (val),
+	     value_embedded_offset (val),
+	     value_address (val),
+	     stream, 0,
+	     val, &opts, current_language);
 }
diff --git a/gdb/cc-with-dwz.sh b/gdb/cc-with-dwz.sh
new file mode 100755
index 0000000..f66deb1
--- /dev/null
+++ b/gdb/cc-with-dwz.sh
@@ -0,0 +1,80 @@
+#! /bin/sh
+# Wrapper around gcc to run 'dwz' when running the testsuite.
+
+# Copyright (C) 2010-2012 Free Software Foundation, Inc.
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# This program requires dwz in addition to gcc.
+#
+# Example usage:
+#
+# bash$ cd $objdir/gdb/testsuite
+# bash$ runtest \
+#   CC_FOR_TARGET="/bin/sh $srcdir/cc-with-dwz.sh gcc" \
+#   CXX_FOR_TARGET="/bin/sh $srcdir/cc-with-dwz.sh g++"
+#
+
+myname=cc-with-dwz.sh
+
+DWZ=${DWZ:-dwz}
+
+have_link=unknown
+next_is_output_file=no
+output_file=a.out
+
+for arg in "$@"
+do
+    if [ "$next_is_output_file" = "yes" ]
+    then
+	output_file="$arg"
+	next_is_output_file=no
+	continue
+    fi
+
+    # Poor man's gcc argument parser.
+    # We don't need to handle all arguments, we just need to know if we're
+    # doing a link and what the output file is.
+    # It's not perfect, but it seems to work well enough for the task at hand.
+    case "$arg" in
+    "-c") have_link=no ;;
+    "-E") have_link=no ;;
+    "-S") have_link=no ;;
+    "-o") next_is_output_file=yes ;;
+    esac
+done
+
+if [ "$next_is_output_file" = "yes" ]
+then
+    echo "$myname: Unable to find output file" >&2
+    exit 1
+fi
+
+if [ "$have_link" = "no" ]
+then
+    "$@"
+    exit $?
+fi
+
+"$@"
+rc=$?
+[ $rc != 0 ] && exit $rc
+if [ ! -f "$output_file" ]
+then
+    echo "$myname: Internal error: $output_file missing." >&2
+    exit 1
+fi
+
+$DWZ "$output_file" > /dev/null 2>&1
+
+exit 0
diff --git a/gdb/cc-with-index.sh b/gdb/cc-with-index.sh
index 22eefaa..644ba34 100644
--- a/gdb/cc-with-index.sh
+++ b/gdb/cc-with-index.sh
@@ -107,7 +107,7 @@ then
     exit 1
 fi
 
-$GDB --batch-silent -nx -ex "file $output_file" -ex "save gdb-index $output_dir"
+$GDB --batch-silent -nx -ex "set auto-load no" -ex "file $output_file" -ex "save gdb-index $output_dir"
 rc=$?
 [ $rc != 0 ] && exit $rc
 
diff --git a/gdb/charset.c b/gdb/charset.c
index f32736a..89baf46 100644
--- a/gdb/charset.c
+++ b/gdb/charset.c
@@ -27,6 +27,7 @@
 #include "vec.h"
 #include "environ.h"
 #include "arch-utils.h"
+#include "gdb_vecs.h"
 
 #include <stddef.h>
 #include "gdb_string.h"
@@ -107,7 +108,7 @@
 #define EILSEQ ENOENT
 #endif
 
-iconv_t
+static iconv_t
 phony_iconv_open (const char *to, const char *from)
 {
   /* We allow conversions from UTF-32BE, wchar_t, and the host charset.
@@ -123,13 +124,13 @@ phony_iconv_open (const char *to, const char *from)
   return !strcmp (from, "UTF-32BE");
 }
 
-int
+static int
 phony_iconv_close (iconv_t arg)
 {
   return 0;
 }
 
-size_t
+static size_t
 phony_iconv (iconv_t utf_flag, const char **inbuf, size_t *inbytesleft,
 	     char **outbuf, size_t *outbytesleft)
 {
@@ -717,8 +718,6 @@ wchar_iterate (struct wchar_iterator *iter,
 
 extern initialize_file_ftype _initialize_charset; /* -Wmissing-prototype */
 
-DEF_VEC_P (char_ptr);
-
 static VEC (char_ptr) *charsets;
 
 #ifdef PHONY_ICONV
@@ -840,7 +839,7 @@ find_charset_names (void)
 	 parse the glibc and libiconv formats; feel free to add others
 	 as needed.  */
 
-      while (!feof (in))
+      while (in != NULL && !feof (in))
 	{
 	  /* The size of buf is chosen arbitrarily.  */
 	  char buf[1024];
@@ -910,11 +909,8 @@ find_charset_names (void)
   if (fail)
     {
       /* Some error occurred, so drop the vector.  */
-      int ix;
-      char *elt;
-      for (ix = 0; VEC_iterate (char_ptr, charsets, ix, elt); ++ix)
-	xfree (elt);
-      VEC_truncate (char_ptr, charsets, 0);
+      free_char_ptr_vec (charsets);
+      charsets = NULL;
     }
   else
     VEC_safe_push (char_ptr, charsets, NULL);
diff --git a/gdb/cleanups.c b/gdb/cleanups.c
new file mode 100644
index 0000000..d2f70fc
--- /dev/null
+++ b/gdb/cleanups.c
@@ -0,0 +1,293 @@
+/* Cleanup routines for GDB, the GNU debugger.
+
+   Copyright (C) 1986, 1988-2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "gdb_assert.h"
+
+/* The cleanup list records things that have to be undone
+   if an error happens (descriptors to be closed, memory to be freed, etc.)
+   Each link in the chain records a function to call and an
+   argument to give it.
+
+   Use make_cleanup to add an element to the cleanup chain.
+   Use do_cleanups to do all cleanup actions back to a given
+   point in the chain.  Use discard_cleanups to remove cleanups
+   from the chain back to a given point, not doing them.
+
+   If the argument is pointer to allocated memory, then you need
+   to additionally set the 'free_arg' member to a function that will
+   free that memory.  This function will be called both when the cleanup
+   is executed and when it's discarded.  */
+
+struct cleanup
+{
+  struct cleanup *next;
+  void (*function) (void *);
+  void (*free_arg) (void *);
+  void *arg;
+};
+
+/* Used to mark the end of a cleanup chain.
+   The value is chosen so that it:
+   - is non-NULL so that make_cleanup never returns NULL,
+   - causes a segv if dereferenced
+     [though this won't catch errors that a value of, say,
+     ((struct cleanup *) -1) will]
+   - displays as something useful when printed in gdb.
+   This is const for a bit of extra robustness.
+   It is initialized to coax gcc into putting it into .rodata.
+   All fields are initialized to survive -Wextra.  */
+static const struct cleanup sentinel_cleanup = { 0, 0, 0, 0 };
+
+/* Handy macro to use when referring to sentinel_cleanup.  */
+#define SENTINEL_CLEANUP ((struct cleanup *) &sentinel_cleanup)
+
+/* Chain of cleanup actions established with make_cleanup,
+   to be executed if an error happens.  */
+static struct cleanup *cleanup_chain = SENTINEL_CLEANUP;
+
+/* Chain of cleanup actions established with make_final_cleanup,
+   to be executed when gdb exits.  */
+static struct cleanup *final_cleanup_chain = SENTINEL_CLEANUP;
+
+/* Main worker routine to create a cleanup.
+   PMY_CHAIN is a pointer to either cleanup_chain or final_cleanup_chain.
+   FUNCTION is the function to call to perform the cleanup.
+   ARG is passed to FUNCTION when called.
+   FREE_ARG, if non-NULL, is called after the cleanup is performed.
+
+   The result is a pointer to the previous chain pointer
+   to be passed later to do_cleanups or discard_cleanups.  */
+
+static struct cleanup *
+make_my_cleanup2 (struct cleanup **pmy_chain, make_cleanup_ftype *function,
+		  void *arg,  void (*free_arg) (void *))
+{
+  struct cleanup *new
+    = (struct cleanup *) xmalloc (sizeof (struct cleanup));
+  struct cleanup *old_chain = *pmy_chain;
+
+  new->next = *pmy_chain;
+  new->function = function;
+  new->free_arg = free_arg;
+  new->arg = arg;
+  *pmy_chain = new;
+
+  gdb_assert (old_chain != NULL);
+  return old_chain;
+}
+
+/* Worker routine to create a cleanup without a destructor.
+   PMY_CHAIN is a pointer to either cleanup_chain or final_cleanup_chain.
+   FUNCTION is the function to call to perform the cleanup.
+   ARG is passed to FUNCTION when called.
+
+   The result is a pointer to the previous chain pointer
+   to be passed later to do_cleanups or discard_cleanups.  */
+
+static struct cleanup *
+make_my_cleanup (struct cleanup **pmy_chain, make_cleanup_ftype *function,
+		 void *arg)
+{
+  return make_my_cleanup2 (pmy_chain, function, arg, NULL);
+}
+
+/* Add a new cleanup to the cleanup_chain,
+   and return the previous chain pointer
+   to be passed later to do_cleanups or discard_cleanups.
+   Args are FUNCTION to clean up with, and ARG to pass to it.  */
+
+struct cleanup *
+make_cleanup (make_cleanup_ftype *function, void *arg)
+{
+  return make_my_cleanup (&cleanup_chain, function, arg);
+}
+
+/* Same as make_cleanup except also includes TDOR, a destructor to free ARG.
+   DTOR is invoked when the cleanup is performed or when it is discarded.  */
+
+struct cleanup *
+make_cleanup_dtor (make_cleanup_ftype *function, void *arg,
+		   void (*dtor) (void *))
+{
+  return make_my_cleanup2 (&cleanup_chain,
+			   function, arg, dtor);
+}
+
+/* Same as make_cleanup except the cleanup is added to final_cleanup_chain.  */
+
+struct cleanup *
+make_final_cleanup (make_cleanup_ftype *function, void *arg)
+{
+  return make_my_cleanup (&final_cleanup_chain, function, arg);
+}
+
+/* Worker routine to perform cleanups.
+   PMY_CHAIN is a pointer to either cleanup_chain or final_cleanup_chain.
+   OLD_CHAIN is the result of a "make" cleanup routine.
+   Cleanups are performed until we get back to the old end of the chain.  */
+
+static void
+do_my_cleanups (struct cleanup **pmy_chain,
+		struct cleanup *old_chain)
+{
+  struct cleanup *ptr;
+
+  while ((ptr = *pmy_chain) != old_chain)
+    {
+      *pmy_chain = ptr->next;	/* Do this first in case of recursion.  */
+      (*ptr->function) (ptr->arg);
+      if (ptr->free_arg)
+	(*ptr->free_arg) (ptr->arg);
+      xfree (ptr);
+    }
+}
+
+/* Return a value that can be passed to do_cleanups, do_final_cleanups to
+   indicate perform all cleanups.  */
+
+struct cleanup *
+all_cleanups (void)
+{
+  return SENTINEL_CLEANUP;
+}
+
+/* Discard cleanups and do the actions they describe
+   until we get back to the point OLD_CHAIN in the cleanup_chain.  */
+
+void
+do_cleanups (struct cleanup *old_chain)
+{
+  do_my_cleanups (&cleanup_chain, old_chain);
+}
+
+/* Discard cleanups and do the actions they describe
+   until we get back to the point OLD_CHAIN in the final_cleanup_chain.  */
+
+void
+do_final_cleanups (struct cleanup *old_chain)
+{
+  do_my_cleanups (&final_cleanup_chain, old_chain);
+}
+
+/* Main worker routine to discard cleanups.
+   PMY_CHAIN is a pointer to either cleanup_chain or final_cleanup_chain.
+   OLD_CHAIN is the result of a "make" cleanup routine.
+   Cleanups are discarded until we get back to the old end of the chain.  */
+
+static void
+discard_my_cleanups (struct cleanup **pmy_chain,
+		     struct cleanup *old_chain)
+{
+  struct cleanup *ptr;
+
+  while ((ptr = *pmy_chain) != old_chain)
+    {
+      *pmy_chain = ptr->next;
+      if (ptr->free_arg)
+	(*ptr->free_arg) (ptr->arg);
+      xfree (ptr);
+    }
+}
+
+/* Discard cleanups, not doing the actions they describe,
+   until we get back to the point OLD_CHAIN in the cleanup chain.  */
+
+void
+discard_cleanups (struct cleanup *old_chain)
+{
+  discard_my_cleanups (&cleanup_chain, old_chain);
+}
+
+/* Discard final cleanups, not doing the actions they describe,
+   until we get back to the point OLD_CHAIN in the final cleanup chain.  */
+
+void
+discard_final_cleanups (struct cleanup *old_chain)
+{
+  discard_my_cleanups (&final_cleanup_chain, old_chain);
+}
+
+/* Main worker routine to save cleanups.
+   PMY_CHAIN is a pointer to either cleanup_chain or final_cleanup_chain.
+   The chain is emptied and the result is a pointer to the old chain.  */
+
+static struct cleanup *
+save_my_cleanups (struct cleanup **pmy_chain)
+{
+  struct cleanup *old_chain = *pmy_chain;
+
+  *pmy_chain = SENTINEL_CLEANUP;
+  return old_chain;
+}
+
+/* Set the cleanup_chain to 0, and return the old cleanup_chain.  */
+
+struct cleanup *
+save_cleanups (void)
+{
+  return save_my_cleanups (&cleanup_chain);
+}
+
+/* Set the final_cleanup_chain to 0, and return the old
+   final_cleanup_chain.  */
+
+struct cleanup *
+save_final_cleanups (void)
+{
+  return save_my_cleanups (&final_cleanup_chain);
+}
+
+/* Main worker routine to save cleanups.
+   PMY_CHAIN is a pointer to either cleanup_chain or final_cleanup_chain.
+   The chain is restored from CHAIN.  */
+
+static void
+restore_my_cleanups (struct cleanup **pmy_chain, struct cleanup *chain)
+{
+  *pmy_chain = chain;
+}
+
+/* Restore the cleanup chain from a previously saved chain.  */
+
+void
+restore_cleanups (struct cleanup *chain)
+{
+  restore_my_cleanups (&cleanup_chain, chain);
+}
+
+/* Restore the final cleanup chain from a previously saved chain.  */
+
+void
+restore_final_cleanups (struct cleanup *chain)
+{
+  restore_my_cleanups (&final_cleanup_chain, chain);
+}
+
+/* Provide a known function that does nothing, to use as a base for
+   a possibly long chain of cleanups.  This is useful where we
+   use the cleanup chain for handling normal cleanups as well as dealing
+   with cleanups that need to be done as a result of a call to error().
+   In such cases, we may not be certain where the first cleanup is, unless
+   we have a do-nothing one to always use as the base.  */
+
+void
+null_cleanup (void *arg)
+{
+}
diff --git a/gdb/cleanups.h b/gdb/cleanups.h
new file mode 100644
index 0000000..ed62786
--- /dev/null
+++ b/gdb/cleanups.h
@@ -0,0 +1,69 @@
+/* Cleanups.
+   Copyright (C) 1986, 1988-2005, 2007-2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef CLEANUPS_H
+#define CLEANUPS_H
+
+/* Outside of cleanups.c, this is an opaque type.  */
+struct cleanup;
+
+/* NOTE: cagney/2000-03-04: This typedef is strictly for the
+   make_cleanup function declarations below.  Do not use this typedef
+   as a cast when passing functions into the make_cleanup() code.
+   Instead either use a bounce function or add a wrapper function.
+   Calling a f(char*) function with f(void*) is non-portable.  */
+typedef void (make_cleanup_ftype) (void *);
+
+/* Function type for the dtor in make_cleanup_dtor.  */
+typedef void (make_cleanup_dtor_ftype) (void *);
+
+/* WARNING: The result of the "make cleanup" routines is not the intuitive
+   choice of being a handle on the just-created cleanup.  Instead it is an
+   opaque handle of the cleanup mechanism and represents all cleanups created
+   from that point onwards.
+   The result is guaranteed to be non-NULL though.  */
+
+extern struct cleanup *make_cleanup (make_cleanup_ftype *, void *);
+
+extern struct cleanup *make_cleanup_dtor (make_cleanup_ftype *, void *,
+					  make_cleanup_dtor_ftype *);
+
+extern struct cleanup *make_final_cleanup (make_cleanup_ftype *, void *);
+
+/* A special value to pass to do_cleanups and do_final_cleanups
+   to tell them to do all cleanups.  */
+extern struct cleanup *all_cleanups (void);
+
+extern void do_cleanups (struct cleanup *);
+extern void do_final_cleanups (struct cleanup *);
+
+extern void discard_cleanups (struct cleanup *);
+extern void discard_final_cleanups (struct cleanup *);
+
+extern struct cleanup *save_cleanups (void);
+extern struct cleanup *save_final_cleanups (void);
+
+extern void restore_cleanups (struct cleanup *);
+extern void restore_final_cleanups (struct cleanup *);
+
+/* A no-op cleanup.
+   This is useful when you want to establish a known reference point
+   to pass to do_cleanups.  */
+extern void null_cleanup (void *);
+
+#endif /* CLEANUPS_H */
diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c
index c38167a..c905ca2 100644
--- a/gdb/cli/cli-cmds.c
+++ b/gdb/cli/cli-cmds.c
@@ -201,7 +201,7 @@ static const char script_ext_off[] = "off";
 static const char script_ext_soft[] = "soft";
 static const char script_ext_strict[] = "strict";
 
-static const char *script_ext_enums[] = {
+static const char *const script_ext_enums[] = {
   script_ext_off,
   script_ext_soft,
   script_ext_strict,
@@ -254,7 +254,8 @@ static void
 complete_command (char *arg, int from_tty)
 {
   int argpoint;
-  char **completions, *point, *arg_prefix;
+  char *point, *arg_prefix;
+  VEC (char_ptr) *completions;
 
   dont_repeat ();
 
@@ -282,33 +283,30 @@ complete_command (char *arg, int from_tty)
 
   if (completions)
     {
-      int item, size;
+      int ix, size = VEC_length (char_ptr, completions);
+      char *item, *prev = NULL;
 
-      for (size = 0; completions[size]; ++size)
-	;
-      qsort (completions, size, sizeof (char *), compare_strings);
+      qsort (VEC_address (char_ptr, completions), size,
+	     sizeof (char *), compare_strings);
 
       /* We do extra processing here since we only want to print each
 	 unique item once.  */
-      item = 0;
-      while (item < size)
+      for (ix = 0; VEC_iterate (char_ptr, completions, ix, item); ++ix)
 	{
 	  int next_item;
 
-	  printf_unfiltered ("%s%s\n", arg_prefix, completions[item]);
-	  next_item = item + 1;
-	  while (next_item < size
-		 && ! strcmp (completions[item], completions[next_item]))
+	  if (prev == NULL || strcmp (item, prev) != 0)
 	    {
-	      xfree (completions[next_item]);
-	      ++next_item;
+	      printf_unfiltered ("%s%s\n", arg_prefix, item);
+	      xfree (prev);
+	      prev = item;
 	    }
-
-	  xfree (completions[item]);
-	  item = next_item;
+	  else
+	    xfree (item);
 	}
 
-      xfree (completions);
+      xfree (prev);
+      VEC_free (char_ptr, completions);
     }
 }
 
@@ -417,7 +415,7 @@ cd_command (char *dir, int from_tty)
     {
       if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.'
 	  && (p[2] == 0 || IS_DIR_SEPARATOR (p[2])))
-	strcpy (p, p + 2);
+	memmove (p, p + 2, strlen (p + 2) + 1);
       else if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.' && p[2] == '.'
 	       && (p[3] == 0 || IS_DIR_SEPARATOR (p[3])))
 	{
@@ -436,7 +434,7 @@ cd_command (char *dir, int from_tty)
 		++p;
 	      else
 		{
-		  strcpy (q - 1, p + 3);
+		  memmove (q - 1, p + 3, strlen (p + 3) + 1);
 		  p = q - 1;
 		}
 	    }
@@ -513,11 +511,21 @@ find_and_open_script (const char *script_file, int search_path,
   do_cleanups (old_cleanups);
 
   *streamp = fdopen (fd, FOPEN_RT);
+  if (*streamp == NULL)
+    {
+      int save_errno = errno;
+
+      close (fd);
+      if (full_pathp)
+	xfree (*full_pathp);
+      errno = save_errno;
+      return 0;
+    }
+
   return 1;
 }
 
-/* Load script FILE, which has already been opened as STREAM.
-   STREAM is closed before we return.  */
+/* Load script FILE, which has already been opened as STREAM.  */
 
 static void
 source_script_from_stream (FILE *stream, const char *file)
@@ -529,9 +537,7 @@ source_script_from_stream (FILE *stream, const char *file)
 
       TRY_CATCH (e, RETURN_MASK_ERROR)
 	{
-          /* The python support reopens the file using python functions,
-             so there's no point in passing STREAM here.  */
-	  source_python_script (file);
+	  source_python_script (stream, file);
 	}
       if (e.reason < 0)
 	{
@@ -545,12 +551,9 @@ source_script_from_stream (FILE *stream, const char *file)
 	  else
 	    {
 	      /* Nope, just punt.  */
-	      fclose (stream);
 	      throw_exception (e);
 	    }
 	}
-      else
-	fclose (stream);
     }
   else
     script_from_file (stream, file);
@@ -584,6 +587,7 @@ source_script_with_search (const char *file, int from_tty, int search_path)
     }
 
   old_cleanups = make_cleanup (xfree, full_path);
+  make_cleanup_fclose (stream);
   /* The python support reopens the file, so we need to pass full_path here
      in case the file was found on the search path.  It's useful to do this
      anyway so that error messages show the actual file used.  But only do
@@ -957,7 +961,7 @@ list_command (char *arg, int from_tty)
 	  else
 	    sals_end = decode_line_1 (&arg1, DECODE_LINE_LIST_MODE,
 				      sal.symtab, sal.line);
-	  filter_sals (&sals);
+	  filter_sals (&sals_end);
 	  if (sals_end.nelts == 0)
 	    return;
 	  if (sals_end.nelts > 1)
@@ -1091,7 +1095,7 @@ disassemble_current_function (int flags)
   struct frame_info *frame;
   struct gdbarch *gdbarch;
   CORE_ADDR low, high, pc;
-  char *name;
+  const char *name;
 
   frame = get_selected_frame (_("No frame selected."));
   gdbarch = get_frame_arch (frame);
@@ -1129,7 +1133,7 @@ disassemble_command (char *arg, int from_tty)
 {
   struct gdbarch *gdbarch = get_current_arch ();
   CORE_ADDR low, high;
-  char *name;
+  const char *name;
   CORE_ADDR pc;
   int flags;
 
@@ -1235,7 +1239,8 @@ show_user (char *args, int from_tty)
       char *comname = args;
 
       c = lookup_cmd (&comname, cmdlist, "", 0, 1);
-      if (c->class != class_user)
+      /* c->user_commands would be NULL if it's a python command.  */
+      if (c->class != class_user || !c->user_commands)
 	error (_("Not a user command."));
       show_user_1 (c, "", args, gdb_stdout);
     }
@@ -1418,7 +1423,6 @@ alias_command (char *args, int from_tty)
     }
   else
     {
-      int i;
       dyn_string_t alias_prefix_dyn_string, command_prefix_dyn_string;
       char *alias_prefix, *command_prefix;
       struct cmd_list_element *c_alias, *c_command;
@@ -1906,7 +1910,7 @@ Two arguments (separated by a comma) are taken as a range of memory to dump,\n\
 Run the ``make'' program using the rest of the line as arguments."));
   set_cmd_completer (c, filename_completer);
   add_cmd ("user", no_class, show_user, _("\
-Show definitions of user defined commands.\n\
+Show definitions of non-python user defined commands.\n\
 Argument is the name of the user defined command.\n\
 With no argument, show definitions of all user defined commands."), &showlist);
   add_com ("apropos", class_support, apropos_command,
@@ -1914,8 +1918,8 @@ With no argument, show definitions of all user defined commands."), &showlist);
 
   add_setshow_integer_cmd ("max-user-call-depth", no_class,
 			   &max_user_call_depth, _("\
-Set the max call depth for user-defined commands."), _("\
-Show the max call depth for user-defined commands."), NULL,
+Set the max call depth for non-python user-defined commands."), _("\
+Show the max call depth for non-python user-defined commands."), NULL,
 			   NULL,
 			   show_max_user_call_depth,
 			   &setlist, &showlist);
diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c
index f168ff1..c337b43 100644
--- a/gdb/cli/cli-decode.c
+++ b/gdb/cli/cli-decode.c
@@ -119,9 +119,7 @@ cmd_type (struct cmd_list_element *cmd)
 }
 
 void
-set_cmd_completer (struct cmd_list_element *cmd,
-		   char **(*completer) (struct cmd_list_element *self,
-					char *text, char *word))
+set_cmd_completer (struct cmd_list_element *cmd, completer_ftype *completer)
 {
   cmd->completer = completer; /* Ok.  */
 }
@@ -412,7 +410,7 @@ add_setshow_cmd_full (char *name,
 void
 add_setshow_enum_cmd (char *name,
 		      enum command_class class,
-		      const char *enumlist[],
+		      const char *const *enumlist,
 		      const char **var,
 		      const char *set_doc,
 		      const char *show_doc,
@@ -1018,7 +1016,7 @@ print_doc_line (struct ui_file *stream, char *str)
   line_buffer[p - str] = '\0';
   if (islower (line_buffer[0]))
     line_buffer[0] = toupper (line_buffer[0]);
-  ui_out_text (current_uiout, line_buffer);
+  fputs_filtered (line_buffer, stream);
 }
 
 /* Print one-line help for command C.
@@ -1639,26 +1637,20 @@ lookup_cmd_composition (char *text,
    "foo" and we want to complete to "foobar".  If WORD is "oo", return
    "oobar"; if WORD is "baz/foo", return "baz/foobar".  */
 
-char **
+VEC (char_ptr) *
 complete_on_cmdlist (struct cmd_list_element *list, char *text, char *word)
 {
   struct cmd_list_element *ptr;
-  char **matchlist;
-  int sizeof_matchlist;
-  int matches;
+  VEC (char_ptr) *matchlist = NULL;
   int textlen = strlen (text);
   int pass;
   int saw_deprecated_match = 0;
 
-  sizeof_matchlist = 10;
-  matchlist = (char **) xmalloc (sizeof_matchlist * sizeof (char *));
-  matches = 0;
-
   /* We do one or two passes.  In the first pass, we skip deprecated
      commands.  If we see no matching commands in the first pass, and
      if we did happen to see a matching deprecated command, we do
      another loop to collect those.  */
-  for (pass = 0; matches == 0 && pass < 2; ++pass)
+  for (pass = 0; matchlist == 0 && pass < 2; ++pass)
     {
       for (ptr = list; ptr; ptr = ptr->next)
 	if (!strncmp (ptr->name, text, textlen)
@@ -1666,6 +1658,8 @@ complete_on_cmdlist (struct cmd_list_element *list, char *text, char *word)
 	    && (ptr->func
 		|| ptr->prefixlist))
 	  {
+	    char *match;
+
 	    if (pass == 0)
 	      {
 		if ((ptr->flags & CMD_DEPRECATED) != 0)
@@ -1675,31 +1669,22 @@ complete_on_cmdlist (struct cmd_list_element *list, char *text, char *word)
 		  }
 	      }
 
-	    if (matches == sizeof_matchlist)
-	      {
-		sizeof_matchlist *= 2;
-		matchlist = (char **) xrealloc ((char *) matchlist,
-						(sizeof_matchlist
-						 * sizeof (char *)));
-	      }
-
-	    matchlist[matches] = (char *)
-	      xmalloc (strlen (word) + strlen (ptr->name) + 1);
+	    match = (char *) xmalloc (strlen (word) + strlen (ptr->name) + 1);
 	    if (word == text)
-	      strcpy (matchlist[matches], ptr->name);
+	      strcpy (match, ptr->name);
 	    else if (word > text)
 	      {
 		/* Return some portion of ptr->name.  */
-		strcpy (matchlist[matches], ptr->name + (word - text));
+		strcpy (match, ptr->name + (word - text));
 	      }
 	    else
 	      {
 		/* Return some of text plus ptr->name.  */
-		strncpy (matchlist[matches], word, text - word);
-		matchlist[matches][text - word] = '\0';
-		strcat (matchlist[matches], ptr->name);
+		strncpy (match, word, text - word);
+		match[text - word] = '\0';
+		strcat (match, ptr->name);
 	      }
-	    ++matches;
+	    VEC_safe_push (char_ptr, matchlist, match);
 	  }
       /* If we saw no matching deprecated commands in the first pass,
 	 just bail out.  */
@@ -1707,18 +1692,6 @@ complete_on_cmdlist (struct cmd_list_element *list, char *text, char *word)
 	break;
     }
 
-  if (matches == 0)
-    {
-      xfree (matchlist);
-      matchlist = 0;
-    }
-  else
-    {
-      matchlist = (char **) xrealloc ((char *) matchlist, ((matches + 1)
-							* sizeof (char *)));
-      matchlist[matches] = (char *) 0;
-    }
-
   return matchlist;
 }
 
@@ -1732,64 +1705,39 @@ complete_on_cmdlist (struct cmd_list_element *list, char *text, char *word)
    and we want to complete to "foobar".  If WORD is "oo", return
    "oobar"; if WORD is "baz/foo", return "baz/foobar".  */
 
-char **
-complete_on_enum (const char *enumlist[],
+VEC (char_ptr) *
+complete_on_enum (const char *const *enumlist,
 		  char *text,
 		  char *word)
 {
-  char **matchlist;
-  int sizeof_matchlist;
-  int matches;
+  VEC (char_ptr) *matchlist = NULL;
   int textlen = strlen (text);
   int i;
   const char *name;
 
-  sizeof_matchlist = 10;
-  matchlist = (char **) xmalloc (sizeof_matchlist * sizeof (char *));
-  matches = 0;
-
   for (i = 0; (name = enumlist[i]) != NULL; i++)
     if (strncmp (name, text, textlen) == 0)
       {
-	if (matches == sizeof_matchlist)
-	  {
-	    sizeof_matchlist *= 2;
-	    matchlist = (char **) xrealloc ((char *) matchlist,
-					    (sizeof_matchlist
-					     * sizeof (char *)));
-	  }
+	char *match;
 
-	matchlist[matches] = (char *)
-	  xmalloc (strlen (word) + strlen (name) + 1);
+	match = (char *) xmalloc (strlen (word) + strlen (name) + 1);
 	if (word == text)
-	  strcpy (matchlist[matches], name);
+	  strcpy (match, name);
 	else if (word > text)
 	  {
 	    /* Return some portion of name.  */
-	    strcpy (matchlist[matches], name + (word - text));
+	    strcpy (match, name + (word - text));
 	  }
 	else
 	  {
 	    /* Return some of text plus name.  */
-	    strncpy (matchlist[matches], word, text - word);
-	    matchlist[matches][text - word] = '\0';
-	    strcat (matchlist[matches], name);
+	    strncpy (match, word, text - word);
+	    match[text - word] = '\0';
+	    strcat (match, name);
 	  }
-	++matches;
+	VEC_safe_push (char_ptr, matchlist, match);
       }
 
-  if (matches == 0)
-    {
-      xfree (matchlist);
-      matchlist = 0;
-    }
-  else
-    {
-      matchlist = (char **) xrealloc ((char *) matchlist, ((matches + 1)
-							   * sizeof (char *)));
-      matchlist[matches] = (char *) 0;
-    }
-
   return matchlist;
 }
 
diff --git a/gdb/cli/cli-decode.h b/gdb/cli/cli-decode.h
index 56ef3ae..b5e0790 100644
--- a/gdb/cli/cli-decode.h
+++ b/gdb/cli/cli-decode.h
@@ -18,6 +18,10 @@
 #if !defined (CLI_DECODE_H)
 #define CLI_DECODE_H 1
 
+/* This file defines the private interfaces for any code implementing
+   command internals.  */
+
+/* Include the public interfaces.  */
 #include "command.h"
 
 struct re_pattern_buffer;
@@ -164,8 +168,7 @@ struct cmd_list_element
        For example, suppose TEXT is "foo" and we want to complete to
        "foobar".  If WORD is "oo", return "oobar"; if WORD is
        "baz/foo", return "baz/foobar".  */
-    char **(*completer) (struct cmd_list_element *cmd, 
-			 char *text, char *word);
+    completer_ftype *completer;
 
     /* Destruction routine for this command.  If non-NULL, this is
        called when this command instance is destroyed.  This may be
@@ -185,7 +188,7 @@ struct cmd_list_element
 
     /* Pointer to NULL terminated list of enumerated values (like
        argv).  */
-    const char **enums;
+    const char *const *enums;
 
     /* Pointer to command strings of user-defined commands */
     struct command_line *user_commands;
@@ -209,94 +212,6 @@ struct cmd_list_element
     struct cmd_list_element *alias_chain;
   };
 
-/* Flag for an ambiguous cmd_list result.  */
-#define CMD_LIST_AMBIGUOUS ((struct cmd_list_element *) -1)
-
-/* API to the manipulation of command lists.  */
-
-extern struct cmd_list_element *add_cmd (char *, enum command_class,
-					 void (*fun) (char *, int), char *,
-					 struct cmd_list_element **);
-
-extern struct cmd_list_element *add_alias_cmd (char *, char *,
-					       enum command_class, int,
-					       struct cmd_list_element **);
-
-extern struct cmd_list_element *add_prefix_cmd (char *, enum command_class,
-						void (*fun) (char *, int),
-						char *,
-						struct cmd_list_element **,
-						char *, int,
-						struct cmd_list_element **);
-
-extern struct cmd_list_element *add_abbrev_prefix_cmd (char *,
-						       enum command_class,
-						       void (*fun) (char *,
-								    int),
-						       char *,
-						       struct cmd_list_element
-						       **, char *, int,
-						       struct cmd_list_element
-						       **);
-
-/* Set the commands corresponding callback.  */
-
-extern void set_cmd_cfunc (struct cmd_list_element *cmd,
-			   void (*cfunc) (char *args, int from_tty));
-
-extern void set_cmd_sfunc (struct cmd_list_element *cmd,
-			   void (*sfunc) (char *args, int from_tty,
-					  struct cmd_list_element * c));
-
-extern void set_cmd_completer (struct cmd_list_element *cmd,
-			       char **(*completer) (struct cmd_list_element *self,
-						    char *text, char *word));
-
-/* HACK: cagney/2002-02-23: Code, mostly in tracepoints.c, grubs
-   around in cmd objects to test the value of the commands sfunc().  */
-extern int cmd_cfunc_eq (struct cmd_list_element *cmd,
-			 void (*cfunc) (char *args, int from_tty));
-
-/* Access to the command's local context.  */
-extern void set_cmd_context (struct cmd_list_element *cmd, void *context);
-extern void *get_cmd_context (struct cmd_list_element *cmd);
-
-extern struct cmd_list_element *lookup_cmd (char **,
-					    struct cmd_list_element *, char *,
-					    int, int);
-
-extern struct cmd_list_element *lookup_cmd_1 (char **,
-					      struct cmd_list_element *,
-					      struct cmd_list_element **,
-					      int);
-
-extern struct cmd_list_element *
-  deprecate_cmd (struct cmd_list_element *, char * );
-
-extern void
-  deprecated_cmd_warning (char **);
-
-extern int
-  lookup_cmd_composition (char *text,
-                        struct cmd_list_element **alias,
-                        struct cmd_list_element **prefix_cmd,
-                        struct cmd_list_element **cmd);
-
-extern struct cmd_list_element *add_com (char *, enum command_class,
-					 void (*fun) (char *, int), char *);
-
-extern struct cmd_list_element *add_com_alias (char *, char *,
-					       enum command_class, int);
-
-extern struct cmd_list_element *add_info (char *, void (*fun) (char *, int),
-					  char *);
-
-extern struct cmd_list_element *add_info_alias (char *, char *, int);
-
-extern char **complete_on_cmdlist (struct cmd_list_element *, char *, char *);
-
-extern char **complete_on_enum (const char *enumlist[], char *, char *);
-
 extern void help_cmd_list (struct cmd_list_element *, enum command_class,
 			   char *, int, struct ui_file *);
 
@@ -304,9 +219,6 @@ extern void help_cmd_list (struct cmd_list_element *, enum command_class,
 
 extern void help_cmd (char *, struct ui_file *);
 
-extern void help_list (struct cmd_list_element *, char *,
-		       enum command_class, struct ui_file *);
-
 extern void apropos_cmd (struct ui_file *, struct cmd_list_element *,
                          struct re_pattern_buffer *, char *);
 
diff --git a/gdb/cli/cli-interp.c b/gdb/cli/cli-interp.c
index 9c44b24..70b6c28 100644
--- a/gdb/cli/cli-interp.c
+++ b/gdb/cli/cli-interp.c
@@ -19,7 +19,6 @@
 
 #include "defs.h"
 #include "interps.h"
-#include "wrapper.h"
 #include "event-top.h"
 #include "ui-out.h"
 #include "cli-out.h"
diff --git a/gdb/cli/cli-logging.c b/gdb/cli/cli-logging.c
index 0c5bda8..6ff064a 100644
--- a/gdb/cli/cli-logging.c
+++ b/gdb/cli/cli-logging.c
@@ -20,6 +20,7 @@
 #include "defs.h"
 #include "gdbcmd.h"
 #include "ui-out.h"
+#include "interps.h"
 #include "gdb_assert.h"
 
 #include "gdb_string.h"
@@ -115,11 +116,17 @@ set_logging_redirect (char *args, int from_tty, struct cmd_list_element *c)
 			    logging_filename);
     }
 
-  gdb_stdout = output;
-  gdb_stderr = output;
-  gdb_stdlog = output;
-  gdb_stdtarg = output;
-  gdb_stdtargerr = output;
+  /* Give the current interpreter a chance to do anything special that
+     it might need for logging, such as updating other channels.  */
+  if (current_interp_set_logging (1, output, NULL) == 0)
+    {
+      gdb_stdout = output;
+      gdb_stdlog = output;
+      gdb_stderr = output;
+      gdb_stdtarg = output;
+      gdb_stdtargerr = output;
+    }
+
   logging_no_redirect_file = new_logging_no_redirect_file;
 
   /* There is a former output pushed on the ui_out_redirect stack.  We
@@ -147,19 +154,25 @@ show_logging_redirect (struct ui_file *file, int from_tty,
 static void
 pop_output_files (void)
 {
-  /* Only delete one of the files -- they are all set to the same
-     value.  */
-  ui_file_delete (gdb_stdout);
   if (logging_no_redirect_file)
     {
       ui_file_delete (logging_no_redirect_file);
       logging_no_redirect_file = NULL;
     }
-  gdb_stdout = saved_output.out;
-  gdb_stderr = saved_output.err;
-  gdb_stdlog = saved_output.log;
-  gdb_stdtarg = saved_output.targ;
-  gdb_stdtargerr = saved_output.targ;
+
+  if (current_interp_set_logging (0, NULL, NULL) == 0)
+    {
+      /* Only delete one of the files -- they are all set to the same
+	 value.  */
+      ui_file_delete (gdb_stdout);
+
+      gdb_stdout = saved_output.out;
+      gdb_stderr = saved_output.err;
+      gdb_stdlog = saved_output.log;
+      gdb_stdtarg = saved_output.targ;
+      gdb_stdtargerr = saved_output.targ;
+    }
+
   saved_output.out = NULL;
   saved_output.err = NULL;
   saved_output.log = NULL;
@@ -175,6 +188,7 @@ handle_redirections (int from_tty)
 {
   struct cleanup *cleanups;
   struct ui_file *output;
+  struct ui_file *no_redirect_file = NULL;
 
   if (saved_filename != NULL)
     {
@@ -191,7 +205,7 @@ handle_redirections (int from_tty)
   /* Redirects everything to gdb_stdout while this is running.  */
   if (!logging_redirect)
     {
-      struct ui_file *no_redirect_file = output;
+      no_redirect_file = output;
 
       output = tee_file_new (gdb_stdout, 0, no_redirect_file, 0);
       if (output == NULL)
@@ -220,14 +234,22 @@ handle_redirections (int from_tty)
   saved_output.targ = gdb_stdtarg;
   saved_output.targerr = gdb_stdtargerr;
 
-  gdb_stdout = output;
-  gdb_stderr = output;
-  gdb_stdlog = output;
-  gdb_stdtarg = output;
-  gdb_stdtargerr = output;
+  /* Let the interpreter do anything it needs.  */
+  if (current_interp_set_logging (1, output, no_redirect_file) == 0)
+    {
+      gdb_stdout = output;
+      gdb_stdlog = output;
+      gdb_stderr = output;
+      gdb_stdtarg = output;
+      gdb_stdtargerr = output;
+    }
 
-  if (ui_out_redirect (current_uiout, output) < 0)
-    warning (_("Current output protocol does not support redirection"));
+  /* Don't do the redirect for MI, it confuses MI's ui-out scheme.  */
+  if (!ui_out_is_mi_like_p (current_uiout))
+    {
+      if (ui_out_redirect (current_uiout, output) < 0)
+	warning (_("Current output protocol does not support redirection"));
+    }
 }
 
 static void
diff --git a/gdb/cli/cli-script.c b/gdb/cli/cli-script.c
index c8da8c8..4b6c416 100644
--- a/gdb/cli/cli-script.c
+++ b/gdb/cli/cli-script.c
@@ -1178,6 +1178,12 @@ recurse_read_control_structure (char * (*read_next_line_func) (void),
   return ret;
 }
 
+static void
+restore_interp (void *arg)
+{
+  interp_set_temp (interp_name ((struct interp *)arg));
+}
+
 /* Read lines from the input stream and accumulate them in a chain of
    struct command_line's, which is then returned.  For input from a
    terminal, the special command "end" is used to mark the end of the
@@ -1210,8 +1216,21 @@ read_command_lines (char *prompt_arg, int from_tty, int parse_commands,
 	}
     }
 
-  head = read_command_lines_1 (read_next_line, parse_commands,
-			       validator, closure);
+
+  /* Reading commands assumes the CLI behavior, so temporarily
+     override the current interpreter with CLI.  */
+  if (current_interp_named_p (INTERP_CONSOLE))
+    head = read_command_lines_1 (read_next_line, parse_commands,
+				 validator, closure);
+  else
+    {
+      struct interp *old_interp = interp_set_temp (INTERP_CONSOLE);
+      struct cleanup *old_chain = make_cleanup (restore_interp, old_interp);
+
+      head = read_command_lines_1 (read_next_line, parse_commands,
+				   validator, closure);
+      do_cleanups (old_chain);
+    }
 
   if (deprecated_readline_end_hook && from_tty && input_from_terminal_p ())
     {
@@ -1614,11 +1633,9 @@ script_from_file (FILE *stream, const char *file)
   if (stream == NULL)
     internal_error (__FILE__, __LINE__, _("called with NULL file pointer!"));
 
-  old_cleanups = make_cleanup_fclose (stream);
-
   old_lines.old_line = source_line_number;
   old_lines.old_file = source_file_name;
-  make_cleanup (source_cleanup_lines, &old_lines);
+  old_cleanups = make_cleanup (source_cleanup_lines, &old_lines);
   source_line_number = 0;
   source_file_name = file;
   /* This will get set every time we read a line.  So it won't stay ""
diff --git a/gdb/cli/cli-setshow.c b/gdb/cli/cli-setshow.c
index 14fef7c..521ac0e 100644
--- a/gdb/cli/cli-setshow.c
+++ b/gdb/cli/cli-setshow.c
@@ -314,10 +314,10 @@ do_setshow_command (char *arg, int from_tty, struct cmd_list_element *c)
   else if (c->type == show_cmd)
     {
       struct cleanup *old_chain;
-      struct ui_stream *stb;
+      struct ui_file *stb;
 
-      stb = ui_out_stream_new (uiout);
-      old_chain = make_cleanup_ui_out_stream_delete (stb);
+      stb = mem_fileopen ();
+      old_chain = make_cleanup_ui_file_delete (stb);
 
       /* Possibly call the pre hook.  */
       if (c->pre_show_hook)
@@ -327,29 +327,29 @@ do_setshow_command (char *arg, int from_tty, struct cmd_list_element *c)
 	{
 	case var_string:
 	  if (*(char **) c->var)
-	    fputstr_filtered (*(char **) c->var, '"', stb->stream);
+	    fputstr_filtered (*(char **) c->var, '"', stb);
 	  break;
 	case var_string_noescape:
 	case var_optional_filename:
 	case var_filename:
 	case var_enum:
 	  if (*(char **) c->var)
-	    fputs_filtered (*(char **) c->var, stb->stream);
+	    fputs_filtered (*(char **) c->var, stb);
 	  break;
 	case var_boolean:
-	  fputs_filtered (*(int *) c->var ? "on" : "off", stb->stream);
+	  fputs_filtered (*(int *) c->var ? "on" : "off", stb);
 	  break;
 	case var_auto_boolean:
 	  switch (*(enum auto_boolean*) c->var)
 	    {
 	    case AUTO_BOOLEAN_TRUE:
-	      fputs_filtered ("on", stb->stream);
+	      fputs_filtered ("on", stb);
 	      break;
 	    case AUTO_BOOLEAN_FALSE:
-	      fputs_filtered ("off", stb->stream);
+	      fputs_filtered ("off", stb);
 	      break;
 	    case AUTO_BOOLEAN_AUTO:
-	      fputs_filtered ("auto", stb->stream);
+	      fputs_filtered ("auto", stb);
 	      break;
 	    default:
 	      internal_error (__FILE__, __LINE__,
@@ -362,17 +362,17 @@ do_setshow_command (char *arg, int from_tty, struct cmd_list_element *c)
 	case var_zuinteger:
 	  if (c->var_type == var_uinteger
 	      && *(unsigned int *) c->var == UINT_MAX)
-	    fputs_filtered ("unlimited", stb->stream);
+	    fputs_filtered ("unlimited", stb);
 	  else
-	    fprintf_filtered (stb->stream, "%u", *(unsigned int *) c->var);
+	    fprintf_filtered (stb, "%u", *(unsigned int *) c->var);
 	  break;
 	case var_integer:
 	case var_zinteger:
 	  if (c->var_type == var_integer
 	      && *(int *) c->var == INT_MAX)
-	    fputs_filtered ("unlimited", stb->stream);
+	    fputs_filtered ("unlimited", stb);
 	  else
-	    fprintf_filtered (stb->stream, "%d", *(int *) c->var);
+	    fprintf_filtered (stb, "%d", *(int *) c->var);
 	  break;
 
 	default:
@@ -389,7 +389,7 @@ do_setshow_command (char *arg, int from_tty, struct cmd_list_element *c)
 	ui_out_field_stream (uiout, "value", stb);
       else
 	{
-	  char *value = ui_file_xstrdup (stb->stream, NULL);
+	  char *value = ui_file_xstrdup (stb, NULL);
 
 	  make_cleanup (xfree, value);
 	  if (c->show_value_func != NULL)
diff --git a/gdb/cli/cli-utils.c b/gdb/cli/cli-utils.c
index a7b2718..81a4acc 100644
--- a/gdb/cli/cli-utils.c
+++ b/gdb/cli/cli-utils.c
@@ -223,6 +223,18 @@ skip_spaces (char *chp)
   return chp;
 }
 
+/* A const-correct version of the above.  */
+
+const char *
+skip_spaces_const (const char *chp)
+{
+  if (chp == NULL)
+    return NULL;
+  while (*chp && isspace (*chp))
+    chp++;
+  return chp;
+}
+
 /* See documentation in cli-utils.h.  */
 
 char *
@@ -245,3 +257,46 @@ remove_trailing_whitespace (const char *start, char *s)
 
   return s;
 }
+
+/* See documentation in cli-utils.h.  */
+
+char *
+extract_arg (char **arg)
+{
+  char *result, *copy;
+
+  if (!*arg)
+    return NULL;
+
+  /* Find the start of the argument.  */
+  *arg = skip_spaces (*arg);
+  if (!**arg)
+    return NULL;
+  result = *arg;
+
+  /* Find the end of the argument.  */
+  *arg = skip_to_space (*arg + 1);
+
+  if (result == *arg)
+    return NULL;
+
+  copy = xmalloc (*arg - result + 1);
+  memcpy (copy, result, *arg - result);
+  copy[*arg - result] = '\0';
+
+  return copy;
+}
+
+/* See documentation in cli-utils.h.  */
+
+int
+check_for_argument (char **str, char *arg, int arg_len)
+{
+  if (strncmp (*str, arg, arg_len) == 0
+      && ((*str)[arg_len] == '\0' || isspace ((*str)[arg_len])))
+    {
+      *str += arg_len;
+      return 1;
+    }
+  return 0;
+}
diff --git a/gdb/cli/cli-utils.h b/gdb/cli/cli-utils.h
index e23c7d8..9fb12ba 100644
--- a/gdb/cli/cli-utils.h
+++ b/gdb/cli/cli-utils.h
@@ -94,6 +94,10 @@ extern int number_is_in_list (char *list, int number);
 
 extern char *skip_spaces (char *inp);
 
+/* A const-correct version of the above.  */
+
+extern const char *skip_spaces_const (const char *inp);
+
 /* Skip leading non-whitespace characters in INP, returning an updated
    pointer.  If INP is NULL, return NULL.  */
 
@@ -103,4 +107,17 @@ extern char *skip_to_space (char *inp);
    START.  */
 
 extern char *remove_trailing_whitespace (const char *start, char *s);
+
+/* A helper function to extract an argument from *ARG.  An argument is
+   delimited by whitespace.  The return value is either NULL if no
+   argument was found, or an xmalloc'd string.  */
+
+extern char *extract_arg (char **arg);
+
+/* A helper function that looks for an argument at the start of a
+   string.  The argument must also either be at the end of the string,
+   or be followed by whitespace.  Returns 1 if it finds the argument,
+   0 otherwise.  If the argument is found, it updates *STR.  */
+extern int check_for_argument (char **str, char *arg, int arg_len);
+
 #endif /* CLI_UTILS_H */
diff --git a/gdb/coffread.c b/gdb/coffread.c
index c727228..b0a8b82 100644
--- a/gdb/coffread.c
+++ b/gdb/coffread.c
@@ -311,7 +311,7 @@ cs_section_address (struct coff_symbol *cs, bfd *abfd)
   args.resultp = §
   bfd_map_over_sections (abfd, find_targ_sec, &args);
   if (sect != NULL)
-    addr = bfd_get_section_vma (objfile->obfd, sect);
+    addr = bfd_get_section_vma (abfd, sect);
   return addr;
 }
 
@@ -1306,7 +1306,6 @@ static const char *
 coff_getfilename (union internal_auxent *aux_entry)
 {
   static char buffer[BUFSIZ];
-  char *temp;
   const char *result;
 
   if (aux_entry->x_file.x_n.x_zeroes == 0)
@@ -1455,10 +1454,11 @@ patch_type (struct type *type, struct type *real_type)
 
   if (TYPE_NAME (real_target))
     {
+      /* The previous copy of TYPE_NAME is allocated by
+	 process_coff_symbol.  */
       if (TYPE_NAME (target))
-	xfree (TYPE_NAME (target));
-      TYPE_NAME (target) = concat (TYPE_NAME (real_target), 
-				   (char *) NULL);
+	xfree ((char*) TYPE_NAME (target));
+      TYPE_NAME (target) = xstrdup (TYPE_NAME (real_target));
     }
 }
 
@@ -1470,7 +1470,7 @@ static void
 patch_opaque_types (struct symtab *s)
 {
   struct block *b;
-  struct dict_iterator iter;
+  struct block_iterator iter;
   struct symbol *real_sym;
 
   /* Go through the per-file symbols only.  */
@@ -1486,7 +1486,7 @@ patch_opaque_types (struct symtab *s)
 	  && TYPE_CODE (SYMBOL_TYPE (real_sym)) == TYPE_CODE_PTR
 	  && TYPE_LENGTH (TYPE_TARGET_TYPE (SYMBOL_TYPE (real_sym))) != 0)
 	{
-	  char *name = SYMBOL_LINKAGE_NAME (real_sym);
+	  const char *name = SYMBOL_LINKAGE_NAME (real_sym);
 	  int hash = hashname (name);
 	  struct symbol *sym, *prev;
 
@@ -1675,7 +1675,7 @@ process_coff_symbol (struct coff_symbol *cs,
 		}
 	      else
 		TYPE_NAME (SYMBOL_TYPE (sym)) =
-		  concat (SYMBOL_LINKAGE_NAME (sym), (char *) NULL);
+		  xstrdup (SYMBOL_LINKAGE_NAME (sym));
 	    }
 
 	  /* Keep track of any type which points to empty structured
@@ -2158,7 +2158,7 @@ coff_read_enum_type (int index, int length, int lastsym,
 
 	  SYMBOL_TYPE (xsym) = type;
 	  TYPE_FIELD_NAME (type, n) = SYMBOL_LINKAGE_NAME (xsym);
-	  SET_FIELD_BITPOS (TYPE_FIELD (type, n), SYMBOL_VALUE (xsym));
+	  SET_FIELD_ENUMVAL (TYPE_FIELD (type, n), SYMBOL_VALUE (xsym));
 	  if (SYMBOL_VALUE (xsym) < 0)
 	    unsigned_enum = 0;
 	  TYPE_FIELD_BITSIZE (type, n) = 0;
@@ -2195,6 +2195,7 @@ static const struct sym_fns coff_sym_fns =
 
   default_symfile_relocate,	/* sym_relocate: Relocate a debug
 				   section.  */
+  NULL,				/* sym_probe_fns */
   &psym_functions
 };
 
diff --git a/gdb/command.h b/gdb/command.h
index d32e98e..3064ce2 100644
--- a/gdb/command.h
+++ b/gdb/command.h
@@ -1,4 +1,4 @@
-/* Header file for command-reading library command.c.
+/* Header file for command creation.
 
    Copyright (C) 1986, 1989-1995, 1999-2000, 2002, 2004, 2007-2012 Free
    Software Foundation, Inc.
@@ -19,6 +19,11 @@
 #if !defined (COMMAND_H)
 #define COMMAND_H 1
 
+#include "gdb_vecs.h"
+
+/* This file defines the public interface for any code wanting to
+   create commands.  */
+
 /* Command classes are top-level categories into which commands are
    broken down for "help" purposes.
 
@@ -106,6 +111,8 @@ struct cmd_list_element;
 
 /* Forward-declarations of the entry-points of cli/cli-decode.c.  */
 
+/* API to the manipulation of command lists.  */
+
 extern int valid_user_defined_cmd_name_p (const char *name);
 
 extern struct cmd_list_element *add_cmd (char *, enum command_class,
@@ -144,9 +151,10 @@ typedef void cmd_sfunc_ftype (char *args, int from_tty,
 extern void set_cmd_sfunc (struct cmd_list_element *cmd,
 			   cmd_sfunc_ftype *sfunc);
 
-extern void set_cmd_completer (struct cmd_list_element *,
-			       char **(*completer) (struct cmd_list_element *,
-						    char *, char *));
+typedef VEC (char_ptr) *completer_ftype (struct cmd_list_element *,
+					 char *, char *);
+
+extern void set_cmd_completer (struct cmd_list_element *, completer_ftype *);
 
 /* HACK: cagney/2002-02-23: Code, mostly in tracepoints.c, grubs
    around in cmd objects to test the value of the commands sfunc().  */
@@ -168,6 +176,8 @@ extern void execute_cmd_post_hook (struct cmd_list_element *cmd);
 /* Return the type of the command.  */
 extern enum cmd_types cmd_type (struct cmd_list_element *cmd);
 
+/* Flag for an ambiguous cmd_list result.  */
+#define CMD_LIST_AMBIGUOUS ((struct cmd_list_element *) -1)
 
 extern struct cmd_list_element *lookup_cmd (char **,
 					    struct cmd_list_element *, char *,
@@ -201,21 +211,17 @@ extern struct cmd_list_element *add_info (char *,
 
 extern struct cmd_list_element *add_info_alias (char *, char *, int);
 
-extern char **complete_on_cmdlist (struct cmd_list_element *,
-				   char *, char *);
+extern VEC (char_ptr) *complete_on_cmdlist (struct cmd_list_element *,
+					    char *, char *);
 
-extern char **complete_on_enum (const char *enumlist[],
-				char *, char *);
+extern VEC (char_ptr) *complete_on_enum (const char *const *enumlist,
+					 char *, char *);
 
-extern void help_cmd (char *, struct ui_file *);
+/* Functions that implement commands about CLI commands.  */
 
 extern void help_list (struct cmd_list_element *, char *,
 		       enum command_class, struct ui_file *);
 
-extern void help_cmd_list (struct cmd_list_element *,
-			   enum command_class,
-			   char *, int, struct ui_file *);
-
 /* Method for show a set/show variable's VALUE on FILE.  If this
    method isn't supplied deprecated_show_value_hack() is called (which
    is not good).  */
@@ -229,7 +235,7 @@ extern show_value_ftype deprecated_show_value_hack;
 
 extern void add_setshow_enum_cmd (char *name,
 				  enum command_class class,
-				  const char *enumlist[],
+				  const char *const *enumlist,
 				  const char **var,
 				  const char *set_doc,
 				  const char *show_doc,
diff --git a/gdb/common/agent.c b/gdb/common/agent.c
new file mode 100644
index 0000000..43f1b65
--- /dev/null
+++ b/gdb/common/agent.c
@@ -0,0 +1,356 @@
+/* Shared utility routines for GDB to interact with agent.
+
+   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifdef GDBSERVER
+#include "server.h"
+#else
+#include "defs.h"
+#include "target.h"
+#include "inferior.h" /* for non_stop */
+#endif
+
+#include <string.h>
+#include <unistd.h>
+#include "agent.h"
+
+int debug_agent = 0;
+
+#ifdef GDBSERVER
+#define DEBUG_AGENT(fmt, args...)	\
+  if (debug_agent)			\
+    fprintf (stderr, fmt, ##args);
+#else
+#define DEBUG_AGENT(fmt, args...)	\
+  if (debug_agent)			\
+    fprintf_unfiltered (gdb_stdlog, fmt, ##args);
+#endif
+
+/* Global flag to determine using agent or not.  */
+int use_agent = 0;
+
+/* Addresses of in-process agent's symbols both GDB and GDBserver cares
+   about.  */
+
+struct ipa_sym_addresses
+{
+  CORE_ADDR addr_helper_thread_id;
+  CORE_ADDR addr_cmd_buf;
+  CORE_ADDR addr_capability;
+};
+
+/* Cache of the helper thread id.  FIXME: this global should be made
+   per-process.  */
+static unsigned int helper_thread_id = 0;
+
+static struct
+{
+  const char *name;
+  int offset;
+  int required;
+} symbol_list[] = {
+  IPA_SYM(helper_thread_id),
+  IPA_SYM(cmd_buf),
+  IPA_SYM(capability),
+};
+
+static struct ipa_sym_addresses ipa_sym_addrs;
+
+static int all_agent_symbols_looked_up = 0;
+
+int
+agent_loaded_p (void)
+{
+  return all_agent_symbols_looked_up;
+}
+
+/* Look up all symbols needed by agent.  Return 0 if all the symbols are
+   found, return non-zero otherwise.  */
+
+int
+agent_look_up_symbols (void *arg)
+{
+  int i;
+
+  all_agent_symbols_looked_up = 0;
+
+  for (i = 0; i < sizeof (symbol_list) / sizeof (symbol_list[0]); i++)
+    {
+      CORE_ADDR *addrp =
+	(CORE_ADDR *) ((char *) &ipa_sym_addrs + symbol_list[i].offset);
+#ifdef GDBSERVER
+
+      if (look_up_one_symbol (symbol_list[i].name, addrp, 1) == 0)
+#else
+      struct minimal_symbol *sym =
+	lookup_minimal_symbol (symbol_list[i].name, NULL,
+			       (struct objfile *) arg);
+
+      if (sym != NULL)
+	*addrp = SYMBOL_VALUE_ADDRESS (sym);
+      else
+#endif
+	{
+	  DEBUG_AGENT ("symbol `%s' not found\n", symbol_list[i].name);
+	  return -1;
+	}
+    }
+
+  all_agent_symbols_looked_up = 1;
+  return 0;
+}
+
+static unsigned int
+agent_get_helper_thread_id (void)
+{
+  if  (helper_thread_id == 0)
+    {
+#ifdef GDBSERVER
+      if (read_inferior_memory (ipa_sym_addrs.addr_helper_thread_id,
+				(unsigned char *) &helper_thread_id,
+				sizeof helper_thread_id))
+#else
+      enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
+      gdb_byte buf[4];
+
+      if (target_read_memory (ipa_sym_addrs.addr_helper_thread_id,
+			      buf, sizeof buf) == 0)
+	helper_thread_id = extract_unsigned_integer (buf, sizeof buf,
+						     byte_order);
+      else
+#endif
+	{
+	  warning (_("Error reading helper thread's id in lib"));
+	}
+    }
+
+  return helper_thread_id;
+}
+
+#ifdef HAVE_SYS_UN_H
+#include <sys/socket.h>
+#include <sys/un.h>
+#define SOCK_DIR P_tmpdir
+
+#ifndef UNIX_PATH_MAX
+#define UNIX_PATH_MAX sizeof(((struct sockaddr_un *) NULL)->sun_path)
+#endif
+
+#endif
+
+/* Connects to synchronization socket.  PID is the pid of inferior, which is
+   used to set up the connection socket.  */
+
+static int
+gdb_connect_sync_socket (int pid)
+{
+#ifdef HAVE_SYS_UN_H
+  struct sockaddr_un addr;
+  int res, fd;
+  char path[UNIX_PATH_MAX];
+
+  res = xsnprintf (path, UNIX_PATH_MAX, "%s/gdb_ust%d", P_tmpdir, pid);
+  if (res >= UNIX_PATH_MAX)
+    return -1;
+
+  res = fd = socket (PF_UNIX, SOCK_STREAM, 0);
+  if (res == -1)
+    {
+      warning (_("error opening sync socket: %s"), strerror (errno));
+      return -1;
+    }
+
+  addr.sun_family = AF_UNIX;
+
+  res = xsnprintf (addr.sun_path, UNIX_PATH_MAX, "%s", path);
+  if (res >= UNIX_PATH_MAX)
+    {
+      warning (_("string overflow allocating socket name"));
+      close (fd);
+      return -1;
+    }
+
+  res = connect (fd, (struct sockaddr *) &addr, sizeof (addr));
+  if (res == -1)
+    {
+      warning (_("error connecting sync socket (%s): %s. "
+		 "Make sure the directory exists and that it is writable."),
+		 path, strerror (errno));
+      close (fd);
+      return -1;
+    }
+
+  return fd;
+#else
+  return -1;
+#endif
+}
+
+/* Execute an agent command in the inferior.  PID is the value of pid of the
+   inferior.  CMD is the buffer for command.  GDB or GDBserver will store the
+   command into it and fetch the return result from CMD.  The interaction
+   between GDB/GDBserver and the agent is synchronized by a synchronization
+   socket.  Return zero if success, otherwise return non-zero.  */
+
+int
+agent_run_command (int pid, const char *cmd, int len)
+{
+  int fd;
+  int tid = agent_get_helper_thread_id ();
+  ptid_t ptid = ptid_build (pid, tid, 0);
+
+#ifdef GDBSERVER
+  int ret = write_inferior_memory (ipa_sym_addrs.addr_cmd_buf,
+				   (const unsigned char *) cmd, len);
+#else
+  int ret = target_write_memory (ipa_sym_addrs.addr_cmd_buf, cmd, len);
+#endif
+
+  if (ret != 0)
+    {
+      warning (_("unable to write"));
+      return -1;
+    }
+
+  DEBUG_AGENT ("agent: resumed helper thread\n");
+
+  /* Resume helper thread.  */
+#ifdef GDBSERVER
+{
+  struct thread_resume resume_info;
+
+  resume_info.thread = ptid;
+  resume_info.kind = resume_continue;
+  resume_info.sig = GDB_SIGNAL_0;
+  (*the_target->resume) (&resume_info, 1);
+}
+#else
+ target_resume (ptid, 0, GDB_SIGNAL_0);
+#endif
+
+  fd = gdb_connect_sync_socket (pid);
+  if (fd >= 0)
+    {
+      char buf[1] = "";
+      int ret;
+
+      DEBUG_AGENT ("agent: signalling helper thread\n");
+
+      do
+	{
+	  ret = write (fd, buf, 1);
+	} while (ret == -1 && errno == EINTR);
+
+	DEBUG_AGENT ("agent: waiting for helper thread's response\n");
+
+      do
+	{
+	  ret = read (fd, buf, 1);
+	} while (ret == -1 && errno == EINTR);
+
+      close (fd);
+
+      DEBUG_AGENT ("agent: helper thread's response received\n");
+    }
+  else
+    return -1;
+
+  /* Need to read response with the inferior stopped.  */
+  if (!ptid_equal (ptid, null_ptid))
+    {
+      struct target_waitstatus status;
+      int was_non_stop = non_stop;
+      /* Stop thread PTID.  */
+      DEBUG_AGENT ("agent: stop helper thread\n");
+#ifdef GDBSERVER
+      {
+	struct thread_resume resume_info;
+
+	resume_info.thread = ptid;
+	resume_info.kind = resume_stop;
+	resume_info.sig = GDB_SIGNAL_0;
+	(*the_target->resume) (&resume_info, 1);
+      }
+
+      non_stop = 1;
+      mywait (ptid, &status, 0, 0);
+#else
+      non_stop = 1;
+      target_stop (ptid);
+
+      memset (&status, 0, sizeof (status));
+      target_wait (ptid, &status, 0);
+#endif
+      non_stop = was_non_stop;
+    }
+
+  if (fd >= 0)
+    {
+#ifdef GDBSERVER
+      if (read_inferior_memory (ipa_sym_addrs.addr_cmd_buf,
+				(unsigned char *) cmd, IPA_CMD_BUF_SIZE))
+#else
+      if (target_read_memory (ipa_sym_addrs.addr_cmd_buf, (gdb_byte *) cmd,
+			      IPA_CMD_BUF_SIZE))
+#endif
+	{
+	  warning (_("Error reading command response"));
+	  return -1;
+	}
+    }
+
+  return 0;
+}
+
+/* Each bit of it stands for a capability of agent.  */
+static unsigned int agent_capability = 0;
+
+/* Return true if agent has capability AGENT_CAP, otherwise return false.  */
+
+int
+agent_capability_check (enum agent_capa agent_capa)
+{
+  if (agent_capability == 0)
+    {
+#ifdef GDBSERVER
+      if (read_inferior_memory (ipa_sym_addrs.addr_capability,
+				(unsigned char *) &agent_capability,
+				sizeof agent_capability))
+#else
+      enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
+      gdb_byte buf[4];
+
+      if (target_read_memory (ipa_sym_addrs.addr_capability,
+			      buf, sizeof buf) == 0)
+	agent_capability = extract_unsigned_integer (buf, sizeof buf,
+						     byte_order);
+      else
+#endif
+	warning (_("Error reading capability of agent"));
+    }
+  return agent_capability & agent_capa;
+}
+
+/* Invalidate the cache of agent capability, so we'll read it from inferior
+   again.  Call it when launches a new program or reconnect to remote stub.  */
+
+void
+agent_capability_invalidate (void)
+{
+  agent_capability = 0;
+}
diff --git a/gdb/common/agent.h b/gdb/common/agent.h
new file mode 100644
index 0000000..aec0221
--- /dev/null
+++ b/gdb/common/agent.h
@@ -0,0 +1,57 @@
+/* Shared utility routines for GDB to interact with agent.
+
+   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+int agent_run_command (int pid, const char *cmd, int len);
+
+int agent_look_up_symbols (void *);
+
+#define STRINGIZE_1(STR) #STR
+#define STRINGIZE(STR) STRINGIZE_1(STR)
+#define IPA_SYM(SYM)                                   \
+  {                                                    \
+    STRINGIZE (gdb_agent_ ## SYM),			\
+    offsetof (struct ipa_sym_addresses, addr_ ## SYM)	\
+  }
+
+/* The size in bytes of the buffer used to talk to the IPA helper
+   thread.  */
+#define IPA_CMD_BUF_SIZE 1024
+
+int agent_loaded_p (void);
+
+extern int debug_agent;
+
+extern int use_agent;
+
+/* Capability of agent.  Different agents may have different capabilities,
+   such as installing fast tracepoint or evaluating breakpoint conditions.
+   Capabilities are represented by bit-maps, and each capability occupies one
+   bit.  */
+
+enum agent_capa
+{
+  /* Capability to install fast tracepoint.  */
+  AGENT_CAPA_FAST_TRACE = 0x1,
+  /* Capability to install static tracepoint.  */
+  AGENT_CAPA_STATIC_TRACE = (0x1 << 1),
+};
+
+int agent_capability_check (enum agent_capa);
+
+void agent_capability_invalidate (void);
diff --git a/gdb/common/ax.def b/gdb/common/ax.def
index fdc043f..b08ede3 100644
--- a/gdb/common/ax.def
+++ b/gdb/common/ax.def
@@ -93,3 +93,5 @@ DEFOP (invalid2, 0, 0, 0, 0, 0x31)
    express the right thing.  */
 DEFOP (pick, 1, 0, 0, 1, 0x32)
 DEFOP (rot, 0, 0, 3, 3, 0x33)
+/* Both the argument and consumed numbers are dynamic for this one.  */
+DEFOP (printf, 0, 0, 0, 0, 0x34)
diff --git a/gdb/common/buffer.c b/gdb/common/buffer.c
index 37b7b55..2f63eec 100644
--- a/gdb/common/buffer.c
+++ b/gdb/common/buffer.c
@@ -25,10 +25,12 @@
 
 #include "xml-utils.h"
 #include "buffer.h"
+#include "inttypes.h"
 
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
+#include <stdint.h>
 
 void
 buffer_grow (struct buffer *buffer, const char *data, size_t size)
@@ -47,8 +49,6 @@ buffer_grow (struct buffer *buffer, const char *data, size_t size)
   while (buffer->used_size + size > new_buffer_size)
     new_buffer_size *= 2;
   new_buffer = xrealloc (buffer->buffer, new_buffer_size);
-  if (!new_buffer)
-    abort ();
   memcpy (new_buffer + buffer->used_size, data, size);
   buffer->buffer = new_buffer;
   buffer->buffer_size = new_buffer_size;
@@ -101,6 +101,7 @@ buffer_xml_printf (struct buffer *buffer, const char *format, ...)
 	  char buf[32];
 	  char *p;
 	  char *str = buf;
+	  const char *f_old = f;
 	  
 	  switch (*f)
 	    {
@@ -119,14 +120,60 @@ buffer_xml_printf (struct buffer *buffer, const char *format, ...)
 	    case 'o':
 	      sprintf (str, "%o", va_arg (ap, unsigned int));
 	      break;
+	    case 'l':
+	      f++;
+	      switch (*f)
+		{
+		case 'd':
+		  sprintf (str, "%ld", va_arg (ap, long));
+		  break;
+		case 'u':
+		  sprintf (str, "%lu", va_arg (ap, unsigned long));
+		  break;
+		case 'x':
+		  sprintf (str, "%lx", va_arg (ap, unsigned long));
+		  break;
+		case 'o':
+		  sprintf (str, "%lo", va_arg (ap, unsigned long));
+		  break;
+		case 'l':
+		  f++;
+		  switch (*f)
+		    {
+		    case 'd':
+		      sprintf (str, "%" PRId64,
+			       (int64_t) va_arg (ap, long long));
+		      break;
+		    case 'u':
+		      sprintf (str, "%" PRIu64,
+			       (uint64_t) va_arg (ap, unsigned long long));
+		      break;
+		    case 'x':
+		      sprintf (str, "%" PRIx64,
+			       (uint64_t) va_arg (ap, unsigned long long));
+		      break;
+		    case 'o':
+		      sprintf (str, "%" PRIo64,
+			       (uint64_t) va_arg (ap, unsigned long long));
+		      break;
+		    default:
+		      str = 0;
+		      break;
+		    }
+		  break;
+		default:
+		  str = 0;
+		  break;
+		}
+	      break;
 	    default:
 	      str = 0;
 	      break;
 	    }
-	  
+
 	  if (str)
 	    {
-	      buffer_grow (buffer, prev, f - prev - 1);
+	      buffer_grow (buffer, prev, f_old - prev - 1);
 	      p = xml_escape_text (str);
 	      buffer_grow_str (buffer, p);
 	      xfree (p);
diff --git a/gdb/common/format.c b/gdb/common/format.c
new file mode 100644
index 0000000..9c22b6d
--- /dev/null
+++ b/gdb/common/format.c
@@ -0,0 +1,400 @@
+/* Parse a printf-style format string.
+
+   Copyright (C) 1986-2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifdef GDBSERVER
+#include "server.h"
+#else
+#include "defs.h"
+#endif
+
+#include <string.h>
+
+#include "format.h"
+
+struct format_piece *
+parse_format_string (char **arg)
+{
+  char *s, *f, *string;
+  char *prev_start;
+  char *percent_loc;
+  char *sub_start, *current_substring;
+  struct format_piece *pieces;
+  int next_frag;
+  int max_pieces;
+  enum argclass this_argclass;
+
+  s = *arg;
+
+  /* Parse the format-control string and copy it into the string STRING,
+     processing some kinds of escape sequence.  */
+
+  f = string = (char *) alloca (strlen (s) + 1);
+
+  while (*s != '"' && *s != '\0')
+    {
+      int c = *s++;
+      switch (c)
+	{
+	case '\0':
+	  continue;
+
+	case '\\':
+	  switch (c = *s++)
+	    {
+	    case '\\':
+	      *f++ = '\\';
+	      break;
+	    case 'a':
+	      *f++ = '\a';
+	      break;
+	    case 'b':
+	      *f++ = '\b';
+	      break;
+	    case 'f':
+	      *f++ = '\f';
+	      break;
+	    case 'n':
+	      *f++ = '\n';
+	      break;
+	    case 'r':
+	      *f++ = '\r';
+	      break;
+	    case 't':
+	      *f++ = '\t';
+	      break;
+	    case 'v':
+	      *f++ = '\v';
+	      break;
+	    case '"':
+	      *f++ = '"';
+	      break;
+	    default:
+	      /* ??? TODO: handle other escape sequences.  */
+	      error (_("Unrecognized escape character \\%c in format string."),
+		     c);
+	    }
+	  break;
+
+	default:
+	  *f++ = c;
+	}
+    }
+
+  /* Terminate our escape-processed copy.  */
+  *f++ = '\0';
+
+  /* Whether the format string ended with double-quote or zero, we're
+     done with it; it's up to callers to complain about syntax.  */
+  *arg = s;
+
+  /* Need extra space for the '\0's.  Doubling the size is sufficient.  */
+
+  current_substring = xmalloc (strlen (string) * 2 + 1000);
+
+  max_pieces = strlen (string) + 2;
+
+  pieces = (struct format_piece *)
+    xmalloc (max_pieces * sizeof (struct format_piece));
+
+  next_frag = 0;
+
+  /* Now scan the string for %-specs and see what kinds of args they want.
+     argclass classifies the %-specs so we can give printf-type functions
+     something of the right size.  */
+
+  f = string;
+  prev_start = string;
+  while (*f)
+    if (*f++ == '%')
+      {
+	int seen_hash = 0, seen_zero = 0, lcount = 0, seen_prec = 0;
+	int seen_space = 0, seen_plus = 0;
+	int seen_big_l = 0, seen_h = 0, seen_big_h = 0;
+	int seen_big_d = 0, seen_double_big_d = 0;
+	int bad = 0;
+
+	/* Skip over "%%", it will become part of a literal piece.  */
+	if (*f == '%')
+	  {
+	    f++;
+	    continue;
+	  }
+
+	sub_start = current_substring;
+
+	strncpy (current_substring, prev_start, f - 1 - prev_start);
+	current_substring += f - 1 - prev_start;
+	*current_substring++ = '\0';
+
+	pieces[next_frag].string = sub_start;
+	pieces[next_frag].argclass = literal_piece;
+	next_frag++;
+
+	percent_loc = f - 1;
+
+	/* Check the validity of the format specifier, and work
+	   out what argument it expects.  We only accept C89
+	   format strings, with the exception of long long (which
+	   we autoconf for).  */
+
+	/* The first part of a format specifier is a set of flag
+	   characters.  */
+	while (strchr ("0-+ #", *f))
+	  {
+	    if (*f == '#')
+	      seen_hash = 1;
+	    else if (*f == '0')
+	      seen_zero = 1;
+	    else if (*f == ' ')
+	      seen_space = 1;
+	    else if (*f == '+')
+	      seen_plus = 1;
+	    f++;
+	  }
+
+	/* The next part of a format specifier is a width.  */
+	while (strchr ("0123456789", *f))
+	  f++;
+
+	/* The next part of a format specifier is a precision.  */
+	if (*f == '.')
+	  {
+	    seen_prec = 1;
+	    f++;
+	    while (strchr ("0123456789", *f))
+	      f++;
+	  }
+
+	/* The next part of a format specifier is a length modifier.  */
+	if (*f == 'h')
+	  {
+	    seen_h = 1;
+	    f++;
+	  }
+	else if (*f == 'l')
+	  {
+	    f++;
+	    lcount++;
+	    if (*f == 'l')
+	      {
+		f++;
+		lcount++;
+	      }
+	  }
+	else if (*f == 'L')
+	  {
+	    seen_big_l = 1;
+	    f++;
+	  }
+	/* Decimal32 modifier.  */
+	else if (*f == 'H')
+	  {
+	    seen_big_h = 1;
+	    f++;
+	  }
+	/* Decimal64 and Decimal128 modifiers.  */
+	else if (*f == 'D')
+	  {
+	    f++;
+
+	    /* Check for a Decimal128.  */
+	    if (*f == 'D')
+	      {
+		f++;
+		seen_double_big_d = 1;
+	      }
+	    else
+	      seen_big_d = 1;
+	  }
+
+	switch (*f)
+	  {
+	  case 'u':
+	    if (seen_hash)
+	      bad = 1;
+	    /* FALLTHROUGH */
+
+	  case 'o':
+	  case 'x':
+	  case 'X':
+	    if (seen_space || seen_plus)
+	      bad = 1;
+	  /* FALLTHROUGH */
+
+	  case 'd':
+	  case 'i':
+	    if (lcount == 0)
+	      this_argclass = int_arg;
+	    else if (lcount == 1)
+	      this_argclass = long_arg;
+	    else
+	      this_argclass = long_long_arg;
+ 
+	  if (seen_big_l)
+	    bad = 1;
+	  break;
+
+	  case 'c':
+	    this_argclass = lcount == 0 ? int_arg : wide_char_arg;
+	    if (lcount > 1 || seen_h || seen_big_l)
+	      bad = 1;
+	    if (seen_prec || seen_zero || seen_space || seen_plus)
+	      bad = 1;
+	    break;
+
+	  case 'p':
+	    this_argclass = ptr_arg;
+	    if (lcount || seen_h || seen_big_l)
+	      bad = 1;
+	    if (seen_prec || seen_zero || seen_space || seen_plus)
+	      bad = 1;
+	    break;
+
+	  case 's':
+	    this_argclass = lcount == 0 ? string_arg : wide_string_arg;
+	    if (lcount > 1 || seen_h || seen_big_l)
+	      bad = 1;
+	    if (seen_zero || seen_space || seen_plus)
+	      bad = 1;
+	    break;
+
+	  case 'e':
+	  case 'f':
+	  case 'g':
+	  case 'E':
+	  case 'G':
+	    if (seen_big_h || seen_big_d || seen_double_big_d)
+	      this_argclass = decfloat_arg;
+	    else if (seen_big_l)
+	      this_argclass = long_double_arg;
+	    else
+	      this_argclass = double_arg;
+
+	  if (lcount || seen_h)
+	    bad = 1;
+	  break;
+
+	  case '*':
+	    error (_("`*' not supported for precision or width in printf"));
+
+	  case 'n':
+	    error (_("Format specifier `n' not supported in printf"));
+
+	  case '\0':
+	    error (_("Incomplete format specifier at end of format string"));
+
+	  default:
+	    error (_("Unrecognized format specifier '%c' in printf"), *f);
+	  }
+
+	if (bad)
+	  error (_("Inappropriate modifiers to "
+		   "format specifier '%c' in printf"),
+		 *f);
+
+	f++;
+
+	sub_start = current_substring;
+
+	if (lcount > 1 && USE_PRINTF_I64)
+	  {
+	    /* Windows' printf does support long long, but not the usual way.
+	       Convert %lld to %I64d.  */
+	    int length_before_ll = f - percent_loc - 1 - lcount;
+
+	    strncpy (current_substring, percent_loc, length_before_ll);
+	    strcpy (current_substring + length_before_ll, "I64");
+	    current_substring[length_before_ll + 3] =
+	      percent_loc[length_before_ll + lcount];
+	    current_substring += length_before_ll + 4;
+	  }
+	else if (this_argclass == wide_string_arg
+		 || this_argclass == wide_char_arg)
+	  {
+	    /* Convert %ls or %lc to %s.  */
+	    int length_before_ls = f - percent_loc - 2;
+
+	    strncpy (current_substring, percent_loc, length_before_ls);
+	    strcpy (current_substring + length_before_ls, "s");
+	    current_substring += length_before_ls + 2;
+	  }
+	else
+	  {
+	    strncpy (current_substring, percent_loc, f - percent_loc);
+	    current_substring += f - percent_loc;
+	  }
+
+	*current_substring++ = '\0';
+
+	prev_start = f;
+
+	pieces[next_frag].string = sub_start;
+	pieces[next_frag].argclass = this_argclass;
+	next_frag++;
+      }
+
+  /* Record the remainder of the string.  */
+
+  sub_start = current_substring;
+
+  strncpy (current_substring, prev_start, f - prev_start);
+  current_substring += f - prev_start;
+  *current_substring++ = '\0';
+
+  pieces[next_frag].string = sub_start;
+  pieces[next_frag].argclass = literal_piece;
+  next_frag++;
+
+  /* Record an end-of-array marker.  */
+
+  pieces[next_frag].string = NULL;
+  pieces[next_frag].argclass = literal_piece;
+
+  return pieces;
+}
+
+void
+free_format_pieces (struct format_piece *pieces)
+{
+  if (!pieces)
+    return;
+
+  /* We happen to know that all the string pieces are in the block
+     pointed to by the first string piece.  */
+  if (pieces[0].string)
+    xfree (pieces[0].string);
+
+  xfree (pieces);
+}
+
+void
+free_format_pieces_cleanup (void *ptr)
+{
+  void **location = ptr;
+
+  if (location == NULL)
+    return;
+
+  if (*location != NULL)
+    {
+      free_format_pieces (*location);
+      *location = NULL;
+    }
+}
+
diff --git a/gdb/common/format.h b/gdb/common/format.h
new file mode 100644
index 0000000..4c6c1b9
--- /dev/null
+++ b/gdb/common/format.h
@@ -0,0 +1,63 @@
+/* Parse a printf-style format string.
+
+   Copyright (C) 1986-2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#if defined(__MINGW32__) && !defined(PRINTF_HAS_LONG_LONG)
+# define USE_PRINTF_I64 1
+# define PRINTF_HAS_LONG_LONG
+#else
+# define USE_PRINTF_I64 0
+#endif
+
+/* The argclass represents the general type of data that goes with a
+   format directive; int_arg for %d, long_arg for %l, and so forth.
+   Note that these primarily distinguish types by size and need for
+   special handling, so for instance %u and %x are (at present) also
+   classed as int_arg.  */
+
+enum argclass
+  {
+    literal_piece,
+    int_arg, long_arg, long_long_arg, ptr_arg,
+    string_arg, wide_string_arg, wide_char_arg,
+    double_arg, long_double_arg, decfloat_arg
+  };
+
+/* A format piece is a section of the format string that may include a
+   single print directive somewhere in it, and the associated class
+   for the argument.  */
+
+struct format_piece
+{
+  char *string;
+  enum argclass argclass;
+};
+
+/* Return an array of printf fragments found at the given string, and
+   rewrite ARG with a pointer to the end of the format string.  */
+
+extern struct format_piece *parse_format_string (char **arg);
+
+/* Given a pointer to an array of format pieces, free any memory that
+   would have been allocated by parse_format_string.  */
+
+extern void free_format_pieces (struct format_piece *frags);
+
+/* Freeing, cast as a cleanup.  */
+
+extern void free_format_pieces_cleanup (void *);
diff --git a/gdb/common/gdb_assert.h b/gdb/common/gdb_assert.h
index 351f558..dc79a08 100644
--- a/gdb/common/gdb_assert.h
+++ b/gdb/common/gdb_assert.h
@@ -22,7 +22,7 @@
 /* A static assertion.  This will cause a compile-time error if EXPR,
    which must be a compile-time constant, is false.  */
 
-#define static_assert(expr) \
+#define gdb_static_assert(expr) \
   extern int never_defined_just_used_for_checking[(expr) ? 1 : -1]
 
 /* PRAGMATICS: "gdb_assert.h":gdb_assert() is a lower case (rather
diff --git a/gdb/common/gdb_signals.h b/gdb/common/gdb_signals.h
index 1cc6297..3929155 100644
--- a/gdb/common/gdb_signals.h
+++ b/gdb/common/gdb_signals.h
@@ -22,33 +22,33 @@
 
 #include "gdb/signals.h"
 
-/* Predicate to target_signal_to_host(). Return non-zero if the enum
+/* Predicate to gdb_signal_to_host(). Return non-zero if the enum
    targ_signal SIGNO has an equivalent ``host'' representation.  */
 /* FIXME: cagney/1999-11-22: The name below was chosen in preference
-   to the shorter target_signal_p() because it is far less ambigious.
-   In this context ``target_signal'' refers to GDB's internal
+   to the shorter gdb_signal_p() because it is far less ambigious.
+   In this context ``gdb_signal'' refers to GDB's internal
    representation of the target's set of signals while ``host signal''
    refers to the target operating system's signal.  Confused?  */
-extern int target_signal_to_host_p (enum target_signal signo);
+extern int gdb_signal_to_host_p (enum gdb_signal signo);
 
-/* Convert between host signal numbers and enum target_signal's.
-   target_signal_to_host() returns 0 and prints a warning() on GDB's
+/* Convert between host signal numbers and enum gdb_signal's.
+   gdb_signal_to_host() returns 0 and prints a warning() on GDB's
    console if SIGNO has no equivalent host representation.  */
 /* FIXME: cagney/1999-11-22: Here ``host'' is used incorrectly, it is
    refering to the target operating system's signal numbering.
-   Similarly, ``enum target_signal'' is named incorrectly, ``enum
+   Similarly, ``enum gdb_signal'' is named incorrectly, ``enum
    gdb_signal'' would probably be better as it is refering to GDB's
    internal representation of a target operating system's signal.  */
-extern enum target_signal target_signal_from_host (int);
-extern int target_signal_to_host (enum target_signal);
+extern enum gdb_signal gdb_signal_from_host (int);
+extern int gdb_signal_to_host (enum gdb_signal);
 
 /* Return the string for a signal.  */
-extern const char *target_signal_to_string (enum target_signal);
+extern const char *gdb_signal_to_string (enum gdb_signal);
 
 /* Return the name (SIGHUP, etc.) for a signal.  */
-extern const char *target_signal_to_name (enum target_signal);
+extern const char *gdb_signal_to_name (enum gdb_signal);
 
 /* Given a name (SIGHUP, etc.), return its signal.  */
-enum target_signal target_signal_from_name (const char *);
+enum gdb_signal gdb_signal_from_name (const char *);
 
 #endif /* COMMON_GDB_SIGNALS_H */
diff --git a/gdb/common/linux-osdata.c b/gdb/common/linux-osdata.c
index 4f97a22..6488963 100644
--- a/gdb/common/linux-osdata.c
+++ b/gdb/common/linux-osdata.c
@@ -45,12 +45,27 @@
 #include "gdb_assert.h"
 #include "gdb_dirent.h"
 
+/* Define PID_T to be a fixed size that is at least as large as pid_t,
+   so that reading pid values embedded in /proc works
+   consistently.  */
+
+typedef long long  PID_T;
+
+/* Define TIME_T to be at least as large as time_t, so that reading
+   time values embedded in /proc works consistently.  */
+
+typedef long long TIME_T;
+
+#define MAX_PID_T_STRLEN  (sizeof ("-9223372036854775808") - 1)
+
+/* Returns the CPU core that thread PTID is currently running on.  */
+					  
+/* Compute and return the processor core of a given thread.  */
+
 int
 linux_common_core_of_thread (ptid_t ptid)
 {
-  char filename[sizeof ("/proc//task//stat")
-		 + 2 * 20 /* decimal digits for 2 numbers, max 2^64 bit each */
-		 + 1];
+  char filename[sizeof ("/proc//task//stat") + 2 * MAX_PID_T_STRLEN];
   FILE *f;
   char *content = NULL;
   char *p;
@@ -59,8 +74,8 @@ linux_common_core_of_thread (ptid_t ptid)
   int i;
   int core;
 
-  sprintf (filename, "/proc/%d/task/%ld/stat",
-	   ptid_get_pid (ptid), ptid_get_lwp (ptid));
+  sprintf (filename, "/proc/%lld/task/%lld/stat",
+	   (PID_T) ptid_get_pid (ptid), (PID_T) ptid_get_lwp (ptid));
   f = fopen (filename, "r");
   if (!f)
     return -1;
@@ -102,10 +117,14 @@ linux_common_core_of_thread (ptid_t ptid)
   return core;
 }
 
+/* Finds the command-line of process PID and copies it into COMMAND.
+   At most MAXLEN characters are copied.  If the command-line cannot
+   be found, PID is copied into command in text-form.  */
+
 static void
-command_from_pid (char *command, int maxlen, pid_t pid)
+command_from_pid (char *command, int maxlen, PID_T pid)
 {
-  char *stat_path = xstrprintf ("/proc/%d/stat", pid); 
+  char *stat_path = xstrprintf ("/proc/%lld/stat", pid); 
   FILE *fp = fopen (stat_path, "r");
   
   command[0] = '\0';
@@ -116,8 +135,8 @@ command_from_pid (char *command, int maxlen, pid_t pid)
 	 include/linux/sched.h in the Linux kernel sources) plus two
 	 (for the brackets).  */
       char cmd[32]; 
-      pid_t stat_pid;
-      int items_read = fscanf (fp, "%d %32s", &stat_pid, cmd);
+      PID_T stat_pid;
+      int items_read = fscanf (fp, "%lld %32s", &stat_pid, cmd);
 	  
       if (items_read == 2 && pid == stat_pid)
 	{
@@ -130,7 +149,7 @@ command_from_pid (char *command, int maxlen, pid_t pid)
   else
     {
       /* Return the PID if a /proc entry for the process cannot be found.  */
-      snprintf (command, maxlen, "%d", pid);
+      snprintf (command, maxlen, "%lld", pid);
     }
 
   command[maxlen - 1] = '\0'; /* Ensure string is null-terminated.  */
@@ -138,13 +157,13 @@ command_from_pid (char *command, int maxlen, pid_t pid)
   xfree (stat_path);
 }
 
-/* Returns the command-line of the process with the given PID. The returned
-   string needs to be freed using xfree after use.  */
+/* Returns the command-line of the process with the given PID. The
+   returned string needs to be freed using xfree after use.  */
 
 static char *
-commandline_from_pid (pid_t pid)
+commandline_from_pid (PID_T pid)
 {
-  char *pathname = xstrprintf ("/proc/%d/cmdline", pid);
+  char *pathname = xstrprintf ("/proc/%lld/cmdline", pid);
   char *commandline = NULL;
   FILE *f = fopen (pathname, "r");
 
@@ -180,7 +199,8 @@ commandline_from_pid (pid_t pid)
 	}
       else
 	{
-	  /* Return the command in square brackets if the command-line is empty.  */
+	  /* Return the command in square brackets if the command-line
+	     is empty.  */
 	  commandline = (char *) xmalloc (32);
 	  commandline[0] = '[';
 	  command_from_pid (commandline + 1, 31, pid);
@@ -196,6 +216,9 @@ commandline_from_pid (pid_t pid)
   return commandline;
 }
 
+/* Finds the user name for the user UID and copies it into USER.  At
+   most MAXLEN characters are copied.  */
+
 static void
 user_from_uid (char *user, int maxlen, uid_t uid)
 {
@@ -204,19 +227,23 @@ user_from_uid (char *user, int maxlen, uid_t uid)
   if (pwentry)
     {
       strncpy (user, pwentry->pw_name, maxlen);
-      user[maxlen - 1] = '\0'; /* Ensure that the user name is null-terminated.  */
+      /* Ensure that the user name is null-terminated.  */
+      user[maxlen - 1] = '\0';
     }
   else
     user[0] = '\0';
 }
 
+/* Finds the owner of process PID and returns the user id in OWNER.
+   Returns 0 if the owner was found, -1 otherwise.  */
+
 static int
-get_process_owner (uid_t *owner, pid_t pid)
+get_process_owner (uid_t *owner, PID_T pid)
 {
   struct stat statbuf;
-  char procentry[sizeof ("/proc/4294967295")];
+  char procentry[sizeof ("/proc/") + MAX_PID_T_STRLEN];
 
-  sprintf (procentry, "/proc/%d", pid);
+  sprintf (procentry, "/proc/%lld", pid);
   
   if (stat (procentry, &statbuf) == 0 && S_ISDIR (statbuf.st_mode))
     {
@@ -227,6 +254,8 @@ get_process_owner (uid_t *owner, pid_t pid)
     return -1;
 }
 
+/* Returns the number of CPU cores found on the system.  */
+
 static int
 get_number_of_cpu_cores (void)
 {
@@ -247,31 +276,34 @@ get_number_of_cpu_cores (void)
   return cores;
 }
 
-/* CORES points to an array of at least get_number_of_cpu_cores () elements.  */
+/* Find the CPU cores used by process PID and return them in CORES.
+   CORES points to an array of at least get_number_of_cpu_cores ()
+   elements.  */
 
 static int
-get_cores_used_by_process (pid_t pid, int *cores)
+get_cores_used_by_process (PID_T pid, int *cores)
 {
-  char taskdir[sizeof ("/proc/4294967295/task")];
+  char taskdir[sizeof ("/proc/") + MAX_PID_T_STRLEN + sizeof ("/task") - 1];
   DIR *dir;
   struct dirent *dp;
   int task_count = 0;
 
-  sprintf (taskdir, "/proc/%d/task", pid);
+  sprintf (taskdir, "/proc/%lld/task", pid);
   dir = opendir (taskdir);
   if (dir)
     {
       while ((dp = readdir (dir)) != NULL)
 	{
-	  pid_t tid;
+	  PID_T tid;
 	  int core;
 
 	  if (!isdigit (dp->d_name[0])
-	      || NAMELEN (dp) > sizeof ("4294967295") - 1)
+	      || NAMELEN (dp) > MAX_PID_T_STRLEN)
 	    continue;
 
-	  tid = atoi (dp->d_name);
-	  core = linux_common_core_of_thread (ptid_build (pid, tid, 0));
+	  sscanf (dp->d_name, "%lld", &tid);
+	  core = linux_common_core_of_thread (ptid_build ((pid_t) pid,
+							  (pid_t) tid, 0));
 
 	  if (core >= 0)
 	    {
@@ -314,7 +346,7 @@ linux_xfer_osdata_processes (gdb_byte *readbuf,
 
 	  while ((dp = readdir (dirp)) != NULL)
 	    {
-	      pid_t pid;
+	      PID_T pid;
 	      uid_t owner;
 	      char user[UT_NAMESIZE];
 	      char *command_line;
@@ -324,10 +356,10 @@ linux_xfer_osdata_processes (gdb_byte *readbuf,
 	      int i;
 
 	      if (!isdigit (dp->d_name[0])
-		  || NAMELEN (dp) > sizeof ("4294967295") - 1)
+		  || NAMELEN (dp) > MAX_PID_T_STRLEN)
 		continue;
 
-	      sscanf (dp->d_name, "%d", &pid);
+	      sscanf (dp->d_name, "%lld", &pid);
 	      command_line = commandline_from_pid (pid);
 
 	      if (get_process_owner (&owner, pid) == 0)
@@ -343,7 +375,7 @@ linux_xfer_osdata_processes (gdb_byte *readbuf,
 	      for (i = 0; i < num_cores && task_count > 0; ++i)
 		if (cores[i])
 		  {
-		    char core_str[sizeof ("4294967205")];
+		    char core_str[sizeof ("4294967295")];
 
 		    sprintf (core_str, "%d", i);
 		    strcat (cores_str, core_str);
@@ -358,7 +390,7 @@ linux_xfer_osdata_processes (gdb_byte *readbuf,
 	      buffer_xml_printf (
 		  &buffer,
 		  "<item>"
-		  "<column name=\"pid\">%d</column>"
+		  "<column name=\"pid\">%lld</column>"
 		  "<column name=\"user\">%s</column>"
 		  "<column name=\"command\">%s</column>"
 		  "<column name=\"cores\">%s</column>"
@@ -396,6 +428,160 @@ linux_xfer_osdata_processes (gdb_byte *readbuf,
   return len;
 }
 
+/* Auxiliary function used by qsort to sort processes by process
+   group.  Compares two processes with ids PROCESS1 and PROCESS2.
+   PROCESS1 comes before PROCESS2 if it has a lower process group id.
+   If they belong to the same process group, PROCESS1 comes before
+   PROCESS2 if it has a lower process id or is the process group
+   leader.  */
+
+static int
+compare_processes (const void *process1, const void *process2)
+{
+  PID_T pid1 = *((PID_T *) process1);
+  PID_T pid2 = *((PID_T *) process2);
+  PID_T pgid1 = *((PID_T *) process1 + 1);
+  PID_T pgid2 = *((PID_T *) process2 + 1);
+
+  /* Sort by PGID.  */
+  if (pgid1 < pgid2)
+    return -1;
+  else if (pgid1 > pgid2)
+    return 1;
+  else
+    {
+      /* Process group leaders always come first, else sort by PID.  */
+      if (pid1 == pgid1)
+	return -1;
+      else if (pid2 == pgid2)
+	return 1;
+      else if (pid1 < pid2)
+	return -1;
+      else if (pid1 > pid2)
+	return 1;
+      else
+	return 0;
+    }
+}
+
+/* Collect all process groups from /proc.  */
+
+static LONGEST
+linux_xfer_osdata_processgroups (gdb_byte *readbuf,
+				 ULONGEST offset, LONGEST len)
+{
+  /* We make the process list snapshot when the object starts to be read.  */
+  static const char *buf;
+  static LONGEST len_avail = -1;
+  static struct buffer buffer;
+
+  if (offset == 0)
+    {
+      DIR *dirp;
+
+      if (len_avail != -1 && len_avail != 0)
+	buffer_free (&buffer);
+      len_avail = 0;
+      buf = NULL;
+      buffer_init (&buffer);
+      buffer_grow_str (&buffer, "<osdata type=\"process groups\">\n");
+
+      dirp = opendir ("/proc");
+      if (dirp)
+	{
+	  struct dirent *dp;
+	  const size_t list_block_size = 512;
+	  PID_T *process_list = (PID_T *) xmalloc (list_block_size * 2 * sizeof (PID_T));
+	  size_t process_count = 0;
+	  size_t i;
+
+	  /* Build list consisting of PIDs followed by their
+	     associated PGID.  */
+	  while ((dp = readdir (dirp)) != NULL)
+	    {
+	      PID_T pid, pgid;
+
+	      if (!isdigit (dp->d_name[0])
+		  || NAMELEN (dp) > MAX_PID_T_STRLEN)
+		continue;
+
+	      sscanf (dp->d_name, "%lld", &pid);
+	      pgid = getpgid (pid);
+
+	      if (pgid > 0)
+		{
+		  process_list[2 * process_count] = pid;
+		  process_list[2 * process_count + 1] = pgid;
+		  ++process_count;
+
+		  /* Increase the size of the list if necessary.  */
+		  if (process_count % list_block_size == 0)
+		    process_list = (PID_T *) xrealloc (
+			process_list,
+			(process_count + list_block_size)
+			* 2 * sizeof (PID_T));
+		}
+	    }
+
+	  closedir (dirp);
+
+	  /* Sort the process list.  */
+	  qsort (process_list, process_count, 2 * sizeof (PID_T),
+		 compare_processes);
+
+	  for (i = 0; i < process_count; ++i)
+	    {
+	      PID_T pid = process_list[2 * i];
+	      PID_T pgid = process_list[2 * i + 1];
+	      char leader_command[32];
+	      char *command_line;
+
+	      command_from_pid (leader_command, sizeof (leader_command), pgid);
+	      command_line = commandline_from_pid (pid);
+
+	      buffer_xml_printf (
+		  &buffer,
+		  "<item>"
+		  "<column name=\"pgid\">%lld</column>"
+		  "<column name=\"leader command\">%s</column>"
+		  "<column name=\"pid\">%lld</column>"
+		  "<column name=\"command line\">%s</column>"
+		  "</item>",
+		  pgid,
+		  leader_command,
+		  pid,
+		  command_line ? command_line : "");
+
+	      xfree (command_line);
+	    }
+
+	  xfree (process_list);
+	}   
+
+      buffer_grow_str0 (&buffer, "</osdata>\n");
+      buf = buffer_finish (&buffer);
+      len_avail = strlen (buf);
+    }
+
+  if (offset >= len_avail)
+    {
+      /* Done.  Get rid of the buffer.  */
+      buffer_free (&buffer);
+      buf = NULL;
+      len_avail = 0;
+      return 0;
+    }
+
+  if (len > len_avail - offset)
+    len = len_avail - offset;
+  memcpy (readbuf, buf + offset, len);
+
+  return len;
+}
+
+/* Collect all the threads in /proc by iterating through processes and
+   then tasks within each process.  */
+
 static LONGEST
 linux_xfer_osdata_threads (gdb_byte *readbuf,
 			   ULONGEST offset, LONGEST len)
@@ -436,7 +622,7 @@ linux_xfer_osdata_threads (gdb_byte *readbuf,
 		{
 		  DIR *dirp2;
 		  char *pathname;
-		  pid_t pid;
+		  PID_T pid;
 		  char command[32];
 
 		  pathname = xstrprintf ("/proc/%s/task", dp->d_name);
@@ -452,7 +638,7 @@ linux_xfer_osdata_threads (gdb_byte *readbuf,
 
 		      while ((dp2 = readdir (dirp2)) != NULL)
 			{
-			  pid_t tid;
+			  PID_T tid;
 			  int core;
 
 			  if (!isdigit (dp2->d_name[0])
@@ -465,9 +651,9 @@ linux_xfer_osdata_threads (gdb_byte *readbuf,
 			  buffer_xml_printf (
 			    &buffer,
 			    "<item>"
-			    "<column name=\"pid\">%d</column>"
+			    "<column name=\"pid\">%lld</column>"
 			    "<column name=\"command\">%s</column>"
-			    "<column name=\"tid\">%d</column>"
+			    "<column name=\"tid\">%lld</column>"
 			    "<column name=\"core\">%d</column>"
 			    "</item>",
 			    pid,
@@ -507,13 +693,878 @@ linux_xfer_osdata_threads (gdb_byte *readbuf,
   return len;
 }
 
+/* Collect all the open file descriptors found in /proc and put the details
+   found about them into READBUF.  */
+
+static LONGEST
+linux_xfer_osdata_fds (gdb_byte *readbuf,
+		       ULONGEST offset, LONGEST len)
+{
+  /* We make the process list snapshot when the object starts to be read.  */
+  static const char *buf;
+  static LONGEST len_avail = -1;
+  static struct buffer buffer;
+
+  if (offset == 0)
+    {
+      DIR *dirp;
+
+      if (len_avail != -1 && len_avail != 0)
+	buffer_free (&buffer);
+      len_avail = 0;
+      buf = NULL;
+      buffer_init (&buffer);
+      buffer_grow_str (&buffer, "<osdata type=\"files\">\n");
+
+      dirp = opendir ("/proc");
+      if (dirp)
+	{
+	  struct dirent *dp;
+
+	  while ((dp = readdir (dirp)) != NULL)
+	    {
+	      struct stat statbuf;
+	      char procentry[sizeof ("/proc/4294967295")];
+
+	      if (!isdigit (dp->d_name[0])
+		  || NAMELEN (dp) > sizeof ("4294967295") - 1)
+		continue;
+
+	      sprintf (procentry, "/proc/%s", dp->d_name);
+	      if (stat (procentry, &statbuf) == 0
+		  && S_ISDIR (statbuf.st_mode))
+		{
+		  char *pathname;
+		  DIR *dirp2;
+		  PID_T pid;
+		  char command[32];
+
+		  pid = atoi (dp->d_name);
+		  command_from_pid (command, sizeof (command), pid);
+
+		  pathname = xstrprintf ("/proc/%s/fd", dp->d_name);
+		  dirp2 = opendir (pathname);
+
+		  if (dirp2)
+		    {
+		      struct dirent *dp2;
+
+		      while ((dp2 = readdir (dirp2)) != NULL)
+			{
+			  char *fdname;
+			  char buf[1000];
+			  ssize_t rslt;
+
+			  if (!isdigit (dp2->d_name[0]))
+			    continue;
+
+			  fdname = xstrprintf ("%s/%s", pathname, dp2->d_name);
+			  rslt = readlink (fdname, buf, 1000);
+			  if (rslt >= 0)
+			    buf[rslt] = '\0';
+
+			  buffer_xml_printf (
+			    &buffer,
+			    "<item>"
+			    "<column name=\"pid\">%s</column>"
+			    "<column name=\"command\">%s</column>"
+			    "<column name=\"file descriptor\">%s</column>"
+			    "<column name=\"name\">%s</column>"
+			    "</item>",
+			    dp->d_name,
+			    command,
+			    dp2->d_name,
+			    (rslt >= 0 ? buf : dp2->d_name));
+			}
+
+		      closedir (dirp2);
+		    }
+
+		  xfree (pathname);
+		}
+	    }
+
+	  closedir (dirp);
+	}
+
+      buffer_grow_str0 (&buffer, "</osdata>\n");
+      buf = buffer_finish (&buffer);
+      len_avail = strlen (buf);
+    }
+
+  if (offset >= len_avail)
+    {
+      /* Done.  Get rid of the buffer.  */
+      buffer_free (&buffer);
+      buf = NULL;
+      len_avail = 0;
+      return 0;
+    }
+
+  if (len > len_avail - offset)
+    len = len_avail - offset;
+  memcpy (readbuf, buf + offset, len);
+
+  return len;
+}
+
+/* Returns the socket state STATE in textual form.  */
+
+static const char *
+format_socket_state (unsigned char state)
+{
+  /* Copied from include/net/tcp_states.h in the Linux kernel sources.  */
+  enum {
+    TCP_ESTABLISHED = 1,
+    TCP_SYN_SENT,
+    TCP_SYN_RECV,
+    TCP_FIN_WAIT1,
+    TCP_FIN_WAIT2,
+    TCP_TIME_WAIT,
+    TCP_CLOSE,
+    TCP_CLOSE_WAIT,
+    TCP_LAST_ACK,
+    TCP_LISTEN,
+    TCP_CLOSING
+  };
+
+  switch (state)
+    {
+    case TCP_ESTABLISHED:
+      return "ESTABLISHED";
+    case TCP_SYN_SENT:
+      return "SYN_SENT";
+    case TCP_SYN_RECV:
+      return "SYN_RECV";
+    case TCP_FIN_WAIT1:
+      return "FIN_WAIT1";
+    case TCP_FIN_WAIT2:
+      return "FIN_WAIT2";
+    case TCP_TIME_WAIT:
+      return "TIME_WAIT";
+    case TCP_CLOSE:
+      return "CLOSE";
+    case TCP_CLOSE_WAIT:
+      return "CLOSE_WAIT";
+    case TCP_LAST_ACK:
+      return "LAST_ACK";
+    case TCP_LISTEN:
+      return "LISTEN";
+    case TCP_CLOSING:
+      return "CLOSING";
+    default:
+      return "(unknown)";
+    }
+}
+
+union socket_addr
+  {
+    struct sockaddr sa;
+    struct sockaddr_in sin;
+    struct sockaddr_in6 sin6;
+  };
+
+/* Auxiliary function used by linux_xfer_osdata_isocket.  Formats
+   information for all open internet sockets of type FAMILY on the
+   system into BUFFER.  If TCP is set, only TCP sockets are processed,
+   otherwise only UDP sockets are processed.  */
+
+static void
+print_sockets (unsigned short family, int tcp, struct buffer *buffer)
+{
+  const char *proc_file;
+  FILE *fp;
+
+  if (family == AF_INET)
+    proc_file = tcp ? "/proc/net/tcp" : "/proc/net/udp";
+  else if (family == AF_INET6)
+    proc_file = tcp ? "/proc/net/tcp6" : "/proc/net/udp6";
+  else
+    return;
+
+  fp = fopen (proc_file, "r");
+  if (fp)
+    {
+      char buf[8192];
+
+      do
+	{
+	  if (fgets (buf, sizeof (buf), fp))
+	    {
+	      uid_t uid;
+	      unsigned long tlen, inode;
+	      int sl, timeout;
+	      unsigned int local_port, remote_port, state;
+	      unsigned int txq, rxq, trun, retn;
+	      char local_address[NI_MAXHOST], remote_address[NI_MAXHOST];
+	      char extra[512];
+	      int result;
+
+	      result = sscanf (buf,
+			       "%d: %33[0-9A-F]:%X %33[0-9A-F]:%X %X %X:%X %X:%lX %X %d %d %lu %512s\n",
+			       &sl,
+			       local_address, &local_port,
+			       remote_address, &remote_port,
+			       &state,
+			       &txq, &rxq,
+			       &trun, &tlen,
+			       &retn,
+			       &uid,
+			       &timeout,
+			       &inode,
+			       extra);
+	      
+	      if (result == 15)
+		{
+		  union socket_addr locaddr, remaddr;
+		  size_t addr_size;
+		  char user[UT_NAMESIZE];
+		  char local_service[NI_MAXSERV], remote_service[NI_MAXSERV];
+
+		  if (family == AF_INET)
+		    {
+		      sscanf (local_address, "%X",
+			      &locaddr.sin.sin_addr.s_addr);
+		      sscanf (remote_address, "%X",
+			      &remaddr.sin.sin_addr.s_addr);
+		      
+		      locaddr.sin.sin_port = htons (local_port);
+		      remaddr.sin.sin_port = htons (remote_port);
+
+		      addr_size = sizeof (struct sockaddr_in);
+		    }
+		  else
+		    {
+		      sscanf (local_address, "%8X%8X%8X%8X",
+			      locaddr.sin6.sin6_addr.s6_addr32,
+			      locaddr.sin6.sin6_addr.s6_addr32 + 1,
+			      locaddr.sin6.sin6_addr.s6_addr32 + 2,
+			      locaddr.sin6.sin6_addr.s6_addr32 + 3);
+		      sscanf (remote_address, "%8X%8X%8X%8X",
+			      remaddr.sin6.sin6_addr.s6_addr32,
+			      remaddr.sin6.sin6_addr.s6_addr32 + 1,
+			      remaddr.sin6.sin6_addr.s6_addr32 + 2,
+			      remaddr.sin6.sin6_addr.s6_addr32 + 3);
+
+		      locaddr.sin6.sin6_port = htons (local_port);
+		      remaddr.sin6.sin6_port = htons (remote_port);
+		      
+		      locaddr.sin6.sin6_flowinfo = 0;
+		      remaddr.sin6.sin6_flowinfo = 0;
+		      locaddr.sin6.sin6_scope_id = 0;
+		      remaddr.sin6.sin6_scope_id = 0;
+
+		      addr_size = sizeof (struct sockaddr_in6);
+		    }
+	      
+		  locaddr.sa.sa_family = remaddr.sa.sa_family = family;
+		      
+		  result = getnameinfo (&locaddr.sa, addr_size,
+					local_address, sizeof (local_address),
+					local_service, sizeof (local_service),
+					NI_NUMERICHOST | NI_NUMERICSERV
+					| (tcp ? 0 : NI_DGRAM));
+		  if (result)
+		    continue;
+		  
+		  result = getnameinfo (&remaddr.sa, addr_size,
+					remote_address,
+					sizeof (remote_address),
+					remote_service,
+					sizeof (remote_service),
+					NI_NUMERICHOST | NI_NUMERICSERV
+					| (tcp ? 0 : NI_DGRAM));
+		  if (result)
+		    continue;
+		  
+		  user_from_uid (user, sizeof (user), uid);
+		  
+		  buffer_xml_printf (
+		      buffer,
+		      "<item>"
+		      "<column name=\"local address\">%s</column>"
+		      "<column name=\"local port\">%s</column>"
+		      "<column name=\"remote address\">%s</column>"
+		      "<column name=\"remote port\">%s</column>"
+		      "<column name=\"state\">%s</column>"
+		      "<column name=\"user\">%s</column>"
+		      "<column name=\"family\">%s</column>" 
+		      "<column name=\"protocol\">%s</column>"
+		      "</item>",
+		      local_address,
+		      local_service,
+		      remote_address,
+		      remote_service,
+		      format_socket_state (state),
+		      user,
+		      (family == AF_INET) ? "INET" : "INET6",
+		      tcp ? "STREAM" : "DGRAM");
+		}
+	    }
+	}
+      while (!feof (fp));
+
+      fclose (fp);
+    }
+}
+
+/* Collect data about internet sockets and write it into READBUF.  */
+
+static LONGEST
+linux_xfer_osdata_isockets (gdb_byte *readbuf,
+			    ULONGEST offset, LONGEST len)
+{
+  static const char *buf;
+  static LONGEST len_avail = -1;
+  static struct buffer buffer;
+
+  if (offset == 0)
+    {
+      if (len_avail != -1 && len_avail != 0)
+	buffer_free (&buffer);
+      len_avail = 0;
+      buf = NULL;
+      buffer_init (&buffer);
+      buffer_grow_str (&buffer, "<osdata type=\"I sockets\">\n");
+
+      print_sockets (AF_INET, 1, &buffer);
+      print_sockets (AF_INET, 0, &buffer);
+      print_sockets (AF_INET6, 1, &buffer);
+      print_sockets (AF_INET6, 0, &buffer);
+
+      buffer_grow_str0 (&buffer, "</osdata>\n");
+      buf = buffer_finish (&buffer);
+      len_avail = strlen (buf);
+    }
+
+  if (offset >= len_avail)
+    {
+      /* Done.  Get rid of the buffer.  */
+      buffer_free (&buffer);
+      buf = NULL;
+      len_avail = 0;
+      return 0;
+    }
+
+  if (len > len_avail - offset)
+    len = len_avail - offset;
+  memcpy (readbuf, buf + offset, len);
+
+  return len;
+}
+
+/* Converts the time SECONDS into textual form and copies it into a
+   buffer TIME, with at most MAXLEN characters copied.  */
+
+static void
+time_from_time_t (char *time, int maxlen, TIME_T seconds)
+{
+  if (!seconds)
+    time[0] = '\0';
+  else
+    {
+      time_t t = (time_t) seconds;
+      
+      strncpy (time, ctime (&t), maxlen);
+      time[maxlen - 1] = '\0';
+    }
+}
+
+/* Finds the group name for the group GID and copies it into GROUP.
+   At most MAXLEN characters are copied.  */
+
+static void
+group_from_gid (char *group, int maxlen, gid_t gid)
+{
+  struct group *grentry = getgrgid (gid);
+  
+  if (grentry)
+    {
+      strncpy (group, grentry->gr_name, maxlen);
+      /* Ensure that the group name is null-terminated.  */
+      group[maxlen - 1] = '\0';
+    }
+  else
+    group[0] = '\0';
+}
+
+/* Collect data about shared memory recorded in /proc and write it
+   into READBUF.  */
+
+static LONGEST
+linux_xfer_osdata_shm (gdb_byte *readbuf,
+		       ULONGEST offset, LONGEST len)
+{
+  static const char *buf;
+  static LONGEST len_avail = -1;
+  static struct buffer buffer;
+
+  if (offset == 0)
+    {
+      FILE *fp;
+
+      if (len_avail != -1 && len_avail != 0)
+	buffer_free (&buffer);
+      len_avail = 0;
+      buf = NULL;
+      buffer_init (&buffer);
+      buffer_grow_str (&buffer, "<osdata type=\"shared memory\">\n");
+
+      fp = fopen ("/proc/sysvipc/shm", "r");
+      if (fp)
+	{
+	  char buf[8192];
+
+	  do
+	    {
+	      if (fgets (buf, sizeof (buf), fp))
+		{
+		  key_t key;
+		  uid_t uid, cuid;
+		  gid_t gid, cgid;
+		  PID_T cpid, lpid;
+		  int shmid, size, nattch;
+		  TIME_T atime, dtime, ctime;
+		  unsigned int perms;
+		  int items_read;
+				  
+		  items_read = sscanf (buf,
+				       "%d %d %o %d %lld %lld %d %u %u %u %u %lld %lld %lld",
+				       &key, &shmid, &perms, &size,
+				       &cpid, &lpid,
+				       &nattch,
+				       &uid, &gid, &cuid, &cgid,
+				       &atime, &dtime, &ctime);
+
+		  if (items_read == 14)
+		    {
+		      char user[UT_NAMESIZE], group[UT_NAMESIZE];
+		      char cuser[UT_NAMESIZE], cgroup[UT_NAMESIZE];
+		      char ccmd[32], lcmd[32];
+		      char atime_str[32], dtime_str[32], ctime_str[32];
+		      
+		      user_from_uid (user, sizeof (user), uid);
+		      group_from_gid (group, sizeof (group), gid);
+		      user_from_uid (cuser, sizeof (cuser), cuid);
+		      group_from_gid (cgroup, sizeof (cgroup), cgid);
+		      
+		      command_from_pid (ccmd, sizeof (ccmd), cpid);
+		      command_from_pid (lcmd, sizeof (lcmd), lpid);
+		      
+		      time_from_time_t (atime_str, sizeof (atime_str), atime);
+		      time_from_time_t (dtime_str, sizeof (dtime_str), dtime);
+		      time_from_time_t (ctime_str, sizeof (ctime_str), ctime);
+		      
+		      buffer_xml_printf (
+		          &buffer,
+			  "<item>"
+			  "<column name=\"key\">%d</column>"
+			  "<column name=\"shmid\">%d</column>"
+			  "<column name=\"permissions\">%o</column>"
+			  "<column name=\"size\">%d</column>"
+			  "<column name=\"creator command\">%s</column>"
+			  "<column name=\"last op. command\">%s</column>"
+			  "<column name=\"num attached\">%d</column>"
+			  "<column name=\"user\">%s</column>"
+			  "<column name=\"group\">%s</column>"
+			  "<column name=\"creator user\">%s</column>"
+			  "<column name=\"creator group\">%s</column>"
+			  "<column name=\"last shmat() time\">%s</column>"
+			  "<column name=\"last shmdt() time\">%s</column>"
+			  "<column name=\"last shmctl() time\">%s</column>"
+			  "</item>",
+			  key,
+			  shmid,
+			  perms,
+			  size,
+			  ccmd,
+			  lcmd,
+			  nattch,
+			  user,
+			  group,
+			  cuser,
+			  cgroup,
+			  atime_str,
+			  dtime_str,
+			  ctime_str);
+		    }
+		}
+	    }
+	  while (!feof (fp));
+
+	  fclose (fp);
+	}
+      
+      buffer_grow_str0 (&buffer, "</osdata>\n");
+      buf = buffer_finish (&buffer);
+      len_avail = strlen (buf);
+    }
+
+  if (offset >= len_avail)
+    {
+      /* Done.  Get rid of the buffer.  */
+      buffer_free (&buffer);
+      buf = NULL;
+      len_avail = 0;
+      return 0;
+    }
+
+  if (len > len_avail - offset)
+    len = len_avail - offset;
+  memcpy (readbuf, buf + offset, len);
+
+  return len;
+}
+
+/* Collect data about semaphores recorded in /proc and write it
+   into READBUF.  */
+
+static LONGEST
+linux_xfer_osdata_sem (gdb_byte *readbuf,
+		       ULONGEST offset, LONGEST len)
+{
+  static const char *buf;
+  static LONGEST len_avail = -1;
+  static struct buffer buffer;
+
+  if (offset == 0)
+    {
+      FILE *fp;
+      
+      if (len_avail != -1 && len_avail != 0)
+	buffer_free (&buffer);
+      len_avail = 0;
+      buf = NULL;
+      buffer_init (&buffer);
+      buffer_grow_str (&buffer, "<osdata type=\"semaphores\">\n");
+
+      fp = fopen ("/proc/sysvipc/sem", "r");
+      if (fp)
+	{
+	  char buf[8192];
+	  
+	  do
+	    {
+	      if (fgets (buf, sizeof (buf), fp))
+		{
+		  key_t key;
+		  uid_t uid, cuid;
+		  gid_t gid, cgid;
+		  unsigned int perms, nsems;
+		  int semid;
+		  TIME_T otime, ctime;
+		  int items_read;
+		  
+		  items_read = sscanf (buf,
+				       "%d %d %o %u %d %d %d %d %lld %lld",
+				       &key, &semid, &perms, &nsems,
+				       &uid, &gid, &cuid, &cgid,
+				       &otime, &ctime);
+		  
+		  if (items_read == 10)
+		    {
+		      char user[UT_NAMESIZE], group[UT_NAMESIZE];
+		      char cuser[UT_NAMESIZE], cgroup[UT_NAMESIZE];
+		      char otime_str[32], ctime_str[32];
+		      
+		      user_from_uid (user, sizeof (user), uid);
+		      group_from_gid (group, sizeof (group), gid);
+		      user_from_uid (cuser, sizeof (cuser), cuid);
+		      group_from_gid (cgroup, sizeof (cgroup), cgid);
+		      
+		      time_from_time_t (otime_str, sizeof (otime_str), otime);
+		      time_from_time_t (ctime_str, sizeof (ctime_str), ctime);
+		      
+		      buffer_xml_printf (
+			  &buffer,
+			  "<item>"
+			  "<column name=\"key\">%d</column>"
+			  "<column name=\"semid\">%d</column>"
+			  "<column name=\"permissions\">%o</column>"
+			  "<column name=\"num semaphores\">%u</column>"
+			  "<column name=\"user\">%s</column>"
+			  "<column name=\"group\">%s</column>"
+			  "<column name=\"creator user\">%s</column>"
+			  "<column name=\"creator group\">%s</column>"
+			  "<column name=\"last semop() time\">%s</column>"
+			  "<column name=\"last semctl() time\">%s</column>"
+			  "</item>",
+			  key,
+			  semid,
+			  perms,
+			  nsems,
+			  user,
+			  group,
+			  cuser,
+			  cgroup,
+			  otime_str,
+			  ctime_str);
+		    }
+		}
+	    }
+	  while (!feof (fp));
+
+	  fclose (fp);
+	}
+
+      buffer_grow_str0 (&buffer, "</osdata>\n");
+      buf = buffer_finish (&buffer);
+      len_avail = strlen (buf);
+    }
+
+  if (offset >= len_avail)
+    {
+      /* Done.  Get rid of the buffer.  */
+      buffer_free (&buffer);
+      buf = NULL;
+      len_avail = 0;
+      return 0;
+    }
+
+  if (len > len_avail - offset)
+    len = len_avail - offset;
+  memcpy (readbuf, buf + offset, len);
+
+  return len;
+}
+
+/* Collect data about message queues recorded in /proc and write it
+   into READBUF.  */
+
+static LONGEST
+linux_xfer_osdata_msg (gdb_byte *readbuf,
+		       ULONGEST offset, LONGEST len)
+{
+  static const char *buf;
+  static LONGEST len_avail = -1;
+  static struct buffer buffer;
+
+  if (offset == 0)
+    {
+      FILE *fp;
+      
+      if (len_avail != -1 && len_avail != 0)
+	buffer_free (&buffer);
+      len_avail = 0;
+      buf = NULL;
+      buffer_init (&buffer);
+      buffer_grow_str (&buffer, "<osdata type=\"message queues\">\n");
+      
+      fp = fopen ("/proc/sysvipc/msg", "r");
+      if (fp)
+	{
+	  char buf[8192];
+	  
+	  do
+	    {
+	      if (fgets (buf, sizeof (buf), fp))
+		{
+		  key_t key;
+		  PID_T lspid, lrpid;
+		  uid_t uid, cuid;
+		  gid_t gid, cgid;
+		  unsigned int perms, cbytes, qnum;
+		  int msqid;
+		  TIME_T stime, rtime, ctime;
+		  int items_read;
+		  
+		  items_read = sscanf (buf,
+				       "%d %d %o %u %u %lld %lld %d %d %d %d %lld %lld %lld",
+				       &key, &msqid, &perms, &cbytes, &qnum,
+				       &lspid, &lrpid, &uid, &gid, &cuid, &cgid,
+				       &stime, &rtime, &ctime);
+		  
+		  if (items_read == 14)
+		    {
+		      char user[UT_NAMESIZE], group[UT_NAMESIZE];
+		      char cuser[UT_NAMESIZE], cgroup[UT_NAMESIZE];
+		      char lscmd[32], lrcmd[32];
+		      char stime_str[32], rtime_str[32], ctime_str[32];
+		      
+		      user_from_uid (user, sizeof (user), uid);
+		      group_from_gid (group, sizeof (group), gid);
+		      user_from_uid (cuser, sizeof (cuser), cuid);
+		      group_from_gid (cgroup, sizeof (cgroup), cgid);
+		      
+		      command_from_pid (lscmd, sizeof (lscmd), lspid);
+		      command_from_pid (lrcmd, sizeof (lrcmd), lrpid);
+		      
+		      time_from_time_t (stime_str, sizeof (stime_str), stime);
+		      time_from_time_t (rtime_str, sizeof (rtime_str), rtime);
+		      time_from_time_t (ctime_str, sizeof (ctime_str), ctime);
+		      
+		      buffer_xml_printf (
+			  &buffer,
+			  "<item>"
+			  "<column name=\"key\">%d</column>"
+			  "<column name=\"msqid\">%d</column>"
+			  "<column name=\"permissions\">%o</column>"
+			  "<column name=\"num used bytes\">%u</column>"
+			  "<column name=\"num messages\">%u</column>"
+			  "<column name=\"last msgsnd() command\">%s</column>"
+			  "<column name=\"last msgrcv() command\">%s</column>"
+			  "<column name=\"user\">%s</column>"
+			  "<column name=\"group\">%s</column>"
+			  "<column name=\"creator user\">%s</column>"
+			  "<column name=\"creator group\">%s</column>"
+			  "<column name=\"last msgsnd() time\">%s</column>"
+			  "<column name=\"last msgrcv() time\">%s</column>"
+			  "<column name=\"last msgctl() time\">%s</column>"
+			  "</item>",
+			  key,
+			  msqid,
+			  perms,
+			  cbytes,
+			  qnum,
+			  lscmd,
+			  lrcmd,
+			  user,
+			  group,
+			  cuser,
+			  cgroup,
+			  stime_str,
+			  rtime_str,
+			  ctime_str);
+		    }
+		}
+	    }
+	  while (!feof (fp));
+
+	  fclose (fp);
+	}
+
+      buffer_grow_str0 (&buffer, "</osdata>\n");
+      buf = buffer_finish (&buffer);
+      len_avail = strlen (buf);
+    }
+
+  if (offset >= len_avail)
+    {
+      /* Done.  Get rid of the buffer.  */
+      buffer_free (&buffer);
+      buf = NULL;
+      len_avail = 0;
+      return 0;
+    }
+
+  if (len > len_avail - offset)
+    len = len_avail - offset;
+  memcpy (readbuf, buf + offset, len);
+
+  return len;
+}
+
+/* Collect data about loaded kernel modules and write it into
+   READBUF.  */
+
+static LONGEST
+linux_xfer_osdata_modules (gdb_byte *readbuf,
+			   ULONGEST offset, LONGEST len)
+{
+  static const char *buf;
+  static LONGEST len_avail = -1;
+  static struct buffer buffer;
+
+  if (offset == 0)
+    {
+      FILE *fp;
+
+      if (len_avail != -1 && len_avail != 0)
+	buffer_free (&buffer);
+      len_avail = 0;
+      buf = NULL;
+      buffer_init (&buffer);
+      buffer_grow_str (&buffer, "<osdata type=\"modules\">\n");
+
+      fp = fopen ("/proc/modules", "r");
+      if (fp)
+	{
+	  char buf[8192];
+	  
+	  do
+	    {
+	      if (fgets (buf, sizeof (buf), fp))
+		{
+		  char name[64], dependencies[256], status[16];
+		  unsigned int size;
+		  unsigned long long address;
+		  int uses;
+		  int items_read;
+		  
+		  items_read = sscanf (buf,
+				       "%64s %d %d %256s %16s 0x%llx",
+				       name, &size, &uses,
+				       dependencies, status, &address);
+
+		  if (items_read == 6)
+		    buffer_xml_printf (
+			&buffer,
+			"<item>"
+			"<column name=\"name\">%s</column>"
+			"<column name=\"size\">%u</column>"
+			"<column name=\"num uses\">%d</column>"
+			"<column name=\"dependencies\">%s</column>"
+			"<column name=\"status\">%s</column>"
+			"<column name=\"address\">%llx</column>"
+			"</item>",
+			name,
+			size,
+			uses,
+			dependencies,
+			status,
+			address);
+		}
+	    }
+	  while (!feof (fp));
+
+	  fclose (fp);
+	}
+
+      buffer_grow_str0 (&buffer, "</osdata>\n");
+      buf = buffer_finish (&buffer);
+      len_avail = strlen (buf);
+    }
+
+  if (offset >= len_avail)
+    {
+      /* Done.  Get rid of the buffer.  */
+      buffer_free (&buffer);
+      buf = NULL;
+      len_avail = 0;
+      return 0;
+    }
+
+  if (len > len_avail - offset)
+    len = len_avail - offset;
+  memcpy (readbuf, buf + offset, len);
+
+  return len;
+}
+
 struct osdata_type {
   char *type;
+  char *title;
   char *description;
   LONGEST (*getter) (gdb_byte *readbuf, ULONGEST offset, LONGEST len);
 } osdata_table[] = {
-  { "processes", "Listing of all processes", linux_xfer_osdata_processes },
-  { "threads", "Listing of all threads", linux_xfer_osdata_threads },
+  { "processes", "Processes", "Listing of all processes",
+    linux_xfer_osdata_processes },
+  { "procgroups", "Process groups", "Listing of all process groups",
+    linux_xfer_osdata_processgroups },
+  { "threads", "Threads", "Listing of all threads",
+    linux_xfer_osdata_threads },
+  { "files", "File descriptors", "Listing of all file descriptors",
+    linux_xfer_osdata_fds },
+  { "sockets", "Sockets", "Listing of all internet-domain sockets",
+    linux_xfer_osdata_isockets },
+  { "shm", "Shared-memory regions", "Listing of all shared-memory regions",
+    linux_xfer_osdata_shm },
+  { "semaphores", "Semaphores", "Listing of all semaphores",
+    linux_xfer_osdata_sem },
+  { "msg", "Message queues", "Listing of all message queues",
+    linux_xfer_osdata_msg },
+  { "modules", "Kernel modules", "Listing of all loaded kernel modules",
+    linux_xfer_osdata_modules },
   { NULL, NULL, NULL }
 };
 
@@ -544,9 +1595,11 @@ linux_common_xfer_osdata (const char *annex, gdb_byte *readbuf,
 			       "<item>"
 			       "<column name=\"Type\">%s</column>"
 			       "<column name=\"Description\">%s</column>"
+			       "<column name=\"Title\">%s</column>"
 			       "</item>",
 			       osdata_table[i].type,
-			       osdata_table[i].description);
+			       osdata_table[i].description,
+			       osdata_table[i].title);
 
 	  buffer_grow_str0 (&buffer, "</osdata>\n");
 	  buf = buffer_finish (&buffer);
diff --git a/gdb/common/linux-procfs.c b/gdb/common/linux-procfs.c
index 421f36e..a5aa830 100644
--- a/gdb/common/linux-procfs.c
+++ b/gdb/common/linux-procfs.c
@@ -28,28 +28,93 @@
 /* Return the TGID of LWPID from /proc/pid/status.  Returns -1 if not
    found.  */
 
-int
-linux_proc_get_tgid (int lwpid)
+static int
+linux_proc_get_int (pid_t lwpid, const char *field)
 {
+  size_t field_len = strlen (field);
   FILE *status_file;
   char buf[100];
-  int tgid = -1;
+  int retval = -1;
 
   snprintf (buf, sizeof (buf), "/proc/%d/status", (int) lwpid);
   status_file = fopen (buf, "r");
-  if (status_file != NULL)
+  if (status_file == NULL)
     {
-      while (fgets (buf, sizeof (buf), status_file))
-	{
-	  if (strncmp (buf, "Tgid:", 5) == 0)
-	    {
-	      tgid = strtoul (buf + strlen ("Tgid:"), NULL, 10);
-	      break;
-	    }
-	}
-
-      fclose (status_file);
+      warning (_("unable to open /proc file '%s'"), buf);
+      return -1;
     }
 
-  return tgid;
+  while (fgets (buf, sizeof (buf), status_file))
+    if (strncmp (buf, field, field_len) == 0 && buf[field_len] == ':')
+      {
+	retval = strtol (&buf[field_len + 1], NULL, 10);
+	break;
+      }
+
+  fclose (status_file);
+  return retval;
+}
+
+/* Return the TGID of LWPID from /proc/pid/status.  Returns -1 if not
+   found.  */
+
+int
+linux_proc_get_tgid (pid_t lwpid)
+{
+  return linux_proc_get_int (lwpid, "Tgid");
+}
+
+/* See linux-procfs.h.  */
+
+pid_t
+linux_proc_get_tracerpid (pid_t lwpid)
+{
+  return linux_proc_get_int (lwpid, "TracerPid");
+}
+
+/* Return non-zero if 'State' of /proc/PID/status contains STATE.  */
+
+static int
+linux_proc_pid_has_state (pid_t pid, const char *state)
+{
+  char buffer[100];
+  FILE *procfile;
+  int retval;
+  int have_state;
+
+  xsnprintf (buffer, sizeof (buffer), "/proc/%d/status", (int) pid);
+  procfile = fopen (buffer, "r");
+  if (procfile == NULL)
+    {
+      warning (_("unable to open /proc file '%s'"), buffer);
+      return 0;
+    }
+
+  have_state = 0;
+  while (fgets (buffer, sizeof (buffer), procfile) != NULL)
+    if (strncmp (buffer, "State:", 6) == 0)
+      {
+	have_state = 1;
+	break;
+      }
+  retval = (have_state && strstr (buffer, state) != NULL);
+  fclose (procfile);
+  return retval;
+}
+
+/* Detect `T (stopped)' in `/proc/PID/status'.
+   Other states including `T (tracing stop)' are reported as false.  */
+
+int
+linux_proc_pid_is_stopped (pid_t pid)
+{
+  return linux_proc_pid_has_state (pid, "T (stopped)");
+}
+
+/* See linux-procfs.h declaration.  */
+
+int
+linux_proc_pid_is_zombie (pid_t pid)
+{
+  return linux_proc_pid_has_state (pid, "Z (zombie)");
 }
diff --git a/gdb/common/linux-procfs.h b/gdb/common/linux-procfs.h
index a4ba4a1..167b507 100644
--- a/gdb/common/linux-procfs.h
+++ b/gdb/common/linux-procfs.h
@@ -24,6 +24,20 @@
 /* Return the TGID of LWPID from /proc/pid/status.  Returns -1 if not
    found.  */
 
-extern int linux_proc_get_tgid (int lwpid);
+extern int linux_proc_get_tgid (pid_t lwpid);
+
+/* Return the TracerPid of LWPID from /proc/pid/status.  Returns -1 if not
+   found.  */
+
+extern pid_t linux_proc_get_tracerpid (pid_t lwpid);
+
+/* Detect `T (stopped)' in `/proc/PID/status'.
+   Other states including `T (tracing stop)' are reported as false.  */
+
+extern int linux_proc_pid_is_stopped (pid_t pid);
+
+/* Return non-zero if PID is a zombie.  */
+
+extern int linux_proc_pid_is_zombie (pid_t pid);
 
 #endif /* COMMON_LINUX_PROCFS_H */
diff --git a/gdb/common/linux-ptrace.c b/gdb/common/linux-ptrace.c
new file mode 100644
index 0000000..fdec5d6
--- /dev/null
+++ b/gdb/common/linux-ptrace.c
@@ -0,0 +1,173 @@
+/* Linux-specific ptrace manipulation routines.
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifdef GDBSERVER
+#include "server.h"
+#else
+#include "defs.h"
+#include "gdb_string.h"
+#endif
+
+#include "linux-ptrace.h"
+#include "linux-procfs.h"
+#include "buffer.h"
+#include "gdb_assert.h"
+
+/* Find all possible reasons we could fail to attach PID and append these
+   newline terminated reason strings to initialized BUFFER.  '\0' termination
+   of BUFFER must be done by the caller.  */
+
+void
+linux_ptrace_attach_warnings (pid_t pid, struct buffer *buffer)
+{
+  pid_t tracerpid;
+
+  tracerpid = linux_proc_get_tracerpid (pid);
+  if (tracerpid > 0)
+    buffer_xml_printf (buffer, _("warning: process %d is already traced "
+				 "by process %d\n"),
+		       (int) pid, (int) tracerpid);
+
+  if (linux_proc_pid_is_zombie (pid))
+    buffer_xml_printf (buffer, _("warning: process %d is a zombie "
+				 "- the process has already terminated\n"),
+		       (int) pid);
+}
+
+#ifdef __i386__
+
+/* Address of the 'ret' instruction in asm code block below.  */
+extern void (linux_ptrace_test_ret_to_nx_instr) (void);
+
+#include <sys/reg.h>
+#include <sys/mman.h>
+#include <signal.h>
+#include <sys/wait.h>
+#include <stdint.h>
+
+#endif /* __i386__ */
+
+/* Test broken off-trunk Linux kernel patchset for NX support on i386.  It was
+   removed in Fedora kernel 88fa1f0332d188795ed73d7ac2b1564e11a0b4cd.  */
+
+static void
+linux_ptrace_test_ret_to_nx (void)
+{
+#ifdef __i386__
+  pid_t child, got_pid;
+  gdb_byte *return_address, *pc;
+  long l;
+  int status;
+
+  return_address = mmap (NULL, 2, PROT_READ | PROT_WRITE,
+			 MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+  if (return_address == MAP_FAILED)
+    {
+      warning (_("linux_ptrace_test_ret_to_nx: Cannot mmap: %s"),
+	       strerror (errno));
+      return;
+    }
+
+  /* Put there 'int3'.  */
+  *return_address = 0xcc;
+
+  child = fork ();
+  switch (child)
+    {
+    case -1:
+      warning (_("linux_ptrace_test_ret_to_nx: Cannot fork: %s"),
+	       strerror (errno));
+      return;
+
+    case 0:
+      l = ptrace (PTRACE_TRACEME, 0, NULL, NULL);
+      if (l != 0)
+	warning (_("linux_ptrace_test_ret_to_nx: Cannot PTRACE_TRACEME: %s"),
+		 strerror (errno));
+      else
+	{
+	  asm volatile ("pushl %0;"
+			".globl linux_ptrace_test_ret_to_nx_instr;"
+			"linux_ptrace_test_ret_to_nx_instr:"
+			"ret"
+			: : "r" (return_address) : "%esp", "memory");
+	  gdb_assert_not_reached ("asm block did not terminate");
+	}
+
+      _exit (1);
+    }
+
+  got_pid = waitpid (child, &status, 0);
+  gdb_assert (got_pid == child);
+  gdb_assert (WIFSTOPPED (status));
+
+  /* We may get SIGSEGV due to missing PROT_EXEC of the return_address.  */
+  gdb_assert (WSTOPSIG (status) == SIGTRAP || WSTOPSIG (status) == SIGSEGV);
+
+  errno = 0;
+  l = ptrace (PTRACE_PEEKUSER, child, (void *) (uintptr_t) (EIP * 4), NULL);
+  gdb_assert (errno == 0);
+  pc = (void *) (uintptr_t) l;
+
+  if (ptrace (PTRACE_KILL, child, NULL, NULL) != 0)
+    warning (_("linux_ptrace_test_ret_to_nx: Cannot PTRACE_KILL: %s"),
+	     strerror (errno));
+  else
+    {
+      int kill_status;
+
+      got_pid = waitpid (child, &kill_status, 0);
+      gdb_assert (got_pid == child);
+      gdb_assert (WIFSIGNALED (kill_status));
+    }
+
+  /* + 1 is there as x86* stops after the 'int3' instruction.  */
+  if (WSTOPSIG (status) == SIGTRAP && pc == return_address + 1)
+    {
+      /* PASS */
+      return;
+    }
+
+  /* We may get SIGSEGV due to missing PROT_EXEC of the RETURN_ADDRESS page.  */
+  if (WSTOPSIG (status) == SIGSEGV && pc == return_address)
+    {
+      /* PASS */
+      return;
+    }
+
+  gdb_assert ((void (*) (void)) pc == &linux_ptrace_test_ret_to_nx_instr);
+
+  warning (_("Cannot call inferior functions, you have broken "
+	     "Linux kernel i386 NX (non-executable pages) support!"));
+#endif /* __i386__ */
+}
+
+/* Display possible problems on this system.  Display them only once per GDB
+   execution.  */
+
+void
+linux_ptrace_init_warnings (void)
+{
+  static int warned = 0;
+
+  if (warned)
+    return;
+  warned = 1;
+
+  linux_ptrace_test_ret_to_nx ();
+}
diff --git a/gdb/common/linux-ptrace.h b/gdb/common/linux-ptrace.h
index 96ac3fb..96ad33d 100644
--- a/gdb/common/linux-ptrace.h
+++ b/gdb/common/linux-ptrace.h
@@ -18,6 +18,8 @@
 #ifndef COMMON_LINUX_PTRACE_H
 #define COMMON_LINUX_PTRACE_H
 
+struct buffer;
+
 #include <sys/ptrace.h>
 
 #ifndef PTRACE_GETSIGINFO
@@ -65,4 +67,7 @@
 #define __WALL          0x40000000 /* Wait for any child.  */
 #endif
 
+extern void linux_ptrace_attach_warnings (pid_t pid, struct buffer *buffer);
+extern void linux_ptrace_init_warnings (void);
+
 #endif /* COMMON_LINUX_PTRACE_H */
diff --git a/gdb/common/signals.c b/gdb/common/signals.c
index 75699db..3ef9840 100644
--- a/gdb/common/signals.c
+++ b/gdb/common/signals.c
@@ -47,7 +47,7 @@ struct gdbarch;
 #endif
 
 /* This table must match in order and size the signals in enum
-   target_signal.  */
+   gdb_signal.  */
 
 static const struct {
   const char *name;
@@ -62,19 +62,19 @@ static const struct {
 
 /* Return the string for a signal.  */
 const char *
-target_signal_to_string (enum target_signal sig)
+gdb_signal_to_string (enum gdb_signal sig)
 {
-  if ((int) sig >= TARGET_SIGNAL_FIRST && (int) sig <= TARGET_SIGNAL_LAST)
+  if ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST)
     return signals[sig].string;
   else
-    return signals[TARGET_SIGNAL_UNKNOWN].string;
+    return signals[GDB_SIGNAL_UNKNOWN].string;
 }
 
 /* Return the name for a signal.  */
 const char *
-target_signal_to_name (enum target_signal sig)
+gdb_signal_to_name (enum gdb_signal sig)
 {
-  if ((int) sig >= TARGET_SIGNAL_FIRST && (int) sig <= TARGET_SIGNAL_LAST
+  if ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST
       && signals[sig].name != NULL)
     return signals[sig].name;
   else
@@ -84,24 +84,24 @@ target_signal_to_name (enum target_signal sig)
 }
 
 /* Given a name, return its signal.  */
-enum target_signal
-target_signal_from_name (const char *name)
+enum gdb_signal
+gdb_signal_from_name (const char *name)
 {
-  enum target_signal sig;
+  enum gdb_signal sig;
 
   /* It's possible we also should allow "SIGCLD" as well as "SIGCHLD"
-     for TARGET_SIGNAL_SIGCHLD.  SIGIOT, on the other hand, is more
+     for GDB_SIGNAL_SIGCHLD.  SIGIOT, on the other hand, is more
      questionable; seems like by now people should call it SIGABRT
      instead.  */
 
   /* This ugly cast brought to you by the native VAX compiler.  */
-  for (sig = TARGET_SIGNAL_HUP;
-       sig < TARGET_SIGNAL_LAST;
-       sig = (enum target_signal) ((int) sig + 1))
+  for (sig = GDB_SIGNAL_HUP;
+       sig < GDB_SIGNAL_LAST;
+       sig = (enum gdb_signal) ((int) sig + 1))
     if (signals[sig].name != NULL
 	&& strcmp (name, signals[sig].name) == 0)
       return sig;
-  return TARGET_SIGNAL_UNKNOWN;
+  return GDB_SIGNAL_UNKNOWN;
 }
 

 /* The following functions are to help certain targets deal
@@ -109,198 +109,198 @@ target_signal_from_name (const char *name)
    a file called native-utils.c or unixwaitstatus-utils.c or whatever.  */
 
 /* Convert host signal to our signals.  */
-enum target_signal
-target_signal_from_host (int hostsig)
+enum gdb_signal
+gdb_signal_from_host (int hostsig)
 {
   /* A switch statement would make sense but would require special kludges
      to deal with the cases where more than one signal has the same number.  */
 
   if (hostsig == 0)
-    return TARGET_SIGNAL_0;
+    return GDB_SIGNAL_0;
 
 #if defined (SIGHUP)
   if (hostsig == SIGHUP)
-    return TARGET_SIGNAL_HUP;
+    return GDB_SIGNAL_HUP;
 #endif
 #if defined (SIGINT)
   if (hostsig == SIGINT)
-    return TARGET_SIGNAL_INT;
+    return GDB_SIGNAL_INT;
 #endif
 #if defined (SIGQUIT)
   if (hostsig == SIGQUIT)
-    return TARGET_SIGNAL_QUIT;
+    return GDB_SIGNAL_QUIT;
 #endif
 #if defined (SIGILL)
   if (hostsig == SIGILL)
-    return TARGET_SIGNAL_ILL;
+    return GDB_SIGNAL_ILL;
 #endif
 #if defined (SIGTRAP)
   if (hostsig == SIGTRAP)
-    return TARGET_SIGNAL_TRAP;
+    return GDB_SIGNAL_TRAP;
 #endif
 #if defined (SIGABRT)
   if (hostsig == SIGABRT)
-    return TARGET_SIGNAL_ABRT;
+    return GDB_SIGNAL_ABRT;
 #endif
 #if defined (SIGEMT)
   if (hostsig == SIGEMT)
-    return TARGET_SIGNAL_EMT;
+    return GDB_SIGNAL_EMT;
 #endif
 #if defined (SIGFPE)
   if (hostsig == SIGFPE)
-    return TARGET_SIGNAL_FPE;
+    return GDB_SIGNAL_FPE;
 #endif
 #if defined (SIGKILL)
   if (hostsig == SIGKILL)
-    return TARGET_SIGNAL_KILL;
+    return GDB_SIGNAL_KILL;
 #endif
 #if defined (SIGBUS)
   if (hostsig == SIGBUS)
-    return TARGET_SIGNAL_BUS;
+    return GDB_SIGNAL_BUS;
 #endif
 #if defined (SIGSEGV)
   if (hostsig == SIGSEGV)
-    return TARGET_SIGNAL_SEGV;
+    return GDB_SIGNAL_SEGV;
 #endif
 #if defined (SIGSYS)
   if (hostsig == SIGSYS)
-    return TARGET_SIGNAL_SYS;
+    return GDB_SIGNAL_SYS;
 #endif
 #if defined (SIGPIPE)
   if (hostsig == SIGPIPE)
-    return TARGET_SIGNAL_PIPE;
+    return GDB_SIGNAL_PIPE;
 #endif
 #if defined (SIGALRM)
   if (hostsig == SIGALRM)
-    return TARGET_SIGNAL_ALRM;
+    return GDB_SIGNAL_ALRM;
 #endif
 #if defined (SIGTERM)
   if (hostsig == SIGTERM)
-    return TARGET_SIGNAL_TERM;
+    return GDB_SIGNAL_TERM;
 #endif
 #if defined (SIGUSR1)
   if (hostsig == SIGUSR1)
-    return TARGET_SIGNAL_USR1;
+    return GDB_SIGNAL_USR1;
 #endif
 #if defined (SIGUSR2)
   if (hostsig == SIGUSR2)
-    return TARGET_SIGNAL_USR2;
+    return GDB_SIGNAL_USR2;
 #endif
 #if defined (SIGCLD)
   if (hostsig == SIGCLD)
-    return TARGET_SIGNAL_CHLD;
+    return GDB_SIGNAL_CHLD;
 #endif
 #if defined (SIGCHLD)
   if (hostsig == SIGCHLD)
-    return TARGET_SIGNAL_CHLD;
+    return GDB_SIGNAL_CHLD;
 #endif
 #if defined (SIGPWR)
   if (hostsig == SIGPWR)
-    return TARGET_SIGNAL_PWR;
+    return GDB_SIGNAL_PWR;
 #endif
 #if defined (SIGWINCH)
   if (hostsig == SIGWINCH)
-    return TARGET_SIGNAL_WINCH;
+    return GDB_SIGNAL_WINCH;
 #endif
 #if defined (SIGURG)
   if (hostsig == SIGURG)
-    return TARGET_SIGNAL_URG;
+    return GDB_SIGNAL_URG;
 #endif
 #if defined (SIGIO)
   if (hostsig == SIGIO)
-    return TARGET_SIGNAL_IO;
+    return GDB_SIGNAL_IO;
 #endif
 #if defined (SIGPOLL)
   if (hostsig == SIGPOLL)
-    return TARGET_SIGNAL_POLL;
+    return GDB_SIGNAL_POLL;
 #endif
 #if defined (SIGSTOP)
   if (hostsig == SIGSTOP)
-    return TARGET_SIGNAL_STOP;
+    return GDB_SIGNAL_STOP;
 #endif
 #if defined (SIGTSTP)
   if (hostsig == SIGTSTP)
-    return TARGET_SIGNAL_TSTP;
+    return GDB_SIGNAL_TSTP;
 #endif
 #if defined (SIGCONT)
   if (hostsig == SIGCONT)
-    return TARGET_SIGNAL_CONT;
+    return GDB_SIGNAL_CONT;
 #endif
 #if defined (SIGTTIN)
   if (hostsig == SIGTTIN)
-    return TARGET_SIGNAL_TTIN;
+    return GDB_SIGNAL_TTIN;
 #endif
 #if defined (SIGTTOU)
   if (hostsig == SIGTTOU)
-    return TARGET_SIGNAL_TTOU;
+    return GDB_SIGNAL_TTOU;
 #endif
 #if defined (SIGVTALRM)
   if (hostsig == SIGVTALRM)
-    return TARGET_SIGNAL_VTALRM;
+    return GDB_SIGNAL_VTALRM;
 #endif
 #if defined (SIGPROF)
   if (hostsig == SIGPROF)
-    return TARGET_SIGNAL_PROF;
+    return GDB_SIGNAL_PROF;
 #endif
 #if defined (SIGXCPU)
   if (hostsig == SIGXCPU)
-    return TARGET_SIGNAL_XCPU;
+    return GDB_SIGNAL_XCPU;
 #endif
 #if defined (SIGXFSZ)
   if (hostsig == SIGXFSZ)
-    return TARGET_SIGNAL_XFSZ;
+    return GDB_SIGNAL_XFSZ;
 #endif
 #if defined (SIGWIND)
   if (hostsig == SIGWIND)
-    return TARGET_SIGNAL_WIND;
+    return GDB_SIGNAL_WIND;
 #endif
 #if defined (SIGPHONE)
   if (hostsig == SIGPHONE)
-    return TARGET_SIGNAL_PHONE;
+    return GDB_SIGNAL_PHONE;
 #endif
 #if defined (SIGLOST)
   if (hostsig == SIGLOST)
-    return TARGET_SIGNAL_LOST;
+    return GDB_SIGNAL_LOST;
 #endif
 #if defined (SIGWAITING)
   if (hostsig == SIGWAITING)
-    return TARGET_SIGNAL_WAITING;
+    return GDB_SIGNAL_WAITING;
 #endif
 #if defined (SIGCANCEL)
   if (hostsig == SIGCANCEL)
-    return TARGET_SIGNAL_CANCEL;
+    return GDB_SIGNAL_CANCEL;
 #endif
 #if defined (SIGLWP)
   if (hostsig == SIGLWP)
-    return TARGET_SIGNAL_LWP;
+    return GDB_SIGNAL_LWP;
 #endif
 #if defined (SIGDANGER)
   if (hostsig == SIGDANGER)
-    return TARGET_SIGNAL_DANGER;
+    return GDB_SIGNAL_DANGER;
 #endif
 #if defined (SIGGRANT)
   if (hostsig == SIGGRANT)
-    return TARGET_SIGNAL_GRANT;
+    return GDB_SIGNAL_GRANT;
 #endif
 #if defined (SIGRETRACT)
   if (hostsig == SIGRETRACT)
-    return TARGET_SIGNAL_RETRACT;
+    return GDB_SIGNAL_RETRACT;
 #endif
 #if defined (SIGMSG)
   if (hostsig == SIGMSG)
-    return TARGET_SIGNAL_MSG;
+    return GDB_SIGNAL_MSG;
 #endif
 #if defined (SIGSOUND)
   if (hostsig == SIGSOUND)
-    return TARGET_SIGNAL_SOUND;
+    return GDB_SIGNAL_SOUND;
 #endif
 #if defined (SIGSAK)
   if (hostsig == SIGSAK)
-    return TARGET_SIGNAL_SAK;
+    return GDB_SIGNAL_SAK;
 #endif
 #if defined (SIGPRIO)
   if (hostsig == SIGPRIO)
-    return TARGET_SIGNAL_PRIO;
+    return GDB_SIGNAL_PRIO;
 #endif
 
   /* Mach exceptions.  Assumes that the values for EXC_ are positive! */
@@ -331,37 +331,37 @@ target_signal_from_host (int hostsig)
 
 #if defined (SIGINFO)
   if (hostsig == SIGINFO)
-    return TARGET_SIGNAL_INFO;
+    return GDB_SIGNAL_INFO;
 #endif
 
 #if defined (REALTIME_LO)
   if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI)
     {
-      /* This block of TARGET_SIGNAL_REALTIME value is in order.  */
+      /* This block of GDB_SIGNAL_REALTIME value is in order.  */
       if (33 <= hostsig && hostsig <= 63)
-	return (enum target_signal)
-	  (hostsig - 33 + (int) TARGET_SIGNAL_REALTIME_33);
+	return (enum gdb_signal)
+	  (hostsig - 33 + (int) GDB_SIGNAL_REALTIME_33);
       else if (hostsig == 32)
-	return TARGET_SIGNAL_REALTIME_32;
+	return GDB_SIGNAL_REALTIME_32;
       else if (64 <= hostsig && hostsig <= 127)
-	return (enum target_signal)
-	  (hostsig - 64 + (int) TARGET_SIGNAL_REALTIME_64);
+	return (enum gdb_signal)
+	  (hostsig - 64 + (int) GDB_SIGNAL_REALTIME_64);
       else
-	error (_("GDB bug: target.c (target_signal_from_host): "
+	error (_("GDB bug: target.c (gdb_signal_from_host): "
 	       "unrecognized real-time signal"));
     }
 #endif
 
-  return TARGET_SIGNAL_UNKNOWN;
+  return GDB_SIGNAL_UNKNOWN;
 }
 
-/* Convert a OURSIG (an enum target_signal) to the form used by the
+/* Convert a OURSIG (an enum gdb_signal) to the form used by the
    target operating system (refered to as the ``host'') or zero if the
    equivalent host signal is not available.  Set/clear OURSIG_OK
    accordingly. */
 
 static int
-do_target_signal_to_host (enum target_signal oursig,
+do_gdb_signal_to_host (enum gdb_signal oursig,
 			  int *oursig_ok)
 {
   int retsig;
@@ -372,79 +372,79 @@ do_target_signal_to_host (enum target_signal oursig,
   *oursig_ok = 1;
   switch (oursig)
     {
-    case TARGET_SIGNAL_0:
+    case GDB_SIGNAL_0:
       return 0;
 
 #if defined (SIGHUP)
-    case TARGET_SIGNAL_HUP:
+    case GDB_SIGNAL_HUP:
       return SIGHUP;
 #endif
 #if defined (SIGINT)
-    case TARGET_SIGNAL_INT:
+    case GDB_SIGNAL_INT:
       return SIGINT;
 #endif
 #if defined (SIGQUIT)
-    case TARGET_SIGNAL_QUIT:
+    case GDB_SIGNAL_QUIT:
       return SIGQUIT;
 #endif
 #if defined (SIGILL)
-    case TARGET_SIGNAL_ILL:
+    case GDB_SIGNAL_ILL:
       return SIGILL;
 #endif
 #if defined (SIGTRAP)
-    case TARGET_SIGNAL_TRAP:
+    case GDB_SIGNAL_TRAP:
       return SIGTRAP;
 #endif
 #if defined (SIGABRT)
-    case TARGET_SIGNAL_ABRT:
+    case GDB_SIGNAL_ABRT:
       return SIGABRT;
 #endif
 #if defined (SIGEMT)
-    case TARGET_SIGNAL_EMT:
+    case GDB_SIGNAL_EMT:
       return SIGEMT;
 #endif
 #if defined (SIGFPE)
-    case TARGET_SIGNAL_FPE:
+    case GDB_SIGNAL_FPE:
       return SIGFPE;
 #endif
 #if defined (SIGKILL)
-    case TARGET_SIGNAL_KILL:
+    case GDB_SIGNAL_KILL:
       return SIGKILL;
 #endif
 #if defined (SIGBUS)
-    case TARGET_SIGNAL_BUS:
+    case GDB_SIGNAL_BUS:
       return SIGBUS;
 #endif
 #if defined (SIGSEGV)
-    case TARGET_SIGNAL_SEGV:
+    case GDB_SIGNAL_SEGV:
       return SIGSEGV;
 #endif
 #if defined (SIGSYS)
-    case TARGET_SIGNAL_SYS:
+    case GDB_SIGNAL_SYS:
       return SIGSYS;
 #endif
 #if defined (SIGPIPE)
-    case TARGET_SIGNAL_PIPE:
+    case GDB_SIGNAL_PIPE:
       return SIGPIPE;
 #endif
 #if defined (SIGALRM)
-    case TARGET_SIGNAL_ALRM:
+    case GDB_SIGNAL_ALRM:
       return SIGALRM;
 #endif
 #if defined (SIGTERM)
-    case TARGET_SIGNAL_TERM:
+    case GDB_SIGNAL_TERM:
       return SIGTERM;
 #endif
 #if defined (SIGUSR1)
-    case TARGET_SIGNAL_USR1:
+    case GDB_SIGNAL_USR1:
       return SIGUSR1;
 #endif
 #if defined (SIGUSR2)
-    case TARGET_SIGNAL_USR2:
+    case GDB_SIGNAL_USR2:
       return SIGUSR2;
 #endif
 #if defined (SIGCHLD) || defined (SIGCLD)
-    case TARGET_SIGNAL_CHLD:
+    case GDB_SIGNAL_CHLD:
 #if defined (SIGCHLD)
       return SIGCHLD;
 #else
@@ -452,111 +452,111 @@ do_target_signal_to_host (enum target_signal oursig,
 #endif
 #endif /* SIGCLD or SIGCHLD */
 #if defined (SIGPWR)
-    case TARGET_SIGNAL_PWR:
+    case GDB_SIGNAL_PWR:
       return SIGPWR;
 #endif
 #if defined (SIGWINCH)
-    case TARGET_SIGNAL_WINCH:
+    case GDB_SIGNAL_WINCH:
       return SIGWINCH;
 #endif
 #if defined (SIGURG)
-    case TARGET_SIGNAL_URG:
+    case GDB_SIGNAL_URG:
       return SIGURG;
 #endif
 #if defined (SIGIO)
-    case TARGET_SIGNAL_IO:
+    case GDB_SIGNAL_IO:
       return SIGIO;
 #endif
 #if defined (SIGPOLL)
-    case TARGET_SIGNAL_POLL:
+    case GDB_SIGNAL_POLL:
       return SIGPOLL;
 #endif
 #if defined (SIGSTOP)
-    case TARGET_SIGNAL_STOP:
+    case GDB_SIGNAL_STOP:
       return SIGSTOP;
 #endif
 #if defined (SIGTSTP)
-    case TARGET_SIGNAL_TSTP:
+    case GDB_SIGNAL_TSTP:
       return SIGTSTP;
 #endif
 #if defined (SIGCONT)
-    case TARGET_SIGNAL_CONT:
+    case GDB_SIGNAL_CONT:
       return SIGCONT;
 #endif
 #if defined (SIGTTIN)
-    case TARGET_SIGNAL_TTIN:
+    case GDB_SIGNAL_TTIN:
       return SIGTTIN;
 #endif
 #if defined (SIGTTOU)
-    case TARGET_SIGNAL_TTOU:
+    case GDB_SIGNAL_TTOU:
       return SIGTTOU;
 #endif
 #if defined (SIGVTALRM)
-    case TARGET_SIGNAL_VTALRM:
+    case GDB_SIGNAL_VTALRM:
       return SIGVTALRM;
 #endif
 #if defined (SIGPROF)
-    case TARGET_SIGNAL_PROF:
+    case GDB_SIGNAL_PROF:
       return SIGPROF;
 #endif
 #if defined (SIGXCPU)
-    case TARGET_SIGNAL_XCPU:
+    case GDB_SIGNAL_XCPU:
       return SIGXCPU;
 #endif
 #if defined (SIGXFSZ)
-    case TARGET_SIGNAL_XFSZ:
+    case GDB_SIGNAL_XFSZ:
       return SIGXFSZ;
 #endif
 #if defined (SIGWIND)
-    case TARGET_SIGNAL_WIND:
+    case GDB_SIGNAL_WIND:
       return SIGWIND;
 #endif
 #if defined (SIGPHONE)
-    case TARGET_SIGNAL_PHONE:
+    case GDB_SIGNAL_PHONE:
       return SIGPHONE;
 #endif
 #if defined (SIGLOST)
-    case TARGET_SIGNAL_LOST:
+    case GDB_SIGNAL_LOST:
       return SIGLOST;
 #endif
 #if defined (SIGWAITING)
-    case TARGET_SIGNAL_WAITING:
+    case GDB_SIGNAL_WAITING:
       return SIGWAITING;
 #endif
 #if defined (SIGCANCEL)
-    case TARGET_SIGNAL_CANCEL:
+    case GDB_SIGNAL_CANCEL:
       return SIGCANCEL;
 #endif
 #if defined (SIGLWP)
-    case TARGET_SIGNAL_LWP:
+    case GDB_SIGNAL_LWP:
       return SIGLWP;
 #endif
 #if defined (SIGDANGER)
-    case TARGET_SIGNAL_DANGER:
+    case GDB_SIGNAL_DANGER:
       return SIGDANGER;
 #endif
 #if defined (SIGGRANT)
-    case TARGET_SIGNAL_GRANT:
+    case GDB_SIGNAL_GRANT:
       return SIGGRANT;
 #endif
 #if defined (SIGRETRACT)
-    case TARGET_SIGNAL_RETRACT:
+    case GDB_SIGNAL_RETRACT:
       return SIGRETRACT;
 #endif
 #if defined (SIGMSG)
-    case TARGET_SIGNAL_MSG:
+    case GDB_SIGNAL_MSG:
       return SIGMSG;
 #endif
 #if defined (SIGSOUND)
-    case TARGET_SIGNAL_SOUND:
+    case GDB_SIGNAL_SOUND:
       return SIGSOUND;
 #endif
 #if defined (SIGSAK)
-    case TARGET_SIGNAL_SAK:
+    case GDB_SIGNAL_SAK:
       return SIGSAK;
 #endif
 #if defined (SIGPRIO)
-    case TARGET_SIGNAL_PRIO:
+    case GDB_SIGNAL_PRIO:
       return SIGPRIO;
 #endif
 
@@ -587,7 +587,7 @@ do_target_signal_to_host (enum target_signal oursig,
 #endif
 
 #if defined (SIGINFO)
-    case TARGET_SIGNAL_INFO:
+    case GDB_SIGNAL_INFO:
       return SIGINFO;
 #endif
 
@@ -595,25 +595,25 @@ do_target_signal_to_host (enum target_signal oursig,
 #if defined (REALTIME_LO)
       retsig = 0;
 
-      if (oursig >= TARGET_SIGNAL_REALTIME_33
-	  && oursig <= TARGET_SIGNAL_REALTIME_63)
+      if (oursig >= GDB_SIGNAL_REALTIME_33
+	  && oursig <= GDB_SIGNAL_REALTIME_63)
 	{
 	  /* This block of signals is continuous, and
-             TARGET_SIGNAL_REALTIME_33 is 33 by definition.  */
-	  retsig = (int) oursig - (int) TARGET_SIGNAL_REALTIME_33 + 33;
+             GDB_SIGNAL_REALTIME_33 is 33 by definition.  */
+	  retsig = (int) oursig - (int) GDB_SIGNAL_REALTIME_33 + 33;
 	}
-      else if (oursig == TARGET_SIGNAL_REALTIME_32)
+      else if (oursig == GDB_SIGNAL_REALTIME_32)
 	{
-	  /* TARGET_SIGNAL_REALTIME_32 isn't contiguous with
-             TARGET_SIGNAL_REALTIME_33.  It is 32 by definition.  */
+	  /* GDB_SIGNAL_REALTIME_32 isn't contiguous with
+             GDB_SIGNAL_REALTIME_33.  It is 32 by definition.  */
 	  retsig = 32;
 	}
-      else if (oursig >= TARGET_SIGNAL_REALTIME_64
-	  && oursig <= TARGET_SIGNAL_REALTIME_127)
+      else if (oursig >= GDB_SIGNAL_REALTIME_64
+	  && oursig <= GDB_SIGNAL_REALTIME_127)
 	{
 	  /* This block of signals is continuous, and
-             TARGET_SIGNAL_REALTIME_64 is 64 by definition.  */
-	  retsig = (int) oursig - (int) TARGET_SIGNAL_REALTIME_64 + 64;
+             GDB_SIGNAL_REALTIME_64 is 64 by definition.  */
+	  retsig = (int) oursig - (int) GDB_SIGNAL_REALTIME_64 + 64;
 	}
 
       if (retsig >= REALTIME_LO && retsig < REALTIME_HI)
@@ -626,68 +626,26 @@ do_target_signal_to_host (enum target_signal oursig,
 }
 
 int
-target_signal_to_host_p (enum target_signal oursig)
+gdb_signal_to_host_p (enum gdb_signal oursig)
 {
   int oursig_ok;
-  do_target_signal_to_host (oursig, &oursig_ok);
+  do_gdb_signal_to_host (oursig, &oursig_ok);
   return oursig_ok;
 }
 
 int
-target_signal_to_host (enum target_signal oursig)
+gdb_signal_to_host (enum gdb_signal oursig)
 {
   int oursig_ok;
-  int targ_signo = do_target_signal_to_host (oursig, &oursig_ok);
+  int targ_signo = do_gdb_signal_to_host (oursig, &oursig_ok);
   if (!oursig_ok)
     {
       /* The user might be trying to do "signal SIGSAK" where this system
          doesn't have SIGSAK.  */
       warning (_("Signal %s does not exist on this system."),
-	       target_signal_to_name (oursig));
+	       gdb_signal_to_name (oursig));
       return 0;
     }
   else
     return targ_signo;
 }
-
-#ifndef GDBSERVER
-
-/* In some circumstances we allow a command to specify a numeric
-   signal.  The idea is to keep these circumstances limited so that
-   users (and scripts) develop portable habits.  For comparison,
-   POSIX.2 `kill' requires that 1,2,3,6,9,14, and 15 work (and using a
-   numeric signal at all is obsolescent.  We are slightly more
-   lenient and allow 1-15 which should match host signal numbers on
-   most systems.  Use of symbolic signal names is strongly encouraged.  */
-
-enum target_signal
-target_signal_from_command (int num)
-{
-  if (num >= 1 && num <= 15)
-    return (enum target_signal) num;
-  error (_("Only signals 1-15 are valid as numeric signals.\n\
-Use \"info signals\" for a list of symbolic signals."));
-}
-
-extern initialize_file_ftype _initialize_signals; /* -Wmissing-prototype */
-
-void
-_initialize_signals (void)
-{
-  if (strcmp (signals[TARGET_SIGNAL_LAST].string, "TARGET_SIGNAL_MAGIC") != 0)
-    internal_error (__FILE__, __LINE__, "failed internal consistency check");
-}
-
-int
-default_target_signal_to_host (struct gdbarch *gdbarch, enum target_signal ts)
-{
-  return target_signal_to_host (ts);
-}
-
-enum target_signal
-default_target_signal_from_host (struct gdbarch *gdbarch, int signo)
-{
-  return target_signal_from_host (signo);
-}
-
-#endif /* ! GDBSERVER */
diff --git a/gdb/common/vec.c b/gdb/common/vec.c
new file mode 100644
index 0000000..360dc96
--- /dev/null
+++ b/gdb/common/vec.c
@@ -0,0 +1,123 @@
+/* Vector API for GDB.
+   Copyright (C) 2004-2012 Free Software Foundation, Inc.
+   Contributed by Nathan Sidwell <nathan at codesourcery.com>
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifdef GDBSERVER
+#include "server.h"
+#else
+#include "defs.h"
+#endif
+
+#include "vec.h"
+
+struct vec_prefix
+{
+  unsigned num;
+  unsigned alloc;
+  void *vec[1];
+};
+
+/* Calculate the new ALLOC value, making sure that abs(RESERVE) slots
+   are free.  If RESERVE < 0 grow exactly, otherwise grow
+   exponentially.  */
+
+static inline unsigned
+calculate_allocation (const struct vec_prefix *pfx, int reserve)
+{
+  unsigned alloc = 0;
+  unsigned num = 0;
+
+  if (pfx)
+    {
+      alloc = pfx->alloc;
+      num = pfx->num;
+    }
+  else if (!reserve)
+    /* If there's no prefix, and we've not requested anything, then we
+       will create a NULL vector.  */
+    return 0;
+
+  /* We must have run out of room.  */
+  gdb_assert (alloc - num < (unsigned)(reserve < 0 ? -reserve : reserve));
+
+  if (reserve < 0)
+    /* Exact size.  */
+    alloc = num + -reserve;
+  else
+    {
+      /* Exponential growth.  */
+      if (!alloc)
+	alloc = 4;
+      else if (alloc < 16)
+	/* Double when small.  */
+	alloc = alloc * 2;
+      else
+	/* Grow slower when large.  */
+	alloc = (alloc * 3 / 2);
+
+      /* If this is still too small, set it to the right size.  */
+      if (alloc < num + reserve)
+	alloc = num + reserve;
+    }
+  return alloc;
+}
+
+/* Ensure there are at least abs(RESERVE) free slots in VEC.  If
+   RESERVE < 0 grow exactly, else grow exponentially.  As a special
+   case, if VEC is NULL, and RESERVE is 0, no vector will be created.  */
+
+void *
+vec_p_reserve (void *vec, int reserve)
+{
+  return vec_o_reserve (vec, reserve,
+			offsetof (struct vec_prefix, vec), sizeof (void *));
+}
+
+/* As vec_p_reserve, but for object vectors.  The vector's trailing
+   array is at VEC_OFFSET offset and consists of ELT_SIZE sized
+   elements.  */
+
+void *
+vec_o_reserve (void *vec, int reserve, size_t vec_offset, size_t elt_size)
+{
+  struct vec_prefix *pfx = vec;
+  unsigned alloc = calculate_allocation (pfx, reserve);
+
+  if (!alloc)
+    return NULL;
+
+  vec = xrealloc (vec, vec_offset + alloc * elt_size);
+  ((struct vec_prefix *)vec)->alloc = alloc;
+  if (!pfx)
+    ((struct vec_prefix *)vec)->num = 0;
+
+  return vec;
+}
+
+#if 0
+/* Example uses.  */
+DEF_VEC_I (int);
+typedef struct X
+{
+  int i;
+} obj_t;
+typedef obj_t *ptr_t;
+
+DEF_VEC_P (ptr_t);
+DEF_VEC_O (obj_t);
+#endif
diff --git a/gdb/common/vec.h b/gdb/common/vec.h
new file mode 100644
index 0000000..fa15370
--- /dev/null
+++ b/gdb/common/vec.h
@@ -0,0 +1,1036 @@
+/* Vector API for GDB.
+   Copyright (C) 2004-2012 Free Software Foundation, Inc.
+   Contributed by Nathan Sidwell <nathan at codesourcery.com>
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#if !defined (GDB_VEC_H)
+#define GDB_VEC_H
+
+#include <stddef.h>
+
+#ifndef GDBSERVER
+#include "gdb_string.h"
+#include "gdb_assert.h"
+#endif
+
+/* The macros here implement a set of templated vector types and
+   associated interfaces.  These templates are implemented with
+   macros, as we're not in C++ land.  The interface functions are
+   typesafe and use static inline functions, sometimes backed by
+   out-of-line generic functions.
+
+   Because of the different behavior of structure objects, scalar
+   objects and of pointers, there are three flavors, one for each of
+   these variants.  Both the structure object and pointer variants
+   pass pointers to objects around -- in the former case the pointers
+   are stored into the vector and in the latter case the pointers are
+   dereferenced and the objects copied into the vector.  The scalar
+   object variant is suitable for int-like objects, and the vector
+   elements are returned by value.
+
+   There are both 'index' and 'iterate' accessors.  The iterator
+   returns a boolean iteration condition and updates the iteration
+   variable passed by reference.  Because the iterator will be
+   inlined, the address-of can be optimized away.
+
+   The vectors are implemented using the trailing array idiom, thus
+   they are not resizeable without changing the address of the vector
+   object itself.  This means you cannot have variables or fields of
+   vector type -- always use a pointer to a vector.  The one exception
+   is the final field of a structure, which could be a vector type.
+   You will have to use the embedded_size & embedded_init calls to
+   create such objects, and they will probably not be resizeable (so
+   don't use the 'safe' allocation variants).  The trailing array
+   idiom is used (rather than a pointer to an array of data), because,
+   if we allow NULL to also represent an empty vector, empty vectors
+   occupy minimal space in the structure containing them.
+
+   Each operation that increases the number of active elements is
+   available in 'quick' and 'safe' variants.  The former presumes that
+   there is sufficient allocated space for the operation to succeed
+   (it dies if there is not).  The latter will reallocate the
+   vector, if needed.  Reallocation causes an exponential increase in
+   vector size.  If you know you will be adding N elements, it would
+   be more efficient to use the reserve operation before adding the
+   elements with the 'quick' operation.  This will ensure there are at
+   least as many elements as you ask for, it will exponentially
+   increase if there are too few spare slots.  If you want reserve a
+   specific number of slots, but do not want the exponential increase
+   (for instance, you know this is the last allocation), use a
+   negative number for reservation.  You can also create a vector of a
+   specific size from the get go.
+
+   You should prefer the push and pop operations, as they append and
+   remove from the end of the vector.  If you need to remove several
+   items in one go, use the truncate operation.  The insert and remove
+   operations allow you to change elements in the middle of the
+   vector.  There are two remove operations, one which preserves the
+   element ordering 'ordered_remove', and one which does not
+   'unordered_remove'.  The latter function copies the end element
+   into the removed slot, rather than invoke a memmove operation.  The
+   'lower_bound' function will determine where to place an item in the
+   array using insert that will maintain sorted order.
+
+   If you need to directly manipulate a vector, then the 'address'
+   accessor will return the address of the start of the vector.  Also
+   the 'space' predicate will tell you whether there is spare capacity
+   in the vector.  You will not normally need to use these two functions.
+
+   Vector types are defined using a DEF_VEC_{O,P,I}(TYPEDEF) macro.
+   Variables of vector type are declared using a VEC(TYPEDEF) macro.
+   The characters O, P and I indicate whether TYPEDEF is a pointer
+   (P), object (O) or integral (I) type.  Be careful to pick the
+   correct one, as you'll get an awkward and inefficient API if you
+   use the wrong one.  There is a check, which results in a
+   compile-time warning, for the P and I versions, but there is no
+   check for the O versions, as that is not possible in plain C.
+
+   An example of their use would be,
+
+   DEF_VEC_P(tree);   // non-managed tree vector.
+
+   struct my_struct {
+     VEC(tree) *v;      // A (pointer to) a vector of tree pointers.
+   };
+
+   struct my_struct *s;
+
+   if (VEC_length(tree, s->v)) { we have some contents }
+   VEC_safe_push(tree, s->v, decl); // append some decl onto the end
+   for (ix = 0; VEC_iterate(tree, s->v, ix, elt); ix++)
+     { do something with elt }
+
+*/
+
+/* Macros to invoke API calls.  A single macro works for both pointer
+   and object vectors, but the argument and return types might well be
+   different.  In each macro, T is the typedef of the vector elements.
+   Some of these macros pass the vector, V, by reference (by taking
+   its address), this is noted in the descriptions.  */
+
+/* Length of vector
+   unsigned VEC_T_length(const VEC(T) *v);
+
+   Return the number of active elements in V.  V can be NULL, in which
+   case zero is returned.  */
+
+#define VEC_length(T,V)	(VEC_OP(T,length)(V))
+
+
+/* Check if vector is empty
+   int VEC_T_empty(const VEC(T) *v);
+
+   Return nonzero if V is an empty vector (or V is NULL), zero otherwise.  */
+
+#define VEC_empty(T,V)	(VEC_length (T,V) == 0)
+
+
+/* Get the final element of the vector.
+   T VEC_T_last(VEC(T) *v); // Integer
+   T VEC_T_last(VEC(T) *v); // Pointer
+   T *VEC_T_last(VEC(T) *v); // Object
+
+   Return the final element.  V must not be empty.  */
+
+#define VEC_last(T,V)	(VEC_OP(T,last)(V VEC_ASSERT_INFO))
+
+/* Index into vector
+   T VEC_T_index(VEC(T) *v, unsigned ix); // Integer
+   T VEC_T_index(VEC(T) *v, unsigned ix); // Pointer
+   T *VEC_T_index(VEC(T) *v, unsigned ix); // Object
+
+   Return the IX'th element.  If IX must be in the domain of V.  */
+
+#define VEC_index(T,V,I) (VEC_OP(T,index)(V,I VEC_ASSERT_INFO))
+
+/* Iterate over vector
+   int VEC_T_iterate(VEC(T) *v, unsigned ix, T &ptr); // Integer
+   int VEC_T_iterate(VEC(T) *v, unsigned ix, T &ptr); // Pointer
+   int VEC_T_iterate(VEC(T) *v, unsigned ix, T *&ptr); // Object
+
+   Return iteration condition and update PTR to point to the IX'th
+   element.  At the end of iteration, sets PTR to NULL.  Use this to
+   iterate over the elements of a vector as follows,
+
+     for (ix = 0; VEC_iterate(T,v,ix,ptr); ix++)
+       continue;  */
+
+#define VEC_iterate(T,V,I,P)	(VEC_OP(T,iterate)(V,I,&(P)))
+
+/* Allocate new vector.
+   VEC(T,A) *VEC_T_alloc(int reserve);
+
+   Allocate a new vector with space for RESERVE objects.  If RESERVE
+   is zero, NO vector is created.  */
+
+#define VEC_alloc(T,N)	(VEC_OP(T,alloc)(N))
+
+/* Free a vector.
+   void VEC_T_free(VEC(T,A) *&);
+
+   Free a vector and set it to NULL.  */
+
+#define VEC_free(T,V)	(VEC_OP(T,free)(&V))
+
+/* A cleanup function for a vector.
+   void VEC_T_cleanup(void *);
+   
+   Clean up a vector.  */
+
+#define VEC_cleanup(T)	(VEC_OP(T,cleanup))
+
+/* Use these to determine the required size and initialization of a
+   vector embedded within another structure (as the final member).
+
+   size_t VEC_T_embedded_size(int reserve);
+   void VEC_T_embedded_init(VEC(T) *v, int reserve);
+
+   These allow the caller to perform the memory allocation.  */
+
+#define VEC_embedded_size(T,N)	 (VEC_OP(T,embedded_size)(N))
+#define VEC_embedded_init(T,O,N) (VEC_OP(T,embedded_init)(VEC_BASE(O),N))
+
+/* Copy a vector.
+   VEC(T,A) *VEC_T_copy(VEC(T) *);
+
+   Copy the live elements of a vector into a new vector.  The new and
+   old vectors need not be allocated by the same mechanism.  */
+
+#define VEC_copy(T,V) (VEC_OP(T,copy)(V))
+
+/* Determine if a vector has additional capacity.
+
+   int VEC_T_space (VEC(T) *v,int reserve)
+
+   If V has space for RESERVE additional entries, return nonzero.  You
+   usually only need to use this if you are doing your own vector
+   reallocation, for instance on an embedded vector.  This returns
+   nonzero in exactly the same circumstances that VEC_T_reserve
+   will.  */
+
+#define VEC_space(T,V,R) (VEC_OP(T,space)(V,R VEC_ASSERT_INFO))
+
+/* Reserve space.
+   int VEC_T_reserve(VEC(T,A) *&v, int reserve);
+
+   Ensure that V has at least abs(RESERVE) slots available.  The
+   signedness of RESERVE determines the reallocation behavior.  A
+   negative value will not create additional headroom beyond that
+   requested.  A positive value will create additional headroom.  Note
+   this can cause V to be reallocated.  Returns nonzero iff
+   reallocation actually occurred.  */
+
+#define VEC_reserve(T,V,R) (VEC_OP(T,reserve)(&(V),R VEC_ASSERT_INFO))
+
+/* Push object with no reallocation
+   T *VEC_T_quick_push (VEC(T) *v, T obj); // Integer
+   T *VEC_T_quick_push (VEC(T) *v, T obj); // Pointer
+   T *VEC_T_quick_push (VEC(T) *v, T *obj); // Object
+
+   Push a new element onto the end, returns a pointer to the slot
+   filled in.  For object vectors, the new value can be NULL, in which
+   case NO initialization is performed.  There must
+   be sufficient space in the vector.  */
+
+#define VEC_quick_push(T,V,O) (VEC_OP(T,quick_push)(V,O VEC_ASSERT_INFO))
+
+/* Push object with reallocation
+   T *VEC_T_safe_push (VEC(T,A) *&v, T obj); // Integer
+   T *VEC_T_safe_push (VEC(T,A) *&v, T obj); // Pointer
+   T *VEC_T_safe_push (VEC(T,A) *&v, T *obj); // Object
+
+   Push a new element onto the end, returns a pointer to the slot
+   filled in.  For object vectors, the new value can be NULL, in which
+   case NO initialization is performed.  Reallocates V, if needed.  */
+
+#define VEC_safe_push(T,V,O) (VEC_OP(T,safe_push)(&(V),O VEC_ASSERT_INFO))
+
+/* Pop element off end
+   T VEC_T_pop (VEC(T) *v);		// Integer
+   T VEC_T_pop (VEC(T) *v);		// Pointer
+   void VEC_T_pop (VEC(T) *v);		// Object
+
+   Pop the last element off the end.  Returns the element popped, for
+   pointer vectors.  */
+
+#define VEC_pop(T,V)	(VEC_OP(T,pop)(V VEC_ASSERT_INFO))
+
+/* Truncate to specific length
+   void VEC_T_truncate (VEC(T) *v, unsigned len);
+
+   Set the length as specified.  The new length must be less than or
+   equal to the current length.  This is an O(1) operation.  */
+
+#define VEC_truncate(T,V,I)		\
+	(VEC_OP(T,truncate)(V,I VEC_ASSERT_INFO))
+
+/* Grow to a specific length.
+   void VEC_T_safe_grow (VEC(T,A) *&v, int len);
+
+   Grow the vector to a specific length.  The LEN must be as
+   long or longer than the current length.  The new elements are
+   uninitialized.  */
+
+#define VEC_safe_grow(T,V,I)		\
+	(VEC_OP(T,safe_grow)(&(V),I VEC_ASSERT_INFO))
+
+/* Replace element
+   T VEC_T_replace (VEC(T) *v, unsigned ix, T val); // Integer
+   T VEC_T_replace (VEC(T) *v, unsigned ix, T val); // Pointer
+   T *VEC_T_replace (VEC(T) *v, unsigned ix, T *val);  // Object
+
+   Replace the IXth element of V with a new value, VAL.  For pointer
+   vectors returns the original value.  For object vectors returns a
+   pointer to the new value.  For object vectors the new value can be
+   NULL, in which case no overwriting of the slot is actually
+   performed.  */
+
+#define VEC_replace(T,V,I,O) (VEC_OP(T,replace)(V,I,O VEC_ASSERT_INFO))
+
+/* Insert object with no reallocation
+   T *VEC_T_quick_insert (VEC(T) *v, unsigned ix, T val); // Integer
+   T *VEC_T_quick_insert (VEC(T) *v, unsigned ix, T val); // Pointer
+   T *VEC_T_quick_insert (VEC(T) *v, unsigned ix, T *val); // Object
+
+   Insert an element, VAL, at the IXth position of V.  Return a pointer
+   to the slot created.  For vectors of object, the new value can be
+   NULL, in which case no initialization of the inserted slot takes
+   place.  There must be sufficient space.  */
+
+#define VEC_quick_insert(T,V,I,O) \
+	(VEC_OP(T,quick_insert)(V,I,O VEC_ASSERT_INFO))
+
+/* Insert object with reallocation
+   T *VEC_T_safe_insert (VEC(T,A) *&v, unsigned ix, T val); // Integer
+   T *VEC_T_safe_insert (VEC(T,A) *&v, unsigned ix, T val); // Pointer
+   T *VEC_T_safe_insert (VEC(T,A) *&v, unsigned ix, T *val); // Object
+
+   Insert an element, VAL, at the IXth position of V.  Return a pointer
+   to the slot created.  For vectors of object, the new value can be
+   NULL, in which case no initialization of the inserted slot takes
+   place.  Reallocate V, if necessary.  */
+
+#define VEC_safe_insert(T,V,I,O)	\
+	(VEC_OP(T,safe_insert)(&(V),I,O VEC_ASSERT_INFO))
+
+/* Remove element retaining order
+   T VEC_T_ordered_remove (VEC(T) *v, unsigned ix); // Integer
+   T VEC_T_ordered_remove (VEC(T) *v, unsigned ix); // Pointer
+   void VEC_T_ordered_remove (VEC(T) *v, unsigned ix); // Object
+
+   Remove an element from the IXth position of V.  Ordering of
+   remaining elements is preserved.  For pointer vectors returns the
+   removed object.  This is an O(N) operation due to a memmove.  */
+
+#define VEC_ordered_remove(T,V,I)	\
+	(VEC_OP(T,ordered_remove)(V,I VEC_ASSERT_INFO))
+
+/* Remove element destroying order
+   T VEC_T_unordered_remove (VEC(T) *v, unsigned ix); // Integer
+   T VEC_T_unordered_remove (VEC(T) *v, unsigned ix); // Pointer
+   void VEC_T_unordered_remove (VEC(T) *v, unsigned ix); // Object
+
+   Remove an element from the IXth position of V.  Ordering of
+   remaining elements is destroyed.  For pointer vectors returns the
+   removed object.  This is an O(1) operation.  */
+
+#define VEC_unordered_remove(T,V,I)	\
+	(VEC_OP(T,unordered_remove)(V,I VEC_ASSERT_INFO))
+
+/* Remove a block of elements
+   void VEC_T_block_remove (VEC(T) *v, unsigned ix, unsigned len);
+
+   Remove LEN elements starting at the IXth.  Ordering is retained.
+   This is an O(N) operation due to memmove.  */
+
+#define VEC_block_remove(T,V,I,L)	\
+	(VEC_OP(T,block_remove)(V,I,L VEC_ASSERT_INFO))
+
+/* Get the address of the array of elements
+   T *VEC_T_address (VEC(T) v)
+
+   If you need to directly manipulate the array (for instance, you
+   want to feed it to qsort), use this accessor.  */
+
+#define VEC_address(T,V)		(VEC_OP(T,address)(V))
+
+/* Find the first index in the vector not less than the object.
+   unsigned VEC_T_lower_bound (VEC(T) *v, const T val,
+                               int (*lessthan) (const T, const T)); // Integer
+   unsigned VEC_T_lower_bound (VEC(T) *v, const T val,
+                               int (*lessthan) (const T, const T)); // Pointer
+   unsigned VEC_T_lower_bound (VEC(T) *v, const T *val,
+                               int (*lessthan) (const T*, const T*)); // Object
+
+   Find the first position in which VAL could be inserted without
+   changing the ordering of V.  LESSTHAN is a function that returns
+   true if the first argument is strictly less than the second.  */
+
+#define VEC_lower_bound(T,V,O,LT)    \
+       (VEC_OP(T,lower_bound)(V,O,LT VEC_ASSERT_INFO))
+
+/* Reallocate an array of elements with prefix.  */
+extern void *vec_p_reserve (void *, int);
+extern void *vec_o_reserve (void *, int, size_t, size_t);
+#define vec_free_(V) xfree (V)
+
+#define VEC_ASSERT_INFO ,__FILE__,__LINE__
+#define VEC_ASSERT_DECL ,const char *file_,unsigned line_
+#define VEC_ASSERT_PASS ,file_,line_
+#define vec_assert(expr, op) \
+  ((void)((expr) ? 0 : (gdb_assert_fail (op, file_, line_, \
+					 ASSERT_FUNCTION), 0)))
+
+#define VEC(T) VEC_##T
+#define VEC_OP(T,OP) VEC_##T##_##OP
+
+#define VEC_T(T)							  \
+typedef struct VEC(T)							  \
+{									  \
+  unsigned num;								  \
+  unsigned alloc;							  \
+  T vec[1];								  \
+} VEC(T)
+
+/* Vector of integer-like object.  */
+#define DEF_VEC_I(T)							  \
+static inline void VEC_OP (T,must_be_integral_type) (void)		  \
+{									  \
+  (void)~(T)0;								  \
+}									  \
+									  \
+VEC_T(T);								  \
+DEF_VEC_FUNC_P(T)							  \
+DEF_VEC_ALLOC_FUNC_I(T)							  \
+struct vec_swallow_trailing_semi
+
+/* Vector of pointer to object.  */
+#define DEF_VEC_P(T)							  \
+static inline void VEC_OP (T,must_be_pointer_type) (void)		  \
+{									  \
+  (void)((T)1 == (void *)1);						  \
+}									  \
+									  \
+VEC_T(T);								  \
+DEF_VEC_FUNC_P(T)							  \
+DEF_VEC_ALLOC_FUNC_P(T)							  \
+struct vec_swallow_trailing_semi
+
+/* Vector of object.  */
+#define DEF_VEC_O(T)							  \
+VEC_T(T);								  \
+DEF_VEC_FUNC_O(T)							  \
+DEF_VEC_ALLOC_FUNC_O(T)							  \
+struct vec_swallow_trailing_semi
+
+#define DEF_VEC_ALLOC_FUNC_I(T)						  \
+static inline VEC(T) *VEC_OP (T,alloc)					  \
+     (int alloc_)							  \
+{									  \
+  /* We must request exact size allocation, hence the negation.  */	  \
+  return (VEC(T) *) vec_o_reserve (NULL, -alloc_,			  \
+                                   offsetof (VEC(T),vec), sizeof (T));	  \
+}									  \
+									  \
+static inline VEC(T) *VEC_OP (T,copy) (VEC(T) *vec_)			  \
+{									  \
+  size_t len_ = vec_ ? vec_->num : 0;					  \
+  VEC (T) *new_vec_ = NULL;						  \
+									  \
+  if (len_)								  \
+    {									  \
+      /* We must request exact size allocation, hence the negation.  */	  \
+      new_vec_ = (VEC (T) *)						  \
+	vec_o_reserve (NULL, -len_, offsetof (VEC(T),vec), sizeof (T));	  \
+									  \
+      new_vec_->num = len_;						  \
+      memcpy (new_vec_->vec, vec_->vec, sizeof (T) * len_);		  \
+    }									  \
+  return new_vec_;							  \
+}									  \
+									  \
+static inline void VEC_OP (T,free)					  \
+     (VEC(T) **vec_)							  \
+{									  \
+  if (*vec_)								  \
+    vec_free_ (*vec_);							  \
+  *vec_ = NULL;								  \
+}									  \
+									  \
+static inline void VEC_OP (T,cleanup)					  \
+     (void *arg_)							  \
+{									  \
+  VEC(T) **vec_ = arg_;							  \
+  if (*vec_)								  \
+    vec_free_ (*vec_);							  \
+  *vec_ = NULL;								  \
+}									  \
+									  \
+static inline int VEC_OP (T,reserve)					  \
+     (VEC(T) **vec_, int alloc_ VEC_ASSERT_DECL)			  \
+{									  \
+  int extend = !VEC_OP (T,space)					  \
+	(*vec_, alloc_ < 0 ? -alloc_ : alloc_ VEC_ASSERT_PASS);		  \
+									  \
+  if (extend)								  \
+    *vec_ = (VEC(T) *) vec_o_reserve (*vec_, alloc_,			  \
+				      offsetof (VEC(T),vec), sizeof (T)); \
+									  \
+  return extend;							  \
+}									  \
+									  \
+static inline void VEC_OP (T,safe_grow)					  \
+     (VEC(T) **vec_, int size_ VEC_ASSERT_DECL)				  \
+{									  \
+  vec_assert (size_ >= 0 && VEC_OP(T,length) (*vec_) <= (unsigned)size_,  \
+	"safe_grow");							  \
+  VEC_OP (T,reserve) (vec_, (int)(*vec_ ? (*vec_)->num : 0) - size_	  \
+			VEC_ASSERT_PASS);				  \
+  (*vec_)->num = size_;							  \
+}									  \
+									  \
+static inline T *VEC_OP (T,safe_push)					  \
+     (VEC(T) **vec_, const T obj_ VEC_ASSERT_DECL)			  \
+{									  \
+  VEC_OP (T,reserve) (vec_, 1 VEC_ASSERT_PASS);				  \
+									  \
+  return VEC_OP (T,quick_push) (*vec_, obj_ VEC_ASSERT_PASS);		  \
+}									  \
+									  \
+static inline T *VEC_OP (T,safe_insert)					  \
+     (VEC(T) **vec_, unsigned ix_, const T obj_ VEC_ASSERT_DECL)	  \
+{									  \
+  VEC_OP (T,reserve) (vec_, 1 VEC_ASSERT_PASS);				  \
+									  \
+  return VEC_OP (T,quick_insert) (*vec_, ix_, obj_ VEC_ASSERT_PASS);	  \
+}
+
+#define DEF_VEC_FUNC_P(T)						  \
+static inline unsigned VEC_OP (T,length) (const VEC(T) *vec_)		  \
+{									  \
+  return vec_ ? vec_->num : 0;						  \
+}									  \
+									  \
+static inline T VEC_OP (T,last)						  \
+	(const VEC(T) *vec_ VEC_ASSERT_DECL)				  \
+{									  \
+  vec_assert (vec_ && vec_->num, "last");				  \
+									  \
+  return vec_->vec[vec_->num - 1];					  \
+}									  \
+									  \
+static inline T VEC_OP (T,index)					  \
+     (const VEC(T) *vec_, unsigned ix_ VEC_ASSERT_DECL)			  \
+{									  \
+  vec_assert (vec_ && ix_ < vec_->num, "index");			  \
+									  \
+  return vec_->vec[ix_];						  \
+}									  \
+									  \
+static inline int VEC_OP (T,iterate)					  \
+     (const VEC(T) *vec_, unsigned ix_, T *ptr)				  \
+{									  \
+  if (vec_ && ix_ < vec_->num)						  \
+    {									  \
+      *ptr = vec_->vec[ix_];						  \
+      return 1;								  \
+    }									  \
+  else									  \
+    {									  \
+      *ptr = 0;								  \
+      return 0;								  \
+    }									  \
+}									  \
+									  \
+static inline size_t VEC_OP (T,embedded_size)				  \
+     (int alloc_)							  \
+{									  \
+  return offsetof (VEC(T),vec) + alloc_ * sizeof(T);			  \
+}									  \
+									  \
+static inline void VEC_OP (T,embedded_init)				  \
+     (VEC(T) *vec_, int alloc_)						  \
+{									  \
+  vec_->num = 0;							  \
+  vec_->alloc = alloc_;							  \
+}									  \
+									  \
+static inline int VEC_OP (T,space)					  \
+     (VEC(T) *vec_, int alloc_ VEC_ASSERT_DECL)				  \
+{									  \
+  vec_assert (alloc_ >= 0, "space");					  \
+  return vec_ ? vec_->alloc - vec_->num >= (unsigned)alloc_ : !alloc_;	  \
+}									  \
+									  \
+static inline T *VEC_OP (T,quick_push)					  \
+     (VEC(T) *vec_, T obj_ VEC_ASSERT_DECL)				  \
+{									  \
+  T *slot_;								  \
+									  \
+  vec_assert (vec_->num < vec_->alloc, "quick_push");			  \
+  slot_ = &vec_->vec[vec_->num++];					  \
+  *slot_ = obj_;							  \
+									  \
+  return slot_;								  \
+}									  \
+									  \
+static inline T VEC_OP (T,pop) (VEC(T) *vec_ VEC_ASSERT_DECL)		  \
+{									  \
+  T obj_;								  \
+									  \
+  vec_assert (vec_->num, "pop");					  \
+  obj_ = vec_->vec[--vec_->num];					  \
+									  \
+  return obj_;								  \
+}									  \
+									  \
+static inline void VEC_OP (T,truncate)					  \
+     (VEC(T) *vec_, unsigned size_ VEC_ASSERT_DECL)			  \
+{									  \
+  vec_assert (vec_ ? vec_->num >= size_ : !size_, "truncate");		  \
+  if (vec_)								  \
+    vec_->num = size_;							  \
+}									  \
+									  \
+static inline T VEC_OP (T,replace)					  \
+     (VEC(T) *vec_, unsigned ix_, T obj_ VEC_ASSERT_DECL)		  \
+{									  \
+  T old_obj_;								  \
+									  \
+  vec_assert (ix_ < vec_->num, "replace");				  \
+  old_obj_ = vec_->vec[ix_];						  \
+  vec_->vec[ix_] = obj_;						  \
+									  \
+  return old_obj_;							  \
+}									  \
+									  \
+static inline T *VEC_OP (T,quick_insert)				  \
+     (VEC(T) *vec_, unsigned ix_, T obj_ VEC_ASSERT_DECL)		  \
+{									  \
+  T *slot_;								  \
+									  \
+  vec_assert (vec_->num < vec_->alloc && ix_ <= vec_->num, "quick_insert"); \
+  slot_ = &vec_->vec[ix_];						  \
+  memmove (slot_ + 1, slot_, (vec_->num++ - ix_) * sizeof (T));		  \
+  *slot_ = obj_;							  \
+									  \
+  return slot_;								  \
+}									  \
+									  \
+static inline T VEC_OP (T,ordered_remove)				  \
+     (VEC(T) *vec_, unsigned ix_ VEC_ASSERT_DECL)			  \
+{									  \
+  T *slot_;								  \
+  T obj_;								  \
+									  \
+  vec_assert (ix_ < vec_->num, "ordered_remove");			  \
+  slot_ = &vec_->vec[ix_];						  \
+  obj_ = *slot_;							  \
+  memmove (slot_, slot_ + 1, (--vec_->num - ix_) * sizeof (T));		  \
+									  \
+  return obj_;								  \
+}									  \
+									  \
+static inline T VEC_OP (T,unordered_remove)				  \
+     (VEC(T) *vec_, unsigned ix_ VEC_ASSERT_DECL)			  \
+{									  \
+  T *slot_;								  \
+  T obj_;								  \
+									  \
+  vec_assert (ix_ < vec_->num, "unordered_remove");			  \
+  slot_ = &vec_->vec[ix_];						  \
+  obj_ = *slot_;							  \
+  *slot_ = vec_->vec[--vec_->num];					  \
+									  \
+  return obj_;								  \
+}									  \
+									  \
+static inline void VEC_OP (T,block_remove)				  \
+     (VEC(T) *vec_, unsigned ix_, unsigned len_ VEC_ASSERT_DECL)	  \
+{									  \
+  T *slot_;								  \
+									  \
+  vec_assert (ix_ + len_ <= vec_->num, "block_remove");			  \
+  slot_ = &vec_->vec[ix_];						  \
+  vec_->num -= len_;							  \
+  memmove (slot_, slot_ + len_, (vec_->num - ix_) * sizeof (T));	  \
+}									  \
+									  \
+static inline T *VEC_OP (T,address)					  \
+     (VEC(T) *vec_)							  \
+{									  \
+  return vec_ ? vec_->vec : 0;						  \
+}									  \
+									  \
+static inline unsigned VEC_OP (T,lower_bound)				  \
+     (VEC(T) *vec_, const T obj_,					  \
+      int (*lessthan_)(const T, const T) VEC_ASSERT_DECL)		  \
+{									  \
+   unsigned int len_ = VEC_OP (T, length) (vec_);			  \
+   unsigned int half_, middle_;						  \
+   unsigned int first_ = 0;						  \
+   while (len_ > 0)							  \
+     {									  \
+        T middle_elem_;							  \
+        half_ = len_ >> 1;						  \
+        middle_ = first_;						  \
+        middle_ += half_;						  \
+        middle_elem_ = VEC_OP (T,index) (vec_, middle_ VEC_ASSERT_PASS);  \
+        if (lessthan_ (middle_elem_, obj_))				  \
+          {								  \
+             first_ = middle_;						  \
+             ++first_;							  \
+             len_ = len_ - half_ - 1;					  \
+          }								  \
+        else								  \
+          len_ = half_;							  \
+     }									  \
+   return first_;							  \
+}
+
+#define DEF_VEC_ALLOC_FUNC_P(T)						  \
+static inline VEC(T) *VEC_OP (T,alloc)					  \
+     (int alloc_)							  \
+{									  \
+  /* We must request exact size allocation, hence the negation.  */	  \
+  return (VEC(T) *) vec_p_reserve (NULL, -alloc_);			  \
+}									  \
+									  \
+static inline void VEC_OP (T,free)					  \
+     (VEC(T) **vec_)							  \
+{									  \
+  if (*vec_)								  \
+    vec_free_ (*vec_);							  \
+  *vec_ = NULL;								  \
+}									  \
+									  \
+static inline void VEC_OP (T,cleanup)					  \
+     (void *arg_)							  \
+{									  \
+  VEC(T) **vec_ = arg_;							  \
+  if (*vec_)								  \
+    vec_free_ (*vec_);							  \
+  *vec_ = NULL;								  \
+}									  \
+									  \
+static inline VEC(T) *VEC_OP (T,copy) (VEC(T) *vec_)			  \
+{									  \
+  size_t len_ = vec_ ? vec_->num : 0;					  \
+  VEC (T) *new_vec_ = NULL;						  \
+									  \
+  if (len_)								  \
+    {									  \
+      /* We must request exact size allocation, hence the negation.  */	  \
+      new_vec_ = (VEC (T) *)(vec_p_reserve (NULL, -len_));		  \
+									  \
+      new_vec_->num = len_;						  \
+      memcpy (new_vec_->vec, vec_->vec, sizeof (T) * len_);		  \
+    }									  \
+  return new_vec_;							  \
+}									  \
+									  \
+static inline int VEC_OP (T,reserve)					  \
+     (VEC(T) **vec_, int alloc_ VEC_ASSERT_DECL)			  \
+{									  \
+  int extend = !VEC_OP (T,space)					  \
+	(*vec_, alloc_ < 0 ? -alloc_ : alloc_ VEC_ASSERT_PASS);		  \
+									  \
+  if (extend)								  \
+    *vec_ = (VEC(T) *) vec_p_reserve (*vec_, alloc_);			  \
+									  \
+  return extend;							  \
+}									  \
+									  \
+static inline void VEC_OP (T,safe_grow)					  \
+     (VEC(T) **vec_, int size_ VEC_ASSERT_DECL)				  \
+{									  \
+  vec_assert (size_ >= 0 && VEC_OP(T,length) (*vec_) <= (unsigned)size_,  \
+	"safe_grow");							  \
+  VEC_OP (T,reserve)							  \
+	(vec_, (int)(*vec_ ? (*vec_)->num : 0) - size_ VEC_ASSERT_PASS);  \
+  (*vec_)->num = size_;							  \
+}									  \
+									  \
+static inline T *VEC_OP (T,safe_push)					  \
+     (VEC(T) **vec_, T obj_ VEC_ASSERT_DECL)				  \
+{									  \
+  VEC_OP (T,reserve) (vec_, 1 VEC_ASSERT_PASS);				  \
+									  \
+  return VEC_OP (T,quick_push) (*vec_, obj_ VEC_ASSERT_PASS);		  \
+}									  \
+									  \
+static inline T *VEC_OP (T,safe_insert)					  \
+     (VEC(T) **vec_, unsigned ix_, T obj_ VEC_ASSERT_DECL)		  \
+{									  \
+  VEC_OP (T,reserve) (vec_, 1 VEC_ASSERT_PASS);				  \
+									  \
+  return VEC_OP (T,quick_insert) (*vec_, ix_, obj_ VEC_ASSERT_PASS);	  \
+}
+
+#define DEF_VEC_FUNC_O(T)						  \
+static inline unsigned VEC_OP (T,length) (const VEC(T) *vec_)		  \
+{									  \
+  return vec_ ? vec_->num : 0;						  \
+}									  \
+									  \
+static inline T *VEC_OP (T,last) (VEC(T) *vec_ VEC_ASSERT_DECL)		  \
+{									  \
+  vec_assert (vec_ && vec_->num, "last");				  \
+									  \
+  return &vec_->vec[vec_->num - 1];					  \
+}									  \
+									  \
+static inline T *VEC_OP (T,index)					  \
+     (VEC(T) *vec_, unsigned ix_ VEC_ASSERT_DECL)			  \
+{									  \
+  vec_assert (vec_ && ix_ < vec_->num, "index");			  \
+									  \
+  return &vec_->vec[ix_];						  \
+}									  \
+									  \
+static inline int VEC_OP (T,iterate)					  \
+     (VEC(T) *vec_, unsigned ix_, T **ptr)				  \
+{									  \
+  if (vec_ && ix_ < vec_->num)						  \
+    {									  \
+      *ptr = &vec_->vec[ix_];						  \
+      return 1;								  \
+    }									  \
+  else									  \
+    {									  \
+      *ptr = 0;								  \
+      return 0;								  \
+    }									  \
+}									  \
+									  \
+static inline size_t VEC_OP (T,embedded_size)				  \
+     (int alloc_)							  \
+{									  \
+  return offsetof (VEC(T),vec) + alloc_ * sizeof(T);			  \
+}									  \
+									  \
+static inline void VEC_OP (T,embedded_init)				  \
+     (VEC(T) *vec_, int alloc_)						  \
+{									  \
+  vec_->num = 0;							  \
+  vec_->alloc = alloc_;							  \
+}									  \
+									  \
+static inline int VEC_OP (T,space)					  \
+     (VEC(T) *vec_, int alloc_ VEC_ASSERT_DECL)				  \
+{									  \
+  vec_assert (alloc_ >= 0, "space");					  \
+  return vec_ ? vec_->alloc - vec_->num >= (unsigned)alloc_ : !alloc_;	  \
+}									  \
+									  \
+static inline T *VEC_OP (T,quick_push)					  \
+     (VEC(T) *vec_, const T *obj_ VEC_ASSERT_DECL)			  \
+{									  \
+  T *slot_;								  \
+									  \
+  vec_assert (vec_->num < vec_->alloc, "quick_push");			  \
+  slot_ = &vec_->vec[vec_->num++];					  \
+  if (obj_)								  \
+    *slot_ = *obj_;							  \
+									  \
+  return slot_;								  \
+}									  \
+									  \
+static inline void VEC_OP (T,pop) (VEC(T) *vec_ VEC_ASSERT_DECL)	  \
+{									  \
+  vec_assert (vec_->num, "pop");					  \
+  --vec_->num;								  \
+}									  \
+									  \
+static inline void VEC_OP (T,truncate)					  \
+     (VEC(T) *vec_, unsigned size_ VEC_ASSERT_DECL)			  \
+{									  \
+  vec_assert (vec_ ? vec_->num >= size_ : !size_, "truncate");		  \
+  if (vec_)								  \
+    vec_->num = size_;							  \
+}									  \
+									  \
+static inline T *VEC_OP (T,replace)					  \
+     (VEC(T) *vec_, unsigned ix_, const T *obj_ VEC_ASSERT_DECL)	  \
+{									  \
+  T *slot_;								  \
+									  \
+  vec_assert (ix_ < vec_->num, "replace");				  \
+  slot_ = &vec_->vec[ix_];						  \
+  if (obj_)								  \
+    *slot_ = *obj_;							  \
+									  \
+  return slot_;								  \
+}									  \
+									  \
+static inline T *VEC_OP (T,quick_insert)				  \
+     (VEC(T) *vec_, unsigned ix_, const T *obj_ VEC_ASSERT_DECL)	  \
+{									  \
+  T *slot_;								  \
+									  \
+  vec_assert (vec_->num < vec_->alloc && ix_ <= vec_->num, "quick_insert"); \
+  slot_ = &vec_->vec[ix_];						  \
+  memmove (slot_ + 1, slot_, (vec_->num++ - ix_) * sizeof (T));		  \
+  if (obj_)								  \
+    *slot_ = *obj_;							  \
+									  \
+  return slot_;								  \
+}									  \
+									  \
+static inline void VEC_OP (T,ordered_remove)				  \
+     (VEC(T) *vec_, unsigned ix_ VEC_ASSERT_DECL)			  \
+{									  \
+  T *slot_;								  \
+									  \
+  vec_assert (ix_ < vec_->num, "ordered_remove");			  \
+  slot_ = &vec_->vec[ix_];						  \
+  memmove (slot_, slot_ + 1, (--vec_->num - ix_) * sizeof (T));		  \
+}									  \
+									  \
+static inline void VEC_OP (T,unordered_remove)				  \
+     (VEC(T) *vec_, unsigned ix_ VEC_ASSERT_DECL)			  \
+{									  \
+  vec_assert (ix_ < vec_->num, "unordered_remove");			  \
+  vec_->vec[ix_] = vec_->vec[--vec_->num];				  \
+}									  \
+									  \
+static inline void VEC_OP (T,block_remove)				  \
+     (VEC(T) *vec_, unsigned ix_, unsigned len_ VEC_ASSERT_DECL)	  \
+{									  \
+  T *slot_;								  \
+									  \
+  vec_assert (ix_ + len_ <= vec_->num, "block_remove");			  \
+  slot_ = &vec_->vec[ix_];						  \
+  vec_->num -= len_;							  \
+  memmove (slot_, slot_ + len_, (vec_->num - ix_) * sizeof (T));	  \
+}									  \
+									  \
+static inline T *VEC_OP (T,address)					  \
+     (VEC(T) *vec_)							  \
+{									  \
+  return vec_ ? vec_->vec : 0;						  \
+}									  \
+									  \
+static inline unsigned VEC_OP (T,lower_bound)				  \
+     (VEC(T) *vec_, const T *obj_,					  \
+      int (*lessthan_)(const T *, const T *) VEC_ASSERT_DECL)		  \
+{									  \
+   unsigned int len_ = VEC_OP (T, length) (vec_);			  \
+   unsigned int half_, middle_;						  \
+   unsigned int first_ = 0;						  \
+   while (len_ > 0)							  \
+     {									  \
+        T *middle_elem_;						  \
+        half_ = len_ >> 1;						  \
+        middle_ = first_;						  \
+        middle_ += half_;						  \
+        middle_elem_ = VEC_OP (T,index) (vec_, middle_ VEC_ASSERT_PASS);  \
+        if (lessthan_ (middle_elem_, obj_))				  \
+          {								  \
+             first_ = middle_;						  \
+             ++first_;							  \
+             len_ = len_ - half_ - 1;					  \
+          }								  \
+        else								  \
+          len_ = half_;							  \
+     }									  \
+   return first_;							  \
+}
+
+#define DEF_VEC_ALLOC_FUNC_O(T)						  \
+static inline VEC(T) *VEC_OP (T,alloc)					  \
+     (int alloc_)							  \
+{									  \
+  /* We must request exact size allocation, hence the negation.  */	  \
+  return (VEC(T) *) vec_o_reserve (NULL, -alloc_,			  \
+                                   offsetof (VEC(T),vec), sizeof (T));	  \
+}									  \
+									  \
+static inline VEC(T) *VEC_OP (T,copy) (VEC(T) *vec_)			  \
+{									  \
+  size_t len_ = vec_ ? vec_->num : 0;					  \
+  VEC (T) *new_vec_ = NULL;						  \
+									  \
+  if (len_)								  \
+    {									  \
+      /* We must request exact size allocation, hence the negation.  */	  \
+      new_vec_ = (VEC (T) *)						  \
+	vec_o_reserve  (NULL, -len_, offsetof (VEC(T),vec), sizeof (T));  \
+									  \
+      new_vec_->num = len_;						  \
+      memcpy (new_vec_->vec, vec_->vec, sizeof (T) * len_);		  \
+    }									  \
+  return new_vec_;							  \
+}									  \
+									  \
+static inline void VEC_OP (T,free)					  \
+     (VEC(T) **vec_)							  \
+{									  \
+  if (*vec_)								  \
+    vec_free_ (*vec_);							  \
+  *vec_ = NULL;								  \
+}									  \
+									  \
+static inline void VEC_OP (T,cleanup)					  \
+     (void *arg_)							  \
+{									  \
+  VEC(T) **vec_ = arg_;							  \
+  if (*vec_)								  \
+    vec_free_ (*vec_);							  \
+  *vec_ = NULL;								  \
+}									  \
+									  \
+static inline int VEC_OP (T,reserve)					  \
+     (VEC(T) **vec_, int alloc_ VEC_ASSERT_DECL)			  \
+{									  \
+  int extend = !VEC_OP (T,space) (*vec_, alloc_ < 0 ? -alloc_ : alloc_	  \
+				  VEC_ASSERT_PASS);			  \
+									  \
+  if (extend)								  \
+    *vec_ = (VEC(T) *)							  \
+	vec_o_reserve (*vec_, alloc_, offsetof (VEC(T),vec), sizeof (T)); \
+									  \
+  return extend;							  \
+}									  \
+									  \
+static inline void VEC_OP (T,safe_grow)					  \
+     (VEC(T) **vec_, int size_ VEC_ASSERT_DECL)				  \
+{									  \
+  vec_assert (size_ >= 0 && VEC_OP(T,length) (*vec_) <= (unsigned)size_,  \
+	"safe_grow");							  \
+  VEC_OP (T,reserve)							  \
+	(vec_, (int)(*vec_ ? (*vec_)->num : 0) - size_ VEC_ASSERT_PASS);  \
+  (*vec_)->num = size_;							  \
+}									  \
+									  \
+static inline T *VEC_OP (T,safe_push)					  \
+     (VEC(T) **vec_, const T *obj_ VEC_ASSERT_DECL)			  \
+{									  \
+  VEC_OP (T,reserve) (vec_, 1 VEC_ASSERT_PASS);				  \
+									  \
+  return VEC_OP (T,quick_push) (*vec_, obj_ VEC_ASSERT_PASS);		  \
+}									  \
+									  \
+static inline T *VEC_OP (T,safe_insert)					  \
+     (VEC(T) **vec_, unsigned ix_, const T *obj_ VEC_ASSERT_DECL)	  \
+{									  \
+  VEC_OP (T,reserve) (vec_, 1 VEC_ASSERT_PASS);				  \
+									  \
+  return VEC_OP (T,quick_insert) (*vec_, ix_, obj_ VEC_ASSERT_PASS);	  \
+}
+
+#endif /* GDB_VEC_H */
diff --git a/gdb/completer.c b/gdb/completer.c
index 48a4e46..b9f0699 100644
--- a/gdb/completer.c
+++ b/gdb/completer.c
@@ -104,7 +104,7 @@ readline_line_completion_function (const char *text, int matches)
 
 /* This can be used for functions which don't want to complete on
    symbols but don't want to complete on anything else either.  */
-char **
+VEC (char_ptr) *
 noop_completer (struct cmd_list_element *ignore, 
 		char *text, char *prefix)
 {
@@ -112,19 +112,12 @@ noop_completer (struct cmd_list_element *ignore,
 }
 
 /* Complete on filenames.  */
-char **
+VEC (char_ptr) *
 filename_completer (struct cmd_list_element *ignore, 
 		    char *text, char *word)
 {
   int subsequent_name;
-  char **return_val;
-  int return_val_used;
-  int return_val_alloced;
-
-  return_val_used = 0;
-  /* Small for testing.  */
-  return_val_alloced = 1;
-  return_val = (char **) xmalloc (return_val_alloced * sizeof (char *));
+  VEC (char_ptr) *return_val = NULL;
 
   subsequent_name = 0;
   while (1)
@@ -132,18 +125,8 @@ filename_completer (struct cmd_list_element *ignore,
       char *p, *q;
 
       p = rl_filename_completion_function (text, subsequent_name);
-      if (return_val_used >= return_val_alloced)
-	{
-	  return_val_alloced *= 2;
-	  return_val =
-	    (char **) xrealloc (return_val,
-				return_val_alloced * sizeof (char *));
-	}
       if (p == NULL)
-	{
-	  return_val[return_val_used++] = p;
-	  break;
-	}
+	break;
       /* We need to set subsequent_name to a non-zero value before the
 	 continue line below, because otherwise, if the first file
 	 seen by GDB is a backup file whose name ends in a `~', we
@@ -159,13 +142,12 @@ filename_completer (struct cmd_list_element *ignore,
 
       if (word == text)
 	/* Return exactly p.  */
-	return_val[return_val_used++] = p;
+	q = p;
       else if (word > text)
 	{
 	  /* Return some portion of p.  */
 	  q = xmalloc (strlen (p) + 5);
 	  strcpy (q, p + (word - text));
-	  return_val[return_val_used++] = q;
 	  xfree (p);
 	}
       else
@@ -175,9 +157,9 @@ filename_completer (struct cmd_list_element *ignore,
 	  strncpy (q, word, text - word);
 	  q[text - word] = '\0';
 	  strcat (q, p);
-	  return_val[return_val_used++] = q;
 	  xfree (p);
 	}
+      VEC_safe_push (char_ptr, return_val, q);
     }
 #if 0
   /* There is no way to do this just long enough to affect quote
@@ -199,13 +181,13 @@ filename_completer (struct cmd_list_element *ignore,
    This is intended to be used in commands that set breakpoints
    etc.  */
 
-char **
+VEC (char_ptr) *
 location_completer (struct cmd_list_element *ignore, 
 		    char *text, char *word)
 {
-  int n_syms = 0, n_files = 0;
-  char ** fn_list = NULL;
-  char ** list = NULL;
+  int n_syms, n_files, ix;
+  VEC (char_ptr) *fn_list = NULL;
+  VEC (char_ptr) *list = NULL;
   char *p;
   int quote_found = 0;
   int quoted = *text == '\'' || *text == '"';
@@ -290,21 +272,26 @@ location_completer (struct cmd_list_element *ignore,
 	fn_list = make_source_files_completion_list (text, text);
     }
 
-  /* How many completions do we have in both lists?  */
-  if (fn_list)
-    for ( ; fn_list[n_files]; n_files++)
-      ;
-  if (list)
-    for ( ; list[n_syms]; n_syms++)
-      ;
+  n_syms = VEC_length (char_ptr, list);
+  n_files = VEC_length (char_ptr, fn_list);
+
+  /* Catenate fn_list[] onto the end of list[].  */
+  if (!n_syms)
+    {
+      VEC_free (char_ptr, list); /* Paranoia.  */
+      list = fn_list;
+      fn_list = NULL;
+    }
+  else
+    {
+      for (ix = 0; VEC_iterate (char_ptr, fn_list, ix, p); ++ix)
+	VEC_safe_push (char_ptr, list, p);
+      VEC_free (char_ptr, fn_list);
+    }
 
-  /* Make list[] large enough to hold both lists, then catenate
-     fn_list[] onto the end of list[].  */
   if (n_syms && n_files)
     {
-      list = xrealloc (list, (n_syms + n_files + 1) * sizeof (char *));
-      memcpy (list + n_syms, fn_list, (n_files + 1) * sizeof (char *));
-      xfree (fn_list);
+      /* Nothing.  */
     }
   else if (n_files)
     {
@@ -323,23 +310,18 @@ location_completer (struct cmd_list_element *ignore,
 	 completion, because rl_complete will prepend "/foo/" to each
 	 candidate completion.  The loop below removes that leading
 	 part.  */
-      for (n_files = 0; fn_list[n_files]; n_files++)
+      for (ix = 0; VEC_iterate (char_ptr, list, ix, p); ++ix)
 	{
-	  memmove (fn_list[n_files], fn_list[n_files] + (word - text),
-		   strlen (fn_list[n_files]) + 1 - (word - text));
+	  memmove (p, p + (word - text),
+		   strlen (p) + 1 - (word - text));
 	}
-      /* Return just the file-name list as the result.  */
-      list = fn_list;
     }
   else if (!n_syms)
     {
       /* No completions at all.  As the final resort, try completing
 	 on the entire text as a symbol.  */
       list = make_symbol_completion_list (orig_text, word);
-      xfree (fn_list);
     }
-  else
-    xfree (fn_list);
 
   return list;
 }
@@ -379,20 +361,20 @@ count_struct_fields (struct type *type)
 
 /* Helper for expression_completer which recursively adds field and
    method names from TYPE, a struct or union type, to the array
-   OUTPUT.  This function assumes that OUTPUT is correctly-sized.  */
+   OUTPUT.  */
 static void
-add_struct_fields (struct type *type, int *nextp, char **output,
+add_struct_fields (struct type *type, VEC (char_ptr) **output,
 		   char *fieldname, int namelen)
 {
   int i;
   int computed_type_name = 0;
-  char *type_name = NULL;
+  const char *type_name = NULL;
 
   CHECK_TYPEDEF (type);
   for (i = 0; i < TYPE_NFIELDS (type); ++i)
     {
       if (i < TYPE_N_BASECLASSES (type))
-	add_struct_fields (TYPE_BASECLASS (type, i), nextp,
+	add_struct_fields (TYPE_BASECLASS (type, i),
 			   output, fieldname, namelen);
       else if (TYPE_FIELD_NAME (type, i))
 	{
@@ -400,15 +382,13 @@ add_struct_fields (struct type *type, int *nextp, char **output,
 	    {
 	      if (! strncmp (TYPE_FIELD_NAME (type, i), 
 			     fieldname, namelen))
-		{
-		  output[*nextp] = xstrdup (TYPE_FIELD_NAME (type, i));
-		  ++*nextp;
-		}
+		VEC_safe_push (char_ptr, *output,
+			       xstrdup (TYPE_FIELD_NAME (type, i)));
 	    }
 	  else if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_UNION)
 	    {
 	      /* Recurse into anonymous unions.  */
-	      add_struct_fields (TYPE_FIELD_TYPE (type, i), nextp, 
+	      add_struct_fields (TYPE_FIELD_TYPE (type, i),
 				 output, fieldname, namelen);
 	    }
 	}
@@ -416,7 +396,7 @@ add_struct_fields (struct type *type, int *nextp, char **output,
 
   for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; --i)
     {
-      char *name = TYPE_FN_FIELDLIST_NAME (type, i);
+      const char *name = TYPE_FN_FIELDLIST_NAME (type, i);
 
       if (name && ! strncmp (name, fieldname, namelen))
 	{
@@ -427,10 +407,7 @@ add_struct_fields (struct type *type, int *nextp, char **output,
 	    }
 	  /* Omit constructors from the completion list.  */
 	  if (!type_name || strcmp (type_name, name))
-	    {
-	      output[*nextp] = xstrdup (name);
-	      ++*nextp;
-	    }
+	    VEC_safe_push (char_ptr, *output, xstrdup (name));
 	}
     }
 }
@@ -438,7 +415,7 @@ add_struct_fields (struct type *type, int *nextp, char **output,
 /* Complete on expressions.  Often this means completing on symbol
    names, but some language parsers also have support for completing
    field names.  */
-char **
+VEC (char_ptr) *
 expression_completer (struct cmd_list_element *ignore, 
 		      char *text, char *word)
 {
@@ -471,11 +448,9 @@ expression_completer (struct cmd_list_element *ignore,
 	{
 	  int alloc = count_struct_fields (type);
 	  int flen = strlen (fieldname);
-	  int out = 0;
-	  char **result = (char **) xmalloc ((alloc + 1) * sizeof (char *));
+	  VEC (char_ptr) *result = NULL;
 
-	  add_struct_fields (type, &out, result, fieldname, flen);
-	  result[out] = NULL;
+	  add_struct_fields (type, &result, fieldname, flen);
 	  xfree (fieldname);
 	  return result;
 	}
@@ -552,12 +527,12 @@ complete_line_internal_reason;
    once sub-command completions are exhausted, we simply return NULL.
  */
 
-static char **
+static VEC (char_ptr) *
 complete_line_internal (const char *text, 
 			char *line_buffer, int point,
 			complete_line_internal_reason reason)
 {
-  char **list = NULL;
+  VEC (char_ptr) *list = NULL;
   char *tmp_command, *p;
   /* Pointer within tmp_command which corresponds to text.  */
   char *word;
@@ -794,9 +769,9 @@ complete_line_internal (const char *text,
 
   return list;
 }
-/* Generate completions all at once.  Returns a NULL-terminated array
-   of strings.  Both the array and each element are allocated with
-   xmalloc.  It can also return NULL if there are no completions.
+/* Generate completions all at once.  Returns a vector of strings.
+   Each element is allocated with xmalloc.  It can also return NULL if
+   there are no completions.
 
    TEXT is the caller's idea of the "word" we are looking at.
 
@@ -806,7 +781,7 @@ complete_line_internal (const char *text,
    POINT is the offset in that line of the cursor.  You
    should pretend that the line ends at POINT.  */
 
-char **
+VEC (char_ptr) *
 complete_line (const char *text, char *line_buffer, int point)
 {
   return complete_line_internal (text, line_buffer, 
@@ -814,7 +789,7 @@ complete_line (const char *text, char *line_buffer, int point)
 }
 
 /* Complete on command names.  Used by "help".  */
-char **
+VEC (char_ptr) *
 command_completer (struct cmd_list_element *ignore, 
 		   char *text, char *word)
 {
@@ -828,7 +803,7 @@ command_completer (struct cmd_list_element *ignore,
 char *
 gdb_completion_word_break_characters (void)
 {
-  char **list;
+  VEC (char_ptr) *list;
 
   list = complete_line_internal (rl_line_buffer, rl_line_buffer, rl_point,
 				 handle_brkchars);
@@ -861,7 +836,7 @@ static char *
 line_completion_function (const char *text, int matches, 
 			  char *line_buffer, int point)
 {
-  static char **list = (char **) NULL;	/* Cache of completions.  */
+  static VEC (char_ptr) *list = NULL;	/* Cache of completions.  */
   static int index;			/* Next cached completion.  */
   char *output = NULL;
 
@@ -877,24 +852,22 @@ line_completion_function (const char *text, int matches,
 	     inside.  This is because rl_complete_internal () frees
 	     the strings.  As complete_line may abort by calling
 	     `error' clear LIST now.  */
-	  xfree (list);
-	  list = NULL;
+	  VEC_free (char_ptr, list);
 	}
       index = 0;
       list = complete_line (text, line_buffer, point);
     }
 
   /* If we found a list of potential completions during initialization
-     then dole them out one at a time.  The vector of completions is
-     NULL terminated, so after returning the last one, return NULL
-     (and continue to do so) each time we are called after that, until
-     a new list is available.  */
+     then dole them out one at a time.  After returning the last one,
+     return NULL (and continue to do so) each time we are called after
+     that, until a new list is available.  */
 
   if (list)
     {
-      output = list[index];
-      if (output)
+      if (index < VEC_length (char_ptr, list))
 	{
+	  output = VEC_index (char_ptr, list, index);
 	  index++;
 	}
     }
diff --git a/gdb/completer.h b/gdb/completer.h
index 0f52245..680bc2d 100644
--- a/gdb/completer.h
+++ b/gdb/completer.h
@@ -17,27 +17,29 @@
 #if !defined (COMPLETER_H)
 #define COMPLETER_H 1
 
-extern char **complete_line (const char *text,
-			     char *line_buffer,
-			     int point);
+#include "gdb_vecs.h"
+
+extern VEC (char_ptr) *complete_line (const char *text,
+				      char *line_buffer,
+				      int point);
 
 extern char *readline_line_completion_function (const char *text,
 						int matches);
 
-extern char **noop_completer (struct cmd_list_element *,
-			      char *, char *);
+extern VEC (char_ptr) *noop_completer (struct cmd_list_element *,
+				       char *, char *);
 
-extern char **filename_completer (struct cmd_list_element *,
-				  char *, char *);
+extern VEC (char_ptr) *filename_completer (struct cmd_list_element *,
+					   char *, char *);
 
-extern char **expression_completer (struct cmd_list_element *,
-				    char *, char *);
+extern VEC (char_ptr) *expression_completer (struct cmd_list_element *,
+					     char *, char *);
 
-extern char **location_completer (struct cmd_list_element *,
-				  char *, char *);
+extern VEC (char_ptr) *location_completer (struct cmd_list_element *,
+					   char *, char *);
 
-extern char **command_completer (struct cmd_list_element *,
-				 char *, char *);
+extern VEC (char_ptr) *command_completer (struct cmd_list_element *,
+					  char *, char *);
 
 extern char *get_gdb_completer_quote_characters (void);
 
diff --git a/gdb/config.in b/gdb/config.in
index 4aff10d..0f795c6 100644
--- a/gdb/config.in
+++ b/gdb/config.in
@@ -1,26 +1,16 @@
 /* config.in.  Generated from configure.ac by autoheader.  */
 
-/* Define if the compiler is building for multiple architectures of Apple
-   platforms at once. */
-#undef AA_APPLE_UNIVERSAL_BUILD
-
 /* Define if building universal (internal helper macro) */
 #undef AC_APPLE_UNIVERSAL_BUILD
 
-/* Define to the number of bits in type 'ptrdiff_t'. */
-#undef BITSIZEOF_PTRDIFF_T
-
-/* Define to the number of bits in type 'sig_atomic_t'. */
-#undef BITSIZEOF_SIG_ATOMIC_T
+/* Directories from which to load auto-loaded scripts. */
+#undef AUTO_LOAD_DIR
 
-/* Define to the number of bits in type 'size_t'. */
-#undef BITSIZEOF_SIZE_T
+/* Directories safe to hold auto-loaded files. */
+#undef AUTO_LOAD_SAFE_PATH
 
-/* Define to the number of bits in type 'wchar_t'. */
-#undef BITSIZEOF_WCHAR_T
-
-/* Define to the number of bits in type 'wint_t'. */
-#undef BITSIZEOF_WINT_T
+/* Directory of programs. */
+#undef BINDIR
 
 /* Define to 1 if the compiler supports long long. */
 #undef CC_HAS_LONG_LONG
@@ -75,12 +65,6 @@
 /* Define to the default OS ABI for this configuration. */
 #undef GDB_OSABI_DEFAULT
 
-/* Define to 1 when the gnulib module memchr should be tested. */
-#undef GNULIB_TEST_MEMCHR
-
-/* Define to 1 when the gnulib module memmem should be tested. */
-#undef GNULIB_TEST_MEMMEM
-
 /* Define to 1 if you have `alloca', as a function or macro. */
 #undef HAVE_ALLOCA
 
@@ -88,9 +72,6 @@
    */
 #undef HAVE_ALLOCA_H
 
-/* Define to 1 if you have the <bp-sym.h> header file. */
-#undef HAVE_BP_SYM_H
-
 /* Define to 1 if you have the `btowc' function. */
 #undef HAVE_BTOWC
 
@@ -126,10 +107,6 @@
    */
 #undef HAVE_DECL_MALLOC
 
-/* Define to 1 if you have the declaration of `memmem', and to 0 if you don't.
-   */
-#undef HAVE_DECL_MEMMEM
-
 /* Define to 1 if you have the declaration of `ptrace', and to 0 if you don't.
    */
 #undef HAVE_DECL_PTRACE
@@ -191,9 +168,6 @@
 /* Define to 1 if you have the `getuid' function. */
 #undef HAVE_GETUID
 
-/* Define to 1 if you have the <gnu/libc-version.h> header file. */
-#undef HAVE_GNU_LIBC_VERSION_H
-
 /* Define if <sys/procfs.h> has gregset_t. */
 #undef HAVE_GREGSET_T
 
@@ -224,6 +198,9 @@
 /* Define to 1 if you have the `m' library (-lm). */
 #undef HAVE_LIBM
 
+/* Define to 1 if you have the `mcheck' library (-lmcheck). */
+#undef HAVE_LIBMCHECK
+
 /* Define if Python 2.4 is being used. */
 #undef HAVE_LIBPYTHON2_4
 
@@ -236,12 +213,6 @@
 /* Define if Python 2.7 is being used. */
 #undef HAVE_LIBPYTHON2_7
 
-/* Define if libunwind library is being used. */
-#undef HAVE_LIBUNWIND
-
-/* Define to 1 if you have the <libunwind.h> header file. */
-#undef HAVE_LIBUNWIND_H
-
 /* Define to 1 if you have the <libunwind-ia64.h> header file. */
 #undef HAVE_LIBUNWIND_IA64_H
 
@@ -257,8 +228,8 @@
 /* Define to 1 if the compiler supports long double. */
 #undef HAVE_LONG_DOUBLE
 
-/* Define to 1 if the system has the type `long long int'. */
-#undef HAVE_LONG_LONG_INT
+/* Define to 1 if you have the `lstat' function. */
+#undef HAVE_LSTAT
 
 /* Define if <sys/procfs.h> has lwpid_t. */
 #undef HAVE_LWPID_T
@@ -266,16 +237,6 @@
 /* Define to 1 if you have the <machine/reg.h> header file. */
 #undef HAVE_MACHINE_REG_H
 
-/* Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including
-   config.h and <sys/mman.h>. */
-#undef HAVE_MAP_ANONYMOUS
-
-/* Define to 1 if you have the `memchr' function. */
-#undef HAVE_MEMCHR
-
-/* Define to 1 if you have the `memmem' function. */
-#undef HAVE_MEMMEM
-
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 
@@ -285,9 +246,6 @@
 /* Define to 1 if you have the `monstartup' function. */
 #undef HAVE_MONSTARTUP
 
-/* Define to 1 if you have the `mprotect' function. */
-#undef HAVE_MPROTECT
-
 /* Define to 1 if you have the <ncurses.h> header file. */
 #undef HAVE_NCURSES_H
 
@@ -318,6 +276,9 @@
 /* Define to 1 if you have the `posix_madvise' function. */
 #undef HAVE_POSIX_MADVISE
 
+/* Define to 1 if you have the `pread' function. */
+#undef HAVE_PREAD
+
 /* Define to 1 if you have the `pread64' function. */
 #undef HAVE_PREAD64
 
@@ -375,92 +336,14 @@
 /* Define if sys/ptrace.h defines the PT_GETXMMREGS request. */
 #undef HAVE_PT_GETXMMREGS
 
+/* Define to 1 if you have the `pwrite' function. */
+#undef HAVE_PWRITE
+
 /* Define if Python interpreter is being linked in. */
 #undef HAVE_PYTHON
 
-/* Define to 1 if btowc is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_BTOWC
-
-/* Define to 1 if mbrlen is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_MBRLEN
-
-/* Define to 1 if mbrtowc is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_MBRTOWC
-
-/* Define to 1 if mbsinit is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_MBSINIT
-
-/* Define to 1 if mbsnrtowcs is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_MBSNRTOWCS
-
-/* Define to 1 if mbsrtowcs is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_MBSRTOWCS
-
-/* Define to 1 if memmem is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_MEMMEM
-
-/* Define to 1 if mempcpy is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_MEMPCPY
-
-/* Define to 1 if memrchr is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_MEMRCHR
-
-/* Define to 1 if rawmemchr is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_RAWMEMCHR
-
-/* Define to 1 if stpcpy is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_STPCPY
-
-/* Define to 1 if stpncpy is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_STPNCPY
-
-/* Define to 1 if strcasestr is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_STRCASESTR
-
-/* Define to 1 if strchrnul is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_STRCHRNUL
-
-/* Define to 1 if strdup is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_STRDUP
-
-/* Define to 1 if strncat is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_STRNCAT
-
-/* Define to 1 if strndup is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_STRNDUP
-
-/* Define to 1 if strnlen is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_STRNLEN
-
-/* Define to 1 if strpbrk is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_STRPBRK
-
-/* Define to 1 if strsep is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_STRSEP
-
-/* Define to 1 if strsignal is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_STRSIGNAL
-
-/* Define to 1 if strtok_r is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_STRTOK_R
-
-/* Define to 1 if strverscmp is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_STRVERSCMP
-
-/* Define to 1 if wcrtomb is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCRTOMB
-
-/* Define to 1 if wcsnrtombs is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSNRTOMBS
-
-/* Define to 1 if wcsrtombs is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSRTOMBS
-
-/* Define to 1 if wctob is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCTOB
-
-/* Define to 1 if wcwidth is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCWIDTH
+/* Define to 1 if you have the `readlink' function. */
+#undef HAVE_READLINK
 
 /* Define to 1 if you have the `realpath' function. */
 #undef HAVE_REALPATH
@@ -495,15 +378,6 @@
 /* Define to 1 if you have the <signal.h> header file. */
 #undef HAVE_SIGNAL_H
 
-/* Define to 1 if 'sig_atomic_t' is a signed integer type. */
-#undef HAVE_SIGNED_SIG_ATOMIC_T
-
-/* Define to 1 if 'wchar_t' is a signed integer type. */
-#undef HAVE_SIGNED_WCHAR_T
-
-/* Define to 1 if 'wint_t' is a signed integer type. */
-#undef HAVE_SIGNED_WINT_T
-
 /* Define to 1 if you have the `sigprocmask' function. */
 #undef HAVE_SIGPROCMASK
 
@@ -570,12 +444,15 @@
 /* Define to 1 if `struct thread' is a member of `td_pcb'. */
 #undef HAVE_STRUCT_THREAD_TD_PCB
 
+/* Define to 1 if `struct user_regs_struct' is a member of `fs_base'. */
+#undef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE
+
+/* Define to 1 if `struct user_regs_struct' is a member of `gs_base'. */
+#undef HAVE_STRUCT_USER_REGS_STRUCT_GS_BASE
+
 /* Define to 1 if you have the `syscall' function. */
 #undef HAVE_SYSCALL
 
-/* Define to 1 if you have the <sys/bitypes.h> header file. */
-#undef HAVE_SYS_BITYPES_H
-
 /* Define to 1 if you have the <sys/debugreg.h> header file. */
 #undef HAVE_SYS_DEBUGREG_H
 
@@ -592,15 +469,9 @@
 /* Define to 1 if you have the <sys/filio.h> header file. */
 #undef HAVE_SYS_FILIO_H
 
-/* Define to 1 if you have the <sys/inttypes.h> header file. */
-#undef HAVE_SYS_INTTYPES_H
-
 /* Define to 1 if you have the <sys/ioctl.h> header file. */
 #undef HAVE_SYS_IOCTL_H
 
-/* Define to 1 if you have the <sys/mman.h> header file. */
-#undef HAVE_SYS_MMAN_H
-
 /* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
    */
 #undef HAVE_SYS_NDIR_H
@@ -629,6 +500,9 @@
 /* Define to 1 if you have the <sys/select.h> header file. */
 #undef HAVE_SYS_SELECT_H
 
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#undef HAVE_SYS_SOCKET_H
+
 /* Define to 1 if you have the <sys/stat.h> header file. */
 #undef HAVE_SYS_STAT_H
 
@@ -638,6 +512,9 @@
 /* Define to 1 if you have the <sys/types.h> header file. */
 #undef HAVE_SYS_TYPES_H
 
+/* Define to 1 if you have the <sys/un.h> header file. */
+#undef HAVE_SYS_UN_H
+
 /* Define to 1 if you have the <sys/user.h> header file. */
 #undef HAVE_SYS_USER_H
 
@@ -671,9 +548,6 @@
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
-/* Define to 1 if the system has the type `unsigned long long int'. */
-#undef HAVE_UNSIGNED_LONG_LONG_INT
-
 /* Define to 1 if you have the `vfork' function. */
 #undef HAVE_VFORK
 
@@ -689,15 +563,6 @@
 /* Define to 1 if you have the `wborder' function. */
 #undef HAVE_WBORDER
 
-/* Define to 1 if you have the <wchar.h> header file. */
-#undef HAVE_WCHAR_H
-
-/* Define if you have the 'wchar_t' type. */
-#undef HAVE_WCHAR_T
-
-/* Define if you have the 'wint_t' type. */
-#undef HAVE_WINT_T
-
 /* Define to 1 if `fork' works. */
 #undef HAVE_WORKING_FORK
 
@@ -735,9 +600,6 @@
    moved. */
 #undef JIT_READER_DIR_RELOCATABLE
 
-/* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */
-#undef MAP_ANONYMOUS
-
 /* Define if you want to use new multi-fd /proc interface (replaces
    HAVE_MULTIPLE_PROC_FDS as well as other macros). */
 #undef NEW_PROC_API
@@ -791,10 +653,6 @@
 /* Define as the return type of ptrace. */
 #undef PTRACE_TYPE_RET
 
-/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
-   'ptrdiff_t'. */
-#undef PTRDIFF_T_SUFFIX
-
 /* Define if the python directory should be relocated when GDB is moved. */
 #undef PYTHON_PATH_RELOCATABLE
 
@@ -813,10 +671,6 @@
 /* Define to 1 if the `setpgrp' function takes no argument. */
 #undef SETPGRP_VOID
 
-/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
-   'sig_atomic_t'. */
-#undef SIG_ATOMIC_T_SUFFIX
-
 /* The size of `long', as computed by sizeof. */
 #undef SIZEOF_LONG
 
@@ -829,10 +683,6 @@
 /* The size of `unsigned __int128', as computed by sizeof. */
 #undef SIZEOF_UNSIGNED___INT128
 
-/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
-   'size_t'. */
-#undef SIZE_T_SUFFIX
-
 /* If using the C implementation of alloca, define if you know the
    direction of stack growth for your system; otherwise it will be
    automatically deduced at runtime.
@@ -854,6 +704,12 @@
    moved. */
 #undef SYSTEM_GDBINIT_RELOCATABLE
 
+/* search for usr/lib et al within DIR */
+#undef TARGET_SYSTEM_ROOT
+
+/* Define if the sysroot directory should be relocated when GDB is moved. */
+#undef TARGET_SYSTEM_ROOT_RELOCATABLE
+
 /* Define if <thread_db.h> has the TD_NOTALLOC error code. */
 #undef THREAD_DB_HAS_TD_NOTALLOC
 
@@ -866,19 +722,33 @@
 /* Define to 1 if the regex included in libiberty should be used. */
 #undef USE_INCLUDED_REGEX
 
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
 /* Define if we should use the Windows API, instead of the POSIX API. On
    Windows, we use the Windows API when building for MinGW, but the POSIX API
    when building for Cygwin. */
 #undef USE_WIN32API
 
-/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
-   'wchar_t'. */
-#undef WCHAR_T_SUFFIX
-
-/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
-   'wint_t'. */
-#undef WINT_T_SUFFIX
-
 /* Define if --with-python provides a path, either directly or via
    python-config.py --exec-prefix. */
 #undef WITH_PYTHON_PATH
@@ -925,31 +795,6 @@
 /* Define if <sys/link.h> has link_map32 (solaris sparc-64 target) */
 #undef _SYSCALL32
 
-/* Define to 500 only on HP-UX. */
-#undef _XOPEN_SOURCE
-
-/* Enable extensions on AIX 3, Interix.  */
-#ifndef _ALL_SOURCE
-# undef _ALL_SOURCE
-#endif
-/* Enable GNU extensions on systems that have them.  */
-#ifndef _GNU_SOURCE
-# undef _GNU_SOURCE
-#endif
-/* Enable threading extensions on Solaris.  */
-#ifndef _POSIX_PTHREAD_SEMANTICS
-# undef _POSIX_PTHREAD_SEMANTICS
-#endif
-/* Enable extensions on HP NonStop.  */
-#ifndef _TANDEM_SOURCE
-# undef _TANDEM_SOURCE
-#endif
-/* Enable general extensions on Solaris.  */
-#ifndef __EXTENSIONS__
-# undef __EXTENSIONS__
-#endif
-
-
 /* Define to empty if `const' does not conform to ANSI C. */
 #undef const
 
@@ -959,45 +804,8 @@
 #undef inline
 #endif
 
-/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
-   the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
-   earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
-   __APPLE__ && __MACH__ test for MacOS X.
-   __APPLE_CC__ tests for the Apple compiler and its version.
-   __STDC_VERSION__ tests for the C99 mode.  */
-#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
-# define __GNUC_STDC_INLINE__ 1
-#endif
-
 /* Define to `int' if <sys/types.h> does not define. */
 #undef pid_t
 
-/* Define to the equivalent of the C99 'restrict' keyword, or to
-   nothing if this is not supported.  Do not define if restrict is
-   supported directly.  */
-#undef restrict
-/* Work around a bug in Sun C++: it does not support _Restrict or
-   __restrict__, even though the corresponding Sun C compiler ends up with
-   "#define restrict _Restrict" or "#define restrict __restrict__" in the
-   previous line.  Perhaps some future version of Sun C++ will work with
-   restrict; if so, hopefully it defines __RESTRICT like Sun C does.  */
-#if defined __SUNPRO_CC && !defined __RESTRICT
-# define _Restrict
-# define __restrict__
-#endif
-
-/* Define as a marker that can be attached to declarations that might not
-    be used.  This helps to reduce warnings, such as from
-    GCC -Wunused-parameter.  */
-#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
-# define _GL_UNUSED __attribute__ ((__unused__))
-#else
-# define _GL_UNUSED
-#endif
-/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
-   is a misnomer outside of parameter lists.  */
-#define _UNUSED_PARAMETER_ _GL_UNUSED
-
-
 /* Define as `fork' if `vfork' does not work. */
 #undef vfork
diff --git a/gdb/config/alpha/alpha-linux.mh b/gdb/config/alpha/alpha-linux.mh
index ddfb19b..9eb9e4b 100644
--- a/gdb/config/alpha/alpha-linux.mh
+++ b/gdb/config/alpha/alpha-linux.mh
@@ -1,8 +1,8 @@
 # Host: Little-endian Alpha running Linux
 NAT_FILE= config/nm-linux.h
-NATDEPFILES= inf-ptrace.o corelow.o alpha-linux-nat.o \
+NATDEPFILES= inf-ptrace.o alpha-linux-nat.o \
 	fork-child.o proc-service.o linux-thread-db.o \
-	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o
+	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o linux-ptrace.o
 NAT_CDEPS = $(srcdir)/proc-service.list
 
 # The dynamically loaded libthread_db needs access to symbols in the
diff --git a/gdb/config/alpha/alpha-osf3.mh b/gdb/config/alpha/alpha-osf3.mh
index 8dc6f80..483ef78 100644
--- a/gdb/config/alpha/alpha-osf3.mh
+++ b/gdb/config/alpha/alpha-osf3.mh
@@ -1,6 +1,6 @@
 # Host: Little-endian Alpha running OSF/1-3.x and higher using procfs
 NAT_FILE= nm-osf3.h
-NATDEPFILES= corelow.o alpha-nat.o fork-child.o \
-	solib-osf.o solib.o procfs.o proc-api.o proc-events.o proc-flags.o \
+NATDEPFILES= alpha-nat.o fork-child.o \
+	solib-osf.o procfs.o proc-api.o proc-events.o proc-flags.o \
 	proc-why.o dec-thread.o
 NAT_CLIBS= -lpthreaddebug
diff --git a/gdb/config/alpha/fbsd.mh b/gdb/config/alpha/fbsd.mh
index 3aac410..6d1fe29 100644
--- a/gdb/config/alpha/fbsd.mh
+++ b/gdb/config/alpha/fbsd.mh
@@ -1,6 +1,6 @@
 # Host: FreeBSD/alpha
 NATDEPFILES= fork-child.o inf-ptrace.o \
 	fbsd-nat.o alphabsd-nat.o bsd-kvm.o \
-	corelow.o core-regset.o
+	core-regset.o
 
 LOADLIBES= -lkvm
diff --git a/gdb/config/arm/linux.mh b/gdb/config/arm/linux.mh
index 78918d2..c0a1c66 100644
--- a/gdb/config/arm/linux.mh
+++ b/gdb/config/arm/linux.mh
@@ -3,7 +3,7 @@
 NAT_FILE= config/nm-linux.h
 NATDEPFILES= inf-ptrace.o fork-child.o arm-linux-nat.o \
 	proc-service.o linux-thread-db.o \
-	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o
+	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o linux-ptrace.o
 NAT_CDEPS = $(srcdir)/proc-service.list
 
 LOADLIBES= -ldl $(RDYNAMIC)
diff --git a/gdb/config/arm/nbsdaout.mh b/gdb/config/arm/nbsdaout.mh
index b06044b..d10bd04 100644
--- a/gdb/config/arm/nbsdaout.mh
+++ b/gdb/config/arm/nbsdaout.mh
@@ -1,3 +1,3 @@
 # Host: NetBSD/arm
-NATDEPFILES= fork-child.o inf-ptrace.o corelow.o armnbsd-nat.o \
+NATDEPFILES= fork-child.o inf-ptrace.o armnbsd-nat.o \
 	solib-sunos.o
diff --git a/gdb/config/arm/nbsdelf.mh b/gdb/config/arm/nbsdelf.mh
index 8ff679f..4efb8a3 100644
--- a/gdb/config/arm/nbsdelf.mh
+++ b/gdb/config/arm/nbsdelf.mh
@@ -1,2 +1,2 @@
 # Host: NetBSD/arm
-NATDEPFILES= fork-child.o inf-ptrace.o corelow.o armnbsd-nat.o
+NATDEPFILES= fork-child.o inf-ptrace.o armnbsd-nat.o
diff --git a/gdb/config/djgpp/djcheck.sh b/gdb/config/djgpp/djcheck.sh
index 36f2e01..3c1234c 100644
--- a/gdb/config/djgpp/djcheck.sh
+++ b/gdb/config/djgpp/djcheck.sh
@@ -2,6 +2,21 @@
 
 # A shell script to run the test suite on the DJGPP version of GDB.
 
+#  Copyright (C) 2000-2012 Free Software Foundation, Inc.
+#
+#  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 3 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, see <http://www.gnu.org/licenses/>.
+
 ORIGDIR=`pwd`
 GDB=${ORIGDIR}/../gdb.exe
 SUBDIRS=`find $ORIGDIR -type d ! -ipath $ORIGDIR`
diff --git a/gdb/config/djgpp/fnchange.lst b/gdb/config/djgpp/fnchange.lst
index c2f14cf..7d5ea82 100644
--- a/gdb/config/djgpp/fnchange.lst
+++ b/gdb/config/djgpp/fnchange.lst
@@ -109,6 +109,7 @@
 @V@/gdb/ChangeLog-2008 @V@/gdb/ChangeLog.008
 @V@/gdb/ChangeLog-2009 @V@/gdb/ChangeLog.009
 @V@/gdb/ChangeLog-2010 @V@/gdb/ChangeLog.010
+ at V@/gdb/ChangeLog-2011 @V@/gdb/ChangeLog.011
 @V@/gdb/ChangeLog-3.x @V@/gdb/ChangeLog.3-x
 @V@/gdb/ada-exp.tab.c @V@/gdb/ada-exp_tab.c
 @V@/gdb/amd64-windows-nat.c @V@/gdb/a64w-nat.c
@@ -416,6 +417,10 @@
 @V@/gdb/testsuite/gdb.base/hook-stop-frame.c @V@/gdb/testsuite/gdb.base/hstop-frame.c
 @V@/gdb/testsuite/gdb.base/hook-stop-continue.exp @V@/gdb/testsuite/gdb.base/hstop-continue.exp
 @V@/gdb/testsuite/gdb.base/hook-stop-frame.exp @V@/gdb/testsuite/gdb.base/hstop-frame.exp
+ at V@/gdb/testsuite/gdb.base/print-file-var-lib1.c @V@/gdb/testsuite/gdb.base/pfv-lib1.c
+ at V@/gdb/testsuite/gdb.base/print-file-var-lib2.c @V@/gdb/testsuite/gdb.base/pfv-lib2.c
+ at V@/gdb/testsuite/gdb.base/print-file-var-main.c @V@/gdb/testsuite/gdb.base/pfv-main.c
+ at V@/gdb/testsuite/gdb.base/print-file-var.exp @V@/gdb/testsuite/gdb.base/pfv.exp
 @V@/gdb/testsuite/gdb.base/return-nodebug1.c @V@/gdb/testsuite/gdb.base/return-1nodebug.c
 @V@/gdb/testsuite/gdb.base/siginfo-addr.c @V@/gdb/testsuite/gdb.base/si-addr.c
 @V@/gdb/testsuite/gdb.base/siginfo-obj.c @V@/gdb/testsuite/gdb.base/si-obj.c
diff --git a/gdb/config/i386/fbsd64.mh b/gdb/config/i386/fbsd64.mh
index 2266def..3f43727 100644
--- a/gdb/config/i386/fbsd64.mh
+++ b/gdb/config/i386/fbsd64.mh
@@ -1,6 +1,6 @@
 # Host: FreeBSD/amd64
 NATDEPFILES= fork-child.o inf-ptrace.o \
 	fbsd-nat.o amd64-nat.o amd64bsd-nat.o amd64fbsd-nat.o \
-	bsd-kvm.o
+	bsd-kvm.o i386-nat.o
 
 LOADLIBES= -lkvm
diff --git a/gdb/config/i386/i386gnu.mh b/gdb/config/i386/i386gnu.mh
index d4e09d9..d85744b 100644
--- a/gdb/config/i386/i386gnu.mh
+++ b/gdb/config/i386/i386gnu.mh
@@ -1,5 +1,5 @@
 # Host: Intel 386 running the GNU Hurd
-NATDEPFILES= i386gnu-nat.o gnu-nat.o corelow.o core-regset.o fork-child.o \
+NATDEPFILES= i386gnu-nat.o gnu-nat.o core-regset.o fork-child.o \
 	     notify_S.o process_reply_S.o msg_reply_S.o \
 	     msg_U.o exc_request_U.o exc_request_S.o
 
diff --git a/gdb/config/i386/linux.mh b/gdb/config/i386/linux.mh
index 3a158c6..8316d87 100644
--- a/gdb/config/i386/linux.mh
+++ b/gdb/config/i386/linux.mh
@@ -4,7 +4,7 @@ NAT_FILE= config/nm-linux.h
 NATDEPFILES= inf-ptrace.o fork-child.o \
 	i386-nat.o i386-linux-nat.o \
 	proc-service.o linux-thread-db.o \
-	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o
+	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o linux-ptrace.o
 NAT_CDEPS = $(srcdir)/proc-service.list
 
 # The dynamically loaded libthread_db needs access to symbols in the
diff --git a/gdb/config/i386/linux64.mh b/gdb/config/i386/linux64.mh
index a5e8c14..d2b95fd 100644
--- a/gdb/config/i386/linux64.mh
+++ b/gdb/config/i386/linux64.mh
@@ -3,7 +3,7 @@ NATDEPFILES= inf-ptrace.o fork-child.o \
 	i386-nat.o amd64-nat.o amd64-linux-nat.o \
 	linux-nat.o linux-osdata.o \
 	proc-service.o linux-thread-db.o linux-fork.o \
-	linux-procfs.o
+	linux-procfs.o linux-ptrace.o
 NAT_FILE= config/nm-linux.h
 NAT_CDEPS = $(srcdir)/proc-service.list
 
diff --git a/gdb/config/i386/nbsdaout.mh b/gdb/config/i386/nbsdaout.mh
index 9ea1952..512e9a7 100644
--- a/gdb/config/i386/nbsdaout.mh
+++ b/gdb/config/i386/nbsdaout.mh
@@ -1,6 +1,6 @@
 # Host: NetBSD/i386 a.out
 NATDEPFILES= fork-child.o inf-ptrace.o \
 	nbsd-nat.o i386bsd-nat.o i386nbsd-nat.o bsd-kvm.o \
-	solib.o solib-sunos.o
+	solib-sunos.o
 
 LOADLIBES= -lkvm
diff --git a/gdb/config/i386/obsdaout.mh b/gdb/config/i386/obsdaout.mh
index d60758a..ddb9be1 100644
--- a/gdb/config/i386/obsdaout.mh
+++ b/gdb/config/i386/obsdaout.mh
@@ -1,6 +1,6 @@
 # Host: OpenBSD/i386 a.out
 NATDEPFILES= fork-child.o inf-ptrace.o \
 	i386bsd-nat.o i386nbsd-nat.o i386obsd-nat.o bsd-kvm.o \
-	solib.o solib-sunos.o
+	solib-sunos.o
 
 LOADLIBES= -lkvm
diff --git a/gdb/config/ia64/hpux.mh b/gdb/config/ia64/hpux.mh
index b75763b..7bbfab4 100644
--- a/gdb/config/ia64/hpux.mh
+++ b/gdb/config/ia64/hpux.mh
@@ -1,3 +1,3 @@
 # Host: ia64 running HP-UX
-NATDEPFILES= fork-child.o inf-ttrace.o corelow.o ia64-hpux-nat.o \
+NATDEPFILES= fork-child.o inf-ttrace.o ia64-hpux-nat.o \
         solib-ia64-hpux.o
diff --git a/gdb/config/ia64/linux.mh b/gdb/config/ia64/linux.mh
index 5114899..1a4c68e 100644
--- a/gdb/config/ia64/linux.mh
+++ b/gdb/config/ia64/linux.mh
@@ -1,11 +1,11 @@
 # Host: Intel IA-64 running GNU/Linux
 
 NAT_FILE= config/nm-linux.h
-NATDEPFILES= inf-ptrace.o fork-child.o corelow.o \
+NATDEPFILES= inf-ptrace.o fork-child.o \
 	core-regset.o ia64-linux-nat.o \
 	proc-service.o linux-thread-db.o \
 	linux-nat.o linux-osdata.o linux-fork.o \
-	linux-procfs.o
+	linux-procfs.o linux-ptrace.o
 NAT_CDEPS = $(srcdir)/proc-service.list
 
 LOADLIBES = -ldl $(RDYNAMIC)
diff --git a/gdb/config/m32r/linux.mh b/gdb/config/m32r/linux.mh
index b4849ae..b461806 100644
--- a/gdb/config/m32r/linux.mh
+++ b/gdb/config/m32r/linux.mh
@@ -1,9 +1,9 @@
 # Host: M32R based machine running GNU/Linux
 
 NAT_FILE= config/nm-linux.h
-NATDEPFILES= inf-ptrace.o fork-child.o corelow.o	\
+NATDEPFILES= inf-ptrace.o fork-child.o				\
 	m32r-linux-nat.o proc-service.o linux-thread-db.o	\
-	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o
+	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o linux-ptrace.o
 NAT_CDEPS = $(srcdir)/proc-service.list
 
 LOADLIBES= -ldl $(RDYNAMIC)
diff --git a/gdb/config/m68k/linux.mh b/gdb/config/m68k/linux.mh
index 3a95828..e3aaf38 100644
--- a/gdb/config/m68k/linux.mh
+++ b/gdb/config/m68k/linux.mh
@@ -2,9 +2,9 @@
 
 NAT_FILE= config/nm-linux.h
 NATDEPFILES= inf-ptrace.o fork-child.o \
-	corelow.o m68klinux-nat.o \
+	m68klinux-nat.o \
 	proc-service.o linux-thread-db.o \
-	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o
+	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o linux-ptrace.o
 NAT_CDEPS = $(srcdir)/proc-service.list
 
 # The dynamically loaded libthread_db needs access to symbols in the
diff --git a/gdb/config/m68k/nbsdaout.mh b/gdb/config/m68k/nbsdaout.mh
index 09d2a12..8e7e236 100644
--- a/gdb/config/m68k/nbsdaout.mh
+++ b/gdb/config/m68k/nbsdaout.mh
@@ -1,5 +1,5 @@
 # Host: NetBSD/m68k a.out
 NATDEPFILES= m68kbsd-nat.o fork-child.o inf-ptrace.o \
-	solib.o solib-sunos.o
+	solib-sunos.o
 
 LOADLIBES= -lkvm
diff --git a/gdb/config/m68k/obsd.mh b/gdb/config/m68k/obsd.mh
index 6103c41..16618c6 100644
--- a/gdb/config/m68k/obsd.mh
+++ b/gdb/config/m68k/obsd.mh
@@ -1,5 +1,5 @@
 # Host: OpenBSD/m68k
 NATDEPFILES= m68kbsd-nat.o bsd-kvm.o fork-child.o inf-ptrace.o \
-	solib.o solib-sunos.o
+	solib-sunos.o
 
 LOADLIBES= -lkvm
diff --git a/gdb/config/mips/irix5.mh b/gdb/config/mips/irix5.mh
index 8d07221..7ab5e11 100644
--- a/gdb/config/mips/irix5.mh
+++ b/gdb/config/mips/irix5.mh
@@ -1,3 +1,3 @@
 # Host: SGI Iris running irix 5.x
-NATDEPFILES= fork-child.o irix5-nat.o corelow.o procfs.o \
+NATDEPFILES= fork-child.o irix5-nat.o procfs.o \
 	proc-api.o proc-events.o proc-flags.o proc-why.o
diff --git a/gdb/config/mips/irix6.mh b/gdb/config/mips/irix6.mh
index de212b2..28a67eb 100644
--- a/gdb/config/mips/irix6.mh
+++ b/gdb/config/mips/irix6.mh
@@ -1,3 +1,3 @@
 # Host: SGI Iris running irix 6.x
-NATDEPFILES= fork-child.o irix5-nat.o corelow.o procfs.o \
+NATDEPFILES= fork-child.o irix5-nat.o procfs.o \
 	proc-api.o proc-events.o proc-flags.o proc-why.o
diff --git a/gdb/config/mips/linux.mh b/gdb/config/mips/linux.mh
index 1ef3bce..2f8e5dd 100644
--- a/gdb/config/mips/linux.mh
+++ b/gdb/config/mips/linux.mh
@@ -3,7 +3,7 @@ NAT_FILE= config/nm-linux.h
 NATDEPFILES= inf-ptrace.o fork-child.o mips-linux-nat.o \
 	linux-thread-db.o proc-service.o \
 	linux-nat.o linux-osdata.o linux-fork.o \
-	linux-procfs.o
+	linux-procfs.o linux-ptrace.o
 NAT_CDEPS = $(srcdir)/proc-service.list
 
 LOADLIBES = -ldl $(RDYNAMIC)
diff --git a/gdb/config/pa/hpux.mh b/gdb/config/pa/hpux.mh
index 7b4fd07..e88bddb 100644
--- a/gdb/config/pa/hpux.mh
+++ b/gdb/config/pa/hpux.mh
@@ -1,3 +1,3 @@
 # Host: PA-RISC HP-UX
 NATDEPFILES= fork-child.o inf-ptrace.o inf-ttrace.o \
-	hppa-hpux-nat.o corelow.o somread.o
+	hppa-hpux-nat.o somread.o
diff --git a/gdb/config/pa/linux.mh b/gdb/config/pa/linux.mh
index 4ed8cbf..fa46db6 100644
--- a/gdb/config/pa/linux.mh
+++ b/gdb/config/pa/linux.mh
@@ -1,9 +1,9 @@
 # Host: Hewlett-Packard PA-RISC machine, running Linux
 NAT_FILE= config/nm-linux.h
-NATDEPFILES= inf-ptrace.o fork-child.o corelow.o \
+NATDEPFILES= inf-ptrace.o fork-child.o \
 	hppa-linux-nat.o proc-service.o linux-thread-db.o \
 	linux-nat.o linux-osdata.o linux-fork.o \
-	linux-procfs.o
+	linux-procfs.o linux-ptrace.o
 NAT_CDEPS = $(srcdir)/proc-service.list
 
 LOADLIBES = -ldl $(RDYNAMIC)
diff --git a/gdb/config/powerpc/aix.mh b/gdb/config/powerpc/aix.mh
index 1a76524..d007fff 100644
--- a/gdb/config/powerpc/aix.mh
+++ b/gdb/config/powerpc/aix.mh
@@ -3,8 +3,8 @@
 NAT_FILE= config/rs6000/nm-rs6000.h
 
 # aix-thread.o is not listed in NATDEPFILES as it is pulled in by configure.
-NATDEPFILES= fork-child.o inf-ptrace.o corelow.o rs6000-nat.o \
-	     xcoffread.o xcoffsolib.o
+NATDEPFILES= fork-child.o inf-ptrace.o rs6000-nat.o \
+	     xcoffsolib.o
 
 # When compiled with cc, for debugging, this argument should be passed.
 # We have no idea who our current compiler is though, so we skip it.
diff --git a/gdb/config/powerpc/linux.mh b/gdb/config/powerpc/linux.mh
index 0ae9368..b0d4ce7 100644
--- a/gdb/config/powerpc/linux.mh
+++ b/gdb/config/powerpc/linux.mh
@@ -5,7 +5,7 @@ XM_CLIBS=
 NAT_FILE= config/nm-linux.h
 NATDEPFILES= inf-ptrace.o fork-child.o \
 	ppc-linux-nat.o proc-service.o linux-thread-db.o \
-	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o
+	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o linux-ptrace.o
 NAT_CDEPS = $(srcdir)/proc-service.list
 
 LOADLIBES = -ldl $(RDYNAMIC)
diff --git a/gdb/config/powerpc/ppc64-linux.mh b/gdb/config/powerpc/ppc64-linux.mh
index bf1bb5b..367a818 100644
--- a/gdb/config/powerpc/ppc64-linux.mh
+++ b/gdb/config/powerpc/ppc64-linux.mh
@@ -5,7 +5,7 @@ XM_CLIBS=
 NAT_FILE= config/nm-linux.h
 NATDEPFILES= inf-ptrace.o fork-child.o \
 	ppc-linux-nat.o proc-service.o linux-thread-db.o \
-	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o
+	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o linux-ptrace.o
 NAT_CDEPS = $(srcdir)/proc-service.list
 
 # The PowerPC has severe limitations on TOC size, and uses them even
diff --git a/gdb/config/powerpc/spu-linux.mh b/gdb/config/powerpc/spu-linux.mh
index f6e7396..1bc279a 100644
--- a/gdb/config/powerpc/spu-linux.mh
+++ b/gdb/config/powerpc/spu-linux.mh
@@ -4,5 +4,5 @@
 # PPU side of the Cell BE and debugging the SPU side.
 
 NATDEPFILES = spu-linux-nat.o fork-child.o inf-ptrace.o \
-	      linux-procfs.o
+	      linux-procfs.o linux-ptrace.o
 
diff --git a/gdb/config/s390/s390.mh b/gdb/config/s390/s390.mh
index 03db4a1..a53835c 100644
--- a/gdb/config/s390/s390.mh
+++ b/gdb/config/s390/s390.mh
@@ -1,7 +1,7 @@
 # Host: S390, running Linux
 NAT_FILE= config/nm-linux.h
-NATDEPFILES= inf-ptrace.o fork-child.o corelow.o s390-nat.o \
+NATDEPFILES= inf-ptrace.o fork-child.o s390-nat.o \
 	linux-thread-db.o proc-service.o \
-	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o
+	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o linux-ptrace.o
 NAT_CDEPS = $(srcdir)/proc-service.list
 LOADLIBES = -ldl $(RDYNAMIC)
diff --git a/gdb/config/sparc/linux.mh b/gdb/config/sparc/linux.mh
index a9a768c..6a2cefd 100644
--- a/gdb/config/sparc/linux.mh
+++ b/gdb/config/sparc/linux.mh
@@ -1,10 +1,10 @@
 # Host: GNU/Linux SPARC
 NAT_FILE= config/nm-linux.h
 NATDEPFILES= sparc-nat.o sparc-linux-nat.o \
-	corelow.o core-regset.o fork-child.o inf-ptrace.o \
+	core-regset.o fork-child.o inf-ptrace.o \
 	proc-service.o linux-thread-db.o \
 	linux-nat.o linux-osdata.o linux-fork.o \
-	linux-procfs.o
+	linux-procfs.o linux-ptrace.o
 NAT_CDEPS = $(srcdir)/proc-service.list
 
 # The dynamically loaded libthread_db needs access to symbols in the
diff --git a/gdb/config/sparc/linux64.mh b/gdb/config/sparc/linux64.mh
index 30eef2b..d1e1a97 100644
--- a/gdb/config/sparc/linux64.mh
+++ b/gdb/config/sparc/linux64.mh
@@ -1,11 +1,11 @@
 # Host: GNU/Linux UltraSPARC
 NAT_FILE= config/nm-linux.h
 NATDEPFILES= sparc-nat.o sparc64-nat.o sparc64-linux-nat.o \
-	corelow.o core-regset.o \
+	core-regset.o \
 	fork-child.o inf-ptrace.o \
 	proc-service.o linux-thread-db.o \
 	linux-nat.o linux-osdata.o linux-fork.o \
-	linux-procfs.o
+	linux-procfs.o linux-ptrace.o
 NAT_CDEPS = $(srcdir)/proc-service.list
 
 # The dynamically loaded libthread_db needs access to symbols in the
diff --git a/gdb/config/sparc/sol2.mh b/gdb/config/sparc/sol2.mh
index f9efd31..9f91583 100644
--- a/gdb/config/sparc/sol2.mh
+++ b/gdb/config/sparc/sol2.mh
@@ -1,5 +1,5 @@
 # Host: Solaris SPARC & UltraSPARC
 NAT_FILE= nm-sol2.h
 NATDEPFILES= sparc-sol2-nat.o \
-	corelow.o core-regset.o fork-child.o \
+	core-regset.o fork-child.o \
 	procfs.o proc-api.o proc-events.o proc-flags.o proc-why.o
diff --git a/gdb/config/tilegx/linux.mh b/gdb/config/tilegx/linux.mh
new file mode 100644
index 0000000..56ef694
--- /dev/null
+++ b/gdb/config/tilegx/linux.mh
@@ -0,0 +1,12 @@
+# Host: Tilera TILE-Gx running GNU/Linux.
+
+NAT_FILE= config/nm-linux.h
+NATDEPFILES= inf-ptrace.o fork-child.o \
+	tilegx-linux-nat.o \
+	proc-service.o linux-thread-db.o \
+	linux-nat.o linux-osdata.o linux-fork.o \
+	linux-procfs.o linux-ptrace.o
+
+# The dynamically loaded libthread_db needs access to symbols in the
+# gdb executable.
+LOADLIBES = -ldl $(RDYNAMIC)
diff --git a/gdb/config/vax/nbsdaout.mh b/gdb/config/vax/nbsdaout.mh
index d2e0930..fe83e20 100644
--- a/gdb/config/vax/nbsdaout.mh
+++ b/gdb/config/vax/nbsdaout.mh
@@ -1,6 +1,6 @@
 # Host: NetBSD/vax a.out
 NATDEPFILES= fork-child.o inf-ptrace.o \
 	vaxbsd-nat.o bsd-kvm.o \
-	solib.o solib-sunos.o
+	solib-sunos.o
 
 LOADLIBES= -lkvm
diff --git a/gdb/config/vax/vax.mh b/gdb/config/vax/vax.mh
index 69c548d..d8d7f6f 100644
--- a/gdb/config/vax/vax.mh
+++ b/gdb/config/vax/vax.mh
@@ -1,2 +1,2 @@
 # Host: VAX running 4.2BSD or Ultrix
-NATDEPFILES= vax-nat.o fork-child.o inf-ptrace.o corelow.o
+NATDEPFILES= vax-nat.o fork-child.o inf-ptrace.o
diff --git a/gdb/config/xtensa/linux.mh b/gdb/config/xtensa/linux.mh
index c637ec7..deffe25 100644
--- a/gdb/config/xtensa/linux.mh
+++ b/gdb/config/xtensa/linux.mh
@@ -4,7 +4,7 @@ NAT_FILE= config/nm-linux.h
 
 NATDEPFILES= inf-ptrace.o fork-child.o xtensa-linux-nat.o \
 	linux-thread-db.o proc-service.o \
-	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o
+	linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o linux-ptrace.o
 NAT_CDEPS = $(srcdir)/proc-service.list
 
 LOADLIBES = -ldl $(RDYNAMIC)
diff --git a/gdb/configure b/gdb/configure
index 7d11e98..b3d3e2d 100755
--- a/gdb/configure
+++ b/gdb/configure
@@ -588,16 +588,8 @@ ac_includes_default="\
 # include <unistd.h>
 #endif"
 
-gl_header_list=
-gl_func_list=
 enable_option_checking=no
-ac_subst_vars='am__EXEEXT_FALSE
-am__EXEEXT_TRUE
-gltests_LTLIBOBJS
-gltests_LIBOBJS
-gl_LTLIBOBJS
-gl_LIBOBJS
-LTLIBOBJS
+ac_subst_vars='LTLIBOBJS
 LIBOBJS
 GDB_NM_FILE
 frags
@@ -654,7 +646,6 @@ SER_HARDWIRE
 WERROR_CFLAGS
 WARN_CFLAGS
 SYSTEM_GDBINIT
-TARGET_SYSTEM_ROOT_DEFINE
 TARGET_SYSTEM_ROOT
 CONFIG_LDFLAGS
 RDYNAMIC
@@ -678,7 +669,12 @@ DLLTOOL
 AR
 YFLAGS
 YACC
+RANLIB
 LN_S
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+AWK
 REPORT_BUGS_TEXI
 REPORT_BUGS_TO
 PKGVERSION
@@ -686,179 +682,11 @@ TARGET_OBS
 subdirs
 GDB_DATADIR
 DEBUGDIR
-am__fastdepCC_FALSE
-am__fastdepCC_TRUE
-AMDEPBACKSLASH
-AMDEP_FALSE
-AMDEP_TRUE
-am__quote
-am__include
-am__untar
-am__tar
-AMTAR
-AWK
-mkdir_p
-MKDIR_P
-INSTALL_STRIP_PROGRAM
-STRIP
-install_sh
-AUTOHEADER
-AUTOMAKE
-AUTOCONF
-ACLOCAL
-VERSION
-CYGPATH_W
-am__isrc
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
 MAKEINFO_EXTRA_FLAGS
 MAKEINFOFLAGS
 MAKEINFO
 PACKAGE
 GNULIB_STDINT_H
-LIBGNU_LTLIBDEPS
-LIBGNU_LIBDEPS
-gltests_WITNESS
-HAVE_WINT_T
-HAVE_WCHAR_H
-NEXT_AS_FIRST_DIRECTIVE_WCHAR_H
-NEXT_WCHAR_H
-REPLACE_WCWIDTH
-REPLACE_WCSNRTOMBS
-REPLACE_WCSRTOMBS
-REPLACE_WCRTOMB
-REPLACE_MBSNRTOWCS
-REPLACE_MBSRTOWCS
-REPLACE_MBRLEN
-REPLACE_MBRTOWC
-REPLACE_MBSINIT
-REPLACE_WCTOB
-REPLACE_BTOWC
-REPLACE_MBSTATE_T
-HAVE_DECL_WCWIDTH
-HAVE_DECL_WCTOB
-HAVE_WCSNRTOMBS
-HAVE_WCSRTOMBS
-HAVE_WCRTOMB
-HAVE_MBSNRTOWCS
-HAVE_MBSRTOWCS
-HAVE_MBRLEN
-HAVE_MBRTOWC
-HAVE_MBSINIT
-HAVE_BTOWC
-GNULIB_WCWIDTH
-GNULIB_WCSNRTOMBS
-GNULIB_WCSRTOMBS
-GNULIB_WCRTOMB
-GNULIB_MBSNRTOWCS
-GNULIB_MBSRTOWCS
-GNULIB_MBRLEN
-GNULIB_MBRTOWC
-GNULIB_MBSINIT
-GNULIB_WCTOB
-GNULIB_BTOWC
-NEXT_AS_FIRST_DIRECTIVE_STRING_H
-NEXT_STRING_H
-STDINT_H
-WINT_T_SUFFIX
-WCHAR_T_SUFFIX
-SIG_ATOMIC_T_SUFFIX
-SIZE_T_SUFFIX
-PTRDIFF_T_SUFFIX
-HAVE_SIGNED_WINT_T
-HAVE_SIGNED_WCHAR_T
-HAVE_SIGNED_SIG_ATOMIC_T
-BITSIZEOF_WINT_T
-BITSIZEOF_WCHAR_T
-BITSIZEOF_SIG_ATOMIC_T
-BITSIZEOF_SIZE_T
-BITSIZEOF_PTRDIFF_T
-HAVE_SYS_BITYPES_H
-HAVE_SYS_INTTYPES_H
-HAVE_STDINT_H
-NEXT_AS_FIRST_DIRECTIVE_STDINT_H
-NEXT_STDINT_H
-HAVE_SYS_TYPES_H
-HAVE_INTTYPES_H
-HAVE_UNSIGNED_LONG_LONG_INT
-HAVE_LONG_LONG_INT
-NEXT_AS_FIRST_DIRECTIVE_STDDEF_H
-NEXT_STDDEF_H
-PRAGMA_SYSTEM_HEADER
-INCLUDE_NEXT_AS_FIRST_DIRECTIVE
-INCLUDE_NEXT
-STDDEF_H
-HAVE_WCHAR_T
-REPLACE_NULL
-APPLE_UNIVERSAL_BUILD
-UNDEFINE_STRTOK_R
-REPLACE_STRTOK_R
-REPLACE_STRSIGNAL
-REPLACE_STRNLEN
-REPLACE_STRNDUP
-REPLACE_STRNCAT
-REPLACE_STRERROR
-REPLACE_STRCASESTR
-REPLACE_STRSTR
-REPLACE_STRDUP
-REPLACE_STPNCPY
-REPLACE_MEMMEM
-REPLACE_MEMCHR
-HAVE_STRVERSCMP
-HAVE_DECL_STRSIGNAL
-HAVE_DECL_STRTOK_R
-HAVE_STRCASESTR
-HAVE_STRSEP
-HAVE_STRPBRK
-HAVE_DECL_STRNLEN
-HAVE_DECL_STRNDUP
-HAVE_DECL_STRDUP
-HAVE_STRCHRNUL
-HAVE_STPNCPY
-HAVE_STPCPY
-HAVE_RAWMEMCHR
-HAVE_DECL_MEMRCHR
-HAVE_MEMPCPY
-HAVE_DECL_MEMMEM
-HAVE_MEMCHR
-HAVE_MBSLEN
-GNULIB_STRVERSCMP
-GNULIB_STRSIGNAL
-GNULIB_STRERROR
-GNULIB_MBSTOK_R
-GNULIB_MBSSEP
-GNULIB_MBSSPN
-GNULIB_MBSPBRK
-GNULIB_MBSCSPN
-GNULIB_MBSCASESTR
-GNULIB_MBSPCASECMP
-GNULIB_MBSNCASECMP
-GNULIB_MBSCASECMP
-GNULIB_MBSSTR
-GNULIB_MBSRCHR
-GNULIB_MBSCHR
-GNULIB_MBSNLEN
-GNULIB_MBSLEN
-GNULIB_STRTOK_R
-GNULIB_STRCASESTR
-GNULIB_STRSTR
-GNULIB_STRSEP
-GNULIB_STRPBRK
-GNULIB_STRNLEN
-GNULIB_STRNDUP
-GNULIB_STRNCAT
-GNULIB_STRDUP
-GNULIB_STRCHRNUL
-GNULIB_STPNCPY
-GNULIB_STPCPY
-GNULIB_RAWMEMCHR
-GNULIB_MEMRCHR
-GNULIB_MEMPCPY
-GNULIB_MEMMEM
-GNULIB_MEMCHR
-GL_COND_LIBTOOL_FALSE
-GL_COND_LIBTOOL_TRUE
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -882,10 +710,6 @@ target_os
 target_vendor
 target_cpu
 target
-RANLIB
-EGREP
-GREP
-CPP
 host_os
 host_vendor
 host_cpu
@@ -894,6 +718,9 @@ build_os
 build_vendor
 build_cpu
 build
+EGREP
+GREP
+CPP
 OBJEXT
 EXEEXT
 ac_ct_CC
@@ -948,17 +775,18 @@ enable_option_checking
 enable_maintainer_mode
 enable_plugins
 enable_largefile
-enable_dependency_tracking
 with_separate_debug_dir
 with_gdb_datadir
 with_relocated_sources
+with_auto_load_dir
+with_auto_load_safe_path
 enable_targets
 enable_64_bit_bfd
 enable_gdbcli
 enable_gdbmi
 enable_tui
 enable_gdbtk
-with_libunwind
+with_libunwind_ia64
 with_curses
 enable_profiling
 with_pkgversion
@@ -1629,8 +1457,6 @@ Optional Features:
 			  (and sometimes confusing) to the casual installer
   --enable-plugins        Enable support for plugins (defaults no)
   --disable-largefile     omit support for large files
-  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors
   --enable-targets=TARGETS
                           alternative target configurations
   --enable-64-bit-bfd     64-bit support (on hosts with narrower word sizes)
@@ -1660,7 +1486,15 @@ Optional Packages:
                           [DATADIR/gdb]
   --with-relocated-sources=PATH
                           automatically relocate this path for source files
-  --with-libunwind        use libunwind frame unwinding support
+  --with-auto-load-dir=PATH
+                          directories from which to load auto-loaded scripts
+                          [$debugdir:$datadir/auto-load]
+  --with-auto-load-safe-path=PATH
+                          directories safe to hold auto-loaded files
+                          [--with-auto-load-dir]
+  --without-auto-load-safe-path
+                          do not restrict auto-loaded files locations
+  --with-libunwind-ia64   use libunwind frame unwinding for ia64 targets
   --with-curses           use the curses library instead of the termcap
                           library
   --with-pkgversion=PKG   Use PKG in the version string in place of "GDB"
@@ -2023,164 +1857,6 @@ $as_echo "$ac_res" >&6; }
 
 } # ac_fn_c_check_header_compile
 
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext conftest$ac_exeext
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
-  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
-  # interfere with the next link command; also delete a directory that is
-  # left behind by Apple's compiler.  We do this before executing the actions.
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
-
-} # ac_fn_c_try_link
-
-# ac_fn_c_check_func LINENO FUNC VAR
-# ----------------------------------
-# Tests whether FUNC exists, setting the cache variable VAR accordingly
-ac_fn_c_check_func ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $2 innocuous_$2
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $2 (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $2
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $2 ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$2 || defined __stub___$2
-choke me
-#endif
-
-int
-main ()
-{
-return $2 ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-
-} # ac_fn_c_check_func
-
-# ac_fn_c_check_decl LINENO SYMBOL VAR
-# ------------------------------------
-# Tests whether SYMBOL is declared, setting cache variable VAR accordingly.
-ac_fn_c_check_decl ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  as_decl_name=`echo $2|sed 's/ *(.*//'`
-  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
-$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-#ifndef $as_decl_name
-#ifdef __cplusplus
-  (void) $as_decl_use;
-#else
-  (void) $as_decl_name;
-#endif
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-
-} # ac_fn_c_check_decl
-
 # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
 # --------------------------------------------
 # Tries to find the compile-time value of EXPR in a program that includes
@@ -2359,43 +2035,201 @@ rm -f conftest.val
 
 } # ac_fn_c_compute_int
 
-# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
-# ----------------------------------------------------
-# Tries to find if the field MEMBER exists in type AGGR, after including
-# INCLUDES, setting cache variable VAR accordingly.
-ac_fn_c_check_member ()
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
-$as_echo_n "checking for $2.$3... " >&6; }
-if { as_var=$4; eval "test \"\${$as_var+set}\" = set"; }; then :
-  $as_echo_n "(cached) " >&6
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 $as_test_x conftest$ac_exeext
+       }; then :
+  ac_retval=0
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$5
-int
-main ()
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  return $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
 {
-static $2 ac_aggr;
-if (ac_aggr.$3)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$4=yes"
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-$5
-int
-main ()
-{
-static $2 ac_aggr;
-if (sizeof ac_aggr.$3)
-return 0;
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_check_decl LINENO SYMBOL VAR
+# ------------------------------------
+# Tests whether SYMBOL is declared, setting cache variable VAR accordingly.
+ac_fn_c_check_decl ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  as_decl_name=`echo $2|sed 's/ *(.*//'`
+  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+  (void) $as_decl_use;
+#else
+  (void) $as_decl_name;
+#endif
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_decl
+
+# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
+# ----------------------------------------------------
+# Tries to find if the field MEMBER exists in type AGGR, after including
+# INCLUDES, setting cache variable VAR accordingly.
+ac_fn_c_check_member ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
+$as_echo_n "checking for $2.$3... " >&6; }
+if { as_var=$4; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (ac_aggr.$3)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$4=yes"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (sizeof ac_aggr.$3)
+return 0;
   ;
   return 0;
 }
@@ -2752,13 +2586,6 @@ $as_echo "$as_me: creating cache $cache_file" >&6;}
   >$cache_file
 fi
 
-gl_header_list="$gl_header_list sys/mman.h"
-gl_func_list="$gl_func_list mprotect"
-gl_func_list="$gl_func_list memchr"
-gl_header_list="$gl_header_list stddef.h"
-gl_header_list="$gl_header_list stdint.h"
-gl_header_list="$gl_header_list wchar.h"
-gl_header_list="$gl_header_list string.h"
 # Check that the precious variables saved in the cache have kept the same
 # value.
 ac_cache_corrupted=false
@@ -2856,6 +2683,11 @@ fi
 
 
 
+# Provide more thorough testing by -lmcheck.
+# Set it to 'true' for development snapshots, 'false' for releases or
+# pre-releases.
+development=false
+
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -3621,100 +3453,6 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-ac_aux_dir=
-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
-  for ac_t in install-sh install.sh shtool; do
-    if test -f "$ac_dir/$ac_t"; then
-      ac_aux_dir=$ac_dir
-      ac_install_sh="$ac_aux_dir/$ac_t -c"
-      break 2
-    fi
-  done
-done
-if test -z "$ac_aux_dir"; then
-  as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
-
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
-  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
-  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "x$host_alias" = x; then
-  ac_cv_host=$ac_cv_build
-else
-  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -4115,8 +3853,6 @@ done
 
 
 
-
-
   ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
 if test "x$ac_cv_header_minix_config_h" = x""yes; then :
   MINIX=yes
@@ -4137,14 +3873,6 @@ $as_echo "#define _MINIX 1" >>confdefs.h
 
   fi
 
-        case "$host_os" in
-    hpux*)
-
-$as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h
-
-      ;;
-  esac
-
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
@@ -4154,8 +3882,8 @@ else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-#         define __EXTENSIONS__ 1
-          $ac_includes_default
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
 int
 main ()
 {
@@ -4185,120 +3913,99 @@ $as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
   $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
 
 
-if test -n "$ac_tool_prefix"; then
-  # 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$RANLIB"; then
-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+  for ac_t in install-sh install.sh shtool; do
+    if test -f "$ac_dir/$ac_t"; then
+      ac_aux_dir=$ac_dir
+      ac_install_sh="$ac_aux_dir/$ac_t -c"
+      break 2
+    fi
   done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+done
+if test -z "$ac_aux_dir"; then
+  as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
 fi
 
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
 
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
-  ac_ct_RANLIB=$RANLIB
-  # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_RANLIB"; then
-  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_RANLIB="ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
 
 fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_RANLIB" = x; then
-    RANLIB=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
 esac
-    RANLIB=$ac_ct_RANLIB
-  fi
-else
-  RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-
-
-
-
-
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
 
-  # Code from module arg-nonnull:
-  # Code from module c++defs:
-  # Code from module extensions:
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
 
-  # Code from module include_next:
-  # Code from module memchr:
-  # Code from module memmem:
-  # Code from module memmem-simple:
-  # Code from module multiarch:
-  # Code from module stddef:
-  # Code from module stdint:
-  # Code from module string:
-  # Code from module warn-on-use:
-  # Code from module wchar:
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
 $as_echo_n "checking target system type... " >&6; }
@@ -4681,6 +4388,16 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 
 
 
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
 
 # Dependency checking.
 rm -rf .tst 2>/dev/null
@@ -4883,6 +4600,107 @@ $as_echo "no" >&6; }
 fi
 
 
+# Configure gnulib.  We need to build gnulib under some other
+# directory not "gnulib", to avoid the problem of both GDB and
+# GDBserver wanting to build it in the same directory, when building
+# in the source dir.
+
+  in_src="gnulib"
+  in_build="build-gnulib"
+
+  # Remove --cache-file, --srcdir, and --disable-option-checking arguments
+  # so they do not pile up.
+  ac_sub_configure_args=
+  ac_prev=
+  eval "set x $ac_configure_args"
+  shift
+  for ac_arg
+  do
+    if test -n "$ac_prev"; then
+      ac_prev=
+      continue
+    fi
+    case $ac_arg in
+    -cache-file | --cache-file | --cache-fil | --cache-fi \
+    | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+      ac_prev=cache_file ;;
+    -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+    | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \
+    | --c=*)
+      ;;
+    --config-cache | -C)
+      ;;
+    -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+      ac_prev=srcdir ;;
+    -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+      ;;
+    -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+      ac_prev=prefix ;;
+    -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+      ;;
+    --disable-option-checking)
+      ;;
+    *)
+      case $ac_arg in
+      *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+      esac
+      as_fn_append ac_sub_configure_args " '$ac_arg'" ;;
+    esac
+  done
+
+  # Always prepend --prefix to ensure using the same prefix
+  # in subdir configurations.
+  ac_arg="--prefix=$prefix"
+  case $ac_arg in
+  *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+  esac
+  ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args"
+
+  # Pass --silent
+  if test "$silent" = yes; then
+    ac_sub_configure_args="--silent $ac_sub_configure_args"
+  fi
+
+  # Always prepend --disable-option-checking to silence warnings, since
+  # different subdirs can have different --enable and --with options.
+  ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args"
+
+  ac_popdir=`pwd`
+  ac_dir=$in_build
+
+  ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)"
+  $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5
+  $as_echo "$ac_msg" >&6
+  as_dir="$ac_dir"; as_fn_mkdir_p
+
+  case $srcdir in
+  [\\/]* | ?:[\\/]* )
+    ac_srcdir=$srcdir/$in_src ;;
+  *) # Relative name.
+    ac_srcdir=../$srcdir/$in_src ;;
+  esac
+
+  cd "$ac_dir"
+
+  ac_sub_configure=$ac_srcdir/configure
+
+  # Make the cache file name correct relative to the subdirectory.
+  case $cache_file in
+  [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;;
+  *) # Relative name.
+    ac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
+  esac
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5
+$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
+  # The eval makes quoting arguments work.
+  eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \
+       --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" ||
+    as_fn_error "$ac_sub_configure failed for $ac_dir" "$LINENO" 5
+
+  cd "$ac_popdir"
+
+
 
 CONFIG_OBS=
 CONFIG_DEPS=
@@ -4975,2841 +4793,50 @@ if test x"$USE_NLS" = xyes; then
    CONFIG_UNINSTALL="$CONFIG_UNINSTALL uninstall-po"
 fi
 
+GNULIB=build-gnulib/import
 
+# For Makefile dependencies.
+GNULIB_STDINT_H=
+if test x"$STDINT_H" != x; then
+  GNULIB_STDINT_H=$GNULIB/$STDINT_H
+fi
 
 
+PACKAGE=gdb
 
-          LIBC_FATAL_STDERR_=1
-  export LIBC_FATAL_STDERR_
-
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
 
 
 
+# We never need to detect it in this sub-configure.
+# But preserve it for config.status --recheck.
 
-  for ac_header in $gl_header_list
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
 
-fi
 
-done
-
-
-
-
-
-
-
-
-
-  for ac_func in $gl_func_list
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-
-
-
-
-  GNULIB_MEMCHR=0;
-  GNULIB_MEMMEM=0;
-  GNULIB_MEMPCPY=0;
-  GNULIB_MEMRCHR=0;
-  GNULIB_RAWMEMCHR=0;
-  GNULIB_STPCPY=0;
-  GNULIB_STPNCPY=0;
-  GNULIB_STRCHRNUL=0;
-  GNULIB_STRDUP=0;
-  GNULIB_STRNCAT=0;
-  GNULIB_STRNDUP=0;
-  GNULIB_STRNLEN=0;
-  GNULIB_STRPBRK=0;
-  GNULIB_STRSEP=0;
-  GNULIB_STRSTR=0;
-  GNULIB_STRCASESTR=0;
-  GNULIB_STRTOK_R=0;
-  GNULIB_MBSLEN=0;
-  GNULIB_MBSNLEN=0;
-  GNULIB_MBSCHR=0;
-  GNULIB_MBSRCHR=0;
-  GNULIB_MBSSTR=0;
-  GNULIB_MBSCASECMP=0;
-  GNULIB_MBSNCASECMP=0;
-  GNULIB_MBSPCASECMP=0;
-  GNULIB_MBSCASESTR=0;
-  GNULIB_MBSCSPN=0;
-  GNULIB_MBSPBRK=0;
-  GNULIB_MBSSPN=0;
-  GNULIB_MBSSEP=0;
-  GNULIB_MBSTOK_R=0;
-  GNULIB_STRERROR=0;
-  GNULIB_STRSIGNAL=0;
-  GNULIB_STRVERSCMP=0;
-  HAVE_MBSLEN=0;
-    HAVE_MEMCHR=1;
-  HAVE_DECL_MEMMEM=1;
-  HAVE_MEMPCPY=1;
-  HAVE_DECL_MEMRCHR=1;
-  HAVE_RAWMEMCHR=1;
-  HAVE_STPCPY=1;
-  HAVE_STPNCPY=1;
-  HAVE_STRCHRNUL=1;
-  HAVE_DECL_STRDUP=1;
-  HAVE_DECL_STRNDUP=1;
-  HAVE_DECL_STRNLEN=1;
-  HAVE_STRPBRK=1;
-  HAVE_STRSEP=1;
-  HAVE_STRCASESTR=1;
-  HAVE_DECL_STRTOK_R=1;
-  HAVE_DECL_STRSIGNAL=1;
-  HAVE_STRVERSCMP=1;
-  REPLACE_MEMCHR=0;
-  REPLACE_MEMMEM=0;
-  REPLACE_STPNCPY=0;
-  REPLACE_STRDUP=0;
-  REPLACE_STRSTR=0;
-  REPLACE_STRCASESTR=0;
-  REPLACE_STRERROR=0;
-  REPLACE_STRNCAT=0;
-  REPLACE_STRNDUP=0;
-  REPLACE_STRNLEN=0;
-  REPLACE_STRSIGNAL=0;
-  REPLACE_STRTOK_R=0;
-  UNDEFINE_STRTOK_R=0;
-
-
-
-
-
-
-
-
-
-
-
-
-
-  # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it
-  # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is
-  # irrelevant for anonymous mappings.
-  ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap"
-if test "x$ac_cv_func_mmap" = x""yes; then :
-  gl_have_mmap=yes
-else
-  gl_have_mmap=no
-fi
-
-
-  # Try to allow MAP_ANONYMOUS.
-  gl_have_mmap_anonymous=no
-  if test $gl_have_mmap = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MAP_ANONYMOUS" >&5
-$as_echo_n "checking for MAP_ANONYMOUS... " >&6; }
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <sys/mman.h>
-#ifdef MAP_ANONYMOUS
-    I cant identify this map.
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "I cant identify this map." >/dev/null 2>&1; then :
-  gl_have_mmap_anonymous=yes
-fi
-rm -f conftest*
-
-    if test $gl_have_mmap_anonymous != yes; then
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <sys/mman.h>
-#ifdef MAP_ANON
-    I cant identify this map.
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "I cant identify this map." >/dev/null 2>&1; then :
-
-$as_echo "#define MAP_ANONYMOUS MAP_ANON" >>confdefs.h
-
-         gl_have_mmap_anonymous=yes
-fi
-rm -f conftest*
-
-    fi
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_have_mmap_anonymous" >&5
-$as_echo "$gl_have_mmap_anonymous" >&6; }
-    if test $gl_have_mmap_anonymous = yes; then
-
-$as_echo "#define HAVE_MAP_ANONYMOUS 1" >>confdefs.h
-
-    fi
-  fi
-
-
-  :
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-  if test $ac_cv_func_memchr = yes; then
-    # Detect platform-specific bugs in some versions of glibc:
-    # memchr should not dereference anything with length 0
-    #   http://bugzilla.redhat.com/499689
-    # memchr should not dereference overestimated length after a match
-    #   http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737
-    #   http://sourceware.org/bugzilla/show_bug.cgi?id=10162
-    # Assume that memchr works on platforms that lack mprotect.
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memchr works" >&5
-$as_echo_n "checking whether memchr works... " >&6; }
-if test "${gl_cv_func_memchr_works+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-         gl_cv_func_memchr_works="guessing no"
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <string.h>
-#if HAVE_SYS_MMAN_H
-# include <fcntl.h>
-# include <unistd.h>
-# include <sys/types.h>
-# include <sys/mman.h>
-# ifndef MAP_FILE
-#  define MAP_FILE 0
-# endif
-#endif
-
-int
-main ()
-{
-
-  char *fence = NULL;
-#if HAVE_SYS_MMAN_H && HAVE_MPROTECT
-# if HAVE_MAP_ANONYMOUS
-  const int flags = MAP_ANONYMOUS | MAP_PRIVATE;
-  const int fd = -1;
-# else /* !HAVE_MAP_ANONYMOUS */
-  const int flags = MAP_FILE | MAP_PRIVATE;
-  int fd = open ("/dev/zero", O_RDONLY, 0666);
-  if (fd >= 0)
-# endif
-    {
-      int pagesize = getpagesize ();
-      char *two_pages =
-        (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE,
-                       flags, fd, 0);
-      if (two_pages != (char *)(-1)
-          && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0)
-        fence = two_pages + pagesize;
-    }
-#endif
-  if (fence)
-    {
-      if (memchr (fence, 0, 0))
-        return 1;
-      strcpy (fence - 9, "12345678");
-      if (memchr (fence - 9, 0, 79) != fence - 1)
-        return 2;
-    }
-  return 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  gl_cv_func_memchr_works=yes
-else
-  gl_cv_func_memchr_works=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_memchr_works" >&5
-$as_echo "$gl_cv_func_memchr_works" >&6; }
-    if test "$gl_cv_func_memchr_works" != yes; then
-      REPLACE_MEMCHR=1
-    fi
-  else
-    HAVE_MEMCHR=0
-  fi
-  if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then
-
-
-
-
-
-
-
-
-  gl_LIBOBJS="$gl_LIBOBJS memchr.$ac_objext"
-
-
-  for ac_header in bp-sym.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "bp-sym.h" "ac_cv_header_bp_sym_h" "$ac_includes_default"
-if test "x$ac_cv_header_bp_sym_h" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_BP_SYM_H 1
-_ACEOF
-
-fi
-
-done
-
-
-  fi
-
-
-      ac_fn_c_check_decl "$LINENO" "memmem" "ac_cv_have_decl_memmem" "$ac_includes_default"
-if test "x$ac_cv_have_decl_memmem" = x""yes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_MEMMEM $ac_have_decl
-_ACEOF
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-  for ac_func in memmem
-do :
-  ac_fn_c_check_func "$LINENO" "memmem" "ac_cv_func_memmem"
-if test "x$ac_cv_func_memmem" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_MEMMEM 1
-_ACEOF
-
-else
-
-    gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext"
-
-fi
-done
-
-
-
-  :
-
-
-
-
-
-  if test $ac_cv_have_decl_memmem = no; then
-    HAVE_DECL_MEMMEM=0
-  fi
-  :
-
-
-    gl_cv_c_multiarch=no
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifndef __APPLE_CC__
-         not a universal capable compiler
-        #endif
-        typedef int dummy;
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-               arch=
-     prev=
-     for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do
-       if test -n "$prev"; then
-         case $word in
-           i?86 | x86_64 | ppc | ppc64)
-             if test -z "$arch" || test "$arch" = "$word"; then
-               arch="$word"
-             else
-               gl_cv_c_multiarch=yes
-             fi
-             ;;
-         esac
-         prev=
-       else
-         if test "x$word" = "x-arch"; then
-           prev=arch
-         fi
-       fi
-     done
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  if test $gl_cv_c_multiarch = yes; then
-
-$as_echo "#define AA_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
-
-    APPLE_UNIVERSAL_BUILD=1
-  else
-    APPLE_UNIVERSAL_BUILD=0
-  fi
-
-
-
-    REPLACE_NULL=0;
-  HAVE_WCHAR_T=1;
-  STDDEF_H='';
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5
-$as_echo_n "checking for wchar_t... " >&6; }
-if test "${gt_cv_c_wchar_t+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stddef.h>
-       wchar_t foo = (wchar_t)'\0';
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gt_cv_c_wchar_t=yes
-else
-  gt_cv_c_wchar_t=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5
-$as_echo "$gt_cv_c_wchar_t" >&6; }
-  if test $gt_cv_c_wchar_t = yes; then
-
-$as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h
-
-  fi
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the preprocessor supports include_next" >&5
-$as_echo_n "checking whether the preprocessor supports include_next... " >&6; }
-if test "${gl_cv_have_include_next+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  rm -rf conftestd1a conftestd1b conftestd2
-     mkdir conftestd1a conftestd1b conftestd2
-                                                  cat <<EOF > conftestd1a/conftest.h
-#define DEFINED_IN_CONFTESTD1
-#include_next <conftest.h>
-#ifdef DEFINED_IN_CONFTESTD2
-int foo;
-#else
-#error "include_next doesn't work"
-#endif
-EOF
-     cat <<EOF > conftestd1b/conftest.h
-#define DEFINED_IN_CONFTESTD1
-#include <stdio.h>
-#include_next <conftest.h>
-#ifdef DEFINED_IN_CONFTESTD2
-int foo;
-#else
-#error "include_next doesn't work"
-#endif
-EOF
-     cat <<EOF > conftestd2/conftest.h
-#ifndef DEFINED_IN_CONFTESTD1
-#error "include_next test doesn't work"
-#endif
-#define DEFINED_IN_CONFTESTD2
-EOF
-     gl_save_CPPFLAGS="$CPPFLAGS"
-     CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2"
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <conftest.h>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_have_include_next=yes
-else
-  CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2"
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <conftest.h>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_have_include_next=buggy
-else
-  gl_cv_have_include_next=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-     CPPFLAGS="$gl_save_CPPFLAGS"
-     rm -rf conftestd1a conftestd1b conftestd2
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_include_next" >&5
-$as_echo "$gl_cv_have_include_next" >&6; }
-  PRAGMA_SYSTEM_HEADER=
-  if test $gl_cv_have_include_next = yes; then
-    INCLUDE_NEXT=include_next
-    INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
-    if test -n "$GCC"; then
-      PRAGMA_SYSTEM_HEADER='#pragma GCC system_header'
-    fi
-  else
-    if test $gl_cv_have_include_next = buggy; then
-      INCLUDE_NEXT=include
-      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
-    else
-      INCLUDE_NEXT=include
-      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include
-    fi
-  fi
-
-
-
-
-
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5
-$as_echo_n "checking for long long int... " >&6; }
-if test "${ac_cv_type_long_long_int+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-  /* For now, do not test the preprocessor; as of 2007 there are too many
-         implementations with broken preprocessors.  Perhaps this can
-         be revisited in 2012.  In the meantime, code should not expect
-         #if to work with literals wider than 32 bits.  */
-      /* Test literals.  */
-      long long int ll = 9223372036854775807ll;
-      long long int nll = -9223372036854775807LL;
-      unsigned long long int ull = 18446744073709551615ULL;
-      /* Test constant expressions.   */
-      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
-                     ? 1 : -1)];
-      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
-                     ? 1 : -1)];
-      int i = 63;
-int
-main ()
-{
-/* Test availability of runtime routines for shift and division.  */
-      long long int llmax = 9223372036854775807ll;
-      unsigned long long int ullmax = 18446744073709551615ull;
-      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
-              | (llmax / ll) | (llmax % ll)
-              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
-              | (ullmax / ull) | (ullmax % ull));
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-                          if test "$cross_compiling" = yes; then :
-  ac_cv_type_long_long_int=yes
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <limits.h>
-               #ifndef LLONG_MAX
-               # define HALF \
-                        (1LL << (sizeof (long long int) * CHAR_BIT - 2))
-               # define LLONG_MAX (HALF - 1 + HALF)
-               #endif
-int
-main ()
-{
-long long int n = 1;
-               int i;
-               for (i = 0; ; i++)
-                 {
-                   long long int m = n << i;
-                   if (m >> i != n)
-                     return 1;
-                   if (LLONG_MAX / 2 < m)
-                     break;
-                 }
-               return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_type_long_long_int=yes
-else
-  ac_cv_type_long_long_int=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-else
-  ac_cv_type_long_long_int=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5
-$as_echo "$ac_cv_type_long_long_int" >&6; }
-  if test $ac_cv_type_long_long_int = yes; then
-
-$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
-
-  fi
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5
-$as_echo_n "checking for unsigned long long int... " >&6; }
-if test "${ac_cv_type_unsigned_long_long_int+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-  /* For now, do not test the preprocessor; as of 2007 there are too many
-         implementations with broken preprocessors.  Perhaps this can
-         be revisited in 2012.  In the meantime, code should not expect
-         #if to work with literals wider than 32 bits.  */
-      /* Test literals.  */
-      long long int ll = 9223372036854775807ll;
-      long long int nll = -9223372036854775807LL;
-      unsigned long long int ull = 18446744073709551615ULL;
-      /* Test constant expressions.   */
-      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
-                     ? 1 : -1)];
-      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
-                     ? 1 : -1)];
-      int i = 63;
-int
-main ()
-{
-/* Test availability of runtime routines for shift and division.  */
-      long long int llmax = 9223372036854775807ll;
-      unsigned long long int ullmax = 18446744073709551615ull;
-      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
-              | (llmax / ll) | (llmax % ll)
-              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
-              | (ullmax / ull) | (ullmax % ull));
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_type_unsigned_long_long_int=yes
-else
-  ac_cv_type_unsigned_long_long_int=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5
-$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; }
-  if test $ac_cv_type_unsigned_long_long_int = yes; then
-
-$as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
-
-  fi
-
-
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
-$as_echo_n "checking for C/C++ restrict keyword... " >&6; }
-if test "${ac_cv_c_restrict+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_c_restrict=no
-   # The order here caters to the fact that C++ does not require restrict.
-   for ac_kw in __restrict __restrict__ _Restrict restrict; do
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-typedef int * int_ptr;
-	int foo (int_ptr $ac_kw ip) {
-	return ip[0];
-       }
-int
-main ()
-{
-int s[1];
-	int * $ac_kw t = s;
-	t[0] = 0;
-	return foo(t)
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_c_restrict=$ac_kw
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-     test "$ac_cv_c_restrict" != no && break
-   done
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5
-$as_echo "$ac_cv_c_restrict" >&6; }
-
- case $ac_cv_c_restrict in
-   restrict) ;;
-   no) $as_echo "#define restrict /**/" >>confdefs.h
- ;;
-   *)  cat >>confdefs.h <<_ACEOF
-#define restrict $ac_cv_c_restrict
-_ACEOF
- ;;
- esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-
-     if test $gl_cv_have_include_next = yes; then
-       gl_cv_next_string_h='<'string.h'>'
-     else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <string.h>" >&5
-$as_echo_n "checking absolute name of <string.h>... " >&6; }
-if test "${gl_cv_next_string_h+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-
-          if test $ac_cv_header_string_h = yes; then
-            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <string.h>
-
-_ACEOF
-                                                                                                case "$host_os" in
-              aix*) gl_absname_cpp="$ac_cpp -C" ;;
-              *)    gl_absname_cpp="$ac_cpp" ;;
-            esac
-                                                gl_cv_next_string_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-               sed -n '\#/string.h#{
-                 s#.*"\(.*/string.h\)".*#\1#
-                 s#^/[^/]#//&#
-                 p
-                 q
-               }'`'"'
-          else
-            gl_cv_next_string_h='<'string.h'>'
-          fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_string_h" >&5
-$as_echo "$gl_cv_next_string_h" >&6; }
-     fi
-     NEXT_STRING_H=$gl_cv_next_string_h
-
-     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
-       gl_next_as_first_directive='<'string.h'>'
-     else
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
-       gl_next_as_first_directive=$gl_cv_next_string_h
-     fi
-     NEXT_AS_FIRST_DIRECTIVE_STRING_H=$gl_next_as_first_directive
-
-
-
-
-
-    for gl_func in memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup      strncat strndup strnlen strpbrk strsep strcasestr strtok_r strsignal      strverscmp; do
-    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
-$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
-if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <string.h>
-
-int
-main ()
-{
-#undef $gl_func
-  (void) $gl_func;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$as_gl_Symbol=yes"
-else
-  eval "$as_gl_Symbol=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$as_gl_Symbol
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-     eval as_val=\$$as_gl_Symbol
-   if test "x$as_val" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
-_ACEOF
-
-                     eval ac_cv_have_decl_$gl_func=yes
-fi
-      done
-
-
-
-  GNULIB_BTOWC=0;
-  GNULIB_WCTOB=0;
-  GNULIB_MBSINIT=0;
-  GNULIB_MBRTOWC=0;
-  GNULIB_MBRLEN=0;
-  GNULIB_MBSRTOWCS=0;
-  GNULIB_MBSNRTOWCS=0;
-  GNULIB_WCRTOMB=0;
-  GNULIB_WCSRTOMBS=0;
-  GNULIB_WCSNRTOMBS=0;
-  GNULIB_WCWIDTH=0;
-    HAVE_BTOWC=1;
-  HAVE_MBSINIT=1;
-  HAVE_MBRTOWC=1;
-  HAVE_MBRLEN=1;
-  HAVE_MBSRTOWCS=1;
-  HAVE_MBSNRTOWCS=1;
-  HAVE_WCRTOMB=1;
-  HAVE_WCSRTOMBS=1;
-  HAVE_WCSNRTOMBS=1;
-  HAVE_DECL_WCTOB=1;
-  HAVE_DECL_WCWIDTH=1;
-  REPLACE_MBSTATE_T=0;
-  REPLACE_BTOWC=0;
-  REPLACE_WCTOB=0;
-  REPLACE_MBSINIT=0;
-  REPLACE_MBRTOWC=0;
-  REPLACE_MBRLEN=0;
-  REPLACE_MBSRTOWCS=0;
-  REPLACE_MBSNRTOWCS=0;
-  REPLACE_WCRTOMB=0;
-  REPLACE_WCSRTOMBS=0;
-  REPLACE_WCSNRTOMBS=0;
-  REPLACE_WCWIDTH=0;
-
-
-            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <wchar.h> uses 'inline' correctly" >&5
-$as_echo_n "checking whether <wchar.h> uses 'inline' correctly... " >&6; }
-if test "${gl_cv_header_wchar_h_correct_inline+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  gl_cv_header_wchar_h_correct_inline=yes
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-       #define wcstod renamed_wcstod
-#include <wchar.h>
-extern int zero (void);
-int main () { return zero(); }
-
-_ACEOF
-     if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-       mv conftest.$ac_objext conftest1.$ac_objext
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-         #define wcstod renamed_wcstod
-#include <wchar.h>
-int zero (void) { return 0; }
-
-_ACEOF
-       if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-         mv conftest.$ac_objext conftest2.$ac_objext
-         if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&5 2>&1; then
-           :
-         else
-           gl_cv_header_wchar_h_correct_inline=no
-         fi
-       fi
-     fi
-     rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_wchar_h_correct_inline" >&5
-$as_echo "$gl_cv_header_wchar_h_correct_inline" >&6; }
-  if test $gl_cv_header_wchar_h_correct_inline = no; then
-    as_fn_error "<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS).
-This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in
-C99 mode. You have four options:
-  - Add the flag -fgnu89-inline to CC and reconfigure, or
-  - Fix your include files, using parts of
-    <http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or
-  - Use a gcc version older than 4.3, or
-  - Don't use the flags -std=c99 or -std=gnu99.
-Configuration aborted." "$LINENO" 5
-  fi
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5
-$as_echo_n "checking for wint_t... " >&6; }
-if test "${gt_cv_c_wint_t+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
-   before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-       wint_t foo = (wchar_t)'\0';
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gt_cv_c_wint_t=yes
-else
-  gt_cv_c_wint_t=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5
-$as_echo "$gt_cv_c_wint_t" >&6; }
-  if test $gt_cv_c_wint_t = yes; then
-
-$as_echo "#define HAVE_WINT_T 1" >>confdefs.h
-
-  fi
-
-
-   if false; then
-  GL_COND_LIBTOOL_TRUE=
-  GL_COND_LIBTOOL_FALSE='#'
-else
-  GL_COND_LIBTOOL_TRUE='#'
-  GL_COND_LIBTOOL_FALSE=
-fi
-
-  gl_cond_libtool=false
-  gl_libdeps=
-  gl_ltlibdeps=
-  gl_m4_base='gnulib/m4'
-
-
-
-
-
-
-
-
-
-  gl_source_base='gnulib'
-  # Code from module arg-nonnull:
-  # Code from module c++defs:
-  # Code from module extensions:
-  # Code from module include_next:
-  # Code from module memchr:
-
-
-
-
-  GNULIB_MEMCHR=1
-
-
-
-$as_echo "#define GNULIB_TEST_MEMCHR 1" >>confdefs.h
-
-
-
-  # Code from module memmem:
-
-
-  if test $ac_cv_have_decl_memmem = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memmem works in linear time" >&5
-$as_echo_n "checking whether memmem works in linear time... " >&6; }
-if test "${gl_cv_func_memmem_works+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-                    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <features.h>
-#ifdef __GNU_LIBRARY__
- #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 9) || (__GLIBC__ > 2)
-  Lucky user
- #endif
-#endif
-#ifdef __CYGWIN__
- #include <cygwin/version.h>
- #if CYGWIN_VERSION_DLL_MAJOR >= 1007
-  Lucky user
- #endif
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "Lucky user" >/dev/null 2>&1; then :
-  gl_cv_func_memmem_works=yes
-else
-  gl_cv_func_memmem_works="guessing no"
-fi
-rm -f conftest*
-
-
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <signal.h> /* for signal */
-#include <string.h> /* for memmem */
-#include <stdlib.h> /* for malloc */
-#include <unistd.h> /* for alarm */
-
-int
-main ()
-{
-size_t m = 1000000;
-    char *haystack = (char *) malloc (2 * m + 1);
-    char *needle = (char *) malloc (m + 1);
-    void *result = 0;
-    /* Failure to compile this test due to missing alarm is okay,
-       since all such platforms (mingw) also lack memmem.  */
-    signal (SIGALRM, SIG_DFL);
-    alarm (5);
-    /* Check for quadratic performance.  */
-    if (haystack && needle)
-      {
-        memset (haystack, 'A', 2 * m);
-        haystack[2 * m] = 'B';
-        memset (needle, 'A', m);
-        needle[m] = 'B';
-        result = memmem (haystack, 2 * m + 1, needle, m + 1);
-      }
-    /* Check for empty needle behavior.  */
-    return !result || !memmem ("a", 1, 0, 0);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  gl_cv_func_memmem_works=yes
-else
-  gl_cv_func_memmem_works=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_memmem_works" >&5
-$as_echo "$gl_cv_func_memmem_works" >&6; }
-    if test "$gl_cv_func_memmem_works" != yes; then
-      REPLACE_MEMMEM=1
-
-
-
-
-
-
-
-
-  gl_LIBOBJS="$gl_LIBOBJS memmem.$ac_objext"
-
-    fi
-  fi
-
-  # Code from module memmem-simple:
-
-
-
-
-
-
-
-
-
-
-
-
-  for ac_func in memmem
-do :
-  ac_fn_c_check_func "$LINENO" "memmem" "ac_cv_func_memmem"
-if test "x$ac_cv_func_memmem" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_MEMMEM 1
-_ACEOF
-
-else
-
-    gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext"
-
-fi
-done
-
-
-
-  :
-
-
-
-
-
-  if test $ac_cv_have_decl_memmem = no; then
-    HAVE_DECL_MEMMEM=0
-  fi
-  :
-
-
-
-
-  GNULIB_MEMMEM=1
-
-
-
-$as_echo "#define GNULIB_TEST_MEMMEM 1" >>confdefs.h
-
-
-
-  # Code from module multiarch:
-
-  # Code from module stddef:
-
-
-
-  if test $gt_cv_c_wchar_t = no; then
-    HAVE_WCHAR_T=0
-    STDDEF_H=stddef.h
-  fi
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5
-$as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; }
-if test "${gl_cv_decl_null_works+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stddef.h>
-      int test[2 * (sizeof NULL == sizeof (void *)) -1];
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_decl_null_works=yes
-else
-  gl_cv_decl_null_works=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5
-$as_echo "$gl_cv_decl_null_works" >&6; }
-  if test $gl_cv_decl_null_works = no; then
-    REPLACE_NULL=1
-    STDDEF_H=stddef.h
-  fi
-  if test -n "$STDDEF_H"; then
-
-
-
-
-  :
-
-
-
-
-
-
-
-     if test $gl_cv_have_include_next = yes; then
-       gl_cv_next_stddef_h='<'stddef.h'>'
-     else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stddef.h>" >&5
-$as_echo_n "checking absolute name of <stddef.h>... " >&6; }
-if test "${gl_cv_next_stddef_h+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-
-          if test $ac_cv_header_stddef_h = yes; then
-            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stddef.h>
-
-_ACEOF
-                                                                                                case "$host_os" in
-              aix*) gl_absname_cpp="$ac_cpp -C" ;;
-              *)    gl_absname_cpp="$ac_cpp" ;;
-            esac
-                                                gl_cv_next_stddef_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-               sed -n '\#/stddef.h#{
-                 s#.*"\(.*/stddef.h\)".*#\1#
-                 s#^/[^/]#//&#
-                 p
-                 q
-               }'`'"'
-          else
-            gl_cv_next_stddef_h='<'stddef.h'>'
-          fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5
-$as_echo "$gl_cv_next_stddef_h" >&6; }
-     fi
-     NEXT_STDDEF_H=$gl_cv_next_stddef_h
-
-     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
-       gl_next_as_first_directive='<'stddef.h'>'
-     else
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
-       gl_next_as_first_directive=$gl_cv_next_stddef_h
-     fi
-     NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive
-
-
-
-  fi
-
-  # Code from module stdint:
-
-
-
-  if test $ac_cv_type_long_long_int = yes; then
-    HAVE_LONG_LONG_INT=1
-  else
-    HAVE_LONG_LONG_INT=0
-  fi
-
-
-  if test $ac_cv_type_unsigned_long_long_int = yes; then
-    HAVE_UNSIGNED_LONG_LONG_INT=1
-  else
-    HAVE_UNSIGNED_LONG_LONG_INT=0
-  fi
-
-
-      if test $ac_cv_header_inttypes_h = yes; then
-    HAVE_INTTYPES_H=1
-  else
-    HAVE_INTTYPES_H=0
-  fi
-
-
-      if test $ac_cv_header_sys_types_h = yes; then
-    HAVE_SYS_TYPES_H=1
-  else
-    HAVE_SYS_TYPES_H=0
-  fi
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-
-     if test $gl_cv_have_include_next = yes; then
-       gl_cv_next_stdint_h='<'stdint.h'>'
-     else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdint.h>" >&5
-$as_echo_n "checking absolute name of <stdint.h>... " >&6; }
-if test "${gl_cv_next_stdint_h+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-
-          if test $ac_cv_header_stdint_h = yes; then
-            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdint.h>
-
-_ACEOF
-                                                                                                case "$host_os" in
-              aix*) gl_absname_cpp="$ac_cpp -C" ;;
-              *)    gl_absname_cpp="$ac_cpp" ;;
-            esac
-                                                gl_cv_next_stdint_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-               sed -n '\#/stdint.h#{
-                 s#.*"\(.*/stdint.h\)".*#\1#
-                 s#^/[^/]#//&#
-                 p
-                 q
-               }'`'"'
-          else
-            gl_cv_next_stdint_h='<'stdint.h'>'
-          fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdint_h" >&5
-$as_echo "$gl_cv_next_stdint_h" >&6; }
-     fi
-     NEXT_STDINT_H=$gl_cv_next_stdint_h
-
-     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
-       gl_next_as_first_directive='<'stdint.h'>'
-     else
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
-       gl_next_as_first_directive=$gl_cv_next_stdint_h
-     fi
-     NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive
-
-
-
-  if test $ac_cv_header_stdint_h = yes; then
-    HAVE_STDINT_H=1
-  else
-    HAVE_STDINT_H=0
-  fi
-
-
-    if test $ac_cv_header_stdint_h = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h conforms to C99" >&5
-$as_echo_n "checking whether stdint.h conforms to C99... " >&6; }
-if test "${gl_cv_header_working_stdint_h+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  gl_cv_header_working_stdint_h=no
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */
-#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */
-#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
-#include <stdint.h>
-/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>.  */
-#if !(defined WCHAR_MIN && defined WCHAR_MAX)
-#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>"
-#endif
-
-
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-
-
-#ifdef INT8_MAX
-int8_t a1 = INT8_MAX;
-int8_t a1min = INT8_MIN;
-#endif
-#ifdef INT16_MAX
-int16_t a2 = INT16_MAX;
-int16_t a2min = INT16_MIN;
-#endif
-#ifdef INT32_MAX
-int32_t a3 = INT32_MAX;
-int32_t a3min = INT32_MIN;
-#endif
-#ifdef INT64_MAX
-int64_t a4 = INT64_MAX;
-int64_t a4min = INT64_MIN;
-#endif
-#ifdef UINT8_MAX
-uint8_t b1 = UINT8_MAX;
-#else
-typedef int b1[(unsigned char) -1 != 255 ? 1 : -1];
-#endif
-#ifdef UINT16_MAX
-uint16_t b2 = UINT16_MAX;
-#endif
-#ifdef UINT32_MAX
-uint32_t b3 = UINT32_MAX;
-#endif
-#ifdef UINT64_MAX
-uint64_t b4 = UINT64_MAX;
-#endif
-int_least8_t c1 = INT8_C (0x7f);
-int_least8_t c1max = INT_LEAST8_MAX;
-int_least8_t c1min = INT_LEAST8_MIN;
-int_least16_t c2 = INT16_C (0x7fff);
-int_least16_t c2max = INT_LEAST16_MAX;
-int_least16_t c2min = INT_LEAST16_MIN;
-int_least32_t c3 = INT32_C (0x7fffffff);
-int_least32_t c3max = INT_LEAST32_MAX;
-int_least32_t c3min = INT_LEAST32_MIN;
-int_least64_t c4 = INT64_C (0x7fffffffffffffff);
-int_least64_t c4max = INT_LEAST64_MAX;
-int_least64_t c4min = INT_LEAST64_MIN;
-uint_least8_t d1 = UINT8_C (0xff);
-uint_least8_t d1max = UINT_LEAST8_MAX;
-uint_least16_t d2 = UINT16_C (0xffff);
-uint_least16_t d2max = UINT_LEAST16_MAX;
-uint_least32_t d3 = UINT32_C (0xffffffff);
-uint_least32_t d3max = UINT_LEAST32_MAX;
-uint_least64_t d4 = UINT64_C (0xffffffffffffffff);
-uint_least64_t d4max = UINT_LEAST64_MAX;
-int_fast8_t e1 = INT_FAST8_MAX;
-int_fast8_t e1min = INT_FAST8_MIN;
-int_fast16_t e2 = INT_FAST16_MAX;
-int_fast16_t e2min = INT_FAST16_MIN;
-int_fast32_t e3 = INT_FAST32_MAX;
-int_fast32_t e3min = INT_FAST32_MIN;
-int_fast64_t e4 = INT_FAST64_MAX;
-int_fast64_t e4min = INT_FAST64_MIN;
-uint_fast8_t f1 = UINT_FAST8_MAX;
-uint_fast16_t f2 = UINT_FAST16_MAX;
-uint_fast32_t f3 = UINT_FAST32_MAX;
-uint_fast64_t f4 = UINT_FAST64_MAX;
-#ifdef INTPTR_MAX
-intptr_t g = INTPTR_MAX;
-intptr_t gmin = INTPTR_MIN;
-#endif
-#ifdef UINTPTR_MAX
-uintptr_t h = UINTPTR_MAX;
-#endif
-intmax_t i = INTMAX_MAX;
-uintmax_t j = UINTMAX_MAX;
-
-#include <limits.h> /* for CHAR_BIT */
-#define TYPE_MINIMUM(t) \
-  ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
-#define TYPE_MAXIMUM(t) \
-  ((t) ((t) 0 < (t) -1 ? (t) -1 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
-struct s {
-  int check_PTRDIFF:
-      PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
-      && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
-      ? 1 : -1;
-  /* Detect bug in FreeBSD 6.0 / ia64.  */
-  int check_SIG_ATOMIC:
-      SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
-      && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
-      ? 1 : -1;
-  int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1;
-  int check_WCHAR:
-      WCHAR_MIN == TYPE_MINIMUM (wchar_t)
-      && WCHAR_MAX == TYPE_MAXIMUM (wchar_t)
-      ? 1 : -1;
-  /* Detect bug in mingw.  */
-  int check_WINT:
-      WINT_MIN == TYPE_MINIMUM (wint_t)
-      && WINT_MAX == TYPE_MAXIMUM (wint_t)
-      ? 1 : -1;
-
-  /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others.  */
-  int check_UINT8_C:
-        (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1;
-  int check_UINT16_C:
-        (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1;
-
-  /* Detect bugs in OpenBSD 3.9 stdint.h.  */
-#ifdef UINT8_MAX
-  int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1;
-#endif
-#ifdef UINT16_MAX
-  int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1;
-#endif
-#ifdef UINT32_MAX
-  int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1;
-#endif
-#ifdef UINT64_MAX
-  int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1;
-#endif
-  int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1;
-  int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1;
-  int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1;
-  int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1;
-  int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1;
-  int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1;
-  int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1;
-  int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1;
-  int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1;
-  int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1;
-  int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1;
-};
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-                                                    if test "$cross_compiling" = yes; then :
-                 gl_cv_header_working_stdint_h=yes
-
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */
-#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */
-#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
-#include <stdint.h>
-
-
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-
-
-#include <stdio.h>
-#include <string.h>
-#define MVAL(macro) MVAL1(macro)
-#define MVAL1(expression) #expression
-static const char *macro_values[] =
-  {
-#ifdef INT8_MAX
-    MVAL (INT8_MAX),
-#endif
-#ifdef INT16_MAX
-    MVAL (INT16_MAX),
-#endif
-#ifdef INT32_MAX
-    MVAL (INT32_MAX),
-#endif
-#ifdef INT64_MAX
-    MVAL (INT64_MAX),
-#endif
-#ifdef UINT8_MAX
-    MVAL (UINT8_MAX),
-#endif
-#ifdef UINT16_MAX
-    MVAL (UINT16_MAX),
-#endif
-#ifdef UINT32_MAX
-    MVAL (UINT32_MAX),
-#endif
-#ifdef UINT64_MAX
-    MVAL (UINT64_MAX),
-#endif
-    NULL
-  };
-
-int
-main ()
-{
-
-  const char **mv;
-  for (mv = macro_values; *mv != NULL; mv++)
-    {
-      const char *value = *mv;
-      /* Test whether it looks like a cast expression.  */
-      if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0
-          || strncmp (value, "((unsigned short)"/*)*/, 17) == 0
-          || strncmp (value, "((unsigned char)"/*)*/, 16) == 0
-          || strncmp (value, "((int)"/*)*/, 6) == 0
-          || strncmp (value, "((signed short)"/*)*/, 15) == 0
-          || strncmp (value, "((signed char)"/*)*/, 14) == 0)
-        return 1;
-    }
-  return 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  gl_cv_header_working_stdint_h=yes
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdint_h" >&5
-$as_echo "$gl_cv_header_working_stdint_h" >&6; }
-  fi
-  if test "$gl_cv_header_working_stdint_h" = yes; then
-    STDINT_H=
-  else
-            for ac_header in sys/inttypes.h sys/bitypes.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-    if test $ac_cv_header_sys_inttypes_h = yes; then
-      HAVE_SYS_INTTYPES_H=1
-    else
-      HAVE_SYS_INTTYPES_H=0
-    fi
-
-    if test $ac_cv_header_sys_bitypes_h = yes; then
-      HAVE_SYS_BITYPES_H=1
-    else
-      HAVE_SYS_BITYPES_H=0
-    fi
-
-
-
-  :
-
-
-
-
-
-
-
-
-  if test $APPLE_UNIVERSAL_BUILD = 0; then
-
-
-  for gltype in ptrdiff_t size_t ; do
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5
-$as_echo_n "checking for bit size of $gltype... " >&6; }
-if { as_var=gl_cv_bitsizeof_${gltype}; eval "test \"\${$as_var+set}\" = set"; }; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result"        "
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-
-#include <limits.h>"; then :
-
-else
-  result=unknown
-fi
-
-       eval gl_cv_bitsizeof_${gltype}=\$result
-
-fi
-eval ac_res=\$gl_cv_bitsizeof_${gltype}
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-    eval result=\$gl_cv_bitsizeof_${gltype}
-    if test $result = unknown; then
-                                                result=0
-    fi
-    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    cat >>confdefs.h <<_ACEOF
-#define BITSIZEOF_${GLTYPE} $result
-_ACEOF
-
-    eval BITSIZEOF_${GLTYPE}=\$result
-  done
-
-
-  fi
-
-
-  for gltype in sig_atomic_t wchar_t wint_t ; do
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5
-$as_echo_n "checking for bit size of $gltype... " >&6; }
-if { as_var=gl_cv_bitsizeof_${gltype}; eval "test \"\${$as_var+set}\" = set"; }; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result"        "
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-
-#include <limits.h>"; then :
-
-else
-  result=unknown
-fi
-
-       eval gl_cv_bitsizeof_${gltype}=\$result
-
-fi
-eval ac_res=\$gl_cv_bitsizeof_${gltype}
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-    eval result=\$gl_cv_bitsizeof_${gltype}
-    if test $result = unknown; then
-                                                result=0
-    fi
-    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    cat >>confdefs.h <<_ACEOF
-#define BITSIZEOF_${GLTYPE} $result
-_ACEOF
-
-    eval BITSIZEOF_${GLTYPE}=\$result
-  done
-
-
-
-
-  for gltype in sig_atomic_t wchar_t wint_t ; do
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gltype is signed" >&5
-$as_echo_n "checking whether $gltype is signed... " >&6; }
-if { as_var=gl_cv_type_${gltype}_signed; eval "test \"\${$as_var+set}\" = set"; }; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-
-            int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  result=yes
-else
-  result=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-       eval gl_cv_type_${gltype}_signed=\$result
-
-fi
-eval ac_res=\$gl_cv_type_${gltype}_signed
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-    eval result=\$gl_cv_type_${gltype}_signed
-    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    if test "$result" = yes; then
-      cat >>confdefs.h <<_ACEOF
-#define HAVE_SIGNED_${GLTYPE} 1
-_ACEOF
-
-      eval HAVE_SIGNED_${GLTYPE}=1
-    else
-      eval HAVE_SIGNED_${GLTYPE}=0
-    fi
-  done
-
-
-  gl_cv_type_ptrdiff_t_signed=yes
-  gl_cv_type_size_t_signed=no
-  if test $APPLE_UNIVERSAL_BUILD = 0; then
-
-
-  for gltype in ptrdiff_t size_t ; do
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5
-$as_echo_n "checking for $gltype integer literal suffix... " >&6; }
-if { as_var=gl_cv_type_${gltype}_suffix; eval "test \"\${$as_var+set}\" = set"; }; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval gl_cv_type_${gltype}_suffix=no
-       eval result=\$gl_cv_type_${gltype}_signed
-       if test "$result" = yes; then
-         glsufu=
-       else
-         glsufu=u
-       fi
-       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
-         case $glsuf in
-           '')  gltype1='int';;
-           l)   gltype1='long int';;
-           ll)  gltype1='long long int';;
-           i64) gltype1='__int64';;
-           u)   gltype1='unsigned int';;
-           ul)  gltype1='unsigned long int';;
-           ull) gltype1='unsigned long long int';;
-           ui64)gltype1='unsigned __int64';;
-         esac
-         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-
-              extern $gltype foo;
-              extern $gltype1 foo;
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval gl_cv_type_${gltype}_suffix=\$glsuf
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-         eval result=\$gl_cv_type_${gltype}_suffix
-         test "$result" != no && break
-       done
-fi
-eval ac_res=\$gl_cv_type_${gltype}_suffix
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    eval result=\$gl_cv_type_${gltype}_suffix
-    test "$result" = no && result=
-    eval ${GLTYPE}_SUFFIX=\$result
-    cat >>confdefs.h <<_ACEOF
-#define ${GLTYPE}_SUFFIX $result
-_ACEOF
-
-  done
-
-
-  fi
-
-
-  for gltype in sig_atomic_t wchar_t wint_t ; do
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5
-$as_echo_n "checking for $gltype integer literal suffix... " >&6; }
-if { as_var=gl_cv_type_${gltype}_suffix; eval "test \"\${$as_var+set}\" = set"; }; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval gl_cv_type_${gltype}_suffix=no
-       eval result=\$gl_cv_type_${gltype}_signed
-       if test "$result" = yes; then
-         glsufu=
-       else
-         glsufu=u
-       fi
-       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
-         case $glsuf in
-           '')  gltype1='int';;
-           l)   gltype1='long int';;
-           ll)  gltype1='long long int';;
-           i64) gltype1='__int64';;
-           u)   gltype1='unsigned int';;
-           ul)  gltype1='unsigned long int';;
-           ull) gltype1='unsigned long long int';;
-           ui64)gltype1='unsigned __int64';;
-         esac
-         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-
-              extern $gltype foo;
-              extern $gltype1 foo;
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval gl_cv_type_${gltype}_suffix=\$glsuf
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-         eval result=\$gl_cv_type_${gltype}_suffix
-         test "$result" != no && break
-       done
-fi
-eval ac_res=\$gl_cv_type_${gltype}_suffix
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    eval result=\$gl_cv_type_${gltype}_suffix
-    test "$result" = no && result=
-    eval ${GLTYPE}_SUFFIX=\$result
-    cat >>confdefs.h <<_ACEOF
-#define ${GLTYPE}_SUFFIX $result
-_ACEOF
-
-  done
-
-
-
-    STDINT_H=stdint.h
-  fi
-
-
-  # Code from module string:
-
-
-
-  # Code from module warn-on-use:
-  # Code from module wchar:
-
-
-
-
-  :
-
-
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-
-     if test $gl_cv_have_include_next = yes; then
-       gl_cv_next_wchar_h='<'wchar.h'>'
-     else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wchar.h>" >&5
-$as_echo_n "checking absolute name of <wchar.h>... " >&6; }
-if test "${gl_cv_next_wchar_h+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-
-          if test $ac_cv_header_wchar_h = yes; then
-            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <wchar.h>
-
-_ACEOF
-                                                                                                case "$host_os" in
-              aix*) gl_absname_cpp="$ac_cpp -C" ;;
-              *)    gl_absname_cpp="$ac_cpp" ;;
-            esac
-                                                gl_cv_next_wchar_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-               sed -n '\#/wchar.h#{
-                 s#.*"\(.*/wchar.h\)".*#\1#
-                 s#^/[^/]#//&#
-                 p
-                 q
-               }'`'"'
-          else
-            gl_cv_next_wchar_h='<'wchar.h'>'
-          fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wchar_h" >&5
-$as_echo "$gl_cv_next_wchar_h" >&6; }
-     fi
-     NEXT_WCHAR_H=$gl_cv_next_wchar_h
-
-     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
-       gl_next_as_first_directive='<'wchar.h'>'
-     else
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
-       gl_next_as_first_directive=$gl_cv_next_wchar_h
-     fi
-     NEXT_AS_FIRST_DIRECTIVE_WCHAR_H=$gl_next_as_first_directive
-
-
-
-  if test $ac_cv_header_wchar_h = yes; then
-    HAVE_WCHAR_H=1
-  else
-    HAVE_WCHAR_H=0
-  fi
-
-
-
-  if test $gt_cv_c_wint_t = yes; then
-    HAVE_WINT_T=1
-  else
-    HAVE_WINT_T=0
-  fi
-
-
-
-    for gl_func in btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb     wcsrtombs wcsnrtombs wcwidth; do
-    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
-$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
-if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Some systems require additional headers.  */
-#ifndef __GLIBC__
-# include <stddef.h>
-# include <stdio.h>
-# include <time.h>
-#endif
-#include <wchar.h>
-
-int
-main ()
-{
-#undef $gl_func
-  (void) $gl_func;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$as_gl_Symbol=yes"
-else
-  eval "$as_gl_Symbol=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$as_gl_Symbol
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-     eval as_val=\$$as_gl_Symbol
-   if test "x$as_val" = x""yes; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
-_ACEOF
-
-                     eval ac_cv_have_decl_$gl_func=yes
-fi
-      done
-
-
-  # Code from module dummy:
-  # End of code from modules
-
-
-
-
-
-
-
-
-
-  gltests_libdeps=
-  gltests_ltlibdeps=
-
-
-
-
-
-
-
-
-
-  gl_source_base='tests'
-  gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
-
-  gl_module_indicator_condition=$gltests_WITNESS
-
-
-
-
-
-
-
-
-
-  LIBGNU_LIBDEPS="$gl_libdeps"
-
-  LIBGNU_LTLIBDEPS="$gl_ltlibdeps"
-
-
-
-# For Makefile dependencies.
-GNULIB_STDINT_H=
-if test x"$STDINT_H" != x; then
-  GNULIB_STDINT_H=gnulib/$STDINT_H
-fi
-
-
-PACKAGE=gdb
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE "$PACKAGE"
-_ACEOF
-
-
-
-# We never need to detect it in this sub-configure.
-# But preserve it for config.status --recheck.
-
-
-
-MAKEINFO_EXTRA_FLAGS=""
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $MAKEINFO supports @click" >&5
-$as_echo_n "checking whether $MAKEINFO supports @click... " >&6; }
-if test "${gdb_cv_have_makeinfo_click+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  echo '@clicksequence{a @click{} b}' >conftest.texinfo
-  if eval "$MAKEINFO conftest.texinfo >&5 2>&5"; then
-    gdb_cv_have_makeinfo_click=yes
-  else
-    gdb_cv_have_makeinfo_click=no
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_makeinfo_click" >&5
-$as_echo "$gdb_cv_have_makeinfo_click" >&6; }
-if test x"$gdb_cv_have_makeinfo_click" = xyes; then
-  MAKEINFO_EXTRA_FLAGS="$MAKEINFO_EXTRA_FLAGS -DHAVE_MAKEINFO_CLICK"
-fi
-
-
-# GDB does not use automake, but gnulib does.  This line lets us
-# generate its Makefile.in.
-am__api_version='1.11'
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
-$as_echo_n "checking whether build environment is sane... " >&6; }
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Reject unsafe characters in $srcdir or the absolute working directory
-# name.  Accept space and tab only in the latter.
-am_lf='
-'
-case `pwd` in
-  *[\\\"\#\$\&\'\`$am_lf]*)
-    as_fn_error "unsafe absolute working directory name" "$LINENO" 5;;
-esac
-case $srcdir in
-  *[\\\"\#\$\&\'\`$am_lf\ \	]*)
-    as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
-esac
-
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments.  Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
-   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-   if test "$*" = "X"; then
-      # -L didn't work.
-      set X `ls -t "$srcdir/configure" conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$*" != "X $srcdir/configure conftest.file" \
-      && test "$*" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      as_fn_error "ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" "$LINENO" 5
-   fi
-
-   test "$2" = conftest.file
-   )
-then
-   # Ok.
-   :
-else
-   as_fn_error "newly created file is older than distributed files!
-Check your system clock" "$LINENO" 5
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-
-if test x"${MISSING+set}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\	*)
-    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
-  *)
-    MISSING="\${SHELL} $am_aux_dir/missing" ;;
-  esac
-fi
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
-else
-  am_missing_run=
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
-$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
-fi
-
-if test x"${install_sh}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\	*)
-    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
-  *)
-    install_sh="\${SHELL} $am_aux_dir/install-sh"
-  esac
-fi
-
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-if test "$cross_compiling" != no; then
-  if test -n "$ac_tool_prefix"; then
-  # 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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$STRIP"; then
-  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_STRIP"; then
-  ac_ct_STRIP=$STRIP
-  # Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_STRIP"; then
-  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_STRIP="strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_STRIP" = x; then
-    STRIP=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    STRIP=$ac_ct_STRIP
-  fi
-else
-  STRIP="$ac_cv_prog_STRIP"
-fi
-
-fi
-INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
-$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
-if test -z "$MKDIR_P"; then
-  if test "${ac_cv_path_mkdir+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in mkdir gmkdir; do
-	 for ac_exec_ext in '' $ac_executable_extensions; do
-	   { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
-	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
-	     'mkdir (GNU coreutils) '* | \
-	     'mkdir (coreutils) '* | \
-	     'mkdir (fileutils) '4.1*)
-	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
-	       break 3;;
-	   esac
-	 done
-       done
-  done
-IFS=$as_save_IFS
-
-fi
-
-  if test "${ac_cv_path_mkdir+set}" = set; then
-    MKDIR_P="$ac_cv_path_mkdir -p"
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for MKDIR_P within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    test -d ./--version && rmdir ./--version
-    MKDIR_P="$ac_install_sh -d"
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
-$as_echo "$MKDIR_P" >&6; }
-
-
-mkdir_p="$MKDIR_P"
-case $mkdir_p in
-  [\\/$]* | ?:[\\/]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-
-for ac_prog in gawk mawk nawk awk
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AWK+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$AWK"; then
-  ac_cv_prog_AWK="$AWK" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_AWK="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-AWK=$ac_cv_prog_AWK
-if test -n "$AWK"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
-$as_echo "$AWK" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$AWK" && break
-done
-
-ac_config_commands="$ac_config_commands depfiles"
-
-
-am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
-	@echo this is the am__doit target
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
-$as_echo_n "checking for style of include used by $am_make... " >&6; }
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# Ignore all kinds of additional output from `make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
-  am__include=include
-  am__quote=
-  _am_result=GNU
-  ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
-   echo '.include "confinc"' > confmf
-   case `$am_make -s -f confmf 2> /dev/null` in #(
-   *the\ am__doit\ target*)
-     am__include=.include
-     am__quote="\""
-     _am_result=BSD
-     ;;
-   esac
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
-$as_echo "$_am_result" >&6; }
-rm -f confinc confmf
-
-# Check whether --enable-dependency-tracking was given.
-if test "${enable_dependency_tracking+set}" = set; then :
-  enableval=$enable_dependency_tracking;
-fi
-
-if test "x$enable_dependency_tracking" != xno; then
-  am_depcomp="$ac_aux_dir/depcomp"
-  AMDEPBACKSLASH='\'
-fi
- if test "x$enable_dependency_tracking" != xno; then
-  AMDEP_TRUE=
-  AMDEP_FALSE='#'
-else
-  AMDEP_TRUE='#'
-  AMDEP_FALSE=
-fi
-
-
-if test "`cd $srcdir && pwd`" != "`pwd`"; then
-  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
-  # is not polluted with repeated "-I."
-  am__isrc=' -I$(srcdir)'
-  # test to see if srcdir already configured
-  if test -f $srcdir/config.status; then
-    as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
-  fi
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
-  if (cygpath --version) >/dev/null 2>/dev/null; then
-    CYGPATH_W='cygpath -w'
-  else
-    CYGPATH_W=echo
-  fi
-fi
-
-
-# Define the identity of the package.
- PACKAGE=gdb
- VERSION=UNUSED-VERSION
-
-
-# Some tools Automake needs.
-
-ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
-
-
-AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
-
-
-AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
-
-
-AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
-
-
-MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
-
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
-# Always define AMTAR for backward compatibility.
-
-AMTAR=${AMTAR-"${am_missing_run}tar"}
-
-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
-
-
-
-
-depcc="$CC"   am_compiler_list=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+MAKEINFO_EXTRA_FLAGS=""
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $MAKEINFO supports @click" >&5
+$as_echo_n "checking whether $MAKEINFO supports @click... " >&6; }
+if test "${gdb_cv_have_makeinfo_click+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CC_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  echo '@clicksequence{a @click{} b}' >conftest.texinfo
+  if eval "$MAKEINFO conftest.texinfo >&5 2>&5"; then
+    gdb_cv_have_makeinfo_click=yes
+  else
+    gdb_cv_have_makeinfo_click=no
   fi
-  am__universal=false
-  case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
-      else
-	break
-      fi
-      ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CC_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_CC_dependencies_compiler_type=none
-fi
-
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
-CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
-
- if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
-  am__fastdepCC_TRUE=
-  am__fastdepCC_FALSE='#'
-else
-  am__fastdepCC_TRUE='#'
-  am__fastdepCC_FALSE=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_makeinfo_click" >&5
+$as_echo "$gdb_cv_have_makeinfo_click" >&6; }
+if test x"$gdb_cv_have_makeinfo_click" = xyes; then
+  MAKEINFO_EXTRA_FLAGS="$MAKEINFO_EXTRA_FLAGS -DHAVE_MAKEINFO_CLICK"
 fi
 
 
 
 
-
-
 # Check whether --with-separate-debug-dir was given.
 if test "${with_separate_debug_dir+set}" = set; then :
   withval=$with_separate_debug_dir;
@@ -7855,6 +4882,24 @@ _ACEOF
 
 
 
+# We can't pass paths as command line arguments.
+# Mingw32 tries to be clever and will convert the paths for us.
+# For example -DBINDIR="/usr/local/bin" passed on the command line may get
+# converted to -DBINDIR="E:/msys/mingw32/msys/1.0/local/bin".
+# This breaks GDB's relocatable path conversions since paths passed in
+# config.h would not get so translated, the path prefixes no longer match.
+
+  test "x$prefix" = xNONE && prefix="$ac_default_prefix"
+  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+  ac_define_dir=`eval echo $bindir`
+  ac_define_dir=`eval echo $ac_define_dir`
+
+cat >>confdefs.h <<_ACEOF
+#define BINDIR "$ac_define_dir"
+_ACEOF
+
+
+
 # GDB's datadir relocation
 
 
@@ -7923,6 +4968,58 @@ _ACEOF
 fi
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for default auto-load directory" >&5
+$as_echo_n "checking for default auto-load directory... " >&6; }
+
+# Check whether --with-auto-load-dir was given.
+if test "${with_auto_load_dir+set}" = set; then :
+  withval=$with_auto_load_dir;
+else
+  with_auto_load_dir='$debugdir:$datadir/auto-load'
+fi
+
+escape_dir=`echo $with_auto_load_dir | sed 's/[$]\(datadir\|debugdir\)\>/\\\\\\\\\\\\&/g'`
+
+  test "x$prefix" = xNONE && prefix="$ac_default_prefix"
+  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+  ac_define_dir=`eval echo $escape_dir`
+  ac_define_dir=`eval echo $ac_define_dir`
+
+cat >>confdefs.h <<_ACEOF
+#define AUTO_LOAD_DIR "$ac_define_dir"
+_ACEOF
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_auto_load_dir" >&5
+$as_echo "$with_auto_load_dir" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for default auto-load safe-path" >&5
+$as_echo_n "checking for default auto-load safe-path... " >&6; }
+
+# Check whether --with-auto-load-safe-path was given.
+if test "${with_auto_load_safe_path+set}" = set; then :
+  withval=$with_auto_load_safe_path; if test "$with_auto_load_safe_path" = "no"; then
+     with_auto_load_safe_path="/"
+     fi
+else
+  with_auto_load_safe_path="$with_auto_load_dir"
+fi
+
+escape_dir=`echo $with_auto_load_safe_path | sed 's/[$]\(datadir\|debugdir\)\>/\\\\\\\\\\\\&/g'`
+
+  test "x$prefix" = xNONE && prefix="$ac_default_prefix"
+  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+  ac_define_dir=`eval echo $escape_dir`
+  ac_define_dir=`eval echo $ac_define_dir`
+
+cat >>confdefs.h <<_ACEOF
+#define AUTO_LOAD_SAFE_PATH "$ac_define_dir"
+_ACEOF
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_auto_load_safe_path" >&5
+$as_echo "$with_auto_load_safe_path" >&6; }
+
 
 
 subdirs="$subdirs testsuite"
@@ -8179,59 +5276,69 @@ $as_echo "$as_me: WARNING: gdbtk isn't supported on $host; disabling" >&2;}
     enable_gdbtk=no ;;
 esac
 
-# Libunwind support.
+# Libunwind support for ia64.
 
-# Check whether --with-libunwind was given.
-if test "${with_libunwind+set}" = set; then :
-  withval=$with_libunwind; case "${withval}" in
-  yes)  enable_libunwind=yes ;;
-  no)   enable_libunwind=no ;;
-  *)    as_fn_error "bad value ${withval} for GDB with-libunwind option" "$LINENO" 5 ;;
-esac
+
+# Check whether --with-libunwind-ia64 was given.
+if test "${with_libunwind_ia64+set}" = set; then :
+  withval=$with_libunwind_ia64;
 else
+  with_libunwind_ia64=auto
+fi
 
-  for ac_header in libunwind.h libunwind-ia64.h
+
+# Backward compatibility option.
+if test "${with_libunwind+set}" = set; then
+  if test x"$with_libunwind_ia64" != xauto; then
+    as_fn_error "option --with-libunwind is deprecated, use --with-libunwind-ia64" "$LINENO" 5
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: option --with-libunwind is deprecated, use --with-libunwind-ia64" >&5
+$as_echo "$as_me: WARNING: option --with-libunwind is deprecated, use --with-libunwind-ia64" >&2;}
+  with_libunwind_ia64="$with_libunwind"
+fi
+
+case "$with_libunwind_ia64" in
+  yes | no)
+    ;;
+  auto)
+    for ac_header in libunwind-ia64.h
 do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+  ac_fn_c_check_header_mongrel "$LINENO" "libunwind-ia64.h" "ac_cv_header_libunwind_ia64_h" "$ac_includes_default"
+if test "x$ac_cv_header_libunwind_ia64_h" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define HAVE_LIBUNWIND_IA64_H 1
 _ACEOF
 
 fi
 
 done
 
-  if test x"$ac_cv_header_libunwind_h" = xyes -a x"$ac_cv_header_libunwind_ia64_h" = xyes; then
-    enable_libunwind=yes;
-  fi
-
-fi
-
+    with_libunwind_ia64=$ac_cv_header_libunwind_ia64_h
+    ;;
+  *)
+    as_fn_error "bad value $with_libunwind_ia64 for GDB --with-libunwind-ia64 option" "$LINENO" 5
+    ;;
+esac
 
-if test x"$enable_libunwind" = xyes; then
-  for ac_header in libunwind.h libunwind-ia64.h
+if test x"$with_libunwind_ia64" = xyes; then
+  for ac_header in libunwind-ia64.h
 do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+  ac_fn_c_check_header_mongrel "$LINENO" "libunwind-ia64.h" "ac_cv_header_libunwind_ia64_h" "$ac_includes_default"
+if test "x$ac_cv_header_libunwind_ia64_h" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define HAVE_LIBUNWIND_IA64_H 1
 _ACEOF
 
 fi
 
 done
 
-
-$as_echo "#define HAVE_LIBUNWIND 1" >>confdefs.h
-
-  CONFIG_OBS="$CONFIG_OBS libunwind-frame.o"
-  CONFIG_DEPS="$CONFIG_DEPS libunwind-frame.o"
-  CONFIG_SRCS="$CONFIG_SRCS libunwind-frame.c"
+  if test x"$ac_cv_header_libunwind_ia64_h" != xyes; then
+    as_fn_error "GDB option --with-libunwind-ia64 requires libunwind-ia64.h" "$LINENO" 5
+  fi
+  CONFIG_OBS="$CONFIG_OBS ia64-libunwind-tdep.o"
+  CONFIG_DEPS="$CONFIG_DEPS ia64-libunwind-tdep.o"
+  CONFIG_SRCS="$CONFIG_SRCS ia64-libunwind-tdep.c"
 fi
 
 opt_curses=no
@@ -8450,39 +5557,131 @@ $as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_prog_AWK+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$AWK"; then
-  ac_cv_prog_AWK="$AWK" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_AWK="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
   done
 IFS=$as_save_IFS
 
+rm -rf conftest.one conftest.two conftest.dir
+
 fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
 fi
-AWK=$ac_cv_prog_AWK
-if test -n "$AWK"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
-$as_echo "$AWK" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
 
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
 
-  test -n "$AWK" && break
-done
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
 
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
 $as_echo_n "checking whether ln -s works... " >&6; }
@@ -9725,10 +6924,6 @@ if test x"$enable_tui" != xno; then
       CONFIG_DEPS="$CONFIG_DEPS \$(SUBDIR_TUI_DEPS)"
       CONFIG_SRCS="$CONFIG_SRCS \$(SUBDIR_TUI_SRCS)"
       ENABLE_CFLAGS="$ENABLE_CFLAGS \$(SUBDIR_TUI_CFLAGS)"
-      CONFIG_ALL="${CONFIG_ALL} all-tui"
-      CONFIG_CLEAN="${CONFIG_CLEAN} clean-tui"
-      CONFIG_INSTALL="${CONFIG_INSTALL} install-tui"
-      CONFIG_UNINSTALL="${CONFIG_UNINSTALL} uninstall-tui"
     else
       if test x"$enable_tui" = xyes; then
 	as_fn_error "no enhanced curses library found; disable TUI" "$LINENO" 5
@@ -9844,6 +7039,48 @@ fi
 
 
 
+if $development; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lmcheck" >&5
+$as_echo_n "checking for main in -lmcheck... " >&6; }
+if test "${ac_cv_lib_mcheck_main+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmcheck  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+return main ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_mcheck_main=yes
+else
+  ac_cv_lib_mcheck_main=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mcheck_main" >&5
+$as_echo "$ac_cv_lib_mcheck_main" >&6; }
+if test "x$ac_cv_lib_mcheck_main" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBMCHECK 1
+_ACEOF
+
+  LIBS="-lmcheck $LIBS"
+
+fi
+
+fi
+
 # Generate jit-reader.h
 
 # This is typedeffed to GDB_CORE_ADDR in jit-reader.h
@@ -10756,7 +7993,7 @@ $as_echo "$as_me: WARNING: python support disabled; some features may be unavail
   have_libpython=no
 else
   case "${with_python}" in
-  /*)
+  [\\/]* | ?:[\\/]*)
     if test -d ${with_python}; then
       # Assume the python binary is ${with_python}/bin/python.
       python_prog="${with_python}/bin/python"
@@ -11613,14 +8850,14 @@ fi
 # FIXME: kettenis/20030102: In most cases we include these (ctype.h, time.h)
 # unconditionally, so what's the point in checking these?
 for ac_header in nlist.h machine/reg.h poll.h sys/poll.h proc_service.h \
-                  thread_db.h gnu/libc-version.h signal.h stddef.h \
+                  thread_db.h signal.h stddef.h \
 		  stdlib.h string.h memory.h strings.h sys/fault.h \
 		  sys/file.h sys/filio.h sys/ioctl.h sys/param.h \
 		  sys/resource.h sys/procfs.h sys/ptrace.h ptrace.h \
 		  sys/reg.h sys/debugreg.h sys/select.h sys/syscall.h \
 		  sys/types.h sys/wait.h wait.h termios.h termio.h \
 		  sgtty.h unistd.h elf_hp.h ctype.h time.h locale.h \
-		  dlfcn.h
+		  dlfcn.h sys/socket.h sys/un.h
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@@ -12873,11 +10110,12 @@ $as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h
 
 fi
 
-for ac_func in canonicalize_file_name realpath getrusage getuid \
-		getgid pipe poll pread64 resize_term sbrk setpgid setpgrp setsid \
+for ac_func in canonicalize_file_name realpath getrusage getuid getgid \
+		pipe poll pread pread64 pwrite readlink resize_term \
+		sbrk setpgid setpgrp setsid \
 		sigaction sigprocmask sigsetmask socketpair syscall \
 		ttrace wborder wresize setlocale iconvlist libiconvlist btowc \
-		setrlimit getrlimit posix_madvise waitpid
+		setrlimit getrlimit posix_madvise waitpid lstat
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -13374,6 +10612,31 @@ _ACEOF
 fi
 
 
+# See if <sys/user.h> supports the %fs_base and %gs_bas amd64 segment registers.
+# Older amd64 Linux's don't have the fs_base and gs_base members of
+# `struct user_regs_struct'.
+ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "fs_base" "ac_cv_member_struct_user_regs_struct_fs_base" "#include <sys/user.h>
+"
+if test "x$ac_cv_member_struct_user_regs_struct_fs_base" = x""yes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "gs_base" "ac_cv_member_struct_user_regs_struct_gs_base" "#include <sys/user.h>
+"
+if test "x$ac_cv_member_struct_user_regs_struct_gs_base" = x""yes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_USER_REGS_STRUCT_GS_BASE 1
+_ACEOF
+
+
+fi
+
+
 # See if <sys/ptrace.h> provides the PTRACE_GETREGS request.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTRACE_GETREGS" >&5
 $as_echo_n "checking for PTRACE_GETREGS... " >&6; }
@@ -14770,7 +12033,7 @@ $as_echo "$gdb_cv_have_aix_thread_debug" >&6; }
       if test $gdb_cv_have_aix_thread_debug = yes; then
          CONFIG_SRCS="${CONFIG_SRCS} aix-thread.c"
          CONFIG_OBS="${CONFIG_OBS} aix-thread.o"
-         CONFIG_LDFLAGS="${CONFIG_LDFLAGS} -lpthdebug"
+         LIBS="$LIBS -lpthdebug"
 
          # Older versions of AIX do not provide the declaration for
          # the getthrds function (it appears that it was introduced
@@ -15002,45 +12265,53 @@ $as_echo "#define HAVE_PERSONALITY 1" >>confdefs.h
 fi
 
 
-target_sysroot_reloc=0
+# Support for --with-sysroot is a copy of GDB_AC_WITH_DIR,
+# except that the argument to --with-sysroot is optional.
+# --with-sysroot (or --with-sysroot=yes) sets the default sysroot path.
+if test "x$with_sysroot" = xyes; then
+  with_sysroot="${exec_prefix}/${target_alias}/sys-root"
+fi
 
 # Check whether --with-sysroot was given.
 if test "${with_sysroot+set}" = set; then :
-  withval=$with_sysroot;
- case ${with_sysroot} in
- yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_alias}/sys-root' ;;
- *) TARGET_SYSTEM_ROOT=$with_sysroot ;;
- esac
+  withval=$with_sysroot; TARGET_SYSTEM_ROOT=$withval
+else
+  TARGET_SYSTEM_ROOT=
+fi
 
- TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
 
- if test "x$prefix" = xNONE; then
-  test_prefix=/usr/local
- else
-  test_prefix=$prefix
- fi
- if test "x$exec_prefix" = xNONE || test "x$exec_prefix" = 'x${prefix}'; then
-  test_exec_prefix=$test_prefix
- else
-  test_exec_prefix=$exec_prefix
- fi
- case ${TARGET_SYSTEM_ROOT} in
- "${test_prefix}"|"${test_prefix}/"*|\
- "${test_exec_prefix}"|"${test_exec_prefix}/"*|\
- '${prefix}'|'${prefix}/'*|\
- '${exec_prefix}'|'${exec_prefix}/'*)
-   target_sysroot_reloc=1
-   ;;
- esac
+  test "x$prefix" = xNONE && prefix="$ac_default_prefix"
+  test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+  ac_define_dir=`eval echo $TARGET_SYSTEM_ROOT`
+  ac_define_dir=`eval echo $ac_define_dir`
 
-else
+cat >>confdefs.h <<_ACEOF
+#define TARGET_SYSTEM_ROOT "$ac_define_dir"
+_ACEOF
 
- TARGET_SYSTEM_ROOT=
- TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"\"'
 
-fi
 
-TARGET_SYSTEM_ROOT_DEFINE="$TARGET_SYSTEM_ROOT_DEFINE -DTARGET_SYSTEM_ROOT_RELOCATABLE=$target_sysroot_reloc"
+
+  if test "x$exec_prefix" = xNONE || test "x$exec_prefix" = 'x${prefix}'; then
+     if test "x$prefix" = xNONE; then
+     	test_prefix=/usr/local
+     else
+	test_prefix=$prefix
+     fi
+  else
+     test_prefix=$exec_prefix
+  fi
+  value=0
+  case ${ac_define_dir} in
+     "${test_prefix}"|"${test_prefix}/"*|\
+	'${exec_prefix}'|'${exec_prefix}/'*)
+     value=1
+     ;;
+  esac
+
+cat >>confdefs.h <<_ACEOF
+#define TARGET_SYSTEM_ROOT_RELOCATABLE $value
+_ACEOF
 
 
 
@@ -15101,6 +12372,11 @@ if test "${enable_werror+set}" = set; then :
 fi
 
 
+# Enable -Werror by default when using gcc.  Turn it off for releases.
+if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" && $development; then
+    ERROR_ON_WARNING=yes
+fi
+
 WERROR_CFLAGS=""
 if test "${ERROR_ON_WARNING}" = yes ; then
     WERROR_CFLAGS="-Werror"
@@ -15114,7 +12390,8 @@ fi
 build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \
 -Wformat-nonliteral -Wno-pointer-sign \
 -Wno-unused -Wunused-value -Wunused-function \
--Wno-switch -Wno-char-subscripts"
+-Wno-switch -Wno-char-subscripts -Wmissing-prototypes \
+-Wdeclaration-after-statement"
 
 # Enable -Wno-format by default when using gcc on mingw since many
 # GCC versions complain about %I64.
@@ -15248,8 +12525,11 @@ esac
 OLD_CFLAGS=$CFLAGS
 OLD_LDFLAGS=$LDFLAGS
 OLD_LIBS=$LIBS
-CFLAGS="$CFLAGS -I${srcdir}/../include -I../bfd -I${srcdir}/../bfd"
-LDFLAGS="$LDFLAGS -L../bfd -L../libiberty"
+# Put the old CFLAGS/LDFLAGS last, in case the user's (C|LD)FLAGS
+# points somewhere with bfd, with -I/foo/lib and -L/foo/lib.  We
+# always want our bfd.
+CFLAGS="-I${srcdir}/../include -I../bfd -I${srcdir}/../bfd $CFLAGS"
+LDFLAGS="-L../bfd -L../libiberty $LDFLAGS"
 intl=`echo $LIBINTL | sed 's,${top_builddir}/,,g'`
 # -ldl is provided by bfd/Makfile.am (LIBDL) <PLUGINS>.
 if test "$plugins" = "yes"; then
@@ -15286,7 +12566,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_var_elf" >&5
 $as_echo "$gdb_cv_var_elf" >&6; }
 if test $gdb_cv_var_elf = yes; then
-  CONFIG_OBS="$CONFIG_OBS elfread.o"
+  CONFIG_OBS="$CONFIG_OBS elfread.o stap-probe.o"
 
 $as_echo "#define HAVE_ELF 1" >>confdefs.h
 
@@ -15598,7 +12878,7 @@ $as_echo "could not find ${TCL_BIN_DIR}/tclConfig.sh" >&6; }
     elif test "`uname -s`" = "Darwin"; then
 	# If Tcl was built as a framework, attempt to use the libraries
 	# from the framework at the given location so that linking works
-	# against Tcl.framework installed in an arbitary location.
+	# against Tcl.framework installed in an arbitrary location.
 	case ${TCL_DEFS} in
 	    *TCL_FRAMEWORK*)
 		if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then
@@ -15713,7 +12993,7 @@ $as_echo "could not find ${TK_BIN_DIR}/tkConfig.sh" >&6; }
     elif test "`uname -s`" = "Darwin"; then
 	# If Tk was built as a framework, attempt to use the libraries
 	# from the framework at the given location so that linking works
-	# against Tk.framework installed in an arbitary location.
+	# against Tk.framework installed in an arbitrary location.
 	case ${TK_DEFS} in
 	    *TK_FRAMEWORK*)
 		if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then
@@ -16213,7 +13493,7 @@ ac_config_links="$ac_config_links $ac_config_links_1"
 $as_echo "#define GDB_DEFAULT_HOST_CHARSET \"UTF-8\"" >>confdefs.h
 
 
-ac_config_files="$ac_config_files Makefile .gdbinit:gdbinit.in doc/Makefile gnulib/Makefile data-directory/Makefile"
+ac_config_files="$ac_config_files Makefile gdb-gdb.gdb doc/Makefile data-directory/Makefile"
 
 ac_config_commands="$ac_config_commands default"
 
@@ -16322,58 +13602,6 @@ if test -z "${GMAKE_TRUE}" && test -z "${GMAKE_FALSE}"; then
   as_fn_error "conditional \"GMAKE\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then
-  as_fn_error "conditional \"GL_COND_LIBTOOL\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-
-    gl_libobjs=
-    gl_ltlibobjs=
-    if test -n "$gl_LIBOBJS"; then
-      # Remove the extension.
-      sed_drop_objext='s/\.o$//;s/\.obj$//'
-      for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
-        gl_libobjs="$gl_libobjs $i.$ac_objext"
-        gl_ltlibobjs="$gl_ltlibobjs $i.lo"
-      done
-    fi
-    gl_LIBOBJS=$gl_libobjs
-
-    gl_LTLIBOBJS=$gl_ltlibobjs
-
-
-
-    gltests_libobjs=
-    gltests_ltlibobjs=
-    if test -n "$gltests_LIBOBJS"; then
-      # Remove the extension.
-      sed_drop_objext='s/\.o$//;s/\.obj$//'
-      for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
-        gltests_libobjs="$gltests_libobjs $i.$ac_objext"
-        gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
-      done
-    fi
-    gltests_LIBOBJS=$gltests_libobjs
-
-    gltests_LTLIBOBJS=$gltests_ltlibobjs
-
-
-if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  as_fn_error "conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
- if test -n "$EXEEXT"; then
-  am__EXEEXT_TRUE=
-  am__EXEEXT_FALSE='#'
-else
-  am__EXEEXT_TRUE='#'
-  am__EXEEXT_FALSE=
-fi
-
 
 
 : ${CONFIG_STATUS=./config.status}
@@ -16862,7 +14090,6 @@ gives unlimited permission to copy, distribute and modify it."
 ac_pwd='$ac_pwd'
 srcdir='$srcdir'
 INSTALL='$INSTALL'
-MKDIR_P='$MKDIR_P'
 AWK='$AWK'
 test -n "\$AWK" || AWK=awk
 _ACEOF
@@ -16963,7 +14190,6 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 # INIT-COMMANDS
 #
 ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR
-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
 
 _ACEOF
 
@@ -16975,13 +14201,11 @@ do
   case $ac_config_target in
     "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;;
     "depdir") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir" ;;
-    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "jit-reader.h") CONFIG_FILES="$CONFIG_FILES jit-reader.h:jit-reader.in" ;;
     "$ac_config_links_1") CONFIG_LINKS="$CONFIG_LINKS $ac_config_links_1" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-    ".gdbinit") CONFIG_FILES="$CONFIG_FILES .gdbinit:gdbinit.in" ;;
+    "gdb-gdb.gdb") CONFIG_FILES="$CONFIG_FILES gdb-gdb.gdb" ;;
     "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
-    "gnulib/Makefile") CONFIG_FILES="$CONFIG_FILES gnulib/Makefile" ;;
     "data-directory/Makefile") CONFIG_FILES="$CONFIG_FILES data-directory/Makefile" ;;
     "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
 
@@ -17457,11 +14681,6 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
   [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
   *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
   esac
-  ac_MKDIR_P=$MKDIR_P
-  case $MKDIR_P in
-  [\\/$]* | ?:[\\/]* ) ;;
-  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
-  esac
 _ACEOF
 
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
@@ -17516,7 +14735,6 @@ s&@builddir@&$ac_builddir&;t t
 s&@abs_builddir@&$ac_abs_builddir&;t t
 s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
 s&@INSTALL@&$ac_INSTALL&;t t
-s&@MKDIR_P@&$ac_MKDIR_P&;t t
 $ac_datarootdir_hack
 "
 eval sed \"\$ac_sed_extra\" "$ac_file_inputs" |
@@ -17565,40 +14783,6 @@ $as_echo "$as_me: $ac_file is unchanged" >&6;}
       && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
       || as_fn_error "could not create -" "$LINENO" 5
   fi
-# Compute "$ac_file"'s index in $config_headers.
-_am_arg="$ac_file"
-_am_stamp_count=1
-for _am_header in $config_headers :; do
-  case $_am_header in
-    $_am_arg | $_am_arg:* )
-      break ;;
-    * )
-      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-  esac
-done
-echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
-$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$_am_arg" : 'X\(//\)[^/]' \| \
-	 X"$_am_arg" : 'X\(//\)$' \| \
-	 X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$_am_arg" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`/stamp-h$_am_stamp_count
  ;;
   :L)
   #
@@ -17640,101 +14824,6 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
 
   case $ac_file$ac_mode in
     "depdir":C) $SHELL $ac_aux_dir/mkinstalldirs $DEPDIR ;;
-    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
-  # are listed without --file.  Let's play safe and only enable the eval
-  # if we detect the quoting.
-  case $CONFIG_FILES in
-  *\'*) eval set x "$CONFIG_FILES" ;;
-  *)   set x $CONFIG_FILES ;;
-  esac
-  shift
-  for mf
-  do
-    # Strip MF so we end up with the name of the file.
-    mf=`echo "$mf" | sed -e 's/:.*$//'`
-    # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named `Makefile.in', but
-    # some people rename them; so instead we look at the file content.
-    # Grep'ing the first line is not enough: some people post-process
-    # each Makefile.in and add a new line on top of each file to say so.
-    # Grep'ing the whole file is not good either: AIX grep has a line
-    # limit of 2048, but all sed's we know have understand at least 4000.
-    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
-      dirpart=`$as_dirname -- "$mf" ||
-$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$mf" : 'X\(//\)[^/]' \| \
-	 X"$mf" : 'X\(//\)$' \| \
-	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$mf" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-    else
-      continue
-    fi
-    # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running `make'.
-    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-    test -z "$DEPDIR" && continue
-    am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "am__include" && continue
-    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # When using ansi2knr, U may be empty or an underscore; expand it
-    U=`sed -n 's/^U = //p' < "$mf"`
-    # Find all dependency output files, they are included files with
-    # $(DEPDIR) in their names.  We invoke sed twice because it is the
-    # simplest approach to changing $(DEPDIR) to its actual value in the
-    # expansion.
-    for file in `sed -n "
-      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
-      # Make sure the directory exists.
-      test -f "$dirpart/$file" && continue
-      fdir=`$as_dirname -- "$file" ||
-$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$file" : 'X\(//\)[^/]' \| \
-	 X"$file" : 'X\(//\)$' \| \
-	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      as_dir=$dirpart/$fdir; as_fn_mkdir_p
-      # echo "creating $dirpart/$file"
-      echo '# dummy' > "$dirpart/$file"
-    done
-  done
-}
- ;;
     "default":C)
 case x$CONFIG_HEADERS in
 xconfig.h:config.in)
diff --git a/gdb/configure.ac b/gdb/configure.ac
index 2fc39ff..15c4f16 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -23,14 +23,19 @@ AC_INIT(main.c)
 AC_CONFIG_HEADER(config.h:config.in)
 AM_MAINTAINER_MODE
 
+# Provide more thorough testing by -lmcheck.
+# Set it to 'true' for development snapshots, 'false' for releases or
+# pre-releases.
+development=false
+
 AC_PROG_CC
 AC_USE_SYSTEM_EXTENSIONS
-gl_EARLY
 ACX_LARGEFILE
 AM_PROG_CC_STDC
 
 AC_CONFIG_AUX_DIR(..)
 AC_CANONICAL_SYSTEM
+AC_ARG_PROGRAM
 
 # Dependency checking.
 ZW_CREATE_DEPDIR
@@ -47,6 +52,12 @@ esac
 AM_CONDITIONAL(GMAKE, test "$MAKE_IS_GNU" = yes)
 AC_PROG_MAKE_SET
 
+# Configure gnulib.  We need to build gnulib under some other
+# directory not "gnulib", to avoid the problem of both GDB and
+# GDBserver wanting to build it in the same directory, when building
+# in the source dir.
+ACX_CONFIGURE_DIR(["gnulib"], ["build-gnulib"])
+
 dnl List of object files and targets accumulated by configure.
 
 CONFIG_OBS=
@@ -72,12 +83,12 @@ if test x"$USE_NLS" = xyes; then
    CONFIG_UNINSTALL="$CONFIG_UNINSTALL uninstall-po"
 fi
 
-gl_INIT
+GNULIB=build-gnulib/import
 
 # For Makefile dependencies.
 GNULIB_STDINT_H=
 if test x"$STDINT_H" != x; then
-  GNULIB_STDINT_H=gnulib/$STDINT_H
+  GNULIB_STDINT_H=$GNULIB/$STDINT_H
 fi
 AC_SUBST(GNULIB_STDINT_H)
 
@@ -105,14 +116,18 @@ if test x"$gdb_cv_have_makeinfo_click" = xyes; then
 fi
 AC_SUBST(MAKEINFO_EXTRA_FLAGS)
 
-# GDB does not use automake, but gnulib does.  This line lets us
-# generate its Makefile.in.
-AM_INIT_AUTOMAKE(gdb, UNUSED-VERSION, [no-define])
-
 GDB_AC_WITH_DIR(DEBUGDIR, separate-debug-dir,
     [look for global separate debug info in this path @<:@LIBDIR/debug@:>@],
     [${libdir}/debug])
 
+# We can't pass paths as command line arguments.
+# Mingw32 tries to be clever and will convert the paths for us.
+# For example -DBINDIR="/usr/local/bin" passed on the command line may get
+# converted to -DBINDIR="E:/msys/mingw32/msys/1.0/local/bin".
+# This breaks GDB's relocatable path conversions since paths passed in
+# config.h would not get so translated, the path prefixes no longer match.
+AC_DEFINE_DIR(BINDIR, bindir, [Directory of programs.])
+
 # GDB's datadir relocation
 
 GDB_AC_WITH_DIR(GDB_DATADIR, gdb-datadir,
@@ -126,6 +141,31 @@ AS_HELP_STRING([--with-relocated-sources=PATH], [automatically relocate this pat
               [Relocated directory for source files. ])
 ])
 
+AC_MSG_CHECKING([for default auto-load directory])
+AC_ARG_WITH(auto-load-dir,
+AS_HELP_STRING([--with-auto-load-dir=PATH],
+  [directories from which to load auto-loaded scripts @<:@$debugdir:$datadir/auto-load@:>@]),,
+  [with_auto_load_dir='$debugdir:$datadir/auto-load'])
+escape_dir=`echo $with_auto_load_dir | sed 's/[[$]]\(datadir\|debugdir\)\>/\\\\\\\\\\\\&/g'`
+AC_DEFINE_DIR(AUTO_LOAD_DIR, escape_dir,
+	      [Directories from which to load auto-loaded scripts.])
+AC_MSG_RESULT([$with_auto_load_dir])
+
+AC_MSG_CHECKING([for default auto-load safe-path])
+AC_ARG_WITH(auto-load-safe-path,
+AS_HELP_STRING([--with-auto-load-safe-path=PATH],
+  [directories safe to hold auto-loaded files @<:@--with-auto-load-dir@:>@])
+AS_HELP_STRING([--without-auto-load-safe-path],
+               [do not restrict auto-loaded files locations]),
+    [if test "$with_auto_load_safe_path" = "no"; then
+     with_auto_load_safe_path="/"
+     fi],
+[with_auto_load_safe_path="$with_auto_load_dir"])
+escape_dir=`echo $with_auto_load_safe_path | sed 's/[[$]]\(datadir\|debugdir\)\>/\\\\\\\\\\\\&/g'`
+AC_DEFINE_DIR(AUTO_LOAD_SAFE_PATH, escape_dir,
+	      [Directories safe to hold auto-loaded files.])
+AC_MSG_RESULT([$with_auto_load_safe_path])
+
 AC_CONFIG_SUBDIRS(testsuite)
 
 # Check whether to support alternative target configurations
@@ -320,26 +360,44 @@ case $host_os in
     enable_gdbtk=no ;;
 esac
 
-# Libunwind support.
-AC_ARG_WITH(libunwind,
-AS_HELP_STRING([--with-libunwind], [use libunwind frame unwinding support]),
-[case "${withval}" in
-  yes)  enable_libunwind=yes ;;
-  no)   enable_libunwind=no ;;
-  *)    AC_MSG_ERROR(bad value ${withval} for GDB with-libunwind option) ;;
-esac],[
-  AC_CHECK_HEADERS(libunwind.h libunwind-ia64.h)
-  if test x"$ac_cv_header_libunwind_h" = xyes -a x"$ac_cv_header_libunwind_ia64_h" = xyes; then
-    enable_libunwind=yes;
+# Libunwind support for ia64.
+
+AC_ARG_WITH(libunwind-ia64,
+AS_HELP_STRING([--with-libunwind-ia64],
+	       [use libunwind frame unwinding for ia64 targets]),,
+	    [with_libunwind_ia64=auto])
+
+# Backward compatibility option.
+if test "${with_libunwind+set}" = set; then
+  if test x"$with_libunwind_ia64" != xauto; then
+    AC_MSG_ERROR(
+      [option --with-libunwind is deprecated, use --with-libunwind-ia64])
   fi
-])
-   
-if test x"$enable_libunwind" = xyes; then
-  AC_CHECK_HEADERS(libunwind.h libunwind-ia64.h)
-  AC_DEFINE(HAVE_LIBUNWIND, 1, [Define if libunwind library is being used.])
-  CONFIG_OBS="$CONFIG_OBS libunwind-frame.o"
-  CONFIG_DEPS="$CONFIG_DEPS libunwind-frame.o"
-  CONFIG_SRCS="$CONFIG_SRCS libunwind-frame.c"
+  AC_MSG_WARN([option --with-libunwind is deprecated, use --with-libunwind-ia64])
+  with_libunwind_ia64="$with_libunwind"
+fi
+
+case "$with_libunwind_ia64" in
+  yes | no)
+    ;;
+  auto)
+    AC_CHECK_HEADERS(libunwind-ia64.h)
+    with_libunwind_ia64=$ac_cv_header_libunwind_ia64_h
+    ;;
+  *)
+    AC_MSG_ERROR(
+      [bad value $with_libunwind_ia64 for GDB --with-libunwind-ia64 option])
+    ;;
+esac
+
+if test x"$with_libunwind_ia64" = xyes; then
+  AC_CHECK_HEADERS(libunwind-ia64.h)
+  if test x"$ac_cv_header_libunwind_ia64_h" != xyes; then
+    AC_MSG_ERROR([GDB option --with-libunwind-ia64 requires libunwind-ia64.h])
+  fi
+  CONFIG_OBS="$CONFIG_OBS ia64-libunwind-tdep.o"
+  CONFIG_DEPS="$CONFIG_DEPS ia64-libunwind-tdep.o"
+  CONFIG_SRCS="$CONFIG_SRCS ia64-libunwind-tdep.c"
 fi
 
 opt_curses=no
@@ -531,10 +589,6 @@ if test x"$enable_tui" != xno; then
       CONFIG_DEPS="$CONFIG_DEPS \$(SUBDIR_TUI_DEPS)"
       CONFIG_SRCS="$CONFIG_SRCS \$(SUBDIR_TUI_SRCS)"
       ENABLE_CFLAGS="$ENABLE_CFLAGS \$(SUBDIR_TUI_CFLAGS)"
-      CONFIG_ALL="${CONFIG_ALL} all-tui"
-      CONFIG_CLEAN="${CONFIG_CLEAN} clean-tui"
-      CONFIG_INSTALL="${CONFIG_INSTALL} install-tui"
-      CONFIG_UNINSTALL="${CONFIG_UNINSTALL} uninstall-tui"
     else
       if test x"$enable_tui" = xyes; then
 	AC_MSG_ERROR([no enhanced curses library found; disable TUI])
@@ -591,6 +645,11 @@ AC_SUBST(READLINE_DEPS)
 AC_SUBST(READLINE_CFLAGS)
 AC_SUBST(READLINE_TEXI_INCFLAG)
 
+dnl -lmcheck provides cheap enough memory mangling for debugging purposes.
+if $development; then
+  AC_CHECK_LIB(mcheck, main)
+fi
+
 # Generate jit-reader.h
 
 # This is typedeffed to GDB_CORE_ADDR in jit-reader.h
@@ -718,7 +777,7 @@ if test "${with_python}" = no; then
   have_libpython=no
 else
   case "${with_python}" in
-  /*)
+  [[\\/]]* | ?:[[\\/]]*)
     if test -d ${with_python}; then
       # Assume the python binary is ${with_python}/bin/python.
       python_prog="${with_python}/bin/python"
@@ -963,14 +1022,14 @@ AC_HEADER_STDC
 # FIXME: kettenis/20030102: In most cases we include these (ctype.h, time.h)
 # unconditionally, so what's the point in checking these?
 AC_CHECK_HEADERS([nlist.h machine/reg.h poll.h sys/poll.h proc_service.h \
-                  thread_db.h gnu/libc-version.h signal.h stddef.h \
+                  thread_db.h signal.h stddef.h \
 		  stdlib.h string.h memory.h strings.h sys/fault.h \
 		  sys/file.h sys/filio.h sys/ioctl.h sys/param.h \
 		  sys/resource.h sys/procfs.h sys/ptrace.h ptrace.h \
 		  sys/reg.h sys/debugreg.h sys/select.h sys/syscall.h \
 		  sys/types.h sys/wait.h wait.h termios.h termio.h \
 		  sgtty.h unistd.h elf_hp.h ctype.h time.h locale.h \
-		  dlfcn.h])
+		  dlfcn.h sys/socket.h sys/un.h])
 AC_CHECK_HEADERS(link.h, [], [],
 [#if HAVE_SYS_TYPES_H
 # include <sys/types.h>
@@ -1047,11 +1106,12 @@ AC_C_BIGENDIAN
 AC_FUNC_ALLOCA
 AC_FUNC_MMAP
 AC_FUNC_VFORK
-AC_CHECK_FUNCS([canonicalize_file_name realpath getrusage getuid \
-		getgid pipe poll pread64 resize_term sbrk setpgid setpgrp setsid \
+AC_CHECK_FUNCS([canonicalize_file_name realpath getrusage getuid getgid \
+		pipe poll pread pread64 pwrite readlink resize_term \
+		sbrk setpgid setpgrp setsid \
 		sigaction sigprocmask sigsetmask socketpair syscall \
 		ttrace wborder wresize setlocale iconvlist libiconvlist btowc \
-		setrlimit getrlimit posix_madvise waitpid])
+		setrlimit getrlimit posix_madvise waitpid lstat])
 AM_LANGINFO_CODESET
 
 # Check the return and argument types of ptrace.  No canned test for
@@ -1214,6 +1274,12 @@ fi
 AC_CHECK_MEMBERS([struct reg.r_fs, struct reg.r_gs], [], [],
                  [#include <machine/reg.h>])
 
+# See if <sys/user.h> supports the %fs_base and %gs_bas amd64 segment registers.
+# Older amd64 Linux's don't have the fs_base and gs_base members of
+# `struct user_regs_struct'.
+AC_CHECK_MEMBERS([struct user_regs_struct.fs_base, struct user_regs_struct.gs_base],
+		 [], [], [#include <sys/user.h>])
+
 # See if <sys/ptrace.h> provides the PTRACE_GETREGS request.
 AC_MSG_CHECKING(for PTRACE_GETREGS)
 AC_CACHE_VAL(gdb_cv_have_ptrace_getregs,
@@ -1647,7 +1713,7 @@ if test ${build} = ${host} -a ${host} = ${target} ; then
       if test $gdb_cv_have_aix_thread_debug = yes; then
          CONFIG_SRCS="${CONFIG_SRCS} aix-thread.c"
          CONFIG_OBS="${CONFIG_OBS} aix-thread.o"
-         CONFIG_LDFLAGS="${CONFIG_LDFLAGS} -lpthdebug"
+         LIBS="$LIBS -lpthdebug"
 
          # Older versions of AIX do not provide the declaration for
          # the getthrds function (it appears that it was introduced
@@ -1745,42 +1811,20 @@ fi
 
 dnl Handle optional features that can be enabled.
 
-target_sysroot_reloc=0
+# Support for --with-sysroot is a copy of GDB_AC_WITH_DIR,
+# except that the argument to --with-sysroot is optional.
+# --with-sysroot (or --with-sysroot=yes) sets the default sysroot path.
+if test "x$with_sysroot" = xyes; then
+  with_sysroot="${exec_prefix}/${target_alias}/sys-root"
+fi
 AC_ARG_WITH(sysroot,
-AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [search for usr/lib et al within DIR]),
-[
- case ${with_sysroot} in
- yes) TARGET_SYSTEM_ROOT='${exec_prefix}/${target_alias}/sys-root' ;;
- *) TARGET_SYSTEM_ROOT=$with_sysroot ;;
- esac
-
- TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
-
- if test "x$prefix" = xNONE; then
-  test_prefix=/usr/local
- else
-  test_prefix=$prefix
- fi
- if test "x$exec_prefix" = xNONE || test "x$exec_prefix" = 'x${prefix}'; then
-  test_exec_prefix=$test_prefix
- else
-  test_exec_prefix=$exec_prefix
- fi
- case ${TARGET_SYSTEM_ROOT} in
- "${test_prefix}"|"${test_prefix}/"*|\
- "${test_exec_prefix}"|"${test_exec_prefix}/"*|\
- '${prefix}'|'${prefix}/'*|\
- '${exec_prefix}'|'${exec_prefix}/'*)
-   target_sysroot_reloc=1
-   ;;
- esac
-], [
- TARGET_SYSTEM_ROOT=
- TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"\"'
-])
-TARGET_SYSTEM_ROOT_DEFINE="$TARGET_SYSTEM_ROOT_DEFINE -DTARGET_SYSTEM_ROOT_RELOCATABLE=$target_sysroot_reloc"
+  AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@],
+                 [search for usr/lib et al within DIR]),
+  [TARGET_SYSTEM_ROOT=$withval], [TARGET_SYSTEM_ROOT=])
+AC_DEFINE_DIR(TARGET_SYSTEM_ROOT, TARGET_SYSTEM_ROOT,
+              [search for usr/lib et al within DIR])
 AC_SUBST(TARGET_SYSTEM_ROOT)
-AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE)
+GDB_AC_DEFINE_RELOCATABLE(TARGET_SYSTEM_ROOT, sysroot, ${ac_define_dir})
 
 GDB_AC_WITH_DIR(SYSTEM_GDBINIT, system-gdbinit,
     [automatically load a system-wide gdbinit file],
@@ -1794,6 +1838,11 @@ AC_ARG_ENABLE(werror,
      *) AC_MSG_ERROR(bad value ${enableval} for --enable-werror) ;;
    esac])
 
+# Enable -Werror by default when using gcc.  Turn it off for releases.
+if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" && $development; then
+    ERROR_ON_WARNING=yes
+fi
+
 WERROR_CFLAGS=""
 if test "${ERROR_ON_WARNING}" = yes ; then
     WERROR_CFLAGS="-Werror"
@@ -1807,7 +1856,8 @@ fi
 build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \
 -Wformat-nonliteral -Wno-pointer-sign \
 -Wno-unused -Wunused-value -Wunused-function \
--Wno-switch -Wno-char-subscripts"
+-Wno-switch -Wno-char-subscripts -Wmissing-prototypes \
+-Wdeclaration-after-statement"
 
 # Enable -Wno-format by default when using gcc on mingw since many
 # GCC versions complain about %I64.
@@ -1908,8 +1958,11 @@ AC_SUBST(WIN32LIBS)
 OLD_CFLAGS=$CFLAGS
 OLD_LDFLAGS=$LDFLAGS
 OLD_LIBS=$LIBS
-CFLAGS="$CFLAGS -I${srcdir}/../include -I../bfd -I${srcdir}/../bfd"
-LDFLAGS="$LDFLAGS -L../bfd -L../libiberty"
+# Put the old CFLAGS/LDFLAGS last, in case the user's (C|LD)FLAGS
+# points somewhere with bfd, with -I/foo/lib and -L/foo/lib.  We
+# always want our bfd.
+CFLAGS="-I${srcdir}/../include -I../bfd -I${srcdir}/../bfd $CFLAGS"
+LDFLAGS="-L../bfd -L../libiberty $LDFLAGS"
 intl=`echo $LIBINTL | sed 's,${top_builddir}/,,g'`
 # -ldl is provided by bfd/Makfile.am (LIBDL) <PLUGINS>.
 if test "$plugins" = "yes"; then
@@ -1925,7 +1978,7 @@ AC_CACHE_CHECK([for ELF support in BFD], gdb_cv_var_elf,
 [bfd *abfd = NULL; bfd_get_elf_phdr_upper_bound (abfd); ],
 gdb_cv_var_elf=yes, gdb_cv_var_elf=no)])
 if test $gdb_cv_var_elf = yes; then
-  CONFIG_OBS="$CONFIG_OBS elfread.o"
+  CONFIG_OBS="$CONFIG_OBS elfread.o stap-probe.o"
   AC_DEFINE(HAVE_ELF, 1,
 	    [Define if ELF support should be included.])
   # -ldl is provided by bfd/Makfile.am (LIBDL) <PLUGINS>.
@@ -2221,7 +2274,7 @@ dnl  At the moment, we just assume it's UTF-8.
 AC_DEFINE(GDB_DEFAULT_HOST_CHARSET, "UTF-8",
           [Define to be a string naming the default host character set.])
 
-AC_OUTPUT(Makefile .gdbinit:gdbinit.in doc/Makefile gnulib/Makefile data-directory/Makefile,
+AC_OUTPUT(Makefile gdb-gdb.gdb doc/Makefile data-directory/Makefile,
 [
 case x$CONFIG_HEADERS in
 xconfig.h:config.in)
diff --git a/gdb/configure.host b/gdb/configure.host
index 531f4587c..7dc35e1 100644
--- a/gdb/configure.host
+++ b/gdb/configure.host
@@ -50,6 +50,7 @@ powerpc* | rs6000)	gdb_host_cpu=powerpc ;;
 sparcv9 | sparc64)	gdb_host_cpu=sparc ;;
 s390*)			gdb_host_cpu=s390 ;;
 sh*)			gdb_host_cpu=sh ;;
+tilegx*)		gdb_host_cpu=tilegx ;;
 x86_64*)		gdb_host_cpu=i386 ;;
 m32r*)			gdb_host_cpu=m32r ;;
 xtensa*)		gdb_host_cpu=xtensa ;;
@@ -159,6 +160,8 @@ sparc-*-solaris2* | sparcv9-*-solaris2* | sparc64-*-solaris2*)
 			gdb_host=sol2
 			;;
 
+tilegx-*-linux*)	gdb_host=linux ;;
+
 vax-*-bsd*)		gdb_host=vax ;;
 vax-*-netbsdelf* | vax-*-knetbsd*-gnu)
 			gdb_host=nbsdelf ;;
diff --git a/gdb/configure.tgt b/gdb/configure.tgt
index 137deba..36d4304 100644
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -39,24 +39,23 @@ alpha*-*-osf*)
 alpha*-*-linux*)
 	# Target: Little-endian Alpha running Linux
 	gdb_target_obs="alpha-tdep.o alpha-mdebug-tdep.o alpha-linux-tdep.o \
-			linux-tdep.o solib.o solib-svr4.o"
+			linux-tdep.o solib-svr4.o"
 	;;
 alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
 	# Target: FreeBSD/alpha
 	gdb_target_obs="alpha-tdep.o alpha-mdebug-tdep.o alphabsd-tdep.o \
-			alphafbsd-tdep.o corelow.o solib.o solib-svr4.o"
+			alphafbsd-tdep.o solib-svr4.o"
 	;;
 alpha*-*-netbsd* | alpha*-*-knetbsd*-gnu)
 	# Target: NetBSD/alpha
 	gdb_target_obs="alpha-tdep.o alpha-mdebug-tdep.o alphabsd-tdep.o \
-			alphanbsd-tdep.o nbsd-tdep.o corelow.o solib.o \
-			solib-svr4.o"
+			alphanbsd-tdep.o nbsd-tdep.o solib-svr4.o"
 	;;
 alpha*-*-openbsd*)
 	# Target: OpenBSD/alpha
 	gdb_target_obs="alpha-tdep.o alpha-mdebug-tdep.o alphabsd-tdep.o \
 			alphanbsd-tdep.o alphaobsd-tdep.o nbsd-tdep.o \
-			obsd-tdep.o corelow.o solib.o solib-svr4.o"
+			obsd-tdep.o solib-svr4.o"
 	;;
 alpha*-*-*)
 	# Target: Alpha
@@ -66,33 +65,32 @@ alpha*-*-*)
 am33_2.0*-*-linux*)
 	# Target: Matsushita mn10300 (AM33) running Linux
 	gdb_target_obs="mn10300-tdep.o mn10300-linux-tdep.o linux-tdep.o \
-			corelow.o solib.o solib-svr4.o"
+			solib-svr4.o"
 	;;
 
 arm*-wince-pe | arm*-*-mingw32ce*)
 	# Target: ARM based machine running Windows CE (win32)
-	gdb_target_obs="arm-tdep.o arm-wince-tdep.o corelow.o \
-			solib.o solib-target.o"
+	gdb_target_obs="arm-tdep.o arm-wince-tdep.o"
 	build_gdbserver=yes
 	;;
 arm*-*-linux*)
 	# Target: ARM based machine running GNU/Linux
 	gdb_target_obs="arm-tdep.o arm-linux-tdep.o glibc-tdep.o \
-			solib.o solib-svr4.o symfile-mem.o corelow.o linux-tdep.o"
+			solib-svr4.o symfile-mem.o linux-tdep.o"
 	build_gdbserver=yes
 	;;
 arm*-*-netbsd* | arm*-*-knetbsd*-gnu)
 	# Target: NetBSD/arm
-	gdb_target_obs="arm-tdep.o armnbsd-tdep.o solib.o solib-svr4.o"
+	gdb_target_obs="arm-tdep.o armnbsd-tdep.o solib-svr4.o"
 	;;
 arm*-*-openbsd*)
 	# Target: OpenBSD/arm
 	gdb_target_obs="arm-tdep.o armbsd-tdep.o armobsd-tdep.o obsd-tdep.o \
-			corelow.o solib.o solib-svr4.o"
+			solib-svr4.o"
 	;;
 arm*-*-symbianelf*)
 	# Target: SymbianOS/arm
-	gdb_target_obs="arm-tdep.o solib-target.o arm-symbian-tdep.o"
+	gdb_target_obs="arm-tdep.o arm-symbian-tdep.o"
 	;;
 arm*-*-*)
 	# Target: ARM embedded system
@@ -120,13 +118,12 @@ bfin-*-*)
 
 cris*)
 	# Target: CRIS
-	gdb_target_obs="cris-tdep.o corelow.o solib.o solib-svr4.o"
+	gdb_target_obs="cris-tdep.o solib-svr4.o"
 	;;
 
 frv-*-*)
 	# Target: Fujitsu FRV processor
-	gdb_target_obs="frv-tdep.o frv-linux-tdep.o linux-tdep.o \
-			solib.o solib-frv.o corelow.o"
+	gdb_target_obs="frv-tdep.o frv-linux-tdep.o linux-tdep.o solib-frv.o"
 	gdb_sim=../sim/frv/libsim.a
 	;;
 
@@ -143,23 +140,20 @@ h8300-*-*)
 
 hppa*-*-hpux*)
 	# Target: HP PA-RISC running hpux
-	gdb_target_obs="hppa-tdep.o hppa-hpux-tdep.o corelow.o \
-			solib.o solib-som.o solib-pa64.o"
+	gdb_target_obs="hppa-tdep.o hppa-hpux-tdep.o solib-som.o solib-pa64.o"
 	;;
 hppa*-*-linux*)
 	# Target: HP PA-RISC running Linux
 	gdb_target_obs="hppa-tdep.o hppa-linux-tdep.o glibc-tdep.o \
-			linux-tdep.o solib.o solib-svr4.o symfile-mem.o"
+			linux-tdep.o solib-svr4.o symfile-mem.o"
 	;;
 hppa*-*-netbsd*)
 	# Target: NetBSD/hppa
-	gdb_target_obs="hppa-tdep.o hppabsd-tdep.o hppanbsd-tdep.o \
-			corelow.o solib.o solib-svr4.o"
+	gdb_target_obs="hppa-tdep.o hppabsd-tdep.o hppanbsd-tdep.o solib-svr4.o"
 	;;
 hppa*-*-openbsd*)
 	# Target: OpenBSD/hppa
-	gdb_target_obs="hppa-tdep.o hppabsd-tdep.o hppaobsd-tdep.o \
-			corelow.o solib.o solib-svr4.o"
+	gdb_target_obs="hppa-tdep.o hppabsd-tdep.o hppaobsd-tdep.o solib-svr4.o"
 	;;
 hppa*-*-*)
 	# Target: HP PA-RISC
@@ -169,7 +163,7 @@ hppa*-*-*)
 i[34567]86-*-darwin*)
 	# Target: Darwin/i386
 	gdb_target_obs="i386-tdep.o i387-tdep.o \
-			i386-darwin-tdep.o solib.o solib-darwin.o"
+			i386-darwin-tdep.o solib-darwin.o"
 	if test "x$enable_64_bit_bfd" = "xyes"; then
 	    # Target: GNU/Linux x86-64
 	    gdb_target_obs="amd64-tdep.o amd64-darwin-tdep.o ${gdb_target_obs}"
@@ -177,46 +171,43 @@ i[34567]86-*-darwin*)
 	;;
 i[34567]86-*-dicos*)
 	# Target: DICOS/i386
-	gdb_target_obs="i386-tdep.o i387-tdep.o \
-			dicos-tdep.o i386-dicos-tdep.o \
-			corelow.o solib.o solib-target.o"
+	gdb_target_obs="i386-tdep.o i387-tdep.o dicos-tdep.o i386-dicos-tdep.o"
 	;;
 i[34567]86-*-freebsd* | i[34567]86-*-kfreebsd*-gnu)
 	# Target: FreeBSD/i386
 	gdb_target_obs="i386-tdep.o i387-tdep.o i386bsd-tdep.o i386fbsd-tdep.o \
-			bsd-uthread.o corelow.o solib.o solib-svr4.o"
+			bsd-uthread.o solib-svr4.o"
 	;;
 i[34567]86-*-netbsd* | i[34567]86-*-knetbsd*-gnu)
 	# Target: NetBSD/i386
 	gdb_target_obs="i386-tdep.o i387-tdep.o i386bsd-tdep.o i386nbsd-tdep.o \
-			nbsd-tdep.o corelow.o solib.o solib-svr4.o"
+			nbsd-tdep.o solib-svr4.o"
 	;;
 i[34567]86-*-openbsd*)
 	# Target: OpenBSD/i386
 	gdb_target_obs="i386-tdep.o i387-tdep.o i386bsd-tdep.o i386obsd-tdep.o \
-			bsd-uthread.o corelow.o solib.o solib-svr4.o"
+			bsd-uthread.o solib-svr4.o"
 	;;
 i[34567]86-*-nto*)
 	# Target: Intel 386 running qnx6.
-	gdb_target_obs="i386-tdep.o i387-tdep.o corelow.o solib.o solib-svr4.o \
+	gdb_target_obs="i386-tdep.o i387-tdep.o solib-svr4.o \
 			i386-nto-tdep.o nto-tdep.o"
 	build_gdbserver=yes
 	;;
 i[34567]86-*-solaris2.1[0-9]* | x86_64-*-solaris2.1[0-9]*)
 	# Target: Solaris x86_64
 	gdb_target_obs="i386-tdep.o i387-tdep.o amd64-tdep.o amd64-sol2-tdep.o \
-			i386-sol2-tdep.o sol2-tdep.o \
-			corelow.o solib.o solib-svr4.o"
+			i386-sol2-tdep.o sol2-tdep.o solib-svr4.o"
 	;;
 i[34567]86-*-solaris*)
 	# Target: Solaris x86
 	gdb_target_obs="i386-tdep.o i387-tdep.o i386-sol2-tdep.o sol2-tdep.o \
-			corelow.o solib.o solib-svr4.o"
+			solib-svr4.o"
 	;;
 i[34567]86-*-linux*)
 	# Target: Intel 386 running GNU/Linux
 	gdb_target_obs="i386-tdep.o i386-linux-tdep.o glibc-tdep.o i387-tdep.o \
-			solib.o solib-svr4.o symfile-mem.o corelow.o \
+			solib-svr4.o symfile-mem.o \
 			linux-tdep.o linux-record.o"
 	if test "x$enable_64_bit_bfd" = "xyes"; then
 	    # Target: GNU/Linux x86-64
@@ -226,19 +217,18 @@ i[34567]86-*-linux*)
 	;;
 i[34567]86-*-gnu*)
 	# Target: Intel 386 running the GNU Hurd
-	gdb_target_obs="i386-tdep.o i387-tdep.o i386gnu-tdep.o \
-			solib.o solib-svr4.o"
+	gdb_target_obs="i386-tdep.o i387-tdep.o i386gnu-tdep.o solib-svr4.o"
 	;;
 i[34567]86-*-cygwin*)
 	# Target: Intel 386 running win32
 	gdb_target_obs="i386-tdep.o i386-cygwin-tdep.o i387-tdep.o \
-			solib-target.o corelow.o windows-tdep.o"
+			windows-tdep.o"
 	build_gdbserver=yes
 	;;
 i[34567]86-*-mingw32*)
 	# Target: Intel 386 running win32
 	gdb_target_obs="i386-tdep.o i386-cygwin-tdep.o i387-tdep.o \
-			solib-target.o corelow.o windows-tdep.o"
+			windows-tdep.o"
 	build_gdbserver=yes
 	;;
 i[34567]86-*-*)
@@ -253,9 +243,13 @@ ia64-*-hpux*)
 ia64-*-linux*)
 	# Target: Intel IA-64 running GNU/Linux
 	gdb_target_obs="ia64-tdep.o ia64-linux-tdep.o linux-tdep.o \
-			solib.o solib-svr4.o symfile-mem.o"
+			solib-svr4.o symfile-mem.o"
 	build_gdbserver=yes
 	;;
+ia64-*-*vms*)
+	# Target: Intel IA-64 running OpenVMS
+	gdb_target_obs="ia64-tdep.o ia64-vms-tdep.o"
+	;;
 ia64*-*-*)
 	# Target: Intel IA-64
 	gdb_target_obs="ia64-tdep.o"
@@ -273,7 +267,7 @@ lm32-*-*)
 
 m32c-*-*)
 	# Target: Renesas M32C family
-	gdb_target_obs="m32c-tdep.o prologue-value.o"
+	gdb_target_obs="m32c-tdep.o"
 	# There may also be a SID / CGEN simulator for this,
 	# but we do have DJ Delorie's mini-sim.
 	gdb_sim=../sim/m32c/libsim.a
@@ -282,7 +276,7 @@ m32c-*-*)
 m32r*-*-linux*)
 	# Target: Renesas M32R running GNU/Linux
 	gdb_target_obs="m32r-tdep.o m32r-linux-tdep.o remote-m32r-sdi.o \
-			glibc-tdep.o solib.o solib-svr4.o symfile-mem.o \
+			glibc-tdep.o solib-svr4.o symfile-mem.o \
 			linux-tdep.o"
 	gdb_sim=../sim/m32r/libsim.a
 	build_gdbserver=yes
@@ -307,37 +301,34 @@ fido-*-elf*)
 	;;
 m68*-*-linux*)
 	# Target: Motorola m68k with a.out and ELF
-	gdb_target_obs="m68k-tdep.o m68klinux-tdep.o solib.o solib-svr4.o \
+	gdb_target_obs="m68k-tdep.o m68klinux-tdep.o solib-svr4.o \
 			linux-tdep.o glibc-tdep.o symfile-mem.o"
 	build_gdbserver=yes
 	;;
 m68*-*-netbsd* | m68*-*-knetbsd*-gnu)
 	# Target: NetBSD/m68k
-	gdb_target_obs="m68k-tdep.o m68kbsd-tdep.o \
-			corelow.o solib.o solib-svr4.o"
+	gdb_target_obs="m68k-tdep.o m68kbsd-tdep.o solib-svr4.o"
 	;;
 m68*-*-openbsd*)
 	# Target: OpenBSD/m68k
-	gdb_target_obs="m68k-tdep.o m68kbsd-tdep.o \
-			corelow.o solib.o solib-svr4.o"
+	gdb_target_obs="m68k-tdep.o m68kbsd-tdep.o solib-svr4.o"
 	;;
 
 m88*-*-openbsd*)
 	# Target: OpenBSD/m88k
-	gdb_target_obs="m88k-tdep.o corelow.o"
+	gdb_target_obs="m88k-tdep.o"
 	;;
 
 mep-*-*)
 	# Target: Toshiba Media Processor (MEP)
-	gdb_target_obs="mep-tdep.o prologue-value.o"
+	gdb_target_obs="mep-tdep.o"
 	# No sim needed. Target uses SID.
 	;;
 
 microblaze*-linux-*|microblaze*-*-linux*)
 	# Target: Xilinx MicroBlaze running Linux
 	gdb_target_obs="microblaze-tdep.o microblaze-linux-tdep.o microblaze-rom.o \
-			monitor.o dsrec.o solib.o solib-svr4.o corelow.o \
-			symfile-mem.o linux-tdep.o"
+			monitor.o dsrec.o solib-svr4.o symfile-mem.o linux-tdep.o"
 	gdb_sim=../sim/microblaze/libsim.a
 	;;
 microblaze*-*-*)
@@ -348,30 +339,27 @@ microblaze*-*-*)
 
 mips*-sgi-irix5*)
 	# Target: MIPS SGI running Irix 5
-	gdb_target_obs="mips-tdep.o mips-irix-tdep.o solib.o solib-irix.o"
+	gdb_target_obs="mips-tdep.o mips-irix-tdep.o solib-irix.o"
 	;;
 mips*-sgi-irix6*)
 	# Target: MIPS SGI running Irix 6.x
-	gdb_target_obs="mips-tdep.o mips-irix-tdep.o solib.o solib-irix.o"
+	gdb_target_obs="mips-tdep.o mips-irix-tdep.o solib-irix.o"
 	;;
 mips*-*-linux*)
 	# Target: Linux/MIPS
 	gdb_target_obs="mips-tdep.o mips-linux-tdep.o glibc-tdep.o \
-			corelow.o solib.o solib-svr4.o symfile-mem.o \
-			linux-tdep.o"
+			solib-svr4.o symfile-mem.o linux-tdep.o"
 	gdb_sim=../sim/mips/libsim.a
 	build_gdbserver=yes
 	;;
 mips*-*-netbsd* | mips*-*-knetbsd*-gnu)
 	# Target: MIPS running NetBSD
-	gdb_target_obs="mips-tdep.o mipsnbsd-tdep.o \
-			corelow.o solib.o solib-svr4.o nbsd-tdep.o"
+	gdb_target_obs="mips-tdep.o mipsnbsd-tdep.o solib-svr4.o nbsd-tdep.o"
 	gdb_sim=../sim/mips/libsim.a
 	;;
 mips64*-*-openbsd*)
 	# Target: OpenBSD/mips64
-	gdb_target_obs="mips-tdep.o mips64obsd-tdep.o \
-			corelow.o solib.o solib-svr4.o"
+	gdb_target_obs="mips-tdep.o mips64obsd-tdep.o solib-svr4.o"
 	;;
 mips*-*-elf)
 	# Target: MIPS ELF
@@ -398,31 +386,31 @@ mt-*-*)
 powerpc-*-netbsd* | powerpc-*-knetbsd*-gnu)
 	# Target: NetBSD/powerpc
 	gdb_target_obs="rs6000-tdep.o ppc-sysv-tdep.o ppcnbsd-tdep.o \
-			corelow.o solib.o solib-svr4.o"
+			solib-svr4.o"
 	gdb_sim=../sim/ppc/libsim.a
 	;;
 powerpc-*-openbsd*)
 	# Target: OpenBSD/powerpc
 	gdb_target_obs="rs6000-tdep.o ppc-sysv-tdep.o ppcobsd-tdep.o \
-			corelow.o solib.o solib-svr4.o"
+			solib-svr4.o"
 	;;
 powerpc-*-aix* | rs6000-*-*)
 	# Target: PowerPC running AIX
 	gdb_target_obs="rs6000-tdep.o rs6000-aix-tdep.o xcoffread.o \
-			ppc-sysv-tdep.o solib.o solib-svr4.o"
+			ppc-sysv-tdep.o solib-svr4.o"
 	;;
 powerpc-*-linux* | powerpc64-*-linux*)
 	# Target: PowerPC running Linux
 	gdb_target_obs="rs6000-tdep.o ppc-linux-tdep.o ppc-sysv-tdep.o \
-			solib.o solib-svr4.o solib-spu.o spu-multiarch.o \
-			corelow.o symfile-mem.o linux-tdep.o"
+			solib-svr4.o solib-spu.o spu-multiarch.o \
+			glibc-tdep.o symfile-mem.o linux-tdep.o"
 	gdb_sim=../sim/ppc/libsim.a
 	build_gdbserver=yes
 	;;
 powerpc*-*-*)
 	# Target: PowerPC running eabi
 	gdb_target_obs="rs6000-tdep.o monitor.o dsrec.o ppcbug-rom.o \
-			dink32-rom.o ppc-sysv-tdep.o solib.o solib-svr4.o"
+			dink32-rom.o ppc-sysv-tdep.o solib-svr4.o"
 	if test -f ../sim/ppc/Makefile; then
 	  gdb_sim=../sim/ppc/libsim.a
 	fi
@@ -430,10 +418,16 @@ powerpc*-*-*)
 
 s390*-*-*)
 	# Target: S390 running Linux
-	gdb_target_obs="s390-tdep.o solib.o solib-svr4.o linux-tdep.o"
+	gdb_target_obs="s390-tdep.o solib-svr4.o linux-tdep.o"
 	build_gdbserver=yes
 	;;
 
+rl78-*-elf)
+	# Target: Renesas rl78
+	gdb_target_obs="rl78-tdep.o"
+	gdb_sim=../sim/rl78/libsim.a
+	;;
+
 rx-*-elf)
 	# Target: Renesas RX
 	gdb_target_obs="rx-tdep.o"
@@ -442,7 +436,7 @@ rx-*-elf)
 
 score-*-*)
 	# Target: S+core embedded system
-	gdb_target_obs="score-tdep.o corelow.o"
+	gdb_target_obs="score-tdep.o"
 	if test -f ../sim/score/Makefile; then
 	  gdb_sim=../sim/score/libsim.a
 	fi
@@ -452,20 +446,19 @@ score-*-*)
 sh*-*-linux*)
 	# Target: GNU/Linux Super-H
 	gdb_target_obs="sh-tdep.o sh64-tdep.o sh-linux-tdep.o monitor.o \
-			dsrec.o solib.o solib-svr4.o symfile-mem.o \
-			glibc-tdep.o corelow.o linux-tdep.o"
+			dsrec.o solib-svr4.o symfile-mem.o \
+			glibc-tdep.o linux-tdep.o"
 	gdb_sim=../sim/sh/libsim.a
 	build_gdbserver=yes
 	;;
 sh*-*-netbsdelf* | sh*-*-knetbsd*-gnu)
 	# Target: NetBSD/sh
-	gdb_target_obs="sh-tdep.o shnbsd-tdep.o corelow.o solib.o solib-svr4.o"
+	gdb_target_obs="sh-tdep.o shnbsd-tdep.o solib-svr4.o"
 	gdb_sim=../sim/sh/libsim.a
 	;;
 sh*-*-openbsd*)
 	# Target: OpenBSD/sh
-	gdb_target_obs="sh-tdep.o sh64-tdep.o shnbsd-tdep.o \
-			corelow.o solib.o solib-svr4.o"
+	gdb_target_obs="sh-tdep.o sh64-tdep.o shnbsd-tdep.o solib-svr4.o"
 	;;
 sh64-*-elf*)
 	# Target: Renesas/Super-H 64 bit with simulator
@@ -481,59 +474,55 @@ sh*)
 sparc-*-linux*)
 	# Target: GNU/Linux SPARC
 	gdb_target_obs="sparc-tdep.o sparc-sol2-tdep.o sol2-tdep.o \
-			sparc-linux-tdep.o solib.o solib-svr4.o symfile-mem.o \
+			sparc-linux-tdep.o solib-svr4.o symfile-mem.o \
 			linux-tdep.o"
 	if test "x$enable_64_bit_bfd" = "xyes"; then
 	    # Target: GNU/Linux UltraSPARC
 	    gdb_target_obs="sparc64-tdep.o sparc64-sol2-tdep.o \
 			    sparc64-linux-tdep.o ${gdb_target_obs}"
 	fi
+	build_gdbserver=yes
 	;;
 sparc64-*-linux*)
 	# Target: GNU/Linux UltraSPARC
 	gdb_target_obs="sparc64-tdep.o sparc64-sol2-tdep.o sol2-tdep.o \
 			sparc64-linux-tdep.o sparc-tdep.o sparc-sol2-tdep.o \
-			sparc-linux-tdep.o solib.o solib-svr4.o linux-tdep.o"
+			sparc-linux-tdep.o solib-svr4.o linux-tdep.o"
 	build_gdbserver=yes
 	;;
 sparc*-*-freebsd* | sparc*-*-kfreebsd*-gnu)
 	# Target: FreeBSD/sparc64
 	gdb_target_obs="sparc-tdep.o sparc64-tdep.o sparc64fbsd-tdep.o \
-			corelow.o solib.o solib-svr4.o"
+			solib-svr4.o"
 	;;
 sparc-*-netbsd* | sparc-*-knetbsd*-gnu)
 	# Target: NetBSD/sparc
-	gdb_target_obs="sparc-tdep.o sparcnbsd-tdep.o nbsd-tdep.o \
-			corelow.o solib.o solib-svr4.o"
+	gdb_target_obs="sparc-tdep.o sparcnbsd-tdep.o nbsd-tdep.o solib-svr4.o"
 	;;
 sparc64-*-netbsd* | sparc64-*-knetbsd*-gnu)
 	# Target: NetBSD/sparc64
 	gdb_target_obs="sparc64-tdep.o sparc64nbsd-tdep.o sparc-tdep.o \
-			sparcnbsd-tdep.o nbsd-tdep.o \
-			corelow.o solib.o solib-svr4.o"
+			sparcnbsd-tdep.o nbsd-tdep.o solib-svr4.o"
 	;;
 sparc-*-openbsd*)
 	# Target: OpenBSD/sparc
 	gdb_target_obs="sparc-tdep.o sparcnbsd-tdep.o sparcobsd-tdep.o \
-			nbsd-tdep.o obsd-tdep.o bsd-uthread.o \
-			corelow.o solib.o solib-svr4.o"
+			nbsd-tdep.o obsd-tdep.o bsd-uthread.o solib-svr4.o"
 	;;
 sparc64-*-openbsd*)
 	# Target: OpenBSD/sparc64
 	gdb_target_obs="sparc64-tdep.o sparc64nbsd-tdep.o sparc64obsd-tdep.o \
 			sparc-tdep.o sparcnbsd-tdep.o sparcobsd-tdep.o \
-			nbsd-tdep.o obsd-tdep.o bsd-uthread.o \
-			corelow.o solib.o solib-svr4.o"
+			nbsd-tdep.o obsd-tdep.o bsd-uthread.o solib-svr4.o"
 	;;
 sparc-*-solaris2.[0-6] | sparc-*-solaris2.[0-6].*)
 	# Target: Solaris SPARC
-	gdb_target_obs="sparc-tdep.o sparc-sol2-tdep.o sol2-tdep.o \
-			solib.o solib-svr4.o"
+	gdb_target_obs="sparc-tdep.o sparc-sol2-tdep.o sol2-tdep.o solib-svr4.o"
 	;;
 sparc-*-solaris2* | sparcv9-*-solaris2* | sparc64-*-solaris2*)
 	# Target: Solaris UltraSPARC
 	gdb_target_obs="sparc64-tdep.o sparc64-sol2-tdep.o sparc-tdep.o \
-			sparc-sol2-tdep.o sol2-tdep.o solib.o solib-svr4.o"
+			sparc-sol2-tdep.o sol2-tdep.o solib-svr4.o"
 	;;
 sparc-*-*)
 	# Target: SPARC
@@ -555,7 +544,7 @@ spu*-*-*)
 tic6x-*-*linux)
 	# Target: GNU/Linux TI C6x
 	gdb_target_obs="tic6x-tdep.o tic6x-linux-tdep.o solib-dsbt.o \
-			glibc-tdep.o corelow.o linux-tdep.o"
+			glibc-tdep.o linux-tdep.o"
 	;;
 
 tic6x-*-*)
@@ -563,13 +552,19 @@ tic6x-*-*)
 	gdb_target_obs="tic6x-tdep.o"
 	;;
 
+tilegx-*-linux*)
+        # Target: TILE-Gx
+        gdb_target_obs="tilegx-tdep.o tilegx-linux-tdep.o solib-svr4.o \
+			symfile-mem.o glibc-tdep.o linux-tdep.o"
+        ;;
+
 xstormy16-*-*)
 	# Target: Sanyo Xstormy16a processor
 	gdb_target_obs="xstormy16-tdep.o"
 	# No simulator libraries are needed -- target uses SID.
 	;;
 
-v850*-*-elf)
+v850*-*-elf | v850*-*-rtems*)
 	# Target: NEC V850 processor
 	gdb_target_obs="v850-tdep.o"
 	gdb_sim=../sim/v850/libsim.a
@@ -577,12 +572,11 @@ v850*-*-elf)
 
 vax-*-netbsd* | vax-*-knetbsd*-gnu)
 	# Target: NetBSD/vax
-	gdb_target_obs="vax-tdep.o vaxnbsd-tdep.o \
-			corelow.o solib.o solib-svr4.o"
+	gdb_target_obs="vax-tdep.o vaxnbsd-tdep.o solib-svr4.o"
 	;;
 vax-*-openbsd*)
 	# Target: OpenBSD/vax
-	gdb_target_obs="vax-tdep.o vaxobsd-tdep.o corelow.o"
+	gdb_target_obs="vax-tdep.o vaxobsd-tdep.o"
 	;;
 vax-*-*)
 	# Target: VAX running 4.2BSD or Ultrix
@@ -593,57 +587,54 @@ x86_64-*-darwin*)
 	# Target: Darwin/x86-64
 	gdb_target_obs="amd64-tdep.o i386-tdep.o i387-tdep.o \
 			i386-darwin-tdep.o amd64-darwin-tdep.o \
-                        solib.o solib-darwin.o"
+                        solib-darwin.o"
 	;;
 
 x86_64-*-dicos*)
 	# Target: DICOS/x86-64
 	gdb_target_obs="amd64-tdep.o i386-tdep.o i387-tdep.o \
-			dicos-tdep.o i386-dicos-tdep.o amd64-dicos-tdep.o \
-			corelow.o solib.o solib-target.o"
+			dicos-tdep.o i386-dicos-tdep.o amd64-dicos-tdep.o"
 	;;
 x86_64-*-linux*)
 	# Target: GNU/Linux x86-64
 	gdb_target_obs="amd64-tdep.o amd64-linux-tdep.o i386-tdep.o \
 			i387-tdep.o i386-linux-tdep.o glibc-tdep.o \
-			solib.o solib-svr4.o corelow.o symfile-mem.o linux-tdep.o \
-			linux-record.o"
+			solib-svr4.o symfile-mem.o linux-tdep.o linux-record.o"
 	build_gdbserver=yes
 	;;
 x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
 	# Target: FreeBSD/amd64
 	gdb_target_obs="amd64-tdep.o amd64fbsd-tdep.o i386-tdep.o \
 			i387-tdep.o i386bsd-tdep.o i386fbsd-tdep.o \
-			bsd-uthread.o corelow.o solib.o solib-svr4.o"
+			bsd-uthread.o solib-svr4.o"
 	;;
 x86_64-*-mingw*)
         # Target: MingW/amd64
 	gdb_target_obs="amd64-tdep.o amd64-windows-tdep.o \
                         i386-tdep.o i386-cygwin-tdep.o i387-tdep.o \
-                        solib-target.o windows-tdep.o"
+                        windows-tdep.o"
 	build_gdbserver=yes
         ;;
 x86_64-*-netbsd* | x86_64-*-knetbsd*-gnu)
 	# Target: NetBSD/amd64
 	gdb_target_obs="amd64-tdep.o amd64nbsd-tdep.o i386-tdep.o i387-tdep.o \
-			nbsd-tdep.o corelow.o solib.o solib-svr4.o"
+			nbsd-tdep.o solib-svr4.o"
 	;;
 x86_64-*-openbsd*)
 	# Target: OpenBSD/amd64
 	gdb_target_obs="amd64-tdep.o amd64obsd-tdep.o i386-tdep.o \
 			i387-tdep.o i386bsd-tdep.o i386obsd-tdep.o \
-			bsd-uthread.o corelow.o solib.o solib-svr4.o"
+			bsd-uthread.o solib-svr4.o"
 	;;
 xtensa*-*-linux*)	gdb_target=linux
 	# Target: GNU/Linux Xtensa
 	gdb_target_obs="xtensa-tdep.o xtensa-config.o xtensa-linux-tdep.o \
-			solib.o solib-svr4.o corelow.o symfile-mem.o \
-			linux-tdep.o"
+			solib-svr4.o symfile-mem.o linux-tdep.o"
 	build_gdbserver=yes
 	;;
 xtensa*)
 	# Target: Tensilica Xtensa processors
-	gdb_target_obs="xtensa-tdep.o xtensa-config.o solib.o solib-svr4.o"
+	gdb_target_obs="xtensa-tdep.o xtensa-config.o solib-svr4.o"
 	;;
 
 esac
diff --git a/gdb/contrib/test_pubnames_and_indexes.py b/gdb/contrib/test_pubnames_and_indexes.py
new file mode 100644
index 0000000..12d6d6d
--- /dev/null
+++ b/gdb/contrib/test_pubnames_and_indexes.py
@@ -0,0 +1,207 @@
+#! /usr/bin/env python
+
+# Copyright (C) 2011-2012 Free Software Foundation, Inc.
+#
+# This file is part of GDB.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# This program requires readelf, gdb and objcopy.  The default values are gdb
+# from the build tree and objcopy and readelf from $PATH.  They may be
+# overridden by setting environment variables GDB, READELF and OBJCOPY
+# respectively.  We assume the current directory is either $obj/gdb or
+# $obj/gdb/testsuite.
+#
+# Example usage:
+#
+# bash$ cd $objdir/gdb/testsuite
+# bash$ python test_pubnames_and_indexes.py <binary_name>
+
+"""test_pubnames_and_indexes.py
+
+Test that the gdb_index produced by gold is identical to the gdb_index
+produced by gdb itself.
+
+Further check that the pubnames and pubtypes produced by gcc are identical
+to those that gdb produces.
+
+Finally, check that all strings are canonicalized identically.
+"""
+
+__author__ = 'saugustine at google.com (Sterling Augustine)'
+
+import os
+import subprocess
+import sys
+
+OBJCOPY = None
+READELF = None
+GDB = None
+
+def get_pub_info(filename, readelf_option):
+  """Parse and return all the pubnames or pubtypes produced by readelf with the
+  given option.
+  """
+  readelf = subprocess.Popen([READELF, '--debug-dump=' + readelf_option,
+                                       filename], stdout=subprocess.PIPE)
+  pubnames = []
+
+  in_list = False;
+  for line in readelf.stdout:
+    fields = line.split(None, 1)
+    if (len(fields) == 2 and fields[0] == 'Offset'
+        and fields[1].strip() == 'Name'):
+      in_list = True
+    # Either a blank-line or a new Length field terminates the current section.
+    elif (len(fields) == 0 or fields[0] == 'Length:'):
+      in_list = False;
+    elif (in_list):
+      pubnames.append(fields[1].strip())
+
+  readelf.wait()
+  return pubnames
+
+
+def get_gdb_index(filename):
+  """Use readelf to dump the gdb index and collect the types and names"""
+  readelf = subprocess.Popen([READELF, '--debug-dump=gdb_index',
+                              filename], stdout=subprocess.PIPE)
+  index_symbols = []
+  symbol_table_started = False
+  for line in readelf.stdout:
+    if (line == 'Symbol table:\n'):
+      symbol_table_started = True;
+    elif (symbol_table_started):
+      # Readelf prints gdb-index lines formatted like so:
+      # [  4] two::c2<double>::c2: 0
+      # So take the string between the first close bracket and the last colon.
+      index_symbols.append(line[line.find(']') + 2: line.rfind(':')])
+
+  readelf.wait()
+  return index_symbols
+
+
+def CheckSets(list0, list1, name0, name1):
+  """Report any setwise differences between the two lists"""
+
+  if len(list0) == 0 or len(list1) == 0:
+    return False
+
+  difference0 = set(list0) - set(list1)
+  if len(difference0) != 0:
+    print "Elements in " + name0 + " but not " + name1 + ": (",
+    print len(difference0),
+    print ")"
+    for element in difference0:
+      print "  " + element
+
+  difference1 = set(list1) - set(list0)
+  if len(difference1) != 0:
+    print "Elements in " + name1 + " but not " + name0 + ": (",
+    print len(difference1),
+    print ")"
+    for element in difference1:
+      print "  " + element
+
+  if (len(difference0) != 0 or len(difference1) != 0):
+    return True
+
+  print name0 + " and " + name1 + " are identical."
+  return False
+
+
+def find_executables():
+  """Find the copies of readelf, objcopy and gdb to use."""
+  # Executable finding logic follows cc-with-index.sh
+  global READELF
+  READELF = os.getenv('READELF')
+  if READELF is None:
+    READELF = 'readelf'
+  global OBJCOPY
+  OBJCOPY = os.getenv('OBJCOPY')
+  if OBJCOPY is None:
+    OBJCOPY = 'objcopy'
+
+  global GDB
+  GDB = os.getenv('GDB')
+  if (GDB is None):
+    if os.path.isfile('./gdb') and os.access('./gdb', os.X_OK):
+      GDB = './gdb'
+    elif os.path.isfile('../gdb') and os.access('../gdb', os.X_OK):
+      GDB = '../gdb'
+    elif os.path.isfile('../../gdb') and os.access('../../gdb', os.X_OK):
+      GDB = '../../gdb'
+    else:
+      # Punt and use the gdb in the path.
+      GDB = 'gdb'
+
+
+def main(argv):
+  """The main subprogram."""
+  if len(argv) != 2:
+    print "Usage: test_pubnames_and_indexes.py <filename>"
+    sys.exit(2)
+
+  find_executables();
+
+  # Get the index produced by Gold--It should have been built into the binary.
+  gold_index = get_gdb_index(argv[1])
+
+  # Collect the pubnames and types list
+  pubs_list = get_pub_info(argv[1], "pubnames")
+  pubs_list = pubs_list + get_pub_info(argv[1], "pubtypes")
+
+  # Generate a .gdb_index with gdb
+  gdb_index_file = argv[1] + '.gdb-generated-index'
+  subprocess.check_call([OBJCOPY, '--remove-section', '.gdb_index',
+                         argv[1], gdb_index_file])
+  subprocess.check_call([GDB, '-batch', '-nx', gdb_index_file,
+                         '-ex', 'save gdb-index ' + os.path.dirname(argv[1]),
+                         '-ex', 'quit'])
+  subprocess.check_call([OBJCOPY, '--add-section',
+                         '.gdb_index=' + gdb_index_file + '.gdb-index',
+                         gdb_index_file])
+  gdb_index = get_gdb_index(gdb_index_file)
+  os.remove(gdb_index_file)
+  os.remove(gdb_index_file + '.gdb-index')
+
+  failed = False
+  gdb_index.sort()
+  gold_index.sort()
+  pubs_list.sort()
+
+  # Find the differences between the various indices.
+  if len(gold_index) == 0:
+    print "Gold index is empty"
+    failed |= True
+
+  if len(gdb_index) == 0:
+    print "Gdb index is empty"
+    failed |= True
+
+  if len(pubs_list) == 0:
+    print "Pubs list is empty"
+    failed |= True
+
+  failed |= CheckSets(gdb_index, gold_index, "gdb index", "gold index")
+  failed |= CheckSets(pubs_list, gold_index, "pubs list", "gold index")
+  failed |= CheckSets(pubs_list, gdb_index, "pubs list", "gdb index")
+
+  if failed:
+    print "Test failed"
+    sys.exit(1)
+
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/gdb/copyright.py b/gdb/copyright.py
index 71f261d..30ead5d 100644
--- a/gdb/copyright.py
+++ b/gdb/copyright.py
@@ -1,608 +1,280 @@
 #! /usr/bin/env python
 
+# Copyright (C) 2011-2012 Free Software Foundation, Inc.
+#
+# This file is part of GDB.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
 """copyright.py
 
-This script updates most of the files that are not already handled
-by copyright.sh.  It must be run from the gdb/ subdirectory of the
-GDB source tree.
+This script updates the list of years in the copyright notices in
+most files maintained by the GDB project.
+
+Usage: cd src/gdb && python copyright.py
 
+Always review the output of this script before committing it!
+A useful command to review the output is:
+    % filterdiff -x \*.c -x \*.cc -x \*.h -x \*.exp updates.diff
+This removes the bulk of the changes which are most likely to be correct.
 """
 
 import datetime
-import re
 import os
 import os.path
+import subprocess
+
 
-class Comment(object):
-    """A class describing comment.
-
-    ATTRIBUTES
-      start:  A string describing how comments are started.
-      stop:   A string describing how comments end.  If None, then
-              a comment ends at the end of the line.
-      start2: Some files accept more than 1 kind of comment.
-              For those that do, this is the alternative form.
-              For now, it is assumed that if start2 is not None,
-              then stop is None (thus no stop2 attribute).
+def get_update_list():
+    """Return the list of files to update.
+
+    Assumes that the current working directory when called is the root
+    of the GDB source tree (NOT the gdb/ subdirectory!).  The names of
+    the files are relative to that root directory.
+    """
+    result = []
+    for gdb_dir in ('gdb', 'sim', 'include/gdb'):
+        for root, dirs, files in os.walk(gdb_dir, topdown=True):
+            for dirname in dirs:
+                reldirname = "%s/%s" % (root, dirname)
+                if (dirname in EXCLUDE_ALL_LIST
+                    or reldirname in EXCLUDE_LIST
+                    or reldirname in NOT_FSF_LIST
+                    or reldirname in BY_HAND):
+                    # Prune this directory from our search list.
+                    dirs.remove(dirname)
+            for filename in files:
+                relpath = "%s/%s" % (root, filename)
+                if (filename in EXCLUDE_ALL_LIST
+                    or relpath in EXCLUDE_LIST
+                    or relpath in NOT_FSF_LIST
+                    or relpath in BY_HAND):
+                    # Ignore this file.
+                    pass
+                else:
+                    result.append(relpath)
+    return result
+
+
+def update_files(update_list):
+    """Update the copyright header of the files in the given list.
+
+    We use gnulib's update-copyright script for that.
     """
-    def __init__(self, start, stop=None, start2=None, max_lines=30):
-        """The "Copyright" keyword should be within MAX_LINES lines
-        from the start of the file."""
-        self.start = start
-        self.stop = stop
-        self.start2 = start2
-        self.max_lines = max_lines
+    # We want to use year intervals in the copyright notices, and
+    # all years should be collapsed to one single year interval,
+    # even if there are "holes" in the list of years found in the
+    # original copyright notice (OK'ed by the FSF, case [gnu.org #719834]).
+    os.environ['UPDATE_COPYRIGHT_USE_INTERVALS'] = '2'
+
+    # Perform the update, and save the output in a string.
+    update_cmd = ['bash', 'gdb/gnulib/import/extra/update-copyright']
+    update_cmd += update_list
+
+    p = subprocess.Popen(update_cmd, stdout=subprocess.PIPE,
+                         stderr=subprocess.STDOUT)
+    update_out = p.communicate()[0]
+
+    # Process the output.  Typically, a lot of files do not have
+    # a copyright notice :-(.  The update-copyright script prints
+    # a well defined warning when it did not find the copyright notice.
+    # For each of those, do a sanity check and see if they may in fact
+    # have one.  For the files that are found not to have one, we filter
+    # the line out from the output, since there is nothing more to do,
+    # short of looking at each file and seeing which notice is appropriate.
+    # Too much work! (~4,000 files listed as of 2012-01-03).
+    update_out = update_out.splitlines()
+    warning_string = ': warning: copyright statement not found'
+    warning_len = len(warning_string)
+
+    for line in update_out:
+        if line.endswith('\n'):
+            line = line[:-1]
+        if line.endswith(warning_string):
+            filename = line[:-warning_len]
+            if may_have_copyright_notice(filename):
+                print line
+        else:
+            # Unrecognized file format. !?!
+            print "*** " + line
+
+
+def may_have_copyright_notice(filename):
+    """Check that the given file does not seem to have a copyright notice.
 
-# The Comment object for Ada code (and GPR files).
-ADA_COMMENT = Comment(start="--")
+    The filename is relative to the root directory.
+    This function assumes that the current working directory is that root
+    directory.
 
-THIS_YEAR = str(datetime.date.today().year)
+    The algorigthm is fairly crude, meaning that it might return
+    some false positives.  I do not think it will return any false
+    negatives...  We might improve this function to handle more
+    complex cases later...
+    """
+    # For now, it may have a copyright notice if we find the word
+    # "Copyright" at the (reasonable) start of the given file, say
+    # 50 lines...
+    MAX_LINES = 50
+
+    fd = open(filename)
+
+    lineno = 1
+    for line in fd:
+        if 'Copyright' in line:
+            return True
+        lineno += 1
+        if lineno > 50:
+            return False
+    return False
+
+
+def main ():
+    """The main subprogram."""
+    if not os.path.isfile("gnulib/import/extra/update-copyright"):
+        print "Error: This script must be called from the gdb directory."
+    root_dir = os.path.dirname(os.getcwd())
+    os.chdir(root_dir)
+
+    update_list = get_update_list()
+    update_files (update_list)
+
+    # Remind the user that some files need to be updated by HAND...
+    if BY_HAND:
+        print
+        print "\033[31mREMINDER: The following files must be updated by hand." \
+              "\033[0m"
+        for filename in BY_HAND + MULTIPLE_COPYRIGHT_HEADERS:
+            print "  ", filename
+
+############################################################################
+#
+# Some constants, placed at the end because they take up a lot of room.
+# The actual value of these constants is not significant to the understanding
+# of the script.
+#
+############################################################################
 
 # Files which should not be modified, either because they are
 # generated, non-FSF, or otherwise special (e.g. license text,
 # or test cases which must be sensitive to line numbering).
-EXCLUSION_LIST = (
-  "COPYING", "COPYING.LIB", "CVS", "configure", "copying.c", "gdbarch.c",
-  "gdbarch.h", "fdl.texi", "gpl.texi", "gdbtk", "gdb.gdbtk", "osf-share",
-  "aclocal.m4", "step-line.inp", "step-line.c",
-  )
-
-# Files that are too different from the rest to be processed automatically.
-BY_HAND = ['../sim/ppc/psim.texinfo']
-
-# Files for which we know that they do not have a copyright header.
-# Ideally, this list should be empty (but it may not be possible to
-# add a copyright header in some of them).
-NO_COPYRIGHT = (
-   # Configure files.  We should fix those, one day.
-   "testsuite/gdb.cell/configure.ac", "testsuite/gdb.hp/configure.ac",
-   "testsuite/gdb.hp/gdb.aCC/configure.ac",
-   "testsuite/gdb.hp/gdb.base-hp/configure.ac",
-   "testsuite/gdb.hp/gdb.compat/configure.ac",
-   "testsuite/gdb.hp/gdb.defects/configure.ac",
-   "testsuite/gdb.hp/gdb.objdbg/configure.ac",
-   "testsuite/gdb.stabs/configure.ac",
-   "../sim/arm/configure.ac", "../sim/avr/configure.ac",
-   "../sim/common/configure.ac", "../sim/configure.ac",
-   "../sim/cr16/configure.ac", "../sim/cris/configure.ac",
-   "../sim/d10v/configure.ac", "../sim/erc32/configure.ac",
-   "../sim/frv/configure.ac", "../sim/h8300/configure.ac",
-   "../sim/igen/configure.ac", "../sim/iq2000/configure.ac",
-   "../sim/lm32/configure.ac", "../sim/m32r/configure.ac",
-   "../sim/m68hc11/configure.ac", "../sim/mcore/configure.ac",
-   "../sim/microblaze/configure.ac", "../sim/mips/configure.ac",
-   "../sim/mn10300/configure.ac", "../sim/moxie/configure.ac",
-   "../sim/ppc/configure.ac", "../sim/sh/configure.ac",
-   "../sim/sh64/configure.ac", "../sim/testsuite/configure.ac",
-   "../sim/testsuite/d10v-elf/configure.ac",
-   "../sim/testsuite/frv-elf/configure.ac",
-   "../sim/testsuite/m32r-elf/configure.ac",
-   "../sim/testsuite/mips64el-elf/configure.ac", "../sim/v850/configure.ac",
-   # Assembly files.  It's not certain that we can add a copyright
-   # header in a way that works for all platforms supported by the
-   # testcase...
-   "testsuite/gdb.arch/pa-nullify.s", "testsuite/gdb.arch/pa64-nullify.s",
-   "testsuite/gdb.asm/asmsrc1.s", "testsuite/gdb.asm/asmsrc2.s",
-   "testsuite/gdb.disasm/am33.s", "testsuite/gdb.disasm/h8300s.s",
-   "testsuite/gdb.disasm/hppa.s", "testsuite/gdb.disasm/mn10200.s",
-   "testsuite/gdb.disasm/mn10300.s", "testsuite/gdb.disasm/sh3.s",
-   "testsuite/gdb.disasm/t01_mov.s", "testsuite/gdb.disasm/t02_mova.s",
-   "testsuite/gdb.disasm/t03_add.s", "testsuite/gdb.disasm/t04_sub.s",
-   "testsuite/gdb.disasm/t05_cmp.s", "testsuite/gdb.disasm/t06_ari2.s",
-   "testsuite/gdb.disasm/t07_ari3.s", "testsuite/gdb.disasm/t08_or.s",
-   "testsuite/gdb.disasm/t09_xor.s", "testsuite/gdb.disasm/t10_and.s",
-   "testsuite/gdb.disasm/t11_logs.s", "testsuite/gdb.disasm/t12_bit.s",
-   "testsuite/gdb.disasm/t13_otr.s", "testsuite/gdb.hp/gdb.base-hp/reg-pa64.s",
-   "testsuite/gdb.hp/gdb.base-hp/reg.s",
-   "../sim/testsuite/d10v-elf/exit47.s",
-   "../sim/testsuite/d10v-elf/hello.s",
-   "../sim/testsuite/d10v-elf/loop.s",
-   "../sim/testsuite/d10v-elf/t-ae-ld-d.s",
-   "../sim/testsuite/d10v-elf/t-ae-ld-i.s",
-   "../sim/testsuite/d10v-elf/t-ae-ld-id.s",
-   "../sim/testsuite/d10v-elf/t-ae-ld-im.s",
-   "../sim/testsuite/d10v-elf/t-ae-ld-ip.s",
-   "../sim/testsuite/d10v-elf/t-ae-ld2w-d.s",
-   "../sim/testsuite/d10v-elf/t-ae-ld2w-i.s",
-   "../sim/testsuite/d10v-elf/t-ae-ld2w-id.s",
-   "../sim/testsuite/d10v-elf/t-ae-ld2w-im.s",
-   "../sim/testsuite/d10v-elf/t-ae-ld2w-ip.s",
-   "../sim/testsuite/d10v-elf/t-ae-st-d.s",
-   "../sim/testsuite/d10v-elf/t-ae-st-i.s",
-   "../sim/testsuite/d10v-elf/t-ae-st-id.s",
-   "../sim/testsuite/d10v-elf/t-ae-st-im.s",
-   "../sim/testsuite/d10v-elf/t-ae-st-ip.s",
-   "../sim/testsuite/d10v-elf/t-ae-st-is.s",
-   "../sim/testsuite/d10v-elf/t-ae-st2w-d.s",
-   "../sim/testsuite/d10v-elf/t-ae-st2w-i.s",
-   "../sim/testsuite/d10v-elf/t-ae-st2w-id.s",
-   "../sim/testsuite/d10v-elf/t-ae-st2w-im.s",
-   "../sim/testsuite/d10v-elf/t-ae-st2w-ip.s",
-   "../sim/testsuite/d10v-elf/t-ae-st2w-is.s",
-   "../sim/testsuite/d10v-elf/t-dbt.s",
-   "../sim/testsuite/d10v-elf/t-ld-st.s",
-   "../sim/testsuite/d10v-elf/t-mac.s",
-   "../sim/testsuite/d10v-elf/t-mod-ld-pre.s",
-   "../sim/testsuite/d10v-elf/t-msbu.s",
-   "../sim/testsuite/d10v-elf/t-mulxu.s",
-   "../sim/testsuite/d10v-elf/t-mvtac.s",
-   "../sim/testsuite/d10v-elf/t-mvtc.s",
-   "../sim/testsuite/d10v-elf/t-rac.s",
-   "../sim/testsuite/d10v-elf/t-rachi.s",
-   "../sim/testsuite/d10v-elf/t-rdt.s",
-   "../sim/testsuite/d10v-elf/t-rep.s",
-   "../sim/testsuite/d10v-elf/t-rie-xx.s",
-   "../sim/testsuite/d10v-elf/t-rte.s",
-   "../sim/testsuite/d10v-elf/t-sac.s",
-   "../sim/testsuite/d10v-elf/t-sachi.s",
-   "../sim/testsuite/d10v-elf/t-sadd.s",
-   "../sim/testsuite/d10v-elf/t-slae.s",
-   "../sim/testsuite/d10v-elf/t-sp.s",
-   "../sim/testsuite/d10v-elf/t-sub.s",
-   "../sim/testsuite/d10v-elf/t-sub2w.s",
-   "../sim/testsuite/d10v-elf/t-subi.s",
-   "../sim/testsuite/d10v-elf/t-trap.s",
-   "../sim/testsuite/frv-elf/cache.s",
-   "../sim/testsuite/frv-elf/exit47.s",
-   "../sim/testsuite/frv-elf/grloop.s",
-   "../sim/testsuite/frv-elf/hello.s",
-   "../sim/testsuite/frv-elf/loop.s",
-   "../sim/testsuite/m32r-elf/exit47.s",
-   "../sim/testsuite/m32r-elf/hello.s",
-   "../sim/testsuite/m32r-elf/loop.s",
-   "../sim/testsuite/sim/cris/hw/rv-n-cris/quit.s",
-   "../sim/testsuite/sim/h8300/addb.s",
-   "../sim/testsuite/sim/h8300/addl.s",
-   "../sim/testsuite/sim/h8300/adds.s",
-   "../sim/testsuite/sim/h8300/addw.s",
-   "../sim/testsuite/sim/h8300/addx.s",
-   "../sim/testsuite/sim/h8300/andb.s",
-   "../sim/testsuite/sim/h8300/andl.s",
-   "../sim/testsuite/sim/h8300/andw.s",
-   "../sim/testsuite/sim/h8300/band.s",
-   "../sim/testsuite/sim/h8300/bfld.s",
-   "../sim/testsuite/sim/h8300/biand.s",
-   "../sim/testsuite/sim/h8300/bra.s",
-   "../sim/testsuite/sim/h8300/brabc.s",
-   "../sim/testsuite/sim/h8300/bset.s",
-   "../sim/testsuite/sim/h8300/cmpb.s",
-   "../sim/testsuite/sim/h8300/cmpl.s",
-   "../sim/testsuite/sim/h8300/cmpw.s",
-   "../sim/testsuite/sim/h8300/daa.s",
-   "../sim/testsuite/sim/h8300/das.s",
-   "../sim/testsuite/sim/h8300/dec.s",
-   "../sim/testsuite/sim/h8300/div.s",
-   "../sim/testsuite/sim/h8300/extl.s",
-   "../sim/testsuite/sim/h8300/extw.s",
-   "../sim/testsuite/sim/h8300/inc.s",
-   "../sim/testsuite/sim/h8300/jmp.s",
-   "../sim/testsuite/sim/h8300/ldc.s",
-   "../sim/testsuite/sim/h8300/ldm.s",
-   "../sim/testsuite/sim/h8300/mac.s",
-   "../sim/testsuite/sim/h8300/mova.s",
-   "../sim/testsuite/sim/h8300/movb.s",
-   "../sim/testsuite/sim/h8300/movl.s",
-   "../sim/testsuite/sim/h8300/movmd.s",
-   "../sim/testsuite/sim/h8300/movsd.s",
-   "../sim/testsuite/sim/h8300/movw.s",
-   "../sim/testsuite/sim/h8300/mul.s",
-   "../sim/testsuite/sim/h8300/neg.s",
-   "../sim/testsuite/sim/h8300/nop.s",
-   "../sim/testsuite/sim/h8300/not.s",
-   "../sim/testsuite/sim/h8300/orb.s",
-   "../sim/testsuite/sim/h8300/orl.s",
-   "../sim/testsuite/sim/h8300/orw.s",
-   "../sim/testsuite/sim/h8300/rotl.s",
-   "../sim/testsuite/sim/h8300/rotr.s",
-   "../sim/testsuite/sim/h8300/rotxl.s",
-   "../sim/testsuite/sim/h8300/rotxr.s",
-   "../sim/testsuite/sim/h8300/shal.s",
-   "../sim/testsuite/sim/h8300/shar.s",
-   "../sim/testsuite/sim/h8300/shll.s",
-   "../sim/testsuite/sim/h8300/shlr.s",
-   "../sim/testsuite/sim/h8300/stack.s",
-   "../sim/testsuite/sim/h8300/stc.s",
-   "../sim/testsuite/sim/h8300/subb.s",
-   "../sim/testsuite/sim/h8300/subl.s",
-   "../sim/testsuite/sim/h8300/subs.s",
-   "../sim/testsuite/sim/h8300/subw.s",
-   "../sim/testsuite/sim/h8300/subx.s",
-   "../sim/testsuite/sim/h8300/tas.s",
-   "../sim/testsuite/sim/h8300/xorb.s",
-   "../sim/testsuite/sim/h8300/xorl.s",
-   "../sim/testsuite/sim/h8300/xorw.s",
-   "../sim/testsuite/sim/mips/fpu64-ps-sb1.s",
-   "../sim/testsuite/sim/mips/fpu64-ps.s",
-   "../sim/testsuite/sim/mips/hilo-hazard-1.s",
-   "../sim/testsuite/sim/mips/hilo-hazard-2.s",
-   "../sim/testsuite/sim/mips/hilo-hazard-3.s",
-   "../sim/testsuite/sim/mips/mdmx-ob-sb1.s",
-   "../sim/testsuite/sim/mips/mdmx-ob.s",
-   "../sim/testsuite/sim/mips/mips32-dsp.s",
-   "../sim/testsuite/sim/mips/mips32-dsp2.s",
-   "../sim/testsuite/sim/mips/sanity.s",
-   "../sim/testsuite/sim/sh/add.s",
-   "../sim/testsuite/sim/sh/and.s",
-   "../sim/testsuite/sim/sh/bandor.s",
-   "../sim/testsuite/sim/sh/bandornot.s",
-   "../sim/testsuite/sim/sh/bclr.s",
-   "../sim/testsuite/sim/sh/bld.s",
-   "../sim/testsuite/sim/sh/bldnot.s",
-   "../sim/testsuite/sim/sh/bset.s",
-   "../sim/testsuite/sim/sh/bst.s",
-   "../sim/testsuite/sim/sh/bxor.s",
-   "../sim/testsuite/sim/sh/clip.s",
-   "../sim/testsuite/sim/sh/div.s",
-   "../sim/testsuite/sim/sh/dmxy.s",
-   "../sim/testsuite/sim/sh/fabs.s",
-   "../sim/testsuite/sim/sh/fadd.s",
-   "../sim/testsuite/sim/sh/fail.s",
-   "../sim/testsuite/sim/sh/fcmpeq.s",
-   "../sim/testsuite/sim/sh/fcmpgt.s",
-   "../sim/testsuite/sim/sh/fcnvds.s",
-   "../sim/testsuite/sim/sh/fcnvsd.s",
-   "../sim/testsuite/sim/sh/fdiv.s",
-   "../sim/testsuite/sim/sh/fipr.s",
-   "../sim/testsuite/sim/sh/fldi0.s",
-   "../sim/testsuite/sim/sh/fldi1.s",
-   "../sim/testsuite/sim/sh/flds.s",
-   "../sim/testsuite/sim/sh/float.s",
-   "../sim/testsuite/sim/sh/fmac.s",
-   "../sim/testsuite/sim/sh/fmov.s",
-   "../sim/testsuite/sim/sh/fmul.s",
-   "../sim/testsuite/sim/sh/fneg.s",
-   "../sim/testsuite/sim/sh/fpchg.s",
-   "../sim/testsuite/sim/sh/frchg.s",
-   "../sim/testsuite/sim/sh/fsca.s",
-   "../sim/testsuite/sim/sh/fschg.s",
-   "../sim/testsuite/sim/sh/fsqrt.s",
-   "../sim/testsuite/sim/sh/fsrra.s",
-   "../sim/testsuite/sim/sh/fsub.s",
-   "../sim/testsuite/sim/sh/ftrc.s",
-   "../sim/testsuite/sim/sh/ldrc.s",
-   "../sim/testsuite/sim/sh/loop.s",
-   "../sim/testsuite/sim/sh/macl.s",
-   "../sim/testsuite/sim/sh/macw.s",
-   "../sim/testsuite/sim/sh/mov.s",
-   "../sim/testsuite/sim/sh/movi.s",
-   "../sim/testsuite/sim/sh/movli.s",
-   "../sim/testsuite/sim/sh/movua.s",
-   "../sim/testsuite/sim/sh/movxy.s",
-   "../sim/testsuite/sim/sh/mulr.s",
-   "../sim/testsuite/sim/sh/pabs.s",
-   "../sim/testsuite/sim/sh/padd.s",
-   "../sim/testsuite/sim/sh/paddc.s",
-   "../sim/testsuite/sim/sh/pand.s",
-   "../sim/testsuite/sim/sh/pass.s",
-   "../sim/testsuite/sim/sh/pclr.s",
-   "../sim/testsuite/sim/sh/pdec.s",
-   "../sim/testsuite/sim/sh/pdmsb.s",
-   "../sim/testsuite/sim/sh/pinc.s",
-   "../sim/testsuite/sim/sh/pmuls.s",
-   "../sim/testsuite/sim/sh/prnd.s",
-   "../sim/testsuite/sim/sh/pshai.s",
-   "../sim/testsuite/sim/sh/pshar.s",
-   "../sim/testsuite/sim/sh/pshli.s",
-   "../sim/testsuite/sim/sh/pshlr.s",
-   "../sim/testsuite/sim/sh/psub.s",
-   "../sim/testsuite/sim/sh/pswap.s",
-   "../sim/testsuite/sim/sh/pushpop.s",
-   "../sim/testsuite/sim/sh/resbank.s",
-   "../sim/testsuite/sim/sh/sett.s",
-   "../sim/testsuite/sim/sh/shll.s",
-   "../sim/testsuite/sim/sh/shll16.s",
-   "../sim/testsuite/sim/sh/shll2.s",
-   "../sim/testsuite/sim/sh/shll8.s",
-   "../sim/testsuite/sim/sh/shlr.s",
-   "../sim/testsuite/sim/sh/shlr16.s",
-   "../sim/testsuite/sim/sh/shlr2.s",
-   "../sim/testsuite/sim/sh/shlr8.s",
-   "../sim/testsuite/sim/sh/swap.s",
-   "../sim/testsuite/sim/sh64/misc/fr-dr.s",
-   # .inc files.  These are usually assembly or C files...
-   "testsuite/gdb.asm/alpha.inc",
-   "testsuite/gdb.asm/arm.inc",
-   "testsuite/gdb.asm/common.inc",
-   "testsuite/gdb.asm/empty.inc",
-   "testsuite/gdb.asm/frv.inc",
-   "testsuite/gdb.asm/h8300.inc",
-   "testsuite/gdb.asm/i386.inc",
-   "testsuite/gdb.asm/ia64.inc",
-   "testsuite/gdb.asm/iq2000.inc",
-   "testsuite/gdb.asm/m32c.inc",
-   "testsuite/gdb.asm/m32r-linux.inc",
-   "testsuite/gdb.asm/m32r.inc",
-   "testsuite/gdb.asm/m68hc11.inc",
-   "testsuite/gdb.asm/m68k.inc",
-   "testsuite/gdb.asm/mips.inc",
-   "testsuite/gdb.asm/netbsd.inc",
-   "testsuite/gdb.asm/openbsd.inc",
-   "testsuite/gdb.asm/pa.inc",
-   "testsuite/gdb.asm/pa64.inc",
-   "testsuite/gdb.asm/powerpc.inc",
-   "testsuite/gdb.asm/powerpc64.inc",
-   "testsuite/gdb.asm/s390.inc",
-   "testsuite/gdb.asm/s390x.inc",
-   "testsuite/gdb.asm/sh.inc",
-   "testsuite/gdb.asm/sparc.inc",
-   "testsuite/gdb.asm/sparc64.inc",
-   "testsuite/gdb.asm/spu.inc",
-   "testsuite/gdb.asm/v850.inc",
-   "testsuite/gdb.asm/x86_64.inc",
-   "testsuite/gdb.asm/xstormy16.inc",
-   "../sim/testsuite/sim/arm/iwmmxt/testutils.inc",
-   "../sim/testsuite/sim/arm/testutils.inc",
-   "../sim/testsuite/sim/arm/thumb/testutils.inc",
-   "../sim/testsuite/sim/arm/xscale/testutils.inc",
-   "../sim/testsuite/sim/cr16/testutils.inc",
-   "../sim/testsuite/sim/cris/asm/testutils.inc",
-   "../sim/testsuite/sim/cris/hw/rv-n-cris/testutils.inc",
-   "../sim/testsuite/sim/fr30/testutils.inc",
-   "../sim/testsuite/sim/frv/testutils.inc",
-   "../sim/testsuite/sim/h8300/testutils.inc",
-   "../sim/testsuite/sim/m32r/testutils.inc",
-   "../sim/testsuite/sim/sh/testutils.inc",
-   "../sim/testsuite/sim/sh64/compact/testutils.inc",
-   "../sim/testsuite/sim/sh64/media/testutils.inc",
-   "../sim/testsuite/sim/v850/testutils.inc",
-   )
-
-# A mapping between file extensions to their associated Comment object.
-# This dictionary also contains a number of exceptions, based on
-# filename.
-COMMENT_MAP = \
-  {".1" : Comment(start=r'.\"'),
-   ".ac" : Comment(start="dnl", start2="#"),
-   ".ads" : ADA_COMMENT,
-   ".adb" : ADA_COMMENT,
-   ".f" : Comment(start="c"),
-   ".f90" : Comment(start="!"),
-   ".gpr" : ADA_COMMENT,
-   ".inc" : Comment(start="#", start2=";"),
-   ".s" : Comment(start="!"),
-   ".tex" : Comment(start="%"),
-   ".texi" : Comment(start="@c"),
-   ".texinfo" : Comment(start="@c"),
-
-   # Files that use a different way of including the copyright
-   # header...
-   "ada-operator.inc" : Comment(start="/*", stop="*/"),
-   "gdbint.texinfo" : Comment(start='@copying', stop="@end copying"),
-   "annotate.texinfo" : Comment(start='@copying', stop="@end copying",
-                                max_lines=50),
-   "stabs.texinfo" : Comment(start='@copying', stop="@end copying"),
-  }
-
-class NotFound(Exception):
-    pass
-
-class AlreadyDone(Exception):
-    pass
-
-def process_header(src, dst, cdescr):
-    """Read from SRC for up to CDESCR.MAX_LINES until we find a copyright
-    notice.  If found, then write the entire file, with the copyright
-    noticed updated with the current year added.
-
-    Raises NotFound if the copyright notice could not be found or has
-    some inconsistencies.
-
-    Raises AlreadyDone if the copyright notice already includes the current
-    year.
-    """
-    line_count = 0
-    # The start-of-comment marker used for this file.  Only really useful
-    # in the case where comments ends at the end of the line, as this
-    # allows us to know which comment marker to use when breaking long
-    # lines (in the cases where there are more than one.
-    cdescr_start = ""
-
-    while True:
-        # If we still haven't found a copyright line within a certain
-        # number of lines, then give up.
-        if line_count > cdescr.max_lines:
-            raise NotFound("start of Copyright not found")
-
-        line = src.readline()
-        line_count += 1
-        if not line:
-            raise NotFound("start of Copyright not found (EOF)")
-
-        # Is this a copyright line?  If not, then no transformation is
-        # needed.  Write it as is, and continue.
-        if not re.search(r"Copyright\b.*\b(199\d|20\d\d)\b", line):
-            dst.write(line)
-            continue
-
-        # If a start-of-comment marker is needed for every line, try to
-        # figure out which one it is that is being used in this file (most
-        # files only accept one, in which case it's easy - but some accept
-        # two or more...).
-        if cdescr.stop is None:
-            stripped_line = line.lstrip()
-            if stripped_line.startswith(cdescr.start):
-                cdescr_start = cdescr.start
-            elif (cdescr.start2 is not None
-                  and stripped_line.startswith(cdescr.start2)):
-                cdescr_start = cdescr.start2
-            elif cdescr.start in stripped_line:
-                cdescr_start = cdescr.start
-            elif (cdescr.start2 is not None
-                  and cdescr.start2 in stripped_line):
-                cdescr_start = cdescr.start2
-            else:
-                # This can't be a line with a comment, so not the copyright
-                # line we were looking for.  Ignore.
-                continue
-
-        comment = line
-        break
-
-    while not re.search(r"Free\s+Software\s+Foundation", comment):
-        line = src.readline()
-        line_count += 1
-        if not line:
-            raise NotFound("Copyright owner not found (EOF)")
-
-        if cdescr.stop is None:
-            # Expect a new comment marker at the start of each line
-            line = line.lstrip()
-            if not line.startswith(cdescr_start):
-                raise NotFound("Copyright owner not found "
-                               "(end of comment)")
-            comment += " " + line[len(cdescr_start):]
-        else:
-            if cdescr.stop in comment:
-                raise NotFound("Copyright owner not found "
-                               "(end of comment)")
-            comment += line
-
-    # Normalize a bit the copyright string (we preserve the string
-    # up until "Copyright", in order to help preserve any original
-    # alignment.
-    (before, after) = comment.split("Copyright", 1)
-    after = after.replace("\n", " ")
-    after = re.sub("\s+", " ", after)
-    after = after.rstrip()
-
-    # If the copyright year has already been added, the nothing else
-    # to do.
-    if THIS_YEAR in after:
-        raise AlreadyDone
-
-    m = re.match("(.*[0-9]+)(.*)", after)
-    if m is None:
-        raise NotFound("Internal error - cannot split copyright line: "
-                       "`%s'" % comment)
-
-    # Reconstruct the comment line
-    comment = before + "Copyright" + m.group(1) + ', %s' % THIS_YEAR
-    owner_part = m.group(2).lstrip()
-
-    # Max comment len...
-    max_len = 76
-
-    # If we have to break the copyright line into multiple lines,
-    # we want to align all the lines on the "Copyright" keyword.
-    # Create a small "indent" string that we can use for that.
-    if cdescr.stop is None:
-        # The comment marker is needed on every line, so put it at the
-        # start of our "indent" string.
-        indent = cdescr_start + ' ' * (len(before) - len(cdescr_start))
-    else:
-        indent = ' ' * len(before)
-
-    # If the line is too long...
-    while len(comment) > max_len:
-        # Split the line at the first space before max_len.
-        space_index = comment[0:max_len].rfind(' ')
-        if space_index < 0:  # No space in the first max_len characters???
-            # Split at the first space, then...
-            space_index = comment.find(' ')
-        if space_index < 0:
-            # Still no space found.  This is extremely unlikely, but
-            # just pretend there is one at the end of the string.
-            space_index = len(comment)
-
-        # Write the first part of the string up until the space
-        # we selected to break our line.
-        dst.write(comment[:space_index] + '\n')
-
-        # Strip the part of comment that we have finished printing.
-        if space_index < len(comment):
-            comment = comment[space_index + 1:]
-        else:
-            comment = ""
-
-        # Prepend the "indent" string to make sure that we remain
-        # aligned on the "Copyright" word.
-        comment = indent + comment
-
-    # And finally, write the rest of the last line...  We want to write
-    # "Free Software Foundation, Inc" on the same line, so handle this
-    # with extra care.
-    dst.write(comment)
-    if len(comment) + 1 + len (owner_part) > max_len:
-        dst.write('\n' + indent)
-    else:
-        dst.write(' ')
-    dst.write(owner_part + '\n')
-
-def comment_for_filename(filename):
-    """Return the Comment object that best describes the given file.
-    This a smart lookup of the COMMENT_MAP dictionary where we check
-    for filename-based exceptions first, before looking up the comment
-    by filename extension.  """
-    # First, consult the COMMENT_MAP using the filename, in case this
-    # file needs special treatment.
-    basename = os.path.basename(filename)
-    if basename in COMMENT_MAP:
-        return COMMENT_MAP[basename]
-    # Not a special file.  Check the file extension.
-    ext = os.path.splitext(filename)[1]
-    if ext in COMMENT_MAP:
-        return COMMENT_MAP[ext]
-    # Not a know extension either, return None.
-    return None
-
-def process_file(filename):
-    """Processes the given file.
-    """
-    cdescr = comment_for_filename(filename)
-    if cdescr is None:
-        # Either no filename extension, or not an extension that we
-        # know how to handle.
-        return
-
-    dst_filename = filename + '.new'
-    src = open(filename)
-    dst = open(dst_filename, 'w')
-    try:
-        process_header(src, dst, cdescr)
-    except AlreadyDone:
-        print "+++ Already up to date: `%s'." % filename
-        dst.close()
-        os.unlink(dst_filename)
-        if filename in NO_COPYRIGHT:
-            # We expect the search for a copyright header to fail, and
-            # yet we found one...
-            print "Warning: `%s' should not be in NO_COPYRIGHT" % filename
-        return
-    except NotFound as inst:
-        dst.close()
-        os.unlink(dst_filename)
-        if not filename in NO_COPYRIGHT:
-            print "*** \033[31m%s\033[0m: %s" % (filename, inst)
-        return
-
-    if filename in NO_COPYRIGHT:
-        # We expect the search for a copyright header to fail, and
-        # yet we found one...
-        print "Warning: `%s' should not be in NO_COPYRIGHT" % filename
-
-    for line in src:
-        dst.write(line)
-    src.close()
-    dst.close()
-    os.rename(dst_filename, filename)
+#
+# Filenames are relative to the root directory.
+EXCLUDE_LIST = (
+    'gdb/CONTRIBUTE',
+    'gdb/gdbarch.c', 'gdb/gdbarch.h',
+    'gdb/gnulib'
+)
+
+# Files which should not be modified, either because they are
+# generated, non-FSF, or otherwise special (e.g. license text,
+# or test cases which must be sensitive to line numbering).
+#
+# Matches any file or directory name anywhere.  Use with caution.
+# This is mostly for files that can be found in multiple directories.
+# Eg: We want all files named COPYING to be left untouched.
+
+EXCLUDE_ALL_LIST = (
+    "COPYING", "COPYING.LIB", "CVS", "configure", "copying.c",
+    "fdl.texi", "gpl.texi", "aclocal.m4",
+)
+
+# The list of files to update by hand.
+BY_HAND = (
+    # These files are sensitive to line numbering.
+    "gdb/testsuite/gdb.base/step-line.inp",
+    "gdb/testsuite/gdb.base/step-line.c",
+)
+
+# Files containing multiple copyright headers.  This script is only
+# fixing the first one it finds, so we need to finish the update
+# by hand.
+MULTIPLE_COPYRIGHT_HEADERS = (
+    "gdb/doc/gdb.texinfo",
+    "gdb/doc/refcard.tex",
+)
+
+# The list of file which have a copyright, but not head by the FSF.
+# Filenames are relative to the root directory.
+NOT_FSF_LIST = (
+    "gdb/exc_request.defs",
+    "gdb/osf-share",
+    "gdb/gdbtk",
+    "gdb/testsuite/gdb.gdbtk/",
+    "sim/arm/armemu.h", "sim/arm/armos.c", "sim/arm/gdbhost.c",
+    "sim/arm/dbg_hif.h", "sim/arm/dbg_conf.h", "sim/arm/communicate.h",
+    "sim/arm/armos.h", "sim/arm/armcopro.c", "sim/arm/armemu.c",
+    "sim/arm/kid.c", "sim/arm/thumbemu.c", "sim/arm/armdefs.h",
+    "sim/arm/armopts.h", "sim/arm/dbg_cp.h", "sim/arm/dbg_rdi.h",
+    "sim/arm/parent.c", "sim/arm/armsupp.c", "sim/arm/armrdi.c",
+    "sim/arm/bag.c", "sim/arm/armvirt.c", "sim/arm/main.c", "sim/arm/bag.h",
+    "sim/arm/communicate.c", "sim/arm/gdbhost.h", "sim/arm/armfpe.h",
+    "sim/arm/arminit.c",
+    "sim/common/cgen-fpu.c", "sim/common/cgen-fpu.h", "sim/common/cgen-fpu.h",
+    "sim/common/cgen-accfp.c", "sim/common/sim-fpu.c",
+    "sim/erc32/sis.h", "sim/erc32/erc32.c", "sim/erc32/func.c",
+    "sim/erc32/float.c", "sim/erc32/interf.c", "sim/erc32/sis.c",
+    "sim/erc32/exec.c",
+    "sim/mips/m16run.c", "sim/mips/sim-main.c",
+    "sim/mn10300/sim-main.h",
+    "sim/moxie/moxie-gdb.dts",
+    # Not a single file in sim/ppc/ appears to be copyright FSF :-(.
+    "sim/ppc/filter.h", "sim/ppc/gen-support.h", "sim/ppc/ld-insn.h",
+    "sim/ppc/hw_sem.c", "sim/ppc/hw_disk.c", "sim/ppc/idecode_branch.h",
+    "sim/ppc/sim-endian.h", "sim/ppc/table.c", "sim/ppc/hw_core.c",
+    "sim/ppc/gen-support.c", "sim/ppc/gen-semantics.h", "sim/ppc/cpu.h",
+    "sim/ppc/sim_callbacks.h", "sim/ppc/RUN", "sim/ppc/Makefile.in",
+    "sim/ppc/emul_chirp.c", "sim/ppc/hw_nvram.c", "sim/ppc/dc-test.01",
+    "sim/ppc/hw_phb.c", "sim/ppc/hw_eeprom.c", "sim/ppc/bits.h",
+    "sim/ppc/hw_vm.c", "sim/ppc/cap.h", "sim/ppc/os_emul.h",
+    "sim/ppc/options.h", "sim/ppc/gen-idecode.c", "sim/ppc/filter.c",
+    "sim/ppc/corefile-n.h", "sim/ppc/std-config.h", "sim/ppc/ld-decode.h",
+    "sim/ppc/filter_filename.h", "sim/ppc/hw_shm.c",
+    "sim/ppc/pk_disklabel.c", "sim/ppc/dc-simple", "sim/ppc/misc.h",
+    "sim/ppc/device_table.h", "sim/ppc/ld-insn.c", "sim/ppc/inline.c",
+    "sim/ppc/emul_bugapi.h", "sim/ppc/hw_cpu.h", "sim/ppc/debug.h",
+    "sim/ppc/hw_ide.c", "sim/ppc/debug.c", "sim/ppc/gen-itable.h",
+    "sim/ppc/interrupts.c", "sim/ppc/hw_glue.c", "sim/ppc/emul_unix.c",
+    "sim/ppc/sim_calls.c", "sim/ppc/dc-complex", "sim/ppc/ld-cache.c",
+    "sim/ppc/registers.h", "sim/ppc/dc-test.02", "sim/ppc/options.c",
+    "sim/ppc/igen.h", "sim/ppc/registers.c", "sim/ppc/device.h",
+    "sim/ppc/emul_chirp.h", "sim/ppc/hw_register.c", "sim/ppc/hw_init.c",
+    "sim/ppc/sim-endian-n.h", "sim/ppc/filter_filename.c",
+    "sim/ppc/bits.c", "sim/ppc/idecode_fields.h", "sim/ppc/hw_memory.c",
+    "sim/ppc/misc.c", "sim/ppc/double.c", "sim/ppc/psim.h",
+    "sim/ppc/hw_trace.c", "sim/ppc/emul_netbsd.h", "sim/ppc/psim.c",
+    "sim/ppc/ppc-instructions", "sim/ppc/tree.h", "sim/ppc/README",
+    "sim/ppc/gen-icache.h", "sim/ppc/gen-model.h", "sim/ppc/ld-cache.h",
+    "sim/ppc/mon.c", "sim/ppc/corefile.h", "sim/ppc/vm.c",
+    "sim/ppc/INSTALL", "sim/ppc/gen-model.c", "sim/ppc/hw_cpu.c",
+    "sim/ppc/corefile.c", "sim/ppc/hw_opic.c", "sim/ppc/gen-icache.c",
+    "sim/ppc/events.h", "sim/ppc/os_emul.c", "sim/ppc/emul_generic.c",
+    "sim/ppc/main.c", "sim/ppc/hw_com.c", "sim/ppc/gen-semantics.c",
+    "sim/ppc/emul_bugapi.c", "sim/ppc/device.c", "sim/ppc/emul_generic.h",
+    "sim/ppc/tree.c", "sim/ppc/mon.h", "sim/ppc/interrupts.h",
+    "sim/ppc/cap.c", "sim/ppc/cpu.c", "sim/ppc/hw_phb.h",
+    "sim/ppc/device_table.c", "sim/ppc/lf.c", "sim/ppc/lf.c",
+    "sim/ppc/dc-stupid", "sim/ppc/hw_pal.c", "sim/ppc/ppc-spr-table",
+    "sim/ppc/emul_unix.h", "sim/ppc/words.h", "sim/ppc/basics.h",
+    "sim/ppc/hw_htab.c", "sim/ppc/lf.h", "sim/ppc/ld-decode.c",
+    "sim/ppc/sim-endian.c", "sim/ppc/gen-itable.c",
+    "sim/ppc/idecode_expression.h", "sim/ppc/table.h", "sim/ppc/dgen.c",
+    "sim/ppc/events.c", "sim/ppc/gen-idecode.h", "sim/ppc/emul_netbsd.c",
+    "sim/ppc/igen.c", "sim/ppc/vm_n.h", "sim/ppc/vm.h",
+    "sim/ppc/hw_iobus.c", "sim/ppc/inline.h",
+    "sim/testsuite/sim/bfin/s21.s", "sim/testsuite/sim/mips/mips32-dsp2.s",
+)
 
 if __name__ == "__main__":
-    if not os.path.isfile("doc/gdb.texinfo"):
-        print "Error: This script must be called from the gdb directory."
-    for gdb_dir in ('.', '../sim', '../include/gdb'):
-        for root, dirs, files in os.walk(gdb_dir):
-            for filename in files:
-                fullpath = os.path.join(root, filename)
-                if fullpath.startswith('./'):
-                    fullpath = fullpath[2:]
-                if filename not in EXCLUSION_LIST and fullpath not in BY_HAND:
-                    # Paths that start with './' are ugly, so strip that.
-                    # This also allows us to omit them in the NO_COPYRIGHT
-                    # list...
-                    process_file(fullpath)
-    print
-    print "\033[32mREMINDER: The following files must be updated by hand." \
-          "\033[0m"
-    for filename in BY_HAND:
-        print "  ", filename
+    main()
 
diff --git a/gdb/copyright.sh b/gdb/copyright.sh
deleted file mode 100644
index 237b408..0000000
--- a/gdb/copyright.sh
+++ /dev/null
@@ -1,170 +0,0 @@
-#!/bin/sh
-# Automatically update copyright for GDB, the GNU debugger.
-#
-# Copyright (C) 2007-2012 Free Software Foundation, Inc.
-#
-# This file is part of GDB.
-#
-# 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 3 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, see <http://www.gnu.org/licenses/>.
-
-# Usage: cd src/gdb && sh ./copyright.sh
-# To use a different version of emacs, set the EMACS environment
-# variable before running.
-
-# After running, update those files mentioned in $byhand by hand.
-# Always review the output of this script before committing it!
-# A useful command to review the output is:
-#  filterdiff -x \*.c -x \*.cc -x \*.h -x \*.exp updates.diff
-# This removes the bulk of the changes which are most likely
-# to be correct.
-
-####
-# Configuration
-####
-
-# As of Emacs 22.0 (snapshot), wrapping and copyright updating do not
-# handle these file types - all reasonable:
-#  Assembly (weird comment characters, e.g. "!"); .S usually has C
-#            comments, which are fine)
-#  Fortran ("c" comment character)
-#  igen
-#  Autoconf input (dnl)
-#  texinfo (@c)
-#  tex (%)
-#  *.defs as C
-#   man
-# So these need to be done either by hand, as needed, or by the copyright.py
-# script.
-byhand="
-*.s
-*.f
-*.f90
-*.igen
-*.ac
-*.texi
-*.texinfo
-*.tex
-*.defs
-*.1
-*.ads
-*.adb
-*.gpr
-*.inc
-"
-
-# Files which should not be modified, either because they are
-# generated, non-FSF, or otherwise special (e.g. license text,
-# or test cases which must be sensitive to line numbering).
-prunes="
-COPYING
-COPYING.LIB
-CVS
-configure
-copying.c
-gdbarch.c
-gdbarch.h
-fdl.texi
-gpl.texi
-gdbtk
-gdb.gdbtk
-osf-share
-aclocal.m4
-step-line.inp
-step-line.c
-"
-
-####
-# Main program
-####
-
-: ${EMACS:=emacs}
-
-# Disable filename expansion, so that we can get at the glob patterns
-# from $byhand.
-set -f
-
-version=`$EMACS --version | sed 's/GNU Emacs \([0-9]*\)\..*/\1/; 1q'`
-if test "$version" -lt 22; then
-  echo "error: $EMACS is too old; use at least an Emacs 22.0.XX snapshot." >&2
-  exit 1
-fi
-
-if test $# -lt 1; then
-  dir=.
-else
-  dir=$1
-fi
-
-if ! test -f doc/gdbint.texinfo; then
-  echo "\"$dir\" is not a GDB source directory."
-  exit 1
-fi
-
-cat > copytmp.el <<EOF
-(load "copyright")
-(setq vc-cvs-stay-local nil
-      message-log-max t)
-(setq fsf-regexp "Free[#; \t\n]+Software[#; \t\n]+Foundation,[#; \t\n]+Inc\."
-      fsf-copyright-regexp (concat copyright-regexp "[#; \t\n]+" fsf-regexp)
-      generated-regexp "THIS FILE IS MACHINE GENERATED WITH CGEN")
-
-(defun gdb-copyright-update (filename)
-  (widen)
-  (goto-char (point-min))
-  (if (and (not (re-search-forward generated-regexp (+ (point) copyright-limit) t))
-	   (re-search-forward fsf-copyright-regexp (+ (point) copyright-limit) t))
-      (progn
-	(setq copyright-update t
-	      copyright-query nil
-	      fill-column 78
-	      start (copy-marker (match-beginning 0))
-	      end (progn
-		    (re-search-backward fsf-regexp)
-		    (re-search-forward fsf-regexp
-		     (+ (point) copyright-limit) t)
-		    (point-marker))
-	      fsf-start (copy-marker (match-beginning 0)))
-	(replace-match "Free_Software_Foundation,_Inc." t t)
-	(copyright-update)
-	(fill-region-as-paragraph start end)
-	(replace-string "_" " " nil fsf-start end))
-    (message (concat "WARNING: No copyright message found in " filename))))
-
-EOF
-
-for f in $prunes $byhand; do
-  prune_opts="$prune_opts -name $f -prune -o"
-done
-
-for f in $(find "$dir" "$dir/../include/gdb" "$dir/../sim" \
-           $prune_opts -type f -print); do
-  cat >> copytmp.el <<EOF
-(switch-to-buffer (find-file "$f"))
-(setq backup-inhibited t)
-(setq write-file-hooks '())
-(gdb-copyright-update "$f")
-(save-buffer)
-(kill-buffer (buffer-name))
-EOF
-done
-
-cat >> copytmp.el <<EOF
-(delete-file "copytmp.el")
-;; Comment out the next line to examine the message buffer.
-(kill-emacs)
-EOF
-
-$EMACS --no-site-file -q -l ./copytmp.el
-
-python $dir/copyright.py
diff --git a/gdb/corefile.c b/gdb/corefile.c
index c07447b..ac8eff5 100644
--- a/gdb/corefile.c
+++ b/gdb/corefile.c
@@ -34,6 +34,7 @@
 #include "gdb_stat.h"
 #include "completer.h"
 #include "exceptions.h"
+#include "observer.h"
 
 /* Local function declarations.  */
 
@@ -60,7 +61,7 @@ static int exec_file_hook_count = 0;		/* Size of array.  */
 
 bfd *core_bfd = NULL;
 
-/* corelow.c target (if included for this gdb target).  */
+/* corelow.c target.  It is never NULL after GDB initialization.  */
 
 struct target_ops *core_target;
 

@@ -72,8 +73,7 @@ core_file_command (char *filename, int from_tty)
 {
   dont_repeat ();		/* Either way, seems bogus.  */
 
-  if (core_target == NULL)
-    error (_("GDB can't read core files on this machine."));
+  gdb_assert (core_target != NULL);
 
   if (!filename)
     (core_target->to_detach) (core_target, filename, from_tty);
@@ -132,26 +132,9 @@ specify_exec_file_hook (void (*hook) (char *))
     deprecated_exec_file_display_hook = hook;
 }
 
-/* The exec file must be closed before running an inferior.
-   If it is needed again after the inferior dies, it must
-   be reopened.  */
-
-void
-close_exec_file (void)
-{
-#if 0				/* FIXME */
-  if (exec_bfd)
-    bfd_tempclose (exec_bfd);
-#endif
-}
-
 void
 reopen_exec_file (void)
 {
-#if 0				/* FIXME */
-  if (exec_bfd)
-    bfd_reopen (exec_bfd);
-#else
   char *filename;
   int res;
   struct stat st;
@@ -175,7 +158,6 @@ reopen_exec_file (void)
     bfd_cache_close_all ();
 
   do_cleanups (cleanups);
-#endif
 }
 

 /* If we have both a core file and an exec file,
@@ -232,7 +214,7 @@ memory_error (int status, CORE_ADDR memaddr)
 /* Same as target_read_memory, but report an error if can't read.  */
 
 void
-read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
+read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
 {
   int status;
 
@@ -244,7 +226,7 @@ read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
 /* Same as target_read_stack, but report an error if can't read.  */
 
 void
-read_stack (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
+read_stack (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
 {
   int status;
 
@@ -371,7 +353,7 @@ read_memory_typed_address (CORE_ADDR addr, struct type *type)
    write.  */
 void
 write_memory (CORE_ADDR memaddr, 
-	      const bfd_byte *myaddr, int len)
+	      const bfd_byte *myaddr, ssize_t len)
 {
   int status;
 
@@ -380,6 +362,16 @@ write_memory (CORE_ADDR memaddr,
     memory_error (status, memaddr);
 }
 
+/* Same as write_memory, but notify 'memory_changed' observers.  */
+
+void
+write_memory_with_notification (CORE_ADDR memaddr, const bfd_byte *myaddr,
+				ssize_t len)
+{
+  write_memory (memaddr, myaddr, len);
+  observer_notify_memory_changed (memaddr, len, myaddr);
+}
+
 /* Store VALUE at ADDR in the inferior as a LEN-byte unsigned
    integer.  */
 void
diff --git a/gdb/corelow.c b/gdb/corelow.c
index bbfb8ee..dd62560 100644
--- a/gdb/corelow.c
+++ b/gdb/corelow.c
@@ -46,8 +46,6 @@
 #include "filenames.h"
 #include "progspace.h"
 #include "objfiles.h"
-#include "wrapper.h"
-
 
 #ifndef O_LARGEFILE
 #define O_LARGEFILE 0
@@ -77,9 +75,6 @@ struct gdbarch *core_gdbarch = NULL;
    unix child targets.  */
 static struct target_section_table *core_data;
 
-/* True if we needed to fake the pid of the loaded core inferior.  */
-static int core_has_fake_pid = 0;
-
 static void core_files_info (struct target_ops *);
 
 static struct core_fns *sniff_core_bfd (bfd *);
@@ -131,8 +126,7 @@ default_core_sniffer (struct core_fns *our_fns, bfd *abfd)
 }
 
 /* Walk through the list of core functions to find a set that can
-   handle the core file open on ABFD.  Default to the first one in the
-   list if nothing matches.  Returns pointer to set that is
+   handle the core file open on ABFD.  Returns pointer to set that is
    selected.  */
 
 static struct core_fns *
@@ -161,15 +155,9 @@ sniff_core_bfd (bfd *abfd)
 	       bfd_get_filename (abfd), matches);
     }
   else if (matches == 0)
-    {
-      warning (_("\"%s\": no core file handler "
-		 "recognizes format, using default"),
-	       bfd_get_filename (abfd));
-    }
-  if (yummy == NULL)
-    {
-      yummy = core_file_fns;
-    }
+    error (_("\"%s\": no core file handler recognizes format"),
+	   bfd_get_filename (abfd));
+
   return (yummy);
 }
 
@@ -213,16 +201,19 @@ core_close (int quitting)
       int pid = ptid_get_pid (inferior_ptid);
       inferior_ptid = null_ptid;    /* Avoid confusion from thread
 				       stuff.  */
-      exit_inferior_silent (pid);
+      if (pid != 0)
+	exit_inferior_silent (pid);
 
       /* Clear out solib state while the bfd is still open.  See
          comments in clear_solib in solib.c.  */
       clear_solib ();
 
-      xfree (core_data->sections);
-      xfree (core_data);
-      core_data = NULL;
-      core_has_fake_pid = 0;
+      if (core_data)
+	{
+	  xfree (core_data->sections);
+	  xfree (core_data);
+	  core_data = NULL;
+	}
 
       name = bfd_get_filename (core_bfd);
       gdb_bfd_close_or_warn (core_bfd);
@@ -249,6 +240,8 @@ add_to_thread_list (bfd *abfd, asection *asect, void *reg_sect_arg)
   int core_tid;
   int pid, lwpid;
   asection *reg_sect = (asection *) reg_sect_arg;
+  int fake_pid_p = 0;
+  struct inferior *inf;
 
   if (strncmp (bfd_section_name (abfd, asect), ".reg/", 5) != 0)
     return;
@@ -258,14 +251,18 @@ add_to_thread_list (bfd *abfd, asection *asect, void *reg_sect_arg)
   pid = bfd_core_file_pid (core_bfd);
   if (pid == 0)
     {
-      core_has_fake_pid = 1;
+      fake_pid_p = 1;
       pid = CORELOW_PID;
     }
 
   lwpid = core_tid;
 
-  if (current_inferior ()->pid == 0)
-    inferior_appeared (current_inferior (), pid);
+  inf = current_inferior ();
+  if (inf->pid == 0)
+    {
+      inferior_appeared (inf, pid);
+      inf->fake_pid_p = fake_pid_p;
+    }
 
   ptid = ptid_build (pid, lwpid, 0);
 
@@ -290,6 +287,7 @@ core_open (char *filename, int from_tty)
   bfd *temp_bfd;
   int scratch_chan;
   int flags;
+  volatile struct gdb_exception except;
 
   target_preopen (from_tty);
   if (!filename)
@@ -386,7 +384,6 @@ core_open (char *filename, int from_tty)
   init_thread_list ();
 
   inferior_ptid = null_ptid;
-  core_has_fake_pid = 0;
 
   /* Need to flush the register cache (and the frame cache) from a
      previous debug session.  If inferior_ptid ends up the same as the
@@ -428,7 +425,13 @@ core_open (char *filename, int from_tty)
      may be a thread_stratum target loaded on top of target core by
      now.  The layer above should claim threads found in the BFD
      sections.  */
-  gdb_target_find_new_threads ();
+  TRY_CATCH (except, RETURN_MASK_ERROR)
+    {
+      target_find_new_threads ();
+    }
+
+  if (except.reason < 0)
+    exception_print (gdb_stderr, except);
 
   p = bfd_core_file_failing_command (core_bfd);
   if (p)
@@ -437,17 +440,20 @@ core_open (char *filename, int from_tty)
   siggy = bfd_core_file_failing_signal (core_bfd);
   if (siggy > 0)
     {
-      /* NOTE: target_signal_from_host() converts a target signal
-	 value into gdb's internal signal value.  Unfortunately gdb's
-	 internal value is called ``target_signal'' and this function
-	 got the name ..._from_host().  */
-      enum target_signal sig = (core_gdbarch != NULL
-		       ? gdbarch_target_signal_from_host (core_gdbarch,
-							  siggy)
-		       : target_signal_from_host (siggy));
+      /* If we don't have a CORE_GDBARCH to work with, assume a native
+	 core (map gdb_signal from host signals).  If we do have
+	 CORE_GDBARCH to work with, but no gdb_signal_from_target
+	 implementation for that gdbarch, as a fallback measure,
+	 assume the host signal mapping.  It'll be correct for native
+	 cores, but most likely incorrect for cross-cores.  */
+      enum gdb_signal sig = (core_gdbarch != NULL
+			     && gdbarch_gdb_signal_from_target_p (core_gdbarch)
+			     ? gdbarch_gdb_signal_from_target (core_gdbarch,
+							       siggy)
+			     : gdb_signal_from_host (siggy));
 
       printf_filtered (_("Program terminated with signal %d, %s.\n"),
-		       siggy, target_signal_to_string (sig));
+		       siggy, gdb_signal_to_string (sig));
     }
 
   /* Fetch all registers from core file.  */
@@ -847,6 +853,7 @@ static char *
 core_pid_to_str (struct target_ops *ops, ptid_t ptid)
 {
   static char buf[64];
+  struct inferior *inf;
   int pid;
 
   /* The preferred way is to have a gdbarch/OS specific
@@ -865,7 +872,8 @@ core_pid_to_str (struct target_ops *ops, ptid_t ptid)
 
   /* Otherwise, this isn't a "threaded" core -- use the PID field, but
      only if it isn't a fake PID.  */
-  if (!core_has_fake_pid)
+  inf = find_inferior_pid (ptid_get_pid (ptid));
+  if (inf != NULL && !inf->fake_pid_p)
     return normal_pid_to_str (ptid);
 
   /* No luck.  We simply don't have a valid PID to print.  */
diff --git a/gdb/cp-abi.c b/gdb/cp-abi.c
index cdc4a13..16b5356 100644
--- a/gdb/cp-abi.c
+++ b/gdb/cp-abi.c
@@ -111,7 +111,7 @@ value_rtti_type (struct value *v, int *full,
 		 int *top, int *using_enc)
 {
   struct type *ret = NULL;
-  struct gdb_exception e;
+  volatile struct gdb_exception e;
 
   if ((current_cp_abi.rtti_type) == NULL)
     return NULL;
@@ -169,6 +169,16 @@ cplus_method_ptr_to_value (struct value **this_p,
   return (*current_cp_abi.method_ptr_to_value) (this_p, method_ptr);
 }
 
+/* See cp-abi.h.  */
+
+void
+cplus_print_vtable (struct value *value)
+{
+  if (current_cp_abi.print_vtable == NULL)
+    error (_("GDB cannot print the vtable on this target"));
+  return (*current_cp_abi.print_vtable) (value);
+}
+
 int
 cp_pass_by_reference (struct type *type)
 {
diff --git a/gdb/cp-abi.h b/gdb/cp-abi.h
index 0f24e9a..8451450 100644
--- a/gdb/cp-abi.h
+++ b/gdb/cp-abi.h
@@ -173,6 +173,11 @@ struct value *cplus_method_ptr_to_value (struct value **this_p,
 void cplus_make_method_ptr (struct type *type, gdb_byte *CONTENTS,
 			    CORE_ADDR address, int is_virtual);
 
+/* Print the vtable for VALUE, if there is one.  If there is no
+   vtable, print a message, but do not throw.  */
+
+void cplus_print_vtable (struct value *value);
+
 /* Determine if we are currently in a C++ thunk.  If so, get the
    address of the routine we are thunking to and continue to there
    instead.  */
@@ -213,6 +218,7 @@ struct cp_abi_ops
 			   CORE_ADDR, int);
   struct value * (*method_ptr_to_value) (struct value **,
 					 struct value *);
+  void (*print_vtable) (struct value *);
   CORE_ADDR (*skip_trampoline) (struct frame_info *, CORE_ADDR);
   int (*pass_by_reference) (struct type *type);
 };
diff --git a/gdb/cp-name-parser.c b/gdb/cp-name-parser.c
index 4b5b7c1..e5f4f71 100644
--- a/gdb/cp-name-parser.c
+++ b/gdb/cp-name-parser.c
@@ -304,6 +304,12 @@ static struct demangle_component *d_binary (const char *,
 #define yygindex cpname_yygindex
 #define yytable	 cpname_yytable
 #define yycheck	 cpname_yycheck
+#define yyss	cpname_yyss
+#define yysslim	cpname_yysslim
+#define yyssp	cpname_yyssp
+#define yystacksize cpname_yystacksize
+#define yyvs	cpname_yyvs
+#define yyvsp	cpname_yyvsp
 
 int yyparse (void);
 static int yylex (void);
@@ -322,7 +328,11 @@ fill_comp (enum demangle_component_type d_type, struct demangle_component *lhs,
 	   struct demangle_component *rhs)
 {
   struct demangle_component *ret = d_grab ();
-  cplus_demangle_fill_component (ret, d_type, lhs, rhs);
+  int i;
+
+  i = cplus_demangle_fill_component (ret, d_type, lhs, rhs);
+  gdb_assert (i);
+
   return ret;
 }
 
@@ -338,7 +348,11 @@ static struct demangle_component *
 make_operator (const char *name, int args)
 {
   struct demangle_component *ret = d_grab ();
-  cplus_demangle_fill_operator (ret, name, args);
+  int i;
+
+  i = cplus_demangle_fill_operator (ret, name, args);
+  gdb_assert (i);
+
   return ret;
 }
 
@@ -346,7 +360,11 @@ static struct demangle_component *
 make_dtor (enum gnu_v3_dtor_kinds kind, struct demangle_component *name)
 {
   struct demangle_component *ret = d_grab ();
-  cplus_demangle_fill_dtor (ret, kind, name);
+  int i;
+
+  i = cplus_demangle_fill_dtor (ret, kind, name);
+  gdb_assert (i);
+
   return ret;
 }
 
@@ -354,7 +372,11 @@ static struct demangle_component *
 make_builtin_type (const char *name)
 {
   struct demangle_component *ret = d_grab ();
-  cplus_demangle_fill_builtin_type (ret, name);
+  int i;
+
+  i = cplus_demangle_fill_builtin_type (ret, name);
+  gdb_assert (i);
+
   return ret;
 }
 
@@ -362,7 +384,11 @@ static struct demangle_component *
 make_name (const char *name, int len)
 {
   struct demangle_component *ret = d_grab ();
-  cplus_demangle_fill_name (ret, name, len);
+  int i;
+
+  i = cplus_demangle_fill_name (ret, name, len);
+  gdb_assert (i);
+
   return ret;
 }
 
@@ -385,7 +411,7 @@ make_name (const char *name, int len)
 #endif
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 241 "cp-name-parser.y"
+#line 267 "cp-name-parser.y"
 typedef union YYSTYPE {
     struct demangle_component *comp;
     struct nested {
@@ -405,7 +431,7 @@ typedef union YYSTYPE {
     const char *opname;
   } YYSTYPE;
 /* Line 191 of yacc.c.  */
-#line 409 "cp-name-parser.c"
+#line 435 "cp-name-parser.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -417,7 +443,7 @@ typedef union YYSTYPE {
 
 
 /* Line 214 of yacc.c.  */
-#line 421 "cp-name-parser.c"
+#line 447 "cp-name-parser.c"
 
 #if ! defined (yyoverflow) || YYERROR_VERBOSE
 
@@ -674,26 +700,26 @@ static const yysigned_char yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short yyrline[] =
 {
-       0,   355,   355,   359,   361,   363,   368,   369,   376,   385,
-     388,   392,   395,   414,   418,   422,   424,   426,   428,   430,
-     432,   434,   436,   438,   440,   442,   444,   446,   448,   450,
-     452,   454,   456,   458,   460,   462,   464,   466,   468,   470,
-     472,   474,   476,   478,   480,   482,   484,   486,   494,   499,
-     504,   508,   513,   521,   522,   524,   536,   537,   543,   545,
-     546,   548,   551,   552,   555,   556,   560,   562,   565,   571,
-     578,   584,   595,   599,   602,   613,   614,   618,   620,   622,
-     625,   629,   634,   639,   645,   655,   659,   663,   671,   672,
-     675,   677,   679,   683,   684,   691,   693,   695,   697,   699,
-     701,   705,   706,   710,   712,   714,   716,   718,   720,   722,
-     726,   732,   736,   744,   754,   758,   774,   776,   777,   779,
-     782,   784,   785,   787,   790,   792,   794,   796,   801,   804,
-     809,   816,   820,   831,   837,   855,   858,   866,   868,   879,
-     886,   887,   893,   897,   901,   903,   908,   913,   926,   930,
-     935,   943,   948,   957,   961,   966,   971,   975,   981,   987,
-     990,   997,   999,  1004,  1008,  1012,  1019,  1035,  1042,  1049,
-    1068,  1072,  1076,  1080,  1084,  1088,  1092,  1096,  1100,  1104,
-    1108,  1112,  1116,  1120,  1124,  1128,  1132,  1137,  1141,  1145,
-    1152,  1156,  1159,  1164,  1173
+       0,   381,   381,   385,   387,   389,   394,   395,   402,   411,
+     414,   418,   421,   440,   444,   448,   450,   452,   454,   456,
+     458,   460,   462,   464,   466,   468,   470,   472,   474,   476,
+     478,   480,   482,   484,   486,   488,   490,   492,   494,   496,
+     498,   500,   502,   504,   506,   508,   510,   512,   520,   525,
+     530,   534,   539,   547,   548,   550,   562,   563,   569,   571,
+     572,   574,   577,   578,   581,   582,   586,   588,   591,   597,
+     604,   610,   621,   625,   628,   639,   640,   644,   646,   648,
+     651,   655,   660,   665,   671,   681,   685,   689,   697,   698,
+     701,   703,   705,   709,   710,   717,   719,   721,   723,   725,
+     727,   731,   732,   736,   738,   740,   742,   744,   746,   748,
+     752,   758,   762,   770,   780,   784,   800,   802,   803,   805,
+     808,   810,   811,   813,   816,   818,   820,   822,   827,   830,
+     835,   842,   846,   857,   863,   881,   884,   892,   894,   905,
+     912,   913,   919,   923,   927,   929,   934,   939,   952,   956,
+     961,   969,   974,   983,   987,   992,   997,  1001,  1007,  1013,
+    1016,  1023,  1025,  1030,  1034,  1038,  1045,  1061,  1068,  1075,
+    1094,  1098,  1102,  1106,  1110,  1114,  1118,  1122,  1126,  1130,
+    1134,  1138,  1142,  1146,  1150,  1154,  1158,  1163,  1167,  1171,
+    1178,  1182,  1185,  1190,  1199
 };
 #endif
 
@@ -1770,47 +1796,47 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 356 "cp-name-parser.y"
+#line 382 "cp-name-parser.y"
     { global_result = yyvsp[0].comp; }
     break;
 
   case 6:
-#line 368 "cp-name-parser.y"
+#line 394 "cp-name-parser.y"
     { yyval.comp = NULL; }
     break;
 
   case 7:
-#line 370 "cp-name-parser.y"
+#line 396 "cp-name-parser.y"
     { yyval.comp = yyvsp[0].comp; }
     break;
 
   case 8:
-#line 377 "cp-name-parser.y"
+#line 403 "cp-name-parser.y"
     { yyval.comp = yyvsp[0].nested.comp;
 			  *yyvsp[0].nested.last = yyvsp[-1].comp;
 			}
     break;
 
   case 9:
-#line 386 "cp-name-parser.y"
+#line 412 "cp-name-parser.y"
     { yyval.comp = fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, yyvsp[-2].comp, yyvsp[-1].nested.comp);
 			  if (yyvsp[0].comp) yyval.comp = fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME, yyval.comp, yyvsp[0].comp); }
     break;
 
   case 10:
-#line 389 "cp-name-parser.y"
+#line 415 "cp-name-parser.y"
     { yyval.comp = fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, yyvsp[-2].comp, yyvsp[-1].nested.comp);
 			  if (yyvsp[0].comp) yyval.comp = fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME, yyval.comp, yyvsp[0].comp); }
     break;
 
   case 11:
-#line 393 "cp-name-parser.y"
+#line 419 "cp-name-parser.y"
     { yyval.comp = yyvsp[-1].nested.comp;
 			  if (yyvsp[0].comp) yyval.comp = fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME, yyval.comp, yyvsp[0].comp); }
     break;
 
   case 12:
-#line 396 "cp-name-parser.y"
+#line 422 "cp-name-parser.y"
     { if (yyvsp[0].abstract.last)
 			    {
 			       /* First complete the abstract_declarator's type using
@@ -1829,189 +1855,189 @@ yyreduce:
     break;
 
   case 13:
-#line 415 "cp-name-parser.y"
+#line 441 "cp-name-parser.y"
     { yyval.comp = make_empty (yyvsp[-1].lval);
 			  d_left (yyval.comp) = yyvsp[0].comp;
 			  d_right (yyval.comp) = NULL; }
     break;
 
   case 14:
-#line 419 "cp-name-parser.y"
+#line 445 "cp-name-parser.y"
     { yyval.comp = fill_comp (DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE, yyvsp[-2].comp, yyvsp[0].comp); }
     break;
 
   case 15:
-#line 423 "cp-name-parser.y"
-    { yyval.comp = make_operator ("new", 1); }
+#line 449 "cp-name-parser.y"
+    { yyval.comp = make_operator ("new", 3); }
     break;
 
   case 16:
-#line 425 "cp-name-parser.y"
-    { yyval.comp = make_operator ("delete", 1); }
+#line 451 "cp-name-parser.y"
+    { yyval.comp = make_operator ("delete ", 1); }
     break;
 
   case 17:
-#line 427 "cp-name-parser.y"
-    { yyval.comp = make_operator ("new[]", 1); }
+#line 453 "cp-name-parser.y"
+    { yyval.comp = make_operator ("new[]", 3); }
     break;
 
   case 18:
-#line 429 "cp-name-parser.y"
-    { yyval.comp = make_operator ("delete[]", 1); }
+#line 455 "cp-name-parser.y"
+    { yyval.comp = make_operator ("delete[] ", 1); }
     break;
 
   case 19:
-#line 431 "cp-name-parser.y"
+#line 457 "cp-name-parser.y"
     { yyval.comp = make_operator ("+", 2); }
     break;
 
   case 20:
-#line 433 "cp-name-parser.y"
+#line 459 "cp-name-parser.y"
     { yyval.comp = make_operator ("-", 2); }
     break;
 
   case 21:
-#line 435 "cp-name-parser.y"
+#line 461 "cp-name-parser.y"
     { yyval.comp = make_operator ("*", 2); }
     break;
 
   case 22:
-#line 437 "cp-name-parser.y"
+#line 463 "cp-name-parser.y"
     { yyval.comp = make_operator ("/", 2); }
     break;
 
   case 23:
-#line 439 "cp-name-parser.y"
+#line 465 "cp-name-parser.y"
     { yyval.comp = make_operator ("%", 2); }
     break;
 
   case 24:
-#line 441 "cp-name-parser.y"
+#line 467 "cp-name-parser.y"
     { yyval.comp = make_operator ("^", 2); }
     break;
 
   case 25:
-#line 443 "cp-name-parser.y"
+#line 469 "cp-name-parser.y"
     { yyval.comp = make_operator ("&", 2); }
     break;
 
   case 26:
-#line 445 "cp-name-parser.y"
+#line 471 "cp-name-parser.y"
     { yyval.comp = make_operator ("|", 2); }
     break;
 
   case 27:
-#line 447 "cp-name-parser.y"
+#line 473 "cp-name-parser.y"
     { yyval.comp = make_operator ("~", 1); }
     break;
 
   case 28:
-#line 449 "cp-name-parser.y"
+#line 475 "cp-name-parser.y"
     { yyval.comp = make_operator ("!", 1); }
     break;
 
   case 29:
-#line 451 "cp-name-parser.y"
+#line 477 "cp-name-parser.y"
     { yyval.comp = make_operator ("=", 2); }
     break;
 
   case 30:
-#line 453 "cp-name-parser.y"
+#line 479 "cp-name-parser.y"
     { yyval.comp = make_operator ("<", 2); }
     break;
 
   case 31:
-#line 455 "cp-name-parser.y"
+#line 481 "cp-name-parser.y"
     { yyval.comp = make_operator (">", 2); }
     break;
 
   case 32:
-#line 457 "cp-name-parser.y"
+#line 483 "cp-name-parser.y"
     { yyval.comp = make_operator (yyvsp[0].opname, 2); }
     break;
 
   case 33:
-#line 459 "cp-name-parser.y"
+#line 485 "cp-name-parser.y"
     { yyval.comp = make_operator ("<<", 2); }
     break;
 
   case 34:
-#line 461 "cp-name-parser.y"
+#line 487 "cp-name-parser.y"
     { yyval.comp = make_operator (">>", 2); }
     break;
 
   case 35:
-#line 463 "cp-name-parser.y"
+#line 489 "cp-name-parser.y"
     { yyval.comp = make_operator ("==", 2); }
     break;
 
   case 36:
-#line 465 "cp-name-parser.y"
+#line 491 "cp-name-parser.y"
     { yyval.comp = make_operator ("!=", 2); }
     break;
 
   case 37:
-#line 467 "cp-name-parser.y"
+#line 493 "cp-name-parser.y"
     { yyval.comp = make_operator ("<=", 2); }
     break;
 
   case 38:
-#line 469 "cp-name-parser.y"
+#line 495 "cp-name-parser.y"
     { yyval.comp = make_operator (">=", 2); }
     break;
 
   case 39:
-#line 471 "cp-name-parser.y"
+#line 497 "cp-name-parser.y"
     { yyval.comp = make_operator ("&&", 2); }
     break;
 
   case 40:
-#line 473 "cp-name-parser.y"
+#line 499 "cp-name-parser.y"
     { yyval.comp = make_operator ("||", 2); }
     break;
 
   case 41:
-#line 475 "cp-name-parser.y"
+#line 501 "cp-name-parser.y"
     { yyval.comp = make_operator ("++", 1); }
     break;
 
   case 42:
-#line 477 "cp-name-parser.y"
+#line 503 "cp-name-parser.y"
     { yyval.comp = make_operator ("--", 1); }
     break;
 
   case 43:
-#line 479 "cp-name-parser.y"
+#line 505 "cp-name-parser.y"
     { yyval.comp = make_operator (",", 2); }
     break;
 
   case 44:
-#line 481 "cp-name-parser.y"
+#line 507 "cp-name-parser.y"
     { yyval.comp = make_operator ("->*", 2); }
     break;
 
   case 45:
-#line 483 "cp-name-parser.y"
+#line 509 "cp-name-parser.y"
     { yyval.comp = make_operator ("->", 2); }
     break;
 
   case 46:
-#line 485 "cp-name-parser.y"
+#line 511 "cp-name-parser.y"
     { yyval.comp = make_operator ("()", 2); }
     break;
 
   case 47:
-#line 487 "cp-name-parser.y"
+#line 513 "cp-name-parser.y"
     { yyval.comp = make_operator ("[]", 2); }
     break;
 
   case 48:
-#line 495 "cp-name-parser.y"
+#line 521 "cp-name-parser.y"
     { yyval.comp = fill_comp (DEMANGLE_COMPONENT_CAST, yyvsp[0].comp, NULL); }
     break;
 
   case 49:
-#line 500 "cp-name-parser.y"
+#line 526 "cp-name-parser.y"
     { yyval.nested.comp = yyvsp[-1].nested1.comp;
 			  d_right (yyvsp[-1].nested1.last) = yyvsp[0].comp;
 			  yyval.nested.last = &d_left (yyvsp[0].comp);
@@ -2019,14 +2045,14 @@ yyreduce:
     break;
 
   case 50:
-#line 505 "cp-name-parser.y"
+#line 531 "cp-name-parser.y"
     { yyval.nested.comp = yyvsp[0].comp;
 			  yyval.nested.last = &d_left (yyvsp[0].comp);
 			}
     break;
 
   case 51:
-#line 509 "cp-name-parser.y"
+#line 535 "cp-name-parser.y"
     { yyval.nested.comp = yyvsp[-1].nested1.comp;
 			  d_right (yyvsp[-1].nested1.last) = yyvsp[0].comp;
 			  yyval.nested.last = &d_left (yyvsp[0].comp);
@@ -2034,49 +2060,49 @@ yyreduce:
     break;
 
   case 52:
-#line 514 "cp-name-parser.y"
+#line 540 "cp-name-parser.y"
     { yyval.nested.comp = yyvsp[0].comp;
 			  yyval.nested.last = &d_left (yyvsp[0].comp);
 			}
     break;
 
   case 54:
-#line 523 "cp-name-parser.y"
+#line 549 "cp-name-parser.y"
     { yyval.comp = fill_comp (DEMANGLE_COMPONENT_TEMPLATE, yyvsp[-3].comp, yyvsp[-1].nested.comp); }
     break;
 
   case 55:
-#line 525 "cp-name-parser.y"
+#line 551 "cp-name-parser.y"
     { yyval.comp = make_dtor (gnu_v3_complete_object_dtor, yyvsp[0].comp); }
     break;
 
   case 57:
-#line 538 "cp-name-parser.y"
+#line 564 "cp-name-parser.y"
     { yyval.comp = yyvsp[0].comp; }
     break;
 
   case 58:
-#line 544 "cp-name-parser.y"
+#line 570 "cp-name-parser.y"
     { yyval.comp = yyvsp[-1].nested1.comp; d_right (yyvsp[-1].nested1.last) = yyvsp[0].comp; }
     break;
 
   case 60:
-#line 547 "cp-name-parser.y"
+#line 573 "cp-name-parser.y"
     { yyval.comp = yyvsp[-1].nested1.comp; d_right (yyvsp[-1].nested1.last) = yyvsp[0].comp; }
     break;
 
   case 65:
-#line 557 "cp-name-parser.y"
+#line 583 "cp-name-parser.y"
     { yyval.comp = yyvsp[0].comp; }
     break;
 
   case 66:
-#line 561 "cp-name-parser.y"
+#line 587 "cp-name-parser.y"
     { yyval.comp = yyvsp[-1].nested1.comp; d_right (yyvsp[-1].nested1.last) = yyvsp[0].comp; }
     break;
 
   case 68:
-#line 566 "cp-name-parser.y"
+#line 592 "cp-name-parser.y"
     { yyval.nested1.comp = make_empty (DEMANGLE_COMPONENT_QUAL_NAME);
 			  d_left (yyval.nested1.comp) = yyvsp[-1].comp;
 			  d_right (yyval.nested1.comp) = NULL;
@@ -2085,7 +2111,7 @@ yyreduce:
     break;
 
   case 69:
-#line 572 "cp-name-parser.y"
+#line 598 "cp-name-parser.y"
     { yyval.nested1.comp = yyvsp[-2].nested1.comp;
 			  d_right (yyvsp[-2].nested1.last) = make_empty (DEMANGLE_COMPONENT_QUAL_NAME);
 			  yyval.nested1.last = d_right (yyvsp[-2].nested1.last);
@@ -2095,7 +2121,7 @@ yyreduce:
     break;
 
   case 70:
-#line 579 "cp-name-parser.y"
+#line 605 "cp-name-parser.y"
     { yyval.nested1.comp = make_empty (DEMANGLE_COMPONENT_QUAL_NAME);
 			  d_left (yyval.nested1.comp) = yyvsp[-1].comp;
 			  d_right (yyval.nested1.comp) = NULL;
@@ -2104,7 +2130,7 @@ yyreduce:
     break;
 
   case 71:
-#line 585 "cp-name-parser.y"
+#line 611 "cp-name-parser.y"
     { yyval.nested1.comp = yyvsp[-2].nested1.comp;
 			  d_right (yyvsp[-2].nested1.last) = make_empty (DEMANGLE_COMPONENT_QUAL_NAME);
 			  yyval.nested1.last = d_right (yyvsp[-2].nested1.last);
@@ -2114,18 +2140,18 @@ yyreduce:
     break;
 
   case 72:
-#line 596 "cp-name-parser.y"
+#line 622 "cp-name-parser.y"
     { yyval.comp = fill_comp (DEMANGLE_COMPONENT_TEMPLATE, yyvsp[-3].comp, yyvsp[-1].nested.comp); }
     break;
 
   case 73:
-#line 600 "cp-name-parser.y"
+#line 626 "cp-name-parser.y"
     { yyval.nested.comp = fill_comp (DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, yyvsp[0].comp, NULL);
 			yyval.nested.last = &d_right (yyval.nested.comp); }
     break;
 
   case 74:
-#line 603 "cp-name-parser.y"
+#line 629 "cp-name-parser.y"
     { yyval.nested.comp = yyvsp[-2].nested.comp;
 			  *yyvsp[-2].nested.last = fill_comp (DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, yyvsp[0].comp, NULL);
 			  yyval.nested.last = &d_right (*yyvsp[-2].nested.last);
@@ -2133,31 +2159,31 @@ yyreduce:
     break;
 
   case 76:
-#line 615 "cp-name-parser.y"
+#line 641 "cp-name-parser.y"
     { yyval.comp = yyvsp[0].abstract.comp;
 			  *yyvsp[0].abstract.last = yyvsp[-1].comp;
 			}
     break;
 
   case 77:
-#line 619 "cp-name-parser.y"
+#line 645 "cp-name-parser.y"
     { yyval.comp = fill_comp (DEMANGLE_COMPONENT_UNARY, make_operator ("&", 1), yyvsp[0].comp); }
     break;
 
   case 78:
-#line 621 "cp-name-parser.y"
+#line 647 "cp-name-parser.y"
     { yyval.comp = fill_comp (DEMANGLE_COMPONENT_UNARY, make_operator ("&", 1), yyvsp[-1].comp); }
     break;
 
   case 80:
-#line 626 "cp-name-parser.y"
+#line 652 "cp-name-parser.y"
     { yyval.nested.comp = fill_comp (DEMANGLE_COMPONENT_ARGLIST, yyvsp[0].comp, NULL);
 			  yyval.nested.last = &d_right (yyval.nested.comp);
 			}
     break;
 
   case 81:
-#line 630 "cp-name-parser.y"
+#line 656 "cp-name-parser.y"
     { *yyvsp[0].abstract.last = yyvsp[-1].comp;
 			  yyval.nested.comp = fill_comp (DEMANGLE_COMPONENT_ARGLIST, yyvsp[0].abstract.comp, NULL);
 			  yyval.nested.last = &d_right (yyval.nested.comp);
@@ -2165,7 +2191,7 @@ yyreduce:
     break;
 
   case 82:
-#line 635 "cp-name-parser.y"
+#line 661 "cp-name-parser.y"
     { *yyvsp[-2].nested.last = fill_comp (DEMANGLE_COMPONENT_ARGLIST, yyvsp[0].comp, NULL);
 			  yyval.nested.comp = yyvsp[-2].nested.comp;
 			  yyval.nested.last = &d_right (*yyvsp[-2].nested.last);
@@ -2173,7 +2199,7 @@ yyreduce:
     break;
 
   case 83:
-#line 640 "cp-name-parser.y"
+#line 666 "cp-name-parser.y"
     { *yyvsp[0].abstract.last = yyvsp[-1].comp;
 			  *yyvsp[-3].nested.last = fill_comp (DEMANGLE_COMPONENT_ARGLIST, yyvsp[0].abstract.comp, NULL);
 			  yyval.nested.comp = yyvsp[-3].nested.comp;
@@ -2182,7 +2208,7 @@ yyreduce:
     break;
 
   case 84:
-#line 646 "cp-name-parser.y"
+#line 672 "cp-name-parser.y"
     { *yyvsp[-2].nested.last
 			    = fill_comp (DEMANGLE_COMPONENT_ARGLIST,
 					   make_builtin_type ("..."),
@@ -2193,123 +2219,123 @@ yyreduce:
     break;
 
   case 85:
-#line 656 "cp-name-parser.y"
+#line 682 "cp-name-parser.y"
     { yyval.nested.comp = fill_comp (DEMANGLE_COMPONENT_FUNCTION_TYPE, NULL, yyvsp[-2].nested.comp);
 			  yyval.nested.last = &d_left (yyval.nested.comp);
 			  yyval.nested.comp = d_qualify (yyval.nested.comp, yyvsp[0].lval, 1); }
     break;
 
   case 86:
-#line 660 "cp-name-parser.y"
+#line 686 "cp-name-parser.y"
     { yyval.nested.comp = fill_comp (DEMANGLE_COMPONENT_FUNCTION_TYPE, NULL, NULL);
 			  yyval.nested.last = &d_left (yyval.nested.comp);
 			  yyval.nested.comp = d_qualify (yyval.nested.comp, yyvsp[0].lval, 1); }
     break;
 
   case 87:
-#line 664 "cp-name-parser.y"
+#line 690 "cp-name-parser.y"
     { yyval.nested.comp = fill_comp (DEMANGLE_COMPONENT_FUNCTION_TYPE, NULL, NULL);
 			  yyval.nested.last = &d_left (yyval.nested.comp);
 			  yyval.nested.comp = d_qualify (yyval.nested.comp, yyvsp[0].lval, 1); }
     break;
 
   case 88:
-#line 671 "cp-name-parser.y"
+#line 697 "cp-name-parser.y"
     { yyval.lval = 0; }
     break;
 
   case 90:
-#line 676 "cp-name-parser.y"
+#line 702 "cp-name-parser.y"
     { yyval.lval = QUAL_RESTRICT; }
     break;
 
   case 91:
-#line 678 "cp-name-parser.y"
+#line 704 "cp-name-parser.y"
     { yyval.lval = QUAL_VOLATILE; }
     break;
 
   case 92:
-#line 680 "cp-name-parser.y"
+#line 706 "cp-name-parser.y"
     { yyval.lval = QUAL_CONST; }
     break;
 
   case 94:
-#line 685 "cp-name-parser.y"
+#line 711 "cp-name-parser.y"
     { yyval.lval = yyvsp[-1].lval | yyvsp[0].lval; }
     break;
 
   case 95:
-#line 692 "cp-name-parser.y"
+#line 718 "cp-name-parser.y"
     { yyval.lval = 0; }
     break;
 
   case 96:
-#line 694 "cp-name-parser.y"
+#line 720 "cp-name-parser.y"
     { yyval.lval = INT_SIGNED; }
     break;
 
   case 97:
-#line 696 "cp-name-parser.y"
+#line 722 "cp-name-parser.y"
     { yyval.lval = INT_UNSIGNED; }
     break;
 
   case 98:
-#line 698 "cp-name-parser.y"
+#line 724 "cp-name-parser.y"
     { yyval.lval = INT_CHAR; }
     break;
 
   case 99:
-#line 700 "cp-name-parser.y"
+#line 726 "cp-name-parser.y"
     { yyval.lval = INT_LONG; }
     break;
 
   case 100:
-#line 702 "cp-name-parser.y"
+#line 728 "cp-name-parser.y"
     { yyval.lval = INT_SHORT; }
     break;
 
   case 102:
-#line 707 "cp-name-parser.y"
+#line 733 "cp-name-parser.y"
     { yyval.lval = yyvsp[-1].lval | yyvsp[0].lval; if (yyvsp[-1].lval & yyvsp[0].lval & INT_LONG) yyval.lval = yyvsp[-1].lval | INT_LLONG; }
     break;
 
   case 103:
-#line 711 "cp-name-parser.y"
+#line 737 "cp-name-parser.y"
     { yyval.comp = d_int_type (yyvsp[0].lval); }
     break;
 
   case 104:
-#line 713 "cp-name-parser.y"
+#line 739 "cp-name-parser.y"
     { yyval.comp = make_builtin_type ("float"); }
     break;
 
   case 105:
-#line 715 "cp-name-parser.y"
+#line 741 "cp-name-parser.y"
     { yyval.comp = make_builtin_type ("double"); }
     break;
 
   case 106:
-#line 717 "cp-name-parser.y"
+#line 743 "cp-name-parser.y"
     { yyval.comp = make_builtin_type ("long double"); }
     break;
 
   case 107:
-#line 719 "cp-name-parser.y"
+#line 745 "cp-name-parser.y"
     { yyval.comp = make_builtin_type ("bool"); }
     break;
 
   case 108:
-#line 721 "cp-name-parser.y"
+#line 747 "cp-name-parser.y"
     { yyval.comp = make_builtin_type ("wchar_t"); }
     break;
 
   case 109:
-#line 723 "cp-name-parser.y"
+#line 749 "cp-name-parser.y"
     { yyval.comp = make_builtin_type ("void"); }
     break;
 
   case 110:
-#line 727 "cp-name-parser.y"
+#line 753 "cp-name-parser.y"
     { yyval.nested.comp = make_empty (DEMANGLE_COMPONENT_POINTER);
 			  yyval.nested.comp->u.s_binary.left = yyval.nested.comp->u.s_binary.right = NULL;
 			  yyval.nested.last = &d_left (yyval.nested.comp);
@@ -2317,14 +2343,14 @@ yyreduce:
     break;
 
   case 111:
-#line 733 "cp-name-parser.y"
+#line 759 "cp-name-parser.y"
     { yyval.nested.comp = make_empty (DEMANGLE_COMPONENT_REFERENCE);
 			  yyval.nested.comp->u.s_binary.left = yyval.nested.comp->u.s_binary.right = NULL;
 			  yyval.nested.last = &d_left (yyval.nested.comp); }
     break;
 
   case 112:
-#line 737 "cp-name-parser.y"
+#line 763 "cp-name-parser.y"
     { yyval.nested.comp = make_empty (DEMANGLE_COMPONENT_PTRMEM_TYPE);
 			  yyval.nested.comp->u.s_binary.left = yyvsp[-2].nested1.comp;
 			  /* Convert the innermost DEMANGLE_COMPONENT_QUAL_NAME to a DEMANGLE_COMPONENT_NAME.  */
@@ -2335,7 +2361,7 @@ yyreduce:
     break;
 
   case 113:
-#line 745 "cp-name-parser.y"
+#line 771 "cp-name-parser.y"
     { yyval.nested.comp = make_empty (DEMANGLE_COMPONENT_PTRMEM_TYPE);
 			  yyval.nested.comp->u.s_binary.left = yyvsp[-2].nested1.comp;
 			  /* Convert the innermost DEMANGLE_COMPONENT_QUAL_NAME to a DEMANGLE_COMPONENT_NAME.  */
@@ -2346,77 +2372,77 @@ yyreduce:
     break;
 
   case 114:
-#line 755 "cp-name-parser.y"
+#line 781 "cp-name-parser.y"
     { yyval.comp = make_empty (DEMANGLE_COMPONENT_ARRAY_TYPE);
 			  d_left (yyval.comp) = NULL;
 			}
     break;
 
   case 115:
-#line 759 "cp-name-parser.y"
+#line 785 "cp-name-parser.y"
     { yyval.comp = make_empty (DEMANGLE_COMPONENT_ARRAY_TYPE);
 			  d_left (yyval.comp) = yyvsp[-1].comp;
 			}
     break;
 
   case 116:
-#line 775 "cp-name-parser.y"
+#line 801 "cp-name-parser.y"
     { yyval.comp = d_qualify (yyvsp[-1].comp, yyvsp[0].lval, 0); }
     break;
 
   case 118:
-#line 778 "cp-name-parser.y"
+#line 804 "cp-name-parser.y"
     { yyval.comp = d_qualify (yyvsp[-1].comp, yyvsp[-2].lval | yyvsp[0].lval, 0); }
     break;
 
   case 119:
-#line 780 "cp-name-parser.y"
+#line 806 "cp-name-parser.y"
     { yyval.comp = d_qualify (yyvsp[0].comp, yyvsp[-1].lval, 0); }
     break;
 
   case 120:
-#line 783 "cp-name-parser.y"
+#line 809 "cp-name-parser.y"
     { yyval.comp = d_qualify (yyvsp[-1].comp, yyvsp[0].lval, 0); }
     break;
 
   case 122:
-#line 786 "cp-name-parser.y"
+#line 812 "cp-name-parser.y"
     { yyval.comp = d_qualify (yyvsp[-1].comp, yyvsp[-2].lval | yyvsp[0].lval, 0); }
     break;
 
   case 123:
-#line 788 "cp-name-parser.y"
+#line 814 "cp-name-parser.y"
     { yyval.comp = d_qualify (yyvsp[0].comp, yyvsp[-1].lval, 0); }
     break;
 
   case 124:
-#line 791 "cp-name-parser.y"
+#line 817 "cp-name-parser.y"
     { yyval.comp = d_qualify (yyvsp[-1].comp, yyvsp[0].lval, 0); }
     break;
 
   case 125:
-#line 793 "cp-name-parser.y"
+#line 819 "cp-name-parser.y"
     { yyval.comp = yyvsp[0].comp; }
     break;
 
   case 126:
-#line 795 "cp-name-parser.y"
+#line 821 "cp-name-parser.y"
     { yyval.comp = d_qualify (yyvsp[-1].comp, yyvsp[-3].lval | yyvsp[0].lval, 0); }
     break;
 
   case 127:
-#line 797 "cp-name-parser.y"
+#line 823 "cp-name-parser.y"
     { yyval.comp = d_qualify (yyvsp[0].comp, yyvsp[-2].lval, 0); }
     break;
 
   case 128:
-#line 802 "cp-name-parser.y"
+#line 828 "cp-name-parser.y"
     { yyval.abstract.comp = yyvsp[0].nested.comp; yyval.abstract.last = yyvsp[0].nested.last;
 			  yyval.abstract.fn.comp = NULL; yyval.abstract.fn.last = NULL; }
     break;
 
   case 129:
-#line 805 "cp-name-parser.y"
+#line 831 "cp-name-parser.y"
     { yyval.abstract = yyvsp[0].abstract; yyval.abstract.fn.comp = NULL; yyval.abstract.fn.last = NULL;
 			  if (yyvsp[0].abstract.fn.comp) { yyval.abstract.last = yyvsp[0].abstract.fn.last; *yyvsp[0].abstract.last = yyvsp[0].abstract.fn.comp; }
 			  *yyval.abstract.last = yyvsp[-1].nested.comp;
@@ -2424,21 +2450,21 @@ yyreduce:
     break;
 
   case 130:
-#line 810 "cp-name-parser.y"
+#line 836 "cp-name-parser.y"
     { yyval.abstract.fn.comp = NULL; yyval.abstract.fn.last = NULL;
 			  if (yyvsp[0].abstract.fn.comp) { yyval.abstract.last = yyvsp[0].abstract.fn.last; *yyvsp[0].abstract.last = yyvsp[0].abstract.fn.comp; }
 			}
     break;
 
   case 131:
-#line 817 "cp-name-parser.y"
+#line 843 "cp-name-parser.y"
     { yyval.abstract = yyvsp[-1].abstract; yyval.abstract.fn.comp = NULL; yyval.abstract.fn.last = NULL; yyval.abstract.fold_flag = 1;
 			  if (yyvsp[-1].abstract.fn.comp) { yyval.abstract.last = yyvsp[-1].abstract.fn.last; *yyvsp[-1].abstract.last = yyvsp[-1].abstract.fn.comp; }
 			}
     break;
 
   case 132:
-#line 821 "cp-name-parser.y"
+#line 847 "cp-name-parser.y"
     { yyval.abstract.fold_flag = 0;
 			  if (yyvsp[-1].abstract.fn.comp) { yyval.abstract.last = yyvsp[-1].abstract.fn.last; *yyvsp[-1].abstract.last = yyvsp[-1].abstract.fn.comp; }
 			  if (yyvsp[-1].abstract.fold_flag)
@@ -2452,7 +2478,7 @@ yyreduce:
     break;
 
   case 133:
-#line 832 "cp-name-parser.y"
+#line 858 "cp-name-parser.y"
     { yyval.abstract.fn.comp = NULL; yyval.abstract.fn.last = NULL; yyval.abstract.fold_flag = 0;
 			  if (yyvsp[-1].abstract.fn.comp) { yyval.abstract.last = yyvsp[-1].abstract.fn.last; *yyvsp[-1].abstract.last = yyvsp[-1].abstract.fn.comp; }
 			  *yyvsp[-1].abstract.last = yyvsp[0].comp;
@@ -2461,7 +2487,7 @@ yyreduce:
     break;
 
   case 134:
-#line 838 "cp-name-parser.y"
+#line 864 "cp-name-parser.y"
     { yyval.abstract.fn.comp = NULL; yyval.abstract.fn.last = NULL; yyval.abstract.fold_flag = 0;
 			  yyval.abstract.comp = yyvsp[0].comp;
 			  yyval.abstract.last = &d_right (yyvsp[0].comp);
@@ -2469,13 +2495,13 @@ yyreduce:
     break;
 
   case 135:
-#line 856 "cp-name-parser.y"
+#line 882 "cp-name-parser.y"
     { yyval.abstract.comp = yyvsp[0].nested.comp; yyval.abstract.last = yyvsp[0].nested.last;
 			  yyval.abstract.fn.comp = NULL; yyval.abstract.fn.last = NULL; yyval.abstract.start = NULL; }
     break;
 
   case 136:
-#line 859 "cp-name-parser.y"
+#line 885 "cp-name-parser.y"
     { yyval.abstract = yyvsp[0].abstract;
 			  if (yyvsp[0].abstract.last)
 			    *yyval.abstract.last = yyvsp[-1].nested.comp;
@@ -2486,12 +2512,12 @@ yyreduce:
     break;
 
   case 137:
-#line 867 "cp-name-parser.y"
+#line 893 "cp-name-parser.y"
     { yyval.abstract.comp = yyvsp[0].abstract.comp; yyval.abstract.last = yyvsp[0].abstract.last; yyval.abstract.fn = yyvsp[0].abstract.fn; yyval.abstract.start = NULL; }
     break;
 
   case 138:
-#line 869 "cp-name-parser.y"
+#line 895 "cp-name-parser.y"
     { yyval.abstract.start = yyvsp[0].comp;
 			  if (yyvsp[-3].abstract.fn.comp) { yyval.abstract.last = yyvsp[-3].abstract.fn.last; *yyvsp[-3].abstract.last = yyvsp[-3].abstract.fn.comp; }
 			  if (yyvsp[-3].abstract.fold_flag)
@@ -2505,7 +2531,7 @@ yyreduce:
     break;
 
   case 139:
-#line 880 "cp-name-parser.y"
+#line 906 "cp-name-parser.y"
     { yyval.abstract.fn = yyvsp[-1].nested;
 			  yyval.abstract.start = yyvsp[0].comp;
 			  yyval.abstract.comp = NULL; yyval.abstract.last = NULL;
@@ -2513,26 +2539,26 @@ yyreduce:
     break;
 
   case 141:
-#line 888 "cp-name-parser.y"
+#line 914 "cp-name-parser.y"
     { yyval.comp = yyvsp[0].abstract.comp;
 			  *yyvsp[0].abstract.last = yyvsp[-1].comp;
 			}
     break;
 
   case 142:
-#line 894 "cp-name-parser.y"
+#line 920 "cp-name-parser.y"
     { yyval.nested.comp = yyvsp[0].nested.comp;
 			  yyval.nested.last = yyvsp[-1].nested.last;
 			  *yyvsp[0].nested.last = yyvsp[-1].nested.comp; }
     break;
 
   case 144:
-#line 902 "cp-name-parser.y"
+#line 928 "cp-name-parser.y"
     { yyval.nested = yyvsp[-1].nested; }
     break;
 
   case 145:
-#line 904 "cp-name-parser.y"
+#line 930 "cp-name-parser.y"
     { yyval.nested.comp = yyvsp[-1].nested.comp;
 			  *yyvsp[-1].nested.last = yyvsp[0].nested.comp;
 			  yyval.nested.last = yyvsp[0].nested.last;
@@ -2540,7 +2566,7 @@ yyreduce:
     break;
 
   case 146:
-#line 909 "cp-name-parser.y"
+#line 935 "cp-name-parser.y"
     { yyval.nested.comp = yyvsp[-1].nested.comp;
 			  *yyvsp[-1].nested.last = yyvsp[0].comp;
 			  yyval.nested.last = &d_right (yyvsp[0].comp);
@@ -2548,7 +2574,7 @@ yyreduce:
     break;
 
   case 147:
-#line 914 "cp-name-parser.y"
+#line 940 "cp-name-parser.y"
     { yyval.nested.comp = make_empty (DEMANGLE_COMPONENT_TYPED_NAME);
 			  d_left (yyval.nested.comp) = yyvsp[0].comp;
 			  yyval.nested.last = &d_right (yyval.nested.comp);
@@ -2556,14 +2582,14 @@ yyreduce:
     break;
 
   case 148:
-#line 927 "cp-name-parser.y"
+#line 953 "cp-name-parser.y"
     { yyval.nested.comp = yyvsp[0].nested.comp;
 			  yyval.nested.last = yyvsp[-1].nested.last;
 			  *yyvsp[0].nested.last = yyvsp[-1].nested.comp; }
     break;
 
   case 149:
-#line 931 "cp-name-parser.y"
+#line 957 "cp-name-parser.y"
     { yyval.nested.comp = make_empty (DEMANGLE_COMPONENT_TYPED_NAME);
 			  d_left (yyval.nested.comp) = yyvsp[0].comp;
 			  yyval.nested.last = &d_right (yyval.nested.comp);
@@ -2571,7 +2597,7 @@ yyreduce:
     break;
 
   case 151:
-#line 944 "cp-name-parser.y"
+#line 970 "cp-name-parser.y"
     { yyval.nested.comp = fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, yyvsp[-3].comp, yyvsp[-2].nested.comp);
 			  yyval.nested.last = yyvsp[-2].nested.last;
 			  yyval.nested.comp = fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME, yyval.nested.comp, yyvsp[0].comp);
@@ -2579,7 +2605,7 @@ yyreduce:
     break;
 
   case 152:
-#line 949 "cp-name-parser.y"
+#line 975 "cp-name-parser.y"
     { yyval.nested.comp = yyvsp[-3].nested.comp;
 			  *yyvsp[-3].nested.last = yyvsp[-2].nested.comp;
 			  yyval.nested.last = yyvsp[-2].nested.last;
@@ -2588,14 +2614,14 @@ yyreduce:
     break;
 
   case 153:
-#line 958 "cp-name-parser.y"
+#line 984 "cp-name-parser.y"
     { yyval.nested.comp = yyvsp[-1].nested.comp;
 			  yyval.nested.last = yyvsp[-2].nested.last;
 			  *yyvsp[-1].nested.last = yyvsp[-2].nested.comp; }
     break;
 
   case 154:
-#line 962 "cp-name-parser.y"
+#line 988 "cp-name-parser.y"
     { yyval.nested.comp = yyvsp[-1].nested.comp;
 			  *yyvsp[-1].nested.last = yyvsp[0].nested.comp;
 			  yyval.nested.last = yyvsp[0].nested.last;
@@ -2603,7 +2629,7 @@ yyreduce:
     break;
 
   case 155:
-#line 967 "cp-name-parser.y"
+#line 993 "cp-name-parser.y"
     { yyval.nested.comp = yyvsp[-1].nested.comp;
 			  *yyvsp[-1].nested.last = yyvsp[0].comp;
 			  yyval.nested.last = &d_right (yyvsp[0].comp);
@@ -2611,56 +2637,56 @@ yyreduce:
     break;
 
   case 156:
-#line 972 "cp-name-parser.y"
+#line 998 "cp-name-parser.y"
     { yyval.nested.comp = fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, yyvsp[-1].comp, yyvsp[0].nested.comp);
 			  yyval.nested.last = yyvsp[0].nested.last;
 			}
     break;
 
   case 157:
-#line 976 "cp-name-parser.y"
+#line 1002 "cp-name-parser.y"
     { yyval.nested.comp = fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, yyvsp[-1].comp, yyvsp[0].comp);
 			  yyval.nested.last = &d_right (yyvsp[0].comp);
 			}
     break;
 
   case 158:
-#line 982 "cp-name-parser.y"
+#line 1008 "cp-name-parser.y"
     { yyval.comp = yyvsp[-1].comp; }
     break;
 
   case 160:
-#line 991 "cp-name-parser.y"
+#line 1017 "cp-name-parser.y"
     { yyval.comp = d_binary (">", yyvsp[-2].comp, yyvsp[0].comp); }
     break;
 
   case 161:
-#line 998 "cp-name-parser.y"
+#line 1024 "cp-name-parser.y"
     { yyval.comp = fill_comp (DEMANGLE_COMPONENT_UNARY, make_operator ("&", 1), yyvsp[0].comp); }
     break;
 
   case 162:
-#line 1000 "cp-name-parser.y"
+#line 1026 "cp-name-parser.y"
     { yyval.comp = fill_comp (DEMANGLE_COMPONENT_UNARY, make_operator ("&", 1), yyvsp[-1].comp); }
     break;
 
   case 163:
-#line 1005 "cp-name-parser.y"
+#line 1031 "cp-name-parser.y"
     { yyval.comp = d_unary ("-", yyvsp[0].comp); }
     break;
 
   case 164:
-#line 1009 "cp-name-parser.y"
+#line 1035 "cp-name-parser.y"
     { yyval.comp = d_unary ("!", yyvsp[0].comp); }
     break;
 
   case 165:
-#line 1013 "cp-name-parser.y"
+#line 1039 "cp-name-parser.y"
     { yyval.comp = d_unary ("~", yyvsp[0].comp); }
     break;
 
   case 166:
-#line 1020 "cp-name-parser.y"
+#line 1046 "cp-name-parser.y"
     { if (yyvsp[0].comp->type == DEMANGLE_COMPONENT_LITERAL
 		      || yyvsp[0].comp->type == DEMANGLE_COMPONENT_LITERAL_NEG)
 		    {
@@ -2675,7 +2701,7 @@ yyreduce:
     break;
 
   case 167:
-#line 1036 "cp-name-parser.y"
+#line 1062 "cp-name-parser.y"
     { yyval.comp = fill_comp (DEMANGLE_COMPONENT_UNARY,
 				    fill_comp (DEMANGLE_COMPONENT_CAST, yyvsp[-4].comp, NULL),
 				    yyvsp[-1].comp);
@@ -2683,7 +2709,7 @@ yyreduce:
     break;
 
   case 168:
-#line 1043 "cp-name-parser.y"
+#line 1069 "cp-name-parser.y"
     { yyval.comp = fill_comp (DEMANGLE_COMPONENT_UNARY,
 				    fill_comp (DEMANGLE_COMPONENT_CAST, yyvsp[-4].comp, NULL),
 				    yyvsp[-1].comp);
@@ -2691,7 +2717,7 @@ yyreduce:
     break;
 
   case 169:
-#line 1050 "cp-name-parser.y"
+#line 1076 "cp-name-parser.y"
     { yyval.comp = fill_comp (DEMANGLE_COMPONENT_UNARY,
 				    fill_comp (DEMANGLE_COMPONENT_CAST, yyvsp[-4].comp, NULL),
 				    yyvsp[-1].comp);
@@ -2699,102 +2725,102 @@ yyreduce:
     break;
 
   case 170:
-#line 1069 "cp-name-parser.y"
+#line 1095 "cp-name-parser.y"
     { yyval.comp = d_binary ("*", yyvsp[-2].comp, yyvsp[0].comp); }
     break;
 
   case 171:
-#line 1073 "cp-name-parser.y"
+#line 1099 "cp-name-parser.y"
     { yyval.comp = d_binary ("/", yyvsp[-2].comp, yyvsp[0].comp); }
     break;
 
   case 172:
-#line 1077 "cp-name-parser.y"
+#line 1103 "cp-name-parser.y"
     { yyval.comp = d_binary ("%", yyvsp[-2].comp, yyvsp[0].comp); }
     break;
 
   case 173:
-#line 1081 "cp-name-parser.y"
+#line 1107 "cp-name-parser.y"
     { yyval.comp = d_binary ("+", yyvsp[-2].comp, yyvsp[0].comp); }
     break;
 
   case 174:
-#line 1085 "cp-name-parser.y"
+#line 1111 "cp-name-parser.y"
     { yyval.comp = d_binary ("-", yyvsp[-2].comp, yyvsp[0].comp); }
     break;
 
   case 175:
-#line 1089 "cp-name-parser.y"
+#line 1115 "cp-name-parser.y"
     { yyval.comp = d_binary ("<<", yyvsp[-2].comp, yyvsp[0].comp); }
     break;
 
   case 176:
-#line 1093 "cp-name-parser.y"
+#line 1119 "cp-name-parser.y"
     { yyval.comp = d_binary (">>", yyvsp[-2].comp, yyvsp[0].comp); }
     break;
 
   case 177:
-#line 1097 "cp-name-parser.y"
+#line 1123 "cp-name-parser.y"
     { yyval.comp = d_binary ("==", yyvsp[-2].comp, yyvsp[0].comp); }
     break;
 
   case 178:
-#line 1101 "cp-name-parser.y"
+#line 1127 "cp-name-parser.y"
     { yyval.comp = d_binary ("!=", yyvsp[-2].comp, yyvsp[0].comp); }
     break;
 
   case 179:
-#line 1105 "cp-name-parser.y"
+#line 1131 "cp-name-parser.y"
     { yyval.comp = d_binary ("<=", yyvsp[-2].comp, yyvsp[0].comp); }
     break;
 
   case 180:
-#line 1109 "cp-name-parser.y"
+#line 1135 "cp-name-parser.y"
     { yyval.comp = d_binary (">=", yyvsp[-2].comp, yyvsp[0].comp); }
     break;
 
   case 181:
-#line 1113 "cp-name-parser.y"
+#line 1139 "cp-name-parser.y"
     { yyval.comp = d_binary ("<", yyvsp[-2].comp, yyvsp[0].comp); }
     break;
 
   case 182:
-#line 1117 "cp-name-parser.y"
+#line 1143 "cp-name-parser.y"
     { yyval.comp = d_binary ("&", yyvsp[-2].comp, yyvsp[0].comp); }
     break;
 
   case 183:
-#line 1121 "cp-name-parser.y"
+#line 1147 "cp-name-parser.y"
     { yyval.comp = d_binary ("^", yyvsp[-2].comp, yyvsp[0].comp); }
     break;
 
   case 184:
-#line 1125 "cp-name-parser.y"
+#line 1151 "cp-name-parser.y"
     { yyval.comp = d_binary ("|", yyvsp[-2].comp, yyvsp[0].comp); }
     break;
 
   case 185:
-#line 1129 "cp-name-parser.y"
+#line 1155 "cp-name-parser.y"
     { yyval.comp = d_binary ("&&", yyvsp[-2].comp, yyvsp[0].comp); }
     break;
 
   case 186:
-#line 1133 "cp-name-parser.y"
+#line 1159 "cp-name-parser.y"
     { yyval.comp = d_binary ("||", yyvsp[-2].comp, yyvsp[0].comp); }
     break;
 
   case 187:
-#line 1138 "cp-name-parser.y"
+#line 1164 "cp-name-parser.y"
     { yyval.comp = d_binary ("->", yyvsp[-2].comp, yyvsp[0].comp); }
     break;
 
   case 188:
-#line 1142 "cp-name-parser.y"
+#line 1168 "cp-name-parser.y"
     { yyval.comp = d_binary (".", yyvsp[-2].comp, yyvsp[0].comp); }
     break;
 
   case 189:
-#line 1146 "cp-name-parser.y"
+#line 1172 "cp-name-parser.y"
     { yyval.comp = fill_comp (DEMANGLE_COMPONENT_TRINARY, make_operator ("?", 3),
 				    fill_comp (DEMANGLE_COMPONENT_TRINARY_ARG1, yyvsp[-4].comp,
 						 fill_comp (DEMANGLE_COMPONENT_TRINARY_ARG2, yyvsp[-2].comp, yyvsp[0].comp)));
@@ -2802,12 +2828,12 @@ yyreduce:
     break;
 
   case 192:
-#line 1160 "cp-name-parser.y"
+#line 1186 "cp-name-parser.y"
     { yyval.comp = d_unary ("sizeof", yyvsp[-1].comp); }
     break;
 
   case 193:
-#line 1165 "cp-name-parser.y"
+#line 1191 "cp-name-parser.y"
     { struct demangle_component *i;
 		  i = make_name ("1", 1);
 		  yyval.comp = fill_comp (DEMANGLE_COMPONENT_LITERAL,
@@ -2817,7 +2843,7 @@ yyreduce:
     break;
 
   case 194:
-#line 1174 "cp-name-parser.y"
+#line 1200 "cp-name-parser.y"
     { struct demangle_component *i;
 		  i = make_name ("0", 1);
 		  yyval.comp = fill_comp (DEMANGLE_COMPONENT_LITERAL,
@@ -2830,7 +2856,7 @@ yyreduce:
     }
 
 /* Line 1000 of yacc.c.  */
-#line 2834 "cp-name-parser.c"
+#line 2860 "cp-name-parser.c"
 

   yyvsp -= yylen;
   yyssp -= yylen;
@@ -3055,7 +3081,7 @@ yyreturn:
 }
 
 
-#line 1184 "cp-name-parser.y"
+#line 1210 "cp-name-parser.y"
 
 
 /* Apply QUALIFIERS to LHS and return a qualified component.  IS_METHOD
diff --git a/gdb/cp-name-parser.y b/gdb/cp-name-parser.y
index 8b4a1b9..6767fa5 100644
--- a/gdb/cp-name-parser.y
+++ b/gdb/cp-name-parser.y
@@ -170,6 +170,12 @@ static struct demangle_component *d_binary (const char *,
 #define yygindex cpname_yygindex
 #define yytable	 cpname_yytable
 #define yycheck	 cpname_yycheck
+#define yyss	cpname_yyss
+#define yysslim	cpname_yysslim
+#define yyssp	cpname_yyssp
+#define yystacksize cpname_yystacksize
+#define yyvs	cpname_yyvs
+#define yyvsp	cpname_yyvsp
 
 int yyparse (void);
 static int yylex (void);
@@ -188,7 +194,11 @@ fill_comp (enum demangle_component_type d_type, struct demangle_component *lhs,
 	   struct demangle_component *rhs)
 {
   struct demangle_component *ret = d_grab ();
-  cplus_demangle_fill_component (ret, d_type, lhs, rhs);
+  int i;
+
+  i = cplus_demangle_fill_component (ret, d_type, lhs, rhs);
+  gdb_assert (i);
+
   return ret;
 }
 
@@ -204,7 +214,11 @@ static struct demangle_component *
 make_operator (const char *name, int args)
 {
   struct demangle_component *ret = d_grab ();
-  cplus_demangle_fill_operator (ret, name, args);
+  int i;
+
+  i = cplus_demangle_fill_operator (ret, name, args);
+  gdb_assert (i);
+
   return ret;
 }
 
@@ -212,7 +226,11 @@ static struct demangle_component *
 make_dtor (enum gnu_v3_dtor_kinds kind, struct demangle_component *name)
 {
   struct demangle_component *ret = d_grab ();
-  cplus_demangle_fill_dtor (ret, kind, name);
+  int i;
+
+  i = cplus_demangle_fill_dtor (ret, kind, name);
+  gdb_assert (i);
+
   return ret;
 }
 
@@ -220,7 +238,11 @@ static struct demangle_component *
 make_builtin_type (const char *name)
 {
   struct demangle_component *ret = d_grab ();
-  cplus_demangle_fill_builtin_type (ret, name);
+  int i;
+
+  i = cplus_demangle_fill_builtin_type (ret, name);
+  gdb_assert (i);
+
   return ret;
 }
 
@@ -228,7 +250,11 @@ static struct demangle_component *
 make_name (const char *name, int len)
 {
   struct demangle_component *ret = d_grab ();
-  cplus_demangle_fill_name (ret, name, len);
+  int i;
+
+  i = cplus_demangle_fill_name (ret, name, len);
+  gdb_assert (i);
+
   return ret;
 }
 
@@ -420,13 +446,13 @@ demangler_special
 		;
 
 operator	:	OPERATOR NEW
-			{ $$ = make_operator ("new", 1); }
+			{ $$ = make_operator ("new", 3); }
 		|	OPERATOR DELETE
-			{ $$ = make_operator ("delete", 1); }
+			{ $$ = make_operator ("delete ", 1); }
 		|	OPERATOR NEW '[' ']'
-			{ $$ = make_operator ("new[]", 1); }
+			{ $$ = make_operator ("new[]", 3); }
 		|	OPERATOR DELETE '[' ']'
-			{ $$ = make_operator ("delete[]", 1); }
+			{ $$ = make_operator ("delete[] ", 1); }
 		|	OPERATOR '+'
 			{ $$ = make_operator ("+", 2); }
 		|	OPERATOR '-'
diff --git a/gdb/cp-namespace.c b/gdb/cp-namespace.c
index 170dd5f..e2291a9 100644
--- a/gdb/cp-namespace.c
+++ b/gdb/cp-namespace.c
@@ -660,14 +660,14 @@ lookup_symbol_file (const char *name,
   return sym;
 }
 
-/* Look up a type named NESTED_NAME that is nested inside the C++
+/* Look up a symbol named NESTED_NAME that is nested inside the C++
    class or namespace given by PARENT_TYPE, from within the context
    given by BLOCK.  Return NULL if there is no such nested type.  */
 
-struct type *
-cp_lookup_nested_type (struct type *parent_type,
-		       const char *nested_name,
-		       const struct block *block)
+struct symbol *
+cp_lookup_nested_symbol (struct type *parent_type,
+			 const char *nested_name,
+			 const struct block *block)
 {
   /* type_name_no_tag_required provides better error reporting using the
      original type.  */
@@ -694,8 +694,8 @@ cp_lookup_nested_type (struct type *parent_type,
 					   block, VAR_DOMAIN);
 	char *concatenated_name;
 
-	if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
-	  return SYMBOL_TYPE (sym);
+	if (sym != NULL)
+	  return sym;
 
 	/* Now search all static file-level symbols.  Not strictly
 	   correct, but more useful than an error.  We do not try to
@@ -707,16 +707,15 @@ cp_lookup_nested_type (struct type *parent_type,
 				    + strlen (nested_name) + 1);
 	sprintf (concatenated_name, "%s::%s",
 		 parent_name, nested_name);
-	sym = lookup_static_symbol_aux (concatenated_name,
-					VAR_DOMAIN);
-	if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
-	  return SYMBOL_TYPE (sym);
+	sym = lookup_static_symbol_aux (concatenated_name, VAR_DOMAIN);
+	if (sym != NULL)
+	  return sym;
 
 	return NULL;
       }
     default:
       internal_error (__FILE__, __LINE__,
-		      _("cp_lookup_nested_type called "
+		      _("cp_lookup_nested_symbol called "
 			"on a non-aggregate type."));
     }
 }
diff --git a/gdb/cp-support.c b/gdb/cp-support.c
index 8cea2c5..bafdb86 100644
--- a/gdb/cp-support.c
+++ b/gdb/cp-support.c
@@ -34,6 +34,7 @@
 #include "exceptions.h"
 #include "expression.h"
 #include "value.h"
+#include "cp-abi.h"
 
 #include "safe-ctype.h"
 
@@ -72,19 +73,6 @@ struct cmd_list_element *maint_cplus_cmd_list = NULL;
 static void maint_cplus_command (char *arg, int from_tty);
 static void first_component_command (char *arg, int from_tty);
 
-/* Operator validation.
-   NOTE: Multi-byte operators (usually the assignment variety
-   operator) must appear before the single byte version, i.e., "+="
-   before "+".  */
-static const char *operator_tokens[] =
-  {
-    "++", "+=", "+", "->*", "->", "--", "-=", "-", "*=", "*",
-    "/=", "/", "%=", "%", "!=", "==", "!", "&&", "<<=", "<<",
-    ">>=", ">>", "<=", "<", ">=", ">", "~", "&=", "&", "|=",
-    "||", "|", "^=", "^", "=", "()", "[]", ",", "new", "delete"
-    /* new[] and delete[] require special whitespace handling */
-  };
-
 /* A list of typedefs which should not be substituted by replace_typedefs.  */
 static const char * const ignore_typedefs[] =
   {
@@ -528,6 +516,13 @@ cp_canonicalize_string (const char *string)
   ret = cp_comp_to_string (info->tree, estimated_len);
   cp_demangled_name_parse_free (info);
 
+  if (ret == NULL)
+    {
+      warning (_("internal error: string \"%s\" failed to be canonicalized"),
+	       string);
+      return NULL;
+    }
+
   if (strcmp (string, ret) == 0)
     {
       xfree (ret);
@@ -1145,14 +1140,12 @@ static void
 make_symbol_overload_list_block (const char *name,
                                  const struct block *block)
 {
-  struct dict_iterator iter;
+  struct block_iterator iter;
   struct symbol *sym;
 
-  const struct dictionary *dict = BLOCK_DICT (block);
-
-  for (sym = dict_iter_name_first (dict, name, &iter);
+  for (sym = block_iter_name_first (block, name, &iter);
        sym != NULL;
-       sym = dict_iter_name_next (name, &iter))
+       sym = block_iter_name_next (name, &iter))
     overload_list_add_symbol (sym, name);
 }
 
@@ -1198,7 +1191,7 @@ make_symbol_overload_list_adl_namespace (struct type *type,
                                          const char *func_name)
 {
   char *namespace;
-  char *type_name;
+  const char *type_name;
   int i, prefix_len;
 
   while (TYPE_CODE (type) == TYPE_CODE_PTR
@@ -1327,12 +1320,9 @@ make_symbol_overload_list_using (const char *func_name,
 static void
 make_symbol_overload_list_qualified (const char *func_name)
 {
-  struct symbol *sym;
   struct symtab *s;
   struct objfile *objfile;
   const struct block *b, *surrounding_static_block = 0;
-  struct dict_iterator iter;
-  const struct dictionary *dict;
 
   /* Look through the partial symtabs for all symbols which begin by
      matching FUNC_NAME.  Make sure we read that symbol table in.  */
@@ -1451,109 +1441,16 @@ first_component_command (char *arg, int from_tty)
 
 extern initialize_file_ftype _initialize_cp_support; /* -Wmissing-prototypes */
 
-#define SKIP_SPACE(P)				\
-  do						\
-  {						\
-    while (*(P) == ' ' || *(P) == '\t')		\
-      ++(P);					\
-  }						\
-  while (0)
-
-/* Returns the length of the operator name or 0 if INPUT does not
-   point to a valid C++ operator.  INPUT should start with
-   "operator".  */
-int
-cp_validate_operator (const char *input)
-{
-  int i;
-  char *copy;
-  const char *p;
-  struct expression *expr;
-  struct value *val;
-  struct gdb_exception except;
-
-  p = input;
-
-  if (strncmp (p, "operator", 8) == 0)
-    {
-      int valid = 0;
-
-      p += 8;
-      SKIP_SPACE (p);
-      for (i = 0;
-	   i < sizeof (operator_tokens) / sizeof (operator_tokens[0]);
-	   ++i)
-	{
-	  int length = strlen (operator_tokens[i]);
-
-	  /* By using strncmp here, we MUST have operator_tokens
-	     ordered!  See additional notes where operator_tokens is
-	     defined above.  */
-	  if (strncmp (p, operator_tokens[i], length) == 0)
-	    {
-	      const char *op = p;
 
-	      valid = 1;
-	      p += length;
-
-	      if (strncmp (op, "new", 3) == 0
-		  || strncmp (op, "delete", 6) == 0)
-		{
+/* Implement "info vtbl".  */
 
-		  /* Special case: new[] and delete[].  We must be
-		     careful to swallow whitespace before/in "[]".  */
-		  SKIP_SPACE (p);
-
-		  if (*p == '[')
-		    {
-		      ++p;
-		      SKIP_SPACE (p);
-		      if (*p == ']')
-			++p;
-		      else
-			valid = 0;
-		    }
-		}
-
-	      if (valid)
-		return (p - input);
-	    }
-	}
-
-      /* Check input for a conversion operator.  */
-
-      /* Skip past base typename.  */
-      while (*p != '*' && *p != '&' && *p != 0 && *p != ' ')
-	++p;
-      SKIP_SPACE (p);
-
-      /* Add modifiers '*' / '&'.  */
-      while (*p == '*' || *p == '&')
-	{
-	  ++p;
-	  SKIP_SPACE (p);
-	}
-
-      /* Check for valid type.  [Remember: input starts with 
-	 "operator".]  */
-      copy = savestring (input + 8, p - input - 8);
-      expr = NULL;
-      val = NULL;
-      TRY_CATCH (except, RETURN_MASK_ALL)
-	{
-	  expr = parse_expression (copy);
-	  val = evaluate_type (expr);
-	}
-
-      xfree (copy);
-      if (expr)
-	xfree (expr);
-
-      if (val != NULL && value_type (val) != NULL)
-	return (p - input);
-    }
+static void
+info_vtbl_command (char *arg, int from_tty)
+{
+  struct value *value;
 
-  return 0;
+  value = parse_and_eval (arg);
+  cplus_print_vtable (value);
 }
 
 void
@@ -1574,4 +1471,10 @@ _initialize_cp_support (void)
 	   first_component_command,
 	   _("Print the first class/namespace component of NAME."),
 	   &maint_cplus_cmd_list);
+
+  add_info ("vtbl", info_vtbl_command,
+	    _("Show the virtual function table for a C++ object.\n\
+Usage: info vtbl EXPRESSION\n\
+Evaluate EXPRESSION and display the virtual function table for the\n\
+resulting object."));
 }
diff --git a/gdb/cp-support.h b/gdb/cp-support.h
index 8898807..0d2b513 100644
--- a/gdb/cp-support.h
+++ b/gdb/cp-support.h
@@ -26,6 +26,7 @@
 
 #include "symtab.h"
 #include "vec.h"
+#include "gdb_vecs.h"
 #include "gdb_obstack.h"
 
 /* Opaque declarations.  */
@@ -170,14 +171,10 @@ extern struct symbol **make_symbol_overload_list_adl (struct type **arg_types,
 extern struct type *cp_lookup_rtti_type (const char *name,
 					 struct block *block);
 
-extern int cp_validate_operator (const char *input);
-
 /* Functions/variables from cp-namespace.c.  */
 
 extern int cp_is_anonymous (const char *namespace);
 
-DEF_VEC_P (const_char_ptr);
-
 extern void cp_add_using_directive (const char *dest,
                                     const char *src,
                                     const char *alias,
@@ -185,11 +182,6 @@ extern void cp_add_using_directive (const char *dest,
 				    VEC (const_char_ptr) *excludes,
                                     struct obstack *obstack);
 
-extern void cp_initialize_namespace (void);
-
-extern void cp_finalize_namespace (struct block *static_block,
-				   struct obstack *obstack);
-
 extern void cp_set_block_scope (const struct symbol *symbol,
 				struct block *block,
 				struct obstack *obstack,
@@ -221,9 +213,9 @@ extern struct symbol *cp_lookup_symbol_imports_or_template
       const struct block *block,
       const domain_enum domain);
 
-extern struct type *cp_lookup_nested_type (struct type *parent_type,
-					   const char *nested_name,
-					   const struct block *block);
+extern struct symbol *cp_lookup_nested_symbol (struct type *parent_type,
+					       const char *nested_name,
+					       const struct block *block);
 
 struct type *cp_lookup_transparent_type (const char *name);
 
diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c
index 7df9adf..c066aa5 100644
--- a/gdb/cp-valprint.c
+++ b/gdb/cp-valprint.c
@@ -98,7 +98,7 @@ const char vtbl_ptr_name[] = "__vtbl_ptr_type";
 int
 cp_is_vtbl_ptr_type (struct type *type)
 {
-  char *typename = type_name_no_tag (type);
+  const char *typename = type_name_no_tag (type);
 
   return (typename != NULL && !strcmp (typename, vtbl_ptr_name));
 }
@@ -358,6 +358,21 @@ cp_print_value_fields (struct type *type, struct type *real_type,
 					   v, stream, recurse + 1,
 					   options);
 		}
+	      else if (i == TYPE_VPTR_FIELDNO (type))
+		{
+		  int i_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
+		  struct type *i_type = TYPE_FIELD_TYPE (type, i);
+
+		  if (valprint_check_validity (stream, i_type, i_offset, val))
+		    {
+		      CORE_ADDR addr;
+		      
+		      addr = extract_typed_address (valaddr + i_offset, i_type);
+		      print_function_pointer_address (options,
+						      get_type_arch (type),
+						      addr, stream);
+		    }
+		}
 	      else
 		{
 		  struct value_print_options opts = *options;
@@ -495,7 +510,7 @@ cp_print_value (struct type *type, struct type *real_type,
       int boffset = 0;
       int skip;
       struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
-      char *basename = TYPE_NAME (baseclass);
+      const char *basename = TYPE_NAME (baseclass);
       const gdb_byte *base_valaddr = NULL;
       const struct value *base_val = NULL;
       volatile struct gdb_exception ex;
@@ -539,9 +554,11 @@ cp_print_value (struct type *type, struct type *real_type,
 	      if ((boffset + offset) < 0
 		  || (boffset + offset) >= TYPE_LENGTH (real_type))
 		{
-		  /* FIXME (alloca): unsafe if baseclass is really
-		     really large.  */
-		  gdb_byte *buf = alloca (TYPE_LENGTH (baseclass));
+		  gdb_byte *buf;
+		  struct cleanup *back_to;
+
+		  buf = xmalloc (TYPE_LENGTH (baseclass));
+		  back_to = make_cleanup (xfree, buf);
 
 		  if (target_read_memory (address + boffset, buf,
 					  TYPE_LENGTH (baseclass)) != 0)
@@ -553,6 +570,7 @@ cp_print_value (struct type *type, struct type *real_type,
 		  boffset = 0;
 		  thistype = baseclass;
 		  base_valaddr = value_contents_for_printing_const (base_val);
+		  do_cleanups (back_to);
 		}
 	      else
 		{
@@ -794,7 +812,7 @@ cp_print_class_member (const gdb_byte *valaddr, struct type *type,
 
   if (domain != NULL)
     {
-      char *name;
+      const char *name;
 
       fputs_filtered (prefix, stream);
       name = type_name_no_tag (domain);
diff --git a/gdb/cris-tdep.c b/gdb/cris-tdep.c
index 963a8ab..6739037 100644
--- a/gdb/cris-tdep.c
+++ b/gdb/cris-tdep.c
@@ -151,7 +151,7 @@ static int usr_cmd_cris_version_valid = 0;
 
 static const char cris_mode_normal[] = "normal";
 static const char cris_mode_guru[] = "guru";
-static const char *cris_modes[] = {
+static const char *const cris_modes[] = {
   cris_mode_normal,
   cris_mode_guru,
   0
@@ -322,8 +322,6 @@ cris_sigtramp_frame_unwind_cache (struct frame_info *this_frame,
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   struct cris_unwind_cache *info;
-  CORE_ADDR pc;
-  CORE_ADDR sp;
   CORE_ADDR addr;
   char buf[4];
   int i;
@@ -477,48 +475,6 @@ crisv32_single_step_through_delay (struct gdbarch *gdbarch,
   return ret;
 }
 
-/* Hardware watchpoint support.  */
-
-/* We support 6 hardware data watchpoints, but cannot trigger on execute
-   (any combination of read/write is fine).  */
-
-int
-cris_can_use_hardware_watchpoint (int type, int count, int other)
-{
-  struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch);
-
-  /* No bookkeeping is done here; it is handled by the remote debug agent.  */
-
-  if (tdep->cris_version != 32)
-    return 0;
-  else
-    /* CRISv32: Six data watchpoints, one for instructions.  */
-    return (((type == bp_read_watchpoint || type == bp_access_watchpoint
-	     || type == bp_hardware_watchpoint) && count <= 6) 
-	    || (type == bp_hardware_breakpoint && count <= 1));
-}
-
-/* The CRISv32 hardware data watchpoints work by specifying ranges,
-   which have no alignment or length restrictions.  */
-
-int
-cris_region_ok_for_watchpoint (CORE_ADDR addr, int len)
-{
-  return 1;
-}
-
-/* If the inferior has some watchpoint that triggered, return the
-   address associated with that watchpoint.  Otherwise, return
-   zero.  */
-
-CORE_ADDR
-cris_stopped_data_address (void)
-{
-  CORE_ADDR eda;
-  eda = get_frame_register_unsigned (get_current_frame (), EDA_REGNUM);
-  return eda;
-}
-
 /* The instruction environment needed to find single-step breakpoints.  */
 
 typedef 
@@ -753,9 +709,7 @@ cris_frame_unwind_cache (struct frame_info *this_frame,
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-  CORE_ADDR pc;
   struct cris_unwind_cache *info;
-  int i;
 
   if ((*this_prologue_cache))
     return (*this_prologue_cache);
@@ -865,13 +819,10 @@ cris_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
 		      int struct_return, CORE_ADDR struct_addr)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  int stack_alloc;
   int stack_offset;
   int argreg;
   int argnum;
 
-  CORE_ADDR regval;
-
   /* The function's arguments and memory allocated by gdb for the arguments to
      point at reside in separate areas on the stack.
      Both frame pointers grow toward higher addresses.  */
@@ -1905,7 +1856,7 @@ cris_extract_return_value (struct type *type, struct regcache *regcache,
 /* Handle the CRIS return value convention.  */
 
 static enum return_value_convention
-cris_return_value (struct gdbarch *gdbarch, struct type *func_type,
+cris_return_value (struct gdbarch *gdbarch, struct value *function,
 		   struct type *type, struct regcache *regcache,
 		   gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -2231,9 +2182,6 @@ static unsigned long get_data_from_address (unsigned short *inst,
 static void
 bdap_prefix (unsigned short inst, inst_env_type *inst_env)
 {
-
-  long offset;
-
   /* It's invalid to be in a delay slot.  */
   if (inst_env->slot_needed || inst_env->prefix_found)
     {
diff --git a/gdb/d-lang.c b/gdb/d-lang.c
index da2785c..121040a 100644
--- a/gdb/d-lang.c
+++ b/gdb/d-lang.c
@@ -256,6 +256,7 @@ static const struct language_defn d_language_defn =
 				   syntax.  */
   d_val_print,			/* Print a value using appropriate syntax.  */
   c_value_print,		/* Print a top-level value.  */
+  default_read_var_value,	/* la_read_var_value */
   NULL,				/* Language specific skip_trampoline.  */
   "this",
   basic_lookup_symbol_nonlocal, 
@@ -272,11 +273,14 @@ static const struct language_defn d_language_defn =
   default_print_array_index,
   default_pass_by_reference,
   c_get_string,
-  strcmp_iw_ordered,
-  NULL,
+  NULL,				/* la_get_symbol_name_cmp */
+  iterate_over_symbols,
   LANG_MAGIC
 };
 
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_d_language;
+
 void
 _initialize_d_language (void)
 {
diff --git a/gdb/d-lang.h b/gdb/d-lang.h
index 67ca14c..f93405a 100644
--- a/gdb/d-lang.h
+++ b/gdb/d-lang.h
@@ -24,10 +24,10 @@
 
 extern char *d_demangle (const char *mangled, int options);
 
-extern int d_val_print (struct type *type, const gdb_byte *valaddr,
-			int embedded_offset, CORE_ADDR address,
-			struct ui_file *stream, int recurse,
-			const struct value *val,
-			const struct value_print_options *options);
+extern void d_val_print (struct type *type, const gdb_byte *valaddr,
+			 int embedded_offset, CORE_ADDR address,
+			 struct ui_file *stream, int recurse,
+			 const struct value *val,
+			 const struct value_print_options *options);
 
 #endif /* !defined (D_LANG_H) */
diff --git a/gdb/d-valprint.c b/gdb/d-valprint.c
index 527c087..3a8d11d 100644
--- a/gdb/d-valprint.c
+++ b/gdb/d-valprint.c
@@ -23,10 +23,10 @@
 #include "d-lang.h"
 #include "c-lang.h"
 
-/* Assuming that TYPE is a TYPE_CODE_STRUCT, verify that TYPE is
-   a dynamic array, and then print its value to STREAM.  Return
-   the number of string characters printed, or -1 if TYPE is not
-   a dynamic array.  */
+/* Assuming that TYPE is a TYPE_CODE_STRUCT, verify that TYPE is a
+   dynamic array, and then print its value to STREAM.  Return zero if
+   TYPE is a dynamic array, non-zero otherwise.  */
+
 static int
 dynamic_array_type (struct type *type, const gdb_byte *valaddr,
 		    int embedded_offset, CORE_ADDR address,
@@ -60,16 +60,17 @@ dynamic_array_type (struct type *type, const gdb_byte *valaddr,
       true_type = lookup_array_range_type (true_type, 0, length - 1);
       ival = value_at (true_type, addr);
 
-      return d_val_print (true_type,
-			  value_contents_for_printing (ival),
-			  value_embedded_offset (ival), addr,
-			  stream, recurse + 1, ival, options);
+      d_val_print (true_type,
+		   value_contents_for_printing (ival),
+		   value_embedded_offset (ival), addr,
+		   stream, recurse + 1, ival, options);
+      return 0;
     }
-  return -1;
+  return 1;
 }
 
 /* Implements the la_val_print routine for language D.  */
-int
+void
 d_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
              CORE_ADDR address, struct ui_file *stream, int recurse,
 	     const struct value *val,
@@ -83,12 +84,10 @@ d_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
       case TYPE_CODE_STRUCT:
         ret = dynamic_array_type (type, valaddr, embedded_offset, address,
 				  stream, recurse, val, options);
-	if (ret != -1)
-	   break;
+	if (ret == 0)
+	  break;
       default:
-	ret = c_val_print (type, valaddr, embedded_offset, address, stream,
-			   recurse, val, options);
+	c_val_print (type, valaddr, embedded_offset, address, stream,
+		     recurse, val, options);
     }
-
-  return ret;
 }
diff --git a/gdb/darwin-nat-info.c b/gdb/darwin-nat-info.c
index 9170e14..9741538 100644
--- a/gdb/darwin-nat-info.c
+++ b/gdb/darwin-nat-info.c
@@ -301,7 +301,7 @@ info_mach_ports_command (char *args, int from_tty)
 }
 
 
-void
+static void
 darwin_debug_port_info (task_t task, mach_port_t port)
 {
   kern_return_t kret;
@@ -843,6 +843,9 @@ info_mach_exceptions_command (char *args, int from_tty)
     }
 }
 
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_darwin_info_commands;
+
 void
 _initialize_darwin_info_commands (void)
 {
diff --git a/gdb/darwin-nat.c b/gdb/darwin-nat.c
index 0feebe3..26ee23a 100644
--- a/gdb/darwin-nat.c
+++ b/gdb/darwin-nat.c
@@ -39,6 +39,7 @@
 #include "value.h"
 #include "arch-utils.h"
 #include "bfd.h"
+#include "bfd/mach-o.h"
 
 #include <sys/ptrace.h>
 #include <sys/signal.h>
@@ -90,9 +91,9 @@ extern boolean_t exc_server (mach_msg_header_t *in, mach_msg_header_t *out);
 static void darwin_stop (ptid_t);
 
 static void darwin_resume_to (struct target_ops *ops, ptid_t ptid, int step,
-                              enum target_signal signal);
+                              enum gdb_signal signal);
 static void darwin_resume (ptid_t ptid, int step,
-			   enum target_signal signal);
+			   enum gdb_signal signal);
 
 static ptid_t darwin_wait_to (struct target_ops *ops, ptid_t ptid,
                               struct target_waitstatus *status, int options);
@@ -704,11 +705,14 @@ darwin_resume_thread (struct inferior *inf, darwin_thread_t *thread,
 	  thread->signaled = 1;
 	}
 
-      /* Set single step.  */
-      inferior_debug (4, _("darwin_set_sstep (thread=%x, enable=%d)\n"),
-                      thread->gdb_port, step);
-      darwin_set_sstep (thread->gdb_port, step);
-      thread->single_step = step;
+      /* Set or reset single step.  */
+      if (step != thread->single_step)
+	{
+	  inferior_debug (4, _("darwin_set_sstep (thread=%x, enable=%d)\n"),
+			  thread->gdb_port, step);
+	  darwin_set_sstep (thread->gdb_port, step);
+	  thread->single_step = step;
+	}
 
       darwin_send_reply (inf, thread);
       thread->msg_state = DARWIN_RUNNING;
@@ -783,7 +787,7 @@ darwin_suspend_inferior_threads (struct inferior *inf)
 }
 
 static void
-darwin_resume (ptid_t ptid, int step, enum target_signal signal)
+darwin_resume (ptid_t ptid, int step, enum gdb_signal signal)
 {
   struct target_waitstatus status;
   int pid;
@@ -797,10 +801,10 @@ darwin_resume (ptid_t ptid, int step, enum target_signal signal)
     (2, _("darwin_resume: pid=%d, tid=0x%x, step=%d, signal=%d\n"),
      ptid_get_pid (ptid), ptid_get_tid (ptid), step, signal);
 
-  if (signal == TARGET_SIGNAL_0)
+  if (signal == GDB_SIGNAL_0)
     nsignal = 0;
   else
-    nsignal = target_signal_to_host (signal);
+    nsignal = gdb_signal_to_host (signal);
 
   /* Don't try to single step all threads.  */
   if (step)
@@ -849,7 +853,7 @@ darwin_resume (ptid_t ptid, int step, enum target_signal signal)
 
 static void
 darwin_resume_to (struct target_ops *ops, ptid_t ptid, int step,
-                  enum target_signal signal)
+                  enum gdb_signal signal)
 {
   return darwin_resume (ptid, step, signal);
 }
@@ -909,10 +913,10 @@ darwin_decode_message (mach_msg_header_t *hdr,
 	  if (thread->event.ex_data[0] == EXC_SOFT_SIGNAL)
 	    {
 	      status->value.sig =
-		target_signal_from_host (thread->event.ex_data[1]);
+		gdb_signal_from_host (thread->event.ex_data[1]);
 	      inferior_debug (5, _("  (signal %d: %s)\n"),
 			      thread->event.ex_data[1],
-			      target_signal_to_name (status->value.sig));
+			      gdb_signal_to_name (status->value.sig));
 
 	      /* If the thread is stopped because it has received a signal
 		 that gdb has just sent, continue.  */
@@ -929,12 +933,12 @@ darwin_decode_message (mach_msg_header_t *hdr,
 	  break;
 	case EXC_BREAKPOINT:
 	  /* Many internal GDB routines expect breakpoints to be reported
-	     as TARGET_SIGNAL_TRAP, and will report TARGET_EXC_BREAKPOINT
+	     as GDB_SIGNAL_TRAP, and will report TARGET_EXC_BREAKPOINT
 	     as a spurious signal.  */
-	  status->value.sig = TARGET_SIGNAL_TRAP;
+	  status->value.sig = GDB_SIGNAL_TRAP;
 	  break;
 	default:
-	  status->value.sig = TARGET_SIGNAL_UNKNOWN;
+	  status->value.sig = GDB_SIGNAL_UNKNOWN;
 	  break;
 	}
 
@@ -1048,7 +1052,7 @@ darwin_wait (ptid_t ptid, struct target_waitstatus *status)
       darwin_inf_fake_stop = NULL;
 
       status->kind = TARGET_WAITKIND_STOPPED;
-      status->value.sig = TARGET_SIGNAL_TRAP;
+      status->value.sig = GDB_SIGNAL_TRAP;
       thread = VEC_index (darwin_thread_t, inf->private->threads, 0);
       thread->msg_state = DARWIN_STOPPED;
       return ptid_build (inf->pid, 0, thread->gdb_port);
@@ -1259,7 +1263,7 @@ darwin_stop_inferior (struct inferior *inf)
     {
       ptid = darwin_wait (inferior_ptid, &wstatus);
       if (wstatus.kind == TARGET_WAITKIND_STOPPED
-	  && wstatus.value.sig == TARGET_SIGNAL_STOP)
+	  && wstatus.value.sig == GDB_SIGNAL_STOP)
 	break;
     }
 }
@@ -1312,35 +1316,22 @@ darwin_kill_inferior (struct target_ops *ops)
 
   gdb_assert (inf != NULL);
 
-  if (!inf->private->no_ptrace)
-    {
-      darwin_stop_inferior (inf);
-
-      res = PTRACE (PT_KILL, inf->pid, 0, 0);
-      if (res != 0)
-        warning (_("Failed to kill inferior: ptrace returned %d "
-	           "[%s] (pid=%d)"),
-		 res, safe_strerror (errno), inf->pid);
+  kret = darwin_restore_exception_ports (inf->private);
+  MACH_CHECK_ERROR (kret);
 
-      darwin_reply_to_all_pending_messages (inf);
+  darwin_reply_to_all_pending_messages (inf);
 
-      darwin_resume_inferior (inf);
+  res = kill (inf->pid, 9);
 
-      ptid = darwin_wait (inferior_ptid, &wstatus);
-    }
-  else
+  if (res == 0)
     {
-      kret = darwin_restore_exception_ports (inf->private);
-      MACH_CHECK_ERROR (kret);
-
-      darwin_reply_to_all_pending_messages (inf);
-
       darwin_resume_inferior (inf);
-
-      res = kill (inf->pid, 9);
-
+	  
       ptid = darwin_wait (inferior_ptid, &wstatus);
     }
+  else if (errno != ESRCH)
+    warning (_("Failed to kill inferior: kill (%d, 9) returned [%s]"),
+	     inf->pid, safe_strerror (errno));
 
   target_mourn_inferior ();
 }
@@ -2015,6 +2006,9 @@ darwin_supports_multi_process (void)
   return 1;
 }
 
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_darwin_inferior;
+
 void
 _initialize_darwin_inferior (void)
 {
diff --git a/gdb/darwin-nat.h b/gdb/darwin-nat.h
index c74af1d..6c89299 100644
--- a/gdb/darwin-nat.h
+++ b/gdb/darwin-nat.h
@@ -61,7 +61,17 @@ struct darwin_exception_msg
   integer_t ex_data[2];
 };
 
-enum darwin_msg_state { DARWIN_RUNNING, DARWIN_STOPPED, DARWIN_MESSAGE };
+enum darwin_msg_state
+{
+  /* The thread is running.  */
+  DARWIN_RUNNING,
+
+  /* The thread is stopped.  */
+  DARWIN_STOPPED,
+
+  /* The thread has sent a message and waits for a reply.  */
+  DARWIN_MESSAGE
+};
 
 struct private_thread_info
 {
diff --git a/gdb/data-directory/Makefile.in b/gdb/data-directory/Makefile.in
index 4296e5a..87c6dd4 100644
--- a/gdb/data-directory/Makefile.in
+++ b/gdb/data-directory/Makefile.in
@@ -58,7 +58,8 @@ PYTHON_FILES = \
 	gdb/prompt.py \
 	gdb/command/__init__.py \
 	gdb/command/pretty_printers.py \
-	gdb/command/prompt.py
+	gdb/command/prompt.py \
+	gdb/command/explore.py
 
 FLAGS_TO_PASS = \
 	"prefix=$(prefix)" \
diff --git a/gdb/dbxread.c b/gdb/dbxread.c
index adf8315..2d47407 100644
--- a/gdb/dbxread.c
+++ b/gdb/dbxread.c
@@ -1210,7 +1210,7 @@ read_dbx_symtab (struct objfile *objfile)
   struct partial_symtab *pst;
 
   /* List of current psymtab's include files.  */
-  char **psymtab_include_list;
+  const char **psymtab_include_list;
   int includes_allocated;
   int includes_used;
 
@@ -1232,8 +1232,8 @@ read_dbx_symtab (struct objfile *objfile)
 
   includes_allocated = 30;
   includes_used = 0;
-  psymtab_include_list = (char **) alloca (includes_allocated *
-					   sizeof (char *));
+  psymtab_include_list = (const char **) alloca (includes_allocated *
+						 sizeof (const char *));
 
   dependencies_allocated = 30;
   dependencies_used = 0;
@@ -1635,12 +1635,12 @@ read_dbx_symtab (struct objfile *objfile)
 	    psymtab_include_list[includes_used++] = namestring;
 	    if (includes_used >= includes_allocated)
 	      {
-		char **orig = psymtab_include_list;
+		const char **orig = psymtab_include_list;
 
-		psymtab_include_list = (char **)
-		  alloca ((includes_allocated *= 2) * sizeof (char *));
+		psymtab_include_list = (const char **)
+		  alloca ((includes_allocated *= 2) * sizeof (const char *));
 		memcpy (psymtab_include_list, orig,
-			includes_used * sizeof (char *));
+			includes_used * sizeof (const char *));
 	      }
 	    continue;
 	  }
@@ -2226,7 +2226,8 @@ start_psymtab (struct objfile *objfile, char *filename, CORE_ADDR textlow,
    FIXME:  List variables and peculiarities of same.  */
 
 struct partial_symtab *
-end_psymtab (struct partial_symtab *pst, char **include_list, int num_includes,
+end_psymtab (struct partial_symtab *pst,
+	     const char **include_list, int num_includes,
 	     int capping_symbol_offset, CORE_ADDR capping_text,
 	     struct partial_symtab **dependency_list, int number_dependencies,
 	     int textlow_not_set)
@@ -3588,6 +3589,7 @@ static const struct sym_fns aout_sym_fns =
   default_symfile_segments,	/* Get segment information from a file.  */
   NULL,
   default_symfile_relocate,	/* Relocate a debug section.  */
+  NULL,				/* sym_probe_fns */
   &psym_functions
 };
 
diff --git a/gdb/defs.h b/gdb/defs.h
index e4c2483..1c6fa79 100644
--- a/gdb/defs.h
+++ b/gdb/defs.h
@@ -67,7 +67,7 @@
 
 #include "gdb_wchar.h"
 
-/* For ``enum target_signal''.  */
+/* For ``enum gdb_signal''.  */
 #include "gdb/signals.h"
 
 /* Just in case they're not defined in stdio.h.  */
@@ -197,6 +197,7 @@ enum language
     language_c,			/* C */
     language_cplus,		/* C++ */
     language_d,			/* D */
+    language_go,		/* Go */
     language_objc,		/* Objective-C */
     language_java,		/* Java */
     language_fortran,		/* Fortran */
@@ -251,29 +252,6 @@ enum return_value_convention
   RETURN_VALUE_ABI_PRESERVES_ADDRESS,
 };
 
-/* the cleanup list records things that have to be undone
-   if an error happens (descriptors to be closed, memory to be freed, etc.)
-   Each link in the chain records a function to call and an
-   argument to give it.
-
-   Use make_cleanup to add an element to the cleanup chain.
-   Use do_cleanups to do all cleanup actions back to a given
-   point in the chain.  Use discard_cleanups to remove cleanups
-   from the chain back to a given point, not doing them.
-
-   If the argument is pointer to allocated memory, then you need
-   to additionally set the 'free_arg' member to a function that will
-   free that memory.  This function will be called both when the cleanup
-   is executed and when it's discarded.  */
-
-struct cleanup
-  {
-    struct cleanup *next;
-    void (*function) (void *);
-    void (*free_arg) (void *);
-    void *arg;
-  };
-
 /* vec.h-style vectors of strings want a typedef for char * or const char *.  */
 
 typedef char * char_ptr;
@@ -313,26 +291,9 @@ extern void set_display_time (int);
 
 extern void set_display_space (int);
 
-#define	ALL_CLEANUPS	((struct cleanup *)0)
-
-extern void do_cleanups (struct cleanup *);
-extern void do_final_cleanups (struct cleanup *);
-
-extern void discard_cleanups (struct cleanup *);
-extern void discard_final_cleanups (struct cleanup *);
-extern void discard_my_cleanups (struct cleanup **, struct cleanup *);
+/* Cleanup utilities.  */
 
-/* NOTE: cagney/2000-03-04: This typedef is strictly for the
-   make_cleanup function declarations below.  Do not use this typedef
-   as a cast when passing functions into the make_cleanup() code.
-   Instead either use a bounce function or add a wrapper function.
-   Calling a f(char*) function with f(void*) is non-portable.  */
-typedef void (make_cleanup_ftype) (void *);
-
-extern struct cleanup *make_cleanup (make_cleanup_ftype *, void *);
-
-extern struct cleanup *make_cleanup_dtor (make_cleanup_ftype *, void *,
-					  void (*dtor) (void *));
+#include "cleanups.h"
 
 extern struct cleanup *make_cleanup_freeargv (char **);
 
@@ -374,29 +335,10 @@ extern struct cleanup *make_cleanup_value_free (struct value *);
 struct so_list;
 extern struct cleanup *make_cleanup_free_so (struct so_list *so);
 
-extern struct cleanup *make_final_cleanup (make_cleanup_ftype *, void *);
-
-extern struct cleanup *make_my_cleanup (struct cleanup **,
-					make_cleanup_ftype *, void *);
-
 extern struct cleanup *make_cleanup_htab_delete (htab_t htab);
 
-extern struct cleanup *make_my_cleanup2 (struct cleanup **,
-					 make_cleanup_ftype *, void *,
-					 void (*free_arg) (void *));
-
-extern struct cleanup *save_cleanups (void);
-extern struct cleanup *save_final_cleanups (void);
-extern struct cleanup *save_my_cleanups (struct cleanup **);
-
-extern void restore_cleanups (struct cleanup *);
-extern void restore_final_cleanups (struct cleanup *);
-extern void restore_my_cleanups (struct cleanup **, struct cleanup *);
-
 extern void free_current_contents (void *);
 
-extern void null_cleanup (void *);
-
 extern struct cleanup *make_command_stats_cleanup (int);
 
 extern int myread (int, char *, int);
@@ -439,6 +381,16 @@ extern struct cleanup *make_bpstat_clear_actions_cleanup (void);
 
 extern int producer_is_gcc_ge_4 (const char *producer);
 
+extern void substitute_path_component (char **stringp, const char *from,
+				       const char *to);
+
+#ifdef HAVE_WAITPID
+extern pid_t wait_to_die_with_timeout (pid_t pid, int *status, int timeout);
+#endif
+
+extern int gdb_filename_fnmatch (const char *pattern, const char *string,
+				 int flags);
+
 

 /* Annotation stuff.  */
 
@@ -578,7 +530,7 @@ extern CORE_ADDR string_to_core_addr (const char *my_string);
 extern char *hex_string (LONGEST);
 extern char *hex_string_custom (LONGEST, int);
 
-extern void fprintf_symbol_filtered (struct ui_file *, char *,
+extern void fprintf_symbol_filtered (struct ui_file *, const char *,
 				     enum language, int);
 
 extern void perror_with_name (const char *) ATTRIBUTE_NORETURN;
@@ -634,8 +586,8 @@ extern int info_verbose;
 
 extern void set_next_address (struct gdbarch *, CORE_ADDR);
 
-extern void print_address_symbolic (struct gdbarch *, CORE_ADDR,
-				    struct ui_file *, int, char *);
+extern int print_address_symbolic (struct gdbarch *, CORE_ADDR,
+				   struct ui_file *, int, char *);
 
 extern int build_address_symbolic (struct gdbarch *,
 				   CORE_ADDR addr,
@@ -748,6 +700,35 @@ extern struct command_line *read_command_lines_1 (char * (*) (void), int,
 
 extern void free_command_lines (struct command_line **);
 
+/* Parameters of the "info proc" command.  */
+
+enum info_proc_what
+  {
+    /* Display the default cmdline, cwd and exe outputs.  */
+    IP_MINIMAL,
+
+    /* Display `info proc mappings'.  */
+    IP_MAPPINGS,
+
+    /* Display `info proc status'.  */
+    IP_STATUS,
+
+    /* Display `info proc stat'.  */
+    IP_STAT,
+
+    /* Display `info proc cmdline'.  */
+    IP_CMDLINE,
+
+    /* Display `info proc exe'.  */
+    IP_EXE,
+
+    /* Display `info proc cwd'.  */
+    IP_CWD,
+
+    /* Display all of the above.  */
+    IP_ALL
+  };
+
 /* String containing the current directory (what getwd would return).  */
 
 extern char *current_directory;
@@ -915,6 +896,7 @@ enum gdb_osabi
   GDB_OSABI_DICOS,
   GDB_OSABI_DARWIN,
   GDB_OSABI_SYMBIAN,
+  GDB_OSABI_OPENVMS,
 
   GDB_OSABI_INVALID		/* keep this last */
 };
diff --git a/gdb/dicos-tdep.c b/gdb/dicos-tdep.c
index 5763561..aac253b 100644
--- a/gdb/dicos-tdep.c
+++ b/gdb/dicos-tdep.c
@@ -43,8 +43,8 @@ dicos_init_abi (struct gdbarch *gdbarch)
 
   /* There's no (standard definition of) entry point or a guaranteed
      text location with a symbol where to place the call dummy, so we
-     put it on the stack.  */
-  set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
+     need it on the stack.  Rely on i386_gdbarch_init used also for
+     amd64 to set up ON_STACK inferior calls.  */
 
   /* DICOS rewinds the PC itself.  */
   set_gdbarch_decr_pc_after_break (gdbarch, 0);
diff --git a/gdb/dictionary.c b/gdb/dictionary.c
index 00c72e8..62362c5 100644
--- a/gdb/dictionary.c
+++ b/gdb/dictionary.c
@@ -498,6 +498,22 @@ dict_add_symbol (struct dictionary *dict, struct symbol *sym)
   (DICT_VECTOR (dict))->add_symbol (dict, sym);
 }
 
+/* Utility to add a list of symbols to a dictionary.
+   DICT must be an expandable dictionary.  */
+
+void
+dict_add_pending (struct dictionary *dict, const struct pending *symbol_list)
+{
+  const struct pending *list;
+  int i;
+
+  for (list = symbol_list; list != NULL; list = list->next)
+    {
+      for (i = 0; i < list->nsyms; ++i)
+	dict_add_symbol (dict, list->symbol[i]);
+    }
+}
+
 /* Initialize ITERATOR to point at the first symbol in DICT, and
    return that first symbol, or NULL if DICT is empty.  */
 
@@ -800,6 +816,17 @@ dict_hash (const char *string0)
   hash = 0;
   while (*string)
     {
+      /* Ignore "TKB" suffixes.
+
+	 These are used by Ada for subprograms implementing a task body.
+	 For instance for a task T inside package Pck, the name of the
+	 subprogram implementing T's body is `pck__tTKB'.  We need to
+	 ignore the "TKB" suffix because searches for this task body
+	 subprogram are going to be performed using `pck__t' (the encoded
+	 version of the natural name `pck.t').  */
+      if (strcmp (string, "TKB") == 0)
+	return hash;
+
       switch (*string)
 	{
 	case '$':
diff --git a/gdb/dictionary.h b/gdb/dictionary.h
index 1d58fab..1f012f3 100644
--- a/gdb/dictionary.h
+++ b/gdb/dictionary.h
@@ -85,6 +85,11 @@ extern void dict_free (struct dictionary *dict);
 
 extern void dict_add_symbol (struct dictionary *dict, struct symbol *sym);
 
+/* Utility to add a list of symbols to a dictionary.  */
+
+extern void dict_add_pending (struct dictionary *dict,
+			      const struct pending *symbol_list);
+
 /* Is the dictionary empty?  */
 
 extern int dict_empty (struct dictionary *dict);
diff --git a/gdb/disasm.c b/gdb/disasm.c
index 89bd829..e3d3349 100644
--- a/gdb/disasm.c
+++ b/gdb/disasm.c
@@ -97,7 +97,7 @@ static int
 dump_insns (struct gdbarch *gdbarch, struct ui_out *uiout,
 	    struct disassemble_info * di,
 	    CORE_ADDR low, CORE_ADDR high,
-	    int how_many, int flags, struct ui_stream *stb)
+	    int how_many, int flags, struct ui_file *stb)
 {
   int num_displayed = 0;
   CORE_ADDR pc;
@@ -145,7 +145,7 @@ dump_insns (struct gdbarch *gdbarch, struct ui_out *uiout,
       if (name != NULL)
 	xfree (name);
 
-      ui_file_rewind (stb->stream);
+      ui_file_rewind (stb);
       if (flags & DISASSEMBLY_RAW_INSN)
         {
           CORE_ADDR old_pc = pc;
@@ -155,9 +155,9 @@ dump_insns (struct gdbarch *gdbarch, struct ui_out *uiout,
 
           /* Build the opcodes using a temporary stream so we can
              write them out in a single go for the MI.  */
-          struct ui_stream *opcode_stream = ui_out_stream_new (uiout);
+          struct ui_file *opcode_stream = mem_fileopen ();
           struct cleanup *cleanups =
-            make_cleanup_ui_out_stream_delete (opcode_stream);
+            make_cleanup_ui_file_delete (opcode_stream);
 
           pc += gdbarch_print_insn (gdbarch, pc, di);
           for (;old_pc < pc; old_pc++)
@@ -165,7 +165,7 @@ dump_insns (struct gdbarch *gdbarch, struct ui_out *uiout,
               status = (*di->read_memory_func) (old_pc, &data, 1, di);
               if (status != 0)
                 (*di->memory_error_func) (status, old_pc, di);
-              fprintf_filtered (opcode_stream->stream, "%s%02x",
+              fprintf_filtered (opcode_stream, "%s%02x",
                                 spacer, (unsigned) data);
               spacer = " ";
             }
@@ -177,7 +177,7 @@ dump_insns (struct gdbarch *gdbarch, struct ui_out *uiout,
       else
         pc += gdbarch_print_insn (gdbarch, pc, di);
       ui_out_field_stream (uiout, "inst", stb);
-      ui_file_rewind (stb->stream);
+      ui_file_rewind (stb);
       do_cleanups (ui_out_chain);
       ui_out_text (uiout, "\n");
     }
@@ -195,7 +195,7 @@ do_mixed_source_and_assembly (struct gdbarch *gdbarch, struct ui_out *uiout,
 			      struct linetable_entry *le,
 			      CORE_ADDR low, CORE_ADDR high,
 			      struct symtab *symtab,
-			      int how_many, int flags, struct ui_stream *stb)
+			      int how_many, int flags, struct ui_file *stb)
 {
   int newlines = 0;
   struct dis_line_entry *mle;
@@ -342,7 +342,7 @@ static void
 do_assembly_only (struct gdbarch *gdbarch, struct ui_out *uiout,
 		  struct disassemble_info * di,
 		  CORE_ADDR low, CORE_ADDR high,
-		  int how_many, int flags, struct ui_stream *stb)
+		  int how_many, int flags, struct ui_file *stb)
 {
   int num_displayed = 0;
   struct cleanup *ui_out_chain;
@@ -402,9 +402,9 @@ gdb_disassembly (struct gdbarch *gdbarch, struct ui_out *uiout,
 		 char *file_string, int flags, int how_many,
 		 CORE_ADDR low, CORE_ADDR high)
 {
-  struct ui_stream *stb = ui_out_stream_new (uiout);
-  struct cleanup *cleanups = make_cleanup_ui_out_stream_delete (stb);
-  struct disassemble_info di = gdb_disassemble_info (gdbarch, stb->stream);
+  struct ui_file *stb = mem_fileopen ();
+  struct cleanup *cleanups = make_cleanup_ui_file_delete (stb);
+  struct disassemble_info di = gdb_disassemble_info (gdbarch, stb);
   /* To collect the instruction outputted from opcodes.  */
   struct symtab *symtab = NULL;
   struct linetable_entry *le = NULL;
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index 9ef38a0..8bb3013 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -1,14 +1,582 @@
+2012-08-07  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdbint.texinfo (Debugging GDB): In section
+	'Debugging @value{GDBN} with itself' change .gdbinit for gdb-gdb.gdb.
+	Mention also gdb-gdb.py.
+
+2012-07-20  Doug Evans  <dje at google.com>
+
+	* gdb.texinfo (Mode Options): Delete --use-deprecated-index-sections.
+	(Index Files): Document how to control the use of deprecated index
+	sections.
+	(Index Section Format): Replace --use-deprecated-index-sections with
+	"set use-deprecated-index-sections on".
+
+2012-07-12  Eli Zaretskii  <eliz at gnu.org>
+
+	* gdbint.texinfo: Remove @syncodeindex directives that put all the
+	indices into a single node "Index".  Instead, join function and
+	variable indices into a single index, separate from the concept
+	index.  Requested in
+	http://sourceware.org/ml/gdb-patches/2012-07/msg00146.html.
+	(Top): Update the top-level menu: instead of one "Index" there are
+	now separate entries "Concept Index" and "Function and Variable
+	Index".
+	(Concept Index, Function and Variable Index): New nodes.
+	(Index): Node deleted.
+
+2012-07-05  Hui Zhu  <hui_zhu at mentor.com>
+
+	* gdb.texinfo (Maintenance Commands): Change help for "maint agent"
+	and "maint agent-eval".
+
+2012-07-03  Eli Zaretskii  <eliz at gnu.org>
+
+	* gdb.texinfo: Separate the index into 2 indices, cp and fn, to
+	avoid file-name clashes between Index.html and index.html on
+	case-insensitive filesystems.  See the discussion starting in
+	http://sourceware.org/ml/gdb-patches/2012-06/msg00457.html for the
+	details of the problem.
+	(Top): Update the master menu for the above.
+	(Concept Index, Command and Variable Index): New nodes, instead of
+	the old "Index" node that was deleted.  All cross-references
+	updated.
+
+2012-07-02  Stan Shebs  <stan at codesourcery.com>
+
+	* gdb.texinfo (Dynamic Printf): Mention agent style and
+	disconnected dprintf.
+	(Maintenance Commands): Describe maint agent-printf.
+	(General Query Packets): Mention BreakpointCommands feature.
+	(Packets): Document commands extension to Z0 packet.
+	* agentexpr.texi (Bytecode Descriptions): Document printf
+	bytecode.
+
+2012-07-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.texinfo (File Options): Change -ix and -iex commands that apply
+	only after gdbinit files.
+	(Startup): Move -iex and -iex commands down after gdbinit files.
+
+2012-07-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.texinfo (Auto-loading safe path): Note the shell wildcard
+	possibility.
+
+2012-06-29  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.texinfo (Index Section Format): Update for version 7.
+
+2012-06-28  Stan Shebs  <stan at codesourcery.com>
+
+	* gdb.texinfo (Miscellaneous GDB/MI Commands): Update -info-os
+	example, add note about title column.
+
+2012-06-26  Siva Chandra Reddy  <sivachandra at google.com>
+
+	* gdb.texinfo (Symbol Tables In Python): Add description about
+	the new 'last' attribute of gdb.Symtab_and line.
+
+2012-06-26  Siva Chandra Reddy  <sivachandra at google.com>
+
+	* gdb.texinfo (Symbol Tables In Python): Correct the description
+	of the 'pc' attribute of gdb.Symtab_and_line.
+
+2012-06-26  Doug Evans  <dje at google.com>
+
+	* gdb.texinfo (Debugging Output): Document debug options dwarf2-read
+	and symtab-create.
+
+2012-06-25  Keith Seitz  <keiths at redhat.com>
+
+	* gdb.texinfo (GDB/MI Breakpoint Commands): Remove "-r" option
+	from example.  Remove "rbreak" from list of corresponding
+	gdb commands.
+
+2012-06-23  Doug Evans  <dje at google.com>
+
+	* gdb.texinfo (Index Section Format): Document version 7 format.
+
+2012-06-22  Yao Qi  <yao at codesourcery.com>
+
+	* gdb.texinfo: Add missing cindex for some packets.
+
+2012-06-20  Keith Seitz  <keiths at redhat.com>
+
+	* gdb.texinfo (GDB/MI Breakpoint Commands): Re-order options
+	for -break-insert and document -p.
+
+2012-06-20  Yao Qi  <yao at codesourcery.com>
+
+	* gdb.texinfo (Inferiors In Python): Replace "gdb.read_memory"
+	and "gdb.write_memory" with "Inferior.read_memory" and
+	"Inferior.write_memory".
+
+2012-06-15  Patrice Dumas  <pertusus at free.fr>  (tiny change)
+
+	* gdb.texinfo (Summary): Add a link to "Free Documentation".
+	(Free Documentation): Add @node line.
+	(Continuing and Stepping) <advance location>: Use @item instead of
+	@itemx.
+	(Reverse Execution) <set exec-direction reverse>: Use @item instead of
+	@itemx.
+	(Embedded Processors): Put the link to "PA" to its correct place,
+	according to document structure.
+	(Python API): Put the link to "Lazy Strings In Python" to its
+	correct place.
+	(Index): Use @@ in @tex block to get a literal @.
+
+	* gdbint.texinfo: Fix the @subtitle line.
+
+	* stabs.texinfo (Top): Put the link to "Symbol Types Index" to its
+	correct place.
+
+2012-06-08  Yao Qi  <yao at codesourcery.com>
+
+	* gdb.texinfo (In-Process Agent): Add 'In-Process Agent
+	Protocol'.
+	(In-Process Agent Protocol, IPA Protocol Objects)
+	(IPA Protocol Commands): New nodes.
+	(Tracepoint Packets): Add anchors.
+
+2012-06-06  Thomas Schwinge  <thomas at codesourcery.com>
+
+	* gdb.texinfo: Document the deprecation of SH's 'regs' command.
+
+2012-06-06  Yao Qi  <yao at codesourcery.com>
+
+	* gdb.texinfo: Update copyright year.
+
+2012-05-23  Stan Shebs  <stan at codesourcery.com>
+	    Kwok Cheung Yeung  <kcy at codesourcery.com>
+
+	* gdb.texinfo (Miscellaneous GDB/MI Commands): Document -info-os.
+
+2012-05-20  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.texinfo (Separate Debug Files): New anchor debug-file-directory.
+	Mention also --with-separate-debug-dir.
+	(Auto-loading): Prepend $debugdir in the sample output.
+	(Auto-loading safe path): Likewise.  Mention also $debugdir for the
+	auto-load safe-path variable.
+	(objfile-gdb.py file): Remove the extra debug-file-directory paragraph.
+	Mention also $debugdir for 'set auto-load scripts-directory'.
+
+2012-05-19  Eli Zaretskii  <eliz at gnu.org>
+
+	* gdb.texinfo (Continuing and Stepping, Selection, Byte Order)
+	(MIPS Embedded, MIPS, MIPS Register packet Format)
+	(Target Descriptions, MIPS Features): Use @acronym{MIPS} where
+	appropriate.
+
+2012-05-18  Sandra Loosemore  <sandra at codesourcery.com>
+            Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* gdb.texinfo (MIPS): Document "set mips compression" and "show
+	mips compression".
+	(MIPS Breakpoint Kinds): New subsubsection.
+
+2012-05-18  Eli Zaretskii  <eliz at gnu.org>
+
+	* gdb.texinfo (Architecture-Specific Protocol Details): Define
+	nodes for subsections.  Add @acronym mark-ups and adjust
+	formatting.
+
+2012-05-18  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Rename $ddir to $datadir.
+	* gdb.texinfo (Auto-loading, Auto-loading safe path)
+	(objfile-gdb.py file): Rename $ddir to $datadir.
+
+2012-05-18  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.texinfo (Print Settings): Document 'set print symbol'.
+
+2012-05-14  Stan Shebs  <stan at codesourcery.com>
+
+	* gdb.texinfo (Dynamic Printf): New subsection.
+
+2012-05-13  Siva Chandra Reddy  <sivachandra at google.com>
+
+	* gdb.texinfo (Basic Python): Add description about the function
+	gdb.find_pc_line
+
+2012-05-12  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	    Eli Zaretskii  <eliz at gnu.org>
+
+	* gdb.texinfo (Separate Debug Files): Use plural form for global
+	debugging information directory.
+
+2012-05-11  Stan Shebs  <stan at codesourcery.com>
+	    Kwok Cheung Yeung  <kcy at codesourcery.com>
+
+	* gdb.texinfo (Operating System Auxiliary Information): Document new
+	'info os' subcommands.
+
+2012-05-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.texinfo (Auto-loading, Init File in the Current Directory)
+	(libthread_db.so.1 file, objfile-gdb.gdb file, objfile-gdb.py file)
+	(dotdebug_gdb_scripts section): Add reference
+	to 'Auto-loading safe path'.
+
+2012-05-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Implement multi-component --with-auto-load-dir.
+	* gdb.texinfo (Auto-loading): New references
+	for 'set auto-load scripts-directory'
+	and 'show auto-load scripts-directory'.
+	(Auto-loading safe path): Describe the new default.  Move $ddir
+	substituation reference to 'objfile-gdb.py file'.
+	(objfile-gdb.py file): Describe script-name alias.  Change real-name to
+	script-name.  Describe new 'set auto-load scripts-directory'
+	and 'show auto-load scripts-directory'.
+
+2012-05-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Provide $ddir substitution for --with-auto-load-safe-path.
+	* gdb.texinfo (Auto-loading): Replace /usr/local by $ddir/auto-load.
+	(Auto-loading safe path): Likewise.  Mention the default value,
+	$ddir substitution, --with-auto-load-safe-path and
+	--without-auto-load-safe-path.
+	* observer.texi (gdb_datadir_changed): New.
+
+2012-05-09  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.texinfo (Auto-loading): Wrap too long lines in @smallexample.
+	Twice.
+
+	* gdb.texinfo (Separate Debug Files, Auto-loading safe path): Replace
+	directory separator by path separator.
+
+2012-05-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.texinfo (Auto-loading safe path): Make 'directories'
+	for 'set auto-load safe-path' optional.  Mention if it is omitted.
+	Change disabling security protection condition to "/", twice.
+
+2012-05-03  Siva Chandra Reddy  <sivachandra at google.com>
+
+	* gdb.texinfo (Symbol Tables In Python): Add documentation about
+	the new methods global_block and static_block on gdb.Symtab
+	objects.
+
+2012-05-02  Siva Chandra Reddy  <sivachandra at google.com>
+
+	* gdb.texinfo (Blocks In Python): Add a note saying that future
+	improvements to GDB and its infrastructure can move symbols
+	across blocks within a symbol table.
+
+2012-04-29  Yao Qi  <yao at codesourcery.com>
+
+	* gdb.texinfo (Architectures): Remove menu entry `A29K'.
+	(A29K): Remove.
+
+2012-04-27  Sergio Durigan Junior  <sergiodj at redhat.com>
+	    Tom Tromey  <tromey at redhat.com>
+
+	* gdb.texinfo (Static Probe Points): New entry, explaining SystemTap
+	and generic static probe support on GDB.
+
+2012-04-25  Doug Evans  <dje at google.com>
+
+	* gdb.texinfo (Go): Fix thinko.
+
+	* gdb.texinfo (Supported Languages): Add Go.
+	(Go): New node.
+
+2012-04-25  Yao Qi  <yao at codesourcery.com>
+
+	* gdbint.texinfo (Testsuite): New section `Board settings'.
+
+2012-04-23  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.texinfo (Auto-loading safe path): Remove trailing [@dots{}].
+	Three times.
+
+	* gdb.texinfo (Auto-loading safe path): Add trailing @dots{}.
+	Three times.
+
+2012-04-22  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.texinfo (Auto-loading safe path): Replace @itemize @bullet
+	by @table @asis.  Fix formatting of one item.
+
+2012-04-18  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.texinfo (Auto-loading verbose mode): Fix smallexample typo.
+
+2012-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	New option "set debug auto-load".
+	* gdb.texinfo (Auto-loading): New menu item for auto-load verbose mode.
+	(auto-load verbose mode): New node.
+
+2012-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	New option "set auto-load safe-path".
+	* gdb.texinfo (Auto-loading): Extend the "show auto-load"
+	and "info auto-load" examples for safe-path.  Put there also references
+	for "set auto-load safe-path" and "show auto-load safe-path".
+	New menu item for Auto-loading safe path.
+	(Auto-loading safe path): New node.
+	(Python Auto-loading): Update the expected output from "Missing"
+	to "No".
+
+2012-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	auto-load: Implementation.
+	* gdb.texinfo (Mode Options): New anchor for -nx.
+	(Startup): New anchors for Option -init-eval-command,
+	Home Directory Init File
+	and Init File in the Current Directory during Startup.
+	Mention set auto-load local-gdbinit with a reference.
+	Change the sample code to "set auto-load python-scripts".
+	(Threads): New anchor set libthread-db-search-path.
+	Provide references to libthread_db.so.1 file.
+	(Controlling GDB): New menu item for Auto-loading.
+	(Auto-loading, Init File in the Current Directory)
+	(libthread_db.so.1 file, objfile-gdb.gdb file): New nodes.
+	(Python): Rename the menu item Auto-loading to Python Auto-loading.
+	(Writing a Pretty-Printer, Objfiles In Python): Update the renamed
+	reference.
+	(Auto-loading): Rename to ...
+	(Python Auto-loading): ... here.  Change "set auto-load-scripts" to
+	"set auto-load python-scripts", new anchor for it.  Change
+	"show auto-load-scripts" to "show auto-load python-scripts", new anchor
+	for it.  Change "info auto-load-scripts"
+	to "info auto-load python-scripts", new anchor for it.  Change "scripts"
+	to "Python scripts".
+
+2012-04-14  Anton Gorenkov <xgsa at yandex.ru>
+
+	PR mi/13393
+	* gdb.texinfo (Print Settings): Extend the description for "set print
+	object".
+	(GDB/MI Variable Objects): Extend the description for -var-create and
+	-var-list-children.
+
+2012-04-11  Siva Chandra Reddy  <sivachandra at google.com>
+
+	* gdb.texinfo (Examining Data): Document the 'explore' command.
+
+2012-03-28  Joel Brobecker  <brobecker at adacore.com>
+
+	* gdb.texinfo (GDB/MI Variable Objects): Document what happens
+	to the children of a varobj and its update range when -var-update
+	returns that the varobj's type changed.
+
+2012-03-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.texinfo (Auto-loading): Move @menu to the end of @node.
+	Create two new links fir 'objfile-gdb.py file'
+	and 'dotdebug_gdb_scripts section'.
+
+2012-03-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.texinfo (Auto-loading): Rename node reference
+	'.debug_gdb_scripts section' to 'dotdebug_gdb_scripts section'.
+	Twice.
+	(.debug_gdb_scripts section): Rename the node ...
+	(dotdebug_gdb_scripts section): ... here.
+	(Maintenance Commands): Also rename this node reference.
+
+2012-03-22  Siva Chandra Reddy  <sivachandra at google.com>
+
+	* gdb.texinfo (Python API/Values From Inferior): Add description
+	about the new method Value.referenced_value.  Add description on
+	how Value.dereference is different (and similar) to
+	Value.referenced_value.
+
+2012-03-19  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.texinfo (File Options): Describe --init-command=FILE, -ix and
+	--init-eval-command=COMMAND, -iex.
+	(Startup): Describe -iex and -ix.  Simplify the example
+	for "set auto-load-scripts off".
+
+2012-03-16  Gary Benson  <gbenson at redhat.com>
+
+	PR breakpoints/10738
+	* gdb.texinfo (Inline Functions): Remove the now-unnecessary @item
+	stating that GDB cannot set breakpoints on inlined functions.
+	(Mode Options): Document --use-deprecated-index-sections.
+	(Index Section Format): Document new index section version format.
+
+2012-03-15  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.texinfo (Debugging C Plus Plus): Document "info vtbl".
+
+2012-03-13  Doug Evans  <dje at google.com>
+
+	* gdb.texinfo (Help): Change apropos example to use "alias" instead
+	of "reload".
+	(Symbols): Delete docs for set/show symbol-reloading.
+	* gdbint.texinfo (Defining Other Architecture Features): Delete
+	SYMBOL_RELOADING_DEFAULT.
+	* refcard.tex: Delete reference to symbol-reloading.
+
+2012-03-07  Pedro Alves  <palves at redhat.com>
+
+	* gdb.texinfo (General Query Packets): Document new
+	QProgramSignals packet.
+	* gdb.texinfo (Remote configuration): Mention
+	"program-signals-packet".
+
+2012-03-05  Tristan Gingold  <gingold at adacore.com>
+
+	* gdb.texinfo (General Query Packets): Document xfer:uib:read.
+
+2012-03-03  Yao Qi  <yao at codesourcery.com>
+
+	* gdb.texinfo (In-Process Agent): New node.
+	Document new commands.
+	(General Query Packets): Add packet `QAgent'.
+
+2012-03-01  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* gdb.texinfo (MIPS Features): Add org.gnu.gdb.mips.dsp.
+
+2012-03-01  Scott J. Goldman <scottjg at vmware.com>
+
+	* gdb.texinfo (Commands In Python): Put example python macro in
+	COMMAND_USER category rather than COMMAND_OBSCURE.
+	Document gdb.COMMAND_USER.
+	(User-defined Commands): Update documentation to clarify
+	"set/show max-user-call-depth" and "show user" don't apply to python
+	commands.  Update documentation to clarify "help user-defined" may
+	also include python commands defined as COMMAND_USER.
+
+2012-02-25  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.texinfo (Startup): Add option -ex description to the option -x
+	description.
+
+2012-02-24  Luis Machado  <lgustavo at codesourcery.com>
+
+	* gdb.texinfo (Setting Breakpoints): Mention and explain the
+	condition-evaluation breakpoint parameter.
+	Mention condition-evaluation mode being shown in "info break".
+	(Break Conditions): Add description for target-side
+	conditional breakpoints.
+	(Remote Configuration): Mention conditional-breakpoints-packet. 
+	(Packets): Add cond-expr parameter to Z0/Z1 packets and explain
+	cond-expr.
+	(General Query Packets): Mention new ConditionalBreakpoint feature.
+
+2012-02-22  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.texinfo (Blocks In Python): Clarify block iteration.
+
+2012-02-17  Tom Tromey  <tromey at redhat.com>
+
+	PR python/10753:
+	* gdb.texinfo (objfile-gdb.py file): Fix location of auto-load
+	directory.
+
+2012-02-14  Stan Shebs  <stan at codesourcery.com>
+
+	* gdb.texinfo (Disabling Breakpoints): Document enable count.
+
+2012-02-13  Pedro Alves  <palves at redhat.com>
+
+	* gdb.texinfo (MIPS boards): Refer to mips-elf instead of
+	mips-idt-ecoff.
+
+2012-02-09  Yao Qi  <yao at codesourcery.com>
+
+	* gdb.texinfo (Symbols In Python): Add missing `@end defvar'.
+
+2012-02-07  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.texinfo (Symbols In Python): Document Symbol.needs_frame and
+	Symbol.value.
+
+2012-02-07  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.texinfo (Symbols In Python): Document Symbol.line.
+
+2012-01-27  Thomas Schwinge  <thomas at codesourcery.com>
+
+	* gdb.textinfo (Packets): Move vCont paragraph to the correct place.
+
+2012-01-24  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.texinfo (Set Catchpoints): Document "catch load" and "catch
+	unload".
+	(Files): Mention new catch commands.
+	(GDB/MI Async Records): Likewise.
+
+2012-01-24  Gary Benson  <gbenson at redhat.com>
+
+	Delete #if 0'd out code.
+	* gdb.texinfo (Frame Info): Remove "info catch".
+
+2012-01-20  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* gdb.texinfo (Remote Configuration): Document
+	"set remote hostio-readlink-packet" command.
+	(General Query Packets): Document vFile:readlink packet.
+
+2012-01-16  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.texinfo (Specify Location): Document relative file name
+	handling.
+
+2012-01-16  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.texinfo (gdb.printing): Document FlagEnumerationPrinter.
+
+2012-01-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	    Eli Zaretskii  <eliz at gnu.org>
+
+	* gdbint.texinfo (Coding Standards): Require braces for two lines of
+	code.
+
+2012-01-11  Paul Hilfinger  <hilfingr at adacore.com>
+
+	* gdb.texinfo (Variables): Document use of :: for non-static
+	variables.
+
+2012-01-05  Joel Brobecker  <brobecker at adacore.com>
+
+	* gdbint.texinfo (Start of New Year Procedure): Update
+	to replace use of copyright.sh by use of copyright.py.
+
+2012-01-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Remove the gdbtui binary.
+	* all-cfg.texi (GDBTUI): Remove.
+	* gdb.texinfo (Mode Options): Remove the GDBTUI reference.
+	(TUI): Remove GDBTUI pindex.  Remove the GDBTUI reference.
+	* gdbint.texinfo (Testsuite): Replace `gdbtui' by `gdb -tui'.
+
 2011-12-23  Kevin Pouget  <kevin.pouget at st.com>
 
-	Introduce gdb.FinishBreakpoint in Python
+	Introduce gdb.FinishBreakpoint in Python.
 	* gdb.texinfo (Finish Breakpoints in Python): New subsection.
 	(Python API): Add menu entry for Finish Breakpoints.
 
+2011-12-19  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdbint.texinfo (Testsuite): Describe KFAIL and XFAIL in Writing
+	tests.
+
+2011-12-16  Doug Evans  <dje at google.com>
+
+	* gdb.texinfo (Server): Document -/stdio argument to gdbserver.
+
 2011-12-16  Phil Muldoon  <pmuldoon at redhat.com>
 
 	* gdb.texinfo (Python Commands): Remove "maint set/show print
 	stack".  Add documentation for "set/show python print-stack".
 
+2011-12-14  Pedro Alves  <pedro at codesourcery.com>
+
+	* gdb.texinfo (Implementing a Remote Stub): Explain that you
+	should transfer control to the stub in the startup code instead of
+	in main.  Mention the need to get past the initial breakpoint.
+
 2011-12-06  Tom Tromey  <tromey at redhat.com>
 
 	* gdb.texinfo (Set Breaks): Update for new behavior.
diff --git a/gdb/doc/agentexpr.texi b/gdb/doc/agentexpr.texi
index 8b13789..1b0a397 100644
--- a/gdb/doc/agentexpr.texi
+++ b/gdb/doc/agentexpr.texi
@@ -1 +1,767 @@
+ at c \input texinfo
+ at c %**start of header
+ at c @setfilename agentexpr.info
+ at c @settitle GDB Agent Expressions
+ at c @setchapternewpage off
+ at c %**end of header
 
+ at c This file is part of the GDB manual.
+ at c
+ at c Copyright (C) 2003-2006, 2009-2012 Free Software Foundation, Inc.
+ at c
+ at c See the file gdb.texinfo for copying conditions.
+
+ at node Agent Expressions
+ at appendix The GDB Agent Expression Mechanism
+
+In some applications, it is not feasible for the debugger to interrupt
+the program's execution long enough for the developer to learn anything
+helpful about its behavior.  If the program's correctness depends on its
+real-time behavior, delays introduced by a debugger might cause the
+program to fail, even when the code itself is correct.  It is useful to
+be able to observe the program's behavior without interrupting it.
+
+Using GDB's @code{trace} and @code{collect} commands, the user can
+specify locations in the program, and arbitrary expressions to evaluate
+when those locations are reached.  Later, using the @code{tfind}
+command, she can examine the values those expressions had when the
+program hit the trace points.  The expressions may also denote objects
+in memory --- structures or arrays, for example --- whose values GDB
+should record; while visiting a particular tracepoint, the user may
+inspect those objects as if they were in memory at that moment.
+However, because GDB records these values without interacting with the
+user, it can do so quickly and unobtrusively, hopefully not disturbing
+the program's behavior.
+
+When GDB is debugging a remote target, the GDB @dfn{agent} code running
+on the target computes the values of the expressions itself.  To avoid
+having a full symbolic expression evaluator on the agent, GDB translates
+expressions in the source language into a simpler bytecode language, and
+then sends the bytecode to the agent; the agent then executes the
+bytecode, and records the values for GDB to retrieve later.
+
+The bytecode language is simple; there are forty-odd opcodes, the bulk
+of which are the usual vocabulary of C operands (addition, subtraction,
+shifts, and so on) and various sizes of literals and memory reference
+operations.  The bytecode interpreter operates strictly on machine-level
+values --- various sizes of integers and floating point numbers --- and
+requires no information about types or symbols; thus, the interpreter's
+internal data structures are simple, and each bytecode requires only a
+few native machine instructions to implement it.  The interpreter is
+small, and strict limits on the memory and time required to evaluate an
+expression are easy to determine, making it suitable for use by the
+debugging agent in real-time applications.
+
+ at menu
+* General Bytecode Design::     Overview of the interpreter.
+* Bytecode Descriptions::       What each one does.
+* Using Agent Expressions::     How agent expressions fit into the big picture.
+* Varying Target Capabilities:: How to discover what the target can do.
+* Rationale::                   Why we did it this way.
+ at end menu
+
+
+ at c @node Rationale
+ at c @section Rationale
+
+
+ at node General Bytecode Design
+ at section General Bytecode Design
+
+The agent represents bytecode expressions as an array of bytes.  Each
+instruction is one byte long (thus the term @dfn{bytecode}).  Some
+instructions are followed by operand bytes; for example, the @code{goto}
+instruction is followed by a destination for the jump.
+
+The bytecode interpreter is a stack-based machine; most instructions pop
+their operands off the stack, perform some operation, and push the
+result back on the stack for the next instruction to consume.  Each
+element of the stack may contain either a integer or a floating point
+value; these values are as many bits wide as the largest integer that
+can be directly manipulated in the source language.  Stack elements
+carry no record of their type; bytecode could push a value as an
+integer, then pop it as a floating point value.  However, GDB will not
+generate code which does this.  In C, one might define the type of a
+stack element as follows:
+ at example
+union agent_val @{
+  LONGEST l;
+  DOUBLEST d;
+@};
+ at end example
+ at noindent
+where @code{LONGEST} and @code{DOUBLEST} are @code{typedef} names for
+the largest integer and floating point types on the machine.
+
+By the time the bytecode interpreter reaches the end of the expression,
+the value of the expression should be the only value left on the stack.
+For tracing applications, @code{trace} bytecodes in the expression will
+have recorded the necessary data, and the value on the stack may be
+discarded.  For other applications, like conditional breakpoints, the
+value may be useful.
+
+Separate from the stack, the interpreter has two registers:
+ at table @code
+ at item pc
+The address of the next bytecode to execute.
+
+ at item start
+The address of the start of the bytecode expression, necessary for
+interpreting the @code{goto} and @code{if_goto} instructions.
+
+ at end table
+ at noindent
+Neither of these registers is directly visible to the bytecode language
+itself, but they are useful for defining the meanings of the bytecode
+operations.
+
+There are no instructions to perform side effects on the running
+program, or call the program's functions; we assume that these
+expressions are only used for unobtrusive debugging, not for patching
+the running code.  
+
+Most bytecode instructions do not distinguish between the various sizes
+of values, and operate on full-width values; the upper bits of the
+values are simply ignored, since they do not usually make a difference
+to the value computed.  The exceptions to this rule are:
+ at table @asis
+
+ at item memory reference instructions (@code{ref}@var{n})
+There are distinct instructions to fetch different word sizes from
+memory.  Once on the stack, however, the values are treated as full-size
+integers.  They may need to be sign-extended; the @code{ext} instruction
+exists for this purpose.
+
+ at item the sign-extension instruction (@code{ext} @var{n})
+These clearly need to know which portion of their operand is to be
+extended to occupy the full length of the word.
+
+ at end table
+
+If the interpreter is unable to evaluate an expression completely for
+some reason (a memory location is inaccessible, or a divisor is zero,
+for example), we say that interpretation ``terminates with an error''.
+This means that the problem is reported back to the interpreter's caller
+in some helpful way.  In general, code using agent expressions should
+assume that they may attempt to divide by zero, fetch arbitrary memory
+locations, and misbehave in other ways.
+
+Even complicated C expressions compile to a few bytecode instructions;
+for example, the expression @code{x + y * z} would typically produce
+code like the following, assuming that @code{x} and @code{y} live in
+registers, and @code{z} is a global variable holding a 32-bit
+ at code{int}:
+ at example
+reg 1
+reg 2
+const32 @i{address of z}
+ref32
+ext 32
+mul
+add
+end
+ at end example
+
+In detail, these mean:
+ at table @code
+
+ at item reg 1
+Push the value of register 1 (presumably holding @code{x}) onto the
+stack.
+
+ at item reg 2
+Push the value of register 2 (holding @code{y}).
+
+ at item const32 @i{address of z}
+Push the address of @code{z} onto the stack.
+
+ at item ref32
+Fetch a 32-bit word from the address at the top of the stack; replace
+the address on the stack with the value.  Thus, we replace the address
+of @code{z} with @code{z}'s value.
+
+ at item ext 32
+Sign-extend the value on the top of the stack from 32 bits to full
+length.  This is necessary because @code{z} is a signed integer.
+
+ at item mul
+Pop the top two numbers on the stack, multiply them, and push their
+product.  Now the top of the stack contains the value of the expression
+ at code{y * z}.
+
+ at item add
+Pop the top two numbers, add them, and push the sum.  Now the top of the
+stack contains the value of @code{x + y * z}.
+
+ at item end
+Stop executing; the value left on the stack top is the value to be
+recorded.
+
+ at end table
+
+
+ at node Bytecode Descriptions
+ at section Bytecode Descriptions
+
+Each bytecode description has the following form:
+
+ at table @asis
+
+ at item @code{add} (0x02): @var{a} @var{b} @result{} @var{a+b}
+
+Pop the top two stack items, @var{a} and @var{b}, as integers; push
+their sum, as an integer.
+
+ at end table
+
+In this example, @code{add} is the name of the bytecode, and
+ at code{(0x02)} is the one-byte value used to encode the bytecode, in
+hexadecimal.  The phrase ``@var{a} @var{b} @result{} @var{a+b}'' shows
+the stack before and after the bytecode executes.  Beforehand, the stack
+must contain at least two values, @var{a} and @var{b}; since the top of
+the stack is to the right, @var{b} is on the top of the stack, and
+ at var{a} is underneath it.  After execution, the bytecode will have
+popped @var{a} and @var{b} from the stack, and replaced them with a
+single value, @var{a+b}.  There may be other values on the stack below
+those shown, but the bytecode affects only those shown.
+
+Here is another example:
+
+ at table @asis
+
+ at item @code{const8} (0x22) @var{n}: @result{} @var{n}
+Push the 8-bit integer constant @var{n} on the stack, without sign
+extension.
+
+ at end table
+
+In this example, the bytecode @code{const8} takes an operand @var{n}
+directly from the bytecode stream; the operand follows the @code{const8}
+bytecode itself.  We write any such operands immediately after the name
+of the bytecode, before the colon, and describe the exact encoding of
+the operand in the bytecode stream in the body of the bytecode
+description.
+
+For the @code{const8} bytecode, there are no stack items given before
+the @result{}; this simply means that the bytecode consumes no values
+from the stack.  If a bytecode consumes no values, or produces no
+values, the list on either side of the @result{} may be empty.
+
+If a value is written as @var{a}, @var{b}, or @var{n}, then the bytecode
+treats it as an integer.  If a value is written is @var{addr}, then the
+bytecode treats it as an address.
+
+We do not fully describe the floating point operations here; although
+this design can be extended in a clean way to handle floating point
+values, they are not of immediate interest to the customer, so we avoid
+describing them, to save time.
+
+
+ at table @asis
+
+ at item @code{float} (0x01): @result{}
+
+Prefix for floating-point bytecodes.  Not implemented yet.
+
+ at item @code{add} (0x02): @var{a} @var{b} @result{} @var{a+b}
+Pop two integers from the stack, and push their sum, as an integer.
+
+ at item @code{sub} (0x03): @var{a} @var{b} @result{} @var{a-b}
+Pop two integers from the stack, subtract the top value from the
+next-to-top value, and push the difference.
+
+ at item @code{mul} (0x04): @var{a} @var{b} @result{} @var{a*b}
+Pop two integers from the stack, multiply them, and push the product on
+the stack.  Note that, when one multiplies two @var{n}-bit numbers
+yielding another @var{n}-bit number, it is irrelevant whether the
+numbers are signed or not; the results are the same.
+
+ at item @code{div_signed} (0x05): @var{a} @var{b} @result{} @var{a/b}
+Pop two signed integers from the stack; divide the next-to-top value by
+the top value, and push the quotient.  If the divisor is zero, terminate
+with an error.
+
+ at item @code{div_unsigned} (0x06): @var{a} @var{b} @result{} @var{a/b}
+Pop two unsigned integers from the stack; divide the next-to-top value
+by the top value, and push the quotient.  If the divisor is zero,
+terminate with an error.
+
+ at item @code{rem_signed} (0x07): @var{a} @var{b} @result{} @var{a modulo b}
+Pop two signed integers from the stack; divide the next-to-top value by
+the top value, and push the remainder.  If the divisor is zero,
+terminate with an error.
+
+ at item @code{rem_unsigned} (0x08): @var{a} @var{b} @result{} @var{a modulo b}
+Pop two unsigned integers from the stack; divide the next-to-top value
+by the top value, and push the remainder.  If the divisor is zero,
+terminate with an error.
+
+ at item @code{lsh} (0x09): @var{a} @var{b} @result{} @var{a<<b}
+Pop two integers from the stack; let @var{a} be the next-to-top value,
+and @var{b} be the top value.  Shift @var{a} left by @var{b} bits, and
+push the result.
+
+ at item @code{rsh_signed} (0x0a): @var{a} @var{b} @result{} @code{(signed)}@var{a>>b}
+Pop two integers from the stack; let @var{a} be the next-to-top value,
+and @var{b} be the top value.  Shift @var{a} right by @var{b} bits,
+inserting copies of the top bit at the high end, and push the result.
+
+ at item @code{rsh_unsigned} (0x0b): @var{a} @var{b} @result{} @var{a>>b}
+Pop two integers from the stack; let @var{a} be the next-to-top value,
+and @var{b} be the top value.  Shift @var{a} right by @var{b} bits,
+inserting zero bits at the high end, and push the result.
+
+ at item @code{log_not} (0x0e): @var{a} @result{} @var{!a}
+Pop an integer from the stack; if it is zero, push the value one;
+otherwise, push the value zero.
+
+ at item @code{bit_and} (0x0f): @var{a} @var{b} @result{} @var{a&b}
+Pop two integers from the stack, and push their bitwise @code{and}.
+
+ at item @code{bit_or} (0x10): @var{a} @var{b} @result{} @var{a|b}
+Pop two integers from the stack, and push their bitwise @code{or}.
+
+ at item @code{bit_xor} (0x11): @var{a} @var{b} @result{} @var{a^b}
+Pop two integers from the stack, and push their bitwise
+exclusive- at code{or}.
+
+ at item @code{bit_not} (0x12): @var{a} @result{} @var{~a}
+Pop an integer from the stack, and push its bitwise complement.
+
+ at item @code{equal} (0x13): @var{a} @var{b} @result{} @var{a=b}
+Pop two integers from the stack; if they are equal, push the value one;
+otherwise, push the value zero.
+
+ at item @code{less_signed} (0x14): @var{a} @var{b} @result{} @var{a<b}
+Pop two signed integers from the stack; if the next-to-top value is less
+than the top value, push the value one; otherwise, push the value zero.
+
+ at item @code{less_unsigned} (0x15): @var{a} @var{b} @result{} @var{a<b}
+Pop two unsigned integers from the stack; if the next-to-top value is less
+than the top value, push the value one; otherwise, push the value zero.
+
+ at item @code{ext} (0x16) @var{n}: @var{a} @result{} @var{a}, sign-extended from @var{n} bits
+Pop an unsigned value from the stack; treating it as an @var{n}-bit
+twos-complement value, extend it to full length.  This means that all
+bits to the left of bit @var{n-1} (where the least significant bit is bit
+0) are set to the value of bit @var{n-1}.  Note that @var{n} may be
+larger than or equal to the width of the stack elements of the bytecode
+engine; in this case, the bytecode should have no effect.
+
+The number of source bits to preserve, @var{n}, is encoded as a single
+byte unsigned integer following the @code{ext} bytecode.
+
+ at item @code{zero_ext} (0x2a) @var{n}: @var{a} @result{} @var{a}, zero-extended from @var{n} bits
+Pop an unsigned value from the stack; zero all but the bottom @var{n}
+bits.  This means that all bits to the left of bit @var{n-1} (where the
+least significant bit is bit 0) are set to the value of bit @var{n-1}.
+
+The number of source bits to preserve, @var{n}, is encoded as a single
+byte unsigned integer following the @code{zero_ext} bytecode.
+
+ at item @code{ref8} (0x17): @var{addr} @result{} @var{a}
+ at itemx @code{ref16} (0x18): @var{addr} @result{} @var{a}
+ at itemx @code{ref32} (0x19): @var{addr} @result{} @var{a}
+ at itemx @code{ref64} (0x1a): @var{addr} @result{} @var{a}
+Pop an address @var{addr} from the stack.  For bytecode
+ at code{ref}@var{n}, fetch an @var{n}-bit value from @var{addr}, using the
+natural target endianness.  Push the fetched value as an unsigned
+integer.
+
+Note that @var{addr} may not be aligned in any particular way; the
+ at code{ref at var{n}} bytecodes should operate correctly for any address.
+
+If attempting to access memory at @var{addr} would cause a processor
+exception of some sort, terminate with an error.
+
+ at item @code{ref_float} (0x1b): @var{addr} @result{} @var{d}
+ at itemx @code{ref_double} (0x1c): @var{addr} @result{} @var{d}
+ at itemx @code{ref_long_double} (0x1d): @var{addr} @result{} @var{d}
+ at itemx @code{l_to_d} (0x1e): @var{a} @result{} @var{d}
+ at itemx @code{d_to_l} (0x1f): @var{d} @result{} @var{a}
+Not implemented yet.
+
+ at item @code{dup} (0x28): @var{a} => @var{a} @var{a}
+Push another copy of the stack's top element.
+
+ at item @code{swap} (0x2b): @var{a} @var{b} => @var{b} @var{a}
+Exchange the top two items on the stack.
+
+ at item @code{pop} (0x29): @var{a} =>
+Discard the top value on the stack.
+
+ at item @code{pick} (0x32) @var{n}: @var{a} @dots{} @var{b} => @var{a} @dots{} @var{b} @var{a}
+Duplicate an item from the stack and push it on the top of the stack.
+ at var{n}, a single byte, indicates the stack item to copy.  If @var{n}
+is zero, this is the same as @code{dup}; if @var{n} is one, it copies
+the item under the top item, etc.  If @var{n} exceeds the number of
+items on the stack, terminate with an error.
+
+ at item @code{rot} (0x33): @var{a} @var{b} @var{c} => @var{c} @var{b} @var{a}
+Rotate the top three items on the stack.
+
+ at item @code{if_goto} (0x20) @var{offset}: @var{a} @result{}
+Pop an integer off the stack; if it is non-zero, branch to the given
+offset in the bytecode string.  Otherwise, continue to the next
+instruction in the bytecode stream.  In other words, if @var{a} is
+non-zero, set the @code{pc} register to @code{start} + @var{offset}.
+Thus, an offset of zero denotes the beginning of the expression.
+
+The @var{offset} is stored as a sixteen-bit unsigned value, stored
+immediately following the @code{if_goto} bytecode.  It is always stored
+most significant byte first, regardless of the target's normal
+endianness.  The offset is not guaranteed to fall at any particular
+alignment within the bytecode stream; thus, on machines where fetching a
+16-bit on an unaligned address raises an exception, you should fetch the
+offset one byte at a time.
+
+ at item @code{goto} (0x21) @var{offset}: @result{}
+Branch unconditionally to @var{offset}; in other words, set the
+ at code{pc} register to @code{start} + @var{offset}.
+
+The offset is stored in the same way as for the @code{if_goto} bytecode.
+
+ at item @code{const8} (0x22) @var{n}: @result{} @var{n}
+ at itemx @code{const16} (0x23) @var{n}: @result{} @var{n}
+ at itemx @code{const32} (0x24) @var{n}: @result{} @var{n}
+ at itemx @code{const64} (0x25) @var{n}: @result{} @var{n}
+Push the integer constant @var{n} on the stack, without sign extension.
+To produce a small negative value, push a small twos-complement value,
+and then sign-extend it using the @code{ext} bytecode.
+
+The constant @var{n} is stored in the appropriate number of bytes
+following the @code{const}@var{b} bytecode.  The constant @var{n} is
+always stored most significant byte first, regardless of the target's
+normal endianness.  The constant is not guaranteed to fall at any
+particular alignment within the bytecode stream; thus, on machines where
+fetching a 16-bit on an unaligned address raises an exception, you
+should fetch @var{n} one byte at a time.
+
+ at item @code{reg} (0x26) @var{n}: @result{} @var{a}
+Push the value of register number @var{n}, without sign extension.  The
+registers are numbered following GDB's conventions.
+
+The register number @var{n} is encoded as a 16-bit unsigned integer
+immediately following the @code{reg} bytecode.  It is always stored most
+significant byte first, regardless of the target's normal endianness.
+The register number is not guaranteed to fall at any particular
+alignment within the bytecode stream; thus, on machines where fetching a
+16-bit on an unaligned address raises an exception, you should fetch the
+register number one byte at a time.
+
+ at item @code{getv} (0x2c) @var{n}: @result{} @var{v}
+Push the value of trace state variable number @var{n}, without sign
+extension.
+
+The variable number @var{n} is encoded as a 16-bit unsigned integer
+immediately following the @code{getv} bytecode.  It is always stored most
+significant byte first, regardless of the target's normal endianness.
+The variable number is not guaranteed to fall at any particular
+alignment within the bytecode stream; thus, on machines where fetching a
+16-bit on an unaligned address raises an exception, you should fetch the
+register number one byte at a time.
+
+ at item @code{setv} (0x2d) @var{n}: @result{} @var{v}
+Set trace state variable number @var{n} to the value found on the top
+of the stack.  The stack is unchanged, so that the value is readily
+available if the assignment is part of a larger expression.  The
+handling of @var{n} is as described for @code{getv}.
+
+ at item @code{trace} (0x0c): @var{addr} @var{size} @result{}
+Record the contents of the @var{size} bytes at @var{addr} in a trace
+buffer, for later retrieval by GDB.
+
+ at item @code{trace_quick} (0x0d) @var{size}: @var{addr} @result{} @var{addr}
+Record the contents of the @var{size} bytes at @var{addr} in a trace
+buffer, for later retrieval by GDB.  @var{size} is a single byte
+unsigned integer following the @code{trace} opcode.
+
+This bytecode is equivalent to the sequence @code{dup const8 @var{size}
+trace}, but we provide it anyway to save space in bytecode strings.
+
+ at item @code{trace16} (0x30) @var{size}: @var{addr} @result{} @var{addr}
+Identical to trace_quick, except that @var{size} is a 16-bit big-endian
+unsigned integer, not a single byte.  This should probably have been
+named @code{trace_quick16}, for consistency.
+
+ at item @code{tracev} (0x2e) @var{n}: @result{} @var{a}
+Record the value of trace state variable number @var{n} in the trace
+buffer.  The handling of @var{n} is as described for @code{getv}.
+
+ at item @code{tracenz} (0x2f)  @var{addr} @var{size} @result{}
+Record the bytes at @var{addr} in a trace buffer, for later retrieval
+by GDB.  Stop at either the first zero byte, or when @var{size} bytes
+have been recorded, whichever occurs first.
+
+ at item @code{printf} (0x34)  @var{numargs} @var{string} @result{}
+Do a formatted print, in the style of the C function @code{printf}).
+The value of @var{numargs} is the number of arguments to expect on the
+stack, while @var{string} is the format string, prefixed with a
+two-byte length.  The last byte of the string must be zero, and is
+included in the length.  The format string includes escaped sequences
+just as it appears in C source, so for instance the format string
+ at code{"\t%d\n"} is six characters long, and the output will consist of
+a tab character, a decimal number, and a newline.  At the top of the
+stack, above the values to be printed, this bytecode will pop a
+``function'' and ``channel''.  If the function is nonzero, then the
+target may treat it as a function and call it, passing the channel as
+a first argument, as with the C function @code{fprintf}.  If the
+function is zero, then the target may simply call a standard formatted
+print function of its choice.  In all, this bytecode pops 2 +
+ at var{numargs} stack elements, and pushes nothing.
+
+ at item @code{end} (0x27): @result{}
+Stop executing bytecode; the result should be the top element of the
+stack.  If the purpose of the expression was to compute an lvalue or a
+range of memory, then the next-to-top of the stack is the lvalue's
+address, and the top of the stack is the lvalue's size, in bytes.
+
+ at end table
+
+
+ at node Using Agent Expressions
+ at section Using Agent Expressions
+
+Agent expressions can be used in several different ways by @value{GDBN},
+and the debugger can generate different bytecode sequences as appropriate.
+
+One possibility is to do expression evaluation on the target rather
+than the host, such as for the conditional of a conditional
+tracepoint.  In such a case, @value{GDBN} compiles the source
+expression into a bytecode sequence that simply gets values from
+registers or memory, does arithmetic, and returns a result.
+
+Another way to use agent expressions is for tracepoint data
+collection.  @value{GDBN} generates a different bytecode sequence for
+collection; in addition to bytecodes that do the calculation,
+ at value{GDBN} adds @code{trace} bytecodes to save the pieces of
+memory that were used.
+
+ at itemize @bullet
+
+ at item
+The user selects trace points in the program's code at which GDB should
+collect data.
+
+ at item
+The user specifies expressions to evaluate at each trace point.  These
+expressions may denote objects in memory, in which case those objects'
+contents are recorded as the program runs, or computed values, in which
+case the values themselves are recorded.
+
+ at item
+GDB transmits the tracepoints and their associated expressions to the
+GDB agent, running on the debugging target.
+
+ at item
+The agent arranges to be notified when a trace point is hit.
+
+ at item
+When execution on the target reaches a trace point, the agent evaluates
+the expressions associated with that trace point, and records the
+resulting values and memory ranges.
+
+ at item
+Later, when the user selects a given trace event and inspects the
+objects and expression values recorded, GDB talks to the agent to
+retrieve recorded data as necessary to meet the user's requests.  If the
+user asks to see an object whose contents have not been recorded, GDB
+reports an error.
+
+ at end itemize
+
+
+ at node Varying Target Capabilities
+ at section Varying Target Capabilities
+
+Some targets don't support floating-point, and some would rather not
+have to deal with @code{long long} operations.  Also, different targets
+will have different stack sizes, and different bytecode buffer lengths.
+
+Thus, GDB needs a way to ask the target about itself.  We haven't worked
+out the details yet, but in general, GDB should be able to send the
+target a packet asking it to describe itself.  The reply should be a
+packet whose length is explicit, so we can add new information to the
+packet in future revisions of the agent, without confusing old versions
+of GDB, and it should contain a version number.  It should contain at
+least the following information:
+
+ at itemize @bullet
+
+ at item
+whether floating point is supported
+
+ at item
+whether @code{long long} is supported
+
+ at item
+maximum acceptable size of bytecode stack
+
+ at item
+maximum acceptable length of bytecode expressions
+
+ at item
+which registers are actually available for collection
+
+ at item
+whether the target supports disabled tracepoints
+
+ at end itemize
+
+ at node Rationale
+ at section Rationale
+
+Some of the design decisions apparent above are arguable.
+
+ at table @b
+
+ at item What about stack overflow/underflow?
+GDB should be able to query the target to discover its stack size.
+Given that information, GDB can determine at translation time whether a
+given expression will overflow the stack.  But this spec isn't about
+what kinds of error-checking GDB ought to do.
+
+ at item Why are you doing everything in LONGEST?
+
+Speed isn't important, but agent code size is; using LONGEST brings in a
+bunch of support code to do things like division, etc.  So this is a
+serious concern.
+
+First, note that you don't need different bytecodes for different
+operand sizes.  You can generate code without @emph{knowing} how big the
+stack elements actually are on the target.  If the target only supports
+32-bit ints, and you don't send any 64-bit bytecodes, everything just
+works.  The observation here is that the MIPS and the Alpha have only
+fixed-size registers, and you can still get C's semantics even though
+most instructions only operate on full-sized words.  You just need to
+make sure everything is properly sign-extended at the right times.  So
+there is no need for 32- and 64-bit variants of the bytecodes.  Just
+implement everything using the largest size you support.
+
+GDB should certainly check to see what sizes the target supports, so the
+user can get an error earlier, rather than later.  But this information
+is not necessary for correctness.
+
+
+ at item Why don't you have @code{>} or @code{<=} operators?
+I want to keep the interpreter small, and we don't need them.  We can
+combine the @code{less_} opcodes with @code{log_not}, and swap the order
+of the operands, yielding all four asymmetrical comparison operators.
+For example, @code{(x <= y)} is @code{! (x > y)}, which is @code{! (y <
+x)}.
+
+ at item Why do you have @code{log_not}?
+ at itemx Why do you have @code{ext}?
+ at itemx Why do you have @code{zero_ext}?
+These are all easily synthesized from other instructions, but I expect
+them to be used frequently, and they're simple, so I include them to
+keep bytecode strings short.
+
+ at code{log_not} is equivalent to @code{const8 0 equal}; it's used in half
+the relational operators.
+
+ at code{ext @var{n}} is equivalent to @code{const8 @var{s-n} lsh const8
+ at var{s-n} rsh_signed}, where @var{s} is the size of the stack elements;
+it follows @code{ref at var{m}} and @var{reg} bytecodes when the value
+should be signed.  See the next bulleted item.
+
+ at code{zero_ext @var{n}} is equivalent to @code{const at var{m} @var{mask}
+log_and}; it's used whenever we push the value of a register, because we
+can't assume the upper bits of the register aren't garbage.
+
+ at item Why not have sign-extending variants of the @code{ref} operators?
+Because that would double the number of @code{ref} operators, and we
+need the @code{ext} bytecode anyway for accessing bitfields.
+
+ at item Why not have constant-address variants of the @code{ref} operators?
+Because that would double the number of @code{ref} operators again, and
+ at code{const32 @var{address} ref32} is only one byte longer.
+
+ at item Why do the @code{ref at var{n}} operators have to support unaligned fetches?
+GDB will generate bytecode that fetches multi-byte values at unaligned
+addresses whenever the executable's debugging information tells it to.
+Furthermore, GDB does not know the value the pointer will have when GDB
+generates the bytecode, so it cannot determine whether a particular
+fetch will be aligned or not.
+
+In particular, structure bitfields may be several bytes long, but follow
+no alignment rules; members of packed structures are not necessarily
+aligned either.
+
+In general, there are many cases where unaligned references occur in
+correct C code, either at the programmer's explicit request, or at the
+compiler's discretion.  Thus, it is simpler to make the GDB agent
+bytecodes work correctly in all circumstances than to make GDB guess in
+each case whether the compiler did the usual thing.
+
+ at item Why are there no side-effecting operators?
+Because our current client doesn't want them?  That's a cheap answer.  I
+think the real answer is that I'm afraid of implementing function
+calls.  We should re-visit this issue after the present contract is
+delivered.
+
+ at item Why aren't the @code{goto} ops PC-relative?
+The interpreter has the base address around anyway for PC bounds
+checking, and it seemed simpler.
+
+ at item Why is there only one offset size for the @code{goto} ops?
+Offsets are currently sixteen bits.  I'm not happy with this situation
+either:
+
+Suppose we have multiple branch ops with different offset sizes.  As I
+generate code left-to-right, all my jumps are forward jumps (there are
+no loops in expressions), so I never know the target when I emit the
+jump opcode.  Thus, I have to either always assume the largest offset
+size, or do jump relaxation on the code after I generate it, which seems
+like a big waste of time.
+
+I can imagine a reasonable expression being longer than 256 bytes.  I
+can't imagine one being longer than 64k.  Thus, we need 16-bit offsets.
+This kind of reasoning is so bogus, but relaxation is pathetic.
+
+The other approach would be to generate code right-to-left.  Then I'd
+always know my offset size.  That might be fun.
+
+ at item Where is the function call bytecode?
+
+When we add side-effects, we should add this.
+
+ at item Why does the @code{reg} bytecode take a 16-bit register number?
+
+Intel's IA-64 architecture has 128 general-purpose registers,
+and 128 floating-point registers, and I'm sure it has some random
+control registers.
+
+ at item Why do we need @code{trace} and @code{trace_quick}?
+Because GDB needs to record all the memory contents and registers an
+expression touches.  If the user wants to evaluate an expression
+ at code{x->y->z}, the agent must record the values of @code{x} and
+ at code{x->y} as well as the value of @code{x->y->z}.
+
+ at item Don't the @code{trace} bytecodes make the interpreter less general?
+They do mean that the interpreter contains special-purpose code, but
+that doesn't mean the interpreter can only be used for that purpose.  If
+an expression doesn't use the @code{trace} bytecodes, they don't get in
+its way.
+
+ at item Why doesn't @code{trace_quick} consume its arguments the way everything else does?
+In general, you do want your operators to consume their arguments; it's
+consistent, and generally reduces the amount of stack rearrangement
+necessary.  However, @code{trace_quick} is a kludge to save space; it
+only exists so we needn't write @code{dup const8 @var{SIZE} trace}
+before every memory reference.  Therefore, it's okay for it not to
+consume its arguments; it's meant for a specific context in which we
+know exactly what it should do with the stack.  If we're going to have a
+kludge, it should be an effective kludge.
+
+ at item Why does @code{trace16} exist?
+That opcode was added by the customer that contracted Cygnus for the
+data tracing work.  I personally think it is unnecessary; objects that
+large will be quite rare, so it is okay to use @code{dup const16
+ at var{size} trace} in those cases.
+
+Whatever we decide to do with @code{trace16}, we should at least leave
+opcode 0x30 reserved, to remain compatible with the customer who added
+it.
+
+ at end table
diff --git a/gdb/doc/all-cfg.texi b/gdb/doc/all-cfg.texi
index 8b13789..0f9a353 100644
--- a/gdb/doc/all-cfg.texi
+++ b/gdb/doc/all-cfg.texi
@@ -1 +1,46 @@
-
+ at c GDB MANUAL configuration file.  
+ at c
+ at c Copyright (C) 1993, 1995, 1999, 2002, 2011-2012 Free Software
+ at c Foundation, Inc.
+ at c
+ at c NOTE: While the GDB manual is configurable (by changing these
+ at c switches), its configuration is ***NOT*** automatically tied in to
+ at c source configuration---because the authors expect that, save in
+ at c unusual cases, the most inclusive form of the manual is appropriate
+ at c no matter how the program itself is configured.
+ at c
+ at c The only automatically-varying variable is the GDB version number,
+ at c which the Makefile rewrites based on the VERSION variable from
+ at c `../Makefile.in'.  
+ at c 
+ at c GDB version number is recorded in the variable GDBVN
+ at include GDBvn.texi
+ at c
+ at c ----------------------------------------------------------------------
+ at c PLATFORM FLAGS:
+ at set GENERIC
+ at c
+ at c HP PA-RISC target ONLY:
+ at clear HPPA
+ at c
+ at c Refrain from discussing how to configure sw and format doc?
+ at clear PRECONFIGURED
+ at c
+ at c ----------------------------------------------------------------------
+ at c STRINGS:
+ at c
+ at c Name of GDB program.  Used also for (gdb) prompt string.
+ at set GDBP gdb
+ at c 
+ at c Name of GDB product.  Used in running text.
+ at set GDBN @sc{gdb}
+ at c
+ at c Name of host.  Should not be used in generic configs, but generic
+ at c value may catch some flubs.
+ at set HOST machine specific
+ at c
+ at c Name of GCC product
+ at set NGCC @sc{gcc}
+ at c 
+ at c Name of GCC program
+ at set GCC gcc
diff --git a/gdb/doc/annotate.info b/gdb/doc/annotate.info
new file mode 100644
index 0000000..a728e72
--- /dev/null
+++ b/gdb/doc/annotate.info
@@ -0,0 +1,1192 @@
+This is annotate.info, produced by makeinfo version 4.8 from
+./annotate.texinfo.
+
+INFO-DIR-SECTION Software development
+START-INFO-DIR-ENTRY
+* Annotate: (annotate).                 The obsolete annotation interface.
+END-INFO-DIR-ENTRY
+
+   Copyright (C) 1994-1995, 2000-2001, 2003-2005, 2007-2012 Free
+Software Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+   This file documents GDB's obsolete annotations.
+
+   Copyright (C) 1994-1995, 2000-2001, 2003-2005, 2007-2012 Free
+Software Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+
+File: annotate.info,  Node: Top,  Next: Annotations Overview,  Up: (dir)
+
+GDB Annotations
+***************
+
+This document describes the obsolete level two annotation interface
+implemented in older GDB versions.
+
+* Menu:
+
+* Annotations Overview::  What annotations are; the general syntax.
+* Limitations::           Limitations of the annotation interface.
+* Migrating to GDB/MI::   Migrating to GDB/MI
+* Server Prefix::       Issuing a command without affecting user state.
+* Value Annotations::   Values are marked as such.
+* Frame Annotations::   Stack frames are annotated.
+* Displays::            GDB can be told to display something periodically.
+* Prompting::           Annotations marking GDB's need for input.
+* Errors::              Annotations for error messages.
+* Breakpoint Info::     Information on breakpoints.
+* Invalidation::        Some annotations describe things now invalid.
+* Annotations for Running::
+                        Whether the program is running, how it stopped, etc.
+* Source Annotations::  Annotations describing source code.
+* Multi-threaded Apps:: An annotation that reports multi-threadedness.
+
+* GNU Free Documentation License::
+
+
+File: annotate.info,  Node: Annotations Overview,  Next: Limitations,  Prev: Top,  Up: Top
+
+1 What is an Annotation?
+************************
+
+To produce obsolete level two annotations, start GDB with the
+`--annotate=2' option.
+
+   Annotations start with a newline character, two `control-z'
+characters, and the name of the annotation.  If there is no additional
+information associated with this annotation, the name of the annotation
+is followed immediately by a newline.  If there is additional
+information, the name of the annotation is followed by a space, the
+additional information, and a newline.  The additional information
+cannot contain newline characters.
+
+   Any output not beginning with a newline and two `control-z'
+characters denotes literal output from GDB.  Currently there is no need
+for GDB to output a newline followed by two `control-z' characters, but
+if there was such a need, the annotations could be extended with an
+`escape' annotation which means those three characters as output.
+
+   A simple example of starting up GDB with annotations is:
+
+     $ gdb --annotate=2
+     GNU GDB 5.0
+     Copyright 2000 Free Software Foundation, Inc.
+     GDB is free software, covered by the GNU General Public License,
+     and you are welcome to change it and/or distribute copies of it
+     under certain conditions.
+     Type "show copying" to see the conditions.
+     There is absolutely no warranty for GDB.  Type "show warranty"
+     for details.
+     This GDB was configured as "sparc-sun-sunos4.1.3"
+
+     ^Z^Zpre-prompt
+     (gdb)
+     ^Z^Zprompt
+     quit
+
+     ^Z^Zpost-prompt
+     $
+
+   Here `quit' is input to GDB; the rest is output from GDB.  The three
+lines beginning `^Z^Z' (where `^Z' denotes a `control-z' character) are
+annotations; the rest is output from GDB.
+
+
+File: annotate.info,  Node: Limitations,  Next: Migrating to GDB/MI,  Prev: Annotations Overview,  Up: Top
+
+2 Limitations of the Annotation Interface
+*****************************************
+
+The level two annotations mechanism is known to have a number of
+technical and architectural limitations.  As a consequence, in 2001,
+with the release of GDB 5.1 and the addition of GDB/MI, the annotation
+interface was marked as deprecated.
+
+   This chapter discusses the known problems.
+
+2.1 Dependant on CLI output
+===========================
+
+The annotation interface works by interspersing markups with GDB normal
+command-line interpreter output.  Unfortunately, this makes the
+annotation client dependant on not just the annotations, but also the
+CLI output.  This is because the client is forced to assume that
+specific GDB commands provide specific information.  Any change to
+GDB's CLI output modifies or removes that information and,
+consequently, likely breaks the client.
+
+   Since the GDB/MI output is independent of the CLI, it does not have
+this problem.
+
+2.2 Scalability
+===============
+
+The annotation interface relies on value annotations (*note Value
+Annotations::) and the display mechanism as a way of obtaining
+up-to-date value information.  These mechanisms are not scalable.
+
+   In a graphical environment, where many values can be displayed
+simultaneously, a serious performance problem occurs when the client
+tries to first extract from GDB, and then re-display, all those values.
+The client should instead only request and update the values that
+changed.
+
+   The GDB/MI Variable Objects provide just that mechanism.
+
+2.3 Correctness
+===============
+
+The annotation interface assumes that a variable's value can only be
+changed when the target is running.  This assumption is not correct.  A
+single assignment to a single variable can result in the entire target,
+and all displayed values, needing an update.
+
+   The GDB/MI Variable Objects include a mechanism for efficiently
+reporting such changes.
+
+2.4 Reliability
+===============
+
+The GDB/MI interface includes a dedicated test directory
+(`gdb/gdb.mi'), and any addition or fix to GDB/MI must include
+testsuite changes.
+
+2.5 Maintainability
+===================
+
+The annotation mechanism was implemented by interspersing CLI print
+statements with various annotations.  As a consequence, any CLI output
+change can alter the annotation output.
+
+   Since the GDB/MI output is independent of the CLI, and the GDB/MI is
+increasingly implemented independent of the CLI code, its long term
+maintenance is much easier.
+
+
+File: annotate.info,  Node: Migrating to GDB/MI,  Next: Server Prefix,  Prev: Limitations,  Up: Top
+
+3 Migrating to GDB/MI
+*********************
+
+By using the `interp mi' command, it is possible for annotation clients
+to invoke GDB/MI commands, and hence access the GDB/MI.  By doing this,
+existing annotation clients have a migration path from this obsolete
+interface to GDB/MI.
+
+
+File: annotate.info,  Node: Server Prefix,  Next: Value Annotations,  Prev: Migrating to GDB/MI,  Up: Top
+
+4 The Server Prefix
+*******************
+
+To issue a command to GDB without affecting certain aspects of the
+state which is seen by users, prefix it with `server '.  This means
+that this command will not affect the command history, nor will it
+affect GDB's notion of which command to repeat if <RET> is pressed on a
+line by itself.
+
+   The server prefix does not affect the recording of values into the
+value history; to print a value without recording it into the value
+history, use the `output' command instead of the `print' command.
+
+
+File: annotate.info,  Node: Value Annotations,  Next: Frame Annotations,  Prev: Server Prefix,  Up: Top
+
+5 Values
+********
+
+_Value Annotations have been removed.  GDB/MI instead provides Variable
+Objects._
+
+   When a value is printed in various contexts, GDB uses annotations to
+delimit the value from the surrounding text.
+
+   If a value is printed using `print' and added to the value history,
+the annotation looks like
+
+     ^Z^Zvalue-history-begin HISTORY-NUMBER VALUE-FLAGS
+     HISTORY-STRING
+     ^Z^Zvalue-history-value
+     THE-VALUE
+     ^Z^Zvalue-history-end
+
+where HISTORY-NUMBER is the number it is getting in the value history,
+HISTORY-STRING is a string, such as `$5 = ', which introduces the value
+to the user, THE-VALUE is the output corresponding to the value itself,
+and VALUE-FLAGS is `*' for a value which can be dereferenced and `-'
+for a value which cannot.
+
+   If the value is not added to the value history (it is an invalid
+float or it is printed with the `output' command), the annotation is
+similar:
+
+     ^Z^Zvalue-begin VALUE-FLAGS
+     THE-VALUE
+     ^Z^Zvalue-end
+
+   When GDB prints an argument to a function (for example, in the output
+from the `backtrace' command), it annotates it as follows:
+
+     ^Z^Zarg-begin
+     ARGUMENT-NAME
+     ^Z^Zarg-name-end
+     SEPARATOR-STRING
+     ^Z^Zarg-value VALUE-FLAGS
+     THE-VALUE
+     ^Z^Zarg-end
+
+where ARGUMENT-NAME is the name of the argument, SEPARATOR-STRING is
+text which separates the name from the value for the user's benefit
+(such as `='), and VALUE-FLAGS and THE-VALUE have the same meanings as
+in a `value-history-begin' annotation.
+
+   When printing a structure, GDB annotates it as follows:
+
+     ^Z^Zfield-begin VALUE-FLAGS
+     FIELD-NAME
+     ^Z^Zfield-name-end
+     SEPARATOR-STRING
+     ^Z^Zfield-value
+     THE-VALUE
+     ^Z^Zfield-end
+
+where FIELD-NAME is the name of the field, SEPARATOR-STRING is text
+which separates the name from the value for the user's benefit (such as
+`='), and VALUE-FLAGS and THE-VALUE have the same meanings as in a
+`value-history-begin' annotation.
+
+   When printing an array, GDB annotates it as follows:
+
+     ^Z^Zarray-section-begin ARRAY-INDEX VALUE-FLAGS
+
+where ARRAY-INDEX is the index of the first element being annotated and
+VALUE-FLAGS has the same meaning as in a `value-history-begin'
+annotation.  This is followed by any number of elements, where is
+element can be either a single element:
+
+     `,' WHITESPACE         ; omitted for the first element
+     THE-VALUE
+     ^Z^Zelt
+
+   or a repeated element
+
+     `,' WHITESPACE         ; omitted for the first element
+     THE-VALUE
+     ^Z^Zelt-rep NUMBER-OF-REPETITIONS
+     REPETITION-STRING
+     ^Z^Zelt-rep-end
+
+   In both cases, THE-VALUE is the output for the value of the element
+and WHITESPACE can contain spaces, tabs, and newlines.  In the repeated
+case, NUMBER-OF-REPETITIONS is the number of consecutive array elements
+which contain that value, and REPETITION-STRING is a string which is
+designed to convey to the user that repetition is being depicted.
+
+   Once all the array elements have been output, the array annotation is
+ended with
+
+     ^Z^Zarray-section-end
+
+
+File: annotate.info,  Node: Frame Annotations,  Next: Displays,  Prev: Value Annotations,  Up: Top
+
+6 Frames
+********
+
+_Value Annotations have been removed.  GDB/MI instead provides a number
+of frame commands._
+
+   _Frame annotations are no longer available.  The GDB/MI provides
+`-stack-list-arguments', `-stack-list-locals', and `-stack-list-frames'
+commands._
+
+   Whenever GDB prints a frame, it annotates it.  For example, this
+applies to frames printed when GDB stops, output from commands such as
+`backtrace' or `up', etc.
+
+   The frame annotation begins with
+
+     ^Z^Zframe-begin LEVEL ADDRESS
+     LEVEL-STRING
+
+where LEVEL is the number of the frame (0 is the innermost frame, and
+other frames have positive numbers), ADDRESS is the address of the code
+executing in that frame, and LEVEL-STRING is a string designed to
+convey the level to the user.  ADDRESS is in the form `0x' followed by
+one or more lowercase hex digits (note that this does not depend on the
+language).  The frame ends with
+
+     ^Z^Zframe-end
+
+   Between these annotations is the main body of the frame, which can
+consist of
+
+   *      ^Z^Zfunction-call
+          FUNCTION-CALL-STRING
+
+     where FUNCTION-CALL-STRING is text designed to convey to the user
+     that this frame is associated with a function call made by GDB to a
+     function in the program being debugged.
+
+   *      ^Z^Zsignal-handler-caller
+          SIGNAL-HANDLER-CALLER-STRING
+
+     where SIGNAL-HANDLER-CALLER-STRING is text designed to convey to
+     the user that this frame is associated with whatever mechanism is
+     used by this operating system to call a signal handler (it is the
+     frame which calls the signal handler, not the frame for the signal
+     handler itself).
+
+   * A normal frame.
+
+     This can optionally (depending on whether this is thought of as
+     interesting information for the user to see) begin with
+
+          ^Z^Zframe-address
+          ADDRESS
+          ^Z^Zframe-address-end
+          SEPARATOR-STRING
+
+     where ADDRESS is the address executing in the frame (the same
+     address as in the `frame-begin' annotation, but printed in a form
+     which is intended for user consumption--in particular, the syntax
+     varies depending on the language), and SEPARATOR-STRING is a string
+     intended to separate this address from what follows for the user's
+     benefit.
+
+     Then comes
+
+          ^Z^Zframe-function-name
+          FUNCTION-NAME
+          ^Z^Zframe-args
+          ARGUMENTS
+
+     where FUNCTION-NAME is the name of the function executing in the
+     frame, or `??' if not known, and ARGUMENTS are the arguments to
+     the frame, with parentheses around them (each argument is annotated
+     individually as well, *note Value Annotations::).
+
+     If source information is available, a reference to it is then
+     printed:
+
+          ^Z^Zframe-source-begin
+          SOURCE-INTRO-STRING
+          ^Z^Zframe-source-file
+          FILENAME
+          ^Z^Zframe-source-file-end
+          :
+          ^Z^Zframe-source-line
+          LINE-NUMBER
+          ^Z^Zframe-source-end
+
+     where SOURCE-INTRO-STRING separates for the user's benefit the
+     reference from the text which precedes it, FILENAME is the name of
+     the source file, and LINE-NUMBER is the line number within that
+     file (the first line is line 1).
+
+     If GDB prints some information about where the frame is from (which
+     library, which load segment, etc.; currently only done on the
+     RS/6000), it is annotated with
+
+          ^Z^Zframe-where
+          INFORMATION
+
+     Then, if source is to actually be displayed for this frame (for
+     example, this is not true for output from the `backtrace'
+     command), then a `source' annotation (*note Source Annotations::)
+     is displayed.  Unlike most annotations, this is output instead of
+     the normal text which would be output, not in addition.
+
+
+File: annotate.info,  Node: Displays,  Next: Prompting,  Prev: Frame Annotations,  Up: Top
+
+7 Displays
+**********
+
+_Display Annotations have been removed.  GDB/MI instead provides
+Variable Objects._
+
+   When GDB is told to display something using the `display' command,
+the results of the display are annotated:
+
+     ^Z^Zdisplay-begin
+     NUMBER
+     ^Z^Zdisplay-number-end
+     NUMBER-SEPARATOR
+     ^Z^Zdisplay-format
+     FORMAT
+     ^Z^Zdisplay-expression
+     EXPRESSION
+     ^Z^Zdisplay-expression-end
+     EXPRESSION-SEPARATOR
+     ^Z^Zdisplay-value
+     VALUE
+     ^Z^Zdisplay-end
+
+where NUMBER is the number of the display, NUMBER-SEPARATOR is intended
+to separate the number from what follows for the user, FORMAT includes
+information such as the size, format, or other information about how
+the value is being displayed, EXPRESSION is the expression being
+displayed, EXPRESSION-SEPARATOR is intended to separate the expression
+from the text that follows for the user, and VALUE is the actual value
+being displayed.
+
+
+File: annotate.info,  Node: Prompting,  Next: Errors,  Prev: Displays,  Up: Top
+
+8 Annotation for GDB Input
+**************************
+
+When GDB prompts for input, it annotates this fact so it is possible to
+know when to send output, when the output from a given command is over,
+etc.
+
+   Different kinds of input each have a different "input type".  Each
+input type has three annotations: a `pre-' annotation, which denotes
+the beginning of any prompt which is being output, a plain annotation,
+which denotes the end of the prompt, and then a `post-' annotation
+which denotes the end of any echo which may (or may not) be associated
+with the input.  For example, the `prompt' input type features the
+following annotations:
+
+     ^Z^Zpre-prompt
+     ^Z^Zprompt
+     ^Z^Zpost-prompt
+
+   The input types are
+
+`prompt'
+     When GDB is prompting for a command (the main GDB prompt).
+
+`commands'
+     When GDB prompts for a set of commands, like in the `commands'
+     command.  The annotations are repeated for each command which is
+     input.
+
+`overload-choice'
+     When GDB wants the user to select between various overloaded
+     functions.
+
+`query'
+     When GDB wants the user to confirm a potentially dangerous
+     operation.
+
+`prompt-for-continue'
+     When GDB is asking the user to press return to continue.  Note:
+     Don't expect this to work well; instead use `set height 0' to
+     disable prompting.  This is because the counting of lines is buggy
+     in the presence of annotations.
+
+
+File: annotate.info,  Node: Errors,  Next: Breakpoint Info,  Prev: Prompting,  Up: Top
+
+9 Errors
+********
+
+     ^Z^Zquit
+
+   This annotation occurs right before GDB responds to an interrupt.
+
+     ^Z^Zerror
+
+   This annotation occurs right before GDB responds to an error.
+
+   Quit and error annotations indicate that any annotations which GDB
+was in the middle of may end abruptly.  For example, if a
+`value-history-begin' annotation is followed by a `error', one cannot
+expect to receive the matching `value-history-end'.  One cannot expect
+not to receive it either, however; an error annotation does not
+necessarily mean that GDB is immediately returning all the way to the
+top level.
+
+   A quit or error annotation may be preceded by
+
+     ^Z^Zerror-begin
+
+   Any output between that and the quit or error annotation is the error
+message.
+
+   Warning messages are not yet annotated.
+
+
+File: annotate.info,  Node: Breakpoint Info,  Next: Invalidation,  Prev: Errors,  Up: Top
+
+10 Information on Breakpoints
+*****************************
+
+_Breakpoint Annotations have been removed.  GDB/MI instead provides
+breakpoint commands._
+
+   The output from the `info breakpoints' command is annotated as
+follows:
+
+     ^Z^Zbreakpoints-headers
+     HEADER-ENTRY
+     ^Z^Zbreakpoints-table
+
+where HEADER-ENTRY has the same syntax as an entry (see below) but
+instead of containing data, it contains strings which are intended to
+convey the meaning of each field to the user.  This is followed by any
+number of entries.  If a field does not apply for this entry, it is
+omitted.  Fields may contain trailing whitespace.  Each entry consists
+of:
+
+     ^Z^Zrecord
+     ^Z^Zfield 0
+     NUMBER
+     ^Z^Zfield 1
+     TYPE
+     ^Z^Zfield 2
+     DISPOSITION
+     ^Z^Zfield 3
+     ENABLE
+     ^Z^Zfield 4
+     ADDRESS
+     ^Z^Zfield 5
+     WHAT
+     ^Z^Zfield 6
+     FRAME
+     ^Z^Zfield 7
+     CONDITION
+     ^Z^Zfield 8
+     IGNORE-COUNT
+     ^Z^Zfield 9
+     COMMANDS
+
+   Note that ADDRESS is intended for user consumption--the syntax
+varies depending on the language.
+
+   The output ends with
+
+     ^Z^Zbreakpoints-table-end
+
+
+File: annotate.info,  Node: Invalidation,  Next: Annotations for Running,  Prev: Breakpoint Info,  Up: Top
+
+11 Invalidation Notices
+***********************
+
+The following annotations say that certain pieces of state may have
+changed.
+
+`^Z^Zframes-invalid'
+     The frames (for example, output from the `backtrace' command) may
+     have changed.
+
+`^Z^Zbreakpoints-invalid'
+     The breakpoints may have changed.  For example, the user just
+     added or deleted a breakpoint.
+
+
+File: annotate.info,  Node: Annotations for Running,  Next: Source Annotations,  Prev: Invalidation,  Up: Top
+
+12 Running the Program
+**********************
+
+When the program starts executing due to a GDB command such as `step'
+or `continue',
+
+     ^Z^Zstarting
+
+   is output.  When the program stops,
+
+     ^Z^Zstopped
+
+   is output.  Before the `stopped' annotation, a variety of
+annotations describe how the program stopped.
+
+`^Z^Zexited EXIT-STATUS'
+     The program exited, and EXIT-STATUS is the exit status (zero for
+     successful exit, otherwise nonzero).
+
+`^Z^Zsignalled'
+     The program exited with a signal.  After the `^Z^Zsignalled', the
+     annotation continues:
+
+          INTRO-TEXT
+          ^Z^Zsignal-name
+          NAME
+          ^Z^Zsignal-name-end
+          MIDDLE-TEXT
+          ^Z^Zsignal-string
+          STRING
+          ^Z^Zsignal-string-end
+          END-TEXT
+
+     where NAME is the name of the signal, such as `SIGILL' or
+     `SIGSEGV', and STRING is the explanation of the signal, such as
+     `Illegal Instruction' or `Segmentation fault'.  INTRO-TEXT,
+     MIDDLE-TEXT, and END-TEXT are for the user's benefit and have no
+     particular format.
+
+`^Z^Zsignal'
+     The syntax of this annotation is just like `signalled', but GDB is
+     just saying that the program received the signal, not that it was
+     terminated with it.
+
+`^Z^Zbreakpoint NUMBER'
+     The program hit breakpoint number NUMBER.
+
+`^Z^Zwatchpoint NUMBER'
+     The program hit watchpoint number NUMBER.
+
+
+File: annotate.info,  Node: Source Annotations,  Next: Multi-threaded Apps,  Prev: Annotations for Running,  Up: Top
+
+13 Displaying Source
+********************
+
+The following annotation is used instead of displaying source code:
+
+     ^Z^Zsource FILENAME:LINE:CHARACTER:MIDDLE:ADDR
+
+   where FILENAME is an absolute file name indicating which source
+file, LINE is the line number within that file (where 1 is the first
+line in the file), CHARACTER is the character position within the file
+(where 0 is the first character in the file) (for most debug formats
+this will necessarily point to the beginning of a line), MIDDLE is
+`middle' if ADDR is in the middle of the line, or `beg' if ADDR is at
+the beginning of the line, and ADDR is the address in the target
+program associated with the source which is being displayed.  ADDR is
+in the form `0x' followed by one or more lowercase hex digits (note
+that this does not depend on the language).
+
+
+File: annotate.info,  Node: Multi-threaded Apps,  Next: GNU Free Documentation License,  Prev: Source Annotations,  Up: Top
+
+14 Multi-threaded Applications
+******************************
+
+The following annotations report thread related changes of state.
+
+`^Z^Znew-thread'
+     This annotation is issued once for each thread that is created
+     apart from the main thread, which is not reported.
+
+`^Z^Zthread-changed'
+     The selected thread has changed.  This may occur at the request of
+     the user with the `thread' command, or as a result of execution,
+     e.g., another thread hits a breakpoint.
+
+
+
+File: annotate.info,  Node: GNU Free Documentation License,  Prev: Multi-threaded Apps,  Up: Top
+
+Appendix A GNU Free Documentation License
+*****************************************
+
+                     Version 1.3, 3 November 2008
+
+     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+     `http://fsf.org/'
+
+     Everyone is permitted to copy and distribute verbatim copies
+     of this license document, but changing it is not allowed.
+
+  0. PREAMBLE
+
+     The purpose of this License is to make a manual, textbook, or other
+     functional and useful document "free" in the sense of freedom: to
+     assure everyone the effective freedom to copy and redistribute it,
+     with or without modifying it, either commercially or
+     noncommercially.  Secondarily, this License preserves for the
+     author and publisher a way to get credit for their work, while not
+     being considered responsible for modifications made by others.
+
+     This License is a kind of "copyleft", which means that derivative
+     works of the document must themselves be free in the same sense.
+     It complements the GNU General Public License, which is a copyleft
+     license designed for free software.
+
+     We have designed this License in order to use it for manuals for
+     free software, because free software needs free documentation: a
+     free program should come with manuals providing the same freedoms
+     that the software does.  But this License is not limited to
+     software manuals; it can be used for any textual work, regardless
+     of subject matter or whether it is published as a printed book.
+     We recommend this License principally for works whose purpose is
+     instruction or reference.
+
+  1. APPLICABILITY AND DEFINITIONS
+
+     This License applies to any manual or other work, in any medium,
+     that contains a notice placed by the copyright holder saying it
+     can be distributed under the terms of this License.  Such a notice
+     grants a world-wide, royalty-free license, unlimited in duration,
+     to use that work under the conditions stated herein.  The
+     "Document", below, refers to any such manual or work.  Any member
+     of the public is a licensee, and is addressed as "you".  You
+     accept the license if you copy, modify or distribute the work in a
+     way requiring permission under copyright law.
+
+     A "Modified Version" of the Document means any work containing the
+     Document or a portion of it, either copied verbatim, or with
+     modifications and/or translated into another language.
+
+     A "Secondary Section" is a named appendix or a front-matter section
+     of the Document that deals exclusively with the relationship of the
+     publishers or authors of the Document to the Document's overall
+     subject (or to related matters) and contains nothing that could
+     fall directly within that overall subject.  (Thus, if the Document
+     is in part a textbook of mathematics, a Secondary Section may not
+     explain any mathematics.)  The relationship could be a matter of
+     historical connection with the subject or with related matters, or
+     of legal, commercial, philosophical, ethical or political position
+     regarding them.
+
+     The "Invariant Sections" are certain Secondary Sections whose
+     titles are designated, as being those of Invariant Sections, in
+     the notice that says that the Document is released under this
+     License.  If a section does not fit the above definition of
+     Secondary then it is not allowed to be designated as Invariant.
+     The Document may contain zero Invariant Sections.  If the Document
+     does not identify any Invariant Sections then there are none.
+
+     The "Cover Texts" are certain short passages of text that are
+     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+     that says that the Document is released under this License.  A
+     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+     be at most 25 words.
+
+     A "Transparent" copy of the Document means a machine-readable copy,
+     represented in a format whose specification is available to the
+     general public, that is suitable for revising the document
+     straightforwardly with generic text editors or (for images
+     composed of pixels) generic paint programs or (for drawings) some
+     widely available drawing editor, and that is suitable for input to
+     text formatters or for automatic translation to a variety of
+     formats suitable for input to text formatters.  A copy made in an
+     otherwise Transparent file format whose markup, or absence of
+     markup, has been arranged to thwart or discourage subsequent
+     modification by readers is not Transparent.  An image format is
+     not Transparent if used for any substantial amount of text.  A
+     copy that is not "Transparent" is called "Opaque".
+
+     Examples of suitable formats for Transparent copies include plain
+     ASCII without markup, Texinfo input format, LaTeX input format,
+     SGML or XML using a publicly available DTD, and
+     standard-conforming simple HTML, PostScript or PDF designed for
+     human modification.  Examples of transparent image formats include
+     PNG, XCF and JPG.  Opaque formats include proprietary formats that
+     can be read and edited only by proprietary word processors, SGML or
+     XML for which the DTD and/or processing tools are not generally
+     available, and the machine-generated HTML, PostScript or PDF
+     produced by some word processors for output purposes only.
+
+     The "Title Page" means, for a printed book, the title page itself,
+     plus such following pages as are needed to hold, legibly, the
+     material this License requires to appear in the title page.  For
+     works in formats which do not have any title page as such, "Title
+     Page" means the text near the most prominent appearance of the
+     work's title, preceding the beginning of the body of the text.
+
+     The "publisher" means any person or entity that distributes copies
+     of the Document to the public.
+
+     A section "Entitled XYZ" means a named subunit of the Document
+     whose title either is precisely XYZ or contains XYZ in parentheses
+     following text that translates XYZ in another language.  (Here XYZ
+     stands for a specific section name mentioned below, such as
+     "Acknowledgements", "Dedications", "Endorsements", or "History".)
+     To "Preserve the Title" of such a section when you modify the
+     Document means that it remains a section "Entitled XYZ" according
+     to this definition.
+
+     The Document may include Warranty Disclaimers next to the notice
+     which states that this License applies to the Document.  These
+     Warranty Disclaimers are considered to be included by reference in
+     this License, but only as regards disclaiming warranties: any other
+     implication that these Warranty Disclaimers may have is void and
+     has no effect on the meaning of this License.
+
+  2. VERBATIM COPYING
+
+     You may copy and distribute the Document in any medium, either
+     commercially or noncommercially, provided that this License, the
+     copyright notices, and the license notice saying this License
+     applies to the Document are reproduced in all copies, and that you
+     add no other conditions whatsoever to those of this License.  You
+     may not use technical measures to obstruct or control the reading
+     or further copying of the copies you make or distribute.  However,
+     you may accept compensation in exchange for copies.  If you
+     distribute a large enough number of copies you must also follow
+     the conditions in section 3.
+
+     You may also lend copies, under the same conditions stated above,
+     and you may publicly display copies.
+
+  3. COPYING IN QUANTITY
+
+     If you publish printed copies (or copies in media that commonly
+     have printed covers) of the Document, numbering more than 100, and
+     the Document's license notice requires Cover Texts, you must
+     enclose the copies in covers that carry, clearly and legibly, all
+     these Cover Texts: Front-Cover Texts on the front cover, and
+     Back-Cover Texts on the back cover.  Both covers must also clearly
+     and legibly identify you as the publisher of these copies.  The
+     front cover must present the full title with all words of the
+     title equally prominent and visible.  You may add other material
+     on the covers in addition.  Copying with changes limited to the
+     covers, as long as they preserve the title of the Document and
+     satisfy these conditions, can be treated as verbatim copying in
+     other respects.
+
+     If the required texts for either cover are too voluminous to fit
+     legibly, you should put the first ones listed (as many as fit
+     reasonably) on the actual cover, and continue the rest onto
+     adjacent pages.
+
+     If you publish or distribute Opaque copies of the Document
+     numbering more than 100, you must either include a
+     machine-readable Transparent copy along with each Opaque copy, or
+     state in or with each Opaque copy a computer-network location from
+     which the general network-using public has access to download
+     using public-standard network protocols a complete Transparent
+     copy of the Document, free of added material.  If you use the
+     latter option, you must take reasonably prudent steps, when you
+     begin distribution of Opaque copies in quantity, to ensure that
+     this Transparent copy will remain thus accessible at the stated
+     location until at least one year after the last time you
+     distribute an Opaque copy (directly or through your agents or
+     retailers) of that edition to the public.
+
+     It is requested, but not required, that you contact the authors of
+     the Document well before redistributing any large number of
+     copies, to give them a chance to provide you with an updated
+     version of the Document.
+
+  4. MODIFICATIONS
+
+     You may copy and distribute a Modified Version of the Document
+     under the conditions of sections 2 and 3 above, provided that you
+     release the Modified Version under precisely this License, with
+     the Modified Version filling the role of the Document, thus
+     licensing distribution and modification of the Modified Version to
+     whoever possesses a copy of it.  In addition, you must do these
+     things in the Modified Version:
+
+       A. Use in the Title Page (and on the covers, if any) a title
+          distinct from that of the Document, and from those of
+          previous versions (which should, if there were any, be listed
+          in the History section of the Document).  You may use the
+          same title as a previous version if the original publisher of
+          that version gives permission.
+
+       B. List on the Title Page, as authors, one or more persons or
+          entities responsible for authorship of the modifications in
+          the Modified Version, together with at least five of the
+          principal authors of the Document (all of its principal
+          authors, if it has fewer than five), unless they release you
+          from this requirement.
+
+       C. State on the Title page the name of the publisher of the
+          Modified Version, as the publisher.
+
+       D. Preserve all the copyright notices of the Document.
+
+       E. Add an appropriate copyright notice for your modifications
+          adjacent to the other copyright notices.
+
+       F. Include, immediately after the copyright notices, a license
+          notice giving the public permission to use the Modified
+          Version under the terms of this License, in the form shown in
+          the Addendum below.
+
+       G. Preserve in that license notice the full lists of Invariant
+          Sections and required Cover Texts given in the Document's
+          license notice.
+
+       H. Include an unaltered copy of this License.
+
+       I. Preserve the section Entitled "History", Preserve its Title,
+          and add to it an item stating at least the title, year, new
+          authors, and publisher of the Modified Version as given on
+          the Title Page.  If there is no section Entitled "History" in
+          the Document, create one stating the title, year, authors,
+          and publisher of the Document as given on its Title Page,
+          then add an item describing the Modified Version as stated in
+          the previous sentence.
+
+       J. Preserve the network location, if any, given in the Document
+          for public access to a Transparent copy of the Document, and
+          likewise the network locations given in the Document for
+          previous versions it was based on.  These may be placed in
+          the "History" section.  You may omit a network location for a
+          work that was published at least four years before the
+          Document itself, or if the original publisher of the version
+          it refers to gives permission.
+
+       K. For any section Entitled "Acknowledgements" or "Dedications",
+          Preserve the Title of the section, and preserve in the
+          section all the substance and tone of each of the contributor
+          acknowledgements and/or dedications given therein.
+
+       L. Preserve all the Invariant Sections of the Document,
+          unaltered in their text and in their titles.  Section numbers
+          or the equivalent are not considered part of the section
+          titles.
+
+       M. Delete any section Entitled "Endorsements".  Such a section
+          may not be included in the Modified Version.
+
+       N. Do not retitle any existing section to be Entitled
+          "Endorsements" or to conflict in title with any Invariant
+          Section.
+
+       O. Preserve any Warranty Disclaimers.
+
+     If the Modified Version includes new front-matter sections or
+     appendices that qualify as Secondary Sections and contain no
+     material copied from the Document, you may at your option
+     designate some or all of these sections as invariant.  To do this,
+     add their titles to the list of Invariant Sections in the Modified
+     Version's license notice.  These titles must be distinct from any
+     other section titles.
+
+     You may add a section Entitled "Endorsements", provided it contains
+     nothing but endorsements of your Modified Version by various
+     parties--for example, statements of peer review or that the text
+     has been approved by an organization as the authoritative
+     definition of a standard.
+
+     You may add a passage of up to five words as a Front-Cover Text,
+     and a passage of up to 25 words as a Back-Cover Text, to the end
+     of the list of Cover Texts in the Modified Version.  Only one
+     passage of Front-Cover Text and one of Back-Cover Text may be
+     added by (or through arrangements made by) any one entity.  If the
+     Document already includes a cover text for the same cover,
+     previously added by you or by arrangement made by the same entity
+     you are acting on behalf of, you may not add another; but you may
+     replace the old one, on explicit permission from the previous
+     publisher that added the old one.
+
+     The author(s) and publisher(s) of the Document do not by this
+     License give permission to use their names for publicity for or to
+     assert or imply endorsement of any Modified Version.
+
+  5. COMBINING DOCUMENTS
+
+     You may combine the Document with other documents released under
+     this License, under the terms defined in section 4 above for
+     modified versions, provided that you include in the combination
+     all of the Invariant Sections of all of the original documents,
+     unmodified, and list them all as Invariant Sections of your
+     combined work in its license notice, and that you preserve all
+     their Warranty Disclaimers.
+
+     The combined work need only contain one copy of this License, and
+     multiple identical Invariant Sections may be replaced with a single
+     copy.  If there are multiple Invariant Sections with the same name
+     but different contents, make the title of each such section unique
+     by adding at the end of it, in parentheses, the name of the
+     original author or publisher of that section if known, or else a
+     unique number.  Make the same adjustment to the section titles in
+     the list of Invariant Sections in the license notice of the
+     combined work.
+
+     In the combination, you must combine any sections Entitled
+     "History" in the various original documents, forming one section
+     Entitled "History"; likewise combine any sections Entitled
+     "Acknowledgements", and any sections Entitled "Dedications".  You
+     must delete all sections Entitled "Endorsements."
+
+  6. COLLECTIONS OF DOCUMENTS
+
+     You may make a collection consisting of the Document and other
+     documents released under this License, and replace the individual
+     copies of this License in the various documents with a single copy
+     that is included in the collection, provided that you follow the
+     rules of this License for verbatim copying of each of the
+     documents in all other respects.
+
+     You may extract a single document from such a collection, and
+     distribute it individually under this License, provided you insert
+     a copy of this License into the extracted document, and follow
+     this License in all other respects regarding verbatim copying of
+     that document.
+
+  7. AGGREGATION WITH INDEPENDENT WORKS
+
+     A compilation of the Document or its derivatives with other
+     separate and independent documents or works, in or on a volume of
+     a storage or distribution medium, is called an "aggregate" if the
+     copyright resulting from the compilation is not used to limit the
+     legal rights of the compilation's users beyond what the individual
+     works permit.  When the Document is included in an aggregate, this
+     License does not apply to the other works in the aggregate which
+     are not themselves derivative works of the Document.
+
+     If the Cover Text requirement of section 3 is applicable to these
+     copies of the Document, then if the Document is less than one half
+     of the entire aggregate, the Document's Cover Texts may be placed
+     on covers that bracket the Document within the aggregate, or the
+     electronic equivalent of covers if the Document is in electronic
+     form.  Otherwise they must appear on printed covers that bracket
+     the whole aggregate.
+
+  8. TRANSLATION
+
+     Translation is considered a kind of modification, so you may
+     distribute translations of the Document under the terms of section
+     4.  Replacing Invariant Sections with translations requires special
+     permission from their copyright holders, but you may include
+     translations of some or all Invariant Sections in addition to the
+     original versions of these Invariant Sections.  You may include a
+     translation of this License, and all the license notices in the
+     Document, and any Warranty Disclaimers, provided that you also
+     include the original English version of this License and the
+     original versions of those notices and disclaimers.  In case of a
+     disagreement between the translation and the original version of
+     this License or a notice or disclaimer, the original version will
+     prevail.
+
+     If a section in the Document is Entitled "Acknowledgements",
+     "Dedications", or "History", the requirement (section 4) to
+     Preserve its Title (section 1) will typically require changing the
+     actual title.
+
+  9. TERMINATION
+
+     You may not copy, modify, sublicense, or distribute the Document
+     except as expressly provided under this License.  Any attempt
+     otherwise to copy, modify, sublicense, or distribute it is void,
+     and will automatically terminate your rights under this License.
+
+     However, if you cease all violation of this License, then your
+     license from a particular copyright holder is reinstated (a)
+     provisionally, unless and until the copyright holder explicitly
+     and finally terminates your license, and (b) permanently, if the
+     copyright holder fails to notify you of the violation by some
+     reasonable means prior to 60 days after the cessation.
+
+     Moreover, your license from a particular copyright holder is
+     reinstated permanently if the copyright holder notifies you of the
+     violation by some reasonable means, this is the first time you have
+     received notice of violation of this License (for any work) from
+     that copyright holder, and you cure the violation prior to 30 days
+     after your receipt of the notice.
+
+     Termination of your rights under this section does not terminate
+     the licenses of parties who have received copies or rights from
+     you under this License.  If your rights have been terminated and
+     not permanently reinstated, receipt of a copy of some or all of
+     the same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+     The Free Software Foundation may publish new, revised versions of
+     the GNU Free Documentation 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.  See
+     `http://www.gnu.org/copyleft/'.
+
+     Each version of the License is given a distinguishing version
+     number.  If the Document specifies that a particular numbered
+     version of this License "or any later version" applies to it, you
+     have the option of following the terms and conditions either of
+     that specified version or of any later version that has been
+     published (not as a draft) by the Free Software Foundation.  If
+     the Document does not specify a version number of this License,
+     you may choose any version ever published (not as a draft) by the
+     Free Software Foundation.  If the Document specifies that a proxy
+     can decide which future versions of this License can be used, that
+     proxy's public statement of acceptance of a version permanently
+     authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+     World Wide Web server that publishes copyrightable works and also
+     provides prominent facilities for anybody to edit those works.  A
+     public wiki that anybody can edit is an example of such a server.
+     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+     site means any set of copyrightable works thus published on the MMC
+     site.
+
+     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+     license published by Creative Commons Corporation, a not-for-profit
+     corporation with a principal place of business in San Francisco,
+     California, as well as future copyleft versions of that license
+     published by that same organization.
+
+     "Incorporate" means to publish or republish a Document, in whole or
+     in part, as part of another Document.
+
+     An MMC is "eligible for relicensing" if it is licensed under this
+     License, and if all works that were first published under this
+     License somewhere other than this MMC, and subsequently
+     incorporated in whole or in part into the MMC, (1) had no cover
+     texts or invariant sections, and (2) were thus incorporated prior
+     to November 1, 2008.
+
+     The operator of an MMC Site may republish an MMC contained in the
+     site under CC-BY-SA on the same site at any time before August 1,
+     2009, provided the MMC is eligible for relicensing.
+
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+       Copyright (C)  YEAR  YOUR NAME.
+       Permission is granted to copy, distribute and/or modify this document
+       under the terms of the GNU Free Documentation License, Version 1.3
+       or any later version published by the Free Software Foundation;
+       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+       Texts.  A copy of the license is included in the section entitled ``GNU
+       Free Documentation License''.
+
+   If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+         with the Invariant Sections being LIST THEIR TITLES, with
+         the Front-Cover Texts being LIST, and with the Back-Cover Texts
+         being LIST.
+
+   If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+   If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License, to
+permit their use in free software.
+
+
+
+Tag Table:
+Node: Top1238
+Node: Annotations Overview2408
+Node: Limitations4207
+Node: Migrating to GDB/MI6792
+Node: Server Prefix7175
+Node: Value Annotations7821
+Node: Frame Annotations10991
+Node: Displays14890
+Node: Prompting15921
+Node: Errors17424
+Node: Breakpoint Info18314
+Node: Invalidation19539
+Node: Annotations for Running20018
+Node: Source Annotations21531
+Node: Multi-threaded Apps22477
+Node: GNU Free Documentation License23086
+
+End Tag Table
diff --git a/gdb/doc/annotate.texinfo b/gdb/doc/annotate.texinfo
index 8b13789..20f6eb6 100644
--- a/gdb/doc/annotate.texinfo
+++ b/gdb/doc/annotate.texinfo
@@ -1 +1,853 @@
+\input texinfo   @c -*-texinfo-*-
+ at c %**start of header
+ at setfilename annotate.info
 
+ at c This is a dir.info fragment to support semi-automated addition of
+ at c manuals to an info tree.
+ at dircategory Software development
+ at direntry
+* Annotate: (annotate).                 The obsolete annotation interface.
+ at end direntry
+
+ at c
+ at include gdb-cfg.texi
+ at c
+ at settitle @value{GDBN}'s Obsolete Annotations
+ at setchapternewpage off
+ at c %**end of header
+
+ at set EDITION 1.0
+ at set DATE July 2003
+
+ at c NOTE: cagney/2003-07-28:
+ at c Don't make this migration document an appendix of GDB's user guide.
+ at c By keeping this separate, the size of the user guide is contained. If
+ at c the user guide to get much bigger it would need to switch to a larger,
+ at c more expensive, form factor and would drive up the manuals publication
+ at c cost.  Having a smaller cheaper manual helps the GNU Press with its sales.
+
+ at copying
+Copyright @copyright{} 1994-1995, 2000-2001, 2003-2005, 2007-2012 Free
+Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the section entitled ``GNU
+Free Documentation License''.
+ at end copying
+
+ at ifnottex
+This file documents @value{GDBN}'s obsolete annotations.
+
+ at insertcopying
+ at end ifnottex
+
+ at titlepage
+ at title @value{GDBN}'s Obsolete Annotations
+ at subtitle Edition @value{EDITION}
+ at subtitle @value{DATE}
+ at author Free Software Foundation
+ at page
+ at vskip 0pt plus 1filll
+ at insertcopying
+ at end titlepage
+
+ at ifnottex
+ at node Top
+ at top GDB Annotations
+
+This document describes the obsolete level two annotation interface
+implemented in older @value{GDBN} versions.
+
+ at ignore
+This is Edition @value{EDITION}, @value{DATE}.
+ at end ignore
+ at end ifnottex
+
+ at menu
+* Annotations Overview::  What annotations are; the general syntax.
+* Limitations::           Limitations of the annotation interface.
+* Migrating to GDB/MI::   Migrating to GDB/MI
+* Server Prefix::       Issuing a command without affecting user state.
+* Value Annotations::   Values are marked as such.
+* Frame Annotations::   Stack frames are annotated.
+* Displays::            @value{GDBN} can be told to display something periodically.
+* Prompting::           Annotations marking @value{GDBN}'s need for input.
+* Errors::              Annotations for error messages.
+* Breakpoint Info::     Information on breakpoints.
+* Invalidation::        Some annotations describe things now invalid.
+* Annotations for Running::
+                        Whether the program is running, how it stopped, etc.
+* Source Annotations::  Annotations describing source code.
+* Multi-threaded Apps:: An annotation that reports multi-threadedness.
+
+* GNU Free Documentation License::
+ at end menu
+
+ at contents
+
+ at node Annotations Overview
+ at chapter What is an Annotation?
+ at cindex annotations
+
+To produce obsolete level two annotations, start @value{GDBN} with the
+ at code{--annotate=2} option.
+
+Annotations start with a newline character, two @samp{control-z}
+characters, and the name of the annotation.  If there is no additional
+information associated with this annotation, the name of the annotation
+is followed immediately by a newline.  If there is additional
+information, the name of the annotation is followed by a space, the
+additional information, and a newline.  The additional information
+cannot contain newline characters.
+
+Any output not beginning with a newline and two @samp{control-z}
+characters denotes literal output from @value{GDBN}.  Currently there is
+no need for @value{GDBN} to output a newline followed by two
+ at samp{control-z} characters, but if there was such a need, the
+annotations could be extended with an @samp{escape} annotation which
+means those three characters as output.
+
+A simple example of starting up @value{GDBN} with annotations is:
+
+ at smallexample
+$ gdb --annotate=2
+GNU GDB 5.0
+Copyright 2000 Free Software Foundation, Inc.
+GDB is free software, covered by the GNU General Public License,
+and you are welcome to change it and/or distribute copies of it
+under certain conditions.
+Type "show copying" to see the conditions.
+There is absolutely no warranty for GDB.  Type "show warranty"
+for details.
+This GDB was configured as "sparc-sun-sunos4.1.3"
+
+^Z^Zpre-prompt
+(gdb) 
+^Z^Zprompt
+quit
+
+^Z^Zpost-prompt
+$ 
+ at end smallexample
+
+Here @samp{quit} is input to @value{GDBN}; the rest is output from
+ at value{GDBN}.  The three lines beginning @samp{^Z^Z} (where @samp{^Z}
+denotes a @samp{control-z} character) are annotations; the rest is
+output from @value{GDBN}.
+
+ at node Limitations
+ at chapter Limitations of the Annotation Interface
+
+The level two annotations mechanism is known to have a number of
+technical and architectural limitations.  As a consequence, in 2001,
+with the release of @value{GDBN} 5.1 and the addition of @sc{gdb/mi},
+the annotation interface was marked as deprecated.
+
+This chapter discusses the known problems.
+
+ at section Dependant on @sc{cli} output
+
+The annotation interface works by interspersing markups with
+ at value{GDBN} normal command-line interpreter output.  Unfortunately, this
+makes the annotation client dependant on not just the annotations, but
+also the @sc{cli} output.  This is because the client is forced to
+assume that specific @value{GDBN} commands provide specific information.
+Any change to @value{GDBN}'s @sc{cli} output modifies or removes that
+information and, consequently, likely breaks the client.
+
+Since the @sc{gdb/mi} output is independent of the @sc{cli}, it does not
+have this problem.
+
+ at section Scalability
+
+The annotation interface relies on value annotations (@pxref{Value
+Annotations}) and the display mechanism as a way of obtaining up-to-date
+value information.  These mechanisms are not scalable.
+
+In a graphical environment, where many values can be displayed
+simultaneously, a serious performance problem occurs when the client
+tries to first extract from @value{GDBN}, and then re-display, all those
+values.  The client should instead only request and update the values
+that changed.
+
+The @sc{gdb/mi} Variable Objects provide just that mechanism.
+
+ at section Correctness
+
+The annotation interface assumes that a variable's value can only be
+changed when the target is running.  This assumption is not correct.  A
+single assignment to a single variable can result in the entire target,
+and all displayed values, needing an update.
+
+The @sc{gdb/mi} Variable Objects include a mechanism for efficiently
+reporting such changes.
+
+ at section Reliability
+
+The @sc{gdb/mi} interface includes a dedicated test directory
+(@file{gdb/gdb.mi}), and any addition or fix to @sc{gdb/mi} must include
+testsuite changes.
+
+ at section Maintainability
+
+The annotation mechanism was implemented by interspersing @sc{cli} print
+statements with various annotations.  As a consequence, any @sc{cli}
+output change can alter the annotation output.
+
+Since the @sc{gdb/mi} output is independent of the @sc{cli}, and the
+ at sc{gdb/mi} is increasingly implemented independent of the @sc{cli}
+code, its long term maintenance is much easier.
+
+ at node Migrating to GDB/MI
+ at chapter Migrating to @sc{gdb/mi}
+
+By using the @samp{interp mi} command, it is possible for annotation
+clients to invoke @sc{gdb/mi} commands, and hence access the
+ at sc{gdb/mi}.  By doing this, existing annotation clients have a
+migration path from this obsolete interface to @sc{gdb/mi}.
+
+ at node Server Prefix
+ at chapter The Server Prefix
+ at cindex server prefix for annotations
+
+To issue a command to @value{GDBN} without affecting certain aspects of
+the state which is seen by users, prefix it with @samp{server }.  This
+means that this command will not affect the command history, nor will it
+affect @value{GDBN}'s notion of which command to repeat if @key{RET} is
+pressed on a line by itself.
+
+The server prefix does not affect the recording of values into the value
+history; to print a value without recording it into the value history,
+use the @code{output} command instead of the @code{print} command.
+
+ at node Value Annotations
+ at chapter Values
+
+ at emph{Value Annotations have been removed.  @sc{gdb/mi} instead provides
+Variable Objects.}
+
+ at cindex annotations for values
+When a value is printed in various contexts, @value{GDBN} uses
+annotations to delimit the value from the surrounding text.
+
+ at findex value-history-begin
+ at findex value-history-value
+ at findex value-history-end
+If a value is printed using @code{print} and added to the value history,
+the annotation looks like
+
+ at smallexample
+^Z^Zvalue-history-begin @var{history-number} @var{value-flags}
+ at var{history-string}
+^Z^Zvalue-history-value
+ at var{the-value}
+^Z^Zvalue-history-end
+ at end smallexample
+
+ at noindent
+where @var{history-number} is the number it is getting in the value
+history, @var{history-string} is a string, such as @samp{$5 = }, which
+introduces the value to the user, @var{the-value} is the output
+corresponding to the value itself, and @var{value-flags} is @samp{*} for
+a value which can be dereferenced and @samp{-} for a value which cannot.
+
+ at findex value-begin
+ at findex value-end
+If the value is not added to the value history (it is an invalid float
+or it is printed with the @code{output} command), the annotation is similar:
+
+ at smallexample
+^Z^Zvalue-begin @var{value-flags}
+ at var{the-value}
+^Z^Zvalue-end
+ at end smallexample
+
+ at findex arg-begin
+ at findex arg-name-end
+ at findex arg-value
+ at findex arg-end
+When @value{GDBN} prints an argument to a function (for example, in the output
+from the @code{backtrace} command), it annotates it as follows:
+
+ at smallexample
+^Z^Zarg-begin
+ at var{argument-name}
+^Z^Zarg-name-end
+ at var{separator-string}
+^Z^Zarg-value @var{value-flags}
+ at var{the-value}
+^Z^Zarg-end
+ at end smallexample
+
+ at noindent
+where @var{argument-name} is the name of the argument,
+ at var{separator-string} is text which separates the name from the value
+for the user's benefit (such as @samp{=}), and @var{value-flags} and
+ at var{the-value} have the same meanings as in a
+ at code{value-history-begin} annotation.
+
+ at findex field-begin
+ at findex field-name-end
+ at findex field-value
+ at findex field-end
+When printing a structure, @value{GDBN} annotates it as follows:
+
+ at smallexample
+^Z^Zfield-begin @var{value-flags}
+ at var{field-name}
+^Z^Zfield-name-end
+ at var{separator-string}
+^Z^Zfield-value
+ at var{the-value}
+^Z^Zfield-end
+ at end smallexample
+
+ at noindent
+where @var{field-name} is the name of the field, @var{separator-string}
+is text which separates the name from the value for the user's benefit
+(such as @samp{=}), and @var{value-flags} and @var{the-value} have the
+same meanings as in a @code{value-history-begin} annotation.
+
+When printing an array, @value{GDBN} annotates it as follows:
+
+ at smallexample
+^Z^Zarray-section-begin @var{array-index} @var{value-flags}
+ at end smallexample
+
+ at noindent
+where @var{array-index} is the index of the first element being
+annotated and @var{value-flags} has the same meaning as in a
+ at code{value-history-begin} annotation.  This is followed by any number
+of elements, where is element can be either a single element:
+
+ at findex elt
+ at smallexample
+ at samp{,} @var{whitespace}         ; @r{omitted for the first element}
+ at var{the-value}
+^Z^Zelt
+ at end smallexample
+
+or a repeated element
+
+ at findex elt-rep
+ at findex elt-rep-end
+ at smallexample
+ at samp{,} @var{whitespace}         ; @r{omitted for the first element}
+ at var{the-value}
+^Z^Zelt-rep @var{number-of-repetitions}
+ at var{repetition-string}
+^Z^Zelt-rep-end
+ at end smallexample
+
+In both cases, @var{the-value} is the output for the value of the
+element and @var{whitespace} can contain spaces, tabs, and newlines.  In
+the repeated case, @var{number-of-repetitions} is the number of
+consecutive array elements which contain that value, and
+ at var{repetition-string} is a string which is designed to convey to the
+user that repetition is being depicted.
+
+ at findex array-section-end
+Once all the array elements have been output, the array annotation is
+ended with
+
+ at smallexample
+^Z^Zarray-section-end
+ at end smallexample
+
+ at node Frame Annotations
+ at chapter Frames
+
+ at emph{Value Annotations have been removed.  @sc{gdb/mi} instead provides
+a number of frame commands.}
+
+ at emph{Frame annotations are no longer available.  The @sc{gdb/mi}
+provides @samp{-stack-list-arguments}, @samp{-stack-list-locals}, and
+ at samp{-stack-list-frames} commands.}
+
+ at cindex annotations for frames
+Whenever @value{GDBN} prints a frame, it annotates it.  For example, this applies
+to frames printed when @value{GDBN} stops, output from commands such as
+ at code{backtrace} or @code{up}, etc.
+
+ at findex frame-begin
+The frame annotation begins with
+
+ at smallexample
+^Z^Zframe-begin @var{level} @var{address}
+ at var{level-string}
+ at end smallexample
+
+ at noindent
+where @var{level} is the number of the frame (0 is the innermost frame,
+and other frames have positive numbers), @var{address} is the address of
+the code executing in that frame, and @var{level-string} is a string
+designed to convey the level to the user.  @var{address} is in the form
+ at samp{0x} followed by one or more lowercase hex digits (note that this
+does not depend on the language).  The frame ends with
+
+ at findex frame-end
+ at smallexample
+^Z^Zframe-end
+ at end smallexample
+
+Between these annotations is the main body of the frame, which can
+consist of
+
+ at itemize @bullet
+ at item
+ at findex function-call
+ at smallexample
+^Z^Zfunction-call
+ at var{function-call-string}
+ at end smallexample
+
+where @var{function-call-string} is text designed to convey to the user
+that this frame is associated with a function call made by @value{GDBN} to a
+function in the program being debugged.
+
+ at item
+ at findex signal-handler-caller
+ at smallexample
+^Z^Zsignal-handler-caller
+ at var{signal-handler-caller-string}
+ at end smallexample
+
+where @var{signal-handler-caller-string} is text designed to convey to
+the user that this frame is associated with whatever mechanism is used
+by this operating system to call a signal handler (it is the frame which
+calls the signal handler, not the frame for the signal handler itself).
+
+ at item
+A normal frame.
+
+ at findex frame-address
+ at findex frame-address-end
+This can optionally (depending on whether this is thought of as
+interesting information for the user to see) begin with
+
+ at smallexample
+^Z^Zframe-address
+ at var{address}
+^Z^Zframe-address-end
+ at var{separator-string}
+ at end smallexample
+
+where @var{address} is the address executing in the frame (the same
+address as in the @code{frame-begin} annotation, but printed in a form
+which is intended for user consumption---in particular, the syntax varies
+depending on the language), and @var{separator-string} is a string
+intended to separate this address from what follows for the user's
+benefit.
+
+ at findex frame-function-name
+ at findex frame-args
+Then comes
+
+ at smallexample
+^Z^Zframe-function-name
+ at var{function-name}
+^Z^Zframe-args
+ at var{arguments}
+ at end smallexample
+
+where @var{function-name} is the name of the function executing in the
+frame, or @samp{??} if not known, and @var{arguments} are the arguments
+to the frame, with parentheses around them (each argument is annotated
+individually as well, @pxref{Value Annotations}).
+
+ at findex frame-source-begin
+ at findex frame-source-file
+ at findex frame-source-file-end
+ at findex frame-source-line
+ at findex frame-source-end
+If source information is available, a reference to it is then printed:
+
+ at smallexample
+^Z^Zframe-source-begin
+ at var{source-intro-string}
+^Z^Zframe-source-file
+ at var{filename}
+^Z^Zframe-source-file-end
+:
+^Z^Zframe-source-line
+ at var{line-number}
+^Z^Zframe-source-end
+ at end smallexample
+
+where @var{source-intro-string} separates for the user's benefit the
+reference from the text which precedes it, @var{filename} is the name of
+the source file, and @var{line-number} is the line number within that
+file (the first line is line 1).
+
+ at findex frame-where
+If @value{GDBN} prints some information about where the frame is from (which
+library, which load segment, etc.; currently only done on the RS/6000),
+it is annotated with
+
+ at smallexample
+^Z^Zframe-where
+ at var{information}
+ at end smallexample
+
+Then, if source is to actually be displayed for this frame (for example,
+this is not true for output from the @code{backtrace} command), then a
+ at code{source} annotation (@pxref{Source Annotations}) is displayed.  Unlike
+most annotations, this is output instead of the normal text which would be
+output, not in addition.
+ at end itemize
+
+ at node Displays
+ at chapter Displays
+
+ at emph{Display Annotations have been removed.  @sc{gdb/mi} instead
+provides Variable Objects.}
+
+ at findex display-begin
+ at findex display-number-end
+ at findex display-format
+ at findex display-expression
+ at findex display-expression-end
+ at findex display-value
+ at findex display-end
+ at cindex annotations for display
+When @value{GDBN} is told to display something using the @code{display} command,
+the results of the display are annotated:
+
+ at smallexample
+^Z^Zdisplay-begin
+ at var{number}
+^Z^Zdisplay-number-end
+ at var{number-separator}
+^Z^Zdisplay-format
+ at var{format}
+^Z^Zdisplay-expression
+ at var{expression}
+^Z^Zdisplay-expression-end
+ at var{expression-separator}
+^Z^Zdisplay-value
+ at var{value}
+^Z^Zdisplay-end
+ at end smallexample
+
+ at noindent
+where @var{number} is the number of the display, @var{number-separator}
+is intended to separate the number from what follows for the user,
+ at var{format} includes information such as the size, format, or other
+information about how the value is being displayed, @var{expression} is
+the expression being displayed, @var{expression-separator} is intended
+to separate the expression from the text that follows for the user,
+and @var{value} is the actual value being displayed.
+
+ at node Prompting
+ at chapter Annotation for @value{GDBN} Input
+
+ at cindex annotations for prompts
+When @value{GDBN} prompts for input, it annotates this fact so it is possible
+to know when to send output, when the output from a given command is
+over, etc.
+
+Different kinds of input each have a different @dfn{input type}.  Each
+input type has three annotations: a @code{pre-} annotation, which
+denotes the beginning of any prompt which is being output, a plain
+annotation, which denotes the end of the prompt, and then a @code{post-}
+annotation which denotes the end of any echo which may (or may not) be
+associated with the input.  For example, the @code{prompt} input type
+features the following annotations:
+
+ at smallexample
+^Z^Zpre-prompt
+^Z^Zprompt
+^Z^Zpost-prompt
+ at end smallexample
+
+The input types are
+
+ at table @code
+ at findex pre-prompt
+ at findex prompt
+ at findex post-prompt
+ at item prompt
+When @value{GDBN} is prompting for a command (the main @value{GDBN} prompt).
+
+ at findex pre-commands
+ at findex commands
+ at findex post-commands
+ at item commands
+When @value{GDBN} prompts for a set of commands, like in the @code{commands}
+command.  The annotations are repeated for each command which is input.
+
+ at findex pre-overload-choice
+ at findex overload-choice
+ at findex post-overload-choice
+ at item overload-choice
+When @value{GDBN} wants the user to select between various overloaded functions.
+
+ at findex pre-query
+ at findex query
+ at findex post-query
+ at item query
+When @value{GDBN} wants the user to confirm a potentially dangerous operation.
+
+ at findex pre-prompt-for-continue
+ at findex prompt-for-continue
+ at findex post-prompt-for-continue
+ at item prompt-for-continue
+When @value{GDBN} is asking the user to press return to continue.  Note: Don't
+expect this to work well; instead use @code{set height 0} to disable
+prompting.  This is because the counting of lines is buggy in the
+presence of annotations.
+ at end table
+
+ at node Errors
+ at chapter Errors
+ at cindex annotations for errors, warnings and interrupts
+
+ at findex quit
+ at smallexample
+^Z^Zquit
+ at end smallexample
+
+This annotation occurs right before @value{GDBN} responds to an interrupt.
+
+ at findex error
+ at smallexample
+^Z^Zerror
+ at end smallexample
+
+This annotation occurs right before @value{GDBN} responds to an error.
+
+Quit and error annotations indicate that any annotations which @value{GDBN} was
+in the middle of may end abruptly.  For example, if a
+ at code{value-history-begin} annotation is followed by a @code{error}, one
+cannot expect to receive the matching @code{value-history-end}.  One
+cannot expect not to receive it either, however; an error annotation
+does not necessarily mean that @value{GDBN} is immediately returning all the way
+to the top level.
+
+ at findex error-begin
+A quit or error annotation may be preceded by
+
+ at smallexample
+^Z^Zerror-begin
+ at end smallexample
+
+Any output between that and the quit or error annotation is the error
+message.
+
+Warning messages are not yet annotated.
+ at c If we want to change that, need to fix warning(), type_error(),
+ at c range_error(), and possibly other places.
+
+ at node Breakpoint Info
+ at chapter Information on Breakpoints
+
+ at emph{Breakpoint Annotations have been removed.  @sc{gdb/mi} instead
+provides breakpoint commands.}
+
+ at cindex annotations for breakpoints
+The output from the @code{info breakpoints} command is annotated as follows:
+
+ at findex breakpoints-headers
+ at findex breakpoints-table
+ at smallexample
+^Z^Zbreakpoints-headers
+ at var{header-entry}
+^Z^Zbreakpoints-table
+ at end smallexample
+
+ at noindent
+where @var{header-entry} has the same syntax as an entry (see below) but
+instead of containing data, it contains strings which are intended to
+convey the meaning of each field to the user.  This is followed by any
+number of entries.  If a field does not apply for this entry, it is
+omitted.  Fields may contain trailing whitespace.  Each entry consists
+of:
+
+ at findex record
+ at findex field
+ at smallexample
+^Z^Zrecord
+^Z^Zfield 0
+ at var{number}
+^Z^Zfield 1
+ at var{type}
+^Z^Zfield 2
+ at var{disposition}
+^Z^Zfield 3
+ at var{enable}
+^Z^Zfield 4
+ at var{address}
+^Z^Zfield 5
+ at var{what}
+^Z^Zfield 6
+ at var{frame}
+^Z^Zfield 7
+ at var{condition}
+^Z^Zfield 8
+ at var{ignore-count}
+^Z^Zfield 9
+ at var{commands}
+ at end smallexample
+
+Note that @var{address} is intended for user consumption---the syntax
+varies depending on the language.
+
+The output ends with
+
+ at findex breakpoints-table-end
+ at smallexample
+^Z^Zbreakpoints-table-end
+ at end smallexample
+
+ at node Invalidation
+ at chapter Invalidation Notices
+
+ at cindex annotations for invalidation messages
+The following annotations say that certain pieces of state may have
+changed.
+
+ at table @code
+ at findex frames-invalid
+ at item ^Z^Zframes-invalid
+
+The frames (for example, output from the @code{backtrace} command) may
+have changed.
+
+ at findex breakpoints-invalid
+ at item ^Z^Zbreakpoints-invalid
+
+The breakpoints may have changed.  For example, the user just added or
+deleted a breakpoint.
+ at end table
+
+ at node Annotations for Running
+ at chapter Running the Program
+ at cindex annotations for running programs
+
+ at findex starting
+ at findex stopping
+When the program starts executing due to a @value{GDBN} command such as
+ at code{step} or @code{continue}, 
+
+ at smallexample
+^Z^Zstarting
+ at end smallexample
+
+is output.  When the program stops, 
+
+ at smallexample
+^Z^Zstopped
+ at end smallexample
+
+is output.  Before the @code{stopped} annotation, a variety of
+annotations describe how the program stopped.
+
+ at table @code
+ at findex exited
+ at item ^Z^Zexited @var{exit-status}
+The program exited, and @var{exit-status} is the exit status (zero for
+successful exit, otherwise nonzero).
+
+ at findex signalled
+ at findex signal-name
+ at findex signal-name-end
+ at findex signal-string
+ at findex signal-string-end
+ at item ^Z^Zsignalled
+The program exited with a signal.  After the @code{^Z^Zsignalled}, the
+annotation continues:
+
+ at smallexample
+ at var{intro-text}
+^Z^Zsignal-name
+ at var{name}
+^Z^Zsignal-name-end
+ at var{middle-text}
+^Z^Zsignal-string
+ at var{string}
+^Z^Zsignal-string-end
+ at var{end-text}
+ at end smallexample
+
+ at noindent
+where @var{name} is the name of the signal, such as @code{SIGILL} or
+ at code{SIGSEGV}, and @var{string} is the explanation of the signal, such
+as @code{Illegal Instruction} or @code{Segmentation fault}.
+ at var{intro-text}, @var{middle-text}, and @var{end-text} are for the
+user's benefit and have no particular format.
+
+ at findex signal
+ at item ^Z^Zsignal
+The syntax of this annotation is just like @code{signalled}, but @value{GDBN} is
+just saying that the program received the signal, not that it was
+terminated with it.
+
+ at findex breakpoint
+ at item ^Z^Zbreakpoint @var{number}
+The program hit breakpoint number @var{number}.
+
+ at findex watchpoint
+ at item ^Z^Zwatchpoint @var{number}
+The program hit watchpoint number @var{number}.
+ at end table
+
+ at node Source Annotations
+ at chapter Displaying Source
+ at cindex annotations for source display
+
+ at findex source
+The following annotation is used instead of displaying source code:
+
+ at smallexample
+^Z^Zsource @var{filename}:@var{line}:@var{character}:@var{middle}:@var{addr}
+ at end smallexample
+
+where @var{filename} is an absolute file name indicating which source
+file, @var{line} is the line number within that file (where 1 is the
+first line in the file), @var{character} is the character position
+within the file (where 0 is the first character in the file) (for most
+debug formats this will necessarily point to the beginning of a line),
+ at var{middle} is @samp{middle} if @var{addr} is in the middle of the
+line, or @samp{beg} if @var{addr} is at the beginning of the line, and
+ at var{addr} is the address in the target program associated with the
+source which is being displayed.  @var{addr} is in the form @samp{0x}
+followed by one or more lowercase hex digits (note that this does not
+depend on the language).
+
+ at node Multi-threaded Apps
+ at chapter Multi-threaded Applications
+ at cindex annotations for multi-threaded apps
+
+The following annotations report thread related changes of state.
+
+ at table @code
+ at findex new-thread at r{, annotation}
+ at item ^Z^Znew-thread
+
+This annotation is issued once for each thread that is created apart from
+the main thread, which is not reported.
+
+ at findex thread-changed at r{, annotation}
+ at item ^Z^Zthread-changed
+
+The selected thread has changed.  This may occur at the request of the
+user with the @code{thread} command, or as a result of execution,
+e.g., another thread hits a breakpoint.
+
+ at end table
+
+ at node GNU Free Documentation License
+ at appendix GNU Free Documentation License
+ at include fdl.texi
+
+ at ignore
+ at node Index
+ at unnumbered Index
+
+ at printindex fn
+ at end ignore
+
+ at bye
diff --git a/gdb/doc/fdl.texi b/gdb/doc/fdl.texi
index 8b13789..7c26c34 100644
--- a/gdb/doc/fdl.texi
+++ b/gdb/doc/fdl.texi
@@ -1 +1,505 @@
+ at c The GNU Free Documentation License.
+ at center Version 1.3, 3 November 2008
 
+ at c This file is intended to be included within another document,
+ at c hence no sectioning command or @node.
+
+ at display
+Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ at uref{http://fsf.org/}
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+ at end display
+
+ at enumerate 0
+ at item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{free} in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense.  It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does.  But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book.  We recommend this License
+principally for works whose purpose is instruction or reference.
+
+ at item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License.  Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein.  The ``Document'', below,
+refers to any such manual or work.  Any member of the public is a
+licensee, and is addressed as ``you''.  You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject.  (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.)  The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.  If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant.  The Document may contain zero
+Invariant Sections.  If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.  A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters.  A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text.  A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+ at sc{ascii} without markup, Texinfo input format, La at TeX{} input
+format, @acronym{SGML} or @acronym{XML} using a publicly available
+ at acronym{DTD}, and standard-conforming simple @acronym{HTML},
+PostScript or @acronym{PDF} designed for human modification.  Examples
+of transparent image formats include @acronym{PNG}, @acronym{XCF} and
+ at acronym{JPG}.  Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, @acronym{SGML} or
+ at acronym{XML} for which the @acronym{DTD} and/or processing tools are
+not generally available, and the machine-generated @acronym{HTML},
+PostScript or @acronym{PDF} produced by some word processors for
+output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page.  For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+The ``publisher'' means any person or entity that distributes copies
+of the Document to the public.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language.  (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.)  To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document.  These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+ at item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License.  You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute.  However, you may accept
+compensation in exchange for copies.  If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+ at item
+COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover.  Both covers must also clearly and legibly identify
+you as the publisher of these copies.  The front cover must present
+the full title with all words of the title equally prominent and
+visible.  You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+ at item
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it.  In addition, you must do these things in the Modified Version:
+
+ at enumerate A
+ at item
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document).  You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
+ at item
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
+ at item
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+ at item
+Preserve all the copyright notices of the Document.
+
+ at item
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+ at item
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
+ at item
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+ at item
+Include an unaltered copy of this License.
+
+ at item
+Preserve the section Entitled ``History'', Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page.  If
+there is no section Entitled ``History'' in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
+ at item
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on.  These may be placed in the ``History'' section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
+ at item
+For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
+ at item
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles.  Section numbers
+or the equivalent are not considered part of the section titles.
+
+ at item
+Delete any section Entitled ``Endorsements''.  Such a section
+may not be included in the Modified Version.
+
+ at item
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
+ at item
+Preserve any Warranty Disclaimers.
+ at end enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant.  To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version.  Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity.  If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+ at item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy.  If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''.  You must delete all
+sections Entitled ``Endorsements.''
+
+ at item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+ at item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+ at item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections.  You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers.  In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+ at item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
+ at item
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation 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.  See
+ at uref{http://www.gnu.org/copyleft/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation.  If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.  If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+ at item
+RELICENSING
+
+``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works.  A
+public wiki that anybody can edit is an example of such a server.  A
+``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
+site means any set of copyrightable works thus published on the MMC
+site.
+
+``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+
+``Incorporate'' means to publish or republish a Document, in whole or
+in part, as part of another Document.
+
+An MMC is ``eligible for relicensing'' if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole
+or in part into the MMC, (1) had no cover texts or invariant sections,
+and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
+ at end enumerate
+
+ at page
+ at heading ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+ at smallexample
+ at group
+  Copyright (C)  @var{year}  @var{your name}.
+  Permission is granted to copy, distribute and/or modify this document
+  under the terms of the GNU Free Documentation License, Version 1.3
+  or any later version published by the Free Software Foundation;
+  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+  Texts.  A copy of the license is included in the section entitled ``GNU
+  Free Documentation License''.
+ at end group
+ at end smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with at dots{}Texts.'' line with this:
+
+ at smallexample
+ at group
+    with the Invariant Sections being @var{list their titles}, with
+    the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+    being @var{list}.
+ at end group
+ at end smallexample
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+ at c Local Variables:
+ at c ispell-local-pdict: "ispell-dict"
+ at c End:
diff --git a/gdb/doc/gdb.info b/gdb/doc/gdb.info
new file mode 100644
index 0000000..23eb4bf
--- /dev/null
+++ b/gdb/doc/gdb.info
@@ -0,0 +1,651 @@
+This is gdb.info, produced by makeinfo version 4.8 from ./gdb.texinfo.
+
+INFO-DIR-SECTION Software development
+START-INFO-DIR-ENTRY
+* Gdb: (gdb).                     The GNU debugger.
+END-INFO-DIR-ENTRY
+
+   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+2010 2011, 2012 Free Software Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "Free Software" and "Free Software Needs Free
+Documentation", with the Front-Cover Texts being "A GNU Manual," and
+with the Back-Cover Texts as in (a) below.
+
+   (a) The FSF's Back-Cover Text is: "You are free to copy and modify
+this GNU Manual.  Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom."
+
+   This file documents the GNU debugger GDB.
+
+   This is the Tenth Edition, of `Debugging with GDB: the GNU
+Source-Level Debugger' for GDB (GDB) Version 7.5.
+
+   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+2010 2011, 2012 Free Software Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "Free Software" and "Free Software Needs Free
+Documentation", with the Front-Cover Texts being "A GNU Manual," and
+with the Back-Cover Texts as in (a) below.
+
+   (a) The FSF's Back-Cover Text is: "You are free to copy and modify
+this GNU Manual.  Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom."
+
+
+Indirect:
+gdb.info-1: 1910
+gdb.info-2: 298476
+gdb.info-3: 597893
+gdb.info-4: 897339
+gdb.info-5: 1194684
+gdb.info-6: 1474501
+
+Tag Table:
+(Indirect)
+Node: Top1910
+Node: Summary5338
+Node: Free Software7211
+Node: Free Documentation7952
+Node: Contributors12887
+Node: Sample Session20981
+Node: Invocation27817
+Node: Invoking GDB28361
+Node: File Options30674
+Node: Mode Options33732
+Ref: -nx33959
+Node: Startup40406
+Ref: Home Directory Init File40957
+Ref: Option -init-eval-command41067
+Ref: Init File in the Current Directory during Startup41412
+Ref: Startup-Footnote-143584
+Node: Quitting GDB43693
+Node: Shell Commands44590
+Node: Logging Output45517
+Node: Commands46363
+Node: Command Syntax47001
+Node: Completion49167
+Ref: Completion-Footnote-154531
+Node: Help54691
+Node: Running60060
+Node: Compilation61289
+Node: Starting63373
+Node: Arguments72298
+Node: Environment73568
+Node: Working Directory76836
+Node: Input/Output77944
+Node: Attach79915
+Node: Kill Process82382
+Node: Inferiors and Programs83363
+Node: Threads90608
+Ref: set libthread-db-search-path98017
+Node: Forks100075
+Node: Checkpoint/Restart106385
+Ref: Checkpoint/Restart-Footnote-1110914
+Node: Stopping110949
+Node: Breakpoints112212
+Node: Set Breaks115755
+Node: Set Watchpoints134488
+Node: Set Catchpoints143891
+Node: Delete Breaks153327
+Node: Disabling155263
+Node: Conditions158652
+Node: Break Commands164300
+Node: Dynamic Printf167522
+Node: Save Breakpoints171782
+Node: Static Probe Points172957
+Node: Error in Breakpoints175644
+Node: Breakpoint-related Warnings176380
+Node: Continuing and Stepping178707
+Node: Skipping Over Functions and Files188093
+Node: Signals191665
+Ref: extra signal information195947
+Node: Thread Stops197450
+Node: All-Stop Mode198549
+Node: Non-Stop Mode202447
+Node: Background Execution205924
+Node: Thread-Specific Breakpoints208493
+Node: Interrupted System Calls209815
+Node: Observer Mode211329
+Node: Reverse Execution214768
+Ref: Reverse Execution-Footnote-1219395
+Ref: Reverse Execution-Footnote-2220022
+Node: Process Record and Replay220072
+Node: Stack227319
+Node: Frames228812
+Node: Backtrace231564
+Ref: Backtrace-Footnote-1236777
+Node: Selection236965
+Node: Frame Info239829
+Node: Source241823
+Node: List242889
+Node: Specify Location245502
+Node: Edit250106
+Ref: Edit-Footnote-1251581
+Node: Search251816
+Node: Source Path252624
+Ref: set substitute-path258991
+Node: Machine Code261212
+Node: Data267886
+Node: Expressions275502
+Node: Ambiguous Expressions277594
+Node: Variables280828
+Node: Arrays286446
+Node: Output Formats288977
+Ref: Output Formats-Footnote-1292165
+Node: Memory292322
+Node: Auto Display298476
+Node: Print Settings303018
+Ref: set print entry-values310598
+Node: Pretty Printing321843
+Node: Pretty-Printer Introduction322356
+Node: Pretty-Printer Example324111
+Node: Pretty-Printer Commands324889
+Node: Value History327313
+Node: Convenience Vars329734
+Node: Registers334580
+Ref: Registers-Footnote-1339257
+Node: Floating Point Hardware339652
+Node: Vector Unit340184
+Node: OS Information340571
+Ref: linux info os infotypes343148
+Node: Memory Region Attributes347348
+Node: Dump/Restore Files352018
+Node: Core File Generation354323
+Node: Character Sets355557
+Node: Caching Remote Data361922
+Ref: Caching Remote Data-Footnote-1364187
+Node: Searching Memory364425
+Node: Optimized Code367302
+Node: Inline Functions368979
+Node: Tail Call Frames371606
+Ref: set debug entry-values373746
+Node: Macros377820
+Ref: Macros-Footnote-1385396
+Node: Tracepoints385549
+Node: Set Tracepoints387610
+Node: Create and Delete Tracepoints390548
+Node: Enable and Disable Tracepoints396948
+Node: Tracepoint Passcounts398188
+Node: Tracepoint Conditions399615
+Node: Trace State Variables401309
+Node: Tracepoint Actions403499
+Node: Listing Tracepoints409804
+Node: Listing Static Tracepoint Markers410925
+Node: Starting and Stopping Trace Experiments412771
+Ref: disconnected tracing414516
+Node: Tracepoint Restrictions418134
+Node: Analyze Collected Data421904
+Node: tfind423209
+Node: tdump427631
+Node: save tracepoints430146
+Node: Tracepoint Variables430642
+Node: Trace Files431770
+Node: Overlays433228
+Node: How Overlays Work433948
+Ref: A code overlay436508
+Node: Overlay Commands439946
+Node: Automatic Overlay Debugging444136
+Node: Overlay Sample Program446277
+Node: Languages448037
+Node: Setting449200
+Node: Filenames450902
+Node: Manually451713
+Node: Automatically452922
+Node: Show453983
+Node: Checks455305
+Node: Type Checking456695
+Node: Range Checking459428
+Node: Supported Languages461829
+Node: C463129
+Node: C Operators464093
+Node: C Constants468412
+Node: C Plus Plus Expressions471293
+Node: C Defaults474636
+Node: C Checks475319
+Node: Debugging C476042
+Node: Debugging C Plus Plus476526
+Node: Decimal Floating Point479984
+Node: D481243
+Node: Go481500
+Node: Objective-C482594
+Node: Method Names in Commands483057
+Node: The Print Command with Objective-C484752
+Node: OpenCL C485403
+Node: OpenCL C Datatypes485678
+Node: OpenCL C Expressions486053
+Node: OpenCL C Operators486410
+Node: Fortran486642
+Node: Fortran Operators487364
+Node: Fortran Defaults488220
+Node: Special Fortran Commands488605
+Node: Pascal489111
+Node: Modula-2489626
+Node: M2 Operators490601
+Node: Built-In Func/Proc493600
+Node: M2 Constants496461
+Node: M2 Types498062
+Node: M2 Defaults501281
+Node: Deviations501881
+Node: M2 Checks502982
+Node: M2 Scope503800
+Node: GDB/M2504824
+Node: Ada505736
+Node: Ada Mode Intro506799
+Node: Omissions from Ada508709
+Node: Additions to Ada513063
+Node: Stopping Before Main Program516993
+Node: Ada Tasks517522
+Node: Ada Tasks and Core Files523935
+Node: Ravenscar Profile524853
+Node: Ada Glitches525923
+Node: Unsupported Languages528717
+Node: Symbols529407
+Node: Altering543995
+Node: Assignment544964
+Node: Jumping548069
+Node: Signaling550204
+Node: Returning551335
+Node: Calling554687
+Node: Patching557714
+Node: GDB Files558791
+Node: Files559436
+Ref: Shared Libraries572281
+Ref: Files-Footnote-1583915
+Node: Separate Debug Files584090
+Ref: debug-file-directory587195
+Node: Index Files595824
+Node: Symbol Errors597893
+Node: Data Files601506
+Node: Targets602462
+Node: Active Targets603942
+Node: Target Commands605016
+Ref: load609289
+Node: Byte Order610270
+Node: Remote Debugging611247
+Node: Connecting612509
+Node: File Transfer617449
+Node: Server618389
+Ref: Monitor Commands for gdbserver628611
+Ref: Server-Footnote-1633265
+Node: Remote Configuration633385
+Ref: set remotebreak634409
+Ref: set remote hardware-watchpoint-limit635873
+Ref: set remote hardware-breakpoint-limit635873
+Ref: set remote hardware-watchpoint-length-limit636099
+Ref: set remote exec-file636514
+Node: Remote Stub643479
+Node: Stub Contents646376
+Node: Bootstrapping648483
+Node: Debug Session652292
+Node: Configurations654334
+Node: Native655103
+Node: HP-UX655738
+Node: BSD libkvm Interface656027
+Node: SVR4 Process Information657098
+Node: DJGPP Native660528
+Node: Cygwin Native667108
+Node: Non-debug DLL Symbols671057
+Node: Hurd Native675605
+Node: Neutrino680868
+Node: Darwin681258
+Node: Embedded OS682516
+Node: VxWorks682992
+Node: VxWorks Connection685209
+Node: VxWorks Download686143
+Node: VxWorks Attach687878
+Node: Embedded Processors688276
+Node: ARM689455
+Node: M32R/D693576
+Node: M68K695278
+Node: MicroBlaze695571
+Node: MIPS Embedded697021
+Node: OpenRISC 1000701959
+Node: PowerPC Embedded704828
+Node: PA708595
+Node: Sparclet708879
+Node: Sparclet File710349
+Node: Sparclet Connection711229
+Node: Sparclet Download711707
+Node: Sparclet Execution712756
+Node: Sparclite713347
+Node: Z8000713722
+Node: AVR715106
+Node: CRIS715469
+Node: Super-H716447
+Node: Architectures717650
+Node: i386718063
+Node: Alpha718746
+Node: MIPS718879
+Node: HPPA722772
+Node: SPU723291
+Node: PowerPC725479
+Node: Controlling GDB726197
+Node: Prompt727094
+Node: Editing728813
+Node: Command History729756
+Node: Screen Size733160
+Node: Numbers734994
+Node: ABI736971
+Node: Auto-loading739895
+Ref: set auto-load off740762
+Ref: show auto-load741398
+Ref: info auto-load742177
+Node: Init File in the Current Directory745758
+Ref: set auto-load local-gdbinit746333
+Ref: show auto-load local-gdbinit746515
+Ref: info auto-load local-gdbinit746679
+Node: libthread_db.so.1 file746827
+Ref: set auto-load libthread-db747764
+Ref: show auto-load libthread-db747895
+Ref: info auto-load libthread-db748032
+Node: objfile-gdb.gdb file748216
+Ref: set auto-load gdb-scripts748825
+Ref: show auto-load gdb-scripts748949
+Ref: info auto-load gdb-scripts749079
+Node: Auto-loading safe path749310
+Ref: set auto-load safe-path750465
+Ref: show auto-load safe-path751204
+Ref: add-auto-load-safe-path751327
+Node: Auto-loading verbose mode754221
+Ref: set debug auto-load755384
+Ref: show debug auto-load755485
+Node: Messages/Warnings755607
+Ref: confirmation requests757042
+Node: Debugging Output758249
+Node: Other Misc Settings765051
+Node: Extending GDB766080
+Node: Sequences767708
+Node: Define768303
+Node: Hooks772104
+Node: Command Files774471
+Node: Output779541
+Node: Python784474
+Node: Python Commands785649
+Node: Python API787443
+Node: Basic Python789376
+Ref: prompt_hook796842
+Node: Exception Handling797439
+Node: Values From Inferior799935
+Node: Types In Python812580
+Node: Pretty Printing API821319
+Node: Selecting Pretty-Printers825212
+Node: Writing a Pretty-Printer827545
+Node: Inferiors In Python832868
+Node: Events In Python835875
+Node: Threads In Python841283
+Node: Commands In Python843895
+Node: Parameters In Python853081
+Node: Functions In Python858542
+Node: Progspaces In Python860657
+Node: Objfiles In Python862009
+Node: Frames In Python863940
+Node: Blocks In Python870377
+Node: Symbols In Python873348
+Node: Symbol Tables In Python880887
+Node: Breakpoints In Python883878
+Node: Finish Breakpoints in Python890990
+Node: Lazy Strings In Python893097
+Node: Python Auto-loading895300
+Ref: set auto-load python-scripts895964
+Ref: show auto-load python-scripts896064
+Ref: info auto-load python-scripts896170
+Node: objfile-gdb.py file897339
+Ref: set auto-load scripts-directory898121
+Ref: with-auto-load-dir898497
+Ref: show auto-load scripts-directory899315
+Node: dotdebug_gdb_scripts section899644
+Node: Which flavor to choose?901165
+Node: Python modules902991
+Node: gdb.printing903377
+Node: gdb.types904791
+Node: gdb.prompt906493
+Node: Aliases908142
+Node: Interpreters910985
+Node: TUI913084
+Node: TUI Overview914031
+Node: TUI Keys916464
+Node: TUI Single Key Mode918768
+Node: TUI Commands919643
+Node: TUI Configuration922027
+Node: Emacs923323
+Node: GDB/MI928797
+Node: GDB/MI General Design930677
+Node: Context management933200
+Node: Asynchronous and non-stop modes936335
+Node: Thread groups938327
+Node: GDB/MI Command Syntax940605
+Node: GDB/MI Input Syntax940848
+Node: GDB/MI Output Syntax942402
+Node: GDB/MI Compatibility with CLI945974
+Node: GDB/MI Development and Front Ends946711
+Node: GDB/MI Output Records948368
+Node: GDB/MI Result Records948740
+Node: GDB/MI Stream Records949746
+Node: GDB/MI Async Records951011
+Node: GDB/MI Frame Information958843
+Node: GDB/MI Thread Information959921
+Node: GDB/MI Ada Exception Information960900
+Node: GDB/MI Simple Examples961323
+Node: GDB/MI Command Description Format963500
+Node: GDB/MI Breakpoint Commands964380
+Node: GDB/MI Program Context982251
+Node: GDB/MI Thread Commands986519
+Node: GDB/MI Ada Tasking Commands990475
+Node: GDB/MI Program Execution992729
+Node: GDB/MI Stack Manipulation1004515
+Node: GDB/MI Variable Objects1015417
+Ref: -var-set-format1025320
+Ref: -var-list-children1026438
+Ref: -var-update1034789
+Ref: -var-set-frozen1037784
+Ref: -var-set-update-range1038580
+Ref: -var-set-visualizer1039110
+Node: GDB/MI Data Manipulation1040607
+Node: GDB/MI Tracepoint Commands1058192
+Node: GDB/MI Symbol Query1065521
+Node: GDB/MI File Commands1066210
+Node: GDB/MI Target Manipulation1069547
+Node: GDB/MI File Transfer Commands1075769
+Node: GDB/MI Miscellaneous Commands1077091
+Ref: -interpreter-exec1089683
+Node: Annotations1091996
+Node: Annotations Overview1092915
+Node: Server Prefix1095378
+Node: Prompting1096112
+Node: Errors1097629
+Node: Invalidation1098525
+Node: Annotations for Running1099002
+Node: Source Annotations1100522
+Node: JIT Interface1101447
+Node: Declarations1103247
+Node: Registering Code1104634
+Node: Unregistering Code1105606
+Node: Custom Debug Info1106233
+Node: Using JIT Debug Info Readers1107529
+Node: Writing JIT Debug Info Readers1108396
+Node: In-Process Agent1110593
+Ref: Control Agent1112536
+Node: In-Process Agent Protocol1113403
+Node: IPA Protocol Objects1114195
+Ref: agent expression object1115197
+Ref: tracepoint action object1115403
+Ref: tracepoint object1115484
+Node: IPA Protocol Commands1118441
+Node: GDB Bugs1119776
+Node: Bug Criteria1120508
+Node: Bug Reporting1121385
+Node: Command Line Editing1129008
+Node: Introduction and Notation1129660
+Node: Readline Interaction1131280
+Node: Readline Bare Essentials1132469
+Node: Readline Movement Commands1134256
+Node: Readline Killing Commands1135219
+Node: Readline Arguments1137137
+Node: Searching1138179
+Node: Readline Init File1140328
+Node: Readline Init File Syntax1141479
+Node: Conditional Init Constructs1156537
+Node: Sample Init File1159068
+Node: Bindable Readline Commands1162183
+Node: Commands For Moving1163238
+Node: Commands For History1164097
+Node: Commands For Text1167499
+Node: Commands For Killing1170223
+Node: Numeric Arguments1172363
+Node: Commands For Completion1173500
+Node: Keyboard Macros1175467
+Node: Miscellaneous Commands1176036
+Node: Readline vi Mode1179890
+Node: Using History Interactively1180800
+Node: History Interaction1181343
+Node: Event Designators1182765
+Node: Word Designators1183905
+Node: Modifiers1185542
+Node: In Memoriam1186765
+Node: Formatting Documentation1187648
+Ref: Formatting Documentation-Footnote-11190961
+Node: Installing GDB1191025
+Node: Requirements1191597
+Ref: Expat1192166
+Node: Running Configure1194684
+Node: Separate Objdir1198223
+Node: Config Names1201107
+Node: Configure Options1202552
+Node: System-wide configuration1204922
+Node: Maintenance Commands1206217
+Ref: maint info breakpoints1207871
+Node: Remote Protocol1222269
+Node: Overview1222899
+Ref: Binary Data1225461
+Node: Packets1227984
+Ref: thread-id syntax1228884
+Ref: extended mode1230329
+Ref: bc1232050
+Ref: bs1232260
+Ref: read registers packet1233864
+Ref: cycle step packet1235797
+Ref: write register packet1237673
+Ref: step with signal packet1238669
+Ref: vCont packet1240123
+Ref: vStopped packet1245039
+Ref: X packet1245382
+Ref: insert breakpoint or watchpoint packet1245668
+Node: Stop Reply Packets1249705
+Node: General Query Packets1254445
+Ref: QNonStop1264659
+Ref: QPassSignals1265283
+Ref: QProgramSignals1266452
+Ref: qSearch memory1268928
+Ref: QStartNoAckMode1269426
+Ref: qSupported1269956
+Ref: multiprocess extensions1279773
+Ref: install tracepoint in tracing1281802
+Ref: qXfer read1284820
+Ref: qXfer auxiliary vector read1285314
+Ref: qXfer target description read1285663
+Ref: qXfer library list read1286107
+Ref: qXfer svr4 library list read1286762
+Ref: qXfer memory map read1287397
+Ref: qXfer sdata read1287783
+Ref: qXfer siginfo read1288247
+Ref: qXfer spu read1288643
+Ref: qXfer threads read1289166
+Ref: qXfer traceframe info read1289568
+Ref: qXfer unwind info block1289984
+Ref: qXfer fdpic loadmap read1290216
+Ref: qXfer osdata read1290631
+Ref: qXfer write1291833
+Ref: qXfer siginfo write1292390
+Ref: qXfer spu write1292786
+Ref: General Query Packets-Footnote-11294873
+Node: Architecture-Specific Protocol Details1295200
+Node: ARM-Specific Protocol Details1295709
+Node: ARM Breakpoint Kinds1295957
+Node: MIPS-Specific Protocol Details1296289
+Node: MIPS Register packet Format1296572
+Node: MIPS Breakpoint Kinds1297501
+Node: Tracepoint Packets1297920
+Ref: QTEnable1306913
+Ref: QTDisable1307109
+Ref: qTfSTM1312633
+Ref: qTsSTM1312633
+Ref: qTSTMat1313671
+Node: Host I/O Packets1316599
+Node: Interrupts1321217
+Node: Notification Packets1323120
+Node: Remote Non-Stop1325391
+Node: Packet Acknowledgment1329650
+Node: Examples1331765
+Node: File-I/O Remote Protocol Extension1332391
+Node: File-I/O Overview1332853
+Node: Protocol Basics1335050
+Node: The F Request Packet1337282
+Node: The F Reply Packet1338183
+Node: The Ctrl-C Message1339101
+Node: Console I/O1340730
+Node: List of Supported Calls1341947
+Node: open1342309
+Node: close1344803
+Node: read1345185
+Node: write1345792
+Node: lseek1346559
+Node: rename1347437
+Node: unlink1348833
+Node: stat/fstat1349772
+Node: gettimeofday1350659
+Node: isatty1351094
+Node: system1351690
+Node: Protocol-specific Representation of Datatypes1353232
+Node: Integral Datatypes1353609
+Node: Pointer Values1354416
+Node: Memory Transfer1355124
+Node: struct stat1355744
+Node: struct timeval1357946
+Node: Constants1358463
+Node: Open Flags1358912
+Node: mode_t Values1359253
+Node: Errno Values1359745
+Node: Lseek Flags1360556
+Node: Limits1360741
+Node: File-I/O Examples1361101
+Node: Library List Format1362217
+Node: Library List Format for SVR4 Targets1365000
+Node: Memory Map Format1367470
+Node: Thread List Format1370047
+Node: Traceframe Info Format1370865
+Node: Agent Expressions1372322
+Node: General Bytecode Design1375143
+Node: Bytecode Descriptions1379943
+Node: Using Agent Expressions1393379
+Node: Varying Target Capabilities1395357
+Node: Rationale1396519
+Node: Target Descriptions1403905
+Node: Retrieving Descriptions1405781
+Node: Target Description Format1406866
+Node: Predefined Target Types1415915
+Node: Standard Target Features1417300
+Node: ARM Features1419090
+Node: i386 Features1420582
+Node: MIPS Features1421686
+Node: M68K Features1422870
+Node: PowerPC Features1423533
+Node: TIC6x Features1424840
+Node: Operating System Information1425389
+Node: Process list1426227
+Node: Trace File Format1427289
+Node: Index Section Format1429283
+Node: Copying1436911
+Node: GNU Free Documentation License1474501
+Node: Concept Index1499667
+Node: Command and Variable Index1616465
+
+End Tag Table
diff --git a/gdb/doc/gdb.info-1 b/gdb/doc/gdb.info-1
new file mode 100644
index 0000000..46012f3
--- /dev/null
+++ b/gdb/doc/gdb.info-1
@@ -0,0 +1,7069 @@
+This is gdb.info, produced by makeinfo version 4.8 from ./gdb.texinfo.
+
+INFO-DIR-SECTION Software development
+START-INFO-DIR-ENTRY
+* Gdb: (gdb).                     The GNU debugger.
+END-INFO-DIR-ENTRY
+
+   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+2010 2011, 2012 Free Software Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "Free Software" and "Free Software Needs Free
+Documentation", with the Front-Cover Texts being "A GNU Manual," and
+with the Back-Cover Texts as in (a) below.
+
+   (a) The FSF's Back-Cover Text is: "You are free to copy and modify
+this GNU Manual.  Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom."
+
+   This file documents the GNU debugger GDB.
+
+   This is the Tenth Edition, of `Debugging with GDB: the GNU
+Source-Level Debugger' for GDB (GDB) Version 7.5.
+
+   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+2010 2011, 2012 Free Software Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "Free Software" and "Free Software Needs Free
+Documentation", with the Front-Cover Texts being "A GNU Manual," and
+with the Back-Cover Texts as in (a) below.
+
+   (a) The FSF's Back-Cover Text is: "You are free to copy and modify
+this GNU Manual.  Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom."
+
+
+File: gdb.info,  Node: Top,  Next: Summary,  Prev: (dir),  Up: (dir)
+
+Debugging with GDB
+******************
+
+This file describes GDB, the GNU symbolic debugger.
+
+   This is the Tenth Edition, for GDB (GDB) Version 7.5.
+
+   Copyright (C) 1988-2012 Free Software Foundation, Inc.
+
+   This edition of the GDB manual is dedicated to the memory of Fred
+Fish.  Fred was a long-standing contributor to GDB and to Free software
+in general.  We will miss him.
+
+* Menu:
+
+* Summary::                     Summary of GDB
+* Sample Session::              A sample GDB session
+
+* Invocation::                  Getting in and out of GDB
+* Commands::                    GDB commands
+* Running::                     Running programs under GDB
+* Stopping::                    Stopping and continuing
+* Reverse Execution::           Running programs backward
+* Process Record and Replay::   Recording inferior's execution and replaying it
+* Stack::                       Examining the stack
+* Source::                      Examining source files
+* Data::                        Examining data
+* Optimized Code::              Debugging optimized code
+* Macros::                      Preprocessor Macros
+* Tracepoints::                 Debugging remote targets non-intrusively
+* Overlays::                    Debugging programs that use overlays
+
+* Languages::                   Using GDB with different languages
+
+* Symbols::                     Examining the symbol table
+* Altering::                    Altering execution
+* GDB Files::                   GDB files
+* Targets::                     Specifying a debugging target
+* Remote Debugging::            Debugging remote programs
+* Configurations::              Configuration-specific information
+* Controlling GDB::             Controlling GDB
+* Extending GDB::               Extending GDB
+* Interpreters::		Command Interpreters
+* TUI::                         GDB Text User Interface
+* Emacs::                       Using GDB under GNU Emacs
+* GDB/MI::                      GDB's Machine Interface.
+* Annotations::                 GDB's annotation interface.
+* JIT Interface::               Using the JIT debugging interface.
+* In-Process Agent::            In-Process Agent
+
+* GDB Bugs::                    Reporting bugs in GDB
+
+
+* Command Line Editing::        Command Line Editing
+* Using History Interactively:: Using History Interactively
+* In Memoriam::                 In Memoriam
+* Formatting Documentation::    How to format and print GDB documentation
+* Installing GDB::              Installing GDB
+* Maintenance Commands::        Maintenance Commands
+* Remote Protocol::             GDB Remote Serial Protocol
+* Agent Expressions::           The GDB Agent Expression Mechanism
+* Target Descriptions::         How targets can describe themselves to
+                                GDB
+* Operating System Information:: Getting additional information from
+                                 the operating system
+* Trace File Format::		GDB trace file format
+* Index Section Format::        .gdb_index section format
+* Copying::			GNU General Public License says
+                                how you can copy and share GDB
+* GNU Free Documentation License::  The license for this documentation
+* Concept Index::               Index of GDB concepts
+* Command and Variable Index::  Index of GDB commands, variables,
+                                  functions, and Python data types
+
+
+File: gdb.info,  Node: Summary,  Next: Sample Session,  Prev: Top,  Up: Top
+
+Summary of GDB
+**************
+
+The purpose of a debugger such as GDB is to allow you to see what is
+going on "inside" another program while it executes--or what another
+program was doing at the moment it crashed.
+
+   GDB can do four main kinds of things (plus other things in support of
+these) to help you catch bugs in the act:
+
+   * Start your program, specifying anything that might affect its
+     behavior.
+
+   * Make your program stop on specified conditions.
+
+   * Examine what has happened, when your program has stopped.
+
+   * Change things in your program, so you can experiment with
+     correcting the effects of one bug and go on to learn about another.
+
+   You can use GDB to debug programs written in C and C++.  For more
+information, see *Note Supported Languages: Supported Languages.  For
+more information, see *Note C and C++: C.
+
+   Support for D is partial.  For information on D, see *Note D: D.
+
+   Support for Modula-2 is partial.  For information on Modula-2, see
+*Note Modula-2: Modula-2.
+
+   Support for OpenCL C is partial.  For information on OpenCL C, see
+*Note OpenCL C: OpenCL C.
+
+   Debugging Pascal programs which use sets, subranges, file variables,
+or nested functions does not currently work.  GDB does not support
+entering expressions, printing values, or similar features using Pascal
+syntax.
+
+   GDB can be used to debug programs written in Fortran, although it
+may be necessary to refer to some variables with a trailing underscore.
+
+   GDB can be used to debug programs written in Objective-C, using
+either the Apple/NeXT or the GNU Objective-C runtime.
+
+* Menu:
+
+* Free Software::               Freely redistributable software
+* Free Documentation::          Free Software Needs Free Documentation
+* Contributors::                Contributors to GDB
+
+
+File: gdb.info,  Node: Free Software,  Next: Free Documentation,  Up: Summary
+
+Free Software
+=============
+
+GDB is "free software", protected by the GNU General Public License
+(GPL).  The GPL gives you the freedom to copy or adapt a licensed
+program--but every person getting a copy also gets with it the freedom
+to modify that copy (which means that they must get access to the
+source code), and the freedom to distribute further copies.  Typical
+software companies use copyrights to limit your freedoms; the Free
+Software Foundation uses the GPL to preserve these freedoms.
+
+   Fundamentally, the General Public License is a license which says
+that you have these freedoms and that you cannot take these freedoms
+away from anyone else.
+
+
+File: gdb.info,  Node: Free Documentation,  Next: Contributors,  Prev: Free Software,  Up: Summary
+
+Free Software Needs Free Documentation
+======================================
+
+The biggest deficiency in the free software community today is not in
+the software--it is the lack of good free documentation that we can
+include with the free software.  Many of our most important programs do
+not come with free reference manuals and free introductory texts.
+Documentation is an essential part of any software package; when an
+important free software package does not come with a free manual and a
+free tutorial, that is a major gap.  We have many such gaps today.
+
+   Consider Perl, for instance.  The tutorial manuals that people
+normally use are non-free.  How did this come about?  Because the
+authors of those manuals published them with restrictive terms--no
+copying, no modification, source files not available--which exclude
+them from the free software world.
+
+   That wasn't the first time this sort of thing happened, and it was
+far from the last.  Many times we have heard a GNU user eagerly
+describe a manual that he is writing, his intended contribution to the
+community, only to learn that he had ruined everything by signing a
+publication contract to make it non-free.
+
+   Free documentation, like free software, is a matter of freedom, not
+price.  The problem with the non-free manual is not that publishers
+charge a price for printed copies--that in itself is fine.  (The Free
+Software Foundation sells printed copies of manuals, too.)  The problem
+is the restrictions on the use of the manual.  Free manuals are
+available in source code form, and give you permission to copy and
+modify.  Non-free manuals do not allow this.
+
+   The criteria of freedom for a free manual are roughly the same as for
+free software.  Redistribution (including the normal kinds of
+commercial redistribution) must be permitted, so that the manual can
+accompany every copy of the program, both on-line and on paper.
+
+   Permission for modification of the technical content is crucial too.
+When people modify the software, adding or changing features, if they
+are conscientious they will change the manual too--so they can provide
+accurate and clear documentation for the modified program.  A manual
+that leaves you no choice but to write a new manual to document a
+changed version of the program is not really available to our community.
+
+   Some kinds of limits on the way modification is handled are
+acceptable.  For example, requirements to preserve the original
+author's copyright notice, the distribution terms, or the list of
+authors, are ok.  It is also no problem to require modified versions to
+include notice that they were modified.  Even entire sections that may
+not be deleted or changed are acceptable, as long as they deal with
+nontechnical topics (like this one).  These kinds of restrictions are
+acceptable because they don't obstruct the community's normal use of
+the manual.
+
+   However, it must be possible to modify all the _technical_ content
+of the manual, and then distribute the result in all the usual media,
+through all the usual channels.  Otherwise, the restrictions obstruct
+the use of the manual, it is not free, and we need another manual to
+replace it.
+
+   Please spread the word about this issue.  Our community continues to
+lose manuals to proprietary publishing.  If we spread the word that
+free software needs free reference manuals and free tutorials, perhaps
+the next person who wants to contribute by writing documentation will
+realize, before it is too late, that only free manuals contribute to
+the free software community.
+
+   If you are writing documentation, please insist on publishing it
+under the GNU Free Documentation License or another free documentation
+license.  Remember that this decision requires your approval--you don't
+have to let the publisher decide.  Some commercial publishers will use
+a free license if you insist, but they will not propose the option; it
+is up to you to raise the issue and say firmly that this is what you
+want.  If the publisher you are dealing with refuses, please try other
+publishers.  If you're not sure whether a proposed license is free,
+write to <licensing at gnu.org>.
+
+   You can encourage commercial publishers to sell more free, copylefted
+manuals and tutorials by buying them, and particularly by buying copies
+from the publishers that paid for their writing or for major
+improvements.  Meanwhile, try to avoid buying non-free documentation at
+all.  Check the distribution terms of a manual before you buy it, and
+insist that whoever seeks your business must respect your freedom.
+Check the history of the book, and try to reward the publishers that
+have paid or pay the authors to work on it.
+
+   The Free Software Foundation maintains a list of free documentation
+published by other publishers, at
+`http://www.fsf.org/doc/other-free-books.html'.
+
+
+File: gdb.info,  Node: Contributors,  Prev: Free Documentation,  Up: Summary
+
+Contributors to GDB
+===================
+
+Richard Stallman was the original author of GDB, and of many other GNU
+programs.  Many others have contributed to its development.  This
+section attempts to credit major contributors.  One of the virtues of
+free software is that everyone is free to contribute to it; with
+regret, we cannot actually acknowledge everyone here.  The file
+`ChangeLog' in the GDB distribution approximates a blow-by-blow account.
+
+   Changes much prior to version 2.0 are lost in the mists of time.
+
+     _Plea:_ Additions to this section are particularly welcome.  If you
+     or your friends (or enemies, to be evenhanded) have been unfairly
+     omitted from this list, we would like to add your names!
+
+   So that they may not regard their many labors as thankless, we
+particularly thank those who shepherded GDB through major releases:
+Andrew Cagney (releases 6.3, 6.2, 6.1, 6.0, 5.3, 5.2, 5.1 and 5.0); Jim
+Blandy (release 4.18); Jason Molenda (release 4.17); Stan Shebs
+(release 4.14); Fred Fish (releases 4.16, 4.15, 4.13, 4.12, 4.11, 4.10,
+and 4.9); Stu Grossman and John Gilmore (releases 4.8, 4.7, 4.6, 4.5,
+and 4.4); John Gilmore (releases 4.3, 4.2, 4.1, 4.0, and 3.9); Jim
+Kingdon (releases 3.5, 3.4, and 3.3); and Randy Smith (releases 3.2,
+3.1, and 3.0).
+
+   Richard Stallman, assisted at various times by Peter TerMaat, Chris
+Hanson, and Richard Mlynarik, handled releases through 2.8.
+
+   Michael Tiemann is the author of most of the GNU C++ support in GDB,
+with significant additional contributions from Per Bothner and Daniel
+Berlin.  James Clark wrote the GNU C++ demangler.  Early work on C++
+was by Peter TerMaat (who also did much general update work leading to
+release 3.0).
+
+   GDB uses the BFD subroutine library to examine multiple object-file
+formats; BFD was a joint project of David V.  Henkel-Wallace, Rich
+Pixley, Steve Chamberlain, and John Gilmore.
+
+   David Johnson wrote the original COFF support; Pace Willison did the
+original support for encapsulated COFF.
+
+   Brent Benson of Harris Computer Systems contributed DWARF 2 support.
+
+   Adam de Boor and Bradley Davis contributed the ISI Optimum V support.
+Per Bothner, Noboyuki Hikichi, and Alessandro Forin contributed MIPS
+support.  Jean-Daniel Fekete contributed Sun 386i support.  Chris
+Hanson improved the HP9000 support.  Noboyuki Hikichi and Tomoyuki
+Hasei contributed Sony/News OS 3 support.  David Johnson contributed
+Encore Umax support.  Jyrki Kuoppala contributed Altos 3068 support.
+Jeff Law contributed HP PA and SOM support.  Keith Packard contributed
+NS32K support.  Doug Rabson contributed Acorn Risc Machine support.
+Bob Rusk contributed Harris Nighthawk CX-UX support.  Chris Smith
+contributed Convex support (and Fortran debugging).  Jonathan Stone
+contributed Pyramid support.  Michael Tiemann contributed SPARC support.
+Tim Tucker contributed support for the Gould NP1 and Gould Powernode.
+Pace Willison contributed Intel 386 support.  Jay Vosburgh contributed
+Symmetry support.  Marko Mlinar contributed OpenRISC 1000 support.
+
+   Andreas Schwab contributed M68K GNU/Linux support.
+
+   Rich Schaefer and Peter Schauer helped with support of SunOS shared
+libraries.
+
+   Jay Fenlason and Roland McGrath ensured that GDB and GAS agree about
+several machine instruction sets.
+
+   Patrick Duval, Ted Goldstein, Vikram Koka and Glenn Engel helped
+develop remote debugging.  Intel Corporation, Wind River Systems, AMD,
+and ARM contributed remote debugging modules for the i960, VxWorks,
+A29K UDI, and RDI targets, respectively.
+
+   Brian Fox is the author of the readline libraries providing
+command-line editing and command history.
+
+   Andrew Beers of SUNY Buffalo wrote the language-switching code, the
+Modula-2 support, and contributed the Languages chapter of this manual.
+
+   Fred Fish wrote most of the support for Unix System Vr4.  He also
+enhanced the command-completion support to cover C++ overloaded symbols.
+
+   Hitachi America (now Renesas America), Ltd. sponsored the support for
+H8/300, H8/500, and Super-H processors.
+
+   NEC sponsored the support for the v850, Vr4xxx, and Vr5xxx
+processors.
+
+   Mitsubishi (now Renesas) sponsored the support for D10V, D30V, and
+M32R/D processors.
+
+   Toshiba sponsored the support for the TX39 Mips processor.
+
+   Matsushita sponsored the support for the MN10200 and MN10300
+processors.
+
+   Fujitsu sponsored the support for SPARClite and FR30 processors.
+
+   Kung Hsu, Jeff Law, and Rick Sladkey added support for hardware
+watchpoints.
+
+   Michael Snyder added support for tracepoints.
+
+   Stu Grossman wrote gdbserver.
+
+   Jim Kingdon, Peter Schauer, Ian Taylor, and Stu Grossman made nearly
+innumerable bug fixes and cleanups throughout GDB.
+
+   The following people at the Hewlett-Packard Company contributed
+support for the PA-RISC 2.0 architecture, HP-UX 10.20, 10.30, and 11.0
+(narrow mode), HP's implementation of kernel threads, HP's aC++
+compiler, and the Text User Interface (nee Terminal User Interface):
+Ben Krepp, Richard Title, John Bishop, Susan Macchia, Kathy Mann,
+Satish Pai, India Paul, Steve Rehrauer, and Elena Zannoni.  Kim Haase
+provided HP-specific information in this manual.
+
+   DJ Delorie ported GDB to MS-DOS, for the DJGPP project.  Robert
+Hoehne made significant contributions to the DJGPP port.
+
+   Cygnus Solutions has sponsored GDB maintenance and much of its
+development since 1991.  Cygnus engineers who have worked on GDB
+fulltime include Mark Alexander, Jim Blandy, Per Bothner, Kevin
+Buettner, Edith Epstein, Chris Faylor, Fred Fish, Martin Hunt, Jim
+Ingham, John Gilmore, Stu Grossman, Kung Hsu, Jim Kingdon, John Metzler,
+Fernando Nasser, Geoffrey Noer, Dawn Perchik, Rich Pixley, Zdenek
+Radouch, Keith Seitz, Stan Shebs, David Taylor, and Elena Zannoni.  In
+addition, Dave Brolley, Ian Carmichael, Steve Chamberlain, Nick Clifton,
+JT Conklin, Stan Cox, DJ Delorie, Ulrich Drepper, Frank Eigler, Doug
+Evans, Sean Fagan, David Henkel-Wallace, Richard Henderson, Jeff
+Holcomb, Jeff Law, Jim Lemke, Tom Lord, Bob Manson, Michael Meissner,
+Jason Merrill, Catherine Moore, Drew Moseley, Ken Raeburn, Gavin
+Romig-Koch, Rob Savoye, Jamie Smith, Mike Stump, Ian Taylor, Angela
+Thomas, Michael Tiemann, Tom Tromey, Ron Unrau, Jim Wilson, and David
+Zuhn have made contributions both large and small.
+
+   Andrew Cagney, Fernando Nasser, and Elena Zannoni, while working for
+Cygnus Solutions, implemented the original GDB/MI interface.
+
+   Jim Blandy added support for preprocessor macros, while working for
+Red Hat.
+
+   Andrew Cagney designed GDB's architecture vector.  Many people
+including Andrew Cagney, Stephane Carrez, Randolph Chung, Nick Duffek,
+Richard Henderson, Mark Kettenis, Grace Sainsbury, Kei Sakamoto,
+Yoshinori Sato, Michael Snyder, Andreas Schwab, Jason Thorpe, Corinna
+Vinschen, Ulrich Weigand, and Elena Zannoni, helped with the migration
+of old architectures to this new framework.
+
+   Andrew Cagney completely re-designed and re-implemented GDB's
+unwinder framework, this consisting of a fresh new design featuring
+frame IDs, independent frame sniffers, and the sentinel frame.  Mark
+Kettenis implemented the DWARF 2 unwinder, Jeff Johnston the libunwind
+unwinder, and Andrew Cagney the dummy, sentinel, tramp, and trad
+unwinders.  The architecture-specific changes, each involving a
+complete rewrite of the architecture's frame code, were carried out by
+Jim Blandy, Joel Brobecker, Kevin Buettner, Andrew Cagney, Stephane
+Carrez, Randolph Chung, Orjan Friberg, Richard Henderson, Daniel
+Jacobowitz, Jeff Johnston, Mark Kettenis, Theodore A. Roth, Kei
+Sakamoto, Yoshinori Sato, Michael Snyder, Corinna Vinschen, and Ulrich
+Weigand.
+
+   Christian Zankel, Ross Morley, Bob Wilson, and Maxim Grigoriev from
+Tensilica, Inc. contributed support for Xtensa processors.  Others who
+have worked on the Xtensa port of GDB in the past include Steve Tjiang,
+John Newlin, and Scott Foehner.
+
+   Michael Eager and staff of Xilinx, Inc., contributed support for the
+Xilinx MicroBlaze architecture.
+
+
+File: gdb.info,  Node: Sample Session,  Next: Invocation,  Prev: Summary,  Up: Top
+
+1 A Sample GDB Session
+**********************
+
+You can use this manual at your leisure to read all about GDB.
+However, a handful of commands are enough to get started using the
+debugger.  This chapter illustrates those commands.
+
+   One of the preliminary versions of GNU `m4' (a generic macro
+processor) exhibits the following bug: sometimes, when we change its
+quote strings from the default, the commands used to capture one macro
+definition within another stop working.  In the following short `m4'
+session, we define a macro `foo' which expands to `0000'; we then use
+the `m4' built-in `defn' to define `bar' as the same thing.  However,
+when we change the open quote string to `<QUOTE>' and the close quote
+string to `<UNQUOTE>', the same procedure fails to define a new synonym
+`baz':
+
+     $ cd gnu/m4
+     $ ./m4
+     define(foo,0000)
+
+     foo
+     0000
+     define(bar,defn(`foo'))
+
+     bar
+     0000
+     changequote(<QUOTE>,<UNQUOTE>)
+
+     define(baz,defn(<QUOTE>foo<UNQUOTE>))
+     baz
+     Ctrl-d
+     m4: End of input: 0: fatal error: EOF in string
+
+Let us use GDB to try to see what is going on.
+
+     $ gdb m4
+     GDB is free software and you are welcome to distribute copies
+      of it under certain conditions; type "show copying" to see
+      the conditions.
+     There is absolutely no warranty for GDB; type "show warranty"
+      for details.
+
+     GDB 7.5, Copyright 1999 Free Software Foundation, Inc...
+     (gdb)
+
+GDB reads only enough symbol data to know where to find the rest when
+needed; as a result, the first prompt comes up very quickly.  We now
+tell GDB to use a narrower display width than usual, so that examples
+fit in this manual.
+
+     (gdb) set width 70
+
+We need to see how the `m4' built-in `changequote' works.  Having
+looked at the source, we know the relevant subroutine is
+`m4_changequote', so we set a breakpoint there with the GDB `break'
+command.
+
+     (gdb) break m4_changequote
+     Breakpoint 1 at 0x62f4: file builtin.c, line 879.
+
+Using the `run' command, we start `m4' running under GDB control; as
+long as control does not reach the `m4_changequote' subroutine, the
+program runs as usual:
+
+     (gdb) run
+     Starting program: /work/Editorial/gdb/gnu/m4/m4
+     define(foo,0000)
+
+     foo
+     0000
+
+To trigger the breakpoint, we call `changequote'.  GDB suspends
+execution of `m4', displaying information about the context where it
+stops.
+
+     changequote(<QUOTE>,<UNQUOTE>)
+
+     Breakpoint 1, m4_changequote (argc=3, argv=0x33c70)
+         at builtin.c:879
+     879         if (bad_argc(TOKEN_DATA_TEXT(argv[0]),argc,1,3))
+
+Now we use the command `n' (`next') to advance execution to the next
+line of the current function.
+
+     (gdb) n
+     882         set_quotes((argc >= 2) ? TOKEN_DATA_TEXT(argv[1])\
+      : nil,
+
+`set_quotes' looks like a promising subroutine.  We can go into it by
+using the command `s' (`step') instead of `next'.  `step' goes to the
+next line to be executed in _any_ subroutine, so it steps into
+`set_quotes'.
+
+     (gdb) s
+     set_quotes (lq=0x34c78 "<QUOTE>", rq=0x34c88 "<UNQUOTE>")
+         at input.c:530
+     530         if (lquote != def_lquote)
+
+The display that shows the subroutine where `m4' is now suspended (and
+its arguments) is called a stack frame display.  It shows a summary of
+the stack.  We can use the `backtrace' command (which can also be
+spelled `bt'), to see where we are in the stack as a whole: the
+`backtrace' command displays a stack frame for each active subroutine.
+
+     (gdb) bt
+     #0  set_quotes (lq=0x34c78 "<QUOTE>", rq=0x34c88 "<UNQUOTE>")
+         at input.c:530
+     #1  0x6344 in m4_changequote (argc=3, argv=0x33c70)
+         at builtin.c:882
+     #2  0x8174 in expand_macro (sym=0x33320) at macro.c:242
+     #3  0x7a88 in expand_token (obs=0x0, t=209696, td=0xf7fffa30)
+         at macro.c:71
+     #4  0x79dc in expand_input () at macro.c:40
+     #5  0x2930 in main (argc=0, argv=0xf7fffb20) at m4.c:195
+
+We step through a few more lines to see what happens.  The first two
+times, we can use `s'; the next two times we use `n' to avoid falling
+into the `xstrdup' subroutine.
+
+     (gdb) s
+     0x3b5c  532         if (rquote != def_rquote)
+     (gdb) s
+     0x3b80  535         lquote = (lq == nil || *lq == '\0') ?  \
+     def_lquote : xstrdup(lq);
+     (gdb) n
+     536         rquote = (rq == nil || *rq == '\0') ? def_rquote\
+      : xstrdup(rq);
+     (gdb) n
+     538         len_lquote = strlen(rquote);
+
+The last line displayed looks a little odd; we can examine the variables
+`lquote' and `rquote' to see if they are in fact the new left and right
+quotes we specified.  We use the command `p' (`print') to see their
+values.
+
+     (gdb) p lquote
+     $1 = 0x35d40 "<QUOTE>"
+     (gdb) p rquote
+     $2 = 0x35d50 "<UNQUOTE>"
+
+`lquote' and `rquote' are indeed the new left and right quotes.  To
+look at some context, we can display ten lines of source surrounding
+the current line with the `l' (`list') command.
+
+     (gdb) l
+     533             xfree(rquote);
+     534
+     535         lquote = (lq == nil || *lq == '\0') ? def_lquote\
+      : xstrdup (lq);
+     536         rquote = (rq == nil || *rq == '\0') ? def_rquote\
+      : xstrdup (rq);
+     537
+     538         len_lquote = strlen(rquote);
+     539         len_rquote = strlen(lquote);
+     540     }
+     541
+     542     void
+
+Let us step past the two lines that set `len_lquote' and `len_rquote',
+and then examine the values of those variables.
+
+     (gdb) n
+     539         len_rquote = strlen(lquote);
+     (gdb) n
+     540     }
+     (gdb) p len_lquote
+     $3 = 9
+     (gdb) p len_rquote
+     $4 = 7
+
+That certainly looks wrong, assuming `len_lquote' and `len_rquote' are
+meant to be the lengths of `lquote' and `rquote' respectively.  We can
+set them to better values using the `p' command, since it can print the
+value of any expression--and that expression can include subroutine
+calls and assignments.
+
+     (gdb) p len_lquote=strlen(lquote)
+     $5 = 7
+     (gdb) p len_rquote=strlen(rquote)
+     $6 = 9
+
+Is that enough to fix the problem of using the new quotes with the `m4'
+built-in `defn'?  We can allow `m4' to continue executing with the `c'
+(`continue') command, and then try the example that caused trouble
+initially:
+
+     (gdb) c
+     Continuing.
+
+     define(baz,defn(<QUOTE>foo<UNQUOTE>))
+
+     baz
+     0000
+
+Success!  The new quotes now work just as well as the default ones.  The
+problem seems to have been just the two typos defining the wrong
+lengths.  We allow `m4' exit by giving it an EOF as input:
+
+     Ctrl-d
+     Program exited normally.
+
+The message `Program exited normally.' is from GDB; it indicates `m4'
+has finished executing.  We can end our GDB session with the GDB `quit'
+command.
+
+     (gdb) quit
+
+
+File: gdb.info,  Node: Invocation,  Next: Commands,  Prev: Sample Session,  Up: Top
+
+2 Getting In and Out of GDB
+***************************
+
+This chapter discusses how to start GDB, and how to get out of it.  The
+essentials are:
+   * type `gdb' to start GDB.
+
+   * type `quit' or `Ctrl-d' to exit.
+
+* Menu:
+
+* Invoking GDB::                How to start GDB
+* Quitting GDB::                How to quit GDB
+* Shell Commands::              How to use shell commands inside GDB
+* Logging Output::              How to log GDB's output to a file
+
+
+File: gdb.info,  Node: Invoking GDB,  Next: Quitting GDB,  Up: Invocation
+
+2.1 Invoking GDB
+================
+
+Invoke GDB by running the program `gdb'.  Once started, GDB reads
+commands from the terminal until you tell it to exit.
+
+   You can also run `gdb' with a variety of arguments and options, to
+specify more of your debugging environment at the outset.
+
+   The command-line options described here are designed to cover a
+variety of situations; in some environments, some of these options may
+effectively be unavailable.
+
+   The most usual way to start GDB is with one argument, specifying an
+executable program:
+
+     gdb PROGRAM
+
+You can also start with both an executable program and a core file
+specified:
+
+     gdb PROGRAM CORE
+
+   You can, instead, specify a process ID as a second argument, if you
+want to debug a running process:
+
+     gdb PROGRAM 1234
+
+would attach GDB to process `1234' (unless you also have a file named
+`1234'; GDB does check for a core file first).
+
+   Taking advantage of the second command-line argument requires a
+fairly complete operating system; when you use GDB as a remote debugger
+attached to a bare board, there may not be any notion of "process", and
+there is often no way to get a core dump.  GDB will warn you if it is
+unable to attach or to read core dumps.
+
+   You can optionally have `gdb' pass any arguments after the
+executable file to the inferior using `--args'.  This option stops
+option processing.
+     gdb --args gcc -O2 -c foo.c
+   This will cause `gdb' to debug `gcc', and to set `gcc''s
+command-line arguments (*note Arguments::) to `-O2 -c foo.c'.
+
+   You can run `gdb' without printing the front material, which
+describes GDB's non-warranty, by specifying `-silent':
+
+     gdb -silent
+
+You can further control how GDB starts up by using command-line
+options.  GDB itself can remind you of the options available.
+
+Type
+
+     gdb -help
+
+to display all available options and briefly describe their use (`gdb
+-h' is a shorter equivalent).
+
+   All options and command line arguments you give are processed in
+sequential order.  The order makes a difference when the `-x' option is
+used.
+
+* Menu:
+
+* File Options::                Choosing files
+* Mode Options::                Choosing modes
+* Startup::                     What GDB does during startup
+
+
+File: gdb.info,  Node: File Options,  Next: Mode Options,  Up: Invoking GDB
+
+2.1.1 Choosing Files
+--------------------
+
+When GDB starts, it reads any arguments other than options as
+specifying an executable file and core file (or process ID).  This is
+the same as if the arguments were specified by the `-se' and `-c' (or
+`-p') options respectively.  (GDB reads the first argument that does
+not have an associated option flag as equivalent to the `-se' option
+followed by that argument; and the second argument that does not have
+an associated option flag, if any, as equivalent to the `-c'/`-p'
+option followed by that argument.)  If the second argument begins with
+a decimal digit, GDB will first attempt to attach to it as a process,
+and if that fails, attempt to open it as a corefile.  If you have a
+corefile whose name begins with a digit, you can prevent GDB from
+treating it as a pid by prefixing it with `./', e.g. `./12345'.
+
+   If GDB has not been configured to included core file support, such
+as for most embedded targets, then it will complain about a second
+argument and ignore it.
+
+   Many options have both long and short forms; both are shown in the
+following list.  GDB also recognizes the long forms if you truncate
+them, so long as enough of the option is present to be unambiguous.
+(If you prefer, you can flag option arguments with `--' rather than
+`-', though we illustrate the more usual convention.)
+
+`-symbols FILE'
+`-s FILE'
+     Read symbol table from file FILE.
+
+`-exec FILE'
+`-e FILE'
+     Use file FILE as the executable file to execute when appropriate,
+     and for examining pure data in conjunction with a core dump.
+
+`-se FILE'
+     Read symbol table from file FILE and use it as the executable file.
+
+`-core FILE'
+`-c FILE'
+     Use file FILE as a core dump to examine.
+
+`-pid NUMBER'
+`-p NUMBER'
+     Connect to process ID NUMBER, as with the `attach' command.
+
+`-command FILE'
+`-x FILE'
+     Execute commands from file FILE.  The contents of this file is
+     evaluated exactly as the `source' command would.  *Note Command
+     files: Command Files.
+
+`-eval-command COMMAND'
+`-ex COMMAND'
+     Execute a single GDB command.
+
+     This option may be used multiple times to call multiple commands.
+     It may also be interleaved with `-command' as required.
+
+          gdb -ex 'target sim' -ex 'load' \
+             -x setbreakpoints -ex 'run' a.out
+
+`-init-command FILE'
+`-ix FILE'
+     Execute commands from file FILE before loading the inferior (but
+     after loading gdbinit files).  *Note Startup::.
+
+`-init-eval-command COMMAND'
+`-iex COMMAND'
+     Execute a single GDB command before loading the inferior (but
+     after loading gdbinit files).  *Note Startup::.
+
+`-directory DIRECTORY'
+`-d DIRECTORY'
+     Add DIRECTORY to the path to search for source and script files.
+
+`-r'
+`-readnow'
+     Read each symbol file's entire symbol table immediately, rather
+     than the default, which is to read it incrementally as it is
+     needed.  This makes startup slower, but makes future operations
+     faster.
+
+
+
+File: gdb.info,  Node: Mode Options,  Next: Startup,  Prev: File Options,  Up: Invoking GDB
+
+2.1.2 Choosing Modes
+--------------------
+
+You can run GDB in various alternative modes--for example, in batch
+mode or quiet mode.
+
+`-nx'
+`-n'
+     Do not execute commands found in any initialization files.
+     Normally, GDB executes the commands in these files after all the
+     command options and arguments have been processed.  *Note Command
+     Files: Command Files.
+
+`-quiet'
+`-silent'
+`-q'
+     "Quiet".  Do not print the introductory and copyright messages.
+     These messages are also suppressed in batch mode.
+
+`-batch'
+     Run in batch mode.  Exit with status `0' after processing all the
+     command files specified with `-x' (and all commands from
+     initialization files, if not inhibited with `-n').  Exit with
+     nonzero status if an error occurs in executing the GDB commands in
+     the command files.  Batch mode also disables pagination, sets
+     unlimited terminal width and height *note Screen Size::, and acts
+     as if `set confirm off' were in effect (*note Messages/Warnings::).
+
+     Batch mode may be useful for running GDB as a filter, for example
+     to download and run a program on another computer; in order to
+     make this more useful, the message
+
+          Program exited normally.
+
+     (which is ordinarily issued whenever a program running under GDB
+     control terminates) is not issued when running in batch mode.
+
+`-batch-silent'
+     Run in batch mode exactly like `-batch', but totally silently.  All
+     GDB output to `stdout' is prevented (`stderr' is unaffected).
+     This is much quieter than `-silent' and would be useless for an
+     interactive session.
+
+     This is particularly useful when using targets that give `Loading
+     section' messages, for example.
+
+     Note that targets that give their output via GDB, as opposed to
+     writing directly to `stdout', will also be made silent.
+
+`-return-child-result'
+     The return code from GDB will be the return code from the child
+     process (the process being debugged), with the following
+     exceptions:
+
+        * GDB exits abnormally.  E.g., due to an incorrect argument or
+          an internal error.  In this case the exit code is the same as
+          it would have been without `-return-child-result'.
+
+        * The user quits with an explicit value.  E.g., `quit 1'.
+
+        * The child process never runs, or is not allowed to terminate,
+          in which case the exit code will be -1.
+
+     This option is useful in conjunction with `-batch' or
+     `-batch-silent', when GDB is being used as a remote program loader
+     or simulator interface.
+
+`-nowindows'
+`-nw'
+     "No windows".  If GDB comes with a graphical user interface (GUI)
+     built in, then this option tells GDB to only use the command-line
+     interface.  If no GUI is available, this option has no effect.
+
+`-windows'
+`-w'
+     If GDB includes a GUI, then this option requires it to be used if
+     possible.
+
+`-cd DIRECTORY'
+     Run GDB using DIRECTORY as its working directory, instead of the
+     current directory.
+
+`-data-directory DIRECTORY'
+     Run GDB using DIRECTORY as its data directory.  The data directory
+     is where GDB searches for its auxiliary files.  *Note Data Files::.
+
+`-fullname'
+`-f'
+     GNU Emacs sets this option when it runs GDB as a subprocess.  It
+     tells GDB to output the full file name and line number in a
+     standard, recognizable fashion each time a stack frame is
+     displayed (which includes each time your program stops).  This
+     recognizable format looks like two `\032' characters, followed by
+     the file name, line number and character position separated by
+     colons, and a newline.  The Emacs-to-GDB interface program uses
+     the two `\032' characters as a signal to display the source code
+     for the frame.
+
+`-epoch'
+     The Epoch Emacs-GDB interface sets this option when it runs GDB as
+     a subprocess.  It tells GDB to modify its print routines so as to
+     allow Epoch to display values of expressions in a separate window.
+
+`-annotate LEVEL'
+     This option sets the "annotation level" inside GDB.  Its effect is
+     identical to using `set annotate LEVEL' (*note Annotations::).
+     The annotation LEVEL controls how much information GDB prints
+     together with its prompt, values of expressions, source lines, and
+     other types of output.  Level 0 is the normal, level 1 is for use
+     when GDB is run as a subprocess of GNU Emacs, level 3 is the
+     maximum annotation suitable for programs that control GDB, and
+     level 2 has been deprecated.
+
+     The annotation mechanism has largely been superseded by GDB/MI
+     (*note GDB/MI::).
+
+`--args'
+     Change interpretation of command line so that arguments following
+     the executable file are passed as command line arguments to the
+     inferior.  This option stops option processing.
+
+`-baud BPS'
+`-b BPS'
+     Set the line speed (baud rate or bits per second) of any serial
+     interface used by GDB for remote debugging.
+
+`-l TIMEOUT'
+     Set the timeout (in seconds) of any communication used by GDB for
+     remote debugging.
+
+`-tty DEVICE'
+`-t DEVICE'
+     Run using DEVICE for your program's standard input and output.
+
+`-tui'
+     Activate the "Text User Interface" when starting.  The Text User
+     Interface manages several text windows on the terminal, showing
+     source, assembly, registers and GDB command outputs (*note GDB
+     Text User Interface: TUI.).  Do not use this option if you run GDB
+     from Emacs (*note Using GDB under GNU Emacs: Emacs.).
+
+`-interpreter INTERP'
+     Use the interpreter INTERP for interface with the controlling
+     program or device.  This option is meant to be set by programs
+     which communicate with GDB using it as a back end.  *Note Command
+     Interpreters: Interpreters.
+
+     `--interpreter=mi' (or `--interpreter=mi2') causes GDB to use the
+     "GDB/MI interface" (*note The GDB/MI Interface: GDB/MI.) included
+     since GDB version 6.0.  The previous GDB/MI interface, included in
+     GDB version 5.3 and selected with `--interpreter=mi1', is
+     deprecated.  Earlier GDB/MI interfaces are no longer supported.
+
+`-write'
+     Open the executable and core files for both reading and writing.
+     This is equivalent to the `set write on' command inside GDB (*note
+     Patching::).
+
+`-statistics'
+     This option causes GDB to print statistics about time and memory
+     usage after it completes each command and returns to the prompt.
+
+`-version'
+     This option causes GDB to print its version number and no-warranty
+     blurb, and exit.
+
+
+
+File: gdb.info,  Node: Startup,  Prev: Mode Options,  Up: Invoking GDB
+
+2.1.3 What GDB Does During Startup
+----------------------------------
+
+Here's the description of what GDB does during session startup:
+
+  1. Sets up the command interpreter as specified by the command line
+     (*note interpreter: Mode Options.).
+
+  2. Reads the system-wide "init file" (if `--with-system-gdbinit' was
+     used when building GDB; *note System-wide configuration and
+     settings: System-wide configuration.) and executes all the
+     commands in that file.
+
+  3. Reads the init file (if any) in your home directory(1) and
+     executes all the commands in that file.
+
+  4. Executes commands and command files specified by the `-iex' and
+     `-ix' options in their specified order.  Usually you should use the
+     `-ex' and `-x' options instead, but this way you can apply
+     settings before GDB init files get executed and before inferior
+     gets loaded.
+
+  5. Processes command line options and operands.
+
+  6. Reads and executes the commands from init file (if any) in the
+     current working directory as long as `set auto-load local-gdbinit'
+     is set to `on' (*note Init File in the Current Directory::).  This
+     is only done if the current directory is different from your home
+     directory.  Thus, you can have more than one init file, one
+     generic in your home directory, and another, specific to the
+     program you are debugging, in the directory where you invoke GDB.
+
+  7. If the command line specified a program to debug, or a process to
+     attach to, or a core file, GDB loads any auto-loaded scripts
+     provided for the program or for its loaded shared libraries.
+     *Note Auto-loading::.
+
+     If you wish to disable the auto-loading during startup, you must
+     do something like the following:
+
+          $ gdb -iex "set auto-load python-scripts off" myprogram
+
+     Option `-ex' does not work because the auto-loading is then turned
+     off too late.
+
+  8. Executes commands and command files specified by the `-ex' and
+     `-x' options in their specified order.  *Note Command Files::, for
+     more details about GDB command files.
+
+  9. Reads the command history recorded in the "history file".  *Note
+     Command History::, for more details about the command history and
+     the files where GDB records it.
+
+   Init files use the same syntax as "command files" (*note Command
+Files::) and are processed by GDB in the same way.  The init file in
+your home directory can set options (such as `set complaints') that
+affect subsequent processing of command line options and operands.
+Init files are not executed if you use the `-nx' option (*note Choosing
+Modes: Mode Options.).
+
+   To display the list of init files loaded by gdb at startup, you can
+use `gdb --help'.
+
+   The GDB init files are normally called `.gdbinit'.  The DJGPP port
+of GDB uses the name `gdb.ini', due to the limitations of file names
+imposed by DOS filesystems.  The Windows ports of GDB use the standard
+name, but if they find a `gdb.ini' file, they warn you about that and
+suggest to rename the file to the standard name.
+
+   ---------- Footnotes ----------
+
+   (1) On DOS/Windows systems, the home directory is the one pointed to
+by the `HOME' environment variable.
+
+
+File: gdb.info,  Node: Quitting GDB,  Next: Shell Commands,  Prev: Invoking GDB,  Up: Invocation
+
+2.2 Quitting GDB
+================
+
+`quit [EXPRESSION]'
+`q'
+     To exit GDB, use the `quit' command (abbreviated `q'), or type an
+     end-of-file character (usually `Ctrl-d').  If you do not supply
+     EXPRESSION, GDB will terminate normally; otherwise it will
+     terminate using the result of EXPRESSION as the error code.
+
+   An interrupt (often `Ctrl-c') does not exit from GDB, but rather
+terminates the action of any GDB command that is in progress and
+returns to GDB command level.  It is safe to type the interrupt
+character at any time because GDB does not allow it to take effect
+until a time when it is safe.
+
+   If you have been using GDB to control an attached process or device,
+you can release it with the `detach' command (*note Debugging an
+Already-running Process: Attach.).
+
+
+File: gdb.info,  Node: Shell Commands,  Next: Logging Output,  Prev: Quitting GDB,  Up: Invocation
+
+2.3 Shell Commands
+==================
+
+If you need to execute occasional shell commands during your debugging
+session, there is no need to leave or suspend GDB; you can just use the
+`shell' command.
+
+`shell COMMAND-STRING'
+`!COMMAND-STRING'
+     Invoke a standard shell to execute COMMAND-STRING.  Note that no
+     space is needed between `!' and COMMAND-STRING.  If it exists, the
+     environment variable `SHELL' determines which shell to run.
+     Otherwise GDB uses the default shell (`/bin/sh' on Unix systems,
+     `COMMAND.COM' on MS-DOS, etc.).
+
+   The utility `make' is often needed in development environments.  You
+do not have to use the `shell' command for this purpose in GDB:
+
+`make MAKE-ARGS'
+     Execute the `make' program with the specified arguments.  This is
+     equivalent to `shell make MAKE-ARGS'.
+
+
+File: gdb.info,  Node: Logging Output,  Prev: Shell Commands,  Up: Invocation
+
+2.4 Logging Output
+==================
+
+You may want to save the output of GDB commands to a file.  There are
+several commands to control GDB's logging.
+
+`set logging on'
+     Enable logging.
+
+`set logging off'
+     Disable logging.  
+
+`set logging file FILE'
+     Change the name of the current logfile.  The default logfile is
+     `gdb.txt'.
+
+`set logging overwrite [on|off]'
+     By default, GDB will append to the logfile.  Set `overwrite' if
+     you want `set logging on' to overwrite the logfile instead.
+
+`set logging redirect [on|off]'
+     By default, GDB output will go to both the terminal and the
+     logfile.  Set `redirect' if you want output to go only to the log
+     file.  
+
+`show logging'
+     Show the current values of the logging settings.
+
+
+File: gdb.info,  Node: Commands,  Next: Running,  Prev: Invocation,  Up: Top
+
+3 GDB Commands
+**************
+
+You can abbreviate a GDB command to the first few letters of the command
+name, if that abbreviation is unambiguous; and you can repeat certain
+GDB commands by typing just <RET>.  You can also use the <TAB> key to
+get GDB to fill out the rest of a word in a command (or to show you the
+alternatives available, if there is more than one possibility).
+
+* Menu:
+
+* Command Syntax::              How to give commands to GDB
+* Completion::                  Command completion
+* Help::                        How to ask GDB for help
+
+
+File: gdb.info,  Node: Command Syntax,  Next: Completion,  Up: Commands
+
+3.1 Command Syntax
+==================
+
+A GDB command is a single line of input.  There is no limit on how long
+it can be.  It starts with a command name, which is followed by
+arguments whose meaning depends on the command name.  For example, the
+command `step' accepts an argument which is the number of times to
+step, as in `step 5'.  You can also use the `step' command with no
+arguments.  Some commands do not allow any arguments.
+
+   GDB command names may always be truncated if that abbreviation is
+unambiguous.  Other possible command abbreviations are listed in the
+documentation for individual commands.  In some cases, even ambiguous
+abbreviations are allowed; for example, `s' is specially defined as
+equivalent to `step' even though there are other commands whose names
+start with `s'.  You can test abbreviations by using them as arguments
+to the `help' command.
+
+   A blank line as input to GDB (typing just <RET>) means to repeat the
+previous command.  Certain commands (for example, `run') will not
+repeat this way; these are commands whose unintentional repetition
+might cause trouble and which you are unlikely to want to repeat.
+User-defined commands can disable this feature; see *Note dont-repeat:
+Define.
+
+   The `list' and `x' commands, when you repeat them with <RET>,
+construct new arguments rather than repeating exactly as typed.  This
+permits easy scanning of source or memory.
+
+   GDB can also use <RET> in another way: to partition lengthy output,
+in a way similar to the common utility `more' (*note Screen Size:
+Screen Size.).  Since it is easy to press one <RET> too many in this
+situation, GDB disables command repetition after any command that
+generates this sort of display.
+
+   Any text from a `#' to the end of the line is a comment; it does
+nothing.  This is useful mainly in command files (*note Command Files:
+Command Files.).
+
+   The `Ctrl-o' binding is useful for repeating a complex sequence of
+commands.  This command accepts the current line, like <RET>, and then
+fetches the next line relative to the current line from the history for
+editing.
+
+
+File: gdb.info,  Node: Completion,  Next: Help,  Prev: Command Syntax,  Up: Commands
+
+3.2 Command Completion
+======================
+
+GDB can fill in the rest of a word in a command for you, if there is
+only one possibility; it can also show you what the valid possibilities
+are for the next word in a command, at any time.  This works for GDB
+commands, GDB subcommands, and the names of symbols in your program.
+
+   Press the <TAB> key whenever you want GDB to fill out the rest of a
+word.  If there is only one possibility, GDB fills in the word, and
+waits for you to finish the command (or press <RET> to enter it).  For
+example, if you type
+
+     (gdb) info bre <TAB>
+
+GDB fills in the rest of the word `breakpoints', since that is the only
+`info' subcommand beginning with `bre':
+
+     (gdb) info breakpoints
+
+You can either press <RET> at this point, to run the `info breakpoints'
+command, or backspace and enter something else, if `breakpoints' does
+not look like the command you expected.  (If you were sure you wanted
+`info breakpoints' in the first place, you might as well just type
+<RET> immediately after `info bre', to exploit command abbreviations
+rather than command completion).
+
+   If there is more than one possibility for the next word when you
+press <TAB>, GDB sounds a bell.  You can either supply more characters
+and try again, or just press <TAB> a second time; GDB displays all the
+possible completions for that word.  For example, you might want to set
+a breakpoint on a subroutine whose name begins with `make_', but when
+you type `b make_<TAB>' GDB just sounds the bell.  Typing <TAB> again
+displays all the function names in your program that begin with those
+characters, for example:
+
+     (gdb) b make_ <TAB>
+GDB sounds bell; press <TAB> again, to see:
+     make_a_section_from_file     make_environ
+     make_abs_section             make_function_type
+     make_blockvector             make_pointer_type
+     make_cleanup                 make_reference_type
+     make_command                 make_symbol_completion_list
+     (gdb) b make_
+
+After displaying the available possibilities, GDB copies your partial
+input (`b make_' in the example) so you can finish the command.
+
+   If you just want to see the list of alternatives in the first place,
+you can press `M-?' rather than pressing <TAB> twice.  `M-?' means
+`<META> ?'.  You can type this either by holding down a key designated
+as the <META> shift on your keyboard (if there is one) while typing
+`?', or as <ESC> followed by `?'.
+
+   Sometimes the string you need, while logically a "word", may contain
+parentheses or other characters that GDB normally excludes from its
+notion of a word.  To permit word completion to work in this situation,
+you may enclose words in `'' (single quote marks) in GDB commands.
+
+   The most likely situation where you might need this is in typing the
+name of a C++ function.  This is because C++ allows function
+overloading (multiple definitions of the same function, distinguished
+by argument type).  For example, when you want to set a breakpoint you
+may need to distinguish whether you mean the version of `name' that
+takes an `int' parameter, `name(int)', or the version that takes a
+`float' parameter, `name(float)'.  To use the word-completion
+facilities in this situation, type a single quote `'' at the beginning
+of the function name.  This alerts GDB that it may need to consider
+more information than usual when you press <TAB> or `M-?' to request
+word completion:
+
+     (gdb) b 'bubble( M-?
+     bubble(double,double)    bubble(int,int)
+     (gdb) b 'bubble(
+
+   In some cases, GDB can tell that completing a name requires using
+quotes.  When this happens, GDB inserts the quote for you (while
+completing as much as it can) if you do not type the quote in the first
+place:
+
+     (gdb) b bub <TAB>
+GDB alters your input line to the following, and rings a bell:
+     (gdb) b 'bubble(
+
+In general, GDB can tell that a quote is needed (and inserts it) if you
+have not yet started typing the argument list when you ask for
+completion on an overloaded symbol.
+
+   For more information about overloaded functions, see *Note C++
+Expressions: C Plus Plus Expressions.  You can use the command `set
+overload-resolution off' to disable overload resolution; see *Note GDB
+Features for C++: Debugging C Plus Plus.
+
+   When completing in an expression which looks up a field in a
+structure, GDB also tries(1) to limit completions to the field names
+available in the type of the left-hand-side:
+
+     (gdb) p gdb_stdout.M-?
+     magic                to_fputs             to_rewind
+     to_data              to_isatty            to_write
+     to_delete            to_put               to_write_async_safe
+     to_flush             to_read
+
+This is because the `gdb_stdout' is a variable of the type `struct
+ui_file' that is defined in GDB sources as follows:
+
+     struct ui_file
+     {
+        int *magic;
+        ui_file_flush_ftype *to_flush;
+        ui_file_write_ftype *to_write;
+        ui_file_write_async_safe_ftype *to_write_async_safe;
+        ui_file_fputs_ftype *to_fputs;
+        ui_file_read_ftype *to_read;
+        ui_file_delete_ftype *to_delete;
+        ui_file_isatty_ftype *to_isatty;
+        ui_file_rewind_ftype *to_rewind;
+        ui_file_put_ftype *to_put;
+        void *to_data;
+     }
+
+   ---------- Footnotes ----------
+
+   (1) The completer can be confused by certain kinds of invalid
+expressions.  Also, it only examines the static type of the expression,
+not the dynamic type.
+
+
+File: gdb.info,  Node: Help,  Prev: Completion,  Up: Commands
+
+3.3 Getting Help
+================
+
+You can always ask GDB itself for information on its commands, using
+the command `help'.
+
+`help'
+`h'
+     You can use `help' (abbreviated `h') with no arguments to display
+     a short list of named classes of commands:
+
+          (gdb) help
+          List of classes of commands:
+
+          aliases -- Aliases of other commands
+          breakpoints -- Making program stop at certain points
+          data -- Examining data
+          files -- Specifying and examining files
+          internals -- Maintenance commands
+          obscure -- Obscure features
+          running -- Running the program
+          stack -- Examining the stack
+          status -- Status inquiries
+          support -- Support facilities
+          tracepoints -- Tracing of program execution without
+                         stopping the program
+          user-defined -- User-defined commands
+
+          Type "help" followed by a class name for a list of
+          commands in that class.
+          Type "help" followed by command name for full
+          documentation.
+          Command name abbreviations are allowed if unambiguous.
+          (gdb)
+
+`help CLASS'
+     Using one of the general help classes as an argument, you can get a
+     list of the individual commands in that class.  For example, here
+     is the help display for the class `status':
+
+          (gdb) help status
+          Status inquiries.
+
+          List of commands:
+
+          info -- Generic command for showing things
+                  about the program being debugged
+          show -- Generic command for showing things
+                  about the debugger
+
+          Type "help" followed by command name for full
+          documentation.
+          Command name abbreviations are allowed if unambiguous.
+          (gdb)
+
+`help COMMAND'
+     With a command name as `help' argument, GDB displays a short
+     paragraph on how to use that command.
+
+`apropos ARGS'
+     The `apropos' command searches through all of the GDB commands,
+     and their documentation, for the regular expression specified in
+     ARGS.  It prints out all matches found.  For example:
+
+          apropos alias
+
+     results in:
+
+          alias -- Define a new command that is an alias of an existing command
+          aliases -- Aliases of other commands
+          d -- Delete some breakpoints or auto-display expressions
+          del -- Delete some breakpoints or auto-display expressions
+          delete -- Delete some breakpoints or auto-display expressions
+
+`complete ARGS'
+     The `complete ARGS' command lists all the possible completions for
+     the beginning of a command.  Use ARGS to specify the beginning of
+     the command you want completed.  For example:
+
+          complete i
+
+     results in:
+
+          if
+          ignore
+          info
+          inspect
+
+     This is intended for use by GNU Emacs.
+
+   In addition to `help', you can use the GDB commands `info' and
+`show' to inquire about the state of your program, or the state of GDB
+itself.  Each command supports many topics of inquiry; this manual
+introduces each of them in the appropriate context.  The listings under
+`info' and under `show' in the Command, Variable, and Function Index
+point to all the sub-commands.  *Note Command and Variable Index::.
+
+`info'
+     This command (abbreviated `i') is for describing the state of your
+     program.  For example, you can show the arguments passed to a
+     function with `info args', list the registers currently in use
+     with `info registers', or list the breakpoints you have set with
+     `info breakpoints'.  You can get a complete list of the `info'
+     sub-commands with `help info'.
+
+`set'
+     You can assign the result of an expression to an environment
+     variable with `set'.  For example, you can set the GDB prompt to a
+     $-sign with `set prompt $'.
+
+`show'
+     In contrast to `info', `show' is for describing the state of GDB
+     itself.  You can change most of the things you can `show', by
+     using the related command `set'; for example, you can control what
+     number system is used for displays with `set radix', or simply
+     inquire which is currently in use with `show radix'.
+
+     To display all the settable parameters and their current values,
+     you can use `show' with no arguments; you may also use `info set'.
+     Both commands produce the same display.
+
+   Here are three miscellaneous `show' subcommands, all of which are
+exceptional in lacking corresponding `set' commands:
+
+`show version'
+     Show what version of GDB is running.  You should include this
+     information in GDB bug-reports.  If multiple versions of GDB are
+     in use at your site, you may need to determine which version of
+     GDB you are running; as GDB evolves, new commands are introduced,
+     and old ones may wither away.  Also, many system vendors ship
+     variant versions of GDB, and there are variant versions of GDB in
+     GNU/Linux distributions as well.  The version number is the same
+     as the one announced when you start GDB.
+
+`show copying'
+`info copying'
+     Display information about permission for copying GDB.
+
+`show warranty'
+`info warranty'
+     Display the GNU "NO WARRANTY" statement, or a warranty, if your
+     version of GDB comes with one.
+
+
+
+File: gdb.info,  Node: Running,  Next: Stopping,  Prev: Commands,  Up: Top
+
+4 Running Programs Under GDB
+****************************
+
+When you run a program under GDB, you must first generate debugging
+information when you compile it.
+
+   You may start GDB with its arguments, if any, in an environment of
+your choice.  If you are doing native debugging, you may redirect your
+program's input and output, debug an already running process, or kill a
+child process.
+
+* Menu:
+
+* Compilation::                 Compiling for debugging
+* Starting::                    Starting your program
+* Arguments::                   Your program's arguments
+* Environment::                 Your program's environment
+
+* Working Directory::           Your program's working directory
+* Input/Output::                Your program's input and output
+* Attach::                      Debugging an already-running process
+* Kill Process::                Killing the child process
+
+* Inferiors and Programs::      Debugging multiple inferiors and programs
+* Threads::                     Debugging programs with multiple threads
+* Forks::                       Debugging forks
+* Checkpoint/Restart::          Setting a _bookmark_ to return to later
+
+
+File: gdb.info,  Node: Compilation,  Next: Starting,  Up: Running
+
+4.1 Compiling for Debugging
+===========================
+
+In order to debug a program effectively, you need to generate debugging
+information when you compile it.  This debugging information is stored
+in the object file; it describes the data type of each variable or
+function and the correspondence between source line numbers and
+addresses in the executable code.
+
+   To request debugging information, specify the `-g' option when you
+run the compiler.
+
+   Programs that are to be shipped to your customers are compiled with
+optimizations, using the `-O' compiler option.  However, some compilers
+are unable to handle the `-g' and `-O' options together.  Using those
+compilers, you cannot generate optimized executables containing
+debugging information.
+
+   GCC, the GNU C/C++ compiler, supports `-g' with or without `-O',
+making it possible to debug optimized code.  We recommend that you
+_always_ use `-g' whenever you compile a program.  You may think your
+program is correct, but there is no sense in pushing your luck.  For
+more information, see *Note Optimized Code::.
+
+   Older versions of the GNU C compiler permitted a variant option
+`-gg' for debugging information.  GDB no longer supports this format;
+if your GNU C compiler has this option, do not use it.
+
+   GDB knows about preprocessor macros and can show you their expansion
+(*note Macros::).  Most compilers do not include information about
+preprocessor macros in the debugging information if you specify the
+`-g' flag alone.  Version 3.1 and later of GCC, the GNU C compiler,
+provides macro information if you are using the DWARF debugging format,
+and specify the option `-g3'.
+
+   *Note Options for Debugging Your Program or GCC: (gcc.info)Debugging
+Options, for more information on GCC options affecting debug
+information.
+
+   You will have the best debugging experience if you use the latest
+version of the DWARF debugging format that your compiler supports.
+DWARF is currently the most expressive and best supported debugging
+format in GDB.
+
+
+File: gdb.info,  Node: Starting,  Next: Arguments,  Prev: Compilation,  Up: Running
+
+4.2 Starting your Program
+=========================
+
+`run'
+`r'
+     Use the `run' command to start your program under GDB.  You must
+     first specify the program name (except on VxWorks) with an
+     argument to GDB (*note Getting In and Out of GDB: Invocation.), or
+     by using the `file' or `exec-file' command (*note Commands to
+     Specify Files: Files.).
+
+
+   If you are running your program in an execution environment that
+supports processes, `run' creates an inferior process and makes that
+process run your program.  In some environments without processes,
+`run' jumps to the start of your program.  Other targets, like
+`remote', are always running.  If you get an error message like this
+one:
+
+     The "remote" target does not support "run".
+     Try "help target" or "continue".
+
+then use `continue' to run your program.  You may need `load' first
+(*note load::).
+
+   The execution of a program is affected by certain information it
+receives from its superior.  GDB provides ways to specify this
+information, which you must do _before_ starting your program.  (You
+can change it after starting your program, but such changes only affect
+your program the next time you start it.)  This information may be
+divided into four categories:
+
+The _arguments._
+     Specify the arguments to give your program as the arguments of the
+     `run' command.  If a shell is available on your target, the shell
+     is used to pass the arguments, so that you may use normal
+     conventions (such as wildcard expansion or variable substitution)
+     in describing the arguments.  In Unix systems, you can control
+     which shell is used with the `SHELL' environment variable.  *Note
+     Your Program's Arguments: Arguments.
+
+The _environment._
+     Your program normally inherits its environment from GDB, but you
+     can use the GDB commands `set environment' and `unset environment'
+     to change parts of the environment that affect your program.
+     *Note Your Program's Environment: Environment.
+
+The _working directory._
+     Your program inherits its working directory from GDB.  You can set
+     the GDB working directory with the `cd' command in GDB.  *Note
+     Your Program's Working Directory: Working Directory.
+
+The _standard input and output._
+     Your program normally uses the same device for standard input and
+     standard output as GDB is using.  You can redirect input and output
+     in the `run' command line, or you can use the `tty' command to set
+     a different device for your program.  *Note Your Program's Input
+     and Output: Input/Output.
+
+     _Warning:_ While input and output redirection work, you cannot use
+     pipes to pass the output of the program you are debugging to
+     another program; if you attempt this, GDB is likely to wind up
+     debugging the wrong program.
+
+   When you issue the `run' command, your program begins to execute
+immediately.  *Note Stopping and Continuing: Stopping, for discussion
+of how to arrange for your program to stop.  Once your program has
+stopped, you may call functions in your program, using the `print' or
+`call' commands.  *Note Examining Data: Data.
+
+   If the modification time of your symbol file has changed since the
+last time GDB read its symbols, GDB discards its symbol table, and
+reads it again.  When it does this, GDB tries to retain your current
+breakpoints.
+
+`start'
+     The name of the main procedure can vary from language to language.
+     With C or C++, the main procedure name is always `main', but other
+     languages such as Ada do not require a specific name for their
+     main procedure.  The debugger provides a convenient way to start
+     the execution of the program and to stop at the beginning of the
+     main procedure, depending on the language used.
+
+     The `start' command does the equivalent of setting a temporary
+     breakpoint at the beginning of the main procedure and then invoking
+     the `run' command.
+
+     Some programs contain an "elaboration" phase where some startup
+     code is executed before the main procedure is called.  This
+     depends on the languages used to write your program.  In C++, for
+     instance, constructors for static and global objects are executed
+     before `main' is called.  It is therefore possible that the
+     debugger stops before reaching the main procedure.  However, the
+     temporary breakpoint will remain to halt execution.
+
+     Specify the arguments to give to your program as arguments to the
+     `start' command.  These arguments will be given verbatim to the
+     underlying `run' command.  Note that the same arguments will be
+     reused if no argument is provided during subsequent calls to
+     `start' or `run'.
+
+     It is sometimes necessary to debug the program during elaboration.
+     In these cases, using the `start' command would stop the
+     execution of your program too late, as the program would have
+     already completed the elaboration phase.  Under these
+     circumstances, insert breakpoints in your elaboration code before
+     running your program.
+
+`set exec-wrapper WRAPPER'
+`show exec-wrapper'
+`unset exec-wrapper'
+     When `exec-wrapper' is set, the specified wrapper is used to
+     launch programs for debugging.  GDB starts your program with a
+     shell command of the form `exec WRAPPER PROGRAM'.  Quoting is
+     added to PROGRAM and its arguments, but not to WRAPPER, so you
+     should add quotes if appropriate for your shell.  The wrapper runs
+     until it executes your program, and then GDB takes control.
+
+     You can use any program that eventually calls `execve' with its
+     arguments as a wrapper.  Several standard Unix utilities do this,
+     e.g. `env' and `nohup'.  Any Unix shell script ending with `exec
+     "$@"' will also work.
+
+     For example, you can use `env' to pass an environment variable to
+     the debugged program, without setting the variable in your shell's
+     environment:
+
+          (gdb) set exec-wrapper env 'LD_PRELOAD=libtest.so'
+          (gdb) run
+
+     This command is available when debugging locally on most targets,
+     excluding DJGPP, Cygwin, MS Windows, and QNX Neutrino.
+
+`set disable-randomization'
+`set disable-randomization on'
+     This option (enabled by default in GDB) will turn off the native
+     randomization of the virtual address space of the started program.
+     This option is useful for multiple debugging sessions to make the
+     execution better reproducible and memory addresses reusable across
+     debugging sessions.
+
+     This feature is implemented only on certain targets, including
+     GNU/Linux.  On GNU/Linux you can get the same behavior using
+
+          (gdb) set exec-wrapper setarch `uname -m` -R
+
+`set disable-randomization off'
+     Leave the behavior of the started executable unchanged.  Some bugs
+     rear their ugly heads only when the program is loaded at certain
+     addresses.  If your bug disappears when you run the program under
+     GDB, that might be because GDB by default disables the address
+     randomization on platforms, such as GNU/Linux, which do that for
+     stand-alone programs.  Use `set disable-randomization off' to try
+     to reproduce such elusive bugs.
+
+     On targets where it is available, virtual address space
+     randomization protects the programs against certain kinds of
+     security attacks.  In these cases the attacker needs to know the
+     exact location of a concrete executable code.  Randomizing its
+     location makes it impossible to inject jumps misusing a code at
+     its expected addresses.
+
+     Prelinking shared libraries provides a startup performance
+     advantage but it makes addresses in these libraries predictable
+     for privileged processes by having just unprivileged access at the
+     target system.  Reading the shared library binary gives enough
+     information for assembling the malicious code misusing it.  Still
+     even a prelinked shared library can get loaded at a new random
+     address just requiring the regular relocation process during the
+     startup.  Shared libraries not already prelinked are always loaded
+     at a randomly chosen address.
+
+     Position independent executables (PIE) contain position
+     independent code similar to the shared libraries and therefore
+     such executables get loaded at a randomly chosen address upon
+     startup.  PIE executables always load even already prelinked
+     shared libraries at a random address.  You can build such
+     executable using `gcc -fPIE -pie'.
+
+     Heap (malloc storage), stack and custom mmap areas are always
+     placed randomly (as long as the randomization is enabled).
+
+`show disable-randomization'
+     Show the current setting of the explicit disable of the native
+     randomization of the virtual address space of the started program.
+
+
+
+File: gdb.info,  Node: Arguments,  Next: Environment,  Prev: Starting,  Up: Running
+
+4.3 Your Program's Arguments
+============================
+
+The arguments to your program can be specified by the arguments of the
+`run' command.  They are passed to a shell, which expands wildcard
+characters and performs redirection of I/O, and thence to your program.
+Your `SHELL' environment variable (if it exists) specifies what shell
+GDB uses.  If you do not define `SHELL', GDB uses the default shell
+(`/bin/sh' on Unix).
+
+   On non-Unix systems, the program is usually invoked directly by GDB,
+which emulates I/O redirection via the appropriate system calls, and
+the wildcard characters are expanded by the startup code of the
+program, not by the shell.
+
+   `run' with no arguments uses the same arguments used by the previous
+`run', or those set by the `set args' command.
+
+`set args'
+     Specify the arguments to be used the next time your program is
+     run.  If `set args' has no arguments, `run' executes your program
+     with no arguments.  Once you have run your program with arguments,
+     using `set args' before the next `run' is the only way to run it
+     again without arguments.
+
+`show args'
+     Show the arguments to give your program when it is started.
+
+
+File: gdb.info,  Node: Environment,  Next: Working Directory,  Prev: Arguments,  Up: Running
+
+4.4 Your Program's Environment
+==============================
+
+The "environment" consists of a set of environment variables and their
+values.  Environment variables conventionally record such things as
+your user name, your home directory, your terminal type, and your search
+path for programs to run.  Usually you set up environment variables with
+the shell and they are inherited by all the other programs you run.
+When debugging, it can be useful to try running your program with a
+modified environment without having to start GDB over again.
+
+`path DIRECTORY'
+     Add DIRECTORY to the front of the `PATH' environment variable (the
+     search path for executables) that will be passed to your program.
+     The value of `PATH' used by GDB does not change.  You may specify
+     several directory names, separated by whitespace or by a
+     system-dependent separator character (`:' on Unix, `;' on MS-DOS
+     and MS-Windows).  If DIRECTORY is already in the path, it is moved
+     to the front, so it is searched sooner.
+
+     You can use the string `$cwd' to refer to whatever is the current
+     working directory at the time GDB searches the path.  If you use
+     `.' instead, it refers to the directory where you executed the
+     `path' command.  GDB replaces `.' in the DIRECTORY argument (with
+     the current path) before adding DIRECTORY to the search path.
+
+`show paths'
+     Display the list of search paths for executables (the `PATH'
+     environment variable).
+
+`show environment [VARNAME]'
+     Print the value of environment variable VARNAME to be given to
+     your program when it starts.  If you do not supply VARNAME, print
+     the names and values of all environment variables to be given to
+     your program.  You can abbreviate `environment' as `env'.
+
+`set environment VARNAME [=VALUE]'
+     Set environment variable VARNAME to VALUE.  The value changes for
+     your program only, not for GDB itself.  VALUE may be any string;
+     the values of environment variables are just strings, and any
+     interpretation is supplied by your program itself.  The VALUE
+     parameter is optional; if it is eliminated, the variable is set to
+     a null value.
+
+     For example, this command:
+
+          set env USER = foo
+
+     tells the debugged program, when subsequently run, that its user
+     is named `foo'.  (The spaces around `=' are used for clarity here;
+     they are not actually required.)
+
+`unset environment VARNAME'
+     Remove variable VARNAME from the environment to be passed to your
+     program.  This is different from `set env VARNAME ='; `unset
+     environment' removes the variable from the environment, rather
+     than assigning it an empty value.
+
+   _Warning:_ On Unix systems, GDB runs your program using the shell
+indicated by your `SHELL' environment variable if it exists (or
+`/bin/sh' if not).  If your `SHELL' variable names a shell that runs an
+initialization file--such as `.cshrc' for C-shell, or `.bashrc' for
+BASH--any variables you set in that file affect your program.  You may
+wish to move setting of environment variables to files that are only
+run when you sign on, such as `.login' or `.profile'.
+
+
+File: gdb.info,  Node: Working Directory,  Next: Input/Output,  Prev: Environment,  Up: Running
+
+4.5 Your Program's Working Directory
+====================================
+
+Each time you start your program with `run', it inherits its working
+directory from the current working directory of GDB.  The GDB working
+directory is initially whatever it inherited from its parent process
+(typically the shell), but you can specify a new working directory in
+GDB with the `cd' command.
+
+   The GDB working directory also serves as a default for the commands
+that specify files for GDB to operate on.  *Note Commands to Specify
+Files: Files.
+
+`cd DIRECTORY'
+     Set the GDB working directory to DIRECTORY.
+
+`pwd'
+     Print the GDB working directory.
+
+   It is generally impossible to find the current working directory of
+the process being debugged (since a program can change its directory
+during its run).  If you work on a system where GDB is configured with
+the `/proc' support, you can use the `info proc' command (*note SVR4
+Process Information::) to find out the current working directory of the
+debuggee.
+
+
+File: gdb.info,  Node: Input/Output,  Next: Attach,  Prev: Working Directory,  Up: Running
+
+4.6 Your Program's Input and Output
+===================================
+
+By default, the program you run under GDB does input and output to the
+same terminal that GDB uses.  GDB switches the terminal to its own
+terminal modes to interact with you, but it records the terminal modes
+your program was using and switches back to them when you continue
+running your program.
+
+`info terminal'
+     Displays information recorded by GDB about the terminal modes your
+     program is using.
+
+   You can redirect your program's input and/or output using shell
+redirection with the `run' command.  For example,
+
+     run > outfile
+
+starts your program, diverting its output to the file `outfile'.
+
+   Another way to specify where your program should do input and output
+is with the `tty' command.  This command accepts a file name as
+argument, and causes this file to be the default for future `run'
+commands.  It also resets the controlling terminal for the child
+process, for future `run' commands.  For example,
+
+     tty /dev/ttyb
+
+directs that processes started with subsequent `run' commands default
+to do input and output on the terminal `/dev/ttyb' and have that as
+their controlling terminal.
+
+   An explicit redirection in `run' overrides the `tty' command's
+effect on the input/output device, but not its effect on the controlling
+terminal.
+
+   When you use the `tty' command or redirect input in the `run'
+command, only the input _for your program_ is affected.  The input for
+GDB still comes from your terminal.  `tty' is an alias for `set
+inferior-tty'.
+
+   You can use the `show inferior-tty' command to tell GDB to display
+the name of the terminal that will be used for future runs of your
+program.
+
+`set inferior-tty /dev/ttyb'
+     Set the tty for the program being debugged to /dev/ttyb.
+
+`show inferior-tty'
+     Show the current tty for the program being debugged.
+
+
+File: gdb.info,  Node: Attach,  Next: Kill Process,  Prev: Input/Output,  Up: Running
+
+4.7 Debugging an Already-running Process
+========================================
+
+`attach PROCESS-ID'
+     This command attaches to a running process--one that was started
+     outside GDB.  (`info files' shows your active targets.)  The
+     command takes as argument a process ID.  The usual way to find out
+     the PROCESS-ID of a Unix process is with the `ps' utility, or with
+     the `jobs -l' shell command.
+
+     `attach' does not repeat if you press <RET> a second time after
+     executing the command.
+
+   To use `attach', your program must be running in an environment
+which supports processes; for example, `attach' does not work for
+programs on bare-board targets that lack an operating system.  You must
+also have permission to send the process a signal.
+
+   When you use `attach', the debugger finds the program running in the
+process first by looking in the current working directory, then (if the
+program is not found) by using the source file search path (*note
+Specifying Source Directories: Source Path.).  You can also use the
+`file' command to load the program.  *Note Commands to Specify Files:
+Files.
+
+   The first thing GDB does after arranging to debug the specified
+process is to stop it.  You can examine and modify an attached process
+with all the GDB commands that are ordinarily available when you start
+processes with `run'.  You can insert breakpoints; you can step and
+continue; you can modify storage.  If you would rather the process
+continue running, you may use the `continue' command after attaching
+GDB to the process.
+
+`detach'
+     When you have finished debugging the attached process, you can use
+     the `detach' command to release it from GDB control.  Detaching
+     the process continues its execution.  After the `detach' command,
+     that process and GDB become completely independent once more, and
+     you are ready to `attach' another process or start one with `run'.
+     `detach' does not repeat if you press <RET> again after executing
+     the command.
+
+   If you exit GDB while you have an attached process, you detach that
+process.  If you use the `run' command, you kill that process.  By
+default, GDB asks for confirmation if you try to do either of these
+things; you can control whether or not you need to confirm by using the
+`set confirm' command (*note Optional Warnings and Messages:
+Messages/Warnings.).
+
+
+File: gdb.info,  Node: Kill Process,  Next: Inferiors and Programs,  Prev: Attach,  Up: Running
+
+4.8 Killing the Child Process
+=============================
+
+`kill'
+     Kill the child process in which your program is running under GDB.
+
+   This command is useful if you wish to debug a core dump instead of a
+running process.  GDB ignores any core dump file while your program is
+running.
+
+   On some operating systems, a program cannot be executed outside GDB
+while you have breakpoints set on it inside GDB.  You can use the
+`kill' command in this situation to permit running your program outside
+the debugger.
+
+   The `kill' command is also useful if you wish to recompile and
+relink your program, since on many systems it is impossible to modify an
+executable file while it is running in a process.  In this case, when
+you next type `run', GDB notices that the file has changed, and reads
+the symbol table again (while trying to preserve your current
+breakpoint settings).
+
+
+File: gdb.info,  Node: Inferiors and Programs,  Next: Threads,  Prev: Kill Process,  Up: Running
+
+4.9 Debugging Multiple Inferiors and Programs
+=============================================
+
+GDB lets you run and debug multiple programs in a single session.  In
+addition, GDB on some systems may let you run several programs
+simultaneously (otherwise you have to exit from one before starting
+another).  In the most general case, you can have multiple threads of
+execution in each of multiple processes, launched from multiple
+executables.
+
+   GDB represents the state of each program execution with an object
+called an "inferior".  An inferior typically corresponds to a process,
+but is more general and applies also to targets that do not have
+processes.  Inferiors may be created before a process runs, and may be
+retained after a process exits.  Inferiors have unique identifiers that
+are different from process ids.  Usually each inferior will also have
+its own distinct address space, although some embedded targets may have
+several inferiors running in different parts of a single address space.
+Each inferior may in turn have multiple threads running in it.
+
+   To find out what inferiors exist at any moment, use `info inferiors':
+
+`info inferiors'
+     Print a list of all inferiors currently being managed by GDB.
+
+     GDB displays for each inferior (in this order):
+
+       1. the inferior number assigned by GDB
+
+       2. the target system's inferior identifier
+
+       3. the name of the executable the inferior is running.
+
+
+     An asterisk `*' preceding the GDB inferior number indicates the
+     current inferior.
+
+     For example,
+
+     (gdb) info inferiors
+       Num  Description       Executable
+       2    process 2307      hello
+     * 1    process 3401      goodbye
+
+   To switch focus between inferiors, use the `inferior' command:
+
+`inferior INFNO'
+     Make inferior number INFNO the current inferior.  The argument
+     INFNO is the inferior number assigned by GDB, as shown in the
+     first field of the `info inferiors' display.
+
+   You can get multiple executables into a debugging session via the
+`add-inferior' and `clone-inferior' commands.  On some systems GDB can
+add inferiors to the debug session automatically by following calls to
+`fork' and `exec'.  To remove inferiors from the debugging session use
+the `remove-inferiors' command.
+
+`add-inferior [ -copies N ] [ -exec EXECUTABLE ]'
+     Adds N inferiors to be run using EXECUTABLE as the executable.  N
+     defaults to 1.  If no executable is specified, the inferiors
+     begins empty, with no program.  You can still assign or change the
+     program assigned to the inferior at any time by using the `file'
+     command with the executable name as its argument.
+
+`clone-inferior [ -copies N ] [ INFNO ]'
+     Adds N inferiors ready to execute the same program as inferior
+     INFNO.  N defaults to 1.  INFNO defaults to the number of the
+     current inferior.  This is a convenient command when you want to
+     run another instance of the inferior you are debugging.
+
+          (gdb) info inferiors
+            Num  Description       Executable
+          * 1    process 29964     helloworld
+          (gdb) clone-inferior
+          Added inferior 2.
+          1 inferiors added.
+          (gdb) info inferiors
+            Num  Description       Executable
+            2    <null>            helloworld
+          * 1    process 29964     helloworld
+
+     You can now simply switch focus to inferior 2 and run it.
+
+`remove-inferiors INFNO...'
+     Removes the inferior or inferiors INFNO....  It is not possible to
+     remove an inferior that is running with this command.  For those,
+     use the `kill' or `detach' command first.
+
+
+   To quit debugging one of the running inferiors that is not the
+current inferior, you can either detach from it by using the
+`detach inferior' command (allowing it to run independently), or kill it
+using the `kill inferiors' command:
+
+`detach inferior INFNO...'
+     Detach from the inferior or inferiors identified by GDB inferior
+     number(s) INFNO....  Note that the inferior's entry still stays on
+     the list of inferiors shown by `info inferiors', but its
+     Description will show `<null>'.
+
+`kill inferiors INFNO...'
+     Kill the inferior or inferiors identified by GDB inferior
+     number(s) INFNO....  Note that the inferior's entry still stays on
+     the list of inferiors shown by `info inferiors', but its
+     Description will show `<null>'.
+
+   After the successful completion of a command such as `detach',
+`detach inferiors', `kill' or `kill inferiors', or after a normal
+process exit, the inferior is still valid and listed with `info
+inferiors', ready to be restarted.
+
+   To be notified when inferiors are started or exit under GDB's
+control use `set print inferior-events':
+
+`set print inferior-events'
+`set print inferior-events on'
+`set print inferior-events off'
+     The `set print inferior-events' command allows you to enable or
+     disable printing of messages when GDB notices that new inferiors
+     have started or that inferiors have exited or have been detached.
+     By default, these messages will not be printed.
+
+`show print inferior-events'
+     Show whether messages will be printed when GDB detects that
+     inferiors have started, exited or have been detached.
+
+   Many commands will work the same with multiple programs as with a
+single program: e.g., `print myglobal' will simply display the value of
+`myglobal' in the current inferior.
+
+   Occasionaly, when debugging GDB itself, it may be useful to get more
+info about the relationship of inferiors, programs, address spaces in a
+debug session.  You can do that with the `maint info program-spaces'
+command.
+
+`maint info program-spaces'
+     Print a list of all program spaces currently being managed by GDB.
+
+     GDB displays for each program space (in this order):
+
+       1. the program space number assigned by GDB
+
+       2. the name of the executable loaded into the program space,
+          with e.g., the `file' command.
+
+
+     An asterisk `*' preceding the GDB program space number indicates
+     the current program space.
+
+     In addition, below each program space line, GDB prints extra
+     information that isn't suitable to display in tabular form.  For
+     example, the list of inferiors bound to the program space.
+
+          (gdb) maint info program-spaces
+            Id   Executable
+            2    goodbye
+                  Bound inferiors: ID 1 (process 21561)
+          * 1    hello
+
+     Here we can see that no inferior is running the program `hello',
+     while `process 21561' is running the program `goodbye'.  On some
+     targets, it is possible that multiple inferiors are bound to the
+     same program space.  The most common example is that of debugging
+     both the parent and child processes of a `vfork' call.  For
+     example,
+
+          (gdb) maint info program-spaces
+            Id   Executable
+          * 1    vfork-test
+                  Bound inferiors: ID 2 (process 18050), ID 1 (process 18045)
+
+     Here, both inferior 2 and inferior 1 are running in the same
+     program space as a result of inferior 1 having executed a `vfork'
+     call.
+
+
+File: gdb.info,  Node: Threads,  Next: Forks,  Prev: Inferiors and Programs,  Up: Running
+
+4.10 Debugging Programs with Multiple Threads
+=============================================
+
+In some operating systems, such as HP-UX and Solaris, a single program
+may have more than one "thread" of execution.  The precise semantics of
+threads differ from one operating system to another, but in general the
+threads of a single program are akin to multiple processes--except that
+they share one address space (that is, they can all examine and modify
+the same variables).  On the other hand, each thread has its own
+registers and execution stack, and perhaps private memory.
+
+   GDB provides these facilities for debugging multi-thread programs:
+
+   * automatic notification of new threads
+
+   * `thread THREADNO', a command to switch among threads
+
+   * `info threads', a command to inquire about existing threads
+
+   * `thread apply [THREADNO] [ALL] ARGS', a command to apply a command
+     to a list of threads
+
+   * thread-specific breakpoints
+
+   * `set print thread-events', which controls printing of messages on
+     thread start and exit.
+
+   * `set libthread-db-search-path PATH', which lets the user specify
+     which `libthread_db' to use if the default choice isn't compatible
+     with the program.
+
+     _Warning:_ These facilities are not yet available on every GDB
+     configuration where the operating system supports threads.  If
+     your GDB does not support threads, these commands have no effect.
+     For example, a system without thread support shows no output from
+     `info threads', and always rejects the `thread' command, like this:
+
+          (gdb) info threads
+          (gdb) thread 1
+          Thread ID 1 not known.  Use the "info threads" command to
+          see the IDs of currently known threads.
+
+   The GDB thread debugging facility allows you to observe all threads
+while your program runs--but whenever GDB takes control, one thread in
+particular is always the focus of debugging.  This thread is called the
+"current thread".  Debugging commands show program information from the
+perspective of the current thread.
+
+   Whenever GDB detects a new thread in your program, it displays the
+target system's identification for the thread with a message in the
+form `[New SYSTAG]'.  SYSTAG is a thread identifier whose form varies
+depending on the particular system.  For example, on GNU/Linux, you
+might see
+
+     [New Thread 0x41e02940 (LWP 25582)]
+
+when GDB notices a new thread.  In contrast, on an SGI system, the
+SYSTAG is simply something like `process 368', with no further
+qualifier.
+
+   For debugging purposes, GDB associates its own thread number--always
+a single integer--with each thread in your program.
+
+`info threads [ID...]'
+     Display a summary of all threads currently in your program.
+     Optional argument ID... is one or more thread ids separated by
+     spaces, and means to print information only about the specified
+     thread or threads.  GDB displays for each thread (in this order):
+
+       1. the thread number assigned by GDB
+
+       2. the target system's thread identifier (SYSTAG)
+
+       3. the thread's name, if one is known.  A thread can either be
+          named by the user (see `thread name', below), or, in some
+          cases, by the program itself.
+
+       4. the current stack frame summary for that thread
+
+     An asterisk `*' to the left of the GDB thread number indicates the
+     current thread.
+
+     For example,
+
+     (gdb) info threads
+       Id   Target Id         Frame
+       3    process 35 thread 27  0x34e5 in sigpause ()
+       2    process 35 thread 23  0x34e5 in sigpause ()
+     * 1    process 35 thread 13  main (argc=1, argv=0x7ffffff8)
+         at threadtest.c:68
+
+   On Solaris, you can display more information about user threads with
+a Solaris-specific command:
+
+`maint info sol-threads'
+     Display info on Solaris user threads.
+
+`thread THREADNO'
+     Make thread number THREADNO the current thread.  The command
+     argument THREADNO is the internal GDB thread number, as shown in
+     the first field of the `info threads' display.  GDB responds by
+     displaying the system identifier of the thread you selected, and
+     its current stack frame summary:
+
+          (gdb) thread 2
+          [Switching to thread 2 (Thread 0xb7fdab70 (LWP 12747))]
+          #0  some_function (ignore=0x0) at example.c:8
+          8	    printf ("hello\n");
+
+     As with the `[New ...]' message, the form of the text after
+     `Switching to' depends on your system's conventions for identifying
+     threads.
+
+     The debugger convenience variable `$_thread' contains the number
+     of the current thread.  You may find this useful in writing
+     breakpoint conditional expressions, command scripts, and so forth.
+     See *Note Convenience Variables: Convenience Vars, for general
+     information on convenience variables.
+
+`thread apply [THREADNO | all] COMMAND'
+     The `thread apply' command allows you to apply the named COMMAND
+     to one or more threads.  Specify the numbers of the threads that
+     you want affected with the command argument THREADNO.  It can be a
+     single thread number, one of the numbers shown in the first field
+     of the `info threads' display; or it could be a range of thread
+     numbers, as in `2-4'.  To apply a command to all threads, type
+     `thread apply all COMMAND'.
+
+`thread name [NAME]'
+     This command assigns a name to the current thread.  If no argument
+     is given, any existing user-specified name is removed.  The thread
+     name appears in the `info threads' display.
+
+     On some systems, such as GNU/Linux, GDB is able to determine the
+     name of the thread as given by the OS.  On these systems, a name
+     specified with `thread name' will override the system-give name,
+     and removing the user-specified name will cause GDB to once again
+     display the system-specified name.
+
+`thread find [REGEXP]'
+     Search for and display thread ids whose name or SYSTAG matches the
+     supplied regular expression.
+
+     As well as being the complement to the `thread name' command, this
+     command also allows you to identify a thread by its target SYSTAG.
+     For instance, on GNU/Linux, the target SYSTAG is the LWP id.
+
+          (GDB) thread find 26688
+          Thread 4 has target id 'Thread 0x41e02940 (LWP 26688)'
+          (GDB) info thread 4
+            Id   Target Id         Frame
+            4    Thread 0x41e02940 (LWP 26688) 0x00000031ca6cd372 in select ()
+
+`set print thread-events'
+`set print thread-events on'
+`set print thread-events off'
+     The `set print thread-events' command allows you to enable or
+     disable printing of messages when GDB notices that new threads have
+     started or that threads have exited.  By default, these messages
+     will be printed if detection of these events is supported by the
+     target.  Note that these messages cannot be disabled on all
+     targets.
+
+`show print thread-events'
+     Show whether messages will be printed when GDB detects that threads
+     have started and exited.
+
+   *Note Stopping and Starting Multi-thread Programs: Thread Stops, for
+more information about how GDB behaves when you stop and start programs
+with multiple threads.
+
+   *Note Setting Watchpoints: Set Watchpoints, for information about
+watchpoints in programs with multiple threads.
+
+`set libthread-db-search-path [PATH]'
+     If this variable is set, PATH is a colon-separated list of
+     directories GDB will use to search for `libthread_db'.  If you
+     omit PATH, `libthread-db-search-path' will be reset to its default
+     value (`$sdir:$pdir' on GNU/Linux and Solaris systems).
+     Internally, the default value comes from the
+     `LIBTHREAD_DB_SEARCH_PATH' macro.
+
+     On GNU/Linux and Solaris systems, GDB uses a "helper"
+     `libthread_db' library to obtain information about threads in the
+     inferior process.  GDB will use `libthread-db-search-path' to find
+     `libthread_db'.  GDB also consults first if inferior specific
+     thread debugging library loading is enabled by `set auto-load
+     libthread-db' (*note libthread_db.so.1 file::).
+
+     A special entry `$sdir' for `libthread-db-search-path' refers to
+     the default system directories that are normally searched for
+     loading shared libraries.  The `$sdir' entry is the only kind not
+     needing to be enabled by `set auto-load libthread-db' (*note
+     libthread_db.so.1 file::).
+
+     A special entry `$pdir' for `libthread-db-search-path' refers to
+     the directory from which `libpthread' was loaded in the inferior
+     process.
+
+     For any `libthread_db' library GDB finds in above directories, GDB
+     attempts to initialize it with the current inferior process.  If
+     this initialization fails (which could happen because of a version
+     mismatch between `libthread_db' and `libpthread'), GDB will unload
+     `libthread_db', and continue with the next directory.  If none of
+     `libthread_db' libraries initialize successfully, GDB will issue a
+     warning and thread debugging will be disabled.
+
+     Setting `libthread-db-search-path' is currently implemented only
+     on some platforms.
+
+`show libthread-db-search-path'
+     Display current libthread_db search path.
+
+`set debug libthread-db'
+`show debug libthread-db'
+     Turns on or off display of `libthread_db'-related events.  Use `1'
+     to enable, `0' to disable.
+
+
+File: gdb.info,  Node: Forks,  Next: Checkpoint/Restart,  Prev: Threads,  Up: Running
+
+4.11 Debugging Forks
+====================
+
+On most systems, GDB has no special support for debugging programs
+which create additional processes using the `fork' function.  When a
+program forks, GDB will continue to debug the parent process and the
+child process will run unimpeded.  If you have set a breakpoint in any
+code which the child then executes, the child will get a `SIGTRAP'
+signal which (unless it catches the signal) will cause it to terminate.
+
+   However, if you want to debug the child process there is a workaround
+which isn't too painful.  Put a call to `sleep' in the code which the
+child process executes after the fork.  It may be useful to sleep only
+if a certain environment variable is set, or a certain file exists, so
+that the delay need not occur when you don't want to run GDB on the
+child.  While the child is sleeping, use the `ps' program to get its
+process ID.  Then tell GDB (a new invocation of GDB if you are also
+debugging the parent process) to attach to the child process (*note
+Attach::).  From that point on you can debug the child process just
+like any other process which you attached to.
+
+   On some systems, GDB provides support for debugging programs that
+create additional processes using the `fork' or `vfork' functions.
+Currently, the only platforms with this feature are HP-UX (11.x and
+later only?) and GNU/Linux (kernel version 2.5.60 and later).
+
+   By default, when a program forks, GDB will continue to debug the
+parent process and the child process will run unimpeded.
+
+   If you want to follow the child process instead of the parent
+process, use the command `set follow-fork-mode'.
+
+`set follow-fork-mode MODE'
+     Set the debugger response to a program call of `fork' or `vfork'.
+     A call to `fork' or `vfork' creates a new process.  The MODE
+     argument can be:
+
+    `parent'
+          The original process is debugged after a fork.  The child
+          process runs unimpeded.  This is the default.
+
+    `child'
+          The new process is debugged after a fork.  The parent process
+          runs unimpeded.
+
+
+`show follow-fork-mode'
+     Display the current debugger response to a `fork' or `vfork' call.
+
+   On Linux, if you want to debug both the parent and child processes,
+use the command `set detach-on-fork'.
+
+`set detach-on-fork MODE'
+     Tells gdb whether to detach one of the processes after a fork, or
+     retain debugger control over them both.
+
+    `on'
+          The child process (or parent process, depending on the value
+          of `follow-fork-mode') will be detached and allowed to run
+          independently.  This is the default.
+
+    `off'
+          Both processes will be held under the control of GDB.  One
+          process (child or parent, depending on the value of
+          `follow-fork-mode') is debugged as usual, while the other is
+          held suspended.
+
+
+`show detach-on-fork'
+     Show whether detach-on-fork mode is on/off.
+
+   If you choose to set `detach-on-fork' mode off, then GDB will retain
+control of all forked processes (including nested forks).  You can list
+the forked processes under the control of GDB by using the
+`info inferiors' command, and switch from one fork to another by using
+the `inferior' command (*note Debugging Multiple Inferiors and
+Programs: Inferiors and Programs.).
+
+   To quit debugging one of the forked processes, you can either detach
+from it by using the `detach inferiors' command (allowing it to run
+independently), or kill it using the `kill inferiors' command.  *Note
+Debugging Multiple Inferiors and Programs: Inferiors and Programs.
+
+   If you ask to debug a child process and a `vfork' is followed by an
+`exec', GDB executes the new target up to the first breakpoint in the
+new target.  If you have a breakpoint set on `main' in your original
+program, the breakpoint will also be set on the child process's `main'.
+
+   On some systems, when a child process is spawned by `vfork', you
+cannot debug the child or parent until an `exec' call completes.
+
+   If you issue a `run' command to GDB after an `exec' call executes,
+the new target restarts.  To restart the parent process, use the `file'
+command with the parent executable name as its argument.  By default,
+after an `exec' call executes, GDB discards the symbols of the previous
+executable image.  You can change this behaviour with the
+`set follow-exec-mode' command.
+
+`set follow-exec-mode MODE'
+     Set debugger response to a program call of `exec'.  An `exec' call
+     replaces the program image of a process.
+
+     `follow-exec-mode' can be:
+
+    `new'
+          GDB creates a new inferior and rebinds the process to this
+          new inferior.  The program the process was running before the
+          `exec' call can be restarted afterwards by restarting the
+          original inferior.
+
+          For example:
+
+               (gdb) info inferiors
+               (gdb) info inferior
+                 Id   Description   Executable
+               * 1    <null>        prog1
+               (gdb) run
+               process 12020 is executing new program: prog2
+               Program exited normally.
+               (gdb) info inferiors
+                 Id   Description   Executable
+               * 2    <null>        prog2
+                 1    <null>        prog1
+
+    `same'
+          GDB keeps the process bound to the same inferior.  The new
+          executable image replaces the previous executable loaded in
+          the inferior.  Restarting the inferior after the `exec' call,
+          with e.g., the `run' command, restarts the executable the
+          process was running after the `exec' call.  This is the
+          default mode.
+
+          For example:
+
+               (gdb) info inferiors
+                 Id   Description   Executable
+               * 1    <null>        prog1
+               (gdb) run
+               process 12020 is executing new program: prog2
+               Program exited normally.
+               (gdb) info inferiors
+                 Id   Description   Executable
+               * 1    <null>        prog2
+
+
+   You can use the `catch' command to make GDB stop whenever a `fork',
+`vfork', or `exec' call is made.  *Note Setting Catchpoints: Set
+Catchpoints.
+
+
+File: gdb.info,  Node: Checkpoint/Restart,  Prev: Forks,  Up: Running
+
+4.12 Setting a _Bookmark_ to Return to Later
+============================================
+
+On certain operating systems(1), GDB is able to save a "snapshot" of a
+program's state, called a "checkpoint", and come back to it later.
+
+   Returning to a checkpoint effectively undoes everything that has
+happened in the program since the `checkpoint' was saved.  This
+includes changes in memory, registers, and even (within some limits)
+system state.  Effectively, it is like going back in time to the moment
+when the checkpoint was saved.
+
+   Thus, if you're stepping thru a program and you think you're getting
+close to the point where things go wrong, you can save a checkpoint.
+Then, if you accidentally go too far and miss the critical statement,
+instead of having to restart your program from the beginning, you can
+just go back to the checkpoint and start again from there.
+
+   This can be especially useful if it takes a lot of time or steps to
+reach the point where you think the bug occurs.
+
+   To use the `checkpoint'/`restart' method of debugging:
+
+`checkpoint'
+     Save a snapshot of the debugged program's current execution state.
+     The `checkpoint' command takes no arguments, but each checkpoint
+     is assigned a small integer id, similar to a breakpoint id.
+
+`info checkpoints'
+     List the checkpoints that have been saved in the current debugging
+     session.  For each checkpoint, the following information will be
+     listed:
+
+    `Checkpoint ID'
+
+    `Process ID'
+
+    `Code Address'
+
+    `Source line, or label'
+
+`restart CHECKPOINT-ID'
+     Restore the program state that was saved as checkpoint number
+     CHECKPOINT-ID.  All program variables, registers, stack frames
+     etc.  will be returned to the values that they had when the
+     checkpoint was saved.  In essence, gdb will "wind back the clock"
+     to the point in time when the checkpoint was saved.
+
+     Note that breakpoints, GDB variables, command history etc.  are
+     not affected by restoring a checkpoint.  In general, a checkpoint
+     only restores things that reside in the program being debugged,
+     not in the debugger.
+
+`delete checkpoint CHECKPOINT-ID'
+     Delete the previously-saved checkpoint identified by CHECKPOINT-ID.
+
+
+   Returning to a previously saved checkpoint will restore the user
+state of the program being debugged, plus a significant subset of the
+system (OS) state, including file pointers.  It won't "un-write" data
+from a file, but it will rewind the file pointer to the previous
+location, so that the previously written data can be overwritten.  For
+files opened in read mode, the pointer will also be restored so that the
+previously read data can be read again.
+
+   Of course, characters that have been sent to a printer (or other
+external device) cannot be "snatched back", and characters received
+from eg. a serial device can be removed from internal program buffers,
+but they cannot be "pushed back" into the serial pipeline, ready to be
+received again.  Similarly, the actual contents of files that have been
+changed cannot be restored (at this time).
+
+   However, within those constraints, you actually can "rewind" your
+program to a previously saved point in time, and begin debugging it
+again -- and you can change the course of events so as to debug a
+different execution path this time.
+
+   Finally, there is one bit of internal program state that will be
+different when you return to a checkpoint -- the program's process id.
+Each checkpoint will have a unique process id (or PID), and each will
+be different from the program's original PID.  If your program has
+saved a local copy of its process id, this could potentially pose a
+problem.
+
+4.12.1 A Non-obvious Benefit of Using Checkpoints
+-------------------------------------------------
+
+On some systems such as GNU/Linux, address space randomization is
+performed on new processes for security reasons.  This makes it
+difficult or impossible to set a breakpoint, or watchpoint, on an
+absolute address if you have to restart the program, since the absolute
+location of a symbol will change from one execution to the next.
+
+   A checkpoint, however, is an _identical_ copy of a process.
+Therefore if you create a checkpoint at (eg.) the start of main, and
+simply return to that checkpoint instead of restarting the process, you
+can avoid the effects of address randomization and your symbols will
+all stay in the same place.
+
+   ---------- Footnotes ----------
+
+   (1) Currently, only GNU/Linux.
+
+
+File: gdb.info,  Node: Stopping,  Next: Reverse Execution,  Prev: Running,  Up: Top
+
+5 Stopping and Continuing
+*************************
+
+The principal purposes of using a debugger are so that you can stop your
+program before it terminates; or so that, if your program runs into
+trouble, you can investigate and find out why.
+
+   Inside GDB, your program may stop for any of several reasons, such
+as a signal, a breakpoint, or reaching a new line after a GDB command
+such as `step'.  You may then examine and change variables, set new
+breakpoints or remove old ones, and then continue execution.  Usually,
+the messages shown by GDB provide ample explanation of the status of
+your program--but you can also explicitly request this information at
+any time.
+
+`info program'
+     Display information about the status of your program: whether it is
+     running or not, what process it is, and why it stopped.
+
+* Menu:
+
+* Breakpoints::                 Breakpoints, watchpoints, and catchpoints
+* Continuing and Stepping::     Resuming execution
+* Skipping Over Functions and Files::
+                                Skipping over functions and files
+* Signals::                     Signals
+* Thread Stops::                Stopping and starting multi-thread programs
+
+
+File: gdb.info,  Node: Breakpoints,  Next: Continuing and Stepping,  Up: Stopping
+
+5.1 Breakpoints, Watchpoints, and Catchpoints
+=============================================
+
+A "breakpoint" makes your program stop whenever a certain point in the
+program is reached.  For each breakpoint, you can add conditions to
+control in finer detail whether your program stops.  You can set
+breakpoints with the `break' command and its variants (*note Setting
+Breakpoints: Set Breaks.), to specify the place where your program
+should stop by line number, function name or exact address in the
+program.
+
+   On some systems, you can set breakpoints in shared libraries before
+the executable is run.  There is a minor limitation on HP-UX systems:
+you must wait until the executable is run in order to set breakpoints
+in shared library routines that are not called directly by the program
+(for example, routines that are arguments in a `pthread_create' call).
+
+   A "watchpoint" is a special breakpoint that stops your program when
+the value of an expression changes.  The expression may be a value of a
+variable, or it could involve values of one or more variables combined
+by operators, such as `a + b'.  This is sometimes called "data
+breakpoints".  You must use a different command to set watchpoints
+(*note Setting Watchpoints: Set Watchpoints.), but aside from that, you
+can manage a watchpoint like any other breakpoint: you enable, disable,
+and delete both breakpoints and watchpoints using the same commands.
+
+   You can arrange to have values from your program displayed
+automatically whenever GDB stops at a breakpoint.  *Note Automatic
+Display: Auto Display.
+
+   A "catchpoint" is another special breakpoint that stops your program
+when a certain kind of event occurs, such as the throwing of a C++
+exception or the loading of a library.  As with watchpoints, you use a
+different command to set a catchpoint (*note Setting Catchpoints: Set
+Catchpoints.), but aside from that, you can manage a catchpoint like any
+other breakpoint.  (To stop when your program receives a signal, use the
+`handle' command; see *Note Signals: Signals.)
+
+   GDB assigns a number to each breakpoint, watchpoint, or catchpoint
+when you create it; these numbers are successive integers starting with
+one.  In many of the commands for controlling various features of
+breakpoints you use the breakpoint number to say which breakpoint you
+want to change.  Each breakpoint may be "enabled" or "disabled"; if
+disabled, it has no effect on your program until you enable it again.
+
+   Some GDB commands accept a range of breakpoints on which to operate.
+A breakpoint range is either a single breakpoint number, like `5', or
+two such numbers, in increasing order, separated by a hyphen, like
+`5-7'.  When a breakpoint range is given to a command, all breakpoints
+in that range are operated on.
+
+* Menu:
+
+* Set Breaks::                  Setting breakpoints
+* Set Watchpoints::             Setting watchpoints
+* Set Catchpoints::             Setting catchpoints
+* Delete Breaks::               Deleting breakpoints
+* Disabling::                   Disabling breakpoints
+* Conditions::                  Break conditions
+* Break Commands::              Breakpoint command lists
+* Dynamic Printf::              Dynamic printf
+* Save Breakpoints::            How to save breakpoints in a file
+* Static Probe Points::         Listing static probe points
+* Error in Breakpoints::        ``Cannot insert breakpoints''
+* Breakpoint-related Warnings:: ``Breakpoint address adjusted...''
+
+
+File: gdb.info,  Node: Set Breaks,  Next: Set Watchpoints,  Up: Breakpoints
+
+5.1.1 Setting Breakpoints
+-------------------------
+
+Breakpoints are set with the `break' command (abbreviated `b').  The
+debugger convenience variable `$bpnum' records the number of the
+breakpoint you've set most recently; see *Note Convenience Variables:
+Convenience Vars, for a discussion of what you can do with convenience
+variables.
+
+`break LOCATION'
+     Set a breakpoint at the given LOCATION, which can specify a
+     function name, a line number, or an address of an instruction.
+     (*Note Specify Location::, for a list of all the possible ways to
+     specify a LOCATION.)  The breakpoint will stop your program just
+     before it executes any of the code in the specified LOCATION.
+
+     When using source languages that permit overloading of symbols,
+     such as C++, a function name may refer to more than one possible
+     place to break.  *Note Ambiguous Expressions: Ambiguous
+     Expressions, for a discussion of that situation.
+
+     It is also possible to insert a breakpoint that will stop the
+     program only if a specific thread (*note Thread-Specific
+     Breakpoints::) or a specific task (*note Ada Tasks::) hits that
+     breakpoint.
+
+`break'
+     When called without any arguments, `break' sets a breakpoint at
+     the next instruction to be executed in the selected stack frame
+     (*note Examining the Stack: Stack.).  In any selected frame but the
+     innermost, this makes your program stop as soon as control returns
+     to that frame.  This is similar to the effect of a `finish'
+     command in the frame inside the selected frame--except that
+     `finish' does not leave an active breakpoint.  If you use `break'
+     without an argument in the innermost frame, GDB stops the next
+     time it reaches the current location; this may be useful inside
+     loops.
+
+     GDB normally ignores breakpoints when it resumes execution, until
+     at least one instruction has been executed.  If it did not do
+     this, you would be unable to proceed past a breakpoint without
+     first disabling the breakpoint.  This rule applies whether or not
+     the breakpoint already existed when your program stopped.
+
+`break ... if COND'
+     Set a breakpoint with condition COND; evaluate the expression COND
+     each time the breakpoint is reached, and stop only if the value is
+     nonzero--that is, if COND evaluates as true.  `...' stands for one
+     of the possible arguments described above (or no argument)
+     specifying where to break.  *Note Break Conditions: Conditions,
+     for more information on breakpoint conditions.
+
+`tbreak ARGS'
+     Set a breakpoint enabled only for one stop.  ARGS are the same as
+     for the `break' command, and the breakpoint is set in the same
+     way, but the breakpoint is automatically deleted after the first
+     time your program stops there.  *Note Disabling Breakpoints:
+     Disabling.
+
+`hbreak ARGS'
+     Set a hardware-assisted breakpoint.  ARGS are the same as for the
+     `break' command and the breakpoint is set in the same way, but the
+     breakpoint requires hardware support and some target hardware may
+     not have this support.  The main purpose of this is EPROM/ROM code
+     debugging, so you can set a breakpoint at an instruction without
+     changing the instruction.  This can be used with the new
+     trap-generation provided by SPARClite DSU and most x86-based
+     targets.  These targets will generate traps when a program
+     accesses some data or instruction address that is assigned to the
+     debug registers.  However the hardware breakpoint registers can
+     take a limited number of breakpoints.  For example, on the DSU,
+     only two data breakpoints can be set at a time, and GDB will
+     reject this command if more than two are used.  Delete or disable
+     unused hardware breakpoints before setting new ones (*note
+     Disabling Breakpoints: Disabling.).  *Note Break Conditions:
+     Conditions.  For remote targets, you can restrict the number of
+     hardware breakpoints GDB will use, see *Note set remote
+     hardware-breakpoint-limit::.
+
+`thbreak ARGS'
+     Set a hardware-assisted breakpoint enabled only for one stop.  ARGS
+     are the same as for the `hbreak' command and the breakpoint is set
+     in the same way.  However, like the `tbreak' command, the
+     breakpoint is automatically deleted after the first time your
+     program stops there.  Also, like the `hbreak' command, the
+     breakpoint requires hardware support and some target hardware may
+     not have this support.  *Note Disabling Breakpoints: Disabling.
+     See also *Note Break Conditions: Conditions.
+
+`rbreak REGEX'
+     Set breakpoints on all functions matching the regular expression
+     REGEX.  This command sets an unconditional breakpoint on all
+     matches, printing a list of all breakpoints it set.  Once these
+     breakpoints are set, they are treated just like the breakpoints
+     set with the `break' command.  You can delete them, disable them,
+     or make them conditional the same way as any other breakpoint.
+
+     The syntax of the regular expression is the standard one used with
+     tools like `grep'.  Note that this is different from the syntax
+     used by shells, so for instance `foo*' matches all functions that
+     include an `fo' followed by zero or more `o's.  There is an
+     implicit `.*' leading and trailing the regular expression you
+     supply, so to match only functions that begin with `foo', use
+     `^foo'.
+
+     When debugging C++ programs, `rbreak' is useful for setting
+     breakpoints on overloaded functions that are not members of any
+     special classes.
+
+     The `rbreak' command can be used to set breakpoints in *all* the
+     functions in a program, like this:
+
+          (gdb) rbreak .
+
+`rbreak FILE:REGEX'
+     If `rbreak' is called with a filename qualification, it limits the
+     search for functions matching the given regular expression to the
+     specified FILE.  This can be used, for example, to set breakpoints
+     on every function in a given file:
+
+          (gdb) rbreak file.c:.
+
+     The colon separating the filename qualifier from the regex may
+     optionally be surrounded by spaces.
+
+`info breakpoints [N...]'
+`info break [N...]'
+     Print a table of all breakpoints, watchpoints, and catchpoints set
+     and not deleted.  Optional argument N means print information only
+     about the specified breakpoint(s) (or watchpoint(s) or
+     catchpoint(s)).  For each breakpoint, following columns are
+     printed:
+
+    _Breakpoint Numbers_
+
+    _Type_
+          Breakpoint, watchpoint, or catchpoint.
+
+    _Disposition_
+          Whether the breakpoint is marked to be disabled or deleted
+          when hit.
+
+    _Enabled or Disabled_
+          Enabled breakpoints are marked with `y'.  `n' marks
+          breakpoints that are not enabled.
+
+    _Address_
+          Where the breakpoint is in your program, as a memory address.
+          For a pending breakpoint whose address is not yet known,
+          this field will contain `<PENDING>'.  Such breakpoint won't
+          fire until a shared library that has the symbol or line
+          referred by breakpoint is loaded.  See below for details.  A
+          breakpoint with several locations will have `<MULTIPLE>' in
+          this field--see below for details.
+
+    _What_
+          Where the breakpoint is in the source for your program, as a
+          file and line number.  For a pending breakpoint, the original
+          string passed to the breakpoint command will be listed as it
+          cannot be resolved until the appropriate shared library is
+          loaded in the future.
+
+     If a breakpoint is conditional, there are two evaluation modes:
+     "host" and "target".  If mode is "host", breakpoint condition
+     evaluation is done by GDB on the host's side.  If it is "target",
+     then the condition is evaluated by the target.  The `info break'
+     command shows the condition on the line following the affected
+     breakpoint, together with its condition evaluation mode in between
+     parentheses.
+
+     Breakpoint commands, if any, are listed after that.  A pending
+     breakpoint is allowed to have a condition specified for it.  The
+     condition is not parsed for validity until a shared library is
+     loaded that allows the pending breakpoint to resolve to a valid
+     location.
+
+     `info break' with a breakpoint number N as argument lists only
+     that breakpoint.  The convenience variable `$_' and the default
+     examining-address for the `x' command are set to the address of
+     the last breakpoint listed (*note Examining Memory: Memory.).
+
+     `info break' displays a count of the number of times the breakpoint
+     has been hit.  This is especially useful in conjunction with the
+     `ignore' command.  You can ignore a large number of breakpoint
+     hits, look at the breakpoint info to see how many times the
+     breakpoint was hit, and then run again, ignoring one less than
+     that number.  This will get you quickly to the last hit of that
+     breakpoint.
+
+     For a breakpoints with an enable count (xref) greater than 1,
+     `info break' also displays that count.
+
+
+   GDB allows you to set any number of breakpoints at the same place in
+your program.  There is nothing silly or meaningless about this.  When
+the breakpoints are conditional, this is even useful (*note Break
+Conditions: Conditions.).
+
+   It is possible that a breakpoint corresponds to several locations in
+your program.  Examples of this situation are:
+
+   * Multiple functions in the program may have the same name.
+
+   * For a C++ constructor, the GCC compiler generates several
+     instances of the function body, used in different cases.
+
+   * For a C++ template function, a given line in the function can
+     correspond to any number of instantiations.
+
+   * For an inlined function, a given source line can correspond to
+     several places where that function is inlined.
+
+   In all those cases, GDB will insert a breakpoint at all the relevant
+locations.
+
+   A breakpoint with multiple locations is displayed in the breakpoint
+table using several rows--one header row, followed by one row for each
+breakpoint location.  The header row has `<MULTIPLE>' in the address
+column.  The rows for individual locations contain the actual addresses
+for locations, and show the functions to which those locations belong.
+The number column for a location is of the form
+BREAKPOINT-NUMBER.LOCATION-NUMBER.
+
+   For example:
+
+     Num     Type           Disp Enb  Address    What
+     1       breakpoint     keep y    <MULTIPLE>
+             stop only if i==1
+             breakpoint already hit 1 time
+     1.1                         y    0x080486a2 in void foo<int>() at t.cc:8
+     1.2                         y    0x080486ca in void foo<double>() at t.cc:8
+
+   Each location can be individually enabled or disabled by passing
+BREAKPOINT-NUMBER.LOCATION-NUMBER as argument to the `enable' and
+`disable' commands.  Note that you cannot delete the individual
+locations from the list, you can only delete the entire list of
+locations that belong to their parent breakpoint (with the `delete NUM'
+command, where NUM is the number of the parent breakpoint, 1 in the
+above example).  Disabling or enabling the parent breakpoint (*note
+Disabling::) affects all of the locations that belong to that
+breakpoint.
+
+   It's quite common to have a breakpoint inside a shared library.
+Shared libraries can be loaded and unloaded explicitly, and possibly
+repeatedly, as the program is executed.  To support this use case, GDB
+updates breakpoint locations whenever any shared library is loaded or
+unloaded.  Typically, you would set a breakpoint in a shared library at
+the beginning of your debugging session, when the library is not
+loaded, and when the symbols from the library are not available.  When
+you try to set breakpoint, GDB will ask you if you want to set a so
+called "pending breakpoint"--breakpoint whose address is not yet
+resolved.
+
+   After the program is run, whenever a new shared library is loaded,
+GDB reevaluates all the breakpoints.  When a newly loaded shared
+library contains the symbol or line referred to by some pending
+breakpoint, that breakpoint is resolved and becomes an ordinary
+breakpoint.  When a library is unloaded, all breakpoints that refer to
+its symbols or source lines become pending again.
+
+   This logic works for breakpoints with multiple locations, too.  For
+example, if you have a breakpoint in a C++ template function, and a
+newly loaded shared library has an instantiation of that template, a
+new location is added to the list of locations for the breakpoint.
+
+   Except for having unresolved address, pending breakpoints do not
+differ from regular breakpoints.  You can set conditions or commands,
+enable and disable them and perform other breakpoint operations.
+
+   GDB provides some additional commands for controlling what happens
+when the `break' command cannot resolve breakpoint address
+specification to an address:
+
+`set breakpoint pending auto'
+     This is the default behavior.  When GDB cannot find the breakpoint
+     location, it queries you whether a pending breakpoint should be
+     created.
+
+`set breakpoint pending on'
+     This indicates that an unrecognized breakpoint location should
+     automatically result in a pending breakpoint being created.
+
+`set breakpoint pending off'
+     This indicates that pending breakpoints are not to be created.  Any
+     unrecognized breakpoint location results in an error.  This
+     setting does not affect any pending breakpoints previously created.
+
+`show breakpoint pending'
+     Show the current behavior setting for creating pending breakpoints.
+
+   The settings above only affect the `break' command and its variants.
+Once breakpoint is set, it will be automatically updated as shared
+libraries are loaded and unloaded.
+
+   For some targets, GDB can automatically decide if hardware or
+software breakpoints should be used, depending on whether the
+breakpoint address is read-only or read-write.  This applies to
+breakpoints set with the `break' command as well as to internal
+breakpoints set by commands like `next' and `finish'.  For breakpoints
+set with `hbreak', GDB will always use hardware breakpoints.
+
+   You can control this automatic behaviour with the following
+commands::
+
+`set breakpoint auto-hw on'
+     This is the default behavior.  When GDB sets a breakpoint, it will
+     try to use the target memory map to decide if software or hardware
+     breakpoint must be used.
+
+`set breakpoint auto-hw off'
+     This indicates GDB should not automatically select breakpoint
+     type.  If the target provides a memory map, GDB will warn when
+     trying to set software breakpoint at a read-only address.
+
+   GDB normally implements breakpoints by replacing the program code at
+the breakpoint address with a special instruction, which, when
+executed, given control to the debugger.  By default, the program code
+is so modified only when the program is resumed.  As soon as the
+program stops, GDB restores the original instructions.  This behaviour
+guards against leaving breakpoints inserted in the target should gdb
+abrubptly disconnect.  However, with slow remote targets, inserting and
+removing breakpoint can reduce the performance.  This behavior can be
+controlled with the following commands::
+
+`set breakpoint always-inserted off'
+     All breakpoints, including newly added by the user, are inserted in
+     the target only when the target is resumed.  All breakpoints are
+     removed from the target when it stops.
+
+`set breakpoint always-inserted on'
+     Causes all breakpoints to be inserted in the target at all times.
+     If the user adds a new breakpoint, or changes an existing
+     breakpoint, the breakpoints in the target are updated immediately.
+     A breakpoint is removed from the target only when breakpoint
+     itself is removed.
+
+`set breakpoint always-inserted auto'
+     This is the default mode.  If GDB is controlling the inferior in
+     non-stop mode (*note Non-Stop Mode::), gdb behaves as if
+     `breakpoint always-inserted' mode is on.  If GDB is controlling
+     the inferior in all-stop mode, GDB behaves as if `breakpoint
+     always-inserted' mode is off.
+
+   GDB handles conditional breakpoints by evaluating these conditions
+when a breakpoint breaks.  If the condition is true, then the process
+being debugged stops, otherwise the process is resumed.
+
+   If the target supports evaluating conditions on its end, GDB may
+download the breakpoint, together with its conditions, to it.
+
+   This feature can be controlled via the following commands:
+
+`set breakpoint condition-evaluation host'
+     This option commands GDB to evaluate the breakpoint conditions on
+     the host's side.  Unconditional breakpoints are sent to the target
+     which in turn receives the triggers and reports them back to GDB
+     for condition evaluation.  This is the standard evaluation mode.
+
+`set breakpoint condition-evaluation target'
+     This option commands GDB to download breakpoint conditions to the
+     target at the moment of their insertion.  The target is
+     responsible for evaluating the conditional expression and reporting
+     breakpoint stop events back to GDB whenever the condition is true.
+     Due to limitations of target-side evaluation, some conditions
+     cannot be evaluated there, e.g., conditions that depend on local
+     data that is only known to the host.  Examples include conditional
+     expressions involving convenience variables, complex types that
+     cannot be handled by the agent expression parser and expressions
+     that are too long to be sent over to the target, specially when the
+     target is a remote system.  In these cases, the conditions will be
+     evaluated by GDB.
+
+`set breakpoint condition-evaluation auto'
+     This is the default mode.  If the target supports evaluating
+     breakpoint conditions on its end, GDB will download breakpoint
+     conditions to the target (limitations mentioned previously apply).
+     If the target does not support breakpoint condition evaluation,
+     then GDB will fallback to evaluating all these conditions on the
+     host's side.
+
+   GDB itself sometimes sets breakpoints in your program for special
+purposes, such as proper handling of `longjmp' (in C programs).  These
+internal breakpoints are assigned negative numbers, starting with `-1';
+`info breakpoints' does not display them.  You can see these
+breakpoints with the GDB maintenance command `maint info breakpoints'
+(*note maint info breakpoints::).
+
+
+File: gdb.info,  Node: Set Watchpoints,  Next: Set Catchpoints,  Prev: Set Breaks,  Up: Breakpoints
+
+5.1.2 Setting Watchpoints
+-------------------------
+
+You can use a watchpoint to stop execution whenever the value of an
+expression changes, without having to predict a particular place where
+this may happen.  (This is sometimes called a "data breakpoint".)  The
+expression may be as simple as the value of a single variable, or as
+complex as many variables combined by operators.  Examples include:
+
+   * A reference to the value of a single variable.
+
+   * An address cast to an appropriate data type.  For example, `*(int
+     *)0x12345678' will watch a 4-byte region at the specified address
+     (assuming an `int' occupies 4 bytes).
+
+   * An arbitrarily complex expression, such as `a*b + c/d'.  The
+     expression can use any operators valid in the program's native
+     language (*note Languages::).
+
+   You can set a watchpoint on an expression even if the expression can
+not be evaluated yet.  For instance, you can set a watchpoint on
+`*global_ptr' before `global_ptr' is initialized.  GDB will stop when
+your program sets `global_ptr' and the expression produces a valid
+value.  If the expression becomes valid in some other way than changing
+a variable (e.g. if the memory pointed to by `*global_ptr' becomes
+readable as the result of a `malloc' call), GDB may not stop until the
+next time the expression changes.
+
+   Depending on your system, watchpoints may be implemented in software
+or hardware.  GDB does software watchpointing by single-stepping your
+program and testing the variable's value each time, which is hundreds of
+times slower than normal execution.  (But this may still be worth it, to
+catch errors where you have no clue what part of your program is the
+culprit.)
+
+   On some systems, such as HP-UX, PowerPC, GNU/Linux and most other
+x86-based targets, GDB includes support for hardware watchpoints, which
+do not slow down the running of your program.
+
+`watch [-l|-location] EXPR [thread THREADNUM] [mask MASKVALUE]'
+     Set a watchpoint for an expression.  GDB will break when the
+     expression EXPR is written into by the program and its value
+     changes.  The simplest (and the most popular) use of this command
+     is to watch the value of a single variable:
+
+          (gdb) watch foo
+
+     If the command includes a `[thread THREADNUM]' argument, GDB
+     breaks only when the thread identified by THREADNUM changes the
+     value of EXPR.  If any other threads change the value of EXPR, GDB
+     will not break.  Note that watchpoints restricted to a single
+     thread in this way only work with Hardware Watchpoints.
+
+     Ordinarily a watchpoint respects the scope of variables in EXPR
+     (see below).  The `-location' argument tells GDB to instead watch
+     the memory referred to by EXPR.  In this case, GDB will evaluate
+     EXPR, take the address of the result, and watch the memory at that
+     address.  The type of the result is used to determine the size of
+     the watched memory.  If the expression's result does not have an
+     address, then GDB will print an error.
+
+     The `[mask MASKVALUE]' argument allows creation of masked
+     watchpoints, if the current architecture supports this feature
+     (e.g., PowerPC Embedded architecture, see *Note PowerPC
+     Embedded::.)  A "masked watchpoint" specifies a mask in addition
+     to an address to watch.  The mask specifies that some bits of an
+     address (the bits which are reset in the mask) should be ignored
+     when matching the address accessed by the inferior against the
+     watchpoint address.  Thus, a masked watchpoint watches many
+     addresses simultaneously--those addresses whose unmasked bits are
+     identical to the unmasked bits in the watchpoint address.  The
+     `mask' argument implies `-location'.  Examples:
+
+          (gdb) watch foo mask 0xffff00ff
+          (gdb) watch *0xdeadbeef mask 0xffffff00
+
+`rwatch [-l|-location] EXPR [thread THREADNUM] [mask MASKVALUE]'
+     Set a watchpoint that will break when the value of EXPR is read by
+     the program.
+
+`awatch [-l|-location] EXPR [thread THREADNUM] [mask MASKVALUE]'
+     Set a watchpoint that will break when EXPR is either read from or
+     written into by the program.
+
+`info watchpoints [N...]'
+     This command prints a list of watchpoints, using the same format as
+     `info break' (*note Set Breaks::).
+
+   If you watch for a change in a numerically entered address you need
+to dereference it, as the address itself is just a constant number
+which will never change.  GDB refuses to create a watchpoint that
+watches a never-changing value:
+
+     (gdb) watch 0x600850
+     Cannot watch constant value 0x600850.
+     (gdb) watch *(int *) 0x600850
+     Watchpoint 1: *(int *) 6293584
+
+   GDB sets a "hardware watchpoint" if possible.  Hardware watchpoints
+execute very quickly, and the debugger reports a change in value at the
+exact instruction where the change occurs.  If GDB cannot set a
+hardware watchpoint, it sets a software watchpoint, which executes more
+slowly and reports the change in value at the next _statement_, not the
+instruction, after the change occurs.
+
+   You can force GDB to use only software watchpoints with the `set
+can-use-hw-watchpoints 0' command.  With this variable set to zero, GDB
+will never try to use hardware watchpoints, even if the underlying
+system supports them.  (Note that hardware-assisted watchpoints that
+were set _before_ setting `can-use-hw-watchpoints' to zero will still
+use the hardware mechanism of watching expression values.)
+
+`set can-use-hw-watchpoints'
+     Set whether or not to use hardware watchpoints.
+
+`show can-use-hw-watchpoints'
+     Show the current mode of using hardware watchpoints.
+
+   For remote targets, you can restrict the number of hardware
+watchpoints GDB will use, see *Note set remote
+hardware-breakpoint-limit::.
+
+   When you issue the `watch' command, GDB reports
+
+     Hardware watchpoint NUM: EXPR
+
+if it was able to set a hardware watchpoint.
+
+   Currently, the `awatch' and `rwatch' commands can only set hardware
+watchpoints, because accesses to data that don't change the value of
+the watched expression cannot be detected without examining every
+instruction as it is being executed, and GDB does not do that
+currently.  If GDB finds that it is unable to set a hardware breakpoint
+with the `awatch' or `rwatch' command, it will print a message like
+this:
+
+     Expression cannot be implemented with read/access watchpoint.
+
+   Sometimes, GDB cannot set a hardware watchpoint because the data
+type of the watched expression is wider than what a hardware watchpoint
+on the target machine can handle.  For example, some systems can only
+watch regions that are up to 4 bytes wide; on such systems you cannot
+set hardware watchpoints for an expression that yields a
+double-precision floating-point number (which is typically 8 bytes
+wide).  As a work-around, it might be possible to break the large region
+into a series of smaller ones and watch them with separate watchpoints.
+
+   If you set too many hardware watchpoints, GDB might be unable to
+insert all of them when you resume the execution of your program.
+Since the precise number of active watchpoints is unknown until such
+time as the program is about to be resumed, GDB might not be able to
+warn you about this when you set the watchpoints, and the warning will
+be printed only when the program is resumed:
+
+     Hardware watchpoint NUM: Could not insert watchpoint
+
+If this happens, delete or disable some of the watchpoints.
+
+   Watching complex expressions that reference many variables can also
+exhaust the resources available for hardware-assisted watchpoints.
+That's because GDB needs to watch every variable in the expression with
+separately allocated resources.
+
+   If you call a function interactively using `print' or `call', any
+watchpoints you have set will be inactive until GDB reaches another
+kind of breakpoint or the call completes.
+
+   GDB automatically deletes watchpoints that watch local (automatic)
+variables, or expressions that involve such variables, when they go out
+of scope, that is, when the execution leaves the block in which these
+variables were defined.  In particular, when the program being debugged
+terminates, _all_ local variables go out of scope, and so only
+watchpoints that watch global variables remain set.  If you rerun the
+program, you will need to set all such watchpoints again.  One way of
+doing that would be to set a code breakpoint at the entry to the `main'
+function and when it breaks, set all the watchpoints.
+
+   In multi-threaded programs, watchpoints will detect changes to the
+watched expression from every thread.
+
+     _Warning:_ In multi-threaded programs, software watchpoints have
+     only limited usefulness.  If GDB creates a software watchpoint, it
+     can only watch the value of an expression _in a single thread_.
+     If you are confident that the expression can only change due to
+     the current thread's activity (and if you are also confident that
+     no other thread can become current), then you can use software
+     watchpoints as usual.  However, GDB may not notice when a
+     non-current thread's activity changes the expression.  (Hardware
+     watchpoints, in contrast, watch an expression in all threads.)
+
+   *Note set remote hardware-watchpoint-limit::.
+
+
+File: gdb.info,  Node: Set Catchpoints,  Next: Delete Breaks,  Prev: Set Watchpoints,  Up: Breakpoints
+
+5.1.3 Setting Catchpoints
+-------------------------
+
+You can use "catchpoints" to cause the debugger to stop for certain
+kinds of program events, such as C++ exceptions or the loading of a
+shared library.  Use the `catch' command to set a catchpoint.
+
+`catch EVENT'
+     Stop when EVENT occurs.  EVENT can be any of the following:
+    `throw'
+          The throwing of a C++ exception.
+
+    `catch'
+          The catching of a C++ exception.
+
+    `exception'
+          An Ada exception being raised.  If an exception name is
+          specified at the end of the command (eg `catch exception
+          Program_Error'), the debugger will stop only when this
+          specific exception is raised.  Otherwise, the debugger stops
+          execution when any Ada exception is raised.
+
+          When inserting an exception catchpoint on a user-defined
+          exception whose name is identical to one of the exceptions
+          defined by the language, the fully qualified name must be
+          used as the exception name.  Otherwise, GDB will assume that
+          it should stop on the pre-defined exception rather than the
+          user-defined one.  For instance, assuming an exception called
+          `Constraint_Error' is defined in package `Pck', then the
+          command to use to catch such exceptions is `catch exception
+          Pck.Constraint_Error'.
+
+    `exception unhandled'
+          An exception that was raised but is not handled by the
+          program.
+
+    `assert'
+          A failed Ada assertion.
+
+    `exec'
+          A call to `exec'.  This is currently only available for HP-UX
+          and GNU/Linux.
+
+    `syscall'
+    `syscall [NAME | NUMBER] ...'
+          A call to or return from a system call, a.k.a. "syscall".  A
+          syscall is a mechanism for application programs to request a
+          service from the operating system (OS) or one of the OS
+          system services.  GDB can catch some or all of the syscalls
+          issued by the debuggee, and show the related information for
+          each syscall.  If no argument is specified, calls to and
+          returns from all system calls will be caught.
+
+          NAME can be any system call name that is valid for the
+          underlying OS.  Just what syscalls are valid depends on the
+          OS.  On GNU and Unix systems, you can find the full list of
+          valid syscall names on `/usr/include/asm/unistd.h'.
+
+          Normally, GDB knows in advance which syscalls are valid for
+          each OS, so you can use the GDB command-line completion
+          facilities (*note command completion: Completion.) to list the
+          available choices.
+
+          You may also specify the system call numerically.  A syscall's
+          number is the value passed to the OS's syscall dispatcher to
+          identify the requested service.  When you specify the syscall
+          by its name, GDB uses its database of syscalls to convert the
+          name into the corresponding numeric code, but using the
+          number directly may be useful if GDB's database does not have
+          the complete list of syscalls on your system (e.g., because
+          GDB lags behind the OS upgrades).
+
+          The example below illustrates how this command works if you
+          don't provide arguments to it:
+
+               (gdb) catch syscall
+               Catchpoint 1 (syscall)
+               (gdb) r
+               Starting program: /tmp/catch-syscall
+
+               Catchpoint 1 (call to syscall 'close'), \
+               	   0xffffe424 in __kernel_vsyscall ()
+               (gdb) c
+               Continuing.
+
+               Catchpoint 1 (returned from syscall 'close'), \
+               	0xffffe424 in __kernel_vsyscall ()
+               (gdb)
+
+          Here is an example of catching a system call by name:
+
+               (gdb) catch syscall chroot
+               Catchpoint 1 (syscall 'chroot' [61])
+               (gdb) r
+               Starting program: /tmp/catch-syscall
+
+               Catchpoint 1 (call to syscall 'chroot'), \
+               		   0xffffe424 in __kernel_vsyscall ()
+               (gdb) c
+               Continuing.
+
+               Catchpoint 1 (returned from syscall 'chroot'), \
+               	0xffffe424 in __kernel_vsyscall ()
+               (gdb)
+
+          An example of specifying a system call numerically.  In the
+          case below, the syscall number has a corresponding entry in
+          the XML file, so GDB finds its name and prints it:
+
+               (gdb) catch syscall 252
+               Catchpoint 1 (syscall(s) 'exit_group')
+               (gdb) r
+               Starting program: /tmp/catch-syscall
+
+               Catchpoint 1 (call to syscall 'exit_group'), \
+               		   0xffffe424 in __kernel_vsyscall ()
+               (gdb) c
+               Continuing.
+
+               Program exited normally.
+               (gdb)
+
+          However, there can be situations when there is no
+          corresponding name in XML file for that syscall number.  In
+          this case, GDB prints a warning message saying that it was
+          not able to find the syscall name, but the catchpoint will be
+          set anyway.  See the example below:
+
+               (gdb) catch syscall 764
+               warning: The number '764' does not represent a known syscall.
+               Catchpoint 2 (syscall 764)
+               (gdb)
+
+          If you configure GDB using the `--without-expat' option, it
+          will not be able to display syscall names.  Also, if your
+          architecture does not have an XML file describing its system
+          calls, you will not be able to see the syscall names.  It is
+          important to notice that these two features are used for
+          accessing the syscall name database.  In either case, you
+          will see a warning like this:
+
+               (gdb) catch syscall
+               warning: Could not open "syscalls/i386-linux.xml"
+               warning: Could not load the syscall XML file 'syscalls/i386-linux.xml'.
+               GDB will not be able to display syscall names.
+               Catchpoint 1 (syscall)
+               (gdb)
+
+          Of course, the file name will change depending on your
+          architecture and system.
+
+          Still using the example above, you can also try to catch a
+          syscall by its number.  In this case, you would see something
+          like:
+
+               (gdb) catch syscall 252
+               Catchpoint 1 (syscall(s) 252)
+
+          Again, in this case GDB would not be able to display
+          syscall's names.
+
+    `fork'
+          A call to `fork'.  This is currently only available for HP-UX
+          and GNU/Linux.
+
+    `vfork'
+          A call to `vfork'.  This is currently only available for HP-UX
+          and GNU/Linux.
+
+    `load [regexp]'
+    `unload [regexp]'
+          The loading or unloading of a shared library.  If REGEXP is
+          given, then the catchpoint will stop only if the regular
+          expression matches one of the affected libraries.
+
+
+`tcatch EVENT'
+     Set a catchpoint that is enabled only for one stop.  The
+     catchpoint is automatically deleted after the first time the event
+     is caught.
+
+
+   Use the `info break' command to list the current catchpoints.
+
+   There are currently some limitations to C++ exception handling
+(`catch throw' and `catch catch') in GDB:
+
+   * If you call a function interactively, GDB normally returns control
+     to you when the function has finished executing.  If the call
+     raises an exception, however, the call may bypass the mechanism
+     that returns control to you and cause your program either to abort
+     or to simply continue running until it hits a breakpoint, catches
+     a signal that GDB is listening for, or exits.  This is the case
+     even if you set a catchpoint for the exception; catchpoints on
+     exceptions are disabled within interactive calls.
+
+   * You cannot raise an exception interactively.
+
+   * You cannot install an exception handler interactively.
+
+   Sometimes `catch' is not the best way to debug exception handling:
+if you need to know exactly where an exception is raised, it is better
+to stop _before_ the exception handler is called, since that way you
+can see the stack before any unwinding takes place.  If you set a
+breakpoint in an exception handler instead, it may not be easy to find
+out where the exception was raised.
+
+   To stop just before an exception handler is called, you need some
+knowledge of the implementation.  In the case of GNU C++, exceptions are
+raised by calling a library function named `__raise_exception' which
+has the following ANSI C interface:
+
+         /* ADDR is where the exception identifier is stored.
+            ID is the exception identifier.  */
+         void __raise_exception (void **addr, void *id);
+
+To make the debugger catch all exceptions before any stack unwinding
+takes place, set a breakpoint on `__raise_exception' (*note
+Breakpoints; Watchpoints; and Exceptions: Breakpoints.).
+
+   With a conditional breakpoint (*note Break Conditions: Conditions.)
+that depends on the value of ID, you can stop your program when a
+specific exception is raised.  You can use multiple conditional
+breakpoints to stop your program when any of a number of exceptions are
+raised.
+
+
+File: gdb.info,  Node: Delete Breaks,  Next: Disabling,  Prev: Set Catchpoints,  Up: Breakpoints
+
+5.1.4 Deleting Breakpoints
+--------------------------
+
+It is often necessary to eliminate a breakpoint, watchpoint, or
+catchpoint once it has done its job and you no longer want your program
+to stop there.  This is called "deleting" the breakpoint.  A breakpoint
+that has been deleted no longer exists; it is forgotten.
+
+   With the `clear' command you can delete breakpoints according to
+where they are in your program.  With the `delete' command you can
+delete individual breakpoints, watchpoints, or catchpoints by specifying
+their breakpoint numbers.
+
+   It is not necessary to delete a breakpoint to proceed past it.  GDB
+automatically ignores breakpoints on the first instruction to be
+executed when you continue execution without changing the execution
+address.
+
+`clear'
+     Delete any breakpoints at the next instruction to be executed in
+     the selected stack frame (*note Selecting a Frame: Selection.).
+     When the innermost frame is selected, this is a good way to delete
+     a breakpoint where your program just stopped.
+
+`clear LOCATION'
+     Delete any breakpoints set at the specified LOCATION.  *Note
+     Specify Location::, for the various forms of LOCATION; the most
+     useful ones are listed below:
+
+    `clear FUNCTION'
+    `clear FILENAME:FUNCTION'
+          Delete any breakpoints set at entry to the named FUNCTION.
+
+    `clear LINENUM'
+    `clear FILENAME:LINENUM'
+          Delete any breakpoints set at or within the code of the
+          specified LINENUM of the specified FILENAME.
+
+`delete [breakpoints] [RANGE...]'
+     Delete the breakpoints, watchpoints, or catchpoints of the
+     breakpoint ranges specified as arguments.  If no argument is
+     specified, delete all breakpoints (GDB asks confirmation, unless
+     you have `set confirm off').  You can abbreviate this command as
+     `d'.
+
+
+File: gdb.info,  Node: Disabling,  Next: Conditions,  Prev: Delete Breaks,  Up: Breakpoints
+
+5.1.5 Disabling Breakpoints
+---------------------------
+
+Rather than deleting a breakpoint, watchpoint, or catchpoint, you might
+prefer to "disable" it.  This makes the breakpoint inoperative as if it
+had been deleted, but remembers the information on the breakpoint so
+that you can "enable" it again later.
+
+   You disable and enable breakpoints, watchpoints, and catchpoints with
+the `enable' and `disable' commands, optionally specifying one or more
+breakpoint numbers as arguments.  Use `info break' to print a list of
+all breakpoints, watchpoints, and catchpoints if you do not know which
+numbers to use.
+
+   Disabling and enabling a breakpoint that has multiple locations
+affects all of its locations.
+
+   A breakpoint, watchpoint, or catchpoint can have any of several
+different states of enablement:
+
+   * Enabled.  The breakpoint stops your program.  A breakpoint set
+     with the `break' command starts out in this state.
+
+   * Disabled.  The breakpoint has no effect on your program.
+
+   * Enabled once.  The breakpoint stops your program, but then becomes
+     disabled.
+
+   * Enabled for a count.  The breakpoint stops your program for the
+     next N times, then becomes disabled.
+
+   * Enabled for deletion.  The breakpoint stops your program, but
+     immediately after it does so it is deleted permanently.  A
+     breakpoint set with the `tbreak' command starts out in this state.
+
+   You can use the following commands to enable or disable breakpoints,
+watchpoints, and catchpoints:
+
+`disable [breakpoints] [RANGE...]'
+     Disable the specified breakpoints--or all breakpoints, if none are
+     listed.  A disabled breakpoint has no effect but is not forgotten.
+     All options such as ignore-counts, conditions and commands are
+     remembered in case the breakpoint is enabled again later.  You may
+     abbreviate `disable' as `dis'.
+
+`enable [breakpoints] [RANGE...]'
+     Enable the specified breakpoints (or all defined breakpoints).
+     They become effective once again in stopping your program.
+
+`enable [breakpoints] once RANGE...'
+     Enable the specified breakpoints temporarily.  GDB disables any of
+     these breakpoints immediately after stopping your program.
+
+`enable [breakpoints] count COUNT RANGE...'
+     Enable the specified breakpoints temporarily.  GDB records COUNT
+     with each of the specified breakpoints, and decrements a
+     breakpoint's count when it is hit.  When any count reaches 0, GDB
+     disables that breakpoint.  If a breakpoint has an ignore count
+     (*note Break Conditions: Conditions.), that will be decremented to
+     0 before COUNT is affected.
+
+`enable [breakpoints] delete RANGE...'
+     Enable the specified breakpoints to work once, then die.  GDB
+     deletes any of these breakpoints as soon as your program stops
+     there.  Breakpoints set by the `tbreak' command start out in this
+     state.
+
+   Except for a breakpoint set with `tbreak' (*note Setting
+Breakpoints: Set Breaks.), breakpoints that you set are initially
+enabled; subsequently, they become disabled or enabled only when you
+use one of the commands above.  (The command `until' can set and delete
+a breakpoint of its own, but it does not change the state of your other
+breakpoints; see *Note Continuing and Stepping: Continuing and
+Stepping.)
+
+
+File: gdb.info,  Node: Conditions,  Next: Break Commands,  Prev: Disabling,  Up: Breakpoints
+
+5.1.6 Break Conditions
+----------------------
+
+The simplest sort of breakpoint breaks every time your program reaches a
+specified place.  You can also specify a "condition" for a breakpoint.
+A condition is just a Boolean expression in your programming language
+(*note Expressions: Expressions.).  A breakpoint with a condition
+evaluates the expression each time your program reaches it, and your
+program stops only if the condition is _true_.
+
+   This is the converse of using assertions for program validation; in
+that situation, you want to stop when the assertion is violated--that
+is, when the condition is false.  In C, if you want to test an
+assertion expressed by the condition ASSERT, you should set the
+condition `! ASSERT' on the appropriate breakpoint.
+
+   Conditions are also accepted for watchpoints; you may not need them,
+since a watchpoint is inspecting the value of an expression anyhow--but
+it might be simpler, say, to just set a watchpoint on a variable name,
+and specify a condition that tests whether the new value is an
+interesting one.
+
+   Break conditions can have side effects, and may even call functions
+in your program.  This can be useful, for example, to activate functions
+that log program progress, or to use your own print functions to format
+special data structures.  The effects are completely predictable unless
+there is another enabled breakpoint at the same address.  (In that
+case, GDB might see the other breakpoint first and stop your program
+without checking the condition of this one.)  Note that breakpoint
+commands are usually more convenient and flexible than break conditions
+for the purpose of performing side effects when a breakpoint is reached
+(*note Breakpoint Command Lists: Break Commands.).
+
+   Breakpoint conditions can also be evaluated on the target's side if
+the target supports it.  Instead of evaluating the conditions locally,
+GDB encodes the expression into an agent expression (*note Agent
+Expressions::) suitable for execution on the target, independently of
+GDB.  Global variables become raw memory locations, locals become stack
+accesses, and so forth.
+
+   In this case, GDB will only be notified of a breakpoint trigger when
+its condition evaluates to true.  This mechanism may provide faster
+response times depending on the performance characteristics of the
+target since it does not need to keep GDB informed about every
+breakpoint trigger, even those with false conditions.
+
+   Break conditions can be specified when a breakpoint is set, by using
+`if' in the arguments to the `break' command.  *Note Setting
+Breakpoints: Set Breaks.  They can also be changed at any time with the
+`condition' command.
+
+   You can also use the `if' keyword with the `watch' command.  The
+`catch' command does not recognize the `if' keyword; `condition' is the
+only way to impose a further condition on a catchpoint.
+
+`condition BNUM EXPRESSION'
+     Specify EXPRESSION as the break condition for breakpoint,
+     watchpoint, or catchpoint number BNUM.  After you set a condition,
+     breakpoint BNUM stops your program only if the value of EXPRESSION
+     is true (nonzero, in C).  When you use `condition', GDB checks
+     EXPRESSION immediately for syntactic correctness, and to determine
+     whether symbols in it have referents in the context of your
+     breakpoint.  If EXPRESSION uses symbols not referenced in the
+     context of the breakpoint, GDB prints an error message:
+
+          No symbol "foo" in current context.
+
+     GDB does not actually evaluate EXPRESSION at the time the
+     `condition' command (or a command that sets a breakpoint with a
+     condition, like `break if ...') is given, however.  *Note
+     Expressions: Expressions.
+
+`condition BNUM'
+     Remove the condition from breakpoint number BNUM.  It becomes an
+     ordinary unconditional breakpoint.
+
+   A special case of a breakpoint condition is to stop only when the
+breakpoint has been reached a certain number of times.  This is so
+useful that there is a special way to do it, using the "ignore count"
+of the breakpoint.  Every breakpoint has an ignore count, which is an
+integer.  Most of the time, the ignore count is zero, and therefore has
+no effect.  But if your program reaches a breakpoint whose ignore count
+is positive, then instead of stopping, it just decrements the ignore
+count by one and continues.  As a result, if the ignore count value is
+N, the breakpoint does not stop the next N times your program reaches
+it.
+
+`ignore BNUM COUNT'
+     Set the ignore count of breakpoint number BNUM to COUNT.  The next
+     COUNT times the breakpoint is reached, your program's execution
+     does not stop; other than to decrement the ignore count, GDB takes
+     no action.
+
+     To make the breakpoint stop the next time it is reached, specify a
+     count of zero.
+
+     When you use `continue' to resume execution of your program from a
+     breakpoint, you can specify an ignore count directly as an
+     argument to `continue', rather than using `ignore'.  *Note
+     Continuing and Stepping: Continuing and Stepping.
+
+     If a breakpoint has a positive ignore count and a condition, the
+     condition is not checked.  Once the ignore count reaches zero, GDB
+     resumes checking the condition.
+
+     You could achieve the effect of the ignore count with a condition
+     such as `$foo-- <= 0' using a debugger convenience variable that
+     is decremented each time.  *Note Convenience Variables:
+     Convenience Vars.
+
+   Ignore counts apply to breakpoints, watchpoints, and catchpoints.
+
+
+File: gdb.info,  Node: Break Commands,  Next: Dynamic Printf,  Prev: Conditions,  Up: Breakpoints
+
+5.1.7 Breakpoint Command Lists
+------------------------------
+
+You can give any breakpoint (or watchpoint or catchpoint) a series of
+commands to execute when your program stops due to that breakpoint.  For
+example, you might want to print the values of certain expressions, or
+enable other breakpoints.
+
+`commands [RANGE...]'
+`... COMMAND-LIST ...'
+`end'
+     Specify a list of commands for the given breakpoints.  The commands
+     themselves appear on the following lines.  Type a line containing
+     just `end' to terminate the commands.
+
+     To remove all commands from a breakpoint, type `commands' and
+     follow it immediately with `end'; that is, give no commands.
+
+     With no argument, `commands' refers to the last breakpoint,
+     watchpoint, or catchpoint set (not to the breakpoint most recently
+     encountered).  If the most recent breakpoints were set with a
+     single command, then the `commands' will apply to all the
+     breakpoints set by that command.  This applies to breakpoints set
+     by `rbreak', and also applies when a single `break' command
+     creates multiple breakpoints (*note Ambiguous Expressions:
+     Ambiguous Expressions.).
+
+   Pressing <RET> as a means of repeating the last GDB command is
+disabled within a COMMAND-LIST.
+
+   You can use breakpoint commands to start your program up again.
+Simply use the `continue' command, or `step', or any other command that
+resumes execution.
+
+   Any other commands in the command list, after a command that resumes
+execution, are ignored.  This is because any time you resume execution
+(even with a simple `next' or `step'), you may encounter another
+breakpoint--which could have its own command list, leading to
+ambiguities about which list to execute.
+
+   If the first command you specify in a command list is `silent', the
+usual message about stopping at a breakpoint is not printed.  This may
+be desirable for breakpoints that are to print a specific message and
+then continue.  If none of the remaining commands print anything, you
+see no sign that the breakpoint was reached.  `silent' is meaningful
+only at the beginning of a breakpoint command list.
+
+   The commands `echo', `output', and `printf' allow you to print
+precisely controlled output, and are often useful in silent
+breakpoints.  *Note Commands for Controlled Output: Output.
+
+   For example, here is how you could use breakpoint commands to print
+the value of `x' at entry to `foo' whenever `x' is positive.
+
+     break foo if x>0
+     commands
+     silent
+     printf "x is %d\n",x
+     cont
+     end
+
+   One application for breakpoint commands is to compensate for one bug
+so you can test for another.  Put a breakpoint just after the erroneous
+line of code, give it a condition to detect the case in which something
+erroneous has been done, and give it commands to assign correct values
+to any variables that need them.  End with the `continue' command so
+that your program does not stop, and start with the `silent' command so
+that no output is produced.  Here is an example:
+
+     break 403
+     commands
+     silent
+     set x = y + 4
+     cont
+     end
+
+
+File: gdb.info,  Node: Dynamic Printf,  Next: Save Breakpoints,  Prev: Break Commands,  Up: Breakpoints
+
+5.1.8 Dynamic Printf
+--------------------
+
+The dynamic printf command `dprintf' combines a breakpoint with
+formatted printing of your program's data to give you the effect of
+inserting `printf' calls into your program on-the-fly, without having
+to recompile it.
+
+   In its most basic form, the output goes to the GDB console.  However,
+you can set the variable `dprintf-style' for alternate handling.  For
+instance, you can ask to format the output by calling your program's
+`printf' function.  This has the advantage that the characters go to
+the program's output device, so they can recorded in redirects to files
+and so forth.
+
+   If you are doing remote debugging with a stub or agent, you can also
+ask to have the printf handled by the remote agent.  In addition to
+ensuring that the output goes to the remote program's device along with
+any other output the program might produce, you can also ask that the
+dprintf remain active even after disconnecting from the remote target.
+Using the stub/agent is also more efficient, as it can do everything
+without needing to communicate with GDB.
+
+`dprintf LOCATION,TEMPLATE,EXPRESSION[,EXPRESSION...]'
+     Whenever execution reaches LOCATION, print the values of one or
+     more EXPRESSIONS under the control of the string TEMPLATE.  To
+     print several values, separate them with commas.
+
+`set dprintf-style STYLE'
+     Set the dprintf output to be handled in one of several different
+     styles enumerated below.  A change of style affects all existing
+     dynamic printfs immediately.  (If you need individual control over
+     the print commands, simply define normal breakpoints with
+     explicitly-supplied command lists.)
+
+`gdb'
+     Handle the output using the GDB `printf' command.
+
+`call'
+     Handle the output by calling a function in your program (normally
+     `printf').
+
+`agent'
+     Have the remote debugging agent (such as `gdbserver') handle the
+     output itself.  This style is only available for agents that
+     support running commands on the target.
+
+`set dprintf-function FUNCTION'
+     Set the function to call if the dprintf style is `call'.  By
+     default its value is `printf'.  You may set it to any expression.
+     that GDB can evaluate to a function, as per the `call' command.
+
+`set dprintf-channel CHANNEL'
+     Set a "channel" for dprintf.  If set to a non-empty value, GDB
+     will evaluate it as an expression and pass the result as a first
+     argument to the `dprintf-function', in the manner of `fprintf' and
+     similar functions.  Otherwise, the dprintf format string will be
+     the first argument, in the manner of `printf'.
+
+     As an example, if you wanted `dprintf' output to go to a logfile
+     that is a standard I/O stream assigned to the variable `mylog',
+     you could do the following:
+
+          (gdb) set dprintf-style call
+          (gdb) set dprintf-function fprintf
+          (gdb) set dprintf-channel mylog
+          (gdb) dprintf 25,"at line 25, glob=%d\n",glob
+          Dprintf 1 at 0x123456: file main.c, line 25.
+          (gdb) info break
+          1       dprintf        keep y   0x00123456 in main at main.c:25
+                  call (void) fprintf (mylog,"at line 25, glob=%d\n",glob)
+                  continue
+          (gdb)
+
+     Note that the `info break' displays the dynamic printf commands as
+     normal breakpoint commands; you can thus easily see the effect of
+     the variable settings.
+
+`set disconnected-dprintf on'
+`set disconnected-dprintf off'
+     Choose whether `dprintf' commands should continue to run if GDB
+     has disconnected from the target.  This only applies if the
+     `dprintf-style' is `agent'.
+
+`show disconnected-dprintf off'
+     Show the current choice for disconnected `dprintf'.
+
+
+   GDB does not check the validity of function and channel, relying on
+you to supply values that are meaningful for the contexts in which they
+are being used.  For instance, the function and channel may be the
+values of local variables, but if that is the case, then all enabled
+dynamic prints must be at locations within the scope of those locals.
+If evaluation fails, GDB will report an error.
+
+
+File: gdb.info,  Node: Save Breakpoints,  Next: Static Probe Points,  Prev: Dynamic Printf,  Up: Breakpoints
+
+5.1.9 How to save breakpoints to a file
+---------------------------------------
+
+To save breakpoint definitions to a file use the `save breakpoints'
+command.
+
+`save breakpoints [FILENAME]'
+     This command saves all current breakpoint definitions together with
+     their commands and ignore counts, into a file `FILENAME' suitable
+     for use in a later debugging session.  This includes all types of
+     breakpoints (breakpoints, watchpoints, catchpoints, tracepoints).
+     To read the saved breakpoint definitions, use the `source' command
+     (*note Command Files::).  Note that watchpoints with expressions
+     involving local variables may fail to be recreated because it may
+     not be possible to access the context where the watchpoint is
+     valid anymore.  Because the saved breakpoint definitions are
+     simply a sequence of GDB commands that recreate the breakpoints,
+     you can edit the file in your favorite editing program, and remove
+     the breakpoint definitions you're not interested in, or that can
+     no longer be recreated.
+
+
+File: gdb.info,  Node: Static Probe Points,  Next: Error in Breakpoints,  Prev: Save Breakpoints,  Up: Breakpoints
+
+5.1.10 Static Probe Points
+--------------------------
+
+GDB supports "SDT" probes in the code.  SDT stands for Statically
+Defined Tracing, and the probes are designed to have a tiny runtime
+code and data footprint, and no dynamic relocations.  They are usable
+from assembly, C and C++ languages.  See
+`http://sourceware.org/systemtap/wiki/UserSpaceProbeImplementation' for
+a good reference on how the SDT probes are implemented.
+
+   Currently, `SystemTap' (`http://sourceware.org/systemtap/') SDT
+probes are supported on ELF-compatible systems.  See
+`http://sourceware.org/systemtap/wiki/AddingUserSpaceProbingToApps' for
+more information on how to add `SystemTap' SDT probes in your
+applications.
+
+   Some probes have an associated semaphore variable; for instance, this
+happens automatically if you defined your probe using a DTrace-style
+`.d' file.  If your probe has a semaphore, GDB will automatically
+enable it when you specify a breakpoint using the `-probe-stap'
+notation.  But, if you put a breakpoint at a probe's location by some
+other method (e.g., `break file:line'), then GDB will not automatically
+set the semaphore.
+
+   You can examine the available static static probes using `info
+probes', with optional arguments:
+
+`info probes stap [PROVIDER [NAME [OBJFILE]]]'
+     If given, PROVIDER is a regular expression used to match against
+     provider names when selecting which probes to list.  If omitted,
+     probes by all probes from all providers are listed.
+
+     If given, NAME is a regular expression to match against probe names
+     when selecting which probes to list.  If omitted, probe names are
+     not considered when deciding whether to display them.
+
+     If given, OBJFILE is a regular expression used to select which
+     object files (executable or shared libraries) to examine.  If not
+     given, all object files are considered.
+
+`info probes all'
+     List the available static probes, from all types.
+
+   A probe may specify up to twelve arguments.  These are available at
+the point at which the probe is defined--that is, when the current PC is
+at the probe's location.  The arguments are available using the
+convenience variables (*note Convenience Vars::)
+`$_probe_arg0'...`$_probe_arg11'.  Each probe argument is an integer of
+the appropriate size; types are not preserved.  The convenience
+variable `$_probe_argc' holds the number of arguments at the current
+probe point.
+
+   These variables are always available, but attempts to access them at
+any location other than a probe point will cause GDB to give an error
+message.
+
+
+File: gdb.info,  Node: Error in Breakpoints,  Next: Breakpoint-related Warnings,  Prev: Static Probe Points,  Up: Breakpoints
+
+5.1.11 "Cannot insert breakpoints"
+----------------------------------
+
+If you request too many active hardware-assisted breakpoints and
+watchpoints, you will see this error message:
+
+     Stopped; cannot insert breakpoints.
+     You may have requested too many hardware breakpoints and watchpoints.
+
+This message is printed when you attempt to resume the program, since
+only then GDB knows exactly how many hardware breakpoints and
+watchpoints it needs to insert.
+
+   When this message is printed, you need to disable or remove some of
+the hardware-assisted breakpoints and watchpoints, and then continue.
+
+
+File: gdb.info,  Node: Breakpoint-related Warnings,  Prev: Error in Breakpoints,  Up: Breakpoints
+
+5.1.12 "Breakpoint address adjusted..."
+---------------------------------------
+
+Some processor architectures place constraints on the addresses at
+which breakpoints may be placed.  For architectures thus constrained,
+GDB will attempt to adjust the breakpoint's address to comply with the
+constraints dictated by the architecture.
+
+   One example of such an architecture is the Fujitsu FR-V.  The FR-V is
+a VLIW architecture in which a number of RISC-like instructions may be
+bundled together for parallel execution.  The FR-V architecture
+constrains the location of a breakpoint instruction within such a
+bundle to the instruction with the lowest address.  GDB honors this
+constraint by adjusting a breakpoint's address to the first in the
+bundle.
+
+   It is not uncommon for optimized code to have bundles which contain
+instructions from different source statements, thus it may happen that
+a breakpoint's address will be adjusted from one source statement to
+another.  Since this adjustment may significantly alter GDB's
+breakpoint related behavior from what the user expects, a warning is
+printed when the breakpoint is first set and also when the breakpoint
+is hit.
+
+   A warning like the one below is printed when setting a breakpoint
+that's been subject to address adjustment:
+
+     warning: Breakpoint address adjusted from 0x00010414 to 0x00010410.
+
+   Such warnings are printed both for user settable and GDB's internal
+breakpoints.  If you see one of these warnings, you should verify that
+a breakpoint set at the adjusted address will have the desired affect.
+If not, the breakpoint in question may be removed and other breakpoints
+may be set which will have the desired behavior.  E.g., it may be
+sufficient to place the breakpoint at a later instruction.  A
+conditional breakpoint may also be useful in some cases to prevent the
+breakpoint from triggering too often.
+
+   GDB will also issue a warning when stopping at one of these adjusted
+breakpoints:
+
+     warning: Breakpoint 1 address previously adjusted from 0x00010414
+     to 0x00010410.
+
+   When this warning is encountered, it may be too late to take remedial
+action except in cases where the breakpoint is hit earlier or more
+frequently than expected.
+
+
+File: gdb.info,  Node: Continuing and Stepping,  Next: Skipping Over Functions and Files,  Prev: Breakpoints,  Up: Stopping
+
+5.2 Continuing and Stepping
+===========================
+
+"Continuing" means resuming program execution until your program
+completes normally.  In contrast, "stepping" means executing just one
+more "step" of your program, where "step" may mean either one line of
+source code, or one machine instruction (depending on what particular
+command you use).  Either when continuing or when stepping, your
+program may stop even sooner, due to a breakpoint or a signal.  (If it
+stops due to a signal, you may want to use `handle', or use `signal 0'
+to resume execution.  *Note Signals: Signals.)
+
+`continue [IGNORE-COUNT]'
+`c [IGNORE-COUNT]'
+`fg [IGNORE-COUNT]'
+     Resume program execution, at the address where your program last
+     stopped; any breakpoints set at that address are bypassed.  The
+     optional argument IGNORE-COUNT allows you to specify a further
+     number of times to ignore a breakpoint at this location; its
+     effect is like that of `ignore' (*note Break Conditions:
+     Conditions.).
+
+     The argument IGNORE-COUNT is meaningful only when your program
+     stopped due to a breakpoint.  At other times, the argument to
+     `continue' is ignored.
+
+     The synonyms `c' and `fg' (for "foreground", as the debugged
+     program is deemed to be the foreground program) are provided
+     purely for convenience, and have exactly the same behavior as
+     `continue'.
+
+   To resume execution at a different place, you can use `return'
+(*note Returning from a Function: Returning.) to go back to the calling
+function; or `jump' (*note Continuing at a Different Address: Jumping.)
+to go to an arbitrary location in your program.
+
+   A typical technique for using stepping is to set a breakpoint (*note
+Breakpoints; Watchpoints; and Catchpoints: Breakpoints.) at the
+beginning of the function or the section of your program where a problem
+is believed to lie, run your program until it stops at that breakpoint,
+and then step through the suspect area, examining the variables that are
+interesting, until you see the problem happen.
+
+`step'
+     Continue running your program until control reaches a different
+     source line, then stop it and return control to GDB.  This command
+     is abbreviated `s'.
+
+          _Warning:_ If you use the `step' command while control is
+          within a function that was compiled without debugging
+          information, execution proceeds until control reaches a
+          function that does have debugging information.  Likewise, it
+          will not step into a function which is compiled without
+          debugging information.  To step through functions without
+          debugging information, use the `stepi' command, described
+          below.
+
+     The `step' command only stops at the first instruction of a source
+     line.  This prevents the multiple stops that could otherwise occur
+     in `switch' statements, `for' loops, etc.  `step' continues to
+     stop if a function that has debugging information is called within
+     the line.  In other words, `step' _steps inside_ any functions
+     called within the line.
+
+     Also, the `step' command only enters a function if there is line
+     number information for the function.  Otherwise it acts like the
+     `next' command.  This avoids problems when using `cc -gl' on MIPS
+     machines.  Previously, `step' entered subroutines if there was any
+     debugging information about the routine.
+
+`step COUNT'
+     Continue running as in `step', but do so COUNT times.  If a
+     breakpoint is reached, or a signal not related to stepping occurs
+     before COUNT steps, stepping stops right away.
+
+`next [COUNT]'
+     Continue to the next source line in the current (innermost) stack
+     frame.  This is similar to `step', but function calls that appear
+     within the line of code are executed without stopping.  Execution
+     stops when control reaches a different line of code at the
+     original stack level that was executing when you gave the `next'
+     command.  This command is abbreviated `n'.
+
+     An argument COUNT is a repeat count, as for `step'.
+
+     The `next' command only stops at the first instruction of a source
+     line.  This prevents multiple stops that could otherwise occur in
+     `switch' statements, `for' loops, etc.
+
+`set step-mode'
+`set step-mode on'
+     The `set step-mode on' command causes the `step' command to stop
+     at the first instruction of a function which contains no debug line
+     information rather than stepping over it.
+
+     This is useful in cases where you may be interested in inspecting
+     the machine instructions of a function which has no symbolic info
+     and do not want GDB to automatically skip over this function.
+
+`set step-mode off'
+     Causes the `step' command to step over any functions which
+     contains no debug information.  This is the default.
+
+`show step-mode'
+     Show whether GDB will stop in or step over functions without
+     source line debug information.
+
+`finish'
+     Continue running until just after function in the selected stack
+     frame returns.  Print the returned value (if any).  This command
+     can be abbreviated as `fin'.
+
+     Contrast this with the `return' command (*note Returning from a
+     Function: Returning.).
+
+`until'
+`u'
+     Continue running until a source line past the current line, in the
+     current stack frame, is reached.  This command is used to avoid
+     single stepping through a loop more than once.  It is like the
+     `next' command, except that when `until' encounters a jump, it
+     automatically continues execution until the program counter is
+     greater than the address of the jump.
+
+     This means that when you reach the end of a loop after single
+     stepping though it, `until' makes your program continue execution
+     until it exits the loop.  In contrast, a `next' command at the end
+     of a loop simply steps back to the beginning of the loop, which
+     forces you to step through the next iteration.
+
+     `until' always stops your program if it attempts to exit the
+     current stack frame.
+
+     `until' may produce somewhat counterintuitive results if the order
+     of machine code does not match the order of the source lines.  For
+     example, in the following excerpt from a debugging session, the `f'
+     (`frame') command shows that execution is stopped at line `206';
+     yet when we use `until', we get to line `195':
+
+          (gdb) f
+          #0  main (argc=4, argv=0xf7fffae8) at m4.c:206
+          206                 expand_input();
+          (gdb) until
+          195             for ( ; argc > 0; NEXTARG) {
+
+     This happened because, for execution efficiency, the compiler had
+     generated code for the loop closure test at the end, rather than
+     the start, of the loop--even though the test in a C `for'-loop is
+     written before the body of the loop.  The `until' command appeared
+     to step back to the beginning of the loop when it advanced to this
+     expression; however, it has not really gone to an earlier
+     statement--not in terms of the actual machine code.
+
+     `until' with no argument works by means of single instruction
+     stepping, and hence is slower than `until' with an argument.
+
+`until LOCATION'
+`u LOCATION'
+     Continue running your program until either the specified location
+     is reached, or the current stack frame returns.  LOCATION is any of
+     the forms described in *Note Specify Location::.  This form of the
+     command uses temporary breakpoints, and hence is quicker than
+     `until' without an argument.  The specified location is actually
+     reached only if it is in the current frame.  This implies that
+     `until' can be used to skip over recursive function invocations.
+     For instance in the code below, if the current location is line
+     `96', issuing `until 99' will execute the program up to line `99'
+     in the same invocation of factorial, i.e., after the inner
+     invocations have returned.
+
+          94	int factorial (int value)
+          95	{
+          96	    if (value > 1) {
+          97            value *= factorial (value - 1);
+          98	    }
+          99	    return (value);
+          100     }
+
+`advance LOCATION'
+     Continue running the program up to the given LOCATION.  An
+     argument is required, which should be of one of the forms
+     described in *Note Specify Location::.  Execution will also stop
+     upon exit from the current stack frame.  This command is similar
+     to `until', but `advance' will not skip over recursive function
+     calls, and the target location doesn't have to be in the same
+     frame as the current one.
+
+`stepi'
+`stepi ARG'
+`si'
+     Execute one machine instruction, then stop and return to the
+     debugger.
+
+     It is often useful to do `display/i $pc' when stepping by machine
+     instructions.  This makes GDB automatically display the next
+     instruction to be executed, each time your program stops.  *Note
+     Automatic Display: Auto Display.
+
+     An argument is a repeat count, as in `step'.
+
+`nexti'
+`nexti ARG'
+`ni'
+     Execute one machine instruction, but if it is a function call,
+     proceed until the function returns.
+
+     An argument is a repeat count, as in `next'.
+
+
+File: gdb.info,  Node: Skipping Over Functions and Files,  Next: Signals,  Prev: Continuing and Stepping,  Up: Stopping
+
+5.3 Skipping Over Functions and Files
+=====================================
+
+The program you are debugging may contain some functions which are
+uninteresting to debug.  The `skip' comand lets you tell GDB to skip a
+function or all functions in a file when stepping.
+
+   For example, consider the following C function:
+
+     101     int func()
+     102     {
+     103         foo(boring());
+     104         bar(boring());
+     105     }
+
+Suppose you wish to step into the functions `foo' and `bar', but you
+are not interested in stepping through `boring'.  If you run `step' at
+line 103, you'll enter `boring()', but if you run `next', you'll step
+over both `foo' and `boring'!
+
+   One solution is to `step' into `boring' and use the `finish' command
+to immediately exit it.  But this can become tedious if `boring' is
+called from many places.
+
+   A more flexible solution is to execute `skip boring'.  This instructs
+GDB never to step into `boring'.  Now when you execute `step' at line
+103, you'll step over `boring' and directly into `foo'.
+
+   You can also instruct GDB to skip all functions in a file, with, for
+example, `skip file boring.c'.
+
+`skip [LINESPEC]'
+`skip function [LINESPEC]'
+     After running this command, the function named by LINESPEC or the
+     function containing the line named by LINESPEC will be skipped
+     over when stepping.  *Note Specify Location::.
+
+     If you do not specify LINESPEC, the function you're currently
+     debugging will be skipped.
+
+     (If you have a function called `file' that you want to skip, use
+     `skip function file'.)
+
+`skip file [FILENAME]'
+     After running this command, any function whose source lives in
+     FILENAME will be skipped over when stepping.
+
+     If you do not specify FILENAME, functions whose source lives in
+     the file you're currently debugging will be skipped.
+
+   Skips can be listed, deleted, disabled, and enabled, much like
+breakpoints.  These are the commands for managing your list of skips:
+
+`info skip [RANGE]'
+     Print details about the specified skip(s).  If RANGE is not
+     specified, print a table with details about all functions and
+     files marked for skipping.  `info skip' prints the following
+     information about each skip:
+
+    _Identifier_
+          A number identifying this skip.
+
+    _Type_
+          The type of this skip, either `function' or `file'.
+
+    _Enabled or Disabled_
+          Enabled skips are marked with `y'.  Disabled skips are marked
+          with `n'.
+
+    _Address_
+          For function skips, this column indicates the address in
+          memory of the function being skipped.  If you've set a
+          function skip on a function which has not yet been loaded,
+          this field will contain `<PENDING>'.  Once a shared library
+          which has the function is loaded, `info skip' will show the
+          function's address here.
+
+    _What_
+          For file skips, this field contains the filename being
+          skipped.  For functions skips, this field contains the
+          function name and its line number in the file where it is
+          defined.
+
+`skip delete [RANGE]'
+     Delete the specified skip(s).  If RANGE is not specified, delete
+     all skips.
+
+`skip enable [RANGE]'
+     Enable the specified skip(s).  If RANGE is not specified, enable
+     all skips.
+
+`skip disable [RANGE]'
+     Disable the specified skip(s).  If RANGE is not specified, disable
+     all skips.
+
+
+
+File: gdb.info,  Node: Signals,  Next: Thread Stops,  Prev: Skipping Over Functions and Files,  Up: Stopping
+
+5.4 Signals
+===========
+
+A signal is an asynchronous event that can happen in a program.  The
+operating system defines the possible kinds of signals, and gives each
+kind a name and a number.  For example, in Unix `SIGINT' is the signal
+a program gets when you type an interrupt character (often `Ctrl-c');
+`SIGSEGV' is the signal a program gets from referencing a place in
+memory far away from all the areas in use; `SIGALRM' occurs when the
+alarm clock timer goes off (which happens only if your program has
+requested an alarm).
+
+   Some signals, including `SIGALRM', are a normal part of the
+functioning of your program.  Others, such as `SIGSEGV', indicate
+errors; these signals are "fatal" (they kill your program immediately)
+if the program has not specified in advance some other way to handle
+the signal.  `SIGINT' does not indicate an error in your program, but
+it is normally fatal so it can carry out the purpose of the interrupt:
+to kill the program.
+
+   GDB has the ability to detect any occurrence of a signal in your
+program.  You can tell GDB in advance what to do for each kind of
+signal.
+
+   Normally, GDB is set up to let the non-erroneous signals like
+`SIGALRM' be silently passed to your program (so as not to interfere
+with their role in the program's functioning) but to stop your program
+immediately whenever an error signal happens.  You can change these
+settings with the `handle' command.
+
+`info signals'
+`info handle'
+     Print a table of all the kinds of signals and how GDB has been
+     told to handle each one.  You can use this to see the signal
+     numbers of all the defined types of signals.
+
+`info signals SIG'
+     Similar, but print information only about the specified signal
+     number.
+
+     `info handle' is an alias for `info signals'.
+
+`handle SIGNAL [KEYWORDS...]'
+     Change the way GDB handles signal SIGNAL.  SIGNAL can be the
+     number of a signal or its name (with or without the `SIG' at the
+     beginning); a list of signal numbers of the form `LOW-HIGH'; or
+     the word `all', meaning all the known signals.  Optional arguments
+     KEYWORDS, described below, say what change to make.
+
+   The keywords allowed by the `handle' command can be abbreviated.
+Their full names are:
+
+`nostop'
+     GDB should not stop your program when this signal happens.  It may
+     still print a message telling you that the signal has come in.
+
+`stop'
+     GDB should stop your program when this signal happens.  This
+     implies the `print' keyword as well.
+
+`print'
+     GDB should print a message when this signal happens.
+
+`noprint'
+     GDB should not mention the occurrence of the signal at all.  This
+     implies the `nostop' keyword as well.
+
+`pass'
+`noignore'
+     GDB should allow your program to see this signal; your program can
+     handle the signal, or else it may terminate if the signal is fatal
+     and not handled.  `pass' and `noignore' are synonyms.
+
+`nopass'
+`ignore'
+     GDB should not allow your program to see this signal.  `nopass'
+     and `ignore' are synonyms.
+
+   When a signal stops your program, the signal is not visible to the
+program until you continue.  Your program sees the signal then, if
+`pass' is in effect for the signal in question _at that time_.  In
+other words, after GDB reports a signal, you can use the `handle'
+command with `pass' or `nopass' to control whether your program sees
+that signal when you continue.
+
+   The default is set to `nostop', `noprint', `pass' for non-erroneous
+signals such as `SIGALRM', `SIGWINCH' and `SIGCHLD', and to `stop',
+`print', `pass' for the erroneous signals.
+
+   You can also use the `signal' command to prevent your program from
+seeing a signal, or cause it to see a signal it normally would not see,
+or to give it any signal at any time.  For example, if your program
+stopped due to some sort of memory reference error, you might store
+correct values into the erroneous variables and continue, hoping to see
+more execution; but your program would probably terminate immediately as
+a result of the fatal signal once it saw the signal.  To prevent this,
+you can continue with `signal 0'.  *Note Giving your Program a Signal:
+Signaling.
+
+   On some targets, GDB can inspect extra signal information associated
+with the intercepted signal, before it is actually delivered to the
+program being debugged.  This information is exported by the
+convenience variable `$_siginfo', and consists of data that is passed
+by the kernel to the signal handler at the time of the receipt of a
+signal.  The data type of the information itself is target dependent.
+You can see the data type using the `ptype $_siginfo' command.  On Unix
+systems, it typically corresponds to the standard `siginfo_t' type, as
+defined in the `signal.h' system header.
+
+   Here's an example, on a GNU/Linux system, printing the stray
+referenced address that raised a segmentation fault.
+
+     (gdb) continue
+     Program received signal SIGSEGV, Segmentation fault.
+     0x0000000000400766 in main ()
+     69        *(int *)p = 0;
+     (gdb) ptype $_siginfo
+     type = struct {
+         int si_signo;
+         int si_errno;
+         int si_code;
+         union {
+             int _pad[28];
+             struct {...} _kill;
+             struct {...} _timer;
+             struct {...} _rt;
+             struct {...} _sigchld;
+             struct {...} _sigfault;
+             struct {...} _sigpoll;
+         } _sifields;
+     }
+     (gdb) ptype $_siginfo._sifields._sigfault
+     type = struct {
+         void *si_addr;
+     }
+     (gdb) p $_siginfo._sifields._sigfault.si_addr
+     $1 = (void *) 0x7ffff7ff7000
+
+   Depending on target support, `$_siginfo' may also be writable.
+
+
+File: gdb.info,  Node: Thread Stops,  Prev: Signals,  Up: Stopping
+
+5.5 Stopping and Starting Multi-thread Programs
+===============================================
+
+GDB supports debugging programs with multiple threads (*note Debugging
+Programs with Multiple Threads: Threads.).  There are two modes of
+controlling execution of your program within the debugger.  In the
+default mode, referred to as "all-stop mode", when any thread in your
+program stops (for example, at a breakpoint or while being stepped),
+all other threads in the program are also stopped by GDB.  On some
+targets, GDB also supports "non-stop mode", in which other threads can
+continue to run freely while you examine the stopped thread in the
+debugger.
+
+* Menu:
+
+* All-Stop Mode::		All threads stop when GDB takes control
+* Non-Stop Mode::		Other threads continue to execute
+* Background Execution::	Running your program asynchronously
+* Thread-Specific Breakpoints::	Controlling breakpoints
+* Interrupted System Calls::	GDB may interfere with system calls
+* Observer Mode::               GDB does not alter program behavior
+
+
+File: gdb.info,  Node: All-Stop Mode,  Next: Non-Stop Mode,  Up: Thread Stops
+
+5.5.1 All-Stop Mode
+-------------------
+
+In all-stop mode, whenever your program stops under GDB for any reason,
+_all_ threads of execution stop, not just the current thread.  This
+allows you to examine the overall state of the program, including
+switching between threads, without worrying that things may change
+underfoot.
+
+   Conversely, whenever you restart the program, _all_ threads start
+executing.  _This is true even when single-stepping_ with commands like
+`step' or `next'.
+
+   In particular, GDB cannot single-step all threads in lockstep.
+Since thread scheduling is up to your debugging target's operating
+system (not controlled by GDB), other threads may execute more than one
+statement while the current thread completes a single step.  Moreover,
+in general other threads stop in the middle of a statement, rather than
+at a clean statement boundary, when the program stops.
+
+   You might even find your program stopped in another thread after
+continuing or even single-stepping.  This happens whenever some other
+thread runs into a breakpoint, a signal, or an exception before the
+first thread completes whatever you requested.
+
+   Whenever GDB stops your program, due to a breakpoint or a signal, it
+automatically selects the thread where that breakpoint or signal
+happened.  GDB alerts you to the context switch with a message such as
+`[Switching to Thread N]' to identify the thread.
+
+   On some OSes, you can modify GDB's default behavior by locking the
+OS scheduler to allow only a single thread to run.
+
+`set scheduler-locking MODE'
+     Set the scheduler locking mode.  If it is `off', then there is no
+     locking and any thread may run at any time.  If `on', then only the
+     current thread may run when the inferior is resumed.  The `step'
+     mode optimizes for single-stepping; it prevents other threads from
+     preempting the current thread while you are stepping, so that the
+     focus of debugging does not change unexpectedly.  Other threads
+     only rarely (or never) get a chance to run when you step.  They
+     are more likely to run when you `next' over a function call, and
+     they are completely free to run when you use commands like
+     `continue', `until', or `finish'.  However, unless another thread
+     hits a breakpoint during its timeslice, GDB does not change the
+     current thread away from the thread that you are debugging.
+
+`show scheduler-locking'
+     Display the current scheduler locking mode.
+
+   By default, when you issue one of the execution commands such as
+`continue', `next' or `step', GDB allows only threads of the current
+inferior to run.  For example, if GDB is attached to two inferiors,
+each with two threads, the `continue' command resumes only the two
+threads of the current inferior.  This is useful, for example, when you
+debug a program that forks and you want to hold the parent stopped (so
+that, for instance, it doesn't run to exit), while you debug the child.
+In other situations, you may not be interested in inspecting the
+current state of any of the processes GDB is attached to, and you may
+want to resume them all until some breakpoint is hit.  In the latter
+case, you can instruct GDB to allow all threads of all the inferiors to
+run with the `set schedule-multiple' command.
+
+`set schedule-multiple'
+     Set the mode for allowing threads of multiple processes to be
+     resumed when an execution command is issued.  When `on', all
+     threads of all processes are allowed to run.  When `off', only the
+     threads of the current process are resumed.  The default is `off'.
+     The `scheduler-locking' mode takes precedence when set to `on',
+     or while you are stepping and set to `step'.
+
+`show schedule-multiple'
+     Display the current mode for resuming the execution of threads of
+     multiple processes.
+
+
+File: gdb.info,  Node: Non-Stop Mode,  Next: Background Execution,  Prev: All-Stop Mode,  Up: Thread Stops
+
+5.5.2 Non-Stop Mode
+-------------------
+
+For some multi-threaded targets, GDB supports an optional mode of
+operation in which you can examine stopped program threads in the
+debugger while other threads continue to execute freely.  This
+minimizes intrusion when debugging live systems, such as programs where
+some threads have real-time constraints or must continue to respond to
+external events.  This is referred to as "non-stop" mode.
+
+   In non-stop mode, when a thread stops to report a debugging event,
+_only_ that thread is stopped; GDB does not stop other threads as well,
+in contrast to the all-stop mode behavior.  Additionally, execution
+commands such as `continue' and `step' apply by default only to the
+current thread in non-stop mode, rather than all threads as in all-stop
+mode.  This allows you to control threads explicitly in ways that are
+not possible in all-stop mode -- for example, stepping one thread while
+allowing others to run freely, stepping one thread while holding all
+others stopped, or stepping several threads independently and
+simultaneously.
+
+   To enter non-stop mode, use this sequence of commands before you run
+or attach to your program:
+
+     # Enable the async interface.
+     set target-async 1
+
+     # If using the CLI, pagination breaks non-stop.
+     set pagination off
+
+     # Finally, turn it on!
+     set non-stop on
+
+   You can use these commands to manipulate the non-stop mode setting:
+
+`set non-stop on'
+     Enable selection of non-stop mode.
+
+`set non-stop off'
+     Disable selection of non-stop mode.  
+
+`show non-stop'
+     Show the current non-stop enablement setting.
+
+   Note these commands only reflect whether non-stop mode is enabled,
+not whether the currently-executing program is being run in non-stop
+mode.  In particular, the `set non-stop' preference is only consulted
+when GDB starts or connects to the target program, and it is generally
+not possible to switch modes once debugging has started.  Furthermore,
+since not all targets support non-stop mode, even when you have enabled
+non-stop mode, GDB may still fall back to all-stop operation by default.
+
+   In non-stop mode, all execution commands apply only to the current
+thread by default.  That is, `continue' only continues one thread.  To
+continue all threads, issue `continue -a' or `c -a'.
+
+   You can use GDB's background execution commands (*note Background
+Execution::) to run some threads in the background while you continue
+to examine or step others from GDB.  The MI execution commands (*note
+GDB/MI Program Execution::) are always executed asynchronously in
+non-stop mode.
+
+   Suspending execution is done with the `interrupt' command when
+running in the background, or `Ctrl-c' during foreground execution.  In
+all-stop mode, this stops the whole process; but in non-stop mode the
+interrupt applies only to the current thread.  To stop the whole
+program, use `interrupt -a'.
+
+   Other execution commands do not currently support the `-a' option.
+
+   In non-stop mode, when a thread stops, GDB doesn't automatically make
+that thread current, as it does in all-stop mode.  This is because the
+thread stop notifications are asynchronous with respect to GDB's
+command interpreter, and it would be confusing if GDB unexpectedly
+changed to a different thread just as you entered a command to operate
+on the previously current thread.
+
+
+File: gdb.info,  Node: Background Execution,  Next: Thread-Specific Breakpoints,  Prev: Non-Stop Mode,  Up: Thread Stops
+
+5.5.3 Background Execution
+--------------------------
+
+GDB's execution commands have two variants:  the normal foreground
+(synchronous) behavior, and a background (asynchronous) behavior.  In
+foreground execution, GDB waits for the program to report that some
+thread has stopped before prompting for another command.  In background
+execution, GDB immediately gives a command prompt so that you can issue
+other commands while your program runs.
+
+   You need to explicitly enable asynchronous mode before you can use
+background execution commands.  You can use these commands to
+manipulate the asynchronous mode setting:
+
+`set target-async on'
+     Enable asynchronous mode.
+
+`set target-async off'
+     Disable asynchronous mode.  
+
+`show target-async'
+     Show the current target-async setting.
+
+   If the target doesn't support async mode, GDB issues an error
+message if you attempt to use the background execution commands.
+
+   To specify background execution, add a `&' to the command.  For
+example, the background form of the `continue' command is `continue&',
+or just `c&'.  The execution commands that accept background execution
+are:
+
+`run'
+     *Note Starting your Program: Starting.
+
+`attach'
+     *Note Debugging an Already-running Process: Attach.
+
+`step'
+     *Note step: Continuing and Stepping.
+
+`stepi'
+     *Note stepi: Continuing and Stepping.
+
+`next'
+     *Note next: Continuing and Stepping.
+
+`nexti'
+     *Note nexti: Continuing and Stepping.
+
+`continue'
+     *Note continue: Continuing and Stepping.
+
+`finish'
+     *Note finish: Continuing and Stepping.
+
+`until'
+     *Note until: Continuing and Stepping.
+
+
+   Background execution is especially useful in conjunction with
+non-stop mode for debugging programs with multiple threads; see *Note
+Non-Stop Mode::.  However, you can also use these commands in the
+normal all-stop mode with the restriction that you cannot issue another
+execution command until the previous one finishes.  Examples of
+commands that are valid in all-stop mode while the program is running
+include `help' and `info break'.
+
+   You can interrupt your program while it is running in the background
+by using the `interrupt' command.
+
+`interrupt'
+`interrupt -a'
+     Suspend execution of the running program.  In all-stop mode,
+     `interrupt' stops the whole process, but in non-stop mode, it stops
+     only the current thread.  To stop the whole program in non-stop
+     mode, use `interrupt -a'.
+
+
+File: gdb.info,  Node: Thread-Specific Breakpoints,  Next: Interrupted System Calls,  Prev: Background Execution,  Up: Thread Stops
+
+5.5.4 Thread-Specific Breakpoints
+---------------------------------
+
+When your program has multiple threads (*note Debugging Programs with
+Multiple Threads: Threads.), you can choose whether to set breakpoints
+on all threads, or on a particular thread.
+
+`break LINESPEC thread THREADNO'
+`break LINESPEC thread THREADNO if ...'
+     LINESPEC specifies source lines; there are several ways of writing
+     them (*note Specify Location::), but the effect is always to
+     specify some source line.
+
+     Use the qualifier `thread THREADNO' with a breakpoint command to
+     specify that you only want GDB to stop the program when a
+     particular thread reaches this breakpoint.  THREADNO is one of the
+     numeric thread identifiers assigned by GDB, shown in the first
+     column of the `info threads' display.
+
+     If you do not specify `thread THREADNO' when you set a breakpoint,
+     the breakpoint applies to _all_ threads of your program.
+
+     You can use the `thread' qualifier on conditional breakpoints as
+     well; in this case, place `thread THREADNO' before or after the
+     breakpoint condition, like this:
+
+          (gdb) break frik.c:13 thread 28 if bartab > lim
+
+
+
+File: gdb.info,  Node: Interrupted System Calls,  Next: Observer Mode,  Prev: Thread-Specific Breakpoints,  Up: Thread Stops
+
+5.5.5 Interrupted System Calls
+------------------------------
+
+There is an unfortunate side effect when using GDB to debug
+multi-threaded programs.  If one thread stops for a breakpoint, or for
+some other reason, and another thread is blocked in a system call, then
+the system call may return prematurely.  This is a consequence of the
+interaction between multiple threads and the signals that GDB uses to
+implement breakpoints and other events that stop execution.
+
+   To handle this problem, your program should check the return value of
+each system call and react appropriately.  This is good programming
+style anyways.
+
+   For example, do not write code like this:
+
+       sleep (10);
+
+   The call to `sleep' will return early if a different thread stops at
+a breakpoint or for some other reason.
+
+   Instead, write this:
+
+       int unslept = 10;
+       while (unslept > 0)
+         unslept = sleep (unslept);
+
+   A system call is allowed to return early, so the system is still
+conforming to its specification.  But GDB does cause your
+multi-threaded program to behave differently than it would without GDB.
+
+   Also, GDB uses internal breakpoints in the thread library to monitor
+certain events such as thread creation and thread destruction.  When
+such an event happens, a system call in another thread may return
+prematurely, even though your program does not appear to stop.
+
+
+File: gdb.info,  Node: Observer Mode,  Prev: Interrupted System Calls,  Up: Thread Stops
+
+5.5.6 Observer Mode
+-------------------
+
+If you want to build on non-stop mode and observe program behavior
+without any chance of disruption by GDB, you can set variables to
+disable all of the debugger's attempts to modify state, whether by
+writing memory, inserting breakpoints, etc.  These operate at a low
+level, intercepting operations from all commands.
+
+   When all of these are set to `off', then GDB is said to be "observer
+mode".  As a convenience, the variable `observer' can be set to disable
+these, plus enable non-stop mode.
+
+   Note that GDB will not prevent you from making nonsensical
+combinations of these settings. For instance, if you have enabled
+`may-insert-breakpoints' but disabled `may-write-memory', then
+breakpoints that work by writing trap instructions into the code stream
+will still not be able to be placed.
+
+`set observer on'
+`set observer off'
+     When set to `on', this disables all the permission variables below
+     (except for `insert-fast-tracepoints'), plus enables non-stop
+     debugging.  Setting this to `off' switches back to normal
+     debugging, though remaining in non-stop mode.
+
+`show observer'
+     Show whether observer mode is on or off.
+
+`set may-write-registers on'
+`set may-write-registers off'
+     This controls whether GDB will attempt to alter the values of
+     registers, such as with assignment expressions in `print', or the
+     `jump' command.  It defaults to `on'.
+
+`show may-write-registers'
+     Show the current permission to write registers.
+
+`set may-write-memory on'
+`set may-write-memory off'
+     This controls whether GDB will attempt to alter the contents of
+     memory, such as with assignment expressions in `print'.  It
+     defaults to `on'.
+
+`show may-write-memory'
+     Show the current permission to write memory.
+
+`set may-insert-breakpoints on'
+`set may-insert-breakpoints off'
+     This controls whether GDB will attempt to insert breakpoints.
+     This affects all breakpoints, including internal breakpoints
+     defined by GDB.  It defaults to `on'.
+
+`show may-insert-breakpoints'
+     Show the current permission to insert breakpoints.
+
+`set may-insert-tracepoints on'
+`set may-insert-tracepoints off'
+     This controls whether GDB will attempt to insert (regular)
+     tracepoints at the beginning of a tracing experiment.  It affects
+     only non-fast tracepoints, fast tracepoints being under the
+     control of `may-insert-fast-tracepoints'.  It defaults to `on'.
+
+`show may-insert-tracepoints'
+     Show the current permission to insert tracepoints.
+
+`set may-insert-fast-tracepoints on'
+`set may-insert-fast-tracepoints off'
+     This controls whether GDB will attempt to insert fast tracepoints
+     at the beginning of a tracing experiment.  It affects only fast
+     tracepoints, regular (non-fast) tracepoints being under the
+     control of `may-insert-tracepoints'.  It defaults to `on'.
+
+`show may-insert-fast-tracepoints'
+     Show the current permission to insert fast tracepoints.
+
+`set may-interrupt on'
+`set may-interrupt off'
+     This controls whether GDB will attempt to interrupt or stop
+     program execution.  When this variable is `off', the `interrupt'
+     command will have no effect, nor will `Ctrl-c'. It defaults to
+     `on'.
+
+`show may-interrupt'
+     Show the current permission to interrupt or stop the program.
+
+
+
+File: gdb.info,  Node: Reverse Execution,  Next: Process Record and Replay,  Prev: Stopping,  Up: Top
+
+6 Running programs backward
+***************************
+
+When you are debugging a program, it is not unusual to realize that you
+have gone too far, and some event of interest has already happened.  If
+the target environment supports it, GDB can allow you to "rewind" the
+program by running it backward.
+
+   A target environment that supports reverse execution should be able
+to "undo" the changes in machine state that have taken place as the
+program was executing normally.  Variables, registers etc. should
+revert to their previous values.  Obviously this requires a great deal
+of sophistication on the part of the target environment; not all target
+environments can support reverse execution.
+
+   When a program is executed in reverse, the instructions that have
+most recently been executed are "un-executed", in reverse order.  The
+program counter runs backward, following the previous thread of
+execution in reverse.  As each instruction is "un-executed", the values
+of memory and/or registers that were changed by that instruction are
+reverted to their previous states.  After executing a piece of source
+code in reverse, all side effects of that code should be "undone", and
+all variables should be returned to their prior values(1).
+
+   If you are debugging in a target environment that supports reverse
+execution, GDB provides the following commands.
+
+`reverse-continue [IGNORE-COUNT]'
+`rc [IGNORE-COUNT]'
+     Beginning at the point where your program last stopped, start
+     executing in reverse.  Reverse execution will stop for breakpoints
+     and synchronous exceptions (signals), just like normal execution.
+     Behavior of asynchronous signals depends on the target environment.
+
+`reverse-step [COUNT]'
+     Run the program backward until control reaches the start of a
+     different source line; then stop it, and return control to GDB.
+
+     Like the `step' command, `reverse-step' will only stop at the
+     beginning of a source line.  It "un-executes" the previously
+     executed source line.  If the previous source line included calls
+     to debuggable functions, `reverse-step' will step (backward) into
+     the called function, stopping at the beginning of the _last_
+     statement in the called function (typically a return statement).
+
+     Also, as with the `step' command, if non-debuggable functions are
+     called, `reverse-step' will run thru them backward without
+     stopping.
+
+`reverse-stepi [COUNT]'
+     Reverse-execute one machine instruction.  Note that the instruction
+     to be reverse-executed is _not_ the one pointed to by the program
+     counter, but the instruction executed prior to that one.  For
+     instance, if the last instruction was a jump, `reverse-stepi' will
+     take you back from the destination of the jump to the jump
+     instruction itself.
+
+`reverse-next [COUNT]'
+     Run backward to the beginning of the previous line executed in the
+     current (innermost) stack frame.  If the line contains function
+     calls, they will be "un-executed" without stopping.  Starting from
+     the first line of a function, `reverse-next' will take you back to
+     the caller of that function, _before_ the function was called,
+     just as the normal `next' command would take you from the last
+     line of a function back to its return to its caller (2).
+
+`reverse-nexti [COUNT]'
+     Like `nexti', `reverse-nexti' executes a single instruction in
+     reverse, except that called functions are "un-executed" atomically.
+     That is, if the previously executed instruction was a return from
+     another function, `reverse-nexti' will continue to execute in
+     reverse until the call to that function (from the current stack
+     frame) is reached.
+
+`reverse-finish'
+     Just as the `finish' command takes you to the point where the
+     current function returns, `reverse-finish' takes you to the point
+     where it was called.  Instead of ending up at the end of the
+     current function invocation, you end up at the beginning.
+
+`set exec-direction'
+     Set the direction of target execution.
+
+`set exec-direction reverse'
+     GDB will perform all execution commands in reverse, until the
+     exec-direction mode is changed to "forward".  Affected commands
+     include `step, stepi, next, nexti, continue, and finish'.  The
+     `return' command cannot be used in reverse mode.
+
+`set exec-direction forward'
+     GDB will perform all execution commands in the normal fashion.
+     This is the default.
+
+   ---------- Footnotes ----------
+
+   (1) Note that some side effects are easier to undo than others.  For
+instance, memory and registers are relatively easy, but device I/O is
+hard.  Some targets may be able undo things like device I/O, and some
+may not.
+
+   The contract between GDB and the reverse executing target requires
+only that the target do something reasonable when GDB tells it to
+execute backwards, and then report the results back to GDB.  Whatever
+the target reports back to GDB, GDB will report back to the user.  GDB
+assumes that the memory and registers that the target reports are in a
+consistant state, but GDB accepts whatever it is given.
+
+   (2) Unless the code is too heavily optimized.
+
+
+File: gdb.info,  Node: Process Record and Replay,  Next: Stack,  Prev: Reverse Execution,  Up: Top
+
+7 Recording Inferior's Execution and Replaying It
+*************************************************
+
+On some platforms, GDB provides a special "process record and replay"
+target that can record a log of the process execution, and replay it
+later with both forward and reverse execution commands.
+
+   When this target is in use, if the execution log includes the record
+for the next instruction, GDB will debug in "replay mode".  In the
+replay mode, the inferior does not really execute code instructions.
+Instead, all the events that normally happen during code execution are
+taken from the execution log.  While code is not really executed in
+replay mode, the values of registers (including the program counter
+register) and the memory of the inferior are still changed as they
+normally would.  Their contents are taken from the execution log.
+
+   If the record for the next instruction is not in the execution log,
+GDB will debug in "record mode".  In this mode, the inferior executes
+normally, and GDB records the execution log for future replay.
+
+   The process record and replay target supports reverse execution
+(*note Reverse Execution::), even if the platform on which the inferior
+runs does not.  However, the reverse execution is limited in this case
+by the range of the instructions recorded in the execution log.  In
+other words, reverse execution on platforms that don't support it
+directly can only be done in the replay mode.
+
+   When debugging in the reverse direction, GDB will work in replay
+mode as long as the execution log includes the record for the previous
+instruction; otherwise, it will work in record mode, if the platform
+supports reverse execution, or stop if not.
+
+   For architecture environments that support process record and replay,
+GDB provides the following commands:
+
+`target record'
+     This command starts the process record and replay target.  The
+     process record and replay target can only debug a process that is
+     already running.  Therefore, you need first to start the process
+     with the `run' or `start' commands, and then start the recording
+     with the `target record' command.
+
+     Both `record' and `rec' are aliases of `target record'.
+
+     Displaced stepping (*note displaced stepping: Maintenance
+     Commands.)  will be automatically disabled when process record and
+     replay target is started.  That's because the process record and
+     replay target doesn't support displaced stepping.
+
+     If the inferior is in the non-stop mode (*note Non-Stop Mode::) or
+     in the asynchronous execution mode (*note Background Execution::),
+     the process record and replay target cannot be started because it
+     doesn't support these two modes.
+
+`record stop'
+     Stop the process record and replay target.  When process record and
+     replay target stops, the entire execution log will be deleted and
+     the inferior will either be terminated, or will remain in its
+     final state.
+
+     When you stop the process record and replay target in record mode
+     (at the end of the execution log), the inferior will be stopped at
+     the next instruction that would have been recorded.  In other
+     words, if you record for a while and then stop recording, the
+     inferior process will be left in the same state as if the
+     recording never happened.
+
+     On the other hand, if the process record and replay target is
+     stopped while in replay mode (that is, not at the end of the
+     execution log, but at some earlier point), the inferior process
+     will become "live" at that earlier state, and it will then be
+     possible to continue the usual "live" debugging of the process
+     from that state.
+
+     When the inferior process exits, or GDB detaches from it, process
+     record and replay target will automatically stop itself.
+
+`record save FILENAME'
+     Save the execution log to a file `FILENAME'.  Default filename is
+     `gdb_record.PROCESS_ID', where PROCESS_ID is the process ID of the
+     inferior.
+
+`record restore FILENAME'
+     Restore the execution log from a file `FILENAME'.  File must have
+     been created with `record save'.
+
+`set record insn-number-max LIMIT'
+     Set the limit of instructions to be recorded.  Default value is
+     200000.
+
+     If LIMIT is a positive number, then GDB will start deleting
+     instructions from the log once the number of the record
+     instructions becomes greater than LIMIT.  For every new recorded
+     instruction, GDB will delete the earliest recorded instruction to
+     keep the number of recorded instructions at the limit.  (Since
+     deleting recorded instructions loses information, GDB lets you
+     control what happens when the limit is reached, by means of the
+     `stop-at-limit' option, described below.)
+
+     If LIMIT is zero, GDB will never delete recorded instructions from
+     the execution log.  The number of recorded instructions is
+     unlimited in this case.
+
+`show record insn-number-max'
+     Show the limit of instructions to be recorded.
+
+`set record stop-at-limit'
+     Control the behavior when the number of recorded instructions
+     reaches the limit.  If ON (the default), GDB will stop when the
+     limit is reached for the first time and ask you whether you want
+     to stop the inferior or continue running it and recording the
+     execution log.  If you decide to continue recording, each new
+     recorded instruction will cause the oldest one to be deleted.
+
+     If this option is OFF, GDB will automatically delete the oldest
+     record to make room for each new one, without asking.
+
+`show record stop-at-limit'
+     Show the current setting of `stop-at-limit'.
+
+`set record memory-query'
+     Control the behavior when GDB is unable to record memory changes
+     caused by an instruction.  If ON, GDB will query whether to stop
+     the inferior in that case.
+
+     If this option is OFF (the default), GDB will automatically ignore
+     the effect of such instructions on memory.  Later, when GDB
+     replays this execution log, it will mark the log of this
+     instruction as not accessible, and it will not affect the replay
+     results.
+
+`show record memory-query'
+     Show the current setting of `memory-query'.
+
+`info record'
+     Show various statistics about the state of process record and its
+     in-memory execution log buffer, including:
+
+        * Whether in record mode or replay mode.
+
+        * Lowest recorded instruction number (counting from when the
+          current execution log started recording instructions).
+
+        * Highest recorded instruction number.
+
+        * Current instruction about to be replayed (if in replay mode).
+
+        * Number of instructions contained in the execution log.
+
+        * Maximum number of instructions that may be contained in the
+          execution log.
+
+`record delete'
+     When record target runs in replay mode ("in the past"), delete the
+     subsequent execution log and begin to record a new execution log
+     starting from the current address.  This means you will abandon
+     the previously recorded "future" and begin recording a new
+     "future".
+
+
+File: gdb.info,  Node: Stack,  Next: Source,  Prev: Process Record and Replay,  Up: Top
+
+8 Examining the Stack
+*********************
+
+When your program has stopped, the first thing you need to know is
+where it stopped and how it got there.
+
+   Each time your program performs a function call, information about
+the call is generated.  That information includes the location of the
+call in your program, the arguments of the call, and the local
+variables of the function being called.  The information is saved in a
+block of data called a "stack frame".  The stack frames are allocated
+in a region of memory called the "call stack".
+
+   When your program stops, the GDB commands for examining the stack
+allow you to see all of this information.
+
+   One of the stack frames is "selected" by GDB and many GDB commands
+refer implicitly to the selected frame.  In particular, whenever you
+ask GDB for the value of a variable in your program, the value is found
+in the selected frame.  There are special GDB commands to select
+whichever frame you are interested in.  *Note Selecting a Frame:
+Selection.
+
+   When your program stops, GDB automatically selects the currently
+executing frame and describes it briefly, similar to the `frame'
+command (*note Information about a Frame: Frame Info.).
+
+* Menu:
+
+* Frames::                      Stack frames
+* Backtrace::                   Backtraces
+* Selection::                   Selecting a frame
+* Frame Info::                  Information on a frame
+
+
+File: gdb.info,  Node: Frames,  Next: Backtrace,  Up: Stack
+
+8.1 Stack Frames
+================
+
+The call stack is divided up into contiguous pieces called "stack
+frames", or "frames" for short; each frame is the data associated with
+one call to one function.  The frame contains the arguments given to
+the function, the function's local variables, and the address at which
+the function is executing.
+
+   When your program is started, the stack has only one frame, that of
+the function `main'.  This is called the "initial" frame or the
+"outermost" frame.  Each time a function is called, a new frame is
+made.  Each time a function returns, the frame for that function
+invocation is eliminated.  If a function is recursive, there can be
+many frames for the same function.  The frame for the function in which
+execution is actually occurring is called the "innermost" frame.  This
+is the most recently created of all the stack frames that still exist.
+
+   Inside your program, stack frames are identified by their addresses.
+A stack frame consists of many bytes, each of which has its own
+address; each kind of computer has a convention for choosing one byte
+whose address serves as the address of the frame.  Usually this address
+is kept in a register called the "frame pointer register" (*note $fp:
+Registers.) while execution is going on in that frame.
+
+   GDB assigns numbers to all existing stack frames, starting with zero
+for the innermost frame, one for the frame that called it, and so on
+upward.  These numbers do not really exist in your program; they are
+assigned by GDB to give you a way of designating stack frames in GDB
+commands.
+
+   Some compilers provide a way to compile functions so that they
+operate without stack frames.  (For example, the GCC option
+     `-fomit-frame-pointer'
+   generates functions without a frame.)  This is occasionally done
+with heavily used library functions to save the frame setup time.  GDB
+has limited facilities for dealing with these function invocations.  If
+the innermost function invocation has no stack frame, GDB nevertheless
+regards it as though it had a separate frame, which is numbered zero as
+usual, allowing correct tracing of the function call chain.  However,
+GDB has no provision for frameless functions elsewhere in the stack.
+
+`frame ARGS'
+     The `frame' command allows you to move from one stack frame to
+     another, and to print the stack frame you select.  ARGS may be
+     either the address of the frame or the stack frame number.
+     Without an argument, `frame' prints the current stack frame.
+
+`select-frame'
+     The `select-frame' command allows you to move from one stack frame
+     to another without printing the frame.  This is the silent version
+     of `frame'.
+
+
+File: gdb.info,  Node: Backtrace,  Next: Selection,  Prev: Frames,  Up: Stack
+
+8.2 Backtraces
+==============
+
+A backtrace is a summary of how your program got where it is.  It shows
+one line per frame, for many frames, starting with the currently
+executing frame (frame zero), followed by its caller (frame one), and
+on up the stack.
+
+`backtrace'
+`bt'
+     Print a backtrace of the entire stack: one line per frame for all
+     frames in the stack.
+
+     You can stop the backtrace at any time by typing the system
+     interrupt character, normally `Ctrl-c'.
+
+`backtrace N'
+`bt N'
+     Similar, but print only the innermost N frames.
+
+`backtrace -N'
+`bt -N'
+     Similar, but print only the outermost N frames.
+
+`backtrace full'
+`bt full'
+`bt full N'
+`bt full -N'
+     Print the values of the local variables also.  N specifies the
+     number of frames to print, as described above.
+
+   The names `where' and `info stack' (abbreviated `info s') are
+additional aliases for `backtrace'.
+
+   In a multi-threaded program, GDB by default shows the backtrace only
+for the current thread.  To display the backtrace for several or all of
+the threads, use the command `thread apply' (*note thread apply:
+Threads.).  For example, if you type `thread apply all backtrace', GDB
+will display the backtrace for all the threads; this is handy when you
+debug a core dump of a multi-threaded program.
+
+   Each line in the backtrace shows the frame number and the function
+name.  The program counter value is also shown--unless you use `set
+print address off'.  The backtrace also shows the source file name and
+line number, as well as the arguments to the function.  The program
+counter value is omitted if it is at the beginning of the code for that
+line number.
+
+   Here is an example of a backtrace.  It was made with the command `bt
+3', so it shows the innermost three frames.
+
+     #0  m4_traceon (obs=0x24eb0, argc=1, argv=0x2b8c8)
+         at builtin.c:993
+     #1  0x6e38 in expand_macro (sym=0x2b600, data=...) at macro.c:242
+     #2  0x6840 in expand_token (obs=0x0, t=177664, td=0xf7fffb08)
+         at macro.c:71
+     (More stack frames follow...)
+
+The display for frame zero does not begin with a program counter value,
+indicating that your program has stopped at the beginning of the code
+for line `993' of `builtin.c'.
+
+The value of parameter `data' in frame 1 has been replaced by `...'.
+By default, GDB prints the value of a parameter only if it is a scalar
+(integer, pointer, enumeration, etc).  See command `set print
+frame-arguments' in *Note Print Settings:: for more details on how to
+configure the way function parameter values are printed.
+
+   If your program was compiled with optimizations, some compilers will
+optimize away arguments passed to functions if those arguments are
+never used after the call.  Such optimizations generate code that
+passes arguments through registers, but doesn't store those arguments
+in the stack frame.  GDB has no way of displaying such arguments in
+stack frames other than the innermost one.  Here's what such a
+backtrace might look like:
+
+     #0  m4_traceon (obs=0x24eb0, argc=1, argv=0x2b8c8)
+         at builtin.c:993
+     #1  0x6e38 in expand_macro (sym=<optimized out>) at macro.c:242
+     #2  0x6840 in expand_token (obs=0x0, t=<optimized out>, td=0xf7fffb08)
+         at macro.c:71
+     (More stack frames follow...)
+
+The values of arguments that were not saved in their stack frames are
+shown as `<optimized out>'.
+
+   If you need to display the values of such optimized-out arguments,
+either deduce that from other variables whose values depend on the one
+you are interested in, or recompile without optimizations.
+
+   Most programs have a standard user entry point--a place where system
+libraries and startup code transition into user code.  For C this is
+`main'(1).  When GDB finds the entry function in a backtrace it will
+terminate the backtrace, to avoid tracing into highly system-specific
+(and generally uninteresting) code.
+
+   If you need to examine the startup code, or limit the number of
+levels in a backtrace, you can change this behavior:
+
+`set backtrace past-main'
+`set backtrace past-main on'
+     Backtraces will continue past the user entry point.
+
+`set backtrace past-main off'
+     Backtraces will stop when they encounter the user entry point.
+     This is the default.
+
+`show backtrace past-main'
+     Display the current user entry point backtrace policy.
+
+`set backtrace past-entry'
+`set backtrace past-entry on'
+     Backtraces will continue past the internal entry point of an
+     application.  This entry point is encoded by the linker when the
+     application is built, and is likely before the user entry point
+     `main' (or equivalent) is called.
+
+`set backtrace past-entry off'
+     Backtraces will stop when they encounter the internal entry point
+     of an application.  This is the default.
+
+`show backtrace past-entry'
+     Display the current internal entry point backtrace policy.
+
+`set backtrace limit N'
+`set backtrace limit 0'
+     Limit the backtrace to N levels.  A value of zero means unlimited.
+
+`show backtrace limit'
+     Display the current limit on backtrace levels.
+
+   ---------- Footnotes ----------
+
+   (1) Note that embedded programs (the so-called "free-standing"
+environment) are not required to have a `main' function as the entry
+point.  They could even have multiple entry points.
+
+
+File: gdb.info,  Node: Selection,  Next: Frame Info,  Prev: Backtrace,  Up: Stack
+
+8.3 Selecting a Frame
+=====================
+
+Most commands for examining the stack and other data in your program
+work on whichever stack frame is selected at the moment.  Here are the
+commands for selecting a stack frame; all of them finish by printing a
+brief description of the stack frame just selected.
+
+`frame N'
+`f N'
+     Select frame number N.  Recall that frame zero is the innermost
+     (currently executing) frame, frame one is the frame that called the
+     innermost one, and so on.  The highest-numbered frame is the one
+     for `main'.
+
+`frame ADDR'
+`f ADDR'
+     Select the frame at address ADDR.  This is useful mainly if the
+     chaining of stack frames has been damaged by a bug, making it
+     impossible for GDB to assign numbers properly to all frames.  In
+     addition, this can be useful when your program has multiple stacks
+     and switches between them.
+
+     On the SPARC architecture, `frame' needs two addresses to select
+     an arbitrary frame: a frame pointer and a stack pointer.
+
+     On the MIPS and Alpha architecture, it needs two addresses: a stack
+     pointer and a program counter.
+
+     On the 29k architecture, it needs three addresses: a register stack
+     pointer, a program counter, and a memory stack pointer.
+
+`up N'
+     Move N frames up the stack.  For positive numbers N, this advances
+     toward the outermost frame, to higher frame numbers, to frames
+     that have existed longer.  N defaults to one.
+
+`down N'
+     Move N frames down the stack.  For positive numbers N, this
+     advances toward the innermost frame, to lower frame numbers, to
+     frames that were created more recently.  N defaults to one.  You
+     may abbreviate `down' as `do'.
+
+   All of these commands end by printing two lines of output describing
+the frame.  The first line shows the frame number, the function name,
+the arguments, and the source file and line number of execution in that
+frame.  The second line shows the text of that source line.
+
+   For example:
+
+     (gdb) up
+     #1  0x22f0 in main (argc=1, argv=0xf7fffbf4, env=0xf7fffbfc)
+         at env.c:10
+     10              read_input_file (argv[i]);
+
+   After such a printout, the `list' command with no arguments prints
+ten lines centered on the point of execution in the frame.  You can
+also edit the program at the point of execution with your favorite
+editing program by typing `edit'.  *Note Printing Source Lines: List,
+for details.
+
+`up-silently N'
+`down-silently N'
+     These two commands are variants of `up' and `down', respectively;
+     they differ in that they do their work silently, without causing
+     display of the new frame.  They are intended primarily for use in
+     GDB command scripts, where the output might be unnecessary and
+     distracting.
+
+
+File: gdb.info,  Node: Frame Info,  Prev: Selection,  Up: Stack
+
+8.4 Information About a Frame
+=============================
+
+There are several other commands to print information about the selected
+stack frame.
+
+`frame'
+`f'
+     When used without any argument, this command does not change which
+     frame is selected, but prints a brief description of the currently
+     selected stack frame.  It can be abbreviated `f'.  With an
+     argument, this command is used to select a stack frame.  *Note
+     Selecting a Frame: Selection.
+
+`info frame'
+`info f'
+     This command prints a verbose description of the selected stack
+     frame, including:
+
+        * the address of the frame
+
+        * the address of the next frame down (called by this frame)
+
+        * the address of the next frame up (caller of this frame)
+
+        * the language in which the source code corresponding to this
+          frame is written
+
+        * the address of the frame's arguments
+
+        * the address of the frame's local variables
+
+        * the program counter saved in it (the address of execution in
+          the caller frame)
+
+        * which registers were saved in the frame
+
+     The verbose description is useful when something has gone wrong
+     that has made the stack format fail to fit the usual conventions.
+
+`info frame ADDR'
+`info f ADDR'
+     Print a verbose description of the frame at address ADDR, without
+     selecting that frame.  The selected frame remains unchanged by this
+     command.  This requires the same kind of address (more than one
+     for some architectures) that you specify in the `frame' command.
+     *Note Selecting a Frame: Selection.
+
+`info args'
+     Print the arguments of the selected frame, each on a separate line.
+
+`info locals'
+     Print the local variables of the selected frame, each on a separate
+     line.  These are all variables (declared either static or
+     automatic) accessible at the point of execution of the selected
+     frame.
+
+
+
+File: gdb.info,  Node: Source,  Next: Data,  Prev: Stack,  Up: Top
+
+9 Examining Source Files
+************************
+
+GDB can print parts of your program's source, since the debugging
+information recorded in the program tells GDB what source files were
+used to build it.  When your program stops, GDB spontaneously prints
+the line where it stopped.  Likewise, when you select a stack frame
+(*note Selecting a Frame: Selection.), GDB prints the line where
+execution in that frame has stopped.  You can print other portions of
+source files by explicit command.
+
+   If you use GDB through its GNU Emacs interface, you may prefer to
+use Emacs facilities to view source; see *Note Using GDB under GNU
+Emacs: Emacs.
+
+* Menu:
+
+* List::                        Printing source lines
+* Specify Location::            How to specify code locations
+* Edit::                        Editing source files
+* Search::                      Searching source files
+* Source Path::                 Specifying source directories
+* Machine Code::                Source and machine code
+
+
+File: gdb.info,  Node: List,  Next: Specify Location,  Up: Source
+
+9.1 Printing Source Lines
+=========================
+
+To print lines from a source file, use the `list' command (abbreviated
+`l').  By default, ten lines are printed.  There are several ways to
+specify what part of the file you want to print; see *Note Specify
+Location::, for the full list.
+
+   Here are the forms of the `list' command most commonly used:
+
+`list LINENUM'
+     Print lines centered around line number LINENUM in the current
+     source file.
+
+`list FUNCTION'
+     Print lines centered around the beginning of function FUNCTION.
+
+`list'
+     Print more lines.  If the last lines printed were printed with a
+     `list' command, this prints lines following the last lines
+     printed; however, if the last line printed was a solitary line
+     printed as part of displaying a stack frame (*note Examining the
+     Stack: Stack.), this prints lines centered around that line.
+
+`list -'
+     Print lines just before the lines last printed.
+
+   By default, GDB prints ten source lines with any of these forms of
+the `list' command.  You can change this using `set listsize':
+
+`set listsize COUNT'
+     Make the `list' command display COUNT source lines (unless the
+     `list' argument explicitly specifies some other number).
+
+`show listsize'
+     Display the number of lines that `list' prints.
+
+   Repeating a `list' command with <RET> discards the argument, so it
+is equivalent to typing just `list'.  This is more useful than listing
+the same lines again.  An exception is made for an argument of `-';
+that argument is preserved in repetition so that each repetition moves
+up in the source file.
+
+   In general, the `list' command expects you to supply zero, one or two
+"linespecs".  Linespecs specify source lines; there are several ways of
+writing them (*note Specify Location::), but the effect is always to
+specify some source line.
+
+   Here is a complete description of the possible arguments for `list':
+
+`list LINESPEC'
+     Print lines centered around the line specified by LINESPEC.
+
+`list FIRST,LAST'
+     Print lines from FIRST to LAST.  Both arguments are linespecs.
+     When a `list' command has two linespecs, and the source file of
+     the second linespec is omitted, this refers to the same source
+     file as the first linespec.
+
+`list ,LAST'
+     Print lines ending with LAST.
+
+`list FIRST,'
+     Print lines starting with FIRST.
+
+`list +'
+     Print lines just after the lines last printed.
+
+`list -'
+     Print lines just before the lines last printed.
+
+`list'
+     As described in the preceding table.
+
+
+File: gdb.info,  Node: Specify Location,  Next: Edit,  Prev: List,  Up: Source
+
+9.2 Specifying a Location
+=========================
+
+Several GDB commands accept arguments that specify a location of your
+program's code.  Since GDB is a source-level debugger, a location
+usually specifies some line in the source code; for that reason,
+locations are also known as "linespecs".
+
+   Here are all the different ways of specifying a code location that
+GDB understands:
+
+`LINENUM'
+     Specifies the line number LINENUM of the current source file.
+
+`-OFFSET'
+`+OFFSET'
+     Specifies the line OFFSET lines before or after the "current
+     line".  For the `list' command, the current line is the last one
+     printed; for the breakpoint commands, this is the line at which
+     execution stopped in the currently selected "stack frame" (*note
+     Frames: Frames, for a description of stack frames.)  When used as
+     the second of the two linespecs in a `list' command, this
+     specifies the line OFFSET lines up or down from the first linespec.
+
+`FILENAME:LINENUM'
+     Specifies the line LINENUM in the source file FILENAME.  If
+     FILENAME is a relative file name, then it will match any source
+     file name with the same trailing components.  For example, if
+     FILENAME is `gcc/expr.c', then it will match source file name of
+     `/build/trunk/gcc/expr.c', but not `/build/trunk/libcpp/expr.c' or
+     `/build/trunk/gcc/x-expr.c'.
+
+`FUNCTION'
+     Specifies the line that begins the body of the function FUNCTION.
+     For example, in C, this is the line with the open brace.
+
+`FUNCTION:LABEL'
+     Specifies the line where LABEL appears in FUNCTION.
+
+`FILENAME:FUNCTION'
+     Specifies the line that begins the body of the function FUNCTION
+     in the file FILENAME.  You only need the file name with a function
+     name to avoid ambiguity when there are identically named functions
+     in different source files.
+
+`LABEL'
+     Specifies the line at which the label named LABEL appears.  GDB
+     searches for the label in the function corresponding to the
+     currently selected stack frame.  If there is no current selected
+     stack frame (for instance, if the inferior is not running), then
+     GDB will not search for a label.
+
+`*ADDRESS'
+     Specifies the program address ADDRESS.  For line-oriented
+     commands, such as `list' and `edit', this specifies a source line
+     that contains ADDRESS.  For `break' and other breakpoint oriented
+     commands, this can be used to set breakpoints in parts of your
+     program which do not have debugging information or source files.
+
+     Here ADDRESS may be any expression valid in the current working
+     language (*note working language: Languages.) that specifies a code
+     address.  In addition, as a convenience, GDB extends the semantics
+     of expressions used in locations to cover the situations that
+     frequently happen during debugging.  Here are the various forms of
+     ADDRESS:
+
+    `EXPRESSION'
+          Any expression valid in the current working language.
+
+    `FUNCADDR'
+          An address of a function or procedure derived from its name.
+          In C, C++, Java, Objective-C, Fortran, minimal, and assembly,
+          this is simply the function's name FUNCTION (and actually a
+          special case of a valid expression).  In Pascal and Modula-2,
+          this is `&FUNCTION'.  In Ada, this is `FUNCTION'Address'
+          (although the Pascal form also works).
+
+          This form specifies the address of the function's first
+          instruction, before the stack frame and arguments have been
+          set up.
+
+    `'FILENAME'::FUNCADDR'
+          Like FUNCADDR above, but also specifies the name of the source
+          file explicitly.  This is useful if the name of the function
+          does not specify the function unambiguously, e.g., if there
+          are several functions with identical names in different
+          source files.
+
+`-pstap|-probe-stap [OBJFILE:[PROVIDER:]]NAME'
+     The GNU/Linux tool `SystemTap' provides a way for applications to
+     embed static probes.  *Note Static Probe Points::, for more
+     information on finding and using static probes.  This form of
+     linespec specifies the location of such a static probe.
+
+     If OBJFILE is given, only probes coming from that shared library
+     or executable matching OBJFILE as a regular expression are
+     considered.  If PROVIDER is given, then only probes from that
+     provider are considered.  If several probes match the spec, GDB
+     will insert a breakpoint at each one of those probes.
+
+
+
+File: gdb.info,  Node: Edit,  Next: Search,  Prev: Specify Location,  Up: Source
+
+9.3 Editing Source Files
+========================
+
+To edit the lines in a source file, use the `edit' command.  The
+editing program of your choice is invoked with the current line set to
+the active line in the program.  Alternatively, there are several ways
+to specify what part of the file you want to print if you want to see
+other parts of the program:
+
+`edit LOCATION'
+     Edit the source file specified by `location'.  Editing starts at
+     that LOCATION, e.g., at the specified source line of the specified
+     file.  *Note Specify Location::, for all the possible forms of the
+     LOCATION argument; here are the forms of the `edit' command most
+     commonly used:
+
+    `edit NUMBER'
+          Edit the current source file with NUMBER as the active line
+          number.
+
+    `edit FUNCTION'
+          Edit the file containing FUNCTION at the beginning of its
+          definition.
+
+
+9.3.1 Choosing your Editor
+--------------------------
+
+You can customize GDB to use any editor you want (1).  By default, it
+is `/bin/ex', but you can change this by setting the environment
+variable `EDITOR' before using GDB.  For example, to configure GDB to
+use the `vi' editor, you could use these commands with the `sh' shell:
+     EDITOR=/usr/bin/vi
+     export EDITOR
+     gdb ...
+   or in the `csh' shell,
+     setenv EDITOR /usr/bin/vi
+     gdb ...
+
+   ---------- Footnotes ----------
+
+   (1) The only restriction is that your editor (say `ex'), recognizes
+the following command-line syntax:
+     ex +NUMBER file
+   The optional numeric value +NUMBER specifies the number of the line
+in the file where to start editing.
+
+
+File: gdb.info,  Node: Search,  Next: Source Path,  Prev: Edit,  Up: Source
+
+9.4 Searching Source Files
+==========================
+
+There are two commands for searching through the current source file
+for a regular expression.
+
+`forward-search REGEXP'
+`search REGEXP'
+     The command `forward-search REGEXP' checks each line, starting
+     with the one following the last line listed, for a match for
+     REGEXP.  It lists the line that is found.  You can use the synonym
+     `search REGEXP' or abbreviate the command name as `fo'.
+
+`reverse-search REGEXP'
+     The command `reverse-search REGEXP' checks each line, starting
+     with the one before the last line listed and going backward, for a
+     match for REGEXP.  It lists the line that is found.  You can
+     abbreviate this command as `rev'.
+
+
+File: gdb.info,  Node: Source Path,  Next: Machine Code,  Prev: Search,  Up: Source
+
+9.5 Specifying Source Directories
+=================================
+
+Executable programs sometimes do not record the directories of the
+source files from which they were compiled, just the names.  Even when
+they do, the directories could be moved between the compilation and
+your debugging session.  GDB has a list of directories to search for
+source files; this is called the "source path".  Each time GDB wants a
+source file, it tries all the directories in the list, in the order
+they are present in the list, until it finds a file with the desired
+name.
+
+   For example, suppose an executable references the file
+`/usr/src/foo-1.0/lib/foo.c', and our source path is `/mnt/cross'.  The
+file is first looked up literally; if this fails,
+`/mnt/cross/usr/src/foo-1.0/lib/foo.c' is tried; if this fails,
+`/mnt/cross/foo.c' is opened; if this fails, an error message is
+printed.  GDB does not look up the parts of the source file name, such
+as `/mnt/cross/src/foo-1.0/lib/foo.c'.  Likewise, the subdirectories of
+the source path are not searched: if the source path is `/mnt/cross',
+and the binary refers to `foo.c', GDB would not find it under
+`/mnt/cross/usr/src/foo-1.0/lib'.
+
+   Plain file names, relative file names with leading directories, file
+names containing dots, etc. are all treated as described above; for
+instance, if the source path is `/mnt/cross', and the source file is
+recorded as `../lib/foo.c', GDB would first try `../lib/foo.c', then
+`/mnt/cross/../lib/foo.c', and after that--`/mnt/cross/foo.c'.
+
+   Note that the executable search path is _not_ used to locate the
+source files.
+
+   Whenever you reset or rearrange the source path, GDB clears out any
+information it has cached about where source files are found and where
+each line is in the file.
+
+   When you start GDB, its source path includes only `cdir' and `cwd',
+in that order.  To add other directories, use the `directory' command.
+
+   The search path is used to find both program source files and GDB
+script files (read using the `-command' option and `source' command).
+
+   In addition to the source path, GDB provides a set of commands that
+manage a list of source path substitution rules.  A "substitution rule"
+specifies how to rewrite source directories stored in the program's
+debug information in case the sources were moved to a different
+directory between compilation and debugging.  A rule is made of two
+strings, the first specifying what needs to be rewritten in the path,
+and the second specifying how it should be rewritten.  In *Note set
+substitute-path::, we name these two parts FROM and TO respectively.
+GDB does a simple string replacement of FROM with TO at the start of
+the directory part of the source file name, and uses that result
+instead of the original file name to look up the sources.
+
+   Using the previous example, suppose the `foo-1.0' tree has been
+moved from `/usr/src' to `/mnt/cross', then you can tell GDB to replace
+`/usr/src' in all source path names with `/mnt/cross'.  The first
+lookup will then be `/mnt/cross/foo-1.0/lib/foo.c' in place of the
+original location of `/usr/src/foo-1.0/lib/foo.c'.  To define a source
+path substitution rule, use the `set substitute-path' command (*note
+set substitute-path::).
+
+   To avoid unexpected substitution results, a rule is applied only if
+the FROM part of the directory name ends at a directory separator.  For
+instance, a rule substituting  `/usr/source' into `/mnt/cross' will be
+applied to `/usr/source/foo-1.0' but not to `/usr/sourceware/foo-2.0'.
+And because the substitution is applied only at the beginning of the
+directory name, this rule will not be applied to
+`/root/usr/source/baz.c' either.
+
+   In many cases, you can achieve the same result using the `directory'
+command.  However, `set substitute-path' can be more efficient in the
+case where the sources are organized in a complex tree with multiple
+subdirectories.  With the `directory' command, you need to add each
+subdirectory of your project.  If you moved the entire tree while
+preserving its internal organization, then `set substitute-path' allows
+you to direct the debugger to all the sources with one single command.
+
+   `set substitute-path' is also more than just a shortcut command.
+The source path is only used if the file at the original location no
+longer exists.  On the other hand, `set substitute-path' modifies the
+debugger behavior to look at the rewritten location instead.  So, if
+for any reason a source file that is not relevant to your executable is
+located at the original location, a substitution rule is the only
+method available to point GDB at the new location.
+
+   You can configure a default source path substitution rule by
+configuring GDB with the `--with-relocated-sources=DIR' option.  The DIR
+should be the name of a directory under GDB's configured prefix (set
+with `--prefix' or `--exec-prefix'), and directory names in debug
+information under DIR will be adjusted automatically if the installed
+GDB is moved to a new location.  This is useful if GDB, libraries or
+executables with debug information and corresponding source code are
+being moved together.
+
+`directory DIRNAME ...'
+
+`dir DIRNAME ...'
+     Add directory DIRNAME to the front of the source path.  Several
+     directory names may be given to this command, separated by `:'
+     (`;' on MS-DOS and MS-Windows, where `:' usually appears as part
+     of absolute file names) or whitespace.  You may specify a
+     directory that is already in the source path; this moves it
+     forward, so GDB searches it sooner.
+
+     You can use the string `$cdir' to refer to the compilation
+     directory (if one is recorded), and `$cwd' to refer to the current
+     working directory.  `$cwd' is not the same as `.'--the former
+     tracks the current working directory as it changes during your GDB
+     session, while the latter is immediately expanded to the current
+     directory at the time you add an entry to the source path.
+
+`directory'
+     Reset the source path to its default value (`$cdir:$cwd' on Unix
+     systems).  This requires confirmation.
+
+`set directories PATH-LIST'
+     Set the source path to PATH-LIST.  `$cdir:$cwd' are added if
+     missing.
+
+`show directories'
+     Print the source path: show which directories it contains.
+
+`set substitute-path FROM TO'
+     Define a source path substitution rule, and add it at the end of
+     the current list of existing substitution rules.  If a rule with
+     the same FROM was already defined, then the old rule is also
+     deleted.
+
+     For example, if the file `/foo/bar/baz.c' was moved to
+     `/mnt/cross/baz.c', then the command
+
+          (gdb) set substitute-path /usr/src /mnt/cross
+
+     will tell GDB to replace `/usr/src' with `/mnt/cross', which will
+     allow GDB to find the file `baz.c' even though it was moved.
+
+     In the case when more than one substitution rule have been defined,
+     the rules are evaluated one by one in the order where they have
+     been defined.  The first one matching, if any, is selected to
+     perform the substitution.
+
+     For instance, if we had entered the following commands:
+
+          (gdb) set substitute-path /usr/src/include /mnt/include
+          (gdb) set substitute-path /usr/src /mnt/src
+
+     GDB would then rewrite `/usr/src/include/defs.h' into
+     `/mnt/include/defs.h' by using the first rule.  However, it would
+     use the second rule to rewrite `/usr/src/lib/foo.c' into
+     `/mnt/src/lib/foo.c'.
+
+`unset substitute-path [path]'
+     If a path is specified, search the current list of substitution
+     rules for a rule that would rewrite that path.  Delete that rule
+     if found.  A warning is emitted by the debugger if no rule could
+     be found.
+
+     If no path is specified, then all substitution rules are deleted.
+
+`show substitute-path [path]'
+     If a path is specified, then print the source path substitution
+     rule which would rewrite that path, if any.
+
+     If no path is specified, then print all existing source path
+     substitution rules.
+
+
+   If your source path is cluttered with directories that are no longer
+of interest, GDB may sometimes cause confusion by finding the wrong
+versions of source.  You can correct the situation as follows:
+
+  1. Use `directory' with no argument to reset the source path to its
+     default value.
+
+  2. Use `directory' with suitable arguments to reinstall the
+     directories you want in the source path.  You can add all the
+     directories in one command.
+
+
+File: gdb.info,  Node: Machine Code,  Prev: Source Path,  Up: Source
+
+9.6 Source and Machine Code
+===========================
+
+You can use the command `info line' to map source lines to program
+addresses (and vice versa), and the command `disassemble' to display a
+range of addresses as machine instructions.  You can use the command
+`set disassemble-next-line' to set whether to disassemble next source
+line when execution stops.  When run under GNU Emacs mode, the `info
+line' command causes the arrow to point to the line specified.  Also,
+`info line' prints addresses in symbolic form as well as hex.
+
+`info line LINESPEC'
+     Print the starting and ending addresses of the compiled code for
+     source line LINESPEC.  You can specify source lines in any of the
+     ways documented in *Note Specify Location::.
+
+   For example, we can use `info line' to discover the location of the
+object code for the first line of function `m4_changequote':
+
+     (gdb) info line m4_changequote
+     Line 895 of "builtin.c" starts at pc 0x634c and ends at 0x6350.
+
+We can also inquire (using `*ADDR' as the form for LINESPEC) what
+source line covers a particular address:
+     (gdb) info line *0x63ff
+     Line 926 of "builtin.c" starts at pc 0x63e4 and ends at 0x6404.
+
+   After `info line', the default address for the `x' command is
+changed to the starting address of the line, so that `x/i' is
+sufficient to begin examining the machine code (*note Examining Memory:
+Memory.).  Also, this address is saved as the value of the convenience
+variable `$_' (*note Convenience Variables: Convenience Vars.).
+
+`disassemble'
+`disassemble /m'
+`disassemble /r'
+     This specialized command dumps a range of memory as machine
+     instructions.  It can also print mixed source+disassembly by
+     specifying the `/m' modifier and print the raw instructions in hex
+     as well as in symbolic form by specifying the `/r'.  The default
+     memory range is the function surrounding the program counter of
+     the selected frame.  A single argument to this command is a
+     program counter value; GDB dumps the function surrounding this
+     value.  When two arguments are given, they should be separated by
+     a comma, possibly surrounded by whitespace.  The arguments specify
+     a range of addresses to dump, in one of two forms:
+
+    `START,END'
+          the addresses from START (inclusive) to END (exclusive)
+
+    `START,+LENGTH'
+          the addresses from START (inclusive) to `START+LENGTH'
+          (exclusive).
+
+     When 2 arguments are specified, the name of the function is also
+     printed (since there could be several functions in the given
+     range).
+
+     The argument(s) can be any expression yielding a numeric value,
+     such as `0x32c4', `&main+10' or `$pc - 8'.
+
+     If the range of memory being disassembled contains current program
+     counter, the instruction at that location is shown with a `=>'
+     marker.
+
+   The following example shows the disassembly of a range of addresses
+of HP PA-RISC 2.0 code:
+
+     (gdb) disas 0x32c4, 0x32e4
+     Dump of assembler code from 0x32c4 to 0x32e4:
+        0x32c4 <main+204>:      addil 0,dp
+        0x32c8 <main+208>:      ldw 0x22c(sr0,r1),r26
+        0x32cc <main+212>:      ldil 0x3000,r31
+        0x32d0 <main+216>:      ble 0x3f8(sr4,r31)
+        0x32d4 <main+220>:      ldo 0(r31),rp
+        0x32d8 <main+224>:      addil -0x800,dp
+        0x32dc <main+228>:      ldo 0x588(r1),r26
+        0x32e0 <main+232>:      ldil 0x3000,r31
+     End of assembler dump.
+
+   Here is an example showing mixed source+assembly for Intel x86, when
+the program is stopped just after function prologue:
+
+     (gdb) disas /m main
+     Dump of assembler code for function main:
+     5       {
+        0x08048330 <+0>:    push   %ebp
+        0x08048331 <+1>:    mov    %esp,%ebp
+        0x08048333 <+3>:    sub    $0x8,%esp
+        0x08048336 <+6>:    and    $0xfffffff0,%esp
+        0x08048339 <+9>:    sub    $0x10,%esp
+
+     6         printf ("Hello.\n");
+     => 0x0804833c <+12>:   movl   $0x8048440,(%esp)
+        0x08048343 <+19>:   call   0x8048284 <puts at plt>
+
+     7         return 0;
+     8       }
+        0x08048348 <+24>:   mov    $0x0,%eax
+        0x0804834d <+29>:   leave
+        0x0804834e <+30>:   ret
+
+     End of assembler dump.
+
+   Here is another example showing raw instructions in hex for AMD
+x86-64,
+
+     (gdb) disas /r 0x400281,+10
+     Dump of assembler code from 0x400281 to 0x40028b:
+        0x0000000000400281:  38 36  cmp    %dh,(%rsi)
+        0x0000000000400283:  2d 36 34 2e 73 sub    $0x732e3436,%eax
+        0x0000000000400288:  6f     outsl  %ds:(%rsi),(%dx)
+        0x0000000000400289:  2e 32 00       xor    %cs:(%rax),%al
+     End of assembler dump.
+
+   Some architectures have more than one commonly-used set of
+instruction mnemonics or other syntax.
+
+   For programs that were dynamically linked and use shared libraries,
+instructions that call functions or branch to locations in the shared
+libraries might show a seemingly bogus location--it's actually a
+location of the relocation table.  On some architectures, GDB might be
+able to resolve these to actual function names.
+
+`set disassembly-flavor INSTRUCTION-SET'
+     Select the instruction set to use when disassembling the program
+     via the `disassemble' or `x/i' commands.
+
+     Currently this command is only defined for the Intel x86 family.
+     You can set INSTRUCTION-SET to either `intel' or `att'.  The
+     default is `att', the AT&T flavor used by default by Unix
+     assemblers for x86-based targets.
+
+`show disassembly-flavor'
+     Show the current setting of the disassembly flavor.
+
+`set disassemble-next-line'
+`show disassemble-next-line'
+     Control whether or not GDB will disassemble the next source line
+     or instruction when execution stops.  If ON, GDB will display
+     disassembly of the next source line when execution of the program
+     being debugged stops.  This is _in addition_ to displaying the
+     source line itself, which GDB always does if possible.  If the
+     next source line cannot be displayed for some reason (e.g., if GDB
+     cannot find the source file, or there's no line info in the debug
+     info), GDB will display disassembly of the next _instruction_
+     instead of showing the next source line.  If AUTO, GDB will
+     display disassembly of next instruction only if the source line
+     cannot be displayed.  This setting causes GDB to display some
+     feedback when you step through a function with no line info or
+     whose source file is unavailable.  The default is OFF, which means
+     never display the disassembly of the next line or instruction.
+
+
+File: gdb.info,  Node: Data,  Next: Optimized Code,  Prev: Source,  Up: Top
+
+10 Examining Data
+*****************
+
+The usual way to examine data in your program is with the `print'
+command (abbreviated `p'), or its synonym `inspect'.  It evaluates and
+prints the value of an expression of the language your program is
+written in (*note Using GDB with Different Languages: Languages.).  It
+may also print the expression using a Python-based pretty-printer
+(*note Pretty Printing::).
+
+`print EXPR'
+`print /F EXPR'
+     EXPR is an expression (in the source language).  By default the
+     value of EXPR is printed in a format appropriate to its data type;
+     you can choose a different format by specifying `/F', where F is a
+     letter specifying the format; see *Note Output Formats: Output
+     Formats.
+
+`print'
+`print /F'
+     If you omit EXPR, GDB displays the last value again (from the
+     "value history"; *note Value History: Value History.).  This
+     allows you to conveniently inspect the same value in an
+     alternative format.
+
+   A more low-level way of examining data is with the `x' command.  It
+examines data in memory at a specified address and prints it in a
+specified format.  *Note Examining Memory: Memory.
+
+   If you are interested in information about types, or about how the
+fields of a struct or a class are declared, use the `ptype EXP' command
+rather than `print'.  *Note Examining the Symbol Table: Symbols.
+
+   Another way of examining values of expressions and type information
+is through the Python extension command `explore' (available only if
+the GDB build is configured with `--with-python').  It offers an
+interactive way to start at the highest level (or, the most abstract
+level) of the data type of an expression (or, the data type itself) and
+explore all the way down to leaf scalar values/fields embedded in the
+higher level data types.
+
+`explore ARG'
+     ARG is either an expression (in the source language), or a type
+     visible in the current context of the program being debugged.
+
+   The working of the `explore' command can be illustrated with an
+example.  If a data type `struct ComplexStruct' is defined in your C
+program as
+
+     struct SimpleStruct
+     {
+       int i;
+       double d;
+     };
+
+     struct ComplexStruct
+     {
+       struct SimpleStruct *ss_p;
+       int arr[10];
+     };
+
+followed by variable declarations as
+
+     struct SimpleStruct ss = { 10, 1.11 };
+     struct ComplexStruct cs = { &ss, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } };
+
+then, the value of the variable `cs' can be explored using the
+`explore' command as follows.
+
+     (gdb) explore cs
+     The value of `cs' is a struct/class of type `struct ComplexStruct' with
+     the following fields:
+
+       ss_p = <Enter 0 to explore this field of type `struct SimpleStruct *'>
+        arr = <Enter 1 to explore this field of type `int [10]'>
+
+     Enter the field number of choice:
+
+Since the fields of `cs' are not scalar values, you are being prompted
+to chose the field you want to explore.  Let's say you choose the field
+`ss_p' by entering `0'.  Then, since this field is a pointer, you will
+be asked if it is pointing to a single value.  From the declaration of
+`cs' above, it is indeed pointing to a single value, hence you enter
+`y'.  If you enter `n', then you will be asked if it were pointing to
+an array of values, in which case this field will be explored as if it
+were an array.
+
+     `cs.ss_p' is a pointer to a value of type `struct SimpleStruct'
+     Continue exploring it as a pointer to a single value [y/n]: y
+     The value of `*(cs.ss_p)' is a struct/class of type `struct
+     SimpleStruct' with the following fields:
+
+       i = 10 .. (Value of type `int')
+       d = 1.1100000000000001 .. (Value of type `double')
+
+     Press enter to return to parent value:
+
+If the field `arr' of `cs' was chosen for exploration by entering `1'
+earlier, then since it is as array, you will be prompted to enter the
+index of the element in the array that you want to explore.
+
+     `cs.arr' is an array of `int'.
+     Enter the index of the element you want to explore in `cs.arr': 5
+
+     `(cs.arr)[5]' is a scalar value of type `int'.
+
+     (cs.arr)[5] = 4
+
+     Press enter to return to parent value:
+
+   In general, at any stage of exploration, you can go deeper towards
+the leaf values by responding to the prompts appropriately, or hit the
+return key to return to the enclosing data structure (the higher level
+data structure).
+
+   Similar to exploring values, you can use the `explore' command to
+explore types.  Instead of specifying a value (which is typically a
+variable name or an expression valid in the current context of the
+program being debugged), you specify a type name.  If you consider the
+same example as above, your can explore the type `struct ComplexStruct'
+by passing the argument `struct ComplexStruct' to the `explore' command.
+
+     (gdb) explore struct ComplexStruct
+
+By responding to the prompts appropriately in the subsequent interactive
+session, you can explore the type `struct ComplexStruct' in a manner
+similar to how the value `cs' was explored in the above example.
+
+   The `explore' command also has two sub-commands, `explore value' and
+`explore type'. The former sub-command is a way to explicitly specify
+that value exploration of the argument is being invoked, while the
+latter is a way to explicitly specify that type exploration of the
+argument is being invoked.
+
+`explore value EXPR'
+     This sub-command of `explore' explores the value of the expression
+     EXPR (if EXPR is an expression valid in the current context of the
+     program being debugged).  The behavior of this command is
+     identical to that of the behavior of the `explore' command being
+     passed the argument EXPR.
+
+`explore type ARG'
+     This sub-command of `explore' explores the type of ARG (if ARG is
+     a type visible in the current context of program being debugged),
+     or the type of the value/expression ARG (if ARG is an expression
+     valid in the current context of the program being debugged).  If
+     ARG is a type, then the behavior of this command is identical to
+     that of the `explore' command being passed the argument ARG.  If
+     ARG is an expression, then the behavior of this command will be
+     identical to that of the `explore' command being passed the type
+     of ARG as the argument.
+
+* Menu:
+
+* Expressions::                 Expressions
+* Ambiguous Expressions::       Ambiguous Expressions
+* Variables::                   Program variables
+* Arrays::                      Artificial arrays
+* Output Formats::              Output formats
+* Memory::                      Examining memory
+* Auto Display::                Automatic display
+* Print Settings::              Print settings
+* Pretty Printing::             Python pretty printing
+* Value History::               Value history
+* Convenience Vars::            Convenience variables
+* Registers::                   Registers
+* Floating Point Hardware::     Floating point hardware
+* Vector Unit::                 Vector Unit
+* OS Information::              Auxiliary data provided by operating system
+* Memory Region Attributes::    Memory region attributes
+* Dump/Restore Files::          Copy between memory and a file
+* Core File Generation::        Cause a program dump its core
+* Character Sets::              Debugging programs that use a different
+                                character set than GDB does
+* Caching Remote Data::         Data caching for remote targets
+* Searching Memory::            Searching memory for a sequence of bytes
+
+
+File: gdb.info,  Node: Expressions,  Next: Ambiguous Expressions,  Up: Data
+
+10.1 Expressions
+================
+
+`print' and many other GDB commands accept an expression and compute
+its value.  Any kind of constant, variable or operator defined by the
+programming language you are using is valid in an expression in GDB.
+This includes conditional expressions, function calls, casts, and
+string constants.  It also includes preprocessor macros, if you
+compiled your program to include this information; see *Note
+Compilation::.
+
+   GDB supports array constants in expressions input by the user.  The
+syntax is {ELEMENT, ELEMENT...}.  For example, you can use the command
+`print {1, 2, 3}' to create an array of three integers.  If you pass an
+array to a function or assign it to a program variable, GDB copies the
+array to memory that is `malloc'ed in the target program.
+
+   Because C is so widespread, most of the expressions shown in
+examples in this manual are in C.  *Note Using GDB with Different
+Languages: Languages, for information on how to use expressions in other
+languages.
+
+   In this section, we discuss operators that you can use in GDB
+expressions regardless of your programming language.
+
+   Casts are supported in all languages, not just in C, because it is so
+useful to cast a number into a pointer in order to examine a structure
+at that address in memory.
+
+   GDB supports these operators, in addition to those common to
+programming languages:
+
+`@'
+     `@' is a binary operator for treating parts of memory as arrays.
+     *Note Artificial Arrays: Arrays, for more information.
+
+`::'
+     `::' allows you to specify a variable in terms of the file or
+     function where it is defined.  *Note Program Variables: Variables.
+
+`{TYPE} ADDR'
+     Refers to an object of type TYPE stored at address ADDR in memory.
+     ADDR may be any expression whose value is an integer or pointer
+     (but parentheses are required around binary operators, just as in
+     a cast).  This construct is allowed regardless of what kind of
+     data is normally supposed to reside at ADDR.
+
+
+File: gdb.info,  Node: Ambiguous Expressions,  Next: Variables,  Prev: Expressions,  Up: Data
+
+10.2 Ambiguous Expressions
+==========================
+
+Expressions can sometimes contain some ambiguous elements.  For
+instance, some programming languages (notably Ada, C++ and Objective-C)
+permit a single function name to be defined several times, for
+application in different contexts.  This is called "overloading".
+Another example involving Ada is generics.  A "generic package" is
+similar to C++ templates and is typically instantiated several times,
+resulting in the same function name being defined in different contexts.
+
+   In some cases and depending on the language, it is possible to adjust
+the expression to remove the ambiguity.  For instance in C++, you can
+specify the signature of the function you want to break on, as in
+`break FUNCTION(TYPES)'.  In Ada, using the fully qualified name of
+your function often makes the expression unambiguous as well.
+
+   When an ambiguity that needs to be resolved is detected, the debugger
+has the capability to display a menu of numbered choices for each
+possibility, and then waits for the selection with the prompt `>'.  The
+first option is always `[0] cancel', and typing `0 <RET>' aborts the
+current command.  If the command in which the expression was used
+allows more than one choice to be selected, the next option in the menu
+is `[1] all', and typing `1 <RET>' selects all possible choices.
+
+   For example, the following session excerpt shows an attempt to set a
+breakpoint at the overloaded symbol `String::after'.  We choose three
+particular definitions of that function name:
+
+     (gdb) b String::after
+     [0] cancel
+     [1] all
+     [2] file:String.cc; line number:867
+     [3] file:String.cc; line number:860
+     [4] file:String.cc; line number:875
+     [5] file:String.cc; line number:853
+     [6] file:String.cc; line number:846
+     [7] file:String.cc; line number:735
+     > 2 4 6
+     Breakpoint 1 at 0xb26c: file String.cc, line 867.
+     Breakpoint 2 at 0xb344: file String.cc, line 875.
+     Breakpoint 3 at 0xafcc: file String.cc, line 846.
+     Multiple breakpoints were set.
+     Use the "delete" command to delete unwanted
+      breakpoints.
+     (gdb)
+
+`set multiple-symbols MODE'
+     This option allows you to adjust the debugger behavior when an
+     expression is ambiguous.
+
+     By default, MODE is set to `all'.  If the command with which the
+     expression is used allows more than one choice, then GDB
+     automatically selects all possible choices.  For instance,
+     inserting a breakpoint on a function using an ambiguous name
+     results in a breakpoint inserted on each possible match.  However,
+     if a unique choice must be made, then GDB uses the menu to help
+     you disambiguate the expression.  For instance, printing the
+     address of an overloaded function will result in the use of the
+     menu.
+
+     When MODE is set to `ask', the debugger always uses the menu when
+     an ambiguity is detected.
+
+     Finally, when MODE is set to `cancel', the debugger reports an
+     error due to the ambiguity and the command is aborted.
+
+`show multiple-symbols'
+     Show the current value of the `multiple-symbols' setting.
+
+
+File: gdb.info,  Node: Variables,  Next: Arrays,  Prev: Ambiguous Expressions,  Up: Data
+
+10.3 Program Variables
+======================
+
+The most common kind of expression to use is the name of a variable in
+your program.
+
+   Variables in expressions are understood in the selected stack frame
+(*note Selecting a Frame: Selection.); they must be either:
+
+   * global (or file-static)
+
+or
+
+   * visible according to the scope rules of the programming language
+     from the point of execution in that frame
+
+This means that in the function
+
+     foo (a)
+          int a;
+     {
+       bar (a);
+       {
+         int b = test ();
+         bar (b);
+       }
+     }
+
+you can examine and use the variable `a' whenever your program is
+executing within the function `foo', but you can only use or examine
+the variable `b' while your program is executing inside the block where
+`b' is declared.
+
+   There is an exception: you can refer to a variable or function whose
+scope is a single source file even if the current execution point is not
+in this file.  But it is possible to have more than one such variable or
+function with the same name (in different source files).  If that
+happens, referring to that name has unpredictable effects.  If you wish,
+you can specify a static variable in a particular function or file by
+using the colon-colon (`::') notation:
+
+     FILE::VARIABLE
+     FUNCTION::VARIABLE
+
+Here FILE or FUNCTION is the name of the context for the static
+VARIABLE.  In the case of file names, you can use quotes to make sure
+GDB parses the file name as a single word--for example, to print a
+global value of `x' defined in `f2.c':
+
+     (gdb) p 'f2.c'::x
+
+   The `::' notation is normally used for referring to static
+variables, since you typically disambiguate uses of local variables in
+functions by selecting the appropriate frame and using the simple name
+of the variable.  However, you may also use this notation to refer to
+local variables in frames enclosing the selected frame:
+
+     void
+     foo (int a)
+     {
+       if (a < 10)
+         bar (a);
+       else
+         process (a);    /* Stop here */
+     }
+
+     int
+     bar (int a)
+     {
+       foo (a + 5);
+     }
+
+For example, if there is a breakpoint at the commented line, here is
+what you might see when the program stops after executing the call
+`bar(0)':
+
+     (gdb) p a
+     $1 = 10
+     (gdb) p bar::a
+     $2 = 5
+     (gdb) up 2
+     #2  0x080483d0 in foo (a=5) at foobar.c:12
+     (gdb) p a
+     $3 = 5
+     (gdb) p bar::a
+     $4 = 0
+
+   These uses of `::' are very rarely in conflict with the very similar
+use of the same notation in C++.  GDB also supports use of the C++
+scope resolution operator in GDB expressions.
+
+     _Warning:_ Occasionally, a local variable may appear to have the
+     wrong value at certain points in a function--just after entry to a
+     new scope, and just before exit.
+   You may see this problem when you are stepping by machine
+instructions.  This is because, on most machines, it takes more than
+one instruction to set up a stack frame (including local variable
+definitions); if you are stepping by machine instructions, variables
+may appear to have the wrong values until the stack frame is completely
+built.  On exit, it usually also takes more than one machine
+instruction to destroy a stack frame; after you begin stepping through
+that group of instructions, local variable definitions may be gone.
+
+   This may also happen when the compiler does significant
+optimizations.  To be sure of always seeing accurate values, turn off
+all optimization when compiling.
+
+   Another possible effect of compiler optimizations is to optimize
+unused variables out of existence, or assign variables to registers (as
+opposed to memory addresses).  Depending on the support for such cases
+offered by the debug info format used by the compiler, GDB might not be
+able to display values for such local variables.  If that happens, GDB
+will print a message like this:
+
+     No symbol "foo" in current context.
+
+   To solve such problems, either recompile without optimizations, or
+use a different debug info format, if the compiler supports several such
+formats.  *Note Compilation::, for more information on choosing compiler
+options.  *Note C and C++: C, for more information about debug info
+formats that are best suited to C++ programs.
+
+   If you ask to print an object whose contents are unknown to GDB,
+e.g., because its data type is not completely specified by the debug
+information, GDB will say `<incomplete type>'.  *Note incomplete type:
+Symbols, for more about this.
+
+   If you append `@entry' string to a function parameter name you get
+its value at the time the function got called.  If the value is not
+available an error message is printed.  Entry values are available only
+with some compilers.  Entry values are normally also printed at the
+function parameter list according to *Note set print entry-values::.
+
+     Breakpoint 1, d (i=30) at gdb.base/entry-value.c:29
+     29	  i++;
+     (gdb) next
+     30	  e (i);
+     (gdb) print i
+     $1 = 31
+     (gdb) print i at entry
+     $2 = 30
+
+   Strings are identified as arrays of `char' values without specified
+signedness.  Arrays of either `signed char' or `unsigned char' get
+printed as arrays of 1 byte sized integers.  `-fsigned-char' or
+`-funsigned-char' GCC options have no effect as GDB defines literal
+string type `"char"' as `char' without a sign.  For program code
+
+     char var0[] = "A";
+     signed char var1[] = "A";
+
+   You get during debugging
+     (gdb) print var0
+     $1 = "A"
+     (gdb) print var1
+     $2 = {65 'A', 0 '\0'}
+
+
+File: gdb.info,  Node: Arrays,  Next: Output Formats,  Prev: Variables,  Up: Data
+
+10.4 Artificial Arrays
+======================
+
+It is often useful to print out several successive objects of the same
+type in memory; a section of an array, or an array of dynamically
+determined size for which only a pointer exists in the program.
+
+   You can do this by referring to a contiguous span of memory as an
+"artificial array", using the binary operator `@'.  The left operand of
+`@' should be the first element of the desired array and be an
+individual object.  The right operand should be the desired length of
+the array.  The result is an array value whose elements are all of the
+type of the left argument.  The first element is actually the left
+argument; the second element comes from bytes of memory immediately
+following those that hold the first element, and so on.  Here is an
+example.  If a program says
+
+     int *array = (int *) malloc (len * sizeof (int));
+
+you can print the contents of `array' with
+
+     p *array at len
+
+   The left operand of `@' must reside in memory.  Array values made
+with `@' in this way behave just like other arrays in terms of
+subscripting, and are coerced to pointers when used in expressions.
+Artificial arrays most often appear in expressions via the value history
+(*note Value History: Value History.), after printing one out.
+
+   Another way to create an artificial array is to use a cast.  This
+re-interprets a value as if it were an array.  The value need not be in
+memory:
+     (gdb) p/x (short[2])0x12345678
+     $1 = {0x1234, 0x5678}
+
+   As a convenience, if you leave the array length out (as in
+`(TYPE[])VALUE') GDB calculates the size to fill the value (as
+`sizeof(VALUE)/sizeof(TYPE)':
+     (gdb) p/x (short[])0x12345678
+     $2 = {0x1234, 0x5678}
+
+   Sometimes the artificial array mechanism is not quite enough; in
+moderately complex data structures, the elements of interest may not
+actually be adjacent--for example, if you are interested in the values
+of pointers in an array.  One useful work-around in this situation is
+to use a convenience variable (*note Convenience Variables: Convenience
+Vars.) as a counter in an expression that prints the first interesting
+value, and then repeat that expression via <RET>.  For instance,
+suppose you have an array `dtab' of pointers to structures, and you are
+interested in the values of a field `fv' in each structure.  Here is an
+example of what you might type:
+
+     set $i = 0
+     p dtab[$i++]->fv
+     <RET>
+     <RET>
+     ...
+
+
+File: gdb.info,  Node: Output Formats,  Next: Memory,  Prev: Arrays,  Up: Data
+
+10.5 Output Formats
+===================
+
+By default, GDB prints a value according to its data type.  Sometimes
+this is not what you want.  For example, you might want to print a
+number in hex, or a pointer in decimal.  Or you might want to view data
+in memory at a certain address as a character string or as an
+instruction.  To do these things, specify an "output format" when you
+print a value.
+
+   The simplest use of output formats is to say how to print a value
+already computed.  This is done by starting the arguments of the
+`print' command with a slash and a format letter.  The format letters
+supported are:
+
+`x'
+     Regard the bits of the value as an integer, and print the integer
+     in hexadecimal.
+
+`d'
+     Print as integer in signed decimal.
+
+`u'
+     Print as integer in unsigned decimal.
+
+`o'
+     Print as integer in octal.
+
+`t'
+     Print as integer in binary.  The letter `t' stands for "two".  (1)
+
+`a'
+     Print as an address, both absolute in hexadecimal and as an offset
+     from the nearest preceding symbol.  You can use this format used
+     to discover where (in what function) an unknown address is located:
+
+          (gdb) p/a 0x54320
+          $3 = 0x54320 <_initialize_vx+396>
+
+     The command `info symbol 0x54320' yields similar results.  *Note
+     info symbol: Symbols.
+
+`c'
+     Regard as an integer and print it as a character constant.  This
+     prints both the numerical value and its character representation.
+     The character representation is replaced with the octal escape
+     `\nnn' for characters outside the 7-bit ASCII range.
+
+     Without this format, GDB displays `char', `unsigned char', and
+     `signed char' data as character constants.  Single-byte members of
+     vectors are displayed as integer data.
+
+`f'
+     Regard the bits of the value as a floating point number and print
+     using typical floating point syntax.
+
+`s'
+     Regard as a string, if possible.  With this format, pointers to
+     single-byte data are displayed as null-terminated strings and
+     arrays of single-byte data are displayed as fixed-length strings.
+     Other values are displayed in their natural types.
+
+     Without this format, GDB displays pointers to and arrays of
+     `char', `unsigned char', and `signed char' as strings.
+     Single-byte members of a vector are displayed as an integer array.
+
+`r'
+     Print using the `raw' formatting.  By default, GDB will use a
+     Python-based pretty-printer, if one is available (*note Pretty
+     Printing::).  This typically results in a higher-level display of
+     the value's contents.  The `r' format bypasses any Python
+     pretty-printer which might exist.
+
+   For example, to print the program counter in hex (*note
+Registers::), type
+
+     p/x $pc
+
+Note that no space is required before the slash; this is because command
+names in GDB cannot contain a slash.
+
+   To reprint the last value in the value history with a different
+format, you can use the `print' command with just a format and no
+expression.  For example, `p/x' reprints the last value in hex.
+
+   ---------- Footnotes ----------
+
+   (1) `b' cannot be used because these format letters are also used
+with the `x' command, where `b' stands for "byte"; see *Note Examining
+Memory: Memory.
+
+
+File: gdb.info,  Node: Memory,  Next: Auto Display,  Prev: Output Formats,  Up: Data
+
+10.6 Examining Memory
+=====================
+
+You can use the command `x' (for "examine") to examine memory in any of
+several formats, independently of your program's data types.
+
+`x/NFU ADDR'
+`x ADDR'
+`x'
+     Use the `x' command to examine memory.
+
+   N, F, and U are all optional parameters that specify how much memory
+to display and how to format it; ADDR is an expression giving the
+address where you want to start displaying memory.  If you use defaults
+for NFU, you need not type the slash `/'.  Several commands set
+convenient defaults for ADDR.
+
+N, the repeat count
+     The repeat count is a decimal integer; the default is 1.  It
+     specifies how much memory (counting by units U) to display.
+
+F, the display format
+     The display format is one of the formats used by `print' (`x',
+     `d', `u', `o', `t', `a', `c', `f', `s'), and in addition `i' (for
+     machine instructions).  The default is `x' (hexadecimal)
+     initially.  The default changes each time you use either `x' or
+     `print'.
+
+U, the unit size
+     The unit size is any of
+
+    `b'
+          Bytes.
+
+    `h'
+          Halfwords (two bytes).
+
+    `w'
+          Words (four bytes).  This is the initial default.
+
+    `g'
+          Giant words (eight bytes).
+
+     Each time you specify a unit size with `x', that size becomes the
+     default unit the next time you use `x'.  For the `i' format, the
+     unit size is ignored and is normally not written.  For the `s'
+     format, the unit size defaults to `b', unless it is explicitly
+     given.  Use `x /hs' to display 16-bit char strings and `x /ws' to
+     display 32-bit strings.  The next use of `x /s' will again display
+     8-bit strings.  Note that the results depend on the programming
+     language of the current compilation unit.  If the language is C,
+     the `s' modifier will use the UTF-16 encoding while `w' will use
+     UTF-32.  The encoding is set by the programming language and cannot
+     be altered.
+
+ADDR, starting display address
+     ADDR is the address where you want GDB to begin displaying memory.
+     The expression need not have a pointer value (though it may); it
+     is always interpreted as an integer address of a byte of memory.
+     *Note Expressions: Expressions, for more information on
+     expressions.  The default for ADDR is usually just after the last
+     address examined--but several other commands also set the default
+     address: `info breakpoints' (to the address of the last breakpoint
+     listed), `info line' (to the starting address of a line), and
+     `print' (if you use it to display a value from memory).
+
+   For example, `x/3uh 0x54320' is a request to display three halfwords
+(`h') of memory, formatted as unsigned decimal integers (`u'), starting
+at address `0x54320'.  `x/4xw $sp' prints the four words (`w') of
+memory above the stack pointer (here, `$sp'; *note Registers:
+Registers.) in hexadecimal (`x').
+
+   Since the letters indicating unit sizes are all distinct from the
+letters specifying output formats, you do not have to remember whether
+unit size or format comes first; either order works.  The output
+specifications `4xw' and `4wx' mean exactly the same thing.  (However,
+the count N must come first; `wx4' does not work.)
+
+   Even though the unit size U is ignored for the formats `s' and `i',
+you might still want to use a count N; for example, `3i' specifies that
+you want to see three machine instructions, including any operands.
+For convenience, especially when used with the `display' command, the
+`i' format also prints branch delay slot instructions, if any, beyond
+the count specified, which immediately follow the last instruction that
+is within the count.  The command `disassemble' gives an alternative
+way of inspecting machine instructions; see *Note Source and Machine
+Code: Machine Code.
+
+   All the defaults for the arguments to `x' are designed to make it
+easy to continue scanning memory with minimal specifications each time
+you use `x'.  For example, after you have inspected three machine
+instructions with `x/3i ADDR', you can inspect the next seven with just
+`x/7'.  If you use <RET> to repeat the `x' command, the repeat count N
+is used again; the other arguments default as for successive uses of
+`x'.
+
+   When examining machine instructions, the instruction at current
+program counter is shown with a `=>' marker. For example:
+
+     (gdb) x/5i $pc-6
+        0x804837f <main+11>: mov    %esp,%ebp
+        0x8048381 <main+13>: push   %ecx
+        0x8048382 <main+14>: sub    $0x4,%esp
+     => 0x8048385 <main+17>: movl   $0x8048460,(%esp)
+        0x804838c <main+24>: call   0x80482d4 <puts at plt>
+
+   The addresses and contents printed by the `x' command are not saved
+in the value history because there is often too much of them and they
+would get in the way.  Instead, GDB makes these values available for
+subsequent use in expressions as values of the convenience variables
+`$_' and `$__'.  After an `x' command, the last address examined is
+available for use in expressions in the convenience variable `$_'.  The
+contents of that address, as examined, are available in the convenience
+variable `$__'.
+
+   If the `x' command has a repeat count, the address and contents saved
+are from the last memory unit printed; this is not the same as the last
+address printed if several units were printed on the last line of
+output.
+
+   When you are debugging a program running on a remote target machine
+(*note Remote Debugging::), you may wish to verify the program's image
+in the remote machine's memory against the executable file you
+downloaded to the target.  The `compare-sections' command is provided
+for such situations.
+
+`compare-sections [SECTION-NAME]'
+     Compare the data of a loadable section SECTION-NAME in the
+     executable file of the program being debugged with the same
+     section in the remote machine's memory, and report any mismatches.
+     With no arguments, compares all loadable sections.  This command's
+     availability depends on the target's support for the `"qCRC"'
+     remote request.
+
diff --git a/gdb/doc/gdb.info-2 b/gdb/doc/gdb.info-2
new file mode 100644
index 0000000..878d95a
--- /dev/null
+++ b/gdb/doc/gdb.info-2
@@ -0,0 +1,7468 @@
+This is gdb.info, produced by makeinfo version 4.8 from ./gdb.texinfo.
+
+INFO-DIR-SECTION Software development
+START-INFO-DIR-ENTRY
+* Gdb: (gdb).                     The GNU debugger.
+END-INFO-DIR-ENTRY
+
+   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+2010 2011, 2012 Free Software Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "Free Software" and "Free Software Needs Free
+Documentation", with the Front-Cover Texts being "A GNU Manual," and
+with the Back-Cover Texts as in (a) below.
+
+   (a) The FSF's Back-Cover Text is: "You are free to copy and modify
+this GNU Manual.  Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom."
+
+   This file documents the GNU debugger GDB.
+
+   This is the Tenth Edition, of `Debugging with GDB: the GNU
+Source-Level Debugger' for GDB (GDB) Version 7.5.
+
+   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+2010 2011, 2012 Free Software Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "Free Software" and "Free Software Needs Free
+Documentation", with the Front-Cover Texts being "A GNU Manual," and
+with the Back-Cover Texts as in (a) below.
+
+   (a) The FSF's Back-Cover Text is: "You are free to copy and modify
+this GNU Manual.  Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom."
+
+
+File: gdb.info,  Node: Auto Display,  Next: Print Settings,  Prev: Memory,  Up: Data
+
+10.7 Automatic Display
+======================
+
+If you find that you want to print the value of an expression frequently
+(to see how it changes), you might want to add it to the "automatic
+display list" so that GDB prints its value each time your program stops.
+Each expression added to the list is given a number to identify it; to
+remove an expression from the list, you specify that number.  The
+automatic display looks like this:
+
+     2: foo = 38
+     3: bar[5] = (struct hack *) 0x3804
+
+This display shows item numbers, expressions and their current values.
+As with displays you request manually using `x' or `print', you can
+specify the output format you prefer; in fact, `display' decides
+whether to use `print' or `x' depending your format specification--it
+uses `x' if you specify either the `i' or `s' format, or a unit size;
+otherwise it uses `print'.
+
+`display EXPR'
+     Add the expression EXPR to the list of expressions to display each
+     time your program stops.  *Note Expressions: Expressions.
+
+     `display' does not repeat if you press <RET> again after using it.
+
+`display/FMT EXPR'
+     For FMT specifying only a display format and not a size or count,
+     add the expression EXPR to the auto-display list but arrange to
+     display it each time in the specified format FMT.  *Note Output
+     Formats: Output Formats.
+
+`display/FMT ADDR'
+     For FMT `i' or `s', or including a unit-size or a number of units,
+     add the expression ADDR as a memory address to be examined each
+     time your program stops.  Examining means in effect doing `x/FMT
+     ADDR'.  *Note Examining Memory: Memory.
+
+   For example, `display/i $pc' can be helpful, to see the machine
+instruction about to be executed each time execution stops (`$pc' is a
+common name for the program counter; *note Registers: Registers.).
+
+`undisplay DNUMS...'
+`delete display DNUMS...'
+     Remove items from the list of expressions to display.  Specify the
+     numbers of the displays that you want affected with the command
+     argument DNUMS.  It can be a single display number, one of the
+     numbers shown in the first field of the `info display' display; or
+     it could be a range of display numbers, as in `2-4'.
+
+     `undisplay' does not repeat if you press <RET> after using it.
+     (Otherwise you would just get the error `No display number ...'.)
+
+`disable display DNUMS...'
+     Disable the display of item numbers DNUMS.  A disabled display
+     item is not printed automatically, but is not forgotten.  It may be
+     enabled again later.  Specify the numbers of the displays that you
+     want affected with the command argument DNUMS.  It can be a single
+     display number, one of the numbers shown in the first field of the
+     `info display' display; or it could be a range of display numbers,
+     as in `2-4'.
+
+`enable display DNUMS...'
+     Enable display of item numbers DNUMS.  It becomes effective once
+     again in auto display of its expression, until you specify
+     otherwise.  Specify the numbers of the displays that you want
+     affected with the command argument DNUMS.  It can be a single
+     display number, one of the numbers shown in the first field of the
+     `info display' display; or it could be a range of display numbers,
+     as in `2-4'.
+
+`display'
+     Display the current values of the expressions on the list, just as
+     is done when your program stops.
+
+`info display'
+     Print the list of expressions previously set up to display
+     automatically, each one with its item number, but without showing
+     the values.  This includes disabled expressions, which are marked
+     as such.  It also includes expressions which would not be
+     displayed right now because they refer to automatic variables not
+     currently available.
+
+   If a display expression refers to local variables, then it does not
+make sense outside the lexical context for which it was set up.  Such an
+expression is disabled when execution enters a context where one of its
+variables is not defined.  For example, if you give the command
+`display last_char' while inside a function with an argument
+`last_char', GDB displays this argument while your program continues to
+stop inside that function.  When it stops elsewhere--where there is no
+variable `last_char'--the display is disabled automatically.  The next
+time your program stops where `last_char' is meaningful, you can enable
+the display expression once again.
+
+
+File: gdb.info,  Node: Print Settings,  Next: Pretty Printing,  Prev: Auto Display,  Up: Data
+
+10.8 Print Settings
+===================
+
+GDB provides the following ways to control how arrays, structures, and
+symbols are printed.
+
+These settings are useful for debugging programs in any language:
+
+`set print address'
+`set print address on'
+     GDB prints memory addresses showing the location of stack traces,
+     structure values, pointer values, breakpoints, and so forth, even
+     when it also displays the contents of those addresses.  The default
+     is `on'.  For example, this is what a stack frame display looks
+     like with `set print address on':
+
+          (gdb) f
+          #0  set_quotes (lq=0x34c78 "<<", rq=0x34c88 ">>")
+              at input.c:530
+          530         if (lquote != def_lquote)
+
+`set print address off'
+     Do not print addresses when displaying their contents.  For
+     example, this is the same stack frame displayed with `set print
+     address off':
+
+          (gdb) set print addr off
+          (gdb) f
+          #0  set_quotes (lq="<<", rq=">>") at input.c:530
+          530         if (lquote != def_lquote)
+
+     You can use `set print address off' to eliminate all machine
+     dependent displays from the GDB interface.  For example, with
+     `print address off', you should get the same text for backtraces on
+     all machines--whether or not they involve pointer arguments.
+
+`show print address'
+     Show whether or not addresses are to be printed.
+
+   When GDB prints a symbolic address, it normally prints the closest
+earlier symbol plus an offset.  If that symbol does not uniquely
+identify the address (for example, it is a name whose scope is a single
+source file), you may need to clarify.  One way to do this is with
+`info line', for example `info line *0x4537'.  Alternately, you can set
+GDB to print the source file and line number when it prints a symbolic
+address:
+
+`set print symbol-filename on'
+     Tell GDB to print the source file name and line number of a symbol
+     in the symbolic form of an address.
+
+`set print symbol-filename off'
+     Do not print source file name and line number of a symbol.  This
+     is the default.
+
+`show print symbol-filename'
+     Show whether or not GDB will print the source file name and line
+     number of a symbol in the symbolic form of an address.
+
+   Another situation where it is helpful to show symbol filenames and
+line numbers is when disassembling code; GDB shows you the line number
+and source file that corresponds to each instruction.
+
+   Also, you may wish to see the symbolic form only if the address being
+printed is reasonably close to the closest earlier symbol:
+
+`set print max-symbolic-offset MAX-OFFSET'
+     Tell GDB to only display the symbolic form of an address if the
+     offset between the closest earlier symbol and the address is less
+     than MAX-OFFSET.  The default is 0, which tells GDB to always
+     print the symbolic form of an address if any symbol precedes it.
+
+`show print max-symbolic-offset'
+     Ask how large the maximum offset is that GDB prints in a symbolic
+     address.
+
+   If you have a pointer and you are not sure where it points, try `set
+print symbol-filename on'.  Then you can determine the name and source
+file location of the variable where it points, using `p/a POINTER'.
+This interprets the address in symbolic form.  For example, here GDB
+shows that a variable `ptt' points at another variable `t', defined in
+`hi2.c':
+
+     (gdb) set print symbol-filename on
+     (gdb) p/a ptt
+     $4 = 0xe008 <t in hi2.c>
+
+     _Warning:_ For pointers that point to a local variable, `p/a' does
+     not show the symbol name and filename of the referent, even with
+     the appropriate `set print' options turned on.
+
+   You can also enable `/a'-like formatting all the time using `set
+print symbol on':
+
+`set print symbol on'
+     Tell GDB to print the symbol corresponding to an address, if one
+     exists.
+
+`set print symbol off'
+     Tell GDB not to print the symbol corresponding to an address.  In
+     this mode, GDB will still print the symbol corresponding to
+     pointers to functions.  This is the default.
+
+`show print symbol'
+     Show whether GDB will display the symbol corresponding to an
+     address.
+
+   Other settings control how different kinds of objects are printed:
+
+`set print array'
+`set print array on'
+     Pretty print arrays.  This format is more convenient to read, but
+     uses more space.  The default is off.
+
+`set print array off'
+     Return to compressed format for arrays.
+
+`show print array'
+     Show whether compressed or pretty format is selected for displaying
+     arrays.
+
+`set print array-indexes'
+`set print array-indexes on'
+     Print the index of each element when displaying arrays.  May be
+     more convenient to locate a given element in the array or quickly
+     find the index of a given element in that printed array.  The
+     default is off.
+
+`set print array-indexes off'
+     Stop printing element indexes when displaying arrays.
+
+`show print array-indexes'
+     Show whether the index of each element is printed when displaying
+     arrays.
+
+`set print elements NUMBER-OF-ELEMENTS'
+     Set a limit on how many elements of an array GDB will print.  If
+     GDB is printing a large array, it stops printing after it has
+     printed the number of elements set by the `set print elements'
+     command.  This limit also applies to the display of strings.  When
+     GDB starts, this limit is set to 200.  Setting  NUMBER-OF-ELEMENTS
+     to zero means that the printing is unlimited.
+
+`show print elements'
+     Display the number of elements of a large array that GDB will
+     print.  If the number is 0, then the printing is unlimited.
+
+`set print frame-arguments VALUE'
+     This command allows to control how the values of arguments are
+     printed when the debugger prints a frame (*note Frames::).  The
+     possible values are:
+
+    `all'
+          The values of all arguments are printed.
+
+    `scalars'
+          Print the value of an argument only if it is a scalar.  The
+          value of more complex arguments such as arrays, structures,
+          unions, etc, is replaced by `...'.  This is the default.
+          Here is an example where only scalar arguments are shown:
+
+               #1  0x08048361 in call_me (i=3, s=..., ss=0xbf8d508c, u=..., e=green)
+                 at frame-args.c:23
+
+    `none'
+          None of the argument values are printed.  Instead, the value
+          of each argument is replaced by `...'.  In this case, the
+          example above now becomes:
+
+               #1  0x08048361 in call_me (i=..., s=..., ss=..., u=..., e=...)
+                 at frame-args.c:23
+
+     By default, only scalar arguments are printed.  This command can
+     be used to configure the debugger to print the value of all
+     arguments, regardless of their type.  However, it is often
+     advantageous to not print the value of more complex parameters.
+     For instance, it reduces the amount of information printed in each
+     frame, making the backtrace more readable.  Also, it improves
+     performance when displaying Ada frames, because the computation of
+     large arguments can sometimes be CPU-intensive, especially in
+     large applications.  Setting `print frame-arguments' to `scalars'
+     (the default) or `none' avoids this computation, thus speeding up
+     the display of each Ada frame.
+
+`show print frame-arguments'
+     Show how the value of arguments should be displayed when printing
+     a frame.
+
+`set print entry-values VALUE'
+     Set printing of frame argument values at function entry.  In some
+     cases GDB can determine the value of function argument which was
+     passed by the function caller, even if the value was modified
+     inside the called function and therefore is different.  With
+     optimized code, the current value could be unavailable, but the
+     entry value may still be known.
+
+     The default value is `default' (see below for its description).
+     Older GDB behaved as with the setting `no'.  Compilers not
+     supporting this feature will behave in the `default' setting the
+     same way as with the `no' setting.
+
+     This functionality is currently supported only by DWARF 2
+     debugging format and the compiler has to produce
+     `DW_TAG_GNU_call_site' tags.  With GCC, you need to specify `-O
+     -g' during compilation, to get this information.
+
+     The VALUE parameter can be one of the following:
+
+    `no'
+          Print only actual parameter values, never print values from
+          function entry point.
+               #0  equal (val=5)
+               #0  different (val=6)
+               #0  lost (val=<optimized out>)
+               #0  born (val=10)
+               #0  invalid (val=<optimized out>)
+
+    `only'
+          Print only parameter values from function entry point.  The
+          actual parameter values are never printed.
+               #0  equal (val at entry=5)
+               #0  different (val at entry=5)
+               #0  lost (val at entry=5)
+               #0  born (val at entry=<optimized out>)
+               #0  invalid (val at entry=<optimized out>)
+
+    `preferred'
+          Print only parameter values from function entry point.  If
+          value from function entry point is not known while the actual
+          value is known, print the actual value for such parameter.
+               #0  equal (val at entry=5)
+               #0  different (val at entry=5)
+               #0  lost (val at entry=5)
+               #0  born (val=10)
+               #0  invalid (val at entry=<optimized out>)
+
+    `if-needed'
+          Print actual parameter values.  If actual parameter value is
+          not known while value from function entry point is known,
+          print the entry point value for such parameter.
+               #0  equal (val=5)
+               #0  different (val=6)
+               #0  lost (val at entry=5)
+               #0  born (val=10)
+               #0  invalid (val=<optimized out>)
+
+    `both'
+          Always print both the actual parameter value and its value
+          from function entry point, even if values of one or both are
+          not available due to compiler optimizations.
+               #0  equal (val=5, val at entry=5)
+               #0  different (val=6, val at entry=5)
+               #0  lost (val=<optimized out>, val at entry=5)
+               #0  born (val=10, val at entry=<optimized out>)
+               #0  invalid (val=<optimized out>, val at entry=<optimized out>)
+
+    `compact'
+          Print the actual parameter value if it is known and also its
+          value from function entry point if it is known.  If neither
+          is known, print for the actual value `<optimized out>'.  If
+          not in MI mode (*note GDB/MI::) and if both values are known
+          and identical, print the shortened `param=param at entry=VALUE'
+          notation.
+               #0  equal (val=val at entry=5)
+               #0  different (val=6, val at entry=5)
+               #0  lost (val at entry=5)
+               #0  born (val=10)
+               #0  invalid (val=<optimized out>)
+
+    `default'
+          Always print the actual parameter value.  Print also its
+          value from function entry point, but only if it is known.  If
+          not in MI mode (*note GDB/MI::) and if both values are known
+          and identical, print the shortened `param=param at entry=VALUE'
+          notation.
+               #0  equal (val=val at entry=5)
+               #0  different (val=6, val at entry=5)
+               #0  lost (val=<optimized out>, val at entry=5)
+               #0  born (val=10)
+               #0  invalid (val=<optimized out>)
+
+     For analysis messages on possible failures of frame argument
+     values at function entry resolution see *Note set debug
+     entry-values::.
+
+`show print entry-values'
+     Show the method being used for printing of frame argument values
+     at function entry.
+
+`set print repeats'
+     Set the threshold for suppressing display of repeated array
+     elements.  When the number of consecutive identical elements of an
+     array exceeds the threshold, GDB prints the string `"<repeats N
+     times>"', where N is the number of identical repetitions, instead
+     of displaying the identical elements themselves.  Setting the
+     threshold to zero will cause all elements to be individually
+     printed.  The default threshold is 10.
+
+`show print repeats'
+     Display the current threshold for printing repeated identical
+     elements.
+
+`set print null-stop'
+     Cause GDB to stop printing the characters of an array when the
+     first NULL is encountered.  This is useful when large arrays
+     actually contain only short strings.  The default is off.
+
+`show print null-stop'
+     Show whether GDB stops printing an array on the first NULL
+     character.
+
+`set print pretty on'
+     Cause GDB to print structures in an indented format with one member
+     per line, like this:
+
+          $1 = {
+            next = 0x0,
+            flags = {
+              sweet = 1,
+              sour = 1
+            },
+            meat = 0x54 "Pork"
+          }
+
+`set print pretty off'
+     Cause GDB to print structures in a compact format, like this:
+
+          $1 = {next = 0x0, flags = {sweet = 1, sour = 1}, \
+          meat = 0x54 "Pork"}
+
+     This is the default format.
+
+`show print pretty'
+     Show which format GDB is using to print structures.
+
+`set print sevenbit-strings on'
+     Print using only seven-bit characters; if this option is set, GDB
+     displays any eight-bit characters (in strings or character values)
+     using the notation `\'NNN.  This setting is best if you are
+     working in English (ASCII) and you use the high-order bit of
+     characters as a marker or "meta" bit.
+
+`set print sevenbit-strings off'
+     Print full eight-bit characters.  This allows the use of more
+     international character sets, and is the default.
+
+`show print sevenbit-strings'
+     Show whether or not GDB is printing only seven-bit characters.
+
+`set print union on'
+     Tell GDB to print unions which are contained in structures and
+     other unions.  This is the default setting.
+
+`set print union off'
+     Tell GDB not to print unions which are contained in structures and
+     other unions.  GDB will print `"{...}"' instead.
+
+`show print union'
+     Ask GDB whether or not it will print unions which are contained in
+     structures and other unions.
+
+     For example, given the declarations
+
+          typedef enum {Tree, Bug} Species;
+          typedef enum {Big_tree, Acorn, Seedling} Tree_forms;
+          typedef enum {Caterpillar, Cocoon, Butterfly}
+                        Bug_forms;
+
+          struct thing {
+            Species it;
+            union {
+              Tree_forms tree;
+              Bug_forms bug;
+            } form;
+          };
+
+          struct thing foo = {Tree, {Acorn}};
+
+     with `set print union on' in effect `p foo' would print
+
+          $1 = {it = Tree, form = {tree = Acorn, bug = Cocoon}}
+
+     and with `set print union off' in effect it would print
+
+          $1 = {it = Tree, form = {...}}
+
+     `set print union' affects programs written in C-like languages and
+     in Pascal.
+
+These settings are of interest when debugging C++ programs:
+
+`set print demangle'
+`set print demangle on'
+     Print C++ names in their source form rather than in the encoded
+     ("mangled") form passed to the assembler and linker for type-safe
+     linkage.  The default is on.
+
+`show print demangle'
+     Show whether C++ names are printed in mangled or demangled form.
+
+`set print asm-demangle'
+`set print asm-demangle on'
+     Print C++ names in their source form rather than their mangled
+     form, even in assembler code printouts such as instruction
+     disassemblies.  The default is off.
+
+`show print asm-demangle'
+     Show whether C++ names in assembly listings are printed in mangled
+     or demangled form.
+
+`set demangle-style STYLE'
+     Choose among several encoding schemes used by different compilers
+     to represent C++ names.  The choices for STYLE are currently:
+
+    `auto'
+          Allow GDB to choose a decoding style by inspecting your
+          program.
+
+    `gnu'
+          Decode based on the GNU C++ compiler (`g++') encoding
+          algorithm.  This is the default.
+
+    `hp'
+          Decode based on the HP ANSI C++ (`aCC') encoding algorithm.
+
+    `lucid'
+          Decode based on the Lucid C++ compiler (`lcc') encoding
+          algorithm.
+
+    `arm'
+          Decode using the algorithm in the `C++ Annotated Reference
+          Manual'.  *Warning:* this setting alone is not sufficient to
+          allow debugging `cfront'-generated executables.  GDB would
+          require further enhancement to permit that.
+
+     If you omit STYLE, you will see a list of possible formats.
+
+`show demangle-style'
+     Display the encoding style currently in use for decoding C++
+     symbols.
+
+`set print object'
+`set print object on'
+     When displaying a pointer to an object, identify the _actual_
+     (derived) type of the object rather than the _declared_ type, using
+     the virtual function table.  Note that the virtual function table
+     is required--this feature can only work for objects that have
+     run-time type identification; a single virtual method in the
+     object's declared type is sufficient.  Note that this setting is
+     also taken into account when working with variable objects via MI
+     (*note GDB/MI::).
+
+`set print object off'
+     Display only the declared type of objects, without reference to the
+     virtual function table.  This is the default setting.
+
+`show print object'
+     Show whether actual, or declared, object types are displayed.
+
+`set print static-members'
+`set print static-members on'
+     Print static members when displaying a C++ object.  The default is
+     on.
+
+`set print static-members off'
+     Do not print static members when displaying a C++ object.
+
+`show print static-members'
+     Show whether C++ static members are printed or not.
+
+`set print pascal_static-members'
+`set print pascal_static-members on'
+     Print static members when displaying a Pascal object.  The default
+     is on.
+
+`set print pascal_static-members off'
+     Do not print static members when displaying a Pascal object.
+
+`show print pascal_static-members'
+     Show whether Pascal static members are printed or not.
+
+`set print vtbl'
+`set print vtbl on'
+     Pretty print C++ virtual function tables.  The default is off.
+     (The `vtbl' commands do not work on programs compiled with the HP
+     ANSI C++ compiler (`aCC').)
+
+`set print vtbl off'
+     Do not pretty print C++ virtual function tables.
+
+`show print vtbl'
+     Show whether C++ virtual function tables are pretty printed, or
+     not.
+
+
+File: gdb.info,  Node: Pretty Printing,  Next: Value History,  Prev: Print Settings,  Up: Data
+
+10.9 Pretty Printing
+====================
+
+GDB provides a mechanism to allow pretty-printing of values using
+Python code.  It greatly simplifies the display of complex objects.
+This mechanism works for both MI and the CLI.
+
+* Menu:
+
+* Pretty-Printer Introduction::  Introduction to pretty-printers
+* Pretty-Printer Example::       An example pretty-printer
+* Pretty-Printer Commands::      Pretty-printer commands
+
+
+File: gdb.info,  Node: Pretty-Printer Introduction,  Next: Pretty-Printer Example,  Up: Pretty Printing
+
+10.9.1 Pretty-Printer Introduction
+----------------------------------
+
+When GDB prints a value, it first sees if there is a pretty-printer
+registered for the value.  If there is then GDB invokes the
+pretty-printer to print the value.  Otherwise the value is printed
+normally.
+
+   Pretty-printers are normally named.  This makes them easy to manage.
+The `info pretty-printer' command will list all the installed
+pretty-printers with their names.  If a pretty-printer can handle
+multiple data types, then its "subprinters" are the printers for the
+individual data types.  Each such subprinter has its own name.  The
+format of the name is PRINTER-NAME;SUBPRINTER-NAME.
+
+   Pretty-printers are installed by "registering" them with GDB.
+Typically they are automatically loaded and registered when the
+corresponding debug information is loaded, thus making them available
+without having to do anything special.
+
+   There are three places where a pretty-printer can be registered.
+
+   * Pretty-printers registered globally are available when debugging
+     all inferiors.
+
+   * Pretty-printers registered with a program space are available only
+     when debugging that program.  *Note Progspaces In Python::, for
+     more details on program spaces in Python.
+
+   * Pretty-printers registered with an objfile are loaded and unloaded
+     with the corresponding objfile (e.g., shared library).  *Note
+     Objfiles In Python::, for more details on objfiles in Python.
+
+   *Note Selecting Pretty-Printers::, for further information on how
+pretty-printers are selected,
+
+   *Note Writing a Pretty-Printer::, for implementing pretty printers
+for new types.
+
+
+File: gdb.info,  Node: Pretty-Printer Example,  Next: Pretty-Printer Commands,  Prev: Pretty-Printer Introduction,  Up: Pretty Printing
+
+10.9.2 Pretty-Printer Example
+-----------------------------
+
+Here is how a C++ `std::string' looks without a pretty-printer:
+
+     (gdb) print s
+     $1 = {
+       static npos = 4294967295,
+       _M_dataplus = {
+         <std::allocator<char>> = {
+           <__gnu_cxx::new_allocator<char>> = {
+             <No data fields>}, <No data fields>
+           },
+         members of std::basic_string<char, std::char_traits<char>,
+           std::allocator<char> >::_Alloc_hider:
+         _M_p = 0x804a014 "abcd"
+       }
+     }
+
+   With a pretty-printer for `std::string' only the contents are
+printed:
+
+     (gdb) print s
+     $2 = "abcd"
+
+
+File: gdb.info,  Node: Pretty-Printer Commands,  Prev: Pretty-Printer Example,  Up: Pretty Printing
+
+10.9.3 Pretty-Printer Commands
+------------------------------
+
+`info pretty-printer [OBJECT-REGEXP [NAME-REGEXP]]'
+     Print the list of installed pretty-printers.  This includes
+     disabled pretty-printers, which are marked as such.
+
+     OBJECT-REGEXP is a regular expression matching the objects whose
+     pretty-printers to list.  Objects can be `global', the program
+     space's file (*note Progspaces In Python::), and the object files
+     within that program space (*note Objfiles In Python::).  *Note
+     Selecting Pretty-Printers::, for details on how GDB looks up a
+     printer from these three objects.
+
+     NAME-REGEXP is a regular expression matching the name of the
+     printers to list.
+
+`disable pretty-printer [OBJECT-REGEXP [NAME-REGEXP]]'
+     Disable pretty-printers matching OBJECT-REGEXP and NAME-REGEXP.  A
+     disabled pretty-printer is not forgotten, it may be enabled again
+     later.
+
+`enable pretty-printer [OBJECT-REGEXP [NAME-REGEXP]]'
+     Enable pretty-printers matching OBJECT-REGEXP and NAME-REGEXP.
+
+   Example:
+
+   Suppose we have three pretty-printers installed: one from library1.so
+named `foo' that prints objects of type `foo', and another from
+library2.so named `bar' that prints two types of objects, `bar1' and
+`bar2'.
+
+     (gdb) info pretty-printer
+     library1.so:
+       foo
+     library2.so:
+       bar
+         bar1
+         bar2
+     (gdb) info pretty-printer library2
+     library2.so:
+       bar
+         bar1
+         bar2
+     (gdb) disable pretty-printer library1
+     1 printer disabled
+     2 of 3 printers enabled
+     (gdb) info pretty-printer
+     library1.so:
+       foo [disabled]
+     library2.so:
+       bar
+         bar1
+         bar2
+     (gdb) disable pretty-printer library2 bar:bar1
+     1 printer disabled
+     1 of 3 printers enabled
+     (gdb) info pretty-printer library2
+     library1.so:
+       foo [disabled]
+     library2.so:
+       bar
+         bar1 [disabled]
+         bar2
+     (gdb) disable pretty-printer library2 bar
+     1 printer disabled
+     0 of 3 printers enabled
+     (gdb) info pretty-printer library2
+     library1.so:
+       foo [disabled]
+     library2.so:
+       bar [disabled]
+         bar1 [disabled]
+         bar2
+
+   Note that for `bar' the entire printer can be disabled, as can each
+individual subprinter.
+
+
+File: gdb.info,  Node: Value History,  Next: Convenience Vars,  Prev: Pretty Printing,  Up: Data
+
+10.10 Value History
+===================
+
+Values printed by the `print' command are saved in the GDB "value
+history".  This allows you to refer to them in other expressions.
+Values are kept until the symbol table is re-read or discarded (for
+example with the `file' or `symbol-file' commands).  When the symbol
+table changes, the value history is discarded, since the values may
+contain pointers back to the types defined in the symbol table.
+
+   The values printed are given "history numbers" by which you can
+refer to them.  These are successive integers starting with one.
+`print' shows you the history number assigned to a value by printing
+`$NUM = ' before the value; here NUM is the history number.
+
+   To refer to any previous value, use `$' followed by the value's
+history number.  The way `print' labels its output is designed to
+remind you of this.  Just `$' refers to the most recent value in the
+history, and `$$' refers to the value before that.  `$$N' refers to the
+Nth value from the end; `$$2' is the value just prior to `$$', `$$1' is
+equivalent to `$$', and `$$0' is equivalent to `$'.
+
+   For example, suppose you have just printed a pointer to a structure
+and want to see the contents of the structure.  It suffices to type
+
+     p *$
+
+   If you have a chain of structures where the component `next' points
+to the next one, you can print the contents of the next one with this:
+
+     p *$.next
+
+You can print successive links in the chain by repeating this
+command--which you can do by just typing <RET>.
+
+   Note that the history records values, not expressions.  If the value
+of `x' is 4 and you type these commands:
+
+     print x
+     set x=5
+
+then the value recorded in the value history by the `print' command
+remains 4 even though the value of `x' has changed.
+
+`show values'
+     Print the last ten values in the value history, with their item
+     numbers.  This is like `p $$9' repeated ten times, except that
+     `show values' does not change the history.
+
+`show values N'
+     Print ten history values centered on history item number N.
+
+`show values +'
+     Print ten history values just after the values last printed.  If
+     no more values are available, `show values +' produces no display.
+
+   Pressing <RET> to repeat `show values N' has exactly the same effect
+as `show values +'.
+
+
+File: gdb.info,  Node: Convenience Vars,  Next: Registers,  Prev: Value History,  Up: Data
+
+10.11 Convenience Variables
+===========================
+
+GDB provides "convenience variables" that you can use within GDB to
+hold on to a value and refer to it later.  These variables exist
+entirely within GDB; they are not part of your program, and setting a
+convenience variable has no direct effect on further execution of your
+program.  That is why you can use them freely.
+
+   Convenience variables are prefixed with `$'.  Any name preceded by
+`$' can be used for a convenience variable, unless it is one of the
+predefined machine-specific register names (*note Registers:
+Registers.).  (Value history references, in contrast, are _numbers_
+preceded by `$'.  *Note Value History: Value History.)
+
+   You can save a value in a convenience variable with an assignment
+expression, just as you would set a variable in your program.  For
+example:
+
+     set $foo = *object_ptr
+
+would save in `$foo' the value contained in the object pointed to by
+`object_ptr'.
+
+   Using a convenience variable for the first time creates it, but its
+value is `void' until you assign a new value.  You can alter the value
+with another assignment at any time.
+
+   Convenience variables have no fixed types.  You can assign a
+convenience variable any type of value, including structures and
+arrays, even if that variable already has a value of a different type.
+The convenience variable, when used as an expression, has the type of
+its current value.
+
+`show convenience'
+     Print a list of convenience variables used so far, and their
+     values.  Abbreviated `show conv'.
+
+`init-if-undefined $VARIABLE = EXPRESSION'
+     Set a convenience variable if it has not already been set.  This
+     is useful for user-defined commands that keep some state.  It is
+     similar, in concept, to using local static variables with
+     initializers in C (except that convenience variables are global).
+     It can also be used to allow users to override default values used
+     in a command script.
+
+     If the variable is already defined then the expression is not
+     evaluated so any side-effects do not occur.
+
+   One of the ways to use a convenience variable is as a counter to be
+incremented or a pointer to be advanced.  For example, to print a field
+from successive elements of an array of structures:
+
+     set $i = 0
+     print bar[$i++]->contents
+
+Repeat that command by typing <RET>.
+
+   Some convenience variables are created automatically by GDB and given
+values likely to be useful.
+
+`$_'
+     The variable `$_' is automatically set by the `x' command to the
+     last address examined (*note Examining Memory: Memory.).  Other
+     commands which provide a default address for `x' to examine also
+     set `$_' to that address; these commands include `info line' and
+     `info breakpoint'.  The type of `$_' is `void *' except when set
+     by the `x' command, in which case it is a pointer to the type of
+     `$__'.
+
+`$__'
+     The variable `$__' is automatically set by the `x' command to the
+     value found in the last address examined.  Its type is chosen to
+     match the format in which the data was printed.
+
+`$_exitcode'
+     The variable `$_exitcode' is automatically set to the exit code
+     when the program being debugged terminates.
+
+`$_probe_argc'
+`$_probe_arg0...$_probe_arg11'
+     Arguments to a static probe.  *Note Static Probe Points::.
+
+`$_sdata'
+     The variable `$_sdata' contains extra collected static tracepoint
+     data.  *Note Tracepoint Action Lists: Tracepoint Actions.  Note
+     that `$_sdata' could be empty, if not inspecting a trace buffer, or
+     if extra static tracepoint data has not been collected.
+
+`$_siginfo'
+     The variable `$_siginfo' contains extra signal information (*note
+     extra signal information::).  Note that `$_siginfo' could be
+     empty, if the application has not yet received any signals.  For
+     example, it will be empty before you execute the `run' command.
+
+`$_tlb'
+     The variable `$_tlb' is automatically set when debugging
+     applications running on MS-Windows in native mode or connected to
+     gdbserver that supports the `qGetTIBAddr' request.  *Note General
+     Query Packets::.  This variable contains the address of the thread
+     information block.
+
+
+   On HP-UX systems, if you refer to a function or variable name that
+begins with a dollar sign, GDB searches for a user or system name
+first, before it searches for a convenience variable.
+
+   GDB also supplies some "convenience functions".  These have a syntax
+similar to convenience variables.  A convenience function can be used
+in an expression just like an ordinary function; however, a convenience
+function is implemented internally to GDB.
+
+`help function'
+     Print a list of all convenience functions.
+
+
+File: gdb.info,  Node: Registers,  Next: Floating Point Hardware,  Prev: Convenience Vars,  Up: Data
+
+10.12 Registers
+===============
+
+You can refer to machine register contents, in expressions, as variables
+with names starting with `$'.  The names of registers are different for
+each machine; use `info registers' to see the names used on your
+machine.
+
+`info registers'
+     Print the names and values of all registers except floating-point
+     and vector registers (in the selected stack frame).
+
+`info all-registers'
+     Print the names and values of all registers, including
+     floating-point and vector registers (in the selected stack frame).
+
+`info registers REGNAME ...'
+     Print the "relativized" value of each specified register REGNAME.
+     As discussed in detail below, register values are normally
+     relative to the selected stack frame.  REGNAME may be any register
+     name valid on the machine you are using, with or without the
+     initial `$'.
+
+   GDB has four "standard" register names that are available (in
+expressions) on most machines--whenever they do not conflict with an
+architecture's canonical mnemonics for registers.  The register names
+`$pc' and `$sp' are used for the program counter register and the stack
+pointer.  `$fp' is used for a register that contains a pointer to the
+current stack frame, and `$ps' is used for a register that contains the
+processor status.  For example, you could print the program counter in
+hex with
+
+     p/x $pc
+
+or print the instruction to be executed next with
+
+     x/i $pc
+
+or add four to the stack pointer(1) with
+
+     set $sp += 4
+
+   Whenever possible, these four standard register names are available
+on your machine even though the machine has different canonical
+mnemonics, so long as there is no conflict.  The `info registers'
+command shows the canonical names.  For example, on the SPARC, `info
+registers' displays the processor status register as `$psr' but you can
+also refer to it as `$ps'; and on x86-based machines `$ps' is an alias
+for the EFLAGS register.
+
+   GDB always considers the contents of an ordinary register as an
+integer when the register is examined in this way.  Some machines have
+special registers which can hold nothing but floating point; these
+registers are considered to have floating point values.  There is no way
+to refer to the contents of an ordinary register as floating point value
+(although you can _print_ it as a floating point value with `print/f
+$REGNAME').
+
+   Some registers have distinct "raw" and "virtual" data formats.  This
+means that the data format in which the register contents are saved by
+the operating system is not the same one that your program normally
+sees.  For example, the registers of the 68881 floating point
+coprocessor are always saved in "extended" (raw) format, but all C
+programs expect to work with "double" (virtual) format.  In such cases,
+GDB normally works with the virtual format only (the format that makes
+sense for your program), but the `info registers' command prints the
+data in both formats.
+
+   Some machines have special registers whose contents can be
+interpreted in several different ways.  For example, modern x86-based
+machines have SSE and MMX registers that can hold several values packed
+together in several different formats.  GDB refers to such registers in
+`struct' notation:
+
+     (gdb) print $xmm1
+     $1 = {
+       v4_float = {0, 3.43859137e-038, 1.54142831e-044, 1.821688e-044},
+       v2_double = {9.92129282474342e-303, 2.7585945287983262e-313},
+       v16_int8 = "\000\000\000\000\3706;\001\v\000\000\000\r\000\000",
+       v8_int16 = {0, 0, 14072, 315, 11, 0, 13, 0},
+       v4_int32 = {0, 20657912, 11, 13},
+       v2_int64 = {88725056443645952, 55834574859},
+       uint128 = 0x0000000d0000000b013b36f800000000
+     }
+
+To set values of such registers, you need to tell GDB which view of the
+register you wish to change, as if you were assigning value to a
+`struct' member:
+
+      (gdb) set $xmm1.uint128 = 0x000000000000000000000000FFFFFFFF
+
+   Normally, register values are relative to the selected stack frame
+(*note Selecting a Frame: Selection.).  This means that you get the
+value that the register would contain if all stack frames farther in
+were exited and their saved registers restored.  In order to see the
+true contents of hardware registers, you must select the innermost
+frame (with `frame 0').
+
+   However, GDB must deduce where registers are saved, from the machine
+code generated by your compiler.  If some registers are not saved, or if
+GDB is unable to locate the saved registers, the selected stack frame
+makes no difference.
+
+   ---------- Footnotes ----------
+
+   (1) This is a way of removing one word from the stack, on machines
+where stacks grow downward in memory (most machines, nowadays).  This
+assumes that the innermost stack frame is selected; setting `$sp' is
+not allowed when other stack frames are selected.  To pop entire frames
+off the stack, regardless of machine architecture, use `return'; see
+*Note Returning from a Function: Returning.
+
+
+File: gdb.info,  Node: Floating Point Hardware,  Next: Vector Unit,  Prev: Registers,  Up: Data
+
+10.13 Floating Point Hardware
+=============================
+
+Depending on the configuration, GDB may be able to give you more
+information about the status of the floating point hardware.
+
+`info float'
+     Display hardware-dependent information about the floating point
+     unit.  The exact contents and layout vary depending on the
+     floating point chip.  Currently, `info float' is supported on the
+     ARM and x86 machines.
+
+
+File: gdb.info,  Node: Vector Unit,  Next: OS Information,  Prev: Floating Point Hardware,  Up: Data
+
+10.14 Vector Unit
+=================
+
+Depending on the configuration, GDB may be able to give you more
+information about the status of the vector unit.
+
+`info vector'
+     Display information about the vector unit.  The exact contents and
+     layout vary depending on the hardware.
+
+
+File: gdb.info,  Node: OS Information,  Next: Memory Region Attributes,  Prev: Vector Unit,  Up: Data
+
+10.15 Operating System Auxiliary Information
+============================================
+
+GDB provides interfaces to useful OS facilities that can help you debug
+your program.
+
+   When GDB runs on a "Posix system" (such as GNU or Unix machines), it
+interfaces with the inferior via the `ptrace' system call.  The
+operating system creates a special sata structure, called `struct
+user', for this interface.  You can use the command `info udot' to
+display the contents of this data structure.
+
+`info udot'
+     Display the contents of the `struct user' maintained by the OS
+     kernel for the program being debugged.  GDB displays the contents
+     of `struct user' as a list of hex numbers, similar to the
+     `examine' command.
+
+   Some operating systems supply an "auxiliary vector" to programs at
+startup.  This is akin to the arguments and environment that you
+specify for a program, but contains a system-dependent variety of
+binary values that tell system libraries important details about the
+hardware, operating system, and process.  Each value's purpose is
+identified by an integer tag; the meanings are well-known but
+system-specific.  Depending on the configuration and operating system
+facilities, GDB may be able to show you this information.  For remote
+targets, this functionality may further depend on the remote stub's
+support of the `qXfer:auxv:read' packet, see *Note qXfer auxiliary
+vector read::.
+
+`info auxv'
+     Display the auxiliary vector of the inferior, which can be either a
+     live process or a core dump file.  GDB prints each tag value
+     numerically, and also shows names and text descriptions for
+     recognized tags.  Some values in the vector are numbers, some bit
+     masks, and some pointers to strings or other data.  GDB displays
+     each value in the most appropriate form for a recognized tag, and
+     in hexadecimal for an unrecognized tag.
+
+   On some targets, GDB can access operating system-specific
+information and show it to you.  The types of information available
+will differ depending on the type of operating system running on the
+target.  The mechanism used to fetch the data is described in *Note
+Operating System Information::.  For remote targets, this functionality
+depends on the remote stub's support of the `qXfer:osdata:read' packet,
+see *Note qXfer osdata read::.
+
+`info os INFOTYPE'
+     Display OS information of the requested type.
+
+     On GNU/Linux, the following values of INFOTYPE are valid:
+
+    `processes'
+          Display the list of processes on the target.  For each
+          process, GDB prints the process identifier, the name of the
+          user, the command corresponding to the process, and the list
+          of processor cores that the process is currently running on.
+          (To understand what these properties mean, for this and the
+          following info types, please consult the general GNU/Linux
+          documentation.)
+
+    `procgroups'
+          Display the list of process groups on the target.  For each
+          process, GDB prints the identifier of the process group that
+          it belongs to, the command corresponding to the process group
+          leader, the process identifier, and the command line of the
+          process.  The list is sorted first by the process group
+          identifier, then by the process identifier, so that processes
+          belonging to the same process group are grouped together and
+          the process group leader is listed first.
+
+    `threads'
+          Display the list of threads running on the target.  For each
+          thread, GDB prints the identifier of the process that the
+          thread belongs to, the command of the process, the thread
+          identifier, and the processor core that it is currently
+          running on.  The main thread of a process is not listed.
+
+    `files'
+          Display the list of open file descriptors on the target.  For
+          each file descriptor, GDB prints the identifier of the process
+          owning the descriptor, the command of the owning process, the
+          value of the descriptor, and the target of the descriptor.
+
+    `sockets'
+          Display the list of Internet-domain sockets on the target.
+          For each socket, GDB prints the address and port of the local
+          and remote endpoints, the current state of the connection,
+          the creator of the socket, the IP address family of the
+          socket, and the type of the connection.
+
+    `shm'
+          Display the list of all System V shared-memory regions on the
+          target.  For each shared-memory region, GDB prints the region
+          key, the shared-memory identifier, the access permissions,
+          the size of the region, the process that created the region,
+          the process that last attached to or detached from the
+          region, the current number of live attaches to the region,
+          and the times at which the region was last attached to,
+          detach from, and changed.
+
+    `semaphores'
+          Display the list of all System V semaphore sets on the
+          target.  For each semaphore set, GDB prints the semaphore set
+          key, the semaphore set identifier, the access permissions,
+          the number of semaphores in the set, the user and group of
+          the owner and creator of the semaphore set, and the times at
+          which the semaphore set was operated upon and changed.
+
+    `msg'
+          Display the list of all System V message queues on the
+          target.  For each message queue, GDB prints the message queue
+          key, the message queue identifier, the access permissions,
+          the current number of bytes on the queue, the current number
+          of messages on the queue, the processes that last sent and
+          received a message on the queue, the user and group of the
+          owner and creator of the message queue, the times at which a
+          message was last sent and received on the queue, and the time
+          at which the message queue was last changed.
+
+    `modules'
+          Display the list of all loaded kernel modules on the target.
+          For each module, GDB prints the module name, the size of the
+          module in bytes, the number of times the module is used, the
+          dependencies of the module, the status of the module, and the
+          address of the loaded module in memory.
+
+`info os'
+     If INFOTYPE is omitted, then list the possible values for INFOTYPE
+     and the kind of OS information available for each INFOTYPE.  If
+     the target does not return a list of possible types, this command
+     will report an error.
+
+
+File: gdb.info,  Node: Memory Region Attributes,  Next: Dump/Restore Files,  Prev: OS Information,  Up: Data
+
+10.16 Memory Region Attributes
+==============================
+
+"Memory region attributes" allow you to describe special handling
+required by regions of your target's memory.  GDB uses attributes to
+determine whether to allow certain types of memory accesses; whether to
+use specific width accesses; and whether to cache target memory.  By
+default the description of memory regions is fetched from the target
+(if the current target supports this), but the user can override the
+fetched regions.
+
+   Defined memory regions can be individually enabled and disabled.
+When a memory region is disabled, GDB uses the default attributes when
+accessing memory in that region.  Similarly, if no memory regions have
+been defined, GDB uses the default attributes when accessing all memory.
+
+   When a memory region is defined, it is given a number to identify it;
+to enable, disable, or remove a memory region, you specify that number.
+
+`mem LOWER UPPER ATTRIBUTES...'
+     Define a memory region bounded by LOWER and UPPER with attributes
+     ATTRIBUTES..., and add it to the list of regions monitored by GDB.
+     Note that UPPER == 0 is a special case: it is treated as the
+     target's maximum memory address.  (0xffff on 16 bit targets,
+     0xffffffff on 32 bit targets, etc.)
+
+`mem auto'
+     Discard any user changes to the memory regions and use
+     target-supplied regions, if available, or no regions if the target
+     does not support.
+
+`delete mem NUMS...'
+     Remove memory regions NUMS... from the list of regions monitored
+     by GDB.
+
+`disable mem NUMS...'
+     Disable monitoring of memory regions NUMS....  A disabled memory
+     region is not forgotten.  It may be enabled again later.
+
+`enable mem NUMS...'
+     Enable monitoring of memory regions NUMS....
+
+`info mem'
+     Print a table of all defined memory regions, with the following
+     columns for each region:
+
+    _Memory Region Number_
+
+    _Enabled or Disabled._
+          Enabled memory regions are marked with `y'.  Disabled memory
+          regions are marked with `n'.
+
+    _Lo Address_
+          The address defining the inclusive lower bound of the memory
+          region.
+
+    _Hi Address_
+          The address defining the exclusive upper bound of the memory
+          region.
+
+    _Attributes_
+          The list of attributes set for this memory region.
+
+10.16.1 Attributes
+------------------
+
+10.16.1.1 Memory Access Mode
+............................
+
+The access mode attributes set whether GDB may make read or write
+accesses to a memory region.
+
+   While these attributes prevent GDB from performing invalid memory
+accesses, they do nothing to prevent the target system, I/O DMA, etc.
+from accessing memory.
+
+`ro'
+     Memory is read only.
+
+`wo'
+     Memory is write only.
+
+`rw'
+     Memory is read/write.  This is the default.
+
+10.16.1.2 Memory Access Size
+............................
+
+The access size attribute tells GDB to use specific sized accesses in
+the memory region.  Often memory mapped device registers require
+specific sized accesses.  If no access size attribute is specified, GDB
+may use accesses of any size.
+
+`8'
+     Use 8 bit memory accesses.
+
+`16'
+     Use 16 bit memory accesses.
+
+`32'
+     Use 32 bit memory accesses.
+
+`64'
+     Use 64 bit memory accesses.
+
+10.16.1.3 Data Cache
+....................
+
+The data cache attributes set whether GDB will cache target memory.
+While this generally improves performance by reducing debug protocol
+overhead, it can lead to incorrect results because GDB does not know
+about volatile variables or memory mapped device registers.
+
+`cache'
+     Enable GDB to cache target memory.
+
+`nocache'
+     Disable GDB from caching target memory.  This is the default.
+
+10.16.2 Memory Access Checking
+------------------------------
+
+GDB can be instructed to refuse accesses to memory that is not
+explicitly described.  This can be useful if accessing such regions has
+undesired effects for a specific target, or to provide better error
+checking.  The following commands control this behaviour.
+
+`set mem inaccessible-by-default [on|off]'
+     If `on' is specified, make  GDB treat memory not explicitly
+     described by the memory ranges as non-existent and refuse accesses
+     to such memory.  The checks are only performed if there's at least
+     one memory range defined.  If `off' is specified, make GDB treat
+     the memory not explicitly described by the memory ranges as RAM.
+     The default value is `on'.  
+
+`show mem inaccessible-by-default'
+     Show the current handling of accesses to unknown memory.
+
+
+File: gdb.info,  Node: Dump/Restore Files,  Next: Core File Generation,  Prev: Memory Region Attributes,  Up: Data
+
+10.17 Copy Between Memory and a File
+====================================
+
+You can use the commands `dump', `append', and `restore' to copy data
+between target memory and a file.  The `dump' and `append' commands
+write data to a file, and the `restore' command reads data from a file
+back into the inferior's memory.  Files may be in binary, Motorola
+S-record, Intel hex, or Tektronix Hex format; however, GDB can only
+append to binary files.
+
+`dump [FORMAT] memory FILENAME START_ADDR END_ADDR'
+`dump [FORMAT] value FILENAME EXPR'
+     Dump the contents of memory from START_ADDR to END_ADDR, or the
+     value of EXPR, to FILENAME in the given format.
+
+     The FORMAT parameter may be any one of:
+    `binary'
+          Raw binary form.
+
+    `ihex'
+          Intel hex format.
+
+    `srec'
+          Motorola S-record format.
+
+    `tekhex'
+          Tektronix Hex format.
+
+     GDB uses the same definitions of these formats as the GNU binary
+     utilities, like `objdump' and `objcopy'.  If FORMAT is omitted,
+     GDB dumps the data in raw binary form.
+
+`append [binary] memory FILENAME START_ADDR END_ADDR'
+`append [binary] value FILENAME EXPR'
+     Append the contents of memory from START_ADDR to END_ADDR, or the
+     value of EXPR, to the file FILENAME, in raw binary form.  (GDB can
+     only append data to files in raw binary form.)
+
+`restore FILENAME [binary] BIAS START END'
+     Restore the contents of file FILENAME into memory.  The `restore'
+     command can automatically recognize any known BFD file format,
+     except for raw binary.  To restore a raw binary file you must
+     specify the optional keyword `binary' after the filename.
+
+     If BIAS is non-zero, its value will be added to the addresses
+     contained in the file.  Binary files always start at address zero,
+     so they will be restored at address BIAS.  Other bfd files have a
+     built-in location; they will be restored at offset BIAS from that
+     location.
+
+     If START and/or END are non-zero, then only data between file
+     offset START and file offset END will be restored.  These offsets
+     are relative to the addresses in the file, before the BIAS
+     argument is applied.
+
+
+
+File: gdb.info,  Node: Core File Generation,  Next: Character Sets,  Prev: Dump/Restore Files,  Up: Data
+
+10.18 How to Produce a Core File from Your Program
+==================================================
+
+A "core file" or "core dump" is a file that records the memory image of
+a running process and its process status (register values etc.).  Its
+primary use is post-mortem debugging of a program that crashed while it
+ran outside a debugger.  A program that crashes automatically produces
+a core file, unless this feature is disabled by the user.  *Note
+Files::, for information on invoking GDB in the post-mortem debugging
+mode.
+
+   Occasionally, you may wish to produce a core file of the program you
+are debugging in order to preserve a snapshot of its state.  GDB has a
+special command for that.
+
+`generate-core-file [FILE]'
+`gcore [FILE]'
+     Produce a core dump of the inferior process.  The optional argument
+     FILE specifies the file name where to put the core dump.  If not
+     specified, the file name defaults to `core.PID', where PID is the
+     inferior process ID.
+
+     Note that this command is implemented only for some systems (as of
+     this writing, GNU/Linux, FreeBSD, Solaris, Unixware, and S390).
+
+
+File: gdb.info,  Node: Character Sets,  Next: Caching Remote Data,  Prev: Core File Generation,  Up: Data
+
+10.19 Character Sets
+====================
+
+If the program you are debugging uses a different character set to
+represent characters and strings than the one GDB uses itself, GDB can
+automatically translate between the character sets for you.  The
+character set GDB uses we call the "host character set"; the one the
+inferior program uses we call the "target character set".
+
+   For example, if you are running GDB on a GNU/Linux system, which
+uses the ISO Latin 1 character set, but you are using GDB's remote
+protocol (*note Remote Debugging::) to debug a program running on an
+IBM mainframe, which uses the EBCDIC character set, then the host
+character set is Latin-1, and the target character set is EBCDIC.  If
+you give GDB the command `set target-charset EBCDIC-US', then GDB
+translates between EBCDIC and Latin 1 as you print character or string
+values, or use character and string literals in expressions.
+
+   GDB has no way to automatically recognize which character set the
+inferior program uses; you must tell it, using the `set target-charset'
+command, described below.
+
+   Here are the commands for controlling GDB's character set support:
+
+`set target-charset CHARSET'
+     Set the current target character set to CHARSET.  To display the
+     list of supported target character sets, type
+     `set target-charset <TAB><TAB>'.
+
+`set host-charset CHARSET'
+     Set the current host character set to CHARSET.
+
+     By default, GDB uses a host character set appropriate to the
+     system it is running on; you can override that default using the
+     `set host-charset' command.  On some systems, GDB cannot
+     automatically determine the appropriate host character set.  In
+     this case, GDB uses `UTF-8'.
+
+     GDB can only use certain character sets as its host character set.
+     If you type `set host-charset <TAB><TAB>', GDB will list the host
+     character sets it supports.
+
+`set charset CHARSET'
+     Set the current host and target character sets to CHARSET.  As
+     above, if you type `set charset <TAB><TAB>', GDB will list the
+     names of the character sets that can be used for both host and
+     target.
+
+`show charset'
+     Show the names of the current host and target character sets.
+
+`show host-charset'
+     Show the name of the current host character set.
+
+`show target-charset'
+     Show the name of the current target character set.
+
+`set target-wide-charset CHARSET'
+     Set the current target's wide character set to CHARSET.  This is
+     the character set used by the target's `wchar_t' type.  To display
+     the list of supported wide character sets, type
+     `set target-wide-charset <TAB><TAB>'.
+
+`show target-wide-charset'
+     Show the name of the current target's wide character set.
+
+   Here is an example of GDB's character set support in action.  Assume
+that the following source code has been placed in the file
+`charset-test.c':
+
+     #include <stdio.h>
+
+     char ascii_hello[]
+       = {72, 101, 108, 108, 111, 44, 32, 119,
+          111, 114, 108, 100, 33, 10, 0};
+     char ibm1047_hello[]
+       = {200, 133, 147, 147, 150, 107, 64, 166,
+          150, 153, 147, 132, 90, 37, 0};
+
+     main ()
+     {
+       printf ("Hello, world!\n");
+     }
+
+   In this program, `ascii_hello' and `ibm1047_hello' are arrays
+containing the string `Hello, world!' followed by a newline, encoded in
+the ASCII and IBM1047 character sets.
+
+   We compile the program, and invoke the debugger on it:
+
+     $ gcc -g charset-test.c -o charset-test
+     $ gdb -nw charset-test
+     GNU gdb 2001-12-19-cvs
+     Copyright 2001 Free Software Foundation, Inc.
+     ...
+     (gdb)
+
+   We can use the `show charset' command to see what character sets GDB
+is currently using to interpret and display characters and strings:
+
+     (gdb) show charset
+     The current host and target character set is `ISO-8859-1'.
+     (gdb)
+
+   For the sake of printing this manual, let's use ASCII as our initial
+character set:
+     (gdb) set charset ASCII
+     (gdb) show charset
+     The current host and target character set is `ASCII'.
+     (gdb)
+
+   Let's assume that ASCII is indeed the correct character set for our
+host system -- in other words, let's assume that if GDB prints
+characters using the ASCII character set, our terminal will display
+them properly.  Since our current target character set is also ASCII,
+the contents of `ascii_hello' print legibly:
+
+     (gdb) print ascii_hello
+     $1 = 0x401698 "Hello, world!\n"
+     (gdb) print ascii_hello[0]
+     $2 = 72 'H'
+     (gdb)
+
+   GDB uses the target character set for character and string literals
+you use in expressions:
+
+     (gdb) print '+'
+     $3 = 43 '+'
+     (gdb)
+
+   The ASCII character set uses the number 43 to encode the `+'
+character.
+
+   GDB relies on the user to tell it which character set the target
+program uses.  If we print `ibm1047_hello' while our target character
+set is still ASCII, we get jibberish:
+
+     (gdb) print ibm1047_hello
+     $4 = 0x4016a8 "\310\205\223\223\226k@\246\226\231\223\204Z%"
+     (gdb) print ibm1047_hello[0]
+     $5 = 200 '\310'
+     (gdb)
+
+   If we invoke the `set target-charset' followed by <TAB><TAB>, GDB
+tells us the character sets it supports:
+
+     (gdb) set target-charset
+     ASCII       EBCDIC-US   IBM1047     ISO-8859-1
+     (gdb) set target-charset
+
+   We can select IBM1047 as our target character set, and examine the
+program's strings again.  Now the ASCII string is wrong, but GDB
+translates the contents of `ibm1047_hello' from the target character
+set, IBM1047, to the host character set, ASCII, and they display
+correctly:
+
+     (gdb) set target-charset IBM1047
+     (gdb) show charset
+     The current host character set is `ASCII'.
+     The current target character set is `IBM1047'.
+     (gdb) print ascii_hello
+     $6 = 0x401698 "\110\145%%?\054\040\167?\162%\144\041\012"
+     (gdb) print ascii_hello[0]
+     $7 = 72 '\110'
+     (gdb) print ibm1047_hello
+     $8 = 0x4016a8 "Hello, world!\n"
+     (gdb) print ibm1047_hello[0]
+     $9 = 200 'H'
+     (gdb)
+
+   As above, GDB uses the target character set for character and string
+literals you use in expressions:
+
+     (gdb) print '+'
+     $10 = 78 '+'
+     (gdb)
+
+   The IBM1047 character set uses the number 78 to encode the `+'
+character.
+
+
+File: gdb.info,  Node: Caching Remote Data,  Next: Searching Memory,  Prev: Character Sets,  Up: Data
+
+10.20 Caching Data of Remote Targets
+====================================
+
+GDB caches data exchanged between the debugger and a remote target
+(*note Remote Debugging::).  Such caching generally improves
+performance, because it reduces the overhead of the remote protocol by
+bundling memory reads and writes into large chunks.  Unfortunately,
+simply caching everything would lead to incorrect results, since GDB
+does not necessarily know anything about volatile values, memory-mapped
+I/O addresses, etc.  Furthermore, in non-stop mode (*note Non-Stop
+Mode::) memory can be changed _while_ a gdb command is executing.
+Therefore, by default, GDB only caches data known to be on the stack(1).
+Other regions of memory can be explicitly marked as cacheable; see
+*note Memory Region Attributes::.
+
+`set remotecache on'
+`set remotecache off'
+     This option no longer does anything; it exists for compatibility
+     with old scripts.
+
+`show remotecache'
+     Show the current state of the obsolete remotecache flag.
+
+`set stack-cache on'
+`set stack-cache off'
+     Enable or disable caching of stack accesses.  When `ON', use
+     caching.  By default, this option is `ON'.
+
+`show stack-cache'
+     Show the current state of data caching for memory accesses.
+
+`info dcache [line]'
+     Print the information about the data cache performance.  The
+     information displayed includes the dcache width and depth, and for
+     each cache line, its number, address, and how many times it was
+     referenced.  This command is useful for debugging the data cache
+     operation.
+
+     If a line number is specified, the contents of that line will be
+     printed in hex.
+
+`set dcache size SIZE'
+     Set maximum number of entries in dcache (dcache depth above).
+
+`set dcache line-size LINE-SIZE'
+     Set number of bytes each dcache entry caches (dcache width above).
+     Must be a power of 2.
+
+`show dcache size'
+     Show maximum number of dcache entries.  See also *Note info
+     dcache: Caching Remote Data.
+
+`show dcache line-size'
+     Show default size of dcache lines.  See also *Note info dcache:
+     Caching Remote Data.
+
+
+   ---------- Footnotes ----------
+
+   (1) In non-stop mode, it is moderately rare for a running thread to
+modify the stack of a stopped thread in a way that would interfere with
+a backtrace, and caching of stack reads provides a significant speed up
+of remote backtraces.
+
+
+File: gdb.info,  Node: Searching Memory,  Prev: Caching Remote Data,  Up: Data
+
+10.21 Search Memory
+===================
+
+Memory can be searched for a particular sequence of bytes with the
+`find' command.
+
+`find [/SN] START_ADDR, +LEN, VAL1 [, VAL2, ...]'
+`find [/SN] START_ADDR, END_ADDR, VAL1 [, VAL2, ...]'
+     Search memory for the sequence of bytes specified by VAL1, VAL2,
+     etc.  The search begins at address START_ADDR and continues for
+     either LEN bytes or through to END_ADDR inclusive.
+
+   S and N are optional parameters.  They may be specified in either
+order, apart or together.
+
+S, search query size
+     The size of each search query value.
+
+    `b'
+          bytes
+
+    `h'
+          halfwords (two bytes)
+
+    `w'
+          words (four bytes)
+
+    `g'
+          giant words (eight bytes)
+
+     All values are interpreted in the current language.  This means,
+     for example, that if the current source language is C/C++ then
+     searching for the string "hello" includes the trailing '\0'.
+
+     If the value size is not specified, it is taken from the value's
+     type in the current language.  This is useful when one wants to
+     specify the search pattern as a mixture of types.  Note that this
+     means, for example, that in the case of C-like languages a search
+     for an untyped 0x42 will search for `(int) 0x42' which is
+     typically four bytes.
+
+N, maximum number of finds
+     The maximum number of matches to print.  The default is to print
+     all finds.
+
+   You can use strings as search values.  Quote them with double-quotes
+(`"').  The string value is copied into the search pattern byte by
+byte, regardless of the endianness of the target and the size
+specification.
+
+   The address of each match found is printed as well as a count of the
+number of matches found.
+
+   The address of the last value found is stored in convenience variable
+`$_'.  A count of the number of matches is stored in `$numfound'.
+
+   For example, if stopped at the `printf' in this function:
+
+     void
+     hello ()
+     {
+       static char hello[] = "hello-hello";
+       static struct { char c; short s; int i; }
+         __attribute__ ((packed)) mixed
+         = { 'c', 0x1234, 0x87654321 };
+       printf ("%s\n", hello);
+     }
+
+you get during debugging:
+
+     (gdb) find &hello[0], +sizeof(hello), "hello"
+     0x804956d <hello.1620+6>
+     1 pattern found
+     (gdb) find &hello[0], +sizeof(hello), 'h', 'e', 'l', 'l', 'o'
+     0x8049567 <hello.1620>
+     0x804956d <hello.1620+6>
+     2 patterns found
+     (gdb) find /b1 &hello[0], +sizeof(hello), 'h', 0x65, 'l'
+     0x8049567 <hello.1620>
+     1 pattern found
+     (gdb) find &mixed, +sizeof(mixed), (char) 'c', (short) 0x1234, (int) 0x87654321
+     0x8049560 <mixed.1625>
+     1 pattern found
+     (gdb) print $numfound
+     $1 = 1
+     (gdb) print $_
+     $2 = (void *) 0x8049560
+
+
+File: gdb.info,  Node: Optimized Code,  Next: Macros,  Prev: Data,  Up: Top
+
+11 Debugging Optimized Code
+***************************
+
+Almost all compilers support optimization.  With optimization disabled,
+the compiler generates assembly code that corresponds directly to your
+source code, in a simplistic way.  As the compiler applies more
+powerful optimizations, the generated assembly code diverges from your
+original source code.  With help from debugging information generated
+by the compiler, GDB can map from the running program back to
+constructs from your original source.
+
+   GDB is more accurate with optimization disabled.  If you can
+recompile without optimization, it is easier to follow the progress of
+your program during debugging.  But, there are many cases where you may
+need to debug an optimized version.
+
+   When you debug a program compiled with `-g -O', remember that the
+optimizer has rearranged your code; the debugger shows you what is
+really there.  Do not be too surprised when the execution path does not
+exactly match your source file!  An extreme example: if you define a
+variable, but never use it, GDB never sees that variable--because the
+compiler optimizes it out of existence.
+
+   Some things do not work as well with `-g -O' as with just `-g',
+particularly on machines with instruction scheduling.  If in doubt,
+recompile with `-g' alone, and if this fixes the problem, please report
+it to us as a bug (including a test case!).  *Note Variables::, for
+more information about debugging optimized code.
+
+* Menu:
+
+* Inline Functions::            How GDB presents inlining
+* Tail Call Frames::            GDB analysis of jumps to functions
+
+
+File: gdb.info,  Node: Inline Functions,  Next: Tail Call Frames,  Up: Optimized Code
+
+11.1 Inline Functions
+=====================
+
+"Inlining" is an optimization that inserts a copy of the function body
+directly at each call site, instead of jumping to a shared routine.
+GDB displays inlined functions just like non-inlined functions.  They
+appear in backtraces.  You can view their arguments and local
+variables, step into them with `step', skip them with `next', and
+escape from them with `finish'.  You can check whether a function was
+inlined by using the `info frame' command.
+
+   For GDB to support inlined functions, the compiler must record
+information about inlining in the debug information -- GCC using the
+DWARF 2 format does this, and several other compilers do also.  GDB
+only supports inlined functions when using DWARF 2.  Versions of GCC
+before 4.1 do not emit two required attributes (`DW_AT_call_file' and
+`DW_AT_call_line'); GDB does not display inlined function calls with
+earlier versions of GCC.  It instead displays the arguments and local
+variables of inlined functions as local variables in the caller.
+
+   The body of an inlined function is directly included at its call
+site; unlike a non-inlined function, there are no instructions devoted
+to the call.  GDB still pretends that the call site and the start of
+the inlined function are different instructions.  Stepping to the call
+site shows the call site, and then stepping again shows the first line
+of the inlined function, even though no additional instructions are
+executed.
+
+   This makes source-level debugging much clearer; you can see both the
+context of the call and then the effect of the call.  Only stepping by
+a single instruction using `stepi' or `nexti' does not do this; single
+instruction steps always show the inlined body.
+
+   There are some ways that GDB does not pretend that inlined function
+calls are the same as normal calls:
+
+   * Setting breakpoints at the call site of an inlined function may not
+     work, because the call site does not contain any code.  GDB may
+     incorrectly move the breakpoint to the next line of the enclosing
+     function, after the call.  This limitation will be removed in a
+     future version of GDB; until then, set a breakpoint on an earlier
+     line or inside the inlined function instead.
+
+   * GDB cannot locate the return value of inlined calls after using
+     the `finish' command.  This is a limitation of compiler-generated
+     debugging information; after `finish', you can step to the next
+     line and print a variable where your program stored the return
+     value.
+
+
+
+File: gdb.info,  Node: Tail Call Frames,  Prev: Inline Functions,  Up: Optimized Code
+
+11.2 Tail Call Frames
+=====================
+
+Function `B' can call function `C' in its very last statement.  In
+unoptimized compilation the call of `C' is immediately followed by
+return instruction at the end of `B' code.  Optimizing compiler may
+replace the call and return in function `B' into one jump to function
+`C' instead.  Such use of a jump instruction is called "tail call".
+
+   During execution of function `C', there will be no indication in the
+function call stack frames that it was tail-called from `B'.  If
+function `A' regularly calls function `B' which tail-calls function `C',
+then GDB will see `A' as the caller of `C'.  However, in some cases GDB
+can determine that `C' was tail-called from `B', and it will then
+create fictitious call frame for that, with the return address set up
+as if `B' called `C' normally.
+
+   This functionality is currently supported only by DWARF 2 debugging
+format and the compiler has to produce `DW_TAG_GNU_call_site' tags.
+With GCC, you need to specify `-O -g' during compilation, to get this
+information.
+
+   `info frame' command (*note Frame Info::) will indicate the tail
+call frame kind by text `tail call frame' such as in this sample GDB
+output:
+
+     (gdb) x/i $pc - 2
+        0x40066b <b(int, double)+11>: jmp 0x400640 <c(int, double)>
+     (gdb) info frame
+     Stack level 1, frame at 0x7fffffffda30:
+      rip = 0x40066d in b (amd64-entry-value.cc:59); saved rip 0x4004c5
+      tail call frame, caller of frame at 0x7fffffffda30
+      source language c++.
+      Arglist at unknown address.
+      Locals at unknown address, Previous frame's sp is 0x7fffffffda30
+
+   The detection of all the possible code path executions can find them
+ambiguous.  There is no execution history stored (possible *Note
+Reverse Execution:: is never used for this purpose) and the last known
+caller could have reached the known callee by multiple different jump
+sequences.  In such case GDB still tries to show at least all the
+unambiguous top tail callers and all the unambiguous bottom tail
+calees, if any.
+
+`set debug entry-values'
+     When set to on, enables printing of analysis messages for both
+     frame argument values at function entry and tail calls.  It will
+     show all the possible valid tail calls code paths it has
+     considered.  It will also print the intersection of them with the
+     final unambiguous (possibly partial or even empty) code path
+     result.
+
+`show debug entry-values'
+     Show the current state of analysis messages printing for both
+     frame argument values at function entry and tail calls.
+
+   The analysis messages for tail calls can for example show why the
+virtual tail call frame for function `c' has not been recognized (due
+to the indirect reference by variable `x'):
+
+     static void __attribute__((noinline, noclone)) c (void);
+     void (*x) (void) = c;
+     static void __attribute__((noinline, noclone)) a (void) { x++; }
+     static void __attribute__((noinline, noclone)) c (void) { a (); }
+     int main (void) { x (); return 0; }
+
+     Breakpoint 1, DW_OP_GNU_entry_value resolving cannot find
+     DW_TAG_GNU_call_site 0x40039a in main
+     a () at t.c:3
+     3	static void __attribute__((noinline, noclone)) a (void) { x++; }
+     (gdb) bt
+     #0  a () at t.c:3
+     #1  0x000000000040039a in main () at t.c:5
+
+   Another possibility is an ambiguous virtual tail call frames
+resolution:
+
+     int i;
+     static void __attribute__((noinline, noclone)) f (void) { i++; }
+     static void __attribute__((noinline, noclone)) e (void) { f (); }
+     static void __attribute__((noinline, noclone)) d (void) { f (); }
+     static void __attribute__((noinline, noclone)) c (void) { d (); }
+     static void __attribute__((noinline, noclone)) b (void)
+     { if (i) c (); else e (); }
+     static void __attribute__((noinline, noclone)) a (void) { b (); }
+     int main (void) { a (); return 0; }
+
+     tailcall: initial: 0x4004d2(a) 0x4004ce(b) 0x4004b2(c) 0x4004a2(d)
+     tailcall: compare: 0x4004d2(a) 0x4004cc(b) 0x400492(e)
+     tailcall: reduced: 0x4004d2(a) |
+     (gdb) bt
+     #0  f () at t.c:2
+     #1  0x00000000004004d2 in a () at t.c:8
+     #2  0x0000000000400395 in main () at t.c:9
+
+   Frames #0 and #2 are real, #1 is a virtual tail call frame.  The
+code can have possible execution paths `main->a->b->c->d->f' or
+`main->a->b->e->f', GDB cannot find which one from the inferior state.
+
+   `initial:' state shows some random possible calling sequence GDB has
+found.  It then finds another possible calling sequcen - that one is
+prefixed by `compare:'.  The non-ambiguous intersection of these two is
+printed as the `reduced:' calling sequence.  That one could have many
+futher `compare:' and `reduced:' statements as long as there remain any
+non-ambiguous sequence entries.
+
+   For the frame of function `b' in both cases there are different
+possible `$pc' values (`0x4004cc' or `0x4004ce'), therefore this frame
+is also ambigous.  The only non-ambiguous frame is the one for function
+`a', therefore this one is displayed to the user while the ambiguous
+frames are omitted.
+
+   There can be also reasons why printing of frame argument values at
+function entry may fail:
+
+     int v;
+     static void __attribute__((noinline, noclone)) c (int i) { v++; }
+     static void __attribute__((noinline, noclone)) a (int i);
+     static void __attribute__((noinline, noclone)) b (int i) { a (i); }
+     static void __attribute__((noinline, noclone)) a (int i)
+     { if (i) b (i - 1); else c (0); }
+     int main (void) { a (5); return 0; }
+
+     (gdb) bt
+     #0  c (i=i at entry=0) at t.c:2
+     #1  0x0000000000400428 in a (DW_OP_GNU_entry_value resolving has found
+     function "a" at 0x400420 can call itself via tail calls
+     i=<optimized out>) at t.c:6
+     #2  0x000000000040036e in main () at t.c:7
+
+   GDB cannot find out from the inferior state if and how many times did
+function `a' call itself (via function `b') as these calls would be
+tail calls.  Such tail calls would modify thue `i' variable, therefore
+GDB cannot be sure the value it knows would be right - GDB prints
+`<optimized out>' instead.
+
+
+File: gdb.info,  Node: Macros,  Next: Tracepoints,  Prev: Optimized Code,  Up: Top
+
+12 C Preprocessor Macros
+************************
+
+Some languages, such as C and C++, provide a way to define and invoke
+"preprocessor macros" which expand into strings of tokens.  GDB can
+evaluate expressions containing macro invocations, show the result of
+macro expansion, and show a macro's definition, including where it was
+defined.
+
+   You may need to compile your program specially to provide GDB with
+information about preprocessor macros.  Most compilers do not include
+macros in their debugging information, even when you compile with the
+`-g' flag.  *Note Compilation::.
+
+   A program may define a macro at one point, remove that definition
+later, and then provide a different definition after that.  Thus, at
+different points in the program, a macro may have different
+definitions, or have no definition at all.  If there is a current stack
+frame, GDB uses the macros in scope at that frame's source code line.
+Otherwise, GDB uses the macros in scope at the current listing location;
+see *Note List::.
+
+   Whenever GDB evaluates an expression, it always expands any macro
+invocations present in the expression.  GDB also provides the following
+commands for working with macros explicitly.
+
+`macro expand EXPRESSION'
+`macro exp EXPRESSION'
+     Show the results of expanding all preprocessor macro invocations in
+     EXPRESSION.  Since GDB simply expands macros, but does not parse
+     the result, EXPRESSION need not be a valid expression; it can be
+     any string of tokens.
+
+`macro expand-once EXPRESSION'
+`macro exp1 EXPRESSION'
+     (This command is not yet implemented.)  Show the results of
+     expanding those preprocessor macro invocations that appear
+     explicitly in EXPRESSION.  Macro invocations appearing in that
+     expansion are left unchanged.  This command allows you to see the
+     effect of a particular macro more clearly, without being confused
+     by further expansions.  Since GDB simply expands macros, but does
+     not parse the result, EXPRESSION need not be a valid expression; it
+     can be any string of tokens.
+
+`info macro [-a|-all] [--] MACRO'
+     Show the current definition or all definitions of the named MACRO,
+     and describe the source location or compiler command-line where
+     that definition was established.  The optional double dash is to
+     signify the end of argument processing and the beginning of MACRO
+     for non C-like macros where the macro may begin with a hyphen.
+
+`info macros LINESPEC'
+     Show all macro definitions that are in effect at the location
+     specified by LINESPEC,  and describe the source location or
+     compiler command-line where those definitions were established.
+
+`macro define MACRO REPLACEMENT-LIST'
+`macro define MACRO(ARGLIST) REPLACEMENT-LIST'
+     Introduce a definition for a preprocessor macro named MACRO,
+     invocations of which are replaced by the tokens given in
+     REPLACEMENT-LIST.  The first form of this command defines an
+     "object-like" macro, which takes no arguments; the second form
+     defines a "function-like" macro, which takes the arguments given in
+     ARGLIST.
+
+     A definition introduced by this command is in scope in every
+     expression evaluated in GDB, until it is removed with the `macro
+     undef' command, described below.  The definition overrides all
+     definitions for MACRO present in the program being debugged, as
+     well as any previous user-supplied definition.
+
+`macro undef MACRO'
+     Remove any user-supplied definition for the macro named MACRO.
+     This command only affects definitions provided with the `macro
+     define' command, described above; it cannot remove definitions
+     present in the program being debugged.
+
+`macro list'
+     List all the macros defined using the `macro define' command.
+
+   Here is a transcript showing the above commands in action.  First, we
+show our source files:
+
+     $ cat sample.c
+     #include <stdio.h>
+     #include "sample.h"
+
+     #define M 42
+     #define ADD(x) (M + x)
+
+     main ()
+     {
+     #define N 28
+       printf ("Hello, world!\n");
+     #undef N
+       printf ("We're so creative.\n");
+     #define N 1729
+       printf ("Goodbye, world!\n");
+     }
+     $ cat sample.h
+     #define Q <
+     $
+
+   Now, we compile the program using the GNU C compiler, GCC.  We pass
+the `-gdwarf-2'(1) _and_ `-g3' flags to ensure the compiler includes
+information about preprocessor macros in the debugging information.
+
+     $ gcc -gdwarf-2 -g3 sample.c -o sample
+     $
+
+   Now, we start GDB on our sample program:
+
+     $ gdb -nw sample
+     GNU gdb 2002-05-06-cvs
+     Copyright 2002 Free Software Foundation, Inc.
+     GDB is free software, ...
+     (gdb)
+
+   We can expand macros and examine their definitions, even when the
+program is not running.  GDB uses the current listing position to
+decide which macro definitions are in scope:
+
+     (gdb) list main
+     3
+     4       #define M 42
+     5       #define ADD(x) (M + x)
+     6
+     7       main ()
+     8       {
+     9       #define N 28
+     10        printf ("Hello, world!\n");
+     11      #undef N
+     12        printf ("We're so creative.\n");
+     (gdb) info macro ADD
+     Defined at /home/jimb/gdb/macros/play/sample.c:5
+     #define ADD(x) (M + x)
+     (gdb) info macro Q
+     Defined at /home/jimb/gdb/macros/play/sample.h:1
+       included at /home/jimb/gdb/macros/play/sample.c:2
+     #define Q <
+     (gdb) macro expand ADD(1)
+     expands to: (42 + 1)
+     (gdb) macro expand-once ADD(1)
+     expands to: once (M + 1)
+     (gdb)
+
+   In the example above, note that `macro expand-once' expands only the
+macro invocation explicit in the original text -- the invocation of
+`ADD' -- but does not expand the invocation of the macro `M', which was
+introduced by `ADD'.
+
+   Once the program is running, GDB uses the macro definitions in force
+at the source line of the current stack frame:
+
+     (gdb) break main
+     Breakpoint 1 at 0x8048370: file sample.c, line 10.
+     (gdb) run
+     Starting program: /home/jimb/gdb/macros/play/sample
+
+     Breakpoint 1, main () at sample.c:10
+     10        printf ("Hello, world!\n");
+     (gdb)
+
+   At line 10, the definition of the macro `N' at line 9 is in force:
+
+     (gdb) info macro N
+     Defined at /home/jimb/gdb/macros/play/sample.c:9
+     #define N 28
+     (gdb) macro expand N Q M
+     expands to: 28 < 42
+     (gdb) print N Q M
+     $1 = 1
+     (gdb)
+
+   As we step over directives that remove `N''s definition, and then
+give it a new definition, GDB finds the definition (or lack thereof) in
+force at each point:
+
+     (gdb) next
+     Hello, world!
+     12        printf ("We're so creative.\n");
+     (gdb) info macro N
+     The symbol `N' has no definition as a C/C++ preprocessor macro
+     at /home/jimb/gdb/macros/play/sample.c:12
+     (gdb) next
+     We're so creative.
+     14        printf ("Goodbye, world!\n");
+     (gdb) info macro N
+     Defined at /home/jimb/gdb/macros/play/sample.c:13
+     #define N 1729
+     (gdb) macro expand N Q M
+     expands to: 1729 < 42
+     (gdb) print N Q M
+     $2 = 0
+     (gdb)
+
+   In addition to source files, macros can be defined on the
+compilation command line using the `-DNAME=VALUE' syntax.  For macros
+defined in such a way, GDB displays the location of their definition as
+line zero of the source file submitted to the compiler.
+
+     (gdb) info macro __STDC__
+     Defined at /home/jimb/gdb/macros/play/sample.c:0
+     -D__STDC__=1
+     (gdb)
+
+   ---------- Footnotes ----------
+
+   (1) This is the minimum.  Recent versions of GCC support `-gdwarf-3'
+and `-gdwarf-4'; we recommend always choosing the most recent version
+of DWARF.
+
+
+File: gdb.info,  Node: Tracepoints,  Next: Overlays,  Prev: Macros,  Up: Top
+
+13 Tracepoints
+**************
+
+In some applications, it is not feasible for the debugger to interrupt
+the program's execution long enough for the developer to learn anything
+helpful about its behavior.  If the program's correctness depends on
+its real-time behavior, delays introduced by a debugger might cause the
+program to change its behavior drastically, or perhaps fail, even when
+the code itself is correct.  It is useful to be able to observe the
+program's behavior without interrupting it.
+
+   Using GDB's `trace' and `collect' commands, you can specify
+locations in the program, called "tracepoints", and arbitrary
+expressions to evaluate when those tracepoints are reached.  Later,
+using the `tfind' command, you can examine the values those expressions
+had when the program hit the tracepoints.  The expressions may also
+denote objects in memory--structures or arrays, for example--whose
+values GDB should record; while visiting a particular tracepoint, you
+may inspect those objects as if they were in memory at that moment.
+However, because GDB records these values without interacting with you,
+it can do so quickly and unobtrusively, hopefully not disturbing the
+program's behavior.
+
+   The tracepoint facility is currently available only for remote
+targets.  *Note Targets::.  In addition, your remote target must know
+how to collect trace data.  This functionality is implemented in the
+remote stub; however, none of the stubs distributed with GDB support
+tracepoints as of this writing.  The format of the remote packets used
+to implement tracepoints are described in *Note Tracepoint Packets::.
+
+   It is also possible to get trace data from a file, in a manner
+reminiscent of corefiles; you specify the filename, and use `tfind' to
+search through the file.  *Note Trace Files::, for more details.
+
+   This chapter describes the tracepoint commands and features.
+
+* Menu:
+
+* Set Tracepoints::
+* Analyze Collected Data::
+* Tracepoint Variables::
+* Trace Files::
+
+
+File: gdb.info,  Node: Set Tracepoints,  Next: Analyze Collected Data,  Up: Tracepoints
+
+13.1 Commands to Set Tracepoints
+================================
+
+Before running such a "trace experiment", an arbitrary number of
+tracepoints can be set.  A tracepoint is actually a special type of
+breakpoint (*note Set Breaks::), so you can manipulate it using
+standard breakpoint commands.  For instance, as with breakpoints,
+tracepoint numbers are successive integers starting from one, and many
+of the commands associated with tracepoints take the tracepoint number
+as their argument, to identify which tracepoint to work on.
+
+   For each tracepoint, you can specify, in advance, some arbitrary set
+of data that you want the target to collect in the trace buffer when it
+hits that tracepoint.  The collected data can include registers, local
+variables, or global data.  Later, you can use GDB commands to examine
+the values these data had at the time the tracepoint was hit.
+
+   Tracepoints do not support every breakpoint feature.  Ignore counts
+on tracepoints have no effect, and tracepoints cannot run GDB commands
+when they are hit.  Tracepoints may not be thread-specific either.
+
+   Some targets may support "fast tracepoints", which are inserted in a
+different way (such as with a jump instead of a trap), that is faster
+but possibly restricted in where they may be installed.
+
+   Regular and fast tracepoints are dynamic tracing facilities, meaning
+that they can be used to insert tracepoints at (almost) any location in
+the target.  Some targets may also support controlling "static
+tracepoints" from GDB.  With static tracing, a set of instrumentation
+points, also known as "markers", are embedded in the target program,
+and can be activated or deactivated by name or address.  These are
+usually placed at locations which facilitate investigating what the
+target is actually doing.  GDB's support for static tracing includes
+being able to list instrumentation points, and attach them with GDB
+defined high level tracepoints that expose the whole range of
+convenience of GDB's tracepoints support.  Namely, support for
+collecting registers values and values of global or local (to the
+instrumentation point) variables; tracepoint conditions and trace state
+variables.  The act of installing a GDB static tracepoint on an
+instrumentation point, or marker, is referred to as "probing" a static
+tracepoint marker.
+
+   `gdbserver' supports tracepoints on some target systems.  *Note
+Tracepoints support in `gdbserver': Server.
+
+   This section describes commands to set tracepoints and associated
+conditions and actions.
+
+* Menu:
+
+* Create and Delete Tracepoints::
+* Enable and Disable Tracepoints::
+* Tracepoint Passcounts::
+* Tracepoint Conditions::
+* Trace State Variables::
+* Tracepoint Actions::
+* Listing Tracepoints::
+* Listing Static Tracepoint Markers::
+* Starting and Stopping Trace Experiments::
+* Tracepoint Restrictions::
+
+
+File: gdb.info,  Node: Create and Delete Tracepoints,  Next: Enable and Disable Tracepoints,  Up: Set Tracepoints
+
+13.1.1 Create and Delete Tracepoints
+------------------------------------
+
+`trace LOCATION'
+     The `trace' command is very similar to the `break' command.  Its
+     argument LOCATION can be a source line, a function name, or an
+     address in the target program.  *Note Specify Location::.  The
+     `trace' command defines a tracepoint, which is a point in the
+     target program where the debugger will briefly stop, collect some
+     data, and then allow the program to continue.  Setting a
+     tracepoint or changing its actions takes effect immediately if the
+     remote stub supports the `InstallInTrace' feature (*note install
+     tracepoint in tracing::).  If remote stub doesn't support the
+     `InstallInTrace' feature, all these changes don't take effect
+     until the next `tstart' command, and once a trace experiment is
+     running, further changes will not have any effect until the next
+     trace experiment starts.  In addition, GDB supports "pending
+     tracepoints"--tracepoints whose address is not yet resolved.
+     (This is similar to pending breakpoints.)  Pending tracepoints are
+     not downloaded to the target and not installed until they are
+     resolved.  The resolution of pending tracepoints requires GDB
+     support--when debugging with the remote target, and GDB
+     disconnects from the remote stub (*note disconnected tracing::),
+     pending tracepoints can not be resolved (and downloaded to the
+     remote stub) while GDB is disconnected.
+
+     Here are some examples of using the `trace' command:
+
+          (gdb) trace foo.c:121    // a source file and line number
+
+          (gdb) trace +2           // 2 lines forward
+
+          (gdb) trace my_function  // first source line of function
+
+          (gdb) trace *my_function // EXACT start address of function
+
+          (gdb) trace *0x2117c4    // an address
+
+     You can abbreviate `trace' as `tr'.
+
+`trace LOCATION if COND'
+     Set a tracepoint with condition COND; evaluate the expression COND
+     each time the tracepoint is reached, and collect data only if the
+     value is nonzero--that is, if COND evaluates as true.  *Note
+     Tracepoint Conditions: Tracepoint Conditions, for more information
+     on tracepoint conditions.
+
+`ftrace LOCATION [ if COND ]'
+     The `ftrace' command sets a fast tracepoint.  For targets that
+     support them, fast tracepoints will use a more efficient but
+     possibly less general technique to trigger data collection, such
+     as a jump instruction instead of a trap, or some sort of hardware
+     support.  It may not be possible to create a fast tracepoint at
+     the desired location, in which case the command will exit with an
+     explanatory message.
+
+     GDB handles arguments to `ftrace' exactly as for `trace'.
+
+     On 32-bit x86-architecture systems, fast tracepoints normally need
+     to be placed at an instruction that is 5 bytes or longer, but can
+     be placed at 4-byte instructions if the low 64K of memory of the
+     target program is available to install trampolines.  Some
+     Unix-type systems, such as GNU/Linux, exclude low addresses from
+     the program's address space; but for instance with the Linux
+     kernel it is possible to let GDB use this area by doing a `sysctl'
+     command to set the `mmap_min_addr' kernel parameter, as in
+
+          sudo sysctl -w vm.mmap_min_addr=32768
+
+     which sets the low address to 32K, which leaves plenty of room for
+     trampolines.  The minimum address should be set to a page boundary.
+
+`strace LOCATION [ if COND ]'
+     The `strace' command sets a static tracepoint.  For targets that
+     support it, setting a static tracepoint probes a static
+     instrumentation point, or marker, found at LOCATION.  It may not
+     be possible to set a static tracepoint at the desired location, in
+     which case the command will exit with an explanatory message.
+
+     GDB handles arguments to `strace' exactly as for `trace', with the
+     addition that the user can also specify `-m MARKER' as LOCATION.
+     This probes the marker identified by the MARKER string identifier.
+     This identifier depends on the static tracepoint backend library
+     your program is using.  You can find all the marker identifiers in
+     the `ID' field of the `info static-tracepoint-markers' command
+     output.  *Note Listing Static Tracepoint Markers: Listing Static
+     Tracepoint Markers.  For example, in the following small program
+     using the UST tracing engine:
+
+          main ()
+          {
+            trace_mark(ust, bar33, "str %s", "FOOBAZ");
+          }
+
+     the marker id is composed of joining the first two arguments to the
+     `trace_mark' call with a slash, which translates to:
+
+          (gdb) info static-tracepoint-markers
+          Cnt Enb ID         Address            What
+          1   n   ust/bar33  0x0000000000400ddc in main at stexample.c:22
+                   Data: "str %s"
+          [etc...]
+
+     so you may probe the marker above with:
+
+          (gdb) strace -m ust/bar33
+
+     Static tracepoints accept an extra collect action -- `collect
+     $_sdata'.  This collects arbitrary user data passed in the probe
+     point call to the tracing library.  In the UST example above,
+     you'll see that the third argument to `trace_mark' is a
+     printf-like format string.  The user data is then the result of
+     running that formating string against the following arguments.
+     Note that `info static-tracepoint-markers' command output lists
+     that format string in the `Data:' field.
+
+     You can inspect this data when analyzing the trace buffer, by
+     printing the $_sdata variable like any other variable available to
+     GDB.  *Note Tracepoint Action Lists: Tracepoint Actions.
+
+     The convenience variable `$tpnum' records the tracepoint number of
+     the most recently set tracepoint.
+
+`delete tracepoint [NUM]'
+     Permanently delete one or more tracepoints.  With no argument, the
+     default is to delete all tracepoints.  Note that the regular
+     `delete' command can remove tracepoints also.
+
+     Examples:
+
+          (gdb) delete trace 1 2 3 // remove three tracepoints
+
+          (gdb) delete trace       // remove all tracepoints
+
+     You can abbreviate this command as `del tr'.
+
+
+File: gdb.info,  Node: Enable and Disable Tracepoints,  Next: Tracepoint Passcounts,  Prev: Create and Delete Tracepoints,  Up: Set Tracepoints
+
+13.1.2 Enable and Disable Tracepoints
+-------------------------------------
+
+These commands are deprecated; they are equivalent to plain `disable'
+and `enable'.
+
+`disable tracepoint [NUM]'
+     Disable tracepoint NUM, or all tracepoints if no argument NUM is
+     given.  A disabled tracepoint will have no effect during a trace
+     experiment, but it is not forgotten.  You can re-enable a disabled
+     tracepoint using the `enable tracepoint' command.  If the command
+     is issued during a trace experiment and the debug target has
+     support for disabling tracepoints during a trace experiment, then
+     the change will be effective immediately.  Otherwise, it will be
+     applied to the next trace experiment.
+
+`enable tracepoint [NUM]'
+     Enable tracepoint NUM, or all tracepoints.  If this command is
+     issued during a trace experiment and the debug target supports
+     enabling tracepoints during a trace experiment, then the enabled
+     tracepoints will become effective immediately.  Otherwise, they
+     will become effective the next time a trace experiment is run.
+
+
+File: gdb.info,  Node: Tracepoint Passcounts,  Next: Tracepoint Conditions,  Prev: Enable and Disable Tracepoints,  Up: Set Tracepoints
+
+13.1.3 Tracepoint Passcounts
+----------------------------
+
+`passcount [N [NUM]]'
+     Set the "passcount" of a tracepoint.  The passcount is a way to
+     automatically stop a trace experiment.  If a tracepoint's
+     passcount is N, then the trace experiment will be automatically
+     stopped on the N'th time that tracepoint is hit.  If the
+     tracepoint number NUM is not specified, the `passcount' command
+     sets the passcount of the most recently defined tracepoint.  If no
+     passcount is given, the trace experiment will run until stopped
+     explicitly by the user.
+
+     Examples:
+
+          (gdb) passcount 5 2 // Stop on the 5th execution of
+                                        `// tracepoint 2'
+
+          (gdb) passcount 12  // Stop on the 12th execution of the
+                                        `// most recently defined tracepoint.'
+          (gdb) trace foo
+          (gdb) pass 3
+          (gdb) trace bar
+          (gdb) pass 2
+          (gdb) trace baz
+          (gdb) pass 1        // Stop tracing when foo has been
+                                         `// executed 3 times OR when bar has'
+                                         `// been executed 2 times'
+                                         `// OR when baz has been executed 1 time.'
+
+
+
+File: gdb.info,  Node: Tracepoint Conditions,  Next: Trace State Variables,  Prev: Tracepoint Passcounts,  Up: Set Tracepoints
+
+13.1.4 Tracepoint Conditions
+----------------------------
+
+The simplest sort of tracepoint collects data every time your program
+reaches a specified place.  You can also specify a "condition" for a
+tracepoint.  A condition is just a Boolean expression in your
+programming language (*note Expressions: Expressions.).  A tracepoint
+with a condition evaluates the expression each time your program
+reaches it, and data collection happens only if the condition is true.
+
+   Tracepoint conditions can be specified when a tracepoint is set, by
+using `if' in the arguments to the `trace' command.  *Note Setting
+Tracepoints: Create and Delete Tracepoints.  They can also be set or
+changed at any time with the `condition' command, just as with
+breakpoints.
+
+   Unlike breakpoint conditions, GDB does not actually evaluate the
+conditional expression itself.  Instead, GDB encodes the expression
+into an agent expression (*note Agent Expressions::) suitable for
+execution on the target, independently of GDB.  Global variables become
+raw memory locations, locals become stack accesses, and so forth.
+
+   For instance, suppose you have a function that is usually called
+frequently, but should not be called after an error has occurred.  You
+could use the following tracepoint command to collect data about calls
+of that function that happen while the error code is propagating
+through the program; an unconditional tracepoint could end up
+collecting thousands of useless trace frames that you would have to
+search through.
+
+     (gdb) trace normal_operation if errcode > 0
+
+
+File: gdb.info,  Node: Trace State Variables,  Next: Tracepoint Actions,  Prev: Tracepoint Conditions,  Up: Set Tracepoints
+
+13.1.5 Trace State Variables
+----------------------------
+
+A "trace state variable" is a special type of variable that is created
+and managed by target-side code.  The syntax is the same as that for
+GDB's convenience variables (a string prefixed with "$"), but they are
+stored on the target.  They must be created explicitly, using a
+`tvariable' command.  They are always 64-bit signed integers.
+
+   Trace state variables are remembered by GDB, and downloaded to the
+target along with tracepoint information when the trace experiment
+starts.  There are no intrinsic limits on the number of trace state
+variables, beyond memory limitations of the target.
+
+   Although trace state variables are managed by the target, you can use
+them in print commands and expressions as if they were convenience
+variables; GDB will get the current value from the target while the
+trace experiment is running.  Trace state variables share the same
+namespace as other "$" variables, which means that you cannot have
+trace state variables with names like `$23' or `$pc', nor can you have
+a trace state variable and a convenience variable with the same name.
+
+`tvariable $NAME [ = EXPRESSION ]'
+     The `tvariable' command creates a new trace state variable named
+     `$NAME', and optionally gives it an initial value of EXPRESSION.
+     EXPRESSION is evaluated when this command is entered; the result
+     will be converted to an integer if possible, otherwise GDB will
+     report an error. A subsequent `tvariable' command specifying the
+     same name does not create a variable, but instead assigns the
+     supplied initial value to the existing variable of that name,
+     overwriting any previous initial value. The default initial value
+     is 0.
+
+`info tvariables'
+     List all the trace state variables along with their initial values.
+     Their current values may also be displayed, if the trace
+     experiment is currently running.
+
+`delete tvariable [ $NAME ... ]'
+     Delete the given trace state variables, or all of them if no
+     arguments are specified.
+
+
+
+File: gdb.info,  Node: Tracepoint Actions,  Next: Listing Tracepoints,  Prev: Trace State Variables,  Up: Set Tracepoints
+
+13.1.6 Tracepoint Action Lists
+------------------------------
+
+`actions [NUM]'
+     This command will prompt for a list of actions to be taken when the
+     tracepoint is hit.  If the tracepoint number NUM is not specified,
+     this command sets the actions for the one that was most recently
+     defined (so that you can define a tracepoint and then say
+     `actions' without bothering about its number).  You specify the
+     actions themselves on the following lines, one action at a time,
+     and terminate the actions list with a line containing just `end'.
+     So far, the only defined actions are `collect', `teval', and
+     `while-stepping'.
+
+     `actions' is actually equivalent to `commands' (*note Breakpoint
+     Command Lists: Break Commands.), except that only the defined
+     actions are allowed; any other GDB command is rejected.
+
+     To remove all actions from a tracepoint, type `actions NUM' and
+     follow it immediately with `end'.
+
+          (gdb) collect DATA // collect some data
+
+          (gdb) while-stepping 5 // single-step 5 times, collect data
+
+          (gdb) end              // signals the end of actions.
+
+     In the following example, the action list begins with `collect'
+     commands indicating the things to be collected when the tracepoint
+     is hit.  Then, in order to single-step and collect additional data
+     following the tracepoint, a `while-stepping' command is used,
+     followed by the list of things to be collected after each step in a
+     sequence of single steps.  The `while-stepping' command is
+     terminated by its own separate `end' command.  Lastly, the action
+     list is terminated by an `end' command.
+
+          (gdb) trace foo
+          (gdb) actions
+          Enter actions for tracepoint 1, one per line:
+          > collect bar,baz
+          > collect $regs
+          > while-stepping 12
+            > collect $pc, arr[i]
+            > end
+          end
+
+`collect[/MODS] EXPR1, EXPR2, ...'
+     Collect values of the given expressions when the tracepoint is hit.
+     This command accepts a comma-separated list of any valid
+     expressions.  In addition to global, static, or local variables,
+     the following special arguments are supported:
+
+    `$regs'
+          Collect all registers.
+
+    `$args'
+          Collect all function arguments.
+
+    `$locals'
+          Collect all local variables.
+
+    `$_ret'
+          Collect the return address.  This is helpful if you want to
+          see more of a backtrace.
+
+    `$_probe_argc'
+          Collects the number of arguments from the static probe at
+          which the tracepoint is located.  *Note Static Probe Points::.
+
+    `$_probe_argN'
+          N is an integer between 0 and 11.  Collects the Nth argument
+          from the static probe at which the tracepoint is located.
+          *Note Static Probe Points::.
+
+    `$_sdata'
+          Collect static tracepoint marker specific data.  Only
+          available for static tracepoints.  *Note Tracepoint Action
+          Lists: Tracepoint Actions.  On the UST static tracepoints
+          library backend, an instrumentation point resembles a
+          `printf' function call.  The tracing library is able to
+          collect user specified data formatted to a character string
+          using the format provided by the programmer that instrumented
+          the program.  Other backends have similar mechanisms.  Here's
+          an example of a UST marker call:
+
+                const char master_name[] = "$your_name";
+                trace_mark(channel1, marker1, "hello %s", master_name)
+
+          In this case, collecting `$_sdata' collects the string `hello
+          $yourname'.  When analyzing the trace buffer, you can inspect
+          `$_sdata' like any other variable available to GDB.
+
+     You can give several consecutive `collect' commands, each one with
+     a single argument, or one `collect' command with several arguments
+     separated by commas; the effect is the same.
+
+     The optional MODS changes the usual handling of the arguments.
+     `s' requests that pointers to chars be handled as strings, in
+     particular collecting the contents of the memory being pointed at,
+     up to the first zero.  The upper bound is by default the value of
+     the `print elements' variable; if `s' is followed by a decimal
+     number, that is the upper bound instead.  So for instance
+     `collect/s25 mystr' collects as many as 25 characters at `mystr'.
+
+     The command `info scope' (*note info scope: Symbols.) is
+     particularly useful for figuring out what data to collect.
+
+`teval EXPR1, EXPR2, ...'
+     Evaluate the given expressions when the tracepoint is hit.  This
+     command accepts a comma-separated list of expressions.  The results
+     are discarded, so this is mainly useful for assigning values to
+     trace state variables (*note Trace State Variables::) without
+     adding those values to the trace buffer, as would be the case if
+     the `collect' action were used.
+
+`while-stepping N'
+     Perform N single-step instruction traces after the tracepoint,
+     collecting new data after each step.  The `while-stepping' command
+     is followed by the list of what to collect while stepping
+     (followed by its own `end' command):
+
+          > while-stepping 12
+            > collect $regs, myglobal
+            > end
+          >
+
+     Note that `$pc' is not automatically collected by
+     `while-stepping'; you need to explicitly collect that register if
+     you need it.  You may abbreviate `while-stepping' as `ws' or
+     `stepping'.
+
+`set default-collect EXPR1, EXPR2, ...'
+     This variable is a list of expressions to collect at each
+     tracepoint hit.  It is effectively an additional `collect' action
+     prepended to every tracepoint action list.  The expressions are
+     parsed individually for each tracepoint, so for instance a
+     variable named `xyz' may be interpreted as a global for one
+     tracepoint, and a local for another, as appropriate to the
+     tracepoint's location.
+
+`show default-collect'
+     Show the list of expressions that are collected by default at each
+     tracepoint hit.
+
+
+
+File: gdb.info,  Node: Listing Tracepoints,  Next: Listing Static Tracepoint Markers,  Prev: Tracepoint Actions,  Up: Set Tracepoints
+
+13.1.7 Listing Tracepoints
+--------------------------
+
+`info tracepoints [NUM...]'
+     Display information about the tracepoint NUM.  If you don't
+     specify a tracepoint number, displays information about all the
+     tracepoints defined so far.  The format is similar to that used for
+     `info breakpoints'; in fact, `info tracepoints' is the same
+     command, simply restricting itself to tracepoints.
+
+     A tracepoint's listing may include additional information specific
+     to tracing:
+
+        * its passcount as given by the `passcount N' command
+
+          (gdb) info trace
+          Num     Type           Disp Enb Address    What
+          1       tracepoint     keep y   0x0804ab57 in foo() at main.cxx:7
+                  while-stepping 20
+                    collect globfoo, $regs
+                  end
+                  collect globfoo2
+                  end
+                  pass count 1200
+          (gdb)
+
+     This command can be abbreviated `info tp'.
+
+
+File: gdb.info,  Node: Listing Static Tracepoint Markers,  Next: Starting and Stopping Trace Experiments,  Prev: Listing Tracepoints,  Up: Set Tracepoints
+
+13.1.8 Listing Static Tracepoint Markers
+----------------------------------------
+
+`info static-tracepoint-markers'
+     Display information about all static tracepoint markers defined in
+     the program.
+
+     For each marker, the following columns are printed:
+
+    _Count_
+          An incrementing counter, output to help readability.  This is
+          not a stable identifier.
+
+    _ID_
+          The marker ID, as reported by the target.
+
+    _Enabled or Disabled_
+          Probed markers are tagged with `y'.  `n' identifies marks
+          that are not enabled.
+
+    _Address_
+          Where the marker is in your program, as a memory address.
+
+    _What_
+          Where the marker is in the source for your program, as a file
+          and line number.  If the debug information included in the
+          program does not allow GDB to locate the source of the
+          marker, this column will be left blank.
+
+     In addition, the following information may be printed for each
+     marker:
+
+    _Data_
+          User data passed to the tracing library by the marker call.
+          In the UST backend, this is the format string passed as
+          argument to the marker call.
+
+    _Static tracepoints probing the marker_
+          The list of static tracepoints attached to the marker.
+
+          (gdb) info static-tracepoint-markers
+          Cnt ID         Enb Address            What
+          1   ust/bar2   y   0x0000000000400e1a in main at stexample.c:25
+               Data: number1 %d number2 %d
+               Probed by static tracepoints: #2
+          2   ust/bar33  n   0x0000000000400c87 in main at stexample.c:24
+               Data: str %s
+          (gdb)
+
+
+File: gdb.info,  Node: Starting and Stopping Trace Experiments,  Next: Tracepoint Restrictions,  Prev: Listing Static Tracepoint Markers,  Up: Set Tracepoints
+
+13.1.9 Starting and Stopping Trace Experiments
+----------------------------------------------
+
+`tstart'
+     This command starts the trace experiment, and begins collecting
+     data.  It has the side effect of discarding all the data collected
+     in the trace buffer during the previous trace experiment.  If any
+     arguments are supplied, they are taken as a note and stored with
+     the trace experiment's state.  The notes may be arbitrary text,
+     and are especially useful with disconnected tracing in a
+     multi-user context; the notes can explain what the trace is doing,
+     supply user contact information, and so forth.
+
+`tstop'
+     This command stops the trace experiment.  If any arguments are
+     supplied, they are recorded with the experiment as a note.  This is
+     useful if you are stopping a trace started by someone else, for
+     instance if the trace is interfering with the system's behavior and
+     needs to be stopped quickly.
+
+     *Note*: a trace experiment and data collection may stop
+     automatically if any tracepoint's passcount is reached (*note
+     Tracepoint Passcounts::), or if the trace buffer becomes full.
+
+`tstatus'
+     This command displays the status of the current trace data
+     collection.
+
+   Here is an example of the commands we described so far:
+
+     (gdb) trace gdb_c_test
+     (gdb) actions
+     Enter actions for tracepoint #1, one per line.
+     > collect $regs,$locals,$args
+     > while-stepping 11
+       > collect $regs
+       > end
+     > end
+     (gdb) tstart
+     	[time passes ...]
+     (gdb) tstop
+
+   You can choose to continue running the trace experiment even if GDB
+disconnects from the target, voluntarily or involuntarily.  For
+commands such as `detach', the debugger will ask what you want to do
+with the trace.  But for unexpected terminations (GDB crash, network
+outage), it would be unfortunate to lose hard-won trace data, so the
+variable `disconnected-tracing' lets you decide whether the trace should
+continue running without GDB.
+
+`set disconnected-tracing on'
+`set disconnected-tracing off'
+     Choose whether a tracing run should continue to run if GDB has
+     disconnected from the target.  Note that `detach' or `quit' will
+     ask you directly what to do about a running trace no matter what
+     this variable's setting, so the variable is mainly useful for
+     handling unexpected situations, such as loss of the network.
+
+`show disconnected-tracing'
+     Show the current choice for disconnected tracing.
+
+
+   When you reconnect to the target, the trace experiment may or may not
+still be running; it might have filled the trace buffer in the
+meantime, or stopped for one of the other reasons.  If it is running,
+it will continue after reconnection.
+
+   Upon reconnection, the target will upload information about the
+tracepoints in effect.  GDB will then compare that information to the
+set of tracepoints currently defined, and attempt to match them up,
+allowing for the possibility that the numbers may have changed due to
+creation and deletion in the meantime.  If one of the target's
+tracepoints does not match any in GDB, the debugger will create a new
+tracepoint, so that you have a number with which to specify that
+tracepoint.  This matching-up process is necessarily heuristic, and it
+may result in useless tracepoints being created; you may simply delete
+them if they are of no use.
+
+   If your target agent supports a "circular trace buffer", then you
+can run a trace experiment indefinitely without filling the trace
+buffer; when space runs out, the agent deletes already-collected trace
+frames, oldest first, until there is enough room to continue
+collecting.  This is especially useful if your tracepoints are being
+hit too often, and your trace gets terminated prematurely because the
+buffer is full.  To ask for a circular trace buffer, simply set
+`circular-trace-buffer' to on.  You can set this at any time, including
+during tracing; if the agent can do it, it will change buffer handling
+on the fly, otherwise it will not take effect until the next run.
+
+`set circular-trace-buffer on'
+`set circular-trace-buffer off'
+     Choose whether a tracing run should use a linear or circular buffer
+     for trace data.  A linear buffer will not lose any trace data, but
+     may fill up prematurely, while a circular buffer will discard old
+     trace data, but it will have always room for the latest tracepoint
+     hits.
+
+`show circular-trace-buffer'
+     Show the current choice for the trace buffer.  Note that this may
+     not match the agent's current buffer handling, nor is it
+     guaranteed to match the setting that might have been in effect
+     during a past run, for instance if you are looking at frames from
+     a trace file.
+
+
+`set trace-user TEXT'
+
+`show trace-user'
+
+`set trace-notes TEXT'
+     Set the trace run's notes.
+
+`show trace-notes'
+     Show the trace run's notes.
+
+`set trace-stop-notes TEXT'
+     Set the trace run's stop notes.  The handling of the note is as for
+     `tstop' arguments; the set command is convenient way to fix a stop
+     note that is mistaken or incomplete.
+
+`show trace-stop-notes'
+     Show the trace run's stop notes.
+
+
+
+File: gdb.info,  Node: Tracepoint Restrictions,  Prev: Starting and Stopping Trace Experiments,  Up: Set Tracepoints
+
+13.1.10 Tracepoint Restrictions
+-------------------------------
+
+There are a number of restrictions on the use of tracepoints.  As
+described above, tracepoint data gathering occurs on the target without
+interaction from GDB.  Thus the full capabilities of the debugger are
+not available during data gathering, and then at data examination time,
+you will be limited by only having what was collected.  The following
+items describe some common problems, but it is not exhaustive, and you
+may run into additional difficulties not mentioned here.
+
+   * Tracepoint expressions are intended to gather objects (lvalues).
+     Thus the full flexibility of GDB's expression evaluator is not
+     available.  You cannot call functions, cast objects to aggregate
+     types, access convenience variables or modify values (except by
+     assignment to trace state variables).  Some language features may
+     implicitly call functions (for instance Objective-C fields with
+     accessors), and therefore cannot be collected either.
+
+   * Collection of local variables, either individually or in bulk with
+     `$locals' or `$args', during `while-stepping' may behave
+     erratically.  The stepping action may enter a new scope (for
+     instance by stepping into a function), or the location of the
+     variable may change (for instance it is loaded into a register).
+     The tracepoint data recorded uses the location information for the
+     variables that is correct for the tracepoint location.  When the
+     tracepoint is created, it is not possible, in general, to determine
+     where the steps of a `while-stepping' sequence will advance the
+     program--particularly if a conditional branch is stepped.
+
+   * Collection of an incompletely-initialized or partially-destroyed
+     object may result in something that GDB cannot display, or displays
+     in a misleading way.
+
+   * When GDB displays a pointer to character it automatically
+     dereferences the pointer to also display characters of the string
+     being pointed to.  However, collecting the pointer during tracing
+     does not automatically collect the string.  You need to explicitly
+     dereference the pointer and provide size information if you want to
+     collect not only the pointer, but the memory pointed to.  For
+     example, `*ptr at 50' can be used to collect the 50 element array
+     pointed to by `ptr'.
+
+   * It is not possible to collect a complete stack backtrace at a
+     tracepoint.  Instead, you may collect the registers and a few
+     hundred bytes from the stack pointer with something like
+     `*(unsigned char *)$esp at 300' (adjust to use the name of the actual
+     stack pointer register on your target architecture, and the amount
+     of stack you wish to capture).  Then the `backtrace' command will
+     show a partial backtrace when using a trace frame.  The number of
+     stack frames that can be examined depends on the sizes of the
+     frames in the collected stack.  Note that if you ask for a block
+     so large that it goes past the bottom of the stack, the target
+     agent may report an error trying to read from an invalid address.
+
+   * If you do not collect registers at a tracepoint, GDB can infer
+     that the value of `$pc' must be the same as the address of the
+     tracepoint and use that when you are looking at a trace frame for
+     that tracepoint.  However, this cannot work if the tracepoint has
+     multiple locations (for instance if it was set in a function that
+     was inlined), or if it has a `while-stepping' loop.  In those cases
+     GDB will warn you that it can't infer `$pc', and default it to
+     zero.
+
+
+
+File: gdb.info,  Node: Analyze Collected Data,  Next: Tracepoint Variables,  Prev: Set Tracepoints,  Up: Tracepoints
+
+13.2 Using the Collected Data
+=============================
+
+After the tracepoint experiment ends, you use GDB commands for
+examining the trace data.  The basic idea is that each tracepoint
+collects a trace "snapshot" every time it is hit and another snapshot
+every time it single-steps.  All these snapshots are consecutively
+numbered from zero and go into a buffer, and you can examine them
+later.  The way you examine them is to "focus" on a specific trace
+snapshot.  When the remote stub is focused on a trace snapshot, it will
+respond to all GDB requests for memory and registers by reading from
+the buffer which belongs to that snapshot, rather than from _real_
+memory or registers of the program being debugged.  This means that
+*all* GDB commands (`print', `info registers', `backtrace', etc.) will
+behave as if we were currently debugging the program state as it was
+when the tracepoint occurred.  Any requests for data that are not in
+the buffer will fail.
+
+* Menu:
+
+* tfind::                       How to select a trace snapshot
+* tdump::                       How to display all data for a snapshot
+* save tracepoints::            How to save tracepoints for a future run
+
+
+File: gdb.info,  Node: tfind,  Next: tdump,  Up: Analyze Collected Data
+
+13.2.1 `tfind N'
+----------------
+
+The basic command for selecting a trace snapshot from the buffer is
+`tfind N', which finds trace snapshot number N, counting from zero.  If
+no argument N is given, the next snapshot is selected.
+
+   Here are the various forms of using the `tfind' command.
+
+`tfind start'
+     Find the first snapshot in the buffer.  This is a synonym for
+     `tfind 0' (since 0 is the number of the first snapshot).
+
+`tfind none'
+     Stop debugging trace snapshots, resume _live_ debugging.
+
+`tfind end'
+     Same as `tfind none'.
+
+`tfind'
+     No argument means find the next trace snapshot.
+
+`tfind -'
+     Find the previous trace snapshot before the current one.  This
+     permits retracing earlier steps.
+
+`tfind tracepoint NUM'
+     Find the next snapshot associated with tracepoint NUM.  Search
+     proceeds forward from the last examined trace snapshot.  If no
+     argument NUM is given, it means find the next snapshot collected
+     for the same tracepoint as the current snapshot.
+
+`tfind pc ADDR'
+     Find the next snapshot associated with the value ADDR of the
+     program counter.  Search proceeds forward from the last examined
+     trace snapshot.  If no argument ADDR is given, it means find the
+     next snapshot with the same value of PC as the current snapshot.
+
+`tfind outside ADDR1, ADDR2'
+     Find the next snapshot whose PC is outside the given range of
+     addresses (exclusive).
+
+`tfind range ADDR1, ADDR2'
+     Find the next snapshot whose PC is between ADDR1 and ADDR2
+     (inclusive).
+
+`tfind line [FILE:]N'
+     Find the next snapshot associated with the source line N.  If the
+     optional argument FILE is given, refer to line N in that source
+     file.  Search proceeds forward from the last examined trace
+     snapshot.  If no argument N is given, it means find the next line
+     other than the one currently being examined; thus saying `tfind
+     line' repeatedly can appear to have the same effect as stepping
+     from line to line in a _live_ debugging session.
+
+   The default arguments for the `tfind' commands are specifically
+designed to make it easy to scan through the trace buffer.  For
+instance, `tfind' with no argument selects the next trace snapshot, and
+`tfind -' with no argument selects the previous trace snapshot.  So, by
+giving one `tfind' command, and then simply hitting <RET> repeatedly
+you can examine all the trace snapshots in order.  Or, by saying `tfind
+-' and then hitting <RET> repeatedly you can examine the snapshots in
+reverse order.  The `tfind line' command with no argument selects the
+snapshot for the next source line executed.  The `tfind pc' command with
+no argument selects the next snapshot with the same program counter
+(PC) as the current frame.  The `tfind tracepoint' command with no
+argument selects the next trace snapshot collected by the same
+tracepoint as the current one.
+
+   In addition to letting you scan through the trace buffer manually,
+these commands make it easy to construct GDB scripts that scan through
+the trace buffer and print out whatever collected data you are
+interested in.  Thus, if we want to examine the PC, FP, and SP
+registers from each trace frame in the buffer, we can say this:
+
+     (gdb) tfind start
+     (gdb) while ($trace_frame != -1)
+     > printf "Frame %d, PC = %08X, SP = %08X, FP = %08X\n", \
+               $trace_frame, $pc, $sp, $fp
+     > tfind
+     > end
+
+     Frame 0, PC = 0020DC64, SP = 0030BF3C, FP = 0030BF44
+     Frame 1, PC = 0020DC6C, SP = 0030BF38, FP = 0030BF44
+     Frame 2, PC = 0020DC70, SP = 0030BF34, FP = 0030BF44
+     Frame 3, PC = 0020DC74, SP = 0030BF30, FP = 0030BF44
+     Frame 4, PC = 0020DC78, SP = 0030BF2C, FP = 0030BF44
+     Frame 5, PC = 0020DC7C, SP = 0030BF28, FP = 0030BF44
+     Frame 6, PC = 0020DC80, SP = 0030BF24, FP = 0030BF44
+     Frame 7, PC = 0020DC84, SP = 0030BF20, FP = 0030BF44
+     Frame 8, PC = 0020DC88, SP = 0030BF1C, FP = 0030BF44
+     Frame 9, PC = 0020DC8E, SP = 0030BF18, FP = 0030BF44
+     Frame 10, PC = 00203F6C, SP = 0030BE3C, FP = 0030BF14
+
+   Or, if we want to examine the variable `X' at each source line in
+the buffer:
+
+     (gdb) tfind start
+     (gdb) while ($trace_frame != -1)
+     > printf "Frame %d, X == %d\n", $trace_frame, X
+     > tfind line
+     > end
+
+     Frame 0, X = 1
+     Frame 7, X = 2
+     Frame 13, X = 255
+
+
+File: gdb.info,  Node: tdump,  Next: save tracepoints,  Prev: tfind,  Up: Analyze Collected Data
+
+13.2.2 `tdump'
+--------------
+
+This command takes no arguments.  It prints all the data collected at
+the current trace snapshot.
+
+     (gdb) trace 444
+     (gdb) actions
+     Enter actions for tracepoint #2, one per line:
+     > collect $regs, $locals, $args, gdb_long_test
+     > end
+
+     (gdb) tstart
+
+     (gdb) tfind line 444
+     #0  gdb_test (p1=0x11, p2=0x22, p3=0x33, p4=0x44, p5=0x55, p6=0x66)
+     at gdb_test.c:444
+     444        printp( "%s: arguments = 0x%X 0x%X 0x%X 0x%X 0x%X 0x%X\n", )
+
+     (gdb) tdump
+     Data collected at tracepoint 2, trace frame 1:
+     d0             0xc4aa0085       -995491707
+     d1             0x18     24
+     d2             0x80     128
+     d3             0x33     51
+     d4             0x71aea3d        119204413
+     d5             0x22     34
+     d6             0xe0     224
+     d7             0x380035 3670069
+     a0             0x19e24a 1696330
+     a1             0x3000668        50333288
+     a2             0x100    256
+     a3             0x322000 3284992
+     a4             0x3000698        50333336
+     a5             0x1ad3cc 1758156
+     fp             0x30bf3c 0x30bf3c
+     sp             0x30bf34 0x30bf34
+     ps             0x0      0
+     pc             0x20b2c8 0x20b2c8
+     fpcontrol      0x0      0
+     fpstatus       0x0      0
+     fpiaddr        0x0      0
+     p = 0x20e5b4 "gdb-test"
+     p1 = (void *) 0x11
+     p2 = (void *) 0x22
+     p3 = (void *) 0x33
+     p4 = (void *) 0x44
+     p5 = (void *) 0x55
+     p6 = (void *) 0x66
+     gdb_long_test = 17 '\021'
+
+     (gdb)
+
+   `tdump' works by scanning the tracepoint's current collection
+actions and printing the value of each expression listed.  So `tdump'
+can fail, if after a run, you change the tracepoint's actions to
+mention variables that were not collected during the run.
+
+   Also, for tracepoints with `while-stepping' loops, `tdump' uses the
+collected value of `$pc' to distinguish between trace frames that were
+collected at the tracepoint hit, and frames that were collected while
+stepping.  This allows it to correctly choose whether to display the
+basic list of collections, or the collections from the body of the
+while-stepping loop.  However, if `$pc' was not collected, then `tdump'
+will always attempt to dump using the basic collection list, and may
+fail if a while-stepping frame does not include all the same data that
+is collected at the tracepoint hit.
+
+
+File: gdb.info,  Node: save tracepoints,  Prev: tdump,  Up: Analyze Collected Data
+
+13.2.3 `save tracepoints FILENAME'
+----------------------------------
+
+This command saves all current tracepoint definitions together with
+their actions and passcounts, into a file `FILENAME' suitable for use
+in a later debugging session.  To read the saved tracepoint
+definitions, use the `source' command (*note Command Files::).  The
+`save-tracepoints' command is a deprecated alias for `save tracepoints'
+
+
+File: gdb.info,  Node: Tracepoint Variables,  Next: Trace Files,  Prev: Analyze Collected Data,  Up: Tracepoints
+
+13.3 Convenience Variables for Tracepoints
+==========================================
+
+`(int) $trace_frame'
+     The current trace snapshot (a.k.a. "frame") number, or -1 if no
+     snapshot is selected.
+
+`(int) $tracepoint'
+     The tracepoint for the current trace snapshot.
+
+`(int) $trace_line'
+     The line number for the current trace snapshot.
+
+`(char []) $trace_file'
+     The source file for the current trace snapshot.
+
+`(char []) $trace_func'
+     The name of the function containing `$tracepoint'.
+
+   Note: `$trace_file' is not suitable for use in `printf', use
+`output' instead.
+
+   Here's a simple example of using these convenience variables for
+stepping through all the trace snapshots and printing some of their
+data.  Note that these are not the same as trace state variables, which
+are managed by the target.
+
+     (gdb) tfind start
+
+     (gdb) while $trace_frame != -1
+     > output $trace_file
+     > printf ", line %d (tracepoint #%d)\n", $trace_line, $tracepoint
+     > tfind
+     > end
+
+
+File: gdb.info,  Node: Trace Files,  Prev: Tracepoint Variables,  Up: Tracepoints
+
+13.4 Using Trace Files
+======================
+
+In some situations, the target running a trace experiment may no longer
+be available; perhaps it crashed, or the hardware was needed for a
+different activity.  To handle these cases, you can arrange to dump the
+trace data into a file, and later use that file as a source of trace
+data, via the `target tfile' command.
+
+`tsave [ -r ] FILENAME'
+     Save the trace data to FILENAME.  By default, this command assumes
+     that FILENAME refers to the host filesystem, so if necessary GDB
+     will copy raw trace data up from the target and then save it.  If
+     the target supports it, you can also supply the optional argument
+     `-r' ("remote") to direct the target to save the data directly
+     into FILENAME in its own filesystem, which may be more efficient
+     if the trace buffer is very large.  (Note, however, that `target
+     tfile' can only read from files accessible to the host.)
+
+`target tfile FILENAME'
+     Use the file named FILENAME as a source of trace data.  Commands
+     that examine data work as they do with a live target, but it is not
+     possible to run any new trace experiments.  `tstatus' will report
+     the state of the trace run at the moment the data was saved, as
+     well as the current trace frame you are examining.  FILENAME must
+     be on a filesystem accessible to the host.
+
+
+
+File: gdb.info,  Node: Overlays,  Next: Languages,  Prev: Tracepoints,  Up: Top
+
+14 Debugging Programs That Use Overlays
+***************************************
+
+If your program is too large to fit completely in your target system's
+memory, you can sometimes use "overlays" to work around this problem.
+GDB provides some support for debugging programs that use overlays.
+
+* Menu:
+
+* How Overlays Work::              A general explanation of overlays.
+* Overlay Commands::               Managing overlays in GDB.
+* Automatic Overlay Debugging::    GDB can find out which overlays are
+                                   mapped by asking the inferior.
+* Overlay Sample Program::         A sample program using overlays.
+
+
+File: gdb.info,  Node: How Overlays Work,  Next: Overlay Commands,  Up: Overlays
+
+14.1 How Overlays Work
+======================
+
+Suppose you have a computer whose instruction address space is only 64
+kilobytes long, but which has much more memory which can be accessed by
+other means: special instructions, segment registers, or memory
+management hardware, for example.  Suppose further that you want to
+adapt a program which is larger than 64 kilobytes to run on this system.
+
+   One solution is to identify modules of your program which are
+relatively independent, and need not call each other directly; call
+these modules "overlays".  Separate the overlays from the main program,
+and place their machine code in the larger memory.  Place your main
+program in instruction memory, but leave at least enough space there to
+hold the largest overlay as well.
+
+   Now, to call a function located in an overlay, you must first copy
+that overlay's machine code from the large memory into the space set
+aside for it in the instruction memory, and then jump to its entry point
+there.
+
+         Data             Instruction            Larger
+     Address Space       Address Space        Address Space
+     +-----------+       +-----------+        +-----------+
+     |           |       |           |        |           |
+     +-----------+       +-----------+        +-----------+<-- overlay 1
+     | program   |       |   main    |   .----| overlay 1 | load address
+     | variables |       |  program  |   |    +-----------+
+     | and heap  |       |           |   |    |           |
+     +-----------+       |           |   |    +-----------+<-- overlay 2
+     |           |       +-----------+   |    |           | load address
+     +-----------+       |           |   |  .-| overlay 2 |
+                         |           |   |  | |           |
+              mapped --->+-----------+   |  | +-----------+
+              address    |           |   |  | |           |
+                         |  overlay  | <-'  | |           |
+                         |   area    |  <---' +-----------+<-- overlay 3
+                         |           | <---.  |           | load address
+                         +-----------+     `--| overlay 3 |
+                         |           |        |           |
+                         +-----------+        |           |
+                                              +-----------+
+                                              |           |
+                                              +-----------+
+
+                         A code overlay
+
+   The diagram (*note A code overlay::) shows a system with separate
+data and instruction address spaces.  To map an overlay, the program
+copies its code from the larger address space to the instruction
+address space.  Since the overlays shown here all use the same mapped
+address, only one may be mapped at a time.  For a system with a single
+address space for data and instructions, the diagram would be similar,
+except that the program variables and heap would share an address space
+with the main program and the overlay area.
+
+   An overlay loaded into instruction memory and ready for use is
+called a "mapped" overlay; its "mapped address" is its address in the
+instruction memory.  An overlay not present (or only partially present)
+in instruction memory is called "unmapped"; its "load address" is its
+address in the larger memory.  The mapped address is also called the
+"virtual memory address", or "VMA"; the load address is also called the
+"load memory address", or "LMA".
+
+   Unfortunately, overlays are not a completely transparent way to
+adapt a program to limited instruction memory.  They introduce a new
+set of global constraints you must keep in mind as you design your
+program:
+
+   * Before calling or returning to a function in an overlay, your
+     program must make sure that overlay is actually mapped.
+     Otherwise, the call or return will transfer control to the right
+     address, but in the wrong overlay, and your program will probably
+     crash.
+
+   * If the process of mapping an overlay is expensive on your system,
+     you will need to choose your overlays carefully to minimize their
+     effect on your program's performance.
+
+   * The executable file you load onto your system must contain each
+     overlay's instructions, appearing at the overlay's load address,
+     not its mapped address.  However, each overlay's instructions must
+     be relocated and its symbols defined as if the overlay were at its
+     mapped address.  You can use GNU linker scripts to specify
+     different load and relocation addresses for pieces of your
+     program; see *Note Overlay Description: (ld.info)Overlay
+     Description.
+
+   * The procedure for loading executable files onto your system must
+     be able to load their contents into the larger address space as
+     well as the instruction and data spaces.
+
+
+   The overlay system described above is rather simple, and could be
+improved in many ways:
+
+   * If your system has suitable bank switch registers or memory
+     management hardware, you could use those facilities to make an
+     overlay's load area contents simply appear at their mapped address
+     in instruction space.  This would probably be faster than copying
+     the overlay to its mapped area in the usual way.
+
+   * If your overlays are small enough, you could set aside more than
+     one overlay area, and have more than one overlay mapped at a time.
+
+   * You can use overlays to manage data, as well as instructions.  In
+     general, data overlays are even less transparent to your design
+     than code overlays: whereas code overlays only require care when
+     you call or return to functions, data overlays require care every
+     time you access the data.  Also, if you change the contents of a
+     data overlay, you must copy its contents back out to its load
+     address before you can copy a different data overlay into the same
+     mapped area.
+
+
+
+File: gdb.info,  Node: Overlay Commands,  Next: Automatic Overlay Debugging,  Prev: How Overlays Work,  Up: Overlays
+
+14.2 Overlay Commands
+=====================
+
+To use GDB's overlay support, each overlay in your program must
+correspond to a separate section of the executable file.  The section's
+virtual memory address and load memory address must be the overlay's
+mapped and load addresses.  Identifying overlays with sections allows
+GDB to determine the appropriate address of a function or variable,
+depending on whether the overlay is mapped or not.
+
+   GDB's overlay commands all start with the word `overlay'; you can
+abbreviate this as `ov' or `ovly'.  The commands are:
+
+`overlay off'
+     Disable GDB's overlay support.  When overlay support is disabled,
+     GDB assumes that all functions and variables are always present at
+     their mapped addresses.  By default, GDB's overlay support is
+     disabled.
+
+`overlay manual'
+     Enable "manual" overlay debugging.  In this mode, GDB relies on
+     you to tell it which overlays are mapped, and which are not, using
+     the `overlay map-overlay' and `overlay unmap-overlay' commands
+     described below.
+
+`overlay map-overlay OVERLAY'
+`overlay map OVERLAY'
+     Tell GDB that OVERLAY is now mapped; OVERLAY must be the name of
+     the object file section containing the overlay.  When an overlay
+     is mapped, GDB assumes it can find the overlay's functions and
+     variables at their mapped addresses.  GDB assumes that any other
+     overlays whose mapped ranges overlap that of OVERLAY are now
+     unmapped.
+
+`overlay unmap-overlay OVERLAY'
+`overlay unmap OVERLAY'
+     Tell GDB that OVERLAY is no longer mapped; OVERLAY must be the
+     name of the object file section containing the overlay.  When an
+     overlay is unmapped, GDB assumes it can find the overlay's
+     functions and variables at their load addresses.
+
+`overlay auto'
+     Enable "automatic" overlay debugging.  In this mode, GDB consults
+     a data structure the overlay manager maintains in the inferior to
+     see which overlays are mapped.  For details, see *Note Automatic
+     Overlay Debugging::.
+
+`overlay load-target'
+`overlay load'
+     Re-read the overlay table from the inferior.  Normally, GDB
+     re-reads the table GDB automatically each time the inferior stops,
+     so this command should only be necessary if you have changed the
+     overlay mapping yourself using GDB.  This command is only useful
+     when using automatic overlay debugging.
+
+`overlay list-overlays'
+`overlay list'
+     Display a list of the overlays currently mapped, along with their
+     mapped addresses, load addresses, and sizes.
+
+
+   Normally, when GDB prints a code address, it includes the name of
+the function the address falls in:
+
+     (gdb) print main
+     $3 = {int ()} 0x11a0 <main>
+   When overlay debugging is enabled, GDB recognizes code in unmapped
+overlays, and prints the names of unmapped functions with asterisks
+around them.  For example, if `foo' is a function in an unmapped
+overlay, GDB prints it this way:
+
+     (gdb) overlay list
+     No sections are mapped.
+     (gdb) print foo
+     $5 = {int (int)} 0x100000 <*foo*>
+   When `foo''s overlay is mapped, GDB prints the function's name
+normally:
+
+     (gdb) overlay list
+     Section .ov.foo.text, loaded at 0x100000 - 0x100034,
+             mapped at 0x1016 - 0x104a
+     (gdb) print foo
+     $6 = {int (int)} 0x1016 <foo>
+
+   When overlay debugging is enabled, GDB can find the correct address
+for functions and variables in an overlay, whether or not the overlay
+is mapped.  This allows most GDB commands, like `break' and
+`disassemble', to work normally, even on unmapped code.  However, GDB's
+breakpoint support has some limitations:
+
+   * You can set breakpoints in functions in unmapped overlays, as long
+     as GDB can write to the overlay at its load address.
+
+   * GDB can not set hardware or simulator-based breakpoints in
+     unmapped overlays.  However, if you set a breakpoint at the end of
+     your overlay manager (and tell GDB which overlays are now mapped,
+     if you are using manual overlay management), GDB will re-set its
+     breakpoints properly.
+
+
+File: gdb.info,  Node: Automatic Overlay Debugging,  Next: Overlay Sample Program,  Prev: Overlay Commands,  Up: Overlays
+
+14.3 Automatic Overlay Debugging
+================================
+
+GDB can automatically track which overlays are mapped and which are
+not, given some simple co-operation from the overlay manager in the
+inferior.  If you enable automatic overlay debugging with the `overlay
+auto' command (*note Overlay Commands::), GDB looks in the inferior's
+memory for certain variables describing the current state of the
+overlays.
+
+   Here are the variables your overlay manager must define to support
+GDB's automatic overlay debugging:
+
+`_ovly_table':
+     This variable must be an array of the following structures:
+
+          struct
+          {
+            /* The overlay's mapped address.  */
+            unsigned long vma;
+
+            /* The size of the overlay, in bytes.  */
+            unsigned long size;
+
+            /* The overlay's load address.  */
+            unsigned long lma;
+
+            /* Non-zero if the overlay is currently mapped;
+               zero otherwise.  */
+            unsigned long mapped;
+          }
+
+`_novlys':
+     This variable must be a four-byte signed integer, holding the total
+     number of elements in `_ovly_table'.
+
+
+   To decide whether a particular overlay is mapped or not, GDB looks
+for an entry in `_ovly_table' whose `vma' and `lma' members equal the
+VMA and LMA of the overlay's section in the executable file.  When GDB
+finds a matching entry, it consults the entry's `mapped' member to
+determine whether the overlay is currently mapped.
+
+   In addition, your overlay manager may define a function called
+`_ovly_debug_event'.  If this function is defined, GDB will silently
+set a breakpoint there.  If the overlay manager then calls this
+function whenever it has changed the overlay table, this will enable
+GDB to accurately keep track of which overlays are in program memory,
+and update any breakpoints that may be set in overlays.  This will
+allow breakpoints to work even if the overlays are kept in ROM or other
+non-writable memory while they are not being executed.
+
+
+File: gdb.info,  Node: Overlay Sample Program,  Prev: Automatic Overlay Debugging,  Up: Overlays
+
+14.4 Overlay Sample Program
+===========================
+
+When linking a program which uses overlays, you must place the overlays
+at their load addresses, while relocating them to run at their mapped
+addresses.  To do this, you must write a linker script (*note Overlay
+Description: (ld.info)Overlay Description.).  Unfortunately, since
+linker scripts are specific to a particular host system, target
+architecture, and target memory layout, this manual cannot provide
+portable sample code demonstrating GDB's overlay support.
+
+   However, the GDB source distribution does contain an overlaid
+program, with linker scripts for a few systems, as part of its test
+suite.  The program consists of the following files from
+`gdb/testsuite/gdb.base':
+
+`overlays.c'
+     The main program file.
+
+`ovlymgr.c'
+     A simple overlay manager, used by `overlays.c'.
+
+`foo.c'
+`bar.c'
+`baz.c'
+`grbx.c'
+     Overlay modules, loaded and used by `overlays.c'.
+
+`d10v.ld'
+`m32r.ld'
+     Linker scripts for linking the test program on the `d10v-elf' and
+     `m32r-elf' targets.
+
+   You can build the test program using the `d10v-elf' GCC
+cross-compiler like this:
+
+     $ d10v-elf-gcc -g -c overlays.c
+     $ d10v-elf-gcc -g -c ovlymgr.c
+     $ d10v-elf-gcc -g -c foo.c
+     $ d10v-elf-gcc -g -c bar.c
+     $ d10v-elf-gcc -g -c baz.c
+     $ d10v-elf-gcc -g -c grbx.c
+     $ d10v-elf-gcc -g overlays.o ovlymgr.o foo.o bar.o \
+                       baz.o grbx.o -Wl,-Td10v.ld -o overlays
+
+   The build process is identical for any other architecture, except
+that you must substitute the appropriate compiler and linker script for
+the target system for `d10v-elf-gcc' and `d10v.ld'.
+
+
+File: gdb.info,  Node: Languages,  Next: Symbols,  Prev: Overlays,  Up: Top
+
+15 Using GDB with Different Languages
+*************************************
+
+Although programming languages generally have common aspects, they are
+rarely expressed in the same manner.  For instance, in ANSI C,
+dereferencing a pointer `p' is accomplished by `*p', but in Modula-2,
+it is accomplished by `p^'.  Values can also be represented (and
+displayed) differently.  Hex numbers in C appear as `0x1ae', while in
+Modula-2 they appear as `1AEH'.
+
+   Language-specific information is built into GDB for some languages,
+allowing you to express operations like the above in your program's
+native language, and allowing GDB to output values in a manner
+consistent with the syntax of your program's native language.  The
+language you use to build expressions is called the "working language".
+
+* Menu:
+
+* Setting::                     Switching between source languages
+* Show::                        Displaying the language
+* Checks::                      Type and range checks
+* Supported Languages::         Supported languages
+* Unsupported Languages::       Unsupported languages
+
+
+File: gdb.info,  Node: Setting,  Next: Show,  Up: Languages
+
+15.1 Switching Between Source Languages
+=======================================
+
+There are two ways to control the working language--either have GDB set
+it automatically, or select it manually yourself.  You can use the `set
+language' command for either purpose.  On startup, GDB defaults to
+setting the language automatically.  The working language is used to
+determine how expressions you type are interpreted, how values are
+printed, etc.
+
+   In addition to the working language, every source file that GDB
+knows about has its own working language.  For some object file
+formats, the compiler might indicate which language a particular source
+file is in.  However, most of the time GDB infers the language from the
+name of the file.  The language of a source file controls whether C++
+names are demangled--this way `backtrace' can show each frame
+appropriately for its own language.  There is no way to set the
+language of a source file from within GDB, but you can set the language
+associated with a filename extension.  *Note Displaying the Language:
+Show.
+
+   This is most commonly a problem when you use a program, such as
+`cfront' or `f2c', that generates C but is written in another language.
+In that case, make the program use `#line' directives in its C output;
+that way GDB will know the correct language of the source code of the
+original program, and will display that source code, not the generated
+C code.
+
+* Menu:
+
+* Filenames::                   Filename extensions and languages.
+* Manually::                    Setting the working language manually
+* Automatically::               Having GDB infer the source language
+
+
+File: gdb.info,  Node: Filenames,  Next: Manually,  Up: Setting
+
+15.1.1 List of Filename Extensions and Languages
+------------------------------------------------
+
+If a source file name ends in one of the following extensions, then GDB
+infers that its language is the one indicated.
+
+`.ada'
+`.ads'
+`.adb'
+`.a'
+     Ada source file.
+
+`.c'
+     C source file
+
+`.C'
+`.cc'
+`.cp'
+`.cpp'
+`.cxx'
+`.c++'
+     C++ source file
+
+`.d'
+     D source file
+
+`.m'
+     Objective-C source file
+
+`.f'
+`.F'
+     Fortran source file
+
+`.mod'
+     Modula-2 source file
+
+`.s'
+`.S'
+     Assembler source file.  This actually behaves almost like C, but
+     GDB does not skip over function prologues when stepping.
+
+   In addition, you may set the language associated with a filename
+extension.  *Note Displaying the Language: Show.
+
+
+File: gdb.info,  Node: Manually,  Next: Automatically,  Prev: Filenames,  Up: Setting
+
+15.1.2 Setting the Working Language
+-----------------------------------
+
+If you allow GDB to set the language automatically, expressions are
+interpreted the same way in your debugging session and your program.
+
+   If you wish, you may set the language manually.  To do this, issue
+the command `set language LANG', where LANG is the name of a language,
+such as `c' or `modula-2'.  For a list of the supported languages, type
+`set language'.
+
+   Setting the language manually prevents GDB from updating the working
+language automatically.  This can lead to confusion if you try to debug
+a program when the working language is not the same as the source
+language, when an expression is acceptable to both languages--but means
+different things.  For instance, if the current source file were
+written in C, and GDB was parsing Modula-2, a command such as:
+
+     print a = b + c
+
+might not have the effect you intended.  In C, this means to add `b'
+and `c' and place the result in `a'.  The result printed would be the
+value of `a'.  In Modula-2, this means to compare `a' to the result of
+`b+c', yielding a `BOOLEAN' value.
+
+
+File: gdb.info,  Node: Automatically,  Prev: Manually,  Up: Setting
+
+15.1.3 Having GDB Infer the Source Language
+-------------------------------------------
+
+To have GDB set the working language automatically, use `set language
+local' or `set language auto'.  GDB then infers the working language.
+That is, when your program stops in a frame (usually by encountering a
+breakpoint), GDB sets the working language to the language recorded for
+the function in that frame.  If the language for a frame is unknown
+(that is, if the function or block corresponding to the frame was
+defined in a source file that does not have a recognized extension),
+the current working language is not changed, and GDB issues a warning.
+
+   This may not seem necessary for most programs, which are written
+entirely in one source language.  However, program modules and libraries
+written in one source language can be used by a main program written in
+a different source language.  Using `set language auto' in this case
+frees you from having to set the working language manually.
+
+
+File: gdb.info,  Node: Show,  Next: Checks,  Prev: Setting,  Up: Languages
+
+15.2 Displaying the Language
+============================
+
+The following commands help you find out which language is the working
+language, and also what language source files were written in.
+
+`show language'
+     Display the current working language.  This is the language you
+     can use with commands such as `print' to build and compute
+     expressions that may involve variables in your program.
+
+`info frame'
+     Display the source language for this frame.  This language becomes
+     the working language if you use an identifier from this frame.
+     *Note Information about a Frame: Frame Info, to identify the other
+     information listed here.
+
+`info source'
+     Display the source language of this source file.  *Note Examining
+     the Symbol Table: Symbols, to identify the other information
+     listed here.
+
+   In unusual circumstances, you may have source files with extensions
+not in the standard list.  You can then set the extension associated
+with a language explicitly:
+
+`set extension-language EXT LANGUAGE'
+     Tell GDB that source files with extension EXT are to be assumed as
+     written in the source language LANGUAGE.
+
+`info extensions'
+     List all the filename extensions and the associated languages.
+
+
+File: gdb.info,  Node: Checks,  Next: Supported Languages,  Prev: Show,  Up: Languages
+
+15.3 Type and Range Checking
+============================
+
+     _Warning:_ In this release, the GDB commands for type and range
+     checking are included, but they do not yet have any effect.  This
+     section documents the intended facilities.
+
+   Some languages are designed to guard you against making seemingly
+common errors through a series of compile- and run-time checks.  These
+include checking the type of arguments to functions and operators, and
+making sure mathematical overflows are caught at run time.  Checks such
+as these help to ensure a program's correctness once it has been
+compiled by eliminating type mismatches, and providing active checks
+for range errors when your program is running.
+
+   GDB can check for conditions like the above if you wish.  Although
+GDB does not check the statements in your program, it can check
+expressions entered directly into GDB for evaluation via the `print'
+command, for example.  As with the working language, GDB can also
+decide whether or not to check automatically based on your program's
+source language.  *Note Supported Languages: Supported Languages, for
+the default settings of supported languages.
+
+* Menu:
+
+* Type Checking::               An overview of type checking
+* Range Checking::              An overview of range checking
+
+
+File: gdb.info,  Node: Type Checking,  Next: Range Checking,  Up: Checks
+
+15.3.1 An Overview of Type Checking
+-----------------------------------
+
+Some languages, such as Modula-2, are strongly typed, meaning that the
+arguments to operators and functions have to be of the correct type,
+otherwise an error occurs.  These checks prevent type mismatch errors
+from ever causing any run-time problems.  For example,
+
+     1 + 2 => 3
+but
+     error--> 1 + 2.3
+
+   The second example fails because the `CARDINAL' 1 is not
+type-compatible with the `REAL' 2.3.
+
+   For the expressions you use in GDB commands, you can tell the GDB
+type checker to skip checking; to treat any mismatches as errors and
+abandon the expression; or to only issue warnings when type mismatches
+occur, but evaluate the expression anyway.  When you choose the last of
+these, GDB evaluates expressions like the second example above, but
+also issues a warning.
+
+   Even if you turn type checking off, there may be other reasons
+related to type that prevent GDB from evaluating an expression.  For
+instance, GDB does not know how to add an `int' and a `struct foo'.
+These particular type errors have nothing to do with the language in
+use, and usually arise from expressions, such as the one described
+above, which make little sense to evaluate anyway.
+
+   Each language defines to what degree it is strict about type.  For
+instance, both Modula-2 and C require the arguments to arithmetical
+operators to be numbers.  In C, enumerated types and pointers can be
+represented as numbers, so that they are valid arguments to mathematical
+operators.  *Note Supported Languages: Supported Languages, for further
+details on specific languages.
+
+   GDB provides some additional commands for controlling the type
+checker:
+
+`set check type auto'
+     Set type checking on or off based on the current working language.
+     *Note Supported Languages: Supported Languages, for the default
+     settings for each language.
+
+`set check type on'
+`set check type off'
+     Set type checking on or off, overriding the default setting for the
+     current working language.  Issue a warning if the setting does not
+     match the language default.  If any type mismatches occur in
+     evaluating an expression while type checking is on, GDB prints a
+     message and aborts evaluation of the expression.
+
+`set check type warn'
+     Cause the type checker to issue warnings, but to always attempt to
+     evaluate the expression.  Evaluating the expression may still be
+     impossible for other reasons.  For example, GDB cannot add numbers
+     and structures.
+
+`show type'
+     Show the current setting of the type checker, and whether or not
+     GDB is setting it automatically.
+
+
+File: gdb.info,  Node: Range Checking,  Prev: Type Checking,  Up: Checks
+
+15.3.2 An Overview of Range Checking
+------------------------------------
+
+In some languages (such as Modula-2), it is an error to exceed the
+bounds of a type; this is enforced with run-time checks.  Such range
+checking is meant to ensure program correctness by making sure
+computations do not overflow, or indices on an array element access do
+not exceed the bounds of the array.
+
+   For expressions you use in GDB commands, you can tell GDB to treat
+range errors in one of three ways: ignore them, always treat them as
+errors and abandon the expression, or issue warnings but evaluate the
+expression anyway.
+
+   A range error can result from numerical overflow, from exceeding an
+array index bound, or when you type a constant that is not a member of
+any type.  Some languages, however, do not treat overflows as an error.
+In many implementations of C, mathematical overflow causes the result
+to "wrap around" to lower values--for example, if M is the largest
+integer value, and S is the smallest, then
+
+     M + 1 => S
+
+   This, too, is specific to individual languages, and in some cases
+specific to individual compilers or machines.  *Note Supported
+Languages: Supported Languages, for further details on specific
+languages.
+
+   GDB provides some additional commands for controlling the range
+checker:
+
+`set check range auto'
+     Set range checking on or off based on the current working language.
+     *Note Supported Languages: Supported Languages, for the default
+     settings for each language.
+
+`set check range on'
+`set check range off'
+     Set range checking on or off, overriding the default setting for
+     the current working language.  A warning is issued if the setting
+     does not match the language default.  If a range error occurs and
+     range checking is on, then a message is printed and evaluation of
+     the expression is aborted.
+
+`set check range warn'
+     Output messages when the GDB range checker detects a range error,
+     but attempt to evaluate the expression anyway.  Evaluating the
+     expression may still be impossible for other reasons, such as
+     accessing memory that the process does not own (a typical example
+     from many Unix systems).
+
+`show range'
+     Show the current setting of the range checker, and whether or not
+     it is being set automatically by GDB.
+
+
+File: gdb.info,  Node: Supported Languages,  Next: Unsupported Languages,  Prev: Checks,  Up: Languages
+
+15.4 Supported Languages
+========================
+
+GDB supports C, C++, D, Go, Objective-C, Fortran, Java, OpenCL C,
+Pascal, assembly, Modula-2, and Ada.  Some GDB features may be used in
+expressions regardless of the language you use: the GDB `@' and `::'
+operators, and the `{type}addr' construct (*note Expressions:
+Expressions.) can be used with the constructs of any supported language.
+
+   The following sections detail to what degree each source language is
+supported by GDB.  These sections are not meant to be language
+tutorials or references, but serve only as a reference guide to what the
+GDB expression parser accepts, and what input and output formats should
+look like for different languages.  There are many good books written
+on each of these languages; please look to these for a language
+reference or tutorial.
+
+* Menu:
+
+* C::                           C and C++
+* D::                           D
+* Go::                          Go
+* Objective-C::                 Objective-C
+* OpenCL C::                    OpenCL C
+* Fortran::                     Fortran
+* Pascal::                      Pascal
+* Modula-2::                    Modula-2
+* Ada::                         Ada
+
+
+File: gdb.info,  Node: C,  Next: D,  Up: Supported Languages
+
+15.4.1 C and C++
+----------------
+
+Since C and C++ are so closely related, many features of GDB apply to
+both languages.  Whenever this is the case, we discuss those languages
+together.
+
+   The C++ debugging facilities are jointly implemented by the C++
+compiler and GDB.  Therefore, to debug your C++ code effectively, you
+must compile your C++ programs with a supported C++ compiler, such as
+GNU `g++', or the HP ANSI C++ compiler (`aCC').
+
+* Menu:
+
+* C Operators::                 C and C++ operators
+* C Constants::                 C and C++ constants
+* C Plus Plus Expressions::     C++ expressions
+* C Defaults::                  Default settings for C and C++
+* C Checks::                    C and C++ type and range checks
+* Debugging C::                 GDB and C
+* Debugging C Plus Plus::       GDB features for C++
+* Decimal Floating Point::      Numbers in Decimal Floating Point format
+
+
+File: gdb.info,  Node: C Operators,  Next: C Constants,  Up: C
+
+15.4.1.1 C and C++ Operators
+............................
+
+Operators must be defined on values of specific types.  For instance,
+`+' is defined on numbers, but not on structures.  Operators are often
+defined on groups of types.
+
+   For the purposes of C and C++, the following definitions hold:
+
+   * _Integral types_ include `int' with any of its storage-class
+     specifiers; `char'; `enum'; and, for C++, `bool'.
+
+   * _Floating-point types_ include `float', `double', and `long
+     double' (if supported by the target platform).
+
+   * _Pointer types_ include all types defined as `(TYPE *)'.
+
+   * _Scalar types_ include all of the above.
+
+
+The following operators are supported.  They are listed here in order
+of increasing precedence:
+
+`,'
+     The comma or sequencing operator.  Expressions in a
+     comma-separated list are evaluated from left to right, with the
+     result of the entire expression being the last expression
+     evaluated.
+
+`='
+     Assignment.  The value of an assignment expression is the value
+     assigned.  Defined on scalar types.
+
+`OP='
+     Used in an expression of the form `A OP= B', and translated to
+     `A = A OP B'.  `OP=' and `=' have the same precedence.  OP is any
+     one of the operators `|', `^', `&', `<<', `>>', `+', `-', `*',
+     `/', `%'.
+
+`?:'
+     The ternary operator.  `A ? B : C' can be thought of as:  if A
+     then B else C.  A should be of an integral type.
+
+`||'
+     Logical OR.  Defined on integral types.
+
+`&&'
+     Logical AND.  Defined on integral types.
+
+`|'
+     Bitwise OR.  Defined on integral types.
+
+`^'
+     Bitwise exclusive-OR.  Defined on integral types.
+
+`&'
+     Bitwise AND.  Defined on integral types.
+
+`==, !='
+     Equality and inequality.  Defined on scalar types.  The value of
+     these expressions is 0 for false and non-zero for true.
+
+`<, >, <=, >='
+     Less than, greater than, less than or equal, greater than or equal.
+     Defined on scalar types.  The value of these expressions is 0 for
+     false and non-zero for true.
+
+`<<, >>'
+     left shift, and right shift.  Defined on integral types.
+
+`@'
+     The GDB "artificial array" operator (*note Expressions:
+     Expressions.).
+
+`+, -'
+     Addition and subtraction.  Defined on integral types,
+     floating-point types and pointer types.
+
+`*, /, %'
+     Multiplication, division, and modulus.  Multiplication and
+     division are defined on integral and floating-point types.
+     Modulus is defined on integral types.
+
+`++, --'
+     Increment and decrement.  When appearing before a variable, the
+     operation is performed before the variable is used in an
+     expression; when appearing after it, the variable's value is used
+     before the operation takes place.
+
+`*'
+     Pointer dereferencing.  Defined on pointer types.  Same precedence
+     as `++'.
+
+`&'
+     Address operator.  Defined on variables.  Same precedence as `++'.
+
+     For debugging C++, GDB implements a use of `&' beyond what is
+     allowed in the C++ language itself: you can use `&(&REF)' to
+     examine the address where a C++ reference variable (declared with
+     `&REF') is stored.
+
+`-'
+     Negative.  Defined on integral and floating-point types.  Same
+     precedence as `++'.
+
+`!'
+     Logical negation.  Defined on integral types.  Same precedence as
+     `++'.
+
+`~'
+     Bitwise complement operator.  Defined on integral types.  Same
+     precedence as `++'.
+
+`., ->'
+     Structure member, and pointer-to-structure member.  For
+     convenience, GDB regards the two as equivalent, choosing whether
+     to dereference a pointer based on the stored type information.
+     Defined on `struct' and `union' data.
+
+`.*, ->*'
+     Dereferences of pointers to members.
+
+`[]'
+     Array indexing.  `A[I]' is defined as `*(A+I)'.  Same precedence
+     as `->'.
+
+`()'
+     Function parameter list.  Same precedence as `->'.
+
+`::'
+     C++ scope resolution operator.  Defined on `struct', `union', and
+     `class' types.
+
+`::'
+     Doubled colons also represent the GDB scope operator (*note
+     Expressions: Expressions.).  Same precedence as `::', above.
+
+   If an operator is redefined in the user code, GDB usually attempts
+to invoke the redefined version instead of using the operator's
+predefined meaning.
+
+
+File: gdb.info,  Node: C Constants,  Next: C Plus Plus Expressions,  Prev: C Operators,  Up: C
+
+15.4.1.2 C and C++ Constants
+............................
+
+GDB allows you to express the constants of C and C++ in the following
+ways:
+
+   * Integer constants are a sequence of digits.  Octal constants are
+     specified by a leading `0' (i.e. zero), and hexadecimal constants
+     by a leading `0x' or `0X'.  Constants may also end with a letter
+     `l', specifying that the constant should be treated as a `long'
+     value.
+
+   * Floating point constants are a sequence of digits, followed by a
+     decimal point, followed by a sequence of digits, and optionally
+     followed by an exponent.  An exponent is of the form:
+     `e[[+]|-]NNN', where NNN is another sequence of digits.  The `+'
+     is optional for positive exponents.  A floating-point constant may
+     also end with a letter `f' or `F', specifying that the constant
+     should be treated as being of the `float' (as opposed to the
+     default `double') type; or with a letter `l' or `L', which
+     specifies a `long double' constant.
+
+   * Enumerated constants consist of enumerated identifiers, or their
+     integral equivalents.
+
+   * Character constants are a single character surrounded by single
+     quotes (`''), or a number--the ordinal value of the corresponding
+     character (usually its ASCII value).  Within quotes, the single
+     character may be represented by a letter or by "escape sequences",
+     which are of the form `\NNN', where NNN is the octal representation
+     of the character's ordinal value; or of the form `\X', where `X'
+     is a predefined special character--for example, `\n' for newline.
+
+     Wide character constants can be written by prefixing a character
+     constant with `L', as in C.  For example, `L'x'' is the wide form
+     of `x'.  The target wide character set is used when computing the
+     value of this constant (*note Character Sets::).
+
+   * String constants are a sequence of character constants surrounded
+     by double quotes (`"').  Any valid character constant (as described
+     above) may appear.  Double quotes within the string must be
+     preceded by a backslash, so for instance `"a\"b'c"' is a string of
+     five characters.
+
+     Wide string constants can be written by prefixing a string constant
+     with `L', as in C.  The target wide character set is used when
+     computing the value of this constant (*note Character Sets::).
+
+   * Pointer constants are an integral value.  You can also write
+     pointers to constants using the C operator `&'.
+
+   * Array constants are comma-separated lists surrounded by braces `{'
+     and `}'; for example, `{1,2,3}' is a three-element array of
+     integers, `{{1,2}, {3,4}, {5,6}}' is a three-by-two array, and
+     `{&"hi", &"there", &"fred"}' is a three-element array of pointers.
+
+
+File: gdb.info,  Node: C Plus Plus Expressions,  Next: C Defaults,  Prev: C Constants,  Up: C
+
+15.4.1.3 C++ Expressions
+........................
+
+GDB expression handling can interpret most C++ expressions.
+
+     _Warning:_ GDB can only debug C++ code if you use the proper
+     compiler and the proper debug format.  Currently, GDB works best
+     when debugging C++ code that is compiled with the most recent
+     version of GCC possible.  The DWARF debugging format is preferred;
+     GCC defaults to this on most popular platforms.  Other compilers
+     and/or debug formats are likely to work badly or not at all when
+     using GDB to debug C++ code.  *Note Compilation::.
+
+  1. Member function calls are allowed; you can use expressions like
+
+          count = aml->GetOriginal(x, y)
+
+  2. While a member function is active (in the selected stack frame),
+     your expressions have the same namespace available as the member
+     function; that is, GDB allows implicit references to the class
+     instance pointer `this' following the same rules as C++.  `using'
+     declarations in the current scope are also respected by GDB.
+
+  3. You can call overloaded functions; GDB resolves the function call
+     to the right definition, with some restrictions.  GDB does not
+     perform overload resolution involving user-defined type
+     conversions, calls to constructors, or instantiations of templates
+     that do not exist in the program.  It also cannot handle ellipsis
+     argument lists or default arguments.
+
+     It does perform integral conversions and promotions, floating-point
+     promotions, arithmetic conversions, pointer conversions,
+     conversions of class objects to base classes, and standard
+     conversions such as those of functions or arrays to pointers; it
+     requires an exact match on the number of function arguments.
+
+     Overload resolution is always performed, unless you have specified
+     `set overload-resolution off'.  *Note GDB Features for C++:
+     Debugging C Plus Plus.
+
+     You must specify `set overload-resolution off' in order to use an
+     explicit function signature to call an overloaded function, as in
+          p 'foo(char,int)'('x', 13)
+
+     The GDB command-completion facility can simplify this; see *Note
+     Command Completion: Completion.
+
+  4. GDB understands variables declared as C++ references; you can use
+     them in expressions just as you do in C++ source--they are
+     automatically dereferenced.
+
+     In the parameter list shown when GDB displays a frame, the values
+     of reference variables are not displayed (unlike other variables);
+     this avoids clutter, since references are often used for large
+     structures.  The _address_ of a reference variable is always
+     shown, unless you have specified `set print address off'.
+
+  5. GDB supports the C++ name resolution operator `::'--your
+     expressions can use it just as expressions in your program do.
+     Since one scope may be defined in another, you can use `::'
+     repeatedly if necessary, for example in an expression like
+     `SCOPE1::SCOPE2::NAME'.  GDB also allows resolving name scope by
+     reference to source files, in both C and C++ debugging (*note
+     Program Variables: Variables.).
+
+  6. GDB performs argument-dependent lookup, following the C++
+     specification.
+
+
+File: gdb.info,  Node: C Defaults,  Next: C Checks,  Prev: C Plus Plus Expressions,  Up: C
+
+15.4.1.4 C and C++ Defaults
+...........................
+
+If you allow GDB to set type and range checking automatically, they
+both default to `off' whenever the working language changes to C or
+C++.  This happens regardless of whether you or GDB selects the working
+language.
+
+   If you allow GDB to set the language automatically, it recognizes
+source files whose names end with `.c', `.C', or `.cc', etc, and when
+GDB enters code compiled from one of these files, it sets the working
+language to C or C++.  *Note Having GDB Infer the Source Language:
+Automatically, for further details.
+
+
+File: gdb.info,  Node: C Checks,  Next: Debugging C,  Prev: C Defaults,  Up: C
+
+15.4.1.5 C and C++ Type and Range Checks
+........................................
+
+By default, when GDB parses C or C++ expressions, type checking is not
+used.  However, if you turn type checking on, GDB considers two
+variables type equivalent if:
+
+   * The two variables are structured and have the same structure,
+     union, or enumerated tag.
+
+   * The two variables have the same type name, or types that have been
+     declared equivalent through `typedef'.
+
+
+   Range checking, if turned on, is done on mathematical operations.
+Array indices are not checked, since they are often used to index a
+pointer that is not itself an array.
+
+
+File: gdb.info,  Node: Debugging C,  Next: Debugging C Plus Plus,  Prev: C Checks,  Up: C
+
+15.4.1.6 GDB and C
+..................
+
+The `set print union' and `show print union' commands apply to the
+`union' type.  When set to `on', any `union' that is inside a `struct'
+or `class' is also printed.  Otherwise, it appears as `{...}'.
+
+   The `@' operator aids in the debugging of dynamic arrays, formed
+with pointers and a memory allocation function.  *Note Expressions:
+Expressions.
+
+
+File: gdb.info,  Node: Debugging C Plus Plus,  Next: Decimal Floating Point,  Prev: Debugging C,  Up: C
+
+15.4.1.7 GDB Features for C++
+.............................
+
+Some GDB commands are particularly useful with C++, and some are
+designed specifically for use with C++.  Here is a summary:
+
+`breakpoint menus'
+     When you want a breakpoint in a function whose name is overloaded,
+     GDB has the capability to display a menu of possible breakpoint
+     locations to help you specify which function definition you want.
+     *Note Ambiguous Expressions: Ambiguous Expressions.
+
+`rbreak REGEX'
+     Setting breakpoints using regular expressions is helpful for
+     setting breakpoints on overloaded functions that are not members
+     of any special classes.  *Note Setting Breakpoints: Set Breaks.
+
+`catch throw'
+`catch catch'
+     Debug C++ exception handling using these commands.  *Note Setting
+     Catchpoints: Set Catchpoints.
+
+`ptype TYPENAME'
+     Print inheritance relationships as well as other information for
+     type TYPENAME.  *Note Examining the Symbol Table: Symbols.
+
+`info vtbl EXPRESSION.'
+     The `info vtbl' command can be used to display the virtual method
+     tables of the object computed by EXPRESSION.  This shows one entry
+     per virtual table; there may be multiple virtual tables when
+     multiple inheritance is in use.
+
+`set print demangle'
+`show print demangle'
+`set print asm-demangle'
+`show print asm-demangle'
+     Control whether C++ symbols display in their source form, both when
+     displaying code as C++ source and when displaying disassemblies.
+     *Note Print Settings: Print Settings.
+
+`set print object'
+`show print object'
+     Choose whether to print derived (actual) or declared types of
+     objects.  *Note Print Settings: Print Settings.
+
+`set print vtbl'
+`show print vtbl'
+     Control the format for printing virtual function tables.  *Note
+     Print Settings: Print Settings.  (The `vtbl' commands do not work
+     on programs compiled with the HP ANSI C++ compiler (`aCC').)
+
+`set overload-resolution on'
+     Enable overload resolution for C++ expression evaluation.  The
+     default is on.  For overloaded functions, GDB evaluates the
+     arguments and searches for a function whose signature matches the
+     argument types, using the standard C++ conversion rules (see *Note
+     C++ Expressions: C Plus Plus Expressions, for details).  If it
+     cannot find a match, it emits a message.
+
+`set overload-resolution off'
+     Disable overload resolution for C++ expression evaluation.  For
+     overloaded functions that are not class member functions, GDB
+     chooses the first function of the specified name that it finds in
+     the symbol table, whether or not its arguments are of the correct
+     type.  For overloaded functions that are class member functions,
+     GDB searches for a function whose signature _exactly_ matches the
+     argument types.
+
+`show overload-resolution'
+     Show the current setting of overload resolution.
+
+`Overloaded symbol names'
+     You can specify a particular definition of an overloaded symbol,
+     using the same notation that is used to declare such symbols in
+     C++: type `SYMBOL(TYPES)' rather than just SYMBOL.  You can also
+     use the GDB command-line word completion facilities to list the
+     available choices, or to finish the type list for you.  *Note
+     Command Completion: Completion, for details on how to do this.
+
+
+File: gdb.info,  Node: Decimal Floating Point,  Prev: Debugging C Plus Plus,  Up: C
+
+15.4.1.8 Decimal Floating Point format
+......................................
+
+GDB can examine, set and perform computations with numbers in decimal
+floating point format, which in the C language correspond to the
+`_Decimal32', `_Decimal64' and `_Decimal128' types as specified by the
+extension to support decimal floating-point arithmetic.
+
+   There are two encodings in use, depending on the architecture: BID
+(Binary Integer Decimal) for x86 and x86-64, and DPD (Densely Packed
+Decimal) for PowerPC.  GDB will use the appropriate encoding for the
+configured target.
+
+   Because of a limitation in `libdecnumber', the library used by GDB
+to manipulate decimal floating point numbers, it is not possible to
+convert (using a cast, for example) integers wider than 32-bit to
+decimal float.
+
+   In addition, in order to imitate GDB's behaviour with binary floating
+point computations, error checking in decimal float operations ignores
+underflow, overflow and divide by zero exceptions.
+
+   In the PowerPC architecture, GDB provides a set of pseudo-registers
+to inspect `_Decimal128' values stored in floating point registers.
+See *Note PowerPC: PowerPC. for more details.
+
+
+File: gdb.info,  Node: D,  Next: Go,  Prev: C,  Up: Supported Languages
+
+15.4.2 D
+--------
+
+GDB can be used to debug programs written in D and compiled with GDC,
+LDC or DMD compilers. Currently GDB supports only one D specific
+feature -- dynamic arrays.
+
+
+File: gdb.info,  Node: Go,  Next: Objective-C,  Prev: D,  Up: Supported Languages
+
+15.4.3 Go
+---------
+
+GDB can be used to debug programs written in Go and compiled with
+`gccgo' or `6g' compilers.
+
+   Here is a summary of the Go-specific features and restrictions:
+
+`The current Go package'
+     The name of the current package does not need to be specified when
+     specifying global variables and functions.
+
+     For example, given the program:
+
+          package main
+          var myglob = "Shall we?"
+          func main () {
+            // ...
+          }
+
+     When stopped inside `main' either of these work:
+
+          (gdb) p myglob
+          (gdb) p main.myglob
+
+`Builtin Go types'
+     The `string' type is recognized by GDB and is printed as a string.
+
+`Builtin Go functions'
+     The GDB expression parser recognizes the `unsafe.Sizeof' function
+     and handles it internally.
+
+`Restrictions on Go expressions'
+     All Go operators are supported except `&^'.  The Go `_' "blank
+     identifier" is not supported.  Automatic dereferencing of pointers
+     is not supported.
+
+
+File: gdb.info,  Node: Objective-C,  Next: OpenCL C,  Prev: Go,  Up: Supported Languages
+
+15.4.4 Objective-C
+------------------
+
+This section provides information about some commands and command
+options that are useful for debugging Objective-C code.  See also *Note
+info classes: Symbols, and *Note info selectors: Symbols, for a few
+more commands specific to Objective-C support.
+
+* Menu:
+
+* Method Names in Commands::
+* The Print Command with Objective-C::
+
+
+File: gdb.info,  Node: Method Names in Commands,  Next: The Print Command with Objective-C,  Up: Objective-C
+
+15.4.4.1 Method Names in Commands
+.................................
+
+The following commands have been extended to accept Objective-C method
+names as line specifications:
+
+   * `clear'
+
+   * `break'
+
+   * `info line'
+
+   * `jump'
+
+   * `list'
+
+   A fully qualified Objective-C method name is specified as
+
+     -[CLASS METHODNAME]
+
+   where the minus sign is used to indicate an instance method and a
+plus sign (not shown) is used to indicate a class method.  The class
+name CLASS and method name METHODNAME are enclosed in brackets, similar
+to the way messages are specified in Objective-C source code.  For
+example, to set a breakpoint at the `create' instance method of class
+`Fruit' in the program currently being debugged, enter:
+
+     break -[Fruit create]
+
+   To list ten program lines around the `initialize' class method,
+enter:
+
+     list +[NSText initialize]
+
+   In the current version of GDB, the plus or minus sign is required.
+In future versions of GDB, the plus or minus sign will be optional, but
+you can use it to narrow the search.  It is also possible to specify
+just a method name:
+
+     break create
+
+   You must specify the complete method name, including any colons.  If
+your program's source files contain more than one `create' method,
+you'll be presented with a numbered list of classes that implement that
+method.  Indicate your choice by number, or type `0' to exit if none
+apply.
+
+   As another example, to clear a breakpoint established at the
+`makeKeyAndOrderFront:' method of the `NSWindow' class, enter:
+
+     clear -[NSWindow makeKeyAndOrderFront:]
+
+
+File: gdb.info,  Node: The Print Command with Objective-C,  Prev: Method Names in Commands,  Up: Objective-C
+
+15.4.4.2 The Print Command With Objective-C
+...........................................
+
+The print command has also been extended to accept methods.  For
+example:
+
+     print -[OBJECT hash]
+
+will tell GDB to send the `hash' message to OBJECT and print the
+result.  Also, an additional command has been added, `print-object' or
+`po' for short, which is meant to print the description of an object.
+However, this command may only work with certain Objective-C libraries
+that have a particular hook function, `_NSPrintForDebugger', defined.
+
+
+File: gdb.info,  Node: OpenCL C,  Next: Fortran,  Prev: Objective-C,  Up: Supported Languages
+
+15.4.5 OpenCL C
+---------------
+
+This section provides information about GDBs OpenCL C support.
+
+* Menu:
+
+* OpenCL C Datatypes::
+* OpenCL C Expressions::
+* OpenCL C Operators::
+
+
+File: gdb.info,  Node: OpenCL C Datatypes,  Next: OpenCL C Expressions,  Up: OpenCL C
+
+15.4.5.1 OpenCL C Datatypes
+...........................
+
+GDB supports the builtin scalar and vector datatypes specified by
+OpenCL 1.1.  In addition the half- and double-precision floating point
+data types of the `cl_khr_fp16' and `cl_khr_fp64' OpenCL extensions are
+also known to GDB.
+
+
+File: gdb.info,  Node: OpenCL C Expressions,  Next: OpenCL C Operators,  Prev: OpenCL C Datatypes,  Up: OpenCL C
+
+15.4.5.2 OpenCL C Expressions
+.............................
+
+GDB supports accesses to vector components including the access as
+lvalue where possible.  Since OpenCL C is based on C99 most C
+expressions supported by GDB can be used as well.
+
+
+File: gdb.info,  Node: OpenCL C Operators,  Prev: OpenCL C Expressions,  Up: OpenCL C
+
+15.4.5.3 OpenCL C Operators
+...........................
+
+GDB supports the operators specified by OpenCL 1.1 for scalar and
+vector data types.
+
+
+File: gdb.info,  Node: Fortran,  Next: Pascal,  Prev: OpenCL C,  Up: Supported Languages
+
+15.4.6 Fortran
+--------------
+
+GDB can be used to debug programs written in Fortran, but it currently
+supports only the features of Fortran 77 language.
+
+   Some Fortran compilers (GNU Fortran 77 and Fortran 95 compilers
+among them) append an underscore to the names of variables and
+functions.  When you debug programs compiled by those compilers, you
+will need to refer to variables and functions with a trailing
+underscore.
+
+* Menu:
+
+* Fortran Operators::           Fortran operators and expressions
+* Fortran Defaults::            Default settings for Fortran
+* Special Fortran Commands::    Special GDB commands for Fortran
+
+
+File: gdb.info,  Node: Fortran Operators,  Next: Fortran Defaults,  Up: Fortran
+
+15.4.6.1 Fortran Operators and Expressions
+..........................................
+
+Operators must be defined on values of specific types.  For instance,
+`+' is defined on numbers, but not on characters or other non-
+arithmetic types.  Operators are often defined on groups of types.
+
+`**'
+     The exponentiation operator.  It raises the first operand to the
+     power of the second one.
+
+`:'
+     The range operator.  Normally used in the form of array(low:high)
+     to represent a section of array.
+
+`%'
+     The access component operator.  Normally used to access elements
+     in derived types.  Also suitable for unions.  As unions aren't
+     part of regular Fortran, this can only happen when accessing a
+     register that uses a gdbarch-defined union type.
+
+
+File: gdb.info,  Node: Fortran Defaults,  Next: Special Fortran Commands,  Prev: Fortran Operators,  Up: Fortran
+
+15.4.6.2 Fortran Defaults
+.........................
+
+Fortran symbols are usually case-insensitive, so GDB by default uses
+case-insensitive matches for Fortran symbols.  You can change that with
+the `set case-insensitive' command, see *Note Symbols::, for the
+details.
+
+
+File: gdb.info,  Node: Special Fortran Commands,  Prev: Fortran Defaults,  Up: Fortran
+
+15.4.6.3 Special Fortran Commands
+.................................
+
+GDB has some commands to support Fortran-specific features, such as
+displaying common blocks.
+
+`info common [COMMON-NAME]'
+     This command prints the values contained in the Fortran `COMMON'
+     block whose name is COMMON-NAME.  With no argument, the names of
+     all `COMMON' blocks visible at the current program location are
+     printed.
+
+
+File: gdb.info,  Node: Pascal,  Next: Modula-2,  Prev: Fortran,  Up: Supported Languages
+
+15.4.7 Pascal
+-------------
+
+Debugging Pascal programs which use sets, subranges, file variables, or
+nested functions does not currently work.  GDB does not support
+entering expressions, printing values, or similar features using Pascal
+syntax.
+
+   The Pascal-specific command `set print pascal_static-members'
+controls whether static members of Pascal objects are displayed.  *Note
+pascal_static-members: Print Settings.
+
+
+File: gdb.info,  Node: Modula-2,  Next: Ada,  Prev: Pascal,  Up: Supported Languages
+
+15.4.8 Modula-2
+---------------
+
+The extensions made to GDB to support Modula-2 only support output from
+the GNU Modula-2 compiler (which is currently being developed).  Other
+Modula-2 compilers are not currently supported, and attempting to debug
+executables produced by them is most likely to give an error as GDB
+reads in the executable's symbol table.
+
+* Menu:
+
+* M2 Operators::                Built-in operators
+* Built-In Func/Proc::          Built-in functions and procedures
+* M2 Constants::                Modula-2 constants
+* M2 Types::                    Modula-2 types
+* M2 Defaults::                 Default settings for Modula-2
+* Deviations::                  Deviations from standard Modula-2
+* M2 Checks::                   Modula-2 type and range checks
+* M2 Scope::                    The scope operators `::' and `.'
+* GDB/M2::                      GDB and Modula-2
+
+
+File: gdb.info,  Node: M2 Operators,  Next: Built-In Func/Proc,  Up: Modula-2
+
+15.4.8.1 Operators
+..................
+
+Operators must be defined on values of specific types.  For instance,
+`+' is defined on numbers, but not on structures.  Operators are often
+defined on groups of types.  For the purposes of Modula-2, the
+following definitions hold:
+
+   * _Integral types_ consist of `INTEGER', `CARDINAL', and their
+     subranges.
+
+   * _Character types_ consist of `CHAR' and its subranges.
+
+   * _Floating-point types_ consist of `REAL'.
+
+   * _Pointer types_ consist of anything declared as `POINTER TO TYPE'.
+
+   * _Scalar types_ consist of all of the above.
+
+   * _Set types_ consist of `SET' and `BITSET' types.
+
+   * _Boolean types_ consist of `BOOLEAN'.
+
+The following operators are supported, and appear in order of
+increasing precedence:
+
+`,'
+     Function argument or array index separator.
+
+`:='
+     Assignment.  The value of VAR `:=' VALUE is VALUE.
+
+`<, >'
+     Less than, greater than on integral, floating-point, or enumerated
+     types.
+
+`<=, >='
+     Less than or equal to, greater than or equal to on integral,
+     floating-point and enumerated types, or set inclusion on set
+     types.  Same precedence as `<'.
+
+`=, <>, #'
+     Equality and two ways of expressing inequality, valid on scalar
+     types.  Same precedence as `<'.  In GDB scripts, only `<>' is
+     available for inequality, since `#' conflicts with the script
+     comment character.
+
+`IN'
+     Set membership.  Defined on set types and the types of their
+     members.  Same precedence as `<'.
+
+`OR'
+     Boolean disjunction.  Defined on boolean types.
+
+`AND, &'
+     Boolean conjunction.  Defined on boolean types.
+
+`@'
+     The GDB "artificial array" operator (*note Expressions:
+     Expressions.).
+
+`+, -'
+     Addition and subtraction on integral and floating-point types, or
+     union and difference on set types.
+
+`*'
+     Multiplication on integral and floating-point types, or set
+     intersection on set types.
+
+`/'
+     Division on floating-point types, or symmetric set difference on
+     set types.  Same precedence as `*'.
+
+`DIV, MOD'
+     Integer division and remainder.  Defined on integral types.  Same
+     precedence as `*'.
+
+`-'
+     Negative.  Defined on `INTEGER' and `REAL' data.
+
+`^'
+     Pointer dereferencing.  Defined on pointer types.
+
+`NOT'
+     Boolean negation.  Defined on boolean types.  Same precedence as
+     `^'.
+
+`.'
+     `RECORD' field selector.  Defined on `RECORD' data.  Same
+     precedence as `^'.
+
+`[]'
+     Array indexing.  Defined on `ARRAY' data.  Same precedence as `^'.
+
+`()'
+     Procedure argument list.  Defined on `PROCEDURE' objects.  Same
+     precedence as `^'.
+
+`::, .'
+     GDB and Modula-2 scope operators.
+
+     _Warning:_ Set expressions and their operations are not yet
+     supported, so GDB treats the use of the operator `IN', or the use
+     of operators `+', `-', `*', `/', `=', , `<>', `#', `<=', and `>='
+     on sets as an error.
+
+
+File: gdb.info,  Node: Built-In Func/Proc,  Next: M2 Constants,  Prev: M2 Operators,  Up: Modula-2
+
+15.4.8.2 Built-in Functions and Procedures
+..........................................
+
+Modula-2 also makes available several built-in procedures and functions.
+In describing these, the following metavariables are used:
+
+A
+     represents an `ARRAY' variable.
+
+C
+     represents a `CHAR' constant or variable.
+
+I
+     represents a variable or constant of integral type.
+
+M
+     represents an identifier that belongs to a set.  Generally used in
+     the same function with the metavariable S.  The type of S should
+     be `SET OF MTYPE' (where MTYPE is the type of M).
+
+N
+     represents a variable or constant of integral or floating-point
+     type.
+
+R
+     represents a variable or constant of floating-point type.
+
+T
+     represents a type.
+
+V
+     represents a variable.
+
+X
+     represents a variable or constant of one of many types.  See the
+     explanation of the function for details.
+
+   All Modula-2 built-in procedures also return a result, described
+below.
+
+`ABS(N)'
+     Returns the absolute value of N.
+
+`CAP(C)'
+     If C is a lower case letter, it returns its upper case equivalent,
+     otherwise it returns its argument.
+
+`CHR(I)'
+     Returns the character whose ordinal value is I.
+
+`DEC(V)'
+     Decrements the value in the variable V by one.  Returns the new
+     value.
+
+`DEC(V,I)'
+     Decrements the value in the variable V by I.  Returns the new
+     value.
+
+`EXCL(M,S)'
+     Removes the element M from the set S.  Returns the new set.
+
+`FLOAT(I)'
+     Returns the floating point equivalent of the integer I.
+
+`HIGH(A)'
+     Returns the index of the last member of A.
+
+`INC(V)'
+     Increments the value in the variable V by one.  Returns the new
+     value.
+
+`INC(V,I)'
+     Increments the value in the variable V by I.  Returns the new
+     value.
+
+`INCL(M,S)'
+     Adds the element M to the set S if it is not already there.
+     Returns the new set.
+
+`MAX(T)'
+     Returns the maximum value of the type T.
+
+`MIN(T)'
+     Returns the minimum value of the type T.
+
+`ODD(I)'
+     Returns boolean TRUE if I is an odd number.
+
+`ORD(X)'
+     Returns the ordinal value of its argument.  For example, the
+     ordinal value of a character is its ASCII value (on machines
+     supporting the ASCII character set).  X must be of an ordered
+     type, which include integral, character and enumerated types.
+
+`SIZE(X)'
+     Returns the size of its argument.  X can be a variable or a type.
+
+`TRUNC(R)'
+     Returns the integral part of R.
+
+`TSIZE(X)'
+     Returns the size of its argument.  X can be a variable or a type.
+
+`VAL(T,I)'
+     Returns the member of the type T whose ordinal value is I.
+
+     _Warning:_  Sets and their operations are not yet supported, so
+     GDB treats the use of procedures `INCL' and `EXCL' as an error.
+
+
+File: gdb.info,  Node: M2 Constants,  Next: M2 Types,  Prev: Built-In Func/Proc,  Up: Modula-2
+
+15.4.8.3 Constants
+..................
+
+GDB allows you to express the constants of Modula-2 in the following
+ways:
+
+   * Integer constants are simply a sequence of digits.  When used in an
+     expression, a constant is interpreted to be type-compatible with
+     the rest of the expression.  Hexadecimal integers are specified by
+     a trailing `H', and octal integers by a trailing `B'.
+
+   * Floating point constants appear as a sequence of digits, followed
+     by a decimal point and another sequence of digits.  An optional
+     exponent can then be specified, in the form `E[+|-]NNN', where
+     `[+|-]NNN' is the desired exponent.  All of the digits of the
+     floating point constant must be valid decimal (base 10) digits.
+
+   * Character constants consist of a single character enclosed by a
+     pair of like quotes, either single (`'') or double (`"').  They may
+     also be expressed by their ordinal value (their ASCII value,
+     usually) followed by a `C'.
+
+   * String constants consist of a sequence of characters enclosed by a
+     pair of like quotes, either single (`'') or double (`"').  Escape
+     sequences in the style of C are also allowed.  *Note C and C++
+     Constants: C Constants, for a brief explanation of escape
+     sequences.
+
+   * Enumerated constants consist of an enumerated identifier.
+
+   * Boolean constants consist of the identifiers `TRUE' and `FALSE'.
+
+   * Pointer constants consist of integral values only.
+
+   * Set constants are not yet supported.
+
+
+File: gdb.info,  Node: M2 Types,  Next: M2 Defaults,  Prev: M2 Constants,  Up: Modula-2
+
+15.4.8.4 Modula-2 Types
+.......................
+
+Currently GDB can print the following data types in Modula-2 syntax:
+array types, record types, set types, pointer types, procedure types,
+enumerated types, subrange types and base types.  You can also print
+the contents of variables declared using these type.  This section
+gives a number of simple source code examples together with sample GDB
+sessions.
+
+   The first example contains the following section of code:
+
+     VAR
+        s: SET OF CHAR ;
+        r: [20..40] ;
+
+and you can request GDB to interrogate the type and value of `r' and
+`s'.
+
+     (gdb) print s
+     {'A'..'C', 'Z'}
+     (gdb) ptype s
+     SET OF CHAR
+     (gdb) print r
+     21
+     (gdb) ptype r
+     [20..40]
+
+Likewise if your source code declares `s' as:
+
+     VAR
+        s: SET ['A'..'Z'] ;
+
+then you may query the type of `s' by:
+
+     (gdb) ptype s
+     type = SET ['A'..'Z']
+
+Note that at present you cannot interactively manipulate set
+expressions using the debugger.
+
+   The following example shows how you might declare an array in
+Modula-2 and how you can interact with GDB to print its type and
+contents:
+
+     VAR
+        s: ARRAY [-10..10] OF CHAR ;
+
+     (gdb) ptype s
+     ARRAY [-10..10] OF CHAR
+
+   Note that the array handling is not yet complete and although the
+type is printed correctly, expression handling still assumes that all
+arrays have a lower bound of zero and not `-10' as in the example above.
+
+   Here are some more type related Modula-2 examples:
+
+     TYPE
+        colour = (blue, red, yellow, green) ;
+        t = [blue..yellow] ;
+     VAR
+        s: t ;
+     BEGIN
+        s := blue ;
+
+The GDB interaction shows how you can query the data type and value of
+a variable.
+
+     (gdb) print s
+     $1 = blue
+     (gdb) ptype t
+     type = [blue..yellow]
+
+In this example a Modula-2 array is declared and its contents
+displayed.  Observe that the contents are written in the same way as
+their `C' counterparts.
+
+     VAR
+        s: ARRAY [1..5] OF CARDINAL ;
+     BEGIN
+        s[1] := 1 ;
+
+     (gdb) print s
+     $1 = {1, 0, 0, 0, 0}
+     (gdb) ptype s
+     type = ARRAY [1..5] OF CARDINAL
+
+   The Modula-2 language interface to GDB also understands pointer
+types as shown in this example:
+
+     VAR
+        s: POINTER TO ARRAY [1..5] OF CARDINAL ;
+     BEGIN
+        NEW(s) ;
+        s^[1] := 1 ;
+
+and you can request that GDB describes the type of `s'.
+
+     (gdb) ptype s
+     type = POINTER TO ARRAY [1..5] OF CARDINAL
+
+   GDB handles compound types as we can see in this example.  Here we
+combine array types, record types, pointer types and subrange types:
+
+     TYPE
+        foo = RECORD
+                 f1: CARDINAL ;
+                 f2: CHAR ;
+                 f3: myarray ;
+              END ;
+
+        myarray = ARRAY myrange OF CARDINAL ;
+        myrange = [-2..2] ;
+     VAR
+        s: POINTER TO ARRAY myrange OF foo ;
+
+and you can ask GDB to describe the type of `s' as shown below.
+
+     (gdb) ptype s
+     type = POINTER TO ARRAY [-2..2] OF foo = RECORD
+         f1 : CARDINAL;
+         f2 : CHAR;
+         f3 : ARRAY [-2..2] OF CARDINAL;
+     END
+
+
+File: gdb.info,  Node: M2 Defaults,  Next: Deviations,  Prev: M2 Types,  Up: Modula-2
+
+15.4.8.5 Modula-2 Defaults
+..........................
+
+If type and range checking are set automatically by GDB, they both
+default to `on' whenever the working language changes to Modula-2.
+This happens regardless of whether you or GDB selected the working
+language.
+
+   If you allow GDB to set the language automatically, then entering
+code compiled from a file whose name ends with `.mod' sets the working
+language to Modula-2.  *Note Having GDB Infer the Source Language:
+Automatically, for further details.
+
+
+File: gdb.info,  Node: Deviations,  Next: M2 Checks,  Prev: M2 Defaults,  Up: Modula-2
+
+15.4.8.6 Deviations from Standard Modula-2
+..........................................
+
+A few changes have been made to make Modula-2 programs easier to debug.
+This is done primarily via loosening its type strictness:
+
+   * Unlike in standard Modula-2, pointer constants can be formed by
+     integers.  This allows you to modify pointer variables during
+     debugging.  (In standard Modula-2, the actual address contained in
+     a pointer variable is hidden from you; it can only be modified
+     through direct assignment to another pointer variable or
+     expression that returned a pointer.)
+
+   * C escape sequences can be used in strings and characters to
+     represent non-printable characters.  GDB prints out strings with
+     these escape sequences embedded.  Single non-printable characters
+     are printed using the `CHR(NNN)' format.
+
+   * The assignment operator (`:=') returns the value of its right-hand
+     argument.
+
+   * All built-in procedures both modify _and_ return their argument.
+
+
+File: gdb.info,  Node: M2 Checks,  Next: M2 Scope,  Prev: Deviations,  Up: Modula-2
+
+15.4.8.7 Modula-2 Type and Range Checks
+.......................................
+
+     _Warning:_ in this release, GDB does not yet perform type or range
+     checking.
+
+   GDB considers two Modula-2 variables type equivalent if:
+
+   * They are of types that have been declared equivalent via a `TYPE
+     T1 = T2' statement
+
+   * They have been declared on the same line.  (Note:  This is true of
+     the GNU Modula-2 compiler, but it may not be true of other
+     compilers.)
+
+   As long as type checking is enabled, any attempt to combine variables
+whose types are not equivalent is an error.
+
+   Range checking is done on all mathematical operations, assignment,
+array index bounds, and all built-in functions and procedures.
+
+
+File: gdb.info,  Node: M2 Scope,  Next: GDB/M2,  Prev: M2 Checks,  Up: Modula-2
+
+15.4.8.8 The Scope Operators `::' and `.'
+.........................................
+
+There are a few subtle differences between the Modula-2 scope operator
+(`.') and the GDB scope operator (`::').  The two have similar syntax:
+
+
+     MODULE . ID
+     SCOPE :: ID
+
+where SCOPE is the name of a module or a procedure, MODULE the name of
+a module, and ID is any declared identifier within your program, except
+another module.
+
+   Using the `::' operator makes GDB search the scope specified by
+SCOPE for the identifier ID.  If it is not found in the specified
+scope, then GDB searches all scopes enclosing the one specified by
+SCOPE.
+
+   Using the `.' operator makes GDB search the current scope for the
+identifier specified by ID that was imported from the definition module
+specified by MODULE.  With this operator, it is an error if the
+identifier ID was not imported from definition module MODULE, or if ID
+is not an identifier in MODULE.
+
+
+File: gdb.info,  Node: GDB/M2,  Prev: M2 Scope,  Up: Modula-2
+
+15.4.8.9 GDB and Modula-2
+.........................
+
+Some GDB commands have little use when debugging Modula-2 programs.
+Five subcommands of `set print' and `show print' apply specifically to
+C and C++: `vtbl', `demangle', `asm-demangle', `object', and `union'.
+The first four apply to C++, and the last to the C `union' type, which
+has no direct analogue in Modula-2.
+
+   The `@' operator (*note Expressions: Expressions.), while available
+with any language, is not useful with Modula-2.  Its intent is to aid
+the debugging of "dynamic arrays", which cannot be created in Modula-2
+as they can in C or C++.  However, because an address can be specified
+by an integral constant, the construct `{TYPE}ADREXP' is still useful.
+
+   In GDB scripts, the Modula-2 inequality operator `#' is interpreted
+as the beginning of a comment.  Use `<>' instead.
+
+
+File: gdb.info,  Node: Ada,  Prev: Modula-2,  Up: Supported Languages
+
+15.4.9 Ada
+----------
+
+The extensions made to GDB for Ada only support output from the GNU Ada
+(GNAT) compiler.  Other Ada compilers are not currently supported, and
+attempting to debug executables produced by them is most likely to be
+difficult.
+
+* Menu:
+
+* Ada Mode Intro::              General remarks on the Ada syntax
+                                   and semantics supported by Ada mode
+                                   in GDB.
+* Omissions from Ada::          Restrictions on the Ada expression syntax.
+* Additions to Ada::            Extensions of the Ada expression syntax.
+* Stopping Before Main Program:: Debugging the program during elaboration.
+* Ada Tasks::                   Listing and setting breakpoints in tasks.
+* Ada Tasks and Core Files::    Tasking Support when Debugging Core Files
+* Ravenscar Profile::           Tasking Support when using the Ravenscar
+                                   Profile
+* Ada Glitches::                Known peculiarities of Ada mode.
+
+
+File: gdb.info,  Node: Ada Mode Intro,  Next: Omissions from Ada,  Up: Ada
+
+15.4.9.1 Introduction
+.....................
+
+The Ada mode of GDB supports a fairly large subset of Ada expression
+syntax, with some extensions.  The philosophy behind the design of this
+subset is
+
+   * That GDB should provide basic literals and access to operations for
+     arithmetic, dereferencing, field selection, indexing, and
+     subprogram calls, leaving more sophisticated computations to
+     subprograms written into the program (which therefore may be
+     called from GDB).
+
+   * That type safety and strict adherence to Ada language restrictions
+     are not particularly important to the GDB user.
+
+   * That brevity is important to the GDB user.
+
+   Thus, for brevity, the debugger acts as if all names declared in
+user-written packages are directly visible, even if they are not visible
+according to Ada rules, thus making it unnecessary to fully qualify most
+names with their packages, regardless of context.  Where this causes
+ambiguity, GDB asks the user's intent.
+
+   The debugger will start in Ada mode if it detects an Ada main
+program.  As for other languages, it will enter Ada mode when stopped
+in a program that was translated from an Ada source file.
+
+   While in Ada mode, you may use `-' for comments.  This is useful
+mostly for documenting command files.  The standard GDB comment (`#')
+still works at the beginning of a line in Ada mode, but not in the
+middle (to allow based literals).
+
+   The debugger supports limited overloading.  Given a subprogram call
+in which the function symbol has multiple definitions, it will use the
+number of actual parameters and some information about their types to
+attempt to narrow the set of definitions.  It also makes very limited
+use of context, preferring procedures to functions in the context of
+the `call' command, and functions to procedures elsewhere.
+
+
+File: gdb.info,  Node: Omissions from Ada,  Next: Additions to Ada,  Prev: Ada Mode Intro,  Up: Ada
+
+15.4.9.2 Omissions from Ada
+...........................
+
+Here are the notable omissions from the subset:
+
+   * Only a subset of the attributes are supported:
+
+        - 'First, 'Last, and 'Length  on array objects (not on types
+          and subtypes).
+
+        - 'Min and 'Max.
+
+        - 'Pos and 'Val.
+
+        - 'Tag.
+
+        - 'Range on array objects (not subtypes), but only as the right
+          operand of the membership (`in') operator.
+
+        - 'Access, 'Unchecked_Access, and 'Unrestricted_Access (a GNAT
+          extension).
+
+        - 'Address.
+
+   * The names in `Characters.Latin_1' are not available and
+     concatenation is not implemented.  Thus, escape characters in
+     strings are not currently available.
+
+   * Equality tests (`=' and `/=') on arrays test for bitwise equality
+     of representations.  They will generally work correctly for
+     strings and arrays whose elements have integer or enumeration
+     types.  They may not work correctly for arrays whose element types
+     have user-defined equality, for arrays of real values (in
+     particular, IEEE-conformant floating point, because of negative
+     zeroes and NaNs), and for arrays whose elements contain unused
+     bits with indeterminate values.
+
+   * The other component-by-component array operations (`and', `or',
+     `xor', `not', and relational tests other than equality) are not
+     implemented.
+
+   * There is limited support for array and record aggregates.  They are
+     permitted only on the right sides of assignments, as in these
+     examples:
+
+          (gdb) set An_Array := (1, 2, 3, 4, 5, 6)
+          (gdb) set An_Array := (1, others => 0)
+          (gdb) set An_Array := (0|4 => 1, 1..3 => 2, 5 => 6)
+          (gdb) set A_2D_Array := ((1, 2, 3), (4, 5, 6), (7, 8, 9))
+          (gdb) set A_Record := (1, "Peter", True);
+          (gdb) set A_Record := (Name => "Peter", Id => 1, Alive => True)
+
+     Changing a discriminant's value by assigning an aggregate has an
+     undefined effect if that discriminant is used within the record.
+     However, you can first modify discriminants by directly assigning
+     to them (which normally would not be allowed in Ada), and then
+     performing an aggregate assignment.  For example, given a variable
+     `A_Rec' declared to have a type such as:
+
+          type Rec (Len : Small_Integer := 0) is record
+              Id : Integer;
+              Vals : IntArray (1 .. Len);
+          end record;
+
+     you can assign a value with a different size of `Vals' with two
+     assignments:
+
+          (gdb) set A_Rec.Len := 4
+          (gdb) set A_Rec := (Id => 42, Vals => (1, 2, 3, 4))
+
+     As this example also illustrates, GDB is very loose about the usual
+     rules concerning aggregates.  You may leave out some of the
+     components of an array or record aggregate (such as the `Len'
+     component in the assignment to `A_Rec' above); they will retain
+     their original values upon assignment.  You may freely use dynamic
+     values as indices in component associations.  You may even use
+     overlapping or redundant component associations, although which
+     component values are assigned in such cases is not defined.
+
+   * Calls to dispatching subprograms are not implemented.
+
+   * The overloading algorithm is much more limited (i.e., less
+     selective) than that of real Ada.  It makes only limited use of
+     the context in which a subexpression appears to resolve its
+     meaning, and it is much looser in its rules for allowing type
+     matches.  As a result, some function calls will be ambiguous, and
+     the user will be asked to choose the proper resolution.
+
+   * The `new' operator is not implemented.
+
+   * Entry calls are not implemented.
+
+   * Aside from printing, arithmetic operations on the native VAX
+     floating-point formats are not supported.
+
+   * It is not possible to slice a packed array.
+
+   * The names `True' and `False', when not part of a qualified name,
+     are interpreted as if implicitly prefixed by `Standard',
+     regardless of context.  Should your program redefine these names
+     in a package or procedure (at best a dubious practice), you will
+     have to use fully qualified names to access their new definitions.
+
+
+File: gdb.info,  Node: Additions to Ada,  Next: Stopping Before Main Program,  Prev: Omissions from Ada,  Up: Ada
+
+15.4.9.3 Additions to Ada
+.........................
+
+As it does for other languages, GDB makes certain generic extensions to
+Ada (*note Expressions::):
+
+   * If the expression E is a variable residing in memory (typically a
+     local variable or array element) and N is a positive integer, then
+     `E at N' displays the values of E and the N-1 adjacent variables
+     following it in memory as an array.  In Ada, this operator is
+     generally not necessary, since its prime use is in displaying
+     parts of an array, and slicing will usually do this in Ada.
+     However, there are occasional uses when debugging programs in
+     which certain debugging information has been optimized away.
+
+   * `B::VAR' means "the variable named VAR that appears in function or
+     file B."  When B is a file name, you must typically surround it in
+     single quotes.
+
+   * The expression `{TYPE} ADDR' means "the variable of type TYPE that
+     appears at address ADDR."
+
+   * A name starting with `$' is a convenience variable (*note
+     Convenience Vars::) or a machine register (*note Registers::).
+
+   In addition, GDB provides a few other shortcuts and outright
+additions specific to Ada:
+
+   * The assignment statement is allowed as an expression, returning
+     its right-hand operand as its value.  Thus, you may enter
+
+          (gdb) set x := y + 3
+          (gdb) print A(tmp := y + 1)
+
+   * The semicolon is allowed as an "operator,"  returning as its value
+     the value of its right-hand operand.  This allows, for example,
+     complex conditional breaks:
+
+          (gdb) break f
+          (gdb) condition 1 (report(i); k += 1; A(k) > 100)
+
+   * Rather than use catenation and symbolic character names to
+     introduce special characters into strings, one may instead use a
+     special bracket notation, which is also used to print strings.  A
+     sequence of characters of the form `["XX"]' within a string or
+     character literal denotes the (single) character whose numeric
+     encoding is XX in hexadecimal.  The sequence of characters `["""]'
+     also denotes a single quotation mark in strings.   For example,
+             "One line.["0a"]Next line.["0a"]"
+     contains an ASCII newline character (`Ada.Characters.Latin_1.LF')
+     after each period.
+
+   * The subtype used as a prefix for the attributes 'Pos, 'Min, and
+     'Max is optional (and is ignored in any case).  For example, it is
+     valid to write
+
+          (gdb) print 'max(x, y)
+
+   * When printing arrays, GDB uses positional notation when the array
+     has a lower bound of 1, and uses a modified named notation
+     otherwise.  For example, a one-dimensional array of three integers
+     with a lower bound of 3 might print as
+
+          (3 => 10, 17, 1)
+
+     That is, in contrast to valid Ada, only the first component has a
+     `=>' clause.
+
+   * You may abbreviate attributes in expressions with any unique,
+     multi-character subsequence of their names (an exact match gets
+     preference).  For example, you may use a'len, a'gth, or a'lh in
+     place of  a'length.
+
+   * Since Ada is case-insensitive, the debugger normally maps
+     identifiers you type to lower case.  The GNAT compiler uses
+     upper-case characters for some of its internal identifiers, which
+     are normally of no interest to users.  For the rare occasions when
+     you actually have to look at them, enclose them in angle brackets
+     to avoid the lower-case mapping.  For example,
+          (gdb) print <JMPBUF_SAVE>[0]
+
+   * Printing an object of class-wide type or dereferencing an
+     access-to-class-wide value will display all the components of the
+     object's specific type (as indicated by its run-time tag).
+     Likewise, component selection on such a value will operate on the
+     specific type of the object.
+
+
+
+File: gdb.info,  Node: Stopping Before Main Program,  Next: Ada Tasks,  Prev: Additions to Ada,  Up: Ada
+
+15.4.9.4 Stopping at the Very Beginning
+.......................................
+
+It is sometimes necessary to debug the program during elaboration, and
+before reaching the main procedure.  As defined in the Ada Reference
+Manual, the elaboration code is invoked from a procedure called
+`adainit'.  To run your program up to the beginning of elaboration,
+simply use the following two commands: `tbreak adainit' and `run'.
+
+
+File: gdb.info,  Node: Ada Tasks,  Next: Ada Tasks and Core Files,  Prev: Stopping Before Main Program,  Up: Ada
+
+15.4.9.5 Extensions for Ada Tasks
+.................................
+
+Support for Ada tasks is analogous to that for threads (*note
+Threads::).  GDB provides the following task-related commands:
+
+`info tasks'
+     This command shows a list of current Ada tasks, as in the
+     following example:
+
+          (gdb) info tasks
+            ID       TID P-ID Pri State                 Name
+             1   8088000   0   15 Child Activation Wait main_task
+             2   80a4000   1   15 Accept Statement      b
+             3   809a800   1   15 Child Activation Wait a
+          *  4   80ae800   3   15 Runnable              c
+
+     In this listing, the asterisk before the last task indicates it to
+     be the task currently being inspected.
+
+    ID
+          Represents GDB's internal task number.
+
+    TID
+          The Ada task ID.
+
+    P-ID
+          The parent's task ID (GDB's internal task number).
+
+    Pri
+          The base priority of the task.
+
+    State
+          Current state of the task.
+
+         `Unactivated'
+               The task has been created but has not been activated.
+               It cannot be executing.
+
+         `Runnable'
+               The task is not blocked for any reason known to Ada.
+               (It may be waiting for a mutex, though.) It is
+               conceptually "executing" in normal mode.
+
+         `Terminated'
+               The task is terminated, in the sense of ARM 9.3 (5).
+               Any dependents that were waiting on terminate
+               alternatives have been awakened and have terminated
+               themselves.
+
+         `Child Activation Wait'
+               The task is waiting for created tasks to complete
+               activation.
+
+         `Accept Statement'
+               The task is waiting on an accept or selective wait
+               statement.
+
+         `Waiting on entry call'
+               The task is waiting on an entry call.
+
+         `Async Select Wait'
+               The task is waiting to start the abortable part of an
+               asynchronous select statement.
+
+         `Delay Sleep'
+               The task is waiting on a select statement with only a
+               delay alternative open.
+
+         `Child Termination Wait'
+               The task is sleeping having completed a master within
+               itself, and is waiting for the tasks dependent on that
+               master to become terminated or waiting on a terminate
+               Phase.
+
+         `Wait Child in Term Alt'
+               The task is sleeping waiting for tasks on terminate
+               alternatives to finish terminating.
+
+         `Accepting RV with TASKNO'
+               The task is accepting a rendez-vous with the task TASKNO.
+
+    Name
+          Name of the task in the program.
+
+
+`info task TASKNO'
+     This command shows detailled informations on the specified task,
+     as in the following example:
+          (gdb) info tasks
+            ID       TID P-ID Pri State                  Name
+             1   8077880    0  15 Child Activation Wait  main_task
+          *  2   807c468    1  15 Runnable               task_1
+          (gdb) info task 2
+          Ada Task: 0x807c468
+          Name: task_1
+          Thread: 0x807f378
+          Parent: 1 (main_task)
+          Base Priority: 15
+          State: Runnable
+
+`task'
+     This command prints the ID of the current task.
+
+          (gdb) info tasks
+            ID       TID P-ID Pri State                  Name
+             1   8077870    0  15 Child Activation Wait  main_task
+          *  2   807c458    1  15 Runnable               t
+          (gdb) task
+          [Current task is 2]
+
+`task TASKNO'
+     This command is like the `thread THREADNO' command (*note
+     Threads::).  It switches the context of debugging from the current
+     task to the given task.
+
+          (gdb) info tasks
+            ID       TID P-ID Pri State                  Name
+             1   8077870    0  15 Child Activation Wait  main_task
+          *  2   807c458    1  15 Runnable               t
+          (gdb) task 1
+          [Switching to task 1]
+          #0  0x8067726 in pthread_cond_wait ()
+          (gdb) bt
+          #0  0x8067726 in pthread_cond_wait ()
+          #1  0x8056714 in system.os_interface.pthread_cond_wait ()
+          #2  0x805cb63 in system.task_primitives.operations.sleep ()
+          #3  0x806153e in system.tasking.stages.activate_tasks ()
+          #4  0x804aacc in un () at un.adb:5
+
+`break LINESPEC task TASKNO'
+`break LINESPEC task TASKNO if ...'
+     These commands are like the `break ... thread ...' command (*note
+     Thread Stops::).  LINESPEC specifies source lines, as described in
+     *Note Specify Location::.
+
+     Use the qualifier `task TASKNO' with a breakpoint command to
+     specify that you only want GDB to stop the program when a
+     particular Ada task reaches this breakpoint.  TASKNO is one of the
+     numeric task identifiers assigned by GDB, shown in the first
+     column of the `info tasks' display.
+
+     If you do not specify `task TASKNO' when you set a breakpoint, the
+     breakpoint applies to _all_ tasks of your program.
+
+     You can use the `task' qualifier on conditional breakpoints as
+     well; in this case, place `task TASKNO' before the breakpoint
+     condition (before the `if').
+
+     For example,
+
+          (gdb) info tasks
+            ID       TID P-ID Pri State                 Name
+             1 140022020   0   15 Child Activation Wait main_task
+             2 140045060   1   15 Accept/Select Wait    t2
+             3 140044840   1   15 Runnable              t1
+          *  4 140056040   1   15 Runnable              t3
+          (gdb) b 15 task 2
+          Breakpoint 5 at 0x120044cb0: file test_task_debug.adb, line 15.
+          (gdb) cont
+          Continuing.
+          task # 1 running
+          task # 2 running
+
+          Breakpoint 5, test_task_debug () at test_task_debug.adb:15
+          15               flush;
+          (gdb) info tasks
+            ID       TID P-ID Pri State                 Name
+             1 140022020   0   15 Child Activation Wait main_task
+          *  2 140045060   1   15 Runnable              t2
+             3 140044840   1   15 Runnable              t1
+             4 140056040   1   15 Delay Sleep           t3
+
+
+File: gdb.info,  Node: Ada Tasks and Core Files,  Next: Ravenscar Profile,  Prev: Ada Tasks,  Up: Ada
+
+15.4.9.6 Tasking Support when Debugging Core Files
+..................................................
+
+When inspecting a core file, as opposed to debugging a live program,
+tasking support may be limited or even unavailable, depending on the
+platform being used.  For instance, on x86-linux, the list of tasks is
+available, but task switching is not supported.  On Tru64, however,
+task switching will work as usual.
+
+   On certain platforms, including Tru64, the debugger needs to perform
+some memory writes in order to provide Ada tasking support.  When
+inspecting a core file, this means that the core file must be opened
+with read-write privileges, using the command `"set write on"' (*note
+Patching::).  Under these circumstances, you should make a backup copy
+of the core file before inspecting it with GDB.
+
+
+File: gdb.info,  Node: Ravenscar Profile,  Next: Ada Glitches,  Prev: Ada Tasks and Core Files,  Up: Ada
+
+15.4.9.7 Tasking Support when using the Ravenscar Profile
+.........................................................
+
+The "Ravenscar Profile" is a subset of the Ada tasking features,
+specifically designed for systems with safety-critical real-time
+requirements.
+
+`set ravenscar task-switching on'
+     Allows task switching when debugging a program that uses the
+     Ravenscar Profile.  This is the default.
+
+`set ravenscar task-switching off'
+     Turn off task switching when debugging a program that uses the
+     Ravenscar Profile.  This is mostly intended to disable the code
+     that adds support for the Ravenscar Profile, in case a bug in
+     either GDB or in the Ravenscar runtime is preventing GDB from
+     working properly.  To be effective, this command should be run
+     before the program is started.
+
+`show ravenscar task-switching'
+     Show whether it is possible to switch from task to task in a
+     program using the Ravenscar Profile.
+
+
+
+File: gdb.info,  Node: Ada Glitches,  Prev: Ravenscar Profile,  Up: Ada
+
+15.4.9.8 Known Peculiarities of Ada Mode
+........................................
+
+Besides the omissions listed previously (*note Omissions from Ada::),
+we know of several problems with and limitations of Ada mode in GDB,
+some of which will be fixed with planned future releases of the debugger
+and the GNU Ada compiler.
+
+   * Static constants that the compiler chooses not to materialize as
+     objects in storage are invisible to the debugger.
+
+   * Named parameter associations in function argument lists are
+     ignored (the argument lists are treated as positional).
+
+   * Many useful library packages are currently invisible to the
+     debugger.
+
+   * Fixed-point arithmetic, conversions, input, and output is carried
+     out using floating-point arithmetic, and may give results that
+     only approximate those on the host machine.
+
+   * The GNAT compiler never generates the prefix `Standard' for any of
+     the standard symbols defined by the Ada language.  GDB knows about
+     this: it will strip the prefix from names when you use it, and
+     will never look for a name you have so qualified among local
+     symbols, nor match against symbols in other packages or
+     subprograms.  If you have defined entities anywhere in your
+     program other than parameters and local variables whose simple
+     names match names in `Standard', GNAT's lack of qualification here
+     can cause confusion.  When this happens, you can usually resolve
+     the confusion by qualifying the problematic names with package
+     `Standard' explicitly.
+
+   Older versions of the compiler sometimes generate erroneous debugging
+information, resulting in the debugger incorrectly printing the value
+of affected entities.  In some cases, the debugger is able to work
+around an issue automatically. In other cases, the debugger is able to
+work around the issue, but the work-around has to be specifically
+enabled.
+
+`set ada trust-PAD-over-XVS on'
+     Configure GDB to strictly follow the GNAT encoding when computing
+     the value of Ada entities, particularly when `PAD' and `PAD___XVS'
+     types are involved (see `ada/exp_dbug.ads' in the GCC sources for
+     a complete description of the encoding used by the GNAT compiler).
+     This is the default.
+
+`set ada trust-PAD-over-XVS off'
+     This is related to the encoding using by the GNAT compiler.  If
+     GDB sometimes prints the wrong value for certain entities,
+     changing `ada trust-PAD-over-XVS' to `off' activates a work-around
+     which may fix the issue.  It is always safe to set `ada
+     trust-PAD-over-XVS' to `off', but this incurs a slight performance
+     penalty, so it is recommended to leave this setting to `on' unless
+     necessary.
+
+
+
+File: gdb.info,  Node: Unsupported Languages,  Prev: Supported Languages,  Up: Languages
+
+15.5 Unsupported Languages
+==========================
+
+In addition to the other fully-supported programming languages, GDB
+also provides a pseudo-language, called `minimal'.  It does not
+represent a real programming language, but provides a set of
+capabilities close to what the C or assembly languages provide.  This
+should allow most simple operations to be performed while debugging an
+application that uses a language currently not supported by GDB.
+
+   If the language is set to `auto', GDB will automatically select this
+language if the current frame corresponds to an unsupported language.
+
+
+File: gdb.info,  Node: Symbols,  Next: Altering,  Prev: Languages,  Up: Top
+
+16 Examining the Symbol Table
+*****************************
+
+The commands described in this chapter allow you to inquire about the
+symbols (names of variables, functions and types) defined in your
+program.  This information is inherent in the text of your program and
+does not change as your program executes.  GDB finds it in your
+program's symbol table, in the file indicated when you started GDB
+(*note Choosing Files: File Options.), or by one of the file-management
+commands (*note Commands to Specify Files: Files.).
+
+   Occasionally, you may need to refer to symbols that contain unusual
+characters, which GDB ordinarily treats as word delimiters.  The most
+frequent case is in referring to static variables in other source files
+(*note Program Variables: Variables.).  File names are recorded in
+object files as debugging symbols, but GDB would ordinarily parse a
+typical file name, like `foo.c', as the three words `foo' `.' `c'.  To
+allow GDB to recognize `foo.c' as a single symbol, enclose it in single
+quotes; for example,
+
+     p 'foo.c'::x
+
+looks up the value of `x' in the scope of the file `foo.c'.
+
+`set case-sensitive on'
+`set case-sensitive off'
+`set case-sensitive auto'
+     Normally, when GDB looks up symbols, it matches their names with
+     case sensitivity determined by the current source language.
+     Occasionally, you may wish to control that.  The command `set
+     case-sensitive' lets you do that by specifying `on' for
+     case-sensitive matches or `off' for case-insensitive ones.  If you
+     specify `auto', case sensitivity is reset to the default suitable
+     for the source language.  The default is case-sensitive matches
+     for all languages except for Fortran, for which the default is
+     case-insensitive matches.
+
+`show case-sensitive'
+     This command shows the current setting of case sensitivity for
+     symbols lookups.
+
+`info address SYMBOL'
+     Describe where the data for SYMBOL is stored.  For a register
+     variable, this says which register it is kept in.  For a
+     non-register local variable, this prints the stack-frame offset at
+     which the variable is always stored.
+
+     Note the contrast with `print &SYMBOL', which does not work at all
+     for a register variable, and for a stack local variable prints the
+     exact address of the current instantiation of the variable.
+
+`info symbol ADDR'
+     Print the name of a symbol which is stored at the address ADDR.
+     If no symbol is stored exactly at ADDR, GDB prints the nearest
+     symbol and an offset from it:
+
+          (gdb) info symbol 0x54320
+          _initialize_vx + 396 in section .text
+
+     This is the opposite of the `info address' command.  You can use
+     it to find out the name of a variable or a function given its
+     address.
+
+     For dynamically linked executables, the name of executable or
+     shared library containing the symbol is also printed:
+
+          (gdb) info symbol 0x400225
+          _start + 5 in section .text of /tmp/a.out
+          (gdb) info symbol 0x2aaaac2811cf
+          __read_nocancel + 6 in section .text of /usr/lib64/libc.so.6
+
+`whatis [ARG]'
+     Print the data type of ARG, which can be either an expression or a
+     name of a data type.  With no argument, print the data type of
+     `$', the last value in the value history.
+
+     If ARG is an expression (*note Expressions: Expressions.), it is
+     not actually evaluated, and any side-effecting operations (such as
+     assignments or function calls) inside it do not take place.
+
+     If ARG is a variable or an expression, `whatis' prints its literal
+     type as it is used in the source code.  If the type was defined
+     using a `typedef', `whatis' will _not_ print the data type
+     underlying the `typedef'.  If the type of the variable or the
+     expression is a compound data type, such as `struct' or  `class',
+     `whatis' never prints their fields or methods.  It just prints the
+     `struct'/`class' name (a.k.a. its "tag").  If you want to see the
+     members of such a compound data type, use `ptype'.
+
+     If ARG is a type name that was defined using `typedef', `whatis'
+     "unrolls" only one level of that `typedef'.  Unrolling means that
+     `whatis' will show the underlying type used in the `typedef'
+     declaration of ARG.  However, if that underlying type is also a
+     `typedef', `whatis' will not unroll it.
+
+     For C code, the type names may also have the form `class
+     CLASS-NAME', `struct STRUCT-TAG', `union UNION-TAG' or `enum
+     ENUM-TAG'.
+
+`ptype [ARG]'
+     `ptype' accepts the same arguments as `whatis', but prints a
+     detailed description of the type, instead of just the name of the
+     type.  *Note Expressions: Expressions.
+
+     Contrary to `whatis', `ptype' always unrolls any `typedef's in its
+     argument declaration, whether the argument is a variable,
+     expression, or a data type.  This means that `ptype' of a variable
+     or an expression will not print literally its type as present in
+     the source code--use `whatis' for that.  `typedef's at the pointer
+     or reference targets are also unrolled.  Only `typedef's of
+     fields, methods and inner `class typedef's of `struct's, `class'es
+     and `union's are not unrolled even with `ptype'.
+
+     For example, for this variable declaration:
+
+          typedef double real_t;
+          struct complex { real_t real; double imag; };
+          typedef struct complex complex_t;
+          complex_t var;
+          real_t *real_pointer_var;
+
+     the two commands give this output:
+
+          (gdb) whatis var
+          type = complex_t
+          (gdb) ptype var
+          type = struct complex {
+              real_t real;
+              double imag;
+          }
+          (gdb) whatis complex_t
+          type = struct complex
+          (gdb) whatis struct complex
+          type = struct complex
+          (gdb) ptype struct complex
+          type = struct complex {
+              real_t real;
+              double imag;
+          }
+          (gdb) whatis real_pointer_var
+          type = real_t *
+          (gdb) ptype real_pointer_var
+          type = double *
+
+     As with `whatis', using `ptype' without an argument refers to the
+     type of `$', the last value in the value history.
+
+     Sometimes, programs use opaque data types or incomplete
+     specifications of complex data structure.  If the debug
+     information included in the program does not allow GDB to display
+     a full declaration of the data type, it will say `<incomplete
+     type>'.  For example, given these declarations:
+
+              struct foo;
+              struct foo *fooptr;
+
+     but no definition for `struct foo' itself, GDB will say:
+
+            (gdb) ptype foo
+            $1 = <incomplete type>
+
+     "Incomplete type" is C terminology for data types that are not
+     completely specified.
+
+`info types REGEXP'
+`info types'
+     Print a brief description of all types whose names match the
+     regular expression REGEXP (or all types in your program, if you
+     supply no argument).  Each complete typename is matched as though
+     it were a complete line; thus, `i type value' gives information on
+     all types in your program whose names include the string `value',
+     but `i type ^value$' gives information only on types whose complete
+     name is `value'.
+
+     This command differs from `ptype' in two ways: first, like
+     `whatis', it does not print a detailed description; second, it
+     lists all source files where a type is defined.
+
+`info scope LOCATION'
+     List all the variables local to a particular scope.  This command
+     accepts a LOCATION argument--a function name, a source line, or an
+     address preceded by a `*', and prints all the variables local to
+     the scope defined by that location.  (*Note Specify Location::, for
+     details about supported forms of LOCATION.)  For example:
+
+          (gdb) info scope command_line_handler
+          Scope for command_line_handler:
+          Symbol rl is an argument at stack/frame offset 8, length 4.
+          Symbol linebuffer is in static storage at address 0x150a18, length 4.
+          Symbol linelength is in static storage at address 0x150a1c, length 4.
+          Symbol p is a local variable in register $esi, length 4.
+          Symbol p1 is a local variable in register $ebx, length 4.
+          Symbol nline is a local variable in register $edx, length 4.
+          Symbol repeat is a local variable at frame offset -8, length 4.
+
+     This command is especially useful for determining what data to
+     collect during a "trace experiment", see *Note collect: Tracepoint
+     Actions.
+
+`info source'
+     Show information about the current source file--that is, the
+     source file for the function containing the current point of
+     execution:
+        * the name of the source file, and the directory containing it,
+
+        * the directory it was compiled in,
+
+        * its length, in lines,
+
+        * which programming language it is written in,
+
+        * whether the executable includes debugging information for
+          that file, and if so, what format the information is in
+          (e.g., STABS, Dwarf 2, etc.), and
+
+        * whether the debugging information includes information about
+          preprocessor macros.
+
+`info sources'
+     Print the names of all source files in your program for which
+     there is debugging information, organized into two lists: files
+     whose symbols have already been read, and files whose symbols will
+     be read when needed.
+
+`info functions'
+     Print the names and data types of all defined functions.
+
+`info functions REGEXP'
+     Print the names and data types of all defined functions whose
+     names contain a match for regular expression REGEXP.  Thus, `info
+     fun step' finds all functions whose names include `step'; `info
+     fun ^step' finds those whose names start with `step'.  If a
+     function name contains characters that conflict with the regular
+     expression language (e.g.  `operator*()'), they may be quoted with
+     a backslash.
+
+`info variables'
+     Print the names and data types of all variables that are defined
+     outside of functions (i.e. excluding local variables).
+
+`info variables REGEXP'
+     Print the names and data types of all variables (except for local
+     variables) whose names contain a match for regular expression
+     REGEXP.
+
+`info classes'
+`info classes REGEXP'
+     Display all Objective-C classes in your program, or (with the
+     REGEXP argument) all those matching a particular regular
+     expression.
+
+`info selectors'
+`info selectors REGEXP'
+     Display all Objective-C selectors in your program, or (with the
+     REGEXP argument) all those matching a particular regular
+     expression.
+
+`set opaque-type-resolution on'
+     Tell GDB to resolve opaque types.  An opaque type is a type
+     declared as a pointer to a `struct', `class', or `union'--for
+     example, `struct MyType *'--that is used in one source file
+     although the full declaration of `struct MyType' is in another
+     source file.  The default is on.
+
+     A change in the setting of this subcommand will not take effect
+     until the next time symbols for a file are loaded.
+
+`set opaque-type-resolution off'
+     Tell GDB not to resolve opaque types.  In this case, the type is
+     printed as follows:
+          {<no data fields>}
+
+`show opaque-type-resolution'
+     Show whether opaque types are resolved or not.
+
+`maint print symbols FILENAME'
+`maint print psymbols FILENAME'
+`maint print msymbols FILENAME'
+     Write a dump of debugging symbol data into the file FILENAME.
+     These commands are used to debug the GDB symbol-reading code.  Only
+     symbols with debugging data are included.  If you use `maint print
+     symbols', GDB includes all the symbols for which it has already
+     collected full details: that is, FILENAME reflects symbols for
+     only those files whose symbols GDB has read.  You can use the
+     command `info sources' to find out which files these are.  If you
+     use `maint print psymbols' instead, the dump shows information
+     about symbols that GDB only knows partially--that is, symbols
+     defined in files that GDB has skimmed, but not yet read
+     completely.  Finally, `maint print msymbols' dumps just the
+     minimal symbol information required for each object file from
+     which GDB has read some symbols.  *Note Commands to Specify Files:
+     Files, for a discussion of how GDB reads symbols (in the
+     description of `symbol-file').
+
+`maint info symtabs [ REGEXP ]'
+`maint info psymtabs [ REGEXP ]'
+     List the `struct symtab' or `struct partial_symtab' structures
+     whose names match REGEXP.  If REGEXP is not given, list them all.
+     The output includes expressions which you can copy into a GDB
+     debugging this one to examine a particular structure in more
+     detail.  For example:
+
+          (gdb) maint info psymtabs dwarf2read
+          { objfile /home/gnu/build/gdb/gdb
+            ((struct objfile *) 0x82e69d0)
+            { psymtab /home/gnu/src/gdb/dwarf2read.c
+              ((struct partial_symtab *) 0x8474b10)
+              readin no
+              fullname (null)
+              text addresses 0x814d3c8 -- 0x8158074
+              globals (* (struct partial_symbol **) 0x8507a08 @ 9)
+              statics (* (struct partial_symbol **) 0x40e95b78 @ 2882)
+              dependencies (none)
+            }
+          }
+          (gdb) maint info symtabs
+          (gdb)
+     We see that there is one partial symbol table whose filename
+     contains the string `dwarf2read', belonging to the `gdb'
+     executable; and we see that GDB has not read in any symtabs yet at
+     all.  If we set a breakpoint on a function, that will cause GDB to
+     read the symtab for the compilation unit containing that function:
+
+          (gdb) break dwarf2_psymtab_to_symtab
+          Breakpoint 1 at 0x814e5da: file /home/gnu/src/gdb/dwarf2read.c,
+          line 1574.
+          (gdb) maint info symtabs
+          { objfile /home/gnu/build/gdb/gdb
+            ((struct objfile *) 0x82e69d0)
+            { symtab /home/gnu/src/gdb/dwarf2read.c
+              ((struct symtab *) 0x86c1f38)
+              dirname (null)
+              fullname (null)
+              blockvector ((struct blockvector *) 0x86c1bd0) (primary)
+              linetable ((struct linetable *) 0x8370fa0)
+              debugformat DWARF 2
+            }
+          }
+          (gdb)
+
+
+File: gdb.info,  Node: Altering,  Next: GDB Files,  Prev: Symbols,  Up: Top
+
+17 Altering Execution
+*********************
+
+Once you think you have found an error in your program, you might want
+to find out for certain whether correcting the apparent error would
+lead to correct results in the rest of the run.  You can find the
+answer by experiment, using the GDB features for altering execution of
+the program.
+
+   For example, you can store new values into variables or memory
+locations, give your program a signal, restart it at a different
+address, or even return prematurely from a function.
+
+* Menu:
+
+* Assignment::                  Assignment to variables
+* Jumping::                     Continuing at a different address
+* Signaling::                   Giving your program a signal
+* Returning::                   Returning from a function
+* Calling::                     Calling your program's functions
+* Patching::                    Patching your program
+
+
+File: gdb.info,  Node: Assignment,  Next: Jumping,  Up: Altering
+
+17.1 Assignment to Variables
+============================
+
+To alter the value of a variable, evaluate an assignment expression.
+*Note Expressions: Expressions.  For example,
+
+     print x=4
+
+stores the value 4 into the variable `x', and then prints the value of
+the assignment expression (which is 4).  *Note Using GDB with Different
+Languages: Languages, for more information on operators in supported
+languages.
+
+   If you are not interested in seeing the value of the assignment, use
+the `set' command instead of the `print' command.  `set' is really the
+same as `print' except that the expression's value is not printed and
+is not put in the value history (*note Value History: Value History.).
+The expression is evaluated only for its effects.
+
+   If the beginning of the argument string of the `set' command appears
+identical to a `set' subcommand, use the `set variable' command instead
+of just `set'.  This command is identical to `set' except for its lack
+of subcommands.  For example, if your program has a variable `width',
+you get an error if you try to set a new value with just `set
+width=13', because GDB has the command `set width':
+
+     (gdb) whatis width
+     type = double
+     (gdb) p width
+     $4 = 13
+     (gdb) set width=47
+     Invalid syntax in expression.
+
+The invalid expression, of course, is `=47'.  In order to actually set
+the program's variable `width', use
+
+     (gdb) set var width=47
+
+   Because the `set' command has many subcommands that can conflict
+with the names of program variables, it is a good idea to use the `set
+variable' command instead of just `set'.  For example, if your program
+has a variable `g', you run into problems if you try to set a new value
+with just `set g=4', because GDB has the command `set gnutarget',
+abbreviated `set g':
+
+     (gdb) whatis g
+     type = double
+     (gdb) p g
+     $1 = 1
+     (gdb) set g=4
+     (gdb) p g
+     $2 = 1
+     (gdb) r
+     The program being debugged has been started already.
+     Start it from the beginning? (y or n) y
+     Starting program: /home/smith/cc_progs/a.out
+     "/home/smith/cc_progs/a.out": can't open to read symbols:
+                                      Invalid bfd target.
+     (gdb) show g
+     The current BFD target is "=4".
+
+The program variable `g' did not change, and you silently set the
+`gnutarget' to an invalid value.  In order to set the variable `g', use
+
+     (gdb) set var g=4
+
+   GDB allows more implicit conversions in assignments than C; you can
+freely store an integer value into a pointer variable or vice versa,
+and you can convert any structure to any other structure that is the
+same length or shorter.
+
+   To store values into arbitrary places in memory, use the `{...}'
+construct to generate a value of specified type at a specified address
+(*note Expressions: Expressions.).  For example, `{int}0x83040' refers
+to memory location `0x83040' as an integer (which implies a certain size
+and representation in memory), and
+
+     set {int}0x83040 = 4
+
+stores the value 4 into that memory location.
+
+
+File: gdb.info,  Node: Jumping,  Next: Signaling,  Prev: Assignment,  Up: Altering
+
+17.2 Continuing at a Different Address
+======================================
+
+Ordinarily, when you continue your program, you do so at the place where
+it stopped, with the `continue' command.  You can instead continue at
+an address of your own choosing, with the following commands:
+
+`jump LINESPEC'
+`jump LOCATION'
+     Resume execution at line LINESPEC or at address given by LOCATION.
+     Execution stops again immediately if there is a breakpoint there.
+     *Note Specify Location::, for a description of the different
+     forms of LINESPEC and LOCATION.  It is common practice to use the
+     `tbreak' command in conjunction with `jump'.  *Note Setting
+     Breakpoints: Set Breaks.
+
+     The `jump' command does not change the current stack frame, or the
+     stack pointer, or the contents of any memory location or any
+     register other than the program counter.  If line LINESPEC is in a
+     different function from the one currently executing, the results
+     may be bizarre if the two functions expect different patterns of
+     arguments or of local variables.  For this reason, the `jump'
+     command requests confirmation if the specified line is not in the
+     function currently executing.  However, even bizarre results are
+     predictable if you are well acquainted with the machine-language
+     code of your program.
+
+   On many systems, you can get much the same effect as the `jump'
+command by storing a new value into the register `$pc'.  The difference
+is that this does not start your program running; it only changes the
+address of where it _will_ run when you continue.  For example,
+
+     set $pc = 0x485
+
+makes the next `continue' command or stepping command execute at
+address `0x485', rather than at the address where your program stopped.
+*Note Continuing and Stepping: Continuing and Stepping.
+
+   The most common occasion to use the `jump' command is to back
+up--perhaps with more breakpoints set--over a portion of a program that
+has already executed, in order to examine its execution in more detail.
+
+
+File: gdb.info,  Node: Signaling,  Next: Returning,  Prev: Jumping,  Up: Altering
+
+17.3 Giving your Program a Signal
+=================================
+
+`signal SIGNAL'
+     Resume execution where your program stopped, but immediately give
+     it the signal SIGNAL.  SIGNAL can be the name or the number of a
+     signal.  For example, on many systems `signal 2' and `signal
+     SIGINT' are both ways of sending an interrupt signal.
+
+     Alternatively, if SIGNAL is zero, continue execution without
+     giving a signal.  This is useful when your program stopped on
+     account of a signal and would ordinary see the signal when resumed
+     with the `continue' command; `signal 0' causes it to resume
+     without a signal.
+
+     `signal' does not repeat when you press <RET> a second time after
+     executing the command.
+
+   Invoking the `signal' command is not the same as invoking the `kill'
+utility from the shell.  Sending a signal with `kill' causes GDB to
+decide what to do with the signal depending on the signal handling
+tables (*note Signals::).  The `signal' command passes the signal
+directly to your program.
+
+
+File: gdb.info,  Node: Returning,  Next: Calling,  Prev: Signaling,  Up: Altering
+
+17.4 Returning from a Function
+==============================
+
+`return'
+`return EXPRESSION'
+     You can cancel execution of a function call with the `return'
+     command.  If you give an EXPRESSION argument, its value is used as
+     the function's return value.
+
+   When you use `return', GDB discards the selected stack frame (and
+all frames within it).  You can think of this as making the discarded
+frame return prematurely.  If you wish to specify a value to be
+returned, give that value as the argument to `return'.
+
+   This pops the selected stack frame (*note Selecting a Frame:
+Selection.), and any other frames inside of it, leaving its caller as
+the innermost remaining frame.  That frame becomes selected.  The
+specified value is stored in the registers used for returning values of
+functions.
+
+   The `return' command does not resume execution; it leaves the
+program stopped in the state that would exist if the function had just
+returned.  In contrast, the `finish' command (*note Continuing and
+Stepping: Continuing and Stepping.) resumes execution until the
+selected stack frame returns naturally.
+
+   GDB needs to know how the EXPRESSION argument should be set for the
+inferior.  The concrete registers assignment depends on the OS ABI and
+the type being returned by the selected stack frame.  For example it is
+common for OS ABI to return floating point values in FPU registers
+while integer values in CPU registers.  Still some ABIs return even
+floating point values in CPU registers.  Larger integer widths (such as
+`long long int') also have specific placement rules.  GDB already knows
+the OS ABI from its current target so it needs to find out also the
+type being returned to make the assignment into the right register(s).
+
+   Normally, the selected stack frame has debug info.  GDB will always
+use the debug info instead of the implicit type of EXPRESSION when the
+debug info is available.  For example, if you type `return -1', and the
+function in the current stack frame is declared to return a `long long
+int', GDB transparently converts the implicit `int' value of -1 into a
+`long long int':
+
+     Breakpoint 1, func () at gdb.base/return-nodebug.c:29
+     29        return 31;
+     (gdb) return -1
+     Make func return now? (y or n) y
+     #0  0x004004f6 in main () at gdb.base/return-nodebug.c:43
+     43        printf ("result=%lld\n", func ());
+     (gdb)
+
+   However, if the selected stack frame does not have a debug info,
+e.g., if the function was compiled without debug info, GDB has to find
+out the type to return from user.  Specifying a different type by
+mistake may set the value in different inferior registers than the
+caller code expects.  For example, typing `return -1' with its implicit
+type `int' would set only a part of a `long long int' result for a
+debug info less function (on 32-bit architectures).  Therefore the user
+is required to specify the return type by an appropriate cast
+explicitly:
+
+     Breakpoint 2, 0x0040050b in func ()
+     (gdb) return -1
+     Return value type not available for selected stack frame.
+     Please use an explicit cast of the value to return.
+     (gdb) return (long long int) -1
+     Make selected stack frame return now? (y or n) y
+     #0  0x00400526 in main ()
+     (gdb)
+
+
+File: gdb.info,  Node: Calling,  Next: Patching,  Prev: Returning,  Up: Altering
+
+17.5 Calling Program Functions
+==============================
+
+`print EXPR'
+     Evaluate the expression EXPR and display the resulting value.
+     EXPR may include calls to functions in the program being debugged.
+
+`call EXPR'
+     Evaluate the expression EXPR without displaying `void' returned
+     values.
+
+     You can use this variant of the `print' command if you want to
+     execute a function from your program that does not return anything
+     (a.k.a. "a void function"), but without cluttering the output with
+     `void' returned values that GDB will otherwise print.  If the
+     result is not void, it is printed and saved in the value history.
+
+   It is possible for the function you call via the `print' or `call'
+command to generate a signal (e.g., if there's a bug in the function,
+or if you passed it incorrect arguments).  What happens in that case is
+controlled by the `set unwindonsignal' command.
+
+   Similarly, with a C++ program it is possible for the function you
+call via the `print' or `call' command to generate an exception that is
+not handled due to the constraints of the dummy frame.  In this case,
+any exception that is raised in the frame, but has an out-of-frame
+exception handler will not be found.  GDB builds a dummy-frame for the
+inferior function call, and the unwinder cannot seek for exception
+handlers outside of this dummy-frame.  What happens in that case is
+controlled by the `set unwind-on-terminating-exception' command.
+
+`set unwindonsignal'
+     Set unwinding of the stack if a signal is received while in a
+     function that GDB called in the program being debugged.  If set to
+     on, GDB unwinds the stack it created for the call and restores the
+     context to what it was before the call.  If set to off (the
+     default), GDB stops in the frame where the signal was received.
+
+`show unwindonsignal'
+     Show the current setting of stack unwinding in the functions
+     called by GDB.
+
+`set unwind-on-terminating-exception'
+     Set unwinding of the stack if a C++ exception is raised, but left
+     unhandled while in a function that GDB called in the program being
+     debugged.  If set to on (the default), GDB unwinds the stack it
+     created for the call and restores the context to what it was before
+     the call.  If set to off, GDB the exception is delivered to the
+     default C++ exception handler and the inferior terminated.
+
+`show unwind-on-terminating-exception'
+     Show the current setting of stack unwinding in the functions
+     called by GDB.
+
+
+   Sometimes, a function you wish to call is actually a "weak alias"
+for another function.  In such case, GDB might not pick up the type
+information, including the types of the function arguments, which
+causes GDB to call the inferior function incorrectly.  As a result, the
+called function will function erroneously and may even crash.  A
+solution to that is to use the name of the aliased function instead.
+
+
+File: gdb.info,  Node: Patching,  Prev: Calling,  Up: Altering
+
+17.6 Patching Programs
+======================
+
+By default, GDB opens the file containing your program's executable
+code (or the corefile) read-only.  This prevents accidental alterations
+to machine code; but it also prevents you from intentionally patching
+your program's binary.
+
+   If you'd like to be able to patch the binary, you can specify that
+explicitly with the `set write' command.  For example, you might want
+to turn on internal debugging flags, or even to make emergency repairs.
+
+`set write on'
+`set write off'
+     If you specify `set write on', GDB opens executable and core files
+     for both reading and writing; if you specify `set write off' (the
+     default), GDB opens them read-only.
+
+     If you have already loaded a file, you must load it again (using
+     the `exec-file' or `core-file' command) after changing `set
+     write', for your new setting to take effect.
+
+`show write'
+     Display whether executable files and core files are opened for
+     writing as well as reading.
+
+
+File: gdb.info,  Node: GDB Files,  Next: Targets,  Prev: Altering,  Up: Top
+
+18 GDB Files
+************
+
+GDB needs to know the file name of the program to be debugged, both in
+order to read its symbol table and in order to start your program.  To
+debug a core dump of a previous run, you must also tell GDB the name of
+the core dump file.
+
+* Menu:
+
+* Files::                       Commands to specify files
+* Separate Debug Files::        Debugging information in separate files
+* Index Files::                 Index files speed up GDB
+* Symbol Errors::               Errors reading symbol files
+* Data Files::                  GDB data files
+
+
+File: gdb.info,  Node: Files,  Next: Separate Debug Files,  Up: GDB Files
+
+18.1 Commands to Specify Files
+==============================
+
+You may want to specify executable and core dump file names.  The usual
+way to do this is at start-up time, using the arguments to GDB's
+start-up commands (*note Getting In and Out of GDB: Invocation.).
+
+   Occasionally it is necessary to change to a different file during a
+GDB session.  Or you may run GDB and forget to specify a file you want
+to use.  Or you are debugging a remote target via `gdbserver' (*note
+file: Server.).  In these situations the GDB commands to specify new
+files are useful.
+
+`file FILENAME'
+     Use FILENAME as the program to be debugged.  It is read for its
+     symbols and for the contents of pure memory.  It is also the
+     program executed when you use the `run' command.  If you do not
+     specify a directory and the file is not found in the GDB working
+     directory, GDB uses the environment variable `PATH' as a list of
+     directories to search, just as the shell does when looking for a
+     program to run.  You can change the value of this variable, for
+     both GDB and your program, using the `path' command.
+
+     You can load unlinked object `.o' files into GDB using the `file'
+     command.  You will not be able to "run" an object file, but you
+     can disassemble functions and inspect variables.  Also, if the
+     underlying BFD functionality supports it, you could use `gdb
+     -write' to patch object files using this technique.  Note that GDB
+     can neither interpret nor modify relocations in this case, so
+     branches and some initialized variables will appear to go to the
+     wrong place.  But this feature is still handy from time to time.
+
+`file'
+     `file' with no argument makes GDB discard any information it has
+     on both executable file and the symbol table.
+
+`exec-file [ FILENAME ]'
+     Specify that the program to be run (but not the symbol table) is
+     found in FILENAME.  GDB searches the environment variable `PATH'
+     if necessary to locate your program.  Omitting FILENAME means to
+     discard information on the executable file.
+
+`symbol-file [ FILENAME ]'
+     Read symbol table information from file FILENAME.  `PATH' is
+     searched when necessary.  Use the `file' command to get both symbol
+     table and program to run from the same file.
+
+     `symbol-file' with no argument clears out GDB information on your
+     program's symbol table.
+
+     The `symbol-file' command causes GDB to forget the contents of
+     some breakpoints and auto-display expressions.  This is because
+     they may contain pointers to the internal data recording symbols
+     and data types, which are part of the old symbol table data being
+     discarded inside GDB.
+
+     `symbol-file' does not repeat if you press <RET> again after
+     executing it once.
+
+     When GDB is configured for a particular environment, it
+     understands debugging information in whatever format is the
+     standard generated for that environment; you may use either a GNU
+     compiler, or other compilers that adhere to the local conventions.
+     Best results are usually obtained from GNU compilers; for example,
+     using `GCC' you can generate debugging information for optimized
+     code.
+
+     For most kinds of object files, with the exception of old SVR3
+     systems using COFF, the `symbol-file' command does not normally
+     read the symbol table in full right away.  Instead, it scans the
+     symbol table quickly to find which source files and which symbols
+     are present.  The details are read later, one source file at a
+     time, as they are needed.
+
+     The purpose of this two-stage reading strategy is to make GDB
+     start up faster.  For the most part, it is invisible except for
+     occasional pauses while the symbol table details for a particular
+     source file are being read.  (The `set verbose' command can turn
+     these pauses into messages if desired.  *Note Optional Warnings
+     and Messages: Messages/Warnings.)
+
+     We have not implemented the two-stage strategy for COFF yet.  When
+     the symbol table is stored in COFF format, `symbol-file' reads the
+     symbol table data in full right away.  Note that "stabs-in-COFF"
+     still does the two-stage strategy, since the debug info is actually
+     in stabs format.
+
+`symbol-file [ -readnow ] FILENAME'
+`file [ -readnow ] FILENAME'
+     You can override the GDB two-stage strategy for reading symbol
+     tables by using the `-readnow' option with any of the commands that
+     load symbol table information, if you want to be sure GDB has the
+     entire symbol table available.
+
+`core-file [FILENAME]'
+`core'
+     Specify the whereabouts of a core dump file to be used as the
+     "contents of memory".  Traditionally, core files contain only some
+     parts of the address space of the process that generated them; GDB
+     can access the executable file itself for other parts.
+
+     `core-file' with no argument specifies that no core file is to be
+     used.
+
+     Note that the core file is ignored when your program is actually
+     running under GDB.  So, if you have been running your program and
+     you wish to debug a core file instead, you must kill the
+     subprocess in which the program is running.  To do this, use the
+     `kill' command (*note Killing the Child Process: Kill Process.).
+
+`add-symbol-file FILENAME ADDRESS'
+`add-symbol-file FILENAME ADDRESS [ -readnow ]'
+`add-symbol-file FILENAME ADDRESS -s SECTION ADDRESS ...'
+     The `add-symbol-file' command reads additional symbol table
+     information from the file FILENAME.  You would use this command
+     when FILENAME has been dynamically loaded (by some other means)
+     into the program that is running.  ADDRESS should be the memory
+     address at which the file has been loaded; GDB cannot figure this
+     out for itself.  You can additionally specify an arbitrary number
+     of `-s SECTION ADDRESS' pairs, to give an explicit section name
+     and base address for that section.  You can specify any ADDRESS as
+     an expression.
+
+     The symbol table of the file FILENAME is added to the symbol table
+     originally read with the `symbol-file' command.  You can use the
+     `add-symbol-file' command any number of times; the new symbol data
+     thus read keeps adding to the old.  To discard all old symbol data
+     instead, use the `symbol-file' command without any arguments.
+
+     Although FILENAME is typically a shared library file, an
+     executable file, or some other object file which has been fully
+     relocated for loading into a process, you can also load symbolic
+     information from relocatable `.o' files, as long as:
+
+        * the file's symbolic information refers only to linker symbols
+          defined in that file, not to symbols defined by other object
+          files,
+
+        * every section the file's symbolic information refers to has
+          actually been loaded into the inferior, as it appears in the
+          file, and
+
+        * you can determine the address at which every section was
+          loaded, and provide these to the `add-symbol-file' command.
+
+     Some embedded operating systems, like Sun Chorus and VxWorks, can
+     load relocatable files into an already running program; such
+     systems typically make the requirements above easy to meet.
+     However, it's important to recognize that many native systems use
+     complex link procedures (`.linkonce' section factoring and C++
+     constructor table assembly, for example) that make the
+     requirements difficult to meet.  In general, one cannot assume
+     that using `add-symbol-file' to read a relocatable object file's
+     symbolic information will have the same effect as linking the
+     relocatable object file into the program in the normal way.
+
+     `add-symbol-file' does not repeat if you press <RET> after using
+     it.
+
+`add-symbol-file-from-memory ADDRESS'
+     Load symbols from the given ADDRESS in a dynamically loaded object
+     file whose image is mapped directly into the inferior's memory.
+     For example, the Linux kernel maps a `syscall DSO' into each
+     process's address space; this DSO provides kernel-specific code for
+     some system calls.  The argument can be any expression whose
+     evaluation yields the address of the file's shared object file
+     header.  For this command to work, you must have used
+     `symbol-file' or `exec-file' commands in advance.
+
+`add-shared-symbol-files LIBRARY-FILE'
+`assf LIBRARY-FILE'
+     The `add-shared-symbol-files' command can currently be used only
+     in the Cygwin build of GDB on MS-Windows OS, where it is an alias
+     for the `dll-symbols' command (*note Cygwin Native::).  GDB
+     automatically looks for shared libraries, however if GDB does not
+     find yours, you can invoke `add-shared-symbol-files'.  It takes
+     one argument: the shared library's file name.  `assf' is a
+     shorthand alias for `add-shared-symbol-files'.
+
+`section SECTION ADDR'
+     The `section' command changes the base address of the named
+     SECTION of the exec file to ADDR.  This can be used if the exec
+     file does not contain section addresses, (such as in the `a.out'
+     format), or when the addresses specified in the file itself are
+     wrong.  Each section must be changed separately.  The `info files'
+     command, described below, lists all the sections and their
+     addresses.
+
+`info files'
+`info target'
+     `info files' and `info target' are synonymous; both print the
+     current target (*note Specifying a Debugging Target: Targets.),
+     including the names of the executable and core dump files
+     currently in use by GDB, and the files from which symbols were
+     loaded.  The command `help target' lists all possible targets
+     rather than current ones.
+
+`maint info sections'
+     Another command that can give you extra information about program
+     sections is `maint info sections'.  In addition to the section
+     information displayed by `info files', this command displays the
+     flags and file offset of each section in the executable and core
+     dump files.  In addition, `maint info sections' provides the
+     following command options (which may be arbitrarily combined):
+
+    `ALLOBJ'
+          Display sections for all loaded object files, including
+          shared libraries.
+
+    `SECTIONS'
+          Display info only for named SECTIONS.
+
+    `SECTION-FLAGS'
+          Display info only for sections for which SECTION-FLAGS are
+          true.  The section flags that GDB currently knows about are:
+         `ALLOC'
+               Section will have space allocated in the process when
+               loaded.  Set for all sections except those containing
+               debug information.
+
+         `LOAD'
+               Section will be loaded from the file into the child
+               process memory.  Set for pre-initialized code and data,
+               clear for `.bss' sections.
+
+         `RELOC'
+               Section needs to be relocated before loading.
+
+         `READONLY'
+               Section cannot be modified by the child process.
+
+         `CODE'
+               Section contains executable code only.
+
+         `DATA'
+               Section contains data only (no executable code).
+
+         `ROM'
+               Section will reside in ROM.
+
+         `CONSTRUCTOR'
+               Section contains data for constructor/destructor lists.
+
+         `HAS_CONTENTS'
+               Section is not empty.
+
+         `NEVER_LOAD'
+               An instruction to the linker to not output the section.
+
+         `COFF_SHARED_LIBRARY'
+               A notification to the linker that the section contains
+               COFF shared library information.
+
+         `IS_COMMON'
+               Section contains common symbols.
+     
+`set trust-readonly-sections on'
+     Tell GDB that readonly sections in your object file really are
+     read-only (i.e. that their contents will not change).  In that
+     case, GDB can fetch values from these sections out of the object
+     file, rather than from the target program.  For some targets
+     (notably embedded ones), this can be a significant enhancement to
+     debugging performance.
+
+     The default is off.
+
+`set trust-readonly-sections off'
+     Tell GDB not to trust readonly sections.  This means that the
+     contents of the section might change while the program is running,
+     and must therefore be fetched from the target when needed.
+
+`show trust-readonly-sections'
+     Show the current setting of trusting readonly sections.
+
+   All file-specifying commands allow both absolute and relative file
+names as arguments.  GDB always converts the file name to an absolute
+file name and remembers it that way.
+
+   GDB supports GNU/Linux, MS-Windows, HP-UX, SunOS, SVr4, Irix, and
+IBM RS/6000 AIX shared libraries.
+
+   On MS-Windows GDB must be linked with the Expat library to support
+shared libraries.  *Note Expat::.
+
+   GDB automatically loads symbol definitions from shared libraries
+when you use the `run' command, or when you examine a core file.
+(Before you issue the `run' command, GDB does not understand references
+to a function in a shared library, however--unless you are debugging a
+core file).
+
+   On HP-UX, if the program loads a library explicitly, GDB
+automatically loads the symbols at the time of the `shl_load' call.
+
+   There are times, however, when you may wish to not automatically load
+symbol definitions from shared libraries, such as when they are
+particularly large or there are many of them.
+
+   To control the automatic loading of shared library symbols, use the
+commands:
+
+`set auto-solib-add MODE'
+     If MODE is `on', symbols from all shared object libraries will be
+     loaded automatically when the inferior begins execution, you
+     attach to an independently started inferior, or when the dynamic
+     linker informs GDB that a new library has been loaded.  If MODE is
+     `off', symbols must be loaded manually, using the `sharedlibrary'
+     command.  The default value is `on'.
+
+     If your program uses lots of shared libraries with debug info that
+     takes large amounts of memory, you can decrease the GDB memory
+     footprint by preventing it from automatically loading the symbols
+     from shared libraries.  To that end, type `set auto-solib-add off'
+     before running the inferior, then load each library whose debug
+     symbols you do need with `sharedlibrary REGEXP', where REGEXP is a
+     regular expression that matches the libraries whose symbols you
+     want to be loaded.
+
+`show auto-solib-add'
+     Display the current autoloading mode.
+
+   To explicitly load shared library symbols, use the `sharedlibrary'
+command:
+
+`info share REGEX'
+`info sharedlibrary REGEX'
+     Print the names of the shared libraries which are currently loaded
+     that match REGEX.  If REGEX is omitted then print all shared
+     libraries that are loaded.
+
+`sharedlibrary REGEX'
+`share REGEX'
+     Load shared object library symbols for files matching a Unix
+     regular expression.  As with files loaded automatically, it only
+     loads shared libraries required by your program for a core file or
+     after typing `run'.  If REGEX is omitted all shared libraries
+     required by your program are loaded.
+
+`nosharedlibrary'
+     Unload all shared object library symbols.  This discards all
+     symbols that have been loaded from all shared libraries.  Symbols
+     from shared libraries that were loaded by explicit user requests
+     are not discarded.
+
+   Sometimes you may wish that GDB stops and gives you control when any
+of shared library events happen.  The best way to do this is to use
+`catch load' and `catch unload' (*note Set Catchpoints::).
+
+   GDB also supports the the `set stop-on-solib-events' command for
+this.  This command exists for historical reasons.  It is less useful
+than setting a catchpoint, because it does not allow for conditions or
+commands as a catchpoint does.
+
+`set stop-on-solib-events'
+     This command controls whether GDB should give you control when the
+     dynamic linker notifies it about some shared library event.  The
+     most common event of interest is loading or unloading of a new
+     shared library.
+
+`show stop-on-solib-events'
+     Show whether GDB stops and gives you control when shared library
+     events happen.
+
+   Shared libraries are also supported in many cross or remote debugging
+configurations.  GDB needs to have access to the target's libraries;
+this can be accomplished either by providing copies of the libraries on
+the host system, or by asking GDB to automatically retrieve the
+libraries from the target.  If copies of the target libraries are
+provided, they need to be the same as the target libraries, although the
+copies on the target can be stripped as long as the copies on the host
+are not.
+
+   For remote debugging, you need to tell GDB where the target
+libraries are, so that it can load the correct copies--otherwise, it
+may try to load the host's libraries.  GDB has two variables to specify
+the search directories for target libraries.
+
+`set sysroot PATH'
+     Use PATH as the system root for the program being debugged.  Any
+     absolute shared library paths will be prefixed with PATH; many
+     runtime loaders store the absolute paths to the shared library in
+     the target program's memory.  If you use `set sysroot' to find
+     shared libraries, they need to be laid out in the same way that
+     they are on the target, with e.g. a `/lib' and `/usr/lib' hierarchy
+     under PATH.
+
+     If PATH starts with the sequence `remote:', GDB will retrieve the
+     target libraries from the remote system.  This is only supported
+     when using a remote target that supports the `remote get' command
+     (*note Sending files to a remote system: File Transfer.).  The
+     part of PATH following the initial `remote:' (if present) is used
+     as system root prefix on the remote file system.  (1)
+
+     For targets with an MS-DOS based filesystem, such as MS-Windows and
+     SymbianOS, GDB tries prefixing a few variants of the target
+     absolute file name with PATH.  But first, on Unix hosts, GDB
+     converts all backslash directory separators into forward slashes,
+     because the backslash is not a directory separator on Unix:
+
+            c:\foo\bar.dll => c:/foo/bar.dll
+
+     Then, GDB attempts prefixing the target file name with PATH, and
+     looks for the resulting file name in the host file system:
+
+            c:/foo/bar.dll => /path/to/sysroot/c:/foo/bar.dll
+
+     If that does not find the shared library, GDB tries removing the
+     `:' character from the drive spec, both for convenience, and, for
+     the case of the host file system not supporting file names with
+     colons:
+
+            c:/foo/bar.dll => /path/to/sysroot/c/foo/bar.dll
+
+     This makes it possible to have a system root that mirrors a target
+     with more than one drive.  E.g., you may want to setup your local
+     copies of the target system shared libraries like so (note `c' vs
+     `z'):
+
+           `/path/to/sysroot/c/sys/bin/foo.dll'
+           `/path/to/sysroot/c/sys/bin/bar.dll'
+           `/path/to/sysroot/z/sys/bin/bar.dll'
+
+     and point the system root at `/path/to/sysroot', so that GDB can
+     find the correct copies of both `c:\sys\bin\foo.dll', and
+     `z:\sys\bin\bar.dll'.
+
+     If that still does not find the shared library, GDB tries removing
+     the whole drive spec from the target file name:
+
+            c:/foo/bar.dll => /path/to/sysroot/foo/bar.dll
+
+     This last lookup makes it possible to not care about the drive
+     name, if you don't want or need to.
+
+     The `set solib-absolute-prefix' command is an alias for `set
+     sysroot'.
+
+     You can set the default system root by using the configure-time
+     `--with-sysroot' option.  If the system root is inside GDB's
+     configured binary prefix (set with `--prefix' or `--exec-prefix'),
+     then the default system root will be updated automatically if the
+     installed GDB is moved to a new location.
+
+`show sysroot'
+     Display the current shared library prefix.
+
+`set solib-search-path PATH'
+     If this variable is set, PATH is a colon-separated list of
+     directories to search for shared libraries.  `solib-search-path'
+     is used after `sysroot' fails to locate the library, or if the
+     path to the library is relative instead of absolute.  If you want
+     to use `solib-search-path' instead of `sysroot', be sure to set
+     `sysroot' to a nonexistent directory to prevent GDB from finding
+     your host's libraries.  `sysroot' is preferred; setting it to a
+     nonexistent directory may interfere with automatic loading of
+     shared library symbols.
+
+`show solib-search-path'
+     Display the current shared library search path.
+
+`set target-file-system-kind KIND'
+     Set assumed file system kind for target reported file names.
+
+     Shared library file names as reported by the target system may not
+     make sense as is on the system GDB is running on.  For example,
+     when remote debugging a target that has MS-DOS based file system
+     semantics, from a Unix host, the target may be reporting to GDB a
+     list of loaded shared libraries with file names such as
+     `c:\Windows\kernel32.dll'.  On Unix hosts, there's no concept of
+     drive letters, so the `c:\' prefix is not normally understood as
+     indicating an absolute file name, and neither is the backslash
+     normally considered a directory separator character.  In that case,
+     the native file system would interpret this whole absolute file
+     name as a relative file name with no directory components.  This
+     would make it impossible to point GDB at a copy of the remote
+     target's shared libraries on the host using `set sysroot', and
+     impractical with `set solib-search-path'.  Setting
+     `target-file-system-kind' to `dos-based' tells GDB to interpret
+     such file names similarly to how the target would, and to map them
+     to file names valid on GDB's native file system semantics.  The
+     value of KIND can be `"auto"', in addition to one of the supported
+     file system kinds.  In that case, GDB tries to determine the
+     appropriate file system variant based on the current target's
+     operating system (*note Configuring the Current ABI: ABI.).  The
+     supported file system settings are:
+
+    `unix'
+          Instruct GDB to assume the target file system is of Unix
+          kind.  Only file names starting the forward slash (`/')
+          character are considered absolute, and the directory
+          separator character is also the forward slash.
+
+    `dos-based'
+          Instruct GDB to assume the target file system is DOS based.
+          File names starting with either a forward slash, or a drive
+          letter followed by a colon (e.g., `c:'), are considered
+          absolute, and both the slash (`/') and the backslash (`\\')
+          characters are considered directory separators.
+
+    `auto'
+          Instruct GDB to use the file system kind associated with the
+          target operating system (*note Configuring the Current ABI:
+          ABI.).  This is the default.
+
+   When processing file names provided by the user, GDB frequently
+needs to compare them to the file names recorded in the program's debug
+info.  Normally, GDB compares just the "base names" of the files as
+strings, which is reasonably fast even for very large programs.  (The
+base name of a file is the last portion of its name, after stripping
+all the leading directories.)  This shortcut in comparison is based
+upon the assumption that files cannot have more than one base name.
+This is usually true, but references to files that use symlinks or
+similar filesystem facilities violate that assumption.  If your program
+records files using such facilities, or if you provide file names to
+GDB using symlinks etc., you can set `basenames-may-differ' to `true'
+to instruct GDB to completely canonicalize each pair of file names it
+needs to compare.  This will make file-name comparisons accurate, but
+at a price of a significant slowdown.
+
+`set basenames-may-differ'
+     Set whether a source file may have multiple base names.
+
+`show basenames-may-differ'
+     Show whether a source file may have multiple base names.
+
+   ---------- Footnotes ----------
+
+   (1) If you want to specify a local system root using a directory
+that happens to be named `remote:', you need to use some equivalent
+variant of the name like `./remote:'.
+
+
+File: gdb.info,  Node: Separate Debug Files,  Next: Index Files,  Prev: Files,  Up: GDB Files
+
+18.2 Debugging Information in Separate Files
+============================================
+
+GDB allows you to put a program's debugging information in a file
+separate from the executable itself, in a way that allows GDB to find
+and load the debugging information automatically.  Since debugging
+information can be very large--sometimes larger than the executable
+code itself--some systems distribute debugging information for their
+executables in separate files, which users can install only when they
+need to debug a problem.
+
+   GDB supports two ways of specifying the separate debug info file:
+
+   * The executable contains a "debug link" that specifies the name of
+     the separate debug info file.  The separate debug file's name is
+     usually `EXECUTABLE.debug', where EXECUTABLE is the name of the
+     corresponding executable file without leading directories (e.g.,
+     `ls.debug' for `/usr/bin/ls').  In addition, the debug link
+     specifies a 32-bit "Cyclic Redundancy Check" (CRC) checksum for
+     the debug file, which GDB uses to validate that the executable and
+     the debug file came from the same build.
+
+   * The executable contains a "build ID", a unique bit string that is
+     also present in the corresponding debug info file.  (This is
+     supported only on some operating systems, notably those which use
+     the ELF format for binary files and the GNU Binutils.)  For more
+     details about this feature, see the description of the `--build-id'
+     command-line option in *Note Command Line Options:
+     (ld.info)Options.  The debug info file's name is not specified
+     explicitly by the build ID, but can be computed from the build ID,
+     see below.
+
+   Depending on the way the debug info file is specified, GDB uses two
+different methods of looking for the debug file:
+
+   * For the "debug link" method, GDB looks up the named file in the
+     directory of the executable file, then in a subdirectory of that
+     directory named `.debug', and finally under each one of the global
+     debug directories, in a subdirectory whose name is identical to
+     the leading directories of the executable's absolute file name.
+
+   * For the "build ID" method, GDB looks in the `.build-id'
+     subdirectory of each one of the global debug directories for a
+     file named `NN/NNNNNNNN.debug', where NN are the first 2 hex
+     characters of the build ID bit string, and NNNNNNNN are the rest
+     of the bit string.  (Real build ID strings are 32 or more hex
+     characters, not 10.)
+
+   So, for example, suppose you ask GDB to debug `/usr/bin/ls', which
+has a debug link that specifies the file `ls.debug', and a build ID
+whose value in hex is `abcdef1234'.  If the list of the global debug
+directories includes `/usr/lib/debug', then GDB will look for the
+following debug information files, in the indicated order:
+
+   - `/usr/lib/debug/.build-id/ab/cdef1234.debug'
+
+   - `/usr/bin/ls.debug'
+
+   - `/usr/bin/.debug/ls.debug'
+
+   - `/usr/lib/debug/usr/bin/ls.debug'.
+
+   Global debugging info directories default to what is set by GDB
+configure option `--with-separate-debug-dir'.  During GDB run you can
+also set the global debugging info directories, and view the list GDB
+is currently using.
+
+`set debug-file-directory DIRECTORIES'
+     Set the directories which GDB searches for separate debugging
+     information files to DIRECTORY.  Multiple path components can be
+     set concatenating them by a path separator.
+
+`show debug-file-directory'
+     Show the directories GDB searches for separate debugging
+     information files.
+
+
+   A debug link is a special section of the executable file named
+`.gnu_debuglink'.  The section must contain:
+
+   * A filename, with any leading directory components removed,
+     followed by a zero byte,
+
+   * zero to three bytes of padding, as needed to reach the next
+     four-byte boundary within the section, and
+
+   * a four-byte CRC checksum, stored in the same endianness used for
+     the executable file itself.  The checksum is computed on the
+     debugging information file's full contents by the function given
+     below, passing zero as the CRC argument.
+
+   Any executable file format can carry a debug link, as long as it can
+contain a section named `.gnu_debuglink' with the contents described
+above.
+
+   The build ID is a special section in the executable file (and in
+other ELF binary files that GDB may consider).  This section is often
+named `.note.gnu.build-id', but that name is not mandatory.  It
+contains unique identification for the built files--the ID remains the
+same across multiple builds of the same build tree.  The default
+algorithm SHA1 produces 160 bits (40 hexadecimal characters) of the
+content for the build ID string.  The same section with an identical
+value is present in the original built binary with symbols, in its
+stripped variant, and in the separate debugging information file.
+
+   The debugging information file itself should be an ordinary
+executable, containing a full set of linker symbols, sections, and
+debugging information.  The sections of the debugging information file
+should have the same names, addresses, and sizes as the original file,
+but they need not contain any data--much like a `.bss' section in an
+ordinary executable.
+
+   The GNU binary utilities (Binutils) package includes the `objcopy'
+utility that can produce the separated executable / debugging
+information file pairs using the following commands:
+
+     objcopy --only-keep-debug foo foo.debug
+     strip -g foo
+
+These commands remove the debugging information from the executable
+file `foo' and place it in the file `foo.debug'.  You can use the
+first, second or both methods to link the two files:
+
+   * The debug link method needs the following additional command to
+     also leave behind a debug link in `foo':
+
+          objcopy --add-gnu-debuglink=foo.debug foo
+
+     Ulrich Drepper's `elfutils' package, starting with version 0.53,
+     contains a version of the `strip' command such that the command
+     `strip foo -f foo.debug' has the same functionality as the two
+     `objcopy' commands and the `ln -s' command above, together.
+
+   * Build ID gets embedded into the main executable using `ld
+     --build-id' or the GCC counterpart `gcc -Wl,--build-id'.  Build ID
+     support plus compatibility fixes for debug files separation are
+     present in GNU binary utilities (Binutils) package since version
+     2.18.
+
+The CRC used in `.gnu_debuglink' is the CRC-32 defined in IEEE 802.3
+using the polynomial:
+
+      x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11
+      + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1
+
+   The function is computed byte at a time, taking the least
+significant bit of each byte first.  The initial pattern `0xffffffff'
+is used, to ensure leading zeros affect the CRC and the final result is
+inverted to ensure trailing zeros also affect the CRC.
+
+   _Note:_ This is the same CRC polynomial as used in handling the
+"Remote Serial Protocol" `qCRC' packet (*note GDB Remote Serial
+Protocol: Remote Protocol.).  However in the case of the Remote Serial
+Protocol, the CRC is computed _most_ significant bit first, and the
+result is not inverted, so trailing zeros have no effect on the CRC
+value.
+
+   To complete the description, we show below the code of the function
+which produces the CRC used in `.gnu_debuglink'.  Inverting the
+initially supplied `crc' argument means that an initial call to this
+function passing in zero will start computing the CRC using
+`0xffffffff'.
+
+     unsigned long
+     gnu_debuglink_crc32 (unsigned long crc,
+                          unsigned char *buf, size_t len)
+     {
+       static const unsigned long crc32_table[256] =
+         {
+           0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
+           0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
+           0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
+           0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
+           0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
+           0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+           0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
+           0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
+           0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
+           0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
+           0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
+           0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+           0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
+           0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
+           0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
+           0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+           0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
+           0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+           0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
+           0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
+           0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
+           0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
+           0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
+           0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+           0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
+           0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
+           0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
+           0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
+           0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
+           0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+           0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
+           0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+           0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
+           0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
+           0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
+           0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+           0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
+           0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
+           0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
+           0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+           0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
+           0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+           0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
+           0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
+           0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
+           0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
+           0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
+           0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+           0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
+           0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
+           0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
+           0x2d02ef8d
+         };
+       unsigned char *end;
+
+       crc = ~crc & 0xffffffff;
+       for (end = buf + len; buf < end; ++buf)
+         crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8);
+       return ~crc & 0xffffffff;
+     }
+
+This computation does not apply to the "build ID" method.
+
+
+File: gdb.info,  Node: Index Files,  Next: Symbol Errors,  Prev: Separate Debug Files,  Up: GDB Files
+
+18.3 Index Files Speed Up GDB
+=============================
+
+When GDB finds a symbol file, it scans the symbols in the file in order
+to construct an internal symbol table.  This lets most GDB operations
+work quickly--at the cost of a delay early on.  For large programs,
+this delay can be quite lengthy, so GDB provides a way to build an
+index, which speeds up startup.
+
+   The index is stored as a section in the symbol file.  GDB can write
+the index to a file, then you can put it into the symbol file using
+`objcopy'.
+
+   To create an index file, use the `save gdb-index' command:
+
+`save gdb-index DIRECTORY'
+     Create an index file for each symbol file currently known by GDB.
+     Each file is named after its corresponding symbol file, with
+     `.gdb-index' appended, and is written into the given DIRECTORY.
+
+   Once you have created an index file you can merge it into your symbol
+file, here named `symfile', using `objcopy':
+
+     $ objcopy --add-section .gdb_index=symfile.gdb-index \
+         --set-section-flags .gdb_index=readonly symfile symfile
+
+   GDB will normally ignore older versions of `.gdb_index' sections
+that have been deprecated.  Usually they are deprecated because they
+are missing a new feature or have performance issues.  To tell GDB to
+use a deprecated index section anyway specify `set
+use-deprecated-index-sections on'.  The default is `off'.  This can
+speed up startup, but may result in some functionality being lost.
+*Note Index Section Format::.
+
+   _Warning:_ Setting `use-deprecated-index-sections' to `on' must be
+done before gdb reads the file.  The following will not work:
+
+     $ gdb -ex "set use-deprecated-index-sections on" <program>
+
+   Instead you must do, for example,
+
+     $ gdb -iex "set use-deprecated-index-sections on" <program>
+
+   There are currently some limitation on indices.  They only work when
+for DWARF debugging information, not stabs.  And, they do not currently
+work for programs using Ada.
+
diff --git a/gdb/doc/gdb.info-3 b/gdb/doc/gdb.info-3
new file mode 100644
index 0000000..5a20e5a
--- /dev/null
+++ b/gdb/doc/gdb.info-3
@@ -0,0 +1,7604 @@
+This is gdb.info, produced by makeinfo version 4.8 from ./gdb.texinfo.
+
+INFO-DIR-SECTION Software development
+START-INFO-DIR-ENTRY
+* Gdb: (gdb).                     The GNU debugger.
+END-INFO-DIR-ENTRY
+
+   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+2010 2011, 2012 Free Software Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "Free Software" and "Free Software Needs Free
+Documentation", with the Front-Cover Texts being "A GNU Manual," and
+with the Back-Cover Texts as in (a) below.
+
+   (a) The FSF's Back-Cover Text is: "You are free to copy and modify
+this GNU Manual.  Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom."
+
+   This file documents the GNU debugger GDB.
+
+   This is the Tenth Edition, of `Debugging with GDB: the GNU
+Source-Level Debugger' for GDB (GDB) Version 7.5.
+
+   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+2010 2011, 2012 Free Software Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "Free Software" and "Free Software Needs Free
+Documentation", with the Front-Cover Texts being "A GNU Manual," and
+with the Back-Cover Texts as in (a) below.
+
+   (a) The FSF's Back-Cover Text is: "You are free to copy and modify
+this GNU Manual.  Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom."
+
+
+File: gdb.info,  Node: Symbol Errors,  Next: Data Files,  Prev: Index Files,  Up: GDB Files
+
+18.4 Errors Reading Symbol Files
+================================
+
+While reading a symbol file, GDB occasionally encounters problems, such
+as symbol types it does not recognize, or known bugs in compiler
+output.  By default, GDB does not notify you of such problems, since
+they are relatively common and primarily of interest to people
+debugging compilers.  If you are interested in seeing information about
+ill-constructed symbol tables, you can either ask GDB to print only one
+message about each such type of problem, no matter how many times the
+problem occurs; or you can ask GDB to print more messages, to see how
+many times the problems occur, with the `set complaints' command (*note
+Optional Warnings and Messages: Messages/Warnings.).
+
+   The messages currently printed, and their meanings, include:
+
+`inner block not inside outer block in SYMBOL'
+     The symbol information shows where symbol scopes begin and end
+     (such as at the start of a function or a block of statements).
+     This error indicates that an inner scope block is not fully
+     contained in its outer scope blocks.
+
+     GDB circumvents the problem by treating the inner block as if it
+     had the same scope as the outer block.  In the error message,
+     SYMBOL may be shown as "`(don't know)'" if the outer block is not a
+     function.
+
+`block at ADDRESS out of order'
+     The symbol information for symbol scope blocks should occur in
+     order of increasing addresses.  This error indicates that it does
+     not do so.
+
+     GDB does not circumvent this problem, and has trouble locating
+     symbols in the source file whose symbols it is reading.  (You can
+     often determine what source file is affected by specifying `set
+     verbose on'.  *Note Optional Warnings and Messages:
+     Messages/Warnings.)
+
+`bad block start address patched'
+     The symbol information for a symbol scope block has a start address
+     smaller than the address of the preceding source line.  This is
+     known to occur in the SunOS 4.1.1 (and earlier) C compiler.
+
+     GDB circumvents the problem by treating the symbol scope block as
+     starting on the previous source line.
+
+`bad string table offset in symbol N'
+     Symbol number N contains a pointer into the string table which is
+     larger than the size of the string table.
+
+     GDB circumvents the problem by considering the symbol to have the
+     name `foo', which may cause other problems if many symbols end up
+     with this name.
+
+`unknown symbol type `0xNN''
+     The symbol information contains new data types that GDB does not
+     yet know how to read.  `0xNN' is the symbol type of the
+     uncomprehended information, in hexadecimal.
+
+     GDB circumvents the error by ignoring this symbol information.
+     This usually allows you to debug your program, though certain
+     symbols are not accessible.  If you encounter such a problem and
+     feel like debugging it, you can debug `gdb' with itself, breakpoint
+     on `complain', then go up to the function `read_dbx_symtab' and
+     examine `*bufp' to see the symbol.
+
+`stub type has NULL name'
+     GDB could not find the full definition for a struct or class.
+
+`const/volatile indicator missing (ok if using g++ v1.x), got...'
+     The symbol information for a C++ member function is missing some
+     information that recent versions of the compiler should have
+     output for it.
+
+`info mismatch between compiler and debugger'
+     GDB could not parse a type specification output by the compiler.
+
+
+
+File: gdb.info,  Node: Data Files,  Prev: Symbol Errors,  Up: GDB Files
+
+18.5 GDB Data Files
+===================
+
+GDB will sometimes read an auxiliary data file.  These files are kept
+in a directory known as the "data directory".
+
+   You can set the data directory's name, and view the name GDB is
+currently using.
+
+`set data-directory DIRECTORY'
+     Set the directory which GDB searches for auxiliary data files to
+     DIRECTORY.
+
+`show data-directory'
+     Show the directory GDB searches for auxiliary data files.
+
+   You can set the default data directory by using the configure-time
+`--with-gdb-datadir' option.  If the data directory is inside GDB's
+configured binary prefix (set with `--prefix' or `--exec-prefix'), then
+the default data directory will be updated automatically if the
+installed GDB is moved to a new location.
+
+   The data directory may also be specified with the `--data-directory'
+command line option.  *Note Mode Options::.
+
+
+File: gdb.info,  Node: Targets,  Next: Remote Debugging,  Prev: GDB Files,  Up: Top
+
+19 Specifying a Debugging Target
+********************************
+
+A "target" is the execution environment occupied by your program.
+
+   Often, GDB runs in the same host environment as your program; in
+that case, the debugging target is specified as a side effect when you
+use the `file' or `core' commands.  When you need more flexibility--for
+example, running GDB on a physically separate host, or controlling a
+standalone system over a serial port or a realtime system over a TCP/IP
+connection--you can use the `target' command to specify one of the
+target types configured for GDB (*note Commands for Managing Targets:
+Target Commands.).
+
+   It is possible to build GDB for several different "target
+architectures".  When GDB is built like that, you can choose one of the
+available architectures with the `set architecture' command.
+
+`set architecture ARCH'
+     This command sets the current target architecture to ARCH.  The
+     value of ARCH can be `"auto"', in addition to one of the supported
+     architectures.
+
+`show architecture'
+     Show the current target architecture.
+
+`set processor'
+`processor'
+     These are alias commands for, respectively, `set architecture' and
+     `show architecture'.
+
+* Menu:
+
+* Active Targets::              Active targets
+* Target Commands::             Commands for managing targets
+* Byte Order::                  Choosing target byte order
+
+
+File: gdb.info,  Node: Active Targets,  Next: Target Commands,  Up: Targets
+
+19.1 Active Targets
+===================
+
+There are multiple classes of targets such as: processes, executable
+files or recording sessions.  Core files belong to the process class,
+making core file and process mutually exclusive.  Otherwise, GDB can
+work concurrently on multiple active targets, one in each class.  This
+allows you to (for example) start a process and inspect its activity,
+while still having access to the executable file after the process
+finishes.  Or if you start process recording (*note Reverse
+Execution::) and `reverse-step' there, you are presented a virtual
+layer of the recording target, while the process target remains stopped
+at the chronologically last point of the process execution.
+
+   Use the `core-file' and `exec-file' commands to select a new core
+file or executable target (*note Commands to Specify Files: Files.).  To
+specify as a target a process that is already running, use the `attach'
+command (*note Debugging an Already-running Process: Attach.).
+
+
+File: gdb.info,  Node: Target Commands,  Next: Byte Order,  Prev: Active Targets,  Up: Targets
+
+19.2 Commands for Managing Targets
+==================================
+
+`target TYPE PARAMETERS'
+     Connects the GDB host environment to a target machine or process.
+     A target is typically a protocol for talking to debugging
+     facilities.  You use the argument TYPE to specify the type or
+     protocol of the target machine.
+
+     Further PARAMETERS are interpreted by the target protocol, but
+     typically include things like device names or host names to connect
+     with, process numbers, and baud rates.
+
+     The `target' command does not repeat if you press <RET> again
+     after executing the command.
+
+`help target'
+     Displays the names of all targets available.  To display targets
+     currently selected, use either `info target' or `info files'
+     (*note Commands to Specify Files: Files.).
+
+`help target NAME'
+     Describe a particular target, including any parameters necessary to
+     select it.
+
+`set gnutarget ARGS'
+     GDB uses its own library BFD to read your files.  GDB knows
+     whether it is reading an "executable", a "core", or a ".o" file;
+     however, you can specify the file format with the `set gnutarget'
+     command.  Unlike most `target' commands, with `gnutarget' the
+     `target' refers to a program, not a machine.
+
+          _Warning:_ To specify a file format with `set gnutarget', you
+          must know the actual BFD name.
+
+     *Note Commands to Specify Files: Files.
+
+`show gnutarget'
+     Use the `show gnutarget' command to display what file format
+     `gnutarget' is set to read.  If you have not set `gnutarget', GDB
+     will determine the file format for each file automatically, and
+     `show gnutarget' displays `The current BDF target is "auto"'.
+
+   Here are some common targets (available, or not, depending on the GDB
+configuration):
+
+`target exec PROGRAM'
+     An executable file.  `target exec PROGRAM' is the same as
+     `exec-file PROGRAM'.
+
+`target core FILENAME'
+     A core dump file.  `target core FILENAME' is the same as
+     `core-file FILENAME'.
+
+`target remote MEDIUM'
+     A remote system connected to GDB via a serial line or network
+     connection.  This command tells GDB to use its own remote protocol
+     over MEDIUM for debugging.  *Note Remote Debugging::.
+
+     For example, if you have a board connected to `/dev/ttya' on the
+     machine running GDB, you could say:
+
+          target remote /dev/ttya
+
+     `target remote' supports the `load' command.  This is only useful
+     if you have some other way of getting the stub to the target
+     system, and you can put it somewhere in memory where it won't get
+     clobbered by the download.
+
+`target sim [SIMARGS] ...'
+     Builtin CPU simulator.  GDB includes simulators for most
+     architectures.  In general,
+                  target sim
+                  load
+                  run
+     works; however, you cannot assume that a specific memory map,
+     device drivers, or even basic I/O is available, although some
+     simulators do provide these.  For info about any
+     processor-specific simulator details, see the appropriate section
+     in *Note Embedded Processors: Embedded Processors.
+
+
+   Some configurations may include these targets as well:
+
+`target nrom DEV'
+     NetROM ROM emulator.  This target only supports downloading.
+
+
+   Different targets are available on different configurations of GDB;
+your configuration may have more or fewer targets.
+
+   Many remote targets require you to download the executable's code
+once you've successfully established a connection.  You may wish to
+control various aspects of this process.
+
+`set hash'
+     This command controls whether a hash mark `#' is displayed while
+     downloading a file to the remote monitor.  If on, a hash mark is
+     displayed after each S-record is successfully downloaded to the
+     monitor.
+
+`show hash'
+     Show the current status of displaying the hash mark.
+
+`set debug monitor'
+     Enable or disable display of communications messages between GDB
+     and the remote monitor.
+
+`show debug monitor'
+     Show the current status of displaying communications between GDB
+     and the remote monitor.
+
+`load FILENAME'
+     Depending on what remote debugging facilities are configured into
+     GDB, the `load' command may be available.  Where it exists, it is
+     meant to make FILENAME (an executable) available for debugging on
+     the remote system--by downloading, or dynamic linking, for example.
+     `load' also records the FILENAME symbol table in GDB, like the
+     `add-symbol-file' command.
+
+     If your GDB does not have a `load' command, attempting to execute
+     it gets the error message "`You can't do that when your target is
+     ...'"
+
+     The file is loaded at whatever address is specified in the
+     executable.  For some object file formats, you can specify the
+     load address when you link the program; for other formats, like
+     a.out, the object file format specifies a fixed address.
+
+     Depending on the remote side capabilities, GDB may be able to load
+     programs into flash memory.
+
+     `load' does not repeat if you press <RET> again after using it.
+
+
+File: gdb.info,  Node: Byte Order,  Prev: Target Commands,  Up: Targets
+
+19.3 Choosing Target Byte Order
+===============================
+
+Some types of processors, such as the MIPS, PowerPC, and Renesas SH,
+offer the ability to run either big-endian or little-endian byte
+orders.  Usually the executable or symbol will include a bit to
+designate the endian-ness, and you will not need to worry about which
+to use.  However, you may still find it useful to adjust GDB's idea of
+processor endian-ness manually.
+
+`set endian big'
+     Instruct GDB to assume the target is big-endian.
+
+`set endian little'
+     Instruct GDB to assume the target is little-endian.
+
+`set endian auto'
+     Instruct GDB to use the byte order associated with the executable.
+
+`show endian'
+     Display GDB's current idea of the target byte order.
+
+
+   Note that these commands merely adjust interpretation of symbolic
+data on the host, and that they have absolutely no effect on the target
+system.
+
+
+File: gdb.info,  Node: Remote Debugging,  Next: Configurations,  Prev: Targets,  Up: Top
+
+20 Debugging Remote Programs
+****************************
+
+If you are trying to debug a program running on a machine that cannot
+run GDB in the usual way, it is often useful to use remote debugging.
+For example, you might use remote debugging on an operating system
+kernel, or on a small system which does not have a general purpose
+operating system powerful enough to run a full-featured debugger.
+
+   Some configurations of GDB have special serial or TCP/IP interfaces
+to make this work with particular debugging targets.  In addition, GDB
+comes with a generic serial protocol (specific to GDB, but not specific
+to any particular target system) which you can use if you write the
+remote stubs--the code that runs on the remote system to communicate
+with GDB.
+
+   Other remote targets may be available in your configuration of GDB;
+use `help target' to list them.
+
+* Menu:
+
+* Connecting::                  Connecting to a remote target
+* File Transfer::               Sending files to a remote system
+* Server::	                Using the gdbserver program
+* Remote Configuration::        Remote configuration
+* Remote Stub::                 Implementing a remote stub
+
+
+File: gdb.info,  Node: Connecting,  Next: File Transfer,  Up: Remote Debugging
+
+20.1 Connecting to a Remote Target
+==================================
+
+On the GDB host machine, you will need an unstripped copy of your
+program, since GDB needs symbol and debugging information.  Start up
+GDB as usual, using the name of the local copy of your program as the
+first argument.
+
+   GDB can communicate with the target over a serial line, or over an
+IP network using TCP or UDP.  In each case, GDB uses the same protocol
+for debugging your program; only the medium carrying the debugging
+packets varies.  The `target remote' command establishes a connection
+to the target.  Its arguments indicate which medium to use:
+
+`target remote SERIAL-DEVICE'
+     Use SERIAL-DEVICE to communicate with the target.  For example, to
+     use a serial line connected to the device named `/dev/ttyb':
+
+          target remote /dev/ttyb
+
+     If you're using a serial line, you may want to give GDB the
+     `--baud' option, or use the `set remotebaud' command (*note set
+     remotebaud: Remote Configuration.) before the `target' command.
+
+`target remote `HOST:PORT''
+`target remote `tcp:HOST:PORT''
+     Debug using a TCP connection to PORT on HOST.  The HOST may be
+     either a host name or a numeric IP address; PORT must be a decimal
+     number.  The HOST could be the target machine itself, if it is
+     directly connected to the net, or it might be a terminal server
+     which in turn has a serial line to the target.
+
+     For example, to connect to port 2828 on a terminal server named
+     `manyfarms':
+
+          target remote manyfarms:2828
+
+     If your remote target is actually running on the same machine as
+     your debugger session (e.g. a simulator for your target running on
+     the same host), you can omit the hostname.  For example, to
+     connect to port 1234 on your local machine:
+
+          target remote :1234
+     Note that the colon is still required here.
+
+`target remote `udp:HOST:PORT''
+     Debug using UDP packets to PORT on HOST.  For example, to connect
+     to UDP port 2828 on a terminal server named `manyfarms':
+
+          target remote udp:manyfarms:2828
+
+     When using a UDP connection for remote debugging, you should keep
+     in mind that the `U' stands for "Unreliable".  UDP can silently
+     drop packets on busy or unreliable networks, which will cause
+     havoc with your debugging session.
+
+`target remote | COMMAND'
+     Run COMMAND in the background and communicate with it using a
+     pipe.  The COMMAND is a shell command, to be parsed and expanded
+     by the system's command shell, `/bin/sh'; it should expect remote
+     protocol packets on its standard input, and send replies on its
+     standard output.  You could use this to run a stand-alone simulator
+     that speaks the remote debugging protocol, to make net connections
+     using programs like `ssh', or for other similar tricks.
+
+     If COMMAND closes its standard output (perhaps by exiting), GDB
+     will try to send it a `SIGTERM' signal.  (If the program has
+     already exited, this will have no effect.)
+
+
+   Once the connection has been established, you can use all the usual
+commands to examine and change data.  The remote program is already
+running; you can use `step' and `continue', and you do not need to use
+`run'.
+
+   Whenever GDB is waiting for the remote program, if you type the
+interrupt character (often `Ctrl-c'), GDB attempts to stop the program.
+This may or may not succeed, depending in part on the hardware and the
+serial drivers the remote system uses.  If you type the interrupt
+character once again, GDB displays this prompt:
+
+     Interrupted while waiting for the program.
+     Give up (and stop debugging it)?  (y or n)
+
+   If you type `y', GDB abandons the remote debugging session.  (If you
+decide you want to try again later, you can use `target remote' again
+to connect once more.)  If you type `n', GDB goes back to waiting.
+
+`detach'
+     When you have finished debugging the remote program, you can use
+     the `detach' command to release it from GDB control.  Detaching
+     from the target normally resumes its execution, but the results
+     will depend on your particular remote stub.  After the `detach'
+     command, GDB is free to connect to another target.
+
+`disconnect'
+     The `disconnect' command behaves like `detach', except that the
+     target is generally not resumed.  It will wait for GDB (this
+     instance or another one) to connect and continue debugging.  After
+     the `disconnect' command, GDB is again free to connect to another
+     target.
+
+`monitor CMD'
+     This command allows you to send arbitrary commands directly to the
+     remote monitor.  Since GDB doesn't care about the commands it
+     sends like this, this command is the way to extend GDB--you can
+     add new commands that only the external monitor will understand
+     and implement.
+
+
+File: gdb.info,  Node: File Transfer,  Next: Server,  Prev: Connecting,  Up: Remote Debugging
+
+20.2 Sending files to a remote system
+=====================================
+
+Some remote targets offer the ability to transfer files over the same
+connection used to communicate with GDB.  This is convenient for
+targets accessible through other means, e.g. GNU/Linux systems running
+`gdbserver' over a network interface.  For other targets, e.g. embedded
+devices with only a single serial port, this may be the only way to
+upload or download files.
+
+   Not all remote targets support these commands.
+
+`remote put HOSTFILE TARGETFILE'
+     Copy file HOSTFILE from the host system (the machine running GDB)
+     to TARGETFILE on the target system.
+
+`remote get TARGETFILE HOSTFILE'
+     Copy file TARGETFILE from the target system to HOSTFILE on the
+     host system.
+
+`remote delete TARGETFILE'
+     Delete TARGETFILE from the target system.
+
+
+
+File: gdb.info,  Node: Server,  Next: Remote Configuration,  Prev: File Transfer,  Up: Remote Debugging
+
+20.3 Using the `gdbserver' Program
+==================================
+
+`gdbserver' is a control program for Unix-like systems, which allows
+you to connect your program with a remote GDB via `target remote'--but
+without linking in the usual debugging stub.
+
+   `gdbserver' is not a complete replacement for the debugging stubs,
+because it requires essentially the same operating-system facilities
+that GDB itself does.  In fact, a system that can run `gdbserver' to
+connect to a remote GDB could also run GDB locally!  `gdbserver' is
+sometimes useful nevertheless, because it is a much smaller program
+than GDB itself.  It is also easier to port than all of GDB, so you may
+be able to get started more quickly on a new system by using
+`gdbserver'.  Finally, if you develop code for real-time systems, you
+may find that the tradeoffs involved in real-time operation make it
+more convenient to do as much development work as possible on another
+system, for example by cross-compiling.  You can use `gdbserver' to
+make a similar choice for debugging.
+
+   GDB and `gdbserver' communicate via either a serial line or a TCP
+connection, using the standard GDB remote serial protocol.
+
+     _Warning:_ `gdbserver' does not have any built-in security.  Do
+     not run `gdbserver' connected to any public network; a GDB
+     connection to `gdbserver' provides access to the target system
+     with the same privileges as the user running `gdbserver'.
+
+20.3.1 Running `gdbserver'
+--------------------------
+
+Run `gdbserver' on the target system.  You need a copy of the program
+you want to debug, including any libraries it requires.  `gdbserver'
+does not need your program's symbol table, so you can strip the program
+if necessary to save space.  GDB on the host system does all the symbol
+handling.
+
+   To use the server, you must tell it how to communicate with GDB; the
+name of your program; and the arguments for your program.  The usual
+syntax is:
+
+     target> gdbserver COMM PROGRAM [ ARGS ... ]
+
+   COMM is either a device name (to use a serial line), or a TCP
+hostname and portnumber, or `-' or `stdio' to use stdin/stdout of
+`gdbserver'.  For example, to debug Emacs with the argument `foo.txt'
+and communicate with GDB over the serial port `/dev/com1':
+
+     target> gdbserver /dev/com1 emacs foo.txt
+
+   `gdbserver' waits passively for the host GDB to communicate with it.
+
+   To use a TCP connection instead of a serial line:
+
+     target> gdbserver host:2345 emacs foo.txt
+
+   The only difference from the previous example is the first argument,
+specifying that you are communicating with the host GDB via TCP.  The
+`host:2345' argument means that `gdbserver' is to expect a TCP
+connection from machine `host' to local TCP port 2345.  (Currently, the
+`host' part is ignored.)  You can choose any number you want for the
+port number as long as it does not conflict with any TCP ports already
+in use on the target system (for example, `23' is reserved for
+`telnet').(1)  You must use the same port number with the host GDB
+`target remote' command.
+
+   The `stdio' connection is useful when starting `gdbserver' with ssh:
+
+     (gdb) target remote | ssh -T hostname gdbserver - hello
+
+   The `-T' option to ssh is provided because we don't need a remote
+pty, and we don't want escape-character handling.  Ssh does this by
+default when a command is provided, the flag is provided to make it
+explicit.  You could elide it if you want to.
+
+   Programs started with stdio-connected gdbserver have `/dev/null' for
+`stdin', and `stdout',`stderr' are sent back to gdb for display through
+a pipe connected to gdbserver.  Both `stdout' and `stderr' use the same
+pipe.
+
+20.3.1.1 Attaching to a Running Program
+.......................................
+
+On some targets, `gdbserver' can also attach to running programs.  This
+is accomplished via the `--attach' argument.  The syntax is:
+
+     target> gdbserver --attach COMM PID
+
+   PID is the process ID of a currently running process.  It isn't
+necessary to point `gdbserver' at a binary for the running process.
+
+   You can debug processes by name instead of process ID if your target
+has the `pidof' utility:
+
+     target> gdbserver --attach COMM `pidof PROGRAM`
+
+   In case more than one copy of PROGRAM is running, or PROGRAM has
+multiple threads, most versions of `pidof' support the `-s' option to
+only return the first process ID.
+
+20.3.1.2 Multi-Process Mode for `gdbserver'
+...........................................
+
+When you connect to `gdbserver' using `target remote', `gdbserver'
+debugs the specified program only once.  When the program exits, or you
+detach from it, GDB closes the connection and `gdbserver' exits.
+
+   If you connect using `target extended-remote', `gdbserver' enters
+multi-process mode.  When the debugged program exits, or you detach
+from it, GDB stays connected to `gdbserver' even though no program is
+running.  The `run' and `attach' commands instruct `gdbserver' to run
+or attach to a new program.  The `run' command uses `set remote
+exec-file' (*note set remote exec-file::) to select the program to run.
+Command line arguments are supported, except for wildcard expansion
+and I/O redirection (*note Arguments::).
+
+   To start `gdbserver' without supplying an initial command to run or
+process ID to attach, use the `--multi' command line option.  Then you
+can connect using `target extended-remote' and start the program you
+want to debug.
+
+   In multi-process mode `gdbserver' does not automatically exit unless
+you use the option `--once'.  You can terminate it by using `monitor
+exit' (*note Monitor Commands for gdbserver::).  Note that the
+conditions under which `gdbserver' terminates depend on how GDB
+connects to it (`target remote' or `target extended-remote').  The
+`--multi' option to `gdbserver' has no influence on that.
+
+20.3.1.3 TCP port allocation lifecycle of `gdbserver'
+.....................................................
+
+This section applies only when `gdbserver' is run to listen on a TCP
+port.
+
+   `gdbserver' normally terminates after all of its debugged processes
+have terminated in `target remote' mode.  On the other hand, for `target
+extended-remote', `gdbserver' stays running even with no processes left.
+GDB normally terminates the spawned debugged process on its exit, which
+normally also terminates `gdbserver' in the `target remote' mode.
+Therefore, when the connection drops unexpectedly, and GDB cannot ask
+`gdbserver' to kill its debugged processes, `gdbserver' stays running
+even in the `target remote' mode.
+
+   When `gdbserver' stays running, GDB can connect to it again later.
+Such reconnecting is useful for features like *Note disconnected
+tracing::.  For completeness, at most one GDB can be connected at a
+time.
+
+   By default, `gdbserver' keeps the listening TCP port open, so that
+additional connections are possible.  However, if you start `gdbserver'
+with the `--once' option, it will stop listening for any further
+connection attempts after connecting to the first GDB session.  This
+means no further connections to `gdbserver' will be possible after the
+first one.  It also means `gdbserver' will terminate after the first
+connection with remote GDB has closed, even for unexpectedly closed
+connections and even in the `target extended-remote' mode.  The
+`--once' option allows reusing the same port number for connecting to
+multiple instances of `gdbserver' running on the same host, since each
+instance closes its port after the first connection.
+
+20.3.1.4 Other Command-Line Arguments for `gdbserver'
+.....................................................
+
+The `--debug' option tells `gdbserver' to display extra status
+information about the debugging process.  The `--remote-debug' option
+tells `gdbserver' to display remote protocol debug output.  These
+options are intended for `gdbserver' development and for bug reports to
+the developers.
+
+   The `--wrapper' option specifies a wrapper to launch programs for
+debugging.  The option should be followed by the name of the wrapper,
+then any command-line arguments to pass to the wrapper, then `--'
+indicating the end of the wrapper arguments.
+
+   `gdbserver' runs the specified wrapper program with a combined
+command line including the wrapper arguments, then the name of the
+program to debug, then any arguments to the program.  The wrapper runs
+until it executes your program, and then GDB gains control.
+
+   You can use any program that eventually calls `execve' with its
+arguments as a wrapper.  Several standard Unix utilities do this, e.g.
+`env' and `nohup'.  Any Unix shell script ending with `exec "$@"' will
+also work.
+
+   For example, you can use `env' to pass an environment variable to
+the debugged program, without setting the variable in `gdbserver''s
+environment:
+
+     $ gdbserver --wrapper env LD_PRELOAD=libtest.so -- :2222 ./testprog
+
+20.3.2 Connecting to `gdbserver'
+--------------------------------
+
+Run GDB on the host system.
+
+   First make sure you have the necessary symbol files.  Load symbols
+for your application using the `file' command before you connect.  Use
+`set sysroot' to locate target libraries (unless your GDB was compiled
+with the correct sysroot using `--with-sysroot').
+
+   The symbol file and target libraries must exactly match the
+executable and libraries on the target, with one exception: the files
+on the host system should not be stripped, even if the files on the
+target system are.  Mismatched or missing files will lead to confusing
+results during debugging.  On GNU/Linux targets, mismatched or missing
+files may also prevent `gdbserver' from debugging multi-threaded
+programs.
+
+   Connect to your target (*note Connecting to a Remote Target:
+Connecting.).  For TCP connections, you must start up `gdbserver' prior
+to using the `target remote' command.  Otherwise you may get an error
+whose text depends on the host system, but which usually looks
+something like `Connection refused'.  Don't use the `load' command in
+GDB when using `gdbserver', since the program is already on the target.
+
+20.3.3 Monitor Commands for `gdbserver'
+---------------------------------------
+
+During a GDB session using `gdbserver', you can use the `monitor'
+command to send special requests to `gdbserver'.  Here are the
+available commands.
+
+`monitor help'
+     List the available monitor commands.
+
+`monitor set debug 0'
+`monitor set debug 1'
+     Disable or enable general debugging messages.
+
+`monitor set remote-debug 0'
+`monitor set remote-debug 1'
+     Disable or enable specific debugging messages associated with the
+     remote protocol (*note Remote Protocol::).
+
+`monitor set libthread-db-search-path [PATH]'
+     When this command is issued, PATH is a colon-separated list of
+     directories to search for `libthread_db' (*note set
+     libthread-db-search-path: Threads.).  If you omit PATH,
+     `libthread-db-search-path' will be reset to its default value.
+
+     The special entry `$pdir' for `libthread-db-search-path' is not
+     supported in `gdbserver'.
+
+`monitor exit'
+     Tell gdbserver to exit immediately.  This command should be
+     followed by `disconnect' to close the debugging session.
+     `gdbserver' will detach from any attached processes and kill any
+     processes it created.  Use `monitor exit' to terminate `gdbserver'
+     at the end of a multi-process mode debug session.
+
+
+20.3.4 Tracepoints support in `gdbserver'
+-----------------------------------------
+
+On some targets, `gdbserver' supports tracepoints, fast tracepoints and
+static tracepoints.
+
+   For fast or static tracepoints to work, a special library called the
+"in-process agent" (IPA), must be loaded in the inferior process.  This
+library is built and distributed as an integral part of `gdbserver'.
+In addition, support for static tracepoints requires building the
+in-process agent library with static tracepoints support.  At present,
+the UST (LTTng Userspace Tracer, `http://lttng.org/ust') tracing engine
+is supported.  This support is automatically available if UST
+development headers are found in the standard include path when
+`gdbserver' is built, or if `gdbserver' was explicitly configured using
+`--with-ust' to point at such headers.  You can explicitly disable the
+support using `--with-ust=no'.
+
+   There are several ways to load the in-process agent in your program:
+
+`Specifying it as dependency at link time'
+     You can link your program dynamically with the in-process agent
+     library.  On most systems, this is accomplished by adding
+     `-linproctrace' to the link command.
+
+`Using the system's preloading mechanisms'
+     You can force loading the in-process agent at startup time by using
+     your system's support for preloading shared libraries.  Many Unixes
+     support the concept of preloading user defined libraries.  In most
+     cases, you do that by specifying `LD_PRELOAD=libinproctrace.so' in
+     the environment.  See also the description of `gdbserver''s
+     `--wrapper' command line option.
+
+`Using GDB to force loading the agent at run time'
+     On some systems, you can force the inferior to load a shared
+     library, by calling a dynamic loader function in the inferior that
+     takes care of dynamically looking up and loading a shared library.
+     On most Unix systems, the function is `dlopen'.  You'll use the
+     `call' command for that.  For example:
+
+          (gdb) call dlopen ("libinproctrace.so", ...)
+
+     Note that on most Unix systems, for the `dlopen' function to be
+     available, the program needs to be linked with `-ldl'.
+
+   On systems that have a userspace dynamic loader, like most Unix
+systems, when you connect to `gdbserver' using `target remote', you'll
+find that the program is stopped at the dynamic loader's entry point,
+and no shared library has been loaded in the program's address space
+yet, including the in-process agent.  In that case, before being able
+to use any of the fast or static tracepoints features, you need to let
+the loader run and load the shared libraries.  The simplest way to do
+that is to run the program to the main procedure.  E.g., if debugging a
+C or C++ program, start `gdbserver' like so:
+
+     $ gdbserver :9999 myprogram
+
+   Start GDB and connect to `gdbserver' like so, and run to main:
+
+     $ gdb myprogram
+     (gdb) target remote myhost:9999
+     0x00007f215893ba60 in ?? () from /lib64/ld-linux-x86-64.so.2
+     (gdb) b main
+     (gdb) continue
+
+   The in-process tracing agent library should now be loaded into the
+process; you can confirm it with the `info sharedlibrary' command,
+which will list `libinproctrace.so' as loaded in the process.  You are
+now ready to install fast tracepoints, list static tracepoint markers,
+probe static tracepoints markers, and start tracing.
+
+   ---------- Footnotes ----------
+
+   (1) If you choose a port number that conflicts with another service,
+`gdbserver' prints an error message and exits.
+
+
+File: gdb.info,  Node: Remote Configuration,  Next: Remote Stub,  Prev: Server,  Up: Remote Debugging
+
+20.4 Remote Configuration
+=========================
+
+This section documents the configuration options available when
+debugging remote programs.  For the options related to the File I/O
+extensions of the remote protocol, see *Note system-call-allowed:
+system.
+
+`set remoteaddresssize BITS'
+     Set the maximum size of address in a memory packet to the specified
+     number of bits.  GDB will mask off the address bits above that
+     number, when it passes addresses to the remote target.  The
+     default value is the number of bits in the target's address.
+
+`show remoteaddresssize'
+     Show the current value of remote address size in bits.
+
+`set remotebaud N'
+     Set the baud rate for the remote serial I/O to N baud.  The value
+     is used to set the speed of the serial port used for debugging
+     remote targets.
+
+`show remotebaud'
+     Show the current speed of the remote connection.
+
+`set remotebreak'
+     If set to on, GDB sends a `BREAK' signal to the remote when you
+     type `Ctrl-c' to interrupt the program running on the remote.  If
+     set to off, GDB sends the `Ctrl-C' character instead.  The default
+     is off, since most remote systems expect to see `Ctrl-C' as the
+     interrupt signal.
+
+`show remotebreak'
+     Show whether GDB sends `BREAK' or `Ctrl-C' to interrupt the remote
+     program.
+
+`set remoteflow on'
+`set remoteflow off'
+     Enable or disable hardware flow control (`RTS'/`CTS') on the
+     serial port used to communicate to the remote target.
+
+`show remoteflow'
+     Show the current setting of hardware flow control.
+
+`set remotelogbase BASE'
+     Set the base (a.k.a. radix) of logging serial protocol
+     communications to BASE.  Supported values of BASE are: `ascii',
+     `octal', and `hex'.  The default is `ascii'.
+
+`show remotelogbase'
+     Show the current setting of the radix for logging remote serial
+     protocol.
+
+`set remotelogfile FILE'
+     Record remote serial communications on the named FILE.  The
+     default is not to record at all.
+
+`show remotelogfile.'
+     Show the current setting  of the file name on which to record the
+     serial communications.
+
+`set remotetimeout NUM'
+     Set the timeout limit to wait for the remote target to respond to
+     NUM seconds.  The default is 2 seconds.
+
+`show remotetimeout'
+     Show the current number of seconds to wait for the remote target
+     responses.
+
+`set remote hardware-watchpoint-limit LIMIT'
+`set remote hardware-breakpoint-limit LIMIT'
+     Restrict GDB to using LIMIT remote hardware breakpoint or
+     watchpoints.  A limit of -1, the default, is treated as unlimited.
+
+`set remote hardware-watchpoint-length-limit LIMIT'
+     Restrict GDB to using LIMIT bytes for the maximum length of a
+     remote hardware watchpoint.  A limit of -1, the default, is treated
+     as unlimited.
+
+`show remote hardware-watchpoint-length-limit'
+     Show the current limit (in bytes) of the maximum length of a
+     remote hardware watchpoint.
+
+`set remote exec-file FILENAME'
+`show remote exec-file'
+     Select the file used for `run' with `target extended-remote'.
+     This should be set to a filename valid on the target system.  If
+     it is not set, the target will use a default filename (e.g. the
+     last program run).
+
+`set remote interrupt-sequence'
+     Allow the user to select one of `Ctrl-C', a `BREAK' or `BREAK-g'
+     as the sequence to the remote target in order to interrupt the
+     execution.  `Ctrl-C' is a default.  Some system prefers `BREAK'
+     which is high level of serial line for some certain time.  Linux
+     kernel prefers `BREAK-g', a.k.a Magic SysRq g.  It is `BREAK'
+     signal followed by character `g'.
+
+`show interrupt-sequence'
+     Show which of `Ctrl-C', `BREAK' or `BREAK-g' is sent by GDB to
+     interrupt the remote program.  `BREAK-g' is BREAK signal followed
+     by `g' and also known as Magic SysRq g.
+
+`set remote interrupt-on-connect'
+     Specify whether interrupt-sequence is sent to remote target when
+     GDB connects to it.  This is mostly needed when you debug Linux
+     kernel.  Linux kernel expects `BREAK' followed by `g' which is
+     known as Magic SysRq g in order to connect GDB.
+
+`show interrupt-on-connect'
+     Show whether interrupt-sequence is sent to remote target when GDB
+     connects to it.
+
+`set tcp auto-retry on'
+     Enable auto-retry for remote TCP connections.  This is useful if
+     the remote debugging agent is launched in parallel with GDB; there
+     is a race condition because the agent may not become ready to
+     accept the connection before GDB attempts to connect.  When
+     auto-retry is enabled, if the initial attempt to connect fails,
+     GDB reattempts to establish the connection using the timeout
+     specified by `set tcp connect-timeout'.
+
+`set tcp auto-retry off'
+     Do not auto-retry failed TCP connections.
+
+`show tcp auto-retry'
+     Show the current auto-retry setting.
+
+`set tcp connect-timeout SECONDS'
+     Set the timeout for establishing a TCP connection to the remote
+     target to SECONDS.  The timeout affects both polling to retry
+     failed connections (enabled by `set tcp auto-retry on') and
+     waiting for connections that are merely slow to complete, and
+     represents an approximate cumulative value.
+
+`show tcp connect-timeout'
+     Show the current connection timeout setting.
+
+   The GDB remote protocol autodetects the packets supported by your
+debugging stub.  If you need to override the autodetection, you can use
+these commands to enable or disable individual packets.  Each packet
+can be set to `on' (the remote target supports this packet), `off' (the
+remote target does not support this packet), or `auto' (detect remote
+target support for this packet).  They all default to `auto'.  For more
+information about each packet, see *Note Remote Protocol::.
+
+   During normal use, you should not have to use any of these commands.
+If you do, that may be a bug in your remote debugging stub, or a bug in
+GDB.  You may want to report the problem to the GDB developers.
+
+   For each packet NAME, the command to enable or disable the packet is
+`set remote NAME-packet'.  The available settings are:
+
+Command Name         Remote Packet           Related Features
+`fetch-register'     `p'                     `info registers'
+`set-register'       `P'                     `set'
+`binary-download'    `X'                     `load', `set'
+`read-aux-vector'    `qXfer:auxv:read'       `info auxv'
+`symbol-lookup'      `qSymbol'               Detecting
+                                             multiple threads
+`attach'             `vAttach'               `attach'
+`verbose-resume'     `vCont'                 Stepping or
+                                             resuming multiple
+                                             threads
+`run'                `vRun'                  `run'
+`software-breakpoint'`Z0'                    `break'
+`hardware-breakpoint'`Z1'                    `hbreak'
+`write-watchpoint'   `Z2'                    `watch'
+`read-watchpoint'    `Z3'                    `rwatch'
+`access-watchpoint'  `Z4'                    `awatch'
+`target-features'    `qXfer:features:read'   `set architecture'
+`library-info'       `qXfer:libraries:read'  `info
+                                             sharedlibrary'
+`memory-map'         `qXfer:memory-map:read' `info mem'
+`read-sdata-object'  `qXfer:sdata:read'      `print $_sdata'
+`read-spu-object'    `qXfer:spu:read'        `info spu'
+`write-spu-object'   `qXfer:spu:write'       `info spu'
+`read-siginfo-object'`qXfer:siginfo:read'    `print $_siginfo'
+`write-siginfo-object'`qXfer:siginfo:write'   `set $_siginfo'
+`threads'            `qXfer:threads:read'    `info threads'
+`get-thread-local-   `qGetTLSAddr'           Displaying
+storage-address'                             `__thread'
+                                             variables
+`get-thread-information-block-address'`qGetTIBAddr'           Display
+                                             MS-Windows Thread
+                                             Information Block.
+`search-memory'      `qSearch:memory'        `find'
+`supported-packets'  `qSupported'            Remote
+                                             communications
+                                             parameters
+`pass-signals'       `QPassSignals'          `handle SIGNAL'
+`program-signals'    `QProgramSignals'       `handle SIGNAL'
+`hostio-close-packet'`vFile:close'           `remote get',
+                                             `remote put'
+`hostio-open-packet' `vFile:open'            `remote get',
+                                             `remote put'
+`hostio-pread-packet'`vFile:pread'           `remote get',
+                                             `remote put'
+`hostio-pwrite-packet'`vFile:pwrite'          `remote get',
+                                             `remote put'
+`hostio-unlink-packet'`vFile:unlink'          `remote delete'
+`hostio-readlink-packet'`vFile:readlink'        Host I/O
+`noack-packet'       `QStartNoAckMode'       Packet
+                                             acknowledgment
+`osdata'             `qXfer:osdata:read'     `info os'
+`query-attached'     `qAttached'             Querying remote
+                                             process attach
+                                             state.
+`traceframe-info'    `qXfer:traceframe-info:read'Traceframe info
+`install-in-trace'   `InstallInTrace'        Install
+                                             tracepoint in
+                                             tracing
+`disable-randomization'`QDisableRandomization' `set
+                                             disable-randomization'
+`conditional-breakpoints-packet'`Z0 and Z1'             `Support for
+                                             target-side
+                                             breakpoint
+                                             condition
+                                             evaluation'
+
+
+File: gdb.info,  Node: Remote Stub,  Prev: Remote Configuration,  Up: Remote Debugging
+
+20.5 Implementing a Remote Stub
+===============================
+
+The stub files provided with GDB implement the target side of the
+communication protocol, and the GDB side is implemented in the GDB
+source file `remote.c'.  Normally, you can simply allow these
+subroutines to communicate, and ignore the details.  (If you're
+implementing your own stub file, you can still ignore the details: start
+with one of the existing stub files.  `sparc-stub.c' is the best
+organized, and therefore the easiest to read.)
+
+   To debug a program running on another machine (the debugging
+"target" machine), you must first arrange for all the usual
+prerequisites for the program to run by itself.  For example, for a C
+program, you need:
+
+  1. A startup routine to set up the C runtime environment; these
+     usually have a name like `crt0'.  The startup routine may be
+     supplied by your hardware supplier, or you may have to write your
+     own.
+
+  2. A C subroutine library to support your program's subroutine calls,
+     notably managing input and output.
+
+  3. A way of getting your program to the other machine--for example, a
+     download program.  These are often supplied by the hardware
+     manufacturer, but you may have to write your own from hardware
+     documentation.
+
+   The next step is to arrange for your program to use a serial port to
+communicate with the machine where GDB is running (the "host" machine).
+In general terms, the scheme looks like this:
+
+_On the host,_
+     GDB already understands how to use this protocol; when everything
+     else is set up, you can simply use the `target remote' command
+     (*note Specifying a Debugging Target: Targets.).
+
+_On the target,_
+     you must link with your program a few special-purpose subroutines
+     that implement the GDB remote serial protocol.  The file
+     containing these subroutines is called  a "debugging stub".
+
+     On certain remote targets, you can use an auxiliary program
+     `gdbserver' instead of linking a stub into your program.  *Note
+     Using the `gdbserver' Program: Server, for details.
+
+   The debugging stub is specific to the architecture of the remote
+machine; for example, use `sparc-stub.c' to debug programs on SPARC
+boards.
+
+   These working remote stubs are distributed with GDB:
+
+`i386-stub.c'
+     For Intel 386 and compatible architectures.
+
+`m68k-stub.c'
+     For Motorola 680x0 architectures.
+
+`sh-stub.c'
+     For Renesas SH architectures.
+
+`sparc-stub.c'
+     For SPARC architectures.
+
+`sparcl-stub.c'
+     For Fujitsu SPARCLITE architectures.
+
+
+   The `README' file in the GDB distribution may list other recently
+added stubs.
+
+* Menu:
+
+* Stub Contents::       What the stub can do for you
+* Bootstrapping::       What you must do for the stub
+* Debug Session::       Putting it all together
+
+
+File: gdb.info,  Node: Stub Contents,  Next: Bootstrapping,  Up: Remote Stub
+
+20.5.1 What the Stub Can Do for You
+-----------------------------------
+
+The debugging stub for your architecture supplies these three
+subroutines:
+
+`set_debug_traps'
+     This routine arranges for `handle_exception' to run when your
+     program stops.  You must call this subroutine explicitly in your
+     program's startup code.
+
+`handle_exception'
+     This is the central workhorse, but your program never calls it
+     explicitly--the setup code arranges for `handle_exception' to run
+     when a trap is triggered.
+
+     `handle_exception' takes control when your program stops during
+     execution (for example, on a breakpoint), and mediates
+     communications with GDB on the host machine.  This is where the
+     communications protocol is implemented; `handle_exception' acts as
+     the GDB representative on the target machine.  It begins by
+     sending summary information on the state of your program, then
+     continues to execute, retrieving and transmitting any information
+     GDB needs, until you execute a GDB command that makes your program
+     resume; at that point, `handle_exception' returns control to your
+     own code on the target machine.
+
+`breakpoint'
+     Use this auxiliary subroutine to make your program contain a
+     breakpoint.  Depending on the particular situation, this may be
+     the only way for GDB to get control.  For instance, if your target
+     machine has some sort of interrupt button, you won't need to call
+     this; pressing the interrupt button transfers control to
+     `handle_exception'--in effect, to GDB.  On some machines, simply
+     receiving characters on the serial port may also trigger a trap;
+     again, in that situation, you don't need to call `breakpoint' from
+     your own program--simply running `target remote' from the host GDB
+     session gets control.
+
+     Call `breakpoint' if none of these is true, or if you simply want
+     to make certain your program stops at a predetermined point for the
+     start of your debugging session.
+
+
+File: gdb.info,  Node: Bootstrapping,  Next: Debug Session,  Prev: Stub Contents,  Up: Remote Stub
+
+20.5.2 What You Must Do for the Stub
+------------------------------------
+
+The debugging stubs that come with GDB are set up for a particular chip
+architecture, but they have no information about the rest of your
+debugging target machine.
+
+   First of all you need to tell the stub how to communicate with the
+serial port.
+
+`int getDebugChar()'
+     Write this subroutine to read a single character from the serial
+     port.  It may be identical to `getchar' for your target system; a
+     different name is used to allow you to distinguish the two if you
+     wish.
+
+`void putDebugChar(int)'
+     Write this subroutine to write a single character to the serial
+     port.  It may be identical to `putchar' for your target system; a
+     different name is used to allow you to distinguish the two if you
+     wish.
+
+   If you want GDB to be able to stop your program while it is running,
+you need to use an interrupt-driven serial driver, and arrange for it
+to stop when it receives a `^C' (`\003', the control-C character).
+That is the character which GDB uses to tell the remote system to stop.
+
+   Getting the debugging target to return the proper status to GDB
+probably requires changes to the standard stub; one quick and dirty way
+is to just execute a breakpoint instruction (the "dirty" part is that
+GDB reports a `SIGTRAP' instead of a `SIGINT').
+
+   Other routines you need to supply are:
+
+`void exceptionHandler (int EXCEPTION_NUMBER, void *EXCEPTION_ADDRESS)'
+     Write this function to install EXCEPTION_ADDRESS in the exception
+     handling tables.  You need to do this because the stub does not
+     have any way of knowing what the exception handling tables on your
+     target system are like (for example, the processor's table might
+     be in ROM, containing entries which point to a table in RAM).
+     EXCEPTION_NUMBER is the exception number which should be changed;
+     its meaning is architecture-dependent (for example, different
+     numbers might represent divide by zero, misaligned access, etc).
+     When this exception occurs, control should be transferred directly
+     to EXCEPTION_ADDRESS, and the processor state (stack, registers,
+     and so on) should be just as it is when a processor exception
+     occurs.  So if you want to use a jump instruction to reach
+     EXCEPTION_ADDRESS, it should be a simple jump, not a jump to
+     subroutine.
+
+     For the 386, EXCEPTION_ADDRESS should be installed as an interrupt
+     gate so that interrupts are masked while the handler runs.  The
+     gate should be at privilege level 0 (the most privileged level).
+     The SPARC and 68k stubs are able to mask interrupts themselves
+     without help from `exceptionHandler'.
+
+`void flush_i_cache()'
+     On SPARC and SPARCLITE only, write this subroutine to flush the
+     instruction cache, if any, on your target machine.  If there is no
+     instruction cache, this subroutine may be a no-op.
+
+     On target machines that have instruction caches, GDB requires this
+     function to make certain that the state of your program is stable.
+
+You must also make sure this library routine is available:
+
+`void *memset(void *, int, int)'
+     This is the standard library function `memset' that sets an area of
+     memory to a known value.  If you have one of the free versions of
+     `libc.a', `memset' can be found there; otherwise, you must either
+     obtain it from your hardware manufacturer, or write your own.
+
+   If you do not use the GNU C compiler, you may need other standard
+library subroutines as well; this varies from one stub to another, but
+in general the stubs are likely to use any of the common library
+subroutines which `GCC' generates as inline code.
+
+
+File: gdb.info,  Node: Debug Session,  Prev: Bootstrapping,  Up: Remote Stub
+
+20.5.3 Putting it All Together
+------------------------------
+
+In summary, when your program is ready to debug, you must follow these
+steps.
+
+  1. Make sure you have defined the supporting low-level routines
+     (*note What You Must Do for the Stub: Bootstrapping.):
+          `getDebugChar', `putDebugChar',
+          `flush_i_cache', `memset', `exceptionHandler'.
+
+  2. Insert these lines in your program's startup code, before the main
+     procedure is called:
+
+          set_debug_traps();
+          breakpoint();
+
+     On some machines, when a breakpoint trap is raised, the hardware
+     automatically makes the PC point to the instruction after the
+     breakpoint.  If your machine doesn't do that, you may need to
+     adjust `handle_exception' to arrange for it to return to the
+     instruction after the breakpoint on this first invocation, so that
+     your program doesn't keep hitting the initial breakpoint instead
+     of making progress.
+
+  3. For the 680x0 stub only, you need to provide a variable called
+     `exceptionHook'.  Normally you just use:
+
+          void (*exceptionHook)() = 0;
+
+     but if before calling `set_debug_traps', you set it to point to a
+     function in your program, that function is called when `GDB'
+     continues after stopping on a trap (for example, bus error).  The
+     function indicated by `exceptionHook' is called with one
+     parameter: an `int' which is the exception number.
+
+  4. Compile and link together: your program, the GDB debugging stub for
+     your target architecture, and the supporting subroutines.
+
+  5. Make sure you have a serial connection between your target machine
+     and the GDB host, and identify the serial port on the host.
+
+  6. Download your program to your target machine (or get it there by
+     whatever means the manufacturer provides), and start it.
+
+  7. Start GDB on the host, and connect to the target (*note Connecting
+     to a Remote Target: Connecting.).
+
+
+
+File: gdb.info,  Node: Configurations,  Next: Controlling GDB,  Prev: Remote Debugging,  Up: Top
+
+21 Configuration-Specific Information
+*************************************
+
+While nearly all GDB commands are available for all native and cross
+versions of the debugger, there are some exceptions.  This chapter
+describes things that are only available in certain configurations.
+
+   There are three major categories of configurations: native
+configurations, where the host and target are the same, embedded
+operating system configurations, which are usually the same for several
+different processor architectures, and bare embedded processors, which
+are quite different from each other.
+
+* Menu:
+
+* Native::
+* Embedded OS::
+* Embedded Processors::
+* Architectures::
+
+
+File: gdb.info,  Node: Native,  Next: Embedded OS,  Up: Configurations
+
+21.1 Native
+===========
+
+This section describes details specific to particular native
+configurations.
+
+* Menu:
+
+* HP-UX::                       HP-UX
+* BSD libkvm Interface::	Debugging BSD kernel memory images
+* SVR4 Process Information::    SVR4 process information
+* DJGPP Native::                Features specific to the DJGPP port
+* Cygwin Native::		Features specific to the Cygwin port
+* Hurd Native::                 Features specific to GNU Hurd
+* Neutrino::                    Features specific to QNX Neutrino
+* Darwin::			Features specific to Darwin
+
+
+File: gdb.info,  Node: HP-UX,  Next: BSD libkvm Interface,  Up: Native
+
+21.1.1 HP-UX
+------------
+
+On HP-UX systems, if you refer to a function or variable name that
+begins with a dollar sign, GDB searches for a user or system name
+first, before it searches for a convenience variable.
+
+
+File: gdb.info,  Node: BSD libkvm Interface,  Next: SVR4 Process Information,  Prev: HP-UX,  Up: Native
+
+21.1.2 BSD libkvm Interface
+---------------------------
+
+BSD-derived systems (FreeBSD/NetBSD/OpenBSD) have a kernel memory
+interface that provides a uniform interface for accessing kernel virtual
+memory images, including live systems and crash dumps.  GDB uses this
+interface to allow you to debug live kernels and kernel crash dumps on
+many native BSD configurations.  This is implemented as a special `kvm'
+debugging target.  For debugging a live system, load the currently
+running kernel into GDB and connect to the `kvm' target:
+
+     (gdb) target kvm
+
+   For debugging crash dumps, provide the file name of the crash dump
+as an argument:
+
+     (gdb) target kvm /var/crash/bsd.0
+
+   Once connected to the `kvm' target, the following commands are
+available:
+
+`kvm pcb'
+     Set current context from the "Process Control Block" (PCB) address.
+
+`kvm proc'
+     Set current context from proc address.  This command isn't
+     available on modern FreeBSD systems.
+
+
+File: gdb.info,  Node: SVR4 Process Information,  Next: DJGPP Native,  Prev: BSD libkvm Interface,  Up: Native
+
+21.1.3 SVR4 Process Information
+-------------------------------
+
+Many versions of SVR4 and compatible systems provide a facility called
+`/proc' that can be used to examine the image of a running process
+using file-system subroutines.  If GDB is configured for an operating
+system with this facility, the command `info proc' is available to
+report information about the process running your program, or about any
+process running on your system.  `info proc' works only on SVR4 systems
+that include the `procfs' code.  This includes, as of this writing,
+GNU/Linux, OSF/1 (Digital Unix), Solaris, Irix, and Unixware, but not
+HP-UX, for example.
+
+`info proc'
+`info proc PROCESS-ID'
+     Summarize available information about any running process.  If a
+     process ID is specified by PROCESS-ID, display information about
+     that process; otherwise display information about the program being
+     debugged.  The summary includes the debugged process ID, the
+     command line used to invoke it, its current working directory, and
+     its executable file's absolute file name.
+
+     On some systems, PROCESS-ID can be of the form `[PID]/TID' which
+     specifies a certain thread ID within a process.  If the optional
+     PID part is missing, it means a thread from the process being
+     debugged (the leading `/' still needs to be present, or else GDB
+     will interpret the number as a process ID rather than a thread ID).
+
+`info proc mappings'
+     Report the memory address space ranges accessible in the program,
+     with information on whether the process has read, write, or
+     execute access rights to each range.  On GNU/Linux systems, each
+     memory range includes the object file which is mapped to that
+     range, instead of the memory access rights to that range.
+
+`info proc stat'
+`info proc status'
+     These subcommands are specific to GNU/Linux systems.  They show
+     the process-related information, including the user ID and group
+     ID; how many threads are there in the process; its virtual memory
+     usage; the signals that are pending, blocked, and ignored; its
+     TTY; its consumption of system and user time; its stack size; its
+     `nice' value; etc.  For more information, see the `proc' man page
+     (type `man 5 proc' from your shell prompt).
+
+`info proc all'
+     Show all the information about the process described under all of
+     the above `info proc' subcommands.
+
+`set procfs-trace'
+     This command enables and disables tracing of `procfs' API calls.
+
+`show procfs-trace'
+     Show the current state of `procfs' API call tracing.
+
+`set procfs-file FILE'
+     Tell GDB to write `procfs' API trace to the named FILE.  GDB
+     appends the trace info to the previous contents of the file.  The
+     default is to display the trace on the standard output.
+
+`show procfs-file'
+     Show the file to which `procfs' API trace is written.
+
+`proc-trace-entry'
+`proc-trace-exit'
+`proc-untrace-entry'
+`proc-untrace-exit'
+     These commands enable and disable tracing of entries into and exits
+     from the `syscall' interface.
+
+`info pidlist'
+     For QNX Neutrino only, this command displays the list of all the
+     processes and all the threads within each process.
+
+`info meminfo'
+     For QNX Neutrino only, this command displays the list of all
+     mapinfos.
+
+
+File: gdb.info,  Node: DJGPP Native,  Next: Cygwin Native,  Prev: SVR4 Process Information,  Up: Native
+
+21.1.4 Features for Debugging DJGPP Programs
+--------------------------------------------
+
+DJGPP is a port of the GNU development tools to MS-DOS and MS-Windows.
+DJGPP programs are 32-bit protected-mode programs that use the "DPMI"
+(DOS Protected-Mode Interface) API to run on top of real-mode DOS
+systems and their emulations.
+
+   GDB supports native debugging of DJGPP programs, and defines a few
+commands specific to the DJGPP port.  This subsection describes those
+commands.
+
+`info dos'
+     This is a prefix of DJGPP-specific commands which print
+     information about the target system and important OS structures.
+
+`info dos sysinfo'
+     This command displays assorted information about the underlying
+     platform: the CPU type and features, the OS version and flavor, the
+     DPMI version, and the available conventional and DPMI memory.
+
+`info dos gdt'
+`info dos ldt'
+`info dos idt'
+     These 3 commands display entries from, respectively, Global, Local,
+     and Interrupt Descriptor Tables (GDT, LDT, and IDT).  The
+     descriptor tables are data structures which store a descriptor for
+     each segment that is currently in use.  The segment's selector is
+     an index into a descriptor table; the table entry for that index
+     holds the descriptor's base address and limit, and its attributes
+     and access rights.
+
+     A typical DJGPP program uses 3 segments: a code segment, a data
+     segment (used for both data and the stack), and a DOS segment
+     (which allows access to DOS/BIOS data structures and absolute
+     addresses in conventional memory).  However, the DPMI host will
+     usually define additional segments in order to support the DPMI
+     environment.
+
+     These commands allow to display entries from the descriptor tables.
+     Without an argument, all entries from the specified table are
+     displayed.  An argument, which should be an integer expression,
+     means display a single entry whose index is given by the argument.
+     For example, here's a convenient way to display information about
+     the debugged program's data segment:
+
+     `(gdb) info dos ldt $ds'
+     `0x13f: base=0x11970000 limit=0x0009ffff 32-Bit Data (Read/Write, Exp-up)'
+
+
+     This comes in handy when you want to see whether a pointer is
+     outside the data segment's limit (i.e. "garbled").
+
+`info dos pde'
+`info dos pte'
+     These two commands display entries from, respectively, the Page
+     Directory and the Page Tables.  Page Directories and Page Tables
+     are data structures which control how virtual memory addresses are
+     mapped into physical addresses.  A Page Table includes an entry
+     for every page of memory that is mapped into the program's address
+     space; there may be several Page Tables, each one holding up to
+     4096 entries.  A Page Directory has up to 4096 entries, one each
+     for every Page Table that is currently in use.
+
+     Without an argument, `info dos pde' displays the entire Page
+     Directory, and `info dos pte' displays all the entries in all of
+     the Page Tables.  An argument, an integer expression, given to the
+     `info dos pde' command means display only that entry from the Page
+     Directory table.  An argument given to the `info dos pte' command
+     means display entries from a single Page Table, the one pointed to
+     by the specified entry in the Page Directory.
+
+     These commands are useful when your program uses "DMA" (Direct
+     Memory Access), which needs physical addresses to program the DMA
+     controller.
+
+     These commands are supported only with some DPMI servers.
+
+`info dos address-pte ADDR'
+     This command displays the Page Table entry for a specified linear
+     address.  The argument ADDR is a linear address which should
+     already have the appropriate segment's base address added to it,
+     because this command accepts addresses which may belong to _any_
+     segment.  For example, here's how to display the Page Table entry
+     for the page where a variable `i' is stored:
+
+     `(gdb) info dos address-pte __djgpp_base_address + (char *)&i'
+     `Page Table entry for address 0x11a00d30:'
+     `Base=0x02698000 Dirty Acc. Not-Cached Write-Back Usr Read-Write +0xd30'
+
+
+     This says that `i' is stored at offset `0xd30' from the page whose
+     physical base address is `0x02698000', and shows all the
+     attributes of that page.
+
+     Note that you must cast the addresses of variables to a `char *',
+     since otherwise the value of `__djgpp_base_address', the base
+     address of all variables and functions in a DJGPP program, will be
+     added using the rules of C pointer arithmetics: if `i' is declared
+     an `int', GDB will add 4 times the value of `__djgpp_base_address'
+     to the address of `i'.
+
+     Here's another example, it displays the Page Table entry for the
+     transfer buffer:
+
+     `(gdb) info dos address-pte *((unsigned *)&_go32_info_block + 3)'
+     `Page Table entry for address 0x29110:'
+     `Base=0x00029000 Dirty Acc. Not-Cached Write-Back Usr Read-Write +0x110'
+
+
+     (The `+ 3' offset is because the transfer buffer's address is the
+     3rd member of the `_go32_info_block' structure.)  The output
+     clearly shows that this DPMI server maps the addresses in
+     conventional memory 1:1, i.e. the physical (`0x00029000' +
+     `0x110') and linear (`0x29110') addresses are identical.
+
+     This command is supported only with some DPMI servers.
+
+   In addition to native debugging, the DJGPP port supports remote
+debugging via a serial data link.  The following commands are specific
+to remote serial debugging in the DJGPP port of GDB.
+
+`set com1base ADDR'
+     This command sets the base I/O port address of the `COM1' serial
+     port.
+
+`set com1irq IRQ'
+     This command sets the "Interrupt Request" (`IRQ') line to use for
+     the `COM1' serial port.
+
+     There are similar commands `set com2base', `set com3irq', etc. for
+     setting the port address and the `IRQ' lines for the other 3 COM
+     ports.
+
+     The related commands `show com1base', `show com1irq' etc.  display
+     the current settings of the base address and the `IRQ' lines used
+     by the COM ports.
+
+`info serial'
+     This command prints the status of the 4 DOS serial ports.  For each
+     port, it prints whether it's active or not, its I/O base address
+     and IRQ number, whether it uses a 16550-style FIFO, its baudrate,
+     and the counts of various errors encountered so far.
+
+
+File: gdb.info,  Node: Cygwin Native,  Next: Hurd Native,  Prev: DJGPP Native,  Up: Native
+
+21.1.5 Features for Debugging MS Windows PE Executables
+-------------------------------------------------------
+
+GDB supports native debugging of MS Windows programs, including DLLs
+with and without symbolic debugging information.
+
+   MS-Windows programs that call `SetConsoleMode' to switch off the
+special meaning of the `Ctrl-C' keystroke cannot be interrupted by
+typing `C-c'.  For this reason, GDB on MS-Windows supports `C-<BREAK>'
+as an alternative interrupt key sequence, which can be used to
+interrupt the debuggee even if it ignores `C-c'.
+
+   There are various additional Cygwin-specific commands, described in
+this section.  Working with DLLs that have no debugging symbols is
+described in *Note Non-debug DLL Symbols::.
+
+`info w32'
+     This is a prefix of MS Windows-specific commands which print
+     information about the target system and important OS structures.
+
+`info w32 selector'
+     This command displays information returned by the Win32 API
+     `GetThreadSelectorEntry' function.  It takes an optional argument
+     that is evaluated to a long value to give the information about
+     this given selector.  Without argument, this command displays
+     information about the six segment registers.
+
+`info w32 thread-information-block'
+     This command displays thread specific information stored in the
+     Thread Information Block (readable on the X86 CPU family using
+     `$fs' selector for 32-bit programs and `$gs' for 64-bit programs).
+
+`info dll'
+     This is a Cygwin-specific alias of `info shared'.
+
+`dll-symbols'
+     This command loads symbols from a dll similarly to add-sym command
+     but without the need to specify a base address.
+
+`set cygwin-exceptions MODE'
+     If MODE is `on', GDB will break on exceptions that happen inside
+     the Cygwin DLL.  If MODE is `off', GDB will delay recognition of
+     exceptions, and may ignore some exceptions which seem to be caused
+     by internal Cygwin DLL "bookkeeping".  This option is meant
+     primarily for debugging the Cygwin DLL itself; the default value
+     is `off' to avoid annoying GDB users with false `SIGSEGV' signals.
+
+`show cygwin-exceptions'
+     Displays whether GDB will break on exceptions that happen inside
+     the Cygwin DLL itself.
+
+`set new-console MODE'
+     If MODE is `on' the debuggee will be started in a new console on
+     next start.  If MODE is `off', the debuggee will be started in the
+     same console as the debugger.
+
+`show new-console'
+     Displays whether a new console is used when the debuggee is
+     started.
+
+`set new-group MODE'
+     This boolean value controls whether the debuggee should start a
+     new group or stay in the same group as the debugger.  This affects
+     the way the Windows OS handles `Ctrl-C'.
+
+`show new-group'
+     Displays current value of new-group boolean.
+
+`set debugevents'
+     This boolean value adds debug output concerning kernel events
+     related to the debuggee seen by the debugger.  This includes
+     events that signal thread and process creation and exit, DLL
+     loading and unloading, console interrupts, and debugging messages
+     produced by the Windows `OutputDebugString' API call.
+
+`set debugexec'
+     This boolean value adds debug output concerning execute events
+     (such as resume thread) seen by the debugger.
+
+`set debugexceptions'
+     This boolean value adds debug output concerning exceptions in the
+     debuggee seen by the debugger.
+
+`set debugmemory'
+     This boolean value adds debug output concerning debuggee memory
+     reads and writes by the debugger.
+
+`set shell'
+     This boolean values specifies whether the debuggee is called via a
+     shell or directly (default value is on).
+
+`show shell'
+     Displays if the debuggee will be started with a shell.
+
+
+* Menu:
+
+* Non-debug DLL Symbols::  Support for DLLs without debugging symbols
+
+
+File: gdb.info,  Node: Non-debug DLL Symbols,  Up: Cygwin Native
+
+21.1.5.1 Support for DLLs without Debugging Symbols
+...................................................
+
+Very often on windows, some of the DLLs that your program relies on do
+not include symbolic debugging information (for example,
+`kernel32.dll').  When GDB doesn't recognize any debugging symbols in a
+DLL, it relies on the minimal amount of symbolic information contained
+in the DLL's export table.  This section describes working with such
+symbols, known internally to GDB as "minimal symbols".
+
+   Note that before the debugged program has started execution, no DLLs
+will have been loaded.  The easiest way around this problem is simply to
+start the program -- either by setting a breakpoint or letting the
+program run once to completion.  It is also possible to force GDB to
+load a particular DLL before starting the executable -- see the shared
+library information in *Note Files::, or the `dll-symbols' command in
+*Note Cygwin Native::.  Currently, explicitly loading symbols from a
+DLL with no debugging information will cause the symbol names to be
+duplicated in GDB's lookup table, which may adversely affect symbol
+lookup performance.
+
+21.1.5.2 DLL Name Prefixes
+..........................
+
+In keeping with the naming conventions used by the Microsoft debugging
+tools, DLL export symbols are made available with a prefix based on the
+DLL name, for instance `KERNEL32!CreateFileA'.  The plain name is also
+entered into the symbol table, so `CreateFileA' is often sufficient.
+In some cases there will be name clashes within a program (particularly
+if the executable itself includes full debugging symbols) necessitating
+the use of the fully qualified name when referring to the contents of
+the DLL.  Use single-quotes around the name to avoid the exclamation
+mark ("!")  being interpreted as a language operator.
+
+   Note that the internal name of the DLL may be all upper-case, even
+though the file name of the DLL is lower-case, or vice-versa.  Since
+symbols within GDB are _case-sensitive_ this may cause some confusion.
+If in doubt, try the `info functions' and `info variables' commands or
+even `maint print msymbols' (*note Symbols::). Here's an example:
+
+     (gdb) info function CreateFileA
+     All functions matching regular expression "CreateFileA":
+
+     Non-debugging symbols:
+     0x77e885f4  CreateFileA
+     0x77e885f4  KERNEL32!CreateFileA
+
+     (gdb) info function !
+     All functions matching regular expression "!":
+
+     Non-debugging symbols:
+     0x6100114c  cygwin1!__assert
+     0x61004034  cygwin1!_dll_crt0 at 0
+     0x61004240  cygwin1!dll_crt0(per_process *)
+     [etc...]
+
+21.1.5.3 Working with Minimal Symbols
+.....................................
+
+Symbols extracted from a DLL's export table do not contain very much
+type information. All that GDB can do is guess whether a symbol refers
+to a function or variable depending on the linker section that contains
+the symbol. Also note that the actual contents of the memory contained
+in a DLL are not available unless the program is running. This means
+that you cannot examine the contents of a variable or disassemble a
+function within a DLL without a running program.
+
+   Variables are generally treated as pointers and dereferenced
+automatically. For this reason, it is often necessary to prefix a
+variable name with the address-of operator ("&") and provide explicit
+type information in the command. Here's an example of the type of
+problem:
+
+     (gdb) print 'cygwin1!__argv'
+     $1 = 268572168
+
+     (gdb) x 'cygwin1!__argv'
+     0x10021610:      "\230y\""
+
+   And two possible solutions:
+
+     (gdb) print ((char **)'cygwin1!__argv')[0]
+     $2 = 0x22fd98 "/cygdrive/c/mydirectory/myprogram"
+
+     (gdb) x/2x &'cygwin1!__argv'
+     0x610c0aa8 <cygwin1!__argv>:    0x10021608      0x00000000
+     (gdb) x/x 0x10021608
+     0x10021608:     0x0022fd98
+     (gdb) x/s 0x0022fd98
+     0x22fd98:        "/cygdrive/c/mydirectory/myprogram"
+
+   Setting a break point within a DLL is possible even before the
+program starts execution. However, under these circumstances, GDB can't
+examine the initial instructions of the function in order to skip the
+function's frame set-up code. You can work around this by using "*&" to
+set the breakpoint at a raw memory address:
+
+     (gdb) break *&'python22!PyOS_Readline'
+     Breakpoint 1 at 0x1e04eff0
+
+   The author of these extensions is not entirely convinced that
+setting a break point within a shared DLL like `kernel32.dll' is
+completely safe.
+
+
+File: gdb.info,  Node: Hurd Native,  Next: Neutrino,  Prev: Cygwin Native,  Up: Native
+
+21.1.6 Commands Specific to GNU Hurd Systems
+--------------------------------------------
+
+This subsection describes GDB commands specific to the GNU Hurd native
+debugging.
+
+`set signals'
+`set sigs'
+     This command toggles the state of inferior signal interception by
+     GDB.  Mach exceptions, such as breakpoint traps, are not affected
+     by this command.  `sigs' is a shorthand alias for `signals'.
+
+`show signals'
+`show sigs'
+     Show the current state of intercepting inferior's signals.
+
+`set signal-thread'
+`set sigthread'
+     This command tells GDB which thread is the `libc' signal thread.
+     That thread is run when a signal is delivered to a running
+     process.  `set sigthread' is the shorthand alias of `set
+     signal-thread'.
+
+`show signal-thread'
+`show sigthread'
+     These two commands show which thread will run when the inferior is
+     delivered a signal.
+
+`set stopped'
+     This commands tells GDB that the inferior process is stopped, as
+     with the `SIGSTOP' signal.  The stopped process can be continued
+     by delivering a signal to it.
+
+`show stopped'
+     This command shows whether GDB thinks the debuggee is stopped.
+
+`set exceptions'
+     Use this command to turn off trapping of exceptions in the
+     inferior.  When exception trapping is off, neither breakpoints nor
+     single-stepping will work.  To restore the default, set exception
+     trapping on.
+
+`show exceptions'
+     Show the current state of trapping exceptions in the inferior.
+
+`set task pause'
+     This command toggles task suspension when GDB has control.
+     Setting it to on takes effect immediately, and the task is
+     suspended whenever GDB gets control.  Setting it to off will take
+     effect the next time the inferior is continued.  If this option is
+     set to off, you can use `set thread default pause on' or `set
+     thread pause on' (see below) to pause individual threads.
+
+`show task pause'
+     Show the current state of task suspension.
+
+`set task detach-suspend-count'
+     This command sets the suspend count the task will be left with when
+     GDB detaches from it.
+
+`show task detach-suspend-count'
+     Show the suspend count the task will be left with when detaching.
+
+`set task exception-port'
+`set task excp'
+     This command sets the task exception port to which GDB will
+     forward exceptions.  The argument should be the value of the "send
+     rights" of the task.  `set task excp' is a shorthand alias.
+
+`set noninvasive'
+     This command switches GDB to a mode that is the least invasive as
+     far as interfering with the inferior is concerned.  This is the
+     same as using `set task pause', `set exceptions', and `set
+     signals' to values opposite to the defaults.
+
+`info send-rights'
+`info receive-rights'
+`info port-rights'
+`info port-sets'
+`info dead-names'
+`info ports'
+`info psets'
+     These commands display information about, respectively, send
+     rights, receive rights, port rights, port sets, and dead names of
+     a task.  There are also shorthand aliases: `info ports' for `info
+     port-rights' and `info psets' for `info port-sets'.
+
+`set thread pause'
+     This command toggles current thread suspension when GDB has
+     control.  Setting it to on takes effect immediately, and the
+     current thread is suspended whenever GDB gets control.  Setting it
+     to off will take effect the next time the inferior is continued.
+     Normally, this command has no effect, since when GDB has control,
+     the whole task is suspended.  However, if you used `set task pause
+     off' (see above), this command comes in handy to suspend only the
+     current thread.
+
+`show thread pause'
+     This command shows the state of current thread suspension.
+
+`set thread run'
+     This command sets whether the current thread is allowed to run.
+
+`show thread run'
+     Show whether the current thread is allowed to run.
+
+`set thread detach-suspend-count'
+     This command sets the suspend count GDB will leave on a thread
+     when detaching.  This number is relative to the suspend count
+     found by GDB when it notices the thread; use `set thread
+     takeover-suspend-count' to force it to an absolute value.
+
+`show thread detach-suspend-count'
+     Show the suspend count GDB will leave on the thread when detaching.
+
+`set thread exception-port'
+`set thread excp'
+     Set the thread exception port to which to forward exceptions.  This
+     overrides the port set by `set task exception-port' (see above).
+     `set thread excp' is the shorthand alias.
+
+`set thread takeover-suspend-count'
+     Normally, GDB's thread suspend counts are relative to the value
+     GDB finds when it notices each thread.  This command changes the
+     suspend counts to be absolute instead.
+
+`set thread default'
+`show thread default'
+     Each of the above `set thread' commands has a `set thread default'
+     counterpart (e.g., `set thread default pause', `set thread default
+     exception-port', etc.).  The `thread default' variety of commands
+     sets the default thread properties for all threads; you can then
+     change the properties of individual threads with the non-default
+     commands.
+
+
+File: gdb.info,  Node: Neutrino,  Next: Darwin,  Prev: Hurd Native,  Up: Native
+
+21.1.7 QNX Neutrino
+-------------------
+
+GDB provides the following commands specific to the QNX Neutrino target:
+
+`set debug nto-debug'
+     When set to on, enables debugging messages specific to the QNX
+     Neutrino support.
+
+`show debug nto-debug'
+     Show the current state of QNX Neutrino messages.
+
+
+File: gdb.info,  Node: Darwin,  Prev: Neutrino,  Up: Native
+
+21.1.8 Darwin
+-------------
+
+GDB provides the following commands specific to the Darwin target:
+
+`set debug darwin NUM'
+     When set to a non zero value, enables debugging messages specific
+     to the Darwin support.  Higher values produce more verbose output.
+
+`show debug darwin'
+     Show the current state of Darwin messages.
+
+`set debug mach-o NUM'
+     When set to a non zero value, enables debugging messages while GDB
+     is reading Darwin object files.  ("Mach-O" is the file format used
+     on Darwin for object and executable files.)  Higher values produce
+     more verbose output.  This is a command to diagnose problems
+     internal to GDB and should not be needed in normal usage.
+
+`show debug mach-o'
+     Show the current state of Mach-O file messages.
+
+`set mach-exceptions on'
+`set mach-exceptions off'
+     On Darwin, faults are first reported as a Mach exception and are
+     then mapped to a Posix signal.  Use this command to turn on
+     trapping of Mach exceptions in the inferior.  This might be
+     sometimes useful to better understand the cause of a fault.  The
+     default is off.
+
+`show mach-exceptions'
+     Show the current state of exceptions trapping.
+
+
+File: gdb.info,  Node: Embedded OS,  Next: Embedded Processors,  Prev: Native,  Up: Configurations
+
+21.2 Embedded Operating Systems
+===============================
+
+This section describes configurations involving the debugging of
+embedded operating systems that are available for several different
+architectures.
+
+* Menu:
+
+* VxWorks::                     Using GDB with VxWorks
+
+   GDB includes the ability to debug programs running on various
+real-time operating systems.
+
+
+File: gdb.info,  Node: VxWorks,  Up: Embedded OS
+
+21.2.1 Using GDB with VxWorks
+-----------------------------
+
+`target vxworks MACHINENAME'
+     A VxWorks system, attached via TCP/IP.  The argument MACHINENAME
+     is the target system's machine name or IP address.
+
+
+   On VxWorks, `load' links FILENAME dynamically on the current target
+system as well as adding its symbols in GDB.
+
+   GDB enables developers to spawn and debug tasks running on networked
+VxWorks targets from a Unix host.  Already-running tasks spawned from
+the VxWorks shell can also be debugged.  GDB uses code that runs on
+both the Unix host and on the VxWorks target.  The program `gdb' is
+installed and executed on the Unix host.  (It may be installed with the
+name `vxgdb', to distinguish it from a GDB for debugging programs on
+the host itself.)
+
+`VxWorks-timeout ARGS'
+     All VxWorks-based targets now support the option `vxworks-timeout'.
+     This option is set by the user, and  ARGS represents the number of
+     seconds GDB waits for responses to rpc's.  You might use this if
+     your VxWorks target is a slow software simulator or is on the far
+     side of a thin network line.
+
+   The following information on connecting to VxWorks was current when
+this manual was produced; newer releases of VxWorks may use revised
+procedures.
+
+   To use GDB with VxWorks, you must rebuild your VxWorks kernel to
+include the remote debugging interface routines in the VxWorks library
+`rdb.a'.  To do this, define `INCLUDE_RDB' in the VxWorks configuration
+file `configAll.h' and rebuild your VxWorks kernel.  The resulting
+kernel contains `rdb.a', and spawns the source debugging task
+`tRdbTask' when VxWorks is booted.  For more information on configuring
+and remaking VxWorks, see the manufacturer's manual.
+
+   Once you have included `rdb.a' in your VxWorks system image and set
+your Unix execution search path to find GDB, you are ready to run GDB.
+From your Unix host, run `gdb' (or `vxgdb', depending on your
+installation).
+
+   GDB comes up showing the prompt:
+
+     (vxgdb)
+
+* Menu:
+
+* VxWorks Connection::          Connecting to VxWorks
+* VxWorks Download::            VxWorks download
+* VxWorks Attach::              Running tasks
+
+
+File: gdb.info,  Node: VxWorks Connection,  Next: VxWorks Download,  Up: VxWorks
+
+21.2.1.1 Connecting to VxWorks
+..............................
+
+The GDB command `target' lets you connect to a VxWorks target on the
+network.  To connect to a target whose host name is "`tt'", type:
+
+     (vxgdb) target vxworks tt
+
+   GDB displays messages like these:
+
+     Attaching remote machine across net...
+     Connected to tt.
+
+   GDB then attempts to read the symbol tables of any object modules
+loaded into the VxWorks target since it was last booted.  GDB locates
+these files by searching the directories listed in the command search
+path (*note Your Program's Environment: Environment.); if it fails to
+find an object file, it displays a message such as:
+
+     prog.o: No such file or directory.
+
+   When this happens, add the appropriate directory to the search path
+with the GDB command `path', and execute the `target' command again.
+
+
+File: gdb.info,  Node: VxWorks Download,  Next: VxWorks Attach,  Prev: VxWorks Connection,  Up: VxWorks
+
+21.2.1.2 VxWorks Download
+.........................
+
+If you have connected to the VxWorks target and you want to debug an
+object that has not yet been loaded, you can use the GDB `load' command
+to download a file from Unix to VxWorks incrementally.  The object file
+given as an argument to the `load' command is actually opened twice:
+first by the VxWorks target in order to download the code, then by GDB
+in order to read the symbol table.  This can lead to problems if the
+current working directories on the two systems differ.  If both systems
+have NFS mounted the same filesystems, you can avoid these problems by
+using absolute paths.  Otherwise, it is simplest to set the working
+directory on both systems to the directory in which the object file
+resides, and then to reference the file by its name, without any path.
+For instance, a program `prog.o' may reside in `VXPATH/vw/demo/rdb' in
+VxWorks and in `HOSTPATH/vw/demo/rdb' on the host.  To load this
+program, type this on VxWorks:
+
+     -> cd "VXPATH/vw/demo/rdb"
+
+Then, in GDB, type:
+
+     (vxgdb) cd HOSTPATH/vw/demo/rdb
+     (vxgdb) load prog.o
+
+   GDB displays a response similar to this:
+
+     Reading symbol data from wherever/vw/demo/rdb/prog.o... done.
+
+   You can also use the `load' command to reload an object module after
+editing and recompiling the corresponding source file.  Note that this
+makes GDB delete all currently-defined breakpoints, auto-displays, and
+convenience variables, and to clear the value history.  (This is
+necessary in order to preserve the integrity of debugger's data
+structures that reference the target system's symbol table.)
+
+
+File: gdb.info,  Node: VxWorks Attach,  Prev: VxWorks Download,  Up: VxWorks
+
+21.2.1.3 Running Tasks
+......................
+
+You can also attach to an existing task using the `attach' command as
+follows:
+
+     (vxgdb) attach TASK
+
+where TASK is the VxWorks hexadecimal task ID.  The task can be running
+or suspended when you attach to it.  Running tasks are suspended at the
+time of attachment.
+
+
+File: gdb.info,  Node: Embedded Processors,  Next: Architectures,  Prev: Embedded OS,  Up: Configurations
+
+21.3 Embedded Processors
+========================
+
+This section goes into details specific to particular embedded
+configurations.
+
+   Whenever a specific embedded processor has a simulator, GDB allows
+to send an arbitrary command to the simulator.
+
+`sim COMMAND'
+     Send an arbitrary COMMAND string to the simulator.  Consult the
+     documentation for the specific simulator in use for information
+     about acceptable commands.
+
+* Menu:
+
+* ARM::                         ARM RDI
+* M32R/D::                      Renesas M32R/D
+* M68K::                        Motorola M68K
+* MicroBlaze::			Xilinx MicroBlaze
+* MIPS Embedded::               MIPS Embedded
+* OpenRISC 1000::               OpenRisc 1000
+* PowerPC Embedded::            PowerPC Embedded
+* PA::                          HP PA Embedded
+* Sparclet::                    Tsqware Sparclet
+* Sparclite::                   Fujitsu Sparclite
+* Z8000::                       Zilog Z8000
+* AVR::                         Atmel AVR
+* CRIS::                        CRIS
+* Super-H::                     Renesas Super-H
+
+
+File: gdb.info,  Node: ARM,  Next: M32R/D,  Up: Embedded Processors
+
+21.3.1 ARM
+----------
+
+`target rdi DEV'
+     ARM Angel monitor, via RDI library interface to ADP protocol.  You
+     may use this target to communicate with both boards running the
+     Angel monitor, or with the EmbeddedICE JTAG debug device.
+
+`target rdp DEV'
+     ARM Demon monitor.
+
+
+   GDB provides the following ARM-specific commands:
+
+`set arm disassembler'
+     This commands selects from a list of disassembly styles.  The
+     `"std"' style is the standard style.
+
+`show arm disassembler'
+     Show the current disassembly style.
+
+`set arm apcs32'
+     This command toggles ARM operation mode between 32-bit and 26-bit.
+
+`show arm apcs32'
+     Display the current usage of the ARM 32-bit mode.
+
+`set arm fpu FPUTYPE'
+     This command sets the ARM floating-point unit (FPU) type.  The
+     argument FPUTYPE can be one of these:
+
+    `auto'
+          Determine the FPU type by querying the OS ABI.
+
+    `softfpa'
+          Software FPU, with mixed-endian doubles on little-endian ARM
+          processors.
+
+    `fpa'
+          GCC-compiled FPA co-processor.
+
+    `softvfp'
+          Software FPU with pure-endian doubles.
+
+    `vfp'
+          VFP co-processor.
+
+`show arm fpu'
+     Show the current type of the FPU.
+
+`set arm abi'
+     This command forces GDB to use the specified ABI.
+
+`show arm abi'
+     Show the currently used ABI.
+
+`set arm fallback-mode (arm|thumb|auto)'
+     GDB uses the symbol table, when available, to determine whether
+     instructions are ARM or Thumb.  This command controls GDB's
+     default behavior when the symbol table is not available.  The
+     default is `auto', which causes GDB to use the current execution
+     mode (from the `T' bit in the `CPSR' register).
+
+`show arm fallback-mode'
+     Show the current fallback instruction mode.
+
+`set arm force-mode (arm|thumb|auto)'
+     This command overrides use of the symbol table to determine whether
+     instructions are ARM or Thumb.  The default is `auto', which
+     causes GDB to use the symbol table and then the setting of `set
+     arm fallback-mode'.
+
+`show arm force-mode'
+     Show the current forced instruction mode.
+
+`set debug arm'
+     Toggle whether to display ARM-specific debugging messages from the
+     ARM target support subsystem.
+
+`show debug arm'
+     Show whether ARM-specific debugging messages are enabled.
+
+   The following commands are available when an ARM target is debugged
+using the RDI interface:
+
+`rdilogfile [FILE]'
+     Set the filename for the ADP (Angel Debugger Protocol) packet log.
+     With an argument, sets the log file to the specified FILE.  With
+     no argument, show the current log file name.  The default log file
+     is `rdi.log'.
+
+`rdilogenable [ARG]'
+     Control logging of ADP packets.  With an argument of 1 or `"yes"'
+     enables logging, with an argument 0 or `"no"' disables it.  With
+     no arguments displays the current setting.  When logging is
+     enabled, ADP packets exchanged between GDB and the RDI target
+     device are logged to a file.
+
+`set rdiromatzero'
+     Tell GDB whether the target has ROM at address 0.  If on, vector
+     catching is disabled, so that zero address can be used.  If off
+     (the default), vector catching is enabled.  For this command to
+     take effect, it needs to be invoked prior to the `target rdi'
+     command.
+
+`show rdiromatzero'
+     Show the current setting of ROM at zero address.
+
+`set rdiheartbeat'
+     Enable or disable RDI heartbeat packets.  It is not recommended to
+     turn on this option, since it confuses ARM and EPI JTAG interface,
+     as well as the Angel monitor.
+
+`show rdiheartbeat'
+     Show the setting of RDI heartbeat packets.
+
+`target sim [SIMARGS] ...'
+     The GDB ARM simulator accepts the following optional arguments.
+
+    `--swi-support=TYPE'
+          Tell the simulator which SWI interfaces to support.  TYPE may
+          be a comma separated list of the following values.  The
+          default value is `all'.
+
+         `none'
+
+         `demon'
+
+         `angel'
+
+         `redboot'
+
+         `all'
+
+
+File: gdb.info,  Node: M32R/D,  Next: M68K,  Prev: ARM,  Up: Embedded Processors
+
+21.3.2 Renesas M32R/D and M32R/SDI
+----------------------------------
+
+`target m32r DEV'
+     Renesas M32R/D ROM monitor.
+
+`target m32rsdi DEV'
+     Renesas M32R SDI server, connected via parallel port to the board.
+
+   The following GDB commands are specific to the M32R monitor:
+
+`set download-path PATH'
+     Set the default path for finding downloadable SREC files.
+
+`show download-path'
+     Show the default path for downloadable SREC files.
+
+`set board-address ADDR'
+     Set the IP address for the M32R-EVA target board.
+
+`show board-address'
+     Show the current IP address of the target board.
+
+`set server-address ADDR'
+     Set the IP address for the download server, which is the GDB's
+     host machine.
+
+`show server-address'
+     Display the IP address of the download server.
+
+`upload [FILE]'
+     Upload the specified SREC FILE via the monitor's Ethernet upload
+     capability.  If no FILE argument is given, the current executable
+     file is uploaded.
+
+`tload [FILE]'
+     Test the `upload' command.
+
+   The following commands are available for M32R/SDI:
+
+`sdireset'
+     This command resets the SDI connection.
+
+`sdistatus'
+     This command shows the SDI connection status.
+
+`debug_chaos'
+     Instructs the remote that M32R/Chaos debugging is to be used.
+
+`use_debug_dma'
+     Instructs the remote to use the DEBUG_DMA method of accessing
+     memory.
+
+`use_mon_code'
+     Instructs the remote to use the MON_CODE method of accessing
+     memory.
+
+`use_ib_break'
+     Instructs the remote to set breakpoints by IB break.
+
+`use_dbt_break'
+     Instructs the remote to set breakpoints by DBT.
+
+
+File: gdb.info,  Node: M68K,  Next: MicroBlaze,  Prev: M32R/D,  Up: Embedded Processors
+
+21.3.3 M68k
+-----------
+
+The Motorola m68k configuration includes ColdFire support, and a target
+command for the following ROM monitor.
+
+`target dbug DEV'
+     dBUG ROM monitor for Motorola ColdFire.
+
+
+
+File: gdb.info,  Node: MicroBlaze,  Next: MIPS Embedded,  Prev: M68K,  Up: Embedded Processors
+
+21.3.4 MicroBlaze
+-----------------
+
+The MicroBlaze is a soft-core processor supported on various Xilinx
+FPGAs, such as Spartan or Virtex series.  Boards with these processors
+usually have JTAG ports which connect to a host system running the
+Xilinx Embedded Development Kit (EDK) or Software Development Kit (SDK).
+This host system is used to download the configuration bitstream to the
+target FPGA.  The Xilinx Microprocessor Debugger (XMD) program
+communicates with the target board using the JTAG interface and
+presents a `gdbserver' interface to the board.  By default `xmd' uses
+port `1234'.  (While it is possible to change this default port, it
+requires the use of undocumented `xmd' commands.  Contact Xilinx
+support if you need to do this.)
+
+   Use these GDB commands to connect to the MicroBlaze target processor.
+
+`target remote :1234'
+     Use this command to connect to the target if you are running GDB
+     on the same system as `xmd'.
+
+`target remote XMD-HOST:1234'
+     Use this command to connect to the target if it is connected to
+     `xmd' running on a different system named XMD-HOST.
+
+`load'
+     Use this command to download a program to the MicroBlaze target.
+
+`set debug microblaze N'
+     Enable MicroBlaze-specific debugging messages if non-zero.
+
+`show debug microblaze N'
+     Show MicroBlaze-specific debugging level.
+
+
+File: gdb.info,  Node: MIPS Embedded,  Next: OpenRISC 1000,  Prev: MicroBlaze,  Up: Embedded Processors
+
+21.3.5 MIPS Embedded
+--------------------
+
+GDB can use the MIPS remote debugging protocol to talk to a MIPS board
+attached to a serial line.  This is available when you configure GDB
+with `--target=mips-elf'.
+
+   Use these GDB commands to specify the connection to your target
+board:
+
+`target mips PORT'
+     To run a program on the board, start up `gdb' with the name of
+     your program as the argument.  To connect to the board, use the
+     command `target mips PORT', where PORT is the name of the serial
+     port connected to the board.  If the program has not already been
+     downloaded to the board, you may use the `load' command to
+     download it.  You can then use all the usual GDB commands.
+
+     For example, this sequence connects to the target board through a
+     serial port, and loads and runs a program called PROG through the
+     debugger:
+
+          host$ gdb PROG
+          GDB is free software and ...
+          (gdb) target mips /dev/ttyb
+          (gdb) load PROG
+          (gdb) run
+
+`target mips HOSTNAME:PORTNUMBER'
+     On some GDB host configurations, you can specify a TCP connection
+     (for instance, to a serial line managed by a terminal
+     concentrator) instead of a serial port, using the syntax
+     `HOSTNAME:PORTNUMBER'.
+
+`target pmon PORT'
+     PMON ROM monitor.
+
+`target ddb PORT'
+     NEC's DDB variant of PMON for Vr4300.
+
+`target lsi PORT'
+     LSI variant of PMON.
+
+`target r3900 DEV'
+     Densan DVE-R3900 ROM monitor for Toshiba R3900 Mips.
+
+`target array DEV'
+     Array Tech LSI33K RAID controller board.
+
+
+GDB also supports these special commands for MIPS targets:
+
+`set mipsfpu double'
+`set mipsfpu single'
+`set mipsfpu none'
+`set mipsfpu auto'
+`show mipsfpu'
+     If your target board does not support the MIPS floating point
+     coprocessor, you should use the command `set mipsfpu none' (if you
+     need this, you may wish to put the command in your GDB init file).
+     This tells GDB how to find the return value of functions which
+     return floating point values.  It also allows GDB to avoid saving
+     the floating point registers when calling functions on the board.
+     If you are using a floating point coprocessor with only single
+     precision floating point support, as on the R4650 processor, use
+     the command `set mipsfpu single'.  The default double precision
+     floating point coprocessor may be selected using `set mipsfpu
+     double'.
+
+     In previous versions the only choices were double precision or no
+     floating point, so `set mipsfpu on' will select double precision
+     and `set mipsfpu off' will select no floating point.
+
+     As usual, you can inquire about the `mipsfpu' variable with `show
+     mipsfpu'.
+
+`set timeout SECONDS'
+`set retransmit-timeout SECONDS'
+`show timeout'
+`show retransmit-timeout'
+     You can control the timeout used while waiting for a packet, in
+     the MIPS remote protocol, with the `set timeout SECONDS' command.
+     The default is 5 seconds.  Similarly, you can control the timeout
+     used while waiting for an acknowledgment of a packet with the `set
+     retransmit-timeout SECONDS' command.  The default is 3 seconds.
+     You can inspect both values with `show timeout' and `show
+     retransmit-timeout'.  (These commands are _only_ available when
+     GDB is configured for `--target=mips-elf'.)
+
+     The timeout set by `set timeout' does not apply when GDB is
+     waiting for your program to stop.  In that case, GDB waits forever
+     because it has no way of knowing how long the program is going to
+     run before stopping.
+
+`set syn-garbage-limit NUM'
+     Limit the maximum number of characters GDB should ignore when it
+     tries to synchronize with the remote target.  The default is 10
+     characters.  Setting the limit to -1 means there's no limit.
+
+`show syn-garbage-limit'
+     Show the current limit on the number of characters to ignore when
+     trying to synchronize with the remote system.
+
+`set monitor-prompt PROMPT'
+     Tell GDB to expect the specified PROMPT string from the remote
+     monitor.  The default depends on the target:
+    pmon target
+          `PMON'
+
+    ddb target
+          `NEC010'
+
+    lsi target
+          `PMON>'
+
+`show monitor-prompt'
+     Show the current strings GDB expects as the prompt from the remote
+     monitor.
+
+`set monitor-warnings'
+     Enable or disable monitor warnings about hardware breakpoints.
+     This has effect only for the `lsi' target.  When on, GDB will
+     display warning messages whose codes are returned by the `lsi'
+     PMON monitor for breakpoint commands.
+
+`show monitor-warnings'
+     Show the current setting of printing monitor warnings.
+
+`pmon COMMAND'
+     This command allows sending an arbitrary COMMAND string to the
+     monitor.  The monitor must be in debug mode for this to work.
+
+
+File: gdb.info,  Node: OpenRISC 1000,  Next: PowerPC Embedded,  Prev: MIPS Embedded,  Up: Embedded Processors
+
+21.3.6 OpenRISC 1000
+--------------------
+
+See OR1k Architecture document (`www.opencores.org') for more
+information about platform and commands.
+
+`target jtag jtag://HOST:PORT'
+     Connects to remote JTAG server.  JTAG remote server can be either
+     an or1ksim or JTAG server, connected via parallel port to the
+     board.
+
+     Example: `target jtag jtag://localhost:9999'
+
+`or1ksim COMMAND'
+     If connected to `or1ksim' OpenRISC 1000 Architectural Simulator,
+     proprietary commands can be executed.
+
+`info or1k spr'
+     Displays spr groups.
+
+`info or1k spr GROUP'
+`info or1k spr GROUPNO'
+     Displays register names in selected group.
+
+`info or1k spr GROUP REGISTER'
+`info or1k spr REGISTER'
+`info or1k spr GROUPNO REGISTERNO'
+`info or1k spr REGISTERNO'
+     Shows information about specified spr register.
+
+`spr GROUP REGISTER VALUE'
+`spr REGISTER VALUE'
+`spr GROUPNO REGISTERNO VALUE'
+`spr REGISTERNO VALUE'
+     Writes VALUE to specified spr register.
+
+   Some implementations of OpenRISC 1000 Architecture also have
+hardware trace.  It is very similar to GDB trace, except it does not
+interfere with normal program execution and is thus much faster.
+Hardware breakpoints/watchpoint triggers can be set using:
+`$LEA/$LDATA'
+     Load effective address/data
+
+`$SEA/$SDATA'
+     Store effective address/data
+
+`$AEA/$ADATA'
+     Access effective address ($SEA or $LEA) or data ($SDATA/$LDATA)
+
+`$FETCH'
+     Fetch data
+
+   When triggered, it can capture low level data, like: `PC', `LSEA',
+`LDATA', `SDATA', `READSPR', `WRITESPR', `INSTR'.
+
+   `htrace' commands: 
+`hwatch CONDITIONAL'
+     Set hardware watchpoint on combination of Load/Store Effective
+     Address(es) or Data.  For example:
+
+     `hwatch ($LEA == my_var) && ($LDATA < 50) || ($SEA == my_var) &&
+     ($SDATA >= 50)'
+
+     `hwatch ($LEA == my_var) && ($LDATA < 50) || ($SEA == my_var) &&
+     ($SDATA >= 50)'
+
+`htrace info'
+     Display information about current HW trace configuration.
+
+`htrace trigger CONDITIONAL'
+     Set starting criteria for HW trace.
+
+`htrace qualifier CONDITIONAL'
+     Set acquisition qualifier for HW trace.
+
+`htrace stop CONDITIONAL'
+     Set HW trace stopping criteria.
+
+`htrace record [DATA]*'
+     Selects the data to be recorded, when qualifier is met and HW
+     trace was triggered.
+
+`htrace enable'
+`htrace disable'
+     Enables/disables the HW trace.
+
+`htrace rewind [FILENAME]'
+     Clears currently recorded trace data.
+
+     If filename is specified, new trace file is made and any newly
+     collected data will be written there.
+
+`htrace print [START [LEN]]'
+     Prints trace buffer, using current record configuration.
+
+`htrace mode continuous'
+     Set continuous trace mode.
+
+`htrace mode suspend'
+     Set suspend trace mode.
+
+
+
+File: gdb.info,  Node: PowerPC Embedded,  Next: PA,  Prev: OpenRISC 1000,  Up: Embedded Processors
+
+21.3.7 PowerPC Embedded
+-----------------------
+
+GDB supports using the DVC (Data Value Compare) register to implement
+in hardware simple hardware watchpoint conditions of the form:
+
+     (gdb) watch ADDRESS|VARIABLE \
+       if  ADDRESS|VARIABLE == CONSTANT EXPRESSION
+
+   The DVC register will be automatically used when GDB detects such
+pattern in a condition expression, and the created watchpoint uses one
+debug register (either the `exact-watchpoints' option is on and the
+variable is scalar, or the variable has a length of one byte).  This
+feature is available in native GDB running on a Linux kernel version
+2.6.34 or newer.
+
+   When running on PowerPC embedded processors, GDB automatically uses
+ranged hardware watchpoints, unless the `exact-watchpoints' option is
+on, in which case watchpoints using only one debug register are created
+when watching variables of scalar types.
+
+   You can create an artificial array to watch an arbitrary memory
+region using one of the following commands (*note Expressions::):
+
+     (gdb) watch *((char *) ADDRESS)@LENGTH
+     (gdb) watch {char[LENGTH]} ADDRESS
+
+   PowerPC embedded processors support masked watchpoints.  See the
+discussion about the `mask' argument in *Note Set Watchpoints::.
+
+   PowerPC embedded processors support hardware accelerated "ranged
+breakpoints".  A ranged breakpoint stops execution of the inferior
+whenever it executes an instruction at any address within the range it
+specifies.  To set a ranged breakpoint in GDB, use the `break-range'
+command.
+
+   GDB provides the following PowerPC-specific commands:
+
+`break-range START-LOCATION, END-LOCATION'
+     Set a breakpoint for an address range.  START-LOCATION and
+     END-LOCATION can specify a function name, a line number, an offset
+     of lines from the current line or from the start location, or an
+     address of an instruction (see *Note Specify Location::, for a
+     list of all the possible ways to specify a LOCATION.)  The
+     breakpoint will stop execution of the inferior whenever it
+     executes an instruction at any address within the specified range,
+     (including START-LOCATION and END-LOCATION.)
+
+`set powerpc soft-float'
+`show powerpc soft-float'
+     Force GDB to use (or not use) a software floating point calling
+     convention.  By default, GDB selects the calling convention based
+     on the selected architecture and the provided executable file.
+
+`set powerpc vector-abi'
+`show powerpc vector-abi'
+     Force GDB to use the specified calling convention for vector
+     arguments and return values.  The valid options are `auto';
+     `generic', to avoid vector registers even if they are present;
+     `altivec', to use AltiVec registers; and `spe' to use SPE
+     registers.  By default, GDB selects the calling convention based
+     on the selected architecture and the provided executable file.
+
+`set powerpc exact-watchpoints'
+`show powerpc exact-watchpoints'
+     Allow GDB to use only one debug register when watching a variable
+     of scalar type, thus assuming that the variable is accessed
+     through the address of its first byte.
+
+`target dink32 DEV'
+     DINK32 ROM monitor.
+
+`target ppcbug DEV'
+
+`target ppcbug1 DEV'
+     PPCBUG ROM monitor for PowerPC.
+
+`target sds DEV'
+     SDS monitor, running on a PowerPC board (such as Motorola's ADS).
+
+   The following commands specific to the SDS protocol are supported by
+GDB:
+
+`set sdstimeout NSEC'
+     Set the timeout for SDS protocol reads to be NSEC seconds.  The
+     default is 2 seconds.
+
+`show sdstimeout'
+     Show the current value of the SDS timeout.
+
+`sds COMMAND'
+     Send the specified COMMAND string to the SDS monitor.
+
+
+File: gdb.info,  Node: PA,  Next: Sparclet,  Prev: PowerPC Embedded,  Up: Embedded Processors
+
+21.3.8 HP PA Embedded
+---------------------
+
+`target op50n DEV'
+     OP50N monitor, running on an OKI HPPA board.
+
+`target w89k DEV'
+     W89K monitor, running on a Winbond HPPA board.
+
+
+
+File: gdb.info,  Node: Sparclet,  Next: Sparclite,  Prev: PA,  Up: Embedded Processors
+
+21.3.9 Tsqware Sparclet
+-----------------------
+
+GDB enables developers to debug tasks running on Sparclet targets from
+a Unix host.  GDB uses code that runs on both the Unix host and on the
+Sparclet target.  The program `gdb' is installed and executed on the
+Unix host.
+
+`remotetimeout ARGS'
+     GDB supports the option `remotetimeout'.  This option is set by
+     the user, and  ARGS represents the number of seconds GDB waits for
+     responses.
+
+   When compiling for debugging, include the options `-g' to get debug
+information and `-Ttext' to relocate the program to where you wish to
+load it on the target.  You may also want to add the options `-n' or
+`-N' in order to reduce the size of the sections.  Example:
+
+     sparclet-aout-gcc prog.c -Ttext 0x12010000 -g -o prog -N
+
+   You can use `objdump' to verify that the addresses are what you
+intended:
+
+     sparclet-aout-objdump --headers --syms prog
+
+   Once you have set your Unix execution search path to find GDB, you
+are ready to run GDB.  From your Unix host, run `gdb' (or
+`sparclet-aout-gdb', depending on your installation).
+
+   GDB comes up showing the prompt:
+
+     (gdbslet)
+
+* Menu:
+
+* Sparclet File::                Setting the file to debug
+* Sparclet Connection::          Connecting to Sparclet
+* Sparclet Download::            Sparclet download
+* Sparclet Execution::           Running and debugging
+
+
+File: gdb.info,  Node: Sparclet File,  Next: Sparclet Connection,  Up: Sparclet
+
+21.3.9.1 Setting File to Debug
+..............................
+
+The GDB command `file' lets you choose with program to debug.
+
+     (gdbslet) file prog
+
+   GDB then attempts to read the symbol table of `prog'.  GDB locates
+the file by searching the directories listed in the command search path.
+If the file was compiled with debug information (option `-g'), source
+files will be searched as well.  GDB locates the source files by
+searching the directories listed in the directory search path (*note
+Your Program's Environment: Environment.).  If it fails to find a file,
+it displays a message such as:
+
+     prog: No such file or directory.
+
+   When this happens, add the appropriate directories to the search
+paths with the GDB commands `path' and `dir', and execute the `target'
+command again.
+
+
+File: gdb.info,  Node: Sparclet Connection,  Next: Sparclet Download,  Prev: Sparclet File,  Up: Sparclet
+
+21.3.9.2 Connecting to Sparclet
+...............................
+
+The GDB command `target' lets you connect to a Sparclet target.  To
+connect to a target on serial port "`ttya'", type:
+
+     (gdbslet) target sparclet /dev/ttya
+     Remote target sparclet connected to /dev/ttya
+     main () at ../prog.c:3
+
+   GDB displays messages like these:
+
+     Connected to ttya.
+
+
+File: gdb.info,  Node: Sparclet Download,  Next: Sparclet Execution,  Prev: Sparclet Connection,  Up: Sparclet
+
+21.3.9.3 Sparclet Download
+..........................
+
+Once connected to the Sparclet target, you can use the GDB `load'
+command to download the file from the host to the target.  The file
+name and load offset should be given as arguments to the `load' command.
+Since the file format is aout, the program must be loaded to the
+starting address.  You can use `objdump' to find out what this value
+is.  The load offset is an offset which is added to the VMA (virtual
+memory address) of each of the file's sections.  For instance, if the
+program `prog' was linked to text address 0x1201000, with data at
+0x12010160 and bss at 0x12010170, in GDB, type:
+
+     (gdbslet) load prog 0x12010000
+     Loading section .text, size 0xdb0 vma 0x12010000
+
+   If the code is loaded at a different address then what the program
+was linked to, you may need to use the `section' and `add-symbol-file'
+commands to tell GDB where to map the symbol table.
+
+
+File: gdb.info,  Node: Sparclet Execution,  Prev: Sparclet Download,  Up: Sparclet
+
+21.3.9.4 Running and Debugging
+..............................
+
+You can now begin debugging the task using GDB's execution control
+commands, `b', `step', `run', etc.  See the GDB manual for the list of
+commands.
+
+     (gdbslet) b main
+     Breakpoint 1 at 0x12010000: file prog.c, line 3.
+     (gdbslet) run
+     Starting program: prog
+     Breakpoint 1, main (argc=1, argv=0xeffff21c) at prog.c:3
+     3        char *symarg = 0;
+     (gdbslet) step
+     4        char *execarg = "hello!";
+     (gdbslet)
+
+
+File: gdb.info,  Node: Sparclite,  Next: Z8000,  Prev: Sparclet,  Up: Embedded Processors
+
+21.3.10 Fujitsu Sparclite
+-------------------------
+
+`target sparclite DEV'
+     Fujitsu sparclite boards, used only for the purpose of loading.
+     You must use an additional command to debug the program.  For
+     example: target remote DEV using GDB standard remote protocol.
+
+
+
+File: gdb.info,  Node: Z8000,  Next: AVR,  Prev: Sparclite,  Up: Embedded Processors
+
+21.3.11 Zilog Z8000
+-------------------
+
+When configured for debugging Zilog Z8000 targets, GDB includes a Z8000
+simulator.
+
+   For the Z8000 family, `target sim' simulates either the Z8002 (the
+unsegmented variant of the Z8000 architecture) or the Z8001 (the
+segmented variant).  The simulator recognizes which architecture is
+appropriate by inspecting the object code.
+
+`target sim ARGS'
+     Debug programs on a simulated CPU.  If the simulator supports setup
+     options, specify them via ARGS.
+
+After specifying this target, you can debug programs for the simulated
+CPU in the same style as programs for your host computer; use the
+`file' command to load a new program image, the `run' command to run
+your program, and so on.
+
+   As well as making available all the usual machine registers (*note
+Registers: Registers.), the Z8000 simulator provides three additional
+items of information as specially named registers:
+
+`cycles'
+     Counts clock-ticks in the simulator.
+
+`insts'
+     Counts instructions run in the simulator.
+
+`time'
+     Execution time in 60ths of a second.
+
+
+   You can refer to these values in GDB expressions with the usual
+conventions; for example, `b fputc if $cycles>5000' sets a conditional
+breakpoint that suspends only after at least 5000 simulated clock ticks.
+
+
+File: gdb.info,  Node: AVR,  Next: CRIS,  Prev: Z8000,  Up: Embedded Processors
+
+21.3.12 Atmel AVR
+-----------------
+
+When configured for debugging the Atmel AVR, GDB supports the following
+AVR-specific commands:
+
+`info io_registers'
+     This command displays information about the AVR I/O registers.  For
+     each register, GDB prints its number and value.
+
+
+File: gdb.info,  Node: CRIS,  Next: Super-H,  Prev: AVR,  Up: Embedded Processors
+
+21.3.13 CRIS
+------------
+
+When configured for debugging CRIS, GDB provides the following
+CRIS-specific commands:
+
+`set cris-version VER'
+     Set the current CRIS version to VER, either `10' or `32'.  The
+     CRIS version affects register names and sizes.  This command is
+     useful in case autodetection of the CRIS version fails.
+
+`show cris-version'
+     Show the current CRIS version.
+
+`set cris-dwarf2-cfi'
+     Set the usage of DWARF-2 CFI for CRIS debugging.  The default is
+     `on'.  Change to `off' when using `gcc-cris' whose version is below
+     `R59'.
+
+`show cris-dwarf2-cfi'
+     Show the current state of using DWARF-2 CFI.
+
+`set cris-mode MODE'
+     Set the current CRIS mode to MODE.  It should only be changed when
+     debugging in guru mode, in which case it should be set to `guru'
+     (the default is `normal').
+
+`show cris-mode'
+     Show the current CRIS mode.
+
+
+File: gdb.info,  Node: Super-H,  Prev: CRIS,  Up: Embedded Processors
+
+21.3.14 Renesas Super-H
+-----------------------
+
+For the Renesas Super-H processor, GDB provides these commands:
+
+`regs'
+     This command is deprecated, and `info all-registers' should be
+     used instead.
+
+     Show the values of all Super-H registers.
+
+`set sh calling-convention CONVENTION'
+     Set the calling-convention used when calling functions from GDB.
+     Allowed values are `gcc', which is the default setting, and
+     `renesas'.  With the `gcc' setting, functions are called using the
+     GCC calling convention.  If the DWARF-2 information of the called
+     function specifies that the function follows the Renesas calling
+     convention, the function is called using the Renesas calling
+     convention.  If the calling convention is set to `renesas', the
+     Renesas calling convention is always used, regardless of the
+     DWARF-2 information.  This can be used to override the default of
+     `gcc' if debug information is missing, or the compiler does not
+     emit the DWARF-2 calling convention entry for a function.
+
+`show sh calling-convention'
+     Show the current calling convention setting.
+
+
+
+File: gdb.info,  Node: Architectures,  Prev: Embedded Processors,  Up: Configurations
+
+21.4 Architectures
+==================
+
+This section describes characteristics of architectures that affect all
+uses of GDB with the architecture, both native and cross.
+
+* Menu:
+
+* i386::
+* Alpha::
+* MIPS::
+* HPPA::               HP PA architecture
+* SPU::                Cell Broadband Engine SPU architecture
+* PowerPC::
+
+
+File: gdb.info,  Node: i386,  Next: Alpha,  Up: Architectures
+
+21.4.1 x86 Architecture-specific Issues
+---------------------------------------
+
+`set struct-convention MODE'
+     Set the convention used by the inferior to return `struct's and
+     `union's from functions to MODE.  Possible values of MODE are
+     `"pcc"', `"reg"', and `"default"' (the default).  `"default"' or
+     `"pcc"' means that `struct's are returned on the stack, while
+     `"reg"' means that a `struct' or a `union' whose size is 1, 2, 4,
+     or 8 bytes will be returned in a register.
+
+`show struct-convention'
+     Show the current setting of the convention to return `struct's
+     from functions.
+
+
+File: gdb.info,  Node: Alpha,  Next: MIPS,  Prev: i386,  Up: Architectures
+
+21.4.2 Alpha
+------------
+
+See the following section.
+
+
+File: gdb.info,  Node: MIPS,  Next: HPPA,  Prev: Alpha,  Up: Architectures
+
+21.4.3 MIPS
+-----------
+
+Alpha- and MIPS-based computers use an unusual stack frame, which
+sometimes requires GDB to search backward in the object code to find
+the beginning of a function.
+
+   To improve response time (especially for embedded applications, where
+GDB may be restricted to a slow serial line for this search) you may
+want to limit the size of this search, using one of these commands:
+
+`set heuristic-fence-post LIMIT'
+     Restrict GDB to examining at most LIMIT bytes in its search for
+     the beginning of a function.  A value of 0 (the default) means
+     there is no limit.  However, except for 0, the larger the limit
+     the more bytes `heuristic-fence-post' must search and therefore
+     the longer it takes to run.  You should only need to use this
+     command when debugging a stripped executable.
+
+`show heuristic-fence-post'
+     Display the current limit.
+
+These commands are available _only_ when GDB is configured for
+debugging programs on Alpha or MIPS processors.
+
+   Several MIPS-specific commands are available when debugging MIPS
+programs:
+
+`set mips abi ARG'
+     Tell GDB which MIPS ABI is used by the inferior.  Possible values
+     of ARG are:
+
+    `auto'
+          The default ABI associated with the current binary (this is
+          the default).
+
+    `o32'
+
+    `o64'
+
+    `n32'
+
+    `n64'
+
+    `eabi32'
+
+    `eabi64'
+
+`show mips abi'
+     Show the MIPS ABI used by GDB to debug the inferior.
+
+`set mips compression ARG'
+     Tell GDB which MIPS compressed ISA (Instruction Set Architecture)
+     encoding is used by the inferior.  GDB uses this for code
+     disassembly and other internal interpretation purposes.  This
+     setting is only referred to when no executable has been associated
+     with the debugging session or the executable does not provide
+     information about the encoding it uses.  Otherwise this setting is
+     automatically updated from information provided by the executable.
+
+     Possible values of ARG are `mips16' and `micromips'.  The default
+     compressed ISA encoding is `mips16', as executables containing
+     MIPS16 code frequently are not identified as such.
+
+     This setting is "sticky"; that is, it retains its value across
+     debugging sessions until reset either explicitly with this command
+     or implicitly from an executable.
+
+     The compiler and/or assembler typically add symbol table
+     annotations to identify functions compiled for the MIPS16 or
+     microMIPS ISAs.  If these function-scope annotations are present,
+     GDB uses them in preference to the global compressed ISA encoding
+     setting.
+
+`show mips compression'
+     Show the MIPS compressed ISA encoding used by GDB to debug the
+     inferior.
+
+`set mipsfpu'
+`show mipsfpu'
+     *Note set mipsfpu: MIPS Embedded.
+
+`set mips mask-address ARG'
+     This command determines whether the most-significant 32 bits of
+     64-bit MIPS addresses are masked off.  The argument ARG can be
+     `on', `off', or `auto'.  The latter is the default setting, which
+     lets GDB determine the correct value.
+
+`show mips mask-address'
+     Show whether the upper 32 bits of MIPS addresses are masked off or
+     not.
+
+`set remote-mips64-transfers-32bit-regs'
+     This command controls compatibility with 64-bit MIPS targets that
+     transfer data in 32-bit quantities.  If you have an old MIPS 64
+     target that transfers 32 bits for some registers, like SR and FSR,
+     and 64 bits for other registers, set this option to `on'.
+
+`show remote-mips64-transfers-32bit-regs'
+     Show the current setting of compatibility with older MIPS 64
+     targets.
+
+`set debug mips'
+     This command turns on and off debugging messages for the
+     MIPS-specific target code in GDB.
+
+`show debug mips'
+     Show the current setting of MIPS debugging messages.
+
+
+File: gdb.info,  Node: HPPA,  Next: SPU,  Prev: MIPS,  Up: Architectures
+
+21.4.4 HPPA
+-----------
+
+When GDB is debugging the HP PA architecture, it provides the following
+special commands:
+
+`set debug hppa'
+     This command determines whether HPPA architecture-specific
+     debugging messages are to be displayed.
+
+`show debug hppa'
+     Show whether HPPA debugging messages are displayed.
+
+`maint print unwind ADDRESS'
+     This command displays the contents of the unwind table entry at the
+     given ADDRESS.
+
+
+
+File: gdb.info,  Node: SPU,  Next: PowerPC,  Prev: HPPA,  Up: Architectures
+
+21.4.5 Cell Broadband Engine SPU architecture
+---------------------------------------------
+
+When GDB is debugging the Cell Broadband Engine SPU architecture, it
+provides the following special commands:
+
+`info spu event'
+     Display SPU event facility status.  Shows current event mask and
+     pending event status.
+
+`info spu signal'
+     Display SPU signal notification facility status.  Shows pending
+     signal-control word and signal notification mode of both signal
+     notification channels.
+
+`info spu mailbox'
+     Display SPU mailbox facility status.  Shows all pending entries,
+     in order of processing, in each of the SPU Write Outbound, SPU
+     Write Outbound Interrupt, and SPU Read Inbound mailboxes.
+
+`info spu dma'
+     Display MFC DMA status.  Shows all pending commands in the MFC DMA
+     queue.  For each entry, opcode, tag, class IDs, effective and
+     local store addresses and transfer size are shown.
+
+`info spu proxydma'
+     Display MFC Proxy-DMA status.  Shows all pending commands in the
+     MFC Proxy-DMA queue.  For each entry, opcode, tag, class IDs,
+     effective and local store addresses and transfer size are shown.
+
+
+   When GDB is debugging a combined PowerPC/SPU application on the Cell
+Broadband Engine, it provides in addition the following special
+commands:
+
+`set spu stop-on-load ARG'
+     Set whether to stop for new SPE threads.  When set to `on', GDB
+     will give control to the user when a new SPE thread enters its
+     `main' function.  The default is `off'.
+
+`show spu stop-on-load'
+     Show whether to stop for new SPE threads.
+
+`set spu auto-flush-cache ARG'
+     Set whether to automatically flush the software-managed cache.
+     When set to `on', GDB will automatically cause the SPE
+     software-managed cache to be flushed whenever SPE execution stops.
+     This provides a consistent view of PowerPC memory that is
+     accessed via the cache.  If an application does not use the
+     software-managed cache, this option has no effect.
+
+`show spu auto-flush-cache'
+     Show whether to automatically flush the software-managed cache.
+
+
+
+File: gdb.info,  Node: PowerPC,  Prev: SPU,  Up: Architectures
+
+21.4.6 PowerPC
+--------------
+
+When GDB is debugging the PowerPC architecture, it provides a set of
+pseudo-registers to enable inspection of 128-bit wide Decimal Floating
+Point numbers stored in the floating point registers. These values must
+be stored in two consecutive registers, always starting at an even
+register like `f0' or `f2'.
+
+   The pseudo-registers go from `$dl0' through `$dl15', and are formed
+by joining the even/odd register pairs `f0' and `f1' for `$dl0', `f2'
+and `f3' for `$dl1' and so on.
+
+   For POWER7 processors, GDB provides a set of pseudo-registers, the
+64-bit wide Extended Floating Point Registers (`f32' through `f63').
+
+
+File: gdb.info,  Node: Controlling GDB,  Next: Extending GDB,  Prev: Configurations,  Up: Top
+
+22 Controlling GDB
+******************
+
+You can alter the way GDB interacts with you by using the `set'
+command.  For commands controlling how GDB displays data, see *Note
+Print Settings: Print Settings.  Other settings are described here.
+
+* Menu:
+
+* Prompt::                      Prompt
+* Editing::                     Command editing
+* Command History::             Command history
+* Screen Size::                 Screen size
+* Numbers::                     Numbers
+* ABI::                         Configuring the current ABI
+* Auto-loading::                Automatically loading associated files
+* Messages/Warnings::           Optional warnings and messages
+* Debugging Output::            Optional messages about internal happenings
+* Other Misc Settings::         Other Miscellaneous Settings
+
+
+File: gdb.info,  Node: Prompt,  Next: Editing,  Up: Controlling GDB
+
+22.1 Prompt
+===========
+
+GDB indicates its readiness to read a command by printing a string
+called the "prompt".  This string is normally `(gdb)'.  You can change
+the prompt string with the `set prompt' command.  For instance, when
+debugging GDB with GDB, it is useful to change the prompt in one of the
+GDB sessions so that you can always tell which one you are talking to.
+
+   _Note:_  `set prompt' does not add a space for you after the prompt
+you set.  This allows you to set a prompt which ends in a space or a
+prompt that does not.
+
+`set prompt NEWPROMPT'
+     Directs GDB to use NEWPROMPT as its prompt string henceforth.
+
+`show prompt'
+     Prints a line of the form: `Gdb's prompt is: YOUR-PROMPT'
+
+   Versions of GDB that ship with Python scripting enabled have prompt
+extensions.  The commands for interacting with these extensions are:
+
+`set extended-prompt PROMPT'
+     Set an extended prompt that allows for substitutions.  *Note
+     gdb.prompt::, for a list of escape sequences that can be used for
+     substitution.  Any escape sequences specified as part of the prompt
+     string are replaced with the corresponding strings each time the
+     prompt is displayed.
+
+     For example:
+
+          set extended-prompt Current working directory: \w (gdb)
+
+     Note that when an extended-prompt is set, it takes control of the
+     PROMPT_HOOK hook.  *Note prompt_hook::, for further information.
+
+`show extended-prompt'
+     Prints the extended prompt.  Any escape sequences specified as
+     part of the prompt string with `set extended-prompt', are replaced
+     with the corresponding strings each time the prompt is displayed.
+
+
+File: gdb.info,  Node: Editing,  Next: Command History,  Prev: Prompt,  Up: Controlling GDB
+
+22.2 Command Editing
+====================
+
+GDB reads its input commands via the "Readline" interface.  This GNU
+library provides consistent behavior for programs which provide a
+command line interface to the user.  Advantages are GNU Emacs-style or
+"vi"-style inline editing of commands, `csh'-like history substitution,
+and a storage and recall of command history across debugging sessions.
+
+   You may control the behavior of command line editing in GDB with the
+command `set'.
+
+`set editing'
+`set editing on'
+     Enable command line editing (enabled by default).
+
+`set editing off'
+     Disable command line editing.
+
+`show editing'
+     Show whether command line editing is enabled.
+
+   *Note Command Line Editing::, for more details about the Readline
+interface.  Users unfamiliar with GNU Emacs or `vi' are encouraged to
+read that chapter.
+
+
+File: gdb.info,  Node: Command History,  Next: Screen Size,  Prev: Editing,  Up: Controlling GDB
+
+22.3 Command History
+====================
+
+GDB can keep track of the commands you type during your debugging
+sessions, so that you can be certain of precisely what happened.  Use
+these commands to manage the GDB command history facility.
+
+   GDB uses the GNU History library, a part of the Readline package, to
+provide the history facility.  *Note Using History Interactively::, for
+the detailed description of the History library.
+
+   To issue a command to GDB without affecting certain aspects of the
+state which is seen by users, prefix it with `server ' (*note Server
+Prefix::).  This means that this command will not affect the command
+history, nor will it affect GDB's notion of which command to repeat if
+<RET> is pressed on a line by itself.
+
+   The server prefix does not affect the recording of values into the
+value history; to print a value without recording it into the value
+history, use the `output' command instead of the `print' command.
+
+   Here is the description of GDB commands related to command history.
+
+`set history filename FNAME'
+     Set the name of the GDB command history file to FNAME.  This is
+     the file where GDB reads an initial command history list, and
+     where it writes the command history from this session when it
+     exits.  You can access this list through history expansion or
+     through the history command editing characters listed below.  This
+     file defaults to the value of the environment variable
+     `GDBHISTFILE', or to `./.gdb_history' (`./_gdb_history' on MS-DOS)
+     if this variable is not set.
+
+`set history save'
+`set history save on'
+     Record command history in a file, whose name may be specified with
+     the `set history filename' command.  By default, this option is
+     disabled.
+
+`set history save off'
+     Stop recording command history in a file.
+
+`set history size SIZE'
+     Set the number of commands which GDB keeps in its history list.
+     This defaults to the value of the environment variable `HISTSIZE',
+     or to 256 if this variable is not set.
+
+   History expansion assigns special meaning to the character `!'.
+*Note Event Designators::, for more details.
+
+   Since `!' is also the logical not operator in C, history expansion
+is off by default. If you decide to enable history expansion with the
+`set history expansion on' command, you may sometimes need to follow
+`!' (when it is used as logical not, in an expression) with a space or
+a tab to prevent it from being expanded.  The readline history
+facilities do not attempt substitution on the strings `!=' and `!(',
+even when history expansion is enabled.
+
+   The commands to control history expansion are:
+
+`set history expansion on'
+`set history expansion'
+     Enable history expansion.  History expansion is off by default.
+
+`set history expansion off'
+     Disable history expansion.
+
+`show history'
+`show history filename'
+`show history save'
+`show history size'
+`show history expansion'
+     These commands display the state of the GDB history parameters.
+     `show history' by itself displays all four states.
+
+`show commands'
+     Display the last ten commands in the command history.
+
+`show commands N'
+     Print ten commands centered on command number N.
+
+`show commands +'
+     Print ten commands just after the commands last printed.
+
+
+File: gdb.info,  Node: Screen Size,  Next: Numbers,  Prev: Command History,  Up: Controlling GDB
+
+22.4 Screen Size
+================
+
+Certain commands to GDB may produce large amounts of information output
+to the screen.  To help you read all of it, GDB pauses and asks you for
+input at the end of each page of output.  Type <RET> when you want to
+continue the output, or `q' to discard the remaining output.  Also, the
+screen width setting determines when to wrap lines of output.
+Depending on what is being printed, GDB tries to break the line at a
+readable place, rather than simply letting it overflow onto the
+following line.
+
+   Normally GDB knows the size of the screen from the terminal driver
+software.  For example, on Unix GDB uses the termcap data base together
+with the value of the `TERM' environment variable and the `stty rows'
+and `stty cols' settings.  If this is not correct, you can override it
+with the `set height' and `set width' commands:
+
+`set height LPP'
+`show height'
+`set width CPL'
+`show width'
+     These `set' commands specify a screen height of LPP lines and a
+     screen width of CPL characters.  The associated `show' commands
+     display the current settings.
+
+     If you specify a height of zero lines, GDB does not pause during
+     output no matter how long the output is.  This is useful if output
+     is to a file or to an editor buffer.
+
+     Likewise, you can specify `set width 0' to prevent GDB from
+     wrapping its output.
+
+`set pagination on'
+`set pagination off'
+     Turn the output pagination on or off; the default is on.  Turning
+     pagination off is the alternative to `set height 0'.  Note that
+     running GDB with the `--batch' option (*note -batch: Mode
+     Options.) also automatically disables pagination.
+
+`show pagination'
+     Show the current pagination mode.
+
+
+File: gdb.info,  Node: Numbers,  Next: ABI,  Prev: Screen Size,  Up: Controlling GDB
+
+22.5 Numbers
+============
+
+You can always enter numbers in octal, decimal, or hexadecimal in GDB
+by the usual conventions: octal numbers begin with `0', decimal numbers
+end with `.', and hexadecimal numbers begin with `0x'.  Numbers that
+neither begin with `0' or `0x', nor end with a `.' are, by default,
+entered in base 10; likewise, the default display for numbers--when no
+particular format is specified--is base 10.  You can change the default
+base for both input and output with the commands described below.
+
+`set input-radix BASE'
+     Set the default base for numeric input.  Supported choices for
+     BASE are decimal 8, 10, or 16.  BASE must itself be specified
+     either unambiguously or using the current input radix; for
+     example, any of
+
+          set input-radix 012
+          set input-radix 10.
+          set input-radix 0xa
+
+     sets the input base to decimal.  On the other hand, `set
+     input-radix 10' leaves the input radix unchanged, no matter what
+     it was, since `10', being without any leading or trailing signs of
+     its base, is interpreted in the current radix.  Thus, if the
+     current radix is 16, `10' is interpreted in hex, i.e. as 16
+     decimal, which doesn't change the radix.
+
+`set output-radix BASE'
+     Set the default base for numeric display.  Supported choices for
+     BASE are decimal 8, 10, or 16.  BASE must itself be specified
+     either unambiguously or using the current input radix.
+
+`show input-radix'
+     Display the current default base for numeric input.
+
+`show output-radix'
+     Display the current default base for numeric display.
+
+`set radix [BASE]'
+`show radix'
+     These commands set and show the default base for both input and
+     output of numbers.  `set radix' sets the radix of input and output
+     to the same base; without an argument, it resets the radix back to
+     its default value of 10.
+
+
+
+File: gdb.info,  Node: ABI,  Next: Auto-loading,  Prev: Numbers,  Up: Controlling GDB
+
+22.6 Configuring the Current ABI
+================================
+
+GDB can determine the "ABI" (Application Binary Interface) of your
+application automatically.  However, sometimes you need to override its
+conclusions.  Use these commands to manage GDB's view of the current
+ABI.
+
+   One GDB configuration can debug binaries for multiple operating
+system targets, either via remote debugging or native emulation.  GDB
+will autodetect the "OS ABI" (Operating System ABI) in use, but you can
+override its conclusion using the `set osabi' command.  One example
+where this is useful is in debugging of binaries which use an alternate
+C library (e.g. UCLIBC for GNU/Linux) which does not have the same
+identifying marks that the standard C library for your platform
+provides.
+
+`show osabi'
+     Show the OS ABI currently in use.
+
+`set osabi'
+     With no argument, show the list of registered available OS ABI's.
+
+`set osabi ABI'
+     Set the current OS ABI to ABI.
+
+   Generally, the way that an argument of type `float' is passed to a
+function depends on whether the function is prototyped.  For a
+prototyped (i.e. ANSI/ISO style) function, `float' arguments are passed
+unchanged, according to the architecture's convention for `float'.  For
+unprototyped (i.e. K&R style) functions, `float' arguments are first
+promoted to type `double' and then passed.
+
+   Unfortunately, some forms of debug information do not reliably
+indicate whether a function is prototyped.  If GDB calls a function
+that is not marked as prototyped, it consults `set
+coerce-float-to-double'.
+
+`set coerce-float-to-double'
+`set coerce-float-to-double on'
+     Arguments of type `float' will be promoted to `double' when passed
+     to an unprototyped function.  This is the default setting.
+
+`set coerce-float-to-double off'
+     Arguments of type `float' will be passed directly to unprototyped
+     functions.
+
+`show coerce-float-to-double'
+     Show the current setting of promoting `float' to `double'.
+
+   GDB needs to know the ABI used for your program's C++ objects.  The
+correct C++ ABI depends on which C++ compiler was used to build your
+application.  GDB only fully supports programs with a single C++ ABI;
+if your program contains code using multiple C++ ABI's or if GDB can
+not identify your program's ABI correctly, you can tell GDB which ABI
+to use.  Currently supported ABI's include "gnu-v2", for `g++' versions
+before 3.0, "gnu-v3", for `g++' versions 3.0 and later, and "hpaCC" for
+the HP ANSI C++ compiler.  Other C++ compilers may use the "gnu-v2" or
+"gnu-v3" ABI's as well.  The default setting is "auto".
+
+`show cp-abi'
+     Show the C++ ABI currently in use.
+
+`set cp-abi'
+     With no argument, show the list of supported C++ ABI's.
+
+`set cp-abi ABI'
+`set cp-abi auto'
+     Set the current C++ ABI to ABI, or return to automatic detection.
+
+
+File: gdb.info,  Node: Auto-loading,  Next: Messages/Warnings,  Prev: ABI,  Up: Controlling GDB
+
+22.7 Automatically loading associated files
+===========================================
+
+GDB sometimes reads files with commands and settings automatically,
+without being explicitly told so by the user.  We call this feature
+"auto-loading".  While auto-loading is useful for automatically adapting
+GDB to the needs of your project, it can sometimes produce unexpected
+results or introduce security risks (e.g., if the file comes from
+untrusted sources).
+
+   Note that loading of these associated files (including the local
+`.gdbinit' file) requires accordingly configured `auto-load safe-path'
+(*note Auto-loading safe path::).
+
+   For these reasons, GDB includes commands and options to let you
+control when to auto-load files and which files should be auto-loaded.
+
+`set auto-load off'
+     Globally disable loading of all auto-loaded files.  You may want
+     to use this command with the `-iex' option (*note Option
+     -init-eval-command::) such as:
+          $ gdb -iex "set auto-load off" untrusted-executable corefile
+
+     Be aware that system init file (*note System-wide configuration::)
+     and init files from your home directory (*note Home Directory Init
+     File::) still get read (as they come from generally trusted
+     directories).  To prevent GDB from auto-loading even those init
+     files, use the `-nx' option (*note Mode Options::), in addition to
+     `set auto-load no'.
+
+`show auto-load'
+     Show whether auto-loading of each specific `auto-load' file(s) is
+     enabled or disabled.
+
+          (gdb) show auto-load
+          gdb-scripts:  Auto-loading of canned sequences of commands scripts is on.
+          libthread-db:  Auto-loading of inferior specific libthread_db is on.
+          local-gdbinit:  Auto-loading of .gdbinit script from current directory
+                          is on.
+          python-scripts:  Auto-loading of Python scripts is on.
+          safe-path:  List of directories from which it is safe to auto-load files
+                      is $debugdir:$datadir/auto-load.
+          scripts-directory:  List of directories from which to load auto-loaded scripts
+                              is $debugdir:$datadir/auto-load.
+
+`info auto-load'
+     Print whether each specific `auto-load' file(s) have been
+     auto-loaded or not.
+
+          (gdb) info auto-load
+          gdb-scripts:
+          Loaded  Script
+          Yes     /home/user/gdb/gdb-gdb.gdb
+          libthread-db:  No auto-loaded libthread-db.
+          local-gdbinit:  Local .gdbinit file "/home/user/gdb/.gdbinit" has been
+                          loaded.
+          python-scripts:
+          Loaded  Script
+          Yes     /home/user/gdb/gdb-gdb.py
+
+   These are various kinds of files GDB can automatically load:
+
+   * *Note objfile-gdb.py file::, controlled by *Note set auto-load
+     python-scripts::.
+
+   * *Note objfile-gdb.gdb file::, controlled by *Note set auto-load
+     gdb-scripts::.
+
+   * *Note dotdebug_gdb_scripts section::, controlled by *Note set
+     auto-load python-scripts::.
+
+   * *Note Init File in the Current Directory::, controlled by *Note
+     set auto-load local-gdbinit::.
+
+   * *Note libthread_db.so.1 file::, controlled by *Note set auto-load
+     libthread-db::.
+
+   These are GDB control commands for the auto-loading:
+
+*Note set auto-load off::.           Disable auto-loading globally.
+*Note show auto-load::.              Show setting of all kinds of files.
+*Note info auto-load::.              Show state of all kinds of files.
+*Note set auto-load gdb-scripts::.   Control for GDB command scripts.
+*Note show auto-load gdb-scripts::.  Show setting of GDB command scripts.
+*Note info auto-load gdb-scripts::.  Show state of GDB command scripts.
+*Note set auto-load                  Control for GDB Python scripts.
+python-scripts::.                    
+*Note show auto-load                 Show setting of GDB Python scripts.
+python-scripts::.                    
+*Note info auto-load                 Show state of GDB Python scripts.
+python-scripts::.                    
+*Note set auto-load                  Control for GDB auto-loaded scripts
+scripts-directory::.                 location.
+*Note show auto-load                 Show GDB auto-loaded scripts
+scripts-directory::.                 location.
+*Note set auto-load local-gdbinit::. Control for init file in the
+                                     current directory.
+*Note show auto-load                 Show setting of init file in the
+local-gdbinit::.                     current directory.
+*Note info auto-load                 Show state of init file in the
+local-gdbinit::.                     current directory.
+*Note set auto-load libthread-db::.  Control for thread debugging
+                                     library.
+*Note show auto-load libthread-db::. Show setting of thread debugging
+                                     library.
+*Note info auto-load libthread-db::. Show state of thread debugging
+                                     library.
+*Note set auto-load safe-path::.     Control directories trusted for
+                                     automatic loading.
+*Note show auto-load safe-path::.    Show directories trusted for
+                                     automatic loading.
+*Note add-auto-load-safe-path::.     Add directory trusted for automatic
+                                     loading.
+
+* Menu:
+
+* Init File in the Current Directory:: `set/show/info auto-load local-gdbinit'
+* libthread_db.so.1 file::             `set/show/info auto-load libthread-db'
+* objfile-gdb.gdb file::               `set/show/info auto-load gdb-script'
+* Auto-loading safe path::             `set/show/info auto-load safe-path'
+* Auto-loading verbose mode::          `set/show debug auto-load'
+*Note Python Auto-loading::.
+
+
+File: gdb.info,  Node: Init File in the Current Directory,  Next: libthread_db.so.1 file,  Up: Auto-loading
+
+22.7.1 Automatically loading init file in the current directory
+---------------------------------------------------------------
+
+By default, GDB reads and executes the canned sequences of commands
+from init file (if any) in the current working directory, see *Note
+Init File in the Current Directory during Startup::.
+
+   Note that loading of this local `.gdbinit' file also requires
+accordingly configured `auto-load safe-path' (*note Auto-loading safe
+path::).
+
+`set auto-load local-gdbinit [on|off]'
+     Enable or disable the auto-loading of canned sequences of commands
+     (*note Sequences::) found in init file in the current directory.
+
+`show auto-load local-gdbinit'
+     Show whether auto-loading of canned sequences of commands from
+     init file in the current directory is enabled or disabled.
+
+`info auto-load local-gdbinit'
+     Print whether canned sequences of commands from init file in the
+     current directory have been auto-loaded.
+
+
+File: gdb.info,  Node: libthread_db.so.1 file,  Next: objfile-gdb.gdb file,  Prev: Init File in the Current Directory,  Up: Auto-loading
+
+22.7.2 Automatically loading thread debugging library
+-----------------------------------------------------
+
+This feature is currently present only on GNU/Linux native hosts.
+
+   GDB reads in some cases thread debugging library from places specific
+to the inferior (*note set libthread-db-search-path::).
+
+   The special `libthread-db-search-path' entry `$sdir' is processed
+without checking this `set auto-load libthread-db' switch as system
+libraries have to be trusted in general.  In all other cases of
+`libthread-db-search-path' entries GDB checks first if `set auto-load
+libthread-db' is enabled before trying to open such thread debugging
+library.
+
+   Note that loading of this debugging library also requires
+accordingly configured `auto-load safe-path' (*note Auto-loading safe
+path::).
+
+`set auto-load libthread-db [on|off]'
+     Enable or disable the auto-loading of inferior specific thread
+     debugging library.
+
+`show auto-load libthread-db'
+     Show whether auto-loading of inferior specific thread debugging
+     library is enabled or disabled.
+
+`info auto-load libthread-db'
+     Print the list of all loaded inferior specific thread debugging
+     libraries and for each such library print list of inferior PIDs
+     using it.
+
+
+File: gdb.info,  Node: objfile-gdb.gdb file,  Next: Auto-loading safe path,  Prev: libthread_db.so.1 file,  Up: Auto-loading
+
+22.7.3 The `OBJFILE-gdb.gdb' file
+---------------------------------
+
+GDB tries to load an `OBJFILE-gdb.gdb' file containing canned sequences
+of commands (*note Sequences::), as long as `set auto-load gdb-scripts'
+is set to `on'.
+
+   Note that loading of this script file also requires accordingly
+configured `auto-load safe-path' (*note Auto-loading safe path::).
+
+   For more background refer to the similar Python scripts auto-loading
+description (*note objfile-gdb.py file::).
+
+`set auto-load gdb-scripts [on|off]'
+     Enable or disable the auto-loading of canned sequences of commands
+     scripts.
+
+`show auto-load gdb-scripts'
+     Show whether auto-loading of canned sequences of commands scripts
+     is enabled or disabled.
+
+`info auto-load gdb-scripts [REGEXP]'
+     Print the list of all canned sequences of commands scripts that
+     GDB auto-loaded.
+
+   If REGEXP is supplied only canned sequences of commands scripts with
+matching names are printed.
+
+
+File: gdb.info,  Node: Auto-loading safe path,  Next: Auto-loading verbose mode,  Prev: objfile-gdb.gdb file,  Up: Auto-loading
+
+22.7.4 Security restriction for auto-loading
+--------------------------------------------
+
+As the files of inferior can come from untrusted source (such as
+submitted by an application user) GDB does not always load any files
+automatically.  GDB provides the `set auto-load safe-path' setting to
+list directories trusted for loading files not explicitly requested by
+user.  Each directory can also be a shell wildcard pattern.
+
+   If the path is not set properly you will see a warning and the file
+will not get loaded:
+
+     $ ./gdb -q ./gdb
+     Reading symbols from /home/user/gdb/gdb...done.
+     warning: File "/home/user/gdb/gdb-gdb.gdb" auto-loading has been
+              declined by your `auto-load safe-path' set
+              to "$debugdir:$datadir/auto-load".
+     warning: File "/home/user/gdb/gdb-gdb.py" auto-loading has been
+              declined by your `auto-load safe-path' set
+              to "$debugdir:$datadir/auto-load".
+
+   The list of trusted directories is controlled by the following
+commands:
+
+`set auto-load safe-path [DIRECTORIES]'
+     Set the list of directories (and their subdirectories) trusted for
+     automatic loading and execution of scripts.  You can also enter a
+     specific trusted file.  Each directory can also be a shell
+     wildcard pattern; wildcards do not match directory separator - see
+     `FNM_PATHNAME' for system function `fnmatch' (*note fnmatch:
+     (libc)Wildcard Matching.).  If you omit DIRECTORIES, `auto-load
+     safe-path' will be reset to its default value as specified during
+     GDB compilation.
+
+     The list of directories uses path separator (`:' on GNU and Unix
+     systems, `;' on MS-Windows and MS-DOS) to separate directories,
+     similarly to the `PATH' environment variable.
+
+`show auto-load safe-path'
+     Show the list of directories trusted for automatic loading and
+     execution of scripts.
+
+`add-auto-load-safe-path'
+     Add an entry (or list of entries) the list of directories trusted
+     for automatic loading and execution of scripts.  Multiple entries
+     may be delimited by the host platform path separator in use.
+
+   This variable defaults to what `--with-auto-load-dir' has been
+configured to (*note with-auto-load-dir::).  `$debugdir' and `$datadir'
+substitution applies the same as for *Note set auto-load
+scripts-directory::.  The default `set auto-load safe-path' value can
+be also overriden by GDB configuration option
+`--with-auto-load-safe-path'.
+
+   Setting this variable to `/' disables this security protection,
+corresponding GDB configuration option is
+`--without-auto-load-safe-path'.  This variable is supposed to be set
+to the system directories writable by the system superuser only.  Users
+can add their source directories in init files in their home
+directories (*note Home Directory Init File::).  See also deprecated
+init file in the current directory (*note Init File in the Current
+Directory during Startup::).
+
+   To force GDB to load the files it declined to load in the previous
+example, you could use one of the following ways:
+
+`~/.gdbinit': `add-auto-load-safe-path ~/src/gdb'
+     Specify this trusted directory (or a file) as additional component
+     of the list.  You have to specify also any existing directories
+     displayed by by `show auto-load safe-path' (such as `/usr:/bin' in
+     this example).
+
+`gdb -iex "set auto-load safe-path /usr:/bin:~/src/gdb" ...'
+     Specify this directory as in the previous case but just for a
+     single GDB session.
+
+`gdb -iex "set auto-load safe-path /" ...'
+     Disable auto-loading safety for a single GDB session.  This
+     assumes all the files you debug during this GDB session will come
+     from trusted sources.
+
+`./configure --without-auto-load-safe-path'
+     During compilation of GDB you may disable any auto-loading safety.
+     This assumes all the files you will ever debug with this GDB come
+     from trusted sources.
+
+   On the other hand you can also explicitly forbid automatic files
+loading which also suppresses any such warning messages:
+
+`gdb -iex "set auto-load no" ...'
+     You can use GDB command-line option for a single GDB session.
+
+`~/.gdbinit': `set auto-load no'
+     Disable auto-loading globally for the user (*note Home Directory
+     Init File::).  While it is improbable, you could also use system
+     init file instead (*note System-wide configuration::).
+
+   This setting applies to the file names as entered by user.  If no
+entry matches GDB tries as a last resort to also resolve all the file
+names into their canonical form (typically resolving symbolic links)
+and compare the entries again.  GDB already canonicalizes most of the
+filenames on its own before starting the comparison so a canonical form
+of directories is recommended to be entered.
+
+
+File: gdb.info,  Node: Auto-loading verbose mode,  Prev: Auto-loading safe path,  Up: Auto-loading
+
+22.7.5 Displaying files tried for auto-load
+-------------------------------------------
+
+For better visibility of all the file locations where you can place
+scripts to be auto-loaded with inferior -- or to protect yourself
+against accidental execution of untrusted scripts -- GDB provides a
+feature for printing all the files attempted to be loaded.  Both
+existing and non-existing files may be printed.
+
+   For example the list of directories from which it is safe to
+auto-load files (*note Auto-loading safe path::) applies also to
+canonicalized filenames which may not be too obvious while setting it
+up.
+
+     (gdb) set debug auto-load on
+     (gdb) file ~/src/t/true
+     auto-load: Loading canned sequences of commands script "/tmp/true-gdb.gdb"
+                for objfile "/tmp/true".
+     auto-load: Updating directories of "/usr:/opt".
+     auto-load: Using directory "/usr".
+     auto-load: Using directory "/opt".
+     warning: File "/tmp/true-gdb.gdb" auto-loading has been declined
+              by your `auto-load safe-path' set to "/usr:/opt".
+
+`set debug auto-load [on|off]'
+     Set whether to print the filenames attempted to be auto-loaded.
+
+`show debug auto-load'
+     Show whether printing of the filenames attempted to be auto-loaded
+     is turned on or off.
+
+
+File: gdb.info,  Node: Messages/Warnings,  Next: Debugging Output,  Prev: Auto-loading,  Up: Controlling GDB
+
+22.8 Optional Warnings and Messages
+===================================
+
+By default, GDB is silent about its inner workings.  If you are running
+on a slow machine, you may want to use the `set verbose' command.  This
+makes GDB tell you when it does a lengthy internal operation, so you
+will not think it has crashed.
+
+   Currently, the messages controlled by `set verbose' are those which
+announce that the symbol table for a source file is being read; see
+`symbol-file' in *Note Commands to Specify Files: Files.
+
+`set verbose on'
+     Enables GDB output of certain informational messages.
+
+`set verbose off'
+     Disables GDB output of certain informational messages.
+
+`show verbose'
+     Displays whether `set verbose' is on or off.
+
+   By default, if GDB encounters bugs in the symbol table of an object
+file, it is silent; but if you are debugging a compiler, you may find
+this information useful (*note Errors Reading Symbol Files: Symbol
+Errors.).
+
+`set complaints LIMIT'
+     Permits GDB to output LIMIT complaints about each type of unusual
+     symbols before becoming silent about the problem.  Set LIMIT to
+     zero to suppress all complaints; set it to a large number to
+     prevent complaints from being suppressed.
+
+`show complaints'
+     Displays how many symbol complaints GDB is permitted to produce.
+
+
+   By default, GDB is cautious, and asks what sometimes seems to be a
+lot of stupid questions to confirm certain commands.  For example, if
+you try to run a program which is already running:
+
+     (gdb) run
+     The program being debugged has been started already.
+     Start it from the beginning? (y or n)
+
+   If you are willing to unflinchingly face the consequences of your own
+commands, you can disable this "feature":
+
+`set confirm off'
+     Disables confirmation requests.  Note that running GDB with the
+     `--batch' option (*note -batch: Mode Options.) also automatically
+     disables confirmation requests.
+
+`set confirm on'
+     Enables confirmation requests (the default).
+
+`show confirm'
+     Displays state of confirmation requests.
+
+
+   If you need to debug user-defined commands or sourced files you may
+find it useful to enable "command tracing".  In this mode each command
+will be printed as it is executed, prefixed with one or more `+'
+symbols, the quantity denoting the call depth of each command.
+
+`set trace-commands on'
+     Enable command tracing.
+
+`set trace-commands off'
+     Disable command tracing.
+
+`show trace-commands'
+     Display the current state of command tracing.
+
+
+File: gdb.info,  Node: Debugging Output,  Next: Other Misc Settings,  Prev: Messages/Warnings,  Up: Controlling GDB
+
+22.9 Optional Messages about Internal Happenings
+================================================
+
+GDB has commands that enable optional debugging messages from various
+GDB subsystems; normally these commands are of interest to GDB
+maintainers, or when reporting a bug.  This section documents those
+commands.
+
+`set exec-done-display'
+     Turns on or off the notification of asynchronous commands'
+     completion.  When on, GDB will print a message when an
+     asynchronous command finishes its execution.  The default is off.  
+
+`show exec-done-display'
+     Displays the current setting of asynchronous command completion
+     notification.  
+
+`set debug arch'
+     Turns on or off display of gdbarch debugging info.  The default is
+     off 
+
+`show debug arch'
+     Displays the current state of displaying gdbarch debugging info.
+
+`set debug aix-thread'
+     Display debugging messages about inner workings of the AIX thread
+     module.
+
+`show debug aix-thread'
+     Show the current state of AIX thread debugging info display.
+
+`set debug check-physname'
+     Check the results of the "physname" computation.  When reading
+     DWARF debugging information for C++, GDB attempts to compute each
+     entity's name.  GDB can do this computation in two different ways,
+     depending on exactly what information is present.  When enabled,
+     this setting causes GDB to compute the names both ways and display
+     any discrepancies.
+
+`show debug check-physname'
+     Show the current state of "physname" checking.
+
+`set debug dwarf2-die'
+     Dump DWARF2 DIEs after they are read in.  The value is the number
+     of nesting levels to print.  A value of zero turns off the display.
+
+`show debug dwarf2-die'
+     Show the current state of DWARF2 DIE debugging.
+
+`set debug dwarf2-read'
+     Turns on or off display of debugging messages related to reading
+     DWARF debug info.  The default is off.
+
+`show debug dwarf2-read'
+     Show the current state of DWARF2 reader debugging.
+
+`set debug displaced'
+     Turns on or off display of GDB debugging info for the displaced
+     stepping support.  The default is off.
+
+`show debug displaced'
+     Displays the current state of displaying GDB debugging info
+     related to displaced stepping.
+
+`set debug event'
+     Turns on or off display of GDB event debugging info.  The default
+     is off.
+
+`show debug event'
+     Displays the current state of displaying GDB event debugging info.
+
+`set debug expression'
+     Turns on or off display of debugging info about GDB expression
+     parsing.  The default is off.
+
+`show debug expression'
+     Displays the current state of displaying debugging info about GDB
+     expression parsing.
+
+`set debug frame'
+     Turns on or off display of GDB frame debugging info.  The default
+     is off.
+
+`show debug frame'
+     Displays the current state of displaying GDB frame debugging info.
+
+`set debug gnu-nat'
+     Turns on or off debugging messages from the GNU/Hurd debug support.
+
+`show debug gnu-nat'
+     Show the current state of GNU/Hurd debugging messages.
+
+`set debug infrun'
+     Turns on or off display of GDB debugging info for running the
+     inferior.  The default is off.  `infrun.c' contains GDB's runtime
+     state machine used for implementing operations such as
+     single-stepping the inferior.
+
+`show debug infrun'
+     Displays the current state of GDB inferior debugging.
+
+`set debug jit'
+     Turns on or off debugging messages from JIT debug support.
+
+`show debug jit'
+     Displays the current state of GDB JIT debugging.
+
+`set debug lin-lwp'
+     Turns on or off debugging messages from the Linux LWP debug
+     support.
+
+`show debug lin-lwp'
+     Show the current state of Linux LWP debugging messages.
+
+`set debug observer'
+     Turns on or off display of GDB observer debugging.  This includes
+     info such as the notification of observable events.
+
+`show debug observer'
+     Displays the current state of observer debugging.
+
+`set debug overload'
+     Turns on or off display of GDB C++ overload debugging info. This
+     includes info such as ranking of functions, etc.  The default is
+     off.
+
+`show debug overload'
+     Displays the current state of displaying GDB C++ overload
+     debugging info.  
+
+`set debug parser'
+     Turns on or off the display of expression parser debugging output.
+     Internally, this sets the `yydebug' variable in the expression
+     parser.  *Note Tracing Your Parser: (bison)Tracing, for details.
+     The default is off.
+
+`show debug parser'
+     Show the current state of expression parser debugging.  
+
+`set debug remote'
+     Turns on or off display of reports on all packets sent back and
+     forth across the serial line to the remote machine.  The info is
+     printed on the GDB standard output stream. The default is off.
+
+`show debug remote'
+     Displays the state of display of remote packets.
+
+`set debug serial'
+     Turns on or off display of GDB serial debugging info. The default
+     is off.
+
+`show debug serial'
+     Displays the current state of displaying GDB serial debugging info.
+
+`set debug solib-frv'
+     Turns on or off debugging messages for FR-V shared-library code.
+
+`show debug solib-frv'
+     Display the current state of FR-V shared-library code debugging
+     messages.
+
+`set debug symtab-create'
+     Turns on or off display of debugging messages related to symbol
+     table creation.  The default is off.
+
+`show debug symtab-create'
+     Show the current state of symbol table creation debugging.
+
+`set debug target'
+     Turns on or off display of GDB target debugging info. This info
+     includes what is going on at the target level of GDB, as it
+     happens. The default is 0.  Set it to 1 to track events, and to 2
+     to also track the value of large memory transfers.  Changes to
+     this flag do not take effect until the next time you connect to a
+     target or use the `run' command.
+
+`show debug target'
+     Displays the current state of displaying GDB target debugging info.
+
+`set debug timestamp'
+     Turns on or off display of timestamps with GDB debugging info.
+     When enabled, seconds and microseconds are displayed before each
+     debugging message.
+
+`show debug timestamp'
+     Displays the current state of displaying timestamps with GDB
+     debugging info.
+
+`set debugvarobj'
+     Turns on or off display of GDB variable object debugging info. The
+     default is off.
+
+`show debugvarobj'
+     Displays the current state of displaying GDB variable object
+     debugging info.
+
+`set debug xml'
+     Turns on or off debugging messages for built-in XML parsers.
+
+`show debug xml'
+     Displays the current state of XML debugging messages.
+
+
+File: gdb.info,  Node: Other Misc Settings,  Prev: Debugging Output,  Up: Controlling GDB
+
+22.10 Other Miscellaneous Settings
+==================================
+
+`set interactive-mode'
+     If `on', forces GDB to assume that GDB was started in a terminal.
+     In practice, this means that GDB should wait for the user to
+     answer queries generated by commands entered at the command
+     prompt.  If `off', forces GDB to operate in the opposite mode, and
+     it uses the default answers to all queries.  If `auto' (the
+     default), GDB tries to determine whether its standard input is a
+     terminal, and works in interactive-mode if it is,
+     non-interactively otherwise.
+
+     In the vast majority of cases, the debugger should be able to guess
+     correctly which mode should be used.  But this setting can be
+     useful in certain specific cases, such as running a MinGW GDB
+     inside a cygwin window.
+
+`show interactive-mode'
+     Displays whether the debugger is operating in interactive mode or
+     not.
+
+
+File: gdb.info,  Node: Extending GDB,  Next: Interpreters,  Prev: Controlling GDB,  Up: Top
+
+23 Extending GDB
+****************
+
+GDB provides three mechanisms for extension.  The first is based on
+composition of GDB commands, the second is based on the Python
+scripting language, and the third is for defining new aliases of
+existing commands.
+
+   To facilitate the use of the first two extensions, GDB is capable of
+evaluating the contents of a file.  When doing so, GDB can recognize
+which scripting language is being used by looking at the filename
+extension.  Files with an unrecognized filename extension are always
+treated as a GDB Command Files.  *Note Command files: Command Files.
+
+   You can control how GDB evaluates these files with the following
+setting:
+
+`set script-extension off'
+     All scripts are always evaluated as GDB Command Files.
+
+`set script-extension soft'
+     The debugger determines the scripting language based on filename
+     extension.  If this scripting language is supported, GDB evaluates
+     the script using that language.  Otherwise, it evaluates the file
+     as a GDB Command File.
+
+`set script-extension strict'
+     The debugger determines the scripting language based on filename
+     extension, and evaluates the script using that language.  If the
+     language is not supported, then the evaluation fails.
+
+`show script-extension'
+     Display the current value of the `script-extension' option.
+
+
+* Menu:
+
+* Sequences::          Canned Sequences of Commands
+* Python::             Scripting GDB using Python
+* Aliases::            Creating new spellings of existing commands
+
+
+File: gdb.info,  Node: Sequences,  Next: Python,  Up: Extending GDB
+
+23.1 Canned Sequences of Commands
+=================================
+
+Aside from breakpoint commands (*note Breakpoint Command Lists: Break
+Commands.), GDB provides two ways to store sequences of commands for
+execution as a unit: user-defined commands and command files.
+
+* Menu:
+
+* Define::             How to define your own commands
+* Hooks::              Hooks for user-defined commands
+* Command Files::      How to write scripts of commands to be stored in a file
+* Output::             Commands for controlled output
+
+
+File: gdb.info,  Node: Define,  Next: Hooks,  Up: Sequences
+
+23.1.1 User-defined Commands
+----------------------------
+
+A "user-defined command" is a sequence of GDB commands to which you
+assign a new name as a command.  This is done with the `define'
+command.  User commands may accept up to 10 arguments separated by
+whitespace.  Arguments are accessed within the user command via
+`$arg0...$arg9'.  A trivial example:
+
+     define adder
+       print $arg0 + $arg1 + $arg2
+     end
+
+To execute the command use:
+
+     adder 1 2 3
+
+This defines the command `adder', which prints the sum of its three
+arguments.  Note the arguments are text substitutions, so they may
+reference variables, use complex expressions, or even perform inferior
+functions calls.
+
+   In addition, `$argc' may be used to find out how many arguments have
+been passed.  This expands to a number in the range 0...10.
+
+     define adder
+       if $argc == 2
+         print $arg0 + $arg1
+       end
+       if $argc == 3
+         print $arg0 + $arg1 + $arg2
+       end
+     end
+
+`define COMMANDNAME'
+     Define a command named COMMANDNAME.  If there is already a command
+     by that name, you are asked to confirm that you want to redefine
+     it.  COMMANDNAME may be a bare command name consisting of letters,
+     numbers, dashes, and underscores.  It may also start with any
+     predefined prefix command.  For example, `define target my-target'
+     creates a user-defined `target my-target' command.
+
+     The definition of the command is made up of other GDB command
+     lines, which are given following the `define' command.  The end of
+     these commands is marked by a line containing `end'.
+
+`document COMMANDNAME'
+     Document the user-defined command COMMANDNAME, so that it can be
+     accessed by `help'.  The command COMMANDNAME must already be
+     defined.  This command reads lines of documentation just as
+     `define' reads the lines of the command definition, ending with
+     `end'.  After the `document' command is finished, `help' on command
+     COMMANDNAME displays the documentation you have written.
+
+     You may use the `document' command again to change the
+     documentation of a command.  Redefining the command with `define'
+     does not change the documentation.
+
+`dont-repeat'
+     Used inside a user-defined command, this tells GDB that this
+     command should not be repeated when the user hits <RET> (*note
+     repeat last command: Command Syntax.).
+
+`help user-defined'
+     List all user-defined commands and all python commands defined in
+     class COMAND_USER.  The first line of the documentation or
+     docstring is included (if any).
+
+`show user'
+`show user COMMANDNAME'
+     Display the GDB commands used to define COMMANDNAME (but not its
+     documentation).  If no COMMANDNAME is given, display the
+     definitions for all user-defined commands.  This does not work for
+     user-defined python commands.
+
+`show max-user-call-depth'
+`set max-user-call-depth'
+     The value of `max-user-call-depth' controls how many recursion
+     levels are allowed in user-defined commands before GDB suspects an
+     infinite recursion and aborts the command.  This does not apply to
+     user-defined python commands.
+
+   In addition to the above commands, user-defined commands frequently
+use control flow commands, described in *Note Command Files::.
+
+   When user-defined commands are executed, the commands of the
+definition are not printed.  An error in any command stops execution of
+the user-defined command.
+
+   If used interactively, commands that would ask for confirmation
+proceed without asking when used inside a user-defined command.  Many
+GDB commands that normally print messages to say what they are doing
+omit the messages when used in a user-defined command.
+
+
+File: gdb.info,  Node: Hooks,  Next: Command Files,  Prev: Define,  Up: Sequences
+
+23.1.2 User-defined Command Hooks
+---------------------------------
+
+You may define "hooks", which are a special kind of user-defined
+command.  Whenever you run the command `foo', if the user-defined
+command `hook-foo' exists, it is executed (with no arguments) before
+that command.
+
+   A hook may also be defined which is run after the command you
+executed.  Whenever you run the command `foo', if the user-defined
+command `hookpost-foo' exists, it is executed (with no arguments) after
+that command.  Post-execution hooks may exist simultaneously with
+pre-execution hooks, for the same command.
+
+   It is valid for a hook to call the command which it hooks.  If this
+occurs, the hook is not re-executed, thereby avoiding infinite
+recursion.
+
+   In addition, a pseudo-command, `stop' exists.  Defining
+(`hook-stop') makes the associated commands execute every time
+execution stops in your program: before breakpoint commands are run,
+displays are printed, or the stack frame is printed.
+
+   For example, to ignore `SIGALRM' signals while single-stepping, but
+treat them normally during normal execution, you could define:
+
+     define hook-stop
+     handle SIGALRM nopass
+     end
+
+     define hook-run
+     handle SIGALRM pass
+     end
+
+     define hook-continue
+     handle SIGALRM pass
+     end
+
+   As a further example, to hook at the beginning and end of the `echo'
+command, and to add extra text to the beginning and end of the message,
+you could define:
+
+     define hook-echo
+     echo <<<---
+     end
+
+     define hookpost-echo
+     echo --->>>\n
+     end
+
+     (gdb) echo Hello World
+     <<<---Hello World--->>>
+     (gdb)
+
+   You can define a hook for any single-word command in GDB, but not
+for command aliases; you should define a hook for the basic command
+name, e.g.  `backtrace' rather than `bt'.  You can hook a multi-word
+command by adding `hook-' or `hookpost-' to the last word of the
+command, e.g.  `define target hook-remote' to add a hook to `target
+remote'.
+
+   If an error occurs during the execution of your hook, execution of
+GDB commands stops and GDB issues a prompt (before the command that you
+actually typed had a chance to run).
+
+   If you try to define a hook which does not match any known command,
+you get a warning from the `define' command.
+
+
+File: gdb.info,  Node: Command Files,  Next: Output,  Prev: Hooks,  Up: Sequences
+
+23.1.3 Command Files
+--------------------
+
+A command file for GDB is a text file made of lines that are GDB
+commands.  Comments (lines starting with `#') may also be included.  An
+empty line in a command file does nothing; it does not mean to repeat
+the last command, as it would from the terminal.
+
+   You can request the execution of a command file with the `source'
+command.  Note that the `source' command is also used to evaluate
+scripts that are not Command Files.  The exact behavior can be
+configured using the `script-extension' setting.  *Note Extending GDB:
+Extending GDB.
+
+`source [-s] [-v] FILENAME'
+     Execute the command file FILENAME.
+
+   The lines in a command file are generally executed sequentially,
+unless the order of execution is changed by one of the _flow-control
+commands_ described below.  The commands are not printed as they are
+executed.  An error in any command terminates execution of the command
+file and control is returned to the console.
+
+   GDB first searches for FILENAME in the current directory.  If the
+file is not found there, and FILENAME does not specify a directory,
+then GDB also looks for the file on the source search path (specified
+with the `directory' command); except that `$cdir' is not searched
+because the compilation directory is not relevant to scripts.
+
+   If `-s' is specified, then GDB searches for FILENAME on the search
+path even if FILENAME specifies a directory.  The search is done by
+appending FILENAME to each element of the search path.  So, for
+example, if FILENAME is `mylib/myscript' and the search path contains
+`/home/user' then GDB will look for the script
+`/home/user/mylib/myscript'.  The search is also done if FILENAME is an
+absolute path.  For example, if FILENAME is `/tmp/myscript' and the
+search path contains `/home/user' then GDB will look for the script
+`/home/user/tmp/myscript'.  For DOS-like systems, if FILENAME contains
+a drive specification, it is stripped before concatenation.  For
+example, if FILENAME is `d:myscript' and the search path contains
+`c:/tmp' then GDB will look for the script `c:/tmp/myscript'.
+
+   If `-v', for verbose mode, is given then GDB displays each command
+as it is executed.  The option must be given before FILENAME, and is
+interpreted as part of the filename anywhere else.
+
+   Commands that would ask for confirmation if used interactively
+proceed without asking when used in a command file.  Many GDB commands
+that normally print messages to say what they are doing omit the
+messages when called from command files.
+
+   GDB also accepts command input from standard input.  In this mode,
+normal output goes to standard output and error output goes to standard
+error.  Errors in a command file supplied on standard input do not
+terminate execution of the command file--execution continues with the
+next command.
+
+     gdb < cmds > log 2>&1
+
+   (The syntax above will vary depending on the shell used.) This
+example will execute commands from the file `cmds'. All output and
+errors would be directed to `log'.
+
+   Since commands stored on command files tend to be more general than
+commands typed interactively, they frequently need to deal with
+complicated situations, such as different or unexpected values of
+variables and symbols, changes in how the program being debugged is
+built, etc.  GDB provides a set of flow-control commands to deal with
+these complexities.  Using these commands, you can write complex
+scripts that loop over data structures, execute commands conditionally,
+etc.
+
+`if'
+`else'
+     This command allows to include in your script conditionally
+     executed commands. The `if' command takes a single argument, which
+     is an expression to evaluate.  It is followed by a series of
+     commands that are executed only if the expression is true (its
+     value is nonzero).  There can then optionally be an `else' line,
+     followed by a series of commands that are only executed if the
+     expression was false.  The end of the list is marked by a line
+     containing `end'.
+
+`while'
+     This command allows to write loops.  Its syntax is similar to
+     `if': the command takes a single argument, which is an expression
+     to evaluate, and must be followed by the commands to execute, one
+     per line, terminated by an `end'.  These commands are called the
+     "body" of the loop.  The commands in the body of `while' are
+     executed repeatedly as long as the expression evaluates to true.
+
+`loop_break'
+     This command exits the `while' loop in whose body it is included.
+     Execution of the script continues after that `while's `end' line.
+
+`loop_continue'
+     This command skips the execution of the rest of the body of
+     commands in the `while' loop in whose body it is included.
+     Execution branches to the beginning of the `while' loop, where it
+     evaluates the controlling expression.
+
+`end'
+     Terminate the block of commands that are the body of `if', `else',
+     or `while' flow-control commands.
+
+
+File: gdb.info,  Node: Output,  Prev: Command Files,  Up: Sequences
+
+23.1.4 Commands for Controlled Output
+-------------------------------------
+
+During the execution of a command file or a user-defined command, normal
+GDB output is suppressed; the only output that appears is what is
+explicitly printed by the commands in the definition.  This section
+describes three commands useful for generating exactly the output you
+want.
+
+`echo TEXT'
+     Print TEXT.  Nonprinting characters can be included in TEXT using
+     C escape sequences, such as `\n' to print a newline.  *No newline
+     is printed unless you specify one.* In addition to the standard C
+     escape sequences, a backslash followed by a space stands for a
+     space.  This is useful for displaying a string with spaces at the
+     beginning or the end, since leading and trailing spaces are
+     otherwise trimmed from all arguments.  To print ` and foo = ', use
+     the command `echo \ and foo = \ '.
+
+     A backslash at the end of TEXT can be used, as in C, to continue
+     the command onto subsequent lines.  For example,
+
+          echo This is some text\n\
+          which is continued\n\
+          onto several lines.\n
+
+     produces the same output as
+
+          echo This is some text\n
+          echo which is continued\n
+          echo onto several lines.\n
+
+`output EXPRESSION'
+     Print the value of EXPRESSION and nothing but that value: no
+     newlines, no `$NN = '.  The value is not entered in the value
+     history either.  *Note Expressions: Expressions, for more
+     information on expressions.
+
+`output/FMT EXPRESSION'
+     Print the value of EXPRESSION in format FMT.  You can use the same
+     formats as for `print'.  *Note Output Formats: Output Formats, for
+     more information.
+
+`printf TEMPLATE, EXPRESSIONS...'
+     Print the values of one or more EXPRESSIONS under the control of
+     the string TEMPLATE.  To print several values, make EXPRESSIONS be
+     a comma-separated list of individual expressions, which may be
+     either numbers or pointers.  Their values are printed as specified
+     by TEMPLATE, exactly as a C program would do by executing the code
+     below:
+
+          printf (TEMPLATE, EXPRESSIONS...);
+
+     As in `C' `printf', ordinary characters in TEMPLATE are printed
+     verbatim, while "conversion specification" introduced by the `%'
+     character cause subsequent EXPRESSIONS to be evaluated, their
+     values converted and formatted according to type and style
+     information encoded in the conversion specifications, and then
+     printed.
+
+     For example, you can print two values in hex like this:
+
+          printf "foo, bar-foo = 0x%x, 0x%x\n", foo, bar-foo
+
+     `printf' supports all the standard `C' conversion specifications,
+     including the flags and modifiers between the `%' character and
+     the conversion letter, with the following exceptions:
+
+        * The argument-ordering modifiers, such as `2$', are not
+          supported.
+
+        * The modifier `*' is not supported for specifying precision or
+          width.
+
+        * The `'' flag (for separation of digits into groups according
+          to `LC_NUMERIC'') is not supported.
+
+        * The type modifiers `hh', `j', `t', and `z' are not supported.
+
+        * The conversion letter `n' (as in `%n') is not supported.
+
+        * The conversion letters `a' and `A' are not supported.
+
+     Note that the `ll' type modifier is supported only if the
+     underlying `C' implementation used to build GDB supports the `long
+     long int' type, and the `L' type modifier is supported only if
+     `long double' type is available.
+
+     As in `C', `printf' supports simple backslash-escape sequences,
+     such as `\n', `\t', `\\', `\"', `\a', and `\f', that consist of
+     backslash followed by a single character.  Octal and hexadecimal
+     escape sequences are not supported.
+
+     Additionally, `printf' supports conversion specifications for DFP
+     ("Decimal Floating Point") types using the following length
+     modifiers together with a floating point specifier.  letters:
+
+        * `H' for printing `Decimal32' types.
+
+        * `D' for printing `Decimal64' types.
+
+        * `DD' for printing `Decimal128' types.
+
+     If the underlying `C' implementation used to build GDB has support
+     for the three length modifiers for DFP types, other modifiers such
+     as width and precision will also be available for GDB to use.
+
+     In case there is no such `C' support, no additional modifiers will
+     be available and the value will be printed in the standard way.
+
+     Here's an example of printing DFP types using the above conversion
+     letters:
+          printf "D32: %Hf - D64: %Df - D128: %DDf\n",1.2345df,1.2E10dd,1.2E1dl
+
+`eval TEMPLATE, EXPRESSIONS...'
+     Convert the values of one or more EXPRESSIONS under the control of
+     the string TEMPLATE to a command line, and call it.
+
+
+
+File: gdb.info,  Node: Python,  Next: Aliases,  Prev: Sequences,  Up: Extending GDB
+
+23.2 Scripting GDB using Python
+===============================
+
+You can script GDB using the Python programming language
+(http://www.python.org/).  This feature is available only if GDB was
+configured using `--with-python'.
+
+   Python scripts used by GDB should be installed in
+`DATA-DIRECTORY/python', where DATA-DIRECTORY is the data directory as
+determined at GDB startup (*note Data Files::).  This directory, known
+as the "python directory", is automatically added to the Python Search
+Path in order to allow the Python interpreter to locate all scripts
+installed at this location.
+
+   Additionally, GDB commands and convenience functions which are
+written in Python and are located in the
+`DATA-DIRECTORY/python/gdb/command' or
+`DATA-DIRECTORY/python/gdb/function' directories are automatically
+imported when GDB starts.
+
+* Menu:
+
+* Python Commands::             Accessing Python from GDB.
+* Python API::                  Accessing GDB from Python.
+* Python Auto-loading::         Automatically loading Python code.
+* Python modules::              Python modules provided by GDB.
+
+
+File: gdb.info,  Node: Python Commands,  Next: Python API,  Up: Python
+
+23.2.1 Python Commands
+----------------------
+
+GDB provides one command for accessing the Python interpreter, and one
+related setting:
+
+`python [CODE]'
+     The `python' command can be used to evaluate Python code.
+
+     If given an argument, the `python' command will evaluate the
+     argument as a Python command.  For example:
+
+          (gdb) python print 23
+          23
+
+     If you do not provide an argument to `python', it will act as a
+     multi-line command, like `define'.  In this case, the Python
+     script is made up of subsequent command lines, given after the
+     `python' command.  This command list is terminated using a line
+     containing `end'.  For example:
+
+          (gdb) python
+          Type python script
+          End with a line saying just "end".
+          >print 23
+          >end
+          23
+
+`set python print-stack'
+     By default, GDB will print only the message component of a Python
+     exception when an error occurs in a Python script.  This can be
+     controlled using `set python print-stack': if `full', then full
+     Python stack printing is enabled; if `none', then Python stack and
+     message printing is disabled; if `message', the default, only the
+     message component of the error is printed.
+
+   It is also possible to execute a Python script from the GDB
+interpreter:
+
+`source `script-name''
+     The script name must end with `.py' and GDB must be configured to
+     recognize the script language based on filename extension using
+     the `script-extension' setting.  *Note Extending GDB: Extending
+     GDB.
+
+`python execfile ("script-name")'
+     This method is based on the `execfile' Python built-in function,
+     and thus is always available.
+
+
+File: gdb.info,  Node: Python API,  Next: Python Auto-loading,  Prev: Python Commands,  Up: Python
+
+23.2.2 Python API
+-----------------
+
+At startup, GDB overrides Python's `sys.stdout' and `sys.stderr' to
+print using GDB's output-paging streams.  A Python program which
+outputs to one of these streams may have its output interrupted by the
+user (*note Screen Size::).  In this situation, a Python
+`KeyboardInterrupt' exception is thrown.
+
+* Menu:
+
+* Basic Python::                Basic Python Functions.
+* Exception Handling::          How Python exceptions are translated.
+* Values From Inferior::        Python representation of values.
+* Types In Python::             Python representation of types.
+* Pretty Printing API::         Pretty-printing values.
+* Selecting Pretty-Printers::   How GDB chooses a pretty-printer.
+* Writing a Pretty-Printer::    Writing a Pretty-Printer.
+* Inferiors In Python::         Python representation of inferiors (processes)
+* Events In Python::            Listening for events from GDB.
+* Threads In Python::           Accessing inferior threads from Python.
+* Commands In Python::          Implementing new commands in Python.
+* Parameters In Python::        Adding new GDB parameters.
+* Functions In Python::         Writing new convenience functions.
+* Progspaces In Python::        Program spaces.
+* Objfiles In Python::          Object files.
+* Frames In Python::            Accessing inferior stack frames from Python.
+* Blocks In Python::            Accessing frame blocks from Python.
+* Symbols In Python::           Python representation of symbols.
+* Symbol Tables In Python::     Python representation of symbol tables.
+* Breakpoints In Python::       Manipulating breakpoints using Python.
+* Finish Breakpoints in Python:: Setting Breakpoints on function return
+                                using Python.
+* Lazy Strings In Python::      Python representation of lazy strings.
+
+
+File: gdb.info,  Node: Basic Python,  Next: Exception Handling,  Up: Python API
+
+23.2.2.1 Basic Python
+.....................
+
+GDB introduces a new Python module, named `gdb'.  All methods and
+classes added by GDB are placed in this module.  GDB automatically
+`import's the `gdb' module for use in all scripts evaluated by the
+`python' command.
+
+ -- Variable: gdb.PYTHONDIR
+     A string containing the python directory (*note Python::).
+
+ -- Function: gdb.execute (command [, from_tty [, to_string]])
+     Evaluate COMMAND, a string, as a GDB CLI command.  If a GDB
+     exception happens while COMMAND runs, it is translated as
+     described in *Note Exception Handling: Exception Handling.
+
+     FROM_TTY specifies whether GDB ought to consider this command as
+     having originated from the user invoking it interactively.  It
+     must be a boolean value.  If omitted, it defaults to `False'.
+
+     By default, any output produced by COMMAND is sent to GDB's
+     standard output.  If the TO_STRING parameter is `True', then
+     output will be collected by `gdb.execute' and returned as a
+     string.  The default is `False', in which case the return value is
+     `None'.  If TO_STRING is `True', the GDB virtual terminal will be
+     temporarily set to unlimited width and height, and its pagination
+     will be disabled; *note Screen Size::.
+
+ -- Function: gdb.breakpoints ()
+     Return a sequence holding all of GDB's breakpoints.  *Note
+     Breakpoints In Python::, for more information.
+
+ -- Function: gdb.parameter (parameter)
+     Return the value of a GDB parameter.  PARAMETER is a string naming
+     the parameter to look up; PARAMETER may contain spaces if the
+     parameter has a multi-part name.  For example, `print object' is a
+     valid parameter name.
+
+     If the named parameter does not exist, this function throws a
+     `gdb.error' (*note Exception Handling::).  Otherwise, the
+     parameter's value is converted to a Python value of the appropriate
+     type, and returned.
+
+ -- Function: gdb.history (number)
+     Return a value from GDB's value history (*note Value History::).
+     NUMBER indicates which history element to return.  If NUMBER is
+     negative, then GDB will take its absolute value and count backward
+     from the last element (i.e., the most recent element) to find the
+     value to return.  If NUMBER is zero, then GDB will return the most
+     recent element.  If the element specified by NUMBER doesn't exist
+     in the value history, a `gdb.error' exception will be raised.
+
+     If no exception is raised, the return value is always an instance
+     of `gdb.Value' (*note Values From Inferior::).
+
+ -- Function: gdb.parse_and_eval (expression)
+     Parse EXPRESSION as an expression in the current language,
+     evaluate it, and return the result as a `gdb.Value'.  EXPRESSION
+     must be a string.
+
+     This function can be useful when implementing a new command (*note
+     Commands In Python::), as it provides a way to parse the command's
+     argument as an expression.  It is also useful simply to compute
+     values, for example, it is the only way to get the value of a
+     convenience variable (*note Convenience Vars::) as a `gdb.Value'.
+
+ -- Function: gdb.find_pc_line (pc)
+     Return the `gdb.Symtab_and_line' object corresponding to the PC
+     value.  *Note Symbol Tables In Python::.  If an invalid value of
+     PC is passed as an argument, then the `symtab' and `line'
+     attributes of the returned `gdb.Symtab_and_line' object will be
+     `None' and 0 respectively.
+
+ -- Function: gdb.post_event (event)
+     Put EVENT, a callable object taking no arguments, into GDB's
+     internal event queue.  This callable will be invoked at some later
+     point, during GDB's event processing.  Events posted using
+     `post_event' will be run in the order in which they were posted;
+     however, there is no way to know when they will be processed
+     relative to other events inside GDB.
+
+     GDB is not thread-safe.  If your Python program uses multiple
+     threads, you must be careful to only call GDB-specific functions
+     in the main GDB thread.  `post_event' ensures this.  For example:
+
+          (gdb) python
+          >import threading
+          >
+          >class Writer():
+          > def __init__(self, message):
+          >        self.message = message;
+          > def __call__(self):
+          >        gdb.write(self.message)
+          >
+          >class MyThread1 (threading.Thread):
+          > def run (self):
+          >        gdb.post_event(Writer("Hello "))
+          >
+          >class MyThread2 (threading.Thread):
+          > def run (self):
+          >        gdb.post_event(Writer("World\n"))
+          >
+          >MyThread1().start()
+          >MyThread2().start()
+          >end
+          (gdb) Hello World
+
+ -- Function: gdb.write (string [, stream])
+     Print a string to GDB's paginated output stream.  The optional
+     STREAM determines the stream to print to.  The default stream is
+     GDB's standard output stream.  Possible stream values are:
+
+    `gdb.STDOUT'
+          GDB's standard output stream.
+
+    `gdb.STDERR'
+          GDB's standard error stream.
+
+    `gdb.STDLOG'
+          GDB's log stream (*note Logging Output::).
+
+     Writing to `sys.stdout' or `sys.stderr' will automatically call
+     this function and will automatically direct the output to the
+     relevant stream.
+
+ -- Function: gdb.flush ()
+     Flush the buffer of a GDB paginated stream so that the contents
+     are displayed immediately.  GDB will flush the contents of a
+     stream automatically when it encounters a newline in the buffer.
+     The optional STREAM determines the stream to flush.  The default
+     stream is GDB's standard output stream.  Possible stream values
+     are:
+
+    `gdb.STDOUT'
+          GDB's standard output stream.
+
+    `gdb.STDERR'
+          GDB's standard error stream.
+
+    `gdb.STDLOG'
+          GDB's log stream (*note Logging Output::).
+
+
+     Flushing `sys.stdout' or `sys.stderr' will automatically call this
+     function for the relevant stream.
+
+ -- Function: gdb.target_charset ()
+     Return the name of the current target character set (*note
+     Character Sets::).  This differs from
+     `gdb.parameter('target-charset')' in that `auto' is never returned.
+
+ -- Function: gdb.target_wide_charset ()
+     Return the name of the current target wide character set (*note
+     Character Sets::).  This differs from
+     `gdb.parameter('target-wide-charset')' in that `auto' is never
+     returned.
+
+ -- Function: gdb.solib_name (address)
+     Return the name of the shared library holding the given ADDRESS as
+     a string, or `None'.
+
+ -- Function: gdb.decode_line [expression]
+     Return locations of the line specified by EXPRESSION, or of the
+     current line if no argument was given.  This function returns a
+     Python tuple containing two elements.  The first element contains
+     a string holding any unparsed section of EXPRESSION (or `None' if
+     the expression has been fully parsed).  The second element contains
+     either `None' or another tuple that contains all the locations
+     that match the expression represented as `gdb.Symtab_and_line'
+     objects (*note Symbol Tables In Python::).  If EXPRESSION is
+     provided, it is decoded the way that GDB's inbuilt `break' or
+     `edit' commands do (*note Specify Location::).
+
+ -- Function: gdb.prompt_hook (current_prompt)
+     If PROMPT_HOOK is callable, GDB will call the method assigned to
+     this operation before a prompt is displayed by GDB.
+
+     The parameter `current_prompt' contains the current GDB prompt.
+     This method must return a Python string, or `None'.  If a string
+     is returned, the GDB prompt will be set to that string.  If `None'
+     is returned, GDB will continue to use the current prompt.
+
+     Some prompts cannot be substituted in GDB.  Secondary prompts such
+     as those used by readline for command input, and annotation
+     related prompts are prohibited from being changed.
+
+
+File: gdb.info,  Node: Exception Handling,  Next: Values From Inferior,  Prev: Basic Python,  Up: Python API
+
+23.2.2.2 Exception Handling
+...........................
+
+When executing the `python' command, Python exceptions uncaught within
+the Python code are translated to calls to GDB error-reporting
+mechanism.  If the command that called `python' does not handle the
+error, GDB will terminate it and print an error message containing the
+Python exception name, the associated value, and the Python call stack
+backtrace at the point where the exception was raised.  Example:
+
+     (gdb) python print foo
+     Traceback (most recent call last):
+       File "<string>", line 1, in <module>
+     NameError: name 'foo' is not defined
+
+   GDB errors that happen in GDB commands invoked by Python code are
+converted to Python exceptions.  The type of the Python exception
+depends on the error.
+
+`gdb.error'
+     This is the base class for most exceptions generated by GDB.  It
+     is derived from `RuntimeError', for compatibility with earlier
+     versions of GDB.
+
+     If an error occurring in GDB does not fit into some more specific
+     category, then the generated exception will have this type.
+
+`gdb.MemoryError'
+     This is a subclass of `gdb.error' which is thrown when an
+     operation tried to access invalid memory in the inferior.
+
+`KeyboardInterrupt'
+     User interrupt (via `C-c' or by typing `q' at a pagination prompt)
+     is translated to a Python `KeyboardInterrupt' exception.
+
+   In all cases, your exception handler will see the GDB error message
+as its value and the Python call stack backtrace at the Python
+statement closest to where the GDB error occured as the traceback.
+
+   When implementing GDB commands in Python via `gdb.Command', it is
+useful to be able to throw an exception that doesn't cause a traceback
+to be printed.  For example, the user may have invoked the command
+incorrectly.  Use the `gdb.GdbError' exception to handle this case.
+Example:
+
+     (gdb) python
+     >class HelloWorld (gdb.Command):
+     >  """Greet the whole world."""
+     >  def __init__ (self):
+     >    super (HelloWorld, self).__init__ ("hello-world", gdb.COMMAND_USER)
+     >  def invoke (self, args, from_tty):
+     >    argv = gdb.string_to_argv (args)
+     >    if len (argv) != 0:
+     >      raise gdb.GdbError ("hello-world takes no arguments")
+     >    print "Hello, World!"
+     >HelloWorld ()
+     >end
+     (gdb) hello-world 42
+     hello-world takes no arguments
+
+
+File: gdb.info,  Node: Values From Inferior,  Next: Types In Python,  Prev: Exception Handling,  Up: Python API
+
+23.2.2.3 Values From Inferior
+.............................
+
+GDB provides values it obtains from the inferior program in an object
+of type `gdb.Value'.  GDB uses this object for its internal bookkeeping
+of the inferior's values, and for fetching values when necessary.
+
+   Inferior values that are simple scalars can be used directly in
+Python expressions that are valid for the value's data type.  Here's an
+example for an integer or floating-point value `some_val':
+
+     bar = some_val + 2
+
+As result of this, `bar' will also be a `gdb.Value' object whose values
+are of the same type as those of `some_val'.
+
+   Inferior values that are structures or instances of some class can
+be accessed using the Python "dictionary syntax".  For example, if
+`some_val' is a `gdb.Value' instance holding a structure, you can
+access its `foo' element with:
+
+     bar = some_val['foo']
+
+   Again, `bar' will also be a `gdb.Value' object.
+
+   A `gdb.Value' that represents a function can be executed via
+inferior function call.  Any arguments provided to the call must match
+the function's prototype, and must be provided in the order specified
+by that prototype.
+
+   For example, `some_val' is a `gdb.Value' instance representing a
+function that takes two integers as arguments.  To execute this
+function, call it like so:
+
+     result = some_val (10,20)
+
+   Any values returned from a function call will be stored as a
+`gdb.Value'.
+
+   The following attributes are provided:
+
+      -- Variable: Value.address
+          If this object is addressable, this read-only attribute holds
+          a `gdb.Value' object representing the address.  Otherwise,
+          this attribute holds `None'.
+
+      -- Variable: Value.is_optimized_out
+          This read-only boolean attribute is true if the compiler
+          optimized out this value, thus it is not available for
+          fetching from the inferior.
+
+      -- Variable: Value.type
+          The type of this `gdb.Value'.  The value of this attribute is
+          a `gdb.Type' object (*note Types In Python::).
+
+      -- Variable: Value.dynamic_type
+          The dynamic type of this `gdb.Value'.  This uses C++ run-time
+          type information (RTTI) to determine the dynamic type of the
+          value.  If this value is of class type, it will return the
+          class in which the value is embedded, if any.  If this value
+          is of pointer or reference to a class type, it will compute
+          the dynamic type of the referenced object, and return a
+          pointer or reference to that type, respectively.  In all
+          other cases, it will return the value's static type.
+
+          Note that this feature will only work when debugging a C++
+          program that includes RTTI for the object in question.
+          Otherwise, it will just return the static type of the value
+          as in `ptype foo' (*note ptype: Symbols.).
+
+      -- Variable: Value.is_lazy
+          The value of this read-only boolean attribute is `True' if
+          this `gdb.Value' has not yet been fetched from the inferior.
+          GDB does not fetch values until necessary, for efficiency.
+          For example:
+
+               myval = gdb.parse_and_eval ('somevar')
+
+          The value of `somevar' is not fetched at this time.  It will
+          be fetched when the value is needed, or when the `fetch_lazy'
+          method is invoked.
+
+   The following methods are provided:
+
+      -- Function: Value.__init__ (VAL)
+          Many Python values can be converted directly to a `gdb.Value'
+          via this object initializer.  Specifically:
+
+         Python boolean
+               A Python boolean is converted to the boolean type from
+               the current language.
+
+         Python integer
+               A Python integer is converted to the C `long' type for
+               the current architecture.
+
+         Python long
+               A Python long is converted to the C `long long' type for
+               the current architecture.
+
+         Python float
+               A Python float is converted to the C `double' type for
+               the current architecture.
+
+         Python string
+               A Python string is converted to a target string, using
+               the current target encoding.
+
+         `gdb.Value'
+               If `val' is a `gdb.Value', then a copy of the value is
+               made.
+
+         `gdb.LazyString'
+               If `val' is a `gdb.LazyString' (*note Lazy Strings In
+               Python::), then the lazy string's `value' method is
+               called, and its result is used.
+
+      -- Function: Value.cast (type)
+          Return a new instance of `gdb.Value' that is the result of
+          casting this instance to the type described by TYPE, which
+          must be a `gdb.Type' object.  If the cast cannot be performed
+          for some reason, this method throws an exception.
+
+      -- Function: Value.dereference ()
+          For pointer data types, this method returns a new `gdb.Value'
+          object whose contents is the object pointed to by the
+          pointer.  For example, if `foo' is a C pointer to an `int',
+          declared in your C program as
+
+               int *foo;
+
+          then you can use the corresponding `gdb.Value' to access what
+          `foo' points to like this:
+
+               bar = foo.dereference ()
+
+          The result `bar' will be a `gdb.Value' object holding the
+          value pointed to by `foo'.
+
+          A similar function `Value.referenced_value' exists which also
+          returns `gdb.Value' objects corresonding to the values
+          pointed to by pointer values (and additionally, values
+          referenced by reference values).  However, the behavior of
+          `Value.dereference' differs from `Value.referenced_value' by
+          the fact that the behavior of `Value.dereference' is
+          identical to applying the C unary operator `*' on a given
+          value.  For example, consider a reference to a pointer
+          `ptrref', declared in your C++ program as
+
+               typedef int *intptr;
+               ...
+               int val = 10;
+               intptr ptr = &val;
+               intptr &ptrref = ptr;
+
+          Though `ptrref' is a reference value, one can apply the method
+          `Value.dereference' to the `gdb.Value' object corresponding
+          to it and obtain a `gdb.Value' which is identical to that
+          corresponding to `val'.  However, if you apply the method
+          `Value.referenced_value', the result would be a `gdb.Value'
+          object identical to that corresponding to `ptr'.
+
+               py_ptrref = gdb.parse_and_eval ("ptrref")
+               py_val = py_ptrref.dereference ()
+               py_ptr = py_ptrref.referenced_value ()
+
+          The `gdb.Value' object `py_val' is identical to that
+          corresponding to `val', and `py_ptr' is identical to that
+          corresponding to `ptr'.  In general, `Value.dereference' can
+          be applied whenever the C unary operator `*' can be applied
+          to the corresponding C value.  For those cases where applying
+          both `Value.dereference' and `Value.referenced_value' is
+          allowed, the results obtained need not be identical (as we
+          have seen in the above example).  The results are however
+          identical when applied on `gdb.Value' objects corresponding
+          to pointers (`gdb.Value' objects with type code
+          `TYPE_CODE_PTR') in a C/C++ program.
+
+      -- Function: Value.referenced_value ()
+          For pointer or reference data types, this method returns a new
+          `gdb.Value' object corresponding to the value referenced by
+          the pointer/reference value.  For pointer data types,
+          `Value.dereference' and `Value.referenced_value' produce
+          identical results.  The difference between these methods is
+          that `Value.dereference' cannot get the values referenced by
+          reference values.  For example, consider a reference to an
+          `int', declared in your C++ program as
+
+               int val = 10;
+               int &ref = val;
+
+          then applying `Value.dereference' to the `gdb.Value' object
+          corresponding to `ref' will result in an error, while applying
+          `Value.referenced_value' will result in a `gdb.Value' object
+          identical to that corresponding to `val'.
+
+               py_ref = gdb.parse_and_eval ("ref")
+               er_ref = py_ref.dereference ()       # Results in error
+               py_val = py_ref.referenced_value ()  # Returns the referenced value
+
+          The `gdb.Value' object `py_val' is identical to that
+          corresponding to `val'.
+
+      -- Function: Value.dynamic_cast (type)
+          Like `Value.cast', but works as if the C++ `dynamic_cast'
+          operator were used.  Consult a C++ reference for details.
+
+      -- Function: Value.reinterpret_cast (type)
+          Like `Value.cast', but works as if the C++ `reinterpret_cast'
+          operator were used.  Consult a C++ reference for details.
+
+      -- Function: Value.string ([encoding[, errors[, length]]])
+          If this `gdb.Value' represents a string, then this method
+          converts the contents to a Python string.  Otherwise, this
+          method will throw an exception.
+
+          Strings are recognized in a language-specific way; whether a
+          given `gdb.Value' represents a string is determined by the
+          current language.
+
+          For C-like languages, a value is a string if it is a pointer
+          to or an array of characters or ints.  The string is assumed
+          to be terminated by a zero of the appropriate width.  However
+          if the optional length argument is given, the string will be
+          converted to that given length, ignoring any embedded zeros
+          that the string may contain.
+
+          If the optional ENCODING argument is given, it must be a
+          string naming the encoding of the string in the `gdb.Value',
+          such as `"ascii"', `"iso-8859-6"' or `"utf-8"'.  It accepts
+          the same encodings as the corresponding argument to Python's
+          `string.decode' method, and the Python codec machinery will
+          be used to convert the string.  If ENCODING is not given, or
+          if ENCODING is the empty string, then either the
+          `target-charset' (*note Character Sets::) will be used, or a
+          language-specific encoding will be used, if the current
+          language is able to supply one.
+
+          The optional ERRORS argument is the same as the corresponding
+          argument to Python's `string.decode' method.
+
+          If the optional LENGTH argument is given, the string will be
+          fetched and converted to the given length.
+
+      -- Function: Value.lazy_string ([encoding [, length]])
+          If this `gdb.Value' represents a string, then this method
+          converts the contents to a `gdb.LazyString' (*note Lazy
+          Strings In Python::).  Otherwise, this method will throw an
+          exception.
+
+          If the optional ENCODING argument is given, it must be a
+          string naming the encoding of the `gdb.LazyString'.  Some
+          examples are: `ascii', `iso-8859-6' or `utf-8'.  If the
+          ENCODING argument is an encoding that GDB does recognize, GDB
+          will raise an error.
+
+          When a lazy string is printed, the GDB encoding machinery is
+          used to convert the string during printing.  If the optional
+          ENCODING argument is not provided, or is an empty string, GDB
+          will automatically select the encoding most suitable for the
+          string type.  For further information on encoding in GDB
+          please see *Note Character Sets::.
+
+          If the optional LENGTH argument is given, the string will be
+          fetched and encoded to the length of characters specified.  If
+          the LENGTH argument is not provided, the string will be
+          fetched and encoded until a null of appropriate width is
+          found.
+
+      -- Function: Value.fetch_lazy ()
+          If the `gdb.Value' object is currently a lazy value
+          (`gdb.Value.is_lazy' is `True'), then the value is fetched
+          from the inferior.  Any errors that occur in the process will
+          produce a Python exception.
+
+          If the `gdb.Value' object is not a lazy value, this method
+          has no effect.
+
+          This method does not return a value.
+
+
+
+File: gdb.info,  Node: Types In Python,  Next: Pretty Printing API,  Prev: Values From Inferior,  Up: Python API
+
+23.2.2.4 Types In Python
+........................
+
+GDB represents types from the inferior using the class `gdb.Type'.
+
+   The following type-related functions are available in the `gdb'
+module:
+
+ -- Function: gdb.lookup_type (name [, block])
+     This function looks up a type by name.  NAME is the name of the
+     type to look up.  It must be a string.
+
+     If BLOCK is given, then NAME is looked up in that scope.
+     Otherwise, it is searched for globally.
+
+     Ordinarily, this function will return an instance of `gdb.Type'.
+     If the named type cannot be found, it will throw an exception.
+
+   If the type is a structure or class type, or an enum type, the fields
+of that type can be accessed using the Python "dictionary syntax".  For
+example, if `some_type' is a `gdb.Type' instance holding a structure
+type, you can access its `foo' field with:
+
+     bar = some_type['foo']
+
+   `bar' will be a `gdb.Field' object; see below under the description
+of the `Type.fields' method for a description of the `gdb.Field' class.
+
+   An instance of `Type' has the following attributes:
+
+      -- Variable: Type.code
+          The type code for this type.  The type code will be one of the
+          `TYPE_CODE_' constants defined below.
+
+      -- Variable: Type.sizeof
+          The size of this type, in target `char' units.  Usually, a
+          target's `char' type will be an 8-bit byte.  However, on some
+          unusual platforms, this type may have a different size.
+
+      -- Variable: Type.tag
+          The tag name for this type.  The tag name is the name after
+          `struct', `union', or `enum' in C and C++; not all languages
+          have this concept.  If this type has no tag name, then `None'
+          is returned.
+
+   The following methods are provided:
+
+      -- Function: Type.fields ()
+          For structure and union types, this method returns the
+          fields.  Range types have two fields, the minimum and maximum
+          values.  Enum types have one field per enum constant.
+          Function and method types have one field per parameter.  The
+          base types of C++ classes are also represented as fields.  If
+          the type has no fields, or does not fit into one of these
+          categories, an empty sequence will be returned.
+
+          Each field is a `gdb.Field' object, with some pre-defined
+          attributes:
+         `bitpos'
+               This attribute is not available for `static' fields (as
+               in C++ or Java).  For non-`static' fields, the value is
+               the bit position of the field.  For `enum' fields, the
+               value is the enumeration member's integer representation.
+
+         `name'
+               The name of the field, or `None' for anonymous fields.
+
+         `artificial'
+               This is `True' if the field is artificial, usually
+               meaning that it was provided by the compiler and not the
+               user.  This attribute is always provided, and is `False'
+               if the field is not artificial.
+
+         `is_base_class'
+               This is `True' if the field represents a base class of a
+               C++ structure.  This attribute is always provided, and
+               is `False' if the field is not a base class of the type
+               that is the argument of `fields', or if that type was
+               not a C++ class.
+
+         `bitsize'
+               If the field is packed, or is a bitfield, then this will
+               have a non-zero value, which is the size of the field in
+               bits.  Otherwise, this will be zero; in this case the
+               field's size is given by its type.
+
+         `type'
+               The type of the field.  This is usually an instance of
+               `Type', but it can be `None' in some situations.
+
+      -- Function: Type.array (N1 [, N2])
+          Return a new `gdb.Type' object which represents an array of
+          this type.  If one argument is given, it is the inclusive
+          upper bound of the array; in this case the lower bound is
+          zero.  If two arguments are given, the first argument is the
+          lower bound of the array, and the second argument is the
+          upper bound of the array.  An array's length must not be
+          negative, but the bounds can be.
+
+      -- Function: Type.const ()
+          Return a new `gdb.Type' object which represents a
+          `const'-qualified variant of this type.
+
+      -- Function: Type.volatile ()
+          Return a new `gdb.Type' object which represents a
+          `volatile'-qualified variant of this type.
+
+      -- Function: Type.unqualified ()
+          Return a new `gdb.Type' object which represents an unqualified
+          variant of this type.  That is, the result is neither `const'
+          nor `volatile'.
+
+      -- Function: Type.range ()
+          Return a Python `Tuple' object that contains two elements: the
+          low bound of the argument type and the high bound of that
+          type.  If the type does not have a range, GDB will raise a
+          `gdb.error' exception (*note Exception Handling::).
+
+      -- Function: Type.reference ()
+          Return a new `gdb.Type' object which represents a reference
+          to this type.
+
+      -- Function: Type.pointer ()
+          Return a new `gdb.Type' object which represents a pointer to
+          this type.
+
+      -- Function: Type.strip_typedefs ()
+          Return a new `gdb.Type' that represents the real type, after
+          removing all layers of typedefs.
+
+      -- Function: Type.target ()
+          Return a new `gdb.Type' object which represents the target
+          type of this type.
+
+          For a pointer type, the target type is the type of the
+          pointed-to object.  For an array type (meaning C-like
+          arrays), the target type is the type of the elements of the
+          array.  For a function or method type, the target type is the
+          type of the return value.  For a complex type, the target
+          type is the type of the elements.  For a typedef, the target
+          type is the aliased type.
+
+          If the type does not have a target, this method will throw an
+          exception.
+
+      -- Function: Type.template_argument (n [, block])
+          If this `gdb.Type' is an instantiation of a template, this
+          will return a new `gdb.Type' which represents the type of the
+          Nth template argument.
+
+          If this `gdb.Type' is not a template type, this will throw an
+          exception.  Ordinarily, only C++ code will have template
+          types.
+
+          If BLOCK is given, then NAME is looked up in that scope.
+          Otherwise, it is searched for globally.
+
+   Each type has a code, which indicates what category this type falls
+into.  The available type categories are represented by constants
+defined in the `gdb' module:
+
+`gdb.TYPE_CODE_PTR'
+     The type is a pointer.
+
+`gdb.TYPE_CODE_ARRAY'
+     The type is an array.
+
+`gdb.TYPE_CODE_STRUCT'
+     The type is a structure.
+
+`gdb.TYPE_CODE_UNION'
+     The type is a union.
+
+`gdb.TYPE_CODE_ENUM'
+     The type is an enum.
+
+`gdb.TYPE_CODE_FLAGS'
+     A bit flags type, used for things such as status registers.
+
+`gdb.TYPE_CODE_FUNC'
+     The type is a function.
+
+`gdb.TYPE_CODE_INT'
+     The type is an integer type.
+
+`gdb.TYPE_CODE_FLT'
+     A floating point type.
+
+`gdb.TYPE_CODE_VOID'
+     The special type `void'.
+
+`gdb.TYPE_CODE_SET'
+     A Pascal set type.
+
+`gdb.TYPE_CODE_RANGE'
+     A range type, that is, an integer type with bounds.
+
+`gdb.TYPE_CODE_STRING'
+     A string type.  Note that this is only used for certain languages
+     with language-defined string types; C strings are not represented
+     this way.
+
+`gdb.TYPE_CODE_BITSTRING'
+     A string of bits.
+
+`gdb.TYPE_CODE_ERROR'
+     An unknown or erroneous type.
+
+`gdb.TYPE_CODE_METHOD'
+     A method type, as found in C++ or Java.
+
+`gdb.TYPE_CODE_METHODPTR'
+     A pointer-to-member-function.
+
+`gdb.TYPE_CODE_MEMBERPTR'
+     A pointer-to-member.
+
+`gdb.TYPE_CODE_REF'
+     A reference type.
+
+`gdb.TYPE_CODE_CHAR'
+     A character type.
+
+`gdb.TYPE_CODE_BOOL'
+     A boolean type.
+
+`gdb.TYPE_CODE_COMPLEX'
+     A complex float type.
+
+`gdb.TYPE_CODE_TYPEDEF'
+     A typedef to some other type.
+
+`gdb.TYPE_CODE_NAMESPACE'
+     A C++ namespace.
+
+`gdb.TYPE_CODE_DECFLOAT'
+     A decimal floating point type.
+
+`gdb.TYPE_CODE_INTERNAL_FUNCTION'
+     A function internal to GDB.  This is the type used to represent
+     convenience functions.
+
+   Further support for types is provided in the `gdb.types' Python
+module (*note gdb.types::).
+
+
+File: gdb.info,  Node: Pretty Printing API,  Next: Selecting Pretty-Printers,  Prev: Types In Python,  Up: Python API
+
+23.2.2.5 Pretty Printing API
+............................
+
+An example output is provided (*note Pretty Printing::).
+
+   A pretty-printer is just an object that holds a value and implements
+a specific interface, defined here.
+
+ -- Function: pretty_printer.children (self)
+     GDB will call this method on a pretty-printer to compute the
+     children of the pretty-printer's value.
+
+     This method must return an object conforming to the Python iterator
+     protocol.  Each item returned by the iterator must be a tuple
+     holding two elements.  The first element is the "name" of the
+     child; the second element is the child's value.  The value can be
+     any Python object which is convertible to a GDB value.
+
+     This method is optional.  If it does not exist, GDB will act as
+     though the value has no children.
+
+ -- Function: pretty_printer.display_hint (self)
+     The CLI may call this method and use its result to change the
+     formatting of a value.  The result will also be supplied to an MI
+     consumer as a `displayhint' attribute of the variable being
+     printed.
+
+     This method is optional.  If it does exist, this method must
+     return a string.
+
+     Some display hints are predefined by GDB:
+
+    `array'
+          Indicate that the object being printed is "array-like".  The
+          CLI uses this to respect parameters such as `set print
+          elements' and `set print array'.
+
+    `map'
+          Indicate that the object being printed is "map-like", and
+          that the children of this value can be assumed to alternate
+          between keys and values.
+
+    `string'
+          Indicate that the object being printed is "string-like".  If
+          the printer's `to_string' method returns a Python string of
+          some kind, then GDB will call its internal language-specific
+          string-printing function to format the string.  For the CLI
+          this means adding quotation marks, possibly escaping some
+          characters, respecting `set print elements', and the like.
+
+ -- Function: pretty_printer.to_string (self)
+     GDB will call this method to display the string representation of
+     the value passed to the object's constructor.
+
+     When printing from the CLI, if the `to_string' method exists, then
+     GDB will prepend its result to the values returned by `children'.
+     Exactly how this formatting is done is dependent on the display
+     hint, and may change as more hints are added.  Also, depending on
+     the print settings (*note Print Settings::), the CLI may print
+     just the result of `to_string' in a stack trace, omitting the
+     result of `children'.
+
+     If this method returns a string, it is printed verbatim.
+
+     Otherwise, if this method returns an instance of `gdb.Value', then
+     GDB prints this value.  This may result in a call to another
+     pretty-printer.
+
+     If instead the method returns a Python value which is convertible
+     to a `gdb.Value', then GDB performs the conversion and prints the
+     resulting value.  Again, this may result in a call to another
+     pretty-printer.  Python scalars (integers, floats, and booleans)
+     and strings are convertible to `gdb.Value'; other types are not.
+
+     Finally, if this method returns `None' then no further operations
+     are peformed in this method and nothing is printed.
+
+     If the result is not one of these types, an exception is raised.
+
+   GDB provides a function which can be used to look up the default
+pretty-printer for a `gdb.Value':
+
+ -- Function: gdb.default_visualizer (value)
+     This function takes a `gdb.Value' object as an argument.  If a
+     pretty-printer for this value exists, then it is returned.  If no
+     such printer exists, then this returns `None'.
+
+
+File: gdb.info,  Node: Selecting Pretty-Printers,  Next: Writing a Pretty-Printer,  Prev: Pretty Printing API,  Up: Python API
+
+23.2.2.6 Selecting Pretty-Printers
+..................................
+
+The Python list `gdb.pretty_printers' contains an array of functions or
+callable objects that have been registered via addition as a
+pretty-printer.  Printers in this list are called `global' printers,
+they're available when debugging all inferiors.  Each `gdb.Progspace'
+contains a `pretty_printers' attribute.  Each `gdb.Objfile' also
+contains a `pretty_printers' attribute.
+
+   Each function on these lists is passed a single `gdb.Value' argument
+and should return a pretty-printer object conforming to the interface
+definition above (*note Pretty Printing API::).  If a function cannot
+create a pretty-printer for the value, it should return `None'.
+
+   GDB first checks the `pretty_printers' attribute of each
+`gdb.Objfile' in the current program space and iteratively calls each
+enabled lookup routine in the list for that `gdb.Objfile' until it
+receives a pretty-printer object.  If no pretty-printer is found in the
+objfile lists, GDB then searches the pretty-printer list of the current
+program space, calling each enabled function until an object is
+returned.  After these lists have been exhausted, it tries the global
+`gdb.pretty_printers' list, again calling each enabled function until an
+object is returned.
+
+   The order in which the objfiles are searched is not specified.  For a
+given list, functions are always invoked from the head of the list, and
+iterated over sequentially until the end of the list, or a printer
+object is returned.
+
+   For various reasons a pretty-printer may not work.  For example, the
+underlying data structure may have changed and the pretty-printer is
+out of date.
+
+   The consequences of a broken pretty-printer are severe enough that
+GDB provides support for enabling and disabling individual printers.
+For example, if `print frame-arguments' is on, a backtrace can become
+highly illegible if any argument is printed with a broken printer.
+
+   Pretty-printers are enabled and disabled by attaching an `enabled'
+attribute to the registered function or callable object.  If this
+attribute is present and its value is `False', the printer is disabled,
+otherwise the printer is enabled.
+
+
+File: gdb.info,  Node: Writing a Pretty-Printer,  Next: Inferiors In Python,  Prev: Selecting Pretty-Printers,  Up: Python API
+
+23.2.2.7 Writing a Pretty-Printer
+.................................
+
+A pretty-printer consists of two parts: a lookup function to detect if
+the type is supported, and the printer itself.
+
+   Here is an example showing how a `std::string' printer might be
+written.  *Note Pretty Printing API::, for details on the API this class
+must provide.
+
+     class StdStringPrinter(object):
+         "Print a std::string"
+
+         def __init__(self, val):
+             self.val = val
+
+         def to_string(self):
+             return self.val['_M_dataplus']['_M_p']
+
+         def display_hint(self):
+             return 'string'
+
+   And here is an example showing how a lookup function for the printer
+example above might be written.
+
+     def str_lookup_function(val):
+         lookup_tag = val.type.tag
+         if lookup_tag == None:
+             return None
+         regex = re.compile("^std::basic_string<char,.*>$")
+         if regex.match(lookup_tag):
+             return StdStringPrinter(val)
+         return None
+
+   The example lookup function extracts the value's type, and attempts
+to match it to a type that it can pretty-print.  If it is a type the
+printer can pretty-print, it will return a printer object.  If not, it
+returns `None'.
+
+   We recommend that you put your core pretty-printers into a Python
+package.  If your pretty-printers are for use with a library, we
+further recommend embedding a version number into the package name.
+This practice will enable GDB to load multiple versions of your
+pretty-printers at the same time, because they will have different
+names.
+
+   You should write auto-loaded code (*note Python Auto-loading::) such
+that it can be evaluated multiple times without changing its meaning.
+An ideal auto-load file will consist solely of `import's of your
+printer modules, followed by a call to a register pretty-printers with
+the current objfile.
+
+   Taken as a whole, this approach will scale nicely to multiple
+inferiors, each potentially using a different library version.
+Embedding a version number in the Python package name will ensure that
+GDB is able to load both sets of printers simultaneously.  Then,
+because the search for pretty-printers is done by objfile, and because
+your auto-loaded code took care to register your library's printers
+with a specific objfile, GDB will find the correct printers for the
+specific version of the library used by each inferior.
+
+   To continue the `std::string' example (*note Pretty Printing API::),
+this code might appear in `gdb.libstdcxx.v6':
+
+     def register_printers(objfile):
+         objfile.pretty_printers.append(str_lookup_function)
+
+And then the corresponding contents of the auto-load file would be:
+
+     import gdb.libstdcxx.v6
+     gdb.libstdcxx.v6.register_printers(gdb.current_objfile())
+
+   The previous example illustrates a basic pretty-printer.  There are
+a few things that can be improved on.  The printer doesn't have a name,
+making it hard to identify in a list of installed printers.  The lookup
+function has a name, but lookup functions can have arbitrary, even
+identical, names.
+
+   Second, the printer only handles one type, whereas a library
+typically has several types.  One could install a lookup function for
+each desired type in the library, but one could also have a single
+lookup function recognize several types.  The latter is the
+conventional way this is handled.  If a pretty-printer can handle
+multiple data types, then its "subprinters" are the printers for the
+individual data types.
+
+   The `gdb.printing' module provides a formal way of solving these
+problems (*note gdb.printing::).  Here is another example that handles
+multiple types.
+
+   These are the types we are going to pretty-print:
+
+     struct foo { int a, b; };
+     struct bar { struct foo x, y; };
+
+   Here are the printers:
+
+     class fooPrinter:
+         """Print a foo object."""
+
+         def __init__(self, val):
+             self.val = val
+
+         def to_string(self):
+             return ("a=<" + str(self.val["a"]) +
+                     "> b=<" + str(self.val["b"]) + ">")
+
+     class barPrinter:
+         """Print a bar object."""
+
+         def __init__(self, val):
+             self.val = val
+
+         def to_string(self):
+             return ("x=<" + str(self.val["x"]) +
+                     "> y=<" + str(self.val["y"]) + ">")
+
+   This example doesn't need a lookup function, that is handled by the
+`gdb.printing' module.  Instead a function is provided to build up the
+object that handles the lookup.
+
+     import gdb.printing
+
+     def build_pretty_printer():
+         pp = gdb.printing.RegexpCollectionPrettyPrinter(
+             "my_library")
+         pp.add_printer('foo', '^foo$', fooPrinter)
+         pp.add_printer('bar', '^bar$', barPrinter)
+         return pp
+
+   And here is the autoload support:
+
+     import gdb.printing
+     import my_library
+     gdb.printing.register_pretty_printer(
+         gdb.current_objfile(),
+         my_library.build_pretty_printer())
+
+   Finally, when this printer is loaded into GDB, here is the
+corresponding output of `info pretty-printer':
+
+     (gdb) info pretty-printer
+     my_library.so:
+       my_library
+         foo
+         bar
+
+
+File: gdb.info,  Node: Inferiors In Python,  Next: Events In Python,  Prev: Writing a Pretty-Printer,  Up: Python API
+
+23.2.2.8 Inferiors In Python
+............................
+
+Programs which are being run under GDB are called inferiors (*note
+Inferiors and Programs::).  Python scripts can access information about
+and manipulate inferiors controlled by GDB via objects of the
+`gdb.Inferior' class.
+
+   The following inferior-related functions are available in the `gdb'
+module:
+
+ -- Function: gdb.inferiors ()
+     Return a tuple containing all inferior objects.
+
+ -- Function: gdb.selected_inferior ()
+     Return an object representing the current inferior.
+
+   A `gdb.Inferior' object has the following attributes:
+
+      -- Variable: Inferior.num
+          ID of inferior, as assigned by GDB.
+
+      -- Variable: Inferior.pid
+          Process ID of the inferior, as assigned by the underlying
+          operating system.
+
+      -- Variable: Inferior.was_attached
+          Boolean signaling whether the inferior was created using
+          `attach', or started by GDB itself.
+
+   A `gdb.Inferior' object has the following methods:
+
+      -- Function: Inferior.is_valid ()
+          Returns `True' if the `gdb.Inferior' object is valid, `False'
+          if not.  A `gdb.Inferior' object will become invalid if the
+          inferior no longer exists within GDB.  All other
+          `gdb.Inferior' methods will throw an exception if it is
+          invalid at the time the method is called.
+
+      -- Function: Inferior.threads ()
+          This method returns a tuple holding all the threads which are
+          valid when it is called.  If there are no valid threads, the
+          method will return an empty tuple.
+
+      -- Function: Inferior.read_memory (address, length)
+          Read LENGTH bytes of memory from the inferior, starting at
+          ADDRESS.  Returns a buffer object, which behaves much like an
+          array or a string.  It can be modified and given to the
+          `Inferior.write_memory' function.
+
+      -- Function: Inferior.write_memory (address, buffer [, length])
+          Write the contents of BUFFER to the inferior, starting at
+          ADDRESS.  The BUFFER parameter must be a Python object which
+          supports the buffer protocol, i.e., a string, an array or the
+          object returned from `Inferior.read_memory'.  If given, LENGTH
+          determines the number of bytes from BUFFER to be written.
+
+      -- Function: Inferior.search_memory (address, length, pattern)
+          Search a region of the inferior memory starting at ADDRESS
+          with the given LENGTH using the search pattern supplied in
+          PATTERN.  The PATTERN parameter must be a Python object which
+          supports the buffer protocol, i.e., a string, an array or the
+          object returned from `gdb.read_memory'.  Returns a Python
+          `Long' containing the address where the pattern was found, or
+          `None' if the pattern could not be found.
+
+
+File: gdb.info,  Node: Events In Python,  Next: Threads In Python,  Prev: Inferiors In Python,  Up: Python API
+
+23.2.2.9 Events In Python
+.........................
+
+GDB provides a general event facility so that Python code can be
+notified of various state changes, particularly changes that occur in
+the inferior.
+
+   An "event" is just an object that describes some state change.  The
+type of the object and its attributes will vary depending on the details
+of the change.  All the existing events are described below.
+
+   In order to be notified of an event, you must register an event
+handler with an "event registry".  An event registry is an object in the
+`gdb.events' module which dispatches particular events.  A registry
+provides methods to register and unregister event handlers:
+
+      -- Function: EventRegistry.connect (object)
+          Add the given callable OBJECT to the registry.  This object
+          will be called when an event corresponding to this registry
+          occurs.
+
+      -- Function: EventRegistry.disconnect (object)
+          Remove the given OBJECT from the registry.  Once removed, the
+          object will no longer receive notifications of events.
+
+   Here is an example:
+
+     def exit_handler (event):
+         print "event type: exit"
+         print "exit code: %d" % (event.exit_code)
+
+     gdb.events.exited.connect (exit_handler)
+
+   In the above example we connect our handler `exit_handler' to the
+registry `events.exited'.  Once connected, `exit_handler' gets called
+when the inferior exits.  The argument "event" in this example is of
+type `gdb.ExitedEvent'.  As you can see in the example the
+`ExitedEvent' object has an attribute which indicates the exit code of
+the inferior.
+
+   The following is a listing of the event registries that are
+available and details of the events they emit:
+
+`events.cont'
+     Emits `gdb.ThreadEvent'.
+
+     Some events can be thread specific when GDB is running in non-stop
+     mode.  When represented in Python, these events all extend
+     `gdb.ThreadEvent'.  Note, this event is not emitted directly;
+     instead, events which are emitted by this or other modules might
+     extend this event.  Examples of these events are
+     `gdb.BreakpointEvent' and `gdb.ContinueEvent'.
+
+           -- Variable: ThreadEvent.inferior_thread
+               In non-stop mode this attribute will be set to the
+               specific thread which was involved in the emitted event.
+               Otherwise, it will be set to `None'.
+
+     Emits `gdb.ContinueEvent' which extends `gdb.ThreadEvent'.
+
+     This event indicates that the inferior has been continued after a
+     stop. For inherited attribute refer to `gdb.ThreadEvent' above.
+
+`events.exited'
+     Emits `events.ExitedEvent' which indicates that the inferior has
+     exited.  `events.ExitedEvent' has two attributes:
+           -- Variable: ExitedEvent.exit_code
+               An integer representing the exit code, if available,
+               which the inferior has returned.  (The exit code could
+               be unavailable if, for example, GDB detaches from the
+               inferior.) If the exit code is unavailable, the
+               attribute does not exist.
+
+           -- Variable: ExitedEvent inferior
+               A reference to the inferior which triggered the `exited'
+               event.
+
+`events.stop'
+     Emits `gdb.StopEvent' which extends `gdb.ThreadEvent'.
+
+     Indicates that the inferior has stopped.  All events emitted by
+     this registry extend StopEvent.  As a child of `gdb.ThreadEvent',
+     `gdb.StopEvent' will indicate the stopped thread when GDB is
+     running in non-stop mode.  Refer to `gdb.ThreadEvent' above for
+     more details.
+
+     Emits `gdb.SignalEvent' which extends `gdb.StopEvent'.
+
+     This event indicates that the inferior or one of its threads has
+     received as signal.  `gdb.SignalEvent' has the following
+     attributes:
+
+           -- Variable: SignalEvent.stop_signal
+               A string representing the signal received by the
+               inferior.  A list of possible signal values can be
+               obtained by running the command `info signals' in the
+               GDB command prompt.
+
+     Also emits  `gdb.BreakpointEvent' which extends `gdb.StopEvent'.
+
+     `gdb.BreakpointEvent' event indicates that one or more breakpoints
+     have been hit, and has the following attributes:
+
+           -- Variable: BreakpointEvent.breakpoints
+               A sequence containing references to all the breakpoints
+               (type `gdb.Breakpoint') that were hit.  *Note
+               Breakpoints In Python::, for details of the
+               `gdb.Breakpoint' object.
+
+           -- Variable: BreakpointEvent.breakpoint
+               A reference to the first breakpoint that was hit.  This
+               function is maintained for backward compatibility and is
+               now deprecated in favor of the
+               `gdb.BreakpointEvent.breakpoints' attribute.
+
+`events.new_objfile'
+     Emits `gdb.NewObjFileEvent' which indicates that a new object file
+     has been loaded by GDB.  `gdb.NewObjFileEvent' has one attribute:
+
+           -- Variable: NewObjFileEvent.new_objfile
+               A reference to the object file (`gdb.Objfile') which has
+               been loaded.  *Note Objfiles In Python::, for details of
+               the `gdb.Objfile' object.
+
+
+
+File: gdb.info,  Node: Threads In Python,  Next: Commands In Python,  Prev: Events In Python,  Up: Python API
+
+23.2.2.10 Threads In Python
+...........................
+
+Python scripts can access information about, and manipulate inferior
+threads controlled by GDB, via objects of the `gdb.InferiorThread'
+class.
+
+   The following thread-related functions are available in the `gdb'
+module:
+
+ -- Function: gdb.selected_thread ()
+     This function returns the thread object for the selected thread.
+     If there is no selected thread, this will return `None'.
+
+   A `gdb.InferiorThread' object has the following attributes:
+
+      -- Variable: InferiorThread.name
+          The name of the thread.  If the user specified a name using
+          `thread name', then this returns that name.  Otherwise, if an
+          OS-supplied name is available, then it is returned.
+          Otherwise, this returns `None'.
+
+          This attribute can be assigned to.  The new value must be a
+          string object, which sets the new name, or `None', which
+          removes any user-specified thread name.
+
+      -- Variable: InferiorThread.num
+          ID of the thread, as assigned by GDB.
+
+      -- Variable: InferiorThread.ptid
+          ID of the thread, as assigned by the operating system.  This
+          attribute is a tuple containing three integers.  The first is
+          the Process ID (PID); the second is the Lightweight Process
+          ID (LWPID), and the third is the Thread ID (TID).  Either the
+          LWPID or TID may be 0, which indicates that the operating
+          system does not  use that identifier.
+
+   A `gdb.InferiorThread' object has the following methods:
+
+      -- Function: InferiorThread.is_valid ()
+          Returns `True' if the `gdb.InferiorThread' object is valid,
+          `False' if not.  A `gdb.InferiorThread' object will become
+          invalid if the thread exits, or the inferior that the thread
+          belongs is deleted.  All other `gdb.InferiorThread' methods
+          will throw an exception if it is invalid at the time the
+          method is called.
+
+      -- Function: InferiorThread.switch ()
+          This changes GDB's currently selected thread to the one
+          represented by this object.
+
+      -- Function: InferiorThread.is_stopped ()
+          Return a Boolean indicating whether the thread is stopped.
+
+      -- Function: InferiorThread.is_running ()
+          Return a Boolean indicating whether the thread is running.
+
+      -- Function: InferiorThread.is_exited ()
+          Return a Boolean indicating whether the thread is exited.
+
+
+File: gdb.info,  Node: Commands In Python,  Next: Parameters In Python,  Prev: Threads In Python,  Up: Python API
+
+23.2.2.11 Commands In Python
+............................
+
+You can implement new GDB CLI commands in Python.  A CLI command is
+implemented using an instance of the `gdb.Command' class, most commonly
+using a subclass.
+
+ -- Function: Command.__init__ (name, COMMAND_CLASS [, COMPLETER_CLASS
+          [, PREFIX]])
+     The object initializer for `Command' registers the new command
+     with GDB.  This initializer is normally invoked from the subclass'
+     own `__init__' method.
+
+     NAME is the name of the command.  If NAME consists of multiple
+     words, then the initial words are looked for as prefix commands.
+     In this case, if one of the prefix commands does not exist, an
+     exception is raised.
+
+     There is no support for multi-line commands.
+
+     COMMAND_CLASS should be one of the `COMMAND_' constants defined
+     below.  This argument tells GDB how to categorize the new command
+     in the help system.
+
+     COMPLETER_CLASS is an optional argument.  If given, it should be
+     one of the `COMPLETE_' constants defined below.  This argument
+     tells GDB how to perform completion for this command.  If not
+     given, GDB will attempt to complete using the object's `complete'
+     method (see below); if no such method is found, an error will
+     occur when completion is attempted.
+
+     PREFIX is an optional argument.  If `True', then the new command
+     is a prefix command; sub-commands of this command may be
+     registered.
+
+     The help text for the new command is taken from the Python
+     documentation string for the command's class, if there is one.  If
+     no documentation string is provided, the default value "This
+     command is not documented." is used.
+
+ -- Function: Command.dont_repeat ()
+     By default, a GDB command is repeated when the user enters a blank
+     line at the command prompt.  A command can suppress this behavior
+     by invoking the `dont_repeat' method.  This is similar to the user
+     command `dont-repeat', see *Note dont-repeat: Define.
+
+ -- Function: Command.invoke (argument, from_tty)
+     This method is called by GDB when this command is invoked.
+
+     ARGUMENT is a string.  It is the argument to the command, after
+     leading and trailing whitespace has been stripped.
+
+     FROM_TTY is a boolean argument.  When true, this means that the
+     command was entered by the user at the terminal; when false it
+     means that the command came from elsewhere.
+
+     If this method throws an exception, it is turned into a GDB
+     `error' call.  Otherwise, the return value is ignored.
+
+     To break ARGUMENT up into an argv-like string use
+     `gdb.string_to_argv'.  This function behaves identically to GDB's
+     internal argument lexer `buildargv'.  It is recommended to use
+     this for consistency.  Arguments are separated by spaces and may
+     be quoted.  Example:
+
+          print gdb.string_to_argv ("1 2\ \\\"3 '4 \"5' \"6 '7\"")
+          ['1', '2 "3', '4 "5', "6 '7"]
+
+
+ -- Function: Command.complete (text, word)
+     This method is called by GDB when the user attempts completion on
+     this command.  All forms of completion are handled by this method,
+     that is, the <TAB> and <M-?> key bindings (*note Completion::),
+     and the `complete' command (*note complete: Help.).
+
+     The arguments TEXT and WORD are both strings.  TEXT holds the
+     complete command line up to the cursor's location.  WORD holds the
+     last word of the command line; this is computed using a
+     word-breaking heuristic.
+
+     The `complete' method can return several values:
+        * If the return value is a sequence, the contents of the
+          sequence are used as the completions.  It is up to `complete'
+          to ensure that the contents actually do complete the word.  A
+          zero-length sequence is allowed, it means that there were no
+          completions available.  Only string elements of the sequence
+          are used; other elements in the sequence are ignored.
+
+        * If the return value is one of the `COMPLETE_' constants
+          defined below, then the corresponding GDB-internal completion
+          function is invoked, and its result is used.
+
+        * All other results are treated as though there were no
+          available completions.
+
+   When a new command is registered, it must be declared as a member of
+some general class of commands.  This is used to classify top-level
+commands in the on-line help system; note that prefix commands are not
+listed under their own category but rather that of their top-level
+command.  The available classifications are represented by constants
+defined in the `gdb' module:
+
+`gdb.COMMAND_NONE'
+     The command does not belong to any particular class.  A command in
+     this category will not be displayed in any of the help categories.
+
+`gdb.COMMAND_RUNNING'
+     The command is related to running the inferior.  For example,
+     `start', `step', and `continue' are in this category.  Type `help
+     running' at the GDB prompt to see a list of commands in this
+     category.
+
+`gdb.COMMAND_DATA'
+     The command is related to data or variables.  For example, `call',
+     `find', and `print' are in this category.  Type `help data' at the
+     GDB prompt to see a list of commands in this category.
+
+`gdb.COMMAND_STACK'
+     The command has to do with manipulation of the stack.  For example,
+     `backtrace', `frame', and `return' are in this category.  Type
+     `help stack' at the GDB prompt to see a list of commands in this
+     category.
+
+`gdb.COMMAND_FILES'
+     This class is used for file-related commands.  For example,
+     `file', `list' and `section' are in this category.  Type `help
+     files' at the GDB prompt to see a list of commands in this
+     category.
+
+`gdb.COMMAND_SUPPORT'
+     This should be used for "support facilities", generally meaning
+     things that are useful to the user when interacting with GDB, but
+     not related to the state of the inferior.  For example, `help',
+     `make', and `shell' are in this category.  Type `help support' at
+     the GDB prompt to see a list of commands in this category.
+
+`gdb.COMMAND_STATUS'
+     The command is an `info'-related command, that is, related to the
+     state of GDB itself.  For example, `info', `macro', and `show' are
+     in this category.  Type `help status' at the GDB prompt to see a
+     list of commands in this category.
+
+`gdb.COMMAND_BREAKPOINTS'
+     The command has to do with breakpoints.  For example, `break',
+     `clear', and `delete' are in this category.  Type `help
+     breakpoints' at the GDB prompt to see a list of commands in this
+     category.
+
+`gdb.COMMAND_TRACEPOINTS'
+     The command has to do with tracepoints.  For example, `trace',
+     `actions', and `tfind' are in this category.  Type `help
+     tracepoints' at the GDB prompt to see a list of commands in this
+     category.
+
+`gdb.COMMAND_USER'
+     The command is a general purpose command for the user, and
+     typically does not fit in one of the other categories.  Type `help
+     user-defined' at the GDB prompt to see a list of commands in this
+     category, as well as the list of gdb macros (*note Sequences::).
+
+`gdb.COMMAND_OBSCURE'
+     The command is only used in unusual circumstances, or is not of
+     general interest to users.  For example, `checkpoint', `fork', and
+     `stop' are in this category.  Type `help obscure' at the GDB
+     prompt to see a list of commands in this category.
+
+`gdb.COMMAND_MAINTENANCE'
+     The command is only useful to GDB maintainers.  The `maintenance'
+     and `flushregs' commands are in this category.  Type `help
+     internals' at the GDB prompt to see a list of commands in this
+     category.
+
+   A new command can use a predefined completion function, either by
+specifying it via an argument at initialization, or by returning it
+from the `complete' method.  These predefined completion constants are
+all defined in the `gdb' module:
+
+`gdb.COMPLETE_NONE'
+     This constant means that no completion should be done.
+
+`gdb.COMPLETE_FILENAME'
+     This constant means that filename completion should be performed.
+
+`gdb.COMPLETE_LOCATION'
+     This constant means that location completion should be done.
+     *Note Specify Location::.
+
+`gdb.COMPLETE_COMMAND'
+     This constant means that completion should examine GDB command
+     names.
+
+`gdb.COMPLETE_SYMBOL'
+     This constant means that completion should be done using symbol
+     names as the source.
+
+   The following code snippet shows how a trivial CLI command can be
+implemented in Python:
+
+     class HelloWorld (gdb.Command):
+       """Greet the whole world."""
+
+       def __init__ (self):
+         super (HelloWorld, self).__init__ ("hello-world", gdb.COMMAND_USER)
+
+       def invoke (self, arg, from_tty):
+         print "Hello, World!"
+
+     HelloWorld ()
+
+   The last line instantiates the class, and is necessary to trigger the
+registration of the command with GDB.  Depending on how the Python code
+is read into GDB, you may need to import the `gdb' module explicitly.
+
+
+File: gdb.info,  Node: Parameters In Python,  Next: Functions In Python,  Prev: Commands In Python,  Up: Python API
+
+23.2.2.12 Parameters In Python
+..............................
+
+You can implement new GDB parameters using Python.  A new parameter is
+implemented as an instance of the `gdb.Parameter' class.
+
+   Parameters are exposed to the user via the `set' and `show'
+commands.  *Note Help::.
+
+   There are many parameters that already exist and can be set in GDB.
+Two examples are: `set follow fork' and `set charset'.  Setting these
+parameters influences certain behavior in GDB.  Similarly, you can
+define parameters that can be used to influence behavior in custom
+Python scripts and commands.
+
+ -- Function: Parameter.__init__ (name, COMMAND-CLASS, PARAMETER-CLASS
+          [, ENUM-SEQUENCE])
+     The object initializer for `Parameter' registers the new parameter
+     with GDB.  This initializer is normally invoked from the subclass'
+     own `__init__' method.
+
+     NAME is the name of the new parameter.  If NAME consists of
+     multiple words, then the initial words are looked for as prefix
+     parameters.  An example of this can be illustrated with the `set
+     print' set of parameters.  If NAME is `print foo', then `print'
+     will be searched as the prefix parameter.  In this case the
+     parameter can subsequently be accessed in GDB as `set print foo'.
+
+     If NAME consists of multiple words, and no prefix parameter group
+     can be found, an exception is raised.
+
+     COMMAND-CLASS should be one of the `COMMAND_' constants (*note
+     Commands In Python::).  This argument tells GDB how to categorize
+     the new parameter in the help system.
+
+     PARAMETER-CLASS should be one of the `PARAM_' constants defined
+     below.  This argument tells GDB the type of the new parameter;
+     this information is used for input validation and completion.
+
+     If PARAMETER-CLASS is `PARAM_ENUM', then ENUM-SEQUENCE must be a
+     sequence of strings.  These strings represent the possible values
+     for the parameter.
+
+     If PARAMETER-CLASS is not `PARAM_ENUM', then the presence of a
+     fourth argument will cause an exception to be thrown.
+
+     The help text for the new parameter is taken from the Python
+     documentation string for the parameter's class, if there is one.
+     If there is no documentation string, a default value is used.
+
+ -- Variable: Parameter.set_doc
+     If this attribute exists, and is a string, then its value is used
+     as the help text for this parameter's `set' command.  The value is
+     examined when `Parameter.__init__' is invoked; subsequent changes
+     have no effect.
+
+ -- Variable: Parameter.show_doc
+     If this attribute exists, and is a string, then its value is used
+     as the help text for this parameter's `show' command.  The value is
+     examined when `Parameter.__init__' is invoked; subsequent changes
+     have no effect.
+
+ -- Variable: Parameter.value
+     The `value' attribute holds the underlying value of the parameter.
+     It can be read and assigned to just as any other attribute.  GDB
+     does validation when assignments are made.
+
+   There are two methods that should be implemented in any `Parameter'
+class.  These are:
+
+ -- Function: Parameter.get_set_string (self)
+     GDB will call this method when a PARAMETER's value has been
+     changed via the `set' API (for example, `set foo off').  The
+     `value' attribute has already been populated with the new value
+     and may be used in output.  This method must return a string.
+
+ -- Function: Parameter.get_show_string (self, svalue)
+     GDB will call this method when a PARAMETER's `show' API has been
+     invoked (for example, `show foo').  The argument `svalue' receives
+     the string representation of the current value.  This method must
+     return a string.
+
+   When a new parameter is defined, its type must be specified.  The
+available types are represented by constants defined in the `gdb'
+module:
+
+`gdb.PARAM_BOOLEAN'
+     The value is a plain boolean.  The Python boolean values, `True'
+     and `False' are the only valid values.
+
+`gdb.PARAM_AUTO_BOOLEAN'
+     The value has three possible states: true, false, and `auto'.  In
+     Python, true and false are represented using boolean constants, and
+     `auto' is represented using `None'.
+
+`gdb.PARAM_UINTEGER'
+     The value is an unsigned integer.  The value of 0 should be
+     interpreted to mean "unlimited".
+
+`gdb.PARAM_INTEGER'
+     The value is a signed integer.  The value of 0 should be
+     interpreted to mean "unlimited".
+
+`gdb.PARAM_STRING'
+     The value is a string.  When the user modifies the string, any
+     escape sequences, such as `\t', `\f', and octal escapes, are
+     translated into corresponding characters and encoded into the
+     current host charset.
+
+`gdb.PARAM_STRING_NOESCAPE'
+     The value is a string.  When the user modifies the string, escapes
+     are passed through untranslated.
+
+`gdb.PARAM_OPTIONAL_FILENAME'
+     The value is a either a filename (a string), or `None'.
+
+`gdb.PARAM_FILENAME'
+     The value is a filename.  This is just like
+     `PARAM_STRING_NOESCAPE', but uses file names for completion.
+
+`gdb.PARAM_ZINTEGER'
+     The value is an integer.  This is like `PARAM_INTEGER', except 0
+     is interpreted as itself.
+
+`gdb.PARAM_ENUM'
+     The value is a string, which must be one of a collection string
+     constants provided when the parameter is created.
+
+
+File: gdb.info,  Node: Functions In Python,  Next: Progspaces In Python,  Prev: Parameters In Python,  Up: Python API
+
+23.2.2.13 Writing new convenience functions
+...........................................
+
+You can implement new convenience functions (*note Convenience Vars::)
+in Python.  A convenience function is an instance of a subclass of the
+class `gdb.Function'.
+
+ -- Function: Function.__init__ (name)
+     The initializer for `Function' registers the new function with
+     GDB.  The argument NAME is the name of the function, a string.
+     The function will be visible to the user as a convenience variable
+     of type `internal function', whose name is the same as the given
+     NAME.
+
+     The documentation for the new function is taken from the
+     documentation string for the new class.
+
+ -- Function: Function.invoke (*ARGS)
+     When a convenience function is evaluated, its arguments are
+     converted to instances of `gdb.Value', and then the function's
+     `invoke' method is called.  Note that GDB does not predetermine
+     the arity of convenience functions.  Instead, all available
+     arguments are passed to `invoke', following the standard Python
+     calling convention.  In particular, a convenience function can
+     have default values for parameters without ill effect.
+
+     The return value of this method is used as its value in the
+     enclosing expression.  If an ordinary Python value is returned, it
+     is converted to a `gdb.Value' following the usual rules.
+
+   The following code snippet shows how a trivial convenience function
+can be implemented in Python:
+
+     class Greet (gdb.Function):
+       """Return string to greet someone.
+     Takes a name as argument."""
+
+       def __init__ (self):
+         super (Greet, self).__init__ ("greet")
+
+       def invoke (self, name):
+         return "Hello, %s!" % name.string ()
+
+     Greet ()
+
+   The last line instantiates the class, and is necessary to trigger the
+registration of the function with GDB.  Depending on how the Python
+code is read into GDB, you may need to import the `gdb' module
+explicitly.
+
+
+File: gdb.info,  Node: Progspaces In Python,  Next: Objfiles In Python,  Prev: Functions In Python,  Up: Python API
+
+23.2.2.14 Program Spaces In Python
+..................................
+
+A program space, or "progspace", represents a symbolic view of an
+address space.  It consists of all of the objfiles of the program.
+*Note Objfiles In Python::.  *Note program spaces: Inferiors and
+Programs, for more details about program spaces.
+
+   The following progspace-related functions are available in the `gdb'
+module:
+
+ -- Function: gdb.current_progspace ()
+     This function returns the program space of the currently selected
+     inferior.  *Note Inferiors and Programs::.
+
+ -- Function: gdb.progspaces ()
+     Return a sequence of all the progspaces currently known to GDB.
+
+   Each progspace is represented by an instance of the `gdb.Progspace'
+class.
+
+ -- Variable: Progspace.filename
+     The file name of the progspace as a string.
+
+ -- Variable: Progspace.pretty_printers
+     The `pretty_printers' attribute is a list of functions.  It is
+     used to look up pretty-printers.  A `Value' is passed to each
+     function in order; if the function returns `None', then the search
+     continues.  Otherwise, the return value should be an object which
+     is used to format the value.  *Note Pretty Printing API::, for more
+     information.
+
+
+File: gdb.info,  Node: Objfiles In Python,  Next: Frames In Python,  Prev: Progspaces In Python,  Up: Python API
+
+23.2.2.15 Objfiles In Python
+............................
+
+GDB loads symbols for an inferior from various symbol-containing files
+(*note Files::).  These include the primary executable file, any shared
+libraries used by the inferior, and any separate debug info files
+(*note Separate Debug Files::).  GDB calls these symbol-containing
+files "objfiles".
+
+   The following objfile-related functions are available in the `gdb'
+module:
+
+ -- Function: gdb.current_objfile ()
+     When auto-loading a Python script (*note Python Auto-loading::),
+     GDB sets the "current objfile" to the corresponding objfile.  This
+     function returns the current objfile.  If there is no current
+     objfile, this function returns `None'.
+
+ -- Function: gdb.objfiles ()
+     Return a sequence of all the objfiles current known to GDB.  *Note
+     Objfiles In Python::.
+
+   Each objfile is represented by an instance of the `gdb.Objfile'
+class.
+
+ -- Variable: Objfile.filename
+     The file name of the objfile as a string.
+
+ -- Variable: Objfile.pretty_printers
+     The `pretty_printers' attribute is a list of functions.  It is
+     used to look up pretty-printers.  A `Value' is passed to each
+     function in order; if the function returns `None', then the search
+     continues.  Otherwise, the return value should be an object which
+     is used to format the value.  *Note Pretty Printing API::, for more
+     information.
+
+   A `gdb.Objfile' object has the following methods:
+
+ -- Function: Objfile.is_valid ()
+     Returns `True' if the `gdb.Objfile' object is valid, `False' if
+     not.  A `gdb.Objfile' object can become invalid if the object file
+     it refers to is not loaded in GDB any longer.  All other
+     `gdb.Objfile' methods will throw an exception if it is invalid at
+     the time the method is called.
+
+
+File: gdb.info,  Node: Frames In Python,  Next: Blocks In Python,  Prev: Objfiles In Python,  Up: Python API
+
+23.2.2.16 Accessing inferior stack frames from Python.
+......................................................
+
+When the debugged program stops, GDB is able to analyze its call stack
+(*note Stack frames: Frames.).  The `gdb.Frame' class represents a
+frame in the stack.  A `gdb.Frame' object is only valid while its
+corresponding frame exists in the inferior's stack.  If you try to use
+an invalid frame object, GDB will throw a `gdb.error' exception (*note
+Exception Handling::).
+
+   Two `gdb.Frame' objects can be compared for equality with the `=='
+operator, like:
+
+     (gdb) python print gdb.newest_frame() == gdb.selected_frame ()
+     True
+
+   The following frame-related functions are available in the `gdb'
+module:
+
+ -- Function: gdb.selected_frame ()
+     Return the selected frame object.  (*note Selecting a Frame:
+     Selection.).
+
+ -- Function: gdb.newest_frame ()
+     Return the newest frame object for the selected thread.
+
+ -- Function: gdb.frame_stop_reason_string (reason)
+     Return a string explaining the reason why GDB stopped unwinding
+     frames, as expressed by the given REASON code (an integer, see the
+     `unwind_stop_reason' method further down in this section).
+
+   A `gdb.Frame' object has the following methods:
+
+      -- Function: Frame.is_valid ()
+          Returns true if the `gdb.Frame' object is valid, false if not.
+          A frame object can become invalid if the frame it refers to
+          doesn't exist anymore in the inferior.  All `gdb.Frame'
+          methods will throw an exception if it is invalid at the time
+          the method is called.
+
+      -- Function: Frame.name ()
+          Returns the function name of the frame, or `None' if it can't
+          be obtained.
+
+      -- Function: Frame.type ()
+          Returns the type of the frame.  The value can be one of:
+         `gdb.NORMAL_FRAME'
+               An ordinary stack frame.
+
+         `gdb.DUMMY_FRAME'
+               A fake stack frame that was created by GDB when
+               performing an inferior function call.
+
+         `gdb.INLINE_FRAME'
+               A frame representing an inlined function.  The function
+               was inlined into a `gdb.NORMAL_FRAME' that is older than
+               this one.
+
+         `gdb.TAILCALL_FRAME'
+               A frame representing a tail call.  *Note Tail Call
+               Frames::.
+
+         `gdb.SIGTRAMP_FRAME'
+               A signal trampoline frame.  This is the frame created by
+               the OS when it calls into a signal handler.
+
+         `gdb.ARCH_FRAME'
+               A fake stack frame representing a cross-architecture
+               call.
+
+         `gdb.SENTINEL_FRAME'
+               This is like `gdb.NORMAL_FRAME', but it is only used for
+               the newest frame.
+
+      -- Function: Frame.unwind_stop_reason ()
+          Return an integer representing the reason why it's not
+          possible to find more frames toward the outermost frame.  Use
+          `gdb.frame_stop_reason_string' to convert the value returned
+          by this function to a string. The value can be one of:
+
+         `gdb.FRAME_UNWIND_NO_REASON'
+               No particular reason (older frames should be available).
+
+         `gdb.FRAME_UNWIND_NULL_ID'
+               The previous frame's analyzer returns an invalid result.
+
+         `gdb.FRAME_UNWIND_OUTERMOST'
+               This frame is the outermost.
+
+         `gdb.FRAME_UNWIND_UNAVAILABLE'
+               Cannot unwind further, because that would require
+               knowing the values of registers or memory that have not
+               been collected.
+
+         `gdb.FRAME_UNWIND_INNER_ID'
+               This frame ID looks like it ought to belong to a NEXT
+               frame, but we got it for a PREV frame.  Normally, this
+               is a sign of unwinder failure.  It could also indicate
+               stack corruption.
+
+         `gdb.FRAME_UNWIND_SAME_ID'
+               This frame has the same ID as the previous one.  That
+               means that unwinding further would almost certainly give
+               us another frame with exactly the same ID, so break the
+               chain.  Normally, this is a sign of unwinder failure.
+               It could also indicate stack corruption.
+
+         `gdb.FRAME_UNWIND_NO_SAVED_PC'
+               The frame unwinder did not find any saved PC, but we
+               needed one to unwind further.
+
+         `gdb.FRAME_UNWIND_FIRST_ERROR'
+               Any stop reason greater or equal to this value indicates
+               some kind of error.  This special value facilitates
+               writing code that tests for errors in unwinding in a way
+               that will work correctly even if the list of the other
+               values is modified in future GDB versions.  Using it,
+               you could write:
+                    reason = gdb.selected_frame().unwind_stop_reason ()
+                    reason_str =  gdb.frame_stop_reason_string (reason)
+                    if reason >=  gdb.FRAME_UNWIND_FIRST_ERROR:
+                        print "An error occured: %s" % reason_str
+
+
+      -- Function: Frame.pc ()
+          Returns the frame's resume address.
+
+      -- Function: Frame.block ()
+          Return the frame's code block.  *Note Blocks In Python::.
+
+      -- Function: Frame.function ()
+          Return the symbol for the function corresponding to this
+          frame.  *Note Symbols In Python::.
+
+      -- Function: Frame.older ()
+          Return the frame that called this frame.
+
+      -- Function: Frame.newer ()
+          Return the frame called by this frame.
+
+      -- Function: Frame.find_sal ()
+          Return the frame's symtab and line object.  *Note Symbol
+          Tables In Python::.
+
+      -- Function: Frame.read_var (variable [, block])
+          Return the value of VARIABLE in this frame.  If the optional
+          argument BLOCK is provided, search for the variable from that
+          block; otherwise start at the frame's current block (which is
+          determined by the frame's current program counter).  VARIABLE
+          must be a string or a `gdb.Symbol' object.  BLOCK must be a
+          `gdb.Block' object.
+
+      -- Function: Frame.select ()
+          Set this frame to be the selected frame.  *Note Examining the
+          Stack: Stack.
+
+
+File: gdb.info,  Node: Blocks In Python,  Next: Symbols In Python,  Prev: Frames In Python,  Up: Python API
+
+23.2.2.17 Accessing frame blocks from Python.
+.............................................
+
+Within each frame, GDB maintains information on each block stored in
+that frame.  These blocks are organized hierarchically, and are
+represented individually in Python as a `gdb.Block'.  Please see *Note
+Frames In Python::, for a more in-depth discussion on frames.
+Furthermore, see *Note Examining the Stack: Stack, for more detailed
+technical information on GDB's book-keeping of the stack.
+
+   A `gdb.Block' is iterable.  The iterator returns the symbols (*note
+Symbols In Python::) local to the block.  Python programs should not
+assume that a specific block object will always contain a given symbol,
+since changes in GDB features and infrastructure may cause symbols move
+across blocks in a symbol table.
+
+   The following block-related functions are available in the `gdb'
+module:
+
+ -- Function: gdb.block_for_pc (pc)
+     Return the `gdb.Block' containing the given PC value.  If the
+     block cannot be found for the PC value specified, the function
+     will return `None'.
+
+   A `gdb.Block' object has the following methods:
+
+      -- Function: Block.is_valid ()
+          Returns `True' if the `gdb.Block' object is valid, `False' if
+          not.  A block object can become invalid if the block it
+          refers to doesn't exist anymore in the inferior.  All other
+          `gdb.Block' methods will throw an exception if it is invalid
+          at the time the method is called.  The block's validity is
+          also checked during iteration over symbols of the block.
+
+   A `gdb.Block' object has the following attributes:
+
+      -- Variable: Block.start
+          The start address of the block.  This attribute is not
+          writable.
+
+      -- Variable: Block.end
+          The end address of the block.  This attribute is not writable.
+
+      -- Variable: Block.function
+          The name of the block represented as a `gdb.Symbol'.  If the
+          block is not named, then this attribute holds `None'.  This
+          attribute is not writable.
+
+      -- Variable: Block.superblock
+          The block containing this block.  If this parent block does
+          not exist, this attribute holds `None'.  This attribute is
+          not writable.
+
+      -- Variable: Block.global_block
+          The global block associated with this block.  This attribute
+          is not writable.
+
+      -- Variable: Block.static_block
+          The static block associated with this block.  This attribute
+          is not writable.
+
+      -- Variable: Block.is_global
+          `True' if the `gdb.Block' object is a global block, `False'
+          if not.  This attribute is not writable.
+
+      -- Variable: Block.is_static
+          `True' if the `gdb.Block' object is a static block, `False'
+          if not.  This attribute is not writable.
+
+
+File: gdb.info,  Node: Symbols In Python,  Next: Symbol Tables In Python,  Prev: Blocks In Python,  Up: Python API
+
+23.2.2.18 Python representation of Symbols.
+...........................................
+
+GDB represents every variable, function and type as an entry in a
+symbol table.  *Note Examining the Symbol Table: Symbols.  Similarly,
+Python represents these symbols in GDB with the `gdb.Symbol' object.
+
+   The following symbol-related functions are available in the `gdb'
+module:
+
+ -- Function: gdb.lookup_symbol (name [, block [, domain]])
+     This function searches for a symbol by name.  The search scope can
+     be restricted to the parameters defined in the optional domain and
+     block arguments.
+
+     NAME is the name of the symbol.  It must be a string.  The
+     optional BLOCK argument restricts the search to symbols visible in
+     that BLOCK.  The BLOCK argument must be a `gdb.Block' object.  If
+     omitted, the block for the current frame is used.  The optional
+     DOMAIN argument restricts the search to the domain type.  The
+     DOMAIN argument must be a domain constant defined in the `gdb'
+     module and described later in this chapter.
+
+     The result is a tuple of two elements.  The first element is a
+     `gdb.Symbol' object or `None' if the symbol is not found.  If the
+     symbol is found, the second element is `True' if the symbol is a
+     field of a method's object (e.g., `this' in C++), otherwise it is
+     `False'.  If the symbol is not found, the second element is
+     `False'.
+
+ -- Function: gdb.lookup_global_symbol (name [, domain])
+     This function searches for a global symbol by name.  The search
+     scope can be restricted to by the domain argument.
+
+     NAME is the name of the symbol.  It must be a string.  The
+     optional DOMAIN argument restricts the search to the domain type.
+     The DOMAIN argument must be a domain constant defined in the `gdb'
+     module and described later in this chapter.
+
+     The result is a `gdb.Symbol' object or `None' if the symbol is not
+     found.
+
+   A `gdb.Symbol' object has the following attributes:
+
+      -- Variable: Symbol.type
+          The type of the symbol or `None' if no type is recorded.
+          This attribute is represented as a `gdb.Type' object.  *Note
+          Types In Python::.  This attribute is not writable.
+
+      -- Variable: Symbol.symtab
+          The symbol table in which the symbol appears.  This attribute
+          is represented as a `gdb.Symtab' object.  *Note Symbol Tables
+          In Python::.  This attribute is not writable.
+
+      -- Variable: Symbol.line
+          The line number in the source code at which the symbol was
+          defined.  This is an integer.
+
+      -- Variable: Symbol.name
+          The name of the symbol as a string.  This attribute is not
+          writable.
+
+      -- Variable: Symbol.linkage_name
+          The name of the symbol, as used by the linker (i.e., may be
+          mangled).  This attribute is not writable.
+
+      -- Variable: Symbol.print_name
+          The name of the symbol in a form suitable for output.  This
+          is either `name' or `linkage_name', depending on whether the
+          user asked GDB to display demangled or mangled names.
+
+      -- Variable: Symbol.addr_class
+          The address class of the symbol.  This classifies how to find
+          the value of a symbol.  Each address class is a constant
+          defined in the `gdb' module and described later in this
+          chapter.
+
+      -- Variable: Symbol.needs_frame
+          This is `True' if evaluating this symbol's value requires a
+          frame (*note Frames In Python::) and `False' otherwise.
+          Typically, local variables will require a frame, but other
+          symbols will not.
+
+      -- Variable: Symbol.is_argument
+          `True' if the symbol is an argument of a function.
+
+      -- Variable: Symbol.is_constant
+          `True' if the symbol is a constant.
+
+      -- Variable: Symbol.is_function
+          `True' if the symbol is a function or a method.
+
+      -- Variable: Symbol.is_variable
+          `True' if the symbol is a variable.
+
+   A `gdb.Symbol' object has the following methods:
+
+      -- Function: Symbol.is_valid ()
+          Returns `True' if the `gdb.Symbol' object is valid, `False'
+          if not.  A `gdb.Symbol' object can become invalid if the
+          symbol it refers to does not exist in GDB any longer.  All
+          other `gdb.Symbol' methods will throw an exception if it is
+          invalid at the time the method is called.
+
+      -- Function: Symbol.value ([frame])
+          Compute the value of the symbol, as a `gdb.Value'.  For
+          functions, this computes the address of the function, cast to
+          the appropriate type.  If the symbol requires a frame in
+          order to compute its value, then FRAME must be given.  If
+          FRAME is not given, or if FRAME is invalid, then this method
+          will throw an exception.
+
+   The available domain categories in `gdb.Symbol' are represented as
+constants in the `gdb' module:
+
+`gdb.SYMBOL_UNDEF_DOMAIN'
+     This is used when a domain has not been discovered or none of the
+     following domains apply.  This usually indicates an error either
+     in the symbol information or in GDB's handling of symbols.  
+
+`gdb.SYMBOL_VAR_DOMAIN'
+     This domain contains variables, function names, typedef names and
+     enum type values.  
+
+`gdb.SYMBOL_STRUCT_DOMAIN'
+     This domain holds struct, union and enum type names.  
+
+`gdb.SYMBOL_LABEL_DOMAIN'
+     This domain contains names of labels (for gotos).  
+
+`gdb.SYMBOL_VARIABLES_DOMAIN'
+     This domain holds a subset of the `SYMBOLS_VAR_DOMAIN'; it
+     contains everything minus functions and types.  
+
+`gdb.SYMBOL_FUNCTION_DOMAIN'
+     This domain contains all functions.  
+
+`gdb.SYMBOL_TYPES_DOMAIN'
+     This domain contains all types.
+
+   The available address class categories in `gdb.Symbol' are
+represented as constants in the `gdb' module:
+
+`gdb.SYMBOL_LOC_UNDEF'
+     If this is returned by address class, it indicates an error either
+     in the symbol information or in GDB's handling of symbols.  
+
+`gdb.SYMBOL_LOC_CONST'
+     Value is constant int.  
+
+`gdb.SYMBOL_LOC_STATIC'
+     Value is at a fixed address.  
+
+`gdb.SYMBOL_LOC_REGISTER'
+     Value is in a register.  
+
+`gdb.SYMBOL_LOC_ARG'
+     Value is an argument.  This value is at the offset stored within
+     the symbol inside the frame's argument list.  
+
+`gdb.SYMBOL_LOC_REF_ARG'
+     Value address is stored in the frame's argument list.  Just like
+     `LOC_ARG' except that the value's address is stored at the offset,
+     not the value itself.  
+
+`gdb.SYMBOL_LOC_REGPARM_ADDR'
+     Value is a specified register.  Just like `LOC_REGISTER' except
+     the register holds the address of the argument instead of the
+     argument itself.  
+
+`gdb.SYMBOL_LOC_LOCAL'
+     Value is a local variable.  
+
+`gdb.SYMBOL_LOC_TYPEDEF'
+     Value not used.  Symbols in the domain `SYMBOL_STRUCT_DOMAIN' all
+     have this class.  
+
+`gdb.SYMBOL_LOC_BLOCK'
+     Value is a block.  
+
+`gdb.SYMBOL_LOC_CONST_BYTES'
+     Value is a byte-sequence.  
+
+`gdb.SYMBOL_LOC_UNRESOLVED'
+     Value is at a fixed address, but the address of the variable has
+     to be determined from the minimal symbol table whenever the
+     variable is referenced.  
+
+`gdb.SYMBOL_LOC_OPTIMIZED_OUT'
+     The value does not actually exist in the program.  
+
+`gdb.SYMBOL_LOC_COMPUTED'
+     The value's address is a computed location.
+
+
+File: gdb.info,  Node: Symbol Tables In Python,  Next: Breakpoints In Python,  Prev: Symbols In Python,  Up: Python API
+
+23.2.2.19 Symbol table representation in Python.
+................................................
+
+Access to symbol table data maintained by GDB on the inferior is
+exposed to Python via two objects: `gdb.Symtab_and_line' and
+`gdb.Symtab'.  Symbol table and line data for a frame is returned from
+the `find_sal' method in `gdb.Frame' object.  *Note Frames In Python::.
+
+   For more information on GDB's symbol table management, see *Note
+Examining the Symbol Table: Symbols, for more information.
+
+   A `gdb.Symtab_and_line' object has the following attributes:
+
+      -- Variable: Symtab_and_line.symtab
+          The symbol table object (`gdb.Symtab') for this frame.  This
+          attribute is not writable.
+
+      -- Variable: Symtab_and_line.pc
+          Indicates the start of the address range occupied by code for
+          the current source line.  This attribute is not writable.
+
+      -- Variable: Symtab_and_line.last
+          Indicates the end of the address range occupied by code for
+          the current source line.  This attribute is not writable.
+
+      -- Variable: Symtab_and_line.line
+          Indicates the current line number for this object.  This
+          attribute is not writable.
+
+   A `gdb.Symtab_and_line' object has the following methods:
+
+      -- Function: Symtab_and_line.is_valid ()
+          Returns `True' if the `gdb.Symtab_and_line' object is valid,
+          `False' if not.  A `gdb.Symtab_and_line' object can become
+          invalid if the Symbol table and line object it refers to does
+          not exist in GDB any longer.  All other `gdb.Symtab_and_line'
+          methods will throw an exception if it is invalid at the time
+          the method is called.
+
+   A `gdb.Symtab' object has the following attributes:
+
+      -- Variable: Symtab.filename
+          The symbol table's source filename.  This attribute is not
+          writable.
+
+      -- Variable: Symtab.objfile
+          The symbol table's backing object file.  *Note Objfiles In
+          Python::.  This attribute is not writable.
+
+   A `gdb.Symtab' object has the following methods:
+
+      -- Function: Symtab.is_valid ()
+          Returns `True' if the `gdb.Symtab' object is valid, `False'
+          if not.  A `gdb.Symtab' object can become invalid if the
+          symbol table it refers to does not exist in GDB any longer.
+          All other `gdb.Symtab' methods will throw an exception if it
+          is invalid at the time the method is called.
+
+      -- Function: Symtab.fullname ()
+          Return the symbol table's source absolute file name.
+
+      -- Function: Symtab.global_block ()
+          Return the global block of the underlying symbol table.
+          *Note Blocks In Python::.
+
+      -- Function: Symtab.static_block ()
+          Return the static block of the underlying symbol table.
+          *Note Blocks In Python::.
+
+
+File: gdb.info,  Node: Breakpoints In Python,  Next: Finish Breakpoints in Python,  Prev: Symbol Tables In Python,  Up: Python API
+
+23.2.2.20 Manipulating breakpoints using Python
+...............................................
+
+Python code can manipulate breakpoints via the `gdb.Breakpoint' class.
+
+ -- Function: Breakpoint.__init__ (spec [, type [, wp_class
+          [,internal]]])
+     Create a new breakpoint.  SPEC is a string naming the location of
+     the breakpoint, or an expression that defines a watchpoint.  The
+     contents can be any location recognized by the `break' command, or
+     in the case of a watchpoint, by the `watch' command.  The optional
+     TYPE denotes the breakpoint to create from the types defined later
+     in this chapter.  This argument can be either: `gdb.BP_BREAKPOINT'
+     or `gdb.BP_WATCHPOINT'.  TYPE defaults to `gdb.BP_BREAKPOINT'.
+     The optional INTERNAL argument allows the breakpoint to become
+     invisible to the user.  The breakpoint will neither be reported
+     when created, nor will it be listed in the output from `info
+     breakpoints' (but will be listed with the `maint info breakpoints'
+     command).  The optional WP_CLASS argument defines the class of
+     watchpoint to create, if TYPE is `gdb.BP_WATCHPOINT'.  If a
+     watchpoint class is not provided, it is assumed to be a
+     `gdb.WP_WRITE' class.
+
+ -- Function: Breakpoint.stop (self)
+     The `gdb.Breakpoint' class can be sub-classed and, in particular,
+     you may choose to implement the `stop' method.  If this method is
+     defined as a sub-class of `gdb.Breakpoint', it will be called when
+     the inferior reaches any location of a breakpoint which
+     instantiates that sub-class.  If the method returns `True', the
+     inferior will be stopped at the location of the breakpoint,
+     otherwise the inferior will continue.
+
+     If there are multiple breakpoints at the same location with a
+     `stop' method, each one will be called regardless of the return
+     status of the previous.  This ensures that all `stop' methods have
+     a chance to execute at that location.  In this scenario if one of
+     the methods returns `True' but the others return `False', the
+     inferior will still be stopped.
+
+     You should not alter the execution state of the inferior (i.e.,
+     step, next, etc.), alter the current frame context (i.e., change
+     the current active frame), or alter, add or delete any breakpoint.
+     As a general rule, you should not alter any data within GDB or
+     the inferior at this time.
+
+     Example `stop' implementation:
+
+          class MyBreakpoint (gdb.Breakpoint):
+                def stop (self):
+                  inf_val = gdb.parse_and_eval("foo")
+                  if inf_val == 3:
+                    return True
+                  return False
+
+   The available watchpoint types represented by constants are defined
+in the `gdb' module:
+
+`gdb.WP_READ'
+     Read only watchpoint.
+
+`gdb.WP_WRITE'
+     Write only watchpoint.
+
+`gdb.WP_ACCESS'
+     Read/Write watchpoint.
+
+ -- Function: Breakpoint.is_valid ()
+     Return `True' if this `Breakpoint' object is valid, `False'
+     otherwise.  A `Breakpoint' object can become invalid if the user
+     deletes the breakpoint.  In this case, the object still exists,
+     but the underlying breakpoint does not.  In the cases of
+     watchpoint scope, the watchpoint remains valid even if execution
+     of the inferior leaves the scope of that watchpoint.
+
+ -- Function: Breakpoint.delete
+     Permanently deletes the GDB breakpoint.  This also invalidates the
+     Python `Breakpoint' object.  Any further access to this object's
+     attributes or methods will raise an error.
+
+ -- Variable: Breakpoint.enabled
+     This attribute is `True' if the breakpoint is enabled, and `False'
+     otherwise.  This attribute is writable.
+
+ -- Variable: Breakpoint.silent
+     This attribute is `True' if the breakpoint is silent, and `False'
+     otherwise.  This attribute is writable.
+
+     Note that a breakpoint can also be silent if it has commands and
+     the first command is `silent'.  This is not reported by the
+     `silent' attribute.
+
+ -- Variable: Breakpoint.thread
+     If the breakpoint is thread-specific, this attribute holds the
+     thread id.  If the breakpoint is not thread-specific, this
+     attribute is `None'.  This attribute is writable.
+
+ -- Variable: Breakpoint.task
+     If the breakpoint is Ada task-specific, this attribute holds the
+     Ada task id.  If the breakpoint is not task-specific (or the
+     underlying language is not Ada), this attribute is `None'.  This
+     attribute is writable.
+
+ -- Variable: Breakpoint.ignore_count
+     This attribute holds the ignore count for the breakpoint, an
+     integer.  This attribute is writable.
+
+ -- Variable: Breakpoint.number
+     This attribute holds the breakpoint's number -- the identifier
+     used by the user to manipulate the breakpoint.  This attribute is
+     not writable.
+
+ -- Variable: Breakpoint.type
+     This attribute holds the breakpoint's type -- the identifier used
+     to determine the actual breakpoint type or use-case.  This
+     attribute is not writable.
+
+ -- Variable: Breakpoint.visible
+     This attribute tells whether the breakpoint is visible to the user
+     when set, or when the `info breakpoints' command is run.  This
+     attribute is not writable.
+
+   The available types are represented by constants defined in the `gdb'
+module:
+
+`gdb.BP_BREAKPOINT'
+     Normal code breakpoint.
+
+`gdb.BP_WATCHPOINT'
+     Watchpoint breakpoint.
+
+`gdb.BP_HARDWARE_WATCHPOINT'
+     Hardware assisted watchpoint.
+
+`gdb.BP_READ_WATCHPOINT'
+     Hardware assisted read watchpoint.
+
+`gdb.BP_ACCESS_WATCHPOINT'
+     Hardware assisted access watchpoint.
+
+ -- Variable: Breakpoint.hit_count
+     This attribute holds the hit count for the breakpoint, an integer.
+     This attribute is writable, but currently it can only be set to
+     zero.
+
+ -- Variable: Breakpoint.location
+     This attribute holds the location of the breakpoint, as specified
+     by the user.  It is a string.  If the breakpoint does not have a
+     location (that is, it is a watchpoint) the attribute's value is
+     `None'.  This attribute is not writable.
+
+ -- Variable: Breakpoint.expression
+     This attribute holds a breakpoint expression, as specified by the
+     user.  It is a string.  If the breakpoint does not have an
+     expression (the breakpoint is not a watchpoint) the attribute's
+     value is `None'.  This attribute is not writable.
+
+ -- Variable: Breakpoint.condition
+     This attribute holds the condition of the breakpoint, as specified
+     by the user.  It is a string.  If there is no condition, this
+     attribute's value is `None'.  This attribute is writable.
+
+ -- Variable: Breakpoint.commands
+     This attribute holds the commands attached to the breakpoint.  If
+     there are commands, this attribute's value is a string holding all
+     the commands, separated by newlines.  If there are no commands,
+     this attribute is `None'.  This attribute is not writable.
+
+
+File: gdb.info,  Node: Finish Breakpoints in Python,  Next: Lazy Strings In Python,  Prev: Breakpoints In Python,  Up: Python API
+
+23.2.2.21 Finish Breakpoints
+............................
+
+A finish breakpoint is a temporary breakpoint set at the return address
+of a frame, based on the `finish' command.  `gdb.FinishBreakpoint'
+extends `gdb.Breakpoint'.  The underlying breakpoint will be disabled
+and deleted when the execution will run out of the breakpoint scope
+(i.e.  `Breakpoint.stop' or `FinishBreakpoint.out_of_scope' triggered).
+Finish breakpoints are thread specific and must be create with the right
+thread selected.
+
+ -- Function: FinishBreakpoint.__init__ ([frame] [, internal])
+     Create a finish breakpoint at the return address of the `gdb.Frame'
+     object FRAME.  If FRAME is not provided, this defaults to the
+     newest frame.  The optional INTERNAL argument allows the
+     breakpoint to become invisible to the user.  *Note Breakpoints In
+     Python::, for further details about this argument.
+
+ -- Function: FinishBreakpoint.out_of_scope (self)
+     In some circumstances (e.g. `longjmp', C++ exceptions, GDB
+     `return' command, ...), a function may not properly terminate, and
+     thus never hit the finish breakpoint.  When GDB notices such a
+     situation, the `out_of_scope' callback will be triggered.
+
+     You may want to sub-class `gdb.FinishBreakpoint' and override this
+     method:
+
+          class MyFinishBreakpoint (gdb.FinishBreakpoint)
+              def stop (self):
+                  print "normal finish"
+                  return True
+
+              def out_of_scope ():
+                  print "abnormal finish"
+
+ -- Variable: FinishBreakpoint.return_value
+     When GDB is stopped at a finish breakpoint and the frame used to
+     build the `gdb.FinishBreakpoint' object had debug symbols, this
+     attribute will contain a `gdb.Value' object corresponding to the
+     return value of the function.  The value will be `None' if the
+     function return type is `void' or if the return value was not
+     computable.  This attribute is not writable.
+
+
+File: gdb.info,  Node: Lazy Strings In Python,  Prev: Finish Breakpoints in Python,  Up: Python API
+
+23.2.2.22 Python representation of lazy strings.
+................................................
+
+A "lazy string" is a string whose contents is not retrieved or encoded
+until it is needed.
+
+   A `gdb.LazyString' is represented in GDB as an `address' that points
+to a region of memory, an `encoding' that will be used to encode that
+region of memory, and a `length' to delimit the region of memory that
+represents the string.  The difference between a `gdb.LazyString' and a
+string wrapped within a `gdb.Value' is that a `gdb.LazyString' will be
+treated differently by GDB when printing.  A `gdb.LazyString' is
+retrieved and encoded during printing, while a `gdb.Value' wrapping a
+string is immediately retrieved and encoded on creation.
+
+   A `gdb.LazyString' object has the following functions:
+
+ -- Function: LazyString.value ()
+     Convert the `gdb.LazyString' to a `gdb.Value'.  This value will
+     point to the string in memory, but will lose all the delayed
+     retrieval, encoding and handling that GDB applies to a
+     `gdb.LazyString'.
+
+ -- Variable: LazyString.address
+     This attribute holds the address of the string.  This attribute is
+     not writable.
+
+ -- Variable: LazyString.length
+     This attribute holds the length of the string in characters.  If
+     the length is -1, then the string will be fetched and encoded up
+     to the first null of appropriate width.  This attribute is not
+     writable.
+
+ -- Variable: LazyString.encoding
+     This attribute holds the encoding that will be applied to the
+     string when the string is printed by GDB.  If the encoding is not
+     set, or contains an empty string,  then GDB will select the most
+     appropriate encoding when the string is printed.  This attribute
+     is not writable.
+
+ -- Variable: LazyString.type
+     This attribute holds the type that is represented by the lazy
+     string's type.  For a lazy string this will always be a pointer
+     type.  To resolve this to the lazy string's character type, use
+     the type's `target' method.  *Note Types In Python::.  This
+     attribute is not writable.
+
+
+File: gdb.info,  Node: Python Auto-loading,  Next: Python modules,  Prev: Python API,  Up: Python
+
+23.2.3 Python Auto-loading
+--------------------------
+
+When a new object file is read (for example, due to the `file' command,
+or because the inferior has loaded a shared library), GDB will look for
+Python support scripts in several ways: `OBJFILE-gdb.py' (*note
+objfile-gdb.py file::) and `.debug_gdb_scripts' section (*note
+dotdebug_gdb_scripts section::).
+
+   The auto-loading feature is useful for supplying application-specific
+debugging commands and scripts.
+
+   Auto-loading can be enabled or disabled, and the list of auto-loaded
+scripts can be printed.
+
+`set auto-load python-scripts [on|off]'
+     Enable or disable the auto-loading of Python scripts.
+
+`show auto-load python-scripts'
+     Show whether auto-loading of Python scripts is enabled or disabled.
+
+`info auto-load python-scripts [REGEXP]'
+     Print the list of all Python scripts that GDB auto-loaded.
+
+     Also printed is the list of Python scripts that were mentioned in
+     the `.debug_gdb_scripts' section and were not found (*note
+     dotdebug_gdb_scripts section::).  This is useful because their
+     names are not printed when GDB tries to load them and fails.
+     There may be many of them, and printing an error message for each
+     one is problematic.
+
+     If REGEXP is supplied only Python scripts with matching names are
+     printed.
+
+     Example:
+
+          (gdb) info auto-load python-scripts
+          Loaded Script
+          Yes    py-section-script.py
+                 full name: /tmp/py-section-script.py
+          No     my-foo-pretty-printers.py
+
+   When reading an auto-loaded file, GDB sets the "current objfile".
+This is available via the `gdb.current_objfile' function (*note
+Objfiles In Python::).  This can be useful for registering
+objfile-specific pretty-printers.
+
+* Menu:
+
+* objfile-gdb.py file::          The `OBJFILE-gdb.py' file
+* dotdebug_gdb_scripts section:: The `.debug_gdb_scripts' section
+* Which flavor to choose?::
+
diff --git a/gdb/doc/gdb.info-4 b/gdb/doc/gdb.info-4
new file mode 100644
index 0000000..0ecc602
--- /dev/null
+++ b/gdb/doc/gdb.info-4
@@ -0,0 +1,8876 @@
+This is gdb.info, produced by makeinfo version 4.8 from ./gdb.texinfo.
+
+INFO-DIR-SECTION Software development
+START-INFO-DIR-ENTRY
+* Gdb: (gdb).                     The GNU debugger.
+END-INFO-DIR-ENTRY
+
+   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+2010 2011, 2012 Free Software Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "Free Software" and "Free Software Needs Free
+Documentation", with the Front-Cover Texts being "A GNU Manual," and
+with the Back-Cover Texts as in (a) below.
+
+   (a) The FSF's Back-Cover Text is: "You are free to copy and modify
+this GNU Manual.  Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom."
+
+   This file documents the GNU debugger GDB.
+
+   This is the Tenth Edition, of `Debugging with GDB: the GNU
+Source-Level Debugger' for GDB (GDB) Version 7.5.
+
+   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+2010 2011, 2012 Free Software Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "Free Software" and "Free Software Needs Free
+Documentation", with the Front-Cover Texts being "A GNU Manual," and
+with the Back-Cover Texts as in (a) below.
+
+   (a) The FSF's Back-Cover Text is: "You are free to copy and modify
+this GNU Manual.  Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom."
+
+
+File: gdb.info,  Node: objfile-gdb.py file,  Next: dotdebug_gdb_scripts section,  Up: Python Auto-loading
+
+23.2.3.1 The `OBJFILE-gdb.py' file
+..................................
+
+When a new object file is read, GDB looks for a file named
+`OBJFILE-gdb.py' (we call it SCRIPT-NAME below), where OBJFILE is the
+object file's real name, formed by ensuring that the file name is
+absolute, following all symlinks, and resolving `.' and `..'
+components.  If this file exists and is readable, GDB will evaluate it
+as a Python script.
+
+   If this file does not exist, then GDB will look for SCRIPT-NAME file
+in all of the directories as specified below.
+
+   Note that loading of this script file also requires accordingly
+configured `auto-load safe-path' (*note Auto-loading safe path::).
+
+`set auto-load scripts-directory [DIRECTORIES]'
+     Control GDB auto-loaded scripts location.  Multiple directory
+     entries may be delimited by the host platform path separator in use
+     (`:' on Unix, `;' on MS-Windows and MS-DOS).
+
+     Each entry here needs to be covered also by the security setting
+     `set auto-load safe-path' (*note set auto-load safe-path::).
+
+     This variable defaults to `$debugdir:$datadir/auto-load'.  The
+     default `set auto-load safe-path' value can be also overriden by
+     GDB configuration option `--with-auto-load-dir'.
+
+     Any reference to `$debugdir' will get replaced by
+     DEBUG-FILE-DIRECTORY value (*note Separate Debug Files::) and any
+     reference to `$datadir' will get replaced by DATA-DIRECTORY which
+     is determined at GDB startup (*note Data Files::).  `$debugdir' and
+     `$datadir' must be placed as a directory component -- either alone
+     or delimited by `/' or `\' directory separators, depending on the
+     host platform.
+
+     The list of directories uses path separator (`:' on GNU and Unix
+     systems, `;' on MS-Windows and MS-DOS) to separate directories,
+     similarly to the `PATH' environment variable.
+
+`show auto-load scripts-directory'
+     Show GDB auto-loaded scripts location.
+
+   GDB does not track which files it has already auto-loaded this way.
+GDB will load the associated script every time the corresponding
+OBJFILE is opened.  So your `-gdb.py' file should be careful to avoid
+errors if it is evaluated more than once.
+
+
+File: gdb.info,  Node: dotdebug_gdb_scripts section,  Next: Which flavor to choose?,  Prev: objfile-gdb.py file,  Up: Python Auto-loading
+
+23.2.3.2 The `.debug_gdb_scripts' section
+.........................................
+
+For systems using file formats like ELF and COFF, when GDB loads a new
+object file it will look for a special section named
+`.debug_gdb_scripts'.  If this section exists, its contents is a list
+of names of scripts to load.
+
+   GDB will look for each specified script file first in the current
+directory and then along the source search path (*note Specifying
+Source Directories: Source Path.), except that `$cdir' is not searched,
+since the compilation directory is not relevant to scripts.
+
+   Entries can be placed in section `.debug_gdb_scripts' with, for
+example, this GCC macro:
+
+     /* Note: The "MS" section flags are to remove duplicates.  */
+     #define DEFINE_GDB_SCRIPT(script_name) \
+       asm("\
+     .pushsection \".debug_gdb_scripts\", \"MS\", at progbits,1\n\
+     .byte 1\n\
+     .asciz \"" script_name "\"\n\
+     .popsection \n\
+     ");
+
+Then one can reference the macro in a header or source file like this:
+
+     DEFINE_GDB_SCRIPT ("my-app-scripts.py")
+
+   The script name may include directories if desired.
+
+   Note that loading of this script file also requires accordingly
+configured `auto-load safe-path' (*note Auto-loading safe path::).
+
+   If the macro is put in a header, any application or library using
+this header will get a reference to the specified script.
+
+
+File: gdb.info,  Node: Which flavor to choose?,  Prev: dotdebug_gdb_scripts section,  Up: Python Auto-loading
+
+23.2.3.3 Which flavor to choose?
+................................
+
+Given the multiple ways of auto-loading Python scripts, it might not
+always be clear which one to choose.  This section provides some
+guidance.
+
+   Benefits of the `-gdb.py' way:
+
+   * Can be used with file formats that don't support multiple sections.
+
+   * Ease of finding scripts for public libraries.
+
+     Scripts specified in the `.debug_gdb_scripts' section are searched
+     for in the source search path.  For publicly installed libraries,
+     e.g., `libstdc++', there typically isn't a source directory in
+     which to find the script.
+
+   * Doesn't require source code additions.
+
+   Benefits of the `.debug_gdb_scripts' way:
+
+   * Works with static linking.
+
+     Scripts for libraries done the `-gdb.py' way require an objfile to
+     trigger their loading.  When an application is statically linked
+     the only objfile available is the executable, and it is cumbersome
+     to attach all the scripts from all the input libraries to the
+     executable's `-gdb.py' script.
+
+   * Works with classes that are entirely inlined.
+
+     Some classes can be entirely inlined, and thus there may not be an
+     associated shared library to attach a `-gdb.py' script to.
+
+   * Scripts needn't be copied out of the source tree.
+
+     In some circumstances, apps can be built out of large collections
+     of internal libraries, and the build infrastructure necessary to
+     install the `-gdb.py' scripts in a place where GDB can find them is
+     cumbersome.  It may be easier to specify the scripts in the
+     `.debug_gdb_scripts' section as relative paths, and add a path to
+     the top of the source tree to the source search path.
+
+
+File: gdb.info,  Node: Python modules,  Prev: Python Auto-loading,  Up: Python
+
+23.2.4 Python modules
+---------------------
+
+GDB comes with several modules to assist writing Python code.
+
+* Menu:
+
+* gdb.printing::       Building and registering pretty-printers.
+* gdb.types::          Utilities for working with types.
+* gdb.prompt::         Utilities for prompt value substitution.
+
+
+File: gdb.info,  Node: gdb.printing,  Next: gdb.types,  Up: Python modules
+
+23.2.4.1 gdb.printing
+.....................
+
+This module provides a collection of utilities for working with
+pretty-printers.
+
+`PrettyPrinter (NAME, SUBPRINTERS=None)'
+     This class specifies the API that makes `info pretty-printer',
+     `enable pretty-printer' and `disable pretty-printer' work.
+     Pretty-printers should generally inherit from this class.
+
+`SubPrettyPrinter (NAME)'
+     For printers that handle multiple types, this class specifies the
+     corresponding API for the subprinters.
+
+`RegexpCollectionPrettyPrinter (NAME)'
+     Utility class for handling multiple printers, all recognized via
+     regular expressions.  *Note Writing a Pretty-Printer::, for an
+     example.
+
+`FlagEnumerationPrinter (NAME)'
+     A pretty-printer which handles printing of `enum' values.  Unlike
+     GDB's built-in `enum' printing, this printer attempts to work
+     properly when there is some overlap between the enumeration
+     constants.  NAME is the name of the printer and also the name of
+     the `enum' type to look up.
+
+`register_pretty_printer (OBJ, PRINTER, REPLACE=False)'
+     Register PRINTER with the pretty-printer list of OBJ.  If REPLACE
+     is `True' then any existing copy of the printer is replaced.
+     Otherwise a `RuntimeError' exception is raised if a printer with
+     the same name already exists.
+
+
+File: gdb.info,  Node: gdb.types,  Next: gdb.prompt,  Prev: gdb.printing,  Up: Python modules
+
+23.2.4.2 gdb.types
+..................
+
+This module provides a collection of utilities for working with
+`gdb.Types' objects.
+
+`get_basic_type (TYPE)'
+     Return TYPE with const and volatile qualifiers stripped, and with
+     typedefs and C++ references converted to the underlying type.
+
+     C++ example:
+
+          typedef const int const_int;
+          const_int foo (3);
+          const_int& foo_ref (foo);
+          int main () { return 0; }
+
+     Then in gdb:
+
+          (gdb) start
+          (gdb) python import gdb.types
+          (gdb) python foo_ref = gdb.parse_and_eval("foo_ref")
+          (gdb) python print gdb.types.get_basic_type(foo_ref.type)
+          int
+
+`has_field (TYPE, FIELD)'
+     Return `True' if TYPE, assumed to be a type with fields (e.g., a
+     structure or union), has field FIELD.
+
+`make_enum_dict (ENUM_TYPE)'
+     Return a Python `dictionary' type produced from ENUM_TYPE.
+
+`deep_items (TYPE)'
+     Returns a Python iterator similar to the standard
+     `gdb.Type.iteritems' method, except that the iterator returned by
+     `deep_items' will recursively traverse anonymous struct or union
+     fields.  For example:
+
+          struct A
+          {
+              int a;
+              union {
+                  int b0;
+                  int b1;
+              };
+          };
+
+     Then in GDB:
+          (gdb) python import gdb.types
+          (gdb) python struct_a = gdb.lookup_type("struct A")
+          (gdb) python print struct_a.keys ()
+          {['a', '']}
+          (gdb) python print [k for k,v in gdb.types.deep_items(struct_a)]
+          {['a', 'b0', 'b1']}
+
+
+
+File: gdb.info,  Node: gdb.prompt,  Prev: gdb.types,  Up: Python modules
+
+23.2.4.3 gdb.prompt
+...................
+
+This module provides a method for prompt value-substitution.
+
+`substitute_prompt (STRING)'
+     Return STRING with escape sequences substituted by values.  Some
+     escape sequences take arguments.  You can specify arguments inside
+     "{}" immediately following the escape sequence.
+
+     The escape sequences you can pass to this function are:
+
+    `\\'
+          Substitute a backslash.
+
+    `\e'
+          Substitute an ESC character.
+
+    `\f'
+          Substitute the selected frame; an argument names a frame
+          parameter.
+
+    `\n'
+          Substitute a newline.
+
+    `\p'
+          Substitute a parameter's value; the argument names the
+          parameter.
+
+    `\r'
+          Substitute a carriage return.
+
+    `\t'
+          Substitute the selected thread; an argument names a thread
+          parameter.
+
+    `\v'
+          Substitute the version of GDB.
+
+    `\w'
+          Substitute the current working directory.
+
+    `\['
+          Begin a sequence of non-printing characters.  These sequences
+          are typically used with the ESC character, and are not
+          counted in the string length.  Example:
+          "\[\e[0;34m\](gdb)\[\e[0m\]" will return a blue-colored
+          "(gdb)" prompt where the length is five.
+
+    `\]'
+          End a sequence of non-printing characters.
+
+     For example:
+
+          substitute_prompt (``frame: \f,
+                             print arguments: \p{print frame-arguments}'')
+
+will return the string:
+
+
+          "frame: main, print arguments: scalars"
+
+
+File: gdb.info,  Node: Aliases,  Prev: Python,  Up: Extending GDB
+
+23.3 Creating new spellings of existing commands
+================================================
+
+It is often useful to define alternate spellings of existing commands.
+For example, if a new GDB command defined in Python has a long name to
+type, it is handy to have an abbreviated version of it that involves
+less typing.
+
+   GDB itself uses aliases.  For example `s' is an alias of the `step'
+command even though it is otherwise an ambiguous abbreviation of other
+commands like `set' and `show'.
+
+   Aliases are also used to provide shortened or more common versions
+of multi-word commands.  For example, GDB provides the `tty' alias of
+the `set inferior-tty' command.
+
+   You can define a new alias with the `alias' command.
+
+`alias [-a] [--] ALIAS = COMMAND'
+
+   ALIAS specifies the name of the new alias.  Each word of ALIAS must
+consist of letters, numbers, dashes and underscores.
+
+   COMMAND specifies the name of an existing command that is being
+aliased.
+
+   The `-a' option specifies that the new alias is an abbreviation of
+the command.  Abbreviations are not shown in command lists displayed by
+the `help' command.
+
+   The `--' option specifies the end of options, and is useful when
+ALIAS begins with a dash.
+
+   Here is a simple example showing how to make an abbreviation of a
+command so that there is less to type.  Suppose you were tired of
+typing `disas', the current shortest unambiguous abbreviation of the
+`disassemble' command and you wanted an even shorter version named `di'.
+The following will accomplish this.
+
+     (gdb) alias -a di = disas
+
+   Note that aliases are different from user-defined commands.  With a
+user-defined command, you also need to write documentation for it with
+the `document' command.  An alias automatically picks up the
+documentation of the existing command.
+
+   Here is an example where we make `elms' an abbreviation of
+`elements' in the `set print elements' command.  This is to show that
+you can make an abbreviation of any part of a command.
+
+     (gdb) alias -a set print elms = set print elements
+     (gdb) alias -a show print elms = show print elements
+     (gdb) set p elms 20
+     (gdb) show p elms
+     Limit on string chars or array elements to print is 200.
+
+   Note that if you are defining an alias of a `set' command, and you
+want to have an alias for the corresponding `show' command, then you
+need to define the latter separately.
+
+   Unambiguously abbreviated commands are allowed in COMMAND and ALIAS,
+just as they are normally.
+
+     (gdb) alias -a set pr elms = set p ele
+
+   Finally, here is an example showing the creation of a one word alias
+for a more complex command.  This creates alias `spe' of the command
+`set print elements'.
+
+     (gdb) alias spe = set print elements
+     (gdb) spe 20
+
+
+File: gdb.info,  Node: Interpreters,  Next: TUI,  Prev: Extending GDB,  Up: Top
+
+24 Command Interpreters
+***********************
+
+GDB supports multiple command interpreters, and some command
+infrastructure to allow users or user interface writers to switch
+between interpreters or run commands in other interpreters.
+
+   GDB currently supports two command interpreters, the console
+interpreter (sometimes called the command-line interpreter or CLI) and
+the machine interface interpreter (or GDB/MI).  This manual describes
+both of these interfaces in great detail.
+
+   By default, GDB will start with the console interpreter.  However,
+the user may choose to start GDB with another interpreter by specifying
+the `-i' or `--interpreter' startup options.  Defined interpreters
+include:
+
+`console'
+     The traditional console or command-line interpreter.  This is the
+     most often used interpreter with GDB. With no interpreter
+     specified at runtime, GDB will use this interpreter.
+
+`mi'
+     The newest GDB/MI interface (currently `mi2').  Used primarily by
+     programs wishing to use GDB as a backend for a debugger GUI or an
+     IDE.  For more information, see *Note The GDB/MI Interface: GDB/MI.
+
+`mi2'
+     The current GDB/MI interface.
+
+`mi1'
+     The GDB/MI interface included in GDB 5.1, 5.2, and 5.3.
+
+
+   The interpreter being used by GDB may not be dynamically switched at
+runtime.  Although possible, this could lead to a very precarious
+situation.  Consider an IDE using GDB/MI.  If a user enters the command
+"interpreter-set console" in a console view, GDB would switch to using
+the console interpreter, rendering the IDE inoperable!
+
+   Although you may only choose a single interpreter at startup, you
+may execute commands in any interpreter from the current interpreter
+using the appropriate command.  If you are running the console
+interpreter, simply use the `interpreter-exec' command:
+
+     interpreter-exec mi "-data-list-register-names"
+
+   GDB/MI has a similar command, although it is only available in
+versions of GDB which support GDB/MI version 2 (or greater).
+
+
+File: gdb.info,  Node: TUI,  Next: Emacs,  Prev: Interpreters,  Up: Top
+
+25 GDB Text User Interface
+**************************
+
+* Menu:
+
+* TUI Overview::                TUI overview
+* TUI Keys::                    TUI key bindings
+* TUI Single Key Mode::         TUI single key mode
+* TUI Commands::                TUI-specific commands
+* TUI Configuration::           TUI configuration variables
+
+   The GDB Text User Interface (TUI) is a terminal interface which uses
+the `curses' library to show the source file, the assembly output, the
+program registers and GDB commands in separate text windows.  The TUI
+mode is supported only on platforms where a suitable version of the
+`curses' library is available.
+
+   The TUI mode is enabled by default when you invoke GDB as `gdb -tui'.
+You can also switch in and out of TUI mode while GDB runs by using
+various TUI commands and key bindings, such as `C-x C-a'.  *Note TUI
+Key Bindings: TUI Keys.
+
+
+File: gdb.info,  Node: TUI Overview,  Next: TUI Keys,  Up: TUI
+
+25.1 TUI Overview
+=================
+
+In TUI mode, GDB can display several text windows:
+
+_command_
+     This window is the GDB command window with the GDB prompt and the
+     GDB output.  The GDB input is still managed using readline.
+
+_source_
+     The source window shows the source file of the program.  The
+     current line and active breakpoints are displayed in this window.
+
+_assembly_
+     The assembly window shows the disassembly output of the program.
+
+_register_
+     This window shows the processor registers.  Registers are
+     highlighted when their values change.
+
+   The source and assembly windows show the current program position by
+highlighting the current line and marking it with a `>' marker.
+Breakpoints are indicated with two markers.  The first marker indicates
+the breakpoint type:
+
+`B'
+     Breakpoint which was hit at least once.
+
+`b'
+     Breakpoint which was never hit.
+
+`H'
+     Hardware breakpoint which was hit at least once.
+
+`h'
+     Hardware breakpoint which was never hit.
+
+   The second marker indicates whether the breakpoint is enabled or not:
+
+`+'
+     Breakpoint is enabled.
+
+`-'
+     Breakpoint is disabled.
+
+   The source, assembly and register windows are updated when the
+current thread changes, when the frame changes, or when the program
+counter changes.
+
+   These windows are not all visible at the same time.  The command
+window is always visible.  The others can be arranged in several
+layouts:
+
+   * source only,
+
+   * assembly only,
+
+   * source and assembly,
+
+   * source and registers, or
+
+   * assembly and registers.
+
+   A status line above the command window shows the following
+information:
+
+_target_
+     Indicates the current GDB target.  (*note Specifying a Debugging
+     Target: Targets.).
+
+_process_
+     Gives the current process or thread number.  When no process is
+     being debugged, this field is set to `No process'.
+
+_function_
+     Gives the current function name for the selected frame.  The name
+     is demangled if demangling is turned on (*note Print Settings::).
+     When there is no symbol corresponding to the current program
+     counter, the string `??' is displayed.
+
+_line_
+     Indicates the current line number for the selected frame.  When
+     the current line number is not known, the string `??' is displayed.
+
+_pc_
+     Indicates the current program counter address.
+
+
+File: gdb.info,  Node: TUI Keys,  Next: TUI Single Key Mode,  Prev: TUI Overview,  Up: TUI
+
+25.2 TUI Key Bindings
+=====================
+
+The TUI installs several key bindings in the readline keymaps (*note
+Command Line Editing::).  The following key bindings are installed for
+both TUI mode and the GDB standard mode.
+
+`C-x C-a'
+`C-x a'
+`C-x A'
+     Enter or leave the TUI mode.  When leaving the TUI mode, the
+     curses window management stops and GDB operates using its standard
+     mode, writing on the terminal directly.  When reentering the TUI
+     mode, control is given back to the curses windows.  The screen is
+     then refreshed.
+
+`C-x 1'
+     Use a TUI layout with only one window.  The layout will either be
+     `source' or `assembly'.  When the TUI mode is not active, it will
+     switch to the TUI mode.
+
+     Think of this key binding as the Emacs `C-x 1' binding.
+
+`C-x 2'
+     Use a TUI layout with at least two windows.  When the current
+     layout already has two windows, the next layout with two windows
+     is used.  When a new layout is chosen, one window will always be
+     common to the previous layout and the new one.
+
+     Think of it as the Emacs `C-x 2' binding.
+
+`C-x o'
+     Change the active window.  The TUI associates several key bindings
+     (like scrolling and arrow keys) with the active window.  This
+     command gives the focus to the next TUI window.
+
+     Think of it as the Emacs `C-x o' binding.
+
+`C-x s'
+     Switch in and out of the TUI SingleKey mode that binds single keys
+     to GDB commands (*note TUI Single Key Mode::).
+
+   The following key bindings only work in the TUI mode:
+
+<PgUp>
+     Scroll the active window one page up.
+
+<PgDn>
+     Scroll the active window one page down.
+
+<Up>
+     Scroll the active window one line up.
+
+<Down>
+     Scroll the active window one line down.
+
+<Left>
+     Scroll the active window one column left.
+
+<Right>
+     Scroll the active window one column right.
+
+`C-L'
+     Refresh the screen.
+
+   Because the arrow keys scroll the active window in the TUI mode, they
+are not available for their normal use by readline unless the command
+window has the focus.  When another window is active, you must use
+other readline key bindings such as `C-p', `C-n', `C-b' and `C-f' to
+control the command window.
+
+
+File: gdb.info,  Node: TUI Single Key Mode,  Next: TUI Commands,  Prev: TUI Keys,  Up: TUI
+
+25.3 TUI Single Key Mode
+========================
+
+The TUI also provides a "SingleKey" mode, which binds several
+frequently used GDB commands to single keys.  Type `C-x s' to switch
+into this mode, where the following key bindings are used:
+
+`c'
+     continue
+
+`d'
+     down
+
+`f'
+     finish
+
+`n'
+     next
+
+`q'
+     exit the SingleKey mode.
+
+`r'
+     run
+
+`s'
+     step
+
+`u'
+     up
+
+`v'
+     info locals
+
+`w'
+     where
+
+   Other keys temporarily switch to the GDB command prompt.  The key
+that was pressed is inserted in the editing buffer so that it is
+possible to type most GDB commands without interaction with the TUI
+SingleKey mode.  Once the command is entered the TUI SingleKey mode is
+restored.  The only way to permanently leave this mode is by typing `q'
+or `C-x s'.
+
+
+File: gdb.info,  Node: TUI Commands,  Next: TUI Configuration,  Prev: TUI Single Key Mode,  Up: TUI
+
+25.4 TUI-specific Commands
+==========================
+
+The TUI has specific commands to control the text windows.  These
+commands are always available, even when GDB is not in the TUI mode.
+When GDB is in the standard mode, most of these commands will
+automatically switch to the TUI mode.
+
+   Note that if GDB's `stdout' is not connected to a terminal, or GDB
+has been started with the machine interface interpreter (*note The
+GDB/MI Interface: GDB/MI.), most of these commands will fail with an
+error, because it would not be possible or desirable to enable curses
+window management.
+
+`info win'
+     List and give the size of all displayed windows.
+
+`layout next'
+     Display the next layout.
+
+`layout prev'
+     Display the previous layout.
+
+`layout src'
+     Display the source window only.
+
+`layout asm'
+     Display the assembly window only.
+
+`layout split'
+     Display the source and assembly window.
+
+`layout regs'
+     Display the register window together with the source or assembly
+     window.
+
+`focus next'
+     Make the next window active for scrolling.
+
+`focus prev'
+     Make the previous window active for scrolling.
+
+`focus src'
+     Make the source window active for scrolling.
+
+`focus asm'
+     Make the assembly window active for scrolling.
+
+`focus regs'
+     Make the register window active for scrolling.
+
+`focus cmd'
+     Make the command window active for scrolling.
+
+`refresh'
+     Refresh the screen.  This is similar to typing `C-L'.
+
+`tui reg float'
+     Show the floating point registers in the register window.
+
+`tui reg general'
+     Show the general registers in the register window.
+
+`tui reg next'
+     Show the next register group.  The list of register groups as well
+     as their order is target specific.  The predefined register groups
+     are the following: `general', `float', `system', `vector', `all',
+     `save', `restore'.
+
+`tui reg system'
+     Show the system registers in the register window.
+
+`update'
+     Update the source window and the current execution point.
+
+`winheight NAME +COUNT'
+`winheight NAME -COUNT'
+     Change the height of the window NAME by COUNT lines.  Positive
+     counts increase the height, while negative counts decrease it.
+
+`tabset NCHARS'
+     Set the width of tab stops to be NCHARS characters.
+
+
+File: gdb.info,  Node: TUI Configuration,  Prev: TUI Commands,  Up: TUI
+
+25.5 TUI Configuration Variables
+================================
+
+Several configuration variables control the appearance of TUI windows.
+
+`set tui border-kind KIND'
+     Select the border appearance for the source, assembly and register
+     windows.  The possible values are the following:
+    `space'
+          Use a space character to draw the border.
+
+    `ascii'
+          Use ASCII characters `+', `-' and `|' to draw the border.
+
+    `acs'
+          Use the Alternate Character Set to draw the border.  The
+          border is drawn using character line graphics if the terminal
+          supports them.
+
+`set tui border-mode MODE'
+`set tui active-border-mode MODE'
+     Select the display attributes for the borders of the inactive
+     windows or the active window.  The MODE can be one of the
+     following:
+    `normal'
+          Use normal attributes to display the border.
+
+    `standout'
+          Use standout mode.
+
+    `reverse'
+          Use reverse video mode.
+
+    `half'
+          Use half bright mode.
+
+    `half-standout'
+          Use half bright and standout mode.
+
+    `bold'
+          Use extra bright or bold mode.
+
+    `bold-standout'
+          Use extra bright or bold and standout mode.
+
+
+File: gdb.info,  Node: Emacs,  Next: GDB/MI,  Prev: TUI,  Up: Top
+
+26 Using GDB under GNU Emacs
+****************************
+
+A special interface allows you to use GNU Emacs to view (and edit) the
+source files for the program you are debugging with GDB.
+
+   To use this interface, use the command `M-x gdb' in Emacs.  Give the
+executable file you want to debug as an argument.  This command starts
+GDB as a subprocess of Emacs, with input and output through a newly
+created Emacs buffer.
+
+   Running GDB under Emacs can be just like running GDB normally except
+for two things:
+
+   * All "terminal" input and output goes through an Emacs buffer,
+     called the GUD buffer.
+
+     This applies both to GDB commands and their output, and to the
+     input and output done by the program you are debugging.
+
+     This is useful because it means that you can copy the text of
+     previous commands and input them again; you can even use parts of
+     the output in this way.
+
+     All the facilities of Emacs' Shell mode are available for
+     interacting with your program.  In particular, you can send
+     signals the usual way--for example, `C-c C-c' for an interrupt,
+     `C-c C-z' for a stop.
+
+   * GDB displays source code through Emacs.
+
+     Each time GDB displays a stack frame, Emacs automatically finds the
+     source file for that frame and puts an arrow (`=>') at the left
+     margin of the current line.  Emacs uses a separate buffer for
+     source display, and splits the screen to show both your GDB session
+     and the source.
+
+     Explicit GDB `list' or search commands still produce output as
+     usual, but you probably have no reason to use them from Emacs.
+
+   We call this "text command mode".  Emacs 22.1, and later, also uses
+a graphical mode, enabled by default, which provides further buffers
+that can control the execution and describe the state of your program.
+*Note GDB Graphical Interface: (Emacs)GDB Graphical Interface.
+
+   If you specify an absolute file name when prompted for the `M-x gdb'
+argument, then Emacs sets your current working directory to where your
+program resides.  If you only specify the file name, then Emacs sets
+your current working directory to the directory associated with the
+previous buffer.  In this case, GDB may find your program by searching
+your environment's `PATH' variable, but on some operating systems it
+might not find the source.  So, although the GDB input and output
+session proceeds normally, the auxiliary buffer does not display the
+current source and line of execution.
+
+   The initial working directory of GDB is printed on the top line of
+the GUD buffer and this serves as a default for the commands that
+specify files for GDB to operate on.  *Note Commands to Specify Files:
+Files.
+
+   By default, `M-x gdb' calls the program called `gdb'.  If you need
+to call GDB by a different name (for example, if you keep several
+configurations around, with different names) you can customize the
+Emacs variable `gud-gdb-command-name' to run the one you want.
+
+   In the GUD buffer, you can use these special Emacs commands in
+addition to the standard Shell mode commands:
+
+`C-h m'
+     Describe the features of Emacs' GUD Mode.
+
+`C-c C-s'
+     Execute to another source line, like the GDB `step' command; also
+     update the display window to show the current file and location.
+
+`C-c C-n'
+     Execute to next source line in this function, skipping all function
+     calls, like the GDB `next' command.  Then update the display window
+     to show the current file and location.
+
+`C-c C-i'
+     Execute one instruction, like the GDB `stepi' command; update
+     display window accordingly.
+
+`C-c C-f'
+     Execute until exit from the selected stack frame, like the GDB
+     `finish' command.
+
+`C-c C-r'
+     Continue execution of your program, like the GDB `continue'
+     command.
+
+`C-c <'
+     Go up the number of frames indicated by the numeric argument
+     (*note Numeric Arguments: (Emacs)Arguments.), like the GDB `up'
+     command.
+
+`C-c >'
+     Go down the number of frames indicated by the numeric argument,
+     like the GDB `down' command.
+
+   In any source file, the Emacs command `C-x <SPC>' (`gud-break')
+tells GDB to set a breakpoint on the source line point is on.
+
+   In text command mode, if you type `M-x speedbar', Emacs displays a
+separate frame which shows a backtrace when the GUD buffer is current.
+Move point to any frame in the stack and type <RET> to make it become
+the current frame and display the associated source in the source
+buffer.  Alternatively, click `Mouse-2' to make the selected frame
+become the current one.  In graphical mode, the speedbar displays watch
+expressions.
+
+   If you accidentally delete the source-display buffer, an easy way to
+get it back is to type the command `f' in the GDB buffer, to request a
+frame display; when you run under Emacs, this recreates the source
+buffer if necessary to show you the context of the current frame.
+
+   The source files displayed in Emacs are in ordinary Emacs buffers
+which are visiting the source files in the usual way.  You can edit the
+files with these buffers if you wish; but keep in mind that GDB
+communicates with Emacs in terms of line numbers.  If you add or delete
+lines from the text, the line numbers that GDB knows cease to
+correspond properly with the code.
+
+   A more detailed description of Emacs' interaction with GDB is given
+in the Emacs manual (*note Debuggers: (Emacs)Debuggers.).
+
+
+File: gdb.info,  Node: GDB/MI,  Next: Annotations,  Prev: Emacs,  Up: Top
+
+27 The GDB/MI Interface
+***********************
+
+Function and Purpose
+====================
+
+GDB/MI is a line based machine oriented text interface to GDB and is
+activated by specifying using the `--interpreter' command line option
+(*note Mode Options::).  It is specifically intended to support the
+development of systems which use the debugger as just one small
+component of a larger system.
+
+   This chapter is a specification of the GDB/MI interface.  It is
+written in the form of a reference manual.
+
+   Note that GDB/MI is still under construction, so some of the
+features described below are incomplete and subject to change (*note
+GDB/MI Development and Front Ends: GDB/MI Development and Front Ends.).
+
+Notation and Terminology
+========================
+
+This chapter uses the following notation:
+
+   * `|' separates two alternatives.
+
+   * `[ SOMETHING ]' indicates that SOMETHING is optional: it may or
+     may not be given.
+
+   * `( GROUP )*' means that GROUP inside the parentheses may repeat
+     zero or more times.
+
+   * `( GROUP )+' means that GROUP inside the parentheses may repeat
+     one or more times.
+
+   * `"STRING"' means a literal STRING.
+
+* Menu:
+
+* GDB/MI General Design::
+* GDB/MI Command Syntax::
+* GDB/MI Compatibility with CLI::
+* GDB/MI Development and Front Ends::
+* GDB/MI Output Records::
+* GDB/MI Simple Examples::
+* GDB/MI Command Description Format::
+* GDB/MI Breakpoint Commands::
+* GDB/MI Program Context::
+* GDB/MI Thread Commands::
+* GDB/MI Ada Tasking Commands::
+* GDB/MI Program Execution::
+* GDB/MI Stack Manipulation::
+* GDB/MI Variable Objects::
+* GDB/MI Data Manipulation::
+* GDB/MI Tracepoint Commands::
+* GDB/MI Symbol Query::
+* GDB/MI File Commands::
+* GDB/MI Target Manipulation::
+* GDB/MI File Transfer Commands::
+* GDB/MI Miscellaneous Commands::
+
+
+File: gdb.info,  Node: GDB/MI General Design,  Next: GDB/MI Command Syntax,  Up: GDB/MI
+
+27.1 GDB/MI General Design
+==========================
+
+Interaction of a GDB/MI frontend with GDB involves three
+parts--commands sent to GDB, responses to those commands and
+notifications.  Each command results in exactly one response,
+indicating either successful completion of the command, or an error.
+For the commands that do not resume the target, the response contains
+the requested information.  For the commands that resume the target, the
+response only indicates whether the target was successfully resumed.
+Notifications is the mechanism for reporting changes in the state of the
+target, or in GDB state, that cannot conveniently be associated with a
+command and reported as part of that command response.
+
+   The important examples of notifications are:
+   * Exec notifications.  These are used to report changes in target
+     state--when a target is resumed, or stopped.  It would not be
+     feasible to include this information in response of resuming
+     commands, because one resume commands can result in multiple
+     events in different threads.  Also, quite some time may pass
+     before any event happens in the target, while a frontend needs to
+     know whether the resuming command itself was successfully executed.
+
+   * Console output, and status notifications.  Console output
+     notifications are used to report output of CLI commands, as well as
+     diagnostics for other commands.  Status notifications are used to
+     report the progress of a long-running operation.  Naturally,
+     including this information in command response would mean no
+     output is produced until the command is finished, which is
+     undesirable.
+
+   * General notifications.  Commands may have various side effects on
+     the GDB or target state beyond their official purpose.  For
+     example, a command may change the selected thread.  Although such
+     changes can be included in command response, using notification
+     allows for more orthogonal frontend design.
+
+
+   There's no guarantee that whenever an MI command reports an error,
+GDB or the target are in any specific state, and especially, the state
+is not reverted to the state before the MI command was processed.
+Therefore, whenever an MI command results in an error, we recommend
+that the frontend refreshes all the information shown in the user
+interface.
+
+* Menu:
+
+* Context management::
+* Asynchronous and non-stop modes::
+* Thread groups::
+
+
+File: gdb.info,  Node: Context management,  Next: Asynchronous and non-stop modes,  Up: GDB/MI General Design
+
+27.1.1 Context management
+-------------------------
+
+In most cases when GDB accesses the target, this access is done in
+context of a specific thread and frame (*note Frames::).  Often, even
+when accessing global data, the target requires that a thread be
+specified.  The CLI interface maintains the selected thread and frame,
+and supplies them to target on each command.  This is convenient,
+because a command line user would not want to specify that information
+explicitly on each command, and because user interacts with GDB via a
+single terminal, so no confusion is possible as to what thread and
+frame are the current ones.
+
+   In the case of MI, the concept of selected thread and frame is less
+useful.  First, a frontend can easily remember this information itself.
+Second, a graphical frontend can have more than one window, each one
+used for debugging a different thread, and the frontend might want to
+access additional threads for internal purposes.  This increases the
+risk that by relying on implicitly selected thread, the frontend may be
+operating on a wrong one.  Therefore, each MI command should explicitly
+specify which thread and frame to operate on.  To make it possible,
+each MI command accepts the `--thread' and `--frame' options, the value
+to each is GDB identifier for thread and frame to operate on.
+
+   Usually, each top-level window in a frontend allows the user to
+select a thread and a frame, and remembers the user selection for
+further operations.  However, in some cases GDB may suggest that the
+current thread be changed.  For example, when stopping on a breakpoint
+it is reasonable to switch to the thread where breakpoint is hit.  For
+another example, if the user issues the CLI `thread' command via the
+frontend, it is desirable to change the frontend's selected thread to
+the one specified by user.  GDB communicates the suggestion to change
+current thread using the `=thread-selected' notification.  No such
+notification is available for the selected frame at the moment.
+
+   Note that historically, MI shares the selected thread with CLI, so
+frontends used the `-thread-select' to execute commands in the right
+context.  However, getting this to work right is cumbersome.  The
+simplest way is for frontend to emit `-thread-select' command before
+every command.  This doubles the number of commands that need to be
+sent.  The alternative approach is to suppress `-thread-select' if the
+selected thread in GDB is supposed to be identical to the thread the
+frontend wants to operate on.  However, getting this optimization right
+can be tricky.  In particular, if the frontend sends several commands
+to GDB, and one of the commands changes the selected thread, then the
+behaviour of subsequent commands will change.  So, a frontend should
+either wait for response from such problematic commands, or explicitly
+add `-thread-select' for all subsequent commands.  No frontend is known
+to do this exactly right, so it is suggested to just always pass the
+`--thread' and `--frame' options.
+
+
+File: gdb.info,  Node: Asynchronous and non-stop modes,  Next: Thread groups,  Prev: Context management,  Up: GDB/MI General Design
+
+27.1.2 Asynchronous command execution and non-stop mode
+-------------------------------------------------------
+
+On some targets, GDB is capable of processing MI commands even while
+the target is running.  This is called "asynchronous command execution"
+(*note Background Execution::).  The frontend may specify a preferrence
+for asynchronous execution using the `-gdb-set target-async 1' command,
+which should be emitted before either running the executable or
+attaching to the target.  After the frontend has started the executable
+or attached to the target, it can find if asynchronous execution is
+enabled using the `-list-target-features' command.
+
+   Even if GDB can accept a command while target is running, many
+commands that access the target do not work when the target is running.
+Therefore, asynchronous command execution is most useful when combined
+with non-stop mode (*note Non-Stop Mode::).  Then, it is possible to
+examine the state of one thread, while other threads are running.
+
+   When a given thread is running, MI commands that try to access the
+target in the context of that thread may not work, or may work only on
+some targets.  In particular, commands that try to operate on thread's
+stack will not work, on any target.  Commands that read memory, or
+modify breakpoints, may work or not work, depending on the target.  Note
+that even commands that operate on global state, such as `print',
+`set', and breakpoint commands, still access the target in the context
+of a specific thread,  so frontend should try to find a stopped thread
+and perform the operation on that thread (using the `--thread' option).
+
+   Which commands will work in the context of a running thread is
+highly target dependent.  However, the two commands `-exec-interrupt',
+to stop a thread, and `-thread-info', to find the state of a thread,
+will always work.
+
+
+File: gdb.info,  Node: Thread groups,  Prev: Asynchronous and non-stop modes,  Up: GDB/MI General Design
+
+27.1.3 Thread groups
+--------------------
+
+GDB may be used to debug several processes at the same time.  On some
+platfroms, GDB may support debugging of several hardware systems, each
+one having several cores with several different processes running on
+each core.  This section describes the MI mechanism to support such
+debugging scenarios.
+
+   The key observation is that regardless of the structure of the
+target, MI can have a global list of threads, because most commands that
+accept the `--thread' option do not need to know what process that
+thread belongs to.  Therefore, it is not necessary to introduce neither
+additional `--process' option, nor an notion of the current process in
+the MI interface.  The only strictly new feature that is required is
+the ability to find how the threads are grouped into processes.
+
+   To allow the user to discover such grouping, and to support arbitrary
+hierarchy of machines/cores/processes, MI introduces the concept of a
+"thread group".  Thread group is a collection of threads and other
+thread groups.  A thread group always has a string identifier, a type,
+and may have additional attributes specific to the type.  A new
+command, `-list-thread-groups', returns the list of top-level thread
+groups, which correspond to processes that GDB is debugging at the
+moment.  By passing an identifier of a thread group to the
+`-list-thread-groups' command, it is possible to obtain the members of
+specific thread group.
+
+   To allow the user to easily discover processes, and other objects, he
+wishes to debug, a concept of "available thread group" is introduced.
+Available thread group is an thread group that GDB is not debugging,
+but that can be attached to, using the `-target-attach' command.  The
+list of available top-level thread groups can be obtained using
+`-list-thread-groups --available'.  In general, the content of a thread
+group may be only retrieved only after attaching to that thread group.
+
+   Thread groups are related to inferiors (*note Inferiors and
+Programs::).  Each inferior corresponds to a thread group of a special
+type `process', and some additional operations are permitted on such
+thread groups.
+
+
+File: gdb.info,  Node: GDB/MI Command Syntax,  Next: GDB/MI Compatibility with CLI,  Prev: GDB/MI General Design,  Up: GDB/MI
+
+27.2 GDB/MI Command Syntax
+==========================
+
+* Menu:
+
+* GDB/MI Input Syntax::
+* GDB/MI Output Syntax::
+
+
+File: gdb.info,  Node: GDB/MI Input Syntax,  Next: GDB/MI Output Syntax,  Up: GDB/MI Command Syntax
+
+27.2.1 GDB/MI Input Syntax
+--------------------------
+
+`COMMAND ==>'
+     `CLI-COMMAND | MI-COMMAND'
+
+`CLI-COMMAND ==>'
+     `[ TOKEN ] CLI-COMMAND NL', where CLI-COMMAND is any existing GDB
+     CLI command.
+
+`MI-COMMAND ==>'
+     `[ TOKEN ] "-" OPERATION ( " " OPTION )* `[' " --" `]' ( " "
+     PARAMETER )* NL'
+
+`TOKEN ==>'
+     "any sequence of digits"
+
+`OPTION ==>'
+     `"-" PARAMETER [ " " PARAMETER ]'
+
+`PARAMETER ==>'
+     `NON-BLANK-SEQUENCE | C-STRING'
+
+`OPERATION ==>'
+     _any of the operations described in this chapter_
+
+`NON-BLANK-SEQUENCE ==>'
+     _anything, provided it doesn't contain special characters such as
+     "-", NL, """ and of course " "_
+
+`C-STRING ==>'
+     `""" SEVEN-BIT-ISO-C-STRING-CONTENT """'
+
+`NL ==>'
+     `CR | CR-LF'
+
+Notes:
+
+   * The CLI commands are still handled by the MI interpreter; their
+     output is described below.
+
+   * The `TOKEN', when present, is passed back when the command
+     finishes.
+
+   * Some MI commands accept optional arguments as part of the parameter
+     list.  Each option is identified by a leading `-' (dash) and may be
+     followed by an optional argument parameter.  Options occur first
+     in the parameter list and can be delimited from normal parameters
+     using `--' (this is useful when some parameters begin with a dash).
+
+   Pragmatics:
+
+   * We want easy access to the existing CLI syntax (for debugging).
+
+   * We want it to be easy to spot a MI operation.
+
+
+File: gdb.info,  Node: GDB/MI Output Syntax,  Prev: GDB/MI Input Syntax,  Up: GDB/MI Command Syntax
+
+27.2.2 GDB/MI Output Syntax
+---------------------------
+
+The output from GDB/MI consists of zero or more out-of-band records
+followed, optionally, by a single result record.  This result record is
+for the most recent command.  The sequence of output records is
+terminated by `(gdb)'.
+
+   If an input command was prefixed with a `TOKEN' then the
+corresponding output for that command will also be prefixed by that same
+TOKEN.
+
+`OUTPUT ==>'
+     `( OUT-OF-BAND-RECORD )* [ RESULT-RECORD ] "(gdb)" NL'
+
+`RESULT-RECORD ==>'
+     ` [ TOKEN ] "^" RESULT-CLASS ( "," RESULT )* NL'
+
+`OUT-OF-BAND-RECORD ==>'
+     `ASYNC-RECORD | STREAM-RECORD'
+
+`ASYNC-RECORD ==>'
+     `EXEC-ASYNC-OUTPUT | STATUS-ASYNC-OUTPUT | NOTIFY-ASYNC-OUTPUT'
+
+`EXEC-ASYNC-OUTPUT ==>'
+     `[ TOKEN ] "*" ASYNC-OUTPUT'
+
+`STATUS-ASYNC-OUTPUT ==>'
+     `[ TOKEN ] "+" ASYNC-OUTPUT'
+
+`NOTIFY-ASYNC-OUTPUT ==>'
+     `[ TOKEN ] "=" ASYNC-OUTPUT'
+
+`ASYNC-OUTPUT ==>'
+     `ASYNC-CLASS ( "," RESULT )* NL'
+
+`RESULT-CLASS ==>'
+     `"done" | "running" | "connected" | "error" | "exit"'
+
+`ASYNC-CLASS ==>'
+     `"stopped" | OTHERS' (where OTHERS will be added depending on the
+     needs--this is still in development).
+
+`RESULT ==>'
+     ` VARIABLE "=" VALUE'
+
+`VARIABLE ==>'
+     ` STRING '
+
+`VALUE ==>'
+     ` CONST | TUPLE | LIST '
+
+`CONST ==>'
+     `C-STRING'
+
+`TUPLE ==>'
+     ` "{}" | "{" RESULT ( "," RESULT )* "}" '
+
+`LIST ==>'
+     ` "[]" | "[" VALUE ( "," VALUE )* "]" | "[" RESULT ( "," RESULT )*
+     "]" '
+
+`STREAM-RECORD ==>'
+     `CONSOLE-STREAM-OUTPUT | TARGET-STREAM-OUTPUT | LOG-STREAM-OUTPUT'
+
+`CONSOLE-STREAM-OUTPUT ==>'
+     `"~" C-STRING'
+
+`TARGET-STREAM-OUTPUT ==>'
+     `"@" C-STRING'
+
+`LOG-STREAM-OUTPUT ==>'
+     `"&" C-STRING'
+
+`NL ==>'
+     `CR | CR-LF'
+
+`TOKEN ==>'
+     _any sequence of digits_.
+
+Notes:
+
+   * All output sequences end in a single line containing a period.
+
+   * The `TOKEN' is from the corresponding request.  Note that for all
+     async output, while the token is allowed by the grammar and may be
+     output by future versions of GDB for select async output messages,
+     it is generally omitted.  Frontends should treat all async output
+     as reporting general changes in the state of the target and there
+     should be no need to associate async output to any prior command.
+
+   * STATUS-ASYNC-OUTPUT contains on-going status information about the
+     progress of a slow operation.  It can be discarded.  All status
+     output is prefixed by `+'.
+
+   * EXEC-ASYNC-OUTPUT contains asynchronous state change on the target
+     (stopped, started, disappeared).  All async output is prefixed by
+     `*'.
+
+   * NOTIFY-ASYNC-OUTPUT contains supplementary information that the
+     client should handle (e.g., a new breakpoint information).  All
+     notify output is prefixed by `='.
+
+   * CONSOLE-STREAM-OUTPUT is output that should be displayed as is in
+     the console.  It is the textual response to a CLI command.  All
+     the console output is prefixed by `~'.
+
+   * TARGET-STREAM-OUTPUT is the output produced by the target program.
+     All the target output is prefixed by `@'.
+
+   * LOG-STREAM-OUTPUT is output text coming from GDB's internals, for
+     instance messages that should be displayed as part of an error
+     log.  All the log output is prefixed by `&'.
+
+   * New GDB/MI commands should only output LISTS containing VALUES.
+
+
+   *Note GDB/MI Stream Records: GDB/MI Stream Records, for more details
+about the various output records.
+
+
+File: gdb.info,  Node: GDB/MI Compatibility with CLI,  Next: GDB/MI Development and Front Ends,  Prev: GDB/MI Command Syntax,  Up: GDB/MI
+
+27.3 GDB/MI Compatibility with CLI
+==================================
+
+For the developers convenience CLI commands can be entered directly,
+but there may be some unexpected behaviour.  For example, commands that
+query the user will behave as if the user replied yes, breakpoint
+command lists are not executed and some CLI commands, such as `if',
+`when' and `define', prompt for further input with `>', which is not
+valid MI output.
+
+   This feature may be removed at some stage in the future and it is
+recommended that front ends use the `-interpreter-exec' command (*note
+-interpreter-exec::).
+
+
+File: gdb.info,  Node: GDB/MI Development and Front Ends,  Next: GDB/MI Output Records,  Prev: GDB/MI Compatibility with CLI,  Up: GDB/MI
+
+27.4 GDB/MI Development and Front Ends
+======================================
+
+The application which takes the MI output and presents the state of the
+program being debugged to the user is called a "front end".
+
+   Although GDB/MI is still incomplete, it is currently being used by a
+variety of front ends to GDB.  This makes it difficult to introduce new
+functionality without breaking existing usage.  This section tries to
+minimize the problems by describing how the protocol might change.
+
+   Some changes in MI need not break a carefully designed front end, and
+for these the MI version will remain unchanged.  The following is a
+list of changes that may occur within one level, so front ends should
+parse MI output in a way that can handle them:
+
+   * New MI commands may be added.
+
+   * New fields may be added to the output of any MI command.
+
+   * The range of values for fields with specified values, e.g.,
+     `in_scope' (*note -var-update::) may be extended.
+
+
+   If the changes are likely to break front ends, the MI version level
+will be increased by one.  This will allow the front end to parse the
+output according to the MI version.  Apart from mi0, new versions of
+GDB will not support old versions of MI and it will be the
+responsibility of the front end to work with the new one.
+
+   The best way to avoid unexpected changes in MI that might break your
+front end is to make your project known to GDB developers and follow
+development on <gdb at sourceware.org> and <gdb-patches at sourceware.org>.  
+
+
+File: gdb.info,  Node: GDB/MI Output Records,  Next: GDB/MI Simple Examples,  Prev: GDB/MI Development and Front Ends,  Up: GDB/MI
+
+27.5 GDB/MI Output Records
+==========================
+
+* Menu:
+
+* GDB/MI Result Records::
+* GDB/MI Stream Records::
+* GDB/MI Async Records::
+* GDB/MI Frame Information::
+* GDB/MI Thread Information::
+* GDB/MI Ada Exception Information::
+
+
+File: gdb.info,  Node: GDB/MI Result Records,  Next: GDB/MI Stream Records,  Up: GDB/MI Output Records
+
+27.5.1 GDB/MI Result Records
+----------------------------
+
+In addition to a number of out-of-band notifications, the response to a
+GDB/MI command includes one of the following result indications:
+
+`"^done" [ "," RESULTS ]'
+     The synchronous operation was successful, `RESULTS' are the return
+     values.
+
+`"^running"'
+     This result record is equivalent to `^done'.  Historically, it was
+     output instead of `^done' if the command has resumed the target.
+     This behaviour is maintained for backward compatibility, but all
+     frontends should treat `^done' and `^running' identically and rely
+     on the `*running' output record to determine which threads are
+     resumed.
+
+`"^connected"'
+     GDB has connected to a remote target.
+
+`"^error" "," C-STRING'
+     The operation failed.  The `C-STRING' contains the corresponding
+     error message.
+
+`"^exit"'
+     GDB has terminated.
+
+
+
+File: gdb.info,  Node: GDB/MI Stream Records,  Next: GDB/MI Async Records,  Prev: GDB/MI Result Records,  Up: GDB/MI Output Records
+
+27.5.2 GDB/MI Stream Records
+----------------------------
+
+GDB internally maintains a number of output streams: the console, the
+target, and the log.  The output intended for each of these streams is
+funneled through the GDB/MI interface using "stream records".
+
+   Each stream record begins with a unique "prefix character" which
+identifies its stream (*note GDB/MI Output Syntax: GDB/MI Output
+Syntax.).  In addition to the prefix, each stream record contains a
+`STRING-OUTPUT'.  This is either raw text (with an implicit new line)
+or a quoted C string (which does not contain an implicit newline).
+
+`"~" STRING-OUTPUT'
+     The console output stream contains text that should be displayed
+     in the CLI console window.  It contains the textual responses to
+     CLI commands.
+
+`"@" STRING-OUTPUT'
+     The target output stream contains any textual output from the
+     running target.  This is only present when GDB's event loop is
+     truly asynchronous, which is currently only the case for remote
+     targets.
+
+`"&" STRING-OUTPUT'
+     The log stream contains debugging messages being produced by GDB's
+     internals.
+
+
+File: gdb.info,  Node: GDB/MI Async Records,  Next: GDB/MI Frame Information,  Prev: GDB/MI Stream Records,  Up: GDB/MI Output Records
+
+27.5.3 GDB/MI Async Records
+---------------------------
+
+"Async" records are used to notify the GDB/MI client of additional
+changes that have occurred.  Those changes can either be a consequence
+of GDB/MI commands (e.g., a breakpoint modified) or a result of target
+activity (e.g., target stopped).
+
+   The following is the list of possible async records:
+
+`*running,thread-id="THREAD"'
+     The target is now running.  The THREAD field tells which specific
+     thread is now running, and can be `all' if all threads are
+     running.  The frontend should assume that no interaction with a
+     running thread is possible after this notification is produced.
+     The frontend should not assume that this notification is output
+     only once for any command.  GDB may emit this notification several
+     times, either for different threads, because it cannot resume all
+     threads together, or even for a single thread, if the thread must
+     be stepped though some code before letting it run freely.
+
+`*stopped,reason="REASON",thread-id="ID",stopped-threads="STOPPED",core="CORE"'
+     The target has stopped.  The REASON field can have one of the
+     following values:
+
+    `breakpoint-hit'
+          A breakpoint was reached.
+
+    `watchpoint-trigger'
+          A watchpoint was triggered.
+
+    `read-watchpoint-trigger'
+          A read watchpoint was triggered.
+
+    `access-watchpoint-trigger'
+          An access watchpoint was triggered.
+
+    `function-finished'
+          An -exec-finish or similar CLI command was accomplished.
+
+    `location-reached'
+          An -exec-until or similar CLI command was accomplished.
+
+    `watchpoint-scope'
+          A watchpoint has gone out of scope.
+
+    `end-stepping-range'
+          An -exec-next, -exec-next-instruction, -exec-step,
+          -exec-step-instruction or similar CLI command was
+          accomplished.
+
+    `exited-signalled'
+          The inferior exited because of a signal.
+
+    `exited'
+          The inferior exited.
+
+    `exited-normally'
+          The inferior exited normally.
+
+    `signal-received'
+          A signal was received by the inferior.
+
+    `solib-event'
+          The inferior has stopped due to a library being loaded or
+          unloaded.  This can happen when `stop-on-solib-events' (*note
+          Files::) is set or when a `catch load' or `catch unload'
+          catchpoint is in use (*note Set Catchpoints::).
+
+    `fork'
+          The inferior has forked.  This is reported when `catch fork'
+          (*note Set Catchpoints::) has been used.
+
+    `vfork'
+          The inferior has vforked.  This is reported in when `catch
+          vfork' (*note Set Catchpoints::) has been used.
+
+    `syscall-entry'
+          The inferior entered a system call.  This is reported when
+          `catch syscall' (*note Set Catchpoints::) has been used.
+
+    `syscall-entry'
+          The inferior returned from a system call.  This is reported
+          when `catch syscall' (*note Set Catchpoints::) has been used.
+
+    `exec'
+          The inferior called `exec'.  This is reported when `catch
+          exec' (*note Set Catchpoints::) has been used.
+
+     The ID field identifies the thread that directly caused the stop -
+     for example by hitting a breakpoint.  Depending on whether all-stop
+     mode is in effect (*note All-Stop Mode::), GDB may either stop all
+     threads, or only the thread that directly triggered the stop.  If
+     all threads are stopped, the STOPPED field will have the value of
+     `"all"'.  Otherwise, the value of the STOPPED field will be a list
+     of thread identifiers.  Presently, this list will always include a
+     single thread, but frontend should be prepared to see several
+     threads in the list.  The CORE field reports the processor core on
+     which the stop event has happened.  This field may be absent if
+     such information is not available.
+
+`=thread-group-added,id="ID"'
+`=thread-group-removed,id="ID"'
+     A thread group was either added or removed.  The ID field contains
+     the GDB identifier of the thread group.  When a thread group is
+     added, it generally might not be associated with a running
+     process.  When a thread group is removed, its id becomes invalid
+     and cannot be used in any way.
+
+`=thread-group-started,id="ID",pid="PID"'
+     A thread group became associated with a running program, either
+     because the program was just started or the thread group was
+     attached to a program.  The ID field contains the GDB identifier
+     of the thread group.  The PID field contains process identifier,
+     specific to the operating system.
+
+`=thread-group-exited,id="ID"[,exit-code="CODE"]'
+     A thread group is no longer associated with a running program,
+     either because the program has exited, or because it was detached
+     from.  The ID field contains the GDB identifier of the thread
+     group.  CODE is the exit code of the inferior; it exists only when
+     the inferior exited with some code.
+
+`=thread-created,id="ID",group-id="GID"'
+`=thread-exited,id="ID",group-id="GID"'
+     A thread either was created, or has exited.  The ID field contains
+     the GDB identifier of the thread.  The GID field identifies the
+     thread group this thread belongs to.
+
+`=thread-selected,id="ID"'
+     Informs that the selected thread was changed as result of the last
+     command.  This notification is not emitted as result of
+     `-thread-select' command but is emitted whenever an MI command
+     that is not documented to change the selected thread actually
+     changes it.  In particular, invoking, directly or indirectly (via
+     user-defined command), the CLI `thread' command, will generate
+     this notification.
+
+     We suggest that in response to this notification, front ends
+     highlight the selected thread and cause subsequent commands to
+     apply to that thread.
+
+`=library-loaded,...'
+     Reports that a new library file was loaded by the program.  This
+     notification has 4 fields--ID, TARGET-NAME, HOST-NAME, and
+     SYMBOLS-LOADED.  The ID field is an opaque identifier of the
+     library.  For remote debugging case, TARGET-NAME and HOST-NAME
+     fields give the name of the library file on the target, and on the
+     host respectively.  For native debugging, both those fields have
+     the same value.  The SYMBOLS-LOADED field is emitted only for
+     backward compatibility and should not be relied on to convey any
+     useful information.  The THREAD-GROUP field, if present, specifies
+     the id of the thread group in whose context the library was
+     loaded.  If the field is absent, it means the library was loaded
+     in the context of all present thread groups.
+
+`=library-unloaded,...'
+     Reports that a library was unloaded by the program.  This
+     notification has 3 fields--ID, TARGET-NAME and HOST-NAME with the
+     same meaning as for the `=library-loaded' notification.  The
+     THREAD-GROUP field, if present, specifies the id of the thread
+     group in whose context the library was unloaded.  If the field is
+     absent, it means the library was unloaded in the context of all
+     present thread groups.
+
+`=breakpoint-created,bkpt={...}'
+`=breakpoint-modified,bkpt={...}'
+`=breakpoint-deleted,bkpt={...}'
+     Reports that a breakpoint was created, modified, or deleted,
+     respectively.  Only user-visible breakpoints are reported to the MI
+     user.
+
+     The BKPT argument is of the same form as returned by the various
+     breakpoint commands; *Note GDB/MI Breakpoint Commands::.
+
+     Note that if a breakpoint is emitted in the result record of a
+     command, then it will not also be emitted in an async record.
+
+
+
+File: gdb.info,  Node: GDB/MI Frame Information,  Next: GDB/MI Thread Information,  Prev: GDB/MI Async Records,  Up: GDB/MI Output Records
+
+27.5.4 GDB/MI Frame Information
+-------------------------------
+
+Response from many MI commands includes an information about stack
+frame.  This information is a tuple that may have the following fields:
+
+`level'
+     The level of the stack frame.  The innermost frame has the level of
+     zero.  This field is always present.
+
+`func'
+     The name of the function corresponding to the frame.  This field
+     may be absent if GDB is unable to determine the function name.
+
+`addr'
+     The code address for the frame.  This field is always present.
+
+`file'
+     The name of the source files that correspond to the frame's code
+     address.  This field may be absent.
+
+`line'
+     The source line corresponding to the frames' code address.  This
+     field may be absent.
+
+`from'
+     The name of the binary file (either executable or shared library)
+     the corresponds to the frame's code address.  This field may be
+     absent.
+
+
+
+File: gdb.info,  Node: GDB/MI Thread Information,  Next: GDB/MI Ada Exception Information,  Prev: GDB/MI Frame Information,  Up: GDB/MI Output Records
+
+27.5.5 GDB/MI Thread Information
+--------------------------------
+
+Whenever GDB has to report an information about a thread, it uses a
+tuple with the following fields:
+
+`id'
+     The numeric id assigned to the thread by GDB.  This field is
+     always present.
+
+`target-id'
+     Target-specific string identifying the thread.  This field is
+     always present.
+
+`details'
+     Additional information about the thread provided by the target.
+     It is supposed to be human-readable and not interpreted by the
+     frontend.  This field is optional.
+
+`state'
+     Either `stopped' or `running', depending on whether the thread is
+     presently running.  This field is always present.
+
+`core'
+     The value of this field is an integer number of the processor core
+     the thread was last seen on.  This field is optional.
+
+
+File: gdb.info,  Node: GDB/MI Ada Exception Information,  Prev: GDB/MI Thread Information,  Up: GDB/MI Output Records
+
+27.5.6 GDB/MI Ada Exception Information
+---------------------------------------
+
+Whenever a `*stopped' record is emitted because the program stopped
+after hitting an exception catchpoint (*note Set Catchpoints::), GDB
+provides the name of the exception that was raised via the
+`exception-name' field.
+
+
+File: gdb.info,  Node: GDB/MI Simple Examples,  Next: GDB/MI Command Description Format,  Prev: GDB/MI Output Records,  Up: GDB/MI
+
+27.6 Simple Examples of GDB/MI Interaction
+==========================================
+
+This subsection presents several simple examples of interaction using
+the GDB/MI interface.  In these examples, `->' means that the following
+line is passed to GDB/MI as input, while `<-' means the output received
+from GDB/MI.
+
+   Note the line breaks shown in the examples are here only for
+readability, they don't appear in the real output.
+
+Setting a Breakpoint
+--------------------
+
+Setting a breakpoint generates synchronous output which contains
+detailed information of the breakpoint.
+
+     -> -break-insert main
+     <- ^done,bkpt={number="1",type="breakpoint",disp="keep",
+         enabled="y",addr="0x08048564",func="main",file="myprog.c",
+         fullname="/home/nickrob/myprog.c",line="68",times="0"}
+     <- (gdb)
+
+Program Execution
+-----------------
+
+Program execution generates asynchronous records and MI gives the
+reason that execution stopped.
+
+     -> -exec-run
+     <- ^running
+     <- (gdb)
+     <- *stopped,reason="breakpoint-hit",disp="keep",bkptno="1",thread-id="0",
+        frame={addr="0x08048564",func="main",
+        args=[{name="argc",value="1"},{name="argv",value="0xbfc4d4d4"}],
+        file="myprog.c",fullname="/home/nickrob/myprog.c",line="68"}
+     <- (gdb)
+     -> -exec-continue
+     <- ^running
+     <- (gdb)
+     <- *stopped,reason="exited-normally"
+     <- (gdb)
+
+Quitting GDB
+------------
+
+Quitting GDB just prints the result class `^exit'.
+
+     -> (gdb)
+     <- -gdb-exit
+     <- ^exit
+
+   Please note that `^exit' is printed immediately, but it might take
+some time for GDB to actually exit.  During that time, GDB performs
+necessary cleanups, including killing programs being debugged or
+disconnecting from debug hardware, so the frontend should wait till GDB
+exits and should only forcibly kill GDB if it fails to exit in
+reasonable time.
+
+A Bad Command
+-------------
+
+Here's what happens if you pass a non-existent command:
+
+     -> -rubbish
+     <- ^error,msg="Undefined MI command: rubbish"
+     <- (gdb)
+
+
+File: gdb.info,  Node: GDB/MI Command Description Format,  Next: GDB/MI Breakpoint Commands,  Prev: GDB/MI Simple Examples,  Up: GDB/MI
+
+27.7 GDB/MI Command Description Format
+======================================
+
+The remaining sections describe blocks of commands.  Each block of
+commands is laid out in a fashion similar to this section.
+
+Motivation
+----------
+
+The motivation for this collection of commands.
+
+Introduction
+------------
+
+A brief introduction to this collection of commands as a whole.
+
+Commands
+--------
+
+For each command in the block, the following is described:
+
+Synopsis
+........
+
+      -command ARGS...
+
+Result
+......
+
+GDB Command
+...........
+
+The corresponding GDB CLI command(s), if any.
+
+Example
+.......
+
+Example(s) formatted for readability.  Some of the described commands
+have not been implemented yet and these are labeled N.A. (not
+available).
+
+
+File: gdb.info,  Node: GDB/MI Breakpoint Commands,  Next: GDB/MI Program Context,  Prev: GDB/MI Command Description Format,  Up: GDB/MI
+
+27.8 GDB/MI Breakpoint Commands
+===============================
+
+This section documents GDB/MI commands for manipulating breakpoints.
+
+The `-break-after' Command
+--------------------------
+
+Synopsis
+........
+
+      -break-after NUMBER COUNT
+
+   The breakpoint number NUMBER is not in effect until it has been hit
+COUNT times.  To see how this is reflected in the output of the
+`-break-list' command, see the description of the `-break-list' command
+below.
+
+GDB Command
+...........
+
+The corresponding GDB command is `ignore'.
+
+Example
+.......
+
+     (gdb)
+     -break-insert main
+     ^done,bkpt={number="1",type="breakpoint",disp="keep",
+     enabled="y",addr="0x000100d0",func="main",file="hello.c",
+     fullname="/home/foo/hello.c",line="5",times="0"}
+     (gdb)
+     -break-after 1 3
+     ~
+     ^done
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="1",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+     addr="0x000100d0",func="main",file="hello.c",fullname="/home/foo/hello.c",
+     line="5",times="0",ignore="3"}]}
+     (gdb)
+
+The `-break-commands' Command
+-----------------------------
+
+Synopsis
+........
+
+      -break-commands NUMBER [ COMMAND1 ... COMMANDN ]
+
+   Specifies the CLI commands that should be executed when breakpoint
+NUMBER is hit.  The parameters COMMAND1 to COMMANDN are the commands.
+If no command is specified, any previously-set commands are cleared.
+*Note Break Commands::.  Typical use of this functionality is tracing a
+program, that is, printing of values of some variables whenever
+breakpoint is hit and then continuing.
+
+GDB Command
+...........
+
+The corresponding GDB command is `commands'.
+
+Example
+.......
+
+     (gdb)
+     -break-insert main
+     ^done,bkpt={number="1",type="breakpoint",disp="keep",
+     enabled="y",addr="0x000100d0",func="main",file="hello.c",
+     fullname="/home/foo/hello.c",line="5",times="0"}
+     (gdb)
+     -break-commands 1 "print v" "continue"
+     ^done
+     (gdb)
+
+The `-break-condition' Command
+------------------------------
+
+Synopsis
+........
+
+      -break-condition NUMBER EXPR
+
+   Breakpoint NUMBER will stop the program only if the condition in
+EXPR is true.  The condition becomes part of the `-break-list' output
+(see the description of the `-break-list' command below).
+
+GDB Command
+...........
+
+The corresponding GDB command is `condition'.
+
+Example
+.......
+
+     (gdb)
+     -break-condition 1 1
+     ^done
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="1",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+     addr="0x000100d0",func="main",file="hello.c",fullname="/home/foo/hello.c",
+     line="5",cond="1",times="0",ignore="3"}]}
+     (gdb)
+
+The `-break-delete' Command
+---------------------------
+
+Synopsis
+........
+
+      -break-delete ( BREAKPOINT )+
+
+   Delete the breakpoint(s) whose number(s) are specified in the
+argument list.  This is obviously reflected in the breakpoint list.
+
+GDB Command
+...........
+
+The corresponding GDB command is `delete'.
+
+Example
+.......
+
+     (gdb)
+     -break-delete 1
+     ^done
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="0",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[]}
+     (gdb)
+
+The `-break-disable' Command
+----------------------------
+
+Synopsis
+........
+
+      -break-disable ( BREAKPOINT )+
+
+   Disable the named BREAKPOINT(s).  The field `enabled' in the break
+list is now set to `n' for the named BREAKPOINT(s).
+
+GDB Command
+...........
+
+The corresponding GDB command is `disable'.
+
+Example
+.......
+
+     (gdb)
+     -break-disable 2
+     ^done
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="1",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[bkpt={number="2",type="breakpoint",disp="keep",enabled="n",
+     addr="0x000100d0",func="main",file="hello.c",fullname="/home/foo/hello.c",
+     line="5",times="0"}]}
+     (gdb)
+
+The `-break-enable' Command
+---------------------------
+
+Synopsis
+........
+
+      -break-enable ( BREAKPOINT )+
+
+   Enable (previously disabled) BREAKPOINT(s).
+
+GDB Command
+...........
+
+The corresponding GDB command is `enable'.
+
+Example
+.......
+
+     (gdb)
+     -break-enable 2
+     ^done
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="1",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[bkpt={number="2",type="breakpoint",disp="keep",enabled="y",
+     addr="0x000100d0",func="main",file="hello.c",fullname="/home/foo/hello.c",
+     line="5",times="0"}]}
+     (gdb)
+
+The `-break-info' Command
+-------------------------
+
+Synopsis
+........
+
+      -break-info BREAKPOINT
+
+   Get information about a single breakpoint.
+
+GDB Command
+...........
+
+The corresponding GDB command is `info break BREAKPOINT'.
+
+Example
+.......
+
+N.A.
+
+The `-break-insert' Command
+---------------------------
+
+Synopsis
+........
+
+      -break-insert [ -t ] [ -h ] [ -f ] [ -d ] [ -a ]
+         [ -c CONDITION ] [ -i IGNORE-COUNT ]
+         [ -p THREAD-ID ] [ LOCATION ]
+
+If specified, LOCATION, can be one of:
+
+   * function
+
+   * filename:linenum
+
+   * filename:function
+
+   * *address
+
+   The possible optional parameters of this command are:
+
+`-t'
+     Insert a temporary breakpoint.
+
+`-h'
+     Insert a hardware breakpoint.
+
+`-f'
+     If LOCATION cannot be parsed (for example if it refers to unknown
+     files or functions), create a pending breakpoint. Without this
+     flag, GDB will report an error, and won't create a breakpoint, if
+     LOCATION cannot be parsed.
+
+`-d'
+     Create a disabled breakpoint.
+
+`-a'
+     Create a tracepoint.  *Note Tracepoints::.  When this parameter is
+     used together with `-h', a fast tracepoint is created.
+
+`-c CONDITION'
+     Make the breakpoint conditional on CONDITION.
+
+`-i IGNORE-COUNT'
+     Initialize the IGNORE-COUNT.
+
+`-p THREAD-ID'
+     Restrict the breakpoint to the specified THREAD-ID.
+
+Result
+......
+
+The result is in the form:
+
+     ^done,bkpt={number="NUMBER",type="TYPE",disp="del"|"keep",
+     enabled="y"|"n",addr="HEX",func="FUNCNAME",file="FILENAME",
+     fullname="FULL_FILENAME",line="LINENO",[thread="THREADNO,]
+     times="TIMES"}
+
+where NUMBER is the GDB number for this breakpoint, FUNCNAME is the
+name of the function where the breakpoint was inserted, FILENAME is the
+name of the source file which contains this function, LINENO is the
+source line number within that file and TIMES the number of times that
+the breakpoint has been hit (always 0 for -break-insert but may be
+greater for -break-info or -break-list which use the same output).
+
+   Note: this format is open to change.
+
+GDB Command
+...........
+
+The corresponding GDB commands are `break', `tbreak', `hbreak', and
+`thbreak'.
+
+Example
+.......
+
+     (gdb)
+     -break-insert main
+     ^done,bkpt={number="1",addr="0x0001072c",file="recursive2.c",
+     fullname="/home/foo/recursive2.c,line="4",times="0"}
+     (gdb)
+     -break-insert -t foo
+     ^done,bkpt={number="2",addr="0x00010774",file="recursive2.c",
+     fullname="/home/foo/recursive2.c,line="11",times="0"}
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="2",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+     addr="0x0001072c", func="main",file="recursive2.c",
+     fullname="/home/foo/recursive2.c,"line="4",times="0"},
+     bkpt={number="2",type="breakpoint",disp="del",enabled="y",
+     addr="0x00010774",func="foo",file="recursive2.c",
+     fullname="/home/foo/recursive2.c",line="11",times="0"}]}
+     (gdb)
+
+The `-break-list' Command
+-------------------------
+
+Synopsis
+........
+
+      -break-list
+
+   Displays the list of inserted breakpoints, showing the following
+fields:
+
+`Number'
+     number of the breakpoint
+
+`Type'
+     type of the breakpoint: `breakpoint' or `watchpoint'
+
+`Disposition'
+     should the breakpoint be deleted or disabled when it is hit: `keep'
+     or `nokeep'
+
+`Enabled'
+     is the breakpoint enabled or no: `y' or `n'
+
+`Address'
+     memory location at which the breakpoint is set
+
+`What'
+     logical location of the breakpoint, expressed by function name,
+     file name, line number
+
+`Times'
+     number of times the breakpoint has been hit
+
+   If there are no breakpoints or watchpoints, the `BreakpointTable'
+`body' field is an empty list.
+
+GDB Command
+...........
+
+The corresponding GDB command is `info break'.
+
+Example
+.......
+
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="2",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+     addr="0x000100d0",func="main",file="hello.c",line="5",times="0"},
+     bkpt={number="2",type="breakpoint",disp="keep",enabled="y",
+     addr="0x00010114",func="foo",file="hello.c",fullname="/home/foo/hello.c",
+     line="13",times="0"}]}
+     (gdb)
+
+   Here's an example of the result when there are no breakpoints:
+
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="0",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[]}
+     (gdb)
+
+The `-break-passcount' Command
+------------------------------
+
+Synopsis
+........
+
+      -break-passcount TRACEPOINT-NUMBER PASSCOUNT
+
+   Set the passcount for tracepoint TRACEPOINT-NUMBER to PASSCOUNT.  If
+the breakpoint referred to by TRACEPOINT-NUMBER is not a tracepoint,
+error is emitted.  This corresponds to CLI command `passcount'.
+
+The `-break-watch' Command
+--------------------------
+
+Synopsis
+........
+
+      -break-watch [ -a | -r ]
+
+   Create a watchpoint.  With the `-a' option it will create an
+"access" watchpoint, i.e., a watchpoint that triggers either on a read
+from or on a write to the memory location.  With the `-r' option, the
+watchpoint created is a "read" watchpoint, i.e., it will trigger only
+when the memory location is accessed for reading.  Without either of
+the options, the watchpoint created is a regular watchpoint, i.e., it
+will trigger when the memory location is accessed for writing.  *Note
+Setting Watchpoints: Set Watchpoints.
+
+   Note that `-break-list' will report a single list of watchpoints and
+breakpoints inserted.
+
+GDB Command
+...........
+
+The corresponding GDB commands are `watch', `awatch', and `rwatch'.
+
+Example
+.......
+
+Setting a watchpoint on a variable in the `main' function:
+
+     (gdb)
+     -break-watch x
+     ^done,wpt={number="2",exp="x"}
+     (gdb)
+     -exec-continue
+     ^running
+     (gdb)
+     *stopped,reason="watchpoint-trigger",wpt={number="2",exp="x"},
+     value={old="-268439212",new="55"},
+     frame={func="main",args=[],file="recursive2.c",
+     fullname="/home/foo/bar/recursive2.c",line="5"}
+     (gdb)
+
+   Setting a watchpoint on a variable local to a function.  GDB will
+stop the program execution twice: first for the variable changing
+value, then for the watchpoint going out of scope.
+
+     (gdb)
+     -break-watch C
+     ^done,wpt={number="5",exp="C"}
+     (gdb)
+     -exec-continue
+     ^running
+     (gdb)
+     *stopped,reason="watchpoint-trigger",
+     wpt={number="5",exp="C"},value={old="-276895068",new="3"},
+     frame={func="callee4",args=[],
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="13"}
+     (gdb)
+     -exec-continue
+     ^running
+     (gdb)
+     *stopped,reason="watchpoint-scope",wpnum="5",
+     frame={func="callee3",args=[{name="strarg",
+     value="0x11940 \"A string argument.\""}],
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="18"}
+     (gdb)
+
+   Listing breakpoints and watchpoints, at different points in the
+program execution.  Note that once the watchpoint goes out of scope, it
+is deleted.
+
+     (gdb)
+     -break-watch C
+     ^done,wpt={number="2",exp="C"}
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="2",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+     addr="0x00010734",func="callee4",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/devo/gdb/testsuite/gdb.mi/basics.c"line="8",times="1"},
+     bkpt={number="2",type="watchpoint",disp="keep",
+     enabled="y",addr="",what="C",times="0"}]}
+     (gdb)
+     -exec-continue
+     ^running
+     (gdb)
+     *stopped,reason="watchpoint-trigger",wpt={number="2",exp="C"},
+     value={old="-276895068",new="3"},
+     frame={func="callee4",args=[],
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="13"}
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="2",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+     addr="0x00010734",func="callee4",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/devo/gdb/testsuite/gdb.mi/basics.c",line="8",times="1"},
+     bkpt={number="2",type="watchpoint",disp="keep",
+     enabled="y",addr="",what="C",times="-5"}]}
+     (gdb)
+     -exec-continue
+     ^running
+     ^done,reason="watchpoint-scope",wpnum="2",
+     frame={func="callee3",args=[{name="strarg",
+     value="0x11940 \"A string argument.\""}],
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="18"}
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="1",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+     addr="0x00010734",func="callee4",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/devo/gdb/testsuite/gdb.mi/basics.c",line="8",
+     times="1"}]}
+     (gdb)
+
+
+File: gdb.info,  Node: GDB/MI Program Context,  Next: GDB/MI Thread Commands,  Prev: GDB/MI Breakpoint Commands,  Up: GDB/MI
+
+27.9 GDB/MI  Program Context
+============================
+
+The `-exec-arguments' Command
+-----------------------------
+
+Synopsis
+........
+
+      -exec-arguments ARGS
+
+   Set the inferior program arguments, to be used in the next
+`-exec-run'.
+
+GDB Command
+...........
+
+The corresponding GDB command is `set args'.
+
+Example
+.......
+
+     (gdb)
+     -exec-arguments -v word
+     ^done
+     (gdb)
+
+The `-environment-cd' Command
+-----------------------------
+
+Synopsis
+........
+
+      -environment-cd PATHDIR
+
+   Set GDB's working directory.
+
+GDB Command
+...........
+
+The corresponding GDB command is `cd'.
+
+Example
+.......
+
+     (gdb)
+     -environment-cd /kwikemart/marge/ezannoni/flathead-dev/devo/gdb
+     ^done
+     (gdb)
+
+The `-environment-directory' Command
+------------------------------------
+
+Synopsis
+........
+
+      -environment-directory [ -r ] [ PATHDIR ]+
+
+   Add directories PATHDIR to beginning of search path for source files.
+If the `-r' option is used, the search path is reset to the default
+search path.  If directories PATHDIR are supplied in addition to the
+`-r' option, the search path is first reset and then addition occurs as
+normal.  Multiple directories may be specified, separated by blanks.
+Specifying multiple directories in a single command results in the
+directories added to the beginning of the search path in the same order
+they were presented in the command.  If blanks are needed as part of a
+directory name, double-quotes should be used around the name.  In the
+command output, the path will show up separated by the system
+directory-separator character.  The directory-separator character must
+not be used in any directory name.  If no directories are specified,
+the current search path is displayed.
+
+GDB Command
+...........
+
+The corresponding GDB command is `dir'.
+
+Example
+.......
+
+     (gdb)
+     -environment-directory /kwikemart/marge/ezannoni/flathead-dev/devo/gdb
+     ^done,source-path="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb:$cdir:$cwd"
+     (gdb)
+     -environment-directory ""
+     ^done,source-path="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb:$cdir:$cwd"
+     (gdb)
+     -environment-directory -r /home/jjohnstn/src/gdb /usr/src
+     ^done,source-path="/home/jjohnstn/src/gdb:/usr/src:$cdir:$cwd"
+     (gdb)
+     -environment-directory -r
+     ^done,source-path="$cdir:$cwd"
+     (gdb)
+
+The `-environment-path' Command
+-------------------------------
+
+Synopsis
+........
+
+      -environment-path [ -r ] [ PATHDIR ]+
+
+   Add directories PATHDIR to beginning of search path for object files.
+If the `-r' option is used, the search path is reset to the original
+search path that existed at gdb start-up.  If directories PATHDIR are
+supplied in addition to the `-r' option, the search path is first reset
+and then addition occurs as normal.  Multiple directories may be
+specified, separated by blanks.  Specifying multiple directories in a
+single command results in the directories added to the beginning of the
+search path in the same order they were presented in the command.  If
+blanks are needed as part of a directory name, double-quotes should be
+used around the name.  In the command output, the path will show up
+separated by the system directory-separator character.  The
+directory-separator character must not be used in any directory name.
+If no directories are specified, the current path is displayed.
+
+GDB Command
+...........
+
+The corresponding GDB command is `path'.
+
+Example
+.......
+
+     (gdb)
+     -environment-path
+     ^done,path="/usr/bin"
+     (gdb)
+     -environment-path /kwikemart/marge/ezannoni/flathead-dev/ppc-eabi/gdb /bin
+     ^done,path="/kwikemart/marge/ezannoni/flathead-dev/ppc-eabi/gdb:/bin:/usr/bin"
+     (gdb)
+     -environment-path -r /usr/local/bin
+     ^done,path="/usr/local/bin:/usr/bin"
+     (gdb)
+
+The `-environment-pwd' Command
+------------------------------
+
+Synopsis
+........
+
+      -environment-pwd
+
+   Show the current working directory.
+
+GDB Command
+...........
+
+The corresponding GDB command is `pwd'.
+
+Example
+.......
+
+     (gdb)
+     -environment-pwd
+     ^done,cwd="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb"
+     (gdb)
+
+
+File: gdb.info,  Node: GDB/MI Thread Commands,  Next: GDB/MI Ada Tasking Commands,  Prev: GDB/MI Program Context,  Up: GDB/MI
+
+27.10 GDB/MI Thread Commands
+============================
+
+The `-thread-info' Command
+--------------------------
+
+Synopsis
+........
+
+      -thread-info [ THREAD-ID ]
+
+   Reports information about either a specific thread, if the THREAD-ID
+parameter is present, or about all threads.  When printing information
+about all threads, also reports the current thread.
+
+GDB Command
+...........
+
+The `info thread' command prints the same information about all threads.
+
+Result
+......
+
+The result is a list of threads.  The following attributes are defined
+for a given thread:
+
+`current'
+     This field exists only for the current thread.  It has the value
+     `*'.
+
+`id'
+     The identifier that GDB uses to refer to the thread.
+
+`target-id'
+     The identifier that the target uses to refer to the thread.
+
+`details'
+     Extra information about the thread, in a target-specific format.
+     This field is optional.
+
+`name'
+     The name of the thread.  If the user specified a name using the
+     `thread name' command, then this name is given.  Otherwise, if GDB
+     can extract the thread name from the target, then that name is
+     given.  If GDB cannot find the thread name, then this field is
+     omitted.
+
+`frame'
+     The stack frame currently executing in the thread.
+
+`state'
+     The thread's state.  The `state' field may have the following
+     values:
+
+    `stopped'
+          The thread is stopped.  Frame information is available for
+          stopped threads.
+
+    `running'
+          The thread is running.  There's no frame information for
+          running threads.
+
+
+`core'
+     If GDB can find the CPU core on which this thread is running, then
+     this field is the core identifier.  This field is optional.
+
+
+Example
+.......
+
+     -thread-info
+     ^done,threads=[
+     {id="2",target-id="Thread 0xb7e14b90 (LWP 21257)",
+        frame={level="0",addr="0xffffe410",func="__kernel_vsyscall",
+                args=[]},state="running"},
+     {id="1",target-id="Thread 0xb7e156b0 (LWP 21254)",
+        frame={level="0",addr="0x0804891f",func="foo",
+                args=[{name="i",value="10"}],
+                file="/tmp/a.c",fullname="/tmp/a.c",line="158"},
+                state="running"}],
+     current-thread-id="1"
+     (gdb)
+
+The `-thread-list-ids' Command
+------------------------------
+
+Synopsis
+........
+
+      -thread-list-ids
+
+   Produces a list of the currently known GDB thread ids.  At the end
+of the list it also prints the total number of such threads.
+
+   This command is retained for historical reasons, the `-thread-info'
+command should be used instead.
+
+GDB Command
+...........
+
+Part of `info threads' supplies the same information.
+
+Example
+.......
+
+     (gdb)
+     -thread-list-ids
+     ^done,thread-ids={thread-id="3",thread-id="2",thread-id="1"},
+     current-thread-id="1",number-of-threads="3"
+     (gdb)
+
+The `-thread-select' Command
+----------------------------
+
+Synopsis
+........
+
+      -thread-select THREADNUM
+
+   Make THREADNUM the current thread.  It prints the number of the new
+current thread, and the topmost frame for that thread.
+
+   This command is deprecated in favor of explicitly using the
+`--thread' option to each command.
+
+GDB Command
+...........
+
+The corresponding GDB command is `thread'.
+
+Example
+.......
+
+     (gdb)
+     -exec-next
+     ^running
+     (gdb)
+     *stopped,reason="end-stepping-range",thread-id="2",line="187",
+     file="../../../devo/gdb/testsuite/gdb.threads/linux-dp.c"
+     (gdb)
+     -thread-list-ids
+     ^done,
+     thread-ids={thread-id="3",thread-id="2",thread-id="1"},
+     number-of-threads="3"
+     (gdb)
+     -thread-select 3
+     ^done,new-thread-id="3",
+     frame={level="0",func="vprintf",
+     args=[{name="format",value="0x8048e9c \"%*s%c %d %c\\n\""},
+     {name="arg",value="0x2"}],file="vprintf.c",line="31"}
+     (gdb)
+
+
+File: gdb.info,  Node: GDB/MI Ada Tasking Commands,  Next: GDB/MI Program Execution,  Prev: GDB/MI Thread Commands,  Up: GDB/MI
+
+27.11 GDB/MI Ada Tasking Commands
+=================================
+
+The `-ada-task-info' Command
+----------------------------
+
+Synopsis
+........
+
+      -ada-task-info [ TASK-ID ]
+
+   Reports information about either a specific Ada task, if the TASK-ID
+parameter is present, or about all Ada tasks.
+
+GDB Command
+...........
+
+The `info tasks' command prints the same information about all Ada
+tasks (*note Ada Tasks::).
+
+Result
+......
+
+The result is a table of Ada tasks.  The following columns are defined
+for each Ada task:
+
+`current'
+     This field exists only for the current thread.  It has the value
+     `*'.
+
+`id'
+     The identifier that GDB uses to refer to the Ada task.
+
+`task-id'
+     The identifier that the target uses to refer to the Ada task.
+
+`thread-id'
+     The identifier of the thread corresponding to the Ada task.
+
+     This field should always exist, as Ada tasks are always implemented
+     on top of a thread.  But if GDB cannot find this corresponding
+     thread for any reason, the field is omitted.
+
+`parent-id'
+     This field exists only when the task was created by another task.
+     In this case, it provides the ID of the parent task.
+
+`priority'
+     The base priority of the task.
+
+`state'
+     The current state of the task.  For a detailed description of the
+     possible states, see *Note Ada Tasks::.
+
+`name'
+     The name of the task.
+
+
+Example
+.......
+
+     -ada-task-info
+     ^done,tasks={nr_rows="3",nr_cols="8",
+     hdr=[{width="1",alignment="-1",col_name="current",colhdr=""},
+     {width="3",alignment="1",col_name="id",colhdr="ID"},
+     {width="9",alignment="1",col_name="task-id",colhdr="TID"},
+     {width="4",alignment="1",col_name="thread-id",colhdr=""},
+     {width="4",alignment="1",col_name="parent-id",colhdr="P-ID"},
+     {width="3",alignment="1",col_name="priority",colhdr="Pri"},
+     {width="22",alignment="-1",col_name="state",colhdr="State"},
+     {width="1",alignment="2",col_name="name",colhdr="Name"}],
+     body=[{current="*",id="1",task-id="   644010",thread-id="1",priority="48",
+     state="Child Termination Wait",name="main_task"}]}
+     (gdb)
+
+
+File: gdb.info,  Node: GDB/MI Program Execution,  Next: GDB/MI Stack Manipulation,  Prev: GDB/MI Ada Tasking Commands,  Up: GDB/MI
+
+27.12 GDB/MI Program Execution
+==============================
+
+These are the asynchronous commands which generate the out-of-band
+record `*stopped'.  Currently GDB only really executes asynchronously
+with remote targets and this interaction is mimicked in other cases.
+
+The `-exec-continue' Command
+----------------------------
+
+Synopsis
+........
+
+      -exec-continue [--reverse] [--all|--thread-group N]
+
+   Resumes the execution of the inferior program, which will continue
+to execute until it reaches a debugger stop event.  If the `--reverse'
+option is specified, execution resumes in reverse until it reaches a
+stop event.  Stop events may include
+   * breakpoints or watchpoints
+
+   * signals or exceptions
+
+   * the end of the process (or its beginning under `--reverse')
+
+   * the end or beginning of a replay log if one is being used.
+   In all-stop mode (*note All-Stop Mode::), may resume only one
+thread, or all threads, depending on the value of the
+`scheduler-locking' variable.  If `--all' is specified, all threads (in
+all inferiors) will be resumed.  The `--all' option is ignored in
+all-stop mode.  If the `--thread-group' options is specified, then all
+threads in that thread group are resumed.
+
+GDB Command
+...........
+
+The corresponding GDB corresponding is `continue'.
+
+Example
+.......
+
+     -exec-continue
+     ^running
+     (gdb)
+     @Hello world
+     *stopped,reason="breakpoint-hit",disp="keep",bkptno="2",frame={
+     func="foo",args=[],file="hello.c",fullname="/home/foo/bar/hello.c",
+     line="13"}
+     (gdb)
+
+The `-exec-finish' Command
+--------------------------
+
+Synopsis
+........
+
+      -exec-finish [--reverse]
+
+   Resumes the execution of the inferior program until the current
+function is exited.  Displays the results returned by the function.  If
+the `--reverse' option is specified, resumes the reverse execution of
+the inferior program until the point where current function was called.
+
+GDB Command
+...........
+
+The corresponding GDB command is `finish'.
+
+Example
+.......
+
+Function returning `void'.
+
+     -exec-finish
+     ^running
+     (gdb)
+     @hello from foo
+     *stopped,reason="function-finished",frame={func="main",args=[],
+     file="hello.c",fullname="/home/foo/bar/hello.c",line="7"}
+     (gdb)
+
+   Function returning other than `void'.  The name of the internal GDB
+variable storing the result is printed, together with the value itself.
+
+     -exec-finish
+     ^running
+     (gdb)
+     *stopped,reason="function-finished",frame={addr="0x000107b0",func="foo",
+     args=[{name="a",value="1"],{name="b",value="9"}},
+     file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     gdb-result-var="$1",return-value="0"
+     (gdb)
+
+The `-exec-interrupt' Command
+-----------------------------
+
+Synopsis
+........
+
+      -exec-interrupt [--all|--thread-group N]
+
+   Interrupts the background execution of the target.  Note how the
+token associated with the stop message is the one for the execution
+command that has been interrupted.  The token for the interrupt itself
+only appears in the `^done' output.  If the user is trying to interrupt
+a non-running program, an error message will be printed.
+
+   Note that when asynchronous execution is enabled, this command is
+asynchronous just like other execution commands.  That is, first the
+`^done' response will be printed, and the target stop will be reported
+after that using the `*stopped' notification.
+
+   In non-stop mode, only the context thread is interrupted by default.
+All threads (in all inferiors) will be interrupted if the `--all'
+option is specified.  If the `--thread-group' option is specified, all
+threads in that group will be interrupted.
+
+GDB Command
+...........
+
+The corresponding GDB command is `interrupt'.
+
+Example
+.......
+
+     (gdb)
+     111-exec-continue
+     111^running
+
+     (gdb)
+     222-exec-interrupt
+     222^done
+     (gdb)
+     111*stopped,signal-name="SIGINT",signal-meaning="Interrupt",
+     frame={addr="0x00010140",func="foo",args=[],file="try.c",
+     fullname="/home/foo/bar/try.c",line="13"}
+     (gdb)
+
+     (gdb)
+     -exec-interrupt
+     ^error,msg="mi_cmd_exec_interrupt: Inferior not executing."
+     (gdb)
+
+The `-exec-jump' Command
+------------------------
+
+Synopsis
+........
+
+      -exec-jump LOCATION
+
+   Resumes execution of the inferior program at the location specified
+by parameter.  *Note Specify Location::, for a description of the
+different forms of LOCATION.
+
+GDB Command
+...........
+
+The corresponding GDB command is `jump'.
+
+Example
+.......
+
+     -exec-jump foo.c:10
+     *running,thread-id="all"
+     ^running
+
+The `-exec-next' Command
+------------------------
+
+Synopsis
+........
+
+      -exec-next [--reverse]
+
+   Resumes execution of the inferior program, stopping when the
+beginning of the next source line is reached.
+
+   If the `--reverse' option is specified, resumes reverse execution of
+the inferior program, stopping at the beginning of the previous source
+line.  If you issue this command on the first line of a function, it
+will take you back to the caller of that function, to the source line
+where the function was called.
+
+GDB Command
+...........
+
+The corresponding GDB command is `next'.
+
+Example
+.......
+
+     -exec-next
+     ^running
+     (gdb)
+     *stopped,reason="end-stepping-range",line="8",file="hello.c"
+     (gdb)
+
+The `-exec-next-instruction' Command
+------------------------------------
+
+Synopsis
+........
+
+      -exec-next-instruction [--reverse]
+
+   Executes one machine instruction.  If the instruction is a function
+call, continues until the function returns.  If the program stops at an
+instruction in the middle of a source line, the address will be printed
+as well.
+
+   If the `--reverse' option is specified, resumes reverse execution of
+the inferior program, stopping at the previous instruction.  If the
+previously executed instruction was a return from another function, it
+will continue to execute in reverse until the call to that function
+(from the current stack frame) is reached.
+
+GDB Command
+...........
+
+The corresponding GDB command is `nexti'.
+
+Example
+.......
+
+     (gdb)
+     -exec-next-instruction
+     ^running
+
+     (gdb)
+     *stopped,reason="end-stepping-range",
+     addr="0x000100d4",line="5",file="hello.c"
+     (gdb)
+
+The `-exec-return' Command
+--------------------------
+
+Synopsis
+........
+
+      -exec-return
+
+   Makes current function return immediately.  Doesn't execute the
+inferior.  Displays the new current frame.
+
+GDB Command
+...........
+
+The corresponding GDB command is `return'.
+
+Example
+.......
+
+     (gdb)
+     200-break-insert callee4
+     200^done,bkpt={number="1",addr="0x00010734",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="8"}
+     (gdb)
+     000-exec-run
+     000^running
+     (gdb)
+     000*stopped,reason="breakpoint-hit",disp="keep",bkptno="1",
+     frame={func="callee4",args=[],
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="8"}
+     (gdb)
+     205-break-delete
+     205^done
+     (gdb)
+     111-exec-return
+     111^done,frame={level="0",func="callee3",
+     args=[{name="strarg",
+     value="0x11940 \"A string argument.\""}],
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="18"}
+     (gdb)
+
+The `-exec-run' Command
+-----------------------
+
+Synopsis
+........
+
+      -exec-run [--all | --thread-group N]
+
+   Starts execution of the inferior from the beginning.  The inferior
+executes until either a breakpoint is encountered or the program exits.
+In the latter case the output will include an exit code, if the
+program has exited exceptionally.
+
+   When no option is specified, the current inferior is started.  If the
+`--thread-group' option is specified, it should refer to a thread group
+of type `process', and that thread group will be started.  If the
+`--all' option is specified, then all inferiors will be started.
+
+GDB Command
+...........
+
+The corresponding GDB command is `run'.
+
+Examples
+........
+
+     (gdb)
+     -break-insert main
+     ^done,bkpt={number="1",addr="0x0001072c",file="recursive2.c",line="4"}
+     (gdb)
+     -exec-run
+     ^running
+     (gdb)
+     *stopped,reason="breakpoint-hit",disp="keep",bkptno="1",
+     frame={func="main",args=[],file="recursive2.c",
+     fullname="/home/foo/bar/recursive2.c",line="4"}
+     (gdb)
+
+Program exited normally:
+
+     (gdb)
+     -exec-run
+     ^running
+     (gdb)
+     x = 55
+     *stopped,reason="exited-normally"
+     (gdb)
+
+Program exited exceptionally:
+
+     (gdb)
+     -exec-run
+     ^running
+     (gdb)
+     x = 55
+     *stopped,reason="exited",exit-code="01"
+     (gdb)
+
+   Another way the program can terminate is if it receives a signal
+such as `SIGINT'.  In this case, GDB/MI displays this:
+
+     (gdb)
+     *stopped,reason="exited-signalled",signal-name="SIGINT",
+     signal-meaning="Interrupt"
+
+The `-exec-step' Command
+------------------------
+
+Synopsis
+........
+
+      -exec-step [--reverse]
+
+   Resumes execution of the inferior program, stopping when the
+beginning of the next source line is reached, if the next source line
+is not a function call.  If it is, stop at the first instruction of the
+called function.  If the `--reverse' option is specified, resumes
+reverse execution of the inferior program, stopping at the beginning of
+the previously executed source line.
+
+GDB Command
+...........
+
+The corresponding GDB command is `step'.
+
+Example
+.......
+
+Stepping into a function:
+
+     -exec-step
+     ^running
+     (gdb)
+     *stopped,reason="end-stepping-range",
+     frame={func="foo",args=[{name="a",value="10"},
+     {name="b",value="0"}],file="recursive2.c",
+     fullname="/home/foo/bar/recursive2.c",line="11"}
+     (gdb)
+
+   Regular stepping:
+
+     -exec-step
+     ^running
+     (gdb)
+     *stopped,reason="end-stepping-range",line="14",file="recursive2.c"
+     (gdb)
+
+The `-exec-step-instruction' Command
+------------------------------------
+
+Synopsis
+........
+
+      -exec-step-instruction [--reverse]
+
+   Resumes the inferior which executes one machine instruction.  If the
+`--reverse' option is specified, resumes reverse execution of the
+inferior program, stopping at the previously executed instruction.  The
+output, once GDB has stopped, will vary depending on whether we have
+stopped in the middle of a source line or not.  In the former case, the
+address at which the program stopped will be printed as well.
+
+GDB Command
+...........
+
+The corresponding GDB command is `stepi'.
+
+Example
+.......
+
+     (gdb)
+     -exec-step-instruction
+     ^running
+
+     (gdb)
+     *stopped,reason="end-stepping-range",
+     frame={func="foo",args=[],file="try.c",
+     fullname="/home/foo/bar/try.c",line="10"}
+     (gdb)
+     -exec-step-instruction
+     ^running
+
+     (gdb)
+     *stopped,reason="end-stepping-range",
+     frame={addr="0x000100f4",func="foo",args=[],file="try.c",
+     fullname="/home/foo/bar/try.c",line="10"}
+     (gdb)
+
+The `-exec-until' Command
+-------------------------
+
+Synopsis
+........
+
+      -exec-until [ LOCATION ]
+
+   Executes the inferior until the LOCATION specified in the argument
+is reached.  If there is no argument, the inferior executes until a
+source line greater than the current one is reached.  The reason for
+stopping in this case will be `location-reached'.
+
+GDB Command
+...........
+
+The corresponding GDB command is `until'.
+
+Example
+.......
+
+     (gdb)
+     -exec-until recursive2.c:6
+     ^running
+     (gdb)
+     x = 55
+     *stopped,reason="location-reached",frame={func="main",args=[],
+     file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="6"}
+     (gdb)
+
+
+File: gdb.info,  Node: GDB/MI Stack Manipulation,  Next: GDB/MI Variable Objects,  Prev: GDB/MI Program Execution,  Up: GDB/MI
+
+27.13 GDB/MI Stack Manipulation Commands
+========================================
+
+The `-stack-info-frame' Command
+-------------------------------
+
+Synopsis
+........
+
+      -stack-info-frame
+
+   Get info on the selected frame.
+
+GDB Command
+...........
+
+The corresponding GDB command is `info frame' or `frame' (without
+arguments).
+
+Example
+.......
+
+     (gdb)
+     -stack-info-frame
+     ^done,frame={level="1",addr="0x0001076c",func="callee3",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="17"}
+     (gdb)
+
+The `-stack-info-depth' Command
+-------------------------------
+
+Synopsis
+........
+
+      -stack-info-depth [ MAX-DEPTH ]
+
+   Return the depth of the stack.  If the integer argument MAX-DEPTH is
+specified, do not count beyond MAX-DEPTH frames.
+
+GDB Command
+...........
+
+There's no equivalent GDB command.
+
+Example
+.......
+
+For a stack with frame levels 0 through 11:
+
+     (gdb)
+     -stack-info-depth
+     ^done,depth="12"
+     (gdb)
+     -stack-info-depth 4
+     ^done,depth="4"
+     (gdb)
+     -stack-info-depth 12
+     ^done,depth="12"
+     (gdb)
+     -stack-info-depth 11
+     ^done,depth="11"
+     (gdb)
+     -stack-info-depth 13
+     ^done,depth="12"
+     (gdb)
+
+The `-stack-list-arguments' Command
+-----------------------------------
+
+Synopsis
+........
+
+      -stack-list-arguments PRINT-VALUES
+         [ LOW-FRAME HIGH-FRAME ]
+
+   Display a list of the arguments for the frames between LOW-FRAME and
+HIGH-FRAME (inclusive).  If LOW-FRAME and HIGH-FRAME are not provided,
+list the arguments for the whole call stack.  If the two arguments are
+equal, show the single frame at the corresponding level.  It is an
+error if LOW-FRAME is larger than the actual number of frames.  On the
+other hand, HIGH-FRAME may be larger than the actual number of frames,
+in which case only existing frames will be returned.
+
+   If PRINT-VALUES is 0 or `--no-values', print only the names of the
+variables; if it is 1 or `--all-values', print also their values; and
+if it is 2 or `--simple-values', print the name, type and value for
+simple data types, and the name and type for arrays, structures and
+unions.
+
+   Use of this command to obtain arguments in a single frame is
+deprecated in favor of the `-stack-list-variables' command.
+
+GDB Command
+...........
+
+GDB does not have an equivalent command.  `gdbtk' has a `gdb_get_args'
+command which partially overlaps with the functionality of
+`-stack-list-arguments'.
+
+Example
+.......
+
+     (gdb)
+     -stack-list-frames
+     ^done,
+     stack=[
+     frame={level="0",addr="0x00010734",func="callee4",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="8"},
+     frame={level="1",addr="0x0001076c",func="callee3",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="17"},
+     frame={level="2",addr="0x0001078c",func="callee2",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="22"},
+     frame={level="3",addr="0x000107b4",func="callee1",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="27"},
+     frame={level="4",addr="0x000107e0",func="main",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="32"}]
+     (gdb)
+     -stack-list-arguments 0
+     ^done,
+     stack-args=[
+     frame={level="0",args=[]},
+     frame={level="1",args=[name="strarg"]},
+     frame={level="2",args=[name="intarg",name="strarg"]},
+     frame={level="3",args=[name="intarg",name="strarg",name="fltarg"]},
+     frame={level="4",args=[]}]
+     (gdb)
+     -stack-list-arguments 1
+     ^done,
+     stack-args=[
+     frame={level="0",args=[]},
+     frame={level="1",
+      args=[{name="strarg",value="0x11940 \"A string argument.\""}]},
+     frame={level="2",args=[
+     {name="intarg",value="2"},
+     {name="strarg",value="0x11940 \"A string argument.\""}]},
+     {frame={level="3",args=[
+     {name="intarg",value="2"},
+     {name="strarg",value="0x11940 \"A string argument.\""},
+     {name="fltarg",value="3.5"}]},
+     frame={level="4",args=[]}]
+     (gdb)
+     -stack-list-arguments 0 2 2
+     ^done,stack-args=[frame={level="2",args=[name="intarg",name="strarg"]}]
+     (gdb)
+     -stack-list-arguments 1 2 2
+     ^done,stack-args=[frame={level="2",
+     args=[{name="intarg",value="2"},
+     {name="strarg",value="0x11940 \"A string argument.\""}]}]
+     (gdb)
+
+The `-stack-list-frames' Command
+--------------------------------
+
+Synopsis
+........
+
+      -stack-list-frames [ LOW-FRAME HIGH-FRAME ]
+
+   List the frames currently on the stack.  For each frame it displays
+the following info:
+
+`LEVEL'
+     The frame number, 0 being the topmost frame, i.e., the innermost
+     function.
+
+`ADDR'
+     The `$pc' value for that frame.
+
+`FUNC'
+     Function name.
+
+`FILE'
+     File name of the source file where the function lives.
+
+`FULLNAME'
+     The full file name of the source file where the function lives.
+
+`LINE'
+     Line number corresponding to the `$pc'.
+
+`FROM'
+     The shared library where this function is defined.  This is only
+     given if the frame's function is not known.
+
+   If invoked without arguments, this command prints a backtrace for the
+whole stack.  If given two integer arguments, it shows the frames whose
+levels are between the two arguments (inclusive).  If the two arguments
+are equal, it shows the single frame at the corresponding level.  It is
+an error if LOW-FRAME is larger than the actual number of frames.  On
+the other hand, HIGH-FRAME may be larger than the actual number of
+frames, in which case only existing frames will be returned.
+
+GDB Command
+...........
+
+The corresponding GDB commands are `backtrace' and `where'.
+
+Example
+.......
+
+Full stack backtrace:
+
+     (gdb)
+     -stack-list-frames
+     ^done,stack=
+     [frame={level="0",addr="0x0001076c",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="11"},
+     frame={level="1",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="2",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="3",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="4",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="5",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="6",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="7",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="8",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="9",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="10",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="11",addr="0x00010738",func="main",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="4"}]
+     (gdb)
+
+   Show frames between LOW_FRAME and HIGH_FRAME:
+
+     (gdb)
+     -stack-list-frames 3 5
+     ^done,stack=
+     [frame={level="3",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="4",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="5",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"}]
+     (gdb)
+
+   Show a single frame:
+
+     (gdb)
+     -stack-list-frames 3 3
+     ^done,stack=
+     [frame={level="3",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"}]
+     (gdb)
+
+The `-stack-list-locals' Command
+--------------------------------
+
+Synopsis
+........
+
+      -stack-list-locals PRINT-VALUES
+
+   Display the local variable names for the selected frame.  If
+PRINT-VALUES is 0 or `--no-values', print only the names of the
+variables; if it is 1 or `--all-values', print also their values; and
+if it is 2 or `--simple-values', print the name, type and value for
+simple data types, and the name and type for arrays, structures and
+unions.  In this last case, a frontend can immediately display the
+value of simple data types and create variable objects for other data
+types when the user wishes to explore their values in more detail.
+
+   This command is deprecated in favor of the `-stack-list-variables'
+command.
+
+GDB Command
+...........
+
+`info locals' in GDB, `gdb_get_locals' in `gdbtk'.
+
+Example
+.......
+
+     (gdb)
+     -stack-list-locals 0
+     ^done,locals=[name="A",name="B",name="C"]
+     (gdb)
+     -stack-list-locals --all-values
+     ^done,locals=[{name="A",value="1"},{name="B",value="2"},
+       {name="C",value="{1, 2, 3}"}]
+     -stack-list-locals --simple-values
+     ^done,locals=[{name="A",type="int",value="1"},
+       {name="B",type="int",value="2"},{name="C",type="int [3]"}]
+     (gdb)
+
+The `-stack-list-variables' Command
+-----------------------------------
+
+Synopsis
+........
+
+      -stack-list-variables PRINT-VALUES
+
+   Display the names of local variables and function arguments for the
+selected frame.  If PRINT-VALUES is 0 or `--no-values', print only the
+names of the variables; if it is 1 or `--all-values', print also their
+values; and if it is 2 or `--simple-values', print the name, type and
+value for simple data types, and the name and type for arrays,
+structures and unions.
+
+Example
+.......
+
+     (gdb)
+     -stack-list-variables --thread 1 --frame 0 --all-values
+     ^done,variables=[{name="x",value="11"},{name="s",value="{a = 1, b = 2}"}]
+     (gdb)
+
+The `-stack-select-frame' Command
+---------------------------------
+
+Synopsis
+........
+
+      -stack-select-frame FRAMENUM
+
+   Change the selected frame.  Select a different frame FRAMENUM on the
+stack.
+
+   This command in deprecated in favor of passing the `--frame' option
+to every command.
+
+GDB Command
+...........
+
+The corresponding GDB commands are `frame', `up', `down',
+`select-frame', `up-silent', and `down-silent'.
+
+Example
+.......
+
+     (gdb)
+     -stack-select-frame 2
+     ^done
+     (gdb)
+
+
+File: gdb.info,  Node: GDB/MI Variable Objects,  Next: GDB/MI Data Manipulation,  Prev: GDB/MI Stack Manipulation,  Up: GDB/MI
+
+27.14 GDB/MI Variable Objects
+=============================
+
+Introduction to Variable Objects
+--------------------------------
+
+Variable objects are "object-oriented" MI interface for examining and
+changing values of expressions.  Unlike some other MI interfaces that
+work with expressions, variable objects are specifically designed for
+simple and efficient presentation in the frontend.  A variable object
+is identified by string name.  When a variable object is created, the
+frontend specifies the expression for that variable object.  The
+expression can be a simple variable, or it can be an arbitrary complex
+expression, and can even involve CPU registers.  After creating a
+variable object, the frontend can invoke other variable object
+operations--for example to obtain or change the value of a variable
+object, or to change display format.
+
+   Variable objects have hierarchical tree structure.  Any variable
+object that corresponds to a composite type, such as structure in C, has
+a number of child variable objects, for example corresponding to each
+element of a structure.  A child variable object can itself have
+children, recursively.  Recursion ends when we reach leaf variable
+objects, which always have built-in types.  Child variable objects are
+created only by explicit request, so if a frontend is not interested in
+the children of a particular variable object, no child will be created.
+
+   For a leaf variable object it is possible to obtain its value as a
+string, or set the value from a string.  String value can be also
+obtained for a non-leaf variable object, but it's generally a string
+that only indicates the type of the object, and does not list its
+contents.  Assignment to a non-leaf variable object is not allowed.
+
+   A frontend does not need to read the values of all variable objects
+each time the program stops.  Instead, MI provides an update command
+that lists all variable objects whose values has changed since the last
+update operation.  This considerably reduces the amount of data that
+must be transferred to the frontend.  As noted above, children variable
+objects are created on demand, and only leaf variable objects have a
+real value.  As result, gdb will read target memory only for leaf
+variables that frontend has created.
+
+   The automatic update is not always desirable.  For example, a
+frontend might want to keep a value of some expression for future
+reference, and never update it.  For another example,  fetching memory
+is relatively slow for embedded targets, so a frontend might want to
+disable automatic update for the variables that are either not visible
+on the screen, or "closed".  This is possible using so called "frozen
+variable objects".  Such variable objects are never implicitly updated.
+
+   Variable objects can be either "fixed" or "floating".  For the fixed
+variable object, the expression is parsed when the variable object is
+created, including associating identifiers to specific variables.  The
+meaning of expression never changes.  For a floating variable object
+the values of variables whose names appear in the expressions are
+re-evaluated every time in the context of the current frame.  Consider
+this example:
+
+     void do_work(...)
+     {
+             struct work_state state;
+
+             if (...)
+                do_work(...);
+     }
+
+   If a fixed variable object for the `state' variable is created in
+this function, and we enter the recursive call, the variable object
+will report the value of `state' in the top-level `do_work' invocation.
+On the other hand, a floating variable object will report the value of
+`state' in the current frame.
+
+   If an expression specified when creating a fixed variable object
+refers to a local variable, the variable object becomes bound to the
+thread and frame in which the variable object is created.  When such
+variable object is updated, GDB makes sure that the thread/frame
+combination the variable object is bound to still exists, and
+re-evaluates the variable object in context of that thread/frame.
+
+   The following is the complete set of GDB/MI operations defined to
+access this functionality:
+
+*Operation*                   *Description*
+`-enable-pretty-printing'     enable Python-based pretty-printing
+`-var-create'                 create a variable object
+`-var-delete'                 delete the variable object and/or its
+                              children
+`-var-set-format'             set the display format of this variable
+`-var-show-format'            show the display format of this variable
+`-var-info-num-children'      tells how many children this object has
+`-var-list-children'          return a list of the object's children
+`-var-info-type'              show the type of this variable object
+`-var-info-expression'        print parent-relative expression that this
+                              variable object represents
+`-var-info-path-expression'   print full expression that this variable
+                              object represents
+`-var-show-attributes'        is this variable editable? does it exist
+                              here?
+`-var-evaluate-expression'    get the value of this variable
+`-var-assign'                 set the value of this variable
+`-var-update'                 update the variable and its children
+`-var-set-frozen'             set frozeness attribute
+`-var-set-update-range'       set range of children to display on update
+
+   In the next subsection we describe each operation in detail and
+suggest how it can be used.
+
+Description And Use of Operations on Variable Objects
+-----------------------------------------------------
+
+The `-enable-pretty-printing' Command
+-------------------------------------
+
+     -enable-pretty-printing
+
+   GDB allows Python-based visualizers to affect the output of the MI
+variable object commands.  However, because there was no way to
+implement this in a fully backward-compatible way, a front end must
+request that this functionality be enabled.
+
+   Once enabled, this feature cannot be disabled.
+
+   Note that if Python support has not been compiled into GDB, this
+command will still succeed (and do nothing).
+
+   This feature is currently (as of GDB 7.0) experimental, and may work
+differently in future versions of GDB.
+
+The `-var-create' Command
+-------------------------
+
+Synopsis
+........
+
+      -var-create {NAME | "-"}
+         {FRAME-ADDR | "*" | "@"} EXPRESSION
+
+   This operation creates a variable object, which allows the
+monitoring of a variable, the result of an expression, a memory cell or
+a CPU register.
+
+   The NAME parameter is the string by which the object can be
+referenced.  It must be unique.  If `-' is specified, the varobj system
+will generate a string "varNNNNNN" automatically.  It will be unique
+provided that one does not specify NAME of that format.  The command
+fails if a duplicate name is found.
+
+   The frame under which the expression should be evaluated can be
+specified by FRAME-ADDR.  A `*' indicates that the current frame should
+be used.  A `@' indicates that a floating variable object must be
+created.
+
+   EXPRESSION is any expression valid on the current language set (must
+not begin with a `*'), or one of the following:
+
+   * `*ADDR', where ADDR is the address of a memory cell
+
+   * `*ADDR-ADDR' -- a memory address range (TBD)
+
+   * `$REGNAME' -- a CPU register name
+
+   A varobj's contents may be provided by a Python-based
+pretty-printer.  In this case the varobj is known as a "dynamic
+varobj".  Dynamic varobjs have slightly different semantics in some
+cases.  If the `-enable-pretty-printing' command is not sent, then GDB
+will never create a dynamic varobj.  This ensures backward
+compatibility for existing clients.
+
+Result
+......
+
+This operation returns attributes of the newly-created varobj.  These
+are:
+
+`name'
+     The name of the varobj.
+
+`numchild'
+     The number of children of the varobj.  This number is not
+     necessarily reliable for a dynamic varobj.  Instead, you must
+     examine the `has_more' attribute.
+
+`value'
+     The varobj's scalar value.  For a varobj whose type is some sort of
+     aggregate (e.g., a `struct'), or for a dynamic varobj, this value
+     will not be interesting.
+
+`type'
+     The varobj's type.  This is a string representation of the type, as
+     would be printed by the GDB CLI.  If `print object' (*note set
+     print object: Print Settings.) is set to `on', the _actual_
+     (derived) type of the object is shown rather than the _declared_
+     one.
+
+`thread-id'
+     If a variable object is bound to a specific thread, then this is
+     the thread's identifier.
+
+`has_more'
+     For a dynamic varobj, this indicates whether there appear to be any
+     children available.  For a non-dynamic varobj, this will be 0.
+
+`dynamic'
+     This attribute will be present and have the value `1' if the
+     varobj is a dynamic varobj.  If the varobj is not a dynamic varobj,
+     then this attribute will not be present.
+
+`displayhint'
+     A dynamic varobj can supply a display hint to the front end.  The
+     value comes directly from the Python pretty-printer object's
+     `display_hint' method.  *Note Pretty Printing API::.
+
+   Typical output will look like this:
+
+      name="NAME",numchild="N",type="TYPE",thread-id="M",
+       has_more="HAS_MORE"
+
+The `-var-delete' Command
+-------------------------
+
+Synopsis
+........
+
+      -var-delete [ -c ] NAME
+
+   Deletes a previously created variable object and all of its children.
+With the `-c' option, just deletes the children.
+
+   Returns an error if the object NAME is not found.
+
+The `-var-set-format' Command
+-----------------------------
+
+Synopsis
+........
+
+      -var-set-format NAME FORMAT-SPEC
+
+   Sets the output format for the value of the object NAME to be
+FORMAT-SPEC.
+
+   The syntax for the FORMAT-SPEC is as follows:
+
+      FORMAT-SPEC ==>
+      {binary | decimal | hexadecimal | octal | natural}
+
+   The natural format is the default format choosen automatically based
+on the variable type (like decimal for an `int', hex for pointers,
+etc.).
+
+   For a variable with children, the format is set only on the variable
+itself, and the children are not affected.
+
+The `-var-show-format' Command
+------------------------------
+
+Synopsis
+........
+
+      -var-show-format NAME
+
+   Returns the format used to display the value of the object NAME.
+
+      FORMAT ==>
+      FORMAT-SPEC
+
+The `-var-info-num-children' Command
+------------------------------------
+
+Synopsis
+........
+
+      -var-info-num-children NAME
+
+   Returns the number of children of a variable object NAME:
+
+      numchild=N
+
+   Note that this number is not completely reliable for a dynamic
+varobj.  It will return the current number of children, but more
+children may be available.
+
+The `-var-list-children' Command
+--------------------------------
+
+Synopsis
+........
+
+      -var-list-children [PRINT-VALUES] NAME [FROM TO]
+
+   Return a list of the children of the specified variable object and
+create variable objects for them, if they do not already exist.  With a
+single argument or if PRINT-VALUES has a value of 0 or `--no-values',
+print only the names of the variables; if PRINT-VALUES is 1 or
+`--all-values', also print their values; and if it is 2 or
+`--simple-values' print the name and value for simple data types and
+just the name for arrays, structures and unions.
+
+   FROM and TO, if specified, indicate the range of children to report.
+If FROM or TO is less than zero, the range is reset and all children
+will be reported.  Otherwise, children starting at FROM (zero-based)
+and up to and excluding TO will be reported.
+
+   If a child range is requested, it will only affect the current call
+to `-var-list-children', but not future calls to `-var-update'.  For
+this, you must instead use `-var-set-update-range'.  The intent of this
+approach is to enable a front end to implement any update approach it
+likes; for example, scrolling a view may cause the front end to request
+more children with `-var-list-children', and then the front end could
+call `-var-set-update-range' with a different range to ensure that
+future updates are restricted to just the visible items.
+
+   For each child the following results are returned:
+
+NAME
+     Name of the variable object created for this child.
+
+EXP
+     The expression to be shown to the user by the front end to
+     designate this child.  For example this may be the name of a
+     structure member.
+
+     For a dynamic varobj, this value cannot be used to form an
+     expression.  There is no way to do this at all with a dynamic
+     varobj.
+
+     For C/C++ structures there are several pseudo children returned to
+     designate access qualifiers.  For these pseudo children EXP is
+     `public', `private', or `protected'.  In this case the type and
+     value are not present.
+
+     A dynamic varobj will not report the access qualifying
+     pseudo-children, regardless of the language.  This information is
+     not available at all with a dynamic varobj.
+
+NUMCHILD
+     Number of children this child has.  For a dynamic varobj, this
+     will be 0.
+
+TYPE
+     The type of the child.  If `print object' (*note set print object:
+     Print Settings.) is set to `on', the _actual_ (derived) type of
+     the object is shown rather than the _declared_ one.
+
+VALUE
+     If values were requested, this is the value.
+
+THREAD-ID
+     If this variable object is associated with a thread, this is the
+     thread id.  Otherwise this result is not present.
+
+FROZEN
+     If the variable object is frozen, this variable will be present
+     with a value of 1.
+
+   The result may have its own attributes:
+
+`displayhint'
+     A dynamic varobj can supply a display hint to the front end.  The
+     value comes directly from the Python pretty-printer object's
+     `display_hint' method.  *Note Pretty Printing API::.
+
+`has_more'
+     This is an integer attribute which is nonzero if there are children
+     remaining after the end of the selected range.
+
+Example
+.......
+
+     (gdb)
+      -var-list-children n
+      ^done,numchild=N,children=[child={name=NAME,exp=EXP,
+      numchild=N,type=TYPE},(repeats N times)]
+     (gdb)
+      -var-list-children --all-values n
+      ^done,numchild=N,children=[child={name=NAME,exp=EXP,
+      numchild=N,value=VALUE,type=TYPE},(repeats N times)]
+
+The `-var-info-type' Command
+----------------------------
+
+Synopsis
+........
+
+      -var-info-type NAME
+
+   Returns the type of the specified variable NAME.  The type is
+returned as a string in the same format as it is output by the GDB CLI:
+
+      type=TYPENAME
+
+The `-var-info-expression' Command
+----------------------------------
+
+Synopsis
+........
+
+      -var-info-expression NAME
+
+   Returns a string that is suitable for presenting this variable
+object in user interface.  The string is generally not valid expression
+in the current language, and cannot be evaluated.
+
+   For example, if `a' is an array, and variable object `A' was created
+for `a', then we'll get this output:
+
+     (gdb) -var-info-expression A.1
+     ^done,lang="C",exp="1"
+
+Here, the values of `lang' can be `{"C" | "C++" | "Java"}'.
+
+   Note that the output of the `-var-list-children' command also
+includes those expressions, so the `-var-info-expression' command is of
+limited use.
+
+The `-var-info-path-expression' Command
+---------------------------------------
+
+Synopsis
+........
+
+      -var-info-path-expression NAME
+
+   Returns an expression that can be evaluated in the current context
+and will yield the same value that a variable object has.  Compare this
+with the `-var-info-expression' command, which result can be used only
+for UI presentation.  Typical use of the `-var-info-path-expression'
+command is creating a watchpoint from a variable object.
+
+   This command is currently not valid for children of a dynamic varobj,
+and will give an error when invoked on one.
+
+   For example, suppose `C' is a C++ class, derived from class `Base',
+and that the `Base' class has a member called `m_size'.  Assume a
+variable `c' is has the type of `C' and a variable object `C' was
+created for variable `c'.  Then, we'll get this output:
+     (gdb) -var-info-path-expression C.Base.public.m_size
+     ^done,path_expr=((Base)c).m_size)
+
+The `-var-show-attributes' Command
+----------------------------------
+
+Synopsis
+........
+
+      -var-show-attributes NAME
+
+   List attributes of the specified variable object NAME:
+
+      status=ATTR [ ( ,ATTR )* ]
+
+where ATTR is `{ { editable | noneditable } | TBD }'.
+
+The `-var-evaluate-expression' Command
+--------------------------------------
+
+Synopsis
+........
+
+      -var-evaluate-expression [-f FORMAT-SPEC] NAME
+
+   Evaluates the expression that is represented by the specified
+variable object and returns its value as a string.  The format of the
+string can be specified with the `-f' option.  The possible values of
+this option are the same as for `-var-set-format' (*note
+-var-set-format::).  If the `-f' option is not specified, the current
+display format will be used.  The current display format can be changed
+using the `-var-set-format' command.
+
+      value=VALUE
+
+   Note that one must invoke `-var-list-children' for a variable before
+the value of a child variable can be evaluated.
+
+The `-var-assign' Command
+-------------------------
+
+Synopsis
+........
+
+      -var-assign NAME EXPRESSION
+
+   Assigns the value of EXPRESSION to the variable object specified by
+NAME.  The object must be `editable'.  If the variable's value is
+altered by the assign, the variable will show up in any subsequent
+`-var-update' list.
+
+Example
+.......
+
+     (gdb)
+     -var-assign var1 3
+     ^done,value="3"
+     (gdb)
+     -var-update *
+     ^done,changelist=[{name="var1",in_scope="true",type_changed="false"}]
+     (gdb)
+
+The `-var-update' Command
+-------------------------
+
+Synopsis
+........
+
+      -var-update [PRINT-VALUES] {NAME | "*"}
+
+   Reevaluate the expressions corresponding to the variable object NAME
+and all its direct and indirect children, and return the list of
+variable objects whose values have changed; NAME must be a root
+variable object.  Here, "changed" means that the result of
+`-var-evaluate-expression' before and after the `-var-update' is
+different.  If `*' is used as the variable object names, all existing
+variable objects are updated, except for frozen ones (*note
+-var-set-frozen::).  The option PRINT-VALUES determines whether both
+names and values, or just names are printed.  The possible values of
+this option are the same as for `-var-list-children' (*note
+-var-list-children::).  It is recommended to use the `--all-values'
+option, to reduce the number of MI commands needed on each program stop.
+
+   With the `*' parameter, if a variable object is bound to a currently
+running thread, it will not be updated, without any diagnostic.
+
+   If `-var-set-update-range' was previously used on a varobj, then
+only the selected range of children will be reported.
+
+   `-var-update' reports all the changed varobjs in a tuple named
+`changelist'.
+
+   Each item in the change list is itself a tuple holding:
+
+`name'
+     The name of the varobj.
+
+`value'
+     If values were requested for this update, then this field will be
+     present and will hold the value of the varobj.
+
+`in_scope'
+     This field is a string which may take one of three values:
+
+    `"true"'
+          The variable object's current value is valid.
+
+    `"false"'
+          The variable object does not currently hold a valid value but
+          it may hold one in the future if its associated expression
+          comes back into scope.
+
+    `"invalid"'
+          The variable object no longer holds a valid value.  This can
+          occur when the executable file being debugged has changed,
+          either through recompilation or by using the GDB `file'
+          command.  The front end should normally choose to delete
+          these variable objects.
+
+     In the future new values may be added to this list so the front
+     should be prepared for this possibility.  *Note GDB/MI Development
+     and Front Ends: GDB/MI Development and Front Ends.
+
+`type_changed'
+     This is only present if the varobj is still valid.  If the type
+     changed, then this will be the string `true'; otherwise it will be
+     `false'.
+
+     When a varobj's type changes, its children are also likely to have
+     become incorrect.  Therefore, the varobj's children are
+     automatically deleted when this attribute is `true'.  Also, the
+     varobj's update range, when set using the `-var-set-update-range'
+     command, is unset.
+
+`new_type'
+     If the varobj's type changed, then this field will be present and
+     will hold the new type.
+
+`new_num_children'
+     For a dynamic varobj, if the number of children changed, or if the
+     type changed, this will be the new number of children.
+
+     The `numchild' field in other varobj responses is generally not
+     valid for a dynamic varobj - it will show the number of children
+     that GDB knows about, but because dynamic varobjs lazily
+     instantiate their children, this will not reflect the number of
+     children which may be available.
+
+     The `new_num_children' attribute only reports changes to the
+     number of children known by GDB.  This is the only way to detect
+     whether an update has removed children (which necessarily can only
+     happen at the end of the update range).
+
+`displayhint'
+     The display hint, if any.
+
+`has_more'
+     This is an integer value, which will be 1 if there are more
+     children available outside the varobj's update range.
+
+`dynamic'
+     This attribute will be present and have the value `1' if the
+     varobj is a dynamic varobj.  If the varobj is not a dynamic varobj,
+     then this attribute will not be present.
+
+`new_children'
+     If new children were added to a dynamic varobj within the selected
+     update range (as set by `-var-set-update-range'), then they will
+     be listed in this attribute.
+
+Example
+.......
+
+     (gdb)
+     -var-assign var1 3
+     ^done,value="3"
+     (gdb)
+     -var-update --all-values var1
+     ^done,changelist=[{name="var1",value="3",in_scope="true",
+     type_changed="false"}]
+     (gdb)
+
+The `-var-set-frozen' Command
+-----------------------------
+
+Synopsis
+........
+
+      -var-set-frozen NAME FLAG
+
+   Set the frozenness flag on the variable object NAME.  The FLAG
+parameter should be either `1' to make the variable frozen or `0' to
+make it unfrozen.  If a variable object is frozen, then neither itself,
+nor any of its children, are implicitly updated by `-var-update' of a
+parent variable or by `-var-update *'.  Only `-var-update' of the
+variable itself will update its value and values of its children.
+After a variable object is unfrozen, it is implicitly updated by all
+subsequent `-var-update' operations.  Unfreezing a variable does not
+update it, only subsequent `-var-update' does.
+
+Example
+.......
+
+     (gdb)
+     -var-set-frozen V 1
+     ^done
+     (gdb)
+
+The `-var-set-update-range' command
+-----------------------------------
+
+Synopsis
+........
+
+      -var-set-update-range NAME FROM TO
+
+   Set the range of children to be returned by future invocations of
+`-var-update'.
+
+   FROM and TO indicate the range of children to report.  If FROM or TO
+is less than zero, the range is reset and all children will be
+reported.  Otherwise, children starting at FROM (zero-based) and up to
+and excluding TO will be reported.
+
+Example
+.......
+
+     (gdb)
+     -var-set-update-range V 1 2
+     ^done
+
+The `-var-set-visualizer' command
+---------------------------------
+
+Synopsis
+........
+
+      -var-set-visualizer NAME VISUALIZER
+
+   Set a visualizer for the variable object NAME.
+
+   VISUALIZER is the visualizer to use.  The special value `None' means
+to disable any visualizer in use.
+
+   If not `None', VISUALIZER must be a Python expression.  This
+expression must evaluate to a callable object which accepts a single
+argument.  GDB will call this object with the value of the varobj NAME
+as an argument (this is done so that the same Python pretty-printing
+code can be used for both the CLI and MI).  When called, this object
+must return an object which conforms to the pretty-printing interface
+(*note Pretty Printing API::).
+
+   The pre-defined function `gdb.default_visualizer' may be used to
+select a visualizer by following the built-in process (*note Selecting
+Pretty-Printers::).  This is done automatically when a varobj is
+created, and so ordinarily is not needed.
+
+   This feature is only available if Python support is enabled.  The MI
+command `-list-features' (*note GDB/MI Miscellaneous Commands::) can be
+used to check this.
+
+Example
+.......
+
+Resetting the visualizer:
+
+     (gdb)
+     -var-set-visualizer V None
+     ^done
+
+   Reselecting the default (type-based) visualizer:
+
+     (gdb)
+     -var-set-visualizer V gdb.default_visualizer
+     ^done
+
+   Suppose `SomeClass' is a visualizer class.  A lambda expression can
+be used to instantiate this class for a varobj:
+
+     (gdb)
+     -var-set-visualizer V "lambda val: SomeClass()"
+     ^done
+
+
+File: gdb.info,  Node: GDB/MI Data Manipulation,  Next: GDB/MI Tracepoint Commands,  Prev: GDB/MI Variable Objects,  Up: GDB/MI
+
+27.15 GDB/MI Data Manipulation
+==============================
+
+This section describes the GDB/MI commands that manipulate data:
+examine memory and registers, evaluate expressions, etc.
+
+The `-data-disassemble' Command
+-------------------------------
+
+Synopsis
+........
+
+      -data-disassemble
+         [ -s START-ADDR -e END-ADDR ]
+       | [ -f FILENAME -l LINENUM [ -n LINES ] ]
+       -- MODE
+
+Where:
+
+`START-ADDR'
+     is the beginning address (or `$pc')
+
+`END-ADDR'
+     is the end address
+
+`FILENAME'
+     is the name of the file to disassemble
+
+`LINENUM'
+     is the line number to disassemble around
+
+`LINES'
+     is the number of disassembly lines to be produced.  If it is -1,
+     the whole function will be disassembled, in case no END-ADDR is
+     specified.  If END-ADDR is specified as a non-zero value, and
+     LINES is lower than the number of disassembly lines between
+     START-ADDR and END-ADDR, only LINES lines are displayed; if LINES
+     is higher than the number of lines between START-ADDR and
+     END-ADDR, only the lines up to END-ADDR are displayed.
+
+`MODE'
+     is either 0 (meaning only disassembly), 1 (meaning mixed source and
+     disassembly), 2 (meaning disassembly with raw opcodes), or 3
+     (meaning mixed source and disassembly with raw opcodes).
+
+Result
+......
+
+The output for each instruction is composed of four fields:
+
+   * Address
+
+   * Func-name
+
+   * Offset
+
+   * Instruction
+
+   Note that whatever included in the instruction field, is not
+manipulated directly by GDB/MI, i.e., it is not possible to adjust its
+format.
+
+GDB Command
+...........
+
+There's no direct mapping from this command to the CLI.
+
+Example
+.......
+
+Disassemble from the current value of `$pc' to `$pc + 20':
+
+     (gdb)
+     -data-disassemble -s $pc -e "$pc + 20" -- 0
+     ^done,
+     asm_insns=[
+     {address="0x000107c0",func-name="main",offset="4",
+     inst="mov  2, %o0"},
+     {address="0x000107c4",func-name="main",offset="8",
+     inst="sethi  %hi(0x11800), %o2"},
+     {address="0x000107c8",func-name="main",offset="12",
+     inst="or  %o2, 0x140, %o1\t! 0x11940 <_lib_version+8>"},
+     {address="0x000107cc",func-name="main",offset="16",
+     inst="sethi  %hi(0x11800), %o2"},
+     {address="0x000107d0",func-name="main",offset="20",
+     inst="or  %o2, 0x168, %o4\t! 0x11968 <_lib_version+48>"}]
+     (gdb)
+
+   Disassemble the whole `main' function.  Line 32 is part of `main'.
+
+     -data-disassemble -f basics.c -l 32 -- 0
+     ^done,asm_insns=[
+     {address="0x000107bc",func-name="main",offset="0",
+     inst="save  %sp, -112, %sp"},
+     {address="0x000107c0",func-name="main",offset="4",
+     inst="mov   2, %o0"},
+     {address="0x000107c4",func-name="main",offset="8",
+     inst="sethi %hi(0x11800), %o2"},
+     [...]
+     {address="0x0001081c",func-name="main",offset="96",inst="ret "},
+     {address="0x00010820",func-name="main",offset="100",inst="restore "}]
+     (gdb)
+
+   Disassemble 3 instructions from the start of `main':
+
+     (gdb)
+     -data-disassemble -f basics.c -l 32 -n 3 -- 0
+     ^done,asm_insns=[
+     {address="0x000107bc",func-name="main",offset="0",
+     inst="save  %sp, -112, %sp"},
+     {address="0x000107c0",func-name="main",offset="4",
+     inst="mov  2, %o0"},
+     {address="0x000107c4",func-name="main",offset="8",
+     inst="sethi  %hi(0x11800), %o2"}]
+     (gdb)
+
+   Disassemble 3 instructions from the start of `main' in mixed mode:
+
+     (gdb)
+     -data-disassemble -f basics.c -l 32 -n 3 -- 1
+     ^done,asm_insns=[
+     src_and_asm_line={line="31",
+     file="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb/ \
+       testsuite/gdb.mi/basics.c",line_asm_insn=[
+     {address="0x000107bc",func-name="main",offset="0",
+     inst="save  %sp, -112, %sp"}]},
+     src_and_asm_line={line="32",
+     file="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb/ \
+       testsuite/gdb.mi/basics.c",line_asm_insn=[
+     {address="0x000107c0",func-name="main",offset="4",
+     inst="mov  2, %o0"},
+     {address="0x000107c4",func-name="main",offset="8",
+     inst="sethi  %hi(0x11800), %o2"}]}]
+     (gdb)
+
+The `-data-evaluate-expression' Command
+---------------------------------------
+
+Synopsis
+........
+
+      -data-evaluate-expression EXPR
+
+   Evaluate EXPR as an expression.  The expression could contain an
+inferior function call.  The function call will execute synchronously.
+If the expression contains spaces, it must be enclosed in double quotes.
+
+GDB Command
+...........
+
+The corresponding GDB commands are `print', `output', and `call'.  In
+`gdbtk' only, there's a corresponding `gdb_eval' command.
+
+Example
+.......
+
+In the following example, the numbers that precede the commands are the
+"tokens" described in *Note GDB/MI Command Syntax: GDB/MI Command
+Syntax.  Notice how GDB/MI returns the same tokens in its output.
+
+     211-data-evaluate-expression A
+     211^done,value="1"
+     (gdb)
+     311-data-evaluate-expression &A
+     311^done,value="0xefffeb7c"
+     (gdb)
+     411-data-evaluate-expression A+3
+     411^done,value="4"
+     (gdb)
+     511-data-evaluate-expression "A + 3"
+     511^done,value="4"
+     (gdb)
+
+The `-data-list-changed-registers' Command
+------------------------------------------
+
+Synopsis
+........
+
+      -data-list-changed-registers
+
+   Display a list of the registers that have changed.
+
+GDB Command
+...........
+
+GDB doesn't have a direct analog for this command; `gdbtk' has the
+corresponding command `gdb_changed_register_list'.
+
+Example
+.......
+
+On a PPC MBX board:
+
+     (gdb)
+     -exec-continue
+     ^running
+
+     (gdb)
+     *stopped,reason="breakpoint-hit",disp="keep",bkptno="1",frame={
+     func="main",args=[],file="try.c",fullname="/home/foo/bar/try.c",
+     line="5"}
+     (gdb)
+     -data-list-changed-registers
+     ^done,changed-registers=["0","1","2","4","5","6","7","8","9",
+     "10","11","13","14","15","16","17","18","19","20","21","22","23",
+     "24","25","26","27","28","30","31","64","65","66","67","69"]
+     (gdb)
+
+The `-data-list-register-names' Command
+---------------------------------------
+
+Synopsis
+........
+
+      -data-list-register-names [ ( REGNO )+ ]
+
+   Show a list of register names for the current target.  If no
+arguments are given, it shows a list of the names of all the registers.
+If integer numbers are given as arguments, it will print a list of the
+names of the registers corresponding to the arguments.  To ensure
+consistency between a register name and its number, the output list may
+include empty register names.
+
+GDB Command
+...........
+
+GDB does not have a command which corresponds to
+`-data-list-register-names'.  In `gdbtk' there is a corresponding
+command `gdb_regnames'.
+
+Example
+.......
+
+For the PPC MBX board:
+     (gdb)
+     -data-list-register-names
+     ^done,register-names=["r0","r1","r2","r3","r4","r5","r6","r7",
+     "r8","r9","r10","r11","r12","r13","r14","r15","r16","r17","r18",
+     "r19","r20","r21","r22","r23","r24","r25","r26","r27","r28","r29",
+     "r30","r31","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9",
+     "f10","f11","f12","f13","f14","f15","f16","f17","f18","f19","f20",
+     "f21","f22","f23","f24","f25","f26","f27","f28","f29","f30","f31",
+     "", "pc","ps","cr","lr","ctr","xer"]
+     (gdb)
+     -data-list-register-names 1 2 3
+     ^done,register-names=["r1","r2","r3"]
+     (gdb)
+
+The `-data-list-register-values' Command
+----------------------------------------
+
+Synopsis
+........
+
+      -data-list-register-values FMT [ ( REGNO )*]
+
+   Display the registers' contents.  FMT is the format according to
+which the registers' contents are to be returned, followed by an
+optional list of numbers specifying the registers to display.  A
+missing list of numbers indicates that the contents of all the
+registers must be returned.
+
+   Allowed formats for FMT are:
+
+`x'
+     Hexadecimal
+
+`o'
+     Octal
+
+`t'
+     Binary
+
+`d'
+     Decimal
+
+`r'
+     Raw
+
+`N'
+     Natural
+
+GDB Command
+...........
+
+The corresponding GDB commands are `info reg', `info all-reg', and (in
+`gdbtk') `gdb_fetch_registers'.
+
+Example
+.......
+
+For a PPC MBX board (note: line breaks are for readability only, they
+don't appear in the actual output):
+
+     (gdb)
+     -data-list-register-values r 64 65
+     ^done,register-values=[{number="64",value="0xfe00a300"},
+     {number="65",value="0x00029002"}]
+     (gdb)
+     -data-list-register-values x
+     ^done,register-values=[{number="0",value="0xfe0043c8"},
+     {number="1",value="0x3fff88"},{number="2",value="0xfffffffe"},
+     {number="3",value="0x0"},{number="4",value="0xa"},
+     {number="5",value="0x3fff68"},{number="6",value="0x3fff58"},
+     {number="7",value="0xfe011e98"},{number="8",value="0x2"},
+     {number="9",value="0xfa202820"},{number="10",value="0xfa202808"},
+     {number="11",value="0x1"},{number="12",value="0x0"},
+     {number="13",value="0x4544"},{number="14",value="0xffdfffff"},
+     {number="15",value="0xffffffff"},{number="16",value="0xfffffeff"},
+     {number="17",value="0xefffffed"},{number="18",value="0xfffffffe"},
+     {number="19",value="0xffffffff"},{number="20",value="0xffffffff"},
+     {number="21",value="0xffffffff"},{number="22",value="0xfffffff7"},
+     {number="23",value="0xffffffff"},{number="24",value="0xffffffff"},
+     {number="25",value="0xffffffff"},{number="26",value="0xfffffffb"},
+     {number="27",value="0xffffffff"},{number="28",value="0xf7bfffff"},
+     {number="29",value="0x0"},{number="30",value="0xfe010000"},
+     {number="31",value="0x0"},{number="32",value="0x0"},
+     {number="33",value="0x0"},{number="34",value="0x0"},
+     {number="35",value="0x0"},{number="36",value="0x0"},
+     {number="37",value="0x0"},{number="38",value="0x0"},
+     {number="39",value="0x0"},{number="40",value="0x0"},
+     {number="41",value="0x0"},{number="42",value="0x0"},
+     {number="43",value="0x0"},{number="44",value="0x0"},
+     {number="45",value="0x0"},{number="46",value="0x0"},
+     {number="47",value="0x0"},{number="48",value="0x0"},
+     {number="49",value="0x0"},{number="50",value="0x0"},
+     {number="51",value="0x0"},{number="52",value="0x0"},
+     {number="53",value="0x0"},{number="54",value="0x0"},
+     {number="55",value="0x0"},{number="56",value="0x0"},
+     {number="57",value="0x0"},{number="58",value="0x0"},
+     {number="59",value="0x0"},{number="60",value="0x0"},
+     {number="61",value="0x0"},{number="62",value="0x0"},
+     {number="63",value="0x0"},{number="64",value="0xfe00a300"},
+     {number="65",value="0x29002"},{number="66",value="0x202f04b5"},
+     {number="67",value="0xfe0043b0"},{number="68",value="0xfe00b3e4"},
+     {number="69",value="0x20002b03"}]
+     (gdb)
+
+The `-data-read-memory' Command
+-------------------------------
+
+This command is deprecated, use `-data-read-memory-bytes' instead.
+
+Synopsis
+........
+
+      -data-read-memory [ -o BYTE-OFFSET ]
+        ADDRESS WORD-FORMAT WORD-SIZE
+        NR-ROWS NR-COLS [ ASCHAR ]
+
+where:
+
+`ADDRESS'
+     An expression specifying the address of the first memory word to be
+     read.  Complex expressions containing embedded white space should
+     be quoted using the C convention.
+
+`WORD-FORMAT'
+     The format to be used to print the memory words.  The notation is
+     the same as for GDB's `print' command (*note Output Formats:
+     Output Formats.).
+
+`WORD-SIZE'
+     The size of each memory word in bytes.
+
+`NR-ROWS'
+     The number of rows in the output table.
+
+`NR-COLS'
+     The number of columns in the output table.
+
+`ASCHAR'
+     If present, indicates that each row should include an ASCII dump.
+     The value of ASCHAR is used as a padding character when a byte is
+     not a member of the printable ASCII character set (printable ASCII
+     characters are those whose code is between 32 and 126,
+     inclusively).
+
+`BYTE-OFFSET'
+     An offset to add to the ADDRESS before fetching memory.
+
+   This command displays memory contents as a table of NR-ROWS by
+NR-COLS words, each word being WORD-SIZE bytes.  In total, `NR-ROWS *
+NR-COLS * WORD-SIZE' bytes are read (returned as `total-bytes').
+Should less than the requested number of bytes be returned by the
+target, the missing words are identified using `N/A'.  The number of
+bytes read from the target is returned in `nr-bytes' and the starting
+address used to read memory in `addr'.
+
+   The address of the next/previous row or page is available in
+`next-row' and `prev-row', `next-page' and `prev-page'.
+
+GDB Command
+...........
+
+The corresponding GDB command is `x'.  `gdbtk' has `gdb_get_mem' memory
+read command.
+
+Example
+.......
+
+Read six bytes of memory starting at `bytes+6' but then offset by `-6'
+bytes.  Format as three rows of two columns.  One byte per word.
+Display each word in hex.
+
+     (gdb)
+     9-data-read-memory -o -6 -- bytes+6 x 1 3 2
+     9^done,addr="0x00001390",nr-bytes="6",total-bytes="6",
+     next-row="0x00001396",prev-row="0x0000138e",next-page="0x00001396",
+     prev-page="0x0000138a",memory=[
+     {addr="0x00001390",data=["0x00","0x01"]},
+     {addr="0x00001392",data=["0x02","0x03"]},
+     {addr="0x00001394",data=["0x04","0x05"]}]
+     (gdb)
+
+   Read two bytes of memory starting at address `shorts + 64' and
+display as a single word formatted in decimal.
+
+     (gdb)
+     5-data-read-memory shorts+64 d 2 1 1
+     5^done,addr="0x00001510",nr-bytes="2",total-bytes="2",
+     next-row="0x00001512",prev-row="0x0000150e",
+     next-page="0x00001512",prev-page="0x0000150e",memory=[
+     {addr="0x00001510",data=["128"]}]
+     (gdb)
+
+   Read thirty two bytes of memory starting at `bytes+16' and format as
+eight rows of four columns.  Include a string encoding with `x' used as
+the non-printable character.
+
+     (gdb)
+     4-data-read-memory bytes+16 x 1 8 4 x
+     4^done,addr="0x000013a0",nr-bytes="32",total-bytes="32",
+     next-row="0x000013c0",prev-row="0x0000139c",
+     next-page="0x000013c0",prev-page="0x00001380",memory=[
+     {addr="0x000013a0",data=["0x10","0x11","0x12","0x13"],ascii="xxxx"},
+     {addr="0x000013a4",data=["0x14","0x15","0x16","0x17"],ascii="xxxx"},
+     {addr="0x000013a8",data=["0x18","0x19","0x1a","0x1b"],ascii="xxxx"},
+     {addr="0x000013ac",data=["0x1c","0x1d","0x1e","0x1f"],ascii="xxxx"},
+     {addr="0x000013b0",data=["0x20","0x21","0x22","0x23"],ascii=" !\"#"},
+     {addr="0x000013b4",data=["0x24","0x25","0x26","0x27"],ascii="$%&'"},
+     {addr="0x000013b8",data=["0x28","0x29","0x2a","0x2b"],ascii="()*+"},
+     {addr="0x000013bc",data=["0x2c","0x2d","0x2e","0x2f"],ascii=",-./"}]
+     (gdb)
+
+The `-data-read-memory-bytes' Command
+-------------------------------------
+
+Synopsis
+........
+
+      -data-read-memory-bytes [ -o BYTE-OFFSET ]
+        ADDRESS COUNT
+
+where:
+
+`ADDRESS'
+     An expression specifying the address of the first memory word to be
+     read.  Complex expressions containing embedded white space should
+     be quoted using the C convention.
+
+`COUNT'
+     The number of bytes to read.  This should be an integer literal.
+
+`BYTE-OFFSET'
+     The offsets in bytes relative to ADDRESS at which to start
+     reading.  This should be an integer literal.  This option is
+     provided so that a frontend is not required to first evaluate
+     address and then perform address arithmetics itself.
+
+
+   This command attempts to read all accessible memory regions in the
+specified range.  First, all regions marked as unreadable in the memory
+map (if one is defined) will be skipped.  *Note Memory Region
+Attributes::.  Second, GDB will attempt to read the remaining regions.
+For each one, if reading full region results in an errors, GDB will try
+to read a subset of the region.
+
+   In general, every single byte in the region may be readable or not,
+and the only way to read every readable byte is to try a read at every
+address, which is not practical.   Therefore, GDB will attempt to read
+all accessible bytes at either beginning or the end of the region,
+using a binary division scheme.  This heuristic works well for reading
+accross a memory map boundary.  Note that if a region has a readable
+range that is neither at the beginning or the end, GDB will not read it.
+
+   The result record (*note GDB/MI Result Records::) that is output of
+the command includes a field named `memory' whose content is a list of
+tuples.  Each tuple represent a successfully read memory block and has
+the following fields:
+
+`begin'
+     The start address of the memory block, as hexadecimal literal.
+
+`end'
+     The end address of the memory block, as hexadecimal literal.
+
+`offset'
+     The offset of the memory block, as hexadecimal literal, relative to
+     the start address passed to `-data-read-memory-bytes'.
+
+`contents'
+     The contents of the memory block, in hex.
+
+
+GDB Command
+...........
+
+The corresponding GDB command is `x'.
+
+Example
+.......
+
+     (gdb)
+     -data-read-memory-bytes &a 10
+     ^done,memory=[{begin="0xbffff154",offset="0x00000000",
+                   end="0xbffff15e",
+                   contents="01000000020000000300"}]
+     (gdb)
+
+The `-data-write-memory-bytes' Command
+--------------------------------------
+
+Synopsis
+........
+
+      -data-write-memory-bytes ADDRESS CONTENTS
+
+where:
+
+`ADDRESS'
+     An expression specifying the address of the first memory word to be
+     read.  Complex expressions containing embedded white space should
+     be quoted using the C convention.
+
+`CONTENTS'
+     The hex-encoded bytes to write.
+
+
+GDB Command
+...........
+
+There's no corresponding GDB command.
+
+Example
+.......
+
+     (gdb)
+     -data-write-memory-bytes &a "aabbccdd"
+     ^done
+     (gdb)
+
+
+File: gdb.info,  Node: GDB/MI Tracepoint Commands,  Next: GDB/MI Symbol Query,  Prev: GDB/MI Data Manipulation,  Up: GDB/MI
+
+27.16 GDB/MI Tracepoint Commands
+================================
+
+The commands defined in this section implement MI support for
+tracepoints.  For detailed introduction, see *Note Tracepoints::.
+
+The `-trace-find' Command
+-------------------------
+
+Synopsis
+........
+
+      -trace-find MODE [PARAMETERS...]
+
+   Find a trace frame using criteria defined by MODE and PARAMETERS.
+The following table lists permissible modes and their parameters.  For
+details of operation, see *Note tfind::.
+
+`none'
+     No parameters are required.  Stops examining trace frames.
+
+`frame-number'
+     An integer is required as parameter.  Selects tracepoint frame with
+     that index.
+
+`tracepoint-number'
+     An integer is required as parameter.  Finds next trace frame that
+     corresponds to tracepoint with the specified number.
+
+`pc'
+     An address is required as parameter.  Finds next trace frame that
+     corresponds to any tracepoint at the specified address.
+
+`pc-inside-range'
+     Two addresses are required as parameters.  Finds next trace frame
+     that corresponds to a tracepoint at an address inside the
+     specified range.  Both bounds are considered to be inside the
+     range.
+
+`pc-outside-range'
+     Two addresses are required as parameters.  Finds next trace frame
+     that corresponds to a tracepoint at an address outside the
+     specified range.  Both bounds are considered to be inside the
+     range.
+
+`line'
+     Line specification is required as parameter.  *Note Specify
+     Location::.  Finds next trace frame that corresponds to a
+     tracepoint at the specified location.
+
+
+   If `none' was passed as MODE, the response does not have fields.
+Otherwise, the response may have the following fields:
+
+`found'
+     This field has either `0' or `1' as the value, depending on
+     whether a matching tracepoint was found.
+
+`traceframe'
+     The index of the found traceframe.  This field is present iff the
+     `found' field has value of `1'.
+
+`tracepoint'
+     The index of the found tracepoint.  This field is present iff the
+     `found' field has value of `1'.
+
+`frame'
+     The information about the frame corresponding to the found trace
+     frame.  This field is present only if a trace frame was found.
+     *Note GDB/MI Frame Information::, for description of this field.
+
+
+GDB Command
+...........
+
+The corresponding GDB command is `tfind'.
+
+-trace-define-variable
+----------------------
+
+Synopsis
+........
+
+      -trace-define-variable NAME [ VALUE ]
+
+   Create trace variable NAME if it does not exist.  If VALUE is
+specified, sets the initial value of the specified trace variable to
+that value.  Note that the NAME should start with the `$' character.
+
+GDB Command
+...........
+
+The corresponding GDB command is `tvariable'.
+
+-trace-list-variables
+---------------------
+
+Synopsis
+........
+
+      -trace-list-variables
+
+   Return a table of all defined trace variables.  Each element of the
+table has the following fields:
+
+`name'
+     The name of the trace variable.  This field is always present.
+
+`initial'
+     The initial value.  This is a 64-bit signed integer.  This field
+     is always present.
+
+`current'
+     The value the trace variable has at the moment.  This is a 64-bit
+     signed integer.  This field is absent iff current value is not
+     defined, for example if the trace was never run, or is presently
+     running.
+
+
+GDB Command
+...........
+
+The corresponding GDB command is `tvariables'.
+
+Example
+.......
+
+     (gdb)
+     -trace-list-variables
+     ^done,trace-variables={nr_rows="1",nr_cols="3",
+     hdr=[{width="15",alignment="-1",col_name="name",colhdr="Name"},
+          {width="11",alignment="-1",col_name="initial",colhdr="Initial"},
+          {width="11",alignment="-1",col_name="current",colhdr="Current"}],
+     body=[variable={name="$trace_timestamp",initial="0"}
+           variable={name="$foo",initial="10",current="15"}]}
+     (gdb)
+
+-trace-save
+-----------
+
+Synopsis
+........
+
+      -trace-save [-r ] FILENAME
+
+   Saves the collected trace data to FILENAME.  Without the `-r'
+option, the data is downloaded from the target and saved in a local
+file.  With the `-r' option the target is asked to perform the save.
+
+GDB Command
+...........
+
+The corresponding GDB command is `tsave'.
+
+-trace-start
+------------
+
+Synopsis
+........
+
+      -trace-start
+
+   Starts a tracing experiments.  The result of this command does not
+have any fields.
+
+GDB Command
+...........
+
+The corresponding GDB command is `tstart'.
+
+-trace-status
+-------------
+
+Synopsis
+........
+
+      -trace-status
+
+   Obtains the status of a tracing experiment.  The result may include
+the following fields:
+
+`supported'
+     May have a value of either `0', when no tracing operations are
+     supported, `1', when all tracing operations are supported, or
+     `file' when examining trace file.  In the latter case, examining
+     of trace frame is possible but new tracing experiement cannot be
+     started.  This field is always present.
+
+`running'
+     May have a value of either `0' or `1' depending on whether tracing
+     experiement is in progress on target.  This field is present if
+     `supported' field is not `0'.
+
+`stop-reason'
+     Report the reason why the tracing was stopped last time.  This
+     field may be absent iff tracing was never stopped on target yet.
+     The value of `request' means the tracing was stopped as result of
+     the `-trace-stop' command.  The value of `overflow' means the
+     tracing buffer is full.  The value of `disconnection' means
+     tracing was automatically stopped when GDB has disconnected.  The
+     value of `passcount' means tracing was stopped when a tracepoint
+     was passed a maximal number of times for that tracepoint.  This
+     field is present if `supported' field is not `0'.
+
+`stopping-tracepoint'
+     The number of tracepoint whose passcount as exceeded.  This field
+     is present iff the `stop-reason' field has the value of
+     `passcount'.
+
+`frames'
+`frames-created'
+     The `frames' field is a count of the total number of trace frames
+     in the trace buffer, while `frames-created' is the total created
+     during the run, including ones that were discarded, such as when a
+     circular trace buffer filled up.  Both fields are optional.
+
+`buffer-size'
+`buffer-free'
+     These fields tell the current size of the tracing buffer and the
+     remaining space.  These fields are optional.
+
+`circular'
+     The value of the circular trace buffer flag.  `1' means that the
+     trace buffer is circular and old trace frames will be discarded if
+     necessary to make room, `0' means that the trace buffer is linear
+     and may fill up.
+
+`disconnected'
+     The value of the disconnected tracing flag.  `1' means that
+     tracing will continue after GDB disconnects, `0' means that the
+     trace run will stop.
+
+
+GDB Command
+...........
+
+The corresponding GDB command is `tstatus'.
+
+-trace-stop
+-----------
+
+Synopsis
+........
+
+      -trace-stop
+
+   Stops a tracing experiment.  The result of this command has the same
+fields as `-trace-status', except that the `supported' and `running'
+fields are not output.
+
+GDB Command
+...........
+
+The corresponding GDB command is `tstop'.
+
+
+File: gdb.info,  Node: GDB/MI Symbol Query,  Next: GDB/MI File Commands,  Prev: GDB/MI Tracepoint Commands,  Up: GDB/MI
+
+27.17 GDB/MI Symbol Query Commands
+==================================
+
+The `-symbol-list-lines' Command
+--------------------------------
+
+Synopsis
+........
+
+      -symbol-list-lines FILENAME
+
+   Print the list of lines that contain code and their associated
+program addresses for the given source filename.  The entries are
+sorted in ascending PC order.
+
+GDB Command
+...........
+
+There is no corresponding GDB command.
+
+Example
+.......
+
+     (gdb)
+     -symbol-list-lines basics.c
+     ^done,lines=[{pc="0x08048554",line="7"},{pc="0x0804855a",line="8"}]
+     (gdb)
+
+
+File: gdb.info,  Node: GDB/MI File Commands,  Next: GDB/MI Target Manipulation,  Prev: GDB/MI Symbol Query,  Up: GDB/MI
+
+27.18 GDB/MI File Commands
+==========================
+
+This section describes the GDB/MI commands to specify executable file
+names and to read in and obtain symbol table information.
+
+The `-file-exec-and-symbols' Command
+------------------------------------
+
+Synopsis
+........
+
+      -file-exec-and-symbols FILE
+
+   Specify the executable file to be debugged.  This file is the one
+from which the symbol table is also read.  If no file is specified, the
+command clears the executable and symbol information.  If breakpoints
+are set when using this command with no arguments, GDB will produce
+error messages.  Otherwise, no output is produced, except a completion
+notification.
+
+GDB Command
+...........
+
+The corresponding GDB command is `file'.
+
+Example
+.......
+
+     (gdb)
+     -file-exec-and-symbols /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
+     ^done
+     (gdb)
+
+The `-file-exec-file' Command
+-----------------------------
+
+Synopsis
+........
+
+      -file-exec-file FILE
+
+   Specify the executable file to be debugged.  Unlike
+`-file-exec-and-symbols', the symbol table is _not_ read from this
+file.  If used without argument, GDB clears the information about the
+executable file.  No output is produced, except a completion
+notification.
+
+GDB Command
+...........
+
+The corresponding GDB command is `exec-file'.
+
+Example
+.......
+
+     (gdb)
+     -file-exec-file /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
+     ^done
+     (gdb)
+
+The `-file-list-exec-source-file' Command
+-----------------------------------------
+
+Synopsis
+........
+
+      -file-list-exec-source-file
+
+   List the line number, the current source file, and the absolute path
+to the current source file for the current executable.  The macro
+information field has a value of `1' or `0' depending on whether or not
+the file includes preprocessor macro information.
+
+GDB Command
+...........
+
+The GDB equivalent is `info source'
+
+Example
+.......
+
+     (gdb)
+     123-file-list-exec-source-file
+     123^done,line="1",file="foo.c",fullname="/home/bar/foo.c,macro-info="1"
+     (gdb)
+
+The `-file-list-exec-source-files' Command
+------------------------------------------
+
+Synopsis
+........
+
+      -file-list-exec-source-files
+
+   List the source files for the current executable.
+
+   It will always output the filename, but only when GDB can find the
+absolute file name of a source file, will it output the fullname.
+
+GDB Command
+...........
+
+The GDB equivalent is `info sources'.  `gdbtk' has an analogous command
+`gdb_listfiles'.
+
+Example
+.......
+
+     (gdb)
+     -file-list-exec-source-files
+     ^done,files=[
+     {file=foo.c,fullname=/home/foo.c},
+     {file=/home/bar.c,fullname=/home/bar.c},
+     {file=gdb_could_not_find_fullpath.c}]
+     (gdb)
+
+The `-file-symbol-file' Command
+-------------------------------
+
+Synopsis
+........
+
+      -file-symbol-file FILE
+
+   Read symbol table info from the specified FILE argument.  When used
+without arguments, clears GDB's symbol table info.  No output is
+produced, except for a completion notification.
+
+GDB Command
+...........
+
+The corresponding GDB command is `symbol-file'.
+
+Example
+.......
+
+     (gdb)
+     -file-symbol-file /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
+     ^done
+     (gdb)
+
+
+File: gdb.info,  Node: GDB/MI Target Manipulation,  Next: GDB/MI File Transfer Commands,  Prev: GDB/MI File Commands,  Up: GDB/MI
+
+27.19 GDB/MI Target Manipulation Commands
+=========================================
+
+The `-target-attach' Command
+----------------------------
+
+Synopsis
+........
+
+      -target-attach PID | GID | FILE
+
+   Attach to a process PID or a file FILE outside of GDB, or a thread
+group GID.  If attaching to a thread group, the id previously returned
+by `-list-thread-groups --available' must be used.
+
+GDB Command
+...........
+
+The corresponding GDB command is `attach'.
+
+Example
+.......
+
+     (gdb)
+     -target-attach 34
+     =thread-created,id="1"
+     *stopped,thread-id="1",frame={addr="0xb7f7e410",func="bar",args=[]}
+     ^done
+     (gdb)
+
+The `-target-detach' Command
+----------------------------
+
+Synopsis
+........
+
+      -target-detach [ PID | GID ]
+
+   Detach from the remote target which normally resumes its execution.
+If either PID or GID is specified, detaches from either the specified
+process, or specified thread group.  There's no output.
+
+GDB Command
+...........
+
+The corresponding GDB command is `detach'.
+
+Example
+.......
+
+     (gdb)
+     -target-detach
+     ^done
+     (gdb)
+
+The `-target-disconnect' Command
+--------------------------------
+
+Synopsis
+........
+
+      -target-disconnect
+
+   Disconnect from the remote target.  There's no output and the target
+is generally not resumed.
+
+GDB Command
+...........
+
+The corresponding GDB command is `disconnect'.
+
+Example
+.......
+
+     (gdb)
+     -target-disconnect
+     ^done
+     (gdb)
+
+The `-target-download' Command
+------------------------------
+
+Synopsis
+........
+
+      -target-download
+
+   Loads the executable onto the remote target.  It prints out an
+update message every half second, which includes the fields:
+
+`section'
+     The name of the section.
+
+`section-sent'
+     The size of what has been sent so far for that section.
+
+`section-size'
+     The size of the section.
+
+`total-sent'
+     The total size of what was sent so far (the current and the
+     previous sections).
+
+`total-size'
+     The size of the overall executable to download.
+
+Each message is sent as status record (*note GDB/MI Output Syntax:
+GDB/MI Output Syntax.).
+
+   In addition, it prints the name and size of the sections, as they are
+downloaded.  These messages include the following fields:
+
+`section'
+     The name of the section.
+
+`section-size'
+     The size of the section.
+
+`total-size'
+     The size of the overall executable to download.
+
+At the end, a summary is printed.
+
+GDB Command
+...........
+
+The corresponding GDB command is `load'.
+
+Example
+.......
+
+Note: each status message appears on a single line.  Here the messages
+have been broken down so that they can fit onto a page.
+
+     (gdb)
+     -target-download
+     +download,{section=".text",section-size="6668",total-size="9880"}
+     +download,{section=".text",section-sent="512",section-size="6668",
+     total-sent="512",total-size="9880"}
+     +download,{section=".text",section-sent="1024",section-size="6668",
+     total-sent="1024",total-size="9880"}
+     +download,{section=".text",section-sent="1536",section-size="6668",
+     total-sent="1536",total-size="9880"}
+     +download,{section=".text",section-sent="2048",section-size="6668",
+     total-sent="2048",total-size="9880"}
+     +download,{section=".text",section-sent="2560",section-size="6668",
+     total-sent="2560",total-size="9880"}
+     +download,{section=".text",section-sent="3072",section-size="6668",
+     total-sent="3072",total-size="9880"}
+     +download,{section=".text",section-sent="3584",section-size="6668",
+     total-sent="3584",total-size="9880"}
+     +download,{section=".text",section-sent="4096",section-size="6668",
+     total-sent="4096",total-size="9880"}
+     +download,{section=".text",section-sent="4608",section-size="6668",
+     total-sent="4608",total-size="9880"}
+     +download,{section=".text",section-sent="5120",section-size="6668",
+     total-sent="5120",total-size="9880"}
+     +download,{section=".text",section-sent="5632",section-size="6668",
+     total-sent="5632",total-size="9880"}
+     +download,{section=".text",section-sent="6144",section-size="6668",
+     total-sent="6144",total-size="9880"}
+     +download,{section=".text",section-sent="6656",section-size="6668",
+     total-sent="6656",total-size="9880"}
+     +download,{section=".init",section-size="28",total-size="9880"}
+     +download,{section=".fini",section-size="28",total-size="9880"}
+     +download,{section=".data",section-size="3156",total-size="9880"}
+     +download,{section=".data",section-sent="512",section-size="3156",
+     total-sent="7236",total-size="9880"}
+     +download,{section=".data",section-sent="1024",section-size="3156",
+     total-sent="7748",total-size="9880"}
+     +download,{section=".data",section-sent="1536",section-size="3156",
+     total-sent="8260",total-size="9880"}
+     +download,{section=".data",section-sent="2048",section-size="3156",
+     total-sent="8772",total-size="9880"}
+     +download,{section=".data",section-sent="2560",section-size="3156",
+     total-sent="9284",total-size="9880"}
+     +download,{section=".data",section-sent="3072",section-size="3156",
+     total-sent="9796",total-size="9880"}
+     ^done,address="0x10004",load-size="9880",transfer-rate="6586",
+     write-rate="429"
+     (gdb)
+
+GDB Command
+...........
+
+No equivalent.
+
+Example
+.......
+
+N.A.
+
+The `-target-select' Command
+----------------------------
+
+Synopsis
+........
+
+      -target-select TYPE PARAMETERS ...
+
+   Connect GDB to the remote target.  This command takes two args:
+
+`TYPE'
+     The type of target, for instance `remote', etc.
+
+`PARAMETERS'
+     Device names, host names and the like.  *Note Commands for
+     Managing Targets: Target Commands, for more details.
+
+   The output is a connection notification, followed by the address at
+which the target program is, in the following form:
+
+     ^connected,addr="ADDRESS",func="FUNCTION NAME",
+       args=[ARG LIST]
+
+GDB Command
+...........
+
+The corresponding GDB command is `target'.
+
+Example
+.......
+
+     (gdb)
+     -target-select remote /dev/ttya
+     ^connected,addr="0xfe00a300",func="??",args=[]
+     (gdb)
+
+
+File: gdb.info,  Node: GDB/MI File Transfer Commands,  Next: GDB/MI Miscellaneous Commands,  Prev: GDB/MI Target Manipulation,  Up: GDB/MI
+
+27.20 GDB/MI File Transfer Commands
+===================================
+
+The `-target-file-put' Command
+------------------------------
+
+Synopsis
+........
+
+      -target-file-put HOSTFILE TARGETFILE
+
+   Copy file HOSTFILE from the host system (the machine running GDB) to
+TARGETFILE on the target system.
+
+GDB Command
+...........
+
+The corresponding GDB command is `remote put'.
+
+Example
+.......
+
+     (gdb)
+     -target-file-put localfile remotefile
+     ^done
+     (gdb)
+
+The `-target-file-get' Command
+------------------------------
+
+Synopsis
+........
+
+      -target-file-get TARGETFILE HOSTFILE
+
+   Copy file TARGETFILE from the target system to HOSTFILE on the host
+system.
+
+GDB Command
+...........
+
+The corresponding GDB command is `remote get'.
+
+Example
+.......
+
+     (gdb)
+     -target-file-get remotefile localfile
+     ^done
+     (gdb)
+
+The `-target-file-delete' Command
+---------------------------------
+
+Synopsis
+........
+
+      -target-file-delete TARGETFILE
+
+   Delete TARGETFILE from the target system.
+
+GDB Command
+...........
+
+The corresponding GDB command is `remote delete'.
+
+Example
+.......
+
+     (gdb)
+     -target-file-delete remotefile
+     ^done
+     (gdb)
+
+
+File: gdb.info,  Node: GDB/MI Miscellaneous Commands,  Prev: GDB/MI File Transfer Commands,  Up: GDB/MI
+
+27.21 Miscellaneous GDB/MI Commands
+===================================
+
+The `-gdb-exit' Command
+-----------------------
+
+Synopsis
+........
+
+      -gdb-exit
+
+   Exit GDB immediately.
+
+GDB Command
+...........
+
+Approximately corresponds to `quit'.
+
+Example
+.......
+
+     (gdb)
+     -gdb-exit
+     ^exit
+
+The `-gdb-set' Command
+----------------------
+
+Synopsis
+........
+
+      -gdb-set
+
+   Set an internal GDB variable.
+
+GDB Command
+...........
+
+The corresponding GDB command is `set'.
+
+Example
+.......
+
+     (gdb)
+     -gdb-set $foo=3
+     ^done
+     (gdb)
+
+The `-gdb-show' Command
+-----------------------
+
+Synopsis
+........
+
+      -gdb-show
+
+   Show the current value of a GDB variable.
+
+GDB Command
+...........
+
+The corresponding GDB command is `show'.
+
+Example
+.......
+
+     (gdb)
+     -gdb-show annotate
+     ^done,value="0"
+     (gdb)
+
+The `-gdb-version' Command
+--------------------------
+
+Synopsis
+........
+
+      -gdb-version
+
+   Show version information for GDB.  Used mostly in testing.
+
+GDB Command
+...........
+
+The GDB equivalent is `show version'.  GDB by default shows this
+information when you start an interactive session.
+
+Example
+.......
+
+     (gdb)
+     -gdb-version
+     ~GNU gdb 5.2.1
+     ~Copyright 2000 Free Software Foundation, Inc.
+     ~GDB is free software, covered by the GNU General Public License, and
+     ~you are welcome to change it and/or distribute copies of it under
+     ~ certain conditions.
+     ~Type "show copying" to see the conditions.
+     ~There is absolutely no warranty for GDB.  Type "show warranty" for
+     ~ details.
+     ~This GDB was configured as
+      "--host=sparc-sun-solaris2.5.1 --target=ppc-eabi".
+     ^done
+     (gdb)
+
+The `-list-features' Command
+----------------------------
+
+Returns a list of particular features of the MI protocol that this
+version of gdb implements.  A feature can be a command, or a new field
+in an output of some command, or even an important bugfix.  While a
+frontend can sometimes detect presence of a feature at runtime, it is
+easier to perform detection at debugger startup.
+
+   The command returns a list of strings, with each string naming an
+available feature.  Each returned string is just a name, it does not
+have any internal structure.  The list of possible feature names is
+given below.
+
+   Example output:
+
+     (gdb) -list-features
+     ^done,result=["feature1","feature2"]
+
+   The current list of features is:
+
+`frozen-varobjs'
+     Indicates support for the `-var-set-frozen' command, as well as
+     possible presense of the `frozen' field in the output of
+     `-varobj-create'.
+
+`pending-breakpoints'
+     Indicates support for the `-f' option to the `-break-insert'
+     command.
+
+`python'
+     Indicates Python scripting support, Python-based pretty-printing
+     commands, and possible presence of the `display_hint' field in the
+     output of `-var-list-children'
+
+`thread-info'
+     Indicates support for the `-thread-info' command.
+
+`data-read-memory-bytes'
+     Indicates support for the `-data-read-memory-bytes' and the
+     `-data-write-memory-bytes' commands.
+
+`breakpoint-notifications'
+     Indicates that changes to breakpoints and breakpoints created via
+     the CLI will be announced via async records.
+
+`ada-task-info'
+     Indicates support for the `-ada-task-info' command.
+
+The `-list-target-features' Command
+-----------------------------------
+
+Returns a list of particular features that are supported by the target.
+Those features affect the permitted MI commands, but unlike the
+features reported by the `-list-features' command, the features depend
+on which target GDB is using at the moment.  Whenever a target can
+change, due to commands such as `-target-select', `-target-attach' or
+`-exec-run', the list of target features may change, and the frontend
+should obtain it again.  Example output:
+
+     (gdb) -list-features
+     ^done,result=["async"]
+
+   The current list of features is:
+
+`async'
+     Indicates that the target is capable of asynchronous command
+     execution, which means that GDB will accept further commands while
+     the target is running.
+
+`reverse'
+     Indicates that the target is capable of reverse execution.  *Note
+     Reverse Execution::, for more information.
+
+
+The `-list-thread-groups' Command
+---------------------------------
+
+Synopsis
+--------
+
+     -list-thread-groups [ --available ] [ --recurse 1 ] [ GROUP ... ]
+
+   Lists thread groups (*note Thread groups::).  When a single thread
+group is passed as the argument, lists the children of that group.
+When several thread group are passed, lists information about those
+thread groups.  Without any parameters, lists information about all
+top-level thread groups.
+
+   Normally, thread groups that are being debugged are reported.  With
+the `--available' option, GDB reports thread groups available on the
+target.
+
+   The output of this command may have either a `threads' result or a
+`groups' result.  The `thread' result has a list of tuples as value,
+with each tuple describing a thread (*note GDB/MI Thread
+Information::).  The `groups' result has a list of tuples as value,
+each tuple describing a thread group.  If top-level groups are
+requested (that is, no parameter is passed), or when several groups are
+passed, the output always has a `groups' result.  The format of the
+`group' result is described below.
+
+   To reduce the number of roundtrips it's possible to list thread
+groups together with their children, by passing the `--recurse' option
+and the recursion depth.  Presently, only recursion depth of 1 is
+permitted.  If this option is present, then every reported thread group
+will also include its children, either as `group' or `threads' field.
+
+   In general, any combination of option and parameters is permitted,
+with the following caveats:
+
+   * When a single thread group is passed, the output will typically be
+     the `threads' result.  Because threads may not contain anything,
+     the `recurse' option will be ignored.
+
+   * When the `--available' option is passed, limited information may
+     be available.  In particular, the list of threads of a process
+     might be inaccessible.  Further, specifying specific thread groups
+     might not give any performance advantage over listing all thread
+     groups.  The frontend should assume that `-list-thread-groups
+     --available' is always an expensive operation and cache the
+     results.
+
+
+   The `groups' result is a list of tuples, where each tuple may have
+the following fields:
+
+`id'
+     Identifier of the thread group.  This field is always present.
+     The identifier is an opaque string; frontends should not try to
+     convert it to an integer, even though it might look like one.
+
+`type'
+     The type of the thread group.  At present, only `process' is a
+     valid type.
+
+`pid'
+     The target-specific process identifier.  This field is only present
+     for thread groups of type `process' and only if the process exists.
+
+`num_children'
+     The number of children this thread group has.  This field may be
+     absent for an available thread group.
+
+`threads'
+     This field has a list of tuples as value, each tuple describing a
+     thread.  It may be present if the `--recurse' option is specified,
+     and it's actually possible to obtain the threads.
+
+`cores'
+     This field is a list of integers, each identifying a core that one
+     thread of the group is running on.  This field may be absent if
+     such information is not available.
+
+`executable'
+     The name of the executable file that corresponds to this thread
+     group.  The field is only present for thread groups of type
+     `process', and only if there is a corresponding executable file.
+
+
+Example
+-------
+
+     gdb
+     -list-thread-groups
+     ^done,groups=[{id="17",type="process",pid="yyy",num_children="2"}]
+     -list-thread-groups 17
+     ^done,threads=[{id="2",target-id="Thread 0xb7e14b90 (LWP 21257)",
+        frame={level="0",addr="0xffffe410",func="__kernel_vsyscall",args=[]},state="running"},
+     {id="1",target-id="Thread 0xb7e156b0 (LWP 21254)",
+        frame={level="0",addr="0x0804891f",func="foo",args=[{name="i",value="10"}],
+                file="/tmp/a.c",fullname="/tmp/a.c",line="158"},state="running"}]]
+     -list-thread-groups --available
+     ^done,groups=[{id="17",type="process",pid="yyy",num_children="2",cores=[1,2]}]
+     -list-thread-groups --available --recurse 1
+      ^done,groups=[{id="17", types="process",pid="yyy",num_children="2",cores=[1,2],
+                     threads=[{id="1",target-id="Thread 0xb7e14b90",cores=[1]},
+                              {id="2",target-id="Thread 0xb7e14b90",cores=[2]}]},..]
+     -list-thread-groups --available --recurse 1 17 18
+     ^done,groups=[{id="17", types="process",pid="yyy",num_children="2",cores=[1,2],
+                    threads=[{id="1",target-id="Thread 0xb7e14b90",cores=[1]},
+                             {id="2",target-id="Thread 0xb7e14b90",cores=[2]}]},...]
+
+The `-info-os' Command
+----------------------
+
+Synopsis
+........
+
+     -info-os [ TYPE ]
+
+   If no argument is supplied, the command returns a table of available
+operating-system-specific information types.  If one of these types is
+supplied as an argument TYPE, then the command returns a table of data
+of that type.
+
+   The types of information available depend on the target operating
+system.
+
+GDB Command
+...........
+
+The corresponding GDB command is `info os'.
+
+Example
+.......
+
+When run on a GNU/Linux system, the output will look something like
+this:
+
+     gdb
+     -info-os
+     ^done,OSDataTable={nr_rows="9",nr_cols="3",
+     hdr=[{width="10",alignment="-1",col_name="col0",colhdr="Type"},
+          {width="10",alignment="-1",col_name="col1",colhdr="Description"},
+          {width="10",alignment="-1",col_name="col2",colhdr="Title"}],
+     body=[item={col0="processes",col1="Listing of all processes",
+                 col2="Processes"},
+           item={col0="procgroups",col1="Listing of all process groups",
+                 col2="Process groups"},
+           item={col0="threads",col1="Listing of all threads",
+                 col2="Threads"},
+           item={col0="files",col1="Listing of all file descriptors",
+                 col2="File descriptors"},
+           item={col0="sockets",col1="Listing of all internet-domain sockets",
+                 col2="Sockets"},
+           item={col0="shm",col1="Listing of all shared-memory regions",
+                 col2="Shared-memory regions"},
+           item={col0="semaphores",col1="Listing of all semaphores",
+                 col2="Semaphores"},
+           item={col0="msg",col1="Listing of all message queues",
+                 col2="Message queues"},
+           item={col0="modules",col1="Listing of all loaded kernel modules",
+                 col2="Kernel modules"}]}
+     gdb
+     -info-os processes
+     ^done,OSDataTable={nr_rows="190",nr_cols="4",
+     hdr=[{width="10",alignment="-1",col_name="col0",colhdr="pid"},
+          {width="10",alignment="-1",col_name="col1",colhdr="user"},
+          {width="10",alignment="-1",col_name="col2",colhdr="command"},
+          {width="10",alignment="-1",col_name="col3",colhdr="cores"}],
+     body=[item={col0="1",col1="root",col2="/sbin/init",col3="0"},
+           item={col0="2",col1="root",col2="[kthreadd]",col3="1"},
+           item={col0="3",col1="root",col2="[ksoftirqd/0]",col3="0"},
+           ...
+           item={col0="26446",col1="stan",col2="bash",col3="0"},
+           item={col0="28152",col1="stan",col2="bash",col3="1"}]}
+     (gdb)
+
+   (Note that the MI output here includes a `"Title"' column that does
+not appear in command-line `info os'; this column is useful for MI
+clients that want to enumerate the types of data, such as in a popup
+menu, but is needless clutter on the command line, and `info os' omits
+it.)
+
+The `-add-inferior' Command
+---------------------------
+
+Synopsis
+--------
+
+     -add-inferior
+
+   Creates a new inferior (*note Inferiors and Programs::).  The created
+inferior is not associated with any executable.  Such association may
+be established with the `-file-exec-and-symbols' command (*note GDB/MI
+File Commands::).  The command response has a single field,
+`thread-group', whose value is the identifier of the thread group
+corresponding to the new inferior.
+
+Example
+-------
+
+     gdb
+     -add-inferior
+     ^done,thread-group="i3"
+
+The `-interpreter-exec' Command
+-------------------------------
+
+Synopsis
+--------
+
+     -interpreter-exec INTERPRETER COMMAND
+
+   Execute the specified COMMAND in the given INTERPRETER.
+
+GDB Command
+-----------
+
+The corresponding GDB command is `interpreter-exec'.
+
+Example
+-------
+
+     (gdb)
+     -interpreter-exec console "break main"
+     &"During symbol reading, couldn't parse type; debugger out of date?.\n"
+     &"During symbol reading, bad structure-type format.\n"
+     ~"Breakpoint 1 at 0x8074fc6: file ../../src/gdb/main.c, line 743.\n"
+     ^done
+     (gdb)
+
+The `-inferior-tty-set' Command
+-------------------------------
+
+Synopsis
+--------
+
+     -inferior-tty-set /dev/pts/1
+
+   Set terminal for future runs of the program being debugged.
+
+GDB Command
+-----------
+
+The corresponding GDB command is `set inferior-tty' /dev/pts/1.
+
+Example
+-------
+
+     (gdb)
+     -inferior-tty-set /dev/pts/1
+     ^done
+     (gdb)
+
+The `-inferior-tty-show' Command
+--------------------------------
+
+Synopsis
+--------
+
+     -inferior-tty-show
+
+   Show terminal for future runs of program being debugged.
+
+GDB Command
+-----------
+
+The corresponding GDB command is `show inferior-tty'.
+
+Example
+-------
+
+     (gdb)
+     -inferior-tty-set /dev/pts/1
+     ^done
+     (gdb)
+     -inferior-tty-show
+     ^done,inferior_tty_terminal="/dev/pts/1"
+     (gdb)
+
+The `-enable-timings' Command
+-----------------------------
+
+Synopsis
+--------
+
+     -enable-timings [yes | no]
+
+   Toggle the printing of the wallclock, user and system times for an MI
+command as a field in its output.  This command is to help frontend
+developers optimize the performance of their code.  No argument is
+equivalent to `yes'.
+
+GDB Command
+-----------
+
+No equivalent.
+
+Example
+-------
+
+     (gdb)
+     -enable-timings
+     ^done
+     (gdb)
+     -break-insert main
+     ^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+     addr="0x080484ed",func="main",file="myprog.c",
+     fullname="/home/nickrob/myprog.c",line="73",times="0"},
+     time={wallclock="0.05185",user="0.00800",system="0.00000"}
+     (gdb)
+     -enable-timings no
+     ^done
+     (gdb)
+     -exec-run
+     ^running
+     (gdb)
+     *stopped,reason="breakpoint-hit",disp="keep",bkptno="1",thread-id="0",
+     frame={addr="0x080484ed",func="main",args=[{name="argc",value="1"},
+     {name="argv",value="0xbfb60364"}],file="myprog.c",
+     fullname="/home/nickrob/myprog.c",line="73"}
+     (gdb)
+
+
+File: gdb.info,  Node: Annotations,  Next: JIT Interface,  Prev: GDB/MI,  Up: Top
+
+28 GDB Annotations
+******************
+
+This chapter describes annotations in GDB.  Annotations were designed
+to interface GDB to graphical user interfaces or other similar programs
+which want to interact with GDB at a relatively high level.
+
+   The annotation mechanism has largely been superseded by GDB/MI
+(*note GDB/MI::).
+
+* Menu:
+
+* Annotations Overview::  What annotations are; the general syntax.
+* Server Prefix::       Issuing a command without affecting user state.
+* Prompting::           Annotations marking GDB's need for input.
+* Errors::              Annotations for error messages.
+* Invalidation::        Some annotations describe things now invalid.
+* Annotations for Running::
+                        Whether the program is running, how it stopped, etc.
+* Source Annotations::  Annotations describing source code.
+
+
+File: gdb.info,  Node: Annotations Overview,  Next: Server Prefix,  Up: Annotations
+
+28.1 What is an Annotation?
+===========================
+
+Annotations start with a newline character, two `control-z' characters,
+and the name of the annotation.  If there is no additional information
+associated with this annotation, the name of the annotation is followed
+immediately by a newline.  If there is additional information, the name
+of the annotation is followed by a space, the additional information,
+and a newline.  The additional information cannot contain newline
+characters.
+
+   Any output not beginning with a newline and two `control-z'
+characters denotes literal output from GDB.  Currently there is no need
+for GDB to output a newline followed by two `control-z' characters, but
+if there was such a need, the annotations could be extended with an
+`escape' annotation which means those three characters as output.
+
+   The annotation LEVEL, which is specified using the `--annotate'
+command line option (*note Mode Options::), controls how much
+information GDB prints together with its prompt, values of expressions,
+source lines, and other types of output.  Level 0 is for no
+annotations, level 1 is for use when GDB is run as a subprocess of GNU
+Emacs, level 3 is the maximum annotation suitable for programs that
+control GDB, and level 2 annotations have been made obsolete (*note
+Limitations of the Annotation Interface: (annotate)Limitations.).
+
+`set annotate LEVEL'
+     The GDB command `set annotate' sets the level of annotations to
+     the specified LEVEL.
+
+`show annotate'
+     Show the current annotation level.
+
+   This chapter describes level 3 annotations.
+
+   A simple example of starting up GDB with annotations is:
+
+     $ gdb --annotate=3
+     GNU gdb 6.0
+     Copyright 2003 Free Software Foundation, Inc.
+     GDB is free software, covered by the GNU General Public License,
+     and you are welcome to change it and/or distribute copies of it
+     under certain conditions.
+     Type "show copying" to see the conditions.
+     There is absolutely no warranty for GDB.  Type "show warranty"
+     for details.
+     This GDB was configured as "i386-pc-linux-gnu"
+
+     ^Z^Zpre-prompt
+     (gdb)
+     ^Z^Zprompt
+     quit
+
+     ^Z^Zpost-prompt
+     $
+
+   Here `quit' is input to GDB; the rest is output from GDB.  The three
+lines beginning `^Z^Z' (where `^Z' denotes a `control-z' character) are
+annotations; the rest is output from GDB.
+
+
+File: gdb.info,  Node: Server Prefix,  Next: Prompting,  Prev: Annotations Overview,  Up: Annotations
+
+28.2 The Server Prefix
+======================
+
+If you prefix a command with `server ' then it will not affect the
+command history, nor will it affect GDB's notion of which command to
+repeat if <RET> is pressed on a line by itself.  This means that
+commands can be run behind a user's back by a front-end in a
+transparent manner.
+
+   The `server ' prefix does not affect the recording of values into
+the value history; to print a value without recording it into the value
+history, use the `output' command instead of the `print' command.
+
+   Using this prefix also disables confirmation requests (*note
+confirmation requests::).
+
+
+File: gdb.info,  Node: Prompting,  Next: Errors,  Prev: Server Prefix,  Up: Annotations
+
+28.3 Annotation for GDB Input
+=============================
+
+When GDB prompts for input, it annotates this fact so it is possible to
+know when to send output, when the output from a given command is over,
+etc.
+
+   Different kinds of input each have a different "input type".  Each
+input type has three annotations: a `pre-' annotation, which denotes
+the beginning of any prompt which is being output, a plain annotation,
+which denotes the end of the prompt, and then a `post-' annotation
+which denotes the end of any echo which may (or may not) be associated
+with the input.  For example, the `prompt' input type features the
+following annotations:
+
+     ^Z^Zpre-prompt
+     ^Z^Zprompt
+     ^Z^Zpost-prompt
+
+   The input types are
+
+`prompt'
+     When GDB is prompting for a command (the main GDB prompt).
+
+`commands'
+     When GDB prompts for a set of commands, like in the `commands'
+     command.  The annotations are repeated for each command which is
+     input.
+
+`overload-choice'
+     When GDB wants the user to select between various overloaded
+     functions.
+
+`query'
+     When GDB wants the user to confirm a potentially dangerous
+     operation.
+
+`prompt-for-continue'
+     When GDB is asking the user to press return to continue.  Note:
+     Don't expect this to work well; instead use `set height 0' to
+     disable prompting.  This is because the counting of lines is buggy
+     in the presence of annotations.
+
+
+File: gdb.info,  Node: Errors,  Next: Invalidation,  Prev: Prompting,  Up: Annotations
+
+28.4 Errors
+===========
+
+     ^Z^Zquit
+
+   This annotation occurs right before GDB responds to an interrupt.
+
+     ^Z^Zerror
+
+   This annotation occurs right before GDB responds to an error.
+
+   Quit and error annotations indicate that any annotations which GDB
+was in the middle of may end abruptly.  For example, if a
+`value-history-begin' annotation is followed by a `error', one cannot
+expect to receive the matching `value-history-end'.  One cannot expect
+not to receive it either, however; an error annotation does not
+necessarily mean that GDB is immediately returning all the way to the
+top level.
+
+   A quit or error annotation may be preceded by
+
+     ^Z^Zerror-begin
+
+   Any output between that and the quit or error annotation is the error
+message.
+
+   Warning messages are not yet annotated.
+
+
+File: gdb.info,  Node: Invalidation,  Next: Annotations for Running,  Prev: Errors,  Up: Annotations
+
+28.5 Invalidation Notices
+=========================
+
+The following annotations say that certain pieces of state may have
+changed.
+
+`^Z^Zframes-invalid'
+     The frames (for example, output from the `backtrace' command) may
+     have changed.
+
+`^Z^Zbreakpoints-invalid'
+     The breakpoints may have changed.  For example, the user just
+     added or deleted a breakpoint.
+
+
+File: gdb.info,  Node: Annotations for Running,  Next: Source Annotations,  Prev: Invalidation,  Up: Annotations
+
+28.6 Running the Program
+========================
+
+When the program starts executing due to a GDB command such as `step'
+or `continue',
+
+     ^Z^Zstarting
+
+   is output.  When the program stops,
+
+     ^Z^Zstopped
+
+   is output.  Before the `stopped' annotation, a variety of
+annotations describe how the program stopped.
+
+`^Z^Zexited EXIT-STATUS'
+     The program exited, and EXIT-STATUS is the exit status (zero for
+     successful exit, otherwise nonzero).
+
+`^Z^Zsignalled'
+     The program exited with a signal.  After the `^Z^Zsignalled', the
+     annotation continues:
+
+          INTRO-TEXT
+          ^Z^Zsignal-name
+          NAME
+          ^Z^Zsignal-name-end
+          MIDDLE-TEXT
+          ^Z^Zsignal-string
+          STRING
+          ^Z^Zsignal-string-end
+          END-TEXT
+
+     where NAME is the name of the signal, such as `SIGILL' or
+     `SIGSEGV', and STRING is the explanation of the signal, such as
+     `Illegal Instruction' or `Segmentation fault'.  INTRO-TEXT,
+     MIDDLE-TEXT, and END-TEXT are for the user's benefit and have no
+     particular format.
+
+`^Z^Zsignal'
+     The syntax of this annotation is just like `signalled', but GDB is
+     just saying that the program received the signal, not that it was
+     terminated with it.
+
+`^Z^Zbreakpoint NUMBER'
+     The program hit breakpoint number NUMBER.
+
+`^Z^Zwatchpoint NUMBER'
+     The program hit watchpoint number NUMBER.
+
+
+File: gdb.info,  Node: Source Annotations,  Prev: Annotations for Running,  Up: Annotations
+
+28.7 Displaying Source
+======================
+
+The following annotation is used instead of displaying source code:
+
+     ^Z^Zsource FILENAME:LINE:CHARACTER:MIDDLE:ADDR
+
+   where FILENAME is an absolute file name indicating which source
+file, LINE is the line number within that file (where 1 is the first
+line in the file), CHARACTER is the character position within the file
+(where 0 is the first character in the file) (for most debug formats
+this will necessarily point to the beginning of a line), MIDDLE is
+`middle' if ADDR is in the middle of the line, or `beg' if ADDR is at
+the beginning of the line, and ADDR is the address in the target
+program associated with the source which is being displayed.  ADDR is
+in the form `0x' followed by one or more lowercase hex digits (note
+that this does not depend on the language).
+
+
+File: gdb.info,  Node: JIT Interface,  Next: In-Process Agent,  Prev: Annotations,  Up: Top
+
+29 JIT Compilation Interface
+****************************
+
+This chapter documents GDB's "just-in-time" (JIT) compilation
+interface.  A JIT compiler is a program or library that generates native
+executable code at runtime and executes it, usually in order to achieve
+good performance while maintaining platform independence.
+
+   Programs that use JIT compilation are normally difficult to debug
+because portions of their code are generated at runtime, instead of
+being loaded from object files, which is where GDB normally finds the
+program's symbols and debug information.  In order to debug programs
+that use JIT compilation, GDB has an interface that allows the program
+to register in-memory symbol files with GDB at runtime.
+
+   If you are using GDB to debug a program that uses this interface,
+then it should work transparently so long as you have not stripped the
+binary.  If you are developing a JIT compiler, then the interface is
+documented in the rest of this chapter.  At this time, the only known
+client of this interface is the LLVM JIT.
+
+   Broadly speaking, the JIT interface mirrors the dynamic loader
+interface.  The JIT compiler communicates with GDB by writing data into
+a global variable and calling a fuction at a well-known symbol.  When
+GDB attaches, it reads a linked list of symbol files from the global
+variable to find existing code, and puts a breakpoint in the function
+so that it can find out about additional code.
+
+* Menu:
+
+* Declarations::                Relevant C struct declarations
+* Registering Code::            Steps to register code
+* Unregistering Code::          Steps to unregister code
+* Custom Debug Info::           Emit debug information in a custom format
+
+
+File: gdb.info,  Node: Declarations,  Next: Registering Code,  Up: JIT Interface
+
+29.1 JIT Declarations
+=====================
+
+These are the relevant struct declarations that a C program should
+include to implement the interface:
+
+     typedef enum
+     {
+       JIT_NOACTION = 0,
+       JIT_REGISTER_FN,
+       JIT_UNREGISTER_FN
+     } jit_actions_t;
+
+     struct jit_code_entry
+     {
+       struct jit_code_entry *next_entry;
+       struct jit_code_entry *prev_entry;
+       const char *symfile_addr;
+       uint64_t symfile_size;
+     };
+
+     struct jit_descriptor
+     {
+       uint32_t version;
+       /* This type should be jit_actions_t, but we use uint32_t
+          to be explicit about the bitwidth.  */
+       uint32_t action_flag;
+       struct jit_code_entry *relevant_entry;
+       struct jit_code_entry *first_entry;
+     };
+
+     /* GDB puts a breakpoint in this function.  */
+     void __attribute__((noinline)) __jit_debug_register_code() { };
+
+     /* Make sure to specify the version statically, because the
+        debugger may check the version before we can set it.  */
+     struct jit_descriptor __jit_debug_descriptor = { 1, 0, 0, 0 };
+
+   If the JIT is multi-threaded, then it is important that the JIT
+synchronize any modifications to this global data properly, which can
+easily be done by putting a global mutex around modifications to these
+structures.
+
+
+File: gdb.info,  Node: Registering Code,  Next: Unregistering Code,  Prev: Declarations,  Up: JIT Interface
+
+29.2 Registering Code
+=====================
+
+To register code with GDB, the JIT should follow this protocol:
+
+   * Generate an object file in memory with symbols and other desired
+     debug information.  The file must include the virtual addresses of
+     the sections.
+
+   * Create a code entry for the file, which gives the start and size
+     of the symbol file.
+
+   * Add it to the linked list in the JIT descriptor.
+
+   * Point the relevant_entry field of the descriptor at the entry.
+
+   * Set `action_flag' to `JIT_REGISTER' and call
+     `__jit_debug_register_code'.
+
+   When GDB is attached and the breakpoint fires, GDB uses the
+`relevant_entry' pointer so it doesn't have to walk the list looking for
+new code.  However, the linked list must still be maintained in order
+to allow GDB to attach to a running process and still find the symbol
+files.
+
+
+File: gdb.info,  Node: Unregistering Code,  Next: Custom Debug Info,  Prev: Registering Code,  Up: JIT Interface
+
+29.3 Unregistering Code
+=======================
+
+If code is freed, then the JIT should use the following protocol:
+
+   * Remove the code entry corresponding to the code from the linked
+     list.
+
+   * Point the `relevant_entry' field of the descriptor at the code
+     entry.
+
+   * Set `action_flag' to `JIT_UNREGISTER' and call
+     `__jit_debug_register_code'.
+
+   If the JIT frees or recompiles code without unregistering it, then
+GDB and the JIT will leak the memory used for the associated symbol
+files.
+
+
+File: gdb.info,  Node: Custom Debug Info,  Prev: Unregistering Code,  Up: JIT Interface
+
+29.4 Custom Debug Info
+======================
+
+Generating debug information in platform-native file formats (like ELF
+or COFF) may be an overkill for JIT compilers; especially if all the
+debug info is used for is displaying a meaningful backtrace.  The issue
+can be resolved by having the JIT writers decide on a debug info format
+and also provide a reader that parses the debug info generated by the
+JIT compiler.  This section gives a brief overview on writing such a
+parser.  More specific details can be found in the source file
+`gdb/jit-reader.in', which is also installed as a header at
+`INCLUDEDIR/gdb/jit-reader.h' for easy inclusion.
+
+   The reader is implemented as a shared object (so this functionality
+is not available on platforms which don't allow loading shared objects
+at runtime).  Two GDB commands, `jit-reader-load' and
+`jit-reader-unload' are provided, to be used to load and unload the
+readers from a preconfigured directory.  Once loaded, the shared object
+is used the parse the debug information emitted by the JIT compiler.
+
+* Menu:
+
+* Using JIT Debug Info Readers::       How to use supplied readers correctly
+* Writing JIT Debug Info Readers::     Creating a debug-info reader
+
+
+File: gdb.info,  Node: Using JIT Debug Info Readers,  Next: Writing JIT Debug Info Readers,  Up: Custom Debug Info
+
+29.4.1 Using JIT Debug Info Readers
+-----------------------------------
+
+Readers can be loaded and unloaded using the `jit-reader-load' and
+`jit-reader-unload' commands.
+
+`jit-reader-load READER-NAME'
+     Load the JIT reader named READER-NAME.  On a UNIX system, this
+     will usually load `LIBDIR/gdb/READER-NAME', where LIBDIR is the
+     system library directory, usually `/usr/local/lib'.  Only one
+     reader can be active at a time; trying to load a second reader
+     when one is already loaded will result in GDB reporting an error.
+     A new JIT reader can be loaded by first unloading the current one
+     using `jit-reader-load' and then invoking `jit-reader-load'.
+
+`jit-reader-unload'
+     Unload the currently loaded JIT reader.
+
+
+
+File: gdb.info,  Node: Writing JIT Debug Info Readers,  Prev: Using JIT Debug Info Readers,  Up: Custom Debug Info
+
+29.4.2 Writing JIT Debug Info Readers
+-------------------------------------
+
+As mentioned, a reader is essentially a shared object conforming to a
+certain ABI.  This ABI is described in `jit-reader.h'.
+
+   `jit-reader.h' defines the structures, macros and functions required
+to write a reader.  It is installed (along with GDB), in
+`INCLUDEDIR/gdb' where INCLUDEDIR is the system include directory.
+
+   Readers need to be released under a GPL compatible license.  A reader
+can be declared as released under such a license by placing the macro
+`GDB_DECLARE_GPL_COMPATIBLE_READER' in a source file.
+
+   The entry point for readers is the symbol `gdb_init_reader', which
+is expected to be a function with the prototype
+
+     extern struct gdb_reader_funcs *gdb_init_reader (void);
+
+   `struct gdb_reader_funcs' contains a set of pointers to callback
+functions.  These functions are executed to read the debug info
+generated by the JIT compiler (`read'), to unwind stack frames
+(`unwind') and to create canonical frame IDs (`get_Frame_id').  It also
+has a callback that is called when the reader is being unloaded
+(`destroy').  The struct looks like this
+
+     struct gdb_reader_funcs
+     {
+       /* Must be set to GDB_READER_INTERFACE_VERSION.  */
+       int reader_version;
+
+       /* For use by the reader.  */
+       void *priv_data;
+
+       gdb_read_debug_info *read;
+       gdb_unwind_frame *unwind;
+       gdb_get_frame_id *get_frame_id;
+       gdb_destroy_reader *destroy;
+     };
+
+   The callbacks are provided with another set of callbacks by GDB to
+do their job.  For `read', these callbacks are passed in a `struct
+gdb_symbol_callbacks' and for `unwind' and `get_frame_id', in a `struct
+gdb_unwind_callbacks'.  `struct gdb_symbol_callbacks' has callbacks to
+create new object files and new symbol tables inside those object
+files.  `struct gdb_unwind_callbacks' has callbacks to read registers
+off the current frame and to write out the values of the registers in
+the previous frame.  Both have a callback (`target_read') to read bytes
+off the target's address space.
+
+
+File: gdb.info,  Node: In-Process Agent,  Next: GDB Bugs,  Prev: JIT Interface,  Up: Top
+
+30 In-Process Agent
+*******************
+
+The traditional debugging model is conceptually low-speed, but works
+fine, because most bugs can be reproduced in debugging-mode execution.
+However, as multi-core or many-core processors are becoming mainstream,
+and multi-threaded programs become more and more popular, there should
+be more and more bugs that only manifest themselves at normal-mode
+execution, for example, thread races, because debugger's interference
+with the program's timing may conceal the bugs.  On the other hand, in
+some applications, it is not feasible for the debugger to interrupt the
+program's execution long enough for the developer to learn anything
+helpful about its behavior.  If the program's correctness depends on
+its real-time behavior, delays introduced by a debugger might cause the
+program to fail, even when the code itself is correct.  It is useful to
+be able to observe the program's behavior without interrupting it.
+
+   Therefore, traditional debugging model is too intrusive to reproduce
+some bugs.  In order to reduce the interference with the program, we can
+reduce the number of operations performed by debugger.  The "In-Process
+Agent", a shared library, is running within the same process with
+inferior, and is able to perform some debugging operations itself.  As
+a result, debugger is only involved when necessary, and performance of
+debugging can be improved accordingly.  Note that interference with
+program can be reduced but can't be removed completely, because the
+in-process agent will still stop or slow down the program.
+
+   The in-process agent can interpret and execute Agent Expressions
+(*note Agent Expressions::) during performing debugging operations.  The
+agent expressions can be used for different purposes, such as collecting
+data in tracepoints, and condition evaluation in breakpoints.
+
+   You can control whether the in-process agent is used as an aid for
+debugging with the following commands:
+
+`set agent on'
+     Causes the in-process agent to perform some operations on behalf
+     of the debugger.  Just which operations requested by the user will
+     be done by the in-process agent depends on the its capabilities.
+     For example, if you request to evaluate breakpoint conditions in
+     the in-process agent, and the in-process agent has such capability
+     as well, then breakpoint conditions will be evaluated in the
+     in-process agent.
+
+`set agent off'
+     Disables execution of debugging operations by the in-process
+     agent.  All of the operations will be performed by GDB.
+
+`show agent'
+     Display the current setting of execution of debugging operations by
+     the in-process agent.
+
+* Menu:
+
+* In-Process Agent Protocol::
+
+
+File: gdb.info,  Node: In-Process Agent Protocol,  Up: In-Process Agent
+
+30.1 In-Process Agent Protocol
+==============================
+
+The in-process agent is able to communicate with both GDB and GDBserver
+(*note In-Process Agent::).  This section documents the protocol used
+for communications between GDB or GDBserver and the IPA.  In general,
+GDB or GDBserver sends commands (*note IPA Protocol Commands::) and
+data to in-process agent, and then in-process agent replies back with
+the return result of the command, or some other information.  The data
+sent to in-process agent is composed of primitive data types, such as
+4-byte or 8-byte type, and composite types, which are called objects
+(*note IPA Protocol Objects::).
+
+* Menu:
+
+* IPA Protocol Objects::
+* IPA Protocol Commands::
+
+
+File: gdb.info,  Node: IPA Protocol Objects,  Next: IPA Protocol Commands,  Up: In-Process Agent Protocol
+
+30.1.1 IPA Protocol Objects
+---------------------------
+
+The commands sent to and results received from agent may contain some
+complex data types called "objects".
+
+   The in-process agent is running on the same machine with GDB or
+GDBserver, so it doesn't have to handle as much differences between two
+ends as remote protocol (*note Remote Protocol::) tries to handle.
+However, there are still some differences of two ends in two processes:
+
+  1. word size.  On some 64-bit machines, GDB or GDBserver can be
+     compiled as a 64-bit executable, while in-process agent is a
+     32-bit one.
+
+  2. ABI.  Some machines may have multiple types of ABI, GDB or
+     GDBserver is compiled with one, and in-process agent is compiled
+     with the other one.
+
+   Here are the IPA Protocol Objects:
+
+  1. agent expression object.  It represents an agent expression (*note
+     Agent Expressions::).
+
+  2. tracepoint action object.  It represents a tracepoint action
+     (*note Tracepoint Action Lists: Tracepoint Actions.) to collect
+     registers, memory, static trace data and to evaluate expression.
+
+  3. tracepoint object.  It represents a tracepoint (*note
+     Tracepoints::).
+
+
+   The following table describes important attributes of each IPA
+protocol object:
+
+Name                   Size           Description
+--------------------------------------------------------------------------- 
+_agent expression                     
+object_                               
+length                 4              length of bytes code
+byte code              LENGTH         contents of byte code
+_tracepoint action                    
+for collecting                        
+memory_                               
+'M'                    1              type of tracepoint action
+addr                   8              if BASEREG is `-1', ADDR is the
+                                      address of the lowest byte to
+                                      collect, otherwise ADDR is the
+                                      offset of BASEREG for memory
+                                      collecting.
+len                    8              length of memory for collecting
+basereg                4              the register number containing the
+                                      starting memory address for
+                                      collecting.
+_tracepoint action                    
+for collecting                        
+registers_                            
+'R'                    1              type of tracepoint action
+_tracepoint action                    
+for collecting static                 
+trace data_                           
+'L'                    1              type of tracepoint action
+_tracepoint action                    
+for expression                        
+evaluation_                           
+'X'                    1              type of tracepoint action
+agent expression       length of      *Note agent expression object::
+_tracepoint object_                   
+number                 4              number of tracepoint
+address                8              address of tracepoint inserted on
+type                   4              type of tracepoint
+enabled                1              enable or disable of tracepoint
+step_count             8              step
+pass_count             8              pass
+numactions             4              number of tracepoint actions
+hit count              8              hit count
+trace frame usage      8              trace frame usage
+compiled_cond          8              compiled condition
+orig_size              8              orig size
+condition              4 if           zero if condition is NULL,
+                       condition is   otherwise is *Note agent expression
+                       NULL           object::
+                       otherwise      
+                       length of      
+                       *Note agent    
+                       expression     
+                       object::       
+actions                variable       numactions number of *Note
+                                      tracepoint action object::
+
+
+File: gdb.info,  Node: IPA Protocol Commands,  Prev: IPA Protocol Objects,  Up: In-Process Agent Protocol
+
+30.1.2 IPA Protocol Commands
+----------------------------
+
+The spaces in each command are delimiters to ease reading this commands
+specification.  They don't exist in real commands.
+
+`FastTrace:TRACEPOINT_OBJECT GDB_JUMP_PAD_HEAD'
+     Installs a new fast tracepoint described by TRACEPOINT_OBJECT
+     (*note tracepoint object::).  GDB_JUMP_PAD_HEAD, 8-byte long, is
+     the head of "jumppad", which is used to jump to data collection
+     routine in IPA finally.
+
+     Replies:
+    `OK TARGET_ADDRESS GDB_JUMP_PAD_HEAD FJUMP_SIZE FJUMP'
+          TARGET_ADDRESS is address of tracepoint in the inferior.
+          GDB_JUMP_PAD_HEAD is updated head of jumppad.  Both of
+          TARGET_ADDRESS and GDB_JUMP_PAD_HEAD are 8-byte long.  FJUMP
+          contains a sequence of instructions jump to jumppad entry.
+          FJUMP_SIZE, 4-byte long, is the size of FJUMP.
+
+    `E NN'
+          for an error
+
+
+`qTfSTM'
+     *Note qTfSTM::.
+
+`qTsSTM'
+     *Note qTsSTM::.
+
+`qTSTMat'
+     *Note qTSTMat::.
+
+`probe_marker_at:ADDRESS'
+     Asks in-process agent to probe the marker at ADDRESS.
+
+     Replies:
+    `E NN'
+          for an error
+
+`unprobe_marker_at:ADDRESS'
+     Asks in-process agent to unprobe the marker at ADDRESS.
+
+
+File: gdb.info,  Node: GDB Bugs,  Next: Command Line Editing,  Prev: In-Process Agent,  Up: Top
+
+31 Reporting Bugs in GDB
+************************
+
+Your bug reports play an essential role in making GDB reliable.
+
+   Reporting a bug may help you by bringing a solution to your problem,
+or it may not.  But in any case the principal function of a bug report
+is to help the entire community by making the next version of GDB work
+better.  Bug reports are your contribution to the maintenance of GDB.
+
+   In order for a bug report to serve its purpose, you must include the
+information that enables us to fix the bug.
+
+* Menu:
+
+* Bug Criteria::                Have you found a bug?
+* Bug Reporting::               How to report bugs
+
+
+File: gdb.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: GDB Bugs
+
+31.1 Have You Found a Bug?
+==========================
+
+If you are not sure whether you have found a bug, here are some
+guidelines:
+
+   * If the debugger gets a fatal signal, for any input whatever, that
+     is a GDB bug.  Reliable debuggers never crash.
+
+   * If GDB produces an error message for valid input, that is a bug.
+     (Note that if you're cross debugging, the problem may also be
+     somewhere in the connection to the target.)
+
+   * If GDB does not produce an error message for invalid input, that
+     is a bug.  However, you should note that your idea of "invalid
+     input" might be our idea of "an extension" or "support for
+     traditional practice".
+
+   * If you are an experienced user of debugging tools, your suggestions
+     for improvement of GDB are welcome in any case.
+
+
+File: gdb.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: GDB Bugs
+
+31.2 How to Report Bugs
+=======================
+
+A number of companies and individuals offer support for GNU products.
+If you obtained GDB from a support organization, we recommend you
+contact that organization first.
+
+   You can find contact information for many support companies and
+individuals in the file `etc/SERVICE' in the GNU Emacs distribution.
+
+   In any event, we also recommend that you submit bug reports for GDB.
+The preferred method is to submit them directly using GDB's Bugs web
+page (http://www.gnu.org/software/gdb/bugs/).  Alternatively, the
+e-mail gateway <bug-gdb at gnu.org> can be used.
+
+   *Do not send bug reports to `info-gdb', or to `help-gdb', or to any
+newsgroups.*  Most users of GDB do not want to receive bug reports.
+Those that do have arranged to receive `bug-gdb'.
+
+   The mailing list `bug-gdb' has a newsgroup `gnu.gdb.bug' which
+serves as a repeater.  The mailing list and the newsgroup carry exactly
+the same messages.  Often people think of posting bug reports to the
+newsgroup instead of mailing them.  This appears to work, but it has one
+problem which can be crucial: a newsgroup posting often lacks a mail
+path back to the sender.  Thus, if we need to ask for more information,
+we may be unable to reach you.  For this reason, it is better to send
+bug reports to the mailing list.
+
+   The fundamental principle of reporting bugs usefully is this:
+*report all the facts*.  If you are not sure whether to state a fact or
+leave it out, state it!
+
+   Often people omit facts because they think they know what causes the
+problem and assume that some details do not matter.  Thus, you might
+assume that the name of the variable you use in an example does not
+matter.  Well, probably it does not, but one cannot be sure.  Perhaps
+the bug is a stray memory reference which happens to fetch from the
+location where that name is stored in memory; perhaps, if the name were
+different, the contents of that location would fool the debugger into
+doing the right thing despite the bug.  Play it safe and give a
+specific, complete example.  That is the easiest thing for you to do,
+and the most helpful.
+
+   Keep in mind that the purpose of a bug report is to enable us to fix
+the bug.  It may be that the bug has been reported previously, but
+neither you nor we can know that unless your bug report is complete and
+self-contained.
+
+   Sometimes people give a few sketchy facts and ask, "Does this ring a
+bell?"  Those bug reports are useless, and we urge everyone to _refuse
+to respond to them_ except to chide the sender to report bugs properly.
+
+   To enable us to fix the bug, you should include all these things:
+
+   * The version of GDB.  GDB announces it if you start with no
+     arguments; you can also print it at any time using `show version'.
+
+     Without this, we will not know whether there is any point in
+     looking for the bug in the current version of GDB.
+
+   * The type of machine you are using, and the operating system name
+     and version number.
+
+   * What compiler (and its version) was used to compile GDB--e.g.
+     "gcc-2.8.1".
+
+   * What compiler (and its version) was used to compile the program
+     you are debugging--e.g.  "gcc-2.8.1", or "HP92453-01 A.10.32.03 HP
+     C Compiler".  For GCC, you can say `gcc --version' to get this
+     information; for other compilers, see the documentation for those
+     compilers.
+
+   * The command arguments you gave the compiler to compile your
+     example and observe the bug.  For example, did you use `-O'?  To
+     guarantee you will not omit something important, list them all.  A
+     copy of the Makefile (or the output from make) is sufficient.
+
+     If we were to try to guess the arguments, we would probably guess
+     wrong and then we might not encounter the bug.
+
+   * A complete input script, and all necessary source files, that will
+     reproduce the bug.
+
+   * A description of what behavior you observe that you believe is
+     incorrect.  For example, "It gets a fatal signal."
+
+     Of course, if the bug is that GDB gets a fatal signal, then we
+     will certainly notice it.  But if the bug is incorrect output, we
+     might not notice unless it is glaringly wrong.  You might as well
+     not give us a chance to make a mistake.
+
+     Even if the problem you experience is a fatal signal, you should
+     still say so explicitly.  Suppose something strange is going on,
+     such as, your copy of GDB is out of synch, or you have encountered
+     a bug in the C library on your system.  (This has happened!)  Your
+     copy might crash and ours would not.  If you told us to expect a
+     crash, then when ours fails to crash, we would know that the bug
+     was not happening for us.  If you had not told us to expect a
+     crash, then we would not be able to draw any conclusion from our
+     observations.
+
+     To collect all this information, you can use a session recording
+     program such as `script', which is available on many Unix systems.
+     Just run your GDB session inside `script' and then include the
+     `typescript' file with your bug report.
+
+     Another way to record a GDB session is to run GDB inside Emacs and
+     then save the entire buffer to a file.
+
+   * If you wish to suggest changes to the GDB source, send us context
+     diffs.  If you even discuss something in the GDB source, refer to
+     it by context, not by line number.
+
+     The line numbers in our development sources will not match those
+     in your sources.  Your line numbers would convey no useful
+     information to us.
+
+
+   Here are some things that are not necessary:
+
+   * A description of the envelope of the bug.
+
+     Often people who encounter a bug spend a lot of time investigating
+     which changes to the input file will make the bug go away and which
+     changes will not affect it.
+
+     This is often time consuming and not very useful, because the way
+     we will find the bug is by running a single example under the
+     debugger with breakpoints, not by pure deduction from a series of
+     examples.  We recommend that you save your time for something else.
+
+     Of course, if you can find a simpler example to report _instead_
+     of the original one, that is a convenience for us.  Errors in the
+     output will be easier to spot, running under the debugger will take
+     less time, and so on.
+
+     However, simplification is not vital; if you do not want to do
+     this, report the bug anyway and send us the entire test case you
+     used.
+
+   * A patch for the bug.
+
+     A patch for the bug does help us if it is a good one.  But do not
+     omit the necessary information, such as the test case, on the
+     assumption that a patch is all we need.  We might see problems
+     with your patch and decide to fix the problem another way, or we
+     might not understand it at all.
+
+     Sometimes with a program as complicated as GDB it is very hard to
+     construct an example that will make the program follow a certain
+     path through the code.  If you do not send us the example, we will
+     not be able to construct one, so we will not be able to verify
+     that the bug is fixed.
+
+     And if we cannot understand what bug you are trying to fix, or why
+     your patch should be an improvement, we will not install it.  A
+     test case will help us to understand.
+
+   * A guess about what the bug is or what it depends on.
+
+     Such guesses are usually wrong.  Even we cannot guess right about
+     such things without first using the debugger to find the facts.
+
+
+File: gdb.info,  Node: Command Line Editing,  Next: Using History Interactively,  Prev: GDB Bugs,  Up: Top
+
+32 Command Line Editing
+***********************
+
+This chapter describes the basic features of the GNU command line
+editing interface.
+
+* Menu:
+
+* Introduction and Notation::	Notation used in this text.
+* Readline Interaction::	The minimum set of commands for editing a line.
+* Readline Init File::		Customizing Readline from a user's view.
+* Bindable Readline Commands::	A description of most of the Readline commands
+				available for binding
+* Readline vi Mode::		A short description of how to make Readline
+				behave like the vi editor.
+
+
+File: gdb.info,  Node: Introduction and Notation,  Next: Readline Interaction,  Up: Command Line Editing
+
+32.1 Introduction to Line Editing
+=================================
+
+The following paragraphs describe the notation used to represent
+keystrokes.
+
+   The text `C-k' is read as `Control-K' and describes the character
+produced when the <k> key is pressed while the Control key is depressed.
+
+   The text `M-k' is read as `Meta-K' and describes the character
+produced when the Meta key (if you have one) is depressed, and the <k>
+key is pressed.  The Meta key is labeled <ALT> on many keyboards.  On
+keyboards with two keys labeled <ALT> (usually to either side of the
+space bar), the <ALT> on the left side is generally set to work as a
+Meta key.  The <ALT> key on the right may also be configured to work as
+a Meta key or may be configured as some other modifier, such as a
+Compose key for typing accented characters.
+
+   If you do not have a Meta or <ALT> key, or another key working as a
+Meta key, the identical keystroke can be generated by typing <ESC>
+_first_, and then typing <k>.  Either process is known as "metafying"
+the <k> key.
+
+   The text `M-C-k' is read as `Meta-Control-k' and describes the
+character produced by "metafying" `C-k'.
+
+   In addition, several keys have their own names.  Specifically,
+<DEL>, <ESC>, <LFD>, <SPC>, <RET>, and <TAB> all stand for themselves
+when seen in this text, or in an init file (*note Readline Init File::).
+If your keyboard lacks a <LFD> key, typing <C-j> will produce the
+desired character.  The <RET> key may be labeled <Return> or <Enter> on
+some keyboards.
+
+
+File: gdb.info,  Node: Readline Interaction,  Next: Readline Init File,  Prev: Introduction and Notation,  Up: Command Line Editing
+
+32.2 Readline Interaction
+=========================
+
+Often during an interactive session you type in a long line of text,
+only to notice that the first word on the line is misspelled.  The
+Readline library gives you a set of commands for manipulating the text
+as you type it in, allowing you to just fix your typo, and not forcing
+you to retype the majority of the line.  Using these editing commands,
+you move the cursor to the place that needs correction, and delete or
+insert the text of the corrections.  Then, when you are satisfied with
+the line, you simply press <RET>.  You do not have to be at the end of
+the line to press <RET>; the entire line is accepted regardless of the
+location of the cursor within the line.
+
+* Menu:
+
+* Readline Bare Essentials::	The least you need to know about Readline.
+* Readline Movement Commands::	Moving about the input line.
+* Readline Killing Commands::	How to delete text, and how to get it back!
+* Readline Arguments::		Giving numeric arguments to commands.
+* Searching::			Searching through previous lines.
+
+
+File: gdb.info,  Node: Readline Bare Essentials,  Next: Readline Movement Commands,  Up: Readline Interaction
+
+32.2.1 Readline Bare Essentials
+-------------------------------
+
+In order to enter characters into the line, simply type them.  The typed
+character appears where the cursor was, and then the cursor moves one
+space to the right.  If you mistype a character, you can use your erase
+character to back up and delete the mistyped character.
+
+   Sometimes you may mistype a character, and not notice the error
+until you have typed several other characters.  In that case, you can
+type `C-b' to move the cursor to the left, and then correct your
+mistake.  Afterwards, you can move the cursor to the right with `C-f'.
+
+   When you add text in the middle of a line, you will notice that
+characters to the right of the cursor are `pushed over' to make room
+for the text that you have inserted.  Likewise, when you delete text
+behind the cursor, characters to the right of the cursor are `pulled
+back' to fill in the blank space created by the removal of the text.  A
+list of the bare essentials for editing the text of an input line
+follows.
+
+`C-b'
+     Move back one character.
+
+`C-f'
+     Move forward one character.
+
+<DEL> or <Backspace>
+     Delete the character to the left of the cursor.
+
+`C-d'
+     Delete the character underneath the cursor.
+
+Printing characters
+     Insert the character into the line at the cursor.
+
+`C-_' or `C-x C-u'
+     Undo the last editing command.  You can undo all the way back to an
+     empty line.
+
+(Depending on your configuration, the <Backspace> key be set to delete
+the character to the left of the cursor and the <DEL> key set to delete
+the character underneath the cursor, like `C-d', rather than the
+character to the left of the cursor.)
+
+
+File: gdb.info,  Node: Readline Movement Commands,  Next: Readline Killing Commands,  Prev: Readline Bare Essentials,  Up: Readline Interaction
+
+32.2.2 Readline Movement Commands
+---------------------------------
+
+The above table describes the most basic keystrokes that you need in
+order to do editing of the input line.  For your convenience, many
+other commands have been added in addition to `C-b', `C-f', `C-d', and
+<DEL>.  Here are some commands for moving more rapidly about the line.
+
+`C-a'
+     Move to the start of the line.
+
+`C-e'
+     Move to the end of the line.
+
+`M-f'
+     Move forward a word, where a word is composed of letters and
+     digits.
+
+`M-b'
+     Move backward a word.
+
+`C-l'
+     Clear the screen, reprinting the current line at the top.
+
+   Notice how `C-f' moves forward a character, while `M-f' moves
+forward a word.  It is a loose convention that control keystrokes
+operate on characters while meta keystrokes operate on words.
+
+
+File: gdb.info,  Node: Readline Killing Commands,  Next: Readline Arguments,  Prev: Readline Movement Commands,  Up: Readline Interaction
+
+32.2.3 Readline Killing Commands
+--------------------------------
+
+"Killing" text means to delete the text from the line, but to save it
+away for later use, usually by "yanking" (re-inserting) it back into
+the line.  (`Cut' and `paste' are more recent jargon for `kill' and
+`yank'.)
+
+   If the description for a command says that it `kills' text, then you
+can be sure that you can get the text back in a different (or the same)
+place later.
+
+   When you use a kill command, the text is saved in a "kill-ring".
+Any number of consecutive kills save all of the killed text together, so
+that when you yank it back, you get it all.  The kill ring is not line
+specific; the text that you killed on a previously typed line is
+available to be yanked back later, when you are typing another line.  
+
+   Here is the list of commands for killing text.
+
+`C-k'
+     Kill the text from the current cursor position to the end of the
+     line.
+
+`M-d'
+     Kill from the cursor to the end of the current word, or, if between
+     words, to the end of the next word.  Word boundaries are the same
+     as those used by `M-f'.
+
+`M-<DEL>'
+     Kill from the cursor the start of the current word, or, if between
+     words, to the start of the previous word.  Word boundaries are the
+     same as those used by `M-b'.
+
+`C-w'
+     Kill from the cursor to the previous whitespace.  This is
+     different than `M-<DEL>' because the word boundaries differ.
+
+
+   Here is how to "yank" the text back into the line.  Yanking means to
+copy the most-recently-killed text from the kill buffer.
+
+`C-y'
+     Yank the most recently killed text back into the buffer at the
+     cursor.
+
+`M-y'
+     Rotate the kill-ring, and yank the new top.  You can only do this
+     if the prior command is `C-y' or `M-y'.
+
+
+File: gdb.info,  Node: Readline Arguments,  Next: Searching,  Prev: Readline Killing Commands,  Up: Readline Interaction
+
+32.2.4 Readline Arguments
+-------------------------
+
+You can pass numeric arguments to Readline commands.  Sometimes the
+argument acts as a repeat count, other times it is the sign of the
+argument that is significant.  If you pass a negative argument to a
+command which normally acts in a forward direction, that command will
+act in a backward direction.  For example, to kill text back to the
+start of the line, you might type `M-- C-k'.
+
+   The general way to pass numeric arguments to a command is to type
+meta digits before the command.  If the first `digit' typed is a minus
+sign (`-'), then the sign of the argument will be negative.  Once you
+have typed one meta digit to get the argument started, you can type the
+remainder of the digits, and then the command.  For example, to give
+the `C-d' command an argument of 10, you could type `M-1 0 C-d', which
+will delete the next ten characters on the input line.
+
+
+File: gdb.info,  Node: Searching,  Prev: Readline Arguments,  Up: Readline Interaction
+
+32.2.5 Searching for Commands in the History
+--------------------------------------------
+
+Readline provides commands for searching through the command history
+for lines containing a specified string.  There are two search modes:
+"incremental" and "non-incremental".
+
+   Incremental searches begin before the user has finished typing the
+search string.  As each character of the search string is typed,
+Readline displays the next entry from the history matching the string
+typed so far.  An incremental search requires only as many characters
+as needed to find the desired history entry.  To search backward in the
+history for a particular string, type `C-r'.  Typing `C-s' searches
+forward through the history.  The characters present in the value of
+the `isearch-terminators' variable are used to terminate an incremental
+search.  If that variable has not been assigned a value, the <ESC> and
+`C-J' characters will terminate an incremental search.  `C-g' will
+abort an incremental search and restore the original line.  When the
+search is terminated, the history entry containing the search string
+becomes the current line.
+
+   To find other matching entries in the history list, type `C-r' or
+`C-s' as appropriate.  This will search backward or forward in the
+history for the next entry matching the search string typed so far.
+Any other key sequence bound to a Readline command will terminate the
+search and execute that command.  For instance, a <RET> will terminate
+the search and accept the line, thereby executing the command from the
+history list.  A movement command will terminate the search, make the
+last line found the current line, and begin editing.
+
+   Readline remembers the last incremental search string.  If two
+`C-r's are typed without any intervening characters defining a new
+search string, any remembered search string is used.
+
+   Non-incremental searches read the entire search string before
+starting to search for matching history lines.  The search string may be
+typed by the user or be part of the contents of the current line.
+
+
+File: gdb.info,  Node: Readline Init File,  Next: Bindable Readline Commands,  Prev: Readline Interaction,  Up: Command Line Editing
+
+32.3 Readline Init File
+=======================
+
+Although the Readline library comes with a set of Emacs-like
+keybindings installed by default, it is possible to use a different set
+of keybindings.  Any user can customize programs that use Readline by
+putting commands in an "inputrc" file, conventionally in his home
+directory.  The name of this file is taken from the value of the
+environment variable `INPUTRC'.  If that variable is unset, the default
+is `~/.inputrc'.  If that file does not exist or cannot be read, the
+ultimate default is `/etc/inputrc'.
+
+   When a program which uses the Readline library starts up, the init
+file is read, and the key bindings are set.
+
+   In addition, the `C-x C-r' command re-reads this init file, thus
+incorporating any changes that you might have made to it.
+
+* Menu:
+
+* Readline Init File Syntax::	Syntax for the commands in the inputrc file.
+
+* Conditional Init Constructs::	Conditional key bindings in the inputrc file.
+
+* Sample Init File::		An example inputrc file.
+
+
+File: gdb.info,  Node: Readline Init File Syntax,  Next: Conditional Init Constructs,  Up: Readline Init File
+
+32.3.1 Readline Init File Syntax
+--------------------------------
+
+There are only a few basic constructs allowed in the Readline init
+file.  Blank lines are ignored.  Lines beginning with a `#' are
+comments.  Lines beginning with a `$' indicate conditional constructs
+(*note Conditional Init Constructs::).  Other lines denote variable
+settings and key bindings.
+
+Variable Settings
+     You can modify the run-time behavior of Readline by altering the
+     values of variables in Readline using the `set' command within the
+     init file.  The syntax is simple:
+
+          set VARIABLE VALUE
+
+     Here, for example, is how to change from the default Emacs-like
+     key binding to use `vi' line editing commands:
+
+          set editing-mode vi
+
+     Variable names and values, where appropriate, are recognized
+     without regard to case.  Unrecognized variable names are ignored.
+
+     Boolean variables (those that can be set to on or off) are set to
+     on if the value is null or empty, ON (case-insensitive), or 1.
+     Any other value results in the variable being set to off.
+
+     A great deal of run-time behavior is changeable with the following
+     variables.
+
+    `bell-style'
+          Controls what happens when Readline wants to ring the
+          terminal bell.  If set to `none', Readline never rings the
+          bell.  If set to `visible', Readline uses a visible bell if
+          one is available.  If set to `audible' (the default),
+          Readline attempts to ring the terminal's bell.
+
+    `bind-tty-special-chars'
+          If set to `on', Readline attempts to bind the control
+          characters treated specially by the kernel's terminal driver
+          to their Readline equivalents.
+
+    `comment-begin'
+          The string to insert at the beginning of the line when the
+          `insert-comment' command is executed.  The default value is
+          `"#"'.
+
+    `completion-display-width'
+          The number of screen columns used to display possible matches
+          when performing completion.  The value is ignored if it is
+          less than 0 or greater than the terminal screen width.  A
+          value of 0 will cause matches to be displayed one per line.
+          The default value is -1.
+
+    `completion-ignore-case'
+          If set to `on', Readline performs filename matching and
+          completion in a case-insensitive fashion.  The default value
+          is `off'.
+
+    `completion-map-case'
+          If set to `on', and COMPLETION-IGNORE-CASE is enabled,
+          Readline treats hyphens (`-') and underscores (`_') as
+          equivalent when performing case-insensitive filename matching
+          and completion.
+
+    `completion-prefix-display-length'
+          The length in characters of the common prefix of a list of
+          possible completions that is displayed without modification.
+          When set to a value greater than zero, common prefixes longer
+          than this value are replaced with an ellipsis when displaying
+          possible completions.
+
+    `completion-query-items'
+          The number of possible completions that determines when the
+          user is asked whether the list of possibilities should be
+          displayed.  If the number of possible completions is greater
+          than this value, Readline will ask the user whether or not he
+          wishes to view them; otherwise, they are simply listed.  This
+          variable must be set to an integer value greater than or
+          equal to 0.  A negative value means Readline should never ask.
+          The default limit is `100'.
+
+    `convert-meta'
+          If set to `on', Readline will convert characters with the
+          eighth bit set to an ASCII key sequence by stripping the
+          eighth bit and prefixing an <ESC> character, converting them
+          to a meta-prefixed key sequence.  The default value is `on'.
+
+    `disable-completion'
+          If set to `On', Readline will inhibit word completion.
+          Completion  characters will be inserted into the line as if
+          they had been mapped to `self-insert'.  The default is `off'.
+
+    `editing-mode'
+          The `editing-mode' variable controls which default set of key
+          bindings is used.  By default, Readline starts up in Emacs
+          editing mode, where the keystrokes are most similar to Emacs.
+          This variable can be set to either `emacs' or `vi'.
+
+    `echo-control-characters'
+          When set to `on', on operating systems that indicate they
+          support it, readline echoes a character corresponding to a
+          signal generated from the keyboard.  The default is `on'.
+
+    `enable-keypad'
+          When set to `on', Readline will try to enable the application
+          keypad when it is called.  Some systems need this to enable
+          the arrow keys.  The default is `off'.
+
+    `enable-meta-key'
+          When set to `on', Readline will try to enable any meta
+          modifier key the terminal claims to support when it is
+          called.  On many terminals, the meta key is used to send
+          eight-bit characters.  The default is `on'.
+
+    `expand-tilde'
+          If set to `on', tilde expansion is performed when Readline
+          attempts word completion.  The default is `off'.
+
+    `history-preserve-point'
+          If set to `on', the history code attempts to place the point
+          (the current cursor position) at the same location on each
+          history line retrieved with `previous-history' or
+          `next-history'.  The default is `off'.
+
+    `history-size'
+          Set the maximum number of history entries saved in the
+          history list.  If set to zero, the number of entries in the
+          history list is not limited.
+
+    `horizontal-scroll-mode'
+          This variable can be set to either `on' or `off'.  Setting it
+          to `on' means that the text of the lines being edited will
+          scroll horizontally on a single screen line when they are
+          longer than the width of the screen, instead of wrapping onto
+          a new screen line.  By default, this variable is set to `off'.
+
+    `input-meta'
+          If set to `on', Readline will enable eight-bit input (it will
+          not clear the eighth bit in the characters it reads),
+          regardless of what the terminal claims it can support.  The
+          default value is `off'.  The name `meta-flag' is a synonym
+          for this variable.
+
+    `isearch-terminators'
+          The string of characters that should terminate an incremental
+          search without subsequently executing the character as a
+          command (*note Searching::).  If this variable has not been
+          given a value, the characters <ESC> and `C-J' will terminate
+          an incremental search.
+
+    `keymap'
+          Sets Readline's idea of the current keymap for key binding
+          commands.  Acceptable `keymap' names are `emacs',
+          `emacs-standard', `emacs-meta', `emacs-ctlx', `vi', `vi-move',
+          `vi-command', and `vi-insert'.  `vi' is equivalent to
+          `vi-command'; `emacs' is equivalent to `emacs-standard'.  The
+          default value is `emacs'.  The value of the `editing-mode'
+          variable also affects the default keymap.
+
+    `mark-directories'
+          If set to `on', completed directory names have a slash
+          appended.  The default is `on'.
+
+    `mark-modified-lines'
+          This variable, when set to `on', causes Readline to display an
+          asterisk (`*') at the start of history lines which have been
+          modified.  This variable is `off' by default.
+
+    `mark-symlinked-directories'
+          If set to `on', completed names which are symbolic links to
+          directories have a slash appended (subject to the value of
+          `mark-directories').  The default is `off'.
+
+    `match-hidden-files'
+          This variable, when set to `on', causes Readline to match
+          files whose names begin with a `.' (hidden files) when
+          performing filename completion.  If set to `off', the leading
+          `.' must be supplied by the user in the filename to be
+          completed.  This variable is `on' by default.
+
+    `menu-complete-display-prefix'
+          If set to `on', menu completion displays the common prefix of
+          the list of possible completions (which may be empty) before
+          cycling through the list.  The default is `off'.
+
+    `output-meta'
+          If set to `on', Readline will display characters with the
+          eighth bit set directly rather than as a meta-prefixed escape
+          sequence.  The default is `off'.
+
+    `page-completions'
+          If set to `on', Readline uses an internal `more'-like pager
+          to display a screenful of possible completions at a time.
+          This variable is `on' by default.
+
+    `print-completions-horizontally'
+          If set to `on', Readline will display completions with matches
+          sorted horizontally in alphabetical order, rather than down
+          the screen.  The default is `off'.
+
+    `revert-all-at-newline'
+          If set to `on', Readline will undo all changes to history
+          lines before returning when `accept-line' is executed.  By
+          default, history lines may be modified and retain individual
+          undo lists across calls to `readline'.  The default is `off'.
+
+    `show-all-if-ambiguous'
+          This alters the default behavior of the completion functions.
+          If set to `on', words which have more than one possible
+          completion cause the matches to be listed immediately instead
+          of ringing the bell.  The default value is `off'.
+
+    `show-all-if-unmodified'
+          This alters the default behavior of the completion functions
+          in a fashion similar to SHOW-ALL-IF-AMBIGUOUS.  If set to
+          `on', words which have more than one possible completion
+          without any possible partial completion (the possible
+          completions don't share a common prefix) cause the matches to
+          be listed immediately instead of ringing the bell.  The
+          default value is `off'.
+
+    `skip-completed-text'
+          If set to `on', this alters the default completion behavior
+          when inserting a single match into the line.  It's only
+          active when performing completion in the middle of a word.
+          If enabled, readline does not insert characters from the
+          completion that match characters after point in the word
+          being completed, so portions of the word following the cursor
+          are not duplicated.  For instance, if this is enabled,
+          attempting completion when the cursor is after the `e' in
+          `Makefile' will result in `Makefile' rather than
+          `Makefilefile', assuming there is a single possible
+          completion.  The default value is `off'.
+
+    `visible-stats'
+          If set to `on', a character denoting a file's type is
+          appended to the filename when listing possible completions.
+          The default is `off'.
+
+
+Key Bindings
+     The syntax for controlling key bindings in the init file is
+     simple.  First you need to find the name of the command that you
+     want to change.  The following sections contain tables of the
+     command name, the default keybinding, if any, and a short
+     description of what the command does.
+
+     Once you know the name of the command, simply place on a line in
+     the init file the name of the key you wish to bind the command to,
+     a colon, and then the name of the command.  There can be no space
+     between the key name and the colon - that will be interpreted as
+     part of the key name.  The name of the key can be expressed in
+     different ways, depending on what you find most comfortable.
+
+     In addition to command names, readline allows keys to be bound to
+     a string that is inserted when the key is pressed (a MACRO).
+
+    KEYNAME: FUNCTION-NAME or MACRO
+          KEYNAME is the name of a key spelled out in English.  For
+          example:
+               Control-u: universal-argument
+               Meta-Rubout: backward-kill-word
+               Control-o: "> output"
+
+          In the above example, `C-u' is bound to the function
+          `universal-argument', `M-DEL' is bound to the function
+          `backward-kill-word', and `C-o' is bound to run the macro
+          expressed on the right hand side (that is, to insert the text
+          `> output' into the line).
+
+          A number of symbolic character names are recognized while
+          processing this key binding syntax: DEL, ESC, ESCAPE, LFD,
+          NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB.
+
+    "KEYSEQ": FUNCTION-NAME or MACRO
+          KEYSEQ differs from KEYNAME above in that strings denoting an
+          entire key sequence can be specified, by placing the key
+          sequence in double quotes.  Some GNU Emacs style key escapes
+          can be used, as in the following example, but the special
+          character names are not recognized.
+
+               "\C-u": universal-argument
+               "\C-x\C-r": re-read-init-file
+               "\e[11~": "Function Key 1"
+
+          In the above example, `C-u' is again bound to the function
+          `universal-argument' (just as it was in the first example),
+          `C-x C-r' is bound to the function `re-read-init-file', and
+          `<ESC> <[> <1> <1> <~>' is bound to insert the text `Function
+          Key 1'.
+
+
+     The following GNU Emacs style escape sequences are available when
+     specifying key sequences:
+
+    `\C-'
+          control prefix
+
+    `\M-'
+          meta prefix
+
+    `\e'
+          an escape character
+
+    `\\'
+          backslash
+
+    `\"'
+          <">, a double quotation mark
+
+    `\''
+          <'>, a single quote or apostrophe
+
+     In addition to the GNU Emacs style escape sequences, a second set
+     of backslash escapes is available:
+
+    `\a'
+          alert (bell)
+
+    `\b'
+          backspace
+
+    `\d'
+          delete
+
+    `\f'
+          form feed
+
+    `\n'
+          newline
+
+    `\r'
+          carriage return
+
+    `\t'
+          horizontal tab
+
+    `\v'
+          vertical tab
+
+    `\NNN'
+          the eight-bit character whose value is the octal value NNN
+          (one to three digits)
+
+    `\xHH'
+          the eight-bit character whose value is the hexadecimal value
+          HH (one or two hex digits)
+
+     When entering the text of a macro, single or double quotes must be
+     used to indicate a macro definition.  Unquoted text is assumed to
+     be a function name.  In the macro body, the backslash escapes
+     described above are expanded.  Backslash will quote any other
+     character in the macro text, including `"' and `''.  For example,
+     the following binding will make `C-x \' insert a single `\' into
+     the line:
+          "\C-x\\": "\\"
+
+
+
+File: gdb.info,  Node: Conditional Init Constructs,  Next: Sample Init File,  Prev: Readline Init File Syntax,  Up: Readline Init File
+
+32.3.2 Conditional Init Constructs
+----------------------------------
+
+Readline implements a facility similar in spirit to the conditional
+compilation features of the C preprocessor which allows key bindings
+and variable settings to be performed as the result of tests.  There
+are four parser directives used.
+
+`$if'
+     The `$if' construct allows bindings to be made based on the
+     editing mode, the terminal being used, or the application using
+     Readline.  The text of the test extends to the end of the line; no
+     characters are required to isolate it.
+
+    `mode'
+          The `mode=' form of the `$if' directive is used to test
+          whether Readline is in `emacs' or `vi' mode.  This may be
+          used in conjunction with the `set keymap' command, for
+          instance, to set bindings in the `emacs-standard' and
+          `emacs-ctlx' keymaps only if Readline is starting out in
+          `emacs' mode.
+
+    `term'
+          The `term=' form may be used to include terminal-specific key
+          bindings, perhaps to bind the key sequences output by the
+          terminal's function keys.  The word on the right side of the
+          `=' is tested against both the full name of the terminal and
+          the portion of the terminal name before the first `-'.  This
+          allows `sun' to match both `sun' and `sun-cmd', for instance.
+
+    `application'
+          The APPLICATION construct is used to include
+          application-specific settings.  Each program using the
+          Readline library sets the APPLICATION NAME, and you can test
+          for a particular value.  This could be used to bind key
+          sequences to functions useful for a specific program.  For
+          instance, the following command adds a key sequence that
+          quotes the current or previous word in Bash:
+               $if Bash
+               # Quote the current or previous word
+               "\C-xq": "\eb\"\ef\""
+               $endif
+
+`$endif'
+     This command, as seen in the previous example, terminates an `$if'
+     command.
+
+`$else'
+     Commands in this branch of the `$if' directive are executed if the
+     test fails.
+
+`$include'
+     This directive takes a single filename as an argument and reads
+     commands and bindings from that file.  For example, the following
+     directive reads from `/etc/inputrc':
+          $include /etc/inputrc
+
+
+File: gdb.info,  Node: Sample Init File,  Prev: Conditional Init Constructs,  Up: Readline Init File
+
+32.3.3 Sample Init File
+-----------------------
+
+Here is an example of an INPUTRC file.  This illustrates key binding,
+variable assignment, and conditional syntax.
+
+
+     # This file controls the behaviour of line input editing for
+     # programs that use the GNU Readline library.  Existing
+     # programs include FTP, Bash, and GDB.
+     #
+     # You can re-read the inputrc file with C-x C-r.
+     # Lines beginning with '#' are comments.
+     #
+     # First, include any systemwide bindings and variable
+     # assignments from /etc/Inputrc
+     $include /etc/Inputrc
+
+     #
+     # Set various bindings for emacs mode.
+
+     set editing-mode emacs
+
+     $if mode=emacs
+
+     Meta-Control-h:	backward-kill-word	Text after the function name is ignored
+
+     #
+     # Arrow keys in keypad mode
+     #
+     #"\M-OD":        backward-char
+     #"\M-OC":        forward-char
+     #"\M-OA":        previous-history
+     #"\M-OB":        next-history
+     #
+     # Arrow keys in ANSI mode
+     #
+     "\M-[D":        backward-char
+     "\M-[C":        forward-char
+     "\M-[A":        previous-history
+     "\M-[B":        next-history
+     #
+     # Arrow keys in 8 bit keypad mode
+     #
+     #"\M-\C-OD":       backward-char
+     #"\M-\C-OC":       forward-char
+     #"\M-\C-OA":       previous-history
+     #"\M-\C-OB":       next-history
+     #
+     # Arrow keys in 8 bit ANSI mode
+     #
+     #"\M-\C-[D":       backward-char
+     #"\M-\C-[C":       forward-char
+     #"\M-\C-[A":       previous-history
+     #"\M-\C-[B":       next-history
+
+     C-q: quoted-insert
+
+     $endif
+
+     # An old-style binding.  This happens to be the default.
+     TAB: complete
+
+     # Macros that are convenient for shell interaction
+     $if Bash
+     # edit the path
+     "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
+     # prepare to type a quoted word --
+     # insert open and close double quotes
+     # and move to just after the open quote
+     "\C-x\"": "\"\"\C-b"
+     # insert a backslash (testing backslash escapes
+     # in sequences and macros)
+     "\C-x\\": "\\"
+     # Quote the current or previous word
+     "\C-xq": "\eb\"\ef\""
+     # Add a binding to refresh the line, which is unbound
+     "\C-xr": redraw-current-line
+     # Edit variable on current line.
+     "\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
+     $endif
+
+     # use a visible bell if one is available
+     set bell-style visible
+
+     # don't strip characters to 7 bits when reading
+     set input-meta on
+
+     # allow iso-latin1 characters to be inserted rather
+     # than converted to prefix-meta sequences
+     set convert-meta off
+
+     # display characters with the eighth bit set directly
+     # rather than as meta-prefixed characters
+     set output-meta on
+
+     # if there are more than 150 possible completions for
+     # a word, ask the user if he wants to see all of them
+     set completion-query-items 150
+
+     # For FTP
+     $if Ftp
+     "\C-xg": "get \M-?"
+     "\C-xt": "put \M-?"
+     "\M-.": yank-last-arg
+     $endif
+
+
+File: gdb.info,  Node: Bindable Readline Commands,  Next: Readline vi Mode,  Prev: Readline Init File,  Up: Command Line Editing
+
+32.4 Bindable Readline Commands
+===============================
+
+* Menu:
+
+* Commands For Moving::		Moving about the line.
+* Commands For History::	Getting at previous lines.
+* Commands For Text::		Commands for changing text.
+* Commands For Killing::	Commands for killing and yanking.
+* Numeric Arguments::		Specifying numeric arguments, repeat counts.
+* Commands For Completion::	Getting Readline to do the typing for you.
+* Keyboard Macros::		Saving and re-executing typed characters
+* Miscellaneous Commands::	Other miscellaneous commands.
+
+   This section describes Readline commands that may be bound to key
+sequences.  Command names without an accompanying key sequence are
+unbound by default.
+
+   In the following descriptions, "point" refers to the current cursor
+position, and "mark" refers to a cursor position saved by the
+`set-mark' command.  The text between the point and mark is referred to
+as the "region".
+
+
+File: gdb.info,  Node: Commands For Moving,  Next: Commands For History,  Up: Bindable Readline Commands
+
+32.4.1 Commands For Moving
+--------------------------
+
+`beginning-of-line (C-a)'
+     Move to the start of the current line.
+
+`end-of-line (C-e)'
+     Move to the end of the line.
+
+`forward-char (C-f)'
+     Move forward a character.
+
+`backward-char (C-b)'
+     Move back a character.
+
+`forward-word (M-f)'
+     Move forward to the end of the next word.  Words are composed of
+     letters and digits.
+
+`backward-word (M-b)'
+     Move back to the start of the current or previous word.  Words are
+     composed of letters and digits.
+
+`clear-screen (C-l)'
+     Clear the screen and redraw the current line, leaving the current
+     line at the top of the screen.
+
+`redraw-current-line ()'
+     Refresh the current line.  By default, this is unbound.
+
+
+
+File: gdb.info,  Node: Commands For History,  Next: Commands For Text,  Prev: Commands For Moving,  Up: Bindable Readline Commands
+
+32.4.2 Commands For Manipulating The History
+--------------------------------------------
+
+`accept-line (Newline or Return)'
+     Accept the line regardless of where the cursor is.  If this line is
+     non-empty, it may be added to the history list for future recall
+     with `add_history()'.  If this line is a modified history line,
+     the history line is restored to its original state.
+
+`previous-history (C-p)'
+     Move `back' through the history list, fetching the previous
+     command.
+
+`next-history (C-n)'
+     Move `forward' through the history list, fetching the next command.
+
+`beginning-of-history (M-<)'
+     Move to the first line in the history.
+
+`end-of-history (M->)'
+     Move to the end of the input history, i.e., the line currently
+     being entered.
+
+`reverse-search-history (C-r)'
+     Search backward starting at the current line and moving `up'
+     through the history as necessary.  This is an incremental search.
+
+`forward-search-history (C-s)'
+     Search forward starting at the current line and moving `down'
+     through the the history as necessary.  This is an incremental
+     search.
+
+`non-incremental-reverse-search-history (M-p)'
+     Search backward starting at the current line and moving `up'
+     through the history as necessary using a non-incremental search
+     for a string supplied by the user.
+
+`non-incremental-forward-search-history (M-n)'
+     Search forward starting at the current line and moving `down'
+     through the the history as necessary using a non-incremental search
+     for a string supplied by the user.
+
+`history-search-forward ()'
+     Search forward through the history for the string of characters
+     between the start of the current line and the point.  This is a
+     non-incremental search.  By default, this command is unbound.
+
+`history-search-backward ()'
+     Search backward through the history for the string of characters
+     between the start of the current line and the point.  This is a
+     non-incremental search.  By default, this command is unbound.
+
+`yank-nth-arg (M-C-y)'
+     Insert the first argument to the previous command (usually the
+     second word on the previous line) at point.  With an argument N,
+     insert the Nth word from the previous command (the words in the
+     previous command begin with word 0).  A negative argument inserts
+     the Nth word from the end of the previous command.  Once the
+     argument N is computed, the argument is extracted as if the `!N'
+     history expansion had been specified.
+
+`yank-last-arg (M-. or M-_)'
+     Insert last argument to the previous command (the last word of the
+     previous history entry).  With a numeric argument, behave exactly
+     like `yank-nth-arg'.  Successive calls to `yank-last-arg' move
+     back through the history list, inserting the last word (or the
+     word specified by the argument to the first call) of each line in
+     turn.  Any numeric argument supplied to these successive calls
+     determines the direction to move through the history.  A negative
+     argument switches the direction through the history (back or
+     forward).  The history expansion facilities are used to extract
+     the last argument, as if the `!$' history expansion had been
+     specified.
+
+
+
+File: gdb.info,  Node: Commands For Text,  Next: Commands For Killing,  Prev: Commands For History,  Up: Bindable Readline Commands
+
+32.4.3 Commands For Changing Text
+---------------------------------
+
+`delete-char (C-d)'
+     Delete the character at point.  If point is at the beginning of
+     the line, there are no characters in the line, and the last
+     character typed was not bound to `delete-char', then return EOF.
+
+`backward-delete-char (Rubout)'
+     Delete the character behind the cursor.  A numeric argument means
+     to kill the characters instead of deleting them.
+
+`forward-backward-delete-char ()'
+     Delete the character under the cursor, unless the cursor is at the
+     end of the line, in which case the character behind the cursor is
+     deleted.  By default, this is not bound to a key.
+
+`quoted-insert (C-q or C-v)'
+     Add the next character typed to the line verbatim.  This is how to
+     insert key sequences like `C-q', for example.
+
+`tab-insert (M-<TAB>)'
+     Insert a tab character.
+
+`self-insert (a, b, A, 1, !, ...)'
+     Insert yourself.
+
+`transpose-chars (C-t)'
+     Drag the character before the cursor forward over the character at
+     the cursor, moving the cursor forward as well.  If the insertion
+     point is at the end of the line, then this transposes the last two
+     characters of the line.  Negative arguments have no effect.
+
+`transpose-words (M-t)'
+     Drag the word before point past the word after point, moving point
+     past that word as well.  If the insertion point is at the end of
+     the line, this transposes the last two words on the line.
+
+`upcase-word (M-u)'
+     Uppercase the current (or following) word.  With a negative
+     argument, uppercase the previous word, but do not move the cursor.
+
+`downcase-word (M-l)'
+     Lowercase the current (or following) word.  With a negative
+     argument, lowercase the previous word, but do not move the cursor.
+
+`capitalize-word (M-c)'
+     Capitalize the current (or following) word.  With a negative
+     argument, capitalize the previous word, but do not move the cursor.
+
+`overwrite-mode ()'
+     Toggle overwrite mode.  With an explicit positive numeric argument,
+     switches to overwrite mode.  With an explicit non-positive numeric
+     argument, switches to insert mode.  This command affects only
+     `emacs' mode; `vi' mode does overwrite differently.  Each call to
+     `readline()' starts in insert mode.
+
+     In overwrite mode, characters bound to `self-insert' replace the
+     text at point rather than pushing the text to the right.
+     Characters bound to `backward-delete-char' replace the character
+     before point with a space.
+
+     By default, this command is unbound.
+
+
+
+File: gdb.info,  Node: Commands For Killing,  Next: Numeric Arguments,  Prev: Commands For Text,  Up: Bindable Readline Commands
+
+32.4.4 Killing And Yanking
+--------------------------
+
+`kill-line (C-k)'
+     Kill the text from point to the end of the line.
+
+`backward-kill-line (C-x Rubout)'
+     Kill backward to the beginning of the line.
+
+`unix-line-discard (C-u)'
+     Kill backward from the cursor to the beginning of the current line.
+
+`kill-whole-line ()'
+     Kill all characters on the current line, no matter where point is.
+     By default, this is unbound.
+
+`kill-word (M-d)'
+     Kill from point to the end of the current word, or if between
+     words, to the end of the next word.  Word boundaries are the same
+     as `forward-word'.
+
+`backward-kill-word (M-<DEL>)'
+     Kill the word behind point.  Word boundaries are the same as
+     `backward-word'.
+
+`unix-word-rubout (C-w)'
+     Kill the word behind point, using white space as a word boundary.
+     The killed text is saved on the kill-ring.
+
+`unix-filename-rubout ()'
+     Kill the word behind point, using white space and the slash
+     character as the word boundaries.  The killed text is saved on the
+     kill-ring.
+
+`delete-horizontal-space ()'
+     Delete all spaces and tabs around point.  By default, this is
+     unbound.
+
+`kill-region ()'
+     Kill the text in the current region.  By default, this command is
+     unbound.
+
+`copy-region-as-kill ()'
+     Copy the text in the region to the kill buffer, so it can be yanked
+     right away.  By default, this command is unbound.
+
+`copy-backward-word ()'
+     Copy the word before point to the kill buffer.  The word
+     boundaries are the same as `backward-word'.  By default, this
+     command is unbound.
+
+`copy-forward-word ()'
+     Copy the word following point to the kill buffer.  The word
+     boundaries are the same as `forward-word'.  By default, this
+     command is unbound.
+
+`yank (C-y)'
+     Yank the top of the kill ring into the buffer at point.
+
+`yank-pop (M-y)'
+     Rotate the kill-ring, and yank the new top.  You can only do this
+     if the prior command is `yank' or `yank-pop'.
+
+
+File: gdb.info,  Node: Numeric Arguments,  Next: Commands For Completion,  Prev: Commands For Killing,  Up: Bindable Readline Commands
+
+32.4.5 Specifying Numeric Arguments
+-----------------------------------
+
+`digit-argument (M-0, M-1, ... M--)'
+     Add this digit to the argument already accumulating, or start a new
+     argument.  `M--' starts a negative argument.
+
+`universal-argument ()'
+     This is another way to specify an argument.  If this command is
+     followed by one or more digits, optionally with a leading minus
+     sign, those digits define the argument.  If the command is
+     followed by digits, executing `universal-argument' again ends the
+     numeric argument, but is otherwise ignored.  As a special case, if
+     this command is immediately followed by a character that is
+     neither a digit or minus sign, the argument count for the next
+     command is multiplied by four.  The argument count is initially
+     one, so executing this function the first time makes the argument
+     count four, a second time makes the argument count sixteen, and so
+     on.  By default, this is not bound to a key.
+
+
+File: gdb.info,  Node: Commands For Completion,  Next: Keyboard Macros,  Prev: Numeric Arguments,  Up: Bindable Readline Commands
+
+32.4.6 Letting Readline Type For You
+------------------------------------
+
+`complete (<TAB>)'
+     Attempt to perform completion on the text before point.  The
+     actual completion performed is application-specific.  The default
+     is filename completion.
+
+`possible-completions (M-?)'
+     List the possible completions of the text before point.  When
+     displaying completions, Readline sets the number of columns used
+     for display to the value of `completion-display-width', the value
+     of the environment variable `COLUMNS', or the screen width, in
+     that order.
+
+`insert-completions (M-*)'
+     Insert all completions of the text before point that would have
+     been generated by `possible-completions'.
+
+`menu-complete ()'
+     Similar to `complete', but replaces the word to be completed with
+     a single match from the list of possible completions.  Repeated
+     execution of `menu-complete' steps through the list of possible
+     completions, inserting each match in turn.  At the end of the list
+     of completions, the bell is rung (subject to the setting of
+     `bell-style') and the original text is restored.  An argument of N
+     moves N positions forward in the list of matches; a negative
+     argument may be used to move backward through the list.  This
+     command is intended to be bound to <TAB>, but is unbound by
+     default.
+
+`menu-complete-backward ()'
+     Identical to `menu-complete', but moves backward through the list
+     of possible completions, as if `menu-complete' had been given a
+     negative argument.
+
+`delete-char-or-list ()'
+     Deletes the character under the cursor if not at the beginning or
+     end of the line (like `delete-char').  If at the end of the line,
+     behaves identically to `possible-completions'.  This command is
+     unbound by default.
+
+
+
+File: gdb.info,  Node: Keyboard Macros,  Next: Miscellaneous Commands,  Prev: Commands For Completion,  Up: Bindable Readline Commands
+
+32.4.7 Keyboard Macros
+----------------------
+
+`start-kbd-macro (C-x ()'
+     Begin saving the characters typed into the current keyboard macro.
+
+`end-kbd-macro (C-x ))'
+     Stop saving the characters typed into the current keyboard macro
+     and save the definition.
+
+`call-last-kbd-macro (C-x e)'
+     Re-execute the last keyboard macro defined, by making the
+     characters in the macro appear as if typed at the keyboard.
+
+
+
+File: gdb.info,  Node: Miscellaneous Commands,  Prev: Keyboard Macros,  Up: Bindable Readline Commands
+
+32.4.8 Some Miscellaneous Commands
+----------------------------------
+
+`re-read-init-file (C-x C-r)'
+     Read in the contents of the INPUTRC file, and incorporate any
+     bindings or variable assignments found there.
+
+`abort (C-g)'
+     Abort the current editing command and ring the terminal's bell
+     (subject to the setting of `bell-style').
+
+`do-uppercase-version (M-a, M-b, M-X, ...)'
+     If the metafied character X is lowercase, run the command that is
+     bound to the corresponding uppercase character.
+
+`prefix-meta (<ESC>)'
+     Metafy the next character typed.  This is for keyboards without a
+     meta key.  Typing `<ESC> f' is equivalent to typing `M-f'.
+
+`undo (C-_ or C-x C-u)'
+     Incremental undo, separately remembered for each line.
+
+`revert-line (M-r)'
+     Undo all changes made to this line.  This is like executing the
+     `undo' command enough times to get back to the beginning.
+
+`tilde-expand (M-~)'
+     Perform tilde expansion on the current word.
+
+`set-mark (C-@)'
+     Set the mark to the point.  If a numeric argument is supplied, the
+     mark is set to that position.
+
+`exchange-point-and-mark (C-x C-x)'
+     Swap the point with the mark.  The current cursor position is set
+     to the saved position, and the old cursor position is saved as the
+     mark.
+
+`character-search (C-])'
+     A character is read and point is moved to the next occurrence of
+     that character.  A negative count searches for previous
+     occurrences.
+
+`character-search-backward (M-C-])'
+     A character is read and point is moved to the previous occurrence
+     of that character.  A negative count searches for subsequent
+     occurrences.
+
+`skip-csi-sequence ()'
+     Read enough characters to consume a multi-key sequence such as
+     those defined for keys like Home and End.  Such sequences begin
+     with a Control Sequence Indicator (CSI), usually ESC-[.  If this
+     sequence is bound to "\e[", keys producing such sequences will
+     have no effect unless explicitly bound to a readline command,
+     instead of inserting stray characters into the editing buffer.
+     This is unbound by default, but usually bound to ESC-[.
+
+`insert-comment (M-#)'
+     Without a numeric argument, the value of the `comment-begin'
+     variable is inserted at the beginning of the current line.  If a
+     numeric argument is supplied, this command acts as a toggle:  if
+     the characters at the beginning of the line do not match the value
+     of `comment-begin', the value is inserted, otherwise the
+     characters in `comment-begin' are deleted from the beginning of
+     the line.  In either case, the line is accepted as if a newline
+     had been typed.
+
+`dump-functions ()'
+     Print all of the functions and their key bindings to the Readline
+     output stream.  If a numeric argument is supplied, the output is
+     formatted in such a way that it can be made part of an INPUTRC
+     file.  This command is unbound by default.
+
+`dump-variables ()'
+     Print all of the settable variables and their values to the
+     Readline output stream.  If a numeric argument is supplied, the
+     output is formatted in such a way that it can be made part of an
+     INPUTRC file.  This command is unbound by default.
+
+`dump-macros ()'
+     Print all of the Readline key sequences bound to macros and the
+     strings they output.  If a numeric argument is supplied, the
+     output is formatted in such a way that it can be made part of an
+     INPUTRC file.  This command is unbound by default.
+
+`emacs-editing-mode (C-e)'
+     When in `vi' command mode, this causes a switch to `emacs' editing
+     mode.
+
+`vi-editing-mode (M-C-j)'
+     When in `emacs' editing mode, this causes a switch to `vi' editing
+     mode.
+
+
+
+File: gdb.info,  Node: Readline vi Mode,  Prev: Bindable Readline Commands,  Up: Command Line Editing
+
+32.5 Readline vi Mode
+=====================
+
+While the Readline library does not have a full set of `vi' editing
+functions, it does contain enough to allow simple editing of the line.
+The Readline `vi' mode behaves as specified in the POSIX standard.
+
+   In order to switch interactively between `emacs' and `vi' editing
+modes, use the command `M-C-j' (bound to emacs-editing-mode when in
+`vi' mode and to vi-editing-mode in `emacs' mode).  The Readline
+default is `emacs' mode.
+
+   When you enter a line in `vi' mode, you are already placed in
+`insertion' mode, as if you had typed an `i'.  Pressing <ESC> switches
+you into `command' mode, where you can edit the text of the line with
+the standard `vi' movement keys, move to previous history lines with
+`k' and subsequent lines with `j', and so forth.
+
+
+File: gdb.info,  Node: Using History Interactively,  Next: In Memoriam,  Prev: Command Line Editing,  Up: Top
+
+33 Using History Interactively
+******************************
+
+This chapter describes how to use the GNU History Library interactively,
+from a user's standpoint.  It should be considered a user's guide.  For
+information on using the GNU History Library in your own programs,
+*note Programming with GNU History: (history)Programming with GNU
+History.
+
+* Menu:
+
+* History Interaction::		What it feels like using History as a user.
+
+
+File: gdb.info,  Node: History Interaction,  Up: Using History Interactively
+
+33.1 History Expansion
+======================
+
+The History library provides a history expansion feature that is similar
+to the history expansion provided by `csh'.  This section describes the
+syntax used to manipulate the history information.
+
+   History expansions introduce words from the history list into the
+input stream, making it easy to repeat commands, insert the arguments
+to a previous command into the current input line, or fix errors in
+previous commands quickly.
+
+   History expansion takes place in two parts.  The first is to
+determine which line from the history list should be used during
+substitution.  The second is to select portions of that line for
+inclusion into the current one.  The line selected from the history is
+called the "event", and the portions of that line that are acted upon
+are called "words".  Various "modifiers" are available to manipulate
+the selected words.  The line is broken into words in the same fashion
+that Bash does, so that several words surrounded by quotes are
+considered one word.  History expansions are introduced by the
+appearance of the history expansion character, which is `!' by default.
+
+* Menu:
+
+* Event Designators::	How to specify which history line to use.
+* Word Designators::	Specifying which words are of interest.
+* Modifiers::		Modifying the results of substitution.
+
+
+File: gdb.info,  Node: Event Designators,  Next: Word Designators,  Up: History Interaction
+
+33.1.1 Event Designators
+------------------------
+
+An event designator is a reference to a command line entry in the
+history list.  Unless the reference is absolute, events are relative to
+the current position in the history list.  
+
+`!'
+     Start a history substitution, except when followed by a space, tab,
+     the end of the line, or `='.
+
+`!N'
+     Refer to command line N.
+
+`!-N'
+     Refer to the command N lines back.
+
+`!!'
+     Refer to the previous command.  This is a synonym for `!-1'.
+
+`!STRING'
+     Refer to the most recent command preceding the current position in
+     the history list starting with STRING.
+
+`!?STRING[?]'
+     Refer to the most recent command preceding the current position in
+     the history list containing STRING.  The trailing `?' may be
+     omitted if the STRING is followed immediately by a newline.
+
+`^STRING1^STRING2^'
+     Quick Substitution.  Repeat the last command, replacing STRING1
+     with STRING2.  Equivalent to `!!:s/STRING1/STRING2/'.
+
+`!#'
+     The entire command line typed so far.
+
+
+
+File: gdb.info,  Node: Word Designators,  Next: Modifiers,  Prev: Event Designators,  Up: History Interaction
+
+33.1.2 Word Designators
+-----------------------
+
+Word designators are used to select desired words from the event.  A
+`:' separates the event specification from the word designator.  It may
+be omitted if the word designator begins with a `^', `$', `*', `-', or
+`%'.  Words are numbered from the beginning of the line, with the first
+word being denoted by 0 (zero).  Words are inserted into the current
+line separated by single spaces.
+
+   For example,
+
+`!!'
+     designates the preceding command.  When you type this, the
+     preceding command is repeated in toto.
+
+`!!:$'
+     designates the last argument of the preceding command.  This may be
+     shortened to `!$'.
+
+`!fi:2'
+     designates the second argument of the most recent command starting
+     with the letters `fi'.
+
+   Here are the word designators:
+
+`0 (zero)'
+     The `0'th word.  For many applications, this is the command word.
+
+`N'
+     The Nth word.
+
+`^'
+     The first argument; that is, word 1.
+
+`$'
+     The last argument.
+
+`%'
+     The word matched by the most recent `?STRING?' search.
+
+`X-Y'
+     A range of words; `-Y' abbreviates `0-Y'.
+
+`*'
+     All of the words, except the `0'th.  This is a synonym for `1-$'.
+     It is not an error to use `*' if there is just one word in the
+     event; the empty string is returned in that case.
+
+`X*'
+     Abbreviates `X-$'
+
+`X-'
+     Abbreviates `X-$' like `X*', but omits the last word.
+
+
+   If a word designator is supplied without an event specification, the
+previous command is used as the event.
+
+
+File: gdb.info,  Node: Modifiers,  Prev: Word Designators,  Up: History Interaction
+
+33.1.3 Modifiers
+----------------
+
+After the optional word designator, you can add a sequence of one or
+more of the following modifiers, each preceded by a `:'.
+
+`h'
+     Remove a trailing pathname component, leaving only the head.
+
+`t'
+     Remove all leading pathname components, leaving the tail.
+
+`r'
+     Remove a trailing suffix of the form `.SUFFIX', leaving the
+     basename.
+
+`e'
+     Remove all but the trailing suffix.
+
+`p'
+     Print the new command but do not execute it.
+
+`s/OLD/NEW/'
+     Substitute NEW for the first occurrence of OLD in the event line.
+     Any delimiter may be used in place of `/'.  The delimiter may be
+     quoted in OLD and NEW with a single backslash.  If `&' appears in
+     NEW, it is replaced by OLD.  A single backslash will quote the
+     `&'.  The final delimiter is optional if it is the last character
+     on the input line.
+
+`&'
+     Repeat the previous substitution.
+
+`g'
+`a'
+     Cause changes to be applied over the entire event line.  Used in
+     conjunction with `s', as in `gs/OLD/NEW/', or with `&'.
+
+`G'
+     Apply the following `s' modifier once to each word in the event.
+
+
+
+File: gdb.info,  Node: In Memoriam,  Next: Formatting Documentation,  Prev: Using History Interactively,  Up: Top
+
+Appendix A In Memoriam
+**********************
+
+The GDB project mourns the loss of the following long-time contributors:
+
+`Fred Fish'
+     Fred was a long-standing contributor to GDB (1991-2006), and to
+     Free Software in general.  Outside of GDB, he was known in the
+     Amiga world for his series of Fish Disks, and the GeekGadget
+     project.
+
+`Michael Snyder'
+     Michael was one of the Global Maintainers of the GDB project, with
+     contributions recorded as early as 1996, until 2011.  In addition
+     to his day to day participation, he was a large driving force
+     behind adding Reverse Debugging to GDB.
+
+   Beyond their technical contributions to the project, they were also
+enjoyable members of the Free Software Community.  We will miss them.
+
+
+File: gdb.info,  Node: Formatting Documentation,  Next: Installing GDB,  Prev: In Memoriam,  Up: Top
+
+Appendix B Formatting Documentation
+***********************************
+
+The GDB 4 release includes an already-formatted reference card, ready
+for printing with PostScript or Ghostscript, in the `gdb' subdirectory
+of the main source directory(1).  If you can use PostScript or
+Ghostscript with your printer, you can print the reference card
+immediately with `refcard.ps'.
+
+   The release also includes the source for the reference card.  You
+can format it, using TeX, by typing:
+
+     make refcard.dvi
+
+   The GDB reference card is designed to print in "landscape" mode on
+US "letter" size paper; that is, on a sheet 11 inches wide by 8.5 inches
+high.  You will need to specify this form of printing as an option to
+your DVI output program.
+
+   All the documentation for GDB comes as part of the machine-readable
+distribution.  The documentation is written in Texinfo format, which is
+a documentation system that uses a single source file to produce both
+on-line information and a printed manual.  You can use one of the Info
+formatting commands to create the on-line version of the documentation
+and TeX (or `texi2roff') to typeset the printed version.
+
+   GDB includes an already formatted copy of the on-line Info version
+of this manual in the `gdb' subdirectory.  The main Info file is
+`gdb-7.5/gdb/gdb.info', and it refers to subordinate files matching
+`gdb.info*' in the same directory.  If necessary, you can print out
+these files, or read them with any editor; but they are easier to read
+using the `info' subsystem in GNU Emacs or the standalone `info'
+program, available as part of the GNU Texinfo distribution.
+
+   If you want to format these Info files yourself, you need one of the
+Info formatting programs, such as `texinfo-format-buffer' or `makeinfo'.
+
+   If you have `makeinfo' installed, and are in the top level GDB
+source directory (`gdb-7.5', in the case of version 7.5), you can make
+the Info file by typing:
+
+     cd gdb
+     make gdb.info
+
+   If you want to typeset and print copies of this manual, you need TeX,
+a program to print its DVI output files, and `texinfo.tex', the Texinfo
+definitions file.
+
+   TeX is a typesetting program; it does not print files directly, but
+produces output files called DVI files.  To print a typeset document,
+you need a program to print DVI files.  If your system has TeX
+installed, chances are it has such a program.  The precise command to
+use depends on your system; `lpr -d' is common; another (for PostScript
+devices) is `dvips'.  The DVI print command may require a file name
+without any extension or a `.dvi' extension.
+
+   TeX also requires a macro definitions file called `texinfo.tex'.
+This file tells TeX how to typeset a document written in Texinfo
+format.  On its own, TeX cannot either read or typeset a Texinfo file.
+`texinfo.tex' is distributed with GDB and is located in the
+`gdb-VERSION-NUMBER/texinfo' directory.
+
+   If you have TeX and a DVI printer program installed, you can typeset
+and print this manual.  First switch to the `gdb' subdirectory of the
+main source directory (for example, to `gdb-7.5/gdb') and type:
+
+     make gdb.dvi
+
+   Then give `gdb.dvi' to your DVI printing program.
+
+   ---------- Footnotes ----------
+
+   (1) In `gdb-7.5/gdb/refcard.ps' of the version 7.5 release.
+
+
+File: gdb.info,  Node: Installing GDB,  Next: Maintenance Commands,  Prev: Formatting Documentation,  Up: Top
+
+Appendix C Installing GDB
+*************************
+
+* Menu:
+
+* Requirements::                Requirements for building GDB
+* Running Configure::           Invoking the GDB `configure' script
+* Separate Objdir::             Compiling GDB in another directory
+* Config Names::                Specifying names for hosts and targets
+* Configure Options::           Summary of options for configure
+* System-wide configuration::   Having a system-wide init file
+
+
+File: gdb.info,  Node: Requirements,  Next: Running Configure,  Up: Installing GDB
+
+C.1 Requirements for Building GDB
+=================================
+
+Building GDB requires various tools and packages to be available.
+Other packages will be used only if they are found.
+
+Tools/Packages Necessary for Building GDB
+=========================================
+
+ISO C90 compiler
+     GDB is written in ISO C90.  It should be buildable with any
+     working C90 compiler, e.g. GCC.
+
+
+Tools/Packages Optional for Building GDB
+========================================
+
+Expat
+     GDB can use the Expat XML parsing library.  This library may be
+     included with your operating system distribution; if it is not, you
+     can get the latest version from `http://expat.sourceforge.net'.
+     The `configure' script will search for this library in several
+     standard locations; if it is installed in an unusual path, you can
+     use the `--with-libexpat-prefix' option to specify its location.
+
+     Expat is used for:
+
+        * Remote protocol memory maps (*note Memory Map Format::)
+
+        * Target descriptions (*note Target Descriptions::)
+
+        * Remote shared library lists (*Note Library List Format::, or
+          alternatively *note Library List Format for SVR4 Targets::)
+
+        * MS-Windows shared libraries (*note Shared Libraries::)
+
+        * Traceframe info (*note Traceframe Info Format::)
+
+zlib
+     GDB will use the `zlib' library, if available, to read compressed
+     debug sections.  Some linkers, such as GNU gold, are capable of
+     producing binaries with compressed debug sections.  If GDB is
+     compiled with `zlib', it will be able to read the debug
+     information in such binaries.
+
+     The `zlib' library is likely included with your operating system
+     distribution; if it is not, you can get the latest version from
+     `http://zlib.net'.
+
+iconv
+     GDB's features related to character sets (*note Character Sets::)
+     require a functioning `iconv' implementation.  If you are on a GNU
+     system, then this is provided by the GNU C Library.  Some other
+     systems also provide a working `iconv'.
+
+     If GDB is using the `iconv' program which is installed in a
+     non-standard place, you will need to tell GDB where to find it.
+     This is done with `--with-iconv-bin' which specifies the directory
+     that contains the `iconv' program.
+
+     On systems without `iconv', you can install GNU Libiconv.  If you
+     have previously installed Libiconv, you can use the
+     `--with-libiconv-prefix' option to configure.
+
+     GDB's top-level `configure' and `Makefile' will arrange to build
+     Libiconv if a directory named `libiconv' appears in the top-most
+     source directory.  If Libiconv is built this way, and if the
+     operating system does not provide a suitable `iconv'
+     implementation, then the just-built library will automatically be
+     used by GDB.  One easy way to set this up is to download GNU
+     Libiconv, unpack it, and then rename the directory holding the
+     Libiconv source code to `libiconv'.
+
diff --git a/gdb/doc/gdb.info-5 b/gdb/doc/gdb.info-5
new file mode 100644
index 0000000..41c2d69
--- /dev/null
+++ b/gdb/doc/gdb.info-5
@@ -0,0 +1,7177 @@
+This is gdb.info, produced by makeinfo version 4.8 from ./gdb.texinfo.
+
+INFO-DIR-SECTION Software development
+START-INFO-DIR-ENTRY
+* Gdb: (gdb).                     The GNU debugger.
+END-INFO-DIR-ENTRY
+
+   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+2010 2011, 2012 Free Software Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "Free Software" and "Free Software Needs Free
+Documentation", with the Front-Cover Texts being "A GNU Manual," and
+with the Back-Cover Texts as in (a) below.
+
+   (a) The FSF's Back-Cover Text is: "You are free to copy and modify
+this GNU Manual.  Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom."
+
+   This file documents the GNU debugger GDB.
+
+   This is the Tenth Edition, of `Debugging with GDB: the GNU
+Source-Level Debugger' for GDB (GDB) Version 7.5.
+
+   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+2010 2011, 2012 Free Software Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "Free Software" and "Free Software Needs Free
+Documentation", with the Front-Cover Texts being "A GNU Manual," and
+with the Back-Cover Texts as in (a) below.
+
+   (a) The FSF's Back-Cover Text is: "You are free to copy and modify
+this GNU Manual.  Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom."
+
+
+File: gdb.info,  Node: Running Configure,  Next: Separate Objdir,  Prev: Requirements,  Up: Installing GDB
+
+C.2 Invoking the GDB `configure' Script
+=======================================
+
+GDB comes with a `configure' script that automates the process of
+preparing GDB for installation; you can then use `make' to build the
+`gdb' program.
+
+   The GDB distribution includes all the source code you need for GDB
+in a single directory, whose name is usually composed by appending the
+version number to `gdb'.
+
+   For example, the GDB version 7.5 distribution is in the `gdb-7.5'
+directory.  That directory contains:
+
+`gdb-7.5/configure (and supporting files)'
+     script for configuring GDB and all its supporting libraries
+
+`gdb-7.5/gdb'
+     the source specific to GDB itself
+
+`gdb-7.5/bfd'
+     source for the Binary File Descriptor library
+
+`gdb-7.5/include'
+     GNU include files
+
+`gdb-7.5/libiberty'
+     source for the `-liberty' free software library
+
+`gdb-7.5/opcodes'
+     source for the library of opcode tables and disassemblers
+
+`gdb-7.5/readline'
+     source for the GNU command-line interface
+
+`gdb-7.5/glob'
+     source for the GNU filename pattern-matching subroutine
+
+`gdb-7.5/mmalloc'
+     source for the GNU memory-mapped malloc package
+
+   The simplest way to configure and build GDB is to run `configure'
+from the `gdb-VERSION-NUMBER' source directory, which in this example
+is the `gdb-7.5' directory.
+
+   First switch to the `gdb-VERSION-NUMBER' source directory if you are
+not already in it; then run `configure'.  Pass the identifier for the
+platform on which GDB will run as an argument.
+
+   For example:
+
+     cd gdb-7.5
+     ./configure HOST
+     make
+
+where HOST is an identifier such as `sun4' or `decstation', that
+identifies the platform where GDB will run.  (You can often leave off
+HOST; `configure' tries to guess the correct value by examining your
+system.)
+
+   Running `configure HOST' and then running `make' builds the `bfd',
+`readline', `mmalloc', and `libiberty' libraries, then `gdb' itself.
+The configured source files, and the binaries, are left in the
+corresponding source directories.
+
+   `configure' is a Bourne-shell (`/bin/sh') script; if your system
+does not recognize this automatically when you run a different shell,
+you may need to run `sh' on it explicitly:
+
+     sh configure HOST
+
+   If you run `configure' from a directory that contains source
+directories for multiple libraries or programs, such as the `gdb-7.5'
+source directory for version 7.5, `configure' creates configuration
+files for every directory level underneath (unless you tell it not to,
+with the `--norecursion' option).
+
+   You should run the `configure' script from the top directory in the
+source tree, the `gdb-VERSION-NUMBER' directory.  If you run
+`configure' from one of the subdirectories, you will configure only
+that subdirectory.  That is usually not what you want.  In particular,
+if you run the first `configure' from the `gdb' subdirectory of the
+`gdb-VERSION-NUMBER' directory, you will omit the configuration of
+`bfd', `readline', and other sibling directories of the `gdb'
+subdirectory.  This leads to build errors about missing include files
+such as `bfd/bfd.h'.
+
+   You can install `gdb' anywhere; it has no hardwired paths.  However,
+you should make sure that the shell on your path (named by the `SHELL'
+environment variable) is publicly readable.  Remember that GDB uses the
+shell to start your program--some systems refuse to let GDB debug child
+processes whose programs are not readable.
+
+
+File: gdb.info,  Node: Separate Objdir,  Next: Config Names,  Prev: Running Configure,  Up: Installing GDB
+
+C.3 Compiling GDB in Another Directory
+======================================
+
+If you want to run GDB versions for several host or target machines,
+you need a different `gdb' compiled for each combination of host and
+target.  `configure' is designed to make this easy by allowing you to
+generate each configuration in a separate subdirectory, rather than in
+the source directory.  If your `make' program handles the `VPATH'
+feature (GNU `make' does), running `make' in each of these directories
+builds the `gdb' program specified there.
+
+   To build `gdb' in a separate directory, run `configure' with the
+`--srcdir' option to specify where to find the source.  (You also need
+to specify a path to find `configure' itself from your working
+directory.  If the path to `configure' would be the same as the
+argument to `--srcdir', you can leave out the `--srcdir' option; it is
+assumed.)
+
+   For example, with version 7.5, you can build GDB in a separate
+directory for a Sun 4 like this:
+
+     cd gdb-7.5
+     mkdir ../gdb-sun4
+     cd ../gdb-sun4
+     ../gdb-7.5/configure sun4
+     make
+
+   When `configure' builds a configuration using a remote source
+directory, it creates a tree for the binaries with the same structure
+(and using the same names) as the tree under the source directory.  In
+the example, you'd find the Sun 4 library `libiberty.a' in the
+directory `gdb-sun4/libiberty', and GDB itself in `gdb-sun4/gdb'.
+
+   Make sure that your path to the `configure' script has just one
+instance of `gdb' in it.  If your path to `configure' looks like
+`../gdb-7.5/gdb/configure', you are configuring only one subdirectory
+of GDB, not the whole package.  This leads to build errors about
+missing include files such as `bfd/bfd.h'.
+
+   One popular reason to build several GDB configurations in separate
+directories is to configure GDB for cross-compiling (where GDB runs on
+one machine--the "host"--while debugging programs that run on another
+machine--the "target").  You specify a cross-debugging target by giving
+the `--target=TARGET' option to `configure'.
+
+   When you run `make' to build a program or library, you must run it
+in a configured directory--whatever directory you were in when you
+called `configure' (or one of its subdirectories).
+
+   The `Makefile' that `configure' generates in each source directory
+also runs recursively.  If you type `make' in a source directory such
+as `gdb-7.5' (or in a separate configured directory configured with
+`--srcdir=DIRNAME/gdb-7.5'), you will build all the required libraries,
+and then build GDB.
+
+   When you have multiple hosts or targets configured in separate
+directories, you can run `make' on them in parallel (for example, if
+they are NFS-mounted on each of the hosts); they will not interfere
+with each other.
+
+
+File: gdb.info,  Node: Config Names,  Next: Configure Options,  Prev: Separate Objdir,  Up: Installing GDB
+
+C.4 Specifying Names for Hosts and Targets
+==========================================
+
+The specifications used for hosts and targets in the `configure' script
+are based on a three-part naming scheme, but some short predefined
+aliases are also supported.  The full naming scheme encodes three pieces
+of information in the following pattern:
+
+     ARCHITECTURE-VENDOR-OS
+
+   For example, you can use the alias `sun4' as a HOST argument, or as
+the value for TARGET in a `--target=TARGET' option.  The equivalent
+full name is `sparc-sun-sunos4'.
+
+   The `configure' script accompanying GDB does not provide any query
+facility to list all supported host and target names or aliases.
+`configure' calls the Bourne shell script `config.sub' to map
+abbreviations to full names; you can read the script, if you wish, or
+you can use it to test your guesses on abbreviations--for example:
+
+     % sh config.sub i386-linux
+     i386-pc-linux-gnu
+     % sh config.sub alpha-linux
+     alpha-unknown-linux-gnu
+     % sh config.sub hp9k700
+     hppa1.1-hp-hpux
+     % sh config.sub sun4
+     sparc-sun-sunos4.1.1
+     % sh config.sub sun3
+     m68k-sun-sunos4.1.1
+     % sh config.sub i986v
+     Invalid configuration `i986v': machine `i986v' not recognized
+
+`config.sub' is also distributed in the GDB source directory
+(`gdb-7.5', for version 7.5).
+
+
+File: gdb.info,  Node: Configure Options,  Next: System-wide configuration,  Prev: Config Names,  Up: Installing GDB
+
+C.5 `configure' Options
+=======================
+
+Here is a summary of the `configure' options and arguments that are
+most often useful for building GDB.  `configure' also has several other
+options not listed here.  *note (configure.info)What Configure Does::,
+for a full explanation of `configure'.
+
+     configure [--help]
+               [--prefix=DIR]
+               [--exec-prefix=DIR]
+               [--srcdir=DIRNAME]
+               [--norecursion] [--rm]
+               [--target=TARGET]
+               HOST
+
+You may introduce options with a single `-' rather than `--' if you
+prefer; but you may abbreviate option names if you use `--'.
+
+`--help'
+     Display a quick summary of how to invoke `configure'.
+
+`--prefix=DIR'
+     Configure the source to install programs and files under directory
+     `DIR'.
+
+`--exec-prefix=DIR'
+     Configure the source to install programs under directory `DIR'.
+
+`--srcdir=DIRNAME'
+     *Warning: using this option requires GNU `make', or another `make'
+     that implements the `VPATH' feature.*
+     Use this option to make configurations in directories separate
+     from the GDB source directories.  Among other things, you can use
+     this to build (or maintain) several configurations simultaneously,
+     in separate directories.  `configure' writes
+     configuration-specific files in the current directory, but
+     arranges for them to use the source in the directory DIRNAME.
+     `configure' creates directories under the working directory in
+     parallel to the source directories below DIRNAME.
+
+`--norecursion'
+     Configure only the directory level where `configure' is executed;
+     do not propagate configuration to subdirectories.
+
+`--target=TARGET'
+     Configure GDB for cross-debugging programs running on the specified
+     TARGET.  Without this option, GDB is configured to debug programs
+     that run on the same machine (HOST) as GDB itself.
+
+     There is no convenient way to generate a list of all available
+     targets.
+
+`HOST ...'
+     Configure GDB to run on the specified HOST.
+
+     There is no convenient way to generate a list of all available
+     hosts.
+
+   There are many other options available as well, but they are
+generally needed for special purposes only.
+
+
+File: gdb.info,  Node: System-wide configuration,  Prev: Configure Options,  Up: Installing GDB
+
+C.6 System-wide configuration and settings
+==========================================
+
+GDB can be configured to have a system-wide init file; this file will
+be read and executed at startup (*note What GDB does during startup:
+Startup.).
+
+   Here is the corresponding configure option:
+
+`--with-system-gdbinit=FILE'
+     Specify that the default location of the system-wide init file is
+     FILE.
+
+   If GDB has been configured with the option `--prefix=$prefix', it
+may be subject to relocation.  Two possible cases:
+
+   * If the default location of this init file contains `$prefix', it
+     will be subject to relocation.  Suppose that the configure options
+     are `--prefix=$prefix --with-system-gdbinit=$prefix/etc/gdbinit';
+     if GDB is moved from `$prefix' to `$install', the system init file
+     is looked for as `$install/etc/gdbinit' instead of
+     `$prefix/etc/gdbinit'.
+
+   * By contrast, if the default location does not contain the prefix,
+     it will not be relocated.  E.g. if GDB has been configured with
+     `--prefix=/usr/local --with-system-gdbinit=/usr/share/gdb/gdbinit',
+     then GDB will always look for `/usr/share/gdb/gdbinit', wherever
+     GDB is installed.
+
+
+File: gdb.info,  Node: Maintenance Commands,  Next: Remote Protocol,  Prev: Installing GDB,  Up: Top
+
+Appendix D Maintenance Commands
+*******************************
+
+In addition to commands intended for GDB users, GDB includes a number
+of commands intended for GDB developers, that are not documented
+elsewhere in this manual.  These commands are provided here for
+reference.  (For commands that turn on debugging messages, see *Note
+Debugging Output::.)
+
+`maint agent [-at LOCATION,] EXPRESSION'
+`maint agent-eval [-at LOCATION,] EXPRESSION'
+     Translate the given EXPRESSION into remote agent bytecodes.  This
+     command is useful for debugging the Agent Expression mechanism
+     (*note Agent Expressions::).  The `agent' version produces an
+     expression useful for data collection, such as by tracepoints,
+     while `maint agent-eval' produces an expression that evaluates
+     directly to a result.  For instance, a collection expression for
+     `globa + globb' will include bytecodes to record four bytes of
+     memory at each of the addresses of `globa' and `globb', while
+     discarding the result of the addition, while an evaluation
+     expression will do the addition and return the sum.  If `-at' is
+     given, generate remote agent bytecode for LOCATION.  If not,
+     generate remote agent bytecode for current frame PC address.
+
+`maint agent-printf FORMAT,EXPR,...'
+     Translate the given format string and list of argument expressions
+     into remote agent bytecodes and display them as a disassembled
+     list.  This command is useful for debugging the agent version of
+     dynamic printf (*note Dynamic Printf::.
+
+`maint info breakpoints'
+     Using the same format as `info breakpoints', display both the
+     breakpoints you've set explicitly, and those GDB is using for
+     internal purposes.  Internal breakpoints are shown with negative
+     breakpoint numbers.  The type column identifies what kind of
+     breakpoint is shown:
+
+    `breakpoint'
+          Normal, explicitly set breakpoint.
+
+    `watchpoint'
+          Normal, explicitly set watchpoint.
+
+    `longjmp'
+          Internal breakpoint, used to handle correctly stepping through
+          `longjmp' calls.
+
+    `longjmp resume'
+          Internal breakpoint at the target of a `longjmp'.
+
+    `until'
+          Temporary internal breakpoint used by the GDB `until' command.
+
+    `finish'
+          Temporary internal breakpoint used by the GDB `finish'
+          command.
+
+    `shlib events'
+          Shared library events.
+
+
+`set displaced-stepping'
+`show displaced-stepping'
+     Control whether or not GDB will do "displaced stepping" if the
+     target supports it.  Displaced stepping is a way to single-step
+     over breakpoints without removing them from the inferior, by
+     executing an out-of-line copy of the instruction that was
+     originally at the breakpoint location.  It is also known as
+     out-of-line single-stepping.
+
+    `set displaced-stepping on'
+          If the target architecture supports it, GDB will use
+          displaced stepping to step over breakpoints.
+
+    `set displaced-stepping off'
+          GDB will not use displaced stepping to step over breakpoints,
+          even if such is supported by the target architecture.
+
+    `set displaced-stepping auto'
+          This is the default mode.  GDB will use displaced stepping
+          only if non-stop mode is active (*note Non-Stop Mode::) and
+          the target architecture supports displaced stepping.
+
+`maint check-symtabs'
+     Check the consistency of psymtabs and symtabs.
+
+`maint cplus first_component NAME'
+     Print the first C++ class/namespace component of NAME.
+
+`maint cplus namespace'
+     Print the list of possible C++ namespaces.
+
+`maint demangle NAME'
+     Demangle a C++ or Objective-C mangled NAME.
+
+`maint deprecate COMMAND [REPLACEMENT]'
+`maint undeprecate COMMAND'
+     Deprecate or undeprecate the named COMMAND.  Deprecated commands
+     cause GDB to issue a warning when you use them.  The optional
+     argument REPLACEMENT says which newer command should be used in
+     favor of the deprecated one; if it is given, GDB will mention the
+     replacement as part of the warning.
+
+`maint dump-me'
+     Cause a fatal signal in the debugger and force it to dump its core.
+     This is supported only on systems which support aborting a program
+     with the `SIGQUIT' signal.
+
+`maint internal-error [MESSAGE-TEXT]'
+`maint internal-warning [MESSAGE-TEXT]'
+     Cause GDB to call the internal function `internal_error' or
+     `internal_warning' and hence behave as though an internal error or
+     internal warning has been detected.  In addition to reporting the
+     internal problem, these functions give the user the opportunity to
+     either quit GDB or create a core file of the current GDB session.
+
+     These commands take an optional parameter MESSAGE-TEXT that is
+     used as the text of the error or warning message.
+
+     Here's an example of using `internal-error':
+
+          (gdb) maint internal-error testing, 1, 2
+          .../maint.c:121: internal-error: testing, 1, 2
+          A problem internal to GDB has been detected.  Further
+          debugging may prove unreliable.
+          Quit this debugging session? (y or n) n
+          Create a core file? (y or n) n
+          (gdb)
+
+`maint set internal-error ACTION [ask|yes|no]'
+`maint show internal-error ACTION'
+`maint set internal-warning ACTION [ask|yes|no]'
+`maint show internal-warning ACTION'
+     When GDB reports an internal problem (error or warning) it gives
+     the user the opportunity to both quit GDB and create a core file
+     of the current GDB session.  These commands let you override the
+     default behaviour for each particular ACTION, described in the
+     table below.
+
+    `quit'
+          You can specify that GDB should always (yes) or never (no)
+          quit.  The default is to ask the user what to do.
+
+    `corefile'
+          You can specify that GDB should always (yes) or never (no)
+          create a core file.  The default is to ask the user what to
+          do.
+
+`maint packet TEXT'
+     If GDB is talking to an inferior via the serial protocol, then
+     this command sends the string TEXT to the inferior, and displays
+     the response packet.  GDB supplies the initial `$' character, the
+     terminating `#' character, and the checksum.
+
+`maint print architecture [FILE]'
+     Print the entire architecture configuration.  The optional argument
+     FILE names the file where the output goes.
+
+`maint print c-tdesc'
+     Print the current target description (*note Target Descriptions::)
+     as a C source file.  The created source file can be used in GDB
+     when an XML parser is not available to parse the description.
+
+`maint print dummy-frames'
+     Prints the contents of GDB's internal dummy-frame stack.
+
+          (gdb) b add
+          ...
+          (gdb) print add(2,3)
+          Breakpoint 2, add (a=2, b=3) at ...
+          58	  return (a + b);
+          The program being debugged stopped while in a function called from GDB.
+          ...
+          (gdb) maint print dummy-frames
+          0x1a57c80: pc=0x01014068 fp=0x0200bddc sp=0x0200bdd6
+           top=0x0200bdd4 id={stack=0x200bddc,code=0x101405c}
+           call_lo=0x01014000 call_hi=0x01014001
+          (gdb)
+
+     Takes an optional file parameter.
+
+`maint print registers [FILE]'
+`maint print raw-registers [FILE]'
+`maint print cooked-registers [FILE]'
+`maint print register-groups [FILE]'
+`maint print remote-registers [FILE]'
+     Print GDB's internal register data structures.
+
+     The command `maint print raw-registers' includes the contents of
+     the raw register cache; the command `maint print cooked-registers'
+     includes the (cooked) value of all registers, including registers
+     which aren't available on the target nor visible to user; the
+     command `maint print register-groups' includes the groups that
+     each register is a member of; and the command `maint print
+     remote-registers' includes the remote target's register numbers
+     and offsets in the `G' packets.  *Note Registers:
+     (gdbint)Registers.
+
+     These commands take an optional parameter, a file name to which to
+     write the information.
+
+`maint print reggroups [FILE]'
+     Print GDB's internal register group data structures.  The optional
+     argument FILE tells to what file to write the information.
+
+     The register groups info looks like this:
+
+          (gdb) maint print reggroups
+           Group      Type
+           general    user
+           float      user
+           all        user
+           vector     user
+           system     user
+           save       internal
+           restore    internal
+
+`flushregs'
+     This command forces GDB to flush its internal register cache.
+
+`maint print objfiles'
+     Print a dump of all known object files.  For each object file, this
+     command prints its name, address in memory, and all of its psymtabs
+     and symtabs.
+
+`maint print section-scripts [REGEXP]'
+     Print a dump of scripts specified in the `.debug_gdb_section'
+     section.  If REGEXP is specified, only print scripts loaded by
+     object files matching REGEXP.  For each script, this command
+     prints its name as specified in the objfile, and the full path if
+     known.  *Note dotdebug_gdb_scripts section::.
+
+`maint print statistics'
+     This command prints, for each object file in the program, various
+     data about that object file followed by the byte cache ("bcache")
+     statistics for the object file.  The objfile data includes the
+     number of minimal, partial, full, and stabs symbols, the number of
+     types defined by the objfile, the number of as yet unexpanded psym
+     tables, the number of line tables and string tables, and the
+     amount of memory used by the various tables.  The bcache
+     statistics include the counts, sizes, and counts of duplicates of
+     all and unique objects, max, average, and median entry size, total
+     memory used and its overhead and savings, and various measures of
+     the hash table size and chain lengths.
+
+`maint print target-stack'
+     A "target" is an interface between the debugger and a particular
+     kind of file or process.  Targets can be stacked in "strata", so
+     that more than one target can potentially respond to a request.
+     In particular, memory accesses will walk down the stack of targets
+     until they find a target that is interested in handling that
+     particular address.
+
+     This command prints a short description of each layer that was
+     pushed on the "target stack", starting from the top layer down to
+     the bottom one.
+
+`maint print type EXPR'
+     Print the type chain for a type specified by EXPR.  The argument
+     can be either a type name or a symbol.  If it is a symbol, the
+     type of that symbol is described.  The type chain produced by this
+     command is a recursive definition of the data type as stored in
+     GDB's data structures, including its flags and contained types.
+
+`maint set dwarf2 always-disassemble'
+
+`maint show dwarf2 always-disassemble'
+     Control the behavior of `info address' when using DWARF debugging
+     information.
+
+     The default is `off', which means that GDB should try to describe
+     a variable's location in an easily readable format.  When `on',
+     GDB will instead display the DWARF location expression in an
+     assembly-like format.  Note that some locations are too complex
+     for GDB to describe simply; in this case you will always see the
+     disassembly form.
+
+     Here is an example of the resulting disassembly:
+
+          (gdb) info addr argc
+          Symbol "argc" is a complex DWARF expression:
+               1: DW_OP_fbreg 0
+
+     For more information on these expressions, see the DWARF standard
+     (http://www.dwarfstd.org/).
+
+`maint set dwarf2 max-cache-age'
+`maint show dwarf2 max-cache-age'
+     Control the DWARF 2 compilation unit cache.
+
+     In object files with inter-compilation-unit references, such as
+     those produced by the GCC option `-feliminate-dwarf2-dups', the
+     DWARF 2 reader needs to frequently refer to previously read
+     compilation units.  This setting controls how long a compilation
+     unit will remain in the cache if it is not referenced.  A higher
+     limit means that cached compilation units will be stored in memory
+     longer, and more total memory will be used.  Setting it to zero
+     disables caching, which will slow down GDB startup, but reduce
+     memory consumption.
+
+`maint set profile'
+`maint show profile'
+     Control profiling of GDB.
+
+     Profiling will be disabled until you use the `maint set profile'
+     command to enable it.  When you enable profiling, the system will
+     begin collecting timing and execution count data; when you disable
+     profiling or exit GDB, the results will be written to a log file.
+     Remember that if you use profiling, GDB will overwrite the
+     profiling log file (often called `gmon.out').  If you have a
+     record of important profiling data in a `gmon.out' file, be sure
+     to move it to a safe location.
+
+     Configuring with `--enable-profiling' arranges for GDB to be
+     compiled with the `-pg' compiler option.
+
+`maint set show-debug-regs'
+`maint show show-debug-regs'
+     Control whether to show variables that mirror the hardware debug
+     registers.  Use `ON' to enable, `OFF' to disable.  If enabled, the
+     debug registers values are shown when GDB inserts or removes a
+     hardware breakpoint or watchpoint, and when the inferior triggers
+     a hardware-assisted breakpoint or watchpoint.
+
+`maint set show-all-tib'
+`maint show show-all-tib'
+     Control whether to show all non zero areas within a 1k block
+     starting at thread local base, when using the `info w32
+     thread-information-block' command.
+
+`maint space'
+     Control whether to display memory usage for each command.  If set
+     to a nonzero value, GDB will display how much memory each command
+     took, following the command's own output.  This can also be
+     requested by invoking GDB with the `--statistics' command-line
+     switch (*note Mode Options::).
+
+`maint time'
+     Control whether to display the execution time of GDB for each
+     command.  If set to a nonzero value, GDB will display how much
+     time it took to execute each command, following the command's own
+     output.  Both CPU time and wallclock time are printed.  Printing
+     both is useful when trying to determine whether the cost is CPU
+     or, e.g., disk/network, latency.  Note that the CPU time printed
+     is for GDB only, it does not include the execution time of the
+     inferior because there's no mechanism currently to compute how
+     much time was spent by GDB and how much time was spent by the
+     program been debugged.  This can also be requested by invoking GDB
+     with the `--statistics' command-line switch (*note Mode Options::).
+
+`maint translate-address [SECTION] ADDR'
+     Find the symbol stored at the location specified by the address
+     ADDR and an optional section name SECTION.  If found, GDB prints
+     the name of the closest symbol and an offset from the symbol's
+     location to the specified address.  This is similar to the `info
+     address' command (*note Symbols::), except that this command also
+     allows to find symbols in other sections.
+
+     If section was not specified, the section in which the symbol was
+     found is also printed.  For dynamically linked executables, the
+     name of executable or shared library containing the symbol is
+     printed as well.
+
+
+   The following command is useful for non-interactive invocations of
+GDB, such as in the test suite.
+
+`set watchdog NSEC'
+     Set the maximum number of seconds GDB will wait for the target
+     operation to finish.  If this time expires, GDB reports and error
+     and the command is aborted.
+
+`show watchdog'
+     Show the current setting of the target wait timeout.
+
+
+File: gdb.info,  Node: Remote Protocol,  Next: Agent Expressions,  Prev: Maintenance Commands,  Up: Top
+
+Appendix E GDB Remote Serial Protocol
+*************************************
+
+* Menu:
+
+* Overview::
+* Packets::
+* Stop Reply Packets::
+* General Query Packets::
+* Architecture-Specific Protocol Details::
+* Tracepoint Packets::
+* Host I/O Packets::
+* Interrupts::
+* Notification Packets::
+* Remote Non-Stop::
+* Packet Acknowledgment::
+* Examples::
+* File-I/O Remote Protocol Extension::
+* Library List Format::
+* Library List Format for SVR4 Targets::
+* Memory Map Format::
+* Thread List Format::
+* Traceframe Info Format::
+
+
+File: gdb.info,  Node: Overview,  Next: Packets,  Up: Remote Protocol
+
+E.1 Overview
+============
+
+There may be occasions when you need to know something about the
+protocol--for example, if there is only one serial port to your target
+machine, you might want your program to do something special if it
+recognizes a packet meant for GDB.
+
+   In the examples below, `->' and `<-' are used to indicate
+transmitted and received data, respectively.
+
+   All GDB commands and responses (other than acknowledgments and
+notifications, see *Note Notification Packets::) are sent as a PACKET.
+A PACKET is introduced with the character `$', the actual PACKET-DATA,
+and the terminating character `#' followed by a two-digit CHECKSUM:
+
+     `$'PACKET-DATA`#'CHECKSUM
+   The two-digit CHECKSUM is computed as the modulo 256 sum of all
+characters between the leading `$' and the trailing `#' (an eight bit
+unsigned checksum).
+
+   Implementors should note that prior to GDB 5.0 the protocol
+specification also included an optional two-digit SEQUENCE-ID:
+
+     `$'SEQUENCE-ID`:'PACKET-DATA`#'CHECKSUM
+
+That SEQUENCE-ID was appended to the acknowledgment.  GDB has never
+output SEQUENCE-IDs.  Stubs that handle packets added since GDB 5.0
+must not accept SEQUENCE-ID.
+
+   When either the host or the target machine receives a packet, the
+first response expected is an acknowledgment: either `+' (to indicate
+the package was received correctly) or `-' (to request retransmission):
+
+     -> `$'PACKET-DATA`#'CHECKSUM
+     <- `+'
+   The `+'/`-' acknowledgments can be disabled once a connection is
+established.  *Note Packet Acknowledgment::, for details.
+
+   The host (GDB) sends COMMANDs, and the target (the debugging stub
+incorporated in your program) sends a RESPONSE.  In the case of step
+and continue COMMANDs, the response is only sent when the operation has
+completed, and the target has again stopped all threads in all attached
+processes.  This is the default all-stop mode behavior, but the remote
+protocol also supports GDB's non-stop execution mode; see *Note Remote
+Non-Stop::, for details.
+
+   PACKET-DATA consists of a sequence of characters with the exception
+of `#' and `$' (see `X' packet for additional exceptions).
+
+   Fields within the packet should be separated using `,' `;' or `:'.
+Except where otherwise noted all numbers are represented in HEX with
+leading zeros suppressed.
+
+   Implementors should note that prior to GDB 5.0, the character `:'
+could not appear as the third character in a packet (as it would
+potentially conflict with the SEQUENCE-ID).
+
+   Binary data in most packets is encoded either as two hexadecimal
+digits per byte of binary data.  This allowed the traditional remote
+protocol to work over connections which were only seven-bit clean.
+Some packets designed more recently assume an eight-bit clean
+connection, and use a more efficient encoding to send and receive
+binary data.
+
+   The binary data representation uses `7d' (ASCII `}') as an escape
+character.  Any escaped byte is transmitted as the escape character
+followed by the original character XORed with `0x20'.  For example, the
+byte `0x7d' would be transmitted as the two bytes `0x7d 0x5d'.  The
+bytes `0x23' (ASCII `#'), `0x24' (ASCII `$'), and `0x7d' (ASCII `}')
+must always be escaped.  Responses sent by the stub must also escape
+`0x2a' (ASCII `*'), so that it is not interpreted as the start of a
+run-length encoded sequence (described next).
+
+   Response DATA can be run-length encoded to save space.  Run-length
+encoding replaces runs of identical characters with one instance of the
+repeated character, followed by a `*' and a repeat count.  The repeat
+count is itself sent encoded, to avoid binary characters in DATA: a
+value of N is sent as `N+29'.  For a repeat count greater or equal to
+3, this produces a printable ASCII character, e.g. a space (ASCII code
+32) for a repeat count of 3.  (This is because run-length encoding
+starts to win for counts 3 or more.)  Thus, for example, `0* ' is a
+run-length encoding of "0000": the space character after `*' means
+repeat the leading `0' `32 - 29 = 3' more times.
+
+   The printable characters `#' and `$' or with a numeric value greater
+than 126 must not be used.  Runs of six repeats (`#') or seven repeats
+(`$') can be expanded using a repeat count of only five (`"').  For
+example, `00000000' can be encoded as `0*"00'.
+
+   The error response returned for some packets includes a two character
+error number.  That number is not well defined.
+
+   For any COMMAND not supported by the stub, an empty response
+(`$#00') should be returned.  That way it is possible to extend the
+protocol.  A newer GDB can tell if a packet is supported based on that
+response.
+
+   At a minimum, a stub is required to support the `g' and `G' commands
+for register access, and the `m' and `M' commands for memory access.
+Stubs that only control single-threaded targets can implement run
+control with the `c' (continue), and `s' (step) commands.  Stubs that
+support multi-threading targets should support the `vCont' command.
+All other commands are optional.
+
+
+File: gdb.info,  Node: Packets,  Next: Stop Reply Packets,  Prev: Overview,  Up: Remote Protocol
+
+E.2 Packets
+===========
+
+The following table provides a complete list of all currently defined
+COMMANDs and their corresponding response DATA.  *Note File-I/O Remote
+Protocol Extension::, for details about the File I/O extension of the
+remote protocol.
+
+   Each packet's description has a template showing the packet's overall
+syntax, followed by an explanation of the packet's meaning.  We include
+spaces in some of the templates for clarity; these are not part of the
+packet's syntax.  No GDB packet uses spaces to separate its components.
+For example, a template like `foo BAR BAZ' describes a packet
+beginning with the three ASCII bytes `foo', followed by a BAR, followed
+directly by a BAZ.  GDB does not transmit a space character between the
+`foo' and the BAR, or between the BAR and the BAZ.
+
+   Several packets and replies include a THREAD-ID field to identify a
+thread.  Normally these are positive numbers with a target-specific
+interpretation, formatted as big-endian hex strings.  A THREAD-ID can
+also be a literal `-1' to indicate all threads, or `0' to pick any
+thread.
+
+   In addition, the remote protocol supports a multiprocess feature in
+which the THREAD-ID syntax is extended to optionally include both
+process and thread ID fields, as `pPID.TID'.  The PID (process) and TID
+(thread) components each have the format described above: a positive
+number with target-specific interpretation formatted as a big-endian
+hex string, literal `-1' to indicate all processes or threads
+(respectively), or `0' to indicate an arbitrary process or thread.
+Specifying just a process, as `pPID', is equivalent to `pPID.-1'.  It
+is an error to specify all processes but a specific thread, such as
+`p-1.TID'.  Note that the `p' prefix is _not_ used for those packets
+and replies explicitly documented to include a process ID, rather than
+a THREAD-ID.
+
+   The multiprocess THREAD-ID syntax extensions are only used if both
+GDB and the stub report support for the `multiprocess' feature using
+`qSupported'.  *Note multiprocess extensions::, for more information.
+
+   Note that all packet forms beginning with an upper- or lower-case
+letter, other than those described here, are reserved for future use.
+
+   Here are the packet descriptions.
+
+`!'
+     Enable extended mode.  In extended mode, the remote server is made
+     persistent.  The `R' packet is used to restart the program being
+     debugged.
+
+     Reply:
+    `OK'
+          The remote target both supports and has enabled extended mode.
+
+`?'
+     Indicate the reason the target halted.  The reply is the same as
+     for step and continue.  This packet has a special interpretation
+     when the target is in non-stop mode; see *Note Remote Non-Stop::.
+
+     Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+`A ARGLEN,ARGNUM,ARG,...'
+     Initialized `argv[]' array passed into program. ARGLEN specifies
+     the number of bytes in the hex encoded byte stream ARG.  See
+     `gdbserver' for more details.
+
+     Reply:
+    `OK'
+          The arguments were set.
+
+    `E NN'
+          An error occurred.
+
+`b BAUD'
+     (Don't use this packet; its behavior is not well-defined.)  Change
+     the serial line speed to BAUD.
+
+     JTC: _When does the transport layer state change?  When it's
+     received, or after the ACK is transmitted.  In either case, there
+     are problems if the command or the acknowledgment packet is
+     dropped._
+
+     Stan: _If people really wanted to add something like this, and get
+     it working for the first time, they ought to modify ser-unix.c to
+     send some kind of out-of-band message to a specially-setup stub
+     and have the switch happen "in between" packets, so that from
+     remote protocol's point of view, nothing actually happened._
+
+`B ADDR,MODE'
+     Set (MODE is `S') or clear (MODE is `C') a breakpoint at ADDR.
+
+     Don't use this packet.  Use the `Z' and `z' packets instead (*note
+     insert breakpoint or watchpoint packet::).
+
+`bc'
+     Backward continue.  Execute the target system in reverse.  No
+     parameter.  *Note Reverse Execution::, for more information.
+
+     Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+`bs'
+     Backward single step.  Execute one instruction in reverse.  No
+     parameter.  *Note Reverse Execution::, for more information.
+
+     Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+`c [ADDR]'
+     Continue.  ADDR is address to resume.  If ADDR is omitted, resume
+     at current address.
+
+     This packet is deprecated for multi-threading support.  *Note
+     vCont packet::.
+
+     Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+`C SIG[;ADDR]'
+     Continue with signal SIG (hex signal number).  If `;ADDR' is
+     omitted, resume at same address.
+
+     This packet is deprecated for multi-threading support.  *Note
+     vCont packet::.
+
+     Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+`d'
+     Toggle debug flag.
+
+     Don't use this packet; instead, define a general set packet (*note
+     General Query Packets::).
+
+`D'
+`D;PID'
+     The first form of the packet is used to detach GDB from the remote
+     system.  It is sent to the remote target before GDB disconnects
+     via the `detach' command.
+
+     The second form, including a process ID, is used when multiprocess
+     protocol extensions are enabled (*note multiprocess extensions::),
+     to detach only a specific process.  The PID is specified as a
+     big-endian hex string.
+
+     Reply:
+    `OK'
+          for success
+
+    `E NN'
+          for an error
+
+`F RC,EE,CF;XX'
+     A reply from GDB to an `F' packet sent by the target.  This is
+     part of the File-I/O protocol extension.  *Note File-I/O Remote
+     Protocol Extension::, for the specification.
+
+`g'
+     Read general registers.
+
+     Reply:
+    `XX...'
+          Each byte of register data is described by two hex digits.
+          The bytes with the register are transmitted in target byte
+          order.  The size of each register and their position within
+          the `g' packet are determined by the GDB internal gdbarch
+          functions `DEPRECATED_REGISTER_RAW_SIZE' and
+          `gdbarch_register_name'.  The specification of several
+          standard `g' packets is specified below.
+
+          When reading registers from a trace frame (*note Using the
+          Collected Data: Analyze Collected Data.), the stub may also
+          return a string of literal `x''s in place of the register
+          data digits, to indicate that the corresponding register has
+          not been collected, thus its value is unavailable.  For
+          example, for an architecture with 4 registers of 4 bytes
+          each, the following reply indicates to GDB that registers 0
+          and 2 have not been collected, while registers 1 and 3 have
+          been collected, and both have zero value:
+
+               -> `g'
+               <- `xxxxxxxx00000000xxxxxxxx00000000'
+
+    `E NN'
+          for an error.
+
+`G XX...'
+     Write general registers.  *Note read registers packet::, for a
+     description of the XX... data.
+
+     Reply:
+    `OK'
+          for success
+
+    `E NN'
+          for an error
+
+`H OP THREAD-ID'
+     Set thread for subsequent operations (`m', `M', `g', `G', et.al.).
+     OP depends on the operation to be performed: it should be `c' for
+     step and continue operations (note that this is deprecated,
+     supporting the `vCont' command is a better option), `g' for other
+     operations.  The thread designator THREAD-ID has the format and
+     interpretation described in *Note thread-id syntax::.
+
+     Reply:
+    `OK'
+          for success
+
+    `E NN'
+          for an error
+
+`i [ADDR[,NNN]]'
+     Step the remote target by a single clock cycle.  If `,NNN' is
+     present, cycle step NNN cycles.  If ADDR is present, cycle step
+     starting at that address.
+
+`I'
+     Signal, then cycle step.  *Note step with signal packet::.  *Note
+     cycle step packet::.
+
+`k'
+     Kill request.
+
+     FIXME: _There is no description of how to operate when a specific
+     thread context has been selected (i.e. does 'k' kill only that
+     thread?)_.
+
+`m ADDR,LENGTH'
+     Read LENGTH bytes of memory starting at address ADDR.  Note that
+     ADDR may not be aligned to any particular boundary.
+
+     The stub need not use any particular size or alignment when
+     gathering data from memory for the response; even if ADDR is
+     word-aligned and LENGTH is a multiple of the word size, the stub
+     is free to use byte accesses, or not.  For this reason, this
+     packet may not be suitable for accessing memory-mapped I/O devices.  
+
+     Reply:
+    `XX...'
+          Memory contents; each byte is transmitted as a two-digit
+          hexadecimal number.  The reply may contain fewer bytes than
+          requested if the server was able to read only part of the
+          region of memory.
+
+    `E NN'
+          NN is errno
+
+`M ADDR,LENGTH:XX...'
+     Write LENGTH bytes of memory starting at address ADDR.  XX... is
+     the data; each byte is transmitted as a two-digit hexadecimal
+     number.
+
+     Reply:
+    `OK'
+          for success
+
+    `E NN'
+          for an error (this includes the case where only part of the
+          data was written).
+
+`p N'
+     Read the value of register N; N is in hex.  *Note read registers
+     packet::, for a description of how the returned register value is
+     encoded.
+
+     Reply:
+    `XX...'
+          the register's value
+
+    `E NN'
+          for an error
+
+    `'
+          Indicating an unrecognized QUERY.
+
+`P N...=R...'
+     Write register N... with value R....  The register number N is in
+     hexadecimal, and R... contains two hex digits for each byte in the
+     register (target byte order).
+
+     Reply:
+    `OK'
+          for success
+
+    `E NN'
+          for an error
+
+`q NAME PARAMS...'
+`Q NAME PARAMS...'
+     General query (`q') and set (`Q').  These packets are described
+     fully in *Note General Query Packets::.
+
+`r'
+     Reset the entire system.
+
+     Don't use this packet; use the `R' packet instead.
+
+`R XX'
+     Restart the program being debugged.  XX, while needed, is ignored.
+     This packet is only available in extended mode (*note extended
+     mode::).
+
+     The `R' packet has no reply.
+
+`s [ADDR]'
+     Single step.  ADDR is the address at which to resume.  If ADDR is
+     omitted, resume at same address.
+
+     This packet is deprecated for multi-threading support.  *Note
+     vCont packet::.
+
+     Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+`S SIG[;ADDR]'
+     Step with signal.  This is analogous to the `C' packet, but
+     requests a single-step, rather than a normal resumption of
+     execution.
+
+     This packet is deprecated for multi-threading support.  *Note
+     vCont packet::.
+
+     Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+`t ADDR:PP,MM'
+     Search backwards starting at address ADDR for a match with pattern
+     PP and mask MM.  PP and MM are 4 bytes.  ADDR must be at least 3
+     digits.
+
+`T THREAD-ID'
+     Find out if the thread THREAD-ID is alive.  *Note thread-id
+     syntax::.
+
+     Reply:
+    `OK'
+          thread is still alive
+
+    `E NN'
+          thread is dead
+
+`v'
+     Packets starting with `v' are identified by a multi-letter name,
+     up to the first `;' or `?' (or the end of the packet).
+
+`vAttach;PID'
+     Attach to a new process with the specified process ID PID.  The
+     process ID is a hexadecimal integer identifying the process.  In
+     all-stop mode, all threads in the attached process are stopped; in
+     non-stop mode, it may be attached without being stopped if that is
+     supported by the target.
+
+     This packet is only available in extended mode (*note extended
+     mode::).
+
+     Reply:
+    `E NN'
+          for an error
+
+    `Any stop packet'
+          for success in all-stop mode (*note Stop Reply Packets::)
+
+    `OK'
+          for success in non-stop mode (*note Remote Non-Stop::)
+
+`vCont[;ACTION[:THREAD-ID]]...'
+     Resume the inferior, specifying different actions for each thread.
+     If an action is specified with no THREAD-ID, then it is applied to
+     any threads that don't have a specific action specified; if no
+     default action is specified then other threads should remain
+     stopped in all-stop mode and in their current state in non-stop
+     mode.  Specifying multiple default actions is an error; specifying
+     no actions is also an error.  Thread IDs are specified using the
+     syntax described in *Note thread-id syntax::.
+
+     Currently supported actions are:
+
+    `c'
+          Continue.
+
+    `C SIG'
+          Continue with signal SIG.  The signal SIG should be two hex
+          digits.
+
+    `s'
+          Step.
+
+    `S SIG'
+          Step with signal SIG.  The signal SIG should be two hex
+          digits.
+
+    `t'
+          Stop.
+
+     The optional argument ADDR normally associated with the `c', `C',
+     `s', and `S' packets is not supported in `vCont'.
+
+     The `t' action is only relevant in non-stop mode (*note Remote
+     Non-Stop::) and may be ignored by the stub otherwise.  A stop
+     reply should be generated for any affected thread not already
+     stopped.  When a thread is stopped by means of a `t' action, the
+     corresponding stop reply should indicate that the thread has
+     stopped with signal `0', regardless of whether the target uses
+     some other signal as an implementation detail.
+
+     The stub must support `vCont' if it reports support for
+     multiprocess extensions (*note multiprocess extensions::).  Note
+     that in this case `vCont' actions can be specified to apply to all
+     threads in a process by using the `pPID.-1' form of the THREAD-ID.
+
+     Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+`vCont?'
+     Request a list of actions supported by the `vCont' packet.
+
+     Reply:
+    `vCont[;ACTION...]'
+          The `vCont' packet is supported.  Each ACTION is a supported
+          command in the `vCont' packet.
+
+    `'
+          The `vCont' packet is not supported.
+
+`vFile:OPERATION:PARAMETER...'
+     Perform a file operation on the target system.  For details, see
+     *Note Host I/O Packets::.
+
+`vFlashErase:ADDR,LENGTH'
+     Direct the stub to erase LENGTH bytes of flash starting at ADDR.
+     The region may enclose any number of flash blocks, but its start
+     and end must fall on block boundaries, as indicated by the flash
+     block size appearing in the memory map (*note Memory Map
+     Format::).  GDB groups flash memory programming operations
+     together, and sends a `vFlashDone' request after each group; the
+     stub is allowed to delay erase operation until the `vFlashDone'
+     packet is received.
+
+     Reply:
+    `OK'
+          for success
+
+    `E NN'
+          for an error
+
+`vFlashWrite:ADDR:XX...'
+     Direct the stub to write data to flash address ADDR.  The data is
+     passed in binary form using the same encoding as for the `X'
+     packet (*note Binary Data::).  The memory ranges specified by
+     `vFlashWrite' packets preceding a `vFlashDone' packet must not
+     overlap, and must appear in order of increasing addresses
+     (although `vFlashErase' packets for higher addresses may already
+     have been received; the ordering is guaranteed only between
+     `vFlashWrite' packets).  If a packet writes to an address that was
+     neither erased by a preceding `vFlashErase' packet nor by some
+     other target-specific method, the results are unpredictable.
+
+     Reply:
+    `OK'
+          for success
+
+    `E.memtype'
+          for vFlashWrite addressing non-flash memory
+
+    `E NN'
+          for an error
+
+`vFlashDone'
+     Indicate to the stub that flash programming operation is finished.
+     The stub is permitted to delay or batch the effects of a group of
+     `vFlashErase' and `vFlashWrite' packets until a `vFlashDone'
+     packet is received.  The contents of the affected regions of flash
+     memory are unpredictable until the `vFlashDone' request is
+     completed.
+
+`vKill;PID'
+     Kill the process with the specified process ID.  PID is a
+     hexadecimal integer identifying the process.  This packet is used
+     in preference to `k' when multiprocess protocol extensions are
+     supported; see *Note multiprocess extensions::.
+
+     Reply:
+    `E NN'
+          for an error
+
+    `OK'
+          for success
+
+`vRun;FILENAME[;ARGUMENT]...'
+     Run the program FILENAME, passing it each ARGUMENT on its command
+     line.  The file and arguments are hex-encoded strings.  If
+     FILENAME is an empty string, the stub may use a default program
+     (e.g. the last program run).  The program is created in the stopped
+     state.
+
+     This packet is only available in extended mode (*note extended
+     mode::).
+
+     Reply:
+    `E NN'
+          for an error
+
+    `Any stop packet'
+          for success (*note Stop Reply Packets::)
+
+`vStopped'
+     In non-stop mode (*note Remote Non-Stop::), acknowledge a previous
+     stop reply and prompt for the stub to report another one.
+
+     Reply:
+    `Any stop packet'
+          if there is another unreported stop event (*note Stop Reply
+          Packets::)
+
+    `OK'
+          if there are no unreported stop events
+
+`X ADDR,LENGTH:XX...'
+     Write data to memory, where the data is transmitted in binary.
+     ADDR is address, LENGTH is number of bytes, `XX...' is binary data
+     (*note Binary Data::).
+
+     Reply:
+    `OK'
+          for success
+
+    `E NN'
+          for an error
+
+`z TYPE,ADDR,KIND'
+`Z TYPE,ADDR,KIND'
+     Insert (`Z') or remove (`z') a TYPE breakpoint or watchpoint
+     starting at address ADDRESS of kind KIND.
+
+     Each breakpoint and watchpoint packet TYPE is documented
+     separately.
+
+     _Implementation notes: A remote target shall return an empty string
+     for an unrecognized breakpoint or watchpoint packet TYPE.  A
+     remote target shall support either both or neither of a given
+     `ZTYPE...' and `zTYPE...' packet pair.  To avoid potential
+     problems with duplicate packets, the operations should be
+     implemented in an idempotent way._
+
+`z0,ADDR,KIND'
+`Z0,ADDR,KIND[;COND_LIST...][;cmds:PERSIST,CMD_LIST...]'
+     Insert (`Z0') or remove (`z0') a memory breakpoint at address ADDR
+     of type KIND.
+
+     A memory breakpoint is implemented by replacing the instruction at
+     ADDR with a software breakpoint or trap instruction.  The KIND is
+     target-specific and typically indicates the size of the breakpoint
+     in bytes that should be inserted.  E.g., the ARM and MIPS can
+     insert either a 2 or 4 byte breakpoint.  Some architectures have
+     additional meanings for KIND; COND_LIST is an optional list of
+     conditional expressions in bytecode form that should be evaluated
+     on the target's side.  These are the conditions that should be
+     taken into consideration when deciding if the breakpoint trigger
+     should be reported back to GDBN.
+
+     The COND_LIST parameter is comprised of a series of expressions,
+     concatenated without separators. Each expression has the following
+     form:
+
+    `X LEN,EXPR'
+          LEN is the length of the bytecode expression and EXPR is the
+          actual conditional expression in bytecode form.
+
+
+     The optional CMD_LIST parameter introduces commands that may be
+     run on the target, rather than being reported back to GDB.  The
+     parameter starts with a numeric flag PERSIST; if the flag is
+     nonzero, then the breakpoint may remain active and the commands
+     continue to be run even when GDB disconnects from the target.
+     Following this flag is a series of expressions concatenated with no
+     separators.  Each expression has the following form:
+
+    `X LEN,EXPR'
+          LEN is the length of the bytecode expression and EXPR is the
+          actual conditional expression in bytecode form.
+
+
+     see *Note Architecture-Specific Protocol Details::.
+
+     _Implementation note: It is possible for a target to copy or move
+     code that contains memory breakpoints (e.g., when implementing
+     overlays).  The behavior of this packet, in the presence of such a
+     target, is not defined._
+
+     Reply:
+    `OK'
+          success
+
+    `'
+          not supported
+
+    `E NN'
+          for an error
+
+`z1,ADDR,KIND'
+`Z1,ADDR,KIND[;COND_LIST...]'
+     Insert (`Z1') or remove (`z1') a hardware breakpoint at address
+     ADDR.
+
+     A hardware breakpoint is implemented using a mechanism that is not
+     dependant on being able to modify the target's memory.  KIND and
+     COND_LIST have the same meaning as in `Z0' packets.
+
+     _Implementation note: A hardware breakpoint is not affected by code
+     movement._
+
+     Reply:
+    `OK'
+          success
+
+    `'
+          not supported
+
+    `E NN'
+          for an error
+
+`z2,ADDR,KIND'
+`Z2,ADDR,KIND'
+     Insert (`Z2') or remove (`z2') a write watchpoint at ADDR.  KIND
+     is interpreted as the number of bytes to watch.
+
+     Reply:
+    `OK'
+          success
+
+    `'
+          not supported
+
+    `E NN'
+          for an error
+
+`z3,ADDR,KIND'
+`Z3,ADDR,KIND'
+     Insert (`Z3') or remove (`z3') a read watchpoint at ADDR.  KIND is
+     interpreted as the number of bytes to watch.
+
+     Reply:
+    `OK'
+          success
+
+    `'
+          not supported
+
+    `E NN'
+          for an error
+
+`z4,ADDR,KIND'
+`Z4,ADDR,KIND'
+     Insert (`Z4') or remove (`z4') an access watchpoint at ADDR.  KIND
+     is interpreted as the number of bytes to watch.
+
+     Reply:
+    `OK'
+          success
+
+    `'
+          not supported
+
+    `E NN'
+          for an error
+
+
+
+File: gdb.info,  Node: Stop Reply Packets,  Next: General Query Packets,  Prev: Packets,  Up: Remote Protocol
+
+E.3 Stop Reply Packets
+======================
+
+The `C', `c', `S', `s', `vCont', `vAttach', `vRun', `vStopped', and `?'
+packets can receive any of the below as a reply.  Except for `?' and
+`vStopped', that reply is only returned when the target halts.  In the
+below the exact meaning of "signal number" is defined by the header
+`include/gdb/signals.h' in the GDB source code.
+
+   As in the description of request packets, we include spaces in the
+reply templates for clarity; these are not part of the reply packet's
+syntax.  No GDB stop reply packet uses spaces to separate its
+components.
+
+`S AA'
+     The program received signal number AA (a two-digit hexadecimal
+     number).  This is equivalent to a `T' response with no N:R pairs.
+
+`T AA N1:R1;N2:R2;...'
+     The program received signal number AA (a two-digit hexadecimal
+     number).  This is equivalent to an `S' response, except that the
+     `N:R' pairs can carry values of important registers and other
+     information directly in the stop reply packet, reducing round-trip
+     latency.  Single-step and breakpoint traps are reported this way.
+     Each `N:R' pair is interpreted as follows:
+
+        * If N is a hexadecimal number, it is a register number, and the
+          corresponding R gives that register's value.  R is a series
+          of bytes in target byte order, with each byte given by a
+          two-digit hex number.
+
+        * If N is `thread', then R is the THREAD-ID of the stopped
+          thread, as specified in *Note thread-id syntax::.
+
+        * If N is `core', then R is the hexadecimal number of the core
+          on which the stop event was detected.
+
+        * If N is a recognized "stop reason", it describes a more
+          specific event that stopped the target.  The currently
+          defined stop reasons are listed below.  AA should be `05',
+          the trap signal.  At most one stop reason should be present.
+
+        * Otherwise, GDB should ignore this `N:R' pair and go on to the
+          next; this allows us to extend the protocol in the future.
+
+     The currently defined stop reasons are:
+
+    `watch'
+    `rwatch'
+    `awatch'
+          The packet indicates a watchpoint hit, and R is the data
+          address, in hex.
+
+    `library'
+          The packet indicates that the loaded libraries have changed.
+          GDB should use `qXfer:libraries:read' to fetch a new list of
+          loaded libraries.  R is ignored.
+
+    `replaylog'
+          The packet indicates that the target cannot continue replaying
+          logged execution events, because it has reached the end (or
+          the beginning when executing backward) of the log.  The value
+          of R will be either `begin' or `end'.  *Note Reverse
+          Execution::, for more information.
+
+`W AA'
+`W AA ; process:PID'
+     The process exited, and AA is the exit status.  This is only
+     applicable to certain targets.
+
+     The second form of the response, including the process ID of the
+     exited process, can be used only when GDB has reported support for
+     multiprocess protocol extensions; see *Note multiprocess
+     extensions::.  The PID is formatted as a big-endian hex string.
+
+`X AA'
+`X AA ; process:PID'
+     The process terminated with signal AA.
+
+     The second form of the response, including the process ID of the
+     terminated process, can be used only when GDB has reported support
+     for multiprocess protocol extensions; see *Note multiprocess
+     extensions::.  The PID is formatted as a big-endian hex string.
+
+`O XX...'
+     `XX...' is hex encoding of ASCII data, to be written as the
+     program's console output.  This can happen at any time while the
+     program is running and the debugger should continue to wait for
+     `W', `T', etc.  This reply is not permitted in non-stop mode.
+
+`F CALL-ID,PARAMETER...'
+     CALL-ID is the identifier which says which host system call should
+     be called.  This is just the name of the function.  Translation
+     into the correct system call is only applicable as it's defined in
+     GDB.  *Note File-I/O Remote Protocol Extension::, for a list of
+     implemented system calls.
+
+     `PARAMETER...' is a list of parameters as defined for this very
+     system call.
+
+     The target replies with this packet when it expects GDB to call a
+     host system call on behalf of the target.  GDB replies with an
+     appropriate `F' packet and keeps up waiting for the next reply
+     packet from the target.  The latest `C', `c', `S' or `s' action is
+     expected to be continued.  *Note File-I/O Remote Protocol
+     Extension::, for more details.
+
+
+
+File: gdb.info,  Node: General Query Packets,  Next: Architecture-Specific Protocol Details,  Prev: Stop Reply Packets,  Up: Remote Protocol
+
+E.4 General Query Packets
+=========================
+
+Packets starting with `q' are "general query packets"; packets starting
+with `Q' are "general set packets".  General query and set packets are
+a semi-unified form for retrieving and sending information to and from
+the stub.
+
+   The initial letter of a query or set packet is followed by a name
+indicating what sort of thing the packet applies to.  For example, GDB
+may use a `qSymbol' packet to exchange symbol definitions with the
+stub.  These packet names follow some conventions:
+
+   * The name must not contain commas, colons or semicolons.
+
+   * Most GDB query and set packets have a leading upper case letter.
+
+   * The names of custom vendor packets should use a company prefix, in
+     lower case, followed by a period.  For example, packets designed at
+     the Acme Corporation might begin with `qacme.foo' (for querying
+     foos) or `Qacme.bar' (for setting bars).
+
+   The name of a query or set packet should be separated from any
+parameters by a `:'; the parameters themselves should be separated by
+`,' or `;'.  Stubs must be careful to match the full packet name, and
+check for a separator or the end of the packet, in case two packet
+names share a common prefix.  New packets should not begin with `qC',
+`qP', or `qL'(1).
+
+   Like the descriptions of the other packets, each description here
+has a template showing the packet's overall syntax, followed by an
+explanation of the packet's meaning.  We include spaces in some of the
+templates for clarity; these are not part of the packet's syntax.  No
+GDB packet uses spaces to separate its components.
+
+   Here are the currently defined query and set packets:
+
+`QAgent:1'
+
+`QAgent:0'
+     Turn on or off the agent as a helper to perform some debugging
+     operations delegated from GDB (*note Control Agent::).
+
+`QAllow:OP:VAL...'
+     Specify which operations GDB expects to request of the target, as
+     a semicolon-separated list of operation name and value pairs.
+     Possible values for OP include `WriteReg', `WriteMem',
+     `InsertBreak', `InsertTrace', `InsertFastTrace', and `Stop'. VAL
+     is either 0, indicating that GDB will not request the operation,
+     or 1, indicating that it may.  (The target can then use this to
+     set up its own internals optimally, for instance if the debugger
+     never expects to insert breakpoints, it may not need to install
+     its own trap handler.)
+
+`qC'
+     Return the current thread ID.
+
+     Reply:
+    `QC THREAD-ID'
+          Where THREAD-ID is a thread ID as documented in *Note
+          thread-id syntax::.
+
+    `(anything else)'
+          Any other reply implies the old thread ID.
+
+`qCRC:ADDR,LENGTH'
+     Compute the CRC checksum of a block of memory using CRC-32 defined
+     in IEEE 802.3.  The CRC is computed byte at a time, taking the most
+     significant bit of each byte first.  The initial pattern code
+     `0xffffffff' is used to ensure leading zeros affect the CRC.
+
+     _Note:_ This is the same CRC used in validating separate debug
+     files (*note Debugging Information in Separate Files: Separate
+     Debug Files.).  However the algorithm is slightly different.  When
+     validating separate debug files, the CRC is computed taking the
+     _least_ significant bit of each byte first, and the final result
+     is inverted to detect trailing zeros.
+
+     Reply:
+    `E NN'
+          An error (such as memory fault)
+
+    `C CRC32'
+          The specified memory region's checksum is CRC32.
+
+`QDisableRandomization:VALUE'
+     Some target operating systems will randomize the virtual address
+     space of the inferior process as a security feature, but provide a
+     feature to disable such randomization, e.g. to allow for a more
+     deterministic debugging experience.  On such systems, this packet
+     with a VALUE of 1 directs the target to disable address space
+     randomization for processes subsequently started via `vRun'
+     packets, while a packet with a VALUE of 0 tells the target to
+     enable address space randomization.
+
+     This packet is only available in extended mode (*note extended
+     mode::).
+
+     Reply:
+    `OK'
+          The request succeeded.
+
+    `E NN'
+          An error occurred.  NN are hex digits.
+
+    `'
+          An empty reply indicates that `QDisableRandomization' is not
+          supported by the stub.
+
+     This packet is not probed by default; the remote stub must request
+     it, by supplying an appropriate `qSupported' response (*note
+     qSupported::).  This should only be done on targets that actually
+     support disabling address space randomization.
+
+`qfThreadInfo'
+`qsThreadInfo'
+     Obtain a list of all active thread IDs from the target (OS).
+     Since there may be too many active threads to fit into one reply
+     packet, this query works iteratively: it may require more than one
+     query/reply sequence to obtain the entire list of threads.  The
+     first query of the sequence will be the `qfThreadInfo' query;
+     subsequent queries in the sequence will be the `qsThreadInfo'
+     query.
+
+     NOTE: This packet replaces the `qL' query (see below).
+
+     Reply:
+    `m THREAD-ID'
+          A single thread ID
+
+    `m THREAD-ID,THREAD-ID...'
+          a comma-separated list of thread IDs
+
+    `l'
+          (lower case letter `L') denotes end of list.
+
+     In response to each query, the target will reply with a list of
+     one or more thread IDs, separated by commas.  GDB will respond to
+     each reply with a request for more thread ids (using the `qs' form
+     of the query), until the target responds with `l' (lower-case ell,
+     for "last").  Refer to *Note thread-id syntax::, for the format of
+     the THREAD-ID fields.
+
+`qGetTLSAddr:THREAD-ID,OFFSET,LM'
+     Fetch the address associated with thread local storage specified
+     by THREAD-ID, OFFSET, and LM.
+
+     THREAD-ID is the thread ID associated with the thread for which to
+     fetch the TLS address.  *Note thread-id syntax::.
+
+     OFFSET is the (big endian, hex encoded) offset associated with the
+     thread local variable.  (This offset is obtained from the debug
+     information associated with the variable.)
+
+     LM is the (big endian, hex encoded) OS/ABI-specific encoding of the
+     load module associated with the thread local storage.  For example,
+     a GNU/Linux system will pass the link map address of the shared
+     object associated with the thread local storage under
+     consideration.  Other operating environments may choose to
+     represent the load module differently, so the precise meaning of
+     this parameter will vary.
+
+     Reply:
+    `XX...'
+          Hex encoded (big endian) bytes representing the address of
+          the thread local storage requested.
+
+    `E NN'
+          An error occurred.  NN are hex digits.
+
+    `'
+          An empty reply indicates that `qGetTLSAddr' is not supported
+          by the stub.
+
+`qGetTIBAddr:THREAD-ID'
+     Fetch address of the Windows OS specific Thread Information Block.
+
+     THREAD-ID is the thread ID associated with the thread.
+
+     Reply:
+    `XX...'
+          Hex encoded (big endian) bytes representing the linear
+          address of the thread information block.
+
+    `E NN'
+          An error occured.  This means that either the thread was not
+          found, or the address could not be retrieved.
+
+    `'
+          An empty reply indicates that `qGetTIBAddr' is not supported
+          by the stub.
+
+`qL STARTFLAG THREADCOUNT NEXTTHREAD'
+     Obtain thread information from RTOS.  Where: STARTFLAG (one hex
+     digit) is one to indicate the first query and zero to indicate a
+     subsequent query; THREADCOUNT (two hex digits) is the maximum
+     number of threads the response packet can contain; and NEXTTHREAD
+     (eight hex digits), for subsequent queries (STARTFLAG is zero), is
+     returned in the response as ARGTHREAD.
+
+     Don't use this packet; use the `qfThreadInfo' query instead (see
+     above).
+
+     Reply:
+    `qM COUNT DONE ARGTHREAD THREAD...'
+          Where: COUNT (two hex digits) is the number of threads being
+          returned; DONE (one hex digit) is zero to indicate more
+          threads and one indicates no further threads; ARGTHREADID
+          (eight hex digits) is NEXTTHREAD from the request packet;
+          THREAD...  is a sequence of thread IDs from the target.
+          THREADID (eight hex digits).  See
+          `remote.c:parse_threadlist_response()'.
+
+`qOffsets'
+     Get section offsets that the target used when relocating the
+     downloaded image.
+
+     Reply:
+    `Text=XXX;Data=YYY[;Bss=ZZZ]'
+          Relocate the `Text' section by XXX from its original address.
+          Relocate the `Data' section by YYY from its original address.
+          If the object file format provides segment information (e.g.
+          ELF `PT_LOAD' program headers), GDB will relocate entire
+          segments by the supplied offsets.
+
+          _Note: while a `Bss' offset may be included in the response,
+          GDB ignores this and instead applies the `Data' offset to the
+          `Bss' section._
+
+    `TextSeg=XXX[;DataSeg=YYY]'
+          Relocate the first segment of the object file, which
+          conventionally contains program code, to a starting address
+          of XXX.  If `DataSeg' is specified, relocate the second
+          segment, which conventionally contains modifiable data, to a
+          starting address of YYY.  GDB will report an error if the
+          object file does not contain segment information, or does not
+          contain at least as many segments as mentioned in the reply.
+          Extra segments are kept at fixed offsets relative to the last
+          relocated segment.
+
+`qP MODE THREAD-ID'
+     Returns information on THREAD-ID.  Where: MODE is a hex encoded 32
+     bit mode; THREAD-ID is a thread ID (*note thread-id syntax::).
+
+     Don't use this packet; use the `qThreadExtraInfo' query instead
+     (see below).
+
+     Reply: see `remote.c:remote_unpack_thread_info_response()'.
+
+`QNonStop:1'
+
+`QNonStop:0'
+     Enter non-stop (`QNonStop:1') or all-stop (`QNonStop:0') mode.
+     *Note Remote Non-Stop::, for more information.
+
+     Reply:
+    `OK'
+          The request succeeded.
+
+    `E NN'
+          An error occurred.  NN are hex digits.
+
+    `'
+          An empty reply indicates that `QNonStop' is not supported by
+          the stub.
+
+     This packet is not probed by default; the remote stub must request
+     it, by supplying an appropriate `qSupported' response (*note
+     qSupported::).  Use of this packet is controlled by the `set
+     non-stop' command; *note Non-Stop Mode::.
+
+`QPassSignals: SIGNAL [;SIGNAL]...'
+     Each listed SIGNAL should be passed directly to the inferior
+     process.  Signals are numbered identically to continue packets and
+     stop replies (*note Stop Reply Packets::).  Each SIGNAL list item
+     should be strictly greater than the previous item.  These signals
+     do not need to stop the inferior, or be reported to GDB.  All
+     other signals should be reported to GDB.  Multiple `QPassSignals'
+     packets do not combine; any earlier `QPassSignals' list is
+     completely replaced by the new list.  This packet improves
+     performance when using `handle SIGNAL nostop noprint pass'.
+
+     Reply:
+    `OK'
+          The request succeeded.
+
+    `E NN'
+          An error occurred.  NN are hex digits.
+
+    `'
+          An empty reply indicates that `QPassSignals' is not supported
+          by the stub.
+
+     Use of this packet is controlled by the `set remote pass-signals'
+     command (*note set remote pass-signals: Remote Configuration.).
+     This packet is not probed by default; the remote stub must request
+     it, by supplying an appropriate `qSupported' response (*note
+     qSupported::).
+
+`QProgramSignals: SIGNAL [;SIGNAL]...'
+     Each listed SIGNAL may be delivered to the inferior process.
+     Others should be silently discarded.
+
+     In some cases, the remote stub may need to decide whether to
+     deliver a signal to the program or not without GDB involvement.
+     One example of that is while detaching -- the program's threads
+     may have stopped for signals that haven't yet had a chance of
+     being reported to GDB, and so the remote stub can use the signal
+     list specified by this packet to know whether to deliver or ignore
+     those pending signals.
+
+     This does not influence whether to deliver a signal as requested
+     by a resumption packet (*note vCont packet::).
+
+     Signals are numbered identically to continue packets and stop
+     replies (*note Stop Reply Packets::).  Each SIGNAL list item
+     should be strictly greater than the previous item.  Multiple
+     `QProgramSignals' packets do not combine; any earlier
+     `QProgramSignals' list is completely replaced by the new list.
+
+     Reply:
+    `OK'
+          The request succeeded.
+
+    `E NN'
+          An error occurred.  NN are hex digits.
+
+    `'
+          An empty reply indicates that `QProgramSignals' is not
+          supported by the stub.
+
+     Use of this packet is controlled by the `set remote
+     program-signals' command (*note set remote program-signals: Remote
+     Configuration.).  This packet is not probed by default; the remote
+     stub must request it, by supplying an appropriate `qSupported'
+     response (*note qSupported::).
+
+`qRcmd,COMMAND'
+     COMMAND (hex encoded) is passed to the local interpreter for
+     execution.  Invalid commands should be reported using the output
+     string.  Before the final result packet, the target may also
+     respond with a number of intermediate `OOUTPUT' console output
+     packets.  _Implementors should note that providing access to a
+     stubs's interpreter may have security implications_.
+
+     Reply:
+    `OK'
+          A command response with no output.
+
+    `OUTPUT'
+          A command response with the hex encoded output string OUTPUT.
+
+    `E NN'
+          Indicate a badly formed request.
+
+    `'
+          An empty reply indicates that `qRcmd' is not recognized.
+
+     (Note that the `qRcmd' packet's name is separated from the command
+     by a `,', not a `:', contrary to the naming conventions above.
+     Please don't use this packet as a model for new packets.)
+
+`qSearch:memory:ADDRESS;LENGTH;SEARCH-PATTERN'
+     Search LENGTH bytes at ADDRESS for SEARCH-PATTERN.  ADDRESS and
+     LENGTH are encoded in hex.  SEARCH-PATTERN is a sequence of bytes,
+     hex encoded.
+
+     Reply:
+    `0'
+          The pattern was not found.
+
+    `1,address'
+          The pattern was found at ADDRESS.
+
+    `E NN'
+          A badly formed request or an error was encountered while
+          searching memory.
+
+    `'
+          An empty reply indicates that `qSearch:memory' is not
+          recognized.
+
+`QStartNoAckMode'
+     Request that the remote stub disable the normal `+'/`-' protocol
+     acknowledgments (*note Packet Acknowledgment::).
+
+     Reply:
+    `OK'
+          The stub has switched to no-acknowledgment mode.  GDB
+          acknowledges this reponse, but neither the stub nor GDB shall
+          send or expect further `+'/`-' acknowledgments in the current
+          connection.
+
+    `'
+          An empty reply indicates that the stub does not support
+          no-acknowledgment mode.
+
+`qSupported [:GDBFEATURE [;GDBFEATURE]... ]'
+     Tell the remote stub about features supported by GDB, and query
+     the stub for features it supports.  This packet allows GDB and the
+     remote stub to take advantage of each others' features.
+     `qSupported' also consolidates multiple feature probes at startup,
+     to improve GDB performance--a single larger packet performs better
+     than multiple smaller probe packets on high-latency links.  Some
+     features may enable behavior which must not be on by default, e.g.
+     because it would confuse older clients or stubs.  Other features
+     may describe packets which could be automatically probed for, but
+     are not.  These features must be reported before GDB will use
+     them.  This "default unsupported" behavior is not appropriate for
+     all packets, but it helps to keep the initial connection time
+     under control with new versions of GDB which support increasing
+     numbers of packets.
+
+     Reply:
+    `STUBFEATURE [;STUBFEATURE]...'
+          The stub supports or does not support each returned
+          STUBFEATURE, depending on the form of each STUBFEATURE (see
+          below for the possible forms).
+
+    `'
+          An empty reply indicates that `qSupported' is not recognized,
+          or that no features needed to be reported to GDB.
+
+     The allowed forms for each feature (either a GDBFEATURE in the
+     `qSupported' packet, or a STUBFEATURE in the response) are:
+
+    `NAME=VALUE'
+          The remote protocol feature NAME is supported, and associated
+          with the specified VALUE.  The format of VALUE depends on the
+          feature, but it must not include a semicolon.
+
+    `NAME+'
+          The remote protocol feature NAME is supported, and does not
+          need an associated value.
+
+    `NAME-'
+          The remote protocol feature NAME is not supported.
+
+    `NAME?'
+          The remote protocol feature NAME may be supported, and GDB
+          should auto-detect support in some other way when it is
+          needed.  This form will not be used for GDBFEATURE
+          notifications, but may be used for STUBFEATURE responses.
+
+     Whenever the stub receives a `qSupported' request, the supplied
+     set of GDB features should override any previous request.  This
+     allows GDB to put the stub in a known state, even if the stub had
+     previously been communicating with a different version of GDB.
+
+     The following values of GDBFEATURE (for the packet sent by GDB)
+     are defined:
+
+    `multiprocess'
+          This feature indicates whether GDB supports multiprocess
+          extensions to the remote protocol.  GDB does not use such
+          extensions unless the stub also reports that it supports them
+          by including `multiprocess+' in its `qSupported' reply.
+          *Note multiprocess extensions::, for details.
+
+    `xmlRegisters'
+          This feature indicates that GDB supports the XML target
+          description.  If the stub sees `xmlRegisters=' with target
+          specific strings separated by a comma, it will report register
+          description.
+
+    `qRelocInsn'
+          This feature indicates whether GDB supports the `qRelocInsn'
+          packet (*note Relocate instruction reply packet: Tracepoint
+          Packets.).
+
+     Stubs should ignore any unknown values for GDBFEATURE.  Any GDB
+     which sends a `qSupported' packet supports receiving packets of
+     unlimited length (earlier versions of GDB may reject overly long
+     responses).  Additional values for GDBFEATURE may be defined in
+     the future to let the stub take advantage of new features in GDB,
+     e.g. incompatible improvements in the remote protocol--the
+     `multiprocess' feature is an example of such a feature.  The
+     stub's reply should be independent of the GDBFEATURE entries sent
+     by GDB; first GDB describes all the features it supports, and then
+     the stub replies with all the features it supports.
+
+     Similarly, GDB will silently ignore unrecognized stub feature
+     responses, as long as each response uses one of the standard forms.
+
+     Some features are flags.  A stub which supports a flag feature
+     should respond with a `+' form response.  Other features require
+     values, and the stub should respond with an `=' form response.
+
+     Each feature has a default value, which GDB will use if
+     `qSupported' is not available or if the feature is not mentioned
+     in the `qSupported' response.  The default values are fixed; a
+     stub is free to omit any feature responses that match the defaults.
+
+     Not all features can be probed, but for those which can, the
+     probing mechanism is useful: in some cases, a stub's internal
+     architecture may not allow the protocol layer to know some
+     information about the underlying target in advance.  This is
+     especially common in stubs which may be configured for multiple
+     targets.
+
+     These are the currently defined stub features and their properties:
+
+     Feature Name            Value         Default  Probe Allowed
+                             Required               
+     `PacketSize'            Yes           `-'      No
+     `qXfer:auxv:read'       No            `-'      Yes
+     `qXfer:features:read'   No            `-'      Yes
+     `qXfer:libraries:read'  No            `-'      Yes
+     `qXfer:memory-map:read' No            `-'      Yes
+     `qXfer:sdata:read'      No            `-'      Yes
+     `qXfer:spu:read'        No            `-'      Yes
+     `qXfer:spu:write'       No            `-'      Yes
+     `qXfer:siginfo:read'    No            `-'      Yes
+     `qXfer:siginfo:write'   No            `-'      Yes
+     `qXfer:threads:read'    No            `-'      Yes
+     `qXfer:traceframe-info:read'No            `-'      Yes
+     `qXfer:uib:read'        No            `-'      Yes
+     `qXfer:fdpic:read'      No            `-'      Yes
+     `QNonStop'              No            `-'      Yes
+     `QPassSignals'          No            `-'      Yes
+     `QStartNoAckMode'       No            `-'      Yes
+     `multiprocess'          No            `-'      No
+     `ConditionalBreakpoints'No            `-'      No
+     `ConditionalTracepoints'No            `-'      No
+     `ReverseContinue'       No            `-'      No
+     `ReverseStep'           No            `-'      No
+     `TracepointSource'      No            `-'      No
+     `QAgent'                No            `-'      No
+     `QAllow'                No            `-'      No
+     `QDisableRandomization' No            `-'      No
+     `EnableDisableTracepoints'No            `-'      No
+     `tracenz'               No            `-'      No
+     `BreakpointCommands'    No            `-'      No
+
+     These are the currently defined stub features, in more detail:
+
+    `PacketSize=BYTES'
+          The remote stub can accept packets up to at least BYTES in
+          length.  GDB will send packets up to this size for bulk
+          transfers, and will never send larger packets.  This is a
+          limit on the data characters in the packet, including the
+          frame and checksum.  There is no trailing NUL byte in a
+          remote protocol packet; if the stub stores packets in a
+          NUL-terminated format, it should allow an extra byte in its
+          buffer for the NUL.  If this stub feature is not supported,
+          GDB guesses based on the size of the `g' packet response.
+
+    `qXfer:auxv:read'
+          The remote stub understands the `qXfer:auxv:read' packet
+          (*note qXfer auxiliary vector read::).
+
+    `qXfer:features:read'
+          The remote stub understands the `qXfer:features:read' packet
+          (*note qXfer target description read::).
+
+    `qXfer:libraries:read'
+          The remote stub understands the `qXfer:libraries:read' packet
+          (*note qXfer library list read::).
+
+    `qXfer:libraries-svr4:read'
+          The remote stub understands the `qXfer:libraries-svr4:read'
+          packet (*note qXfer svr4 library list read::).
+
+    `qXfer:memory-map:read'
+          The remote stub understands the `qXfer:memory-map:read' packet
+          (*note qXfer memory map read::).
+
+    `qXfer:sdata:read'
+          The remote stub understands the `qXfer:sdata:read' packet
+          (*note qXfer sdata read::).
+
+    `qXfer:spu:read'
+          The remote stub understands the `qXfer:spu:read' packet
+          (*note qXfer spu read::).
+
+    `qXfer:spu:write'
+          The remote stub understands the `qXfer:spu:write' packet
+          (*note qXfer spu write::).
+
+    `qXfer:siginfo:read'
+          The remote stub understands the `qXfer:siginfo:read' packet
+          (*note qXfer siginfo read::).
+
+    `qXfer:siginfo:write'
+          The remote stub understands the `qXfer:siginfo:write' packet
+          (*note qXfer siginfo write::).
+
+    `qXfer:threads:read'
+          The remote stub understands the `qXfer:threads:read' packet
+          (*note qXfer threads read::).
+
+    `qXfer:traceframe-info:read'
+          The remote stub understands the `qXfer:traceframe-info:read'
+          packet (*note qXfer traceframe info read::).
+
+    `qXfer:uib:read'
+          The remote stub understands the `qXfer:uib:read' packet
+          (*note qXfer unwind info block::).
+
+    `qXfer:fdpic:read'
+          The remote stub understands the `qXfer:fdpic:read' packet
+          (*note qXfer fdpic loadmap read::).
+
+    `QNonStop'
+          The remote stub understands the `QNonStop' packet (*note
+          QNonStop::).
+
+    `QPassSignals'
+          The remote stub understands the `QPassSignals' packet (*note
+          QPassSignals::).
+
+    `QStartNoAckMode'
+          The remote stub understands the `QStartNoAckMode' packet and
+          prefers to operate in no-acknowledgment mode.  *Note Packet
+          Acknowledgment::.
+
+    `multiprocess'
+          The remote stub understands the multiprocess extensions to
+          the remote protocol syntax.  The multiprocess extensions
+          affect the syntax of thread IDs in both packets and replies
+          (*note thread-id syntax::), and add process IDs to the `D'
+          packet and `W' and `X' replies.  Note that reporting this
+          feature indicates support for the syntactic extensions only,
+          not that the stub necessarily supports debugging of more than
+          one process at a time.  The stub must not use multiprocess
+          extensions in packet replies unless GDB has also indicated it
+          supports them in its `qSupported' request.
+
+    `qXfer:osdata:read'
+          The remote stub understands the `qXfer:osdata:read' packet
+          ((*note qXfer osdata read::).
+
+    `ConditionalBreakpoints'
+          The target accepts and implements evaluation of conditional
+          expressions defined for breakpoints.  The target will only
+          report breakpoint triggers when such conditions are true
+          (*note Break Conditions: Conditions.).
+
+    `ConditionalTracepoints'
+          The remote stub accepts and implements conditional
+          expressions defined for tracepoints (*note Tracepoint
+          Conditions::).
+
+    `ReverseContinue'
+          The remote stub accepts and implements the reverse continue
+          packet (*note bc::).
+
+    `ReverseStep'
+          The remote stub accepts and implements the reverse step packet
+          (*note bs::).
+
+    `TracepointSource'
+          The remote stub understands the `QTDPsrc' packet that supplies
+          the source form of tracepoint definitions.
+
+    `QAgent'
+          The remote stub understands the `QAgent' packet.
+
+    `QAllow'
+          The remote stub understands the `QAllow' packet.
+
+    `QDisableRandomization'
+          The remote stub understands the `QDisableRandomization'
+          packet.
+
+    `StaticTracepoint'
+          The remote stub supports static tracepoints.
+
+    `InstallInTrace'
+          The remote stub supports installing tracepoint in tracing.
+
+    `EnableDisableTracepoints'
+          The remote stub supports the `QTEnable' (*note QTEnable::) and
+          `QTDisable' (*note QTDisable::) packets that allow tracepoints
+          to be enabled and disabled while a trace experiment is
+          running.
+
+    `tracenz'
+          The remote stub supports the `tracenz' bytecode for
+          collecting strings.  See *Note Bytecode Descriptions:: for
+          details about the bytecode.
+
+    `BreakpointCommands'
+          The remote stub supports running a breakpoint's command list
+          itself, rather than reporting the hit to GDB.
+
+
+`qSymbol::'
+     Notify the target that GDB is prepared to serve symbol lookup
+     requests.  Accept requests from the target for the values of
+     symbols.
+
+     Reply:
+    `OK'
+          The target does not need to look up any (more) symbols.
+
+    `qSymbol:SYM_NAME'
+          The target requests the value of symbol SYM_NAME (hex
+          encoded).  GDB may provide the value by using the
+          `qSymbol:SYM_VALUE:SYM_NAME' message, described below.
+
+`qSymbol:SYM_VALUE:SYM_NAME'
+     Set the value of SYM_NAME to SYM_VALUE.
+
+     SYM_NAME (hex encoded) is the name of a symbol whose value the
+     target has previously requested.
+
+     SYM_VALUE (hex) is the value for symbol SYM_NAME.  If GDB cannot
+     supply a value for SYM_NAME, then this field will be empty.
+
+     Reply:
+    `OK'
+          The target does not need to look up any (more) symbols.
+
+    `qSymbol:SYM_NAME'
+          The target requests the value of a new symbol SYM_NAME (hex
+          encoded).  GDB will continue to supply the values of symbols
+          (if available), until the target ceases to request them.
+
+`qTBuffer'
+
+`QTBuffer'
+
+`QTDisconnected'
+`QTDP'
+`QTDPsrc'
+`QTDV'
+`qTfP'
+`qTfV'
+`QTFrame'
+`qTMinFTPILen'
+     *Note Tracepoint Packets::.
+
+`qThreadExtraInfo,THREAD-ID'
+     Obtain a printable string description of a thread's attributes from
+     the target OS.  THREAD-ID is a thread ID; see *Note thread-id
+     syntax::.  This string may contain anything that the target OS
+     thinks is interesting for GDB to tell the user about the thread.
+     The string is displayed in GDB's `info threads' display.  Some
+     examples of possible thread extra info strings are `Runnable', or
+     `Blocked on Mutex'.
+
+     Reply:
+    `XX...'
+          Where `XX...' is a hex encoding of ASCII data, comprising the
+          printable string containing the extra information about the
+          thread's attributes.
+
+     (Note that the `qThreadExtraInfo' packet's name is separated from
+     the command by a `,', not a `:', contrary to the naming
+     conventions above.  Please don't use this packet as a model for new
+     packets.)
+
+`QTNotes'
+
+`qTP'
+
+`QTSave'
+
+`qTsP'
+
+`qTsV'
+`QTStart'
+`QTStop'
+`QTEnable'
+`QTDisable'
+`QTinit'
+`QTro'
+`qTStatus'
+`qTV'
+`qTfSTM'
+`qTsSTM'
+`qTSTMat'
+     *Note Tracepoint Packets::.
+
+`qXfer:OBJECT:read:ANNEX:OFFSET,LENGTH'
+     Read uninterpreted bytes from the target's special data area
+     identified by the keyword OBJECT.  Request LENGTH bytes starting
+     at OFFSET bytes into the data.  The content and encoding of ANNEX
+     is specific to OBJECT; it can supply additional details about what
+     data to access.
+
+     Here are the specific requests of this form defined so far.  All
+     `qXfer:OBJECT:read:...' requests use the same reply formats,
+     listed below.
+
+    `qXfer:auxv:read::OFFSET,LENGTH'
+          Access the target's "auxiliary vector".  *Note auxiliary
+          vector: OS Information.  Note ANNEX must be empty.
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate `qSupported' response
+          (*note qSupported::).
+
+    `qXfer:features:read:ANNEX:OFFSET,LENGTH'
+          Access the "target description".  *Note Target
+          Descriptions::.  The annex specifies which XML document to
+          access.  The main description is always loaded from the
+          `target.xml' annex.
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate `qSupported' response
+          (*note qSupported::).
+
+    `qXfer:libraries:read:ANNEX:OFFSET,LENGTH'
+          Access the target's list of loaded libraries.  *Note Library
+          List Format::.  The annex part of the generic `qXfer' packet
+          must be empty (*note qXfer read::).
+
+          Targets which maintain a list of libraries in the program's
+          memory do not need to implement this packet; it is designed
+          for platforms where the operating system manages the list of
+          loaded libraries.
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate `qSupported' response
+          (*note qSupported::).
+
+    `qXfer:libraries-svr4:read:ANNEX:OFFSET,LENGTH'
+          Access the target's list of loaded libraries when the target
+          is an SVR4 platform.  *Note Library List Format for SVR4
+          Targets::.  The annex part of the generic `qXfer' packet must
+          be empty (*note qXfer read::).
+
+          This packet is optional for better performance on SVR4
+          targets.  GDB uses memory read packets to read the SVR4
+          library list otherwise.
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate `qSupported' response
+          (*note qSupported::).
+
+    `qXfer:memory-map:read::OFFSET,LENGTH'
+          Access the target's "memory-map".  *Note Memory Map Format::.
+          The annex part of the generic `qXfer' packet must be empty
+          (*note qXfer read::).
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate `qSupported' response
+          (*note qSupported::).
+
+    `qXfer:sdata:read::OFFSET,LENGTH'
+          Read contents of the extra collected static tracepoint marker
+          information.  The annex part of the generic `qXfer' packet
+          must be empty (*note qXfer read::).  *Note Tracepoint Action
+          Lists: Tracepoint Actions.
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate `qSupported' response
+          (*note qSupported::).
+
+    `qXfer:siginfo:read::OFFSET,LENGTH'
+          Read contents of the extra signal information on the target
+          system.  The annex part of the generic `qXfer' packet must be
+          empty (*note qXfer read::).
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate `qSupported' response
+          (*note qSupported::).
+
+    `qXfer:spu:read:ANNEX:OFFSET,LENGTH'
+          Read contents of an `spufs' file on the target system.  The
+          annex specifies which file to read; it must be of the form
+          `ID/NAME', where ID specifies an SPU context ID in the target
+          process, and NAME identifes the `spufs' file in that context
+          to be accessed.
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate `qSupported' response
+          (*note qSupported::).
+
+    `qXfer:threads:read::OFFSET,LENGTH'
+          Access the list of threads on target.  *Note Thread List
+          Format::.  The annex part of the generic `qXfer' packet must
+          be empty (*note qXfer read::).
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate `qSupported' response
+          (*note qSupported::).
+
+    `qXfer:traceframe-info:read::OFFSET,LENGTH'
+          Return a description of the current traceframe's contents.
+          *Note Traceframe Info Format::.  The annex part of the generic
+          `qXfer' packet must be empty (*note qXfer read::).
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate `qSupported' response
+          (*note qSupported::).
+
+    `qXfer:uib:read:PC:OFFSET,LENGTH'
+          Return the unwind information block for PC.  This packet is
+          used on OpenVMS/ia64 to ask the kernel unwind information.
+
+          This packet is not probed by default.
+
+    `qXfer:fdpic:read:ANNEX:OFFSET,LENGTH'
+          Read contents of `loadmap's on the target system.  The annex,
+          either `exec' or `interp', specifies which `loadmap',
+          executable `loadmap' or interpreter `loadmap' to read.
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate `qSupported' response
+          (*note qSupported::).
+
+    `qXfer:osdata:read::OFFSET,LENGTH'
+          Access the target's "operating system information".  *Note
+          Operating System Information::.
+
+
+     Reply:
+    `m DATA'
+          Data DATA (*note Binary Data::) has been read from the
+          target.  There may be more data at a higher address (although
+          it is permitted to return `m' even for the last valid block
+          of data, as long as at least one byte of data was read).
+          DATA may have fewer bytes than the LENGTH in the request.
+
+    `l DATA'
+          Data DATA (*note Binary Data::) has been read from the target.
+          There is no more data to be read.  DATA may have fewer bytes
+          than the LENGTH in the request.
+
+    `l'
+          The OFFSET in the request is at the end of the data.  There
+          is no more data to be read.
+
+    `E00'
+          The request was malformed, or ANNEX was invalid.
+
+    `E NN'
+          The offset was invalid, or there was an error encountered
+          reading the data.  NN is a hex-encoded `errno' value.
+
+    `'
+          An empty reply indicates the OBJECT string was not recognized
+          by the stub, or that the object does not support reading.
+
+`qXfer:OBJECT:write:ANNEX:OFFSET:DATA...'
+     Write uninterpreted bytes into the target's special data area
+     identified by the keyword OBJECT, starting at OFFSET bytes into
+     the data.  DATA... is the binary-encoded data (*note Binary
+     Data::) to be written.  The content and encoding of ANNEX is
+     specific to OBJECT; it can supply additional details about what
+     data to access.
+
+     Here are the specific requests of this form defined so far.  All
+     `qXfer:OBJECT:write:...' requests use the same reply formats,
+     listed below.
+
+    `qXfer:siginfo:write::OFFSET:DATA...'
+          Write DATA to the extra signal information on the target
+          system.  The annex part of the generic `qXfer' packet must be
+          empty (*note qXfer write::).
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate `qSupported' response
+          (*note qSupported::).
+
+    `qXfer:spu:write:ANNEX:OFFSET:DATA...'
+          Write DATA to an `spufs' file on the target system.  The
+          annex specifies which file to write; it must be of the form
+          `ID/NAME', where ID specifies an SPU context ID in the target
+          process, and NAME identifes the `spufs' file in that context
+          to be accessed.
+
+          This packet is not probed by default; the remote stub must
+          request it, by supplying an appropriate `qSupported' response
+          (*note qSupported::).
+
+     Reply:
+    `NN'
+          NN (hex encoded) is the number of bytes written.  This may be
+          fewer bytes than supplied in the request.
+
+    `E00'
+          The request was malformed, or ANNEX was invalid.
+
+    `E NN'
+          The offset was invalid, or there was an error encountered
+          writing the data.  NN is a hex-encoded `errno' value.
+
+    `'
+          An empty reply indicates the OBJECT string was not recognized
+          by the stub, or that the object does not support writing.
+
+`qXfer:OBJECT:OPERATION:...'
+     Requests of this form may be added in the future.  When a stub does
+     not recognize the OBJECT keyword, or its support for OBJECT does
+     not recognize the OPERATION keyword, the stub must respond with an
+     empty packet.
+
+`qAttached:PID'
+     Return an indication of whether the remote server attached to an
+     existing process or created a new process.  When the multiprocess
+     protocol extensions are supported (*note multiprocess
+     extensions::), PID is an integer in hexadecimal format identifying
+     the target process.  Otherwise, GDB will omit the PID field and
+     the query packet will be simplified as `qAttached'.
+
+     This query is used, for example, to know whether the remote process
+     should be detached or killed when a GDB session is ended with the
+     `quit' command.
+
+     Reply:
+    `1'
+          The remote server attached to an existing process.
+
+    `0'
+          The remote server created a new process.
+
+    `E NN'
+          A badly formed request or an error was encountered.
+
+
+   ---------- Footnotes ----------
+
+   (1) The `qP' and `qL' packets predate these conventions, and have
+arguments without any terminator for the packet name; we suspect they
+are in widespread use in places that are difficult to upgrade.  The
+`qC' packet has no arguments, but some existing stubs (e.g. RedBoot)
+are known to not check for the end of the packet.
+
+
+File: gdb.info,  Node: Architecture-Specific Protocol Details,  Next: Tracepoint Packets,  Prev: General Query Packets,  Up: Remote Protocol
+
+E.5 Architecture-Specific Protocol Details
+==========================================
+
+This section describes how the remote protocol is applied to specific
+target architectures.  Also see *Note Standard Target Features::, for
+details of XML target descriptions for each architecture.
+
+* Menu:
+
+* ARM-Specific Protocol Details::
+* MIPS-Specific Protocol Details::
+
+
+File: gdb.info,  Node: ARM-Specific Protocol Details,  Next: MIPS-Specific Protocol Details,  Up: Architecture-Specific Protocol Details
+
+E.5.1 ARM-specific Protocol Details
+-----------------------------------
+
+* Menu:
+
+* ARM Breakpoint Kinds::
+
+
+File: gdb.info,  Node: ARM Breakpoint Kinds,  Up: ARM-Specific Protocol Details
+
+E.5.1.1 ARM Breakpoint Kinds
+............................
+
+These breakpoint kinds are defined for the `Z0' and `Z1' packets.
+
+2
+     16-bit Thumb mode breakpoint.
+
+3
+     32-bit Thumb mode (Thumb-2) breakpoint.
+
+4
+     32-bit ARM mode breakpoint.
+
+
+
+File: gdb.info,  Node: MIPS-Specific Protocol Details,  Prev: ARM-Specific Protocol Details,  Up: Architecture-Specific Protocol Details
+
+E.5.2 MIPS-specific Protocol Details
+------------------------------------
+
+* Menu:
+
+* MIPS Register packet Format::
+* MIPS Breakpoint Kinds::
+
+
+File: gdb.info,  Node: MIPS Register packet Format,  Next: MIPS Breakpoint Kinds,  Up: MIPS-Specific Protocol Details
+
+E.5.2.1 MIPS Register Packet Format
+...................................
+
+The following `g'/`G' packets have previously been defined.  In the
+below, some thirty-two bit registers are transferred as sixty-four
+bits.  Those registers should be zero/sign extended (which?)  to fill
+the space allocated.  Register bytes are transferred in target byte
+order.  The two nibbles within a register byte are transferred
+most-significant - least-significant.
+
+MIPS32
+     All registers are transferred as thirty-two bit quantities in the
+     order: 32 general-purpose; sr; lo; hi; bad; cause; pc; 32
+     floating-point registers; fsr; fir; fp.
+
+MIPS64
+     All registers are transferred as sixty-four bit quantities
+     (including thirty-two bit registers such as `sr').  The ordering
+     is the same as `MIPS32'.
+
+
+
+File: gdb.info,  Node: MIPS Breakpoint Kinds,  Prev: MIPS Register packet Format,  Up: MIPS-Specific Protocol Details
+
+E.5.2.2 MIPS Breakpoint Kinds
+.............................
+
+These breakpoint kinds are defined for the `Z0' and `Z1' packets.
+
+2
+     16-bit MIPS16 mode breakpoint.
+
+3
+     16-bit microMIPS mode breakpoint.
+
+4
+     32-bit standard MIPS mode breakpoint.
+
+5
+     32-bit microMIPS mode breakpoint.
+
+
+
+File: gdb.info,  Node: Tracepoint Packets,  Next: Host I/O Packets,  Prev: Architecture-Specific Protocol Details,  Up: Remote Protocol
+
+E.6 Tracepoint Packets
+======================
+
+Here we describe the packets GDB uses to implement tracepoints (*note
+Tracepoints::).
+
+`QTDP:N:ADDR:ENA:STEP:PASS[:FFLEN][:XLEN,BYTES][-]'
+     Create a new tracepoint, number N, at ADDR.  If ENA is `E', then
+     the tracepoint is enabled; if it is `D', then the tracepoint is
+     disabled.  STEP is the tracepoint's step count, and PASS is its
+     pass count.  If an `F' is present, then the tracepoint is to be a
+     fast tracepoint, and the FLEN is the number of bytes that the
+     target should copy elsewhere to make room for the tracepoint.  If
+     an `X' is present, it introduces a tracepoint condition, which
+     consists of a hexadecimal length, followed by a comma and
+     hex-encoded bytes, in a manner similar to action encodings as
+     described below.  If the trailing `-' is present, further `QTDP'
+     packets will follow to specify this tracepoint's actions.
+
+     Replies:
+    `OK'
+          The packet was understood and carried out.
+
+    `qRelocInsn'
+          *Note Relocate instruction reply packet: Tracepoint Packets.
+
+    `'
+          The packet was not recognized.
+
+`QTDP:-N:ADDR:[S]ACTION...[-]'
+     Define actions to be taken when a tracepoint is hit.  N and ADDR
+     must be the same as in the initial `QTDP' packet for this
+     tracepoint.  This packet may only be sent immediately after
+     another `QTDP' packet that ended with a `-'.  If the trailing `-'
+     is present, further `QTDP' packets will follow, specifying more
+     actions for this tracepoint.
+
+     In the series of action packets for a given tracepoint, at most one
+     can have an `S' before its first ACTION.  If such a packet is
+     sent, it and the following packets define "while-stepping"
+     actions.  Any prior packets define ordinary actions -- that is,
+     those taken when the tracepoint is first hit.  If no action packet
+     has an `S', then all the packets in the series specify ordinary
+     tracepoint actions.
+
+     The `ACTION...' portion of the packet is a series of actions,
+     concatenated without separators.  Each action has one of the
+     following forms:
+
+    `R MASK'
+          Collect the registers whose bits are set in MASK.  MASK is a
+          hexadecimal number whose I'th bit is set if register number I
+          should be collected.  (The least significant bit is numbered
+          zero.)  Note that MASK may be any number of digits long; it
+          may not fit in a 32-bit word.
+
+    `M BASEREG,OFFSET,LEN'
+          Collect LEN bytes of memory starting at the address in
+          register number BASEREG, plus OFFSET.  If BASEREG is `-1',
+          then the range has a fixed address: OFFSET is the address of
+          the lowest byte to collect.  The BASEREG, OFFSET, and LEN
+          parameters are all unsigned hexadecimal values (the `-1'
+          value for BASEREG is a special case).
+
+    `X LEN,EXPR'
+          Evaluate EXPR, whose length is LEN, and collect memory as it
+          directs.  EXPR is an agent expression, as described in *Note
+          Agent Expressions::.  Each byte of the expression is encoded
+          as a two-digit hex number in the packet; LEN is the number of
+          bytes in the expression (and thus one-half the number of hex
+          digits in the packet).
+
+
+     Any number of actions may be packed together in a single `QTDP'
+     packet, as long as the packet does not exceed the maximum packet
+     length (400 bytes, for many stubs).  There may be only one `R'
+     action per tracepoint, and it must precede any `M' or `X' actions.
+     Any registers referred to by `M' and `X' actions must be
+     collected by a preceding `R' action.  (The "while-stepping"
+     actions are treated as if they were attached to a separate
+     tracepoint, as far as these restrictions are concerned.)
+
+     Replies:
+    `OK'
+          The packet was understood and carried out.
+
+    `qRelocInsn'
+          *Note Relocate instruction reply packet: Tracepoint Packets.
+
+    `'
+          The packet was not recognized.
+
+`QTDPsrc:N:ADDR:TYPE:START:SLEN:BYTES'
+     Specify a source string of tracepoint N at address ADDR.  This is
+     useful to get accurate reproduction of the tracepoints originally
+     downloaded at the beginning of the trace run.  TYPE is the name of
+     the tracepoint part, such as `cond' for the tracepoint's
+     conditional expression (see below for a list of types), while
+     BYTES is the string, encoded in hexadecimal.
+
+     START is the offset of the BYTES within the overall source string,
+     while SLEN is the total length of the source string.  This is
+     intended for handling source strings that are longer than will fit
+     in a single packet.
+
+     The available string types are `at' for the location, `cond' for
+     the conditional, and `cmd' for an action command.  GDB sends a
+     separate packet for each command in the action list, in the same
+     order in which the commands are stored in the list.
+
+     The target does not need to do anything with source strings except
+     report them back as part of the replies to the `qTfP'/`qTsP' query
+     packets.
+
+     Although this packet is optional, and GDB will only send it if the
+     target replies with `TracepointSource' *Note General Query
+     Packets::, it makes both disconnected tracing and trace files much
+     easier to use.  Otherwise the user must be careful that the
+     tracepoints in effect while looking at trace frames are identical
+     to the ones in effect during the trace run; even a small
+     discrepancy could cause `tdump' not to work, or a particular trace
+     frame not be found.
+
+`QTDV:N:VALUE'
+     Create a new trace state variable, number N, with an initial value
+     of VALUE, which is a 64-bit signed integer.  Both N and VALUE are
+     encoded as hexadecimal values. GDB has the option of not using
+     this packet for initial values of zero; the target should simply
+     create the trace state variables as they are mentioned in
+     expressions.
+
+`QTFrame:N'
+     Select the N'th tracepoint frame from the buffer, and use the
+     register and memory contents recorded there to answer subsequent
+     request packets from GDB.
+
+     A successful reply from the stub indicates that the stub has found
+     the requested frame.  The response is a series of parts,
+     concatenated without separators, describing the frame we selected.
+     Each part has one of the following forms:
+
+    `F F'
+          The selected frame is number N in the trace frame buffer; F
+          is a hexadecimal number.  If F is `-1', then there was no
+          frame matching the criteria in the request packet.
+
+    `T T'
+          The selected trace frame records a hit of tracepoint number T;
+          T is a hexadecimal number.
+
+
+`QTFrame:pc:ADDR'
+     Like `QTFrame:N', but select the first tracepoint frame after the
+     currently selected frame whose PC is ADDR; ADDR is a hexadecimal
+     number.
+
+`QTFrame:tdp:T'
+     Like `QTFrame:N', but select the first tracepoint frame after the
+     currently selected frame that is a hit of tracepoint T; T is a
+     hexadecimal number.
+
+`QTFrame:range:START:END'
+     Like `QTFrame:N', but select the first tracepoint frame after the
+     currently selected frame whose PC is between START (inclusive) and
+     END (inclusive); START and END are hexadecimal numbers.
+
+`QTFrame:outside:START:END'
+     Like `QTFrame:range:START:END', but select the first frame
+     _outside_ the given range of addresses (exclusive).
+
+`qTMinFTPILen'
+     This packet requests the minimum length of instruction at which a
+     fast tracepoint (*note Set Tracepoints::) may be placed.  For
+     instance, on the 32-bit x86 architecture, it is possible to use a
+     4-byte jump, but it depends on the target system being able to
+     create trampolines in the first 64K of memory, which might or
+     might not be possible for that system.  So the reply to this
+     packet will be 4 if it is able to arrange for that.
+
+     Replies:
+
+    `0'
+          The minimum instruction length is currently unknown.
+
+    `LENGTH'
+          The minimum instruction length is LENGTH, where LENGTH is
+          greater or equal to 1.  LENGTH is a hexadecimal number.  A
+          reply of 1 means that a fast tracepoint may be placed on any
+          instruction regardless of size.
+
+    `E'
+          An error has occurred.
+
+    `'
+          An empty reply indicates that the request is not supported by
+          the stub.
+
+`QTStart'
+     Begin the tracepoint experiment.  Begin collecting data from
+     tracepoint hits in the trace frame buffer.  This packet supports
+     the `qRelocInsn' reply (*note Relocate instruction reply packet:
+     Tracepoint Packets.).
+
+`QTStop'
+     End the tracepoint experiment.  Stop collecting trace frames.
+
+`QTEnable:N:ADDR'
+     Enable tracepoint N at address ADDR in a started tracepoint
+     experiment.  If the tracepoint was previously disabled, then
+     collection of data from it will resume.
+
+`QTDisable:N:ADDR'
+     Disable tracepoint N at address ADDR in a started tracepoint
+     experiment.  No more data will be collected from the tracepoint
+     unless `QTEnable:N:ADDR' is subsequently issued.
+
+`QTinit'
+     Clear the table of tracepoints, and empty the trace frame buffer.
+
+`QTro:START1,END1:START2,END2:...'
+     Establish the given ranges of memory as "transparent".  The stub
+     will answer requests for these ranges from memory's current
+     contents, if they were not collected as part of the tracepoint hit.
+
+     GDB uses this to mark read-only regions of memory, like those
+     containing program code.  Since these areas never change, they
+     should still have the same contents they did when the tracepoint
+     was hit, so there's no reason for the stub to refuse to provide
+     their contents.
+
+`QTDisconnected:VALUE'
+     Set the choice to what to do with the tracing run when GDB
+     disconnects from the target.  A VALUE of 1 directs the target to
+     continue the tracing run, while 0 tells the target to stop tracing
+     if GDB is no longer in the picture.
+
+`qTStatus'
+     Ask the stub if there is a trace experiment running right now.
+
+     The reply has the form:
+
+    `TRUNNING[;FIELD]...'
+          RUNNING is a single digit `1' if the trace is presently
+          running, or `0' if not.  It is followed by semicolon-separated
+          optional fields that an agent may use to report additional
+          status.
+
+
+     If the trace is not running, the agent may report any of several
+     explanations as one of the optional fields:
+
+    `tnotrun:0'
+          No trace has been run yet.
+
+    `tstop[:TEXT]:0'
+          The trace was stopped by a user-originated stop command.  The
+          optional TEXT field is a user-supplied string supplied as
+          part of the stop command (for instance, an explanation of why
+          the trace was stopped manually).  It is hex-encoded.
+
+    `tfull:0'
+          The trace stopped because the trace buffer filled up.
+
+    `tdisconnected:0'
+          The trace stopped because GDB disconnected from the target.
+
+    `tpasscount:TPNUM'
+          The trace stopped because tracepoint TPNUM exceeded its pass
+          count.
+
+    `terror:TEXT:TPNUM'
+          The trace stopped because tracepoint TPNUM had an error.  The
+          string TEXT is available to describe the nature of the error
+          (for instance, a divide by zero in the condition expression).
+          TEXT is hex encoded.
+
+    `tunknown:0'
+          The trace stopped for some other reason.
+
+
+     Additional optional fields supply statistical and other
+     information.  Although not required, they are extremely useful for
+     users monitoring the progress of a trace run.  If a trace has
+     stopped, and these numbers are reported, they must reflect the
+     state of the just-stopped trace.
+
+    `tframes:N'
+          The number of trace frames in the buffer.
+
+    `tcreated:N'
+          The total number of trace frames created during the run. This
+          may be larger than the trace frame count, if the buffer is
+          circular.
+
+    `tsize:N'
+          The total size of the trace buffer, in bytes.
+
+    `tfree:N'
+          The number of bytes still unused in the buffer.
+
+    `circular:N'
+          The value of the circular trace buffer flag.  `1' means that
+          the trace buffer is circular and old trace frames will be
+          discarded if necessary to make room, `0' means that the trace
+          buffer is linear and may fill up.
+
+    `disconn:N'
+          The value of the disconnected tracing flag.  `1' means that
+          tracing will continue after GDB disconnects, `0' means that
+          the trace run will stop.
+
+
+`qTP:TP:ADDR'
+     Ask the stub for the current state of tracepoint number TP at
+     address ADDR.
+
+     Replies:
+    `VHITS:USAGE'
+          The tracepoint has been hit HITS times so far during the trace
+          run, and accounts for USAGE in the trace buffer.  Note that
+          `while-stepping' steps are not counted as separate hits, but
+          the steps' space consumption is added into the usage number.
+
+
+`qTV:VAR'
+     Ask the stub for the value of the trace state variable number VAR.
+
+     Replies:
+    `VVALUE'
+          The value of the variable is VALUE.  This will be the current
+          value of the variable if the user is examining a running
+          target, or a saved value if the variable was collected in the
+          trace frame that the user is looking at.  Note that multiple
+          requests may result in different reply values, such as when
+          requesting values while the program is running.
+
+    `U'
+          The value of the variable is unknown.  This would occur, for
+          example, if the user is examining a trace frame in which the
+          requested variable was not collected.
+
+`qTfP'
+`qTsP'
+     These packets request data about tracepoints that are being used by
+     the target.  GDB sends `qTfP' to get the first piece of data, and
+     multiple `qTsP' to get additional pieces.  Replies to these
+     packets generally take the form of the `QTDP' packets that define
+     tracepoints. (FIXME add detailed syntax)
+
+`qTfV'
+`qTsV'
+     These packets request data about trace state variables that are on
+     the target.  GDB sends `qTfV' to get the first vari of data, and
+     multiple `qTsV' to get additional variables.  Replies to these
+     packets follow the syntax of the `QTDV' packets that define trace
+     state variables.
+
+`qTfSTM'
+`qTsSTM'
+     These packets request data about static tracepoint markers that
+     exist in the target program.  GDB sends `qTfSTM' to get the first
+     piece of data, and multiple `qTsSTM' to get additional pieces.
+     Replies to these packets take the following form:
+
+     Reply:
+    `m ADDRESS:ID:EXTRA'
+          A single marker
+
+    `m ADDRESS:ID:EXTRA,ADDRESS:ID:EXTRA...'
+          a comma-separated list of markers
+
+    `l'
+          (lower case letter `L') denotes end of list.
+
+    `E NN'
+          An error occurred.  NN are hex digits.
+
+    `'
+          An empty reply indicates that the request is not supported by
+          the stub.
+
+     ADDRESS is encoded in hex.  ID and EXTRA are strings encoded in
+     hex.
+
+     In response to each query, the target will reply with a list of
+     one or more markers, separated by commas.  GDB will respond to each
+     reply with a request for more markers (using the `qs' form of the
+     query), until the target responds with `l' (lower-case ell, for
+     "last").
+
+`qTSTMat:ADDRESS'
+     This packets requests data about static tracepoint markers in the
+     target program at ADDRESS.  Replies to this packet follow the
+     syntax of the `qTfSTM' and `qTsSTM' packets that list static
+     tracepoint markers.
+
+`QTSave:FILENAME'
+     This packet directs the target to save trace data to the file name
+     FILENAME in the target's filesystem.  FILENAME is encoded as a hex
+     string; the interpretation of the file name (relative vs absolute,
+     wild cards, etc) is up to the target.
+
+`qTBuffer:OFFSET,LEN'
+     Return up to LEN bytes of the current contents of trace buffer,
+     starting at OFFSET.  The trace buffer is treated as if it were a
+     contiguous collection of traceframes, as per the trace file format.
+     The reply consists as many hex-encoded bytes as the target can
+     deliver in a packet; it is not an error to return fewer than were
+     asked for.  A reply consisting of just `l' indicates that no bytes
+     are available.
+
+`QTBuffer:circular:VALUE'
+     This packet directs the target to use a circular trace buffer if
+     VALUE is 1, or a linear buffer if the value is 0.
+
+`QTNotes:[TYPE:TEXT][;TYPE:TEXT]...'
+     This packet adds optional textual notes to the trace run.
+     Allowable types include `user', `notes', and `tstop', the TEXT
+     fields are arbitrary strings, hex-encoded.
+
+
+E.6.1 Relocate instruction reply packet
+---------------------------------------
+
+When installing fast tracepoints in memory, the target may need to
+relocate the instruction currently at the tracepoint address to a
+different address in memory.  For most instructions, a simple copy is
+enough, but, for example, call instructions that implicitly push the
+return address on the stack, and relative branches or other PC-relative
+instructions require offset adjustment, so that the effect of executing
+the instruction at a different address is the same as if it had
+executed in the original location.
+
+   In response to several of the tracepoint packets, the target may also
+respond with a number of intermediate `qRelocInsn' request packets
+before the final result packet, to have GDB handle this relocation
+operation.  If a packet supports this mechanism, its documentation will
+explicitly say so.  See for example the above descriptions for the
+`QTStart' and `QTDP' packets.  The format of the request is:
+
+`qRelocInsn:FROM;TO'
+     This requests GDB to copy instruction at address FROM to address
+     TO, possibly adjusted so that executing the instruction at TO has
+     the same effect as executing it at FROM.  GDB writes the adjusted
+     instruction to target memory starting at TO.
+
+   Replies:
+`qRelocInsn:ADJUSTED_SIZE'
+     Informs the stub the relocation is complete.  ADJUSTED_SIZE is the
+     length in bytes of resulting relocated instruction sequence.
+
+`E NN'
+     A badly formed request was detected, or an error was encountered
+     while relocating the instruction.
+
+
+File: gdb.info,  Node: Host I/O Packets,  Next: Interrupts,  Prev: Tracepoint Packets,  Up: Remote Protocol
+
+E.7 Host I/O Packets
+====================
+
+The "Host I/O" packets allow GDB to perform I/O operations on the far
+side of a remote link.  For example, Host I/O is used to upload and
+download files to a remote target with its own filesystem.  Host I/O
+uses the same constant values and data structure layout as the
+target-initiated File-I/O protocol.  However, the Host I/O packets are
+structured differently.  The target-initiated protocol relies on target
+memory to store parameters and buffers.  Host I/O requests are
+initiated by GDB, and the target's memory is not involved.  *Note
+File-I/O Remote Protocol Extension::, for more details on the
+target-initiated protocol.
+
+   The Host I/O request packets all encode a single operation along with
+its arguments.  They have this format:
+
+`vFile:OPERATION: PARAMETER...'
+     OPERATION is the name of the particular request; the target should
+     compare the entire packet name up to the second colon when checking
+     for a supported operation.  The format of PARAMETER depends on the
+     operation.  Numbers are always passed in hexadecimal.  Negative
+     numbers have an explicit minus sign (i.e. two's complement is not
+     used).  Strings (e.g. filenames) are encoded as a series of
+     hexadecimal bytes.  The last argument to a system call may be a
+     buffer of escaped binary data (*note Binary Data::).
+
+
+   The valid responses to Host I/O packets are:
+
+`F RESULT [, ERRNO] [; ATTACHMENT]'
+     RESULT is the integer value returned by this operation, usually
+     non-negative for success and -1 for errors.  If an error has
+     occured, ERRNO will be included in the result.  ERRNO will have a
+     value defined by the File-I/O protocol (*note Errno Values::).  For
+     operations which return data, ATTACHMENT supplies the data as a
+     binary buffer.  Binary buffers in response packets are escaped in
+     the normal way (*note Binary Data::).  See the individual packet
+     documentation for the interpretation of RESULT and ATTACHMENT.
+
+`'
+     An empty response indicates that this operation is not recognized.
+
+
+   These are the supported Host I/O operations:
+
+`vFile:open: PATHNAME, FLAGS, MODE'
+     Open a file at PATHNAME and return a file descriptor for it, or
+     return -1 if an error occurs.  PATHNAME is a string, FLAGS is an
+     integer indicating a mask of open flags (*note Open Flags::), and
+     MODE is an integer indicating a mask of mode bits to use if the
+     file is created (*note mode_t Values::).  *Note open::, for
+     details of the open flags and mode values.
+
+`vFile:close: FD'
+     Close the open file corresponding to FD and return 0, or -1 if an
+     error occurs.
+
+`vFile:pread: FD, COUNT, OFFSET'
+     Read data from the open file corresponding to FD.  Up to COUNT
+     bytes will be read from the file, starting at OFFSET relative to
+     the start of the file.  The target may read fewer bytes; common
+     reasons include packet size limits and an end-of-file condition.
+     The number of bytes read is returned.  Zero should only be
+     returned for a successful read at the end of the file, or if COUNT
+     was zero.
+
+     The data read should be returned as a binary attachment on success.
+     If zero bytes were read, the response should include an empty
+     binary attachment (i.e. a trailing semicolon).  The return value
+     is the number of target bytes read; the binary attachment may be
+     longer if some characters were escaped.
+
+`vFile:pwrite: FD, OFFSET, DATA'
+     Write DATA (a binary buffer) to the open file corresponding to FD.
+     Start the write at OFFSET from the start of the file.  Unlike
+     many `write' system calls, there is no separate COUNT argument;
+     the length of DATA in the packet is used.  `vFile:write' returns
+     the number of bytes written, which may be shorter than the length
+     of DATA, or -1 if an error occurred.
+
+`vFile:unlink: PATHNAME'
+     Delete the file at PATHNAME on the target.  Return 0, or -1 if an
+     error occurs.  PATHNAME is a string.
+
+`vFile:readlink: FILENAME'
+     Read value of symbolic link FILENAME on the target.  Return the
+     number of bytes read, or -1 if an error occurs.
+
+     The data read should be returned as a binary attachment on success.
+     If zero bytes were read, the response should include an empty
+     binary attachment (i.e. a trailing semicolon).  The return value
+     is the number of target bytes read; the binary attachment may be
+     longer if some characters were escaped.
+
+
+
+File: gdb.info,  Node: Interrupts,  Next: Notification Packets,  Prev: Host I/O Packets,  Up: Remote Protocol
+
+E.8 Interrupts
+==============
+
+When a program on the remote target is running, GDB may attempt to
+interrupt it by sending a `Ctrl-C', `BREAK' or a `BREAK' followed by
+`g', control of which is specified via GDB's `interrupt-sequence'.
+
+   The precise meaning of `BREAK' is defined by the transport mechanism
+and may, in fact, be undefined.  GDB does not currently define a
+`BREAK' mechanism for any of the network interfaces except for TCP, in
+which case GDB sends the `telnet' BREAK sequence.
+
+   `Ctrl-C', on the other hand, is defined and implemented for all
+transport mechanisms.  It is represented by sending the single byte
+`0x03' without any of the usual packet overhead described in the
+Overview section (*note Overview::).  When a `0x03' byte is transmitted
+as part of a packet, it is considered to be packet data and does _not_
+represent an interrupt.  E.g., an `X' packet (*note X packet::), used
+for binary downloads, may include an unescaped `0x03' as part of its
+packet.
+
+   `BREAK' followed by `g' is also known as Magic SysRq g.  When Linux
+kernel receives this sequence from serial port, it stops execution and
+connects to gdb.
+
+   Stubs are not required to recognize these interrupt mechanisms and
+the precise meaning associated with receipt of the interrupt is
+implementation defined.  If the target supports debugging of multiple
+threads and/or processes, it should attempt to interrupt all
+currently-executing threads and processes.  If the stub is successful
+at interrupting the running program, it should send one of the stop
+reply packets (*note Stop Reply Packets::) to GDB as a result of
+successfully stopping the program in all-stop mode, and a stop reply
+for each stopped thread in non-stop mode.  Interrupts received while the
+program is stopped are discarded.
+
+
+File: gdb.info,  Node: Notification Packets,  Next: Remote Non-Stop,  Prev: Interrupts,  Up: Remote Protocol
+
+E.9 Notification Packets
+========================
+
+The GDB remote serial protocol includes "notifications", packets that
+require no acknowledgment.  Both the GDB and the stub may send
+notifications (although the only notifications defined at present are
+sent by the stub).  Notifications carry information without incurring
+the round-trip latency of an acknowledgment, and so are useful for
+low-impact communications where occasional packet loss is not a problem.
+
+   A notification packet has the form `% DATA # CHECKSUM', where DATA
+is the content of the notification, and CHECKSUM is a checksum of DATA,
+computed and formatted as for ordinary GDB packets.  A notification's
+DATA never contains `$', `%' or `#' characters.  Upon receiving a
+notification, the recipient sends no `+' or `-' to acknowledge the
+notification's receipt or to report its corruption.
+
+   Every notification's DATA begins with a name, which contains no
+colon characters, followed by a colon character.
+
+   Recipients should silently ignore corrupted notifications and
+notifications they do not understand.  Recipients should restart
+timeout periods on receipt of a well-formed notification, whether or
+not they understand it.
+
+   Senders should only send the notifications described here when this
+protocol description specifies that they are permitted.  In the future,
+we may extend the protocol to permit existing notifications in new
+contexts; this rule helps older senders avoid confusing newer
+recipients.
+
+   (Older versions of GDB ignore bytes received until they see the `$'
+byte that begins an ordinary packet, so new stubs may transmit
+notifications without fear of confusing older clients.  There are no
+notifications defined for GDB to send at the moment, but we assume that
+most older stubs would ignore them, as well.)
+
+   The following notification packets from the stub to GDB are defined:
+
+`Stop: REPLY'
+     Report an asynchronous stop event in non-stop mode.  The REPLY has
+     the form of a stop reply, as described in *Note Stop Reply
+     Packets::.  Refer to *Note Remote Non-Stop::, for information on
+     how these notifications are acknowledged by GDB.
+
+
+File: gdb.info,  Node: Remote Non-Stop,  Next: Packet Acknowledgment,  Prev: Notification Packets,  Up: Remote Protocol
+
+E.10 Remote Protocol Support for Non-Stop Mode
+==============================================
+
+GDB's remote protocol supports non-stop debugging of multi-threaded
+programs, as described in *Note Non-Stop Mode::.  If the stub supports
+non-stop mode, it should report that to GDB by including `QNonStop+' in
+its `qSupported' response (*note qSupported::).
+
+   GDB typically sends a `QNonStop' packet only when establishing a new
+connection with the stub.  Entering non-stop mode does not alter the
+state of any currently-running threads, but targets must stop all
+threads in any already-attached processes when entering all-stop mode.
+GDB uses the `?' packet as necessary to probe the target state after a
+mode change.
+
+   In non-stop mode, when an attached process encounters an event that
+would otherwise be reported with a stop reply, it uses the asynchronous
+notification mechanism (*note Notification Packets::) to inform GDB.
+In contrast to all-stop mode, where all threads in all processes are
+stopped when a stop reply is sent, in non-stop mode only the thread
+reporting the stop event is stopped.  That is, when reporting a `S' or
+`T' response to indicate completion of a step operation, hitting a
+breakpoint, or a fault, only the affected thread is stopped; any other
+still-running threads continue to run.  When reporting a `W' or `X'
+response, all running threads belonging to other attached processes
+continue to run.
+
+   Only one stop reply notification at a time may be pending; if
+additional stop events occur before GDB has acknowledged the previous
+notification, they must be queued by the stub for later synchronous
+transmission in response to `vStopped' packets from GDB.  Because the
+notification mechanism is unreliable, the stub is permitted to resend a
+stop reply notification if it believes GDB may not have received it.
+GDB ignores additional stop reply notifications received before it has
+finished processing a previous notification and the stub has completed
+sending any queued stop events.
+
+   Otherwise, GDB must be prepared to receive a stop reply notification
+at any time.  Specifically, they may appear when GDB is not otherwise
+reading input from the stub, or when GDB is expecting to read a normal
+synchronous response or a `+'/`-' acknowledgment to a packet it has
+sent.  Notification packets are distinct from any other communication
+from the stub so there is no ambiguity.
+
+   After receiving a stop reply notification, GDB shall acknowledge it
+by sending a `vStopped' packet (*note vStopped packet::) as a regular,
+synchronous request to the stub.  Such acknowledgment is not required
+to happen immediately, as GDB is permitted to send other, unrelated
+packets to the stub first, which the stub should process normally.
+
+   Upon receiving a `vStopped' packet, if the stub has other queued
+stop events to report to GDB, it shall respond by sending a normal stop
+reply response.  GDB shall then send another `vStopped' packet to
+solicit further responses; again, it is permitted to send other,
+unrelated packets as well which the stub should process normally.
+
+   If the stub receives a `vStopped' packet and there are no additional
+stop events to report, the stub shall return an `OK' response.  At this
+point, if further stop events occur, the stub shall send a new stop
+reply notification, GDB shall accept the notification, and the process
+shall be repeated.
+
+   In non-stop mode, the target shall respond to the `?' packet as
+follows.  First, any incomplete stop reply notification/`vStopped'
+sequence in progress is abandoned.  The target must begin a new
+sequence reporting stop events for all stopped threads, whether or not
+it has previously reported those events to GDB.  The first stop reply
+is sent as a synchronous reply to the `?' packet, and subsequent stop
+replies are sent as responses to `vStopped' packets using the mechanism
+described above.  The target must not send asynchronous stop reply
+notifications until the sequence is complete.  If all threads are
+running when the target receives the `?' packet, or if the target is
+not attached to any process, it shall respond `OK'.
+
+
+File: gdb.info,  Node: Packet Acknowledgment,  Next: Examples,  Prev: Remote Non-Stop,  Up: Remote Protocol
+
+E.11 Packet Acknowledgment
+==========================
+
+By default, when either the host or the target machine receives a
+packet, the first response expected is an acknowledgment: either `+'
+(to indicate the package was received correctly) or `-' (to request
+retransmission).  This mechanism allows the GDB remote protocol to
+operate over unreliable transport mechanisms, such as a serial line.
+
+   In cases where the transport mechanism is itself reliable (such as a
+pipe or TCP connection), the `+'/`-' acknowledgments are redundant.  It
+may be desirable to disable them in that case to reduce communication
+overhead, or for other reasons.  This can be accomplished by means of
+the `QStartNoAckMode' packet; *note QStartNoAckMode::.
+
+   When in no-acknowledgment mode, neither the stub nor GDB shall send
+or expect `+'/`-' protocol acknowledgments.  The packet and response
+format still includes the normal checksum, as described in *Note
+Overview::, but the checksum may be ignored by the receiver.
+
+   If the stub supports `QStartNoAckMode' and prefers to operate in
+no-acknowledgment mode, it should report that to GDB by including
+`QStartNoAckMode+' in its response to `qSupported'; *note qSupported::.
+If GDB also supports `QStartNoAckMode' and it has not been disabled via
+the `set remote noack-packet off' command (*note Remote
+Configuration::), GDB may then send a `QStartNoAckMode' packet to the
+stub.  Only then may the stub actually turn off packet acknowledgments.
+GDB sends a final `+' acknowledgment of the stub's `OK' response, which
+can be safely ignored by the stub.
+
+   Note that `set remote noack-packet' command only affects negotiation
+between GDB and the stub when subsequent connections are made; it does
+not affect the protocol acknowledgment state for any current connection.
+Since `+'/`-' acknowledgments are enabled by default when a new
+connection is established, there is also no protocol request to
+re-enable the acknowledgments for the current connection, once disabled.
+
+
+File: gdb.info,  Node: Examples,  Next: File-I/O Remote Protocol Extension,  Prev: Packet Acknowledgment,  Up: Remote Protocol
+
+E.12 Examples
+=============
+
+Example sequence of a target being re-started.  Notice how the restart
+does not get any direct output:
+
+     -> `R00'
+     <- `+'
+     _target restarts_
+     -> `?'
+     <- `+'
+     <- `T001:1234123412341234'
+     -> `+'
+
+   Example sequence of a target being stepped by a single instruction:
+
+     -> `G1445...'
+     <- `+'
+     -> `s'
+     <- `+'
+     _time passes_
+     <- `T001:1234123412341234'
+     -> `+'
+     -> `g'
+     <- `+'
+     <- `1455...'
+     -> `+'
+
+
+File: gdb.info,  Node: File-I/O Remote Protocol Extension,  Next: Library List Format,  Prev: Examples,  Up: Remote Protocol
+
+E.13 File-I/O Remote Protocol Extension
+=======================================
+
+* Menu:
+
+* File-I/O Overview::
+* Protocol Basics::
+* The F Request Packet::
+* The F Reply Packet::
+* The Ctrl-C Message::
+* Console I/O::
+* List of Supported Calls::
+* Protocol-specific Representation of Datatypes::
+* Constants::
+* File-I/O Examples::
+
+
+File: gdb.info,  Node: File-I/O Overview,  Next: Protocol Basics,  Up: File-I/O Remote Protocol Extension
+
+E.13.1 File-I/O Overview
+------------------------
+
+The "File I/O remote protocol extension" (short: File-I/O) allows the
+target to use the host's file system and console I/O to perform various
+system calls.  System calls on the target system are translated into a
+remote protocol packet to the host system, which then performs the
+needed actions and returns a response packet to the target system.
+This simulates file system operations even on targets that lack file
+systems.
+
+   The protocol is defined to be independent of both the host and
+target systems.  It uses its own internal representation of datatypes
+and values.  Both GDB and the target's GDB stub are responsible for
+translating the system-dependent value representations into the internal
+protocol representations when data is transmitted.
+
+   The communication is synchronous.  A system call is possible only
+when GDB is waiting for a response from the `C', `c', `S' or `s'
+packets.  While GDB handles the request for a system call, the target
+is stopped to allow deterministic access to the target's memory.
+Therefore File-I/O is not interruptible by target signals.  On the
+other hand, it is possible to interrupt File-I/O by a user interrupt
+(`Ctrl-C') within GDB.
+
+   The target's request to perform a host system call does not finish
+the latest `C', `c', `S' or `s' action.  That means, after finishing
+the system call, the target returns to continuing the previous activity
+(continue, step).  No additional continue or step request from GDB is
+required.
+
+     (gdb) continue
+       <- target requests 'system call X'
+       target is stopped, GDB executes system call
+       -> GDB returns result
+       ... target continues, GDB returns to wait for the target
+       <- target hits breakpoint and sends a Txx packet
+
+   The protocol only supports I/O on the console and to regular files on
+the host file system.  Character or block special devices, pipes, named
+pipes, sockets or any other communication method on the host system are
+not supported by this protocol.
+
+   File I/O is not supported in non-stop mode.
+
+
+File: gdb.info,  Node: Protocol Basics,  Next: The F Request Packet,  Prev: File-I/O Overview,  Up: File-I/O Remote Protocol Extension
+
+E.13.2 Protocol Basics
+----------------------
+
+The File-I/O protocol uses the `F' packet as the request as well as
+reply packet.  Since a File-I/O system call can only occur when GDB is
+waiting for a response from the continuing or stepping target, the
+File-I/O request is a reply that GDB has to expect as a result of a
+previous `C', `c', `S' or `s' packet.  This `F' packet contains all
+information needed to allow GDB to call the appropriate host system
+call:
+
+   * A unique identifier for the requested system call.
+
+   * All parameters to the system call.  Pointers are given as addresses
+     in the target memory address space.  Pointers to strings are given
+     as pointer/length pair.  Numerical values are given as they are.
+     Numerical control flags are given in a protocol-specific
+     representation.
+
+
+   At this point, GDB has to perform the following actions.
+
+   * If the parameters include pointer values to data needed as input
+     to a system call, GDB requests this data from the target with a
+     standard `m' packet request.  This additional communication has to
+     be expected by the target implementation and is handled as any
+     other `m' packet.
+
+   * GDB translates all value from protocol representation to host
+     representation as needed.  Datatypes are coerced into the host
+     types.
+
+   * GDB calls the system call.
+
+   * It then coerces datatypes back to protocol representation.
+
+   * If the system call is expected to return data in buffer space
+     specified by pointer parameters to the call, the data is
+     transmitted to the target using a `M' or `X' packet.  This packet
+     has to be expected by the target implementation and is handled as
+     any other `M' or `X' packet.
+
+
+   Eventually GDB replies with another `F' packet which contains all
+necessary information for the target to continue.  This at least
+contains
+
+   * Return value.
+
+   * `errno', if has been changed by the system call.
+
+   * "Ctrl-C" flag.
+
+
+   After having done the needed type and value coercion, the target
+continues the latest continue or step action.
+
+
+File: gdb.info,  Node: The F Request Packet,  Next: The F Reply Packet,  Prev: Protocol Basics,  Up: File-I/O Remote Protocol Extension
+
+E.13.3 The `F' Request Packet
+-----------------------------
+
+The `F' request packet has the following format:
+
+`FCALL-ID,PARAMETER...'
+     CALL-ID is the identifier to indicate the host system call to be
+     called.  This is just the name of the function.
+
+     PARAMETER... are the parameters to the system call.  Parameters
+     are hexadecimal integer values, either the actual values in case
+     of scalar datatypes, pointers to target buffer space in case of
+     compound datatypes and unspecified memory areas, or pointer/length
+     pairs in case of string parameters.  These are appended to the
+     CALL-ID as a comma-delimited list.  All values are transmitted in
+     ASCII string representation, pointer/length pairs separated by a
+     slash.
+
+
+
+File: gdb.info,  Node: The F Reply Packet,  Next: The Ctrl-C Message,  Prev: The F Request Packet,  Up: File-I/O Remote Protocol Extension
+
+E.13.4 The `F' Reply Packet
+---------------------------
+
+The `F' reply packet has the following format:
+
+`FRETCODE,ERRNO,CTRL-C FLAG;CALL-SPECIFIC ATTACHMENT'
+     RETCODE is the return code of the system call as hexadecimal value.
+
+     ERRNO is the `errno' set by the call, in protocol-specific
+     representation.  This parameter can be omitted if the call was
+     successful.
+
+     CTRL-C FLAG is only sent if the user requested a break.  In this
+     case, ERRNO must be sent as well, even if the call was successful.
+     The CTRL-C FLAG itself consists of the character `C':
+
+          F0,0,C
+
+     or, if the call was interrupted before the host call has been
+     performed:
+
+          F-1,4,C
+
+     assuming 4 is the protocol-specific representation of `EINTR'.
+
+
+
+File: gdb.info,  Node: The Ctrl-C Message,  Next: Console I/O,  Prev: The F Reply Packet,  Up: File-I/O Remote Protocol Extension
+
+E.13.5 The `Ctrl-C' Message
+---------------------------
+
+If the `Ctrl-C' flag is set in the GDB reply packet (*note The F Reply
+Packet::), the target should behave as if it had gotten a break
+message.  The meaning for the target is "system call interrupted by
+`SIGINT'".  Consequentially, the target should actually stop (as with a
+break message) and return to GDB with a `T02' packet.
+
+   It's important for the target to know in which state the system call
+was interrupted.  There are two possible cases:
+
+   * The system call hasn't been performed on the host yet.
+
+   * The system call on the host has been finished.
+
+
+   These two states can be distinguished by the target by the value of
+the returned `errno'.  If it's the protocol representation of `EINTR',
+the system call hasn't been performed.  This is equivalent to the
+`EINTR' handling on POSIX systems.  In any other case, the target may
+presume that the system call has been finished -- successfully or not
+-- and should behave as if the break message arrived right after the
+system call.
+
+   GDB must behave reliably.  If the system call has not been called
+yet, GDB may send the `F' reply immediately, setting `EINTR' as `errno'
+in the packet.  If the system call on the host has been finished before
+the user requests a break, the full action must be finished by GDB.
+This requires sending `M' or `X' packets as necessary.  The `F' packet
+may only be sent when either nothing has happened or the full action
+has been completed.
+
+
+File: gdb.info,  Node: Console I/O,  Next: List of Supported Calls,  Prev: The Ctrl-C Message,  Up: File-I/O Remote Protocol Extension
+
+E.13.6 Console I/O
+------------------
+
+By default and if not explicitly closed by the target system, the file
+descriptors 0, 1 and 2 are connected to the GDB console.  Output on the
+GDB console is handled as any other file output operation (`write(1,
+...)' or `write(2, ...)').  Console input is handled by GDB so that
+after the target read request from file descriptor 0 all following
+typing is buffered until either one of the following conditions is met:
+
+   * The user types `Ctrl-c'.  The behaviour is as explained above, and
+     the `read' system call is treated as finished.
+
+   * The user presses <RET>.  This is treated as end of input with a
+     trailing newline.
+
+   * The user types `Ctrl-d'.  This is treated as end of input.  No
+     trailing character (neither newline nor `Ctrl-D') is appended to
+     the input.
+
+
+   If the user has typed more characters than fit in the buffer given to
+the `read' call, the trailing characters are buffered in GDB until
+either another `read(0, ...)' is requested by the target, or debugging
+is stopped at the user's request.
+
+
+File: gdb.info,  Node: List of Supported Calls,  Next: Protocol-specific Representation of Datatypes,  Prev: Console I/O,  Up: File-I/O Remote Protocol Extension
+
+E.13.7 List of Supported Calls
+------------------------------
+
+* Menu:
+
+* open::
+* close::
+* read::
+* write::
+* lseek::
+* rename::
+* unlink::
+* stat/fstat::
+* gettimeofday::
+* isatty::
+* system::
+
+
+File: gdb.info,  Node: open,  Next: close,  Up: List of Supported Calls
+
+open
+....
+
+Synopsis:
+          int open(const char *pathname, int flags);
+          int open(const char *pathname, int flags, mode_t mode);
+
+Request:
+     `Fopen,PATHPTR/LEN,FLAGS,MODE'
+
+     FLAGS is the bitwise `OR' of the following values:
+
+    `O_CREAT'
+          If the file does not exist it will be created.  The host
+          rules apply as far as file ownership and time stamps are
+          concerned.
+
+    `O_EXCL'
+          When used with `O_CREAT', if the file already exists it is an
+          error and open() fails.
+
+    `O_TRUNC'
+          If the file already exists and the open mode allows writing
+          (`O_RDWR' or `O_WRONLY' is given) it will be truncated to
+          zero length.
+
+    `O_APPEND'
+          The file is opened in append mode.
+
+    `O_RDONLY'
+          The file is opened for reading only.
+
+    `O_WRONLY'
+          The file is opened for writing only.
+
+    `O_RDWR'
+          The file is opened for reading and writing.
+
+     Other bits are silently ignored.
+
+     MODE is the bitwise `OR' of the following values:
+
+    `S_IRUSR'
+          User has read permission.
+
+    `S_IWUSR'
+          User has write permission.
+
+    `S_IRGRP'
+          Group has read permission.
+
+    `S_IWGRP'
+          Group has write permission.
+
+    `S_IROTH'
+          Others have read permission.
+
+    `S_IWOTH'
+          Others have write permission.
+
+     Other bits are silently ignored.
+
+Return value:
+     `open' returns the new file descriptor or -1 if an error occurred.
+
+Errors:
+
+    `EEXIST'
+          PATHNAME already exists and `O_CREAT' and `O_EXCL' were used.
+
+    `EISDIR'
+          PATHNAME refers to a directory.
+
+    `EACCES'
+          The requested access is not allowed.
+
+    `ENAMETOOLONG'
+          PATHNAME was too long.
+
+    `ENOENT'
+          A directory component in PATHNAME does not exist.
+
+    `ENODEV'
+          PATHNAME refers to a device, pipe, named pipe or socket.
+
+    `EROFS'
+          PATHNAME refers to a file on a read-only filesystem and write
+          access was requested.
+
+    `EFAULT'
+          PATHNAME is an invalid pointer value.
+
+    `ENOSPC'
+          No space on device to create the file.
+
+    `EMFILE'
+          The process already has the maximum number of files open.
+
+    `ENFILE'
+          The limit on the total number of files open on the system has
+          been reached.
+
+    `EINTR'
+          The call was interrupted by the user.
+
+
+
+File: gdb.info,  Node: close,  Next: read,  Prev: open,  Up: List of Supported Calls
+
+close
+.....
+
+Synopsis:
+          int close(int fd);
+
+Request:
+     `Fclose,FD'
+
+Return value:
+     `close' returns zero on success, or -1 if an error occurred.
+
+Errors:
+
+    `EBADF'
+          FD isn't a valid open file descriptor.
+
+    `EINTR'
+          The call was interrupted by the user.
+
+
+
+File: gdb.info,  Node: read,  Next: write,  Prev: close,  Up: List of Supported Calls
+
+read
+....
+
+Synopsis:
+          int read(int fd, void *buf, unsigned int count);
+
+Request:
+     `Fread,FD,BUFPTR,COUNT'
+
+Return value:
+     On success, the number of bytes read is returned.  Zero indicates
+     end of file.  If count is zero, read returns zero as well.  On
+     error, -1 is returned.
+
+Errors:
+
+    `EBADF'
+          FD is not a valid file descriptor or is not open for reading.
+
+    `EFAULT'
+          BUFPTR is an invalid pointer value.
+
+    `EINTR'
+          The call was interrupted by the user.
+
+
+
+File: gdb.info,  Node: write,  Next: lseek,  Prev: read,  Up: List of Supported Calls
+
+write
+.....
+
+Synopsis:
+          int write(int fd, const void *buf, unsigned int count);
+
+Request:
+     `Fwrite,FD,BUFPTR,COUNT'
+
+Return value:
+     On success, the number of bytes written are returned.  Zero
+     indicates nothing was written.  On error, -1 is returned.
+
+Errors:
+
+    `EBADF'
+          FD is not a valid file descriptor or is not open for writing.
+
+    `EFAULT'
+          BUFPTR is an invalid pointer value.
+
+    `EFBIG'
+          An attempt was made to write a file that exceeds the
+          host-specific maximum file size allowed.
+
+    `ENOSPC'
+          No space on device to write the data.
+
+    `EINTR'
+          The call was interrupted by the user.
+
+
+
+File: gdb.info,  Node: lseek,  Next: rename,  Prev: write,  Up: List of Supported Calls
+
+lseek
+.....
+
+Synopsis:
+          long lseek (int fd, long offset, int flag);
+
+Request:
+     `Flseek,FD,OFFSET,FLAG'
+
+     FLAG is one of:
+
+    `SEEK_SET'
+          The offset is set to OFFSET bytes.
+
+    `SEEK_CUR'
+          The offset is set to its current location plus OFFSET bytes.
+
+    `SEEK_END'
+          The offset is set to the size of the file plus OFFSET bytes.
+
+Return value:
+     On success, the resulting unsigned offset in bytes from the
+     beginning of the file is returned.  Otherwise, a value of -1 is
+     returned.
+
+Errors:
+
+    `EBADF'
+          FD is not a valid open file descriptor.
+
+    `ESPIPE'
+          FD is associated with the GDB console.
+
+    `EINVAL'
+          FLAG is not a proper value.
+
+    `EINTR'
+          The call was interrupted by the user.
+
+
+
+File: gdb.info,  Node: rename,  Next: unlink,  Prev: lseek,  Up: List of Supported Calls
+
+rename
+......
+
+Synopsis:
+          int rename(const char *oldpath, const char *newpath);
+
+Request:
+     `Frename,OLDPATHPTR/LEN,NEWPATHPTR/LEN'
+
+Return value:
+     On success, zero is returned.  On error, -1 is returned.
+
+Errors:
+
+    `EISDIR'
+          NEWPATH is an existing directory, but OLDPATH is not a
+          directory.
+
+    `EEXIST'
+          NEWPATH is a non-empty directory.
+
+    `EBUSY'
+          OLDPATH or NEWPATH is a directory that is in use by some
+          process.
+
+    `EINVAL'
+          An attempt was made to make a directory a subdirectory of
+          itself.
+
+    `ENOTDIR'
+          A  component used as a directory in OLDPATH or new path is
+          not a directory.  Or OLDPATH is a directory and NEWPATH
+          exists but is not a directory.
+
+    `EFAULT'
+          OLDPATHPTR or NEWPATHPTR are invalid pointer values.
+
+    `EACCES'
+          No access to the file or the path of the file.
+
+    `ENAMETOOLONG'
+          OLDPATH or NEWPATH was too long.
+
+    `ENOENT'
+          A directory component in OLDPATH or NEWPATH does not exist.
+
+    `EROFS'
+          The file is on a read-only filesystem.
+
+    `ENOSPC'
+          The device containing the file has no room for the new
+          directory entry.
+
+    `EINTR'
+          The call was interrupted by the user.
+
+
+
+File: gdb.info,  Node: unlink,  Next: stat/fstat,  Prev: rename,  Up: List of Supported Calls
+
+unlink
+......
+
+Synopsis:
+          int unlink(const char *pathname);
+
+Request:
+     `Funlink,PATHNAMEPTR/LEN'
+
+Return value:
+     On success, zero is returned.  On error, -1 is returned.
+
+Errors:
+
+    `EACCES'
+          No access to the file or the path of the file.
+
+    `EPERM'
+          The system does not allow unlinking of directories.
+
+    `EBUSY'
+          The file PATHNAME cannot be unlinked because it's being used
+          by another process.
+
+    `EFAULT'
+          PATHNAMEPTR is an invalid pointer value.
+
+    `ENAMETOOLONG'
+          PATHNAME was too long.
+
+    `ENOENT'
+          A directory component in PATHNAME does not exist.
+
+    `ENOTDIR'
+          A component of the path is not a directory.
+
+    `EROFS'
+          The file is on a read-only filesystem.
+
+    `EINTR'
+          The call was interrupted by the user.
+
+
+
+File: gdb.info,  Node: stat/fstat,  Next: gettimeofday,  Prev: unlink,  Up: List of Supported Calls
+
+stat/fstat
+..........
+
+Synopsis:
+          int stat(const char *pathname, struct stat *buf);
+          int fstat(int fd, struct stat *buf);
+
+Request:
+     `Fstat,PATHNAMEPTR/LEN,BUFPTR'
+     `Ffstat,FD,BUFPTR'
+
+Return value:
+     On success, zero is returned.  On error, -1 is returned.
+
+Errors:
+
+    `EBADF'
+          FD is not a valid open file.
+
+    `ENOENT'
+          A directory component in PATHNAME does not exist or the path
+          is an empty string.
+
+    `ENOTDIR'
+          A component of the path is not a directory.
+
+    `EFAULT'
+          PATHNAMEPTR is an invalid pointer value.
+
+    `EACCES'
+          No access to the file or the path of the file.
+
+    `ENAMETOOLONG'
+          PATHNAME was too long.
+
+    `EINTR'
+          The call was interrupted by the user.
+
+
+
+File: gdb.info,  Node: gettimeofday,  Next: isatty,  Prev: stat/fstat,  Up: List of Supported Calls
+
+gettimeofday
+............
+
+Synopsis:
+          int gettimeofday(struct timeval *tv, void *tz);
+
+Request:
+     `Fgettimeofday,TVPTR,TZPTR'
+
+Return value:
+     On success, 0 is returned, -1 otherwise.
+
+Errors:
+
+    `EINVAL'
+          TZ is a non-NULL pointer.
+
+    `EFAULT'
+          TVPTR and/or TZPTR is an invalid pointer value.
+
+
+
+File: gdb.info,  Node: isatty,  Next: system,  Prev: gettimeofday,  Up: List of Supported Calls
+
+isatty
+......
+
+Synopsis:
+          int isatty(int fd);
+
+Request:
+     `Fisatty,FD'
+
+Return value:
+     Returns 1 if FD refers to the GDB console, 0 otherwise.
+
+Errors:
+
+    `EINTR'
+          The call was interrupted by the user.
+
+
+   Note that the `isatty' call is treated as a special case: it returns
+1 to the target if the file descriptor is attached to the GDB console,
+0 otherwise.  Implementing through system calls would require
+implementing `ioctl' and would be more complex than needed.
+
+
+File: gdb.info,  Node: system,  Prev: isatty,  Up: List of Supported Calls
+
+system
+......
+
+Synopsis:
+          int system(const char *command);
+
+Request:
+     `Fsystem,COMMANDPTR/LEN'
+
+Return value:
+     If LEN is zero, the return value indicates whether a shell is
+     available.  A zero return value indicates a shell is not available.
+     For non-zero LEN, the value returned is -1 on error and the return
+     status of the command otherwise.  Only the exit status of the
+     command is returned, which is extracted from the host's `system'
+     return value by calling `WEXITSTATUS(retval)'.  In case `/bin/sh'
+     could not be executed, 127 is returned.
+
+Errors:
+
+    `EINTR'
+          The call was interrupted by the user.
+
+
+   GDB takes over the full task of calling the necessary host calls to
+perform the `system' call.  The return value of `system' on the host is
+simplified before it's returned to the target.  Any termination signal
+information from the child process is discarded, and the return value
+consists entirely of the exit status of the called command.
+
+   Due to security concerns, the `system' call is by default refused by
+GDB.  The user has to allow this call explicitly with the `set remote
+system-call-allowed 1' command.
+
+`set remote system-call-allowed'
+     Control whether to allow the `system' calls in the File I/O
+     protocol for the remote target.  The default is zero (disabled).
+
+`show remote system-call-allowed'
+     Show whether the `system' calls are allowed in the File I/O
+     protocol.
+
+
+File: gdb.info,  Node: Protocol-specific Representation of Datatypes,  Next: Constants,  Prev: List of Supported Calls,  Up: File-I/O Remote Protocol Extension
+
+E.13.8 Protocol-specific Representation of Datatypes
+----------------------------------------------------
+
+* Menu:
+
+* Integral Datatypes::
+* Pointer Values::
+* Memory Transfer::
+* struct stat::
+* struct timeval::
+
+
+File: gdb.info,  Node: Integral Datatypes,  Next: Pointer Values,  Up: Protocol-specific Representation of Datatypes
+
+Integral Datatypes
+..................
+
+The integral datatypes used in the system calls are `int', `unsigned
+int', `long', `unsigned long', `mode_t', and `time_t'.
+
+   `int', `unsigned int', `mode_t' and `time_t' are implemented as 32
+bit values in this protocol.
+
+   `long' and `unsigned long' are implemented as 64 bit types.
+
+   *Note Limits::, for corresponding MIN and MAX values (similar to
+those in `limits.h') to allow range checking on host and target.
+
+   `time_t' datatypes are defined as seconds since the Epoch.
+
+   All integral datatypes transferred as part of a memory read or write
+of a structured datatype e.g. a `struct stat' have to be given in big
+endian byte order.
+
+
+File: gdb.info,  Node: Pointer Values,  Next: Memory Transfer,  Prev: Integral Datatypes,  Up: Protocol-specific Representation of Datatypes
+
+Pointer Values
+..............
+
+Pointers to target data are transmitted as they are.  An exception is
+made for pointers to buffers for which the length isn't transmitted as
+part of the function call, namely strings.  Strings are transmitted as
+a pointer/length pair, both as hex values, e.g.
+
+     `1aaf/12'
+
+which is a pointer to data of length 18 bytes at position 0x1aaf.  The
+length is defined as the full string length in bytes, including the
+trailing null byte.  For example, the string `"hello world"' at address
+0x123456 is transmitted as
+
+     `123456/d'
+
+
+File: gdb.info,  Node: Memory Transfer,  Next: struct stat,  Prev: Pointer Values,  Up: Protocol-specific Representation of Datatypes
+
+Memory Transfer
+...............
+
+Structured data which is transferred using a memory read or write (for
+example, a `struct stat') is expected to be in a protocol-specific
+format with all scalar multibyte datatypes being big endian.
+Translation to this representation needs to be done both by the target
+before the `F' packet is sent, and by GDB before it transfers memory to
+the target.  Transferred pointers to structured data should point to
+the already-coerced data at any time.
+
+
+File: gdb.info,  Node: struct stat,  Next: struct timeval,  Prev: Memory Transfer,  Up: Protocol-specific Representation of Datatypes
+
+struct stat
+...........
+
+The buffer of type `struct stat' used by the target and GDB is defined
+as follows:
+
+     struct stat {
+         unsigned int  st_dev;      /* device */
+         unsigned int  st_ino;      /* inode */
+         mode_t        st_mode;     /* protection */
+         unsigned int  st_nlink;    /* number of hard links */
+         unsigned int  st_uid;      /* user ID of owner */
+         unsigned int  st_gid;      /* group ID of owner */
+         unsigned int  st_rdev;     /* device type (if inode device) */
+         unsigned long st_size;     /* total size, in bytes */
+         unsigned long st_blksize;  /* blocksize for filesystem I/O */
+         unsigned long st_blocks;   /* number of blocks allocated */
+         time_t        st_atime;    /* time of last access */
+         time_t        st_mtime;    /* time of last modification */
+         time_t        st_ctime;    /* time of last change */
+     };
+
+   The integral datatypes conform to the definitions given in the
+appropriate section (see *Note Integral Datatypes::, for details) so
+this structure is of size 64 bytes.
+
+   The values of several fields have a restricted meaning and/or range
+of values.
+
+`st_dev'
+     A value of 0 represents a file, 1 the console.
+
+`st_ino'
+     No valid meaning for the target.  Transmitted unchanged.
+
+`st_mode'
+     Valid mode bits are described in *Note Constants::.  Any other
+     bits have currently no meaning for the target.
+
+`st_uid'
+`st_gid'
+`st_rdev'
+     No valid meaning for the target.  Transmitted unchanged.
+
+`st_atime'
+`st_mtime'
+`st_ctime'
+     These values have a host and file system dependent accuracy.
+     Especially on Windows hosts, the file system may not support exact
+     timing values.
+
+   The target gets a `struct stat' of the above representation and is
+responsible for coercing it to the target representation before
+continuing.
+
+   Note that due to size differences between the host, target, and
+protocol representations of `struct stat' members, these members could
+eventually get truncated on the target.
+
+
+File: gdb.info,  Node: struct timeval,  Prev: struct stat,  Up: Protocol-specific Representation of Datatypes
+
+struct timeval
+..............
+
+The buffer of type `struct timeval' used by the File-I/O protocol is
+defined as follows:
+
+     struct timeval {
+         time_t tv_sec;  /* second */
+         long   tv_usec; /* microsecond */
+     };
+
+   The integral datatypes conform to the definitions given in the
+appropriate section (see *Note Integral Datatypes::, for details) so
+this structure is of size 8 bytes.
+
+
+File: gdb.info,  Node: Constants,  Next: File-I/O Examples,  Prev: Protocol-specific Representation of Datatypes,  Up: File-I/O Remote Protocol Extension
+
+E.13.9 Constants
+----------------
+
+The following values are used for the constants inside of the protocol.
+GDB and target are responsible for translating these values before and
+after the call as needed.
+
+* Menu:
+
+* Open Flags::
+* mode_t Values::
+* Errno Values::
+* Lseek Flags::
+* Limits::
+
+
+File: gdb.info,  Node: Open Flags,  Next: mode_t Values,  Up: Constants
+
+Open Flags
+..........
+
+All values are given in hexadecimal representation.
+
+       O_RDONLY        0x0
+       O_WRONLY        0x1
+       O_RDWR          0x2
+       O_APPEND        0x8
+       O_CREAT       0x200
+       O_TRUNC       0x400
+       O_EXCL        0x800
+
+
+File: gdb.info,  Node: mode_t Values,  Next: Errno Values,  Prev: Open Flags,  Up: Constants
+
+mode_t Values
+.............
+
+All values are given in octal representation.
+
+       S_IFREG       0100000
+       S_IFDIR        040000
+       S_IRUSR          0400
+       S_IWUSR          0200
+       S_IXUSR          0100
+       S_IRGRP           040
+       S_IWGRP           020
+       S_IXGRP           010
+       S_IROTH            04
+       S_IWOTH            02
+       S_IXOTH            01
+
+
+File: gdb.info,  Node: Errno Values,  Next: Lseek Flags,  Prev: mode_t Values,  Up: Constants
+
+Errno Values
+............
+
+All values are given in decimal representation.
+
+       EPERM           1
+       ENOENT          2
+       EINTR           4
+       EBADF           9
+       EACCES         13
+       EFAULT         14
+       EBUSY          16
+       EEXIST         17
+       ENODEV         19
+       ENOTDIR        20
+       EISDIR         21
+       EINVAL         22
+       ENFILE         23
+       EMFILE         24
+       EFBIG          27
+       ENOSPC         28
+       ESPIPE         29
+       EROFS          30
+       ENAMETOOLONG   91
+       EUNKNOWN       9999
+
+   `EUNKNOWN' is used as a fallback error value if a host system returns
+ any error value not in the list of supported error numbers.
+
+
+File: gdb.info,  Node: Lseek Flags,  Next: Limits,  Prev: Errno Values,  Up: Constants
+
+Lseek Flags
+...........
+
+       SEEK_SET      0
+       SEEK_CUR      1
+       SEEK_END      2
+
+
+File: gdb.info,  Node: Limits,  Prev: Lseek Flags,  Up: Constants
+
+Limits
+......
+
+All values are given in decimal representation.
+
+       INT_MIN       -2147483648
+       INT_MAX        2147483647
+       UINT_MAX       4294967295
+       LONG_MIN      -9223372036854775808
+       LONG_MAX       9223372036854775807
+       ULONG_MAX      18446744073709551615
+
+
+File: gdb.info,  Node: File-I/O Examples,  Prev: Constants,  Up: File-I/O Remote Protocol Extension
+
+E.13.10 File-I/O Examples
+-------------------------
+
+Example sequence of a write call, file descriptor 3, buffer is at target
+address 0x1234, 6 bytes should be written:
+
+     <- `Fwrite,3,1234,6'
+     _request memory read from target_
+     -> `m1234,6'
+     <- XXXXXX
+     _return "6 bytes written"_
+     -> `F6'
+
+   Example sequence of a read call, file descriptor 3, buffer is at
+target address 0x1234, 6 bytes should be read:
+
+     <- `Fread,3,1234,6'
+     _request memory write to target_
+     -> `X1234,6:XXXXXX'
+     _return "6 bytes read"_
+     -> `F6'
+
+   Example sequence of a read call, call fails on the host due to
+invalid file descriptor (`EBADF'):
+
+     <- `Fread,3,1234,6'
+     -> `F-1,9'
+
+   Example sequence of a read call, user presses `Ctrl-c' before
+syscall on host is called:
+
+     <- `Fread,3,1234,6'
+     -> `F-1,4,C'
+     <- `T02'
+
+   Example sequence of a read call, user presses `Ctrl-c' after syscall
+on host is called:
+
+     <- `Fread,3,1234,6'
+     -> `X1234,6:XXXXXX'
+     <- `T02'
+
+
+File: gdb.info,  Node: Library List Format,  Next: Library List Format for SVR4 Targets,  Prev: File-I/O Remote Protocol Extension,  Up: Remote Protocol
+
+E.14 Library List Format
+========================
+
+On some platforms, a dynamic loader (e.g. `ld.so') runs in the same
+process as your application to manage libraries.  In this case, GDB can
+use the loader's symbol table and normal memory operations to maintain
+a list of shared libraries.  On other platforms, the operating system
+manages loaded libraries.  GDB can not retrieve the list of currently
+loaded libraries through memory operations, so it uses the
+`qXfer:libraries:read' packet (*note qXfer library list read::)
+instead.  The remote stub queries the target's operating system and
+reports which libraries are loaded.
+
+   The `qXfer:libraries:read' packet returns an XML document which
+lists loaded libraries and their offsets.  Each library has an
+associated name and one or more segment or section base addresses,
+which report where the library was loaded in memory.
+
+   For the common case of libraries that are fully linked binaries, the
+library should have a list of segments.  If the target supports dynamic
+linking of a relocatable object file, its library XML element should
+instead include a list of allocated sections.  The segment or section
+bases are start addresses, not relocation offsets; they do not depend
+on the library's link-time base addresses.
+
+   GDB must be linked with the Expat library to support XML library
+lists.  *Note Expat::.
+
+   A simple memory map, with one loaded library relocated by a single
+offset, looks like this:
+
+     <library-list>
+       <library name="/lib/libc.so.6">
+         <segment address="0x10000000"/>
+       </library>
+     </library-list>
+
+   Another simple memory map, with one loaded library with three
+allocated sections (.text, .data, .bss), looks like this:
+
+     <library-list>
+       <library name="sharedlib.o">
+         <section address="0x10000000"/>
+         <section address="0x20000000"/>
+         <section address="0x30000000"/>
+       </library>
+     </library-list>
+
+   The format of a library list is described by this DTD:
+
+     <!-- library-list: Root element with versioning -->
+     <!ELEMENT library-list  (library)*>
+     <!ATTLIST library-list  version CDATA   #FIXED  "1.0">
+     <!ELEMENT library       (segment*, section*)>
+     <!ATTLIST library       name    CDATA   #REQUIRED>
+     <!ELEMENT segment       EMPTY>
+     <!ATTLIST segment       address CDATA   #REQUIRED>
+     <!ELEMENT section       EMPTY>
+     <!ATTLIST section       address CDATA   #REQUIRED>
+
+   In addition, segments and section descriptors cannot be mixed within
+a single library element, and you must supply at least one segment or
+section for each library.
+
+
+File: gdb.info,  Node: Library List Format for SVR4 Targets,  Next: Memory Map Format,  Prev: Library List Format,  Up: Remote Protocol
+
+E.15 Library List Format for SVR4 Targets
+=========================================
+
+On SVR4 platforms GDB can use the symbol table of a dynamic loader
+(e.g. `ld.so') and normal memory operations to maintain a list of
+shared libraries.  Still a special library list provided by this packet
+is more efficient for the GDB remote protocol.
+
+   The `qXfer:libraries-svr4:read' packet returns an XML document which
+lists loaded libraries and their SVR4 linker parameters.  For each
+library on SVR4 target, the following parameters are reported:
+
+   - `name', the absolute file name from the `l_name' field of `struct
+     link_map'.
+
+   - `lm' with address of `struct link_map' used for TLS (Thread Local
+     Storage) access.
+
+   - `l_addr', the displacement as read from the field `l_addr' of
+     `struct link_map'.  For prelinked libraries this is not an absolute
+     memory address.  It is a displacement of absolute memory address
+     against address the file was prelinked to during the library load.
+
+   - `l_ld', which is memory address of the `PT_DYNAMIC' segment
+
+   Additionally the single `main-lm' attribute specifies address of
+`struct link_map' used for the main executable.  This parameter is used
+for TLS access and its presence is optional.
+
+   GDB must be linked with the Expat library to support XML SVR4
+library lists.  *Note Expat::.
+
+   A simple memory map, with two loaded libraries (which do not use
+prelink), looks like this:
+
+     <library-list-svr4 version="1.0" main-lm="0xe4f8f8">
+       <library name="/lib/ld-linux.so.2" lm="0xe4f51c" l_addr="0xe2d000"
+                l_ld="0xe4eefc"/>
+       <library name="/lib/libc.so.6" lm="0xe4fbe8" l_addr="0x154000"
+                l_ld="0x152350"/>
+     </library-list-svr>
+
+   The format of an SVR4 library list is described by this DTD:
+
+     <!-- library-list-svr4: Root element with versioning -->
+     <!ELEMENT library-list-svr4  (library)*>
+     <!ATTLIST library-list-svr4  version CDATA   #FIXED  "1.0">
+     <!ATTLIST library-list-svr4  main-lm CDATA   #IMPLIED>
+     <!ELEMENT library            EMPTY>
+     <!ATTLIST library            name    CDATA   #REQUIRED>
+     <!ATTLIST library            lm      CDATA   #REQUIRED>
+     <!ATTLIST library            l_addr  CDATA   #REQUIRED>
+     <!ATTLIST library            l_ld    CDATA   #REQUIRED>
+
+
+File: gdb.info,  Node: Memory Map Format,  Next: Thread List Format,  Prev: Library List Format for SVR4 Targets,  Up: Remote Protocol
+
+E.16 Memory Map Format
+======================
+
+To be able to write into flash memory, GDB needs to obtain a memory map
+from the target.  This section describes the format of the memory map.
+
+   The memory map is obtained using the `qXfer:memory-map:read' (*note
+qXfer memory map read::) packet and is an XML document that lists
+memory regions.
+
+   GDB must be linked with the Expat library to support XML memory
+maps.  *Note Expat::.
+
+   The top-level structure of the document is shown below:
+
+     <?xml version="1.0"?>
+     <!DOCTYPE memory-map
+               PUBLIC "+//IDN gnu.org//DTD GDB Memory Map V1.0//EN"
+                      "http://sourceware.org/gdb/gdb-memory-map.dtd">
+     <memory-map>
+         region...
+     </memory-map>
+
+   Each region can be either:
+
+   * A region of RAM starting at ADDR and extending for LENGTH bytes
+     from there:
+
+          <memory type="ram" start="ADDR" length="LENGTH"/>
+
+   * A region of read-only memory:
+
+          <memory type="rom" start="ADDR" length="LENGTH"/>
+
+   * A region of flash memory, with erasure blocks BLOCKSIZE bytes in
+     length:
+
+          <memory type="flash" start="ADDR" length="LENGTH">
+            <property name="blocksize">BLOCKSIZE</property>
+          </memory>
+
+
+   Regions must not overlap.  GDB assumes that areas of memory not
+covered by the memory map are RAM, and uses the ordinary `M' and `X'
+packets to write to addresses in such ranges.
+
+   The formal DTD for memory map format is given below:
+
+     <!-- ................................................... -->
+     <!-- Memory Map XML DTD ................................ -->
+     <!-- File: memory-map.dtd .............................. -->
+     <!-- .................................... .............. -->
+     <!-- memory-map.dtd -->
+     <!-- memory-map: Root element with versioning -->
+     <!ELEMENT memory-map (memory | property)>
+     <!ATTLIST memory-map    version CDATA   #FIXED  "1.0.0">
+     <!ELEMENT memory (property)>
+     <!-- memory: Specifies a memory region,
+                  and its type, or device. -->
+     <!ATTLIST memory        type    CDATA   #REQUIRED
+                             start   CDATA   #REQUIRED
+                             length  CDATA   #REQUIRED
+                             device  CDATA   #IMPLIED>
+     <!-- property: Generic attribute tag -->
+     <!ELEMENT property (#PCDATA | property)*>
+     <!ATTLIST property      name    CDATA   #REQUIRED>
+
+
+File: gdb.info,  Node: Thread List Format,  Next: Traceframe Info Format,  Prev: Memory Map Format,  Up: Remote Protocol
+
+E.17 Thread List Format
+=======================
+
+To efficiently update the list of threads and their attributes, GDB
+issues the `qXfer:threads:read' packet (*note qXfer threads read::) and
+obtains the XML document with the following structure:
+
+     <?xml version="1.0"?>
+     <threads>
+         <thread id="id" core="0">
+         ... description ...
+         </thread>
+     </threads>
+
+   Each `thread' element must have the `id' attribute that identifies
+the thread (*note thread-id syntax::).  The `core' attribute, if
+present, specifies which processor core the thread was last executing
+on.  The content of the of `thread' element is interpreted as
+human-readable auxilliary information.
+
+
+File: gdb.info,  Node: Traceframe Info Format,  Prev: Thread List Format,  Up: Remote Protocol
+
+E.18 Traceframe Info Format
+===========================
+
+To be able to know which objects in the inferior can be examined when
+inspecting a tracepoint hit, GDB needs to obtain the list of memory
+ranges, registers and trace state variables that have been collected in
+a traceframe.
+
+   This list is obtained using the `qXfer:traceframe-info:read' (*note
+qXfer traceframe info read::) packet and is an XML document.
+
+   GDB must be linked with the Expat library to support XML traceframe
+info discovery.  *Note Expat::.
+
+   The top-level structure of the document is shown below:
+
+     <?xml version="1.0"?>
+     <!DOCTYPE traceframe-info
+               PUBLIC "+//IDN gnu.org//DTD GDB Memory Map V1.0//EN"
+                      "http://sourceware.org/gdb/gdb-traceframe-info.dtd">
+     <traceframe-info>
+        block...
+     </traceframe-info>
+
+   Each traceframe block can be either:
+
+   * A region of collected memory starting at ADDR and extending for
+     LENGTH bytes from there:
+
+          <memory start="ADDR" length="LENGTH"/>
+
+
+   The formal DTD for the traceframe info format is given below:
+
+     <!ELEMENT traceframe-info  (memory)* >
+     <!ATTLIST traceframe-info  version CDATA   #FIXED  "1.0">
+
+     <!ELEMENT memory        EMPTY>
+     <!ATTLIST memory        start   CDATA   #REQUIRED
+                             length  CDATA   #REQUIRED>
+
+
+File: gdb.info,  Node: Agent Expressions,  Next: Target Descriptions,  Prev: Remote Protocol,  Up: Top
+
+Appendix F The GDB Agent Expression Mechanism
+*********************************************
+
+In some applications, it is not feasible for the debugger to interrupt
+the program's execution long enough for the developer to learn anything
+helpful about its behavior.  If the program's correctness depends on its
+real-time behavior, delays introduced by a debugger might cause the
+program to fail, even when the code itself is correct.  It is useful to
+be able to observe the program's behavior without interrupting it.
+
+   Using GDB's `trace' and `collect' commands, the user can specify
+locations in the program, and arbitrary expressions to evaluate when
+those locations are reached.  Later, using the `tfind' command, she can
+examine the values those expressions had when the program hit the trace
+points.  The expressions may also denote objects in memory --
+structures or arrays, for example -- whose values GDB should record;
+while visiting a particular tracepoint, the user may inspect those
+objects as if they were in memory at that moment.  However, because GDB
+records these values without interacting with the user, it can do so
+quickly and unobtrusively, hopefully not disturbing the program's
+behavior.
+
+   When GDB is debugging a remote target, the GDB "agent" code running
+on the target computes the values of the expressions itself.  To avoid
+having a full symbolic expression evaluator on the agent, GDB translates
+expressions in the source language into a simpler bytecode language, and
+then sends the bytecode to the agent; the agent then executes the
+bytecode, and records the values for GDB to retrieve later.
+
+   The bytecode language is simple; there are forty-odd opcodes, the
+bulk of which are the usual vocabulary of C operands (addition,
+subtraction, shifts, and so on) and various sizes of literals and
+memory reference operations.  The bytecode interpreter operates
+strictly on machine-level values -- various sizes of integers and
+floating point numbers -- and requires no information about types or
+symbols; thus, the interpreter's internal data structures are simple,
+and each bytecode requires only a few native machine instructions to
+implement it.  The interpreter is small, and strict limits on the
+memory and time required to evaluate an expression are easy to
+determine, making it suitable for use by the debugging agent in
+real-time applications.
+
+* Menu:
+
+* General Bytecode Design::     Overview of the interpreter.
+* Bytecode Descriptions::       What each one does.
+* Using Agent Expressions::     How agent expressions fit into the big picture.
+* Varying Target Capabilities:: How to discover what the target can do.
+* Rationale::                   Why we did it this way.
+
+
+File: gdb.info,  Node: General Bytecode Design,  Next: Bytecode Descriptions,  Up: Agent Expressions
+
+F.1 General Bytecode Design
+===========================
+
+The agent represents bytecode expressions as an array of bytes.  Each
+instruction is one byte long (thus the term "bytecode").  Some
+instructions are followed by operand bytes; for example, the `goto'
+instruction is followed by a destination for the jump.
+
+   The bytecode interpreter is a stack-based machine; most instructions
+pop their operands off the stack, perform some operation, and push the
+result back on the stack for the next instruction to consume.  Each
+element of the stack may contain either a integer or a floating point
+value; these values are as many bits wide as the largest integer that
+can be directly manipulated in the source language.  Stack elements
+carry no record of their type; bytecode could push a value as an
+integer, then pop it as a floating point value.  However, GDB will not
+generate code which does this.  In C, one might define the type of a
+stack element as follows:
+     union agent_val {
+       LONGEST l;
+       DOUBLEST d;
+     };
+   where `LONGEST' and `DOUBLEST' are `typedef' names for the largest
+integer and floating point types on the machine.
+
+   By the time the bytecode interpreter reaches the end of the
+expression, the value of the expression should be the only value left
+on the stack.  For tracing applications, `trace' bytecodes in the
+expression will have recorded the necessary data, and the value on the
+stack may be discarded.  For other applications, like conditional
+breakpoints, the value may be useful.
+
+   Separate from the stack, the interpreter has two registers:
+`pc'
+     The address of the next bytecode to execute.
+
+`start'
+     The address of the start of the bytecode expression, necessary for
+     interpreting the `goto' and `if_goto' instructions.
+
+   Neither of these registers is directly visible to the bytecode
+language itself, but they are useful for defining the meanings of the
+bytecode operations.
+
+   There are no instructions to perform side effects on the running
+program, or call the program's functions; we assume that these
+expressions are only used for unobtrusive debugging, not for patching
+the running code.
+
+   Most bytecode instructions do not distinguish between the various
+sizes of values, and operate on full-width values; the upper bits of the
+values are simply ignored, since they do not usually make a difference
+to the value computed.  The exceptions to this rule are:
+memory reference instructions (`ref'N)
+     There are distinct instructions to fetch different word sizes from
+     memory.  Once on the stack, however, the values are treated as
+     full-size integers.  They may need to be sign-extended; the `ext'
+     instruction exists for this purpose.
+
+the sign-extension instruction (`ext' N)
+     These clearly need to know which portion of their operand is to be
+     extended to occupy the full length of the word.
+
+
+   If the interpreter is unable to evaluate an expression completely for
+some reason (a memory location is inaccessible, or a divisor is zero,
+for example), we say that interpretation "terminates with an error".
+This means that the problem is reported back to the interpreter's caller
+in some helpful way.  In general, code using agent expressions should
+assume that they may attempt to divide by zero, fetch arbitrary memory
+locations, and misbehave in other ways.
+
+   Even complicated C expressions compile to a few bytecode
+instructions; for example, the expression `x + y * z' would typically
+produce code like the following, assuming that `x' and `y' live in
+registers, and `z' is a global variable holding a 32-bit `int':
+     reg 1
+     reg 2
+     const32 address of z
+     ref32
+     ext 32
+     mul
+     add
+     end
+
+   In detail, these mean:
+`reg 1'
+     Push the value of register 1 (presumably holding `x') onto the
+     stack.
+
+`reg 2'
+     Push the value of register 2 (holding `y').
+
+`const32 address of z'
+     Push the address of `z' onto the stack.
+
+`ref32'
+     Fetch a 32-bit word from the address at the top of the stack;
+     replace the address on the stack with the value.  Thus, we replace
+     the address of `z' with `z''s value.
+
+`ext 32'
+     Sign-extend the value on the top of the stack from 32 bits to full
+     length.  This is necessary because `z' is a signed integer.
+
+`mul'
+     Pop the top two numbers on the stack, multiply them, and push their
+     product.  Now the top of the stack contains the value of the
+     expression `y * z'.
+
+`add'
+     Pop the top two numbers, add them, and push the sum.  Now the top
+     of the stack contains the value of `x + y * z'.
+
+`end'
+     Stop executing; the value left on the stack top is the value to be
+     recorded.
+
+
+
+File: gdb.info,  Node: Bytecode Descriptions,  Next: Using Agent Expressions,  Prev: General Bytecode Design,  Up: Agent Expressions
+
+F.2 Bytecode Descriptions
+=========================
+
+Each bytecode description has the following form:
+
+`add' (0x02): A B => A+B
+     Pop the top two stack items, A and B, as integers; push their sum,
+     as an integer.
+
+
+   In this example, `add' is the name of the bytecode, and `(0x02)' is
+the one-byte value used to encode the bytecode, in hexadecimal.  The
+phrase "A B => A+B" shows the stack before and after the bytecode
+executes.  Beforehand, the stack must contain at least two values, A
+and B; since the top of the stack is to the right, B is on the top of
+the stack, and A is underneath it.  After execution, the bytecode will
+have popped A and B from the stack, and replaced them with a single
+value, A+B.  There may be other values on the stack below those shown,
+but the bytecode affects only those shown.
+
+   Here is another example:
+
+`const8' (0x22) N: => N
+     Push the 8-bit integer constant N on the stack, without sign
+     extension.
+
+
+   In this example, the bytecode `const8' takes an operand N directly
+from the bytecode stream; the operand follows the `const8' bytecode
+itself.  We write any such operands immediately after the name of the
+bytecode, before the colon, and describe the exact encoding of the
+operand in the bytecode stream in the body of the bytecode description.
+
+   For the `const8' bytecode, there are no stack items given before the
+=>; this simply means that the bytecode consumes no values from the
+stack.  If a bytecode consumes no values, or produces no values, the
+list on either side of the => may be empty.
+
+   If a value is written as A, B, or N, then the bytecode treats it as
+an integer.  If a value is written is ADDR, then the bytecode treats it
+as an address.
+
+   We do not fully describe the floating point operations here; although
+this design can be extended in a clean way to handle floating point
+values, they are not of immediate interest to the customer, so we avoid
+describing them, to save time.
+
+`float' (0x01): =>
+     Prefix for floating-point bytecodes.  Not implemented yet.
+
+`add' (0x02): A B => A+B
+     Pop two integers from the stack, and push their sum, as an integer.
+
+`sub' (0x03): A B => A-B
+     Pop two integers from the stack, subtract the top value from the
+     next-to-top value, and push the difference.
+
+`mul' (0x04): A B => A*B
+     Pop two integers from the stack, multiply them, and push the
+     product on the stack.  Note that, when one multiplies two N-bit
+     numbers yielding another N-bit number, it is irrelevant whether the
+     numbers are signed or not; the results are the same.
+
+`div_signed' (0x05): A B => A/B
+     Pop two signed integers from the stack; divide the next-to-top
+     value by the top value, and push the quotient.  If the divisor is
+     zero, terminate with an error.
+
+`div_unsigned' (0x06): A B => A/B
+     Pop two unsigned integers from the stack; divide the next-to-top
+     value by the top value, and push the quotient.  If the divisor is
+     zero, terminate with an error.
+
+`rem_signed' (0x07): A B => A MODULO B
+     Pop two signed integers from the stack; divide the next-to-top
+     value by the top value, and push the remainder.  If the divisor is
+     zero, terminate with an error.
+
+`rem_unsigned' (0x08): A B => A MODULO B
+     Pop two unsigned integers from the stack; divide the next-to-top
+     value by the top value, and push the remainder.  If the divisor is
+     zero, terminate with an error.
+
+`lsh' (0x09): A B => A<<B
+     Pop two integers from the stack; let A be the next-to-top value,
+     and B be the top value.  Shift A left by B bits, and push the
+     result.
+
+`rsh_signed' (0x0a): A B => `(signed)'A>>B
+     Pop two integers from the stack; let A be the next-to-top value,
+     and B be the top value.  Shift A right by B bits, inserting copies
+     of the top bit at the high end, and push the result.
+
+`rsh_unsigned' (0x0b): A B => A>>B
+     Pop two integers from the stack; let A be the next-to-top value,
+     and B be the top value.  Shift A right by B bits, inserting zero
+     bits at the high end, and push the result.
+
+`log_not' (0x0e): A => !A
+     Pop an integer from the stack; if it is zero, push the value one;
+     otherwise, push the value zero.
+
+`bit_and' (0x0f): A B => A&B
+     Pop two integers from the stack, and push their bitwise `and'.
+
+`bit_or' (0x10): A B => A|B
+     Pop two integers from the stack, and push their bitwise `or'.
+
+`bit_xor' (0x11): A B => A^B
+     Pop two integers from the stack, and push their bitwise
+     exclusive-`or'.
+
+`bit_not' (0x12): A => ~A
+     Pop an integer from the stack, and push its bitwise complement.
+
+`equal' (0x13): A B => A=B
+     Pop two integers from the stack; if they are equal, push the value
+     one; otherwise, push the value zero.
+
+`less_signed' (0x14): A B => A<B
+     Pop two signed integers from the stack; if the next-to-top value
+     is less than the top value, push the value one; otherwise, push
+     the value zero.
+
+`less_unsigned' (0x15): A B => A<B
+     Pop two unsigned integers from the stack; if the next-to-top value
+     is less than the top value, push the value one; otherwise, push
+     the value zero.
+
+`ext' (0x16) N: A => A, sign-extended from N bits
+     Pop an unsigned value from the stack; treating it as an N-bit
+     twos-complement value, extend it to full length.  This means that
+     all bits to the left of bit N-1 (where the least significant bit
+     is bit 0) are set to the value of bit N-1.  Note that N may be
+     larger than or equal to the width of the stack elements of the
+     bytecode engine; in this case, the bytecode should have no effect.
+
+     The number of source bits to preserve, N, is encoded as a single
+     byte unsigned integer following the `ext' bytecode.
+
+`zero_ext' (0x2a) N: A => A, zero-extended from N bits
+     Pop an unsigned value from the stack; zero all but the bottom N
+     bits.  This means that all bits to the left of bit N-1 (where the
+     least significant bit is bit 0) are set to the value of bit N-1.
+
+     The number of source bits to preserve, N, is encoded as a single
+     byte unsigned integer following the `zero_ext' bytecode.
+
+`ref8' (0x17): ADDR => A
+`ref16' (0x18): ADDR => A
+`ref32' (0x19): ADDR => A
+`ref64' (0x1a): ADDR => A
+     Pop an address ADDR from the stack.  For bytecode `ref'N, fetch an
+     N-bit value from ADDR, using the natural target endianness.  Push
+     the fetched value as an unsigned integer.
+
+     Note that ADDR may not be aligned in any particular way; the
+     `refN' bytecodes should operate correctly for any address.
+
+     If attempting to access memory at ADDR would cause a processor
+     exception of some sort, terminate with an error.
+
+`ref_float' (0x1b): ADDR => D
+`ref_double' (0x1c): ADDR => D
+`ref_long_double' (0x1d): ADDR => D
+`l_to_d' (0x1e): A => D
+`d_to_l' (0x1f): D => A
+     Not implemented yet.
+
+`dup' (0x28): A => A A
+     Push another copy of the stack's top element.
+
+`swap' (0x2b): A B => B A
+     Exchange the top two items on the stack.
+
+`pop' (0x29): A =>
+     Discard the top value on the stack.
+
+`pick' (0x32) N: A ... B => A ... B A
+     Duplicate an item from the stack and push it on the top of the
+     stack.  N, a single byte, indicates the stack item to copy.  If N
+     is zero, this is the same as `dup'; if N is one, it copies the
+     item under the top item, etc.  If N exceeds the number of items on
+     the stack, terminate with an error.
+
+`rot' (0x33): A B C => C B A
+     Rotate the top three items on the stack.
+
+`if_goto' (0x20) OFFSET: A =>
+     Pop an integer off the stack; if it is non-zero, branch to the
+     given offset in the bytecode string.  Otherwise, continue to the
+     next instruction in the bytecode stream.  In other words, if A is
+     non-zero, set the `pc' register to `start' + OFFSET.  Thus, an
+     offset of zero denotes the beginning of the expression.
+
+     The OFFSET is stored as a sixteen-bit unsigned value, stored
+     immediately following the `if_goto' bytecode.  It is always stored
+     most significant byte first, regardless of the target's normal
+     endianness.  The offset is not guaranteed to fall at any particular
+     alignment within the bytecode stream; thus, on machines where
+     fetching a 16-bit on an unaligned address raises an exception, you
+     should fetch the offset one byte at a time.
+
+`goto' (0x21) OFFSET: =>
+     Branch unconditionally to OFFSET; in other words, set the `pc'
+     register to `start' + OFFSET.
+
+     The offset is stored in the same way as for the `if_goto' bytecode.
+
+`const8' (0x22) N: => N
+`const16' (0x23) N: => N
+`const32' (0x24) N: => N
+`const64' (0x25) N: => N
+     Push the integer constant N on the stack, without sign extension.
+     To produce a small negative value, push a small twos-complement
+     value, and then sign-extend it using the `ext' bytecode.
+
+     The constant N is stored in the appropriate number of bytes
+     following the `const'B bytecode.  The constant N is always stored
+     most significant byte first, regardless of the target's normal
+     endianness.  The constant is not guaranteed to fall at any
+     particular alignment within the bytecode stream; thus, on machines
+     where fetching a 16-bit on an unaligned address raises an
+     exception, you should fetch N one byte at a time.
+
+`reg' (0x26) N: => A
+     Push the value of register number N, without sign extension.  The
+     registers are numbered following GDB's conventions.
+
+     The register number N is encoded as a 16-bit unsigned integer
+     immediately following the `reg' bytecode.  It is always stored most
+     significant byte first, regardless of the target's normal
+     endianness.  The register number is not guaranteed to fall at any
+     particular alignment within the bytecode stream; thus, on machines
+     where fetching a 16-bit on an unaligned address raises an
+     exception, you should fetch the register number one byte at a time.
+
+`getv' (0x2c) N: => V
+     Push the value of trace state variable number N, without sign
+     extension.
+
+     The variable number N is encoded as a 16-bit unsigned integer
+     immediately following the `getv' bytecode.  It is always stored
+     most significant byte first, regardless of the target's normal
+     endianness.  The variable number is not guaranteed to fall at any
+     particular alignment within the bytecode stream; thus, on machines
+     where fetching a 16-bit on an unaligned address raises an
+     exception, you should fetch the register number one byte at a time.
+
+`setv' (0x2d) N: => V
+     Set trace state variable number N to the value found on the top of
+     the stack.  The stack is unchanged, so that the value is readily
+     available if the assignment is part of a larger expression.  The
+     handling of N is as described for `getv'.
+
+`trace' (0x0c): ADDR SIZE =>
+     Record the contents of the SIZE bytes at ADDR in a trace buffer,
+     for later retrieval by GDB.
+
+`trace_quick' (0x0d) SIZE: ADDR => ADDR
+     Record the contents of the SIZE bytes at ADDR in a trace buffer,
+     for later retrieval by GDB.  SIZE is a single byte unsigned
+     integer following the `trace' opcode.
+
+     This bytecode is equivalent to the sequence `dup const8 SIZE
+     trace', but we provide it anyway to save space in bytecode strings.
+
+`trace16' (0x30) SIZE: ADDR => ADDR
+     Identical to trace_quick, except that SIZE is a 16-bit big-endian
+     unsigned integer, not a single byte.  This should probably have
+     been named `trace_quick16', for consistency.
+
+`tracev' (0x2e) N: => A
+     Record the value of trace state variable number N in the trace
+     buffer.  The handling of N is as described for `getv'.
+
+`tracenz' (0x2f)  ADDR SIZE =>
+     Record the bytes at ADDR in a trace buffer, for later retrieval by
+     GDB.  Stop at either the first zero byte, or when SIZE bytes have
+     been recorded, whichever occurs first.
+
+`printf' (0x34)  NUMARGS STRING =>
+     Do a formatted print, in the style of the C function `printf').
+     The value of NUMARGS is the number of arguments to expect on the
+     stack, while STRING is the format string, prefixed with a two-byte
+     length.  The last byte of the string must be zero, and is included
+     in the length.  The format string includes escaped sequences just
+     as it appears in C source, so for instance the format string
+     `"\t%d\n"' is six characters long, and the output will consist of
+     a tab character, a decimal number, and a newline.  At the top of
+     the stack, above the values to be printed, this bytecode will pop a
+     "function" and "channel".  If the function is nonzero, then the
+     target may treat it as a function and call it, passing the channel
+     as a first argument, as with the C function `fprintf'.  If the
+     function is zero, then the target may simply call a standard
+     formatted print function of its choice.  In all, this bytecode
+     pops 2 + NUMARGS stack elements, and pushes nothing.
+
+`end' (0x27): =>
+     Stop executing bytecode; the result should be the top element of
+     the stack.  If the purpose of the expression was to compute an
+     lvalue or a range of memory, then the next-to-top of the stack is
+     the lvalue's address, and the top of the stack is the lvalue's
+     size, in bytes.
+
+
+
+File: gdb.info,  Node: Using Agent Expressions,  Next: Varying Target Capabilities,  Prev: Bytecode Descriptions,  Up: Agent Expressions
+
+F.3 Using Agent Expressions
+===========================
+
+Agent expressions can be used in several different ways by GDB, and the
+debugger can generate different bytecode sequences as appropriate.
+
+   One possibility is to do expression evaluation on the target rather
+than the host, such as for the conditional of a conditional tracepoint.
+In such a case, GDB compiles the source expression into a bytecode
+sequence that simply gets values from registers or memory, does
+arithmetic, and returns a result.
+
+   Another way to use agent expressions is for tracepoint data
+collection.  GDB generates a different bytecode sequence for
+collection; in addition to bytecodes that do the calculation, GDB adds
+`trace' bytecodes to save the pieces of memory that were used.
+
+   * The user selects trace points in the program's code at which GDB
+     should collect data.
+
+   * The user specifies expressions to evaluate at each trace point.
+     These expressions may denote objects in memory, in which case
+     those objects' contents are recorded as the program runs, or
+     computed values, in which case the values themselves are recorded.
+
+   * GDB transmits the tracepoints and their associated expressions to
+     the GDB agent, running on the debugging target.
+
+   * The agent arranges to be notified when a trace point is hit.
+
+   * When execution on the target reaches a trace point, the agent
+     evaluates the expressions associated with that trace point, and
+     records the resulting values and memory ranges.
+
+   * Later, when the user selects a given trace event and inspects the
+     objects and expression values recorded, GDB talks to the agent to
+     retrieve recorded data as necessary to meet the user's requests.
+     If the user asks to see an object whose contents have not been
+     recorded, GDB reports an error.
+
+
+
+File: gdb.info,  Node: Varying Target Capabilities,  Next: Rationale,  Prev: Using Agent Expressions,  Up: Agent Expressions
+
+F.4 Varying Target Capabilities
+===============================
+
+Some targets don't support floating-point, and some would rather not
+have to deal with `long long' operations.  Also, different targets will
+have different stack sizes, and different bytecode buffer lengths.
+
+   Thus, GDB needs a way to ask the target about itself.  We haven't
+worked out the details yet, but in general, GDB should be able to send
+the target a packet asking it to describe itself.  The reply should be a
+packet whose length is explicit, so we can add new information to the
+packet in future revisions of the agent, without confusing old versions
+of GDB, and it should contain a version number.  It should contain at
+least the following information:
+
+   * whether floating point is supported
+
+   * whether `long long' is supported
+
+   * maximum acceptable size of bytecode stack
+
+   * maximum acceptable length of bytecode expressions
+
+   * which registers are actually available for collection
+
+   * whether the target supports disabled tracepoints
+
+
+
+File: gdb.info,  Node: Rationale,  Prev: Varying Target Capabilities,  Up: Agent Expressions
+
+F.5 Rationale
+=============
+
+Some of the design decisions apparent above are arguable.
+
+What about stack overflow/underflow?
+     GDB should be able to query the target to discover its stack size.
+     Given that information, GDB can determine at translation time
+     whether a given expression will overflow the stack.  But this spec
+     isn't about what kinds of error-checking GDB ought to do.
+
+Why are you doing everything in LONGEST?
+     Speed isn't important, but agent code size is; using LONGEST
+     brings in a bunch of support code to do things like division, etc.
+     So this is a serious concern.
+
+     First, note that you don't need different bytecodes for different
+     operand sizes.  You can generate code without _knowing_ how big the
+     stack elements actually are on the target.  If the target only
+     supports 32-bit ints, and you don't send any 64-bit bytecodes,
+     everything just works.  The observation here is that the MIPS and
+     the Alpha have only fixed-size registers, and you can still get
+     C's semantics even though most instructions only operate on
+     full-sized words.  You just need to make sure everything is
+     properly sign-extended at the right times.  So there is no need
+     for 32- and 64-bit variants of the bytecodes.  Just implement
+     everything using the largest size you support.
+
+     GDB should certainly check to see what sizes the target supports,
+     so the user can get an error earlier, rather than later.  But this
+     information is not necessary for correctness.
+
+Why don't you have `>' or `<=' operators?
+     I want to keep the interpreter small, and we don't need them.  We
+     can combine the `less_' opcodes with `log_not', and swap the order
+     of the operands, yielding all four asymmetrical comparison
+     operators.  For example, `(x <= y)' is `! (x > y)', which is `! (y
+     < x)'.
+
+Why do you have `log_not'?
+Why do you have `ext'?
+Why do you have `zero_ext'?
+     These are all easily synthesized from other instructions, but I
+     expect them to be used frequently, and they're simple, so I
+     include them to keep bytecode strings short.
+
+     `log_not' is equivalent to `const8 0 equal'; it's used in half the
+     relational operators.
+
+     `ext N' is equivalent to `const8 S-N lsh const8 S-N rsh_signed',
+     where S is the size of the stack elements; it follows `refM' and
+     REG bytecodes when the value should be signed.  See the next
+     bulleted item.
+
+     `zero_ext N' is equivalent to `constM MASK log_and'; it's used
+     whenever we push the value of a register, because we can't assume
+     the upper bits of the register aren't garbage.
+
+Why not have sign-extending variants of the `ref' operators?
+     Because that would double the number of `ref' operators, and we
+     need the `ext' bytecode anyway for accessing bitfields.
+
+Why not have constant-address variants of the `ref' operators?
+     Because that would double the number of `ref' operators again, and
+     `const32 ADDRESS ref32' is only one byte longer.
+
+Why do the `refN' operators have to support unaligned fetches?
+     GDB will generate bytecode that fetches multi-byte values at
+     unaligned addresses whenever the executable's debugging
+     information tells it to.  Furthermore, GDB does not know the value
+     the pointer will have when GDB generates the bytecode, so it
+     cannot determine whether a particular fetch will be aligned or not.
+
+     In particular, structure bitfields may be several bytes long, but
+     follow no alignment rules; members of packed structures are not
+     necessarily aligned either.
+
+     In general, there are many cases where unaligned references occur
+     in correct C code, either at the programmer's explicit request, or
+     at the compiler's discretion.  Thus, it is simpler to make the GDB
+     agent bytecodes work correctly in all circumstances than to make
+     GDB guess in each case whether the compiler did the usual thing.
+
+Why are there no side-effecting operators?
+     Because our current client doesn't want them?  That's a cheap
+     answer.  I think the real answer is that I'm afraid of
+     implementing function calls.  We should re-visit this issue after
+     the present contract is delivered.
+
+Why aren't the `goto' ops PC-relative?
+     The interpreter has the base address around anyway for PC bounds
+     checking, and it seemed simpler.
+
+Why is there only one offset size for the `goto' ops?
+     Offsets are currently sixteen bits.  I'm not happy with this
+     situation either:
+
+     Suppose we have multiple branch ops with different offset sizes.
+     As I generate code left-to-right, all my jumps are forward jumps
+     (there are no loops in expressions), so I never know the target
+     when I emit the jump opcode.  Thus, I have to either always assume
+     the largest offset size, or do jump relaxation on the code after I
+     generate it, which seems like a big waste of time.
+
+     I can imagine a reasonable expression being longer than 256 bytes.
+     I can't imagine one being longer than 64k.  Thus, we need 16-bit
+     offsets.  This kind of reasoning is so bogus, but relaxation is
+     pathetic.
+
+     The other approach would be to generate code right-to-left.  Then
+     I'd always know my offset size.  That might be fun.
+
+Where is the function call bytecode?
+     When we add side-effects, we should add this.
+
+Why does the `reg' bytecode take a 16-bit register number?
+     Intel's IA-64 architecture has 128 general-purpose registers, and
+     128 floating-point registers, and I'm sure it has some random
+     control registers.
+
+Why do we need `trace' and `trace_quick'?
+     Because GDB needs to record all the memory contents and registers
+     an expression touches.  If the user wants to evaluate an expression
+     `x->y->z', the agent must record the values of `x' and `x->y' as
+     well as the value of `x->y->z'.
+
+Don't the `trace' bytecodes make the interpreter less general?
+     They do mean that the interpreter contains special-purpose code,
+     but that doesn't mean the interpreter can only be used for that
+     purpose.  If an expression doesn't use the `trace' bytecodes, they
+     don't get in its way.
+
+Why doesn't `trace_quick' consume its arguments the way everything else does?
+     In general, you do want your operators to consume their arguments;
+     it's consistent, and generally reduces the amount of stack
+     rearrangement necessary.  However, `trace_quick' is a kludge to
+     save space; it only exists so we needn't write `dup const8 SIZE
+     trace' before every memory reference.  Therefore, it's okay for it
+     not to consume its arguments; it's meant for a specific context in
+     which we know exactly what it should do with the stack.  If we're
+     going to have a kludge, it should be an effective kludge.
+
+Why does `trace16' exist?
+     That opcode was added by the customer that contracted Cygnus for
+     the data tracing work.  I personally think it is unnecessary;
+     objects that large will be quite rare, so it is okay to use `dup
+     const16 SIZE trace' in those cases.
+
+     Whatever we decide to do with `trace16', we should at least leave
+     opcode 0x30 reserved, to remain compatible with the customer who
+     added it.
+
+
+
+File: gdb.info,  Node: Target Descriptions,  Next: Operating System Information,  Prev: Agent Expressions,  Up: Top
+
+Appendix G Target Descriptions
+******************************
+
+One of the challenges of using GDB to debug embedded systems is that
+there are so many minor variants of each processor architecture in use.
+It is common practice for vendors to start with a standard processor
+core -- ARM, PowerPC, or MIPS, for example -- and then make changes to
+adapt it to a particular market niche.  Some architectures have
+hundreds of variants, available from dozens of vendors.  This leads to
+a number of problems:
+
+   * With so many different customized processors, it is difficult for
+     the GDB maintainers to keep up with the changes.
+
+   * Since individual variants may have short lifetimes or limited
+     audiences, it may not be worthwhile to carry information about
+     every variant in the GDB source tree.
+
+   * When GDB does support the architecture of the embedded system at
+     hand, the task of finding the correct architecture name to give the
+     `set architecture' command can be error-prone.
+
+   To address these problems, the GDB remote protocol allows a target
+system to not only identify itself to GDB, but to actually describe its
+own features.  This lets GDB support processor variants it has never
+seen before -- to the extent that the descriptions are accurate, and
+that GDB understands them.
+
+   GDB must be linked with the Expat library to support XML target
+descriptions.  *Note Expat::.
+
+* Menu:
+
+* Retrieving Descriptions::         How descriptions are fetched from a target.
+* Target Description Format::       The contents of a target description.
+* Predefined Target Types::         Standard types available for target
+                                    descriptions.
+* Standard Target Features::        Features GDB knows about.
+
+
+File: gdb.info,  Node: Retrieving Descriptions,  Next: Target Description Format,  Up: Target Descriptions
+
+G.1 Retrieving Descriptions
+===========================
+
+Target descriptions can be read from the target automatically, or
+specified by the user manually.  The default behavior is to read the
+description from the target.  GDB retrieves it via the remote protocol
+using `qXfer' requests (*note qXfer: General Query Packets.).  The
+ANNEX in the `qXfer' packet will be `target.xml'.  The contents of the
+`target.xml' annex are an XML document, of the form described in *Note
+Target Description Format::.
+
+   Alternatively, you can specify a file to read for the target
+description.  If a file is set, the target will not be queried.  The
+commands to specify a file are:
+
+`set tdesc filename PATH'
+     Read the target description from PATH.
+
+`unset tdesc filename'
+     Do not read the XML target description from a file.  GDB will use
+     the description supplied by the current target.
+
+`show tdesc filename'
+     Show the filename to read for a target description, if any.
+
+
+File: gdb.info,  Node: Target Description Format,  Next: Predefined Target Types,  Prev: Retrieving Descriptions,  Up: Target Descriptions
+
+G.2 Target Description Format
+=============================
+
+A target description annex is an XML (http://www.w3.org/XML/) document
+which complies with the Document Type Definition provided in the GDB
+sources in `gdb/features/gdb-target.dtd'.  This means you can use
+generally available tools like `xmllint' to check that your feature
+descriptions are well-formed and valid.  However, to help people
+unfamiliar with XML write descriptions for their targets, we also
+describe the grammar here.
+
+   Target descriptions can identify the architecture of the remote
+target and (for some architectures) provide information about custom
+register sets.  They can also identify the OS ABI of the remote target.
+GDB can use this information to autoconfigure for your target, or to
+warn you if you connect to an unsupported target.
+
+   Here is a simple target description:
+
+     <target version="1.0">
+       <architecture>i386:x86-64</architecture>
+     </target>
+
+This minimal description only says that the target uses the x86-64
+architecture.
+
+   A target description has the following overall form, with [ ] marking
+optional elements and ... marking repeatable elements.  The elements
+are explained further below.
+
+     <?xml version="1.0"?>
+     <!DOCTYPE target SYSTEM "gdb-target.dtd">
+     <target version="1.0">
+       [ARCHITECTURE]
+       [OSABI]
+       [COMPATIBLE]
+       [FEATURE...]
+     </target>
+
+The description is generally insensitive to whitespace and line breaks,
+under the usual common-sense rules.  The XML version declaration and
+document type declaration can generally be omitted (GDB does not
+require them), but specifying them may be useful for XML validation
+tools.  The `version' attribute for `<target>' may also be omitted, but
+we recommend including it; if future versions of GDB use an incompatible
+revision of `gdb-target.dtd', they will detect and report the version
+mismatch.
+
+G.2.1 Inclusion
+---------------
+
+It can sometimes be valuable to split a target description up into
+several different annexes, either for organizational purposes, or to
+share files between different possible target descriptions.  You can
+divide a description into multiple files by replacing any element of
+the target description with an inclusion directive of the form:
+
+     <xi:include href="DOCUMENT"/>
+
+When GDB encounters an element of this form, it will retrieve the named
+XML DOCUMENT, and replace the inclusion directive with the contents of
+that document.  If the current description was read using `qXfer', then
+so will be the included document; DOCUMENT will be interpreted as the
+name of an annex.  If the current description was read from a file, GDB
+will look for DOCUMENT as a file in the same directory where it found
+the original description.
+
+G.2.2 Architecture
+------------------
+
+An `<architecture>' element has this form:
+
+       <architecture>ARCH</architecture>
+
+   ARCH is one of the architectures from the set accepted by `set
+architecture' (*note Specifying a Debugging Target: Targets.).
+
+G.2.3 OS ABI
+------------
+
+This optional field was introduced in GDB version 7.0.  Previous
+versions of GDB ignore it.
+
+   An `<osabi>' element has this form:
+
+       <osabi>ABI-NAME</osabi>
+
+   ABI-NAME is an OS ABI name from the same selection accepted by
+`set osabi' (*note Configuring the Current ABI: ABI.).
+
+G.2.4 Compatible Architecture
+-----------------------------
+
+This optional field was introduced in GDB version 7.0.  Previous
+versions of GDB ignore it.
+
+   A `<compatible>' element has this form:
+
+       <compatible>ARCH</compatible>
+
+   ARCH is one of the architectures from the set accepted by `set
+architecture' (*note Specifying a Debugging Target: Targets.).
+
+   A `<compatible>' element is used to specify that the target is able
+to run binaries in some other than the main target architecture given
+by the `<architecture>' element.  For example, on the Cell Broadband
+Engine, the main architecture is `powerpc:common' or
+`powerpc:common64', but the system is able to run binaries in the `spu'
+architecture as well.  The way to describe this capability with
+`<compatible>' is as follows:
+
+       <architecture>powerpc:common</architecture>
+       <compatible>spu</compatible>
+
+G.2.5 Features
+--------------
+
+Each `<feature>' describes some logical portion of the target system.
+Features are currently used to describe available CPU registers and the
+types of their contents.  A `<feature>' element has this form:
+
+     <feature name="NAME">
+       [TYPE...]
+       REG...
+     </feature>
+
+Each feature's name should be unique within the description.  The name
+of a feature does not matter unless GDB has some special knowledge of
+the contents of that feature; if it does, the feature should have its
+standard name.  *Note Standard Target Features::.
+
+G.2.6 Types
+-----------
+
+Any register's value is a collection of bits which GDB must interpret.
+The default interpretation is a two's complement integer, but other
+types can be requested by name in the register description.  Some
+predefined types are provided by GDB (*note Predefined Target Types::),
+and the description can define additional composite types.
+
+   Each type element must have an `id' attribute, which gives a unique
+(within the containing `<feature>') name to the type.  Types must be
+defined before they are used.
+
+   Some targets offer vector registers, which can be treated as arrays
+of scalar elements.  These types are written as `<vector>' elements,
+specifying the array element type, TYPE, and the number of elements,
+COUNT:
+
+     <vector id="ID" type="TYPE" count="COUNT"/>
+
+   If a register's value is usefully viewed in multiple ways, define it
+with a union type containing the useful representations.  The `<union>'
+element contains one or more `<field>' elements, each of which has a
+NAME and a TYPE:
+
+     <union id="ID">
+       <field name="NAME" type="TYPE"/>
+       ...
+     </union>
+
+   If a register's value is composed from several separate values,
+define it with a structure type.  There are two forms of the `<struct>'
+element; a `<struct>' element must either contain only bitfields or
+contain no bitfields.  If the structure contains only bitfields, its
+total size in bytes must be specified, each bitfield must have an
+explicit start and end, and bitfields are automatically assigned an
+integer type.  The field's START should be less than or equal to its
+END, and zero represents the least significant bit.
+
+     <struct id="ID" size="SIZE">
+       <field name="NAME" start="START" end="END"/>
+       ...
+     </struct>
+
+   If the structure contains no bitfields, then each field has an
+explicit type, and no implicit padding is added.
+
+     <struct id="ID">
+       <field name="NAME" type="TYPE"/>
+       ...
+     </struct>
+
+   If a register's value is a series of single-bit flags, define it with
+a flags type.  The `<flags>' element has an explicit SIZE and contains
+one or more `<field>' elements.  Each field has a NAME, a START, and an
+END.  Only single-bit flags are supported.
+
+     <flags id="ID" size="SIZE">
+       <field name="NAME" start="START" end="END"/>
+       ...
+     </flags>
+
+G.2.7 Registers
+---------------
+
+Each register is represented as an element with this form:
+
+     <reg name="NAME"
+          bitsize="SIZE"
+          [regnum="NUM"]
+          [save-restore="SAVE-RESTORE"]
+          [type="TYPE"]
+          [group="GROUP"]/>
+
+The components are as follows:
+
+NAME
+     The register's name; it must be unique within the target
+     description.
+
+BITSIZE
+     The register's size, in bits.
+
+REGNUM
+     The register's number.  If omitted, a register's number is one
+     greater than that of the previous register (either in the current
+     feature or in a preceding feature); the first register in the
+     target description defaults to zero.  This register number is used
+     to read or write the register; e.g. it is used in the remote `p'
+     and `P' packets, and registers appear in the `g' and `G' packets
+     in order of increasing register number.
+
+SAVE-RESTORE
+     Whether the register should be preserved across inferior function
+     calls; this must be either `yes' or `no'.  The default is `yes',
+     which is appropriate for most registers except for some system
+     control registers; this is not related to the target's ABI.
+
+TYPE
+     The type of the register.  TYPE may be a predefined type, a type
+     defined in the current feature, or one of the special types `int'
+     and `float'.  `int' is an integer type of the correct size for
+     BITSIZE, and `float' is a floating point type (in the
+     architecture's normal floating point format) of the correct size
+     for BITSIZE.  The default is `int'.
+
+GROUP
+     The register group to which this register belongs.  GROUP must be
+     either `general', `float', or `vector'.  If no GROUP is specified,
+     GDB will not display the register in `info registers'.
+
+
+
+File: gdb.info,  Node: Predefined Target Types,  Next: Standard Target Features,  Prev: Target Description Format,  Up: Target Descriptions
+
+G.3 Predefined Target Types
+===========================
+
+Type definitions in the self-description can build up composite types
+from basic building blocks, but can not define fundamental types.
+Instead, standard identifiers are provided by GDB for the fundamental
+types.  The currently supported types are:
+
+`int8'
+`int16'
+`int32'
+`int64'
+`int128'
+     Signed integer types holding the specified number of bits.
+
+`uint8'
+`uint16'
+`uint32'
+`uint64'
+`uint128'
+     Unsigned integer types holding the specified number of bits.
+
+`code_ptr'
+`data_ptr'
+     Pointers to unspecified code and data.  The program counter and
+     any dedicated return address register may be marked as code
+     pointers; printing a code pointer converts it into a symbolic
+     address.  The stack pointer and any dedicated address registers
+     may be marked as data pointers.
+
+`ieee_single'
+     Single precision IEEE floating point.
+
+`ieee_double'
+     Double precision IEEE floating point.
+
+`arm_fpa_ext'
+     The 12-byte extended precision format used by ARM FPA registers.
+
+`i387_ext'
+     The 10-byte extended precision format used by x87 registers.
+
+`i386_eflags'
+     32bit EFLAGS register used by x86.
+
+`i386_mxcsr'
+     32bit MXCSR register used by x86.
+
+
+
+File: gdb.info,  Node: Standard Target Features,  Prev: Predefined Target Types,  Up: Target Descriptions
+
+G.4 Standard Target Features
+============================
+
+A target description must contain either no registers or all the
+target's registers.  If the description contains no registers, then GDB
+will assume a default register layout, selected based on the
+architecture.  If the description contains any registers, the default
+layout will not be used; the standard registers must be described in
+the target description, in such a way that GDB can recognize them.
+
+   This is accomplished by giving specific names to feature elements
+which contain standard registers.  GDB will look for features with
+those names and verify that they contain the expected registers; if any
+known feature is missing required registers, or if any required feature
+is missing, GDB will reject the target description.  You can add
+additional registers to any of the standard features -- GDB will
+display them just as if they were added to an unrecognized feature.
+
+   This section lists the known features and their expected contents.
+Sample XML documents for these features are included in the GDB source
+tree, in the directory `gdb/features'.
+
+   Names recognized by GDB should include the name of the company or
+organization which selected the name, and the overall architecture to
+which the feature applies; so e.g. the feature containing ARM core
+registers is named `org.gnu.gdb.arm.core'.
+
+   The names of registers are not case sensitive for the purpose of
+recognizing standard features, but GDB will only display registers
+using the capitalization used in the description.
+
+* Menu:
+
+* ARM Features::
+* i386 Features::
+* MIPS Features::
+* M68K Features::
+* PowerPC Features::
+* TIC6x Features::
+
+
+File: gdb.info,  Node: ARM Features,  Next: i386 Features,  Up: Standard Target Features
+
+G.4.1 ARM Features
+------------------
+
+The `org.gnu.gdb.arm.core' feature is required for non-M-profile ARM
+targets.  It should contain registers `r0' through `r13', `sp', `lr',
+`pc', and `cpsr'.
+
+   For M-profile targets (e.g. Cortex-M3), the `org.gnu.gdb.arm.core'
+feature is replaced by `org.gnu.gdb.arm.m-profile'.  It should contain
+registers `r0' through `r13', `sp', `lr', `pc', and `xpsr'.
+
+   The `org.gnu.gdb.arm.fpa' feature is optional.  If present, it
+should contain registers `f0' through `f7' and `fps'.
+
+   The `org.gnu.gdb.xscale.iwmmxt' feature is optional.  If present, it
+should contain at least registers `wR0' through `wR15' and `wCGR0'
+through `wCGR3'.  The `wCID', `wCon', `wCSSF', and `wCASF' registers
+are optional.
+
+   The `org.gnu.gdb.arm.vfp' feature is optional.  If present, it
+should contain at least registers `d0' through `d15'.  If they are
+present, `d16' through `d31' should also be included.  GDB will
+synthesize the single-precision registers from halves of the
+double-precision registers.
+
+   The `org.gnu.gdb.arm.neon' feature is optional.  It does not need to
+contain registers; it instructs GDB to display the VFP double-precision
+registers as vectors and to synthesize the quad-precision registers
+from pairs of double-precision registers.  If this feature is present,
+`org.gnu.gdb.arm.vfp' must also be present and include 32
+double-precision registers.
+
+
+File: gdb.info,  Node: i386 Features,  Next: MIPS Features,  Prev: ARM Features,  Up: Standard Target Features
+
+G.4.2 i386 Features
+-------------------
+
+The `org.gnu.gdb.i386.core' feature is required for i386/amd64 targets.
+It should describe the following registers:
+
+   - `eax' through `edi' plus `eip' for i386
+
+   - `rax' through `r15' plus `rip' for amd64
+
+   - `eflags', `cs', `ss', `ds', `es', `fs', `gs'
+
+   - `st0' through `st7'
+
+   - `fctrl', `fstat', `ftag', `fiseg', `fioff', `foseg', `fooff' and
+     `fop'
+
+   The register sets may be different, depending on the target.
+
+   The `org.gnu.gdb.i386.sse' feature is optional.  It should describe
+registers:
+
+   - `xmm0' through `xmm7' for i386
+
+   - `xmm0' through `xmm15' for amd64
+
+   - `mxcsr'
+
+   The `org.gnu.gdb.i386.avx' feature is optional and requires the
+`org.gnu.gdb.i386.sse' feature.  It should describe the upper 128 bits
+of YMM registers:
+
+   - `ymm0h' through `ymm7h' for i386
+
+   - `ymm0h' through `ymm15h' for amd64
+
+   The `org.gnu.gdb.i386.linux' feature is optional.  It should
+describe a single register, `orig_eax'.
+
+
+File: gdb.info,  Node: MIPS Features,  Next: M68K Features,  Prev: i386 Features,  Up: Standard Target Features
+
+G.4.3 MIPS Features
+-------------------
+
+The `org.gnu.gdb.mips.cpu' feature is required for MIPS targets.  It
+should contain registers `r0' through `r31', `lo', `hi', and `pc'.
+They may be 32-bit or 64-bit depending on the target.
+
+   The `org.gnu.gdb.mips.cp0' feature is also required.  It should
+contain at least the `status', `badvaddr', and `cause' registers.  They
+may be 32-bit or 64-bit depending on the target.
+
+   The `org.gnu.gdb.mips.fpu' feature is currently required, though it
+may be optional in a future version of GDB.  It should contain
+registers `f0' through `f31', `fcsr', and `fir'.  They may be 32-bit or
+64-bit depending on the target.
+
+   The `org.gnu.gdb.mips.dsp' feature is optional.  It should contain
+registers `hi1' through `hi3', `lo1' through `lo3', and `dspctl'.  The
+`dspctl' register should be 32-bit and the rest may be 32-bit or 64-bit
+depending on the target.
+
+   The `org.gnu.gdb.mips.linux' feature is optional.  It should contain
+a single register, `restart', which is used by the Linux kernel to
+control restartable syscalls.
+
+
+File: gdb.info,  Node: M68K Features,  Next: PowerPC Features,  Prev: MIPS Features,  Up: Standard Target Features
+
+G.4.4 M68K Features
+-------------------
+
+``org.gnu.gdb.m68k.core''
+``org.gnu.gdb.coldfire.core''
+``org.gnu.gdb.fido.core''
+     One of those features must be always present.  The feature that is
+     present determines which flavor of m68k is used.  The feature that
+     is present should contain registers `d0' through `d7', `a0'
+     through `a5', `fp', `sp', `ps' and `pc'.
+
+``org.gnu.gdb.coldfire.fp''
+     This feature is optional.  If present, it should contain registers
+     `fp0' through `fp7', `fpcontrol', `fpstatus' and `fpiaddr'.
+
+
+File: gdb.info,  Node: PowerPC Features,  Next: TIC6x Features,  Prev: M68K Features,  Up: Standard Target Features
+
+G.4.5 PowerPC Features
+----------------------
+
+The `org.gnu.gdb.power.core' feature is required for PowerPC targets.
+It should contain registers `r0' through `r31', `pc', `msr', `cr',
+`lr', `ctr', and `xer'.  They may be 32-bit or 64-bit depending on the
+target.
+
+   The `org.gnu.gdb.power.fpu' feature is optional.  It should contain
+registers `f0' through `f31' and `fpscr'.
+
+   The `org.gnu.gdb.power.altivec' feature is optional.  It should
+contain registers `vr0' through `vr31', `vscr', and `vrsave'.
+
+   The `org.gnu.gdb.power.vsx' feature is optional.  It should contain
+registers `vs0h' through `vs31h'.  GDB will combine these registers
+with the floating point registers (`f0' through `f31') and the altivec
+registers (`vr0' through `vr31') to present the 128-bit wide registers
+`vs0' through `vs63', the set of vector registers for POWER7.
+
+   The `org.gnu.gdb.power.spe' feature is optional.  It should contain
+registers `ev0h' through `ev31h', `acc', and `spefscr'.  SPE targets
+should provide 32-bit registers in `org.gnu.gdb.power.core' and provide
+the upper halves in `ev0h' through `ev31h'.  GDB will combine these to
+present registers `ev0' through `ev31' to the user.
+
+
+File: gdb.info,  Node: TIC6x Features,  Prev: PowerPC Features,  Up: Standard Target Features
+
+G.4.6 TMS320C6x Features
+------------------------
+
+The `org.gnu.gdb.tic6x.core' feature is required for TMS320C6x targets.
+It should contain registers `A0' through `A15', registers `B0' through
+`B15', `CSR' and `PC'.
+
+   The `org.gnu.gdb.tic6x.gp' feature is optional.  It should contain
+registers `A16' through `A31' and `B16' through `B31'.
+
+   The `org.gnu.gdb.tic6x.c6xp' feature is optional.  It should contain
+registers `TSR', `ILC' and `RILC'.
+
+
+File: gdb.info,  Node: Operating System Information,  Next: Trace File Format,  Prev: Target Descriptions,  Up: Top
+
+Appendix H Operating System Information
+***************************************
+
+* Menu:
+
+* Process list::
+
+   Users of GDB often wish to obtain information about the state of the
+operating system running on the target--for example the list of
+processes, or the list of open files.  This section describes the
+mechanism that makes it possible.  This mechanism is similar to the
+target features mechanism (*note Target Descriptions::), but focuses on
+a different aspect of target.
+
+   Operating system information is retrived from the target via the
+remote protocol, using `qXfer' requests (*note qXfer osdata read::).
+The object name in the request should be `osdata', and the ANNEX
+identifies the data to be fetched.
+
+
+File: gdb.info,  Node: Process list,  Up: Operating System Information
+
+H.1 Process list
+================
+
+When requesting the process list, the ANNEX field in the `qXfer'
+request should be `processes'.  The returned data is an XML document.
+The formal syntax of this document is defined in
+`gdb/features/osdata.dtd'.
+
+   An example document is:
+
+     <?xml version="1.0"?>
+     <!DOCTYPE target SYSTEM "osdata.dtd">
+     <osdata type="processes">
+       <item>
+         <column name="pid">1</column>
+         <column name="user">root</column>
+         <column name="command">/sbin/init</column>
+         <column name="cores">1,2,3</column>
+       </item>
+     </osdata>
+
+   Each item should include a column whose name is `pid'.  The value of
+that column should identify the process on the target.  The `user' and
+`command' columns are optional, and will be displayed by GDB.  The
+`cores' column, if present, should contain a comma-separated list of
+cores that this process is running on.  Target may provide additional
+columns, which GDB currently ignores.
+
+
+File: gdb.info,  Node: Trace File Format,  Next: Index Section Format,  Prev: Operating System Information,  Up: Top
+
+Appendix I Trace File Format
+****************************
+
+The trace file comes in three parts: a header, a textual description
+section, and a trace frame section with binary data.
+
+   The header has the form `\x7fTRACE0\n'.  The first byte is `0x7f' so
+as to indicate that the file contains binary data, while the `0' is a
+version number that may have different values in the future.
+
+   The description section consists of multiple lines of ASCII text
+separated by newline characters (`0xa').  The lines may include a
+variety of optional descriptive or context-setting information, such as
+tracepoint definitions or register set size.  GDB will ignore any line
+that it does not recognize.  An empty line marks the end of this
+section.
+
+   The trace frame section consists of a number of consecutive frames.
+Each frame begins with a two-byte tracepoint number, followed by a
+four-byte size giving the amount of data in the frame.  The data in the
+frame consists of a number of blocks, each introduced by a character
+indicating its type (at least register, memory, and trace state
+variable).  The data in this section is raw binary, not a hexadecimal
+or other encoding; its endianness matches the target's endianness.
+
+`R BYTES'
+     Register block.  The number and ordering of bytes matches that of a
+     `g' packet in the remote protocol.  Note that these are the actual
+     bytes, in target order and GDB register order, not a hexadecimal
+     encoding.
+
+`M ADDRESS LENGTH BYTES...'
+     Memory block.  This is a contiguous block of memory, at the 8-byte
+     address ADDRESS, with a 2-byte length LENGTH, followed by LENGTH
+     bytes.
+
+`V NUMBER VALUE'
+     Trace state variable block.  This records the 8-byte signed value
+     VALUE of trace state variable numbered NUMBER.
+
+
+   Future enhancements of the trace file format may include additional
+types of blocks.
+
+
+File: gdb.info,  Node: Index Section Format,  Next: Copying,  Prev: Trace File Format,  Up: Top
+
+Appendix J `.gdb_index' section format
+**************************************
+
+This section documents the index section that is created by `save
+gdb-index' (*note Index Files::).  The index section is DWARF-specific;
+some knowledge of DWARF is assumed in this description.
+
+   The mapped index file format is designed to be directly `mmap'able
+on any architecture.  In most cases, a datum is represented using a
+little-endian 32-bit integer value, called an `offset_type'.  Big
+endian machines must byte-swap the values before using them.
+Exceptions to this rule are noted.  The data is laid out such that
+alignment is always respected.
+
+   A mapped index consists of several areas, laid out in order.
+
+  1. The file header.  This is a sequence of values, of `offset_type'
+     unless otherwise noted:
+
+       1. The version number, currently 7.  Versions 1, 2 and 3 are
+          obsolete.  Version 4 uses a different hashing function from
+          versions 5 and 6.  Version 6 includes symbols for inlined
+          functions, whereas versions 4 and 5 do not.  Version 7 adds
+          attributes to the CU indices in the symbol table.  GDB will
+          only read version 4, 5, or 6 indices by specifying `set
+          use-deprecated-index-sections on'.
+
+       2. The offset, from the start of the file, of the CU list.
+
+       3. The offset, from the start of the file, of the types CU list.
+          Note that this area can be empty, in which case this offset
+          will be equal to the next offset.
+
+       4. The offset, from the start of the file, of the address area.
+
+       5. The offset, from the start of the file, of the symbol table.
+
+       6. The offset, from the start of the file, of the constant pool.
+
+  2. The CU list.  This is a sequence of pairs of 64-bit little-endian
+     values, sorted by the CU offset.  The first element in each pair is
+     the offset of a CU in the `.debug_info' section.  The second
+     element in each pair is the length of that CU.  References to a CU
+     elsewhere in the map are done using a CU index, which is just the
+     0-based index into this table.  Note that if there are type CUs,
+     then conceptually CUs and type CUs form a single list for the
+     purposes of CU indices.
+
+  3. The types CU list.  This is a sequence of triplets of 64-bit
+     little-endian values.  In a triplet, the first value is the CU
+     offset, the second value is the type offset in the CU, and the
+     third value is the type signature.  The types CU list is not
+     sorted.
+
+  4. The address area.  The address area consists of a sequence of
+     address entries.  Each address entry has three elements:
+
+       1. The low address.  This is a 64-bit little-endian value.
+
+       2. The high address.  This is a 64-bit little-endian value.  Like
+          `DW_AT_high_pc', the value is one byte beyond the end.
+
+       3. The CU index.  This is an `offset_type' value.
+
+  5. The symbol table.  This is an open-addressed hash table.  The size
+     of the hash table is always a power of 2.
+
+     Each slot in the hash table consists of a pair of `offset_type'
+     values.  The first value is the offset of the symbol's name in the
+     constant pool.  The second value is the offset of the CU vector in
+     the constant pool.
+
+     If both values are 0, then this slot in the hash table is empty.
+     This is ok because while 0 is a valid constant pool index, it
+     cannot be a valid index for both a string and a CU vector.
+
+     The hash value for a table entry is computed by applying an
+     iterative hash function to the symbol's name.  Starting with an
+     initial value of `r = 0', each (unsigned) character `c' in the
+     string is incorporated into the hash using the formula depending
+     on the index version:
+
+    Version 4
+          The formula is `r = r * 67 + c - 113'.
+
+    Versions 5 to 7
+          The formula is `r = r * 67 + tolower (c) - 113'.
+
+     The terminating `\0' is not incorporated into the hash.
+
+     The step size used in the hash table is computed via `((hash * 17)
+     & (size - 1)) | 1', where `hash' is the hash value, and `size' is
+     the size of the hash table.  The step size is used to find the
+     next candidate slot when handling a hash collision.
+
+     The names of C++ symbols in the hash table are canonicalized.  We
+     don't currently have a simple description of the canonicalization
+     algorithm; if you intend to create new index sections, you must
+     read the code.
+
+  6. The constant pool.  This is simply a bunch of bytes.  It is
+     organized so that alignment is correct: CU vectors are stored
+     first, followed by strings.
+
+     A CU vector in the constant pool is a sequence of `offset_type'
+     values.  The first value is the number of CU indices in the vector.
+     Each subsequent value is the index and symbol attributes of a CU in
+     the CU list.  This element in the hash table is used to indicate
+     which CUs define the symbol and how the symbol is used.  See below
+     for the format of each CU index+attributes entry.
+
+     A string in the constant pool is zero-terminated.
+
+   Attributes were added to CU index values in `.gdb_index' version 7.
+If a symbol has multiple uses within a CU then there is one CU
+index+attributes value for each use.
+
+   The format of each CU index+attributes entry is as follows (bit 0 =
+LSB):
+
+Bits 0-23
+     This is the index of the CU in the CU list.
+
+Bits 24-27
+     These bits are reserved for future purposes and must be zero.
+
+Bits 28-30
+     The kind of the symbol in the CU.
+
+    0
+          This value is reserved and should not be used.  By reserving
+          zero the full `offset_type' value is backwards compatible
+          with previous versions of the index.
+
+    1
+          The symbol is a type.
+
+    2
+          The symbol is a variable or an enum value.
+
+    3
+          The symbol is a function.
+
+    4
+          Any other kind of symbol.
+
+    5,6,7
+          These values are reserved.
+
+Bit 31
+     This bit is zero if the value is global and one if it is static.
+
+     The determination of whether a symbol is global or static is
+     complicated.  The authorative reference is the file `dwarf2read.c'
+     in GDB sources.
+
+
+   This pseudo-code describes the computation of a symbol's kind and
+global/static attributes in the index.
+
+     is_external = get_attribute (die, DW_AT_external);
+     language = get_attribute (cu_die, DW_AT_language);
+     switch (die->tag)
+       {
+       case DW_TAG_typedef:
+       case DW_TAG_base_type:
+       case DW_TAG_subrange_type:
+         kind = TYPE;
+         is_static = 1;
+         break;
+       case DW_TAG_enumerator:
+         kind = VARIABLE;
+         is_static = (language != CPLUS && language != JAVA);
+         break;
+       case DW_TAG_subprogram:
+         kind = FUNCTION;
+         is_static = ! (is_external || language == ADA);
+         break;
+       case DW_TAG_constant:
+         kind = VARIABLE;
+         is_static = ! is_external;
+         break;
+       case DW_TAG_variable:
+         kind = VARIABLE;
+         is_static = ! is_external;
+         break;
+       case DW_TAG_namespace:
+         kind = TYPE;
+         is_static = 0;
+         break;
+       case DW_TAG_class_type:
+       case DW_TAG_interface_type:
+       case DW_TAG_structure_type:
+       case DW_TAG_union_type:
+       case DW_TAG_enumeration_type:
+         kind = TYPE;
+         is_static = (language != CPLUS && language != JAVA);
+         break;
+       default:
+         assert (0);
+       }
+
+
+File: gdb.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: Index Section Format,  Up: Top
+
+Appendix K GNU GENERAL PUBLIC LICENSE
+*************************************
+
+                        Version 3, 29 June 2007
+
+     Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/'
+
+     Everyone is permitted to copy and distribute verbatim copies of this
+     license document, but changing it is not allowed.
+
+Preamble
+========
+
+The GNU General Public License is a free, copyleft license for software
+and other kinds of works.
+
+   The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains
+free software for all its users.  We, the Free Software Foundation, use
+the GNU General Public License for most of our software; it applies
+also to any other work released this way by its authors.  You can apply
+it to your programs, too.
+
+   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
+them 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.
+
+   To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you
+have certain responsibilities if you distribute copies of the software,
+or if you modify it: responsibilities to respect the freedom of others.
+
+   For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+   Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+   For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+   Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the
+manufacturer can do so.  This is fundamentally incompatible with the
+aim of protecting users' freedom to change the software.  The
+systematic pattern of such abuse occurs in the area of products for
+individuals to use, which is precisely where it is most unacceptable.
+Therefore, we have designed this version of the GPL to prohibit the
+practice for those products.  If such problems arise substantially in
+other domains, we stand ready to extend this provision to those domains
+in future versions of the GPL, as needed to protect the freedom of
+users.
+
+   Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+   The precise terms and conditions for copying, distribution and
+modification follow.
+
+TERMS AND CONDITIONS
+====================
+
+  0. Definitions.
+
+     "This License" refers to version 3 of the GNU General Public
+     License.
+
+     "Copyright" also means copyright-like laws that apply to other
+     kinds of works, such as semiconductor masks.
+
+     "The Program" refers to any copyrightable work licensed under this
+     License.  Each licensee is addressed as "you".  "Licensees" and
+     "recipients" may be individuals or organizations.
+
+     To "modify" a work means to copy from or adapt all or part of the
+     work in a fashion requiring copyright permission, other than the
+     making of an exact copy.  The resulting work is called a "modified
+     version" of the earlier work or a work "based on" the earlier work.
+
+     A "covered work" means either the unmodified Program or a work
+     based on the Program.
+
+     To "propagate" a work means to do anything with it that, without
+     permission, would make you directly or secondarily liable for
+     infringement under applicable copyright law, except executing it
+     on a computer or modifying a private copy.  Propagation includes
+     copying, distribution (with or without modification), making
+     available to the public, and in some countries other activities as
+     well.
+
+     To "convey" a work means any kind of propagation that enables other
+     parties to make or receive copies.  Mere interaction with a user
+     through a computer network, with no transfer of a copy, is not
+     conveying.
+
+     An interactive user interface displays "Appropriate Legal Notices"
+     to the extent that it includes a convenient and prominently visible
+     feature that (1) displays an appropriate copyright notice, and (2)
+     tells the user that there is no warranty for the work (except to
+     the extent that warranties are provided), that licensees may
+     convey the work under this License, and how to view a copy of this
+     License.  If the interface presents a list of user commands or
+     options, such as a menu, a prominent item in the list meets this
+     criterion.
+
+  1. Source Code.
+
+     The "source code" for a work means the preferred form of the work
+     for making modifications to it.  "Object code" means any
+     non-source form of a work.
+
+     A "Standard Interface" means an interface that either is an
+     official standard defined by a recognized standards body, or, in
+     the case of interfaces specified for a particular programming
+     language, one that is widely used among developers working in that
+     language.
+
+     The "System Libraries" of an executable work include anything,
+     other than the work as a whole, that (a) is included in the normal
+     form of packaging a Major Component, but which is not part of that
+     Major Component, and (b) serves only to enable use of the work
+     with that Major Component, or to implement a Standard Interface
+     for which an implementation is available to the public in source
+     code form.  A "Major Component", in this context, means a major
+     essential component (kernel, window system, and so on) of the
+     specific operating system (if any) on which the executable work
+     runs, or a compiler used to produce the work, or an object code
+     interpreter used to run it.
+
+     The "Corresponding Source" for a work in object code form means all
+     the source code needed to generate, install, and (for an executable
+     work) run the object code and to modify the work, including
+     scripts to control those activities.  However, it does not include
+     the work's System Libraries, or general-purpose tools or generally
+     available free programs which are used unmodified in performing
+     those activities but which are not part of the work.  For example,
+     Corresponding Source includes interface definition files
+     associated with source files for the work, and the source code for
+     shared libraries and dynamically linked subprograms that the work
+     is specifically designed to require, such as by intimate data
+     communication or control flow between those subprograms and other
+     parts of the work.
+
+     The Corresponding Source need not include anything that users can
+     regenerate automatically from other parts of the Corresponding
+     Source.
+
+     The Corresponding Source for a work in source code form is that
+     same work.
+
+  2. Basic Permissions.
+
+     All rights granted under this License are granted for the term of
+     copyright on the Program, and are irrevocable provided the stated
+     conditions are met.  This License explicitly affirms your unlimited
+     permission to run the unmodified Program.  The output from running
+     a covered work is covered by this License only if the output,
+     given its content, constitutes a covered work.  This License
+     acknowledges your rights of fair use or other equivalent, as
+     provided by copyright law.
+
+     You may make, run and propagate covered works that you do not
+     convey, without conditions so long as your license otherwise
+     remains in force.  You may convey covered works to others for the
+     sole purpose of having them make modifications exclusively for
+     you, or provide you with facilities for running those works,
+     provided that you comply with the terms of this License in
+     conveying all material for which you do not control copyright.
+     Those thus making or running the covered works for you must do so
+     exclusively on your behalf, under your direction and control, on
+     terms that prohibit them from making any copies of your
+     copyrighted material outside their relationship with you.
+
+     Conveying under any other circumstances is permitted solely under
+     the conditions stated below.  Sublicensing is not allowed; section
+     10 makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+     No covered work shall be deemed part of an effective technological
+     measure under any applicable law fulfilling obligations under
+     article 11 of the WIPO copyright treaty adopted on 20 December
+     1996, or similar laws prohibiting or restricting circumvention of
+     such measures.
+
+     When you convey a covered work, you waive any legal power to forbid
+     circumvention of technological measures to the extent such
+     circumvention is effected by exercising rights under this License
+     with respect to the covered work, and you disclaim any intention
+     to limit operation or modification of the work as a means of
+     enforcing, against the work's users, your or third parties' legal
+     rights to forbid circumvention of technological measures.
+
+  4. Conveying Verbatim Copies.
+
+     You may convey verbatim copies of the Program's source code as you
+     receive it, in any medium, provided that you conspicuously and
+     appropriately publish on each copy an appropriate copyright notice;
+     keep intact all notices stating that this License and any
+     non-permissive terms added in accord with section 7 apply to the
+     code; keep intact all notices of the absence of any warranty; and
+     give all recipients a copy of this License along with the Program.
+
+     You may charge any price or no price for each copy that you convey,
+     and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+     You may convey a work based on the Program, or the modifications to
+     produce it from the Program, in the form of source code under the
+     terms of section 4, provided that you also meet all of these
+     conditions:
+
+       a. The work must carry prominent notices stating that you
+          modified it, and giving a relevant date.
+
+       b. The work must carry prominent notices stating that it is
+          released under this License and any conditions added under
+          section 7.  This requirement modifies the requirement in
+          section 4 to "keep intact all notices".
+
+       c. You must license the entire work, as a whole, under this
+          License to anyone who comes into possession of a copy.  This
+          License will therefore apply, along with any applicable
+          section 7 additional terms, to the whole of the work, and all
+          its parts, regardless of how they are packaged.  This License
+          gives no permission to license the work in any other way, but
+          it does not invalidate such permission if you have separately
+          received it.
+
+       d. If the work has interactive user interfaces, each must display
+          Appropriate Legal Notices; however, if the Program has
+          interactive interfaces that do not display Appropriate Legal
+          Notices, your work need not make them do so.
+
+     A compilation of a covered work with other separate and independent
+     works, which are not by their nature extensions of the covered
+     work, and which are not combined with it such as to form a larger
+     program, in or on a volume of a storage or distribution medium, is
+     called an "aggregate" if the compilation and its resulting
+     copyright are not used to limit the access or legal rights of the
+     compilation's users beyond what the individual works permit.
+     Inclusion of a covered work in an aggregate does not cause this
+     License to apply to the other parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+     You may convey a covered work in object code form under the terms
+     of sections 4 and 5, provided that you also convey the
+     machine-readable Corresponding Source under the terms of this
+     License, in one of these ways:
+
+       a. Convey the object code in, or embodied in, a physical product
+          (including a physical distribution medium), accompanied by the
+          Corresponding Source fixed on a durable physical medium
+          customarily used for software interchange.
+
+       b. Convey the object code in, or embodied in, a physical product
+          (including a physical distribution medium), accompanied by a
+          written offer, valid for at least three years and valid for
+          as long as you offer spare parts or customer support for that
+          product model, to give anyone who possesses the object code
+          either (1) a copy of the Corresponding Source for all the
+          software in the product that is covered by this License, on a
+          durable physical medium customarily used for software
+          interchange, for a price no more than your reasonable cost of
+          physically performing this conveying of source, or (2) access
+          to copy the Corresponding Source from a network server at no
+          charge.
+
+       c. Convey individual copies of the object code with a copy of
+          the written offer to provide the Corresponding Source.  This
+          alternative is allowed only occasionally and noncommercially,
+          and only if you received the object code with such an offer,
+          in accord with subsection 6b.
+
+       d. Convey the object code by offering access from a designated
+          place (gratis or for a charge), and offer equivalent access
+          to the Corresponding Source in the same way through the same
+          place at no further charge.  You need not require recipients
+          to copy the Corresponding Source along with the object code.
+          If the place to copy the object code is a network server, the
+          Corresponding Source may be on a different server (operated
+          by you or a third party) that supports equivalent copying
+          facilities, provided you maintain clear directions next to
+          the object code saying where to find the Corresponding Source.
+          Regardless of what server hosts the Corresponding Source, you
+          remain obligated to ensure that it is available for as long
+          as needed to satisfy these requirements.
+
+       e. Convey the object code using peer-to-peer transmission,
+          provided you inform other peers where the object code and
+          Corresponding Source of the work are being offered to the
+          general public at no charge under subsection 6d.
+
+
+     A separable portion of the object code, whose source code is
+     excluded from the Corresponding Source as a System Library, need
+     not be included in conveying the object code work.
+
+     A "User Product" is either (1) a "consumer product", which means
+     any tangible personal property which is normally used for personal,
+     family, or household purposes, or (2) anything designed or sold for
+     incorporation into a dwelling.  In determining whether a product
+     is a consumer product, doubtful cases shall be resolved in favor of
+     coverage.  For a particular product received by a particular user,
+     "normally used" refers to a typical or common use of that class of
+     product, regardless of the status of the particular user or of the
+     way in which the particular user actually uses, or expects or is
+     expected to use, the product.  A product is a consumer product
+     regardless of whether the product has substantial commercial,
+     industrial or non-consumer uses, unless such uses represent the
+     only significant mode of use of the product.
+
+     "Installation Information" for a User Product means any methods,
+     procedures, authorization keys, or other information required to
+     install and execute modified versions of a covered work in that
+     User Product from a modified version of its Corresponding Source.
+     The information must suffice to ensure that the continued
+     functioning of the modified object code is in no case prevented or
+     interfered with solely because modification has been made.
+
+     If you convey an object code work under this section in, or with,
+     or specifically for use in, a User Product, and the conveying
+     occurs as part of a transaction in which the right of possession
+     and use of the User Product is transferred to the recipient in
+     perpetuity or for a fixed term (regardless of how the transaction
+     is characterized), the Corresponding Source conveyed under this
+     section must be accompanied by the Installation Information.  But
+     this requirement does not apply if neither you nor any third party
+     retains the ability to install modified object code on the User
+     Product (for example, the work has been installed in ROM).
+
+     The requirement to provide Installation Information does not
+     include a requirement to continue to provide support service,
+     warranty, or updates for a work that has been modified or
+     installed by the recipient, or for the User Product in which it
+     has been modified or installed.  Access to a network may be denied
+     when the modification itself materially and adversely affects the
+     operation of the network or violates the rules and protocols for
+     communication across the network.
+
+     Corresponding Source conveyed, and Installation Information
+     provided, in accord with this section must be in a format that is
+     publicly documented (and with an implementation available to the
+     public in source code form), and must require no special password
+     or key for unpacking, reading or copying.
+
+  7. Additional Terms.
+
+     "Additional permissions" are terms that supplement the terms of
+     this License by making exceptions from one or more of its
+     conditions.  Additional permissions that are applicable to the
+     entire Program shall be treated as though they were included in
+     this License, to the extent that they are valid under applicable
+     law.  If additional permissions apply only to part of the Program,
+     that part may be used separately under those permissions, but the
+     entire Program remains governed by this License without regard to
+     the additional permissions.
+
+     When you convey a copy of a covered work, you may at your option
+     remove any additional permissions from that copy, or from any part
+     of it.  (Additional permissions may be written to require their own
+     removal in certain cases when you modify the work.)  You may place
+     additional permissions on material, added by you to a covered work,
+     for which you have or can give appropriate copyright permission.
+
+     Notwithstanding any other provision of this License, for material
+     you add to a covered work, you may (if authorized by the copyright
+     holders of that material) supplement the terms of this License
+     with terms:
+
+       a. Disclaiming warranty or limiting liability differently from
+          the terms of sections 15 and 16 of this License; or
+
+       b. Requiring preservation of specified reasonable legal notices
+          or author attributions in that material or in the Appropriate
+          Legal Notices displayed by works containing it; or
+
+       c. Prohibiting misrepresentation of the origin of that material,
+          or requiring that modified versions of such material be
+          marked in reasonable ways as different from the original
+          version; or
+
+       d. Limiting the use for publicity purposes of names of licensors
+          or authors of the material; or
+
+       e. Declining to grant rights under trademark law for use of some
+          trade names, trademarks, or service marks; or
+
+       f. Requiring indemnification of licensors and authors of that
+          material by anyone who conveys the material (or modified
+          versions of it) with contractual assumptions of liability to
+          the recipient, for any liability that these contractual
+          assumptions directly impose on those licensors and authors.
+
+     All other non-permissive additional terms are considered "further
+     restrictions" within the meaning of section 10.  If the Program as
+     you received it, or any part of it, contains a notice stating that
+     it is governed by this License along with a term that is a further
+     restriction, you may remove that term.  If a license document
+     contains a further restriction but permits relicensing or
+     conveying under this License, you may add to a covered work
+     material governed by the terms of that license document, provided
+     that the further restriction does not survive such relicensing or
+     conveying.
+
+     If you add terms to a covered work in accord with this section, you
+     must place, in the relevant source files, a statement of the
+     additional terms that apply to those files, or a notice indicating
+     where to find the applicable terms.
+
+     Additional terms, permissive or non-permissive, may be stated in
+     the form of a separately written license, or stated as exceptions;
+     the above requirements apply either way.
+
+  8. Termination.
+
+     You may not propagate or modify a covered work except as expressly
+     provided under this License.  Any attempt otherwise to propagate or
+     modify it is void, and will automatically terminate your rights
+     under this License (including any patent licenses granted under
+     the third paragraph of section 11).
+
+     However, if you cease all violation of this License, then your
+     license from a particular copyright holder is reinstated (a)
+     provisionally, unless and until the copyright holder explicitly
+     and finally terminates your license, and (b) permanently, if the
+     copyright holder fails to notify you of the violation by some
+     reasonable means prior to 60 days after the cessation.
+
+     Moreover, your license from a particular copyright holder is
+     reinstated permanently if the copyright holder notifies you of the
+     violation by some reasonable means, this is the first time you have
+     received notice of violation of this License (for any work) from
+     that copyright holder, and you cure the violation prior to 30 days
+     after your receipt of the notice.
+
+     Termination of your rights under this section does not terminate
+     the licenses of parties who have received copies or rights from
+     you under this License.  If your rights have been terminated and
+     not permanently reinstated, you do not qualify to receive new
+     licenses for the same material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+     You are not required to accept this License in order to receive or
+     run a copy of the Program.  Ancillary propagation of a covered work
+     occurring solely as a consequence of using peer-to-peer
+     transmission to receive a copy likewise does not require
+     acceptance.  However, nothing other than this License grants you
+     permission to propagate or modify any covered work.  These actions
+     infringe copyright if you do not accept this License.  Therefore,
+     by modifying or propagating a covered work, you indicate your
+     acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+     Each time you convey a covered work, the recipient automatically
+     receives a license from the original licensors, to run, modify and
+     propagate that work, subject to this License.  You are not
+     responsible for enforcing compliance by third parties with this
+     License.
+
+     An "entity transaction" is a transaction transferring control of an
+     organization, or substantially all assets of one, or subdividing an
+     organization, or merging organizations.  If propagation of a
+     covered work results from an entity transaction, each party to that
+     transaction who receives a copy of the work also receives whatever
+     licenses to the work the party's predecessor in interest had or
+     could give under the previous paragraph, plus a right to
+     possession of the Corresponding Source of the work from the
+     predecessor in interest, if the predecessor has it or can get it
+     with reasonable efforts.
+
+     You may not impose any further restrictions on the exercise of the
+     rights granted or affirmed under this License.  For example, you
+     may not impose a license fee, royalty, or other charge for
+     exercise of rights granted under this License, and you may not
+     initiate litigation (including a cross-claim or counterclaim in a
+     lawsuit) alleging that any patent claim is infringed by making,
+     using, selling, offering for sale, or importing the Program or any
+     portion of it.
+
+ 11. Patents.
+
+     A "contributor" is a copyright holder who authorizes use under this
+     License of the Program or a work on which the Program is based.
+     The work thus licensed is called the contributor's "contributor
+     version".
+
+     A contributor's "essential patent claims" are all patent claims
+     owned or controlled by the contributor, whether already acquired or
+     hereafter acquired, that would be infringed by some manner,
+     permitted by this License, of making, using, or selling its
+     contributor version, but do not include claims that would be
+     infringed only as a consequence of further modification of the
+     contributor version.  For purposes of this definition, "control"
+     includes the right to grant patent sublicenses in a manner
+     consistent with the requirements of this License.
+
+     Each contributor grants you a non-exclusive, worldwide,
+     royalty-free patent license under the contributor's essential
+     patent claims, to make, use, sell, offer for sale, import and
+     otherwise run, modify and propagate the contents of its
+     contributor version.
+
+     In the following three paragraphs, a "patent license" is any
+     express agreement or commitment, however denominated, not to
+     enforce a patent (such as an express permission to practice a
+     patent or covenant not to sue for patent infringement).  To
+     "grant" such a patent license to a party means to make such an
+     agreement or commitment not to enforce a patent against the party.
+
+     If you convey a covered work, knowingly relying on a patent
+     license, and the Corresponding Source of the work is not available
+     for anyone to copy, free of charge and under the terms of this
+     License, through a publicly available network server or other
+     readily accessible means, then you must either (1) cause the
+     Corresponding Source to be so available, or (2) arrange to deprive
+     yourself of the benefit of the patent license for this particular
+     work, or (3) arrange, in a manner consistent with the requirements
+     of this License, to extend the patent license to downstream
+     recipients.  "Knowingly relying" means you have actual knowledge
+     that, but for the patent license, your conveying the covered work
+     in a country, or your recipient's use of the covered work in a
+     country, would infringe one or more identifiable patents in that
+     country that you have reason to believe are valid.
+
+     If, pursuant to or in connection with a single transaction or
+     arrangement, you convey, or propagate by procuring conveyance of, a
+     covered work, and grant a patent license to some of the parties
+     receiving the covered work authorizing them to use, propagate,
+     modify or convey a specific copy of the covered work, then the
+     patent license you grant is automatically extended to all
+     recipients of the covered work and works based on it.
+
+     A patent license is "discriminatory" if it does not include within
+     the scope of its coverage, prohibits the exercise of, or is
+     conditioned on the non-exercise of one or more of the rights that
+     are specifically granted under this License.  You may not convey a
+     covered work if you are a party to an arrangement with a third
+     party that is in the business of distributing software, under
+     which you make payment to the third party based on the extent of
+     your activity of conveying the work, and under which the third
+     party grants, to any of the parties who would receive the covered
+     work from you, a discriminatory patent license (a) in connection
+     with copies of the covered work conveyed by you (or copies made
+     from those copies), or (b) primarily for and in connection with
+     specific products or compilations that contain the covered work,
+     unless you entered into that arrangement, or that patent license
+     was granted, prior to 28 March 2007.
+
+     Nothing in this License shall be construed as excluding or limiting
+     any implied license or other defenses to infringement that may
+     otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+     If conditions are imposed on you (whether by court order,
+     agreement or otherwise) that contradict the conditions of this
+     License, they do not excuse you from the conditions of this
+     License.  If you cannot convey a covered work so as to satisfy
+     simultaneously your obligations under this License and any other
+     pertinent obligations, then as a consequence you may not convey it
+     at all.  For example, if you agree to terms that obligate you to
+     collect a royalty for further conveying from those to whom you
+     convey the Program, the only way you could satisfy both those
+     terms and this License would be to refrain entirely from conveying
+     the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+     Notwithstanding any other provision of this License, you have
+     permission to link or combine any covered work with a work licensed
+     under version 3 of the GNU Affero General Public License into a
+     single combined work, and to convey the resulting work.  The terms
+     of this License will continue to apply to the part which is the
+     covered work, but the special requirements of the GNU Affero
+     General Public License, section 13, concerning interaction through
+     a network will apply to the combination as such.
+
+ 14. Revised Versions of this License.
+
+     The Free Software Foundation may publish revised and/or new
+     versions of the GNU 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.
+
+     Each version is given a distinguishing version number.  If the
+     Program specifies that a certain numbered version of the GNU
+     General Public License "or any later version" applies to it, you
+     have the option of following the terms and conditions either of
+     that numbered version or of any later version published by the
+     Free Software Foundation.  If the Program does not specify a
+     version number of the GNU General Public License, you may choose
+     any version ever published by the Free Software Foundation.
+
+     If the Program specifies that a proxy can decide which future
+     versions of the GNU General Public License can be used, that
+     proxy's public statement of acceptance of a version permanently
+     authorizes you to choose that version for the Program.
+
+     Later license versions may give you additional or different
+     permissions.  However, no additional obligations are imposed on any
+     author or copyright holder as a result of your choosing to follow a
+     later version.
+
+ 15. Disclaimer of Warranty.
+
+     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+     APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE
+     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
+     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE
+     RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
+     SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+     NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
+     AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
+     FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+     CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
+     THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
+     BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+     PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
+     THE POSSIBILITY OF SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+     If the disclaimer of warranty and limitation of liability provided
+     above cannot be given local legal effect according to their terms,
+     reviewing courts shall apply local law that most closely
+     approximates an absolute waiver of all civil liability in
+     connection with the Program, unless a warranty or assumption of
+     liability accompanies a copy of the Program in return for a fee.
+
+
+END OF TERMS AND CONDITIONS
+===========================
+
+How to Apply These Terms to Your New Programs
+=============================================
+
+If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+   To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
+     Copyright (C) YEAR NAME OF AUTHOR
+
+     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 3 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, see `http://www.gnu.org/licenses/'.
+
+   Also add information on how to contact you by electronic and paper
+mail.
+
+   If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+     PROGRAM Copyright (C) YEAR NAME OF AUTHOR
+     This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+     This is free software, and you are welcome to redistribute it
+     under certain conditions; type `show c' for details.
+
+   The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License.  Of course, your
+program's commands might be different; for a GUI interface, you would
+use an "about box".
+
+   You should also get your employer (if you work as a programmer) or
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  For more information on this, and how to apply and follow
+the GNU GPL, see `http://www.gnu.org/licenses/'.
+
+   The GNU General Public License does not permit incorporating your
+program into proprietary programs.  If your program is a subroutine
+library, you may consider it more useful to permit linking proprietary
+applications with the library.  If this is what you want to do, use the
+GNU Lesser General Public License instead of this License.  But first,
+please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.
+
diff --git a/gdb/doc/gdb.info-6 b/gdb/doc/gdb.info-6
new file mode 100644
index 0000000..3e73bb4
--- /dev/null
+++ b/gdb/doc/gdb.info-6
@@ -0,0 +1,4145 @@
+This is gdb.info, produced by makeinfo version 4.8 from ./gdb.texinfo.
+
+INFO-DIR-SECTION Software development
+START-INFO-DIR-ENTRY
+* Gdb: (gdb).                     The GNU debugger.
+END-INFO-DIR-ENTRY
+
+   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+2010 2011, 2012 Free Software Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "Free Software" and "Free Software Needs Free
+Documentation", with the Front-Cover Texts being "A GNU Manual," and
+with the Back-Cover Texts as in (a) below.
+
+   (a) The FSF's Back-Cover Text is: "You are free to copy and modify
+this GNU Manual.  Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom."
+
+   This file documents the GNU debugger GDB.
+
+   This is the Tenth Edition, of `Debugging with GDB: the GNU
+Source-Level Debugger' for GDB (GDB) Version 7.5.
+
+   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+2010 2011, 2012 Free Software Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "Free Software" and "Free Software Needs Free
+Documentation", with the Front-Cover Texts being "A GNU Manual," and
+with the Back-Cover Texts as in (a) below.
+
+   (a) The FSF's Back-Cover Text is: "You are free to copy and modify
+this GNU Manual.  Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom."
+
+
+File: gdb.info,  Node: GNU Free Documentation License,  Next: Concept Index,  Prev: Copying,  Up: Top
+
+Appendix L GNU Free Documentation License
+*****************************************
+
+                     Version 1.3, 3 November 2008
+
+     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+     `http://fsf.org/'
+
+     Everyone is permitted to copy and distribute verbatim copies
+     of this license document, but changing it is not allowed.
+
+  0. PREAMBLE
+
+     The purpose of this License is to make a manual, textbook, or other
+     functional and useful document "free" in the sense of freedom: to
+     assure everyone the effective freedom to copy and redistribute it,
+     with or without modifying it, either commercially or
+     noncommercially.  Secondarily, this License preserves for the
+     author and publisher a way to get credit for their work, while not
+     being considered responsible for modifications made by others.
+
+     This License is a kind of "copyleft", which means that derivative
+     works of the document must themselves be free in the same sense.
+     It complements the GNU General Public License, which is a copyleft
+     license designed for free software.
+
+     We have designed this License in order to use it for manuals for
+     free software, because free software needs free documentation: a
+     free program should come with manuals providing the same freedoms
+     that the software does.  But this License is not limited to
+     software manuals; it can be used for any textual work, regardless
+     of subject matter or whether it is published as a printed book.
+     We recommend this License principally for works whose purpose is
+     instruction or reference.
+
+  1. APPLICABILITY AND DEFINITIONS
+
+     This License applies to any manual or other work, in any medium,
+     that contains a notice placed by the copyright holder saying it
+     can be distributed under the terms of this License.  Such a notice
+     grants a world-wide, royalty-free license, unlimited in duration,
+     to use that work under the conditions stated herein.  The
+     "Document", below, refers to any such manual or work.  Any member
+     of the public is a licensee, and is addressed as "you".  You
+     accept the license if you copy, modify or distribute the work in a
+     way requiring permission under copyright law.
+
+     A "Modified Version" of the Document means any work containing the
+     Document or a portion of it, either copied verbatim, or with
+     modifications and/or translated into another language.
+
+     A "Secondary Section" is a named appendix or a front-matter section
+     of the Document that deals exclusively with the relationship of the
+     publishers or authors of the Document to the Document's overall
+     subject (or to related matters) and contains nothing that could
+     fall directly within that overall subject.  (Thus, if the Document
+     is in part a textbook of mathematics, a Secondary Section may not
+     explain any mathematics.)  The relationship could be a matter of
+     historical connection with the subject or with related matters, or
+     of legal, commercial, philosophical, ethical or political position
+     regarding them.
+
+     The "Invariant Sections" are certain Secondary Sections whose
+     titles are designated, as being those of Invariant Sections, in
+     the notice that says that the Document is released under this
+     License.  If a section does not fit the above definition of
+     Secondary then it is not allowed to be designated as Invariant.
+     The Document may contain zero Invariant Sections.  If the Document
+     does not identify any Invariant Sections then there are none.
+
+     The "Cover Texts" are certain short passages of text that are
+     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+     that says that the Document is released under this License.  A
+     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+     be at most 25 words.
+
+     A "Transparent" copy of the Document means a machine-readable copy,
+     represented in a format whose specification is available to the
+     general public, that is suitable for revising the document
+     straightforwardly with generic text editors or (for images
+     composed of pixels) generic paint programs or (for drawings) some
+     widely available drawing editor, and that is suitable for input to
+     text formatters or for automatic translation to a variety of
+     formats suitable for input to text formatters.  A copy made in an
+     otherwise Transparent file format whose markup, or absence of
+     markup, has been arranged to thwart or discourage subsequent
+     modification by readers is not Transparent.  An image format is
+     not Transparent if used for any substantial amount of text.  A
+     copy that is not "Transparent" is called "Opaque".
+
+     Examples of suitable formats for Transparent copies include plain
+     ASCII without markup, Texinfo input format, LaTeX input format,
+     SGML or XML using a publicly available DTD, and
+     standard-conforming simple HTML, PostScript or PDF designed for
+     human modification.  Examples of transparent image formats include
+     PNG, XCF and JPG.  Opaque formats include proprietary formats that
+     can be read and edited only by proprietary word processors, SGML or
+     XML for which the DTD and/or processing tools are not generally
+     available, and the machine-generated HTML, PostScript or PDF
+     produced by some word processors for output purposes only.
+
+     The "Title Page" means, for a printed book, the title page itself,
+     plus such following pages as are needed to hold, legibly, the
+     material this License requires to appear in the title page.  For
+     works in formats which do not have any title page as such, "Title
+     Page" means the text near the most prominent appearance of the
+     work's title, preceding the beginning of the body of the text.
+
+     The "publisher" means any person or entity that distributes copies
+     of the Document to the public.
+
+     A section "Entitled XYZ" means a named subunit of the Document
+     whose title either is precisely XYZ or contains XYZ in parentheses
+     following text that translates XYZ in another language.  (Here XYZ
+     stands for a specific section name mentioned below, such as
+     "Acknowledgements", "Dedications", "Endorsements", or "History".)
+     To "Preserve the Title" of such a section when you modify the
+     Document means that it remains a section "Entitled XYZ" according
+     to this definition.
+
+     The Document may include Warranty Disclaimers next to the notice
+     which states that this License applies to the Document.  These
+     Warranty Disclaimers are considered to be included by reference in
+     this License, but only as regards disclaiming warranties: any other
+     implication that these Warranty Disclaimers may have is void and
+     has no effect on the meaning of this License.
+
+  2. VERBATIM COPYING
+
+     You may copy and distribute the Document in any medium, either
+     commercially or noncommercially, provided that this License, the
+     copyright notices, and the license notice saying this License
+     applies to the Document are reproduced in all copies, and that you
+     add no other conditions whatsoever to those of this License.  You
+     may not use technical measures to obstruct or control the reading
+     or further copying of the copies you make or distribute.  However,
+     you may accept compensation in exchange for copies.  If you
+     distribute a large enough number of copies you must also follow
+     the conditions in section 3.
+
+     You may also lend copies, under the same conditions stated above,
+     and you may publicly display copies.
+
+  3. COPYING IN QUANTITY
+
+     If you publish printed copies (or copies in media that commonly
+     have printed covers) of the Document, numbering more than 100, and
+     the Document's license notice requires Cover Texts, you must
+     enclose the copies in covers that carry, clearly and legibly, all
+     these Cover Texts: Front-Cover Texts on the front cover, and
+     Back-Cover Texts on the back cover.  Both covers must also clearly
+     and legibly identify you as the publisher of these copies.  The
+     front cover must present the full title with all words of the
+     title equally prominent and visible.  You may add other material
+     on the covers in addition.  Copying with changes limited to the
+     covers, as long as they preserve the title of the Document and
+     satisfy these conditions, can be treated as verbatim copying in
+     other respects.
+
+     If the required texts for either cover are too voluminous to fit
+     legibly, you should put the first ones listed (as many as fit
+     reasonably) on the actual cover, and continue the rest onto
+     adjacent pages.
+
+     If you publish or distribute Opaque copies of the Document
+     numbering more than 100, you must either include a
+     machine-readable Transparent copy along with each Opaque copy, or
+     state in or with each Opaque copy a computer-network location from
+     which the general network-using public has access to download
+     using public-standard network protocols a complete Transparent
+     copy of the Document, free of added material.  If you use the
+     latter option, you must take reasonably prudent steps, when you
+     begin distribution of Opaque copies in quantity, to ensure that
+     this Transparent copy will remain thus accessible at the stated
+     location until at least one year after the last time you
+     distribute an Opaque copy (directly or through your agents or
+     retailers) of that edition to the public.
+
+     It is requested, but not required, that you contact the authors of
+     the Document well before redistributing any large number of
+     copies, to give them a chance to provide you with an updated
+     version of the Document.
+
+  4. MODIFICATIONS
+
+     You may copy and distribute a Modified Version of the Document
+     under the conditions of sections 2 and 3 above, provided that you
+     release the Modified Version under precisely this License, with
+     the Modified Version filling the role of the Document, thus
+     licensing distribution and modification of the Modified Version to
+     whoever possesses a copy of it.  In addition, you must do these
+     things in the Modified Version:
+
+       A. Use in the Title Page (and on the covers, if any) a title
+          distinct from that of the Document, and from those of
+          previous versions (which should, if there were any, be listed
+          in the History section of the Document).  You may use the
+          same title as a previous version if the original publisher of
+          that version gives permission.
+
+       B. List on the Title Page, as authors, one or more persons or
+          entities responsible for authorship of the modifications in
+          the Modified Version, together with at least five of the
+          principal authors of the Document (all of its principal
+          authors, if it has fewer than five), unless they release you
+          from this requirement.
+
+       C. State on the Title page the name of the publisher of the
+          Modified Version, as the publisher.
+
+       D. Preserve all the copyright notices of the Document.
+
+       E. Add an appropriate copyright notice for your modifications
+          adjacent to the other copyright notices.
+
+       F. Include, immediately after the copyright notices, a license
+          notice giving the public permission to use the Modified
+          Version under the terms of this License, in the form shown in
+          the Addendum below.
+
+       G. Preserve in that license notice the full lists of Invariant
+          Sections and required Cover Texts given in the Document's
+          license notice.
+
+       H. Include an unaltered copy of this License.
+
+       I. Preserve the section Entitled "History", Preserve its Title,
+          and add to it an item stating at least the title, year, new
+          authors, and publisher of the Modified Version as given on
+          the Title Page.  If there is no section Entitled "History" in
+          the Document, create one stating the title, year, authors,
+          and publisher of the Document as given on its Title Page,
+          then add an item describing the Modified Version as stated in
+          the previous sentence.
+
+       J. Preserve the network location, if any, given in the Document
+          for public access to a Transparent copy of the Document, and
+          likewise the network locations given in the Document for
+          previous versions it was based on.  These may be placed in
+          the "History" section.  You may omit a network location for a
+          work that was published at least four years before the
+          Document itself, or if the original publisher of the version
+          it refers to gives permission.
+
+       K. For any section Entitled "Acknowledgements" or "Dedications",
+          Preserve the Title of the section, and preserve in the
+          section all the substance and tone of each of the contributor
+          acknowledgements and/or dedications given therein.
+
+       L. Preserve all the Invariant Sections of the Document,
+          unaltered in their text and in their titles.  Section numbers
+          or the equivalent are not considered part of the section
+          titles.
+
+       M. Delete any section Entitled "Endorsements".  Such a section
+          may not be included in the Modified Version.
+
+       N. Do not retitle any existing section to be Entitled
+          "Endorsements" or to conflict in title with any Invariant
+          Section.
+
+       O. Preserve any Warranty Disclaimers.
+
+     If the Modified Version includes new front-matter sections or
+     appendices that qualify as Secondary Sections and contain no
+     material copied from the Document, you may at your option
+     designate some or all of these sections as invariant.  To do this,
+     add their titles to the list of Invariant Sections in the Modified
+     Version's license notice.  These titles must be distinct from any
+     other section titles.
+
+     You may add a section Entitled "Endorsements", provided it contains
+     nothing but endorsements of your Modified Version by various
+     parties--for example, statements of peer review or that the text
+     has been approved by an organization as the authoritative
+     definition of a standard.
+
+     You may add a passage of up to five words as a Front-Cover Text,
+     and a passage of up to 25 words as a Back-Cover Text, to the end
+     of the list of Cover Texts in the Modified Version.  Only one
+     passage of Front-Cover Text and one of Back-Cover Text may be
+     added by (or through arrangements made by) any one entity.  If the
+     Document already includes a cover text for the same cover,
+     previously added by you or by arrangement made by the same entity
+     you are acting on behalf of, you may not add another; but you may
+     replace the old one, on explicit permission from the previous
+     publisher that added the old one.
+
+     The author(s) and publisher(s) of the Document do not by this
+     License give permission to use their names for publicity for or to
+     assert or imply endorsement of any Modified Version.
+
+  5. COMBINING DOCUMENTS
+
+     You may combine the Document with other documents released under
+     this License, under the terms defined in section 4 above for
+     modified versions, provided that you include in the combination
+     all of the Invariant Sections of all of the original documents,
+     unmodified, and list them all as Invariant Sections of your
+     combined work in its license notice, and that you preserve all
+     their Warranty Disclaimers.
+
+     The combined work need only contain one copy of this License, and
+     multiple identical Invariant Sections may be replaced with a single
+     copy.  If there are multiple Invariant Sections with the same name
+     but different contents, make the title of each such section unique
+     by adding at the end of it, in parentheses, the name of the
+     original author or publisher of that section if known, or else a
+     unique number.  Make the same adjustment to the section titles in
+     the list of Invariant Sections in the license notice of the
+     combined work.
+
+     In the combination, you must combine any sections Entitled
+     "History" in the various original documents, forming one section
+     Entitled "History"; likewise combine any sections Entitled
+     "Acknowledgements", and any sections Entitled "Dedications".  You
+     must delete all sections Entitled "Endorsements."
+
+  6. COLLECTIONS OF DOCUMENTS
+
+     You may make a collection consisting of the Document and other
+     documents released under this License, and replace the individual
+     copies of this License in the various documents with a single copy
+     that is included in the collection, provided that you follow the
+     rules of this License for verbatim copying of each of the
+     documents in all other respects.
+
+     You may extract a single document from such a collection, and
+     distribute it individually under this License, provided you insert
+     a copy of this License into the extracted document, and follow
+     this License in all other respects regarding verbatim copying of
+     that document.
+
+  7. AGGREGATION WITH INDEPENDENT WORKS
+
+     A compilation of the Document or its derivatives with other
+     separate and independent documents or works, in or on a volume of
+     a storage or distribution medium, is called an "aggregate" if the
+     copyright resulting from the compilation is not used to limit the
+     legal rights of the compilation's users beyond what the individual
+     works permit.  When the Document is included in an aggregate, this
+     License does not apply to the other works in the aggregate which
+     are not themselves derivative works of the Document.
+
+     If the Cover Text requirement of section 3 is applicable to these
+     copies of the Document, then if the Document is less than one half
+     of the entire aggregate, the Document's Cover Texts may be placed
+     on covers that bracket the Document within the aggregate, or the
+     electronic equivalent of covers if the Document is in electronic
+     form.  Otherwise they must appear on printed covers that bracket
+     the whole aggregate.
+
+  8. TRANSLATION
+
+     Translation is considered a kind of modification, so you may
+     distribute translations of the Document under the terms of section
+     4.  Replacing Invariant Sections with translations requires special
+     permission from their copyright holders, but you may include
+     translations of some or all Invariant Sections in addition to the
+     original versions of these Invariant Sections.  You may include a
+     translation of this License, and all the license notices in the
+     Document, and any Warranty Disclaimers, provided that you also
+     include the original English version of this License and the
+     original versions of those notices and disclaimers.  In case of a
+     disagreement between the translation and the original version of
+     this License or a notice or disclaimer, the original version will
+     prevail.
+
+     If a section in the Document is Entitled "Acknowledgements",
+     "Dedications", or "History", the requirement (section 4) to
+     Preserve its Title (section 1) will typically require changing the
+     actual title.
+
+  9. TERMINATION
+
+     You may not copy, modify, sublicense, or distribute the Document
+     except as expressly provided under this License.  Any attempt
+     otherwise to copy, modify, sublicense, or distribute it is void,
+     and will automatically terminate your rights under this License.
+
+     However, if you cease all violation of this License, then your
+     license from a particular copyright holder is reinstated (a)
+     provisionally, unless and until the copyright holder explicitly
+     and finally terminates your license, and (b) permanently, if the
+     copyright holder fails to notify you of the violation by some
+     reasonable means prior to 60 days after the cessation.
+
+     Moreover, your license from a particular copyright holder is
+     reinstated permanently if the copyright holder notifies you of the
+     violation by some reasonable means, this is the first time you have
+     received notice of violation of this License (for any work) from
+     that copyright holder, and you cure the violation prior to 30 days
+     after your receipt of the notice.
+
+     Termination of your rights under this section does not terminate
+     the licenses of parties who have received copies or rights from
+     you under this License.  If your rights have been terminated and
+     not permanently reinstated, receipt of a copy of some or all of
+     the same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+     The Free Software Foundation may publish new, revised versions of
+     the GNU Free Documentation 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.  See
+     `http://www.gnu.org/copyleft/'.
+
+     Each version of the License is given a distinguishing version
+     number.  If the Document specifies that a particular numbered
+     version of this License "or any later version" applies to it, you
+     have the option of following the terms and conditions either of
+     that specified version or of any later version that has been
+     published (not as a draft) by the Free Software Foundation.  If
+     the Document does not specify a version number of this License,
+     you may choose any version ever published (not as a draft) by the
+     Free Software Foundation.  If the Document specifies that a proxy
+     can decide which future versions of this License can be used, that
+     proxy's public statement of acceptance of a version permanently
+     authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+     World Wide Web server that publishes copyrightable works and also
+     provides prominent facilities for anybody to edit those works.  A
+     public wiki that anybody can edit is an example of such a server.
+     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+     site means any set of copyrightable works thus published on the MMC
+     site.
+
+     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+     license published by Creative Commons Corporation, a not-for-profit
+     corporation with a principal place of business in San Francisco,
+     California, as well as future copyleft versions of that license
+     published by that same organization.
+
+     "Incorporate" means to publish or republish a Document, in whole or
+     in part, as part of another Document.
+
+     An MMC is "eligible for relicensing" if it is licensed under this
+     License, and if all works that were first published under this
+     License somewhere other than this MMC, and subsequently
+     incorporated in whole or in part into the MMC, (1) had no cover
+     texts or invariant sections, and (2) were thus incorporated prior
+     to November 1, 2008.
+
+     The operator of an MMC Site may republish an MMC contained in the
+     site under CC-BY-SA on the same site at any time before August 1,
+     2009, provided the MMC is eligible for relicensing.
+
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+       Copyright (C)  YEAR  YOUR NAME.
+       Permission is granted to copy, distribute and/or modify this document
+       under the terms of the GNU Free Documentation License, Version 1.3
+       or any later version published by the Free Software Foundation;
+       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+       Texts.  A copy of the license is included in the section entitled ``GNU
+       Free Documentation License''.
+
+   If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+         with the Invariant Sections being LIST THEIR TITLES, with
+         the Front-Cover Texts being LIST, and with the Back-Cover Texts
+         being LIST.
+
+   If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+   If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License, to
+permit their use in free software.
+
+
+File: gdb.info,  Node: Concept Index,  Next: Command and Variable Index,  Prev: GNU Free Documentation License,  Up: Top
+
+Concept Index
+*************
+
+ [index ]
+* Menu:
+
+* ! packet:                              Packets.             (line  49)
+* "No symbol "foo" in current context":  Variables.           (line 110)
+* # in Modula-2:                         GDB/M2.              (line  18)
+* $:                                     Value History.       (line  13)
+* $$:                                    Value History.       (line  13)
+* $_ and info breakpoints:               Set Breaks.          (line 128)
+* $_ and info line:                      Machine Code.        (line  30)
+* $_, $__, and value history:            Memory.              (line 109)
+* --annotate:                            Mode Options.        (line 107)
+* --args:                                Mode Options.        (line 120)
+* --attach, gdbserver option:            Server.              (line  86)
+* --batch:                               Mode Options.        (line  23)
+* --batch-silent:                        Mode Options.        (line  41)
+* --baud:                                Mode Options.        (line 126)
+* --cd:                                  Mode Options.        (line  82)
+* --command:                             File Options.        (line  51)
+* --core:                                File Options.        (line  43)
+* --data-directory:                      Mode Options.        (line  86)
+* --debug, gdbserver option:             Server.              (line 166)
+* --directory:                           File Options.        (line  77)
+* --epoch:                               Mode Options.        (line 102)
+* --eval-command:                        File Options.        (line  57)
+* --exec:                                File Options.        (line  35)
+* --fullname:                            Mode Options.        (line  91)
+* --init-command:                        File Options.        (line  67)
+* --init-eval-command:                   File Options.        (line  72)
+* --interpreter:                         Mode Options.        (line 145)
+* --multi, gdbserver option:             Server.              (line 119)
+* --nowindows:                           Mode Options.        (line  72)
+* --nx:                                  Mode Options.        (line  11)
+* --once, gdbserver option:              Server.              (line 151)
+* --pid:                                 File Options.        (line  47)
+* --quiet:                               Mode Options.        (line  19)
+* --readnow:                             File Options.        (line  81)
+* --remote-debug, gdbserver option:      Server.              (line 167)
+* --return-child-result:                 Mode Options.        (line  53)
+* --se:                                  File Options.        (line  39)
+* --silent:                              Mode Options.        (line  19)
+* --statistics:                          Mode Options.        (line 162)
+* --symbols:                             File Options.        (line  31)
+* --tty:                                 Mode Options.        (line 135)
+* --tui:                                 Mode Options.        (line 138)
+* --version:                             Mode Options.        (line 166)
+* --windows:                             Mode Options.        (line  78)
+* --with-gdb-datadir:                    Data Files.          (line  19)
+* --with-relocated-sources:              Source Path.         (line  89)
+* --with-sysroot:                        Files.               (line 439)
+* --wrapper, gdbserver option:           Server.              (line 172)
+* --write:                               Mode Options.        (line 157)
+* -b:                                    Mode Options.        (line 126)
+* -c:                                    File Options.        (line  43)
+* -d:                                    File Options.        (line  77)
+* -e:                                    File Options.        (line  35)
+* -ex:                                   File Options.        (line  57)
+* -f:                                    Mode Options.        (line  91)
+* -iex:                                  File Options.        (line  72)
+* -ix:                                   File Options.        (line  67)
+* -l:                                    Mode Options.        (line 130)
+* -n:                                    Mode Options.        (line  11)
+* -nw:                                   Mode Options.        (line  72)
+* -p:                                    File Options.        (line  47)
+* -q:                                    Mode Options.        (line  19)
+* -r:                                    File Options.        (line  81)
+* -s:                                    File Options.        (line  31)
+* -t:                                    Mode Options.        (line 135)
+* -w:                                    Mode Options.        (line  78)
+* -x:                                    File Options.        (line  51)
+* ., Modula-2 scope operator:            M2 Scope.            (line   6)
+* .build-id directory:                   Separate Debug Files.
+                                                              (line   6)
+* .debug subdirectories:                 Separate Debug Files.
+                                                              (line   6)
+* .debug_gdb_scripts section:            dotdebug_gdb_scripts section.
+                                                              (line   6)
+* .gdb_index section:                    Index Files.         (line   6)
+* .gdb_index section format:             Index Section Format.
+                                                              (line   6)
+* .gdbinit:                              Startup.             (line  66)
+* .gnu_debuglink sections:               Separate Debug Files.
+                                                              (line  80)
+* .note.gnu.build-id sections:           Separate Debug Files.
+                                                              (line  98)
+* .o files, reading symbols from:        Files.               (line 132)
+* /proc:                                 SVR4 Process Information.
+                                                              (line   6)
+* <architecture>:                        Target Description Format.
+                                                              (line  73)
+* <compatible>:                          Target Description Format.
+                                                              (line  96)
+* <feature>:                             Target Description Format.
+                                                              (line 120)
+* <flags>:                               Target Description Format.
+                                                              (line 186)
+* <osabi>:                               Target Description Format.
+                                                              (line  83)
+* <reg>:                                 Target Description Format.
+                                                              (line 199)
+* <struct>:                              Target Description Format.
+                                                              (line 164)
+* <union>:                               Target Description Format.
+                                                              (line 154)
+* <vector>:                              Target Description Format.
+                                                              (line 147)
+* ? packet:                              Packets.             (line  58)
+* _NSPrintForDebugger, and printing Objective-C objects: The Print Command with Objective-C.
+                                                              (line  11)
+* A packet:                              Packets.             (line  65)
+* abbreviation:                          Command Syntax.      (line  13)
+* acknowledgment, for GDB remote:        Packet Acknowledgment.
+                                                              (line   6)
+* active targets:                        Active Targets.      (line   6)
+* Ada:                                   Ada.                 (line   6)
+* Ada exception catching:                Set Catchpoints.     (line  19)
+* Ada mode, general:                     Ada Mode Intro.      (line   6)
+* Ada task switching:                    Ada Tasks.           (line 115)
+* Ada tasking and core file debugging:   Ada Tasks and Core Files.
+                                                              (line   6)
+* Ada, deviations from:                  Additions to Ada.    (line   6)
+* Ada, omissions from:                   Omissions from Ada.  (line   6)
+* Ada, problems:                         Ada Glitches.        (line   6)
+* Ada, tasking:                          Ada Tasks.           (line   6)
+* add new commands for external monitor: Connecting.          (line 105)
+* address of a symbol:                   Symbols.             (line  44)
+* address size for remote targets:       Remote Configuration.
+                                                              (line  12)
+* ADP (Angel Debugger Protocol) logging: ARM.                 (line  89)
+* aggregates (Ada):                      Omissions from Ada.  (line  44)
+* AIX threads:                           Debugging Output.    (line  28)
+* aliases for commands:                  Aliases.             (line   6)
+* alignment of remote memory accesses:   Packets.             (line 235)
+* all-stop mode:                         All-Stop Mode.       (line   6)
+* Alpha stack:                           MIPS.                (line   6)
+* ambiguous expressions:                 Ambiguous Expressions.
+                                                              (line   6)
+* annotations:                           Annotations Overview.
+                                                              (line   6)
+* annotations for errors, warnings and interrupts: Errors.    (line   6)
+* annotations for invalidation messages: Invalidation.        (line   6)
+* annotations for prompts:               Prompting.           (line   6)
+* annotations for running programs:      Annotations for Running.
+                                                              (line   6)
+* annotations for source display:        Source Annotations.  (line   6)
+* append data to a file:                 Dump/Restore Files.  (line   6)
+* apply command to several threads:      Threads.             (line 122)
+* architecture debugging info:           Debugging Output.    (line  18)
+* argument count in user-defined commands: Define.            (line  25)
+* arguments (to your program):           Arguments.           (line   6)
+* arguments, to gdbserver:               Server.              (line  34)
+* arguments, to user-defined commands:   Define.              (line   6)
+* ARM 32-bit mode:                       ARM.                 (line  25)
+* ARM RDI:                               ARM.                 (line   6)
+* array aggregates (Ada):                Omissions from Ada.  (line  44)
+* arrays:                                Arrays.              (line   6)
+* arrays in expressions:                 Expressions.         (line  14)
+* artificial array:                      Arrays.              (line   6)
+* assembly instructions:                 Machine Code.        (line  36)
+* assignment:                            Assignment.          (line   6)
+* async output in GDB/MI:                GDB/MI Output Syntax.
+                                                              (line  98)
+* async records in GDB/MI:               GDB/MI Async Records.
+                                                              (line   6)
+* asynchronous execution:                Background Execution.
+                                                              (line   6)
+* asynchronous execution, and process record and replay: Process Record and Replay.
+                                                              (line  52)
+* AT&T disassembly flavor:               Machine Code.        (line 127)
+* attach:                                Attach.              (line   6)
+* attach to a program, gdbserver:        Server.              (line  86)
+* auto-loading:                          Auto-loading.        (line   6)
+* auto-loading init file in the current directory: Init File in the Current Directory.
+                                                              (line   6)
+* auto-loading libthread_db.so.1:        libthread_db.so.1 file.
+                                                              (line   6)
+* auto-loading OBJFILE-gdb.gdb:          objfile-gdb.gdb file.
+                                                              (line   6)
+* auto-loading safe-path:                Auto-loading safe path.
+                                                              (line   6)
+* auto-loading verbose mode:             Auto-loading verbose mode.
+                                                              (line   6)
+* auto-retry, for remote TCP target:     Remote Configuration.
+                                                              (line 117)
+* automatic display:                     Auto Display.        (line   6)
+* automatic hardware breakpoints:        Set Breaks.          (line 297)
+* automatic overlay debugging:           Automatic Overlay Debugging.
+                                                              (line   6)
+* automatic thread selection:            All-Stop Mode.       (line  28)
+* auxiliary vector:                      OS Information.      (line  21)
+* AVR:                                   AVR.                 (line   6)
+* B packet:                              Packets.             (line  92)
+* b packet:                              Packets.             (line  77)
+* background execution:                  Background Execution.
+                                                              (line   6)
+* backtrace beyond main function:        Backtrace.           (line  93)
+* backtrace limit:                       Backtrace.           (line 129)
+* base name differences:                 Files.               (line 506)
+* baud rate for remote targets:          Remote Configuration.
+                                                              (line  21)
+* bc packet:                             Packets.             (line  97)
+* bcache statistics:                     Maintenance Commands.
+                                                              (line 235)
+* bits in remote address:                Remote Configuration.
+                                                              (line  12)
+* blocks in python:                      Blocks In Python.    (line   6)
+* bookmark:                              Checkpoint/Restart.  (line   6)
+* break in overloaded functions:         Debugging C Plus Plus.
+                                                              (line   9)
+* break on a system call.:               Set Catchpoints.     (line  48)
+* break on fork/exec:                    Set Catchpoints.     (line  43)
+* BREAK signal instead of Ctrl-C:        Remote Configuration.
+                                                              (line  29)
+* breakpoint address adjusted:           Breakpoint-related Warnings.
+                                                              (line   6)
+* breakpoint at static probe point:      Specify Location.    (line  91)
+* breakpoint commands:                   Break Commands.      (line   6)
+* breakpoint commands for GDB/MI:        GDB/MI Breakpoint Commands.
+                                                              (line   6)
+* breakpoint commands, in remote protocol: General Query Packets.
+                                                              (line 686)
+* breakpoint conditions:                 Conditions.          (line   6)
+* breakpoint kinds, ARM:                 ARM Breakpoint Kinds.
+                                                              (line   6)
+* breakpoint kinds, MIPS:                MIPS Breakpoint Kinds.
+                                                              (line   6)
+* breakpoint numbers:                    Breakpoints.         (line  41)
+* breakpoint on events:                  Breakpoints.         (line  33)
+* breakpoint on memory address:          Breakpoints.         (line  20)
+* breakpoint on variable modification:   Breakpoints.         (line  20)
+* breakpoint ranges:                     Breakpoints.         (line  48)
+* breakpoint subroutine, remote:         Stub Contents.       (line  31)
+* breakpointing Ada elaboration code:    Stopping Before Main Program.
+                                                              (line   6)
+* breakpoints:                           Breakpoints.         (line   6)
+* breakpoints and tasks, in Ada:         Ada Tasks.           (line 135)
+* breakpoints and threads:               Thread-Specific Breakpoints.
+                                                              (line  10)
+* breakpoints at functions matching a regexp: Set Breaks.     (line  92)
+* breakpoints in overlays:               Overlay Commands.    (line  93)
+* breakpoints in python:                 Breakpoints In Python.
+                                                              (line   6)
+* breakpoints, multiple locations:       Set Breaks.          (line 201)
+* bs packet:                             Packets.             (line 103)
+* bug criteria:                          Bug Criteria.        (line   6)
+* bug reports:                           Bug Reporting.       (line   6)
+* bugs in GDB:                           GDB Bugs.            (line   6)
+* build ID sections:                     Separate Debug Files.
+                                                              (line  98)
+* build ID, and separate debugging files: Separate Debug Files.
+                                                              (line   6)
+* building GDB, requirements for:        Requirements.        (line   6)
+* built-in simulator target:             Target Commands.     (line  73)
+* builtin Go functions:                  Go.                  (line  31)
+* builtin Go types:                      Go.                  (line  28)
+* C and C++:                             C.                   (line   6)
+* C and C++ checks:                      C Checks.            (line   6)
+* C and C++ constants:                   C Constants.         (line   6)
+* C and C++ defaults:                    C Defaults.          (line   6)
+* C and C++ operators:                   C Operators.         (line   6)
+* C packet:                              Packets.             (line 119)
+* c packet:                              Packets.             (line 110)
+* C++:                                   C.                   (line  10)
+* C++ compilers:                         C Plus Plus Expressions.
+                                                              (line   8)
+* C++ exception handling:                Debugging C Plus Plus.
+                                                              (line  20)
+* C++ overload debugging info:           Debugging Output.    (line 125)
+* C++ scope resolution:                  Variables.           (line  90)
+* C++ symbol decoding style:             Print Settings.      (line 413)
+* C++ symbol display:                    Debugging C Plus Plus.
+                                                              (line  35)
+* caching data of remote targets:        Caching Remote Data. (line   6)
+* call dummy stack unwinding:            Calling.             (line  35)
+* call dummy stack unwinding on unhandled exception.: Calling.
+                                                              (line  46)
+* call overloaded functions:             C Plus Plus Expressions.
+                                                              (line  26)
+* call stack:                            Stack.               (line   9)
+* call stack traces:                     Backtrace.           (line   6)
+* calling functions:                     Calling.             (line   6)
+* calling make:                          Shell Commands.      (line  21)
+* case sensitivity in symbol names:      Symbols.             (line  27)
+* case-insensitive symbol names:         Symbols.             (line  27)
+* casts, in expressions:                 Expressions.         (line  28)
+* casts, to view memory:                 Expressions.         (line  43)
+* catch Ada exceptions:                  Set Catchpoints.     (line  19)
+* catchpoints:                           Breakpoints.         (line  33)
+* catchpoints, setting:                  Set Catchpoints.     (line   6)
+* Cell Broadband Engine:                 SPU.                 (line   6)
+* change working directory:              Working Directory.   (line  16)
+* character sets:                        Character Sets.      (line   6)
+* charset:                               Character Sets.      (line   6)
+* checkpoint:                            Checkpoint/Restart.  (line   6)
+* checkpoints and process id:            Checkpoint/Restart.  (line  80)
+* checks, range:                         Type Checking.       (line  65)
+* checks, type:                          Checks.              (line  31)
+* checksum, for GDB remote:              Overview.            (line  20)
+* choosing target byte order:            Byte Order.          (line   6)
+* circular trace buffer:                 Starting and Stopping Trace Experiments.
+                                                              (line  81)
+* clearing breakpoints, watchpoints, catchpoints: Delete Breaks.
+                                                              (line   6)
+* close, file-i/o system call:           close.               (line   6)
+* closest symbol and offset for an address: Symbols.          (line  54)
+* code address and its source line:      Machine Code.        (line  25)
+* code compression, MIPS:                MIPS.                (line  55)
+* collected data discarded:              Starting and Stopping Trace Experiments.
+                                                              (line   6)
+* colon, doubled as scope operator:      M2 Scope.            (line   6)
+* colon-colon, context for variables/functions: Variables.    (line  44)
+* command editing:                       Readline Bare Essentials.
+                                                              (line   6)
+* command files:                         Command Files.       (line   6)
+* command history:                       Command History.     (line   6)
+* command hooks:                         Hooks.               (line   6)
+* command interpreters:                  Interpreters.        (line   6)
+* command line editing:                  Editing.             (line   6)
+* command scripts, debugging:            Messages/Warnings.   (line  67)
+* command tracing:                       Messages/Warnings.   (line  62)
+* commands for C++:                      Debugging C Plus Plus.
+                                                              (line   6)
+* commands in python:                    Commands In Python.  (line   6)
+* commands to access python:             Python Commands.     (line   6)
+* comment:                               Command Syntax.      (line  38)
+* COMMON blocks, Fortran:                Special Fortran Commands.
+                                                              (line   9)
+* common targets:                        Target Commands.     (line  46)
+* compatibility, GDB/MI and CLI:         GDB/MI Compatibility with CLI.
+                                                              (line   6)
+* compilation directory:                 Source Path.         (line 108)
+* compiling, on Sparclet:                Sparclet.            (line  16)
+* completion:                            Completion.          (line   6)
+* completion of Python commands:         Commands In Python.  (line  72)
+* completion of quoted strings:          Completion.          (line  57)
+* completion of structure field names:   Completion.          (line  96)
+* completion of union field names:       Completion.          (line  96)
+* compressed debug sections:             Requirements.        (line  42)
+* conditional breakpoints:               Conditions.          (line   6)
+* conditional tracepoints:               Tracepoint Conditions.
+                                                              (line   6)
+* configuring GDB:                       Running Configure.   (line   6)
+* confirmation:                          Messages/Warnings.   (line  50)
+* connection timeout, for remote TCP target: Remote Configuration.
+                                                              (line 132)
+* console i/o as part of file-i/o:       Console I/O.         (line   6)
+* console interpreter:                   Interpreters.        (line  21)
+* console output in GDB/MI:              GDB/MI Output Syntax.
+                                                              (line 106)
+* constants, in file-i/o protocol:       Constants.           (line   6)
+* continuing:                            Continuing and Stepping.
+                                                              (line   6)
+* continuing threads:                    Thread Stops.        (line   6)
+* control C, and remote debugging:       Bootstrapping.       (line  25)
+* controlling terminal:                  Input/Output.        (line  23)
+* convenience functions:                 Convenience Vars.    (line 110)
+* convenience functions in python:       Functions In Python. (line   6)
+* convenience variables:                 Convenience Vars.    (line   6)
+* convenience variables for tracepoints: Tracepoint Variables.
+                                                              (line   6)
+* convenience variables, and trace state variables: Trace State Variables.
+                                                              (line  17)
+* convenience variables, initializing:   Convenience Vars.    (line  41)
+* core dump file:                        Files.               (line   6)
+* core dump file target:                 Target Commands.     (line  54)
+* crash of debugger:                     Bug Criteria.        (line   9)
+* CRC algorithm definition:              Separate Debug Files.
+                                                              (line 142)
+* CRC of memory block, remote request:   General Query Packets.
+                                                              (line  69)
+* CRIS:                                  CRIS.                (line   6)
+* CRIS mode:                             CRIS.                (line  26)
+* CRIS version:                          CRIS.                (line  10)
+* Ctrl-BREAK, MS-Windows:                Cygwin Native.       (line   9)
+* ctrl-c message, in file-i/o protocol:  The Ctrl-C Message.  (line   6)
+* current Ada task ID:                   Ada Tasks.           (line 105)
+* current directory:                     Source Path.         (line 108)
+* current Go package:                    Go.                  (line  11)
+* current stack frame:                   Frames.              (line  45)
+* current thread:                        Threads.             (line  45)
+* current thread, remote request:        General Query Packets.
+                                                              (line  58)
+* custom JIT debug info:                 Custom Debug Info.   (line   6)
+* Cygwin DLL, debugging:                 Cygwin Native.       (line  42)
+* Cygwin-specific commands:              Cygwin Native.       (line   6)
+* D:                                     D.                   (line   6)
+* D packet:                              Packets.             (line 135)
+* d packet:                              Packets.             (line 128)
+* Darwin:                                Darwin.              (line   6)
+* data breakpoints:                      Breakpoints.         (line  20)
+* data manipulation, in GDB/MI:          GDB/MI Data Manipulation.
+                                                              (line   6)
+* dcache line-size:                      Caching Remote Data. (line  48)
+* dcache size:                           Caching Remote Data. (line  45)
+* dead names, GNU Hurd:                  Hurd Native.         (line  85)
+* debug expression parser:               Debugging Output.    (line 131)
+* debug formats and C++:                 C Plus Plus Expressions.
+                                                              (line   8)
+* debug link sections:                   Separate Debug Files.
+                                                              (line  80)
+* debug remote protocol:                 Debugging Output.    (line 140)
+* debugger crash:                        Bug Criteria.        (line   9)
+* debugging agent:                       In-Process Agent.    (line   6)
+* debugging C++ programs:                C Plus Plus Expressions.
+                                                              (line   8)
+* debugging information directory, global: Separate Debug Files.
+                                                              (line   6)
+* debugging information in separate files: Separate Debug Files.
+                                                              (line   6)
+* debugging libthread_db:                Threads.             (line 216)
+* debugging multiple processes:          Forks.               (line  52)
+* debugging optimized code:              Optimized Code.      (line   6)
+* debugging stub, example:               Remote Stub.         (line   6)
+* debugging target:                      Targets.             (line   6)
+* debugging the Cygwin DLL:              Cygwin Native.       (line  42)
+* decimal floating point format:         Decimal Floating Point.
+                                                              (line   6)
+* default collection action:             Tracepoint Actions.  (line 135)
+* default data directory:                Data Files.          (line  19)
+* default source path substitution:      Source Path.         (line  89)
+* default system root:                   Files.               (line 439)
+* define trace state variable, remote request: Tracepoint Packets.
+                                                              (line 127)
+* defining macros interactively:         Macros.              (line  59)
+* definition of a macro, showing:        Macros.              (line  47)
+* delete breakpoints:                    Delete Breaks.       (line  41)
+* deleting breakpoints, watchpoints, catchpoints: Delete Breaks.
+                                                              (line   6)
+* deliver a signal to a program:         Signaling.           (line   6)
+* demangling C++ names:                  Print Settings.      (line 394)
+* deprecated commands:                   Maintenance Commands.
+                                                              (line  98)
+* derived type of an object, printing:   Print Settings.      (line 446)
+* descriptor tables display:             DJGPP Native.        (line  24)
+* detach from task, GNU Hurd:            Hurd Native.         (line  60)
+* detach from thread, GNU Hurd:          Hurd Native.         (line 110)
+* direct memory access (DMA) on MS-DOS:  DJGPP Native.        (line  75)
+* directories for source files:          Source Path.         (line   6)
+* directory, compilation:                Source Path.         (line 108)
+* directory, current:                    Source Path.         (line 108)
+* disable address space randomization, remote request: General Query Packets.
+                                                              (line  89)
+* disconnected tracing:                  Starting and Stopping Trace Experiments.
+                                                              (line  45)
+* displaced stepping debugging info:     Debugging Output.    (line  60)
+* displaced stepping support:            Maintenance Commands.
+                                                              (line  64)
+* displaced stepping, and process record and replay: Process Record and Replay.
+                                                              (line  47)
+* display command history:               Command History.     (line  78)
+* display derived types:                 Print Settings.      (line 446)
+* display disabled out of scope:         Auto Display.        (line  86)
+* display GDB copyright:                 Help.                (line 137)
+* display of expressions:                Auto Display.        (line   6)
+* display remote monitor communications: Target Commands.     (line 108)
+* display remote packets:                Debugging Output.    (line 140)
+* DJGPP debugging:                       DJGPP Native.        (line   6)
+* DLLs with no debugging symbols:        Non-debug DLL Symbols.
+                                                              (line   6)
+* do not print frame argument values:    Print Settings.      (line 151)
+* documentation:                         Formatting Documentation.
+                                                              (line  22)
+* don't repeat command:                  Define.              (line  61)
+* don't repeat Python command:           Commands In Python.  (line  43)
+* DOS file-name semantics of file names.: Files.              (line 462)
+* DOS serial data link, remote debugging: DJGPP Native.       (line 121)
+* DOS serial port status:                DJGPP Native.        (line 142)
+* download server address (M32R):        M32R/D.              (line  27)
+* download to Sparclet:                  Sparclet Download.   (line   6)
+* download to VxWorks:                   VxWorks Download.    (line   6)
+* DPMI:                                  DJGPP Native.        (line   6)
+* dprintf:                               Dynamic Printf.      (line   6)
+* dump all data collected at tracepoint: tdump.               (line   6)
+* dump core from inferior:               Core File Generation.
+                                                              (line   6)
+* dump data to a file:                   Dump/Restore Files.  (line   6)
+* dump/restore files:                    Dump/Restore Files.  (line   6)
+* DVC register:                          PowerPC Embedded.    (line   6)
+* DWARF 2 compilation units cache:       Maintenance Commands.
+                                                              (line 293)
+* DWARF-2 CFI and CRIS:                  CRIS.                (line  18)
+* DWARF2 DIEs:                           Debugging Output.    (line  46)
+* DWARF2 Reading:                        Debugging Output.    (line  53)
+* dynamic linking:                       Files.               (line 113)
+* dynamic printf:                        Dynamic Printf.      (line   6)
+* dynamic varobj:                        GDB/MI Variable Objects.
+                                                              (line 164)
+* editing:                               Editing.             (line  15)
+* editing command lines:                 Readline Bare Essentials.
+                                                              (line   6)
+* editing source files:                  Edit.                (line   6)
+* eight-bit characters in strings:       Print Settings.      (line 339)
+* elaboration phase:                     Starting.            (line  90)
+* Emacs:                                 Emacs.               (line   6)
+* empty response, for unsupported packets: Overview.          (line  96)
+* enable/disable a breakpoint:           Disabling.           (line   6)
+* entering numbers:                      Numbers.             (line   6)
+* environment (of your program):         Environment.         (line   6)
+* errno values, in file-i/o protocol:    Errno Values.        (line   6)
+* error on valid input:                  Bug Criteria.        (line  12)
+* event debugging info:                  Debugging Output.    (line  68)
+* event designators:                     Event Designators.   (line   6)
+* event handling:                        Set Catchpoints.     (line   6)
+* examine process image:                 SVR4 Process Information.
+                                                              (line   6)
+* examining data:                        Data.                (line   6)
+* examining memory:                      Memory.              (line   9)
+* exception handlers:                    Set Catchpoints.     (line   6)
+* exceptions, python:                    Exception Handling.  (line   6)
+* executable file:                       Files.               (line  16)
+* executable file target:                Target Commands.     (line  50)
+* executable file, for remote target:    Remote Configuration.
+                                                              (line  88)
+* execute commands from a file:          Command Files.       (line  17)
+* execute forward or backward in time:   Reverse Execution.   (line  87)
+* execute remote command, remote request: General Query Packets.
+                                                              (line 341)
+* execution, foreground, background and asynchronous: Background Execution.
+                                                              (line   6)
+* exiting GDB:                           Quitting GDB.        (line   6)
+* expand macro once:                     Macros.              (line  38)
+* expanding preprocessor macros:         Macros.              (line  29)
+* explore type:                          Data.                (line 145)
+* explore value:                         Data.                (line 138)
+* exploring hierarchical data structures: Data.               (line  36)
+* expression debugging info:             Debugging Output.    (line  75)
+* expression parser, debugging info:     Debugging Output.    (line 131)
+* expressions:                           Expressions.         (line   6)
+* expressions in Ada:                    Ada.                 (line  11)
+* expressions in C or C++:               C.                   (line   6)
+* expressions in C++:                    C Plus Plus Expressions.
+                                                              (line   6)
+* expressions in Modula-2:               Modula-2.            (line  12)
+* extend GDB for remote targets:         Connecting.          (line 105)
+* extending GDB:                         Extending GDB.       (line   6)
+* extra signal information:              Signals.             (line 102)
+* F packet:                              Packets.             (line 152)
+* F reply packet:                        The F Reply Packet.  (line   6)
+* F request packet:                      The F Request Packet.
+                                                              (line   6)
+* fast tracepoints:                      Set Tracepoints.     (line  24)
+* fast tracepoints, setting:             Create and Delete Tracepoints.
+                                                              (line  51)
+* fatal signal:                          Bug Criteria.        (line   9)
+* fatal signals:                         Signals.             (line  15)
+* features of the remote protocol:       General Query Packets.
+                                                              (line 401)
+* file name canonicalization:            Files.               (line 506)
+* file transfer:                         File Transfer.       (line   6)
+* file transfer, remote protocol:        Host I/O Packets.    (line   6)
+* file-i/o examples:                     File-I/O Examples.   (line   6)
+* file-i/o overview:                     File-I/O Overview.   (line   6)
+* File-I/O remote protocol extension:    File-I/O Remote Protocol Extension.
+                                                              (line   6)
+* file-i/o reply packet:                 The F Reply Packet.  (line   6)
+* file-i/o request packet:               The F Request Packet.
+                                                              (line   6)
+* find downloadable SREC files (M32R):   M32R/D.              (line  15)
+* find trace snapshot:                   tfind.               (line   6)
+* flinching:                             Messages/Warnings.   (line  50)
+* float promotion:                       ABI.                 (line  29)
+* floating point:                        Floating Point Hardware.
+                                                              (line   6)
+* floating point registers:              Registers.           (line  15)
+* floating point, MIPS remote:           MIPS Embedded.       (line  60)
+* focus of debugging:                    Threads.             (line  45)
+* foo:                                   Symbol Errors.       (line  50)
+* foreground execution:                  Background Execution.
+                                                              (line   6)
+* fork, debugging programs which call:   Forks.               (line   6)
+* format options:                        Print Settings.      (line   6)
+* formatted output:                      Output Formats.      (line   6)
+* Fortran:                               Summary.             (line  40)
+* Fortran Defaults:                      Fortran Defaults.    (line   6)
+* Fortran operators and expressions:     Fortran Operators.   (line   6)
+* Fortran-specific support in GDB:       Fortran.             (line   6)
+* FR-V shared-library debugging:         Debugging Output.    (line 158)
+* frame debugging info:                  Debugging Output.    (line  83)
+* frame number:                          Frames.              (line  28)
+* frame pointer:                         Frames.              (line  21)
+* frame pointer register:                Registers.           (line  26)
+* frame, definition:                     Frames.              (line   6)
+* frameless execution:                   Frames.              (line  34)
+* frames in python:                      Frames In Python.    (line   6)
+* free memory information (MS-DOS):      DJGPP Native.        (line  19)
+* fstat, file-i/o system call:           stat/fstat.          (line   6)
+* Fujitsu:                               Remote Stub.         (line  69)
+* full symbol tables, listing GDB's internal: Symbols.        (line 297)
+* function call arguments, optimized out: Backtrace.          (line  71)
+* function entry/exit, wrong values of variables: Variables.  (line  94)
+* functions without line info, and stepping: Continuing and Stepping.
+                                                              (line  93)
+* G packet:                              Packets.             (line 186)
+* g packet:                              Packets.             (line 157)
+* g++, GNU C++ compiler:                 C.                   (line  10)
+* garbled pointers:                      DJGPP Native.        (line  42)
+* GCC and C++:                           C Plus Plus Expressions.
+                                                              (line   8)
+* GDB bugs, reporting:                   Bug Reporting.       (line   6)
+* GDB internal error:                    Maintenance Commands.
+                                                              (line 132)
+* gdb module:                            Basic Python.        (line   6)
+* GDB reference card:                    Formatting Documentation.
+                                                              (line   6)
+* GDB startup:                           Startup.             (line   6)
+* GDB version number:                    Help.                (line 127)
+* gdb.ini:                               Startup.             (line  66)
+* gdb.printing:                          gdb.printing.        (line   6)
+* gdb.prompt:                            gdb.prompt.          (line   6)
+* gdb.types:                             gdb.types.           (line   6)
+* gdb.Value:                             Values From Inferior.
+                                                              (line   6)
+* GDB/MI development:                    GDB/MI Development and Front Ends.
+                                                              (line   6)
+* GDB/MI General Design:                 GDB/MI General Design.
+                                                              (line   6)
+* GDB/MI, async records:                 GDB/MI Async Records.
+                                                              (line   6)
+* GDB/MI, breakpoint commands:           GDB/MI Breakpoint Commands.
+                                                              (line   6)
+* GDB/MI, compatibility with CLI:        GDB/MI Compatibility with CLI.
+                                                              (line   6)
+* GDB/MI, data manipulation:             GDB/MI Data Manipulation.
+                                                              (line   6)
+* GDB/MI, input syntax:                  GDB/MI Input Syntax. (line   6)
+* GDB/MI, its purpose:                   GDB/MI.              (line   9)
+* GDB/MI, output syntax:                 GDB/MI Output Syntax.
+                                                              (line   6)
+* GDB/MI, result records:                GDB/MI Result Records.
+                                                              (line   6)
+* GDB/MI, simple examples:               GDB/MI Simple Examples.
+                                                              (line   6)
+* GDB/MI, stream records:                GDB/MI Stream Records.
+                                                              (line   6)
+* gdbarch debugging info:                Debugging Output.    (line  18)
+* GDBHISTFILE, environment variable:     Command History.     (line  26)
+* gdbserver, command-line arguments:     Server.              (line  34)
+* gdbserver, multiple processes:         Server.              (line 106)
+* gdbserver, search path for libthread_db: Server.            (line 238)
+* GDT:                                   DJGPP Native.        (line  24)
+* get thread information block address:  General Query Packets.
+                                                              (line 178)
+* get thread-local storage address, remote request: General Query Packets.
+                                                              (line 147)
+* gettimeofday, file-i/o system call:    gettimeofday.        (line   6)
+* global debugging information directories: Separate Debug Files.
+                                                              (line   6)
+* GNU C++:                               C.                   (line  10)
+* GNU Emacs:                             Emacs.               (line   6)
+* GNU Hurd debugging:                    Hurd Native.         (line   6)
+* GNU/Hurd debug messages:               Debugging Output.    (line  90)
+* GNU/Linux LWP debug messages:          Debugging Output.    (line 111)
+* Go (programming language):             Go.                  (line   6)
+* H packet:                              Packets.             (line 197)
+* handling signals:                      Signals.             (line  27)
+* hardware breakpoints:                  Set Breaks.          (line  62)
+* hardware debug registers:              Maintenance Commands.
+                                                              (line 319)
+* hardware watchpoints:                  Set Watchpoints.     (line  31)
+* hash mark while downloading:           Target Commands.     (line  99)
+* heuristic-fence-post (Alpha, MIPS):    MIPS.                (line  14)
+* history events:                        Event Designators.   (line   8)
+* history expansion:                     History Interaction. (line   6)
+* history expansion, turn on/off:        Command History.     (line  53)
+* history file:                          Command History.     (line  26)
+* history number:                        Value History.       (line  13)
+* history of values printed by GDB:      Value History.       (line   6)
+* history size:                          Command History.     (line  45)
+* history substitution:                  Command History.     (line  26)
+* HISTSIZE, environment variable:        Command History.     (line  45)
+* hooks, for commands:                   Hooks.               (line   6)
+* hooks, post-command:                   Hooks.               (line  11)
+* hooks, pre-command:                    Hooks.               (line   6)
+* host character set:                    Character Sets.      (line   6)
+* Host I/O, remote protocol:             Host I/O Packets.    (line   6)
+* how many arguments (user-defined commands): Define.         (line  25)
+* HPPA support:                          HPPA.                (line   6)
+* I packet:                              Packets.             (line 217)
+* i packet:                              Packets.             (line 212)
+* i/o:                                   Input/Output.        (line   6)
+* I/O registers (Atmel AVR):             AVR.                 (line  10)
+* i386:                                  Remote Stub.         (line  57)
+* i386-stub.c:                           Remote Stub.         (line  57)
+* IDT:                                   DJGPP Native.        (line  24)
+* ignore count (of breakpoint):          Conditions.          (line  79)
+* in-process agent protocol:             In-Process Agent Protocol.
+                                                              (line   6)
+* incomplete type:                       Symbols.             (line 150)
+* indentation in structure display:      Print Settings.      (line 315)
+* index files:                           Index Files.         (line   6)
+* index section format:                  Index Section Format.
+                                                              (line   6)
+* inferior:                              Inferiors and Programs.
+                                                              (line  13)
+* inferior debugging info:               Debugging Output.    (line  96)
+* inferior events in Python:             Events In Python.    (line   6)
+* inferior functions, calling:           Calling.             (line   6)
+* inferior tty:                          Input/Output.        (line  44)
+* inferiors in Python:                   Inferiors In Python. (line   6)
+* infinite recursion in user-defined commands: Define.        (line  78)
+* info for known .debug_gdb_scripts-loaded scripts: Maintenance Commands.
+                                                              (line 228)
+* info for known object files:           Maintenance Commands.
+                                                              (line 223)
+* information about static tracepoint markers: Listing Static Tracepoint Markers.
+                                                              (line   6)
+* information about tracepoints:         Listing Tracepoints. (line   6)
+* inheritance:                           Debugging C Plus Plus.
+                                                              (line  25)
+* init file:                             Startup.             (line  11)
+* init file name:                        Startup.             (line  66)
+* initial frame:                         Frames.              (line  12)
+* initialization file, readline:         Readline Init File.  (line   6)
+* inline functions, debugging:           Inline Functions.    (line   6)
+* innermost frame:                       Frames.              (line  12)
+* input syntax for GDB/MI:               GDB/MI Input Syntax. (line   6)
+* installation:                          Installing GDB.      (line   6)
+* instructions, assembly:                Machine Code.        (line  36)
+* integral datatypes, in file-i/o protocol: Integral Datatypes.
+                                                              (line   6)
+* Intel:                                 Remote Stub.         (line  57)
+* Intel disassembly flavor:              Machine Code.        (line 127)
+* interaction, readline:                 Readline Interaction.
+                                                              (line   6)
+* internal commands:                     Maintenance Commands.
+                                                              (line   6)
+* internal errors, control of GDB behavior: Maintenance Commands.
+                                                              (line 132)
+* internal GDB breakpoints:              Set Breaks.          (line 383)
+* interrupt:                             Quitting GDB.        (line  13)
+* interrupt debuggee on MS-Windows:      Cygwin Native.       (line   9)
+* interrupt remote programs:             Remote Configuration.
+                                                              (line  29)
+* interrupting remote programs:          Connecting.          (line  78)
+* interrupting remote targets:           Bootstrapping.       (line  25)
+* interrupts (remote protocol):          Interrupts.          (line   6)
+* invalid input:                         Bug Criteria.        (line  16)
+* invoke another interpreter:            Interpreters.        (line  37)
+* ipa protocol commands:                 IPA Protocol Commands.
+                                                              (line   6)
+* ipa protocol objects:                  IPA Protocol Objects.
+                                                              (line   6)
+* isatty, file-i/o system call:          isatty.              (line   6)
+* JIT compilation interface:             JIT Interface.       (line   6)
+* JIT debug info reader:                 Custom Debug Info.   (line   6)
+* just-in-time compilation:              JIT Interface.       (line   6)
+* just-in-time compilation, debugging messages: Debugging Output.
+                                                              (line 105)
+* k packet:                              Packets.             (line 221)
+* kernel crash dump:                     BSD libkvm Interface.
+                                                              (line   6)
+* kernel memory image:                   BSD libkvm Interface.
+                                                              (line   6)
+* kill ring:                             Readline Killing Commands.
+                                                              (line  19)
+* killing text:                          Readline Killing Commands.
+                                                              (line   6)
+* languages:                             Languages.           (line   6)
+* last tracepoint number:                Create and Delete Tracepoints.
+                                                              (line 123)
+* latest breakpoint:                     Set Breaks.          (line   6)
+* lazy strings in python:                Lazy Strings In Python.
+                                                              (line   6)
+* LDT:                                   DJGPP Native.        (line  24)
+* leaving GDB:                           Quitting GDB.        (line   6)
+* libkvm:                                BSD libkvm Interface.
+                                                              (line   6)
+* library list format, remote protocol <1>: Library List Format for SVR4 Targets.
+                                                              (line   6)
+* library list format, remote protocol:  Library List Format. (line   6)
+* limit hardware breakpoints and watchpoints: Remote Configuration.
+                                                              (line  72)
+* limit hardware watchpoints length:     Remote Configuration.
+                                                              (line  77)
+* limit on number of printed array elements: Print Settings.  (line 139)
+* limits, in file-i/o protocol:          Limits.              (line   6)
+* linespec:                              Specify Location.    (line   6)
+* Linux lightweight processes:           Debugging Output.    (line 111)
+* list active threads, remote request:   General Query Packets.
+                                                              (line 119)
+* list of supported file-i/o calls:      List of Supported Calls.
+                                                              (line   6)
+* list output in GDB/MI:                 GDB/MI Output Syntax.
+                                                              (line 117)
+* list, how many lines to display:       List.                (line  30)
+* listing GDB's internal symbol tables:  Symbols.             (line 297)
+* listing machine instructions:          Machine Code.        (line  36)
+* listing mapped overlays:               Overlay Commands.    (line  60)
+* load address, overlay's:               How Overlays Work.   (line   6)
+* load shared library:                   Files.               (line 323)
+* load symbols from memory:              Files.               (line 162)
+* local variables:                       Symbols.             (line 181)
+* locate address:                        Output Formats.      (line  35)
+* lock scheduler:                        All-Stop Mode.       (line  37)
+* log output in GDB/MI:                  GDB/MI Output Syntax.
+                                                              (line 113)
+* logging file name:                     Logging Output.      (line  13)
+* logging GDB output:                    Logging Output.      (line   6)
+* lseek flags, in file-i/o protocol:     Lseek Flags.         (line   6)
+* lseek, file-i/o system call:           lseek.               (line   6)
+* M packet:                              Packets.             (line 248)
+* m packet:                              Packets.             (line 228)
+* M32-EVA target board address:          M32R/D.              (line  21)
+* M32R/Chaos debugging:                  M32R/D.              (line  50)
+* m680x0:                                Remote Stub.         (line  60)
+* m68k-stub.c:                           Remote Stub.         (line  60)
+* machine instructions:                  Machine Code.        (line  36)
+* macro definition, showing:             Macros.              (line  47)
+* macro expansion, showing the results of preprocessor: Macros.
+                                                              (line  29)
+* macros, example of debugging with:     Macros.              (line  83)
+* macros, from debug info:               Macros.              (line  47)
+* macros, user-defined:                  Macros.              (line  59)
+* mailing lists:                         GDB/MI Development and Front Ends.
+                                                              (line  35)
+* maintenance commands:                  Maintenance Commands.
+                                                              (line   6)
+* manual overlay debugging:              Overlay Commands.    (line  23)
+* map an overlay:                        Overlay Commands.    (line  30)
+* mapinfo list, QNX Neutrino:            SVR4 Process Information.
+                                                              (line  78)
+* mapped address:                        How Overlays Work.   (line   6)
+* mapped overlays:                       How Overlays Work.   (line   6)
+* markers, static tracepoints:           Set Tracepoints.     (line  28)
+* maximum value for offset of closest symbol: Print Settings. (line  70)
+* member functions:                      C Plus Plus Expressions.
+                                                              (line  16)
+* memory address space mappings:         SVR4 Process Information.
+                                                              (line  32)
+* memory map format:                     Memory Map Format.   (line   6)
+* memory region attributes:              Memory Region Attributes.
+                                                              (line   6)
+* memory tracing:                        Breakpoints.         (line  20)
+* memory transfer, in file-i/o protocol: Memory Transfer.     (line   6)
+* memory used by commands:               Maintenance Commands.
+                                                              (line 333)
+* memory used for symbol tables:         Files.               (line 311)
+* memory, alignment and size of remote accesses: Packets.     (line 235)
+* memory, viewing as typed object:       Expressions.         (line  43)
+* mi interpreter:                        Interpreters.        (line  26)
+* mi1 interpreter:                       Interpreters.        (line  34)
+* mi2 interpreter:                       Interpreters.        (line  31)
+* minimal language:                      Unsupported Languages.
+                                                              (line   6)
+* Minimal symbols and DLLs:              Non-debug DLL Symbols.
+                                                              (line   6)
+* MIPS addresses, masking:               MIPS.                (line  86)
+* MIPS boards:                           MIPS Embedded.       (line   6)
+* MIPS remote floating point:            MIPS Embedded.       (line  60)
+* MIPS stack:                            MIPS.                (line   6)
+* miscellaneous settings:                Other Misc Settings. (line   6)
+* MMX registers (x86):                   Registers.           (line  71)
+* mode_t values, in file-i/o protocol:   mode_t Values.       (line   6)
+* Modula-2:                              Summary.             (line  29)
+* Modula-2 built-ins:                    Built-In Func/Proc.  (line   6)
+* Modula-2 checks:                       M2 Checks.           (line   6)
+* Modula-2 constants:                    Built-In Func/Proc.  (line 112)
+* Modula-2 defaults:                     M2 Defaults.         (line   6)
+* Modula-2 operators:                    M2 Operators.        (line   6)
+* Modula-2 types:                        M2 Types.            (line   6)
+* Modula-2, deviations from:             Deviations.          (line   6)
+* Modula-2, GDB support:                 Modula-2.            (line   6)
+* monitor commands, for gdbserver:       Server.              (line 221)
+* Motorola 680x0:                        Remote Stub.         (line  60)
+* MS Windows debugging:                  Cygwin Native.       (line   6)
+* MS-DOS system info:                    DJGPP Native.        (line  19)
+* MS-DOS-specific commands:              DJGPP Native.        (line   6)
+* multiple locations, breakpoints:       Set Breaks.          (line 201)
+* multiple processes:                    Forks.               (line   6)
+* multiple processes with gdbserver:     Server.              (line 106)
+* multiple targets:                      Active Targets.      (line   6)
+* multiple threads:                      Threads.             (line   6)
+* multiple threads, backtrace:           Backtrace.           (line  37)
+* multiple-symbols menu:                 Ambiguous Expressions.
+                                                              (line  51)
+* multiprocess extensions, in remote protocol: General Query Packets.
+                                                              (line 620)
+* name a thread:                         Threads.             (line 131)
+* names of symbols:                      Symbols.             (line  14)
+* namespace in C++:                      C Plus Plus Expressions.
+                                                              (line  20)
+* native Cygwin debugging:               Cygwin Native.       (line   6)
+* native DJGPP debugging:                DJGPP Native.        (line   6)
+* negative breakpoint numbers:           Set Breaks.          (line 383)
+* NetROM ROM emulator target:            Target Commands.     (line  88)
+* New SYSTAG message:                    Threads.             (line  51)
+* non-member C++ functions, set breakpoint in: Set Breaks.    (line 108)
+* non-stop mode:                         Non-Stop Mode.       (line   6)
+* non-stop mode, and breakpoint always-inserted: Set Breaks.  (line 339)
+* non-stop mode, and process record and replay: Process Record and Replay.
+                                                              (line  52)
+* non-stop mode, and set displaced-stepping: Maintenance Commands.
+                                                              (line  81)
+* non-stop mode, remote request:         General Query Packets.
+                                                              (line 255)
+* noninvasive task options:              Hurd Native.         (line  73)
+* notation, readline:                    Readline Bare Essentials.
+                                                              (line   6)
+* notational conventions, for GDB/MI:    GDB/MI.              (line  25)
+* notification packets:                  Notification Packets.
+                                                              (line   6)
+* notify output in GDB/MI:               GDB/MI Output Syntax.
+                                                              (line 102)
+* NULL elements in arrays:               Print Settings.      (line 306)
+* number of array elements to print:     Print Settings.      (line 139)
+* number representation:                 Numbers.             (line   6)
+* numbers for breakpoints:               Breakpoints.         (line  41)
+* object files, relocatable, reading symbols from: Files.     (line 132)
+* Objective-C:                           Objective-C.         (line   6)
+* Objective-C, classes and selectors:    Symbols.             (line 248)
+* Objective-C, print objects:            The Print Command with Objective-C.
+                                                              (line   6)
+* OBJFILE-gdb.py:                        objfile-gdb.py file. (line   6)
+* objfiles in python:                    Objfiles In Python.  (line   6)
+* observer debugging info:               Debugging Output.    (line 118)
+* octal escapes in strings:              Print Settings.      (line 339)
+* online documentation:                  Help.                (line   6)
+* opaque data types:                     Symbols.             (line 260)
+* open flags, in file-i/o protocol:      Open Flags.          (line   6)
+* open, file-i/o system call:            open.                (line   6)
+* OpenCL C:                              OpenCL C.            (line   6)
+* OpenCL C Datatypes:                    OpenCL C Datatypes.  (line   6)
+* OpenCL C Expressions:                  OpenCL C Expressions.
+                                                              (line   6)
+* OpenCL C Operators:                    OpenCL C Operators.  (line   6)
+* OpenRISC 1000:                         OpenRISC 1000.       (line   6)
+* OpenRISC 1000 htrace:                  OpenRISC 1000.       (line  58)
+* operating system information:          Operating System Information.
+                                                              (line   6)
+* operating system information, process list: Process list.   (line   6)
+* optimized code, debugging:             Optimized Code.      (line   6)
+* optimized code, wrong values of variables: Variables.       (line  94)
+* optimized out value in Python:         Values From Inferior.
+                                                              (line  49)
+* optimized out, in backtrace:           Backtrace.           (line  71)
+* optional debugging messages:           Debugging Output.    (line   6)
+* optional warnings:                     Messages/Warnings.   (line   6)
+* or1k boards:                           OpenRISC 1000.       (line   6)
+* OS ABI:                                ABI.                 (line  11)
+* OS information:                        OS Information.      (line   6)
+* out-of-line single-stepping:           Maintenance Commands.
+                                                              (line  64)
+* outermost frame:                       Frames.              (line  12)
+* output formats:                        Output Formats.      (line   6)
+* output syntax of GDB/MI:               GDB/MI Output Syntax.
+                                                              (line   6)
+* overlay area:                          How Overlays Work.   (line   6)
+* overlay example program:               Overlay Sample Program.
+                                                              (line   6)
+* overlays:                              Overlays.            (line   6)
+* overlays, setting breakpoints in:      Overlay Commands.    (line  93)
+* overloaded functions, calling:         C Plus Plus Expressions.
+                                                              (line  26)
+* overloaded functions, overload resolution: Debugging C Plus Plus.
+                                                              (line  54)
+* overloading in C++:                    Debugging C Plus Plus.
+                                                              (line  15)
+* P packet:                              Packets.             (line 276)
+* p packet:                              Packets.             (line 261)
+* packet acknowledgment, for GDB remote: Packet Acknowledgment.
+                                                              (line   6)
+* packet size, remote protocol:          General Query Packets.
+                                                              (line 539)
+* packets, notification:                 Notification Packets.
+                                                              (line   6)
+* packets, reporting on stdout:          Debugging Output.    (line 140)
+* packets, tracepoint:                   Tracepoint Packets.  (line   6)
+* page tables display (MS-DOS):          DJGPP Native.        (line  56)
+* parameters in python:                  Parameters In Python.
+                                                              (line   6)
+* partial symbol dump:                   Symbols.             (line 278)
+* partial symbol tables, listing GDB's internal: Symbols.     (line 297)
+* Pascal:                                Summary.             (line  35)
+* Pascal objects, static members display: Print Settings.     (line 475)
+* Pascal support in GDB, limitations:    Pascal.              (line   6)
+* pass signals to inferior, remote request: General Query Packets.
+                                                              (line 275)
+* patching binaries:                     Patching.            (line   6)
+* patching object files:                 Files.               (line  26)
+* pause current task (GNU Hurd):         Hurd Native.         (line  49)
+* pause current thread (GNU Hurd):       Hurd Native.         (line  91)
+* pauses in output:                      Screen Size.         (line   6)
+* pending breakpoints:                   Set Breaks.          (line 245)
+* physical address from linear address:  DJGPP Native.        (line  81)
+* physname:                              Debugging Output.    (line  35)
+* pipe, target remote to:                Connecting.          (line  60)
+* pipes:                                 Starting.            (line  62)
+* pointer values, in file-i/o protocol:  Pointer Values.      (line   6)
+* pointer, finding referent:             Print Settings.      (line  79)
+* port rights, GNU Hurd:                 Hurd Native.         (line  85)
+* port sets, GNU Hurd:                   Hurd Native.         (line  85)
+* PowerPC architecture:                  PowerPC.             (line   6)
+* prefix for data files:                 Data Files.          (line   6)
+* prefix for shared library file names:  Files.               (line 379)
+* premature return from system calls:    Interrupted System Calls.
+                                                              (line   6)
+* preprocessor macro expansion, showing the results of: Macros.
+                                                              (line  29)
+* pretty print arrays:                   Print Settings.      (line 114)
+* pretty print C++ virtual function tables: Print Settings.   (line 486)
+* pretty-printer commands:               Pretty-Printer Commands.
+                                                              (line   6)
+* print all frame argument values:       Print Settings.      (line 151)
+* print an Objective-C object description: The Print Command with Objective-C.
+                                                              (line  11)
+* print array indexes:                   Print Settings.      (line 124)
+* print frame argument values for scalars only: Print Settings.
+                                                              (line 151)
+* print list of auto-loaded canned sequences of commands scripts: objfile-gdb.gdb file.
+                                                              (line  24)
+* print list of auto-loaded Python scripts: Python Auto-loading.
+                                                              (line  24)
+* print messages on inferior start and exit: Inferiors and Programs.
+                                                              (line 117)
+* print messages on thread start and exit: Threads.           (line 156)
+* print settings:                        Print Settings.      (line   6)
+* print structures in indented form:     Print Settings.      (line 315)
+* print/don't print memory addresses:    Print Settings.      (line  13)
+* printing byte arrays:                  Output Formats.      (line  60)
+* printing data:                         Data.                (line   6)
+* printing frame argument values:        Print Settings.      (line 151)
+* printing strings:                      Output Formats.      (line  60)
+* probe static tracepoint marker:        Create and Delete Tracepoints.
+                                                              (line  76)
+* probing markers, static tracepoints:   Set Tracepoints.     (line  28)
+* process detailed status information:   SVR4 Process Information.
+                                                              (line  40)
+* process ID:                            SVR4 Process Information.
+                                                              (line  16)
+* process info via /proc:                SVR4 Process Information.
+                                                              (line   6)
+* process list, QNX Neutrino:            SVR4 Process Information.
+                                                              (line  74)
+* process record and replay:             Process Record and Replay.
+                                                              (line   6)
+* process status register:               Registers.           (line  26)
+* processes, multiple:                   Forks.               (line   6)
+* procfs API calls:                      SVR4 Process Information.
+                                                              (line  53)
+* profiling GDB:                         Maintenance Commands.
+                                                              (line 303)
+* program counter register:              Registers.           (line  26)
+* program entry point:                   Backtrace.           (line  93)
+* programming in python:                 Python API.          (line   6)
+* progspaces in python:                  Progspaces In Python.
+                                                              (line   6)
+* prompt:                                Prompt.              (line   6)
+* protocol basics, file-i/o:             Protocol Basics.     (line   6)
+* protocol, GDB remote serial:           Overview.            (line  14)
+* protocol-specific representation of datatypes, in file-i/o protocol: Protocol-specific Representation of Datatypes.
+                                                              (line   6)
+* ptrace system call:                    OS Information.      (line   9)
+* python api:                            Python API.          (line   6)
+* Python auto-loading:                   Python Auto-loading. (line   6)
+* python commands <1>:                   Commands In Python.  (line   6)
+* python commands:                       Python Commands.     (line   6)
+* python convenience functions:          Functions In Python. (line   6)
+* python directory:                      Python.              (line  10)
+* python exceptions:                     Exception Handling.  (line   6)
+* python finish breakpoints:             Finish Breakpoints in Python.
+                                                              (line   6)
+* python functions:                      Basic Python.        (line   6)
+* python module:                         Basic Python.        (line   6)
+* python modules:                        Python modules.      (line   6)
+* python pagination:                     Python API.          (line   6)
+* python parameters:                     Parameters In Python.
+                                                              (line   6)
+* python scripting:                      Python.              (line   6)
+* python stdout:                         Python API.          (line   6)
+* Python, working with types:            Types In Python.     (line   6)
+* python, working with values from inferior: Values From Inferior.
+                                                              (line   6)
+* Q packet:                              Packets.             (line 289)
+* q packet:                              Packets.             (line 289)
+* QAllow packet:                         General Query Packets.
+                                                              (line  47)
+* qAttached packet:                      General Query Packets.
+                                                              (line 995)
+* qC packet:                             General Query Packets.
+                                                              (line  58)
+* qCRC packet:                           General Query Packets.
+                                                              (line  69)
+* QDisableRandomization packet:          General Query Packets.
+                                                              (line  89)
+* qfThreadInfo packet:                   General Query Packets.
+                                                              (line 119)
+* qGetTIBAddr packet:                    General Query Packets.
+                                                              (line 178)
+* qGetTLSAddr packet:                    General Query Packets.
+                                                              (line 147)
+* QNonStop packet:                       General Query Packets.
+                                                              (line 255)
+* QNX Neutrino:                          Neutrino.            (line   6)
+* qOffsets packet:                       General Query Packets.
+                                                              (line 217)
+* qP packet:                             General Query Packets.
+                                                              (line 244)
+* QPassSignals packet:                   General Query Packets.
+                                                              (line 275)
+* QProgramSignals packet:                General Query Packets.
+                                                              (line 303)
+* qRcmd packet:                          General Query Packets.
+                                                              (line 341)
+* qSearch:memory packet:                 General Query Packets.
+                                                              (line 366)
+* QStartNoAckMode packet:                General Query Packets.
+                                                              (line 386)
+* qsThreadInfo packet:                   General Query Packets.
+                                                              (line 119)
+* qSupported packet:                     General Query Packets.
+                                                              (line 401)
+* qSymbol packet:                        General Query Packets.
+                                                              (line 691)
+* qTBuffer packet:                       Tracepoint Packets.  (line 406)
+* QTDisable packet:                      Tracepoint Packets.  (line 215)
+* QTDisconnected packet:                 Tracepoint Packets.  (line 234)
+* QTDP packet:                           Tracepoint Packets.  (line  10)
+* QTDPsrc packet:                        Tracepoint Packets.  (line  96)
+* QTDV packet:                           Tracepoint Packets.  (line 127)
+* QTEnable packet:                       Tracepoint Packets.  (line 210)
+* qTfP packet:                           Tracepoint Packets.  (line 345)
+* QTFrame packet:                        Tracepoint Packets.  (line 135)
+* qTfSTM packet:                         Tracepoint Packets.  (line 362)
+* qTfV packet:                           Tracepoint Packets.  (line 353)
+* qThreadExtraInfo packet:               General Query Packets.
+                                                              (line 737)
+* QTinit packet:                         Tracepoint Packets.  (line 220)
+* qTMinFTPILen packet:                   Tracepoint Packets.  (line 174)
+* QTNotes packet:                        Tracepoint Packets.  (line 419)
+* qTP packet:                            Tracepoint Packets.  (line 316)
+* QTro packet:                           Tracepoint Packets.  (line 223)
+* QTSave packet:                         Tracepoint Packets.  (line 400)
+* qTsP packet:                           Tracepoint Packets.  (line 346)
+* qTsSTM packet:                         Tracepoint Packets.  (line 362)
+* QTStart packet:                        Tracepoint Packets.  (line 201)
+* qTStatus packet:                       Tracepoint Packets.  (line 240)
+* qTSTMat packet:                        Tracepoint Packets.  (line 394)
+* QTStop packet:                         Tracepoint Packets.  (line 207)
+* qTsV packet:                           Tracepoint Packets.  (line 354)
+* qTV packet:                            Tracepoint Packets.  (line 328)
+* query attached, remote request:        General Query Packets.
+                                                              (line 995)
+* quotes in commands:                    Completion.          (line  57)
+* quoting Ada internal identifiers:      Additions to Ada.    (line  76)
+* quoting names:                         Symbols.             (line  14)
+* qXfer packet:                          General Query Packets.
+                                                              (line 779)
+* R packet:                              Packets.             (line 298)
+* r packet:                              Packets.             (line 293)
+* raise exceptions:                      Set Catchpoints.     (line 203)
+* range checking:                        Type Checking.       (line  65)
+* ranged breakpoint:                     PowerPC Embedded.    (line  33)
+* ranges of breakpoints:                 Breakpoints.         (line  48)
+* Ravenscar Profile:                     Ravenscar Profile.   (line   6)
+* raw printing:                          Output Formats.      (line  70)
+* RDI heartbeat:                         ARM.                 (line 112)
+* read special object, remote request:   General Query Packets.
+                                                              (line 779)
+* read, file-i/o system call:            read.                (line   6)
+* read-only sections:                    Files.               (line 258)
+* reading symbols from relocatable object files: Files.       (line 132)
+* reading symbols immediately:           Files.               (line  90)
+* readline:                              Editing.             (line   6)
+* receive rights, GNU Hurd:              Hurd Native.         (line  85)
+* recent tracepoint number:              Create and Delete Tracepoints.
+                                                              (line 123)
+* record aggregates (Ada):               Omissions from Ada.  (line  44)
+* record mode:                           Process Record and Replay.
+                                                              (line  19)
+* record serial communications on file:  Remote Configuration.
+                                                              (line  57)
+* recording a session script:            Bug Reporting.       (line 104)
+* recording inferior's execution and replaying it: Process Record and Replay.
+                                                              (line   6)
+* redirection:                           Input/Output.        (line   6)
+* reference card:                        Formatting Documentation.
+                                                              (line   6)
+* reference declarations:                C Plus Plus Expressions.
+                                                              (line  50)
+* register packet format, MIPS:          MIPS Register packet Format.
+                                                              (line   6)
+* registers:                             Registers.           (line   6)
+* regular expression:                    Set Breaks.          (line  92)
+* reloading the overlay table:           Overlay Commands.    (line  52)
+* relocatable object files, reading symbols from: Files.      (line 132)
+* remote connection without stubs:       Server.              (line   6)
+* remote debugging:                      Remote Debugging.    (line   6)
+* remote memory comparison:              Memory.              (line 123)
+* remote monitor prompt:                 MIPS Embedded.       (line 107)
+* remote packets, enabling and disabling: Remote Configuration.
+                                                              (line 141)
+* remote programs, interrupting:         Connecting.          (line  78)
+* remote protocol debugging:             Debugging Output.    (line 140)
+* remote protocol, binary data:          Overview.            (line  61)
+* remote protocol, field separator:      Overview.            (line  53)
+* remote query requests:                 General Query Packets.
+                                                              (line   6)
+* remote serial debugging summary:       Debug Session.       (line   6)
+* remote serial debugging, overview:     Remote Stub.         (line  14)
+* remote serial protocol:                Overview.            (line  14)
+* remote serial stub:                    Stub Contents.       (line   6)
+* remote serial stub list:               Remote Stub.         (line  54)
+* remote serial stub, initialization:    Stub Contents.       (line  10)
+* remote serial stub, main routine:      Stub Contents.       (line  15)
+* remote stub, example:                  Remote Stub.         (line   6)
+* remote stub, support routines:         Bootstrapping.       (line   6)
+* remote target:                         Target Commands.     (line  58)
+* remote target, file transfer:          File Transfer.       (line   6)
+* remote target, limit break- and watchpoints: Remote Configuration.
+                                                              (line  72)
+* remote target, limit watchpoints length: Remote Configuration.
+                                                              (line  77)
+* remote timeout:                        Remote Configuration.
+                                                              (line  65)
+* remove actions from a tracepoint:      Tracepoint Actions.  (line  21)
+* rename, file-i/o system call:          rename.              (line   6)
+* Renesas:                               Remote Stub.         (line  63)
+* repeated array elements:               Print Settings.      (line 293)
+* repeating command sequences:           Command Syntax.      (line  42)
+* repeating commands:                    Command Syntax.      (line  21)
+* replay log events, remote reply:       Stop Reply Packets.  (line  61)
+* replay mode:                           Process Record and Replay.
+                                                              (line  10)
+* reporting bugs in GDB:                 GDB Bugs.            (line   6)
+* reprint the last value:                Data.                (line  23)
+* reset SDI connection, M32R:            M32R/D.              (line  44)
+* response time, MIPS debugging:         MIPS.                (line  10)
+* restart:                               Checkpoint/Restart.  (line   6)
+* restore data from a file:              Dump/Restore Files.  (line   6)
+* restrictions on Go expressions:        Go.                  (line  35)
+* result records in GDB/MI:              GDB/MI Result Records.
+                                                              (line   6)
+* resume threads of multiple processes simultaneously: All-Stop Mode.
+                                                              (line  53)
+* resuming execution:                    Continuing and Stepping.
+                                                              (line   6)
+* retransmit-timeout, MIPS protocol:     MIPS Embedded.       (line  83)
+* returning from a function:             Returning.           (line   6)
+* reverse execution:                     Reverse Execution.   (line   6)
+* rewind program state:                  Checkpoint/Restart.  (line   6)
+* ROM at zero address, RDI:              ARM.                 (line 102)
+* run to main procedure:                 Starting.            (line  79)
+* run until specified location:          Continuing and Stepping.
+                                                              (line 118)
+* running:                               Starting.            (line   6)
+* running and debugging Sparclet programs: Sparclet Execution.
+                                                              (line   6)
+* running programs backward:             Reverse Execution.   (line   6)
+* running VxWorks tasks:                 VxWorks Attach.      (line   6)
+* running, on Sparclet:                  Sparclet.            (line  28)
+* S packet:                              Packets.             (line 314)
+* s packet:                              Packets.             (line 305)
+* save breakpoints to a file for future sessions: Save Breakpoints.
+                                                              (line   9)
+* save command history:                  Command History.     (line  36)
+* save GDB output to a file:             Logging Output.      (line   6)
+* save tracepoints for future sessions:  save tracepoints.    (line   6)
+* scheduler locking mode:                All-Stop Mode.       (line  37)
+* scope:                                 M2 Scope.            (line   6)
+* scripting commands:                    Command Files.       (line   6)
+* scripting with python:                 Python.              (line   6)
+* SDS protocol:                          PowerPC Embedded.    (line  83)
+* search for a thread:                   Threads.             (line 142)
+* search path for libthread_db:          Threads.             (line 177)
+* searching memory:                      Searching Memory.    (line   6)
+* searching memory, in remote debugging: General Query Packets.
+                                                              (line 366)
+* searching source files:                Search.              (line   6)
+* section offsets, remote request:       General Query Packets.
+                                                              (line 217)
+* segment descriptor tables:             DJGPP Native.        (line  24)
+* select Ctrl-C, BREAK or BREAK-g:       Remote Configuration.
+                                                              (line  94)
+* select trace snapshot:                 tfind.               (line   6)
+* selected frame:                        Stack.               (line  19)
+* selecting frame silently:              Frames.              (line  51)
+* semaphores on static probe points:     Static Probe Points. (line  19)
+* send command to remote monitor:        Connecting.          (line 105)
+* send command to simulator:             Embedded Processors. (line   9)
+* send interrupt-sequence on start:      Remote Configuration.
+                                                              (line 107)
+* send PMON command:                     MIPS Embedded.       (line 132)
+* send rights, GNU Hurd:                 Hurd Native.         (line  85)
+* sending files to remote systems:       File Transfer.       (line   6)
+* separate debugging information files:  Separate Debug Files.
+                                                              (line   6)
+* sequence-id, for GDB remote:           Overview.            (line  29)
+* serial connections, debugging:         Debugging Output.    (line 140)
+* serial line, target remote:            Connecting.          (line  18)
+* serial protocol, GDB remote:           Overview.            (line  14)
+* server prefix:                         Server Prefix.       (line   6)
+* server, command prefix:                Command History.     (line  20)
+* set ABI for MIPS:                      MIPS.                (line  32)
+* set breakpoints in many functions:     Set Breaks.          (line  92)
+* set breakpoints on all functions:      Set Breaks.          (line 112)
+* set fast tracepoint:                   Create and Delete Tracepoints.
+                                                              (line  51)
+* set inferior controlling terminal:     Input/Output.        (line  44)
+* set static tracepoint:                 Create and Delete Tracepoints.
+                                                              (line  76)
+* set tdesc filename:                    Retrieving Descriptions.
+                                                              (line  18)
+* set tracepoint:                        Create and Delete Tracepoints.
+                                                              (line   6)
+* setting variables:                     Assignment.          (line   6)
+* setting watchpoints:                   Set Watchpoints.     (line   6)
+* SH:                                    Remote Stub.         (line  63)
+* sh-stub.c:                             Remote Stub.         (line  63)
+* shared libraries:                      Files.               (line 281)
+* shared library events, remote reply:   Stop Reply Packets.  (line  56)
+* shell escape:                          Shell Commands.      (line  10)
+* show all convenience functions:        Convenience Vars.    (line 116)
+* show all user variables:               Convenience Vars.    (line  37)
+* show last commands:                    Command History.     (line  78)
+* show tdesc filename:                   Retrieving Descriptions.
+                                                              (line  25)
+* signals:                               Signals.             (line   6)
+* signals the inferior may see, remote request: General Query Packets.
+                                                              (line 303)
+* SIGQUIT signal, dump core of GDB:      Maintenance Commands.
+                                                              (line 107)
+* simulator, Z8000:                      Z8000.               (line   6)
+* size of remote memory accesses:        Packets.             (line 235)
+* size of screen:                        Screen Size.         (line   6)
+* skipping over functions and files:     Skipping Over Functions and Files.
+                                                              (line   6)
+* snapshot of a process:                 Checkpoint/Restart.  (line   6)
+* software watchpoints:                  Set Watchpoints.     (line  31)
+* source file and line of a symbol:      Print Settings.      (line  51)
+* source line and its code address:      Machine Code.        (line   6)
+* source path:                           Source Path.         (line   6)
+* Sparc:                                 Remote Stub.         (line  66)
+* sparc-stub.c:                          Remote Stub.         (line  66)
+* sparcl-stub.c:                         Remote Stub.         (line  69)
+* Sparclet:                              Sparclet.            (line   6)
+* SparcLite:                             Remote Stub.         (line  69)
+* Special Fortran commands:              Special Fortran Commands.
+                                                              (line   6)
+* specifying location:                   Specify Location.    (line   6)
+* SPU:                                   SPU.                 (line   6)
+* SSE registers (x86):                   Registers.           (line  71)
+* stack frame:                           Frames.              (line   6)
+* stack on Alpha:                        MIPS.                (line   6)
+* stack on MIPS:                         MIPS.                (line   6)
+* stack pointer register:                Registers.           (line  26)
+* stacking targets:                      Active Targets.      (line   6)
+* standard registers:                    Registers.           (line  26)
+* start a new trace experiment:          Starting and Stopping Trace Experiments.
+                                                              (line   6)
+* starting:                              Starting.            (line   6)
+* startup code, and backtrace:           Backtrace.           (line  93)
+* stat, file-i/o system call:            stat/fstat.          (line   6)
+* static members of C++ objects:         Print Settings.      (line 464)
+* static members of Pascal objects:      Print Settings.      (line 475)
+* static probe point, SystemTap:         Static Probe Points. (line   6)
+* static tracepoints:                    Set Tracepoints.     (line  28)
+* static tracepoints, in remote protocol: General Query Packets.
+                                                              (line 669)
+* static tracepoints, setting:           Create and Delete Tracepoints.
+                                                              (line  76)
+* status of trace data collection:       Starting and Stopping Trace Experiments.
+                                                              (line  27)
+* status output in GDB/MI:               GDB/MI Output Syntax.
+                                                              (line  94)
+* stepping:                              Continuing and Stepping.
+                                                              (line   6)
+* stepping into functions with no line info: Continuing and Stepping.
+                                                              (line  93)
+* stop a running trace experiment:       Starting and Stopping Trace Experiments.
+                                                              (line  16)
+* stop on C++ exceptions:                Set Catchpoints.     (line  13)
+* stop reply packets:                    Stop Reply Packets.  (line   6)
+* stopped threads:                       Thread Stops.        (line   6)
+* stream records in GDB/MI:              GDB/MI Stream Records.
+                                                              (line   6)
+* string tracing, in remote protocol:    General Query Packets.
+                                                              (line 681)
+* struct gdb_reader_funcs:               Writing JIT Debug Info Readers.
+                                                              (line  22)
+* struct gdb_symbol_callbacks:           Writing JIT Debug Info Readers.
+                                                              (line  43)
+* struct gdb_unwind_callbacks:           Writing JIT Debug Info Readers.
+                                                              (line  43)
+* struct return convention:              i386.                (line   7)
+* struct stat, in file-i/o protocol:     struct stat.         (line   6)
+* struct timeval, in file-i/o protocol:  struct timeval.      (line   6)
+* struct user contents:                  OS Information.      (line   9)
+* struct/union returned in registers:    i386.                (line   7)
+* structure field name completion:       Completion.          (line  96)
+* stub example, remote debugging:        Remote Stub.         (line   6)
+* stupid questions:                      Messages/Warnings.   (line  50)
+* Super-H:                               Super-H.             (line   6)
+* supported packets, remote query:       General Query Packets.
+                                                              (line 401)
+* switching threads:                     Threads.             (line   6)
+* switching threads automatically:       All-Stop Mode.       (line  28)
+* symbol decoding style, C++:            Print Settings.      (line 413)
+* symbol dump:                           Symbols.             (line 278)
+* symbol from address:                   Symbols.             (line  54)
+* symbol lookup, remote request:         General Query Packets.
+                                                              (line 691)
+* symbol names:                          Symbols.             (line  14)
+* symbol table:                          Files.               (line   6)
+* symbol table creation:                 Debugging Output.    (line 165)
+* symbol tables in python:               Symbol Tables In Python.
+                                                              (line   6)
+* symbol tables, listing GDB's internal: Symbols.             (line 297)
+* symbol, source file and line:          Print Settings.      (line  51)
+* symbols in python:                     Symbols In Python.   (line   6)
+* symbols, reading from relocatable object files: Files.      (line 132)
+* symbols, reading immediately:          Files.               (line  90)
+* synchronize with remote MIPS target:   MIPS Embedded.       (line  98)
+* syscall DSO:                           Files.               (line 162)
+* system calls and thread breakpoints:   Interrupted System Calls.
+                                                              (line   6)
+* system root, alternate:                Files.               (line 379)
+* system, file-i/o system call:          system.              (line   6)
+* system-wide init file:                 System-wide configuration.
+                                                              (line   6)
+* T packet:                              Packets.             (line 329)
+* t packet:                              Packets.             (line 324)
+* T packet reply:                        Stop Reply Packets.  (line  22)
+* tail call frames, debugging:           Tail Call Frames.    (line   6)
+* target architecture:                   Targets.             (line  17)
+* target byte order:                     Byte Order.          (line   6)
+* target character set:                  Character Sets.      (line   6)
+* target debugging info:                 Debugging Output.    (line 172)
+* target descriptions:                   Target Descriptions. (line   6)
+* target descriptions, ARM features:     ARM Features.        (line   6)
+* target descriptions, i386 features:    i386 Features.       (line   6)
+* target descriptions, inclusion:        Target Description Format.
+                                                              (line  54)
+* target descriptions, M68K features:    M68K Features.       (line   6)
+* target descriptions, MIPS features:    MIPS Features.       (line   6)
+* target descriptions, PowerPC features: PowerPC Features.    (line   6)
+* target descriptions, predefined types: Predefined Target Types.
+                                                              (line   6)
+* target descriptions, standard features: Standard Target Features.
+                                                              (line   6)
+* target descriptions, TIC6x features:   TIC6x Features.      (line   6)
+* target descriptions, TMS320C6x features: TIC6x Features.    (line   6)
+* target descriptions, XML format:       Target Description Format.
+                                                              (line   6)
+* target output in GDB/MI:               GDB/MI Output Syntax.
+                                                              (line 110)
+* target remote:                         Connecting.          (line  11)
+* target stack description:              Maintenance Commands.
+                                                              (line 248)
+* task attributes (GNU Hurd):            Hurd Native.         (line  49)
+* task breakpoints, in Ada:              Ada Tasks.           (line 135)
+* task exception port, GNU Hurd:         Hurd Native.         (line  68)
+* task suspend count:                    Hurd Native.         (line  60)
+* task switching with program using Ravenscar Profile: Ravenscar Profile.
+                                                              (line  10)
+* TCP port, target remote:               Connecting.          (line  29)
+* terminal:                              Input/Output.        (line   6)
+* Text User Interface:                   TUI.                 (line   6)
+* thread attributes info, remote request: General Query Packets.
+                                                              (line 737)
+* thread breakpoints:                    Thread-Specific Breakpoints.
+                                                              (line  10)
+* thread breakpoints and system calls:   Interrupted System Calls.
+                                                              (line   6)
+* thread default settings, GNU Hurd:     Hurd Native.         (line 131)
+* thread identifier (GDB):               Threads.             (line  63)
+* thread identifier (system):            Threads.             (line  51)
+* thread info (Solaris):                 Threads.             (line  98)
+* thread information, remote request:    General Query Packets.
+                                                              (line 244)
+* thread list format:                    Thread List Format.  (line   6)
+* thread number:                         Threads.             (line  63)
+* thread properties, GNU Hurd:           Hurd Native.         (line  91)
+* thread suspend count, GNU Hurd:        Hurd Native.         (line 110)
+* THREAD-ID, in remote protocol:         Packets.             (line  20)
+* threads and watchpoints:               Set Watchpoints.     (line 180)
+* threads in python:                     Threads In Python.   (line   6)
+* threads of execution:                  Threads.             (line   6)
+* threads, automatic switching:          All-Stop Mode.       (line  28)
+* threads, continuing:                   Thread Stops.        (line   6)
+* threads, stopped:                      Thread Stops.        (line   6)
+* time of command execution:             Maintenance Commands.
+                                                              (line 340)
+* timeout for commands:                  Maintenance Commands.
+                                                              (line 371)
+* timeout for serial communications:     Remote Configuration.
+                                                              (line  65)
+* timeout, for remote target connection: Remote Configuration.
+                                                              (line 132)
+* timeout, MIPS protocol:                MIPS Embedded.       (line  83)
+* timestampping debugging info:          Debugging Output.    (line 183)
+* trace experiment, status of:           Starting and Stopping Trace Experiments.
+                                                              (line  27)
+* trace file format:                     Trace File Format.   (line   6)
+* trace files:                           Trace Files.         (line   6)
+* trace state variable value, remote request: Tracepoint Packets.
+                                                              (line 328)
+* trace state variables:                 Trace State Variables.
+                                                              (line   6)
+* traceback:                             Backtrace.           (line   6)
+* traceframe info format:                Traceframe Info Format.
+                                                              (line   6)
+* tracepoint actions:                    Tracepoint Actions.  (line   6)
+* tracepoint conditions:                 Tracepoint Conditions.
+                                                              (line   6)
+* tracepoint data, display:              tdump.               (line   6)
+* tracepoint deletion:                   Create and Delete Tracepoints.
+                                                              (line 126)
+* tracepoint number:                     Create and Delete Tracepoints.
+                                                              (line 123)
+* tracepoint packets:                    Tracepoint Packets.  (line   6)
+* tracepoint pass count:                 Tracepoint Passcounts.
+                                                              (line   6)
+* tracepoint restrictions:               Tracepoint Restrictions.
+                                                              (line   6)
+* tracepoint status, remote request:     Tracepoint Packets.  (line 316)
+* tracepoint variables:                  Tracepoint Variables.
+                                                              (line   6)
+* tracepoints:                           Tracepoints.         (line   6)
+* tracepoints support in gdbserver:      Server.              (line 257)
+* trailing underscore, in Fortran symbols: Fortran.           (line   9)
+* translating between character sets:    Character Sets.      (line   6)
+* TUI:                                   TUI.                 (line   6)
+* TUI commands:                          TUI Commands.        (line   6)
+* TUI configuration variables:           TUI Configuration.   (line   6)
+* TUI key bindings:                      TUI Keys.            (line   6)
+* TUI single key mode:                   TUI Single Key Mode. (line   6)
+* type casting memory:                   Expressions.         (line  43)
+* type chain of a data type:             Maintenance Commands.
+                                                              (line 260)
+* type checking:                         Checks.              (line  31)
+* type conversions in C++:               C Plus Plus Expressions.
+                                                              (line  26)
+* types in Python:                       Types In Python.     (line   6)
+* UDP port, target remote:               Connecting.          (line  49)
+* union field name completion:           Completion.          (line  96)
+* unions in structures, printing:        Print Settings.      (line 353)
+* unknown address, locating:             Output Formats.      (line  35)
+* unlink, file-i/o system call:          unlink.              (line   6)
+* unlinked object files:                 Files.               (line  26)
+* unload symbols from shared libraries:  Files.               (line 341)
+* unmap an overlay:                      Overlay Commands.    (line  39)
+* unmapped overlays:                     How Overlays Work.   (line   6)
+* unset tdesc filename:                  Retrieving Descriptions.
+                                                              (line  21)
+* unsupported languages:                 Unsupported Languages.
+                                                              (line   6)
+* unwind stack in called functions:      Calling.             (line  35)
+* unwind stack in called functions with unhandled exceptions: Calling.
+                                                              (line  46)
+* use only software watchpoints:         Set Watchpoints.     (line 108)
+* user-defined command:                  Define.              (line   6)
+* user-defined macros:                   Macros.              (line  59)
+* user-defined variables:                Convenience Vars.    (line   6)
+* value history:                         Value History.       (line   6)
+* values from inferior, with Python:     Values From Inferior.
+                                                              (line   6)
+* variable name conflict:                Variables.           (line  36)
+* variable object debugging info:        Debugging Output.    (line 192)
+* variable objects in GDB/MI:            GDB/MI Variable Objects.
+                                                              (line   9)
+* variable values, wrong:                Variables.           (line  94)
+* variables, readline:                   Readline Init File Syntax.
+                                                              (line  34)
+* variables, setting:                    Assignment.          (line  16)
+* vAttach packet:                        Packets.             (line 344)
+* vCont packet:                          Packets.             (line 364)
+* vCont? packet:                         Packets.             (line 411)
+* vector unit:                           Vector Unit.         (line   6)
+* vector, auxiliary:                     OS Information.      (line  21)
+* verbose operation:                     Messages/Warnings.   (line   6)
+* verify remote memory image:            Memory.              (line 123)
+* vFile packet:                          Packets.             (line 422)
+* vFlashDone packet:                     Packets.             (line 465)
+* vFlashErase packet:                    Packets.             (line 426)
+* vFlashWrite packet:                    Packets.             (line 443)
+* virtual functions (C++) display:       Print Settings.      (line 486)
+* vKill packet:                          Packets.             (line 473)
+* vRun packet:                           Packets.             (line 486)
+* vStopped packet:                       Packets.             (line 503)
+* VTBL display:                          Print Settings.      (line 486)
+* VxWorks:                               VxWorks.             (line   6)
+* watchdog timer:                        Maintenance Commands.
+                                                              (line 371)
+* watchpoints:                           Breakpoints.         (line  20)
+* watchpoints and threads:               Set Watchpoints.     (line 180)
+* weak alias functions:                  Calling.             (line  58)
+* where to look for shared libraries:    Files.               (line 374)
+* wild pointer, interpreting:            Print Settings.      (line  79)
+* word completion:                       Completion.          (line   6)
+* working directory:                     Source Path.         (line 108)
+* working directory (of your program):   Working Directory.   (line   6)
+* working language:                      Languages.           (line  13)
+* write data into object, remote request: General Query Packets.
+                                                              (line 941)
+* write, file-i/o system call:           write.               (line   6)
+* writing a pretty-printer:              Writing a Pretty-Printer.
+                                                              (line   6)
+* writing convenience functions:         Functions In Python. (line   6)
+* writing into corefiles:                Patching.            (line   6)
+* writing into executables:              Patching.            (line   6)
+* writing JIT debug info readers:        Writing JIT Debug Info Readers.
+                                                              (line   6)
+* wrong values:                          Variables.           (line  94)
+* x command, default address:            Machine Code.        (line  30)
+* X packet:                              Packets.             (line 515)
+* Xilinx MicroBlaze:                     MicroBlaze.          (line   6)
+* XInclude:                              Target Description Format.
+                                                              (line  54)
+* XMD, Xilinx Microprocessor Debugger:   MicroBlaze.          (line   6)
+* XML parser debugging:                  Debugging Output.    (line 200)
+* yanking text:                          Readline Killing Commands.
+                                                              (line   6)
+* z packet:                              Packets.             (line 528)
+* Z packets:                             Packets.             (line 528)
+* Z0 packet:                             Packets.             (line 543)
+* z0 packet:                             Packets.             (line 543)
+* Z1 packet:                             Packets.             (line 598)
+* z1 packet:                             Packets.             (line 598)
+* Z2 packet:                             Packets.             (line 620)
+* z2 packet:                             Packets.             (line 620)
+* Z3 packet:                             Packets.             (line 635)
+* z3 packet:                             Packets.             (line 635)
+* Z4 packet:                             Packets.             (line 650)
+* z4 packet:                             Packets.             (line 650)
+* Z8000:                                 Z8000.               (line   6)
+* Zilog Z8000 simulator:                 Z8000.               (line   6)
+* {TYPE}:                                Expressions.         (line  43)
+
+
+File: gdb.info,  Node: Command and Variable Index,  Prev: Concept Index,  Up: Top
+
+Command, Variable, and Function Index
+*************************************
+
+ [index ]
+* Menu:
+
+* !:                                     Shell Commands.      (line  10)
+* # (a comment):                         Command Syntax.      (line  38)
+* $_, convenience variable:              Convenience Vars.    (line  64)
+* $__, convenience variable:             Convenience Vars.    (line  73)
+* $_exitcode, convenience variable:      Convenience Vars.    (line  79)
+* $_probe_arg, convenience variable:     Static Probe Points. (line  46)
+* $_sdata, collect:                      Tracepoint Actions.  (line  78)
+* $_sdata, inspect, convenience variable: Convenience Vars.   (line  87)
+* $_siginfo, convenience variable:       Convenience Vars.    (line  93)
+* $_thread, convenience variable:        Threads.             (line 116)
+* $_tlb, convenience variable:           Convenience Vars.    (line  99)
+* $bpnum, convenience variable:          Set Breaks.          (line   6)
+* $cdir, convenience variable:           Source Path.         (line 108)
+* $cwd, convenience variable:            Source Path.         (line 108)
+* $tpnum:                                Create and Delete Tracepoints.
+                                                              (line 123)
+* $trace_file:                           Tracepoint Variables.
+                                                              (line  16)
+* $trace_frame:                          Tracepoint Variables.
+                                                              (line   6)
+* $trace_func:                           Tracepoint Variables.
+                                                              (line  19)
+* $trace_line:                           Tracepoint Variables.
+                                                              (line  13)
+* $tracepoint:                           Tracepoint Variables.
+                                                              (line  10)
+* -ada-task-info:                        GDB/MI Ada Tasking Commands.
+                                                              (line   9)
+* -add-inferior:                         GDB/MI Miscellaneous Commands.
+                                                              (line 366)
+* -break-after:                          GDB/MI Breakpoint Commands.
+                                                              (line  11)
+* -break-commands:                       GDB/MI Breakpoint Commands.
+                                                              (line  55)
+* -break-condition:                      GDB/MI Breakpoint Commands.
+                                                              (line  88)
+* -break-delete:                         GDB/MI Breakpoint Commands.
+                                                              (line 125)
+* -break-disable:                        GDB/MI Breakpoint Commands.
+                                                              (line 159)
+* -break-enable:                         GDB/MI Breakpoint Commands.
+                                                              (line 195)
+* -break-info:                           GDB/MI Breakpoint Commands.
+                                                              (line 230)
+* -break-insert:                         GDB/MI Breakpoint Commands.
+                                                              (line 250)
+* -break-list:                           GDB/MI Breakpoint Commands.
+                                                              (line 353)
+* -break-passcount:                      GDB/MI Breakpoint Commands.
+                                                              (line 428)
+* -break-watch:                          GDB/MI Breakpoint Commands.
+                                                              (line 440)
+* -data-disassemble:                     GDB/MI Data Manipulation.
+                                                              (line  12)
+* -data-evaluate-expression:             GDB/MI Data Manipulation.
+                                                              (line 141)
+* -data-list-changed-registers:          GDB/MI Data Manipulation.
+                                                              (line 179)
+* -data-list-register-names:             GDB/MI Data Manipulation.
+                                                              (line 215)
+* -data-list-register-values:            GDB/MI Data Manipulation.
+                                                              (line 255)
+* -data-read-memory:                     GDB/MI Data Manipulation.
+                                                              (line 345)
+* -data-read-memory-bytes:               GDB/MI Data Manipulation.
+                                                              (line 452)
+* -data-write-memory-bytes:              GDB/MI Data Manipulation.
+                                                              (line 527)
+* -enable-pretty-printing:               GDB/MI Variable Objects.
+                                                              (line 116)
+* -enable-timings:                       GDB/MI Miscellaneous Commands.
+                                                              (line 463)
+* -environment-cd:                       GDB/MI Program Context.
+                                                              (line  33)
+* -environment-directory:                GDB/MI Program Context.
+                                                              (line  56)
+* -environment-path:                     GDB/MI Program Context.
+                                                              (line 100)
+* -environment-pwd:                      GDB/MI Program Context.
+                                                              (line 141)
+* -exec-arguments:                       GDB/MI Program Context.
+                                                              (line   9)
+* -exec-continue:                        GDB/MI Program Execution.
+                                                              (line  13)
+* -exec-finish:                          GDB/MI Program Execution.
+                                                              (line  56)
+* -exec-interrupt:                       GDB/MI Program Execution.
+                                                              (line  99)
+* -exec-jump:                            GDB/MI Program Execution.
+                                                              (line 149)
+* -exec-next:                            GDB/MI Program Execution.
+                                                              (line 173)
+* -exec-next-instruction:                GDB/MI Program Execution.
+                                                              (line 204)
+* -exec-return:                          GDB/MI Program Execution.
+                                                              (line 240)
+* -exec-run:                             GDB/MI Program Execution.
+                                                              (line 283)
+* -exec-step:                            GDB/MI Program Execution.
+                                                              (line 348)
+* -exec-step-instruction:                GDB/MI Program Execution.
+                                                              (line 390)
+* -exec-until:                           GDB/MI Program Execution.
+                                                              (line 431)
+* -file-exec-and-symbols:                GDB/MI File Commands.
+                                                              (line  12)
+* -file-exec-file:                       GDB/MI File Commands.
+                                                              (line  40)
+* -file-list-exec-source-file:           GDB/MI File Commands.
+                                                              (line  67)
+* -file-list-exec-source-files:          GDB/MI File Commands.
+                                                              (line  93)
+* -file-symbol-file:                     GDB/MI File Commands.
+                                                              (line 123)
+* -gdb-exit:                             GDB/MI Miscellaneous Commands.
+                                                              (line   9)
+* -gdb-set:                              GDB/MI Miscellaneous Commands.
+                                                              (line  31)
+* -gdb-show:                             GDB/MI Miscellaneous Commands.
+                                                              (line  54)
+* -gdb-version:                          GDB/MI Miscellaneous Commands.
+                                                              (line  77)
+* -inferior-tty-set:                     GDB/MI Miscellaneous Commands.
+                                                              (line 414)
+* -inferior-tty-show:                    GDB/MI Miscellaneous Commands.
+                                                              (line 437)
+* -info-os:                              GDB/MI Miscellaneous Commands.
+                                                              (line 294)
+* -interpreter-exec:                     GDB/MI Miscellaneous Commands.
+                                                              (line 388)
+* -list-features:                        GDB/MI Miscellaneous Commands.
+                                                              (line 111)
+* -list-target-features:                 GDB/MI Miscellaneous Commands.
+                                                              (line 160)
+* -list-thread-groups:                   GDB/MI Miscellaneous Commands.
+                                                              (line 186)
+* -stack-info-depth:                     GDB/MI Stack Manipulation.
+                                                              (line  35)
+* -stack-info-frame:                     GDB/MI Stack Manipulation.
+                                                              (line   9)
+* -stack-list-arguments:                 GDB/MI Stack Manipulation.
+                                                              (line  73)
+* -stack-list-frames:                    GDB/MI Stack Manipulation.
+                                                              (line 162)
+* -stack-list-locals:                    GDB/MI Stack Manipulation.
+                                                              (line 265)
+* -stack-list-variables:                 GDB/MI Stack Manipulation.
+                                                              (line 305)
+* -stack-select-frame:                   GDB/MI Stack Manipulation.
+                                                              (line 328)
+* -symbol-list-lines:                    GDB/MI Symbol Query. (line   9)
+* -target-attach:                        GDB/MI Target Manipulation.
+                                                              (line   9)
+* -target-detach:                        GDB/MI Target Manipulation.
+                                                              (line  36)
+* -target-disconnect:                    GDB/MI Target Manipulation.
+                                                              (line  61)
+* -target-download:                      GDB/MI Target Manipulation.
+                                                              (line  85)
+* -target-file-delete:                   GDB/MI File Transfer Commands.
+                                                              (line  57)
+* -target-file-get:                      GDB/MI File Transfer Commands.
+                                                              (line  33)
+* -target-file-put:                      GDB/MI File Transfer Commands.
+                                                              (line   9)
+* -target-select:                        GDB/MI Target Manipulation.
+                                                              (line 198)
+* -thread-info:                          GDB/MI Thread Commands.
+                                                              (line   9)
+* -thread-list-ids:                      GDB/MI Thread Commands.
+                                                              (line  90)
+* -thread-select:                        GDB/MI Thread Commands.
+                                                              (line 118)
+* -trace-define-variable:                GDB/MI Tracepoint Commands.
+                                                              (line  83)
+* -trace-find:                           GDB/MI Tracepoint Commands.
+                                                              (line  12)
+* -trace-list-variables:                 GDB/MI Tracepoint Commands.
+                                                              (line 100)
+* -trace-save:                           GDB/MI Tracepoint Commands.
+                                                              (line 143)
+* -trace-start:                          GDB/MI Tracepoint Commands.
+                                                              (line 160)
+* -trace-status:                         GDB/MI Tracepoint Commands.
+                                                              (line 176)
+* -trace-stop:                           GDB/MI Tracepoint Commands.
+                                                              (line 244)
+* -var-assign:                           GDB/MI Variable Objects.
+                                                              (line 480)
+* -var-create:                           GDB/MI Variable Objects.
+                                                              (line 134)
+* -var-delete:                           GDB/MI Variable Objects.
+                                                              (line 223)
+* -var-evaluate-expression:              GDB/MI Variable Objects.
+                                                              (line 459)
+* -var-info-expression:                  GDB/MI Variable Objects.
+                                                              (line 397)
+* -var-info-num-children:                GDB/MI Variable Objects.
+                                                              (line 272)
+* -var-info-path-expression:             GDB/MI Variable Objects.
+                                                              (line 421)
+* -var-info-type:                        GDB/MI Variable Objects.
+                                                              (line 384)
+* -var-list-children:                    GDB/MI Variable Objects.
+                                                              (line 288)
+* -var-set-format:                       GDB/MI Variable Objects.
+                                                              (line 236)
+* -var-set-frozen:                       GDB/MI Variable Objects.
+                                                              (line 624)
+* -var-set-update-range:                 GDB/MI Variable Objects.
+                                                              (line 650)
+* -var-set-visualizer:                   GDB/MI Variable Objects.
+                                                              (line 673)
+* -var-show-attributes:                  GDB/MI Variable Objects.
+                                                              (line 445)
+* -var-show-format:                      GDB/MI Variable Objects.
+                                                              (line 259)
+* -var-update:                           GDB/MI Variable Objects.
+                                                              (line 504)
+* @, referencing memory as an array:     Arrays.              (line   6)
+* ^connected:                            GDB/MI Result Records.
+                                                              (line  22)
+* ^done:                                 GDB/MI Result Records.
+                                                              (line   9)
+* ^error:                                GDB/MI Result Records.
+                                                              (line  25)
+* ^exit:                                 GDB/MI Result Records.
+                                                              (line  29)
+* ^running:                              GDB/MI Result Records.
+                                                              (line  14)
+* abort (C-g):                           Miscellaneous Commands.
+                                                              (line  10)
+* accept-line (Newline or Return):       Commands For History.
+                                                              (line   6)
+* actions:                               Tracepoint Actions.  (line   6)
+* add-auto-load-safe-path:               Auto-loading safe path.
+                                                              (line  45)
+* add-inferior:                          Inferiors and Programs.
+                                                              (line  60)
+* add-shared-symbol-files:               Files.               (line 172)
+* add-symbol-file:                       Files.               (line 113)
+* add-symbol-file-from-memory:           Files.               (line 162)
+* advance LOCATION:                      Continuing and Stepping.
+                                                              (line 181)
+* alias:                                 Aliases.             (line  21)
+* append:                                Dump/Restore Files.  (line  35)
+* apropos:                               Help.                (line  62)
+* assf:                                  Files.               (line 172)
+* attach:                                Attach.              (line   6)
+* attach&:                               Background Execution.
+                                                              (line  38)
+* awatch:                                Set Watchpoints.     (line  83)
+* b (break):                             Set Breaks.          (line   6)
+* backtrace:                             Backtrace.           (line  11)
+* backward-char (C-b):                   Commands For Moving. (line  15)
+* backward-delete-char (Rubout):         Commands For Text.   (line  11)
+* backward-kill-line (C-x Rubout):       Commands For Killing.
+                                                              (line   9)
+* backward-kill-word (M-<DEL>):          Commands For Killing.
+                                                              (line  24)
+* backward-word (M-b):                   Commands For Moving. (line  22)
+* beginning-of-history (M-<):            Commands For History.
+                                                              (line  19)
+* beginning-of-line (C-a):               Commands For Moving. (line   6)
+* bell-style:                            Readline Init File Syntax.
+                                                              (line  35)
+* bind-tty-special-chars:                Readline Init File Syntax.
+                                                              (line  42)
+* Block.end:                             Blocks In Python.    (line  44)
+* Block.function:                        Blocks In Python.    (line  47)
+* Block.global_block:                    Blocks In Python.    (line  57)
+* Block.is_global:                       Blocks In Python.    (line  65)
+* Block.is_static:                       Blocks In Python.    (line  69)
+* Block.is_valid:                        Blocks In Python.    (line  30)
+* Block.start:                           Blocks In Python.    (line  40)
+* Block.static_block:                    Blocks In Python.    (line  61)
+* Block.superblock:                      Blocks In Python.    (line  52)
+* BP_ACCESS_WATCHPOINT:                  Breakpoints In Python.
+                                                              (line 139)
+* BP_BREAKPOINT:                         Breakpoints In Python.
+                                                              (line 127)
+* BP_HARDWARE_WATCHPOINT:                Breakpoints In Python.
+                                                              (line 133)
+* BP_READ_WATCHPOINT:                    Breakpoints In Python.
+                                                              (line 136)
+* BP_WATCHPOINT:                         Breakpoints In Python.
+                                                              (line 130)
+* break:                                 Set Breaks.          (line   6)
+* break ... task TASKNO (Ada):           Ada Tasks.           (line 135)
+* break ... thread THREADNO:             Thread-Specific Breakpoints.
+                                                              (line  10)
+* break, and Objective-C:                Method Names in Commands.
+                                                              (line   9)
+* break-range:                           PowerPC Embedded.    (line  41)
+* breakpoint annotation:                 Annotations for Running.
+                                                              (line  47)
+* Breakpoint.__init__:                   Breakpoints In Python.
+                                                              (line  10)
+* Breakpoint.commands:                   Breakpoints In Python.
+                                                              (line 165)
+* Breakpoint.condition:                  Breakpoints In Python.
+                                                              (line 160)
+* Breakpoint.delete:                     Breakpoints In Python.
+                                                              (line  78)
+* Breakpoint.enabled:                    Breakpoints In Python.
+                                                              (line  83)
+* Breakpoint.expression:                 Breakpoints In Python.
+                                                              (line 154)
+* Breakpoint.hit_count:                  Breakpoints In Python.
+                                                              (line 143)
+* Breakpoint.ignore_count:               Breakpoints In Python.
+                                                              (line 106)
+* Breakpoint.is_valid:                   Breakpoints In Python.
+                                                              (line  70)
+* Breakpoint.location:                   Breakpoints In Python.
+                                                              (line 148)
+* Breakpoint.number:                     Breakpoints In Python.
+                                                              (line 110)
+* Breakpoint.silent:                     Breakpoints In Python.
+                                                              (line  87)
+* Breakpoint.stop:                       Breakpoints In Python.
+                                                              (line  27)
+* Breakpoint.task:                       Breakpoints In Python.
+                                                              (line 100)
+* Breakpoint.thread:                     Breakpoints In Python.
+                                                              (line  95)
+* Breakpoint.type:                       Breakpoints In Python.
+                                                              (line 115)
+* Breakpoint.visible:                    Breakpoints In Python.
+                                                              (line 120)
+* BreakpointEvent.breakpoint:            Events In Python.    (line 113)
+* BreakpointEvent.breakpoints:           Events In Python.    (line 107)
+* breakpoints-invalid annotation:        Invalidation.        (line  13)
+* bt (backtrace):                        Backtrace.           (line  11)
+* c (continue):                          Continuing and Stepping.
+                                                              (line  15)
+* c (SingleKey TUI key):                 TUI Single Key Mode. (line  10)
+* C-L:                                   TUI Keys.            (line  65)
+* C-x 1:                                 TUI Keys.            (line  19)
+* C-x 2:                                 TUI Keys.            (line  26)
+* C-x A:                                 TUI Keys.            (line  12)
+* C-x a:                                 TUI Keys.            (line  11)
+* C-x C-a:                               TUI Keys.            (line  10)
+* C-x o:                                 TUI Keys.            (line  34)
+* C-x s:                                 TUI Keys.            (line  41)
+* call:                                  Calling.             (line  10)
+* call-last-kbd-macro (C-x e):           Keyboard Macros.     (line  13)
+* capitalize-word (M-c):                 Commands For Text.   (line  49)
+* catch:                                 Set Catchpoints.     (line  10)
+* cd:                                    Working Directory.   (line  16)
+* cdir:                                  Source Path.         (line 108)
+* character-search (C-]):                Miscellaneous Commands.
+                                                              (line  41)
+* character-search-backward (M-C-]):     Miscellaneous Commands.
+                                                              (line  46)
+* checkpoint:                            Checkpoint/Restart.  (line  26)
+* clear:                                 Delete Breaks.       (line  21)
+* clear, and Objective-C:                Method Names in Commands.
+                                                              (line   9)
+* clear-screen (C-l):                    Commands For Moving. (line  26)
+* clone-inferior:                        Inferiors and Programs.
+                                                              (line  67)
+* collect (tracepoints):                 Tracepoint Actions.  (line  49)
+* colon-colon, in Modula-2:              M2 Scope.            (line   6)
+* Command.__init__:                      Commands In Python.  (line  12)
+* Command.complete:                      Commands In Python.  (line  73)
+* Command.dont_repeat:                   Commands In Python.  (line  44)
+* Command.invoke:                        Commands In Python.  (line  50)
+* COMMAND_BREAKPOINTS:                   Commands In Python.  (line 145)
+* COMMAND_DATA:                          Commands In Python.  (line 115)
+* COMMAND_FILES:                         Commands In Python.  (line 126)
+* COMMAND_MAINTENANCE:                   Commands In Python.  (line 169)
+* COMMAND_NONE:                          Commands In Python.  (line 105)
+* COMMAND_OBSCURE:                       Commands In Python.  (line 163)
+* COMMAND_RUNNING:                       Commands In Python.  (line 109)
+* COMMAND_STACK:                         Commands In Python.  (line 120)
+* COMMAND_STATUS:                        Commands In Python.  (line 139)
+* COMMAND_SUPPORT:                       Commands In Python.  (line 132)
+* COMMAND_TRACEPOINTS:                   Commands In Python.  (line 151)
+* COMMAND_USER:                          Commands In Python.  (line 157)
+* commands:                              Break Commands.      (line  11)
+* commands annotation:                   Prompting.           (line  27)
+* comment-begin:                         Readline Init File Syntax.
+                                                              (line  47)
+* compare-sections:                      Memory.              (line 129)
+* complete:                              Help.                (line  77)
+* complete (<TAB>):                      Commands For Completion.
+                                                              (line   6)
+* COMPLETE_COMMAND:                      Commands In Python.  (line 190)
+* COMPLETE_FILENAME:                     Commands In Python.  (line 183)
+* COMPLETE_LOCATION:                     Commands In Python.  (line 186)
+* COMPLETE_NONE:                         Commands In Python.  (line 180)
+* COMPLETE_SYMBOL:                       Commands In Python.  (line 194)
+* completion-display-width:              Readline Init File Syntax.
+                                                              (line  52)
+* completion-ignore-case:                Readline Init File Syntax.
+                                                              (line  59)
+* completion-map-case:                   Readline Init File Syntax.
+                                                              (line  64)
+* completion-prefix-display-length:      Readline Init File Syntax.
+                                                              (line  70)
+* completion-query-items:                Readline Init File Syntax.
+                                                              (line  77)
+* condition:                             Conditions.          (line  58)
+* continue:                              Continuing and Stepping.
+                                                              (line  15)
+* continue&:                             Background Execution.
+                                                              (line  53)
+* convert-meta:                          Readline Init File Syntax.
+                                                              (line  87)
+* copy-backward-word ():                 Commands For Killing.
+                                                              (line  49)
+* copy-forward-word ():                  Commands For Killing.
+                                                              (line  54)
+* copy-region-as-kill ():                Commands For Killing.
+                                                              (line  45)
+* core-file:                             Files.               (line  97)
+* Ctrl-o (operate-and-get-next):         Command Syntax.      (line  42)
+* cwd:                                   Source Path.         (line 108)
+* d (delete):                            Delete Breaks.       (line  41)
+* d (SingleKey TUI key):                 TUI Single Key Mode. (line  13)
+* debug_chaos:                           M32R/D.              (line  50)
+* define:                                Define.              (line  37)
+* delete:                                Delete Breaks.       (line  41)
+* delete checkpoint CHECKPOINT-ID:       Checkpoint/Restart.  (line  56)
+* delete display:                        Auto Display.        (line  45)
+* delete mem:                            Memory Region Attributes.
+                                                              (line  34)
+* delete tracepoint:                     Create and Delete Tracepoints.
+                                                              (line 126)
+* delete tvariable:                      Trace State Variables.
+                                                              (line  42)
+* delete-char (C-d):                     Commands For Text.   (line   6)
+* delete-char-or-list ():                Commands For Completion.
+                                                              (line  39)
+* delete-horizontal-space ():            Commands For Killing.
+                                                              (line  37)
+* detach:                                Attach.              (line  36)
+* detach (remote):                       Connecting.          (line  91)
+* detach inferiors INFNO...:             Inferiors and Programs.
+                                                              (line  97)
+* digit-argument (M-0, M-1, ... M--):    Numeric Arguments.   (line   6)
+* dir:                                   Source Path.         (line  39)
+* directory:                             Source Path.         (line  39)
+* dis (disable):                         Disabling.           (line  41)
+* disable:                               Disabling.           (line  41)
+* disable display:                       Auto Display.        (line  56)
+* disable mem:                           Memory Region Attributes.
+                                                              (line  38)
+* disable pretty-printer:                Pretty-Printer Commands.
+                                                              (line  20)
+* disable tracepoint:                    Enable and Disable Tracepoints.
+                                                              (line   9)
+* disable-completion:                    Readline Init File Syntax.
+                                                              (line  93)
+* disassemble:                           Machine Code.        (line  36)
+* disconnect:                            Connecting.          (line  98)
+* display:                               Auto Display.        (line  23)
+* dll-symbols:                           Cygwin Native.       (line  38)
+* do (down):                             Selection.           (line  40)
+* do-uppercase-version (M-a, M-b, M-X, ...): Miscellaneous Commands.
+                                                              (line  14)
+* document:                              Define.              (line  49)
+* dont-repeat:                           Define.              (line  61)
+* Down:                                  TUI Keys.            (line  56)
+* down:                                  Selection.           (line  40)
+* down-silently:                         Selection.           (line  64)
+* downcase-word (M-l):                   Commands For Text.   (line  45)
+* dprintf:                               Dynamic Printf.      (line  26)
+* dprintf-style agent:                   Dynamic Printf.      (line  46)
+* dprintf-style call:                    Dynamic Printf.      (line  42)
+* dprintf-style gdb:                     Dynamic Printf.      (line  39)
+* dump:                                  Dump/Restore Files.  (line  13)
+* dump-functions ():                     Miscellaneous Commands.
+                                                              (line  70)
+* dump-macros ():                        Miscellaneous Commands.
+                                                              (line  82)
+* dump-variables ():                     Miscellaneous Commands.
+                                                              (line  76)
+* e (edit):                              Edit.                (line   6)
+* echo:                                  Output.              (line  12)
+* edit:                                  Edit.                (line   6)
+* editing-mode:                          Readline Init File Syntax.
+                                                              (line  98)
+* else:                                  Command Files.       (line  75)
+* enable:                                Disabling.           (line  48)
+* enable display:                        Auto Display.        (line  65)
+* enable mem:                            Memory Region Attributes.
+                                                              (line  42)
+* enable pretty-printer:                 Pretty-Printer Commands.
+                                                              (line  25)
+* enable tracepoint:                     Enable and Disable Tracepoints.
+                                                              (line  19)
+* enable-keypad:                         Readline Init File Syntax.
+                                                              (line 109)
+* end (breakpoint commands):             Break Commands.      (line  11)
+* end (if/else/while commands):          Command Files.       (line 104)
+* end (user-defined commands):           Define.              (line  49)
+* end-kbd-macro (C-x )):                 Keyboard Macros.     (line   9)
+* end-of-history (M->):                  Commands For History.
+                                                              (line  22)
+* end-of-line (C-e):                     Commands For Moving. (line   9)
+* error annotation:                      Errors.              (line  10)
+* error-begin annotation:                Errors.              (line  22)
+* eval:                                  Output.              (line 117)
+* EventRegistry.connect:                 Events In Python.    (line  20)
+* EventRegistry.disconnect:              Events In Python.    (line  25)
+* exceptionHandler:                      Bootstrapping.       (line  38)
+* exchange-point-and-mark (C-x C-x):     Miscellaneous Commands.
+                                                              (line  36)
+* exec-file:                             Files.               (line  39)
+* exited annotation:                     Annotations for Running.
+                                                              (line  18)
+* ExitedEvent:                           Events In Python.    (line  77)
+* ExitedEvent.exit_code:                 Events In Python.    (line  70)
+* expand-tilde:                          Readline Init File Syntax.
+                                                              (line 120)
+* explore:                               Data.                (line  36)
+* f (frame):                             Selection.           (line  11)
+* f (SingleKey TUI key):                 TUI Single Key Mode. (line  16)
+* fg (resume foreground execution):      Continuing and Stepping.
+                                                              (line  15)
+* file:                                  Files.               (line  16)
+* fin (finish):                          Continuing and Stepping.
+                                                              (line 110)
+* find:                                  Searching Memory.    (line   9)
+* finish:                                Continuing and Stepping.
+                                                              (line 110)
+* finish&:                               Background Execution.
+                                                              (line  56)
+* FinishBreakpoint.__init__:             Finish Breakpoints in Python.
+                                                              (line  15)
+* FinishBreakpoint.out_of_scope:         Finish Breakpoints in Python.
+                                                              (line  22)
+* FinishBreakpoint.return_value:         Finish Breakpoints in Python.
+                                                              (line  39)
+* flush_i_cache:                         Bootstrapping.       (line  60)
+* flushregs:                             Maintenance Commands.
+                                                              (line 220)
+* focus:                                 TUI Commands.        (line  40)
+* forward-backward-delete-char ():       Commands For Text.   (line  15)
+* forward-char (C-f):                    Commands For Moving. (line  12)
+* forward-search:                        Search.              (line   9)
+* forward-search-history (C-s):          Commands For History.
+                                                              (line  30)
+* forward-word (M-f):                    Commands For Moving. (line  18)
+* frame, command:                        Frames.              (line  45)
+* frame, selecting:                      Selection.           (line  11)
+* Frame.block:                           Frames In Python.    (line 131)
+* Frame.find_sal:                        Frames In Python.    (line 144)
+* Frame.function:                        Frames In Python.    (line 134)
+* Frame.is_valid:                        Frames In Python.    (line  37)
+* Frame.name:                            Frames In Python.    (line  44)
+* Frame.newer:                           Frames In Python.    (line 141)
+* Frame.older:                           Frames In Python.    (line 138)
+* Frame.pc:                              Frames In Python.    (line 128)
+* Frame.read_var:                        Frames In Python.    (line 148)
+* Frame.select:                          Frames In Python.    (line 156)
+* Frame.type:                            Frames In Python.    (line  48)
+* Frame.unwind_stop_reason:              Frames In Python.    (line  78)
+* frames-invalid annotation:             Invalidation.        (line   9)
+* ftrace:                                Create and Delete Tracepoints.
+                                                              (line  51)
+* Function:                              Functions In Python. (line   6)
+* Function.__init__:                     Functions In Python. (line  11)
+* Function.invoke:                       Functions In Python. (line  21)
+* gcore:                                 Core File Generation.
+                                                              (line  18)
+* gdb.Block:                             Blocks In Python.    (line   6)
+* gdb.block_for_pc:                      Blocks In Python.    (line  22)
+* gdb.BP_ACCESS_WATCHPOINT:              Breakpoints In Python.
+                                                              (line 139)
+* gdb.BP_BREAKPOINT:                     Breakpoints In Python.
+                                                              (line 127)
+* gdb.BP_HARDWARE_WATCHPOINT:            Breakpoints In Python.
+                                                              (line 133)
+* gdb.BP_READ_WATCHPOINT:                Breakpoints In Python.
+                                                              (line 136)
+* gdb.BP_WATCHPOINT:                     Breakpoints In Python.
+                                                              (line 130)
+* gdb.Breakpoint:                        Breakpoints In Python.
+                                                              (line   6)
+* gdb.breakpoints:                       Basic Python.        (line  31)
+* gdb.COMMAND_BREAKPOINTS:               Commands In Python.  (line 145)
+* gdb.COMMAND_DATA:                      Commands In Python.  (line 115)
+* gdb.COMMAND_FILES:                     Commands In Python.  (line 126)
+* gdb.COMMAND_MAINTENANCE:               Commands In Python.  (line 169)
+* gdb.COMMAND_NONE:                      Commands In Python.  (line 105)
+* gdb.COMMAND_OBSCURE:                   Commands In Python.  (line 163)
+* gdb.COMMAND_RUNNING:                   Commands In Python.  (line 109)
+* gdb.COMMAND_STACK:                     Commands In Python.  (line 120)
+* gdb.COMMAND_STATUS:                    Commands In Python.  (line 139)
+* gdb.COMMAND_SUPPORT:                   Commands In Python.  (line 132)
+* gdb.COMMAND_TRACEPOINTS:               Commands In Python.  (line 151)
+* gdb.COMMAND_USER:                      Commands In Python.  (line 157)
+* gdb.COMPLETE_COMMAND:                  Commands In Python.  (line 190)
+* gdb.COMPLETE_FILENAME:                 Commands In Python.  (line 183)
+* gdb.COMPLETE_LOCATION:                 Commands In Python.  (line 186)
+* gdb.COMPLETE_NONE:                     Commands In Python.  (line 180)
+* gdb.COMPLETE_SYMBOL:                   Commands In Python.  (line 194)
+* gdb.current_objfile:                   Objfiles In Python.  (line  15)
+* gdb.current_progspace:                 Progspaces In Python.
+                                                              (line  14)
+* gdb.decode_line:                       Basic Python.        (line 164)
+* gdb.default_visualizer:                Pretty Printing API. (line  85)
+* gdb.error:                             Exception Handling.  (line  22)
+* gdb.execute:                           Basic Python.        (line  14)
+* gdb.find_pc_line:                      Basic Python.        (line  69)
+* gdb.FinishBreakpoint:                  Finish Breakpoints in Python.
+                                                              (line   6)
+* gdb.flush:                             Basic Python.        (line 128)
+* gdb.frame_stop_reason_string:          Frames In Python.    (line  30)
+* gdb.Function:                          Functions In Python. (line   6)
+* gdb.GdbError:                          Exception Handling.  (line  42)
+* gdb.history:                           Basic Python.        (line  46)
+* gdb.Inferior:                          Inferiors In Python. (line   6)
+* gdb.inferiors:                         Inferiors In Python. (line  15)
+* gdb.InferiorThread:                    Threads In Python.   (line   6)
+* gdb.LazyString:                        Lazy Strings In Python.
+                                                              (line   6)
+* gdb.lookup_global_symbol:              Symbols In Python.   (line  33)
+* gdb.lookup_symbol:                     Symbols In Python.   (line  13)
+* gdb.lookup_type:                       Types In Python.     (line  11)
+* gdb.MemoryError:                       Exception Handling.  (line  30)
+* gdb.newest_frame:                      Frames In Python.    (line  26)
+* gdb.Objfile:                           Objfiles In Python.  (line   6)
+* gdb.objfiles:                          Objfiles In Python.  (line  21)
+* gdb.PARAM_AUTO_BOOLEAN:                Parameters In Python.
+                                                              (line  93)
+* gdb.PARAM_BOOLEAN:                     Parameters In Python.
+                                                              (line  89)
+* gdb.PARAM_ENUM:                        Parameters In Python.
+                                                              (line 127)
+* gdb.PARAM_FILENAME:                    Parameters In Python.
+                                                              (line 119)
+* gdb.PARAM_INTEGER:                     Parameters In Python.
+                                                              (line 102)
+* gdb.PARAM_OPTIONAL_FILENAME:           Parameters In Python.
+                                                              (line 116)
+* gdb.PARAM_STRING:                      Parameters In Python.
+                                                              (line 106)
+* gdb.PARAM_STRING_NOESCAPE:             Parameters In Python.
+                                                              (line 112)
+* gdb.PARAM_UINTEGER:                    Parameters In Python.
+                                                              (line  98)
+* gdb.PARAM_ZINTEGER:                    Parameters In Python.
+                                                              (line 123)
+* gdb.Parameter:                         Parameters In Python.
+                                                              (line   6)
+* gdb.parameter:                         Basic Python.        (line  35)
+* gdb.parse_and_eval:                    Basic Python.        (line  58)
+* gdb.post_event:                        Basic Python.        (line  76)
+* gdb.Progspace:                         Progspaces In Python.
+                                                              (line   6)
+* gdb.progspaces:                        Progspaces In Python.
+                                                              (line  18)
+* gdb.prompt_hook:                       Basic Python.        (line 177)
+* gdb.PYTHONDIR:                         Basic Python.        (line  11)
+* gdb.search_memory:                     Inferiors In Python. (line  60)
+* gdb.selected_frame:                    Frames In Python.    (line  22)
+* gdb.selected_inferior:                 Inferiors In Python. (line  18)
+* gdb.selected_thread:                   Threads In Python.   (line  13)
+* gdb.solib_name:                        Basic Python.        (line 160)
+* gdb.STDERR:                            Basic Python.        (line 118)
+* gdb.STDLOG:                            Basic Python.        (line 121)
+* gdb.STDOUT:                            Basic Python.        (line 115)
+* gdb.string_to_argv:                    Commands In Python.  (line  62)
+* gdb.Symbol:                            Symbols In Python.   (line   6)
+* gdb.SYMBOL_FUNCTIONS_DOMAIN:           Symbols In Python.   (line 135)
+* gdb.SYMBOL_LABEL_DOMAIN:               Symbols In Python.   (line 128)
+* gdb.SYMBOL_LOC_ARG:                    Symbols In Python.   (line 157)
+* gdb.SYMBOL_LOC_BLOCK:                  Symbols In Python.   (line 178)
+* gdb.SYMBOL_LOC_COMPUTED:               Symbols In Python.   (line 192)
+* gdb.SYMBOL_LOC_CONST:                  Symbols In Python.   (line 148)
+* gdb.SYMBOL_LOC_CONST_BYTES:            Symbols In Python.   (line 181)
+* gdb.SYMBOL_LOC_LOCAL:                  Symbols In Python.   (line 171)
+* gdb.SYMBOL_LOC_OPTIMIZED_OUT:          Symbols In Python.   (line 189)
+* gdb.SYMBOL_LOC_REF_ARG:                Symbols In Python.   (line 161)
+* gdb.SYMBOL_LOC_REGISTER:               Symbols In Python.   (line 154)
+* gdb.SYMBOL_LOC_REGPARM_ADDR:           Symbols In Python.   (line 166)
+* gdb.SYMBOL_LOC_STATIC:                 Symbols In Python.   (line 151)
+* gdb.SYMBOL_LOC_TYPEDEF:                Symbols In Python.   (line 174)
+* gdb.SYMBOL_LOC_UNDEF:                  Symbols In Python.   (line 146)
+* gdb.SYMBOL_LOC_UNRESOLVED:             Symbols In Python.   (line 184)
+* gdb.SYMBOL_STRUCT_DOMAIN:              Symbols In Python.   (line 125)
+* gdb.SYMBOL_TYPES_DOMAIN:               Symbols In Python.   (line 138)
+* gdb.SYMBOL_UNDEF_DOMAIN:               Symbols In Python.   (line 118)
+* gdb.SYMBOL_VAR_DOMAIN:                 Symbols In Python.   (line 121)
+* gdb.SYMBOL_VARIABLES_DOMAIN:           Symbols In Python.   (line 131)
+* gdb.Symtab:                            Symbol Tables In Python.
+                                                              (line   6)
+* gdb.Symtab_and_line:                   Symbol Tables In Python.
+                                                              (line   6)
+* gdb.target_charset:                    Basic Python.        (line 149)
+* gdb.target_wide_charset:               Basic Python.        (line 154)
+* gdb.Type:                              Types In Python.     (line   6)
+* gdb.TYPE_CODE_ARRAY:                   Types In Python.     (line 167)
+* gdb.TYPE_CODE_BITSTRING:               Types In Python.     (line 205)
+* gdb.TYPE_CODE_BOOL:                    Types In Python.     (line 226)
+* gdb.TYPE_CODE_CHAR:                    Types In Python.     (line 223)
+* gdb.TYPE_CODE_COMPLEX:                 Types In Python.     (line 229)
+* gdb.TYPE_CODE_DECFLOAT:                Types In Python.     (line 238)
+* gdb.TYPE_CODE_ENUM:                    Types In Python.     (line 176)
+* gdb.TYPE_CODE_ERROR:                   Types In Python.     (line 208)
+* gdb.TYPE_CODE_FLAGS:                   Types In Python.     (line 179)
+* gdb.TYPE_CODE_FLT:                     Types In Python.     (line 188)
+* gdb.TYPE_CODE_FUNC:                    Types In Python.     (line 182)
+* gdb.TYPE_CODE_INT:                     Types In Python.     (line 185)
+* gdb.TYPE_CODE_INTERNAL_FUNCTION:       Types In Python.     (line 241)
+* gdb.TYPE_CODE_MEMBERPTR:               Types In Python.     (line 217)
+* gdb.TYPE_CODE_METHOD:                  Types In Python.     (line 211)
+* gdb.TYPE_CODE_METHODPTR:               Types In Python.     (line 214)
+* gdb.TYPE_CODE_NAMESPACE:               Types In Python.     (line 235)
+* gdb.TYPE_CODE_PTR:                     Types In Python.     (line 164)
+* gdb.TYPE_CODE_RANGE:                   Types In Python.     (line 197)
+* gdb.TYPE_CODE_REF:                     Types In Python.     (line 220)
+* gdb.TYPE_CODE_SET:                     Types In Python.     (line 194)
+* gdb.TYPE_CODE_STRING:                  Types In Python.     (line 200)
+* gdb.TYPE_CODE_STRUCT:                  Types In Python.     (line 170)
+* gdb.TYPE_CODE_TYPEDEF:                 Types In Python.     (line 232)
+* gdb.TYPE_CODE_UNION:                   Types In Python.     (line 173)
+* gdb.TYPE_CODE_VOID:                    Types In Python.     (line 191)
+* gdb.WP_ACCESS:                         Breakpoints In Python.
+                                                              (line  66)
+* gdb.WP_READ:                           Breakpoints In Python.
+                                                              (line  60)
+* gdb.WP_WRITE:                          Breakpoints In Python.
+                                                              (line  63)
+* gdb.write:                             Basic Python.        (line 110)
+* gdb_init_reader:                       Writing JIT Debug Info Readers.
+                                                              (line  20)
+* gdbserver:                             Server.              (line   6)
+* generate-core-file:                    Core File Generation.
+                                                              (line  18)
+* getDebugChar:                          Bootstrapping.       (line  14)
+* gnu_debuglink_crc32:                   Separate Debug Files.
+                                                              (line 166)
+* h (help):                              Help.                (line   9)
+* handle:                                Signals.             (line  45)
+* handle_exception:                      Stub Contents.       (line  15)
+* hbreak:                                Set Breaks.          (line  62)
+* help:                                  Help.                (line   6)
+* help function:                         Convenience Vars.    (line 116)
+* help target:                           Target Commands.     (line  19)
+* help user-defined:                     Define.              (line  66)
+* history-preserve-point:                Readline Init File Syntax.
+                                                              (line 124)
+* history-search-backward ():            Commands For History.
+                                                              (line  50)
+* history-search-forward ():             Commands For History.
+                                                              (line  45)
+* history-size:                          Readline Init File Syntax.
+                                                              (line 130)
+* hook:                                  Hooks.               (line   6)
+* hookpost:                              Hooks.               (line  11)
+* horizontal-scroll-mode:                Readline Init File Syntax.
+                                                              (line 135)
+* htrace:                                OpenRISC 1000.       (line  69)
+* hwatch:                                OpenRISC 1000.       (line  59)
+* i (info):                              Help.                (line 100)
+* if:                                    Command Files.       (line  75)
+* ignore:                                Conditions.          (line  90)
+* INCLUDE_RDB:                           VxWorks.             (line  33)
+* inferior INFNO:                        Inferiors and Programs.
+                                                              (line  49)
+* Inferior.is_valid:                     Inferiors In Python. (line  36)
+* Inferior.num:                          Inferiors In Python. (line  23)
+* Inferior.pid:                          Inferiors In Python. (line  26)
+* Inferior.read_memory:                  Inferiors In Python. (line  47)
+* Inferior.search_memory:                Inferiors In Python. (line  61)
+* Inferior.threads:                      Inferiors In Python. (line  43)
+* Inferior.was_attached:                 Inferiors In Python. (line  30)
+* Inferior.write_memory:                 Inferiors In Python. (line  53)
+* InferiorThread.is_exited:              Threads In Python.   (line  61)
+* InferiorThread.is_running:             Threads In Python.   (line  58)
+* InferiorThread.is_stopped:             Threads In Python.   (line  55)
+* InferiorThread.is_valid:               Threads In Python.   (line  43)
+* InferiorThread.name:                   Threads In Python.   (line  20)
+* InferiorThread.num:                    Threads In Python.   (line  30)
+* InferiorThread.ptid:                   Threads In Python.   (line  33)
+* InferiorThread.switch:                 Threads In Python.   (line  51)
+* info:                                  Help.                (line 100)
+* info address:                          Symbols.             (line  44)
+* info all-registers:                    Registers.           (line  15)
+* info args:                             Frame Info.          (line  51)
+* info auto-load:                        Auto-loading.        (line  48)
+* info auto-load gdb-scripts:            objfile-gdb.gdb file.
+                                                              (line  24)
+* info auto-load libthread-db:           libthread_db.so.1 file.
+                                                              (line  30)
+* info auto-load local-gdbinit:          Init File in the Current Directory.
+                                                              (line  22)
+* info auto-load python-scripts:         Python Auto-loading. (line  24)
+* info auxv:                             OS Information.      (line  33)
+* info breakpoints:                      Set Breaks.          (line 128)
+* info checkpoints:                      Checkpoint/Restart.  (line  31)
+* info classes:                          Symbols.             (line 248)
+* info common:                           Special Fortran Commands.
+                                                              (line   9)
+* info copying:                          Help.                (line 137)
+* info dcache:                           Caching Remote Data. (line  34)
+* info display:                          Auto Display.        (line  78)
+* info dll:                              Cygwin Native.       (line  35)
+* info dos:                              DJGPP Native.        (line  15)
+* info extensions:                       Show.                (line  34)
+* info f (info frame):                   Frame Info.          (line  17)
+* info files:                            Files.               (line 191)
+* info float:                            Floating Point Hardware.
+                                                              (line   9)
+* info frame:                            Frame Info.          (line  17)
+* info frame, show the source language:  Show.                (line  15)
+* info functions:                        Symbols.             (line 227)
+* info handle:                           Signals.             (line  33)
+* info inferiors:                        Inferiors and Programs.
+                                                              (line  25)
+* info io_registers, AVR:                AVR.                 (line  10)
+* info line:                             Machine Code.        (line  14)
+* info line, and Objective-C:            Method Names in Commands.
+                                                              (line   9)
+* info locals:                           Frame Info.          (line  55)
+* info macro:                            Macros.              (line  47)
+* info macros:                           Macros.              (line  54)
+* info mem:                              Memory Region Attributes.
+                                                              (line  45)
+* info meminfo:                          SVR4 Process Information.
+                                                              (line  78)
+* info or1k spr:                         OpenRISC 1000.       (line  20)
+* info os:                               OS Information.      (line  50)
+* info os files:                         OS Information.      (line  81)
+* info os modules:                       OS Information.      (line 123)
+* info os msg:                           OS Information.      (line 112)
+* info os processes:                     OS Information.      (line  55)
+* info os procgroups:                    OS Information.      (line  64)
+* info os semaphores:                    OS Information.      (line 104)
+* info os shm:                           OS Information.      (line  94)
+* info os sockets:                       OS Information.      (line  87)
+* info os threads:                       OS Information.      (line  74)
+* info pidlist:                          SVR4 Process Information.
+                                                              (line  74)
+* info pretty-printer:                   Pretty-Printer Commands.
+                                                              (line   6)
+* info probes:                           Static Probe Points. (line  30)
+* info proc:                             SVR4 Process Information.
+                                                              (line  16)
+* info program:                          Stopping.            (line  18)
+* info record:                           Process Record and Replay.
+                                                              (line 137)
+* info registers:                        Registers.           (line  11)
+* info scope:                            Symbols.             (line 181)
+* info selectors:                        Symbols.             (line 254)
+* info serial:                           DJGPP Native.        (line 142)
+* info set:                              Help.                (line 120)
+* info share:                            Files.               (line 326)
+* info sharedlibrary:                    Files.               (line 326)
+* info signals:                          Signals.             (line  33)
+* info skip:                             Skipping Over Functions and Files.
+                                                              (line  56)
+* info source:                           Symbols.             (line 202)
+* info source, show the source language: Show.                (line  21)
+* info sources:                          Symbols.             (line 221)
+* info spu:                              SPU.                 (line  10)
+* info stack:                            Backtrace.           (line  34)
+* info static-tracepoint-markers:        Listing Static Tracepoint Markers.
+                                                              (line   6)
+* info symbol:                           Symbols.             (line  54)
+* info target:                           Files.               (line 191)
+* info task TASKNO:                      Ada Tasks.           (line  89)
+* info tasks:                            Ada Tasks.           (line   9)
+* info terminal:                         Input/Output.        (line  12)
+* info threads:                          Threads.             (line  66)
+* info tp [N...]:                        Listing Tracepoints. (line   6)
+* info tracepoints [N...]:               Listing Tracepoints. (line   6)
+* info tvariables:                       Trace State Variables.
+                                                              (line  37)
+* info types:                            Symbols.             (line 167)
+* info udot:                             OS Information.      (line  16)
+* info variables:                        Symbols.             (line 239)
+* info vector:                           Vector Unit.         (line   9)
+* info w32:                              Cygwin Native.       (line  19)
+* info warranty:                         Help.                (line 141)
+* info watchpoints [N...]:               Set Watchpoints.     (line  87)
+* info win:                              TUI Commands.        (line  18)
+* init-if-undefined:                     Convenience Vars.    (line  41)
+* input-meta:                            Readline Init File Syntax.
+                                                              (line 142)
+* insert-comment (M-#):                  Miscellaneous Commands.
+                                                              (line  60)
+* insert-completions (M-*):              Commands For Completion.
+                                                              (line  18)
+* inspect:                               Data.                (line   6)
+* interpreter-exec:                      Interpreters.        (line  43)
+* interrupt:                             Background Execution.
+                                                              (line  73)
+* isearch-terminators:                   Readline Init File Syntax.
+                                                              (line 149)
+* jit-reader-load:                       Using JIT Debug Info Readers.
+                                                              (line   6)
+* jit-reader-unload:                     Using JIT Debug Info Readers.
+                                                              (line   6)
+* jump:                                  Jumping.             (line  10)
+* jump, and Objective-C:                 Method Names in Commands.
+                                                              (line   9)
+* KeyboardInterrupt:                     Exception Handling.  (line  34)
+* keymap:                                Readline Init File Syntax.
+                                                              (line 156)
+* kill:                                  Kill Process.        (line   6)
+* kill inferiors INFNO...:               Inferiors and Programs.
+                                                              (line 103)
+* kill-line (C-k):                       Commands For Killing.
+                                                              (line   6)
+* kill-region ():                        Commands For Killing.
+                                                              (line  41)
+* kill-whole-line ():                    Commands For Killing.
+                                                              (line  15)
+* kill-word (M-d):                       Commands For Killing.
+                                                              (line  19)
+* kvm:                                   BSD libkvm Interface.
+                                                              (line  24)
+* l (list):                              List.                (line   6)
+* layout:                                TUI Commands.        (line  21)
+* LazyString.address:                    Lazy Strings In Python.
+                                                              (line  27)
+* LazyString.encoding:                   Lazy Strings In Python.
+                                                              (line  37)
+* LazyString.length:                     Lazy Strings In Python.
+                                                              (line  31)
+* LazyString.type:                       Lazy Strings In Python.
+                                                              (line  44)
+* LazyString.value:                      Lazy Strings In Python.
+                                                              (line  21)
+* Left:                                  TUI Keys.            (line  59)
+* list:                                  List.                (line   6)
+* list, and Objective-C:                 Method Names in Commands.
+                                                              (line   9)
+* load FILENAME:                         Target Commands.     (line 115)
+* loop_break:                            Command Files.       (line  94)
+* loop_continue:                         Command Files.       (line  98)
+* macro define:                          Macros.              (line  59)
+* macro exp1:                            Macros.              (line  36)
+* macro expand:                          Macros.              (line  29)
+* macro list:                            Macros.              (line  80)
+* macro undef:                           Macros.              (line  74)
+* maint agent:                           Maintenance Commands.
+                                                              (line  12)
+* maint agent-eval:                      Maintenance Commands.
+                                                              (line  12)
+* maint agent-printf:                    Maintenance Commands.
+                                                              (line  27)
+* maint check-symtabs:                   Maintenance Commands.
+                                                              (line  86)
+* maint cplus first_component:           Maintenance Commands.
+                                                              (line  89)
+* maint cplus namespace:                 Maintenance Commands.
+                                                              (line  92)
+* maint demangle:                        Maintenance Commands.
+                                                              (line  95)
+* maint deprecate:                       Maintenance Commands.
+                                                              (line  98)
+* maint dump-me:                         Maintenance Commands.
+                                                              (line 106)
+* maint info breakpoints:                Maintenance Commands.
+                                                              (line  33)
+* maint info program-spaces:             Inferiors and Programs.
+                                                              (line 138)
+* maint info psymtabs:                   Symbols.             (line 297)
+* maint info sections:                   Files.               (line 200)
+* maint info sol-threads:                Threads.             (line  98)
+* maint info symtabs:                    Symbols.             (line 297)
+* maint internal-error:                  Maintenance Commands.
+                                                              (line 111)
+* maint internal-warning:                Maintenance Commands.
+                                                              (line 111)
+* maint packet:                          Maintenance Commands.
+                                                              (line 151)
+* maint print architecture:              Maintenance Commands.
+                                                              (line 157)
+* maint print c-tdesc:                   Maintenance Commands.
+                                                              (line 161)
+* maint print cooked-registers:          Maintenance Commands.
+                                                              (line 184)
+* maint print dummy-frames:              Maintenance Commands.
+                                                              (line 166)
+* maint print objfiles:                  Maintenance Commands.
+                                                              (line 223)
+* maint print psymbols:                  Symbols.             (line 278)
+* maint print raw-registers:             Maintenance Commands.
+                                                              (line 184)
+* maint print reggroups:                 Maintenance Commands.
+                                                              (line 204)
+* maint print register-groups:           Maintenance Commands.
+                                                              (line 184)
+* maint print registers:                 Maintenance Commands.
+                                                              (line 184)
+* maint print remote-registers:          Maintenance Commands.
+                                                              (line 184)
+* maint print section-scripts:           Maintenance Commands.
+                                                              (line 228)
+* maint print statistics:                Maintenance Commands.
+                                                              (line 235)
+* maint print symbols:                   Symbols.             (line 278)
+* maint print target-stack:              Maintenance Commands.
+                                                              (line 248)
+* maint print type:                      Maintenance Commands.
+                                                              (line 260)
+* maint print unwind, HPPA:              HPPA.                (line  17)
+* maint set dwarf2 always-disassemble:   Maintenance Commands.
+                                                              (line 267)
+* maint set dwarf2 max-cache-age:        Maintenance Commands.
+                                                              (line 289)
+* maint set internal-error:              Maintenance Commands.
+                                                              (line 132)
+* maint set internal-warning:            Maintenance Commands.
+                                                              (line 132)
+* maint set profile:                     Maintenance Commands.
+                                                              (line 303)
+* maint set show-all-tib:                Maintenance Commands.
+                                                              (line 327)
+* maint set show-debug-regs:             Maintenance Commands.
+                                                              (line 319)
+* maint show dwarf2 always-disassemble:  Maintenance Commands.
+                                                              (line 267)
+* maint show dwarf2 max-cache-age:       Maintenance Commands.
+                                                              (line 289)
+* maint show internal-error:             Maintenance Commands.
+                                                              (line 132)
+* maint show internal-warning:           Maintenance Commands.
+                                                              (line 132)
+* maint show profile:                    Maintenance Commands.
+                                                              (line 303)
+* maint show show-all-tib:               Maintenance Commands.
+                                                              (line 327)
+* maint show show-debug-regs:            Maintenance Commands.
+                                                              (line 319)
+* maint space:                           Maintenance Commands.
+                                                              (line 333)
+* maint time:                            Maintenance Commands.
+                                                              (line 340)
+* maint translate-address:               Maintenance Commands.
+                                                              (line 353)
+* maint undeprecate:                     Maintenance Commands.
+                                                              (line  98)
+* make:                                  Shell Commands.      (line  21)
+* mark-modified-lines:                   Readline Init File Syntax.
+                                                              (line 169)
+* mark-symlinked-directories:            Readline Init File Syntax.
+                                                              (line 174)
+* match-hidden-files:                    Readline Init File Syntax.
+                                                              (line 179)
+* may-insert-breakpoints:                Observer Mode.       (line  50)
+* may-insert-fast-tracepoints:           Observer Mode.       (line  69)
+* may-insert-tracepoints:                Observer Mode.       (line  59)
+* may-interrupt:                         Observer Mode.       (line  79)
+* may-write-memory:                      Observer Mode.       (line  41)
+* may-write-registers:                   Observer Mode.       (line  32)
+* mem:                                   Memory Region Attributes.
+                                                              (line  22)
+* memset:                                Bootstrapping.       (line  70)
+* menu-complete ():                      Commands For Completion.
+                                                              (line  22)
+* menu-complete-backward ():             Commands For Completion.
+                                                              (line  34)
+* menu-complete-display-prefix:          Readline Init File Syntax.
+                                                              (line 186)
+* meta-flag:                             Readline Init File Syntax.
+                                                              (line 142)
+* monitor:                               Connecting.          (line 105)
+* n (next):                              Continuing and Stepping.
+                                                              (line  78)
+* n (SingleKey TUI key):                 TUI Single Key Mode. (line  19)
+* NewObjFileEvent.new_objfile:           Events In Python.    (line 123)
+* next:                                  Continuing and Stepping.
+                                                              (line  78)
+* next&:                                 Background Execution.
+                                                              (line  47)
+* next-history (C-n):                    Commands For History.
+                                                              (line  16)
+* nexti:                                 Continuing and Stepping.
+                                                              (line 203)
+* nexti&:                                Background Execution.
+                                                              (line  50)
+* ni (nexti):                            Continuing and Stepping.
+                                                              (line 203)
+* non-incremental-forward-search-history (M-n): Commands For History.
+                                                              (line  40)
+* non-incremental-reverse-search-history (M-p): Commands For History.
+                                                              (line  35)
+* nosharedlibrary:                       Files.               (line 341)
+* Objfile:                               Objfiles In Python.  (line   6)
+* Objfile.filename:                      Objfiles In Python.  (line  29)
+* Objfile.is_valid:                      Objfiles In Python.  (line  42)
+* Objfile.pretty_printers:               Objfiles In Python.  (line  32)
+* observer:                              Observer Mode.       (line  22)
+* or1ksim:                               OpenRISC 1000.       (line  16)
+* output:                                Output.              (line  35)
+* output-meta:                           Readline Init File Syntax.
+                                                              (line 191)
+* overlay:                               Overlay Commands.    (line  17)
+* overload-choice annotation:            Prompting.           (line  32)
+* overwrite-mode ():                     Commands For Text.   (line  53)
+* page-completions:                      Readline Init File Syntax.
+                                                              (line 196)
+* PARAM_AUTO_BOOLEAN:                    Parameters In Python.
+                                                              (line  93)
+* PARAM_BOOLEAN:                         Parameters In Python.
+                                                              (line  89)
+* PARAM_ENUM:                            Parameters In Python.
+                                                              (line 127)
+* PARAM_FILENAME:                        Parameters In Python.
+                                                              (line 119)
+* PARAM_INTEGER:                         Parameters In Python.
+                                                              (line 102)
+* PARAM_OPTIONAL_FILENAME:               Parameters In Python.
+                                                              (line 116)
+* PARAM_STRING:                          Parameters In Python.
+                                                              (line 106)
+* PARAM_STRING_NOESCAPE:                 Parameters In Python.
+                                                              (line 112)
+* PARAM_UINTEGER:                        Parameters In Python.
+                                                              (line  98)
+* PARAM_ZINTEGER:                        Parameters In Python.
+                                                              (line 123)
+* Parameter:                             Parameters In Python.
+                                                              (line   6)
+* Parameter.__init__:                    Parameters In Python.
+                                                              (line  20)
+* Parameter.get_set_string:              Parameters In Python.
+                                                              (line  74)
+* Parameter.get_show_string:             Parameters In Python.
+                                                              (line  80)
+* Parameter.set_doc:                     Parameters In Python.
+                                                              (line  54)
+* Parameter.show_doc:                    Parameters In Python.
+                                                              (line  60)
+* Parameter.value:                       Parameters In Python.
+                                                              (line  66)
+* passcount:                             Tracepoint Passcounts.
+                                                              (line   6)
+* path:                                  Environment.         (line  14)
+* PgDn:                                  TUI Keys.            (line  50)
+* PgUp:                                  TUI Keys.            (line  47)
+* pmon, MIPS remote:                     MIPS Embedded.       (line 132)
+* po (print-object):                     The Print Command with Objective-C.
+                                                              (line   6)
+* possible-completions (M-?):            Commands For Completion.
+                                                              (line  11)
+* post-commands annotation:              Prompting.           (line  27)
+* post-overload-choice annotation:       Prompting.           (line  32)
+* post-prompt annotation:                Prompting.           (line  24)
+* post-prompt-for-continue annotation:   Prompting.           (line  40)
+* post-query annotation:                 Prompting.           (line  36)
+* pre-commands annotation:               Prompting.           (line  27)
+* pre-overload-choice annotation:        Prompting.           (line  32)
+* pre-prompt annotation:                 Prompting.           (line  24)
+* pre-prompt-for-continue annotation:    Prompting.           (line  40)
+* pre-query annotation:                  Prompting.           (line  36)
+* prefix-meta (<ESC>):                   Miscellaneous Commands.
+                                                              (line  18)
+* pretty_printer.children:               Pretty Printing API. (line  12)
+* pretty_printer.display_hint:           Pretty Printing API. (line  25)
+* pretty_printer.to_string:              Pretty Printing API. (line  54)
+* previous-history (C-p):                Commands For History.
+                                                              (line  12)
+* print:                                 Data.                (line   6)
+* print-object:                          The Print Command with Objective-C.
+                                                              (line   6)
+* printf:                                Output.              (line  46)
+* proc-trace-entry:                      SVR4 Process Information.
+                                                              (line  70)
+* proc-trace-exit:                       SVR4 Process Information.
+                                                              (line  70)
+* proc-untrace-entry:                    SVR4 Process Information.
+                                                              (line  70)
+* proc-untrace-exit:                     SVR4 Process Information.
+                                                              (line  70)
+* Progspace:                             Progspaces In Python.
+                                                              (line   6)
+* Progspace.filename:                    Progspaces In Python.
+                                                              (line  25)
+* Progspace.pretty_printers:             Progspaces In Python.
+                                                              (line  28)
+* prompt annotation:                     Prompting.           (line  24)
+* prompt-for-continue annotation:        Prompting.           (line  40)
+* ptype:                                 Symbols.             (line 102)
+* putDebugChar:                          Bootstrapping.       (line  20)
+* pwd:                                   Working Directory.   (line  19)
+* python:                                Python Commands.     (line   9)
+* q (quit):                              Quitting GDB.        (line   6)
+* q (SingleKey TUI key):                 TUI Single Key Mode. (line  22)
+* query annotation:                      Prompting.           (line  36)
+* quit [EXPRESSION]:                     Quitting GDB.        (line   6)
+* quit annotation:                       Errors.              (line   6)
+* quoted-insert (C-q or C-v):            Commands For Text.   (line  20)
+* r (run):                               Starting.            (line   6)
+* r (SingleKey TUI key):                 TUI Single Key Mode. (line  25)
+* rbreak:                                Set Breaks.          (line  92)
+* rc (reverse-continue):                 Reverse Execution.   (line  30)
+* rdilogenable:                          ARM.                 (line  95)
+* rdilogfile:                            ARM.                 (line  89)
+* re-read-init-file (C-x C-r):           Miscellaneous Commands.
+                                                              (line   6)
+* readnow:                               Files.               (line  90)
+* rec:                                   Process Record and Replay.
+                                                              (line  38)
+* rec del:                               Process Record and Replay.
+                                                              (line 155)
+* rec s:                                 Process Record and Replay.
+                                                              (line  57)
+* record:                                Process Record and Replay.
+                                                              (line  38)
+* record delete:                         Process Record and Replay.
+                                                              (line 155)
+* record restore:                        Process Record and Replay.
+                                                              (line  85)
+* record save:                           Process Record and Replay.
+                                                              (line  80)
+* record stop:                           Process Record and Replay.
+                                                              (line  57)
+* redraw-current-line ():                Commands For Moving. (line  30)
+* refresh:                               TUI Commands.        (line  58)
+* regs, Super-H:                         Super-H.             (line   9)
+* remote delete:                         File Transfer.       (line  23)
+* remote get:                            File Transfer.       (line  19)
+* remote put:                            File Transfer.       (line  15)
+* remotetimeout:                         Sparclet.            (line  12)
+* remove-inferiors:                      Inferiors and Programs.
+                                                              (line  86)
+* restart CHECKPOINT-ID:                 Checkpoint/Restart.  (line  44)
+* restore:                               Dump/Restore Files.  (line  41)
+* RET (repeat last command):             Command Syntax.      (line  21)
+* return:                                Returning.           (line   6)
+* reverse-continue:                      Reverse Execution.   (line  30)
+* reverse-finish:                        Reverse Execution.   (line  77)
+* reverse-next:                          Reverse Execution.   (line  60)
+* reverse-nexti:                         Reverse Execution.   (line  69)
+* reverse-search:                        Search.              (line  16)
+* reverse-search-history (C-r):          Commands For History.
+                                                              (line  26)
+* reverse-step:                          Reverse Execution.   (line  37)
+* reverse-stepi:                         Reverse Execution.   (line  52)
+* revert-all-at-newline:                 Readline Init File Syntax.
+                                                              (line 206)
+* revert-line (M-r):                     Miscellaneous Commands.
+                                                              (line  25)
+* Right:                                 TUI Keys.            (line  62)
+* rn (reverse-next):                     Reverse Execution.   (line  60)
+* rni (reverse-nexti):                   Reverse Execution.   (line  69)
+* rs (step):                             Reverse Execution.   (line  37)
+* rsi (reverse-stepi):                   Reverse Execution.   (line  52)
+* run:                                   Starting.            (line   6)
+* run&:                                  Background Execution.
+                                                              (line  34)
+* rwatch:                                Set Watchpoints.     (line  79)
+* s (SingleKey TUI key):                 TUI Single Key Mode. (line  28)
+* s (step):                              Continuing and Stepping.
+                                                              (line  46)
+* save breakpoints:                      Save Breakpoints.    (line   9)
+* save gdb-index:                        Index Files.         (line  19)
+* save tracepoints:                      save tracepoints.    (line   6)
+* save-tracepoints:                      save tracepoints.    (line   6)
+* sdireset:                              M32R/D.              (line  44)
+* sdistatus:                             M32R/D.              (line  47)
+* sds, a command:                        PowerPC Embedded.    (line  94)
+* search:                                Search.              (line   9)
+* section:                               Files.               (line 182)
+* select-frame:                          Frames.              (line  51)
+* self-insert (a, b, A, 1, !, ...):      Commands For Text.   (line  27)
+* set:                                   Help.                (line 108)
+* set ada trust-PAD-over-XVS:            Ada Glitches.        (line  43)
+* set agent off:                         In-Process Agent.    (line  47)
+* set agent on:                          In-Process Agent.    (line  38)
+* set annotate:                          Annotations Overview.
+                                                              (line  29)
+* set architecture:                      Targets.             (line  21)
+* set args:                              Arguments.           (line  21)
+* set arm:                               ARM.                 (line  18)
+* set auto-load gdb-scripts:             objfile-gdb.gdb file.
+                                                              (line  16)
+* set auto-load libthread-db:            libthread_db.so.1 file.
+                                                              (line  22)
+* set auto-load local-gdbinit:           Init File in the Current Directory.
+                                                              (line  14)
+* set auto-load off:                     Auto-loading.        (line  20)
+* set auto-load python-scripts:          Python Auto-loading. (line  18)
+* set auto-load safe-path:               Auto-loading safe path.
+                                                              (line  27)
+* set auto-load scripts-directory:       objfile-gdb.py file. (line  19)
+* set auto-solib-add:                    Files.               (line 303)
+* set backtrace:                         Backtrace.           (line 104)
+* set basenames-may-differ:              Files.               (line 522)
+* set board-address:                     M32R/D.              (line  21)
+* set breakpoint always-inserted:        Set Breaks.          (line 327)
+* set breakpoint auto-hw:                Set Breaks.          (line 307)
+* set breakpoint condition-evaluation:   Set Breaks.          (line 355)
+* set breakpoint pending:                Set Breaks.          (line 276)
+* set can-use-hw-watchpoints:            Set Watchpoints.     (line 116)
+* set case-sensitive:                    Symbols.             (line  27)
+* set charset:                           Character Sets.      (line  46)
+* set check range:                       Range Checking.      (line  34)
+* set check type:                        Type Checking.       (line  42)
+* set circular-trace-buffer:             Starting and Stopping Trace Experiments.
+                                                              (line  94)
+* set coerce-float-to-double:            ABI.                 (line  41)
+* set com1base:                          DJGPP Native.        (line 125)
+* set com1irq:                           DJGPP Native.        (line 125)
+* set com2base:                          DJGPP Native.        (line 125)
+* set com2irq:                           DJGPP Native.        (line 125)
+* set com3base:                          DJGPP Native.        (line 125)
+* set com3irq:                           DJGPP Native.        (line 125)
+* set com4base:                          DJGPP Native.        (line 125)
+* set com4irq:                           DJGPP Native.        (line 125)
+* set complaints:                        Messages/Warnings.   (line  29)
+* set confirm:                           Messages/Warnings.   (line  50)
+* set cp-abi:                            ABI.                 (line  53)
+* set cygwin-exceptions:                 Cygwin Native.       (line  42)
+* set data-directory:                    Data Files.          (line  12)
+* set dcache line-size:                  Caching Remote Data. (line  48)
+* set dcache size:                       Caching Remote Data. (line  45)
+* set debug:                             Debugging Output.    (line  18)
+* set debug auto-load:                   Auto-loading verbose mode.
+                                                              (line  27)
+* set debug darwin:                      Darwin.              (line   9)
+* set debug entry-values:                Tail Call Frames.    (line  48)
+* set debug hppa:                        HPPA.                (line  10)
+* set debug libthread-db:                Threads.             (line 216)
+* set debug mach-o:                      Darwin.              (line  16)
+* set debug mips:                        MIPS.                (line 106)
+* set debug monitor:                     Target Commands.     (line 108)
+* set debug nto-debug:                   Neutrino.            (line   9)
+* set debug-file-directory:              Separate Debug Files.
+                                                              (line  70)
+* set debugevents:                       Cygwin Native.       (line  71)
+* set debugexceptions:                   Cygwin Native.       (line  82)
+* set debugexec:                         Cygwin Native.       (line  78)
+* set debugmemory:                       Cygwin Native.       (line  86)
+* set default-collect:                   Tracepoint Actions.  (line 135)
+* set demangle-style:                    Print Settings.      (line 413)
+* set detach-on-fork:                    Forks.               (line  55)
+* set directories:                       Source Path.         (line 120)
+* set disable-randomization:             Starting.            (line 136)
+* set disassemble-next-line:             Machine Code.        (line 139)
+* set disassembly-flavor:                Machine Code.        (line 127)
+* set disconnected-dprintf:              Dynamic Printf.      (line  83)
+* set disconnected-tracing:              Starting and Stopping Trace Experiments.
+                                                              (line  55)
+* set displaced-stepping:                Maintenance Commands.
+                                                              (line  64)
+* set download-path:                     M32R/D.              (line  15)
+* set editing:                           Editing.             (line  15)
+* set endian:                            Byte Order.          (line  13)
+* set environment:                       Environment.         (line  39)
+* set exceptions, Hurd command:          Hurd Native.         (line  40)
+* set exec-direction:                    Reverse Execution.   (line  83)
+* set exec-done-display:                 Debugging Output.    (line  11)
+* set exec-wrapper:                      Starting.            (line 111)
+* set extended-prompt:                   Prompt.              (line  25)
+* set extension-language:                Show.                (line  30)
+* set follow-exec-mode:                  Forks.               (line 101)
+* set follow-fork-mode:                  Forks.               (line  35)
+* set gnutarget:                         Target Commands.     (line  28)
+* set hash, for remote monitors:         Target Commands.     (line  99)
+* set height:                            Screen Size.         (line  21)
+* set history expansion:                 Command History.     (line  65)
+* set history filename:                  Command History.     (line  26)
+* set history save:                      Command History.     (line  36)
+* set history size:                      Command History.     (line  45)
+* set host-charset:                      Character Sets.      (line  33)
+* set inferior-tty:                      Input/Output.        (line  49)
+* set input-radix:                       Numbers.             (line  14)
+* set interactive-mode:                  Other Misc Settings. (line   6)
+* set language:                          Manually.            (line   9)
+* set libthread-db-search-path:          Threads.             (line 177)
+* set listsize:                          List.                (line  33)
+* set logging:                           Logging Output.      (line   9)
+* set mach-exceptions:                   Darwin.              (line  27)
+* set max-user-call-depth:               Define.              (line  78)
+* set mem inaccessible-by-default:       Memory Region Attributes.
+                                                              (line 130)
+* set mips abi:                          MIPS.                (line  32)
+* set mips compression:                  MIPS.                (line  55)
+* set mips mask-address:                 MIPS.                (line  86)
+* set mipsfpu:                           MIPS Embedded.       (line  60)
+* set monitor-prompt, MIPS remote:       MIPS Embedded.       (line 107)
+* set monitor-warnings, MIPS remote:     MIPS Embedded.       (line 123)
+* set multiple-symbols:                  Ambiguous Expressions.
+                                                              (line  50)
+* set new-console:                       Cygwin Native.       (line  54)
+* set new-group:                         Cygwin Native.       (line  63)
+* set non-stop:                          Non-Stop Mode.       (line  38)
+* set opaque-type-resolution:            Symbols.             (line 260)
+* set osabi:                             ABI.                 (line  11)
+* set output-radix:                      Numbers.             (line  31)
+* set overload-resolution:               Debugging C Plus Plus.
+                                                              (line  54)
+* set pagination:                        Screen Size.         (line  38)
+* set powerpc:                           PowerPC Embedded.    (line  51)
+* set print:                             Print Settings.      (line  11)
+* set print entry-values:                Print Settings.      (line 192)
+* set print frame-arguments:             Print Settings.      (line 151)
+* set print inferior-events:             Inferiors and Programs.
+                                                              (line 117)
+* set print thread-events:               Threads.             (line 156)
+* set processor:                         Targets.             (line  31)
+* set procfs-file:                       SVR4 Process Information.
+                                                              (line  59)
+* set procfs-trace:                      SVR4 Process Information.
+                                                              (line  53)
+* set prompt:                            Prompt.              (line  16)
+* set python print-stack:                Python Commands.     (line  31)
+* set radix:                             Numbers.             (line  44)
+* set ravenscar task-switching off:      Ravenscar Profile.   (line  14)
+* set ravenscar task-switching on:       Ravenscar Profile.   (line  10)
+* set rdiheartbeat:                      ARM.                 (line 112)
+* set rdiromatzero:                      ARM.                 (line 102)
+* set record insn-number-max:            Process Record and Replay.
+                                                              (line  89)
+* set record memory-query:               Process Record and Replay.
+                                                              (line 123)
+* set record stop-at-limit:              Process Record and Replay.
+                                                              (line 109)
+* set remote:                            Remote Configuration.
+                                                              (line   6)
+* set remote system-call-allowed:        system.              (line  38)
+* set remote-mips64-transfers-32bit-regs: MIPS.               (line  96)
+* set remotecache:                       Caching Remote Data. (line  18)
+* set remoteflow:                        Remote Configuration.
+                                                              (line  41)
+* set retransmit-timeout:                MIPS Embedded.       (line  83)
+* set schedule-multiple:                 All-Stop Mode.       (line  66)
+* set script-extension:                  Extending GDB.       (line  20)
+* set sdstimeout:                        PowerPC Embedded.    (line  87)
+* set server-address:                    M32R/D.              (line  27)
+* set sh calling-convention:             Super-H.             (line  15)
+* set shell:                             Cygwin Native.       (line  90)
+* set signal-thread:                     Hurd Native.         (line  21)
+* set signals, Hurd command:             Hurd Native.         (line  11)
+* set sigs, Hurd command:                Hurd Native.         (line  11)
+* set sigthread:                         Hurd Native.         (line  21)
+* set solib-absolute-prefix:             Files.               (line 379)
+* set solib-search-path:                 Files.               (line 448)
+* set spu:                               SPU.                 (line  39)
+* set stack-cache:                       Caching Remote Data. (line  26)
+* set step-mode:                         Continuing and Stepping.
+                                                              (line  92)
+* set stop-on-solib-events:              Files.               (line 356)
+* set stopped, Hurd command:             Hurd Native.         (line  32)
+* set struct-convention:                 i386.                (line   7)
+* set substitute-path:                   Source Path.         (line 127)
+* set syn-garbage-limit, MIPS remote:    MIPS Embedded.       (line  98)
+* set sysroot:                           Files.               (line 379)
+* set target-async:                      Background Execution.
+                                                              (line  17)
+* set target-charset:                    Character Sets.      (line  28)
+* set target-file-system-kind (unix|dos-based|auto): Files.   (line 462)
+* set target-wide-charset:               Character Sets.      (line  61)
+* set task, Hurd commands:               Hurd Native.         (line  49)
+* set tcp:                               Remote Configuration.
+                                                              (line 116)
+* set thread, Hurd command:              Hurd Native.         (line  91)
+* set timeout:                           MIPS Embedded.       (line  83)
+* set trace-commands:                    Messages/Warnings.   (line  67)
+* set trace-notes:                       Starting and Stopping Trace Experiments.
+                                                              (line 113)
+* set trace-stop-notes:                  Starting and Stopping Trace Experiments.
+                                                              (line 119)
+* set trace-user:                        Starting and Stopping Trace Experiments.
+                                                              (line 109)
+* set trust-readonly-sections:           Files.               (line 258)
+* set tui active-border-mode:            TUI Configuration.   (line  24)
+* set tui border-kind:                   TUI Configuration.   (line   9)
+* set tui border-mode:                   TUI Configuration.   (line  23)
+* set unwind-on-terminating-exception:   Calling.             (line  46)
+* set unwindonsignal:                    Calling.             (line  35)
+* set variable:                          Assignment.          (line  16)
+* set verbose:                           Messages/Warnings.   (line  15)
+* set watchdog:                          Maintenance Commands.
+                                                              (line 371)
+* set width:                             Screen Size.         (line  21)
+* set write:                             Patching.            (line  15)
+* set-mark (C-@):                        Miscellaneous Commands.
+                                                              (line  32)
+* set_debug_traps:                       Stub Contents.       (line  10)
+* share:                                 Files.               (line 332)
+* sharedlibrary:                         Files.               (line 332)
+* shell:                                 Shell Commands.      (line  10)
+* show:                                  Help.                (line 113)
+* show ada trust-PAD-over-XVS:           Ada Glitches.        (line  43)
+* show agent:                            In-Process Agent.    (line  51)
+* show annotate:                         Annotations Overview.
+                                                              (line  34)
+* show architecture:                     Targets.             (line  21)
+* show args:                             Arguments.           (line  28)
+* show arm:                              ARM.                 (line  22)
+* show auto-load:                        Auto-loading.        (line  33)
+* show auto-load gdb-scripts:            objfile-gdb.gdb file.
+                                                              (line  20)
+* show auto-load libthread-db:           libthread_db.so.1 file.
+                                                              (line  26)
+* show auto-load local-gdbinit:          Init File in the Current Directory.
+                                                              (line  18)
+* show auto-load python-scripts:         Python Auto-loading. (line  21)
+* show auto-load safe-path:              Auto-loading safe path.
+                                                              (line  41)
+* show auto-load scripts-directory:      objfile-gdb.py file. (line  43)
+* show auto-solib-add:                   Files.               (line 320)
+* show backtrace:                        Backtrace.           (line 111)
+* show basenames-may-differ:             Files.               (line 525)
+* show board-address:                    M32R/D.              (line  24)
+* show breakpoint always-inserted:       Set Breaks.          (line 327)
+* show breakpoint auto-hw:               Set Breaks.          (line 307)
+* show breakpoint condition-evaluation:  Set Breaks.          (line 355)
+* show breakpoint pending:               Set Breaks.          (line 276)
+* show can-use-hw-watchpoints:           Set Watchpoints.     (line 119)
+* show case-sensitive:                   Symbols.             (line  40)
+* show charset:                          Character Sets.      (line  52)
+* show check range:                      Range Checking.      (line  34)
+* show check type:                       Type Checking.       (line  42)
+* show circular-trace-buffer:            Starting and Stopping Trace Experiments.
+                                                              (line 101)
+* show coerce-float-to-double:           ABI.                 (line  50)
+* show com1base:                         DJGPP Native.        (line 137)
+* show com1irq:                          DJGPP Native.        (line 137)
+* show com2base:                         DJGPP Native.        (line 137)
+* show com2irq:                          DJGPP Native.        (line 137)
+* show com3base:                         DJGPP Native.        (line 137)
+* show com3irq:                          DJGPP Native.        (line 137)
+* show com4base:                         DJGPP Native.        (line 137)
+* show com4irq:                          DJGPP Native.        (line 137)
+* show commands:                         Command History.     (line  78)
+* show complaints:                       Messages/Warnings.   (line  35)
+* show confirm:                          Messages/Warnings.   (line  58)
+* show convenience:                      Convenience Vars.    (line  37)
+* show copying:                          Help.                (line 137)
+* show cp-abi:                           ABI.                 (line  53)
+* show cygwin-exceptions:                Cygwin Native.       (line  50)
+* show data-directory:                   Data Files.          (line  16)
+* show dcache line-size:                 Caching Remote Data. (line  56)
+* show dcache size:                      Caching Remote Data. (line  52)
+* show debug:                            Debugging Output.    (line  22)
+* show debug auto-load:                  Auto-loading verbose mode.
+                                                              (line  30)
+* show debug darwin:                     Darwin.              (line  13)
+* show debug entry-values:               Tail Call Frames.    (line  56)
+* show debug libthread-db:               Threads.             (line 216)
+* show debug mach-o:                     Darwin.              (line  23)
+* show debug mips:                       MIPS.                (line 110)
+* show debug monitor:                    Target Commands.     (line 112)
+* show debug nto-debug:                  Neutrino.            (line  13)
+* show debug-file-directory:             Separate Debug Files.
+                                                              (line  75)
+* show default-collect:                  Tracepoint Actions.  (line 144)
+* show detach-on-fork:                   Forks.               (line  71)
+* show directories:                      Source Path.         (line 124)
+* show disassemble-next-line:            Machine Code.        (line 139)
+* show disassembly-flavor:               Machine Code.        (line 136)
+* show disconnected-dprintf:             Dynamic Printf.      (line  88)
+* show disconnected-tracing:             Starting and Stopping Trace Experiments.
+                                                              (line  62)
+* show displaced-stepping:               Maintenance Commands.
+                                                              (line  64)
+* show download-path:                    M32R/D.              (line  18)
+* show editing:                          Editing.             (line  22)
+* show environment:                      Environment.         (line  33)
+* show exceptions, Hurd command:         Hurd Native.         (line  46)
+* show exec-done-display:                Debugging Output.    (line  14)
+* show extended-prompt:                  Prompt.              (line  39)
+* show follow-fork-mode:                 Forks.               (line  49)
+* show gnutarget:                        Target Commands.     (line  40)
+* show hash, for remote monitors:        Target Commands.     (line 105)
+* show height:                           Screen Size.         (line  21)
+* show history:                          Command History.     (line  70)
+* show host-charset:                     Character Sets.      (line  55)
+* show inferior-tty:                     Input/Output.        (line  52)
+* show input-radix:                      Numbers.             (line  36)
+* show interactive-mode:                 Other Misc Settings. (line  21)
+* show language:                         Show.                (line  10)
+* show libthread-db-search-path:         Threads.             (line 213)
+* show listsize:                         List.                (line  37)
+* show logging:                          Logging Output.      (line  26)
+* show mach-exceptions:                  Darwin.              (line  34)
+* show max-user-call-depth:              Define.              (line  78)
+* show mem inaccessible-by-default:      Memory Region Attributes.
+                                                              (line 136)
+* show mips abi:                         MIPS.                (line  52)
+* show mips compression:                 MIPS.                (line  78)
+* show mips mask-address:                MIPS.                (line  92)
+* show mipsfpu:                          MIPS Embedded.       (line  60)
+* show monitor-prompt, MIPS remote:      MIPS Embedded.       (line 119)
+* show monitor-warnings, MIPS remote:    MIPS Embedded.       (line 129)
+* show multiple-symbols:                 Ambiguous Expressions.
+                                                              (line  70)
+* show new-console:                      Cygwin Native.       (line  59)
+* show new-group:                        Cygwin Native.       (line  68)
+* show non-stop:                         Non-Stop Mode.       (line  42)
+* show opaque-type-resolution:           Symbols.             (line 275)
+* show osabi:                            ABI.                 (line  11)
+* show output-radix:                     Numbers.             (line  39)
+* show overload-resolution:              Debugging C Plus Plus.
+                                                              (line  71)
+* show pagination:                       Screen Size.         (line  44)
+* show paths:                            Environment.         (line  29)
+* show print:                            Print Settings.      (line  39)
+* show print inferior-events:            Inferiors and Programs.
+                                                              (line 125)
+* show print thread-events:              Threads.             (line 166)
+* show processor:                        Targets.             (line  31)
+* show procfs-file:                      SVR4 Process Information.
+                                                              (line  64)
+* show procfs-trace:                     SVR4 Process Information.
+                                                              (line  56)
+* show prompt:                           Prompt.              (line  19)
+* show radix:                            Numbers.             (line  44)
+* show ravenscar task-switching:         Ravenscar Profile.   (line  22)
+* show rdiheartbeat:                     ARM.                 (line 117)
+* show rdiromatzero:                     ARM.                 (line 109)
+* show record insn-number-max:           Process Record and Replay.
+                                                              (line 106)
+* show record memory-query:              Process Record and Replay.
+                                                              (line 134)
+* show record stop-at-limit:             Process Record and Replay.
+                                                              (line 120)
+* show remote:                           Remote Configuration.
+                                                              (line   6)
+* show remote system-call-allowed:       system.              (line  42)
+* show remote-mips64-transfers-32bit-regs: MIPS.              (line 102)
+* show remotecache:                      Caching Remote Data. (line  23)
+* show remoteflow:                       Remote Configuration.
+                                                              (line  45)
+* show retransmit-timeout:               MIPS Embedded.       (line  83)
+* show script-extension:                 Extending GDB.       (line  20)
+* show sdstimeout:                       PowerPC Embedded.    (line  91)
+* show server-address:                   M32R/D.              (line  31)
+* show sh calling-convention:            Super-H.             (line  28)
+* show shell:                            Cygwin Native.       (line  94)
+* show signal-thread:                    Hurd Native.         (line  28)
+* show signals, Hurd command:            Hurd Native.         (line  17)
+* show sigs, Hurd command:               Hurd Native.         (line  17)
+* show sigthread:                        Hurd Native.         (line  28)
+* show solib-search-path:                Files.               (line 459)
+* show spu:                              SPU.                 (line  44)
+* show stack-cache:                      Caching Remote Data. (line  31)
+* show stop-on-solib-events:             Files.               (line 362)
+* show stopped, Hurd command:            Hurd Native.         (line  37)
+* show struct-convention:                i386.                (line  15)
+* show substitute-path:                  Source Path.         (line 164)
+* show syn-garbage-limit, MIPS remote:   MIPS Embedded.       (line 103)
+* show sysroot:                          Files.               (line 445)
+* show target-async:                     Background Execution.
+                                                              (line  21)
+* show target-charset:                   Character Sets.      (line  58)
+* show target-file-system-kind:          Files.               (line 462)
+* show target-wide-charset:              Character Sets.      (line  67)
+* show task, Hurd commands:              Hurd Native.         (line  57)
+* show tcp:                              Remote Configuration.
+                                                              (line 116)
+* show thread, Hurd command:             Hurd Native.         (line 101)
+* show timeout:                          MIPS Embedded.       (line  83)
+* show trace-notes:                      Starting and Stopping Trace Experiments.
+                                                              (line 116)
+* show trace-stop-notes:                 Starting and Stopping Trace Experiments.
+                                                              (line 124)
+* show trace-user:                       Starting and Stopping Trace Experiments.
+                                                              (line 111)
+* show unwind-on-terminating-exception:  Calling.             (line  54)
+* show unwindonsignal:                   Calling.             (line  42)
+* show user:                             Define.              (line  71)
+* show values:                           Value History.       (line  47)
+* show verbose:                          Messages/Warnings.   (line  21)
+* show version:                          Help.                (line 127)
+* show warranty:                         Help.                (line 141)
+* show width:                            Screen Size.         (line  21)
+* show write:                            Patching.            (line  26)
+* show-all-if-ambiguous:                 Readline Init File Syntax.
+                                                              (line 212)
+* show-all-if-unmodified:                Readline Init File Syntax.
+                                                              (line 218)
+* si (stepi):                            Continuing and Stepping.
+                                                              (line 190)
+* signal:                                Signaling.           (line   6)
+* signal annotation:                     Annotations for Running.
+                                                              (line  42)
+* signal-name annotation:                Annotations for Running.
+                                                              (line  22)
+* signal-name-end annotation:            Annotations for Running.
+                                                              (line  22)
+* signal-string annotation:              Annotations for Running.
+                                                              (line  22)
+* signal-string-end annotation:          Annotations for Running.
+                                                              (line  22)
+* SignalEvent.stop_signal:               Events In Python.    (line  96)
+* signalled annotation:                  Annotations for Running.
+                                                              (line  22)
+* silent:                                Break Commands.      (line  43)
+* sim:                                   Z8000.               (line  15)
+* sim, a command:                        Embedded Processors. (line  13)
+* skip delete:                           Skipping Over Functions and Files.
+                                                              (line  86)
+* skip disable:                          Skipping Over Functions and Files.
+                                                              (line  94)
+* skip enable:                           Skipping Over Functions and Files.
+                                                              (line  90)
+* skip file:                             Skipping Over Functions and Files.
+                                                              (line  46)
+* skip function:                         Skipping Over Functions and Files.
+                                                              (line  34)
+* skip-completed-text:                   Readline Init File Syntax.
+                                                              (line 227)
+* skip-csi-sequence ():                  Miscellaneous Commands.
+                                                              (line  51)
+* source:                                Command Files.       (line  17)
+* source annotation:                     Source Annotations.  (line   6)
+* spr:                                   OpenRISC 1000.       (line  33)
+* start:                                 Starting.            (line  78)
+* start-kbd-macro (C-x ():               Keyboard Macros.     (line   6)
+* starting annotation:                   Annotations for Running.
+                                                              (line   6)
+* STDERR:                                Basic Python.        (line 118)
+* STDLOG:                                Basic Python.        (line 121)
+* STDOUT:                                Basic Python.        (line 115)
+* step:                                  Continuing and Stepping.
+                                                              (line  46)
+* step&:                                 Background Execution.
+                                                              (line  41)
+* stepi:                                 Continuing and Stepping.
+                                                              (line 190)
+* stepi&:                                Background Execution.
+                                                              (line  44)
+* stop, a pseudo-command:                Hooks.               (line  21)
+* stopping annotation:                   Annotations for Running.
+                                                              (line   6)
+* strace:                                Create and Delete Tracepoints.
+                                                              (line  76)
+* symbol-file:                           Files.               (line  45)
+* Symbol.addr_class:                     Symbols In Python.   (line  75)
+* Symbol.is_argument:                    Symbols In Python.   (line  87)
+* Symbol.is_constant:                    Symbols In Python.   (line  90)
+* Symbol.is_function:                    Symbols In Python.   (line  93)
+* Symbol.is_valid:                       Symbols In Python.   (line 101)
+* Symbol.is_variable:                    Symbols In Python.   (line  96)
+* Symbol.line:                           Symbols In Python.   (line  58)
+* Symbol.linkage_name:                   Symbols In Python.   (line  66)
+* Symbol.name:                           Symbols In Python.   (line  62)
+* Symbol.needs_frame:                    Symbols In Python.   (line  81)
+* Symbol.print_name:                     Symbols In Python.   (line  70)
+* Symbol.symtab:                         Symbols In Python.   (line  53)
+* Symbol.type:                           Symbols In Python.   (line  48)
+* Symbol.value:                          Symbols In Python.   (line 108)
+* SYMBOL_FUNCTIONS_DOMAIN:               Symbols In Python.   (line 135)
+* SYMBOL_LABEL_DOMAIN:                   Symbols In Python.   (line 128)
+* SYMBOL_LOC_ARG:                        Symbols In Python.   (line 157)
+* SYMBOL_LOC_BLOCK:                      Symbols In Python.   (line 178)
+* SYMBOL_LOC_COMPUTED:                   Symbols In Python.   (line 192)
+* SYMBOL_LOC_CONST:                      Symbols In Python.   (line 148)
+* SYMBOL_LOC_CONST_BYTES:                Symbols In Python.   (line 181)
+* SYMBOL_LOC_LOCAL:                      Symbols In Python.   (line 171)
+* SYMBOL_LOC_OPTIMIZED_OUT:              Symbols In Python.   (line 189)
+* SYMBOL_LOC_REF_ARG:                    Symbols In Python.   (line 161)
+* SYMBOL_LOC_REGISTER:                   Symbols In Python.   (line 154)
+* SYMBOL_LOC_REGPARM_ADDR:               Symbols In Python.   (line 166)
+* SYMBOL_LOC_STATIC:                     Symbols In Python.   (line 151)
+* SYMBOL_LOC_TYPEDEF:                    Symbols In Python.   (line 174)
+* SYMBOL_LOC_UNDEF:                      Symbols In Python.   (line 146)
+* SYMBOL_LOC_UNRESOLVED:                 Symbols In Python.   (line 184)
+* SYMBOL_STRUCT_DOMAIN:                  Symbols In Python.   (line 125)
+* SYMBOL_TYPES_DOMAIN:                   Symbols In Python.   (line 138)
+* SYMBOL_UNDEF_DOMAIN:                   Symbols In Python.   (line 118)
+* SYMBOL_VAR_DOMAIN:                     Symbols In Python.   (line 121)
+* SYMBOL_VARIABLES_DOMAIN:               Symbols In Python.   (line 131)
+* Symtab.filename:                       Symbol Tables In Python.
+                                                              (line  45)
+* Symtab.fullname:                       Symbol Tables In Python.
+                                                              (line  62)
+* Symtab.global_block:                   Symbol Tables In Python.
+                                                              (line  65)
+* Symtab.is_valid:                       Symbol Tables In Python.
+                                                              (line  55)
+* Symtab.objfile:                        Symbol Tables In Python.
+                                                              (line  49)
+* Symtab.static_block:                   Symbol Tables In Python.
+                                                              (line  69)
+* Symtab_and_line.is_valid:              Symbol Tables In Python.
+                                                              (line  35)
+* Symtab_and_line.last:                  Symbol Tables In Python.
+                                                              (line  25)
+* Symtab_and_line.line:                  Symbol Tables In Python.
+                                                              (line  29)
+* Symtab_and_line.pc:                    Symbol Tables In Python.
+                                                              (line  21)
+* Symtab_and_line.symtab:                Symbol Tables In Python.
+                                                              (line  17)
+* sysinfo:                               DJGPP Native.        (line  19)
+* tabset:                                TUI Commands.        (line  84)
+* target:                                Target Commands.     (line  49)
+* target array:                          MIPS Embedded.       (line  49)
+* target dbug:                           M68K.                (line   9)
+* target ddb PORT:                       MIPS Embedded.       (line  41)
+* target dink32:                         PowerPC Embedded.    (line  72)
+* target jtag:                           OpenRISC 1000.       (line   9)
+* target lsi PORT:                       MIPS Embedded.       (line  44)
+* target m32r:                           M32R/D.              (line   6)
+* target m32rsdi:                        M32R/D.              (line   9)
+* target mips PORT:                      MIPS Embedded.       (line  14)
+* target op50n:                          PA.                  (line   6)
+* target pmon PORT:                      MIPS Embedded.       (line  38)
+* target ppcbug:                         PowerPC Embedded.    (line  75)
+* target ppcbug1:                        PowerPC Embedded.    (line  76)
+* target r3900:                          MIPS Embedded.       (line  46)
+* target rdi:                            ARM.                 (line   6)
+* target rdp:                            ARM.                 (line  11)
+* target record:                         Process Record and Replay.
+                                                              (line  38)
+* target sds:                            PowerPC Embedded.    (line  80)
+* target sim, with Z8000:                Z8000.               (line  15)
+* target sparclite:                      Sparclite.           (line   6)
+* target tfile:                          Trace Files.         (line  22)
+* target vxworks:                        VxWorks.             (line   6)
+* target w89k:                           PA.                  (line   9)
+* task (Ada):                            Ada Tasks.           (line 105)
+* tbreak:                                Set Breaks.          (line  55)
+* tdump:                                 tdump.               (line   6)
+* teval (tracepoints):                   Tracepoint Actions.  (line 110)
+* tfile:                                 Trace Files.         (line  22)
+* tfind:                                 tfind.               (line   6)
+* thbreak:                               Set Breaks.          (line  82)
+* this, inside C++ member functions:     C Plus Plus Expressions.
+                                                              (line  20)
+* thread apply:                          Threads.             (line 122)
+* thread find:                           Threads.             (line 142)
+* thread name:                           Threads.             (line 131)
+* thread THREADNO:                       Threads.             (line 100)
+* ThreadEvent.inferior_thread:           Events In Python.    (line  57)
+* tload, M32R:                           M32R/D.              (line  39)
+* trace:                                 Create and Delete Tracepoints.
+                                                              (line   6)
+* transpose-chars (C-t):                 Commands For Text.   (line  30)
+* transpose-words (M-t):                 Commands For Text.   (line  36)
+* tsave:                                 Trace Files.         (line  12)
+* tstart [ NOTES ]:                      Starting and Stopping Trace Experiments.
+                                                              (line   6)
+* tstatus:                               Starting and Stopping Trace Experiments.
+                                                              (line  27)
+* tstop [ NOTES ]:                       Starting and Stopping Trace Experiments.
+                                                              (line  16)
+* tty:                                   Input/Output.        (line  23)
+* tui reg:                               TUI Commands.        (line  61)
+* tvariable:                             Trace State Variables.
+                                                              (line  26)
+* Type.array:                            Types In Python.     (line  94)
+* Type.code:                             Types In Python.     (line  34)
+* Type.const:                            Types In Python.     (line 103)
+* Type.fields:                           Types In Python.     (line  51)
+* Type.pointer:                          Types In Python.     (line 126)
+* Type.range:                            Types In Python.     (line 116)
+* Type.reference:                        Types In Python.     (line 122)
+* Type.sizeof:                           Types In Python.     (line  38)
+* Type.strip_typedefs:                   Types In Python.     (line 130)
+* Type.tag:                              Types In Python.     (line  43)
+* Type.target:                           Types In Python.     (line 134)
+* Type.template_argument:                Types In Python.     (line 149)
+* Type.unqualified:                      Types In Python.     (line 111)
+* Type.volatile:                         Types In Python.     (line 107)
+* TYPE_CODE_ARRAY:                       Types In Python.     (line 167)
+* TYPE_CODE_BITSTRING:                   Types In Python.     (line 205)
+* TYPE_CODE_BOOL:                        Types In Python.     (line 226)
+* TYPE_CODE_CHAR:                        Types In Python.     (line 223)
+* TYPE_CODE_COMPLEX:                     Types In Python.     (line 229)
+* TYPE_CODE_DECFLOAT:                    Types In Python.     (line 238)
+* TYPE_CODE_ENUM:                        Types In Python.     (line 176)
+* TYPE_CODE_ERROR:                       Types In Python.     (line 208)
+* TYPE_CODE_FLAGS:                       Types In Python.     (line 179)
+* TYPE_CODE_FLT:                         Types In Python.     (line 188)
+* TYPE_CODE_FUNC:                        Types In Python.     (line 182)
+* TYPE_CODE_INT:                         Types In Python.     (line 185)
+* TYPE_CODE_INTERNAL_FUNCTION:           Types In Python.     (line 241)
+* TYPE_CODE_MEMBERPTR:                   Types In Python.     (line 217)
+* TYPE_CODE_METHOD:                      Types In Python.     (line 211)
+* TYPE_CODE_METHODPTR:                   Types In Python.     (line 214)
+* TYPE_CODE_NAMESPACE:                   Types In Python.     (line 235)
+* TYPE_CODE_PTR:                         Types In Python.     (line 164)
+* TYPE_CODE_RANGE:                       Types In Python.     (line 197)
+* TYPE_CODE_REF:                         Types In Python.     (line 220)
+* TYPE_CODE_SET:                         Types In Python.     (line 194)
+* TYPE_CODE_STRING:                      Types In Python.     (line 200)
+* TYPE_CODE_STRUCT:                      Types In Python.     (line 170)
+* TYPE_CODE_TYPEDEF:                     Types In Python.     (line 232)
+* TYPE_CODE_UNION:                       Types In Python.     (line 173)
+* TYPE_CODE_VOID:                        Types In Python.     (line 191)
+* u (SingleKey TUI key):                 TUI Single Key Mode. (line  31)
+* u (until):                             Continuing and Stepping.
+                                                              (line 118)
+* undisplay:                             Auto Display.        (line  45)
+* undo (C-_ or C-x C-u):                 Miscellaneous Commands.
+                                                              (line  22)
+* universal-argument ():                 Numeric Arguments.   (line  10)
+* unix-filename-rubout ():               Commands For Killing.
+                                                              (line  32)
+* unix-line-discard (C-u):               Commands For Killing.
+                                                              (line  12)
+* unix-word-rubout (C-w):                Commands For Killing.
+                                                              (line  28)
+* unset environment:                     Environment.         (line  55)
+* unset substitute-path:                 Source Path.         (line 156)
+* until:                                 Continuing and Stepping.
+                                                              (line 118)
+* until&:                                Background Execution.
+                                                              (line  59)
+* Up:                                    TUI Keys.            (line  53)
+* up:                                    Selection.           (line  35)
+* up-silently:                           Selection.           (line  64)
+* upcase-word (M-u):                     Commands For Text.   (line  41)
+* update:                                TUI Commands.        (line  76)
+* upload, M32R:                          M32R/D.              (line  34)
+* use_dbt_break:                         M32R/D.              (line  64)
+* use_debug_dma:                         M32R/D.              (line  53)
+* use_ib_break:                          M32R/D.              (line  61)
+* use_mon_code:                          M32R/D.              (line  57)
+* v (SingleKey TUI key):                 TUI Single Key Mode. (line  34)
+* Value.__init__:                        Values From Inferior.
+                                                              (line  88)
+* Value.address:                         Values From Inferior.
+                                                              (line  45)
+* Value.cast:                            Values From Inferior.
+                                                              (line 121)
+* Value.dereference:                     Values From Inferior.
+                                                              (line 127)
+* Value.dynamic_cast:                    Values From Inferior.
+                                                              (line 207)
+* Value.dynamic_type:                    Values From Inferior.
+                                                              (line  59)
+* Value.fetch_lazy:                      Values From Inferior.
+                                                              (line 273)
+* Value.is_lazy:                         Values From Inferior.
+                                                              (line  74)
+* Value.is_optimized_out:                Values From Inferior.
+                                                              (line  50)
+* Value.lazy_string:                     Values From Inferior.
+                                                              (line 248)
+* Value.referenced_value:                Values From Inferior.
+                                                              (line 182)
+* Value.reinterpret_cast:                Values From Inferior.
+                                                              (line 211)
+* Value.string:                          Values From Inferior.
+                                                              (line 215)
+* Value.type:                            Values From Inferior.
+                                                              (line  55)
+* visible-stats:                         Readline Init File Syntax.
+                                                              (line 240)
+* vxworks-timeout:                       VxWorks.             (line  23)
+* w (SingleKey TUI key):                 TUI Single Key Mode. (line  37)
+* watch:                                 Set Watchpoints.     (line  42)
+* watchpoint annotation:                 Annotations for Running.
+                                                              (line  50)
+* whatis:                                Symbols.             (line  74)
+* where:                                 Backtrace.           (line  34)
+* while:                                 Command Files.       (line  86)
+* while-stepping (tracepoints):          Tracepoint Actions.  (line 118)
+* winheight:                             TUI Commands.        (line  80)
+* WP_ACCESS:                             Breakpoints In Python.
+                                                              (line  66)
+* WP_READ:                               Breakpoints In Python.
+                                                              (line  60)
+* WP_WRITE:                              Breakpoints In Python.
+                                                              (line  63)
+* x (examine memory):                    Memory.              (line   9)
+* x(examine), and info line:             Machine Code.        (line  30)
+* yank (C-y):                            Commands For Killing.
+                                                              (line  59)
+* yank-last-arg (M-. or M-_):            Commands For History.
+                                                              (line  64)
+* yank-nth-arg (M-C-y):                  Commands For History.
+                                                              (line  55)
+* yank-pop (M-y):                        Commands For Killing.
+                                                              (line  62)
+
+
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 8b13789..68ea817 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -1 +1,40654 @@
+\input texinfo      @c -*-texinfo-*-
+ at c Copyright (C) 1988-1996, 1998-2012 Free Software Foundation, Inc.
+ at c
+ at c %**start of header
+ at c makeinfo ignores cmds prev to setfilename, so its arg cannot make use
+ at c of @set vars.  However, you can override filename with makeinfo -o.
+ at setfilename gdb.info
+ at c
+ at include gdb-cfg.texi
+ at c
+ at settitle Debugging with @value{GDBN}
+ at setchapternewpage odd
+ at c %**end of header
 
+ at iftex
+ at c @smallbook
+ at c @cropmarks
+ at end iftex
+
+ at finalout
+ at c To avoid file-name clashes between index.html and Index.html, when
+ at c the manual is produced on a Posix host and then moved to a
+ at c case-insensitive filesystem (e.g., MS-Windows), we separate the
+ at c indices into two: Concept Index and all the rest.
+ at syncodeindex ky fn
+ at syncodeindex tp fn
+
+ at c readline appendices use @vindex, @findex and @ftable,
+ at c annotate.texi and gdbmi use @findex.
+ at syncodeindex vr fn
+ at syncodeindex fn fn
+
+ at c !!set GDB manual's edition---not the same as GDB version!
+ at c This is updated by GNU Press.
+ at set EDITION Tenth
+
+ at c !!set GDB edit command default editor
+ at set EDITOR /bin/ex
+
+ at c THIS MANUAL REQUIRES TEXINFO 4.0 OR LATER.
+
+ at c This is a dir.info fragment to support semi-automated addition of
+ at c manuals to an info tree.
+ at dircategory Software development
+ at direntry
+* Gdb: (gdb).                     The GNU debugger.
+ at end direntry
+
+ at copying
+Copyright @copyright{} 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+2011, 2012
+Free Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being ``Free Software'' and ``Free Software Needs
+Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,''
+and with the Back-Cover Texts as in (a) below.
+
+(a) The FSF's Back-Cover Text is: ``You are free to copy and modify
+this GNU Manual.  Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom.''
+ at end copying
+
+ at ifnottex
+This file documents the @sc{gnu} debugger @value{GDBN}.
+
+This is the @value{EDITION} Edition, of @cite{Debugging with
+ at value{GDBN}: the @sc{gnu} Source-Level Debugger} for @value{GDBN}
+ at ifset VERSION_PACKAGE
+ at value{VERSION_PACKAGE}
+ at end ifset
+Version @value{GDBVN}.
+
+ at insertcopying
+ at end ifnottex
+
+ at titlepage
+ at title Debugging with @value{GDBN}
+ at subtitle The @sc{gnu} Source-Level Debugger
+ at sp 1
+ at subtitle @value{EDITION} Edition, for @value{GDBN} version @value{GDBVN}
+ at ifset VERSION_PACKAGE
+ at sp 1
+ at subtitle @value{VERSION_PACKAGE}
+ at end ifset
+ at author Richard Stallman, Roland Pesch, Stan Shebs, et al.
+ at page
+ at tex
+{\parskip=0pt
+\hfill (Send bugs and comments on @value{GDBN} to @value{BUGURL}.)\par
+\hfill {\it Debugging with @value{GDBN}}\par
+\hfill \TeX{}info \texinfoversion\par
+}
+ at end tex
+
+ at vskip 0pt plus 1filll
+Published by the Free Software Foundation @*
+51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA@*
+ISBN 978-0-9831592-3-0 @*
+
+ at insertcopying
+ at end titlepage
+ at page
+
+ at ifnottex
+ at node Top, Summary, (dir), (dir)
+
+ at top Debugging with @value{GDBN}
+
+This file describes @value{GDBN}, the @sc{gnu} symbolic debugger.
+
+This is the @value{EDITION} Edition, for @value{GDBN}
+ at ifset VERSION_PACKAGE
+ at value{VERSION_PACKAGE}
+ at end ifset
+Version @value{GDBVN}.
+
+Copyright (C) 1988-2012 Free Software Foundation, Inc.
+
+This edition of the GDB manual is dedicated to the memory of Fred
+Fish.  Fred was a long-standing contributor to GDB and to Free
+software in general.  We will miss him.
+
+ at menu
+* Summary::                     Summary of @value{GDBN}
+* Sample Session::              A sample @value{GDBN} session
+
+* Invocation::                  Getting in and out of @value{GDBN}
+* Commands::                    @value{GDBN} commands
+* Running::                     Running programs under @value{GDBN}
+* Stopping::                    Stopping and continuing
+* Reverse Execution::           Running programs backward
+* Process Record and Replay::   Recording inferior's execution and replaying it
+* Stack::                       Examining the stack
+* Source::                      Examining source files
+* Data::                        Examining data
+* Optimized Code::              Debugging optimized code
+* Macros::                      Preprocessor Macros
+* Tracepoints::                 Debugging remote targets non-intrusively
+* Overlays::                    Debugging programs that use overlays
+
+* Languages::                   Using @value{GDBN} with different languages
+
+* Symbols::                     Examining the symbol table
+* Altering::                    Altering execution
+* GDB Files::                   @value{GDBN} files
+* Targets::                     Specifying a debugging target
+* Remote Debugging::            Debugging remote programs
+* Configurations::              Configuration-specific information
+* Controlling GDB::             Controlling @value{GDBN}
+* Extending GDB::               Extending @value{GDBN}
+* Interpreters::		Command Interpreters
+* TUI::                         @value{GDBN} Text User Interface
+* Emacs::                       Using @value{GDBN} under @sc{gnu} Emacs
+* GDB/MI::                      @value{GDBN}'s Machine Interface.
+* Annotations::                 @value{GDBN}'s annotation interface.
+* JIT Interface::               Using the JIT debugging interface.
+* In-Process Agent::            In-Process Agent
+
+* GDB Bugs::                    Reporting bugs in @value{GDBN}
+
+ at ifset SYSTEM_READLINE
+* Command Line Editing: (rluserman).         Command Line Editing
+* Using History Interactively: (history).    Using History Interactively
+ at end ifset
+ at ifclear SYSTEM_READLINE
+* Command Line Editing::        Command Line Editing
+* Using History Interactively:: Using History Interactively
+ at end ifclear
+* In Memoriam::                 In Memoriam
+* Formatting Documentation::    How to format and print @value{GDBN} documentation
+* Installing GDB::              Installing GDB
+* Maintenance Commands::        Maintenance Commands
+* Remote Protocol::             GDB Remote Serial Protocol
+* Agent Expressions::           The GDB Agent Expression Mechanism
+* Target Descriptions::         How targets can describe themselves to
+                                @value{GDBN}
+* Operating System Information:: Getting additional information from
+                                 the operating system
+* Trace File Format::		GDB trace file format
+* Index Section Format::        .gdb_index section format
+* Copying::			GNU General Public License says
+                                how you can copy and share GDB
+* GNU Free Documentation License::  The license for this documentation
+* Concept Index::               Index of @value{GDBN} concepts
+* Command and Variable Index::  Index of @value{GDBN} commands, variables,
+                                  functions, and Python data types
+ at end menu
+
+ at end ifnottex
+
+ at contents
+
+ at node Summary
+ at unnumbered Summary of @value{GDBN}
+
+The purpose of a debugger such as @value{GDBN} is to allow you to see what is
+going on ``inside'' another program while it executes---or what another
+program was doing at the moment it crashed.
+
+ at value{GDBN} can do four main kinds of things (plus other things in support of
+these) to help you catch bugs in the act:
+
+ at itemize @bullet
+ at item
+Start your program, specifying anything that might affect its behavior.
+
+ at item
+Make your program stop on specified conditions.
+
+ at item
+Examine what has happened, when your program has stopped.
+
+ at item
+Change things in your program, so you can experiment with correcting the
+effects of one bug and go on to learn about another.
+ at end itemize
+
+You can use @value{GDBN} to debug programs written in C and C at t{++}.
+For more information, see @ref{Supported Languages,,Supported Languages}.
+For more information, see @ref{C,,C and C++}.
+
+Support for D is partial.  For information on D, see
+ at ref{D,,D}.
+
+ at cindex Modula-2
+Support for Modula-2 is partial.  For information on Modula-2, see
+ at ref{Modula-2,,Modula-2}.
+
+Support for OpenCL C is partial.  For information on OpenCL C, see
+ at ref{OpenCL C,,OpenCL C}.
+
+ at cindex Pascal
+Debugging Pascal programs which use sets, subranges, file variables, or
+nested functions does not currently work.  @value{GDBN} does not support
+entering expressions, printing values, or similar features using Pascal
+syntax.
+
+ at cindex Fortran
+ at value{GDBN} can be used to debug programs written in Fortran, although
+it may be necessary to refer to some variables with a trailing
+underscore.
+
+ at value{GDBN} can be used to debug programs written in Objective-C,
+using either the Apple/NeXT or the GNU Objective-C runtime.
+
+ at menu
+* Free Software::               Freely redistributable software
+* Free Documentation::          Free Software Needs Free Documentation
+* Contributors::                Contributors to GDB
+ at end menu
+
+ at node Free Software
+ at unnumberedsec Free Software
+
+ at value{GDBN} is @dfn{free software}, protected by the @sc{gnu}
+General Public License
+(GPL).  The GPL gives you the freedom to copy or adapt a licensed
+program---but every person getting a copy also gets with it the
+freedom to modify that copy (which means that they must get access to
+the source code), and the freedom to distribute further copies.
+Typical software companies use copyrights to limit your freedoms; the
+Free Software Foundation uses the GPL to preserve these freedoms.
+
+Fundamentally, the General Public License is a license which says that
+you have these freedoms and that you cannot take these freedoms away
+from anyone else.
+
+ at node Free Documentation
+ at unnumberedsec Free Software Needs Free Documentation
+
+The biggest deficiency in the free software community today is not in
+the software---it is the lack of good free documentation that we can
+include with the free software.  Many of our most important
+programs do not come with free reference manuals and free introductory
+texts.  Documentation is an essential part of any software package;
+when an important free software package does not come with a free
+manual and a free tutorial, that is a major gap.  We have many such
+gaps today.
+
+Consider Perl, for instance.  The tutorial manuals that people
+normally use are non-free.  How did this come about?  Because the
+authors of those manuals published them with restrictive terms---no
+copying, no modification, source files not available---which exclude
+them from the free software world.
+
+That wasn't the first time this sort of thing happened, and it was far
+from the last.  Many times we have heard a GNU user eagerly describe a
+manual that he is writing, his intended contribution to the community,
+only to learn that he had ruined everything by signing a publication
+contract to make it non-free.
+
+Free documentation, like free software, is a matter of freedom, not
+price.  The problem with the non-free manual is not that publishers
+charge a price for printed copies---that in itself is fine.  (The Free
+Software Foundation sells printed copies of manuals, too.)  The
+problem is the restrictions on the use of the manual.  Free manuals
+are available in source code form, and give you permission to copy and
+modify.  Non-free manuals do not allow this.
+
+The criteria of freedom for a free manual are roughly the same as for
+free software.  Redistribution (including the normal kinds of
+commercial redistribution) must be permitted, so that the manual can
+accompany every copy of the program, both on-line and on paper.
+
+Permission for modification of the technical content is crucial too.
+When people modify the software, adding or changing features, if they
+are conscientious they will change the manual too---so they can
+provide accurate and clear documentation for the modified program.  A
+manual that leaves you no choice but to write a new manual to document
+a changed version of the program is not really available to our
+community.
+
+Some kinds of limits on the way modification is handled are
+acceptable.  For example, requirements to preserve the original
+author's copyright notice, the distribution terms, or the list of
+authors, are ok.  It is also no problem to require modified versions
+to include notice that they were modified.  Even entire sections that
+may not be deleted or changed are acceptable, as long as they deal
+with nontechnical topics (like this one).  These kinds of restrictions
+are acceptable because they don't obstruct the community's normal use
+of the manual.
+
+However, it must be possible to modify all the @emph{technical}
+content of the manual, and then distribute the result in all the usual
+media, through all the usual channels.  Otherwise, the restrictions
+obstruct the use of the manual, it is not free, and we need another
+manual to replace it.
+
+Please spread the word about this issue.  Our community continues to
+lose manuals to proprietary publishing.  If we spread the word that
+free software needs free reference manuals and free tutorials, perhaps
+the next person who wants to contribute by writing documentation will
+realize, before it is too late, that only free manuals contribute to
+the free software community.
+
+If you are writing documentation, please insist on publishing it under
+the GNU Free Documentation License or another free documentation
+license.  Remember that this decision requires your approval---you
+don't have to let the publisher decide.  Some commercial publishers
+will use a free license if you insist, but they will not propose the
+option; it is up to you to raise the issue and say firmly that this is
+what you want.  If the publisher you are dealing with refuses, please
+try other publishers.  If you're not sure whether a proposed license
+is free, write to @email{licensing@@gnu.org}.
+
+You can encourage commercial publishers to sell more free, copylefted
+manuals and tutorials by buying them, and particularly by buying
+copies from the publishers that paid for their writing or for major
+improvements.  Meanwhile, try to avoid buying non-free documentation
+at all.  Check the distribution terms of a manual before you buy it,
+and insist that whoever seeks your business must respect your freedom.
+Check the history of the book, and try to reward the publishers that
+have paid or pay the authors to work on it.
+
+The Free Software Foundation maintains a list of free documentation
+published by other publishers, at
+ at url{http://www.fsf.org/doc/other-free-books.html}.
+
+ at node Contributors
+ at unnumberedsec Contributors to @value{GDBN}
+
+Richard Stallman was the original author of @value{GDBN}, and of many
+other @sc{gnu} programs.  Many others have contributed to its
+development.  This section attempts to credit major contributors.  One
+of the virtues of free software is that everyone is free to contribute
+to it; with regret, we cannot actually acknowledge everyone here.  The
+file @file{ChangeLog} in the @value{GDBN} distribution approximates a
+blow-by-blow account.
+
+Changes much prior to version 2.0 are lost in the mists of time.
+
+ at quotation
+ at emph{Plea:} Additions to this section are particularly welcome.  If you
+or your friends (or enemies, to be evenhanded) have been unfairly
+omitted from this list, we would like to add your names!
+ at end quotation
+
+So that they may not regard their many labors as thankless, we
+particularly thank those who shepherded @value{GDBN} through major
+releases:
+Andrew Cagney (releases 6.3, 6.2, 6.1, 6.0, 5.3, 5.2, 5.1 and 5.0);
+Jim Blandy (release 4.18);
+Jason Molenda (release 4.17);
+Stan Shebs (release 4.14);
+Fred Fish (releases 4.16, 4.15, 4.13, 4.12, 4.11, 4.10, and 4.9);
+Stu Grossman and John Gilmore (releases 4.8, 4.7, 4.6, 4.5, and 4.4);
+John Gilmore (releases 4.3, 4.2, 4.1, 4.0, and 3.9);
+Jim Kingdon (releases 3.5, 3.4, and 3.3);
+and Randy Smith (releases 3.2, 3.1, and 3.0).
+
+Richard Stallman, assisted at various times by Peter TerMaat, Chris
+Hanson, and Richard Mlynarik, handled releases through 2.8.
+
+Michael Tiemann is the author of most of the @sc{gnu} C at t{++} support
+in @value{GDBN}, with significant additional contributions from Per
+Bothner and Daniel Berlin.  James Clark wrote the @sc{gnu} C at t{++}
+demangler.  Early work on C at t{++} was by Peter TerMaat (who also did
+much general update work leading to release 3.0).
+
+ at value{GDBN} uses the BFD subroutine library to examine multiple
+object-file formats; BFD was a joint project of David V.
+Henkel-Wallace, Rich Pixley, Steve Chamberlain, and John Gilmore.
+
+David Johnson wrote the original COFF support; Pace Willison did
+the original support for encapsulated COFF.
+
+Brent Benson of Harris Computer Systems contributed DWARF 2 support.
+
+Adam de Boor and Bradley Davis contributed the ISI Optimum V support.
+Per Bothner, Noboyuki Hikichi, and Alessandro Forin contributed MIPS
+support.
+Jean-Daniel Fekete contributed Sun 386i support.
+Chris Hanson improved the HP9000 support.
+Noboyuki Hikichi and Tomoyuki Hasei contributed Sony/News OS 3 support.
+David Johnson contributed Encore Umax support.
+Jyrki Kuoppala contributed Altos 3068 support.
+Jeff Law contributed HP PA and SOM support.
+Keith Packard contributed NS32K support.
+Doug Rabson contributed Acorn Risc Machine support.
+Bob Rusk contributed Harris Nighthawk CX-UX support.
+Chris Smith contributed Convex support (and Fortran debugging).
+Jonathan Stone contributed Pyramid support.
+Michael Tiemann contributed SPARC support.
+Tim Tucker contributed support for the Gould NP1 and Gould Powernode.
+Pace Willison contributed Intel 386 support.
+Jay Vosburgh contributed Symmetry support.
+Marko Mlinar contributed OpenRISC 1000 support.
+
+Andreas Schwab contributed M68K @sc{gnu}/Linux support.
+
+Rich Schaefer and Peter Schauer helped with support of SunOS shared
+libraries.
+
+Jay Fenlason and Roland McGrath ensured that @value{GDBN} and GAS agree
+about several machine instruction sets.
+
+Patrick Duval, Ted Goldstein, Vikram Koka and Glenn Engel helped develop
+remote debugging.  Intel Corporation, Wind River Systems, AMD, and ARM
+contributed remote debugging modules for the i960, VxWorks, A29K UDI,
+and RDI targets, respectively.
+
+Brian Fox is the author of the readline libraries providing
+command-line editing and command history.
+
+Andrew Beers of SUNY Buffalo wrote the language-switching code, the
+Modula-2 support, and contributed the Languages chapter of this manual.
+
+Fred Fish wrote most of the support for Unix System Vr4.
+He also enhanced the command-completion support to cover C at t{++} overloaded
+symbols.
+
+Hitachi America (now Renesas America), Ltd. sponsored the support for
+H8/300, H8/500, and Super-H processors.
+
+NEC sponsored the support for the v850, Vr4xxx, and Vr5xxx processors.
+
+Mitsubishi (now Renesas) sponsored the support for D10V, D30V, and M32R/D
+processors.
+
+Toshiba sponsored the support for the TX39 Mips processor.
+
+Matsushita sponsored the support for the MN10200 and MN10300 processors.
+
+Fujitsu sponsored the support for SPARClite and FR30 processors.
+
+Kung Hsu, Jeff Law, and Rick Sladkey added support for hardware
+watchpoints.
+
+Michael Snyder added support for tracepoints.
+
+Stu Grossman wrote gdbserver.
+
+Jim Kingdon, Peter Schauer, Ian Taylor, and Stu Grossman made
+nearly innumerable bug fixes and cleanups throughout @value{GDBN}.
+
+The following people at the Hewlett-Packard Company contributed
+support for the PA-RISC 2.0 architecture, HP-UX 10.20, 10.30, and 11.0
+(narrow mode), HP's implementation of kernel threads, HP's aC at t{++}
+compiler, and the Text User Interface (nee Terminal User Interface):
+Ben Krepp, Richard Title, John Bishop, Susan Macchia, Kathy Mann,
+Satish Pai, India Paul, Steve Rehrauer, and Elena Zannoni.  Kim Haase
+provided HP-specific information in this manual.
+
+DJ Delorie ported @value{GDBN} to MS-DOS, for the DJGPP project.
+Robert Hoehne made significant contributions to the DJGPP port.
+
+Cygnus Solutions has sponsored @value{GDBN} maintenance and much of its
+development since 1991.  Cygnus engineers who have worked on @value{GDBN}
+fulltime include Mark Alexander, Jim Blandy, Per Bothner, Kevin
+Buettner, Edith Epstein, Chris Faylor, Fred Fish, Martin Hunt, Jim
+Ingham, John Gilmore, Stu Grossman, Kung Hsu, Jim Kingdon, John Metzler,
+Fernando Nasser, Geoffrey Noer, Dawn Perchik, Rich Pixley, Zdenek
+Radouch, Keith Seitz, Stan Shebs, David Taylor, and Elena Zannoni.  In
+addition, Dave Brolley, Ian Carmichael, Steve Chamberlain, Nick Clifton,
+JT Conklin, Stan Cox, DJ Delorie, Ulrich Drepper, Frank Eigler, Doug
+Evans, Sean Fagan, David Henkel-Wallace, Richard Henderson, Jeff
+Holcomb, Jeff Law, Jim Lemke, Tom Lord, Bob Manson, Michael Meissner,
+Jason Merrill, Catherine Moore, Drew Moseley, Ken Raeburn, Gavin
+Romig-Koch, Rob Savoye, Jamie Smith, Mike Stump, Ian Taylor, Angela
+Thomas, Michael Tiemann, Tom Tromey, Ron Unrau, Jim Wilson, and David
+Zuhn have made contributions both large and small.
+
+Andrew Cagney, Fernando Nasser, and Elena Zannoni, while working for
+Cygnus Solutions, implemented the original @sc{gdb/mi} interface.
+
+Jim Blandy added support for preprocessor macros, while working for Red
+Hat.
+
+Andrew Cagney designed @value{GDBN}'s architecture vector.  Many
+people including Andrew Cagney, Stephane Carrez, Randolph Chung, Nick
+Duffek, Richard Henderson, Mark Kettenis, Grace Sainsbury, Kei
+Sakamoto, Yoshinori Sato, Michael Snyder, Andreas Schwab, Jason
+Thorpe, Corinna Vinschen, Ulrich Weigand, and Elena Zannoni, helped
+with the migration of old architectures to this new framework.
+
+Andrew Cagney completely re-designed and re-implemented @value{GDBN}'s
+unwinder framework, this consisting of a fresh new design featuring
+frame IDs, independent frame sniffers, and the sentinel frame.  Mark
+Kettenis implemented the @sc{dwarf 2} unwinder, Jeff Johnston the
+libunwind unwinder, and Andrew Cagney the dummy, sentinel, tramp, and
+trad unwinders.  The architecture-specific changes, each involving a
+complete rewrite of the architecture's frame code, were carried out by
+Jim Blandy, Joel Brobecker, Kevin Buettner, Andrew Cagney, Stephane
+Carrez, Randolph Chung, Orjan Friberg, Richard Henderson, Daniel
+Jacobowitz, Jeff Johnston, Mark Kettenis, Theodore A. Roth, Kei
+Sakamoto, Yoshinori Sato, Michael Snyder, Corinna Vinschen, and Ulrich
+Weigand.
+
+Christian Zankel, Ross Morley, Bob Wilson, and Maxim Grigoriev from
+Tensilica, Inc.@: contributed support for Xtensa processors.  Others
+who have worked on the Xtensa port of @value{GDBN} in the past include
+Steve Tjiang, John Newlin, and Scott Foehner.
+
+Michael Eager and staff of Xilinx, Inc., contributed support for the
+Xilinx MicroBlaze architecture.
+
+ at node Sample Session
+ at chapter A Sample @value{GDBN} Session
+
+You can use this manual at your leisure to read all about @value{GDBN}.
+However, a handful of commands are enough to get started using the
+debugger.  This chapter illustrates those commands.
+
+ at iftex
+In this sample session, we emphasize user input like this: @b{input},
+to make it easier to pick out from the surrounding output.
+ at end iftex
+
+ at c FIXME: this example may not be appropriate for some configs, where
+ at c FIXME...primary interest is in remote use.
+
+One of the preliminary versions of @sc{gnu} @code{m4} (a generic macro
+processor) exhibits the following bug: sometimes, when we change its
+quote strings from the default, the commands used to capture one macro
+definition within another stop working.  In the following short @code{m4}
+session, we define a macro @code{foo} which expands to @code{0000}; we
+then use the @code{m4} built-in @code{defn} to define @code{bar} as the
+same thing.  However, when we change the open quote string to
+ at code{<QUOTE>} and the close quote string to @code{<UNQUOTE>}, the same
+procedure fails to define a new synonym @code{baz}:
+
+ at smallexample
+$ @b{cd gnu/m4}
+$ @b{./m4}
+ at b{define(foo,0000)}
+
+ at b{foo}
+0000
+ at b{define(bar,defn(`foo'))}
+
+ at b{bar}
+0000
+ at b{changequote(<QUOTE>,<UNQUOTE>)}
+
+ at b{define(baz,defn(<QUOTE>foo<UNQUOTE>))}
+ at b{baz}
+ at b{Ctrl-d}
+m4: End of input: 0: fatal error: EOF in string
+ at end smallexample
+
+ at noindent
+Let us use @value{GDBN} to try to see what is going on.
+
+ at smallexample
+$ @b{@value{GDBP} m4}
+ at c FIXME: this falsifies the exact text played out, to permit smallbook
+ at c FIXME... format to come out better.
+ at value{GDBN} is free software and you are welcome to distribute copies
+ of it under certain conditions; type "show copying" to see
+ the conditions.
+There is absolutely no warranty for @value{GDBN}; type "show warranty"
+ for details.
+
+ at value{GDBN} @value{GDBVN}, Copyright 1999 Free Software Foundation, Inc...
+(@value{GDBP})
+ at end smallexample
+
+ at noindent
+ at value{GDBN} reads only enough symbol data to know where to find the
+rest when needed; as a result, the first prompt comes up very quickly.
+We now tell @value{GDBN} to use a narrower display width than usual, so
+that examples fit in this manual.
+
+ at smallexample
+(@value{GDBP}) @b{set width 70}
+ at end smallexample
+
+ at noindent
+We need to see how the @code{m4} built-in @code{changequote} works.
+Having looked at the source, we know the relevant subroutine is
+ at code{m4_changequote}, so we set a breakpoint there with the @value{GDBN}
+ at code{break} command.
+
+ at smallexample
+(@value{GDBP}) @b{break m4_changequote}
+Breakpoint 1 at 0x62f4: file builtin.c, line 879.
+ at end smallexample
+
+ at noindent
+Using the @code{run} command, we start @code{m4} running under @value{GDBN}
+control; as long as control does not reach the @code{m4_changequote}
+subroutine, the program runs as usual:
+
+ at smallexample
+(@value{GDBP}) @b{run}
+Starting program: /work/Editorial/gdb/gnu/m4/m4
+ at b{define(foo,0000)}
+
+ at b{foo}
+0000
+ at end smallexample
+
+ at noindent
+To trigger the breakpoint, we call @code{changequote}.  @value{GDBN}
+suspends execution of @code{m4}, displaying information about the
+context where it stops.
+
+ at smallexample
+ at b{changequote(<QUOTE>,<UNQUOTE>)}
+
+Breakpoint 1, m4_changequote (argc=3, argv=0x33c70)
+    at builtin.c:879
+879         if (bad_argc(TOKEN_DATA_TEXT(argv[0]),argc,1,3))
+ at end smallexample
+
+ at noindent
+Now we use the command @code{n} (@code{next}) to advance execution to
+the next line of the current function.
+
+ at smallexample
+(@value{GDBP}) @b{n}
+882         set_quotes((argc >= 2) ? TOKEN_DATA_TEXT(argv[1])\
+ : nil,
+ at end smallexample
+
+ at noindent
+ at code{set_quotes} looks like a promising subroutine.  We can go into it
+by using the command @code{s} (@code{step}) instead of @code{next}.
+ at code{step} goes to the next line to be executed in @emph{any}
+subroutine, so it steps into @code{set_quotes}.
+
+ at smallexample
+(@value{GDBP}) @b{s}
+set_quotes (lq=0x34c78 "<QUOTE>", rq=0x34c88 "<UNQUOTE>")
+    at input.c:530
+530         if (lquote != def_lquote)
+ at end smallexample
+
+ at noindent
+The display that shows the subroutine where @code{m4} is now
+suspended (and its arguments) is called a stack frame display.  It
+shows a summary of the stack.  We can use the @code{backtrace}
+command (which can also be spelled @code{bt}), to see where we are
+in the stack as a whole: the @code{backtrace} command displays a
+stack frame for each active subroutine.
+
+ at smallexample
+(@value{GDBP}) @b{bt}
+#0  set_quotes (lq=0x34c78 "<QUOTE>", rq=0x34c88 "<UNQUOTE>")
+    at input.c:530
+#1  0x6344 in m4_changequote (argc=3, argv=0x33c70)
+    at builtin.c:882
+#2  0x8174 in expand_macro (sym=0x33320) at macro.c:242
+#3  0x7a88 in expand_token (obs=0x0, t=209696, td=0xf7fffa30)
+    at macro.c:71
+#4  0x79dc in expand_input () at macro.c:40
+#5  0x2930 in main (argc=0, argv=0xf7fffb20) at m4.c:195
+ at end smallexample
+
+ at noindent
+We step through a few more lines to see what happens.  The first two
+times, we can use @samp{s}; the next two times we use @code{n} to avoid
+falling into the @code{xstrdup} subroutine.
+
+ at smallexample
+(@value{GDBP}) @b{s}
+0x3b5c  532         if (rquote != def_rquote)
+(@value{GDBP}) @b{s}
+0x3b80  535         lquote = (lq == nil || *lq == '\0') ?  \
+def_lquote : xstrdup(lq);
+(@value{GDBP}) @b{n}
+536         rquote = (rq == nil || *rq == '\0') ? def_rquote\
+ : xstrdup(rq);
+(@value{GDBP}) @b{n}
+538         len_lquote = strlen(rquote);
+ at end smallexample
+
+ at noindent
+The last line displayed looks a little odd; we can examine the variables
+ at code{lquote} and @code{rquote} to see if they are in fact the new left
+and right quotes we specified.  We use the command @code{p}
+(@code{print}) to see their values.
+
+ at smallexample
+(@value{GDBP}) @b{p lquote}
+$1 = 0x35d40 "<QUOTE>"
+(@value{GDBP}) @b{p rquote}
+$2 = 0x35d50 "<UNQUOTE>"
+ at end smallexample
+
+ at noindent
+ at code{lquote} and @code{rquote} are indeed the new left and right quotes.
+To look at some context, we can display ten lines of source
+surrounding the current line with the @code{l} (@code{list}) command.
+
+ at smallexample
+(@value{GDBP}) @b{l}
+533             xfree(rquote);
+534
+535         lquote = (lq == nil || *lq == '\0') ? def_lquote\
+ : xstrdup (lq);
+536         rquote = (rq == nil || *rq == '\0') ? def_rquote\
+ : xstrdup (rq);
+537
+538         len_lquote = strlen(rquote);
+539         len_rquote = strlen(lquote);
+540     @}
+541
+542     void
+ at end smallexample
+
+ at noindent
+Let us step past the two lines that set @code{len_lquote} and
+ at code{len_rquote}, and then examine the values of those variables.
+
+ at smallexample
+(@value{GDBP}) @b{n}
+539         len_rquote = strlen(lquote);
+(@value{GDBP}) @b{n}
+540     @}
+(@value{GDBP}) @b{p len_lquote}
+$3 = 9
+(@value{GDBP}) @b{p len_rquote}
+$4 = 7
+ at end smallexample
+
+ at noindent
+That certainly looks wrong, assuming @code{len_lquote} and
+ at code{len_rquote} are meant to be the lengths of @code{lquote} and
+ at code{rquote} respectively.  We can set them to better values using
+the @code{p} command, since it can print the value of
+any expression---and that expression can include subroutine calls and
+assignments.
+
+ at smallexample
+(@value{GDBP}) @b{p len_lquote=strlen(lquote)}
+$5 = 7
+(@value{GDBP}) @b{p len_rquote=strlen(rquote)}
+$6 = 9
+ at end smallexample
+
+ at noindent
+Is that enough to fix the problem of using the new quotes with the
+ at code{m4} built-in @code{defn}?  We can allow @code{m4} to continue
+executing with the @code{c} (@code{continue}) command, and then try the
+example that caused trouble initially:
+
+ at smallexample
+(@value{GDBP}) @b{c}
+Continuing.
+
+ at b{define(baz,defn(<QUOTE>foo<UNQUOTE>))}
+
+baz
+0000
+ at end smallexample
+
+ at noindent
+Success!  The new quotes now work just as well as the default ones.  The
+problem seems to have been just the two typos defining the wrong
+lengths.  We allow @code{m4} exit by giving it an EOF as input:
+
+ at smallexample
+ at b{Ctrl-d}
+Program exited normally.
+ at end smallexample
+
+ at noindent
+The message @samp{Program exited normally.} is from @value{GDBN}; it
+indicates @code{m4} has finished executing.  We can end our @value{GDBN}
+session with the @value{GDBN} @code{quit} command.
+
+ at smallexample
+(@value{GDBP}) @b{quit}
+ at end smallexample
+
+ at node Invocation
+ at chapter Getting In and Out of @value{GDBN}
+
+This chapter discusses how to start @value{GDBN}, and how to get out of it.
+The essentials are:
+ at itemize @bullet
+ at item
+type @samp{@value{GDBP}} to start @value{GDBN}.
+ at item
+type @kbd{quit} or @kbd{Ctrl-d} to exit.
+ at end itemize
+
+ at menu
+* Invoking GDB::                How to start @value{GDBN}
+* Quitting GDB::                How to quit @value{GDBN}
+* Shell Commands::              How to use shell commands inside @value{GDBN}
+* Logging Output::              How to log @value{GDBN}'s output to a file
+ at end menu
+
+ at node Invoking GDB
+ at section Invoking @value{GDBN}
+
+Invoke @value{GDBN} by running the program @code{@value{GDBP}}.  Once started,
+ at value{GDBN} reads commands from the terminal until you tell it to exit.
+
+You can also run @code{@value{GDBP}} with a variety of arguments and options,
+to specify more of your debugging environment at the outset.
+
+The command-line options described here are designed
+to cover a variety of situations; in some environments, some of these
+options may effectively be unavailable.
+
+The most usual way to start @value{GDBN} is with one argument,
+specifying an executable program:
+
+ at smallexample
+ at value{GDBP} @var{program}
+ at end smallexample
+
+ at noindent
+You can also start with both an executable program and a core file
+specified:
+
+ at smallexample
+ at value{GDBP} @var{program} @var{core}
+ at end smallexample
+
+You can, instead, specify a process ID as a second argument, if you want
+to debug a running process:
+
+ at smallexample
+ at value{GDBP} @var{program} 1234
+ at end smallexample
+
+ at noindent
+would attach @value{GDBN} to process @code{1234} (unless you also have a file
+named @file{1234}; @value{GDBN} does check for a core file first).
+
+Taking advantage of the second command-line argument requires a fairly
+complete operating system; when you use @value{GDBN} as a remote
+debugger attached to a bare board, there may not be any notion of
+``process'', and there is often no way to get a core dump.  @value{GDBN}
+will warn you if it is unable to attach or to read core dumps.
+
+You can optionally have @code{@value{GDBP}} pass any arguments after the
+executable file to the inferior using @code{--args}.  This option stops
+option processing.
+ at smallexample
+ at value{GDBP} --args gcc -O2 -c foo.c
+ at end smallexample
+This will cause @code{@value{GDBP}} to debug @code{gcc}, and to set
+ at code{gcc}'s command-line arguments (@pxref{Arguments}) to @samp{-O2 -c foo.c}.
+
+You can run @code{@value{GDBP}} without printing the front material, which describes
+ at value{GDBN}'s non-warranty, by specifying @code{-silent}:
+
+ at smallexample
+ at value{GDBP} -silent
+ at end smallexample
+
+ at noindent
+You can further control how @value{GDBN} starts up by using command-line
+options.  @value{GDBN} itself can remind you of the options available.
+
+ at noindent
+Type
+
+ at smallexample
+ at value{GDBP} -help
+ at end smallexample
+
+ at noindent
+to display all available options and briefly describe their use
+(@samp{@value{GDBP} -h} is a shorter equivalent).
+
+All options and command line arguments you give are processed
+in sequential order.  The order makes a difference when the
+ at samp{-x} option is used.
+
+
+ at menu
+* File Options::                Choosing files
+* Mode Options::                Choosing modes
+* Startup::                     What @value{GDBN} does during startup
+ at end menu
+
+ at node File Options
+ at subsection Choosing Files
+
+When @value{GDBN} starts, it reads any arguments other than options as
+specifying an executable file and core file (or process ID).  This is
+the same as if the arguments were specified by the @samp{-se} and
+ at samp{-c} (or @samp{-p}) options respectively.  (@value{GDBN} reads the
+first argument that does not have an associated option flag as
+equivalent to the @samp{-se} option followed by that argument; and the
+second argument that does not have an associated option flag, if any, as
+equivalent to the @samp{-c}/@samp{-p} option followed by that argument.)
+If the second argument begins with a decimal digit, @value{GDBN} will
+first attempt to attach to it as a process, and if that fails, attempt
+to open it as a corefile.  If you have a corefile whose name begins with
+a digit, you can prevent @value{GDBN} from treating it as a pid by
+prefixing it with @file{./}, e.g.@: @file{./12345}.
+
+If @value{GDBN} has not been configured to included core file support,
+such as for most embedded targets, then it will complain about a second
+argument and ignore it.
+
+Many options have both long and short forms; both are shown in the
+following list.  @value{GDBN} also recognizes the long forms if you truncate
+them, so long as enough of the option is present to be unambiguous.
+(If you prefer, you can flag option arguments with @samp{--} rather
+than @samp{-}, though we illustrate the more usual convention.)
+
+ at c NOTE: the @cindex entries here use double dashes ON PURPOSE.  This
+ at c way, both those who look for -foo and --foo in the index, will find
+ at c it.
+
+ at table @code
+ at item -symbols @var{file}
+ at itemx -s @var{file}
+ at cindex @code{--symbols}
+ at cindex @code{-s}
+Read symbol table from file @var{file}.
+
+ at item -exec @var{file}
+ at itemx -e @var{file}
+ at cindex @code{--exec}
+ at cindex @code{-e}
+Use file @var{file} as the executable file to execute when appropriate,
+and for examining pure data in conjunction with a core dump.
+
+ at item -se @var{file}
+ at cindex @code{--se}
+Read symbol table from file @var{file} and use it as the executable
+file.
+
+ at item -core @var{file}
+ at itemx -c @var{file}
+ at cindex @code{--core}
+ at cindex @code{-c}
+Use file @var{file} as a core dump to examine.
+
+ at item -pid @var{number}
+ at itemx -p @var{number}
+ at cindex @code{--pid}
+ at cindex @code{-p}
+Connect to process ID @var{number}, as with the @code{attach} command.
+
+ at item -command @var{file}
+ at itemx -x @var{file}
+ at cindex @code{--command}
+ at cindex @code{-x}
+Execute commands from file @var{file}.  The contents of this file is
+evaluated exactly as the @code{source} command would.
+ at xref{Command Files,, Command files}.
+
+ at item -eval-command @var{command}
+ at itemx -ex @var{command}
+ at cindex @code{--eval-command}
+ at cindex @code{-ex}
+Execute a single @value{GDBN} command.
+
+This option may be used multiple times to call multiple commands.  It may
+also be interleaved with @samp{-command} as required.
+
+ at smallexample
+ at value{GDBP} -ex 'target sim' -ex 'load' \
+   -x setbreakpoints -ex 'run' a.out
+ at end smallexample
+
+ at item -init-command @var{file}
+ at itemx -ix @var{file}
+ at cindex @code{--init-command}
+ at cindex @code{-ix}
+Execute commands from file @var{file} before loading the inferior (but
+after loading gdbinit files).
+ at xref{Startup}.
+
+ at item -init-eval-command @var{command}
+ at itemx -iex @var{command}
+ at cindex @code{--init-eval-command}
+ at cindex @code{-iex}
+Execute a single @value{GDBN} command before loading the inferior (but
+after loading gdbinit files).
+ at xref{Startup}.
+
+ at item -directory @var{directory}
+ at itemx -d @var{directory}
+ at cindex @code{--directory}
+ at cindex @code{-d}
+Add @var{directory} to the path to search for source and script files.
+
+ at item -r
+ at itemx -readnow
+ at cindex @code{--readnow}
+ at cindex @code{-r}
+Read each symbol file's entire symbol table immediately, rather than
+the default, which is to read it incrementally as it is needed.
+This makes startup slower, but makes future operations faster.
+
+ at end table
+
+ at node Mode Options
+ at subsection Choosing Modes
+
+You can run @value{GDBN} in various alternative modes---for example, in
+batch mode or quiet mode.
+
+ at table @code
+ at anchor{-nx}
+ at item -nx
+ at itemx -n
+ at cindex @code{--nx}
+ at cindex @code{-n}
+Do not execute commands found in any initialization files.  Normally,
+ at value{GDBN} executes the commands in these files after all the command
+options and arguments have been processed.  @xref{Command Files,,Command
+Files}.
+
+ at item -quiet
+ at itemx -silent
+ at itemx -q
+ at cindex @code{--quiet}
+ at cindex @code{--silent}
+ at cindex @code{-q}
+``Quiet''.  Do not print the introductory and copyright messages.  These
+messages are also suppressed in batch mode.
+
+ at item -batch
+ at cindex @code{--batch}
+Run in batch mode.  Exit with status @code{0} after processing all the
+command files specified with @samp{-x} (and all commands from
+initialization files, if not inhibited with @samp{-n}).  Exit with
+nonzero status if an error occurs in executing the @value{GDBN} commands
+in the command files.  Batch mode also disables pagination, sets unlimited
+terminal width and height @pxref{Screen Size}, and acts as if @kbd{set confirm
+off} were in effect (@pxref{Messages/Warnings}).
+
+Batch mode may be useful for running @value{GDBN} as a filter, for
+example to download and run a program on another computer; in order to
+make this more useful, the message
+
+ at smallexample
+Program exited normally.
+ at end smallexample
+
+ at noindent
+(which is ordinarily issued whenever a program running under
+ at value{GDBN} control terminates) is not issued when running in batch
+mode.
+
+ at item -batch-silent
+ at cindex @code{--batch-silent}
+Run in batch mode exactly like @samp{-batch}, but totally silently.  All
+ at value{GDBN} output to @code{stdout} is prevented (@code{stderr} is
+unaffected).  This is much quieter than @samp{-silent} and would be useless
+for an interactive session.
+
+This is particularly useful when using targets that give @samp{Loading section}
+messages, for example.
+
+Note that targets that give their output via @value{GDBN}, as opposed to
+writing directly to @code{stdout}, will also be made silent.
+
+ at item -return-child-result
+ at cindex @code{--return-child-result}
+The return code from @value{GDBN} will be the return code from the child
+process (the process being debugged), with the following exceptions:
+
+ at itemize @bullet
+ at item
+ at value{GDBN} exits abnormally.  E.g., due to an incorrect argument or an
+internal error.  In this case the exit code is the same as it would have been
+without @samp{-return-child-result}.
+ at item
+The user quits with an explicit value.  E.g., @samp{quit 1}.
+ at item
+The child process never runs, or is not allowed to terminate, in which case
+the exit code will be -1.
+ at end itemize
+
+This option is useful in conjunction with @samp{-batch} or @samp{-batch-silent},
+when @value{GDBN} is being used as a remote program loader or simulator
+interface.
+
+ at item -nowindows
+ at itemx -nw
+ at cindex @code{--nowindows}
+ at cindex @code{-nw}
+``No windows''.  If @value{GDBN} comes with a graphical user interface
+(GUI) built in, then this option tells @value{GDBN} to only use the command-line
+interface.  If no GUI is available, this option has no effect.
+
+ at item -windows
+ at itemx -w
+ at cindex @code{--windows}
+ at cindex @code{-w}
+If @value{GDBN} includes a GUI, then this option requires it to be
+used if possible.
+
+ at item -cd @var{directory}
+ at cindex @code{--cd}
+Run @value{GDBN} using @var{directory} as its working directory,
+instead of the current directory.
+
+ at item -data-directory @var{directory}
+ at cindex @code{--data-directory}
+Run @value{GDBN} using @var{directory} as its data directory.
+The data directory is where @value{GDBN} searches for its
+auxiliary files.  @xref{Data Files}.
+
+ at item -fullname
+ at itemx -f
+ at cindex @code{--fullname}
+ at cindex @code{-f}
+ at sc{gnu} Emacs sets this option when it runs @value{GDBN} as a
+subprocess.  It tells @value{GDBN} to output the full file name and line
+number in a standard, recognizable fashion each time a stack frame is
+displayed (which includes each time your program stops).  This
+recognizable format looks like two @samp{\032} characters, followed by
+the file name, line number and character position separated by colons,
+and a newline.  The Emacs-to- at value{GDBN} interface program uses the two
+ at samp{\032} characters as a signal to display the source code for the
+frame.
+
+ at item -epoch
+ at cindex @code{--epoch}
+The Epoch Emacs- at value{GDBN} interface sets this option when it runs
+ at value{GDBN} as a subprocess.  It tells @value{GDBN} to modify its print
+routines so as to allow Epoch to display values of expressions in a
+separate window.
+
+ at item -annotate @var{level}
+ at cindex @code{--annotate}
+This option sets the @dfn{annotation level} inside @value{GDBN}.  Its
+effect is identical to using @samp{set annotate @var{level}}
+(@pxref{Annotations}).  The annotation @var{level} controls how much
+information @value{GDBN} prints together with its prompt, values of
+expressions, source lines, and other types of output.  Level 0 is the
+normal, level 1 is for use when @value{GDBN} is run as a subprocess of
+ at sc{gnu} Emacs, level 3 is the maximum annotation suitable for programs
+that control @value{GDBN}, and level 2 has been deprecated.
+
+The annotation mechanism has largely been superseded by @sc{gdb/mi}
+(@pxref{GDB/MI}).
+
+ at item --args
+ at cindex @code{--args}
+Change interpretation of command line so that arguments following the
+executable file are passed as command line arguments to the inferior.
+This option stops option processing.
+
+ at item -baud @var{bps}
+ at itemx -b @var{bps}
+ at cindex @code{--baud}
+ at cindex @code{-b}
+Set the line speed (baud rate or bits per second) of any serial
+interface used by @value{GDBN} for remote debugging.
+
+ at item -l @var{timeout}
+ at cindex @code{-l}
+Set the timeout (in seconds) of any communication used by @value{GDBN}
+for remote debugging.
+
+ at item -tty @var{device}
+ at itemx -t @var{device}
+ at cindex @code{--tty}
+ at cindex @code{-t}
+Run using @var{device} for your program's standard input and output.
+ at c FIXME: kingdon thinks there is more to -tty.  Investigate.
+
+ at c resolve the situation of these eventually
+ at item -tui
+ at cindex @code{--tui}
+Activate the @dfn{Text User Interface} when starting.  The Text User
+Interface manages several text windows on the terminal, showing
+source, assembly, registers and @value{GDBN} command outputs
+(@pxref{TUI, , at value{GDBN} Text User Interface}).  Do not use this
+option if you run @value{GDBN} from Emacs (@pxref{Emacs, ,
+Using @value{GDBN} under @sc{gnu} Emacs}).
+
+ at c @item -xdb
+ at c @cindex @code{--xdb}
+ at c Run in XDB compatibility mode, allowing the use of certain XDB commands.
+ at c For information, see the file @file{xdb_trans.html}, which is usually
+ at c installed in the directory @code{/opt/langtools/wdb/doc} on HP-UX
+ at c systems.
+
+ at item -interpreter @var{interp}
+ at cindex @code{--interpreter}
+Use the interpreter @var{interp} for interface with the controlling
+program or device.  This option is meant to be set by programs which
+communicate with @value{GDBN} using it as a back end.
+ at xref{Interpreters, , Command Interpreters}.
+
+ at samp{--interpreter=mi} (or @samp{--interpreter=mi2}) causes
+ at value{GDBN} to use the @dfn{@sc{gdb/mi} interface} (@pxref{GDB/MI, ,
+The @sc{gdb/mi} Interface}) included since @value{GDBN} version 6.0.  The
+previous @sc{gdb/mi} interface, included in @value{GDBN} version 5.3 and
+selected with @samp{--interpreter=mi1}, is deprecated.  Earlier
+ at sc{gdb/mi} interfaces are no longer supported.
+
+ at item -write
+ at cindex @code{--write}
+Open the executable and core files for both reading and writing.  This
+is equivalent to the @samp{set write on} command inside @value{GDBN}
+(@pxref{Patching}).
+
+ at item -statistics
+ at cindex @code{--statistics}
+This option causes @value{GDBN} to print statistics about time and
+memory usage after it completes each command and returns to the prompt.
+
+ at item -version
+ at cindex @code{--version}
+This option causes @value{GDBN} to print its version number and
+no-warranty blurb, and exit.
+
+ at end table
+
+ at node Startup
+ at subsection What @value{GDBN} Does During Startup
+ at cindex @value{GDBN} startup
+
+Here's the description of what @value{GDBN} does during session startup:
+
+ at enumerate
+ at item
+Sets up the command interpreter as specified by the command line
+(@pxref{Mode Options, interpreter}).
+
+ at item
+ at cindex init file
+Reads the system-wide @dfn{init file} (if @option{--with-system-gdbinit} was
+used when building @value{GDBN}; @pxref{System-wide configuration,
+ ,System-wide configuration and settings}) and executes all the commands in
+that file.
+
+ at anchor{Home Directory Init File}
+ at item
+Reads the init file (if any) in your home directory at footnote{On
+DOS/Windows systems, the home directory is the one pointed to by the
+ at code{HOME} environment variable.} and executes all the commands in
+that file.
+
+ at anchor{Option -init-eval-command}
+ at item
+Executes commands and command files specified by the @samp{-iex} and
+ at samp{-ix} options in their specified order.  Usually you should use the
+ at samp{-ex} and @samp{-x} options instead, but this way you can apply
+settings before @value{GDBN} init files get executed and before inferior
+gets loaded.
+
+ at item
+Processes command line options and operands.
+
+ at anchor{Init File in the Current Directory during Startup}
+ at item
+Reads and executes the commands from init file (if any) in the current
+working directory as long as @samp{set auto-load local-gdbinit} is set to
+ at samp{on} (@pxref{Init File in the Current Directory}).
+This is only done if the current directory is
+different from your home directory.  Thus, you can have more than one
+init file, one generic in your home directory, and another, specific
+to the program you are debugging, in the directory where you invoke
+ at value{GDBN}.
+
+ at item
+If the command line specified a program to debug, or a process to
+attach to, or a core file, @value{GDBN} loads any auto-loaded
+scripts provided for the program or for its loaded shared libraries.
+ at xref{Auto-loading}.
+
+If you wish to disable the auto-loading during startup,
+you must do something like the following:
+
+ at smallexample
+$ gdb -iex "set auto-load python-scripts off" myprogram
+ at end smallexample
+
+Option @samp{-ex} does not work because the auto-loading is then turned
+off too late.
+
+ at item
+Executes commands and command files specified by the @samp{-ex} and
+ at samp{-x} options in their specified order.  @xref{Command Files}, for
+more details about @value{GDBN} command files.
+
+ at item
+Reads the command history recorded in the @dfn{history file}.
+ at xref{Command History}, for more details about the command history and the
+files where @value{GDBN} records it.
+ at end enumerate
+
+Init files use the same syntax as @dfn{command files} (@pxref{Command
+Files}) and are processed by @value{GDBN} in the same way.  The init
+file in your home directory can set options (such as @samp{set
+complaints}) that affect subsequent processing of command line options
+and operands.  Init files are not executed if you use the @samp{-nx}
+option (@pxref{Mode Options, ,Choosing Modes}).
+
+To display the list of init files loaded by gdb at startup, you
+can use @kbd{gdb --help}.
+
+ at cindex init file name
+ at cindex @file{.gdbinit}
+ at cindex @file{gdb.ini}
+The @value{GDBN} init files are normally called @file{.gdbinit}.
+The DJGPP port of @value{GDBN} uses the name @file{gdb.ini}, due to
+the limitations of file names imposed by DOS filesystems.  The Windows
+ports of @value{GDBN} use the standard name, but if they find a
+ at file{gdb.ini} file, they warn you about that and suggest to rename
+the file to the standard name.
+
+
+ at node Quitting GDB
+ at section Quitting @value{GDBN}
+ at cindex exiting @value{GDBN}
+ at cindex leaving @value{GDBN}
+
+ at table @code
+ at kindex quit @r{[}@var{expression}@r{]}
+ at kindex q @r{(@code{quit})}
+ at item quit @r{[}@var{expression}@r{]}
+ at itemx q
+To exit @value{GDBN}, use the @code{quit} command (abbreviated
+ at code{q}), or type an end-of-file character (usually @kbd{Ctrl-d}).  If you
+do not supply @var{expression}, @value{GDBN} will terminate normally;
+otherwise it will terminate using the result of @var{expression} as the
+error code.
+ at end table
+
+ at cindex interrupt
+An interrupt (often @kbd{Ctrl-c}) does not exit from @value{GDBN}, but rather
+terminates the action of any @value{GDBN} command that is in progress and
+returns to @value{GDBN} command level.  It is safe to type the interrupt
+character at any time because @value{GDBN} does not allow it to take effect
+until a time when it is safe.
+
+If you have been using @value{GDBN} to control an attached process or
+device, you can release it with the @code{detach} command
+(@pxref{Attach, ,Debugging an Already-running Process}).
+
+ at node Shell Commands
+ at section Shell Commands
+
+If you need to execute occasional shell commands during your
+debugging session, there is no need to leave or suspend @value{GDBN}; you can
+just use the @code{shell} command.
+
+ at table @code
+ at kindex shell
+ at kindex !
+ at cindex shell escape
+ at item shell @var{command-string}
+ at itemx !@var{command-string}
+Invoke a standard shell to execute @var{command-string}.
+Note that no space is needed between @code{!} and @var{command-string}.
+If it exists, the environment variable @code{SHELL} determines which
+shell to run.  Otherwise @value{GDBN} uses the default shell
+(@file{/bin/sh} on Unix systems, @file{COMMAND.COM} on MS-DOS, etc.).
+ at end table
+
+The utility @code{make} is often needed in development environments.
+You do not have to use the @code{shell} command for this purpose in
+ at value{GDBN}:
+
+ at table @code
+ at kindex make
+ at cindex calling make
+ at item make @var{make-args}
+Execute the @code{make} program with the specified
+arguments.  This is equivalent to @samp{shell make @var{make-args}}.
+ at end table
+
+ at node Logging Output
+ at section Logging Output
+ at cindex logging @value{GDBN} output
+ at cindex save @value{GDBN} output to a file
+
+You may want to save the output of @value{GDBN} commands to a file.
+There are several commands to control @value{GDBN}'s logging.
+
+ at table @code
+ at kindex set logging
+ at item set logging on
+Enable logging.
+ at item set logging off
+Disable logging.
+ at cindex logging file name
+ at item set logging file @var{file}
+Change the name of the current logfile.  The default logfile is @file{gdb.txt}.
+ at item set logging overwrite [on|off]
+By default, @value{GDBN} will append to the logfile.  Set @code{overwrite} if
+you want @code{set logging on} to overwrite the logfile instead.
+ at item set logging redirect [on|off]
+By default, @value{GDBN} output will go to both the terminal and the logfile.
+Set @code{redirect} if you want output to go only to the log file.
+ at kindex show logging
+ at item show logging
+Show the current values of the logging settings.
+ at end table
+
+ at node Commands
+ at chapter @value{GDBN} Commands
+
+You can abbreviate a @value{GDBN} command to the first few letters of the command
+name, if that abbreviation is unambiguous; and you can repeat certain
+ at value{GDBN} commands by typing just @key{RET}.  You can also use the @key{TAB}
+key to get @value{GDBN} to fill out the rest of a word in a command (or to
+show you the alternatives available, if there is more than one possibility).
+
+ at menu
+* Command Syntax::              How to give commands to @value{GDBN}
+* Completion::                  Command completion
+* Help::                        How to ask @value{GDBN} for help
+ at end menu
+
+ at node Command Syntax
+ at section Command Syntax
+
+A @value{GDBN} command is a single line of input.  There is no limit on
+how long it can be.  It starts with a command name, which is followed by
+arguments whose meaning depends on the command name.  For example, the
+command @code{step} accepts an argument which is the number of times to
+step, as in @samp{step 5}.  You can also use the @code{step} command
+with no arguments.  Some commands do not allow any arguments.
+
+ at cindex abbreviation
+ at value{GDBN} command names may always be truncated if that abbreviation is
+unambiguous.  Other possible command abbreviations are listed in the
+documentation for individual commands.  In some cases, even ambiguous
+abbreviations are allowed; for example, @code{s} is specially defined as
+equivalent to @code{step} even though there are other commands whose
+names start with @code{s}.  You can test abbreviations by using them as
+arguments to the @code{help} command.
+
+ at cindex repeating commands
+ at kindex RET @r{(repeat last command)}
+A blank line as input to @value{GDBN} (typing just @key{RET}) means to
+repeat the previous command.  Certain commands (for example, @code{run})
+will not repeat this way; these are commands whose unintentional
+repetition might cause trouble and which you are unlikely to want to
+repeat.  User-defined commands can disable this feature; see
+ at ref{Define, dont-repeat}.
+
+The @code{list} and @code{x} commands, when you repeat them with
+ at key{RET}, construct new arguments rather than repeating
+exactly as typed.  This permits easy scanning of source or memory.
+
+ at value{GDBN} can also use @key{RET} in another way: to partition lengthy
+output, in a way similar to the common utility @code{more}
+(@pxref{Screen Size,,Screen Size}).  Since it is easy to press one
+ at key{RET} too many in this situation, @value{GDBN} disables command
+repetition after any command that generates this sort of display.
+
+ at kindex # @r{(a comment)}
+ at cindex comment
+Any text from a @kbd{#} to the end of the line is a comment; it does
+nothing.  This is useful mainly in command files (@pxref{Command
+Files,,Command Files}).
+
+ at cindex repeating command sequences
+ at kindex Ctrl-o @r{(operate-and-get-next)}
+The @kbd{Ctrl-o} binding is useful for repeating a complex sequence of
+commands.  This command accepts the current line, like @key{RET}, and
+then fetches the next line relative to the current line from the history
+for editing.
+
+ at node Completion
+ at section Command Completion
+
+ at cindex completion
+ at cindex word completion
+ at value{GDBN} can fill in the rest of a word in a command for you, if there is
+only one possibility; it can also show you what the valid possibilities
+are for the next word in a command, at any time.  This works for @value{GDBN}
+commands, @value{GDBN} subcommands, and the names of symbols in your program.
+
+Press the @key{TAB} key whenever you want @value{GDBN} to fill out the rest
+of a word.  If there is only one possibility, @value{GDBN} fills in the
+word, and waits for you to finish the command (or press @key{RET} to
+enter it).  For example, if you type
+
+ at c FIXME "@key" does not distinguish its argument sufficiently to permit
+ at c complete accuracy in these examples; space introduced for clarity.
+ at c If texinfo enhancements make it unnecessary, it would be nice to
+ at c replace " @key" by "@key" in the following...
+ at smallexample
+(@value{GDBP}) info bre @key{TAB}
+ at end smallexample
+
+ at noindent
+ at value{GDBN} fills in the rest of the word @samp{breakpoints}, since that is
+the only @code{info} subcommand beginning with @samp{bre}:
+
+ at smallexample
+(@value{GDBP}) info breakpoints
+ at end smallexample
+
+ at noindent
+You can either press @key{RET} at this point, to run the @code{info
+breakpoints} command, or backspace and enter something else, if
+ at samp{breakpoints} does not look like the command you expected.  (If you
+were sure you wanted @code{info breakpoints} in the first place, you
+might as well just type @key{RET} immediately after @samp{info bre},
+to exploit command abbreviations rather than command completion).
+
+If there is more than one possibility for the next word when you press
+ at key{TAB}, @value{GDBN} sounds a bell.  You can either supply more
+characters and try again, or just press @key{TAB} a second time;
+ at value{GDBN} displays all the possible completions for that word.  For
+example, you might want to set a breakpoint on a subroutine whose name
+begins with @samp{make_}, but when you type @kbd{b make_ at key{TAB}} @value{GDBN}
+just sounds the bell.  Typing @key{TAB} again displays all the
+function names in your program that begin with those characters, for
+example:
+
+ at smallexample
+(@value{GDBP}) b make_ @key{TAB}
+ at exdent @value{GDBN} sounds bell; press @key{TAB} again, to see:
+make_a_section_from_file     make_environ
+make_abs_section             make_function_type
+make_blockvector             make_pointer_type
+make_cleanup                 make_reference_type
+make_command                 make_symbol_completion_list
+(@value{GDBP}) b make_
+ at end smallexample
+
+ at noindent
+After displaying the available possibilities, @value{GDBN} copies your
+partial input (@samp{b make_} in the example) so you can finish the
+command.
+
+If you just want to see the list of alternatives in the first place, you
+can press @kbd{M-?} rather than pressing @key{TAB} twice.  @kbd{M-?}
+means @kbd{@key{META} ?}.  You can type this either by holding down a
+key designated as the @key{META} shift on your keyboard (if there is
+one) while typing @kbd{?}, or as @key{ESC} followed by @kbd{?}.
+
+ at cindex quotes in commands
+ at cindex completion of quoted strings
+Sometimes the string you need, while logically a ``word'', may contain
+parentheses or other characters that @value{GDBN} normally excludes from
+its notion of a word.  To permit word completion to work in this
+situation, you may enclose words in @code{'} (single quote marks) in
+ at value{GDBN} commands.
+
+The most likely situation where you might need this is in typing the
+name of a C at t{++} function.  This is because C at t{++} allows function
+overloading (multiple definitions of the same function, distinguished
+by argument type).  For example, when you want to set a breakpoint you
+may need to distinguish whether you mean the version of @code{name}
+that takes an @code{int} parameter, @code{name(int)}, or the version
+that takes a @code{float} parameter, @code{name(float)}.  To use the
+word-completion facilities in this situation, type a single quote
+ at code{'} at the beginning of the function name.  This alerts
+ at value{GDBN} that it may need to consider more information than usual
+when you press @key{TAB} or @kbd{M-?} to request word completion:
+
+ at smallexample
+(@value{GDBP}) b 'bubble( @kbd{M-?}
+bubble(double,double)    bubble(int,int)
+(@value{GDBP}) b 'bubble(
+ at end smallexample
+
+In some cases, @value{GDBN} can tell that completing a name requires using
+quotes.  When this happens, @value{GDBN} inserts the quote for you (while
+completing as much as it can) if you do not type the quote in the first
+place:
+
+ at smallexample
+(@value{GDBP}) b bub @key{TAB}
+ at exdent @value{GDBN} alters your input line to the following, and rings a bell:
+(@value{GDBP}) b 'bubble(
+ at end smallexample
+
+ at noindent
+In general, @value{GDBN} can tell that a quote is needed (and inserts it) if
+you have not yet started typing the argument list when you ask for
+completion on an overloaded symbol.
+
+For more information about overloaded functions, see @ref{C Plus Plus
+Expressions, ,C at t{++} Expressions}.  You can use the command @code{set
+overload-resolution off} to disable overload resolution;
+see @ref{Debugging C Plus Plus, , at value{GDBN} Features for C at t{++}}.
+
+ at cindex completion of structure field names
+ at cindex structure field name completion
+ at cindex completion of union field names
+ at cindex union field name completion
+When completing in an expression which looks up a field in a
+structure, @value{GDBN} also tries at footnote{The completer can be
+confused by certain kinds of invalid expressions.  Also, it only
+examines the static type of the expression, not the dynamic type.} to
+limit completions to the field names available in the type of the
+left-hand-side:
+
+ at smallexample
+(@value{GDBP}) p gdb_stdout. at kbd{M-?}
+magic                to_fputs             to_rewind
+to_data              to_isatty            to_write
+to_delete            to_put               to_write_async_safe
+to_flush             to_read
+ at end smallexample
+
+ at noindent
+This is because the @code{gdb_stdout} is a variable of the type
+ at code{struct ui_file} that is defined in @value{GDBN} sources as
+follows:
+
+ at smallexample
+struct ui_file
+@{
+   int *magic;
+   ui_file_flush_ftype *to_flush;
+   ui_file_write_ftype *to_write;
+   ui_file_write_async_safe_ftype *to_write_async_safe;
+   ui_file_fputs_ftype *to_fputs;
+   ui_file_read_ftype *to_read;
+   ui_file_delete_ftype *to_delete;
+   ui_file_isatty_ftype *to_isatty;
+   ui_file_rewind_ftype *to_rewind;
+   ui_file_put_ftype *to_put;
+   void *to_data;
+@}
+ at end smallexample
+
+
+ at node Help
+ at section Getting Help
+ at cindex online documentation
+ at kindex help
+
+You can always ask @value{GDBN} itself for information on its commands,
+using the command @code{help}.
+
+ at table @code
+ at kindex h @r{(@code{help})}
+ at item help
+ at itemx h
+You can use @code{help} (abbreviated @code{h}) with no arguments to
+display a short list of named classes of commands:
+
+ at smallexample
+(@value{GDBP}) help
+List of classes of commands:
+
+aliases -- Aliases of other commands
+breakpoints -- Making program stop at certain points
+data -- Examining data
+files -- Specifying and examining files
+internals -- Maintenance commands
+obscure -- Obscure features
+running -- Running the program
+stack -- Examining the stack
+status -- Status inquiries
+support -- Support facilities
+tracepoints -- Tracing of program execution without
+               stopping the program
+user-defined -- User-defined commands
+
+Type "help" followed by a class name for a list of
+commands in that class.
+Type "help" followed by command name for full
+documentation.
+Command name abbreviations are allowed if unambiguous.
+(@value{GDBP})
+ at end smallexample
+ at c the above line break eliminates huge line overfull...
+
+ at item help @var{class}
+Using one of the general help classes as an argument, you can get a
+list of the individual commands in that class.  For example, here is the
+help display for the class @code{status}:
+
+ at smallexample
+(@value{GDBP}) help status
+Status inquiries.
+
+List of commands:
+
+ at c Line break in "show" line falsifies real output, but needed
+ at c to fit in smallbook page size.
+info -- Generic command for showing things
+        about the program being debugged
+show -- Generic command for showing things
+        about the debugger
+
+Type "help" followed by command name for full
+documentation.
+Command name abbreviations are allowed if unambiguous.
+(@value{GDBP})
+ at end smallexample
+
+ at item help @var{command}
+With a command name as @code{help} argument, @value{GDBN} displays a
+short paragraph on how to use that command.
+
+ at kindex apropos
+ at item apropos @var{args}
+The @code{apropos} command searches through all of the @value{GDBN}
+commands, and their documentation, for the regular expression specified in
+ at var{args}.  It prints out all matches found.  For example:
+
+ at smallexample
+apropos alias
+ at end smallexample
+
+ at noindent
+results in:
+
+ at smallexample
+ at c @group
+alias -- Define a new command that is an alias of an existing command
+aliases -- Aliases of other commands
+d -- Delete some breakpoints or auto-display expressions
+del -- Delete some breakpoints or auto-display expressions
+delete -- Delete some breakpoints or auto-display expressions
+ at c @end group
+ at end smallexample
+
+ at kindex complete
+ at item complete @var{args}
+The @code{complete @var{args}} command lists all the possible completions
+for the beginning of a command.  Use @var{args} to specify the beginning of the
+command you want completed.  For example:
+
+ at smallexample
+complete i
+ at end smallexample
+
+ at noindent results in:
+
+ at smallexample
+ at group
+if
+ignore
+info
+inspect
+ at end group
+ at end smallexample
+
+ at noindent This is intended for use by @sc{gnu} Emacs.
+ at end table
+
+In addition to @code{help}, you can use the @value{GDBN} commands @code{info}
+and @code{show} to inquire about the state of your program, or the state
+of @value{GDBN} itself.  Each command supports many topics of inquiry; this
+manual introduces each of them in the appropriate context.  The listings
+under @code{info} and under @code{show} in the Command, Variable, and
+Function Index point to all the sub-commands.  @xref{Command and Variable
+Index}.
+
+ at c @group
+ at table @code
+ at kindex info
+ at kindex i @r{(@code{info})}
+ at item info
+This command (abbreviated @code{i}) is for describing the state of your
+program.  For example, you can show the arguments passed to a function
+with @code{info args}, list the registers currently in use with @code{info
+registers}, or list the breakpoints you have set with @code{info breakpoints}.
+You can get a complete list of the @code{info} sub-commands with
+ at w{@code{help info}}.
+
+ at kindex set
+ at item set
+You can assign the result of an expression to an environment variable with
+ at code{set}.  For example, you can set the @value{GDBN} prompt to a $-sign with
+ at code{set prompt $}.
+
+ at kindex show
+ at item show
+In contrast to @code{info}, @code{show} is for describing the state of
+ at value{GDBN} itself.
+You can change most of the things you can @code{show}, by using the
+related command @code{set}; for example, you can control what number
+system is used for displays with @code{set radix}, or simply inquire
+which is currently in use with @code{show radix}.
+
+ at kindex info set
+To display all the settable parameters and their current
+values, you can use @code{show} with no arguments; you may also use
+ at code{info set}.  Both commands produce the same display.
+ at c FIXME: "info set" violates the rule that "info" is for state of
+ at c FIXME...program.  Ck w/ GNU: "info set" to be called something else,
+ at c FIXME...or change desc of rule---eg "state of prog and debugging session"?
+ at end table
+ at c @end group
+
+Here are three miscellaneous @code{show} subcommands, all of which are
+exceptional in lacking corresponding @code{set} commands:
+
+ at table @code
+ at kindex show version
+ at cindex @value{GDBN} version number
+ at item show version
+Show what version of @value{GDBN} is running.  You should include this
+information in @value{GDBN} bug-reports.  If multiple versions of
+ at value{GDBN} are in use at your site, you may need to determine which
+version of @value{GDBN} you are running; as @value{GDBN} evolves, new
+commands are introduced, and old ones may wither away.  Also, many
+system vendors ship variant versions of @value{GDBN}, and there are
+variant versions of @value{GDBN} in @sc{gnu}/Linux distributions as well.
+The version number is the same as the one announced when you start
+ at value{GDBN}.
+
+ at kindex show copying
+ at kindex info copying
+ at cindex display @value{GDBN} copyright
+ at item show copying
+ at itemx info copying
+Display information about permission for copying @value{GDBN}.
+
+ at kindex show warranty
+ at kindex info warranty
+ at item show warranty
+ at itemx info warranty
+Display the @sc{gnu} ``NO WARRANTY'' statement, or a warranty,
+if your version of @value{GDBN} comes with one.
+
+ at end table
+
+ at node Running
+ at chapter Running Programs Under @value{GDBN}
+
+When you run a program under @value{GDBN}, you must first generate
+debugging information when you compile it.
+
+You may start @value{GDBN} with its arguments, if any, in an environment
+of your choice.  If you are doing native debugging, you may redirect
+your program's input and output, debug an already running process, or
+kill a child process.
+
+ at menu
+* Compilation::                 Compiling for debugging
+* Starting::                    Starting your program
+* Arguments::                   Your program's arguments
+* Environment::                 Your program's environment
+
+* Working Directory::           Your program's working directory
+* Input/Output::                Your program's input and output
+* Attach::                      Debugging an already-running process
+* Kill Process::                Killing the child process
+
+* Inferiors and Programs::      Debugging multiple inferiors and programs
+* Threads::                     Debugging programs with multiple threads
+* Forks::                       Debugging forks
+* Checkpoint/Restart::          Setting a @emph{bookmark} to return to later
+ at end menu
+
+ at node Compilation
+ at section Compiling for Debugging
+
+In order to debug a program effectively, you need to generate
+debugging information when you compile it.  This debugging information
+is stored in the object file; it describes the data type of each
+variable or function and the correspondence between source line numbers
+and addresses in the executable code.
+
+To request debugging information, specify the @samp{-g} option when you run
+the compiler.
+
+Programs that are to be shipped to your customers are compiled with
+optimizations, using the @samp{-O} compiler option.  However, some
+compilers are unable to handle the @samp{-g} and @samp{-O} options
+together.  Using those compilers, you cannot generate optimized
+executables containing debugging information.
+
+ at value{NGCC}, the @sc{gnu} C/C at t{++} compiler, supports @samp{-g} with or
+without @samp{-O}, making it possible to debug optimized code.  We
+recommend that you @emph{always} use @samp{-g} whenever you compile a
+program.  You may think your program is correct, but there is no sense
+in pushing your luck.  For more information, see @ref{Optimized Code}.
+
+Older versions of the @sc{gnu} C compiler permitted a variant option
+ at w{@samp{-gg}} for debugging information.  @value{GDBN} no longer supports this
+format; if your @sc{gnu} C compiler has this option, do not use it.
+
+ at value{GDBN} knows about preprocessor macros and can show you their
+expansion (@pxref{Macros}).  Most compilers do not include information
+about preprocessor macros in the debugging information if you specify
+the @option{-g} flag alone.  Version 3.1 and later of @value{NGCC},
+the @sc{gnu} C compiler, provides macro information if you are using
+the DWARF debugging format, and specify the option @option{-g3}.
+
+ at xref{Debugging Options,,Options for Debugging Your Program or GCC,
+gcc.info, Using the @sc{gnu} Compiler Collection (GCC)}, for more
+information on @value{NGCC} options affecting debug information.
+
+You will have the best debugging experience if you use the latest
+version of the DWARF debugging format that your compiler supports.
+DWARF is currently the most expressive and best supported debugging
+format in @value{GDBN}.
+
+ at need 2000
+ at node Starting
+ at section Starting your Program
+ at cindex starting
+ at cindex running
+
+ at table @code
+ at kindex run
+ at kindex r @r{(@code{run})}
+ at item run
+ at itemx r
+Use the @code{run} command to start your program under @value{GDBN}.
+You must first specify the program name (except on VxWorks) with an
+argument to @value{GDBN} (@pxref{Invocation, ,Getting In and Out of
+ at value{GDBN}}), or by using the @code{file} or @code{exec-file} command
+(@pxref{Files, ,Commands to Specify Files}).
+
+ at end table
+
+If you are running your program in an execution environment that
+supports processes, @code{run} creates an inferior process and makes
+that process run your program.  In some environments without processes,
+ at code{run} jumps to the start of your program.  Other targets,
+like @samp{remote}, are always running.  If you get an error
+message like this one:
+
+ at smallexample
+The "remote" target does not support "run".
+Try "help target" or "continue".
+ at end smallexample
+
+ at noindent
+then use @code{continue} to run your program.  You may need @code{load}
+first (@pxref{load}).
+
+The execution of a program is affected by certain information it
+receives from its superior.  @value{GDBN} provides ways to specify this
+information, which you must do @emph{before} starting your program.  (You
+can change it after starting your program, but such changes only affect
+your program the next time you start it.)  This information may be
+divided into four categories:
+
+ at table @asis
+ at item The @emph{arguments.}
+Specify the arguments to give your program as the arguments of the
+ at code{run} command.  If a shell is available on your target, the shell
+is used to pass the arguments, so that you may use normal conventions
+(such as wildcard expansion or variable substitution) in describing
+the arguments.
+In Unix systems, you can control which shell is used with the
+ at code{SHELL} environment variable.
+ at xref{Arguments, ,Your Program's Arguments}.
+
+ at item The @emph{environment.}
+Your program normally inherits its environment from @value{GDBN}, but you can
+use the @value{GDBN} commands @code{set environment} and @code{unset
+environment} to change parts of the environment that affect
+your program.  @xref{Environment, ,Your Program's Environment}.
+
+ at item The @emph{working directory.}
+Your program inherits its working directory from @value{GDBN}.  You can set
+the @value{GDBN} working directory with the @code{cd} command in @value{GDBN}.
+ at xref{Working Directory, ,Your Program's Working Directory}.
+
+ at item The @emph{standard input and output.}
+Your program normally uses the same device for standard input and
+standard output as @value{GDBN} is using.  You can redirect input and output
+in the @code{run} command line, or you can use the @code{tty} command to
+set a different device for your program.
+ at xref{Input/Output, ,Your Program's Input and Output}.
+
+ at cindex pipes
+ at emph{Warning:} While input and output redirection work, you cannot use
+pipes to pass the output of the program you are debugging to another
+program; if you attempt this, @value{GDBN} is likely to wind up debugging the
+wrong program.
+ at end table
+
+When you issue the @code{run} command, your program begins to execute
+immediately.  @xref{Stopping, ,Stopping and Continuing}, for discussion
+of how to arrange for your program to stop.  Once your program has
+stopped, you may call functions in your program, using the @code{print}
+or @code{call} commands.  @xref{Data, ,Examining Data}.
+
+If the modification time of your symbol file has changed since the last
+time @value{GDBN} read its symbols, @value{GDBN} discards its symbol
+table, and reads it again.  When it does this, @value{GDBN} tries to retain
+your current breakpoints.
+
+ at table @code
+ at kindex start
+ at item start
+ at cindex run to main procedure
+The name of the main procedure can vary from language to language.
+With C or C at t{++}, the main procedure name is always @code{main}, but
+other languages such as Ada do not require a specific name for their
+main procedure.  The debugger provides a convenient way to start the
+execution of the program and to stop at the beginning of the main
+procedure, depending on the language used.
+
+The @samp{start} command does the equivalent of setting a temporary
+breakpoint at the beginning of the main procedure and then invoking
+the @samp{run} command.
+
+ at cindex elaboration phase
+Some programs contain an @dfn{elaboration} phase where some startup code is
+executed before the main procedure is called.  This depends on the
+languages used to write your program.  In C at t{++}, for instance,
+constructors for static and global objects are executed before
+ at code{main} is called.  It is therefore possible that the debugger stops
+before reaching the main procedure.  However, the temporary breakpoint
+will remain to halt execution.
+
+Specify the arguments to give to your program as arguments to the
+ at samp{start} command.  These arguments will be given verbatim to the
+underlying @samp{run} command.  Note that the same arguments will be
+reused if no argument is provided during subsequent calls to
+ at samp{start} or @samp{run}.
+
+It is sometimes necessary to debug the program during elaboration.  In
+these cases, using the @code{start} command would stop the execution of
+your program too late, as the program would have already completed the
+elaboration phase.  Under these circumstances, insert breakpoints in your
+elaboration code before running your program.
+
+ at kindex set exec-wrapper
+ at item set exec-wrapper @var{wrapper}
+ at itemx show exec-wrapper
+ at itemx unset exec-wrapper
+When @samp{exec-wrapper} is set, the specified wrapper is used to
+launch programs for debugging.  @value{GDBN} starts your program
+with a shell command of the form @kbd{exec @var{wrapper}
+ at var{program}}.  Quoting is added to @var{program} and its
+arguments, but not to @var{wrapper}, so you should add quotes if
+appropriate for your shell.  The wrapper runs until it executes
+your program, and then @value{GDBN} takes control.
+
+You can use any program that eventually calls @code{execve} with
+its arguments as a wrapper.  Several standard Unix utilities do
+this, e.g.@: @code{env} and @code{nohup}.  Any Unix shell script ending
+with @code{exec "$@@"} will also work.
+
+For example, you can use @code{env} to pass an environment variable to
+the debugged program, without setting the variable in your shell's
+environment:
+
+ at smallexample
+(@value{GDBP}) set exec-wrapper env 'LD_PRELOAD=libtest.so'
+(@value{GDBP}) run
+ at end smallexample
+
+This command is available when debugging locally on most targets, excluding
+ at sc{djgpp}, Cygwin, MS Windows, and QNX Neutrino.
+
+ at kindex set disable-randomization
+ at item set disable-randomization
+ at itemx set disable-randomization on
+This option (enabled by default in @value{GDBN}) will turn off the native
+randomization of the virtual address space of the started program.  This option
+is useful for multiple debugging sessions to make the execution better
+reproducible and memory addresses reusable across debugging sessions.
+
+This feature is implemented only on certain targets, including @sc{gnu}/Linux.
+On @sc{gnu}/Linux you can get the same behavior using
+
+ at smallexample
+(@value{GDBP}) set exec-wrapper setarch `uname -m` -R
+ at end smallexample
+
+ at item set disable-randomization off
+Leave the behavior of the started executable unchanged.  Some bugs rear their
+ugly heads only when the program is loaded at certain addresses.  If your bug
+disappears when you run the program under @value{GDBN}, that might be because
+ at value{GDBN} by default disables the address randomization on platforms, such
+as @sc{gnu}/Linux, which do that for stand-alone programs.  Use @kbd{set
+disable-randomization off} to try to reproduce such elusive bugs.
+
+On targets where it is available, virtual address space randomization
+protects the programs against certain kinds of security attacks.  In these
+cases the attacker needs to know the exact location of a concrete executable
+code.  Randomizing its location makes it impossible to inject jumps misusing
+a code at its expected addresses.
+
+Prelinking shared libraries provides a startup performance advantage but it
+makes addresses in these libraries predictable for privileged processes by
+having just unprivileged access at the target system.  Reading the shared
+library binary gives enough information for assembling the malicious code
+misusing it.  Still even a prelinked shared library can get loaded at a new
+random address just requiring the regular relocation process during the
+startup.  Shared libraries not already prelinked are always loaded at
+a randomly chosen address.
+
+Position independent executables (PIE) contain position independent code
+similar to the shared libraries and therefore such executables get loaded at
+a randomly chosen address upon startup.  PIE executables always load even
+already prelinked shared libraries at a random address.  You can build such
+executable using @command{gcc -fPIE -pie}.
+
+Heap (malloc storage), stack and custom mmap areas are always placed randomly
+(as long as the randomization is enabled).
+
+ at item show disable-randomization
+Show the current setting of the explicit disable of the native randomization of
+the virtual address space of the started program.
+
+ at end table
+
+ at node Arguments
+ at section Your Program's Arguments
+
+ at cindex arguments (to your program)
+The arguments to your program can be specified by the arguments of the
+ at code{run} command.
+They are passed to a shell, which expands wildcard characters and
+performs redirection of I/O, and thence to your program.  Your
+ at code{SHELL} environment variable (if it exists) specifies what shell
+ at value{GDBN} uses.  If you do not define @code{SHELL}, @value{GDBN} uses
+the default shell (@file{/bin/sh} on Unix).
+
+On non-Unix systems, the program is usually invoked directly by
+ at value{GDBN}, which emulates I/O redirection via the appropriate system
+calls, and the wildcard characters are expanded by the startup code of
+the program, not by the shell.
+
+ at code{run} with no arguments uses the same arguments used by the previous
+ at code{run}, or those set by the @code{set args} command.
+
+ at table @code
+ at kindex set args
+ at item set args
+Specify the arguments to be used the next time your program is run.  If
+ at code{set args} has no arguments, @code{run} executes your program
+with no arguments.  Once you have run your program with arguments,
+using @code{set args} before the next @code{run} is the only way to run
+it again without arguments.
+
+ at kindex show args
+ at item show args
+Show the arguments to give your program when it is started.
+ at end table
+
+ at node Environment
+ at section Your Program's Environment
+
+ at cindex environment (of your program)
+The @dfn{environment} consists of a set of environment variables and
+their values.  Environment variables conventionally record such things as
+your user name, your home directory, your terminal type, and your search
+path for programs to run.  Usually you set up environment variables with
+the shell and they are inherited by all the other programs you run.  When
+debugging, it can be useful to try running your program with a modified
+environment without having to start @value{GDBN} over again.
+
+ at table @code
+ at kindex path
+ at item path @var{directory}
+Add @var{directory} to the front of the @code{PATH} environment variable
+(the search path for executables) that will be passed to your program.
+The value of @code{PATH} used by @value{GDBN} does not change.
+You may specify several directory names, separated by whitespace or by a
+system-dependent separator character (@samp{:} on Unix, @samp{;} on
+MS-DOS and MS-Windows).  If @var{directory} is already in the path, it
+is moved to the front, so it is searched sooner.
+
+You can use the string @samp{$cwd} to refer to whatever is the current
+working directory at the time @value{GDBN} searches the path.  If you
+use @samp{.} instead, it refers to the directory where you executed the
+ at code{path} command.  @value{GDBN} replaces @samp{.} in the
+ at var{directory} argument (with the current path) before adding
+ at var{directory} to the search path.
+ at c 'path' is explicitly nonrepeatable, but RMS points out it is silly to
+ at c document that, since repeating it would be a no-op.
+
+ at kindex show paths
+ at item show paths
+Display the list of search paths for executables (the @code{PATH}
+environment variable).
+
+ at kindex show environment
+ at item show environment @r{[}@var{varname}@r{]}
+Print the value of environment variable @var{varname} to be given to
+your program when it starts.  If you do not supply @var{varname},
+print the names and values of all environment variables to be given to
+your program.  You can abbreviate @code{environment} as @code{env}.
+
+ at kindex set environment
+ at item set environment @var{varname} @r{[}=@var{value}@r{]}
+Set environment variable @var{varname} to @var{value}.  The value
+changes for your program only, not for @value{GDBN} itself.  @var{value} may
+be any string; the values of environment variables are just strings, and
+any interpretation is supplied by your program itself.  The @var{value}
+parameter is optional; if it is eliminated, the variable is set to a
+null value.
+ at c "any string" here does not include leading, trailing
+ at c blanks. Gnu asks: does anyone care?
+
+For example, this command:
+
+ at smallexample
+set env USER = foo
+ at end smallexample
+
+ at noindent
+tells the debugged program, when subsequently run, that its user is named
+ at samp{foo}.  (The spaces around @samp{=} are used for clarity here; they
+are not actually required.)
+
+ at kindex unset environment
+ at item unset environment @var{varname}
+Remove variable @var{varname} from the environment to be passed to your
+program.  This is different from @samp{set env @var{varname} =};
+ at code{unset environment} removes the variable from the environment,
+rather than assigning it an empty value.
+ at end table
+
+ at emph{Warning:} On Unix systems, @value{GDBN} runs your program using
+the shell indicated
+by your @code{SHELL} environment variable if it exists (or
+ at code{/bin/sh} if not).  If your @code{SHELL} variable names a shell
+that runs an initialization file---such as @file{.cshrc} for C-shell, or
+ at file{.bashrc} for BASH---any variables you set in that file affect
+your program.  You may wish to move setting of environment variables to
+files that are only run when you sign on, such as @file{.login} or
+ at file{.profile}.
+
+ at node Working Directory
+ at section Your Program's Working Directory
+
+ at cindex working directory (of your program)
+Each time you start your program with @code{run}, it inherits its
+working directory from the current working directory of @value{GDBN}.
+The @value{GDBN} working directory is initially whatever it inherited
+from its parent process (typically the shell), but you can specify a new
+working directory in @value{GDBN} with the @code{cd} command.
+
+The @value{GDBN} working directory also serves as a default for the commands
+that specify files for @value{GDBN} to operate on.  @xref{Files, ,Commands to
+Specify Files}.
+
+ at table @code
+ at kindex cd
+ at cindex change working directory
+ at item cd @var{directory}
+Set the @value{GDBN} working directory to @var{directory}.
+
+ at kindex pwd
+ at item pwd
+Print the @value{GDBN} working directory.
+ at end table
+
+It is generally impossible to find the current working directory of
+the process being debugged (since a program can change its directory
+during its run).  If you work on a system where @value{GDBN} is
+configured with the @file{/proc} support, you can use the @code{info
+proc} command (@pxref{SVR4 Process Information}) to find out the
+current working directory of the debuggee.
+
+ at node Input/Output
+ at section Your Program's Input and Output
+
+ at cindex redirection
+ at cindex i/o
+ at cindex terminal
+By default, the program you run under @value{GDBN} does input and output to
+the same terminal that @value{GDBN} uses.  @value{GDBN} switches the terminal
+to its own terminal modes to interact with you, but it records the terminal
+modes your program was using and switches back to them when you continue
+running your program.
+
+ at table @code
+ at kindex info terminal
+ at item info terminal
+Displays information recorded by @value{GDBN} about the terminal modes your
+program is using.
+ at end table
+
+You can redirect your program's input and/or output using shell
+redirection with the @code{run} command.  For example,
+
+ at smallexample
+run > outfile
+ at end smallexample
+
+ at noindent
+starts your program, diverting its output to the file @file{outfile}.
+
+ at kindex tty
+ at cindex controlling terminal
+Another way to specify where your program should do input and output is
+with the @code{tty} command.  This command accepts a file name as
+argument, and causes this file to be the default for future @code{run}
+commands.  It also resets the controlling terminal for the child
+process, for future @code{run} commands.  For example,
+
+ at smallexample
+tty /dev/ttyb
+ at end smallexample
+
+ at noindent
+directs that processes started with subsequent @code{run} commands
+default to do input and output on the terminal @file{/dev/ttyb} and have
+that as their controlling terminal.
+
+An explicit redirection in @code{run} overrides the @code{tty} command's
+effect on the input/output device, but not its effect on the controlling
+terminal.
+
+When you use the @code{tty} command or redirect input in the @code{run}
+command, only the input @emph{for your program} is affected.  The input
+for @value{GDBN} still comes from your terminal.  @code{tty} is an alias
+for @code{set inferior-tty}.
+
+ at cindex inferior tty
+ at cindex set inferior controlling terminal
+You can use the @code{show inferior-tty} command to tell @value{GDBN} to
+display the name of the terminal that will be used for future runs of your
+program.
+
+ at table @code
+ at item set inferior-tty /dev/ttyb
+ at kindex set inferior-tty
+Set the tty for the program being debugged to /dev/ttyb.
+
+ at item show inferior-tty
+ at kindex show inferior-tty
+Show the current tty for the program being debugged.
+ at end table
+
+ at node Attach
+ at section Debugging an Already-running Process
+ at kindex attach
+ at cindex attach
+
+ at table @code
+ at item attach @var{process-id}
+This command attaches to a running process---one that was started
+outside @value{GDBN}.  (@code{info files} shows your active
+targets.)  The command takes as argument a process ID.  The usual way to
+find out the @var{process-id} of a Unix process is with the @code{ps} utility,
+or with the @samp{jobs -l} shell command.
+
+ at code{attach} does not repeat if you press @key{RET} a second time after
+executing the command.
+ at end table
+
+To use @code{attach}, your program must be running in an environment
+which supports processes; for example, @code{attach} does not work for
+programs on bare-board targets that lack an operating system.  You must
+also have permission to send the process a signal.
+
+When you use @code{attach}, the debugger finds the program running in
+the process first by looking in the current working directory, then (if
+the program is not found) by using the source file search path
+(@pxref{Source Path, ,Specifying Source Directories}).  You can also use
+the @code{file} command to load the program.  @xref{Files, ,Commands to
+Specify Files}.
+
+The first thing @value{GDBN} does after arranging to debug the specified
+process is to stop it.  You can examine and modify an attached process
+with all the @value{GDBN} commands that are ordinarily available when
+you start processes with @code{run}.  You can insert breakpoints; you
+can step and continue; you can modify storage.  If you would rather the
+process continue running, you may use the @code{continue} command after
+attaching @value{GDBN} to the process.
+
+ at table @code
+ at kindex detach
+ at item detach
+When you have finished debugging the attached process, you can use the
+ at code{detach} command to release it from @value{GDBN} control.  Detaching
+the process continues its execution.  After the @code{detach} command,
+that process and @value{GDBN} become completely independent once more, and you
+are ready to @code{attach} another process or start one with @code{run}.
+ at code{detach} does not repeat if you press @key{RET} again after
+executing the command.
+ at end table
+
+If you exit @value{GDBN} while you have an attached process, you detach
+that process.  If you use the @code{run} command, you kill that process.
+By default, @value{GDBN} asks for confirmation if you try to do either of these
+things; you can control whether or not you need to confirm by using the
+ at code{set confirm} command (@pxref{Messages/Warnings, ,Optional Warnings and
+Messages}).
+
+ at node Kill Process
+ at section Killing the Child Process
+
+ at table @code
+ at kindex kill
+ at item kill
+Kill the child process in which your program is running under @value{GDBN}.
+ at end table
+
+This command is useful if you wish to debug a core dump instead of a
+running process.  @value{GDBN} ignores any core dump file while your program
+is running.
+
+On some operating systems, a program cannot be executed outside @value{GDBN}
+while you have breakpoints set on it inside @value{GDBN}.  You can use the
+ at code{kill} command in this situation to permit running your program
+outside the debugger.
+
+The @code{kill} command is also useful if you wish to recompile and
+relink your program, since on many systems it is impossible to modify an
+executable file while it is running in a process.  In this case, when you
+next type @code{run}, @value{GDBN} notices that the file has changed, and
+reads the symbol table again (while trying to preserve your current
+breakpoint settings).
+
+ at node Inferiors and Programs
+ at section Debugging Multiple Inferiors and Programs
+
+ at value{GDBN} lets you run and debug multiple programs in a single
+session.  In addition, @value{GDBN} on some systems may let you run
+several programs simultaneously (otherwise you have to exit from one
+before starting another).  In the most general case, you can have
+multiple threads of execution in each of multiple processes, launched
+from multiple executables.
+
+ at cindex inferior
+ at value{GDBN} represents the state of each program execution with an
+object called an @dfn{inferior}.  An inferior typically corresponds to
+a process, but is more general and applies also to targets that do not
+have processes.  Inferiors may be created before a process runs, and
+may be retained after a process exits.  Inferiors have unique
+identifiers that are different from process ids.  Usually each
+inferior will also have its own distinct address space, although some
+embedded targets may have several inferiors running in different parts
+of a single address space.  Each inferior may in turn have multiple
+threads running in it.
+
+To find out what inferiors exist at any moment, use @w{@code{info
+inferiors}}:
+
+ at table @code
+ at kindex info inferiors
+ at item info inferiors
+Print a list of all inferiors currently being managed by @value{GDBN}.
+
+ at value{GDBN} displays for each inferior (in this order):
+
+ at enumerate
+ at item
+the inferior number assigned by @value{GDBN}
+
+ at item
+the target system's inferior identifier
+
+ at item
+the name of the executable the inferior is running.
+
+ at end enumerate
+
+ at noindent
+An asterisk @samp{*} preceding the @value{GDBN} inferior number
+indicates the current inferior.
+
+For example,
+ at end table
+ at c end table here to get a little more width for example
+
+ at smallexample
+(@value{GDBP}) info inferiors
+  Num  Description       Executable
+  2    process 2307      hello
+* 1    process 3401      goodbye
+ at end smallexample
+
+To switch focus between inferiors, use the @code{inferior} command:
+
+ at table @code
+ at kindex inferior @var{infno}
+ at item inferior @var{infno}
+Make inferior number @var{infno} the current inferior.  The argument
+ at var{infno} is the inferior number assigned by @value{GDBN}, as shown
+in the first field of the @samp{info inferiors} display.
+ at end table
+
+
+You can get multiple executables into a debugging session via the
+ at code{add-inferior} and @w{@code{clone-inferior}} commands.  On some
+systems @value{GDBN} can add inferiors to the debug session
+automatically by following calls to @code{fork} and @code{exec}.  To
+remove inferiors from the debugging session use the
+ at w{@code{remove-inferiors}} command.
+
+ at table @code
+ at kindex add-inferior
+ at item add-inferior [ -copies @var{n} ] [ -exec @var{executable} ]
+Adds @var{n} inferiors to be run using @var{executable} as the
+executable.  @var{n} defaults to 1.  If no executable is specified,
+the inferiors begins empty, with no program.  You can still assign or
+change the program assigned to the inferior at any time by using the
+ at code{file} command with the executable name as its argument.
+
+ at kindex clone-inferior
+ at item clone-inferior [ -copies @var{n} ] [ @var{infno} ]
+Adds @var{n} inferiors ready to execute the same program as inferior
+ at var{infno}.  @var{n} defaults to 1.  @var{infno} defaults to the
+number of the current inferior.  This is a convenient command when you
+want to run another instance of the inferior you are debugging.
+
+ at smallexample
+(@value{GDBP}) info inferiors
+  Num  Description       Executable
+* 1    process 29964     helloworld
+(@value{GDBP}) clone-inferior
+Added inferior 2.
+1 inferiors added.
+(@value{GDBP}) info inferiors
+  Num  Description       Executable
+  2    <null>            helloworld
+* 1    process 29964     helloworld
+ at end smallexample
+
+You can now simply switch focus to inferior 2 and run it.
+
+ at kindex remove-inferiors
+ at item remove-inferiors @var{infno}@dots{}
+Removes the inferior or inferiors @var{infno}@dots{}.  It is not
+possible to remove an inferior that is running with this command.  For
+those, use the @code{kill} or @code{detach} command first.
+
+ at end table
+
+To quit debugging one of the running inferiors that is not the current
+inferior, you can either detach from it by using the @w{@code{detach
+inferior}} command (allowing it to run independently), or kill it
+using the @w{@code{kill inferiors}} command:
+
+ at table @code
+ at kindex detach inferiors @var{infno}@dots{}
+ at item detach inferior @var{infno}@dots{}
+Detach from the inferior or inferiors identified by @value{GDBN}
+inferior number(s) @var{infno}@dots{}.  Note that the inferior's entry
+still stays on the list of inferiors shown by @code{info inferiors},
+but its Description will show @samp{<null>}.
+
+ at kindex kill inferiors @var{infno}@dots{}
+ at item kill inferiors @var{infno}@dots{}
+Kill the inferior or inferiors identified by @value{GDBN} inferior
+number(s) @var{infno}@dots{}.  Note that the inferior's entry still
+stays on the list of inferiors shown by @code{info inferiors}, but its
+Description will show @samp{<null>}.
+ at end table
+
+After the successful completion of a command such as @code{detach},
+ at code{detach inferiors}, @code{kill} or @code{kill inferiors}, or after
+a normal process exit, the inferior is still valid and listed with
+ at code{info inferiors}, ready to be restarted.
+
+
+To be notified when inferiors are started or exit under @value{GDBN}'s
+control use @w{@code{set print inferior-events}}:
+
+ at table @code
+ at kindex set print inferior-events
+ at cindex print messages on inferior start and exit
+ at item set print inferior-events
+ at itemx set print inferior-events on
+ at itemx set print inferior-events off
+The @code{set print inferior-events} command allows you to enable or
+disable printing of messages when @value{GDBN} notices that new
+inferiors have started or that inferiors have exited or have been
+detached.  By default, these messages will not be printed.
+
+ at kindex show print inferior-events
+ at item show print inferior-events
+Show whether messages will be printed when @value{GDBN} detects that
+inferiors have started, exited or have been detached.
+ at end table
+
+Many commands will work the same with multiple programs as with a
+single program: e.g., @code{print myglobal} will simply display the
+value of @code{myglobal} in the current inferior.
+
+
+Occasionaly, when debugging @value{GDBN} itself, it may be useful to
+get more info about the relationship of inferiors, programs, address
+spaces in a debug session.  You can do that with the @w{@code{maint
+info program-spaces}} command.
+
+ at table @code
+ at kindex maint info program-spaces
+ at item maint info program-spaces
+Print a list of all program spaces currently being managed by
+ at value{GDBN}.
+
+ at value{GDBN} displays for each program space (in this order):
+
+ at enumerate
+ at item
+the program space number assigned by @value{GDBN}
+
+ at item
+the name of the executable loaded into the program space, with e.g.,
+the @code{file} command.
+
+ at end enumerate
+
+ at noindent
+An asterisk @samp{*} preceding the @value{GDBN} program space number
+indicates the current program space.
+
+In addition, below each program space line, @value{GDBN} prints extra
+information that isn't suitable to display in tabular form.  For
+example, the list of inferiors bound to the program space.
+
+ at smallexample
+(@value{GDBP}) maint info program-spaces
+  Id   Executable
+  2    goodbye
+        Bound inferiors: ID 1 (process 21561)
+* 1    hello
+ at end smallexample
+
+Here we can see that no inferior is running the program @code{hello},
+while @code{process 21561} is running the program @code{goodbye}.  On
+some targets, it is possible that multiple inferiors are bound to the
+same program space.  The most common example is that of debugging both
+the parent and child processes of a @code{vfork} call.  For example,
+
+ at smallexample
+(@value{GDBP}) maint info program-spaces
+  Id   Executable
+* 1    vfork-test
+        Bound inferiors: ID 2 (process 18050), ID 1 (process 18045)
+ at end smallexample
+
+Here, both inferior 2 and inferior 1 are running in the same program
+space as a result of inferior 1 having executed a @code{vfork} call.
+ at end table
+
+ at node Threads
+ at section Debugging Programs with Multiple Threads
+
+ at cindex threads of execution
+ at cindex multiple threads
+ at cindex switching threads
+In some operating systems, such as HP-UX and Solaris, a single program
+may have more than one @dfn{thread} of execution.  The precise semantics
+of threads differ from one operating system to another, but in general
+the threads of a single program are akin to multiple processes---except
+that they share one address space (that is, they can all examine and
+modify the same variables).  On the other hand, each thread has its own
+registers and execution stack, and perhaps private memory.
+
+ at value{GDBN} provides these facilities for debugging multi-thread
+programs:
+
+ at itemize @bullet
+ at item automatic notification of new threads
+ at item @samp{thread @var{threadno}}, a command to switch among threads
+ at item @samp{info threads}, a command to inquire about existing threads
+ at item @samp{thread apply [@var{threadno}] [@var{all}] @var{args}},
+a command to apply a command to a list of threads
+ at item thread-specific breakpoints
+ at item @samp{set print thread-events}, which controls printing of 
+messages on thread start and exit.
+ at item @samp{set libthread-db-search-path @var{path}}, which lets
+the user specify which @code{libthread_db} to use if the default choice
+isn't compatible with the program.
+ at end itemize
+
+ at quotation
+ at emph{Warning:} These facilities are not yet available on every
+ at value{GDBN} configuration where the operating system supports threads.
+If your @value{GDBN} does not support threads, these commands have no
+effect.  For example, a system without thread support shows no output
+from @samp{info threads}, and always rejects the @code{thread} command,
+like this:
+
+ at smallexample
+(@value{GDBP}) info threads
+(@value{GDBP}) thread 1
+Thread ID 1 not known.  Use the "info threads" command to
+see the IDs of currently known threads.
+ at end smallexample
+ at c FIXME to implementors: how hard would it be to say "sorry, this GDB
+ at c                        doesn't support threads"?
+ at end quotation
+
+ at cindex focus of debugging
+ at cindex current thread
+The @value{GDBN} thread debugging facility allows you to observe all
+threads while your program runs---but whenever @value{GDBN} takes
+control, one thread in particular is always the focus of debugging.
+This thread is called the @dfn{current thread}.  Debugging commands show
+program information from the perspective of the current thread.
+
+ at cindex @code{New} @var{systag} message
+ at cindex thread identifier (system)
+ at c FIXME-implementors!! It would be more helpful if the [New...] message
+ at c included GDB's numeric thread handle, so you could just go to that
+ at c thread without first checking `info threads'.
+Whenever @value{GDBN} detects a new thread in your program, it displays
+the target system's identification for the thread with a message in the
+form @samp{[New @var{systag}]}.  @var{systag} is a thread identifier
+whose form varies depending on the particular system.  For example, on
+ at sc{gnu}/Linux, you might see
+
+ at smallexample
+[New Thread 0x41e02940 (LWP 25582)]
+ at end smallexample
+
+ at noindent
+when @value{GDBN} notices a new thread.  In contrast, on an SGI system,
+the @var{systag} is simply something like @samp{process 368}, with no
+further qualifier.
+
+ at c FIXME!! (1) Does the [New...] message appear even for the very first
+ at c         thread of a program, or does it only appear for the
+ at c         second---i.e.@: when it becomes obvious we have a multithread
+ at c         program?
+ at c         (2) *Is* there necessarily a first thread always?  Or do some
+ at c         multithread systems permit starting a program with multiple
+ at c         threads ab initio?
+
+ at cindex thread number
+ at cindex thread identifier (GDB)
+For debugging purposes, @value{GDBN} associates its own thread
+number---always a single integer---with each thread in your program.
+
+ at table @code
+ at kindex info threads
+ at item info threads @r{[}@var{id}@dots{}@r{]}
+Display a summary of all threads currently in your program.  Optional 
+argument @var{id}@dots{} is one or more thread ids separated by spaces, and
+means to print information only about the specified thread or threads.
+ at value{GDBN} displays for each thread (in this order):
+
+ at enumerate
+ at item
+the thread number assigned by @value{GDBN}
+
+ at item
+the target system's thread identifier (@var{systag})
+
+ at item
+the thread's name, if one is known.  A thread can either be named by
+the user (see @code{thread name}, below), or, in some cases, by the
+program itself.
+
+ at item
+the current stack frame summary for that thread
+ at end enumerate
+
+ at noindent
+An asterisk @samp{*} to the left of the @value{GDBN} thread number
+indicates the current thread.
+
+For example,
+ at end table
+ at c end table here to get a little more width for example
+
+ at smallexample
+(@value{GDBP}) info threads
+  Id   Target Id         Frame
+  3    process 35 thread 27  0x34e5 in sigpause ()
+  2    process 35 thread 23  0x34e5 in sigpause ()
+* 1    process 35 thread 13  main (argc=1, argv=0x7ffffff8)
+    at threadtest.c:68
+ at end smallexample
+
+On Solaris, you can display more information about user threads with a
+Solaris-specific command:
+
+ at table @code
+ at item maint info sol-threads
+ at kindex maint info sol-threads
+ at cindex thread info (Solaris)
+Display info on Solaris user threads.
+ at end table
+
+ at table @code
+ at kindex thread @var{threadno}
+ at item thread @var{threadno}
+Make thread number @var{threadno} the current thread.  The command
+argument @var{threadno} is the internal @value{GDBN} thread number, as
+shown in the first field of the @samp{info threads} display.
+ at value{GDBN} responds by displaying the system identifier of the thread
+you selected, and its current stack frame summary:
+
+ at smallexample
+(@value{GDBP}) thread 2
+[Switching to thread 2 (Thread 0xb7fdab70 (LWP 12747))]
+#0  some_function (ignore=0x0) at example.c:8
+8	    printf ("hello\n");
+ at end smallexample
+
+ at noindent
+As with the @samp{[New @dots{}]} message, the form of the text after
+ at samp{Switching to} depends on your system's conventions for identifying
+threads.
+
+ at vindex $_thread at r{, convenience variable}
+The debugger convenience variable @samp{$_thread} contains the number
+of the current thread.  You may find this useful in writing breakpoint
+conditional expressions, command scripts, and so forth.  See
+ at xref{Convenience Vars,, Convenience Variables}, for general
+information on convenience variables.
+
+ at kindex thread apply
+ at cindex apply command to several threads
+ at item thread apply [@var{threadno} | all] @var{command}
+The @code{thread apply} command allows you to apply the named
+ at var{command} to one or more threads.  Specify the numbers of the
+threads that you want affected with the command argument
+ at var{threadno}.  It can be a single thread number, one of the numbers
+shown in the first field of the @samp{info threads} display; or it
+could be a range of thread numbers, as in @code{2-4}.  To apply a
+command to all threads, type @kbd{thread apply all @var{command}}.
+
+ at kindex thread name
+ at cindex name a thread
+ at item thread name [@var{name}]
+This command assigns a name to the current thread.  If no argument is
+given, any existing user-specified name is removed.  The thread name
+appears in the @samp{info threads} display.
+
+On some systems, such as @sc{gnu}/Linux, @value{GDBN} is able to
+determine the name of the thread as given by the OS.  On these
+systems, a name specified with @samp{thread name} will override the
+system-give name, and removing the user-specified name will cause
+ at value{GDBN} to once again display the system-specified name.
+
+ at kindex thread find
+ at cindex search for a thread
+ at item thread find [@var{regexp}]
+Search for and display thread ids whose name or @var{systag}
+matches the supplied regular expression.
+
+As well as being the complement to the @samp{thread name} command, 
+this command also allows you to identify a thread by its target 
+ at var{systag}.  For instance, on @sc{gnu}/Linux, the target @var{systag}
+is the LWP id.
+
+ at smallexample
+(@value{GDBN}) thread find 26688
+Thread 4 has target id 'Thread 0x41e02940 (LWP 26688)'
+(@value{GDBN}) info thread 4
+  Id   Target Id         Frame 
+  4    Thread 0x41e02940 (LWP 26688) 0x00000031ca6cd372 in select ()
+ at end smallexample
+
+ at kindex set print thread-events
+ at cindex print messages on thread start and exit
+ at item set print thread-events
+ at itemx set print thread-events on
+ at itemx set print thread-events off
+The @code{set print thread-events} command allows you to enable or
+disable printing of messages when @value{GDBN} notices that new threads have
+started or that threads have exited.  By default, these messages will
+be printed if detection of these events is supported by the target.
+Note that these messages cannot be disabled on all targets.
+
+ at kindex show print thread-events
+ at item show print thread-events
+Show whether messages will be printed when @value{GDBN} detects that threads
+have started and exited.
+ at end table
+
+ at xref{Thread Stops,,Stopping and Starting Multi-thread Programs}, for
+more information about how @value{GDBN} behaves when you stop and start
+programs with multiple threads.
+
+ at xref{Set Watchpoints,,Setting Watchpoints}, for information about
+watchpoints in programs with multiple threads.
+
+ at anchor{set libthread-db-search-path}
+ at table @code
+ at kindex set libthread-db-search-path
+ at cindex search path for @code{libthread_db}
+ at item set libthread-db-search-path @r{[}@var{path}@r{]}
+If this variable is set, @var{path} is a colon-separated list of
+directories @value{GDBN} will use to search for @code{libthread_db}.
+If you omit @var{path}, @samp{libthread-db-search-path} will be reset to
+its default value (@code{$sdir:$pdir} on @sc{gnu}/Linux and Solaris systems).
+Internally, the default value comes from the @code{LIBTHREAD_DB_SEARCH_PATH}
+macro.
+
+On @sc{gnu}/Linux and Solaris systems, @value{GDBN} uses a ``helper''
+ at code{libthread_db} library to obtain information about threads in the
+inferior process.  @value{GDBN} will use @samp{libthread-db-search-path}
+to find @code{libthread_db}.  @value{GDBN} also consults first if inferior
+specific thread debugging library loading is enabled
+by @samp{set auto-load libthread-db} (@pxref{libthread_db.so.1 file}).
+
+A special entry @samp{$sdir} for @samp{libthread-db-search-path}
+refers to the default system directories that are
+normally searched for loading shared libraries.  The @samp{$sdir} entry
+is the only kind not needing to be enabled by @samp{set auto-load libthread-db}
+(@pxref{libthread_db.so.1 file}).
+
+A special entry @samp{$pdir} for @samp{libthread-db-search-path}
+refers to the directory from which @code{libpthread}
+was loaded in the inferior process.
+
+For any @code{libthread_db} library @value{GDBN} finds in above directories,
+ at value{GDBN} attempts to initialize it with the current inferior process.
+If this initialization fails (which could happen because of a version
+mismatch between @code{libthread_db} and @code{libpthread}), @value{GDBN}
+will unload @code{libthread_db}, and continue with the next directory.
+If none of @code{libthread_db} libraries initialize successfully,
+ at value{GDBN} will issue a warning and thread debugging will be disabled.
+
+Setting @code{libthread-db-search-path} is currently implemented
+only on some platforms.
+
+ at kindex show libthread-db-search-path 
+ at item show libthread-db-search-path 
+Display current libthread_db search path.
+
+ at kindex set debug libthread-db
+ at kindex show debug libthread-db
+ at cindex debugging @code{libthread_db}
+ at item set debug libthread-db
+ at itemx show debug libthread-db
+Turns on or off display of @code{libthread_db}-related events.
+Use @code{1} to enable, @code{0} to disable.
+ at end table
+
+ at node Forks
+ at section Debugging Forks
+
+ at cindex fork, debugging programs which call
+ at cindex multiple processes
+ at cindex processes, multiple
+On most systems, @value{GDBN} has no special support for debugging
+programs which create additional processes using the @code{fork}
+function.  When a program forks, @value{GDBN} will continue to debug the
+parent process and the child process will run unimpeded.  If you have
+set a breakpoint in any code which the child then executes, the child
+will get a @code{SIGTRAP} signal which (unless it catches the signal)
+will cause it to terminate.
+
+However, if you want to debug the child process there is a workaround
+which isn't too painful.  Put a call to @code{sleep} in the code which
+the child process executes after the fork.  It may be useful to sleep
+only if a certain environment variable is set, or a certain file exists,
+so that the delay need not occur when you don't want to run @value{GDBN}
+on the child.  While the child is sleeping, use the @code{ps} program to
+get its process ID.  Then tell @value{GDBN} (a new invocation of
+ at value{GDBN} if you are also debugging the parent process) to attach to
+the child process (@pxref{Attach}).  From that point on you can debug
+the child process just like any other process which you attached to.
+
+On some systems, @value{GDBN} provides support for debugging programs that
+create additional processes using the @code{fork} or @code{vfork} functions.
+Currently, the only platforms with this feature are HP-UX (11.x and later
+only?) and @sc{gnu}/Linux (kernel version 2.5.60 and later).
+
+By default, when a program forks, @value{GDBN} will continue to debug
+the parent process and the child process will run unimpeded.
+
+If you want to follow the child process instead of the parent process,
+use the command @w{@code{set follow-fork-mode}}.
+
+ at table @code
+ at kindex set follow-fork-mode
+ at item set follow-fork-mode @var{mode}
+Set the debugger response to a program call of @code{fork} or
+ at code{vfork}.  A call to @code{fork} or @code{vfork} creates a new
+process.  The @var{mode} argument can be:
+
+ at table @code
+ at item parent
+The original process is debugged after a fork.  The child process runs
+unimpeded.  This is the default.
+
+ at item child
+The new process is debugged after a fork.  The parent process runs
+unimpeded.
+
+ at end table
+
+ at kindex show follow-fork-mode
+ at item show follow-fork-mode
+Display the current debugger response to a @code{fork} or @code{vfork} call.
+ at end table
+
+ at cindex debugging multiple processes
+On Linux, if you want to debug both the parent and child processes, use the
+command @w{@code{set detach-on-fork}}.
+
+ at table @code
+ at kindex set detach-on-fork
+ at item set detach-on-fork @var{mode}
+Tells gdb whether to detach one of the processes after a fork, or
+retain debugger control over them both.
+
+ at table @code
+ at item on
+The child process (or parent process, depending on the value of
+ at code{follow-fork-mode}) will be detached and allowed to run 
+independently.  This is the default.
+
+ at item off
+Both processes will be held under the control of @value{GDBN}.
+One process (child or parent, depending on the value of 
+ at code{follow-fork-mode}) is debugged as usual, while the other
+is held suspended.  
+
+ at end table
+
+ at kindex show detach-on-fork
+ at item show detach-on-fork
+Show whether detach-on-fork mode is on/off.
+ at end table
+
+If you choose to set @samp{detach-on-fork} mode off, then @value{GDBN}
+will retain control of all forked processes (including nested forks).
+You can list the forked processes under the control of @value{GDBN} by
+using the @w{@code{info inferiors}} command, and switch from one fork
+to another by using the @code{inferior} command (@pxref{Inferiors and
+Programs, ,Debugging Multiple Inferiors and Programs}).
+
+To quit debugging one of the forked processes, you can either detach
+from it by using the @w{@code{detach inferiors}} command (allowing it
+to run independently), or kill it using the @w{@code{kill inferiors}}
+command.  @xref{Inferiors and Programs, ,Debugging Multiple Inferiors
+and Programs}.
+
+If you ask to debug a child process and a @code{vfork} is followed by an
+ at code{exec}, @value{GDBN} executes the new target up to the first
+breakpoint in the new target.  If you have a breakpoint set on
+ at code{main} in your original program, the breakpoint will also be set on
+the child process's @code{main}.
+
+On some systems, when a child process is spawned by @code{vfork}, you
+cannot debug the child or parent until an @code{exec} call completes.
+
+If you issue a @code{run} command to @value{GDBN} after an @code{exec}
+call executes, the new target restarts.  To restart the parent
+process, use the @code{file} command with the parent executable name
+as its argument.  By default, after an @code{exec} call executes,
+ at value{GDBN} discards the symbols of the previous executable image.
+You can change this behaviour with the @w{@code{set follow-exec-mode}}
+command.
+
+ at table @code
+ at kindex set follow-exec-mode
+ at item set follow-exec-mode @var{mode}
+
+Set debugger response to a program call of @code{exec}.  An
+ at code{exec} call replaces the program image of a process.
+
+ at code{follow-exec-mode} can be:
+
+ at table @code
+ at item new
+ at value{GDBN} creates a new inferior and rebinds the process to this
+new inferior.  The program the process was running before the
+ at code{exec} call can be restarted afterwards by restarting the
+original inferior.
+
+For example:
+
+ at smallexample
+(@value{GDBP}) info inferiors
+(gdb) info inferior
+  Id   Description   Executable
+* 1    <null>        prog1
+(@value{GDBP}) run
+process 12020 is executing new program: prog2
+Program exited normally.
+(@value{GDBP}) info inferiors
+  Id   Description   Executable
+* 2    <null>        prog2
+  1    <null>        prog1
+ at end smallexample
+
+ at item same
+ at value{GDBN} keeps the process bound to the same inferior.  The new
+executable image replaces the previous executable loaded in the
+inferior.  Restarting the inferior after the @code{exec} call, with
+e.g., the @code{run} command, restarts the executable the process was
+running after the @code{exec} call.  This is the default mode.
+
+For example:
+
+ at smallexample
+(@value{GDBP}) info inferiors
+  Id   Description   Executable
+* 1    <null>        prog1
+(@value{GDBP}) run
+process 12020 is executing new program: prog2
+Program exited normally.
+(@value{GDBP}) info inferiors
+  Id   Description   Executable
+* 1    <null>        prog2
+ at end smallexample
+
+ at end table
+ at end table
+
+You can use the @code{catch} command to make @value{GDBN} stop whenever
+a @code{fork}, @code{vfork}, or @code{exec} call is made.  @xref{Set
+Catchpoints, ,Setting Catchpoints}.
+
+ at node Checkpoint/Restart
+ at section Setting a @emph{Bookmark} to Return to Later
+
+ at cindex checkpoint
+ at cindex restart
+ at cindex bookmark
+ at cindex snapshot of a process
+ at cindex rewind program state
+
+On certain operating systems at footnote{Currently, only
+ at sc{gnu}/Linux.}, @value{GDBN} is able to save a @dfn{snapshot} of a
+program's state, called a @dfn{checkpoint}, and come back to it
+later.
+
+Returning to a checkpoint effectively undoes everything that has
+happened in the program since the @code{checkpoint} was saved.  This
+includes changes in memory, registers, and even (within some limits)
+system state.  Effectively, it is like going back in time to the
+moment when the checkpoint was saved.
+
+Thus, if you're stepping thru a program and you think you're 
+getting close to the point where things go wrong, you can save
+a checkpoint.  Then, if you accidentally go too far and miss
+the critical statement, instead of having to restart your program
+from the beginning, you can just go back to the checkpoint and
+start again from there.
+
+This can be especially useful if it takes a lot of time or 
+steps to reach the point where you think the bug occurs.  
+
+To use the @code{checkpoint}/@code{restart} method of debugging:
+
+ at table @code
+ at kindex checkpoint
+ at item checkpoint
+Save a snapshot of the debugged program's current execution state.
+The @code{checkpoint} command takes no arguments, but each checkpoint
+is assigned a small integer id, similar to a breakpoint id.
+
+ at kindex info checkpoints
+ at item info checkpoints
+List the checkpoints that have been saved in the current debugging
+session.  For each checkpoint, the following information will be
+listed:
+
+ at table @code
+ at item Checkpoint ID
+ at item Process ID
+ at item Code Address
+ at item Source line, or label
+ at end table
+
+ at kindex restart @var{checkpoint-id}
+ at item restart @var{checkpoint-id}
+Restore the program state that was saved as checkpoint number
+ at var{checkpoint-id}.  All program variables, registers, stack frames
+etc.@:  will be returned to the values that they had when the checkpoint
+was saved.  In essence, gdb will ``wind back the clock'' to the point
+in time when the checkpoint was saved.
+
+Note that breakpoints, @value{GDBN} variables, command history etc.
+are not affected by restoring a checkpoint.  In general, a checkpoint
+only restores things that reside in the program being debugged, not in
+the debugger.
+
+ at kindex delete checkpoint @var{checkpoint-id}
+ at item delete checkpoint @var{checkpoint-id}
+Delete the previously-saved checkpoint identified by @var{checkpoint-id}.
+
+ at end table
+
+Returning to a previously saved checkpoint will restore the user state
+of the program being debugged, plus a significant subset of the system
+(OS) state, including file pointers.  It won't ``un-write'' data from
+a file, but it will rewind the file pointer to the previous location,
+so that the previously written data can be overwritten.  For files
+opened in read mode, the pointer will also be restored so that the
+previously read data can be read again.
+
+Of course, characters that have been sent to a printer (or other
+external device) cannot be ``snatched back'', and characters received
+from eg.@: a serial device can be removed from internal program buffers,
+but they cannot be ``pushed back'' into the serial pipeline, ready to
+be received again.  Similarly, the actual contents of files that have
+been changed cannot be restored (at this time).
+
+However, within those constraints, you actually can ``rewind'' your
+program to a previously saved point in time, and begin debugging it
+again --- and you can change the course of events so as to debug a
+different execution path this time.
+
+ at cindex checkpoints and process id
+Finally, there is one bit of internal program state that will be
+different when you return to a checkpoint --- the program's process
+id.  Each checkpoint will have a unique process id (or @var{pid}), 
+and each will be different from the program's original @var{pid}.
+If your program has saved a local copy of its process id, this could
+potentially pose a problem.
+
+ at subsection A Non-obvious Benefit of Using Checkpoints
+
+On some systems such as @sc{gnu}/Linux, address space randomization
+is performed on new processes for security reasons.  This makes it 
+difficult or impossible to set a breakpoint, or watchpoint, on an
+absolute address if you have to restart the program, since the 
+absolute location of a symbol will change from one execution to the
+next.
+
+A checkpoint, however, is an @emph{identical} copy of a process. 
+Therefore if you create a checkpoint at (eg.@:) the start of main, 
+and simply return to that checkpoint instead of restarting the 
+process, you can avoid the effects of address randomization and
+your symbols will all stay in the same place.
+
+ at node Stopping
+ at chapter Stopping and Continuing
+
+The principal purposes of using a debugger are so that you can stop your
+program before it terminates; or so that, if your program runs into
+trouble, you can investigate and find out why.
+
+Inside @value{GDBN}, your program may stop for any of several reasons,
+such as a signal, a breakpoint, or reaching a new line after a
+ at value{GDBN} command such as @code{step}.  You may then examine and
+change variables, set new breakpoints or remove old ones, and then
+continue execution.  Usually, the messages shown by @value{GDBN} provide
+ample explanation of the status of your program---but you can also
+explicitly request this information at any time.
+
+ at table @code
+ at kindex info program
+ at item info program
+Display information about the status of your program: whether it is
+running or not, what process it is, and why it stopped.
+ at end table
+
+ at menu
+* Breakpoints::                 Breakpoints, watchpoints, and catchpoints
+* Continuing and Stepping::     Resuming execution
+* Skipping Over Functions and Files::
+                                Skipping over functions and files
+* Signals::                     Signals
+* Thread Stops::                Stopping and starting multi-thread programs
+ at end menu
+
+ at node Breakpoints
+ at section Breakpoints, Watchpoints, and Catchpoints
+
+ at cindex breakpoints
+A @dfn{breakpoint} makes your program stop whenever a certain point in
+the program is reached.  For each breakpoint, you can add conditions to
+control in finer detail whether your program stops.  You can set
+breakpoints with the @code{break} command and its variants (@pxref{Set
+Breaks, ,Setting Breakpoints}), to specify the place where your program
+should stop by line number, function name or exact address in the
+program.
+
+On some systems, you can set breakpoints in shared libraries before
+the executable is run.  There is a minor limitation on HP-UX systems:
+you must wait until the executable is run in order to set breakpoints
+in shared library routines that are not called directly by the program
+(for example, routines that are arguments in a @code{pthread_create}
+call).
+
+ at cindex watchpoints
+ at cindex data breakpoints
+ at cindex memory tracing
+ at cindex breakpoint on memory address
+ at cindex breakpoint on variable modification
+A @dfn{watchpoint} is a special breakpoint that stops your program
+when the value of an expression changes.  The expression may be a value
+of a variable, or it could involve values of one or more variables
+combined by operators, such as @samp{a + b}.  This is sometimes called
+ at dfn{data breakpoints}.  You must use a different command to set
+watchpoints (@pxref{Set Watchpoints, ,Setting Watchpoints}), but aside
+from that, you can manage a watchpoint like any other breakpoint: you
+enable, disable, and delete both breakpoints and watchpoints using the
+same commands.
+
+You can arrange to have values from your program displayed automatically
+whenever @value{GDBN} stops at a breakpoint.  @xref{Auto Display,,
+Automatic Display}.
+
+ at cindex catchpoints
+ at cindex breakpoint on events
+A @dfn{catchpoint} is another special breakpoint that stops your program
+when a certain kind of event occurs, such as the throwing of a C at t{++}
+exception or the loading of a library.  As with watchpoints, you use a
+different command to set a catchpoint (@pxref{Set Catchpoints, ,Setting
+Catchpoints}), but aside from that, you can manage a catchpoint like any
+other breakpoint.  (To stop when your program receives a signal, use the
+ at code{handle} command; see @ref{Signals, ,Signals}.)
+
+ at cindex breakpoint numbers
+ at cindex numbers for breakpoints
+ at value{GDBN} assigns a number to each breakpoint, watchpoint, or
+catchpoint when you create it; these numbers are successive integers
+starting with one.  In many of the commands for controlling various
+features of breakpoints you use the breakpoint number to say which
+breakpoint you want to change.  Each breakpoint may be @dfn{enabled} or
+ at dfn{disabled}; if disabled, it has no effect on your program until you
+enable it again.
+
+ at cindex breakpoint ranges
+ at cindex ranges of breakpoints
+Some @value{GDBN} commands accept a range of breakpoints on which to
+operate.  A breakpoint range is either a single breakpoint number, like
+ at samp{5}, or two such numbers, in increasing order, separated by a
+hyphen, like @samp{5-7}.  When a breakpoint range is given to a command,
+all breakpoints in that range are operated on.
+
+ at menu
+* Set Breaks::                  Setting breakpoints
+* Set Watchpoints::             Setting watchpoints
+* Set Catchpoints::             Setting catchpoints
+* Delete Breaks::               Deleting breakpoints
+* Disabling::                   Disabling breakpoints
+* Conditions::                  Break conditions
+* Break Commands::              Breakpoint command lists
+* Dynamic Printf::              Dynamic printf
+* Save Breakpoints::            How to save breakpoints in a file
+* Static Probe Points::         Listing static probe points
+* Error in Breakpoints::        ``Cannot insert breakpoints''
+* Breakpoint-related Warnings:: ``Breakpoint address adjusted...''
+ at end menu
+
+ at node Set Breaks
+ at subsection Setting Breakpoints
+
+ at c FIXME LMB what does GDB do if no code on line of breakpt?
+ at c       consider in particular declaration with/without initialization.
+ at c
+ at c FIXME 2 is there stuff on this already? break at fun start, already init?
+
+ at kindex break
+ at kindex b @r{(@code{break})}
+ at vindex $bpnum at r{, convenience variable}
+ at cindex latest breakpoint
+Breakpoints are set with the @code{break} command (abbreviated
+ at code{b}).  The debugger convenience variable @samp{$bpnum} records the
+number of the breakpoint you've set most recently; see @ref{Convenience
+Vars,, Convenience Variables}, for a discussion of what you can do with
+convenience variables.
+
+ at table @code
+ at item break @var{location}
+Set a breakpoint at the given @var{location}, which can specify a
+function name, a line number, or an address of an instruction.
+(@xref{Specify Location}, for a list of all the possible ways to
+specify a @var{location}.)  The breakpoint will stop your program just
+before it executes any of the code in the specified @var{location}.
+
+When using source languages that permit overloading of symbols, such as
+C at t{++}, a function name may refer to more than one possible place to break.
+ at xref{Ambiguous Expressions,,Ambiguous Expressions}, for a discussion of
+that situation.
+
+It is also possible to insert a breakpoint that will stop the program
+only if a specific thread (@pxref{Thread-Specific Breakpoints})
+or a specific task (@pxref{Ada Tasks}) hits that breakpoint.
+
+ at item break
+When called without any arguments, @code{break} sets a breakpoint at
+the next instruction to be executed in the selected stack frame
+(@pxref{Stack, ,Examining the Stack}).  In any selected frame but the
+innermost, this makes your program stop as soon as control
+returns to that frame.  This is similar to the effect of a
+ at code{finish} command in the frame inside the selected frame---except
+that @code{finish} does not leave an active breakpoint.  If you use
+ at code{break} without an argument in the innermost frame, @value{GDBN} stops
+the next time it reaches the current location; this may be useful
+inside loops.
+
+ at value{GDBN} normally ignores breakpoints when it resumes execution, until at
+least one instruction has been executed.  If it did not do this, you
+would be unable to proceed past a breakpoint without first disabling the
+breakpoint.  This rule applies whether or not the breakpoint already
+existed when your program stopped.
+
+ at item break @dots{} if @var{cond}
+Set a breakpoint with condition @var{cond}; evaluate the expression
+ at var{cond} each time the breakpoint is reached, and stop only if the
+value is nonzero---that is, if @var{cond} evaluates as true.
+ at samp{@dots{}} stands for one of the possible arguments described
+above (or no argument) specifying where to break.  @xref{Conditions,
+,Break Conditions}, for more information on breakpoint conditions.
+
+ at kindex tbreak
+ at item tbreak @var{args}
+Set a breakpoint enabled only for one stop.  @var{args} are the
+same as for the @code{break} command, and the breakpoint is set in the same
+way, but the breakpoint is automatically deleted after the first time your
+program stops there.  @xref{Disabling, ,Disabling Breakpoints}.
+
+ at kindex hbreak
+ at cindex hardware breakpoints
+ at item hbreak @var{args}
+Set a hardware-assisted breakpoint.  @var{args} are the same as for the
+ at code{break} command and the breakpoint is set in the same way, but the
+breakpoint requires hardware support and some target hardware may not
+have this support.  The main purpose of this is EPROM/ROM code
+debugging, so you can set a breakpoint at an instruction without
+changing the instruction.  This can be used with the new trap-generation
+provided by SPARClite DSU and most x86-based targets.  These targets
+will generate traps when a program accesses some data or instruction
+address that is assigned to the debug registers.  However the hardware
+breakpoint registers can take a limited number of breakpoints.  For
+example, on the DSU, only two data breakpoints can be set at a time, and
+ at value{GDBN} will reject this command if more than two are used.  Delete
+or disable unused hardware breakpoints before setting new ones
+(@pxref{Disabling, ,Disabling Breakpoints}).
+ at xref{Conditions, ,Break Conditions}.
+For remote targets, you can restrict the number of hardware
+breakpoints @value{GDBN} will use, see @ref{set remote
+hardware-breakpoint-limit}.
+
+ at kindex thbreak
+ at item thbreak @var{args}
+Set a hardware-assisted breakpoint enabled only for one stop.  @var{args}
+are the same as for the @code{hbreak} command and the breakpoint is set in
+the same way.  However, like the @code{tbreak} command,
+the breakpoint is automatically deleted after the
+first time your program stops there.  Also, like the @code{hbreak}
+command, the breakpoint requires hardware support and some target hardware
+may not have this support.  @xref{Disabling, ,Disabling Breakpoints}.
+See also @ref{Conditions, ,Break Conditions}.
+
+ at kindex rbreak
+ at cindex regular expression
+ at cindex breakpoints at functions matching a regexp
+ at cindex set breakpoints in many functions
+ at item rbreak @var{regex}
+Set breakpoints on all functions matching the regular expression
+ at var{regex}.  This command sets an unconditional breakpoint on all
+matches, printing a list of all breakpoints it set.  Once these
+breakpoints are set, they are treated just like the breakpoints set with
+the @code{break} command.  You can delete them, disable them, or make
+them conditional the same way as any other breakpoint.
+
+The syntax of the regular expression is the standard one used with tools
+like @file{grep}.  Note that this is different from the syntax used by
+shells, so for instance @code{foo*} matches all functions that include
+an @code{fo} followed by zero or more @code{o}s.  There is an implicit
+ at code{.*} leading and trailing the regular expression you supply, so to
+match only functions that begin with @code{foo}, use @code{^foo}.
+
+ at cindex non-member C at t{++} functions, set breakpoint in
+When debugging C at t{++} programs, @code{rbreak} is useful for setting
+breakpoints on overloaded functions that are not members of any special
+classes.
+
+ at cindex set breakpoints on all functions
+The @code{rbreak} command can be used to set breakpoints in
+ at strong{all} the functions in a program, like this:
+
+ at smallexample
+(@value{GDBP}) rbreak .
+ at end smallexample
+
+ at item rbreak @var{file}:@var{regex}
+If @code{rbreak} is called with a filename qualification, it limits
+the search for functions matching the given regular expression to the
+specified @var{file}.  This can be used, for example, to set breakpoints on
+every function in a given file:
+
+ at smallexample
+(@value{GDBP}) rbreak file.c:.
+ at end smallexample
+
+The colon separating the filename qualifier from the regex may
+optionally be surrounded by spaces.
+
+ at kindex info breakpoints
+ at cindex @code{$_} and @code{info breakpoints}
+ at item info breakpoints @r{[}@var{n}@dots{}@r{]}
+ at itemx info break @r{[}@var{n}@dots{}@r{]}
+Print a table of all breakpoints, watchpoints, and catchpoints set and
+not deleted.  Optional argument @var{n} means print information only
+about the specified breakpoint(s) (or watchpoint(s) or catchpoint(s)).
+For each breakpoint, following columns are printed:
+
+ at table @emph
+ at item Breakpoint Numbers
+ at item Type
+Breakpoint, watchpoint, or catchpoint.
+ at item Disposition
+Whether the breakpoint is marked to be disabled or deleted when hit.
+ at item Enabled or Disabled
+Enabled breakpoints are marked with @samp{y}.  @samp{n} marks breakpoints
+that are not enabled.
+ at item Address
+Where the breakpoint is in your program, as a memory address.  For a
+pending breakpoint whose address is not yet known, this field will
+contain @samp{<PENDING>}.  Such breakpoint won't fire until a shared
+library that has the symbol or line referred by breakpoint is loaded.
+See below for details.  A breakpoint with several locations will
+have @samp{<MULTIPLE>} in this field---see below for details.
+ at item What
+Where the breakpoint is in the source for your program, as a file and
+line number.  For a pending breakpoint, the original string passed to
+the breakpoint command will be listed as it cannot be resolved until
+the appropriate shared library is loaded in the future.
+ at end table
+
+ at noindent
+If a breakpoint is conditional, there are two evaluation modes: ``host'' and
+``target''.  If mode is ``host'', breakpoint condition evaluation is done by
+ at value{GDBN} on the host's side.  If it is ``target'', then the condition
+is evaluated by the target.  The @code{info break} command shows
+the condition on the line following the affected breakpoint, together with
+its condition evaluation mode in between parentheses.
+
+Breakpoint commands, if any, are listed after that.  A pending breakpoint is
+allowed to have a condition specified for it.  The condition is not parsed for
+validity until a shared library is loaded that allows the pending
+breakpoint to resolve to a valid location.
+
+ at noindent
+ at code{info break} with a breakpoint
+number @var{n} as argument lists only that breakpoint.  The
+convenience variable @code{$_} and the default examining-address for
+the @code{x} command are set to the address of the last breakpoint
+listed (@pxref{Memory, ,Examining Memory}).
+
+ at noindent
+ at code{info break} displays a count of the number of times the breakpoint
+has been hit.  This is especially useful in conjunction with the
+ at code{ignore} command.  You can ignore a large number of breakpoint
+hits, look at the breakpoint info to see how many times the breakpoint
+was hit, and then run again, ignoring one less than that number.  This
+will get you quickly to the last hit of that breakpoint.
+
+ at noindent
+For a breakpoints with an enable count (xref) greater than 1,
+ at code{info break} also displays that count.
+
+ at end table
+
+ at value{GDBN} allows you to set any number of breakpoints at the same place in
+your program.  There is nothing silly or meaningless about this.  When
+the breakpoints are conditional, this is even useful
+(@pxref{Conditions, ,Break Conditions}).
+
+ at cindex multiple locations, breakpoints
+ at cindex breakpoints, multiple locations
+It is possible that a breakpoint corresponds to several locations
+in your program.  Examples of this situation are:
+
+ at itemize @bullet
+ at item
+Multiple functions in the program may have the same name.
+
+ at item
+For a C at t{++} constructor, the @value{NGCC} compiler generates several
+instances of the function body, used in different cases.
+
+ at item
+For a C at t{++} template function, a given line in the function can
+correspond to any number of instantiations.
+
+ at item
+For an inlined function, a given source line can correspond to
+several places where that function is inlined.
+ at end itemize
+
+In all those cases, @value{GDBN} will insert a breakpoint at all
+the relevant locations.
+
+A breakpoint with multiple locations is displayed in the breakpoint
+table using several rows---one header row, followed by one row for
+each breakpoint location.  The header row has @samp{<MULTIPLE>} in the
+address column.  The rows for individual locations contain the actual
+addresses for locations, and show the functions to which those
+locations belong.  The number column for a location is of the form
+ at var{breakpoint-number}. at var{location-number}.
+
+For example:
+
+ at smallexample
+Num     Type           Disp Enb  Address    What
+1       breakpoint     keep y    <MULTIPLE>
+        stop only if i==1
+        breakpoint already hit 1 time
+1.1                         y    0x080486a2 in void foo<int>() at t.cc:8
+1.2                         y    0x080486ca in void foo<double>() at t.cc:8
+ at end smallexample
+
+Each location can be individually enabled or disabled by passing
+ at var{breakpoint-number}. at var{location-number} as argument to the
+ at code{enable} and @code{disable} commands.  Note that you cannot
+delete the individual locations from the list, you can only delete the
+entire list of locations that belong to their parent breakpoint (with
+the @kbd{delete @var{num}} command, where @var{num} is the number of
+the parent breakpoint, 1 in the above example).  Disabling or enabling
+the parent breakpoint (@pxref{Disabling}) affects all of the locations
+that belong to that breakpoint.
+
+ at cindex pending breakpoints
+It's quite common to have a breakpoint inside a shared library.
+Shared libraries can be loaded and unloaded explicitly,
+and possibly repeatedly, as the program is executed.  To support
+this use case, @value{GDBN} updates breakpoint locations whenever
+any shared library is loaded or unloaded.  Typically, you would
+set a breakpoint in a shared library at the beginning of your
+debugging session, when the library is not loaded, and when the
+symbols from the library are not available.  When you try to set
+breakpoint, @value{GDBN} will ask you if you want to set
+a so called @dfn{pending breakpoint}---breakpoint whose address
+is not yet resolved.
+
+After the program is run, whenever a new shared library is loaded,
+ at value{GDBN} reevaluates all the breakpoints.  When a newly loaded
+shared library contains the symbol or line referred to by some
+pending breakpoint, that breakpoint is resolved and becomes an
+ordinary breakpoint.  When a library is unloaded, all breakpoints
+that refer to its symbols or source lines become pending again.
+
+This logic works for breakpoints with multiple locations, too.  For
+example, if you have a breakpoint in a C at t{++} template function, and
+a newly loaded shared library has an instantiation of that template,
+a new location is added to the list of locations for the breakpoint.
+
+Except for having unresolved address, pending breakpoints do not
+differ from regular breakpoints.  You can set conditions or commands,
+enable and disable them and perform other breakpoint operations.
+
+ at value{GDBN} provides some additional commands for controlling what
+happens when the @samp{break} command cannot resolve breakpoint
+address specification to an address:
+
+ at kindex set breakpoint pending
+ at kindex show breakpoint pending
+ at table @code
+ at item set breakpoint pending auto
+This is the default behavior.  When @value{GDBN} cannot find the breakpoint
+location, it queries you whether a pending breakpoint should be created.
+
+ at item set breakpoint pending on
+This indicates that an unrecognized breakpoint location should automatically
+result in a pending breakpoint being created.
+
+ at item set breakpoint pending off
+This indicates that pending breakpoints are not to be created.  Any
+unrecognized breakpoint location results in an error.  This setting does
+not affect any pending breakpoints previously created.
+
+ at item show breakpoint pending
+Show the current behavior setting for creating pending breakpoints.
+ at end table
+
+The settings above only affect the @code{break} command and its
+variants.  Once breakpoint is set, it will be automatically updated
+as shared libraries are loaded and unloaded.
+
+ at cindex automatic hardware breakpoints
+For some targets, @value{GDBN} can automatically decide if hardware or
+software breakpoints should be used, depending on whether the
+breakpoint address is read-only or read-write.  This applies to
+breakpoints set with the @code{break} command as well as to internal
+breakpoints set by commands like @code{next} and @code{finish}.  For
+breakpoints set with @code{hbreak}, @value{GDBN} will always use hardware
+breakpoints.
+
+You can control this automatic behaviour with the following commands::
+
+ at kindex set breakpoint auto-hw
+ at kindex show breakpoint auto-hw
+ at table @code
+ at item set breakpoint auto-hw on
+This is the default behavior.  When @value{GDBN} sets a breakpoint, it
+will try to use the target memory map to decide if software or hardware
+breakpoint must be used.
+
+ at item set breakpoint auto-hw off
+This indicates @value{GDBN} should not automatically select breakpoint
+type.  If the target provides a memory map, @value{GDBN} will warn when
+trying to set software breakpoint at a read-only address.
+ at end table
+
+ at value{GDBN} normally implements breakpoints by replacing the program code
+at the breakpoint address with a special instruction, which, when
+executed, given control to the debugger.  By default, the program
+code is so modified only when the program is resumed.  As soon as
+the program stops, @value{GDBN} restores the original instructions.  This
+behaviour guards against leaving breakpoints inserted in the
+target should gdb abrubptly disconnect.  However, with slow remote
+targets, inserting and removing breakpoint can reduce the performance.
+This behavior can be controlled with the following commands::
+
+ at kindex set breakpoint always-inserted
+ at kindex show breakpoint always-inserted
+ at table @code
+ at item set breakpoint always-inserted off
+All breakpoints, including newly added by the user, are inserted in
+the target only when the target is resumed.  All breakpoints are
+removed from the target when it stops.
+
+ at item set breakpoint always-inserted on
+Causes all breakpoints to be inserted in the target at all times.  If
+the user adds a new breakpoint, or changes an existing breakpoint, the
+breakpoints in the target are updated immediately.  A breakpoint is
+removed from the target only when breakpoint itself is removed.
+
+ at cindex non-stop mode, and @code{breakpoint always-inserted}
+ at item set breakpoint always-inserted auto
+This is the default mode.  If @value{GDBN} is controlling the inferior
+in non-stop mode (@pxref{Non-Stop Mode}), gdb behaves as if
+ at code{breakpoint always-inserted} mode is on.  If @value{GDBN} is
+controlling the inferior in all-stop mode, @value{GDBN} behaves as if
+ at code{breakpoint always-inserted} mode is off.
+ at end table
+
+ at value{GDBN} handles conditional breakpoints by evaluating these conditions
+when a breakpoint breaks.  If the condition is true, then the process being
+debugged stops, otherwise the process is resumed.
+
+If the target supports evaluating conditions on its end, @value{GDBN} may
+download the breakpoint, together with its conditions, to it.
+
+This feature can be controlled via the following commands:
+
+ at kindex set breakpoint condition-evaluation
+ at kindex show breakpoint condition-evaluation
+ at table @code
+ at item set breakpoint condition-evaluation host
+This option commands @value{GDBN} to evaluate the breakpoint
+conditions on the host's side.  Unconditional breakpoints are sent to
+the target which in turn receives the triggers and reports them back to GDB
+for condition evaluation.  This is the standard evaluation mode.
+
+ at item set breakpoint condition-evaluation target
+This option commands @value{GDBN} to download breakpoint conditions
+to the target at the moment of their insertion.  The target
+is responsible for evaluating the conditional expression and reporting
+breakpoint stop events back to @value{GDBN} whenever the condition
+is true.  Due to limitations of target-side evaluation, some conditions
+cannot be evaluated there, e.g., conditions that depend on local data
+that is only known to the host.  Examples include
+conditional expressions involving convenience variables, complex types
+that cannot be handled by the agent expression parser and expressions
+that are too long to be sent over to the target, specially when the
+target is a remote system.  In these cases, the conditions will be
+evaluated by @value{GDBN}.
+
+ at item set breakpoint condition-evaluation auto
+This is the default mode.  If the target supports evaluating breakpoint
+conditions on its end, @value{GDBN} will download breakpoint conditions to
+the target (limitations mentioned previously apply).  If the target does
+not support breakpoint condition evaluation, then @value{GDBN} will fallback
+to evaluating all these conditions on the host's side.
+ at end table
+
+
+ at cindex negative breakpoint numbers
+ at cindex internal @value{GDBN} breakpoints
+ at value{GDBN} itself sometimes sets breakpoints in your program for
+special purposes, such as proper handling of @code{longjmp} (in C
+programs).  These internal breakpoints are assigned negative numbers,
+starting with @code{-1}; @samp{info breakpoints} does not display them.
+You can see these breakpoints with the @value{GDBN} maintenance command
+ at samp{maint info breakpoints} (@pxref{maint info breakpoints}).
+
+
+ at node Set Watchpoints
+ at subsection Setting Watchpoints
+
+ at cindex setting watchpoints
+You can use a watchpoint to stop execution whenever the value of an
+expression changes, without having to predict a particular place where
+this may happen.  (This is sometimes called a @dfn{data breakpoint}.)
+The expression may be as simple as the value of a single variable, or
+as complex as many variables combined by operators.  Examples include:
+
+ at itemize @bullet
+ at item
+A reference to the value of a single variable.
+
+ at item
+An address cast to an appropriate data type.  For example,
+ at samp{*(int *)0x12345678} will watch a 4-byte region at the specified
+address (assuming an @code{int} occupies 4 bytes).
+
+ at item
+An arbitrarily complex expression, such as @samp{a*b + c/d}.  The
+expression can use any operators valid in the program's native
+language (@pxref{Languages}).
+ at end itemize
+
+You can set a watchpoint on an expression even if the expression can
+not be evaluated yet.  For instance, you can set a watchpoint on
+ at samp{*global_ptr} before @samp{global_ptr} is initialized.
+ at value{GDBN} will stop when your program sets @samp{global_ptr} and
+the expression produces a valid value.  If the expression becomes
+valid in some other way than changing a variable (e.g.@: if the memory
+pointed to by @samp{*global_ptr} becomes readable as the result of a
+ at code{malloc} call), @value{GDBN} may not stop until the next time
+the expression changes.
+
+ at cindex software watchpoints
+ at cindex hardware watchpoints
+Depending on your system, watchpoints may be implemented in software or
+hardware.  @value{GDBN} does software watchpointing by single-stepping your
+program and testing the variable's value each time, which is hundreds of
+times slower than normal execution.  (But this may still be worth it, to
+catch errors where you have no clue what part of your program is the
+culprit.)
+
+On some systems, such as HP-UX, PowerPC, @sc{gnu}/Linux and most other
+x86-based targets, @value{GDBN} includes support for hardware
+watchpoints, which do not slow down the running of your program.
+
+ at table @code
+ at kindex watch
+ at item watch @r{[}-l at r{|}-location at r{]} @var{expr} @r{[}thread @var{threadnum}@r{]} @r{[}mask @var{maskvalue}@r{]}
+Set a watchpoint for an expression.  @value{GDBN} will break when the
+expression @var{expr} is written into by the program and its value
+changes.  The simplest (and the most popular) use of this command is
+to watch the value of a single variable:
+
+ at smallexample
+(@value{GDBP}) watch foo
+ at end smallexample
+
+If the command includes a @code{@r{[}thread @var{threadnum}@r{]}}
+argument, @value{GDBN} breaks only when the thread identified by
+ at var{threadnum} changes the value of @var{expr}.  If any other threads
+change the value of @var{expr}, @value{GDBN} will not break.  Note
+that watchpoints restricted to a single thread in this way only work
+with Hardware Watchpoints.
+
+Ordinarily a watchpoint respects the scope of variables in @var{expr}
+(see below).  The @code{-location} argument tells @value{GDBN} to
+instead watch the memory referred to by @var{expr}.  In this case,
+ at value{GDBN} will evaluate @var{expr}, take the address of the result,
+and watch the memory at that address.  The type of the result is used
+to determine the size of the watched memory.  If the expression's
+result does not have an address, then @value{GDBN} will print an
+error.
+
+The @code{@r{[}mask @var{maskvalue}@r{]}} argument allows creation
+of masked watchpoints, if the current architecture supports this
+feature (e.g., PowerPC Embedded architecture, see @ref{PowerPC
+Embedded}.)  A @dfn{masked watchpoint} specifies a mask in addition
+to an address to watch.  The mask specifies that some bits of an address
+(the bits which are reset in the mask) should be ignored when matching
+the address accessed by the inferior against the watchpoint address.
+Thus, a masked watchpoint watches many addresses simultaneously---those
+addresses whose unmasked bits are identical to the unmasked bits in the
+watchpoint address.  The @code{mask} argument implies @code{-location}.
+Examples:
+
+ at smallexample
+(@value{GDBP}) watch foo mask 0xffff00ff
+(@value{GDBP}) watch *0xdeadbeef mask 0xffffff00
+ at end smallexample
+
+ at kindex rwatch
+ at item rwatch @r{[}-l at r{|}-location at r{]} @var{expr} @r{[}thread @var{threadnum}@r{]} @r{[}mask @var{maskvalue}@r{]}
+Set a watchpoint that will break when the value of @var{expr} is read
+by the program.
+
+ at kindex awatch
+ at item awatch @r{[}-l at r{|}-location at r{]} @var{expr} @r{[}thread @var{threadnum}@r{]} @r{[}mask @var{maskvalue}@r{]}
+Set a watchpoint that will break when @var{expr} is either read from
+or written into by the program.
+
+ at kindex info watchpoints @r{[}@var{n}@dots{}@r{]}
+ at item info watchpoints @r{[}@var{n}@dots{}@r{]}
+This command prints a list of watchpoints, using the same format as
+ at code{info break} (@pxref{Set Breaks}).
+ at end table
+
+If you watch for a change in a numerically entered address you need to
+dereference it, as the address itself is just a constant number which will
+never change.  @value{GDBN} refuses to create a watchpoint that watches
+a never-changing value:
+
+ at smallexample
+(@value{GDBP}) watch 0x600850
+Cannot watch constant value 0x600850.
+(@value{GDBP}) watch *(int *) 0x600850
+Watchpoint 1: *(int *) 6293584
+ at end smallexample
+
+ at value{GDBN} sets a @dfn{hardware watchpoint} if possible.  Hardware
+watchpoints execute very quickly, and the debugger reports a change in
+value at the exact instruction where the change occurs.  If @value{GDBN}
+cannot set a hardware watchpoint, it sets a software watchpoint, which
+executes more slowly and reports the change in value at the next
+ at emph{statement}, not the instruction, after the change occurs.
+
+ at cindex use only software watchpoints
+You can force @value{GDBN} to use only software watchpoints with the
+ at kbd{set can-use-hw-watchpoints 0} command.  With this variable set to
+zero, @value{GDBN} will never try to use hardware watchpoints, even if
+the underlying system supports them.  (Note that hardware-assisted
+watchpoints that were set @emph{before} setting
+ at code{can-use-hw-watchpoints} to zero will still use the hardware
+mechanism of watching expression values.)
+
+ at table @code
+ at item set can-use-hw-watchpoints
+ at kindex set can-use-hw-watchpoints
+Set whether or not to use hardware watchpoints.
+
+ at item show can-use-hw-watchpoints
+ at kindex show can-use-hw-watchpoints
+Show the current mode of using hardware watchpoints.
+ at end table
+
+For remote targets, you can restrict the number of hardware
+watchpoints @value{GDBN} will use, see @ref{set remote
+hardware-breakpoint-limit}.
+
+When you issue the @code{watch} command, @value{GDBN} reports
+
+ at smallexample
+Hardware watchpoint @var{num}: @var{expr}
+ at end smallexample
+
+ at noindent
+if it was able to set a hardware watchpoint.
+
+Currently, the @code{awatch} and @code{rwatch} commands can only set
+hardware watchpoints, because accesses to data that don't change the
+value of the watched expression cannot be detected without examining
+every instruction as it is being executed, and @value{GDBN} does not do
+that currently.  If @value{GDBN} finds that it is unable to set a
+hardware breakpoint with the @code{awatch} or @code{rwatch} command, it
+will print a message like this:
+
+ at smallexample
+Expression cannot be implemented with read/access watchpoint.
+ at end smallexample
+
+Sometimes, @value{GDBN} cannot set a hardware watchpoint because the
+data type of the watched expression is wider than what a hardware
+watchpoint on the target machine can handle.  For example, some systems
+can only watch regions that are up to 4 bytes wide; on such systems you
+cannot set hardware watchpoints for an expression that yields a
+double-precision floating-point number (which is typically 8 bytes
+wide).  As a work-around, it might be possible to break the large region
+into a series of smaller ones and watch them with separate watchpoints.
+
+If you set too many hardware watchpoints, @value{GDBN} might be unable
+to insert all of them when you resume the execution of your program.
+Since the precise number of active watchpoints is unknown until such
+time as the program is about to be resumed, @value{GDBN} might not be
+able to warn you about this when you set the watchpoints, and the
+warning will be printed only when the program is resumed:
+
+ at smallexample
+Hardware watchpoint @var{num}: Could not insert watchpoint
+ at end smallexample
+
+ at noindent
+If this happens, delete or disable some of the watchpoints.
+
+Watching complex expressions that reference many variables can also
+exhaust the resources available for hardware-assisted watchpoints.
+That's because @value{GDBN} needs to watch every variable in the
+expression with separately allocated resources.
+
+If you call a function interactively using @code{print} or @code{call},
+any watchpoints you have set will be inactive until @value{GDBN} reaches another
+kind of breakpoint or the call completes.
+
+ at value{GDBN} automatically deletes watchpoints that watch local
+(automatic) variables, or expressions that involve such variables, when
+they go out of scope, that is, when the execution leaves the block in
+which these variables were defined.  In particular, when the program
+being debugged terminates, @emph{all} local variables go out of scope,
+and so only watchpoints that watch global variables remain set.  If you
+rerun the program, you will need to set all such watchpoints again.  One
+way of doing that would be to set a code breakpoint at the entry to the
+ at code{main} function and when it breaks, set all the watchpoints.
+
+ at cindex watchpoints and threads
+ at cindex threads and watchpoints
+In multi-threaded programs, watchpoints will detect changes to the
+watched expression from every thread.
+
+ at quotation
+ at emph{Warning:} In multi-threaded programs, software watchpoints
+have only limited usefulness.  If @value{GDBN} creates a software
+watchpoint, it can only watch the value of an expression @emph{in a
+single thread}.  If you are confident that the expression can only
+change due to the current thread's activity (and if you are also
+confident that no other thread can become current), then you can use
+software watchpoints as usual.  However, @value{GDBN} may not notice
+when a non-current thread's activity changes the expression.  (Hardware
+watchpoints, in contrast, watch an expression in all threads.)
+ at end quotation
+
+ at xref{set remote hardware-watchpoint-limit}.
+
+ at node Set Catchpoints
+ at subsection Setting Catchpoints
+ at cindex catchpoints, setting
+ at cindex exception handlers
+ at cindex event handling
+
+You can use @dfn{catchpoints} to cause the debugger to stop for certain
+kinds of program events, such as C at t{++} exceptions or the loading of a
+shared library.  Use the @code{catch} command to set a catchpoint.
+
+ at table @code
+ at kindex catch
+ at item catch @var{event}
+Stop when @var{event} occurs.  @var{event} can be any of the following:
+ at table @code
+ at item throw
+ at cindex stop on C at t{++} exceptions
+The throwing of a C at t{++} exception.
+
+ at item catch
+The catching of a C at t{++} exception.
+
+ at item exception
+ at cindex Ada exception catching
+ at cindex catch Ada exceptions
+An Ada exception being raised.  If an exception name is specified
+at the end of the command (eg @code{catch exception Program_Error}),
+the debugger will stop only when this specific exception is raised.
+Otherwise, the debugger stops execution when any Ada exception is raised.
+
+When inserting an exception catchpoint on a user-defined exception whose
+name is identical to one of the exceptions defined by the language, the
+fully qualified name must be used as the exception name.  Otherwise,
+ at value{GDBN} will assume that it should stop on the pre-defined exception
+rather than the user-defined one.  For instance, assuming an exception
+called @code{Constraint_Error} is defined in package @code{Pck}, then
+the command to use to catch such exceptions is @kbd{catch exception
+Pck.Constraint_Error}.
+
+ at item exception unhandled
+An exception that was raised but is not handled by the program.
+
+ at item assert
+A failed Ada assertion.
+
+ at item exec
+ at cindex break on fork/exec
+A call to @code{exec}.  This is currently only available for HP-UX
+and @sc{gnu}/Linux.
+
+ at item syscall
+ at itemx syscall @r{[}@var{name} @r{|} @var{number}@r{]} @dots{} 
+ at cindex break on a system call.
+A call to or return from a system call, a.k.a.@: @dfn{syscall}.  A
+syscall is a mechanism for application programs to request a service
+from the operating system (OS) or one of the OS system services.
+ at value{GDBN} can catch some or all of the syscalls issued by the
+debuggee, and show the related information for each syscall.  If no
+argument is specified, calls to and returns from all system calls
+will be caught.
+
+ at var{name} can be any system call name that is valid for the
+underlying OS.  Just what syscalls are valid depends on the OS.  On
+GNU and Unix systems, you can find the full list of valid syscall
+names on @file{/usr/include/asm/unistd.h}.
+
+ at c For MS-Windows, the syscall names and the corresponding numbers
+ at c can be found, e.g., on this URL:
+ at c http://www.metasploit.com/users/opcode/syscalls.html
+ at c but we don't support Windows syscalls yet.
+
+Normally, @value{GDBN} knows in advance which syscalls are valid for
+each OS, so you can use the @value{GDBN} command-line completion
+facilities (@pxref{Completion,, command completion}) to list the
+available choices.
+
+You may also specify the system call numerically.  A syscall's
+number is the value passed to the OS's syscall dispatcher to
+identify the requested service.  When you specify the syscall by its
+name, @value{GDBN} uses its database of syscalls to convert the name
+into the corresponding numeric code, but using the number directly
+may be useful if @value{GDBN}'s database does not have the complete
+list of syscalls on your system (e.g., because @value{GDBN} lags
+behind the OS upgrades).
+
+The example below illustrates how this command works if you don't provide
+arguments to it:
+
+ at smallexample
+(@value{GDBP}) catch syscall
+Catchpoint 1 (syscall)
+(@value{GDBP}) r
+Starting program: /tmp/catch-syscall
+
+Catchpoint 1 (call to syscall 'close'), \
+	   0xffffe424 in __kernel_vsyscall ()
+(@value{GDBP}) c
+Continuing.
+
+Catchpoint 1 (returned from syscall 'close'), \
+	0xffffe424 in __kernel_vsyscall ()
+(@value{GDBP})
+ at end smallexample
+
+Here is an example of catching a system call by name:
+
+ at smallexample
+(@value{GDBP}) catch syscall chroot
+Catchpoint 1 (syscall 'chroot' [61])
+(@value{GDBP}) r
+Starting program: /tmp/catch-syscall
+
+Catchpoint 1 (call to syscall 'chroot'), \
+		   0xffffe424 in __kernel_vsyscall ()
+(@value{GDBP}) c
+Continuing.
+
+Catchpoint 1 (returned from syscall 'chroot'), \
+	0xffffe424 in __kernel_vsyscall ()
+(@value{GDBP})
+ at end smallexample
+
+An example of specifying a system call numerically.  In the case
+below, the syscall number has a corresponding entry in the XML
+file, so @value{GDBN} finds its name and prints it:
+
+ at smallexample
+(@value{GDBP}) catch syscall 252
+Catchpoint 1 (syscall(s) 'exit_group')
+(@value{GDBP}) r
+Starting program: /tmp/catch-syscall
+
+Catchpoint 1 (call to syscall 'exit_group'), \
+		   0xffffe424 in __kernel_vsyscall ()
+(@value{GDBP}) c
+Continuing.
+
+Program exited normally.
+(@value{GDBP})
+ at end smallexample
+
+However, there can be situations when there is no corresponding name
+in XML file for that syscall number.  In this case, @value{GDBN} prints
+a warning message saying that it was not able to find the syscall name,
+but the catchpoint will be set anyway.  See the example below:
+
+ at smallexample
+(@value{GDBP}) catch syscall 764
+warning: The number '764' does not represent a known syscall.
+Catchpoint 2 (syscall 764)
+(@value{GDBP})
+ at end smallexample
+
+If you configure @value{GDBN} using the @samp{--without-expat} option,
+it will not be able to display syscall names.  Also, if your
+architecture does not have an XML file describing its system calls,
+you will not be able to see the syscall names.  It is important to
+notice that these two features are used for accessing the syscall
+name database.  In either case, you will see a warning like this:
+
+ at smallexample
+(@value{GDBP}) catch syscall
+warning: Could not open "syscalls/i386-linux.xml"
+warning: Could not load the syscall XML file 'syscalls/i386-linux.xml'.
+GDB will not be able to display syscall names.
+Catchpoint 1 (syscall)
+(@value{GDBP})
+ at end smallexample
+
+Of course, the file name will change depending on your architecture and system.
+
+Still using the example above, you can also try to catch a syscall by its
+number.  In this case, you would see something like:
+
+ at smallexample
+(@value{GDBP}) catch syscall 252
+Catchpoint 1 (syscall(s) 252)
+ at end smallexample
+
+Again, in this case @value{GDBN} would not be able to display syscall's names.
+
+ at item fork
+A call to @code{fork}.  This is currently only available for HP-UX
+and @sc{gnu}/Linux.
+
+ at item vfork
+A call to @code{vfork}.  This is currently only available for HP-UX
+and @sc{gnu}/Linux.
+
+ at item load @r{[}regexp at r{]}
+ at itemx unload @r{[}regexp at r{]}
+The loading or unloading of a shared library.  If @var{regexp} is
+given, then the catchpoint will stop only if the regular expression
+matches one of the affected libraries.
+
+ at end table
+
+ at item tcatch @var{event}
+Set a catchpoint that is enabled only for one stop.  The catchpoint is
+automatically deleted after the first time the event is caught.
+
+ at end table
+
+Use the @code{info break} command to list the current catchpoints.
+
+There are currently some limitations to C at t{++} exception handling
+(@code{catch throw} and @code{catch catch}) in @value{GDBN}:
+
+ at itemize @bullet
+ at item
+If you call a function interactively, @value{GDBN} normally returns
+control to you when the function has finished executing.  If the call
+raises an exception, however, the call may bypass the mechanism that
+returns control to you and cause your program either to abort or to
+simply continue running until it hits a breakpoint, catches a signal
+that @value{GDBN} is listening for, or exits.  This is the case even if
+you set a catchpoint for the exception; catchpoints on exceptions are
+disabled within interactive calls.
+
+ at item
+You cannot raise an exception interactively.
+
+ at item
+You cannot install an exception handler interactively.
+ at end itemize
+
+ at cindex raise exceptions
+Sometimes @code{catch} is not the best way to debug exception handling:
+if you need to know exactly where an exception is raised, it is better to
+stop @emph{before} the exception handler is called, since that way you
+can see the stack before any unwinding takes place.  If you set a
+breakpoint in an exception handler instead, it may not be easy to find
+out where the exception was raised.
+
+To stop just before an exception handler is called, you need some
+knowledge of the implementation.  In the case of @sc{gnu} C at t{++}, exceptions are
+raised by calling a library function named @code{__raise_exception}
+which has the following ANSI C interface:
+
+ at smallexample
+    /* @var{addr} is where the exception identifier is stored.
+       @var{id} is the exception identifier.  */
+    void __raise_exception (void **addr, void *id);
+ at end smallexample
+
+ at noindent
+To make the debugger catch all exceptions before any stack
+unwinding takes place, set a breakpoint on @code{__raise_exception}
+(@pxref{Breakpoints, ,Breakpoints; Watchpoints; and Exceptions}).
+
+With a conditional breakpoint (@pxref{Conditions, ,Break Conditions})
+that depends on the value of @var{id}, you can stop your program when
+a specific exception is raised.  You can use multiple conditional
+breakpoints to stop your program when any of a number of exceptions are
+raised.
+
+
+ at node Delete Breaks
+ at subsection Deleting Breakpoints
+
+ at cindex clearing breakpoints, watchpoints, catchpoints
+ at cindex deleting breakpoints, watchpoints, catchpoints
+It is often necessary to eliminate a breakpoint, watchpoint, or
+catchpoint once it has done its job and you no longer want your program
+to stop there.  This is called @dfn{deleting} the breakpoint.  A
+breakpoint that has been deleted no longer exists; it is forgotten.
+
+With the @code{clear} command you can delete breakpoints according to
+where they are in your program.  With the @code{delete} command you can
+delete individual breakpoints, watchpoints, or catchpoints by specifying
+their breakpoint numbers.
+
+It is not necessary to delete a breakpoint to proceed past it.  @value{GDBN}
+automatically ignores breakpoints on the first instruction to be executed
+when you continue execution without changing the execution address.
+
+ at table @code
+ at kindex clear
+ at item clear
+Delete any breakpoints at the next instruction to be executed in the
+selected stack frame (@pxref{Selection, ,Selecting a Frame}).  When
+the innermost frame is selected, this is a good way to delete a
+breakpoint where your program just stopped.
+
+ at item clear @var{location}
+Delete any breakpoints set at the specified @var{location}.
+ at xref{Specify Location}, for the various forms of @var{location}; the
+most useful ones are listed below:
+
+ at table @code
+ at item clear @var{function}
+ at itemx clear @var{filename}:@var{function}
+Delete any breakpoints set at entry to the named @var{function}.
+
+ at item clear @var{linenum}
+ at itemx clear @var{filename}:@var{linenum}
+Delete any breakpoints set at or within the code of the specified
+ at var{linenum} of the specified @var{filename}.
+ at end table
+
+ at cindex delete breakpoints
+ at kindex delete
+ at kindex d @r{(@code{delete})}
+ at item delete @r{[}breakpoints at r{]} @r{[}@var{range}@dots{}@r{]}
+Delete the breakpoints, watchpoints, or catchpoints of the breakpoint
+ranges specified as arguments.  If no argument is specified, delete all
+breakpoints (@value{GDBN} asks confirmation, unless you have @code{set
+confirm off}).  You can abbreviate this command as @code{d}.
+ at end table
+
+ at node Disabling
+ at subsection Disabling Breakpoints
+
+ at cindex enable/disable a breakpoint
+Rather than deleting a breakpoint, watchpoint, or catchpoint, you might
+prefer to @dfn{disable} it.  This makes the breakpoint inoperative as if
+it had been deleted, but remembers the information on the breakpoint so
+that you can @dfn{enable} it again later.
+
+You disable and enable breakpoints, watchpoints, and catchpoints with
+the @code{enable} and @code{disable} commands, optionally specifying
+one or more breakpoint numbers as arguments.  Use @code{info break} to
+print a list of all breakpoints, watchpoints, and catchpoints if you
+do not know which numbers to use.
+
+Disabling and enabling a breakpoint that has multiple locations
+affects all of its locations.
+
+A breakpoint, watchpoint, or catchpoint can have any of several
+different states of enablement:
+
+ at itemize @bullet
+ at item
+Enabled.  The breakpoint stops your program.  A breakpoint set
+with the @code{break} command starts out in this state.
+ at item
+Disabled.  The breakpoint has no effect on your program.
+ at item
+Enabled once.  The breakpoint stops your program, but then becomes
+disabled.
+ at item
+Enabled for a count.  The breakpoint stops your program for the next
+N times, then becomes disabled.
+ at item
+Enabled for deletion.  The breakpoint stops your program, but
+immediately after it does so it is deleted permanently.  A breakpoint
+set with the @code{tbreak} command starts out in this state.
+ at end itemize
+
+You can use the following commands to enable or disable breakpoints,
+watchpoints, and catchpoints:
+
+ at table @code
+ at kindex disable
+ at kindex dis @r{(@code{disable})}
+ at item disable @r{[}breakpoints at r{]} @r{[}@var{range}@dots{}@r{]}
+Disable the specified breakpoints---or all breakpoints, if none are
+listed.  A disabled breakpoint has no effect but is not forgotten.  All
+options such as ignore-counts, conditions and commands are remembered in
+case the breakpoint is enabled again later.  You may abbreviate
+ at code{disable} as @code{dis}.
+
+ at kindex enable
+ at item enable @r{[}breakpoints at r{]} @r{[}@var{range}@dots{}@r{]}
+Enable the specified breakpoints (or all defined breakpoints).  They
+become effective once again in stopping your program.
+
+ at item enable @r{[}breakpoints at r{]} once @var{range}@dots{}
+Enable the specified breakpoints temporarily.  @value{GDBN} disables any
+of these breakpoints immediately after stopping your program.
+
+ at item enable @r{[}breakpoints at r{]} count @var{count} @var{range}@dots{}
+Enable the specified breakpoints temporarily.  @value{GDBN} records
+ at var{count} with each of the specified breakpoints, and decrements a
+breakpoint's count when it is hit.  When any count reaches 0,
+ at value{GDBN} disables that breakpoint.  If a breakpoint has an ignore
+count (@pxref{Conditions, ,Break Conditions}), that will be
+decremented to 0 before @var{count} is affected.
+
+ at item enable @r{[}breakpoints at r{]} delete @var{range}@dots{}
+Enable the specified breakpoints to work once, then die.  @value{GDBN}
+deletes any of these breakpoints as soon as your program stops there.
+Breakpoints set by the @code{tbreak} command start out in this state.
+ at end table
+
+ at c FIXME: I think the following ``Except for [...] @code{tbreak}'' is
+ at c confusing: tbreak is also initially enabled.
+Except for a breakpoint set with @code{tbreak} (@pxref{Set Breaks,
+,Setting Breakpoints}), breakpoints that you set are initially enabled;
+subsequently, they become disabled or enabled only when you use one of
+the commands above.  (The command @code{until} can set and delete a
+breakpoint of its own, but it does not change the state of your other
+breakpoints; see @ref{Continuing and Stepping, ,Continuing and
+Stepping}.)
+
+ at node Conditions
+ at subsection Break Conditions
+ at cindex conditional breakpoints
+ at cindex breakpoint conditions
+
+ at c FIXME what is scope of break condition expr?  Context where wanted?
+ at c      in particular for a watchpoint?
+The simplest sort of breakpoint breaks every time your program reaches a
+specified place.  You can also specify a @dfn{condition} for a
+breakpoint.  A condition is just a Boolean expression in your
+programming language (@pxref{Expressions, ,Expressions}).  A breakpoint with
+a condition evaluates the expression each time your program reaches it,
+and your program stops only if the condition is @emph{true}.
+
+This is the converse of using assertions for program validation; in that
+situation, you want to stop when the assertion is violated---that is,
+when the condition is false.  In C, if you want to test an assertion expressed
+by the condition @var{assert}, you should set the condition
+ at samp{! @var{assert}} on the appropriate breakpoint.
+
+Conditions are also accepted for watchpoints; you may not need them,
+since a watchpoint is inspecting the value of an expression anyhow---but
+it might be simpler, say, to just set a watchpoint on a variable name,
+and specify a condition that tests whether the new value is an interesting
+one.
+
+Break conditions can have side effects, and may even call functions in
+your program.  This can be useful, for example, to activate functions
+that log program progress, or to use your own print functions to
+format special data structures.  The effects are completely predictable
+unless there is another enabled breakpoint at the same address.  (In
+that case, @value{GDBN} might see the other breakpoint first and stop your
+program without checking the condition of this one.)  Note that
+breakpoint commands are usually more convenient and flexible than break
+conditions for the
+purpose of performing side effects when a breakpoint is reached
+(@pxref{Break Commands, ,Breakpoint Command Lists}).
+
+Breakpoint conditions can also be evaluated on the target's side if
+the target supports it.  Instead of evaluating the conditions locally,
+ at value{GDBN} encodes the expression into an agent expression
+(@pxref{Agent Expressions}) suitable for execution on the target,
+independently of @value{GDBN}.  Global variables become raw memory
+locations, locals become stack accesses, and so forth.
+
+In this case, @value{GDBN} will only be notified of a breakpoint trigger
+when its condition evaluates to true.  This mechanism may provide faster
+response times depending on the performance characteristics of the target
+since it does not need to keep @value{GDBN} informed about
+every breakpoint trigger, even those with false conditions.
+
+Break conditions can be specified when a breakpoint is set, by using
+ at samp{if} in the arguments to the @code{break} command.  @xref{Set
+Breaks, ,Setting Breakpoints}.  They can also be changed at any time
+with the @code{condition} command.
+
+You can also use the @code{if} keyword with the @code{watch} command.
+The @code{catch} command does not recognize the @code{if} keyword;
+ at code{condition} is the only way to impose a further condition on a
+catchpoint.
+
+ at table @code
+ at kindex condition
+ at item condition @var{bnum} @var{expression}
+Specify @var{expression} as the break condition for breakpoint,
+watchpoint, or catchpoint number @var{bnum}.  After you set a condition,
+breakpoint @var{bnum} stops your program only if the value of
+ at var{expression} is true (nonzero, in C).  When you use
+ at code{condition}, @value{GDBN} checks @var{expression} immediately for
+syntactic correctness, and to determine whether symbols in it have
+referents in the context of your breakpoint.  If @var{expression} uses
+symbols not referenced in the context of the breakpoint, @value{GDBN}
+prints an error message:
+
+ at smallexample
+No symbol "foo" in current context.
+ at end smallexample
+
+ at noindent
+ at value{GDBN} does
+not actually evaluate @var{expression} at the time the @code{condition}
+command (or a command that sets a breakpoint with a condition, like
+ at code{break if @dots{}}) is given, however.  @xref{Expressions, ,Expressions}.
+
+ at item condition @var{bnum}
+Remove the condition from breakpoint number @var{bnum}.  It becomes
+an ordinary unconditional breakpoint.
+ at end table
+
+ at cindex ignore count (of breakpoint)
+A special case of a breakpoint condition is to stop only when the
+breakpoint has been reached a certain number of times.  This is so
+useful that there is a special way to do it, using the @dfn{ignore
+count} of the breakpoint.  Every breakpoint has an ignore count, which
+is an integer.  Most of the time, the ignore count is zero, and
+therefore has no effect.  But if your program reaches a breakpoint whose
+ignore count is positive, then instead of stopping, it just decrements
+the ignore count by one and continues.  As a result, if the ignore count
+value is @var{n}, the breakpoint does not stop the next @var{n} times
+your program reaches it.
+
+ at table @code
+ at kindex ignore
+ at item ignore @var{bnum} @var{count}
+Set the ignore count of breakpoint number @var{bnum} to @var{count}.
+The next @var{count} times the breakpoint is reached, your program's
+execution does not stop; other than to decrement the ignore count, @value{GDBN}
+takes no action.
+
+To make the breakpoint stop the next time it is reached, specify
+a count of zero.
+
+When you use @code{continue} to resume execution of your program from a
+breakpoint, you can specify an ignore count directly as an argument to
+ at code{continue}, rather than using @code{ignore}.  @xref{Continuing and
+Stepping,,Continuing and Stepping}.
+
+If a breakpoint has a positive ignore count and a condition, the
+condition is not checked.  Once the ignore count reaches zero,
+ at value{GDBN} resumes checking the condition.
+
+You could achieve the effect of the ignore count with a condition such
+as @w{@samp{$foo-- <= 0}} using a debugger convenience variable that
+is decremented each time.  @xref{Convenience Vars, ,Convenience
+Variables}.
+ at end table
+
+Ignore counts apply to breakpoints, watchpoints, and catchpoints.
+
+
+ at node Break Commands
+ at subsection Breakpoint Command Lists
+
+ at cindex breakpoint commands
+You can give any breakpoint (or watchpoint or catchpoint) a series of
+commands to execute when your program stops due to that breakpoint.  For
+example, you might want to print the values of certain expressions, or
+enable other breakpoints.
+
+ at table @code
+ at kindex commands
+ at kindex end at r{ (breakpoint commands)}
+ at item commands @r{[}@var{range}@dots{}@r{]}
+ at itemx @dots{} @var{command-list} @dots{}
+ at itemx end
+Specify a list of commands for the given breakpoints.  The commands
+themselves appear on the following lines.  Type a line containing just
+ at code{end} to terminate the commands.
+
+To remove all commands from a breakpoint, type @code{commands} and
+follow it immediately with @code{end}; that is, give no commands.
+
+With no argument, @code{commands} refers to the last breakpoint,
+watchpoint, or catchpoint set (not to the breakpoint most recently
+encountered).  If the most recent breakpoints were set with a single
+command, then the @code{commands} will apply to all the breakpoints
+set by that command.  This applies to breakpoints set by
+ at code{rbreak}, and also applies when a single @code{break} command
+creates multiple breakpoints (@pxref{Ambiguous Expressions,,Ambiguous
+Expressions}).
+ at end table
+
+Pressing @key{RET} as a means of repeating the last @value{GDBN} command is
+disabled within a @var{command-list}.
+
+You can use breakpoint commands to start your program up again.  Simply
+use the @code{continue} command, or @code{step}, or any other command
+that resumes execution.
+
+Any other commands in the command list, after a command that resumes
+execution, are ignored.  This is because any time you resume execution
+(even with a simple @code{next} or @code{step}), you may encounter
+another breakpoint---which could have its own command list, leading to
+ambiguities about which list to execute.
+
+ at kindex silent
+If the first command you specify in a command list is @code{silent}, the
+usual message about stopping at a breakpoint is not printed.  This may
+be desirable for breakpoints that are to print a specific message and
+then continue.  If none of the remaining commands print anything, you
+see no sign that the breakpoint was reached.  @code{silent} is
+meaningful only at the beginning of a breakpoint command list.
+
+The commands @code{echo}, @code{output}, and @code{printf} allow you to
+print precisely controlled output, and are often useful in silent
+breakpoints.  @xref{Output, ,Commands for Controlled Output}.
+
+For example, here is how you could use breakpoint commands to print the
+value of @code{x} at entry to @code{foo} whenever @code{x} is positive.
+
+ at smallexample
+break foo if x>0
+commands
+silent
+printf "x is %d\n",x
+cont
+end
+ at end smallexample
+
+One application for breakpoint commands is to compensate for one bug so
+you can test for another.  Put a breakpoint just after the erroneous line
+of code, give it a condition to detect the case in which something
+erroneous has been done, and give it commands to assign correct values
+to any variables that need them.  End with the @code{continue} command
+so that your program does not stop, and start with the @code{silent}
+command so that no output is produced.  Here is an example:
+
+ at smallexample
+break 403
+commands
+silent
+set x = y + 4
+cont
+end
+ at end smallexample
+
+ at node Dynamic Printf
+ at subsection Dynamic Printf
+
+ at cindex dynamic printf
+ at cindex dprintf
+The dynamic printf command @code{dprintf} combines a breakpoint with
+formatted printing of your program's data to give you the effect of
+inserting @code{printf} calls into your program on-the-fly, without
+having to recompile it.
+
+In its most basic form, the output goes to the GDB console.  However,
+you can set the variable @code{dprintf-style} for alternate handling.
+For instance, you can ask to format the output by calling your
+program's @code{printf} function.  This has the advantage that the
+characters go to the program's output device, so they can recorded in
+redirects to files and so forth.
+
+If you are doing remote debugging with a stub or agent, you can also
+ask to have the printf handled by the remote agent.  In addition to
+ensuring that the output goes to the remote program's device along
+with any other output the program might produce, you can also ask that
+the dprintf remain active even after disconnecting from the remote
+target.  Using the stub/agent is also more efficient, as it can do
+everything without needing to communicate with @value{GDBN}.
+
+ at table @code
+ at kindex dprintf
+ at item dprintf @var{location}, at var{template}, at var{expression}[, at var{expression}@dots{}]
+Whenever execution reaches @var{location}, print the values of one or
+more @var{expressions} under the control of the string @var{template}.
+To print several values, separate them with commas.
+
+ at item set dprintf-style @var{style}
+Set the dprintf output to be handled in one of several different
+styles enumerated below.  A change of style affects all existing
+dynamic printfs immediately.  (If you need individual control over the
+print commands, simply define normal breakpoints with
+explicitly-supplied command lists.)
+
+ at item gdb
+ at kindex dprintf-style gdb
+Handle the output using the @value{GDBN} @code{printf} command.
+
+ at item call
+ at kindex dprintf-style call
+Handle the output by calling a function in your program (normally
+ at code{printf}).
+
+ at item agent
+ at kindex dprintf-style agent
+Have the remote debugging agent (such as @code{gdbserver}) handle
+the output itself.  This style is only available for agents that
+support running commands on the target.
+
+ at item set dprintf-function @var{function}
+Set the function to call if the dprintf style is @code{call}.  By
+default its value is @code{printf}.  You may set it to any expression.
+that @value{GDBN} can evaluate to a function, as per the @code{call}
+command.
+
+ at item set dprintf-channel @var{channel}
+Set a ``channel'' for dprintf.  If set to a non-empty value,
+ at value{GDBN} will evaluate it as an expression and pass the result as
+a first argument to the @code{dprintf-function}, in the manner of
+ at code{fprintf} and similar functions.  Otherwise, the dprintf format
+string will be the first argument, in the manner of @code{printf}.
+
+As an example, if you wanted @code{dprintf} output to go to a logfile
+that is a standard I/O stream assigned to the variable @code{mylog},
+you could do the following:
+
+ at example
+(gdb) set dprintf-style call
+(gdb) set dprintf-function fprintf
+(gdb) set dprintf-channel mylog
+(gdb) dprintf 25,"at line 25, glob=%d\n",glob
+Dprintf 1 at 0x123456: file main.c, line 25.
+(gdb) info break
+1       dprintf        keep y   0x00123456 in main at main.c:25
+        call (void) fprintf (mylog,"at line 25, glob=%d\n",glob)
+        continue
+(gdb)
+ at end example
+
+Note that the @code{info break} displays the dynamic printf commands
+as normal breakpoint commands; you can thus easily see the effect of
+the variable settings.
+
+ at item set disconnected-dprintf on
+ at itemx set disconnected-dprintf off
+ at kindex set disconnected-dprintf
+Choose whether @code{dprintf} commands should continue to run if
+ at value{GDBN} has disconnected from the target.  This only applies
+if the @code{dprintf-style} is @code{agent}.
+
+ at item show disconnected-dprintf off
+ at kindex show disconnected-dprintf
+Show the current choice for disconnected @code{dprintf}.
+
+ at end table
+
+ at value{GDBN} does not check the validity of function and channel,
+relying on you to supply values that are meaningful for the contexts
+in which they are being used.  For instance, the function and channel
+may be the values of local variables, but if that is the case, then
+all enabled dynamic prints must be at locations within the scope of
+those locals.  If evaluation fails, @value{GDBN} will report an error.
+
+ at node Save Breakpoints
+ at subsection How to save breakpoints to a file
+
+To save breakpoint definitions to a file use the @w{@code{save
+breakpoints}} command.
+
+ at table @code
+ at kindex save breakpoints
+ at cindex save breakpoints to a file for future sessions
+ at item save breakpoints [@var{filename}]
+This command saves all current breakpoint definitions together with
+their commands and ignore counts, into a file @file{@var{filename}}
+suitable for use in a later debugging session.  This includes all
+types of breakpoints (breakpoints, watchpoints, catchpoints,
+tracepoints).  To read the saved breakpoint definitions, use the
+ at code{source} command (@pxref{Command Files}).  Note that watchpoints
+with expressions involving local variables may fail to be recreated
+because it may not be possible to access the context where the
+watchpoint is valid anymore.  Because the saved breakpoint definitions
+are simply a sequence of @value{GDBN} commands that recreate the
+breakpoints, you can edit the file in your favorite editing program,
+and remove the breakpoint definitions you're not interested in, or
+that can no longer be recreated.
+ at end table
+
+ at node Static Probe Points
+ at subsection Static Probe Points
+
+ at cindex static probe point, SystemTap
+ at value{GDBN} supports @dfn{SDT} probes in the code.  @acronym{SDT} stands
+for Statically Defined Tracing, and the probes are designed to have a tiny
+runtime code and data footprint, and no dynamic relocations.  They are
+usable from assembly, C and C at t{++} languages.  See
+ at uref{http://sourceware.org/systemtap/wiki/UserSpaceProbeImplementation}
+for a good reference on how the @acronym{SDT} probes are implemented.
+
+Currently, @code{SystemTap} (@uref{http://sourceware.org/systemtap/})
+ at acronym{SDT} probes are supported on ELF-compatible systems.  See
+ at uref{http://sourceware.org/systemtap/wiki/AddingUserSpaceProbingToApps}
+for more information on how to add @code{SystemTap} @acronym{SDT} probes
+in your applications.
+
+ at cindex semaphores on static probe points
+Some probes have an associated semaphore variable; for instance, this
+happens automatically if you defined your probe using a DTrace-style
+ at file{.d} file.  If your probe has a semaphore, @value{GDBN} will
+automatically enable it when you specify a breakpoint using the
+ at samp{-probe-stap} notation.  But, if you put a breakpoint at a probe's
+location by some other method (e.g., @code{break file:line}), then
+ at value{GDBN} will not automatically set the semaphore.
+
+You can examine the available static static probes using @code{info
+probes}, with optional arguments:
+
+ at table @code
+ at kindex info probes
+ at item info probes stap @r{[}@var{provider} @r{[}@var{name} @r{[}@var{objfile}@r{]}@r{]}@r{]}
+If given, @var{provider} is a regular expression used to match against provider
+names when selecting which probes to list.  If omitted, probes by all
+probes from all providers are listed.
+
+If given, @var{name} is a regular expression to match against probe names
+when selecting which probes to list.  If omitted, probe names are not
+considered when deciding whether to display them.
+
+If given, @var{objfile} is a regular expression used to select which
+object files (executable or shared libraries) to examine.  If not
+given, all object files are considered.
+
+ at item info probes all
+List the available static probes, from all types.
+ at end table
+
+ at vindex $_probe_arg at r{, convenience variable}
+A probe may specify up to twelve arguments.  These are available at the
+point at which the probe is defined---that is, when the current PC is
+at the probe's location.  The arguments are available using the
+convenience variables (@pxref{Convenience Vars})
+ at code{$_probe_arg0}@dots{}@code{$_probe_arg11}.  Each probe argument is
+an integer of the appropriate size; types are not preserved.  The
+convenience variable @code{$_probe_argc} holds the number of arguments
+at the current probe point.
+
+These variables are always available, but attempts to access them at
+any location other than a probe point will cause @value{GDBN} to give
+an error message.
+
+
+ at c  @ifclear BARETARGET
+ at node Error in Breakpoints
+ at subsection ``Cannot insert breakpoints''
+
+If you request too many active hardware-assisted breakpoints and
+watchpoints, you will see this error message:
+
+ at c FIXME: the precise wording of this message may change; the relevant
+ at c source change is not committed yet (Sep 3, 1999).
+ at smallexample
+Stopped; cannot insert breakpoints.
+You may have requested too many hardware breakpoints and watchpoints.
+ at end smallexample
+
+ at noindent
+This message is printed when you attempt to resume the program, since
+only then @value{GDBN} knows exactly how many hardware breakpoints and
+watchpoints it needs to insert.
+
+When this message is printed, you need to disable or remove some of the
+hardware-assisted breakpoints and watchpoints, and then continue.
+
+ at node Breakpoint-related Warnings
+ at subsection ``Breakpoint address adjusted...''
+ at cindex breakpoint address adjusted
+
+Some processor architectures place constraints on the addresses at
+which breakpoints may be placed.  For architectures thus constrained,
+ at value{GDBN} will attempt to adjust the breakpoint's address to comply
+with the constraints dictated by the architecture.
+
+One example of such an architecture is the Fujitsu FR-V.  The FR-V is
+a VLIW architecture in which a number of RISC-like instructions may be
+bundled together for parallel execution.  The FR-V architecture
+constrains the location of a breakpoint instruction within such a
+bundle to the instruction with the lowest address.  @value{GDBN}
+honors this constraint by adjusting a breakpoint's address to the
+first in the bundle.
+
+It is not uncommon for optimized code to have bundles which contain
+instructions from different source statements, thus it may happen that
+a breakpoint's address will be adjusted from one source statement to
+another.  Since this adjustment may significantly alter @value{GDBN}'s
+breakpoint related behavior from what the user expects, a warning is
+printed when the breakpoint is first set and also when the breakpoint
+is hit.
+
+A warning like the one below is printed when setting a breakpoint
+that's been subject to address adjustment:
+
+ at smallexample
+warning: Breakpoint address adjusted from 0x00010414 to 0x00010410.
+ at end smallexample
+
+Such warnings are printed both for user settable and @value{GDBN}'s
+internal breakpoints.  If you see one of these warnings, you should
+verify that a breakpoint set at the adjusted address will have the
+desired affect.  If not, the breakpoint in question may be removed and
+other breakpoints may be set which will have the desired behavior.
+E.g., it may be sufficient to place the breakpoint at a later
+instruction.  A conditional breakpoint may also be useful in some
+cases to prevent the breakpoint from triggering too often.
+
+ at value{GDBN} will also issue a warning when stopping at one of these
+adjusted breakpoints:
+
+ at smallexample
+warning: Breakpoint 1 address previously adjusted from 0x00010414
+to 0x00010410.
+ at end smallexample
+
+When this warning is encountered, it may be too late to take remedial
+action except in cases where the breakpoint is hit earlier or more
+frequently than expected.
+
+ at node Continuing and Stepping
+ at section Continuing and Stepping
+
+ at cindex stepping
+ at cindex continuing
+ at cindex resuming execution
+ at dfn{Continuing} means resuming program execution until your program
+completes normally.  In contrast, @dfn{stepping} means executing just
+one more ``step'' of your program, where ``step'' may mean either one
+line of source code, or one machine instruction (depending on what
+particular command you use).  Either when continuing or when stepping,
+your program may stop even sooner, due to a breakpoint or a signal.  (If
+it stops due to a signal, you may want to use @code{handle}, or use
+ at samp{signal 0} to resume execution.  @xref{Signals, ,Signals}.)
+
+ at table @code
+ at kindex continue
+ at kindex c @r{(@code{continue})}
+ at kindex fg @r{(resume foreground execution)}
+ at item continue @r{[}@var{ignore-count}@r{]}
+ at itemx c @r{[}@var{ignore-count}@r{]}
+ at itemx fg @r{[}@var{ignore-count}@r{]}
+Resume program execution, at the address where your program last stopped;
+any breakpoints set at that address are bypassed.  The optional argument
+ at var{ignore-count} allows you to specify a further number of times to
+ignore a breakpoint at this location; its effect is like that of
+ at code{ignore} (@pxref{Conditions, ,Break Conditions}).
+
+The argument @var{ignore-count} is meaningful only when your program
+stopped due to a breakpoint.  At other times, the argument to
+ at code{continue} is ignored.
+
+The synonyms @code{c} and @code{fg} (for @dfn{foreground}, as the
+debugged program is deemed to be the foreground program) are provided
+purely for convenience, and have exactly the same behavior as
+ at code{continue}.
+ at end table
+
+To resume execution at a different place, you can use @code{return}
+(@pxref{Returning, ,Returning from a Function}) to go back to the
+calling function; or @code{jump} (@pxref{Jumping, ,Continuing at a
+Different Address}) to go to an arbitrary location in your program.
+
+A typical technique for using stepping is to set a breakpoint
+(@pxref{Breakpoints, ,Breakpoints; Watchpoints; and Catchpoints}) at the
+beginning of the function or the section of your program where a problem
+is believed to lie, run your program until it stops at that breakpoint,
+and then step through the suspect area, examining the variables that are
+interesting, until you see the problem happen.
+
+ at table @code
+ at kindex step
+ at kindex s @r{(@code{step})}
+ at item step
+Continue running your program until control reaches a different source
+line, then stop it and return control to @value{GDBN}.  This command is
+abbreviated @code{s}.
+
+ at quotation
+ at c "without debugging information" is imprecise; actually "without line
+ at c numbers in the debugging information".  (gcc -g1 has debugging info but
+ at c not line numbers).  But it seems complex to try to make that
+ at c distinction here.
+ at emph{Warning:} If you use the @code{step} command while control is
+within a function that was compiled without debugging information,
+execution proceeds until control reaches a function that does have
+debugging information.  Likewise, it will not step into a function which
+is compiled without debugging information.  To step through functions
+without debugging information, use the @code{stepi} command, described
+below.
+ at end quotation
+
+The @code{step} command only stops at the first instruction of a source
+line.  This prevents the multiple stops that could otherwise occur in
+ at code{switch} statements, @code{for} loops, etc.  @code{step} continues
+to stop if a function that has debugging information is called within
+the line.  In other words, @code{step} @emph{steps inside} any functions
+called within the line.
+
+Also, the @code{step} command only enters a function if there is line
+number information for the function.  Otherwise it acts like the
+ at code{next} command.  This avoids problems when using @code{cc -gl}
+on @acronym{MIPS} machines.  Previously, @code{step} entered subroutines if there
+was any debugging information about the routine.
+
+ at item step @var{count}
+Continue running as in @code{step}, but do so @var{count} times.  If a
+breakpoint is reached, or a signal not related to stepping occurs before
+ at var{count} steps, stepping stops right away.
+
+ at kindex next
+ at kindex n @r{(@code{next})}
+ at item next @r{[}@var{count}@r{]}
+Continue to the next source line in the current (innermost) stack frame.
+This is similar to @code{step}, but function calls that appear within
+the line of code are executed without stopping.  Execution stops when
+control reaches a different line of code at the original stack level
+that was executing when you gave the @code{next} command.  This command
+is abbreviated @code{n}.
+
+An argument @var{count} is a repeat count, as for @code{step}.
+
+
+ at c  FIX ME!!  Do we delete this, or is there a way it fits in with
+ at c  the following paragraph?   ---  Vctoria
+ at c
+ at c  @code{next} within a function that lacks debugging information acts like
+ at c  @code{step}, but any function calls appearing within the code of the
+ at c  function are executed without stopping.
+
+The @code{next} command only stops at the first instruction of a
+source line.  This prevents multiple stops that could otherwise occur in
+ at code{switch} statements, @code{for} loops, etc.
+
+ at kindex set step-mode
+ at item set step-mode
+ at cindex functions without line info, and stepping
+ at cindex stepping into functions with no line info
+ at itemx set step-mode on
+The @code{set step-mode on} command causes the @code{step} command to
+stop at the first instruction of a function which contains no debug line
+information rather than stepping over it.
+
+This is useful in cases where you may be interested in inspecting the
+machine instructions of a function which has no symbolic info and do not
+want @value{GDBN} to automatically skip over this function.
+
+ at item set step-mode off
+Causes the @code{step} command to step over any functions which contains no
+debug information.  This is the default.
+
+ at item show step-mode
+Show whether @value{GDBN} will stop in or step over functions without
+source line debug information.
+
+ at kindex finish
+ at kindex fin @r{(@code{finish})}
+ at item finish
+Continue running until just after function in the selected stack frame
+returns.  Print the returned value (if any).  This command can be
+abbreviated as @code{fin}.
+
+Contrast this with the @code{return} command (@pxref{Returning,
+,Returning from a Function}).
+
+ at kindex until
+ at kindex u @r{(@code{until})}
+ at cindex run until specified location
+ at item until
+ at itemx u
+Continue running until a source line past the current line, in the
+current stack frame, is reached.  This command is used to avoid single
+stepping through a loop more than once.  It is like the @code{next}
+command, except that when @code{until} encounters a jump, it
+automatically continues execution until the program counter is greater
+than the address of the jump.
+
+This means that when you reach the end of a loop after single stepping
+though it, @code{until} makes your program continue execution until it
+exits the loop.  In contrast, a @code{next} command at the end of a loop
+simply steps back to the beginning of the loop, which forces you to step
+through the next iteration.
+
+ at code{until} always stops your program if it attempts to exit the current
+stack frame.
+
+ at code{until} may produce somewhat counterintuitive results if the order
+of machine code does not match the order of the source lines.  For
+example, in the following excerpt from a debugging session, the @code{f}
+(@code{frame}) command shows that execution is stopped at line
+ at code{206}; yet when we use @code{until}, we get to line @code{195}:
+
+ at smallexample
+(@value{GDBP}) f
+#0  main (argc=4, argv=0xf7fffae8) at m4.c:206
+206                 expand_input();
+(@value{GDBP}) until
+195             for ( ; argc > 0; NEXTARG) @{
+ at end smallexample
+
+This happened because, for execution efficiency, the compiler had
+generated code for the loop closure test at the end, rather than the
+start, of the loop---even though the test in a C @code{for}-loop is
+written before the body of the loop.  The @code{until} command appeared
+to step back to the beginning of the loop when it advanced to this
+expression; however, it has not really gone to an earlier
+statement---not in terms of the actual machine code.
+
+ at code{until} with no argument works by means of single
+instruction stepping, and hence is slower than @code{until} with an
+argument.
+
+ at item until @var{location}
+ at itemx u @var{location}
+Continue running your program until either the specified location is
+reached, or the current stack frame returns.  @var{location} is any of
+the forms described in @ref{Specify Location}.
+This form of the command uses temporary breakpoints, and
+hence is quicker than @code{until} without an argument.  The specified
+location is actually reached only if it is in the current frame.  This
+implies that @code{until} can be used to skip over recursive function
+invocations.  For instance in the code below, if the current location is
+line @code{96}, issuing @code{until 99} will execute the program up to
+line @code{99} in the same invocation of factorial, i.e., after the inner
+invocations have returned.
+
+ at smallexample
+94	int factorial (int value)
+95	@{
+96	    if (value > 1) @{
+97            value *= factorial (value - 1);
+98	    @}
+99	    return (value);
+100     @}
+ at end smallexample
+
+
+ at kindex advance @var{location}
+ at item advance @var{location}
+Continue running the program up to the given @var{location}.  An argument is
+required, which should be of one of the forms described in
+ at ref{Specify Location}.
+Execution will also stop upon exit from the current stack
+frame.  This command is similar to @code{until}, but @code{advance} will
+not skip over recursive function calls, and the target location doesn't
+have to be in the same frame as the current one.
+
+
+ at kindex stepi
+ at kindex si @r{(@code{stepi})}
+ at item stepi
+ at itemx stepi @var{arg}
+ at itemx si
+Execute one machine instruction, then stop and return to the debugger.
+
+It is often useful to do @samp{display/i $pc} when stepping by machine
+instructions.  This makes @value{GDBN} automatically display the next
+instruction to be executed, each time your program stops.  @xref{Auto
+Display,, Automatic Display}.
+
+An argument is a repeat count, as in @code{step}.
+
+ at need 750
+ at kindex nexti
+ at kindex ni @r{(@code{nexti})}
+ at item nexti
+ at itemx nexti @var{arg}
+ at itemx ni
+Execute one machine instruction, but if it is a function call,
+proceed until the function returns.
+
+An argument is a repeat count, as in @code{next}.
+ at end table
+
+ at node Skipping Over Functions and Files
+ at section Skipping Over Functions and Files
+ at cindex skipping over functions and files
+
+The program you are debugging may contain some functions which are
+uninteresting to debug.  The @code{skip} comand lets you tell @value{GDBN} to
+skip a function or all functions in a file when stepping.
+
+For example, consider the following C function:
+
+ at smallexample
+101     int func()
+102     @{
+103         foo(boring());
+104         bar(boring());
+105     @}
+ at end smallexample
+
+ at noindent
+Suppose you wish to step into the functions @code{foo} and @code{bar}, but you
+are not interested in stepping through @code{boring}.  If you run @code{step}
+at line 103, you'll enter @code{boring()}, but if you run @code{next}, you'll
+step over both @code{foo} and @code{boring}!
+
+One solution is to @code{step} into @code{boring} and use the @code{finish}
+command to immediately exit it.  But this can become tedious if @code{boring}
+is called from many places.
+
+A more flexible solution is to execute @kbd{skip boring}.  This instructs
+ at value{GDBN} never to step into @code{boring}.  Now when you execute
+ at code{step} at line 103, you'll step over @code{boring} and directly into
+ at code{foo}.
+
+You can also instruct @value{GDBN} to skip all functions in a file, with, for
+example, @code{skip file boring.c}.
+
+ at table @code
+ at kindex skip function
+ at item skip @r{[}@var{linespec}@r{]}
+ at itemx skip function @r{[}@var{linespec}@r{]}
+After running this command, the function named by @var{linespec} or the
+function containing the line named by @var{linespec} will be skipped over when
+stepping.  @xref{Specify Location}.
+
+If you do not specify @var{linespec}, the function you're currently debugging
+will be skipped.
+
+(If you have a function called @code{file} that you want to skip, use
+ at kbd{skip function file}.)
+
+ at kindex skip file
+ at item skip file @r{[}@var{filename}@r{]}
+After running this command, any function whose source lives in @var{filename}
+will be skipped over when stepping.
+
+If you do not specify @var{filename}, functions whose source lives in the file
+you're currently debugging will be skipped.
+ at end table
+
+Skips can be listed, deleted, disabled, and enabled, much like breakpoints.
+These are the commands for managing your list of skips:
+
+ at table @code
+ at kindex info skip
+ at item info skip @r{[}@var{range}@r{]}
+Print details about the specified skip(s).  If @var{range} is not specified,
+print a table with details about all functions and files marked for skipping.
+ at code{info skip} prints the following information about each skip:
+
+ at table @emph
+ at item Identifier
+A number identifying this skip.
+ at item Type
+The type of this skip, either @samp{function} or @samp{file}.
+ at item Enabled or Disabled
+Enabled skips are marked with @samp{y}.  Disabled skips are marked with @samp{n}.
+ at item Address
+For function skips, this column indicates the address in memory of the function
+being skipped.  If you've set a function skip on a function which has not yet
+been loaded, this field will contain @samp{<PENDING>}.  Once a shared library
+which has the function is loaded, @code{info skip} will show the function's
+address here.
+ at item What
+For file skips, this field contains the filename being skipped.  For functions
+skips, this field contains the function name and its line number in the file
+where it is defined.
+ at end table
+
+ at kindex skip delete
+ at item skip delete @r{[}@var{range}@r{]}
+Delete the specified skip(s).  If @var{range} is not specified, delete all
+skips.
+
+ at kindex skip enable
+ at item skip enable @r{[}@var{range}@r{]}
+Enable the specified skip(s).  If @var{range} is not specified, enable all
+skips.
+
+ at kindex skip disable
+ at item skip disable @r{[}@var{range}@r{]}
+Disable the specified skip(s).  If @var{range} is not specified, disable all
+skips.
+
+ at end table
+
+ at node Signals
+ at section Signals
+ at cindex signals
+
+A signal is an asynchronous event that can happen in a program.  The
+operating system defines the possible kinds of signals, and gives each
+kind a name and a number.  For example, in Unix @code{SIGINT} is the
+signal a program gets when you type an interrupt character (often @kbd{Ctrl-c});
+ at code{SIGSEGV} is the signal a program gets from referencing a place in
+memory far away from all the areas in use; @code{SIGALRM} occurs when
+the alarm clock timer goes off (which happens only if your program has
+requested an alarm).
+
+ at cindex fatal signals
+Some signals, including @code{SIGALRM}, are a normal part of the
+functioning of your program.  Others, such as @code{SIGSEGV}, indicate
+errors; these signals are @dfn{fatal} (they kill your program immediately) if the
+program has not specified in advance some other way to handle the signal.
+ at code{SIGINT} does not indicate an error in your program, but it is normally
+fatal so it can carry out the purpose of the interrupt: to kill the program.
+
+ at value{GDBN} has the ability to detect any occurrence of a signal in your
+program.  You can tell @value{GDBN} in advance what to do for each kind of
+signal.
+
+ at cindex handling signals
+Normally, @value{GDBN} is set up to let the non-erroneous signals like
+ at code{SIGALRM} be silently passed to your program
+(so as not to interfere with their role in the program's functioning)
+but to stop your program immediately whenever an error signal happens.
+You can change these settings with the @code{handle} command.
+
+ at table @code
+ at kindex info signals
+ at kindex info handle
+ at item info signals
+ at itemx info handle
+Print a table of all the kinds of signals and how @value{GDBN} has been told to
+handle each one.  You can use this to see the signal numbers of all
+the defined types of signals.
+
+ at item info signals @var{sig}
+Similar, but print information only about the specified signal number.
+
+ at code{info handle} is an alias for @code{info signals}.
+
+ at kindex handle
+ at item handle @var{signal} @r{[}@var{keywords}@dots{}@r{]}
+Change the way @value{GDBN} handles signal @var{signal}.  @var{signal}
+can be the number of a signal or its name (with or without the
+ at samp{SIG} at the beginning); a list of signal numbers of the form
+ at samp{@var{low}- at var{high}}; or the word @samp{all}, meaning all the
+known signals.  Optional arguments @var{keywords}, described below,
+say what change to make.
+ at end table
+
+ at c @group
+The keywords allowed by the @code{handle} command can be abbreviated.
+Their full names are:
+
+ at table @code
+ at item nostop
+ at value{GDBN} should not stop your program when this signal happens.  It may
+still print a message telling you that the signal has come in.
+
+ at item stop
+ at value{GDBN} should stop your program when this signal happens.  This implies
+the @code{print} keyword as well.
+
+ at item print
+ at value{GDBN} should print a message when this signal happens.
+
+ at item noprint
+ at value{GDBN} should not mention the occurrence of the signal at all.  This
+implies the @code{nostop} keyword as well.
+
+ at item pass
+ at itemx noignore
+ at value{GDBN} should allow your program to see this signal; your program
+can handle the signal, or else it may terminate if the signal is fatal
+and not handled.  @code{pass} and @code{noignore} are synonyms.
+
+ at item nopass
+ at itemx ignore
+ at value{GDBN} should not allow your program to see this signal.
+ at code{nopass} and @code{ignore} are synonyms.
+ at end table
+ at c @end group
+
+When a signal stops your program, the signal is not visible to the
+program until you
+continue.  Your program sees the signal then, if @code{pass} is in
+effect for the signal in question @emph{at that time}.  In other words,
+after @value{GDBN} reports a signal, you can use the @code{handle}
+command with @code{pass} or @code{nopass} to control whether your
+program sees that signal when you continue.
+
+The default is set to @code{nostop}, @code{noprint}, @code{pass} for
+non-erroneous signals such as @code{SIGALRM}, @code{SIGWINCH} and
+ at code{SIGCHLD}, and to @code{stop}, @code{print}, @code{pass} for the
+erroneous signals.
+
+You can also use the @code{signal} command to prevent your program from
+seeing a signal, or cause it to see a signal it normally would not see,
+or to give it any signal at any time.  For example, if your program stopped
+due to some sort of memory reference error, you might store correct
+values into the erroneous variables and continue, hoping to see more
+execution; but your program would probably terminate immediately as
+a result of the fatal signal once it saw the signal.  To prevent this,
+you can continue with @samp{signal 0}.  @xref{Signaling, ,Giving your
+Program a Signal}.
+
+ at cindex extra signal information
+ at anchor{extra signal information}
+
+On some targets, @value{GDBN} can inspect extra signal information
+associated with the intercepted signal, before it is actually
+delivered to the program being debugged.  This information is exported
+by the convenience variable @code{$_siginfo}, and consists of data
+that is passed by the kernel to the signal handler at the time of the
+receipt of a signal.  The data type of the information itself is
+target dependent.  You can see the data type using the @code{ptype
+$_siginfo} command.  On Unix systems, it typically corresponds to the
+standard @code{siginfo_t} type, as defined in the @file{signal.h}
+system header.
+
+Here's an example, on a @sc{gnu}/Linux system, printing the stray
+referenced address that raised a segmentation fault.
+
+ at smallexample
+ at group
+(@value{GDBP}) continue
+Program received signal SIGSEGV, Segmentation fault.
+0x0000000000400766 in main ()
+69        *(int *)p = 0;
+(@value{GDBP}) ptype $_siginfo
+type = struct @{
+    int si_signo;
+    int si_errno;
+    int si_code;
+    union @{
+        int _pad[28];
+        struct @{...@} _kill;
+        struct @{...@} _timer;
+        struct @{...@} _rt;
+        struct @{...@} _sigchld;
+        struct @{...@} _sigfault;
+        struct @{...@} _sigpoll;
+    @} _sifields;
+@}
+(@value{GDBP}) ptype $_siginfo._sifields._sigfault
+type = struct @{
+    void *si_addr;
+@}
+(@value{GDBP}) p $_siginfo._sifields._sigfault.si_addr
+$1 = (void *) 0x7ffff7ff7000
+ at end group
+ at end smallexample
+
+Depending on target support, @code{$_siginfo} may also be writable.
+
+ at node Thread Stops
+ at section Stopping and Starting Multi-thread Programs
+
+ at cindex stopped threads
+ at cindex threads, stopped
+
+ at cindex continuing threads
+ at cindex threads, continuing
+
+ at value{GDBN} supports debugging programs with multiple threads
+(@pxref{Threads,, Debugging Programs with Multiple Threads}).  There
+are two modes of controlling execution of your program within the
+debugger.  In the default mode, referred to as @dfn{all-stop mode},
+when any thread in your program stops (for example, at a breakpoint 
+or while being stepped), all other threads in the program are also stopped by 
+ at value{GDBN}.  On some targets, @value{GDBN} also supports 
+ at dfn{non-stop mode}, in which other threads can continue to run freely while
+you examine the stopped thread in the debugger.
+
+ at menu
+* All-Stop Mode::		All threads stop when GDB takes control
+* Non-Stop Mode::		Other threads continue to execute
+* Background Execution::	Running your program asynchronously
+* Thread-Specific Breakpoints::	Controlling breakpoints
+* Interrupted System Calls::	GDB may interfere with system calls
+* Observer Mode::               GDB does not alter program behavior
+ at end menu
+
+ at node All-Stop Mode
+ at subsection All-Stop Mode
+
+ at cindex all-stop mode
+
+In all-stop mode, whenever your program stops under @value{GDBN} for any reason,
+ at emph{all} threads of execution stop, not just the current thread.  This
+allows you to examine the overall state of the program, including
+switching between threads, without worrying that things may change
+underfoot.
+
+Conversely, whenever you restart the program, @emph{all} threads start
+executing.  @emph{This is true even when single-stepping} with commands
+like @code{step} or @code{next}.
+
+In particular, @value{GDBN} cannot single-step all threads in lockstep.
+Since thread scheduling is up to your debugging target's operating
+system (not controlled by @value{GDBN}), other threads may
+execute more than one statement while the current thread completes a
+single step.  Moreover, in general other threads stop in the middle of a
+statement, rather than at a clean statement boundary, when the program
+stops.
+
+You might even find your program stopped in another thread after
+continuing or even single-stepping.  This happens whenever some other
+thread runs into a breakpoint, a signal, or an exception before the
+first thread completes whatever you requested.
+
+ at cindex automatic thread selection
+ at cindex switching threads automatically
+ at cindex threads, automatic switching
+Whenever @value{GDBN} stops your program, due to a breakpoint or a
+signal, it automatically selects the thread where that breakpoint or
+signal happened.  @value{GDBN} alerts you to the context switch with a
+message such as @samp{[Switching to Thread @var{n}]} to identify the
+thread.  
+
+On some OSes, you can modify @value{GDBN}'s default behavior by
+locking the OS scheduler to allow only a single thread to run.
+
+ at table @code
+ at item set scheduler-locking @var{mode}
+ at cindex scheduler locking mode
+ at cindex lock scheduler
+Set the scheduler locking mode.  If it is @code{off}, then there is no
+locking and any thread may run at any time.  If @code{on}, then only the
+current thread may run when the inferior is resumed.  The @code{step}
+mode optimizes for single-stepping; it prevents other threads 
+from preempting the current thread while you are stepping, so that 
+the focus of debugging does not change unexpectedly.
+Other threads only rarely (or never) get a chance to run
+when you step.  They are more likely to run when you @samp{next} over a
+function call, and they are completely free to run when you use commands
+like @samp{continue}, @samp{until}, or @samp{finish}.  However, unless another
+thread hits a breakpoint during its timeslice, @value{GDBN} does not change
+the current thread away from the thread that you are debugging.
+
+ at item show scheduler-locking
+Display the current scheduler locking mode.
+ at end table
+
+ at cindex resume threads of multiple processes simultaneously
+By default, when you issue one of the execution commands such as
+ at code{continue}, @code{next} or @code{step}, @value{GDBN} allows only
+threads of the current inferior to run.  For example, if @value{GDBN}
+is attached to two inferiors, each with two threads, the
+ at code{continue} command resumes only the two threads of the current
+inferior.  This is useful, for example, when you debug a program that
+forks and you want to hold the parent stopped (so that, for instance,
+it doesn't run to exit), while you debug the child.  In other
+situations, you may not be interested in inspecting the current state
+of any of the processes @value{GDBN} is attached to, and you may want
+to resume them all until some breakpoint is hit.  In the latter case,
+you can instruct @value{GDBN} to allow all threads of all the
+inferiors to run with the @w{@code{set schedule-multiple}} command.
+
+ at table @code
+ at kindex set schedule-multiple
+ at item set schedule-multiple
+Set the mode for allowing threads of multiple processes to be resumed
+when an execution command is issued.  When @code{on}, all threads of
+all processes are allowed to run.  When @code{off}, only the threads
+of the current process are resumed.  The default is @code{off}.  The
+ at code{scheduler-locking} mode takes precedence when set to @code{on},
+or while you are stepping and set to @code{step}.
+
+ at item show schedule-multiple
+Display the current mode for resuming the execution of threads of
+multiple processes.
+ at end table
+
+ at node Non-Stop Mode
+ at subsection Non-Stop Mode
+
+ at cindex non-stop mode
+
+ at c This section is really only a place-holder, and needs to be expanded
+ at c with more details.  
+
+For some multi-threaded targets, @value{GDBN} supports an optional
+mode of operation in which you can examine stopped program threads in
+the debugger while other threads continue to execute freely.  This
+minimizes intrusion when debugging live systems, such as programs 
+where some threads have real-time constraints or must continue to 
+respond to external events.  This is referred to as @dfn{non-stop} mode.
+
+In non-stop mode, when a thread stops to report a debugging event,
+ at emph{only} that thread is stopped; @value{GDBN} does not stop other
+threads as well, in contrast to the all-stop mode behavior.  Additionally,
+execution commands such as @code{continue} and @code{step} apply by default
+only to the current thread in non-stop mode, rather than all threads as
+in all-stop mode.  This allows you to control threads explicitly in
+ways that are not possible in all-stop mode --- for example, stepping 
+one thread while allowing others to run freely, stepping
+one thread while holding all others stopped, or stepping several threads 
+independently and simultaneously.
+
+To enter non-stop mode, use this sequence of commands before you run
+or attach to your program:
+
+ at smallexample
+# Enable the async interface.  
+set target-async 1
+
+# If using the CLI, pagination breaks non-stop.
+set pagination off
+
+# Finally, turn it on!
+set non-stop on
+ at end smallexample
+
+You can use these commands to manipulate the non-stop mode setting:
+
+ at table @code
+ at kindex set non-stop
+ at item set non-stop on
+Enable selection of non-stop mode.
+ at item set non-stop off
+Disable selection of non-stop mode.
+ at kindex show non-stop
+ at item show non-stop
+Show the current non-stop enablement setting.
+ at end table
+
+Note these commands only reflect whether non-stop mode is enabled,
+not whether the currently-executing program is being run in non-stop mode.  
+In particular, the @code{set non-stop} preference is only consulted when
+ at value{GDBN} starts or connects to the target program, and it is generally 
+not possible to switch modes once debugging has started.  Furthermore,
+since not all targets support non-stop mode, even when you have enabled
+non-stop mode, @value{GDBN} may still fall back to all-stop operation by
+default.
+
+In non-stop mode, all execution commands apply only to the current thread
+by default.  That is, @code{continue} only continues one thread.  
+To continue all threads, issue @code{continue -a} or @code{c -a}.
+
+You can use @value{GDBN}'s background execution commands 
+(@pxref{Background Execution}) to run some threads in the background
+while you continue to examine or step others from @value{GDBN}.  
+The MI execution commands (@pxref{GDB/MI Program Execution}) are
+always executed asynchronously in non-stop mode.
+
+Suspending execution is done with the @code{interrupt} command when
+running in the background, or @kbd{Ctrl-c} during foreground execution.  
+In all-stop mode, this stops the whole process; 
+but in non-stop mode the interrupt applies only to the current thread.  
+To stop the whole program, use @code{interrupt -a}.
+
+Other execution commands do not currently support the @code{-a} option.
+
+In non-stop mode, when a thread stops, @value{GDBN} doesn't automatically make
+that thread current, as it does in all-stop mode.  This is because the
+thread stop notifications are asynchronous with respect to @value{GDBN}'s 
+command interpreter, and it would be confusing if @value{GDBN} unexpectedly
+changed to a different thread just as you entered a command to operate on the
+previously current thread.
+
+ at node Background Execution
+ at subsection Background Execution
+
+ at cindex foreground execution
+ at cindex background execution
+ at cindex asynchronous execution
+ at cindex execution, foreground, background and asynchronous
+
+ at value{GDBN}'s execution commands have two variants:  the normal
+foreground (synchronous) behavior, and a background
+(asynchronous) behavior.  In foreground execution, @value{GDBN} waits for 
+the program to report that some thread has stopped before prompting for
+another command.  In background execution, @value{GDBN} immediately gives
+a command prompt so that you can issue other commands while your program runs.
+
+You need to explicitly enable asynchronous mode before you can use
+background execution commands.  You can use these commands to
+manipulate the asynchronous mode setting:
+
+ at table @code
+ at kindex set target-async
+ at item set target-async on
+Enable asynchronous mode.
+ at item set target-async off
+Disable asynchronous mode.
+ at kindex show target-async
+ at item show target-async
+Show the current target-async setting.
+ at end table
+
+If the target doesn't support async mode, @value{GDBN} issues an error
+message if you attempt to use the background execution commands.
+
+To specify background execution, add a @code{&} to the command.  For example,
+the background form of the @code{continue} command is @code{continue&}, or
+just @code{c&}.  The execution commands that accept background execution
+are:
+
+ at table @code
+ at kindex run&
+ at item run
+ at xref{Starting, , Starting your Program}.
+
+ at item attach
+ at kindex attach&
+ at xref{Attach, , Debugging an Already-running Process}.
+
+ at item step
+ at kindex step&
+ at xref{Continuing and Stepping, step}.
+
+ at item stepi
+ at kindex stepi&
+ at xref{Continuing and Stepping, stepi}.
+
+ at item next
+ at kindex next&
+ at xref{Continuing and Stepping, next}.
+
+ at item nexti
+ at kindex nexti&
+ at xref{Continuing and Stepping, nexti}.
+
+ at item continue
+ at kindex continue&
+ at xref{Continuing and Stepping, continue}.
+
+ at item finish
+ at kindex finish&
+ at xref{Continuing and Stepping, finish}.
+
+ at item until
+ at kindex until&
+ at xref{Continuing and Stepping, until}.
+
+ at end table
+
+Background execution is especially useful in conjunction with non-stop
+mode for debugging programs with multiple threads; see @ref{Non-Stop Mode}.
+However, you can also use these commands in the normal all-stop mode with
+the restriction that you cannot issue another execution command until the
+previous one finishes.  Examples of commands that are valid in all-stop
+mode while the program is running include @code{help} and @code{info break}.
+
+You can interrupt your program while it is running in the background by
+using the @code{interrupt} command.
+
+ at table @code
+ at kindex interrupt
+ at item interrupt
+ at itemx interrupt -a
+
+Suspend execution of the running program.  In all-stop mode, 
+ at code{interrupt} stops the whole process, but in non-stop mode, it stops
+only the current thread.  To stop the whole program in non-stop mode, 
+use @code{interrupt -a}.
+ at end table
+
+ at node Thread-Specific Breakpoints
+ at subsection Thread-Specific Breakpoints
+
+When your program has multiple threads (@pxref{Threads,, Debugging
+Programs with Multiple Threads}), you can choose whether to set
+breakpoints on all threads, or on a particular thread.
+
+ at table @code
+ at cindex breakpoints and threads
+ at cindex thread breakpoints
+ at kindex break @dots{} thread @var{threadno}
+ at item break @var{linespec} thread @var{threadno}
+ at itemx break @var{linespec} thread @var{threadno} if @dots{}
+ at var{linespec} specifies source lines; there are several ways of
+writing them (@pxref{Specify Location}), but the effect is always to
+specify some source line.
+
+Use the qualifier @samp{thread @var{threadno}} with a breakpoint command
+to specify that you only want @value{GDBN} to stop the program when a
+particular thread reaches this breakpoint.  @var{threadno} is one of the
+numeric thread identifiers assigned by @value{GDBN}, shown in the first
+column of the @samp{info threads} display.
+
+If you do not specify @samp{thread @var{threadno}} when you set a
+breakpoint, the breakpoint applies to @emph{all} threads of your
+program.
+
+You can use the @code{thread} qualifier on conditional breakpoints as
+well; in this case, place @samp{thread @var{threadno}} before or
+after the breakpoint condition, like this:
+
+ at smallexample
+(@value{GDBP}) break frik.c:13 thread 28 if bartab > lim
+ at end smallexample
+
+ at end table
+
+ at node Interrupted System Calls
+ at subsection Interrupted System Calls 
+
+ at cindex thread breakpoints and system calls
+ at cindex system calls and thread breakpoints
+ at cindex premature return from system calls
+There is an unfortunate side effect when using @value{GDBN} to debug
+multi-threaded programs.  If one thread stops for a
+breakpoint, or for some other reason, and another thread is blocked in a
+system call, then the system call may return prematurely.  This is a
+consequence of the interaction between multiple threads and the signals
+that @value{GDBN} uses to implement breakpoints and other events that
+stop execution.
+
+To handle this problem, your program should check the return value of
+each system call and react appropriately.  This is good programming
+style anyways.
+
+For example, do not write code like this:
+
+ at smallexample
+  sleep (10);
+ at end smallexample
+
+The call to @code{sleep} will return early if a different thread stops
+at a breakpoint or for some other reason.
+
+Instead, write this:
+
+ at smallexample
+  int unslept = 10;
+  while (unslept > 0)
+    unslept = sleep (unslept);
+ at end smallexample
+
+A system call is allowed to return early, so the system is still
+conforming to its specification.  But @value{GDBN} does cause your
+multi-threaded program to behave differently than it would without
+ at value{GDBN}.
+
+Also, @value{GDBN} uses internal breakpoints in the thread library to
+monitor certain events such as thread creation and thread destruction.
+When such an event happens, a system call in another thread may return
+prematurely, even though your program does not appear to stop.
+
+ at node Observer Mode
+ at subsection Observer Mode
+
+If you want to build on non-stop mode and observe program behavior
+without any chance of disruption by @value{GDBN}, you can set
+variables to disable all of the debugger's attempts to modify state,
+whether by writing memory, inserting breakpoints, etc.  These operate
+at a low level, intercepting operations from all commands.
+
+When all of these are set to @code{off}, then @value{GDBN} is said to
+be @dfn{observer mode}.  As a convenience, the variable
+ at code{observer} can be set to disable these, plus enable non-stop
+mode.
+
+Note that @value{GDBN} will not prevent you from making nonsensical
+combinations of these settings. For instance, if you have enabled
+ at code{may-insert-breakpoints} but disabled @code{may-write-memory},
+then breakpoints that work by writing trap instructions into the code
+stream will still not be able to be placed.
+
+ at table @code
+
+ at kindex observer
+ at item set observer on
+ at itemx set observer off
+When set to @code{on}, this disables all the permission variables
+below (except for @code{insert-fast-tracepoints}), plus enables
+non-stop debugging.  Setting this to @code{off} switches back to
+normal debugging, though remaining in non-stop mode.
+
+ at item show observer
+Show whether observer mode is on or off.
+
+ at kindex may-write-registers
+ at item set may-write-registers on
+ at itemx set may-write-registers off
+This controls whether @value{GDBN} will attempt to alter the values of
+registers, such as with assignment expressions in @code{print}, or the
+ at code{jump} command.  It defaults to @code{on}.
+
+ at item show may-write-registers
+Show the current permission to write registers.
+
+ at kindex may-write-memory
+ at item set may-write-memory on
+ at itemx set may-write-memory off
+This controls whether @value{GDBN} will attempt to alter the contents
+of memory, such as with assignment expressions in @code{print}.  It
+defaults to @code{on}.
+
+ at item show may-write-memory
+Show the current permission to write memory.
+
+ at kindex may-insert-breakpoints
+ at item set may-insert-breakpoints on
+ at itemx set may-insert-breakpoints off
+This controls whether @value{GDBN} will attempt to insert breakpoints.
+This affects all breakpoints, including internal breakpoints defined
+by @value{GDBN}.  It defaults to @code{on}.
+
+ at item show may-insert-breakpoints
+Show the current permission to insert breakpoints.
+
+ at kindex may-insert-tracepoints
+ at item set may-insert-tracepoints on
+ at itemx set may-insert-tracepoints off
+This controls whether @value{GDBN} will attempt to insert (regular)
+tracepoints at the beginning of a tracing experiment.  It affects only
+non-fast tracepoints, fast tracepoints being under the control of
+ at code{may-insert-fast-tracepoints}.  It defaults to @code{on}.
+
+ at item show may-insert-tracepoints
+Show the current permission to insert tracepoints.
+
+ at kindex may-insert-fast-tracepoints
+ at item set may-insert-fast-tracepoints on
+ at itemx set may-insert-fast-tracepoints off
+This controls whether @value{GDBN} will attempt to insert fast
+tracepoints at the beginning of a tracing experiment.  It affects only
+fast tracepoints, regular (non-fast) tracepoints being under the
+control of @code{may-insert-tracepoints}.  It defaults to @code{on}.
+
+ at item show may-insert-fast-tracepoints
+Show the current permission to insert fast tracepoints.
+
+ at kindex may-interrupt
+ at item set may-interrupt on
+ at itemx set may-interrupt off
+This controls whether @value{GDBN} will attempt to interrupt or stop
+program execution.  When this variable is @code{off}, the
+ at code{interrupt} command will have no effect, nor will
+ at kbd{Ctrl-c}. It defaults to @code{on}.
+
+ at item show may-interrupt
+Show the current permission to interrupt or stop the program.
+
+ at end table
+
+ at node Reverse Execution
+ at chapter Running programs backward
+ at cindex reverse execution
+ at cindex running programs backward
+
+When you are debugging a program, it is not unusual to realize that
+you have gone too far, and some event of interest has already happened.
+If the target environment supports it, @value{GDBN} can allow you to
+``rewind'' the program by running it backward.
+
+A target environment that supports reverse execution should be able
+to ``undo'' the changes in machine state that have taken place as the
+program was executing normally.  Variables, registers etc.@: should
+revert to their previous values.  Obviously this requires a great
+deal of sophistication on the part of the target environment; not
+all target environments can support reverse execution.
+
+When a program is executed in reverse, the instructions that
+have most recently been executed are ``un-executed'', in reverse
+order.  The program counter runs backward, following the previous
+thread of execution in reverse.  As each instruction is ``un-executed'',
+the values of memory and/or registers that were changed by that
+instruction are reverted to their previous states.  After executing
+a piece of source code in reverse, all side effects of that code
+should be ``undone'', and all variables should be returned to their
+prior values at footnote{
+Note that some side effects are easier to undo than others.  For instance,
+memory and registers are relatively easy, but device I/O is hard.  Some
+targets may be able undo things like device I/O, and some may not.
+
+The contract between @value{GDBN} and the reverse executing target
+requires only that the target do something reasonable when
+ at value{GDBN} tells it to execute backwards, and then report the 
+results back to @value{GDBN}.  Whatever the target reports back to
+ at value{GDBN}, @value{GDBN} will report back to the user.  @value{GDBN}
+assumes that the memory and registers that the target reports are in a
+consistant state, but @value{GDBN} accepts whatever it is given.
+}.
+
+If you are debugging in a target environment that supports
+reverse execution, @value{GDBN} provides the following commands.
+
+ at table @code
+ at kindex reverse-continue
+ at kindex rc @r{(@code{reverse-continue})}
+ at item reverse-continue @r{[}@var{ignore-count}@r{]}
+ at itemx rc @r{[}@var{ignore-count}@r{]}
+Beginning at the point where your program last stopped, start executing
+in reverse.  Reverse execution will stop for breakpoints and synchronous
+exceptions (signals), just like normal execution.  Behavior of
+asynchronous signals depends on the target environment.
+
+ at kindex reverse-step
+ at kindex rs @r{(@code{step})}
+ at item reverse-step @r{[}@var{count}@r{]}
+Run the program backward until control reaches the start of a
+different source line; then stop it, and return control to @value{GDBN}.
+
+Like the @code{step} command, @code{reverse-step} will only stop
+at the beginning of a source line.  It ``un-executes'' the previously
+executed source line.  If the previous source line included calls to
+debuggable functions, @code{reverse-step} will step (backward) into
+the called function, stopping at the beginning of the @emph{last}
+statement in the called function (typically a return statement).
+
+Also, as with the @code{step} command, if non-debuggable functions are
+called, @code{reverse-step} will run thru them backward without stopping.
+
+ at kindex reverse-stepi
+ at kindex rsi @r{(@code{reverse-stepi})}
+ at item reverse-stepi @r{[}@var{count}@r{]}
+Reverse-execute one machine instruction.  Note that the instruction
+to be reverse-executed is @emph{not} the one pointed to by the program
+counter, but the instruction executed prior to that one.  For instance,
+if the last instruction was a jump, @code{reverse-stepi} will take you
+back from the destination of the jump to the jump instruction itself.
+
+ at kindex reverse-next
+ at kindex rn @r{(@code{reverse-next})}
+ at item reverse-next @r{[}@var{count}@r{]}
+Run backward to the beginning of the previous line executed in
+the current (innermost) stack frame.  If the line contains function
+calls, they will be ``un-executed'' without stopping.  Starting from
+the first line of a function, @code{reverse-next} will take you back
+to the caller of that function, @emph{before} the function was called,
+just as the normal @code{next} command would take you from the last 
+line of a function back to its return to its caller
+ at footnote{Unless the code is too heavily optimized.}.
+
+ at kindex reverse-nexti
+ at kindex rni @r{(@code{reverse-nexti})}
+ at item reverse-nexti @r{[}@var{count}@r{]}
+Like @code{nexti}, @code{reverse-nexti} executes a single instruction
+in reverse, except that called functions are ``un-executed'' atomically.
+That is, if the previously executed instruction was a return from
+another function, @code{reverse-nexti} will continue to execute
+in reverse until the call to that function (from the current stack
+frame) is reached.
+
+ at kindex reverse-finish
+ at item reverse-finish
+Just as the @code{finish} command takes you to the point where the
+current function returns, @code{reverse-finish} takes you to the point
+where it was called.  Instead of ending up at the end of the current
+function invocation, you end up at the beginning.
+
+ at kindex set exec-direction
+ at item set exec-direction
+Set the direction of target execution.
+ at item set exec-direction reverse
+ at cindex execute forward or backward in time
+ at value{GDBN} will perform all execution commands in reverse, until the
+exec-direction mode is changed to ``forward''.  Affected commands include
+ at code{step, stepi, next, nexti, continue, and finish}.  The @code{return}
+command cannot be used in reverse mode.
+ at item set exec-direction forward
+ at value{GDBN} will perform all execution commands in the normal fashion.
+This is the default.
+ at end table
+
+
+ at node Process Record and Replay
+ at chapter Recording Inferior's Execution and Replaying It
+ at cindex process record and replay
+ at cindex recording inferior's execution and replaying it
+
+On some platforms, @value{GDBN} provides a special @dfn{process record
+and replay} target that can record a log of the process execution, and
+replay it later with both forward and reverse execution commands.
+
+ at cindex replay mode
+When this target is in use, if the execution log includes the record
+for the next instruction, @value{GDBN} will debug in @dfn{replay
+mode}.  In the replay mode, the inferior does not really execute code
+instructions.  Instead, all the events that normally happen during
+code execution are taken from the execution log.  While code is not
+really executed in replay mode, the values of registers (including the
+program counter register) and the memory of the inferior are still
+changed as they normally would.  Their contents are taken from the
+execution log.
+
+ at cindex record mode
+If the record for the next instruction is not in the execution log,
+ at value{GDBN} will debug in @dfn{record mode}.  In this mode, the
+inferior executes normally, and @value{GDBN} records the execution log
+for future replay.
+
+The process record and replay target supports reverse execution
+(@pxref{Reverse Execution}), even if the platform on which the
+inferior runs does not.  However, the reverse execution is limited in
+this case by the range of the instructions recorded in the execution
+log.  In other words, reverse execution on platforms that don't
+support it directly can only be done in the replay mode.
+
+When debugging in the reverse direction, @value{GDBN} will work in
+replay mode as long as the execution log includes the record for the
+previous instruction; otherwise, it will work in record mode, if the
+platform supports reverse execution, or stop if not.
+
+For architecture environments that support process record and replay,
+ at value{GDBN} provides the following commands:
+
+ at table @code
+ at kindex target record
+ at kindex record
+ at kindex rec
+ at item target record
+This command starts the process record and replay target.  The process
+record and replay target can only debug a process that is already
+running.  Therefore, you need first to start the process with the
+ at kbd{run} or @kbd{start} commands, and then start the recording with
+the @kbd{target record} command.
+
+Both @code{record} and @code{rec} are aliases of @code{target record}.
+
+ at cindex displaced stepping, and process record and replay
+Displaced stepping (@pxref{Maintenance Commands,, displaced stepping})
+will be automatically disabled when process record and replay target
+is started.  That's because the process record and replay target
+doesn't support displaced stepping.
+
+ at cindex non-stop mode, and process record and replay
+ at cindex asynchronous execution, and process record and replay
+If the inferior is in the non-stop mode (@pxref{Non-Stop Mode}) or in
+the asynchronous execution mode (@pxref{Background Execution}), the
+process record and replay target cannot be started because it doesn't
+support these two modes.
+
+ at kindex record stop
+ at kindex rec s
+ at item record stop
+Stop the process record and replay target.  When process record and
+replay target stops, the entire execution log will be deleted and the
+inferior will either be terminated, or will remain in its final state.
+
+When you stop the process record and replay target in record mode (at
+the end of the execution log), the inferior will be stopped at the
+next instruction that would have been recorded.  In other words, if
+you record for a while and then stop recording, the inferior process
+will be left in the same state as if the recording never happened.
+
+On the other hand, if the process record and replay target is stopped
+while in replay mode (that is, not at the end of the execution log,
+but at some earlier point), the inferior process will become ``live''
+at that earlier state, and it will then be possible to continue the
+usual ``live'' debugging of the process from that state.
+
+When the inferior process exits, or @value{GDBN} detaches from it,
+process record and replay target will automatically stop itself.
+
+ at kindex record save
+ at item record save @var{filename}
+Save the execution log to a file @file{@var{filename}}.
+Default filename is @file{gdb_record. at var{process_id}}, where
+ at var{process_id} is the process ID of the inferior.
+
+ at kindex record restore
+ at item record restore @var{filename}
+Restore the execution log from a file @file{@var{filename}}.
+File must have been created with @code{record save}.
+
+ at kindex set record insn-number-max
+ at item set record insn-number-max @var{limit}
+Set the limit of instructions to be recorded.  Default value is 200000.
+
+If @var{limit} is a positive number, then @value{GDBN} will start
+deleting instructions from the log once the number of the record
+instructions becomes greater than @var{limit}.  For every new recorded
+instruction, @value{GDBN} will delete the earliest recorded
+instruction to keep the number of recorded instructions at the limit.
+(Since deleting recorded instructions loses information, @value{GDBN}
+lets you control what happens when the limit is reached, by means of
+the @code{stop-at-limit} option, described below.)
+
+If @var{limit} is zero, @value{GDBN} will never delete recorded
+instructions from the execution log.  The number of recorded
+instructions is unlimited in this case.
+
+ at kindex show record insn-number-max
+ at item show record insn-number-max
+Show the limit of instructions to be recorded.
+
+ at kindex set record stop-at-limit
+ at item set record stop-at-limit
+Control the behavior when the number of recorded instructions reaches
+the limit.  If ON (the default), @value{GDBN} will stop when the limit
+is reached for the first time and ask you whether you want to stop the
+inferior or continue running it and recording the execution log.  If
+you decide to continue recording, each new recorded instruction will
+cause the oldest one to be deleted.
+
+If this option is OFF, @value{GDBN} will automatically delete the
+oldest record to make room for each new one, without asking.
+
+ at kindex show record stop-at-limit
+ at item show record stop-at-limit
+Show the current setting of @code{stop-at-limit}.
+
+ at kindex set record memory-query
+ at item set record memory-query
+Control the behavior when @value{GDBN} is unable to record memory
+changes caused by an instruction.  If ON, @value{GDBN} will query
+whether to stop the inferior in that case.
+
+If this option is OFF (the default), @value{GDBN} will automatically
+ignore the effect of such instructions on memory.  Later, when
+ at value{GDBN} replays this execution log, it will mark the log of this
+instruction as not accessible, and it will not affect the replay
+results.
+
+ at kindex show record memory-query
+ at item show record memory-query
+Show the current setting of @code{memory-query}.
+
+ at kindex info record
+ at item info record
+Show various statistics about the state of process record and its
+in-memory execution log buffer, including:
+
+ at itemize @bullet
+ at item
+Whether in record mode or replay mode.
+ at item
+Lowest recorded instruction number (counting from when the current execution log started recording instructions).
+ at item
+Highest recorded instruction number.
+ at item
+Current instruction about to be replayed (if in replay mode).
+ at item
+Number of instructions contained in the execution log.
+ at item
+Maximum number of instructions that may be contained in the execution log.
+ at end itemize
+
+ at kindex record delete
+ at kindex rec del
+ at item record delete
+When record target runs in replay mode (``in the past''), delete the
+subsequent execution log and begin to record a new execution log starting
+from the current address.  This means you will abandon the previously
+recorded ``future'' and begin recording a new ``future''.
+ at end table
+
+
+ at node Stack
+ at chapter Examining the Stack
+
+When your program has stopped, the first thing you need to know is where it
+stopped and how it got there.
+
+ at cindex call stack
+Each time your program performs a function call, information about the call
+is generated.
+That information includes the location of the call in your program,
+the arguments of the call,
+and the local variables of the function being called.
+The information is saved in a block of data called a @dfn{stack frame}.
+The stack frames are allocated in a region of memory called the @dfn{call
+stack}.
+
+When your program stops, the @value{GDBN} commands for examining the
+stack allow you to see all of this information.
+
+ at cindex selected frame
+One of the stack frames is @dfn{selected} by @value{GDBN} and many
+ at value{GDBN} commands refer implicitly to the selected frame.  In
+particular, whenever you ask @value{GDBN} for the value of a variable in
+your program, the value is found in the selected frame.  There are
+special @value{GDBN} commands to select whichever frame you are
+interested in.  @xref{Selection, ,Selecting a Frame}.
+
+When your program stops, @value{GDBN} automatically selects the
+currently executing frame and describes it briefly, similar to the
+ at code{frame} command (@pxref{Frame Info, ,Information about a Frame}).
+
+ at menu
+* Frames::                      Stack frames
+* Backtrace::                   Backtraces
+* Selection::                   Selecting a frame
+* Frame Info::                  Information on a frame
+
+ at end menu
+
+ at node Frames
+ at section Stack Frames
+
+ at cindex frame, definition
+ at cindex stack frame
+The call stack is divided up into contiguous pieces called @dfn{stack
+frames}, or @dfn{frames} for short; each frame is the data associated
+with one call to one function.  The frame contains the arguments given
+to the function, the function's local variables, and the address at
+which the function is executing.
+
+ at cindex initial frame
+ at cindex outermost frame
+ at cindex innermost frame
+When your program is started, the stack has only one frame, that of the
+function @code{main}.  This is called the @dfn{initial} frame or the
+ at dfn{outermost} frame.  Each time a function is called, a new frame is
+made.  Each time a function returns, the frame for that function invocation
+is eliminated.  If a function is recursive, there can be many frames for
+the same function.  The frame for the function in which execution is
+actually occurring is called the @dfn{innermost} frame.  This is the most
+recently created of all the stack frames that still exist.
+
+ at cindex frame pointer
+Inside your program, stack frames are identified by their addresses.  A
+stack frame consists of many bytes, each of which has its own address; each
+kind of computer has a convention for choosing one byte whose
+address serves as the address of the frame.  Usually this address is kept
+in a register called the @dfn{frame pointer register}
+(@pxref{Registers, $fp}) while execution is going on in that frame.
+
+ at cindex frame number
+ at value{GDBN} assigns numbers to all existing stack frames, starting with
+zero for the innermost frame, one for the frame that called it,
+and so on upward.  These numbers do not really exist in your program;
+they are assigned by @value{GDBN} to give you a way of designating stack
+frames in @value{GDBN} commands.
+
+ at c The -fomit-frame-pointer below perennially causes hbox overflow
+ at c underflow problems.
+ at cindex frameless execution
+Some compilers provide a way to compile functions so that they operate
+without stack frames.  (For example, the @value{NGCC} option
+ at smallexample
+ at samp{-fomit-frame-pointer}
+ at end smallexample
+generates functions without a frame.)
+This is occasionally done with heavily used library functions to save
+the frame setup time.  @value{GDBN} has limited facilities for dealing
+with these function invocations.  If the innermost function invocation
+has no stack frame, @value{GDBN} nevertheless regards it as though
+it had a separate frame, which is numbered zero as usual, allowing
+correct tracing of the function call chain.  However, @value{GDBN} has
+no provision for frameless functions elsewhere in the stack.
+
+ at table @code
+ at kindex frame at r{, command}
+ at cindex current stack frame
+ at item frame @var{args}
+The @code{frame} command allows you to move from one stack frame to another,
+and to print the stack frame you select.  @var{args} may be either the
+address of the frame or the stack frame number.  Without an argument,
+ at code{frame} prints the current stack frame.
+
+ at kindex select-frame
+ at cindex selecting frame silently
+ at item select-frame
+The @code{select-frame} command allows you to move from one stack frame
+to another without printing the frame.  This is the silent version of
+ at code{frame}.
+ at end table
+
+ at node Backtrace
+ at section Backtraces
+
+ at cindex traceback
+ at cindex call stack traces
+A backtrace is a summary of how your program got where it is.  It shows one
+line per frame, for many frames, starting with the currently executing
+frame (frame zero), followed by its caller (frame one), and on up the
+stack.
+
+ at table @code
+ at kindex backtrace
+ at kindex bt @r{(@code{backtrace})}
+ at item backtrace
+ at itemx bt
+Print a backtrace of the entire stack: one line per frame for all
+frames in the stack.
+
+You can stop the backtrace at any time by typing the system interrupt
+character, normally @kbd{Ctrl-c}.
+
+ at item backtrace @var{n}
+ at itemx bt @var{n}
+Similar, but print only the innermost @var{n} frames.
+
+ at item backtrace - at var{n}
+ at itemx bt - at var{n}
+Similar, but print only the outermost @var{n} frames.
+
+ at item backtrace full
+ at itemx bt full
+ at itemx bt full @var{n}
+ at itemx bt full - at var{n}
+Print the values of the local variables also.  @var{n} specifies the
+number of frames to print, as described above.
+ at end table
+
+ at kindex where
+ at kindex info stack
+The names @code{where} and @code{info stack} (abbreviated @code{info s})
+are additional aliases for @code{backtrace}.
+
+ at cindex multiple threads, backtrace
+In a multi-threaded program, @value{GDBN} by default shows the
+backtrace only for the current thread.  To display the backtrace for
+several or all of the threads, use the command @code{thread apply}
+(@pxref{Threads, thread apply}).  For example, if you type @kbd{thread
+apply all backtrace}, @value{GDBN} will display the backtrace for all
+the threads; this is handy when you debug a core dump of a
+multi-threaded program.
+
+Each line in the backtrace shows the frame number and the function name.
+The program counter value is also shown---unless you use @code{set
+print address off}.  The backtrace also shows the source file name and
+line number, as well as the arguments to the function.  The program
+counter value is omitted if it is at the beginning of the code for that
+line number.
+
+Here is an example of a backtrace.  It was made with the command
+ at samp{bt 3}, so it shows the innermost three frames.
+
+ at smallexample
+ at group
+#0  m4_traceon (obs=0x24eb0, argc=1, argv=0x2b8c8)
+    at builtin.c:993
+#1  0x6e38 in expand_macro (sym=0x2b600, data=...) at macro.c:242
+#2  0x6840 in expand_token (obs=0x0, t=177664, td=0xf7fffb08)
+    at macro.c:71
+(More stack frames follow...)
+ at end group
+ at end smallexample
+
+ at noindent
+The display for frame zero does not begin with a program counter
+value, indicating that your program has stopped at the beginning of the
+code for line @code{993} of @code{builtin.c}.
+
+ at noindent
+The value of parameter @code{data} in frame 1 has been replaced by
+ at code{@dots{}}.  By default, @value{GDBN} prints the value of a parameter
+only if it is a scalar (integer, pointer, enumeration, etc).  See command
+ at kbd{set print frame-arguments} in @ref{Print Settings} for more details
+on how to configure the way function parameter values are printed.
+
+ at cindex optimized out, in backtrace
+ at cindex function call arguments, optimized out
+If your program was compiled with optimizations, some compilers will
+optimize away arguments passed to functions if those arguments are
+never used after the call.  Such optimizations generate code that
+passes arguments through registers, but doesn't store those arguments
+in the stack frame.  @value{GDBN} has no way of displaying such
+arguments in stack frames other than the innermost one.  Here's what
+such a backtrace might look like:
+
+ at smallexample
+ at group
+#0  m4_traceon (obs=0x24eb0, argc=1, argv=0x2b8c8)
+    at builtin.c:993
+#1  0x6e38 in expand_macro (sym=<optimized out>) at macro.c:242
+#2  0x6840 in expand_token (obs=0x0, t=<optimized out>, td=0xf7fffb08)
+    at macro.c:71
+(More stack frames follow...)
+ at end group
+ at end smallexample
+
+ at noindent
+The values of arguments that were not saved in their stack frames are
+shown as @samp{<optimized out>}.
+
+If you need to display the values of such optimized-out arguments,
+either deduce that from other variables whose values depend on the one
+you are interested in, or recompile without optimizations.
+
+ at cindex backtrace beyond @code{main} function
+ at cindex program entry point
+ at cindex startup code, and backtrace
+Most programs have a standard user entry point---a place where system
+libraries and startup code transition into user code.  For C this is
+ at code{main}@footnote{
+Note that embedded programs (the so-called ``free-standing''
+environment) are not required to have a @code{main} function as the
+entry point.  They could even have multiple entry points.}.
+When @value{GDBN} finds the entry function in a backtrace
+it will terminate the backtrace, to avoid tracing into highly
+system-specific (and generally uninteresting) code.
+
+If you need to examine the startup code, or limit the number of levels
+in a backtrace, you can change this behavior:
+
+ at table @code
+ at item set backtrace past-main
+ at itemx set backtrace past-main on
+ at kindex set backtrace
+Backtraces will continue past the user entry point.
+
+ at item set backtrace past-main off
+Backtraces will stop when they encounter the user entry point.  This is the
+default.
+
+ at item show backtrace past-main
+ at kindex show backtrace
+Display the current user entry point backtrace policy.
+
+ at item set backtrace past-entry
+ at itemx set backtrace past-entry on
+Backtraces will continue past the internal entry point of an application.
+This entry point is encoded by the linker when the application is built,
+and is likely before the user entry point @code{main} (or equivalent) is called.
+
+ at item set backtrace past-entry off
+Backtraces will stop when they encounter the internal entry point of an
+application.  This is the default.
+
+ at item show backtrace past-entry
+Display the current internal entry point backtrace policy.
+
+ at item set backtrace limit @var{n}
+ at itemx set backtrace limit 0
+ at cindex backtrace limit
+Limit the backtrace to @var{n} levels.  A value of zero means
+unlimited.
+
+ at item show backtrace limit
+Display the current limit on backtrace levels.
+ at end table
+
+ at node Selection
+ at section Selecting a Frame
+
+Most commands for examining the stack and other data in your program work on
+whichever stack frame is selected at the moment.  Here are the commands for
+selecting a stack frame; all of them finish by printing a brief description
+of the stack frame just selected.
+
+ at table @code
+ at kindex frame at r{, selecting}
+ at kindex f @r{(@code{frame})}
+ at item frame @var{n}
+ at itemx f @var{n}
+Select frame number @var{n}.  Recall that frame zero is the innermost
+(currently executing) frame, frame one is the frame that called the
+innermost one, and so on.  The highest-numbered frame is the one for
+ at code{main}.
+
+ at item frame @var{addr}
+ at itemx f @var{addr}
+Select the frame at address @var{addr}.  This is useful mainly if the
+chaining of stack frames has been damaged by a bug, making it
+impossible for @value{GDBN} to assign numbers properly to all frames.  In
+addition, this can be useful when your program has multiple stacks and
+switches between them.
+
+On the SPARC architecture, @code{frame} needs two addresses to
+select an arbitrary frame: a frame pointer and a stack pointer.
+
+On the @acronym{MIPS} and Alpha architecture, it needs two addresses: a stack
+pointer and a program counter.
+
+On the 29k architecture, it needs three addresses: a register stack
+pointer, a program counter, and a memory stack pointer.
+
+ at kindex up
+ at item up @var{n}
+Move @var{n} frames up the stack.  For positive numbers @var{n}, this
+advances toward the outermost frame, to higher frame numbers, to frames
+that have existed longer.  @var{n} defaults to one.
+
+ at kindex down
+ at kindex do @r{(@code{down})}
+ at item down @var{n}
+Move @var{n} frames down the stack.  For positive numbers @var{n}, this
+advances toward the innermost frame, to lower frame numbers, to frames
+that were created more recently.  @var{n} defaults to one.  You may
+abbreviate @code{down} as @code{do}.
+ at end table
+
+All of these commands end by printing two lines of output describing the
+frame.  The first line shows the frame number, the function name, the
+arguments, and the source file and line number of execution in that
+frame.  The second line shows the text of that source line.
+
+ at need 1000
+For example:
+
+ at smallexample
+ at group
+(@value{GDBP}) up
+#1  0x22f0 in main (argc=1, argv=0xf7fffbf4, env=0xf7fffbfc)
+    at env.c:10
+10              read_input_file (argv[i]);
+ at end group
+ at end smallexample
+
+After such a printout, the @code{list} command with no arguments
+prints ten lines centered on the point of execution in the frame.
+You can also edit the program at the point of execution with your favorite
+editing program by typing @code{edit}.
+ at xref{List, ,Printing Source Lines},
+for details.
+
+ at table @code
+ at kindex down-silently
+ at kindex up-silently
+ at item up-silently @var{n}
+ at itemx down-silently @var{n}
+These two commands are variants of @code{up} and @code{down},
+respectively; they differ in that they do their work silently, without
+causing display of the new frame.  They are intended primarily for use
+in @value{GDBN} command scripts, where the output might be unnecessary and
+distracting.
+ at end table
+
+ at node Frame Info
+ at section Information About a Frame
+
+There are several other commands to print information about the selected
+stack frame.
+
+ at table @code
+ at item frame
+ at itemx f
+When used without any argument, this command does not change which
+frame is selected, but prints a brief description of the currently
+selected stack frame.  It can be abbreviated @code{f}.  With an
+argument, this command is used to select a stack frame.
+ at xref{Selection, ,Selecting a Frame}.
+
+ at kindex info frame
+ at kindex info f @r{(@code{info frame})}
+ at item info frame
+ at itemx info f
+This command prints a verbose description of the selected stack frame,
+including:
+
+ at itemize @bullet
+ at item
+the address of the frame
+ at item
+the address of the next frame down (called by this frame)
+ at item
+the address of the next frame up (caller of this frame)
+ at item
+the language in which the source code corresponding to this frame is written
+ at item
+the address of the frame's arguments
+ at item
+the address of the frame's local variables
+ at item
+the program counter saved in it (the address of execution in the caller frame)
+ at item
+which registers were saved in the frame
+ at end itemize
+
+ at noindent The verbose description is useful when
+something has gone wrong that has made the stack format fail to fit
+the usual conventions.
+
+ at item info frame @var{addr}
+ at itemx info f @var{addr}
+Print a verbose description of the frame at address @var{addr}, without
+selecting that frame.  The selected frame remains unchanged by this
+command.  This requires the same kind of address (more than one for some
+architectures) that you specify in the @code{frame} command.
+ at xref{Selection, ,Selecting a Frame}.
+
+ at kindex info args
+ at item info args
+Print the arguments of the selected frame, each on a separate line.
+
+ at item info locals
+ at kindex info locals
+Print the local variables of the selected frame, each on a separate
+line.  These are all variables (declared either static or automatic)
+accessible at the point of execution of the selected frame.
+
+ at end table
+
+
+ at node Source
+ at chapter Examining Source Files
+
+ at value{GDBN} can print parts of your program's source, since the debugging
+information recorded in the program tells @value{GDBN} what source files were
+used to build it.  When your program stops, @value{GDBN} spontaneously prints
+the line where it stopped.  Likewise, when you select a stack frame
+(@pxref{Selection, ,Selecting a Frame}), @value{GDBN} prints the line where
+execution in that frame has stopped.  You can print other portions of
+source files by explicit command.
+
+If you use @value{GDBN} through its @sc{gnu} Emacs interface, you may
+prefer to use Emacs facilities to view source; see @ref{Emacs, ,Using
+ at value{GDBN} under @sc{gnu} Emacs}.
+
+ at menu
+* List::                        Printing source lines
+* Specify Location::            How to specify code locations
+* Edit::                        Editing source files
+* Search::                      Searching source files
+* Source Path::                 Specifying source directories
+* Machine Code::                Source and machine code
+ at end menu
+
+ at node List
+ at section Printing Source Lines
+
+ at kindex list
+ at kindex l @r{(@code{list})}
+To print lines from a source file, use the @code{list} command
+(abbreviated @code{l}).  By default, ten lines are printed.
+There are several ways to specify what part of the file you want to
+print; see @ref{Specify Location}, for the full list.
+
+Here are the forms of the @code{list} command most commonly used:
+
+ at table @code
+ at item list @var{linenum}
+Print lines centered around line number @var{linenum} in the
+current source file.
+
+ at item list @var{function}
+Print lines centered around the beginning of function
+ at var{function}.
+
+ at item list
+Print more lines.  If the last lines printed were printed with a
+ at code{list} command, this prints lines following the last lines
+printed; however, if the last line printed was a solitary line printed
+as part of displaying a stack frame (@pxref{Stack, ,Examining the
+Stack}), this prints lines centered around that line.
+
+ at item list -
+Print lines just before the lines last printed.
+ at end table
+
+ at cindex @code{list}, how many lines to display
+By default, @value{GDBN} prints ten source lines with any of these forms of
+the @code{list} command.  You can change this using @code{set listsize}:
+
+ at table @code
+ at kindex set listsize
+ at item set listsize @var{count}
+Make the @code{list} command display @var{count} source lines (unless
+the @code{list} argument explicitly specifies some other number).
+
+ at kindex show listsize
+ at item show listsize
+Display the number of lines that @code{list} prints.
+ at end table
+
+Repeating a @code{list} command with @key{RET} discards the argument,
+so it is equivalent to typing just @code{list}.  This is more useful
+than listing the same lines again.  An exception is made for an
+argument of @samp{-}; that argument is preserved in repetition so that
+each repetition moves up in the source file.
+
+In general, the @code{list} command expects you to supply zero, one or two
+ at dfn{linespecs}.  Linespecs specify source lines; there are several ways
+of writing them (@pxref{Specify Location}), but the effect is always
+to specify some source line.
+
+Here is a complete description of the possible arguments for @code{list}:
+
+ at table @code
+ at item list @var{linespec}
+Print lines centered around the line specified by @var{linespec}.
+
+ at item list @var{first}, at var{last}
+Print lines from @var{first} to @var{last}.  Both arguments are
+linespecs.  When a @code{list} command has two linespecs, and the
+source file of the second linespec is omitted, this refers to
+the same source file as the first linespec.
+
+ at item list , at var{last}
+Print lines ending with @var{last}.
+
+ at item list @var{first},
+Print lines starting with @var{first}.
+
+ at item list +
+Print lines just after the lines last printed.
+
+ at item list -
+Print lines just before the lines last printed.
+
+ at item list
+As described in the preceding table.
+ at end table
+
+ at node Specify Location
+ at section Specifying a Location
+ at cindex specifying location
+ at cindex linespec
+
+Several @value{GDBN} commands accept arguments that specify a location
+of your program's code.  Since @value{GDBN} is a source-level
+debugger, a location usually specifies some line in the source code;
+for that reason, locations are also known as @dfn{linespecs}.
+
+Here are all the different ways of specifying a code location that
+ at value{GDBN} understands:
+
+ at table @code
+ at item @var{linenum}
+Specifies the line number @var{linenum} of the current source file.
+
+ at item - at var{offset}
+ at itemx + at var{offset}
+Specifies the line @var{offset} lines before or after the @dfn{current
+line}.  For the @code{list} command, the current line is the last one
+printed; for the breakpoint commands, this is the line at which
+execution stopped in the currently selected @dfn{stack frame}
+(@pxref{Frames, ,Frames}, for a description of stack frames.)  When
+used as the second of the two linespecs in a @code{list} command,
+this specifies the line @var{offset} lines up or down from the first
+linespec.
+
+ at item @var{filename}:@var{linenum}
+Specifies the line @var{linenum} in the source file @var{filename}.
+If @var{filename} is a relative file name, then it will match any
+source file name with the same trailing components.  For example, if
+ at var{filename} is @samp{gcc/expr.c}, then it will match source file
+name of @file{/build/trunk/gcc/expr.c}, but not
+ at file{/build/trunk/libcpp/expr.c} or @file{/build/trunk/gcc/x-expr.c}.
+
+ at item @var{function}
+Specifies the line that begins the body of the function @var{function}.
+For example, in C, this is the line with the open brace.
+
+ at item @var{function}:@var{label}
+Specifies the line where @var{label} appears in @var{function}.
+
+ at item @var{filename}:@var{function}
+Specifies the line that begins the body of the function @var{function}
+in the file @var{filename}.  You only need the file name with a
+function name to avoid ambiguity when there are identically named
+functions in different source files.
+
+ at item @var{label}
+Specifies the line at which the label named @var{label} appears.
+ at value{GDBN} searches for the label in the function corresponding to
+the currently selected stack frame.  If there is no current selected
+stack frame (for instance, if the inferior is not running), then
+ at value{GDBN} will not search for a label.
+
+ at item *@var{address}
+Specifies the program address @var{address}.  For line-oriented
+commands, such as @code{list} and @code{edit}, this specifies a source
+line that contains @var{address}.  For @code{break} and other
+breakpoint oriented commands, this can be used to set breakpoints in
+parts of your program which do not have debugging information or
+source files.
+
+Here @var{address} may be any expression valid in the current working
+language (@pxref{Languages, working language}) that specifies a code
+address.  In addition, as a convenience, @value{GDBN} extends the
+semantics of expressions used in locations to cover the situations
+that frequently happen during debugging.  Here are the various forms
+of @var{address}:
+
+ at table @code
+ at item @var{expression}
+Any expression valid in the current working language.
+
+ at item @var{funcaddr}
+An address of a function or procedure derived from its name.  In C,
+C at t{++}, Java, Objective-C, Fortran, minimal, and assembly, this is
+simply the function's name @var{function} (and actually a special case
+of a valid expression).  In Pascal and Modula-2, this is
+ at code{&@var{function}}.  In Ada, this is @code{@var{function}'Address}
+(although the Pascal form also works).
+
+This form specifies the address of the function's first instruction,
+before the stack frame and arguments have been set up.
+
+ at item '@var{filename}'::@var{funcaddr}
+Like @var{funcaddr} above, but also specifies the name of the source
+file explicitly.  This is useful if the name of the function does not
+specify the function unambiguously, e.g., if there are several
+functions with identical names in different source files.
+ at end table
+
+ at cindex breakpoint at static probe point
+ at item -pstap|-probe-stap @r{[}@var{objfile}:@r{[}@var{provider}:@r{]}@r{]}@var{name}
+The @sc{gnu}/Linux tool @code{SystemTap} provides a way for
+applications to embed static probes.  @xref{Static Probe Points}, for more
+information on finding and using static probes.  This form of linespec
+specifies the location of such a static probe.
+
+If @var{objfile} is given, only probes coming from that shared library
+or executable matching @var{objfile} as a regular expression are considered.
+If @var{provider} is given, then only probes from that provider are considered.
+If several probes match the spec, @value{GDBN} will insert a breakpoint at
+each one of those probes.
+
+ at end table
+
+
+ at node Edit
+ at section Editing Source Files
+ at cindex editing source files
+
+ at kindex edit
+ at kindex e @r{(@code{edit})}
+To edit the lines in a source file, use the @code{edit} command.
+The editing program of your choice
+is invoked with the current line set to
+the active line in the program.
+Alternatively, there are several ways to specify what part of the file you
+want to print if you want to see other parts of the program:
+
+ at table @code
+ at item edit @var{location}
+Edit the source file specified by @code{location}.  Editing starts at
+that @var{location}, e.g., at the specified source line of the
+specified file.  @xref{Specify Location}, for all the possible forms
+of the @var{location} argument; here are the forms of the @code{edit}
+command most commonly used:
+
+ at table @code
+ at item edit @var{number}
+Edit the current source file with @var{number} as the active line number.
+
+ at item edit @var{function}
+Edit the file containing @var{function} at the beginning of its definition.
+ at end table
+
+ at end table
+
+ at subsection Choosing your Editor
+You can customize @value{GDBN} to use any editor you want
+ at footnote{
+The only restriction is that your editor (say @code{ex}), recognizes the
+following command-line syntax:
+ at smallexample
+ex + at var{number} file
+ at end smallexample
+The optional numeric value + at var{number} specifies the number of the line in
+the file where to start editing.}.
+By default, it is @file{@value{EDITOR}}, but you can change this
+by setting the environment variable @code{EDITOR} before using
+ at value{GDBN}.  For example, to configure @value{GDBN} to use the
+ at code{vi} editor, you could use these commands with the @code{sh} shell:
+ at smallexample
+EDITOR=/usr/bin/vi
+export EDITOR
+gdb @dots{}
+ at end smallexample
+or in the @code{csh} shell,
+ at smallexample
+setenv EDITOR /usr/bin/vi
+gdb @dots{}
+ at end smallexample
+
+ at node Search
+ at section Searching Source Files
+ at cindex searching source files
+
+There are two commands for searching through the current source file for a
+regular expression.
+
+ at table @code
+ at kindex search
+ at kindex forward-search
+ at item forward-search @var{regexp}
+ at itemx search @var{regexp}
+The command @samp{forward-search @var{regexp}} checks each line,
+starting with the one following the last line listed, for a match for
+ at var{regexp}.  It lists the line that is found.  You can use the
+synonym @samp{search @var{regexp}} or abbreviate the command name as
+ at code{fo}.
+
+ at kindex reverse-search
+ at item reverse-search @var{regexp}
+The command @samp{reverse-search @var{regexp}} checks each line, starting
+with the one before the last line listed and going backward, for a match
+for @var{regexp}.  It lists the line that is found.  You can abbreviate
+this command as @code{rev}.
+ at end table
+
+ at node Source Path
+ at section Specifying Source Directories
+
+ at cindex source path
+ at cindex directories for source files
+Executable programs sometimes do not record the directories of the source
+files from which they were compiled, just the names.  Even when they do,
+the directories could be moved between the compilation and your debugging
+session.  @value{GDBN} has a list of directories to search for source files;
+this is called the @dfn{source path}.  Each time @value{GDBN} wants a source file,
+it tries all the directories in the list, in the order they are present
+in the list, until it finds a file with the desired name.
+
+For example, suppose an executable references the file
+ at file{/usr/src/foo-1.0/lib/foo.c}, and our source path is
+ at file{/mnt/cross}.  The file is first looked up literally; if this
+fails, @file{/mnt/cross/usr/src/foo-1.0/lib/foo.c} is tried; if this
+fails, @file{/mnt/cross/foo.c} is opened; if this fails, an error
+message is printed.  @value{GDBN} does not look up the parts of the
+source file name, such as @file{/mnt/cross/src/foo-1.0/lib/foo.c}.
+Likewise, the subdirectories of the source path are not searched: if
+the source path is @file{/mnt/cross}, and the binary refers to
+ at file{foo.c}, @value{GDBN} would not find it under
+ at file{/mnt/cross/usr/src/foo-1.0/lib}.
+
+Plain file names, relative file names with leading directories, file
+names containing dots, etc.@: are all treated as described above; for
+instance, if the source path is @file{/mnt/cross}, and the source file
+is recorded as @file{../lib/foo.c}, @value{GDBN} would first try
+ at file{../lib/foo.c}, then @file{/mnt/cross/../lib/foo.c}, and after
+that--- at file{/mnt/cross/foo.c}.
+
+Note that the executable search path is @emph{not} used to locate the
+source files.
+
+Whenever you reset or rearrange the source path, @value{GDBN} clears out
+any information it has cached about where source files are found and where
+each line is in the file.
+
+ at kindex directory
+ at kindex dir
+When you start @value{GDBN}, its source path includes only @samp{cdir}
+and @samp{cwd}, in that order.
+To add other directories, use the @code{directory} command.
+
+The search path is used to find both program source files and @value{GDBN}
+script files (read using the @samp{-command} option and @samp{source} command).
+
+In addition to the source path, @value{GDBN} provides a set of commands
+that manage a list of source path substitution rules.  A @dfn{substitution
+rule} specifies how to rewrite source directories stored in the program's
+debug information in case the sources were moved to a different
+directory between compilation and debugging.  A rule is made of
+two strings, the first specifying what needs to be rewritten in
+the path, and the second specifying how it should be rewritten.
+In @ref{set substitute-path}, we name these two parts @var{from} and
+ at var{to} respectively.  @value{GDBN} does a simple string replacement
+of @var{from} with @var{to} at the start of the directory part of the
+source file name, and uses that result instead of the original file
+name to look up the sources.
+
+Using the previous example, suppose the @file{foo-1.0} tree has been
+moved from @file{/usr/src} to @file{/mnt/cross}, then you can tell
+ at value{GDBN} to replace @file{/usr/src} in all source path names with
+ at file{/mnt/cross}.  The first lookup will then be
+ at file{/mnt/cross/foo-1.0/lib/foo.c} in place of the original location
+of @file{/usr/src/foo-1.0/lib/foo.c}.  To define a source path
+substitution rule, use the @code{set substitute-path} command
+(@pxref{set substitute-path}).
+
+To avoid unexpected substitution results, a rule is applied only if the
+ at var{from} part of the directory name ends at a directory separator.
+For instance, a rule substituting  @file{/usr/source} into
+ at file{/mnt/cross} will be applied to @file{/usr/source/foo-1.0} but
+not to @file{/usr/sourceware/foo-2.0}.  And because the substitution
+is applied only at the beginning of the directory name, this rule will
+not be applied to @file{/root/usr/source/baz.c} either.
+
+In many cases, you can achieve the same result using the @code{directory}
+command.  However, @code{set substitute-path} can be more efficient in
+the case where the sources are organized in a complex tree with multiple
+subdirectories.  With the @code{directory} command, you need to add each
+subdirectory of your project.  If you moved the entire tree while
+preserving its internal organization, then @code{set substitute-path}
+allows you to direct the debugger to all the sources with one single
+command.
+
+ at code{set substitute-path} is also more than just a shortcut command.
+The source path is only used if the file at the original location no
+longer exists.  On the other hand, @code{set substitute-path} modifies
+the debugger behavior to look at the rewritten location instead.  So, if
+for any reason a source file that is not relevant to your executable is
+located at the original location, a substitution rule is the only
+method available to point @value{GDBN} at the new location.
+
+ at cindex @samp{--with-relocated-sources}
+ at cindex default source path substitution
+You can configure a default source path substitution rule by
+configuring @value{GDBN} with the
+ at samp{--with-relocated-sources=@var{dir}} option.  The @var{dir}
+should be the name of a directory under @value{GDBN}'s configured
+prefix (set with @samp{--prefix} or @samp{--exec-prefix}), and
+directory names in debug information under @var{dir} will be adjusted
+automatically if the installed @value{GDBN} is moved to a new
+location.  This is useful if @value{GDBN}, libraries or executables
+with debug information and corresponding source code are being moved
+together.
+
+ at table @code
+ at item directory @var{dirname} @dots{}
+ at item dir @var{dirname} @dots{}
+Add directory @var{dirname} to the front of the source path.  Several
+directory names may be given to this command, separated by @samp{:}
+(@samp{;} on MS-DOS and MS-Windows, where @samp{:} usually appears as
+part of absolute file names) or
+whitespace.  You may specify a directory that is already in the source
+path; this moves it forward, so @value{GDBN} searches it sooner.
+
+ at kindex cdir
+ at kindex cwd
+ at vindex $cdir at r{, convenience variable}
+ at vindex $cwd at r{, convenience variable}
+ at cindex compilation directory
+ at cindex current directory
+ at cindex working directory
+ at cindex directory, current
+ at cindex directory, compilation
+You can use the string @samp{$cdir} to refer to the compilation
+directory (if one is recorded), and @samp{$cwd} to refer to the current
+working directory.  @samp{$cwd} is not the same as @samp{.}---the former
+tracks the current working directory as it changes during your @value{GDBN}
+session, while the latter is immediately expanded to the current
+directory at the time you add an entry to the source path.
+
+ at item directory
+Reset the source path to its default value (@samp{$cdir:$cwd} on Unix systems).  This requires confirmation.
+
+ at c RET-repeat for @code{directory} is explicitly disabled, but since
+ at c repeating it would be a no-op we do not say that.  (thanks to RMS)
+
+ at item set directories @var{path-list}
+ at kindex set directories
+Set the source path to @var{path-list}.
+ at samp{$cdir:$cwd} are added if missing.
+
+ at item show directories
+ at kindex show directories
+Print the source path: show which directories it contains.
+
+ at anchor{set substitute-path}
+ at item set substitute-path @var{from} @var{to}
+ at kindex set substitute-path
+Define a source path substitution rule, and add it at the end of the
+current list of existing substitution rules.  If a rule with the same
+ at var{from} was already defined, then the old rule is also deleted.
+
+For example, if the file @file{/foo/bar/baz.c} was moved to
+ at file{/mnt/cross/baz.c}, then the command
+
+ at smallexample
+(@value{GDBP}) set substitute-path /usr/src /mnt/cross
+ at end smallexample
+
+ at noindent
+will tell @value{GDBN} to replace @samp{/usr/src} with
+ at samp{/mnt/cross}, which will allow @value{GDBN} to find the file
+ at file{baz.c} even though it was moved.
+
+In the case when more than one substitution rule have been defined,
+the rules are evaluated one by one in the order where they have been
+defined.  The first one matching, if any, is selected to perform
+the substitution.
+
+For instance, if we had entered the following commands:
+
+ at smallexample
+(@value{GDBP}) set substitute-path /usr/src/include /mnt/include
+(@value{GDBP}) set substitute-path /usr/src /mnt/src
+ at end smallexample
+
+ at noindent
+ at value{GDBN} would then rewrite @file{/usr/src/include/defs.h} into
+ at file{/mnt/include/defs.h} by using the first rule.  However, it would
+use the second rule to rewrite @file{/usr/src/lib/foo.c} into
+ at file{/mnt/src/lib/foo.c}.
+
+
+ at item unset substitute-path [path]
+ at kindex unset substitute-path
+If a path is specified, search the current list of substitution rules
+for a rule that would rewrite that path.  Delete that rule if found.
+A warning is emitted by the debugger if no rule could be found.
+
+If no path is specified, then all substitution rules are deleted.
+
+ at item show substitute-path [path]
+ at kindex show substitute-path
+If a path is specified, then print the source path substitution rule
+which would rewrite that path, if any.
+
+If no path is specified, then print all existing source path substitution
+rules.
+
+ at end table
+
+If your source path is cluttered with directories that are no longer of
+interest, @value{GDBN} may sometimes cause confusion by finding the wrong
+versions of source.  You can correct the situation as follows:
+
+ at enumerate
+ at item
+Use @code{directory} with no argument to reset the source path to its default value.
+
+ at item
+Use @code{directory} with suitable arguments to reinstall the
+directories you want in the source path.  You can add all the
+directories in one command.
+ at end enumerate
+
+ at node Machine Code
+ at section Source and Machine Code
+ at cindex source line and its code address
+
+You can use the command @code{info line} to map source lines to program
+addresses (and vice versa), and the command @code{disassemble} to display
+a range of addresses as machine instructions.  You can use the command
+ at code{set disassemble-next-line} to set whether to disassemble next
+source line when execution stops.  When run under @sc{gnu} Emacs
+mode, the @code{info line} command causes the arrow to point to the
+line specified.  Also, @code{info line} prints addresses in symbolic form as
+well as hex.
+
+ at table @code
+ at kindex info line
+ at item info line @var{linespec}
+Print the starting and ending addresses of the compiled code for
+source line @var{linespec}.  You can specify source lines in any of
+the ways documented in @ref{Specify Location}.
+ at end table
+
+For example, we can use @code{info line} to discover the location of
+the object code for the first line of function
+ at code{m4_changequote}:
+
+ at c FIXME: I think this example should also show the addresses in
+ at c symbolic form, as they usually would be displayed.
+ at smallexample
+(@value{GDBP}) info line m4_changequote
+Line 895 of "builtin.c" starts at pc 0x634c and ends at 0x6350.
+ at end smallexample
+
+ at noindent
+ at cindex code address and its source line
+We can also inquire (using @code{*@var{addr}} as the form for
+ at var{linespec}) what source line covers a particular address:
+ at smallexample
+(@value{GDBP}) info line *0x63ff
+Line 926 of "builtin.c" starts at pc 0x63e4 and ends at 0x6404.
+ at end smallexample
+
+ at cindex @code{$_} and @code{info line}
+ at cindex @code{x} command, default address
+ at kindex x at r{(examine), and} info line
+After @code{info line}, the default address for the @code{x} command
+is changed to the starting address of the line, so that @samp{x/i} is
+sufficient to begin examining the machine code (@pxref{Memory,
+,Examining Memory}).  Also, this address is saved as the value of the
+convenience variable @code{$_} (@pxref{Convenience Vars, ,Convenience
+Variables}).
+
+ at table @code
+ at kindex disassemble
+ at cindex assembly instructions
+ at cindex instructions, assembly
+ at cindex machine instructions
+ at cindex listing machine instructions
+ at item disassemble
+ at itemx disassemble /m
+ at itemx disassemble /r
+This specialized command dumps a range of memory as machine
+instructions.  It can also print mixed source+disassembly by specifying
+the @code{/m} modifier and print the raw instructions in hex as well as
+in symbolic form by specifying the @code{/r}.
+The default memory range is the function surrounding the
+program counter of the selected frame.  A single argument to this
+command is a program counter value; @value{GDBN} dumps the function
+surrounding this value.  When two arguments are given, they should
+be separated by a comma, possibly surrounded by whitespace.  The
+arguments specify a range of addresses to dump, in one of two forms:
+
+ at table @code
+ at item @var{start}, at var{end}
+the addresses from @var{start} (inclusive) to @var{end} (exclusive)
+ at item @var{start},+ at var{length}
+the addresses from @var{start} (inclusive) to
+ at code{@var{start}+ at var{length}} (exclusive).
+ at end table
+
+ at noindent
+When 2 arguments are specified, the name of the function is also
+printed (since there could be several functions in the given range).
+
+The argument(s) can be any expression yielding a numeric value, such as
+ at samp{0x32c4}, @samp{&main+10} or @samp{$pc - 8}.
+
+If the range of memory being disassembled contains current program counter,
+the instruction at that location is shown with a @code{=>} marker.
+ at end table
+
+The following example shows the disassembly of a range of addresses of
+HP PA-RISC 2.0 code:
+
+ at smallexample
+(@value{GDBP}) disas 0x32c4, 0x32e4
+Dump of assembler code from 0x32c4 to 0x32e4:
+   0x32c4 <main+204>:      addil 0,dp
+   0x32c8 <main+208>:      ldw 0x22c(sr0,r1),r26
+   0x32cc <main+212>:      ldil 0x3000,r31
+   0x32d0 <main+216>:      ble 0x3f8(sr4,r31)
+   0x32d4 <main+220>:      ldo 0(r31),rp
+   0x32d8 <main+224>:      addil -0x800,dp
+   0x32dc <main+228>:      ldo 0x588(r1),r26
+   0x32e0 <main+232>:      ldil 0x3000,r31
+End of assembler dump.
+ at end smallexample
+
+Here is an example showing mixed source+assembly for Intel x86, when the
+program is stopped just after function prologue:
+
+ at smallexample
+(@value{GDBP}) disas /m main
+Dump of assembler code for function main:
+5       @{
+   0x08048330 <+0>:    push   %ebp
+   0x08048331 <+1>:    mov    %esp,%ebp
+   0x08048333 <+3>:    sub    $0x8,%esp
+   0x08048336 <+6>:    and    $0xfffffff0,%esp
+   0x08048339 <+9>:    sub    $0x10,%esp
+
+6         printf ("Hello.\n");
+=> 0x0804833c <+12>:   movl   $0x8048440,(%esp)
+   0x08048343 <+19>:   call   0x8048284 <puts@@plt>
+
+7         return 0;
+8       @}
+   0x08048348 <+24>:   mov    $0x0,%eax
+   0x0804834d <+29>:   leave
+   0x0804834e <+30>:   ret
+
+End of assembler dump.
+ at end smallexample
+
+Here is another example showing raw instructions in hex for AMD x86-64,
+
+ at smallexample
+(gdb) disas /r 0x400281,+10
+Dump of assembler code from 0x400281 to 0x40028b:
+   0x0000000000400281:  38 36  cmp    %dh,(%rsi)
+   0x0000000000400283:  2d 36 34 2e 73 sub    $0x732e3436,%eax
+   0x0000000000400288:  6f     outsl  %ds:(%rsi),(%dx)
+   0x0000000000400289:  2e 32 00       xor    %cs:(%rax),%al
+End of assembler dump.
+ at end smallexample
+
+Some architectures have more than one commonly-used set of instruction
+mnemonics or other syntax.
+
+For programs that were dynamically linked and use shared libraries,
+instructions that call functions or branch to locations in the shared
+libraries might show a seemingly bogus location---it's actually a
+location of the relocation table.  On some architectures, @value{GDBN}
+might be able to resolve these to actual function names.
+
+ at table @code
+ at kindex set disassembly-flavor
+ at cindex Intel disassembly flavor
+ at cindex AT&T disassembly flavor
+ at item set disassembly-flavor @var{instruction-set}
+Select the instruction set to use when disassembling the
+program via the @code{disassemble} or @code{x/i} commands.
+
+Currently this command is only defined for the Intel x86 family.  You
+can set @var{instruction-set} to either @code{intel} or @code{att}.
+The default is @code{att}, the AT&T flavor used by default by Unix
+assemblers for x86-based targets.
+
+ at kindex show disassembly-flavor
+ at item show disassembly-flavor
+Show the current setting of the disassembly flavor.
+ at end table
+
+ at table @code
+ at kindex set disassemble-next-line
+ at kindex show disassemble-next-line
+ at item set disassemble-next-line
+ at itemx show disassemble-next-line
+Control whether or not @value{GDBN} will disassemble the next source
+line or instruction when execution stops.  If ON, @value{GDBN} will
+display disassembly of the next source line when execution of the
+program being debugged stops.  This is @emph{in addition} to
+displaying the source line itself, which @value{GDBN} always does if
+possible.  If the next source line cannot be displayed for some reason
+(e.g., if @value{GDBN} cannot find the source file, or there's no line
+info in the debug info), @value{GDBN} will display disassembly of the
+next @emph{instruction} instead of showing the next source line.  If
+AUTO, @value{GDBN} will display disassembly of next instruction only
+if the source line cannot be displayed.  This setting causes
+ at value{GDBN} to display some feedback when you step through a function
+with no line info or whose source file is unavailable.  The default is
+OFF, which means never display the disassembly of the next line or
+instruction.
+ at end table
+
+
+ at node Data
+ at chapter Examining Data
+
+ at cindex printing data
+ at cindex examining data
+ at kindex print
+ at kindex inspect
+ at c "inspect" is not quite a synonym if you are using Epoch, which we do not
+ at c document because it is nonstandard...  Under Epoch it displays in a
+ at c different window or something like that.
+The usual way to examine data in your program is with the @code{print}
+command (abbreviated @code{p}), or its synonym @code{inspect}.  It
+evaluates and prints the value of an expression of the language your
+program is written in (@pxref{Languages, ,Using @value{GDBN} with
+Different Languages}).  It may also print the expression using a
+Python-based pretty-printer (@pxref{Pretty Printing}).
+
+ at table @code
+ at item print @var{expr}
+ at itemx print /@var{f} @var{expr}
+ at var{expr} is an expression (in the source language).  By default the
+value of @var{expr} is printed in a format appropriate to its data type;
+you can choose a different format by specifying @samp{/@var{f}}, where
+ at var{f} is a letter specifying the format; see @ref{Output Formats,,Output
+Formats}.
+
+ at item print
+ at itemx print /@var{f}
+ at cindex reprint the last value
+If you omit @var{expr}, @value{GDBN} displays the last value again (from the
+ at dfn{value history}; @pxref{Value History, ,Value History}).  This allows you to
+conveniently inspect the same value in an alternative format.
+ at end table
+
+A more low-level way of examining data is with the @code{x} command.
+It examines data in memory at a specified address and prints it in a
+specified format.  @xref{Memory, ,Examining Memory}.
+
+If you are interested in information about types, or about how the
+fields of a struct or a class are declared, use the @code{ptype @var{exp}}
+command rather than @code{print}.  @xref{Symbols, ,Examining the Symbol
+Table}.
+
+ at cindex exploring hierarchical data structures
+ at kindex explore
+Another way of examining values of expressions and type information is
+through the Python extension command @code{explore} (available only if
+the @value{GDBN} build is configured with @code{--with-python}).  It
+offers an interactive way to start at the highest level (or, the most
+abstract level) of the data type of an expression (or, the data type
+itself) and explore all the way down to leaf scalar values/fields
+embedded in the higher level data types.
+
+ at table @code
+ at item explore @var{arg}
+ at var{arg} is either an expression (in the source language), or a type
+visible in the current context of the program being debugged.
+ at end table
+
+The working of the @code{explore} command can be illustrated with an
+example.  If a data type @code{struct ComplexStruct} is defined in your
+C program as
+
+ at smallexample
+struct SimpleStruct
+@{
+  int i;
+  double d;
+@};
+
+struct ComplexStruct
+@{
+  struct SimpleStruct *ss_p;
+  int arr[10];
+@};
+ at end smallexample
+
+ at noindent
+followed by variable declarations as
+
+ at smallexample
+struct SimpleStruct ss = @{ 10, 1.11 @};
+struct ComplexStruct cs = @{ &ss, @{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 @} @};
+ at end smallexample
+
+ at noindent
+then, the value of the variable @code{cs} can be explored using the
+ at code{explore} command as follows.
+
+ at smallexample
+(gdb) explore cs
+The value of `cs' is a struct/class of type `struct ComplexStruct' with
+the following fields:
+
+  ss_p = <Enter 0 to explore this field of type `struct SimpleStruct *'>
+   arr = <Enter 1 to explore this field of type `int [10]'>
+
+Enter the field number of choice:
+ at end smallexample
+
+ at noindent
+Since the fields of @code{cs} are not scalar values, you are being
+prompted to chose the field you want to explore.  Let's say you choose
+the field @code{ss_p} by entering @code{0}.  Then, since this field is a
+pointer, you will be asked if it is pointing to a single value.  From
+the declaration of @code{cs} above, it is indeed pointing to a single
+value, hence you enter @code{y}.  If you enter @code{n}, then you will
+be asked if it were pointing to an array of values, in which case this
+field will be explored as if it were an array.
+
+ at smallexample
+`cs.ss_p' is a pointer to a value of type `struct SimpleStruct'
+Continue exploring it as a pointer to a single value [y/n]: y
+The value of `*(cs.ss_p)' is a struct/class of type `struct
+SimpleStruct' with the following fields:
+
+  i = 10 .. (Value of type `int')
+  d = 1.1100000000000001 .. (Value of type `double')
+
+Press enter to return to parent value:
+ at end smallexample
+
+ at noindent
+If the field @code{arr} of @code{cs} was chosen for exploration by
+entering @code{1} earlier, then since it is as array, you will be
+prompted to enter the index of the element in the array that you want
+to explore.
+
+ at smallexample
+`cs.arr' is an array of `int'.
+Enter the index of the element you want to explore in `cs.arr': 5
+
+`(cs.arr)[5]' is a scalar value of type `int'.
+
+(cs.arr)[5] = 4
+
+Press enter to return to parent value: 
+ at end smallexample
+
+In general, at any stage of exploration, you can go deeper towards the
+leaf values by responding to the prompts appropriately, or hit the
+return key to return to the enclosing data structure (the @i{higher}
+level data structure).
+
+Similar to exploring values, you can use the @code{explore} command to
+explore types.  Instead of specifying a value (which is typically a
+variable name or an expression valid in the current context of the
+program being debugged), you specify a type name.  If you consider the
+same example as above, your can explore the type
+ at code{struct ComplexStruct} by passing the argument
+ at code{struct ComplexStruct} to the @code{explore} command.
+
+ at smallexample
+(gdb) explore struct ComplexStruct
+ at end smallexample
+
+ at noindent
+By responding to the prompts appropriately in the subsequent interactive
+session, you can explore the type @code{struct ComplexStruct} in a
+manner similar to how the value @code{cs} was explored in the above
+example.
+
+The @code{explore} command also has two sub-commands,
+ at code{explore value} and @code{explore type}. The former sub-command is
+a way to explicitly specify that value exploration of the argument is
+being invoked, while the latter is a way to explicitly specify that type
+exploration of the argument is being invoked.
+
+ at table @code
+ at item explore value @var{expr}
+ at cindex explore value
+This sub-command of @code{explore} explores the value of the
+expression @var{expr} (if @var{expr} is an expression valid in the
+current context of the program being debugged).  The behavior of this
+command is identical to that of the behavior of the @code{explore}
+command being passed the argument @var{expr}.
+
+ at item explore type @var{arg}
+ at cindex explore type
+This sub-command of @code{explore} explores the type of @var{arg} (if
+ at var{arg} is a type visible in the current context of program being
+debugged), or the type of the value/expression @var{arg} (if @var{arg}
+is an expression valid in the current context of the program being
+debugged).  If @var{arg} is a type, then the behavior of this command is
+identical to that of the @code{explore} command being passed the
+argument @var{arg}.  If @var{arg} is an expression, then the behavior of
+this command will be identical to that of the @code{explore} command
+being passed the type of @var{arg} as the argument.
+ at end table
+
+ at menu
+* Expressions::                 Expressions
+* Ambiguous Expressions::       Ambiguous Expressions
+* Variables::                   Program variables
+* Arrays::                      Artificial arrays
+* Output Formats::              Output formats
+* Memory::                      Examining memory
+* Auto Display::                Automatic display
+* Print Settings::              Print settings
+* Pretty Printing::             Python pretty printing
+* Value History::               Value history
+* Convenience Vars::            Convenience variables
+* Registers::                   Registers
+* Floating Point Hardware::     Floating point hardware
+* Vector Unit::                 Vector Unit
+* OS Information::              Auxiliary data provided by operating system
+* Memory Region Attributes::    Memory region attributes
+* Dump/Restore Files::          Copy between memory and a file
+* Core File Generation::        Cause a program dump its core
+* Character Sets::              Debugging programs that use a different
+                                character set than GDB does
+* Caching Remote Data::         Data caching for remote targets
+* Searching Memory::            Searching memory for a sequence of bytes
+ at end menu
+
+ at node Expressions
+ at section Expressions
+
+ at cindex expressions
+ at code{print} and many other @value{GDBN} commands accept an expression and
+compute its value.  Any kind of constant, variable or operator defined
+by the programming language you are using is valid in an expression in
+ at value{GDBN}.  This includes conditional expressions, function calls,
+casts, and string constants.  It also includes preprocessor macros, if
+you compiled your program to include this information; see
+ at ref{Compilation}.
+
+ at cindex arrays in expressions
+ at value{GDBN} supports array constants in expressions input by
+the user.  The syntax is @{@var{element}, @var{element}@dots{}@}.  For example,
+you can use the command @code{print @{1, 2, 3@}} to create an array
+of three integers.  If you pass an array to a function or assign it
+to a program variable, @value{GDBN} copies the array to memory that
+is @code{malloc}ed in the target program.
+
+Because C is so widespread, most of the expressions shown in examples in
+this manual are in C.  @xref{Languages, , Using @value{GDBN} with Different
+Languages}, for information on how to use expressions in other
+languages.
+
+In this section, we discuss operators that you can use in @value{GDBN}
+expressions regardless of your programming language.
+
+ at cindex casts, in expressions
+Casts are supported in all languages, not just in C, because it is so
+useful to cast a number into a pointer in order to examine a structure
+at that address in memory.
+ at c FIXME: casts supported---Mod2 true?
+
+ at value{GDBN} supports these operators, in addition to those common
+to programming languages:
+
+ at table @code
+ at item @@
+ at samp{@@} is a binary operator for treating parts of memory as arrays.
+ at xref{Arrays, ,Artificial Arrays}, for more information.
+
+ at item ::
+ at samp{::} allows you to specify a variable in terms of the file or
+function where it is defined.  @xref{Variables, ,Program Variables}.
+
+ at cindex @{@var{type}@}
+ at cindex type casting memory
+ at cindex memory, viewing as typed object
+ at cindex casts, to view memory
+ at item @{@var{type}@} @var{addr}
+Refers to an object of type @var{type} stored at address @var{addr} in
+memory.  @var{addr} may be any expression whose value is an integer or
+pointer (but parentheses are required around binary operators, just as in
+a cast).  This construct is allowed regardless of what kind of data is
+normally supposed to reside at @var{addr}.
+ at end table
+
+ at node Ambiguous Expressions
+ at section Ambiguous Expressions
+ at cindex ambiguous expressions
+
+Expressions can sometimes contain some ambiguous elements.  For instance,
+some programming languages (notably Ada, C at t{++} and Objective-C) permit
+a single function name to be defined several times, for application in
+different contexts.  This is called @dfn{overloading}.  Another example
+involving Ada is generics.  A @dfn{generic package} is similar to C at t{++}
+templates and is typically instantiated several times, resulting in
+the same function name being defined in different contexts.
+
+In some cases and depending on the language, it is possible to adjust
+the expression to remove the ambiguity.  For instance in C at t{++}, you
+can specify the signature of the function you want to break on, as in
+ at kbd{break @var{function}(@var{types})}.  In Ada, using the fully
+qualified name of your function often makes the expression unambiguous
+as well.
+
+When an ambiguity that needs to be resolved is detected, the debugger
+has the capability to display a menu of numbered choices for each
+possibility, and then waits for the selection with the prompt @samp{>}.
+The first option is always @samp{[0] cancel}, and typing @kbd{0 @key{RET}}
+aborts the current command.  If the command in which the expression was
+used allows more than one choice to be selected, the next option in the
+menu is @samp{[1] all}, and typing @kbd{1 @key{RET}} selects all possible
+choices.
+
+For example, the following session excerpt shows an attempt to set a
+breakpoint at the overloaded symbol @code{String::after}.
+We choose three particular definitions of that function name:
+
+ at c FIXME! This is likely to change to show arg type lists, at least
+ at smallexample
+ at group
+(@value{GDBP}) b String::after
+[0] cancel
+[1] all
+[2] file:String.cc; line number:867
+[3] file:String.cc; line number:860
+[4] file:String.cc; line number:875
+[5] file:String.cc; line number:853
+[6] file:String.cc; line number:846
+[7] file:String.cc; line number:735
+> 2 4 6
+Breakpoint 1 at 0xb26c: file String.cc, line 867.
+Breakpoint 2 at 0xb344: file String.cc, line 875.
+Breakpoint 3 at 0xafcc: file String.cc, line 846.
+Multiple breakpoints were set.
+Use the "delete" command to delete unwanted
+ breakpoints.
+(@value{GDBP})
+ at end group
+ at end smallexample
+
+ at table @code
+ at kindex set multiple-symbols
+ at item set multiple-symbols @var{mode}
+ at cindex multiple-symbols menu
+
+This option allows you to adjust the debugger behavior when an expression
+is ambiguous.
+
+By default, @var{mode} is set to @code{all}.  If the command with which
+the expression is used allows more than one choice, then @value{GDBN}
+automatically selects all possible choices.  For instance, inserting
+a breakpoint on a function using an ambiguous name results in a breakpoint
+inserted on each possible match.  However, if a unique choice must be made,
+then @value{GDBN} uses the menu to help you disambiguate the expression.
+For instance, printing the address of an overloaded function will result
+in the use of the menu.
+
+When @var{mode} is set to @code{ask}, the debugger always uses the menu
+when an ambiguity is detected.
+
+Finally, when @var{mode} is set to @code{cancel}, the debugger reports
+an error due to the ambiguity and the command is aborted.
+
+ at kindex show multiple-symbols
+ at item show multiple-symbols
+Show the current value of the @code{multiple-symbols} setting.
+ at end table
+
+ at node Variables
+ at section Program Variables
+
+The most common kind of expression to use is the name of a variable
+in your program.
+
+Variables in expressions are understood in the selected stack frame
+(@pxref{Selection, ,Selecting a Frame}); they must be either:
+
+ at itemize @bullet
+ at item
+global (or file-static)
+ at end itemize
+
+ at noindent or
+
+ at itemize @bullet
+ at item
+visible according to the scope rules of the
+programming language from the point of execution in that frame
+ at end itemize
+
+ at noindent This means that in the function
+
+ at smallexample
+foo (a)
+     int a;
+@{
+  bar (a);
+  @{
+    int b = test ();
+    bar (b);
+  @}
+@}
+ at end smallexample
+
+ at noindent
+you can examine and use the variable @code{a} whenever your program is
+executing within the function @code{foo}, but you can only use or
+examine the variable @code{b} while your program is executing inside
+the block where @code{b} is declared.
+
+ at cindex variable name conflict
+There is an exception: you can refer to a variable or function whose
+scope is a single source file even if the current execution point is not
+in this file.  But it is possible to have more than one such variable or
+function with the same name (in different source files).  If that
+happens, referring to that name has unpredictable effects.  If you wish,
+you can specify a static variable in a particular function or file by
+using the colon-colon (@code{::}) notation:
+
+ at cindex colon-colon, context for variables/functions
+ at ifnotinfo
+ at c info cannot cope with a :: index entry, but why deprive hard copy readers?
+ at cindex @code{::}, context for variables/functions
+ at end ifnotinfo
+ at smallexample
+ at var{file}::@var{variable}
+ at var{function}::@var{variable}
+ at end smallexample
+
+ at noindent
+Here @var{file} or @var{function} is the name of the context for the
+static @var{variable}.  In the case of file names, you can use quotes to
+make sure @value{GDBN} parses the file name as a single word---for example,
+to print a global value of @code{x} defined in @file{f2.c}:
+
+ at smallexample
+(@value{GDBP}) p 'f2.c'::x
+ at end smallexample
+
+The @code{::} notation is normally used for referring to
+static variables, since you typically disambiguate uses of local variables
+in functions by selecting the appropriate frame and using the
+simple name of the variable.  However, you may also use this notation
+to refer to local variables in frames enclosing the selected frame:
+
+ at smallexample
+void
+foo (int a)
+@{
+  if (a < 10)
+    bar (a);
+  else
+    process (a);    /* Stop here */
+@}
+
+int
+bar (int a)
+@{
+  foo (a + 5);
+@}
+ at end smallexample
+
+ at noindent
+For example, if there is a breakpoint at the commented line,
+here is what you might see
+when the program stops after executing the call @code{bar(0)}:
+
+ at smallexample
+(@value{GDBP}) p a
+$1 = 10
+(@value{GDBP}) p bar::a
+$2 = 5
+(@value{GDBP}) up 2
+#2  0x080483d0 in foo (a=5) at foobar.c:12
+(@value{GDBP}) p a
+$3 = 5
+(@value{GDBP}) p bar::a
+$4 = 0
+ at end smallexample
+
+ at cindex C at t{++} scope resolution
+These uses of @samp{::} are very rarely in conflict with the very similar
+use of the same notation in C at t{++}.  @value{GDBN} also supports use of the C at t{++}
+scope resolution operator in @value{GDBN} expressions.
+ at c FIXME: Um, so what happens in one of those rare cases where it's in
+ at c conflict??  --mew
+
+ at cindex wrong values
+ at cindex variable values, wrong
+ at cindex function entry/exit, wrong values of variables
+ at cindex optimized code, wrong values of variables
+ at quotation
+ at emph{Warning:} Occasionally, a local variable may appear to have the
+wrong value at certain points in a function---just after entry to a new
+scope, and just before exit.
+ at end quotation
+You may see this problem when you are stepping by machine instructions.
+This is because, on most machines, it takes more than one instruction to
+set up a stack frame (including local variable definitions); if you are
+stepping by machine instructions, variables may appear to have the wrong
+values until the stack frame is completely built.  On exit, it usually
+also takes more than one machine instruction to destroy a stack frame;
+after you begin stepping through that group of instructions, local
+variable definitions may be gone.
+
+This may also happen when the compiler does significant optimizations.
+To be sure of always seeing accurate values, turn off all optimization
+when compiling.
+
+ at cindex ``No symbol "foo" in current context''
+Another possible effect of compiler optimizations is to optimize
+unused variables out of existence, or assign variables to registers (as
+opposed to memory addresses).  Depending on the support for such cases
+offered by the debug info format used by the compiler, @value{GDBN}
+might not be able to display values for such local variables.  If that
+happens, @value{GDBN} will print a message like this:
+
+ at smallexample
+No symbol "foo" in current context.
+ at end smallexample
+
+To solve such problems, either recompile without optimizations, or use a
+different debug info format, if the compiler supports several such
+formats.  @xref{Compilation}, for more information on choosing compiler
+options.  @xref{C, ,C and C at t{++}}, for more information about debug
+info formats that are best suited to C at t{++} programs.
+
+If you ask to print an object whose contents are unknown to
+ at value{GDBN}, e.g., because its data type is not completely specified
+by the debug information, @value{GDBN} will say @samp{<incomplete
+type>}.  @xref{Symbols, incomplete type}, for more about this.
+
+If you append @kbd{@@entry} string to a function parameter name you get its
+value at the time the function got called.  If the value is not available an
+error message is printed.  Entry values are available only with some compilers.
+Entry values are normally also printed at the function parameter list according
+to @ref{set print entry-values}.
+
+ at smallexample
+Breakpoint 1, d (i=30) at gdb.base/entry-value.c:29
+29	  i++;
+(gdb) next
+30	  e (i);
+(gdb) print i
+$1 = 31
+(gdb) print i@@entry
+$2 = 30
+ at end smallexample
+
+Strings are identified as arrays of @code{char} values without specified
+signedness.  Arrays of either @code{signed char} or @code{unsigned char} get
+printed as arrays of 1 byte sized integers.  @code{-fsigned-char} or
+ at code{-funsigned-char} @value{NGCC} options have no effect as @value{GDBN}
+defines literal string type @code{"char"} as @code{char} without a sign.
+For program code
+
+ at smallexample
+char var0[] = "A";
+signed char var1[] = "A";
+ at end smallexample
+
+You get during debugging
+ at smallexample
+(gdb) print var0
+$1 = "A"
+(gdb) print var1
+$2 = @{65 'A', 0 '\0'@}
+ at end smallexample
+
+ at node Arrays
+ at section Artificial Arrays
+
+ at cindex artificial array
+ at cindex arrays
+ at kindex @@@r{, referencing memory as an array}
+It is often useful to print out several successive objects of the
+same type in memory; a section of an array, or an array of
+dynamically determined size for which only a pointer exists in the
+program.
+
+You can do this by referring to a contiguous span of memory as an
+ at dfn{artificial array}, using the binary operator @samp{@@}.  The left
+operand of @samp{@@} should be the first element of the desired array
+and be an individual object.  The right operand should be the desired length
+of the array.  The result is an array value whose elements are all of
+the type of the left argument.  The first element is actually the left
+argument; the second element comes from bytes of memory immediately
+following those that hold the first element, and so on.  Here is an
+example.  If a program says
+
+ at smallexample
+int *array = (int *) malloc (len * sizeof (int));
+ at end smallexample
+
+ at noindent
+you can print the contents of @code{array} with
+
+ at smallexample
+p *array@@len
+ at end smallexample
+
+The left operand of @samp{@@} must reside in memory.  Array values made
+with @samp{@@} in this way behave just like other arrays in terms of
+subscripting, and are coerced to pointers when used in expressions.
+Artificial arrays most often appear in expressions via the value history
+(@pxref{Value History, ,Value History}), after printing one out.
+
+Another way to create an artificial array is to use a cast.
+This re-interprets a value as if it were an array.
+The value need not be in memory:
+ at smallexample
+(@value{GDBP}) p/x (short[2])0x12345678
+$1 = @{0x1234, 0x5678@}
+ at end smallexample
+
+As a convenience, if you leave the array length out (as in
+ at samp{(@var{type}[])@var{value}}) @value{GDBN} calculates the size to fill
+the value (as @samp{sizeof(@var{value})/sizeof(@var{type})}:
+ at smallexample
+(@value{GDBP}) p/x (short[])0x12345678
+$2 = @{0x1234, 0x5678@}
+ at end smallexample
+
+Sometimes the artificial array mechanism is not quite enough; in
+moderately complex data structures, the elements of interest may not
+actually be adjacent---for example, if you are interested in the values
+of pointers in an array.  One useful work-around in this situation is
+to use a convenience variable (@pxref{Convenience Vars, ,Convenience
+Variables}) as a counter in an expression that prints the first
+interesting value, and then repeat that expression via @key{RET}.  For
+instance, suppose you have an array @code{dtab} of pointers to
+structures, and you are interested in the values of a field @code{fv}
+in each structure.  Here is an example of what you might type:
+
+ at smallexample
+set $i = 0
+p dtab[$i++]->fv
+ at key{RET}
+ at key{RET}
+ at dots{}
+ at end smallexample
+
+ at node Output Formats
+ at section Output Formats
+
+ at cindex formatted output
+ at cindex output formats
+By default, @value{GDBN} prints a value according to its data type.  Sometimes
+this is not what you want.  For example, you might want to print a number
+in hex, or a pointer in decimal.  Or you might want to view data in memory
+at a certain address as a character string or as an instruction.  To do
+these things, specify an @dfn{output format} when you print a value.
+
+The simplest use of output formats is to say how to print a value
+already computed.  This is done by starting the arguments of the
+ at code{print} command with a slash and a format letter.  The format
+letters supported are:
+
+ at table @code
+ at item x
+Regard the bits of the value as an integer, and print the integer in
+hexadecimal.
+
+ at item d
+Print as integer in signed decimal.
+
+ at item u
+Print as integer in unsigned decimal.
+
+ at item o
+Print as integer in octal.
+
+ at item t
+Print as integer in binary.  The letter @samp{t} stands for ``two''.
+ at footnote{@samp{b} cannot be used because these format letters are also
+used with the @code{x} command, where @samp{b} stands for ``byte'';
+see @ref{Memory,,Examining Memory}.}
+
+ at item a
+ at cindex unknown address, locating
+ at cindex locate address
+Print as an address, both absolute in hexadecimal and as an offset from
+the nearest preceding symbol.  You can use this format used to discover
+where (in what function) an unknown address is located:
+
+ at smallexample
+(@value{GDBP}) p/a 0x54320
+$3 = 0x54320 <_initialize_vx+396>
+ at end smallexample
+
+ at noindent
+The command @code{info symbol 0x54320} yields similar results.
+ at xref{Symbols, info symbol}.
+
+ at item c
+Regard as an integer and print it as a character constant.  This
+prints both the numerical value and its character representation.  The
+character representation is replaced with the octal escape @samp{\nnn}
+for characters outside the 7-bit @sc{ascii} range.
+
+Without this format, @value{GDBN} displays @code{char},
+ at w{@code{unsigned char}}, and @w{@code{signed char}} data as character
+constants.  Single-byte members of vectors are displayed as integer
+data.
+
+ at item f
+Regard the bits of the value as a floating point number and print
+using typical floating point syntax.
+
+ at item s
+ at cindex printing strings
+ at cindex printing byte arrays
+Regard as a string, if possible.  With this format, pointers to single-byte
+data are displayed as null-terminated strings and arrays of single-byte data
+are displayed as fixed-length strings.  Other values are displayed in their
+natural types.
+
+Without this format, @value{GDBN} displays pointers to and arrays of
+ at code{char}, @w{@code{unsigned char}}, and @w{@code{signed char}} as
+strings.  Single-byte members of a vector are displayed as an integer
+array.
+
+ at item r
+ at cindex raw printing
+Print using the @samp{raw} formatting.  By default, @value{GDBN} will
+use a Python-based pretty-printer, if one is available (@pxref{Pretty
+Printing}).  This typically results in a higher-level display of the
+value's contents.  The @samp{r} format bypasses any Python
+pretty-printer which might exist.
+ at end table
+
+For example, to print the program counter in hex (@pxref{Registers}), type
+
+ at smallexample
+p/x $pc
+ at end smallexample
+
+ at noindent
+Note that no space is required before the slash; this is because command
+names in @value{GDBN} cannot contain a slash.
+
+To reprint the last value in the value history with a different format,
+you can use the @code{print} command with just a format and no
+expression.  For example, @samp{p/x} reprints the last value in hex.
+
+ at node Memory
+ at section Examining Memory
+
+You can use the command @code{x} (for ``examine'') to examine memory in
+any of several formats, independently of your program's data types.
+
+ at cindex examining memory
+ at table @code
+ at kindex x @r{(examine memory)}
+ at item x/@var{nfu} @var{addr}
+ at itemx x @var{addr}
+ at itemx x
+Use the @code{x} command to examine memory.
+ at end table
+
+ at var{n}, @var{f}, and @var{u} are all optional parameters that specify how
+much memory to display and how to format it; @var{addr} is an
+expression giving the address where you want to start displaying memory.
+If you use defaults for @var{nfu}, you need not type the slash @samp{/}.
+Several commands set convenient defaults for @var{addr}.
+
+ at table @r
+ at item @var{n}, the repeat count
+The repeat count is a decimal integer; the default is 1.  It specifies
+how much memory (counting by units @var{u}) to display.
+ at c This really is **decimal**; unaffected by 'set radix' as of GDB
+ at c 4.1.2.
+
+ at item @var{f}, the display format
+The display format is one of the formats used by @code{print}
+(@samp{x}, @samp{d}, @samp{u}, @samp{o}, @samp{t}, @samp{a}, @samp{c},
+ at samp{f}, @samp{s}), and in addition @samp{i} (for machine instructions).
+The default is @samp{x} (hexadecimal) initially.  The default changes
+each time you use either @code{x} or @code{print}.
+
+ at item @var{u}, the unit size
+The unit size is any of
+
+ at table @code
+ at item b
+Bytes.
+ at item h
+Halfwords (two bytes).
+ at item w
+Words (four bytes).  This is the initial default.
+ at item g
+Giant words (eight bytes).
+ at end table
+
+Each time you specify a unit size with @code{x}, that size becomes the
+default unit the next time you use @code{x}.  For the @samp{i} format,
+the unit size is ignored and is normally not written.  For the @samp{s} format,
+the unit size defaults to @samp{b}, unless it is explicitly given.
+Use @kbd{x /hs} to display 16-bit char strings and @kbd{x /ws} to display
+32-bit strings.  The next use of @kbd{x /s} will again display 8-bit strings.
+Note that the results depend on the programming language of the
+current compilation unit.  If the language is C, the @samp{s}
+modifier will use the UTF-16 encoding while @samp{w} will use
+UTF-32.  The encoding is set by the programming language and cannot
+be altered.
+
+ at item @var{addr}, starting display address
+ at var{addr} is the address where you want @value{GDBN} to begin displaying
+memory.  The expression need not have a pointer value (though it may);
+it is always interpreted as an integer address of a byte of memory.
+ at xref{Expressions, ,Expressions}, for more information on expressions.  The default for
+ at var{addr} is usually just after the last address examined---but several
+other commands also set the default address: @code{info breakpoints} (to
+the address of the last breakpoint listed), @code{info line} (to the
+starting address of a line), and @code{print} (if you use it to display
+a value from memory).
+ at end table
+
+For example, @samp{x/3uh 0x54320} is a request to display three halfwords
+(@code{h}) of memory, formatted as unsigned decimal integers (@samp{u}),
+starting at address @code{0x54320}.  @samp{x/4xw $sp} prints the four
+words (@samp{w}) of memory above the stack pointer (here, @samp{$sp};
+ at pxref{Registers, ,Registers}) in hexadecimal (@samp{x}).
+
+Since the letters indicating unit sizes are all distinct from the
+letters specifying output formats, you do not have to remember whether
+unit size or format comes first; either order works.  The output
+specifications @samp{4xw} and @samp{4wx} mean exactly the same thing.
+(However, the count @var{n} must come first; @samp{wx4} does not work.)
+
+Even though the unit size @var{u} is ignored for the formats @samp{s}
+and @samp{i}, you might still want to use a count @var{n}; for example,
+ at samp{3i} specifies that you want to see three machine instructions,
+including any operands.  For convenience, especially when used with
+the @code{display} command, the @samp{i} format also prints branch delay
+slot instructions, if any, beyond the count specified, which immediately
+follow the last instruction that is within the count.  The command
+ at code{disassemble} gives an alternative way of inspecting machine
+instructions; see @ref{Machine Code,,Source and Machine Code}.
+
+All the defaults for the arguments to @code{x} are designed to make it
+easy to continue scanning memory with minimal specifications each time
+you use @code{x}.  For example, after you have inspected three machine
+instructions with @samp{x/3i @var{addr}}, you can inspect the next seven
+with just @samp{x/7}.  If you use @key{RET} to repeat the @code{x} command,
+the repeat count @var{n} is used again; the other arguments default as
+for successive uses of @code{x}.
+
+When examining machine instructions, the instruction at current program
+counter is shown with a @code{=>} marker. For example:
+
+ at smallexample
+(@value{GDBP}) x/5i $pc-6
+   0x804837f <main+11>: mov    %esp,%ebp
+   0x8048381 <main+13>: push   %ecx
+   0x8048382 <main+14>: sub    $0x4,%esp
+=> 0x8048385 <main+17>: movl   $0x8048460,(%esp)
+   0x804838c <main+24>: call   0x80482d4 <puts@@plt>
+ at end smallexample
+
+ at cindex @code{$_}, @code{$__}, and value history
+The addresses and contents printed by the @code{x} command are not saved
+in the value history because there is often too much of them and they
+would get in the way.  Instead, @value{GDBN} makes these values available for
+subsequent use in expressions as values of the convenience variables
+ at code{$_} and @code{$__}.  After an @code{x} command, the last address
+examined is available for use in expressions in the convenience variable
+ at code{$_}.  The contents of that address, as examined, are available in
+the convenience variable @code{$__}.
+
+If the @code{x} command has a repeat count, the address and contents saved
+are from the last memory unit printed; this is not the same as the last
+address printed if several units were printed on the last line of output.
+
+ at cindex remote memory comparison
+ at cindex verify remote memory image
+When you are debugging a program running on a remote target machine
+(@pxref{Remote Debugging}), you may wish to verify the program's image in the
+remote machine's memory against the executable file you downloaded to
+the target.  The @code{compare-sections} command is provided for such
+situations.
+
+ at table @code
+ at kindex compare-sections
+ at item compare-sections @r{[}@var{section-name}@r{]}
+Compare the data of a loadable section @var{section-name} in the
+executable file of the program being debugged with the same section in
+the remote machine's memory, and report any mismatches.  With no
+arguments, compares all loadable sections.  This command's
+availability depends on the target's support for the @code{"qCRC"}
+remote request.
+ at end table
+
+ at node Auto Display
+ at section Automatic Display
+ at cindex automatic display
+ at cindex display of expressions
+
+If you find that you want to print the value of an expression frequently
+(to see how it changes), you might want to add it to the @dfn{automatic
+display list} so that @value{GDBN} prints its value each time your program stops.
+Each expression added to the list is given a number to identify it;
+to remove an expression from the list, you specify that number.
+The automatic display looks like this:
+
+ at smallexample
+2: foo = 38
+3: bar[5] = (struct hack *) 0x3804
+ at end smallexample
+
+ at noindent
+This display shows item numbers, expressions and their current values.  As with
+displays you request manually using @code{x} or @code{print}, you can
+specify the output format you prefer; in fact, @code{display} decides
+whether to use @code{print} or @code{x} depending your format
+specification---it uses @code{x} if you specify either the @samp{i}
+or @samp{s} format, or a unit size; otherwise it uses @code{print}.
+
+ at table @code
+ at kindex display
+ at item display @var{expr}
+Add the expression @var{expr} to the list of expressions to display
+each time your program stops.  @xref{Expressions, ,Expressions}.
+
+ at code{display} does not repeat if you press @key{RET} again after using it.
+
+ at item display/@var{fmt} @var{expr}
+For @var{fmt} specifying only a display format and not a size or
+count, add the expression @var{expr} to the auto-display list but
+arrange to display it each time in the specified format @var{fmt}.
+ at xref{Output Formats,,Output Formats}.
+
+ at item display/@var{fmt} @var{addr}
+For @var{fmt} @samp{i} or @samp{s}, or including a unit-size or a
+number of units, add the expression @var{addr} as a memory address to
+be examined each time your program stops.  Examining means in effect
+doing @samp{x/@var{fmt} @var{addr}}.  @xref{Memory, ,Examining Memory}.
+ at end table
+
+For example, @samp{display/i $pc} can be helpful, to see the machine
+instruction about to be executed each time execution stops (@samp{$pc}
+is a common name for the program counter; @pxref{Registers, ,Registers}).
+
+ at table @code
+ at kindex delete display
+ at kindex undisplay
+ at item undisplay @var{dnums}@dots{}
+ at itemx delete display @var{dnums}@dots{}
+Remove items from the list of expressions to display.  Specify the
+numbers of the displays that you want affected with the command
+argument @var{dnums}.  It can be a single display number, one of the
+numbers shown in the first field of the @samp{info display} display;
+or it could be a range of display numbers, as in @code{2-4}.
+
+ at code{undisplay} does not repeat if you press @key{RET} after using it.
+(Otherwise you would just get the error @samp{No display number @dots{}}.)
+
+ at kindex disable display
+ at item disable display @var{dnums}@dots{}
+Disable the display of item numbers @var{dnums}.  A disabled display
+item is not printed automatically, but is not forgotten.  It may be
+enabled again later.  Specify the numbers of the displays that you
+want affected with the command argument @var{dnums}.  It can be a
+single display number, one of the numbers shown in the first field of
+the @samp{info display} display; or it could be a range of display
+numbers, as in @code{2-4}.
+
+ at kindex enable display
+ at item enable display @var{dnums}@dots{}
+Enable display of item numbers @var{dnums}.  It becomes effective once
+again in auto display of its expression, until you specify otherwise.
+Specify the numbers of the displays that you want affected with the
+command argument @var{dnums}.  It can be a single display number, one
+of the numbers shown in the first field of the @samp{info display}
+display; or it could be a range of display numbers, as in @code{2-4}.
+
+ at item display
+Display the current values of the expressions on the list, just as is
+done when your program stops.
+
+ at kindex info display
+ at item info display
+Print the list of expressions previously set up to display
+automatically, each one with its item number, but without showing the
+values.  This includes disabled expressions, which are marked as such.
+It also includes expressions which would not be displayed right now
+because they refer to automatic variables not currently available.
+ at end table
+
+ at cindex display disabled out of scope
+If a display expression refers to local variables, then it does not make
+sense outside the lexical context for which it was set up.  Such an
+expression is disabled when execution enters a context where one of its
+variables is not defined.  For example, if you give the command
+ at code{display last_char} while inside a function with an argument
+ at code{last_char}, @value{GDBN} displays this argument while your program
+continues to stop inside that function.  When it stops elsewhere---where
+there is no variable @code{last_char}---the display is disabled
+automatically.  The next time your program stops where @code{last_char}
+is meaningful, you can enable the display expression once again.
+
+ at node Print Settings
+ at section Print Settings
+
+ at cindex format options
+ at cindex print settings
+ at value{GDBN} provides the following ways to control how arrays, structures,
+and symbols are printed.
+
+ at noindent
+These settings are useful for debugging programs in any language:
+
+ at table @code
+ at kindex set print
+ at item set print address
+ at itemx set print address on
+ at cindex print/don't print memory addresses
+ at value{GDBN} prints memory addresses showing the location of stack
+traces, structure values, pointer values, breakpoints, and so forth,
+even when it also displays the contents of those addresses.  The default
+is @code{on}.  For example, this is what a stack frame display looks like with
+ at code{set print address on}:
+
+ at smallexample
+ at group
+(@value{GDBP}) f
+#0  set_quotes (lq=0x34c78 "<<", rq=0x34c88 ">>")
+    at input.c:530
+530         if (lquote != def_lquote)
+ at end group
+ at end smallexample
+
+ at item set print address off
+Do not print addresses when displaying their contents.  For example,
+this is the same stack frame displayed with @code{set print address off}:
+
+ at smallexample
+ at group
+(@value{GDBP}) set print addr off
+(@value{GDBP}) f
+#0  set_quotes (lq="<<", rq=">>") at input.c:530
+530         if (lquote != def_lquote)
+ at end group
+ at end smallexample
+
+You can use @samp{set print address off} to eliminate all machine
+dependent displays from the @value{GDBN} interface.  For example, with
+ at code{print address off}, you should get the same text for backtraces on
+all machines---whether or not they involve pointer arguments.
+
+ at kindex show print
+ at item show print address
+Show whether or not addresses are to be printed.
+ at end table
+
+When @value{GDBN} prints a symbolic address, it normally prints the
+closest earlier symbol plus an offset.  If that symbol does not uniquely
+identify the address (for example, it is a name whose scope is a single
+source file), you may need to clarify.  One way to do this is with
+ at code{info line}, for example @samp{info line *0x4537}.  Alternately,
+you can set @value{GDBN} to print the source file and line number when
+it prints a symbolic address:
+
+ at table @code
+ at item set print symbol-filename on
+ at cindex source file and line of a symbol
+ at cindex symbol, source file and line
+Tell @value{GDBN} to print the source file name and line number of a
+symbol in the symbolic form of an address.
+
+ at item set print symbol-filename off
+Do not print source file name and line number of a symbol.  This is the
+default.
+
+ at item show print symbol-filename
+Show whether or not @value{GDBN} will print the source file name and
+line number of a symbol in the symbolic form of an address.
+ at end table
+
+Another situation where it is helpful to show symbol filenames and line
+numbers is when disassembling code; @value{GDBN} shows you the line
+number and source file that corresponds to each instruction.
+
+Also, you may wish to see the symbolic form only if the address being
+printed is reasonably close to the closest earlier symbol:
+
+ at table @code
+ at item set print max-symbolic-offset @var{max-offset}
+ at cindex maximum value for offset of closest symbol
+Tell @value{GDBN} to only display the symbolic form of an address if the
+offset between the closest earlier symbol and the address is less than
+ at var{max-offset}.  The default is 0, which tells @value{GDBN}
+to always print the symbolic form of an address if any symbol precedes it.
+
+ at item show print max-symbolic-offset
+Ask how large the maximum offset is that @value{GDBN} prints in a
+symbolic address.
+ at end table
+
+ at cindex wild pointer, interpreting
+ at cindex pointer, finding referent
+If you have a pointer and you are not sure where it points, try
+ at samp{set print symbol-filename on}.  Then you can determine the name
+and source file location of the variable where it points, using
+ at samp{p/a @var{pointer}}.  This interprets the address in symbolic form.
+For example, here @value{GDBN} shows that a variable @code{ptt} points
+at another variable @code{t}, defined in @file{hi2.c}:
+
+ at smallexample
+(@value{GDBP}) set print symbol-filename on
+(@value{GDBP}) p/a ptt
+$4 = 0xe008 <t in hi2.c>
+ at end smallexample
+
+ at quotation
+ at emph{Warning:} For pointers that point to a local variable, @samp{p/a}
+does not show the symbol name and filename of the referent, even with
+the appropriate @code{set print} options turned on.
+ at end quotation
+
+You can also enable @samp{/a}-like formatting all the time using
+ at samp{set print symbol on}:
+
+ at table @code
+ at item set print symbol on
+Tell @value{GDBN} to print the symbol corresponding to an address, if
+one exists.
+
+ at item set print symbol off
+Tell @value{GDBN} not to print the symbol corresponding to an
+address.  In this mode, @value{GDBN} will still print the symbol
+corresponding to pointers to functions.  This is the default.
+
+ at item show print symbol
+Show whether @value{GDBN} will display the symbol corresponding to an
+address.
+ at end table
+
+Other settings control how different kinds of objects are printed:
+
+ at table @code
+ at item set print array
+ at itemx set print array on
+ at cindex pretty print arrays
+Pretty print arrays.  This format is more convenient to read,
+but uses more space.  The default is off.
+
+ at item set print array off
+Return to compressed format for arrays.
+
+ at item show print array
+Show whether compressed or pretty format is selected for displaying
+arrays.
+
+ at cindex print array indexes
+ at item set print array-indexes
+ at itemx set print array-indexes on
+Print the index of each element when displaying arrays.  May be more
+convenient to locate a given element in the array or quickly find the
+index of a given element in that printed array.  The default is off.
+
+ at item set print array-indexes off
+Stop printing element indexes when displaying arrays.
+
+ at item show print array-indexes
+Show whether the index of each element is printed when displaying
+arrays.
+
+ at item set print elements @var{number-of-elements}
+ at cindex number of array elements to print
+ at cindex limit on number of printed array elements
+Set a limit on how many elements of an array @value{GDBN} will print.
+If @value{GDBN} is printing a large array, it stops printing after it has
+printed the number of elements set by the @code{set print elements} command.
+This limit also applies to the display of strings.
+When @value{GDBN} starts, this limit is set to 200.
+Setting  @var{number-of-elements} to zero means that the printing is unlimited.
+
+ at item show print elements
+Display the number of elements of a large array that @value{GDBN} will print.
+If the number is 0, then the printing is unlimited.
+
+ at item set print frame-arguments @var{value}
+ at kindex set print frame-arguments
+ at cindex printing frame argument values
+ at cindex print all frame argument values
+ at cindex print frame argument values for scalars only
+ at cindex do not print frame argument values
+This command allows to control how the values of arguments are printed
+when the debugger prints a frame (@pxref{Frames}).  The possible
+values are:
+
+ at table @code
+ at item all
+The values of all arguments are printed.
+
+ at item scalars
+Print the value of an argument only if it is a scalar.  The value of more
+complex arguments such as arrays, structures, unions, etc, is replaced
+by @code{@dots{}}.  This is the default.  Here is an example where
+only scalar arguments are shown:
+
+ at smallexample
+#1  0x08048361 in call_me (i=3, s=@dots{}, ss=0xbf8d508c, u=@dots{}, e=green)
+  at frame-args.c:23
+ at end smallexample
+
+ at item none
+None of the argument values are printed.  Instead, the value of each argument
+is replaced by @code{@dots{}}.  In this case, the example above now becomes:
+
+ at smallexample
+#1  0x08048361 in call_me (i=@dots{}, s=@dots{}, ss=@dots{}, u=@dots{}, e=@dots{})
+  at frame-args.c:23
+ at end smallexample
+ at end table
+
+By default, only scalar arguments are printed.  This command can be used
+to configure the debugger to print the value of all arguments, regardless
+of their type.  However, it is often advantageous to not print the value
+of more complex parameters.  For instance, it reduces the amount of
+information printed in each frame, making the backtrace more readable.
+Also, it improves performance when displaying Ada frames, because
+the computation of large arguments can sometimes be CPU-intensive,
+especially in large applications.  Setting @code{print frame-arguments}
+to @code{scalars} (the default) or @code{none} avoids this computation,
+thus speeding up the display of each Ada frame.
+
+ at item show print frame-arguments
+Show how the value of arguments should be displayed when printing a frame.
+
+ at anchor{set print entry-values}
+ at item set print entry-values @var{value}
+ at kindex set print entry-values
+Set printing of frame argument values at function entry.  In some cases
+ at value{GDBN} can determine the value of function argument which was passed by
+the function caller, even if the value was modified inside the called function
+and therefore is different.  With optimized code, the current value could be
+unavailable, but the entry value may still be known.
+
+The default value is @code{default} (see below for its description).  Older
+ at value{GDBN} behaved as with the setting @code{no}.  Compilers not supporting
+this feature will behave in the @code{default} setting the same way as with the
+ at code{no} setting.
+
+This functionality is currently supported only by DWARF 2 debugging format and
+the compiler has to produce @samp{DW_TAG_GNU_call_site} tags.  With
+ at value{NGCC}, you need to specify @option{-O -g} during compilation, to get
+this information.
+
+The @var{value} parameter can be one of the following:
+
+ at table @code
+ at item no
+Print only actual parameter values, never print values from function entry
+point.
+ at smallexample
+#0  equal (val=5)
+#0  different (val=6)
+#0  lost (val=<optimized out>)
+#0  born (val=10)
+#0  invalid (val=<optimized out>)
+ at end smallexample
+
+ at item only
+Print only parameter values from function entry point.  The actual parameter
+values are never printed.
+ at smallexample
+#0  equal (val@@entry=5)
+#0  different (val@@entry=5)
+#0  lost (val@@entry=5)
+#0  born (val@@entry=<optimized out>)
+#0  invalid (val@@entry=<optimized out>)
+ at end smallexample
+
+ at item preferred
+Print only parameter values from function entry point.  If value from function
+entry point is not known while the actual value is known, print the actual
+value for such parameter.
+ at smallexample
+#0  equal (val@@entry=5)
+#0  different (val@@entry=5)
+#0  lost (val@@entry=5)
+#0  born (val=10)
+#0  invalid (val@@entry=<optimized out>)
+ at end smallexample
+
+ at item if-needed
+Print actual parameter values.  If actual parameter value is not known while
+value from function entry point is known, print the entry point value for such
+parameter.
+ at smallexample
+#0  equal (val=5)
+#0  different (val=6)
+#0  lost (val@@entry=5)
+#0  born (val=10)
+#0  invalid (val=<optimized out>)
+ at end smallexample
+
+ at item both
+Always print both the actual parameter value and its value from function entry
+point, even if values of one or both are not available due to compiler
+optimizations.
+ at smallexample
+#0  equal (val=5, val@@entry=5)
+#0  different (val=6, val@@entry=5)
+#0  lost (val=<optimized out>, val@@entry=5)
+#0  born (val=10, val@@entry=<optimized out>)
+#0  invalid (val=<optimized out>, val@@entry=<optimized out>)
+ at end smallexample
+
+ at item compact
+Print the actual parameter value if it is known and also its value from
+function entry point if it is known.  If neither is known, print for the actual
+value @code{<optimized out>}.  If not in MI mode (@pxref{GDB/MI}) and if both
+values are known and identical, print the shortened
+ at code{param=param@@entry=VALUE} notation.
+ at smallexample
+#0  equal (val=val@@entry=5)
+#0  different (val=6, val@@entry=5)
+#0  lost (val@@entry=5)
+#0  born (val=10)
+#0  invalid (val=<optimized out>)
+ at end smallexample
+
+ at item default
+Always print the actual parameter value.  Print also its value from function
+entry point, but only if it is known.  If not in MI mode (@pxref{GDB/MI}) and
+if both values are known and identical, print the shortened
+ at code{param=param@@entry=VALUE} notation.
+ at smallexample
+#0  equal (val=val@@entry=5)
+#0  different (val=6, val@@entry=5)
+#0  lost (val=<optimized out>, val@@entry=5)
+#0  born (val=10)
+#0  invalid (val=<optimized out>)
+ at end smallexample
+ at end table
+
+For analysis messages on possible failures of frame argument values at function
+entry resolution see @ref{set debug entry-values}.
+
+ at item show print entry-values
+Show the method being used for printing of frame argument values at function
+entry.
+
+ at item set print repeats
+ at cindex repeated array elements
+Set the threshold for suppressing display of repeated array
+elements.  When the number of consecutive identical elements of an
+array exceeds the threshold, @value{GDBN} prints the string
+ at code{"<repeats @var{n} times>"}, where @var{n} is the number of
+identical repetitions, instead of displaying the identical elements
+themselves.  Setting the threshold to zero will cause all elements to
+be individually printed.  The default threshold is 10.
+
+ at item show print repeats
+Display the current threshold for printing repeated identical
+elements.
+
+ at item set print null-stop
+ at cindex @sc{null} elements in arrays
+Cause @value{GDBN} to stop printing the characters of an array when the first
+ at sc{null} is encountered.  This is useful when large arrays actually
+contain only short strings.
+The default is off.
+
+ at item show print null-stop
+Show whether @value{GDBN} stops printing an array on the first
+ at sc{null} character.
+
+ at item set print pretty on
+ at cindex print structures in indented form
+ at cindex indentation in structure display
+Cause @value{GDBN} to print structures in an indented format with one member
+per line, like this:
+
+ at smallexample
+ at group
+$1 = @{
+  next = 0x0,
+  flags = @{
+    sweet = 1,
+    sour = 1
+  @},
+  meat = 0x54 "Pork"
+@}
+ at end group
+ at end smallexample
+
+ at item set print pretty off
+Cause @value{GDBN} to print structures in a compact format, like this:
+
+ at smallexample
+ at group
+$1 = @{next = 0x0, flags = @{sweet = 1, sour = 1@}, \
+meat = 0x54 "Pork"@}
+ at end group
+ at end smallexample
+
+ at noindent
+This is the default format.
+
+ at item show print pretty
+Show which format @value{GDBN} is using to print structures.
+
+ at item set print sevenbit-strings on
+ at cindex eight-bit characters in strings
+ at cindex octal escapes in strings
+Print using only seven-bit characters; if this option is set,
+ at value{GDBN} displays any eight-bit characters (in strings or
+character values) using the notation @code{\}@var{nnn}.  This setting is
+best if you are working in English (@sc{ascii}) and you use the
+high-order bit of characters as a marker or ``meta'' bit.
+
+ at item set print sevenbit-strings off
+Print full eight-bit characters.  This allows the use of more
+international character sets, and is the default.
+
+ at item show print sevenbit-strings
+Show whether or not @value{GDBN} is printing only seven-bit characters.
+
+ at item set print union on
+ at cindex unions in structures, printing
+Tell @value{GDBN} to print unions which are contained in structures
+and other unions.  This is the default setting.
+
+ at item set print union off
+Tell @value{GDBN} not to print unions which are contained in
+structures and other unions.  @value{GDBN} will print @code{"@{...@}"}
+instead.
+
+ at item show print union
+Ask @value{GDBN} whether or not it will print unions which are contained in
+structures and other unions.
+
+For example, given the declarations
+
+ at smallexample
+typedef enum @{Tree, Bug@} Species;
+typedef enum @{Big_tree, Acorn, Seedling@} Tree_forms;
+typedef enum @{Caterpillar, Cocoon, Butterfly@}
+              Bug_forms;
+
+struct thing @{
+  Species it;
+  union @{
+    Tree_forms tree;
+    Bug_forms bug;
+  @} form;
+@};
+
+struct thing foo = @{Tree, @{Acorn@}@};
+ at end smallexample
+
+ at noindent
+with @code{set print union on} in effect @samp{p foo} would print
+
+ at smallexample
+$1 = @{it = Tree, form = @{tree = Acorn, bug = Cocoon@}@}
+ at end smallexample
+
+ at noindent
+and with @code{set print union off} in effect it would print
+
+ at smallexample
+$1 = @{it = Tree, form = @{...@}@}
+ at end smallexample
+
+ at noindent
+ at code{set print union} affects programs written in C-like languages
+and in Pascal.
+ at end table
+
+ at need 1000
+ at noindent
+These settings are of interest when debugging C at t{++} programs:
+
+ at table @code
+ at cindex demangling C at t{++} names
+ at item set print demangle
+ at itemx set print demangle on
+Print C at t{++} names in their source form rather than in the encoded
+(``mangled'') form passed to the assembler and linker for type-safe
+linkage.  The default is on.
+
+ at item show print demangle
+Show whether C at t{++} names are printed in mangled or demangled form.
+
+ at item set print asm-demangle
+ at itemx set print asm-demangle on
+Print C at t{++} names in their source form rather than their mangled form, even
+in assembler code printouts such as instruction disassemblies.
+The default is off.
+
+ at item show print asm-demangle
+Show whether C at t{++} names in assembly listings are printed in mangled
+or demangled form.
+
+ at cindex C at t{++} symbol decoding style
+ at cindex symbol decoding style, C at t{++}
+ at kindex set demangle-style
+ at item set demangle-style @var{style}
+Choose among several encoding schemes used by different compilers to
+represent C at t{++} names.  The choices for @var{style} are currently:
+
+ at table @code
+ at item auto
+Allow @value{GDBN} to choose a decoding style by inspecting your program.
+
+ at item gnu
+Decode based on the @sc{gnu} C at t{++} compiler (@code{g++}) encoding algorithm.
+This is the default.
+
+ at item hp
+Decode based on the HP ANSI C at t{++} (@code{aCC}) encoding algorithm.
+
+ at item lucid
+Decode based on the Lucid C at t{++} compiler (@code{lcc}) encoding algorithm.
+
+ at item arm
+Decode using the algorithm in the @cite{C at t{++} Annotated Reference Manual}.
+ at strong{Warning:} this setting alone is not sufficient to allow
+debugging @code{cfront}-generated executables.  @value{GDBN} would
+require further enhancement to permit that.
+
+ at end table
+If you omit @var{style}, you will see a list of possible formats.
+
+ at item show demangle-style
+Display the encoding style currently in use for decoding C at t{++} symbols.
+
+ at item set print object
+ at itemx set print object on
+ at cindex derived type of an object, printing
+ at cindex display derived types
+When displaying a pointer to an object, identify the @emph{actual}
+(derived) type of the object rather than the @emph{declared} type, using
+the virtual function table.  Note that the virtual function table is
+required---this feature can only work for objects that have run-time
+type identification; a single virtual method in the object's declared
+type is sufficient.  Note that this setting is also taken into account when
+working with variable objects via MI (@pxref{GDB/MI}).
+
+ at item set print object off
+Display only the declared type of objects, without reference to the
+virtual function table.  This is the default setting.
+
+ at item show print object
+Show whether actual, or declared, object types are displayed.
+
+ at item set print static-members
+ at itemx set print static-members on
+ at cindex static members of C at t{++} objects
+Print static members when displaying a C at t{++} object.  The default is on.
+
+ at item set print static-members off
+Do not print static members when displaying a C at t{++} object.
+
+ at item show print static-members
+Show whether C at t{++} static members are printed or not.
+
+ at item set print pascal_static-members
+ at itemx set print pascal_static-members on
+ at cindex static members of Pascal objects
+ at cindex Pascal objects, static members display
+Print static members when displaying a Pascal object.  The default is on.
+
+ at item set print pascal_static-members off
+Do not print static members when displaying a Pascal object.
+
+ at item show print pascal_static-members
+Show whether Pascal static members are printed or not.
+
+ at c These don't work with HP ANSI C++ yet.
+ at item set print vtbl
+ at itemx set print vtbl on
+ at cindex pretty print C at t{++} virtual function tables
+ at cindex virtual functions (C at t{++}) display
+ at cindex VTBL display
+Pretty print C at t{++} virtual function tables.  The default is off.
+(The @code{vtbl} commands do not work on programs compiled with the HP
+ANSI C at t{++} compiler (@code{aCC}).)
+
+ at item set print vtbl off
+Do not pretty print C at t{++} virtual function tables.
+
+ at item show print vtbl
+Show whether C at t{++} virtual function tables are pretty printed, or not.
+ at end table
+
+ at node Pretty Printing
+ at section Pretty Printing
+
+ at value{GDBN} provides a mechanism to allow pretty-printing of values using
+Python code.  It greatly simplifies the display of complex objects.  This
+mechanism works for both MI and the CLI.
+
+ at menu
+* Pretty-Printer Introduction::  Introduction to pretty-printers
+* Pretty-Printer Example::       An example pretty-printer
+* Pretty-Printer Commands::      Pretty-printer commands
+ at end menu
+
+ at node Pretty-Printer Introduction
+ at subsection Pretty-Printer Introduction
+
+When @value{GDBN} prints a value, it first sees if there is a pretty-printer
+registered for the value.  If there is then @value{GDBN} invokes the
+pretty-printer to print the value.  Otherwise the value is printed normally.
+
+Pretty-printers are normally named.  This makes them easy to manage.
+The @samp{info pretty-printer} command will list all the installed
+pretty-printers with their names.
+If a pretty-printer can handle multiple data types, then its
+ at dfn{subprinters} are the printers for the individual data types.
+Each such subprinter has its own name.
+The format of the name is @var{printer-name};@var{subprinter-name}.
+
+Pretty-printers are installed by @dfn{registering} them with @value{GDBN}.
+Typically they are automatically loaded and registered when the corresponding
+debug information is loaded, thus making them available without having to
+do anything special.
+
+There are three places where a pretty-printer can be registered.
+
+ at itemize @bullet
+ at item
+Pretty-printers registered globally are available when debugging
+all inferiors.
+
+ at item
+Pretty-printers registered with a program space are available only
+when debugging that program.
+ at xref{Progspaces In Python}, for more details on program spaces in Python.
+
+ at item
+Pretty-printers registered with an objfile are loaded and unloaded
+with the corresponding objfile (e.g., shared library).
+ at xref{Objfiles In Python}, for more details on objfiles in Python.
+ at end itemize
+
+ at xref{Selecting Pretty-Printers}, for further information on how 
+pretty-printers are selected,
+
+ at xref{Writing a Pretty-Printer}, for implementing pretty printers
+for new types.
+
+ at node Pretty-Printer Example
+ at subsection Pretty-Printer Example
+
+Here is how a C at t{++} @code{std::string} looks without a pretty-printer:
+
+ at smallexample
+(@value{GDBP}) print s
+$1 = @{
+  static npos = 4294967295, 
+  _M_dataplus = @{
+    <std::allocator<char>> = @{
+      <__gnu_cxx::new_allocator<char>> = @{
+        <No data fields>@}, <No data fields>
+      @},
+    members of std::basic_string<char, std::char_traits<char>,
+      std::allocator<char> >::_Alloc_hider:
+    _M_p = 0x804a014 "abcd"
+  @}
+@}
+ at end smallexample
+
+With a pretty-printer for @code{std::string} only the contents are printed:
+
+ at smallexample
+(@value{GDBP}) print s
+$2 = "abcd"
+ at end smallexample
+
+ at node Pretty-Printer Commands
+ at subsection Pretty-Printer Commands
+ at cindex pretty-printer commands
+
+ at table @code
+ at kindex info pretty-printer
+ at item info pretty-printer [@var{object-regexp} [@var{name-regexp}]]
+Print the list of installed pretty-printers.
+This includes disabled pretty-printers, which are marked as such.
+
+ at var{object-regexp} is a regular expression matching the objects
+whose pretty-printers to list.
+Objects can be @code{global}, the program space's file
+(@pxref{Progspaces In Python}),
+and the object files within that program space (@pxref{Objfiles In Python}).
+ at xref{Selecting Pretty-Printers}, for details on how @value{GDBN}
+looks up a printer from these three objects.
+
+ at var{name-regexp} is a regular expression matching the name of the printers
+to list.
+
+ at kindex disable pretty-printer
+ at item disable pretty-printer [@var{object-regexp} [@var{name-regexp}]]
+Disable pretty-printers matching @var{object-regexp} and @var{name-regexp}.
+A disabled pretty-printer is not forgotten, it may be enabled again later.
+
+ at kindex enable pretty-printer
+ at item enable pretty-printer [@var{object-regexp} [@var{name-regexp}]]
+Enable pretty-printers matching @var{object-regexp} and @var{name-regexp}.
+ at end table
+
+Example:
+
+Suppose we have three pretty-printers installed: one from library1.so
+named @code{foo} that prints objects of type @code{foo}, and
+another from library2.so named @code{bar} that prints two types of objects,
+ at code{bar1} and @code{bar2}.
+
+ at smallexample
+(gdb) info pretty-printer
+library1.so:
+  foo
+library2.so:
+  bar
+    bar1
+    bar2
+(gdb) info pretty-printer library2
+library2.so:
+  bar
+    bar1
+    bar2
+(gdb) disable pretty-printer library1
+1 printer disabled
+2 of 3 printers enabled
+(gdb) info pretty-printer
+library1.so:
+  foo [disabled]
+library2.so:
+  bar
+    bar1
+    bar2
+(gdb) disable pretty-printer library2 bar:bar1
+1 printer disabled
+1 of 3 printers enabled
+(gdb) info pretty-printer library2
+library1.so:
+  foo [disabled]
+library2.so:
+  bar
+    bar1 [disabled]
+    bar2
+(gdb) disable pretty-printer library2 bar
+1 printer disabled
+0 of 3 printers enabled
+(gdb) info pretty-printer library2
+library1.so:
+  foo [disabled]
+library2.so:
+  bar [disabled]
+    bar1 [disabled]
+    bar2
+ at end smallexample
+
+Note that for @code{bar} the entire printer can be disabled,
+as can each individual subprinter.
+
+ at node Value History
+ at section Value History
+
+ at cindex value history
+ at cindex history of values printed by @value{GDBN}
+Values printed by the @code{print} command are saved in the @value{GDBN}
+ at dfn{value history}.  This allows you to refer to them in other expressions.
+Values are kept until the symbol table is re-read or discarded
+(for example with the @code{file} or @code{symbol-file} commands).
+When the symbol table changes, the value history is discarded,
+since the values may contain pointers back to the types defined in the
+symbol table.
+
+ at cindex @code{$}
+ at cindex @code{$$}
+ at cindex history number
+The values printed are given @dfn{history numbers} by which you can
+refer to them.  These are successive integers starting with one.
+ at code{print} shows you the history number assigned to a value by
+printing @samp{$@var{num} = } before the value; here @var{num} is the
+history number.
+
+To refer to any previous value, use @samp{$} followed by the value's
+history number.  The way @code{print} labels its output is designed to
+remind you of this.  Just @code{$} refers to the most recent value in
+the history, and @code{$$} refers to the value before that.
+ at code{$$@var{n}} refers to the @var{n}th value from the end; @code{$$2}
+is the value just prior to @code{$$}, @code{$$1} is equivalent to
+ at code{$$}, and @code{$$0} is equivalent to @code{$}.
+
+For example, suppose you have just printed a pointer to a structure and
+want to see the contents of the structure.  It suffices to type
+
+ at smallexample
+p *$
+ at end smallexample
+
+If you have a chain of structures where the component @code{next} points
+to the next one, you can print the contents of the next one with this:
+
+ at smallexample
+p *$.next
+ at end smallexample
+
+ at noindent
+You can print successive links in the chain by repeating this
+command---which you can do by just typing @key{RET}.
+
+Note that the history records values, not expressions.  If the value of
+ at code{x} is 4 and you type these commands:
+
+ at smallexample
+print x
+set x=5
+ at end smallexample
+
+ at noindent
+then the value recorded in the value history by the @code{print} command
+remains 4 even though the value of @code{x} has changed.
+
+ at table @code
+ at kindex show values
+ at item show values
+Print the last ten values in the value history, with their item numbers.
+This is like @samp{p@ $$9} repeated ten times, except that @code{show
+values} does not change the history.
+
+ at item show values @var{n}
+Print ten history values centered on history item number @var{n}.
+
+ at item show values +
+Print ten history values just after the values last printed.  If no more
+values are available, @code{show values +} produces no display.
+ at end table
+
+Pressing @key{RET} to repeat @code{show values @var{n}} has exactly the
+same effect as @samp{show values +}.
+
+ at node Convenience Vars
+ at section Convenience Variables
+
+ at cindex convenience variables
+ at cindex user-defined variables
+ at value{GDBN} provides @dfn{convenience variables} that you can use within
+ at value{GDBN} to hold on to a value and refer to it later.  These variables
+exist entirely within @value{GDBN}; they are not part of your program, and
+setting a convenience variable has no direct effect on further execution
+of your program.  That is why you can use them freely.
+
+Convenience variables are prefixed with @samp{$}.  Any name preceded by
+ at samp{$} can be used for a convenience variable, unless it is one of
+the predefined machine-specific register names (@pxref{Registers, ,Registers}).
+(Value history references, in contrast, are @emph{numbers} preceded
+by @samp{$}.  @xref{Value History, ,Value History}.)
+
+You can save a value in a convenience variable with an assignment
+expression, just as you would set a variable in your program.
+For example:
+
+ at smallexample
+set $foo = *object_ptr
+ at end smallexample
+
+ at noindent
+would save in @code{$foo} the value contained in the object pointed to by
+ at code{object_ptr}.
+
+Using a convenience variable for the first time creates it, but its
+value is @code{void} until you assign a new value.  You can alter the
+value with another assignment at any time.
+
+Convenience variables have no fixed types.  You can assign a convenience
+variable any type of value, including structures and arrays, even if
+that variable already has a value of a different type.  The convenience
+variable, when used as an expression, has the type of its current value.
+
+ at table @code
+ at kindex show convenience
+ at cindex show all user variables
+ at item show convenience
+Print a list of convenience variables used so far, and their values.
+Abbreviated @code{show conv}.
+
+ at kindex init-if-undefined
+ at cindex convenience variables, initializing
+ at item init-if-undefined $@var{variable} = @var{expression}
+Set a convenience variable if it has not already been set.  This is useful
+for user-defined commands that keep some state.  It is similar, in concept,
+to using local static variables with initializers in C (except that
+convenience variables are global).  It can also be used to allow users to
+override default values used in a command script.
+
+If the variable is already defined then the expression is not evaluated so
+any side-effects do not occur.
+ at end table
+
+One of the ways to use a convenience variable is as a counter to be
+incremented or a pointer to be advanced.  For example, to print
+a field from successive elements of an array of structures:
+
+ at smallexample
+set $i = 0
+print bar[$i++]->contents
+ at end smallexample
+
+ at noindent
+Repeat that command by typing @key{RET}.
+
+Some convenience variables are created automatically by @value{GDBN} and given
+values likely to be useful.
+
+ at table @code
+ at vindex $_ at r{, convenience variable}
+ at item $_
+The variable @code{$_} is automatically set by the @code{x} command to
+the last address examined (@pxref{Memory, ,Examining Memory}).  Other
+commands which provide a default address for @code{x} to examine also
+set @code{$_} to that address; these commands include @code{info line}
+and @code{info breakpoint}.  The type of @code{$_} is @code{void *}
+except when set by the @code{x} command, in which case it is a pointer
+to the type of @code{$__}.
+
+ at vindex $__ at r{, convenience variable}
+ at item $__
+The variable @code{$__} is automatically set by the @code{x} command
+to the value found in the last address examined.  Its type is chosen
+to match the format in which the data was printed.
+
+ at item $_exitcode
+ at vindex $_exitcode at r{, convenience variable}
+The variable @code{$_exitcode} is automatically set to the exit code when
+the program being debugged terminates.
+
+ at item $_probe_argc
+ at itemx $_probe_arg0 at dots{}$_probe_arg11
+Arguments to a static probe.  @xref{Static Probe Points}.
+
+ at item $_sdata
+ at vindex $_sdata at r{, inspect, convenience variable}
+The variable @code{$_sdata} contains extra collected static tracepoint
+data.  @xref{Tracepoint Actions,,Tracepoint Action Lists}.  Note that
+ at code{$_sdata} could be empty, if not inspecting a trace buffer, or
+if extra static tracepoint data has not been collected.
+
+ at item $_siginfo
+ at vindex $_siginfo at r{, convenience variable}
+The variable @code{$_siginfo} contains extra signal information
+(@pxref{extra signal information}).  Note that @code{$_siginfo}
+could be empty, if the application has not yet received any signals.
+For example, it will be empty before you execute the @code{run} command.
+
+ at item $_tlb
+ at vindex $_tlb at r{, convenience variable}
+The variable @code{$_tlb} is automatically set when debugging
+applications running on MS-Windows in native mode or connected to
+gdbserver that supports the @code{qGetTIBAddr} request. 
+ at xref{General Query Packets}.
+This variable contains the address of the thread information block.
+
+ at end table
+
+On HP-UX systems, if you refer to a function or variable name that
+begins with a dollar sign, @value{GDBN} searches for a user or system
+name first, before it searches for a convenience variable.
+
+ at cindex convenience functions
+ at value{GDBN} also supplies some @dfn{convenience functions}.  These
+have a syntax similar to convenience variables.  A convenience
+function can be used in an expression just like an ordinary function;
+however, a convenience function is implemented internally to
+ at value{GDBN}.
+
+ at table @code
+ at item help function
+ at kindex help function
+ at cindex show all convenience functions
+Print a list of all convenience functions.
+ at end table
+
+ at node Registers
+ at section Registers
+
+ at cindex registers
+You can refer to machine register contents, in expressions, as variables
+with names starting with @samp{$}.  The names of registers are different
+for each machine; use @code{info registers} to see the names used on
+your machine.
+
+ at table @code
+ at kindex info registers
+ at item info registers
+Print the names and values of all registers except floating-point
+and vector registers (in the selected stack frame).
+
+ at kindex info all-registers
+ at cindex floating point registers
+ at item info all-registers
+Print the names and values of all registers, including floating-point
+and vector registers (in the selected stack frame).
+
+ at item info registers @var{regname} @dots{}
+Print the @dfn{relativized} value of each specified register @var{regname}.
+As discussed in detail below, register values are normally relative to
+the selected stack frame.  @var{regname} may be any register name valid on
+the machine you are using, with or without the initial @samp{$}.
+ at end table
+
+ at cindex stack pointer register
+ at cindex program counter register
+ at cindex process status register
+ at cindex frame pointer register
+ at cindex standard registers
+ at value{GDBN} has four ``standard'' register names that are available (in
+expressions) on most machines---whenever they do not conflict with an
+architecture's canonical mnemonics for registers.  The register names
+ at code{$pc} and @code{$sp} are used for the program counter register and
+the stack pointer.  @code{$fp} is used for a register that contains a
+pointer to the current stack frame, and @code{$ps} is used for a
+register that contains the processor status.  For example,
+you could print the program counter in hex with
+
+ at smallexample
+p/x $pc
+ at end smallexample
+
+ at noindent
+or print the instruction to be executed next with
+
+ at smallexample
+x/i $pc
+ at end smallexample
+
+ at noindent
+or add four to the stack pointer at footnote{This is a way of removing
+one word from the stack, on machines where stacks grow downward in
+memory (most machines, nowadays).  This assumes that the innermost
+stack frame is selected; setting @code{$sp} is not allowed when other
+stack frames are selected.  To pop entire frames off the stack,
+regardless of machine architecture, use @code{return};
+see @ref{Returning, ,Returning from a Function}.} with
+
+ at smallexample
+set $sp += 4
+ at end smallexample
+
+Whenever possible, these four standard register names are available on
+your machine even though the machine has different canonical mnemonics,
+so long as there is no conflict.  The @code{info registers} command
+shows the canonical names.  For example, on the SPARC, @code{info
+registers} displays the processor status register as @code{$psr} but you
+can also refer to it as @code{$ps}; and on x86-based machines @code{$ps}
+is an alias for the @sc{eflags} register.
+
+ at value{GDBN} always considers the contents of an ordinary register as an
+integer when the register is examined in this way.  Some machines have
+special registers which can hold nothing but floating point; these
+registers are considered to have floating point values.  There is no way
+to refer to the contents of an ordinary register as floating point value
+(although you can @emph{print} it as a floating point value with
+ at samp{print/f $@var{regname}}).
+
+Some registers have distinct ``raw'' and ``virtual'' data formats.  This
+means that the data format in which the register contents are saved by
+the operating system is not the same one that your program normally
+sees.  For example, the registers of the 68881 floating point
+coprocessor are always saved in ``extended'' (raw) format, but all C
+programs expect to work with ``double'' (virtual) format.  In such
+cases, @value{GDBN} normally works with the virtual format only (the format
+that makes sense for your program), but the @code{info registers} command
+prints the data in both formats.
+
+ at cindex SSE registers (x86)
+ at cindex MMX registers (x86)
+Some machines have special registers whose contents can be interpreted
+in several different ways.  For example, modern x86-based machines
+have SSE and MMX registers that can hold several values packed
+together in several different formats.  @value{GDBN} refers to such
+registers in @code{struct} notation:
+
+ at smallexample
+(@value{GDBP}) print $xmm1
+$1 = @{
+  v4_float = @{0, 3.43859137e-038, 1.54142831e-044, 1.821688e-044@},
+  v2_double = @{9.92129282474342e-303, 2.7585945287983262e-313@},
+  v16_int8 = "\000\000\000\000\3706;\001\v\000\000\000\r\000\000",
+  v8_int16 = @{0, 0, 14072, 315, 11, 0, 13, 0@},
+  v4_int32 = @{0, 20657912, 11, 13@},
+  v2_int64 = @{88725056443645952, 55834574859@},
+  uint128 = 0x0000000d0000000b013b36f800000000
+@}
+ at end smallexample
+
+ at noindent
+To set values of such registers, you need to tell @value{GDBN} which
+view of the register you wish to change, as if you were assigning
+value to a @code{struct} member:
+
+ at smallexample
+ (@value{GDBP}) set $xmm1.uint128 = 0x000000000000000000000000FFFFFFFF
+ at end smallexample
+
+Normally, register values are relative to the selected stack frame
+(@pxref{Selection, ,Selecting a Frame}).  This means that you get the
+value that the register would contain if all stack frames farther in
+were exited and their saved registers restored.  In order to see the
+true contents of hardware registers, you must select the innermost
+frame (with @samp{frame 0}).
+
+However, @value{GDBN} must deduce where registers are saved, from the machine
+code generated by your compiler.  If some registers are not saved, or if
+ at value{GDBN} is unable to locate the saved registers, the selected stack
+frame makes no difference.
+
+ at node Floating Point Hardware
+ at section Floating Point Hardware
+ at cindex floating point
+
+Depending on the configuration, @value{GDBN} may be able to give
+you more information about the status of the floating point hardware.
+
+ at table @code
+ at kindex info float
+ at item info float
+Display hardware-dependent information about the floating
+point unit.  The exact contents and layout vary depending on the
+floating point chip.  Currently, @samp{info float} is supported on
+the ARM and x86 machines.
+ at end table
+
+ at node Vector Unit
+ at section Vector Unit
+ at cindex vector unit
+
+Depending on the configuration, @value{GDBN} may be able to give you
+more information about the status of the vector unit.
+
+ at table @code
+ at kindex info vector
+ at item info vector
+Display information about the vector unit.  The exact contents and
+layout vary depending on the hardware.
+ at end table
+
+ at node OS Information
+ at section Operating System Auxiliary Information
+ at cindex OS information
+
+ at value{GDBN} provides interfaces to useful OS facilities that can help
+you debug your program.
+
+ at cindex @code{ptrace} system call
+ at cindex @code{struct user} contents
+When @value{GDBN} runs on a @dfn{Posix system} (such as GNU or Unix
+machines), it interfaces with the inferior via the @code{ptrace}
+system call.  The operating system creates a special sata structure,
+called @code{struct user}, for this interface.  You can use the
+command @code{info udot} to display the contents of this data
+structure.
+
+ at table @code
+ at item info udot
+ at kindex info udot
+Display the contents of the @code{struct user} maintained by the OS
+kernel for the program being debugged.  @value{GDBN} displays the
+contents of @code{struct user} as a list of hex numbers, similar to
+the @code{examine} command.
+ at end table
+
+ at cindex auxiliary vector
+ at cindex vector, auxiliary
+Some operating systems supply an @dfn{auxiliary vector} to programs at
+startup.  This is akin to the arguments and environment that you
+specify for a program, but contains a system-dependent variety of
+binary values that tell system libraries important details about the
+hardware, operating system, and process.  Each value's purpose is
+identified by an integer tag; the meanings are well-known but system-specific.
+Depending on the configuration and operating system facilities,
+ at value{GDBN} may be able to show you this information.  For remote
+targets, this functionality may further depend on the remote stub's
+support of the @samp{qXfer:auxv:read} packet, see
+ at ref{qXfer auxiliary vector read}.
+
+ at table @code
+ at kindex info auxv
+ at item info auxv
+Display the auxiliary vector of the inferior, which can be either a
+live process or a core dump file.  @value{GDBN} prints each tag value
+numerically, and also shows names and text descriptions for recognized
+tags.  Some values in the vector are numbers, some bit masks, and some
+pointers to strings or other data.  @value{GDBN} displays each value in the
+most appropriate form for a recognized tag, and in hexadecimal for
+an unrecognized tag.
+ at end table
+
+On some targets, @value{GDBN} can access operating system-specific
+information and show it to you.  The types of information available
+will differ depending on the type of operating system running on the
+target.  The mechanism used to fetch the data is described in
+ at ref{Operating System Information}.  For remote targets, this
+functionality depends on the remote stub's support of the
+ at samp{qXfer:osdata:read} packet, see @ref{qXfer osdata read}.
+
+ at table @code
+ at kindex info os
+ at item info os @var{infotype}
+
+Display OS information of the requested type.
+
+On @sc{gnu}/Linux, the following values of @var{infotype} are valid:
+
+ at anchor{linux info os infotypes}
+ at table @code
+ at kindex info os processes
+ at item processes
+Display the list of processes on the target.  For each process,
+ at value{GDBN} prints the process identifier, the name of the user, the
+command corresponding to the process, and the list of processor cores
+that the process is currently running on.  (To understand what these
+properties mean, for this and the following info types, please consult
+the general @sc{gnu}/Linux documentation.)
+
+ at kindex info os procgroups
+ at item procgroups
+Display the list of process groups on the target.  For each process,
+ at value{GDBN} prints the identifier of the process group that it belongs
+to, the command corresponding to the process group leader, the process
+identifier, and the command line of the process.  The list is sorted
+first by the process group identifier, then by the process identifier,
+so that processes belonging to the same process group are grouped together
+and the process group leader is listed first.
+
+ at kindex info os threads
+ at item threads
+Display the list of threads running on the target.  For each thread,
+ at value{GDBN} prints the identifier of the process that the thread
+belongs to, the command of the process, the thread identifier, and the
+processor core that it is currently running on.  The main thread of a
+process is not listed.
+
+ at kindex info os files
+ at item files
+Display the list of open file descriptors on the target.  For each
+file descriptor, @value{GDBN} prints the identifier of the process
+owning the descriptor, the command of the owning process, the value
+of the descriptor, and the target of the descriptor.
+
+ at kindex info os sockets
+ at item sockets
+Display the list of Internet-domain sockets on the target.  For each
+socket, @value{GDBN} prints the address and port of the local and
+remote endpoints, the current state of the connection, the creator of
+the socket, the IP address family of the socket, and the type of the
+connection.
+
+ at kindex info os shm
+ at item shm
+Display the list of all System V shared-memory regions on the target.
+For each shared-memory region, @value{GDBN} prints the region key,
+the shared-memory identifier, the access permissions, the size of the
+region, the process that created the region, the process that last
+attached to or detached from the region, the current number of live
+attaches to the region, and the times at which the region was last
+attached to, detach from, and changed.
+
+ at kindex info os semaphores
+ at item semaphores
+Display the list of all System V semaphore sets on the target.  For each
+semaphore set, @value{GDBN} prints the semaphore set key, the semaphore
+set identifier, the access permissions, the number of semaphores in the
+set, the user and group of the owner and creator of the semaphore set,
+and the times at which the semaphore set was operated upon and changed.
+
+ at kindex info os msg
+ at item msg
+Display the list of all System V message queues on the target.  For each
+message queue, @value{GDBN} prints the message queue key, the message
+queue identifier, the access permissions, the current number of bytes
+on the queue, the current number of messages on the queue, the processes
+that last sent and received a message on the queue, the user and group
+of the owner and creator of the message queue, the times at which a
+message was last sent and received on the queue, and the time at which
+the message queue was last changed.
+
+ at kindex info os modules
+ at item modules
+Display the list of all loaded kernel modules on the target.  For each
+module, @value{GDBN} prints the module name, the size of the module in
+bytes, the number of times the module is used, the dependencies of the
+module, the status of the module, and the address of the loaded module
+in memory.
+ at end table
+
+ at item info os
+If @var{infotype} is omitted, then list the possible values for
+ at var{infotype} and the kind of OS information available for each
+ at var{infotype}.  If the target does not return a list of possible
+types, this command will report an error.
+ at end table
+
+ at node Memory Region Attributes
+ at section Memory Region Attributes
+ at cindex memory region attributes
+
+ at dfn{Memory region attributes} allow you to describe special handling
+required by regions of your target's memory.  @value{GDBN} uses
+attributes to determine whether to allow certain types of memory
+accesses; whether to use specific width accesses; and whether to cache
+target memory.  By default the description of memory regions is
+fetched from the target (if the current target supports this), but the
+user can override the fetched regions.
+
+Defined memory regions can be individually enabled and disabled.  When a
+memory region is disabled, @value{GDBN} uses the default attributes when
+accessing memory in that region.  Similarly, if no memory regions have
+been defined, @value{GDBN} uses the default attributes when accessing
+all memory.
+
+When a memory region is defined, it is given a number to identify it;
+to enable, disable, or remove a memory region, you specify that number.
+
+ at table @code
+ at kindex mem
+ at item mem @var{lower} @var{upper} @var{attributes}@dots{}
+Define a memory region bounded by @var{lower} and @var{upper} with
+attributes @var{attributes}@dots{}, and add it to the list of regions
+monitored by @value{GDBN}.  Note that @var{upper} == 0 is a special
+case: it is treated as the target's maximum memory address.
+(0xffff on 16 bit targets, 0xffffffff on 32 bit targets, etc.)
+
+ at item mem auto
+Discard any user changes to the memory regions and use target-supplied
+regions, if available, or no regions if the target does not support.
+
+ at kindex delete mem
+ at item delete mem @var{nums}@dots{}
+Remove memory regions @var{nums}@dots{} from the list of regions
+monitored by @value{GDBN}.
+
+ at kindex disable mem
+ at item disable mem @var{nums}@dots{}
+Disable monitoring of memory regions @var{nums}@dots{}.
+A disabled memory region is not forgotten.
+It may be enabled again later.
+
+ at kindex enable mem
+ at item enable mem @var{nums}@dots{}
+Enable monitoring of memory regions @var{nums}@dots{}.
+
+ at kindex info mem
+ at item info mem
+Print a table of all defined memory regions, with the following columns
+for each region:
+
+ at table @emph
+ at item Memory Region Number
+ at item Enabled or Disabled.
+Enabled memory regions are marked with @samp{y}.
+Disabled memory regions are marked with @samp{n}.
+
+ at item Lo Address
+The address defining the inclusive lower bound of the memory region.
+
+ at item Hi Address
+The address defining the exclusive upper bound of the memory region.
+
+ at item Attributes
+The list of attributes set for this memory region.
+ at end table
+ at end table
+
+
+ at subsection Attributes
+
+ at subsubsection Memory Access Mode
+The access mode attributes set whether @value{GDBN} may make read or
+write accesses to a memory region.
+
+While these attributes prevent @value{GDBN} from performing invalid
+memory accesses, they do nothing to prevent the target system, I/O DMA,
+etc.@: from accessing memory.
+
+ at table @code
+ at item ro
+Memory is read only.
+ at item wo
+Memory is write only.
+ at item rw
+Memory is read/write.  This is the default.
+ at end table
+
+ at subsubsection Memory Access Size
+The access size attribute tells @value{GDBN} to use specific sized
+accesses in the memory region.  Often memory mapped device registers
+require specific sized accesses.  If no access size attribute is
+specified, @value{GDBN} may use accesses of any size.
+
+ at table @code
+ at item 8
+Use 8 bit memory accesses.
+ at item 16
+Use 16 bit memory accesses.
+ at item 32
+Use 32 bit memory accesses.
+ at item 64
+Use 64 bit memory accesses.
+ at end table
+
+ at c @subsubsection Hardware/Software Breakpoints
+ at c The hardware/software breakpoint attributes set whether @value{GDBN}
+ at c will use hardware or software breakpoints for the internal breakpoints
+ at c used by the step, next, finish, until, etc. commands.
+ at c
+ at c @table @code
+ at c @item hwbreak
+ at c Always use hardware breakpoints
+ at c @item swbreak (default)
+ at c @end table
+
+ at subsubsection Data Cache
+The data cache attributes set whether @value{GDBN} will cache target
+memory.  While this generally improves performance by reducing debug
+protocol overhead, it can lead to incorrect results because @value{GDBN}
+does not know about volatile variables or memory mapped device
+registers.
+
+ at table @code
+ at item cache
+Enable @value{GDBN} to cache target memory.
+ at item nocache
+Disable @value{GDBN} from caching target memory.  This is the default.
+ at end table
+
+ at subsection Memory Access Checking
+ at value{GDBN} can be instructed to refuse accesses to memory that is
+not explicitly described.  This can be useful if accessing such
+regions has undesired effects for a specific target, or to provide
+better error checking.  The following commands control this behaviour.
+
+ at table @code
+ at kindex set mem inaccessible-by-default
+ at item set mem inaccessible-by-default [on|off]
+If @code{on} is specified, make  @value{GDBN} treat memory not
+explicitly described by the memory ranges as non-existent and refuse accesses
+to such memory.  The checks are only performed if there's at least one
+memory range defined.  If @code{off} is specified, make @value{GDBN}
+treat the memory not explicitly described by the memory ranges as RAM.
+The default value is @code{on}.
+ at kindex show mem inaccessible-by-default
+ at item show mem inaccessible-by-default
+Show the current handling of accesses to unknown memory.
+ at end table
+
+
+ at c @subsubsection Memory Write Verification
+ at c The memory write verification attributes set whether @value{GDBN}
+ at c will re-reads data after each write to verify the write was successful.
+ at c
+ at c @table @code
+ at c @item verify
+ at c @item noverify (default)
+ at c @end table
+
+ at node Dump/Restore Files
+ at section Copy Between Memory and a File
+ at cindex dump/restore files
+ at cindex append data to a file
+ at cindex dump data to a file
+ at cindex restore data from a file
+
+You can use the commands @code{dump}, @code{append}, and
+ at code{restore} to copy data between target memory and a file.  The
+ at code{dump} and @code{append} commands write data to a file, and the
+ at code{restore} command reads data from a file back into the inferior's
+memory.  Files may be in binary, Motorola S-record, Intel hex, or
+Tektronix Hex format; however, @value{GDBN} can only append to binary
+files.
+
+ at table @code
+
+ at kindex dump
+ at item dump @r{[}@var{format}@r{]} memory @var{filename} @var{start_addr} @var{end_addr}
+ at itemx dump @r{[}@var{format}@r{]} value @var{filename} @var{expr}
+Dump the contents of memory from @var{start_addr} to @var{end_addr},
+or the value of @var{expr}, to @var{filename} in the given format.
+
+The @var{format} parameter may be any one of:
+ at table @code
+ at item binary
+Raw binary form.
+ at item ihex
+Intel hex format.
+ at item srec
+Motorola S-record format.
+ at item tekhex
+Tektronix Hex format.
+ at end table
+
+ at value{GDBN} uses the same definitions of these formats as the
+ at sc{gnu} binary utilities, like @samp{objdump} and @samp{objcopy}.  If
+ at var{format} is omitted, @value{GDBN} dumps the data in raw binary
+form.
+
+ at kindex append
+ at item append @r{[}binary at r{]} memory @var{filename} @var{start_addr} @var{end_addr}
+ at itemx append @r{[}binary at r{]} value @var{filename} @var{expr}
+Append the contents of memory from @var{start_addr} to @var{end_addr},
+or the value of @var{expr}, to the file @var{filename}, in raw binary form.
+(@value{GDBN} can only append data to files in raw binary form.)
+
+ at kindex restore
+ at item restore @var{filename} @r{[}binary at r{]} @var{bias} @var{start} @var{end}
+Restore the contents of file @var{filename} into memory.  The
+ at code{restore} command can automatically recognize any known @sc{bfd}
+file format, except for raw binary.  To restore a raw binary file you
+must specify the optional keyword @code{binary} after the filename.
+
+If @var{bias} is non-zero, its value will be added to the addresses
+contained in the file.  Binary files always start at address zero, so
+they will be restored at address @var{bias}.  Other bfd files have
+a built-in location; they will be restored at offset @var{bias}
+from that location.
+
+If @var{start} and/or @var{end} are non-zero, then only data between
+file offset @var{start} and file offset @var{end} will be restored.
+These offsets are relative to the addresses in the file, before
+the @var{bias} argument is applied.
+
+ at end table
+
+ at node Core File Generation
+ at section How to Produce a Core File from Your Program
+ at cindex dump core from inferior
+
+A @dfn{core file} or @dfn{core dump} is a file that records the memory
+image of a running process and its process status (register values
+etc.).  Its primary use is post-mortem debugging of a program that
+crashed while it ran outside a debugger.  A program that crashes
+automatically produces a core file, unless this feature is disabled by
+the user.  @xref{Files}, for information on invoking @value{GDBN} in
+the post-mortem debugging mode.
+
+Occasionally, you may wish to produce a core file of the program you
+are debugging in order to preserve a snapshot of its state.
+ at value{GDBN} has a special command for that.
+
+ at table @code
+ at kindex gcore
+ at kindex generate-core-file
+ at item generate-core-file [@var{file}]
+ at itemx gcore [@var{file}]
+Produce a core dump of the inferior process.  The optional argument
+ at var{file} specifies the file name where to put the core dump.  If not
+specified, the file name defaults to @file{core. at var{pid}}, where
+ at var{pid} is the inferior process ID.
+
+Note that this command is implemented only for some systems (as of
+this writing, @sc{gnu}/Linux, FreeBSD, Solaris, Unixware, and S390).
+ at end table
+
+ at node Character Sets
+ at section Character Sets
+ at cindex character sets
+ at cindex charset
+ at cindex translating between character sets
+ at cindex host character set
+ at cindex target character set
+
+If the program you are debugging uses a different character set to
+represent characters and strings than the one @value{GDBN} uses itself,
+ at value{GDBN} can automatically translate between the character sets for
+you.  The character set @value{GDBN} uses we call the @dfn{host
+character set}; the one the inferior program uses we call the
+ at dfn{target character set}.
+
+For example, if you are running @value{GDBN} on a @sc{gnu}/Linux system, which
+uses the ISO Latin 1 character set, but you are using @value{GDBN}'s
+remote protocol (@pxref{Remote Debugging}) to debug a program
+running on an IBM mainframe, which uses the @sc{ebcdic} character set,
+then the host character set is Latin-1, and the target character set is
+ at sc{ebcdic}.  If you give @value{GDBN} the command @code{set
+target-charset EBCDIC-US}, then @value{GDBN} translates between
+ at sc{ebcdic} and Latin 1 as you print character or string values, or use
+character and string literals in expressions.
+
+ at value{GDBN} has no way to automatically recognize which character set
+the inferior program uses; you must tell it, using the @code{set
+target-charset} command, described below.
+
+Here are the commands for controlling @value{GDBN}'s character set
+support:
+
+ at table @code
+ at item set target-charset @var{charset}
+ at kindex set target-charset
+Set the current target character set to @var{charset}.  To display the
+list of supported target character sets, type
+ at kbd{@w{set target-charset @key{TAB}@key{TAB}}}.
+
+ at item set host-charset @var{charset}
+ at kindex set host-charset
+Set the current host character set to @var{charset}.
+
+By default, @value{GDBN} uses a host character set appropriate to the
+system it is running on; you can override that default using the
+ at code{set host-charset} command.  On some systems, @value{GDBN} cannot
+automatically determine the appropriate host character set.  In this
+case, @value{GDBN} uses @samp{UTF-8}.
+
+ at value{GDBN} can only use certain character sets as its host character
+set.  If you type @kbd{@w{set host-charset @key{TAB}@key{TAB}}},
+ at value{GDBN} will list the host character sets it supports.
+
+ at item set charset @var{charset}
+ at kindex set charset
+Set the current host and target character sets to @var{charset}.  As
+above, if you type @kbd{@w{set charset @key{TAB}@key{TAB}}},
+ at value{GDBN} will list the names of the character sets that can be used
+for both host and target.
+
+ at item show charset
+ at kindex show charset
+Show the names of the current host and target character sets.
+
+ at item show host-charset
+ at kindex show host-charset
+Show the name of the current host character set.
+
+ at item show target-charset
+ at kindex show target-charset
+Show the name of the current target character set.
+
+ at item set target-wide-charset @var{charset}
+ at kindex set target-wide-charset
+Set the current target's wide character set to @var{charset}.  This is
+the character set used by the target's @code{wchar_t} type.  To
+display the list of supported wide character sets, type
+ at kbd{@w{set target-wide-charset @key{TAB}@key{TAB}}}.
+
+ at item show target-wide-charset
+ at kindex show target-wide-charset
+Show the name of the current target's wide character set.
+ at end table
+
+Here is an example of @value{GDBN}'s character set support in action.
+Assume that the following source code has been placed in the file
+ at file{charset-test.c}:
+
+ at smallexample
+#include <stdio.h>
+
+char ascii_hello[]
+  = @{72, 101, 108, 108, 111, 44, 32, 119,
+     111, 114, 108, 100, 33, 10, 0@};
+char ibm1047_hello[]
+  = @{200, 133, 147, 147, 150, 107, 64, 166,
+     150, 153, 147, 132, 90, 37, 0@};
+
+main ()
+@{
+  printf ("Hello, world!\n");
+@}
+ at end smallexample
+
+In this program, @code{ascii_hello} and @code{ibm1047_hello} are arrays
+containing the string @samp{Hello, world!} followed by a newline,
+encoded in the @sc{ascii} and @sc{ibm1047} character sets.
+
+We compile the program, and invoke the debugger on it:
+
+ at smallexample
+$ gcc -g charset-test.c -o charset-test
+$ gdb -nw charset-test
+GNU gdb 2001-12-19-cvs
+Copyright 2001 Free Software Foundation, Inc.
+ at dots{}
+(@value{GDBP})
+ at end smallexample
+
+We can use the @code{show charset} command to see what character sets
+ at value{GDBN} is currently using to interpret and display characters and
+strings:
+
+ at smallexample
+(@value{GDBP}) show charset
+The current host and target character set is `ISO-8859-1'.
+(@value{GDBP})
+ at end smallexample
+
+For the sake of printing this manual, let's use @sc{ascii} as our
+initial character set:
+ at smallexample
+(@value{GDBP}) set charset ASCII
+(@value{GDBP}) show charset
+The current host and target character set is `ASCII'.
+(@value{GDBP})
+ at end smallexample
+
+Let's assume that @sc{ascii} is indeed the correct character set for our
+host system --- in other words, let's assume that if @value{GDBN} prints
+characters using the @sc{ascii} character set, our terminal will display
+them properly.  Since our current target character set is also
+ at sc{ascii}, the contents of @code{ascii_hello} print legibly:
+
+ at smallexample
+(@value{GDBP}) print ascii_hello
+$1 = 0x401698 "Hello, world!\n"
+(@value{GDBP}) print ascii_hello[0]
+$2 = 72 'H'
+(@value{GDBP})
+ at end smallexample
+
+ at value{GDBN} uses the target character set for character and string
+literals you use in expressions:
+
+ at smallexample
+(@value{GDBP}) print '+'
+$3 = 43 '+'
+(@value{GDBP})
+ at end smallexample
+
+The @sc{ascii} character set uses the number 43 to encode the @samp{+}
+character.
+
+ at value{GDBN} relies on the user to tell it which character set the
+target program uses.  If we print @code{ibm1047_hello} while our target
+character set is still @sc{ascii}, we get jibberish:
+
+ at smallexample
+(@value{GDBP}) print ibm1047_hello
+$4 = 0x4016a8 "\310\205\223\223\226k@@\246\226\231\223\204Z%"
+(@value{GDBP}) print ibm1047_hello[0]
+$5 = 200 '\310'
+(@value{GDBP})
+ at end smallexample
+
+If we invoke the @code{set target-charset} followed by @key{TAB}@key{TAB},
+ at value{GDBN} tells us the character sets it supports:
+
+ at smallexample
+(@value{GDBP}) set target-charset
+ASCII       EBCDIC-US   IBM1047     ISO-8859-1
+(@value{GDBP}) set target-charset
+ at end smallexample
+
+We can select @sc{ibm1047} as our target character set, and examine the
+program's strings again.  Now the @sc{ascii} string is wrong, but
+ at value{GDBN} translates the contents of @code{ibm1047_hello} from the
+target character set, @sc{ibm1047}, to the host character set,
+ at sc{ascii}, and they display correctly:
+
+ at smallexample
+(@value{GDBP}) set target-charset IBM1047
+(@value{GDBP}) show charset
+The current host character set is `ASCII'.
+The current target character set is `IBM1047'.
+(@value{GDBP}) print ascii_hello
+$6 = 0x401698 "\110\145%%?\054\040\167?\162%\144\041\012"
+(@value{GDBP}) print ascii_hello[0]
+$7 = 72 '\110'
+(@value{GDBP}) print ibm1047_hello
+$8 = 0x4016a8 "Hello, world!\n"
+(@value{GDBP}) print ibm1047_hello[0]
+$9 = 200 'H'
+(@value{GDBP})
+ at end smallexample
+
+As above, @value{GDBN} uses the target character set for character and
+string literals you use in expressions:
+
+ at smallexample
+(@value{GDBP}) print '+'
+$10 = 78 '+'
+(@value{GDBP})
+ at end smallexample
+
+The @sc{ibm1047} character set uses the number 78 to encode the @samp{+}
+character.
+
+ at node Caching Remote Data
+ at section Caching Data of Remote Targets
+ at cindex caching data of remote targets
+
+ at value{GDBN} caches data exchanged between the debugger and a
+remote target (@pxref{Remote Debugging}).  Such caching generally improves
+performance, because it reduces the overhead of the remote protocol by
+bundling memory reads and writes into large chunks.  Unfortunately, simply
+caching everything would lead to incorrect results, since @value{GDBN} 
+does not necessarily know anything about volatile values, memory-mapped I/O
+addresses, etc.  Furthermore, in non-stop mode (@pxref{Non-Stop Mode})
+memory can be changed @emph{while} a gdb command is executing.
+Therefore, by default, @value{GDBN} only caches data
+known to be on the stack at footnote{In non-stop mode, it is moderately
+rare for a running thread to modify the stack of a stopped thread
+in a way that would interfere with a backtrace, and caching of
+stack reads provides a significant speed up of remote backtraces.}.
+Other regions of memory can be explicitly marked as
+cacheable; see @pxref{Memory Region Attributes}.
+
+ at table @code
+ at kindex set remotecache
+ at item set remotecache on
+ at itemx set remotecache off
+This option no longer does anything; it exists for compatibility
+with old scripts.
+
+ at kindex show remotecache
+ at item show remotecache
+Show the current state of the obsolete remotecache flag.
+
+ at kindex set stack-cache
+ at item set stack-cache on
+ at itemx set stack-cache off
+Enable or disable caching of stack accesses.  When @code{ON}, use
+caching.  By default, this option is @code{ON}.
+
+ at kindex show stack-cache
+ at item show stack-cache
+Show the current state of data caching for memory accesses.
+
+ at kindex info dcache
+ at item info dcache @r{[}line at r{]}
+Print the information about the data cache performance.  The
+information displayed includes the dcache width and depth, and for
+each cache line, its number, address, and how many times it was
+referenced.  This command is useful for debugging the data cache
+operation.
+
+If a line number is specified, the contents of that line will be
+printed in hex.
+
+ at item set dcache size @var{size}
+ at cindex dcache size
+ at kindex set dcache size
+Set maximum number of entries in dcache (dcache depth above).
+
+ at item set dcache line-size @var{line-size}
+ at cindex dcache line-size
+ at kindex set dcache line-size
+Set number of bytes each dcache entry caches (dcache width above).
+Must be a power of 2.
+
+ at item show dcache size
+ at kindex show dcache size
+Show maximum number of dcache entries.  See also @ref{Caching Remote Data, info dcache}.
+
+ at item show dcache line-size
+ at kindex show dcache line-size
+Show default size of dcache lines.  See also @ref{Caching Remote Data, info dcache}.
+
+ at end table
+
+ at node Searching Memory
+ at section Search Memory
+ at cindex searching memory
+
+Memory can be searched for a particular sequence of bytes with the
+ at code{find} command.
+
+ at table @code
+ at kindex find
+ at item find @r{[}/@var{sn}@r{]} @var{start_addr}, + at var{len}, @var{val1} @r{[}, @var{val2}, @dots{}@r{]}
+ at itemx find @r{[}/@var{sn}@r{]} @var{start_addr}, @var{end_addr}, @var{val1} @r{[}, @var{val2}, @dots{}@r{]}
+Search memory for the sequence of bytes specified by @var{val1}, @var{val2},
+etc.  The search begins at address @var{start_addr} and continues for either
+ at var{len} bytes or through to @var{end_addr} inclusive.
+ at end table
+
+ at var{s} and @var{n} are optional parameters.
+They may be specified in either order, apart or together.
+
+ at table @r
+ at item @var{s}, search query size
+The size of each search query value.
+
+ at table @code
+ at item b
+bytes
+ at item h
+halfwords (two bytes)
+ at item w
+words (four bytes)
+ at item g
+giant words (eight bytes)
+ at end table
+
+All values are interpreted in the current language.
+This means, for example, that if the current source language is C/C at t{++}
+then searching for the string ``hello'' includes the trailing '\0'.
+
+If the value size is not specified, it is taken from the
+value's type in the current language.
+This is useful when one wants to specify the search
+pattern as a mixture of types.
+Note that this means, for example, that in the case of C-like languages
+a search for an untyped 0x42 will search for @samp{(int) 0x42}
+which is typically four bytes.
+
+ at item @var{n}, maximum number of finds
+The maximum number of matches to print.  The default is to print all finds.
+ at end table
+
+You can use strings as search values.  Quote them with double-quotes
+ (@code{"}).
+The string value is copied into the search pattern byte by byte,
+regardless of the endianness of the target and the size specification.
+
+The address of each match found is printed as well as a count of the
+number of matches found.
+
+The address of the last value found is stored in convenience variable
+ at samp{$_}.
+A count of the number of matches is stored in @samp{$numfound}.
+
+For example, if stopped at the @code{printf} in this function:
+
+ at smallexample
+void
+hello ()
+@{
+  static char hello[] = "hello-hello";
+  static struct @{ char c; short s; int i; @}
+    __attribute__ ((packed)) mixed
+    = @{ 'c', 0x1234, 0x87654321 @};
+  printf ("%s\n", hello);
+@}
+ at end smallexample
+
+ at noindent
+you get during debugging:
+
+ at smallexample
+(gdb) find &hello[0], +sizeof(hello), "hello"
+0x804956d <hello.1620+6>
+1 pattern found
+(gdb) find &hello[0], +sizeof(hello), 'h', 'e', 'l', 'l', 'o'
+0x8049567 <hello.1620>
+0x804956d <hello.1620+6>
+2 patterns found
+(gdb) find /b1 &hello[0], +sizeof(hello), 'h', 0x65, 'l'
+0x8049567 <hello.1620>
+1 pattern found
+(gdb) find &mixed, +sizeof(mixed), (char) 'c', (short) 0x1234, (int) 0x87654321
+0x8049560 <mixed.1625>
+1 pattern found
+(gdb) print $numfound
+$1 = 1
+(gdb) print $_
+$2 = (void *) 0x8049560
+ at end smallexample
+
+ at node Optimized Code
+ at chapter Debugging Optimized Code
+ at cindex optimized code, debugging
+ at cindex debugging optimized code
+
+Almost all compilers support optimization.  With optimization
+disabled, the compiler generates assembly code that corresponds
+directly to your source code, in a simplistic way.  As the compiler
+applies more powerful optimizations, the generated assembly code
+diverges from your original source code.  With help from debugging
+information generated by the compiler, @value{GDBN} can map from
+the running program back to constructs from your original source.
+
+ at value{GDBN} is more accurate with optimization disabled.  If you
+can recompile without optimization, it is easier to follow the
+progress of your program during debugging.  But, there are many cases
+where you may need to debug an optimized version.
+
+When you debug a program compiled with @samp{-g -O}, remember that the
+optimizer has rearranged your code; the debugger shows you what is
+really there.  Do not be too surprised when the execution path does not
+exactly match your source file!  An extreme example: if you define a
+variable, but never use it, @value{GDBN} never sees that
+variable---because the compiler optimizes it out of existence.
+
+Some things do not work as well with @samp{-g -O} as with just
+ at samp{-g}, particularly on machines with instruction scheduling.  If in
+doubt, recompile with @samp{-g} alone, and if this fixes the problem,
+please report it to us as a bug (including a test case!).
+ at xref{Variables}, for more information about debugging optimized code.
+
+ at menu
+* Inline Functions::            How @value{GDBN} presents inlining
+* Tail Call Frames::            @value{GDBN} analysis of jumps to functions
+ at end menu
+
+ at node Inline Functions
+ at section Inline Functions
+ at cindex inline functions, debugging
+
+ at dfn{Inlining} is an optimization that inserts a copy of the function
+body directly at each call site, instead of jumping to a shared
+routine.  @value{GDBN} displays inlined functions just like
+non-inlined functions.  They appear in backtraces.  You can view their
+arguments and local variables, step into them with @code{step}, skip
+them with @code{next}, and escape from them with @code{finish}.
+You can check whether a function was inlined by using the
+ at code{info frame} command.
+
+For @value{GDBN} to support inlined functions, the compiler must
+record information about inlining in the debug information ---
+ at value{NGCC} using the @sc{dwarf 2} format does this, and several
+other compilers do also.  @value{GDBN} only supports inlined functions
+when using @sc{dwarf 2}.  Versions of @value{NGCC} before 4.1
+do not emit two required attributes (@samp{DW_AT_call_file} and
+ at samp{DW_AT_call_line}); @value{GDBN} does not display inlined
+function calls with earlier versions of @value{NGCC}.  It instead
+displays the arguments and local variables of inlined functions as
+local variables in the caller.
+
+The body of an inlined function is directly included at its call site;
+unlike a non-inlined function, there are no instructions devoted to
+the call.  @value{GDBN} still pretends that the call site and the
+start of the inlined function are different instructions.  Stepping to
+the call site shows the call site, and then stepping again shows
+the first line of the inlined function, even though no additional
+instructions are executed.
+
+This makes source-level debugging much clearer; you can see both the
+context of the call and then the effect of the call.  Only stepping by
+a single instruction using @code{stepi} or @code{nexti} does not do
+this; single instruction steps always show the inlined body.
+
+There are some ways that @value{GDBN} does not pretend that inlined
+function calls are the same as normal calls:
+
+ at itemize @bullet
+ at item
+Setting breakpoints at the call site of an inlined function may not
+work, because the call site does not contain any code.  @value{GDBN}
+may incorrectly move the breakpoint to the next line of the enclosing
+function, after the call.  This limitation will be removed in a future
+version of @value{GDBN}; until then, set a breakpoint on an earlier line
+or inside the inlined function instead.
+
+ at item
+ at value{GDBN} cannot locate the return value of inlined calls after
+using the @code{finish} command.  This is a limitation of compiler-generated
+debugging information; after @code{finish}, you can step to the next line
+and print a variable where your program stored the return value.
+
+ at end itemize
+
+ at node Tail Call Frames
+ at section Tail Call Frames
+ at cindex tail call frames, debugging
+
+Function @code{B} can call function @code{C} in its very last statement.  In
+unoptimized compilation the call of @code{C} is immediately followed by return
+instruction at the end of @code{B} code.  Optimizing compiler may replace the
+call and return in function @code{B} into one jump to function @code{C}
+instead.  Such use of a jump instruction is called @dfn{tail call}.
+
+During execution of function @code{C}, there will be no indication in the
+function call stack frames that it was tail-called from @code{B}.  If function
+ at code{A} regularly calls function @code{B} which tail-calls function @code{C},
+then @value{GDBN} will see @code{A} as the caller of @code{C}.  However, in
+some cases @value{GDBN} can determine that @code{C} was tail-called from
+ at code{B}, and it will then create fictitious call frame for that, with the
+return address set up as if @code{B} called @code{C} normally.
+
+This functionality is currently supported only by DWARF 2 debugging format and
+the compiler has to produce @samp{DW_TAG_GNU_call_site} tags.  With
+ at value{NGCC}, you need to specify @option{-O -g} during compilation, to get
+this information.
+
+ at kbd{info frame} command (@pxref{Frame Info}) will indicate the tail call frame
+kind by text @code{tail call frame} such as in this sample @value{GDBN} output:
+
+ at smallexample
+(gdb) x/i $pc - 2
+   0x40066b <b(int, double)+11>: jmp 0x400640 <c(int, double)>
+(gdb) info frame
+Stack level 1, frame at 0x7fffffffda30:
+ rip = 0x40066d in b (amd64-entry-value.cc:59); saved rip 0x4004c5
+ tail call frame, caller of frame at 0x7fffffffda30
+ source language c++.
+ Arglist at unknown address.
+ Locals at unknown address, Previous frame's sp is 0x7fffffffda30
+ at end smallexample
+
+The detection of all the possible code path executions can find them ambiguous.
+There is no execution history stored (possible @ref{Reverse Execution} is never
+used for this purpose) and the last known caller could have reached the known
+callee by multiple different jump sequences.  In such case @value{GDBN} still
+tries to show at least all the unambiguous top tail callers and all the
+unambiguous bottom tail calees, if any.
+
+ at table @code
+ at anchor{set debug entry-values}
+ at item set debug entry-values
+ at kindex set debug entry-values
+When set to on, enables printing of analysis messages for both frame argument
+values at function entry and tail calls.  It will show all the possible valid
+tail calls code paths it has considered.  It will also print the intersection
+of them with the final unambiguous (possibly partial or even empty) code path
+result.
+
+ at item show debug entry-values
+ at kindex show debug entry-values
+Show the current state of analysis messages printing for both frame argument
+values at function entry and tail calls.
+ at end table
+
+The analysis messages for tail calls can for example show why the virtual tail
+call frame for function @code{c} has not been recognized (due to the indirect
+reference by variable @code{x}):
+
+ at smallexample
+static void __attribute__((noinline, noclone)) c (void);
+void (*x) (void) = c;
+static void __attribute__((noinline, noclone)) a (void) @{ x++; @}
+static void __attribute__((noinline, noclone)) c (void) @{ a (); @}
+int main (void) @{ x (); return 0; @}
+
+Breakpoint 1, DW_OP_GNU_entry_value resolving cannot find
+DW_TAG_GNU_call_site 0x40039a in main
+a () at t.c:3
+3	static void __attribute__((noinline, noclone)) a (void) @{ x++; @}
+(gdb) bt
+#0  a () at t.c:3
+#1  0x000000000040039a in main () at t.c:5
+ at end smallexample
+
+Another possibility is an ambiguous virtual tail call frames resolution:
+
+ at smallexample
+int i;
+static void __attribute__((noinline, noclone)) f (void) @{ i++; @}
+static void __attribute__((noinline, noclone)) e (void) @{ f (); @}
+static void __attribute__((noinline, noclone)) d (void) @{ f (); @}
+static void __attribute__((noinline, noclone)) c (void) @{ d (); @}
+static void __attribute__((noinline, noclone)) b (void)
+@{ if (i) c (); else e (); @}
+static void __attribute__((noinline, noclone)) a (void) @{ b (); @}
+int main (void) @{ a (); return 0; @}
+
+tailcall: initial: 0x4004d2(a) 0x4004ce(b) 0x4004b2(c) 0x4004a2(d)
+tailcall: compare: 0x4004d2(a) 0x4004cc(b) 0x400492(e)
+tailcall: reduced: 0x4004d2(a) |
+(gdb) bt
+#0  f () at t.c:2
+#1  0x00000000004004d2 in a () at t.c:8
+#2  0x0000000000400395 in main () at t.c:9
+ at end smallexample
+
+ at set CALLSEQ1A @code{main at value{ARROW}a at value{ARROW}b at value{ARROW}c at value{ARROW}d at value{ARROW}f}
+ at set CALLSEQ2A @code{main at value{ARROW}a at value{ARROW}b at value{ARROW}e at value{ARROW}f}
+
+ at c Convert CALLSEQ#A to CALLSEQ#B depending on HAVE_MAKEINFO_CLICK.
+ at ifset HAVE_MAKEINFO_CLICK
+ at set ARROW @click{}
+ at set CALLSEQ1B @clicksequence{@value{CALLSEQ1A}}
+ at set CALLSEQ2B @clicksequence{@value{CALLSEQ2A}}
+ at end ifset
+ at ifclear HAVE_MAKEINFO_CLICK
+ at set ARROW ->
+ at set CALLSEQ1B @value{CALLSEQ1A}
+ at set CALLSEQ2B @value{CALLSEQ2A}
+ at end ifclear
+
+Frames #0 and #2 are real, #1 is a virtual tail call frame.
+The code can have possible execution paths @value{CALLSEQ1B} or
+ at value{CALLSEQ2B}, @value{GDBN} cannot find which one from the inferior state.
+
+ at code{initial:} state shows some random possible calling sequence @value{GDBN}
+has found.  It then finds another possible calling sequcen - that one is
+prefixed by @code{compare:}.  The non-ambiguous intersection of these two is
+printed as the @code{reduced:} calling sequence.  That one could have many
+futher @code{compare:} and @code{reduced:} statements as long as there remain
+any non-ambiguous sequence entries.
+
+For the frame of function @code{b} in both cases there are different possible
+ at code{$pc} values (@code{0x4004cc} or @code{0x4004ce}), therefore this frame is
+also ambigous.  The only non-ambiguous frame is the one for function @code{a},
+therefore this one is displayed to the user while the ambiguous frames are
+omitted.
+
+There can be also reasons why printing of frame argument values at function
+entry may fail:
+
+ at smallexample
+int v;
+static void __attribute__((noinline, noclone)) c (int i) @{ v++; @}
+static void __attribute__((noinline, noclone)) a (int i);
+static void __attribute__((noinline, noclone)) b (int i) @{ a (i); @}
+static void __attribute__((noinline, noclone)) a (int i)
+@{ if (i) b (i - 1); else c (0); @}
+int main (void) @{ a (5); return 0; @}
+
+(gdb) bt
+#0  c (i=i@@entry=0) at t.c:2
+#1  0x0000000000400428 in a (DW_OP_GNU_entry_value resolving has found
+function "a" at 0x400420 can call itself via tail calls
+i=<optimized out>) at t.c:6
+#2  0x000000000040036e in main () at t.c:7
+ at end smallexample
+
+ at value{GDBN} cannot find out from the inferior state if and how many times did
+function @code{a} call itself (via function @code{b}) as these calls would be
+tail calls.  Such tail calls would modify thue @code{i} variable, therefore
+ at value{GDBN} cannot be sure the value it knows would be right - @value{GDBN}
+prints @code{<optimized out>} instead.
+
+ at node Macros
+ at chapter C Preprocessor Macros
+
+Some languages, such as C and C at t{++}, provide a way to define and invoke
+``preprocessor macros'' which expand into strings of tokens.
+ at value{GDBN} can evaluate expressions containing macro invocations, show
+the result of macro expansion, and show a macro's definition, including
+where it was defined.
+
+You may need to compile your program specially to provide @value{GDBN}
+with information about preprocessor macros.  Most compilers do not
+include macros in their debugging information, even when you compile
+with the @option{-g} flag.  @xref{Compilation}.
+
+A program may define a macro at one point, remove that definition later,
+and then provide a different definition after that.  Thus, at different
+points in the program, a macro may have different definitions, or have
+no definition at all.  If there is a current stack frame, @value{GDBN}
+uses the macros in scope at that frame's source code line.  Otherwise,
+ at value{GDBN} uses the macros in scope at the current listing location;
+see @ref{List}.
+
+Whenever @value{GDBN} evaluates an expression, it always expands any
+macro invocations present in the expression.  @value{GDBN} also provides
+the following commands for working with macros explicitly.
+
+ at table @code
+
+ at kindex macro expand
+ at cindex macro expansion, showing the results of preprocessor
+ at cindex preprocessor macro expansion, showing the results of
+ at cindex expanding preprocessor macros
+ at item macro expand @var{expression}
+ at itemx macro exp @var{expression}
+Show the results of expanding all preprocessor macro invocations in
+ at var{expression}.  Since @value{GDBN} simply expands macros, but does
+not parse the result, @var{expression} need not be a valid expression;
+it can be any string of tokens.
+
+ at kindex macro exp1
+ at item macro expand-once @var{expression}
+ at itemx macro exp1 @var{expression}
+ at cindex expand macro once
+ at i{(This command is not yet implemented.)}  Show the results of
+expanding those preprocessor macro invocations that appear explicitly in
+ at var{expression}.  Macro invocations appearing in that expansion are
+left unchanged.  This command allows you to see the effect of a
+particular macro more clearly, without being confused by further
+expansions.  Since @value{GDBN} simply expands macros, but does not
+parse the result, @var{expression} need not be a valid expression; it
+can be any string of tokens.
+
+ at kindex info macro
+ at cindex macro definition, showing
+ at cindex definition of a macro, showing
+ at cindex macros, from debug info
+ at item info macro [-a|-all] [--] @var{macro}
+Show the current definition or all definitions of the named @var{macro},
+and describe the source location or compiler command-line where that
+definition was established.  The optional double dash is to signify the end of
+argument processing and the beginning of @var{macro} for non C-like macros where
+the macro may begin with a hyphen.
+
+ at kindex info macros
+ at item info macros @var{linespec}
+Show all macro definitions that are in effect at the location specified
+by @var{linespec},  and describe the source location or compiler
+command-line where those definitions were established.
+
+ at kindex macro define
+ at cindex user-defined macros
+ at cindex defining macros interactively
+ at cindex macros, user-defined
+ at item macro define @var{macro} @var{replacement-list}
+ at itemx macro define @var{macro}(@var{arglist}) @var{replacement-list}
+Introduce a definition for a preprocessor macro named @var{macro},
+invocations of which are replaced by the tokens given in
+ at var{replacement-list}.  The first form of this command defines an
+``object-like'' macro, which takes no arguments; the second form
+defines a ``function-like'' macro, which takes the arguments given in
+ at var{arglist}.
+
+A definition introduced by this command is in scope in every
+expression evaluated in @value{GDBN}, until it is removed with the
+ at code{macro undef} command, described below.  The definition overrides
+all definitions for @var{macro} present in the program being debugged,
+as well as any previous user-supplied definition.
+
+ at kindex macro undef
+ at item macro undef @var{macro}
+Remove any user-supplied definition for the macro named @var{macro}.
+This command only affects definitions provided with the @code{macro
+define} command, described above; it cannot remove definitions present
+in the program being debugged.
+
+ at kindex macro list
+ at item macro list
+List all the macros defined using the @code{macro define} command.
+ at end table
+
+ at cindex macros, example of debugging with
+Here is a transcript showing the above commands in action.  First, we
+show our source files:
+
+ at smallexample
+$ cat sample.c
+#include <stdio.h>
+#include "sample.h"
+
+#define M 42
+#define ADD(x) (M + x)
+
+main ()
+@{
+#define N 28
+  printf ("Hello, world!\n");
+#undef N
+  printf ("We're so creative.\n");
+#define N 1729
+  printf ("Goodbye, world!\n");
+@}
+$ cat sample.h
+#define Q <
+$
+ at end smallexample
+
+Now, we compile the program using the @sc{gnu} C compiler,
+ at value{NGCC}.  We pass the @option{-gdwarf-2}@footnote{This is the
+minimum.  Recent versions of @value{NGCC} support @option{-gdwarf-3}
+and @option{-gdwarf-4}; we recommend always choosing the most recent
+version of DWARF.} @emph{and} @option{-g3} flags to ensure the compiler
+includes information about preprocessor macros in the debugging
+information.
+
+ at smallexample
+$ gcc -gdwarf-2 -g3 sample.c -o sample
+$
+ at end smallexample
+
+Now, we start @value{GDBN} on our sample program:
+
+ at smallexample
+$ gdb -nw sample
+GNU gdb 2002-05-06-cvs
+Copyright 2002 Free Software Foundation, Inc.
+GDB is free software, @dots{}
+(@value{GDBP})
+ at end smallexample
+
+We can expand macros and examine their definitions, even when the
+program is not running.  @value{GDBN} uses the current listing position
+to decide which macro definitions are in scope:
+
+ at smallexample
+(@value{GDBP}) list main
+3
+4       #define M 42
+5       #define ADD(x) (M + x)
+6
+7       main ()
+8       @{
+9       #define N 28
+10        printf ("Hello, world!\n");
+11      #undef N
+12        printf ("We're so creative.\n");
+(@value{GDBP}) info macro ADD
+Defined at /home/jimb/gdb/macros/play/sample.c:5
+#define ADD(x) (M + x)
+(@value{GDBP}) info macro Q
+Defined at /home/jimb/gdb/macros/play/sample.h:1
+  included at /home/jimb/gdb/macros/play/sample.c:2
+#define Q <
+(@value{GDBP}) macro expand ADD(1)
+expands to: (42 + 1)
+(@value{GDBP}) macro expand-once ADD(1)
+expands to: once (M + 1)
+(@value{GDBP})
+ at end smallexample
+
+In the example above, note that @code{macro expand-once} expands only
+the macro invocation explicit in the original text --- the invocation of
+ at code{ADD} --- but does not expand the invocation of the macro @code{M},
+which was introduced by @code{ADD}.
+
+Once the program is running, @value{GDBN} uses the macro definitions in
+force at the source line of the current stack frame:
+
+ at smallexample
+(@value{GDBP}) break main
+Breakpoint 1 at 0x8048370: file sample.c, line 10.
+(@value{GDBP}) run
+Starting program: /home/jimb/gdb/macros/play/sample
+
+Breakpoint 1, main () at sample.c:10
+10        printf ("Hello, world!\n");
+(@value{GDBP})
+ at end smallexample
+
+At line 10, the definition of the macro @code{N} at line 9 is in force:
+
+ at smallexample
+(@value{GDBP}) info macro N
+Defined at /home/jimb/gdb/macros/play/sample.c:9
+#define N 28
+(@value{GDBP}) macro expand N Q M
+expands to: 28 < 42
+(@value{GDBP}) print N Q M
+$1 = 1
+(@value{GDBP})
+ at end smallexample
+
+As we step over directives that remove @code{N}'s definition, and then
+give it a new definition, @value{GDBN} finds the definition (or lack
+thereof) in force at each point:
+
+ at smallexample
+(@value{GDBP}) next
+Hello, world!
+12        printf ("We're so creative.\n");
+(@value{GDBP}) info macro N
+The symbol `N' has no definition as a C/C++ preprocessor macro
+at /home/jimb/gdb/macros/play/sample.c:12
+(@value{GDBP}) next
+We're so creative.
+14        printf ("Goodbye, world!\n");
+(@value{GDBP}) info macro N
+Defined at /home/jimb/gdb/macros/play/sample.c:13
+#define N 1729
+(@value{GDBP}) macro expand N Q M
+expands to: 1729 < 42
+(@value{GDBP}) print N Q M
+$2 = 0
+(@value{GDBP})
+ at end smallexample
+
+In addition to source files, macros can be defined on the compilation command
+line using the @option{-D at var{name}=@var{value}} syntax.  For macros defined in
+such a way, @value{GDBN} displays the location of their definition as line zero
+of the source file submitted to the compiler.
+
+ at smallexample
+(@value{GDBP}) info macro __STDC__
+Defined at /home/jimb/gdb/macros/play/sample.c:0
+-D__STDC__=1
+(@value{GDBP})
+ at end smallexample
+
+
+ at node Tracepoints
+ at chapter Tracepoints
+ at c This chapter is based on the documentation written by Michael
+ at c Snyder, David Taylor, Jim Blandy, and Elena Zannoni.
+
+ at cindex tracepoints
+In some applications, it is not feasible for the debugger to interrupt
+the program's execution long enough for the developer to learn
+anything helpful about its behavior.  If the program's correctness
+depends on its real-time behavior, delays introduced by a debugger
+might cause the program to change its behavior drastically, or perhaps
+fail, even when the code itself is correct.  It is useful to be able
+to observe the program's behavior without interrupting it.
+
+Using @value{GDBN}'s @code{trace} and @code{collect} commands, you can
+specify locations in the program, called @dfn{tracepoints}, and
+arbitrary expressions to evaluate when those tracepoints are reached.
+Later, using the @code{tfind} command, you can examine the values
+those expressions had when the program hit the tracepoints.  The
+expressions may also denote objects in memory---structures or arrays,
+for example---whose values @value{GDBN} should record; while visiting
+a particular tracepoint, you may inspect those objects as if they were
+in memory at that moment.  However, because @value{GDBN} records these
+values without interacting with you, it can do so quickly and
+unobtrusively, hopefully not disturbing the program's behavior.
+
+The tracepoint facility is currently available only for remote
+targets.  @xref{Targets}.  In addition, your remote target must know
+how to collect trace data.  This functionality is implemented in the
+remote stub; however, none of the stubs distributed with @value{GDBN}
+support tracepoints as of this writing.  The format of the remote
+packets used to implement tracepoints are described in @ref{Tracepoint
+Packets}.
+
+It is also possible to get trace data from a file, in a manner reminiscent
+of corefiles; you specify the filename, and use @code{tfind} to search
+through the file.  @xref{Trace Files}, for more details.
+
+This chapter describes the tracepoint commands and features.
+
+ at menu
+* Set Tracepoints::
+* Analyze Collected Data::
+* Tracepoint Variables::
+* Trace Files::
+ at end menu
+
+ at node Set Tracepoints
+ at section Commands to Set Tracepoints
+
+Before running such a @dfn{trace experiment}, an arbitrary number of
+tracepoints can be set.  A tracepoint is actually a special type of
+breakpoint (@pxref{Set Breaks}), so you can manipulate it using
+standard breakpoint commands.  For instance, as with breakpoints,
+tracepoint numbers are successive integers starting from one, and many
+of the commands associated with tracepoints take the tracepoint number
+as their argument, to identify which tracepoint to work on.
+
+For each tracepoint, you can specify, in advance, some arbitrary set
+of data that you want the target to collect in the trace buffer when
+it hits that tracepoint.  The collected data can include registers,
+local variables, or global data.  Later, you can use @value{GDBN}
+commands to examine the values these data had at the time the
+tracepoint was hit.
+
+Tracepoints do not support every breakpoint feature.  Ignore counts on
+tracepoints have no effect, and tracepoints cannot run @value{GDBN}
+commands when they are hit.  Tracepoints may not be thread-specific
+either.
+
+ at cindex fast tracepoints
+Some targets may support @dfn{fast tracepoints}, which are inserted in
+a different way (such as with a jump instead of a trap), that is
+faster but possibly restricted in where they may be installed.
+
+ at cindex static tracepoints
+ at cindex markers, static tracepoints
+ at cindex probing markers, static tracepoints
+Regular and fast tracepoints are dynamic tracing facilities, meaning
+that they can be used to insert tracepoints at (almost) any location
+in the target.  Some targets may also support controlling @dfn{static
+tracepoints} from @value{GDBN}.  With static tracing, a set of
+instrumentation points, also known as @dfn{markers}, are embedded in
+the target program, and can be activated or deactivated by name or
+address.  These are usually placed at locations which facilitate
+investigating what the target is actually doing.  @value{GDBN}'s
+support for static tracing includes being able to list instrumentation
+points, and attach them with @value{GDBN} defined high level
+tracepoints that expose the whole range of convenience of
+ at value{GDBN}'s tracepoints support.  Namely, support for collecting
+registers values and values of global or local (to the instrumentation
+point) variables; tracepoint conditions and trace state variables.
+The act of installing a @value{GDBN} static tracepoint on an
+instrumentation point, or marker, is referred to as @dfn{probing} a
+static tracepoint marker.
+
+ at code{gdbserver} supports tracepoints on some target systems.
+ at xref{Server,,Tracepoints support in @code{gdbserver}}.
+
+This section describes commands to set tracepoints and associated
+conditions and actions.
+
+ at menu
+* Create and Delete Tracepoints::
+* Enable and Disable Tracepoints::
+* Tracepoint Passcounts::
+* Tracepoint Conditions::
+* Trace State Variables::
+* Tracepoint Actions::
+* Listing Tracepoints::
+* Listing Static Tracepoint Markers::
+* Starting and Stopping Trace Experiments::
+* Tracepoint Restrictions::
+ at end menu
+
+ at node Create and Delete Tracepoints
+ at subsection Create and Delete Tracepoints
+
+ at table @code
+ at cindex set tracepoint
+ at kindex trace
+ at item trace @var{location}
+The @code{trace} command is very similar to the @code{break} command.
+Its argument @var{location} can be a source line, a function name, or
+an address in the target program.  @xref{Specify Location}.  The
+ at code{trace} command defines a tracepoint, which is a point in the
+target program where the debugger will briefly stop, collect some
+data, and then allow the program to continue.  Setting a tracepoint or
+changing its actions takes effect immediately if the remote stub
+supports the @samp{InstallInTrace} feature (@pxref{install tracepoint
+in tracing}).
+If remote stub doesn't support the @samp{InstallInTrace} feature, all
+these changes don't take effect until the next @code{tstart}
+command, and once a trace experiment is running, further changes will
+not have any effect until the next trace experiment starts.  In addition,
+ at value{GDBN} supports @dfn{pending tracepoints}---tracepoints whose
+address is not yet resolved.  (This is similar to pending breakpoints.)
+Pending tracepoints are not downloaded to the target and not installed
+until they are resolved.  The resolution of pending tracepoints requires
+ at value{GDBN} support---when debugging with the remote target, and
+ at value{GDBN} disconnects from the remote stub (@pxref{disconnected
+tracing}), pending tracepoints can not be resolved (and downloaded to
+the remote stub) while @value{GDBN} is disconnected.
+
+Here are some examples of using the @code{trace} command:
+
+ at smallexample
+(@value{GDBP}) @b{trace foo.c:121}    // a source file and line number
+
+(@value{GDBP}) @b{trace +2}           // 2 lines forward
+
+(@value{GDBP}) @b{trace my_function}  // first source line of function
+
+(@value{GDBP}) @b{trace *my_function} // EXACT start address of function
+
+(@value{GDBP}) @b{trace *0x2117c4}    // an address
+ at end smallexample
+
+ at noindent
+You can abbreviate @code{trace} as @code{tr}.
+
+ at item trace @var{location} if @var{cond}
+Set a tracepoint with condition @var{cond}; evaluate the expression
+ at var{cond} each time the tracepoint is reached, and collect data only
+if the value is nonzero---that is, if @var{cond} evaluates as true.
+ at xref{Tracepoint Conditions, ,Tracepoint Conditions}, for more
+information on tracepoint conditions.
+
+ at item ftrace @var{location} [ if @var{cond} ]
+ at cindex set fast tracepoint
+ at cindex fast tracepoints, setting
+ at kindex ftrace
+The @code{ftrace} command sets a fast tracepoint.  For targets that
+support them, fast tracepoints will use a more efficient but possibly
+less general technique to trigger data collection, such as a jump
+instruction instead of a trap, or some sort of hardware support.  It
+may not be possible to create a fast tracepoint at the desired
+location, in which case the command will exit with an explanatory
+message.
+
+ at value{GDBN} handles arguments to @code{ftrace} exactly as for
+ at code{trace}.
+
+On 32-bit x86-architecture systems, fast tracepoints normally need to
+be placed at an instruction that is 5 bytes or longer, but can be
+placed at 4-byte instructions if the low 64K of memory of the target
+program is available to install trampolines.  Some Unix-type systems,
+such as @sc{gnu}/Linux, exclude low addresses from the program's
+address space; but for instance with the Linux kernel it is possible
+to let @value{GDBN} use this area by doing a @command{sysctl} command
+to set the @code{mmap_min_addr} kernel parameter, as in
+
+ at example
+sudo sysctl -w vm.mmap_min_addr=32768
+ at end example
+
+ at noindent
+which sets the low address to 32K, which leaves plenty of room for
+trampolines.  The minimum address should be set to a page boundary.
+
+ at item strace @var{location} [ if @var{cond} ]
+ at cindex set static tracepoint
+ at cindex static tracepoints, setting
+ at cindex probe static tracepoint marker
+ at kindex strace
+The @code{strace} command sets a static tracepoint.  For targets that
+support it, setting a static tracepoint probes a static
+instrumentation point, or marker, found at @var{location}.  It may not
+be possible to set a static tracepoint at the desired location, in
+which case the command will exit with an explanatory message.
+
+ at value{GDBN} handles arguments to @code{strace} exactly as for
+ at code{trace}, with the addition that the user can also specify
+ at code{-m @var{marker}} as @var{location}.  This probes the marker
+identified by the @var{marker} string identifier.  This identifier
+depends on the static tracepoint backend library your program is
+using.  You can find all the marker identifiers in the @samp{ID} field
+of the @code{info static-tracepoint-markers} command output.
+ at xref{Listing Static Tracepoint Markers,,Listing Static Tracepoint
+Markers}.  For example, in the following small program using the UST
+tracing engine:
+
+ at smallexample
+main ()
+@{
+  trace_mark(ust, bar33, "str %s", "FOOBAZ");
+@}
+ at end smallexample
+
+ at noindent
+the marker id is composed of joining the first two arguments to the
+ at code{trace_mark} call with a slash, which translates to:
+
+ at smallexample
+(@value{GDBP}) info static-tracepoint-markers
+Cnt Enb ID         Address            What
+1   n   ust/bar33  0x0000000000400ddc in main at stexample.c:22
+         Data: "str %s"
+[etc...]
+ at end smallexample
+
+ at noindent
+so you may probe the marker above with:
+
+ at smallexample
+(@value{GDBP}) strace -m ust/bar33
+ at end smallexample
+
+Static tracepoints accept an extra collect action --- @code{collect
+$_sdata}.  This collects arbitrary user data passed in the probe point
+call to the tracing library.  In the UST example above, you'll see
+that the third argument to @code{trace_mark} is a printf-like format
+string.  The user data is then the result of running that formating
+string against the following arguments.  Note that @code{info
+static-tracepoint-markers} command output lists that format string in
+the @samp{Data:} field.
+
+You can inspect this data when analyzing the trace buffer, by printing
+the $_sdata variable like any other variable available to
+ at value{GDBN}.  @xref{Tracepoint Actions,,Tracepoint Action Lists}.
+
+ at vindex $tpnum
+ at cindex last tracepoint number
+ at cindex recent tracepoint number
+ at cindex tracepoint number
+The convenience variable @code{$tpnum} records the tracepoint number
+of the most recently set tracepoint.
+
+ at kindex delete tracepoint
+ at cindex tracepoint deletion
+ at item delete tracepoint @r{[}@var{num}@r{]}
+Permanently delete one or more tracepoints.  With no argument, the
+default is to delete all tracepoints.  Note that the regular
+ at code{delete} command can remove tracepoints also.
+
+Examples:
+
+ at smallexample
+(@value{GDBP}) @b{delete trace 1 2 3} // remove three tracepoints
+
+(@value{GDBP}) @b{delete trace}       // remove all tracepoints
+ at end smallexample
+
+ at noindent
+You can abbreviate this command as @code{del tr}.
+ at end table
+
+ at node Enable and Disable Tracepoints
+ at subsection Enable and Disable Tracepoints
+
+These commands are deprecated; they are equivalent to plain @code{disable} and @code{enable}.
+
+ at table @code
+ at kindex disable tracepoint
+ at item disable tracepoint @r{[}@var{num}@r{]}
+Disable tracepoint @var{num}, or all tracepoints if no argument
+ at var{num} is given.  A disabled tracepoint will have no effect during
+a trace experiment, but it is not forgotten.  You can re-enable
+a disabled tracepoint using the @code{enable tracepoint} command.
+If the command is issued during a trace experiment and the debug target
+has support for disabling tracepoints during a trace experiment, then the
+change will be effective immediately.  Otherwise, it will be applied to the
+next trace experiment.
+
+ at kindex enable tracepoint
+ at item enable tracepoint @r{[}@var{num}@r{]}
+Enable tracepoint @var{num}, or all tracepoints.  If this command is
+issued during a trace experiment and the debug target supports enabling
+tracepoints during a trace experiment, then the enabled tracepoints will
+become effective immediately.  Otherwise, they will become effective the
+next time a trace experiment is run.
+ at end table
+
+ at node Tracepoint Passcounts
+ at subsection Tracepoint Passcounts
+
+ at table @code
+ at kindex passcount
+ at cindex tracepoint pass count
+ at item passcount @r{[}@var{n} @r{[}@var{num}@r{]]}
+Set the @dfn{passcount} of a tracepoint.  The passcount is a way to
+automatically stop a trace experiment.  If a tracepoint's passcount is
+ at var{n}, then the trace experiment will be automatically stopped on
+the @var{n}'th time that tracepoint is hit.  If the tracepoint number
+ at var{num} is not specified, the @code{passcount} command sets the
+passcount of the most recently defined tracepoint.  If no passcount is
+given, the trace experiment will run until stopped explicitly by the
+user.
+
+Examples:
+
+ at smallexample
+(@value{GDBP}) @b{passcount 5 2} // Stop on the 5th execution of
+ at exdent @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @code{// tracepoint 2}
+
+(@value{GDBP}) @b{passcount 12}  // Stop on the 12th execution of the
+ at exdent @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @code{// most recently defined tracepoint.}
+(@value{GDBP}) @b{trace foo}
+(@value{GDBP}) @b{pass 3}
+(@value{GDBP}) @b{trace bar}
+(@value{GDBP}) @b{pass 2}
+(@value{GDBP}) @b{trace baz}
+(@value{GDBP}) @b{pass 1}        // Stop tracing when foo has been
+ at exdent @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @code{// executed 3 times OR when bar has}
+ at exdent @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @code{// been executed 2 times}
+ at exdent @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @code{// OR when baz has been executed 1 time.}
+ at end smallexample
+ at end table
+
+ at node Tracepoint Conditions
+ at subsection Tracepoint Conditions
+ at cindex conditional tracepoints
+ at cindex tracepoint conditions
+
+The simplest sort of tracepoint collects data every time your program
+reaches a specified place.  You can also specify a @dfn{condition} for
+a tracepoint.  A condition is just a Boolean expression in your
+programming language (@pxref{Expressions, ,Expressions}).  A
+tracepoint with a condition evaluates the expression each time your
+program reaches it, and data collection happens only if the condition
+is true.
+
+Tracepoint conditions can be specified when a tracepoint is set, by
+using @samp{if} in the arguments to the @code{trace} command.
+ at xref{Create and Delete Tracepoints, ,Setting Tracepoints}.  They can
+also be set or changed at any time with the @code{condition} command,
+just as with breakpoints.
+
+Unlike breakpoint conditions, @value{GDBN} does not actually evaluate
+the conditional expression itself.  Instead, @value{GDBN} encodes the
+expression into an agent expression (@pxref{Agent Expressions})
+suitable for execution on the target, independently of @value{GDBN}.
+Global variables become raw memory locations, locals become stack
+accesses, and so forth.
+
+For instance, suppose you have a function that is usually called
+frequently, but should not be called after an error has occurred.  You
+could use the following tracepoint command to collect data about calls
+of that function that happen while the error code is propagating
+through the program; an unconditional tracepoint could end up
+collecting thousands of useless trace frames that you would have to
+search through.
+
+ at smallexample
+(@value{GDBP}) @kbd{trace normal_operation if errcode > 0}
+ at end smallexample
+
+ at node Trace State Variables
+ at subsection Trace State Variables
+ at cindex trace state variables
+
+A @dfn{trace state variable} is a special type of variable that is
+created and managed by target-side code.  The syntax is the same as
+that for GDB's convenience variables (a string prefixed with ``$''),
+but they are stored on the target.  They must be created explicitly,
+using a @code{tvariable} command.  They are always 64-bit signed
+integers.
+
+Trace state variables are remembered by @value{GDBN}, and downloaded
+to the target along with tracepoint information when the trace
+experiment starts.  There are no intrinsic limits on the number of
+trace state variables, beyond memory limitations of the target.
+
+ at cindex convenience variables, and trace state variables
+Although trace state variables are managed by the target, you can use
+them in print commands and expressions as if they were convenience
+variables; @value{GDBN} will get the current value from the target
+while the trace experiment is running.  Trace state variables share
+the same namespace as other ``$'' variables, which means that you
+cannot have trace state variables with names like @code{$23} or
+ at code{$pc}, nor can you have a trace state variable and a convenience
+variable with the same name.
+
+ at table @code
+
+ at item tvariable $@var{name} [ = @var{expression} ]
+ at kindex tvariable
+The @code{tvariable} command creates a new trace state variable named
+ at code{$@var{name}}, and optionally gives it an initial value of
+ at var{expression}.  @var{expression} is evaluated when this command is
+entered; the result will be converted to an integer if possible,
+otherwise @value{GDBN} will report an error. A subsequent
+ at code{tvariable} command specifying the same name does not create a
+variable, but instead assigns the supplied initial value to the
+existing variable of that name, overwriting any previous initial
+value. The default initial value is 0.
+
+ at item info tvariables
+ at kindex info tvariables
+List all the trace state variables along with their initial values.
+Their current values may also be displayed, if the trace experiment is
+currently running.
+
+ at item delete tvariable @r{[} $@var{name} @dots{} @r{]}
+ at kindex delete tvariable
+Delete the given trace state variables, or all of them if no arguments
+are specified.
+
+ at end table
+
+ at node Tracepoint Actions
+ at subsection Tracepoint Action Lists
+
+ at table @code
+ at kindex actions
+ at cindex tracepoint actions
+ at item actions @r{[}@var{num}@r{]}
+This command will prompt for a list of actions to be taken when the
+tracepoint is hit.  If the tracepoint number @var{num} is not
+specified, this command sets the actions for the one that was most
+recently defined (so that you can define a tracepoint and then say
+ at code{actions} without bothering about its number).  You specify the
+actions themselves on the following lines, one action at a time, and
+terminate the actions list with a line containing just @code{end}.  So
+far, the only defined actions are @code{collect}, @code{teval}, and
+ at code{while-stepping}.
+
+ at code{actions} is actually equivalent to @code{commands} (@pxref{Break
+Commands, ,Breakpoint Command Lists}), except that only the defined
+actions are allowed; any other @value{GDBN} command is rejected.
+
+ at cindex remove actions from a tracepoint
+To remove all actions from a tracepoint, type @samp{actions @var{num}}
+and follow it immediately with @samp{end}.
+
+ at smallexample
+(@value{GDBP}) @b{collect @var{data}} // collect some data
+
+(@value{GDBP}) @b{while-stepping 5} // single-step 5 times, collect data
+
+(@value{GDBP}) @b{end}              // signals the end of actions.
+ at end smallexample
+
+In the following example, the action list begins with @code{collect}
+commands indicating the things to be collected when the tracepoint is
+hit.  Then, in order to single-step and collect additional data
+following the tracepoint, a @code{while-stepping} command is used,
+followed by the list of things to be collected after each step in a
+sequence of single steps.  The @code{while-stepping} command is
+terminated by its own separate @code{end} command.  Lastly, the action
+list is terminated by an @code{end} command.
+
+ at smallexample
+(@value{GDBP}) @b{trace foo}
+(@value{GDBP}) @b{actions}
+Enter actions for tracepoint 1, one per line:
+> collect bar,baz
+> collect $regs
+> while-stepping 12
+  > collect $pc, arr[i]
+  > end
+end
+ at end smallexample
+
+ at kindex collect @r{(tracepoints)}
+ at item collect at r{[}/@var{mods}@r{]} @var{expr1}, @var{expr2}, @dots{}
+Collect values of the given expressions when the tracepoint is hit.
+This command accepts a comma-separated list of any valid expressions.
+In addition to global, static, or local variables, the following
+special arguments are supported:
+
+ at table @code
+ at item $regs
+Collect all registers.
+
+ at item $args
+Collect all function arguments.
+
+ at item $locals
+Collect all local variables.
+
+ at item $_ret
+Collect the return address.  This is helpful if you want to see more
+of a backtrace.
+
+ at item $_probe_argc
+Collects the number of arguments from the static probe at which the
+tracepoint is located.
+ at xref{Static Probe Points}.
+
+ at item $_probe_arg at var{n}
+ at var{n} is an integer between 0 and 11.  Collects the @var{n}th argument
+from the static probe at which the tracepoint is located.
+ at xref{Static Probe Points}.
+
+ at item $_sdata
+ at vindex $_sdata at r{, collect}
+Collect static tracepoint marker specific data.  Only available for
+static tracepoints.  @xref{Tracepoint Actions,,Tracepoint Action
+Lists}.  On the UST static tracepoints library backend, an
+instrumentation point resembles a @code{printf} function call.  The
+tracing library is able to collect user specified data formatted to a
+character string using the format provided by the programmer that
+instrumented the program.  Other backends have similar mechanisms.
+Here's an example of a UST marker call:
+
+ at smallexample
+ const char master_name[] = "$your_name";
+ trace_mark(channel1, marker1, "hello %s", master_name)
+ at end smallexample
+
+In this case, collecting @code{$_sdata} collects the string
+ at samp{hello $yourname}.  When analyzing the trace buffer, you can
+inspect @samp{$_sdata} like any other variable available to
+ at value{GDBN}.
+ at end table
+
+You can give several consecutive @code{collect} commands, each one
+with a single argument, or one @code{collect} command with several
+arguments separated by commas; the effect is the same.
+
+The optional @var{mods} changes the usual handling of the arguments.
+ at code{s} requests that pointers to chars be handled as strings, in
+particular collecting the contents of the memory being pointed at, up
+to the first zero.  The upper bound is by default the value of the
+ at code{print elements} variable; if @code{s} is followed by a decimal
+number, that is the upper bound instead.  So for instance
+ at samp{collect/s25 mystr} collects as many as 25 characters at
+ at samp{mystr}.
+
+The command @code{info scope} (@pxref{Symbols, info scope}) is
+particularly useful for figuring out what data to collect.
+
+ at kindex teval @r{(tracepoints)}
+ at item teval @var{expr1}, @var{expr2}, @dots{}
+Evaluate the given expressions when the tracepoint is hit.  This
+command accepts a comma-separated list of expressions.  The results
+are discarded, so this is mainly useful for assigning values to trace
+state variables (@pxref{Trace State Variables}) without adding those
+values to the trace buffer, as would be the case if the @code{collect}
+action were used.
+
+ at kindex while-stepping @r{(tracepoints)}
+ at item while-stepping @var{n}
+Perform @var{n} single-step instruction traces after the tracepoint,
+collecting new data after each step.  The @code{while-stepping}
+command is followed by the list of what to collect while stepping
+(followed by its own @code{end} command):
+
+ at smallexample
+> while-stepping 12
+  > collect $regs, myglobal
+  > end
+>
+ at end smallexample
+
+ at noindent
+Note that @code{$pc} is not automatically collected by
+ at code{while-stepping}; you need to explicitly collect that register if
+you need it.  You may abbreviate @code{while-stepping} as @code{ws} or
+ at code{stepping}.
+
+ at item set default-collect @var{expr1}, @var{expr2}, @dots{}
+ at kindex set default-collect
+ at cindex default collection action
+This variable is a list of expressions to collect at each tracepoint
+hit.  It is effectively an additional @code{collect} action prepended
+to every tracepoint action list.  The expressions are parsed
+individually for each tracepoint, so for instance a variable named
+ at code{xyz} may be interpreted as a global for one tracepoint, and a
+local for another, as appropriate to the tracepoint's location.
+
+ at item show default-collect
+ at kindex show default-collect
+Show the list of expressions that are collected by default at each
+tracepoint hit.
+
+ at end table
+
+ at node Listing Tracepoints
+ at subsection Listing Tracepoints
+
+ at table @code
+ at kindex info tracepoints @r{[}@var{n}@dots{}@r{]}
+ at kindex info tp @r{[}@var{n}@dots{}@r{]}
+ at cindex information about tracepoints
+ at item info tracepoints @r{[}@var{num}@dots{}@r{]}
+Display information about the tracepoint @var{num}.  If you don't
+specify a tracepoint number, displays information about all the
+tracepoints defined so far.  The format is similar to that used for
+ at code{info breakpoints}; in fact, @code{info tracepoints} is the same
+command, simply restricting itself to tracepoints.
+
+A tracepoint's listing may include additional information specific to
+tracing:
+
+ at itemize @bullet
+ at item
+its passcount as given by the @code{passcount @var{n}} command
+ at end itemize
+
+ at smallexample
+(@value{GDBP}) @b{info trace}
+Num     Type           Disp Enb Address    What
+1       tracepoint     keep y   0x0804ab57 in foo() at main.cxx:7
+        while-stepping 20
+          collect globfoo, $regs
+        end
+        collect globfoo2
+        end
+        pass count 1200 
+(@value{GDBP})
+ at end smallexample
+
+ at noindent
+This command can be abbreviated @code{info tp}.
+ at end table
+
+ at node Listing Static Tracepoint Markers
+ at subsection Listing Static Tracepoint Markers
+
+ at table @code
+ at kindex info static-tracepoint-markers
+ at cindex information about static tracepoint markers
+ at item info static-tracepoint-markers
+Display information about all static tracepoint markers defined in the
+program.
+
+For each marker, the following columns are printed:
+
+ at table @emph
+ at item Count
+An incrementing counter, output to help readability.  This is not a
+stable identifier.
+ at item ID
+The marker ID, as reported by the target.
+ at item Enabled or Disabled
+Probed markers are tagged with @samp{y}.  @samp{n} identifies marks
+that are not enabled.
+ at item Address
+Where the marker is in your program, as a memory address.
+ at item What
+Where the marker is in the source for your program, as a file and line
+number.  If the debug information included in the program does not
+allow @value{GDBN} to locate the source of the marker, this column
+will be left blank.
+ at end table
+
+ at noindent
+In addition, the following information may be printed for each marker:
+
+ at table @emph
+ at item Data
+User data passed to the tracing library by the marker call.  In the
+UST backend, this is the format string passed as argument to the
+marker call.
+ at item Static tracepoints probing the marker
+The list of static tracepoints attached to the marker.
+ at end table
+
+ at smallexample
+(@value{GDBP}) info static-tracepoint-markers
+Cnt ID         Enb Address            What
+1   ust/bar2   y   0x0000000000400e1a in main at stexample.c:25
+     Data: number1 %d number2 %d
+     Probed by static tracepoints: #2
+2   ust/bar33  n   0x0000000000400c87 in main at stexample.c:24
+     Data: str %s
+(@value{GDBP})
+ at end smallexample
+ at end table
+
+ at node Starting and Stopping Trace Experiments
+ at subsection Starting and Stopping Trace Experiments
+
+ at table @code
+ at kindex tstart [ @var{notes} ]
+ at cindex start a new trace experiment
+ at cindex collected data discarded
+ at item tstart
+This command starts the trace experiment, and begins collecting data.
+It has the side effect of discarding all the data collected in the
+trace buffer during the previous trace experiment.  If any arguments
+are supplied, they are taken as a note and stored with the trace
+experiment's state.  The notes may be arbitrary text, and are
+especially useful with disconnected tracing in a multi-user context;
+the notes can explain what the trace is doing, supply user contact
+information, and so forth.
+
+ at kindex tstop [ @var{notes} ]
+ at cindex stop a running trace experiment
+ at item tstop
+This command stops the trace experiment.  If any arguments are
+supplied, they are recorded with the experiment as a note.  This is
+useful if you are stopping a trace started by someone else, for
+instance if the trace is interfering with the system's behavior and
+needs to be stopped quickly.
+
+ at strong{Note}: a trace experiment and data collection may stop
+automatically if any tracepoint's passcount is reached
+(@pxref{Tracepoint Passcounts}), or if the trace buffer becomes full.
+
+ at kindex tstatus
+ at cindex status of trace data collection
+ at cindex trace experiment, status of
+ at item tstatus
+This command displays the status of the current trace data
+collection.
+ at end table
+
+Here is an example of the commands we described so far:
+
+ at smallexample
+(@value{GDBP}) @b{trace gdb_c_test}
+(@value{GDBP}) @b{actions}
+Enter actions for tracepoint #1, one per line.
+> collect $regs,$locals,$args
+> while-stepping 11
+  > collect $regs
+  > end
+> end
+(@value{GDBP}) @b{tstart}
+	[time passes @dots{}]
+(@value{GDBP}) @b{tstop}
+ at end smallexample
+
+ at anchor{disconnected tracing}
+ at cindex disconnected tracing
+You can choose to continue running the trace experiment even if
+ at value{GDBN} disconnects from the target, voluntarily or
+involuntarily.  For commands such as @code{detach}, the debugger will
+ask what you want to do with the trace.  But for unexpected
+terminations (@value{GDBN} crash, network outage), it would be
+unfortunate to lose hard-won trace data, so the variable
+ at code{disconnected-tracing} lets you decide whether the trace should
+continue running without @value{GDBN}.
+
+ at table @code
+ at item set disconnected-tracing on
+ at itemx set disconnected-tracing off
+ at kindex set disconnected-tracing
+Choose whether a tracing run should continue to run if @value{GDBN}
+has disconnected from the target.  Note that @code{detach} or
+ at code{quit} will ask you directly what to do about a running trace no
+matter what this variable's setting, so the variable is mainly useful
+for handling unexpected situations, such as loss of the network.
+
+ at item show disconnected-tracing
+ at kindex show disconnected-tracing
+Show the current choice for disconnected tracing.
+
+ at end table
+
+When you reconnect to the target, the trace experiment may or may not
+still be running; it might have filled the trace buffer in the
+meantime, or stopped for one of the other reasons.  If it is running,
+it will continue after reconnection.
+
+Upon reconnection, the target will upload information about the
+tracepoints in effect.  @value{GDBN} will then compare that
+information to the set of tracepoints currently defined, and attempt
+to match them up, allowing for the possibility that the numbers may
+have changed due to creation and deletion in the meantime.  If one of
+the target's tracepoints does not match any in @value{GDBN}, the
+debugger will create a new tracepoint, so that you have a number with
+which to specify that tracepoint.  This matching-up process is
+necessarily heuristic, and it may result in useless tracepoints being
+created; you may simply delete them if they are of no use.
+
+ at cindex circular trace buffer
+If your target agent supports a @dfn{circular trace buffer}, then you
+can run a trace experiment indefinitely without filling the trace
+buffer; when space runs out, the agent deletes already-collected trace
+frames, oldest first, until there is enough room to continue
+collecting.  This is especially useful if your tracepoints are being
+hit too often, and your trace gets terminated prematurely because the
+buffer is full.  To ask for a circular trace buffer, simply set
+ at samp{circular-trace-buffer} to on.  You can set this at any time,
+including during tracing; if the agent can do it, it will change
+buffer handling on the fly, otherwise it will not take effect until
+the next run.
+
+ at table @code
+ at item set circular-trace-buffer on
+ at itemx set circular-trace-buffer off
+ at kindex set circular-trace-buffer
+Choose whether a tracing run should use a linear or circular buffer
+for trace data.  A linear buffer will not lose any trace data, but may
+fill up prematurely, while a circular buffer will discard old trace
+data, but it will have always room for the latest tracepoint hits.
+
+ at item show circular-trace-buffer
+ at kindex show circular-trace-buffer
+Show the current choice for the trace buffer.  Note that this may not
+match the agent's current buffer handling, nor is it guaranteed to
+match the setting that might have been in effect during a past run,
+for instance if you are looking at frames from a trace file.
+
+ at end table
+
+ at table @code
+ at item set trace-user @var{text}
+ at kindex set trace-user
+
+ at item show trace-user
+ at kindex show trace-user
+
+ at item set trace-notes @var{text}
+ at kindex set trace-notes
+Set the trace run's notes.
+
+ at item show trace-notes
+ at kindex show trace-notes
+Show the trace run's notes.
+
+ at item set trace-stop-notes @var{text}
+ at kindex set trace-stop-notes
+Set the trace run's stop notes.  The handling of the note is as for
+ at code{tstop} arguments; the set command is convenient way to fix a
+stop note that is mistaken or incomplete.
+
+ at item show trace-stop-notes
+ at kindex show trace-stop-notes
+Show the trace run's stop notes.
+
+ at end table
+
+ at node Tracepoint Restrictions
+ at subsection Tracepoint Restrictions
+
+ at cindex tracepoint restrictions
+There are a number of restrictions on the use of tracepoints.  As
+described above, tracepoint data gathering occurs on the target
+without interaction from @value{GDBN}.  Thus the full capabilities of
+the debugger are not available during data gathering, and then at data
+examination time, you will be limited by only having what was
+collected.  The following items describe some common problems, but it
+is not exhaustive, and you may run into additional difficulties not
+mentioned here.
+
+ at itemize @bullet
+
+ at item
+Tracepoint expressions are intended to gather objects (lvalues).  Thus
+the full flexibility of GDB's expression evaluator is not available.
+You cannot call functions, cast objects to aggregate types, access
+convenience variables or modify values (except by assignment to trace
+state variables).  Some language features may implicitly call
+functions (for instance Objective-C fields with accessors), and therefore
+cannot be collected either.
+
+ at item
+Collection of local variables, either individually or in bulk with
+ at code{$locals} or @code{$args}, during @code{while-stepping} may
+behave erratically.  The stepping action may enter a new scope (for
+instance by stepping into a function), or the location of the variable
+may change (for instance it is loaded into a register).  The
+tracepoint data recorded uses the location information for the
+variables that is correct for the tracepoint location.  When the
+tracepoint is created, it is not possible, in general, to determine
+where the steps of a @code{while-stepping} sequence will advance the
+program---particularly if a conditional branch is stepped.
+
+ at item
+Collection of an incompletely-initialized or partially-destroyed object
+may result in something that @value{GDBN} cannot display, or displays
+in a misleading way.
+
+ at item
+When @value{GDBN} displays a pointer to character it automatically
+dereferences the pointer to also display characters of the string
+being pointed to.  However, collecting the pointer during tracing does
+not automatically collect the string.  You need to explicitly
+dereference the pointer and provide size information if you want to
+collect not only the pointer, but the memory pointed to.  For example,
+ at code{*ptr@@50} can be used to collect the 50 element array pointed to
+by @code{ptr}.
+
+ at item
+It is not possible to collect a complete stack backtrace at a
+tracepoint.  Instead, you may collect the registers and a few hundred
+bytes from the stack pointer with something like @code{*(unsigned char *)$esp@@300}
+(adjust to use the name of the actual stack pointer register on your
+target architecture, and the amount of stack you wish to capture).
+Then the @code{backtrace} command will show a partial backtrace when
+using a trace frame.  The number of stack frames that can be examined
+depends on the sizes of the frames in the collected stack.  Note that
+if you ask for a block so large that it goes past the bottom of the
+stack, the target agent may report an error trying to read from an
+invalid address.
+
+ at item
+If you do not collect registers at a tracepoint, @value{GDBN} can
+infer that the value of @code{$pc} must be the same as the address of
+the tracepoint and use that when you are looking at a trace frame
+for that tracepoint.  However, this cannot work if the tracepoint has
+multiple locations (for instance if it was set in a function that was
+inlined), or if it has a @code{while-stepping} loop.  In those cases
+ at value{GDBN} will warn you that it can't infer @code{$pc}, and default
+it to zero.
+
+ at end itemize
+
+ at node Analyze Collected Data
+ at section Using the Collected Data
+
+After the tracepoint experiment ends, you use @value{GDBN} commands
+for examining the trace data.  The basic idea is that each tracepoint
+collects a trace @dfn{snapshot} every time it is hit and another
+snapshot every time it single-steps.  All these snapshots are
+consecutively numbered from zero and go into a buffer, and you can
+examine them later.  The way you examine them is to @dfn{focus} on a
+specific trace snapshot.  When the remote stub is focused on a trace
+snapshot, it will respond to all @value{GDBN} requests for memory and
+registers by reading from the buffer which belongs to that snapshot,
+rather than from @emph{real} memory or registers of the program being
+debugged.  This means that @strong{all} @value{GDBN} commands
+(@code{print}, @code{info registers}, @code{backtrace}, etc.) will
+behave as if we were currently debugging the program state as it was
+when the tracepoint occurred.  Any requests for data that are not in
+the buffer will fail.
+
+ at menu
+* tfind::                       How to select a trace snapshot
+* tdump::                       How to display all data for a snapshot
+* save tracepoints::            How to save tracepoints for a future run
+ at end menu
+
+ at node tfind
+ at subsection @code{tfind @var{n}}
+
+ at kindex tfind
+ at cindex select trace snapshot
+ at cindex find trace snapshot
+The basic command for selecting a trace snapshot from the buffer is
+ at code{tfind @var{n}}, which finds trace snapshot number @var{n},
+counting from zero.  If no argument @var{n} is given, the next
+snapshot is selected.
+
+Here are the various forms of using the @code{tfind} command.
+
+ at table @code
+ at item tfind start
+Find the first snapshot in the buffer.  This is a synonym for
+ at code{tfind 0} (since 0 is the number of the first snapshot).
+
+ at item tfind none
+Stop debugging trace snapshots, resume @emph{live} debugging.
+
+ at item tfind end
+Same as @samp{tfind none}.
+
+ at item tfind
+No argument means find the next trace snapshot.
+
+ at item tfind -
+Find the previous trace snapshot before the current one.  This permits
+retracing earlier steps.
+
+ at item tfind tracepoint @var{num}
+Find the next snapshot associated with tracepoint @var{num}.  Search
+proceeds forward from the last examined trace snapshot.  If no
+argument @var{num} is given, it means find the next snapshot collected
+for the same tracepoint as the current snapshot.
+
+ at item tfind pc @var{addr}
+Find the next snapshot associated with the value @var{addr} of the
+program counter.  Search proceeds forward from the last examined trace
+snapshot.  If no argument @var{addr} is given, it means find the next
+snapshot with the same value of PC as the current snapshot.
+
+ at item tfind outside @var{addr1}, @var{addr2}
+Find the next snapshot whose PC is outside the given range of
+addresses (exclusive).
+
+ at item tfind range @var{addr1}, @var{addr2}
+Find the next snapshot whose PC is between @var{addr1} and
+ at var{addr2} (inclusive).
+
+ at item tfind line @r{[}@var{file}:@r{]}@var{n}
+Find the next snapshot associated with the source line @var{n}.  If
+the optional argument @var{file} is given, refer to line @var{n} in
+that source file.  Search proceeds forward from the last examined
+trace snapshot.  If no argument @var{n} is given, it means find the
+next line other than the one currently being examined; thus saying
+ at code{tfind line} repeatedly can appear to have the same effect as
+stepping from line to line in a @emph{live} debugging session.
+ at end table
+
+The default arguments for the @code{tfind} commands are specifically
+designed to make it easy to scan through the trace buffer.  For
+instance, @code{tfind} with no argument selects the next trace
+snapshot, and @code{tfind -} with no argument selects the previous
+trace snapshot.  So, by giving one @code{tfind} command, and then
+simply hitting @key{RET} repeatedly you can examine all the trace
+snapshots in order.  Or, by saying @code{tfind -} and then hitting
+ at key{RET} repeatedly you can examine the snapshots in reverse order.
+The @code{tfind line} command with no argument selects the snapshot
+for the next source line executed.  The @code{tfind pc} command with
+no argument selects the next snapshot with the same program counter
+(PC) as the current frame.  The @code{tfind tracepoint} command with
+no argument selects the next trace snapshot collected by the same
+tracepoint as the current one.
+
+In addition to letting you scan through the trace buffer manually,
+these commands make it easy to construct @value{GDBN} scripts that
+scan through the trace buffer and print out whatever collected data
+you are interested in.  Thus, if we want to examine the PC, FP, and SP
+registers from each trace frame in the buffer, we can say this:
+
+ at smallexample
+(@value{GDBP}) @b{tfind start}
+(@value{GDBP}) @b{while ($trace_frame != -1)}
+> printf "Frame %d, PC = %08X, SP = %08X, FP = %08X\n", \
+          $trace_frame, $pc, $sp, $fp
+> tfind
+> end
+
+Frame 0, PC = 0020DC64, SP = 0030BF3C, FP = 0030BF44
+Frame 1, PC = 0020DC6C, SP = 0030BF38, FP = 0030BF44
+Frame 2, PC = 0020DC70, SP = 0030BF34, FP = 0030BF44
+Frame 3, PC = 0020DC74, SP = 0030BF30, FP = 0030BF44
+Frame 4, PC = 0020DC78, SP = 0030BF2C, FP = 0030BF44
+Frame 5, PC = 0020DC7C, SP = 0030BF28, FP = 0030BF44
+Frame 6, PC = 0020DC80, SP = 0030BF24, FP = 0030BF44
+Frame 7, PC = 0020DC84, SP = 0030BF20, FP = 0030BF44
+Frame 8, PC = 0020DC88, SP = 0030BF1C, FP = 0030BF44
+Frame 9, PC = 0020DC8E, SP = 0030BF18, FP = 0030BF44
+Frame 10, PC = 00203F6C, SP = 0030BE3C, FP = 0030BF14
+ at end smallexample
+
+Or, if we want to examine the variable @code{X} at each source line in
+the buffer:
+
+ at smallexample
+(@value{GDBP}) @b{tfind start}
+(@value{GDBP}) @b{while ($trace_frame != -1)}
+> printf "Frame %d, X == %d\n", $trace_frame, X
+> tfind line
+> end
+
+Frame 0, X = 1
+Frame 7, X = 2
+Frame 13, X = 255
+ at end smallexample
+
+ at node tdump
+ at subsection @code{tdump}
+ at kindex tdump
+ at cindex dump all data collected at tracepoint
+ at cindex tracepoint data, display
+
+This command takes no arguments.  It prints all the data collected at
+the current trace snapshot.
+
+ at smallexample
+(@value{GDBP}) @b{trace 444}
+(@value{GDBP}) @b{actions}
+Enter actions for tracepoint #2, one per line:
+> collect $regs, $locals, $args, gdb_long_test
+> end
+
+(@value{GDBP}) @b{tstart}
+
+(@value{GDBP}) @b{tfind line 444}
+#0  gdb_test (p1=0x11, p2=0x22, p3=0x33, p4=0x44, p5=0x55, p6=0x66)
+at gdb_test.c:444
+444        printp( "%s: arguments = 0x%X 0x%X 0x%X 0x%X 0x%X 0x%X\n", )
+
+(@value{GDBP}) @b{tdump}
+Data collected at tracepoint 2, trace frame 1:
+d0             0xc4aa0085       -995491707
+d1             0x18     24
+d2             0x80     128
+d3             0x33     51
+d4             0x71aea3d        119204413
+d5             0x22     34
+d6             0xe0     224
+d7             0x380035 3670069
+a0             0x19e24a 1696330
+a1             0x3000668        50333288
+a2             0x100    256
+a3             0x322000 3284992
+a4             0x3000698        50333336
+a5             0x1ad3cc 1758156
+fp             0x30bf3c 0x30bf3c
+sp             0x30bf34 0x30bf34
+ps             0x0      0
+pc             0x20b2c8 0x20b2c8
+fpcontrol      0x0      0
+fpstatus       0x0      0
+fpiaddr        0x0      0
+p = 0x20e5b4 "gdb-test"
+p1 = (void *) 0x11
+p2 = (void *) 0x22
+p3 = (void *) 0x33
+p4 = (void *) 0x44
+p5 = (void *) 0x55
+p6 = (void *) 0x66
+gdb_long_test = 17 '\021'
+
+(@value{GDBP})
+ at end smallexample
+
+ at code{tdump} works by scanning the tracepoint's current collection
+actions and printing the value of each expression listed.  So
+ at code{tdump} can fail, if after a run, you change the tracepoint's
+actions to mention variables that were not collected during the run.
+
+Also, for tracepoints with @code{while-stepping} loops, @code{tdump}
+uses the collected value of @code{$pc} to distinguish between trace
+frames that were collected at the tracepoint hit, and frames that were
+collected while stepping.  This allows it to correctly choose whether
+to display the basic list of collections, or the collections from the
+body of the while-stepping loop.  However, if @code{$pc} was not collected,
+then @code{tdump} will always attempt to dump using the basic collection
+list, and may fail if a while-stepping frame does not include all the
+same data that is collected at the tracepoint hit.
+ at c This is getting pretty arcane, example would be good.
+
+ at node save tracepoints
+ at subsection @code{save tracepoints @var{filename}}
+ at kindex save tracepoints
+ at kindex save-tracepoints
+ at cindex save tracepoints for future sessions
+
+This command saves all current tracepoint definitions together with
+their actions and passcounts, into a file @file{@var{filename}}
+suitable for use in a later debugging session.  To read the saved
+tracepoint definitions, use the @code{source} command (@pxref{Command
+Files}).  The @w{@code{save-tracepoints}} command is a deprecated
+alias for @w{@code{save tracepoints}}
+
+ at node Tracepoint Variables
+ at section Convenience Variables for Tracepoints
+ at cindex tracepoint variables
+ at cindex convenience variables for tracepoints
+
+ at table @code
+ at vindex $trace_frame
+ at item (int) $trace_frame
+The current trace snapshot (a.k.a.@: @dfn{frame}) number, or -1 if no
+snapshot is selected.
+
+ at vindex $tracepoint
+ at item (int) $tracepoint
+The tracepoint for the current trace snapshot.
+
+ at vindex $trace_line
+ at item (int) $trace_line
+The line number for the current trace snapshot.
+
+ at vindex $trace_file
+ at item (char []) $trace_file
+The source file for the current trace snapshot.
+
+ at vindex $trace_func
+ at item (char []) $trace_func
+The name of the function containing @code{$tracepoint}.
+ at end table
+
+Note: @code{$trace_file} is not suitable for use in @code{printf},
+use @code{output} instead.
+
+Here's a simple example of using these convenience variables for
+stepping through all the trace snapshots and printing some of their
+data.  Note that these are not the same as trace state variables,
+which are managed by the target.
+
+ at smallexample
+(@value{GDBP}) @b{tfind start}
+
+(@value{GDBP}) @b{while $trace_frame != -1}
+> output $trace_file
+> printf ", line %d (tracepoint #%d)\n", $trace_line, $tracepoint
+> tfind
+> end
+ at end smallexample
+
+ at node Trace Files
+ at section Using Trace Files
+ at cindex trace files
+
+In some situations, the target running a trace experiment may no
+longer be available; perhaps it crashed, or the hardware was needed
+for a different activity.  To handle these cases, you can arrange to
+dump the trace data into a file, and later use that file as a source
+of trace data, via the @code{target tfile} command.
+
+ at table @code
+
+ at kindex tsave
+ at item tsave [ -r ] @var{filename}
+Save the trace data to @var{filename}.  By default, this command
+assumes that @var{filename} refers to the host filesystem, so if
+necessary @value{GDBN} will copy raw trace data up from the target and
+then save it.  If the target supports it, you can also supply the
+optional argument @code{-r} (``remote'') to direct the target to save
+the data directly into @var{filename} in its own filesystem, which may be
+more efficient if the trace buffer is very large.  (Note, however, that
+ at code{target tfile} can only read from files accessible to the host.)
+
+ at kindex target tfile
+ at kindex tfile
+ at item target tfile @var{filename}
+Use the file named @var{filename} as a source of trace data.  Commands
+that examine data work as they do with a live target, but it is not
+possible to run any new trace experiments.  @code{tstatus} will report
+the state of the trace run at the moment the data was saved, as well
+as the current trace frame you are examining.  @var{filename} must be
+on a filesystem accessible to the host.
+
+ at end table
+
+ at node Overlays
+ at chapter Debugging Programs That Use Overlays
+ at cindex overlays
+
+If your program is too large to fit completely in your target system's
+memory, you can sometimes use @dfn{overlays} to work around this
+problem.  @value{GDBN} provides some support for debugging programs that
+use overlays.
+
+ at menu
+* How Overlays Work::              A general explanation of overlays.
+* Overlay Commands::               Managing overlays in @value{GDBN}.
+* Automatic Overlay Debugging::    @value{GDBN} can find out which overlays are
+                                   mapped by asking the inferior.
+* Overlay Sample Program::         A sample program using overlays.
+ at end menu
+
+ at node How Overlays Work
+ at section How Overlays Work
+ at cindex mapped overlays
+ at cindex unmapped overlays
+ at cindex load address, overlay's
+ at cindex mapped address
+ at cindex overlay area
+
+Suppose you have a computer whose instruction address space is only 64
+kilobytes long, but which has much more memory which can be accessed by
+other means: special instructions, segment registers, or memory
+management hardware, for example.  Suppose further that you want to
+adapt a program which is larger than 64 kilobytes to run on this system.
+
+One solution is to identify modules of your program which are relatively
+independent, and need not call each other directly; call these modules
+ at dfn{overlays}.  Separate the overlays from the main program, and place
+their machine code in the larger memory.  Place your main program in
+instruction memory, but leave at least enough space there to hold the
+largest overlay as well.
+
+Now, to call a function located in an overlay, you must first copy that
+overlay's machine code from the large memory into the space set aside
+for it in the instruction memory, and then jump to its entry point
+there.
+
+ at c NB:  In the below the mapped area's size is greater or equal to the
+ at c size of all overlays.  This is intentional to remind the developer
+ at c that overlays don't necessarily need to be the same size.
+
+ at smallexample
+ at group
+    Data             Instruction            Larger
+Address Space       Address Space        Address Space
++-----------+       +-----------+        +-----------+
+|           |       |           |        |           |
++-----------+       +-----------+        +-----------+<-- overlay 1
+| program   |       |   main    |   .----| overlay 1 | load address
+| variables |       |  program  |   |    +-----------+
+| and heap  |       |           |   |    |           |
++-----------+       |           |   |    +-----------+<-- overlay 2
+|           |       +-----------+   |    |           | load address
++-----------+       |           |   |  .-| overlay 2 |
+                    |           |   |  | |           |
+         mapped --->+-----------+   |  | +-----------+
+         address    |           |   |  | |           |
+                    |  overlay  | <-'  | |           |
+                    |   area    |  <---' +-----------+<-- overlay 3
+                    |           | <---.  |           | load address
+                    +-----------+     `--| overlay 3 |
+                    |           |        |           |
+                    +-----------+        |           |
+                                         +-----------+
+                                         |           |
+                                         +-----------+
+
+                    @anchor{A code overlay}A code overlay
+ at end group
+ at end smallexample
+
+The diagram (@pxref{A code overlay}) shows a system with separate data
+and instruction address spaces.  To map an overlay, the program copies
+its code from the larger address space to the instruction address space.
+Since the overlays shown here all use the same mapped address, only one
+may be mapped at a time.  For a system with a single address space for
+data and instructions, the diagram would be similar, except that the
+program variables and heap would share an address space with the main
+program and the overlay area.
+
+An overlay loaded into instruction memory and ready for use is called a
+ at dfn{mapped} overlay; its @dfn{mapped address} is its address in the
+instruction memory.  An overlay not present (or only partially present)
+in instruction memory is called @dfn{unmapped}; its @dfn{load address}
+is its address in the larger memory.  The mapped address is also called
+the @dfn{virtual memory address}, or @dfn{VMA}; the load address is also
+called the @dfn{load memory address}, or @dfn{LMA}.
+
+Unfortunately, overlays are not a completely transparent way to adapt a
+program to limited instruction memory.  They introduce a new set of
+global constraints you must keep in mind as you design your program:
+
+ at itemize @bullet
+
+ at item
+Before calling or returning to a function in an overlay, your program
+must make sure that overlay is actually mapped.  Otherwise, the call or
+return will transfer control to the right address, but in the wrong
+overlay, and your program will probably crash.
+
+ at item
+If the process of mapping an overlay is expensive on your system, you
+will need to choose your overlays carefully to minimize their effect on
+your program's performance.
+
+ at item
+The executable file you load onto your system must contain each
+overlay's instructions, appearing at the overlay's load address, not its
+mapped address.  However, each overlay's instructions must be relocated
+and its symbols defined as if the overlay were at its mapped address.
+You can use GNU linker scripts to specify different load and relocation
+addresses for pieces of your program; see @ref{Overlay Description,,,
+ld.info, Using ld: the GNU linker}.
+
+ at item
+The procedure for loading executable files onto your system must be able
+to load their contents into the larger address space as well as the
+instruction and data spaces.
+
+ at end itemize
+
+The overlay system described above is rather simple, and could be
+improved in many ways:
+
+ at itemize @bullet
+
+ at item
+If your system has suitable bank switch registers or memory management
+hardware, you could use those facilities to make an overlay's load area
+contents simply appear at their mapped address in instruction space.
+This would probably be faster than copying the overlay to its mapped
+area in the usual way.
+
+ at item
+If your overlays are small enough, you could set aside more than one
+overlay area, and have more than one overlay mapped at a time.
+
+ at item
+You can use overlays to manage data, as well as instructions.  In
+general, data overlays are even less transparent to your design than
+code overlays: whereas code overlays only require care when you call or
+return to functions, data overlays require care every time you access
+the data.  Also, if you change the contents of a data overlay, you
+must copy its contents back out to its load address before you can copy a
+different data overlay into the same mapped area.
+
+ at end itemize
+
+
+ at node Overlay Commands
+ at section Overlay Commands
+
+To use @value{GDBN}'s overlay support, each overlay in your program must
+correspond to a separate section of the executable file.  The section's
+virtual memory address and load memory address must be the overlay's
+mapped and load addresses.  Identifying overlays with sections allows
+ at value{GDBN} to determine the appropriate address of a function or
+variable, depending on whether the overlay is mapped or not.
+
+ at value{GDBN}'s overlay commands all start with the word @code{overlay};
+you can abbreviate this as @code{ov} or @code{ovly}.  The commands are:
+
+ at table @code
+ at item overlay off
+ at kindex overlay
+Disable @value{GDBN}'s overlay support.  When overlay support is
+disabled, @value{GDBN} assumes that all functions and variables are
+always present at their mapped addresses.  By default, @value{GDBN}'s
+overlay support is disabled.
+
+ at item overlay manual
+ at cindex manual overlay debugging
+Enable @dfn{manual} overlay debugging.  In this mode, @value{GDBN}
+relies on you to tell it which overlays are mapped, and which are not,
+using the @code{overlay map-overlay} and @code{overlay unmap-overlay}
+commands described below.
+
+ at item overlay map-overlay @var{overlay}
+ at itemx overlay map @var{overlay}
+ at cindex map an overlay
+Tell @value{GDBN} that @var{overlay} is now mapped; @var{overlay} must
+be the name of the object file section containing the overlay.  When an
+overlay is mapped, @value{GDBN} assumes it can find the overlay's
+functions and variables at their mapped addresses.  @value{GDBN} assumes
+that any other overlays whose mapped ranges overlap that of
+ at var{overlay} are now unmapped.
+
+ at item overlay unmap-overlay @var{overlay}
+ at itemx overlay unmap @var{overlay}
+ at cindex unmap an overlay
+Tell @value{GDBN} that @var{overlay} is no longer mapped; @var{overlay}
+must be the name of the object file section containing the overlay.
+When an overlay is unmapped, @value{GDBN} assumes it can find the
+overlay's functions and variables at their load addresses.
+
+ at item overlay auto
+Enable @dfn{automatic} overlay debugging.  In this mode, @value{GDBN}
+consults a data structure the overlay manager maintains in the inferior
+to see which overlays are mapped.  For details, see @ref{Automatic
+Overlay Debugging}.
+
+ at item overlay load-target
+ at itemx overlay load
+ at cindex reloading the overlay table
+Re-read the overlay table from the inferior.  Normally, @value{GDBN}
+re-reads the table @value{GDBN} automatically each time the inferior
+stops, so this command should only be necessary if you have changed the
+overlay mapping yourself using @value{GDBN}.  This command is only
+useful when using automatic overlay debugging.
+
+ at item overlay list-overlays
+ at itemx overlay list
+ at cindex listing mapped overlays
+Display a list of the overlays currently mapped, along with their mapped
+addresses, load addresses, and sizes.
+
+ at end table
+
+Normally, when @value{GDBN} prints a code address, it includes the name
+of the function the address falls in:
+
+ at smallexample
+(@value{GDBP}) print main
+$3 = @{int ()@} 0x11a0 <main>
+ at end smallexample
+ at noindent
+When overlay debugging is enabled, @value{GDBN} recognizes code in
+unmapped overlays, and prints the names of unmapped functions with
+asterisks around them.  For example, if @code{foo} is a function in an
+unmapped overlay, @value{GDBN} prints it this way:
+
+ at smallexample
+(@value{GDBP}) overlay list
+No sections are mapped.
+(@value{GDBP}) print foo
+$5 = @{int (int)@} 0x100000 <*foo*>
+ at end smallexample
+ at noindent
+When @code{foo}'s overlay is mapped, @value{GDBN} prints the function's
+name normally:
+
+ at smallexample
+(@value{GDBP}) overlay list
+Section .ov.foo.text, loaded at 0x100000 - 0x100034,
+        mapped at 0x1016 - 0x104a
+(@value{GDBP}) print foo
+$6 = @{int (int)@} 0x1016 <foo>
+ at end smallexample
+
+When overlay debugging is enabled, @value{GDBN} can find the correct
+address for functions and variables in an overlay, whether or not the
+overlay is mapped.  This allows most @value{GDBN} commands, like
+ at code{break} and @code{disassemble}, to work normally, even on unmapped
+code.  However, @value{GDBN}'s breakpoint support has some limitations:
+
+ at itemize @bullet
+ at item
+ at cindex breakpoints in overlays
+ at cindex overlays, setting breakpoints in
+You can set breakpoints in functions in unmapped overlays, as long as
+ at value{GDBN} can write to the overlay at its load address.
+ at item
+ at value{GDBN} can not set hardware or simulator-based breakpoints in
+unmapped overlays.  However, if you set a breakpoint at the end of your
+overlay manager (and tell @value{GDBN} which overlays are now mapped, if
+you are using manual overlay management), @value{GDBN} will re-set its
+breakpoints properly.
+ at end itemize
+
+
+ at node Automatic Overlay Debugging
+ at section Automatic Overlay Debugging
+ at cindex automatic overlay debugging
+
+ at value{GDBN} can automatically track which overlays are mapped and which
+are not, given some simple co-operation from the overlay manager in the
+inferior.  If you enable automatic overlay debugging with the
+ at code{overlay auto} command (@pxref{Overlay Commands}), @value{GDBN}
+looks in the inferior's memory for certain variables describing the
+current state of the overlays.
+
+Here are the variables your overlay manager must define to support
+ at value{GDBN}'s automatic overlay debugging:
+
+ at table @asis
+
+ at item @code{_ovly_table}:
+This variable must be an array of the following structures:
+
+ at smallexample
+struct
+@{
+  /* The overlay's mapped address.  */
+  unsigned long vma;
+
+  /* The size of the overlay, in bytes.  */
+  unsigned long size;
+
+  /* The overlay's load address.  */
+  unsigned long lma;
+
+  /* Non-zero if the overlay is currently mapped;
+     zero otherwise.  */
+  unsigned long mapped;
+@}
+ at end smallexample
+
+ at item @code{_novlys}:
+This variable must be a four-byte signed integer, holding the total
+number of elements in @code{_ovly_table}.
+
+ at end table
+
+To decide whether a particular overlay is mapped or not, @value{GDBN}
+looks for an entry in @w{@code{_ovly_table}} whose @code{vma} and
+ at code{lma} members equal the VMA and LMA of the overlay's section in the
+executable file.  When @value{GDBN} finds a matching entry, it consults
+the entry's @code{mapped} member to determine whether the overlay is
+currently mapped.
+
+In addition, your overlay manager may define a function called
+ at code{_ovly_debug_event}.  If this function is defined, @value{GDBN}
+will silently set a breakpoint there.  If the overlay manager then
+calls this function whenever it has changed the overlay table, this
+will enable @value{GDBN} to accurately keep track of which overlays
+are in program memory, and update any breakpoints that may be set
+in overlays.  This will allow breakpoints to work even if the
+overlays are kept in ROM or other non-writable memory while they
+are not being executed.
+
+ at node Overlay Sample Program
+ at section Overlay Sample Program
+ at cindex overlay example program
+
+When linking a program which uses overlays, you must place the overlays
+at their load addresses, while relocating them to run at their mapped
+addresses.  To do this, you must write a linker script (@pxref{Overlay
+Description,,, ld.info, Using ld: the GNU linker}).  Unfortunately,
+since linker scripts are specific to a particular host system, target
+architecture, and target memory layout, this manual cannot provide
+portable sample code demonstrating @value{GDBN}'s overlay support.
+
+However, the @value{GDBN} source distribution does contain an overlaid
+program, with linker scripts for a few systems, as part of its test
+suite.  The program consists of the following files from
+ at file{gdb/testsuite/gdb.base}:
+
+ at table @file
+ at item overlays.c
+The main program file.
+ at item ovlymgr.c
+A simple overlay manager, used by @file{overlays.c}.
+ at item foo.c
+ at itemx bar.c
+ at itemx baz.c
+ at itemx grbx.c
+Overlay modules, loaded and used by @file{overlays.c}.
+ at item d10v.ld
+ at itemx m32r.ld
+Linker scripts for linking the test program on the @code{d10v-elf}
+and @code{m32r-elf} targets.
+ at end table
+
+You can build the test program using the @code{d10v-elf} GCC
+cross-compiler like this:
+
+ at smallexample
+$ d10v-elf-gcc -g -c overlays.c
+$ d10v-elf-gcc -g -c ovlymgr.c
+$ d10v-elf-gcc -g -c foo.c
+$ d10v-elf-gcc -g -c bar.c
+$ d10v-elf-gcc -g -c baz.c
+$ d10v-elf-gcc -g -c grbx.c
+$ d10v-elf-gcc -g overlays.o ovlymgr.o foo.o bar.o \
+                  baz.o grbx.o -Wl,-Td10v.ld -o overlays
+ at end smallexample
+
+The build process is identical for any other architecture, except that
+you must substitute the appropriate compiler and linker script for the
+target system for @code{d10v-elf-gcc} and @code{d10v.ld}.
+
+
+ at node Languages
+ at chapter Using @value{GDBN} with Different Languages
+ at cindex languages
+
+Although programming languages generally have common aspects, they are
+rarely expressed in the same manner.  For instance, in ANSI C,
+dereferencing a pointer @code{p} is accomplished by @code{*p}, but in
+Modula-2, it is accomplished by @code{p^}.  Values can also be
+represented (and displayed) differently.  Hex numbers in C appear as
+ at samp{0x1ae}, while in Modula-2 they appear as @samp{1AEH}.
+
+ at cindex working language
+Language-specific information is built into @value{GDBN} for some languages,
+allowing you to express operations like the above in your program's
+native language, and allowing @value{GDBN} to output values in a manner
+consistent with the syntax of your program's native language.  The
+language you use to build expressions is called the @dfn{working
+language}.
+
+ at menu
+* Setting::                     Switching between source languages
+* Show::                        Displaying the language
+* Checks::                      Type and range checks
+* Supported Languages::         Supported languages
+* Unsupported Languages::       Unsupported languages
+ at end menu
+
+ at node Setting
+ at section Switching Between Source Languages
+
+There are two ways to control the working language---either have @value{GDBN}
+set it automatically, or select it manually yourself.  You can use the
+ at code{set language} command for either purpose.  On startup, @value{GDBN}
+defaults to setting the language automatically.  The working language is
+used to determine how expressions you type are interpreted, how values
+are printed, etc.
+
+In addition to the working language, every source file that
+ at value{GDBN} knows about has its own working language.  For some object
+file formats, the compiler might indicate which language a particular
+source file is in.  However, most of the time @value{GDBN} infers the
+language from the name of the file.  The language of a source file
+controls whether C at t{++} names are demangled---this way @code{backtrace} can
+show each frame appropriately for its own language.  There is no way to
+set the language of a source file from within @value{GDBN}, but you can
+set the language associated with a filename extension.  @xref{Show, ,
+Displaying the Language}.
+
+This is most commonly a problem when you use a program, such
+as @code{cfront} or @code{f2c}, that generates C but is written in
+another language.  In that case, make the
+program use @code{#line} directives in its C output; that way
+ at value{GDBN} will know the correct language of the source code of the original
+program, and will display that source code, not the generated C code.
+
+ at menu
+* Filenames::                   Filename extensions and languages.
+* Manually::                    Setting the working language manually
+* Automatically::               Having @value{GDBN} infer the source language
+ at end menu
+
+ at node Filenames
+ at subsection List of Filename Extensions and Languages
+
+If a source file name ends in one of the following extensions, then
+ at value{GDBN} infers that its language is the one indicated.
+
+ at table @file
+ at item .ada
+ at itemx .ads
+ at itemx .adb
+ at itemx .a
+Ada source file.
+
+ at item .c
+C source file
+
+ at item .C
+ at itemx .cc
+ at itemx .cp
+ at itemx .cpp
+ at itemx .cxx
+ at itemx .c++
+C at t{++} source file
+
+ at item .d
+D source file
+
+ at item .m
+Objective-C source file
+
+ at item .f
+ at itemx .F
+Fortran source file
+
+ at item .mod
+Modula-2 source file
+
+ at item .s
+ at itemx .S
+Assembler source file.  This actually behaves almost like C, but
+ at value{GDBN} does not skip over function prologues when stepping.
+ at end table
+
+In addition, you may set the language associated with a filename
+extension.  @xref{Show, , Displaying the Language}.
+
+ at node Manually
+ at subsection Setting the Working Language
+
+If you allow @value{GDBN} to set the language automatically,
+expressions are interpreted the same way in your debugging session and
+your program.
+
+ at kindex set language
+If you wish, you may set the language manually.  To do this, issue the
+command @samp{set language @var{lang}}, where @var{lang} is the name of
+a language, such as
+ at code{c} or @code{modula-2}.
+For a list of the supported languages, type @samp{set language}.
+
+Setting the language manually prevents @value{GDBN} from updating the working
+language automatically.  This can lead to confusion if you try
+to debug a program when the working language is not the same as the
+source language, when an expression is acceptable to both
+languages---but means different things.  For instance, if the current
+source file were written in C, and @value{GDBN} was parsing Modula-2, a
+command such as:
+
+ at smallexample
+print a = b + c
+ at end smallexample
+
+ at noindent
+might not have the effect you intended.  In C, this means to add
+ at code{b} and @code{c} and place the result in @code{a}.  The result
+printed would be the value of @code{a}.  In Modula-2, this means to compare
+ at code{a} to the result of @code{b+c}, yielding a @code{BOOLEAN} value.
+
+ at node Automatically
+ at subsection Having @value{GDBN} Infer the Source Language
+
+To have @value{GDBN} set the working language automatically, use
+ at samp{set language local} or @samp{set language auto}.  @value{GDBN}
+then infers the working language.  That is, when your program stops in a
+frame (usually by encountering a breakpoint), @value{GDBN} sets the
+working language to the language recorded for the function in that
+frame.  If the language for a frame is unknown (that is, if the function
+or block corresponding to the frame was defined in a source file that
+does not have a recognized extension), the current working language is
+not changed, and @value{GDBN} issues a warning.
+
+This may not seem necessary for most programs, which are written
+entirely in one source language.  However, program modules and libraries
+written in one source language can be used by a main program written in
+a different source language.  Using @samp{set language auto} in this
+case frees you from having to set the working language manually.
+
+ at node Show
+ at section Displaying the Language
+
+The following commands help you find out which language is the
+working language, and also what language source files were written in.
+
+ at table @code
+ at item show language
+ at kindex show language
+Display the current working language.  This is the
+language you can use with commands such as @code{print} to
+build and compute expressions that may involve variables in your program.
+
+ at item info frame
+ at kindex info frame at r{, show the source language}
+Display the source language for this frame.  This language becomes the
+working language if you use an identifier from this frame.
+ at xref{Frame Info, ,Information about a Frame}, to identify the other
+information listed here.
+
+ at item info source
+ at kindex info source at r{, show the source language}
+Display the source language of this source file.
+ at xref{Symbols, ,Examining the Symbol Table}, to identify the other
+information listed here.
+ at end table
+
+In unusual circumstances, you may have source files with extensions
+not in the standard list.  You can then set the extension associated
+with a language explicitly:
+
+ at table @code
+ at item set extension-language @var{ext} @var{language}
+ at kindex set extension-language
+Tell @value{GDBN} that source files with extension @var{ext} are to be
+assumed as written in the source language @var{language}.
+
+ at item info extensions
+ at kindex info extensions
+List all the filename extensions and the associated languages.
+ at end table
+
+ at node Checks
+ at section Type and Range Checking
+
+ at quotation
+ at emph{Warning:} In this release, the @value{GDBN} commands for type and range
+checking are included, but they do not yet have any effect.  This
+section documents the intended facilities.
+ at end quotation
+ at c FIXME remove warning when type/range code added
+
+Some languages are designed to guard you against making seemingly common
+errors through a series of compile- and run-time checks.  These include
+checking the type of arguments to functions and operators, and making
+sure mathematical overflows are caught at run time.  Checks such as
+these help to ensure a program's correctness once it has been compiled
+by eliminating type mismatches, and providing active checks for range
+errors when your program is running.
+
+ at value{GDBN} can check for conditions like the above if you wish.
+Although @value{GDBN} does not check the statements in your program,
+it can check expressions entered directly into @value{GDBN} for
+evaluation via the @code{print} command, for example.  As with the
+working language, @value{GDBN} can also decide whether or not to check
+automatically based on your program's source language.
+ at xref{Supported Languages, ,Supported Languages}, for the default
+settings of supported languages.
+
+ at menu
+* Type Checking::               An overview of type checking
+* Range Checking::              An overview of range checking
+ at end menu
+
+ at cindex type checking
+ at cindex checks, type
+ at node Type Checking
+ at subsection An Overview of Type Checking
+
+Some languages, such as Modula-2, are strongly typed, meaning that the
+arguments to operators and functions have to be of the correct type,
+otherwise an error occurs.  These checks prevent type mismatch
+errors from ever causing any run-time problems.  For example,
+
+ at smallexample
+1 + 2 @result{} 3
+ at exdent but
+ at error{} 1 + 2.3
+ at end smallexample
+
+The second example fails because the @code{CARDINAL} 1 is not
+type-compatible with the @code{REAL} 2.3.
+
+For the expressions you use in @value{GDBN} commands, you can tell the
+ at value{GDBN} type checker to skip checking;
+to treat any mismatches as errors and abandon the expression;
+or to only issue warnings when type mismatches occur,
+but evaluate the expression anyway.  When you choose the last of
+these, @value{GDBN} evaluates expressions like the second example above, but
+also issues a warning.
+
+Even if you turn type checking off, there may be other reasons
+related to type that prevent @value{GDBN} from evaluating an expression.
+For instance, @value{GDBN} does not know how to add an @code{int} and
+a @code{struct foo}.  These particular type errors have nothing to do
+with the language in use, and usually arise from expressions, such as
+the one described above, which make little sense to evaluate anyway.
+
+Each language defines to what degree it is strict about type.  For
+instance, both Modula-2 and C require the arguments to arithmetical
+operators to be numbers.  In C, enumerated types and pointers can be
+represented as numbers, so that they are valid arguments to mathematical
+operators.  @xref{Supported Languages, ,Supported Languages}, for further
+details on specific languages.
+
+ at value{GDBN} provides some additional commands for controlling the type checker:
+
+ at kindex set check type
+ at kindex show check type
+ at table @code
+ at item set check type auto
+Set type checking on or off based on the current working language.
+ at xref{Supported Languages, ,Supported Languages}, for the default settings for
+each language.
+
+ at item set check type on
+ at itemx set check type off
+Set type checking on or off, overriding the default setting for the
+current working language.  Issue a warning if the setting does not
+match the language default.  If any type mismatches occur in
+evaluating an expression while type checking is on, @value{GDBN} prints a
+message and aborts evaluation of the expression.
+
+ at item set check type warn
+Cause the type checker to issue warnings, but to always attempt to
+evaluate the expression.  Evaluating the expression may still
+be impossible for other reasons.  For example, @value{GDBN} cannot add
+numbers and structures.
+
+ at item show type
+Show the current setting of the type checker, and whether or not @value{GDBN}
+is setting it automatically.
+ at end table
+
+ at cindex range checking
+ at cindex checks, range
+ at node Range Checking
+ at subsection An Overview of Range Checking
+
+In some languages (such as Modula-2), it is an error to exceed the
+bounds of a type; this is enforced with run-time checks.  Such range
+checking is meant to ensure program correctness by making sure
+computations do not overflow, or indices on an array element access do
+not exceed the bounds of the array.
+
+For expressions you use in @value{GDBN} commands, you can tell
+ at value{GDBN} to treat range errors in one of three ways: ignore them,
+always treat them as errors and abandon the expression, or issue
+warnings but evaluate the expression anyway.
+
+A range error can result from numerical overflow, from exceeding an
+array index bound, or when you type a constant that is not a member
+of any type.  Some languages, however, do not treat overflows as an
+error.  In many implementations of C, mathematical overflow causes the
+result to ``wrap around'' to lower values---for example, if @var{m} is
+the largest integer value, and @var{s} is the smallest, then
+
+ at smallexample
+ at var{m} + 1 @result{} @var{s}
+ at end smallexample
+
+This, too, is specific to individual languages, and in some cases
+specific to individual compilers or machines.  @xref{Supported Languages, ,
+Supported Languages}, for further details on specific languages.
+
+ at value{GDBN} provides some additional commands for controlling the range checker:
+
+ at kindex set check range
+ at kindex show check range
+ at table @code
+ at item set check range auto
+Set range checking on or off based on the current working language.
+ at xref{Supported Languages, ,Supported Languages}, for the default settings for
+each language.
+
+ at item set check range on
+ at itemx set check range off
+Set range checking on or off, overriding the default setting for the
+current working language.  A warning is issued if the setting does not
+match the language default.  If a range error occurs and range checking is on,
+then a message is printed and evaluation of the expression is aborted.
+
+ at item set check range warn
+Output messages when the @value{GDBN} range checker detects a range error,
+but attempt to evaluate the expression anyway.  Evaluating the
+expression may still be impossible for other reasons, such as accessing
+memory that the process does not own (a typical example from many Unix
+systems).
+
+ at item show range
+Show the current setting of the range checker, and whether or not it is
+being set automatically by @value{GDBN}.
+ at end table
+
+ at node Supported Languages
+ at section Supported Languages
+
+ at value{GDBN} supports C, C at t{++}, D, Go, Objective-C, Fortran, Java,
+OpenCL C, Pascal, assembly, Modula-2, and Ada.
+ at c This is false ...
+Some @value{GDBN} features may be used in expressions regardless of the
+language you use: the @value{GDBN} @code{@@} and @code{::} operators,
+and the @samp{@{type@}addr} construct (@pxref{Expressions,
+,Expressions}) can be used with the constructs of any supported
+language.
+
+The following sections detail to what degree each source language is
+supported by @value{GDBN}.  These sections are not meant to be language
+tutorials or references, but serve only as a reference guide to what the
+ at value{GDBN} expression parser accepts, and what input and output
+formats should look like for different languages.  There are many good
+books written on each of these languages; please look to these for a
+language reference or tutorial.
+
+ at menu
+* C::                           C and C at t{++}
+* D::                           D
+* Go::                          Go
+* Objective-C::                 Objective-C
+* OpenCL C::                    OpenCL C
+* Fortran::                     Fortran
+* Pascal::                      Pascal
+* Modula-2::                    Modula-2
+* Ada::                         Ada
+ at end menu
+
+ at node C
+ at subsection C and C at t{++}
+
+ at cindex C and C at t{++}
+ at cindex expressions in C or C at t{++}
+
+Since C and C at t{++} are so closely related, many features of @value{GDBN} apply
+to both languages.  Whenever this is the case, we discuss those languages
+together.
+
+ at cindex C at t{++}
+ at cindex @code{g++}, @sc{gnu} C at t{++} compiler
+ at cindex @sc{gnu} C at t{++}
+The C at t{++} debugging facilities are jointly implemented by the C at t{++}
+compiler and @value{GDBN}.  Therefore, to debug your C at t{++} code
+effectively, you must compile your C at t{++} programs with a supported
+C at t{++} compiler, such as @sc{gnu} @code{g++}, or the HP ANSI C at t{++}
+compiler (@code{aCC}).
+
+ at menu
+* C Operators::                 C and C at t{++} operators
+* C Constants::                 C and C at t{++} constants
+* C Plus Plus Expressions::     C at t{++} expressions
+* C Defaults::                  Default settings for C and C at t{++}
+* C Checks::                    C and C at t{++} type and range checks
+* Debugging C::                 @value{GDBN} and C
+* Debugging C Plus Plus::       @value{GDBN} features for C at t{++}
+* Decimal Floating Point::      Numbers in Decimal Floating Point format
+ at end menu
+
+ at node C Operators
+ at subsubsection C and C at t{++} Operators
+
+ at cindex C and C at t{++} operators
+
+Operators must be defined on values of specific types.  For instance,
+ at code{+} is defined on numbers, but not on structures.  Operators are
+often defined on groups of types.
+
+For the purposes of C and C at t{++}, the following definitions hold:
+
+ at itemize @bullet
+
+ at item
+ at emph{Integral types} include @code{int} with any of its storage-class
+specifiers; @code{char}; @code{enum}; and, for C at t{++}, @code{bool}.
+
+ at item
+ at emph{Floating-point types} include @code{float}, @code{double}, and
+ at code{long double} (if supported by the target platform).
+
+ at item
+ at emph{Pointer types} include all types defined as @code{(@var{type} *)}.
+
+ at item
+ at emph{Scalar types} include all of the above.
+
+ at end itemize
+
+ at noindent
+The following operators are supported.  They are listed here
+in order of increasing precedence:
+
+ at table @code
+ at item ,
+The comma or sequencing operator.  Expressions in a comma-separated list
+are evaluated from left to right, with the result of the entire
+expression being the last expression evaluated.
+
+ at item =
+Assignment.  The value of an assignment expression is the value
+assigned.  Defined on scalar types.
+
+ at item @var{op}=
+Used in an expression of the form @w{@code{@var{a} @var{op}= @var{b}}},
+and translated to @w{@code{@var{a} = @var{a op b}}}.
+ at w{@code{@var{op}=}} and @code{=} have the same precedence.
+ at var{op} is any one of the operators @code{|}, @code{^}, @code{&},
+ at code{<<}, @code{>>}, @code{+}, @code{-}, @code{*}, @code{/}, @code{%}.
+
+ at item ?:
+The ternary operator.  @code{@var{a} ? @var{b} : @var{c}} can be thought
+of as:  if @var{a} then @var{b} else @var{c}.  @var{a} should be of an
+integral type.
+
+ at item ||
+Logical @sc{or}.  Defined on integral types.
+
+ at item &&
+Logical @sc{and}.  Defined on integral types.
+
+ at item |
+Bitwise @sc{or}.  Defined on integral types.
+
+ at item ^
+Bitwise exclusive- at sc{or}.  Defined on integral types.
+
+ at item &
+Bitwise @sc{and}.  Defined on integral types.
+
+ at item ==@r{, }!=
+Equality and inequality.  Defined on scalar types.  The value of these
+expressions is 0 for false and non-zero for true.
+
+ at item <@r{, }>@r{, }<=@r{, }>=
+Less than, greater than, less than or equal, greater than or equal.
+Defined on scalar types.  The value of these expressions is 0 for false
+and non-zero for true.
+
+ at item <<@r{, }>>
+left shift, and right shift.  Defined on integral types.
+
+ at item @@
+The @value{GDBN} ``artificial array'' operator (@pxref{Expressions, ,Expressions}).
+
+ at item + at r{, }-
+Addition and subtraction.  Defined on integral types, floating-point types and
+pointer types.
+
+ at item *@r{, }/@r{, }%
+Multiplication, division, and modulus.  Multiplication and division are
+defined on integral and floating-point types.  Modulus is defined on
+integral types.
+
+ at item ++ at r{, }--
+Increment and decrement.  When appearing before a variable, the
+operation is performed before the variable is used in an expression;
+when appearing after it, the variable's value is used before the
+operation takes place.
+
+ at item *
+Pointer dereferencing.  Defined on pointer types.  Same precedence as
+ at code{++}.
+
+ at item &
+Address operator.  Defined on variables.  Same precedence as @code{++}.
+
+For debugging C at t{++}, @value{GDBN} implements a use of @samp{&} beyond what is
+allowed in the C at t{++} language itself: you can use @samp{&(&@var{ref})}
+to examine the address
+where a C at t{++} reference variable (declared with @samp{&@var{ref}}) is
+stored.
+
+ at item -
+Negative.  Defined on integral and floating-point types.  Same
+precedence as @code{++}.
+
+ at item !
+Logical negation.  Defined on integral types.  Same precedence as
+ at code{++}.
+
+ at item ~
+Bitwise complement operator.  Defined on integral types.  Same precedence as
+ at code{++}.
+
+
+ at item . at r{, }->
+Structure member, and pointer-to-structure member.  For convenience,
+ at value{GDBN} regards the two as equivalent, choosing whether to dereference a
+pointer based on the stored type information.
+Defined on @code{struct} and @code{union} data.
+
+ at item .*@r{, }->*
+Dereferences of pointers to members.
+
+ at item []
+Array indexing.  @code{@var{a}[@var{i}]} is defined as
+ at code{*(@var{a}+ at var{i})}.  Same precedence as @code{->}.
+
+ at item ()
+Function parameter list.  Same precedence as @code{->}.
+
+ at item ::
+C at t{++} scope resolution operator.  Defined on @code{struct}, @code{union},
+and @code{class} types.
+
+ at item ::
+Doubled colons also represent the @value{GDBN} scope operator
+(@pxref{Expressions, ,Expressions}).  Same precedence as @code{::},
+above.
+ at end table
+
+If an operator is redefined in the user code, @value{GDBN} usually
+attempts to invoke the redefined version instead of using the operator's
+predefined meaning.
+
+ at node C Constants
+ at subsubsection C and C at t{++} Constants
+
+ at cindex C and C at t{++} constants
+
+ at value{GDBN} allows you to express the constants of C and C at t{++} in the
+following ways:
+
+ at itemize @bullet
+ at item
+Integer constants are a sequence of digits.  Octal constants are
+specified by a leading @samp{0} (i.e.@: zero), and hexadecimal constants
+by a leading @samp{0x} or @samp{0X}.  Constants may also end with a letter
+ at samp{l}, specifying that the constant should be treated as a
+ at code{long} value.
+
+ at item
+Floating point constants are a sequence of digits, followed by a decimal
+point, followed by a sequence of digits, and optionally followed by an
+exponent.  An exponent is of the form:
+ at samp{@w{e at r{[[}+ at r{]|}- at r{]}@var{nnn}}}, where @var{nnn} is another
+sequence of digits.  The @samp{+} is optional for positive exponents.
+A floating-point constant may also end with a letter @samp{f} or
+ at samp{F}, specifying that the constant should be treated as being of
+the @code{float} (as opposed to the default @code{double}) type; or with
+a letter @samp{l} or @samp{L}, which specifies a @code{long double}
+constant.
+
+ at item
+Enumerated constants consist of enumerated identifiers, or their
+integral equivalents.
+
+ at item
+Character constants are a single character surrounded by single quotes
+(@code{'}), or a number---the ordinal value of the corresponding character
+(usually its @sc{ascii} value).  Within quotes, the single character may
+be represented by a letter or by @dfn{escape sequences}, which are of
+the form @samp{\@var{nnn}}, where @var{nnn} is the octal representation
+of the character's ordinal value; or of the form @samp{\@var{x}}, where
+ at samp{@var{x}} is a predefined special character---for example,
+ at samp{\n} for newline.
+
+Wide character constants can be written by prefixing a character
+constant with @samp{L}, as in C.  For example, @samp{L'x'} is the wide
+form of @samp{x}.  The target wide character set is used when
+computing the value of this constant (@pxref{Character Sets}).
+
+ at item
+String constants are a sequence of character constants surrounded by
+double quotes (@code{"}).  Any valid character constant (as described
+above) may appear.  Double quotes within the string must be preceded by
+a backslash, so for instance @samp{"a\"b'c"} is a string of five
+characters.
+
+Wide string constants can be written by prefixing a string constant
+with @samp{L}, as in C.  The target wide character set is used when
+computing the value of this constant (@pxref{Character Sets}).
+
+ at item
+Pointer constants are an integral value.  You can also write pointers
+to constants using the C operator @samp{&}.
+
+ at item
+Array constants are comma-separated lists surrounded by braces @samp{@{}
+and @samp{@}}; for example, @samp{@{1,2,3@}} is a three-element array of
+integers, @samp{@{@{1,2@}, @{3,4@}, @{5,6@}@}} is a three-by-two array,
+and @samp{@{&"hi", &"there", &"fred"@}} is a three-element array of pointers.
+ at end itemize
+
+ at node C Plus Plus Expressions
+ at subsubsection C at t{++} Expressions
+
+ at cindex expressions in C at t{++}
+ at value{GDBN} expression handling can interpret most C at t{++} expressions.
+
+ at cindex debugging C at t{++} programs
+ at cindex C at t{++} compilers
+ at cindex debug formats and C at t{++}
+ at cindex @value{NGCC} and C at t{++}
+ at quotation
+ at emph{Warning:} @value{GDBN} can only debug C at t{++} code if you use
+the proper compiler and the proper debug format.  Currently,
+ at value{GDBN} works best when debugging C at t{++} code that is compiled
+with the most recent version of @value{NGCC} possible.  The DWARF
+debugging format is preferred; @value{NGCC} defaults to this on most
+popular platforms.  Other compilers and/or debug formats are likely to
+work badly or not at all when using @value{GDBN} to debug C at t{++}
+code.  @xref{Compilation}.
+ at end quotation
+
+ at enumerate
+
+ at cindex member functions
+ at item
+Member function calls are allowed; you can use expressions like
+
+ at smallexample
+count = aml->GetOriginal(x, y)
+ at end smallexample
+
+ at vindex this at r{, inside C at t{++} member functions}
+ at cindex namespace in C at t{++}
+ at item
+While a member function is active (in the selected stack frame), your
+expressions have the same namespace available as the member function;
+that is, @value{GDBN} allows implicit references to the class instance
+pointer @code{this} following the same rules as C at t{++}.  @code{using}
+declarations in the current scope are also respected by @value{GDBN}.
+
+ at cindex call overloaded functions
+ at cindex overloaded functions, calling
+ at cindex type conversions in C at t{++}
+ at item
+You can call overloaded functions; @value{GDBN} resolves the function
+call to the right definition, with some restrictions.  @value{GDBN} does not
+perform overload resolution involving user-defined type conversions,
+calls to constructors, or instantiations of templates that do not exist
+in the program.  It also cannot handle ellipsis argument lists or
+default arguments.
+
+It does perform integral conversions and promotions, floating-point
+promotions, arithmetic conversions, pointer conversions, conversions of
+class objects to base classes, and standard conversions such as those of
+functions or arrays to pointers; it requires an exact match on the
+number of function arguments.
+
+Overload resolution is always performed, unless you have specified
+ at code{set overload-resolution off}.  @xref{Debugging C Plus Plus,
+, at value{GDBN} Features for C at t{++}}.
+
+You must specify @code{set overload-resolution off} in order to use an
+explicit function signature to call an overloaded function, as in
+ at smallexample
+p 'foo(char,int)'('x', 13)
+ at end smallexample
+
+The @value{GDBN} command-completion facility can simplify this;
+see @ref{Completion, ,Command Completion}.
+
+ at cindex reference declarations
+ at item
+ at value{GDBN} understands variables declared as C at t{++} references; you can use
+them in expressions just as you do in C at t{++} source---they are automatically
+dereferenced.
+
+In the parameter list shown when @value{GDBN} displays a frame, the values of
+reference variables are not displayed (unlike other variables); this
+avoids clutter, since references are often used for large structures.
+The @emph{address} of a reference variable is always shown, unless
+you have specified @samp{set print address off}.
+
+ at item
+ at value{GDBN} supports the C at t{++} name resolution operator @code{::}---your
+expressions can use it just as expressions in your program do.  Since
+one scope may be defined in another, you can use @code{::} repeatedly if
+necessary, for example in an expression like
+ at samp{@var{scope1}::@var{scope2}::@var{name}}.  @value{GDBN} also allows
+resolving name scope by reference to source files, in both C and C at t{++}
+debugging (@pxref{Variables, ,Program Variables}).
+
+ at item
+ at value{GDBN} performs argument-dependent lookup, following the C at t{++}
+specification.
+ at end enumerate
+
+ at node C Defaults
+ at subsubsection C and C at t{++} Defaults
+
+ at cindex C and C at t{++} defaults
+
+If you allow @value{GDBN} to set type and range checking automatically, they
+both default to @code{off} whenever the working language changes to
+C or C at t{++}.  This happens regardless of whether you or @value{GDBN}
+selects the working language.
+
+If you allow @value{GDBN} to set the language automatically, it
+recognizes source files whose names end with @file{.c}, @file{.C}, or
+ at file{.cc}, etc, and when @value{GDBN} enters code compiled from one of
+these files, it sets the working language to C or C at t{++}.
+ at xref{Automatically, ,Having @value{GDBN} Infer the Source Language},
+for further details.
+
+ at c Type checking is (a) primarily motivated by Modula-2, and (b)
+ at c unimplemented.  If (b) changes, it might make sense to let this node
+ at c appear even if Mod-2 does not, but meanwhile ignore it. roland 16jul93.
+
+ at node C Checks
+ at subsubsection C and C at t{++} Type and Range Checks
+
+ at cindex C and C at t{++} checks
+
+By default, when @value{GDBN} parses C or C at t{++} expressions, type checking
+is not used.  However, if you turn type checking on, @value{GDBN}
+considers two variables type equivalent if:
+
+ at itemize @bullet
+ at item
+The two variables are structured and have the same structure, union, or
+enumerated tag.
+
+ at item
+The two variables have the same type name, or types that have been
+declared equivalent through @code{typedef}.
+
+ at ignore
+ at c leaving this out because neither J Gilmore nor R Pesch understand it.
+ at c FIXME--beers?
+ at item
+The two @code{struct}, @code{union}, or @code{enum} variables are
+declared in the same declaration.  (Note: this may not be true for all C
+compilers.)
+ at end ignore
+ at end itemize
+
+Range checking, if turned on, is done on mathematical operations.  Array
+indices are not checked, since they are often used to index a pointer
+that is not itself an array.
+
+ at node Debugging C
+ at subsubsection @value{GDBN} and C
+
+The @code{set print union} and @code{show print union} commands apply to
+the @code{union} type.  When set to @samp{on}, any @code{union} that is
+inside a @code{struct} or @code{class} is also printed.  Otherwise, it
+appears as @samp{@{...@}}.
+
+The @code{@@} operator aids in the debugging of dynamic arrays, formed
+with pointers and a memory allocation function.  @xref{Expressions,
+,Expressions}.
+
+ at node Debugging C Plus Plus
+ at subsubsection @value{GDBN} Features for C at t{++}
+
+ at cindex commands for C at t{++}
+
+Some @value{GDBN} commands are particularly useful with C at t{++}, and some are
+designed specifically for use with C at t{++}.  Here is a summary:
+
+ at table @code
+ at cindex break in overloaded functions
+ at item @r{breakpoint menus}
+When you want a breakpoint in a function whose name is overloaded,
+ at value{GDBN} has the capability to display a menu of possible breakpoint
+locations to help you specify which function definition you want.
+ at xref{Ambiguous Expressions,,Ambiguous Expressions}.
+
+ at cindex overloading in C at t{++}
+ at item rbreak @var{regex}
+Setting breakpoints using regular expressions is helpful for setting
+breakpoints on overloaded functions that are not members of any special
+classes.
+ at xref{Set Breaks, ,Setting Breakpoints}.
+
+ at cindex C at t{++} exception handling
+ at item catch throw
+ at itemx catch catch
+Debug C at t{++} exception handling using these commands.  @xref{Set
+Catchpoints, , Setting Catchpoints}.
+
+ at cindex inheritance
+ at item ptype @var{typename}
+Print inheritance relationships as well as other information for type
+ at var{typename}.
+ at xref{Symbols, ,Examining the Symbol Table}.
+
+ at item info vtbl @var{expression}.
+The @code{info vtbl} command can be used to display the virtual
+method tables of the object computed by @var{expression}.  This shows
+one entry per virtual table; there may be multiple virtual tables when
+multiple inheritance is in use.
+
+ at cindex C at t{++} symbol display
+ at item set print demangle
+ at itemx show print demangle
+ at itemx set print asm-demangle
+ at itemx show print asm-demangle
+Control whether C at t{++} symbols display in their source form, both when
+displaying code as C at t{++} source and when displaying disassemblies.
+ at xref{Print Settings, ,Print Settings}.
+
+ at item set print object
+ at itemx show print object
+Choose whether to print derived (actual) or declared types of objects.
+ at xref{Print Settings, ,Print Settings}.
+
+ at item set print vtbl
+ at itemx show print vtbl
+Control the format for printing virtual function tables.
+ at xref{Print Settings, ,Print Settings}.
+(The @code{vtbl} commands do not work on programs compiled with the HP
+ANSI C at t{++} compiler (@code{aCC}).)
+
+ at kindex set overload-resolution
+ at cindex overloaded functions, overload resolution
+ at item set overload-resolution on
+Enable overload resolution for C at t{++} expression evaluation.  The default
+is on.  For overloaded functions, @value{GDBN} evaluates the arguments
+and searches for a function whose signature matches the argument types,
+using the standard C at t{++} conversion rules (see @ref{C Plus Plus
+Expressions, ,C at t{++} Expressions}, for details).
+If it cannot find a match, it emits a message.
+
+ at item set overload-resolution off
+Disable overload resolution for C at t{++} expression evaluation.  For
+overloaded functions that are not class member functions, @value{GDBN}
+chooses the first function of the specified name that it finds in the
+symbol table, whether or not its arguments are of the correct type.  For
+overloaded functions that are class member functions, @value{GDBN}
+searches for a function whose signature @emph{exactly} matches the
+argument types.
+
+ at kindex show overload-resolution
+ at item show overload-resolution
+Show the current setting of overload resolution.
+
+ at item @r{Overloaded symbol names}
+You can specify a particular definition of an overloaded symbol, using
+the same notation that is used to declare such symbols in C at t{++}: type
+ at code{@var{symbol}(@var{types})} rather than just @var{symbol}.  You can
+also use the @value{GDBN} command-line word completion facilities to list the
+available choices, or to finish the type list for you.
+ at xref{Completion,, Command Completion}, for details on how to do this.
+ at end table
+
+ at node Decimal Floating Point
+ at subsubsection Decimal Floating Point format
+ at cindex decimal floating point format
+
+ at value{GDBN} can examine, set and perform computations with numbers in
+decimal floating point format, which in the C language correspond to the
+ at code{_Decimal32}, @code{_Decimal64} and @code{_Decimal128} types as
+specified by the extension to support decimal floating-point arithmetic.
+
+There are two encodings in use, depending on the architecture: BID (Binary
+Integer Decimal) for x86 and x86-64, and DPD (Densely Packed Decimal) for
+PowerPC.  @value{GDBN} will use the appropriate encoding for the configured
+target.
+
+Because of a limitation in @file{libdecnumber}, the library used by @value{GDBN}
+to manipulate decimal floating point numbers, it is not possible to convert
+(using a cast, for example) integers wider than 32-bit to decimal float.
+
+In addition, in order to imitate @value{GDBN}'s behaviour with binary floating
+point computations, error checking in decimal float operations ignores
+underflow, overflow and divide by zero exceptions.
+
+In the PowerPC architecture, @value{GDBN} provides a set of pseudo-registers
+to inspect @code{_Decimal128} values stored in floating point registers.
+See @ref{PowerPC,,PowerPC} for more details.
+
+ at node D
+ at subsection D
+
+ at cindex D
+ at value{GDBN} can be used to debug programs written in D and compiled with
+GDC, LDC or DMD compilers. Currently @value{GDBN} supports only one D
+specific feature --- dynamic arrays.
+
+ at node Go
+ at subsection Go
+
+ at cindex Go (programming language)
+ at value{GDBN} can be used to debug programs written in Go and compiled with
+ at file{gccgo} or @file{6g} compilers.
+
+Here is a summary of the Go-specific features and restrictions:
+
+ at table @code
+ at cindex current Go package
+ at item The current Go package
+The name of the current package does not need to be specified when
+specifying global variables and functions.
+
+For example, given the program:
+
+ at example
+package main
+var myglob = "Shall we?"
+func main () @{
+  // ...
+@}
+ at end example
+
+When stopped inside @code{main} either of these work:
+
+ at example
+(gdb) p myglob
+(gdb) p main.myglob
+ at end example
+
+ at cindex builtin Go types
+ at item Builtin Go types
+The @code{string} type is recognized by @value{GDBN} and is printed
+as a string.
+
+ at cindex builtin Go functions
+ at item Builtin Go functions
+The @value{GDBN} expression parser recognizes the @code{unsafe.Sizeof}
+function and handles it internally.
+
+ at cindex restrictions on Go expressions
+ at item Restrictions on Go expressions
+All Go operators are supported except @code{&^}.
+The Go @code{_} ``blank identifier'' is not supported.
+Automatic dereferencing of pointers is not supported.
+ at end table
+
+ at node Objective-C
+ at subsection Objective-C
+
+ at cindex Objective-C
+This section provides information about some commands and command
+options that are useful for debugging Objective-C code.  See also
+ at ref{Symbols, info classes}, and @ref{Symbols, info selectors}, for a
+few more commands specific to Objective-C support.
+
+ at menu
+* Method Names in Commands::
+* The Print Command with Objective-C::
+ at end menu
+
+ at node Method Names in Commands
+ at subsubsection Method Names in Commands
+
+The following commands have been extended to accept Objective-C method
+names as line specifications:
+
+ at kindex clear at r{, and Objective-C}
+ at kindex break at r{, and Objective-C}
+ at kindex info line at r{, and Objective-C}
+ at kindex jump at r{, and Objective-C}
+ at kindex list at r{, and Objective-C}
+ at itemize
+ at item @code{clear}
+ at item @code{break}
+ at item @code{info line}
+ at item @code{jump}
+ at item @code{list}
+ at end itemize
+
+A fully qualified Objective-C method name is specified as
+
+ at smallexample
+-[@var{Class} @var{methodName}]
+ at end smallexample
+
+where the minus sign is used to indicate an instance method and a
+plus sign (not shown) is used to indicate a class method.  The class
+name @var{Class} and method name @var{methodName} are enclosed in
+brackets, similar to the way messages are specified in Objective-C
+source code.  For example, to set a breakpoint at the @code{create}
+instance method of class @code{Fruit} in the program currently being
+debugged, enter:
+
+ at smallexample
+break -[Fruit create]
+ at end smallexample
+
+To list ten program lines around the @code{initialize} class method,
+enter:
+
+ at smallexample
+list +[NSText initialize]
+ at end smallexample
+
+In the current version of @value{GDBN}, the plus or minus sign is
+required.  In future versions of @value{GDBN}, the plus or minus
+sign will be optional, but you can use it to narrow the search.  It
+is also possible to specify just a method name:
+
+ at smallexample
+break create
+ at end smallexample
+
+You must specify the complete method name, including any colons.  If
+your program's source files contain more than one @code{create} method,
+you'll be presented with a numbered list of classes that implement that
+method.  Indicate your choice by number, or type @samp{0} to exit if
+none apply.
+
+As another example, to clear a breakpoint established at the
+ at code{makeKeyAndOrderFront:} method of the @code{NSWindow} class, enter:
+
+ at smallexample
+clear -[NSWindow makeKeyAndOrderFront:]
+ at end smallexample
+
+ at node The Print Command with Objective-C
+ at subsubsection The Print Command With Objective-C
+ at cindex Objective-C, print objects
+ at kindex print-object
+ at kindex po @r{(@code{print-object})}
+
+The print command has also been extended to accept methods.  For example:
+
+ at smallexample
+print -[@var{object} hash]
+ at end smallexample
+
+ at cindex print an Objective-C object description
+ at cindex @code{_NSPrintForDebugger}, and printing Objective-C objects
+ at noindent
+will tell @value{GDBN} to send the @code{hash} message to @var{object}
+and print the result.  Also, an additional command has been added,
+ at code{print-object} or @code{po} for short, which is meant to print
+the description of an object.  However, this command may only work
+with certain Objective-C libraries that have a particular hook
+function, @code{_NSPrintForDebugger}, defined.
+
+ at node OpenCL C
+ at subsection OpenCL C
+
+ at cindex OpenCL C
+This section provides information about @value{GDBN}s OpenCL C support.
+
+ at menu
+* OpenCL C Datatypes::
+* OpenCL C Expressions::
+* OpenCL C Operators::
+ at end menu
+
+ at node OpenCL C Datatypes
+ at subsubsection OpenCL C Datatypes
+
+ at cindex OpenCL C Datatypes
+ at value{GDBN} supports the builtin scalar and vector datatypes specified
+by OpenCL 1.1.  In addition the half- and double-precision floating point
+data types of the @code{cl_khr_fp16} and @code{cl_khr_fp64} OpenCL
+extensions are also known to @value{GDBN}.
+
+ at node OpenCL C Expressions
+ at subsubsection OpenCL C Expressions
+
+ at cindex OpenCL C Expressions
+ at value{GDBN} supports accesses to vector components including the access as
+lvalue where possible.  Since OpenCL C is based on C99 most C expressions
+supported by @value{GDBN} can be used as well.
+
+ at node OpenCL C Operators
+ at subsubsection OpenCL C Operators
+
+ at cindex OpenCL C Operators
+ at value{GDBN} supports the operators specified by OpenCL 1.1 for scalar and
+vector data types.
+
+ at node Fortran
+ at subsection Fortran
+ at cindex Fortran-specific support in @value{GDBN}
+
+ at value{GDBN} can be used to debug programs written in Fortran, but it
+currently supports only the features of Fortran 77 language.
+
+ at cindex trailing underscore, in Fortran symbols
+Some Fortran compilers (@sc{gnu} Fortran 77 and Fortran 95 compilers
+among them) append an underscore to the names of variables and
+functions.  When you debug programs compiled by those compilers, you
+will need to refer to variables and functions with a trailing
+underscore.
+
+ at menu
+* Fortran Operators::           Fortran operators and expressions
+* Fortran Defaults::            Default settings for Fortran
+* Special Fortran Commands::    Special @value{GDBN} commands for Fortran
+ at end menu
+
+ at node Fortran Operators
+ at subsubsection Fortran Operators and Expressions
+
+ at cindex Fortran operators and expressions
+
+Operators must be defined on values of specific types.  For instance,
+ at code{+} is defined on numbers, but not on characters or other non-
+arithmetic types.  Operators are often defined on groups of types.
+
+ at table @code
+ at item **
+The exponentiation operator.  It raises the first operand to the power
+of the second one.
+
+ at item :
+The range operator.  Normally used in the form of array(low:high) to
+represent a section of array.
+
+ at item %
+The access component operator.  Normally used to access elements in derived
+types.  Also suitable for unions.  As unions aren't part of regular Fortran,
+this can only happen when accessing a register that uses a gdbarch-defined
+union type.
+ at end table
+
+ at node Fortran Defaults
+ at subsubsection Fortran Defaults
+
+ at cindex Fortran Defaults
+
+Fortran symbols are usually case-insensitive, so @value{GDBN} by
+default uses case-insensitive matches for Fortran symbols.  You can
+change that with the @samp{set case-insensitive} command, see
+ at ref{Symbols}, for the details.
+
+ at node Special Fortran Commands
+ at subsubsection Special Fortran Commands
+
+ at cindex Special Fortran commands
+
+ at value{GDBN} has some commands to support Fortran-specific features,
+such as displaying common blocks.
+
+ at table @code
+ at cindex @code{COMMON} blocks, Fortran
+ at kindex info common
+ at item info common @r{[}@var{common-name}@r{]}
+This command prints the values contained in the Fortran @code{COMMON}
+block whose name is @var{common-name}.  With no argument, the names of
+all @code{COMMON} blocks visible at the current program location are
+printed.
+ at end table
+
+ at node Pascal
+ at subsection Pascal
+
+ at cindex Pascal support in @value{GDBN}, limitations
+Debugging Pascal programs which use sets, subranges, file variables, or
+nested functions does not currently work.  @value{GDBN} does not support
+entering expressions, printing values, or similar features using Pascal
+syntax.
+
+The Pascal-specific command @code{set print pascal_static-members}
+controls whether static members of Pascal objects are displayed.
+ at xref{Print Settings, pascal_static-members}.
+
+ at node Modula-2
+ at subsection Modula-2
+
+ at cindex Modula-2, @value{GDBN} support
+
+The extensions made to @value{GDBN} to support Modula-2 only support
+output from the @sc{gnu} Modula-2 compiler (which is currently being
+developed).  Other Modula-2 compilers are not currently supported, and
+attempting to debug executables produced by them is most likely
+to give an error as @value{GDBN} reads in the executable's symbol
+table.
+
+ at cindex expressions in Modula-2
+ at menu
+* M2 Operators::                Built-in operators
+* Built-In Func/Proc::          Built-in functions and procedures
+* M2 Constants::                Modula-2 constants
+* M2 Types::                    Modula-2 types
+* M2 Defaults::                 Default settings for Modula-2
+* Deviations::                  Deviations from standard Modula-2
+* M2 Checks::                   Modula-2 type and range checks
+* M2 Scope::                    The scope operators @code{::} and @code{.}
+* GDB/M2::                      @value{GDBN} and Modula-2
+ at end menu
+
+ at node M2 Operators
+ at subsubsection Operators
+ at cindex Modula-2 operators
+
+Operators must be defined on values of specific types.  For instance,
+ at code{+} is defined on numbers, but not on structures.  Operators are
+often defined on groups of types.  For the purposes of Modula-2, the
+following definitions hold:
+
+ at itemize @bullet
+
+ at item
+ at emph{Integral types} consist of @code{INTEGER}, @code{CARDINAL}, and
+their subranges.
+
+ at item
+ at emph{Character types} consist of @code{CHAR} and its subranges.
+
+ at item
+ at emph{Floating-point types} consist of @code{REAL}.
+
+ at item
+ at emph{Pointer types} consist of anything declared as @code{POINTER TO
+ at var{type}}.
+
+ at item
+ at emph{Scalar types} consist of all of the above.
+
+ at item
+ at emph{Set types} consist of @code{SET} and @code{BITSET} types.
+
+ at item
+ at emph{Boolean types} consist of @code{BOOLEAN}.
+ at end itemize
+
+ at noindent
+The following operators are supported, and appear in order of
+increasing precedence:
+
+ at table @code
+ at item ,
+Function argument or array index separator.
+
+ at item :=
+Assignment.  The value of @var{var} @code{:=} @var{value} is
+ at var{value}.
+
+ at item <@r{, }>
+Less than, greater than on integral, floating-point, or enumerated
+types.
+
+ at item <=@r{, }>=
+Less than or equal to, greater than or equal to
+on integral, floating-point and enumerated types, or set inclusion on
+set types.  Same precedence as @code{<}.
+
+ at item =@r{, }<>@r{, }#
+Equality and two ways of expressing inequality, valid on scalar types.
+Same precedence as @code{<}.  In @value{GDBN} scripts, only @code{<>} is
+available for inequality, since @code{#} conflicts with the script
+comment character.
+
+ at item IN
+Set membership.  Defined on set types and the types of their members.
+Same precedence as @code{<}.
+
+ at item OR
+Boolean disjunction.  Defined on boolean types.
+
+ at item AND at r{, }&
+Boolean conjunction.  Defined on boolean types.
+
+ at item @@
+The @value{GDBN} ``artificial array'' operator (@pxref{Expressions, ,Expressions}).
+
+ at item + at r{, }-
+Addition and subtraction on integral and floating-point types, or union
+and difference on set types.
+
+ at item *
+Multiplication on integral and floating-point types, or set intersection
+on set types.
+
+ at item /
+Division on floating-point types, or symmetric set difference on set
+types.  Same precedence as @code{*}.
+
+ at item DIV at r{, }MOD
+Integer division and remainder.  Defined on integral types.  Same
+precedence as @code{*}.
+
+ at item -
+Negative.  Defined on @code{INTEGER} and @code{REAL} data.
+
+ at item ^
+Pointer dereferencing.  Defined on pointer types.
+
+ at item NOT
+Boolean negation.  Defined on boolean types.  Same precedence as
+ at code{^}.
+
+ at item .
+ at code{RECORD} field selector.  Defined on @code{RECORD} data.  Same
+precedence as @code{^}.
+
+ at item []
+Array indexing.  Defined on @code{ARRAY} data.  Same precedence as @code{^}.
+
+ at item ()
+Procedure argument list.  Defined on @code{PROCEDURE} objects.  Same precedence
+as @code{^}.
+
+ at item ::@r{, }.
+ at value{GDBN} and Modula-2 scope operators.
+ at end table
+
+ at quotation
+ at emph{Warning:} Set expressions and their operations are not yet supported, so @value{GDBN}
+treats the use of the operator @code{IN}, or the use of operators
+ at code{+}, @code{-}, @code{*}, @code{/}, @code{=}, , @code{<>}, @code{#},
+ at code{<=}, and @code{>=} on sets as an error.
+ at end quotation
+
+
+ at node Built-In Func/Proc
+ at subsubsection Built-in Functions and Procedures
+ at cindex Modula-2 built-ins
+
+Modula-2 also makes available several built-in procedures and functions.
+In describing these, the following metavariables are used:
+
+ at table @var
+
+ at item a
+represents an @code{ARRAY} variable.
+
+ at item c
+represents a @code{CHAR} constant or variable.
+
+ at item i
+represents a variable or constant of integral type.
+
+ at item m
+represents an identifier that belongs to a set.  Generally used in the
+same function with the metavariable @var{s}.  The type of @var{s} should
+be @code{SET OF @var{mtype}} (where @var{mtype} is the type of @var{m}).
+
+ at item n
+represents a variable or constant of integral or floating-point type.
+
+ at item r
+represents a variable or constant of floating-point type.
+
+ at item t
+represents a type.
+
+ at item v
+represents a variable.
+
+ at item x
+represents a variable or constant of one of many types.  See the
+explanation of the function for details.
+ at end table
+
+All Modula-2 built-in procedures also return a result, described below.
+
+ at table @code
+ at item ABS(@var{n})
+Returns the absolute value of @var{n}.
+
+ at item CAP(@var{c})
+If @var{c} is a lower case letter, it returns its upper case
+equivalent, otherwise it returns its argument.
+
+ at item CHR(@var{i})
+Returns the character whose ordinal value is @var{i}.
+
+ at item DEC(@var{v})
+Decrements the value in the variable @var{v} by one.  Returns the new value.
+
+ at item DEC(@var{v}, at var{i})
+Decrements the value in the variable @var{v} by @var{i}.  Returns the
+new value.
+
+ at item EXCL(@var{m}, at var{s})
+Removes the element @var{m} from the set @var{s}.  Returns the new
+set.
+
+ at item FLOAT(@var{i})
+Returns the floating point equivalent of the integer @var{i}.
+
+ at item HIGH(@var{a})
+Returns the index of the last member of @var{a}.
+
+ at item INC(@var{v})
+Increments the value in the variable @var{v} by one.  Returns the new value.
+
+ at item INC(@var{v}, at var{i})
+Increments the value in the variable @var{v} by @var{i}.  Returns the
+new value.
+
+ at item INCL(@var{m}, at var{s})
+Adds the element @var{m} to the set @var{s} if it is not already
+there.  Returns the new set.
+
+ at item MAX(@var{t})
+Returns the maximum value of the type @var{t}.
+
+ at item MIN(@var{t})
+Returns the minimum value of the type @var{t}.
+
+ at item ODD(@var{i})
+Returns boolean TRUE if @var{i} is an odd number.
+
+ at item ORD(@var{x})
+Returns the ordinal value of its argument.  For example, the ordinal
+value of a character is its @sc{ascii} value (on machines supporting the
+ at sc{ascii} character set).  @var{x} must be of an ordered type, which include
+integral, character and enumerated types.
+
+ at item SIZE(@var{x})
+Returns the size of its argument.  @var{x} can be a variable or a type.
+
+ at item TRUNC(@var{r})
+Returns the integral part of @var{r}.
+
+ at item TSIZE(@var{x})
+Returns the size of its argument.  @var{x} can be a variable or a type.
+
+ at item VAL(@var{t}, at var{i})
+Returns the member of the type @var{t} whose ordinal value is @var{i}.
+ at end table
+
+ at quotation
+ at emph{Warning:}  Sets and their operations are not yet supported, so
+ at value{GDBN} treats the use of procedures @code{INCL} and @code{EXCL} as
+an error.
+ at end quotation
+
+ at cindex Modula-2 constants
+ at node M2 Constants
+ at subsubsection Constants
+
+ at value{GDBN} allows you to express the constants of Modula-2 in the following
+ways:
+
+ at itemize @bullet
+
+ at item
+Integer constants are simply a sequence of digits.  When used in an
+expression, a constant is interpreted to be type-compatible with the
+rest of the expression.  Hexadecimal integers are specified by a
+trailing @samp{H}, and octal integers by a trailing @samp{B}.
+
+ at item
+Floating point constants appear as a sequence of digits, followed by a
+decimal point and another sequence of digits.  An optional exponent can
+then be specified, in the form @samp{E at r{[}+ at r{|}- at r{]}@var{nnn}}, where
+ at samp{@r{[}+ at r{|}- at r{]}@var{nnn}} is the desired exponent.  All of the
+digits of the floating point constant must be valid decimal (base 10)
+digits.
+
+ at item
+Character constants consist of a single character enclosed by a pair of
+like quotes, either single (@code{'}) or double (@code{"}).  They may
+also be expressed by their ordinal value (their @sc{ascii} value, usually)
+followed by a @samp{C}.
+
+ at item
+String constants consist of a sequence of characters enclosed by a
+pair of like quotes, either single (@code{'}) or double (@code{"}).
+Escape sequences in the style of C are also allowed.  @xref{C
+Constants, ,C and C at t{++} Constants}, for a brief explanation of escape
+sequences.
+
+ at item
+Enumerated constants consist of an enumerated identifier.
+
+ at item
+Boolean constants consist of the identifiers @code{TRUE} and
+ at code{FALSE}.
+
+ at item
+Pointer constants consist of integral values only.
+
+ at item
+Set constants are not yet supported.
+ at end itemize
+
+ at node M2 Types
+ at subsubsection Modula-2 Types
+ at cindex Modula-2 types
+
+Currently @value{GDBN} can print the following data types in Modula-2
+syntax: array types, record types, set types, pointer types, procedure
+types, enumerated types, subrange types and base types.  You can also
+print the contents of variables declared using these type.
+This section gives a number of simple source code examples together with
+sample @value{GDBN} sessions.
+
+The first example contains the following section of code:
+
+ at smallexample
+VAR
+   s: SET OF CHAR ;
+   r: [20..40] ;
+ at end smallexample
+
+ at noindent
+and you can request @value{GDBN} to interrogate the type and value of
+ at code{r} and @code{s}.
+
+ at smallexample
+(@value{GDBP}) print s
+@{'A'..'C', 'Z'@}
+(@value{GDBP}) ptype s
+SET OF CHAR
+(@value{GDBP}) print r
+21
+(@value{GDBP}) ptype r
+[20..40]
+ at end smallexample
+
+ at noindent
+Likewise if your source code declares @code{s} as:
+
+ at smallexample
+VAR
+   s: SET ['A'..'Z'] ;
+ at end smallexample
+
+ at noindent
+then you may query the type of @code{s} by:
+
+ at smallexample
+(@value{GDBP}) ptype s
+type = SET ['A'..'Z']
+ at end smallexample
+
+ at noindent
+Note that at present you cannot interactively manipulate set
+expressions using the debugger.
+
+The following example shows how you might declare an array in Modula-2
+and how you can interact with @value{GDBN} to print its type and contents:
+
+ at smallexample
+VAR
+   s: ARRAY [-10..10] OF CHAR ;
+ at end smallexample
+
+ at smallexample
+(@value{GDBP}) ptype s
+ARRAY [-10..10] OF CHAR
+ at end smallexample
+
+Note that the array handling is not yet complete and although the type
+is printed correctly, expression handling still assumes that all
+arrays have a lower bound of zero and not @code{-10} as in the example
+above.
+
+Here are some more type related Modula-2 examples:
+
+ at smallexample
+TYPE
+   colour = (blue, red, yellow, green) ;
+   t = [blue..yellow] ;
+VAR
+   s: t ;
+BEGIN
+   s := blue ;
+ at end smallexample
+
+ at noindent
+The @value{GDBN} interaction shows how you can query the data type
+and value of a variable.
+
+ at smallexample
+(@value{GDBP}) print s
+$1 = blue
+(@value{GDBP}) ptype t
+type = [blue..yellow]
+ at end smallexample
+
+ at noindent
+In this example a Modula-2 array is declared and its contents
+displayed.  Observe that the contents are written in the same way as
+their @code{C} counterparts.
+
+ at smallexample
+VAR
+   s: ARRAY [1..5] OF CARDINAL ;
+BEGIN
+   s[1] := 1 ;
+ at end smallexample
+
+ at smallexample
+(@value{GDBP}) print s
+$1 = @{1, 0, 0, 0, 0@}
+(@value{GDBP}) ptype s
+type = ARRAY [1..5] OF CARDINAL
+ at end smallexample
+
+The Modula-2 language interface to @value{GDBN} also understands
+pointer types as shown in this example:
+
+ at smallexample
+VAR
+   s: POINTER TO ARRAY [1..5] OF CARDINAL ;
+BEGIN
+   NEW(s) ;
+   s^[1] := 1 ;
+ at end smallexample
+
+ at noindent
+and you can request that @value{GDBN} describes the type of @code{s}.
+
+ at smallexample
+(@value{GDBP}) ptype s
+type = POINTER TO ARRAY [1..5] OF CARDINAL
+ at end smallexample
+
+ at value{GDBN} handles compound types as we can see in this example.
+Here we combine array types, record types, pointer types and subrange
+types:
+
+ at smallexample
+TYPE
+   foo = RECORD
+            f1: CARDINAL ;
+            f2: CHAR ;
+            f3: myarray ;
+         END ;
+
+   myarray = ARRAY myrange OF CARDINAL ;
+   myrange = [-2..2] ;
+VAR
+   s: POINTER TO ARRAY myrange OF foo ;
+ at end smallexample
+
+ at noindent
+and you can ask @value{GDBN} to describe the type of @code{s} as shown
+below.
+
+ at smallexample
+(@value{GDBP}) ptype s
+type = POINTER TO ARRAY [-2..2] OF foo = RECORD
+    f1 : CARDINAL;
+    f2 : CHAR;
+    f3 : ARRAY [-2..2] OF CARDINAL;
+END 
+ at end smallexample
+
+ at node M2 Defaults
+ at subsubsection Modula-2 Defaults
+ at cindex Modula-2 defaults
+
+If type and range checking are set automatically by @value{GDBN}, they
+both default to @code{on} whenever the working language changes to
+Modula-2.  This happens regardless of whether you or @value{GDBN}
+selected the working language.
+
+If you allow @value{GDBN} to set the language automatically, then entering
+code compiled from a file whose name ends with @file{.mod} sets the
+working language to Modula-2.  @xref{Automatically, ,Having @value{GDBN}
+Infer the Source Language}, for further details.
+
+ at node Deviations
+ at subsubsection Deviations from Standard Modula-2
+ at cindex Modula-2, deviations from
+
+A few changes have been made to make Modula-2 programs easier to debug.
+This is done primarily via loosening its type strictness:
+
+ at itemize @bullet
+ at item
+Unlike in standard Modula-2, pointer constants can be formed by
+integers.  This allows you to modify pointer variables during
+debugging.  (In standard Modula-2, the actual address contained in a
+pointer variable is hidden from you; it can only be modified
+through direct assignment to another pointer variable or expression that
+returned a pointer.)
+
+ at item
+C escape sequences can be used in strings and characters to represent
+non-printable characters.  @value{GDBN} prints out strings with these
+escape sequences embedded.  Single non-printable characters are
+printed using the @samp{CHR(@var{nnn})} format.
+
+ at item
+The assignment operator (@code{:=}) returns the value of its right-hand
+argument.
+
+ at item
+All built-in procedures both modify @emph{and} return their argument.
+ at end itemize
+
+ at node M2 Checks
+ at subsubsection Modula-2 Type and Range Checks
+ at cindex Modula-2 checks
+
+ at quotation
+ at emph{Warning:} in this release, @value{GDBN} does not yet perform type or
+range checking.
+ at end quotation
+ at c FIXME remove warning when type/range checks added
+
+ at value{GDBN} considers two Modula-2 variables type equivalent if:
+
+ at itemize @bullet
+ at item
+They are of types that have been declared equivalent via a @code{TYPE
+ at var{t1} = @var{t2}} statement
+
+ at item
+They have been declared on the same line.  (Note:  This is true of the
+ at sc{gnu} Modula-2 compiler, but it may not be true of other compilers.)
+ at end itemize
+
+As long as type checking is enabled, any attempt to combine variables
+whose types are not equivalent is an error.
+
+Range checking is done on all mathematical operations, assignment, array
+index bounds, and all built-in functions and procedures.
+
+ at node M2 Scope
+ at subsubsection The Scope Operators @code{::} and @code{.}
+ at cindex scope
+ at cindex @code{.}, Modula-2 scope operator
+ at cindex colon, doubled as scope operator
+ at ifinfo
+ at vindex colon-colon at r{, in Modula-2}
+ at c Info cannot handle :: but TeX can.
+ at end ifinfo
+ at ifnotinfo
+ at vindex ::@r{, in Modula-2}
+ at end ifnotinfo
+
+There are a few subtle differences between the Modula-2 scope operator
+(@code{.}) and the @value{GDBN} scope operator (@code{::}).  The two have
+similar syntax:
+
+ at smallexample
+
+ at var{module} . @var{id}
+ at var{scope} :: @var{id}
+ at end smallexample
+
+ at noindent
+where @var{scope} is the name of a module or a procedure,
+ at var{module} the name of a module, and @var{id} is any declared
+identifier within your program, except another module.
+
+Using the @code{::} operator makes @value{GDBN} search the scope
+specified by @var{scope} for the identifier @var{id}.  If it is not
+found in the specified scope, then @value{GDBN} searches all scopes
+enclosing the one specified by @var{scope}.
+
+Using the @code{.} operator makes @value{GDBN} search the current scope for
+the identifier specified by @var{id} that was imported from the
+definition module specified by @var{module}.  With this operator, it is
+an error if the identifier @var{id} was not imported from definition
+module @var{module}, or if @var{id} is not an identifier in
+ at var{module}.
+
+ at node GDB/M2
+ at subsubsection @value{GDBN} and Modula-2
+
+Some @value{GDBN} commands have little use when debugging Modula-2 programs.
+Five subcommands of @code{set print} and @code{show print} apply
+specifically to C and C at t{++}: @samp{vtbl}, @samp{demangle},
+ at samp{asm-demangle}, @samp{object}, and @samp{union}.  The first four
+apply to C at t{++}, and the last to the C @code{union} type, which has no direct
+analogue in Modula-2.
+
+The @code{@@} operator (@pxref{Expressions, ,Expressions}), while available
+with any language, is not useful with Modula-2.  Its
+intent is to aid the debugging of @dfn{dynamic arrays}, which cannot be
+created in Modula-2 as they can in C or C at t{++}.  However, because an
+address can be specified by an integral constant, the construct
+ at samp{@{@var{type}@}@var{adrexp}} is still useful.
+
+ at cindex @code{#} in Modula-2
+In @value{GDBN} scripts, the Modula-2 inequality operator @code{#} is
+interpreted as the beginning of a comment.  Use @code{<>} instead.
+
+ at node Ada
+ at subsection Ada
+ at cindex Ada
+
+The extensions made to @value{GDBN} for Ada only support
+output from the @sc{gnu} Ada (GNAT) compiler.
+Other Ada compilers are not currently supported, and
+attempting to debug executables produced by them is most likely
+to be difficult.
+
+
+ at cindex expressions in Ada
+ at menu
+* Ada Mode Intro::              General remarks on the Ada syntax 
+                                   and semantics supported by Ada mode 
+                                   in @value{GDBN}.
+* Omissions from Ada::          Restrictions on the Ada expression syntax.
+* Additions to Ada::            Extensions of the Ada expression syntax.
+* Stopping Before Main Program:: Debugging the program during elaboration.
+* Ada Tasks::                   Listing and setting breakpoints in tasks.
+* Ada Tasks and Core Files::    Tasking Support when Debugging Core Files
+* Ravenscar Profile::           Tasking Support when using the Ravenscar
+                                   Profile
+* Ada Glitches::                Known peculiarities of Ada mode.
+ at end menu
+
+ at node Ada Mode Intro
+ at subsubsection Introduction
+ at cindex Ada mode, general
+
+The Ada mode of @value{GDBN} supports a fairly large subset of Ada expression 
+syntax, with some extensions.
+The philosophy behind the design of this subset is 
+
+ at itemize @bullet
+ at item
+That @value{GDBN} should provide basic literals and access to operations for 
+arithmetic, dereferencing, field selection, indexing, and subprogram calls, 
+leaving more sophisticated computations to subprograms written into the
+program (which therefore may be called from @value{GDBN}).
+
+ at item 
+That type safety and strict adherence to Ada language restrictions
+are not particularly important to the @value{GDBN} user.
+
+ at item 
+That brevity is important to the @value{GDBN} user.
+ at end itemize
+
+Thus, for brevity, the debugger acts as if all names declared in
+user-written packages are directly visible, even if they are not visible
+according to Ada rules, thus making it unnecessary to fully qualify most
+names with their packages, regardless of context.  Where this causes
+ambiguity, @value{GDBN} asks the user's intent.
+
+The debugger will start in Ada mode if it detects an Ada main program. 
+As for other languages, it will enter Ada mode when stopped in a program that
+was translated from an Ada source file.
+
+While in Ada mode, you may use `@t{--}' for comments.  This is useful 
+mostly for documenting command files.  The standard @value{GDBN} comment 
+(@samp{#}) still works at the beginning of a line in Ada mode, but not in the 
+middle (to allow based literals).
+
+The debugger supports limited overloading.  Given a subprogram call in which
+the function symbol has multiple definitions, it will use the number of 
+actual parameters and some information about their types to attempt to narrow
+the set of definitions.  It also makes very limited use of context, preferring
+procedures to functions in the context of the @code{call} command, and
+functions to procedures elsewhere. 
+
+ at node Omissions from Ada
+ at subsubsection Omissions from Ada
+ at cindex Ada, omissions from
+
+Here are the notable omissions from the subset:
+
+ at itemize @bullet
+ at item
+Only a subset of the attributes are supported:
+
+ at itemize @minus
+ at item
+ at t{'First}, @t{'Last}, and @t{'Length}
+ on array objects (not on types and subtypes).
+
+ at item
+ at t{'Min} and @t{'Max}.  
+
+ at item 
+ at t{'Pos} and @t{'Val}. 
+
+ at item
+ at t{'Tag}.
+
+ at item
+ at t{'Range} on array objects (not subtypes), but only as the right
+operand of the membership (@code{in}) operator.
+
+ at item 
+ at t{'Access}, @t{'Unchecked_Access}, and 
+ at t{'Unrestricted_Access} (a GNAT extension).
+
+ at item
+ at t{'Address}.
+ at end itemize
+
+ at item
+The names in
+ at code{Characters.Latin_1} are not available and
+concatenation is not implemented.  Thus, escape characters in strings are 
+not currently available.
+
+ at item
+Equality tests (@samp{=} and @samp{/=}) on arrays test for bitwise
+equality of representations.  They will generally work correctly
+for strings and arrays whose elements have integer or enumeration types.
+They may not work correctly for arrays whose element
+types have user-defined equality, for arrays of real values 
+(in particular, IEEE-conformant floating point, because of negative
+zeroes and NaNs), and for arrays whose elements contain unused bits with
+indeterminate values.  
+
+ at item
+The other component-by-component array operations (@code{and}, @code{or}, 
+ at code{xor}, @code{not}, and relational tests other than equality)
+are not implemented. 
+
+ at item 
+ at cindex array aggregates (Ada)
+ at cindex record aggregates (Ada)
+ at cindex aggregates (Ada) 
+There is limited support for array and record aggregates.  They are
+permitted only on the right sides of assignments, as in these examples:
+
+ at smallexample
+(@value{GDBP}) set An_Array := (1, 2, 3, 4, 5, 6)
+(@value{GDBP}) set An_Array := (1, others => 0)
+(@value{GDBP}) set An_Array := (0|4 => 1, 1..3 => 2, 5 => 6)
+(@value{GDBP}) set A_2D_Array := ((1, 2, 3), (4, 5, 6), (7, 8, 9))
+(@value{GDBP}) set A_Record := (1, "Peter", True);
+(@value{GDBP}) set A_Record := (Name => "Peter", Id => 1, Alive => True)
+ at end smallexample
+
+Changing a
+discriminant's value by assigning an aggregate has an
+undefined effect if that discriminant is used within the record.
+However, you can first modify discriminants by directly assigning to
+them (which normally would not be allowed in Ada), and then performing an
+aggregate assignment.  For example, given a variable @code{A_Rec} 
+declared to have a type such as:
+
+ at smallexample
+type Rec (Len : Small_Integer := 0) is record
+    Id : Integer;
+    Vals : IntArray (1 .. Len);
+end record;
+ at end smallexample
+
+you can assign a value with a different size of @code{Vals} with two
+assignments:
+
+ at smallexample
+(@value{GDBP}) set A_Rec.Len := 4
+(@value{GDBP}) set A_Rec := (Id => 42, Vals => (1, 2, 3, 4))
+ at end smallexample
+
+As this example also illustrates, @value{GDBN} is very loose about the usual
+rules concerning aggregates.  You may leave out some of the
+components of an array or record aggregate (such as the @code{Len} 
+component in the assignment to @code{A_Rec} above); they will retain their
+original values upon assignment.  You may freely use dynamic values as
+indices in component associations.  You may even use overlapping or
+redundant component associations, although which component values are
+assigned in such cases is not defined.
+
+ at item
+Calls to dispatching subprograms are not implemented.
+
+ at item
+The overloading algorithm is much more limited (i.e., less selective)
+than that of real Ada.  It makes only limited use of the context in
+which a subexpression appears to resolve its meaning, and it is much
+looser in its rules for allowing type matches.  As a result, some
+function calls will be ambiguous, and the user will be asked to choose
+the proper resolution.
+
+ at item
+The @code{new} operator is not implemented.
+
+ at item
+Entry calls are not implemented.
+
+ at item 
+Aside from printing, arithmetic operations on the native VAX floating-point 
+formats are not supported.
+
+ at item
+It is not possible to slice a packed array.
+
+ at item
+The names @code{True} and @code{False}, when not part of a qualified name, 
+are interpreted as if implicitly prefixed by @code{Standard}, regardless of 
+context.
+Should your program
+redefine these names in a package or procedure (at best a dubious practice),
+you will have to use fully qualified names to access their new definitions.
+ at end itemize
+
+ at node Additions to Ada
+ at subsubsection Additions to Ada
+ at cindex Ada, deviations from 
+
+As it does for other languages, @value{GDBN} makes certain generic
+extensions to Ada (@pxref{Expressions}):
+
+ at itemize @bullet
+ at item
+If the expression @var{E} is a variable residing in memory (typically
+a local variable or array element) and @var{N} is a positive integer,
+then @code{@var{E}@@@var{N}} displays the values of @var{E} and the
+ at var{N}-1 adjacent variables following it in memory as an array.  In
+Ada, this operator is generally not necessary, since its prime use is
+in displaying parts of an array, and slicing will usually do this in
+Ada.  However, there are occasional uses when debugging programs in
+which certain debugging information has been optimized away.
+
+ at item
+ at code{@var{B}::@var{var}} means ``the variable named @var{var} that
+appears in function or file @var{B}.''  When @var{B} is a file name,
+you must typically surround it in single quotes.
+
+ at item 
+The expression @code{@{@var{type}@} @var{addr}} means ``the variable of type
+ at var{type} that appears at address @var{addr}.''
+
+ at item
+A name starting with @samp{$} is a convenience variable 
+(@pxref{Convenience Vars}) or a machine register (@pxref{Registers}).
+ at end itemize
+
+In addition, @value{GDBN} provides a few other shortcuts and outright
+additions specific to Ada:
+
+ at itemize @bullet
+ at item 
+The assignment statement is allowed as an expression, returning
+its right-hand operand as its value.  Thus, you may enter
+
+ at smallexample
+(@value{GDBP}) set x := y + 3
+(@value{GDBP}) print A(tmp := y + 1)
+ at end smallexample
+
+ at item 
+The semicolon is allowed as an ``operator,''  returning as its value 
+the value of its right-hand operand.
+This allows, for example,
+complex conditional breaks:
+
+ at smallexample
+(@value{GDBP}) break f
+(@value{GDBP}) condition 1 (report(i); k += 1; A(k) > 100)
+ at end smallexample
+
+ at item 
+Rather than use catenation and symbolic character names to introduce special 
+characters into strings, one may instead use a special bracket notation, 
+which is also used to print strings.  A sequence of characters of the form 
+ at samp{["@var{XX}"]} within a string or character literal denotes the 
+(single) character whose numeric encoding is @var{XX} in hexadecimal.  The
+sequence of characters @samp{["""]} also denotes a single quotation mark 
+in strings.   For example,
+ at smallexample
+   "One line.["0a"]Next line.["0a"]"
+ at end smallexample
+ at noindent
+contains an ASCII newline character (@code{Ada.Characters.Latin_1.LF})
+after each period.
+
+ at item
+The subtype used as a prefix for the attributes @t{'Pos}, @t{'Min}, and
+ at t{'Max} is optional (and is ignored in any case).  For example, it is valid
+to write
+
+ at smallexample
+(@value{GDBP}) print 'max(x, y)
+ at end smallexample
+
+ at item
+When printing arrays, @value{GDBN} uses positional notation when the 
+array has a lower bound of 1, and uses a modified named notation otherwise.
+For example, a one-dimensional array of three integers with a lower bound
+of 3 might print as
+
+ at smallexample
+(3 => 10, 17, 1)
+ at end smallexample
+
+ at noindent
+That is, in contrast to valid Ada, only the first component has a @code{=>} 
+clause.
+
+ at item
+You may abbreviate attributes in expressions with any unique,
+multi-character subsequence of 
+their names (an exact match gets preference).
+For example, you may use @t{a'len}, @t{a'gth}, or @t{a'lh}
+in place of  @t{a'length}.
+
+ at item
+ at cindex quoting Ada internal identifiers
+Since Ada is case-insensitive, the debugger normally maps identifiers you type 
+to lower case.  The GNAT compiler uses upper-case characters for 
+some of its internal identifiers, which are normally of no interest to users.
+For the rare occasions when you actually have to look at them,
+enclose them in angle brackets to avoid the lower-case mapping. 
+For example,
+ at smallexample
+(@value{GDBP}) print <JMPBUF_SAVE>[0]
+ at end smallexample
+
+ at item
+Printing an object of class-wide type or dereferencing an 
+access-to-class-wide value will display all the components of the object's
+specific type (as indicated by its run-time tag).  Likewise, component
+selection on such a value will operate on the specific type of the
+object.
+
+ at end itemize
+
+ at node Stopping Before Main Program
+ at subsubsection Stopping at the Very Beginning
+
+ at cindex breakpointing Ada elaboration code
+It is sometimes necessary to debug the program during elaboration, and
+before reaching the main procedure.
+As defined in the Ada Reference
+Manual, the elaboration code is invoked from a procedure called
+ at code{adainit}.  To run your program up to the beginning of
+elaboration, simply use the following two commands:
+ at code{tbreak adainit} and @code{run}.
+
+ at node Ada Tasks
+ at subsubsection Extensions for Ada Tasks
+ at cindex Ada, tasking
+
+Support for Ada tasks is analogous to that for threads (@pxref{Threads}).
+ at value{GDBN} provides the following task-related commands:
+
+ at table @code
+ at kindex info tasks
+ at item info tasks
+This command shows a list of current Ada tasks, as in the following example:
+
+
+ at smallexample
+ at iftex
+ at leftskip=0.5cm
+ at end iftex
+(@value{GDBP}) info tasks
+  ID       TID P-ID Pri State                 Name
+   1   8088000   0   15 Child Activation Wait main_task
+   2   80a4000   1   15 Accept Statement      b
+   3   809a800   1   15 Child Activation Wait a
+*  4   80ae800   3   15 Runnable              c
+
+ at end smallexample
+
+ at noindent
+In this listing, the asterisk before the last task indicates it to be the
+task currently being inspected.
+
+ at table @asis
+ at item ID
+Represents @value{GDBN}'s internal task number.
+
+ at item TID
+The Ada task ID.
+
+ at item P-ID
+The parent's task ID (@value{GDBN}'s internal task number).
+
+ at item Pri
+The base priority of the task.
+
+ at item State
+Current state of the task.
+
+ at table @code
+ at item Unactivated
+The task has been created but has not been activated.  It cannot be
+executing.
+
+ at item Runnable
+The task is not blocked for any reason known to Ada.  (It may be waiting
+for a mutex, though.) It is conceptually "executing" in normal mode.
+
+ at item Terminated
+The task is terminated, in the sense of ARM 9.3 (5).  Any dependents
+that were waiting on terminate alternatives have been awakened and have
+terminated themselves.
+
+ at item Child Activation Wait
+The task is waiting for created tasks to complete activation.
+
+ at item Accept Statement
+The task is waiting on an accept or selective wait statement.
+
+ at item Waiting on entry call
+The task is waiting on an entry call.
+
+ at item Async Select Wait
+The task is waiting to start the abortable part of an asynchronous
+select statement.
+
+ at item Delay Sleep
+The task is waiting on a select statement with only a delay
+alternative open.
+
+ at item Child Termination Wait
+The task is sleeping having completed a master within itself, and is
+waiting for the tasks dependent on that master to become terminated or
+waiting on a terminate Phase.
+
+ at item Wait Child in Term Alt
+The task is sleeping waiting for tasks on terminate alternatives to
+finish terminating.
+
+ at item Accepting RV with @var{taskno}
+The task is accepting a rendez-vous with the task @var{taskno}.
+ at end table
+
+ at item Name
+Name of the task in the program.
+
+ at end table
+
+ at kindex info task @var{taskno}
+ at item info task @var{taskno}
+This command shows detailled informations on the specified task, as in
+the following example:
+ at smallexample
+ at iftex
+ at leftskip=0.5cm
+ at end iftex
+(@value{GDBP}) info tasks
+  ID       TID P-ID Pri State                  Name
+   1   8077880    0  15 Child Activation Wait  main_task
+*  2   807c468    1  15 Runnable               task_1
+(@value{GDBP}) info task 2
+Ada Task: 0x807c468
+Name: task_1
+Thread: 0x807f378
+Parent: 1 (main_task)
+Base Priority: 15
+State: Runnable
+ at end smallexample
+
+ at item task
+ at kindex task at r{ (Ada)}
+ at cindex current Ada task ID
+This command prints the ID of the current task.
+
+ at smallexample
+ at iftex
+ at leftskip=0.5cm
+ at end iftex
+(@value{GDBP}) info tasks
+  ID       TID P-ID Pri State                  Name
+   1   8077870    0  15 Child Activation Wait  main_task
+*  2   807c458    1  15 Runnable               t
+(@value{GDBP}) task
+[Current task is 2]
+ at end smallexample
+
+ at item task @var{taskno}
+ at cindex Ada task switching
+This command is like the @code{thread @var{threadno}}
+command (@pxref{Threads}).  It switches the context of debugging
+from the current task to the given task.
+
+ at smallexample
+ at iftex
+ at leftskip=0.5cm
+ at end iftex
+(@value{GDBP}) info tasks
+  ID       TID P-ID Pri State                  Name
+   1   8077870    0  15 Child Activation Wait  main_task
+*  2   807c458    1  15 Runnable               t
+(@value{GDBP}) task 1
+[Switching to task 1]
+#0  0x8067726 in pthread_cond_wait ()
+(@value{GDBP}) bt
+#0  0x8067726 in pthread_cond_wait ()
+#1  0x8056714 in system.os_interface.pthread_cond_wait ()
+#2  0x805cb63 in system.task_primitives.operations.sleep ()
+#3  0x806153e in system.tasking.stages.activate_tasks ()
+#4  0x804aacc in un () at un.adb:5
+ at end smallexample
+
+ at item break @var{linespec} task @var{taskno}
+ at itemx break @var{linespec} task @var{taskno} if @dots{}
+ at cindex breakpoints and tasks, in Ada
+ at cindex task breakpoints, in Ada
+ at kindex break @dots{} task @var{taskno}@r{ (Ada)}
+These commands are like the @code{break @dots{} thread @dots{}}
+command (@pxref{Thread Stops}).
+ at var{linespec} specifies source lines, as described
+in @ref{Specify Location}.
+
+Use the qualifier @samp{task @var{taskno}} with a breakpoint command
+to specify that you only want @value{GDBN} to stop the program when a
+particular Ada task reaches this breakpoint.  @var{taskno} is one of the
+numeric task identifiers assigned by @value{GDBN}, shown in the first
+column of the @samp{info tasks} display.
+
+If you do not specify @samp{task @var{taskno}} when you set a
+breakpoint, the breakpoint applies to @emph{all} tasks of your
+program.
+
+You can use the @code{task} qualifier on conditional breakpoints as
+well; in this case, place @samp{task @var{taskno}} before the
+breakpoint condition (before the @code{if}).
+
+For example,
+
+ at smallexample
+ at iftex
+ at leftskip=0.5cm
+ at end iftex
+(@value{GDBP}) info tasks
+  ID       TID P-ID Pri State                 Name
+   1 140022020   0   15 Child Activation Wait main_task
+   2 140045060   1   15 Accept/Select Wait    t2
+   3 140044840   1   15 Runnable              t1
+*  4 140056040   1   15 Runnable              t3
+(@value{GDBP}) b 15 task 2
+Breakpoint 5 at 0x120044cb0: file test_task_debug.adb, line 15.
+(@value{GDBP}) cont
+Continuing.
+task # 1 running
+task # 2 running
+
+Breakpoint 5, test_task_debug () at test_task_debug.adb:15
+15               flush;
+(@value{GDBP}) info tasks
+  ID       TID P-ID Pri State                 Name
+   1 140022020   0   15 Child Activation Wait main_task
+*  2 140045060   1   15 Runnable              t2
+   3 140044840   1   15 Runnable              t1
+   4 140056040   1   15 Delay Sleep           t3
+ at end smallexample
+ at end table
+
+ at node Ada Tasks and Core Files
+ at subsubsection Tasking Support when Debugging Core Files
+ at cindex Ada tasking and core file debugging
+
+When inspecting a core file, as opposed to debugging a live program,
+tasking support may be limited or even unavailable, depending on
+the platform being used.
+For instance, on x86-linux, the list of tasks is available, but task
+switching is not supported.  On Tru64, however, task switching will work
+as usual.
+
+On certain platforms, including Tru64, the debugger needs to perform some
+memory writes in order to provide Ada tasking support.  When inspecting
+a core file, this means that the core file must be opened with read-write
+privileges, using the command @samp{"set write on"} (@pxref{Patching}).
+Under these circumstances, you should make a backup copy of the core
+file before inspecting it with @value{GDBN}.
+
+ at node Ravenscar Profile
+ at subsubsection Tasking Support when using the Ravenscar Profile
+ at cindex Ravenscar Profile
+
+The @dfn{Ravenscar Profile} is a subset of the Ada tasking features,
+specifically designed for systems with safety-critical real-time
+requirements.
+
+ at table @code
+ at kindex set ravenscar task-switching on
+ at cindex task switching with program using Ravenscar Profile
+ at item set ravenscar task-switching on
+Allows task switching when debugging a program that uses the Ravenscar
+Profile.  This is the default.
+
+ at kindex set ravenscar task-switching off
+ at item set ravenscar task-switching off
+Turn off task switching when debugging a program that uses the Ravenscar
+Profile.  This is mostly intended to disable the code that adds support
+for the Ravenscar Profile, in case a bug in either @value{GDBN} or in
+the Ravenscar runtime is preventing @value{GDBN} from working properly.
+To be effective, this command should be run before the program is started.
+
+ at kindex show ravenscar task-switching
+ at item show ravenscar task-switching
+Show whether it is possible to switch from task to task in a program
+using the Ravenscar Profile.
+
+ at end table
+
+ at node Ada Glitches
+ at subsubsection Known Peculiarities of Ada Mode
+ at cindex Ada, problems
+
+Besides the omissions listed previously (@pxref{Omissions from Ada}),
+we know of several problems with and limitations of Ada mode in
+ at value{GDBN},
+some of which will be fixed with planned future releases of the debugger 
+and the GNU Ada compiler.
+
+ at itemize @bullet
+ at item 
+Static constants that the compiler chooses not to materialize as objects in 
+storage are invisible to the debugger.
+
+ at item
+Named parameter associations in function argument lists are ignored (the
+argument lists are treated as positional).
+
+ at item
+Many useful library packages are currently invisible to the debugger.
+
+ at item
+Fixed-point arithmetic, conversions, input, and output is carried out using 
+floating-point arithmetic, and may give results that only approximate those on 
+the host machine.
+
+ at item
+The GNAT compiler never generates the prefix @code{Standard} for any of 
+the standard symbols defined by the Ada language.  @value{GDBN} knows about 
+this: it will strip the prefix from names when you use it, and will never
+look for a name you have so qualified among local symbols, nor match against
+symbols in other packages or subprograms.  If you have 
+defined entities anywhere in your program other than parameters and 
+local variables whose simple names match names in @code{Standard}, 
+GNAT's lack of qualification here can cause confusion.  When this happens,
+you can usually resolve the confusion 
+by qualifying the problematic names with package
+ at code{Standard} explicitly.  
+ at end itemize
+
+Older versions of the compiler sometimes generate erroneous debugging
+information, resulting in the debugger incorrectly printing the value
+of affected entities.  In some cases, the debugger is able to work
+around an issue automatically. In other cases, the debugger is able
+to work around the issue, but the work-around has to be specifically
+enabled.
+
+ at kindex set ada trust-PAD-over-XVS
+ at kindex show ada trust-PAD-over-XVS
+ at table @code
+
+ at item set ada trust-PAD-over-XVS on
+Configure GDB to strictly follow the GNAT encoding when computing the
+value of Ada entities, particularly when @code{PAD} and @code{PAD___XVS}
+types are involved (see @code{ada/exp_dbug.ads} in the GCC sources for
+a complete description of the encoding used by the GNAT compiler).
+This is the default.
+
+ at item set ada trust-PAD-over-XVS off
+This is related to the encoding using by the GNAT compiler.  If @value{GDBN}
+sometimes prints the wrong value for certain entities, changing @code{ada
+trust-PAD-over-XVS} to @code{off} activates a work-around which may fix
+the issue.  It is always safe to set @code{ada trust-PAD-over-XVS} to
+ at code{off}, but this incurs a slight performance penalty, so it is
+recommended to leave this setting to @code{on} unless necessary.
+
+ at end table
+
+ at node Unsupported Languages
+ at section Unsupported Languages
+
+ at cindex unsupported languages
+ at cindex minimal language
+In addition to the other fully-supported programming languages,
+ at value{GDBN} also provides a pseudo-language, called @code{minimal}.
+It does not represent a real programming language, but provides a set
+of capabilities close to what the C or assembly languages provide.
+This should allow most simple operations to be performed while debugging
+an application that uses a language currently not supported by @value{GDBN}.
+
+If the language is set to @code{auto}, @value{GDBN} will automatically
+select this language if the current frame corresponds to an unsupported
+language.
+
+ at node Symbols
+ at chapter Examining the Symbol Table
+
+The commands described in this chapter allow you to inquire about the
+symbols (names of variables, functions and types) defined in your
+program.  This information is inherent in the text of your program and
+does not change as your program executes.  @value{GDBN} finds it in your
+program's symbol table, in the file indicated when you started @value{GDBN}
+(@pxref{File Options, ,Choosing Files}), or by one of the
+file-management commands (@pxref{Files, ,Commands to Specify Files}).
+
+ at cindex symbol names
+ at cindex names of symbols
+ at cindex quoting names
+Occasionally, you may need to refer to symbols that contain unusual
+characters, which @value{GDBN} ordinarily treats as word delimiters.  The
+most frequent case is in referring to static variables in other
+source files (@pxref{Variables,,Program Variables}).  File names
+are recorded in object files as debugging symbols, but @value{GDBN} would
+ordinarily parse a typical file name, like @file{foo.c}, as the three words
+ at samp{foo} @samp{.} @samp{c}.  To allow @value{GDBN} to recognize
+ at samp{foo.c} as a single symbol, enclose it in single quotes; for example,
+
+ at smallexample
+p 'foo.c'::x
+ at end smallexample
+
+ at noindent
+looks up the value of @code{x} in the scope of the file @file{foo.c}.
+
+ at table @code
+ at cindex case-insensitive symbol names
+ at cindex case sensitivity in symbol names
+ at kindex set case-sensitive
+ at item set case-sensitive on
+ at itemx set case-sensitive off
+ at itemx set case-sensitive auto
+Normally, when @value{GDBN} looks up symbols, it matches their names
+with case sensitivity determined by the current source language.
+Occasionally, you may wish to control that.  The command @code{set
+case-sensitive} lets you do that by specifying @code{on} for
+case-sensitive matches or @code{off} for case-insensitive ones.  If
+you specify @code{auto}, case sensitivity is reset to the default
+suitable for the source language.  The default is case-sensitive
+matches for all languages except for Fortran, for which the default is
+case-insensitive matches.
+
+ at kindex show case-sensitive
+ at item show case-sensitive
+This command shows the current setting of case sensitivity for symbols
+lookups.
+
+ at kindex info address
+ at cindex address of a symbol
+ at item info address @var{symbol}
+Describe where the data for @var{symbol} is stored.  For a register
+variable, this says which register it is kept in.  For a non-register
+local variable, this prints the stack-frame offset at which the variable
+is always stored.
+
+Note the contrast with @samp{print &@var{symbol}}, which does not work
+at all for a register variable, and for a stack local variable prints
+the exact address of the current instantiation of the variable.
+
+ at kindex info symbol
+ at cindex symbol from address
+ at cindex closest symbol and offset for an address
+ at item info symbol @var{addr}
+Print the name of a symbol which is stored at the address @var{addr}.
+If no symbol is stored exactly at @var{addr}, @value{GDBN} prints the
+nearest symbol and an offset from it:
+
+ at smallexample
+(@value{GDBP}) info symbol 0x54320
+_initialize_vx + 396 in section .text
+ at end smallexample
+
+ at noindent
+This is the opposite of the @code{info address} command.  You can use
+it to find out the name of a variable or a function given its address.
+
+For dynamically linked executables, the name of executable or shared
+library containing the symbol is also printed:
+
+ at smallexample
+(@value{GDBP}) info symbol 0x400225
+_start + 5 in section .text of /tmp/a.out
+(@value{GDBP}) info symbol 0x2aaaac2811cf
+__read_nocancel + 6 in section .text of /usr/lib64/libc.so.6
+ at end smallexample
+
+ at kindex whatis
+ at item whatis [@var{arg}]
+Print the data type of @var{arg}, which can be either an expression
+or a name of a data type.  With no argument, print the data type of
+ at code{$}, the last value in the value history.
+
+If @var{arg} is an expression (@pxref{Expressions, ,Expressions}), it
+is not actually evaluated, and any side-effecting operations (such as
+assignments or function calls) inside it do not take place.
+
+If @var{arg} is a variable or an expression, @code{whatis} prints its
+literal type as it is used in the source code.  If the type was
+defined using a @code{typedef}, @code{whatis} will @emph{not} print
+the data type underlying the @code{typedef}.  If the type of the
+variable or the expression is a compound data type, such as
+ at code{struct} or  @code{class}, @code{whatis} never prints their
+fields or methods.  It just prints the @code{struct}/@code{class}
+name (a.k.a.@: its @dfn{tag}).  If you want to see the members of
+such a compound data type, use @code{ptype}.
+
+If @var{arg} is a type name that was defined using @code{typedef},
+ at code{whatis} @dfn{unrolls} only one level of that @code{typedef}.
+Unrolling means that @code{whatis} will show the underlying type used
+in the @code{typedef} declaration of @var{arg}.  However, if that
+underlying type is also a @code{typedef}, @code{whatis} will not
+unroll it.
+
+For C code, the type names may also have the form @samp{class
+ at var{class-name}}, @samp{struct @var{struct-tag}}, @samp{union
+ at var{union-tag}} or @samp{enum @var{enum-tag}}.
+
+ at kindex ptype
+ at item ptype [@var{arg}]
+ at code{ptype} accepts the same arguments as @code{whatis}, but prints a
+detailed description of the type, instead of just the name of the type.
+ at xref{Expressions, ,Expressions}.
+
+Contrary to @code{whatis}, @code{ptype} always unrolls any
+ at code{typedef}s in its argument declaration, whether the argument is
+a variable, expression, or a data type.  This means that @code{ptype}
+of a variable or an expression will not print literally its type as
+present in the source code---use @code{whatis} for that.  @code{typedef}s at
+the pointer or reference targets are also unrolled.  Only @code{typedef}s of
+fields, methods and inner @code{class typedef}s of @code{struct}s,
+ at code{class}es and @code{union}s are not unrolled even with @code{ptype}.
+
+For example, for this variable declaration:
+
+ at smallexample
+typedef double real_t;
+struct complex @{ real_t real; double imag; @};
+typedef struct complex complex_t;
+complex_t var;
+real_t *real_pointer_var;
+ at end smallexample
+
+ at noindent
+the two commands give this output:
+
+ at smallexample
+ at group
+(@value{GDBP}) whatis var
+type = complex_t
+(@value{GDBP}) ptype var
+type = struct complex @{
+    real_t real;
+    double imag;
+@}
+(@value{GDBP}) whatis complex_t
+type = struct complex
+(@value{GDBP}) whatis struct complex
+type = struct complex
+(@value{GDBP}) ptype struct complex
+type = struct complex @{
+    real_t real;
+    double imag;
+@}
+(@value{GDBP}) whatis real_pointer_var
+type = real_t *
+(@value{GDBP}) ptype real_pointer_var
+type = double *
+ at end group
+ at end smallexample
+
+ at noindent
+As with @code{whatis}, using @code{ptype} without an argument refers to
+the type of @code{$}, the last value in the value history.
+
+ at cindex incomplete type
+Sometimes, programs use opaque data types or incomplete specifications
+of complex data structure.  If the debug information included in the
+program does not allow @value{GDBN} to display a full declaration of
+the data type, it will say @samp{<incomplete type>}.  For example,
+given these declarations:
+
+ at smallexample
+    struct foo;
+    struct foo *fooptr;
+ at end smallexample
+
+ at noindent
+but no definition for @code{struct foo} itself, @value{GDBN} will say:
+
+ at smallexample
+  (@value{GDBP}) ptype foo
+  $1 = <incomplete type>
+ at end smallexample
+
+ at noindent
+``Incomplete type'' is C terminology for data types that are not
+completely specified.
+
+ at kindex info types
+ at item info types @var{regexp}
+ at itemx info types
+Print a brief description of all types whose names match the regular
+expression @var{regexp} (or all types in your program, if you supply
+no argument).  Each complete typename is matched as though it were a
+complete line; thus, @samp{i type value} gives information on all
+types in your program whose names include the string @code{value}, but
+ at samp{i type ^value$} gives information only on types whose complete
+name is @code{value}.
+
+This command differs from @code{ptype} in two ways: first, like
+ at code{whatis}, it does not print a detailed description; second, it
+lists all source files where a type is defined.
+
+ at kindex info scope
+ at cindex local variables
+ at item info scope @var{location}
+List all the variables local to a particular scope.  This command
+accepts a @var{location} argument---a function name, a source line, or
+an address preceded by a @samp{*}, and prints all the variables local
+to the scope defined by that location.  (@xref{Specify Location}, for
+details about supported forms of @var{location}.)  For example:
+
+ at smallexample
+(@value{GDBP}) @b{info scope command_line_handler}
+Scope for command_line_handler:
+Symbol rl is an argument at stack/frame offset 8, length 4.
+Symbol linebuffer is in static storage at address 0x150a18, length 4.
+Symbol linelength is in static storage at address 0x150a1c, length 4.
+Symbol p is a local variable in register $esi, length 4.
+Symbol p1 is a local variable in register $ebx, length 4.
+Symbol nline is a local variable in register $edx, length 4.
+Symbol repeat is a local variable at frame offset -8, length 4.
+ at end smallexample
+
+ at noindent
+This command is especially useful for determining what data to collect
+during a @dfn{trace experiment}, see @ref{Tracepoint Actions,
+collect}.
+
+ at kindex info source
+ at item info source
+Show information about the current source file---that is, the source file for
+the function containing the current point of execution:
+ at itemize @bullet
+ at item
+the name of the source file, and the directory containing it,
+ at item
+the directory it was compiled in,
+ at item
+its length, in lines,
+ at item
+which programming language it is written in,
+ at item
+whether the executable includes debugging information for that file, and
+if so, what format the information is in (e.g., STABS, Dwarf 2, etc.), and
+ at item
+whether the debugging information includes information about
+preprocessor macros.
+ at end itemize
+
+
+ at kindex info sources
+ at item info sources
+Print the names of all source files in your program for which there is
+debugging information, organized into two lists: files whose symbols
+have already been read, and files whose symbols will be read when needed.
+
+ at kindex info functions
+ at item info functions
+Print the names and data types of all defined functions.
+
+ at item info functions @var{regexp}
+Print the names and data types of all defined functions
+whose names contain a match for regular expression @var{regexp}.
+Thus, @samp{info fun step} finds all functions whose names
+include @code{step}; @samp{info fun ^step} finds those whose names
+start with @code{step}.  If a function name contains characters
+that conflict with the regular expression language (e.g.@:
+ at samp{operator*()}), they may be quoted with a backslash.
+
+ at kindex info variables
+ at item info variables
+Print the names and data types of all variables that are defined
+outside of functions (i.e.@: excluding local variables).
+
+ at item info variables @var{regexp}
+Print the names and data types of all variables (except for local
+variables) whose names contain a match for regular expression
+ at var{regexp}.
+
+ at kindex info classes
+ at cindex Objective-C, classes and selectors
+ at item info classes
+ at itemx info classes @var{regexp}
+Display all Objective-C classes in your program, or
+(with the @var{regexp} argument) all those matching a particular regular
+expression.
+
+ at kindex info selectors
+ at item info selectors
+ at itemx info selectors @var{regexp}
+Display all Objective-C selectors in your program, or
+(with the @var{regexp} argument) all those matching a particular regular
+expression.
+
+ at ignore
+This was never implemented.
+ at kindex info methods
+ at item info methods
+ at itemx info methods @var{regexp}
+The @code{info methods} command permits the user to examine all defined
+methods within C at t{++} program, or (with the @var{regexp} argument) a
+specific set of methods found in the various C at t{++} classes.  Many
+C at t{++} classes provide a large number of methods.  Thus, the output
+from the @code{ptype} command can be overwhelming and hard to use.  The
+ at code{info-methods} command filters the methods, printing only those
+which match the regular-expression @var{regexp}.
+ at end ignore
+
+ at cindex opaque data types
+ at kindex set opaque-type-resolution
+ at item set opaque-type-resolution on
+Tell @value{GDBN} to resolve opaque types.  An opaque type is a type
+declared as a pointer to a @code{struct}, @code{class}, or
+ at code{union}---for example, @code{struct MyType *}---that is used in one
+source file although the full declaration of @code{struct MyType} is in
+another source file.  The default is on.
+
+A change in the setting of this subcommand will not take effect until
+the next time symbols for a file are loaded.
+
+ at item set opaque-type-resolution off
+Tell @value{GDBN} not to resolve opaque types.  In this case, the type
+is printed as follows:
+ at smallexample
+@{<no data fields>@}
+ at end smallexample
+
+ at kindex show opaque-type-resolution
+ at item show opaque-type-resolution
+Show whether opaque types are resolved or not.
+
+ at kindex maint print symbols
+ at cindex symbol dump
+ at kindex maint print psymbols
+ at cindex partial symbol dump
+ at item maint print symbols @var{filename}
+ at itemx maint print psymbols @var{filename}
+ at itemx maint print msymbols @var{filename}
+Write a dump of debugging symbol data into the file @var{filename}.
+These commands are used to debug the @value{GDBN} symbol-reading code.  Only
+symbols with debugging data are included.  If you use @samp{maint print
+symbols}, @value{GDBN} includes all the symbols for which it has already
+collected full details: that is, @var{filename} reflects symbols for
+only those files whose symbols @value{GDBN} has read.  You can use the
+command @code{info sources} to find out which files these are.  If you
+use @samp{maint print psymbols} instead, the dump shows information about
+symbols that @value{GDBN} only knows partially---that is, symbols defined in
+files that @value{GDBN} has skimmed, but not yet read completely.  Finally,
+ at samp{maint print msymbols} dumps just the minimal symbol information
+required for each object file from which @value{GDBN} has read some symbols.
+ at xref{Files, ,Commands to Specify Files}, for a discussion of how
+ at value{GDBN} reads symbols (in the description of @code{symbol-file}).
+
+ at kindex maint info symtabs
+ at kindex maint info psymtabs
+ at cindex listing @value{GDBN}'s internal symbol tables
+ at cindex symbol tables, listing @value{GDBN}'s internal
+ at cindex full symbol tables, listing @value{GDBN}'s internal
+ at cindex partial symbol tables, listing @value{GDBN}'s internal
+ at item maint info symtabs @r{[} @var{regexp} @r{]}
+ at itemx maint info psymtabs @r{[} @var{regexp} @r{]}
+
+List the @code{struct symtab} or @code{struct partial_symtab}
+structures whose names match @var{regexp}.  If @var{regexp} is not
+given, list them all.  The output includes expressions which you can
+copy into a @value{GDBN} debugging this one to examine a particular
+structure in more detail.  For example:
+
+ at smallexample
+(@value{GDBP}) maint info psymtabs dwarf2read
+@{ objfile /home/gnu/build/gdb/gdb
+  ((struct objfile *) 0x82e69d0)
+  @{ psymtab /home/gnu/src/gdb/dwarf2read.c
+    ((struct partial_symtab *) 0x8474b10)
+    readin no
+    fullname (null)
+    text addresses 0x814d3c8 -- 0x8158074
+    globals (* (struct partial_symbol **) 0x8507a08 @@ 9)
+    statics (* (struct partial_symbol **) 0x40e95b78 @@ 2882)
+    dependencies (none)
+  @}
+@}
+(@value{GDBP}) maint info symtabs
+(@value{GDBP})
+ at end smallexample
+ at noindent
+We see that there is one partial symbol table whose filename contains
+the string @samp{dwarf2read}, belonging to the @samp{gdb} executable;
+and we see that @value{GDBN} has not read in any symtabs yet at all.
+If we set a breakpoint on a function, that will cause @value{GDBN} to
+read the symtab for the compilation unit containing that function:
+
+ at smallexample
+(@value{GDBP}) break dwarf2_psymtab_to_symtab
+Breakpoint 1 at 0x814e5da: file /home/gnu/src/gdb/dwarf2read.c,
+line 1574.
+(@value{GDBP}) maint info symtabs
+@{ objfile /home/gnu/build/gdb/gdb
+  ((struct objfile *) 0x82e69d0)
+  @{ symtab /home/gnu/src/gdb/dwarf2read.c
+    ((struct symtab *) 0x86c1f38)
+    dirname (null)
+    fullname (null)
+    blockvector ((struct blockvector *) 0x86c1bd0) (primary)
+    linetable ((struct linetable *) 0x8370fa0)
+    debugformat DWARF 2
+  @}
+@}
+(@value{GDBP})
+ at end smallexample
+ at end table
+
+
+ at node Altering
+ at chapter Altering Execution
+
+Once you think you have found an error in your program, you might want to
+find out for certain whether correcting the apparent error would lead to
+correct results in the rest of the run.  You can find the answer by
+experiment, using the @value{GDBN} features for altering execution of the
+program.
+
+For example, you can store new values into variables or memory
+locations, give your program a signal, restart it at a different
+address, or even return prematurely from a function.
+
+ at menu
+* Assignment::                  Assignment to variables
+* Jumping::                     Continuing at a different address
+* Signaling::                   Giving your program a signal
+* Returning::                   Returning from a function
+* Calling::                     Calling your program's functions
+* Patching::                    Patching your program
+ at end menu
+
+ at node Assignment
+ at section Assignment to Variables
+
+ at cindex assignment
+ at cindex setting variables
+To alter the value of a variable, evaluate an assignment expression.
+ at xref{Expressions, ,Expressions}.  For example,
+
+ at smallexample
+print x=4
+ at end smallexample
+
+ at noindent
+stores the value 4 into the variable @code{x}, and then prints the
+value of the assignment expression (which is 4).
+ at xref{Languages, ,Using @value{GDBN} with Different Languages}, for more
+information on operators in supported languages.
+
+ at kindex set variable
+ at cindex variables, setting
+If you are not interested in seeing the value of the assignment, use the
+ at code{set} command instead of the @code{print} command.  @code{set} is
+really the same as @code{print} except that the expression's value is
+not printed and is not put in the value history (@pxref{Value History,
+,Value History}).  The expression is evaluated only for its effects.
+
+If the beginning of the argument string of the @code{set} command
+appears identical to a @code{set} subcommand, use the @code{set
+variable} command instead of just @code{set}.  This command is identical
+to @code{set} except for its lack of subcommands.  For example, if your
+program has a variable @code{width}, you get an error if you try to set
+a new value with just @samp{set width=13}, because @value{GDBN} has the
+command @code{set width}:
+
+ at smallexample
+(@value{GDBP}) whatis width
+type = double
+(@value{GDBP}) p width
+$4 = 13
+(@value{GDBP}) set width=47
+Invalid syntax in expression.
+ at end smallexample
+
+ at noindent
+The invalid expression, of course, is @samp{=47}.  In
+order to actually set the program's variable @code{width}, use
+
+ at smallexample
+(@value{GDBP}) set var width=47
+ at end smallexample
+
+Because the @code{set} command has many subcommands that can conflict
+with the names of program variables, it is a good idea to use the
+ at code{set variable} command instead of just @code{set}.  For example, if
+your program has a variable @code{g}, you run into problems if you try
+to set a new value with just @samp{set g=4}, because @value{GDBN} has
+the command @code{set gnutarget}, abbreviated @code{set g}:
+
+ at smallexample
+ at group
+(@value{GDBP}) whatis g
+type = double
+(@value{GDBP}) p g
+$1 = 1
+(@value{GDBP}) set g=4
+(@value{GDBP}) p g
+$2 = 1
+(@value{GDBP}) r
+The program being debugged has been started already.
+Start it from the beginning? (y or n) y
+Starting program: /home/smith/cc_progs/a.out
+"/home/smith/cc_progs/a.out": can't open to read symbols:
+                                 Invalid bfd target.
+(@value{GDBP}) show g
+The current BFD target is "=4".
+ at end group
+ at end smallexample
+
+ at noindent
+The program variable @code{g} did not change, and you silently set the
+ at code{gnutarget} to an invalid value.  In order to set the variable
+ at code{g}, use
+
+ at smallexample
+(@value{GDBP}) set var g=4
+ at end smallexample
+
+ at value{GDBN} allows more implicit conversions in assignments than C; you can
+freely store an integer value into a pointer variable or vice versa,
+and you can convert any structure to any other structure that is the
+same length or shorter.
+ at comment FIXME: how do structs align/pad in these conversions?
+ at comment        /doc at cygnus.com 18dec1990
+
+To store values into arbitrary places in memory, use the @samp{@{@dots{}@}}
+construct to generate a value of specified type at a specified address
+(@pxref{Expressions, ,Expressions}).  For example, @code{@{int@}0x83040} refers
+to memory location @code{0x83040} as an integer (which implies a certain size
+and representation in memory), and
+
+ at smallexample
+set @{int@}0x83040 = 4
+ at end smallexample
+
+ at noindent
+stores the value 4 into that memory location.
+
+ at node Jumping
+ at section Continuing at a Different Address
+
+Ordinarily, when you continue your program, you do so at the place where
+it stopped, with the @code{continue} command.  You can instead continue at
+an address of your own choosing, with the following commands:
+
+ at table @code
+ at kindex jump
+ at item jump @var{linespec}
+ at itemx jump @var{location}
+Resume execution at line @var{linespec} or at address given by
+ at var{location}.  Execution stops again immediately if there is a
+breakpoint there.  @xref{Specify Location}, for a description of the
+different forms of @var{linespec} and @var{location}.  It is common
+practice to use the @code{tbreak} command in conjunction with
+ at code{jump}.  @xref{Set Breaks, ,Setting Breakpoints}.
+
+The @code{jump} command does not change the current stack frame, or
+the stack pointer, or the contents of any memory location or any
+register other than the program counter.  If line @var{linespec} is in
+a different function from the one currently executing, the results may
+be bizarre if the two functions expect different patterns of arguments or
+of local variables.  For this reason, the @code{jump} command requests
+confirmation if the specified line is not in the function currently
+executing.  However, even bizarre results are predictable if you are
+well acquainted with the machine-language code of your program.
+ at end table
+
+ at c Doesn't work on HP-UX; have to set $pcoqh and $pcoqt.
+On many systems, you can get much the same effect as the @code{jump}
+command by storing a new value into the register @code{$pc}.  The
+difference is that this does not start your program running; it only
+changes the address of where it @emph{will} run when you continue.  For
+example,
+
+ at smallexample
+set $pc = 0x485
+ at end smallexample
+
+ at noindent
+makes the next @code{continue} command or stepping command execute at
+address @code{0x485}, rather than at the address where your program stopped.
+ at xref{Continuing and Stepping, ,Continuing and Stepping}.
+
+The most common occasion to use the @code{jump} command is to back
+up---perhaps with more breakpoints set---over a portion of a program
+that has already executed, in order to examine its execution in more
+detail.
+
+ at c @group
+ at node Signaling
+ at section Giving your Program a Signal
+ at cindex deliver a signal to a program
+
+ at table @code
+ at kindex signal
+ at item signal @var{signal}
+Resume execution where your program stopped, but immediately give it the
+signal @var{signal}.  @var{signal} can be the name or the number of a
+signal.  For example, on many systems @code{signal 2} and @code{signal
+SIGINT} are both ways of sending an interrupt signal.
+
+Alternatively, if @var{signal} is zero, continue execution without
+giving a signal.  This is useful when your program stopped on account of
+a signal and would ordinary see the signal when resumed with the
+ at code{continue} command; @samp{signal 0} causes it to resume without a
+signal.
+
+ at code{signal} does not repeat when you press @key{RET} a second time
+after executing the command.
+ at end table
+ at c @end group
+
+Invoking the @code{signal} command is not the same as invoking the
+ at code{kill} utility from the shell.  Sending a signal with @code{kill}
+causes @value{GDBN} to decide what to do with the signal depending on
+the signal handling tables (@pxref{Signals}).  The @code{signal} command
+passes the signal directly to your program.
+
+
+ at node Returning
+ at section Returning from a Function
+
+ at table @code
+ at cindex returning from a function
+ at kindex return
+ at item return
+ at itemx return @var{expression}
+You can cancel execution of a function call with the @code{return}
+command.  If you give an
+ at var{expression} argument, its value is used as the function's return
+value.
+ at end table
+
+When you use @code{return}, @value{GDBN} discards the selected stack frame
+(and all frames within it).  You can think of this as making the
+discarded frame return prematurely.  If you wish to specify a value to
+be returned, give that value as the argument to @code{return}.
+
+This pops the selected stack frame (@pxref{Selection, ,Selecting a
+Frame}), and any other frames inside of it, leaving its caller as the
+innermost remaining frame.  That frame becomes selected.  The
+specified value is stored in the registers used for returning values
+of functions.
+
+The @code{return} command does not resume execution; it leaves the
+program stopped in the state that would exist if the function had just
+returned.  In contrast, the @code{finish} command (@pxref{Continuing
+and Stepping, ,Continuing and Stepping}) resumes execution until the
+selected stack frame returns naturally.
+
+ at value{GDBN} needs to know how the @var{expression} argument should be set for
+the inferior.  The concrete registers assignment depends on the OS ABI and the
+type being returned by the selected stack frame.  For example it is common for
+OS ABI to return floating point values in FPU registers while integer values in
+CPU registers.  Still some ABIs return even floating point values in CPU
+registers.  Larger integer widths (such as @code{long long int}) also have
+specific placement rules.  @value{GDBN} already knows the OS ABI from its
+current target so it needs to find out also the type being returned to make the
+assignment into the right register(s).
+
+Normally, the selected stack frame has debug info.  @value{GDBN} will always
+use the debug info instead of the implicit type of @var{expression} when the
+debug info is available.  For example, if you type @kbd{return -1}, and the
+function in the current stack frame is declared to return a @code{long long
+int}, @value{GDBN} transparently converts the implicit @code{int} value of -1
+into a @code{long long int}:
+
+ at smallexample
+Breakpoint 1, func () at gdb.base/return-nodebug.c:29
+29        return 31;
+(@value{GDBP}) return -1
+Make func return now? (y or n) y
+#0  0x004004f6 in main () at gdb.base/return-nodebug.c:43
+43        printf ("result=%lld\n", func ());
+(@value{GDBP})
+ at end smallexample
+
+However, if the selected stack frame does not have a debug info, e.g., if the
+function was compiled without debug info, @value{GDBN} has to find out the type
+to return from user.  Specifying a different type by mistake may set the value
+in different inferior registers than the caller code expects.  For example,
+typing @kbd{return -1} with its implicit type @code{int} would set only a part
+of a @code{long long int} result for a debug info less function (on 32-bit
+architectures).  Therefore the user is required to specify the return type by
+an appropriate cast explicitly:
+
+ at smallexample
+Breakpoint 2, 0x0040050b in func ()
+(@value{GDBP}) return -1
+Return value type not available for selected stack frame.
+Please use an explicit cast of the value to return.
+(@value{GDBP}) return (long long int) -1
+Make selected stack frame return now? (y or n) y
+#0  0x00400526 in main ()
+(@value{GDBP})
+ at end smallexample
+
+ at node Calling
+ at section Calling Program Functions
+
+ at table @code
+ at cindex calling functions
+ at cindex inferior functions, calling
+ at item print @var{expr}
+Evaluate the expression @var{expr} and display the resulting value.
+ at var{expr} may include calls to functions in the program being
+debugged.
+
+ at kindex call
+ at item call @var{expr}
+Evaluate the expression @var{expr} without displaying @code{void}
+returned values.
+
+You can use this variant of the @code{print} command if you want to
+execute a function from your program that does not return anything
+(a.k.a.@: @dfn{a void function}), but without cluttering the output
+with @code{void} returned values that @value{GDBN} will otherwise
+print.  If the result is not void, it is printed and saved in the
+value history.
+ at end table
+
+It is possible for the function you call via the @code{print} or
+ at code{call} command to generate a signal (e.g., if there's a bug in
+the function, or if you passed it incorrect arguments).  What happens
+in that case is controlled by the @code{set unwindonsignal} command.
+
+Similarly, with a C at t{++} program it is possible for the function you
+call via the @code{print} or @code{call} command to generate an
+exception that is not handled due to the constraints of the dummy
+frame.  In this case, any exception that is raised in the frame, but has
+an out-of-frame exception handler will not be found.  GDB builds a
+dummy-frame for the inferior function call, and the unwinder cannot
+seek for exception handlers outside of this dummy-frame.  What happens
+in that case is controlled by the
+ at code{set unwind-on-terminating-exception} command.
+
+ at table @code
+ at item set unwindonsignal
+ at kindex set unwindonsignal
+ at cindex unwind stack in called functions
+ at cindex call dummy stack unwinding
+Set unwinding of the stack if a signal is received while in a function
+that @value{GDBN} called in the program being debugged.  If set to on,
+ at value{GDBN} unwinds the stack it created for the call and restores
+the context to what it was before the call.  If set to off (the
+default), @value{GDBN} stops in the frame where the signal was
+received.
+
+ at item show unwindonsignal
+ at kindex show unwindonsignal
+Show the current setting of stack unwinding in the functions called by
+ at value{GDBN}.
+
+ at item set unwind-on-terminating-exception
+ at kindex set unwind-on-terminating-exception
+ at cindex unwind stack in called functions with unhandled exceptions
+ at cindex call dummy stack unwinding on unhandled exception.
+Set unwinding of the stack if a C at t{++} exception is raised, but left
+unhandled while in a function that @value{GDBN} called in the program being
+debugged.  If set to on (the default), @value{GDBN} unwinds the stack
+it created for the call and restores the context to what it was before
+the call.  If set to off, @value{GDBN} the exception is delivered to
+the default C at t{++} exception handler and the inferior terminated.
+
+ at item show unwind-on-terminating-exception
+ at kindex show unwind-on-terminating-exception
+Show the current setting of stack unwinding in the functions called by
+ at value{GDBN}.
+
+ at end table
+
+ at cindex weak alias functions
+Sometimes, a function you wish to call is actually a @dfn{weak alias}
+for another function.  In such case, @value{GDBN} might not pick up
+the type information, including the types of the function arguments,
+which causes @value{GDBN} to call the inferior function incorrectly.
+As a result, the called function will function erroneously and may
+even crash.  A solution to that is to use the name of the aliased
+function instead.
+
+ at node Patching
+ at section Patching Programs
+
+ at cindex patching binaries
+ at cindex writing into executables
+ at cindex writing into corefiles
+
+By default, @value{GDBN} opens the file containing your program's
+executable code (or the corefile) read-only.  This prevents accidental
+alterations to machine code; but it also prevents you from intentionally
+patching your program's binary.
+
+If you'd like to be able to patch the binary, you can specify that
+explicitly with the @code{set write} command.  For example, you might
+want to turn on internal debugging flags, or even to make emergency
+repairs.
+
+ at table @code
+ at kindex set write
+ at item set write on
+ at itemx set write off
+If you specify @samp{set write on}, @value{GDBN} opens executable and
+core files for both reading and writing; if you specify @kbd{set write
+off} (the default), @value{GDBN} opens them read-only.
+
+If you have already loaded a file, you must load it again (using the
+ at code{exec-file} or @code{core-file} command) after changing @code{set
+write}, for your new setting to take effect.
+
+ at item show write
+ at kindex show write
+Display whether executable files and core files are opened for writing
+as well as reading.
+ at end table
+
+ at node GDB Files
+ at chapter @value{GDBN} Files
+
+ at value{GDBN} needs to know the file name of the program to be debugged,
+both in order to read its symbol table and in order to start your
+program.  To debug a core dump of a previous run, you must also tell
+ at value{GDBN} the name of the core dump file.
+
+ at menu
+* Files::                       Commands to specify files
+* Separate Debug Files::        Debugging information in separate files
+* Index Files::                 Index files speed up GDB
+* Symbol Errors::               Errors reading symbol files
+* Data Files::                  GDB data files
+ at end menu
+
+ at node Files
+ at section Commands to Specify Files
+
+ at cindex symbol table
+ at cindex core dump file
+
+You may want to specify executable and core dump file names.  The usual
+way to do this is at start-up time, using the arguments to
+ at value{GDBN}'s start-up commands (@pxref{Invocation, , Getting In and
+Out of @value{GDBN}}).
+
+Occasionally it is necessary to change to a different file during a
+ at value{GDBN} session.  Or you may run @value{GDBN} and forget to
+specify a file you want to use.  Or you are debugging a remote target
+via @code{gdbserver} (@pxref{Server, file, Using the @code{gdbserver}
+Program}).  In these situations the @value{GDBN} commands to specify
+new files are useful.
+
+ at table @code
+ at cindex executable file
+ at kindex file
+ at item file @var{filename}
+Use @var{filename} as the program to be debugged.  It is read for its
+symbols and for the contents of pure memory.  It is also the program
+executed when you use the @code{run} command.  If you do not specify a
+directory and the file is not found in the @value{GDBN} working directory,
+ at value{GDBN} uses the environment variable @code{PATH} as a list of
+directories to search, just as the shell does when looking for a program
+to run.  You can change the value of this variable, for both @value{GDBN}
+and your program, using the @code{path} command.
+
+ at cindex unlinked object files
+ at cindex patching object files
+You can load unlinked object @file{.o} files into @value{GDBN} using
+the @code{file} command.  You will not be able to ``run'' an object
+file, but you can disassemble functions and inspect variables.  Also,
+if the underlying BFD functionality supports it, you could use
+ at kbd{gdb -write} to patch object files using this technique.  Note
+that @value{GDBN} can neither interpret nor modify relocations in this
+case, so branches and some initialized variables will appear to go to
+the wrong place.  But this feature is still handy from time to time.
+
+ at item file
+ at code{file} with no argument makes @value{GDBN} discard any information it
+has on both executable file and the symbol table.
+
+ at kindex exec-file
+ at item exec-file @r{[} @var{filename} @r{]}
+Specify that the program to be run (but not the symbol table) is found
+in @var{filename}.  @value{GDBN} searches the environment variable @code{PATH}
+if necessary to locate your program.  Omitting @var{filename} means to
+discard information on the executable file.
+
+ at kindex symbol-file
+ at item symbol-file @r{[} @var{filename} @r{]}
+Read symbol table information from file @var{filename}.  @code{PATH} is
+searched when necessary.  Use the @code{file} command to get both symbol
+table and program to run from the same file.
+
+ at code{symbol-file} with no argument clears out @value{GDBN} information on your
+program's symbol table.
+
+The @code{symbol-file} command causes @value{GDBN} to forget the contents of
+some breakpoints and auto-display expressions.  This is because they may
+contain pointers to the internal data recording symbols and data types,
+which are part of the old symbol table data being discarded inside
+ at value{GDBN}.
+
+ at code{symbol-file} does not repeat if you press @key{RET} again after
+executing it once.
+
+When @value{GDBN} is configured for a particular environment, it
+understands debugging information in whatever format is the standard
+generated for that environment; you may use either a @sc{gnu} compiler, or
+other compilers that adhere to the local conventions.
+Best results are usually obtained from @sc{gnu} compilers; for example,
+using @code{@value{NGCC}} you can generate debugging information for
+optimized code.
+
+For most kinds of object files, with the exception of old SVR3 systems
+using COFF, the @code{symbol-file} command does not normally read the
+symbol table in full right away.  Instead, it scans the symbol table
+quickly to find which source files and which symbols are present.  The
+details are read later, one source file at a time, as they are needed.
+
+The purpose of this two-stage reading strategy is to make @value{GDBN}
+start up faster.  For the most part, it is invisible except for
+occasional pauses while the symbol table details for a particular source
+file are being read.  (The @code{set verbose} command can turn these
+pauses into messages if desired.  @xref{Messages/Warnings, ,Optional
+Warnings and Messages}.)
+
+We have not implemented the two-stage strategy for COFF yet.  When the
+symbol table is stored in COFF format, @code{symbol-file} reads the
+symbol table data in full right away.  Note that ``stabs-in-COFF''
+still does the two-stage strategy, since the debug info is actually
+in stabs format.
+
+ at kindex readnow
+ at cindex reading symbols immediately
+ at cindex symbols, reading immediately
+ at item symbol-file @r{[} -readnow @r{]} @var{filename}
+ at itemx file @r{[} -readnow @r{]} @var{filename}
+You can override the @value{GDBN} two-stage strategy for reading symbol
+tables by using the @samp{-readnow} option with any of the commands that
+load symbol table information, if you want to be sure @value{GDBN} has the
+entire symbol table available.
+
+ at c FIXME: for now no mention of directories, since this seems to be in
+ at c flux.  13mar1992 status is that in theory GDB would look either in
+ at c current dir or in same dir as myprog; but issues like competing
+ at c GDB's, or clutter in system dirs, mean that in practice right now
+ at c only current dir is used.  FFish says maybe a special GDB hierarchy
+ at c (eg rooted in val of env var GDBSYMS) could exist for mappable symbol
+ at c files.
+
+ at kindex core-file
+ at item core-file @r{[}@var{filename}@r{]}
+ at itemx core
+Specify the whereabouts of a core dump file to be used as the ``contents
+of memory''.  Traditionally, core files contain only some parts of the
+address space of the process that generated them; @value{GDBN} can access the
+executable file itself for other parts.
+
+ at code{core-file} with no argument specifies that no core file is
+to be used.
+
+Note that the core file is ignored when your program is actually running
+under @value{GDBN}.  So, if you have been running your program and you
+wish to debug a core file instead, you must kill the subprocess in which
+the program is running.  To do this, use the @code{kill} command
+(@pxref{Kill Process, ,Killing the Child Process}).
+
+ at kindex add-symbol-file
+ at cindex dynamic linking
+ at item add-symbol-file @var{filename} @var{address}
+ at itemx add-symbol-file @var{filename} @var{address} @r{[} -readnow @r{]}
+ at itemx add-symbol-file @var{filename} @var{address} -s @var{section} @var{address} @dots{}
+The @code{add-symbol-file} command reads additional symbol table
+information from the file @var{filename}.  You would use this command
+when @var{filename} has been dynamically loaded (by some other means)
+into the program that is running.  @var{address} should be the memory
+address at which the file has been loaded; @value{GDBN} cannot figure
+this out for itself.  You can additionally specify an arbitrary number
+of @samp{-s @var{section} @var{address}} pairs, to give an explicit
+section name and base address for that section.  You can specify any
+ at var{address} as an expression.
+
+The symbol table of the file @var{filename} is added to the symbol table
+originally read with the @code{symbol-file} command.  You can use the
+ at code{add-symbol-file} command any number of times; the new symbol data
+thus read keeps adding to the old.  To discard all old symbol data
+instead, use the @code{symbol-file} command without any arguments.
+
+ at cindex relocatable object files, reading symbols from
+ at cindex object files, relocatable, reading symbols from
+ at cindex reading symbols from relocatable object files
+ at cindex symbols, reading from relocatable object files
+ at cindex @file{.o} files, reading symbols from
+Although @var{filename} is typically a shared library file, an
+executable file, or some other object file which has been fully
+relocated for loading into a process, you can also load symbolic
+information from relocatable @file{.o} files, as long as:
+
+ at itemize @bullet
+ at item
+the file's symbolic information refers only to linker symbols defined in
+that file, not to symbols defined by other object files,
+ at item
+every section the file's symbolic information refers to has actually
+been loaded into the inferior, as it appears in the file, and
+ at item
+you can determine the address at which every section was loaded, and
+provide these to the @code{add-symbol-file} command.
+ at end itemize
+
+ at noindent
+Some embedded operating systems, like Sun Chorus and VxWorks, can load
+relocatable files into an already running program; such systems
+typically make the requirements above easy to meet.  However, it's
+important to recognize that many native systems use complex link
+procedures (@code{.linkonce} section factoring and C at t{++} constructor table
+assembly, for example) that make the requirements difficult to meet.  In
+general, one cannot assume that using @code{add-symbol-file} to read a
+relocatable object file's symbolic information will have the same effect
+as linking the relocatable object file into the program in the normal
+way.
+
+ at code{add-symbol-file} does not repeat if you press @key{RET} after using it.
+
+ at kindex add-symbol-file-from-memory
+ at cindex @code{syscall DSO}
+ at cindex load symbols from memory
+ at item add-symbol-file-from-memory @var{address}
+Load symbols from the given @var{address} in a dynamically loaded
+object file whose image is mapped directly into the inferior's memory.
+For example, the Linux kernel maps a @code{syscall DSO} into each
+process's address space; this DSO provides kernel-specific code for
+some system calls.  The argument can be any expression whose
+evaluation yields the address of the file's shared object file header.
+For this command to work, you must have used @code{symbol-file} or
+ at code{exec-file} commands in advance.
+
+ at kindex add-shared-symbol-files
+ at kindex assf
+ at item add-shared-symbol-files @var{library-file}
+ at itemx assf @var{library-file}
+The @code{add-shared-symbol-files} command can currently be used only
+in the Cygwin build of @value{GDBN} on MS-Windows OS, where it is an
+alias for the @code{dll-symbols} command (@pxref{Cygwin Native}).
+ at value{GDBN} automatically looks for shared libraries, however if
+ at value{GDBN} does not find yours, you can invoke
+ at code{add-shared-symbol-files}.  It takes one argument: the shared
+library's file name.  @code{assf} is a shorthand alias for
+ at code{add-shared-symbol-files}.
+
+ at kindex section
+ at item section @var{section} @var{addr}
+The @code{section} command changes the base address of the named
+ at var{section} of the exec file to @var{addr}.  This can be used if the
+exec file does not contain section addresses, (such as in the
+ at code{a.out} format), or when the addresses specified in the file
+itself are wrong.  Each section must be changed separately.  The
+ at code{info files} command, described below, lists all the sections and
+their addresses.
+
+ at kindex info files
+ at kindex info target
+ at item info files
+ at itemx info target
+ at code{info files} and @code{info target} are synonymous; both print the
+current target (@pxref{Targets, ,Specifying a Debugging Target}),
+including the names of the executable and core dump files currently in
+use by @value{GDBN}, and the files from which symbols were loaded.  The
+command @code{help target} lists all possible targets rather than
+current ones.
+
+ at kindex maint info sections
+ at item maint info sections
+Another command that can give you extra information about program sections
+is @code{maint info sections}.  In addition to the section information
+displayed by @code{info files}, this command displays the flags and file
+offset of each section in the executable and core dump files.  In addition,
+ at code{maint info sections} provides the following command options (which
+may be arbitrarily combined):
+
+ at table @code
+ at item ALLOBJ
+Display sections for all loaded object files, including shared libraries.
+ at item @var{sections}
+Display info only for named @var{sections}.
+ at item @var{section-flags}
+Display info only for sections for which @var{section-flags} are true.
+The section flags that @value{GDBN} currently knows about are:
+ at table @code
+ at item ALLOC
+Section will have space allocated in the process when loaded.
+Set for all sections except those containing debug information.
+ at item LOAD
+Section will be loaded from the file into the child process memory.
+Set for pre-initialized code and data, clear for @code{.bss} sections.
+ at item RELOC
+Section needs to be relocated before loading.
+ at item READONLY
+Section cannot be modified by the child process.
+ at item CODE
+Section contains executable code only.
+ at item DATA
+Section contains data only (no executable code).
+ at item ROM
+Section will reside in ROM.
+ at item CONSTRUCTOR
+Section contains data for constructor/destructor lists.
+ at item HAS_CONTENTS
+Section is not empty.
+ at item NEVER_LOAD
+An instruction to the linker to not output the section.
+ at item COFF_SHARED_LIBRARY
+A notification to the linker that the section contains
+COFF shared library information.
+ at item IS_COMMON
+Section contains common symbols.
+ at end table
+ at end table
+ at kindex set trust-readonly-sections
+ at cindex read-only sections
+ at item set trust-readonly-sections on
+Tell @value{GDBN} that readonly sections in your object file
+really are read-only (i.e.@: that their contents will not change).
+In that case, @value{GDBN} can fetch values from these sections
+out of the object file, rather than from the target program.
+For some targets (notably embedded ones), this can be a significant
+enhancement to debugging performance.
+
+The default is off.
+
+ at item set trust-readonly-sections off
+Tell @value{GDBN} not to trust readonly sections.  This means that
+the contents of the section might change while the program is running,
+and must therefore be fetched from the target when needed.
+
+ at item show trust-readonly-sections
+Show the current setting of trusting readonly sections.
+ at end table
+
+All file-specifying commands allow both absolute and relative file names
+as arguments.  @value{GDBN} always converts the file name to an absolute file
+name and remembers it that way.
+
+ at cindex shared libraries
+ at anchor{Shared Libraries}
+ at value{GDBN} supports @sc{gnu}/Linux, MS-Windows, HP-UX, SunOS, SVr4, Irix,
+and IBM RS/6000 AIX shared libraries.
+
+On MS-Windows @value{GDBN} must be linked with the Expat library to support
+shared libraries.  @xref{Expat}.
+
+ at value{GDBN} automatically loads symbol definitions from shared libraries
+when you use the @code{run} command, or when you examine a core file.
+(Before you issue the @code{run} command, @value{GDBN} does not understand
+references to a function in a shared library, however---unless you are
+debugging a core file).
+
+On HP-UX, if the program loads a library explicitly, @value{GDBN}
+automatically loads the symbols at the time of the @code{shl_load} call.
+
+ at c FIXME: some @value{GDBN} release may permit some refs to undef
+ at c FIXME...symbols---eg in a break cmd---assuming they are from a shared
+ at c FIXME...lib; check this from time to time when updating manual
+
+There are times, however, when you may wish to not automatically load
+symbol definitions from shared libraries, such as when they are
+particularly large or there are many of them.
+
+To control the automatic loading of shared library symbols, use the
+commands:
+
+ at table @code
+ at kindex set auto-solib-add
+ at item set auto-solib-add @var{mode}
+If @var{mode} is @code{on}, symbols from all shared object libraries
+will be loaded automatically when the inferior begins execution, you
+attach to an independently started inferior, or when the dynamic linker
+informs @value{GDBN} that a new library has been loaded.  If @var{mode}
+is @code{off}, symbols must be loaded manually, using the
+ at code{sharedlibrary} command.  The default value is @code{on}.
+
+ at cindex memory used for symbol tables
+If your program uses lots of shared libraries with debug info that
+takes large amounts of memory, you can decrease the @value{GDBN}
+memory footprint by preventing it from automatically loading the
+symbols from shared libraries.  To that end, type @kbd{set
+auto-solib-add off} before running the inferior, then load each
+library whose debug symbols you do need with @kbd{sharedlibrary
+ at var{regexp}}, where @var{regexp} is a regular expression that matches
+the libraries whose symbols you want to be loaded.
+
+ at kindex show auto-solib-add
+ at item show auto-solib-add
+Display the current autoloading mode.
+ at end table
+
+ at cindex load shared library
+To explicitly load shared library symbols, use the @code{sharedlibrary}
+command:
+
+ at table @code
+ at kindex info sharedlibrary
+ at kindex info share
+ at item info share @var{regex}
+ at itemx info sharedlibrary @var{regex}
+Print the names of the shared libraries which are currently loaded
+that match @var{regex}.  If @var{regex} is omitted then print
+all shared libraries that are loaded.
+
+ at kindex sharedlibrary
+ at kindex share
+ at item sharedlibrary @var{regex}
+ at itemx share @var{regex}
+Load shared object library symbols for files matching a
+Unix regular expression.
+As with files loaded automatically, it only loads shared libraries
+required by your program for a core file or after typing @code{run}.  If
+ at var{regex} is omitted all shared libraries required by your program are
+loaded.
+
+ at item nosharedlibrary
+ at kindex nosharedlibrary
+ at cindex unload symbols from shared libraries
+Unload all shared object library symbols.  This discards all symbols
+that have been loaded from all shared libraries.  Symbols from shared
+libraries that were loaded by explicit user requests are not
+discarded.
+ at end table
+
+Sometimes you may wish that @value{GDBN} stops and gives you control
+when any of shared library events happen.  The best way to do this is
+to use @code{catch load} and @code{catch unload} (@pxref{Set
+Catchpoints}).
+
+ at value{GDBN} also supports the the @code{set stop-on-solib-events}
+command for this.  This command exists for historical reasons.  It is
+less useful than setting a catchpoint, because it does not allow for
+conditions or commands as a catchpoint does.
+
+ at table @code
+ at item set stop-on-solib-events
+ at kindex set stop-on-solib-events
+This command controls whether @value{GDBN} should give you control
+when the dynamic linker notifies it about some shared library event.
+The most common event of interest is loading or unloading of a new
+shared library.
+
+ at item show stop-on-solib-events
+ at kindex show stop-on-solib-events
+Show whether @value{GDBN} stops and gives you control when shared
+library events happen.
+ at end table
+
+Shared libraries are also supported in many cross or remote debugging
+configurations.  @value{GDBN} needs to have access to the target's libraries;
+this can be accomplished either by providing copies of the libraries
+on the host system, or by asking @value{GDBN} to automatically retrieve the
+libraries from the target.  If copies of the target libraries are
+provided, they need to be the same as the target libraries, although the
+copies on the target can be stripped as long as the copies on the host are
+not.
+
+ at cindex where to look for shared libraries
+For remote debugging, you need to tell @value{GDBN} where the target
+libraries are, so that it can load the correct copies---otherwise, it
+may try to load the host's libraries.  @value{GDBN} has two variables
+to specify the search directories for target libraries.
+
+ at table @code
+ at cindex prefix for shared library file names
+ at cindex system root, alternate
+ at kindex set solib-absolute-prefix
+ at kindex set sysroot
+ at item set sysroot @var{path}
+Use @var{path} as the system root for the program being debugged.  Any
+absolute shared library paths will be prefixed with @var{path}; many
+runtime loaders store the absolute paths to the shared library in the
+target program's memory.  If you use @code{set sysroot} to find shared
+libraries, they need to be laid out in the same way that they are on
+the target, with e.g.@: a @file{/lib} and @file{/usr/lib} hierarchy
+under @var{path}.
+
+If @var{path} starts with the sequence @file{remote:}, @value{GDBN} will 
+retrieve the target libraries from the remote system.  This is only
+supported when using a remote target that supports the @code{remote get}
+command (@pxref{File Transfer,,Sending files to a remote system}).
+The part of @var{path} following the initial @file{remote:}
+(if present) is used as system root prefix on the remote file system.
+ at footnote{If you want to specify a local system root using a directory
+that happens to be named @file{remote:}, you need to use some equivalent
+variant of the name like @file{./remote:}.}
+
+For targets with an MS-DOS based filesystem, such as MS-Windows and
+SymbianOS, @value{GDBN} tries prefixing a few variants of the target
+absolute file name with @var{path}.  But first, on Unix hosts,
+ at value{GDBN} converts all backslash directory separators into forward
+slashes, because the backslash is not a directory separator on Unix:
+
+ at smallexample
+  c:\foo\bar.dll @result{} c:/foo/bar.dll
+ at end smallexample
+
+Then, @value{GDBN} attempts prefixing the target file name with
+ at var{path}, and looks for the resulting file name in the host file
+system:
+
+ at smallexample
+  c:/foo/bar.dll @result{} /path/to/sysroot/c:/foo/bar.dll
+ at end smallexample
+
+If that does not find the shared library, @value{GDBN} tries removing
+the @samp{:} character from the drive spec, both for convenience, and,
+for the case of the host file system not supporting file names with
+colons:
+
+ at smallexample
+  c:/foo/bar.dll @result{} /path/to/sysroot/c/foo/bar.dll
+ at end smallexample
+
+This makes it possible to have a system root that mirrors a target
+with more than one drive.  E.g., you may want to setup your local
+copies of the target system shared libraries like so (note @samp{c} vs
+ at samp{z}):
+
+ at smallexample
+ @file{/path/to/sysroot/c/sys/bin/foo.dll}
+ @file{/path/to/sysroot/c/sys/bin/bar.dll}
+ @file{/path/to/sysroot/z/sys/bin/bar.dll}
+ at end smallexample
+
+ at noindent
+and point the system root at @file{/path/to/sysroot}, so that
+ at value{GDBN} can find the correct copies of both
+ at file{c:\sys\bin\foo.dll}, and @file{z:\sys\bin\bar.dll}.
+
+If that still does not find the shared library, @value{GDBN} tries
+removing the whole drive spec from the target file name:
+
+ at smallexample
+  c:/foo/bar.dll @result{} /path/to/sysroot/foo/bar.dll
+ at end smallexample
+
+This last lookup makes it possible to not care about the drive name,
+if you don't want or need to.
+
+The @code{set solib-absolute-prefix} command is an alias for @code{set
+sysroot}.
+
+ at cindex default system root
+ at cindex @samp{--with-sysroot}
+You can set the default system root by using the configure-time
+ at samp{--with-sysroot} option.  If the system root is inside
+ at value{GDBN}'s configured binary prefix (set with @samp{--prefix} or
+ at samp{--exec-prefix}), then the default system root will be updated
+automatically if the installed @value{GDBN} is moved to a new
+location.
+
+ at kindex show sysroot
+ at item show sysroot
+Display the current shared library prefix.
+
+ at kindex set solib-search-path
+ at item set solib-search-path @var{path}
+If this variable is set, @var{path} is a colon-separated list of
+directories to search for shared libraries.  @samp{solib-search-path}
+is used after @samp{sysroot} fails to locate the library, or if the
+path to the library is relative instead of absolute.  If you want to
+use @samp{solib-search-path} instead of @samp{sysroot}, be sure to set
+ at samp{sysroot} to a nonexistent directory to prevent @value{GDBN} from
+finding your host's libraries.  @samp{sysroot} is preferred; setting
+it to a nonexistent directory may interfere with automatic loading
+of shared library symbols.
+
+ at kindex show solib-search-path
+ at item show solib-search-path
+Display the current shared library search path.
+
+ at cindex DOS file-name semantics of file names.
+ at kindex set target-file-system-kind (unix|dos-based|auto)
+ at kindex show target-file-system-kind
+ at item set target-file-system-kind @var{kind}
+Set assumed file system kind for target reported file names.
+
+Shared library file names as reported by the target system may not
+make sense as is on the system @value{GDBN} is running on.  For
+example, when remote debugging a target that has MS-DOS based file
+system semantics, from a Unix host, the target may be reporting to
+ at value{GDBN} a list of loaded shared libraries with file names such as
+ at file{c:\Windows\kernel32.dll}.  On Unix hosts, there's no concept of
+drive letters, so the @samp{c:\} prefix is not normally understood as
+indicating an absolute file name, and neither is the backslash
+normally considered a directory separator character.  In that case,
+the native file system would interpret this whole absolute file name
+as a relative file name with no directory components.  This would make
+it impossible to point @value{GDBN} at a copy of the remote target's
+shared libraries on the host using @code{set sysroot}, and impractical
+with @code{set solib-search-path}.  Setting
+ at code{target-file-system-kind} to @code{dos-based} tells @value{GDBN}
+to interpret such file names similarly to how the target would, and to
+map them to file names valid on @value{GDBN}'s native file system
+semantics.  The value of @var{kind} can be @code{"auto"}, in addition
+to one of the supported file system kinds.  In that case, @value{GDBN}
+tries to determine the appropriate file system variant based on the
+current target's operating system (@pxref{ABI, ,Configuring the
+Current ABI}).  The supported file system settings are:
+
+ at table @code
+ at item unix
+Instruct @value{GDBN} to assume the target file system is of Unix
+kind.  Only file names starting the forward slash (@samp{/}) character
+are considered absolute, and the directory separator character is also
+the forward slash.
+
+ at item dos-based
+Instruct @value{GDBN} to assume the target file system is DOS based.
+File names starting with either a forward slash, or a drive letter
+followed by a colon (e.g., @samp{c:}), are considered absolute, and
+both the slash (@samp{/}) and the backslash (@samp{\\}) characters are
+considered directory separators.
+
+ at item auto
+Instruct @value{GDBN} to use the file system kind associated with the
+target operating system (@pxref{ABI, ,Configuring the Current ABI}).
+This is the default.
+ at end table
+ at end table
+
+ at cindex file name canonicalization
+ at cindex base name differences
+When processing file names provided by the user, @value{GDBN}
+frequently needs to compare them to the file names recorded in the
+program's debug info.  Normally, @value{GDBN} compares just the
+ at dfn{base names} of the files as strings, which is reasonably fast
+even for very large programs.  (The base name of a file is the last
+portion of its name, after stripping all the leading directories.)
+This shortcut in comparison is based upon the assumption that files
+cannot have more than one base name.  This is usually true, but
+references to files that use symlinks or similar filesystem
+facilities violate that assumption.  If your program records files
+using such facilities, or if you provide file names to @value{GDBN}
+using symlinks etc., you can set @code{basenames-may-differ} to
+ at code{true} to instruct @value{GDBN} to completely canonicalize each
+pair of file names it needs to compare.  This will make file-name
+comparisons accurate, but at a price of a significant slowdown.
+
+ at table @code
+ at item set basenames-may-differ
+ at kindex set basenames-may-differ
+Set whether a source file may have multiple base names.
+
+ at item show basenames-may-differ
+ at kindex show basenames-may-differ
+Show whether a source file may have multiple base names.
+ at end table
+
+ at node Separate Debug Files
+ at section Debugging Information in Separate Files
+ at cindex separate debugging information files
+ at cindex debugging information in separate files
+ at cindex @file{.debug} subdirectories
+ at cindex debugging information directory, global
+ at cindex global debugging information directories
+ at cindex build ID, and separate debugging files
+ at cindex @file{.build-id} directory
+
+ at value{GDBN} allows you to put a program's debugging information in a
+file separate from the executable itself, in a way that allows
+ at value{GDBN} to find and load the debugging information automatically.
+Since debugging information can be very large---sometimes larger
+than the executable code itself---some systems distribute debugging
+information for their executables in separate files, which users can
+install only when they need to debug a problem.
+
+ at value{GDBN} supports two ways of specifying the separate debug info
+file:
+
+ at itemize @bullet
+ at item
+The executable contains a @dfn{debug link} that specifies the name of
+the separate debug info file.  The separate debug file's name is
+usually @file{@var{executable}.debug}, where @var{executable} is the
+name of the corresponding executable file without leading directories
+(e.g., @file{ls.debug} for @file{/usr/bin/ls}).  In addition, the
+debug link specifies a 32-bit @dfn{Cyclic Redundancy Check} (CRC)
+checksum for the debug file, which @value{GDBN} uses to validate that
+the executable and the debug file came from the same build.
+
+ at item
+The executable contains a @dfn{build ID}, a unique bit string that is
+also present in the corresponding debug info file.  (This is supported
+only on some operating systems, notably those which use the ELF format
+for binary files and the @sc{gnu} Binutils.)  For more details about
+this feature, see the description of the @option{--build-id}
+command-line option in @ref{Options, , Command Line Options, ld.info,
+The GNU Linker}.  The debug info file's name is not specified
+explicitly by the build ID, but can be computed from the build ID, see
+below.
+ at end itemize
+
+Depending on the way the debug info file is specified, @value{GDBN}
+uses two different methods of looking for the debug file:
+
+ at itemize @bullet
+ at item
+For the ``debug link'' method, @value{GDBN} looks up the named file in
+the directory of the executable file, then in a subdirectory of that
+directory named @file{.debug}, and finally under each one of the global debug
+directories, in a subdirectory whose name is identical to the leading
+directories of the executable's absolute file name.
+
+ at item
+For the ``build ID'' method, @value{GDBN} looks in the
+ at file{.build-id} subdirectory of each one of the global debug directories for
+a file named @file{@var{nn}/@var{nnnnnnnn}.debug}, where @var{nn} are the
+first 2 hex characters of the build ID bit string, and @var{nnnnnnnn}
+are the rest of the bit string.  (Real build ID strings are 32 or more
+hex characters, not 10.)
+ at end itemize
+
+So, for example, suppose you ask @value{GDBN} to debug
+ at file{/usr/bin/ls}, which has a debug link that specifies the
+file @file{ls.debug}, and a build ID whose value in hex is
+ at code{abcdef1234}.  If the list of the global debug directories includes
+ at file{/usr/lib/debug}, then @value{GDBN} will look for the following
+debug information files, in the indicated order:
+
+ at itemize @minus
+ at item
+ at file{/usr/lib/debug/.build-id/ab/cdef1234.debug}
+ at item
+ at file{/usr/bin/ls.debug}
+ at item
+ at file{/usr/bin/.debug/ls.debug}
+ at item
+ at file{/usr/lib/debug/usr/bin/ls.debug}.
+ at end itemize
+
+ at anchor{debug-file-directory}
+Global debugging info directories default to what is set by @value{GDBN}
+configure option @option{--with-separate-debug-dir}.  During @value{GDBN} run
+you can also set the global debugging info directories, and view the list
+ at value{GDBN} is currently using.
+
+ at table @code
+
+ at kindex set debug-file-directory
+ at item set debug-file-directory @var{directories}
+Set the directories which @value{GDBN} searches for separate debugging
+information files to @var{directory}.  Multiple path components can be set
+concatenating them by a path separator.
+
+ at kindex show debug-file-directory
+ at item show debug-file-directory
+Show the directories @value{GDBN} searches for separate debugging
+information files.
+
+ at end table
+
+ at cindex @code{.gnu_debuglink} sections
+ at cindex debug link sections
+A debug link is a special section of the executable file named
+ at code{.gnu_debuglink}.  The section must contain:
+
+ at itemize
+ at item
+A filename, with any leading directory components removed, followed by
+a zero byte,
+ at item
+zero to three bytes of padding, as needed to reach the next four-byte
+boundary within the section, and
+ at item
+a four-byte CRC checksum, stored in the same endianness used for the
+executable file itself.  The checksum is computed on the debugging
+information file's full contents by the function given below, passing
+zero as the @var{crc} argument.
+ at end itemize
+
+Any executable file format can carry a debug link, as long as it can
+contain a section named @code{.gnu_debuglink} with the contents
+described above.
+
+ at cindex @code{.note.gnu.build-id} sections
+ at cindex build ID sections
+The build ID is a special section in the executable file (and in other
+ELF binary files that @value{GDBN} may consider).  This section is
+often named @code{.note.gnu.build-id}, but that name is not mandatory.
+It contains unique identification for the built files---the ID remains
+the same across multiple builds of the same build tree.  The default
+algorithm SHA1 produces 160 bits (40 hexadecimal characters) of the
+content for the build ID string.  The same section with an identical
+value is present in the original built binary with symbols, in its
+stripped variant, and in the separate debugging information file.
+
+The debugging information file itself should be an ordinary
+executable, containing a full set of linker symbols, sections, and
+debugging information.  The sections of the debugging information file
+should have the same names, addresses, and sizes as the original file,
+but they need not contain any data---much like a @code{.bss} section
+in an ordinary executable.
+
+The @sc{gnu} binary utilities (Binutils) package includes the
+ at samp{objcopy} utility that can produce
+the separated executable / debugging information file pairs using the
+following commands:
+
+ at smallexample
+ at kbd{objcopy --only-keep-debug foo foo.debug}
+ at kbd{strip -g foo}
+ at end smallexample
+
+ at noindent
+These commands remove the debugging
+information from the executable file @file{foo} and place it in the file
+ at file{foo.debug}.  You can use the first, second or both methods to link the
+two files:
+
+ at itemize @bullet
+ at item
+The debug link method needs the following additional command to also leave
+behind a debug link in @file{foo}:
+
+ at smallexample
+ at kbd{objcopy --add-gnu-debuglink=foo.debug foo}
+ at end smallexample
+
+Ulrich Drepper's @file{elfutils} package, starting with version 0.53, contains
+a version of the @code{strip} command such that the command @kbd{strip foo -f
+foo.debug} has the same functionality as the two @code{objcopy} commands and
+the @code{ln -s} command above, together.
+
+ at item
+Build ID gets embedded into the main executable using @code{ld --build-id} or
+the @value{NGCC} counterpart @code{gcc -Wl,--build-id}.  Build ID support plus
+compatibility fixes for debug files separation are present in @sc{gnu} binary
+utilities (Binutils) package since version 2.18.
+ at end itemize
+
+ at noindent
+
+ at cindex CRC algorithm definition
+The CRC used in @code{.gnu_debuglink} is the CRC-32 defined in
+IEEE 802.3 using the polynomial:
+
+ at c TexInfo requires naked braces for multi-digit exponents for Tex
+ at c output, but this causes HTML output to barf. HTML has to be set using
+ at c raw commands. So we end up having to specify this equation in 2
+ at c different ways!
+ at ifhtml
+ at display
+ at html
+ <em>x</em><sup>32</sup> + <em>x</em><sup>26</sup> + <em>x</em><sup>23</sup> + <em>x</em><sup>22</sup> + <em>x</em><sup>16</sup> + <em>x</em><sup>12</sup> + <em>x</em><sup>11</sup>
+ + <em>x</em><sup>10</sup> + <em>x</em><sup>8</sup> + <em>x</em><sup>7</sup> + <em>x</em><sup>5</sup> + <em>x</em><sup>4</sup> + <em>x</em><sup>2</sup> + <em>x</em> + 1
+ at end html
+ at end display
+ at end ifhtml
+ at ifnothtml
+ at display
+ @math{x^{32} + x^{26} + x^{23} + x^{22} + x^{16} + x^{12} + x^{11}}
+ @math{+ x^{10} + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1}
+ at end display
+ at end ifnothtml
+
+The function is computed byte at a time, taking the least
+significant bit of each byte first.  The initial pattern
+ at code{0xffffffff} is used, to ensure leading zeros affect the CRC and
+the final result is inverted to ensure trailing zeros also affect the
+CRC.
+
+ at emph{Note:} This is the same CRC polynomial as used in handling the
+ at dfn{Remote Serial Protocol} @code{qCRC} packet (@pxref{Remote Protocol,
+, @value{GDBN} Remote Serial Protocol}).  However in the
+case of the Remote Serial Protocol, the CRC is computed @emph{most}
+significant bit first, and the result is not inverted, so trailing
+zeros have no effect on the CRC value.
+
+To complete the description, we show below the code of the function
+which produces the CRC used in @code{.gnu_debuglink}.  Inverting the
+initially supplied @code{crc} argument means that an initial call to
+this function passing in zero will start computing the CRC using
+ at code{0xffffffff}.
+
+ at kindex gnu_debuglink_crc32
+ at smallexample
+unsigned long
+gnu_debuglink_crc32 (unsigned long crc,
+                     unsigned char *buf, size_t len)
+@{
+  static const unsigned long crc32_table[256] =
+    @{
+      0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
+      0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
+      0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
+      0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
+      0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
+      0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+      0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
+      0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
+      0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
+      0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
+      0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
+      0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+      0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
+      0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
+      0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
+      0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+      0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
+      0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+      0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
+      0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
+      0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
+      0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
+      0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
+      0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+      0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
+      0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
+      0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
+      0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
+      0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
+      0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+      0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
+      0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+      0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
+      0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
+      0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
+      0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+      0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
+      0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
+      0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
+      0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+      0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
+      0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+      0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
+      0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
+      0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
+      0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
+      0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
+      0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+      0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
+      0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
+      0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
+      0x2d02ef8d
+    @};
+  unsigned char *end;
+
+  crc = ~crc & 0xffffffff;
+  for (end = buf + len; buf < end; ++buf)
+    crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8);
+  return ~crc & 0xffffffff;
+@}
+ at end smallexample
+
+ at noindent
+This computation does not apply to the ``build ID'' method.
+
+
+ at node Index Files
+ at section Index Files Speed Up @value{GDBN}
+ at cindex index files
+ at cindex @samp{.gdb_index} section
+
+When @value{GDBN} finds a symbol file, it scans the symbols in the
+file in order to construct an internal symbol table.  This lets most
+ at value{GDBN} operations work quickly---at the cost of a delay early
+on.  For large programs, this delay can be quite lengthy, so
+ at value{GDBN} provides a way to build an index, which speeds up
+startup.
+
+The index is stored as a section in the symbol file.  @value{GDBN} can
+write the index to a file, then you can put it into the symbol file
+using @command{objcopy}.
+
+To create an index file, use the @code{save gdb-index} command:
+
+ at table @code
+ at item save gdb-index @var{directory}
+ at kindex save gdb-index
+Create an index file for each symbol file currently known by
+ at value{GDBN}.  Each file is named after its corresponding symbol file,
+with @samp{.gdb-index} appended, and is written into the given
+ at var{directory}.
+ at end table
+
+Once you have created an index file you can merge it into your symbol
+file, here named @file{symfile}, using @command{objcopy}:
+
+ at smallexample
+$ objcopy --add-section .gdb_index=symfile.gdb-index \
+    --set-section-flags .gdb_index=readonly symfile symfile
+ at end smallexample
+
+ at value{GDBN} will normally ignore older versions of @file{.gdb_index}
+sections that have been deprecated.  Usually they are deprecated because
+they are missing a new feature or have performance issues.
+To tell @value{GDBN} to use a deprecated index section anyway
+specify @code{set use-deprecated-index-sections on}.
+The default is @code{off}.
+This can speed up startup, but may result in some functionality being lost.
+ at xref{Index Section Format}.
+
+ at emph{Warning:} Setting @code{use-deprecated-index-sections} to @code{on}
+must be done before gdb reads the file.  The following will not work:
+
+ at smallexample
+$ gdb -ex "set use-deprecated-index-sections on" <program>
+ at end smallexample
+
+Instead you must do, for example,
+
+ at smallexample
+$ gdb -iex "set use-deprecated-index-sections on" <program>
+ at end smallexample
+
+There are currently some limitation on indices.  They only work when
+for DWARF debugging information, not stabs.  And, they do not
+currently work for programs using Ada.
+
+ at node Symbol Errors
+ at section Errors Reading Symbol Files
+
+While reading a symbol file, @value{GDBN} occasionally encounters problems,
+such as symbol types it does not recognize, or known bugs in compiler
+output.  By default, @value{GDBN} does not notify you of such problems, since
+they are relatively common and primarily of interest to people
+debugging compilers.  If you are interested in seeing information
+about ill-constructed symbol tables, you can either ask @value{GDBN} to print
+only one message about each such type of problem, no matter how many
+times the problem occurs; or you can ask @value{GDBN} to print more messages,
+to see how many times the problems occur, with the @code{set
+complaints} command (@pxref{Messages/Warnings, ,Optional Warnings and
+Messages}).
+
+The messages currently printed, and their meanings, include:
+
+ at table @code
+ at item inner block not inside outer block in @var{symbol}
+
+The symbol information shows where symbol scopes begin and end
+(such as at the start of a function or a block of statements).  This
+error indicates that an inner scope block is not fully contained
+in its outer scope blocks.
+
+ at value{GDBN} circumvents the problem by treating the inner block as if it had
+the same scope as the outer block.  In the error message, @var{symbol}
+may be shown as ``@code{(don't know)}'' if the outer block is not a
+function.
+
+ at item block at @var{address} out of order
+
+The symbol information for symbol scope blocks should occur in
+order of increasing addresses.  This error indicates that it does not
+do so.
+
+ at value{GDBN} does not circumvent this problem, and has trouble
+locating symbols in the source file whose symbols it is reading.  (You
+can often determine what source file is affected by specifying
+ at code{set verbose on}.  @xref{Messages/Warnings, ,Optional Warnings and
+Messages}.)
+
+ at item bad block start address patched
+
+The symbol information for a symbol scope block has a start address
+smaller than the address of the preceding source line.  This is known
+to occur in the SunOS 4.1.1 (and earlier) C compiler.
+
+ at value{GDBN} circumvents the problem by treating the symbol scope block as
+starting on the previous source line.
+
+ at item bad string table offset in symbol @var{n}
+
+ at cindex foo
+Symbol number @var{n} contains a pointer into the string table which is
+larger than the size of the string table.
+
+ at value{GDBN} circumvents the problem by considering the symbol to have the
+name @code{foo}, which may cause other problems if many symbols end up
+with this name.
+
+ at item unknown symbol type @code{0x at var{nn}}
+
+The symbol information contains new data types that @value{GDBN} does
+not yet know how to read.  @code{0x at var{nn}} is the symbol type of the
+uncomprehended information, in hexadecimal.
+
+ at value{GDBN} circumvents the error by ignoring this symbol information.
+This usually allows you to debug your program, though certain symbols
+are not accessible.  If you encounter such a problem and feel like
+debugging it, you can debug @code{@value{GDBP}} with itself, breakpoint
+on @code{complain}, then go up to the function @code{read_dbx_symtab}
+and examine @code{*bufp} to see the symbol.
+
+ at item stub type has NULL name
+
+ at value{GDBN} could not find the full definition for a struct or class.
+
+ at item const/volatile indicator missing (ok if using g++ v1.x), got at dots{}
+The symbol information for a C at t{++} member function is missing some
+information that recent versions of the compiler should have output for
+it.
+
+ at item info mismatch between compiler and debugger
+
+ at value{GDBN} could not parse a type specification output by the compiler.
+
+ at end table
+
+ at node Data Files
+ at section GDB Data Files
+
+ at cindex prefix for data files
+ at value{GDBN} will sometimes read an auxiliary data file.  These files
+are kept in a directory known as the @dfn{data directory}.
+
+You can set the data directory's name, and view the name @value{GDBN}
+is currently using.
+
+ at table @code
+ at kindex set data-directory
+ at item set data-directory @var{directory}
+Set the directory which @value{GDBN} searches for auxiliary data files
+to @var{directory}.
+
+ at kindex show data-directory
+ at item show data-directory
+Show the directory @value{GDBN} searches for auxiliary data files.
+ at end table
+
+ at cindex default data directory
+ at cindex @samp{--with-gdb-datadir}
+You can set the default data directory by using the configure-time
+ at samp{--with-gdb-datadir} option.  If the data directory is inside
+ at value{GDBN}'s configured binary prefix (set with @samp{--prefix} or
+ at samp{--exec-prefix}), then the default data directory will be updated
+automatically if the installed @value{GDBN} is moved to a new
+location.
+
+The data directory may also be specified with the
+ at code{--data-directory} command line option.
+ at xref{Mode Options}.
+
+ at node Targets
+ at chapter Specifying a Debugging Target
+
+ at cindex debugging target
+A @dfn{target} is the execution environment occupied by your program.
+
+Often, @value{GDBN} runs in the same host environment as your program;
+in that case, the debugging target is specified as a side effect when
+you use the @code{file} or @code{core} commands.  When you need more
+flexibility---for example, running @value{GDBN} on a physically separate
+host, or controlling a standalone system over a serial port or a
+realtime system over a TCP/IP connection---you can use the @code{target}
+command to specify one of the target types configured for @value{GDBN}
+(@pxref{Target Commands, ,Commands for Managing Targets}).
+
+ at cindex target architecture
+It is possible to build @value{GDBN} for several different @dfn{target
+architectures}.  When @value{GDBN} is built like that, you can choose
+one of the available architectures with the @kbd{set architecture}
+command.
+
+ at table @code
+ at kindex set architecture
+ at kindex show architecture
+ at item set architecture @var{arch}
+This command sets the current target architecture to @var{arch}.  The
+value of @var{arch} can be @code{"auto"}, in addition to one of the
+supported architectures.
+
+ at item show architecture
+Show the current target architecture.
+
+ at item set processor
+ at itemx processor
+ at kindex set processor
+ at kindex show processor
+These are alias commands for, respectively, @code{set architecture}
+and @code{show architecture}.
+ at end table
+
+ at menu
+* Active Targets::              Active targets
+* Target Commands::             Commands for managing targets
+* Byte Order::                  Choosing target byte order
+ at end menu
+
+ at node Active Targets
+ at section Active Targets
+
+ at cindex stacking targets
+ at cindex active targets
+ at cindex multiple targets
+
+There are multiple classes of targets such as: processes, executable files or
+recording sessions.  Core files belong to the process class, making core file
+and process mutually exclusive.  Otherwise, @value{GDBN} can work concurrently
+on multiple active targets, one in each class.  This allows you to (for
+example) start a process and inspect its activity, while still having access to
+the executable file after the process finishes.  Or if you start process
+recording (@pxref{Reverse Execution}) and @code{reverse-step} there, you are
+presented a virtual layer of the recording target, while the process target
+remains stopped at the chronologically last point of the process execution.
+
+Use the @code{core-file} and @code{exec-file} commands to select a new core
+file or executable target (@pxref{Files, ,Commands to Specify Files}).  To
+specify as a target a process that is already running, use the @code{attach}
+command (@pxref{Attach, ,Debugging an Already-running Process}).
+
+ at node Target Commands
+ at section Commands for Managing Targets
+
+ at table @code
+ at item target @var{type} @var{parameters}
+Connects the @value{GDBN} host environment to a target machine or
+process.  A target is typically a protocol for talking to debugging
+facilities.  You use the argument @var{type} to specify the type or
+protocol of the target machine.
+
+Further @var{parameters} are interpreted by the target protocol, but
+typically include things like device names or host names to connect
+with, process numbers, and baud rates.
+
+The @code{target} command does not repeat if you press @key{RET} again
+after executing the command.
+
+ at kindex help target
+ at item help target
+Displays the names of all targets available.  To display targets
+currently selected, use either @code{info target} or @code{info files}
+(@pxref{Files, ,Commands to Specify Files}).
+
+ at item help target @var{name}
+Describe a particular target, including any parameters necessary to
+select it.
+
+ at kindex set gnutarget
+ at item set gnutarget @var{args}
+ at value{GDBN} uses its own library BFD to read your files.  @value{GDBN}
+knows whether it is reading an @dfn{executable},
+a @dfn{core}, or a @dfn{.o} file; however, you can specify the file format
+with the @code{set gnutarget} command.  Unlike most @code{target} commands,
+with @code{gnutarget} the @code{target} refers to a program, not a machine.
+
+ at quotation
+ at emph{Warning:} To specify a file format with @code{set gnutarget},
+you must know the actual BFD name.
+ at end quotation
+
+ at noindent
+ at xref{Files, , Commands to Specify Files}.
+
+ at kindex show gnutarget
+ at item show gnutarget
+Use the @code{show gnutarget} command to display what file format
+ at code{gnutarget} is set to read.  If you have not set @code{gnutarget},
+ at value{GDBN} will determine the file format for each file automatically,
+and @code{show gnutarget} displays @samp{The current BDF target is "auto"}.
+ at end table
+
+ at cindex common targets
+Here are some common targets (available, or not, depending on the GDB
+configuration):
+
+ at table @code
+ at kindex target
+ at item target exec @var{program}
+ at cindex executable file target
+An executable file.  @samp{target exec @var{program}} is the same as
+ at samp{exec-file @var{program}}.
+
+ at item target core @var{filename}
+ at cindex core dump file target
+A core dump file.  @samp{target core @var{filename}} is the same as
+ at samp{core-file @var{filename}}.
+
+ at item target remote @var{medium}
+ at cindex remote target
+A remote system connected to @value{GDBN} via a serial line or network
+connection.  This command tells @value{GDBN} to use its own remote
+protocol over @var{medium} for debugging.  @xref{Remote Debugging}.
+
+For example, if you have a board connected to @file{/dev/ttya} on the
+machine running @value{GDBN}, you could say:
+
+ at smallexample
+target remote /dev/ttya
+ at end smallexample
+
+ at code{target remote} supports the @code{load} command.  This is only
+useful if you have some other way of getting the stub to the target
+system, and you can put it somewhere in memory where it won't get
+clobbered by the download.
+
+ at item target sim @r{[}@var{simargs}@r{]} @dots{}
+ at cindex built-in simulator target
+Builtin CPU simulator.  @value{GDBN} includes simulators for most architectures.
+In general,
+ at smallexample
+        target sim
+        load
+        run
+ at end smallexample
+ at noindent
+works; however, you cannot assume that a specific memory map, device
+drivers, or even basic I/O is available, although some simulators do
+provide these.  For info about any processor-specific simulator details,
+see the appropriate section in @ref{Embedded Processors, ,Embedded
+Processors}.
+
+ at end table
+
+Some configurations may include these targets as well:
+
+ at table @code
+
+ at item target nrom @var{dev}
+ at cindex NetROM ROM emulator target
+NetROM ROM emulator.  This target only supports downloading.
+
+ at end table
+
+Different targets are available on different configurations of @value{GDBN};
+your configuration may have more or fewer targets.
+
+Many remote targets require you to download the executable's code once
+you've successfully established a connection.  You may wish to control
+various aspects of this process.
+
+ at table @code
+
+ at item set hash
+ at kindex set hash at r{, for remote monitors}
+ at cindex hash mark while downloading
+This command controls whether a hash mark @samp{#} is displayed while
+downloading a file to the remote monitor.  If on, a hash mark is
+displayed after each S-record is successfully downloaded to the
+monitor.
+
+ at item show hash
+ at kindex show hash at r{, for remote monitors}
+Show the current status of displaying the hash mark.
+
+ at item set debug monitor
+ at kindex set debug monitor
+ at cindex display remote monitor communications
+Enable or disable display of communications messages between
+ at value{GDBN} and the remote monitor.
+
+ at item show debug monitor
+ at kindex show debug monitor
+Show the current status of displaying communications between
+ at value{GDBN} and the remote monitor.
+ at end table
+
+ at table @code
+
+ at kindex load @var{filename}
+ at item load @var{filename}
+ at anchor{load}
+Depending on what remote debugging facilities are configured into
+ at value{GDBN}, the @code{load} command may be available.  Where it exists, it
+is meant to make @var{filename} (an executable) available for debugging
+on the remote system---by downloading, or dynamic linking, for example.
+ at code{load} also records the @var{filename} symbol table in @value{GDBN}, like
+the @code{add-symbol-file} command.
+
+If your @value{GDBN} does not have a @code{load} command, attempting to
+execute it gets the error message ``@code{You can't do that when your
+target is @dots{}}''
+
+The file is loaded at whatever address is specified in the executable.
+For some object file formats, you can specify the load address when you
+link the program; for other formats, like a.out, the object file format
+specifies a fixed address.
+ at c FIXME! This would be a good place for an xref to the GNU linker doc.
+
+Depending on the remote side capabilities, @value{GDBN} may be able to
+load programs into flash memory.
+
+ at code{load} does not repeat if you press @key{RET} again after using it.
+ at end table
+
+ at node Byte Order
+ at section Choosing Target Byte Order
+
+ at cindex choosing target byte order
+ at cindex target byte order
+
+Some types of processors, such as the @acronym{MIPS}, PowerPC, and Renesas SH,
+offer the ability to run either big-endian or little-endian byte
+orders.  Usually the executable or symbol will include a bit to
+designate the endian-ness, and you will not need to worry about
+which to use.  However, you may still find it useful to adjust
+ at value{GDBN}'s idea of processor endian-ness manually.
+
+ at table @code
+ at kindex set endian
+ at item set endian big
+Instruct @value{GDBN} to assume the target is big-endian.
+
+ at item set endian little
+Instruct @value{GDBN} to assume the target is little-endian.
+
+ at item set endian auto
+Instruct @value{GDBN} to use the byte order associated with the
+executable.
+
+ at item show endian
+Display @value{GDBN}'s current idea of the target byte order.
+
+ at end table
+
+Note that these commands merely adjust interpretation of symbolic
+data on the host, and that they have absolutely no effect on the
+target system.
+
+
+ at node Remote Debugging
+ at chapter Debugging Remote Programs
+ at cindex remote debugging
+
+If you are trying to debug a program running on a machine that cannot run
+ at value{GDBN} in the usual way, it is often useful to use remote debugging.
+For example, you might use remote debugging on an operating system kernel,
+or on a small system which does not have a general purpose operating system
+powerful enough to run a full-featured debugger.
+
+Some configurations of @value{GDBN} have special serial or TCP/IP interfaces
+to make this work with particular debugging targets.  In addition,
+ at value{GDBN} comes with a generic serial protocol (specific to @value{GDBN},
+but not specific to any particular target system) which you can use if you
+write the remote stubs---the code that runs on the remote system to
+communicate with @value{GDBN}.
+
+Other remote targets may be available in your
+configuration of @value{GDBN}; use @code{help target} to list them.
+
+ at menu
+* Connecting::                  Connecting to a remote target
+* File Transfer::               Sending files to a remote system
+* Server::	                Using the gdbserver program
+* Remote Configuration::        Remote configuration
+* Remote Stub::                 Implementing a remote stub
+ at end menu
+
+ at node Connecting
+ at section Connecting to a Remote Target
+
+On the @value{GDBN} host machine, you will need an unstripped copy of
+your program, since @value{GDBN} needs symbol and debugging information.
+Start up @value{GDBN} as usual, using the name of the local copy of your
+program as the first argument.
+
+ at cindex @code{target remote}
+ at value{GDBN} can communicate with the target over a serial line, or
+over an @acronym{IP} network using @acronym{TCP} or @acronym{UDP}.  In
+each case, @value{GDBN} uses the same protocol for debugging your
+program; only the medium carrying the debugging packets varies.  The
+ at code{target remote} command establishes a connection to the target.
+Its arguments indicate which medium to use:
+
+ at table @code
+
+ at item target remote @var{serial-device}
+ at cindex serial line, @code{target remote}
+Use @var{serial-device} to communicate with the target.  For example,
+to use a serial line connected to the device named @file{/dev/ttyb}:
+
+ at smallexample
+target remote /dev/ttyb
+ at end smallexample
+
+If you're using a serial line, you may want to give @value{GDBN} the
+ at w{@samp{--baud}} option, or use the @code{set remotebaud} command
+(@pxref{Remote Configuration, set remotebaud}) before the
+ at code{target} command.
+
+ at item target remote @code{@var{host}:@var{port}}
+ at itemx target remote @code{tcp:@var{host}:@var{port}}
+ at cindex @acronym{TCP} port, @code{target remote}
+Debug using a @acronym{TCP} connection to @var{port} on @var{host}.
+The @var{host} may be either a host name or a numeric @acronym{IP}
+address; @var{port} must be a decimal number.  The @var{host} could be
+the target machine itself, if it is directly connected to the net, or
+it might be a terminal server which in turn has a serial line to the
+target.
+
+For example, to connect to port 2828 on a terminal server named
+ at code{manyfarms}:
+
+ at smallexample
+target remote manyfarms:2828
+ at end smallexample
+
+If your remote target is actually running on the same machine as your
+debugger session (e.g.@: a simulator for your target running on the
+same host), you can omit the hostname.  For example, to connect to
+port 1234 on your local machine:
+
+ at smallexample
+target remote :1234
+ at end smallexample
+ at noindent
+
+Note that the colon is still required here.
+
+ at item target remote @code{udp:@var{host}:@var{port}}
+ at cindex @acronym{UDP} port, @code{target remote}
+Debug using @acronym{UDP} packets to @var{port} on @var{host}.  For example, to
+connect to @acronym{UDP} port 2828 on a terminal server named @code{manyfarms}:
+
+ at smallexample
+target remote udp:manyfarms:2828
+ at end smallexample
+
+When using a @acronym{UDP} connection for remote debugging, you should
+keep in mind that the `U' stands for ``Unreliable''.  @acronym{UDP}
+can silently drop packets on busy or unreliable networks, which will
+cause havoc with your debugging session.
+
+ at item target remote | @var{command}
+ at cindex pipe, @code{target remote} to
+Run @var{command} in the background and communicate with it using a
+pipe.  The @var{command} is a shell command, to be parsed and expanded
+by the system's command shell, @code{/bin/sh}; it should expect remote
+protocol packets on its standard input, and send replies on its
+standard output.  You could use this to run a stand-alone simulator
+that speaks the remote debugging protocol, to make net connections
+using programs like @code{ssh}, or for other similar tricks.
+
+If @var{command} closes its standard output (perhaps by exiting),
+ at value{GDBN} will try to send it a @code{SIGTERM} signal.  (If the
+program has already exited, this will have no effect.)
+
+ at end table
+
+Once the connection has been established, you can use all the usual
+commands to examine and change data.  The remote program is already
+running; you can use @kbd{step} and @kbd{continue}, and you do not
+need to use @kbd{run}.
+
+ at cindex interrupting remote programs
+ at cindex remote programs, interrupting
+Whenever @value{GDBN} is waiting for the remote program, if you type the
+interrupt character (often @kbd{Ctrl-c}), @value{GDBN} attempts to stop the
+program.  This may or may not succeed, depending in part on the hardware
+and the serial drivers the remote system uses.  If you type the
+interrupt character once again, @value{GDBN} displays this prompt:
+
+ at smallexample
+Interrupted while waiting for the program.
+Give up (and stop debugging it)?  (y or n)
+ at end smallexample
+
+If you type @kbd{y}, @value{GDBN} abandons the remote debugging session.
+(If you decide you want to try again later, you can use @samp{target
+remote} again to connect once more.)  If you type @kbd{n}, @value{GDBN}
+goes back to waiting.
+
+ at table @code
+ at kindex detach (remote)
+ at item detach
+When you have finished debugging the remote program, you can use the
+ at code{detach} command to release it from @value{GDBN} control.
+Detaching from the target normally resumes its execution, but the results
+will depend on your particular remote stub.  After the @code{detach}
+command, @value{GDBN} is free to connect to another target.
+
+ at kindex disconnect
+ at item disconnect
+The @code{disconnect} command behaves like @code{detach}, except that
+the target is generally not resumed.  It will wait for @value{GDBN}
+(this instance or another one) to connect and continue debugging.  After
+the @code{disconnect} command, @value{GDBN} is again free to connect to
+another target.
+
+ at cindex send command to remote monitor
+ at cindex extend @value{GDBN} for remote targets
+ at cindex add new commands for external monitor
+ at kindex monitor
+ at item monitor @var{cmd}
+This command allows you to send arbitrary commands directly to the
+remote monitor.  Since @value{GDBN} doesn't care about the commands it
+sends like this, this command is the way to extend @value{GDBN}---you
+can add new commands that only the external monitor will understand
+and implement.
+ at end table
+
+ at node File Transfer
+ at section Sending files to a remote system
+ at cindex remote target, file transfer
+ at cindex file transfer
+ at cindex sending files to remote systems
+
+Some remote targets offer the ability to transfer files over the same
+connection used to communicate with @value{GDBN}.  This is convenient
+for targets accessible through other means, e.g.@: @sc{gnu}/Linux systems
+running @code{gdbserver} over a network interface.  For other targets,
+e.g.@: embedded devices with only a single serial port, this may be
+the only way to upload or download files.
+
+Not all remote targets support these commands.
+
+ at table @code
+ at kindex remote put
+ at item remote put @var{hostfile} @var{targetfile}
+Copy file @var{hostfile} from the host system (the machine running
+ at value{GDBN}) to @var{targetfile} on the target system.
+
+ at kindex remote get
+ at item remote get @var{targetfile} @var{hostfile}
+Copy file @var{targetfile} from the target system to @var{hostfile}
+on the host system.
+
+ at kindex remote delete
+ at item remote delete @var{targetfile}
+Delete @var{targetfile} from the target system.
+
+ at end table
+
+ at node Server
+ at section Using the @code{gdbserver} Program
+
+ at kindex gdbserver
+ at cindex remote connection without stubs
+ at code{gdbserver} is a control program for Unix-like systems, which
+allows you to connect your program with a remote @value{GDBN} via
+ at code{target remote}---but without linking in the usual debugging stub.
+
+ at code{gdbserver} is not a complete replacement for the debugging stubs,
+because it requires essentially the same operating-system facilities
+that @value{GDBN} itself does.  In fact, a system that can run
+ at code{gdbserver} to connect to a remote @value{GDBN} could also run
+ at value{GDBN} locally!  @code{gdbserver} is sometimes useful nevertheless,
+because it is a much smaller program than @value{GDBN} itself.  It is
+also easier to port than all of @value{GDBN}, so you may be able to get
+started more quickly on a new system by using @code{gdbserver}.
+Finally, if you develop code for real-time systems, you may find that
+the tradeoffs involved in real-time operation make it more convenient to
+do as much development work as possible on another system, for example
+by cross-compiling.  You can use @code{gdbserver} to make a similar
+choice for debugging.
+
+ at value{GDBN} and @code{gdbserver} communicate via either a serial line
+or a TCP connection, using the standard @value{GDBN} remote serial
+protocol.
+
+ at quotation
+ at emph{Warning:} @code{gdbserver} does not have any built-in security.
+Do not run @code{gdbserver} connected to any public network; a
+ at value{GDBN} connection to @code{gdbserver} provides access to the
+target system with the same privileges as the user running
+ at code{gdbserver}.
+ at end quotation
+
+ at subsection Running @code{gdbserver}
+ at cindex arguments, to @code{gdbserver}
+ at cindex @code{gdbserver}, command-line arguments
+
+Run @code{gdbserver} on the target system.  You need a copy of the
+program you want to debug, including any libraries it requires.
+ at code{gdbserver} does not need your program's symbol table, so you can
+strip the program if necessary to save space.  @value{GDBN} on the host
+system does all the symbol handling.
+
+To use the server, you must tell it how to communicate with @value{GDBN};
+the name of your program; and the arguments for your program.  The usual
+syntax is:
+
+ at smallexample
+target> gdbserver @var{comm} @var{program} [ @var{args} @dots{} ]
+ at end smallexample
+
+ at var{comm} is either a device name (to use a serial line), or a TCP
+hostname and portnumber, or @code{-} or @code{stdio} to use
+stdin/stdout of @code{gdbserver}.
+For example, to debug Emacs with the argument
+ at samp{foo.txt} and communicate with @value{GDBN} over the serial port
+ at file{/dev/com1}:
+
+ at smallexample
+target> gdbserver /dev/com1 emacs foo.txt
+ at end smallexample
+
+ at code{gdbserver} waits passively for the host @value{GDBN} to communicate
+with it.
+
+To use a TCP connection instead of a serial line:
+
+ at smallexample
+target> gdbserver host:2345 emacs foo.txt
+ at end smallexample
+
+The only difference from the previous example is the first argument,
+specifying that you are communicating with the host @value{GDBN} via
+TCP.  The @samp{host:2345} argument means that @code{gdbserver} is to
+expect a TCP connection from machine @samp{host} to local TCP port 2345.
+(Currently, the @samp{host} part is ignored.)  You can choose any number
+you want for the port number as long as it does not conflict with any
+TCP ports already in use on the target system (for example, @code{23} is
+reserved for @code{telnet}). at footnote{If you choose a port number that
+conflicts with another service, @code{gdbserver} prints an error message
+and exits.}  You must use the same port number with the host @value{GDBN}
+ at code{target remote} command.
+
+The @code{stdio} connection is useful when starting @code{gdbserver}
+with ssh:
+
+ at smallexample
+(gdb) target remote | ssh -T hostname gdbserver - hello
+ at end smallexample
+
+The @samp{-T} option to ssh is provided because we don't need a remote pty,
+and we don't want escape-character handling.  Ssh does this by default when
+a command is provided, the flag is provided to make it explicit.
+You could elide it if you want to.
+
+Programs started with stdio-connected gdbserver have @file{/dev/null} for
+ at code{stdin}, and @code{stdout}, at code{stderr} are sent back to gdb for
+display through a pipe connected to gdbserver.
+Both @code{stdout} and @code{stderr} use the same pipe.
+
+ at subsubsection Attaching to a Running Program
+ at cindex attach to a program, @code{gdbserver}
+ at cindex @option{--attach}, @code{gdbserver} option
+
+On some targets, @code{gdbserver} can also attach to running programs.
+This is accomplished via the @code{--attach} argument.  The syntax is:
+
+ at smallexample
+target> gdbserver --attach @var{comm} @var{pid}
+ at end smallexample
+
+ at var{pid} is the process ID of a currently running process.  It isn't necessary
+to point @code{gdbserver} at a binary for the running process.
+
+ at pindex pidof
+You can debug processes by name instead of process ID if your target has the
+ at code{pidof} utility:
+
+ at smallexample
+target> gdbserver --attach @var{comm} `pidof @var{program}`
+ at end smallexample
+
+In case more than one copy of @var{program} is running, or @var{program}
+has multiple threads, most versions of @code{pidof} support the
+ at code{-s} option to only return the first process ID.
+
+ at subsubsection Multi-Process Mode for @code{gdbserver}
+ at cindex @code{gdbserver}, multiple processes
+ at cindex multiple processes with @code{gdbserver}
+
+When you connect to @code{gdbserver} using @code{target remote},
+ at code{gdbserver} debugs the specified program only once.  When the
+program exits, or you detach from it, @value{GDBN} closes the connection
+and @code{gdbserver} exits.
+
+If you connect using @kbd{target extended-remote}, @code{gdbserver}
+enters multi-process mode.  When the debugged program exits, or you
+detach from it, @value{GDBN} stays connected to @code{gdbserver} even
+though no program is running.  The @code{run} and @code{attach}
+commands instruct @code{gdbserver} to run or attach to a new program.
+The @code{run} command uses @code{set remote exec-file} (@pxref{set
+remote exec-file}) to select the program to run.  Command line
+arguments are supported, except for wildcard expansion and I/O
+redirection (@pxref{Arguments}).
+
+ at cindex @option{--multi}, @code{gdbserver} option
+To start @code{gdbserver} without supplying an initial command to run
+or process ID to attach, use the @option{--multi} command line option.
+Then you can connect using @kbd{target extended-remote} and start
+the program you want to debug.
+
+In multi-process mode @code{gdbserver} does not automatically exit unless you
+use the option @option{--once}.  You can terminate it by using
+ at code{monitor exit} (@pxref{Monitor Commands for gdbserver}).  Note that the
+conditions under which @code{gdbserver} terminates depend on how @value{GDBN}
+connects to it (@kbd{target remote} or @kbd{target extended-remote}).  The
+ at option{--multi} option to @code{gdbserver} has no influence on that.
+
+ at subsubsection TCP port allocation lifecycle of @code{gdbserver}
+
+This section applies only when @code{gdbserver} is run to listen on a TCP port.
+
+ at code{gdbserver} normally terminates after all of its debugged processes have
+terminated in @kbd{target remote} mode.  On the other hand, for @kbd{target
+extended-remote}, @code{gdbserver} stays running even with no processes left.
+ at value{GDBN} normally terminates the spawned debugged process on its exit,
+which normally also terminates @code{gdbserver} in the @kbd{target remote}
+mode.  Therefore, when the connection drops unexpectedly, and @value{GDBN}
+cannot ask @code{gdbserver} to kill its debugged processes, @code{gdbserver}
+stays running even in the @kbd{target remote} mode.
+
+When @code{gdbserver} stays running, @value{GDBN} can connect to it again later.
+Such reconnecting is useful for features like @ref{disconnected tracing}.  For
+completeness, at most one @value{GDBN} can be connected at a time.
+
+ at cindex @option{--once}, @code{gdbserver} option
+By default, @code{gdbserver} keeps the listening TCP port open, so that
+additional connections are possible.  However, if you start @code{gdbserver}
+with the @option{--once} option, it will stop listening for any further
+connection attempts after connecting to the first @value{GDBN} session.  This
+means no further connections to @code{gdbserver} will be possible after the
+first one.  It also means @code{gdbserver} will terminate after the first
+connection with remote @value{GDBN} has closed, even for unexpectedly closed
+connections and even in the @kbd{target extended-remote} mode.  The
+ at option{--once} option allows reusing the same port number for connecting to
+multiple instances of @code{gdbserver} running on the same host, since each
+instance closes its port after the first connection.
+
+ at subsubsection Other Command-Line Arguments for @code{gdbserver}
+
+ at cindex @option{--debug}, @code{gdbserver} option
+The @option{--debug} option tells @code{gdbserver} to display extra
+status information about the debugging process.
+ at cindex @option{--remote-debug}, @code{gdbserver} option
+The @option{--remote-debug} option tells @code{gdbserver} to display
+remote protocol debug output.  These options are intended for
+ at code{gdbserver} development and for bug reports to the developers.
+
+ at cindex @option{--wrapper}, @code{gdbserver} option
+The @option{--wrapper} option specifies a wrapper to launch programs
+for debugging.  The option should be followed by the name of the
+wrapper, then any command-line arguments to pass to the wrapper, then
+ at kbd{--} indicating the end of the wrapper arguments.
+
+ at code{gdbserver} runs the specified wrapper program with a combined
+command line including the wrapper arguments, then the name of the
+program to debug, then any arguments to the program.  The wrapper
+runs until it executes your program, and then @value{GDBN} gains control.
+
+You can use any program that eventually calls @code{execve} with
+its arguments as a wrapper.  Several standard Unix utilities do
+this, e.g.@: @code{env} and @code{nohup}.  Any Unix shell script ending
+with @code{exec "$@@"} will also work.
+
+For example, you can use @code{env} to pass an environment variable to
+the debugged program, without setting the variable in @code{gdbserver}'s
+environment:
+
+ at smallexample
+$ gdbserver --wrapper env LD_PRELOAD=libtest.so -- :2222 ./testprog
+ at end smallexample
+
+ at subsection Connecting to @code{gdbserver}
+
+Run @value{GDBN} on the host system.
+
+First make sure you have the necessary symbol files.  Load symbols for
+your application using the @code{file} command before you connect.  Use
+ at code{set sysroot} to locate target libraries (unless your @value{GDBN}
+was compiled with the correct sysroot using @code{--with-sysroot}).
+
+The symbol file and target libraries must exactly match the executable
+and libraries on the target, with one exception: the files on the host
+system should not be stripped, even if the files on the target system
+are.  Mismatched or missing files will lead to confusing results
+during debugging.  On @sc{gnu}/Linux targets, mismatched or missing
+files may also prevent @code{gdbserver} from debugging multi-threaded
+programs.
+
+Connect to your target (@pxref{Connecting,,Connecting to a Remote Target}).
+For TCP connections, you must start up @code{gdbserver} prior to using
+the @code{target remote} command.  Otherwise you may get an error whose
+text depends on the host system, but which usually looks something like
+ at samp{Connection refused}.  Don't use the @code{load}
+command in @value{GDBN} when using @code{gdbserver}, since the program is
+already on the target.
+
+ at subsection Monitor Commands for @code{gdbserver}
+ at cindex monitor commands, for @code{gdbserver}
+ at anchor{Monitor Commands for gdbserver}
+
+During a @value{GDBN} session using @code{gdbserver}, you can use the
+ at code{monitor} command to send special requests to @code{gdbserver}.
+Here are the available commands.
+
+ at table @code
+ at item monitor help
+List the available monitor commands.
+
+ at item monitor set debug 0
+ at itemx monitor set debug 1
+Disable or enable general debugging messages.
+
+ at item monitor set remote-debug 0
+ at itemx monitor set remote-debug 1
+Disable or enable specific debugging messages associated with the remote
+protocol (@pxref{Remote Protocol}).
+
+ at item monitor set libthread-db-search-path [PATH]
+ at cindex gdbserver, search path for @code{libthread_db}
+When this command is issued, @var{path} is a colon-separated list of
+directories to search for @code{libthread_db} (@pxref{Threads,,set
+libthread-db-search-path}).  If you omit @var{path},
+ at samp{libthread-db-search-path} will be reset to its default value.
+
+The special entry @samp{$pdir} for @samp{libthread-db-search-path} is
+not supported in @code{gdbserver}.
+
+ at item monitor exit
+Tell gdbserver to exit immediately.  This command should be followed by
+ at code{disconnect} to close the debugging session.  @code{gdbserver} will
+detach from any attached processes and kill any processes it created.
+Use @code{monitor exit} to terminate @code{gdbserver} at the end
+of a multi-process mode debug session.
+
+ at end table
+
+ at subsection Tracepoints support in @code{gdbserver}
+ at cindex tracepoints support in @code{gdbserver}
+
+On some targets, @code{gdbserver} supports tracepoints, fast
+tracepoints and static tracepoints.
+
+For fast or static tracepoints to work, a special library called the
+ at dfn{in-process agent} (IPA), must be loaded in the inferior process.
+This library is built and distributed as an integral part of
+ at code{gdbserver}.  In addition, support for static tracepoints
+requires building the in-process agent library with static tracepoints
+support.  At present, the UST (LTTng Userspace Tracer,
+ at url{http://lttng.org/ust}) tracing engine is supported.  This support
+is automatically available if UST development headers are found in the
+standard include path when @code{gdbserver} is built, or if
+ at code{gdbserver} was explicitly configured using @option{--with-ust}
+to point at such headers.  You can explicitly disable the support
+using @option{--with-ust=no}.
+
+There are several ways to load the in-process agent in your program:
+
+ at table @code
+ at item Specifying it as dependency at link time
+
+You can link your program dynamically with the in-process agent
+library.  On most systems, this is accomplished by adding
+ at code{-linproctrace} to the link command.
+
+ at item Using the system's preloading mechanisms
+
+You can force loading the in-process agent at startup time by using
+your system's support for preloading shared libraries.  Many Unixes
+support the concept of preloading user defined libraries.  In most
+cases, you do that by specifying @code{LD_PRELOAD=libinproctrace.so}
+in the environment.  See also the description of @code{gdbserver}'s
+ at option{--wrapper} command line option.
+
+ at item Using @value{GDBN} to force loading the agent at run time
+
+On some systems, you can force the inferior to load a shared library,
+by calling a dynamic loader function in the inferior that takes care
+of dynamically looking up and loading a shared library.  On most Unix
+systems, the function is @code{dlopen}.  You'll use the @code{call}
+command for that.  For example:
+
+ at smallexample
+(@value{GDBP}) call dlopen ("libinproctrace.so", ...)
+ at end smallexample
+
+Note that on most Unix systems, for the @code{dlopen} function to be
+available, the program needs to be linked with @code{-ldl}.
+ at end table
+
+On systems that have a userspace dynamic loader, like most Unix
+systems, when you connect to @code{gdbserver} using @code{target
+remote}, you'll find that the program is stopped at the dynamic
+loader's entry point, and no shared library has been loaded in the
+program's address space yet, including the in-process agent.  In that
+case, before being able to use any of the fast or static tracepoints
+features, you need to let the loader run and load the shared
+libraries.  The simplest way to do that is to run the program to the
+main procedure.  E.g., if debugging a C or C at t{++} program, start
+ at code{gdbserver} like so:
+
+ at smallexample
+$ gdbserver :9999 myprogram
+ at end smallexample
+
+Start GDB and connect to @code{gdbserver} like so, and run to main:
+
+ at smallexample
+$ gdb myprogram
+(@value{GDBP}) target remote myhost:9999
+0x00007f215893ba60 in ?? () from /lib64/ld-linux-x86-64.so.2
+(@value{GDBP}) b main
+(@value{GDBP}) continue
+ at end smallexample
+
+The in-process tracing agent library should now be loaded into the
+process; you can confirm it with the @code{info sharedlibrary}
+command, which will list @file{libinproctrace.so} as loaded in the
+process.  You are now ready to install fast tracepoints, list static
+tracepoint markers, probe static tracepoints markers, and start
+tracing.
+
+ at node Remote Configuration
+ at section Remote Configuration
+
+ at kindex set remote
+ at kindex show remote
+This section documents the configuration options available when
+debugging remote programs.  For the options related to the File I/O
+extensions of the remote protocol, see @ref{system,
+system-call-allowed}.
+
+ at table @code
+ at item set remoteaddresssize @var{bits}
+ at cindex address size for remote targets
+ at cindex bits in remote address
+Set the maximum size of address in a memory packet to the specified
+number of bits.  @value{GDBN} will mask off the address bits above
+that number, when it passes addresses to the remote target.  The
+default value is the number of bits in the target's address.
+
+ at item show remoteaddresssize
+Show the current value of remote address size in bits.
+
+ at item set remotebaud @var{n}
+ at cindex baud rate for remote targets
+Set the baud rate for the remote serial I/O to @var{n} baud.  The
+value is used to set the speed of the serial port used for debugging
+remote targets.
+
+ at item show remotebaud
+Show the current speed of the remote connection.
+
+ at item set remotebreak
+ at cindex interrupt remote programs
+ at cindex BREAK signal instead of Ctrl-C
+ at anchor{set remotebreak}
+If set to on, @value{GDBN} sends a @code{BREAK} signal to the remote
+when you type @kbd{Ctrl-c} to interrupt the program running
+on the remote.  If set to off, @value{GDBN} sends the @samp{Ctrl-C}
+character instead.  The default is off, since most remote systems
+expect to see @samp{Ctrl-C} as the interrupt signal.
+
+ at item show remotebreak
+Show whether @value{GDBN} sends @code{BREAK} or @samp{Ctrl-C} to
+interrupt the remote program.
+
+ at item set remoteflow on
+ at itemx set remoteflow off
+ at kindex set remoteflow
+Enable or disable hardware flow control (@code{RTS}/@code{CTS})
+on the serial port used to communicate to the remote target.
+
+ at item show remoteflow
+ at kindex show remoteflow
+Show the current setting of hardware flow control.
+
+ at item set remotelogbase @var{base}
+Set the base (a.k.a.@: radix) of logging serial protocol
+communications to @var{base}.  Supported values of @var{base} are:
+ at code{ascii}, @code{octal}, and @code{hex}.  The default is
+ at code{ascii}.
+
+ at item show remotelogbase
+Show the current setting of the radix for logging remote serial
+protocol.
+
+ at item set remotelogfile @var{file}
+ at cindex record serial communications on file
+Record remote serial communications on the named @var{file}.  The
+default is not to record at all.
+
+ at item show remotelogfile.
+Show the current setting  of the file name on which to record the
+serial communications.
+
+ at item set remotetimeout @var{num}
+ at cindex timeout for serial communications
+ at cindex remote timeout
+Set the timeout limit to wait for the remote target to respond to
+ at var{num} seconds.  The default is 2 seconds.
+
+ at item show remotetimeout
+Show the current number of seconds to wait for the remote target
+responses.
+
+ at cindex limit hardware breakpoints and watchpoints
+ at cindex remote target, limit break- and watchpoints
+ at anchor{set remote hardware-watchpoint-limit}
+ at anchor{set remote hardware-breakpoint-limit}
+ at item set remote hardware-watchpoint-limit @var{limit}
+ at itemx set remote hardware-breakpoint-limit @var{limit}
+Restrict @value{GDBN} to using @var{limit} remote hardware breakpoint or
+watchpoints.  A limit of -1, the default, is treated as unlimited.
+
+ at cindex limit hardware watchpoints length
+ at cindex remote target, limit watchpoints length
+ at anchor{set remote hardware-watchpoint-length-limit}
+ at item set remote hardware-watchpoint-length-limit @var{limit}
+Restrict @value{GDBN} to using @var{limit} bytes for the maximum length of
+a remote hardware watchpoint.  A limit of -1, the default, is treated
+as unlimited.
+
+ at item show remote hardware-watchpoint-length-limit
+Show the current limit (in bytes) of the maximum length of
+a remote hardware watchpoint.
+
+ at item set remote exec-file @var{filename}
+ at itemx show remote exec-file
+ at anchor{set remote exec-file}
+ at cindex executable file, for remote target
+Select the file used for @code{run} with @code{target
+extended-remote}.  This should be set to a filename valid on the
+target system.  If it is not set, the target will use a default
+filename (e.g.@: the last program run).
+
+ at item set remote interrupt-sequence
+ at cindex interrupt remote programs
+ at cindex select Ctrl-C, BREAK or BREAK-g
+Allow the user to select one of @samp{Ctrl-C}, a @code{BREAK} or
+ at samp{BREAK-g} as the
+sequence to the remote target in order to interrupt the execution.
+ at samp{Ctrl-C} is a default.  Some system prefers @code{BREAK} which
+is high level of serial line for some certain time.
+Linux kernel prefers @samp{BREAK-g}, a.k.a Magic SysRq g.
+It is @code{BREAK} signal followed by character @code{g}.
+
+ at item show interrupt-sequence
+Show which of @samp{Ctrl-C}, @code{BREAK} or @code{BREAK-g}
+is sent by @value{GDBN} to interrupt the remote program.
+ at code{BREAK-g} is BREAK signal followed by @code{g} and
+also known as Magic SysRq g.
+
+ at item set remote interrupt-on-connect
+ at cindex send interrupt-sequence on start
+Specify whether interrupt-sequence is sent to remote target when
+ at value{GDBN} connects to it.  This is mostly needed when you debug
+Linux kernel.  Linux kernel expects @code{BREAK} followed by @code{g}
+which is known as Magic SysRq g in order to connect @value{GDBN}.
+
+ at item show interrupt-on-connect
+Show whether interrupt-sequence is sent
+to remote target when @value{GDBN} connects to it.
+
+ at kindex set tcp
+ at kindex show tcp
+ at item set tcp auto-retry on
+ at cindex auto-retry, for remote TCP target
+Enable auto-retry for remote TCP connections.  This is useful if the remote
+debugging agent is launched in parallel with @value{GDBN}; there is a race
+condition because the agent may not become ready to accept the connection
+before @value{GDBN} attempts to connect.  When auto-retry is
+enabled, if the initial attempt to connect fails, @value{GDBN} reattempts
+to establish the connection using the timeout specified by 
+ at code{set tcp connect-timeout}.
+
+ at item set tcp auto-retry off
+Do not auto-retry failed TCP connections.
+
+ at item show tcp auto-retry
+Show the current auto-retry setting.
+
+ at item set tcp connect-timeout @var{seconds}
+ at cindex connection timeout, for remote TCP target
+ at cindex timeout, for remote target connection
+Set the timeout for establishing a TCP connection to the remote target to
+ at var{seconds}.  The timeout affects both polling to retry failed connections 
+(enabled by @code{set tcp auto-retry on}) and waiting for connections
+that are merely slow to complete, and represents an approximate cumulative
+value.
+
+ at item show tcp connect-timeout
+Show the current connection timeout setting.
+ at end table
+
+ at cindex remote packets, enabling and disabling
+The @value{GDBN} remote protocol autodetects the packets supported by
+your debugging stub.  If you need to override the autodetection, you
+can use these commands to enable or disable individual packets.  Each
+packet can be set to @samp{on} (the remote target supports this
+packet), @samp{off} (the remote target does not support this packet),
+or @samp{auto} (detect remote target support for this packet).  They
+all default to @samp{auto}.  For more information about each packet,
+see @ref{Remote Protocol}.
+
+During normal use, you should not have to use any of these commands.
+If you do, that may be a bug in your remote debugging stub, or a bug
+in @value{GDBN}.  You may want to report the problem to the
+ at value{GDBN} developers.
+
+For each packet @var{name}, the command to enable or disable the
+packet is @code{set remote @var{name}-packet}.  The available settings
+are:
+
+ at multitable @columnfractions 0.28 0.32 0.25
+ at item Command Name
+ at tab Remote Packet
+ at tab Related Features
+
+ at item @code{fetch-register}
+ at tab @code{p}
+ at tab @code{info registers}
+
+ at item @code{set-register}
+ at tab @code{P}
+ at tab @code{set}
+
+ at item @code{binary-download}
+ at tab @code{X}
+ at tab @code{load}, @code{set}
+
+ at item @code{read-aux-vector}
+ at tab @code{qXfer:auxv:read}
+ at tab @code{info auxv}
+
+ at item @code{symbol-lookup}
+ at tab @code{qSymbol}
+ at tab Detecting multiple threads
+
+ at item @code{attach}
+ at tab @code{vAttach}
+ at tab @code{attach}
+
+ at item @code{verbose-resume}
+ at tab @code{vCont}
+ at tab Stepping or resuming multiple threads
+
+ at item @code{run}
+ at tab @code{vRun}
+ at tab @code{run}
+
+ at item @code{software-breakpoint}
+ at tab @code{Z0}
+ at tab @code{break}
+
+ at item @code{hardware-breakpoint}
+ at tab @code{Z1}
+ at tab @code{hbreak}
+
+ at item @code{write-watchpoint}
+ at tab @code{Z2}
+ at tab @code{watch}
+
+ at item @code{read-watchpoint}
+ at tab @code{Z3}
+ at tab @code{rwatch}
+
+ at item @code{access-watchpoint}
+ at tab @code{Z4}
+ at tab @code{awatch}
+
+ at item @code{target-features}
+ at tab @code{qXfer:features:read}
+ at tab @code{set architecture}
+
+ at item @code{library-info}
+ at tab @code{qXfer:libraries:read}
+ at tab @code{info sharedlibrary}
+
+ at item @code{memory-map}
+ at tab @code{qXfer:memory-map:read}
+ at tab @code{info mem}
+
+ at item @code{read-sdata-object}
+ at tab @code{qXfer:sdata:read}
+ at tab @code{print $_sdata}
+
+ at item @code{read-spu-object}
+ at tab @code{qXfer:spu:read}
+ at tab @code{info spu}
+
+ at item @code{write-spu-object}
+ at tab @code{qXfer:spu:write}
+ at tab @code{info spu}
+
+ at item @code{read-siginfo-object}
+ at tab @code{qXfer:siginfo:read}
+ at tab @code{print $_siginfo}
+
+ at item @code{write-siginfo-object}
+ at tab @code{qXfer:siginfo:write}
+ at tab @code{set $_siginfo}
+
+ at item @code{threads}
+ at tab @code{qXfer:threads:read}
+ at tab @code{info threads}
+
+ at item @code{get-thread-local-@*storage-address}
+ at tab @code{qGetTLSAddr}
+ at tab Displaying @code{__thread} variables
+
+ at item @code{get-thread-information-block-address}
+ at tab @code{qGetTIBAddr}
+ at tab Display MS-Windows Thread Information Block.
+
+ at item @code{search-memory}
+ at tab @code{qSearch:memory}
+ at tab @code{find}
+
+ at item @code{supported-packets}
+ at tab @code{qSupported}
+ at tab Remote communications parameters
+
+ at item @code{pass-signals}
+ at tab @code{QPassSignals}
+ at tab @code{handle @var{signal}}
+
+ at item @code{program-signals}
+ at tab @code{QProgramSignals}
+ at tab @code{handle @var{signal}}
+
+ at item @code{hostio-close-packet}
+ at tab @code{vFile:close}
+ at tab @code{remote get}, @code{remote put}
+
+ at item @code{hostio-open-packet}
+ at tab @code{vFile:open}
+ at tab @code{remote get}, @code{remote put}
+
+ at item @code{hostio-pread-packet}
+ at tab @code{vFile:pread}
+ at tab @code{remote get}, @code{remote put}
+
+ at item @code{hostio-pwrite-packet}
+ at tab @code{vFile:pwrite}
+ at tab @code{remote get}, @code{remote put}
+
+ at item @code{hostio-unlink-packet}
+ at tab @code{vFile:unlink}
+ at tab @code{remote delete}
+
+ at item @code{hostio-readlink-packet}
+ at tab @code{vFile:readlink}
+ at tab Host I/O
+
+ at item @code{noack-packet}
+ at tab @code{QStartNoAckMode}
+ at tab Packet acknowledgment
+
+ at item @code{osdata}
+ at tab @code{qXfer:osdata:read}
+ at tab @code{info os}
+
+ at item @code{query-attached}
+ at tab @code{qAttached}
+ at tab Querying remote process attach state.
+
+ at item @code{traceframe-info}
+ at tab @code{qXfer:traceframe-info:read}
+ at tab Traceframe info
+
+ at item @code{install-in-trace}
+ at tab @code{InstallInTrace}
+ at tab Install tracepoint in tracing
+
+ at item @code{disable-randomization}
+ at tab @code{QDisableRandomization}
+ at tab @code{set disable-randomization}
+
+ at item @code{conditional-breakpoints-packet}
+ at tab @code{Z0 and Z1}
+ at tab @code{Support for target-side breakpoint condition evaluation}
+ at end multitable
+
+ at node Remote Stub
+ at section Implementing a Remote Stub
+
+ at cindex debugging stub, example
+ at cindex remote stub, example
+ at cindex stub example, remote debugging
+The stub files provided with @value{GDBN} implement the target side of the
+communication protocol, and the @value{GDBN} side is implemented in the
+ at value{GDBN} source file @file{remote.c}.  Normally, you can simply allow
+these subroutines to communicate, and ignore the details.  (If you're
+implementing your own stub file, you can still ignore the details: start
+with one of the existing stub files.  @file{sparc-stub.c} is the best
+organized, and therefore the easiest to read.)
+
+ at cindex remote serial debugging, overview
+To debug a program running on another machine (the debugging
+ at dfn{target} machine), you must first arrange for all the usual
+prerequisites for the program to run by itself.  For example, for a C
+program, you need:
+
+ at enumerate
+ at item
+A startup routine to set up the C runtime environment; these usually
+have a name like @file{crt0}.  The startup routine may be supplied by
+your hardware supplier, or you may have to write your own.
+
+ at item
+A C subroutine library to support your program's
+subroutine calls, notably managing input and output.
+
+ at item
+A way of getting your program to the other machine---for example, a
+download program.  These are often supplied by the hardware
+manufacturer, but you may have to write your own from hardware
+documentation.
+ at end enumerate
+
+The next step is to arrange for your program to use a serial port to
+communicate with the machine where @value{GDBN} is running (the @dfn{host}
+machine).  In general terms, the scheme looks like this:
+
+ at table @emph
+ at item On the host,
+ at value{GDBN} already understands how to use this protocol; when everything
+else is set up, you can simply use the @samp{target remote} command
+(@pxref{Targets,,Specifying a Debugging Target}).
+
+ at item On the target,
+you must link with your program a few special-purpose subroutines that
+implement the @value{GDBN} remote serial protocol.  The file containing these
+subroutines is called  a @dfn{debugging stub}.
+
+On certain remote targets, you can use an auxiliary program
+ at code{gdbserver} instead of linking a stub into your program.
+ at xref{Server,,Using the @code{gdbserver} Program}, for details.
+ at end table
+
+The debugging stub is specific to the architecture of the remote
+machine; for example, use @file{sparc-stub.c} to debug programs on
+ at sc{sparc} boards.
+
+ at cindex remote serial stub list
+These working remote stubs are distributed with @value{GDBN}:
+
+ at table @code
+
+ at item i386-stub.c
+ at cindex @file{i386-stub.c}
+ at cindex Intel
+ at cindex i386
+For Intel 386 and compatible architectures.
+
+ at item m68k-stub.c
+ at cindex @file{m68k-stub.c}
+ at cindex Motorola 680x0
+ at cindex m680x0
+For Motorola 680x0 architectures.
+
+ at item sh-stub.c
+ at cindex @file{sh-stub.c}
+ at cindex Renesas
+ at cindex SH
+For Renesas SH architectures.
+
+ at item sparc-stub.c
+ at cindex @file{sparc-stub.c}
+ at cindex Sparc
+For @sc{sparc} architectures.
+
+ at item sparcl-stub.c
+ at cindex @file{sparcl-stub.c}
+ at cindex Fujitsu
+ at cindex SparcLite
+For Fujitsu @sc{sparclite} architectures.
+
+ at end table
+
+The @file{README} file in the @value{GDBN} distribution may list other
+recently added stubs.
+
+ at menu
+* Stub Contents::       What the stub can do for you
+* Bootstrapping::       What you must do for the stub
+* Debug Session::       Putting it all together
+ at end menu
+
+ at node Stub Contents
+ at subsection What the Stub Can Do for You
+
+ at cindex remote serial stub
+The debugging stub for your architecture supplies these three
+subroutines:
+
+ at table @code
+ at item set_debug_traps
+ at findex set_debug_traps
+ at cindex remote serial stub, initialization
+This routine arranges for @code{handle_exception} to run when your
+program stops.  You must call this subroutine explicitly in your
+program's startup code.
+
+ at item handle_exception
+ at findex handle_exception
+ at cindex remote serial stub, main routine
+This is the central workhorse, but your program never calls it
+explicitly---the setup code arranges for @code{handle_exception} to
+run when a trap is triggered.
+
+ at code{handle_exception} takes control when your program stops during
+execution (for example, on a breakpoint), and mediates communications
+with @value{GDBN} on the host machine.  This is where the communications
+protocol is implemented; @code{handle_exception} acts as the @value{GDBN}
+representative on the target machine.  It begins by sending summary
+information on the state of your program, then continues to execute,
+retrieving and transmitting any information @value{GDBN} needs, until you
+execute a @value{GDBN} command that makes your program resume; at that point,
+ at code{handle_exception} returns control to your own code on the target
+machine.
+
+ at item breakpoint
+ at cindex @code{breakpoint} subroutine, remote
+Use this auxiliary subroutine to make your program contain a
+breakpoint.  Depending on the particular situation, this may be the only
+way for @value{GDBN} to get control.  For instance, if your target
+machine has some sort of interrupt button, you won't need to call this;
+pressing the interrupt button transfers control to
+ at code{handle_exception}---in effect, to @value{GDBN}.  On some machines,
+simply receiving characters on the serial port may also trigger a trap;
+again, in that situation, you don't need to call @code{breakpoint} from
+your own program---simply running @samp{target remote} from the host
+ at value{GDBN} session gets control.
+
+Call @code{breakpoint} if none of these is true, or if you simply want
+to make certain your program stops at a predetermined point for the
+start of your debugging session.
+ at end table
+
+ at node Bootstrapping
+ at subsection What You Must Do for the Stub
+
+ at cindex remote stub, support routines
+The debugging stubs that come with @value{GDBN} are set up for a particular
+chip architecture, but they have no information about the rest of your
+debugging target machine.
+
+First of all you need to tell the stub how to communicate with the
+serial port.
+
+ at table @code
+ at item int getDebugChar()
+ at findex getDebugChar
+Write this subroutine to read a single character from the serial port.
+It may be identical to @code{getchar} for your target system; a
+different name is used to allow you to distinguish the two if you wish.
+
+ at item void putDebugChar(int)
+ at findex putDebugChar
+Write this subroutine to write a single character to the serial port.
+It may be identical to @code{putchar} for your target system; a
+different name is used to allow you to distinguish the two if you wish.
+ at end table
+
+ at cindex control C, and remote debugging
+ at cindex interrupting remote targets
+If you want @value{GDBN} to be able to stop your program while it is
+running, you need to use an interrupt-driven serial driver, and arrange
+for it to stop when it receives a @code{^C} (@samp{\003}, the control-C
+character).  That is the character which @value{GDBN} uses to tell the
+remote system to stop.
+
+Getting the debugging target to return the proper status to @value{GDBN}
+probably requires changes to the standard stub; one quick and dirty way
+is to just execute a breakpoint instruction (the ``dirty'' part is that
+ at value{GDBN} reports a @code{SIGTRAP} instead of a @code{SIGINT}).
+
+Other routines you need to supply are:
+
+ at table @code
+ at item void exceptionHandler (int @var{exception_number}, void *@var{exception_address})
+ at findex exceptionHandler
+Write this function to install @var{exception_address} in the exception
+handling tables.  You need to do this because the stub does not have any
+way of knowing what the exception handling tables on your target system
+are like (for example, the processor's table might be in @sc{rom},
+containing entries which point to a table in @sc{ram}).
+ at var{exception_number} is the exception number which should be changed;
+its meaning is architecture-dependent (for example, different numbers
+might represent divide by zero, misaligned access, etc).  When this
+exception occurs, control should be transferred directly to
+ at var{exception_address}, and the processor state (stack, registers,
+and so on) should be just as it is when a processor exception occurs.  So if
+you want to use a jump instruction to reach @var{exception_address}, it
+should be a simple jump, not a jump to subroutine.
+
+For the 386, @var{exception_address} should be installed as an interrupt
+gate so that interrupts are masked while the handler runs.  The gate
+should be at privilege level 0 (the most privileged level).  The
+ at sc{sparc} and 68k stubs are able to mask interrupts themselves without
+help from @code{exceptionHandler}.
+
+ at item void flush_i_cache()
+ at findex flush_i_cache
+On @sc{sparc} and @sc{sparclite} only, write this subroutine to flush the
+instruction cache, if any, on your target machine.  If there is no
+instruction cache, this subroutine may be a no-op.
+
+On target machines that have instruction caches, @value{GDBN} requires this
+function to make certain that the state of your program is stable.
+ at end table
+
+ at noindent
+You must also make sure this library routine is available:
+
+ at table @code
+ at item void *memset(void *, int, int)
+ at findex memset
+This is the standard library function @code{memset} that sets an area of
+memory to a known value.  If you have one of the free versions of
+ at code{libc.a}, @code{memset} can be found there; otherwise, you must
+either obtain it from your hardware manufacturer, or write your own.
+ at end table
+
+If you do not use the GNU C compiler, you may need other standard
+library subroutines as well; this varies from one stub to another,
+but in general the stubs are likely to use any of the common library
+subroutines which @code{@value{NGCC}} generates as inline code.
+
+
+ at node Debug Session
+ at subsection Putting it All Together
+
+ at cindex remote serial debugging summary
+In summary, when your program is ready to debug, you must follow these
+steps.
+
+ at enumerate
+ at item
+Make sure you have defined the supporting low-level routines
+(@pxref{Bootstrapping,,What You Must Do for the Stub}):
+ at display
+ at code{getDebugChar}, @code{putDebugChar},
+ at code{flush_i_cache}, @code{memset}, @code{exceptionHandler}.
+ at end display
+
+ at item
+Insert these lines in your program's startup code, before the main
+procedure is called:
+
+ at smallexample
+set_debug_traps();
+breakpoint();
+ at end smallexample
+
+On some machines, when a breakpoint trap is raised, the hardware
+automatically makes the PC point to the instruction after the
+breakpoint.  If your machine doesn't do that, you may need to adjust
+ at code{handle_exception} to arrange for it to return to the instruction
+after the breakpoint on this first invocation, so that your program
+doesn't keep hitting the initial breakpoint instead of making
+progress.
+
+ at item
+For the 680x0 stub only, you need to provide a variable called
+ at code{exceptionHook}.  Normally you just use:
+
+ at smallexample
+void (*exceptionHook)() = 0;
+ at end smallexample
+
+ at noindent
+but if before calling @code{set_debug_traps}, you set it to point to a
+function in your program, that function is called when
+ at code{@value{GDBN}} continues after stopping on a trap (for example, bus
+error).  The function indicated by @code{exceptionHook} is called with
+one parameter: an @code{int} which is the exception number.
+
+ at item
+Compile and link together: your program, the @value{GDBN} debugging stub for
+your target architecture, and the supporting subroutines.
+
+ at item
+Make sure you have a serial connection between your target machine and
+the @value{GDBN} host, and identify the serial port on the host.
+
+ at item
+ at c The "remote" target now provides a `load' command, so we should
+ at c document that.  FIXME.
+Download your program to your target machine (or get it there by
+whatever means the manufacturer provides), and start it.
+
+ at item
+Start @value{GDBN} on the host, and connect to the target
+(@pxref{Connecting,,Connecting to a Remote Target}).
+
+ at end enumerate
+
+ at node Configurations
+ at chapter Configuration-Specific Information
+
+While nearly all @value{GDBN} commands are available for all native and
+cross versions of the debugger, there are some exceptions.  This chapter
+describes things that are only available in certain configurations.
+
+There are three major categories of configurations: native
+configurations, where the host and target are the same, embedded
+operating system configurations, which are usually the same for several
+different processor architectures, and bare embedded processors, which
+are quite different from each other.
+
+ at menu
+* Native::
+* Embedded OS::
+* Embedded Processors::
+* Architectures::
+ at end menu
+
+ at node Native
+ at section Native
+
+This section describes details specific to particular native
+configurations.
+
+ at menu
+* HP-UX::                       HP-UX
+* BSD libkvm Interface::	Debugging BSD kernel memory images
+* SVR4 Process Information::    SVR4 process information
+* DJGPP Native::                Features specific to the DJGPP port
+* Cygwin Native::		Features specific to the Cygwin port
+* Hurd Native::                 Features specific to @sc{gnu} Hurd
+* Neutrino::                    Features specific to QNX Neutrino
+* Darwin::			Features specific to Darwin
+ at end menu
+
+ at node HP-UX
+ at subsection HP-UX
+
+On HP-UX systems, if you refer to a function or variable name that
+begins with a dollar sign, @value{GDBN} searches for a user or system
+name first, before it searches for a convenience variable.
+
+
+ at node BSD libkvm Interface
+ at subsection BSD libkvm Interface
+
+ at cindex libkvm
+ at cindex kernel memory image
+ at cindex kernel crash dump
+
+BSD-derived systems (FreeBSD/NetBSD/OpenBSD) have a kernel memory
+interface that provides a uniform interface for accessing kernel virtual
+memory images, including live systems and crash dumps.  @value{GDBN}
+uses this interface to allow you to debug live kernels and kernel crash
+dumps on many native BSD configurations.  This is implemented as a
+special @code{kvm} debugging target.  For debugging a live system, load
+the currently running kernel into @value{GDBN} and connect to the
+ at code{kvm} target:
+
+ at smallexample
+(@value{GDBP}) @b{target kvm}
+ at end smallexample
+
+For debugging crash dumps, provide the file name of the crash dump as an
+argument:
+
+ at smallexample
+(@value{GDBP}) @b{target kvm /var/crash/bsd.0}
+ at end smallexample
+
+Once connected to the @code{kvm} target, the following commands are
+available:
+
+ at table @code
+ at kindex kvm
+ at item kvm pcb
+Set current context from the @dfn{Process Control Block} (PCB) address.
+
+ at item kvm proc
+Set current context from proc address.  This command isn't available on
+modern FreeBSD systems.
+ at end table
+
+ at node SVR4 Process Information
+ at subsection SVR4 Process Information
+ at cindex /proc
+ at cindex examine process image
+ at cindex process info via @file{/proc}
+
+Many versions of SVR4 and compatible systems provide a facility called
+ at samp{/proc} that can be used to examine the image of a running
+process using file-system subroutines.  If @value{GDBN} is configured
+for an operating system with this facility, the command @code{info
+proc} is available to report information about the process running
+your program, or about any process running on your system.  @code{info
+proc} works only on SVR4 systems that include the @code{procfs} code.
+This includes, as of this writing, @sc{gnu}/Linux, OSF/1 (Digital
+Unix), Solaris, Irix, and Unixware, but not HP-UX, for example.
+
+ at table @code
+ at kindex info proc
+ at cindex process ID
+ at item info proc
+ at itemx info proc @var{process-id}
+Summarize available information about any running process.  If a
+process ID is specified by @var{process-id}, display information about
+that process; otherwise display information about the program being
+debugged.  The summary includes the debugged process ID, the command
+line used to invoke it, its current working directory, and its
+executable file's absolute file name.
+
+On some systems, @var{process-id} can be of the form
+ at samp{[@var{pid}]/@var{tid}} which specifies a certain thread ID
+within a process.  If the optional @var{pid} part is missing, it means
+a thread from the process being debugged (the leading @samp{/} still
+needs to be present, or else @value{GDBN} will interpret the number as
+a process ID rather than a thread ID).
+
+ at item info proc mappings
+ at cindex memory address space mappings
+Report the memory address space ranges accessible in the program, with
+information on whether the process has read, write, or execute access
+rights to each range.  On @sc{gnu}/Linux systems, each memory range
+includes the object file which is mapped to that range, instead of the
+memory access rights to that range.
+
+ at item info proc stat
+ at itemx info proc status
+ at cindex process detailed status information
+These subcommands are specific to @sc{gnu}/Linux systems.  They show
+the process-related information, including the user ID and group ID;
+how many threads are there in the process; its virtual memory usage;
+the signals that are pending, blocked, and ignored; its TTY; its
+consumption of system and user time; its stack size; its @samp{nice}
+value; etc.  For more information, see the @samp{proc} man page
+(type @kbd{man 5 proc} from your shell prompt).
+
+ at item info proc all
+Show all the information about the process described under all of the
+above @code{info proc} subcommands.
+
+ at ignore
+ at comment These sub-options of 'info proc' were not included when
+ at comment procfs.c was re-written.  Keep their descriptions around
+ at comment against the day when someone finds the time to put them back in.
+ at kindex info proc times
+ at item info proc times
+Starting time, user CPU time, and system CPU time for your program and
+its children.
+
+ at kindex info proc id
+ at item info proc id
+Report on the process IDs related to your program: its own process ID,
+the ID of its parent, the process group ID, and the session ID.
+ at end ignore
+
+ at item set procfs-trace
+ at kindex set procfs-trace
+ at cindex @code{procfs} API calls
+This command enables and disables tracing of @code{procfs} API calls.
+
+ at item show procfs-trace
+ at kindex show procfs-trace
+Show the current state of @code{procfs} API call tracing.
+
+ at item set procfs-file @var{file}
+ at kindex set procfs-file
+Tell @value{GDBN} to write @code{procfs} API trace to the named
+ at var{file}.  @value{GDBN} appends the trace info to the previous
+contents of the file.  The default is to display the trace on the
+standard output.
+
+ at item show procfs-file
+ at kindex show procfs-file
+Show the file to which @code{procfs} API trace is written.
+
+ at item proc-trace-entry
+ at itemx proc-trace-exit
+ at itemx proc-untrace-entry
+ at itemx proc-untrace-exit
+ at kindex proc-trace-entry
+ at kindex proc-trace-exit
+ at kindex proc-untrace-entry
+ at kindex proc-untrace-exit
+These commands enable and disable tracing of entries into and exits
+from the @code{syscall} interface.
+
+ at item info pidlist
+ at kindex info pidlist
+ at cindex process list, QNX Neutrino
+For QNX Neutrino only, this command displays the list of all the
+processes and all the threads within each process.
+
+ at item info meminfo
+ at kindex info meminfo
+ at cindex mapinfo list, QNX Neutrino
+For QNX Neutrino only, this command displays the list of all mapinfos.
+ at end table
+
+ at node DJGPP Native
+ at subsection Features for Debugging @sc{djgpp} Programs
+ at cindex @sc{djgpp} debugging
+ at cindex native @sc{djgpp} debugging
+ at cindex MS-DOS-specific commands
+
+ at cindex DPMI
+ at sc{djgpp} is a port of the @sc{gnu} development tools to MS-DOS and
+MS-Windows.  @sc{djgpp} programs are 32-bit protected-mode programs
+that use the @dfn{DPMI} (DOS Protected-Mode Interface) API to run on
+top of real-mode DOS systems and their emulations.
+
+ at value{GDBN} supports native debugging of @sc{djgpp} programs, and
+defines a few commands specific to the @sc{djgpp} port.  This
+subsection describes those commands.
+
+ at table @code
+ at kindex info dos
+ at item info dos
+This is a prefix of @sc{djgpp}-specific commands which print
+information about the target system and important OS structures.
+
+ at kindex sysinfo
+ at cindex MS-DOS system info
+ at cindex free memory information (MS-DOS)
+ at item info dos sysinfo
+This command displays assorted information about the underlying
+platform: the CPU type and features, the OS version and flavor, the
+DPMI version, and the available conventional and DPMI memory.
+
+ at cindex GDT
+ at cindex LDT
+ at cindex IDT
+ at cindex segment descriptor tables
+ at cindex descriptor tables display
+ at item info dos gdt
+ at itemx info dos ldt
+ at itemx info dos idt
+These 3 commands display entries from, respectively, Global, Local,
+and Interrupt Descriptor Tables (GDT, LDT, and IDT).  The descriptor
+tables are data structures which store a descriptor for each segment
+that is currently in use.  The segment's selector is an index into a
+descriptor table; the table entry for that index holds the
+descriptor's base address and limit, and its attributes and access
+rights.
+
+A typical @sc{djgpp} program uses 3 segments: a code segment, a data
+segment (used for both data and the stack), and a DOS segment (which
+allows access to DOS/BIOS data structures and absolute addresses in
+conventional memory).  However, the DPMI host will usually define
+additional segments in order to support the DPMI environment.
+
+ at cindex garbled pointers
+These commands allow to display entries from the descriptor tables.
+Without an argument, all entries from the specified table are
+displayed.  An argument, which should be an integer expression, means
+display a single entry whose index is given by the argument.  For
+example, here's a convenient way to display information about the
+debugged program's data segment:
+
+ at smallexample
+ at exdent @code{(@value{GDBP}) info dos ldt $ds}
+ at exdent @code{0x13f: base=0x11970000 limit=0x0009ffff 32-Bit Data (Read/Write, Exp-up)}
+ at end smallexample
+
+ at noindent
+This comes in handy when you want to see whether a pointer is outside
+the data segment's limit (i.e.@: @dfn{garbled}).
+
+ at cindex page tables display (MS-DOS)
+ at item info dos pde
+ at itemx info dos pte
+These two commands display entries from, respectively, the Page
+Directory and the Page Tables.  Page Directories and Page Tables are
+data structures which control how virtual memory addresses are mapped
+into physical addresses.  A Page Table includes an entry for every
+page of memory that is mapped into the program's address space; there
+may be several Page Tables, each one holding up to 4096 entries.  A
+Page Directory has up to 4096 entries, one each for every Page Table
+that is currently in use.
+
+Without an argument, @kbd{info dos pde} displays the entire Page
+Directory, and @kbd{info dos pte} displays all the entries in all of
+the Page Tables.  An argument, an integer expression, given to the
+ at kbd{info dos pde} command means display only that entry from the Page
+Directory table.  An argument given to the @kbd{info dos pte} command
+means display entries from a single Page Table, the one pointed to by
+the specified entry in the Page Directory.
+
+ at cindex direct memory access (DMA) on MS-DOS
+These commands are useful when your program uses @dfn{DMA} (Direct
+Memory Access), which needs physical addresses to program the DMA
+controller.
+
+These commands are supported only with some DPMI servers.
+
+ at cindex physical address from linear address
+ at item info dos address-pte @var{addr}
+This command displays the Page Table entry for a specified linear
+address.  The argument @var{addr} is a linear address which should
+already have the appropriate segment's base address added to it,
+because this command accepts addresses which may belong to @emph{any}
+segment.  For example, here's how to display the Page Table entry for
+the page where a variable @code{i} is stored:
+
+ at smallexample
+ at exdent @code{(@value{GDBP}) info dos address-pte __djgpp_base_address + (char *)&i}
+ at exdent @code{Page Table entry for address 0x11a00d30:}
+ at exdent @code{Base=0x02698000 Dirty Acc. Not-Cached Write-Back Usr Read-Write +0xd30}
+ at end smallexample
+
+ at noindent
+This says that @code{i} is stored at offset @code{0xd30} from the page
+whose physical base address is @code{0x02698000}, and shows all the
+attributes of that page.
+
+Note that you must cast the addresses of variables to a @code{char *},
+since otherwise the value of @code{__djgpp_base_address}, the base
+address of all variables and functions in a @sc{djgpp} program, will
+be added using the rules of C pointer arithmetics: if @code{i} is
+declared an @code{int}, @value{GDBN} will add 4 times the value of
+ at code{__djgpp_base_address} to the address of @code{i}.
+
+Here's another example, it displays the Page Table entry for the
+transfer buffer:
+
+ at smallexample
+ at exdent @code{(@value{GDBP}) info dos address-pte *((unsigned *)&_go32_info_block + 3)}
+ at exdent @code{Page Table entry for address 0x29110:}
+ at exdent @code{Base=0x00029000 Dirty Acc. Not-Cached Write-Back Usr Read-Write +0x110}
+ at end smallexample
+
+ at noindent
+(The @code{+ 3} offset is because the transfer buffer's address is the
+3rd member of the @code{_go32_info_block} structure.)  The output
+clearly shows that this DPMI server maps the addresses in conventional
+memory 1:1, i.e.@: the physical (@code{0x00029000} + @code{0x110}) and
+linear (@code{0x29110}) addresses are identical.
+
+This command is supported only with some DPMI servers.
+ at end table
+
+ at cindex DOS serial data link, remote debugging
+In addition to native debugging, the DJGPP port supports remote
+debugging via a serial data link.  The following commands are specific
+to remote serial debugging in the DJGPP port of @value{GDBN}.
+
+ at table @code
+ at kindex set com1base
+ at kindex set com1irq
+ at kindex set com2base
+ at kindex set com2irq
+ at kindex set com3base
+ at kindex set com3irq
+ at kindex set com4base
+ at kindex set com4irq
+ at item set com1base @var{addr}
+This command sets the base I/O port address of the @file{COM1} serial
+port.
+
+ at item set com1irq @var{irq}
+This command sets the @dfn{Interrupt Request} (@code{IRQ}) line to use
+for the @file{COM1} serial port.
+
+There are similar commands @samp{set com2base}, @samp{set com3irq},
+etc.@: for setting the port address and the @code{IRQ} lines for the
+other 3 COM ports.
+
+ at kindex show com1base
+ at kindex show com1irq
+ at kindex show com2base
+ at kindex show com2irq
+ at kindex show com3base
+ at kindex show com3irq
+ at kindex show com4base
+ at kindex show com4irq
+The related commands @samp{show com1base}, @samp{show com1irq} etc.@:
+display the current settings of the base address and the @code{IRQ}
+lines used by the COM ports.
+
+ at item info serial
+ at kindex info serial
+ at cindex DOS serial port status
+This command prints the status of the 4 DOS serial ports.  For each
+port, it prints whether it's active or not, its I/O base address and
+IRQ number, whether it uses a 16550-style FIFO, its baudrate, and the
+counts of various errors encountered so far.
+ at end table
+
+
+ at node Cygwin Native
+ at subsection Features for Debugging MS Windows PE Executables
+ at cindex MS Windows debugging
+ at cindex native Cygwin debugging
+ at cindex Cygwin-specific commands
+
+ at value{GDBN} supports native debugging of MS Windows programs, including
+DLLs with and without symbolic debugging information.
+
+ at cindex Ctrl-BREAK, MS-Windows
+ at cindex interrupt debuggee on MS-Windows
+MS-Windows programs that call @code{SetConsoleMode} to switch off the
+special meaning of the @samp{Ctrl-C} keystroke cannot be interrupted
+by typing @kbd{C-c}.  For this reason, @value{GDBN} on MS-Windows
+supports @kbd{C- at key{BREAK}} as an alternative interrupt key
+sequence, which can be used to interrupt the debuggee even if it
+ignores @kbd{C-c}.
+
+There are various additional Cygwin-specific commands, described in
+this section.  Working with DLLs that have no debugging symbols is
+described in @ref{Non-debug DLL Symbols}.
+
+ at table @code
+ at kindex info w32
+ at item info w32
+This is a prefix of MS Windows-specific commands which print
+information about the target system and important OS structures.
+
+ at item info w32 selector
+This command displays information returned by
+the Win32 API @code{GetThreadSelectorEntry} function.
+It takes an optional argument that is evaluated to
+a long value to give the information about this given selector.
+Without argument, this command displays information
+about the six segment registers.
+
+ at item info w32 thread-information-block
+This command displays thread specific information stored in the
+Thread Information Block (readable on the X86 CPU family using @code{$fs}
+selector for 32-bit programs and @code{$gs} for 64-bit programs).
+
+ at kindex info dll
+ at item info dll
+This is a Cygwin-specific alias of @code{info shared}.
+
+ at kindex dll-symbols
+ at item dll-symbols
+This command loads symbols from a dll similarly to
+add-sym command but without the need to specify a base address.
+
+ at kindex set cygwin-exceptions
+ at cindex debugging the Cygwin DLL
+ at cindex Cygwin DLL, debugging
+ at item set cygwin-exceptions @var{mode}
+If @var{mode} is @code{on}, @value{GDBN} will break on exceptions that
+happen inside the Cygwin DLL.  If @var{mode} is @code{off},
+ at value{GDBN} will delay recognition of exceptions, and may ignore some
+exceptions which seem to be caused by internal Cygwin DLL
+``bookkeeping''.  This option is meant primarily for debugging the
+Cygwin DLL itself; the default value is @code{off} to avoid annoying
+ at value{GDBN} users with false @code{SIGSEGV} signals.
+
+ at kindex show cygwin-exceptions
+ at item show cygwin-exceptions
+Displays whether @value{GDBN} will break on exceptions that happen
+inside the Cygwin DLL itself.
+
+ at kindex set new-console
+ at item set new-console @var{mode}
+If @var{mode} is @code{on} the debuggee will
+be started in a new console on next start.
+If @var{mode} is @code{off}, the debuggee will
+be started in the same console as the debugger.
+
+ at kindex show new-console
+ at item show new-console
+Displays whether a new console is used
+when the debuggee is started.
+
+ at kindex set new-group
+ at item set new-group @var{mode}
+This boolean value controls whether the debuggee should
+start a new group or stay in the same group as the debugger.
+This affects the way the Windows OS handles
+ at samp{Ctrl-C}.
+
+ at kindex show new-group
+ at item show new-group
+Displays current value of new-group boolean.
+
+ at kindex set debugevents
+ at item set debugevents
+This boolean value adds debug output concerning kernel events related
+to the debuggee seen by the debugger.  This includes events that
+signal thread and process creation and exit, DLL loading and
+unloading, console interrupts, and debugging messages produced by the
+Windows @code{OutputDebugString} API call.
+
+ at kindex set debugexec
+ at item set debugexec
+This boolean value adds debug output concerning execute events
+(such as resume thread) seen by the debugger.
+
+ at kindex set debugexceptions
+ at item set debugexceptions
+This boolean value adds debug output concerning exceptions in the
+debuggee seen by the debugger.
+
+ at kindex set debugmemory
+ at item set debugmemory
+This boolean value adds debug output concerning debuggee memory reads
+and writes by the debugger.
+
+ at kindex set shell
+ at item set shell
+This boolean values specifies whether the debuggee is called
+via a shell or directly (default value is on).
+
+ at kindex show shell
+ at item show shell
+Displays if the debuggee will be started with a shell.
+
+ at end table
+
+ at menu
+* Non-debug DLL Symbols::  Support for DLLs without debugging symbols
+ at end menu
+
+ at node Non-debug DLL Symbols
+ at subsubsection Support for DLLs without Debugging Symbols
+ at cindex DLLs with no debugging symbols
+ at cindex Minimal symbols and DLLs
+
+Very often on windows, some of the DLLs that your program relies on do
+not include symbolic debugging information (for example,
+ at file{kernel32.dll}).  When @value{GDBN} doesn't recognize any debugging
+symbols in a DLL, it relies on the minimal amount of symbolic
+information contained in the DLL's export table.  This section
+describes working with such symbols, known internally to @value{GDBN} as
+``minimal symbols''.
+
+Note that before the debugged program has started execution, no DLLs
+will have been loaded.  The easiest way around this problem is simply to
+start the program --- either by setting a breakpoint or letting the
+program run once to completion.  It is also possible to force
+ at value{GDBN} to load a particular DLL before starting the executable ---
+see the shared library information in @ref{Files}, or the
+ at code{dll-symbols} command in @ref{Cygwin Native}.  Currently,
+explicitly loading symbols from a DLL with no debugging information will
+cause the symbol names to be duplicated in @value{GDBN}'s lookup table,
+which may adversely affect symbol lookup performance.
+
+ at subsubsection DLL Name Prefixes
+
+In keeping with the naming conventions used by the Microsoft debugging
+tools, DLL export symbols are made available with a prefix based on the
+DLL name, for instance @code{KERNEL32!CreateFileA}.  The plain name is
+also entered into the symbol table, so @code{CreateFileA} is often
+sufficient.  In some cases there will be name clashes within a program
+(particularly if the executable itself includes full debugging symbols)
+necessitating the use of the fully qualified name when referring to the
+contents of the DLL.  Use single-quotes around the name to avoid the
+exclamation mark (``!'')  being interpreted as a language operator.
+
+Note that the internal name of the DLL may be all upper-case, even
+though the file name of the DLL is lower-case, or vice-versa.  Since
+symbols within @value{GDBN} are @emph{case-sensitive} this may cause
+some confusion. If in doubt, try the @code{info functions} and
+ at code{info variables} commands or even @code{maint print msymbols}
+(@pxref{Symbols}). Here's an example:
+
+ at smallexample
+(@value{GDBP}) info function CreateFileA
+All functions matching regular expression "CreateFileA":
+
+Non-debugging symbols:
+0x77e885f4  CreateFileA
+0x77e885f4  KERNEL32!CreateFileA
+ at end smallexample
+
+ at smallexample
+(@value{GDBP}) info function !
+All functions matching regular expression "!":
+
+Non-debugging symbols:
+0x6100114c  cygwin1!__assert
+0x61004034  cygwin1!_dll_crt0@@0
+0x61004240  cygwin1!dll_crt0(per_process *)
+[etc...]
+ at end smallexample
+
+ at subsubsection Working with Minimal Symbols
+
+Symbols extracted from a DLL's export table do not contain very much
+type information. All that @value{GDBN} can do is guess whether a symbol
+refers to a function or variable depending on the linker section that
+contains the symbol. Also note that the actual contents of the memory
+contained in a DLL are not available unless the program is running. This
+means that you cannot examine the contents of a variable or disassemble
+a function within a DLL without a running program.
+
+Variables are generally treated as pointers and dereferenced
+automatically. For this reason, it is often necessary to prefix a
+variable name with the address-of operator (``&'') and provide explicit
+type information in the command. Here's an example of the type of
+problem:
+
+ at smallexample
+(@value{GDBP}) print 'cygwin1!__argv'
+$1 = 268572168
+ at end smallexample
+
+ at smallexample
+(@value{GDBP}) x 'cygwin1!__argv'
+0x10021610:      "\230y\""
+ at end smallexample
+
+And two possible solutions:
+
+ at smallexample
+(@value{GDBP}) print ((char **)'cygwin1!__argv')[0]
+$2 = 0x22fd98 "/cygdrive/c/mydirectory/myprogram"
+ at end smallexample
+
+ at smallexample
+(@value{GDBP}) x/2x &'cygwin1!__argv'
+0x610c0aa8 <cygwin1!__argv>:    0x10021608      0x00000000
+(@value{GDBP}) x/x 0x10021608
+0x10021608:     0x0022fd98
+(@value{GDBP}) x/s 0x0022fd98
+0x22fd98:        "/cygdrive/c/mydirectory/myprogram"
+ at end smallexample
+
+Setting a break point within a DLL is possible even before the program
+starts execution. However, under these circumstances, @value{GDBN} can't
+examine the initial instructions of the function in order to skip the
+function's frame set-up code. You can work around this by using ``*&''
+to set the breakpoint at a raw memory address:
+
+ at smallexample
+(@value{GDBP}) break *&'python22!PyOS_Readline'
+Breakpoint 1 at 0x1e04eff0
+ at end smallexample
+
+The author of these extensions is not entirely convinced that setting a
+break point within a shared DLL like @file{kernel32.dll} is completely
+safe.
+
+ at node Hurd Native
+ at subsection Commands Specific to @sc{gnu} Hurd Systems
+ at cindex @sc{gnu} Hurd debugging
+
+This subsection describes @value{GDBN} commands specific to the
+ at sc{gnu} Hurd native debugging.
+
+ at table @code
+ at item set signals
+ at itemx set sigs
+ at kindex set signals at r{, Hurd command}
+ at kindex set sigs at r{, Hurd command}
+This command toggles the state of inferior signal interception by
+ at value{GDBN}.  Mach exceptions, such as breakpoint traps, are not
+affected by this command.  @code{sigs} is a shorthand alias for
+ at code{signals}.
+
+ at item show signals
+ at itemx show sigs
+ at kindex show signals at r{, Hurd command}
+ at kindex show sigs at r{, Hurd command}
+Show the current state of intercepting inferior's signals.
+
+ at item set signal-thread
+ at itemx set sigthread
+ at kindex set signal-thread
+ at kindex set sigthread
+This command tells @value{GDBN} which thread is the @code{libc} signal
+thread.  That thread is run when a signal is delivered to a running
+process.  @code{set sigthread} is the shorthand alias of @code{set
+signal-thread}.
+
+ at item show signal-thread
+ at itemx show sigthread
+ at kindex show signal-thread
+ at kindex show sigthread
+These two commands show which thread will run when the inferior is
+delivered a signal.
+
+ at item set stopped
+ at kindex set stopped at r{, Hurd command}
+This commands tells @value{GDBN} that the inferior process is stopped,
+as with the @code{SIGSTOP} signal.  The stopped process can be
+continued by delivering a signal to it.
+
+ at item show stopped
+ at kindex show stopped at r{, Hurd command}
+This command shows whether @value{GDBN} thinks the debuggee is
+stopped.
+
+ at item set exceptions
+ at kindex set exceptions at r{, Hurd command}
+Use this command to turn off trapping of exceptions in the inferior.
+When exception trapping is off, neither breakpoints nor
+single-stepping will work.  To restore the default, set exception
+trapping on.
+
+ at item show exceptions
+ at kindex show exceptions at r{, Hurd command}
+Show the current state of trapping exceptions in the inferior.
+
+ at item set task pause
+ at kindex set task at r{, Hurd commands}
+ at cindex task attributes (@sc{gnu} Hurd)
+ at cindex pause current task (@sc{gnu} Hurd)
+This command toggles task suspension when @value{GDBN} has control.
+Setting it to on takes effect immediately, and the task is suspended
+whenever @value{GDBN} gets control.  Setting it to off will take
+effect the next time the inferior is continued.  If this option is set
+to off, you can use @code{set thread default pause on} or @code{set
+thread pause on} (see below) to pause individual threads.
+
+ at item show task pause
+ at kindex show task at r{, Hurd commands}
+Show the current state of task suspension.
+
+ at item set task detach-suspend-count
+ at cindex task suspend count
+ at cindex detach from task, @sc{gnu} Hurd
+This command sets the suspend count the task will be left with when
+ at value{GDBN} detaches from it.
+
+ at item show task detach-suspend-count
+Show the suspend count the task will be left with when detaching.
+
+ at item set task exception-port
+ at itemx set task excp
+ at cindex task exception port, @sc{gnu} Hurd
+This command sets the task exception port to which @value{GDBN} will
+forward exceptions.  The argument should be the value of the @dfn{send
+rights} of the task.  @code{set task excp} is a shorthand alias.
+
+ at item set noninvasive
+ at cindex noninvasive task options
+This command switches @value{GDBN} to a mode that is the least
+invasive as far as interfering with the inferior is concerned.  This
+is the same as using @code{set task pause}, @code{set exceptions}, and
+ at code{set signals} to values opposite to the defaults.
+
+ at item info send-rights
+ at itemx info receive-rights
+ at itemx info port-rights
+ at itemx info port-sets
+ at itemx info dead-names
+ at itemx info ports
+ at itemx info psets
+ at cindex send rights, @sc{gnu} Hurd
+ at cindex receive rights, @sc{gnu} Hurd
+ at cindex port rights, @sc{gnu} Hurd
+ at cindex port sets, @sc{gnu} Hurd
+ at cindex dead names, @sc{gnu} Hurd
+These commands display information about, respectively, send rights,
+receive rights, port rights, port sets, and dead names of a task.
+There are also shorthand aliases: @code{info ports} for @code{info
+port-rights} and @code{info psets} for @code{info port-sets}.
+
+ at item set thread pause
+ at kindex set thread at r{, Hurd command}
+ at cindex thread properties, @sc{gnu} Hurd
+ at cindex pause current thread (@sc{gnu} Hurd)
+This command toggles current thread suspension when @value{GDBN} has
+control.  Setting it to on takes effect immediately, and the current
+thread is suspended whenever @value{GDBN} gets control.  Setting it to
+off will take effect the next time the inferior is continued.
+Normally, this command has no effect, since when @value{GDBN} has
+control, the whole task is suspended.  However, if you used @code{set
+task pause off} (see above), this command comes in handy to suspend
+only the current thread.
+
+ at item show thread pause
+ at kindex show thread at r{, Hurd command}
+This command shows the state of current thread suspension.
+
+ at item set thread run
+This command sets whether the current thread is allowed to run.
+
+ at item show thread run
+Show whether the current thread is allowed to run.
+
+ at item set thread detach-suspend-count
+ at cindex thread suspend count, @sc{gnu} Hurd
+ at cindex detach from thread, @sc{gnu} Hurd
+This command sets the suspend count @value{GDBN} will leave on a
+thread when detaching.  This number is relative to the suspend count
+found by @value{GDBN} when it notices the thread; use @code{set thread
+takeover-suspend-count} to force it to an absolute value.
+
+ at item show thread detach-suspend-count
+Show the suspend count @value{GDBN} will leave on the thread when
+detaching.
+
+ at item set thread exception-port
+ at itemx set thread excp
+Set the thread exception port to which to forward exceptions.  This
+overrides the port set by @code{set task exception-port} (see above).
+ at code{set thread excp} is the shorthand alias.
+
+ at item set thread takeover-suspend-count
+Normally, @value{GDBN}'s thread suspend counts are relative to the
+value @value{GDBN} finds when it notices each thread.  This command
+changes the suspend counts to be absolute instead.
+
+ at item set thread default
+ at itemx show thread default
+ at cindex thread default settings, @sc{gnu} Hurd
+Each of the above @code{set thread} commands has a @code{set thread
+default} counterpart (e.g., @code{set thread default pause}, @code{set
+thread default exception-port}, etc.).  The @code{thread default}
+variety of commands sets the default thread properties for all
+threads; you can then change the properties of individual threads with
+the non-default commands.
+ at end table
+
+
+ at node Neutrino
+ at subsection QNX Neutrino
+ at cindex QNX Neutrino
+
+ at value{GDBN} provides the following commands specific to the QNX
+Neutrino target:
+
+ at table @code
+ at item set debug nto-debug
+ at kindex set debug nto-debug
+When set to on, enables debugging messages specific to the QNX
+Neutrino support.
+
+ at item show debug nto-debug
+ at kindex show debug nto-debug
+Show the current state of QNX Neutrino messages.
+ at end table
+
+ at node Darwin
+ at subsection Darwin
+ at cindex Darwin
+
+ at value{GDBN} provides the following commands specific to the Darwin target:
+
+ at table @code
+ at item set debug darwin @var{num}
+ at kindex set debug darwin
+When set to a non zero value, enables debugging messages specific to
+the Darwin support.  Higher values produce more verbose output.
+
+ at item show debug darwin
+ at kindex show debug darwin
+Show the current state of Darwin messages.
+
+ at item set debug mach-o @var{num}
+ at kindex set debug mach-o
+When set to a non zero value, enables debugging messages while
+ at value{GDBN} is reading Darwin object files.  (@dfn{Mach-O} is the
+file format used on Darwin for object and executable files.)  Higher
+values produce more verbose output.  This is a command to diagnose
+problems internal to @value{GDBN} and should not be needed in normal
+usage.
+
+ at item show debug mach-o
+ at kindex show debug mach-o
+Show the current state of Mach-O file messages.
+
+ at item set mach-exceptions on
+ at itemx set mach-exceptions off
+ at kindex set mach-exceptions
+On Darwin, faults are first reported as a Mach exception and are then
+mapped to a Posix signal.  Use this command to turn on trapping of
+Mach exceptions in the inferior.  This might be sometimes useful to
+better understand the cause of a fault.  The default is off.
+
+ at item show mach-exceptions
+ at kindex show mach-exceptions
+Show the current state of exceptions trapping.
+ at end table
+
+
+ at node Embedded OS
+ at section Embedded Operating Systems
+
+This section describes configurations involving the debugging of
+embedded operating systems that are available for several different
+architectures.
+
+ at menu
+* VxWorks::                     Using @value{GDBN} with VxWorks
+ at end menu
+
+ at value{GDBN} includes the ability to debug programs running on
+various real-time operating systems.
+
+ at node VxWorks
+ at subsection Using @value{GDBN} with VxWorks
+
+ at cindex VxWorks
+
+ at table @code
+
+ at kindex target vxworks
+ at item target vxworks @var{machinename}
+A VxWorks system, attached via TCP/IP.  The argument @var{machinename}
+is the target system's machine name or IP address.
+
+ at end table
+
+On VxWorks, @code{load} links @var{filename} dynamically on the
+current target system as well as adding its symbols in @value{GDBN}.
+
+ at value{GDBN} enables developers to spawn and debug tasks running on networked
+VxWorks targets from a Unix host.  Already-running tasks spawned from
+the VxWorks shell can also be debugged.  @value{GDBN} uses code that runs on
+both the Unix host and on the VxWorks target.  The program
+ at code{@value{GDBP}} is installed and executed on the Unix host.  (It may be
+installed with the name @code{vxgdb}, to distinguish it from a
+ at value{GDBN} for debugging programs on the host itself.)
+
+ at table @code
+ at item VxWorks-timeout @var{args}
+ at kindex vxworks-timeout
+All VxWorks-based targets now support the option @code{vxworks-timeout}.
+This option is set by the user, and  @var{args} represents the number of
+seconds @value{GDBN} waits for responses to rpc's.  You might use this if
+your VxWorks target is a slow software simulator or is on the far side
+of a thin network line.
+ at end table
+
+The following information on connecting to VxWorks was current when
+this manual was produced; newer releases of VxWorks may use revised
+procedures.
+
+ at findex INCLUDE_RDB
+To use @value{GDBN} with VxWorks, you must rebuild your VxWorks kernel
+to include the remote debugging interface routines in the VxWorks
+library @file{rdb.a}.  To do this, define @code{INCLUDE_RDB} in the
+VxWorks configuration file @file{configAll.h} and rebuild your VxWorks
+kernel.  The resulting kernel contains @file{rdb.a}, and spawns the
+source debugging task @code{tRdbTask} when VxWorks is booted.  For more
+information on configuring and remaking VxWorks, see the manufacturer's
+manual.
+ at c VxWorks, see the @cite{VxWorks Programmer's Guide}.
+
+Once you have included @file{rdb.a} in your VxWorks system image and set
+your Unix execution search path to find @value{GDBN}, you are ready to
+run @value{GDBN}.  From your Unix host, run @code{@value{GDBP}} (or
+ at code{vxgdb}, depending on your installation).
+
+ at value{GDBN} comes up showing the prompt:
+
+ at smallexample
+(vxgdb)
+ at end smallexample
+
+ at menu
+* VxWorks Connection::          Connecting to VxWorks
+* VxWorks Download::            VxWorks download
+* VxWorks Attach::              Running tasks
+ at end menu
+
+ at node VxWorks Connection
+ at subsubsection Connecting to VxWorks
+
+The @value{GDBN} command @code{target} lets you connect to a VxWorks target on the
+network.  To connect to a target whose host name is ``@code{tt}'', type:
+
+ at smallexample
+(vxgdb) target vxworks tt
+ at end smallexample
+
+ at need 750
+ at value{GDBN} displays messages like these:
+
+ at smallexample
+Attaching remote machine across net...
+Connected to tt.
+ at end smallexample
+
+ at need 1000
+ at value{GDBN} then attempts to read the symbol tables of any object modules
+loaded into the VxWorks target since it was last booted.  @value{GDBN} locates
+these files by searching the directories listed in the command search
+path (@pxref{Environment, ,Your Program's Environment}); if it fails
+to find an object file, it displays a message such as:
+
+ at smallexample
+prog.o: No such file or directory.
+ at end smallexample
+
+When this happens, add the appropriate directory to the search path with
+the @value{GDBN} command @code{path}, and execute the @code{target}
+command again.
+
+ at node VxWorks Download
+ at subsubsection VxWorks Download
+
+ at cindex download to VxWorks
+If you have connected to the VxWorks target and you want to debug an
+object that has not yet been loaded, you can use the @value{GDBN}
+ at code{load} command to download a file from Unix to VxWorks
+incrementally.  The object file given as an argument to the @code{load}
+command is actually opened twice: first by the VxWorks target in order
+to download the code, then by @value{GDBN} in order to read the symbol
+table.  This can lead to problems if the current working directories on
+the two systems differ.  If both systems have NFS mounted the same
+filesystems, you can avoid these problems by using absolute paths.
+Otherwise, it is simplest to set the working directory on both systems
+to the directory in which the object file resides, and then to reference
+the file by its name, without any path.  For instance, a program
+ at file{prog.o} may reside in @file{@var{vxpath}/vw/demo/rdb} in VxWorks
+and in @file{@var{hostpath}/vw/demo/rdb} on the host.  To load this
+program, type this on VxWorks:
+
+ at smallexample
+-> cd "@var{vxpath}/vw/demo/rdb"
+ at end smallexample
+
+ at noindent
+Then, in @value{GDBN}, type:
+
+ at smallexample
+(vxgdb) cd @var{hostpath}/vw/demo/rdb
+(vxgdb) load prog.o
+ at end smallexample
+
+ at value{GDBN} displays a response similar to this:
+
+ at smallexample
+Reading symbol data from wherever/vw/demo/rdb/prog.o... done.
+ at end smallexample
+
+You can also use the @code{load} command to reload an object module
+after editing and recompiling the corresponding source file.  Note that
+this makes @value{GDBN} delete all currently-defined breakpoints,
+auto-displays, and convenience variables, and to clear the value
+history.  (This is necessary in order to preserve the integrity of
+debugger's data structures that reference the target system's symbol
+table.)
+
+ at node VxWorks Attach
+ at subsubsection Running Tasks
+
+ at cindex running VxWorks tasks
+You can also attach to an existing task using the @code{attach} command as
+follows:
+
+ at smallexample
+(vxgdb) attach @var{task}
+ at end smallexample
+
+ at noindent
+where @var{task} is the VxWorks hexadecimal task ID.  The task can be running
+or suspended when you attach to it.  Running tasks are suspended at
+the time of attachment.
+
+ at node Embedded Processors
+ at section Embedded Processors
+
+This section goes into details specific to particular embedded
+configurations.
+
+ at cindex send command to simulator
+Whenever a specific embedded processor has a simulator, @value{GDBN}
+allows to send an arbitrary command to the simulator.
+
+ at table @code
+ at item sim @var{command}
+ at kindex sim at r{, a command}
+Send an arbitrary @var{command} string to the simulator.  Consult the
+documentation for the specific simulator in use for information about
+acceptable commands.
+ at end table
+
+
+ at menu
+* ARM::                         ARM RDI
+* M32R/D::                      Renesas M32R/D
+* M68K::                        Motorola M68K
+* MicroBlaze::			Xilinx MicroBlaze
+* MIPS Embedded::               MIPS Embedded
+* OpenRISC 1000::               OpenRisc 1000
+* PowerPC Embedded::            PowerPC Embedded
+* PA::                          HP PA Embedded
+* Sparclet::                    Tsqware Sparclet
+* Sparclite::                   Fujitsu Sparclite
+* Z8000::                       Zilog Z8000
+* AVR::                         Atmel AVR
+* CRIS::                        CRIS
+* Super-H::                     Renesas Super-H
+ at end menu
+
+ at node ARM
+ at subsection ARM
+ at cindex ARM RDI
+
+ at table @code
+ at kindex target rdi
+ at item target rdi @var{dev}
+ARM Angel monitor, via RDI library interface to ADP protocol.  You may
+use this target to communicate with both boards running the Angel
+monitor, or with the EmbeddedICE JTAG debug device.
+
+ at kindex target rdp
+ at item target rdp @var{dev}
+ARM Demon monitor.
+
+ at end table
+
+ at value{GDBN} provides the following ARM-specific commands:
+
+ at table @code
+ at item set arm disassembler
+ at kindex set arm
+This commands selects from a list of disassembly styles.  The
+ at code{"std"} style is the standard style.
+
+ at item show arm disassembler
+ at kindex show arm
+Show the current disassembly style.
+
+ at item set arm apcs32
+ at cindex ARM 32-bit mode
+This command toggles ARM operation mode between 32-bit and 26-bit.
+
+ at item show arm apcs32
+Display the current usage of the ARM 32-bit mode.
+
+ at item set arm fpu @var{fputype}
+This command sets the ARM floating-point unit (FPU) type.  The
+argument @var{fputype} can be one of these:
+
+ at table @code
+ at item auto
+Determine the FPU type by querying the OS ABI.
+ at item softfpa
+Software FPU, with mixed-endian doubles on little-endian ARM
+processors.
+ at item fpa
+GCC-compiled FPA co-processor.
+ at item softvfp
+Software FPU with pure-endian doubles.
+ at item vfp
+VFP co-processor.
+ at end table
+
+ at item show arm fpu
+Show the current type of the FPU.
+
+ at item set arm abi
+This command forces @value{GDBN} to use the specified ABI.
+
+ at item show arm abi
+Show the currently used ABI.
+
+ at item set arm fallback-mode (arm|thumb|auto)
+ at value{GDBN} uses the symbol table, when available, to determine
+whether instructions are ARM or Thumb.  This command controls
+ at value{GDBN}'s default behavior when the symbol table is not
+available.  The default is @samp{auto}, which causes @value{GDBN} to
+use the current execution mode (from the @code{T} bit in the @code{CPSR}
+register).
+
+ at item show arm fallback-mode
+Show the current fallback instruction mode.
+
+ at item set arm force-mode (arm|thumb|auto)
+This command overrides use of the symbol table to determine whether
+instructions are ARM or Thumb.  The default is @samp{auto}, which
+causes @value{GDBN} to use the symbol table and then the setting
+of @samp{set arm fallback-mode}.
+
+ at item show arm force-mode
+Show the current forced instruction mode.
+
+ at item set debug arm
+Toggle whether to display ARM-specific debugging messages from the ARM
+target support subsystem.
+
+ at item show debug arm
+Show whether ARM-specific debugging messages are enabled.
+ at end table
+
+The following commands are available when an ARM target is debugged
+using the RDI interface:
+
+ at table @code
+ at item rdilogfile @r{[}@var{file}@r{]}
+ at kindex rdilogfile
+ at cindex ADP (Angel Debugger Protocol) logging
+Set the filename for the ADP (Angel Debugger Protocol) packet log.
+With an argument, sets the log file to the specified @var{file}.  With
+no argument, show the current log file name.  The default log file is
+ at file{rdi.log}.
+
+ at item rdilogenable @r{[}@var{arg}@r{]}
+ at kindex rdilogenable
+Control logging of ADP packets.  With an argument of 1 or @code{"yes"}
+enables logging, with an argument 0 or @code{"no"} disables it.  With
+no arguments displays the current setting.  When logging is enabled,
+ADP packets exchanged between @value{GDBN} and the RDI target device
+are logged to a file.
+
+ at item set rdiromatzero
+ at kindex set rdiromatzero
+ at cindex ROM at zero address, RDI
+Tell @value{GDBN} whether the target has ROM at address 0.  If on,
+vector catching is disabled, so that zero address can be used.  If off
+(the default), vector catching is enabled.  For this command to take
+effect, it needs to be invoked prior to the @code{target rdi} command.
+
+ at item show rdiromatzero
+ at kindex show rdiromatzero
+Show the current setting of ROM at zero address.
+
+ at item set rdiheartbeat
+ at kindex set rdiheartbeat
+ at cindex RDI heartbeat
+Enable or disable RDI heartbeat packets.  It is not recommended to
+turn on this option, since it confuses ARM and EPI JTAG interface, as
+well as the Angel monitor.
+
+ at item show rdiheartbeat
+ at kindex show rdiheartbeat
+Show the setting of RDI heartbeat packets.
+ at end table
+
+ at table @code
+ at item target sim @r{[}@var{simargs}@r{]} @dots{} 
+The @value{GDBN} ARM simulator accepts the following optional arguments.
+
+ at table @code
+ at item --swi-support=@var{type}
+Tell the simulator which SWI interfaces to support.
+ at var{type} may be a comma separated list of the following values.
+The default value is @code{all}.
+
+ at table @code
+ at item none
+ at item demon
+ at item angel
+ at item redboot
+ at item all
+ at end table
+ at end table
+ at end table
+
+ at node M32R/D
+ at subsection Renesas M32R/D and M32R/SDI
+
+ at table @code
+ at kindex target m32r
+ at item target m32r @var{dev}
+Renesas M32R/D ROM monitor.
+
+ at kindex target m32rsdi
+ at item target m32rsdi @var{dev}
+Renesas M32R SDI server, connected via parallel port to the board.
+ at end table
+
+The following @value{GDBN} commands are specific to the M32R monitor:
+
+ at table @code
+ at item set download-path @var{path}
+ at kindex set download-path
+ at cindex find downloadable @sc{srec} files (M32R)
+Set the default path for finding downloadable @sc{srec} files.
+
+ at item show download-path
+ at kindex show download-path
+Show the default path for downloadable @sc{srec} files.
+
+ at item set board-address @var{addr}
+ at kindex set board-address
+ at cindex M32-EVA target board address
+Set the IP address for the M32R-EVA target board.
+
+ at item show board-address
+ at kindex show board-address
+Show the current IP address of the target board.
+
+ at item set server-address @var{addr}
+ at kindex set server-address
+ at cindex download server address (M32R)
+Set the IP address for the download server, which is the @value{GDBN}'s
+host machine.
+
+ at item show server-address
+ at kindex show server-address
+Display the IP address of the download server.
+
+ at item upload @r{[}@var{file}@r{]}
+ at kindex upload at r{, M32R}
+Upload the specified @sc{srec} @var{file} via the monitor's Ethernet
+upload capability.  If no @var{file} argument is given, the current
+executable file is uploaded.
+
+ at item tload @r{[}@var{file}@r{]}
+ at kindex tload at r{, M32R}
+Test the @code{upload} command.
+ at end table
+
+The following commands are available for M32R/SDI:
+
+ at table @code
+ at item sdireset
+ at kindex sdireset
+ at cindex reset SDI connection, M32R
+This command resets the SDI connection.
+
+ at item sdistatus
+ at kindex sdistatus
+This command shows the SDI connection status.
+
+ at item debug_chaos
+ at kindex debug_chaos
+ at cindex M32R/Chaos debugging
+Instructs the remote that M32R/Chaos debugging is to be used.
+
+ at item use_debug_dma
+ at kindex use_debug_dma
+Instructs the remote to use the DEBUG_DMA method of accessing memory.
+
+ at item use_mon_code
+ at kindex use_mon_code
+Instructs the remote to use the MON_CODE method of accessing memory.
+
+ at item use_ib_break
+ at kindex use_ib_break
+Instructs the remote to set breakpoints by IB break.
+
+ at item use_dbt_break
+ at kindex use_dbt_break
+Instructs the remote to set breakpoints by DBT.
+ at end table
+
+ at node M68K
+ at subsection M68k
+
+The Motorola m68k configuration includes ColdFire support, and a
+target command for the following ROM monitor.
+
+ at table @code
+
+ at kindex target dbug
+ at item target dbug @var{dev}
+dBUG ROM monitor for Motorola ColdFire.
+
+ at end table
+
+ at node MicroBlaze
+ at subsection MicroBlaze
+ at cindex Xilinx MicroBlaze
+ at cindex XMD, Xilinx Microprocessor Debugger
+
+The MicroBlaze is a soft-core processor supported on various Xilinx
+FPGAs, such as Spartan or Virtex series.  Boards with these processors
+usually have JTAG ports which connect to a host system running the Xilinx
+Embedded Development Kit (EDK) or Software Development Kit (SDK).
+This host system is used to download the configuration bitstream to
+the target FPGA.  The Xilinx Microprocessor Debugger (XMD) program
+communicates with the target board using the JTAG interface and
+presents a @code{gdbserver} interface to the board.  By default
+ at code{xmd} uses port @code{1234}.  (While it is possible to change 
+this default port, it requires the use of undocumented @code{xmd} 
+commands.  Contact Xilinx support if you need to do this.)
+
+Use these GDB commands to connect to the MicroBlaze target processor.
+
+ at table @code
+ at item target remote :1234
+Use this command to connect to the target if you are running @value{GDBN}
+on the same system as @code{xmd}.
+
+ at item target remote @var{xmd-host}:1234
+Use this command to connect to the target if it is connected to @code{xmd}
+running on a different system named @var{xmd-host}.
+
+ at item load
+Use this command to download a program to the MicroBlaze target.
+
+ at item set debug microblaze @var{n}
+Enable MicroBlaze-specific debugging messages if non-zero.
+
+ at item show debug microblaze @var{n}
+Show MicroBlaze-specific debugging level.
+ at end table
+
+ at node MIPS Embedded
+ at subsection @acronym{MIPS} Embedded
+
+ at cindex @acronym{MIPS} boards
+ at value{GDBN} can use the @acronym{MIPS} remote debugging protocol to talk to a
+ at acronym{MIPS} board attached to a serial line.  This is available when
+you configure @value{GDBN} with @samp{--target=mips-elf}.
+
+ at need 1000
+Use these @value{GDBN} commands to specify the connection to your target board:
+
+ at table @code
+ at item target mips @var{port}
+ at kindex target mips @var{port}
+To run a program on the board, start up @code{@value{GDBP}} with the
+name of your program as the argument.  To connect to the board, use the
+command @samp{target mips @var{port}}, where @var{port} is the name of
+the serial port connected to the board.  If the program has not already
+been downloaded to the board, you may use the @code{load} command to
+download it.  You can then use all the usual @value{GDBN} commands.
+
+For example, this sequence connects to the target board through a serial
+port, and loads and runs a program called @var{prog} through the
+debugger:
+
+ at smallexample
+host$ @value{GDBP} @var{prog}
+ at value{GDBN} is free software and @dots{}
+(@value{GDBP}) target mips /dev/ttyb
+(@value{GDBP}) load @var{prog}
+(@value{GDBP}) run
+ at end smallexample
+
+ at item target mips @var{hostname}:@var{portnumber}
+On some @value{GDBN} host configurations, you can specify a TCP
+connection (for instance, to a serial line managed by a terminal
+concentrator) instead of a serial port, using the syntax
+ at samp{@var{hostname}:@var{portnumber}}.
+
+ at item target pmon @var{port}
+ at kindex target pmon @var{port}
+PMON ROM monitor.
+
+ at item target ddb @var{port}
+ at kindex target ddb @var{port}
+NEC's DDB variant of PMON for Vr4300.
+
+ at item target lsi @var{port}
+ at kindex target lsi @var{port}
+LSI variant of PMON.
+
+ at kindex target r3900
+ at item target r3900 @var{dev}
+Densan DVE-R3900 ROM monitor for Toshiba R3900 Mips.
+
+ at kindex target array
+ at item target array @var{dev}
+Array Tech LSI33K RAID controller board.
+
+ at end table
+
+
+ at noindent
+ at value{GDBN} also supports these special commands for @acronym{MIPS} targets:
+
+ at table @code
+ at item set mipsfpu double
+ at itemx set mipsfpu single
+ at itemx set mipsfpu none
+ at itemx set mipsfpu auto
+ at itemx show mipsfpu
+ at kindex set mipsfpu
+ at kindex show mipsfpu
+ at cindex @acronym{MIPS} remote floating point
+ at cindex floating point, @acronym{MIPS} remote
+If your target board does not support the @acronym{MIPS} floating point
+coprocessor, you should use the command @samp{set mipsfpu none} (if you
+need this, you may wish to put the command in your @value{GDBN} init
+file).  This tells @value{GDBN} how to find the return value of
+functions which return floating point values.  It also allows
+ at value{GDBN} to avoid saving the floating point registers when calling
+functions on the board.  If you are using a floating point coprocessor
+with only single precision floating point support, as on the @sc{r4650}
+processor, use the command @samp{set mipsfpu single}.  The default
+double precision floating point coprocessor may be selected using
+ at samp{set mipsfpu double}.
+
+In previous versions the only choices were double precision or no
+floating point, so @samp{set mipsfpu on} will select double precision
+and @samp{set mipsfpu off} will select no floating point.
+
+As usual, you can inquire about the @code{mipsfpu} variable with
+ at samp{show mipsfpu}.
+
+ at item set timeout @var{seconds}
+ at itemx set retransmit-timeout @var{seconds}
+ at itemx show timeout
+ at itemx show retransmit-timeout
+ at cindex @code{timeout}, @acronym{MIPS} protocol
+ at cindex @code{retransmit-timeout}, @acronym{MIPS} protocol
+ at kindex set timeout
+ at kindex show timeout
+ at kindex set retransmit-timeout
+ at kindex show retransmit-timeout
+You can control the timeout used while waiting for a packet, in the @acronym{MIPS}
+remote protocol, with the @code{set timeout @var{seconds}} command.  The
+default is 5 seconds.  Similarly, you can control the timeout used while
+waiting for an acknowledgment of a packet with the @code{set
+retransmit-timeout @var{seconds}} command.  The default is 3 seconds.
+You can inspect both values with @code{show timeout} and @code{show
+retransmit-timeout}.  (These commands are @emph{only} available when
+ at value{GDBN} is configured for @samp{--target=mips-elf}.)
+
+The timeout set by @code{set timeout} does not apply when @value{GDBN}
+is waiting for your program to stop.  In that case, @value{GDBN} waits
+forever because it has no way of knowing how long the program is going
+to run before stopping.
+
+ at item set syn-garbage-limit @var{num}
+ at kindex set syn-garbage-limit at r{, @acronym{MIPS} remote}
+ at cindex synchronize with remote @acronym{MIPS} target
+Limit the maximum number of characters @value{GDBN} should ignore when
+it tries to synchronize with the remote target.  The default is 10
+characters.  Setting the limit to -1 means there's no limit.
+
+ at item show syn-garbage-limit
+ at kindex show syn-garbage-limit at r{, @acronym{MIPS} remote}
+Show the current limit on the number of characters to ignore when
+trying to synchronize with the remote system.
+
+ at item set monitor-prompt @var{prompt}
+ at kindex set monitor-prompt at r{, @acronym{MIPS} remote}
+ at cindex remote monitor prompt
+Tell @value{GDBN} to expect the specified @var{prompt} string from the
+remote monitor.  The default depends on the target:
+ at table @asis
+ at item pmon target
+ at samp{PMON}
+ at item ddb target
+ at samp{NEC010}
+ at item lsi target
+ at samp{PMON>}
+ at end table
+
+ at item show monitor-prompt
+ at kindex show monitor-prompt at r{, @acronym{MIPS} remote}
+Show the current strings @value{GDBN} expects as the prompt from the
+remote monitor.
+
+ at item set monitor-warnings
+ at kindex set monitor-warnings at r{, @acronym{MIPS} remote}
+Enable or disable monitor warnings about hardware breakpoints.  This
+has effect only for the @code{lsi} target.  When on, @value{GDBN} will
+display warning messages whose codes are returned by the @code{lsi}
+PMON monitor for breakpoint commands.
+
+ at item show monitor-warnings
+ at kindex show monitor-warnings at r{, @acronym{MIPS} remote}
+Show the current setting of printing monitor warnings.
+
+ at item pmon @var{command}
+ at kindex pmon at r{, @acronym{MIPS} remote}
+ at cindex send PMON command
+This command allows sending an arbitrary @var{command} string to the
+monitor.  The monitor must be in debug mode for this to work.
+ at end table
+
+ at node OpenRISC 1000
+ at subsection OpenRISC 1000
+ at cindex OpenRISC 1000
+
+ at cindex or1k boards
+See OR1k Architecture document (@uref{www.opencores.org}) for more information
+about platform and commands.
+
+ at table @code
+
+ at kindex target jtag
+ at item target jtag jtag://@var{host}:@var{port}
+
+Connects to remote JTAG server.
+JTAG remote server can be either an or1ksim or JTAG server,
+connected via parallel port to the board.
+
+Example: @code{target jtag jtag://localhost:9999}
+
+ at kindex or1ksim
+ at item or1ksim @var{command}
+If connected to @code{or1ksim} OpenRISC 1000 Architectural
+Simulator, proprietary commands can be executed.
+
+ at kindex info or1k spr
+ at item info or1k spr
+Displays spr groups.
+
+ at item info or1k spr @var{group}
+ at itemx info or1k spr @var{groupno}
+Displays register names in selected group.
+
+ at item info or1k spr @var{group} @var{register}
+ at itemx info or1k spr @var{register}
+ at itemx info or1k spr @var{groupno} @var{registerno}
+ at itemx info or1k spr @var{registerno}
+Shows information about specified spr register.
+
+ at kindex spr
+ at item spr @var{group} @var{register} @var{value}
+ at itemx spr @var{register @var{value}}
+ at itemx spr @var{groupno} @var{registerno @var{value}}
+ at itemx spr @var{registerno @var{value}}
+Writes @var{value} to specified spr register.
+ at end table
+
+Some implementations of OpenRISC 1000 Architecture also have hardware trace.
+It is very similar to @value{GDBN} trace, except it does not interfere with normal
+program execution and is thus much faster.  Hardware breakpoints/watchpoint
+triggers can be set using:
+ at table @code
+ at item $LEA/$LDATA
+Load effective address/data
+ at item $SEA/$SDATA
+Store effective address/data
+ at item $AEA/$ADATA
+Access effective address ($SEA or $LEA) or data ($SDATA/$LDATA)
+ at item $FETCH
+Fetch data
+ at end table
+
+When triggered, it can capture low level data, like: @code{PC}, @code{LSEA},
+ at code{LDATA}, @code{SDATA}, @code{READSPR}, @code{WRITESPR}, @code{INSTR}.
+
+ at code{htrace} commands:
+ at cindex OpenRISC 1000 htrace
+ at table @code
+ at kindex hwatch
+ at item hwatch @var{conditional}
+Set hardware watchpoint on combination of Load/Store Effective Address(es)
+or Data.  For example:
+
+ at code{hwatch ($LEA == my_var) && ($LDATA < 50) || ($SEA == my_var) && ($SDATA >= 50)}
+
+ at code{hwatch ($LEA == my_var) && ($LDATA < 50) || ($SEA == my_var) && ($SDATA >= 50)}
+
+ at kindex htrace
+ at item htrace info
+Display information about current HW trace configuration.
+
+ at item htrace trigger @var{conditional}
+Set starting criteria for HW trace.
+
+ at item htrace qualifier @var{conditional}
+Set acquisition qualifier for HW trace.
+
+ at item htrace stop @var{conditional}
+Set HW trace stopping criteria.
+
+ at item htrace record [@var{data}]*
+Selects the data to be recorded, when qualifier is met and HW trace was
+triggered.
+
+ at item htrace enable
+ at itemx htrace disable
+Enables/disables the HW trace.
+
+ at item htrace rewind [@var{filename}]
+Clears currently recorded trace data.
+
+If filename is specified, new trace file is made and any newly collected data
+will be written there.
+
+ at item htrace print [@var{start} [@var{len}]]
+Prints trace buffer, using current record configuration.
+
+ at item htrace mode continuous
+Set continuous trace mode.
+
+ at item htrace mode suspend
+Set suspend trace mode.
+
+ at end table
+
+ at node PowerPC Embedded
+ at subsection PowerPC Embedded
+
+ at cindex DVC register
+ at value{GDBN} supports using the DVC (Data Value Compare) register to
+implement in hardware simple hardware watchpoint conditions of the form:
+
+ at smallexample
+(@value{GDBP}) watch @var{ADDRESS|VARIABLE} \
+  if  @var{ADDRESS|VARIABLE} == @var{CONSTANT EXPRESSION}
+ at end smallexample
+
+The DVC register will be automatically used when @value{GDBN} detects
+such pattern in a condition expression, and the created watchpoint uses one
+debug register (either the @code{exact-watchpoints} option is on and the
+variable is scalar, or the variable has a length of one byte).  This feature
+is available in native @value{GDBN} running on a Linux kernel version 2.6.34
+or newer.
+
+When running on PowerPC embedded processors, @value{GDBN} automatically uses
+ranged hardware watchpoints, unless the @code{exact-watchpoints} option is on,
+in which case watchpoints using only one debug register are created when
+watching variables of scalar types.
+
+You can create an artificial array to watch an arbitrary memory
+region using one of the following commands (@pxref{Expressions}):
+
+ at smallexample
+(@value{GDBP}) watch *((char *) @var{address})@@@var{length}
+(@value{GDBP}) watch @{char[@var{length}]@} @var{address}
+ at end smallexample
+
+PowerPC embedded processors support masked watchpoints.  See the discussion
+about the @code{mask} argument in @ref{Set Watchpoints}.
+
+ at cindex ranged breakpoint
+PowerPC embedded processors support hardware accelerated
+ at dfn{ranged breakpoints}.  A ranged breakpoint stops execution of
+the inferior whenever it executes an instruction at any address within
+the range it specifies.  To set a ranged breakpoint in @value{GDBN},
+use the @code{break-range} command.
+
+ at value{GDBN} provides the following PowerPC-specific commands:
+
+ at table @code
+ at kindex break-range
+ at item break-range @var{start-location}, @var{end-location}
+Set a breakpoint for an address range.
+ at var{start-location} and @var{end-location} can specify a function name,
+a line number, an offset of lines from the current line or from the start
+location, or an address of an instruction (see @ref{Specify Location},
+for a list of all the possible ways to specify a @var{location}.)
+The breakpoint will stop execution of the inferior whenever it
+executes an instruction at any address within the specified range,
+(including @var{start-location} and @var{end-location}.)
+
+ at kindex set powerpc
+ at item set powerpc soft-float
+ at itemx show powerpc soft-float
+Force @value{GDBN} to use (or not use) a software floating point calling
+convention.  By default, @value{GDBN} selects the calling convention based
+on the selected architecture and the provided executable file.
+
+ at item set powerpc vector-abi
+ at itemx show powerpc vector-abi
+Force @value{GDBN} to use the specified calling convention for vector
+arguments and return values.  The valid options are @samp{auto};
+ at samp{generic}, to avoid vector registers even if they are present;
+ at samp{altivec}, to use AltiVec registers; and @samp{spe} to use SPE
+registers.  By default, @value{GDBN} selects the calling convention
+based on the selected architecture and the provided executable file.
+
+ at item set powerpc exact-watchpoints
+ at itemx show powerpc exact-watchpoints
+Allow @value{GDBN} to use only one debug register when watching a variable
+of scalar type, thus assuming that the variable is accessed through the
+address of its first byte.
+
+ at kindex target dink32
+ at item target dink32 @var{dev}
+DINK32 ROM monitor.
+
+ at kindex target ppcbug
+ at item target ppcbug @var{dev}
+ at kindex target ppcbug1
+ at item target ppcbug1 @var{dev}
+PPCBUG ROM monitor for PowerPC.
+
+ at kindex target sds
+ at item target sds @var{dev}
+SDS monitor, running on a PowerPC board (such as Motorola's ADS).
+ at end table
+
+ at cindex SDS protocol
+The following commands specific to the SDS protocol are supported
+by @value{GDBN}:
+
+ at table @code
+ at item set sdstimeout @var{nsec}
+ at kindex set sdstimeout
+Set the timeout for SDS protocol reads to be @var{nsec} seconds.  The
+default is 2 seconds.
+
+ at item show sdstimeout
+ at kindex show sdstimeout
+Show the current value of the SDS timeout.
+
+ at item sds @var{command}
+ at kindex sds at r{, a command}
+Send the specified @var{command} string to the SDS monitor.
+ at end table
+
+
+ at node PA
+ at subsection HP PA Embedded
+
+ at table @code
+
+ at kindex target op50n
+ at item target op50n @var{dev}
+OP50N monitor, running on an OKI HPPA board.
+
+ at kindex target w89k
+ at item target w89k @var{dev}
+W89K monitor, running on a Winbond HPPA board.
+
+ at end table
+
+ at node Sparclet
+ at subsection Tsqware Sparclet
+
+ at cindex Sparclet
+
+ at value{GDBN} enables developers to debug tasks running on
+Sparclet targets from a Unix host.
+ at value{GDBN} uses code that runs on
+both the Unix host and on the Sparclet target.  The program
+ at code{@value{GDBP}} is installed and executed on the Unix host.
+
+ at table @code
+ at item remotetimeout @var{args}
+ at kindex remotetimeout
+ at value{GDBN} supports the option @code{remotetimeout}.
+This option is set by the user, and  @var{args} represents the number of
+seconds @value{GDBN} waits for responses.
+ at end table
+
+ at cindex compiling, on Sparclet
+When compiling for debugging, include the options @samp{-g} to get debug
+information and @samp{-Ttext} to relocate the program to where you wish to
+load it on the target.  You may also want to add the options @samp{-n} or
+ at samp{-N} in order to reduce the size of the sections.  Example:
+
+ at smallexample
+sparclet-aout-gcc prog.c -Ttext 0x12010000 -g -o prog -N
+ at end smallexample
+
+You can use @code{objdump} to verify that the addresses are what you intended:
+
+ at smallexample
+sparclet-aout-objdump --headers --syms prog
+ at end smallexample
+
+ at cindex running, on Sparclet
+Once you have set
+your Unix execution search path to find @value{GDBN}, you are ready to
+run @value{GDBN}.  From your Unix host, run @code{@value{GDBP}}
+(or @code{sparclet-aout-gdb}, depending on your installation).
+
+ at value{GDBN} comes up showing the prompt:
+
+ at smallexample
+(gdbslet)
+ at end smallexample
+
+ at menu
+* Sparclet File::                Setting the file to debug
+* Sparclet Connection::          Connecting to Sparclet
+* Sparclet Download::            Sparclet download
+* Sparclet Execution::           Running and debugging
+ at end menu
+
+ at node Sparclet File
+ at subsubsection Setting File to Debug
+
+The @value{GDBN} command @code{file} lets you choose with program to debug.
+
+ at smallexample
+(gdbslet) file prog
+ at end smallexample
+
+ at need 1000
+ at value{GDBN} then attempts to read the symbol table of @file{prog}.
+ at value{GDBN} locates
+the file by searching the directories listed in the command search
+path.
+If the file was compiled with debug information (option @samp{-g}), source
+files will be searched as well.
+ at value{GDBN} locates
+the source files by searching the directories listed in the directory search
+path (@pxref{Environment, ,Your Program's Environment}).
+If it fails
+to find a file, it displays a message such as:
+
+ at smallexample
+prog: No such file or directory.
+ at end smallexample
+
+When this happens, add the appropriate directories to the search paths with
+the @value{GDBN} commands @code{path} and @code{dir}, and execute the
+ at code{target} command again.
+
+ at node Sparclet Connection
+ at subsubsection Connecting to Sparclet
+
+The @value{GDBN} command @code{target} lets you connect to a Sparclet target.
+To connect to a target on serial port ``@code{ttya}'', type:
+
+ at smallexample
+(gdbslet) target sparclet /dev/ttya
+Remote target sparclet connected to /dev/ttya
+main () at ../prog.c:3
+ at end smallexample
+
+ at need 750
+ at value{GDBN} displays messages like these:
+
+ at smallexample
+Connected to ttya.
+ at end smallexample
+
+ at node Sparclet Download
+ at subsubsection Sparclet Download
+
+ at cindex download to Sparclet
+Once connected to the Sparclet target,
+you can use the @value{GDBN}
+ at code{load} command to download the file from the host to the target.
+The file name and load offset should be given as arguments to the @code{load}
+command.
+Since the file format is aout, the program must be loaded to the starting
+address.  You can use @code{objdump} to find out what this value is.  The load
+offset is an offset which is added to the VMA (virtual memory address)
+of each of the file's sections.
+For instance, if the program
+ at file{prog} was linked to text address 0x1201000, with data at 0x12010160
+and bss at 0x12010170, in @value{GDBN}, type:
+
+ at smallexample
+(gdbslet) load prog 0x12010000
+Loading section .text, size 0xdb0 vma 0x12010000
+ at end smallexample
+
+If the code is loaded at a different address then what the program was linked
+to, you may need to use the @code{section} and @code{add-symbol-file} commands
+to tell @value{GDBN} where to map the symbol table.
+
+ at node Sparclet Execution
+ at subsubsection Running and Debugging
+
+ at cindex running and debugging Sparclet programs
+You can now begin debugging the task using @value{GDBN}'s execution control
+commands, @code{b}, @code{step}, @code{run}, etc.  See the @value{GDBN}
+manual for the list of commands.
+
+ at smallexample
+(gdbslet) b main
+Breakpoint 1 at 0x12010000: file prog.c, line 3.
+(gdbslet) run
+Starting program: prog
+Breakpoint 1, main (argc=1, argv=0xeffff21c) at prog.c:3
+3        char *symarg = 0;
+(gdbslet) step
+4        char *execarg = "hello!";
+(gdbslet)
+ at end smallexample
+
+ at node Sparclite
+ at subsection Fujitsu Sparclite
+
+ at table @code
+
+ at kindex target sparclite
+ at item target sparclite @var{dev}
+Fujitsu sparclite boards, used only for the purpose of loading.
+You must use an additional command to debug the program.
+For example: target remote @var{dev} using @value{GDBN} standard
+remote protocol.
+
+ at end table
+
+ at node Z8000
+ at subsection Zilog Z8000
+
+ at cindex Z8000
+ at cindex simulator, Z8000
+ at cindex Zilog Z8000 simulator
+
+When configured for debugging Zilog Z8000 targets, @value{GDBN} includes
+a Z8000 simulator.
+
+For the Z8000 family, @samp{target sim} simulates either the Z8002 (the
+unsegmented variant of the Z8000 architecture) or the Z8001 (the
+segmented variant).  The simulator recognizes which architecture is
+appropriate by inspecting the object code.
+
+ at table @code
+ at item target sim @var{args}
+ at kindex sim
+ at kindex target sim at r{, with Z8000}
+Debug programs on a simulated CPU.  If the simulator supports setup
+options, specify them via @var{args}.
+ at end table
+
+ at noindent
+After specifying this target, you can debug programs for the simulated
+CPU in the same style as programs for your host computer; use the
+ at code{file} command to load a new program image, the @code{run} command
+to run your program, and so on.
+
+As well as making available all the usual machine registers
+(@pxref{Registers, ,Registers}), the Z8000 simulator provides three
+additional items of information as specially named registers:
+
+ at table @code
+
+ at item cycles
+Counts clock-ticks in the simulator.
+
+ at item insts
+Counts instructions run in the simulator.
+
+ at item time
+Execution time in 60ths of a second.
+
+ at end table
+
+You can refer to these values in @value{GDBN} expressions with the usual
+conventions; for example, @w{@samp{b fputc if $cycles>5000}} sets a
+conditional breakpoint that suspends only after at least 5000
+simulated clock ticks.
+
+ at node AVR
+ at subsection Atmel AVR
+ at cindex AVR
+
+When configured for debugging the Atmel AVR, @value{GDBN} supports the
+following AVR-specific commands:
+
+ at table @code
+ at item info io_registers
+ at kindex info io_registers at r{, AVR}
+ at cindex I/O registers (Atmel AVR)
+This command displays information about the AVR I/O registers.  For
+each register, @value{GDBN} prints its number and value.
+ at end table
+
+ at node CRIS
+ at subsection CRIS
+ at cindex CRIS
+
+When configured for debugging CRIS, @value{GDBN} provides the
+following CRIS-specific commands:
+
+ at table @code
+ at item set cris-version @var{ver}
+ at cindex CRIS version
+Set the current CRIS version to @var{ver}, either @samp{10} or @samp{32}.
+The CRIS version affects register names and sizes.  This command is useful in
+case autodetection of the CRIS version fails.
+
+ at item show cris-version
+Show the current CRIS version.
+
+ at item set cris-dwarf2-cfi
+ at cindex DWARF-2 CFI and CRIS
+Set the usage of DWARF-2 CFI for CRIS debugging.  The default is @samp{on}.
+Change to @samp{off} when using @code{gcc-cris} whose version is below 
+ at code{R59}.
+
+ at item show cris-dwarf2-cfi
+Show the current state of using DWARF-2 CFI.
+
+ at item set cris-mode @var{mode}
+ at cindex CRIS mode
+Set the current CRIS mode to @var{mode}.  It should only be changed when
+debugging in guru mode, in which case it should be set to 
+ at samp{guru} (the default is @samp{normal}).
+
+ at item show cris-mode
+Show the current CRIS mode.
+ at end table
+
+ at node Super-H
+ at subsection Renesas Super-H
+ at cindex Super-H
+
+For the Renesas Super-H processor, @value{GDBN} provides these
+commands:
+
+ at table @code
+ at item regs
+ at kindex regs at r{, Super-H}
+This command is deprecated, and @code{info all-registers} should be
+used instead.
+
+Show the values of all Super-H registers.
+
+ at item set sh calling-convention @var{convention}
+ at kindex set sh calling-convention
+Set the calling-convention used when calling functions from @value{GDBN}.
+Allowed values are @samp{gcc}, which is the default setting, and @samp{renesas}.
+With the @samp{gcc} setting, functions are called using the @value{NGCC} calling
+convention.  If the DWARF-2 information of the called function specifies
+that the function follows the Renesas calling convention, the function
+is called using the Renesas calling convention.  If the calling convention
+is set to @samp{renesas}, the Renesas calling convention is always used,
+regardless of the DWARF-2 information.  This can be used to override the
+default of @samp{gcc} if debug information is missing, or the compiler
+does not emit the DWARF-2 calling convention entry for a function.
+
+ at item show sh calling-convention
+ at kindex show sh calling-convention
+Show the current calling convention setting.
+
+ at end table
+
+
+ at node Architectures
+ at section Architectures
+
+This section describes characteristics of architectures that affect
+all uses of @value{GDBN} with the architecture, both native and cross.
+
+ at menu
+* i386::
+* Alpha::
+* MIPS::
+* HPPA::               HP PA architecture
+* SPU::                Cell Broadband Engine SPU architecture
+* PowerPC::
+ at end menu
+
+ at node i386
+ at subsection x86 Architecture-specific Issues
+
+ at table @code
+ at item set struct-convention @var{mode}
+ at kindex set struct-convention
+ at cindex struct return convention
+ at cindex struct/union returned in registers
+Set the convention used by the inferior to return @code{struct}s and
+ at code{union}s from functions to @var{mode}.  Possible values of
+ at var{mode} are @code{"pcc"}, @code{"reg"}, and @code{"default"} (the
+default).  @code{"default"} or @code{"pcc"} means that @code{struct}s
+are returned on the stack, while @code{"reg"} means that a
+ at code{struct} or a @code{union} whose size is 1, 2, 4, or 8 bytes will
+be returned in a register.
+
+ at item show struct-convention
+ at kindex show struct-convention
+Show the current setting of the convention to return @code{struct}s
+from functions.
+ at end table
+
+ at node Alpha
+ at subsection Alpha
+
+See the following section.
+
+ at node MIPS
+ at subsection @acronym{MIPS}
+
+ at cindex stack on Alpha
+ at cindex stack on @acronym{MIPS}
+ at cindex Alpha stack
+ at cindex @acronym{MIPS} stack
+Alpha- and @acronym{MIPS}-based computers use an unusual stack frame, which
+sometimes requires @value{GDBN} to search backward in the object code to
+find the beginning of a function.
+
+ at cindex response time, @acronym{MIPS} debugging
+To improve response time (especially for embedded applications, where
+ at value{GDBN} may be restricted to a slow serial line for this search)
+you may want to limit the size of this search, using one of these
+commands:
+
+ at table @code
+ at cindex @code{heuristic-fence-post} (Alpha, @acronym{MIPS})
+ at item set heuristic-fence-post @var{limit}
+Restrict @value{GDBN} to examining at most @var{limit} bytes in its
+search for the beginning of a function.  A value of @var{0} (the
+default) means there is no limit.  However, except for @var{0}, the
+larger the limit the more bytes @code{heuristic-fence-post} must search
+and therefore the longer it takes to run.  You should only need to use
+this command when debugging a stripped executable.
+
+ at item show heuristic-fence-post
+Display the current limit.
+ at end table
+
+ at noindent
+These commands are available @emph{only} when @value{GDBN} is configured
+for debugging programs on Alpha or @acronym{MIPS} processors.
+
+Several @acronym{MIPS}-specific commands are available when debugging @acronym{MIPS}
+programs:
+
+ at table @code
+ at item set mips abi @var{arg}
+ at kindex set mips abi
+ at cindex set ABI for @acronym{MIPS}
+Tell @value{GDBN} which @acronym{MIPS} ABI is used by the inferior.  Possible
+values of @var{arg} are:
+
+ at table @samp
+ at item auto
+The default ABI associated with the current binary (this is the
+default).
+ at item o32
+ at item o64
+ at item n32
+ at item n64
+ at item eabi32
+ at item eabi64
+ at end table
+
+ at item show mips abi
+ at kindex show mips abi
+Show the @acronym{MIPS} ABI used by @value{GDBN} to debug the inferior.
+
+ at item set mips compression @var{arg}
+ at kindex set mips compression
+ at cindex code compression, @acronym{MIPS}
+Tell @value{GDBN} which @acronym{MIPS} compressed
+ at acronym{ISA, Instruction Set Architecture} encoding is used by the
+inferior.  @value{GDBN} uses this for code disassembly and other
+internal interpretation purposes.  This setting is only referred to
+when no executable has been associated with the debugging session or
+the executable does not provide information about the encoding it uses.
+Otherwise this setting is automatically updated from information
+provided by the executable.
+
+Possible values of @var{arg} are @samp{mips16} and @samp{micromips}.
+The default compressed @acronym{ISA} encoding is @samp{mips16}, as
+executables containing @acronym{MIPS16} code frequently are not
+identified as such.
+
+This setting is ``sticky''; that is, it retains its value across
+debugging sessions until reset either explicitly with this command or
+implicitly from an executable.
+
+The compiler and/or assembler typically add symbol table annotations to
+identify functions compiled for the @acronym{MIPS16} or
+ at acronym{microMIPS} @acronym{ISA}s.  If these function-scope annotations
+are present, @value{GDBN} uses them in preference to the global
+compressed @acronym{ISA} encoding setting.
+
+ at item show mips compression
+ at kindex show mips compression
+Show the @acronym{MIPS} compressed @acronym{ISA} encoding used by
+ at value{GDBN} to debug the inferior.
+
+ at item set mipsfpu
+ at itemx show mipsfpu
+ at xref{MIPS Embedded, set mipsfpu}.
+
+ at item set mips mask-address @var{arg}
+ at kindex set mips mask-address
+ at cindex @acronym{MIPS} addresses, masking
+This command determines whether the most-significant 32 bits of 64-bit
+ at acronym{MIPS} addresses are masked off.  The argument @var{arg} can be
+ at samp{on}, @samp{off}, or @samp{auto}.  The latter is the default
+setting, which lets @value{GDBN} determine the correct value.
+
+ at item show mips mask-address
+ at kindex show mips mask-address
+Show whether the upper 32 bits of @acronym{MIPS} addresses are masked off or
+not.
+
+ at item set remote-mips64-transfers-32bit-regs
+ at kindex set remote-mips64-transfers-32bit-regs
+This command controls compatibility with 64-bit @acronym{MIPS} targets that
+transfer data in 32-bit quantities.  If you have an old @acronym{MIPS} 64 target
+that transfers 32 bits for some registers, like @sc{sr} and @sc{fsr},
+and 64 bits for other registers, set this option to @samp{on}.
+
+ at item show remote-mips64-transfers-32bit-regs
+ at kindex show remote-mips64-transfers-32bit-regs
+Show the current setting of compatibility with older @acronym{MIPS} 64 targets.
+
+ at item set debug mips
+ at kindex set debug mips
+This command turns on and off debugging messages for the @acronym{MIPS}-specific
+target code in @value{GDBN}.
+
+ at item show debug mips
+ at kindex show debug mips
+Show the current setting of @acronym{MIPS} debugging messages.
+ at end table
+
+
+ at node HPPA
+ at subsection HPPA
+ at cindex HPPA support
+
+When @value{GDBN} is debugging the HP PA architecture, it provides the
+following special commands:
+
+ at table @code
+ at item set debug hppa
+ at kindex set debug hppa
+This command determines whether HPPA architecture-specific debugging
+messages are to be displayed.
+
+ at item show debug hppa
+Show whether HPPA debugging messages are displayed.
+
+ at item maint print unwind @var{address}
+ at kindex maint print unwind at r{, HPPA}
+This command displays the contents of the unwind table entry at the
+given @var{address}.
+
+ at end table
+
+
+ at node SPU
+ at subsection Cell Broadband Engine SPU architecture
+ at cindex Cell Broadband Engine
+ at cindex SPU
+
+When @value{GDBN} is debugging the Cell Broadband Engine SPU architecture,
+it provides the following special commands:
+
+ at table @code
+ at item info spu event
+ at kindex info spu
+Display SPU event facility status.  Shows current event mask
+and pending event status.
+
+ at item info spu signal
+Display SPU signal notification facility status.  Shows pending
+signal-control word and signal notification mode of both signal
+notification channels.
+
+ at item info spu mailbox
+Display SPU mailbox facility status.  Shows all pending entries,
+in order of processing, in each of the SPU Write Outbound,
+SPU Write Outbound Interrupt, and SPU Read Inbound mailboxes.
+
+ at item info spu dma
+Display MFC DMA status.  Shows all pending commands in the MFC
+DMA queue.  For each entry, opcode, tag, class IDs, effective
+and local store addresses and transfer size are shown.
+
+ at item info spu proxydma
+Display MFC Proxy-DMA status.  Shows all pending commands in the MFC
+Proxy-DMA queue.  For each entry, opcode, tag, class IDs, effective
+and local store addresses and transfer size are shown.
+
+ at end table
+ 
+When @value{GDBN} is debugging a combined PowerPC/SPU application
+on the Cell Broadband Engine, it provides in addition the following
+special commands:
+
+ at table @code
+ at item set spu stop-on-load @var{arg}
+ at kindex set spu
+Set whether to stop for new SPE threads.  When set to @code{on}, @value{GDBN}
+will give control to the user when a new SPE thread enters its @code{main}
+function.  The default is @code{off}.
+
+ at item show spu stop-on-load
+ at kindex show spu
+Show whether to stop for new SPE threads.
+
+ at item set spu auto-flush-cache @var{arg}
+Set whether to automatically flush the software-managed cache.  When set to
+ at code{on}, @value{GDBN} will automatically cause the SPE software-managed
+cache to be flushed whenever SPE execution stops.  This provides a consistent
+view of PowerPC memory that is accessed via the cache.  If an application
+does not use the software-managed cache, this option has no effect.
+
+ at item show spu auto-flush-cache
+Show whether to automatically flush the software-managed cache.
+
+ at end table
+
+ at node PowerPC
+ at subsection PowerPC
+ at cindex PowerPC architecture
+
+When @value{GDBN} is debugging the PowerPC architecture, it provides a set of 
+pseudo-registers to enable inspection of 128-bit wide Decimal Floating Point
+numbers stored in the floating point registers. These values must be stored
+in two consecutive registers, always starting at an even register like
+ at code{f0} or @code{f2}.
+
+The pseudo-registers go from @code{$dl0} through @code{$dl15}, and are formed
+by joining the even/odd register pairs @code{f0} and @code{f1} for @code{$dl0},
+ at code{f2} and @code{f3} for @code{$dl1} and so on.
+
+For POWER7 processors, @value{GDBN} provides a set of pseudo-registers, the 64-bit
+wide Extended Floating Point Registers (@samp{f32} through @samp{f63}).
+
+
+ at node Controlling GDB
+ at chapter Controlling @value{GDBN}
+
+You can alter the way @value{GDBN} interacts with you by using the
+ at code{set} command.  For commands controlling how @value{GDBN} displays
+data, see @ref{Print Settings, ,Print Settings}.  Other settings are
+described here.
+
+ at menu
+* Prompt::                      Prompt
+* Editing::                     Command editing
+* Command History::             Command history
+* Screen Size::                 Screen size
+* Numbers::                     Numbers
+* ABI::                         Configuring the current ABI
+* Auto-loading::                Automatically loading associated files
+* Messages/Warnings::           Optional warnings and messages
+* Debugging Output::            Optional messages about internal happenings
+* Other Misc Settings::         Other Miscellaneous Settings
+ at end menu
+
+ at node Prompt
+ at section Prompt
+
+ at cindex prompt
+
+ at value{GDBN} indicates its readiness to read a command by printing a string
+called the @dfn{prompt}.  This string is normally @samp{(@value{GDBP})}.  You
+can change the prompt string with the @code{set prompt} command.  For
+instance, when debugging @value{GDBN} with @value{GDBN}, it is useful to change
+the prompt in one of the @value{GDBN} sessions so that you can always tell
+which one you are talking to.
+
+ at emph{Note:}  @code{set prompt} does not add a space for you after the
+prompt you set.  This allows you to set a prompt which ends in a space
+or a prompt that does not.
+
+ at table @code
+ at kindex set prompt
+ at item set prompt @var{newprompt}
+Directs @value{GDBN} to use @var{newprompt} as its prompt string henceforth.
+
+ at kindex show prompt
+ at item show prompt
+Prints a line of the form: @samp{Gdb's prompt is: @var{your-prompt}}
+ at end table
+
+Versions of @value{GDBN} that ship with Python scripting enabled have
+prompt extensions.  The commands for interacting with these extensions
+are:
+
+ at table @code
+ at kindex set extended-prompt
+ at item set extended-prompt @var{prompt}
+Set an extended prompt that allows for substitutions.
+ at xref{gdb.prompt}, for a list of escape sequences that can be used for
+substitution.  Any escape sequences specified as part of the prompt
+string are replaced with the corresponding strings each time the prompt
+is displayed.
+
+For example:
+
+ at smallexample
+set extended-prompt Current working directory: \w (gdb)
+ at end smallexample
+
+Note that when an extended-prompt is set, it takes control of the
+ at var{prompt_hook} hook.  @xref{prompt_hook}, for further information.
+
+ at kindex show extended-prompt
+ at item show extended-prompt
+Prints the extended prompt.  Any escape sequences specified as part of
+the prompt string with @code{set extended-prompt}, are replaced with the
+corresponding strings each time the prompt is displayed.
+ at end table
+
+ at node Editing
+ at section Command Editing
+ at cindex readline
+ at cindex command line editing
+
+ at value{GDBN} reads its input commands via the @dfn{Readline} interface.  This
+ at sc{gnu} library provides consistent behavior for programs which provide a
+command line interface to the user.  Advantages are @sc{gnu} Emacs-style
+or @dfn{vi}-style inline editing of commands, @code{csh}-like history
+substitution, and a storage and recall of command history across
+debugging sessions.
+
+You may control the behavior of command line editing in @value{GDBN} with the
+command @code{set}.
+
+ at table @code
+ at kindex set editing
+ at cindex editing
+ at item set editing
+ at itemx set editing on
+Enable command line editing (enabled by default).
+
+ at item set editing off
+Disable command line editing.
+
+ at kindex show editing
+ at item show editing
+Show whether command line editing is enabled.
+ at end table
+
+ at ifset SYSTEM_READLINE
+ at xref{Command Line Editing, , , rluserman, GNU Readline Library},
+ at end ifset
+ at ifclear SYSTEM_READLINE
+ at xref{Command Line Editing},
+ at end ifclear
+for more details about the Readline
+interface.  Users unfamiliar with @sc{gnu} Emacs or @code{vi} are
+encouraged to read that chapter.
+
+ at node Command History
+ at section Command History
+ at cindex command history
+
+ at value{GDBN} can keep track of the commands you type during your
+debugging sessions, so that you can be certain of precisely what
+happened.  Use these commands to manage the @value{GDBN} command
+history facility.
+
+ at value{GDBN} uses the @sc{gnu} History library, a part of the Readline
+package, to provide the history facility.
+ at ifset SYSTEM_READLINE
+ at xref{Using History Interactively, , , history, GNU History Library},
+ at end ifset
+ at ifclear SYSTEM_READLINE
+ at xref{Using History Interactively},
+ at end ifclear
+for the detailed description of the History library.
+
+To issue a command to @value{GDBN} without affecting certain aspects of
+the state which is seen by users, prefix it with @samp{server }
+(@pxref{Server Prefix}).  This
+means that this command will not affect the command history, nor will it
+affect @value{GDBN}'s notion of which command to repeat if @key{RET} is
+pressed on a line by itself.
+
+ at cindex @code{server}, command prefix
+The server prefix does not affect the recording of values into the value
+history; to print a value without recording it into the value history,
+use the @code{output} command instead of the @code{print} command.
+
+Here is the description of @value{GDBN} commands related to command
+history.
+
+ at table @code
+ at cindex history substitution
+ at cindex history file
+ at kindex set history filename
+ at cindex @env{GDBHISTFILE}, environment variable
+ at item set history filename @var{fname}
+Set the name of the @value{GDBN} command history file to @var{fname}.
+This is the file where @value{GDBN} reads an initial command history
+list, and where it writes the command history from this session when it
+exits.  You can access this list through history expansion or through
+the history command editing characters listed below.  This file defaults
+to the value of the environment variable @code{GDBHISTFILE}, or to
+ at file{./.gdb_history} (@file{./_gdb_history} on MS-DOS) if this variable
+is not set.
+
+ at cindex save command history
+ at kindex set history save
+ at item set history save
+ at itemx set history save on
+Record command history in a file, whose name may be specified with the
+ at code{set history filename} command.  By default, this option is disabled.
+
+ at item set history save off
+Stop recording command history in a file.
+
+ at cindex history size
+ at kindex set history size
+ at cindex @env{HISTSIZE}, environment variable
+ at item set history size @var{size}
+Set the number of commands which @value{GDBN} keeps in its history list.
+This defaults to the value of the environment variable
+ at code{HISTSIZE}, or to 256 if this variable is not set.
+ at end table
+
+History expansion assigns special meaning to the character @kbd{!}.
+ at ifset SYSTEM_READLINE
+ at xref{Event Designators, , , history, GNU History Library},
+ at end ifset
+ at ifclear SYSTEM_READLINE
+ at xref{Event Designators},
+ at end ifclear
+for more details.
+
+ at cindex history expansion, turn on/off
+Since @kbd{!} is also the logical not operator in C, history expansion
+is off by default. If you decide to enable history expansion with the
+ at code{set history expansion on} command, you may sometimes need to
+follow @kbd{!} (when it is used as logical not, in an expression) with
+a space or a tab to prevent it from being expanded.  The readline
+history facilities do not attempt substitution on the strings
+ at kbd{!=} and @kbd{!(}, even when history expansion is enabled.
+
+The commands to control history expansion are:
+
+ at table @code
+ at item set history expansion on
+ at itemx set history expansion
+ at kindex set history expansion
+Enable history expansion.  History expansion is off by default.
+
+ at item set history expansion off
+Disable history expansion.
+
+ at c @group
+ at kindex show history
+ at item show history
+ at itemx show history filename
+ at itemx show history save
+ at itemx show history size
+ at itemx show history expansion
+These commands display the state of the @value{GDBN} history parameters.
+ at code{show history} by itself displays all four states.
+ at c @end group
+ at end table
+
+ at table @code
+ at kindex show commands
+ at cindex show last commands
+ at cindex display command history
+ at item show commands
+Display the last ten commands in the command history.
+
+ at item show commands @var{n}
+Print ten commands centered on command number @var{n}.
+
+ at item show commands +
+Print ten commands just after the commands last printed.
+ at end table
+
+ at node Screen Size
+ at section Screen Size
+ at cindex size of screen
+ at cindex pauses in output
+
+Certain commands to @value{GDBN} may produce large amounts of
+information output to the screen.  To help you read all of it,
+ at value{GDBN} pauses and asks you for input at the end of each page of
+output.  Type @key{RET} when you want to continue the output, or @kbd{q}
+to discard the remaining output.  Also, the screen width setting
+determines when to wrap lines of output.  Depending on what is being
+printed, @value{GDBN} tries to break the line at a readable place,
+rather than simply letting it overflow onto the following line.
+
+Normally @value{GDBN} knows the size of the screen from the terminal
+driver software.  For example, on Unix @value{GDBN} uses the termcap data base
+together with the value of the @code{TERM} environment variable and the
+ at code{stty rows} and @code{stty cols} settings.  If this is not correct,
+you can override it with the @code{set height} and @code{set
+width} commands:
+
+ at table @code
+ at kindex set height
+ at kindex set width
+ at kindex show width
+ at kindex show height
+ at item set height @var{lpp}
+ at itemx show height
+ at itemx set width @var{cpl}
+ at itemx show width
+These @code{set} commands specify a screen height of @var{lpp} lines and
+a screen width of @var{cpl} characters.  The associated @code{show}
+commands display the current settings.
+
+If you specify a height of zero lines, @value{GDBN} does not pause during
+output no matter how long the output is.  This is useful if output is to a
+file or to an editor buffer.
+
+Likewise, you can specify @samp{set width 0} to prevent @value{GDBN}
+from wrapping its output.
+
+ at item set pagination on
+ at itemx set pagination off
+ at kindex set pagination
+Turn the output pagination on or off; the default is on.  Turning
+pagination off is the alternative to @code{set height 0}.  Note that
+running @value{GDBN} with the @option{--batch} option (@pxref{Mode
+Options, -batch}) also automatically disables pagination.
+
+ at item show pagination
+ at kindex show pagination
+Show the current pagination mode.
+ at end table
+
+ at node Numbers
+ at section Numbers
+ at cindex number representation
+ at cindex entering numbers
+
+You can always enter numbers in octal, decimal, or hexadecimal in
+ at value{GDBN} by the usual conventions: octal numbers begin with
+ at samp{0}, decimal numbers end with @samp{.}, and hexadecimal numbers
+begin with @samp{0x}.  Numbers that neither begin with @samp{0} or
+ at samp{0x}, nor end with a @samp{.} are, by default, entered in base
+10; likewise, the default display for numbers---when no particular
+format is specified---is base 10.  You can change the default base for
+both input and output with the commands described below.
+
+ at table @code
+ at kindex set input-radix
+ at item set input-radix @var{base}
+Set the default base for numeric input.  Supported choices
+for @var{base} are decimal 8, 10, or 16.  @var{base} must itself be
+specified either unambiguously or using the current input radix; for
+example, any of
+
+ at smallexample
+set input-radix 012
+set input-radix 10.
+set input-radix 0xa
+ at end smallexample
+
+ at noindent
+sets the input base to decimal.  On the other hand, @samp{set input-radix 10}
+leaves the input radix unchanged, no matter what it was, since
+ at samp{10}, being without any leading or trailing signs of its base, is
+interpreted in the current radix.  Thus, if the current radix is 16,
+ at samp{10} is interpreted in hex, i.e.@: as 16 decimal, which doesn't
+change the radix.
+
+ at kindex set output-radix
+ at item set output-radix @var{base}
+Set the default base for numeric display.  Supported choices
+for @var{base} are decimal 8, 10, or 16.  @var{base} must itself be
+specified either unambiguously or using the current input radix.
+
+ at kindex show input-radix
+ at item show input-radix
+Display the current default base for numeric input.
+
+ at kindex show output-radix
+ at item show output-radix
+Display the current default base for numeric display.
+
+ at item set radix @r{[}@var{base}@r{]}
+ at itemx show radix
+ at kindex set radix
+ at kindex show radix
+These commands set and show the default base for both input and output
+of numbers.  @code{set radix} sets the radix of input and output to
+the same base; without an argument, it resets the radix back to its
+default value of 10.
+
+ at end table
+
+ at node ABI
+ at section Configuring the Current ABI
+
+ at value{GDBN} can determine the @dfn{ABI} (Application Binary Interface) of your
+application automatically.  However, sometimes you need to override its
+conclusions.  Use these commands to manage @value{GDBN}'s view of the
+current ABI.
+
+ at cindex OS ABI
+ at kindex set osabi
+ at kindex show osabi
+
+One @value{GDBN} configuration can debug binaries for multiple operating
+system targets, either via remote debugging or native emulation.
+ at value{GDBN} will autodetect the @dfn{OS ABI} (Operating System ABI) in use,
+but you can override its conclusion using the @code{set osabi} command.
+One example where this is useful is in debugging of binaries which use
+an alternate C library (e.g.@: @sc{uClibc} for @sc{gnu}/Linux) which does
+not have the same identifying marks that the standard C library for your
+platform provides.
+
+ at table @code
+ at item show osabi
+Show the OS ABI currently in use.
+
+ at item set osabi
+With no argument, show the list of registered available OS ABI's.
+
+ at item set osabi @var{abi}
+Set the current OS ABI to @var{abi}.
+ at end table
+
+ at cindex float promotion
+
+Generally, the way that an argument of type @code{float} is passed to a
+function depends on whether the function is prototyped.  For a prototyped
+(i.e.@: ANSI/ISO style) function, @code{float} arguments are passed unchanged,
+according to the architecture's convention for @code{float}.  For unprototyped
+(i.e.@: K&R style) functions, @code{float} arguments are first promoted to type
+ at code{double} and then passed.
+
+Unfortunately, some forms of debug information do not reliably indicate whether
+a function is prototyped.  If @value{GDBN} calls a function that is not marked
+as prototyped, it consults @kbd{set coerce-float-to-double}.
+
+ at table @code
+ at kindex set coerce-float-to-double
+ at item set coerce-float-to-double
+ at itemx set coerce-float-to-double on
+Arguments of type @code{float} will be promoted to @code{double} when passed
+to an unprototyped function.  This is the default setting.
+
+ at item set coerce-float-to-double off
+Arguments of type @code{float} will be passed directly to unprototyped
+functions.
+
+ at kindex show coerce-float-to-double
+ at item show coerce-float-to-double
+Show the current setting of promoting @code{float} to @code{double}.
+ at end table
+
+ at kindex set cp-abi
+ at kindex show cp-abi
+ at value{GDBN} needs to know the ABI used for your program's C at t{++}
+objects.  The correct C at t{++} ABI depends on which C at t{++} compiler was
+used to build your application.  @value{GDBN} only fully supports
+programs with a single C at t{++} ABI; if your program contains code using
+multiple C at t{++} ABI's or if @value{GDBN} can not identify your
+program's ABI correctly, you can tell @value{GDBN} which ABI to use.
+Currently supported ABI's include ``gnu-v2'', for @code{g++} versions
+before 3.0, ``gnu-v3'', for @code{g++} versions 3.0 and later, and
+``hpaCC'' for the HP ANSI C at t{++} compiler.  Other C at t{++} compilers may
+use the ``gnu-v2'' or ``gnu-v3'' ABI's as well.  The default setting is
+``auto''.
+
+ at table @code
+ at item show cp-abi
+Show the C at t{++} ABI currently in use.
+
+ at item set cp-abi
+With no argument, show the list of supported C at t{++} ABI's.
+
+ at item set cp-abi @var{abi}
+ at itemx set cp-abi auto
+Set the current C at t{++} ABI to @var{abi}, or return to automatic detection.
+ at end table
+
+ at node Auto-loading
+ at section Automatically loading associated files
+ at cindex auto-loading
+
+ at value{GDBN} sometimes reads files with commands and settings automatically,
+without being explicitly told so by the user.  We call this feature
+ at dfn{auto-loading}.  While auto-loading is useful for automatically adapting
+ at value{GDBN} to the needs of your project, it can sometimes produce unexpected
+results or introduce security risks (e.g., if the file comes from untrusted
+sources).
+
+Note that loading of these associated files (including the local @file{.gdbinit}
+file) requires accordingly configured @code{auto-load safe-path}
+(@pxref{Auto-loading safe path}).
+
+For these reasons, @value{GDBN} includes commands and options to let you
+control when to auto-load files and which files should be auto-loaded.
+
+ at table @code
+ at anchor{set auto-load off}
+ at kindex set auto-load off
+ at item set auto-load off
+Globally disable loading of all auto-loaded files.
+You may want to use this command with the @samp{-iex} option
+(@pxref{Option -init-eval-command}) such as:
+ at smallexample
+$ @kbd{gdb -iex "set auto-load off" untrusted-executable corefile}
+ at end smallexample
+
+Be aware that system init file (@pxref{System-wide configuration})
+and init files from your home directory (@pxref{Home Directory Init File})
+still get read (as they come from generally trusted directories).
+To prevent @value{GDBN} from auto-loading even those init files, use the
+ at option{-nx} option (@pxref{Mode Options}), in addition to
+ at code{set auto-load no}.
+
+ at anchor{show auto-load}
+ at kindex show auto-load
+ at item show auto-load
+Show whether auto-loading of each specific @samp{auto-load} file(s) is enabled
+or disabled.
+
+ at smallexample
+(gdb) show auto-load
+gdb-scripts:  Auto-loading of canned sequences of commands scripts is on.
+libthread-db:  Auto-loading of inferior specific libthread_db is on.
+local-gdbinit:  Auto-loading of .gdbinit script from current directory
+                is on.
+python-scripts:  Auto-loading of Python scripts is on.
+safe-path:  List of directories from which it is safe to auto-load files
+            is $debugdir:$datadir/auto-load.
+scripts-directory:  List of directories from which to load auto-loaded scripts
+                    is $debugdir:$datadir/auto-load.
+ at end smallexample
+
+ at anchor{info auto-load}
+ at kindex info auto-load
+ at item info auto-load
+Print whether each specific @samp{auto-load} file(s) have been auto-loaded or
+not.
+
+ at smallexample
+(gdb) info auto-load
+gdb-scripts:
+Loaded  Script
+Yes     /home/user/gdb/gdb-gdb.gdb
+libthread-db:  No auto-loaded libthread-db.
+local-gdbinit:  Local .gdbinit file "/home/user/gdb/.gdbinit" has been
+                loaded.
+python-scripts:
+Loaded  Script
+Yes     /home/user/gdb/gdb-gdb.py
+ at end smallexample
+ at end table
+
+These are various kinds of files @value{GDBN} can automatically load:
+
+ at itemize @bullet
+ at item
+ at xref{objfile-gdb.py file}, controlled by @ref{set auto-load python-scripts}.
+ at item
+ at xref{objfile-gdb.gdb file}, controlled by @ref{set auto-load gdb-scripts}.
+ at item
+ at xref{dotdebug_gdb_scripts section},
+controlled by @ref{set auto-load python-scripts}.
+ at item
+ at xref{Init File in the Current Directory},
+controlled by @ref{set auto-load local-gdbinit}.
+ at item
+ at xref{libthread_db.so.1 file}, controlled by @ref{set auto-load libthread-db}.
+ at end itemize
+
+These are @value{GDBN} control commands for the auto-loading:
+
+ at multitable @columnfractions .5 .5
+ at item @xref{set auto-load off}.
+ at tab Disable auto-loading globally.
+ at item @xref{show auto-load}.
+ at tab Show setting of all kinds of files.
+ at item @xref{info auto-load}.
+ at tab Show state of all kinds of files.
+ at item @xref{set auto-load gdb-scripts}.
+ at tab Control for @value{GDBN} command scripts.
+ at item @xref{show auto-load gdb-scripts}.
+ at tab Show setting of @value{GDBN} command scripts.
+ at item @xref{info auto-load gdb-scripts}.
+ at tab Show state of @value{GDBN} command scripts.
+ at item @xref{set auto-load python-scripts}.
+ at tab Control for @value{GDBN} Python scripts.
+ at item @xref{show auto-load python-scripts}.
+ at tab Show setting of @value{GDBN} Python scripts.
+ at item @xref{info auto-load python-scripts}.
+ at tab Show state of @value{GDBN} Python scripts.
+ at item @xref{set auto-load scripts-directory}.
+ at tab Control for @value{GDBN} auto-loaded scripts location.
+ at item @xref{show auto-load scripts-directory}.
+ at tab Show @value{GDBN} auto-loaded scripts location.
+ at item @xref{set auto-load local-gdbinit}.
+ at tab Control for init file in the current directory.
+ at item @xref{show auto-load local-gdbinit}.
+ at tab Show setting of init file in the current directory.
+ at item @xref{info auto-load local-gdbinit}.
+ at tab Show state of init file in the current directory.
+ at item @xref{set auto-load libthread-db}.
+ at tab Control for thread debugging library.
+ at item @xref{show auto-load libthread-db}.
+ at tab Show setting of thread debugging library.
+ at item @xref{info auto-load libthread-db}.
+ at tab Show state of thread debugging library.
+ at item @xref{set auto-load safe-path}.
+ at tab Control directories trusted for automatic loading.
+ at item @xref{show auto-load safe-path}.
+ at tab Show directories trusted for automatic loading.
+ at item @xref{add-auto-load-safe-path}.
+ at tab Add directory trusted for automatic loading.
+ at end multitable
+
+ at menu
+* Init File in the Current Directory:: @samp{set/show/info auto-load local-gdbinit}
+* libthread_db.so.1 file::             @samp{set/show/info auto-load libthread-db}
+* objfile-gdb.gdb file::               @samp{set/show/info auto-load gdb-script}
+* Auto-loading safe path::             @samp{set/show/info auto-load safe-path}
+* Auto-loading verbose mode::          @samp{set/show debug auto-load}
+ at xref{Python Auto-loading}.
+ at end menu
+
+ at node Init File in the Current Directory
+ at subsection Automatically loading init file in the current directory
+ at cindex auto-loading init file in the current directory
+
+By default, @value{GDBN} reads and executes the canned sequences of commands
+from init file (if any) in the current working directory,
+see @ref{Init File in the Current Directory during Startup}.
+
+Note that loading of this local @file{.gdbinit} file also requires accordingly
+configured @code{auto-load safe-path} (@pxref{Auto-loading safe path}).
+
+ at table @code
+ at anchor{set auto-load local-gdbinit}
+ at kindex set auto-load local-gdbinit
+ at item set auto-load local-gdbinit [on|off]
+Enable or disable the auto-loading of canned sequences of commands
+(@pxref{Sequences}) found in init file in the current directory.
+
+ at anchor{show auto-load local-gdbinit}
+ at kindex show auto-load local-gdbinit
+ at item show auto-load local-gdbinit
+Show whether auto-loading of canned sequences of commands from init file in the
+current directory is enabled or disabled.
+
+ at anchor{info auto-load local-gdbinit}
+ at kindex info auto-load local-gdbinit
+ at item info auto-load local-gdbinit
+Print whether canned sequences of commands from init file in the
+current directory have been auto-loaded.
+ at end table
+
+ at node libthread_db.so.1 file
+ at subsection Automatically loading thread debugging library
+ at cindex auto-loading libthread_db.so.1
+
+This feature is currently present only on @sc{gnu}/Linux native hosts.
+
+ at value{GDBN} reads in some cases thread debugging library from places specific
+to the inferior (@pxref{set libthread-db-search-path}).
+
+The special @samp{libthread-db-search-path} entry @samp{$sdir} is processed
+without checking this @samp{set auto-load libthread-db} switch as system
+libraries have to be trusted in general.  In all other cases of
+ at samp{libthread-db-search-path} entries @value{GDBN} checks first if @samp{set
+auto-load libthread-db} is enabled before trying to open such thread debugging
+library.
+
+Note that loading of this debugging library also requires accordingly configured
+ at code{auto-load safe-path} (@pxref{Auto-loading safe path}).
+
+ at table @code
+ at anchor{set auto-load libthread-db}
+ at kindex set auto-load libthread-db
+ at item set auto-load libthread-db [on|off]
+Enable or disable the auto-loading of inferior specific thread debugging library.
+
+ at anchor{show auto-load libthread-db}
+ at kindex show auto-load libthread-db
+ at item show auto-load libthread-db
+Show whether auto-loading of inferior specific thread debugging library is
+enabled or disabled.
+
+ at anchor{info auto-load libthread-db}
+ at kindex info auto-load libthread-db
+ at item info auto-load libthread-db
+Print the list of all loaded inferior specific thread debugging libraries and
+for each such library print list of inferior @var{pid}s using it.
+ at end table
+
+ at node objfile-gdb.gdb file
+ at subsection The @file{@var{objfile}-gdb.gdb} file
+ at cindex auto-loading @file{@var{objfile}-gdb.gdb}
+
+ at value{GDBN} tries to load an @file{@var{objfile}-gdb.gdb} file containing
+canned sequences of commands (@pxref{Sequences}), as long as @samp{set
+auto-load gdb-scripts} is set to @samp{on}.
+
+Note that loading of this script file also requires accordingly configured
+ at code{auto-load safe-path} (@pxref{Auto-loading safe path}).
+
+For more background refer to the similar Python scripts auto-loading
+description (@pxref{objfile-gdb.py file}).
+
+ at table @code
+ at anchor{set auto-load gdb-scripts}
+ at kindex set auto-load gdb-scripts
+ at item set auto-load gdb-scripts [on|off]
+Enable or disable the auto-loading of canned sequences of commands scripts.
+
+ at anchor{show auto-load gdb-scripts}
+ at kindex show auto-load gdb-scripts
+ at item show auto-load gdb-scripts
+Show whether auto-loading of canned sequences of commands scripts is enabled or
+disabled.
+
+ at anchor{info auto-load gdb-scripts}
+ at kindex info auto-load gdb-scripts
+ at cindex print list of auto-loaded canned sequences of commands scripts
+ at item info auto-load gdb-scripts [@var{regexp}]
+Print the list of all canned sequences of commands scripts that @value{GDBN}
+auto-loaded.
+ at end table
+
+If @var{regexp} is supplied only canned sequences of commands scripts with
+matching names are printed.
+
+ at node Auto-loading safe path
+ at subsection Security restriction for auto-loading
+ at cindex auto-loading safe-path
+
+As the files of inferior can come from untrusted source (such as submitted by
+an application user) @value{GDBN} does not always load any files automatically.
+ at value{GDBN} provides the @samp{set auto-load safe-path} setting to list
+directories trusted for loading files not explicitly requested by user.
+Each directory can also be a shell wildcard pattern.
+
+If the path is not set properly you will see a warning and the file will not
+get loaded:
+
+ at smallexample
+$ ./gdb -q ./gdb
+Reading symbols from /home/user/gdb/gdb...done.
+warning: File "/home/user/gdb/gdb-gdb.gdb" auto-loading has been
+         declined by your `auto-load safe-path' set
+         to "$debugdir:$datadir/auto-load".
+warning: File "/home/user/gdb/gdb-gdb.py" auto-loading has been
+         declined by your `auto-load safe-path' set
+         to "$debugdir:$datadir/auto-load".
+ at end smallexample
+
+The list of trusted directories is controlled by the following commands:
+
+ at table @code
+ at anchor{set auto-load safe-path}
+ at kindex set auto-load safe-path
+ at item set auto-load safe-path @r{[}@var{directories}@r{]}
+Set the list of directories (and their subdirectories) trusted for automatic
+loading and execution of scripts.  You can also enter a specific trusted file.
+Each directory can also be a shell wildcard pattern; wildcards do not match
+directory separator - see @code{FNM_PATHNAME} for system function @code{fnmatch}
+(@pxref{Wildcard Matching, fnmatch, , libc, GNU C Library Reference Manual}).
+If you omit @var{directories}, @samp{auto-load safe-path} will be reset to
+its default value as specified during @value{GDBN} compilation.
+
+The list of directories uses path separator (@samp{:} on GNU and Unix
+systems, @samp{;} on MS-Windows and MS-DOS) to separate directories, similarly
+to the @env{PATH} environment variable.
+
+ at anchor{show auto-load safe-path}
+ at kindex show auto-load safe-path
+ at item show auto-load safe-path
+Show the list of directories trusted for automatic loading and execution of
+scripts.
+
+ at anchor{add-auto-load-safe-path}
+ at kindex add-auto-load-safe-path
+ at item add-auto-load-safe-path
+Add an entry (or list of entries) the list of directories trusted for automatic
+loading and execution of scripts.  Multiple entries may be delimited by the
+host platform path separator in use.
+ at end table
+
+This variable defaults to what @code{--with-auto-load-dir} has been configured
+to (@pxref{with-auto-load-dir}).  @file{$debugdir} and @file{$datadir}
+substitution applies the same as for @ref{set auto-load scripts-directory}.
+The default @code{set auto-load safe-path} value can be also overriden by
+ at value{GDBN} configuration option @option{--with-auto-load-safe-path}.
+
+Setting this variable to @file{/} disables this security protection,
+corresponding @value{GDBN} configuration option is
+ at option{--without-auto-load-safe-path}.
+This variable is supposed to be set to the system directories writable by the
+system superuser only.  Users can add their source directories in init files in
+their home directories (@pxref{Home Directory Init File}).  See also deprecated
+init file in the current directory
+(@pxref{Init File in the Current Directory during Startup}).
+
+To force @value{GDBN} to load the files it declined to load in the previous
+example, you could use one of the following ways:
+
+ at table @asis
+ at item @file{~/.gdbinit}: @samp{add-auto-load-safe-path ~/src/gdb}
+Specify this trusted directory (or a file) as additional component of the list.
+You have to specify also any existing directories displayed by
+by @samp{show auto-load safe-path} (such as @samp{/usr:/bin} in this example).
+
+ at item @kbd{gdb -iex "set auto-load safe-path /usr:/bin:~/src/gdb" @dots{}}
+Specify this directory as in the previous case but just for a single
+ at value{GDBN} session.
+
+ at item @kbd{gdb -iex "set auto-load safe-path /" @dots{}}
+Disable auto-loading safety for a single @value{GDBN} session.
+This assumes all the files you debug during this @value{GDBN} session will come
+from trusted sources.
+
+ at item @kbd{./configure --without-auto-load-safe-path}
+During compilation of @value{GDBN} you may disable any auto-loading safety.
+This assumes all the files you will ever debug with this @value{GDBN} come from
+trusted sources.
+ at end table
+
+On the other hand you can also explicitly forbid automatic files loading which
+also suppresses any such warning messages:
+
+ at table @asis
+ at item @kbd{gdb -iex "set auto-load no" @dots{}}
+You can use @value{GDBN} command-line option for a single @value{GDBN} session.
+
+ at item @file{~/.gdbinit}: @samp{set auto-load no}
+Disable auto-loading globally for the user
+(@pxref{Home Directory Init File}).  While it is improbable, you could also
+use system init file instead (@pxref{System-wide configuration}).
+ at end table
+
+This setting applies to the file names as entered by user.  If no entry matches
+ at value{GDBN} tries as a last resort to also resolve all the file names into
+their canonical form (typically resolving symbolic links) and compare the
+entries again.  @value{GDBN} already canonicalizes most of the filenames on its
+own before starting the comparison so a canonical form of directories is
+recommended to be entered.
+
+ at node Auto-loading verbose mode
+ at subsection Displaying files tried for auto-load
+ at cindex auto-loading verbose mode
+
+For better visibility of all the file locations where you can place scripts to
+be auto-loaded with inferior --- or to protect yourself against accidental
+execution of untrusted scripts --- @value{GDBN} provides a feature for printing
+all the files attempted to be loaded.  Both existing and non-existing files may
+be printed.
+
+For example the list of directories from which it is safe to auto-load files
+(@pxref{Auto-loading safe path}) applies also to canonicalized filenames which
+may not be too obvious while setting it up.
+
+ at smallexample
+(gdb) set debug auto-load on
+(gdb) file ~/src/t/true
+auto-load: Loading canned sequences of commands script "/tmp/true-gdb.gdb"
+           for objfile "/tmp/true".
+auto-load: Updating directories of "/usr:/opt".
+auto-load: Using directory "/usr".
+auto-load: Using directory "/opt".
+warning: File "/tmp/true-gdb.gdb" auto-loading has been declined
+         by your `auto-load safe-path' set to "/usr:/opt".
+ at end smallexample
+
+ at table @code
+ at anchor{set debug auto-load}
+ at kindex set debug auto-load
+ at item set debug auto-load [on|off]
+Set whether to print the filenames attempted to be auto-loaded.
+
+ at anchor{show debug auto-load}
+ at kindex show debug auto-load
+ at item show debug auto-load
+Show whether printing of the filenames attempted to be auto-loaded is turned
+on or off.
+ at end table
+
+ at node Messages/Warnings
+ at section Optional Warnings and Messages
+
+ at cindex verbose operation
+ at cindex optional warnings
+By default, @value{GDBN} is silent about its inner workings.  If you are
+running on a slow machine, you may want to use the @code{set verbose}
+command.  This makes @value{GDBN} tell you when it does a lengthy
+internal operation, so you will not think it has crashed.
+
+Currently, the messages controlled by @code{set verbose} are those
+which announce that the symbol table for a source file is being read;
+see @code{symbol-file} in @ref{Files, ,Commands to Specify Files}.
+
+ at table @code
+ at kindex set verbose
+ at item set verbose on
+Enables @value{GDBN} output of certain informational messages.
+
+ at item set verbose off
+Disables @value{GDBN} output of certain informational messages.
+
+ at kindex show verbose
+ at item show verbose
+Displays whether @code{set verbose} is on or off.
+ at end table
+
+By default, if @value{GDBN} encounters bugs in the symbol table of an
+object file, it is silent; but if you are debugging a compiler, you may
+find this information useful (@pxref{Symbol Errors, ,Errors Reading
+Symbol Files}).
+
+ at table @code
+
+ at kindex set complaints
+ at item set complaints @var{limit}
+Permits @value{GDBN} to output @var{limit} complaints about each type of
+unusual symbols before becoming silent about the problem.  Set
+ at var{limit} to zero to suppress all complaints; set it to a large number
+to prevent complaints from being suppressed.
+
+ at kindex show complaints
+ at item show complaints
+Displays how many symbol complaints @value{GDBN} is permitted to produce.
+
+ at end table
+
+ at anchor{confirmation requests}
+By default, @value{GDBN} is cautious, and asks what sometimes seems to be a
+lot of stupid questions to confirm certain commands.  For example, if
+you try to run a program which is already running:
+
+ at smallexample
+(@value{GDBP}) run
+The program being debugged has been started already.
+Start it from the beginning? (y or n)
+ at end smallexample
+
+If you are willing to unflinchingly face the consequences of your own
+commands, you can disable this ``feature'':
+
+ at table @code
+
+ at kindex set confirm
+ at cindex flinching
+ at cindex confirmation
+ at cindex stupid questions
+ at item set confirm off
+Disables confirmation requests.  Note that running @value{GDBN} with
+the @option{--batch} option (@pxref{Mode Options, -batch}) also
+automatically disables confirmation requests.
+
+ at item set confirm on
+Enables confirmation requests (the default).
+
+ at kindex show confirm
+ at item show confirm
+Displays state of confirmation requests.
+
+ at end table
+
+ at cindex command tracing
+If you need to debug user-defined commands or sourced files you may find it
+useful to enable @dfn{command tracing}.  In this mode each command will be
+printed as it is executed, prefixed with one or more @samp{+} symbols, the
+quantity denoting the call depth of each command.
+
+ at table @code
+ at kindex set trace-commands
+ at cindex command scripts, debugging
+ at item set trace-commands on
+Enable command tracing.
+ at item set trace-commands off
+Disable command tracing.
+ at item show trace-commands
+Display the current state of command tracing.
+ at end table
+
+ at node Debugging Output
+ at section Optional Messages about Internal Happenings
+ at cindex optional debugging messages
+
+ at value{GDBN} has commands that enable optional debugging messages from
+various @value{GDBN} subsystems; normally these commands are of
+interest to @value{GDBN} maintainers, or when reporting a bug.  This
+section documents those commands.
+
+ at table @code
+ at kindex set exec-done-display
+ at item set exec-done-display
+Turns on or off the notification of asynchronous commands'
+completion.  When on, @value{GDBN} will print a message when an
+asynchronous command finishes its execution.  The default is off.
+ at kindex show exec-done-display
+ at item show exec-done-display
+Displays the current setting of asynchronous command completion
+notification.
+ at kindex set debug
+ at cindex gdbarch debugging info
+ at cindex architecture debugging info
+ at item set debug arch
+Turns on or off display of gdbarch debugging info.  The default is off
+ at kindex show debug
+ at item show debug arch
+Displays the current state of displaying gdbarch debugging info.
+ at item set debug aix-thread
+ at cindex AIX threads
+Display debugging messages about inner workings of the AIX thread
+module.
+ at item show debug aix-thread
+Show the current state of AIX thread debugging info display.
+ at item set debug check-physname
+ at cindex physname
+Check the results of the ``physname'' computation.  When reading DWARF
+debugging information for C at t{++}, @value{GDBN} attempts to compute
+each entity's name.  @value{GDBN} can do this computation in two
+different ways, depending on exactly what information is present.
+When enabled, this setting causes @value{GDBN} to compute the names
+both ways and display any discrepancies.
+ at item show debug check-physname
+Show the current state of ``physname'' checking.
+ at item set debug dwarf2-die
+ at cindex DWARF2 DIEs
+Dump DWARF2 DIEs after they are read in.
+The value is the number of nesting levels to print.
+A value of zero turns off the display.
+ at item show debug dwarf2-die
+Show the current state of DWARF2 DIE debugging.
+ at item set debug dwarf2-read
+ at cindex DWARF2 Reading
+Turns on or off display of debugging messages related to reading
+DWARF debug info.  The default is off.
+ at item show debug dwarf2-read
+Show the current state of DWARF2 reader debugging.
+ at item set debug displaced
+ at cindex displaced stepping debugging info
+Turns on or off display of @value{GDBN} debugging info for the
+displaced stepping support.  The default is off.
+ at item show debug displaced
+Displays the current state of displaying @value{GDBN} debugging info
+related to displaced stepping.
+ at item set debug event
+ at cindex event debugging info
+Turns on or off display of @value{GDBN} event debugging info.  The
+default is off.
+ at item show debug event
+Displays the current state of displaying @value{GDBN} event debugging
+info.
+ at item set debug expression
+ at cindex expression debugging info
+Turns on or off display of debugging info about @value{GDBN}
+expression parsing.  The default is off.
+ at item show debug expression
+Displays the current state of displaying debugging info about
+ at value{GDBN} expression parsing.
+ at item set debug frame
+ at cindex frame debugging info
+Turns on or off display of @value{GDBN} frame debugging info.  The
+default is off.
+ at item show debug frame
+Displays the current state of displaying @value{GDBN} frame debugging
+info.
+ at item set debug gnu-nat
+ at cindex @sc{gnu}/Hurd debug messages
+Turns on or off debugging messages from the @sc{gnu}/Hurd debug support.
+ at item show debug gnu-nat
+Show the current state of @sc{gnu}/Hurd debugging messages.
+ at item set debug infrun
+ at cindex inferior debugging info
+Turns on or off display of @value{GDBN} debugging info for running the inferior.
+The default is off.  @file{infrun.c} contains GDB's runtime state machine used 
+for implementing operations such as single-stepping the inferior.
+ at item show debug infrun
+Displays the current state of @value{GDBN} inferior debugging.
+ at item set debug jit
+ at cindex just-in-time compilation, debugging messages
+Turns on or off debugging messages from JIT debug support.
+ at item show debug jit
+Displays the current state of @value{GDBN} JIT debugging.
+ at item set debug lin-lwp
+ at cindex @sc{gnu}/Linux LWP debug messages
+ at cindex Linux lightweight processes
+Turns on or off debugging messages from the Linux LWP debug support.
+ at item show debug lin-lwp
+Show the current state of Linux LWP debugging messages.
+ at item set debug observer
+ at cindex observer debugging info
+Turns on or off display of @value{GDBN} observer debugging.  This
+includes info such as the notification of observable events.
+ at item show debug observer
+Displays the current state of observer debugging.
+ at item set debug overload
+ at cindex C at t{++} overload debugging info
+Turns on or off display of @value{GDBN} C at t{++} overload debugging
+info. This includes info such as ranking of functions, etc.  The default
+is off.
+ at item show debug overload
+Displays the current state of displaying @value{GDBN} C at t{++} overload
+debugging info.
+ at cindex expression parser, debugging info
+ at cindex debug expression parser
+ at item set debug parser
+Turns on or off the display of expression parser debugging output.
+Internally, this sets the @code{yydebug} variable in the expression
+parser.  @xref{Tracing, , Tracing Your Parser, bison, Bison}, for
+details.  The default is off.
+ at item show debug parser
+Show the current state of expression parser debugging.
+ at cindex packets, reporting on stdout
+ at cindex serial connections, debugging
+ at cindex debug remote protocol
+ at cindex remote protocol debugging
+ at cindex display remote packets
+ at item set debug remote
+Turns on or off display of reports on all packets sent back and forth across
+the serial line to the remote machine.  The info is printed on the
+ at value{GDBN} standard output stream. The default is off.
+ at item show debug remote
+Displays the state of display of remote packets.
+ at item set debug serial
+Turns on or off display of @value{GDBN} serial debugging info. The
+default is off.
+ at item show debug serial
+Displays the current state of displaying @value{GDBN} serial debugging
+info.
+ at item set debug solib-frv
+ at cindex FR-V shared-library debugging
+Turns on or off debugging messages for FR-V shared-library code.
+ at item show debug solib-frv
+Display the current state of FR-V shared-library code debugging
+messages.
+ at item set debug symtab-create
+ at cindex symbol table creation
+Turns on or off display of debugging messages related to symbol table creation.
+The default is off.
+ at item show debug symtab-create
+Show the current state of symbol table creation debugging.
+ at item set debug target
+ at cindex target debugging info
+Turns on or off display of @value{GDBN} target debugging info. This info
+includes what is going on at the target level of GDB, as it happens. The
+default is 0.  Set it to 1 to track events, and to 2 to also track the
+value of large memory transfers.  Changes to this flag do not take effect
+until the next time you connect to a target or use the @code{run} command.
+ at item show debug target
+Displays the current state of displaying @value{GDBN} target debugging
+info.
+ at item set debug timestamp
+ at cindex timestampping debugging info
+Turns on or off display of timestamps with @value{GDBN} debugging info.
+When enabled, seconds and microseconds are displayed before each debugging
+message.
+ at item show debug timestamp
+Displays the current state of displaying timestamps with @value{GDBN}
+debugging info.
+ at item set debugvarobj
+ at cindex variable object debugging info
+Turns on or off display of @value{GDBN} variable object debugging
+info. The default is off.
+ at item show debugvarobj
+Displays the current state of displaying @value{GDBN} variable object
+debugging info.
+ at item set debug xml
+ at cindex XML parser debugging
+Turns on or off debugging messages for built-in XML parsers.
+ at item show debug xml
+Displays the current state of XML debugging messages.
+ at end table
+
+ at node Other Misc Settings
+ at section Other Miscellaneous Settings
+ at cindex miscellaneous settings
+
+ at table @code
+ at kindex set interactive-mode
+ at item set interactive-mode
+If @code{on}, forces @value{GDBN} to assume that GDB was started
+in a terminal.  In practice, this means that @value{GDBN} should wait
+for the user to answer queries generated by commands entered at
+the command prompt.  If @code{off}, forces @value{GDBN} to operate
+in the opposite mode, and it uses the default answers to all queries.
+If @code{auto} (the default), @value{GDBN} tries to determine whether
+its standard input is a terminal, and works in interactive-mode if it
+is, non-interactively otherwise.
+
+In the vast majority of cases, the debugger should be able to guess
+correctly which mode should be used.  But this setting can be useful
+in certain specific cases, such as running a MinGW @value{GDBN}
+inside a cygwin window.
+
+ at kindex show interactive-mode
+ at item show interactive-mode
+Displays whether the debugger is operating in interactive mode or not.
+ at end table
+
+ at node Extending GDB
+ at chapter Extending @value{GDBN}
+ at cindex extending GDB
+
+ at value{GDBN} provides three mechanisms for extension.  The first is based
+on composition of @value{GDBN} commands, the second is based on the
+Python scripting language, and the third is for defining new aliases of
+existing commands.
+
+To facilitate the use of the first two extensions, @value{GDBN} is capable
+of evaluating the contents of a file.  When doing so, @value{GDBN}
+can recognize which scripting language is being used by looking at
+the filename extension.  Files with an unrecognized filename extension
+are always treated as a @value{GDBN} Command Files.
+ at xref{Command Files,, Command files}.
+
+You can control how @value{GDBN} evaluates these files with the following
+setting:
+
+ at table @code
+ at kindex set script-extension
+ at kindex show script-extension
+ at item set script-extension off
+All scripts are always evaluated as @value{GDBN} Command Files.
+
+ at item set script-extension soft
+The debugger determines the scripting language based on filename
+extension.  If this scripting language is supported, @value{GDBN}
+evaluates the script using that language.  Otherwise, it evaluates
+the file as a @value{GDBN} Command File.
+
+ at item set script-extension strict
+The debugger determines the scripting language based on filename
+extension, and evaluates the script using that language.  If the
+language is not supported, then the evaluation fails.
+
+ at item show script-extension
+Display the current value of the @code{script-extension} option.
+
+ at end table
+
+ at menu
+* Sequences::          Canned Sequences of Commands
+* Python::             Scripting @value{GDBN} using Python
+* Aliases::            Creating new spellings of existing commands
+ at end menu
+
+ at node Sequences
+ at section Canned Sequences of Commands
+
+Aside from breakpoint commands (@pxref{Break Commands, ,Breakpoint
+Command Lists}), @value{GDBN} provides two ways to store sequences of
+commands for execution as a unit: user-defined commands and command
+files.
+
+ at menu
+* Define::             How to define your own commands
+* Hooks::              Hooks for user-defined commands
+* Command Files::      How to write scripts of commands to be stored in a file
+* Output::             Commands for controlled output
+ at end menu
+
+ at node Define
+ at subsection User-defined Commands
+
+ at cindex user-defined command
+ at cindex arguments, to user-defined commands
+A @dfn{user-defined command} is a sequence of @value{GDBN} commands to
+which you assign a new name as a command.  This is done with the
+ at code{define} command.  User commands may accept up to 10 arguments
+separated by whitespace.  Arguments are accessed within the user command
+via @code{$arg0 at dots{}$arg9}.  A trivial example:
+
+ at smallexample
+define adder
+  print $arg0 + $arg1 + $arg2
+end
+ at end smallexample
+
+ at noindent
+To execute the command use:
+
+ at smallexample
+adder 1 2 3
+ at end smallexample
+
+ at noindent
+This defines the command @code{adder}, which prints the sum of
+its three arguments.  Note the arguments are text substitutions, so they may
+reference variables, use complex expressions, or even perform inferior
+functions calls.
+
+ at cindex argument count in user-defined commands
+ at cindex how many arguments (user-defined commands)
+In addition, @code{$argc} may be used to find out how many arguments have
+been passed.  This expands to a number in the range 0 at dots{}10.
+
+ at smallexample
+define adder
+  if $argc == 2
+    print $arg0 + $arg1
+  end
+  if $argc == 3
+    print $arg0 + $arg1 + $arg2
+  end
+end
+ at end smallexample
+
+ at table @code
+
+ at kindex define
+ at item define @var{commandname}
+Define a command named @var{commandname}.  If there is already a command
+by that name, you are asked to confirm that you want to redefine it.
+ at var{commandname} may be a bare command name consisting of letters,
+numbers, dashes, and underscores.  It may also start with any predefined
+prefix command.  For example, @samp{define target my-target} creates
+a user-defined @samp{target my-target} command.
+
+The definition of the command is made up of other @value{GDBN} command lines,
+which are given following the @code{define} command.  The end of these
+commands is marked by a line containing @code{end}.
+
+ at kindex document
+ at kindex end at r{ (user-defined commands)}
+ at item document @var{commandname}
+Document the user-defined command @var{commandname}, so that it can be
+accessed by @code{help}.  The command @var{commandname} must already be
+defined.  This command reads lines of documentation just as @code{define}
+reads the lines of the command definition, ending with @code{end}.
+After the @code{document} command is finished, @code{help} on command
+ at var{commandname} displays the documentation you have written.
+
+You may use the @code{document} command again to change the
+documentation of a command.  Redefining the command with @code{define}
+does not change the documentation.
+
+ at kindex dont-repeat
+ at cindex don't repeat command
+ at item dont-repeat
+Used inside a user-defined command, this tells @value{GDBN} that this
+command should not be repeated when the user hits @key{RET}
+(@pxref{Command Syntax, repeat last command}).
+
+ at kindex help user-defined
+ at item help user-defined
+List all user-defined commands and all python commands defined in class
+COMAND_USER.  The first line of the documentation or docstring is
+included (if any).
+
+ at kindex show user
+ at item show user
+ at itemx show user @var{commandname}
+Display the @value{GDBN} commands used to define @var{commandname} (but
+not its documentation).  If no @var{commandname} is given, display the
+definitions for all user-defined commands.
+This does not work for user-defined python commands.
+
+ at cindex infinite recursion in user-defined commands
+ at kindex show max-user-call-depth
+ at kindex set max-user-call-depth
+ at item show max-user-call-depth
+ at itemx set max-user-call-depth
+The value of @code{max-user-call-depth} controls how many recursion
+levels are allowed in user-defined commands before @value{GDBN} suspects an
+infinite recursion and aborts the command.
+This does not apply to user-defined python commands.
+ at end table
+
+In addition to the above commands, user-defined commands frequently
+use control flow commands, described in @ref{Command Files}.
+
+When user-defined commands are executed, the
+commands of the definition are not printed.  An error in any command
+stops execution of the user-defined command.
+
+If used interactively, commands that would ask for confirmation proceed
+without asking when used inside a user-defined command.  Many @value{GDBN}
+commands that normally print messages to say what they are doing omit the
+messages when used in a user-defined command.
+
+ at node Hooks
+ at subsection User-defined Command Hooks
+ at cindex command hooks
+ at cindex hooks, for commands
+ at cindex hooks, pre-command
+
+ at kindex hook
+You may define @dfn{hooks}, which are a special kind of user-defined
+command.  Whenever you run the command @samp{foo}, if the user-defined
+command @samp{hook-foo} exists, it is executed (with no arguments)
+before that command.
+
+ at cindex hooks, post-command
+ at kindex hookpost
+A hook may also be defined which is run after the command you executed.
+Whenever you run the command @samp{foo}, if the user-defined command
+ at samp{hookpost-foo} exists, it is executed (with no arguments) after
+that command.  Post-execution hooks may exist simultaneously with
+pre-execution hooks, for the same command.
+
+It is valid for a hook to call the command which it hooks.  If this
+occurs, the hook is not re-executed, thereby avoiding infinite recursion.
+
+ at c It would be nice if hookpost could be passed a parameter indicating
+ at c if the command it hooks executed properly or not.  FIXME!
+
+ at kindex stop at r{, a pseudo-command}
+In addition, a pseudo-command, @samp{stop} exists.  Defining
+(@samp{hook-stop}) makes the associated commands execute every time
+execution stops in your program: before breakpoint commands are run,
+displays are printed, or the stack frame is printed.
+
+For example, to ignore @code{SIGALRM} signals while
+single-stepping, but treat them normally during normal execution,
+you could define:
+
+ at smallexample
+define hook-stop
+handle SIGALRM nopass
+end
+
+define hook-run
+handle SIGALRM pass
+end
+
+define hook-continue
+handle SIGALRM pass
+end
+ at end smallexample
+
+As a further example, to hook at the beginning and end of the @code{echo}
+command, and to add extra text to the beginning and end of the message,
+you could define:
+
+ at smallexample
+define hook-echo
+echo <<<---
+end
+
+define hookpost-echo
+echo --->>>\n
+end
+
+(@value{GDBP}) echo Hello World
+<<<---Hello World--->>>
+(@value{GDBP})
+
+ at end smallexample
+
+You can define a hook for any single-word command in @value{GDBN}, but
+not for command aliases; you should define a hook for the basic command
+name, e.g.@:  @code{backtrace} rather than @code{bt}.
+ at c FIXME!  So how does Joe User discover whether a command is an alias
+ at c or not?
+You can hook a multi-word command by adding @code{hook-} or
+ at code{hookpost-} to the last word of the command, e.g.@:
+ at samp{define target hook-remote} to add a hook to @samp{target remote}.
+
+If an error occurs during the execution of your hook, execution of
+ at value{GDBN} commands stops and @value{GDBN} issues a prompt
+(before the command that you actually typed had a chance to run).
+
+If you try to define a hook which does not match any known command, you
+get a warning from the @code{define} command.
+
+ at node Command Files
+ at subsection Command Files
+
+ at cindex command files
+ at cindex scripting commands
+A command file for @value{GDBN} is a text file made of lines that are
+ at value{GDBN} commands.  Comments (lines starting with @kbd{#}) may
+also be included.  An empty line in a command file does nothing; it
+does not mean to repeat the last command, as it would from the
+terminal.
+
+You can request the execution of a command file with the @code{source}
+command.  Note that the @code{source} command is also used to evaluate
+scripts that are not Command Files.  The exact behavior can be configured
+using the @code{script-extension} setting.
+ at xref{Extending GDB,, Extending GDB}.
+
+ at table @code
+ at kindex source
+ at cindex execute commands from a file
+ at item source [-s] [-v] @var{filename}
+Execute the command file @var{filename}.
+ at end table
+
+The lines in a command file are generally executed sequentially,
+unless the order of execution is changed by one of the
+ at emph{flow-control commands} described below.  The commands are not
+printed as they are executed.  An error in any command terminates
+execution of the command file and control is returned to the console.
+
+ at value{GDBN} first searches for @var{filename} in the current directory.
+If the file is not found there, and @var{filename} does not specify a
+directory, then @value{GDBN} also looks for the file on the source search path
+(specified with the @samp{directory} command);
+except that @file{$cdir} is not searched because the compilation directory
+is not relevant to scripts.
+
+If @code{-s} is specified, then @value{GDBN} searches for @var{filename}
+on the search path even if @var{filename} specifies a directory.
+The search is done by appending @var{filename} to each element of the
+search path.  So, for example, if @var{filename} is @file{mylib/myscript}
+and the search path contains @file{/home/user} then @value{GDBN} will
+look for the script @file{/home/user/mylib/myscript}.
+The search is also done if @var{filename} is an absolute path.
+For example, if @var{filename} is @file{/tmp/myscript} and
+the search path contains @file{/home/user} then @value{GDBN} will
+look for the script @file{/home/user/tmp/myscript}.
+For DOS-like systems, if @var{filename} contains a drive specification,
+it is stripped before concatenation.  For example, if @var{filename} is
+ at file{d:myscript} and the search path contains @file{c:/tmp} then @value{GDBN}
+will look for the script @file{c:/tmp/myscript}.
+
+If @code{-v}, for verbose mode, is given then @value{GDBN} displays
+each command as it is executed.  The option must be given before
+ at var{filename}, and is interpreted as part of the filename anywhere else.
+
+Commands that would ask for confirmation if used interactively proceed
+without asking when used in a command file.  Many @value{GDBN} commands that
+normally print messages to say what they are doing omit the messages
+when called from command files.
+
+ at value{GDBN} also accepts command input from standard input.  In this
+mode, normal output goes to standard output and error output goes to
+standard error.  Errors in a command file supplied on standard input do
+not terminate execution of the command file---execution continues with
+the next command.
+
+ at smallexample
+gdb < cmds > log 2>&1
+ at end smallexample
+
+(The syntax above will vary depending on the shell used.) This example
+will execute commands from the file @file{cmds}. All output and errors
+would be directed to @file{log}.
+
+Since commands stored on command files tend to be more general than
+commands typed interactively, they frequently need to deal with
+complicated situations, such as different or unexpected values of
+variables and symbols, changes in how the program being debugged is
+built, etc.  @value{GDBN} provides a set of flow-control commands to
+deal with these complexities.  Using these commands, you can write
+complex scripts that loop over data structures, execute commands
+conditionally, etc.
+
+ at table @code
+ at kindex if
+ at kindex else
+ at item if
+ at itemx else
+This command allows to include in your script conditionally executed
+commands. The @code{if} command takes a single argument, which is an
+expression to evaluate.  It is followed by a series of commands that
+are executed only if the expression is true (its value is nonzero).
+There can then optionally be an @code{else} line, followed by a series
+of commands that are only executed if the expression was false.  The
+end of the list is marked by a line containing @code{end}.
+
+ at kindex while
+ at item while
+This command allows to write loops.  Its syntax is similar to
+ at code{if}: the command takes a single argument, which is an expression
+to evaluate, and must be followed by the commands to execute, one per
+line, terminated by an @code{end}.  These commands are called the
+ at dfn{body} of the loop.  The commands in the body of @code{while} are
+executed repeatedly as long as the expression evaluates to true.
+
+ at kindex loop_break
+ at item loop_break
+This command exits the @code{while} loop in whose body it is included.
+Execution of the script continues after that @code{while}s @code{end}
+line.
+
+ at kindex loop_continue
+ at item loop_continue
+This command skips the execution of the rest of the body of commands
+in the @code{while} loop in whose body it is included.  Execution
+branches to the beginning of the @code{while} loop, where it evaluates
+the controlling expression.
+
+ at kindex end at r{ (if/else/while commands)}
+ at item end
+Terminate the block of commands that are the body of @code{if},
+ at code{else}, or @code{while} flow-control commands.
+ at end table
+
+
+ at node Output
+ at subsection Commands for Controlled Output
+
+During the execution of a command file or a user-defined command, normal
+ at value{GDBN} output is suppressed; the only output that appears is what is
+explicitly printed by the commands in the definition.  This section
+describes three commands useful for generating exactly the output you
+want.
+
+ at table @code
+ at kindex echo
+ at item echo @var{text}
+ at c I do not consider backslash-space a standard C escape sequence
+ at c because it is not in ANSI.
+Print @var{text}.  Nonprinting characters can be included in
+ at var{text} using C escape sequences, such as @samp{\n} to print a
+newline.  @strong{No newline is printed unless you specify one.}
+In addition to the standard C escape sequences, a backslash followed
+by a space stands for a space.  This is useful for displaying a
+string with spaces at the beginning or the end, since leading and
+trailing spaces are otherwise trimmed from all arguments.
+To print @samp{@w{ }and foo =@w{ }}, use the command
+ at samp{echo \@w{ }and foo = \@w{ }}.
+
+A backslash at the end of @var{text} can be used, as in C, to continue
+the command onto subsequent lines.  For example,
+
+ at smallexample
+echo This is some text\n\
+which is continued\n\
+onto several lines.\n
+ at end smallexample
+
+produces the same output as
+
+ at smallexample
+echo This is some text\n
+echo which is continued\n
+echo onto several lines.\n
+ at end smallexample
+
+ at kindex output
+ at item output @var{expression}
+Print the value of @var{expression} and nothing but that value: no
+newlines, no @samp{$@var{nn} = }.  The value is not entered in the
+value history either.  @xref{Expressions, ,Expressions}, for more information
+on expressions.
+
+ at item output/@var{fmt} @var{expression}
+Print the value of @var{expression} in format @var{fmt}.  You can use
+the same formats as for @code{print}.  @xref{Output Formats,,Output
+Formats}, for more information.
+
+ at kindex printf
+ at item printf @var{template}, @var{expressions}@dots{}
+Print the values of one or more @var{expressions} under the control of
+the string @var{template}.  To print several values, make
+ at var{expressions} be a comma-separated list of individual expressions,
+which may be either numbers or pointers.  Their values are printed as
+specified by @var{template}, exactly as a C program would do by
+executing the code below:
+
+ at smallexample
+printf (@var{template}, @var{expressions}@dots{});
+ at end smallexample
+
+As in @code{C} @code{printf}, ordinary characters in @var{template}
+are printed verbatim, while @dfn{conversion specification} introduced
+by the @samp{%} character cause subsequent @var{expressions} to be
+evaluated, their values converted and formatted according to type and
+style information encoded in the conversion specifications, and then
+printed.
+
+For example, you can print two values in hex like this:
+
+ at smallexample
+printf "foo, bar-foo = 0x%x, 0x%x\n", foo, bar-foo
+ at end smallexample
+
+ at code{printf} supports all the standard @code{C} conversion
+specifications, including the flags and modifiers between the @samp{%}
+character and the conversion letter, with the following exceptions:
+
+ at itemize @bullet
+ at item
+The argument-ordering modifiers, such as @samp{2$}, are not supported.
+
+ at item
+The modifier @samp{*} is not supported for specifying precision or
+width.
+
+ at item
+The @samp{'} flag (for separation of digits into groups according to
+ at code{LC_NUMERIC'}) is not supported.
+
+ at item
+The type modifiers @samp{hh}, @samp{j}, @samp{t}, and @samp{z} are not
+supported.
+
+ at item
+The conversion letter @samp{n} (as in @samp{%n}) is not supported.
+
+ at item
+The conversion letters @samp{a} and @samp{A} are not supported.
+ at end itemize
+
+ at noindent
+Note that the @samp{ll} type modifier is supported only if the
+underlying @code{C} implementation used to build @value{GDBN} supports
+the @code{long long int} type, and the @samp{L} type modifier is
+supported only if @code{long double} type is available.
+
+As in @code{C}, @code{printf} supports simple backslash-escape
+sequences, such as @code{\n}, @samp{\t}, @samp{\\}, @samp{\"},
+ at samp{\a}, and @samp{\f}, that consist of backslash followed by a
+single character.  Octal and hexadecimal escape sequences are not
+supported.
+
+Additionally, @code{printf} supports conversion specifications for DFP
+(@dfn{Decimal Floating Point}) types using the following length modifiers
+together with a floating point specifier.
+letters:
+
+ at itemize @bullet
+ at item
+ at samp{H} for printing @code{Decimal32} types.
+
+ at item
+ at samp{D} for printing @code{Decimal64} types.
+
+ at item
+ at samp{DD} for printing @code{Decimal128} types.
+ at end itemize
+
+If the underlying @code{C} implementation used to build @value{GDBN} has
+support for the three length modifiers for DFP types, other modifiers
+such as width and precision will also be available for @value{GDBN} to use.
+
+In case there is no such @code{C} support, no additional modifiers will be
+available and the value will be printed in the standard way.
+
+Here's an example of printing DFP types using the above conversion letters:
+ at smallexample
+printf "D32: %Hf - D64: %Df - D128: %DDf\n",1.2345df,1.2E10dd,1.2E1dl
+ at end smallexample
+
+ at kindex eval
+ at item eval @var{template}, @var{expressions}@dots{}
+Convert the values of one or more @var{expressions} under the control of
+the string @var{template} to a command line, and call it.
+
+ at end table
+
+ at node Python
+ at section Scripting @value{GDBN} using Python
+ at cindex python scripting
+ at cindex scripting with python
+
+You can script @value{GDBN} using the @uref{http://www.python.org/,
+Python programming language}.  This feature is available only if
+ at value{GDBN} was configured using @option{--with-python}.
+
+ at cindex python directory
+Python scripts used by @value{GDBN} should be installed in
+ at file{@var{data-directory}/python}, where @var{data-directory} is
+the data directory as determined at @value{GDBN} startup (@pxref{Data Files}).
+This directory, known as the @dfn{python directory},
+is automatically added to the Python Search Path in order to allow
+the Python interpreter to locate all scripts installed at this location.
+
+Additionally, @value{GDBN} commands and convenience functions which
+are written in Python and are located in the
+ at file{@var{data-directory}/python/gdb/command} or
+ at file{@var{data-directory}/python/gdb/function} directories are
+automatically imported when @value{GDBN} starts.
+
+ at menu
+* Python Commands::             Accessing Python from @value{GDBN}.
+* Python API::                  Accessing @value{GDBN} from Python.
+* Python Auto-loading::         Automatically loading Python code.
+* Python modules::              Python modules provided by @value{GDBN}.
+ at end menu
+
+ at node Python Commands
+ at subsection Python Commands
+ at cindex python commands
+ at cindex commands to access python
+
+ at value{GDBN} provides one command for accessing the Python interpreter,
+and one related setting:
+
+ at table @code
+ at kindex python
+ at item python @r{[}@var{code}@r{]}
+The @code{python} command can be used to evaluate Python code.
+
+If given an argument, the @code{python} command will evaluate the
+argument as a Python command.  For example:
+
+ at smallexample
+(@value{GDBP}) python print 23
+23
+ at end smallexample
+
+If you do not provide an argument to @code{python}, it will act as a
+multi-line command, like @code{define}.  In this case, the Python
+script is made up of subsequent command lines, given after the
+ at code{python} command.  This command list is terminated using a line
+containing @code{end}.  For example:
+
+ at smallexample
+(@value{GDBP}) python
+Type python script
+End with a line saying just "end".
+>print 23
+>end
+23
+ at end smallexample
+
+ at kindex set python print-stack
+ at item set python print-stack
+By default, @value{GDBN} will print only the message component of a
+Python exception when an error occurs in a Python script.  This can be
+controlled using @code{set python print-stack}: if @code{full}, then
+full Python stack printing is enabled; if @code{none}, then Python stack
+and message printing is disabled; if @code{message}, the default, only
+the message component of the error is printed.
+ at end table
+
+It is also possible to execute a Python script from the @value{GDBN}
+interpreter:
+
+ at table @code
+ at item source @file{script-name}
+The script name must end with @samp{.py} and @value{GDBN} must be configured
+to recognize the script language based on filename extension using
+the @code{script-extension} setting.  @xref{Extending GDB, ,Extending GDB}.
+
+ at item python execfile ("script-name")
+This method is based on the @code{execfile} Python built-in function,
+and thus is always available.
+ at end table
+
+ at node Python API
+ at subsection Python API
+ at cindex python api
+ at cindex programming in python
+
+ at cindex python stdout
+ at cindex python pagination
+At startup, @value{GDBN} overrides Python's @code{sys.stdout} and
+ at code{sys.stderr} to print using @value{GDBN}'s output-paging streams.
+A Python program which outputs to one of these streams may have its
+output interrupted by the user (@pxref{Screen Size}).  In this
+situation, a Python @code{KeyboardInterrupt} exception is thrown.
+
+ at menu
+* Basic Python::                Basic Python Functions.
+* Exception Handling::          How Python exceptions are translated.
+* Values From Inferior::        Python representation of values.
+* Types In Python::             Python representation of types.
+* Pretty Printing API::         Pretty-printing values.
+* Selecting Pretty-Printers::   How GDB chooses a pretty-printer.
+* Writing a Pretty-Printer::    Writing a Pretty-Printer.
+* Inferiors In Python::         Python representation of inferiors (processes)
+* Events In Python::            Listening for events from @value{GDBN}.
+* Threads In Python::           Accessing inferior threads from Python.
+* Commands In Python::          Implementing new commands in Python.
+* Parameters In Python::        Adding new @value{GDBN} parameters.
+* Functions In Python::         Writing new convenience functions.
+* Progspaces In Python::        Program spaces.
+* Objfiles In Python::          Object files.
+* Frames In Python::            Accessing inferior stack frames from Python.
+* Blocks In Python::            Accessing frame blocks from Python.
+* Symbols In Python::           Python representation of symbols.
+* Symbol Tables In Python::     Python representation of symbol tables.
+* Breakpoints In Python::       Manipulating breakpoints using Python.
+* Finish Breakpoints in Python:: Setting Breakpoints on function return
+                                using Python.
+* Lazy Strings In Python::      Python representation of lazy strings.
+ at end menu
+
+ at node Basic Python
+ at subsubsection Basic Python
+
+ at cindex python functions
+ at cindex python module
+ at cindex gdb module
+ at value{GDBN} introduces a new Python module, named @code{gdb}.  All
+methods and classes added by @value{GDBN} are placed in this module.
+ at value{GDBN} automatically @code{import}s the @code{gdb} module for
+use in all scripts evaluated by the @code{python} command.
+
+ at findex gdb.PYTHONDIR
+ at defvar gdb.PYTHONDIR
+A string containing the python directory (@pxref{Python}).
+ at end defvar
+
+ at findex gdb.execute
+ at defun gdb.execute (command @r{[}, from_tty @r{[}, to_string at r{]]})
+Evaluate @var{command}, a string, as a @value{GDBN} CLI command.
+If a GDB exception happens while @var{command} runs, it is
+translated as described in @ref{Exception Handling,,Exception Handling}.
+
+ at var{from_tty} specifies whether @value{GDBN} ought to consider this
+command as having originated from the user invoking it interactively.
+It must be a boolean value.  If omitted, it defaults to @code{False}.
+
+By default, any output produced by @var{command} is sent to
+ at value{GDBN}'s standard output.  If the @var{to_string} parameter is
+ at code{True}, then output will be collected by @code{gdb.execute} and
+returned as a string.  The default is @code{False}, in which case the
+return value is @code{None}.  If @var{to_string} is @code{True}, the
+ at value{GDBN} virtual terminal will be temporarily set to unlimited width
+and height, and its pagination will be disabled; @pxref{Screen Size}.
+ at end defun
+
+ at findex gdb.breakpoints
+ at defun gdb.breakpoints ()
+Return a sequence holding all of @value{GDBN}'s breakpoints.
+ at xref{Breakpoints In Python}, for more information.
+ at end defun
+
+ at findex gdb.parameter
+ at defun gdb.parameter (parameter)
+Return the value of a @value{GDBN} parameter.  @var{parameter} is a
+string naming the parameter to look up; @var{parameter} may contain
+spaces if the parameter has a multi-part name.  For example,
+ at samp{print object} is a valid parameter name.
+
+If the named parameter does not exist, this function throws a
+ at code{gdb.error} (@pxref{Exception Handling}).  Otherwise, the
+parameter's value is converted to a Python value of the appropriate
+type, and returned.
+ at end defun
+
+ at findex gdb.history
+ at defun gdb.history (number)
+Return a value from @value{GDBN}'s value history (@pxref{Value
+History}).  @var{number} indicates which history element to return.
+If @var{number} is negative, then @value{GDBN} will take its absolute value
+and count backward from the last element (i.e., the most recent element) to
+find the value to return.  If @var{number} is zero, then @value{GDBN} will
+return the most recent element.  If the element specified by @var{number}
+doesn't exist in the value history, a @code{gdb.error} exception will be
+raised.
+
+If no exception is raised, the return value is always an instance of
+ at code{gdb.Value} (@pxref{Values From Inferior}).
+ at end defun
+
+ at findex gdb.parse_and_eval
+ at defun gdb.parse_and_eval (expression)
+Parse @var{expression} as an expression in the current language,
+evaluate it, and return the result as a @code{gdb.Value}.
+ at var{expression} must be a string.
+
+This function can be useful when implementing a new command
+(@pxref{Commands In Python}), as it provides a way to parse the
+command's argument as an expression.  It is also useful simply to
+compute values, for example, it is the only way to get the value of a
+convenience variable (@pxref{Convenience Vars}) as a @code{gdb.Value}.
+ at end defun
+
+ at findex gdb.find_pc_line
+ at defun gdb.find_pc_line (pc)
+Return the @code{gdb.Symtab_and_line} object corresponding to the
+ at var{pc} value.  @xref{Symbol Tables In Python}.  If an invalid
+value of @var{pc} is passed as an argument, then the @code{symtab} and
+ at code{line} attributes of the returned @code{gdb.Symtab_and_line} object
+will be @code{None} and 0 respectively.
+ at end defun
+
+ at findex gdb.post_event
+ at defun gdb.post_event (event)
+Put @var{event}, a callable object taking no arguments, into
+ at value{GDBN}'s internal event queue.  This callable will be invoked at
+some later point, during @value{GDBN}'s event processing.  Events
+posted using @code{post_event} will be run in the order in which they
+were posted; however, there is no way to know when they will be
+processed relative to other events inside @value{GDBN}.
+
+ at value{GDBN} is not thread-safe.  If your Python program uses multiple
+threads, you must be careful to only call @value{GDBN}-specific
+functions in the main @value{GDBN} thread.  @code{post_event} ensures
+this.  For example:
+
+ at smallexample
+(@value{GDBP}) python
+>import threading
+>
+>class Writer():
+> def __init__(self, message):
+>        self.message = message;
+> def __call__(self):
+>        gdb.write(self.message)
+>
+>class MyThread1 (threading.Thread):
+> def run (self):
+>        gdb.post_event(Writer("Hello "))
+>
+>class MyThread2 (threading.Thread):
+> def run (self):
+>        gdb.post_event(Writer("World\n"))
+>
+>MyThread1().start()
+>MyThread2().start()
+>end
+(@value{GDBP}) Hello World
+ at end smallexample
+ at end defun
+
+ at findex gdb.write 
+ at defun gdb.write (string @r{[}, stream{]})
+Print a string to @value{GDBN}'s paginated output stream.  The
+optional @var{stream} determines the stream to print to.  The default
+stream is @value{GDBN}'s standard output stream.  Possible stream
+values are:
+
+ at table @code
+ at findex STDOUT
+ at findex gdb.STDOUT
+ at item gdb.STDOUT
+ at value{GDBN}'s standard output stream.
+
+ at findex STDERR
+ at findex gdb.STDERR
+ at item gdb.STDERR
+ at value{GDBN}'s standard error stream.
+
+ at findex STDLOG
+ at findex gdb.STDLOG
+ at item gdb.STDLOG
+ at value{GDBN}'s log stream (@pxref{Logging Output}).
+ at end table
+
+Writing to @code{sys.stdout} or @code{sys.stderr} will automatically
+call this function and will automatically direct the output to the
+relevant stream.
+ at end defun
+
+ at findex gdb.flush
+ at defun gdb.flush ()
+Flush the buffer of a @value{GDBN} paginated stream so that the
+contents are displayed immediately.  @value{GDBN} will flush the
+contents of a stream automatically when it encounters a newline in the
+buffer.  The optional @var{stream} determines the stream to flush.  The
+default stream is @value{GDBN}'s standard output stream.  Possible
+stream values are: 
+
+ at table @code
+ at findex STDOUT
+ at findex gdb.STDOUT
+ at item gdb.STDOUT
+ at value{GDBN}'s standard output stream.
+
+ at findex STDERR
+ at findex gdb.STDERR
+ at item gdb.STDERR
+ at value{GDBN}'s standard error stream.
+
+ at findex STDLOG
+ at findex gdb.STDLOG
+ at item gdb.STDLOG
+ at value{GDBN}'s log stream (@pxref{Logging Output}).
+
+ at end table
+
+Flushing @code{sys.stdout} or @code{sys.stderr} will automatically
+call this function for the relevant stream.
+ at end defun
+
+ at findex gdb.target_charset
+ at defun gdb.target_charset ()
+Return the name of the current target character set (@pxref{Character
+Sets}).  This differs from @code{gdb.parameter('target-charset')} in
+that @samp{auto} is never returned.
+ at end defun
+
+ at findex gdb.target_wide_charset
+ at defun gdb.target_wide_charset ()
+Return the name of the current target wide character set
+(@pxref{Character Sets}).  This differs from
+ at code{gdb.parameter('target-wide-charset')} in that @samp{auto} is
+never returned.
+ at end defun
+
+ at findex gdb.solib_name
+ at defun gdb.solib_name (address)
+Return the name of the shared library holding the given @var{address}
+as a string, or @code{None}.
+ at end defun
+
+ at findex gdb.decode_line 
+ at defun gdb.decode_line @r{[}expression at r{]}
+Return locations of the line specified by @var{expression}, or of the
+current line if no argument was given.  This function returns a Python
+tuple containing two elements.  The first element contains a string
+holding any unparsed section of @var{expression} (or @code{None} if
+the expression has been fully parsed).  The second element contains
+either @code{None} or another tuple that contains all the locations
+that match the expression represented as @code{gdb.Symtab_and_line}
+objects (@pxref{Symbol Tables In Python}).  If @var{expression} is
+provided, it is decoded the way that @value{GDBN}'s inbuilt
+ at code{break} or @code{edit} commands do (@pxref{Specify Location}).
+ at end defun
+
+ at defun gdb.prompt_hook (current_prompt)
+ at anchor{prompt_hook}
+
+If @var{prompt_hook} is callable, @value{GDBN} will call the method
+assigned to this operation before a prompt is displayed by
+ at value{GDBN}.
+
+The parameter @code{current_prompt} contains the current @value{GDBN} 
+prompt.  This method must return a Python string, or @code{None}.  If
+a string is returned, the @value{GDBN} prompt will be set to that
+string.  If @code{None} is returned, @value{GDBN} will continue to use
+the current prompt.
+
+Some prompts cannot be substituted in @value{GDBN}.  Secondary prompts
+such as those used by readline for command input, and annotation
+related prompts are prohibited from being changed.
+ at end defun
+
+ at node Exception Handling
+ at subsubsection Exception Handling
+ at cindex python exceptions
+ at cindex exceptions, python
+
+When executing the @code{python} command, Python exceptions
+uncaught within the Python code are translated to calls to
+ at value{GDBN} error-reporting mechanism.  If the command that called
+ at code{python} does not handle the error, @value{GDBN} will
+terminate it and print an error message containing the Python
+exception name, the associated value, and the Python call stack
+backtrace at the point where the exception was raised.  Example:
+
+ at smallexample
+(@value{GDBP}) python print foo
+Traceback (most recent call last):
+  File "<string>", line 1, in <module>
+NameError: name 'foo' is not defined
+ at end smallexample
+
+ at value{GDBN} errors that happen in @value{GDBN} commands invoked by
+Python code are converted to Python exceptions.  The type of the
+Python exception depends on the error.
+
+ at ftable @code
+ at item gdb.error
+This is the base class for most exceptions generated by @value{GDBN}.
+It is derived from @code{RuntimeError}, for compatibility with earlier
+versions of @value{GDBN}.
+
+If an error occurring in @value{GDBN} does not fit into some more
+specific category, then the generated exception will have this type.
+
+ at item gdb.MemoryError
+This is a subclass of @code{gdb.error} which is thrown when an
+operation tried to access invalid memory in the inferior.
+
+ at item KeyboardInterrupt
+User interrupt (via @kbd{C-c} or by typing @kbd{q} at a pagination
+prompt) is translated to a Python @code{KeyboardInterrupt} exception.
+ at end ftable
+
+In all cases, your exception handler will see the @value{GDBN} error
+message as its value and the Python call stack backtrace at the Python
+statement closest to where the @value{GDBN} error occured as the
+traceback.
+
+ at findex gdb.GdbError
+When implementing @value{GDBN} commands in Python via @code{gdb.Command},
+it is useful to be able to throw an exception that doesn't cause a
+traceback to be printed.  For example, the user may have invoked the
+command incorrectly.  Use the @code{gdb.GdbError} exception
+to handle this case.  Example:
+
+ at smallexample
+(gdb) python
+>class HelloWorld (gdb.Command):
+>  """Greet the whole world."""
+>  def __init__ (self):
+>    super (HelloWorld, self).__init__ ("hello-world", gdb.COMMAND_USER)
+>  def invoke (self, args, from_tty):
+>    argv = gdb.string_to_argv (args)
+>    if len (argv) != 0:
+>      raise gdb.GdbError ("hello-world takes no arguments")
+>    print "Hello, World!"
+>HelloWorld ()
+>end
+(gdb) hello-world 42
+hello-world takes no arguments
+ at end smallexample
+
+ at node Values From Inferior
+ at subsubsection Values From Inferior
+ at cindex values from inferior, with Python
+ at cindex python, working with values from inferior
+
+ at cindex @code{gdb.Value}
+ at value{GDBN} provides values it obtains from the inferior program in
+an object of type @code{gdb.Value}.  @value{GDBN} uses this object
+for its internal bookkeeping of the inferior's values, and for
+fetching values when necessary.
+
+Inferior values that are simple scalars can be used directly in
+Python expressions that are valid for the value's data type.  Here's
+an example for an integer or floating-point value @code{some_val}:
+
+ at smallexample
+bar = some_val + 2
+ at end smallexample
+
+ at noindent
+As result of this, @code{bar} will also be a @code{gdb.Value} object
+whose values are of the same type as those of @code{some_val}.
+
+Inferior values that are structures or instances of some class can
+be accessed using the Python @dfn{dictionary syntax}.  For example, if
+ at code{some_val} is a @code{gdb.Value} instance holding a structure, you
+can access its @code{foo} element with:
+
+ at smallexample
+bar = some_val['foo']
+ at end smallexample
+
+Again, @code{bar} will also be a @code{gdb.Value} object.
+
+A @code{gdb.Value} that represents a function can be executed via
+inferior function call.  Any arguments provided to the call must match
+the function's prototype, and must be provided in the order specified
+by that prototype.
+
+For example, @code{some_val} is a @code{gdb.Value} instance
+representing a function that takes two integers as arguments.  To
+execute this function, call it like so:
+
+ at smallexample
+result = some_val (10,20)
+ at end smallexample
+
+Any values returned from a function call will be stored as a
+ at code{gdb.Value}.
+
+The following attributes are provided:
+
+ at table @code
+ at defvar Value.address
+If this object is addressable, this read-only attribute holds a
+ at code{gdb.Value} object representing the address.  Otherwise,
+this attribute holds @code{None}.
+ at end defvar
+
+ at cindex optimized out value in Python
+ at defvar Value.is_optimized_out
+This read-only boolean attribute is true if the compiler optimized out
+this value, thus it is not available for fetching from the inferior.
+ at end defvar
+
+ at defvar Value.type
+The type of this @code{gdb.Value}.  The value of this attribute is a
+ at code{gdb.Type} object (@pxref{Types In Python}).
+ at end defvar
+
+ at defvar Value.dynamic_type
+The dynamic type of this @code{gdb.Value}.  This uses C at t{++} run-time
+type information (@acronym{RTTI}) to determine the dynamic type of the
+value.  If this value is of class type, it will return the class in
+which the value is embedded, if any.  If this value is of pointer or
+reference to a class type, it will compute the dynamic type of the
+referenced object, and return a pointer or reference to that type,
+respectively.  In all other cases, it will return the value's static
+type.
+
+Note that this feature will only work when debugging a C at t{++} program
+that includes @acronym{RTTI} for the object in question.  Otherwise,
+it will just return the static type of the value as in @kbd{ptype foo}
+(@pxref{Symbols, ptype}).
+ at end defvar
+
+ at defvar Value.is_lazy
+The value of this read-only boolean attribute is @code{True} if this
+ at code{gdb.Value} has not yet been fetched from the inferior.  
+ at value{GDBN} does not fetch values until necessary, for efficiency.  
+For example:
+
+ at smallexample
+myval = gdb.parse_and_eval ('somevar')
+ at end smallexample
+
+The value of @code{somevar} is not fetched at this time.  It will be 
+fetched when the value is needed, or when the @code{fetch_lazy}
+method is invoked.  
+ at end defvar
+ at end table
+
+The following methods are provided:
+
+ at table @code
+ at defun Value.__init__ (@var{val})
+Many Python values can be converted directly to a @code{gdb.Value} via
+this object initializer.  Specifically:
+
+ at table @asis
+ at item Python boolean
+A Python boolean is converted to the boolean type from the current
+language.
+
+ at item Python integer
+A Python integer is converted to the C @code{long} type for the
+current architecture.
+
+ at item Python long
+A Python long is converted to the C @code{long long} type for the
+current architecture.
+
+ at item Python float
+A Python float is converted to the C @code{double} type for the
+current architecture.
+
+ at item Python string
+A Python string is converted to a target string, using the current
+target encoding.
+
+ at item @code{gdb.Value}
+If @code{val} is a @code{gdb.Value}, then a copy of the value is made.
+
+ at item @code{gdb.LazyString}
+If @code{val} is a @code{gdb.LazyString} (@pxref{Lazy Strings In
+Python}), then the lazy string's @code{value} method is called, and
+its result is used.
+ at end table
+ at end defun
+
+ at defun Value.cast (type)
+Return a new instance of @code{gdb.Value} that is the result of
+casting this instance to the type described by @var{type}, which must
+be a @code{gdb.Type} object.  If the cast cannot be performed for some
+reason, this method throws an exception.
+ at end defun
+
+ at defun Value.dereference ()
+For pointer data types, this method returns a new @code{gdb.Value} object
+whose contents is the object pointed to by the pointer.  For example, if
+ at code{foo} is a C pointer to an @code{int}, declared in your C program as
+
+ at smallexample
+int *foo;
+ at end smallexample
+
+ at noindent
+then you can use the corresponding @code{gdb.Value} to access what
+ at code{foo} points to like this:
+
+ at smallexample
+bar = foo.dereference ()
+ at end smallexample
+
+The result @code{bar} will be a @code{gdb.Value} object holding the
+value pointed to by @code{foo}.
+
+A similar function @code{Value.referenced_value} exists which also
+returns @code{gdb.Value} objects corresonding to the values pointed to
+by pointer values (and additionally, values referenced by reference
+values).  However, the behavior of @code{Value.dereference}
+differs from @code{Value.referenced_value} by the fact that the
+behavior of @code{Value.dereference} is identical to applying the C
+unary operator @code{*} on a given value.  For example, consider a
+reference to a pointer @code{ptrref}, declared in your C at t{++} program
+as
+
+ at smallexample
+typedef int *intptr;
+...
+int val = 10;
+intptr ptr = &val;
+intptr &ptrref = ptr;
+ at end smallexample
+
+Though @code{ptrref} is a reference value, one can apply the method
+ at code{Value.dereference} to the @code{gdb.Value} object corresponding
+to it and obtain a @code{gdb.Value} which is identical to that
+corresponding to @code{val}.  However, if you apply the method
+ at code{Value.referenced_value}, the result would be a @code{gdb.Value}
+object identical to that corresponding to @code{ptr}.
+
+ at smallexample
+py_ptrref = gdb.parse_and_eval ("ptrref")
+py_val = py_ptrref.dereference ()
+py_ptr = py_ptrref.referenced_value ()
+ at end smallexample
+
+The @code{gdb.Value} object @code{py_val} is identical to that
+corresponding to @code{val}, and @code{py_ptr} is identical to that
+corresponding to @code{ptr}.  In general, @code{Value.dereference} can
+be applied whenever the C unary operator @code{*} can be applied
+to the corresponding C value.  For those cases where applying both
+ at code{Value.dereference} and @code{Value.referenced_value} is allowed,
+the results obtained need not be identical (as we have seen in the above
+example).  The results are however identical when applied on
+ at code{gdb.Value} objects corresponding to pointers (@code{gdb.Value}
+objects with type code @code{TYPE_CODE_PTR}) in a C/C at t{++} program.
+ at end defun
+
+ at defun Value.referenced_value ()
+For pointer or reference data types, this method returns a new
+ at code{gdb.Value} object corresponding to the value referenced by the
+pointer/reference value.  For pointer data types,
+ at code{Value.dereference} and @code{Value.referenced_value} produce
+identical results.  The difference between these methods is that
+ at code{Value.dereference} cannot get the values referenced by reference
+values.  For example, consider a reference to an @code{int}, declared
+in your C at t{++} program as
+
+ at smallexample
+int val = 10;
+int &ref = val;
+ at end smallexample
+
+ at noindent
+then applying @code{Value.dereference} to the @code{gdb.Value} object
+corresponding to @code{ref} will result in an error, while applying
+ at code{Value.referenced_value} will result in a @code{gdb.Value} object
+identical to that corresponding to @code{val}.
+
+ at smallexample
+py_ref = gdb.parse_and_eval ("ref")
+er_ref = py_ref.dereference ()       # Results in error
+py_val = py_ref.referenced_value ()  # Returns the referenced value
+ at end smallexample
+
+The @code{gdb.Value} object @code{py_val} is identical to that
+corresponding to @code{val}.
+ at end defun
+
+ at defun Value.dynamic_cast (type)
+Like @code{Value.cast}, but works as if the C at t{++} @code{dynamic_cast}
+operator were used.  Consult a C at t{++} reference for details.
+ at end defun
+
+ at defun Value.reinterpret_cast (type)
+Like @code{Value.cast}, but works as if the C at t{++} @code{reinterpret_cast}
+operator were used.  Consult a C at t{++} reference for details.
+ at end defun
+
+ at defun Value.string (@r{[}encoding at r{[}, errors at r{[}, length at r{]]]})
+If this @code{gdb.Value} represents a string, then this method
+converts the contents to a Python string.  Otherwise, this method will
+throw an exception.
+
+Strings are recognized in a language-specific way; whether a given
+ at code{gdb.Value} represents a string is determined by the current
+language.
+
+For C-like languages, a value is a string if it is a pointer to or an
+array of characters or ints.  The string is assumed to be terminated
+by a zero of the appropriate width.  However if the optional length
+argument is given, the string will be converted to that given length,
+ignoring any embedded zeros that the string may contain.
+
+If the optional @var{encoding} argument is given, it must be a string
+naming the encoding of the string in the @code{gdb.Value}, such as
+ at code{"ascii"}, @code{"iso-8859-6"} or @code{"utf-8"}.  It accepts
+the same encodings as the corresponding argument to Python's
+ at code{string.decode} method, and the Python codec machinery will be used
+to convert the string.  If @var{encoding} is not given, or if
+ at var{encoding} is the empty string, then either the @code{target-charset}
+(@pxref{Character Sets}) will be used, or a language-specific encoding
+will be used, if the current language is able to supply one.
+
+The optional @var{errors} argument is the same as the corresponding
+argument to Python's @code{string.decode} method.
+
+If the optional @var{length} argument is given, the string will be
+fetched and converted to the given length.
+ at end defun
+
+ at defun Value.lazy_string (@r{[}encoding @r{[}, length at r{]]})
+If this @code{gdb.Value} represents a string, then this method
+converts the contents to a @code{gdb.LazyString} (@pxref{Lazy Strings
+In Python}).  Otherwise, this method will throw an exception.
+
+If the optional @var{encoding} argument is given, it must be a string
+naming the encoding of the @code{gdb.LazyString}.  Some examples are:
+ at samp{ascii}, @samp{iso-8859-6} or @samp{utf-8}.  If the
+ at var{encoding} argument is an encoding that @value{GDBN} does
+recognize, @value{GDBN} will raise an error.
+
+When a lazy string is printed, the @value{GDBN} encoding machinery is
+used to convert the string during printing.  If the optional
+ at var{encoding} argument is not provided, or is an empty string,
+ at value{GDBN} will automatically select the encoding most suitable for
+the string type.  For further information on encoding in @value{GDBN}
+please see @ref{Character Sets}.
+
+If the optional @var{length} argument is given, the string will be
+fetched and encoded to the length of characters specified.  If
+the @var{length} argument is not provided, the string will be fetched
+and encoded until a null of appropriate width is found.
+ at end defun
+
+ at defun Value.fetch_lazy ()
+If the @code{gdb.Value} object is currently a lazy value 
+(@code{gdb.Value.is_lazy} is @code{True}), then the value is
+fetched from the inferior.  Any errors that occur in the process
+will produce a Python exception.
+
+If the @code{gdb.Value} object is not a lazy value, this method
+has no effect.
+
+This method does not return a value.
+ at end defun
+
+ at end table
+
+ at node Types In Python
+ at subsubsection Types In Python
+ at cindex types in Python
+ at cindex Python, working with types
+
+ at tindex gdb.Type
+ at value{GDBN} represents types from the inferior using the class
+ at code{gdb.Type}.
+
+The following type-related functions are available in the @code{gdb}
+module:
+
+ at findex gdb.lookup_type
+ at defun gdb.lookup_type (name @r{[}, block at r{]})
+This function looks up a type by name.  @var{name} is the name of the
+type to look up.  It must be a string.
+
+If @var{block} is given, then @var{name} is looked up in that scope.
+Otherwise, it is searched for globally.
+
+Ordinarily, this function will return an instance of @code{gdb.Type}.
+If the named type cannot be found, it will throw an exception.
+ at end defun
+
+If the type is a structure or class type, or an enum type, the fields
+of that type can be accessed using the Python @dfn{dictionary syntax}.
+For example, if @code{some_type} is a @code{gdb.Type} instance holding
+a structure type, you can access its @code{foo} field with:
+
+ at smallexample
+bar = some_type['foo']
+ at end smallexample
+
+ at code{bar} will be a @code{gdb.Field} object; see below under the
+description of the @code{Type.fields} method for a description of the
+ at code{gdb.Field} class.
+
+An instance of @code{Type} has the following attributes:
+
+ at table @code
+ at defvar Type.code
+The type code for this type.  The type code will be one of the
+ at code{TYPE_CODE_} constants defined below.
+ at end defvar
+
+ at defvar Type.sizeof
+The size of this type, in target @code{char} units.  Usually, a
+target's @code{char} type will be an 8-bit byte.  However, on some
+unusual platforms, this type may have a different size.
+ at end defvar
+
+ at defvar Type.tag
+The tag name for this type.  The tag name is the name after
+ at code{struct}, @code{union}, or @code{enum} in C and C at t{++}; not all
+languages have this concept.  If this type has no tag name, then
+ at code{None} is returned.
+ at end defvar
+ at end table
+
+The following methods are provided:
+
+ at table @code
+ at defun Type.fields ()
+For structure and union types, this method returns the fields.  Range
+types have two fields, the minimum and maximum values.  Enum types
+have one field per enum constant.  Function and method types have one
+field per parameter.  The base types of C at t{++} classes are also
+represented as fields.  If the type has no fields, or does not fit
+into one of these categories, an empty sequence will be returned.
+
+Each field is a @code{gdb.Field} object, with some pre-defined attributes:
+ at table @code
+ at item bitpos
+This attribute is not available for @code{static} fields (as in
+C at t{++} or Java).  For non- at code{static} fields, the value is the bit
+position of the field.  For @code{enum} fields, the value is the
+enumeration member's integer representation.
+
+ at item name
+The name of the field, or @code{None} for anonymous fields.
+
+ at item artificial
+This is @code{True} if the field is artificial, usually meaning that
+it was provided by the compiler and not the user.  This attribute is
+always provided, and is @code{False} if the field is not artificial.
+
+ at item is_base_class
+This is @code{True} if the field represents a base class of a C at t{++}
+structure.  This attribute is always provided, and is @code{False}
+if the field is not a base class of the type that is the argument of
+ at code{fields}, or if that type was not a C at t{++} class.
+
+ at item bitsize
+If the field is packed, or is a bitfield, then this will have a
+non-zero value, which is the size of the field in bits.  Otherwise,
+this will be zero; in this case the field's size is given by its type.
+
+ at item type
+The type of the field.  This is usually an instance of @code{Type},
+but it can be @code{None} in some situations.
+ at end table
+ at end defun
+
+ at defun Type.array (@var{n1} @r{[}, @var{n2}@r{]})
+Return a new @code{gdb.Type} object which represents an array of this
+type.  If one argument is given, it is the inclusive upper bound of
+the array; in this case the lower bound is zero.  If two arguments are
+given, the first argument is the lower bound of the array, and the
+second argument is the upper bound of the array.  An array's length
+must not be negative, but the bounds can be.
+ at end defun
+
+ at defun Type.const ()
+Return a new @code{gdb.Type} object which represents a
+ at code{const}-qualified variant of this type.
+ at end defun
+
+ at defun Type.volatile ()
+Return a new @code{gdb.Type} object which represents a
+ at code{volatile}-qualified variant of this type.
+ at end defun
+
+ at defun Type.unqualified ()
+Return a new @code{gdb.Type} object which represents an unqualified
+variant of this type.  That is, the result is neither @code{const} nor
+ at code{volatile}.
+ at end defun
+
+ at defun Type.range ()
+Return a Python @code{Tuple} object that contains two elements: the
+low bound of the argument type and the high bound of that type.  If
+the type does not have a range, @value{GDBN} will raise a
+ at code{gdb.error} exception (@pxref{Exception Handling}).
+ at end defun
+
+ at defun Type.reference ()
+Return a new @code{gdb.Type} object which represents a reference to this
+type.
+ at end defun
+
+ at defun Type.pointer ()
+Return a new @code{gdb.Type} object which represents a pointer to this
+type.
+ at end defun
+
+ at defun Type.strip_typedefs ()
+Return a new @code{gdb.Type} that represents the real type,
+after removing all layers of typedefs.
+ at end defun
+
+ at defun Type.target ()
+Return a new @code{gdb.Type} object which represents the target type
+of this type.
+
+For a pointer type, the target type is the type of the pointed-to
+object.  For an array type (meaning C-like arrays), the target type is
+the type of the elements of the array.  For a function or method type,
+the target type is the type of the return value.  For a complex type,
+the target type is the type of the elements.  For a typedef, the
+target type is the aliased type.
+
+If the type does not have a target, this method will throw an
+exception.
+ at end defun
+
+ at defun Type.template_argument (n @r{[}, block at r{]})
+If this @code{gdb.Type} is an instantiation of a template, this will
+return a new @code{gdb.Type} which represents the type of the
+ at var{n}th template argument.
+
+If this @code{gdb.Type} is not a template type, this will throw an
+exception.  Ordinarily, only C at t{++} code will have template types.
+
+If @var{block} is given, then @var{name} is looked up in that scope.
+Otherwise, it is searched for globally.
+ at end defun
+ at end table
+
+
+Each type has a code, which indicates what category this type falls
+into.  The available type categories are represented by constants
+defined in the @code{gdb} module:
+
+ at table @code
+ at findex TYPE_CODE_PTR
+ at findex gdb.TYPE_CODE_PTR
+ at item gdb.TYPE_CODE_PTR
+The type is a pointer.
+
+ at findex TYPE_CODE_ARRAY
+ at findex gdb.TYPE_CODE_ARRAY
+ at item gdb.TYPE_CODE_ARRAY
+The type is an array.
+
+ at findex TYPE_CODE_STRUCT
+ at findex gdb.TYPE_CODE_STRUCT
+ at item gdb.TYPE_CODE_STRUCT
+The type is a structure.
+
+ at findex TYPE_CODE_UNION
+ at findex gdb.TYPE_CODE_UNION
+ at item gdb.TYPE_CODE_UNION
+The type is a union.
+
+ at findex TYPE_CODE_ENUM
+ at findex gdb.TYPE_CODE_ENUM
+ at item gdb.TYPE_CODE_ENUM
+The type is an enum.
+
+ at findex TYPE_CODE_FLAGS
+ at findex gdb.TYPE_CODE_FLAGS
+ at item gdb.TYPE_CODE_FLAGS
+A bit flags type, used for things such as status registers.
+
+ at findex TYPE_CODE_FUNC
+ at findex gdb.TYPE_CODE_FUNC
+ at item gdb.TYPE_CODE_FUNC
+The type is a function.
+
+ at findex TYPE_CODE_INT
+ at findex gdb.TYPE_CODE_INT
+ at item gdb.TYPE_CODE_INT
+The type is an integer type.
+
+ at findex TYPE_CODE_FLT
+ at findex gdb.TYPE_CODE_FLT
+ at item gdb.TYPE_CODE_FLT
+A floating point type.
+
+ at findex TYPE_CODE_VOID
+ at findex gdb.TYPE_CODE_VOID
+ at item gdb.TYPE_CODE_VOID
+The special type @code{void}.
+
+ at findex TYPE_CODE_SET
+ at findex gdb.TYPE_CODE_SET
+ at item gdb.TYPE_CODE_SET
+A Pascal set type.
+
+ at findex TYPE_CODE_RANGE
+ at findex gdb.TYPE_CODE_RANGE
+ at item gdb.TYPE_CODE_RANGE
+A range type, that is, an integer type with bounds.
+
+ at findex TYPE_CODE_STRING
+ at findex gdb.TYPE_CODE_STRING
+ at item gdb.TYPE_CODE_STRING
+A string type.  Note that this is only used for certain languages with
+language-defined string types; C strings are not represented this way.
+
+ at findex TYPE_CODE_BITSTRING
+ at findex gdb.TYPE_CODE_BITSTRING
+ at item gdb.TYPE_CODE_BITSTRING
+A string of bits.
+
+ at findex TYPE_CODE_ERROR
+ at findex gdb.TYPE_CODE_ERROR
+ at item gdb.TYPE_CODE_ERROR
+An unknown or erroneous type.
+
+ at findex TYPE_CODE_METHOD
+ at findex gdb.TYPE_CODE_METHOD
+ at item gdb.TYPE_CODE_METHOD
+A method type, as found in C at t{++} or Java.
+
+ at findex TYPE_CODE_METHODPTR
+ at findex gdb.TYPE_CODE_METHODPTR
+ at item gdb.TYPE_CODE_METHODPTR
+A pointer-to-member-function.
+
+ at findex TYPE_CODE_MEMBERPTR
+ at findex gdb.TYPE_CODE_MEMBERPTR
+ at item gdb.TYPE_CODE_MEMBERPTR
+A pointer-to-member.
+
+ at findex TYPE_CODE_REF
+ at findex gdb.TYPE_CODE_REF
+ at item gdb.TYPE_CODE_REF
+A reference type.
+
+ at findex TYPE_CODE_CHAR
+ at findex gdb.TYPE_CODE_CHAR
+ at item gdb.TYPE_CODE_CHAR
+A character type.
+
+ at findex TYPE_CODE_BOOL
+ at findex gdb.TYPE_CODE_BOOL
+ at item gdb.TYPE_CODE_BOOL
+A boolean type.
+
+ at findex TYPE_CODE_COMPLEX
+ at findex gdb.TYPE_CODE_COMPLEX
+ at item gdb.TYPE_CODE_COMPLEX
+A complex float type.
+
+ at findex TYPE_CODE_TYPEDEF
+ at findex gdb.TYPE_CODE_TYPEDEF
+ at item gdb.TYPE_CODE_TYPEDEF
+A typedef to some other type.
+
+ at findex TYPE_CODE_NAMESPACE
+ at findex gdb.TYPE_CODE_NAMESPACE
+ at item gdb.TYPE_CODE_NAMESPACE
+A C at t{++} namespace.
+
+ at findex TYPE_CODE_DECFLOAT
+ at findex gdb.TYPE_CODE_DECFLOAT
+ at item gdb.TYPE_CODE_DECFLOAT
+A decimal floating point type.
+
+ at findex TYPE_CODE_INTERNAL_FUNCTION
+ at findex gdb.TYPE_CODE_INTERNAL_FUNCTION
+ at item gdb.TYPE_CODE_INTERNAL_FUNCTION
+A function internal to @value{GDBN}.  This is the type used to represent
+convenience functions.
+ at end table
+
+Further support for types is provided in the @code{gdb.types}
+Python module (@pxref{gdb.types}).
+
+ at node Pretty Printing API
+ at subsubsection Pretty Printing API
+
+An example output is provided (@pxref{Pretty Printing}).
+
+A pretty-printer is just an object that holds a value and implements a
+specific interface, defined here.
+
+ at defun pretty_printer.children (self)
+ at value{GDBN} will call this method on a pretty-printer to compute the
+children of the pretty-printer's value.
+
+This method must return an object conforming to the Python iterator
+protocol.  Each item returned by the iterator must be a tuple holding
+two elements.  The first element is the ``name'' of the child; the
+second element is the child's value.  The value can be any Python
+object which is convertible to a @value{GDBN} value.
+
+This method is optional.  If it does not exist, @value{GDBN} will act
+as though the value has no children.
+ at end defun
+
+ at defun pretty_printer.display_hint (self)
+The CLI may call this method and use its result to change the
+formatting of a value.  The result will also be supplied to an MI
+consumer as a @samp{displayhint} attribute of the variable being
+printed.
+
+This method is optional.  If it does exist, this method must return a
+string.
+
+Some display hints are predefined by @value{GDBN}:
+
+ at table @samp
+ at item array
+Indicate that the object being printed is ``array-like''.  The CLI
+uses this to respect parameters such as @code{set print elements} and
+ at code{set print array}.
+
+ at item map
+Indicate that the object being printed is ``map-like'', and that the
+children of this value can be assumed to alternate between keys and
+values.
+
+ at item string
+Indicate that the object being printed is ``string-like''.  If the
+printer's @code{to_string} method returns a Python string of some
+kind, then @value{GDBN} will call its internal language-specific
+string-printing function to format the string.  For the CLI this means
+adding quotation marks, possibly escaping some characters, respecting
+ at code{set print elements}, and the like.
+ at end table
+ at end defun
+
+ at defun pretty_printer.to_string (self)
+ at value{GDBN} will call this method to display the string
+representation of the value passed to the object's constructor.
+
+When printing from the CLI, if the @code{to_string} method exists,
+then @value{GDBN} will prepend its result to the values returned by
+ at code{children}.  Exactly how this formatting is done is dependent on
+the display hint, and may change as more hints are added.  Also,
+depending on the print settings (@pxref{Print Settings}), the CLI may
+print just the result of @code{to_string} in a stack trace, omitting
+the result of @code{children}.
+
+If this method returns a string, it is printed verbatim.
+
+Otherwise, if this method returns an instance of @code{gdb.Value},
+then @value{GDBN} prints this value.  This may result in a call to
+another pretty-printer.
+
+If instead the method returns a Python value which is convertible to a
+ at code{gdb.Value}, then @value{GDBN} performs the conversion and prints
+the resulting value.  Again, this may result in a call to another
+pretty-printer.  Python scalars (integers, floats, and booleans) and
+strings are convertible to @code{gdb.Value}; other types are not.
+
+Finally, if this method returns @code{None} then no further operations
+are peformed in this method and nothing is printed.
+
+If the result is not one of these types, an exception is raised.
+ at end defun
+
+ at value{GDBN} provides a function which can be used to look up the
+default pretty-printer for a @code{gdb.Value}:
+
+ at findex gdb.default_visualizer
+ at defun gdb.default_visualizer (value)
+This function takes a @code{gdb.Value} object as an argument.  If a
+pretty-printer for this value exists, then it is returned.  If no such
+printer exists, then this returns @code{None}.
+ at end defun
+
+ at node Selecting Pretty-Printers
+ at subsubsection Selecting Pretty-Printers
+
+The Python list @code{gdb.pretty_printers} contains an array of
+functions or callable objects that have been registered via addition
+as a pretty-printer.  Printers in this list are called @code{global}
+printers, they're available when debugging all inferiors.
+Each @code{gdb.Progspace} contains a @code{pretty_printers} attribute.
+Each @code{gdb.Objfile} also contains a @code{pretty_printers}
+attribute.
+
+Each function on these lists is passed a single @code{gdb.Value}
+argument and should return a pretty-printer object conforming to the
+interface definition above (@pxref{Pretty Printing API}).  If a function
+cannot create a pretty-printer for the value, it should return
+ at code{None}.
+
+ at value{GDBN} first checks the @code{pretty_printers} attribute of each
+ at code{gdb.Objfile} in the current program space and iteratively calls
+each enabled lookup routine in the list for that @code{gdb.Objfile}
+until it receives a pretty-printer object.
+If no pretty-printer is found in the objfile lists, @value{GDBN} then
+searches the pretty-printer list of the current program space,
+calling each enabled function until an object is returned.
+After these lists have been exhausted, it tries the global
+ at code{gdb.pretty_printers} list, again calling each enabled function until an
+object is returned.
+
+The order in which the objfiles are searched is not specified.  For a
+given list, functions are always invoked from the head of the list,
+and iterated over sequentially until the end of the list, or a printer
+object is returned.
+
+For various reasons a pretty-printer may not work.
+For example, the underlying data structure may have changed and
+the pretty-printer is out of date.
+
+The consequences of a broken pretty-printer are severe enough that
+ at value{GDBN} provides support for enabling and disabling individual
+printers.  For example, if @code{print frame-arguments} is on,
+a backtrace can become highly illegible if any argument is printed
+with a broken printer.
+
+Pretty-printers are enabled and disabled by attaching an @code{enabled}
+attribute to the registered function or callable object.  If this attribute
+is present and its value is @code{False}, the printer is disabled, otherwise
+the printer is enabled.
+
+ at node Writing a Pretty-Printer
+ at subsubsection Writing a Pretty-Printer
+ at cindex writing a pretty-printer
+
+A pretty-printer consists of two parts: a lookup function to detect
+if the type is supported, and the printer itself.
+
+Here is an example showing how a @code{std::string} printer might be
+written.  @xref{Pretty Printing API}, for details on the API this class
+must provide.
+
+ at smallexample
+class StdStringPrinter(object):
+    "Print a std::string"
+
+    def __init__(self, val):
+        self.val = val
+
+    def to_string(self):
+        return self.val['_M_dataplus']['_M_p']
+
+    def display_hint(self):
+        return 'string'
+ at end smallexample
+
+And here is an example showing how a lookup function for the printer
+example above might be written.
+
+ at smallexample
+def str_lookup_function(val):
+    lookup_tag = val.type.tag
+    if lookup_tag == None:
+        return None
+    regex = re.compile("^std::basic_string<char,.*>$")
+    if regex.match(lookup_tag):
+        return StdStringPrinter(val)
+    return None
+ at end smallexample
+
+The example lookup function extracts the value's type, and attempts to
+match it to a type that it can pretty-print.  If it is a type the
+printer can pretty-print, it will return a printer object.  If not, it
+returns @code{None}.
+
+We recommend that you put your core pretty-printers into a Python
+package.  If your pretty-printers are for use with a library, we
+further recommend embedding a version number into the package name.
+This practice will enable @value{GDBN} to load multiple versions of
+your pretty-printers at the same time, because they will have
+different names.
+
+You should write auto-loaded code (@pxref{Python Auto-loading}) such that it
+can be evaluated multiple times without changing its meaning.  An
+ideal auto-load file will consist solely of @code{import}s of your
+printer modules, followed by a call to a register pretty-printers with
+the current objfile.
+
+Taken as a whole, this approach will scale nicely to multiple
+inferiors, each potentially using a different library version.
+Embedding a version number in the Python package name will ensure that
+ at value{GDBN} is able to load both sets of printers simultaneously.
+Then, because the search for pretty-printers is done by objfile, and
+because your auto-loaded code took care to register your library's
+printers with a specific objfile, @value{GDBN} will find the correct
+printers for the specific version of the library used by each
+inferior.
+
+To continue the @code{std::string} example (@pxref{Pretty Printing API}),
+this code might appear in @code{gdb.libstdcxx.v6}:
+
+ at smallexample
+def register_printers(objfile):
+    objfile.pretty_printers.append(str_lookup_function)
+ at end smallexample
+
+ at noindent
+And then the corresponding contents of the auto-load file would be:
+
+ at smallexample
+import gdb.libstdcxx.v6
+gdb.libstdcxx.v6.register_printers(gdb.current_objfile())
+ at end smallexample
+
+The previous example illustrates a basic pretty-printer.
+There are a few things that can be improved on.
+The printer doesn't have a name, making it hard to identify in a
+list of installed printers.  The lookup function has a name, but
+lookup functions can have arbitrary, even identical, names.
+
+Second, the printer only handles one type, whereas a library typically has
+several types.  One could install a lookup function for each desired type
+in the library, but one could also have a single lookup function recognize
+several types.  The latter is the conventional way this is handled.
+If a pretty-printer can handle multiple data types, then its
+ at dfn{subprinters} are the printers for the individual data types.
+
+The @code{gdb.printing} module provides a formal way of solving these
+problems (@pxref{gdb.printing}).
+Here is another example that handles multiple types.
+
+These are the types we are going to pretty-print:
+
+ at smallexample
+struct foo @{ int a, b; @};
+struct bar @{ struct foo x, y; @};
+ at end smallexample
+
+Here are the printers:
+
+ at smallexample
+class fooPrinter:
+    """Print a foo object."""
+
+    def __init__(self, val):
+        self.val = val
+
+    def to_string(self):
+        return ("a=<" + str(self.val["a"]) +
+                "> b=<" + str(self.val["b"]) + ">")
+
+class barPrinter:
+    """Print a bar object."""
+
+    def __init__(self, val):
+        self.val = val
+
+    def to_string(self):
+        return ("x=<" + str(self.val["x"]) +
+                "> y=<" + str(self.val["y"]) + ">")
+ at end smallexample
+
+This example doesn't need a lookup function, that is handled by the
+ at code{gdb.printing} module.  Instead a function is provided to build up
+the object that handles the lookup.
+
+ at smallexample
+import gdb.printing
+
+def build_pretty_printer():
+    pp = gdb.printing.RegexpCollectionPrettyPrinter(
+        "my_library")
+    pp.add_printer('foo', '^foo$', fooPrinter)
+    pp.add_printer('bar', '^bar$', barPrinter)
+    return pp
+ at end smallexample
+
+And here is the autoload support:
+
+ at smallexample
+import gdb.printing
+import my_library
+gdb.printing.register_pretty_printer(
+    gdb.current_objfile(),
+    my_library.build_pretty_printer())
+ at end smallexample
+
+Finally, when this printer is loaded into @value{GDBN}, here is the
+corresponding output of @samp{info pretty-printer}:
+
+ at smallexample
+(gdb) info pretty-printer
+my_library.so:
+  my_library
+    foo
+    bar
+ at end smallexample
+
+ at node Inferiors In Python
+ at subsubsection Inferiors In Python
+ at cindex inferiors in Python
+
+ at findex gdb.Inferior
+Programs which are being run under @value{GDBN} are called inferiors
+(@pxref{Inferiors and Programs}).  Python scripts can access
+information about and manipulate inferiors controlled by @value{GDBN}
+via objects of the @code{gdb.Inferior} class.
+
+The following inferior-related functions are available in the @code{gdb}
+module:
+
+ at defun gdb.inferiors ()
+Return a tuple containing all inferior objects.
+ at end defun
+
+ at defun gdb.selected_inferior ()
+Return an object representing the current inferior.
+ at end defun
+
+A @code{gdb.Inferior} object has the following attributes:
+
+ at table @code
+ at defvar Inferior.num
+ID of inferior, as assigned by GDB.
+ at end defvar
+
+ at defvar Inferior.pid
+Process ID of the inferior, as assigned by the underlying operating
+system.
+ at end defvar
+
+ at defvar Inferior.was_attached
+Boolean signaling whether the inferior was created using `attach', or
+started by @value{GDBN} itself.
+ at end defvar
+ at end table
+
+A @code{gdb.Inferior} object has the following methods:
+
+ at table @code
+ at defun Inferior.is_valid ()
+Returns @code{True} if the @code{gdb.Inferior} object is valid,
+ at code{False} if not.  A @code{gdb.Inferior} object will become invalid
+if the inferior no longer exists within @value{GDBN}.  All other
+ at code{gdb.Inferior} methods will throw an exception if it is invalid
+at the time the method is called.
+ at end defun
+
+ at defun Inferior.threads ()
+This method returns a tuple holding all the threads which are valid
+when it is called.  If there are no valid threads, the method will
+return an empty tuple.
+ at end defun
+
+ at findex Inferior.read_memory
+ at defun Inferior.read_memory (address, length)
+Read @var{length} bytes of memory from the inferior, starting at
+ at var{address}.  Returns a buffer object, which behaves much like an array
+or a string.  It can be modified and given to the
+ at code{Inferior.write_memory} function.
+ at end defun
+
+ at findex Inferior.write_memory
+ at defun Inferior.write_memory (address, buffer @r{[}, length at r{]})
+Write the contents of @var{buffer} to the inferior, starting at
+ at var{address}.  The @var{buffer} parameter must be a Python object
+which supports the buffer protocol, i.e., a string, an array or the
+object returned from @code{Inferior.read_memory}.  If given, @var{length}
+determines the number of bytes from @var{buffer} to be written.
+ at end defun
+
+ at findex gdb.search_memory
+ at defun Inferior.search_memory (address, length, pattern)
+Search a region of the inferior memory starting at @var{address} with
+the given @var{length} using the search pattern supplied in
+ at var{pattern}.  The @var{pattern} parameter must be a Python object
+which supports the buffer protocol, i.e., a string, an array or the
+object returned from @code{gdb.read_memory}.  Returns a Python @code{Long}
+containing the address where the pattern was found, or @code{None} if
+the pattern could not be found.
+ at end defun
+ at end table
+
+ at node Events In Python
+ at subsubsection Events In Python
+ at cindex inferior events in Python
+
+ at value{GDBN} provides a general event facility so that Python code can be
+notified of various state changes, particularly changes that occur in
+the inferior.
+
+An @dfn{event} is just an object that describes some state change.  The
+type of the object and its attributes will vary depending on the details
+of the change.  All the existing events are described below.
+
+In order to be notified of an event, you must register an event handler
+with an @dfn{event registry}.  An event registry is an object in the
+ at code{gdb.events} module which dispatches particular events.  A registry
+provides methods to register and unregister event handlers:
+
+ at table @code
+ at defun EventRegistry.connect (object)
+Add the given callable @var{object} to the registry.  This object will be
+called when an event corresponding to this registry occurs.
+ at end defun
+
+ at defun EventRegistry.disconnect (object)
+Remove the given @var{object} from the registry.  Once removed, the object
+will no longer receive notifications of events.
+ at end defun
+ at end table
+
+Here is an example:
+
+ at smallexample
+def exit_handler (event):
+    print "event type: exit"
+    print "exit code: %d" % (event.exit_code)
+
+gdb.events.exited.connect (exit_handler)
+ at end smallexample
+
+In the above example we connect our handler @code{exit_handler} to the
+registry @code{events.exited}.  Once connected, @code{exit_handler} gets
+called when the inferior exits.  The argument @dfn{event} in this example is
+of type @code{gdb.ExitedEvent}.  As you can see in the example the
+ at code{ExitedEvent} object has an attribute which indicates the exit code of
+the inferior.
+
+The following is a listing of the event registries that are available and
+details of the events they emit:
+
+ at table @code
+
+ at item events.cont
+Emits @code{gdb.ThreadEvent}.
+
+Some events can be thread specific when @value{GDBN} is running in non-stop
+mode.  When represented in Python, these events all extend
+ at code{gdb.ThreadEvent}.  Note, this event is not emitted directly; instead,
+events which are emitted by this or other modules might extend this event.
+Examples of these events are @code{gdb.BreakpointEvent} and
+ at code{gdb.ContinueEvent}.
+
+ at table @code
+ at defvar ThreadEvent.inferior_thread
+In non-stop mode this attribute will be set to the specific thread which was
+involved in the emitted event. Otherwise, it will be set to @code{None}.
+ at end defvar
+ at end table
+
+Emits @code{gdb.ContinueEvent} which extends @code{gdb.ThreadEvent}.
+
+This event indicates that the inferior has been continued after a stop. For
+inherited attribute refer to @code{gdb.ThreadEvent} above.
+
+ at item events.exited
+Emits @code{events.ExitedEvent} which indicates that the inferior has exited.
+ at code{events.ExitedEvent} has two attributes:
+ at table @code
+ at defvar ExitedEvent.exit_code
+An integer representing the exit code, if available, which the inferior 
+has returned.  (The exit code could be unavailable if, for example,
+ at value{GDBN} detaches from the inferior.) If the exit code is unavailable,
+the attribute does not exist.
+ at end defvar
+ at defvar ExitedEvent inferior
+A reference to the inferior which triggered the @code{exited} event.
+ at end defvar
+ at end table
+
+ at item events.stop
+Emits @code{gdb.StopEvent} which extends @code{gdb.ThreadEvent}.
+
+Indicates that the inferior has stopped.  All events emitted by this registry
+extend StopEvent.  As a child of @code{gdb.ThreadEvent}, @code{gdb.StopEvent}
+will indicate the stopped thread when @value{GDBN} is running in non-stop
+mode.  Refer to @code{gdb.ThreadEvent} above for more details.
+
+Emits @code{gdb.SignalEvent} which extends @code{gdb.StopEvent}.
+
+This event indicates that the inferior or one of its threads has received as
+signal.  @code{gdb.SignalEvent} has the following attributes:
+
+ at table @code
+ at defvar SignalEvent.stop_signal
+A string representing the signal received by the inferior.  A list of possible
+signal values can be obtained by running the command @code{info signals} in
+the @value{GDBN} command prompt.
+ at end defvar
+ at end table
+
+Also emits  @code{gdb.BreakpointEvent} which extends @code{gdb.StopEvent}.
+
+ at code{gdb.BreakpointEvent} event indicates that one or more breakpoints have
+been hit, and has the following attributes:
+
+ at table @code
+ at defvar BreakpointEvent.breakpoints
+A sequence containing references to all the breakpoints (type 
+ at code{gdb.Breakpoint}) that were hit.
+ at xref{Breakpoints In Python}, for details of the @code{gdb.Breakpoint} object.
+ at end defvar
+ at defvar BreakpointEvent.breakpoint
+A reference to the first breakpoint that was hit.
+This function is maintained for backward compatibility and is now deprecated 
+in favor of the @code{gdb.BreakpointEvent.breakpoints} attribute.
+ at end defvar
+ at end table
+
+ at item events.new_objfile
+Emits @code{gdb.NewObjFileEvent} which indicates that a new object file has
+been loaded by @value{GDBN}.  @code{gdb.NewObjFileEvent} has one attribute:
+
+ at table @code
+ at defvar NewObjFileEvent.new_objfile
+A reference to the object file (@code{gdb.Objfile}) which has been loaded.
+ at xref{Objfiles In Python}, for details of the @code{gdb.Objfile} object.
+ at end defvar
+ at end table
+
+ at end table
+
+ at node Threads In Python
+ at subsubsection Threads In Python
+ at cindex threads in python
+
+ at findex gdb.InferiorThread
+Python scripts can access information about, and manipulate inferior threads
+controlled by @value{GDBN}, via objects of the @code{gdb.InferiorThread} class.
+
+The following thread-related functions are available in the @code{gdb}
+module:
+
+ at findex gdb.selected_thread
+ at defun gdb.selected_thread ()
+This function returns the thread object for the selected thread.  If there
+is no selected thread, this will return @code{None}.
+ at end defun
+
+A @code{gdb.InferiorThread} object has the following attributes:
+
+ at table @code
+ at defvar InferiorThread.name
+The name of the thread.  If the user specified a name using
+ at code{thread name}, then this returns that name.  Otherwise, if an
+OS-supplied name is available, then it is returned.  Otherwise, this
+returns @code{None}.
+
+This attribute can be assigned to.  The new value must be a string
+object, which sets the new name, or @code{None}, which removes any
+user-specified thread name.
+ at end defvar
+
+ at defvar InferiorThread.num
+ID of the thread, as assigned by GDB.
+ at end defvar
+
+ at defvar InferiorThread.ptid
+ID of the thread, as assigned by the operating system.  This attribute is a
+tuple containing three integers.  The first is the Process ID (PID); the second
+is the Lightweight Process ID (LWPID), and the third is the Thread ID (TID).
+Either the LWPID or TID may be 0, which indicates that the operating system
+does not  use that identifier.
+ at end defvar
+ at end table
+
+A @code{gdb.InferiorThread} object has the following methods:
+
+ at table @code
+ at defun InferiorThread.is_valid ()
+Returns @code{True} if the @code{gdb.InferiorThread} object is valid,
+ at code{False} if not.  A @code{gdb.InferiorThread} object will become
+invalid if the thread exits, or the inferior that the thread belongs
+is deleted.  All other @code{gdb.InferiorThread} methods will throw an
+exception if it is invalid at the time the method is called.
+ at end defun
+
+ at defun InferiorThread.switch ()
+This changes @value{GDBN}'s currently selected thread to the one represented
+by this object.
+ at end defun
+
+ at defun InferiorThread.is_stopped ()
+Return a Boolean indicating whether the thread is stopped.
+ at end defun
+
+ at defun InferiorThread.is_running ()
+Return a Boolean indicating whether the thread is running.
+ at end defun
+
+ at defun InferiorThread.is_exited ()
+Return a Boolean indicating whether the thread is exited.
+ at end defun
+ at end table
+
+ at node Commands In Python
+ at subsubsection Commands In Python
+
+ at cindex commands in python
+ at cindex python commands
+You can implement new @value{GDBN} CLI commands in Python.  A CLI
+command is implemented using an instance of the @code{gdb.Command}
+class, most commonly using a subclass.
+
+ at defun Command.__init__ (name, @var{command_class} @r{[}, @var{completer_class} @r{[}, @var{prefix}@r{]]})
+The object initializer for @code{Command} registers the new command
+with @value{GDBN}.  This initializer is normally invoked from the
+subclass' own @code{__init__} method.
+
+ at var{name} is the name of the command.  If @var{name} consists of
+multiple words, then the initial words are looked for as prefix
+commands.  In this case, if one of the prefix commands does not exist,
+an exception is raised.
+
+There is no support for multi-line commands.
+
+ at var{command_class} should be one of the @samp{COMMAND_} constants
+defined below.  This argument tells @value{GDBN} how to categorize the
+new command in the help system.
+
+ at var{completer_class} is an optional argument.  If given, it should be
+one of the @samp{COMPLETE_} constants defined below.  This argument
+tells @value{GDBN} how to perform completion for this command.  If not
+given, @value{GDBN} will attempt to complete using the object's
+ at code{complete} method (see below); if no such method is found, an
+error will occur when completion is attempted.
+
+ at var{prefix} is an optional argument.  If @code{True}, then the new
+command is a prefix command; sub-commands of this command may be
+registered.
+
+The help text for the new command is taken from the Python
+documentation string for the command's class, if there is one.  If no
+documentation string is provided, the default value ``This command is
+not documented.'' is used.
+ at end defun
+
+ at cindex don't repeat Python command
+ at defun Command.dont_repeat ()
+By default, a @value{GDBN} command is repeated when the user enters a
+blank line at the command prompt.  A command can suppress this
+behavior by invoking the @code{dont_repeat} method.  This is similar
+to the user command @code{dont-repeat}, see @ref{Define, dont-repeat}.
+ at end defun
+
+ at defun Command.invoke (argument, from_tty)
+This method is called by @value{GDBN} when this command is invoked.
+
+ at var{argument} is a string.  It is the argument to the command, after
+leading and trailing whitespace has been stripped.
+
+ at var{from_tty} is a boolean argument.  When true, this means that the
+command was entered by the user at the terminal; when false it means
+that the command came from elsewhere.
+
+If this method throws an exception, it is turned into a @value{GDBN}
+ at code{error} call.  Otherwise, the return value is ignored.
+
+ at findex gdb.string_to_argv
+To break @var{argument} up into an argv-like string use
+ at code{gdb.string_to_argv}.  This function behaves identically to
+ at value{GDBN}'s internal argument lexer @code{buildargv}.
+It is recommended to use this for consistency.
+Arguments are separated by spaces and may be quoted.
+Example:
+
+ at smallexample
+print gdb.string_to_argv ("1 2\ \\\"3 '4 \"5' \"6 '7\"")
+['1', '2 "3', '4 "5', "6 '7"]
+ at end smallexample
+
+ at end defun
+
+ at cindex completion of Python commands
+ at defun Command.complete (text, word)
+This method is called by @value{GDBN} when the user attempts
+completion on this command.  All forms of completion are handled by
+this method, that is, the @key{TAB} and @key{M-?} key bindings
+(@pxref{Completion}), and the @code{complete} command (@pxref{Help,
+complete}).
+
+The arguments @var{text} and @var{word} are both strings.  @var{text}
+holds the complete command line up to the cursor's location.
+ at var{word} holds the last word of the command line; this is computed
+using a word-breaking heuristic.
+
+The @code{complete} method can return several values:
+ at itemize @bullet
+ at item
+If the return value is a sequence, the contents of the sequence are
+used as the completions.  It is up to @code{complete} to ensure that the
+contents actually do complete the word.  A zero-length sequence is
+allowed, it means that there were no completions available.  Only
+string elements of the sequence are used; other elements in the
+sequence are ignored.
+
+ at item
+If the return value is one of the @samp{COMPLETE_} constants defined
+below, then the corresponding @value{GDBN}-internal completion
+function is invoked, and its result is used.
+
+ at item
+All other results are treated as though there were no available
+completions.
+ at end itemize
+ at end defun
+
+When a new command is registered, it must be declared as a member of
+some general class of commands.  This is used to classify top-level
+commands in the on-line help system; note that prefix commands are not
+listed under their own category but rather that of their top-level
+command.  The available classifications are represented by constants
+defined in the @code{gdb} module:
+
+ at table @code
+ at findex COMMAND_NONE
+ at findex gdb.COMMAND_NONE
+ at item gdb.COMMAND_NONE
+The command does not belong to any particular class.  A command in
+this category will not be displayed in any of the help categories.
+
+ at findex COMMAND_RUNNING
+ at findex gdb.COMMAND_RUNNING
+ at item gdb.COMMAND_RUNNING
+The command is related to running the inferior.  For example,
+ at code{start}, @code{step}, and @code{continue} are in this category.
+Type @kbd{help running} at the @value{GDBN} prompt to see a list of
+commands in this category.
+
+ at findex COMMAND_DATA
+ at findex gdb.COMMAND_DATA
+ at item gdb.COMMAND_DATA
+The command is related to data or variables.  For example,
+ at code{call}, @code{find}, and @code{print} are in this category.  Type
+ at kbd{help data} at the @value{GDBN} prompt to see a list of commands
+in this category.
+
+ at findex COMMAND_STACK
+ at findex gdb.COMMAND_STACK
+ at item gdb.COMMAND_STACK
+The command has to do with manipulation of the stack.  For example,
+ at code{backtrace}, @code{frame}, and @code{return} are in this
+category.  Type @kbd{help stack} at the @value{GDBN} prompt to see a
+list of commands in this category.
+
+ at findex COMMAND_FILES
+ at findex gdb.COMMAND_FILES
+ at item gdb.COMMAND_FILES
+This class is used for file-related commands.  For example,
+ at code{file}, @code{list} and @code{section} are in this category.
+Type @kbd{help files} at the @value{GDBN} prompt to see a list of
+commands in this category.
+
+ at findex COMMAND_SUPPORT
+ at findex gdb.COMMAND_SUPPORT
+ at item gdb.COMMAND_SUPPORT
+This should be used for ``support facilities'', generally meaning
+things that are useful to the user when interacting with @value{GDBN},
+but not related to the state of the inferior.  For example,
+ at code{help}, @code{make}, and @code{shell} are in this category.  Type
+ at kbd{help support} at the @value{GDBN} prompt to see a list of
+commands in this category.
+
+ at findex COMMAND_STATUS
+ at findex gdb.COMMAND_STATUS
+ at item gdb.COMMAND_STATUS
+The command is an @samp{info}-related command, that is, related to the
+state of @value{GDBN} itself.  For example, @code{info}, @code{macro},
+and @code{show} are in this category.  Type @kbd{help status} at the
+ at value{GDBN} prompt to see a list of commands in this category.
+
+ at findex COMMAND_BREAKPOINTS
+ at findex gdb.COMMAND_BREAKPOINTS
+ at item gdb.COMMAND_BREAKPOINTS
+The command has to do with breakpoints.  For example, @code{break},
+ at code{clear}, and @code{delete} are in this category.  Type @kbd{help
+breakpoints} at the @value{GDBN} prompt to see a list of commands in
+this category.
+
+ at findex COMMAND_TRACEPOINTS
+ at findex gdb.COMMAND_TRACEPOINTS
+ at item gdb.COMMAND_TRACEPOINTS
+The command has to do with tracepoints.  For example, @code{trace},
+ at code{actions}, and @code{tfind} are in this category.  Type
+ at kbd{help tracepoints} at the @value{GDBN} prompt to see a list of
+commands in this category.
+
+ at findex COMMAND_USER
+ at findex gdb.COMMAND_USER
+ at item gdb.COMMAND_USER
+The command is a general purpose command for the user, and typically
+does not fit in one of the other categories.
+Type @kbd{help user-defined} at the @value{GDBN} prompt to see
+a list of commands in this category, as well as the list of gdb macros
+(@pxref{Sequences}).
+
+ at findex COMMAND_OBSCURE
+ at findex gdb.COMMAND_OBSCURE
+ at item gdb.COMMAND_OBSCURE
+The command is only used in unusual circumstances, or is not of
+general interest to users.  For example, @code{checkpoint},
+ at code{fork}, and @code{stop} are in this category.  Type @kbd{help
+obscure} at the @value{GDBN} prompt to see a list of commands in this
+category.
+
+ at findex COMMAND_MAINTENANCE
+ at findex gdb.COMMAND_MAINTENANCE
+ at item gdb.COMMAND_MAINTENANCE
+The command is only useful to @value{GDBN} maintainers.  The
+ at code{maintenance} and @code{flushregs} commands are in this category.
+Type @kbd{help internals} at the @value{GDBN} prompt to see a list of
+commands in this category.
+ at end table
+
+A new command can use a predefined completion function, either by
+specifying it via an argument at initialization, or by returning it
+from the @code{complete} method.  These predefined completion
+constants are all defined in the @code{gdb} module:
+
+ at table @code
+ at findex COMPLETE_NONE
+ at findex gdb.COMPLETE_NONE
+ at item gdb.COMPLETE_NONE
+This constant means that no completion should be done.
+
+ at findex COMPLETE_FILENAME
+ at findex gdb.COMPLETE_FILENAME
+ at item gdb.COMPLETE_FILENAME
+This constant means that filename completion should be performed.
+
+ at findex COMPLETE_LOCATION
+ at findex gdb.COMPLETE_LOCATION
+ at item gdb.COMPLETE_LOCATION
+This constant means that location completion should be done.
+ at xref{Specify Location}.
+
+ at findex COMPLETE_COMMAND
+ at findex gdb.COMPLETE_COMMAND
+ at item gdb.COMPLETE_COMMAND
+This constant means that completion should examine @value{GDBN}
+command names.
+
+ at findex COMPLETE_SYMBOL
+ at findex gdb.COMPLETE_SYMBOL
+ at item gdb.COMPLETE_SYMBOL
+This constant means that completion should be done using symbol names
+as the source.
+ at end table
+
+The following code snippet shows how a trivial CLI command can be
+implemented in Python:
+
+ at smallexample
+class HelloWorld (gdb.Command):
+  """Greet the whole world."""
+
+  def __init__ (self):
+    super (HelloWorld, self).__init__ ("hello-world", gdb.COMMAND_USER)
+
+  def invoke (self, arg, from_tty):
+    print "Hello, World!"
+
+HelloWorld ()
+ at end smallexample
+
+The last line instantiates the class, and is necessary to trigger the
+registration of the command with @value{GDBN}.  Depending on how the
+Python code is read into @value{GDBN}, you may need to import the
+ at code{gdb} module explicitly.
+
+ at node Parameters In Python
+ at subsubsection Parameters In Python
+
+ at cindex parameters in python
+ at cindex python parameters
+ at tindex gdb.Parameter
+ at tindex Parameter
+You can implement new @value{GDBN} parameters using Python.  A new
+parameter is implemented as an instance of the @code{gdb.Parameter}
+class.
+
+Parameters are exposed to the user via the @code{set} and
+ at code{show} commands.  @xref{Help}.
+
+There are many parameters that already exist and can be set in
+ at value{GDBN}.  Two examples are: @code{set follow fork} and
+ at code{set charset}.  Setting these parameters influences certain
+behavior in @value{GDBN}.  Similarly, you can define parameters that
+can be used to influence behavior in custom Python scripts and commands.
+
+ at defun Parameter.__init__ (name, @var{command-class}, @var{parameter-class} @r{[}, @var{enum-sequence}@r{]})
+The object initializer for @code{Parameter} registers the new
+parameter with @value{GDBN}.  This initializer is normally invoked
+from the subclass' own @code{__init__} method.
+
+ at var{name} is the name of the new parameter.  If @var{name} consists
+of multiple words, then the initial words are looked for as prefix
+parameters.  An example of this can be illustrated with the
+ at code{set print} set of parameters.  If @var{name} is
+ at code{print foo}, then @code{print} will be searched as the prefix
+parameter.  In this case the parameter can subsequently be accessed in
+ at value{GDBN} as @code{set print foo}.
+
+If @var{name} consists of multiple words, and no prefix parameter group
+can be found, an exception is raised.
+
+ at var{command-class} should be one of the @samp{COMMAND_} constants
+(@pxref{Commands In Python}).  This argument tells @value{GDBN} how to
+categorize the new parameter in the help system.
+
+ at var{parameter-class} should be one of the @samp{PARAM_} constants
+defined below.  This argument tells @value{GDBN} the type of the new
+parameter; this information is used for input validation and
+completion.
+
+If @var{parameter-class} is @code{PARAM_ENUM}, then
+ at var{enum-sequence} must be a sequence of strings.  These strings
+represent the possible values for the parameter.
+
+If @var{parameter-class} is not @code{PARAM_ENUM}, then the presence
+of a fourth argument will cause an exception to be thrown.
+
+The help text for the new parameter is taken from the Python
+documentation string for the parameter's class, if there is one.  If
+there is no documentation string, a default value is used.
+ at end defun
+
+ at defvar Parameter.set_doc
+If this attribute exists, and is a string, then its value is used as
+the help text for this parameter's @code{set} command.  The value is
+examined when @code{Parameter.__init__} is invoked; subsequent changes
+have no effect.
+ at end defvar
+
+ at defvar Parameter.show_doc
+If this attribute exists, and is a string, then its value is used as
+the help text for this parameter's @code{show} command.  The value is
+examined when @code{Parameter.__init__} is invoked; subsequent changes
+have no effect.
+ at end defvar
+
+ at defvar Parameter.value
+The @code{value} attribute holds the underlying value of the
+parameter.  It can be read and assigned to just as any other
+attribute.  @value{GDBN} does validation when assignments are made.
+ at end defvar
+
+There are two methods that should be implemented in any
+ at code{Parameter} class.  These are:
+
+ at defun Parameter.get_set_string (self)
+ at value{GDBN} will call this method when a @var{parameter}'s value has
+been changed via the @code{set} API (for example, @kbd{set foo off}).
+The @code{value} attribute has already been populated with the new
+value and may be used in output.  This method must return a string.
+ at end defun
+
+ at defun Parameter.get_show_string (self, svalue)
+ at value{GDBN} will call this method when a @var{parameter}'s
+ at code{show} API has been invoked (for example, @kbd{show foo}).  The
+argument @code{svalue} receives the string representation of the
+current value.  This method must return a string.
+ at end defun
+
+When a new parameter is defined, its type must be specified.  The
+available types are represented by constants defined in the @code{gdb}
+module:
+
+ at table @code
+ at findex PARAM_BOOLEAN
+ at findex gdb.PARAM_BOOLEAN
+ at item gdb.PARAM_BOOLEAN
+The value is a plain boolean.  The Python boolean values, @code{True}
+and @code{False} are the only valid values.
+
+ at findex PARAM_AUTO_BOOLEAN
+ at findex gdb.PARAM_AUTO_BOOLEAN
+ at item gdb.PARAM_AUTO_BOOLEAN
+The value has three possible states: true, false, and @samp{auto}.  In
+Python, true and false are represented using boolean constants, and
+ at samp{auto} is represented using @code{None}.
+
+ at findex PARAM_UINTEGER
+ at findex gdb.PARAM_UINTEGER
+ at item gdb.PARAM_UINTEGER
+The value is an unsigned integer.  The value of 0 should be
+interpreted to mean ``unlimited''.
+
+ at findex PARAM_INTEGER
+ at findex gdb.PARAM_INTEGER
+ at item gdb.PARAM_INTEGER
+The value is a signed integer.  The value of 0 should be interpreted
+to mean ``unlimited''.
+
+ at findex PARAM_STRING
+ at findex gdb.PARAM_STRING
+ at item gdb.PARAM_STRING
+The value is a string.  When the user modifies the string, any escape
+sequences, such as @samp{\t}, @samp{\f}, and octal escapes, are
+translated into corresponding characters and encoded into the current
+host charset.
+
+ at findex PARAM_STRING_NOESCAPE
+ at findex gdb.PARAM_STRING_NOESCAPE
+ at item gdb.PARAM_STRING_NOESCAPE
+The value is a string.  When the user modifies the string, escapes are
+passed through untranslated.
+
+ at findex PARAM_OPTIONAL_FILENAME
+ at findex gdb.PARAM_OPTIONAL_FILENAME
+ at item gdb.PARAM_OPTIONAL_FILENAME
+The value is a either a filename (a string), or @code{None}.
+
+ at findex PARAM_FILENAME
+ at findex gdb.PARAM_FILENAME
+ at item gdb.PARAM_FILENAME
+The value is a filename.  This is just like
+ at code{PARAM_STRING_NOESCAPE}, but uses file names for completion.
+
+ at findex PARAM_ZINTEGER
+ at findex gdb.PARAM_ZINTEGER
+ at item gdb.PARAM_ZINTEGER
+The value is an integer.  This is like @code{PARAM_INTEGER}, except 0
+is interpreted as itself.
+
+ at findex PARAM_ENUM
+ at findex gdb.PARAM_ENUM
+ at item gdb.PARAM_ENUM
+The value is a string, which must be one of a collection string
+constants provided when the parameter is created.
+ at end table
+
+ at node Functions In Python
+ at subsubsection Writing new convenience functions
+
+ at cindex writing convenience functions
+ at cindex convenience functions in python
+ at cindex python convenience functions
+ at tindex gdb.Function
+ at tindex Function
+You can implement new convenience functions (@pxref{Convenience Vars})
+in Python.  A convenience function is an instance of a subclass of the
+class @code{gdb.Function}.
+
+ at defun Function.__init__ (name)
+The initializer for @code{Function} registers the new function with
+ at value{GDBN}.  The argument @var{name} is the name of the function,
+a string.  The function will be visible to the user as a convenience
+variable of type @code{internal function}, whose name is the same as
+the given @var{name}.
+
+The documentation for the new function is taken from the documentation
+string for the new class.
+ at end defun
+
+ at defun Function.invoke (@var{*args})
+When a convenience function is evaluated, its arguments are converted
+to instances of @code{gdb.Value}, and then the function's
+ at code{invoke} method is called.  Note that @value{GDBN} does not
+predetermine the arity of convenience functions.  Instead, all
+available arguments are passed to @code{invoke}, following the
+standard Python calling convention.  In particular, a convenience
+function can have default values for parameters without ill effect.
+
+The return value of this method is used as its value in the enclosing
+expression.  If an ordinary Python value is returned, it is converted
+to a @code{gdb.Value} following the usual rules.
+ at end defun
+
+The following code snippet shows how a trivial convenience function can
+be implemented in Python:
+
+ at smallexample
+class Greet (gdb.Function):
+  """Return string to greet someone.
+Takes a name as argument."""
+
+  def __init__ (self):
+    super (Greet, self).__init__ ("greet")
+
+  def invoke (self, name):
+    return "Hello, %s!" % name.string ()
+
+Greet ()
+ at end smallexample
+
+The last line instantiates the class, and is necessary to trigger the
+registration of the function with @value{GDBN}.  Depending on how the
+Python code is read into @value{GDBN}, you may need to import the
+ at code{gdb} module explicitly.
+
+ at node Progspaces In Python
+ at subsubsection Program Spaces In Python
+
+ at cindex progspaces in python
+ at tindex gdb.Progspace
+ at tindex Progspace
+A program space, or @dfn{progspace}, represents a symbolic view
+of an address space.
+It consists of all of the objfiles of the program.
+ at xref{Objfiles In Python}.
+ at xref{Inferiors and Programs, program spaces}, for more details
+about program spaces.
+
+The following progspace-related functions are available in the
+ at code{gdb} module:
+
+ at findex gdb.current_progspace
+ at defun gdb.current_progspace ()
+This function returns the program space of the currently selected inferior.
+ at xref{Inferiors and Programs}.
+ at end defun
+
+ at findex gdb.progspaces
+ at defun gdb.progspaces ()
+Return a sequence of all the progspaces currently known to @value{GDBN}.
+ at end defun
+
+Each progspace is represented by an instance of the @code{gdb.Progspace}
+class.
+
+ at defvar Progspace.filename
+The file name of the progspace as a string.
+ at end defvar
+
+ at defvar Progspace.pretty_printers
+The @code{pretty_printers} attribute is a list of functions.  It is
+used to look up pretty-printers.  A @code{Value} is passed to each
+function in order; if the function returns @code{None}, then the
+search continues.  Otherwise, the return value should be an object
+which is used to format the value.  @xref{Pretty Printing API}, for more
+information.
+ at end defvar
+
+ at node Objfiles In Python
+ at subsubsection Objfiles In Python
+
+ at cindex objfiles in python
+ at tindex gdb.Objfile
+ at tindex Objfile
+ at value{GDBN} loads symbols for an inferior from various
+symbol-containing files (@pxref{Files}).  These include the primary
+executable file, any shared libraries used by the inferior, and any
+separate debug info files (@pxref{Separate Debug Files}).
+ at value{GDBN} calls these symbol-containing files @dfn{objfiles}.
+
+The following objfile-related functions are available in the
+ at code{gdb} module:
+
+ at findex gdb.current_objfile
+ at defun gdb.current_objfile ()
+When auto-loading a Python script (@pxref{Python Auto-loading}), @value{GDBN}
+sets the ``current objfile'' to the corresponding objfile.  This
+function returns the current objfile.  If there is no current objfile,
+this function returns @code{None}.
+ at end defun
+
+ at findex gdb.objfiles
+ at defun gdb.objfiles ()
+Return a sequence of all the objfiles current known to @value{GDBN}.
+ at xref{Objfiles In Python}.
+ at end defun
+
+Each objfile is represented by an instance of the @code{gdb.Objfile}
+class.
+
+ at defvar Objfile.filename
+The file name of the objfile as a string.
+ at end defvar
+
+ at defvar Objfile.pretty_printers
+The @code{pretty_printers} attribute is a list of functions.  It is
+used to look up pretty-printers.  A @code{Value} is passed to each
+function in order; if the function returns @code{None}, then the
+search continues.  Otherwise, the return value should be an object
+which is used to format the value.  @xref{Pretty Printing API}, for more
+information.
+ at end defvar
+
+A @code{gdb.Objfile} object has the following methods:
+
+ at defun Objfile.is_valid ()
+Returns @code{True} if the @code{gdb.Objfile} object is valid,
+ at code{False} if not.  A @code{gdb.Objfile} object can become invalid
+if the object file it refers to is not loaded in @value{GDBN} any
+longer.  All other @code{gdb.Objfile} methods will throw an exception
+if it is invalid at the time the method is called.
+ at end defun
+
+ at node Frames In Python
+ at subsubsection Accessing inferior stack frames from Python.
+
+ at cindex frames in python
+When the debugged program stops, @value{GDBN} is able to analyze its call
+stack (@pxref{Frames,,Stack frames}).  The @code{gdb.Frame} class
+represents a frame in the stack.  A @code{gdb.Frame} object is only valid
+while its corresponding frame exists in the inferior's stack.  If you try
+to use an invalid frame object, @value{GDBN} will throw a @code{gdb.error}
+exception (@pxref{Exception Handling}).
+
+Two @code{gdb.Frame} objects can be compared for equality with the @code{==}
+operator, like:
+
+ at smallexample
+(@value{GDBP}) python print gdb.newest_frame() == gdb.selected_frame ()
+True
+ at end smallexample
+
+The following frame-related functions are available in the @code{gdb} module:
+
+ at findex gdb.selected_frame
+ at defun gdb.selected_frame ()
+Return the selected frame object.  (@pxref{Selection,,Selecting a Frame}).
+ at end defun
+
+ at findex gdb.newest_frame
+ at defun gdb.newest_frame ()
+Return the newest frame object for the selected thread.
+ at end defun
+
+ at defun gdb.frame_stop_reason_string (reason)
+Return a string explaining the reason why @value{GDBN} stopped unwinding
+frames, as expressed by the given @var{reason} code (an integer, see the
+ at code{unwind_stop_reason} method further down in this section).
+ at end defun
+
+A @code{gdb.Frame} object has the following methods:
+
+ at table @code
+ at defun Frame.is_valid ()
+Returns true if the @code{gdb.Frame} object is valid, false if not.
+A frame object can become invalid if the frame it refers to doesn't
+exist anymore in the inferior.  All @code{gdb.Frame} methods will throw
+an exception if it is invalid at the time the method is called.
+ at end defun
+
+ at defun Frame.name ()
+Returns the function name of the frame, or @code{None} if it can't be
+obtained.
+ at end defun
+
+ at defun Frame.type ()
+Returns the type of the frame.  The value can be one of:
+ at table @code
+ at item gdb.NORMAL_FRAME
+An ordinary stack frame.
+
+ at item gdb.DUMMY_FRAME
+A fake stack frame that was created by @value{GDBN} when performing an
+inferior function call.
+
+ at item gdb.INLINE_FRAME
+A frame representing an inlined function.  The function was inlined
+into a @code{gdb.NORMAL_FRAME} that is older than this one.
+
+ at item gdb.TAILCALL_FRAME
+A frame representing a tail call.  @xref{Tail Call Frames}.
+
+ at item gdb.SIGTRAMP_FRAME
+A signal trampoline frame.  This is the frame created by the OS when
+it calls into a signal handler.
+
+ at item gdb.ARCH_FRAME
+A fake stack frame representing a cross-architecture call.
+
+ at item gdb.SENTINEL_FRAME
+This is like @code{gdb.NORMAL_FRAME}, but it is only used for the
+newest frame.
+ at end table
+ at end defun
+
+ at defun Frame.unwind_stop_reason ()
+Return an integer representing the reason why it's not possible to find
+more frames toward the outermost frame.  Use
+ at code{gdb.frame_stop_reason_string} to convert the value returned by this
+function to a string. The value can be one of:
+
+ at table @code
+ at item gdb.FRAME_UNWIND_NO_REASON
+No particular reason (older frames should be available).
+
+ at item gdb.FRAME_UNWIND_NULL_ID
+The previous frame's analyzer returns an invalid result.
+
+ at item gdb.FRAME_UNWIND_OUTERMOST
+This frame is the outermost.
+
+ at item gdb.FRAME_UNWIND_UNAVAILABLE
+Cannot unwind further, because that would require knowing the 
+values of registers or memory that have not been collected.
+
+ at item gdb.FRAME_UNWIND_INNER_ID
+This frame ID looks like it ought to belong to a NEXT frame,
+but we got it for a PREV frame.  Normally, this is a sign of
+unwinder failure.  It could also indicate stack corruption.
+
+ at item gdb.FRAME_UNWIND_SAME_ID
+This frame has the same ID as the previous one.  That means
+that unwinding further would almost certainly give us another
+frame with exactly the same ID, so break the chain.  Normally,
+this is a sign of unwinder failure.  It could also indicate
+stack corruption.
+
+ at item gdb.FRAME_UNWIND_NO_SAVED_PC
+The frame unwinder did not find any saved PC, but we needed
+one to unwind further.
+
+ at item gdb.FRAME_UNWIND_FIRST_ERROR
+Any stop reason greater or equal to this value indicates some kind
+of error.  This special value facilitates writing code that tests
+for errors in unwinding in a way that will work correctly even if
+the list of the other values is modified in future @value{GDBN}
+versions.  Using it, you could write:
+ at smallexample
+reason = gdb.selected_frame().unwind_stop_reason ()
+reason_str =  gdb.frame_stop_reason_string (reason)
+if reason >=  gdb.FRAME_UNWIND_FIRST_ERROR:
+    print "An error occured: %s" % reason_str
+ at end smallexample
+ at end table
+
+ at end defun
+
+ at defun Frame.pc ()
+Returns the frame's resume address.
+ at end defun
+
+ at defun Frame.block ()
+Return the frame's code block.  @xref{Blocks In Python}.
+ at end defun
+
+ at defun Frame.function ()
+Return the symbol for the function corresponding to this frame.
+ at xref{Symbols In Python}.
+ at end defun
+
+ at defun Frame.older ()
+Return the frame that called this frame.
+ at end defun
+
+ at defun Frame.newer ()
+Return the frame called by this frame.
+ at end defun
+
+ at defun Frame.find_sal ()
+Return the frame's symtab and line object.
+ at xref{Symbol Tables In Python}.
+ at end defun
+
+ at defun Frame.read_var (variable @r{[}, block at r{]})
+Return the value of @var{variable} in this frame.  If the optional
+argument @var{block} is provided, search for the variable from that
+block; otherwise start at the frame's current block (which is
+determined by the frame's current program counter).  @var{variable}
+must be a string or a @code{gdb.Symbol} object.  @var{block} must be a
+ at code{gdb.Block} object.
+ at end defun
+
+ at defun Frame.select ()
+Set this frame to be the selected frame.  @xref{Stack, ,Examining the
+Stack}.
+ at end defun
+ at end table
+
+ at node Blocks In Python
+ at subsubsection Accessing frame blocks from Python.
+
+ at cindex blocks in python
+ at tindex gdb.Block
+
+Within each frame, @value{GDBN} maintains information on each block
+stored in that frame.  These blocks are organized hierarchically, and
+are represented individually in Python as a @code{gdb.Block}.
+Please see @ref{Frames In Python}, for a more in-depth discussion on
+frames.  Furthermore, see @ref{Stack, ,Examining the Stack}, for more
+detailed technical information on @value{GDBN}'s book-keeping of the
+stack.
+
+A @code{gdb.Block} is iterable.  The iterator returns the symbols
+(@pxref{Symbols In Python}) local to the block.  Python programs
+should not assume that a specific block object will always contain a
+given symbol, since changes in @value{GDBN} features and
+infrastructure may cause symbols move across blocks in a symbol
+table.
+
+The following block-related functions are available in the @code{gdb}
+module:
+
+ at findex gdb.block_for_pc
+ at defun gdb.block_for_pc (pc)
+Return the @code{gdb.Block} containing the given @var{pc} value.  If the
+block cannot be found for the @var{pc} value specified, the function
+will return @code{None}.
+ at end defun
+
+A @code{gdb.Block} object has the following methods:
+
+ at table @code
+ at defun Block.is_valid ()
+Returns @code{True} if the @code{gdb.Block} object is valid,
+ at code{False} if not.  A block object can become invalid if the block it
+refers to doesn't exist anymore in the inferior.  All other
+ at code{gdb.Block} methods will throw an exception if it is invalid at
+the time the method is called.  The block's validity is also checked
+during iteration over symbols of the block.
+ at end defun
+ at end table
+
+A @code{gdb.Block} object has the following attributes:
+
+ at table @code
+ at defvar Block.start
+The start address of the block.  This attribute is not writable.
+ at end defvar
+
+ at defvar Block.end
+The end address of the block.  This attribute is not writable.
+ at end defvar
+
+ at defvar Block.function
+The name of the block represented as a @code{gdb.Symbol}.  If the
+block is not named, then this attribute holds @code{None}.  This
+attribute is not writable.
+ at end defvar
+
+ at defvar Block.superblock
+The block containing this block.  If this parent block does not exist,
+this attribute holds @code{None}.  This attribute is not writable.
+ at end defvar
+
+ at defvar Block.global_block
+The global block associated with this block.  This attribute is not
+writable.
+ at end defvar
+
+ at defvar Block.static_block
+The static block associated with this block.  This attribute is not
+writable.
+ at end defvar
+
+ at defvar Block.is_global
+ at code{True} if the @code{gdb.Block} object is a global block,
+ at code{False} if not.  This attribute is not
+writable.
+ at end defvar
+
+ at defvar Block.is_static
+ at code{True} if the @code{gdb.Block} object is a static block,
+ at code{False} if not.  This attribute is not writable.
+ at end defvar
+ at end table
+
+ at node Symbols In Python
+ at subsubsection Python representation of Symbols.
+
+ at cindex symbols in python
+ at tindex gdb.Symbol
+
+ at value{GDBN} represents every variable, function and type as an
+entry in a symbol table.  @xref{Symbols, ,Examining the Symbol Table}.
+Similarly, Python represents these symbols in @value{GDBN} with the
+ at code{gdb.Symbol} object.
+
+The following symbol-related functions are available in the @code{gdb}
+module:
+
+ at findex gdb.lookup_symbol
+ at defun gdb.lookup_symbol (name @r{[}, block @r{[}, domain at r{]]})
+This function searches for a symbol by name.  The search scope can be
+restricted to the parameters defined in the optional domain and block
+arguments.
+
+ at var{name} is the name of the symbol.  It must be a string.  The
+optional @var{block} argument restricts the search to symbols visible
+in that @var{block}.  The @var{block} argument must be a
+ at code{gdb.Block} object.  If omitted, the block for the current frame
+is used.  The optional @var{domain} argument restricts
+the search to the domain type.  The @var{domain} argument must be a
+domain constant defined in the @code{gdb} module and described later
+in this chapter.
+
+The result is a tuple of two elements.
+The first element is a @code{gdb.Symbol} object or @code{None} if the symbol
+is not found.
+If the symbol is found, the second element is @code{True} if the symbol
+is a field of a method's object (e.g., @code{this} in C at t{++}),
+otherwise it is @code{False}.
+If the symbol is not found, the second element is @code{False}.
+ at end defun
+
+ at findex gdb.lookup_global_symbol
+ at defun gdb.lookup_global_symbol (name @r{[}, domain at r{]})
+This function searches for a global symbol by name.
+The search scope can be restricted to by the domain argument.
+
+ at var{name} is the name of the symbol.  It must be a string.
+The optional @var{domain} argument restricts the search to the domain type.
+The @var{domain} argument must be a domain constant defined in the @code{gdb}
+module and described later in this chapter.
+
+The result is a @code{gdb.Symbol} object or @code{None} if the symbol
+is not found.
+ at end defun
+
+A @code{gdb.Symbol} object has the following attributes:
+
+ at table @code
+ at defvar Symbol.type
+The type of the symbol or @code{None} if no type is recorded.
+This attribute is represented as a @code{gdb.Type} object.
+ at xref{Types In Python}.  This attribute is not writable.
+ at end defvar
+
+ at defvar Symbol.symtab
+The symbol table in which the symbol appears.  This attribute is
+represented as a @code{gdb.Symtab} object.  @xref{Symbol Tables In
+Python}.  This attribute is not writable.
+ at end defvar
+
+ at defvar Symbol.line
+The line number in the source code at which the symbol was defined.
+This is an integer.
+ at end defvar
+
+ at defvar Symbol.name
+The name of the symbol as a string.  This attribute is not writable.
+ at end defvar
+
+ at defvar Symbol.linkage_name
+The name of the symbol, as used by the linker (i.e., may be mangled).
+This attribute is not writable.
+ at end defvar
+
+ at defvar Symbol.print_name
+The name of the symbol in a form suitable for output.  This is either
+ at code{name} or @code{linkage_name}, depending on whether the user
+asked @value{GDBN} to display demangled or mangled names.
+ at end defvar
+
+ at defvar Symbol.addr_class
+The address class of the symbol.  This classifies how to find the value
+of a symbol.  Each address class is a constant defined in the
+ at code{gdb} module and described later in this chapter.
+ at end defvar
+
+ at defvar Symbol.needs_frame
+This is @code{True} if evaluating this symbol's value requires a frame
+(@pxref{Frames In Python}) and @code{False} otherwise.  Typically,
+local variables will require a frame, but other symbols will not.
+ at end defvar
+
+ at defvar Symbol.is_argument
+ at code{True} if the symbol is an argument of a function.
+ at end defvar
+
+ at defvar Symbol.is_constant
+ at code{True} if the symbol is a constant.
+ at end defvar
+
+ at defvar Symbol.is_function
+ at code{True} if the symbol is a function or a method.
+ at end defvar
+
+ at defvar Symbol.is_variable
+ at code{True} if the symbol is a variable.
+ at end defvar
+ at end table
+
+A @code{gdb.Symbol} object has the following methods:
+
+ at table @code
+ at defun Symbol.is_valid ()
+Returns @code{True} if the @code{gdb.Symbol} object is valid,
+ at code{False} if not.  A @code{gdb.Symbol} object can become invalid if
+the symbol it refers to does not exist in @value{GDBN} any longer.
+All other @code{gdb.Symbol} methods will throw an exception if it is
+invalid at the time the method is called.
+ at end defun
+
+ at defun Symbol.value (@r{[}frame at r{]})
+Compute the value of the symbol, as a @code{gdb.Value}.  For
+functions, this computes the address of the function, cast to the
+appropriate type.  If the symbol requires a frame in order to compute
+its value, then @var{frame} must be given.  If @var{frame} is not
+given, or if @var{frame} is invalid, then this method will throw an
+exception.
+ at end defun
+ at end table
+
+The available domain categories in @code{gdb.Symbol} are represented
+as constants in the @code{gdb} module:
+
+ at table @code
+ at findex SYMBOL_UNDEF_DOMAIN
+ at findex gdb.SYMBOL_UNDEF_DOMAIN
+ at item gdb.SYMBOL_UNDEF_DOMAIN
+This is used when a domain has not been discovered or none of the
+following domains apply.  This usually indicates an error either
+in the symbol information or in @value{GDBN}'s handling of symbols.
+ at findex SYMBOL_VAR_DOMAIN
+ at findex gdb.SYMBOL_VAR_DOMAIN
+ at item gdb.SYMBOL_VAR_DOMAIN
+This domain contains variables, function names, typedef names and enum
+type values.
+ at findex SYMBOL_STRUCT_DOMAIN
+ at findex gdb.SYMBOL_STRUCT_DOMAIN
+ at item gdb.SYMBOL_STRUCT_DOMAIN
+This domain holds struct, union and enum type names.
+ at findex SYMBOL_LABEL_DOMAIN
+ at findex gdb.SYMBOL_LABEL_DOMAIN
+ at item gdb.SYMBOL_LABEL_DOMAIN
+This domain contains names of labels (for gotos).
+ at findex SYMBOL_VARIABLES_DOMAIN
+ at findex gdb.SYMBOL_VARIABLES_DOMAIN
+ at item gdb.SYMBOL_VARIABLES_DOMAIN
+This domain holds a subset of the @code{SYMBOLS_VAR_DOMAIN}; it
+contains everything minus functions and types.
+ at findex SYMBOL_FUNCTIONS_DOMAIN
+ at findex gdb.SYMBOL_FUNCTIONS_DOMAIN
+ at item gdb.SYMBOL_FUNCTION_DOMAIN
+This domain contains all functions.
+ at findex SYMBOL_TYPES_DOMAIN
+ at findex gdb.SYMBOL_TYPES_DOMAIN
+ at item gdb.SYMBOL_TYPES_DOMAIN
+This domain contains all types.
+ at end table
+
+The available address class categories in @code{gdb.Symbol} are represented
+as constants in the @code{gdb} module:
+
+ at table @code
+ at findex SYMBOL_LOC_UNDEF
+ at findex gdb.SYMBOL_LOC_UNDEF
+ at item gdb.SYMBOL_LOC_UNDEF
+If this is returned by address class, it indicates an error either in
+the symbol information or in @value{GDBN}'s handling of symbols.
+ at findex SYMBOL_LOC_CONST
+ at findex gdb.SYMBOL_LOC_CONST
+ at item gdb.SYMBOL_LOC_CONST
+Value is constant int.
+ at findex SYMBOL_LOC_STATIC
+ at findex gdb.SYMBOL_LOC_STATIC
+ at item gdb.SYMBOL_LOC_STATIC
+Value is at a fixed address.
+ at findex SYMBOL_LOC_REGISTER
+ at findex gdb.SYMBOL_LOC_REGISTER
+ at item gdb.SYMBOL_LOC_REGISTER
+Value is in a register.
+ at findex SYMBOL_LOC_ARG
+ at findex gdb.SYMBOL_LOC_ARG
+ at item gdb.SYMBOL_LOC_ARG
+Value is an argument.  This value is at the offset stored within the
+symbol inside the frame's argument list.
+ at findex SYMBOL_LOC_REF_ARG
+ at findex gdb.SYMBOL_LOC_REF_ARG
+ at item gdb.SYMBOL_LOC_REF_ARG
+Value address is stored in the frame's argument list.  Just like
+ at code{LOC_ARG} except that the value's address is stored at the
+offset, not the value itself.
+ at findex SYMBOL_LOC_REGPARM_ADDR
+ at findex gdb.SYMBOL_LOC_REGPARM_ADDR
+ at item gdb.SYMBOL_LOC_REGPARM_ADDR
+Value is a specified register.  Just like @code{LOC_REGISTER} except
+the register holds the address of the argument instead of the argument
+itself.
+ at findex SYMBOL_LOC_LOCAL
+ at findex gdb.SYMBOL_LOC_LOCAL
+ at item gdb.SYMBOL_LOC_LOCAL
+Value is a local variable.
+ at findex SYMBOL_LOC_TYPEDEF
+ at findex gdb.SYMBOL_LOC_TYPEDEF
+ at item gdb.SYMBOL_LOC_TYPEDEF
+Value not used.  Symbols in the domain @code{SYMBOL_STRUCT_DOMAIN} all
+have this class.
+ at findex SYMBOL_LOC_BLOCK
+ at findex gdb.SYMBOL_LOC_BLOCK
+ at item gdb.SYMBOL_LOC_BLOCK
+Value is a block.
+ at findex SYMBOL_LOC_CONST_BYTES
+ at findex gdb.SYMBOL_LOC_CONST_BYTES
+ at item gdb.SYMBOL_LOC_CONST_BYTES
+Value is a byte-sequence.
+ at findex SYMBOL_LOC_UNRESOLVED
+ at findex gdb.SYMBOL_LOC_UNRESOLVED
+ at item gdb.SYMBOL_LOC_UNRESOLVED
+Value is at a fixed address, but the address of the variable has to be
+determined from the minimal symbol table whenever the variable is
+referenced.
+ at findex SYMBOL_LOC_OPTIMIZED_OUT
+ at findex gdb.SYMBOL_LOC_OPTIMIZED_OUT
+ at item gdb.SYMBOL_LOC_OPTIMIZED_OUT
+The value does not actually exist in the program.
+ at findex SYMBOL_LOC_COMPUTED
+ at findex gdb.SYMBOL_LOC_COMPUTED
+ at item gdb.SYMBOL_LOC_COMPUTED
+The value's address is a computed location.
+ at end table
+
+ at node Symbol Tables In Python
+ at subsubsection Symbol table representation in Python.
+
+ at cindex symbol tables in python
+ at tindex gdb.Symtab
+ at tindex gdb.Symtab_and_line
+
+Access to symbol table data maintained by @value{GDBN} on the inferior
+is exposed to Python via two objects: @code{gdb.Symtab_and_line} and
+ at code{gdb.Symtab}.  Symbol table and line data for a frame is returned
+from the @code{find_sal} method in @code{gdb.Frame} object.
+ at xref{Frames In Python}.
+
+For more information on @value{GDBN}'s symbol table management, see
+ at ref{Symbols, ,Examining the Symbol Table}, for more information.
+
+A @code{gdb.Symtab_and_line} object has the following attributes:
+
+ at table @code
+ at defvar Symtab_and_line.symtab
+The symbol table object (@code{gdb.Symtab}) for this frame.
+This attribute is not writable.
+ at end defvar
+
+ at defvar Symtab_and_line.pc
+Indicates the start of the address range occupied by code for the
+current source line.  This attribute is not writable.
+ at end defvar
+
+ at defvar Symtab_and_line.last
+Indicates the end of the address range occupied by code for the current
+source line.  This attribute is not writable.
+ at end defvar
+
+ at defvar Symtab_and_line.line
+Indicates the current line number for this object.  This
+attribute is not writable.
+ at end defvar
+ at end table
+
+A @code{gdb.Symtab_and_line} object has the following methods:
+
+ at table @code
+ at defun Symtab_and_line.is_valid ()
+Returns @code{True} if the @code{gdb.Symtab_and_line} object is valid,
+ at code{False} if not.  A @code{gdb.Symtab_and_line} object can become
+invalid if the Symbol table and line object it refers to does not
+exist in @value{GDBN} any longer.  All other
+ at code{gdb.Symtab_and_line} methods will throw an exception if it is
+invalid at the time the method is called.
+ at end defun
+ at end table
+
+A @code{gdb.Symtab} object has the following attributes:
+
+ at table @code
+ at defvar Symtab.filename
+The symbol table's source filename.  This attribute is not writable.
+ at end defvar
+
+ at defvar Symtab.objfile
+The symbol table's backing object file.  @xref{Objfiles In Python}.
+This attribute is not writable.
+ at end defvar
+ at end table
+
+A @code{gdb.Symtab} object has the following methods:
+
+ at table @code
+ at defun Symtab.is_valid ()
+Returns @code{True} if the @code{gdb.Symtab} object is valid,
+ at code{False} if not.  A @code{gdb.Symtab} object can become invalid if
+the symbol table it refers to does not exist in @value{GDBN} any
+longer.  All other @code{gdb.Symtab} methods will throw an exception
+if it is invalid at the time the method is called.
+ at end defun
+
+ at defun Symtab.fullname ()
+Return the symbol table's source absolute file name.
+ at end defun
+
+ at defun Symtab.global_block ()
+Return the global block of the underlying symbol table.
+ at xref{Blocks In Python}.
+ at end defun
+
+ at defun Symtab.static_block ()
+Return the static block of the underlying symbol table.
+ at xref{Blocks In Python}.
+ at end defun
+ at end table
+
+ at node Breakpoints In Python
+ at subsubsection Manipulating breakpoints using Python
+
+ at cindex breakpoints in python
+ at tindex gdb.Breakpoint
+
+Python code can manipulate breakpoints via the @code{gdb.Breakpoint}
+class.
+
+ at defun Breakpoint.__init__ (spec @r{[}, type @r{[}, wp_class @r{[},internal at r{]]]})
+Create a new breakpoint.  @var{spec} is a string naming the
+location of the breakpoint, or an expression that defines a
+watchpoint.  The contents can be any location recognized by the
+ at code{break} command, or in the case of a watchpoint, by the @code{watch}
+command.  The optional @var{type} denotes the breakpoint to create
+from the types defined later in this chapter.  This argument can be
+either: @code{gdb.BP_BREAKPOINT} or @code{gdb.BP_WATCHPOINT}.  @var{type}
+defaults to @code{gdb.BP_BREAKPOINT}.  The optional @var{internal} argument
+allows the breakpoint to become invisible to the user.  The breakpoint
+will neither be reported when created, nor will it be listed in the
+output from @code{info breakpoints} (but will be listed with the
+ at code{maint info breakpoints} command).  The optional @var{wp_class}
+argument defines the class of watchpoint to create, if @var{type} is
+ at code{gdb.BP_WATCHPOINT}.  If a watchpoint class is not provided, it is
+assumed to be a @code{gdb.WP_WRITE} class.
+ at end defun
+
+ at defun Breakpoint.stop (self)
+The @code{gdb.Breakpoint} class can be sub-classed and, in
+particular, you may choose to implement the @code{stop} method.
+If this method is defined as a sub-class of @code{gdb.Breakpoint},
+it will be called when the inferior reaches any location of a
+breakpoint which instantiates that sub-class.  If the method returns
+ at code{True}, the inferior will be stopped at the location of the
+breakpoint, otherwise the inferior will continue.
+
+If there are multiple breakpoints at the same location with a
+ at code{stop} method, each one will be called regardless of the
+return status of the previous.  This ensures that all @code{stop}
+methods have a chance to execute at that location.  In this scenario
+if one of the methods returns @code{True} but the others return
+ at code{False}, the inferior will still be stopped.
+
+You should not alter the execution state of the inferior (i.e.@:, step,
+next, etc.), alter the current frame context (i.e.@:, change the current
+active frame), or alter, add or delete any breakpoint.  As a general
+rule, you should not alter any data within @value{GDBN} or the inferior
+at this time.
+
+Example @code{stop} implementation:
+
+ at smallexample
+class MyBreakpoint (gdb.Breakpoint):
+      def stop (self):
+        inf_val = gdb.parse_and_eval("foo")
+        if inf_val == 3:
+          return True
+        return False
+ at end smallexample
+ at end defun
+
+The available watchpoint types represented by constants are defined in the
+ at code{gdb} module:
+
+ at table @code
+ at findex WP_READ
+ at findex gdb.WP_READ
+ at item gdb.WP_READ
+Read only watchpoint.
+
+ at findex WP_WRITE
+ at findex gdb.WP_WRITE
+ at item gdb.WP_WRITE
+Write only watchpoint.
+
+ at findex WP_ACCESS
+ at findex gdb.WP_ACCESS
+ at item gdb.WP_ACCESS
+Read/Write watchpoint.
+ at end table
+
+ at defun Breakpoint.is_valid ()
+Return @code{True} if this @code{Breakpoint} object is valid,
+ at code{False} otherwise.  A @code{Breakpoint} object can become invalid
+if the user deletes the breakpoint.  In this case, the object still
+exists, but the underlying breakpoint does not.  In the cases of
+watchpoint scope, the watchpoint remains valid even if execution of the
+inferior leaves the scope of that watchpoint.
+ at end defun
+
+ at defun Breakpoint.delete
+Permanently deletes the @value{GDBN} breakpoint.  This also
+invalidates the Python @code{Breakpoint} object.  Any further access
+to this object's attributes or methods will raise an error.
+ at end defun
+
+ at defvar Breakpoint.enabled
+This attribute is @code{True} if the breakpoint is enabled, and
+ at code{False} otherwise.  This attribute is writable.
+ at end defvar
+
+ at defvar Breakpoint.silent
+This attribute is @code{True} if the breakpoint is silent, and
+ at code{False} otherwise.  This attribute is writable.
+
+Note that a breakpoint can also be silent if it has commands and the
+first command is @code{silent}.  This is not reported by the
+ at code{silent} attribute.
+ at end defvar
+
+ at defvar Breakpoint.thread
+If the breakpoint is thread-specific, this attribute holds the thread
+id.  If the breakpoint is not thread-specific, this attribute is
+ at code{None}.  This attribute is writable.
+ at end defvar
+
+ at defvar Breakpoint.task
+If the breakpoint is Ada task-specific, this attribute holds the Ada task
+id.  If the breakpoint is not task-specific (or the underlying
+language is not Ada), this attribute is @code{None}.  This attribute
+is writable.
+ at end defvar
+
+ at defvar Breakpoint.ignore_count
+This attribute holds the ignore count for the breakpoint, an integer.
+This attribute is writable.
+ at end defvar
+
+ at defvar Breakpoint.number
+This attribute holds the breakpoint's number --- the identifier used by
+the user to manipulate the breakpoint.  This attribute is not writable.
+ at end defvar
+
+ at defvar Breakpoint.type
+This attribute holds the breakpoint's type --- the identifier used to
+determine the actual breakpoint type or use-case.  This attribute is not
+writable.
+ at end defvar
+
+ at defvar Breakpoint.visible
+This attribute tells whether the breakpoint is visible to the user
+when set, or when the @samp{info breakpoints} command is run.  This
+attribute is not writable.
+ at end defvar
+
+The available types are represented by constants defined in the @code{gdb}
+module:
+
+ at table @code
+ at findex BP_BREAKPOINT
+ at findex gdb.BP_BREAKPOINT
+ at item gdb.BP_BREAKPOINT
+Normal code breakpoint.
+
+ at findex BP_WATCHPOINT
+ at findex gdb.BP_WATCHPOINT
+ at item gdb.BP_WATCHPOINT
+Watchpoint breakpoint.
+
+ at findex BP_HARDWARE_WATCHPOINT
+ at findex gdb.BP_HARDWARE_WATCHPOINT
+ at item gdb.BP_HARDWARE_WATCHPOINT
+Hardware assisted watchpoint.
+
+ at findex BP_READ_WATCHPOINT
+ at findex gdb.BP_READ_WATCHPOINT
+ at item gdb.BP_READ_WATCHPOINT
+Hardware assisted read watchpoint.
+
+ at findex BP_ACCESS_WATCHPOINT
+ at findex gdb.BP_ACCESS_WATCHPOINT
+ at item gdb.BP_ACCESS_WATCHPOINT
+Hardware assisted access watchpoint.
+ at end table
+
+ at defvar Breakpoint.hit_count
+This attribute holds the hit count for the breakpoint, an integer.
+This attribute is writable, but currently it can only be set to zero.
+ at end defvar
+
+ at defvar Breakpoint.location
+This attribute holds the location of the breakpoint, as specified by
+the user.  It is a string.  If the breakpoint does not have a location
+(that is, it is a watchpoint) the attribute's value is @code{None}.  This
+attribute is not writable.
+ at end defvar
+
+ at defvar Breakpoint.expression
+This attribute holds a breakpoint expression, as specified by
+the user.  It is a string.  If the breakpoint does not have an
+expression (the breakpoint is not a watchpoint) the attribute's value
+is @code{None}.  This attribute is not writable.
+ at end defvar
+
+ at defvar Breakpoint.condition
+This attribute holds the condition of the breakpoint, as specified by
+the user.  It is a string.  If there is no condition, this attribute's
+value is @code{None}.  This attribute is writable.
+ at end defvar
+
+ at defvar Breakpoint.commands
+This attribute holds the commands attached to the breakpoint.  If
+there are commands, this attribute's value is a string holding all the
+commands, separated by newlines.  If there are no commands, this
+attribute is @code{None}.  This attribute is not writable.
+ at end defvar
+
+ at node Finish Breakpoints in Python
+ at subsubsection Finish Breakpoints
+
+ at cindex python finish breakpoints
+ at tindex gdb.FinishBreakpoint
+
+A finish breakpoint is a temporary breakpoint set at the return address of
+a frame, based on the @code{finish} command.  @code{gdb.FinishBreakpoint}
+extends @code{gdb.Breakpoint}.  The underlying breakpoint will be disabled 
+and deleted when the execution will run out of the breakpoint scope (i.e.@: 
+ at code{Breakpoint.stop} or @code{FinishBreakpoint.out_of_scope} triggered).
+Finish breakpoints are thread specific and must be create with the right 
+thread selected.  
+ 
+ at defun FinishBreakpoint.__init__ (@r{[}frame at r{]} @r{[}, internal at r{]})
+Create a finish breakpoint at the return address of the @code{gdb.Frame}
+object @var{frame}.  If @var{frame} is not provided, this defaults to the
+newest frame.  The optional @var{internal} argument allows the breakpoint to
+become invisible to the user.  @xref{Breakpoints In Python}, for further 
+details about this argument.
+ at end defun
+
+ at defun FinishBreakpoint.out_of_scope (self)
+In some circumstances (e.g.@: @code{longjmp}, C at t{++} exceptions, @value{GDBN} 
+ at code{return} command, @dots{}), a function may not properly terminate, and
+thus never hit the finish breakpoint.  When @value{GDBN} notices such a
+situation, the @code{out_of_scope} callback will be triggered.
+
+You may want to sub-class @code{gdb.FinishBreakpoint} and override this
+method:
+
+ at smallexample
+class MyFinishBreakpoint (gdb.FinishBreakpoint)
+    def stop (self):
+        print "normal finish"
+        return True
+    
+    def out_of_scope ():
+        print "abnormal finish"
+ at end smallexample 
+ at end defun
+
+ at defvar FinishBreakpoint.return_value
+When @value{GDBN} is stopped at a finish breakpoint and the frame 
+used to build the @code{gdb.FinishBreakpoint} object had debug symbols, this
+attribute will contain a @code{gdb.Value} object corresponding to the return
+value of the function.  The value will be @code{None} if the function return 
+type is @code{void} or if the return value was not computable.  This attribute
+is not writable.
+ at end defvar
+
+ at node Lazy Strings In Python
+ at subsubsection Python representation of lazy strings.
+
+ at cindex lazy strings in python
+ at tindex gdb.LazyString
+
+A @dfn{lazy string} is a string whose contents is not retrieved or
+encoded until it is needed.
+
+A @code{gdb.LazyString} is represented in @value{GDBN} as an
+ at code{address} that points to a region of memory, an @code{encoding}
+that will be used to encode that region of memory, and a @code{length}
+to delimit the region of memory that represents the string.  The
+difference between a @code{gdb.LazyString} and a string wrapped within
+a @code{gdb.Value} is that a @code{gdb.LazyString} will be treated
+differently by @value{GDBN} when printing.  A @code{gdb.LazyString} is
+retrieved and encoded during printing, while a @code{gdb.Value}
+wrapping a string is immediately retrieved and encoded on creation.
+
+A @code{gdb.LazyString} object has the following functions:
+
+ at defun LazyString.value ()
+Convert the @code{gdb.LazyString} to a @code{gdb.Value}.  This value
+will point to the string in memory, but will lose all the delayed
+retrieval, encoding and handling that @value{GDBN} applies to a
+ at code{gdb.LazyString}.
+ at end defun
+
+ at defvar LazyString.address
+This attribute holds the address of the string.  This attribute is not
+writable.
+ at end defvar
+
+ at defvar LazyString.length
+This attribute holds the length of the string in characters.  If the
+length is -1, then the string will be fetched and encoded up to the
+first null of appropriate width.  This attribute is not writable.
+ at end defvar
+
+ at defvar LazyString.encoding
+This attribute holds the encoding that will be applied to the string
+when the string is printed by @value{GDBN}.  If the encoding is not
+set, or contains an empty string,  then @value{GDBN} will select the
+most appropriate encoding when the string is printed.  This attribute
+is not writable.
+ at end defvar
+
+ at defvar LazyString.type
+This attribute holds the type that is represented by the lazy string's
+type.  For a lazy string this will always be a pointer type.  To
+resolve this to the lazy string's character type, use the type's
+ at code{target} method.  @xref{Types In Python}.  This attribute is not
+writable.
+ at end defvar
+
+ at node Python Auto-loading
+ at subsection Python Auto-loading
+ at cindex Python auto-loading
+
+When a new object file is read (for example, due to the @code{file}
+command, or because the inferior has loaded a shared library),
+ at value{GDBN} will look for Python support scripts in several ways:
+ at file{@var{objfile}-gdb.py} (@pxref{objfile-gdb.py file})
+and @code{.debug_gdb_scripts} section
+(@pxref{dotdebug_gdb_scripts section}).
+
+The auto-loading feature is useful for supplying application-specific
+debugging commands and scripts.
+
+Auto-loading can be enabled or disabled,
+and the list of auto-loaded scripts can be printed.
+
+ at table @code
+ at anchor{set auto-load python-scripts}
+ at kindex set auto-load python-scripts
+ at item set auto-load python-scripts [on|off]
+Enable or disable the auto-loading of Python scripts.
+
+ at anchor{show auto-load python-scripts}
+ at kindex show auto-load python-scripts
+ at item show auto-load python-scripts
+Show whether auto-loading of Python scripts is enabled or disabled.
+
+ at anchor{info auto-load python-scripts}
+ at kindex info auto-load python-scripts
+ at cindex print list of auto-loaded Python scripts
+ at item info auto-load python-scripts [@var{regexp}]
+Print the list of all Python scripts that @value{GDBN} auto-loaded.
+
+Also printed is the list of Python scripts that were mentioned in
+the @code{.debug_gdb_scripts} section and were not found
+(@pxref{dotdebug_gdb_scripts section}).
+This is useful because their names are not printed when @value{GDBN}
+tries to load them and fails.  There may be many of them, and printing
+an error message for each one is problematic.
+
+If @var{regexp} is supplied only Python scripts with matching names are printed.
+
+Example:
+
+ at smallexample
+(gdb) info auto-load python-scripts
+Loaded Script
+Yes    py-section-script.py
+       full name: /tmp/py-section-script.py
+No     my-foo-pretty-printers.py
+ at end smallexample
+ at end table
+
+When reading an auto-loaded file, @value{GDBN} sets the
+ at dfn{current objfile}.  This is available via the @code{gdb.current_objfile}
+function (@pxref{Objfiles In Python}).  This can be useful for
+registering objfile-specific pretty-printers.
+
+ at menu
+* objfile-gdb.py file::          The @file{@var{objfile}-gdb.py} file
+* dotdebug_gdb_scripts section:: The @code{.debug_gdb_scripts} section
+* Which flavor to choose?::
+ at end menu
+
+ at node objfile-gdb.py file
+ at subsubsection The @file{@var{objfile}-gdb.py} file
+ at cindex @file{@var{objfile}-gdb.py}
+
+When a new object file is read, @value{GDBN} looks for
+a file named @file{@var{objfile}-gdb.py} (we call it @var{script-name} below),
+where @var{objfile} is the object file's real name, formed by ensuring
+that the file name is absolute, following all symlinks, and resolving
+ at code{.} and @code{..} components.  If this file exists and is
+readable, @value{GDBN} will evaluate it as a Python script.
+
+If this file does not exist, then @value{GDBN} will look for
+ at var{script-name} file in all of the directories as specified below.
+
+Note that loading of this script file also requires accordingly configured
+ at code{auto-load safe-path} (@pxref{Auto-loading safe path}).
+
+ at table @code
+ at anchor{set auto-load scripts-directory}
+ at kindex set auto-load scripts-directory
+ at item set auto-load scripts-directory @r{[}@var{directories}@r{]}
+Control @value{GDBN} auto-loaded scripts location.  Multiple directory entries
+may be delimited by the host platform path separator in use
+(@samp{:} on Unix, @samp{;} on MS-Windows and MS-DOS).
+
+Each entry here needs to be covered also by the security setting
+ at code{set auto-load safe-path} (@pxref{set auto-load safe-path}).
+
+ at anchor{with-auto-load-dir}
+This variable defaults to @file{$debugdir:$datadir/auto-load}.  The default
+ at code{set auto-load safe-path} value can be also overriden by @value{GDBN}
+configuration option @option{--with-auto-load-dir}.
+
+Any reference to @file{$debugdir} will get replaced by
+ at var{debug-file-directory} value (@pxref{Separate Debug Files}) and any
+reference to @file{$datadir} will get replaced by @var{data-directory} which is
+determined at @value{GDBN} startup (@pxref{Data Files}).  @file{$debugdir} and
+ at file{$datadir} must be placed as a directory component --- either alone or
+delimited by @file{/} or @file{\} directory separators, depending on the host
+platform.
+
+The list of directories uses path separator (@samp{:} on GNU and Unix
+systems, @samp{;} on MS-Windows and MS-DOS) to separate directories, similarly
+to the @env{PATH} environment variable.
+
+ at anchor{show auto-load scripts-directory}
+ at kindex show auto-load scripts-directory
+ at item show auto-load scripts-directory
+Show @value{GDBN} auto-loaded scripts location.
+ at end table
+
+ at value{GDBN} does not track which files it has already auto-loaded this way.
+ at value{GDBN} will load the associated script every time the corresponding
+ at var{objfile} is opened.
+So your @file{-gdb.py} file should be careful to avoid errors if it
+is evaluated more than once.
+
+ at node dotdebug_gdb_scripts section
+ at subsubsection The @code{.debug_gdb_scripts} section
+ at cindex @code{.debug_gdb_scripts} section
+
+For systems using file formats like ELF and COFF,
+when @value{GDBN} loads a new object file
+it will look for a special section named @samp{.debug_gdb_scripts}.
+If this section exists, its contents is a list of names of scripts to load.
+
+ at value{GDBN} will look for each specified script file first in the
+current directory and then along the source search path
+(@pxref{Source Path, ,Specifying Source Directories}),
+except that @file{$cdir} is not searched, since the compilation
+directory is not relevant to scripts.
+
+Entries can be placed in section @code{.debug_gdb_scripts} with,
+for example, this GCC macro:
+
+ at example
+/* Note: The "MS" section flags are to remove duplicates.  */
+#define DEFINE_GDB_SCRIPT(script_name) \
+  asm("\
+.pushsection \".debug_gdb_scripts\", \"MS\",@@progbits,1\n\
+.byte 1\n\
+.asciz \"" script_name "\"\n\
+.popsection \n\
+");
+ at end example
+
+ at noindent
+Then one can reference the macro in a header or source file like this:
+
+ at example
+DEFINE_GDB_SCRIPT ("my-app-scripts.py")
+ at end example
+
+The script name may include directories if desired.
+
+Note that loading of this script file also requires accordingly configured
+ at code{auto-load safe-path} (@pxref{Auto-loading safe path}).
+
+If the macro is put in a header, any application or library
+using this header will get a reference to the specified script.
+
+ at node Which flavor to choose?
+ at subsubsection Which flavor to choose?
+
+Given the multiple ways of auto-loading Python scripts, it might not always
+be clear which one to choose.  This section provides some guidance.
+
+Benefits of the @file{-gdb.py} way:
+
+ at itemize @bullet
+ at item
+Can be used with file formats that don't support multiple sections.
+
+ at item
+Ease of finding scripts for public libraries.
+
+Scripts specified in the @code{.debug_gdb_scripts} section are searched for
+in the source search path.
+For publicly installed libraries, e.g., @file{libstdc++}, there typically
+isn't a source directory in which to find the script.
+
+ at item
+Doesn't require source code additions.
+ at end itemize
+
+Benefits of the @code{.debug_gdb_scripts} way:
+
+ at itemize @bullet
+ at item
+Works with static linking.
+
+Scripts for libraries done the @file{-gdb.py} way require an objfile to
+trigger their loading.  When an application is statically linked the only
+objfile available is the executable, and it is cumbersome to attach all the
+scripts from all the input libraries to the executable's @file{-gdb.py} script.
+
+ at item
+Works with classes that are entirely inlined.
+
+Some classes can be entirely inlined, and thus there may not be an associated
+shared library to attach a @file{-gdb.py} script to.
+
+ at item
+Scripts needn't be copied out of the source tree.
+
+In some circumstances, apps can be built out of large collections of internal
+libraries, and the build infrastructure necessary to install the
+ at file{-gdb.py} scripts in a place where @value{GDBN} can find them is
+cumbersome.  It may be easier to specify the scripts in the
+ at code{.debug_gdb_scripts} section as relative paths, and add a path to the
+top of the source tree to the source search path.
+ at end itemize
+
+ at node Python modules
+ at subsection Python modules
+ at cindex python modules
+
+ at value{GDBN} comes with several modules to assist writing Python code.
+
+ at menu
+* gdb.printing::       Building and registering pretty-printers.
+* gdb.types::          Utilities for working with types.
+* gdb.prompt::         Utilities for prompt value substitution.
+ at end menu
+
+ at node gdb.printing
+ at subsubsection gdb.printing
+ at cindex gdb.printing
+
+This module provides a collection of utilities for working with
+pretty-printers.
+
+ at table @code
+ at item PrettyPrinter (@var{name}, @var{subprinters}=None)
+This class specifies the API that makes @samp{info pretty-printer},
+ at samp{enable pretty-printer} and @samp{disable pretty-printer} work.
+Pretty-printers should generally inherit from this class.
+
+ at item SubPrettyPrinter (@var{name})
+For printers that handle multiple types, this class specifies the
+corresponding API for the subprinters.
+
+ at item RegexpCollectionPrettyPrinter (@var{name})
+Utility class for handling multiple printers, all recognized via
+regular expressions.
+ at xref{Writing a Pretty-Printer}, for an example.
+
+ at item FlagEnumerationPrinter (@var{name})
+A pretty-printer which handles printing of @code{enum} values.  Unlike
+ at value{GDBN}'s built-in @code{enum} printing, this printer attempts to
+work properly when there is some overlap between the enumeration
+constants.  @var{name} is the name of the printer and also the name of
+the @code{enum} type to look up.
+
+ at item register_pretty_printer (@var{obj}, @var{printer}, @var{replace}=False)
+Register @var{printer} with the pretty-printer list of @var{obj}.
+If @var{replace} is @code{True} then any existing copy of the printer
+is replaced.  Otherwise a @code{RuntimeError} exception is raised
+if a printer with the same name already exists.
+ at end table
+
+ at node gdb.types
+ at subsubsection gdb.types
+ at cindex gdb.types
+
+This module provides a collection of utilities for working with
+ at code{gdb.Types} objects.
+
+ at table @code
+ at item get_basic_type (@var{type})
+Return @var{type} with const and volatile qualifiers stripped,
+and with typedefs and C at t{++} references converted to the underlying type.
+
+C at t{++} example:
+
+ at smallexample
+typedef const int const_int;
+const_int foo (3);
+const_int& foo_ref (foo);
+int main () @{ return 0; @}
+ at end smallexample
+
+Then in gdb:
+
+ at smallexample
+(gdb) start
+(gdb) python import gdb.types
+(gdb) python foo_ref = gdb.parse_and_eval("foo_ref")
+(gdb) python print gdb.types.get_basic_type(foo_ref.type)
+int
+ at end smallexample
+
+ at item has_field (@var{type}, @var{field})
+Return @code{True} if @var{type}, assumed to be a type with fields
+(e.g., a structure or union), has field @var{field}.
+
+ at item make_enum_dict (@var{enum_type})
+Return a Python @code{dictionary} type produced from @var{enum_type}.
+
+ at item deep_items (@var{type})
+Returns a Python iterator similar to the standard
+ at code{gdb.Type.iteritems} method, except that the iterator returned
+by @code{deep_items} will recursively traverse anonymous struct or
+union fields.  For example:
+
+ at smallexample
+struct A
+@{
+    int a;
+    union @{
+        int b0;
+        int b1;
+    @};
+@};
+ at end smallexample
+
+ at noindent
+Then in @value{GDBN}:
+ at smallexample
+(@value{GDBP}) python import gdb.types
+(@value{GDBP}) python struct_a = gdb.lookup_type("struct A")
+(@value{GDBP}) python print struct_a.keys ()
+@{['a', '']@}
+(@value{GDBP}) python print [k for k,v in gdb.types.deep_items(struct_a)]
+@{['a', 'b0', 'b1']@}
+ at end smallexample
+
+ at end table
+
+ at node gdb.prompt
+ at subsubsection gdb.prompt
+ at cindex gdb.prompt
+
+This module provides a method for prompt value-substitution.
+
+ at table @code
+ at item substitute_prompt (@var{string})
+Return @var{string} with escape sequences substituted by values.  Some
+escape sequences take arguments.  You can specify arguments inside
+``@{@}'' immediately following the escape sequence.
+
+The escape sequences you can pass to this function are:
+
+ at table @code
+ at item \\
+Substitute a backslash.
+ at item \e
+Substitute an ESC character.
+ at item \f
+Substitute the selected frame; an argument names a frame parameter.
+ at item \n
+Substitute a newline.
+ at item \p
+Substitute a parameter's value; the argument names the parameter.
+ at item \r
+Substitute a carriage return.
+ at item \t
+Substitute the selected thread; an argument names a thread parameter.
+ at item \v
+Substitute the version of GDB.
+ at item \w
+Substitute the current working directory.
+ at item \[
+Begin a sequence of non-printing characters.  These sequences are
+typically used with the ESC character, and are not counted in the string
+length.  Example: ``\[\e[0;34m\](gdb)\[\e[0m\]'' will return a
+blue-colored ``(gdb)'' prompt where the length is five.
+ at item \]
+End a sequence of non-printing characters.
+ at end table
+
+For example:
+
+ at smallexample
+substitute_prompt (``frame: \f,
+                   print arguments: \p@{print frame-arguments@}'')
+ at end smallexample
+
+ at exdent will return the string:
+
+ at smallexample
+"frame: main, print arguments: scalars"
+ at end smallexample
+ at end table
+
+ at node Aliases
+ at section Creating new spellings of existing commands
+ at cindex aliases for commands
+
+It is often useful to define alternate spellings of existing commands.
+For example, if a new @value{GDBN} command defined in Python has
+a long name to type, it is handy to have an abbreviated version of it
+that involves less typing.
+
+ at value{GDBN} itself uses aliases.  For example @samp{s} is an alias
+of the @samp{step} command even though it is otherwise an ambiguous
+abbreviation of other commands like @samp{set} and @samp{show}.
+
+Aliases are also used to provide shortened or more common versions
+of multi-word commands.  For example, @value{GDBN} provides the
+ at samp{tty} alias of the @samp{set inferior-tty} command.
+
+You can define a new alias with the @samp{alias} command.
+
+ at table @code
+
+ at kindex alias
+ at item alias [-a] [--] @var{ALIAS} = @var{COMMAND}
+
+ at end table
+
+ at var{ALIAS} specifies the name of the new alias.
+Each word of @var{ALIAS} must consist of letters, numbers, dashes and
+underscores.
+
+ at var{COMMAND} specifies the name of an existing command
+that is being aliased.
+
+The @samp{-a} option specifies that the new alias is an abbreviation
+of the command.  Abbreviations are not shown in command
+lists displayed by the @samp{help} command.
+
+The @samp{--} option specifies the end of options,
+and is useful when @var{ALIAS} begins with a dash.
+
+Here is a simple example showing how to make an abbreviation
+of a command so that there is less to type.
+Suppose you were tired of typing @samp{disas}, the current
+shortest unambiguous abbreviation of the @samp{disassemble} command
+and you wanted an even shorter version named @samp{di}.
+The following will accomplish this.
+
+ at smallexample
+(gdb) alias -a di = disas
+ at end smallexample
+
+Note that aliases are different from user-defined commands.
+With a user-defined command, you also need to write documentation
+for it with the @samp{document} command.
+An alias automatically picks up the documentation of the existing command.
+
+Here is an example where we make @samp{elms} an abbreviation of
+ at samp{elements} in the @samp{set print elements} command.
+This is to show that you can make an abbreviation of any part
+of a command.
+
+ at smallexample
+(gdb) alias -a set print elms = set print elements
+(gdb) alias -a show print elms = show print elements
+(gdb) set p elms 20
+(gdb) show p elms
+Limit on string chars or array elements to print is 200.
+ at end smallexample
+
+Note that if you are defining an alias of a @samp{set} command,
+and you want to have an alias for the corresponding @samp{show}
+command, then you need to define the latter separately.
+
+Unambiguously abbreviated commands are allowed in @var{COMMAND} and
+ at var{ALIAS}, just as they are normally.
+
+ at smallexample
+(gdb) alias -a set pr elms = set p ele
+ at end smallexample
+
+Finally, here is an example showing the creation of a one word
+alias for a more complex command.
+This creates alias @samp{spe} of the command @samp{set print elements}.
+
+ at smallexample
+(gdb) alias spe = set print elements
+(gdb) spe 20
+ at end smallexample
+
+ at node Interpreters
+ at chapter Command Interpreters
+ at cindex command interpreters
+
+ at value{GDBN} supports multiple command interpreters, and some command
+infrastructure to allow users or user interface writers to switch
+between interpreters or run commands in other interpreters.
+
+ at value{GDBN} currently supports two command interpreters, the console
+interpreter (sometimes called the command-line interpreter or @sc{cli})
+and the machine interface interpreter (or @sc{gdb/mi}).  This manual
+describes both of these interfaces in great detail.
+
+By default, @value{GDBN} will start with the console interpreter.
+However, the user may choose to start @value{GDBN} with another
+interpreter by specifying the @option{-i} or @option{--interpreter}
+startup options.  Defined interpreters include:
+
+ at table @code
+ at item console
+ at cindex console interpreter
+The traditional console or command-line interpreter.  This is the most often
+used interpreter with @value{GDBN}. With no interpreter specified at runtime,
+ at value{GDBN} will use this interpreter.
+
+ at item mi
+ at cindex mi interpreter
+The newest @sc{gdb/mi} interface (currently @code{mi2}).  Used primarily
+by programs wishing to use @value{GDBN} as a backend for a debugger GUI
+or an IDE.  For more information, see @ref{GDB/MI, ,The @sc{gdb/mi}
+Interface}.
+
+ at item mi2
+ at cindex mi2 interpreter
+The current @sc{gdb/mi} interface.
+
+ at item mi1
+ at cindex mi1 interpreter
+The @sc{gdb/mi} interface included in @value{GDBN} 5.1, 5.2, and 5.3.
+
+ at end table
+
+ at cindex invoke another interpreter
+The interpreter being used by @value{GDBN} may not be dynamically
+switched at runtime.  Although possible, this could lead to a very
+precarious situation.  Consider an IDE using @sc{gdb/mi}.  If a user
+enters the command "interpreter-set console" in a console view,
+ at value{GDBN} would switch to using the console interpreter, rendering
+the IDE inoperable!
+
+ at kindex interpreter-exec
+Although you may only choose a single interpreter at startup, you may execute
+commands in any interpreter from the current interpreter using the appropriate
+command.  If you are running the console interpreter, simply use the
+ at code{interpreter-exec} command:
+
+ at smallexample
+interpreter-exec mi "-data-list-register-names"
+ at end smallexample
+
+ at sc{gdb/mi} has a similar command, although it is only available in versions of
+ at value{GDBN} which support @sc{gdb/mi} version 2 (or greater).
+
+ at node TUI
+ at chapter @value{GDBN} Text User Interface
+ at cindex TUI
+ at cindex Text User Interface
+
+ at menu
+* TUI Overview::                TUI overview
+* TUI Keys::                    TUI key bindings
+* TUI Single Key Mode::         TUI single key mode
+* TUI Commands::                TUI-specific commands
+* TUI Configuration::           TUI configuration variables
+ at end menu
+
+The @value{GDBN} Text User Interface (TUI) is a terminal
+interface which uses the @code{curses} library to show the source
+file, the assembly output, the program registers and @value{GDBN}
+commands in separate text windows.  The TUI mode is supported only
+on platforms where a suitable version of the @code{curses} library
+is available.
+
+The TUI mode is enabled by default when you invoke @value{GDBN} as
+ at samp{@value{GDBP} -tui}.
+You can also switch in and out of TUI mode while @value{GDBN} runs by
+using various TUI commands and key bindings, such as @kbd{C-x C-a}. 
+ at xref{TUI Keys, ,TUI Key Bindings}.
+
+ at node TUI Overview
+ at section TUI Overview
+
+In TUI mode, @value{GDBN} can display several text windows:
+
+ at table @emph
+ at item command
+This window is the @value{GDBN} command window with the @value{GDBN}
+prompt and the @value{GDBN} output.  The @value{GDBN} input is still
+managed using readline.
+
+ at item source
+The source window shows the source file of the program.  The current
+line and active breakpoints are displayed in this window.
+
+ at item assembly
+The assembly window shows the disassembly output of the program.
+
+ at item register
+This window shows the processor registers.  Registers are highlighted
+when their values change.
+ at end table
+
+The source and assembly windows show the current program position
+by highlighting the current line and marking it with a @samp{>} marker.
+Breakpoints are indicated with two markers.  The first marker
+indicates the breakpoint type:
+
+ at table @code
+ at item B
+Breakpoint which was hit at least once.
+
+ at item b
+Breakpoint which was never hit.
+
+ at item H
+Hardware breakpoint which was hit at least once.
+
+ at item h
+Hardware breakpoint which was never hit.
+ at end table
+
+The second marker indicates whether the breakpoint is enabled or not:
+
+ at table @code
+ at item +
+Breakpoint is enabled.
+
+ at item -
+Breakpoint is disabled.
+ at end table
+
+The source, assembly and register windows are updated when the current
+thread changes, when the frame changes, or when the program counter
+changes.
+
+These windows are not all visible at the same time.  The command
+window is always visible.  The others can be arranged in several
+layouts:
+
+ at itemize @bullet
+ at item
+source only,
+
+ at item
+assembly only,
+
+ at item
+source and assembly,
+
+ at item
+source and registers, or
+
+ at item
+assembly and registers.
+ at end itemize
+
+A status line above the command window shows the following information:
+
+ at table @emph
+ at item target
+Indicates the current @value{GDBN} target.
+(@pxref{Targets, ,Specifying a Debugging Target}).
+
+ at item process
+Gives the current process or thread number.
+When no process is being debugged, this field is set to @code{No process}.
+
+ at item function
+Gives the current function name for the selected frame.
+The name is demangled if demangling is turned on (@pxref{Print Settings}).
+When there is no symbol corresponding to the current program counter,
+the string @code{??} is displayed.
+
+ at item line
+Indicates the current line number for the selected frame.
+When the current line number is not known, the string @code{??} is displayed.
+
+ at item pc
+Indicates the current program counter address.
+ at end table
+
+ at node TUI Keys
+ at section TUI Key Bindings
+ at cindex TUI key bindings
+
+The TUI installs several key bindings in the readline keymaps
+ at ifset SYSTEM_READLINE
+(@pxref{Command Line Editing, , , rluserman, GNU Readline Library}).
+ at end ifset
+ at ifclear SYSTEM_READLINE
+(@pxref{Command Line Editing}).
+ at end ifclear
+The following key bindings are installed for both TUI mode and the
+ at value{GDBN} standard mode.
+
+ at table @kbd
+ at kindex C-x C-a
+ at item C-x C-a
+ at kindex C-x a
+ at itemx C-x a
+ at kindex C-x A
+ at itemx C-x A
+Enter or leave the TUI mode.  When leaving the TUI mode,
+the curses window management stops and @value{GDBN} operates using
+its standard mode, writing on the terminal directly.  When reentering
+the TUI mode, control is given back to the curses windows.
+The screen is then refreshed.
+
+ at kindex C-x 1
+ at item C-x 1
+Use a TUI layout with only one window.  The layout will
+either be @samp{source} or @samp{assembly}.  When the TUI mode
+is not active, it will switch to the TUI mode.
+
+Think of this key binding as the Emacs @kbd{C-x 1} binding.
+
+ at kindex C-x 2
+ at item C-x 2
+Use a TUI layout with at least two windows.  When the current
+layout already has two windows, the next layout with two windows is used.
+When a new layout is chosen, one window will always be common to the
+previous layout and the new one.
+
+Think of it as the Emacs @kbd{C-x 2} binding.
+
+ at kindex C-x o
+ at item C-x o
+Change the active window.  The TUI associates several key bindings
+(like scrolling and arrow keys) with the active window.  This command
+gives the focus to the next TUI window.
+
+Think of it as the Emacs @kbd{C-x o} binding.
+
+ at kindex C-x s
+ at item C-x s
+Switch in and out of the TUI SingleKey mode that binds single
+keys to @value{GDBN} commands (@pxref{TUI Single Key Mode}).
+ at end table
+
+The following key bindings only work in the TUI mode:
+
+ at table @asis
+ at kindex PgUp
+ at item @key{PgUp}
+Scroll the active window one page up.
+
+ at kindex PgDn
+ at item @key{PgDn}
+Scroll the active window one page down.
+
+ at kindex Up
+ at item @key{Up}
+Scroll the active window one line up.
+
+ at kindex Down
+ at item @key{Down}
+Scroll the active window one line down.
+
+ at kindex Left
+ at item @key{Left}
+Scroll the active window one column left.
+
+ at kindex Right
+ at item @key{Right}
+Scroll the active window one column right.
+
+ at kindex C-L
+ at item @kbd{C-L}
+Refresh the screen.
+ at end table
+
+Because the arrow keys scroll the active window in the TUI mode, they
+are not available for their normal use by readline unless the command
+window has the focus.  When another window is active, you must use
+other readline key bindings such as @kbd{C-p}, @kbd{C-n}, @kbd{C-b}
+and @kbd{C-f} to control the command window.
+
+ at node TUI Single Key Mode
+ at section TUI Single Key Mode
+ at cindex TUI single key mode
+
+The TUI also provides a @dfn{SingleKey} mode, which binds several
+frequently used @value{GDBN} commands to single keys.  Type @kbd{C-x s} to
+switch into this mode, where the following key bindings are used:
+
+ at table @kbd
+ at kindex c @r{(SingleKey TUI key)}
+ at item c
+continue
+
+ at kindex d @r{(SingleKey TUI key)}
+ at item d
+down
+
+ at kindex f @r{(SingleKey TUI key)}
+ at item f
+finish
+
+ at kindex n @r{(SingleKey TUI key)}
+ at item n
+next
+
+ at kindex q @r{(SingleKey TUI key)}
+ at item q
+exit the SingleKey mode.
+
+ at kindex r @r{(SingleKey TUI key)}
+ at item r
+run
+
+ at kindex s @r{(SingleKey TUI key)}
+ at item s
+step
+
+ at kindex u @r{(SingleKey TUI key)}
+ at item u
+up
+
+ at kindex v @r{(SingleKey TUI key)}
+ at item v
+info locals
+
+ at kindex w @r{(SingleKey TUI key)}
+ at item w
+where
+ at end table
+
+Other keys temporarily switch to the @value{GDBN} command prompt.
+The key that was pressed is inserted in the editing buffer so that
+it is possible to type most @value{GDBN} commands without interaction
+with the TUI SingleKey mode.  Once the command is entered the TUI
+SingleKey mode is restored.  The only way to permanently leave
+this mode is by typing @kbd{q} or @kbd{C-x s}.
+
+
+ at node TUI Commands
+ at section TUI-specific Commands
+ at cindex TUI commands
+
+The TUI has specific commands to control the text windows.
+These commands are always available, even when @value{GDBN} is not in
+the TUI mode.  When @value{GDBN} is in the standard mode, most
+of these commands will automatically switch to the TUI mode.
+
+Note that if @value{GDBN}'s @code{stdout} is not connected to a
+terminal, or @value{GDBN} has been started with the machine interface
+interpreter (@pxref{GDB/MI, ,The @sc{gdb/mi} Interface}), most of
+these commands will fail with an error, because it would not be
+possible or desirable to enable curses window management.
+
+ at table @code
+ at item info win
+ at kindex info win
+List and give the size of all displayed windows.
+
+ at item layout next
+ at kindex layout
+Display the next layout.
+
+ at item layout prev
+Display the previous layout.
+
+ at item layout src
+Display the source window only.
+
+ at item layout asm
+Display the assembly window only.
+
+ at item layout split
+Display the source and assembly window.
+
+ at item layout regs
+Display the register window together with the source or assembly window.
+
+ at item focus next
+ at kindex focus
+Make the next window active for scrolling.
+
+ at item focus prev
+Make the previous window active for scrolling.
+
+ at item focus src
+Make the source window active for scrolling.
+
+ at item focus asm
+Make the assembly window active for scrolling.
+
+ at item focus regs
+Make the register window active for scrolling.
+
+ at item focus cmd
+Make the command window active for scrolling.
+
+ at item refresh
+ at kindex refresh
+Refresh the screen.  This is similar to typing @kbd{C-L}.
+
+ at item tui reg float
+ at kindex tui reg
+Show the floating point registers in the register window.
+
+ at item tui reg general
+Show the general registers in the register window.
+
+ at item tui reg next
+Show the next register group.  The list of register groups as well as
+their order is target specific.  The predefined register groups are the
+following: @code{general}, @code{float}, @code{system}, @code{vector},
+ at code{all}, @code{save}, @code{restore}.
+
+ at item tui reg system
+Show the system registers in the register window.
+
+ at item update
+ at kindex update
+Update the source window and the current execution point.
+
+ at item winheight @var{name} + at var{count}
+ at itemx winheight @var{name} - at var{count}
+ at kindex winheight
+Change the height of the window @var{name} by @var{count}
+lines.  Positive counts increase the height, while negative counts
+decrease it.
+
+ at item tabset @var{nchars}
+ at kindex tabset
+Set the width of tab stops to be @var{nchars} characters.
+ at end table
+
+ at node TUI Configuration
+ at section TUI Configuration Variables
+ at cindex TUI configuration variables
+
+Several configuration variables control the appearance of TUI windows.
+
+ at table @code
+ at item set tui border-kind @var{kind}
+ at kindex set tui border-kind
+Select the border appearance for the source, assembly and register windows.
+The possible values are the following:
+ at table @code
+ at item space
+Use a space character to draw the border.
+
+ at item ascii
+Use @sc{ascii} characters @samp{+}, @samp{-} and @samp{|} to draw the border.
+
+ at item acs
+Use the Alternate Character Set to draw the border.  The border is
+drawn using character line graphics if the terminal supports them.
+ at end table
+
+ at item set tui border-mode @var{mode}
+ at kindex set tui border-mode
+ at itemx set tui active-border-mode @var{mode}
+ at kindex set tui active-border-mode
+Select the display attributes for the borders of the inactive windows
+or the active window.  The @var{mode} can be one of the following:
+ at table @code
+ at item normal
+Use normal attributes to display the border.
+
+ at item standout
+Use standout mode.
+
+ at item reverse
+Use reverse video mode.
+
+ at item half
+Use half bright mode.
+
+ at item half-standout
+Use half bright and standout mode.
+
+ at item bold
+Use extra bright or bold mode.
+
+ at item bold-standout
+Use extra bright or bold and standout mode.
+ at end table
+ at end table
+
+ at node Emacs
+ at chapter Using @value{GDBN} under @sc{gnu} Emacs
+
+ at cindex Emacs
+ at cindex @sc{gnu} Emacs
+A special interface allows you to use @sc{gnu} Emacs to view (and
+edit) the source files for the program you are debugging with
+ at value{GDBN}.
+
+To use this interface, use the command @kbd{M-x gdb} in Emacs.  Give the
+executable file you want to debug as an argument.  This command starts
+ at value{GDBN} as a subprocess of Emacs, with input and output through a newly
+created Emacs buffer.
+ at c (Do not use the @code{-tui} option to run @value{GDBN} from Emacs.)
+
+Running @value{GDBN} under Emacs can be just like running @value{GDBN} normally except for two
+things:
+
+ at itemize @bullet
+ at item
+All ``terminal'' input and output goes through an Emacs buffer, called
+the GUD buffer.
+
+This applies both to @value{GDBN} commands and their output, and to the input
+and output done by the program you are debugging.
+
+This is useful because it means that you can copy the text of previous
+commands and input them again; you can even use parts of the output
+in this way.
+
+All the facilities of Emacs' Shell mode are available for interacting
+with your program.  In particular, you can send signals the usual
+way---for example, @kbd{C-c C-c} for an interrupt, @kbd{C-c C-z} for a
+stop.
+
+ at item
+ at value{GDBN} displays source code through Emacs.
+
+Each time @value{GDBN} displays a stack frame, Emacs automatically finds the
+source file for that frame and puts an arrow (@samp{=>}) at the
+left margin of the current line.  Emacs uses a separate buffer for
+source display, and splits the screen to show both your @value{GDBN} session
+and the source.
+
+Explicit @value{GDBN} @code{list} or search commands still produce output as
+usual, but you probably have no reason to use them from Emacs.
+ at end itemize
+
+We call this @dfn{text command mode}.  Emacs 22.1, and later, also uses
+a graphical mode, enabled by default, which provides further buffers
+that can control the execution and describe the state of your program.
+ at xref{GDB Graphical Interface,,, Emacs, The @sc{gnu} Emacs Manual}.
+
+If you specify an absolute file name when prompted for the @kbd{M-x
+gdb} argument, then Emacs sets your current working directory to where
+your program resides.  If you only specify the file name, then Emacs
+sets your current working directory to the directory associated
+with the previous buffer.  In this case, @value{GDBN} may find your
+program by searching your environment's @code{PATH} variable, but on
+some operating systems it might not find the source.  So, although the
+ at value{GDBN} input and output session proceeds normally, the auxiliary
+buffer does not display the current source and line of execution.
+
+The initial working directory of @value{GDBN} is printed on the top
+line of the GUD buffer and this serves as a default for the commands
+that specify files for @value{GDBN} to operate on.  @xref{Files,
+,Commands to Specify Files}.
+
+By default, @kbd{M-x gdb} calls the program called @file{gdb}.  If you
+need to call @value{GDBN} by a different name (for example, if you
+keep several configurations around, with different names) you can
+customize the Emacs variable @code{gud-gdb-command-name} to run the
+one you want.
+
+In the GUD buffer, you can use these special Emacs commands in
+addition to the standard Shell mode commands:
+
+ at table @kbd
+ at item C-h m
+Describe the features of Emacs' GUD Mode.
+
+ at item C-c C-s
+Execute to another source line, like the @value{GDBN} @code{step} command; also
+update the display window to show the current file and location.
+
+ at item C-c C-n
+Execute to next source line in this function, skipping all function
+calls, like the @value{GDBN} @code{next} command.  Then update the display window
+to show the current file and location.
+
+ at item C-c C-i
+Execute one instruction, like the @value{GDBN} @code{stepi} command; update
+display window accordingly.
+
+ at item C-c C-f
+Execute until exit from the selected stack frame, like the @value{GDBN}
+ at code{finish} command.
+
+ at item C-c C-r
+Continue execution of your program, like the @value{GDBN} @code{continue}
+command.
+
+ at item C-c <
+Go up the number of frames indicated by the numeric argument
+(@pxref{Arguments, , Numeric Arguments, Emacs, The @sc{gnu} Emacs Manual}),
+like the @value{GDBN} @code{up} command.
+
+ at item C-c >
+Go down the number of frames indicated by the numeric argument, like the
+ at value{GDBN} @code{down} command.
+ at end table
+
+In any source file, the Emacs command @kbd{C-x @key{SPC}} (@code{gud-break})
+tells @value{GDBN} to set a breakpoint on the source line point is on.
+
+In text command mode, if you type @kbd{M-x speedbar}, Emacs displays a
+separate frame which shows a backtrace when the GUD buffer is current.
+Move point to any frame in the stack and type @key{RET} to make it
+become the current frame and display the associated source in the
+source buffer.  Alternatively, click @kbd{Mouse-2} to make the
+selected frame become the current one.  In graphical mode, the
+speedbar displays watch expressions.
+
+If you accidentally delete the source-display buffer, an easy way to get
+it back is to type the command @code{f} in the @value{GDBN} buffer, to
+request a frame display; when you run under Emacs, this recreates
+the source buffer if necessary to show you the context of the current
+frame.
+
+The source files displayed in Emacs are in ordinary Emacs buffers
+which are visiting the source files in the usual way.  You can edit
+the files with these buffers if you wish; but keep in mind that @value{GDBN}
+communicates with Emacs in terms of line numbers.  If you add or
+delete lines from the text, the line numbers that @value{GDBN} knows cease
+to correspond properly with the code.
+
+A more detailed description of Emacs' interaction with @value{GDBN} is
+given in the Emacs manual (@pxref{Debuggers,,, Emacs, The @sc{gnu}
+Emacs Manual}).
+
+ at c The following dropped because Epoch is nonstandard.  Reactivate
+ at c if/when v19 does something similar. ---doc at cygnus.com 19dec1990
+ at ignore
+ at kindex Emacs Epoch environment
+ at kindex Epoch
+ at kindex inspect
+
+Version 18 of @sc{gnu} Emacs has a built-in window system
+called the @code{epoch}
+environment.  Users of this environment can use a new command,
+ at code{inspect} which performs identically to @code{print} except that
+each value is printed in its own window.
+ at end ignore
+
+
+ at node GDB/MI
+ at chapter The @sc{gdb/mi} Interface
+
+ at unnumberedsec Function and Purpose
+
+ at cindex @sc{gdb/mi}, its purpose
+ at sc{gdb/mi} is a line based machine oriented text interface to
+ at value{GDBN} and is activated by specifying using the
+ at option{--interpreter} command line option (@pxref{Mode Options}).  It
+is specifically intended to support the development of systems which
+use the debugger as just one small component of a larger system.
+
+This chapter is a specification of the @sc{gdb/mi} interface.  It is written
+in the form of a reference manual.
+
+Note that @sc{gdb/mi} is still under construction, so some of the
+features described below are incomplete and subject to change
+(@pxref{GDB/MI Development and Front Ends, , @sc{gdb/mi} Development and Front Ends}).  
+
+ at unnumberedsec Notation and Terminology
+
+ at cindex notational conventions, for @sc{gdb/mi}
+This chapter uses the following notation:
+
+ at itemize @bullet
+ at item
+ at code{|} separates two alternatives.
+
+ at item
+ at code{[ @var{something} ]} indicates that @var{something} is optional:
+it may or may not be given.
+
+ at item
+ at code{( @var{group} )*} means that @var{group} inside the parentheses
+may repeat zero or more times.
+
+ at item
+ at code{( @var{group} )+} means that @var{group} inside the parentheses
+may repeat one or more times.
+
+ at item
+ at code{"@var{string}"} means a literal @var{string}.
+ at end itemize
+
+ at ignore
+ at heading Dependencies
+ at end ignore
+
+ at menu
+* GDB/MI General Design::
+* GDB/MI Command Syntax::
+* GDB/MI Compatibility with CLI::
+* GDB/MI Development and Front Ends::
+* GDB/MI Output Records::
+* GDB/MI Simple Examples::
+* GDB/MI Command Description Format::
+* GDB/MI Breakpoint Commands::
+* GDB/MI Program Context::
+* GDB/MI Thread Commands::
+* GDB/MI Ada Tasking Commands::
+* GDB/MI Program Execution::
+* GDB/MI Stack Manipulation::
+* GDB/MI Variable Objects::
+* GDB/MI Data Manipulation::
+* GDB/MI Tracepoint Commands::
+* GDB/MI Symbol Query::
+* GDB/MI File Commands::
+ at ignore
+* GDB/MI Kod Commands::
+* GDB/MI Memory Overlay Commands::
+* GDB/MI Signal Handling Commands::
+ at end ignore
+* GDB/MI Target Manipulation::
+* GDB/MI File Transfer Commands::
+* GDB/MI Miscellaneous Commands::
+ at end menu
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI General Design
+ at section @sc{gdb/mi} General Design
+ at cindex GDB/MI General Design
+
+Interaction of a @sc{GDB/MI} frontend with @value{GDBN} involves three
+parts---commands sent to @value{GDBN}, responses to those commands
+and notifications.  Each command results in exactly one response,
+indicating either successful completion of the command, or an error.
+For the commands that do not resume the target, the response contains the
+requested information.  For the commands that resume the target, the
+response only indicates whether the target was successfully resumed.
+Notifications is the mechanism for reporting changes in the state of the
+target, or in @value{GDBN} state, that cannot conveniently be associated with
+a command and reported as part of that command response.
+
+The important examples of notifications are:
+ at itemize @bullet
+
+ at item 
+Exec notifications.  These are used to report changes in
+target state---when a target is resumed, or stopped.  It would not
+be feasible to include this information in response of resuming
+commands, because one resume commands can result in multiple events in
+different threads.  Also, quite some time may pass before any event
+happens in the target, while a frontend needs to know whether the resuming
+command itself was successfully executed.
+
+ at item 
+Console output, and status notifications.  Console output
+notifications are used to report output of CLI commands, as well as
+diagnostics for other commands.  Status notifications are used to
+report the progress of a long-running operation.  Naturally, including
+this information in command response would mean no output is produced
+until the command is finished, which is undesirable.
+
+ at item
+General notifications.  Commands may have various side effects on
+the @value{GDBN} or target state beyond their official purpose.  For example,
+a command may change the selected thread.  Although such changes can
+be included in command response, using notification allows for more
+orthogonal frontend design.
+
+ at end itemize
+
+There's no guarantee that whenever an MI command reports an error,
+ at value{GDBN} or the target are in any specific state, and especially,
+the state is not reverted to the state before the MI command was
+processed.  Therefore, whenever an MI command results in an error, 
+we recommend that the frontend refreshes all the information shown in 
+the user interface.
+
+
+ at menu
+* Context management::
+* Asynchronous and non-stop modes::
+* Thread groups::
+ at end menu
+
+ at node Context management
+ at subsection Context management
+
+In most cases when @value{GDBN} accesses the target, this access is
+done in context of a specific thread and frame (@pxref{Frames}).
+Often, even when accessing global data, the target requires that a thread
+be specified.  The CLI interface maintains the selected thread and frame,
+and supplies them to target on each command.  This is convenient,
+because a command line user would not want to specify that information
+explicitly on each command, and because user interacts with
+ at value{GDBN} via a single terminal, so no confusion is possible as 
+to what thread and frame are the current ones.
+
+In the case of MI, the concept of selected thread and frame is less
+useful.  First, a frontend can easily remember this information
+itself.  Second, a graphical frontend can have more than one window,
+each one used for debugging a different thread, and the frontend might
+want to access additional threads for internal purposes.  This
+increases the risk that by relying on implicitly selected thread, the
+frontend may be operating on a wrong one.  Therefore, each MI command
+should explicitly specify which thread and frame to operate on.  To
+make it possible, each MI command accepts the @samp{--thread} and
+ at samp{--frame} options, the value to each is @value{GDBN} identifier
+for thread and frame to operate on.
+
+Usually, each top-level window in a frontend allows the user to select
+a thread and a frame, and remembers the user selection for further
+operations.  However, in some cases @value{GDBN} may suggest that the
+current thread be changed.  For example, when stopping on a breakpoint
+it is reasonable to switch to the thread where breakpoint is hit.  For
+another example, if the user issues the CLI @samp{thread} command via
+the frontend, it is desirable to change the frontend's selected thread to the
+one specified by user.  @value{GDBN} communicates the suggestion to
+change current thread using the @samp{=thread-selected} notification.
+No such notification is available for the selected frame at the moment.
+
+Note that historically, MI shares the selected thread with CLI, so 
+frontends used the @code{-thread-select} to execute commands in the
+right context.  However, getting this to work right is cumbersome.  The
+simplest way is for frontend to emit @code{-thread-select} command
+before every command.  This doubles the number of commands that need
+to be sent.  The alternative approach is to suppress @code{-thread-select}
+if the selected thread in @value{GDBN} is supposed to be identical to the
+thread the frontend wants to operate on.  However, getting this
+optimization right can be tricky.  In particular, if the frontend
+sends several commands to @value{GDBN}, and one of the commands changes the
+selected thread, then the behaviour of subsequent commands will
+change.  So, a frontend should either wait for response from such
+problematic commands, or explicitly add @code{-thread-select} for
+all subsequent commands.  No frontend is known to do this exactly
+right, so it is suggested to just always pass the @samp{--thread} and
+ at samp{--frame} options.
+
+ at node Asynchronous and non-stop modes
+ at subsection Asynchronous command execution and non-stop mode
+
+On some targets, @value{GDBN} is capable of processing MI commands
+even while the target is running.  This is called @dfn{asynchronous
+command execution} (@pxref{Background Execution}).  The frontend may
+specify a preferrence for asynchronous execution using the
+ at code{-gdb-set target-async 1} command, which should be emitted before
+either running the executable or attaching to the target.  After the
+frontend has started the executable or attached to the target, it can
+find if asynchronous execution is enabled using the
+ at code{-list-target-features} command.
+
+Even if @value{GDBN} can accept a command while target is running,
+many commands that access the target do not work when the target is
+running.  Therefore, asynchronous command execution is most useful
+when combined with non-stop mode (@pxref{Non-Stop Mode}).  Then,
+it is possible to examine the state of one thread, while other threads
+are running.
+
+When a given thread is running, MI commands that try to access the
+target in the context of that thread may not work, or may work only on
+some targets.  In particular, commands that try to operate on thread's
+stack will not work, on any target.  Commands that read memory, or
+modify breakpoints, may work or not work, depending on the target.  Note
+that even commands that operate on global state, such as @code{print},
+ at code{set}, and breakpoint commands, still access the target in the
+context of a specific thread,  so frontend should try to find a
+stopped thread and perform the operation on that thread (using the
+ at samp{--thread} option).
+
+Which commands will work in the context of a running thread is
+highly target dependent.  However, the two commands
+ at code{-exec-interrupt}, to stop a thread, and @code{-thread-info},
+to find the state of a thread, will always work.
+
+ at node Thread groups
+ at subsection Thread groups
+ at value{GDBN} may be used to debug several processes at the same time.
+On some platfroms, @value{GDBN} may support debugging of several
+hardware systems, each one having several cores with several different
+processes running on each core.  This section describes the MI
+mechanism to support such debugging scenarios.
+
+The key observation is that regardless of the structure of the 
+target, MI can have a global list of threads, because most commands that 
+accept the @samp{--thread} option do not need to know what process that
+thread belongs to.  Therefore, it is not necessary to introduce
+neither additional @samp{--process} option, nor an notion of the
+current process in the MI interface.  The only strictly new feature
+that is required is the ability to find how the threads are grouped
+into processes.
+
+To allow the user to discover such grouping, and to support arbitrary
+hierarchy of machines/cores/processes, MI introduces the concept of a
+ at dfn{thread group}.  Thread group is a collection of threads and other
+thread groups.  A thread group always has a string identifier, a type,
+and may have additional attributes specific to the type.  A new
+command, @code{-list-thread-groups}, returns the list of top-level
+thread groups, which correspond to processes that @value{GDBN} is
+debugging at the moment.  By passing an identifier of a thread group
+to the @code{-list-thread-groups} command, it is possible to obtain
+the members of specific thread group.
+
+To allow the user to easily discover processes, and other objects, he
+wishes to debug, a concept of @dfn{available thread group} is
+introduced.  Available thread group is an thread group that
+ at value{GDBN} is not debugging, but that can be attached to, using the
+ at code{-target-attach} command.  The list of available top-level thread
+groups can be obtained using @samp{-list-thread-groups --available}.
+In general, the content of a thread group may be only retrieved only
+after attaching to that thread group.
+
+Thread groups are related to inferiors (@pxref{Inferiors and
+Programs}).  Each inferior corresponds to a thread group of a special
+type @samp{process}, and some additional operations are permitted on
+such thread groups.
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI Command Syntax
+ at section @sc{gdb/mi} Command Syntax
+
+ at menu
+* GDB/MI Input Syntax::
+* GDB/MI Output Syntax::
+ at end menu
+
+ at node GDB/MI Input Syntax
+ at subsection @sc{gdb/mi} Input Syntax
+
+ at cindex input syntax for @sc{gdb/mi}
+ at cindex @sc{gdb/mi}, input syntax
+ at table @code
+ at item @var{command} @expansion{}
+ at code{@var{cli-command} | @var{mi-command}}
+
+ at item @var{cli-command} @expansion{}
+ at code{[ @var{token} ] @var{cli-command} @var{nl}}, where
+ at var{cli-command} is any existing @value{GDBN} CLI command.
+
+ at item @var{mi-command} @expansion{}
+ at code{[ @var{token} ] "-" @var{operation} ( " " @var{option} )*
+ at code{[} " --" @code{]} ( " " @var{parameter} )* @var{nl}}
+
+ at item @var{token} @expansion{}
+"any sequence of digits"
+
+ at item @var{option} @expansion{}
+ at code{"-" @var{parameter} [ " " @var{parameter} ]}
+
+ at item @var{parameter} @expansion{}
+ at code{@var{non-blank-sequence} | @var{c-string}}
+
+ at item @var{operation} @expansion{}
+ at emph{any of the operations described in this chapter}
+
+ at item @var{non-blank-sequence} @expansion{}
+ at emph{anything, provided it doesn't contain special characters such as
+"-", @var{nl}, """ and of course " "}
+
+ at item @var{c-string} @expansion{}
+ at code{""" @var{seven-bit-iso-c-string-content} """}
+
+ at item @var{nl} @expansion{}
+ at code{CR | CR-LF}
+ at end table
+
+ at noindent
+Notes:
+
+ at itemize @bullet
+ at item
+The CLI commands are still handled by the @sc{mi} interpreter; their
+output is described below.
+
+ at item
+The @code{@var{token}}, when present, is passed back when the command
+finishes.
+
+ at item
+Some @sc{mi} commands accept optional arguments as part of the parameter
+list.  Each option is identified by a leading @samp{-} (dash) and may be
+followed by an optional argument parameter.  Options occur first in the
+parameter list and can be delimited from normal parameters using
+ at samp{--} (this is useful when some parameters begin with a dash).
+ at end itemize
+
+Pragmatics:
+
+ at itemize @bullet
+ at item
+We want easy access to the existing CLI syntax (for debugging).
+
+ at item
+We want it to be easy to spot a @sc{mi} operation.
+ at end itemize
+
+ at node GDB/MI Output Syntax
+ at subsection @sc{gdb/mi} Output Syntax
+
+ at cindex output syntax of @sc{gdb/mi}
+ at cindex @sc{gdb/mi}, output syntax
+The output from @sc{gdb/mi} consists of zero or more out-of-band records
+followed, optionally, by a single result record.  This result record
+is for the most recent command.  The sequence of output records is
+terminated by @samp{(gdb)}.
+
+If an input command was prefixed with a @code{@var{token}} then the
+corresponding output for that command will also be prefixed by that same
+ at var{token}.
+
+ at table @code
+ at item @var{output} @expansion{}
+ at code{( @var{out-of-band-record} )* [ @var{result-record} ] "(gdb)" @var{nl}}
+
+ at item @var{result-record} @expansion{}
+ at code{ [ @var{token} ] "^" @var{result-class} ( "," @var{result} )* @var{nl}}
+
+ at item @var{out-of-band-record} @expansion{}
+ at code{@var{async-record} | @var{stream-record}}
+
+ at item @var{async-record} @expansion{}
+ at code{@var{exec-async-output} | @var{status-async-output} | @var{notify-async-output}}
+
+ at item @var{exec-async-output} @expansion{}
+ at code{[ @var{token} ] "*" @var{async-output}}
+
+ at item @var{status-async-output} @expansion{}
+ at code{[ @var{token} ] "+" @var{async-output}}
+
+ at item @var{notify-async-output} @expansion{}
+ at code{[ @var{token} ] "=" @var{async-output}}
+
+ at item @var{async-output} @expansion{}
+ at code{@var{async-class} ( "," @var{result} )* @var{nl}}
+
+ at item @var{result-class} @expansion{}
+ at code{"done" | "running" | "connected" | "error" | "exit"}
+
+ at item @var{async-class} @expansion{}
+ at code{"stopped" | @var{others}} (where @var{others} will be added
+depending on the needs---this is still in development).
+
+ at item @var{result} @expansion{}
+ at code{ @var{variable} "=" @var{value}}
+
+ at item @var{variable} @expansion{}
+ at code{ @var{string} }
+
+ at item @var{value} @expansion{}
+ at code{ @var{const} | @var{tuple} | @var{list} }
+
+ at item @var{const} @expansion{}
+ at code{@var{c-string}}
+
+ at item @var{tuple} @expansion{}
+ at code{ "@{@}" | "@{" @var{result} ( "," @var{result} )* "@}" }
+
+ at item @var{list} @expansion{}
+ at code{ "[]" | "[" @var{value} ( "," @var{value} )* "]" | "["
+ at var{result} ( "," @var{result} )* "]" }
+
+ at item @var{stream-record} @expansion{}
+ at code{@var{console-stream-output} | @var{target-stream-output} | @var{log-stream-output}}
+
+ at item @var{console-stream-output} @expansion{}
+ at code{"~" @var{c-string}}
+
+ at item @var{target-stream-output} @expansion{}
+ at code{"@@" @var{c-string}}
+
+ at item @var{log-stream-output} @expansion{}
+ at code{"&" @var{c-string}}
+
+ at item @var{nl} @expansion{}
+ at code{CR | CR-LF}
+
+ at item @var{token} @expansion{}
+ at emph{any sequence of digits}.
+ at end table
+
+ at noindent
+Notes:
+
+ at itemize @bullet
+ at item
+All output sequences end in a single line containing a period.
+
+ at item
+The @code{@var{token}} is from the corresponding request.  Note that
+for all async output, while the token is allowed by the grammar and
+may be output by future versions of @value{GDBN} for select async
+output messages, it is generally omitted.  Frontends should treat
+all async output as reporting general changes in the state of the
+target and there should be no need to associate async output to any
+prior command.
+
+ at item
+ at cindex status output in @sc{gdb/mi}
+ at var{status-async-output} contains on-going status information about the
+progress of a slow operation.  It can be discarded.  All status output is
+prefixed by @samp{+}.
+
+ at item
+ at cindex async output in @sc{gdb/mi}
+ at var{exec-async-output} contains asynchronous state change on the target
+(stopped, started, disappeared).  All async output is prefixed by
+ at samp{*}.
+
+ at item
+ at cindex notify output in @sc{gdb/mi}
+ at var{notify-async-output} contains supplementary information that the
+client should handle (e.g., a new breakpoint information).  All notify
+output is prefixed by @samp{=}.
+
+ at item
+ at cindex console output in @sc{gdb/mi}
+ at var{console-stream-output} is output that should be displayed as is in the
+console.  It is the textual response to a CLI command.  All the console
+output is prefixed by @samp{~}.
+
+ at item
+ at cindex target output in @sc{gdb/mi}
+ at var{target-stream-output} is the output produced by the target program.
+All the target output is prefixed by @samp{@@}.
+
+ at item
+ at cindex log output in @sc{gdb/mi}
+ at var{log-stream-output} is output text coming from @value{GDBN}'s internals, for
+instance messages that should be displayed as part of an error log.  All
+the log output is prefixed by @samp{&}.
+
+ at item
+ at cindex list output in @sc{gdb/mi}
+New @sc{gdb/mi} commands should only output @var{lists} containing
+ at var{values}.
+
+
+ at end itemize
+
+ at xref{GDB/MI Stream Records, , @sc{gdb/mi} Stream Records}, for more
+details about the various output records.
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI Compatibility with CLI
+ at section @sc{gdb/mi} Compatibility with CLI
+
+ at cindex compatibility, @sc{gdb/mi} and CLI
+ at cindex @sc{gdb/mi}, compatibility with CLI
+
+For the developers convenience CLI commands can be entered directly,
+but there may be some unexpected behaviour.  For example, commands
+that query the user will behave as if the user replied yes, breakpoint
+command lists are not executed and some CLI commands, such as
+ at code{if}, @code{when} and @code{define}, prompt for further input with
+ at samp{>}, which is not valid MI output.
+
+This feature may be removed at some stage in the future and it is
+recommended that front ends use the @code{-interpreter-exec} command
+(@pxref{-interpreter-exec}).
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI Development and Front Ends
+ at section @sc{gdb/mi} Development and Front Ends
+ at cindex @sc{gdb/mi} development
+
+The application which takes the MI output and presents the state of the
+program being debugged to the user is called a @dfn{front end}.
+
+Although @sc{gdb/mi} is still incomplete, it is currently being used
+by a variety of front ends to @value{GDBN}.  This makes it difficult
+to introduce new functionality without breaking existing usage.  This
+section tries to minimize the problems by describing how the protocol
+might change.
+
+Some changes in MI need not break a carefully designed front end, and
+for these the MI version will remain unchanged.  The following is a
+list of changes that may occur within one level, so front ends should
+parse MI output in a way that can handle them:
+
+ at itemize @bullet
+ at item
+New MI commands may be added.
+
+ at item
+New fields may be added to the output of any MI command.
+
+ at item
+The range of values for fields with specified values, e.g.,
+ at code{in_scope} (@pxref{-var-update}) may be extended.
+
+ at c The format of field's content e.g type prefix, may change so parse it
+ at c   at your own risk.  Yes, in general?
+
+ at c The order of fields may change?  Shouldn't really matter but it might
+ at c resolve inconsistencies.
+ at end itemize
+
+If the changes are likely to break front ends, the MI version level
+will be increased by one.  This will allow the front end to parse the
+output according to the MI version.  Apart from mi0, new versions of
+ at value{GDBN} will not support old versions of MI and it will be the
+responsibility of the front end to work with the new one.
+
+ at c Starting with mi3, add a new command -mi-version that prints the MI
+ at c version?
+
+The best way to avoid unexpected changes in MI that might break your front
+end is to make your project known to @value{GDBN} developers and
+follow development on @email{gdb@@sourceware.org} and
+ at email{gdb-patches@@sourceware.org}.
+ at cindex mailing lists
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI Output Records
+ at section @sc{gdb/mi} Output Records
+
+ at menu
+* GDB/MI Result Records::
+* GDB/MI Stream Records::
+* GDB/MI Async Records::
+* GDB/MI Frame Information::
+* GDB/MI Thread Information::
+* GDB/MI Ada Exception Information::
+ at end menu
+
+ at node GDB/MI Result Records
+ at subsection @sc{gdb/mi} Result Records
+
+ at cindex result records in @sc{gdb/mi}
+ at cindex @sc{gdb/mi}, result records
+In addition to a number of out-of-band notifications, the response to a
+ at sc{gdb/mi} command includes one of the following result indications:
+
+ at table @code
+ at findex ^done
+ at item "^done" [ "," @var{results} ]
+The synchronous operation was successful, @code{@var{results}} are the return
+values.
+
+ at item "^running"
+ at findex ^running
+This result record is equivalent to @samp{^done}.  Historically, it
+was output instead of @samp{^done} if the command has resumed the
+target.  This behaviour is maintained for backward compatibility, but
+all frontends should treat @samp{^done} and @samp{^running}
+identically and rely on the @samp{*running} output record to determine
+which threads are resumed.
+
+ at item "^connected"
+ at findex ^connected
+ at value{GDBN} has connected to a remote target.
+
+ at item "^error" "," @var{c-string}
+ at findex ^error
+The operation failed.  The @code{@var{c-string}} contains the corresponding
+error message.
+
+ at item "^exit"
+ at findex ^exit
+ at value{GDBN} has terminated.
+
+ at end table
+
+ at node GDB/MI Stream Records
+ at subsection @sc{gdb/mi} Stream Records
+
+ at cindex @sc{gdb/mi}, stream records
+ at cindex stream records in @sc{gdb/mi}
+ at value{GDBN} internally maintains a number of output streams: the console, the
+target, and the log.  The output intended for each of these streams is
+funneled through the @sc{gdb/mi} interface using @dfn{stream records}.
+
+Each stream record begins with a unique @dfn{prefix character} which
+identifies its stream (@pxref{GDB/MI Output Syntax, , @sc{gdb/mi} Output
+Syntax}).  In addition to the prefix, each stream record contains a
+ at code{@var{string-output}}.  This is either raw text (with an implicit new
+line) or a quoted C string (which does not contain an implicit newline).
+
+ at table @code
+ at item "~" @var{string-output}
+The console output stream contains text that should be displayed in the
+CLI console window.  It contains the textual responses to CLI commands.
+
+ at item "@@" @var{string-output}
+The target output stream contains any textual output from the running
+target.  This is only present when GDB's event loop is truly
+asynchronous, which is currently only the case for remote targets.
+
+ at item "&" @var{string-output}
+The log stream contains debugging messages being produced by @value{GDBN}'s
+internals.
+ at end table
+
+ at node GDB/MI Async Records
+ at subsection @sc{gdb/mi} Async Records
+
+ at cindex async records in @sc{gdb/mi}
+ at cindex @sc{gdb/mi}, async records
+ at dfn{Async} records are used to notify the @sc{gdb/mi} client of
+additional changes that have occurred.  Those changes can either be a
+consequence of @sc{gdb/mi} commands (e.g., a breakpoint modified) or a result of
+target activity (e.g., target stopped).
+
+The following is the list of possible async records:
+
+ at table @code
+
+ at item *running,thread-id="@var{thread}"
+The target is now running.  The @var{thread} field tells which
+specific thread is now running, and can be @samp{all} if all threads
+are running.  The frontend should assume that no interaction with a 
+running thread is possible after this notification is produced.
+The frontend should not assume that this notification is output
+only once for any command.  @value{GDBN} may emit this notification 
+several times, either for different threads, because it cannot resume
+all threads together, or even for a single thread, if the thread must
+be stepped though some code before letting it run freely.
+
+ at item *stopped,reason="@var{reason}",thread-id="@var{id}",stopped-threads="@var{stopped}",core="@var{core}"
+The target has stopped.  The @var{reason} field can have one of the
+following values:
+
+ at table @code
+ at item breakpoint-hit
+A breakpoint was reached.
+ at item watchpoint-trigger
+A watchpoint was triggered.
+ at item read-watchpoint-trigger
+A read watchpoint was triggered.
+ at item access-watchpoint-trigger 
+An access watchpoint was triggered.
+ at item function-finished
+An -exec-finish or similar CLI command was accomplished.
+ at item location-reached
+An -exec-until or similar CLI command was accomplished.
+ at item watchpoint-scope
+A watchpoint has gone out of scope.
+ at item end-stepping-range
+An -exec-next, -exec-next-instruction, -exec-step, -exec-step-instruction or 
+similar CLI command was accomplished.
+ at item exited-signalled 
+The inferior exited because of a signal.
+ at item exited 
+The inferior exited.
+ at item exited-normally 
+The inferior exited normally.
+ at item signal-received 
+A signal was received by the inferior.
+ at item solib-event
+The inferior has stopped due to a library being loaded or unloaded.
+This can happen when @code{stop-on-solib-events} (@pxref{Files}) is
+set or when a @code{catch load} or @code{catch unload} catchpoint is
+in use (@pxref{Set Catchpoints}).
+ at item fork
+The inferior has forked.  This is reported when @code{catch fork}
+(@pxref{Set Catchpoints}) has been used.
+ at item vfork
+The inferior has vforked.  This is reported in when @code{catch vfork}
+(@pxref{Set Catchpoints}) has been used.
+ at item syscall-entry
+The inferior entered a system call.  This is reported when @code{catch
+syscall} (@pxref{Set Catchpoints}) has been used.
+ at item syscall-entry
+The inferior returned from a system call.  This is reported when
+ at code{catch syscall} (@pxref{Set Catchpoints}) has been used.
+ at item exec
+The inferior called @code{exec}.  This is reported when @code{catch exec}
+(@pxref{Set Catchpoints}) has been used.
+ at end table
+
+The @var{id} field identifies the thread that directly caused the stop
+-- for example by hitting a breakpoint.  Depending on whether all-stop
+mode is in effect (@pxref{All-Stop Mode}), @value{GDBN} may either
+stop all threads, or only the thread that directly triggered the stop.
+If all threads are stopped, the @var{stopped} field will have the
+value of @code{"all"}.  Otherwise, the value of the @var{stopped}
+field will be a list of thread identifiers.  Presently, this list will
+always include a single thread, but frontend should be prepared to see
+several threads in the list.  The @var{core} field reports the
+processor core on which the stop event has happened.  This field may be absent
+if such information is not available.
+
+ at item =thread-group-added,id="@var{id}"
+ at itemx =thread-group-removed,id="@var{id}"
+A thread group was either added or removed.  The @var{id} field
+contains the @value{GDBN} identifier of the thread group.  When a thread
+group is added, it generally might not be associated with a running
+process.  When a thread group is removed, its id becomes invalid and
+cannot be used in any way.
+
+ at item =thread-group-started,id="@var{id}",pid="@var{pid}"
+A thread group became associated with a running program,
+either because the program was just started or the thread group
+was attached to a program.  The @var{id} field contains the
+ at value{GDBN} identifier of the thread group.  The @var{pid} field
+contains process identifier, specific to the operating system.
+
+ at item =thread-group-exited,id="@var{id}"[,exit-code="@var{code}"]
+A thread group is no longer associated with a running program,
+either because the program has exited, or because it was detached
+from.  The @var{id} field contains the @value{GDBN} identifier of the
+thread group.  @var{code} is the exit code of the inferior; it exists
+only when the inferior exited with some code.
+
+ at item =thread-created,id="@var{id}",group-id="@var{gid}"
+ at itemx =thread-exited,id="@var{id}",group-id="@var{gid}"
+A thread either was created, or has exited.  The @var{id} field
+contains the @value{GDBN} identifier of the thread.  The @var{gid}
+field identifies the thread group this thread belongs to.
+
+ at item =thread-selected,id="@var{id}"
+Informs that the selected thread was changed as result of the last
+command.  This notification is not emitted as result of @code{-thread-select}
+command but is emitted whenever an MI command that is not documented
+to change the selected thread actually changes it.  In particular,
+invoking, directly or indirectly (via user-defined command), the CLI
+ at code{thread} command, will generate this notification.
+
+We suggest that in response to this notification, front ends
+highlight the selected thread and cause subsequent commands to apply to
+that thread.
+
+ at item =library-loaded,...
+Reports that a new library file was loaded by the program.  This
+notification has 4 fields--- at var{id}, @var{target-name},
+ at var{host-name}, and @var{symbols-loaded}.  The @var{id} field is an
+opaque identifier of the library.  For remote debugging case,
+ at var{target-name} and @var{host-name} fields give the name of the
+library file on the target, and on the host respectively.  For native
+debugging, both those fields have the same value.  The
+ at var{symbols-loaded} field is emitted only for backward compatibility
+and should not be relied on to convey any useful information.  The
+ at var{thread-group} field, if present, specifies the id of the thread
+group in whose context the library was loaded.  If the field is
+absent, it means the library was loaded in the context of all present
+thread groups.
+
+ at item =library-unloaded,...
+Reports that a library was unloaded by the program.  This notification
+has 3 fields--- at var{id}, @var{target-name} and @var{host-name} with
+the same meaning as for the @code{=library-loaded} notification.
+The @var{thread-group} field, if present, specifies the id of the
+thread group in whose context the library was unloaded.  If the field is
+absent, it means the library was unloaded in the context of all present
+thread groups.
+
+ at item =breakpoint-created,bkpt=@{...@}
+ at itemx =breakpoint-modified,bkpt=@{...@}
+ at itemx =breakpoint-deleted,bkpt=@{...@}
+Reports that a breakpoint was created, modified, or deleted,
+respectively.  Only user-visible breakpoints are reported to the MI
+user.
+
+The @var{bkpt} argument is of the same form as returned by the various
+breakpoint commands; @xref{GDB/MI Breakpoint Commands}.
+
+Note that if a breakpoint is emitted in the result record of a
+command, then it will not also be emitted in an async record.
+
+ at end table
+
+ at node GDB/MI Frame Information
+ at subsection @sc{gdb/mi} Frame Information
+
+Response from many MI commands includes an information about stack
+frame.  This information is a tuple that may have the following
+fields:
+
+ at table @code
+ at item level
+The level of the stack frame.  The innermost frame has the level of
+zero.  This field is always present.
+
+ at item func
+The name of the function corresponding to the frame.  This field may
+be absent if @value{GDBN} is unable to determine the function name.
+
+ at item addr
+The code address for the frame.  This field is always present.
+
+ at item file
+The name of the source files that correspond to the frame's code
+address.  This field may be absent.
+
+ at item line
+The source line corresponding to the frames' code address.  This field
+may be absent.
+
+ at item from
+The name of the binary file (either executable or shared library) the
+corresponds to the frame's code address.  This field may be absent.
+
+ at end table
+
+ at node GDB/MI Thread Information
+ at subsection @sc{gdb/mi} Thread Information
+
+Whenever @value{GDBN} has to report an information about a thread, it
+uses a tuple with the following fields:
+
+ at table @code
+ at item id
+The numeric id assigned to the thread by @value{GDBN}.  This field is
+always present.
+
+ at item target-id
+Target-specific string identifying the thread.  This field is always present.
+
+ at item details
+Additional information about the thread provided by the target.
+It is supposed to be human-readable and not interpreted by the
+frontend.  This field is optional.
+
+ at item state
+Either @samp{stopped} or @samp{running}, depending on whether the
+thread is presently running.  This field is always present.
+
+ at item core
+The value of this field is an integer number of the processor core the
+thread was last seen on.  This field is optional.
+ at end table
+
+ at node GDB/MI Ada Exception Information
+ at subsection @sc{gdb/mi} Ada Exception Information
+
+Whenever a @code{*stopped} record is emitted because the program
+stopped after hitting an exception catchpoint (@pxref{Set Catchpoints}),
+ at value{GDBN} provides the name of the exception that was raised via
+the @code{exception-name} field.
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI Simple Examples
+ at section Simple Examples of @sc{gdb/mi} Interaction
+ at cindex @sc{gdb/mi}, simple examples
+
+This subsection presents several simple examples of interaction using
+the @sc{gdb/mi} interface.  In these examples, @samp{->} means that the
+following line is passed to @sc{gdb/mi} as input, while @samp{<-} means
+the output received from @sc{gdb/mi}.
+
+Note the line breaks shown in the examples are here only for
+readability, they don't appear in the real output.
+
+ at subheading Setting a Breakpoint
+
+Setting a breakpoint generates synchronous output which contains detailed
+information of the breakpoint.
+
+ at smallexample
+-> -break-insert main
+<- ^done,bkpt=@{number="1",type="breakpoint",disp="keep",
+    enabled="y",addr="0x08048564",func="main",file="myprog.c",
+    fullname="/home/nickrob/myprog.c",line="68",times="0"@}
+<- (gdb)
+ at end smallexample
+
+ at subheading Program Execution
+
+Program execution generates asynchronous records and MI gives the
+reason that execution stopped.
+
+ at smallexample
+-> -exec-run
+<- ^running
+<- (gdb)
+<- *stopped,reason="breakpoint-hit",disp="keep",bkptno="1",thread-id="0",
+   frame=@{addr="0x08048564",func="main",
+   args=[@{name="argc",value="1"@},@{name="argv",value="0xbfc4d4d4"@}],
+   file="myprog.c",fullname="/home/nickrob/myprog.c",line="68"@}
+<- (gdb)
+-> -exec-continue
+<- ^running
+<- (gdb)
+<- *stopped,reason="exited-normally"
+<- (gdb)
+ at end smallexample
+
+ at subheading Quitting @value{GDBN}
+
+Quitting @value{GDBN} just prints the result class @samp{^exit}.
+
+ at smallexample
+-> (gdb)
+<- -gdb-exit
+<- ^exit
+ at end smallexample
+
+Please note that @samp{^exit} is printed immediately, but it might
+take some time for @value{GDBN} to actually exit.  During that time, @value{GDBN}
+performs necessary cleanups, including killing programs being debugged
+or disconnecting from debug hardware, so the frontend should wait till
+ at value{GDBN} exits and should only forcibly kill @value{GDBN} if it
+fails to exit in reasonable time.
+
+ at subheading A Bad Command
+
+Here's what happens if you pass a non-existent command:
+
+ at smallexample
+-> -rubbish
+<- ^error,msg="Undefined MI command: rubbish"
+<- (gdb)
+ at end smallexample
+
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI Command Description Format
+ at section @sc{gdb/mi} Command Description Format
+
+The remaining sections describe blocks of commands.  Each block of
+commands is laid out in a fashion similar to this section.
+
+ at subheading Motivation
+
+The motivation for this collection of commands.
+
+ at subheading Introduction
+
+A brief introduction to this collection of commands as a whole.
+
+ at subheading Commands
+
+For each command in the block, the following is described:
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -command @var{args}@dots{}
+ at end smallexample
+
+ at subsubheading Result
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} CLI command(s), if any.
+
+ at subsubheading Example
+
+Example(s) formatted for readability.  Some of the described commands  have
+not been implemented yet and these are labeled N.A.@: (not available).
+
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI Breakpoint Commands
+ at section @sc{gdb/mi} Breakpoint Commands
+
+ at cindex breakpoint commands for @sc{gdb/mi}
+ at cindex @sc{gdb/mi}, breakpoint commands
+This section documents @sc{gdb/mi} commands for manipulating
+breakpoints.
+
+ at subheading The @code{-break-after} Command
+ at findex -break-after
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -break-after @var{number} @var{count}
+ at end smallexample
+
+The breakpoint number @var{number} is not in effect until it has been
+hit @var{count} times.  To see how this is reflected in the output of
+the @samp{-break-list} command, see the description of the
+ at samp{-break-list} command below.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{ignore}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-break-insert main
+^done,bkpt=@{number="1",type="breakpoint",disp="keep",
+enabled="y",addr="0x000100d0",func="main",file="hello.c",
+fullname="/home/foo/hello.c",line="5",times="0"@}
+(gdb)
+-break-after 1 3
+~
+^done
+(gdb)
+-break-list
+^done,BreakpointTable=@{nr_rows="1",nr_cols="6",
+hdr=[@{width="3",alignment="-1",col_name="number",colhdr="Num"@},
+@{width="14",alignment="-1",col_name="type",colhdr="Type"@},
+@{width="4",alignment="-1",col_name="disp",colhdr="Disp"@},
+@{width="3",alignment="-1",col_name="enabled",colhdr="Enb"@},
+@{width="10",alignment="-1",col_name="addr",colhdr="Address"@},
+@{width="40",alignment="2",col_name="what",colhdr="What"@}],
+body=[bkpt=@{number="1",type="breakpoint",disp="keep",enabled="y",
+addr="0x000100d0",func="main",file="hello.c",fullname="/home/foo/hello.c",
+line="5",times="0",ignore="3"@}]@}
+(gdb)
+ at end smallexample
+
+ at ignore
+ at subheading The @code{-break-catch} Command
+ at findex -break-catch
+ at end ignore
+
+ at subheading The @code{-break-commands} Command
+ at findex -break-commands
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -break-commands @var{number} [ @var{command1} ... @var{commandN} ]
+ at end smallexample
+
+Specifies the CLI commands that should be executed when breakpoint
+ at var{number} is hit.  The parameters @var{command1} to @var{commandN}
+are the commands.  If no command is specified, any previously-set
+commands are cleared.  @xref{Break Commands}.  Typical use of this
+functionality is tracing a program, that is, printing of values of
+some variables whenever breakpoint is hit and then continuing.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{commands}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-break-insert main
+^done,bkpt=@{number="1",type="breakpoint",disp="keep",
+enabled="y",addr="0x000100d0",func="main",file="hello.c",
+fullname="/home/foo/hello.c",line="5",times="0"@}
+(gdb)
+-break-commands 1 "print v" "continue"
+^done
+(gdb)
+ at end smallexample
+
+ at subheading The @code{-break-condition} Command
+ at findex -break-condition
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -break-condition @var{number} @var{expr}
+ at end smallexample
+
+Breakpoint @var{number} will stop the program only if the condition in
+ at var{expr} is true.  The condition becomes part of the
+ at samp{-break-list} output (see the description of the @samp{-break-list}
+command below).
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{condition}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-break-condition 1 1
+^done
+(gdb)
+-break-list
+^done,BreakpointTable=@{nr_rows="1",nr_cols="6",
+hdr=[@{width="3",alignment="-1",col_name="number",colhdr="Num"@},
+@{width="14",alignment="-1",col_name="type",colhdr="Type"@},
+@{width="4",alignment="-1",col_name="disp",colhdr="Disp"@},
+@{width="3",alignment="-1",col_name="enabled",colhdr="Enb"@},
+@{width="10",alignment="-1",col_name="addr",colhdr="Address"@},
+@{width="40",alignment="2",col_name="what",colhdr="What"@}],
+body=[bkpt=@{number="1",type="breakpoint",disp="keep",enabled="y",
+addr="0x000100d0",func="main",file="hello.c",fullname="/home/foo/hello.c",
+line="5",cond="1",times="0",ignore="3"@}]@}
+(gdb)
+ at end smallexample
+
+ at subheading The @code{-break-delete} Command
+ at findex -break-delete
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -break-delete ( @var{breakpoint} )+
+ at end smallexample
+
+Delete the breakpoint(s) whose number(s) are specified in the argument
+list.  This is obviously reflected in the breakpoint list.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{delete}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-break-delete 1
+^done
+(gdb)
+-break-list
+^done,BreakpointTable=@{nr_rows="0",nr_cols="6",
+hdr=[@{width="3",alignment="-1",col_name="number",colhdr="Num"@},
+@{width="14",alignment="-1",col_name="type",colhdr="Type"@},
+@{width="4",alignment="-1",col_name="disp",colhdr="Disp"@},
+@{width="3",alignment="-1",col_name="enabled",colhdr="Enb"@},
+@{width="10",alignment="-1",col_name="addr",colhdr="Address"@},
+@{width="40",alignment="2",col_name="what",colhdr="What"@}],
+body=[]@}
+(gdb)
+ at end smallexample
+
+ at subheading The @code{-break-disable} Command
+ at findex -break-disable
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -break-disable ( @var{breakpoint} )+
+ at end smallexample
+
+Disable the named @var{breakpoint}(s).  The field @samp{enabled} in the
+break list is now set to @samp{n} for the named @var{breakpoint}(s).
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{disable}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-break-disable 2
+^done
+(gdb)
+-break-list
+^done,BreakpointTable=@{nr_rows="1",nr_cols="6",
+hdr=[@{width="3",alignment="-1",col_name="number",colhdr="Num"@},
+@{width="14",alignment="-1",col_name="type",colhdr="Type"@},
+@{width="4",alignment="-1",col_name="disp",colhdr="Disp"@},
+@{width="3",alignment="-1",col_name="enabled",colhdr="Enb"@},
+@{width="10",alignment="-1",col_name="addr",colhdr="Address"@},
+@{width="40",alignment="2",col_name="what",colhdr="What"@}],
+body=[bkpt=@{number="2",type="breakpoint",disp="keep",enabled="n",
+addr="0x000100d0",func="main",file="hello.c",fullname="/home/foo/hello.c",
+line="5",times="0"@}]@}
+(gdb)
+ at end smallexample
+
+ at subheading The @code{-break-enable} Command
+ at findex -break-enable
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -break-enable ( @var{breakpoint} )+
+ at end smallexample
+
+Enable (previously disabled) @var{breakpoint}(s).
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{enable}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-break-enable 2
+^done
+(gdb)
+-break-list
+^done,BreakpointTable=@{nr_rows="1",nr_cols="6",
+hdr=[@{width="3",alignment="-1",col_name="number",colhdr="Num"@},
+@{width="14",alignment="-1",col_name="type",colhdr="Type"@},
+@{width="4",alignment="-1",col_name="disp",colhdr="Disp"@},
+@{width="3",alignment="-1",col_name="enabled",colhdr="Enb"@},
+@{width="10",alignment="-1",col_name="addr",colhdr="Address"@},
+@{width="40",alignment="2",col_name="what",colhdr="What"@}],
+body=[bkpt=@{number="2",type="breakpoint",disp="keep",enabled="y",
+addr="0x000100d0",func="main",file="hello.c",fullname="/home/foo/hello.c",
+line="5",times="0"@}]@}
+(gdb)
+ at end smallexample
+
+ at subheading The @code{-break-info} Command
+ at findex -break-info
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -break-info @var{breakpoint}
+ at end smallexample
+
+ at c REDUNDANT???
+Get information about a single breakpoint.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{info break @var{breakpoint}}.
+
+ at subsubheading Example
+N.A.
+
+ at subheading The @code{-break-insert} Command
+ at findex -break-insert
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -break-insert [ -t ] [ -h ] [ -f ] [ -d ] [ -a ]
+    [ -c @var{condition} ] [ -i @var{ignore-count} ]
+    [ -p @var{thread-id} ] [ @var{location} ]
+ at end smallexample
+
+ at noindent
+If specified, @var{location}, can be one of:
+
+ at itemize @bullet
+ at item function
+ at c @item +offset
+ at c @item -offset
+ at c @item linenum
+ at item filename:linenum
+ at item filename:function
+ at item *address
+ at end itemize
+
+The possible optional parameters of this command are:
+
+ at table @samp
+ at item -t
+Insert a temporary breakpoint.
+ at item -h
+Insert a hardware breakpoint.
+ at item -f
+If @var{location} cannot be parsed (for example if it
+refers to unknown files or functions), create a pending
+breakpoint. Without this flag, @value{GDBN} will report
+an error, and won't create a breakpoint, if @var{location}
+cannot be parsed.
+ at item -d
+Create a disabled breakpoint.
+ at item -a
+Create a tracepoint.  @xref{Tracepoints}.  When this parameter
+is used together with @samp{-h}, a fast tracepoint is created.
+ at item -c @var{condition}
+Make the breakpoint conditional on @var{condition}.
+ at item -i @var{ignore-count}
+Initialize the @var{ignore-count}.
+ at item -p @var{thread-id}
+Restrict the breakpoint to the specified @var{thread-id}.
+ at end table
+
+ at subsubheading Result
+
+The result is in the form:
+
+ at smallexample
+^done,bkpt=@{number="@var{number}",type="@var{type}",disp="del"|"keep",
+enabled="y"|"n",addr="@var{hex}",func="@var{funcname}",file="@var{filename}",
+fullname="@var{full_filename}",line="@var{lineno}",[thread="@var{threadno},]
+times="@var{times}"@}
+ at end smallexample
+
+ at noindent
+where @var{number} is the @value{GDBN} number for this breakpoint,
+ at var{funcname} is the name of the function where the breakpoint was
+inserted, @var{filename} is the name of the source file which contains
+this function, @var{lineno} is the source line number within that file
+and @var{times} the number of times that the breakpoint has been hit
+(always 0 for -break-insert but may be greater for -break-info or -break-list
+which use the same output).
+
+Note: this format is open to change.
+ at c An out-of-band breakpoint instead of part of the result?
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} commands are @samp{break}, @samp{tbreak},
+ at samp{hbreak}, and @samp{thbreak}. @c and @samp{rbreak}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-break-insert main
+^done,bkpt=@{number="1",addr="0x0001072c",file="recursive2.c",
+fullname="/home/foo/recursive2.c,line="4",times="0"@}
+(gdb)
+-break-insert -t foo
+^done,bkpt=@{number="2",addr="0x00010774",file="recursive2.c",
+fullname="/home/foo/recursive2.c,line="11",times="0"@}
+(gdb)
+-break-list
+^done,BreakpointTable=@{nr_rows="2",nr_cols="6",
+hdr=[@{width="3",alignment="-1",col_name="number",colhdr="Num"@},
+@{width="14",alignment="-1",col_name="type",colhdr="Type"@},
+@{width="4",alignment="-1",col_name="disp",colhdr="Disp"@},
+@{width="3",alignment="-1",col_name="enabled",colhdr="Enb"@},
+@{width="10",alignment="-1",col_name="addr",colhdr="Address"@},
+@{width="40",alignment="2",col_name="what",colhdr="What"@}],
+body=[bkpt=@{number="1",type="breakpoint",disp="keep",enabled="y",
+addr="0x0001072c", func="main",file="recursive2.c",
+fullname="/home/foo/recursive2.c,"line="4",times="0"@},
+bkpt=@{number="2",type="breakpoint",disp="del",enabled="y",
+addr="0x00010774",func="foo",file="recursive2.c",
+fullname="/home/foo/recursive2.c",line="11",times="0"@}]@}
+(gdb)
+ at c -break-insert -r foo.*
+ at c ~int foo(int, int);
+ at c ^done,bkpt=@{number="3",addr="0x00010774",file="recursive2.c,
+ at c "fullname="/home/foo/recursive2.c",line="11",times="0"@}
+ at c (gdb)
+ at end smallexample
+
+ at subheading The @code{-break-list} Command
+ at findex -break-list
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -break-list
+ at end smallexample
+
+Displays the list of inserted breakpoints, showing the following fields:
+
+ at table @samp
+ at item Number
+number of the breakpoint
+ at item Type
+type of the breakpoint: @samp{breakpoint} or @samp{watchpoint}
+ at item Disposition
+should the breakpoint be deleted or disabled when it is hit: @samp{keep}
+or @samp{nokeep}
+ at item Enabled
+is the breakpoint enabled or no: @samp{y} or @samp{n}
+ at item Address
+memory location at which the breakpoint is set
+ at item What
+logical location of the breakpoint, expressed by function name, file
+name, line number
+ at item Times
+number of times the breakpoint has been hit
+ at end table
+
+If there are no breakpoints or watchpoints, the @code{BreakpointTable}
+ at code{body} field is an empty list.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{info break}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-break-list
+^done,BreakpointTable=@{nr_rows="2",nr_cols="6",
+hdr=[@{width="3",alignment="-1",col_name="number",colhdr="Num"@},
+@{width="14",alignment="-1",col_name="type",colhdr="Type"@},
+@{width="4",alignment="-1",col_name="disp",colhdr="Disp"@},
+@{width="3",alignment="-1",col_name="enabled",colhdr="Enb"@},
+@{width="10",alignment="-1",col_name="addr",colhdr="Address"@},
+@{width="40",alignment="2",col_name="what",colhdr="What"@}],
+body=[bkpt=@{number="1",type="breakpoint",disp="keep",enabled="y",
+addr="0x000100d0",func="main",file="hello.c",line="5",times="0"@},
+bkpt=@{number="2",type="breakpoint",disp="keep",enabled="y",
+addr="0x00010114",func="foo",file="hello.c",fullname="/home/foo/hello.c",
+line="13",times="0"@}]@}
+(gdb)
+ at end smallexample
+
+Here's an example of the result when there are no breakpoints:
+
+ at smallexample
+(gdb)
+-break-list
+^done,BreakpointTable=@{nr_rows="0",nr_cols="6",
+hdr=[@{width="3",alignment="-1",col_name="number",colhdr="Num"@},
+@{width="14",alignment="-1",col_name="type",colhdr="Type"@},
+@{width="4",alignment="-1",col_name="disp",colhdr="Disp"@},
+@{width="3",alignment="-1",col_name="enabled",colhdr="Enb"@},
+@{width="10",alignment="-1",col_name="addr",colhdr="Address"@},
+@{width="40",alignment="2",col_name="what",colhdr="What"@}],
+body=[]@}
+(gdb)
+ at end smallexample
+
+ at subheading The @code{-break-passcount} Command
+ at findex -break-passcount
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -break-passcount @var{tracepoint-number} @var{passcount}
+ at end smallexample
+
+Set the passcount for tracepoint @var{tracepoint-number} to
+ at var{passcount}.  If the breakpoint referred to by @var{tracepoint-number}
+is not a tracepoint, error is emitted.  This corresponds to CLI
+command @samp{passcount}.
+
+ at subheading The @code{-break-watch} Command
+ at findex -break-watch
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -break-watch [ -a | -r ]
+ at end smallexample
+
+Create a watchpoint.  With the @samp{-a} option it will create an
+ at dfn{access} watchpoint, i.e., a watchpoint that triggers either on a
+read from or on a write to the memory location.  With the @samp{-r}
+option, the watchpoint created is a @dfn{read} watchpoint, i.e., it will
+trigger only when the memory location is accessed for reading.  Without
+either of the options, the watchpoint created is a regular watchpoint,
+i.e., it will trigger when the memory location is accessed for writing.
+ at xref{Set Watchpoints, , Setting Watchpoints}.
+
+Note that @samp{-break-list} will report a single list of watchpoints and
+breakpoints inserted.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} commands are @samp{watch}, @samp{awatch}, and
+ at samp{rwatch}.
+
+ at subsubheading Example
+
+Setting a watchpoint on a variable in the @code{main} function:
+
+ at smallexample
+(gdb)
+-break-watch x
+^done,wpt=@{number="2",exp="x"@}
+(gdb)
+-exec-continue
+^running
+(gdb)
+*stopped,reason="watchpoint-trigger",wpt=@{number="2",exp="x"@},
+value=@{old="-268439212",new="55"@},
+frame=@{func="main",args=[],file="recursive2.c",
+fullname="/home/foo/bar/recursive2.c",line="5"@}
+(gdb)
+ at end smallexample
+
+Setting a watchpoint on a variable local to a function.  @value{GDBN} will stop
+the program execution twice: first for the variable changing value, then
+for the watchpoint going out of scope.
+
+ at smallexample
+(gdb)
+-break-watch C
+^done,wpt=@{number="5",exp="C"@}
+(gdb)
+-exec-continue
+^running
+(gdb)
+*stopped,reason="watchpoint-trigger",
+wpt=@{number="5",exp="C"@},value=@{old="-276895068",new="3"@},
+frame=@{func="callee4",args=[],
+file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="13"@}
+(gdb)
+-exec-continue
+^running
+(gdb)
+*stopped,reason="watchpoint-scope",wpnum="5",
+frame=@{func="callee3",args=[@{name="strarg",
+value="0x11940 \"A string argument.\""@}],
+file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="18"@}
+(gdb)
+ at end smallexample
+
+Listing breakpoints and watchpoints, at different points in the program
+execution.  Note that once the watchpoint goes out of scope, it is
+deleted.
+
+ at smallexample
+(gdb)
+-break-watch C
+^done,wpt=@{number="2",exp="C"@}
+(gdb)
+-break-list
+^done,BreakpointTable=@{nr_rows="2",nr_cols="6",
+hdr=[@{width="3",alignment="-1",col_name="number",colhdr="Num"@},
+@{width="14",alignment="-1",col_name="type",colhdr="Type"@},
+@{width="4",alignment="-1",col_name="disp",colhdr="Disp"@},
+@{width="3",alignment="-1",col_name="enabled",colhdr="Enb"@},
+@{width="10",alignment="-1",col_name="addr",colhdr="Address"@},
+@{width="40",alignment="2",col_name="what",colhdr="What"@}],
+body=[bkpt=@{number="1",type="breakpoint",disp="keep",enabled="y",
+addr="0x00010734",func="callee4",
+file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+fullname="/home/foo/devo/gdb/testsuite/gdb.mi/basics.c"line="8",times="1"@},
+bkpt=@{number="2",type="watchpoint",disp="keep",
+enabled="y",addr="",what="C",times="0"@}]@}
+(gdb)
+-exec-continue
+^running
+(gdb)
+*stopped,reason="watchpoint-trigger",wpt=@{number="2",exp="C"@},
+value=@{old="-276895068",new="3"@},
+frame=@{func="callee4",args=[],
+file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="13"@}
+(gdb)
+-break-list
+^done,BreakpointTable=@{nr_rows="2",nr_cols="6",
+hdr=[@{width="3",alignment="-1",col_name="number",colhdr="Num"@},
+@{width="14",alignment="-1",col_name="type",colhdr="Type"@},
+@{width="4",alignment="-1",col_name="disp",colhdr="Disp"@},
+@{width="3",alignment="-1",col_name="enabled",colhdr="Enb"@},
+@{width="10",alignment="-1",col_name="addr",colhdr="Address"@},
+@{width="40",alignment="2",col_name="what",colhdr="What"@}],
+body=[bkpt=@{number="1",type="breakpoint",disp="keep",enabled="y",
+addr="0x00010734",func="callee4",
+file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+fullname="/home/foo/devo/gdb/testsuite/gdb.mi/basics.c",line="8",times="1"@},
+bkpt=@{number="2",type="watchpoint",disp="keep",
+enabled="y",addr="",what="C",times="-5"@}]@}
+(gdb)
+-exec-continue
+^running
+^done,reason="watchpoint-scope",wpnum="2",
+frame=@{func="callee3",args=[@{name="strarg",
+value="0x11940 \"A string argument.\""@}],
+file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="18"@}
+(gdb)
+-break-list
+^done,BreakpointTable=@{nr_rows="1",nr_cols="6",
+hdr=[@{width="3",alignment="-1",col_name="number",colhdr="Num"@},
+@{width="14",alignment="-1",col_name="type",colhdr="Type"@},
+@{width="4",alignment="-1",col_name="disp",colhdr="Disp"@},
+@{width="3",alignment="-1",col_name="enabled",colhdr="Enb"@},
+@{width="10",alignment="-1",col_name="addr",colhdr="Address"@},
+@{width="40",alignment="2",col_name="what",colhdr="What"@}],
+body=[bkpt=@{number="1",type="breakpoint",disp="keep",enabled="y",
+addr="0x00010734",func="callee4",
+file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+fullname="/home/foo/devo/gdb/testsuite/gdb.mi/basics.c",line="8",
+times="1"@}]@}
+(gdb)
+ at end smallexample
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI Program Context
+ at section @sc{gdb/mi}  Program Context
+
+ at subheading The @code{-exec-arguments} Command
+ at findex -exec-arguments
+
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -exec-arguments @var{args}
+ at end smallexample
+
+Set the inferior program arguments, to be used in the next
+ at samp{-exec-run}.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{set args}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-exec-arguments -v word
+^done
+(gdb)
+ at end smallexample
+
+
+ at ignore
+ at subheading The @code{-exec-show-arguments} Command
+ at findex -exec-show-arguments
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -exec-show-arguments
+ at end smallexample
+
+Print the arguments of the program.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{show args}.
+
+ at subsubheading Example
+N.A.
+ at end ignore
+
+
+ at subheading The @code{-environment-cd} Command
+ at findex -environment-cd
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -environment-cd @var{pathdir}
+ at end smallexample
+
+Set @value{GDBN}'s working directory.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{cd}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-environment-cd /kwikemart/marge/ezannoni/flathead-dev/devo/gdb
+^done
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-environment-directory} Command
+ at findex -environment-directory
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -environment-directory [ -r ] [ @var{pathdir} ]+
+ at end smallexample
+
+Add directories @var{pathdir} to beginning of search path for source files.
+If the @samp{-r} option is used, the search path is reset to the default
+search path.  If directories @var{pathdir} are supplied in addition to the
+ at samp{-r} option, the search path is first reset and then addition
+occurs as normal.
+Multiple directories may be specified, separated by blanks.  Specifying
+multiple directories in a single command
+results in the directories added to the beginning of the
+search path in the same order they were presented in the command.
+If blanks are needed as
+part of a directory name, double-quotes should be used around
+the name.  In the command output, the path will show up separated
+by the system directory-separator character.  The directory-separator
+character must not be used
+in any directory name.
+If no directories are specified, the current search path is displayed.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{dir}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-environment-directory /kwikemart/marge/ezannoni/flathead-dev/devo/gdb
+^done,source-path="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb:$cdir:$cwd"
+(gdb)
+-environment-directory ""
+^done,source-path="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb:$cdir:$cwd"
+(gdb)
+-environment-directory -r /home/jjohnstn/src/gdb /usr/src
+^done,source-path="/home/jjohnstn/src/gdb:/usr/src:$cdir:$cwd"
+(gdb)
+-environment-directory -r
+^done,source-path="$cdir:$cwd"
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-environment-path} Command
+ at findex -environment-path
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -environment-path [ -r ] [ @var{pathdir} ]+
+ at end smallexample
+
+Add directories @var{pathdir} to beginning of search path for object files.
+If the @samp{-r} option is used, the search path is reset to the original
+search path that existed at gdb start-up.  If directories @var{pathdir} are
+supplied in addition to the
+ at samp{-r} option, the search path is first reset and then addition
+occurs as normal.
+Multiple directories may be specified, separated by blanks.  Specifying
+multiple directories in a single command
+results in the directories added to the beginning of the
+search path in the same order they were presented in the command.
+If blanks are needed as
+part of a directory name, double-quotes should be used around
+the name.  In the command output, the path will show up separated
+by the system directory-separator character.  The directory-separator
+character must not be used
+in any directory name.
+If no directories are specified, the current path is displayed.
+
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{path}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-environment-path
+^done,path="/usr/bin"
+(gdb)
+-environment-path /kwikemart/marge/ezannoni/flathead-dev/ppc-eabi/gdb /bin
+^done,path="/kwikemart/marge/ezannoni/flathead-dev/ppc-eabi/gdb:/bin:/usr/bin"
+(gdb)
+-environment-path -r /usr/local/bin
+^done,path="/usr/local/bin:/usr/bin"
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-environment-pwd} Command
+ at findex -environment-pwd
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -environment-pwd
+ at end smallexample
+
+Show the current working directory.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{pwd}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-environment-pwd
+^done,cwd="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb"
+(gdb)
+ at end smallexample
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI Thread Commands
+ at section @sc{gdb/mi} Thread Commands
+
+
+ at subheading The @code{-thread-info} Command
+ at findex -thread-info
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -thread-info [ @var{thread-id} ]
+ at end smallexample
+
+Reports information about either a specific thread, if 
+the @var{thread-id} parameter is present, or about all
+threads.  When printing information about all threads,
+also reports the current thread.
+
+ at subsubheading @value{GDBN} Command
+
+The @samp{info thread} command prints the same information
+about all threads.
+
+ at subsubheading Result
+
+The result is a list of threads.  The following attributes are
+defined for a given thread:
+
+ at table @samp
+ at item current
+This field exists only for the current thread.  It has the value @samp{*}.
+
+ at item id
+The identifier that @value{GDBN} uses to refer to the thread.
+
+ at item target-id
+The identifier that the target uses to refer to the thread.
+
+ at item details
+Extra information about the thread, in a target-specific format.  This
+field is optional.
+
+ at item name
+The name of the thread.  If the user specified a name using the
+ at code{thread name} command, then this name is given.  Otherwise, if
+ at value{GDBN} can extract the thread name from the target, then that
+name is given.  If @value{GDBN} cannot find the thread name, then this
+field is omitted.
+
+ at item frame
+The stack frame currently executing in the thread.
+
+ at item state
+The thread's state.  The @samp{state} field may have the following
+values:
+
+ at table @code
+ at item stopped
+The thread is stopped.  Frame information is available for stopped
+threads.
+
+ at item running
+The thread is running.  There's no frame information for running
+threads.
+
+ at end table
+
+ at item core
+If @value{GDBN} can find the CPU core on which this thread is running,
+then this field is the core identifier.  This field is optional.
+
+ at end table
+
+ at subsubheading Example
+
+ at smallexample
+-thread-info
+^done,threads=[
+@{id="2",target-id="Thread 0xb7e14b90 (LWP 21257)",
+   frame=@{level="0",addr="0xffffe410",func="__kernel_vsyscall",
+           args=[]@},state="running"@},
+@{id="1",target-id="Thread 0xb7e156b0 (LWP 21254)",
+   frame=@{level="0",addr="0x0804891f",func="foo",
+           args=[@{name="i",value="10"@}],
+           file="/tmp/a.c",fullname="/tmp/a.c",line="158"@},
+           state="running"@}],
+current-thread-id="1"
+(gdb)
+ at end smallexample
+
+ at subheading The @code{-thread-list-ids} Command
+ at findex -thread-list-ids
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -thread-list-ids
+ at end smallexample
+
+Produces a list of the currently known @value{GDBN} thread ids.  At the
+end of the list it also prints the total number of such threads.
+
+This command is retained for historical reasons, the
+ at code{-thread-info} command should be used instead.
+
+ at subsubheading @value{GDBN} Command
+
+Part of @samp{info threads} supplies the same information.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-thread-list-ids
+^done,thread-ids=@{thread-id="3",thread-id="2",thread-id="1"@},
+current-thread-id="1",number-of-threads="3"
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-thread-select} Command
+ at findex -thread-select
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -thread-select @var{threadnum}
+ at end smallexample
+
+Make @var{threadnum} the current thread.  It prints the number of the new
+current thread, and the topmost frame for that thread.
+
+This command is deprecated in favor of explicitly using the
+ at samp{--thread} option to each command.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{thread}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-exec-next
+^running
+(gdb)
+*stopped,reason="end-stepping-range",thread-id="2",line="187",
+file="../../../devo/gdb/testsuite/gdb.threads/linux-dp.c"
+(gdb)
+-thread-list-ids
+^done,
+thread-ids=@{thread-id="3",thread-id="2",thread-id="1"@},
+number-of-threads="3"
+(gdb)
+-thread-select 3
+^done,new-thread-id="3",
+frame=@{level="0",func="vprintf",
+args=[@{name="format",value="0x8048e9c \"%*s%c %d %c\\n\""@},
+@{name="arg",value="0x2"@}],file="vprintf.c",line="31"@}
+(gdb)
+ at end smallexample
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI Ada Tasking Commands
+ at section @sc{gdb/mi} Ada Tasking Commands
+
+ at subheading The @code{-ada-task-info} Command
+ at findex -ada-task-info
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -ada-task-info [ @var{task-id} ]
+ at end smallexample
+
+Reports information about either a specific Ada task, if the
+ at var{task-id} parameter is present, or about all Ada tasks.
+
+ at subsubheading @value{GDBN} Command
+
+The @samp{info tasks} command prints the same information
+about all Ada tasks (@pxref{Ada Tasks}).
+
+ at subsubheading Result
+
+The result is a table of Ada tasks.  The following columns are
+defined for each Ada task:
+
+ at table @samp
+ at item current
+This field exists only for the current thread.  It has the value @samp{*}.
+
+ at item id
+The identifier that @value{GDBN} uses to refer to the Ada task.
+
+ at item task-id
+The identifier that the target uses to refer to the Ada task.
+
+ at item thread-id
+The identifier of the thread corresponding to the Ada task.
+
+This field should always exist, as Ada tasks are always implemented
+on top of a thread.  But if @value{GDBN} cannot find this corresponding
+thread for any reason, the field is omitted.
+
+ at item parent-id
+This field exists only when the task was created by another task.
+In this case, it provides the ID of the parent task.
+
+ at item priority
+The base priority of the task.
+
+ at item state
+The current state of the task.  For a detailed description of the
+possible states, see @ref{Ada Tasks}.
+
+ at item name
+The name of the task.
+
+ at end table
+
+ at subsubheading Example
+
+ at smallexample
+-ada-task-info
+^done,tasks=@{nr_rows="3",nr_cols="8",
+hdr=[@{width="1",alignment="-1",col_name="current",colhdr=""@},
+@{width="3",alignment="1",col_name="id",colhdr="ID"@},
+@{width="9",alignment="1",col_name="task-id",colhdr="TID"@},
+@{width="4",alignment="1",col_name="thread-id",colhdr=""@},
+@{width="4",alignment="1",col_name="parent-id",colhdr="P-ID"@},
+@{width="3",alignment="1",col_name="priority",colhdr="Pri"@},
+@{width="22",alignment="-1",col_name="state",colhdr="State"@},
+@{width="1",alignment="2",col_name="name",colhdr="Name"@}],
+body=[@{current="*",id="1",task-id="   644010",thread-id="1",priority="48",
+state="Child Termination Wait",name="main_task"@}]@}
+(gdb)
+ at end smallexample
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI Program Execution
+ at section @sc{gdb/mi} Program Execution
+
+These are the asynchronous commands which generate the out-of-band
+record @samp{*stopped}.  Currently @value{GDBN} only really executes
+asynchronously with remote targets and this interaction is mimicked in
+other cases.
+
+ at subheading The @code{-exec-continue} Command
+ at findex -exec-continue
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -exec-continue [--reverse] [--all|--thread-group N]
+ at end smallexample
+
+Resumes the execution of the inferior program, which will continue
+to execute until it reaches a debugger stop event.  If the 
+ at samp{--reverse} option is specified, execution resumes in reverse until 
+it reaches a stop event.  Stop events may include
+ at itemize @bullet
+ at item
+breakpoints or watchpoints
+ at item
+signals or exceptions
+ at item
+the end of the process (or its beginning under @samp{--reverse})
+ at item
+the end or beginning of a replay log if one is being used.
+ at end itemize
+In all-stop mode (@pxref{All-Stop
+Mode}), may resume only one thread, or all threads, depending on the
+value of the @samp{scheduler-locking} variable.  If @samp{--all} is
+specified, all threads (in all inferiors) will be resumed.  The @samp{--all} option is
+ignored in all-stop mode.  If the @samp{--thread-group} options is
+specified, then all threads in that thread group are resumed.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} corresponding is @samp{continue}.
+
+ at subsubheading Example
+
+ at smallexample
+-exec-continue
+^running
+(gdb)
+@@Hello world
+*stopped,reason="breakpoint-hit",disp="keep",bkptno="2",frame=@{
+func="foo",args=[],file="hello.c",fullname="/home/foo/bar/hello.c",
+line="13"@}
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-exec-finish} Command
+ at findex -exec-finish
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -exec-finish [--reverse]
+ at end smallexample
+
+Resumes the execution of the inferior program until the current
+function is exited.  Displays the results returned by the function.
+If the @samp{--reverse} option is specified, resumes the reverse
+execution of the inferior program until the point where current
+function was called.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{finish}.
+
+ at subsubheading Example
+
+Function returning @code{void}.
+
+ at smallexample
+-exec-finish
+^running
+(gdb)
+@@hello from foo
+*stopped,reason="function-finished",frame=@{func="main",args=[],
+file="hello.c",fullname="/home/foo/bar/hello.c",line="7"@}
+(gdb)
+ at end smallexample
+
+Function returning other than @code{void}.  The name of the internal
+ at value{GDBN} variable storing the result is printed, together with the
+value itself.
+
+ at smallexample
+-exec-finish
+^running
+(gdb)
+*stopped,reason="function-finished",frame=@{addr="0x000107b0",func="foo",
+args=[@{name="a",value="1"],@{name="b",value="9"@}@},
+file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"@},
+gdb-result-var="$1",return-value="0"
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-exec-interrupt} Command
+ at findex -exec-interrupt
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -exec-interrupt [--all|--thread-group N]
+ at end smallexample
+
+Interrupts the background execution of the target.  Note how the token
+associated with the stop message is the one for the execution command
+that has been interrupted.  The token for the interrupt itself only
+appears in the @samp{^done} output.  If the user is trying to
+interrupt a non-running program, an error message will be printed.
+
+Note that when asynchronous execution is enabled, this command is
+asynchronous just like other execution commands.  That is, first the
+ at samp{^done} response will be printed, and the target stop will be
+reported after that using the @samp{*stopped} notification.
+
+In non-stop mode, only the context thread is interrupted by default.
+All threads (in all inferiors) will be interrupted if the
+ at samp{--all}  option is specified.  If the @samp{--thread-group}
+option is specified, all threads in that group will be interrupted.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{interrupt}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+111-exec-continue
+111^running
+
+(gdb)
+222-exec-interrupt
+222^done
+(gdb)
+111*stopped,signal-name="SIGINT",signal-meaning="Interrupt",
+frame=@{addr="0x00010140",func="foo",args=[],file="try.c",
+fullname="/home/foo/bar/try.c",line="13"@}
+(gdb)
+
+(gdb)
+-exec-interrupt
+^error,msg="mi_cmd_exec_interrupt: Inferior not executing."
+(gdb)
+ at end smallexample
+
+ at subheading The @code{-exec-jump} Command
+ at findex -exec-jump
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -exec-jump @var{location}
+ at end smallexample
+
+Resumes execution of the inferior program at the location specified by
+parameter.  @xref{Specify Location}, for a description of the
+different forms of @var{location}.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{jump}.
+
+ at subsubheading Example
+
+ at smallexample
+-exec-jump foo.c:10
+*running,thread-id="all"
+^running
+ at end smallexample
+
+
+ at subheading The @code{-exec-next} Command
+ at findex -exec-next
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -exec-next [--reverse]
+ at end smallexample
+
+Resumes execution of the inferior program, stopping when the beginning
+of the next source line is reached.
+
+If the @samp{--reverse} option is specified, resumes reverse execution
+of the inferior program, stopping at the beginning of the previous
+source line.  If you issue this command on the first line of a
+function, it will take you back to the caller of that function, to the
+source line where the function was called.
+
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{next}.
+
+ at subsubheading Example
+
+ at smallexample
+-exec-next
+^running
+(gdb)
+*stopped,reason="end-stepping-range",line="8",file="hello.c"
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-exec-next-instruction} Command
+ at findex -exec-next-instruction
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -exec-next-instruction [--reverse]
+ at end smallexample
+
+Executes one machine instruction.  If the instruction is a function
+call, continues until the function returns.  If the program stops at an
+instruction in the middle of a source line, the address will be
+printed as well.
+
+If the @samp{--reverse} option is specified, resumes reverse execution
+of the inferior program, stopping at the previous instruction.  If the
+previously executed instruction was a return from another function,
+it will continue to execute in reverse until the call to that function
+(from the current stack frame) is reached.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{nexti}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-exec-next-instruction
+^running
+
+(gdb)
+*stopped,reason="end-stepping-range",
+addr="0x000100d4",line="5",file="hello.c"
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-exec-return} Command
+ at findex -exec-return
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -exec-return
+ at end smallexample
+
+Makes current function return immediately.  Doesn't execute the inferior.
+Displays the new current frame.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{return}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+200-break-insert callee4
+200^done,bkpt=@{number="1",addr="0x00010734",
+file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="8"@}
+(gdb)
+000-exec-run
+000^running
+(gdb)
+000*stopped,reason="breakpoint-hit",disp="keep",bkptno="1",
+frame=@{func="callee4",args=[],
+file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="8"@}
+(gdb)
+205-break-delete
+205^done
+(gdb)
+111-exec-return
+111^done,frame=@{level="0",func="callee3",
+args=[@{name="strarg",
+value="0x11940 \"A string argument.\""@}],
+file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="18"@}
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-exec-run} Command
+ at findex -exec-run
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -exec-run [--all | --thread-group N]
+ at end smallexample
+
+Starts execution of the inferior from the beginning.  The inferior
+executes until either a breakpoint is encountered or the program
+exits.  In the latter case the output will include an exit code, if
+the program has exited exceptionally.
+
+When no option is specified, the current inferior is started.  If the
+ at samp{--thread-group} option is specified, it should refer to a thread
+group of type @samp{process}, and that thread group will be started.
+If the @samp{--all} option is specified, then all inferiors will be started.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{run}.
+
+ at subsubheading Examples
+
+ at smallexample
+(gdb)
+-break-insert main
+^done,bkpt=@{number="1",addr="0x0001072c",file="recursive2.c",line="4"@}
+(gdb)
+-exec-run
+^running
+(gdb)
+*stopped,reason="breakpoint-hit",disp="keep",bkptno="1",
+frame=@{func="main",args=[],file="recursive2.c",
+fullname="/home/foo/bar/recursive2.c",line="4"@}
+(gdb)
+ at end smallexample
+
+ at noindent
+Program exited normally:
+
+ at smallexample
+(gdb)
+-exec-run
+^running
+(gdb)
+x = 55
+*stopped,reason="exited-normally"
+(gdb)
+ at end smallexample
+
+ at noindent
+Program exited exceptionally:
+
+ at smallexample
+(gdb)
+-exec-run
+^running
+(gdb)
+x = 55
+*stopped,reason="exited",exit-code="01"
+(gdb)
+ at end smallexample
+
+Another way the program can terminate is if it receives a signal such as
+ at code{SIGINT}.  In this case, @sc{gdb/mi} displays this:
+
+ at smallexample
+(gdb)
+*stopped,reason="exited-signalled",signal-name="SIGINT",
+signal-meaning="Interrupt"
+ at end smallexample
+
+
+ at c @subheading -exec-signal
+
+
+ at subheading The @code{-exec-step} Command
+ at findex -exec-step
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -exec-step [--reverse]
+ at end smallexample
+
+Resumes execution of the inferior program, stopping when the beginning
+of the next source line is reached, if the next source line is not a
+function call.  If it is, stop at the first instruction of the called
+function.  If the @samp{--reverse} option is specified, resumes reverse
+execution of the inferior program, stopping at the beginning of the
+previously executed source line.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{step}.
+
+ at subsubheading Example
+
+Stepping into a function:
+
+ at smallexample
+-exec-step
+^running
+(gdb)
+*stopped,reason="end-stepping-range",
+frame=@{func="foo",args=[@{name="a",value="10"@},
+@{name="b",value="0"@}],file="recursive2.c",
+fullname="/home/foo/bar/recursive2.c",line="11"@}
+(gdb)
+ at end smallexample
+
+Regular stepping:
+
+ at smallexample
+-exec-step
+^running
+(gdb)
+*stopped,reason="end-stepping-range",line="14",file="recursive2.c"
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-exec-step-instruction} Command
+ at findex -exec-step-instruction
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -exec-step-instruction [--reverse]
+ at end smallexample
+
+Resumes the inferior which executes one machine instruction.  If the
+ at samp{--reverse} option is specified, resumes reverse execution of the
+inferior program, stopping at the previously executed instruction.
+The output, once @value{GDBN} has stopped, will vary depending on
+whether we have stopped in the middle of a source line or not.  In the
+former case, the address at which the program stopped will be printed
+as well.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{stepi}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-exec-step-instruction
+^running
+
+(gdb)
+*stopped,reason="end-stepping-range",
+frame=@{func="foo",args=[],file="try.c",
+fullname="/home/foo/bar/try.c",line="10"@}
+(gdb)
+-exec-step-instruction
+^running
+
+(gdb)
+*stopped,reason="end-stepping-range",
+frame=@{addr="0x000100f4",func="foo",args=[],file="try.c",
+fullname="/home/foo/bar/try.c",line="10"@}
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-exec-until} Command
+ at findex -exec-until
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -exec-until [ @var{location} ]
+ at end smallexample
+
+Executes the inferior until the @var{location} specified in the
+argument is reached.  If there is no argument, the inferior executes
+until a source line greater than the current one is reached.  The
+reason for stopping in this case will be @samp{location-reached}.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{until}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-exec-until recursive2.c:6
+^running
+(gdb)
+x = 55
+*stopped,reason="location-reached",frame=@{func="main",args=[],
+file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="6"@}
+(gdb)
+ at end smallexample
+
+ at ignore
+ at subheading -file-clear
+Is this going away????
+ at end ignore
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI Stack Manipulation
+ at section @sc{gdb/mi} Stack Manipulation Commands
+
+
+ at subheading The @code{-stack-info-frame} Command
+ at findex -stack-info-frame
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -stack-info-frame
+ at end smallexample
+
+Get info on the selected frame.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{info frame} or @samp{frame}
+(without arguments).
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-stack-info-frame
+^done,frame=@{level="1",addr="0x0001076c",func="callee3",
+file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="17"@}
+(gdb)
+ at end smallexample
+
+ at subheading The @code{-stack-info-depth} Command
+ at findex -stack-info-depth
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -stack-info-depth [ @var{max-depth} ]
+ at end smallexample
+
+Return the depth of the stack.  If the integer argument @var{max-depth}
+is specified, do not count beyond @var{max-depth} frames.
+
+ at subsubheading @value{GDBN} Command
+
+There's no equivalent @value{GDBN} command.
+
+ at subsubheading Example
+
+For a stack with frame levels 0 through 11:
+
+ at smallexample
+(gdb)
+-stack-info-depth
+^done,depth="12"
+(gdb)
+-stack-info-depth 4
+^done,depth="4"
+(gdb)
+-stack-info-depth 12
+^done,depth="12"
+(gdb)
+-stack-info-depth 11
+^done,depth="11"
+(gdb)
+-stack-info-depth 13
+^done,depth="12"
+(gdb)
+ at end smallexample
+
+ at subheading The @code{-stack-list-arguments} Command
+ at findex -stack-list-arguments
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -stack-list-arguments @var{print-values}
+    [ @var{low-frame} @var{high-frame} ]
+ at end smallexample
+
+Display a list of the arguments for the frames between @var{low-frame}
+and @var{high-frame} (inclusive).  If @var{low-frame} and
+ at var{high-frame} are not provided, list the arguments for the whole
+call stack.  If the two arguments are equal, show the single frame
+at the corresponding level.  It is an error if @var{low-frame} is
+larger than the actual number of frames.  On the other hand,
+ at var{high-frame} may be larger than the actual number of frames, in
+which case only existing frames will be returned.
+
+If @var{print-values} is 0 or @code{--no-values}, print only the names of
+the variables; if it is 1 or @code{--all-values}, print also their
+values; and if it is 2 or @code{--simple-values}, print the name,
+type and value for simple data types, and the name and type for arrays,
+structures and unions.
+
+Use of this command to obtain arguments in a single frame is
+deprecated in favor of the @samp{-stack-list-variables} command.
+
+ at subsubheading @value{GDBN} Command
+
+ at value{GDBN} does not have an equivalent command.  @code{gdbtk} has a
+ at samp{gdb_get_args} command which partially overlaps with the
+functionality of @samp{-stack-list-arguments}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-stack-list-frames
+^done,
+stack=[
+frame=@{level="0",addr="0x00010734",func="callee4",
+file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="8"@},
+frame=@{level="1",addr="0x0001076c",func="callee3",
+file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="17"@},
+frame=@{level="2",addr="0x0001078c",func="callee2",
+file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="22"@},
+frame=@{level="3",addr="0x000107b4",func="callee1",
+file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="27"@},
+frame=@{level="4",addr="0x000107e0",func="main",
+file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="32"@}]
+(gdb)
+-stack-list-arguments 0
+^done,
+stack-args=[
+frame=@{level="0",args=[]@},
+frame=@{level="1",args=[name="strarg"]@},
+frame=@{level="2",args=[name="intarg",name="strarg"]@},
+frame=@{level="3",args=[name="intarg",name="strarg",name="fltarg"]@},
+frame=@{level="4",args=[]@}]
+(gdb)
+-stack-list-arguments 1
+^done,
+stack-args=[
+frame=@{level="0",args=[]@},
+frame=@{level="1",
+ args=[@{name="strarg",value="0x11940 \"A string argument.\""@}]@},
+frame=@{level="2",args=[
+@{name="intarg",value="2"@},
+@{name="strarg",value="0x11940 \"A string argument.\""@}]@},
+@{frame=@{level="3",args=[
+@{name="intarg",value="2"@},
+@{name="strarg",value="0x11940 \"A string argument.\""@},
+@{name="fltarg",value="3.5"@}]@},
+frame=@{level="4",args=[]@}]
+(gdb)
+-stack-list-arguments 0 2 2
+^done,stack-args=[frame=@{level="2",args=[name="intarg",name="strarg"]@}]
+(gdb)
+-stack-list-arguments 1 2 2
+^done,stack-args=[frame=@{level="2",
+args=[@{name="intarg",value="2"@},
+@{name="strarg",value="0x11940 \"A string argument.\""@}]@}]
+(gdb)
+ at end smallexample
+
+ at c @subheading -stack-list-exception-handlers
+
+
+ at subheading The @code{-stack-list-frames} Command
+ at findex -stack-list-frames
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -stack-list-frames [ @var{low-frame} @var{high-frame} ]
+ at end smallexample
+
+List the frames currently on the stack.  For each frame it displays the
+following info:
+
+ at table @samp
+ at item @var{level}
+The frame number, 0 being the topmost frame, i.e., the innermost function.
+ at item @var{addr}
+The @code{$pc} value for that frame.
+ at item @var{func}
+Function name.
+ at item @var{file}
+File name of the source file where the function lives.
+ at item @var{fullname}
+The full file name of the source file where the function lives.
+ at item @var{line}
+Line number corresponding to the @code{$pc}.
+ at item @var{from}
+The shared library where this function is defined.  This is only given
+if the frame's function is not known.
+ at end table
+
+If invoked without arguments, this command prints a backtrace for the
+whole stack.  If given two integer arguments, it shows the frames whose
+levels are between the two arguments (inclusive).  If the two arguments
+are equal, it shows the single frame at the corresponding level.  It is
+an error if @var{low-frame} is larger than the actual number of
+frames.  On the other hand, @var{high-frame} may be larger than the
+actual number of frames, in which case only existing frames will be returned.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} commands are @samp{backtrace} and @samp{where}.
+
+ at subsubheading Example
+
+Full stack backtrace:
+
+ at smallexample
+(gdb)
+-stack-list-frames
+^done,stack=
+[frame=@{level="0",addr="0x0001076c",func="foo",
+  file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="11"@},
+frame=@{level="1",addr="0x000107a4",func="foo",
+  file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"@},
+frame=@{level="2",addr="0x000107a4",func="foo",
+  file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"@},
+frame=@{level="3",addr="0x000107a4",func="foo",
+  file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"@},
+frame=@{level="4",addr="0x000107a4",func="foo",
+  file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"@},
+frame=@{level="5",addr="0x000107a4",func="foo",
+  file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"@},
+frame=@{level="6",addr="0x000107a4",func="foo",
+  file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"@},
+frame=@{level="7",addr="0x000107a4",func="foo",
+  file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"@},
+frame=@{level="8",addr="0x000107a4",func="foo",
+  file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"@},
+frame=@{level="9",addr="0x000107a4",func="foo",
+  file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"@},
+frame=@{level="10",addr="0x000107a4",func="foo",
+  file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"@},
+frame=@{level="11",addr="0x00010738",func="main",
+  file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="4"@}]
+(gdb)
+ at end smallexample
+
+Show frames between @var{low_frame} and @var{high_frame}:
+
+ at smallexample
+(gdb)
+-stack-list-frames 3 5
+^done,stack=
+[frame=@{level="3",addr="0x000107a4",func="foo",
+  file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"@},
+frame=@{level="4",addr="0x000107a4",func="foo",
+  file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"@},
+frame=@{level="5",addr="0x000107a4",func="foo",
+  file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"@}]
+(gdb)
+ at end smallexample
+
+Show a single frame:
+
+ at smallexample
+(gdb)
+-stack-list-frames 3 3
+^done,stack=
+[frame=@{level="3",addr="0x000107a4",func="foo",
+  file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"@}]
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-stack-list-locals} Command
+ at findex -stack-list-locals
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -stack-list-locals @var{print-values}
+ at end smallexample
+
+Display the local variable names for the selected frame.  If
+ at var{print-values} is 0 or @code{--no-values}, print only the names of
+the variables; if it is 1 or @code{--all-values}, print also their
+values; and if it is 2 or @code{--simple-values}, print the name,
+type and value for simple data types, and the name and type for arrays,
+structures and unions.  In this last case, a frontend can immediately
+display the value of simple data types and create variable objects for
+other data types when the user wishes to explore their values in
+more detail.
+
+This command is deprecated in favor of the
+ at samp{-stack-list-variables} command.
+
+ at subsubheading @value{GDBN} Command
+
+ at samp{info locals} in @value{GDBN}, @samp{gdb_get_locals} in @code{gdbtk}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-stack-list-locals 0
+^done,locals=[name="A",name="B",name="C"]
+(gdb)
+-stack-list-locals --all-values
+^done,locals=[@{name="A",value="1"@},@{name="B",value="2"@},
+  @{name="C",value="@{1, 2, 3@}"@}]
+-stack-list-locals --simple-values
+^done,locals=[@{name="A",type="int",value="1"@},
+  @{name="B",type="int",value="2"@},@{name="C",type="int [3]"@}]
+(gdb)
+ at end smallexample
+
+ at subheading The @code{-stack-list-variables} Command
+ at findex -stack-list-variables
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -stack-list-variables @var{print-values}
+ at end smallexample
+
+Display the names of local variables and function arguments for the selected frame.  If
+ at var{print-values} is 0 or @code{--no-values}, print only the names of
+the variables; if it is 1 or @code{--all-values}, print also their
+values; and if it is 2 or @code{--simple-values}, print the name,
+type and value for simple data types, and the name and type for arrays,
+structures and unions.  
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-stack-list-variables --thread 1 --frame 0 --all-values
+^done,variables=[@{name="x",value="11"@},@{name="s",value="@{a = 1, b = 2@}"@}]
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-stack-select-frame} Command
+ at findex -stack-select-frame
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -stack-select-frame @var{framenum}
+ at end smallexample
+
+Change the selected frame.  Select a different frame @var{framenum} on
+the stack.
+
+This command in deprecated in favor of passing the @samp{--frame}
+option to every command.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} commands are @samp{frame}, @samp{up},
+ at samp{down}, @samp{select-frame}, @samp{up-silent}, and @samp{down-silent}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-stack-select-frame 2
+^done
+(gdb)
+ at end smallexample
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI Variable Objects
+ at section @sc{gdb/mi} Variable Objects
+
+ at ignore
+
+ at subheading Motivation for Variable Objects in @sc{gdb/mi}
+
+For the implementation of a variable debugger window (locals, watched
+expressions, etc.), we are proposing the adaptation of the existing code
+used by @code{Insight}.
+
+The two main reasons for that are:
+
+ at enumerate 1
+ at item
+It has been proven in practice (it is already on its second generation).
+
+ at item
+It will shorten development time (needless to say how important it is
+now).
+ at end enumerate
+
+The original interface was designed to be used by Tcl code, so it was
+slightly changed so it could be used through @sc{gdb/mi}.  This section
+describes the @sc{gdb/mi} operations that will be available and gives some
+hints about their use.
+
+ at emph{Note}: In addition to the set of operations described here, we
+expect the @sc{gui} implementation of a variable window to require, at
+least, the following operations:
+
+ at itemize @bullet
+ at item @code{-gdb-show} @code{output-radix}
+ at item @code{-stack-list-arguments}
+ at item @code{-stack-list-locals}
+ at item @code{-stack-select-frame}
+ at end itemize
+
+ at end ignore
+
+ at subheading Introduction to Variable Objects
+
+ at cindex variable objects in @sc{gdb/mi}
+
+Variable objects are "object-oriented" MI interface for examining and
+changing values of expressions.  Unlike some other MI interfaces that
+work with expressions, variable objects are specifically designed for
+simple and efficient presentation in the frontend.  A variable object
+is identified by string name.  When a variable object is created, the
+frontend specifies the expression for that variable object.  The
+expression can be a simple variable, or it can be an arbitrary complex
+expression, and can even involve CPU registers.  After creating a
+variable object, the frontend can invoke other variable object
+operations---for example to obtain or change the value of a variable
+object, or to change display format.
+
+Variable objects have hierarchical tree structure.  Any variable object
+that corresponds to a composite type, such as structure in C, has
+a number of child variable objects, for example corresponding to each
+element of a structure.  A child variable object can itself have 
+children, recursively.  Recursion ends when we reach 
+leaf variable objects, which always have built-in types.  Child variable
+objects are created only by explicit request, so if a frontend 
+is not interested in the children of a particular variable object, no
+child will be created.
+
+For a leaf variable object it is possible to obtain its value as a
+string, or set the value from a string.  String value can be also
+obtained for a non-leaf variable object, but it's generally a string
+that only indicates the type of the object, and does not list its
+contents.  Assignment to a non-leaf variable object is not allowed.
+ 
+A frontend does not need to read the values of all variable objects each time
+the program stops.  Instead, MI provides an update command that lists all
+variable objects whose values has changed since the last update
+operation.  This considerably reduces the amount of data that must
+be transferred to the frontend.  As noted above, children variable
+objects are created on demand, and only leaf variable objects have a
+real value.  As result, gdb will read target memory only for leaf
+variables that frontend has created.
+
+The automatic update is not always desirable.  For example, a frontend
+might want to keep a value of some expression for future reference,
+and never update it.  For another example,  fetching memory is
+relatively slow for embedded targets, so a frontend might want
+to disable automatic update for the variables that are either not
+visible on the screen, or ``closed''.  This is possible using so
+called ``frozen variable objects''.  Such variable objects are never
+implicitly updated.  
+
+Variable objects can be either @dfn{fixed} or @dfn{floating}.  For the
+fixed variable object, the expression is parsed when the variable
+object is created, including associating identifiers to specific
+variables.  The meaning of expression never changes.  For a floating
+variable object the values of variables whose names appear in the
+expressions are re-evaluated every time in the context of the current
+frame.  Consider this example:
+
+ at smallexample
+void do_work(...)
+@{
+        struct work_state state;
+
+        if (...)
+           do_work(...);
+@}
+ at end smallexample
+
+If a fixed variable object for the @code{state} variable is created in
+this function, and we enter the recursive call, the variable
+object will report the value of @code{state} in the top-level
+ at code{do_work} invocation.  On the other hand, a floating variable
+object will report the value of @code{state} in the current frame.
+
+If an expression specified when creating a fixed variable object
+refers to a local variable, the variable object becomes bound to the
+thread and frame in which the variable object is created.  When such
+variable object is updated, @value{GDBN} makes sure that the
+thread/frame combination the variable object is bound to still exists,
+and re-evaluates the variable object in context of that thread/frame.
+
+The following is the complete set of @sc{gdb/mi} operations defined to
+access this functionality:
+
+ at multitable @columnfractions .4 .6
+ at item @strong{Operation}
+ at tab @strong{Description}
+
+ at item @code{-enable-pretty-printing}
+ at tab enable Python-based pretty-printing
+ at item @code{-var-create}
+ at tab create a variable object
+ at item @code{-var-delete}
+ at tab delete the variable object and/or its children
+ at item @code{-var-set-format}
+ at tab set the display format of this variable
+ at item @code{-var-show-format}
+ at tab show the display format of this variable
+ at item @code{-var-info-num-children}
+ at tab tells how many children this object has
+ at item @code{-var-list-children}
+ at tab return a list of the object's children
+ at item @code{-var-info-type}
+ at tab show the type of this variable object
+ at item @code{-var-info-expression}
+ at tab print parent-relative expression that this variable object represents
+ at item @code{-var-info-path-expression}
+ at tab print full expression that this variable object represents
+ at item @code{-var-show-attributes}
+ at tab is this variable editable? does it exist here?
+ at item @code{-var-evaluate-expression}
+ at tab get the value of this variable
+ at item @code{-var-assign}
+ at tab set the value of this variable
+ at item @code{-var-update}
+ at tab update the variable and its children
+ at item @code{-var-set-frozen}
+ at tab set frozeness attribute
+ at item @code{-var-set-update-range}
+ at tab set range of children to display on update
+ at end multitable
+
+In the next subsection we describe each operation in detail and suggest
+how it can be used.
+
+ at subheading Description And Use of Operations on Variable Objects
+
+ at subheading The @code{-enable-pretty-printing} Command
+ at findex -enable-pretty-printing
+
+ at smallexample
+-enable-pretty-printing
+ at end smallexample
+
+ at value{GDBN} allows Python-based visualizers to affect the output of the
+MI variable object commands.  However, because there was no way to
+implement this in a fully backward-compatible way, a front end must
+request that this functionality be enabled.
+
+Once enabled, this feature cannot be disabled.
+
+Note that if Python support has not been compiled into @value{GDBN},
+this command will still succeed (and do nothing).
+
+This feature is currently (as of @value{GDBN} 7.0) experimental, and
+may work differently in future versions of @value{GDBN}.
+
+ at subheading The @code{-var-create} Command
+ at findex -var-create
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -var-create @{@var{name} | "-"@}
+    @{@var{frame-addr} | "*" | "@@"@} @var{expression}
+ at end smallexample
+
+This operation creates a variable object, which allows the monitoring of
+a variable, the result of an expression, a memory cell or a CPU
+register.
+
+The @var{name} parameter is the string by which the object can be
+referenced.  It must be unique.  If @samp{-} is specified, the varobj
+system will generate a string ``varNNNNNN'' automatically.  It will be
+unique provided that one does not specify @var{name} of that format.
+The command fails if a duplicate name is found.
+
+The frame under which the expression should be evaluated can be
+specified by @var{frame-addr}.  A @samp{*} indicates that the current
+frame should be used.  A @samp{@@} indicates that a floating variable
+object must be created.
+
+ at var{expression} is any expression valid on the current language set (must not
+begin with a @samp{*}), or one of the following:
+
+ at itemize @bullet
+ at item
+ at samp{*@var{addr}}, where @var{addr} is the address of a memory cell
+
+ at item
+ at samp{*@var{addr}- at var{addr}} --- a memory address range (TBD)
+
+ at item
+ at samp{$@var{regname}} --- a CPU register name
+ at end itemize
+
+ at cindex dynamic varobj
+A varobj's contents may be provided by a Python-based pretty-printer.  In this
+case the varobj is known as a @dfn{dynamic varobj}.  Dynamic varobjs
+have slightly different semantics in some cases.  If the
+ at code{-enable-pretty-printing} command is not sent, then @value{GDBN}
+will never create a dynamic varobj.  This ensures backward
+compatibility for existing clients.
+
+ at subsubheading Result
+
+This operation returns attributes of the newly-created varobj.  These
+are:
+
+ at table @samp
+ at item name
+The name of the varobj.
+
+ at item numchild
+The number of children of the varobj.  This number is not necessarily
+reliable for a dynamic varobj.  Instead, you must examine the
+ at samp{has_more} attribute.
+
+ at item value
+The varobj's scalar value.  For a varobj whose type is some sort of
+aggregate (e.g., a @code{struct}), or for a dynamic varobj, this value
+will not be interesting.
+
+ at item type
+The varobj's type.  This is a string representation of the type, as
+would be printed by the @value{GDBN} CLI.  If @samp{print object}
+(@pxref{Print Settings, set print object}) is set to @code{on}, the
+ at emph{actual} (derived) type of the object is shown rather than the
+ at emph{declared} one.
+
+ at item thread-id
+If a variable object is bound to a specific thread, then this is the
+thread's identifier.
+
+ at item has_more
+For a dynamic varobj, this indicates whether there appear to be any
+children available.  For a non-dynamic varobj, this will be 0.
+
+ at item dynamic
+This attribute will be present and have the value @samp{1} if the
+varobj is a dynamic varobj.  If the varobj is not a dynamic varobj,
+then this attribute will not be present.
+
+ at item displayhint
+A dynamic varobj can supply a display hint to the front end.  The
+value comes directly from the Python pretty-printer object's
+ at code{display_hint} method.  @xref{Pretty Printing API}.
+ at end table
+
+Typical output will look like this:
+
+ at smallexample
+ name="@var{name}",numchild="@var{N}",type="@var{type}",thread-id="@var{M}",
+  has_more="@var{has_more}"
+ at end smallexample
+
+
+ at subheading The @code{-var-delete} Command
+ at findex -var-delete
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -var-delete [ -c ] @var{name}
+ at end smallexample
+
+Deletes a previously created variable object and all of its children.
+With the @samp{-c} option, just deletes the children.
+
+Returns an error if the object @var{name} is not found.
+
+
+ at subheading The @code{-var-set-format} Command
+ at findex -var-set-format
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -var-set-format @var{name} @var{format-spec}
+ at end smallexample
+
+Sets the output format for the value of the object @var{name} to be
+ at var{format-spec}.
+
+ at anchor{-var-set-format}
+The syntax for the @var{format-spec} is as follows:
+
+ at smallexample
+ @var{format-spec} @expansion{}
+ @{binary | decimal | hexadecimal | octal | natural@}
+ at end smallexample
+
+The natural format is the default format choosen automatically
+based on the variable type (like decimal for an @code{int}, hex
+for pointers, etc.).
+
+For a variable with children, the format is set only on the 
+variable itself, and the children are not affected.  
+
+ at subheading The @code{-var-show-format} Command
+ at findex -var-show-format
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -var-show-format @var{name}
+ at end smallexample
+
+Returns the format used to display the value of the object @var{name}.
+
+ at smallexample
+ @var{format} @expansion{}
+ @var{format-spec}
+ at end smallexample
+
+
+ at subheading The @code{-var-info-num-children} Command
+ at findex -var-info-num-children
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -var-info-num-children @var{name}
+ at end smallexample
+
+Returns the number of children of a variable object @var{name}:
+
+ at smallexample
+ numchild=@var{n}
+ at end smallexample
+
+Note that this number is not completely reliable for a dynamic varobj.
+It will return the current number of children, but more children may
+be available.
+
+
+ at subheading The @code{-var-list-children} Command
+ at findex -var-list-children
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -var-list-children [@var{print-values}] @var{name} [@var{from} @var{to}]
+ at end smallexample
+ at anchor{-var-list-children}
+
+Return a list of the children of the specified variable object and
+create variable objects for them, if they do not already exist.  With
+a single argument or if @var{print-values} has a value of 0 or
+ at code{--no-values}, print only the names of the variables; if
+ at var{print-values} is 1 or @code{--all-values}, also print their
+values; and if it is 2 or @code{--simple-values} print the name and
+value for simple data types and just the name for arrays, structures
+and unions.
+
+ at var{from} and @var{to}, if specified, indicate the range of children
+to report.  If @var{from} or @var{to} is less than zero, the range is
+reset and all children will be reported.  Otherwise, children starting
+at @var{from} (zero-based) and up to and excluding @var{to} will be
+reported.
+
+If a child range is requested, it will only affect the current call to
+ at code{-var-list-children}, but not future calls to @code{-var-update}.
+For this, you must instead use @code{-var-set-update-range}.  The
+intent of this approach is to enable a front end to implement any
+update approach it likes; for example, scrolling a view may cause the
+front end to request more children with @code{-var-list-children}, and
+then the front end could call @code{-var-set-update-range} with a
+different range to ensure that future updates are restricted to just
+the visible items.
+
+For each child the following results are returned:
+
+ at table @var
+
+ at item name
+Name of the variable object created for this child.
+
+ at item exp
+The expression to be shown to the user by the front end to designate this child.
+For example this may be the name of a structure member.
+
+For a dynamic varobj, this value cannot be used to form an
+expression.  There is no way to do this at all with a dynamic varobj.
+
+For C/C at t{++} structures there are several pseudo children returned to
+designate access qualifiers.  For these pseudo children @var{exp} is
+ at samp{public}, @samp{private}, or @samp{protected}.  In this case the
+type and value are not present.
+
+A dynamic varobj will not report the access qualifying
+pseudo-children, regardless of the language.  This information is not
+available at all with a dynamic varobj.
+
+ at item numchild
+Number of children this child has.  For a dynamic varobj, this will be
+0.
+
+ at item type
+The type of the child.  If @samp{print object}
+(@pxref{Print Settings, set print object}) is set to @code{on}, the
+ at emph{actual} (derived) type of the object is shown rather than the
+ at emph{declared} one.
+
+ at item value
+If values were requested, this is the value.
+
+ at item thread-id
+If this variable object is associated with a thread, this is the thread id.  
+Otherwise this result is not present.
+
+ at item frozen
+If the variable object is frozen, this variable will be present with a value of 1.
+ at end table
+
+The result may have its own attributes:
+
+ at table @samp
+ at item displayhint
+A dynamic varobj can supply a display hint to the front end.  The
+value comes directly from the Python pretty-printer object's
+ at code{display_hint} method.  @xref{Pretty Printing API}.
+
+ at item has_more
+This is an integer attribute which is nonzero if there are children
+remaining after the end of the selected range.
+ at end table
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+ -var-list-children n
+ ^done,numchild=@var{n},children=[child=@{name=@var{name},exp=@var{exp},
+ numchild=@var{n},type=@var{type}@}, at r{(repeats N times)}]
+(gdb)
+ -var-list-children --all-values n
+ ^done,numchild=@var{n},children=[child=@{name=@var{name},exp=@var{exp},
+ numchild=@var{n},value=@var{value},type=@var{type}@}, at r{(repeats N times)}]
+ at end smallexample
+
+
+ at subheading The @code{-var-info-type} Command
+ at findex -var-info-type
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -var-info-type @var{name}
+ at end smallexample
+
+Returns the type of the specified variable @var{name}.  The type is
+returned as a string in the same format as it is output by the
+ at value{GDBN} CLI:
+
+ at smallexample
+ type=@var{typename}
+ at end smallexample
+
+
+ at subheading The @code{-var-info-expression} Command
+ at findex -var-info-expression
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -var-info-expression @var{name}
+ at end smallexample
+
+Returns a string that is suitable for presenting this
+variable object in user interface.  The string is generally
+not valid expression in the current language, and cannot be evaluated.
+
+For example, if @code{a} is an array, and variable object
+ at code{A} was created for @code{a}, then we'll get this output:
+
+ at smallexample
+(gdb) -var-info-expression A.1
+^done,lang="C",exp="1"
+ at end smallexample
+
+ at noindent
+Here, the values of @code{lang} can be @code{@{"C" | "C++" | "Java"@}}.
+
+Note that the output of the @code{-var-list-children} command also
+includes those expressions, so the @code{-var-info-expression} command
+is of limited use.
+
+ at subheading The @code{-var-info-path-expression} Command
+ at findex -var-info-path-expression
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -var-info-path-expression @var{name}
+ at end smallexample
+
+Returns an expression that can be evaluated in the current
+context and will yield the same value that a variable object has.
+Compare this with the @code{-var-info-expression} command, which
+result can be used only for UI presentation.  Typical use of
+the @code{-var-info-path-expression} command is creating a 
+watchpoint from a variable object.
+
+This command is currently not valid for children of a dynamic varobj,
+and will give an error when invoked on one.
+
+For example, suppose @code{C} is a C at t{++} class, derived from class
+ at code{Base}, and that the @code{Base} class has a member called
+ at code{m_size}.  Assume a variable @code{c} is has the type of
+ at code{C} and a variable object @code{C} was created for variable
+ at code{c}.  Then, we'll get this output:
+ at smallexample
+(gdb) -var-info-path-expression C.Base.public.m_size
+^done,path_expr=((Base)c).m_size)
+ at end smallexample
+
+ at subheading The @code{-var-show-attributes} Command
+ at findex -var-show-attributes
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -var-show-attributes @var{name}
+ at end smallexample
+
+List attributes of the specified variable object @var{name}:
+
+ at smallexample
+ status=@var{attr} [ ( , at var{attr} )* ]
+ at end smallexample
+
+ at noindent
+where @var{attr} is @code{@{ @{ editable | noneditable @} | TBD @}}.
+
+ at subheading The @code{-var-evaluate-expression} Command
+ at findex -var-evaluate-expression
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -var-evaluate-expression [-f @var{format-spec}] @var{name}
+ at end smallexample
+
+Evaluates the expression that is represented by the specified variable
+object and returns its value as a string.  The format of the string
+can be specified with the @samp{-f} option.  The possible values of 
+this option are the same as for @code{-var-set-format} 
+(@pxref{-var-set-format}).  If the @samp{-f} option is not specified,
+the current display format will be used.  The current display format 
+can be changed using the @code{-var-set-format} command.
+
+ at smallexample
+ value=@var{value}
+ at end smallexample
+
+Note that one must invoke @code{-var-list-children} for a variable
+before the value of a child variable can be evaluated.
+
+ at subheading The @code{-var-assign} Command
+ at findex -var-assign
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -var-assign @var{name} @var{expression}
+ at end smallexample
+
+Assigns the value of @var{expression} to the variable object specified
+by @var{name}.  The object must be @samp{editable}.  If the variable's
+value is altered by the assign, the variable will show up in any
+subsequent @code{-var-update} list.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-var-assign var1 3
+^done,value="3"
+(gdb)
+-var-update *
+^done,changelist=[@{name="var1",in_scope="true",type_changed="false"@}]
+(gdb)
+ at end smallexample
+
+ at subheading The @code{-var-update} Command
+ at findex -var-update
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -var-update [@var{print-values}] @{@var{name} | "*"@}
+ at end smallexample
+
+Reevaluate the expressions corresponding to the variable object
+ at var{name} and all its direct and indirect children, and return the
+list of variable objects whose values have changed; @var{name} must
+be a root variable object.  Here, ``changed'' means that the result of
+ at code{-var-evaluate-expression} before and after the
+ at code{-var-update} is different.  If @samp{*} is used as the variable
+object names, all existing variable objects are updated, except
+for frozen ones (@pxref{-var-set-frozen}).  The option
+ at var{print-values} determines whether both names and values, or just
+names are printed.  The possible values of this option are the same
+as for @code{-var-list-children} (@pxref{-var-list-children}).  It is
+recommended to use the @samp{--all-values} option, to reduce the
+number of MI commands needed on each program stop.
+
+With the @samp{*} parameter, if a variable object is bound to a
+currently running thread, it will not be updated, without any
+diagnostic.
+
+If @code{-var-set-update-range} was previously used on a varobj, then
+only the selected range of children will be reported.
+
+ at code{-var-update} reports all the changed varobjs in a tuple named
+ at samp{changelist}.
+
+Each item in the change list is itself a tuple holding:
+
+ at table @samp
+ at item name
+The name of the varobj.
+
+ at item value
+If values were requested for this update, then this field will be
+present and will hold the value of the varobj.
+
+ at item in_scope
+ at anchor{-var-update}
+This field is a string which may take one of three values:
+
+ at table @code
+ at item "true"
+The variable object's current value is valid.
+
+ at item "false"
+The variable object does not currently hold a valid value but it may
+hold one in the future if its associated expression comes back into
+scope.
+
+ at item "invalid"
+The variable object no longer holds a valid value.
+This can occur when the executable file being debugged has changed,
+either through recompilation or by using the @value{GDBN} @code{file}
+command.  The front end should normally choose to delete these variable
+objects.
+ at end table
+
+In the future new values may be added to this list so the front should
+be prepared for this possibility.  @xref{GDB/MI Development and Front Ends, , at sc{GDB/MI} Development and Front Ends}.
+
+ at item type_changed
+This is only present if the varobj is still valid.  If the type
+changed, then this will be the string @samp{true}; otherwise it will
+be @samp{false}.
+
+When a varobj's type changes, its children are also likely to have
+become incorrect.  Therefore, the varobj's children are automatically
+deleted when this attribute is @samp{true}.  Also, the varobj's update
+range, when set using the @code{-var-set-update-range} command, is
+unset.
+
+ at item new_type
+If the varobj's type changed, then this field will be present and will
+hold the new type.
+
+ at item new_num_children
+For a dynamic varobj, if the number of children changed, or if the
+type changed, this will be the new number of children.
+
+The @samp{numchild} field in other varobj responses is generally not
+valid for a dynamic varobj -- it will show the number of children that
+ at value{GDBN} knows about, but because dynamic varobjs lazily
+instantiate their children, this will not reflect the number of
+children which may be available.
+
+The @samp{new_num_children} attribute only reports changes to the
+number of children known by @value{GDBN}.  This is the only way to
+detect whether an update has removed children (which necessarily can
+only happen at the end of the update range).
+
+ at item displayhint
+The display hint, if any.
+
+ at item has_more
+This is an integer value, which will be 1 if there are more children
+available outside the varobj's update range.
+
+ at item dynamic
+This attribute will be present and have the value @samp{1} if the
+varobj is a dynamic varobj.  If the varobj is not a dynamic varobj,
+then this attribute will not be present.
+
+ at item new_children
+If new children were added to a dynamic varobj within the selected
+update range (as set by @code{-var-set-update-range}), then they will
+be listed in this attribute.
+ at end table
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-var-assign var1 3
+^done,value="3"
+(gdb)
+-var-update --all-values var1
+^done,changelist=[@{name="var1",value="3",in_scope="true",
+type_changed="false"@}]
+(gdb)
+ at end smallexample
+
+ at subheading The @code{-var-set-frozen} Command
+ at findex -var-set-frozen
+ at anchor{-var-set-frozen}
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -var-set-frozen @var{name} @var{flag}
+ at end smallexample
+
+Set the frozenness flag on the variable object @var{name}.  The
+ at var{flag} parameter should be either @samp{1} to make the variable
+frozen or @samp{0} to make it unfrozen.  If a variable object is
+frozen, then neither itself, nor any of its children, are 
+implicitly updated by @code{-var-update} of 
+a parent variable or by @code{-var-update *}.  Only
+ at code{-var-update} of the variable itself will update its value and
+values of its children.  After a variable object is unfrozen, it is
+implicitly updated by all subsequent @code{-var-update} operations.  
+Unfreezing a variable does not update it, only subsequent
+ at code{-var-update} does.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-var-set-frozen V 1
+^done
+(gdb)
+ at end smallexample
+
+ at subheading The @code{-var-set-update-range} command
+ at findex -var-set-update-range
+ at anchor{-var-set-update-range}
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -var-set-update-range @var{name} @var{from} @var{to}
+ at end smallexample
+
+Set the range of children to be returned by future invocations of
+ at code{-var-update}.
+
+ at var{from} and @var{to} indicate the range of children to report.  If
+ at var{from} or @var{to} is less than zero, the range is reset and all
+children will be reported.  Otherwise, children starting at @var{from}
+(zero-based) and up to and excluding @var{to} will be reported.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-var-set-update-range V 1 2
+^done
+ at end smallexample
+
+ at subheading The @code{-var-set-visualizer} command
+ at findex -var-set-visualizer
+ at anchor{-var-set-visualizer}
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -var-set-visualizer @var{name} @var{visualizer}
+ at end smallexample
+
+Set a visualizer for the variable object @var{name}.
+
+ at var{visualizer} is the visualizer to use.  The special value
+ at samp{None} means to disable any visualizer in use.
+
+If not @samp{None}, @var{visualizer} must be a Python expression.
+This expression must evaluate to a callable object which accepts a
+single argument.  @value{GDBN} will call this object with the value of
+the varobj @var{name} as an argument (this is done so that the same
+Python pretty-printing code can be used for both the CLI and MI).
+When called, this object must return an object which conforms to the
+pretty-printing interface (@pxref{Pretty Printing API}).
+
+The pre-defined function @code{gdb.default_visualizer} may be used to
+select a visualizer by following the built-in process
+(@pxref{Selecting Pretty-Printers}).  This is done automatically when
+a varobj is created, and so ordinarily is not needed.
+
+This feature is only available if Python support is enabled.  The MI
+command @code{-list-features} (@pxref{GDB/MI Miscellaneous Commands})
+can be used to check this.
+
+ at subsubheading Example
+
+Resetting the visualizer:
+
+ at smallexample
+(gdb)
+-var-set-visualizer V None
+^done
+ at end smallexample
+
+Reselecting the default (type-based) visualizer:
+
+ at smallexample
+(gdb)
+-var-set-visualizer V gdb.default_visualizer
+^done
+ at end smallexample
+
+Suppose @code{SomeClass} is a visualizer class.  A lambda expression
+can be used to instantiate this class for a varobj:
+
+ at smallexample
+(gdb)
+-var-set-visualizer V "lambda val: SomeClass()"
+^done
+ at end smallexample
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI Data Manipulation
+ at section @sc{gdb/mi} Data Manipulation
+
+ at cindex data manipulation, in @sc{gdb/mi}
+ at cindex @sc{gdb/mi}, data manipulation
+This section describes the @sc{gdb/mi} commands that manipulate data:
+examine memory and registers, evaluate expressions, etc.
+
+ at c REMOVED FROM THE INTERFACE.
+ at c @subheading -data-assign
+ at c Change the value of a program variable. Plenty of side effects.
+ at c @subsubheading GDB Command
+ at c set variable
+ at c @subsubheading Example
+ at c N.A.
+
+ at subheading The @code{-data-disassemble} Command
+ at findex -data-disassemble
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -data-disassemble
+    [ -s @var{start-addr} -e @var{end-addr} ]
+  | [ -f @var{filename} -l @var{linenum} [ -n @var{lines} ] ]
+  -- @var{mode}
+ at end smallexample
+
+ at noindent
+Where:
+
+ at table @samp
+ at item @var{start-addr}
+is the beginning address (or @code{$pc})
+ at item @var{end-addr}
+is the end address
+ at item @var{filename}
+is the name of the file to disassemble
+ at item @var{linenum}
+is the line number to disassemble around
+ at item @var{lines}
+is the number of disassembly lines to be produced.  If it is -1,
+the whole function will be disassembled, in case no @var{end-addr} is
+specified.  If @var{end-addr} is specified as a non-zero value, and
+ at var{lines} is lower than the number of disassembly lines between
+ at var{start-addr} and @var{end-addr}, only @var{lines} lines are
+displayed; if @var{lines} is higher than the number of lines between
+ at var{start-addr} and @var{end-addr}, only the lines up to @var{end-addr}
+are displayed.
+ at item @var{mode}
+is either 0 (meaning only disassembly), 1 (meaning mixed source and
+disassembly), 2 (meaning disassembly with raw opcodes), or 3 (meaning
+mixed source and disassembly with raw opcodes).
+ at end table
+
+ at subsubheading Result
+
+The output for each instruction is composed of four fields:
+
+ at itemize @bullet
+ at item Address
+ at item Func-name
+ at item Offset
+ at item Instruction
+ at end itemize
+
+Note that whatever included in the instruction field, is not manipulated
+directly by @sc{gdb/mi}, i.e., it is not possible to adjust its format.
+
+ at subsubheading @value{GDBN} Command
+
+There's no direct mapping from this command to the CLI.
+
+ at subsubheading Example
+
+Disassemble from the current value of @code{$pc} to @code{$pc + 20}:
+
+ at smallexample
+(gdb)
+-data-disassemble -s $pc -e "$pc + 20" -- 0
+^done,
+asm_insns=[
+@{address="0x000107c0",func-name="main",offset="4",
+inst="mov  2, %o0"@},
+@{address="0x000107c4",func-name="main",offset="8",
+inst="sethi  %hi(0x11800), %o2"@},
+@{address="0x000107c8",func-name="main",offset="12",
+inst="or  %o2, 0x140, %o1\t! 0x11940 <_lib_version+8>"@},
+@{address="0x000107cc",func-name="main",offset="16",
+inst="sethi  %hi(0x11800), %o2"@},
+@{address="0x000107d0",func-name="main",offset="20",
+inst="or  %o2, 0x168, %o4\t! 0x11968 <_lib_version+48>"@}]
+(gdb)
+ at end smallexample
+
+Disassemble the whole @code{main} function.  Line 32 is part of
+ at code{main}.
+
+ at smallexample
+-data-disassemble -f basics.c -l 32 -- 0
+^done,asm_insns=[
+@{address="0x000107bc",func-name="main",offset="0",
+inst="save  %sp, -112, %sp"@},
+@{address="0x000107c0",func-name="main",offset="4",
+inst="mov   2, %o0"@},
+@{address="0x000107c4",func-name="main",offset="8",
+inst="sethi %hi(0x11800), %o2"@},
+[@dots{}]
+@{address="0x0001081c",func-name="main",offset="96",inst="ret "@},
+@{address="0x00010820",func-name="main",offset="100",inst="restore "@}]
+(gdb)
+ at end smallexample
+
+Disassemble 3 instructions from the start of @code{main}:
+
+ at smallexample
+(gdb)
+-data-disassemble -f basics.c -l 32 -n 3 -- 0
+^done,asm_insns=[
+@{address="0x000107bc",func-name="main",offset="0",
+inst="save  %sp, -112, %sp"@},
+@{address="0x000107c0",func-name="main",offset="4",
+inst="mov  2, %o0"@},
+@{address="0x000107c4",func-name="main",offset="8",
+inst="sethi  %hi(0x11800), %o2"@}]
+(gdb)
+ at end smallexample
+
+Disassemble 3 instructions from the start of @code{main} in mixed mode:
+
+ at smallexample
+(gdb)
+-data-disassemble -f basics.c -l 32 -n 3 -- 1
+^done,asm_insns=[
+src_and_asm_line=@{line="31",
+file="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb/ \
+  testsuite/gdb.mi/basics.c",line_asm_insn=[
+@{address="0x000107bc",func-name="main",offset="0",
+inst="save  %sp, -112, %sp"@}]@},
+src_and_asm_line=@{line="32",
+file="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb/ \
+  testsuite/gdb.mi/basics.c",line_asm_insn=[
+@{address="0x000107c0",func-name="main",offset="4",
+inst="mov  2, %o0"@},
+@{address="0x000107c4",func-name="main",offset="8",
+inst="sethi  %hi(0x11800), %o2"@}]@}]
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-data-evaluate-expression} Command
+ at findex -data-evaluate-expression
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -data-evaluate-expression @var{expr}
+ at end smallexample
+
+Evaluate @var{expr} as an expression.  The expression could contain an
+inferior function call.  The function call will execute synchronously.
+If the expression contains spaces, it must be enclosed in double quotes.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} commands are @samp{print}, @samp{output}, and
+ at samp{call}.  In @code{gdbtk} only, there's a corresponding
+ at samp{gdb_eval} command.
+
+ at subsubheading Example
+
+In the following example, the numbers that precede the commands are the
+ at dfn{tokens} described in @ref{GDB/MI Command Syntax, , at sc{gdb/mi}
+Command Syntax}.  Notice how @sc{gdb/mi} returns the same tokens in its
+output.
+
+ at smallexample
+211-data-evaluate-expression A
+211^done,value="1"
+(gdb)
+311-data-evaluate-expression &A
+311^done,value="0xefffeb7c"
+(gdb)
+411-data-evaluate-expression A+3
+411^done,value="4"
+(gdb)
+511-data-evaluate-expression "A + 3"
+511^done,value="4"
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-data-list-changed-registers} Command
+ at findex -data-list-changed-registers
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -data-list-changed-registers
+ at end smallexample
+
+Display a list of the registers that have changed.
+
+ at subsubheading @value{GDBN} Command
+
+ at value{GDBN} doesn't have a direct analog for this command; @code{gdbtk}
+has the corresponding command @samp{gdb_changed_register_list}.
+
+ at subsubheading Example
+
+On a PPC MBX board:
+
+ at smallexample
+(gdb)
+-exec-continue
+^running
+
+(gdb)
+*stopped,reason="breakpoint-hit",disp="keep",bkptno="1",frame=@{
+func="main",args=[],file="try.c",fullname="/home/foo/bar/try.c",
+line="5"@}
+(gdb)
+-data-list-changed-registers
+^done,changed-registers=["0","1","2","4","5","6","7","8","9",
+"10","11","13","14","15","16","17","18","19","20","21","22","23",
+"24","25","26","27","28","30","31","64","65","66","67","69"]
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-data-list-register-names} Command
+ at findex -data-list-register-names
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -data-list-register-names [ ( @var{regno} )+ ]
+ at end smallexample
+
+Show a list of register names for the current target.  If no arguments
+are given, it shows a list of the names of all the registers.  If
+integer numbers are given as arguments, it will print a list of the
+names of the registers corresponding to the arguments.  To ensure
+consistency between a register name and its number, the output list may
+include empty register names.
+
+ at subsubheading @value{GDBN} Command
+
+ at value{GDBN} does not have a command which corresponds to
+ at samp{-data-list-register-names}.  In @code{gdbtk} there is a
+corresponding command @samp{gdb_regnames}.
+
+ at subsubheading Example
+
+For the PPC MBX board:
+ at smallexample
+(gdb)
+-data-list-register-names
+^done,register-names=["r0","r1","r2","r3","r4","r5","r6","r7",
+"r8","r9","r10","r11","r12","r13","r14","r15","r16","r17","r18",
+"r19","r20","r21","r22","r23","r24","r25","r26","r27","r28","r29",
+"r30","r31","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9",
+"f10","f11","f12","f13","f14","f15","f16","f17","f18","f19","f20",
+"f21","f22","f23","f24","f25","f26","f27","f28","f29","f30","f31",
+"", "pc","ps","cr","lr","ctr","xer"]
+(gdb)
+-data-list-register-names 1 2 3
+^done,register-names=["r1","r2","r3"]
+(gdb)
+ at end smallexample
+
+ at subheading The @code{-data-list-register-values} Command
+ at findex -data-list-register-values
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -data-list-register-values @var{fmt} [ ( @var{regno} )*]
+ at end smallexample
+
+Display the registers' contents.  @var{fmt} is the format according to
+which the registers' contents are to be returned, followed by an optional
+list of numbers specifying the registers to display.  A missing list of
+numbers indicates that the contents of all the registers must be returned.
+
+Allowed formats for @var{fmt} are:
+
+ at table @code
+ at item x
+Hexadecimal
+ at item o
+Octal
+ at item t
+Binary
+ at item d
+Decimal
+ at item r
+Raw
+ at item N
+Natural
+ at end table
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} commands are @samp{info reg}, @samp{info
+all-reg}, and (in @code{gdbtk}) @samp{gdb_fetch_registers}.
+
+ at subsubheading Example
+
+For a PPC MBX board (note: line breaks are for readability only, they
+don't appear in the actual output):
+
+ at smallexample
+(gdb)
+-data-list-register-values r 64 65
+^done,register-values=[@{number="64",value="0xfe00a300"@},
+@{number="65",value="0x00029002"@}]
+(gdb)
+-data-list-register-values x
+^done,register-values=[@{number="0",value="0xfe0043c8"@},
+@{number="1",value="0x3fff88"@},@{number="2",value="0xfffffffe"@},
+@{number="3",value="0x0"@},@{number="4",value="0xa"@},
+@{number="5",value="0x3fff68"@},@{number="6",value="0x3fff58"@},
+@{number="7",value="0xfe011e98"@},@{number="8",value="0x2"@},
+@{number="9",value="0xfa202820"@},@{number="10",value="0xfa202808"@},
+@{number="11",value="0x1"@},@{number="12",value="0x0"@},
+@{number="13",value="0x4544"@},@{number="14",value="0xffdfffff"@},
+@{number="15",value="0xffffffff"@},@{number="16",value="0xfffffeff"@},
+@{number="17",value="0xefffffed"@},@{number="18",value="0xfffffffe"@},
+@{number="19",value="0xffffffff"@},@{number="20",value="0xffffffff"@},
+@{number="21",value="0xffffffff"@},@{number="22",value="0xfffffff7"@},
+@{number="23",value="0xffffffff"@},@{number="24",value="0xffffffff"@},
+@{number="25",value="0xffffffff"@},@{number="26",value="0xfffffffb"@},
+@{number="27",value="0xffffffff"@},@{number="28",value="0xf7bfffff"@},
+@{number="29",value="0x0"@},@{number="30",value="0xfe010000"@},
+@{number="31",value="0x0"@},@{number="32",value="0x0"@},
+@{number="33",value="0x0"@},@{number="34",value="0x0"@},
+@{number="35",value="0x0"@},@{number="36",value="0x0"@},
+@{number="37",value="0x0"@},@{number="38",value="0x0"@},
+@{number="39",value="0x0"@},@{number="40",value="0x0"@},
+@{number="41",value="0x0"@},@{number="42",value="0x0"@},
+@{number="43",value="0x0"@},@{number="44",value="0x0"@},
+@{number="45",value="0x0"@},@{number="46",value="0x0"@},
+@{number="47",value="0x0"@},@{number="48",value="0x0"@},
+@{number="49",value="0x0"@},@{number="50",value="0x0"@},
+@{number="51",value="0x0"@},@{number="52",value="0x0"@},
+@{number="53",value="0x0"@},@{number="54",value="0x0"@},
+@{number="55",value="0x0"@},@{number="56",value="0x0"@},
+@{number="57",value="0x0"@},@{number="58",value="0x0"@},
+@{number="59",value="0x0"@},@{number="60",value="0x0"@},
+@{number="61",value="0x0"@},@{number="62",value="0x0"@},
+@{number="63",value="0x0"@},@{number="64",value="0xfe00a300"@},
+@{number="65",value="0x29002"@},@{number="66",value="0x202f04b5"@},
+@{number="67",value="0xfe0043b0"@},@{number="68",value="0xfe00b3e4"@},
+@{number="69",value="0x20002b03"@}]
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-data-read-memory} Command
+ at findex -data-read-memory
+
+This command is deprecated, use @code{-data-read-memory-bytes} instead.
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -data-read-memory [ -o @var{byte-offset} ]
+   @var{address} @var{word-format} @var{word-size}
+   @var{nr-rows} @var{nr-cols} [ @var{aschar} ]
+ at end smallexample
+
+ at noindent
+where:
+
+ at table @samp
+ at item @var{address}
+An expression specifying the address of the first memory word to be
+read.  Complex expressions containing embedded white space should be
+quoted using the C convention.
+
+ at item @var{word-format}
+The format to be used to print the memory words.  The notation is the
+same as for @value{GDBN}'s @code{print} command (@pxref{Output Formats,
+,Output Formats}).
+
+ at item @var{word-size}
+The size of each memory word in bytes.
+
+ at item @var{nr-rows}
+The number of rows in the output table.
+
+ at item @var{nr-cols}
+The number of columns in the output table.
+
+ at item @var{aschar}
+If present, indicates that each row should include an @sc{ascii} dump.  The
+value of @var{aschar} is used as a padding character when a byte is not a
+member of the printable @sc{ascii} character set (printable @sc{ascii}
+characters are those whose code is between 32 and 126, inclusively).
+
+ at item @var{byte-offset}
+An offset to add to the @var{address} before fetching memory.
+ at end table
+
+This command displays memory contents as a table of @var{nr-rows} by
+ at var{nr-cols} words, each word being @var{word-size} bytes.  In total,
+ at code{@var{nr-rows} * @var{nr-cols} * @var{word-size}} bytes are read
+(returned as @samp{total-bytes}).  Should less than the requested number
+of bytes be returned by the target, the missing words are identified
+using @samp{N/A}.  The number of bytes read from the target is returned
+in @samp{nr-bytes} and the starting address used to read memory in
+ at samp{addr}.
+
+The address of the next/previous row or page is available in
+ at samp{next-row} and @samp{prev-row}, @samp{next-page} and
+ at samp{prev-page}.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{x}.  @code{gdbtk} has
+ at samp{gdb_get_mem} memory read command.
+
+ at subsubheading Example
+
+Read six bytes of memory starting at @code{bytes+6} but then offset by
+ at code{-6} bytes.  Format as three rows of two columns.  One byte per
+word.  Display each word in hex.
+
+ at smallexample
+(gdb)
+9-data-read-memory -o -6 -- bytes+6 x 1 3 2
+9^done,addr="0x00001390",nr-bytes="6",total-bytes="6",
+next-row="0x00001396",prev-row="0x0000138e",next-page="0x00001396",
+prev-page="0x0000138a",memory=[
+@{addr="0x00001390",data=["0x00","0x01"]@},
+@{addr="0x00001392",data=["0x02","0x03"]@},
+@{addr="0x00001394",data=["0x04","0x05"]@}]
+(gdb)
+ at end smallexample
+
+Read two bytes of memory starting at address @code{shorts + 64} and
+display as a single word formatted in decimal.
+
+ at smallexample
+(gdb)
+5-data-read-memory shorts+64 d 2 1 1
+5^done,addr="0x00001510",nr-bytes="2",total-bytes="2",
+next-row="0x00001512",prev-row="0x0000150e",
+next-page="0x00001512",prev-page="0x0000150e",memory=[
+@{addr="0x00001510",data=["128"]@}]
+(gdb)
+ at end smallexample
+
+Read thirty two bytes of memory starting at @code{bytes+16} and format
+as eight rows of four columns.  Include a string encoding with @samp{x}
+used as the non-printable character.
+
+ at smallexample
+(gdb)
+4-data-read-memory bytes+16 x 1 8 4 x
+4^done,addr="0x000013a0",nr-bytes="32",total-bytes="32",
+next-row="0x000013c0",prev-row="0x0000139c",
+next-page="0x000013c0",prev-page="0x00001380",memory=[
+@{addr="0x000013a0",data=["0x10","0x11","0x12","0x13"],ascii="xxxx"@},
+@{addr="0x000013a4",data=["0x14","0x15","0x16","0x17"],ascii="xxxx"@},
+@{addr="0x000013a8",data=["0x18","0x19","0x1a","0x1b"],ascii="xxxx"@},
+@{addr="0x000013ac",data=["0x1c","0x1d","0x1e","0x1f"],ascii="xxxx"@},
+@{addr="0x000013b0",data=["0x20","0x21","0x22","0x23"],ascii=" !\"#"@},
+@{addr="0x000013b4",data=["0x24","0x25","0x26","0x27"],ascii="$%&'"@},
+@{addr="0x000013b8",data=["0x28","0x29","0x2a","0x2b"],ascii="()*+"@},
+@{addr="0x000013bc",data=["0x2c","0x2d","0x2e","0x2f"],ascii=",-./"@}]
+(gdb)
+ at end smallexample
+
+ at subheading The @code{-data-read-memory-bytes} Command
+ at findex -data-read-memory-bytes
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -data-read-memory-bytes [ -o @var{byte-offset} ]
+   @var{address} @var{count}
+ at end smallexample
+
+ at noindent
+where:
+
+ at table @samp
+ at item @var{address}
+An expression specifying the address of the first memory word to be
+read.  Complex expressions containing embedded white space should be
+quoted using the C convention.
+
+ at item @var{count}
+The number of bytes to read.  This should be an integer literal.
+
+ at item @var{byte-offset}
+The offsets in bytes relative to @var{address} at which to start
+reading.  This should be an integer literal.  This option is provided
+so that a frontend is not required to first evaluate address and then
+perform address arithmetics itself.
+
+ at end table
+
+This command attempts to read all accessible memory regions in the
+specified range.  First, all regions marked as unreadable in the memory
+map (if one is defined) will be skipped.  @xref{Memory Region
+Attributes}.  Second, @value{GDBN} will attempt to read the remaining
+regions.  For each one, if reading full region results in an errors,
+ at value{GDBN} will try to read a subset of the region.
+
+In general, every single byte in the region may be readable or not,
+and the only way to read every readable byte is to try a read at
+every address, which is not practical.   Therefore, @value{GDBN} will
+attempt to read all accessible bytes at either beginning or the end
+of the region, using a binary division scheme.  This heuristic works
+well for reading accross a memory map boundary.  Note that if a region
+has a readable range that is neither at the beginning or the end,
+ at value{GDBN} will not read it.
+
+The result record (@pxref{GDB/MI Result Records}) that is output of
+the command includes a field named @samp{memory} whose content is a
+list of tuples.  Each tuple represent a successfully read memory block
+and has the following fields:
+
+ at table @code
+ at item begin
+The start address of the memory block, as hexadecimal literal.
+
+ at item end
+The end address of the memory block, as hexadecimal literal.
+
+ at item offset
+The offset of the memory block, as hexadecimal literal, relative to
+the start address passed to @code{-data-read-memory-bytes}.
+
+ at item contents
+The contents of the memory block, in hex.
+
+ at end table
+
+
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{x}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-data-read-memory-bytes &a 10
+^done,memory=[@{begin="0xbffff154",offset="0x00000000",
+              end="0xbffff15e",
+              contents="01000000020000000300"@}]
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-data-write-memory-bytes} Command
+ at findex -data-write-memory-bytes
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -data-write-memory-bytes @var{address} @var{contents}
+ at end smallexample
+
+ at noindent
+where:
+
+ at table @samp
+ at item @var{address}
+An expression specifying the address of the first memory word to be
+read.  Complex expressions containing embedded white space should be
+quoted using the C convention.
+
+ at item @var{contents}
+The hex-encoded bytes to write.
+
+ at end table
+
+ at subsubheading @value{GDBN} Command
+
+There's no corresponding @value{GDBN} command.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-data-write-memory-bytes &a "aabbccdd"
+^done
+(gdb)
+ at end smallexample
+
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI Tracepoint Commands
+ at section @sc{gdb/mi} Tracepoint Commands
+
+The commands defined in this section implement MI support for
+tracepoints.  For detailed introduction, see @ref{Tracepoints}.
+
+ at subheading The @code{-trace-find} Command
+ at findex -trace-find
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -trace-find @var{mode} [@var{parameters}@dots{}]
+ at end smallexample
+
+Find a trace frame using criteria defined by @var{mode} and
+ at var{parameters}.  The following table lists permissible
+modes and their parameters.  For details of operation, see @ref{tfind}.
+
+ at table @samp
+
+ at item none
+No parameters are required.  Stops examining trace frames.
+
+ at item frame-number
+An integer is required as parameter.  Selects tracepoint frame with
+that index.
+
+ at item tracepoint-number
+An integer is required as parameter.  Finds next
+trace frame that corresponds to tracepoint with the specified number.
+
+ at item pc
+An address is required as parameter.  Finds
+next trace frame that corresponds to any tracepoint at the specified
+address.
+
+ at item pc-inside-range
+Two addresses are required as parameters.  Finds next trace
+frame that corresponds to a tracepoint at an address inside the
+specified range.  Both bounds are considered to be inside the range.
+
+ at item pc-outside-range
+Two addresses are required as parameters.  Finds
+next trace frame that corresponds to a tracepoint at an address outside
+the specified range.  Both bounds are considered to be inside the range.
+
+ at item line
+Line specification is required as parameter.  @xref{Specify Location}.
+Finds next trace frame that corresponds to a tracepoint at
+the specified location.
+
+ at end table
+
+If @samp{none} was passed as @var{mode}, the response does not
+have fields.  Otherwise, the response may have the following fields:
+
+ at table @samp
+ at item found
+This field has either @samp{0} or @samp{1} as the value, depending
+on whether a matching tracepoint was found.
+
+ at item traceframe
+The index of the found traceframe.  This field is present iff
+the @samp{found} field has value of @samp{1}.
+
+ at item tracepoint
+The index of the found tracepoint.  This field is present iff
+the @samp{found} field has value of @samp{1}.
+
+ at item frame
+The information about the frame corresponding to the found trace
+frame.  This field is present only if a trace frame was found.
+ at xref{GDB/MI Frame Information}, for description of this field.
+
+ at end table
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{tfind}.
+
+ at subheading -trace-define-variable
+ at findex -trace-define-variable
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -trace-define-variable @var{name} [ @var{value} ]
+ at end smallexample
+
+Create trace variable @var{name} if it does not exist.  If
+ at var{value} is specified, sets the initial value of the specified
+trace variable to that value.  Note that the @var{name} should start
+with the @samp{$} character.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{tvariable}.
+
+ at subheading -trace-list-variables
+ at findex -trace-list-variables
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -trace-list-variables
+ at end smallexample
+
+Return a table of all defined trace variables.  Each element of the
+table has the following fields:
+
+ at table @samp
+ at item name
+The name of the trace variable.  This field is always present.
+
+ at item initial
+The initial value.  This is a 64-bit signed integer.  This
+field is always present.
+
+ at item current
+The value the trace variable has at the moment.  This is a 64-bit
+signed integer.  This field is absent iff current value is
+not defined, for example if the trace was never run, or is
+presently running.
+
+ at end table
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{tvariables}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-trace-list-variables
+^done,trace-variables=@{nr_rows="1",nr_cols="3",
+hdr=[@{width="15",alignment="-1",col_name="name",colhdr="Name"@},
+     @{width="11",alignment="-1",col_name="initial",colhdr="Initial"@},
+     @{width="11",alignment="-1",col_name="current",colhdr="Current"@}],
+body=[variable=@{name="$trace_timestamp",initial="0"@}
+      variable=@{name="$foo",initial="10",current="15"@}]@}
+(gdb)
+ at end smallexample
+
+ at subheading -trace-save
+ at findex -trace-save
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -trace-save [-r ] @var{filename}
+ at end smallexample
+
+Saves the collected trace data to @var{filename}.  Without the
+ at samp{-r} option, the data is downloaded from the target and saved
+in a local file.  With the @samp{-r} option the target is asked
+to perform the save.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{tsave}.
+
+
+ at subheading -trace-start
+ at findex -trace-start
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -trace-start
+ at end smallexample
+
+Starts a tracing experiments.  The result of this command does not
+have any fields.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{tstart}.
+
+ at subheading -trace-status
+ at findex -trace-status
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -trace-status
+ at end smallexample
+
+Obtains the status of a tracing experiment.  The result may include
+the following fields:
+
+ at table @samp
+
+ at item supported
+May have a value of either @samp{0}, when no tracing operations are
+supported, @samp{1}, when all tracing operations are supported, or
+ at samp{file} when examining trace file.  In the latter case, examining
+of trace frame is possible but new tracing experiement cannot be
+started.  This field is always present.
+
+ at item running
+May have a value of either @samp{0} or @samp{1} depending on whether
+tracing experiement is in progress on target.  This field is present
+if @samp{supported} field is not @samp{0}.
+
+ at item stop-reason
+Report the reason why the tracing was stopped last time.  This field
+may be absent iff tracing was never stopped on target yet.  The
+value of @samp{request} means the tracing was stopped as result of
+the @code{-trace-stop} command.  The value of @samp{overflow} means
+the tracing buffer is full.  The value of @samp{disconnection} means
+tracing was automatically stopped when @value{GDBN} has disconnected.
+The value of @samp{passcount} means tracing was stopped when a
+tracepoint was passed a maximal number of times for that tracepoint.
+This field is present if @samp{supported} field is not @samp{0}.
+
+ at item stopping-tracepoint
+The number of tracepoint whose passcount as exceeded.  This field is
+present iff the @samp{stop-reason} field has the value of
+ at samp{passcount}.
+
+ at item frames
+ at itemx frames-created
+The @samp{frames} field is a count of the total number of trace frames
+in the trace buffer, while @samp{frames-created} is the total created
+during the run, including ones that were discarded, such as when a
+circular trace buffer filled up.  Both fields are optional.
+
+ at item buffer-size
+ at itemx buffer-free
+These fields tell the current size of the tracing buffer and the
+remaining space.  These fields are optional.
+
+ at item circular
+The value of the circular trace buffer flag.  @code{1} means that the
+trace buffer is circular and old trace frames will be discarded if
+necessary to make room, @code{0} means that the trace buffer is linear
+and may fill up.
+
+ at item disconnected
+The value of the disconnected tracing flag.  @code{1} means that
+tracing will continue after @value{GDBN} disconnects, @code{0} means
+that the trace run will stop.
+
+ at end table
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{tstatus}.
+
+ at subheading -trace-stop
+ at findex -trace-stop
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -trace-stop
+ at end smallexample
+
+Stops a tracing experiment.  The result of this command has the same
+fields as @code{-trace-status}, except that the @samp{supported} and
+ at samp{running} fields are not output.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{tstop}.
+
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI Symbol Query
+ at section @sc{gdb/mi} Symbol Query Commands
+
+
+ at ignore
+ at subheading The @code{-symbol-info-address} Command
+ at findex -symbol-info-address
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -symbol-info-address @var{symbol}
+ at end smallexample
+
+Describe where @var{symbol} is stored.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{info address}.
+
+ at subsubheading Example
+N.A.
+
+
+ at subheading The @code{-symbol-info-file} Command
+ at findex -symbol-info-file
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -symbol-info-file
+ at end smallexample
+
+Show the file for the symbol.
+
+ at subsubheading @value{GDBN} Command
+
+There's no equivalent @value{GDBN} command.  @code{gdbtk} has
+ at samp{gdb_find_file}.
+
+ at subsubheading Example
+N.A.
+
+
+ at subheading The @code{-symbol-info-function} Command
+ at findex -symbol-info-function
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -symbol-info-function
+ at end smallexample
+
+Show which function the symbol lives in.
+
+ at subsubheading @value{GDBN} Command
+
+ at samp{gdb_get_function} in @code{gdbtk}.
+
+ at subsubheading Example
+N.A.
+
+
+ at subheading The @code{-symbol-info-line} Command
+ at findex -symbol-info-line
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -symbol-info-line
+ at end smallexample
+
+Show the core addresses of the code for a source line.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{info line}.
+ at code{gdbtk} has the @samp{gdb_get_line} and @samp{gdb_get_file} commands.
+
+ at subsubheading Example
+N.A.
+
+
+ at subheading The @code{-symbol-info-symbol} Command
+ at findex -symbol-info-symbol
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -symbol-info-symbol @var{addr}
+ at end smallexample
+
+Describe what symbol is at location @var{addr}.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{info symbol}.
+
+ at subsubheading Example
+N.A.
+
+
+ at subheading The @code{-symbol-list-functions} Command
+ at findex -symbol-list-functions
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -symbol-list-functions
+ at end smallexample
+
+List the functions in the executable.
+
+ at subsubheading @value{GDBN} Command
+
+ at samp{info functions} in @value{GDBN}, @samp{gdb_listfunc} and
+ at samp{gdb_search} in @code{gdbtk}.
+
+ at subsubheading Example
+N.A.
+ at end ignore
+
+
+ at subheading The @code{-symbol-list-lines} Command
+ at findex -symbol-list-lines
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -symbol-list-lines @var{filename}
+ at end smallexample
+
+Print the list of lines that contain code and their associated program
+addresses for the given source filename.  The entries are sorted in
+ascending PC order.
+
+ at subsubheading @value{GDBN} Command
+
+There is no corresponding @value{GDBN} command.
+
+ at subsubheading Example
+ at smallexample
+(gdb)
+-symbol-list-lines basics.c
+^done,lines=[@{pc="0x08048554",line="7"@},@{pc="0x0804855a",line="8"@}]
+(gdb)
+ at end smallexample
+
+
+ at ignore
+ at subheading The @code{-symbol-list-types} Command
+ at findex -symbol-list-types
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -symbol-list-types
+ at end smallexample
+
+List all the type names.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding commands are @samp{info types} in @value{GDBN},
+ at samp{gdb_search} in @code{gdbtk}.
+
+ at subsubheading Example
+N.A.
+
+
+ at subheading The @code{-symbol-list-variables} Command
+ at findex -symbol-list-variables
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -symbol-list-variables
+ at end smallexample
+
+List all the global and static variable names.
+
+ at subsubheading @value{GDBN} Command
+
+ at samp{info variables} in @value{GDBN}, @samp{gdb_search} in @code{gdbtk}.
+
+ at subsubheading Example
+N.A.
+
+
+ at subheading The @code{-symbol-locate} Command
+ at findex -symbol-locate
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -symbol-locate
+ at end smallexample
+
+ at subsubheading @value{GDBN} Command
+
+ at samp{gdb_loc} in @code{gdbtk}.
+
+ at subsubheading Example
+N.A.
+
+
+ at subheading The @code{-symbol-type} Command
+ at findex -symbol-type
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -symbol-type @var{variable}
+ at end smallexample
+
+Show type of @var{variable}.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{ptype}, @code{gdbtk} has
+ at samp{gdb_obj_variable}.
+
+ at subsubheading Example
+N.A.
+ at end ignore
+
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI File Commands
+ at section @sc{gdb/mi} File Commands
+
+This section describes the GDB/MI commands to specify executable file names
+and to read in and obtain symbol table information.
+
+ at subheading The @code{-file-exec-and-symbols} Command
+ at findex -file-exec-and-symbols
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -file-exec-and-symbols @var{file}
+ at end smallexample
+
+Specify the executable file to be debugged.  This file is the one from
+which the symbol table is also read.  If no file is specified, the
+command clears the executable and symbol information.  If breakpoints
+are set when using this command with no arguments, @value{GDBN} will produce
+error messages.  Otherwise, no output is produced, except a completion
+notification.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{file}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-file-exec-and-symbols /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
+^done
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-file-exec-file} Command
+ at findex -file-exec-file
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -file-exec-file @var{file}
+ at end smallexample
+
+Specify the executable file to be debugged.  Unlike
+ at samp{-file-exec-and-symbols}, the symbol table is @emph{not} read
+from this file.  If used without argument, @value{GDBN} clears the information
+about the executable file.  No output is produced, except a completion
+notification.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{exec-file}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-file-exec-file /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
+^done
+(gdb)
+ at end smallexample
+
+
+ at ignore
+ at subheading The @code{-file-list-exec-sections} Command
+ at findex -file-list-exec-sections
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -file-list-exec-sections
+ at end smallexample
+
+List the sections of the current executable file.
+
+ at subsubheading @value{GDBN} Command
+
+The @value{GDBN} command @samp{info file} shows, among the rest, the same
+information as this command.  @code{gdbtk} has a corresponding command
+ at samp{gdb_load_info}.
+
+ at subsubheading Example
+N.A.
+ at end ignore
+
+
+ at subheading The @code{-file-list-exec-source-file} Command
+ at findex -file-list-exec-source-file
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -file-list-exec-source-file
+ at end smallexample
+
+List the line number, the current source file, and the absolute path
+to the current source file for the current executable.  The macro
+information field has a value of @samp{1} or @samp{0} depending on
+whether or not the file includes preprocessor macro information.
+
+ at subsubheading @value{GDBN} Command
+
+The @value{GDBN} equivalent is @samp{info source}
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+123-file-list-exec-source-file
+123^done,line="1",file="foo.c",fullname="/home/bar/foo.c,macro-info="1"
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-file-list-exec-source-files} Command
+ at findex -file-list-exec-source-files
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -file-list-exec-source-files
+ at end smallexample
+
+List the source files for the current executable.
+
+It will always output the filename, but only when @value{GDBN} can find
+the absolute file name of a source file, will it output the fullname.
+
+ at subsubheading @value{GDBN} Command
+
+The @value{GDBN} equivalent is @samp{info sources}.
+ at code{gdbtk} has an analogous command @samp{gdb_listfiles}.
+
+ at subsubheading Example
+ at smallexample
+(gdb)
+-file-list-exec-source-files
+^done,files=[
+@{file=foo.c,fullname=/home/foo.c@},
+@{file=/home/bar.c,fullname=/home/bar.c@},
+@{file=gdb_could_not_find_fullpath.c@}]
+(gdb)
+ at end smallexample
+
+ at ignore
+ at subheading The @code{-file-list-shared-libraries} Command
+ at findex -file-list-shared-libraries
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -file-list-shared-libraries
+ at end smallexample
+
+List the shared libraries in the program.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{info shared}.
+
+ at subsubheading Example
+N.A.
+
+
+ at subheading The @code{-file-list-symbol-files} Command
+ at findex -file-list-symbol-files
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -file-list-symbol-files
+ at end smallexample
+
+List symbol files.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{info file} (part of it).
+
+ at subsubheading Example
+N.A.
+ at end ignore
+
+
+ at subheading The @code{-file-symbol-file} Command
+ at findex -file-symbol-file
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -file-symbol-file @var{file}
+ at end smallexample
+
+Read symbol table info from the specified @var{file} argument.  When
+used without arguments, clears @value{GDBN}'s symbol table info.  No output is
+produced, except for a completion notification.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{symbol-file}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-file-symbol-file /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
+^done
+(gdb)
+ at end smallexample
+
+ at ignore
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI Memory Overlay Commands
+ at section @sc{gdb/mi} Memory Overlay Commands
+
+The memory overlay commands are not implemented.
+
+ at c @subheading -overlay-auto
+
+ at c @subheading -overlay-list-mapping-state
+
+ at c @subheading -overlay-list-overlays
+
+ at c @subheading -overlay-map
+
+ at c @subheading -overlay-off
+
+ at c @subheading -overlay-on
+
+ at c @subheading -overlay-unmap
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI Signal Handling Commands
+ at section @sc{gdb/mi} Signal Handling Commands
+
+Signal handling commands are not implemented.
+
+ at c @subheading -signal-handle
+
+ at c @subheading -signal-list-handle-actions
+
+ at c @subheading -signal-list-signal-types
+ at end ignore
+
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI Target Manipulation
+ at section @sc{gdb/mi} Target Manipulation Commands
+
+
+ at subheading The @code{-target-attach} Command
+ at findex -target-attach
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -target-attach @var{pid} | @var{gid} | @var{file}
+ at end smallexample
+
+Attach to a process @var{pid} or a file @var{file} outside of
+ at value{GDBN}, or a thread group @var{gid}.  If attaching to a thread
+group, the id previously returned by 
+ at samp{-list-thread-groups --available} must be used.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{attach}.
+
+ at subsubheading Example
+ at smallexample
+(gdb)
+-target-attach 34
+=thread-created,id="1"
+*stopped,thread-id="1",frame=@{addr="0xb7f7e410",func="bar",args=[]@}
+^done
+(gdb)
+ at end smallexample
+
+ at ignore
+ at subheading The @code{-target-compare-sections} Command
+ at findex -target-compare-sections
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -target-compare-sections [ @var{section} ]
+ at end smallexample
+
+Compare data of section @var{section} on target to the exec file.
+Without the argument, all sections are compared.
+
+ at subsubheading @value{GDBN} Command
+
+The @value{GDBN} equivalent is @samp{compare-sections}.
+
+ at subsubheading Example
+N.A.
+ at end ignore
+
+
+ at subheading The @code{-target-detach} Command
+ at findex -target-detach
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -target-detach [ @var{pid} | @var{gid} ]
+ at end smallexample
+
+Detach from the remote target which normally resumes its execution.
+If either @var{pid} or @var{gid} is specified, detaches from either
+the specified process, or specified thread group.  There's no output.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{detach}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-target-detach
+^done
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-target-disconnect} Command
+ at findex -target-disconnect
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -target-disconnect
+ at end smallexample
+
+Disconnect from the remote target.  There's no output and the target is
+generally not resumed.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{disconnect}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-target-disconnect
+^done
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-target-download} Command
+ at findex -target-download
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -target-download
+ at end smallexample
+
+Loads the executable onto the remote target.
+It prints out an update message every half second, which includes the fields:
+
+ at table @samp
+ at item section
+The name of the section.
+ at item section-sent
+The size of what has been sent so far for that section.
+ at item section-size
+The size of the section.
+ at item total-sent
+The total size of what was sent so far (the current and the previous sections).
+ at item total-size
+The size of the overall executable to download.
+ at end table
+
+ at noindent
+Each message is sent as status record (@pxref{GDB/MI Output Syntax, ,
+ at sc{gdb/mi} Output Syntax}).
+
+In addition, it prints the name and size of the sections, as they are
+downloaded.  These messages include the following fields:
+
+ at table @samp
+ at item section
+The name of the section.
+ at item section-size
+The size of the section.
+ at item total-size
+The size of the overall executable to download.
+ at end table
+
+ at noindent
+At the end, a summary is printed.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{load}.
+
+ at subsubheading Example
+
+Note: each status message appears on a single line.  Here the messages
+have been broken down so that they can fit onto a page.
+
+ at smallexample
+(gdb)
+-target-download
++download,@{section=".text",section-size="6668",total-size="9880"@}
++download,@{section=".text",section-sent="512",section-size="6668",
+total-sent="512",total-size="9880"@}
++download,@{section=".text",section-sent="1024",section-size="6668",
+total-sent="1024",total-size="9880"@}
++download,@{section=".text",section-sent="1536",section-size="6668",
+total-sent="1536",total-size="9880"@}
++download,@{section=".text",section-sent="2048",section-size="6668",
+total-sent="2048",total-size="9880"@}
++download,@{section=".text",section-sent="2560",section-size="6668",
+total-sent="2560",total-size="9880"@}
++download,@{section=".text",section-sent="3072",section-size="6668",
+total-sent="3072",total-size="9880"@}
++download,@{section=".text",section-sent="3584",section-size="6668",
+total-sent="3584",total-size="9880"@}
++download,@{section=".text",section-sent="4096",section-size="6668",
+total-sent="4096",total-size="9880"@}
++download,@{section=".text",section-sent="4608",section-size="6668",
+total-sent="4608",total-size="9880"@}
++download,@{section=".text",section-sent="5120",section-size="6668",
+total-sent="5120",total-size="9880"@}
++download,@{section=".text",section-sent="5632",section-size="6668",
+total-sent="5632",total-size="9880"@}
++download,@{section=".text",section-sent="6144",section-size="6668",
+total-sent="6144",total-size="9880"@}
++download,@{section=".text",section-sent="6656",section-size="6668",
+total-sent="6656",total-size="9880"@}
++download,@{section=".init",section-size="28",total-size="9880"@}
++download,@{section=".fini",section-size="28",total-size="9880"@}
++download,@{section=".data",section-size="3156",total-size="9880"@}
++download,@{section=".data",section-sent="512",section-size="3156",
+total-sent="7236",total-size="9880"@}
++download,@{section=".data",section-sent="1024",section-size="3156",
+total-sent="7748",total-size="9880"@}
++download,@{section=".data",section-sent="1536",section-size="3156",
+total-sent="8260",total-size="9880"@}
++download,@{section=".data",section-sent="2048",section-size="3156",
+total-sent="8772",total-size="9880"@}
++download,@{section=".data",section-sent="2560",section-size="3156",
+total-sent="9284",total-size="9880"@}
++download,@{section=".data",section-sent="3072",section-size="3156",
+total-sent="9796",total-size="9880"@}
+^done,address="0x10004",load-size="9880",transfer-rate="6586",
+write-rate="429"
+(gdb)
+ at end smallexample
+
+
+ at ignore
+ at subheading The @code{-target-exec-status} Command
+ at findex -target-exec-status
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -target-exec-status
+ at end smallexample
+
+Provide information on the state of the target (whether it is running or
+not, for instance).
+
+ at subsubheading @value{GDBN} Command
+
+There's no equivalent @value{GDBN} command.
+
+ at subsubheading Example
+N.A.
+
+
+ at subheading The @code{-target-list-available-targets} Command
+ at findex -target-list-available-targets
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -target-list-available-targets
+ at end smallexample
+
+List the possible targets to connect to.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{help target}.
+
+ at subsubheading Example
+N.A.
+
+
+ at subheading The @code{-target-list-current-targets} Command
+ at findex -target-list-current-targets
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -target-list-current-targets
+ at end smallexample
+
+Describe the current target.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding information is printed by @samp{info file} (among
+other things).
+
+ at subsubheading Example
+N.A.
+
+
+ at subheading The @code{-target-list-parameters} Command
+ at findex -target-list-parameters
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -target-list-parameters
+ at end smallexample
+
+ at c ????
+ at end ignore
+
+ at subsubheading @value{GDBN} Command
+
+No equivalent.
+
+ at subsubheading Example
+N.A.
+
+
+ at subheading The @code{-target-select} Command
+ at findex -target-select
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -target-select @var{type} @var{parameters @dots{}}
+ at end smallexample
+
+Connect @value{GDBN} to the remote target.  This command takes two args:
+
+ at table @samp
+ at item @var{type}
+The type of target, for instance @samp{remote}, etc.
+ at item @var{parameters}
+Device names, host names and the like.  @xref{Target Commands, ,
+Commands for Managing Targets}, for more details.
+ at end table
+
+The output is a connection notification, followed by the address at
+which the target program is, in the following form:
+
+ at smallexample
+^connected,addr="@var{address}",func="@var{function name}",
+  args=[@var{arg list}]
+ at end smallexample
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{target}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-target-select remote /dev/ttya
+^connected,addr="0xfe00a300",func="??",args=[]
+(gdb)
+ at end smallexample
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI File Transfer Commands
+ at section @sc{gdb/mi} File Transfer Commands
+
+
+ at subheading The @code{-target-file-put} Command
+ at findex -target-file-put
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -target-file-put @var{hostfile} @var{targetfile}
+ at end smallexample
+
+Copy file @var{hostfile} from the host system (the machine running
+ at value{GDBN}) to @var{targetfile} on the target system.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{remote put}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-target-file-put localfile remotefile
+^done
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-target-file-get} Command
+ at findex -target-file-get
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -target-file-get @var{targetfile} @var{hostfile}
+ at end smallexample
+
+Copy file @var{targetfile} from the target system to @var{hostfile}
+on the host system.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{remote get}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-target-file-get remotefile localfile
+^done
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-target-file-delete} Command
+ at findex -target-file-delete
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -target-file-delete @var{targetfile}
+ at end smallexample
+
+Delete @var{targetfile} from the target system.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{remote delete}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-target-file-delete remotefile
+^done
+(gdb)
+ at end smallexample
+
+
+ at c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ at node GDB/MI Miscellaneous Commands
+ at section Miscellaneous @sc{gdb/mi} Commands
+
+ at c @subheading -gdb-complete
+
+ at subheading The @code{-gdb-exit} Command
+ at findex -gdb-exit
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -gdb-exit
+ at end smallexample
+
+Exit @value{GDBN} immediately.
+
+ at subsubheading @value{GDBN} Command
+
+Approximately corresponds to @samp{quit}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-gdb-exit
+^exit
+ at end smallexample
+
+
+ at ignore
+ at subheading The @code{-exec-abort} Command
+ at findex -exec-abort
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -exec-abort
+ at end smallexample
+
+Kill the inferior running program.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{kill}.
+
+ at subsubheading Example
+N.A.
+ at end ignore
+
+
+ at subheading The @code{-gdb-set} Command
+ at findex -gdb-set
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -gdb-set
+ at end smallexample
+
+Set an internal @value{GDBN} variable.
+ at c IS THIS A DOLLAR VARIABLE? OR SOMETHING LIKE ANNOTATE ?????
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{set}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-gdb-set $foo=3
+^done
+(gdb)
+ at end smallexample
+
+
+ at subheading The @code{-gdb-show} Command
+ at findex -gdb-show
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -gdb-show
+ at end smallexample
+
+Show the current value of a @value{GDBN} variable.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{show}.
+
+ at subsubheading Example
+
+ at smallexample
+(gdb)
+-gdb-show annotate
+^done,value="0"
+(gdb)
+ at end smallexample
+
+ at c @subheading -gdb-source
+
+
+ at subheading The @code{-gdb-version} Command
+ at findex -gdb-version
+
+ at subsubheading Synopsis
+
+ at smallexample
+ -gdb-version
+ at end smallexample
+
+Show version information for @value{GDBN}.  Used mostly in testing.
+
+ at subsubheading @value{GDBN} Command
+
+The @value{GDBN} equivalent is @samp{show version}.  @value{GDBN} by
+default shows this information when you start an interactive session.
+
+ at subsubheading Example
+
+ at c This example modifies the actual output from GDB to avoid overfull
+ at c box in TeX.
+ at smallexample
+(gdb)
+-gdb-version
+~GNU gdb 5.2.1
+~Copyright 2000 Free Software Foundation, Inc.
+~GDB is free software, covered by the GNU General Public License, and
+~you are welcome to change it and/or distribute copies of it under
+~ certain conditions.
+~Type "show copying" to see the conditions.
+~There is absolutely no warranty for GDB.  Type "show warranty" for
+~ details.
+~This GDB was configured as
+ "--host=sparc-sun-solaris2.5.1 --target=ppc-eabi".
+^done
+(gdb)
+ at end smallexample
+
+ at subheading The @code{-list-features} Command
+ at findex -list-features
+
+Returns a list of particular features of the MI protocol that
+this version of gdb implements.  A feature can be a command,
+or a new field in an output of some command, or even an
+important bugfix.  While a frontend can sometimes detect presence
+of a feature at runtime, it is easier to perform detection at debugger
+startup. 
+
+The command returns a list of strings, with each string naming an
+available feature.  Each returned string is just a name, it does not
+have any internal structure.  The list of possible feature names 
+is given below.
+
+Example output:
+
+ at smallexample
+(gdb) -list-features
+^done,result=["feature1","feature2"]
+ at end smallexample
+
+The current list of features is:
+
+ at table @samp
+ at item frozen-varobjs
+Indicates support for the @code{-var-set-frozen} command, as well
+as possible presense of the @code{frozen} field in the output
+of @code{-varobj-create}.
+ at item pending-breakpoints
+Indicates support for the @option{-f} option to the @code{-break-insert}
+command.
+ at item python
+Indicates Python scripting support, Python-based
+pretty-printing commands, and possible presence of the
+ at samp{display_hint} field in the output of @code{-var-list-children}
+ at item thread-info
+Indicates support for the @code{-thread-info} command.
+ at item data-read-memory-bytes
+Indicates support for the @code{-data-read-memory-bytes} and the
+ at code{-data-write-memory-bytes} commands.
+ at item breakpoint-notifications
+Indicates that changes to breakpoints and breakpoints created via the
+CLI will be announced via async records.
+ at item ada-task-info
+Indicates support for the @code{-ada-task-info} command.
+ at end table
+
+ at subheading The @code{-list-target-features} Command
+ at findex -list-target-features
+
+Returns a list of particular features that are supported by the
+target.  Those features affect the permitted MI commands, but 
+unlike the features reported by the @code{-list-features} command, the
+features depend on which target GDB is using at the moment.  Whenever
+a target can change, due to commands such as @code{-target-select},
+ at code{-target-attach} or @code{-exec-run}, the list of target features
+may change, and the frontend should obtain it again.
+Example output:
+
+ at smallexample
+(gdb) -list-features
+^done,result=["async"]
+ at end smallexample
+
+The current list of features is:
+
+ at table @samp
+ at item async
+Indicates that the target is capable of asynchronous command
+execution, which means that @value{GDBN} will accept further commands
+while the target is running.
+
+ at item reverse
+Indicates that the target is capable of reverse execution.
+ at xref{Reverse Execution}, for more information.
+
+ at end table
+
+ at subheading The @code{-list-thread-groups} Command
+ at findex -list-thread-groups
+
+ at subheading Synopsis
+
+ at smallexample
+-list-thread-groups [ --available ] [ --recurse 1 ] [ @var{group} ... ]
+ at end smallexample
+
+Lists thread groups (@pxref{Thread groups}).  When a single thread
+group is passed as the argument, lists the children of that group.
+When several thread group are passed, lists information about those
+thread groups.  Without any parameters, lists information about all
+top-level thread groups.
+
+Normally, thread groups that are being debugged are reported.
+With the @samp{--available} option, @value{GDBN} reports thread groups
+available on the target.
+
+The output of this command may have either a @samp{threads} result or
+a @samp{groups} result.  The @samp{thread} result has a list of tuples
+as value, with each tuple describing a thread (@pxref{GDB/MI Thread
+Information}).  The @samp{groups} result has a list of tuples as value,
+each tuple describing a thread group.  If top-level groups are
+requested (that is, no parameter is passed), or when several groups
+are passed, the output always has a @samp{groups} result.  The format
+of the @samp{group} result is described below.
+
+To reduce the number of roundtrips it's possible to list thread groups
+together with their children, by passing the @samp{--recurse} option
+and the recursion depth.  Presently, only recursion depth of 1 is
+permitted.  If this option is present, then every reported thread group
+will also include its children, either as @samp{group} or
+ at samp{threads} field.
+
+In general, any combination of option and parameters is permitted, with
+the following caveats:
+
+ at itemize @bullet
+ at item
+When a single thread group is passed, the output will typically
+be the @samp{threads} result.  Because threads may not contain
+anything, the @samp{recurse} option will be ignored.
+
+ at item
+When the @samp{--available} option is passed, limited information may
+be available.  In particular, the list of threads of a process might
+be inaccessible.  Further, specifying specific thread groups might
+not give any performance advantage over listing all thread groups.
+The frontend should assume that @samp{-list-thread-groups --available}
+is always an expensive operation and cache the results.
+
+ at end itemize
+
+The @samp{groups} result is a list of tuples, where each tuple may
+have the following fields:
+
+ at table @code
+ at item id
+Identifier of the thread group.  This field is always present.
+The identifier is an opaque string; frontends should not try to
+convert it to an integer, even though it might look like one.
+
+ at item type
+The type of the thread group.  At present, only @samp{process} is a
+valid type.
+
+ at item pid
+The target-specific process identifier.  This field is only present
+for thread groups of type @samp{process} and only if the process exists.
+
+ at item num_children
+The number of children this thread group has.  This field may be
+absent for an available thread group.
+
+ at item threads
+This field has a list of tuples as value, each tuple describing a
+thread.  It may be present if the @samp{--recurse} option is
+specified, and it's actually possible to obtain the threads.
+
+ at item cores
+This field is a list of integers, each identifying a core that one
+thread of the group is running on.  This field may be absent if
+such information is not available.
+
+ at item executable
+The name of the executable file that corresponds to this thread group.
+The field is only present for thread groups of type @samp{process},
+and only if there is a corresponding executable file.
+
+ at end table
+
+ at subheading Example
+
+ at smallexample
+ at value{GDBP}
+-list-thread-groups
+^done,groups=[@{id="17",type="process",pid="yyy",num_children="2"@}]
+-list-thread-groups 17
+^done,threads=[@{id="2",target-id="Thread 0xb7e14b90 (LWP 21257)",
+   frame=@{level="0",addr="0xffffe410",func="__kernel_vsyscall",args=[]@},state="running"@},
+@{id="1",target-id="Thread 0xb7e156b0 (LWP 21254)",
+   frame=@{level="0",addr="0x0804891f",func="foo",args=[@{name="i",value="10"@}],
+           file="/tmp/a.c",fullname="/tmp/a.c",line="158"@},state="running"@}]]
+-list-thread-groups --available
+^done,groups=[@{id="17",type="process",pid="yyy",num_children="2",cores=[1,2]@}]
+-list-thread-groups --available --recurse 1
+ ^done,groups=[@{id="17", types="process",pid="yyy",num_children="2",cores=[1,2],
+                threads=[@{id="1",target-id="Thread 0xb7e14b90",cores=[1]@},
+                         @{id="2",target-id="Thread 0xb7e14b90",cores=[2]@}]@},..]
+-list-thread-groups --available --recurse 1 17 18
+^done,groups=[@{id="17", types="process",pid="yyy",num_children="2",cores=[1,2],
+               threads=[@{id="1",target-id="Thread 0xb7e14b90",cores=[1]@},
+                        @{id="2",target-id="Thread 0xb7e14b90",cores=[2]@}]@},...]
+ at end smallexample
+
+ at subheading The @code{-info-os} Command
+ at findex -info-os
+
+ at subsubheading Synopsis
+
+ at smallexample
+-info-os [ @var{type} ]
+ at end smallexample
+
+If no argument is supplied, the command returns a table of available
+operating-system-specific information types.  If one of these types is
+supplied as an argument @var{type}, then the command returns a table
+of data of that type.
+
+The types of information available depend on the target operating
+system.
+
+ at subsubheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{info os}.
+
+ at subsubheading Example
+
+When run on a @sc{gnu}/Linux system, the output will look something
+like this:
+
+ at smallexample
+ at value{GDBP}
+-info-os
+^done,OSDataTable=@{nr_rows="9",nr_cols="3",
+hdr=[@{width="10",alignment="-1",col_name="col0",colhdr="Type"@},
+     @{width="10",alignment="-1",col_name="col1",colhdr="Description"@},
+     @{width="10",alignment="-1",col_name="col2",colhdr="Title"@}],
+body=[item=@{col0="processes",col1="Listing of all processes",
+            col2="Processes"@},
+      item=@{col0="procgroups",col1="Listing of all process groups",
+            col2="Process groups"@},
+      item=@{col0="threads",col1="Listing of all threads",
+            col2="Threads"@},
+      item=@{col0="files",col1="Listing of all file descriptors",
+            col2="File descriptors"@},
+      item=@{col0="sockets",col1="Listing of all internet-domain sockets",
+            col2="Sockets"@},
+      item=@{col0="shm",col1="Listing of all shared-memory regions",
+            col2="Shared-memory regions"@},
+      item=@{col0="semaphores",col1="Listing of all semaphores",
+            col2="Semaphores"@},
+      item=@{col0="msg",col1="Listing of all message queues",
+            col2="Message queues"@},
+      item=@{col0="modules",col1="Listing of all loaded kernel modules",
+            col2="Kernel modules"@}]@}
+ at value{GDBP}
+-info-os processes
+^done,OSDataTable=@{nr_rows="190",nr_cols="4",
+hdr=[@{width="10",alignment="-1",col_name="col0",colhdr="pid"@},
+     @{width="10",alignment="-1",col_name="col1",colhdr="user"@},
+     @{width="10",alignment="-1",col_name="col2",colhdr="command"@},
+     @{width="10",alignment="-1",col_name="col3",colhdr="cores"@}],
+body=[item=@{col0="1",col1="root",col2="/sbin/init",col3="0"@},
+      item=@{col0="2",col1="root",col2="[kthreadd]",col3="1"@},
+      item=@{col0="3",col1="root",col2="[ksoftirqd/0]",col3="0"@},
+      ...
+      item=@{col0="26446",col1="stan",col2="bash",col3="0"@},
+      item=@{col0="28152",col1="stan",col2="bash",col3="1"@}]@}
+(gdb)
+ at end smallexample
+
+(Note that the MI output here includes a @code{"Title"} column that
+does not appear in command-line @code{info os}; this column is useful
+for MI clients that want to enumerate the types of data, such as in a
+popup menu, but is needless clutter on the command line, and
+ at code{info os} omits it.)
+
+ at subheading The @code{-add-inferior} Command
+ at findex -add-inferior
+
+ at subheading Synopsis
+
+ at smallexample
+-add-inferior
+ at end smallexample
+
+Creates a new inferior (@pxref{Inferiors and Programs}).  The created
+inferior is not associated with any executable.  Such association may
+be established with the @samp{-file-exec-and-symbols} command
+(@pxref{GDB/MI File Commands}).  The command response has a single
+field, @samp{thread-group}, whose value is the identifier of the
+thread group corresponding to the new inferior.
+
+ at subheading Example
+
+ at smallexample
+ at value{GDBP}
+-add-inferior
+^done,thread-group="i3"
+ at end smallexample
+
+ at subheading The @code{-interpreter-exec} Command
+ at findex -interpreter-exec
+
+ at subheading Synopsis
+
+ at smallexample
+-interpreter-exec @var{interpreter} @var{command}
+ at end smallexample
+ at anchor{-interpreter-exec} 
+
+Execute the specified @var{command} in the given @var{interpreter}.
+
+ at subheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{interpreter-exec}.
+
+ at subheading Example
+
+ at smallexample
+(gdb)
+-interpreter-exec console "break main"
+&"During symbol reading, couldn't parse type; debugger out of date?.\n"
+&"During symbol reading, bad structure-type format.\n"
+~"Breakpoint 1 at 0x8074fc6: file ../../src/gdb/main.c, line 743.\n"
+^done
+(gdb)
+ at end smallexample
+
+ at subheading The @code{-inferior-tty-set} Command
+ at findex -inferior-tty-set
+
+ at subheading Synopsis
+
+ at smallexample
+-inferior-tty-set /dev/pts/1
+ at end smallexample
+
+Set terminal for future runs of the program being debugged.
+
+ at subheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{set inferior-tty} /dev/pts/1.
+
+ at subheading Example
+
+ at smallexample
+(gdb)
+-inferior-tty-set /dev/pts/1
+^done
+(gdb)
+ at end smallexample
+
+ at subheading The @code{-inferior-tty-show} Command
+ at findex -inferior-tty-show
+
+ at subheading Synopsis
+
+ at smallexample
+-inferior-tty-show
+ at end smallexample
+
+Show terminal for future runs of program being debugged.
+
+ at subheading @value{GDBN} Command
+
+The corresponding @value{GDBN} command is @samp{show inferior-tty}.
+
+ at subheading Example
+
+ at smallexample
+(gdb)
+-inferior-tty-set /dev/pts/1
+^done
+(gdb)
+-inferior-tty-show
+^done,inferior_tty_terminal="/dev/pts/1"
+(gdb)
+ at end smallexample
+
+ at subheading The @code{-enable-timings} Command
+ at findex -enable-timings
+
+ at subheading Synopsis
+
+ at smallexample
+-enable-timings [yes | no]
+ at end smallexample
+
+Toggle the printing of the wallclock, user and system times for an MI
+command as a field in its output.  This command is to help frontend
+developers optimize the performance of their code.  No argument is
+equivalent to @samp{yes}.
+
+ at subheading @value{GDBN} Command
+
+No equivalent.
+
+ at subheading Example
+
+ at smallexample
+(gdb)
+-enable-timings
+^done
+(gdb)
+-break-insert main
+^done,bkpt=@{number="1",type="breakpoint",disp="keep",enabled="y",
+addr="0x080484ed",func="main",file="myprog.c",
+fullname="/home/nickrob/myprog.c",line="73",times="0"@},
+time=@{wallclock="0.05185",user="0.00800",system="0.00000"@}
+(gdb)
+-enable-timings no
+^done
+(gdb)
+-exec-run
+^running
+(gdb)
+*stopped,reason="breakpoint-hit",disp="keep",bkptno="1",thread-id="0",
+frame=@{addr="0x080484ed",func="main",args=[@{name="argc",value="1"@},
+@{name="argv",value="0xbfb60364"@}],file="myprog.c",
+fullname="/home/nickrob/myprog.c",line="73"@}
+(gdb)
+ at end smallexample
+
+ at node Annotations
+ at chapter @value{GDBN} Annotations
+
+This chapter describes annotations in @value{GDBN}.  Annotations were
+designed to interface @value{GDBN} to graphical user interfaces or other
+similar programs which want to interact with @value{GDBN} at a
+relatively high level.
+
+The annotation mechanism has largely been superseded by @sc{gdb/mi}
+(@pxref{GDB/MI}).
+
+ at ignore
+This is Edition @value{EDITION}, @value{DATE}.
+ at end ignore
+
+ at menu
+* Annotations Overview::  What annotations are; the general syntax.
+* Server Prefix::       Issuing a command without affecting user state.
+* Prompting::           Annotations marking @value{GDBN}'s need for input.
+* Errors::              Annotations for error messages.
+* Invalidation::        Some annotations describe things now invalid.
+* Annotations for Running::
+                        Whether the program is running, how it stopped, etc.
+* Source Annotations::  Annotations describing source code.
+ at end menu
+
+ at node Annotations Overview
+ at section What is an Annotation?
+ at cindex annotations
+
+Annotations start with a newline character, two @samp{control-z}
+characters, and the name of the annotation.  If there is no additional
+information associated with this annotation, the name of the annotation
+is followed immediately by a newline.  If there is additional
+information, the name of the annotation is followed by a space, the
+additional information, and a newline.  The additional information
+cannot contain newline characters.
+
+Any output not beginning with a newline and two @samp{control-z}
+characters denotes literal output from @value{GDBN}.  Currently there is
+no need for @value{GDBN} to output a newline followed by two
+ at samp{control-z} characters, but if there was such a need, the
+annotations could be extended with an @samp{escape} annotation which
+means those three characters as output.
+
+The annotation @var{level}, which is specified using the
+ at option{--annotate} command line option (@pxref{Mode Options}), controls
+how much information @value{GDBN} prints together with its prompt,
+values of expressions, source lines, and other types of output.  Level 0
+is for no annotations, level 1 is for use when @value{GDBN} is run as a
+subprocess of @sc{gnu} Emacs, level 3 is the maximum annotation suitable
+for programs that control @value{GDBN}, and level 2 annotations have
+been made obsolete (@pxref{Limitations, , Limitations of the Annotation
+Interface, annotate, GDB's Obsolete Annotations}).
+
+ at table @code
+ at kindex set annotate
+ at item set annotate @var{level}
+The @value{GDBN} command @code{set annotate} sets the level of
+annotations to the specified @var{level}.
+
+ at item show annotate
+ at kindex show annotate
+Show the current annotation level.
+ at end table
+
+This chapter describes level 3 annotations.
+
+A simple example of starting up @value{GDBN} with annotations is:
+
+ at smallexample
+$ @kbd{gdb --annotate=3}
+GNU gdb 6.0
+Copyright 2003 Free Software Foundation, Inc.
+GDB is free software, covered by the GNU General Public License,
+and you are welcome to change it and/or distribute copies of it
+under certain conditions.
+Type "show copying" to see the conditions.
+There is absolutely no warranty for GDB.  Type "show warranty"
+for details.
+This GDB was configured as "i386-pc-linux-gnu"
+
+^Z^Zpre-prompt
+(@value{GDBP})
+^Z^Zprompt
+ at kbd{quit}
+
+^Z^Zpost-prompt
+$
+ at end smallexample
+
+Here @samp{quit} is input to @value{GDBN}; the rest is output from
+ at value{GDBN}.  The three lines beginning @samp{^Z^Z} (where @samp{^Z}
+denotes a @samp{control-z} character) are annotations; the rest is
+output from @value{GDBN}.
+
+ at node Server Prefix
+ at section The Server Prefix
+ at cindex server prefix
+
+If you prefix a command with @samp{server } then it will not affect
+the command history, nor will it affect @value{GDBN}'s notion of which
+command to repeat if @key{RET} is pressed on a line by itself.  This
+means that commands can be run behind a user's back by a front-end in
+a transparent manner.
+
+The @code{server } prefix does not affect the recording of values into
+the value history; to print a value without recording it into the
+value history, use the @code{output} command instead of the
+ at code{print} command.
+
+Using this prefix also disables confirmation requests
+(@pxref{confirmation requests}).
+
+ at node Prompting
+ at section Annotation for @value{GDBN} Input
+
+ at cindex annotations for prompts
+When @value{GDBN} prompts for input, it annotates this fact so it is possible
+to know when to send output, when the output from a given command is
+over, etc.
+
+Different kinds of input each have a different @dfn{input type}.  Each
+input type has three annotations: a @code{pre-} annotation, which
+denotes the beginning of any prompt which is being output, a plain
+annotation, which denotes the end of the prompt, and then a @code{post-}
+annotation which denotes the end of any echo which may (or may not) be
+associated with the input.  For example, the @code{prompt} input type
+features the following annotations:
+
+ at smallexample
+^Z^Zpre-prompt
+^Z^Zprompt
+^Z^Zpost-prompt
+ at end smallexample
+
+The input types are
+
+ at table @code
+ at findex pre-prompt annotation
+ at findex prompt annotation
+ at findex post-prompt annotation
+ at item prompt
+When @value{GDBN} is prompting for a command (the main @value{GDBN} prompt).
+
+ at findex pre-commands annotation
+ at findex commands annotation
+ at findex post-commands annotation
+ at item commands
+When @value{GDBN} prompts for a set of commands, like in the @code{commands}
+command.  The annotations are repeated for each command which is input.
+
+ at findex pre-overload-choice annotation
+ at findex overload-choice annotation
+ at findex post-overload-choice annotation
+ at item overload-choice
+When @value{GDBN} wants the user to select between various overloaded functions.
+
+ at findex pre-query annotation
+ at findex query annotation
+ at findex post-query annotation
+ at item query
+When @value{GDBN} wants the user to confirm a potentially dangerous operation.
+
+ at findex pre-prompt-for-continue annotation
+ at findex prompt-for-continue annotation
+ at findex post-prompt-for-continue annotation
+ at item prompt-for-continue
+When @value{GDBN} is asking the user to press return to continue.  Note: Don't
+expect this to work well; instead use @code{set height 0} to disable
+prompting.  This is because the counting of lines is buggy in the
+presence of annotations.
+ at end table
+
+ at node Errors
+ at section Errors
+ at cindex annotations for errors, warnings and interrupts
+
+ at findex quit annotation
+ at smallexample
+^Z^Zquit
+ at end smallexample
+
+This annotation occurs right before @value{GDBN} responds to an interrupt.
+
+ at findex error annotation
+ at smallexample
+^Z^Zerror
+ at end smallexample
+
+This annotation occurs right before @value{GDBN} responds to an error.
+
+Quit and error annotations indicate that any annotations which @value{GDBN} was
+in the middle of may end abruptly.  For example, if a
+ at code{value-history-begin} annotation is followed by a @code{error}, one
+cannot expect to receive the matching @code{value-history-end}.  One
+cannot expect not to receive it either, however; an error annotation
+does not necessarily mean that @value{GDBN} is immediately returning all the way
+to the top level.
+
+ at findex error-begin annotation
+A quit or error annotation may be preceded by
+
+ at smallexample
+^Z^Zerror-begin
+ at end smallexample
+
+Any output between that and the quit or error annotation is the error
+message.
+
+Warning messages are not yet annotated.
+ at c If we want to change that, need to fix warning(), type_error(),
+ at c range_error(), and possibly other places.
+
+ at node Invalidation
+ at section Invalidation Notices
+
+ at cindex annotations for invalidation messages
+The following annotations say that certain pieces of state may have
+changed.
+
+ at table @code
+ at findex frames-invalid annotation
+ at item ^Z^Zframes-invalid
+
+The frames (for example, output from the @code{backtrace} command) may
+have changed.
+
+ at findex breakpoints-invalid annotation
+ at item ^Z^Zbreakpoints-invalid
+
+The breakpoints may have changed.  For example, the user just added or
+deleted a breakpoint.
+ at end table
+
+ at node Annotations for Running
+ at section Running the Program
+ at cindex annotations for running programs
+
+ at findex starting annotation
+ at findex stopping annotation
+When the program starts executing due to a @value{GDBN} command such as
+ at code{step} or @code{continue},
+
+ at smallexample
+^Z^Zstarting
+ at end smallexample
+
+is output.  When the program stops,
+
+ at smallexample
+^Z^Zstopped
+ at end smallexample
+
+is output.  Before the @code{stopped} annotation, a variety of
+annotations describe how the program stopped.
+
+ at table @code
+ at findex exited annotation
+ at item ^Z^Zexited @var{exit-status}
+The program exited, and @var{exit-status} is the exit status (zero for
+successful exit, otherwise nonzero).
+
+ at findex signalled annotation
+ at findex signal-name annotation
+ at findex signal-name-end annotation
+ at findex signal-string annotation
+ at findex signal-string-end annotation
+ at item ^Z^Zsignalled
+The program exited with a signal.  After the @code{^Z^Zsignalled}, the
+annotation continues:
+
+ at smallexample
+ at var{intro-text}
+^Z^Zsignal-name
+ at var{name}
+^Z^Zsignal-name-end
+ at var{middle-text}
+^Z^Zsignal-string
+ at var{string}
+^Z^Zsignal-string-end
+ at var{end-text}
+ at end smallexample
+
+ at noindent
+where @var{name} is the name of the signal, such as @code{SIGILL} or
+ at code{SIGSEGV}, and @var{string} is the explanation of the signal, such
+as @code{Illegal Instruction} or @code{Segmentation fault}.
+ at var{intro-text}, @var{middle-text}, and @var{end-text} are for the
+user's benefit and have no particular format.
+
+ at findex signal annotation
+ at item ^Z^Zsignal
+The syntax of this annotation is just like @code{signalled}, but @value{GDBN} is
+just saying that the program received the signal, not that it was
+terminated with it.
+
+ at findex breakpoint annotation
+ at item ^Z^Zbreakpoint @var{number}
+The program hit breakpoint number @var{number}.
+
+ at findex watchpoint annotation
+ at item ^Z^Zwatchpoint @var{number}
+The program hit watchpoint number @var{number}.
+ at end table
+
+ at node Source Annotations
+ at section Displaying Source
+ at cindex annotations for source display
+
+ at findex source annotation
+The following annotation is used instead of displaying source code:
+
+ at smallexample
+^Z^Zsource @var{filename}:@var{line}:@var{character}:@var{middle}:@var{addr}
+ at end smallexample
+
+where @var{filename} is an absolute file name indicating which source
+file, @var{line} is the line number within that file (where 1 is the
+first line in the file), @var{character} is the character position
+within the file (where 0 is the first character in the file) (for most
+debug formats this will necessarily point to the beginning of a line),
+ at var{middle} is @samp{middle} if @var{addr} is in the middle of the
+line, or @samp{beg} if @var{addr} is at the beginning of the line, and
+ at var{addr} is the address in the target program associated with the
+source which is being displayed.  @var{addr} is in the form @samp{0x}
+followed by one or more lowercase hex digits (note that this does not
+depend on the language).
+
+ at node JIT Interface
+ at chapter JIT Compilation Interface
+ at cindex just-in-time compilation
+ at cindex JIT compilation interface
+
+This chapter documents @value{GDBN}'s @dfn{just-in-time} (JIT) compilation
+interface.  A JIT compiler is a program or library that generates native
+executable code at runtime and executes it, usually in order to achieve good
+performance while maintaining platform independence. 
+
+Programs that use JIT compilation are normally difficult to debug because
+portions of their code are generated at runtime, instead of being loaded from
+object files, which is where @value{GDBN} normally finds the program's symbols
+and debug information.  In order to debug programs that use JIT compilation,
+ at value{GDBN} has an interface that allows the program to register in-memory
+symbol files with @value{GDBN} at runtime.
+
+If you are using @value{GDBN} to debug a program that uses this interface, then
+it should work transparently so long as you have not stripped the binary.  If
+you are developing a JIT compiler, then the interface is documented in the rest
+of this chapter.  At this time, the only known client of this interface is the
+LLVM JIT.
+
+Broadly speaking, the JIT interface mirrors the dynamic loader interface.  The
+JIT compiler communicates with @value{GDBN} by writing data into a global
+variable and calling a fuction at a well-known symbol.  When @value{GDBN}
+attaches, it reads a linked list of symbol files from the global variable to
+find existing code, and puts a breakpoint in the function so that it can find
+out about additional code.
+
+ at menu
+* Declarations::                Relevant C struct declarations
+* Registering Code::            Steps to register code
+* Unregistering Code::          Steps to unregister code
+* Custom Debug Info::           Emit debug information in a custom format
+ at end menu
+
+ at node Declarations
+ at section JIT Declarations
+
+These are the relevant struct declarations that a C program should include to
+implement the interface:
+
+ at smallexample
+typedef enum
+@{
+  JIT_NOACTION = 0,
+  JIT_REGISTER_FN,
+  JIT_UNREGISTER_FN
+@} jit_actions_t;
+
+struct jit_code_entry
+@{
+  struct jit_code_entry *next_entry;
+  struct jit_code_entry *prev_entry;
+  const char *symfile_addr;
+  uint64_t symfile_size;
+@};
+
+struct jit_descriptor
+@{
+  uint32_t version;
+  /* This type should be jit_actions_t, but we use uint32_t
+     to be explicit about the bitwidth.  */
+  uint32_t action_flag;
+  struct jit_code_entry *relevant_entry;
+  struct jit_code_entry *first_entry;
+@};
+
+/* GDB puts a breakpoint in this function.  */
+void __attribute__((noinline)) __jit_debug_register_code() @{ @};
+
+/* Make sure to specify the version statically, because the
+   debugger may check the version before we can set it.  */
+struct jit_descriptor __jit_debug_descriptor = @{ 1, 0, 0, 0 @};
+ at end smallexample
+
+If the JIT is multi-threaded, then it is important that the JIT synchronize any
+modifications to this global data properly, which can easily be done by putting
+a global mutex around modifications to these structures.
+
+ at node Registering Code
+ at section Registering Code
+
+To register code with @value{GDBN}, the JIT should follow this protocol:
+
+ at itemize @bullet
+ at item
+Generate an object file in memory with symbols and other desired debug
+information.  The file must include the virtual addresses of the sections.
+
+ at item
+Create a code entry for the file, which gives the start and size of the symbol
+file.
+
+ at item
+Add it to the linked list in the JIT descriptor.
+
+ at item
+Point the relevant_entry field of the descriptor at the entry.
+
+ at item
+Set @code{action_flag} to @code{JIT_REGISTER} and call
+ at code{__jit_debug_register_code}.
+ at end itemize
+
+When @value{GDBN} is attached and the breakpoint fires, @value{GDBN} uses the
+ at code{relevant_entry} pointer so it doesn't have to walk the list looking for
+new code.  However, the linked list must still be maintained in order to allow
+ at value{GDBN} to attach to a running process and still find the symbol files.
+
+ at node Unregistering Code
+ at section Unregistering Code
+
+If code is freed, then the JIT should use the following protocol:
+
+ at itemize @bullet
+ at item
+Remove the code entry corresponding to the code from the linked list.
+
+ at item
+Point the @code{relevant_entry} field of the descriptor at the code entry.
+
+ at item
+Set @code{action_flag} to @code{JIT_UNREGISTER} and call
+ at code{__jit_debug_register_code}.
+ at end itemize
+
+If the JIT frees or recompiles code without unregistering it, then @value{GDBN}
+and the JIT will leak the memory used for the associated symbol files.
+
+ at node Custom Debug Info
+ at section Custom Debug Info
+ at cindex custom JIT debug info
+ at cindex JIT debug info reader
+
+Generating debug information in platform-native file formats (like ELF
+or COFF) may be an overkill for JIT compilers; especially if all the
+debug info is used for is displaying a meaningful backtrace.  The
+issue can be resolved by having the JIT writers decide on a debug info
+format and also provide a reader that parses the debug info generated
+by the JIT compiler.  This section gives a brief overview on writing
+such a parser.  More specific details can be found in the source file
+ at file{gdb/jit-reader.in}, which is also installed as a header at
+ at file{@var{includedir}/gdb/jit-reader.h} for easy inclusion.
+
+The reader is implemented as a shared object (so this functionality is
+not available on platforms which don't allow loading shared objects at
+runtime).  Two @value{GDBN} commands, @code{jit-reader-load} and
+ at code{jit-reader-unload} are provided, to be used to load and unload
+the readers from a preconfigured directory.  Once loaded, the shared
+object is used the parse the debug information emitted by the JIT
+compiler.
+
+ at menu
+* Using JIT Debug Info Readers::       How to use supplied readers correctly
+* Writing JIT Debug Info Readers::     Creating a debug-info reader
+ at end menu
+
+ at node Using JIT Debug Info Readers
+ at subsection Using JIT Debug Info Readers
+ at kindex jit-reader-load
+ at kindex jit-reader-unload
+
+Readers can be loaded and unloaded using the @code{jit-reader-load}
+and @code{jit-reader-unload} commands.
+
+ at table @code
+ at item jit-reader-load @var{reader-name}
+Load the JIT reader named @var{reader-name}.  On a UNIX system, this
+will usually load @file{@var{libdir}/gdb/@var{reader-name}}, where
+ at var{libdir} is the system library directory, usually
+ at file{/usr/local/lib}.  Only one reader can be active at a time;
+trying to load a second reader when one is already loaded will result
+in @value{GDBN} reporting an error.  A new JIT reader can be loaded by
+first unloading the current one using @code{jit-reader-load} and then
+invoking @code{jit-reader-load}.
+
+ at item jit-reader-unload
+Unload the currently loaded JIT reader.
+
+ at end table
+
+ at node Writing JIT Debug Info Readers
+ at subsection Writing JIT Debug Info Readers
+ at cindex writing JIT debug info readers
+
+As mentioned, a reader is essentially a shared object conforming to a
+certain ABI.  This ABI is described in @file{jit-reader.h}.
+
+ at file{jit-reader.h} defines the structures, macros and functions
+required to write a reader.  It is installed (along with
+ at value{GDBN}), in @file{@var{includedir}/gdb} where @var{includedir} is
+the system include directory.
+
+Readers need to be released under a GPL compatible license.  A reader
+can be declared as released under such a license by placing the macro
+ at code{GDB_DECLARE_GPL_COMPATIBLE_READER} in a source file.
+
+The entry point for readers is the symbol @code{gdb_init_reader},
+which is expected to be a function with the prototype
+
+ at findex gdb_init_reader
+ at smallexample
+extern struct gdb_reader_funcs *gdb_init_reader (void);
+ at end smallexample
+
+ at cindex @code{struct gdb_reader_funcs}
+
+ at code{struct gdb_reader_funcs} contains a set of pointers to callback
+functions.  These functions are executed to read the debug info
+generated by the JIT compiler (@code{read}), to unwind stack frames
+(@code{unwind}) and to create canonical frame IDs
+(@code{get_Frame_id}).  It also has a callback that is called when the
+reader is being unloaded (@code{destroy}).  The struct looks like this
+
+ at smallexample
+struct gdb_reader_funcs
+@{
+  /* Must be set to GDB_READER_INTERFACE_VERSION.  */
+  int reader_version;
+
+  /* For use by the reader.  */
+  void *priv_data;
+
+  gdb_read_debug_info *read;
+  gdb_unwind_frame *unwind;
+  gdb_get_frame_id *get_frame_id;
+  gdb_destroy_reader *destroy;
+@};
+ at end smallexample
+
+ at cindex @code{struct gdb_symbol_callbacks}
+ at cindex @code{struct gdb_unwind_callbacks}
+
+The callbacks are provided with another set of callbacks by
+ at value{GDBN} to do their job.  For @code{read}, these callbacks are
+passed in a @code{struct gdb_symbol_callbacks} and for @code{unwind}
+and @code{get_frame_id}, in a @code{struct gdb_unwind_callbacks}.
+ at code{struct gdb_symbol_callbacks} has callbacks to create new object
+files and new symbol tables inside those object files.  @code{struct
+gdb_unwind_callbacks} has callbacks to read registers off the current
+frame and to write out the values of the registers in the previous
+frame.  Both have a callback (@code{target_read}) to read bytes off the
+target's address space.
+
+ at node In-Process Agent
+ at chapter In-Process Agent
+ at cindex debugging agent
+The traditional debugging model is conceptually low-speed, but works fine,
+because most bugs can be reproduced in debugging-mode execution.  However,
+as multi-core or many-core processors are becoming mainstream, and
+multi-threaded programs become more and more popular, there should be more
+and more bugs that only manifest themselves at normal-mode execution, for
+example, thread races, because debugger's interference with the program's
+timing may conceal the bugs.  On the other hand, in some applications,
+it is not feasible for the debugger to interrupt the program's execution
+long enough for the developer to learn anything helpful about its behavior.
+If the program's correctness depends on its real-time behavior, delays
+introduced by a debugger might cause the program to fail, even when the
+code itself is correct.  It is useful to be able to observe the program's
+behavior without interrupting it.
+
+Therefore, traditional debugging model is too intrusive to reproduce
+some bugs.  In order to reduce the interference with the program, we can
+reduce the number of operations performed by debugger.  The
+ at dfn{In-Process Agent}, a shared library, is running within the same
+process with inferior, and is able to perform some debugging operations
+itself.  As a result, debugger is only involved when necessary, and
+performance of debugging can be improved accordingly.  Note that
+interference with program can be reduced but can't be removed completely,
+because the in-process agent will still stop or slow down the program.
+
+The in-process agent can interpret and execute Agent Expressions
+(@pxref{Agent Expressions}) during performing debugging operations.  The
+agent expressions can be used for different purposes, such as collecting
+data in tracepoints, and condition evaluation in breakpoints.
+
+ at anchor{Control Agent}
+You can control whether the in-process agent is used as an aid for
+debugging with the following commands:
+
+ at table @code
+ at kindex set agent on
+ at item set agent on
+Causes the in-process agent to perform some operations on behalf of the
+debugger.  Just which operations requested by the user will be done
+by the in-process agent depends on the its capabilities.  For example,
+if you request to evaluate breakpoint conditions in the in-process agent,
+and the in-process agent has such capability as well, then breakpoint
+conditions will be evaluated in the in-process agent.
+
+ at kindex set agent off
+ at item set agent off
+Disables execution of debugging operations by the in-process agent.  All
+of the operations will be performed by @value{GDBN}.
+
+ at kindex show agent
+ at item show agent
+Display the current setting of execution of debugging operations by
+the in-process agent.
+ at end table
+
+ at menu
+* In-Process Agent Protocol::
+ at end menu
+
+ at node In-Process Agent Protocol
+ at section In-Process Agent Protocol
+ at cindex in-process agent protocol
+
+The in-process agent is able to communicate with both @value{GDBN} and
+GDBserver (@pxref{In-Process Agent}).  This section documents the protocol
+used for communications between @value{GDBN} or GDBserver and the IPA.
+In general, @value{GDBN} or GDBserver sends commands
+(@pxref{IPA Protocol Commands}) and data to in-process agent, and then
+in-process agent replies back with the return result of the command, or
+some other information.  The data sent to in-process agent is composed
+of primitive data types, such as 4-byte or 8-byte type, and composite
+types, which are called objects (@pxref{IPA Protocol Objects}).
+
+ at menu
+* IPA Protocol Objects::
+* IPA Protocol Commands::
+ at end menu
+
+ at node IPA Protocol Objects
+ at subsection IPA Protocol Objects
+ at cindex ipa protocol objects
+
+The commands sent to and results received from agent may contain some
+complex data types called @dfn{objects}.
+
+The in-process agent is running on the same machine with @value{GDBN}
+or GDBserver, so it doesn't have to handle as much differences between
+two ends as remote protocol (@pxref{Remote Protocol}) tries to handle.
+However, there are still some differences of two ends in two processes:
+
+ at enumerate
+ at item
+word size.  On some 64-bit machines, @value{GDBN} or GDBserver can be
+compiled as a 64-bit executable, while in-process agent is a 32-bit one.
+ at item
+ABI.  Some machines may have multiple types of ABI, @value{GDBN} or
+GDBserver is compiled with one, and in-process agent is compiled with
+the other one.
+ at end enumerate
+
+Here are the IPA Protocol Objects:
+
+ at enumerate
+ at item
+agent expression object.  It represents an agent expression
+(@pxref{Agent Expressions}).
+ at anchor{agent expression object}
+ at item
+tracepoint action object.  It represents a tracepoint action
+(@pxref{Tracepoint Actions,,Tracepoint Action Lists}) to collect registers,
+memory, static trace data and to evaluate expression.
+ at anchor{tracepoint action object}
+ at item
+tracepoint object.  It represents a tracepoint (@pxref{Tracepoints}).
+ at anchor{tracepoint object}
+
+ at end enumerate
+
+The following table describes important attributes of each IPA protocol
+object:
+
+ at multitable @columnfractions .30 .20 .50
+ at headitem Name @tab Size @tab Description
+ at item @emph{agent expression object} @tab @tab
+ at item length @tab 4 @tab length of bytes code
+ at item byte code @tab @var{length} @tab contents of byte code
+ at item @emph{tracepoint action for collecting memory} @tab @tab
+ at item 'M' @tab 1 @tab type of tracepoint action
+ at item addr @tab 8 @tab if @var{basereg} is @samp{-1}, @var{addr} is the
+address of the lowest byte to collect, otherwise @var{addr} is the offset
+of @var{basereg} for memory collecting.
+ at item len @tab 8 @tab length of memory for collecting
+ at item basereg @tab 4 @tab the register number containing the starting
+memory address for collecting.
+ at item @emph{tracepoint action for collecting registers} @tab @tab
+ at item 'R' @tab 1 @tab type of tracepoint action
+ at item @emph{tracepoint action for collecting static trace data} @tab @tab
+ at item 'L' @tab 1 @tab type of tracepoint action
+ at item @emph{tracepoint action for expression evaluation} @tab @tab
+ at item 'X' @tab 1 @tab type of tracepoint action
+ at item agent expression @tab length of @tab @ref{agent expression object}
+ at item @emph{tracepoint object} @tab @tab
+ at item number @tab 4 @tab number of tracepoint
+ at item address @tab 8 @tab address of tracepoint inserted on
+ at item type @tab 4 @tab type of tracepoint
+ at item enabled @tab 1 @tab enable or disable of tracepoint
+ at item step_count @tab 8 @tab step
+ at item pass_count @tab 8 @tab pass
+ at item numactions @tab 4 @tab number of tracepoint actions
+ at item hit count @tab 8 @tab hit count
+ at item trace frame usage @tab 8 @tab trace frame usage
+ at item compiled_cond @tab 8 @tab compiled condition
+ at item orig_size @tab 8 @tab orig size
+ at item condition @tab 4 if condition is NULL otherwise length of
+ at ref{agent expression object}
+ at tab zero if condition is NULL, otherwise is
+ at ref{agent expression object}
+ at item actions @tab variable
+ at tab numactions number of @ref{tracepoint action object}
+ at end multitable
+
+ at node IPA Protocol Commands
+ at subsection IPA Protocol Commands
+ at cindex ipa protocol commands
+
+The spaces in each command are delimiters to ease reading this commands
+specification.  They don't exist in real commands.
+
+ at table @samp
+
+ at item FastTrace:@var{tracepoint_object} @var{gdb_jump_pad_head}
+Installs a new fast tracepoint described by @var{tracepoint_object}
+(@pxref{tracepoint object}).  @var{gdb_jump_pad_head}, 8-byte long, is the
+head of @dfn{jumppad}, which is used to jump to data collection routine
+in IPA finally.
+
+Replies:
+ at table @samp
+ at item OK @var{target_address} @var{gdb_jump_pad_head} @var{fjump_size} @var{fjump}
+ at var{target_address} is address of tracepoint in the inferior.
+ at var{gdb_jump_pad_head} is updated head of jumppad.  Both of
+ at var{target_address} and @var{gdb_jump_pad_head} are 8-byte long.
+ at var{fjump} contains a sequence of instructions jump to jumppad entry.
+ at var{fjump_size}, 4-byte long, is the size of @var{fjump}.
+ at item E @var{NN}
+for an error
+
+ at end table
+
+ at item qTfSTM
+ at xref{qTfSTM}.
+ at item qTsSTM
+ at xref{qTsSTM}.
+ at item qTSTMat
+ at xref{qTSTMat}.
+ at item probe_marker_at:@var{address}
+Asks in-process agent to probe the marker at @var{address}.
+
+Replies:
+ at table @samp
+ at item E @var{NN}
+for an error
+ at end table
+ at item unprobe_marker_at:@var{address}
+Asks in-process agent to unprobe the marker at @var{address}.
+ at end table
+
+ at node GDB Bugs
+ at chapter Reporting Bugs in @value{GDBN}
+ at cindex bugs in @value{GDBN}
+ at cindex reporting bugs in @value{GDBN}
+
+Your bug reports play an essential role in making @value{GDBN} reliable.
+
+Reporting a bug may help you by bringing a solution to your problem, or it
+may not.  But in any case the principal function of a bug report is to help
+the entire community by making the next version of @value{GDBN} work better.  Bug
+reports are your contribution to the maintenance of @value{GDBN}.
+
+In order for a bug report to serve its purpose, you must include the
+information that enables us to fix the bug.
+
+ at menu
+* Bug Criteria::                Have you found a bug?
+* Bug Reporting::               How to report bugs
+ at end menu
+
+ at node Bug Criteria
+ at section Have You Found a Bug?
+ at cindex bug criteria
+
+If you are not sure whether you have found a bug, here are some guidelines:
+
+ at itemize @bullet
+ at cindex fatal signal
+ at cindex debugger crash
+ at cindex crash of debugger
+ at item
+If the debugger gets a fatal signal, for any input whatever, that is a
+ at value{GDBN} bug.  Reliable debuggers never crash.
+
+ at cindex error on valid input
+ at item
+If @value{GDBN} produces an error message for valid input, that is a
+bug.  (Note that if you're cross debugging, the problem may also be
+somewhere in the connection to the target.)
+
+ at cindex invalid input
+ at item
+If @value{GDBN} does not produce an error message for invalid input,
+that is a bug.  However, you should note that your idea of
+``invalid input'' might be our idea of ``an extension'' or ``support
+for traditional practice''.
+
+ at item
+If you are an experienced user of debugging tools, your suggestions
+for improvement of @value{GDBN} are welcome in any case.
+ at end itemize
+
+ at node Bug Reporting
+ at section How to Report Bugs
+ at cindex bug reports
+ at cindex @value{GDBN} bugs, reporting
+
+A number of companies and individuals offer support for @sc{gnu} products.
+If you obtained @value{GDBN} from a support organization, we recommend you
+contact that organization first.
+
+You can find contact information for many support companies and
+individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs
+distribution.
+ at c should add a web page ref...
+
+ at ifset BUGURL
+ at ifset BUGURL_DEFAULT
+In any event, we also recommend that you submit bug reports for
+ at value{GDBN}.  The preferred method is to submit them directly using
+ at uref{http://www.gnu.org/software/gdb/bugs/, @value{GDBN}'s Bugs web
+page}.  Alternatively, the @email{bug-gdb@@gnu.org, e-mail gateway} can
+be used.
+
+ at strong{Do not send bug reports to @samp{info-gdb}, or to
+ at samp{help-gdb}, or to any newsgroups.}  Most users of @value{GDBN} do
+not want to receive bug reports.  Those that do have arranged to receive
+ at samp{bug-gdb}.
+
+The mailing list @samp{bug-gdb} has a newsgroup @samp{gnu.gdb.bug} which
+serves as a repeater.  The mailing list and the newsgroup carry exactly
+the same messages.  Often people think of posting bug reports to the
+newsgroup instead of mailing them.  This appears to work, but it has one
+problem which can be crucial: a newsgroup posting often lacks a mail
+path back to the sender.  Thus, if we need to ask for more information,
+we may be unable to reach you.  For this reason, it is better to send
+bug reports to the mailing list.
+ at end ifset
+ at ifclear BUGURL_DEFAULT
+In any event, we also recommend that you submit bug reports for
+ at value{GDBN} to @value{BUGURL}.
+ at end ifclear
+ at end ifset
+
+The fundamental principle of reporting bugs usefully is this:
+ at strong{report all the facts}.  If you are not sure whether to state a
+fact or leave it out, state it!
+
+Often people omit facts because they think they know what causes the
+problem and assume that some details do not matter.  Thus, you might
+assume that the name of the variable you use in an example does not matter.
+Well, probably it does not, but one cannot be sure.  Perhaps the bug is a
+stray memory reference which happens to fetch from the location where that
+name is stored in memory; perhaps, if the name were different, the contents
+of that location would fool the debugger into doing the right thing despite
+the bug.  Play it safe and give a specific, complete example.  That is the
+easiest thing for you to do, and the most helpful.
+
+Keep in mind that the purpose of a bug report is to enable us to fix the
+bug.  It may be that the bug has been reported previously, but neither
+you nor we can know that unless your bug report is complete and
+self-contained.
+
+Sometimes people give a few sketchy facts and ask, ``Does this ring a
+bell?''  Those bug reports are useless, and we urge everyone to
+ at emph{refuse to respond to them} except to chide the sender to report
+bugs properly.
+
+To enable us to fix the bug, you should include all these things:
+
+ at itemize @bullet
+ at item
+The version of @value{GDBN}.  @value{GDBN} announces it if you start
+with no arguments; you can also print it at any time using @code{show
+version}.
+
+Without this, we will not know whether there is any point in looking for
+the bug in the current version of @value{GDBN}.
+
+ at item
+The type of machine you are using, and the operating system name and
+version number.
+
+ at item
+What compiler (and its version) was used to compile @value{GDBN}---e.g.@:
+``@value{GCC}--2.8.1''.
+
+ at item
+What compiler (and its version) was used to compile the program you are
+debugging---e.g.@:  ``@value{GCC}--2.8.1'', or ``HP92453-01 A.10.32.03 HP
+C Compiler''.  For @value{NGCC}, you can say @kbd{@value{GCC} --version}
+to get this information; for other compilers, see the documentation for
+those compilers.
+
+ at item
+The command arguments you gave the compiler to compile your example and
+observe the bug.  For example, did you use @samp{-O}?  To guarantee
+you will not omit something important, list them all.  A copy of the
+Makefile (or the output from make) is sufficient.
+
+If we were to try to guess the arguments, we would probably guess wrong
+and then we might not encounter the bug.
+
+ at item
+A complete input script, and all necessary source files, that will
+reproduce the bug.
+
+ at item
+A description of what behavior you observe that you believe is
+incorrect.  For example, ``It gets a fatal signal.''
+
+Of course, if the bug is that @value{GDBN} gets a fatal signal, then we
+will certainly notice it.  But if the bug is incorrect output, we might
+not notice unless it is glaringly wrong.  You might as well not give us
+a chance to make a mistake.
+
+Even if the problem you experience is a fatal signal, you should still
+say so explicitly.  Suppose something strange is going on, such as, your
+copy of @value{GDBN} is out of synch, or you have encountered a bug in
+the C library on your system.  (This has happened!)  Your copy might
+crash and ours would not.  If you told us to expect a crash, then when
+ours fails to crash, we would know that the bug was not happening for
+us.  If you had not told us to expect a crash, then we would not be able
+to draw any conclusion from our observations.
+
+ at pindex script
+ at cindex recording a session script
+To collect all this information, you can use a session recording program
+such as @command{script}, which is available on many Unix systems.
+Just run your @value{GDBN} session inside @command{script} and then
+include the @file{typescript} file with your bug report.
+
+Another way to record a @value{GDBN} session is to run @value{GDBN}
+inside Emacs and then save the entire buffer to a file.
+
+ at item
+If you wish to suggest changes to the @value{GDBN} source, send us context
+diffs.  If you even discuss something in the @value{GDBN} source, refer to
+it by context, not by line number.
+
+The line numbers in our development sources will not match those in your
+sources.  Your line numbers would convey no useful information to us.
+
+ at end itemize
+
+Here are some things that are not necessary:
+
+ at itemize @bullet
+ at item
+A description of the envelope of the bug.
+
+Often people who encounter a bug spend a lot of time investigating
+which changes to the input file will make the bug go away and which
+changes will not affect it.
+
+This is often time consuming and not very useful, because the way we
+will find the bug is by running a single example under the debugger
+with breakpoints, not by pure deduction from a series of examples.
+We recommend that you save your time for something else.
+
+Of course, if you can find a simpler example to report @emph{instead}
+of the original one, that is a convenience for us.  Errors in the
+output will be easier to spot, running under the debugger will take
+less time, and so on.
+
+However, simplification is not vital; if you do not want to do this,
+report the bug anyway and send us the entire test case you used.
+
+ at item
+A patch for the bug.
+
+A patch for the bug does help us if it is a good one.  But do not omit
+the necessary information, such as the test case, on the assumption that
+a patch is all we need.  We might see problems with your patch and decide
+to fix the problem another way, or we might not understand it at all.
+
+Sometimes with a program as complicated as @value{GDBN} it is very hard to
+construct an example that will make the program follow a certain path
+through the code.  If you do not send us the example, we will not be able
+to construct one, so we will not be able to verify that the bug is fixed.
+
+And if we cannot understand what bug you are trying to fix, or why your
+patch should be an improvement, we will not install it.  A test case will
+help us to understand.
+
+ at item
+A guess about what the bug is or what it depends on.
+
+Such guesses are usually wrong.  Even we cannot guess right about such
+things without first using the debugger to find the facts.
+ at end itemize
+
+ at c The readline documentation is distributed with the readline code
+ at c and consists of the two following files:
+ at c     rluser.texi
+ at c     hsuser.texi
+ at c Use -I with makeinfo to point to the appropriate directory,
+ at c environment var TEXINPUTS with TeX.
+ at ifclear SYSTEM_READLINE
+ at include rluser.texi
+ at include hsuser.texi
+ at end ifclear
+
+ at node In Memoriam
+ at appendix In Memoriam
+
+The @value{GDBN} project mourns the loss of the following long-time
+contributors:
+
+ at table @code
+ at item Fred Fish
+Fred was a long-standing contributor to @value{GDBN} (1991-2006), and
+to Free Software in general.  Outside of @value{GDBN}, he was known in
+the Amiga world for his series of Fish Disks, and the GeekGadget project.
+
+ at item Michael Snyder
+Michael was one of the Global Maintainers of the @value{GDBN} project,
+with contributions recorded as early as 1996, until 2011.  In addition
+to his day to day participation, he was a large driving force behind
+adding Reverse Debugging to @value{GDBN}.
+ at end table
+
+Beyond their technical contributions to the project, they were also
+enjoyable members of the Free Software Community.  We will miss them.
+
+ at node Formatting Documentation
+ at appendix Formatting Documentation
+
+ at cindex @value{GDBN} reference card
+ at cindex reference card
+The @value{GDBN} 4 release includes an already-formatted reference card, ready
+for printing with PostScript or Ghostscript, in the @file{gdb}
+subdirectory of the main source directory at footnote{In
+ at file{gdb- at value{GDBVN}/gdb/refcard.ps} of the version @value{GDBVN}
+release.}.  If you can use PostScript or Ghostscript with your printer,
+you can print the reference card immediately with @file{refcard.ps}.
+
+The release also includes the source for the reference card.  You
+can format it, using @TeX{}, by typing:
+
+ at smallexample
+make refcard.dvi
+ at end smallexample
+
+The @value{GDBN} reference card is designed to print in @dfn{landscape}
+mode on US ``letter'' size paper;
+that is, on a sheet 11 inches wide by 8.5 inches
+high.  You will need to specify this form of printing as an option to
+your @sc{dvi} output program.
+
+ at cindex documentation
+
+All the documentation for @value{GDBN} comes as part of the machine-readable
+distribution.  The documentation is written in Texinfo format, which is
+a documentation system that uses a single source file to produce both
+on-line information and a printed manual.  You can use one of the Info
+formatting commands to create the on-line version of the documentation
+and @TeX{} (or @code{texi2roff}) to typeset the printed version.
+
+ at value{GDBN} includes an already formatted copy of the on-line Info
+version of this manual in the @file{gdb} subdirectory.  The main Info
+file is @file{gdb- at value{GDBVN}/gdb/gdb.info}, and it refers to
+subordinate files matching @samp{gdb.info*} in the same directory.  If
+necessary, you can print out these files, or read them with any editor;
+but they are easier to read using the @code{info} subsystem in @sc{gnu}
+Emacs or the standalone @code{info} program, available as part of the
+ at sc{gnu} Texinfo distribution.
+
+If you want to format these Info files yourself, you need one of the
+Info formatting programs, such as @code{texinfo-format-buffer} or
+ at code{makeinfo}.
+
+If you have @code{makeinfo} installed, and are in the top level
+ at value{GDBN} source directory (@file{gdb- at value{GDBVN}}, in the case of
+version @value{GDBVN}), you can make the Info file by typing:
+
+ at smallexample
+cd gdb
+make gdb.info
+ at end smallexample
+
+If you want to typeset and print copies of this manual, you need @TeX{},
+a program to print its @sc{dvi} output files, and @file{texinfo.tex}, the
+Texinfo definitions file.
+
+ at TeX{} is a typesetting program; it does not print files directly, but
+produces output files called @sc{dvi} files.  To print a typeset
+document, you need a program to print @sc{dvi} files.  If your system
+has @TeX{} installed, chances are it has such a program.  The precise
+command to use depends on your system; @kbd{lpr -d} is common; another
+(for PostScript devices) is @kbd{dvips}.  The @sc{dvi} print command may
+require a file name without any extension or a @samp{.dvi} extension.
+
+ at TeX{} also requires a macro definitions file called
+ at file{texinfo.tex}.  This file tells @TeX{} how to typeset a document
+written in Texinfo format.  On its own, @TeX{} cannot either read or
+typeset a Texinfo file.  @file{texinfo.tex} is distributed with GDB
+and is located in the @file{gdb- at var{version-number}/texinfo}
+directory.
+
+If you have @TeX{} and a @sc{dvi} printer program installed, you can
+typeset and print this manual.  First switch to the @file{gdb}
+subdirectory of the main source directory (for example, to
+ at file{gdb- at value{GDBVN}/gdb}) and type:
+
+ at smallexample
+make gdb.dvi
+ at end smallexample
+
+Then give @file{gdb.dvi} to your @sc{dvi} printing program.
+
+ at node Installing GDB
+ at appendix Installing @value{GDBN}
+ at cindex installation
+
+ at menu
+* Requirements::                Requirements for building @value{GDBN}
+* Running Configure::           Invoking the @value{GDBN} @file{configure} script
+* Separate Objdir::             Compiling @value{GDBN} in another directory
+* Config Names::                Specifying names for hosts and targets
+* Configure Options::           Summary of options for configure
+* System-wide configuration::   Having a system-wide init file
+ at end menu
+
+ at node Requirements
+ at section Requirements for Building @value{GDBN}
+ at cindex building @value{GDBN}, requirements for
+
+Building @value{GDBN} requires various tools and packages to be available.
+Other packages will be used only if they are found.
+
+ at heading Tools/Packages Necessary for Building @value{GDBN}
+ at table @asis
+ at item ISO C90 compiler
+ at value{GDBN} is written in ISO C90.  It should be buildable with any
+working C90 compiler, e.g.@: GCC.
+
+ at end table
+
+ at heading Tools/Packages Optional for Building @value{GDBN}
+ at table @asis
+ at item Expat
+ at anchor{Expat}
+ at value{GDBN} can use the Expat XML parsing library.  This library may be
+included with your operating system distribution; if it is not, you
+can get the latest version from @url{http://expat.sourceforge.net}.
+The @file{configure} script will search for this library in several
+standard locations; if it is installed in an unusual path, you can
+use the @option{--with-libexpat-prefix} option to specify its location.
+
+Expat is used for:
+
+ at itemize @bullet
+ at item
+Remote protocol memory maps (@pxref{Memory Map Format})
+ at item
+Target descriptions (@pxref{Target Descriptions})
+ at item
+Remote shared library lists (@xref{Library List Format},
+or alternatively @pxref{Library List Format for SVR4 Targets})
+ at item
+MS-Windows shared libraries (@pxref{Shared Libraries})
+ at item
+Traceframe info (@pxref{Traceframe Info Format})
+ at end itemize
+
+ at item zlib
+ at cindex compressed debug sections 
+ at value{GDBN} will use the @samp{zlib} library, if available, to read
+compressed debug sections.  Some linkers, such as GNU gold, are capable
+of producing binaries with compressed debug sections.  If @value{GDBN}
+is compiled with @samp{zlib}, it will be able to read the debug
+information in such binaries.
+
+The @samp{zlib} library is likely included with your operating system
+distribution; if it is not, you can get the latest version from
+ at url{http://zlib.net}.
+
+ at item iconv
+ at value{GDBN}'s features related to character sets (@pxref{Character
+Sets}) require a functioning @code{iconv} implementation.  If you are
+on a GNU system, then this is provided by the GNU C Library.  Some
+other systems also provide a working @code{iconv}.
+
+If @value{GDBN} is using the @code{iconv} program which is installed
+in a non-standard place, you will need to tell @value{GDBN} where to find it.
+This is done with @option{--with-iconv-bin} which specifies the
+directory that contains the @code{iconv} program.
+
+On systems without @code{iconv}, you can install GNU Libiconv.  If you
+have previously installed Libiconv, you can use the
+ at option{--with-libiconv-prefix} option to configure.
+
+ at value{GDBN}'s top-level @file{configure} and @file{Makefile} will
+arrange to build Libiconv if a directory named @file{libiconv} appears
+in the top-most source directory.  If Libiconv is built this way, and
+if the operating system does not provide a suitable @code{iconv}
+implementation, then the just-built library will automatically be used
+by @value{GDBN}.  One easy way to set this up is to download GNU
+Libiconv, unpack it, and then rename the directory holding the
+Libiconv source code to @samp{libiconv}.
+ at end table
+
+ at node Running Configure
+ at section Invoking the @value{GDBN} @file{configure} Script
+ at cindex configuring @value{GDBN}
+ at value{GDBN} comes with a @file{configure} script that automates the process
+of preparing @value{GDBN} for installation; you can then use @code{make} to
+build the @code{gdb} program.
+ at iftex
+ at c irrelevant in info file; it's as current as the code it lives with.
+ at footnote{If you have a more recent version of @value{GDBN} than @value{GDBVN},
+look at the @file{README} file in the sources; we may have improved the
+installation procedures since publishing this manual.}
+ at end iftex
+
+The @value{GDBN} distribution includes all the source code you need for
+ at value{GDBN} in a single directory, whose name is usually composed by
+appending the version number to @samp{gdb}.
+
+For example, the @value{GDBN} version @value{GDBVN} distribution is in the
+ at file{gdb- at value{GDBVN}} directory.  That directory contains:
+
+ at table @code
+ at item gdb- at value{GDBVN}/configure @r{(and supporting files)}
+script for configuring @value{GDBN} and all its supporting libraries
+
+ at item gdb- at value{GDBVN}/gdb
+the source specific to @value{GDBN} itself
+
+ at item gdb- at value{GDBVN}/bfd
+source for the Binary File Descriptor library
+
+ at item gdb- at value{GDBVN}/include
+ at sc{gnu} include files
+
+ at item gdb- at value{GDBVN}/libiberty
+source for the @samp{-liberty} free software library
+
+ at item gdb- at value{GDBVN}/opcodes
+source for the library of opcode tables and disassemblers
+
+ at item gdb- at value{GDBVN}/readline
+source for the @sc{gnu} command-line interface
+
+ at item gdb- at value{GDBVN}/glob
+source for the @sc{gnu} filename pattern-matching subroutine
+
+ at item gdb- at value{GDBVN}/mmalloc
+source for the @sc{gnu} memory-mapped malloc package
+ at end table
+
+The simplest way to configure and build @value{GDBN} is to run @file{configure}
+from the @file{gdb- at var{version-number}} source directory, which in
+this example is the @file{gdb- at value{GDBVN}} directory.
+
+First switch to the @file{gdb- at var{version-number}} source directory
+if you are not already in it; then run @file{configure}.  Pass the
+identifier for the platform on which @value{GDBN} will run as an
+argument.
+
+For example:
+
+ at smallexample
+cd gdb- at value{GDBVN}
+./configure @var{host}
+make
+ at end smallexample
+
+ at noindent
+where @var{host} is an identifier such as @samp{sun4} or
+ at samp{decstation}, that identifies the platform where @value{GDBN} will run.
+(You can often leave off @var{host}; @file{configure} tries to guess the
+correct value by examining your system.)
+
+Running @samp{configure @var{host}} and then running @code{make} builds the
+ at file{bfd}, @file{readline}, @file{mmalloc}, and @file{libiberty}
+libraries, then @code{gdb} itself.  The configured source files, and the
+binaries, are left in the corresponding source directories.
+
+ at need 750
+ at file{configure} is a Bourne-shell (@code{/bin/sh}) script; if your
+system does not recognize this automatically when you run a different
+shell, you may need to run @code{sh} on it explicitly:
+
+ at smallexample
+sh configure @var{host}
+ at end smallexample
+
+If you run @file{configure} from a directory that contains source
+directories for multiple libraries or programs, such as the
+ at file{gdb- at value{GDBVN}} source directory for version @value{GDBVN},
+ at file{configure}
+creates configuration files for every directory level underneath (unless
+you tell it not to, with the @samp{--norecursion} option).
+
+You should run the @file{configure} script from the top directory in the
+source tree, the @file{gdb- at var{version-number}} directory.  If you run
+ at file{configure} from one of the subdirectories, you will configure only
+that subdirectory.  That is usually not what you want.  In particular,
+if you run the first @file{configure} from the @file{gdb} subdirectory
+of the @file{gdb- at var{version-number}} directory, you will omit the
+configuration of @file{bfd}, @file{readline}, and other sibling
+directories of the @file{gdb} subdirectory.  This leads to build errors
+about missing include files such as @file{bfd/bfd.h}.
+
+You can install @code{@value{GDBP}} anywhere; it has no hardwired paths.
+However, you should make sure that the shell on your path (named by
+the @samp{SHELL} environment variable) is publicly readable.  Remember
+that @value{GDBN} uses the shell to start your program---some systems refuse to
+let @value{GDBN} debug child processes whose programs are not readable.
+
+ at node Separate Objdir
+ at section Compiling @value{GDBN} in Another Directory
+
+If you want to run @value{GDBN} versions for several host or target machines,
+you need a different @code{gdb} compiled for each combination of
+host and target.  @file{configure} is designed to make this easy by
+allowing you to generate each configuration in a separate subdirectory,
+rather than in the source directory.  If your @code{make} program
+handles the @samp{VPATH} feature (@sc{gnu} @code{make} does), running
+ at code{make} in each of these directories builds the @code{gdb}
+program specified there.
+
+To build @code{gdb} in a separate directory, run @file{configure}
+with the @samp{--srcdir} option to specify where to find the source.
+(You also need to specify a path to find @file{configure}
+itself from your working directory.  If the path to @file{configure}
+would be the same as the argument to @samp{--srcdir}, you can leave out
+the @samp{--srcdir} option; it is assumed.)
+
+For example, with version @value{GDBVN}, you can build @value{GDBN} in a
+separate directory for a Sun 4 like this:
+
+ at smallexample
+ at group
+cd gdb- at value{GDBVN}
+mkdir ../gdb-sun4
+cd ../gdb-sun4
+../gdb- at value{GDBVN}/configure sun4
+make
+ at end group
+ at end smallexample
+
+When @file{configure} builds a configuration using a remote source
+directory, it creates a tree for the binaries with the same structure
+(and using the same names) as the tree under the source directory.  In
+the example, you'd find the Sun 4 library @file{libiberty.a} in the
+directory @file{gdb-sun4/libiberty}, and @value{GDBN} itself in
+ at file{gdb-sun4/gdb}.
+
+Make sure that your path to the @file{configure} script has just one
+instance of @file{gdb} in it.  If your path to @file{configure} looks
+like @file{../gdb- at value{GDBVN}/gdb/configure}, you are configuring only
+one subdirectory of @value{GDBN}, not the whole package.  This leads to
+build errors about missing include files such as @file{bfd/bfd.h}.
+
+One popular reason to build several @value{GDBN} configurations in separate
+directories is to configure @value{GDBN} for cross-compiling (where
+ at value{GDBN} runs on one machine---the @dfn{host}---while debugging
+programs that run on another machine---the @dfn{target}).
+You specify a cross-debugging target by
+giving the @samp{--target=@var{target}} option to @file{configure}.
+
+When you run @code{make} to build a program or library, you must run
+it in a configured directory---whatever directory you were in when you
+called @file{configure} (or one of its subdirectories).
+
+The @code{Makefile} that @file{configure} generates in each source
+directory also runs recursively.  If you type @code{make} in a source
+directory such as @file{gdb- at value{GDBVN}} (or in a separate configured
+directory configured with @samp{--srcdir=@var{dirname}/gdb- at value{GDBVN}}), you
+will build all the required libraries, and then build GDB.
+
+When you have multiple hosts or targets configured in separate
+directories, you can run @code{make} on them in parallel (for example,
+if they are NFS-mounted on each of the hosts); they will not interfere
+with each other.
+
+ at node Config Names
+ at section Specifying Names for Hosts and Targets
+
+The specifications used for hosts and targets in the @file{configure}
+script are based on a three-part naming scheme, but some short predefined
+aliases are also supported.  The full naming scheme encodes three pieces
+of information in the following pattern:
+
+ at smallexample
+ at var{architecture}- at var{vendor}- at var{os}
+ at end smallexample
+
+For example, you can use the alias @code{sun4} as a @var{host} argument,
+or as the value for @var{target} in a @code{--target=@var{target}}
+option.  The equivalent full name is @samp{sparc-sun-sunos4}.
+
+The @file{configure} script accompanying @value{GDBN} does not provide
+any query facility to list all supported host and target names or
+aliases.  @file{configure} calls the Bourne shell script
+ at code{config.sub} to map abbreviations to full names; you can read the
+script, if you wish, or you can use it to test your guesses on
+abbreviations---for example:
+
+ at smallexample
+% sh config.sub i386-linux
+i386-pc-linux-gnu
+% sh config.sub alpha-linux
+alpha-unknown-linux-gnu
+% sh config.sub hp9k700
+hppa1.1-hp-hpux
+% sh config.sub sun4
+sparc-sun-sunos4.1.1
+% sh config.sub sun3
+m68k-sun-sunos4.1.1
+% sh config.sub i986v
+Invalid configuration `i986v': machine `i986v' not recognized
+ at end smallexample
+
+ at noindent
+ at code{config.sub} is also distributed in the @value{GDBN} source
+directory (@file{gdb- at value{GDBVN}}, for version @value{GDBVN}).
+
+ at node Configure Options
+ at section @file{configure} Options
+
+Here is a summary of the @file{configure} options and arguments that
+are most often useful for building @value{GDBN}.  @file{configure} also has
+several other options not listed here.  @inforef{What Configure
+Does,,configure.info}, for a full explanation of @file{configure}.
+
+ at smallexample
+configure @r{[}--help at r{]}
+          @r{[}--prefix=@var{dir}@r{]}
+          @r{[}--exec-prefix=@var{dir}@r{]}
+          @r{[}--srcdir=@var{dirname}@r{]}
+          @r{[}--norecursion at r{]} @r{[}--rm at r{]}
+          @r{[}--target=@var{target}@r{]}
+          @var{host}
+ at end smallexample
+
+ at noindent
+You may introduce options with a single @samp{-} rather than
+ at samp{--} if you prefer; but you may abbreviate option names if you use
+ at samp{--}.
+
+ at table @code
+ at item --help
+Display a quick summary of how to invoke @file{configure}.
+
+ at item --prefix=@var{dir}
+Configure the source to install programs and files under directory
+ at file{@var{dir}}.
+
+ at item --exec-prefix=@var{dir}
+Configure the source to install programs under directory
+ at file{@var{dir}}.
+
+ at c avoid splitting the warning from the explanation:
+ at need 2000
+ at item --srcdir=@var{dirname}
+ at strong{Warning: using this option requires @sc{gnu} @code{make}, or another
+ at code{make} that implements the @code{VPATH} feature.}@*
+Use this option to make configurations in directories separate from the
+ at value{GDBN} source directories.  Among other things, you can use this to
+build (or maintain) several configurations simultaneously, in separate
+directories.  @file{configure} writes configuration-specific files in
+the current directory, but arranges for them to use the source in the
+directory @var{dirname}.  @file{configure} creates directories under
+the working directory in parallel to the source directories below
+ at var{dirname}.
+
+ at item --norecursion
+Configure only the directory level where @file{configure} is executed; do not
+propagate configuration to subdirectories.
+
+ at item --target=@var{target}
+Configure @value{GDBN} for cross-debugging programs running on the specified
+ at var{target}.  Without this option, @value{GDBN} is configured to debug
+programs that run on the same machine (@var{host}) as @value{GDBN} itself.
+
+There is no convenient way to generate a list of all available targets.
+
+ at item @var{host} @dots{}
+Configure @value{GDBN} to run on the specified @var{host}.
+
+There is no convenient way to generate a list of all available hosts.
+ at end table
+
+There are many other options available as well, but they are generally
+needed for special purposes only.
+
+ at node System-wide configuration
+ at section System-wide configuration and settings
+ at cindex system-wide init file
+
+ at value{GDBN} can be configured to have a system-wide init file;
+this file will be read and executed at startup (@pxref{Startup, , What
+ at value{GDBN} does during startup}).
+
+Here is the corresponding configure option:
+
+ at table @code
+ at item --with-system-gdbinit=@var{file}
+Specify that the default location of the system-wide init file is
+ at var{file}.
+ at end table
+
+If @value{GDBN} has been configured with the option @option{--prefix=$prefix},
+it may be subject to relocation.  Two possible cases:
+
+ at itemize @bullet
+ at item 
+If the default location of this init file contains @file{$prefix},
+it will be subject to relocation.  Suppose that the configure options
+are @option{--prefix=$prefix --with-system-gdbinit=$prefix/etc/gdbinit};
+if @value{GDBN} is moved from @file{$prefix} to @file{$install}, the system
+init file is looked for as @file{$install/etc/gdbinit} instead of
+ at file{$prefix/etc/gdbinit}.
+
+ at item
+By contrast, if the default location does not contain the prefix,
+it will not be relocated.  E.g.@: if @value{GDBN} has been configured with
+ at option{--prefix=/usr/local --with-system-gdbinit=/usr/share/gdb/gdbinit},
+then @value{GDBN} will always look for @file{/usr/share/gdb/gdbinit},
+wherever @value{GDBN} is installed.
+ at end itemize
+
+ at node Maintenance Commands
+ at appendix Maintenance Commands
+ at cindex maintenance commands
+ at cindex internal commands
+
+In addition to commands intended for @value{GDBN} users, @value{GDBN}
+includes a number of commands intended for @value{GDBN} developers,
+that are not documented elsewhere in this manual.  These commands are
+provided here for reference.  (For commands that turn on debugging
+messages, see @ref{Debugging Output}.)
+
+ at table @code
+ at kindex maint agent
+ at kindex maint agent-eval
+ at item maint agent @r{[}-at @var{location}@r{,}@r{]} @var{expression}
+ at itemx maint agent-eval @r{[}-at @var{location}@r{,}@r{]} @var{expression}
+Translate the given @var{expression} into remote agent bytecodes.
+This command is useful for debugging the Agent Expression mechanism
+(@pxref{Agent Expressions}).  The @samp{agent} version produces an
+expression useful for data collection, such as by tracepoints, while
+ at samp{maint agent-eval} produces an expression that evaluates directly
+to a result.  For instance, a collection expression for @code{globa +
+globb} will include bytecodes to record four bytes of memory at each
+of the addresses of @code{globa} and @code{globb}, while discarding
+the result of the addition, while an evaluation expression will do the
+addition and return the sum.
+If @code{-at} is given, generate remote agent bytecode for @var{location}.
+If not, generate remote agent bytecode for current frame PC address.
+
+ at kindex maint agent-printf
+ at item maint agent-printf @var{format}, at var{expr},...
+Translate the given format string and list of argument expressions
+into remote agent bytecodes and display them as a disassembled list.
+This command is useful for debugging the agent version of dynamic
+printf (@pxref{Dynamic Printf}.
+
+ at kindex maint info breakpoints
+ at item @anchor{maint info breakpoints}maint info breakpoints
+Using the same format as @samp{info breakpoints}, display both the
+breakpoints you've set explicitly, and those @value{GDBN} is using for
+internal purposes.  Internal breakpoints are shown with negative
+breakpoint numbers.  The type column identifies what kind of breakpoint
+is shown:
+
+ at table @code
+ at item breakpoint
+Normal, explicitly set breakpoint.
+
+ at item watchpoint
+Normal, explicitly set watchpoint.
+
+ at item longjmp
+Internal breakpoint, used to handle correctly stepping through
+ at code{longjmp} calls.
+
+ at item longjmp resume
+Internal breakpoint at the target of a @code{longjmp}.
+
+ at item until
+Temporary internal breakpoint used by the @value{GDBN} @code{until} command.
+
+ at item finish
+Temporary internal breakpoint used by the @value{GDBN} @code{finish} command.
+
+ at item shlib events
+Shared library events.
+
+ at end table
+
+ at kindex set displaced-stepping
+ at kindex show displaced-stepping
+ at cindex displaced stepping support
+ at cindex out-of-line single-stepping
+ at item set displaced-stepping
+ at itemx show displaced-stepping
+Control whether or not @value{GDBN} will do @dfn{displaced stepping}
+if the target supports it.  Displaced stepping is a way to single-step
+over breakpoints without removing them from the inferior, by executing
+an out-of-line copy of the instruction that was originally at the
+breakpoint location.  It is also known as out-of-line single-stepping.
+
+ at table @code
+ at item set displaced-stepping on
+If the target architecture supports it, @value{GDBN} will use
+displaced stepping to step over breakpoints.
+
+ at item set displaced-stepping off
+ at value{GDBN} will not use displaced stepping to step over breakpoints,
+even if such is supported by the target architecture.
+
+ at cindex non-stop mode, and @samp{set displaced-stepping}
+ at item set displaced-stepping auto
+This is the default mode.  @value{GDBN} will use displaced stepping
+only if non-stop mode is active (@pxref{Non-Stop Mode}) and the target
+architecture supports displaced stepping.
+ at end table
+
+ at kindex maint check-symtabs
+ at item maint check-symtabs
+Check the consistency of psymtabs and symtabs.
+
+ at kindex maint cplus first_component
+ at item maint cplus first_component @var{name}
+Print the first C at t{++} class/namespace component of @var{name}.
+
+ at kindex maint cplus namespace
+ at item maint cplus namespace
+Print the list of possible C at t{++} namespaces.
+
+ at kindex maint demangle
+ at item maint demangle @var{name}
+Demangle a C at t{++} or Objective-C mangled @var{name}.
+
+ at kindex maint deprecate
+ at kindex maint undeprecate
+ at cindex deprecated commands
+ at item maint deprecate @var{command} @r{[}@var{replacement}@r{]}
+ at itemx maint undeprecate @var{command}
+Deprecate or undeprecate the named @var{command}.  Deprecated commands
+cause @value{GDBN} to issue a warning when you use them.  The optional
+argument @var{replacement} says which newer command should be used in
+favor of the deprecated one; if it is given, @value{GDBN} will mention
+the replacement as part of the warning.
+
+ at kindex maint dump-me
+ at item maint dump-me
+ at cindex @code{SIGQUIT} signal, dump core of @value{GDBN}
+Cause a fatal signal in the debugger and force it to dump its core.
+This is supported only on systems which support aborting a program
+with the @code{SIGQUIT} signal.
+
+ at kindex maint internal-error
+ at kindex maint internal-warning
+ at item maint internal-error @r{[}@var{message-text}@r{]}
+ at itemx maint internal-warning @r{[}@var{message-text}@r{]}
+Cause @value{GDBN} to call the internal function @code{internal_error}
+or @code{internal_warning} and hence behave as though an internal error
+or internal warning has been detected.  In addition to reporting the
+internal problem, these functions give the user the opportunity to
+either quit @value{GDBN} or create a core file of the current
+ at value{GDBN} session.
+
+These commands take an optional parameter @var{message-text} that is
+used as the text of the error or warning message.
+
+Here's an example of using @code{internal-error}:
+
+ at smallexample
+(@value{GDBP}) @kbd{maint internal-error testing, 1, 2}
+ at dots{}/maint.c:121: internal-error: testing, 1, 2
+A problem internal to GDB has been detected.  Further
+debugging may prove unreliable.
+Quit this debugging session? (y or n) @kbd{n}
+Create a core file? (y or n) @kbd{n}
+(@value{GDBP})
+ at end smallexample
+
+ at cindex @value{GDBN} internal error
+ at cindex internal errors, control of @value{GDBN} behavior
+
+ at kindex maint set internal-error
+ at kindex maint show internal-error
+ at kindex maint set internal-warning
+ at kindex maint show internal-warning
+ at item maint set internal-error @var{action} [ask|yes|no]
+ at itemx maint show internal-error @var{action}
+ at itemx maint set internal-warning @var{action} [ask|yes|no]
+ at itemx maint show internal-warning @var{action}
+When @value{GDBN} reports an internal problem (error or warning) it
+gives the user the opportunity to both quit @value{GDBN} and create a
+core file of the current @value{GDBN} session.  These commands let you
+override the default behaviour for each particular @var{action},
+described in the table below.
+
+ at table @samp
+ at item quit
+You can specify that @value{GDBN} should always (yes) or never (no)
+quit.  The default is to ask the user what to do.
+
+ at item corefile
+You can specify that @value{GDBN} should always (yes) or never (no)
+create a core file.  The default is to ask the user what to do.
+ at end table
+
+ at kindex maint packet
+ at item maint packet @var{text}
+If @value{GDBN} is talking to an inferior via the serial protocol,
+then this command sends the string @var{text} to the inferior, and
+displays the response packet.  @value{GDBN} supplies the initial
+ at samp{$} character, the terminating @samp{#} character, and the
+checksum.
+
+ at kindex maint print architecture
+ at item maint print architecture @r{[}@var{file}@r{]}
+Print the entire architecture configuration.  The optional argument
+ at var{file} names the file where the output goes.
+
+ at kindex maint print c-tdesc
+ at item maint print c-tdesc
+Print the current target description (@pxref{Target Descriptions}) as
+a C source file.  The created source file can be used in @value{GDBN}
+when an XML parser is not available to parse the description.
+
+ at kindex maint print dummy-frames
+ at item maint print dummy-frames
+Prints the contents of @value{GDBN}'s internal dummy-frame stack.
+
+ at smallexample
+(@value{GDBP}) @kbd{b add}
+ at dots{}
+(@value{GDBP}) @kbd{print add(2,3)}
+Breakpoint 2, add (a=2, b=3) at @dots{}
+58	  return (a + b);
+The program being debugged stopped while in a function called from GDB.
+ at dots{}
+(@value{GDBP}) @kbd{maint print dummy-frames}
+0x1a57c80: pc=0x01014068 fp=0x0200bddc sp=0x0200bdd6
+ top=0x0200bdd4 id=@{stack=0x200bddc,code=0x101405c@}
+ call_lo=0x01014000 call_hi=0x01014001
+(@value{GDBP})
+ at end smallexample
+
+Takes an optional file parameter.
+
+ at kindex maint print registers
+ at kindex maint print raw-registers
+ at kindex maint print cooked-registers
+ at kindex maint print register-groups
+ at kindex maint print remote-registers
+ at item maint print registers @r{[}@var{file}@r{]}
+ at itemx maint print raw-registers @r{[}@var{file}@r{]}
+ at itemx maint print cooked-registers @r{[}@var{file}@r{]}
+ at itemx maint print register-groups @r{[}@var{file}@r{]}
+ at itemx maint print remote-registers @r{[}@var{file}@r{]}
+Print @value{GDBN}'s internal register data structures.
+
+The command @code{maint print raw-registers} includes the contents of
+the raw register cache; the command @code{maint print
+cooked-registers} includes the (cooked) value of all registers,
+including registers which aren't available on the target nor visible
+to user; the command @code{maint print register-groups} includes the
+groups that each register is a member of; and the command @code{maint
+print remote-registers} includes the remote target's register numbers
+and offsets in the `G' packets.  @xref{Registers,, Registers, gdbint,
+ at value{GDBN} Internals}.
+
+These commands take an optional parameter, a file name to which to
+write the information.
+
+ at kindex maint print reggroups
+ at item maint print reggroups @r{[}@var{file}@r{]}
+Print @value{GDBN}'s internal register group data structures.  The
+optional argument @var{file} tells to what file to write the
+information.
+
+The register groups info looks like this:
+
+ at smallexample
+(@value{GDBP}) @kbd{maint print reggroups}
+ Group      Type
+ general    user
+ float      user
+ all        user
+ vector     user
+ system     user
+ save       internal
+ restore    internal
+ at end smallexample
+
+ at kindex flushregs
+ at item flushregs
+This command forces @value{GDBN} to flush its internal register cache.
+
+ at kindex maint print objfiles
+ at cindex info for known object files
+ at item maint print objfiles
+Print a dump of all known object files.  For each object file, this
+command prints its name, address in memory, and all of its psymtabs
+and symtabs.
+
+ at kindex maint print section-scripts
+ at cindex info for known .debug_gdb_scripts-loaded scripts
+ at item maint print section-scripts [@var{regexp}]
+Print a dump of scripts specified in the @code{.debug_gdb_section} section.
+If @var{regexp} is specified, only print scripts loaded by object files
+matching @var{regexp}.
+For each script, this command prints its name as specified in the objfile,
+and the full path if known.
+ at xref{dotdebug_gdb_scripts section}.
+
+ at kindex maint print statistics
+ at cindex bcache statistics
+ at item maint print statistics
+This command prints, for each object file in the program, various data
+about that object file followed by the byte cache (@dfn{bcache})
+statistics for the object file.  The objfile data includes the number
+of minimal, partial, full, and stabs symbols, the number of types
+defined by the objfile, the number of as yet unexpanded psym tables,
+the number of line tables and string tables, and the amount of memory
+used by the various tables.  The bcache statistics include the counts,
+sizes, and counts of duplicates of all and unique objects, max,
+average, and median entry size, total memory used and its overhead and
+savings, and various measures of the hash table size and chain
+lengths.
+
+ at kindex maint print target-stack
+ at cindex target stack description
+ at item maint print target-stack
+A @dfn{target} is an interface between the debugger and a particular
+kind of file or process.  Targets can be stacked in @dfn{strata},
+so that more than one target can potentially respond to a request.
+In particular, memory accesses will walk down the stack of targets
+until they find a target that is interested in handling that particular
+address.
+
+This command prints a short description of each layer that was pushed on
+the @dfn{target stack}, starting from the top layer down to the bottom one.
+
+ at kindex maint print type
+ at cindex type chain of a data type
+ at item maint print type @var{expr}
+Print the type chain for a type specified by @var{expr}.  The argument
+can be either a type name or a symbol.  If it is a symbol, the type of
+that symbol is described.  The type chain produced by this command is
+a recursive definition of the data type as stored in @value{GDBN}'s
+data structures, including its flags and contained types.
+
+ at kindex maint set dwarf2 always-disassemble
+ at kindex maint show dwarf2 always-disassemble
+ at item maint set dwarf2 always-disassemble
+ at item maint show dwarf2 always-disassemble
+Control the behavior of @code{info address} when using DWARF debugging
+information.
+
+The default is @code{off}, which means that @value{GDBN} should try to
+describe a variable's location in an easily readable format.  When
+ at code{on}, @value{GDBN} will instead display the DWARF location
+expression in an assembly-like format.  Note that some locations are
+too complex for @value{GDBN} to describe simply; in this case you will
+always see the disassembly form.
+
+Here is an example of the resulting disassembly:
+
+ at smallexample
+(gdb) info addr argc
+Symbol "argc" is a complex DWARF expression:
+     1: DW_OP_fbreg 0
+ at end smallexample
+
+For more information on these expressions, see
+ at uref{http://www.dwarfstd.org/, the DWARF standard}.
+
+ at kindex maint set dwarf2 max-cache-age
+ at kindex maint show dwarf2 max-cache-age
+ at item maint set dwarf2 max-cache-age
+ at itemx maint show dwarf2 max-cache-age
+Control the DWARF 2 compilation unit cache.
+
+ at cindex DWARF 2 compilation units cache
+In object files with inter-compilation-unit references, such as those
+produced by the GCC option @samp{-feliminate-dwarf2-dups}, the DWARF 2
+reader needs to frequently refer to previously read compilation units.
+This setting controls how long a compilation unit will remain in the
+cache if it is not referenced.  A higher limit means that cached
+compilation units will be stored in memory longer, and more total
+memory will be used.  Setting it to zero disables caching, which will
+slow down @value{GDBN} startup, but reduce memory consumption.
+
+ at kindex maint set profile
+ at kindex maint show profile
+ at cindex profiling GDB
+ at item maint set profile
+ at itemx maint show profile
+Control profiling of @value{GDBN}.
+
+Profiling will be disabled until you use the @samp{maint set profile}
+command to enable it.  When you enable profiling, the system will begin
+collecting timing and execution count data; when you disable profiling or
+exit @value{GDBN}, the results will be written to a log file.  Remember that
+if you use profiling, @value{GDBN} will overwrite the profiling log file
+(often called @file{gmon.out}).  If you have a record of important profiling
+data in a @file{gmon.out} file, be sure to move it to a safe location.
+
+Configuring with @samp{--enable-profiling} arranges for @value{GDBN} to be
+compiled with the @samp{-pg} compiler option.
+
+ at kindex maint set show-debug-regs
+ at kindex maint show show-debug-regs
+ at cindex hardware debug registers
+ at item maint set show-debug-regs
+ at itemx maint show show-debug-regs
+Control whether to show variables that mirror the hardware debug
+registers.  Use @code{ON} to enable, @code{OFF} to disable.  If
+enabled, the debug registers values are shown when @value{GDBN} inserts or
+removes a hardware breakpoint or watchpoint, and when the inferior
+triggers a hardware-assisted breakpoint or watchpoint.
+
+ at kindex maint set show-all-tib
+ at kindex maint show show-all-tib
+ at item maint set show-all-tib
+ at itemx maint show show-all-tib
+Control whether to show all non zero areas within a 1k block starting
+at thread local base, when using the @samp{info w32 thread-information-block}
+command.
+
+ at kindex maint space
+ at cindex memory used by commands
+ at item maint space
+Control whether to display memory usage for each command.  If set to a
+nonzero value, @value{GDBN} will display how much memory each command
+took, following the command's own output.  This can also be requested
+by invoking @value{GDBN} with the @option{--statistics} command-line
+switch (@pxref{Mode Options}).
+
+ at kindex maint time
+ at cindex time of command execution
+ at item maint time
+Control whether to display the execution time of @value{GDBN} for each command.
+If set to a nonzero value, @value{GDBN} will display how much time it
+took to execute each command, following the command's own output.
+Both CPU time and wallclock time are printed.
+Printing both is useful when trying to determine whether the cost is
+CPU or, e.g., disk/network, latency.
+Note that the CPU time printed is for @value{GDBN} only, it does not include
+the execution time of the inferior because there's no mechanism currently
+to compute how much time was spent by @value{GDBN} and how much time was
+spent by the program been debugged.
+This can also be requested by invoking @value{GDBN} with the
+ at option{--statistics} command-line switch (@pxref{Mode Options}).
+
+ at kindex maint translate-address
+ at item maint translate-address @r{[}@var{section}@r{]} @var{addr}
+Find the symbol stored at the location specified by the address
+ at var{addr} and an optional section name @var{section}.  If found,
+ at value{GDBN} prints the name of the closest symbol and an offset from
+the symbol's location to the specified address.  This is similar to
+the @code{info address} command (@pxref{Symbols}), except that this
+command also allows to find symbols in other sections.
+
+If section was not specified, the section in which the symbol was found
+is also printed.  For dynamically linked executables, the name of
+executable or shared library containing the symbol is printed as well.
+
+ at end table
+
+The following command is useful for non-interactive invocations of
+ at value{GDBN}, such as in the test suite.
+
+ at table @code
+ at item set watchdog @var{nsec}
+ at kindex set watchdog
+ at cindex watchdog timer
+ at cindex timeout for commands
+Set the maximum number of seconds @value{GDBN} will wait for the
+target operation to finish.  If this time expires, @value{GDBN}
+reports and error and the command is aborted.
+
+ at item show watchdog
+Show the current setting of the target wait timeout.
+ at end table
+
+ at node Remote Protocol
+ at appendix @value{GDBN} Remote Serial Protocol
+
+ at menu
+* Overview::
+* Packets::
+* Stop Reply Packets::
+* General Query Packets::
+* Architecture-Specific Protocol Details::
+* Tracepoint Packets::
+* Host I/O Packets::
+* Interrupts::
+* Notification Packets::
+* Remote Non-Stop::
+* Packet Acknowledgment::
+* Examples::
+* File-I/O Remote Protocol Extension::
+* Library List Format::
+* Library List Format for SVR4 Targets::
+* Memory Map Format::
+* Thread List Format::
+* Traceframe Info Format::
+ at end menu
+
+ at node Overview
+ at section Overview
+
+There may be occasions when you need to know something about the
+protocol---for example, if there is only one serial port to your target
+machine, you might want your program to do something special if it
+recognizes a packet meant for @value{GDBN}.
+
+In the examples below, @samp{->} and @samp{<-} are used to indicate
+transmitted and received data, respectively.
+
+ at cindex protocol, @value{GDBN} remote serial
+ at cindex serial protocol, @value{GDBN} remote
+ at cindex remote serial protocol
+All @value{GDBN} commands and responses (other than acknowledgments
+and notifications, see @ref{Notification Packets}) are sent as a
+ at var{packet}.  A @var{packet} is introduced with the character
+ at samp{$}, the actual @var{packet-data}, and the terminating character
+ at samp{#} followed by a two-digit @var{checksum}:
+
+ at smallexample
+ at code{$}@var{packet-data}@code{#}@var{checksum}
+ at end smallexample
+ at noindent
+
+ at cindex checksum, for @value{GDBN} remote
+ at noindent
+The two-digit @var{checksum} is computed as the modulo 256 sum of all
+characters between the leading @samp{$} and the trailing @samp{#} (an
+eight bit unsigned checksum).
+
+Implementors should note that prior to @value{GDBN} 5.0 the protocol
+specification also included an optional two-digit @var{sequence-id}:
+
+ at smallexample
+ at code{$}@var{sequence-id}@code{:}@var{packet-data}@code{#}@var{checksum}
+ at end smallexample
+
+ at cindex sequence-id, for @value{GDBN} remote
+ at noindent
+That @var{sequence-id} was appended to the acknowledgment.  @value{GDBN}
+has never output @var{sequence-id}s.  Stubs that handle packets added
+since @value{GDBN} 5.0 must not accept @var{sequence-id}.
+
+When either the host or the target machine receives a packet, the first
+response expected is an acknowledgment: either @samp{+} (to indicate
+the package was received correctly) or @samp{-} (to request
+retransmission):
+
+ at smallexample
+-> @code{$}@var{packet-data}@code{#}@var{checksum}
+<- @code{+}
+ at end smallexample
+ at noindent
+
+The @samp{+}/@samp{-} acknowledgments can be disabled
+once a connection is established.
+ at xref{Packet Acknowledgment}, for details.
+
+The host (@value{GDBN}) sends @var{command}s, and the target (the
+debugging stub incorporated in your program) sends a @var{response}.  In
+the case of step and continue @var{command}s, the response is only sent
+when the operation has completed, and the target has again stopped all
+threads in all attached processes.  This is the default all-stop mode
+behavior, but the remote protocol also supports @value{GDBN}'s non-stop 
+execution mode; see @ref{Remote Non-Stop}, for details.
+
+ at var{packet-data} consists of a sequence of characters with the
+exception of @samp{#} and @samp{$} (see @samp{X} packet for additional
+exceptions).
+
+ at cindex remote protocol, field separator
+Fields within the packet should be separated using @samp{,} @samp{;} or
+ at samp{:}.  Except where otherwise noted all numbers are represented in
+ at sc{hex} with leading zeros suppressed.
+
+Implementors should note that prior to @value{GDBN} 5.0, the character
+ at samp{:} could not appear as the third character in a packet (as it
+would potentially conflict with the @var{sequence-id}).
+
+ at cindex remote protocol, binary data
+ at anchor{Binary Data}
+Binary data in most packets is encoded either as two hexadecimal
+digits per byte of binary data.  This allowed the traditional remote
+protocol to work over connections which were only seven-bit clean.
+Some packets designed more recently assume an eight-bit clean
+connection, and use a more efficient encoding to send and receive
+binary data.
+
+The binary data representation uses @code{7d} (@sc{ascii} @samp{@}})
+as an escape character.  Any escaped byte is transmitted as the escape
+character followed by the original character XORed with @code{0x20}.
+For example, the byte @code{0x7d} would be transmitted as the two
+bytes @code{0x7d 0x5d}.  The bytes @code{0x23} (@sc{ascii} @samp{#}),
+ at code{0x24} (@sc{ascii} @samp{$}), and @code{0x7d} (@sc{ascii}
+ at samp{@}}) must always be escaped.  Responses sent by the stub
+must also escape @code{0x2a} (@sc{ascii} @samp{*}), so that it
+is not interpreted as the start of a run-length encoded sequence
+(described next).
+
+Response @var{data} can be run-length encoded to save space.
+Run-length encoding replaces runs of identical characters with one
+instance of the repeated character, followed by a @samp{*} and a
+repeat count.  The repeat count is itself sent encoded, to avoid
+binary characters in @var{data}: a value of @var{n} is sent as
+ at code{@var{n}+29}.  For a repeat count greater or equal to 3, this
+produces a printable @sc{ascii} character, e.g.@: a space (@sc{ascii}
+code 32) for a repeat count of 3.  (This is because run-length
+encoding starts to win for counts 3 or more.)  Thus, for example,
+ at samp{0* } is a run-length encoding of ``0000'': the space character
+after @samp{*} means repeat the leading @code{0} @w{@code{32 - 29 =
+3}} more times.
+
+The printable characters @samp{#} and @samp{$} or with a numeric value
+greater than 126 must not be used.  Runs of six repeats (@samp{#}) or
+seven repeats (@samp{$}) can be expanded using a repeat count of only
+five (@samp{"}).  For example, @samp{00000000} can be encoded as
+ at samp{0*"00}.
+
+The error response returned for some packets includes a two character
+error number.  That number is not well defined.
+
+ at cindex empty response, for unsupported packets
+For any @var{command} not supported by the stub, an empty response
+(@samp{$#00}) should be returned.  That way it is possible to extend the
+protocol.  A newer @value{GDBN} can tell if a packet is supported based
+on that response.
+
+At a minimum, a stub is required to support the @samp{g} and @samp{G}
+commands for register access, and the @samp{m} and @samp{M} commands
+for memory access.  Stubs that only control single-threaded targets
+can implement run control with the @samp{c} (continue), and @samp{s}
+(step) commands.  Stubs that support multi-threading targets should
+support the @samp{vCont} command.  All other commands are optional.
+
+ at node Packets
+ at section Packets
+
+The following table provides a complete list of all currently defined
+ at var{command}s and their corresponding response @var{data}.
+ at xref{File-I/O Remote Protocol Extension}, for details about the File
+I/O extension of the remote protocol.
+
+Each packet's description has a template showing the packet's overall
+syntax, followed by an explanation of the packet's meaning.  We
+include spaces in some of the templates for clarity; these are not
+part of the packet's syntax.  No @value{GDBN} packet uses spaces to
+separate its components.  For example, a template like @samp{foo
+ at var{bar} @var{baz}} describes a packet beginning with the three ASCII
+bytes @samp{foo}, followed by a @var{bar}, followed directly by a
+ at var{baz}.  @value{GDBN} does not transmit a space character between the
+ at samp{foo} and the @var{bar}, or between the @var{bar} and the
+ at var{baz}.
+
+ at cindex @var{thread-id}, in remote protocol
+ at anchor{thread-id syntax} 
+Several packets and replies include a @var{thread-id} field to identify
+a thread.  Normally these are positive numbers with a target-specific
+interpretation, formatted as big-endian hex strings.  A @var{thread-id}
+can also be a literal @samp{-1} to indicate all threads, or @samp{0} to
+pick any thread.
+
+In addition, the remote protocol supports a multiprocess feature in
+which the @var{thread-id} syntax is extended to optionally include both
+process and thread ID fields, as @samp{p at var{pid}. at var{tid}}.
+The @var{pid} (process) and @var{tid} (thread) components each have the
+format described above: a positive number with target-specific
+interpretation formatted as a big-endian hex string, literal @samp{-1}
+to indicate all processes or threads (respectively), or @samp{0} to
+indicate an arbitrary process or thread.  Specifying just a process, as
+ at samp{p at var{pid}}, is equivalent to @samp{p at var{pid}.-1}.  It is an
+error to specify all processes but a specific thread, such as
+ at samp{p-1. at var{tid}}.  Note that the @samp{p} prefix is @emph{not} used
+for those packets and replies explicitly documented to include a process
+ID, rather than a @var{thread-id}.
+
+The multiprocess @var{thread-id} syntax extensions are only used if both
+ at value{GDBN} and the stub report support for the @samp{multiprocess}
+feature using @samp{qSupported}.  @xref{multiprocess extensions}, for
+more information.
+
+Note that all packet forms beginning with an upper- or lower-case
+letter, other than those described here, are reserved for future use.
+
+Here are the packet descriptions.
+
+ at table @samp
+
+ at item !
+ at cindex @samp{!} packet
+ at anchor{extended mode}
+Enable extended mode.  In extended mode, the remote server is made
+persistent.  The @samp{R} packet is used to restart the program being
+debugged.
+
+Reply:
+ at table @samp
+ at item OK
+The remote target both supports and has enabled extended mode.
+ at end table
+
+ at item ?
+ at cindex @samp{?} packet
+Indicate the reason the target halted.  The reply is the same as for
+step and continue.  This packet has a special interpretation when the
+target is in non-stop mode; see @ref{Remote Non-Stop}.
+
+Reply:
+ at xref{Stop Reply Packets}, for the reply specifications.
+
+ at item A @var{arglen}, at var{argnum}, at var{arg}, at dots{}
+ at cindex @samp{A} packet
+Initialized @code{argv[]} array passed into program. @var{arglen}
+specifies the number of bytes in the hex encoded byte stream
+ at var{arg}.  See @code{gdbserver} for more details.
+
+Reply:
+ at table @samp
+ at item OK
+The arguments were set.
+ at item E @var{NN}
+An error occurred.
+ at end table
+
+ at item b @var{baud}
+ at cindex @samp{b} packet
+(Don't use this packet; its behavior is not well-defined.)
+Change the serial line speed to @var{baud}.
+
+JTC: @emph{When does the transport layer state change?  When it's
+received, or after the ACK is transmitted.  In either case, there are
+problems if the command or the acknowledgment packet is dropped.}
+
+Stan: @emph{If people really wanted to add something like this, and get
+it working for the first time, they ought to modify ser-unix.c to send
+some kind of out-of-band message to a specially-setup stub and have the
+switch happen "in between" packets, so that from remote protocol's point
+of view, nothing actually happened.}
+
+ at item B @var{addr}, at var{mode}
+ at cindex @samp{B} packet
+Set (@var{mode} is @samp{S}) or clear (@var{mode} is @samp{C}) a
+breakpoint at @var{addr}.
+
+Don't use this packet.  Use the @samp{Z} and @samp{z} packets instead
+(@pxref{insert breakpoint or watchpoint packet}).
+
+ at cindex @samp{bc} packet
+ at anchor{bc}
+ at item bc
+Backward continue.  Execute the target system in reverse.  No parameter.
+ at xref{Reverse Execution}, for more information.
+
+Reply:
+ at xref{Stop Reply Packets}, for the reply specifications.
+
+ at cindex @samp{bs} packet
+ at anchor{bs}
+ at item bs
+Backward single step.  Execute one instruction in reverse.  No parameter.
+ at xref{Reverse Execution}, for more information.
+
+Reply:
+ at xref{Stop Reply Packets}, for the reply specifications.
+
+ at item c @r{[}@var{addr}@r{]}
+ at cindex @samp{c} packet
+Continue.  @var{addr} is address to resume.  If @var{addr} is omitted,
+resume at current address.
+
+This packet is deprecated for multi-threading support.  @xref{vCont
+packet}.
+
+Reply:
+ at xref{Stop Reply Packets}, for the reply specifications.
+
+ at item C @var{sig}@r{[};@var{addr}@r{]}
+ at cindex @samp{C} packet
+Continue with signal @var{sig} (hex signal number).  If
+ at samp{;@var{addr}} is omitted, resume at same address.
+
+This packet is deprecated for multi-threading support.  @xref{vCont
+packet}.
+
+Reply:
+ at xref{Stop Reply Packets}, for the reply specifications.
+
+ at item d
+ at cindex @samp{d} packet
+Toggle debug flag.
+
+Don't use this packet; instead, define a general set packet
+(@pxref{General Query Packets}).
+
+ at item D
+ at itemx D;@var{pid}
+ at cindex @samp{D} packet
+The first form of the packet is used to detach @value{GDBN} from the 
+remote system.  It is sent to the remote target
+before @value{GDBN} disconnects via the @code{detach} command.
+
+The second form, including a process ID, is used when multiprocess
+protocol extensions are enabled (@pxref{multiprocess extensions}), to
+detach only a specific process.  The @var{pid} is specified as a
+big-endian hex string.
+
+Reply:
+ at table @samp
+ at item OK
+for success
+ at item E @var{NN}
+for an error
+ at end table
+
+ at item F @var{RC}, at var{EE}, at var{CF};@var{XX}
+ at cindex @samp{F} packet
+A reply from @value{GDBN} to an @samp{F} packet sent by the target.
+This is part of the File-I/O protocol extension.  @xref{File-I/O
+Remote Protocol Extension}, for the specification.
+
+ at item g
+ at anchor{read registers packet}
+ at cindex @samp{g} packet
+Read general registers.
+
+Reply:
+ at table @samp
+ at item @var{XX at dots{}}
+Each byte of register data is described by two hex digits.  The bytes
+with the register are transmitted in target byte order.  The size of
+each register and their position within the @samp{g} packet are
+determined by the @value{GDBN} internal gdbarch functions
+ at code{DEPRECATED_REGISTER_RAW_SIZE} and @code{gdbarch_register_name}.  The
+specification of several standard @samp{g} packets is specified below.
+
+When reading registers from a trace frame (@pxref{Analyze Collected
+Data,,Using the Collected Data}), the stub may also return a string of
+literal @samp{x}'s in place of the register data digits, to indicate
+that the corresponding register has not been collected, thus its value
+is unavailable.  For example, for an architecture with 4 registers of
+4 bytes each, the following reply indicates to @value{GDBN} that
+registers 0 and 2 have not been collected, while registers 1 and 3
+have been collected, and both have zero value:
+
+ at smallexample
+-> @code{g}
+<- @code{xxxxxxxx00000000xxxxxxxx00000000}
+ at end smallexample
+
+ at item E @var{NN}
+for an error.
+ at end table
+
+ at item G @var{XX at dots{}}
+ at cindex @samp{G} packet
+Write general registers.  @xref{read registers packet}, for a
+description of the @var{XX at dots{}} data.
+
+Reply:
+ at table @samp
+ at item OK
+for success
+ at item E @var{NN}
+for an error
+ at end table
+
+ at item H @var{op} @var{thread-id}
+ at cindex @samp{H} packet
+Set thread for subsequent operations (@samp{m}, @samp{M}, @samp{g},
+ at samp{G}, et.al.).  @var{op} depends on the operation to be performed:
+it should be @samp{c} for step and continue operations (note that this
+is deprecated, supporting the @samp{vCont} command is a better
+option), @samp{g} for other operations.  The thread designator
+ at var{thread-id} has the format and interpretation described in
+ at ref{thread-id syntax}.
+
+Reply:
+ at table @samp
+ at item OK
+for success
+ at item E @var{NN}
+for an error
+ at end table
+
+ at c FIXME: JTC:
+ at c   'H': How restrictive (or permissive) is the thread model.  If a
+ at c        thread is selected and stopped, are other threads allowed
+ at c        to continue to execute?  As I mentioned above, I think the
+ at c        semantics of each command when a thread is selected must be
+ at c        described.  For example:
+ at c
+ at c        'g':    If the stub supports threads and a specific thread is
+ at c                selected, returns the register block from that thread;
+ at c                otherwise returns current registers.
+ at c
+ at c        'G'     If the stub supports threads and a specific thread is
+ at c                selected, sets the registers of the register block of
+ at c                that thread; otherwise sets current registers.
+
+ at item i @r{[}@var{addr}@r{[}, at var{nnn}@r{]]}
+ at anchor{cycle step packet}
+ at cindex @samp{i} packet
+Step the remote target by a single clock cycle.  If @samp{, at var{nnn}} is
+present, cycle step @var{nnn} cycles.  If @var{addr} is present, cycle
+step starting at that address.
+
+ at item I
+ at cindex @samp{I} packet
+Signal, then cycle step.  @xref{step with signal packet}.  @xref{cycle
+step packet}.
+
+ at item k
+ at cindex @samp{k} packet
+Kill request.
+
+FIXME: @emph{There is no description of how to operate when a specific
+thread context has been selected (i.e.@: does 'k' kill only that
+thread?)}.
+
+ at item m @var{addr}, at var{length}
+ at cindex @samp{m} packet
+Read @var{length} bytes of memory starting at address @var{addr}.
+Note that @var{addr} may not be aligned to any particular boundary.
+
+The stub need not use any particular size or alignment when gathering
+data from memory for the response; even if @var{addr} is word-aligned
+and @var{length} is a multiple of the word size, the stub is free to
+use byte accesses, or not.  For this reason, this packet may not be
+suitable for accessing memory-mapped I/O devices.
+ at cindex alignment of remote memory accesses
+ at cindex size of remote memory accesses
+ at cindex memory, alignment and size of remote accesses
+
+Reply:
+ at table @samp
+ at item @var{XX at dots{}}
+Memory contents; each byte is transmitted as a two-digit hexadecimal
+number.  The reply may contain fewer bytes than requested if the
+server was able to read only part of the region of memory.
+ at item E @var{NN}
+ at var{NN} is errno
+ at end table
+
+ at item M @var{addr}, at var{length}:@var{XX at dots{}}
+ at cindex @samp{M} packet
+Write @var{length} bytes of memory starting at address @var{addr}.
+ at var{XX at dots{}} is the data; each byte is transmitted as a two-digit
+hexadecimal number.
+
+Reply:
+ at table @samp
+ at item OK
+for success
+ at item E @var{NN}
+for an error (this includes the case where only part of the data was
+written).
+ at end table
+
+ at item p @var{n}
+ at cindex @samp{p} packet
+Read the value of register @var{n}; @var{n} is in hex.
+ at xref{read registers packet}, for a description of how the returned
+register value is encoded.
+
+Reply:
+ at table @samp
+ at item @var{XX at dots{}}
+the register's value
+ at item E @var{NN}
+for an error
+ at item
+Indicating an unrecognized @var{query}.
+ at end table
+
+ at item P @var{n at dots{}}=@var{r at dots{}}
+ at anchor{write register packet}
+ at cindex @samp{P} packet
+Write register @var{n at dots{}} with value @var{r at dots{}}.  The register
+number @var{n} is in hexadecimal, and @var{r at dots{}} contains two hex
+digits for each byte in the register (target byte order).
+
+Reply:
+ at table @samp
+ at item OK
+for success
+ at item E @var{NN}
+for an error
+ at end table
+
+ at item q @var{name} @var{params}@dots{}
+ at itemx Q @var{name} @var{params}@dots{}
+ at cindex @samp{q} packet
+ at cindex @samp{Q} packet
+General query (@samp{q}) and set (@samp{Q}).  These packets are
+described fully in @ref{General Query Packets}.
+
+ at item r
+ at cindex @samp{r} packet
+Reset the entire system.
+
+Don't use this packet; use the @samp{R} packet instead.
+
+ at item R @var{XX}
+ at cindex @samp{R} packet
+Restart the program being debugged.  @var{XX}, while needed, is ignored.
+This packet is only available in extended mode (@pxref{extended mode}).
+
+The @samp{R} packet has no reply.
+
+ at item s @r{[}@var{addr}@r{]}
+ at cindex @samp{s} packet
+Single step.  @var{addr} is the address at which to resume.  If
+ at var{addr} is omitted, resume at same address.
+
+This packet is deprecated for multi-threading support.  @xref{vCont
+packet}.
+
+Reply:
+ at xref{Stop Reply Packets}, for the reply specifications.
+
+ at item S @var{sig}@r{[};@var{addr}@r{]}
+ at anchor{step with signal packet}
+ at cindex @samp{S} packet
+Step with signal.  This is analogous to the @samp{C} packet, but
+requests a single-step, rather than a normal resumption of execution.
+
+This packet is deprecated for multi-threading support.  @xref{vCont
+packet}.
+
+Reply:
+ at xref{Stop Reply Packets}, for the reply specifications.
+
+ at item t @var{addr}:@var{PP}, at var{MM}
+ at cindex @samp{t} packet
+Search backwards starting at address @var{addr} for a match with pattern
+ at var{PP} and mask @var{MM}.  @var{PP} and @var{MM} are 4 bytes.
+ at var{addr} must be at least 3 digits.
+
+ at item T @var{thread-id}
+ at cindex @samp{T} packet
+Find out if the thread @var{thread-id} is alive.  @xref{thread-id syntax}.
+
+Reply:
+ at table @samp
+ at item OK
+thread is still alive
+ at item E @var{NN}
+thread is dead
+ at end table
+
+ at item v
+Packets starting with @samp{v} are identified by a multi-letter name,
+up to the first @samp{;} or @samp{?} (or the end of the packet).
+
+ at item vAttach;@var{pid}
+ at cindex @samp{vAttach} packet
+Attach to a new process with the specified process ID @var{pid}.
+The process ID is a
+hexadecimal integer identifying the process.  In all-stop mode, all
+threads in the attached process are stopped; in non-stop mode, it may be
+attached without being stopped if that is supported by the target.
+
+ at c In non-stop mode, on a successful vAttach, the stub should set the
+ at c current thread to a thread of the newly-attached process.  After
+ at c attaching, GDB queries for the attached process's thread ID with qC.
+ at c Also note that, from a user perspective, whether or not the 
+ at c target is stopped on attach in non-stop mode depends on whether you 
+ at c use the foreground or background version of the attach command, not 
+ at c on what vAttach does; GDB does the right thing with respect to either 
+ at c stopping or restarting threads.
+
+This packet is only available in extended mode (@pxref{extended mode}).
+
+Reply:
+ at table @samp
+ at item E @var{nn}
+for an error
+ at item @r{Any stop packet}
+for success in all-stop mode (@pxref{Stop Reply Packets})
+ at item OK
+for success in non-stop mode (@pxref{Remote Non-Stop})
+ at end table
+
+ at item vCont at r{[};@var{action}@r{[}:@var{thread-id}@r{]]}@dots{}
+ at cindex @samp{vCont} packet
+ at anchor{vCont packet}
+Resume the inferior, specifying different actions for each thread.
+If an action is specified with no @var{thread-id}, then it is applied to any
+threads that don't have a specific action specified; if no default action is
+specified then other threads should remain stopped in all-stop mode and
+in their current state in non-stop mode.
+Specifying multiple
+default actions is an error; specifying no actions is also an error.
+Thread IDs are specified using the syntax described in @ref{thread-id syntax}.
+
+Currently supported actions are:
+
+ at table @samp
+ at item c
+Continue.
+ at item C @var{sig}
+Continue with signal @var{sig}.  The signal @var{sig} should be two hex digits.
+ at item s
+Step.
+ at item S @var{sig}
+Step with signal @var{sig}.  The signal @var{sig} should be two hex digits.
+ at item t
+Stop.
+ at end table
+
+The optional argument @var{addr} normally associated with the 
+ at samp{c}, @samp{C}, @samp{s}, and @samp{S} packets is
+not supported in @samp{vCont}.
+
+The @samp{t} action is only relevant in non-stop mode
+(@pxref{Remote Non-Stop}) and may be ignored by the stub otherwise.
+A stop reply should be generated for any affected thread not already stopped.
+When a thread is stopped by means of a @samp{t} action,
+the corresponding stop reply should indicate that the thread has stopped with
+signal @samp{0}, regardless of whether the target uses some other signal
+as an implementation detail.
+
+The stub must support @samp{vCont} if it reports support for
+multiprocess extensions (@pxref{multiprocess extensions}).  Note that in
+this case @samp{vCont} actions can be specified to apply to all threads
+in a process by using the @samp{p at var{pid}.-1} form of the
+ at var{thread-id}.
+
+Reply:
+ at xref{Stop Reply Packets}, for the reply specifications.
+
+ at item vCont?
+ at cindex @samp{vCont?} packet
+Request a list of actions supported by the @samp{vCont} packet.
+
+Reply:
+ at table @samp
+ at item vCont at r{[};@var{action}@dots{}@r{]}
+The @samp{vCont} packet is supported.  Each @var{action} is a supported
+command in the @samp{vCont} packet.
+ at item
+The @samp{vCont} packet is not supported.
+ at end table
+
+ at item vFile:@var{operation}:@var{parameter}@dots{}
+ at cindex @samp{vFile} packet
+Perform a file operation on the target system.  For details,
+see @ref{Host I/O Packets}.
+
+ at item vFlashErase:@var{addr}, at var{length}
+ at cindex @samp{vFlashErase} packet
+Direct the stub to erase @var{length} bytes of flash starting at
+ at var{addr}.  The region may enclose any number of flash blocks, but
+its start and end must fall on block boundaries, as indicated by the
+flash block size appearing in the memory map (@pxref{Memory Map
+Format}).  @value{GDBN} groups flash memory programming operations
+together, and sends a @samp{vFlashDone} request after each group; the
+stub is allowed to delay erase operation until the @samp{vFlashDone}
+packet is received.
+
+Reply:
+ at table @samp
+ at item OK
+for success
+ at item E @var{NN}
+for an error
+ at end table
+
+ at item vFlashWrite:@var{addr}:@var{XX at dots{}}
+ at cindex @samp{vFlashWrite} packet
+Direct the stub to write data to flash address @var{addr}.  The data
+is passed in binary form using the same encoding as for the @samp{X}
+packet (@pxref{Binary Data}).  The memory ranges specified by
+ at samp{vFlashWrite} packets preceding a @samp{vFlashDone} packet must
+not overlap, and must appear in order of increasing addresses
+(although @samp{vFlashErase} packets for higher addresses may already
+have been received; the ordering is guaranteed only between
+ at samp{vFlashWrite} packets).  If a packet writes to an address that was
+neither erased by a preceding @samp{vFlashErase} packet nor by some other
+target-specific method, the results are unpredictable.
+
+
+Reply:
+ at table @samp
+ at item OK
+for success
+ at item E.memtype
+for vFlashWrite addressing non-flash memory
+ at item E @var{NN}
+for an error
+ at end table
+
+ at item vFlashDone
+ at cindex @samp{vFlashDone} packet
+Indicate to the stub that flash programming operation is finished.
+The stub is permitted to delay or batch the effects of a group of
+ at samp{vFlashErase} and @samp{vFlashWrite} packets until a
+ at samp{vFlashDone} packet is received.  The contents of the affected
+regions of flash memory are unpredictable until the @samp{vFlashDone}
+request is completed.
+
+ at item vKill;@var{pid}
+ at cindex @samp{vKill} packet
+Kill the process with the specified process ID.  @var{pid} is a
+hexadecimal integer identifying the process.  This packet is used in
+preference to @samp{k} when multiprocess protocol extensions are
+supported; see @ref{multiprocess extensions}.
+
+Reply:
+ at table @samp
+ at item E @var{nn}
+for an error
+ at item OK
+for success
+ at end table
+
+ at item vRun;@var{filename}@r{[};@var{argument}@r{]}@dots{}
+ at cindex @samp{vRun} packet
+Run the program @var{filename}, passing it each @var{argument} on its
+command line.  The file and arguments are hex-encoded strings.  If
+ at var{filename} is an empty string, the stub may use a default program
+(e.g.@: the last program run).  The program is created in the stopped
+state.
+
+ at c FIXME:  What about non-stop mode?
+
+This packet is only available in extended mode (@pxref{extended mode}).
+
+Reply:
+ at table @samp
+ at item E @var{nn}
+for an error
+ at item @r{Any stop packet}
+for success (@pxref{Stop Reply Packets})
+ at end table
+
+ at item vStopped
+ at anchor{vStopped packet}
+ at cindex @samp{vStopped} packet
+
+In non-stop mode (@pxref{Remote Non-Stop}), acknowledge a previous stop
+reply and prompt for the stub to report another one.
+
+Reply:
+ at table @samp
+ at item @r{Any stop packet}
+if there is another unreported stop event (@pxref{Stop Reply Packets})
+ at item OK
+if there are no unreported stop events
+ at end table
+
+ at item X @var{addr}, at var{length}:@var{XX at dots{}}
+ at anchor{X packet}
+ at cindex @samp{X} packet
+Write data to memory, where the data is transmitted in binary.
+ at var{addr} is address, @var{length} is number of bytes,
+ at samp{@var{XX}@dots{}} is binary data (@pxref{Binary Data}).
+
+Reply:
+ at table @samp
+ at item OK
+for success
+ at item E @var{NN}
+for an error
+ at end table
+
+ at item z @var{type}, at var{addr}, at var{kind}
+ at itemx Z @var{type}, at var{addr}, at var{kind}
+ at anchor{insert breakpoint or watchpoint packet}
+ at cindex @samp{z} packet
+ at cindex @samp{Z} packets
+Insert (@samp{Z}) or remove (@samp{z}) a @var{type} breakpoint or
+watchpoint starting at address @var{address} of kind @var{kind}.
+
+Each breakpoint and watchpoint packet @var{type} is documented
+separately.
+
+ at emph{Implementation notes: A remote target shall return an empty string
+for an unrecognized breakpoint or watchpoint packet @var{type}.  A
+remote target shall support either both or neither of a given
+ at samp{Z at var{type}@dots{}} and @samp{z at var{type}@dots{}} packet pair.  To
+avoid potential problems with duplicate packets, the operations should
+be implemented in an idempotent way.}
+
+ at item z0, at var{addr}, at var{kind}
+ at itemx Z0, at var{addr}, at var{kind}@r{[};@var{cond_list}@dots{}@r{]}@r{[};cmds:@var{persist}, at var{cmd_list}@dots{}@r{]}
+ at cindex @samp{z0} packet
+ at cindex @samp{Z0} packet
+Insert (@samp{Z0}) or remove (@samp{z0}) a memory breakpoint at address
+ at var{addr} of type @var{kind}.
+
+A memory breakpoint is implemented by replacing the instruction at
+ at var{addr} with a software breakpoint or trap instruction.  The
+ at var{kind} is target-specific and typically indicates the size of
+the breakpoint in bytes that should be inserted.  E.g., the @sc{arm}
+and @sc{mips} can insert either a 2 or 4 byte breakpoint.  Some
+architectures have additional meanings for @var{kind};
+ at var{cond_list} is an optional list of conditional expressions in bytecode
+form that should be evaluated on the target's side.  These are the
+conditions that should be taken into consideration when deciding if
+the breakpoint trigger should be reported back to @var{GDBN}.
+
+The @var{cond_list} parameter is comprised of a series of expressions,
+concatenated without separators. Each expression has the following form:
+
+ at table @samp
+
+ at item X @var{len}, at var{expr}
+ at var{len} is the length of the bytecode expression and @var{expr} is the
+actual conditional expression in bytecode form.
+
+ at end table
+
+The optional @var{cmd_list} parameter introduces commands that may be
+run on the target, rather than being reported back to @value{GDBN}.
+The parameter starts with a numeric flag @var{persist}; if the flag is
+nonzero, then the breakpoint may remain active and the commands
+continue to be run even when @value{GDBN} disconnects from the target.
+Following this flag is a series of expressions concatenated with no
+separators.  Each expression has the following form:
+
+ at table @samp
+
+ at item X @var{len}, at var{expr}
+ at var{len} is the length of the bytecode expression and @var{expr} is the
+actual conditional expression in bytecode form.
+
+ at end table
+
+see @ref{Architecture-Specific Protocol Details}.
+
+ at emph{Implementation note: It is possible for a target to copy or move
+code that contains memory breakpoints (e.g., when implementing
+overlays).  The behavior of this packet, in the presence of such a
+target, is not defined.}
+
+Reply:
+ at table @samp
+ at item OK
+success
+ at item
+not supported
+ at item E @var{NN}
+for an error
+ at end table
+
+ at item z1, at var{addr}, at var{kind}
+ at itemx Z1, at var{addr}, at var{kind}@r{[};@var{cond_list}@dots{}@r{]}
+ at cindex @samp{z1} packet
+ at cindex @samp{Z1} packet
+Insert (@samp{Z1}) or remove (@samp{z1}) a hardware breakpoint at
+address @var{addr}.
+
+A hardware breakpoint is implemented using a mechanism that is not
+dependant on being able to modify the target's memory.  @var{kind}
+and @var{cond_list} have the same meaning as in @samp{Z0} packets.
+
+ at emph{Implementation note: A hardware breakpoint is not affected by code
+movement.}
+
+Reply:
+ at table @samp
+ at item OK
+success
+ at item
+not supported
+ at item E @var{NN}
+for an error
+ at end table
+
+ at item z2, at var{addr}, at var{kind}
+ at itemx Z2, at var{addr}, at var{kind}
+ at cindex @samp{z2} packet
+ at cindex @samp{Z2} packet
+Insert (@samp{Z2}) or remove (@samp{z2}) a write watchpoint at @var{addr}.
+ at var{kind} is interpreted as the number of bytes to watch.
+
+Reply:
+ at table @samp
+ at item OK
+success
+ at item
+not supported
+ at item E @var{NN}
+for an error
+ at end table
+
+ at item z3, at var{addr}, at var{kind}
+ at itemx Z3, at var{addr}, at var{kind}
+ at cindex @samp{z3} packet
+ at cindex @samp{Z3} packet
+Insert (@samp{Z3}) or remove (@samp{z3}) a read watchpoint at @var{addr}.
+ at var{kind} is interpreted as the number of bytes to watch.
+
+Reply:
+ at table @samp
+ at item OK
+success
+ at item
+not supported
+ at item E @var{NN}
+for an error
+ at end table
+
+ at item z4, at var{addr}, at var{kind}
+ at itemx Z4, at var{addr}, at var{kind}
+ at cindex @samp{z4} packet
+ at cindex @samp{Z4} packet
+Insert (@samp{Z4}) or remove (@samp{z4}) an access watchpoint at @var{addr}.
+ at var{kind} is interpreted as the number of bytes to watch.
+
+Reply:
+ at table @samp
+ at item OK
+success
+ at item
+not supported
+ at item E @var{NN}
+for an error
+ at end table
+
+ at end table
+
+ at node Stop Reply Packets
+ at section Stop Reply Packets
+ at cindex stop reply packets
+
+The @samp{C}, @samp{c}, @samp{S}, @samp{s}, @samp{vCont},
+ at samp{vAttach}, @samp{vRun}, @samp{vStopped}, and @samp{?} packets can
+receive any of the below as a reply.  Except for @samp{?}
+and @samp{vStopped}, that reply is only returned
+when the target halts.  In the below the exact meaning of @dfn{signal
+number} is defined by the header @file{include/gdb/signals.h} in the
+ at value{GDBN} source code.
+
+As in the description of request packets, we include spaces in the
+reply templates for clarity; these are not part of the reply packet's
+syntax.  No @value{GDBN} stop reply packet uses spaces to separate its
+components.
+
+ at table @samp
+
+ at item S @var{AA}
+The program received signal number @var{AA} (a two-digit hexadecimal
+number).  This is equivalent to a @samp{T} response with no
+ at var{n}:@var{r} pairs.
+
+ at item T @var{AA} @var{n1}:@var{r1};@var{n2}:@var{r2};@dots{}
+ at cindex @samp{T} packet reply
+The program received signal number @var{AA} (a two-digit hexadecimal
+number).  This is equivalent to an @samp{S} response, except that the
+ at samp{@var{n}:@var{r}} pairs can carry values of important registers
+and other information directly in the stop reply packet, reducing
+round-trip latency.  Single-step and breakpoint traps are reported
+this way.  Each @samp{@var{n}:@var{r}} pair is interpreted as follows:
+
+ at itemize @bullet
+ at item
+If @var{n} is a hexadecimal number, it is a register number, and the
+corresponding @var{r} gives that register's value.  @var{r} is a
+series of bytes in target byte order, with each byte given by a
+two-digit hex number.
+
+ at item
+If @var{n} is @samp{thread}, then @var{r} is the @var{thread-id} of
+the stopped thread, as specified in @ref{thread-id syntax}.
+
+ at item
+If @var{n} is @samp{core}, then @var{r} is the hexadecimal number of
+the core on which the stop event was detected.
+
+ at item
+If @var{n} is a recognized @dfn{stop reason}, it describes a more
+specific event that stopped the target.  The currently defined stop
+reasons are listed below.  @var{aa} should be @samp{05}, the trap
+signal.  At most one stop reason should be present.
+
+ at item
+Otherwise, @value{GDBN} should ignore this @samp{@var{n}:@var{r}} pair
+and go on to the next; this allows us to extend the protocol in the
+future.
+ at end itemize
+
+The currently defined stop reasons are:
+
+ at table @samp
+ at item watch
+ at itemx rwatch
+ at itemx awatch
+The packet indicates a watchpoint hit, and @var{r} is the data address, in
+hex.
+
+ at cindex shared library events, remote reply
+ at item library
+The packet indicates that the loaded libraries have changed.
+ at value{GDBN} should use @samp{qXfer:libraries:read} to fetch a new
+list of loaded libraries.  @var{r} is ignored.
+
+ at cindex replay log events, remote reply
+ at item replaylog
+The packet indicates that the target cannot continue replaying 
+logged execution events, because it has reached the end (or the
+beginning when executing backward) of the log.  The value of @var{r}
+will be either @samp{begin} or @samp{end}.  @xref{Reverse Execution}, 
+for more information.
+ at end table
+
+ at item W @var{AA}
+ at itemx W @var{AA} ; process:@var{pid}
+The process exited, and @var{AA} is the exit status.  This is only
+applicable to certain targets.
+
+The second form of the response, including the process ID of the exited
+process, can be used only when @value{GDBN} has reported support for
+multiprocess protocol extensions; see @ref{multiprocess extensions}.
+The @var{pid} is formatted as a big-endian hex string.
+
+ at item X @var{AA}
+ at itemx X @var{AA} ; process:@var{pid}
+The process terminated with signal @var{AA}.
+
+The second form of the response, including the process ID of the
+terminated process, can be used only when @value{GDBN} has reported
+support for multiprocess protocol extensions; see @ref{multiprocess
+extensions}.  The @var{pid} is formatted as a big-endian hex string.
+
+ at item O @var{XX}@dots{}
+ at samp{@var{XX}@dots{}} is hex encoding of @sc{ascii} data, to be
+written as the program's console output.  This can happen at any time
+while the program is running and the debugger should continue to wait
+for @samp{W}, @samp{T}, etc.  This reply is not permitted in non-stop mode.
+
+ at item F @var{call-id}, at var{parameter}@dots{}
+ at var{call-id} is the identifier which says which host system call should
+be called.  This is just the name of the function.  Translation into the
+correct system call is only applicable as it's defined in @value{GDBN}.
+ at xref{File-I/O Remote Protocol Extension}, for a list of implemented
+system calls.
+
+ at samp{@var{parameter}@dots{}} is a list of parameters as defined for
+this very system call.
+
+The target replies with this packet when it expects @value{GDBN} to
+call a host system call on behalf of the target.  @value{GDBN} replies
+with an appropriate @samp{F} packet and keeps up waiting for the next
+reply packet from the target.  The latest @samp{C}, @samp{c}, @samp{S}
+or @samp{s} action is expected to be continued.  @xref{File-I/O Remote
+Protocol Extension}, for more details.
+
+ at end table
+
+ at node General Query Packets
+ at section General Query Packets
+ at cindex remote query requests
+
+Packets starting with @samp{q} are @dfn{general query packets};
+packets starting with @samp{Q} are @dfn{general set packets}.  General
+query and set packets are a semi-unified form for retrieving and
+sending information to and from the stub.
+
+The initial letter of a query or set packet is followed by a name
+indicating what sort of thing the packet applies to.  For example,
+ at value{GDBN} may use a @samp{qSymbol} packet to exchange symbol
+definitions with the stub.  These packet names follow some
+conventions:
+
+ at itemize @bullet
+ at item
+The name must not contain commas, colons or semicolons.
+ at item
+Most @value{GDBN} query and set packets have a leading upper case
+letter.
+ at item
+The names of custom vendor packets should use a company prefix, in
+lower case, followed by a period.  For example, packets designed at
+the Acme Corporation might begin with @samp{qacme.foo} (for querying
+foos) or @samp{Qacme.bar} (for setting bars).
+ at end itemize
+
+The name of a query or set packet should be separated from any
+parameters by a @samp{:}; the parameters themselves should be
+separated by @samp{,} or @samp{;}.  Stubs must be careful to match the
+full packet name, and check for a separator or the end of the packet,
+in case two packet names share a common prefix.  New packets should not begin
+with @samp{qC}, @samp{qP}, or @samp{qL}@footnote{The @samp{qP} and @samp{qL}
+packets predate these conventions, and have arguments without any terminator
+for the packet name; we suspect they are in widespread use in places that
+are difficult to upgrade.  The @samp{qC} packet has no arguments, but some
+existing stubs (e.g.@: RedBoot) are known to not check for the end of the
+packet.}.
+
+Like the descriptions of the other packets, each description here
+has a template showing the packet's overall syntax, followed by an
+explanation of the packet's meaning.  We include spaces in some of the
+templates for clarity; these are not part of the packet's syntax.  No
+ at value{GDBN} packet uses spaces to separate its components.
+
+Here are the currently defined query and set packets:
+
+ at table @samp
+
+ at item QAgent:1
+ at item QAgent:0
+Turn on or off the agent as a helper to perform some debugging operations
+delegated from @value{GDBN} (@pxref{Control Agent}).
+
+ at item QAllow:@var{op}:@var{val}@dots{}
+ at cindex @samp{QAllow} packet
+Specify which operations @value{GDBN} expects to request of the
+target, as a semicolon-separated list of operation name and value
+pairs.  Possible values for @var{op} include @samp{WriteReg},
+ at samp{WriteMem}, @samp{InsertBreak}, @samp{InsertTrace},
+ at samp{InsertFastTrace}, and @samp{Stop}. @var{val} is either 0,
+indicating that @value{GDBN} will not request the operation, or 1,
+indicating that it may.  (The target can then use this to set up its
+own internals optimally, for instance if the debugger never expects to
+insert breakpoints, it may not need to install its own trap handler.)
+
+ at item qC
+ at cindex current thread, remote request
+ at cindex @samp{qC} packet
+Return the current thread ID.
+
+Reply:
+ at table @samp
+ at item QC @var{thread-id}
+Where @var{thread-id} is a thread ID as documented in 
+ at ref{thread-id syntax}.
+ at item @r{(anything else)}
+Any other reply implies the old thread ID.
+ at end table
+
+ at item qCRC:@var{addr}, at var{length}
+ at cindex CRC of memory block, remote request
+ at cindex @samp{qCRC} packet
+Compute the CRC checksum of a block of memory using CRC-32 defined in
+IEEE 802.3.  The CRC is computed byte at a time, taking the most
+significant bit of each byte first.  The initial pattern code
+ at code{0xffffffff} is used to ensure leading zeros affect the CRC.
+
+ at emph{Note:} This is the same CRC used in validating separate debug
+files (@pxref{Separate Debug Files, , Debugging Information in Separate
+Files}).  However the algorithm is slightly different.  When validating
+separate debug files, the CRC is computed taking the @emph{least}
+significant bit of each byte first, and the final result is inverted to
+detect trailing zeros.
+
+Reply:
+ at table @samp
+ at item E @var{NN}
+An error (such as memory fault)
+ at item C @var{crc32}
+The specified memory region's checksum is @var{crc32}.
+ at end table
+
+ at item QDisableRandomization:@var{value}
+ at cindex disable address space randomization, remote request
+ at cindex @samp{QDisableRandomization} packet
+Some target operating systems will randomize the virtual address space
+of the inferior process as a security feature, but provide a feature
+to disable such randomization, e.g.@: to allow for a more deterministic
+debugging experience.  On such systems, this packet with a @var{value}
+of 1 directs the target to disable address space randomization for
+processes subsequently started via @samp{vRun} packets, while a packet
+with a @var{value} of 0 tells the target to enable address space
+randomization.
+
+This packet is only available in extended mode (@pxref{extended mode}).
+
+Reply:
+ at table @samp
+ at item OK
+The request succeeded.
+
+ at item E @var{nn}
+An error occurred.  @var{nn} are hex digits.
+
+ at item
+An empty reply indicates that @samp{QDisableRandomization} is not supported
+by the stub.
+ at end table
+
+This packet is not probed by default; the remote stub must request it,
+by supplying an appropriate @samp{qSupported} response (@pxref{qSupported}).
+This should only be done on targets that actually support disabling
+address space randomization.
+
+ at item qfThreadInfo
+ at itemx qsThreadInfo
+ at cindex list active threads, remote request
+ at cindex @samp{qfThreadInfo} packet
+ at cindex @samp{qsThreadInfo} packet
+Obtain a list of all active thread IDs from the target (OS).  Since there
+may be too many active threads to fit into one reply packet, this query
+works iteratively: it may require more than one query/reply sequence to
+obtain the entire list of threads.  The first query of the sequence will
+be the @samp{qfThreadInfo} query; subsequent queries in the
+sequence will be the @samp{qsThreadInfo} query.
+
+NOTE: This packet replaces the @samp{qL} query (see below).
+
+Reply:
+ at table @samp
+ at item m @var{thread-id}
+A single thread ID
+ at item m @var{thread-id}, at var{thread-id}@dots{}
+a comma-separated list of thread IDs
+ at item l
+(lower case letter @samp{L}) denotes end of list.
+ at end table
+
+In response to each query, the target will reply with a list of one or
+more thread IDs, separated by commas.
+ at value{GDBN} will respond to each reply with a request for more thread
+ids (using the @samp{qs} form of the query), until the target responds
+with @samp{l} (lower-case ell, for @dfn{last}).
+Refer to @ref{thread-id syntax}, for the format of the @var{thread-id}
+fields.
+
+ at item qGetTLSAddr:@var{thread-id}, at var{offset}, at var{lm}
+ at cindex get thread-local storage address, remote request
+ at cindex @samp{qGetTLSAddr} packet
+Fetch the address associated with thread local storage specified
+by @var{thread-id}, @var{offset}, and @var{lm}.
+
+ at var{thread-id} is the thread ID associated with the
+thread for which to fetch the TLS address.  @xref{thread-id syntax}.
+
+ at var{offset} is the (big endian, hex encoded) offset associated with the
+thread local variable.  (This offset is obtained from the debug
+information associated with the variable.)
+
+ at var{lm} is the (big endian, hex encoded) OS/ABI-specific encoding of the
+load module associated with the thread local storage.  For example,
+a @sc{gnu}/Linux system will pass the link map address of the shared
+object associated with the thread local storage under consideration. 
+Other operating environments may choose to represent the load module
+differently, so the precise meaning of this parameter will vary.
+
+Reply:
+ at table @samp
+ at item @var{XX}@dots{}
+Hex encoded (big endian) bytes representing the address of the thread
+local storage requested.
+
+ at item E @var{nn}
+An error occurred.  @var{nn} are hex digits.
+
+ at item
+An empty reply indicates that @samp{qGetTLSAddr} is not supported by the stub.
+ at end table
+
+ at item qGetTIBAddr:@var{thread-id}
+ at cindex get thread information block address
+ at cindex @samp{qGetTIBAddr} packet
+Fetch address of the Windows OS specific Thread Information Block.
+
+ at var{thread-id} is the thread ID associated with the thread.
+
+Reply:
+ at table @samp
+ at item @var{XX}@dots{}
+Hex encoded (big endian) bytes representing the linear address of the
+thread information block.
+
+ at item E @var{nn}
+An error occured.  This means that either the thread was not found, or the
+address could not be retrieved.
+
+ at item
+An empty reply indicates that @samp{qGetTIBAddr} is not supported by the stub.
+ at end table
+
+ at item qL @var{startflag} @var{threadcount} @var{nextthread}
+Obtain thread information from RTOS.  Where: @var{startflag} (one hex
+digit) is one to indicate the first query and zero to indicate a
+subsequent query; @var{threadcount} (two hex digits) is the maximum
+number of threads the response packet can contain; and @var{nextthread}
+(eight hex digits), for subsequent queries (@var{startflag} is zero), is
+returned in the response as @var{argthread}.
+
+Don't use this packet; use the @samp{qfThreadInfo} query instead (see above).
+
+Reply:
+ at table @samp
+ at item qM @var{count} @var{done} @var{argthread} @var{thread}@dots{}
+Where: @var{count} (two hex digits) is the number of threads being
+returned; @var{done} (one hex digit) is zero to indicate more threads
+and one indicates no further threads; @var{argthreadid} (eight hex
+digits) is @var{nextthread} from the request packet; @var{thread}@dots{}
+is a sequence of thread IDs from the target.  @var{threadid} (eight hex
+digits).  See @code{remote.c:parse_threadlist_response()}.
+ at end table
+
+ at item qOffsets
+ at cindex section offsets, remote request
+ at cindex @samp{qOffsets} packet
+Get section offsets that the target used when relocating the downloaded
+image.
+
+Reply:
+ at table @samp
+ at item Text=@var{xxx};Data=@var{yyy}@r{[};Bss=@var{zzz}@r{]}
+Relocate the @code{Text} section by @var{xxx} from its original address.
+Relocate the @code{Data} section by @var{yyy} from its original address.
+If the object file format provides segment information (e.g.@: @sc{elf}
+ at samp{PT_LOAD} program headers), @value{GDBN} will relocate entire
+segments by the supplied offsets.
+
+ at emph{Note: while a @code{Bss} offset may be included in the response,
+ at value{GDBN} ignores this and instead applies the @code{Data} offset
+to the @code{Bss} section.}
+
+ at item TextSeg=@var{xxx}@r{[};DataSeg=@var{yyy}@r{]}
+Relocate the first segment of the object file, which conventionally
+contains program code, to a starting address of @var{xxx}.  If
+ at samp{DataSeg} is specified, relocate the second segment, which
+conventionally contains modifiable data, to a starting address of
+ at var{yyy}.  @value{GDBN} will report an error if the object file
+does not contain segment information, or does not contain at least
+as many segments as mentioned in the reply.  Extra segments are
+kept at fixed offsets relative to the last relocated segment.
+ at end table
+
+ at item qP @var{mode} @var{thread-id}
+ at cindex thread information, remote request
+ at cindex @samp{qP} packet
+Returns information on @var{thread-id}.  Where: @var{mode} is a hex
+encoded 32 bit mode; @var{thread-id} is a thread ID 
+(@pxref{thread-id syntax}).
+
+Don't use this packet; use the @samp{qThreadExtraInfo} query instead
+(see below).
+
+Reply: see @code{remote.c:remote_unpack_thread_info_response()}.
+
+ at item QNonStop:1
+ at item QNonStop:0
+ at cindex non-stop mode, remote request
+ at cindex @samp{QNonStop} packet
+ at anchor{QNonStop}
+Enter non-stop (@samp{QNonStop:1}) or all-stop (@samp{QNonStop:0}) mode.
+ at xref{Remote Non-Stop}, for more information.
+
+Reply:
+ at table @samp
+ at item OK
+The request succeeded.
+
+ at item E @var{nn}
+An error occurred.  @var{nn} are hex digits.
+
+ at item
+An empty reply indicates that @samp{QNonStop} is not supported by
+the stub.
+ at end table
+
+This packet is not probed by default; the remote stub must request it,
+by supplying an appropriate @samp{qSupported} response (@pxref{qSupported}).
+Use of this packet is controlled by the @code{set non-stop} command; 
+ at pxref{Non-Stop Mode}.
+
+ at item QPassSignals: @var{signal} @r{[};@var{signal}@r{]}@dots{}
+ at cindex pass signals to inferior, remote request
+ at cindex @samp{QPassSignals} packet
+ at anchor{QPassSignals}
+Each listed @var{signal} should be passed directly to the inferior process. 
+Signals are numbered identically to continue packets and stop replies
+(@pxref{Stop Reply Packets}).  Each @var{signal} list item should be
+strictly greater than the previous item.  These signals do not need to stop
+the inferior, or be reported to @value{GDBN}.  All other signals should be
+reported to @value{GDBN}.  Multiple @samp{QPassSignals} packets do not
+combine; any earlier @samp{QPassSignals} list is completely replaced by the
+new list.  This packet improves performance when using @samp{handle
+ at var{signal} nostop noprint pass}.
+
+Reply:
+ at table @samp
+ at item OK
+The request succeeded.
+
+ at item E @var{nn}
+An error occurred.  @var{nn} are hex digits.
+
+ at item
+An empty reply indicates that @samp{QPassSignals} is not supported by
+the stub.
+ at end table
+
+Use of this packet is controlled by the @code{set remote pass-signals}
+command (@pxref{Remote Configuration, set remote pass-signals}).
+This packet is not probed by default; the remote stub must request it,
+by supplying an appropriate @samp{qSupported} response (@pxref{qSupported}).
+
+ at item QProgramSignals: @var{signal} @r{[};@var{signal}@r{]}@dots{}
+ at cindex signals the inferior may see, remote request
+ at cindex @samp{QProgramSignals} packet
+ at anchor{QProgramSignals}
+Each listed @var{signal} may be delivered to the inferior process.
+Others should be silently discarded.
+
+In some cases, the remote stub may need to decide whether to deliver a
+signal to the program or not without @value{GDBN} involvement.  One
+example of that is while detaching --- the program's threads may have
+stopped for signals that haven't yet had a chance of being reported to
+ at value{GDBN}, and so the remote stub can use the signal list specified
+by this packet to know whether to deliver or ignore those pending
+signals.
+
+This does not influence whether to deliver a signal as requested by a
+resumption packet (@pxref{vCont packet}).
+
+Signals are numbered identically to continue packets and stop replies
+(@pxref{Stop Reply Packets}).  Each @var{signal} list item should be
+strictly greater than the previous item.  Multiple
+ at samp{QProgramSignals} packets do not combine; any earlier
+ at samp{QProgramSignals} list is completely replaced by the new list.
+
+Reply:
+ at table @samp
+ at item OK
+The request succeeded.
+
+ at item E @var{nn}
+An error occurred.  @var{nn} are hex digits.
+
+ at item
+An empty reply indicates that @samp{QProgramSignals} is not supported
+by the stub.
+ at end table
+
+Use of this packet is controlled by the @code{set remote program-signals}
+command (@pxref{Remote Configuration, set remote program-signals}).
+This packet is not probed by default; the remote stub must request it,
+by supplying an appropriate @samp{qSupported} response (@pxref{qSupported}).
+
+ at item qRcmd, at var{command}
+ at cindex execute remote command, remote request
+ at cindex @samp{qRcmd} packet
+ at var{command} (hex encoded) is passed to the local interpreter for
+execution.  Invalid commands should be reported using the output
+string.  Before the final result packet, the target may also respond
+with a number of intermediate @samp{O at var{output}} console output
+packets.  @emph{Implementors should note that providing access to a
+stubs's interpreter may have security implications}.
+
+Reply:
+ at table @samp
+ at item OK
+A command response with no output.
+ at item @var{OUTPUT}
+A command response with the hex encoded output string @var{OUTPUT}.
+ at item E @var{NN}
+Indicate a badly formed request.
+ at item
+An empty reply indicates that @samp{qRcmd} is not recognized.
+ at end table
+
+(Note that the @code{qRcmd} packet's name is separated from the
+command by a @samp{,}, not a @samp{:}, contrary to the naming
+conventions above.  Please don't use this packet as a model for new
+packets.)
+
+ at item qSearch:memory:@var{address};@var{length};@var{search-pattern}
+ at cindex searching memory, in remote debugging
+ at cindex @samp{qSearch:memory} packet
+ at anchor{qSearch memory}
+Search @var{length} bytes at @var{address} for @var{search-pattern}.
+ at var{address} and @var{length} are encoded in hex.
+ at var{search-pattern} is a sequence of bytes, hex encoded.
+
+Reply:
+ at table @samp
+ at item 0
+The pattern was not found.
+ at item 1,address
+The pattern was found at @var{address}.
+ at item E @var{NN}
+A badly formed request or an error was encountered while searching memory.
+ at item
+An empty reply indicates that @samp{qSearch:memory} is not recognized.
+ at end table
+
+ at item QStartNoAckMode
+ at cindex @samp{QStartNoAckMode} packet
+ at anchor{QStartNoAckMode}
+Request that the remote stub disable the normal @samp{+}/@samp{-}
+protocol acknowledgments (@pxref{Packet Acknowledgment}).
+
+Reply:
+ at table @samp
+ at item OK
+The stub has switched to no-acknowledgment mode.
+ at value{GDBN} acknowledges this reponse,
+but neither the stub nor @value{GDBN} shall send or expect further
+ at samp{+}/@samp{-} acknowledgments in the current connection.
+ at item
+An empty reply indicates that the stub does not support no-acknowledgment mode.
+ at end table
+
+ at item qSupported @r{[}:@var{gdbfeature} @r{[};@var{gdbfeature}@r{]}@dots{} @r{]}
+ at cindex supported packets, remote query
+ at cindex features of the remote protocol
+ at cindex @samp{qSupported} packet
+ at anchor{qSupported}
+Tell the remote stub about features supported by @value{GDBN}, and
+query the stub for features it supports.  This packet allows
+ at value{GDBN} and the remote stub to take advantage of each others'
+features.  @samp{qSupported} also consolidates multiple feature probes
+at startup, to improve @value{GDBN} performance---a single larger
+packet performs better than multiple smaller probe packets on
+high-latency links.  Some features may enable behavior which must not
+be on by default, e.g.@: because it would confuse older clients or
+stubs.  Other features may describe packets which could be
+automatically probed for, but are not.  These features must be
+reported before @value{GDBN} will use them.  This ``default
+unsupported'' behavior is not appropriate for all packets, but it
+helps to keep the initial connection time under control with new
+versions of @value{GDBN} which support increasing numbers of packets.
+
+Reply:
+ at table @samp
+ at item @var{stubfeature} @r{[};@var{stubfeature}@r{]}@dots{}
+The stub supports or does not support each returned @var{stubfeature},
+depending on the form of each @var{stubfeature} (see below for the
+possible forms).
+ at item
+An empty reply indicates that @samp{qSupported} is not recognized,
+or that no features needed to be reported to @value{GDBN}.
+ at end table
+
+The allowed forms for each feature (either a @var{gdbfeature} in the
+ at samp{qSupported} packet, or a @var{stubfeature} in the response)
+are:
+
+ at table @samp
+ at item @var{name}=@var{value}
+The remote protocol feature @var{name} is supported, and associated
+with the specified @var{value}.  The format of @var{value} depends
+on the feature, but it must not include a semicolon.
+ at item @var{name}+
+The remote protocol feature @var{name} is supported, and does not
+need an associated value.
+ at item @var{name}-
+The remote protocol feature @var{name} is not supported.
+ at item @var{name}?
+The remote protocol feature @var{name} may be supported, and
+ at value{GDBN} should auto-detect support in some other way when it is
+needed.  This form will not be used for @var{gdbfeature} notifications,
+but may be used for @var{stubfeature} responses.
+ at end table
+
+Whenever the stub receives a @samp{qSupported} request, the
+supplied set of @value{GDBN} features should override any previous
+request.  This allows @value{GDBN} to put the stub in a known
+state, even if the stub had previously been communicating with
+a different version of @value{GDBN}.
+
+The following values of @var{gdbfeature} (for the packet sent by @value{GDBN})
+are defined:  
+
+ at table @samp
+ at item multiprocess
+This feature indicates whether @value{GDBN} supports multiprocess 
+extensions to the remote protocol.  @value{GDBN} does not use such
+extensions unless the stub also reports that it supports them by
+including @samp{multiprocess+} in its @samp{qSupported} reply.
+ at xref{multiprocess extensions}, for details.
+
+ at item xmlRegisters
+This feature indicates that @value{GDBN} supports the XML target
+description.  If the stub sees @samp{xmlRegisters=} with target
+specific strings separated by a comma, it will report register
+description.
+
+ at item qRelocInsn
+This feature indicates whether @value{GDBN} supports the
+ at samp{qRelocInsn} packet (@pxref{Tracepoint Packets,,Relocate
+instruction reply packet}).
+ at end table
+
+Stubs should ignore any unknown values for
+ at var{gdbfeature}.  Any @value{GDBN} which sends a @samp{qSupported}
+packet supports receiving packets of unlimited length (earlier
+versions of @value{GDBN} may reject overly long responses).  Additional values
+for @var{gdbfeature} may be defined in the future to let the stub take
+advantage of new features in @value{GDBN}, e.g.@: incompatible
+improvements in the remote protocol---the @samp{multiprocess} feature is
+an example of such a feature.  The stub's reply should be independent
+of the @var{gdbfeature} entries sent by @value{GDBN}; first @value{GDBN}
+describes all the features it supports, and then the stub replies with
+all the features it supports.
+
+Similarly, @value{GDBN} will silently ignore unrecognized stub feature
+responses, as long as each response uses one of the standard forms.
+
+Some features are flags.  A stub which supports a flag feature
+should respond with a @samp{+} form response.  Other features
+require values, and the stub should respond with an @samp{=}
+form response.
+
+Each feature has a default value, which @value{GDBN} will use if
+ at samp{qSupported} is not available or if the feature is not mentioned
+in the @samp{qSupported} response.  The default values are fixed; a
+stub is free to omit any feature responses that match the defaults.
+
+Not all features can be probed, but for those which can, the probing
+mechanism is useful: in some cases, a stub's internal
+architecture may not allow the protocol layer to know some information
+about the underlying target in advance.  This is especially common in
+stubs which may be configured for multiple targets.
+
+These are the currently defined stub features and their properties:
+
+ at multitable @columnfractions 0.35 0.2 0.12 0.2
+ at c NOTE: The first row should be @headitem, but we do not yet require
+ at c a new enough version of Texinfo (4.7) to use @headitem.
+ at item Feature Name
+ at tab Value Required
+ at tab Default
+ at tab Probe Allowed
+
+ at item @samp{PacketSize}
+ at tab Yes
+ at tab @samp{-}
+ at tab No
+
+ at item @samp{qXfer:auxv:read}
+ at tab No
+ at tab @samp{-}
+ at tab Yes
+
+ at item @samp{qXfer:features:read}
+ at tab No
+ at tab @samp{-}
+ at tab Yes
+
+ at item @samp{qXfer:libraries:read}
+ at tab No
+ at tab @samp{-}
+ at tab Yes
+
+ at item @samp{qXfer:memory-map:read}
+ at tab No
+ at tab @samp{-}
+ at tab Yes
+
+ at item @samp{qXfer:sdata:read}
+ at tab No
+ at tab @samp{-}
+ at tab Yes
+
+ at item @samp{qXfer:spu:read}
+ at tab No
+ at tab @samp{-}
+ at tab Yes
+
+ at item @samp{qXfer:spu:write}
+ at tab No
+ at tab @samp{-}
+ at tab Yes
+
+ at item @samp{qXfer:siginfo:read}
+ at tab No
+ at tab @samp{-}
+ at tab Yes
+
+ at item @samp{qXfer:siginfo:write}
+ at tab No
+ at tab @samp{-}
+ at tab Yes
+
+ at item @samp{qXfer:threads:read}
+ at tab No
+ at tab @samp{-}
+ at tab Yes
+
+ at item @samp{qXfer:traceframe-info:read}
+ at tab No
+ at tab @samp{-}
+ at tab Yes
+
+ at item @samp{qXfer:uib:read}
+ at tab No
+ at tab @samp{-}
+ at tab Yes
+
+ at item @samp{qXfer:fdpic:read}
+ at tab No
+ at tab @samp{-}
+ at tab Yes
+
+ at item @samp{QNonStop}
+ at tab No
+ at tab @samp{-}
+ at tab Yes
+
+ at item @samp{QPassSignals}
+ at tab No
+ at tab @samp{-}
+ at tab Yes
+
+ at item @samp{QStartNoAckMode}
+ at tab No
+ at tab @samp{-}
+ at tab Yes
+
+ at item @samp{multiprocess}
+ at tab No
+ at tab @samp{-}
+ at tab No
+
+ at item @samp{ConditionalBreakpoints}
+ at tab No
+ at tab @samp{-}
+ at tab No
+
+ at item @samp{ConditionalTracepoints}
+ at tab No
+ at tab @samp{-}
+ at tab No
+
+ at item @samp{ReverseContinue}
+ at tab No
+ at tab @samp{-}
+ at tab No
+
+ at item @samp{ReverseStep}
+ at tab No
+ at tab @samp{-}
+ at tab No
+
+ at item @samp{TracepointSource}
+ at tab No
+ at tab @samp{-}
+ at tab No
+
+ at item @samp{QAgent}
+ at tab No
+ at tab @samp{-}
+ at tab No
+
+ at item @samp{QAllow}
+ at tab No
+ at tab @samp{-}
+ at tab No
+
+ at item @samp{QDisableRandomization}
+ at tab No
+ at tab @samp{-}
+ at tab No
+
+ at item @samp{EnableDisableTracepoints}
+ at tab No
+ at tab @samp{-}
+ at tab No
+
+ at item @samp{tracenz}
+ at tab No
+ at tab @samp{-}
+ at tab No
+
+ at item @samp{BreakpointCommands}
+ at tab No
+ at tab @samp{-}
+ at tab No
+
+ at end multitable
+
+These are the currently defined stub features, in more detail:
+
+ at table @samp
+ at cindex packet size, remote protocol
+ at item PacketSize=@var{bytes}
+The remote stub can accept packets up to at least @var{bytes} in
+length.  @value{GDBN} will send packets up to this size for bulk
+transfers, and will never send larger packets.  This is a limit on the
+data characters in the packet, including the frame and checksum.
+There is no trailing NUL byte in a remote protocol packet; if the stub
+stores packets in a NUL-terminated format, it should allow an extra
+byte in its buffer for the NUL.  If this stub feature is not supported,
+ at value{GDBN} guesses based on the size of the @samp{g} packet response.
+
+ at item qXfer:auxv:read
+The remote stub understands the @samp{qXfer:auxv:read} packet
+(@pxref{qXfer auxiliary vector read}).
+
+ at item qXfer:features:read
+The remote stub understands the @samp{qXfer:features:read} packet
+(@pxref{qXfer target description read}).
+
+ at item qXfer:libraries:read
+The remote stub understands the @samp{qXfer:libraries:read} packet
+(@pxref{qXfer library list read}).
+
+ at item qXfer:libraries-svr4:read
+The remote stub understands the @samp{qXfer:libraries-svr4:read} packet
+(@pxref{qXfer svr4 library list read}).
+
+ at item qXfer:memory-map:read
+The remote stub understands the @samp{qXfer:memory-map:read} packet
+(@pxref{qXfer memory map read}).
+
+ at item qXfer:sdata:read
+The remote stub understands the @samp{qXfer:sdata:read} packet
+(@pxref{qXfer sdata read}).
+
+ at item qXfer:spu:read
+The remote stub understands the @samp{qXfer:spu:read} packet
+(@pxref{qXfer spu read}).
+
+ at item qXfer:spu:write
+The remote stub understands the @samp{qXfer:spu:write} packet
+(@pxref{qXfer spu write}).
+
+ at item qXfer:siginfo:read
+The remote stub understands the @samp{qXfer:siginfo:read} packet
+(@pxref{qXfer siginfo read}).
+
+ at item qXfer:siginfo:write
+The remote stub understands the @samp{qXfer:siginfo:write} packet
+(@pxref{qXfer siginfo write}).
+
+ at item qXfer:threads:read
+The remote stub understands the @samp{qXfer:threads:read} packet
+(@pxref{qXfer threads read}).
+
+ at item qXfer:traceframe-info:read
+The remote stub understands the @samp{qXfer:traceframe-info:read}
+packet (@pxref{qXfer traceframe info read}).
+
+ at item qXfer:uib:read
+The remote stub understands the @samp{qXfer:uib:read}
+packet (@pxref{qXfer unwind info block}).
+
+ at item qXfer:fdpic:read
+The remote stub understands the @samp{qXfer:fdpic:read}
+packet (@pxref{qXfer fdpic loadmap read}).
+
+ at item QNonStop
+The remote stub understands the @samp{QNonStop} packet
+(@pxref{QNonStop}).
+
+ at item QPassSignals
+The remote stub understands the @samp{QPassSignals} packet
+(@pxref{QPassSignals}).
+
+ at item QStartNoAckMode
+The remote stub understands the @samp{QStartNoAckMode} packet and
+prefers to operate in no-acknowledgment mode.  @xref{Packet Acknowledgment}.
+
+ at item multiprocess
+ at anchor{multiprocess extensions}
+ at cindex multiprocess extensions, in remote protocol
+The remote stub understands the multiprocess extensions to the remote
+protocol syntax.  The multiprocess extensions affect the syntax of
+thread IDs in both packets and replies (@pxref{thread-id syntax}), and
+add process IDs to the @samp{D} packet and @samp{W} and @samp{X}
+replies.  Note that reporting this feature indicates support for the
+syntactic extensions only, not that the stub necessarily supports
+debugging of more than one process at a time.  The stub must not use
+multiprocess extensions in packet replies unless @value{GDBN} has also
+indicated it supports them in its @samp{qSupported} request.
+
+ at item qXfer:osdata:read
+The remote stub understands the @samp{qXfer:osdata:read} packet
+((@pxref{qXfer osdata read}).
+
+ at item ConditionalBreakpoints
+The target accepts and implements evaluation of conditional expressions
+defined for breakpoints.  The target will only report breakpoint triggers
+when such conditions are true (@pxref{Conditions, ,Break Conditions}).
+
+ at item ConditionalTracepoints
+The remote stub accepts and implements conditional expressions defined
+for tracepoints (@pxref{Tracepoint Conditions}).
+
+ at item ReverseContinue
+The remote stub accepts and implements the reverse continue packet
+(@pxref{bc}).
+
+ at item ReverseStep
+The remote stub accepts and implements the reverse step packet
+(@pxref{bs}).
+
+ at item TracepointSource
+The remote stub understands the @samp{QTDPsrc} packet that supplies
+the source form of tracepoint definitions.
+
+ at item QAgent
+The remote stub understands the @samp{QAgent} packet.
+
+ at item QAllow
+The remote stub understands the @samp{QAllow} packet.
+
+ at item QDisableRandomization
+The remote stub understands the @samp{QDisableRandomization} packet.
+
+ at item StaticTracepoint
+ at cindex static tracepoints, in remote protocol
+The remote stub supports static tracepoints.
+
+ at item InstallInTrace
+ at anchor{install tracepoint in tracing}
+The remote stub supports installing tracepoint in tracing.
+
+ at item EnableDisableTracepoints
+The remote stub supports the @samp{QTEnable} (@pxref{QTEnable}) and
+ at samp{QTDisable} (@pxref{QTDisable}) packets that allow tracepoints
+to be enabled and disabled while a trace experiment is running.
+
+ at item tracenz
+ at cindex string tracing, in remote protocol
+The remote stub supports the @samp{tracenz} bytecode for collecting strings.
+See @ref{Bytecode Descriptions} for details about the bytecode.
+
+ at item BreakpointCommands
+ at cindex breakpoint commands, in remote protocol
+The remote stub supports running a breakpoint's command list itself,
+rather than reporting the hit to @value{GDBN}.
+
+ at end table
+
+ at item qSymbol::
+ at cindex symbol lookup, remote request
+ at cindex @samp{qSymbol} packet
+Notify the target that @value{GDBN} is prepared to serve symbol lookup
+requests.  Accept requests from the target for the values of symbols.
+
+Reply:
+ at table @samp
+ at item OK
+The target does not need to look up any (more) symbols.
+ at item qSymbol:@var{sym_name}
+The target requests the value of symbol @var{sym_name} (hex encoded).
+ at value{GDBN} may provide the value by using the
+ at samp{qSymbol:@var{sym_value}:@var{sym_name}} message, described
+below.
+ at end table
+
+ at item qSymbol:@var{sym_value}:@var{sym_name}
+Set the value of @var{sym_name} to @var{sym_value}.
+
+ at var{sym_name} (hex encoded) is the name of a symbol whose value the
+target has previously requested.
+
+ at var{sym_value} (hex) is the value for symbol @var{sym_name}.  If
+ at value{GDBN} cannot supply a value for @var{sym_name}, then this field
+will be empty.
+
+Reply:
+ at table @samp
+ at item OK
+The target does not need to look up any (more) symbols.
+ at item qSymbol:@var{sym_name}
+The target requests the value of a new symbol @var{sym_name} (hex
+encoded).  @value{GDBN} will continue to supply the values of symbols
+(if available), until the target ceases to request them.
+ at end table
+
+ at item qTBuffer
+ at item QTBuffer
+ at item QTDisconnected
+ at itemx QTDP
+ at itemx QTDPsrc
+ at itemx QTDV
+ at itemx qTfP
+ at itemx qTfV
+ at itemx QTFrame
+ at itemx qTMinFTPILen
+
+ at xref{Tracepoint Packets}.
+
+ at item qThreadExtraInfo, at var{thread-id}
+ at cindex thread attributes info, remote request
+ at cindex @samp{qThreadExtraInfo} packet
+Obtain a printable string description of a thread's attributes from
+the target OS.  @var{thread-id} is a thread ID; 
+see @ref{thread-id syntax}.  This
+string may contain anything that the target OS thinks is interesting
+for @value{GDBN} to tell the user about the thread.  The string is
+displayed in @value{GDBN}'s @code{info threads} display.  Some
+examples of possible thread extra info strings are @samp{Runnable}, or
+ at samp{Blocked on Mutex}.
+
+Reply:
+ at table @samp
+ at item @var{XX}@dots{}
+Where @samp{@var{XX}@dots{}} is a hex encoding of @sc{ascii} data,
+comprising the printable string containing the extra information about
+the thread's attributes.
+ at end table
+
+(Note that the @code{qThreadExtraInfo} packet's name is separated from
+the command by a @samp{,}, not a @samp{:}, contrary to the naming
+conventions above.  Please don't use this packet as a model for new
+packets.)
+
+ at item QTNotes
+ at item qTP
+ at item QTSave
+ at item qTsP
+ at item qTsV
+ at itemx QTStart    
+ at itemx QTStop     
+ at itemx QTEnable
+ at itemx QTDisable
+ at itemx QTinit     
+ at itemx QTro       
+ at itemx qTStatus   
+ at itemx qTV
+ at itemx qTfSTM
+ at itemx qTsSTM
+ at itemx qTSTMat
+ at xref{Tracepoint Packets}.
+
+ at item qXfer:@var{object}:read:@var{annex}:@var{offset}, at var{length}
+ at cindex read special object, remote request
+ at cindex @samp{qXfer} packet
+ at anchor{qXfer read}
+Read uninterpreted bytes from the target's special data area
+identified by the keyword @var{object}.  Request @var{length} bytes
+starting at @var{offset} bytes into the data.  The content and
+encoding of @var{annex} is specific to @var{object}; it can supply
+additional details about what data to access.
+
+Here are the specific requests of this form defined so far.  All
+ at samp{qXfer:@var{object}:read:@dots{}} requests use the same reply
+formats, listed below.
+
+ at table @samp
+ at item qXfer:auxv:read::@var{offset}, at var{length}
+ at anchor{qXfer auxiliary vector read}
+Access the target's @dfn{auxiliary vector}.  @xref{OS Information,
+auxiliary vector}.  Note @var{annex} must be empty.
+
+This packet is not probed by default; the remote stub must request it,
+by supplying an appropriate @samp{qSupported} response (@pxref{qSupported}).
+
+ at item qXfer:features:read:@var{annex}:@var{offset}, at var{length}
+ at anchor{qXfer target description read}
+Access the @dfn{target description}.  @xref{Target Descriptions}.  The
+annex specifies which XML document to access.  The main description is
+always loaded from the @samp{target.xml} annex.
+
+This packet is not probed by default; the remote stub must request it,
+by supplying an appropriate @samp{qSupported} response (@pxref{qSupported}).
+
+ at item qXfer:libraries:read:@var{annex}:@var{offset}, at var{length}
+ at anchor{qXfer library list read}
+Access the target's list of loaded libraries.  @xref{Library List Format}.
+The annex part of the generic @samp{qXfer} packet must be empty
+(@pxref{qXfer read}).
+
+Targets which maintain a list of libraries in the program's memory do
+not need to implement this packet; it is designed for platforms where
+the operating system manages the list of loaded libraries.
+
+This packet is not probed by default; the remote stub must request it,
+by supplying an appropriate @samp{qSupported} response (@pxref{qSupported}).
+
+ at item qXfer:libraries-svr4:read:@var{annex}:@var{offset}, at var{length}
+ at anchor{qXfer svr4 library list read}
+Access the target's list of loaded libraries when the target is an SVR4
+platform.  @xref{Library List Format for SVR4 Targets}.  The annex part
+of the generic @samp{qXfer} packet must be empty (@pxref{qXfer read}).
+
+This packet is optional for better performance on SVR4 targets.  
+ at value{GDBN} uses memory read packets to read the SVR4 library list otherwise.
+
+This packet is not probed by default; the remote stub must request it,
+by supplying an appropriate @samp{qSupported} response (@pxref{qSupported}).
+
+ at item qXfer:memory-map:read::@var{offset}, at var{length}
+ at anchor{qXfer memory map read}
+Access the target's @dfn{memory-map}.  @xref{Memory Map Format}.  The
+annex part of the generic @samp{qXfer} packet must be empty
+(@pxref{qXfer read}).
+
+This packet is not probed by default; the remote stub must request it,
+by supplying an appropriate @samp{qSupported} response (@pxref{qSupported}).
+
+ at item qXfer:sdata:read::@var{offset}, at var{length}
+ at anchor{qXfer sdata read}
+
+Read contents of the extra collected static tracepoint marker
+information.  The annex part of the generic @samp{qXfer} packet must
+be empty (@pxref{qXfer read}).  @xref{Tracepoint Actions,,Tracepoint
+Action Lists}.
+
+This packet is not probed by default; the remote stub must request it,
+by supplying an appropriate @samp{qSupported} response
+(@pxref{qSupported}).
+
+ at item qXfer:siginfo:read::@var{offset}, at var{length}
+ at anchor{qXfer siginfo read}
+Read contents of the extra signal information on the target
+system.  The annex part of the generic @samp{qXfer} packet must be
+empty (@pxref{qXfer read}).
+
+This packet is not probed by default; the remote stub must request it,
+by supplying an appropriate @samp{qSupported} response
+(@pxref{qSupported}).
+
+ at item qXfer:spu:read:@var{annex}:@var{offset}, at var{length}
+ at anchor{qXfer spu read}
+Read contents of an @code{spufs} file on the target system.  The
+annex specifies which file to read; it must be of the form 
+ at file{@var{id}/@var{name}}, where @var{id} specifies an SPU context ID
+in the target process, and @var{name} identifes the @code{spufs} file
+in that context to be accessed.
+
+This packet is not probed by default; the remote stub must request it,
+by supplying an appropriate @samp{qSupported} response
+(@pxref{qSupported}).
+
+ at item qXfer:threads:read::@var{offset}, at var{length}
+ at anchor{qXfer threads read}
+Access the list of threads on target.  @xref{Thread List Format}.  The
+annex part of the generic @samp{qXfer} packet must be empty
+(@pxref{qXfer read}).
+
+This packet is not probed by default; the remote stub must request it,
+by supplying an appropriate @samp{qSupported} response (@pxref{qSupported}).
+
+ at item qXfer:traceframe-info:read::@var{offset}, at var{length}
+ at anchor{qXfer traceframe info read}
+
+Return a description of the current traceframe's contents.
+ at xref{Traceframe Info Format}.  The annex part of the generic
+ at samp{qXfer} packet must be empty (@pxref{qXfer read}).
+
+This packet is not probed by default; the remote stub must request it,
+by supplying an appropriate @samp{qSupported} response (@pxref{qSupported}).
+
+ at item qXfer:uib:read:@var{pc}:@var{offset}, at var{length}
+ at anchor{qXfer unwind info block}
+
+Return the unwind information block for @var{pc}.  This packet is used
+on OpenVMS/ia64 to ask the kernel unwind information.
+
+This packet is not probed by default.
+
+ at item qXfer:fdpic:read:@var{annex}:@var{offset}, at var{length}
+ at anchor{qXfer fdpic loadmap read}
+Read contents of @code{loadmap}s on the target system.  The
+annex, either @samp{exec} or @samp{interp}, specifies which @code{loadmap},
+executable @code{loadmap} or interpreter @code{loadmap} to read.
+
+This packet is not probed by default; the remote stub must request it,
+by supplying an appropriate @samp{qSupported} response (@pxref{qSupported}).
+
+ at item qXfer:osdata:read::@var{offset}, at var{length}
+ at anchor{qXfer osdata read}
+Access the target's @dfn{operating system information}.  
+ at xref{Operating System Information}.
+
+ at end table
+
+Reply:
+ at table @samp
+ at item m @var{data}
+Data @var{data} (@pxref{Binary Data}) has been read from the
+target.  There may be more data at a higher address (although
+it is permitted to return @samp{m} even for the last valid
+block of data, as long as at least one byte of data was read).
+ at var{data} may have fewer bytes than the @var{length} in the
+request.
+
+ at item l @var{data}
+Data @var{data} (@pxref{Binary Data}) has been read from the target.
+There is no more data to be read.  @var{data} may have fewer bytes
+than the @var{length} in the request.
+
+ at item l
+The @var{offset} in the request is at the end of the data.
+There is no more data to be read.
+
+ at item E00
+The request was malformed, or @var{annex} was invalid.
+
+ at item E @var{nn}
+The offset was invalid, or there was an error encountered reading the data.
+ at var{nn} is a hex-encoded @code{errno} value.
+
+ at item
+An empty reply indicates the @var{object} string was not recognized by
+the stub, or that the object does not support reading.
+ at end table
+
+ at item qXfer:@var{object}:write:@var{annex}:@var{offset}:@var{data}@dots{}
+ at cindex write data into object, remote request
+ at anchor{qXfer write}
+Write uninterpreted bytes into the target's special data area
+identified by the keyword @var{object}, starting at @var{offset} bytes
+into the data.  @var{data}@dots{} is the binary-encoded data
+(@pxref{Binary Data}) to be written.  The content and encoding of @var{annex}
+is specific to @var{object}; it can supply additional details about what data
+to access.
+
+Here are the specific requests of this form defined so far.  All
+ at samp{qXfer:@var{object}:write:@dots{}} requests use the same reply
+formats, listed below.
+
+ at table @samp
+ at item qXfer:siginfo:write::@var{offset}:@var{data}@dots{}
+ at anchor{qXfer siginfo write}
+Write @var{data} to the extra signal information on the target system.
+The annex part of the generic @samp{qXfer} packet must be
+empty (@pxref{qXfer write}).
+
+This packet is not probed by default; the remote stub must request it,
+by supplying an appropriate @samp{qSupported} response
+(@pxref{qSupported}).
+
+ at item qXfer:spu:write:@var{annex}:@var{offset}:@var{data}@dots{}
+ at anchor{qXfer spu write}
+Write @var{data} to an @code{spufs} file on the target system.  The
+annex specifies which file to write; it must be of the form
+ at file{@var{id}/@var{name}}, where @var{id} specifies an SPU context ID
+in the target process, and @var{name} identifes the @code{spufs} file
+in that context to be accessed.
+
+This packet is not probed by default; the remote stub must request it,
+by supplying an appropriate @samp{qSupported} response (@pxref{qSupported}).
+ at end table
+
+Reply:
+ at table @samp
+ at item @var{nn}
+ at var{nn} (hex encoded) is the number of bytes written.
+This may be fewer bytes than supplied in the request.
+
+ at item E00
+The request was malformed, or @var{annex} was invalid.
+
+ at item E @var{nn}
+The offset was invalid, or there was an error encountered writing the data.
+ at var{nn} is a hex-encoded @code{errno} value.
+
+ at item
+An empty reply indicates the @var{object} string was not
+recognized by the stub, or that the object does not support writing.
+ at end table
+
+ at item qXfer:@var{object}:@var{operation}:@dots{}
+Requests of this form may be added in the future.  When a stub does
+not recognize the @var{object} keyword, or its support for
+ at var{object} does not recognize the @var{operation} keyword, the stub
+must respond with an empty packet.
+
+ at item qAttached:@var{pid}
+ at cindex query attached, remote request
+ at cindex @samp{qAttached} packet
+Return an indication of whether the remote server attached to an
+existing process or created a new process.  When the multiprocess
+protocol extensions are supported (@pxref{multiprocess extensions}),
+ at var{pid} is an integer in hexadecimal format identifying the target
+process.  Otherwise, @value{GDBN} will omit the @var{pid} field and
+the query packet will be simplified as @samp{qAttached}.
+
+This query is used, for example, to know whether the remote process
+should be detached or killed when a @value{GDBN} session is ended with
+the @code{quit} command.
+
+Reply:
+ at table @samp
+ at item 1
+The remote server attached to an existing process.
+ at item 0
+The remote server created a new process.
+ at item E @var{NN}
+A badly formed request or an error was encountered.
+ at end table
+
+ at end table
+
+ at node Architecture-Specific Protocol Details
+ at section Architecture-Specific Protocol Details
+
+This section describes how the remote protocol is applied to specific
+target architectures.  Also see @ref{Standard Target Features}, for
+details of XML target descriptions for each architecture.
+
+ at menu
+* ARM-Specific Protocol Details::
+* MIPS-Specific Protocol Details::
+ at end menu
+
+ at node ARM-Specific Protocol Details
+ at subsection @acronym{ARM}-specific Protocol Details
+
+ at menu
+* ARM Breakpoint Kinds::
+ at end menu
+
+ at node ARM Breakpoint Kinds
+ at subsubsection @acronym{ARM} Breakpoint Kinds
+ at cindex breakpoint kinds, @acronym{ARM}
+
+These breakpoint kinds are defined for the @samp{Z0} and @samp{Z1} packets.
+
+ at table @r
+
+ at item 2
+16-bit Thumb mode breakpoint.
+
+ at item 3
+32-bit Thumb mode (Thumb-2) breakpoint.
+
+ at item 4
+32-bit @acronym{ARM} mode breakpoint.
+
+ at end table
+
+ at node MIPS-Specific Protocol Details
+ at subsection @acronym{MIPS}-specific Protocol Details
+
+ at menu
+* MIPS Register packet Format::
+* MIPS Breakpoint Kinds::
+ at end menu
+
+ at node MIPS Register packet Format
+ at subsubsection @acronym{MIPS} Register Packet Format
+ at cindex register packet format, @acronym{MIPS}
+
+The following @code{g}/@code{G} packets have previously been defined.
+In the below, some thirty-two bit registers are transferred as
+sixty-four bits.  Those registers should be zero/sign extended (which?)
+to fill the space allocated.  Register bytes are transferred in target
+byte order.  The two nibbles within a register byte are transferred
+most-significant -- least-significant.
+
+ at table @r
+
+ at item MIPS32
+All registers are transferred as thirty-two bit quantities in the order:
+32 general-purpose; sr; lo; hi; bad; cause; pc; 32 floating-point
+registers; fsr; fir; fp.
+
+ at item MIPS64
+All registers are transferred as sixty-four bit quantities (including
+thirty-two bit registers such as @code{sr}).  The ordering is the same
+as @code{MIPS32}.
+
+ at end table
+
+ at node MIPS Breakpoint Kinds
+ at subsubsection @acronym{MIPS} Breakpoint Kinds
+ at cindex breakpoint kinds, @acronym{MIPS}
+
+These breakpoint kinds are defined for the @samp{Z0} and @samp{Z1} packets.
+
+ at table @r
+
+ at item 2
+16-bit @acronym{MIPS16} mode breakpoint.
+
+ at item 3
+16-bit @acronym{microMIPS} mode breakpoint.
+
+ at item 4
+32-bit standard @acronym{MIPS} mode breakpoint.
+
+ at item 5
+32-bit @acronym{microMIPS} mode breakpoint.
+
+ at end table
+
+ at node Tracepoint Packets
+ at section Tracepoint Packets
+ at cindex tracepoint packets
+ at cindex packets, tracepoint
+
+Here we describe the packets @value{GDBN} uses to implement
+tracepoints (@pxref{Tracepoints}).
+
+ at table @samp
+
+ at item QTDP:@var{n}:@var{addr}:@var{ena}:@var{step}:@var{pass}[:F at var{flen}][:X at var{len}, at var{bytes}]@r{[}- at r{]}
+ at cindex @samp{QTDP} packet
+Create a new tracepoint, number @var{n}, at @var{addr}.  If @var{ena}
+is @samp{E}, then the tracepoint is enabled; if it is @samp{D}, then
+the tracepoint is disabled.  @var{step} is the tracepoint's step
+count, and @var{pass} is its pass count.  If an @samp{F} is present,
+then the tracepoint is to be a fast tracepoint, and the @var{flen} is
+the number of bytes that the target should copy elsewhere to make room
+for the tracepoint.  If an @samp{X} is present, it introduces a
+tracepoint condition, which consists of a hexadecimal length, followed
+by a comma and hex-encoded bytes, in a manner similar to action
+encodings as described below.  If the trailing @samp{-} is present,
+further @samp{QTDP} packets will follow to specify this tracepoint's
+actions.
+
+Replies:
+ at table @samp
+ at item OK
+The packet was understood and carried out.
+ at item qRelocInsn
+ at xref{Tracepoint Packets,,Relocate instruction reply packet}.
+ at item 
+The packet was not recognized.
+ at end table
+
+ at item QTDP:- at var{n}:@var{addr}:@r{[}S at r{]}@var{action}@dots{}@r{[}- at r{]}
+Define actions to be taken when a tracepoint is hit.  @var{n} and
+ at var{addr} must be the same as in the initial @samp{QTDP} packet for
+this tracepoint.  This packet may only be sent immediately after
+another @samp{QTDP} packet that ended with a @samp{-}.  If the
+trailing @samp{-} is present, further @samp{QTDP} packets will follow,
+specifying more actions for this tracepoint.
+
+In the series of action packets for a given tracepoint, at most one
+can have an @samp{S} before its first @var{action}.  If such a packet
+is sent, it and the following packets define ``while-stepping''
+actions.  Any prior packets define ordinary actions --- that is, those
+taken when the tracepoint is first hit.  If no action packet has an
+ at samp{S}, then all the packets in the series specify ordinary
+tracepoint actions.
+
+The @samp{@var{action}@dots{}} portion of the packet is a series of
+actions, concatenated without separators.  Each action has one of the
+following forms:
+
+ at table @samp
+
+ at item R @var{mask}
+Collect the registers whose bits are set in @var{mask}.  @var{mask} is
+a hexadecimal number whose @var{i}'th bit is set if register number
+ at var{i} should be collected.  (The least significant bit is numbered
+zero.)  Note that @var{mask} may be any number of digits long; it may
+not fit in a 32-bit word.
+
+ at item M @var{basereg}, at var{offset}, at var{len}
+Collect @var{len} bytes of memory starting at the address in register
+number @var{basereg}, plus @var{offset}.  If @var{basereg} is
+ at samp{-1}, then the range has a fixed address: @var{offset} is the
+address of the lowest byte to collect.  The @var{basereg},
+ at var{offset}, and @var{len} parameters are all unsigned hexadecimal
+values (the @samp{-1} value for @var{basereg} is a special case).
+
+ at item X @var{len}, at var{expr}
+Evaluate @var{expr}, whose length is @var{len}, and collect memory as
+it directs.  @var{expr} is an agent expression, as described in
+ at ref{Agent Expressions}.  Each byte of the expression is encoded as a
+two-digit hex number in the packet; @var{len} is the number of bytes
+in the expression (and thus one-half the number of hex digits in the
+packet).
+
+ at end table
+
+Any number of actions may be packed together in a single @samp{QTDP}
+packet, as long as the packet does not exceed the maximum packet
+length (400 bytes, for many stubs).  There may be only one @samp{R}
+action per tracepoint, and it must precede any @samp{M} or @samp{X}
+actions.  Any registers referred to by @samp{M} and @samp{X} actions
+must be collected by a preceding @samp{R} action.  (The
+``while-stepping'' actions are treated as if they were attached to a
+separate tracepoint, as far as these restrictions are concerned.)
+
+Replies:
+ at table @samp
+ at item OK
+The packet was understood and carried out.
+ at item qRelocInsn
+ at xref{Tracepoint Packets,,Relocate instruction reply packet}.
+ at item 
+The packet was not recognized.
+ at end table
+
+ at item QTDPsrc:@var{n}:@var{addr}:@var{type}:@var{start}:@var{slen}:@var{bytes}
+ at cindex @samp{QTDPsrc} packet
+Specify a source string of tracepoint @var{n} at address @var{addr}.
+This is useful to get accurate reproduction of the tracepoints
+originally downloaded at the beginning of the trace run.  @var{type}
+is the name of the tracepoint part, such as @samp{cond} for the
+tracepoint's conditional expression (see below for a list of types), while
+ at var{bytes} is the string, encoded in hexadecimal.
+
+ at var{start} is the offset of the @var{bytes} within the overall source
+string, while @var{slen} is the total length of the source string.
+This is intended for handling source strings that are longer than will
+fit in a single packet.
+ at c Add detailed example when this info is moved into a dedicated
+ at c tracepoint descriptions section.
+
+The available string types are @samp{at} for the location,
+ at samp{cond} for the conditional, and @samp{cmd} for an action command.
+ at value{GDBN} sends a separate packet for each command in the action
+list, in the same order in which the commands are stored in the list.
+
+The target does not need to do anything with source strings except
+report them back as part of the replies to the @samp{qTfP}/@samp{qTsP}
+query packets.
+
+Although this packet is optional, and @value{GDBN} will only send it
+if the target replies with @samp{TracepointSource} @xref{General
+Query Packets}, it makes both disconnected tracing and trace files
+much easier to use.  Otherwise the user must be careful that the
+tracepoints in effect while looking at trace frames are identical to
+the ones in effect during the trace run; even a small discrepancy
+could cause @samp{tdump} not to work, or a particular trace frame not
+be found.
+
+ at item QTDV:@var{n}:@var{value}
+ at cindex define trace state variable, remote request
+ at cindex @samp{QTDV} packet
+Create a new trace state variable, number @var{n}, with an initial
+value of @var{value}, which is a 64-bit signed integer.  Both @var{n}
+and @var{value} are encoded as hexadecimal values. @value{GDBN} has
+the option of not using this packet for initial values of zero; the
+target should simply create the trace state variables as they are
+mentioned in expressions.
+
+ at item QTFrame:@var{n}
+ at cindex @samp{QTFrame} packet
+Select the @var{n}'th tracepoint frame from the buffer, and use the
+register and memory contents recorded there to answer subsequent
+request packets from @value{GDBN}.
+
+A successful reply from the stub indicates that the stub has found the
+requested frame.  The response is a series of parts, concatenated
+without separators, describing the frame we selected.  Each part has
+one of the following forms:
+
+ at table @samp
+ at item F @var{f}
+The selected frame is number @var{n} in the trace frame buffer;
+ at var{f} is a hexadecimal number.  If @var{f} is @samp{-1}, then there
+was no frame matching the criteria in the request packet.
+
+ at item T @var{t}
+The selected trace frame records a hit of tracepoint number @var{t};
+ at var{t} is a hexadecimal number.
+
+ at end table
+
+ at item QTFrame:pc:@var{addr}
+Like @samp{QTFrame:@var{n}}, but select the first tracepoint frame after the
+currently selected frame whose PC is @var{addr};
+ at var{addr} is a hexadecimal number.
+
+ at item QTFrame:tdp:@var{t}
+Like @samp{QTFrame:@var{n}}, but select the first tracepoint frame after the
+currently selected frame that is a hit of tracepoint @var{t}; @var{t}
+is a hexadecimal number.
+
+ at item QTFrame:range:@var{start}:@var{end}
+Like @samp{QTFrame:@var{n}}, but select the first tracepoint frame after the
+currently selected frame whose PC is between @var{start} (inclusive)
+and @var{end} (inclusive); @var{start} and @var{end} are hexadecimal
+numbers.
+
+ at item QTFrame:outside:@var{start}:@var{end}
+Like @samp{QTFrame:range:@var{start}:@var{end}}, but select the first
+frame @emph{outside} the given range of addresses (exclusive).
+
+ at item qTMinFTPILen
+ at cindex @samp{qTMinFTPILen} packet
+This packet requests the minimum length of instruction at which a fast
+tracepoint (@pxref{Set Tracepoints}) may be placed.  For instance, on
+the 32-bit x86 architecture, it is possible to use a 4-byte jump, but
+it depends on the target system being able to create trampolines in
+the first 64K of memory, which might or might not be possible for that
+system.  So the reply to this packet will be 4 if it is able to
+arrange for that.
+
+Replies:
+
+ at table @samp
+ at item 0
+The minimum instruction length is currently unknown.
+ at item @var{length}
+The minimum instruction length is @var{length}, where @var{length} is greater
+or equal to 1.  @var{length} is a hexadecimal number.  A reply of 1 means
+that a fast tracepoint may be placed on any instruction regardless of size.
+ at item E
+An error has occurred.
+ at item
+An empty reply indicates that the request is not supported by the stub.
+ at end table
+
+ at item QTStart
+ at cindex @samp{QTStart} packet
+Begin the tracepoint experiment.  Begin collecting data from
+tracepoint hits in the trace frame buffer.  This packet supports the
+ at samp{qRelocInsn} reply (@pxref{Tracepoint Packets,,Relocate
+instruction reply packet}).
+
+ at item QTStop
+ at cindex @samp{QTStop} packet
+End the tracepoint experiment.  Stop collecting trace frames.
+
+ at item QTEnable:@var{n}:@var{addr}
+ at anchor{QTEnable}
+ at cindex @samp{QTEnable} packet
+Enable tracepoint @var{n} at address @var{addr} in a started tracepoint
+experiment.  If the tracepoint was previously disabled, then collection
+of data from it will resume.
+
+ at item QTDisable:@var{n}:@var{addr}
+ at anchor{QTDisable}
+ at cindex @samp{QTDisable} packet
+Disable tracepoint @var{n} at address @var{addr} in a started tracepoint
+experiment.  No more data will be collected from the tracepoint unless
+ at samp{QTEnable:@var{n}:@var{addr}} is subsequently issued.
+
+ at item QTinit
+ at cindex @samp{QTinit} packet
+Clear the table of tracepoints, and empty the trace frame buffer.
+
+ at item QTro:@var{start1}, at var{end1}:@var{start2}, at var{end2}:@dots{}
+ at cindex @samp{QTro} packet
+Establish the given ranges of memory as ``transparent''.  The stub
+will answer requests for these ranges from memory's current contents,
+if they were not collected as part of the tracepoint hit.
+
+ at value{GDBN} uses this to mark read-only regions of memory, like those
+containing program code.  Since these areas never change, they should
+still have the same contents they did when the tracepoint was hit, so
+there's no reason for the stub to refuse to provide their contents.
+
+ at item QTDisconnected:@var{value}
+ at cindex @samp{QTDisconnected} packet
+Set the choice to what to do with the tracing run when @value{GDBN}
+disconnects from the target.  A @var{value} of 1 directs the target to
+continue the tracing run, while 0 tells the target to stop tracing if
+ at value{GDBN} is no longer in the picture.
+
+ at item qTStatus
+ at cindex @samp{qTStatus} packet
+Ask the stub if there is a trace experiment running right now.
+
+The reply has the form:
+
+ at table @samp
+
+ at item T at var{running}@r{[};@var{field}@r{]}@dots{}
+ at var{running} is a single digit @code{1} if the trace is presently
+running, or @code{0} if not.  It is followed by semicolon-separated
+optional fields that an agent may use to report additional status.
+
+ at end table
+
+If the trace is not running, the agent may report any of several
+explanations as one of the optional fields:
+
+ at table @samp
+
+ at item tnotrun:0
+No trace has been run yet.
+
+ at item tstop[:@var{text}]:0
+The trace was stopped by a user-originated stop command.  The optional
+ at var{text} field is a user-supplied string supplied as part of the
+stop command (for instance, an explanation of why the trace was
+stopped manually).  It is hex-encoded.
+
+ at item tfull:0
+The trace stopped because the trace buffer filled up.
+
+ at item tdisconnected:0
+The trace stopped because @value{GDBN} disconnected from the target.
+
+ at item tpasscount:@var{tpnum}
+The trace stopped because tracepoint @var{tpnum} exceeded its pass count.
+
+ at item terror:@var{text}:@var{tpnum}
+The trace stopped because tracepoint @var{tpnum} had an error.  The
+string @var{text} is available to describe the nature of the error
+(for instance, a divide by zero in the condition expression).
+ at var{text} is hex encoded.
+
+ at item tunknown:0
+The trace stopped for some other reason.
+
+ at end table
+
+Additional optional fields supply statistical and other information.
+Although not required, they are extremely useful for users monitoring
+the progress of a trace run.  If a trace has stopped, and these
+numbers are reported, they must reflect the state of the just-stopped
+trace.
+
+ at table @samp
+
+ at item tframes:@var{n}
+The number of trace frames in the buffer.
+
+ at item tcreated:@var{n}
+The total number of trace frames created during the run. This may
+be larger than the trace frame count, if the buffer is circular.
+
+ at item tsize:@var{n}
+The total size of the trace buffer, in bytes.
+
+ at item tfree:@var{n}
+The number of bytes still unused in the buffer.
+
+ at item circular:@var{n}
+The value of the circular trace buffer flag.  @code{1} means that the
+trace buffer is circular and old trace frames will be discarded if
+necessary to make room, @code{0} means that the trace buffer is linear
+and may fill up.
+
+ at item disconn:@var{n}
+The value of the disconnected tracing flag.  @code{1} means that
+tracing will continue after @value{GDBN} disconnects, @code{0} means
+that the trace run will stop.
+
+ at end table
+
+ at item qTP:@var{tp}:@var{addr}
+ at cindex tracepoint status, remote request
+ at cindex @samp{qTP} packet
+Ask the stub for the current state of tracepoint number @var{tp} at
+address @var{addr}.
+
+Replies:
+ at table @samp
+ at item V at var{hits}:@var{usage}
+The tracepoint has been hit @var{hits} times so far during the trace
+run, and accounts for @var{usage} in the trace buffer.  Note that
+ at code{while-stepping} steps are not counted as separate hits, but the
+steps' space consumption is added into the usage number.
+
+ at end table
+
+ at item qTV:@var{var}
+ at cindex trace state variable value, remote request
+ at cindex @samp{qTV} packet
+Ask the stub for the value of the trace state variable number @var{var}.
+
+Replies:
+ at table @samp
+ at item V at var{value}
+The value of the variable is @var{value}.  This will be the current
+value of the variable if the user is examining a running target, or a
+saved value if the variable was collected in the trace frame that the
+user is looking at.  Note that multiple requests may result in
+different reply values, such as when requesting values while the
+program is running.
+
+ at item U
+The value of the variable is unknown.  This would occur, for example,
+if the user is examining a trace frame in which the requested variable
+was not collected.
+ at end table
+
+ at item qTfP
+ at cindex @samp{qTfP} packet
+ at itemx qTsP
+ at cindex @samp{qTsP} packet
+These packets request data about tracepoints that are being used by
+the target.  @value{GDBN} sends @code{qTfP} to get the first piece
+of data, and multiple @code{qTsP} to get additional pieces.  Replies
+to these packets generally take the form of the @code{QTDP} packets
+that define tracepoints. (FIXME add detailed syntax)
+
+ at item qTfV
+ at cindex @samp{qTfV} packet
+ at itemx qTsV
+ at cindex @samp{qTsV} packet
+These packets request data about trace state variables that are on the
+target.  @value{GDBN} sends @code{qTfV} to get the first vari of data,
+and multiple @code{qTsV} to get additional variables.  Replies to
+these packets follow the syntax of the @code{QTDV} packets that define
+trace state variables.
+
+ at item qTfSTM
+ at itemx qTsSTM
+ at anchor{qTfSTM}
+ at anchor{qTsSTM}
+ at cindex @samp{qTfSTM} packet
+ at cindex @samp{qTsSTM} packet
+These packets request data about static tracepoint markers that exist
+in the target program.  @value{GDBN} sends @code{qTfSTM} to get the
+first piece of data, and multiple @code{qTsSTM} to get additional
+pieces.  Replies to these packets take the following form:
+
+Reply:
+ at table @samp
+ at item m @var{address}:@var{id}:@var{extra}
+A single marker
+ at item m @var{address}:@var{id}:@var{extra}, at var{address}:@var{id}:@var{extra}@dots{}
+a comma-separated list of markers
+ at item l
+(lower case letter @samp{L}) denotes end of list.
+ at item E @var{nn}
+An error occurred.  @var{nn} are hex digits.
+ at item
+An empty reply indicates that the request is not supported by the
+stub.
+ at end table
+
+ at var{address} is encoded in hex.
+ at var{id} and @var{extra} are strings encoded in hex.
+
+In response to each query, the target will reply with a list of one or
+more markers, separated by commas.  @value{GDBN} will respond to each
+reply with a request for more markers (using the @samp{qs} form of the
+query), until the target responds with @samp{l} (lower-case ell, for
+ at dfn{last}).
+
+ at item qTSTMat:@var{address}
+ at anchor{qTSTMat}
+ at cindex @samp{qTSTMat} packet
+This packets requests data about static tracepoint markers in the
+target program at @var{address}.  Replies to this packet follow the
+syntax of the @samp{qTfSTM} and @code{qTsSTM} packets that list static
+tracepoint markers.
+
+ at item QTSave:@var{filename}
+ at cindex @samp{QTSave} packet
+This packet directs the target to save trace data to the file name
+ at var{filename} in the target's filesystem.  @var{filename} is encoded
+as a hex string; the interpretation of the file name (relative vs
+absolute, wild cards, etc) is up to the target.
+
+ at item qTBuffer:@var{offset}, at var{len}
+ at cindex @samp{qTBuffer} packet
+Return up to @var{len} bytes of the current contents of trace buffer,
+starting at @var{offset}.  The trace buffer is treated as if it were
+a contiguous collection of traceframes, as per the trace file format.
+The reply consists as many hex-encoded bytes as the target can deliver
+in a packet; it is not an error to return fewer than were asked for.
+A reply consisting of just @code{l} indicates that no bytes are
+available.
+
+ at item QTBuffer:circular:@var{value}
+This packet directs the target to use a circular trace buffer if
+ at var{value} is 1, or a linear buffer if the value is 0.
+
+ at item QTNotes:@r{[}@var{type}:@var{text}@r{]}@r{[};@var{type}:@var{text}@r{]}@dots{}
+ at cindex @samp{QTNotes} packet
+This packet adds optional textual notes to the trace run.  Allowable
+types include @code{user}, @code{notes}, and @code{tstop}, the
+ at var{text} fields are arbitrary strings, hex-encoded.
+
+ at end table
+
+ at subsection Relocate instruction reply packet
+When installing fast tracepoints in memory, the target may need to
+relocate the instruction currently at the tracepoint address to a
+different address in memory.  For most instructions, a simple copy is
+enough, but, for example, call instructions that implicitly push the
+return address on the stack, and relative branches or other
+PC-relative instructions require offset adjustment, so that the effect
+of executing the instruction at a different address is the same as if
+it had executed in the original location.
+
+In response to several of the tracepoint packets, the target may also
+respond with a number of intermediate @samp{qRelocInsn} request
+packets before the final result packet, to have @value{GDBN} handle
+this relocation operation.  If a packet supports this mechanism, its
+documentation will explicitly say so.  See for example the above
+descriptions for the @samp{QTStart} and @samp{QTDP} packets.  The
+format of the request is:
+
+ at table @samp
+ at item qRelocInsn:@var{from};@var{to}
+
+This requests @value{GDBN} to copy instruction at address @var{from}
+to address @var{to}, possibly adjusted so that executing the
+instruction at @var{to} has the same effect as executing it at
+ at var{from}.  @value{GDBN} writes the adjusted instruction to target
+memory starting at @var{to}.
+ at end table
+
+Replies:
+ at table @samp
+ at item qRelocInsn:@var{adjusted_size}
+Informs the stub the relocation is complete.  @var{adjusted_size} is
+the length in bytes of resulting relocated instruction sequence.
+ at item E @var{NN}
+A badly formed request was detected, or an error was encountered while
+relocating the instruction.
+ at end table
+
+ at node Host I/O Packets
+ at section Host I/O Packets
+ at cindex Host I/O, remote protocol
+ at cindex file transfer, remote protocol
+
+The @dfn{Host I/O} packets allow @value{GDBN} to perform I/O
+operations on the far side of a remote link.  For example, Host I/O is
+used to upload and download files to a remote target with its own
+filesystem.  Host I/O uses the same constant values and data structure
+layout as the target-initiated File-I/O protocol.  However, the
+Host I/O packets are structured differently.  The target-initiated
+protocol relies on target memory to store parameters and buffers.
+Host I/O requests are initiated by @value{GDBN}, and the
+target's memory is not involved.  @xref{File-I/O Remote Protocol
+Extension}, for more details on the target-initiated protocol.
+
+The Host I/O request packets all encode a single operation along with
+its arguments.  They have this format:
+
+ at table @samp
+
+ at item vFile:@var{operation}: @var{parameter}@dots{}
+ at var{operation} is the name of the particular request; the target
+should compare the entire packet name up to the second colon when checking
+for a supported operation.  The format of @var{parameter} depends on
+the operation.  Numbers are always passed in hexadecimal.  Negative
+numbers have an explicit minus sign (i.e.@: two's complement is not
+used).  Strings (e.g.@: filenames) are encoded as a series of
+hexadecimal bytes.  The last argument to a system call may be a
+buffer of escaped binary data (@pxref{Binary Data}).
+
+ at end table
+
+The valid responses to Host I/O packets are:
+
+ at table @samp
+
+ at item F @var{result} [, @var{errno}] [; @var{attachment}]
+ at var{result} is the integer value returned by this operation, usually
+non-negative for success and -1 for errors.  If an error has occured,
+ at var{errno} will be included in the result.  @var{errno} will have a
+value defined by the File-I/O protocol (@pxref{Errno Values}).  For
+operations which return data, @var{attachment} supplies the data as a
+binary buffer.  Binary buffers in response packets are escaped in the
+normal way (@pxref{Binary Data}).  See the individual packet
+documentation for the interpretation of @var{result} and
+ at var{attachment}.
+
+ at item
+An empty response indicates that this operation is not recognized.
+
+ at end table
+
+These are the supported Host I/O operations:
+
+ at table @samp
+ at item vFile:open: @var{pathname}, @var{flags}, @var{mode}
+Open a file at @var{pathname} and return a file descriptor for it, or
+return -1 if an error occurs.  @var{pathname} is a string,
+ at var{flags} is an integer indicating a mask of open flags
+(@pxref{Open Flags}), and @var{mode} is an integer indicating a mask
+of mode bits to use if the file is created (@pxref{mode_t Values}).
+ at xref{open}, for details of the open flags and mode values.
+
+ at item vFile:close: @var{fd}
+Close the open file corresponding to @var{fd} and return 0, or
+-1 if an error occurs.
+
+ at item vFile:pread: @var{fd}, @var{count}, @var{offset}
+Read data from the open file corresponding to @var{fd}.  Up to
+ at var{count} bytes will be read from the file, starting at @var{offset}
+relative to the start of the file.  The target may read fewer bytes;
+common reasons include packet size limits and an end-of-file
+condition.  The number of bytes read is returned.  Zero should only be
+returned for a successful read at the end of the file, or if
+ at var{count} was zero.
+
+The data read should be returned as a binary attachment on success.
+If zero bytes were read, the response should include an empty binary
+attachment (i.e.@: a trailing semicolon).  The return value is the
+number of target bytes read; the binary attachment may be longer if
+some characters were escaped.
+
+ at item vFile:pwrite: @var{fd}, @var{offset}, @var{data}
+Write @var{data} (a binary buffer) to the open file corresponding
+to @var{fd}.  Start the write at @var{offset} from the start of the
+file.  Unlike many @code{write} system calls, there is no
+separate @var{count} argument; the length of @var{data} in the
+packet is used.  @samp{vFile:write} returns the number of bytes written,
+which may be shorter than the length of @var{data}, or -1 if an
+error occurred.
+
+ at item vFile:unlink: @var{pathname}
+Delete the file at @var{pathname} on the target.  Return 0,
+or -1 if an error occurs.  @var{pathname} is a string.
+
+ at item vFile:readlink: @var{filename}
+Read value of symbolic link @var{filename} on the target.  Return
+the number of bytes read, or -1 if an error occurs.
+
+The data read should be returned as a binary attachment on success.
+If zero bytes were read, the response should include an empty binary
+attachment (i.e.@: a trailing semicolon).  The return value is the
+number of target bytes read; the binary attachment may be longer if
+some characters were escaped.
+
+ at end table
+
+ at node Interrupts
+ at section Interrupts
+ at cindex interrupts (remote protocol)
+
+When a program on the remote target is running, @value{GDBN} may
+attempt to interrupt it by sending a @samp{Ctrl-C}, @code{BREAK} or
+a @code{BREAK} followed by @code{g},
+control of which is specified via @value{GDBN}'s @samp{interrupt-sequence}.
+
+The precise meaning of @code{BREAK} is defined by the transport
+mechanism and may, in fact, be undefined.  @value{GDBN} does not
+currently define a @code{BREAK} mechanism for any of the network
+interfaces except for TCP, in which case @value{GDBN} sends the
+ at code{telnet} BREAK sequence.
+
+ at samp{Ctrl-C}, on the other hand, is defined and implemented for all
+transport mechanisms.  It is represented by sending the single byte
+ at code{0x03} without any of the usual packet overhead described in
+the Overview section (@pxref{Overview}).  When a @code{0x03} byte is
+transmitted as part of a packet, it is considered to be packet data
+and does @emph{not} represent an interrupt.  E.g., an @samp{X} packet
+(@pxref{X packet}), used for binary downloads, may include an unescaped
+ at code{0x03} as part of its packet.
+
+ at code{BREAK} followed by @code{g} is also known as Magic SysRq g.
+When Linux kernel receives this sequence from serial port,
+it stops execution and connects to gdb.
+
+Stubs are not required to recognize these interrupt mechanisms and the
+precise meaning associated with receipt of the interrupt is
+implementation defined.  If the target supports debugging of multiple
+threads and/or processes, it should attempt to interrupt all 
+currently-executing threads and processes.
+If the stub is successful at interrupting the
+running program, it should send one of the stop
+reply packets (@pxref{Stop Reply Packets}) to @value{GDBN} as a result
+of successfully stopping the program in all-stop mode, and a stop reply
+for each stopped thread in non-stop mode.
+Interrupts received while the
+program is stopped are discarded.
+
+ at node Notification Packets
+ at section Notification Packets
+ at cindex notification packets
+ at cindex packets, notification
+
+The @value{GDBN} remote serial protocol includes @dfn{notifications},
+packets that require no acknowledgment.  Both the GDB and the stub
+may send notifications (although the only notifications defined at
+present are sent by the stub).  Notifications carry information
+without incurring the round-trip latency of an acknowledgment, and so
+are useful for low-impact communications where occasional packet loss
+is not a problem.
+
+A notification packet has the form @samp{% @var{data} #
+ at var{checksum}}, where @var{data} is the content of the notification,
+and @var{checksum} is a checksum of @var{data}, computed and formatted
+as for ordinary @value{GDBN} packets.  A notification's @var{data}
+never contains @samp{$}, @samp{%} or @samp{#} characters.  Upon
+receiving a notification, the recipient sends no @samp{+} or @samp{-}
+to acknowledge the notification's receipt or to report its corruption.
+
+Every notification's @var{data} begins with a name, which contains no
+colon characters, followed by a colon character.
+
+Recipients should silently ignore corrupted notifications and
+notifications they do not understand.  Recipients should restart
+timeout periods on receipt of a well-formed notification, whether or
+not they understand it.
+
+Senders should only send the notifications described here when this
+protocol description specifies that they are permitted.  In the
+future, we may extend the protocol to permit existing notifications in
+new contexts; this rule helps older senders avoid confusing newer
+recipients.
+
+(Older versions of @value{GDBN} ignore bytes received until they see
+the @samp{$} byte that begins an ordinary packet, so new stubs may
+transmit notifications without fear of confusing older clients.  There
+are no notifications defined for @value{GDBN} to send at the moment, but we
+assume that most older stubs would ignore them, as well.)
+
+The following notification packets from the stub to @value{GDBN} are
+defined:
+
+ at table @samp
+ at item Stop: @var{reply}
+Report an asynchronous stop event in non-stop mode.  
+The @var{reply} has the form of a stop reply, as
+described in @ref{Stop Reply Packets}.  Refer to @ref{Remote Non-Stop},
+for information on how these notifications are acknowledged by 
+ at value{GDBN}.
+ at end table
+
+ at node Remote Non-Stop
+ at section Remote Protocol Support for Non-Stop Mode
+
+ at value{GDBN}'s remote protocol supports non-stop debugging of
+multi-threaded programs, as described in @ref{Non-Stop Mode}.  If the stub
+supports non-stop mode, it should report that to @value{GDBN} by including
+ at samp{QNonStop+} in its @samp{qSupported} response (@pxref{qSupported}).
+
+ at value{GDBN} typically sends a @samp{QNonStop} packet only when
+establishing a new connection with the stub.  Entering non-stop mode
+does not alter the state of any currently-running threads, but targets
+must stop all threads in any already-attached processes when entering
+all-stop mode.  @value{GDBN} uses the @samp{?} packet as necessary to
+probe the target state after a mode change.
+
+In non-stop mode, when an attached process encounters an event that
+would otherwise be reported with a stop reply, it uses the
+asynchronous notification mechanism (@pxref{Notification Packets}) to
+inform @value{GDBN}.  In contrast to all-stop mode, where all threads
+in all processes are stopped when a stop reply is sent, in non-stop
+mode only the thread reporting the stop event is stopped.  That is,
+when reporting a @samp{S} or @samp{T} response to indicate completion
+of a step operation, hitting a breakpoint, or a fault, only the
+affected thread is stopped; any other still-running threads continue
+to run.  When reporting a @samp{W} or @samp{X} response, all running
+threads belonging to other attached processes continue to run.
+
+Only one stop reply notification at a time may be pending; if
+additional stop events occur before @value{GDBN} has acknowledged the
+previous notification, they must be queued by the stub for later
+synchronous transmission in response to @samp{vStopped} packets from
+ at value{GDBN}.  Because the notification mechanism is unreliable, 
+the stub is permitted to resend a stop reply notification
+if it believes @value{GDBN} may not have received it.  @value{GDBN}
+ignores additional stop reply notifications received before it has
+finished processing a previous notification and the stub has completed
+sending any queued stop events.
+
+Otherwise, @value{GDBN} must be prepared to receive a stop reply
+notification at any time.  Specifically, they may appear when
+ at value{GDBN} is not otherwise reading input from the stub, or when
+ at value{GDBN} is expecting to read a normal synchronous response or a
+ at samp{+}/@samp{-} acknowledgment to a packet it has sent.
+Notification packets are distinct from any other communication from
+the stub so there is no ambiguity.
+
+After receiving a stop reply notification, @value{GDBN} shall
+acknowledge it by sending a @samp{vStopped} packet (@pxref{vStopped packet})
+as a regular, synchronous request to the stub.  Such acknowledgment
+is not required to happen immediately, as @value{GDBN} is permitted to
+send other, unrelated packets to the stub first, which the stub should
+process normally.
+
+Upon receiving a @samp{vStopped} packet, if the stub has other queued
+stop events to report to @value{GDBN}, it shall respond by sending a
+normal stop reply response.  @value{GDBN} shall then send another
+ at samp{vStopped} packet to solicit further responses; again, it is
+permitted to send other, unrelated packets as well which the stub
+should process normally.
+
+If the stub receives a @samp{vStopped} packet and there are no
+additional stop events to report, the stub shall return an @samp{OK}
+response.  At this point, if further stop events occur, the stub shall
+send a new stop reply notification, @value{GDBN} shall accept the
+notification, and the process shall be repeated.
+
+In non-stop mode, the target shall respond to the @samp{?} packet as
+follows.  First, any incomplete stop reply notification/@samp{vStopped} 
+sequence in progress is abandoned.  The target must begin a new
+sequence reporting stop events for all stopped threads, whether or not
+it has previously reported those events to @value{GDBN}.  The first
+stop reply is sent as a synchronous reply to the @samp{?} packet, and
+subsequent stop replies are sent as responses to @samp{vStopped} packets
+using the mechanism described above.  The target must not send
+asynchronous stop reply notifications until the sequence is complete.
+If all threads are running when the target receives the @samp{?} packet,
+or if the target is not attached to any process, it shall respond
+ at samp{OK}.
+
+ at node Packet Acknowledgment
+ at section Packet Acknowledgment
+
+ at cindex acknowledgment, for @value{GDBN} remote
+ at cindex packet acknowledgment, for @value{GDBN} remote
+By default, when either the host or the target machine receives a packet,
+the first response expected is an acknowledgment: either @samp{+} (to indicate
+the package was received correctly) or @samp{-} (to request retransmission).
+This mechanism allows the @value{GDBN} remote protocol to operate over
+unreliable transport mechanisms, such as a serial line.
+
+In cases where the transport mechanism is itself reliable (such as a pipe or
+TCP connection), the @samp{+}/@samp{-} acknowledgments are redundant.
+It may be desirable to disable them in that case to reduce communication
+overhead, or for other reasons.  This can be accomplished by means of the
+ at samp{QStartNoAckMode} packet; @pxref{QStartNoAckMode}.
+
+When in no-acknowledgment mode, neither the stub nor @value{GDBN} shall send or
+expect @samp{+}/@samp{-} protocol acknowledgments.  The packet
+and response format still includes the normal checksum, as described in
+ at ref{Overview}, but the checksum may be ignored by the receiver.
+
+If the stub supports @samp{QStartNoAckMode} and prefers to operate in
+no-acknowledgment mode, it should report that to @value{GDBN}
+by including @samp{QStartNoAckMode+} in its response to @samp{qSupported};
+ at pxref{qSupported}.
+If @value{GDBN} also supports @samp{QStartNoAckMode} and it has not been
+disabled via the @code{set remote noack-packet off} command
+(@pxref{Remote Configuration}),
+ at value{GDBN} may then send a @samp{QStartNoAckMode} packet to the stub.
+Only then may the stub actually turn off packet acknowledgments.
+ at value{GDBN} sends a final @samp{+} acknowledgment of the stub's @samp{OK}
+response, which can be safely ignored by the stub.
+
+Note that @code{set remote noack-packet} command only affects negotiation
+between @value{GDBN} and the stub when subsequent connections are made;
+it does not affect the protocol acknowledgment state for any current
+connection.
+Since @samp{+}/@samp{-} acknowledgments are enabled by default when a
+new connection is established,
+there is also no protocol request to re-enable the acknowledgments
+for the current connection, once disabled.
+
+ at node Examples
+ at section Examples
+
+Example sequence of a target being re-started.  Notice how the restart
+does not get any direct output:
+
+ at smallexample
+-> @code{R00}
+<- @code{+}
+ at emph{target restarts}
+-> @code{?}
+<- @code{+}
+<- @code{T001:1234123412341234}
+-> @code{+}
+ at end smallexample
+
+Example sequence of a target being stepped by a single instruction:
+
+ at smallexample
+-> @code{G1445 at dots{}}
+<- @code{+}
+-> @code{s}
+<- @code{+}
+ at emph{time passes}
+<- @code{T001:1234123412341234}
+-> @code{+}
+-> @code{g}
+<- @code{+}
+<- @code{1455 at dots{}}
+-> @code{+}
+ at end smallexample
+
+ at node File-I/O Remote Protocol Extension
+ at section File-I/O Remote Protocol Extension
+ at cindex File-I/O remote protocol extension
+
+ at menu
+* File-I/O Overview::
+* Protocol Basics::
+* The F Request Packet::
+* The F Reply Packet::
+* The Ctrl-C Message::
+* Console I/O::
+* List of Supported Calls::
+* Protocol-specific Representation of Datatypes::
+* Constants::
+* File-I/O Examples::
+ at end menu
+
+ at node File-I/O Overview
+ at subsection File-I/O Overview
+ at cindex file-i/o overview
+
+The @dfn{File I/O remote protocol extension} (short: File-I/O) allows the
+target to use the host's file system and console I/O to perform various
+system calls.  System calls on the target system are translated into a
+remote protocol packet to the host system, which then performs the needed
+actions and returns a response packet to the target system.
+This simulates file system operations even on targets that lack file systems.
+
+The protocol is defined to be independent of both the host and target systems.
+It uses its own internal representation of datatypes and values.  Both
+ at value{GDBN} and the target's @value{GDBN} stub are responsible for
+translating the system-dependent value representations into the internal
+protocol representations when data is transmitted.
+
+The communication is synchronous.  A system call is possible only when 
+ at value{GDBN} is waiting for a response from the @samp{C}, @samp{c}, @samp{S} 
+or @samp{s} packets.  While @value{GDBN} handles the request for a system call,
+the target is stopped to allow deterministic access to the target's
+memory.  Therefore File-I/O is not interruptible by target signals.  On
+the other hand, it is possible to interrupt File-I/O by a user interrupt 
+(@samp{Ctrl-C}) within @value{GDBN}.
+
+The target's request to perform a host system call does not finish
+the latest @samp{C}, @samp{c}, @samp{S} or @samp{s} action.  That means,
+after finishing the system call, the target returns to continuing the
+previous activity (continue, step).  No additional continue or step
+request from @value{GDBN} is required.
+
+ at smallexample
+(@value{GDBP}) continue
+  <- target requests 'system call X'
+  target is stopped, @value{GDBN} executes system call
+  -> @value{GDBN} returns result
+  ... target continues, @value{GDBN} returns to wait for the target
+  <- target hits breakpoint and sends a Txx packet
+ at end smallexample
+
+The protocol only supports I/O on the console and to regular files on 
+the host file system.  Character or block special devices, pipes,
+named pipes, sockets or any other communication method on the host
+system are not supported by this protocol.
+
+File I/O is not supported in non-stop mode.
+
+ at node Protocol Basics
+ at subsection Protocol Basics
+ at cindex protocol basics, file-i/o
+
+The File-I/O protocol uses the @code{F} packet as the request as well
+as reply packet.  Since a File-I/O system call can only occur when
+ at value{GDBN} is waiting for a response from the continuing or stepping target, 
+the File-I/O request is a reply that @value{GDBN} has to expect as a result
+of a previous @samp{C}, @samp{c}, @samp{S} or @samp{s} packet.
+This @code{F} packet contains all information needed to allow @value{GDBN}
+to call the appropriate host system call:
+
+ at itemize @bullet
+ at item
+A unique identifier for the requested system call.
+
+ at item
+All parameters to the system call.  Pointers are given as addresses
+in the target memory address space.  Pointers to strings are given as
+pointer/length pair.  Numerical values are given as they are.
+Numerical control flags are given in a protocol-specific representation.
+
+ at end itemize
+
+At this point, @value{GDBN} has to perform the following actions.
+
+ at itemize @bullet
+ at item
+If the parameters include pointer values to data needed as input to a 
+system call, @value{GDBN} requests this data from the target with a
+standard @code{m} packet request.  This additional communication has to be
+expected by the target implementation and is handled as any other @code{m}
+packet.
+
+ at item
+ at value{GDBN} translates all value from protocol representation to host
+representation as needed.  Datatypes are coerced into the host types.
+
+ at item
+ at value{GDBN} calls the system call.
+
+ at item
+It then coerces datatypes back to protocol representation.
+
+ at item
+If the system call is expected to return data in buffer space specified
+by pointer parameters to the call, the data is transmitted to the
+target using a @code{M} or @code{X} packet.  This packet has to be expected
+by the target implementation and is handled as any other @code{M} or @code{X}
+packet.
+
+ at end itemize
+
+Eventually @value{GDBN} replies with another @code{F} packet which contains all
+necessary information for the target to continue.  This at least contains
+
+ at itemize @bullet
+ at item
+Return value.
+
+ at item
+ at code{errno}, if has been changed by the system call.
+
+ at item
+``Ctrl-C'' flag.
+
+ at end itemize
+
+After having done the needed type and value coercion, the target continues
+the latest continue or step action.
+
+ at node The F Request Packet
+ at subsection The @code{F} Request Packet
+ at cindex file-i/o request packet
+ at cindex @code{F} request packet
+
+The @code{F} request packet has the following format:
+
+ at table @samp
+ at item F at var{call-id}, at var{parameter at dots{}}
+
+ at var{call-id} is the identifier to indicate the host system call to be called.
+This is just the name of the function.
+
+ at var{parameter at dots{}} are the parameters to the system call.  
+Parameters are hexadecimal integer values, either the actual values in case
+of scalar datatypes, pointers to target buffer space in case of compound
+datatypes and unspecified memory areas, or pointer/length pairs in case
+of string parameters.  These are appended to the @var{call-id} as a 
+comma-delimited list.  All values are transmitted in ASCII
+string representation, pointer/length pairs separated by a slash.
+
+ at end table
+
+
+
+ at node The F Reply Packet
+ at subsection The @code{F} Reply Packet
+ at cindex file-i/o reply packet
+ at cindex @code{F} reply packet
+
+The @code{F} reply packet has the following format:
+
+ at table @samp
+
+ at item F at var{retcode}, at var{errno}, at var{Ctrl-C flag};@var{call-specific attachment}
+
+ at var{retcode} is the return code of the system call as hexadecimal value.
+
+ at var{errno} is the @code{errno} set by the call, in protocol-specific
+representation.
+This parameter can be omitted if the call was successful.
+
+ at var{Ctrl-C flag} is only sent if the user requested a break.  In this
+case, @var{errno} must be sent as well, even if the call was successful.
+The @var{Ctrl-C flag} itself consists of the character @samp{C}:
+
+ at smallexample
+F0,0,C
+ at end smallexample
+
+ at noindent
+or, if the call was interrupted before the host call has been performed:
+
+ at smallexample
+F-1,4,C
+ at end smallexample
+
+ at noindent
+assuming 4 is the protocol-specific representation of @code{EINTR}.
+
+ at end table
+
+
+ at node The Ctrl-C Message
+ at subsection The @samp{Ctrl-C} Message
+ at cindex ctrl-c message, in file-i/o protocol
+
+If the @samp{Ctrl-C} flag is set in the @value{GDBN}
+reply packet (@pxref{The F Reply Packet}),
+the target should behave as if it had
+gotten a break message.  The meaning for the target is ``system call
+interrupted by @code{SIGINT}''.  Consequentially, the target should actually stop
+(as with a break message) and return to @value{GDBN} with a @code{T02}
+packet.
+
+It's important for the target to know in which
+state the system call was interrupted.  There are two possible cases:
+
+ at itemize @bullet
+ at item
+The system call hasn't been performed on the host yet.
+
+ at item
+The system call on the host has been finished.
+
+ at end itemize
+
+These two states can be distinguished by the target by the value of the
+returned @code{errno}.  If it's the protocol representation of @code{EINTR}, the system
+call hasn't been performed.  This is equivalent to the @code{EINTR} handling
+on POSIX systems.  In any other case, the target may presume that the
+system call has been finished --- successfully or not --- and should behave
+as if the break message arrived right after the system call.
+
+ at value{GDBN} must behave reliably.  If the system call has not been called
+yet, @value{GDBN} may send the @code{F} reply immediately, setting @code{EINTR} as
+ at code{errno} in the packet.  If the system call on the host has been finished
+before the user requests a break, the full action must be finished by
+ at value{GDBN}.  This requires sending @code{M} or @code{X} packets as necessary.
+The @code{F} packet may only be sent when either nothing has happened
+or the full action has been completed.
+
+ at node Console I/O
+ at subsection Console I/O
+ at cindex console i/o as part of file-i/o
+
+By default and if not explicitly closed by the target system, the file
+descriptors 0, 1 and 2 are connected to the @value{GDBN} console.  Output
+on the @value{GDBN} console is handled as any other file output operation
+(@code{write(1, @dots{})} or @code{write(2, @dots{})}).  Console input is handled
+by @value{GDBN} so that after the target read request from file descriptor
+0 all following typing is buffered until either one of the following
+conditions is met:
+
+ at itemize @bullet
+ at item
+The user types @kbd{Ctrl-c}.  The behaviour is as explained above, and the
+ at code{read}
+system call is treated as finished.
+
+ at item
+The user presses @key{RET}.  This is treated as end of input with a trailing
+newline.
+
+ at item
+The user types @kbd{Ctrl-d}.  This is treated as end of input.  No trailing
+character (neither newline nor @samp{Ctrl-D}) is appended to the input.
+
+ at end itemize
+
+If the user has typed more characters than fit in the buffer given to
+the @code{read} call, the trailing characters are buffered in @value{GDBN} until
+either another @code{read(0, @dots{})} is requested by the target, or debugging
+is stopped at the user's request.
+
+
+ at node List of Supported Calls
+ at subsection List of Supported Calls
+ at cindex list of supported file-i/o calls
+
+ at menu
+* open::
+* close::
+* read::
+* write::
+* lseek::
+* rename::
+* unlink::
+* stat/fstat::
+* gettimeofday::
+* isatty::
+* system::
+ at end menu
+
+ at node open
+ at unnumberedsubsubsec open
+ at cindex open, file-i/o system call
+
+ at table @asis
+ at item Synopsis:
+ at smallexample
+int open(const char *pathname, int flags);
+int open(const char *pathname, int flags, mode_t mode);
+ at end smallexample
+
+ at item Request:
+ at samp{Fopen, at var{pathptr}/@var{len}, at var{flags}, at var{mode}}
+
+ at noindent
+ at var{flags} is the bitwise @code{OR} of the following values:
+
+ at table @code
+ at item O_CREAT
+If the file does not exist it will be created.  The host
+rules apply as far as file ownership and time stamps
+are concerned.
+
+ at item O_EXCL
+When used with @code{O_CREAT}, if the file already exists it is
+an error and open() fails.
+
+ at item O_TRUNC
+If the file already exists and the open mode allows
+writing (@code{O_RDWR} or @code{O_WRONLY} is given) it will be
+truncated to zero length.
+
+ at item O_APPEND
+The file is opened in append mode.
+
+ at item O_RDONLY
+The file is opened for reading only.
+
+ at item O_WRONLY
+The file is opened for writing only.
+
+ at item O_RDWR
+The file is opened for reading and writing.
+ at end table
+
+ at noindent
+Other bits are silently ignored.
+
+
+ at noindent
+ at var{mode} is the bitwise @code{OR} of the following values:
+
+ at table @code
+ at item S_IRUSR
+User has read permission.
+
+ at item S_IWUSR
+User has write permission.
+
+ at item S_IRGRP
+Group has read permission.
+
+ at item S_IWGRP
+Group has write permission.
+
+ at item S_IROTH
+Others have read permission.
+
+ at item S_IWOTH
+Others have write permission.
+ at end table
+
+ at noindent
+Other bits are silently ignored.
+
+
+ at item Return value:
+ at code{open} returns the new file descriptor or -1 if an error
+occurred.
+
+ at item Errors:
+
+ at table @code
+ at item EEXIST
+ at var{pathname} already exists and @code{O_CREAT} and @code{O_EXCL} were used.
+
+ at item EISDIR
+ at var{pathname} refers to a directory.
+
+ at item EACCES
+The requested access is not allowed.
+
+ at item ENAMETOOLONG
+ at var{pathname} was too long.
+
+ at item ENOENT
+A directory component in @var{pathname} does not exist.
+
+ at item ENODEV
+ at var{pathname} refers to a device, pipe, named pipe or socket.
+
+ at item EROFS
+ at var{pathname} refers to a file on a read-only filesystem and
+write access was requested.
+
+ at item EFAULT
+ at var{pathname} is an invalid pointer value.
+
+ at item ENOSPC
+No space on device to create the file.
+
+ at item EMFILE
+The process already has the maximum number of files open.
+
+ at item ENFILE
+The limit on the total number of files open on the system
+has been reached.
+
+ at item EINTR
+The call was interrupted by the user.
+ at end table
+
+ at end table
+
+ at node close
+ at unnumberedsubsubsec close
+ at cindex close, file-i/o system call
+
+ at table @asis
+ at item Synopsis:
+ at smallexample
+int close(int fd);
+ at end smallexample
+
+ at item Request:
+ at samp{Fclose, at var{fd}}
+
+ at item Return value:
+ at code{close} returns zero on success, or -1 if an error occurred.
+
+ at item Errors:
+
+ at table @code
+ at item EBADF
+ at var{fd} isn't a valid open file descriptor.
+
+ at item EINTR
+The call was interrupted by the user.
+ at end table
+
+ at end table
+
+ at node read
+ at unnumberedsubsubsec read
+ at cindex read, file-i/o system call
+
+ at table @asis
+ at item Synopsis:
+ at smallexample
+int read(int fd, void *buf, unsigned int count);
+ at end smallexample
+
+ at item Request:
+ at samp{Fread, at var{fd}, at var{bufptr}, at var{count}}
+
+ at item Return value:
+On success, the number of bytes read is returned.
+Zero indicates end of file.  If count is zero, read
+returns zero as well.  On error, -1 is returned.
+
+ at item Errors:
+
+ at table @code
+ at item EBADF
+ at var{fd} is not a valid file descriptor or is not open for
+reading.
+
+ at item EFAULT
+ at var{bufptr} is an invalid pointer value.
+
+ at item EINTR
+The call was interrupted by the user.
+ at end table
+
+ at end table
+
+ at node write
+ at unnumberedsubsubsec write
+ at cindex write, file-i/o system call
+
+ at table @asis
+ at item Synopsis:
+ at smallexample
+int write(int fd, const void *buf, unsigned int count);
+ at end smallexample
+
+ at item Request:
+ at samp{Fwrite, at var{fd}, at var{bufptr}, at var{count}}
+
+ at item Return value:
+On success, the number of bytes written are returned.
+Zero indicates nothing was written.  On error, -1
+is returned.
+
+ at item Errors:
+
+ at table @code
+ at item EBADF
+ at var{fd} is not a valid file descriptor or is not open for
+writing.
+
+ at item EFAULT
+ at var{bufptr} is an invalid pointer value.
+
+ at item EFBIG
+An attempt was made to write a file that exceeds the
+host-specific maximum file size allowed.
+
+ at item ENOSPC
+No space on device to write the data.
+
+ at item EINTR
+The call was interrupted by the user.
+ at end table
+
+ at end table
+
+ at node lseek
+ at unnumberedsubsubsec lseek
+ at cindex lseek, file-i/o system call
+
+ at table @asis
+ at item Synopsis:
+ at smallexample
+long lseek (int fd, long offset, int flag);
+ at end smallexample
+
+ at item Request:
+ at samp{Flseek, at var{fd}, at var{offset}, at var{flag}}
+
+ at var{flag} is one of:
+
+ at table @code
+ at item SEEK_SET
+The offset is set to @var{offset} bytes.
+
+ at item SEEK_CUR
+The offset is set to its current location plus @var{offset}
+bytes.
+
+ at item SEEK_END
+The offset is set to the size of the file plus @var{offset}
+bytes.
+ at end table
+
+ at item Return value:
+On success, the resulting unsigned offset in bytes from
+the beginning of the file is returned.  Otherwise, a
+value of -1 is returned.
+
+ at item Errors:
+
+ at table @code
+ at item EBADF
+ at var{fd} is not a valid open file descriptor.
+
+ at item ESPIPE
+ at var{fd} is associated with the @value{GDBN} console.
+
+ at item EINVAL
+ at var{flag} is not a proper value.
+
+ at item EINTR
+The call was interrupted by the user.
+ at end table
+
+ at end table
+
+ at node rename
+ at unnumberedsubsubsec rename
+ at cindex rename, file-i/o system call
+
+ at table @asis
+ at item Synopsis:
+ at smallexample
+int rename(const char *oldpath, const char *newpath);
+ at end smallexample
+
+ at item Request:
+ at samp{Frename, at var{oldpathptr}/@var{len}, at var{newpathptr}/@var{len}}
+
+ at item Return value:
+On success, zero is returned.  On error, -1 is returned.
+
+ at item Errors:
+
+ at table @code
+ at item EISDIR
+ at var{newpath} is an existing directory, but @var{oldpath} is not a
+directory.
+
+ at item EEXIST
+ at var{newpath} is a non-empty directory.
+
+ at item EBUSY
+ at var{oldpath} or @var{newpath} is a directory that is in use by some
+process.
+
+ at item EINVAL
+An attempt was made to make a directory a subdirectory
+of itself.
+
+ at item ENOTDIR
+A  component used as a directory in @var{oldpath} or new
+path is not a directory.  Or @var{oldpath} is a directory
+and @var{newpath} exists but is not a directory.
+
+ at item EFAULT
+ at var{oldpathptr} or @var{newpathptr} are invalid pointer values.
+
+ at item EACCES
+No access to the file or the path of the file.
+
+ at item ENAMETOOLONG
+
+ at var{oldpath} or @var{newpath} was too long.
+
+ at item ENOENT
+A directory component in @var{oldpath} or @var{newpath} does not exist.
+
+ at item EROFS
+The file is on a read-only filesystem.
+
+ at item ENOSPC
+The device containing the file has no room for the new
+directory entry.
+
+ at item EINTR
+The call was interrupted by the user.
+ at end table
+
+ at end table
+
+ at node unlink
+ at unnumberedsubsubsec unlink
+ at cindex unlink, file-i/o system call
+
+ at table @asis
+ at item Synopsis:
+ at smallexample
+int unlink(const char *pathname);
+ at end smallexample
+
+ at item Request:
+ at samp{Funlink, at var{pathnameptr}/@var{len}}
+
+ at item Return value:
+On success, zero is returned.  On error, -1 is returned.
+
+ at item Errors:
+
+ at table @code
+ at item EACCES
+No access to the file or the path of the file.
+
+ at item EPERM
+The system does not allow unlinking of directories.
+
+ at item EBUSY
+The file @var{pathname} cannot be unlinked because it's
+being used by another process.
+
+ at item EFAULT
+ at var{pathnameptr} is an invalid pointer value.
+
+ at item ENAMETOOLONG
+ at var{pathname} was too long.
+
+ at item ENOENT
+A directory component in @var{pathname} does not exist.
+
+ at item ENOTDIR
+A component of the path is not a directory.
+
+ at item EROFS
+The file is on a read-only filesystem.
+
+ at item EINTR
+The call was interrupted by the user.
+ at end table
+
+ at end table
+
+ at node stat/fstat
+ at unnumberedsubsubsec stat/fstat
+ at cindex fstat, file-i/o system call
+ at cindex stat, file-i/o system call
+
+ at table @asis
+ at item Synopsis:
+ at smallexample
+int stat(const char *pathname, struct stat *buf);
+int fstat(int fd, struct stat *buf);
+ at end smallexample
+
+ at item Request:
+ at samp{Fstat, at var{pathnameptr}/@var{len}, at var{bufptr}}@*
+ at samp{Ffstat, at var{fd}, at var{bufptr}}
+
+ at item Return value:
+On success, zero is returned.  On error, -1 is returned.
+
+ at item Errors:
+
+ at table @code
+ at item EBADF
+ at var{fd} is not a valid open file.
+
+ at item ENOENT
+A directory component in @var{pathname} does not exist or the
+path is an empty string.
+
+ at item ENOTDIR
+A component of the path is not a directory.
+
+ at item EFAULT
+ at var{pathnameptr} is an invalid pointer value.
+
+ at item EACCES
+No access to the file or the path of the file.
+
+ at item ENAMETOOLONG
+ at var{pathname} was too long.
+
+ at item EINTR
+The call was interrupted by the user.
+ at end table
+
+ at end table
+
+ at node gettimeofday
+ at unnumberedsubsubsec gettimeofday
+ at cindex gettimeofday, file-i/o system call
+
+ at table @asis
+ at item Synopsis:
+ at smallexample
+int gettimeofday(struct timeval *tv, void *tz);
+ at end smallexample
+
+ at item Request:
+ at samp{Fgettimeofday, at var{tvptr}, at var{tzptr}}
+
+ at item Return value:
+On success, 0 is returned, -1 otherwise.
+
+ at item Errors:
+
+ at table @code
+ at item EINVAL
+ at var{tz} is a non-NULL pointer.
+
+ at item EFAULT
+ at var{tvptr} and/or @var{tzptr} is an invalid pointer value.
+ at end table
+
+ at end table
+
+ at node isatty
+ at unnumberedsubsubsec isatty
+ at cindex isatty, file-i/o system call
+
+ at table @asis
+ at item Synopsis:
+ at smallexample
+int isatty(int fd);
+ at end smallexample
+
+ at item Request:
+ at samp{Fisatty, at var{fd}}
+
+ at item Return value:
+Returns 1 if @var{fd} refers to the @value{GDBN} console, 0 otherwise.
+
+ at item Errors:
+
+ at table @code
+ at item EINTR
+The call was interrupted by the user.
+ at end table
+
+ at end table
+
+Note that the @code{isatty} call is treated as a special case: it returns
+1 to the target if the file descriptor is attached
+to the @value{GDBN} console, 0 otherwise.  Implementing through system calls
+would require implementing @code{ioctl} and would be more complex than
+needed.
+
+
+ at node system
+ at unnumberedsubsubsec system
+ at cindex system, file-i/o system call
+
+ at table @asis
+ at item Synopsis:
+ at smallexample
+int system(const char *command);
+ at end smallexample
+
+ at item Request:
+ at samp{Fsystem, at var{commandptr}/@var{len}}
+
+ at item Return value:
+If @var{len} is zero, the return value indicates whether a shell is
+available.  A zero return value indicates a shell is not available.
+For non-zero @var{len}, the value returned is -1 on error and the
+return status of the command otherwise.  Only the exit status of the
+command is returned, which is extracted from the host's @code{system}
+return value by calling @code{WEXITSTATUS(retval)}.  In case
+ at file{/bin/sh} could not be executed, 127 is returned.
+
+ at item Errors:
+
+ at table @code
+ at item EINTR
+The call was interrupted by the user.
+ at end table
+
+ at end table
+
+ at value{GDBN} takes over the full task of calling the necessary host calls 
+to perform the @code{system} call.  The return value of @code{system} on 
+the host is simplified before it's returned
+to the target.  Any termination signal information from the child process 
+is discarded, and the return value consists
+entirely of the exit status of the called command.
+
+Due to security concerns, the @code{system} call is by default refused
+by @value{GDBN}.  The user has to allow this call explicitly with the
+ at code{set remote system-call-allowed 1} command.
+
+ at table @code
+ at item set remote system-call-allowed
+ at kindex set remote system-call-allowed
+Control whether to allow the @code{system} calls in the File I/O
+protocol for the remote target.  The default is zero (disabled).
+
+ at item show remote system-call-allowed
+ at kindex show remote system-call-allowed
+Show whether the @code{system} calls are allowed in the File I/O
+protocol.
+ at end table
+
+ at node Protocol-specific Representation of Datatypes
+ at subsection Protocol-specific Representation of Datatypes
+ at cindex protocol-specific representation of datatypes, in file-i/o protocol
+
+ at menu
+* Integral Datatypes::
+* Pointer Values::
+* Memory Transfer::
+* struct stat::
+* struct timeval::
+ at end menu
+
+ at node Integral Datatypes
+ at unnumberedsubsubsec Integral Datatypes
+ at cindex integral datatypes, in file-i/o protocol
+
+The integral datatypes used in the system calls are @code{int}, 
+ at code{unsigned int}, @code{long}, @code{unsigned long},
+ at code{mode_t}, and @code{time_t}.  
+
+ at code{int}, @code{unsigned int}, @code{mode_t} and @code{time_t} are
+implemented as 32 bit values in this protocol.
+
+ at code{long} and @code{unsigned long} are implemented as 64 bit types.
+
+ at xref{Limits}, for corresponding MIN and MAX values (similar to those
+in @file{limits.h}) to allow range checking on host and target.
+
+ at code{time_t} datatypes are defined as seconds since the Epoch.
+
+All integral datatypes transferred as part of a memory read or write of a
+structured datatype e.g.@: a @code{struct stat} have to be given in big endian
+byte order.
+
+ at node Pointer Values
+ at unnumberedsubsubsec Pointer Values
+ at cindex pointer values, in file-i/o protocol
+
+Pointers to target data are transmitted as they are.  An exception
+is made for pointers to buffers for which the length isn't
+transmitted as part of the function call, namely strings.  Strings
+are transmitted as a pointer/length pair, both as hex values, e.g.@:
+
+ at smallexample
+ at code{1aaf/12}
+ at end smallexample
+
+ at noindent
+which is a pointer to data of length 18 bytes at position 0x1aaf.
+The length is defined as the full string length in bytes, including
+the trailing null byte.  For example, the string @code{"hello world"}
+at address 0x123456 is transmitted as
+
+ at smallexample
+ at code{123456/d}
+ at end smallexample
+
+ at node Memory Transfer
+ at unnumberedsubsubsec Memory Transfer
+ at cindex memory transfer, in file-i/o protocol
+
+Structured data which is transferred using a memory read or write (for
+example, a @code{struct stat}) is expected to be in a protocol-specific format 
+with all scalar multibyte datatypes being big endian.  Translation to
+this representation needs to be done both by the target before the @code{F} 
+packet is sent, and by @value{GDBN} before 
+it transfers memory to the target.  Transferred pointers to structured
+data should point to the already-coerced data at any time.
+
+
+ at node struct stat
+ at unnumberedsubsubsec struct stat
+ at cindex struct stat, in file-i/o protocol
+
+The buffer of type @code{struct stat} used by the target and @value{GDBN} 
+is defined as follows:
+
+ at smallexample
+struct stat @{
+    unsigned int  st_dev;      /* device */
+    unsigned int  st_ino;      /* inode */
+    mode_t        st_mode;     /* protection */
+    unsigned int  st_nlink;    /* number of hard links */
+    unsigned int  st_uid;      /* user ID of owner */
+    unsigned int  st_gid;      /* group ID of owner */
+    unsigned int  st_rdev;     /* device type (if inode device) */
+    unsigned long st_size;     /* total size, in bytes */
+    unsigned long st_blksize;  /* blocksize for filesystem I/O */
+    unsigned long st_blocks;   /* number of blocks allocated */
+    time_t        st_atime;    /* time of last access */
+    time_t        st_mtime;    /* time of last modification */
+    time_t        st_ctime;    /* time of last change */
+@};
+ at end smallexample
+
+The integral datatypes conform to the definitions given in the
+appropriate section (see @ref{Integral Datatypes}, for details) so this
+structure is of size 64 bytes.
+
+The values of several fields have a restricted meaning and/or
+range of values.
+
+ at table @code
+
+ at item st_dev
+A value of 0 represents a file, 1 the console.
+
+ at item st_ino
+No valid meaning for the target.  Transmitted unchanged.
+
+ at item st_mode
+Valid mode bits are described in @ref{Constants}.  Any other
+bits have currently no meaning for the target.
+
+ at item st_uid
+ at itemx st_gid
+ at itemx st_rdev
+No valid meaning for the target.  Transmitted unchanged.
+
+ at item st_atime
+ at itemx st_mtime
+ at itemx st_ctime
+These values have a host and file system dependent
+accuracy.  Especially on Windows hosts, the file system may not
+support exact timing values.
+ at end table
+
+The target gets a @code{struct stat} of the above representation and is
+responsible for coercing it to the target representation before
+continuing.
+
+Note that due to size differences between the host, target, and protocol
+representations of @code{struct stat} members, these members could eventually
+get truncated on the target.
+
+ at node struct timeval
+ at unnumberedsubsubsec struct timeval
+ at cindex struct timeval, in file-i/o protocol
+
+The buffer of type @code{struct timeval} used by the File-I/O protocol
+is defined as follows:
+
+ at smallexample
+struct timeval @{
+    time_t tv_sec;  /* second */
+    long   tv_usec; /* microsecond */
+@};
+ at end smallexample
+
+The integral datatypes conform to the definitions given in the
+appropriate section (see @ref{Integral Datatypes}, for details) so this
+structure is of size 8 bytes.
+
+ at node Constants
+ at subsection Constants
+ at cindex constants, in file-i/o protocol
+
+The following values are used for the constants inside of the
+protocol.  @value{GDBN} and target are responsible for translating these
+values before and after the call as needed.
+
+ at menu
+* Open Flags::
+* mode_t Values::
+* Errno Values::
+* Lseek Flags::
+* Limits::
+ at end menu
+
+ at node Open Flags
+ at unnumberedsubsubsec Open Flags
+ at cindex open flags, in file-i/o protocol
+
+All values are given in hexadecimal representation.
+
+ at smallexample
+  O_RDONLY        0x0
+  O_WRONLY        0x1
+  O_RDWR          0x2
+  O_APPEND        0x8
+  O_CREAT       0x200
+  O_TRUNC       0x400
+  O_EXCL        0x800
+ at end smallexample
+
+ at node mode_t Values
+ at unnumberedsubsubsec mode_t Values
+ at cindex mode_t values, in file-i/o protocol
+
+All values are given in octal representation.
+
+ at smallexample
+  S_IFREG       0100000
+  S_IFDIR        040000
+  S_IRUSR          0400
+  S_IWUSR          0200
+  S_IXUSR          0100
+  S_IRGRP           040
+  S_IWGRP           020
+  S_IXGRP           010
+  S_IROTH            04
+  S_IWOTH            02
+  S_IXOTH            01
+ at end smallexample
+
+ at node Errno Values
+ at unnumberedsubsubsec Errno Values
+ at cindex errno values, in file-i/o protocol
+
+All values are given in decimal representation.
+
+ at smallexample
+  EPERM           1
+  ENOENT          2
+  EINTR           4
+  EBADF           9
+  EACCES         13
+  EFAULT         14
+  EBUSY          16
+  EEXIST         17
+  ENODEV         19
+  ENOTDIR        20
+  EISDIR         21
+  EINVAL         22
+  ENFILE         23
+  EMFILE         24
+  EFBIG          27
+  ENOSPC         28
+  ESPIPE         29
+  EROFS          30
+  ENAMETOOLONG   91
+  EUNKNOWN       9999
+ at end smallexample
+
+  @code{EUNKNOWN} is used as a fallback error value if a host system returns
+  any error value not in the list of supported error numbers.
+
+ at node Lseek Flags
+ at unnumberedsubsubsec Lseek Flags
+ at cindex lseek flags, in file-i/o protocol
+
+ at smallexample
+  SEEK_SET      0
+  SEEK_CUR      1
+  SEEK_END      2
+ at end smallexample
+
+ at node Limits
+ at unnumberedsubsubsec Limits
+ at cindex limits, in file-i/o protocol
+
+All values are given in decimal representation.
+
+ at smallexample
+  INT_MIN       -2147483648
+  INT_MAX        2147483647
+  UINT_MAX       4294967295
+  LONG_MIN      -9223372036854775808
+  LONG_MAX       9223372036854775807
+  ULONG_MAX      18446744073709551615
+ at end smallexample
+
+ at node File-I/O Examples
+ at subsection File-I/O Examples
+ at cindex file-i/o examples
+
+Example sequence of a write call, file descriptor 3, buffer is at target
+address 0x1234, 6 bytes should be written:
+
+ at smallexample
+<- @code{Fwrite,3,1234,6}
+ at emph{request memory read from target}
+-> @code{m1234,6}
+<- XXXXXX
+ at emph{return "6 bytes written"}
+-> @code{F6}
+ at end smallexample
+
+Example sequence of a read call, file descriptor 3, buffer is at target
+address 0x1234, 6 bytes should be read:
+
+ at smallexample
+<- @code{Fread,3,1234,6}
+ at emph{request memory write to target}
+-> @code{X1234,6:XXXXXX}
+ at emph{return "6 bytes read"}
+-> @code{F6}
+ at end smallexample
+
+Example sequence of a read call, call fails on the host due to invalid
+file descriptor (@code{EBADF}):
+
+ at smallexample
+<- @code{Fread,3,1234,6}
+-> @code{F-1,9}
+ at end smallexample
+
+Example sequence of a read call, user presses @kbd{Ctrl-c} before syscall on
+host is called:
+
+ at smallexample
+<- @code{Fread,3,1234,6}
+-> @code{F-1,4,C}
+<- @code{T02}
+ at end smallexample
+
+Example sequence of a read call, user presses @kbd{Ctrl-c} after syscall on
+host is called:
+
+ at smallexample
+<- @code{Fread,3,1234,6}
+-> @code{X1234,6:XXXXXX}
+<- @code{T02}
+ at end smallexample
+
+ at node Library List Format
+ at section Library List Format
+ at cindex library list format, remote protocol
+
+On some platforms, a dynamic loader (e.g.@: @file{ld.so}) runs in the
+same process as your application to manage libraries.  In this case,
+ at value{GDBN} can use the loader's symbol table and normal memory
+operations to maintain a list of shared libraries.  On other
+platforms, the operating system manages loaded libraries.
+ at value{GDBN} can not retrieve the list of currently loaded libraries
+through memory operations, so it uses the @samp{qXfer:libraries:read}
+packet (@pxref{qXfer library list read}) instead.  The remote stub
+queries the target's operating system and reports which libraries
+are loaded.
+
+The @samp{qXfer:libraries:read} packet returns an XML document which
+lists loaded libraries and their offsets.  Each library has an
+associated name and one or more segment or section base addresses,
+which report where the library was loaded in memory.
+
+For the common case of libraries that are fully linked binaries, the
+library should have a list of segments.  If the target supports
+dynamic linking of a relocatable object file, its library XML element
+should instead include a list of allocated sections.  The segment or
+section bases are start addresses, not relocation offsets; they do not
+depend on the library's link-time base addresses.
+
+ at value{GDBN} must be linked with the Expat library to support XML
+library lists.  @xref{Expat}.
+
+A simple memory map, with one loaded library relocated by a single
+offset, looks like this:
+
+ at smallexample
+<library-list>
+  <library name="/lib/libc.so.6">
+    <segment address="0x10000000"/>
+  </library>
+</library-list>
+ at end smallexample
+
+Another simple memory map, with one loaded library with three
+allocated sections (.text, .data, .bss), looks like this:
+
+ at smallexample
+<library-list>
+  <library name="sharedlib.o">
+    <section address="0x10000000"/>
+    <section address="0x20000000"/>
+    <section address="0x30000000"/>
+  </library>
+</library-list>
+ at end smallexample
+
+The format of a library list is described by this DTD:
+
+ at smallexample
+<!-- library-list: Root element with versioning -->
+<!ELEMENT library-list  (library)*>
+<!ATTLIST library-list  version CDATA   #FIXED  "1.0">
+<!ELEMENT library       (segment*, section*)>
+<!ATTLIST library       name    CDATA   #REQUIRED>
+<!ELEMENT segment       EMPTY>
+<!ATTLIST segment       address CDATA   #REQUIRED>
+<!ELEMENT section       EMPTY>
+<!ATTLIST section       address CDATA   #REQUIRED>
+ at end smallexample
+
+In addition, segments and section descriptors cannot be mixed within a
+single library element, and you must supply at least one segment or
+section for each library.
+
+ at node Library List Format for SVR4 Targets
+ at section Library List Format for SVR4 Targets
+ at cindex library list format, remote protocol
+
+On SVR4 platforms @value{GDBN} can use the symbol table of a dynamic loader
+(e.g.@: @file{ld.so}) and normal memory operations to maintain a list of
+shared libraries.  Still a special library list provided by this packet is
+more efficient for the @value{GDBN} remote protocol.
+
+The @samp{qXfer:libraries-svr4:read} packet returns an XML document which lists
+loaded libraries and their SVR4 linker parameters.  For each library on SVR4
+target, the following parameters are reported:
+
+ at itemize @minus
+ at item
+ at code{name}, the absolute file name from the @code{l_name} field of
+ at code{struct link_map}.
+ at item
+ at code{lm} with address of @code{struct link_map} used for TLS
+(Thread Local Storage) access.
+ at item
+ at code{l_addr}, the displacement as read from the field @code{l_addr} of
+ at code{struct link_map}.  For prelinked libraries this is not an absolute
+memory address.  It is a displacement of absolute memory address against
+address the file was prelinked to during the library load.
+ at item
+ at code{l_ld}, which is memory address of the @code{PT_DYNAMIC} segment
+ at end itemize
+
+Additionally the single @code{main-lm} attribute specifies address of
+ at code{struct link_map} used for the main executable.  This parameter is used
+for TLS access and its presence is optional.
+
+ at value{GDBN} must be linked with the Expat library to support XML
+SVR4 library lists.  @xref{Expat}.
+
+A simple memory map, with two loaded libraries (which do not use prelink),
+looks like this:
+
+ at smallexample
+<library-list-svr4 version="1.0" main-lm="0xe4f8f8">
+  <library name="/lib/ld-linux.so.2" lm="0xe4f51c" l_addr="0xe2d000"
+           l_ld="0xe4eefc"/>
+  <library name="/lib/libc.so.6" lm="0xe4fbe8" l_addr="0x154000"
+           l_ld="0x152350"/>
+</library-list-svr>
+ at end smallexample
+
+The format of an SVR4 library list is described by this DTD:
+
+ at smallexample
+<!-- library-list-svr4: Root element with versioning -->
+<!ELEMENT library-list-svr4  (library)*>
+<!ATTLIST library-list-svr4  version CDATA   #FIXED  "1.0">
+<!ATTLIST library-list-svr4  main-lm CDATA   #IMPLIED>
+<!ELEMENT library            EMPTY>
+<!ATTLIST library            name    CDATA   #REQUIRED>
+<!ATTLIST library            lm      CDATA   #REQUIRED>
+<!ATTLIST library            l_addr  CDATA   #REQUIRED>
+<!ATTLIST library            l_ld    CDATA   #REQUIRED>
+ at end smallexample
+
+ at node Memory Map Format
+ at section Memory Map Format
+ at cindex memory map format
+
+To be able to write into flash memory, @value{GDBN} needs to obtain a
+memory map from the target.  This section describes the format of the
+memory map.
+
+The memory map is obtained using the @samp{qXfer:memory-map:read}
+(@pxref{qXfer memory map read}) packet and is an XML document that
+lists memory regions.
+
+ at value{GDBN} must be linked with the Expat library to support XML
+memory maps.  @xref{Expat}.
+
+The top-level structure of the document is shown below:
+
+ at smallexample
+<?xml version="1.0"?>
+<!DOCTYPE memory-map
+          PUBLIC "+//IDN gnu.org//DTD GDB Memory Map V1.0//EN"
+                 "http://sourceware.org/gdb/gdb-memory-map.dtd">
+<memory-map>
+    region...
+</memory-map>
+ at end smallexample
+
+Each region can be either:
+
+ at itemize
+
+ at item
+A region of RAM starting at @var{addr} and extending for @var{length}
+bytes from there:
+
+ at smallexample
+<memory type="ram" start="@var{addr}" length="@var{length}"/>
+ at end smallexample
+
+
+ at item
+A region of read-only memory:
+
+ at smallexample
+<memory type="rom" start="@var{addr}" length="@var{length}"/>
+ at end smallexample
+
+
+ at item
+A region of flash memory, with erasure blocks @var{blocksize}
+bytes in length:
+
+ at smallexample
+<memory type="flash" start="@var{addr}" length="@var{length}">
+  <property name="blocksize">@var{blocksize}</property>
+</memory>
+ at end smallexample
+
+ at end itemize
+
+Regions must not overlap.  @value{GDBN} assumes that areas of memory not covered
+by the memory map are RAM, and uses the ordinary @samp{M} and @samp{X}
+packets to write to addresses in such ranges.
+
+The formal DTD for memory map format is given below:
+
+ at smallexample
+<!-- ................................................... -->
+<!-- Memory Map XML DTD ................................ -->
+<!-- File: memory-map.dtd .............................. -->
+<!-- .................................... .............. -->
+<!-- memory-map.dtd -->
+<!-- memory-map: Root element with versioning -->
+<!ELEMENT memory-map (memory | property)>
+<!ATTLIST memory-map    version CDATA   #FIXED  "1.0.0">
+<!ELEMENT memory (property)>
+<!-- memory: Specifies a memory region,
+             and its type, or device. -->
+<!ATTLIST memory        type    CDATA   #REQUIRED
+                        start   CDATA   #REQUIRED
+                        length  CDATA   #REQUIRED
+                        device  CDATA   #IMPLIED>
+<!-- property: Generic attribute tag -->
+<!ELEMENT property (#PCDATA | property)*>
+<!ATTLIST property      name    CDATA   #REQUIRED>
+ at end smallexample
+
+ at node Thread List Format
+ at section Thread List Format
+ at cindex thread list format
+
+To efficiently update the list of threads and their attributes,
+ at value{GDBN} issues the @samp{qXfer:threads:read} packet
+(@pxref{qXfer threads read}) and obtains the XML document with
+the following structure:
+
+ at smallexample
+<?xml version="1.0"?>
+<threads>
+    <thread id="id" core="0">
+    ... description ...
+    </thread>
+</threads>
+ at end smallexample
+
+Each @samp{thread} element must have the @samp{id} attribute that
+identifies the thread (@pxref{thread-id syntax}).  The
+ at samp{core} attribute, if present, specifies which processor core
+the thread was last executing on.  The content of the of @samp{thread}
+element is interpreted as human-readable auxilliary information.
+
+ at node Traceframe Info Format
+ at section Traceframe Info Format
+ at cindex traceframe info format
+
+To be able to know which objects in the inferior can be examined when
+inspecting a tracepoint hit, @value{GDBN} needs to obtain the list of
+memory ranges, registers and trace state variables that have been
+collected in a traceframe.
+
+This list is obtained using the @samp{qXfer:traceframe-info:read}
+(@pxref{qXfer traceframe info read}) packet and is an XML document.
+
+ at value{GDBN} must be linked with the Expat library to support XML
+traceframe info discovery.  @xref{Expat}.
+
+The top-level structure of the document is shown below:
+
+ at smallexample
+<?xml version="1.0"?>
+<!DOCTYPE traceframe-info
+          PUBLIC "+//IDN gnu.org//DTD GDB Memory Map V1.0//EN"
+                 "http://sourceware.org/gdb/gdb-traceframe-info.dtd">
+<traceframe-info>
+   block...
+</traceframe-info>
+ at end smallexample
+
+Each traceframe block can be either:
+
+ at itemize
+
+ at item
+A region of collected memory starting at @var{addr} and extending for
+ at var{length} bytes from there:
+
+ at smallexample
+<memory start="@var{addr}" length="@var{length}"/>
+ at end smallexample
+
+ at end itemize
+
+The formal DTD for the traceframe info format is given below:
+
+ at smallexample
+<!ELEMENT traceframe-info  (memory)* >
+<!ATTLIST traceframe-info  version CDATA   #FIXED  "1.0">
+
+<!ELEMENT memory        EMPTY>
+<!ATTLIST memory        start   CDATA   #REQUIRED
+                        length  CDATA   #REQUIRED>
+ at end smallexample
+
+ at include agentexpr.texi
+
+ at node Target Descriptions
+ at appendix Target Descriptions
+ at cindex target descriptions
+
+One of the challenges of using @value{GDBN} to debug embedded systems
+is that there are so many minor variants of each processor
+architecture in use.  It is common practice for vendors to start with
+a standard processor core --- ARM, PowerPC, or @acronym{MIPS}, for example ---
+and then make changes to adapt it to a particular market niche.  Some
+architectures have hundreds of variants, available from dozens of
+vendors.  This leads to a number of problems:
+
+ at itemize @bullet
+ at item
+With so many different customized processors, it is difficult for
+the @value{GDBN} maintainers to keep up with the changes.
+ at item
+Since individual variants may have short lifetimes or limited
+audiences, it may not be worthwhile to carry information about every
+variant in the @value{GDBN} source tree.
+ at item
+When @value{GDBN} does support the architecture of the embedded system
+at hand, the task of finding the correct architecture name to give the
+ at command{set architecture} command can be error-prone.
+ at end itemize
+
+To address these problems, the @value{GDBN} remote protocol allows a
+target system to not only identify itself to @value{GDBN}, but to
+actually describe its own features.  This lets @value{GDBN} support
+processor variants it has never seen before --- to the extent that the
+descriptions are accurate, and that @value{GDBN} understands them.
+
+ at value{GDBN} must be linked with the Expat library to support XML
+target descriptions.  @xref{Expat}.
+
+ at menu
+* Retrieving Descriptions::         How descriptions are fetched from a target.
+* Target Description Format::       The contents of a target description.
+* Predefined Target Types::         Standard types available for target
+                                    descriptions.
+* Standard Target Features::        Features @value{GDBN} knows about.
+ at end menu
+
+ at node Retrieving Descriptions
+ at section Retrieving Descriptions
+
+Target descriptions can be read from the target automatically, or
+specified by the user manually.  The default behavior is to read the
+description from the target.  @value{GDBN} retrieves it via the remote
+protocol using @samp{qXfer} requests (@pxref{General Query Packets,
+qXfer}).  The @var{annex} in the @samp{qXfer} packet will be
+ at samp{target.xml}.  The contents of the @samp{target.xml} annex are an
+XML document, of the form described in @ref{Target Description
+Format}.
+
+Alternatively, you can specify a file to read for the target description.
+If a file is set, the target will not be queried.  The commands to
+specify a file are:
+
+ at table @code
+ at cindex set tdesc filename
+ at item set tdesc filename @var{path}
+Read the target description from @var{path}.
+
+ at cindex unset tdesc filename
+ at item unset tdesc filename
+Do not read the XML target description from a file.  @value{GDBN}
+will use the description supplied by the current target.
+
+ at cindex show tdesc filename
+ at item show tdesc filename
+Show the filename to read for a target description, if any.
+ at end table
+
+
+ at node Target Description Format
+ at section Target Description Format
+ at cindex target descriptions, XML format
+
+A target description annex is an @uref{http://www.w3.org/XML/, XML}
+document which complies with the Document Type Definition provided in
+the @value{GDBN} sources in @file{gdb/features/gdb-target.dtd}.  This
+means you can use generally available tools like @command{xmllint} to
+check that your feature descriptions are well-formed and valid.
+However, to help people unfamiliar with XML write descriptions for
+their targets, we also describe the grammar here.
+
+Target descriptions can identify the architecture of the remote target
+and (for some architectures) provide information about custom register
+sets.  They can also identify the OS ABI of the remote target.
+ at value{GDBN} can use this information to autoconfigure for your
+target, or to warn you if you connect to an unsupported target.
+
+Here is a simple target description:
+
+ at smallexample
+<target version="1.0">
+  <architecture>i386:x86-64</architecture>
+</target>
+ at end smallexample
+
+ at noindent
+This minimal description only says that the target uses
+the x86-64 architecture.
+
+A target description has the following overall form, with [ ] marking
+optional elements and @dots{} marking repeatable elements.  The elements
+are explained further below.
+
+ at smallexample
+<?xml version="1.0"?>
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target version="1.0">
+  @r{[}@var{architecture}@r{]}
+  @r{[}@var{osabi}@r{]}
+  @r{[}@var{compatible}@r{]}
+  @r{[}@var{feature}@dots{}@r{]}
+</target>
+ at end smallexample
+
+ at noindent
+The description is generally insensitive to whitespace and line
+breaks, under the usual common-sense rules.  The XML version
+declaration and document type declaration can generally be omitted
+(@value{GDBN} does not require them), but specifying them may be
+useful for XML validation tools.  The @samp{version} attribute for
+ at samp{<target>} may also be omitted, but we recommend
+including it; if future versions of @value{GDBN} use an incompatible
+revision of @file{gdb-target.dtd}, they will detect and report
+the version mismatch.
+
+ at subsection Inclusion
+ at cindex target descriptions, inclusion
+ at cindex XInclude
+ at ifnotinfo
+ at cindex <xi:include>
+ at end ifnotinfo
+
+It can sometimes be valuable to split a target description up into
+several different annexes, either for organizational purposes, or to
+share files between different possible target descriptions.  You can
+divide a description into multiple files by replacing any element of
+the target description with an inclusion directive of the form:
+
+ at smallexample
+<xi:include href="@var{document}"/>
+ at end smallexample
+
+ at noindent
+When @value{GDBN} encounters an element of this form, it will retrieve
+the named XML @var{document}, and replace the inclusion directive with
+the contents of that document.  If the current description was read
+using @samp{qXfer}, then so will be the included document;
+ at var{document} will be interpreted as the name of an annex.  If the
+current description was read from a file, @value{GDBN} will look for
+ at var{document} as a file in the same directory where it found the
+original description.
+
+ at subsection Architecture
+ at cindex <architecture>
+
+An @samp{<architecture>} element has this form:
+
+ at smallexample
+  <architecture>@var{arch}</architecture>
+ at end smallexample
+
+ at var{arch} is one of the architectures from the set accepted by
+ at code{set architecture} (@pxref{Targets, ,Specifying a Debugging Target}).
+
+ at subsection OS ABI
+ at cindex @code{<osabi>}
+
+This optional field was introduced in @value{GDBN} version 7.0.
+Previous versions of @value{GDBN} ignore it.
+
+An @samp{<osabi>} element has this form:
+
+ at smallexample
+  <osabi>@var{abi-name}</osabi>
+ at end smallexample
+
+ at var{abi-name} is an OS ABI name from the same selection accepted by
+ at w{@code{set osabi}} (@pxref{ABI, ,Configuring the Current ABI}).
+
+ at subsection Compatible Architecture
+ at cindex @code{<compatible>}
+
+This optional field was introduced in @value{GDBN} version 7.0.
+Previous versions of @value{GDBN} ignore it.
+
+A @samp{<compatible>} element has this form:
+
+ at smallexample
+  <compatible>@var{arch}</compatible>
+ at end smallexample
+
+ at var{arch} is one of the architectures from the set accepted by
+ at code{set architecture} (@pxref{Targets, ,Specifying a Debugging Target}).
+
+A @samp{<compatible>} element is used to specify that the target
+is able to run binaries in some other than the main target architecture
+given by the @samp{<architecture>} element.  For example, on the
+Cell Broadband Engine, the main architecture is @code{powerpc:common}
+or @code{powerpc:common64}, but the system is able to run binaries
+in the @code{spu} architecture as well.  The way to describe this
+capability with @samp{<compatible>} is as follows:
+
+ at smallexample
+  <architecture>powerpc:common</architecture>
+  <compatible>spu</compatible>
+ at end smallexample
+
+ at subsection Features
+ at cindex <feature>
+
+Each @samp{<feature>} describes some logical portion of the target
+system.  Features are currently used to describe available CPU
+registers and the types of their contents.  A @samp{<feature>} element
+has this form:
+
+ at smallexample
+<feature name="@var{name}">
+  @r{[}@var{type}@dots{}@r{]}
+  @var{reg}@dots{}
+</feature>
+ at end smallexample
+
+ at noindent
+Each feature's name should be unique within the description.  The name
+of a feature does not matter unless @value{GDBN} has some special
+knowledge of the contents of that feature; if it does, the feature
+should have its standard name.  @xref{Standard Target Features}.
+
+ at subsection Types
+
+Any register's value is a collection of bits which @value{GDBN} must
+interpret.  The default interpretation is a two's complement integer,
+but other types can be requested by name in the register description.
+Some predefined types are provided by @value{GDBN} (@pxref{Predefined
+Target Types}), and the description can define additional composite types.
+
+Each type element must have an @samp{id} attribute, which gives
+a unique (within the containing @samp{<feature>}) name to the type.
+Types must be defined before they are used.
+
+ at cindex <vector>
+Some targets offer vector registers, which can be treated as arrays
+of scalar elements.  These types are written as @samp{<vector>} elements,
+specifying the array element type, @var{type}, and the number of elements,
+ at var{count}:
+
+ at smallexample
+<vector id="@var{id}" type="@var{type}" count="@var{count}"/>
+ at end smallexample
+
+ at cindex <union>
+If a register's value is usefully viewed in multiple ways, define it
+with a union type containing the useful representations.  The
+ at samp{<union>} element contains one or more @samp{<field>} elements,
+each of which has a @var{name} and a @var{type}:
+
+ at smallexample
+<union id="@var{id}">
+  <field name="@var{name}" type="@var{type}"/>
+  @dots{}
+</union>
+ at end smallexample
+
+ at cindex <struct>
+If a register's value is composed from several separate values, define
+it with a structure type.  There are two forms of the @samp{<struct>}
+element; a @samp{<struct>} element must either contain only bitfields
+or contain no bitfields.  If the structure contains only bitfields,
+its total size in bytes must be specified, each bitfield must have an
+explicit start and end, and bitfields are automatically assigned an
+integer type.  The field's @var{start} should be less than or
+equal to its @var{end}, and zero represents the least significant bit.
+
+ at smallexample
+<struct id="@var{id}" size="@var{size}">
+  <field name="@var{name}" start="@var{start}" end="@var{end}"/>
+  @dots{}
+</struct>
+ at end smallexample
+
+If the structure contains no bitfields, then each field has an
+explicit type, and no implicit padding is added.
+
+ at smallexample
+<struct id="@var{id}">
+  <field name="@var{name}" type="@var{type}"/>
+  @dots{}
+</struct>
+ at end smallexample
+
+ at cindex <flags>
+If a register's value is a series of single-bit flags, define it with
+a flags type.  The @samp{<flags>} element has an explicit @var{size}
+and contains one or more @samp{<field>} elements.  Each field has a
+ at var{name}, a @var{start}, and an @var{end}.  Only single-bit flags
+are supported.
+
+ at smallexample
+<flags id="@var{id}" size="@var{size}">
+  <field name="@var{name}" start="@var{start}" end="@var{end}"/>
+  @dots{}
+</flags>
+ at end smallexample
+
+ at subsection Registers
+ at cindex <reg>
+
+Each register is represented as an element with this form:
+
+ at smallexample
+<reg name="@var{name}"
+     bitsize="@var{size}"
+     @r{[}regnum="@var{num}"@r{]}
+     @r{[}save-restore="@var{save-restore}"@r{]}
+     @r{[}type="@var{type}"@r{]}
+     @r{[}group="@var{group}"@r{]}/>
+ at end smallexample
+
+ at noindent
+The components are as follows:
+
+ at table @var
+
+ at item name
+The register's name; it must be unique within the target description.
+
+ at item bitsize
+The register's size, in bits.
+
+ at item regnum
+The register's number.  If omitted, a register's number is one greater
+than that of the previous register (either in the current feature or in
+a preceding feature); the first register in the target description
+defaults to zero.  This register number is used to read or write
+the register; e.g.@: it is used in the remote @code{p} and @code{P}
+packets, and registers appear in the @code{g} and @code{G} packets
+in order of increasing register number.
+
+ at item save-restore
+Whether the register should be preserved across inferior function
+calls; this must be either @code{yes} or @code{no}.  The default is
+ at code{yes}, which is appropriate for most registers except for
+some system control registers; this is not related to the target's
+ABI.
+
+ at item type
+The type of the register.  @var{type} may be a predefined type, a type
+defined in the current feature, or one of the special types @code{int}
+and @code{float}.  @code{int} is an integer type of the correct size
+for @var{bitsize}, and @code{float} is a floating point type (in the
+architecture's normal floating point format) of the correct size for
+ at var{bitsize}.  The default is @code{int}.
+
+ at item group
+The register group to which this register belongs.  @var{group} must
+be either @code{general}, @code{float}, or @code{vector}.  If no
+ at var{group} is specified, @value{GDBN} will not display the register
+in @code{info registers}.
+
+ at end table
+
+ at node Predefined Target Types
+ at section Predefined Target Types
+ at cindex target descriptions, predefined types
+
+Type definitions in the self-description can build up composite types
+from basic building blocks, but can not define fundamental types.  Instead,
+standard identifiers are provided by @value{GDBN} for the fundamental
+types.  The currently supported types are:
+
+ at table @code
+
+ at item int8
+ at itemx int16
+ at itemx int32
+ at itemx int64
+ at itemx int128
+Signed integer types holding the specified number of bits.
+
+ at item uint8
+ at itemx uint16
+ at itemx uint32
+ at itemx uint64
+ at itemx uint128
+Unsigned integer types holding the specified number of bits.
+
+ at item code_ptr
+ at itemx data_ptr
+Pointers to unspecified code and data.  The program counter and
+any dedicated return address register may be marked as code
+pointers; printing a code pointer converts it into a symbolic
+address.  The stack pointer and any dedicated address registers
+may be marked as data pointers.
+
+ at item ieee_single
+Single precision IEEE floating point.
+
+ at item ieee_double
+Double precision IEEE floating point.
+
+ at item arm_fpa_ext
+The 12-byte extended precision format used by ARM FPA registers.
+
+ at item i387_ext
+The 10-byte extended precision format used by x87 registers.
+
+ at item i386_eflags
+32bit @sc{eflags} register used by x86.
+
+ at item i386_mxcsr
+32bit @sc{mxcsr} register used by x86.
+
+ at end table
+
+ at node Standard Target Features
+ at section Standard Target Features
+ at cindex target descriptions, standard features
+
+A target description must contain either no registers or all the
+target's registers.  If the description contains no registers, then
+ at value{GDBN} will assume a default register layout, selected based on
+the architecture.  If the description contains any registers, the
+default layout will not be used; the standard registers must be
+described in the target description, in such a way that @value{GDBN}
+can recognize them.
+
+This is accomplished by giving specific names to feature elements
+which contain standard registers.  @value{GDBN} will look for features
+with those names and verify that they contain the expected registers;
+if any known feature is missing required registers, or if any required
+feature is missing, @value{GDBN} will reject the target
+description.  You can add additional registers to any of the
+standard features --- @value{GDBN} will display them just as if
+they were added to an unrecognized feature.
+
+This section lists the known features and their expected contents.
+Sample XML documents for these features are included in the
+ at value{GDBN} source tree, in the directory @file{gdb/features}.
+
+Names recognized by @value{GDBN} should include the name of the
+company or organization which selected the name, and the overall
+architecture to which the feature applies; so e.g.@: the feature
+containing ARM core registers is named @samp{org.gnu.gdb.arm.core}.
+
+The names of registers are not case sensitive for the purpose
+of recognizing standard features, but @value{GDBN} will only display
+registers using the capitalization used in the description.
+
+ at menu
+* ARM Features::
+* i386 Features::
+* MIPS Features::
+* M68K Features::
+* PowerPC Features::
+* TIC6x Features::
+ at end menu
+
+
+ at node ARM Features
+ at subsection ARM Features
+ at cindex target descriptions, ARM features
+
+The @samp{org.gnu.gdb.arm.core} feature is required for non-M-profile
+ARM targets.
+It should contain registers @samp{r0} through @samp{r13}, @samp{sp},
+ at samp{lr}, @samp{pc}, and @samp{cpsr}.
+
+For M-profile targets (e.g. Cortex-M3), the @samp{org.gnu.gdb.arm.core}
+feature is replaced by @samp{org.gnu.gdb.arm.m-profile}.  It should contain
+registers @samp{r0} through @samp{r13}, @samp{sp}, @samp{lr}, @samp{pc},
+and @samp{xpsr}.
+
+The @samp{org.gnu.gdb.arm.fpa} feature is optional.  If present, it
+should contain registers @samp{f0} through @samp{f7} and @samp{fps}.
+
+The @samp{org.gnu.gdb.xscale.iwmmxt} feature is optional.  If present,
+it should contain at least registers @samp{wR0} through @samp{wR15} and
+ at samp{wCGR0} through @samp{wCGR3}.  The @samp{wCID}, @samp{wCon},
+ at samp{wCSSF}, and @samp{wCASF} registers are optional.
+
+The @samp{org.gnu.gdb.arm.vfp} feature is optional.  If present, it
+should contain at least registers @samp{d0} through @samp{d15}.  If
+they are present, @samp{d16} through @samp{d31} should also be included.
+ at value{GDBN} will synthesize the single-precision registers from
+halves of the double-precision registers.
+
+The @samp{org.gnu.gdb.arm.neon} feature is optional.  It does not
+need to contain registers; it instructs @value{GDBN} to display the
+VFP double-precision registers as vectors and to synthesize the
+quad-precision registers from pairs of double-precision registers.
+If this feature is present, @samp{org.gnu.gdb.arm.vfp} must also
+be present and include 32 double-precision registers.
+
+ at node i386 Features
+ at subsection i386 Features
+ at cindex target descriptions, i386 features
+
+The @samp{org.gnu.gdb.i386.core} feature is required for i386/amd64
+targets.  It should describe the following registers:
+
+ at itemize @minus
+ at item
+ at samp{eax} through @samp{edi} plus @samp{eip} for i386
+ at item
+ at samp{rax} through @samp{r15} plus @samp{rip} for amd64
+ at item
+ at samp{eflags}, @samp{cs}, @samp{ss}, @samp{ds}, @samp{es},
+ at samp{fs}, @samp{gs}
+ at item 
+ at samp{st0} through @samp{st7}
+ at item 
+ at samp{fctrl}, @samp{fstat}, @samp{ftag}, @samp{fiseg}, @samp{fioff},
+ at samp{foseg}, @samp{fooff} and @samp{fop}
+ at end itemize
+
+The register sets may be different, depending on the target.
+
+The @samp{org.gnu.gdb.i386.sse} feature is optional.  It should
+describe registers:
+
+ at itemize @minus
+ at item
+ at samp{xmm0} through @samp{xmm7} for i386
+ at item
+ at samp{xmm0} through @samp{xmm15} for amd64
+ at item 
+ at samp{mxcsr}
+ at end itemize
+
+The @samp{org.gnu.gdb.i386.avx} feature is optional and requires the
+ at samp{org.gnu.gdb.i386.sse} feature.  It should
+describe the upper 128 bits of @sc{ymm} registers:
+
+ at itemize @minus
+ at item
+ at samp{ymm0h} through @samp{ymm7h} for i386
+ at item
+ at samp{ymm0h} through @samp{ymm15h} for amd64
+ at end itemize
+
+The @samp{org.gnu.gdb.i386.linux} feature is optional.  It should
+describe a single register, @samp{orig_eax}.
+
+ at node MIPS Features
+ at subsection @acronym{MIPS} Features
+ at cindex target descriptions, @acronym{MIPS} features
+
+The @samp{org.gnu.gdb.mips.cpu} feature is required for @acronym{MIPS} targets.
+It should contain registers @samp{r0} through @samp{r31}, @samp{lo},
+ at samp{hi}, and @samp{pc}.  They may be 32-bit or 64-bit depending
+on the target.
+
+The @samp{org.gnu.gdb.mips.cp0} feature is also required.  It should
+contain at least the @samp{status}, @samp{badvaddr}, and @samp{cause}
+registers.  They may be 32-bit or 64-bit depending on the target.
+
+The @samp{org.gnu.gdb.mips.fpu} feature is currently required, though
+it may be optional in a future version of @value{GDBN}.  It should
+contain registers @samp{f0} through @samp{f31}, @samp{fcsr}, and
+ at samp{fir}.  They may be 32-bit or 64-bit depending on the target.
+
+The @samp{org.gnu.gdb.mips.dsp} feature is optional.  It should
+contain registers @samp{hi1} through @samp{hi3}, @samp{lo1} through
+ at samp{lo3}, and @samp{dspctl}.  The @samp{dspctl} register should
+be 32-bit and the rest may be 32-bit or 64-bit depending on the target.
+
+The @samp{org.gnu.gdb.mips.linux} feature is optional.  It should
+contain a single register, @samp{restart}, which is used by the
+Linux kernel to control restartable syscalls.
+
+ at node M68K Features
+ at subsection M68K Features
+ at cindex target descriptions, M68K features
+
+ at table @code
+ at item @samp{org.gnu.gdb.m68k.core}
+ at itemx @samp{org.gnu.gdb.coldfire.core}
+ at itemx @samp{org.gnu.gdb.fido.core}
+One of those features must be always present. 
+The feature that is present determines which flavor of m68k is
+used.  The feature that is present should contain registers
+ at samp{d0} through @samp{d7}, @samp{a0} through @samp{a5}, @samp{fp},
+ at samp{sp}, @samp{ps} and @samp{pc}.
+
+ at item @samp{org.gnu.gdb.coldfire.fp}
+This feature is optional.  If present, it should contain registers
+ at samp{fp0} through @samp{fp7}, @samp{fpcontrol}, @samp{fpstatus} and
+ at samp{fpiaddr}.
+ at end table
+
+ at node PowerPC Features
+ at subsection PowerPC Features
+ at cindex target descriptions, PowerPC features
+
+The @samp{org.gnu.gdb.power.core} feature is required for PowerPC
+targets.  It should contain registers @samp{r0} through @samp{r31},
+ at samp{pc}, @samp{msr}, @samp{cr}, @samp{lr}, @samp{ctr}, and
+ at samp{xer}.  They may be 32-bit or 64-bit depending on the target.
+
+The @samp{org.gnu.gdb.power.fpu} feature is optional.  It should
+contain registers @samp{f0} through @samp{f31} and @samp{fpscr}.
+
+The @samp{org.gnu.gdb.power.altivec} feature is optional.  It should
+contain registers @samp{vr0} through @samp{vr31}, @samp{vscr},
+and @samp{vrsave}.
+
+The @samp{org.gnu.gdb.power.vsx} feature is optional.  It should
+contain registers @samp{vs0h} through @samp{vs31h}.  @value{GDBN}
+will combine these registers with the floating point registers
+(@samp{f0} through @samp{f31}) and the altivec registers (@samp{vr0}
+through @samp{vr31}) to present the 128-bit wide registers @samp{vs0}
+through @samp{vs63}, the set of vector registers for POWER7.
+
+The @samp{org.gnu.gdb.power.spe} feature is optional.  It should
+contain registers @samp{ev0h} through @samp{ev31h}, @samp{acc}, and
+ at samp{spefscr}.  SPE targets should provide 32-bit registers in
+ at samp{org.gnu.gdb.power.core} and provide the upper halves in
+ at samp{ev0h} through @samp{ev31h}.  @value{GDBN} will combine
+these to present registers @samp{ev0} through @samp{ev31} to the
+user.
+
+ at node TIC6x Features
+ at subsection TMS320C6x Features
+ at cindex target descriptions, TIC6x features
+ at cindex target descriptions, TMS320C6x features
+The @samp{org.gnu.gdb.tic6x.core} feature is required for TMS320C6x
+targets.  It should contain registers @samp{A0} through @samp{A15},
+registers @samp{B0} through @samp{B15}, @samp{CSR} and @samp{PC}.
+
+The @samp{org.gnu.gdb.tic6x.gp} feature is optional.  It should
+contain registers @samp{A16} through @samp{A31} and @samp{B16}
+through @samp{B31}.
+
+The @samp{org.gnu.gdb.tic6x.c6xp} feature is optional.  It should
+contain registers @samp{TSR}, @samp{ILC} and @samp{RILC}.
+
+ at node Operating System Information
+ at appendix Operating System Information
+ at cindex operating system information
+
+ at menu
+* Process list::
+ at end menu
+
+Users of @value{GDBN} often wish to obtain information about the state of
+the operating system running on the target---for example the list of
+processes, or the list of open files.  This section describes the
+mechanism that makes it possible.  This mechanism is similar to the 
+target features mechanism (@pxref{Target Descriptions}), but focuses
+on a different aspect of target.
+
+Operating system information is retrived from the target via the
+remote protocol, using @samp{qXfer} requests (@pxref{qXfer osdata
+read}).  The object name in the request should be @samp{osdata}, and
+the @var{annex} identifies the data to be fetched.
+
+ at node Process list
+ at appendixsection Process list
+ at cindex operating system information, process list
+
+When requesting the process list, the @var{annex} field in the
+ at samp{qXfer} request should be @samp{processes}.  The returned data is
+an XML document.  The formal syntax of this document is defined in
+ at file{gdb/features/osdata.dtd}.
+
+An example document is:
+
+ at smallexample
+<?xml version="1.0"?>
+<!DOCTYPE target SYSTEM "osdata.dtd">
+<osdata type="processes">
+  <item>
+    <column name="pid">1</column>
+    <column name="user">root</column>
+    <column name="command">/sbin/init</column>
+    <column name="cores">1,2,3</column>
+  </item>
+</osdata>
+ at end smallexample
+
+Each item should include a column whose name is @samp{pid}.  The value
+of that column should identify the process on the target.  The
+ at samp{user} and @samp{command} columns are optional, and will be
+displayed by @value{GDBN}.  The @samp{cores} column, if present,
+should contain a comma-separated list of cores that this process
+is running on.  Target may provide additional columns,
+which @value{GDBN} currently ignores.
+
+ at node Trace File Format
+ at appendix Trace File Format
+ at cindex trace file format
+
+The trace file comes in three parts: a header, a textual description
+section, and a trace frame section with binary data.
+
+The header has the form @code{\x7fTRACE0\n}.  The first byte is
+ at code{0x7f} so as to indicate that the file contains binary data,
+while the @code{0} is a version number that may have different values
+in the future.
+
+The description section consists of multiple lines of @sc{ascii} text
+separated by newline characters (@code{0xa}).  The lines may include a
+variety of optional descriptive or context-setting information, such
+as tracepoint definitions or register set size.  @value{GDBN} will
+ignore any line that it does not recognize.  An empty line marks the end
+of this section.
+
+ at c FIXME add some specific types of data
+
+The trace frame section consists of a number of consecutive frames.
+Each frame begins with a two-byte tracepoint number, followed by a
+four-byte size giving the amount of data in the frame.  The data in
+the frame consists of a number of blocks, each introduced by a
+character indicating its type (at least register, memory, and trace
+state variable).  The data in this section is raw binary, not a
+hexadecimal or other encoding; its endianness matches the target's
+endianness.
+
+ at c FIXME bi-arch may require endianness/arch info in description section
+
+ at table @code
+ at item R @var{bytes}
+Register block.  The number and ordering of bytes matches that of a
+ at code{g} packet in the remote protocol.  Note that these are the
+actual bytes, in target order and @value{GDBN} register order, not a
+hexadecimal encoding.
+
+ at item M @var{address} @var{length} @var{bytes}...
+Memory block.  This is a contiguous block of memory, at the 8-byte
+address @var{address}, with a 2-byte length @var{length}, followed by
+ at var{length} bytes.
+
+ at item V @var{number} @var{value}
+Trace state variable block.  This records the 8-byte signed value
+ at var{value} of trace state variable numbered @var{number}.
+
+ at end table
+
+Future enhancements of the trace file format may include additional types
+of blocks.
+
+ at node Index Section Format
+ at appendix @code{.gdb_index} section format
+ at cindex .gdb_index section format
+ at cindex index section format
+
+This section documents the index section that is created by @code{save
+gdb-index} (@pxref{Index Files}).  The index section is
+DWARF-specific; some knowledge of DWARF is assumed in this
+description.
+
+The mapped index file format is designed to be directly
+ at code{mmap}able on any architecture.  In most cases, a datum is
+represented using a little-endian 32-bit integer value, called an
+ at code{offset_type}.  Big endian machines must byte-swap the values
+before using them.  Exceptions to this rule are noted.  The data is
+laid out such that alignment is always respected.
+
+A mapped index consists of several areas, laid out in order.
+
+ at enumerate
+ at item
+The file header.  This is a sequence of values, of @code{offset_type}
+unless otherwise noted:
+
+ at enumerate
+ at item
+The version number, currently 7.  Versions 1, 2 and 3 are obsolete.
+Version 4 uses a different hashing function from versions 5 and 6.
+Version 6 includes symbols for inlined functions, whereas versions 4
+and 5 do not.  Version 7 adds attributes to the CU indices in the
+symbol table.  @value{GDBN} will only read version 4, 5, or 6 indices
+by specifying @code{set use-deprecated-index-sections on}.
+
+ at item
+The offset, from the start of the file, of the CU list.
+
+ at item
+The offset, from the start of the file, of the types CU list.  Note
+that this area can be empty, in which case this offset will be equal
+to the next offset.
+
+ at item
+The offset, from the start of the file, of the address area.
+
+ at item
+The offset, from the start of the file, of the symbol table.
+
+ at item
+The offset, from the start of the file, of the constant pool.
+ at end enumerate
+
+ at item
+The CU list.  This is a sequence of pairs of 64-bit little-endian
+values, sorted by the CU offset.  The first element in each pair is
+the offset of a CU in the @code{.debug_info} section.  The second
+element in each pair is the length of that CU.  References to a CU
+elsewhere in the map are done using a CU index, which is just the
+0-based index into this table.  Note that if there are type CUs, then
+conceptually CUs and type CUs form a single list for the purposes of
+CU indices.
+
+ at item
+The types CU list.  This is a sequence of triplets of 64-bit
+little-endian values.  In a triplet, the first value is the CU offset,
+the second value is the type offset in the CU, and the third value is
+the type signature.  The types CU list is not sorted.
+
+ at item
+The address area.  The address area consists of a sequence of address
+entries.  Each address entry has three elements:
+
+ at enumerate
+ at item
+The low address.  This is a 64-bit little-endian value.
+
+ at item
+The high address.  This is a 64-bit little-endian value.  Like
+ at code{DW_AT_high_pc}, the value is one byte beyond the end.
+
+ at item
+The CU index.  This is an @code{offset_type} value.
+ at end enumerate
+
+ at item
+The symbol table.  This is an open-addressed hash table.  The size of
+the hash table is always a power of 2.
+
+Each slot in the hash table consists of a pair of @code{offset_type}
+values.  The first value is the offset of the symbol's name in the
+constant pool.  The second value is the offset of the CU vector in the
+constant pool.
+
+If both values are 0, then this slot in the hash table is empty.  This
+is ok because while 0 is a valid constant pool index, it cannot be a
+valid index for both a string and a CU vector.
+
+The hash value for a table entry is computed by applying an
+iterative hash function to the symbol's name.  Starting with an
+initial value of @code{r = 0}, each (unsigned) character @samp{c} in
+the string is incorporated into the hash using the formula depending on the
+index version:
+
+ at table @asis
+ at item Version 4
+The formula is @code{r = r * 67 + c - 113}.
+
+ at item Versions 5 to 7
+The formula is @code{r = r * 67 + tolower (c) - 113}.
+ at end table
+
+The terminating @samp{\0} is not incorporated into the hash.
+
+The step size used in the hash table is computed via
+ at code{((hash * 17) & (size - 1)) | 1}, where @samp{hash} is the hash
+value, and @samp{size} is the size of the hash table.  The step size
+is used to find the next candidate slot when handling a hash
+collision.
+
+The names of C at t{++} symbols in the hash table are canonicalized.  We
+don't currently have a simple description of the canonicalization
+algorithm; if you intend to create new index sections, you must read
+the code.
+
+ at item
+The constant pool.  This is simply a bunch of bytes.  It is organized
+so that alignment is correct: CU vectors are stored first, followed by
+strings.
+
+A CU vector in the constant pool is a sequence of @code{offset_type}
+values.  The first value is the number of CU indices in the vector.
+Each subsequent value is the index and symbol attributes of a CU in
+the CU list.  This element in the hash table is used to indicate which
+CUs define the symbol and how the symbol is used.
+See below for the format of each CU index+attributes entry.
+
+A string in the constant pool is zero-terminated.
+ at end enumerate
+
+Attributes were added to CU index values in @code{.gdb_index} version 7.
+If a symbol has multiple uses within a CU then there is one
+CU index+attributes value for each use.
+
+The format of each CU index+attributes entry is as follows
+(bit 0 = LSB):
+
+ at table @asis
+
+ at item Bits 0-23
+This is the index of the CU in the CU list.
+ at item Bits 24-27
+These bits are reserved for future purposes and must be zero.
+ at item Bits 28-30
+The kind of the symbol in the CU.
+
+ at table @asis
+ at item 0
+This value is reserved and should not be used.
+By reserving zero the full @code{offset_type} value is backwards compatible
+with previous versions of the index.
+ at item 1
+The symbol is a type.
+ at item 2
+The symbol is a variable or an enum value.
+ at item 3
+The symbol is a function.
+ at item 4
+Any other kind of symbol.
+ at item 5,6,7
+These values are reserved.
+ at end table
+
+ at item Bit 31
+This bit is zero if the value is global and one if it is static.
+
+The determination of whether a symbol is global or static is complicated.
+The authorative reference is the file @file{dwarf2read.c} in
+ at value{GDBN} sources.
+
+ at end table
+
+This pseudo-code describes the computation of a symbol's kind and
+global/static attributes in the index.
+
+ at smallexample
+is_external = get_attribute (die, DW_AT_external);
+language = get_attribute (cu_die, DW_AT_language);
+switch (die->tag)
+  @{
+  case DW_TAG_typedef:
+  case DW_TAG_base_type:
+  case DW_TAG_subrange_type:
+    kind = TYPE;
+    is_static = 1;
+    break;
+  case DW_TAG_enumerator:
+    kind = VARIABLE;
+    is_static = (language != CPLUS && language != JAVA);
+    break;
+  case DW_TAG_subprogram:
+    kind = FUNCTION;
+    is_static = ! (is_external || language == ADA);
+    break;
+  case DW_TAG_constant:
+    kind = VARIABLE;
+    is_static = ! is_external;
+    break;
+  case DW_TAG_variable:
+    kind = VARIABLE;
+    is_static = ! is_external;
+    break;
+  case DW_TAG_namespace:
+    kind = TYPE;
+    is_static = 0;
+    break;
+  case DW_TAG_class_type:
+  case DW_TAG_interface_type:
+  case DW_TAG_structure_type:
+  case DW_TAG_union_type:
+  case DW_TAG_enumeration_type:
+    kind = TYPE;
+    is_static = (language != CPLUS && language != JAVA);
+    break;
+  default:
+    assert (0);
+  @}
+ at end smallexample
+
+ at include gpl.texi
+
+ at node GNU Free Documentation License
+ at appendix GNU Free Documentation License
+ at include fdl.texi
+
+ at node Concept Index
+ at unnumbered Concept Index
+
+ at printindex cp
+
+ at node Command and Variable Index
+ at unnumbered Command, Variable, and Function Index
+
+ at printindex fn
+
+ at tex
+% I think something like @@colophon should be in texinfo.  In the
+% meantime:
+\long\def\colophon{\hbox to0pt{}\vfill
+\centerline{The body of this manual is set in}
+\centerline{\fontname\tenrm,}
+\centerline{with headings in {\bf\fontname\tenbf}}
+\centerline{and examples in {\tt\fontname\tentt}.}
+\centerline{{\it\fontname\tenit\/},}
+\centerline{{\bf\fontname\tenbf}, and}
+\centerline{{\sl\fontname\tensl\/}}
+\centerline{are used for emphasis.}\vfill}
+\page\colophon
+% Blame: doc@@cygnus.com, 1991.
+ at end tex
+
+ at bye
diff --git a/gdb/doc/gdbint.info b/gdb/doc/gdbint.info
new file mode 100644
index 0000000..c392c8d
--- /dev/null
+++ b/gdb/doc/gdbint.info
@@ -0,0 +1,121 @@
+This is gdbint.info, produced by makeinfo version 4.8 from
+./gdbint.texinfo.
+
+INFO-DIR-SECTION Software development
+START-INFO-DIR-ENTRY
+* Gdb-Internals: (gdbint).	The GNU debugger's internals.
+END-INFO-DIR-ENTRY
+
+   Copyright (C) 1990-1994, 1996, 1998-2006, 2008-2012 Free Software
+Foundation, Inc.  Contributed by Cygnus Solutions.  Written by John
+Gilmore.  Second Edition by Stan Shebs.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+   This file documents the internals of the GNU debugger GDB.
+
+   Copyright (C) 1990-1994, 1996, 1998-2006, 2008-2012 Free Software
+Foundation, Inc.  Contributed by Cygnus Solutions.  Written by John
+Gilmore.  Second Edition by Stan Shebs.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+
+Indirect:
+gdbint.info-1: 1399
+gdbint.info-2: 297864
+
+Tag Table:
+(Indirect)
+Node: Top1399
+Node: Summary2350
+Node: Requirements2500
+Node: Contributors3979
+Node: Overall Structure5572
+Node: Algorithms10595
+Node: User Interface42037
+Ref: UI-Independent Output43892
+Ref: User Interface-Footnote-165882
+Ref: User Interface-Footnote-265931
+Node: libgdb66166
+Node: Values70117
+Node: Stack Frames72961
+Node: Symbol Handling77943
+Node: Language Support94748
+Node: Host Definition99474
+Node: Target Architecture Definition103833
+Node: OS ABI Variant Handling104653
+Node: Initialize New Architecture109498
+Node: How an Architecture is Represented109849
+Node: Looking Up an Existing Architecture111806
+Node: Creating a New Architecture114725
+Node: Registers and Memory116763
+Node: Pointers and Addresses117555
+Ref: Pointers and Addresses-Footnote-1123556
+Node: Address Classes123799
+Node: Register Representation127044
+Node: Raw and Cooked Registers127418
+Node: Register Architecture Functions & Variables128602
+Node: Register Information Functions132211
+Ref: Register Information Functions-Footnote-1138113
+Node: Register and Memory Data138532
+Node: Register Caching141681
+Node: Frame Interpretation143217
+Node: All About Stack Frames143623
+Ref: All About Stack Frames-Footnote-1148974
+Node: Frame Handling Terminology149206
+Node: Prologue Caches151733
+Node: Functions and Variable to Analyze Frames153414
+Ref: frame_align155512
+Node: Functions to Access Frame Data157026
+Node: Analyzing Stacks---Frame Sniffers159317
+Ref: Analyzing Stacks---Frame Sniffers-Footnote-1163967
+Node: Inferior Call Setup164464
+Node: About Dummy Frames164747
+Node: Functions Creating Dummy Frames165373
+Node: Adding support for debugging core files169430
+Node: Defining Other Architecture Features169974
+Ref: gdbarch_breakpoint_from_pc174821
+Ref: gdbarch_stabs_argument_has_addr187215
+Ref: gdbarch_push_dummy_call187462
+Ref: gdbarch_push_dummy_code188022
+Ref: gdbarch_return_value189004
+Ref: gdbarch_dummy_id194641
+Node: Adding a New Target195329
+Node: Target Descriptions197796
+Node: Target Descriptions Implementation198735
+Node: Adding Target Described Register Support200109
+Node: Target Vector Definition203055
+Node: Managing Execution State203587
+Node: Existing Targets205400
+Node: Native Debugging207915
+Node: Support Libraries211743
+Node: Coding Standards223268
+Node: Misc Guidelines231429
+Node: Porting GDB249792
+Node: Versions and Branches251670
+Ref: Tags257626
+Ref: experimental branch tags257957
+Node: Start of New Year Procedure258689
+Node: Releasing GDB260150
+Node: Testsuite278382
+Ref: Testsuite-Footnote-1293259
+Node: Hints293377
+Node: Getting Started293699
+Node: Debugging GDB297864
+Node: GDB Observers302992
+Node: GNU Free Documentation License311536
+Node: Concept Index336711
+Node: Function and Variable Index360346
+
+End Tag Table
diff --git a/gdb/doc/gdbint.info-1 b/gdb/doc/gdbint.info-1
new file mode 100644
index 0000000..21e048e
--- /dev/null
+++ b/gdb/doc/gdbint.info-1
@@ -0,0 +1,7302 @@
+This is gdbint.info, produced by makeinfo version 4.8 from
+./gdbint.texinfo.
+
+INFO-DIR-SECTION Software development
+START-INFO-DIR-ENTRY
+* Gdb-Internals: (gdbint).	The GNU debugger's internals.
+END-INFO-DIR-ENTRY
+
+   Copyright (C) 1990-1994, 1996, 1998-2006, 2008-2012 Free Software
+Foundation, Inc.  Contributed by Cygnus Solutions.  Written by John
+Gilmore.  Second Edition by Stan Shebs.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+   This file documents the internals of the GNU debugger GDB.
+
+   Copyright (C) 1990-1994, 1996, 1998-2006, 2008-2012 Free Software
+Foundation, Inc.  Contributed by Cygnus Solutions.  Written by John
+Gilmore.  Second Edition by Stan Shebs.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+
+File: gdbint.info,  Node: Top,  Next: Summary,  Up: (dir)
+
+Scope of this Document
+**********************
+
+This document documents the internals of the GNU debugger, GDB.  It
+includes description of GDB's key algorithms and operations, as well as
+the mechanisms that adapt GDB to specific hosts and targets.
+
+* Menu:
+
+* Summary::
+* Overall Structure::
+* Algorithms::
+* User Interface::
+* libgdb::
+* Values::
+* Stack Frames::
+* Symbol Handling::
+* Language Support::
+* Host Definition::
+* Target Architecture Definition::
+* Target Descriptions::
+* Target Vector Definition::
+* Native Debugging::
+* Support Libraries::
+* Coding Standards::
+* Misc Guidelines::
+* Porting GDB::
+* Versions and Branches::
+* Start of New Year Procedure::
+* Releasing GDB::
+* Testsuite::
+* Hints::
+
+* GDB Observers::  GDB Currently available observers
+* GNU Free Documentation License::  The license for this documentation
+* Concept Index::
+* Function and Variable Index::
+
+
+File: gdbint.info,  Node: Summary,  Next: Overall Structure,  Prev: Top,  Up: Top
+
+1 Summary
+*********
+
+* Menu:
+
+* Requirements::
+* Contributors::
+
+
+File: gdbint.info,  Node: Requirements,  Next: Contributors,  Up: Summary
+
+1.1 Requirements
+================
+
+Before diving into the internals, you should understand the formal
+requirements and other expectations for GDB.  Although some of these
+may seem obvious, there have been proposals for GDB that have run
+counter to these requirements.
+
+   First of all, GDB is a debugger.  It's not designed to be a front
+panel for embedded systems.  It's not a text editor.  It's not a shell.
+It's not a programming environment.
+
+   GDB is an interactive tool.  Although a batch mode is available,
+GDB's primary role is to interact with a human programmer.
+
+   GDB should be responsive to the user.  A programmer hot on the trail
+of a nasty bug, and operating under a looming deadline, is going to be
+very impatient of everything, including the response time to debugger
+commands.
+
+   GDB should be relatively permissive, such as for expressions.  While
+the compiler should be picky (or have the option to be made picky),
+since source code lives for a long time usually, the programmer doing
+debugging shouldn't be spending time figuring out to mollify the
+debugger.
+
+   GDB will be called upon to deal with really large programs.
+Executable sizes of 50 to 100 megabytes occur regularly, and we've
+heard reports of programs approaching 1 gigabyte in size.
+
+   GDB should be able to run everywhere.  No other debugger is
+available for even half as many configurations as GDB supports.
+
+
+File: gdbint.info,  Node: Contributors,  Prev: Requirements,  Up: Summary
+
+1.2 Contributors
+================
+
+The first edition of this document was written by John Gilmore of
+Cygnus Solutions. The current second edition was written by Stan Shebs
+of Cygnus Solutions, who continues to update the manual.
+
+   Over the years, many others have made additions and changes to this
+document. This section attempts to record the significant contributors
+to that effort. One of the virtues of free software is that everyone is
+free to contribute to it; with regret, we cannot actually acknowledge
+everyone here.
+
+     _Plea:_ This section has only been added relatively recently (four
+     years after publication of the second edition). Additions to this
+     section are particularly welcome.  If you or your friends (or
+     enemies, to be evenhanded) have been unfairly omitted from this
+     list, we would like to add your names!
+
+   A document such as this relies on being kept up to date by numerous
+small updates by contributing engineers as they make changes to the
+code base. The file `ChangeLog' in the GDB distribution approximates a
+blow-by-blow account. The most prolific contributors to this important,
+but low profile task are Andrew Cagney (responsible for over half the
+entries), Daniel Jacobowitz, Mark Kettenis, Jim Blandy and Eli
+Zaretskii.
+
+   Eli Zaretskii and Daniel Jacobowitz wrote the sections documenting
+watchpoints.
+
+   Jeremy Bennett updated the sections on initializing a new
+architecture and register representation, and added the section on
+Frame Interpretation.
+
+
+File: gdbint.info,  Node: Overall Structure,  Next: Algorithms,  Prev: Summary,  Up: Top
+
+2 Overall Structure
+*******************
+
+GDB consists of three major subsystems: user interface, symbol handling
+(the "symbol side"), and target system handling (the "target side").
+
+   The user interface consists of several actual interfaces, plus
+supporting code.
+
+   The symbol side consists of object file readers, debugging info
+interpreters, symbol table management, source language expression
+parsing, type and value printing.
+
+   The target side consists of execution control, stack frame analysis,
+and physical target manipulation.
+
+   The target side/symbol side division is not formal, and there are a
+number of exceptions.  For instance, core file support involves symbolic
+elements (the basic core file reader is in BFD) and target elements (it
+supplies the contents of memory and the values of registers).  Instead,
+this division is useful for understanding how the minor subsystems
+should fit together.
+
+2.1 The Symbol Side
+===================
+
+The symbolic side of GDB can be thought of as "everything you can do in
+GDB without having a live program running".  For instance, you can look
+at the types of variables, and evaluate many kinds of expressions.
+
+2.2 The Target Side
+===================
+
+The target side of GDB is the "bits and bytes manipulator".  Although
+it may make reference to symbolic info here and there, most of the
+target side will run with only a stripped executable available--or even
+no executable at all, in remote debugging cases.
+
+   Operations such as disassembly, stack frame crawls, and register
+display, are able to work with no symbolic info at all.  In some cases,
+such as disassembly, GDB will use symbolic info to present addresses
+relative to symbols rather than as raw numbers, but it will work either
+way.
+
+2.3 Configurations
+==================
+
+"Host" refers to attributes of the system where GDB runs.  "Target"
+refers to the system where the program being debugged executes.  In
+most cases they are the same machine, in which case a third type of
+"Native" attributes come into play.
+
+   Defines and include files needed to build on the host are host
+support.  Examples are tty support, system defined types, host byte
+order, host float format.  These are all calculated by `autoconf' when
+the debugger is built.
+
+   Defines and information needed to handle the target format are target
+dependent.  Examples are the stack frame format, instruction set,
+breakpoint instruction, registers, and how to set up and tear down the
+stack to call a function.
+
+   Information that is only needed when the host and target are the
+same, is native dependent.  One example is Unix child process support;
+if the host and target are not the same, calling `fork' to start the
+target process is a bad idea.  The various macros needed for finding the
+registers in the `upage', running `ptrace', and such are all in the
+native-dependent files.
+
+   Another example of native-dependent code is support for features that
+are really part of the target environment, but which require `#include'
+files that are only available on the host system.  Core file handling
+and `setjmp' handling are two common cases.
+
+   When you want to make GDB work as the traditional native debugger on
+a system, you will need to supply both target and native information.
+
+2.4 Source Tree Structure
+=========================
+
+The GDB source directory has a mostly flat structure--there are only a
+few subdirectories.  A file's name usually gives a hint as to what it
+does; for example, `stabsread.c' reads stabs, `dwarf2read.c' reads
+DWARF 2, etc.
+
+   Files that are related to some common task have names that share
+common substrings.  For example, `*-thread.c' files deal with debugging
+threads on various platforms; `*read.c' files deal with reading various
+kinds of symbol and object files; `inf*.c' files deal with direct
+control of the "inferior program" (GDB parlance for the program being
+debugged).
+
+   There are several dozens of files in the `*-tdep.c' family.  `tdep'
+stands for "target-dependent code"--each of these files implements
+debug support for a specific target architecture (sparc, mips, etc).
+Usually, only one of these will be used in a specific GDB configuration
+(sometimes two, closely related).
+
+   Similarly, there are many `*-nat.c' files, each one for native
+debugging on a specific system (e.g., `sparc-linux-nat.c' is for native
+debugging of Sparc machines running the Linux kernel).
+
+   The few subdirectories of the source tree are:
+
+`cli'
+     Code that implements "CLI", the GDB Command-Line Interpreter.
+     *Note Command Interpreter: User Interface.
+
+`gdbserver'
+     Code for the GDB remote server.
+
+`gdbtk'
+     Code for Insight, the GDB TK-based GUI front-end.
+
+`mi'
+     The "GDB/MI", the GDB Machine Interface interpreter.
+
+`signals'
+     Target signal translation code.
+
+`tui'
+     Code for "TUI", the GDB Text-mode full-screen User Interface.
+     *Note TUI: User Interface.
+
+
+File: gdbint.info,  Node: Algorithms,  Next: User Interface,  Prev: Overall Structure,  Up: Top
+
+3 Algorithms
+************
+
+GDB uses a number of debugging-specific algorithms.  They are often not
+very complicated, but get lost in the thicket of special cases and
+real-world issues.  This chapter describes the basic algorithms and
+mentions some of the specific target definitions that they use.
+
+3.1 Prologue Analysis
+=====================
+
+To produce a backtrace and allow the user to manipulate older frames'
+variables and arguments, GDB needs to find the base addresses of older
+frames, and discover where those frames' registers have been saved.
+Since a frame's "callee-saves" registers get saved by younger frames if
+and when they're reused, a frame's registers may be scattered
+unpredictably across younger frames.  This means that changing the
+value of a register-allocated variable in an older frame may actually
+entail writing to a save slot in some younger frame.
+
+   Modern versions of GCC emit Dwarf call frame information ("CFI"),
+which describes how to find frame base addresses and saved registers.
+But CFI is not always available, so as a fallback GDB uses a technique
+called "prologue analysis" to find frame sizes and saved registers.  A
+prologue analyzer disassembles the function's machine code starting
+from its entry point, and looks for instructions that allocate frame
+space, save the stack pointer in a frame pointer register, save
+registers, and so on.  Obviously, this can't be done accurately in
+general, but it's tractable to do well enough to be very helpful.
+Prologue analysis predates the GNU toolchain's support for CFI; at one
+time, prologue analysis was the only mechanism GDB used for stack
+unwinding at all, when the function calling conventions didn't specify
+a fixed frame layout.
+
+   In the olden days, function prologues were generated by hand-written,
+target-specific code in GCC, and treated as opaque and untouchable by
+optimizers.  Looking at this code, it was usually straightforward to
+write a prologue analyzer for GDB that would accurately understand all
+the prologues GCC would generate.  However, over time GCC became more
+aggressive about instruction scheduling, and began to understand more
+about the semantics of the prologue instructions themselves; in
+response, GDB's analyzers became more complex and fragile.  Keeping the
+prologue analyzers working as GCC (and the instruction sets themselves)
+evolved became a substantial task.
+
+   To try to address this problem, the code in `prologue-value.h' and
+`prologue-value.c' provides a general framework for writing prologue
+analyzers that are simpler and more robust than ad-hoc analyzers.  When
+we analyze a prologue using the prologue-value framework, we're really
+doing "abstract interpretation" or "pseudo-evaluation": running the
+function's code in simulation, but using conservative approximations of
+the values registers and memory would hold when the code actually runs.
+For example, if our function starts with the instruction:
+
+     addi r1, 42     # add 42 to r1
+   we don't know exactly what value will be in `r1' after executing
+this instruction, but we do know it'll be 42 greater than its original
+value.
+
+   If we then see an instruction like:
+
+     addi r1, 22     # add 22 to r1
+   we still don't know what `r1's' value is, but again, we can say it
+is now 64 greater than its original value.
+
+   If the next instruction were:
+
+     mov r2, r1      # set r2 to r1's value
+   then we can say that `r2's' value is now the original value of `r1'
+plus 64.
+
+   It's common for prologues to save registers on the stack, so we'll
+need to track the values of stack frame slots, as well as the
+registers.  So after an instruction like this:
+
+     mov (fp+4), r2
+   then we'd know that the stack slot four bytes above the frame pointer
+holds the original value of `r1' plus 64.
+
+   And so on.
+
+   Of course, this can only go so far before it gets unreasonable.  If
+we wanted to be able to say anything about the value of `r1' after the
+instruction:
+
+     xor r1, r3      # exclusive-or r1 and r3, place result in r1
+   then things would get pretty complex.  But remember, we're just doing
+a conservative approximation; if exclusive-or instructions aren't
+relevant to prologues, we can just say `r1''s value is now "unknown".
+We can ignore things that are too complex, if that loss of information
+is acceptable for our application.
+
+   So when we say "conservative approximation" here, what we mean is an
+approximation that is either accurate, or marked "unknown", but never
+inaccurate.
+
+   Using this framework, a prologue analyzer is simply an interpreter
+for machine code, but one that uses conservative approximations for the
+contents of registers and memory instead of actual values.  Starting
+from the function's entry point, you simulate instructions up to the
+current PC, or an instruction that you don't know how to simulate.  Now
+you can examine the state of the registers and stack slots you've kept
+track of.
+
+   * To see how large your stack frame is, just check the value of the
+     stack pointer register; if it's the original value of the SP minus
+     a constant, then that constant is the stack frame's size.  If the
+     SP's value has been marked as "unknown", then that means the
+     prologue has done something too complex for us to track, and we
+     don't know the frame size.
+
+   * To see where we've saved the previous frame's registers, we just
+     search the values we've tracked -- stack slots, usually, but
+     registers, too, if you want -- for something equal to the
+     register's original value.  If the calling conventions suggest a
+     standard place to save a given register, then we can check there
+     first, but really, anything that will get us back the original
+     value will probably work.
+
+   This does take some work.  But prologue analyzers aren't
+quick-and-simple pattern patching to recognize a few fixed prologue
+forms any more; they're big, hairy functions.  Along with inferior
+function calls, prologue analysis accounts for a substantial portion of
+the time needed to stabilize a GDB port.  So it's worthwhile to look
+for an approach that will be easier to understand and maintain.  In the
+approach described above:
+
+   * It's easier to see that the analyzer is correct: you just see
+     whether the analyzer properly (albeit conservatively) simulates
+     the effect of each instruction.
+
+   * It's easier to extend the analyzer: you can add support for new
+     instructions, and know that you haven't broken anything that
+     wasn't already broken before.
+
+   * It's orthogonal: to gather new information, you don't need to
+     complicate the code for each instruction.  As long as your domain
+     of conservative values is already detailed enough to tell you what
+     you need, then all the existing instruction simulations are
+     already gathering the right data for you.
+
+
+   The file `prologue-value.h' contains detailed comments explaining
+the framework and how to use it.
+
+3.2 Breakpoint Handling
+=======================
+
+In general, a breakpoint is a user-designated location in the program
+where the user wants to regain control if program execution ever reaches
+that location.
+
+   There are two main ways to implement breakpoints; either as
+"hardware" breakpoints or as "software" breakpoints.
+
+   Hardware breakpoints are sometimes available as a builtin debugging
+features with some chips.  Typically these work by having dedicated
+register into which the breakpoint address may be stored.  If the PC
+(shorthand for "program counter") ever matches a value in a breakpoint
+registers, the CPU raises an exception and reports it to GDB.
+
+   Another possibility is when an emulator is in use; many emulators
+include circuitry that watches the address lines coming out from the
+processor, and force it to stop if the address matches a breakpoint's
+address.
+
+   A third possibility is that the target already has the ability to do
+breakpoints somehow; for instance, a ROM monitor may do its own
+software breakpoints.  So although these are not literally "hardware
+breakpoints", from GDB's point of view they work the same; GDB need not
+do anything more than set the breakpoint and wait for something to
+happen.
+
+   Since they depend on hardware resources, hardware breakpoints may be
+limited in number; when the user asks for more, GDB will start trying
+to set software breakpoints.  (On some architectures, notably the
+32-bit x86 platforms, GDB cannot always know whether there's enough
+hardware resources to insert all the hardware breakpoints and
+watchpoints.  On those platforms, GDB prints an error message only when
+the program being debugged is continued.)
+
+   Software breakpoints require GDB to do somewhat more work.  The
+basic theory is that GDB will replace a program instruction with a
+trap, illegal divide, or some other instruction that will cause an
+exception, and then when it's encountered, GDB will take the exception
+and stop the program.  When the user says to continue, GDB will restore
+the original instruction, single-step, re-insert the trap, and continue
+on.
+
+   Since it literally overwrites the program being tested, the program
+area must be writable, so this technique won't work on programs in ROM.
+It can also distort the behavior of programs that examine themselves,
+although such a situation would be highly unusual.
+
+   Also, the software breakpoint instruction should be the smallest
+size of instruction, so it doesn't overwrite an instruction that might
+be a jump target, and cause disaster when the program jumps into the
+middle of the breakpoint instruction.  (Strictly speaking, the
+breakpoint must be no larger than the smallest interval between
+instructions that may be jump targets; perhaps there is an architecture
+where only even-numbered instructions may jumped to.)  Note that it's
+possible for an instruction set not to have any instructions usable for
+a software breakpoint, although in practice only the ARC has failed to
+define such an instruction.
+
+   Basic breakpoint object handling is in `breakpoint.c'.  However,
+much of the interesting breakpoint action is in `infrun.c'.
+
+`target_remove_breakpoint (BP_TGT)'
+`target_insert_breakpoint (BP_TGT)'
+     Insert or remove a software breakpoint at address
+     `BP_TGT->placed_address'.  Returns zero for success, non-zero for
+     failure.  On input, BP_TGT contains the address of the breakpoint,
+     and is otherwise initialized to zero.  The fields of the `struct
+     bp_target_info' pointed to by BP_TGT are updated to contain other
+     information about the breakpoint on output.  The field
+     `placed_address' may be updated if the breakpoint was placed at a
+     related address; the field `shadow_contents' contains the real
+     contents of the bytes where the breakpoint has been inserted, if
+     reading memory would return the breakpoint instead of the
+     underlying memory; the field `shadow_len' is the length of memory
+     cached in `shadow_contents', if any; and the field `placed_size'
+     is optionally set and used by the target, if it could differ from
+     `shadow_len'.
+
+     For example, the remote target `Z0' packet does not require
+     shadowing memory, so `shadow_len' is left at zero.  However, the
+     length reported by `gdbarch_breakpoint_from_pc' is cached in
+     `placed_size', so that a matching `z0' packet can be used to
+     remove the breakpoint.
+
+`target_remove_hw_breakpoint (BP_TGT)'
+`target_insert_hw_breakpoint (BP_TGT)'
+     Insert or remove a hardware-assisted breakpoint at address
+     `BP_TGT->placed_address'.  Returns zero for success, non-zero for
+     failure.  See `target_insert_breakpoint' for a description of the
+     `struct bp_target_info' pointed to by BP_TGT; the
+     `shadow_contents' and `shadow_len' members are not used for
+     hardware breakpoints, but `placed_size' may be.
+
+3.3 Single Stepping
+===================
+
+3.4 Signal Handling
+===================
+
+3.5 Thread Handling
+===================
+
+3.6 Inferior Function Calls
+===========================
+
+3.7 Longjmp Support
+===================
+
+GDB has support for figuring out that the target is doing a `longjmp'
+and for stopping at the target of the jump, if we are stepping.  This
+is done with a few specialized internal breakpoints, which are visible
+in the output of the `maint info breakpoint' command.
+
+   To make this work, you need to define a function called
+`gdbarch_get_longjmp_target', which will examine the `jmp_buf'
+structure and extract the `longjmp' target address.  Since `jmp_buf' is
+target specific and typically defined in a target header not available
+to GDB, you will need to determine the offset of the PC manually and
+return that; many targets define a `jb_pc_offset' field in the tdep
+structure to save the value once calculated.
+
+3.8 Watchpoints
+===============
+
+Watchpoints are a special kind of breakpoints (*note breakpoints:
+Algorithms.) which break when data is accessed rather than when some
+instruction is executed.  When you have data which changes without your
+knowing what code does that, watchpoints are the silver bullet to hunt
+down and kill such bugs.
+
+   Watchpoints can be either hardware-assisted or not; the latter type
+is known as "software watchpoints."  GDB always uses hardware-assisted
+watchpoints if they are available, and falls back on software
+watchpoints otherwise.  Typical situations where GDB will use software
+watchpoints are:
+
+   * The watched memory region is too large for the underlying hardware
+     watchpoint support.  For example, each x86 debug register can
+     watch up to 4 bytes of memory, so trying to watch data structures
+     whose size is more than 16 bytes will cause GDB to use software
+     watchpoints.
+
+   * The value of the expression to be watched depends on data held in
+     registers (as opposed to memory).
+
+   * Too many different watchpoints requested.  (On some architectures,
+     this situation is impossible to detect until the debugged program
+     is resumed.)  Note that x86 debug registers are used both for
+     hardware breakpoints and for watchpoints, so setting too many
+     hardware breakpoints might cause watchpoint insertion to fail.
+
+   * No hardware-assisted watchpoints provided by the target
+     implementation.
+
+   Software watchpoints are very slow, since GDB needs to single-step
+the program being debugged and test the value of the watched
+expression(s) after each instruction.  The rest of this section is
+mostly irrelevant for software watchpoints.
+
+   When the inferior stops, GDB tries to establish, among other
+possible reasons, whether it stopped due to a watchpoint being hit.  It
+first uses `STOPPED_BY_WATCHPOINT' to see if any watchpoint was hit.
+If not, all watchpoint checking is skipped.
+
+   Then GDB calls `target_stopped_data_address' exactly once.  This
+method returns the address of the watchpoint which triggered, if the
+target can determine it.  If the triggered address is available, GDB
+compares the address returned by this method with each watched memory
+address in each active watchpoint.  For data-read and data-access
+watchpoints, GDB announces every watchpoint that watches the triggered
+address as being hit.  For this reason, data-read and data-access
+watchpoints _require_ that the triggered address be available; if not,
+read and access watchpoints will never be considered hit.  For
+data-write watchpoints, if the triggered address is available, GDB
+considers only those watchpoints which match that address; otherwise,
+GDB considers all data-write watchpoints.  For each data-write
+watchpoint that GDB considers, it evaluates the expression whose value
+is being watched, and tests whether the watched value has changed.
+Watchpoints whose watched values have changed are announced as hit.
+
+   GDB uses several macros and primitives to support hardware
+watchpoints:
+
+`TARGET_CAN_USE_HARDWARE_WATCHPOINT (TYPE, COUNT, OTHER)'
+     Return the number of hardware watchpoints of type TYPE that are
+     possible to be set.  The value is positive if COUNT watchpoints of
+     this type can be set, zero if setting watchpoints of this type is
+     not supported, and negative if COUNT is more than the maximum
+     number of watchpoints of type TYPE that can be set.  OTHER is
+     non-zero if other types of watchpoints are currently enabled (there
+     are architectures which cannot set watchpoints of different types
+     at the same time).
+
+`TARGET_REGION_OK_FOR_HW_WATCHPOINT (ADDR, LEN)'
+     Return non-zero if hardware watchpoints can be used to watch a
+     region whose address is ADDR and whose length in bytes is LEN.
+
+`target_insert_watchpoint (ADDR, LEN, TYPE)'
+`target_remove_watchpoint (ADDR, LEN, TYPE)'
+     Insert or remove a hardware watchpoint starting at ADDR, for LEN
+     bytes.  TYPE is the watchpoint type, one of the possible values of
+     the enumerated data type `target_hw_bp_type', defined by
+     `breakpoint.h' as follows:
+
+           enum target_hw_bp_type
+             {
+               hw_write   = 0, /* Common (write) HW watchpoint */
+               hw_read    = 1, /* Read    HW watchpoint */
+               hw_access  = 2, /* Access (read or write) HW watchpoint */
+               hw_execute = 3  /* Execute HW breakpoint */
+             };
+
+     These two macros should return 0 for success, non-zero for failure.
+
+`target_stopped_data_address (ADDR_P)'
+     If the inferior has some watchpoint that triggered, place the
+     address associated with the watchpoint at the location pointed to
+     by ADDR_P and return non-zero.  Otherwise, return zero.  This is
+     required for data-read and data-access watchpoints.  It is not
+     required for data-write watchpoints, but GDB uses it to improve
+     handling of those also.
+
+     GDB will only call this method once per watchpoint stop,
+     immediately after calling `STOPPED_BY_WATCHPOINT'.  If the
+     target's watchpoint indication is sticky, i.e., stays set after
+     resuming, this method should clear it.  For instance, the x86 debug
+     control register has sticky triggered flags.
+
+`target_watchpoint_addr_within_range (TARGET, ADDR, START, LENGTH)'
+     Check whether ADDR (as returned by `target_stopped_data_address')
+     lies within the hardware-defined watchpoint region described by
+     START and LENGTH.  This only needs to be provided if the
+     granularity of a watchpoint is greater than one byte, i.e., if the
+     watchpoint can also trigger on nearby addresses outside of the
+     watched region.
+
+`HAVE_STEPPABLE_WATCHPOINT'
+     If defined to a non-zero value, it is not necessary to disable a
+     watchpoint to step over it.  Like
+     `gdbarch_have_nonsteppable_watchpoint', this is usually set when
+     watchpoints trigger at the instruction which will perform an
+     interesting read or write.  It should be set if there is a
+     temporary disable bit which allows the processor to step over the
+     interesting instruction without raising the watchpoint exception
+     again.
+
+`int gdbarch_have_nonsteppable_watchpoint (GDBARCH)'
+     If it returns a non-zero value, GDB should disable a watchpoint to
+     step the inferior over it.  This is usually set when watchpoints
+     trigger at the instruction which will perform an interesting read
+     or write.
+
+`HAVE_CONTINUABLE_WATCHPOINT'
+     If defined to a non-zero value, it is possible to continue the
+     inferior after a watchpoint has been hit.  This is usually set
+     when watchpoints trigger at the instruction following an
+     interesting read or write.
+
+`STOPPED_BY_WATCHPOINT (WAIT_STATUS)'
+     Return non-zero if stopped by a watchpoint.  WAIT_STATUS is of the
+     type `struct target_waitstatus', defined by `target.h'.  Normally,
+     this macro is defined to invoke the function pointed to by the
+     `to_stopped_by_watchpoint' member of the structure (of the type
+     `target_ops', defined on `target.h') that describes the
+     target-specific operations; `to_stopped_by_watchpoint' ignores the
+     WAIT_STATUS argument.
+
+     GDB does not require the non-zero value returned by
+     `STOPPED_BY_WATCHPOINT' to be 100% correct, so if a target cannot
+     determine for sure whether the inferior stopped due to a
+     watchpoint, it could return non-zero "just in case".
+
+3.8.1 Watchpoints and Threads
+-----------------------------
+
+GDB only supports process-wide watchpoints, which trigger in all
+threads.  GDB uses the thread ID to make watchpoints act as if they
+were thread-specific, but it cannot set hardware watchpoints that only
+trigger in a specific thread.  Therefore, even if the target supports
+threads, per-thread debug registers, and watchpoints which only affect
+a single thread, it should set the per-thread debug registers for all
+threads to the same value.  On GNU/Linux native targets, this is
+accomplished by using `ALL_LWPS' in `target_insert_watchpoint' and
+`target_remove_watchpoint' and by using `linux_set_new_thread' to
+register a handler for newly created threads.
+
+   GDB's GNU/Linux support only reports a single event at a time,
+although multiple events can trigger simultaneously for multi-threaded
+programs.  When multiple events occur, `linux-nat.c' queues subsequent
+events and returns them the next time the program is resumed.  This
+means that `STOPPED_BY_WATCHPOINT' and `target_stopped_data_address'
+only need to consult the current thread's state--the thread indicated
+by `inferior_ptid'.  If two threads have hit watchpoints
+simultaneously, those routines will be called a second time for the
+second thread.
+
+3.8.2 x86 Watchpoints
+---------------------
+
+The 32-bit Intel x86 (a.k.a. ia32) processors feature special debug
+registers designed to facilitate debugging.  GDB provides a generic
+library of functions that x86-based ports can use to implement support
+for watchpoints and hardware-assisted breakpoints.  This subsection
+documents the x86 watchpoint facilities in GDB.
+
+   (At present, the library functions read and write debug registers
+directly, and are thus only available for native configurations.)
+
+   To use the generic x86 watchpoint support, a port should do the
+following:
+
+   * Define the macro `I386_USE_GENERIC_WATCHPOINTS' somewhere in the
+     target-dependent headers.
+
+   * Include the `config/i386/nm-i386.h' header file _after_ defining
+     `I386_USE_GENERIC_WATCHPOINTS'.
+
+   * Add `i386-nat.o' to the value of the Make variable `NATDEPFILES'
+     (*note NATDEPFILES: Native Debugging.).
+
+   * Provide implementations for the `I386_DR_LOW_*' macros described
+     below.  Typically, each macro should call a target-specific
+     function which does the real work.
+
+   The x86 watchpoint support works by maintaining mirror images of the
+debug registers.  Values are copied between the mirror images and the
+real debug registers via a set of macros which each target needs to
+provide:
+
+`I386_DR_LOW_SET_CONTROL (VAL)'
+     Set the Debug Control (DR7) register to the value VAL.
+
+`I386_DR_LOW_SET_ADDR (IDX, ADDR)'
+     Put the address ADDR into the debug register number IDX.
+
+`I386_DR_LOW_RESET_ADDR (IDX)'
+     Reset (i.e. zero out) the address stored in the debug register
+     number IDX.
+
+`I386_DR_LOW_GET_STATUS'
+     Return the value of the Debug Status (DR6) register.  This value is
+     used immediately after it is returned by `I386_DR_LOW_GET_STATUS',
+     so as to support per-thread status register values.
+
+   For each one of the 4 debug registers (whose indices are from 0 to 3)
+that store addresses, a reference count is maintained by GDB, to allow
+sharing of debug registers by several watchpoints.  This allows users
+to define several watchpoints that watch the same expression, but with
+different conditions and/or commands, without wasting debug registers
+which are in short supply.  GDB maintains the reference counts
+internally, targets don't have to do anything to use this feature.
+
+   The x86 debug registers can each watch a region that is 1, 2, or 4
+bytes long.  The ia32 architecture requires that each watched region be
+appropriately aligned: 2-byte region on 2-byte boundary, 4-byte region
+on 4-byte boundary.  However, the x86 watchpoint support in GDB can
+watch unaligned regions and regions larger than 4 bytes (up to 16
+bytes) by allocating several debug registers to watch a single region.
+This allocation of several registers per a watched region is also done
+automatically without target code intervention.
+
+   The generic x86 watchpoint support provides the following API for the
+GDB's application code:
+
+`i386_region_ok_for_watchpoint (ADDR, LEN)'
+     The macro `TARGET_REGION_OK_FOR_HW_WATCHPOINT' is set to call this
+     function.  It counts the number of debug registers required to
+     watch a given region, and returns a non-zero value if that number
+     is less than 4, the number of debug registers available to x86
+     processors.
+
+`i386_stopped_data_address (ADDR_P)'
+     The target function `target_stopped_data_address' is set to call
+     this function.  This function examines the breakpoint condition
+     bits in the DR6 Debug Status register, as returned by the
+     `I386_DR_LOW_GET_STATUS' macro, and returns the address associated
+     with the first bit that is set in DR6.
+
+`i386_stopped_by_watchpoint (void)'
+     The macro `STOPPED_BY_WATCHPOINT' is set to call this function.
+     The argument passed to `STOPPED_BY_WATCHPOINT' is ignored.  This
+     function examines the breakpoint condition bits in the DR6 Debug
+     Status register, as returned by the `I386_DR_LOW_GET_STATUS'
+     macro, and returns true if any bit is set.  Otherwise, false is
+     returned.
+
+`i386_insert_watchpoint (ADDR, LEN, TYPE)'
+`i386_remove_watchpoint (ADDR, LEN, TYPE)'
+     Insert or remove a watchpoint.  The macros
+     `target_insert_watchpoint' and `target_remove_watchpoint' are set
+     to call these functions.  `i386_insert_watchpoint' first looks for
+     a debug register which is already set to watch the same region for
+     the same access types; if found, it just increments the reference
+     count of that debug register, thus implementing debug register
+     sharing between watchpoints.  If no such register is found, the
+     function looks for a vacant debug register, sets its mirrored
+     value to ADDR, sets the mirrored value of DR7 Debug Control
+     register as appropriate for the LEN and TYPE parameters, and then
+     passes the new values of the debug register and DR7 to the
+     inferior by calling `I386_DR_LOW_SET_ADDR' and
+     `I386_DR_LOW_SET_CONTROL'.  If more than one debug register is
+     required to cover the given region, the above process is repeated
+     for each debug register.
+
+     `i386_remove_watchpoint' does the opposite: it resets the address
+     in the mirrored value of the debug register and its read/write and
+     length bits in the mirrored value of DR7, then passes these new
+     values to the inferior via `I386_DR_LOW_RESET_ADDR' and
+     `I386_DR_LOW_SET_CONTROL'.  If a register is shared by several
+     watchpoints, each time a `i386_remove_watchpoint' is called, it
+     decrements the reference count, and only calls
+     `I386_DR_LOW_RESET_ADDR' and `I386_DR_LOW_SET_CONTROL' when the
+     count goes to zero.
+
+`i386_insert_hw_breakpoint (BP_TGT)'
+`i386_remove_hw_breakpoint (BP_TGT)'
+     These functions insert and remove hardware-assisted breakpoints.
+     The macros `target_insert_hw_breakpoint' and
+     `target_remove_hw_breakpoint' are set to call these functions.
+     The argument is a `struct bp_target_info *', as described in the
+     documentation for `target_insert_breakpoint'.  These functions
+     work like `i386_insert_watchpoint' and `i386_remove_watchpoint',
+     respectively, except that they set up the debug registers to watch
+     instruction execution, and each hardware-assisted breakpoint
+     always requires exactly one debug register.
+
+`i386_cleanup_dregs (void)'
+     This function clears all the reference counts, addresses, and
+     control bits in the mirror images of the debug registers.  It
+     doesn't affect the actual debug registers in the inferior process.
+
+*Notes:*
+  1. x86 processors support setting watchpoints on I/O reads or writes.
+     However, since no target supports this (as of March 2001), and
+     since `enum target_hw_bp_type' doesn't even have an enumeration
+     for I/O watchpoints, this feature is not yet available to GDB
+     running on x86.
+
+  2. x86 processors can enable watchpoints locally, for the current task
+     only, or globally, for all the tasks.  For each debug register,
+     there's a bit in the DR7 Debug Control register that determines
+     whether the associated address is watched locally or globally.  The
+     current implementation of x86 watchpoint support in GDB always
+     sets watchpoints to be locally enabled, since global watchpoints
+     might interfere with the underlying OS and are probably
+     unavailable in many platforms.
+
+3.9 Checkpoints
+===============
+
+In the abstract, a checkpoint is a point in the execution history of
+the program, which the user may wish to return to at some later time.
+
+   Internally, a checkpoint is a saved copy of the program state,
+including whatever information is required in order to restore the
+program to that state at a later time.  This can be expected to include
+the state of registers and memory, and may include external state such
+as the state of open files and devices.
+
+   There are a number of ways in which checkpoints may be implemented
+in gdb, e.g. as corefiles, as forked processes, and as some opaque
+method implemented on the target side.
+
+   A corefile can be used to save an image of target memory and register
+state, which can in principle be restored later -- but corefiles do not
+typically include information about external entities such as open
+files.  Currently this method is not implemented in gdb.
+
+   A forked process can save the state of user memory and registers, as
+well as some subset of external (kernel) state.  This method is used to
+implement checkpoints on Linux, and in principle might be used on other
+systems.
+
+   Some targets, e.g. simulators, might have their own built-in method
+for saving checkpoints, and gdb might be able to take advantage of that
+capability without necessarily knowing any details of how it is done.
+
+3.10 Observing changes in GDB internals
+=======================================
+
+In order to function properly, several modules need to be notified when
+some changes occur in the GDB internals.  Traditionally, these modules
+have relied on several paradigms, the most common ones being hooks and
+gdb-events.  Unfortunately, none of these paradigms was versatile
+enough to become the standard notification mechanism in GDB.  The fact
+that they only supported one "client" was also a strong limitation.
+
+   A new paradigm, based on the Observer pattern of the `Design
+Patterns' book, has therefore been implemented.  The goal was to provide
+a new interface overcoming the issues with the notification mechanisms
+previously available.  This new interface needed to be strongly typed,
+easy to extend, and versatile enough to be used as the standard
+interface when adding new notifications.
+
+   See *Note GDB Observers:: for a brief description of the observers
+currently implemented in GDB. The rationale for the current
+implementation is also briefly discussed.
+
+
+File: gdbint.info,  Node: User Interface,  Next: libgdb,  Prev: Algorithms,  Up: Top
+
+4 User Interface
+****************
+
+GDB has several user interfaces, of which the traditional command-line
+interface is perhaps the most familiar.
+
+4.1 Command Interpreter
+=======================
+
+The command interpreter in GDB is fairly simple.  It is designed to
+allow for the set of commands to be augmented dynamically, and also has
+a recursive subcommand capability, where the first argument to a
+command may itself direct a lookup on a different command list.
+
+   For instance, the `set' command just starts a lookup on the
+`setlist' command list, while `set thread' recurses to the
+`set_thread_cmd_list'.
+
+   To add commands in general, use `add_cmd'.  `add_com' adds to the
+main command list, and should be used for those commands.  The usual
+place to add commands is in the `_initialize_XYZ' routines at the ends
+of most source files.
+
+   To add paired `set' and `show' commands, use `add_setshow_cmd' or
+`add_setshow_cmd_full'.  The former is a slightly simpler interface
+which is useful when you don't need to further modify the new command
+structures, while the latter returns the new command structures for
+manipulation.
+
+   Before removing commands from the command set it is a good idea to
+deprecate them for some time.  Use `deprecate_cmd' on commands or
+aliases to set the deprecated flag.  `deprecate_cmd' takes a `struct
+cmd_list_element' as it's first argument.  You can use the return value
+from `add_com' or `add_cmd' to deprecate the command immediately after
+it is created.
+
+   The first time a command is used the user will be warned and offered
+a replacement (if one exists). Note that the replacement string passed
+to `deprecate_cmd' should be the full name of the command, i.e., the
+entire string the user should type at the command line.
+
+4.2 UI-Independent Output--the `ui_out' Functions
+=================================================
+
+The `ui_out' functions present an abstraction level for the GDB output
+code.  They hide the specifics of different user interfaces supported
+by GDB, and thus free the programmer from the need to write several
+versions of the same code, one each for every UI, to produce output.
+
+4.2.1 Overview and Terminology
+------------------------------
+
+In general, execution of each GDB command produces some sort of output,
+and can even generate an input request.
+
+   Output can be generated for the following purposes:
+
+   * to display a _result_ of an operation;
+
+   * to convey _info_ or produce side-effects of a requested operation;
+
+   * to provide a _notification_ of an asynchronous event (including
+     progress indication of a prolonged asynchronous operation);
+
+   * to display _error messages_ (including warnings);
+
+   * to show _debug data_;
+
+   * to _query_ or prompt a user for input (a special case).
+
+This section mainly concentrates on how to build result output,
+although some of it also applies to other kinds of output.
+
+   Generation of output that displays the results of an operation
+involves one or more of the following:
+
+   * output of the actual data
+
+   * formatting the output as appropriate for console output, to make it
+     easily readable by humans
+
+   * machine oriented formatting-a more terse formatting to allow for
+     easy parsing by programs which read GDB's output
+
+   * annotation, whose purpose is to help legacy GUIs to identify
+     interesting parts in the output
+
+   The `ui_out' routines take care of the first three aspects.
+Annotations are provided by separate annotation routines.  Note that use
+of annotations for an interface between a GUI and GDB is deprecated.
+
+   Output can be in the form of a single item, which we call a "field";
+a "list" consisting of identical fields; a "tuple" consisting of
+non-identical fields; or a "table", which is a tuple consisting of a
+header and a body.  In a BNF-like form:
+
+`<table> ==>'
+     `<header> <body>'
+
+`<header> ==>'
+     `{ <column> }'
+
+`<column> ==>'
+     `<width> <alignment> <title>'
+
+`<body> ==>'
+     `{<row>}'
+
+4.2.2 General Conventions
+-------------------------
+
+Most `ui_out' routines are of type `void', the exceptions are
+`ui_out_stream_new' (which returns a pointer to the newly created
+object) and the `make_cleanup' routines.
+
+   The first parameter is always the `ui_out' vector object, a pointer
+to a `struct ui_out'.
+
+   The FORMAT parameter is like in `printf' family of functions.  When
+it is present, there must also be a variable list of arguments
+sufficient used to satisfy the `%' specifiers in the supplied format.
+
+   When a character string argument is not used in a `ui_out' function
+call, a `NULL' pointer has to be supplied instead.
+
+4.2.3 Table, Tuple and List Functions
+-------------------------------------
+
+This section introduces `ui_out' routines for building lists, tuples
+and tables.  The routines to output the actual data items (fields) are
+presented in the next section.
+
+   To recap: A "tuple" is a sequence of "fields", each field containing
+information about an object; a "list" is a sequence of fields where
+each field describes an identical object.
+
+   Use the "table" functions when your output consists of a list of
+rows (tuples) and the console output should include a heading.  Use this
+even when you are listing just one object but you still want the header.
+
+   Tables can not be nested.  Tuples and lists can be nested up to a
+maximum of five levels.
+
+   The overall structure of the table output code is something like
+this:
+
+       ui_out_table_begin
+         ui_out_table_header
+         ...
+         ui_out_table_body
+           ui_out_tuple_begin
+             ui_out_field_*
+             ...
+           ui_out_tuple_end
+           ...
+       ui_out_table_end
+
+   Here is the description of table-, tuple- and list-related `ui_out'
+functions:
+
+ -- Function: void ui_out_table_begin (struct ui_out *UIOUT, int
+          NBROFCOLS, int NR_ROWS, const char *TBLID)
+     The function `ui_out_table_begin' marks the beginning of the output
+     of a table.  It should always be called before any other `ui_out'
+     function for a given table.  NBROFCOLS is the number of columns in
+     the table. NR_ROWS is the number of rows in the table.  TBLID is
+     an optional string identifying the table.  The string pointed to
+     by TBLID is copied by the implementation of `ui_out_table_begin',
+     so the application can free the string if it was `malloc'ed.
+
+     The companion function `ui_out_table_end', described below, marks
+     the end of the table's output.
+
+ -- Function: void ui_out_table_header (struct ui_out *UIOUT, int
+          WIDTH, enum ui_align ALIGNMENT, const char *COLHDR)
+     `ui_out_table_header' provides the header information for a single
+     table column.  You call this function several times, one each for
+     every column of the table, after `ui_out_table_begin', but before
+     `ui_out_table_body'.
+
+     The value of WIDTH gives the column width in characters.  The
+     value of ALIGNMENT is one of `left', `center', and `right', and it
+     specifies how to align the header: left-justify, center, or
+     right-justify it.  COLHDR points to a string that specifies the
+     column header; the implementation copies that string, so column
+     header strings in `malloc'ed storage can be freed after the call.
+
+ -- Function: void ui_out_table_body (struct ui_out *UIOUT)
+     This function delimits the table header from the table body.
+
+ -- Function: void ui_out_table_end (struct ui_out *UIOUT)
+     This function signals the end of a table's output.  It should be
+     called after the table body has been produced by the list and
+     field output functions.
+
+     There should be exactly one call to `ui_out_table_end' for each
+     call to `ui_out_table_begin', otherwise the `ui_out' functions
+     will signal an internal error.
+
+   The output of the tuples that represent the table rows must follow
+the call to `ui_out_table_body' and precede the call to
+`ui_out_table_end'.  You build a tuple by calling `ui_out_tuple_begin'
+and `ui_out_tuple_end', with suitable calls to functions which actually
+output fields between them.
+
+ -- Function: void ui_out_tuple_begin (struct ui_out *UIOUT, const char
+          *ID)
+     This function marks the beginning of a tuple output.  ID points to
+     an optional string that identifies the tuple; it is copied by the
+     implementation, and so strings in `malloc'ed storage can be freed
+     after the call.
+
+ -- Function: void ui_out_tuple_end (struct ui_out *UIOUT)
+     This function signals an end of a tuple output.  There should be
+     exactly one call to `ui_out_tuple_end' for each call to
+     `ui_out_tuple_begin', otherwise an internal GDB error will be
+     signaled.
+
+ -- Function: struct cleanup * make_cleanup_ui_out_tuple_begin_end
+          (struct ui_out *UIOUT, const char *ID)
+     This function first opens the tuple and then establishes a cleanup
+     (*note Cleanups: Misc Guidelines.) to close the tuple.  It
+     provides a convenient and correct implementation of the
+     non-portable(1) code sequence:
+          struct cleanup *old_cleanup;
+          ui_out_tuple_begin (uiout, "...");
+          old_cleanup = make_cleanup ((void(*)(void *)) ui_out_tuple_end,
+                                      uiout);
+
+ -- Function: void ui_out_list_begin (struct ui_out *UIOUT, const char
+          *ID)
+     This function marks the beginning of a list output.  ID points to
+     an optional string that identifies the list; it is copied by the
+     implementation, and so strings in `malloc'ed storage can be freed
+     after the call.
+
+ -- Function: void ui_out_list_end (struct ui_out *UIOUT)
+     This function signals an end of a list output.  There should be
+     exactly one call to `ui_out_list_end' for each call to
+     `ui_out_list_begin', otherwise an internal GDB error will be
+     signaled.
+
+ -- Function: struct cleanup * make_cleanup_ui_out_list_begin_end
+          (struct ui_out *UIOUT, const char *ID)
+     Similar to `make_cleanup_ui_out_tuple_begin_end', this function
+     opens a list and then establishes cleanup (*note Cleanups: Misc
+     Guidelines.)  that will close the list.
+
+4.2.4 Item Output Functions
+---------------------------
+
+The functions described below produce output for the actual data items,
+or fields, which contain information about the object.
+
+   Choose the appropriate function accordingly to your particular needs.
+
+ -- Function: void ui_out_field_fmt (struct ui_out *UIOUT, char
+          *FLDNAME, char *FORMAT, ...)
+     This is the most general output function.  It produces the
+     representation of the data in the variable-length argument list
+     according to formatting specifications in FORMAT, a `printf'-like
+     format string.  The optional argument FLDNAME supplies the name of
+     the field.  The data items themselves are supplied as additional
+     arguments after FORMAT.
+
+     This generic function should be used only when it is not possible
+     to use one of the specialized versions (see below).
+
+ -- Function: void ui_out_field_int (struct ui_out *UIOUT, const char
+          *FLDNAME, int VALUE)
+     This function outputs a value of an `int' variable.  It uses the
+     `"%d"' output conversion specification.  FLDNAME specifies the
+     name of the field.
+
+ -- Function: void ui_out_field_fmt_int (struct ui_out *UIOUT, int
+          WIDTH, enum ui_align ALIGNMENT, const char *FLDNAME, int
+          VALUE)
+     This function outputs a value of an `int' variable.  It differs
+     from `ui_out_field_int' in that the caller specifies the desired
+     WIDTH and ALIGNMENT of the output.  FLDNAME specifies the name of
+     the field.
+
+ -- Function: void ui_out_field_core_addr (struct ui_out *UIOUT, const
+          char *FLDNAME, struct gdbarch *GDBARCH, CORE_ADDR ADDRESS)
+     This function outputs an address as appropriate for GDBARCH.
+
+ -- Function: void ui_out_field_string (struct ui_out *UIOUT, const
+          char *FLDNAME, const char *STRING)
+     This function outputs a string using the `"%s"' conversion
+     specification.
+
+   Sometimes, there's a need to compose your output piece by piece using
+functions that operate on a stream, such as `value_print' or
+`fprintf_symbol_filtered'.  These functions accept an argument of the
+type `struct ui_file *', a pointer to a `ui_file' object used to store
+the data stream used for the output.  When you use one of these
+functions, you need a way to pass their results stored in a `ui_file'
+object to the `ui_out' functions.  To this end, you first create a
+`ui_stream' object by calling `ui_out_stream_new', pass the `stream'
+member of that `ui_stream' object to `value_print' and similar
+functions, and finally call `ui_out_field_stream' to output the field
+you constructed.  When the `ui_stream' object is no longer needed, you
+should destroy it and free its memory by calling `ui_out_stream_delete'.
+
+ -- Function: struct ui_stream * ui_out_stream_new (struct ui_out
+          *UIOUT)
+     This function creates a new `ui_stream' object which uses the same
+     output methods as the `ui_out' object whose pointer is passed in
+     UIOUT.  It returns a pointer to the newly created `ui_stream'
+     object.
+
+ -- Function: void ui_out_stream_delete (struct ui_stream *STREAMBUF)
+     This functions destroys a `ui_stream' object specified by
+     STREAMBUF.
+
+ -- Function: void ui_out_field_stream (struct ui_out *UIOUT, const
+          char *FIELDNAME, struct ui_stream *STREAMBUF)
+     This function consumes all the data accumulated in
+     `streambuf->stream' and outputs it like `ui_out_field_string'
+     does.  After a call to `ui_out_field_stream', the accumulated data
+     no longer exists, but the stream is still valid and may be used
+     for producing more fields.
+
+   *Important:* If there is any chance that your code could bail out
+before completing output generation and reaching the point where
+`ui_out_stream_delete' is called, it is necessary to set up a cleanup,
+to avoid leaking memory and other resources.  Here's a skeleton code to
+do that:
+
+      struct ui_stream *mybuf = ui_out_stream_new (uiout);
+      struct cleanup *old = make_cleanup (ui_out_stream_delete, mybuf);
+      ...
+      do_cleanups (old);
+
+   If the function already has the old cleanup chain set (for other
+kinds of cleanups), you just have to add your cleanup to it:
+
+       mybuf = ui_out_stream_new (uiout);
+       make_cleanup (ui_out_stream_delete, mybuf);
+
+   Note that with cleanups in place, you should not call
+`ui_out_stream_delete' directly, or you would attempt to free the same
+buffer twice.
+
+4.2.5 Utility Output Functions
+------------------------------
+
+ -- Function: void ui_out_field_skip (struct ui_out *UIOUT, const char
+          *FLDNAME)
+     This function skips a field in a table.  Use it if you have to
+     leave an empty field without disrupting the table alignment.  The
+     argument FLDNAME specifies a name for the (missing) filed.
+
+ -- Function: void ui_out_text (struct ui_out *UIOUT, const char
+          *STRING)
+     This function outputs the text in STRING in a way that makes it
+     easy to be read by humans.  For example, the console
+     implementation of this method filters the text through a built-in
+     pager, to prevent it from scrolling off the visible portion of the
+     screen.
+
+     Use this function for printing relatively long chunks of text
+     around the actual field data: the text it produces is not aligned
+     according to the table's format.  Use `ui_out_field_string' to
+     output a string field, and use `ui_out_message', described below,
+     to output short messages.
+
+ -- Function: void ui_out_spaces (struct ui_out *UIOUT, int NSPACES)
+     This function outputs NSPACES spaces.  It is handy to align the
+     text produced by `ui_out_text' with the rest of the table or list.
+
+ -- Function: void ui_out_message (struct ui_out *UIOUT, int VERBOSITY,
+          const char *FORMAT, ...)
+     This function produces a formatted message, provided that the
+     current verbosity level is at least as large as given by
+     VERBOSITY.  The current verbosity level is specified by the user
+     with the `set verbositylevel' command.(2)
+
+ -- Function: void ui_out_wrap_hint (struct ui_out *UIOUT, char *INDENT)
+     This function gives the console output filter (a paging filter) a
+     hint of where to break lines which are too long.  Ignored for all
+     other output consumers.  INDENT, if non-`NULL', is the string to
+     be printed to indent the wrapped text on the next line; it must
+     remain accessible until the next call to `ui_out_wrap_hint', or
+     until an explicit newline is produced by one of the other
+     functions.  If INDENT is `NULL', the wrapped text will not be
+     indented.
+
+ -- Function: void ui_out_flush (struct ui_out *UIOUT)
+     This function flushes whatever output has been accumulated so far,
+     if the UI buffers output.
+
+4.2.6 Examples of Use of `ui_out' functions
+-------------------------------------------
+
+This section gives some practical examples of using the `ui_out'
+functions to generalize the old console-oriented code in GDB.  The
+examples all come from functions defined on the `breakpoints.c' file.
+
+   This example, from the `breakpoint_1' function, shows how to produce
+a table.
+
+   The original code was:
+
+      if (!found_a_breakpoint++)
+        {
+          annotate_breakpoints_headers ();
+
+          annotate_field (0);
+          printf_filtered ("Num ");
+          annotate_field (1);
+          printf_filtered ("Type           ");
+          annotate_field (2);
+          printf_filtered ("Disp ");
+          annotate_field (3);
+          printf_filtered ("Enb ");
+          if (addressprint)
+            {
+              annotate_field (4);
+              printf_filtered ("Address    ");
+            }
+          annotate_field (5);
+          printf_filtered ("What\n");
+
+          annotate_breakpoints_table ();
+        }
+
+   Here's the new version:
+
+       nr_printable_breakpoints = ...;
+
+       if (addressprint)
+         ui_out_table_begin (ui, 6, nr_printable_breakpoints, "BreakpointTable");
+       else
+         ui_out_table_begin (ui, 5, nr_printable_breakpoints, "BreakpointTable");
+
+       if (nr_printable_breakpoints > 0)
+         annotate_breakpoints_headers ();
+       if (nr_printable_breakpoints > 0)
+         annotate_field (0);
+       ui_out_table_header (uiout, 3, ui_left, "number", "Num");		/* 1 */
+       if (nr_printable_breakpoints > 0)
+         annotate_field (1);
+       ui_out_table_header (uiout, 14, ui_left, "type", "Type");		/* 2 */
+       if (nr_printable_breakpoints > 0)
+         annotate_field (2);
+       ui_out_table_header (uiout, 4, ui_left, "disp", "Disp");		/* 3 */
+       if (nr_printable_breakpoints > 0)
+         annotate_field (3);
+       ui_out_table_header (uiout, 3, ui_left, "enabled", "Enb");	/* 4 */
+       if (addressprint)
+         {
+          if (nr_printable_breakpoints > 0)
+            annotate_field (4);
+          if (print_address_bits <= 32)
+            ui_out_table_header (uiout, 10, ui_left, "addr", "Address");/* 5 */
+          else
+            ui_out_table_header (uiout, 18, ui_left, "addr", "Address");/* 5 */
+         }
+       if (nr_printable_breakpoints > 0)
+         annotate_field (5);
+       ui_out_table_header (uiout, 40, ui_noalign, "what", "What");	/* 6 */
+       ui_out_table_body (uiout);
+       if (nr_printable_breakpoints > 0)
+         annotate_breakpoints_table ();
+
+   This example, from the `print_one_breakpoint' function, shows how to
+produce the actual data for the table whose structure was defined in
+the above example.  The original code was:
+
+        annotate_record ();
+        annotate_field (0);
+        printf_filtered ("%-3d ", b->number);
+        annotate_field (1);
+        if ((int)b->type > (sizeof(bptypes)/sizeof(bptypes[0]))
+            || ((int) b->type != bptypes[(int) b->type].type))
+          internal_error ("bptypes table does not describe type #%d.",
+                          (int)b->type);
+        printf_filtered ("%-14s ", bptypes[(int)b->type].description);
+        annotate_field (2);
+        printf_filtered ("%-4s ", bpdisps[(int)b->disposition]);
+        annotate_field (3);
+        printf_filtered ("%-3c ", bpenables[(int)b->enable]);
+        ...
+
+   This is the new version:
+
+        annotate_record ();
+        ui_out_tuple_begin (uiout, "bkpt");
+        annotate_field (0);
+        ui_out_field_int (uiout, "number", b->number);
+        annotate_field (1);
+        if (((int) b->type > (sizeof (bptypes) / sizeof (bptypes[0])))
+            || ((int) b->type != bptypes[(int) b->type].type))
+          internal_error ("bptypes table does not describe type #%d.",
+                          (int) b->type);
+        ui_out_field_string (uiout, "type", bptypes[(int)b->type].description);
+        annotate_field (2);
+        ui_out_field_string (uiout, "disp", bpdisps[(int)b->disposition]);
+        annotate_field (3);
+        ui_out_field_fmt (uiout, "enabled", "%c", bpenables[(int)b->enable]);
+        ...
+
+   This example, also from `print_one_breakpoint', shows how to produce
+a complicated output field using the `print_expression' functions which
+requires a stream to be passed.  It also shows how to automate stream
+destruction with cleanups.  The original code was:
+
+         annotate_field (5);
+         print_expression (b->exp, gdb_stdout);
+
+   The new version is:
+
+       struct ui_stream *stb = ui_out_stream_new (uiout);
+       struct cleanup *old_chain = make_cleanup_ui_out_stream_delete (stb);
+       ...
+       annotate_field (5);
+       print_expression (b->exp, stb->stream);
+       ui_out_field_stream (uiout, "what", local_stream);
+
+   This example, also from `print_one_breakpoint', shows how to use
+`ui_out_text' and `ui_out_field_string'.  The original code was:
+
+       annotate_field (5);
+       if (b->dll_pathname == NULL)
+         printf_filtered ("<any library> ");
+       else
+         printf_filtered ("library \"%s\" ", b->dll_pathname);
+
+   It became:
+
+       annotate_field (5);
+       if (b->dll_pathname == NULL)
+         {
+           ui_out_field_string (uiout, "what", "<any library>");
+           ui_out_spaces (uiout, 1);
+         }
+       else
+         {
+           ui_out_text (uiout, "library \"");
+           ui_out_field_string (uiout, "what", b->dll_pathname);
+           ui_out_text (uiout, "\" ");
+         }
+
+   The following example from `print_one_breakpoint' shows how to use
+`ui_out_field_int' and `ui_out_spaces'.  The original code was:
+
+       annotate_field (5);
+       if (b->forked_inferior_pid != 0)
+         printf_filtered ("process %d ", b->forked_inferior_pid);
+
+   It became:
+
+       annotate_field (5);
+       if (b->forked_inferior_pid != 0)
+         {
+           ui_out_text (uiout, "process ");
+           ui_out_field_int (uiout, "what", b->forked_inferior_pid);
+           ui_out_spaces (uiout, 1);
+         }
+
+   Here's an example of using `ui_out_field_string'.  The original code
+was:
+
+       annotate_field (5);
+       if (b->exec_pathname != NULL)
+         printf_filtered ("program \"%s\" ", b->exec_pathname);
+
+   It became:
+
+       annotate_field (5);
+       if (b->exec_pathname != NULL)
+         {
+           ui_out_text (uiout, "program \"");
+           ui_out_field_string (uiout, "what", b->exec_pathname);
+           ui_out_text (uiout, "\" ");
+         }
+
+   Finally, here's an example of printing an address.  The original
+code:
+
+       annotate_field (4);
+       printf_filtered ("%s ",
+             hex_string_custom ((unsigned long) b->address, 8));
+
+   It became:
+
+       annotate_field (4);
+       ui_out_field_core_addr (uiout, "Address", b->address);
+
+4.3 Console Printing
+====================
+
+4.4 TUI
+=======
+
+---------- Footnotes ----------
+
+   (1) The function cast is not portable ISO C.
+
+   (2) As of this writing (April 2001), setting verbosity level is not
+yet implemented, and is always returned as zero.  So calling
+`ui_out_message' with a VERBOSITY argument more than zero will cause
+the message to never be printed.
+
+
+File: gdbint.info,  Node: libgdb,  Next: Values,  Prev: User Interface,  Up: Top
+
+5 libgdb
+********
+
+5.1 libgdb 1.0
+==============
+
+`libgdb' 1.0 was an abortive project of years ago.  The theory was to
+provide an API to GDB's functionality.
+
+5.2 libgdb 2.0
+==============
+
+`libgdb' 2.0 is an ongoing effort to update GDB so that is better able
+to support graphical and other environments.
+
+   Since `libgdb' development is on-going, its architecture is still
+evolving.  The following components have so far been identified:
+
+   * Observer - `gdb-events.h'.
+
+   * Builder - `ui-out.h'
+
+   * Event Loop - `event-loop.h'
+
+   * Library - `gdb.h'
+
+   The model that ties these components together is described below.
+
+5.3 The `libgdb' Model
+======================
+
+A client of `libgdb' interacts with the library in two ways.
+
+   * As an observer (using `gdb-events') receiving notifications from
+     `libgdb' of any internal state changes (break point changes, run
+     state, etc).
+
+   * As a client querying `libgdb' (using the `ui-out' builder) to
+     obtain various status values from GDB.
+
+   Since `libgdb' could have multiple clients (e.g., a GUI supporting
+the existing GDB CLI), those clients must co-operate when controlling
+`libgdb'.  In particular, a client must ensure that `libgdb' is idle
+(i.e. no other client is using `libgdb') before responding to a
+`gdb-event' by making a query.
+
+5.4 CLI support
+===============
+
+At present GDB's CLI is very much entangled in with the core of
+`libgdb'.  Consequently, a client wishing to include the CLI in their
+interface needs to carefully co-ordinate its own and the CLI's
+requirements.
+
+   It is suggested that the client set `libgdb' up to be bi-modal
+(alternate between CLI and client query modes).  The notes below sketch
+out the theory:
+
+   * The client registers itself as an observer of `libgdb'.
+
+   * The client create and install `cli-out' builder using its own
+     versions of the `ui-file' `gdb_stderr', `gdb_stdtarg' and
+     `gdb_stdout' streams.
+
+   * The client creates a separate custom `ui-out' builder that is only
+     used while making direct queries to `libgdb'.
+
+   When the client receives input intended for the CLI, it simply
+passes it along.  Since the `cli-out' builder is installed by default,
+all the CLI output in response to that command is routed (pronounced
+rooted) through to the client controlled `gdb_stdout' et. al. streams.
+At the same time, the client is kept abreast of internal changes by
+virtue of being a `libgdb' observer.
+
+   The only restriction on the client is that it must wait until
+`libgdb' becomes idle before initiating any queries (using the client's
+custom builder).
+
+5.5 `libgdb' components
+=======================
+
+Observer - `gdb-events.h'
+-------------------------
+
+`gdb-events' provides the client with a very raw mechanism that can be
+used to implement an observer.  At present it only allows for one
+observer and that observer must, internally, handle the need to delay
+the processing of any event notifications until after `libgdb' has
+finished the current command.
+
+Builder - `ui-out.h'
+--------------------
+
+`ui-out' provides the infrastructure necessary for a client to create a
+builder.  That builder is then passed down to `libgdb' when doing any
+queries.
+
+Event Loop - `event-loop.h'
+---------------------------
+
+`event-loop', currently non-re-entrant, provides a simple event loop.
+A client would need to either plug its self into this loop or,
+implement a new event-loop that GDB would use.
+
+   The event-loop will eventually be made re-entrant.  This is so that
+GDB can better handle the problem of some commands blocking instead of
+returning.
+
+Library - `gdb.h'
+-----------------
+
+`libgdb' is the most obvious component of this system.  It provides the
+query interface.  Each function is parameterized by a `ui-out' builder.
+The result of the query is constructed using that builder before the
+query function returns.
+
+
+File: gdbint.info,  Node: Values,  Next: Stack Frames,  Prev: libgdb,  Up: Top
+
+6 Values
+********
+
+6.1 Values
+==========
+
+GDB uses `struct value', or "values", as an internal abstraction for
+the representation of a variety of inferior objects and GDB convenience
+objects.
+
+   Values have an associated `struct type', that describes a virtual
+view of the raw data or object stored in or accessed through the value.
+
+   A value is in addition discriminated by its lvalue-ness, given its
+`enum lval_type' enumeration type:
+
+``not_lval''
+     This value is not an lval.  It can't be assigned to.
+
+``lval_memory''
+     This value represents an object in memory.
+
+``lval_register''
+     This value represents an object that lives in a register.
+
+``lval_internalvar''
+     Represents the value of an internal variable.
+
+``lval_internalvar_component''
+     Represents part of a GDB internal variable.  E.g., a structure
+     field.
+
+``lval_computed''
+     These are "computed" values.  They allow creating specialized value
+     objects for specific purposes, all abstracted away from the core
+     value support code.  The creator of such a value writes specialized
+     functions to handle the reading and writing to/from the value's
+     backend data, and optionally, a "copy operator" and a "destructor".
+
+     Pointers to these functions are stored in a `struct lval_funcs'
+     instance (declared in `value.h'), and passed to the
+     `allocate_computed_value' function, as in the example below.
+
+          static void
+          nil_value_read (struct value *v)
+          {
+            /* This callback reads data from some backend, and stores it in V.
+               In this case, we always read null data.  You'll want to fill in
+               something more interesting.  */
+
+            memset (value_contents_all_raw (v),
+                    value_offset (v),
+                    TYPE_LENGTH (value_type (v)));
+          }
+
+          static void
+          nil_value_write (struct value *v, struct value *fromval)
+          {
+            /* Takes the data from FROMVAL and stores it in the backend of V.  */
+
+            to_oblivion (value_contents_all_raw (fromval),
+                         value_offset (v),
+                         TYPE_LENGTH (value_type (fromval)));
+          }
+
+          static struct lval_funcs nil_value_funcs =
+            {
+              nil_value_read,
+              nil_value_write
+            };
+
+          struct value *
+          make_nil_value (void)
+          {
+             struct type *type;
+             struct value *v;
+
+             type = make_nils_type ();
+             v = allocate_computed_value (type, &nil_value_funcs, NULL);
+
+             return v;
+          }
+
+     See the implementation of the `$_siginfo' convenience variable in
+     `infrun.c' as a real example use of lval_computed.
+
+
+
+File: gdbint.info,  Node: Stack Frames,  Next: Symbol Handling,  Prev: Values,  Up: Top
+
+7 Stack Frames
+**************
+
+A frame is a construct that GDB uses to keep track of calling and
+called functions.
+
+   GDB's frame model, a fresh design, was implemented with the need to
+support DWARF's Call Frame Information in mind.  In fact, the term
+"unwind" is taken directly from that specification.  Developers wishing
+to learn more about unwinders, are encouraged to read the DWARF
+specification, available from `http://www.dwarfstd.org'.
+
+   GDB's model is that you find a frame's registers by "unwinding" them
+from the next younger frame.  That is, `get_frame_register' which
+returns the value of a register in frame #1 (the next-to-youngest
+frame), is implemented by calling frame #0's `frame_register_unwind'
+(the youngest frame).  But then the obvious question is: how do you
+access the registers of the youngest frame itself?
+
+   To answer this question, GDB has the "sentinel" frame, the "-1st"
+frame.  Unwinding registers from the sentinel frame gives you the
+current values of the youngest real frame's registers.  If F is a
+sentinel frame, then `get_frame_type (F) == SENTINEL_FRAME'.
+
+7.1 Selecting an Unwinder
+=========================
+
+The architecture registers a list of frame unwinders (`struct
+frame_unwind'), using the functions `frame_unwind_prepend_unwinder' and
+`frame_unwind_append_unwinder'.  Each unwinder includes a sniffer.
+Whenever GDB needs to unwind a frame (to fetch the previous frame's
+registers or the current frame's ID), it calls registered sniffers in
+order to find one which recognizes the frame.  The first time a sniffer
+returns non-zero, the corresponding unwinder is assigned to the frame.
+
+7.2 Unwinding the Frame ID
+==========================
+
+Every frame has an associated ID, of type `struct frame_id'.  The ID
+includes the stack base and function start address for the frame.  The
+ID persists through the entire life of the frame, including while other
+called frames are running; it is used to locate an appropriate `struct
+frame_info' from the cache.
+
+   Every time the inferior stops, and at various other times, the frame
+cache is flushed.  Because of this, parts of GDB which need to keep
+track of individual frames cannot use pointers to `struct frame_info'.
+A frame ID provides a stable reference to a frame, even when the
+unwinder must be run again to generate a new `struct frame_info' for
+the same frame.
+
+   The frame's unwinder's `this_id' method is called to find the ID.
+Note that this is different from register unwinding, where the next
+frame's `prev_register' is called to unwind this frame's registers.
+
+   Both stack base and function address are required to identify the
+frame, because a recursive function has the same function address for
+two consecutive frames and a leaf function may have the same stack
+address as its caller.  On some platforms, a third address is part of
+the ID to further disambiguate frames--for instance, on IA-64 the
+separate register stack address is included in the ID.
+
+   An invalid frame ID (`outer_frame_id') returned from the `this_id'
+method means to stop unwinding after this frame.
+
+   `null_frame_id' is another invalid frame ID which should be used
+when there is no frame.  For instance, certain breakpoints are attached
+to a specific frame, and that frame is identified through its frame ID
+(we use this to implement the "finish" command).  Using `null_frame_id'
+as the frame ID for a given breakpoint means that the breakpoint is not
+specific to any frame.  The `this_id' method should never return
+`null_frame_id'.
+
+7.3 Unwinding Registers
+=======================
+
+Each unwinder includes a `prev_register' method.  This method takes a
+frame, an associated cache pointer, and a register number.  It returns
+a `struct value *' describing the requested register, as saved by this
+frame.  This is the value of the register that is current in this
+frame's caller.
+
+   The returned value must have the same type as the register.  It may
+have any lvalue type.  In most circumstances one of these routines will
+generate the appropriate value:
+
+`frame_unwind_got_optimized'
+     This register was not saved.
+
+`frame_unwind_got_register'
+     This register was copied into another register in this frame.  This
+     is also used for unchanged registers; they are "copied" into the
+     same register.
+
+`frame_unwind_got_memory'
+     This register was saved in memory.
+
+`frame_unwind_got_constant'
+     This register was not saved, but the unwinder can compute the
+     previous value some other way.
+
+`frame_unwind_got_address'
+     Same as `frame_unwind_got_constant', except that the value is a
+     target address.  This is frequently used for the stack pointer,
+     which is not explicitly saved but has a known offset from this
+     frame's stack pointer.  For architectures with a flat unified
+     address space, this is generally the same as
+     `frame_unwind_got_constant'.
+
+
+File: gdbint.info,  Node: Symbol Handling,  Next: Language Support,  Prev: Stack Frames,  Up: Top
+
+8 Symbol Handling
+*****************
+
+Symbols are a key part of GDB's operation.  Symbols include variables,
+functions, and types.
+
+   Symbol information for a large program can be truly massive, and
+reading of symbol information is one of the major performance
+bottlenecks in GDB; it can take many minutes to process it all.
+Studies have shown that nearly all the time spent is computational,
+rather than file reading.
+
+   One of the ways for GDB to provide a good user experience is to
+start up quickly, taking no more than a few seconds.  It is simply not
+possible to process all of a program's debugging info in that time, and
+so we attempt to handle symbols incrementally.  For instance, we create
+"partial symbol tables" consisting of only selected symbols, and only
+expand them to full symbol tables when necessary.
+
+8.1 Symbol Reading
+==================
+
+GDB reads symbols from "symbol files".  The usual symbol file is the
+file containing the program which GDB is debugging.  GDB can be
+directed to use a different file for symbols (with the `symbol-file'
+command), and it can also read more symbols via the `add-file' and
+`load' commands. In addition, it may bring in more symbols while
+loading shared libraries.
+
+   Symbol files are initially opened by code in `symfile.c' using the
+BFD library (*note Support Libraries::).  BFD identifies the type of
+the file by examining its header.  `find_sym_fns' then uses this
+identification to locate a set of symbol-reading functions.
+
+   Symbol-reading modules identify themselves to GDB by calling
+`add_symtab_fns' during their module initialization.  The argument to
+`add_symtab_fns' is a `struct sym_fns' which contains the name (or name
+prefix) of the symbol format, the length of the prefix, and pointers to
+four functions.  These functions are called at various times to process
+symbol files whose identification matches the specified prefix.
+
+   The functions supplied by each module are:
+
+`XYZ_symfile_init(struct sym_fns *sf)'
+     Called from `symbol_file_add' when we are about to read a new
+     symbol file.  This function should clean up any internal state
+     (possibly resulting from half-read previous files, for example)
+     and prepare to read a new symbol file.  Note that the symbol file
+     which we are reading might be a new "main" symbol file, or might
+     be a secondary symbol file whose symbols are being added to the
+     existing symbol table.
+
+     The argument to `XYZ_symfile_init' is a newly allocated `struct
+     sym_fns' whose `bfd' field contains the BFD for the new symbol
+     file being read.  Its `private' field has been zeroed, and can be
+     modified as desired.  Typically, a struct of private information
+     will be `malloc''d, and a pointer to it will be placed in the
+     `private' field.
+
+     There is no result from `XYZ_symfile_init', but it can call
+     `error' if it detects an unavoidable problem.
+
+`XYZ_new_init()'
+     Called from `symbol_file_add' when discarding existing symbols.
+     This function needs only handle the symbol-reading module's
+     internal state; the symbol table data structures visible to the
+     rest of GDB will be discarded by `symbol_file_add'.  It has no
+     arguments and no result.  It may be called after
+     `XYZ_symfile_init', if a new symbol table is being read, or may be
+     called alone if all symbols are simply being discarded.
+
+`XYZ_symfile_read(struct sym_fns *sf, CORE_ADDR addr, int mainline)'
+     Called from `symbol_file_add' to actually read the symbols from a
+     symbol-file into a set of psymtabs or symtabs.
+
+     `sf' points to the `struct sym_fns' originally passed to
+     `XYZ_sym_init' for possible initialization.  `addr' is the offset
+     between the file's specified start address and its true address in
+     memory.  `mainline' is 1 if this is the main symbol table being
+     read, and 0 if a secondary symbol file (e.g., shared library or
+     dynamically loaded file) is being read.
+
+   In addition, if a symbol-reading module creates psymtabs when
+XYZ_symfile_read is called, these psymtabs will contain a pointer to a
+function `XYZ_psymtab_to_symtab', which can be called from any point in
+the GDB symbol-handling code.
+
+`XYZ_psymtab_to_symtab (struct partial_symtab *pst)'
+     Called from `psymtab_to_symtab' (or the `PSYMTAB_TO_SYMTAB' macro)
+     if the psymtab has not already been read in and had its
+     `pst->symtab' pointer set.  The argument is the psymtab to be
+     fleshed-out into a symtab.  Upon return, `pst->readin' should have
+     been set to 1, and `pst->symtab' should contain a pointer to the
+     new corresponding symtab, or zero if there were no symbols in that
+     part of the symbol file.
+
+8.2 Partial Symbol Tables
+=========================
+
+GDB has three types of symbol tables:
+
+   * Full symbol tables ("symtabs").  These contain the main
+     information about symbols and addresses.
+
+   * Partial symbol tables ("psymtabs").  These contain enough
+     information to know when to read the corresponding part of the full
+     symbol table.
+
+   * Minimal symbol tables ("msymtabs").  These contain information
+     gleaned from non-debugging symbols.
+
+   This section describes partial symbol tables.
+
+   A psymtab is constructed by doing a very quick pass over an
+executable file's debugging information.  Small amounts of information
+are extracted--enough to identify which parts of the symbol table will
+need to be re-read and fully digested later, when the user needs the
+information.  The speed of this pass causes GDB to start up very
+quickly.  Later, as the detailed rereading occurs, it occurs in small
+pieces, at various times, and the delay therefrom is mostly invisible to
+the user.
+
+   The symbols that show up in a file's psymtab should be, roughly,
+those visible to the debugger's user when the program is not running
+code from that file.  These include external symbols and types, static
+symbols and types, and `enum' values declared at file scope.
+
+   The psymtab also contains the range of instruction addresses that the
+full symbol table would represent.
+
+   The idea is that there are only two ways for the user (or much of the
+code in the debugger) to reference a symbol:
+
+   * By its address (e.g., execution stops at some address which is
+     inside a function in this file).  The address will be noticed to
+     be in the range of this psymtab, and the full symtab will be read
+     in.  `find_pc_function', `find_pc_line', and other `find_pc_...'
+     functions handle this.
+
+   * By its name (e.g., the user asks to print a variable, or set a
+     breakpoint on a function).  Global names and file-scope names will
+     be found in the psymtab, which will cause the symtab to be pulled
+     in.  Local names will have to be qualified by a global name, or a
+     file-scope name, in which case we will have already read in the
+     symtab as we evaluated the qualifier.  Or, a local symbol can be
+     referenced when we are "in" a local scope, in which case the first
+     case applies.  `lookup_symbol' does most of the work here.
+
+   The only reason that psymtabs exist is to cause a symtab to be read
+in at the right moment.  Any symbol that can be elided from a psymtab,
+while still causing that to happen, should not appear in it.  Since
+psymtabs don't have the idea of scope, you can't put local symbols in
+them anyway.  Psymtabs don't have the idea of the type of a symbol,
+either, so types need not appear, unless they will be referenced by
+name.
+
+   It is a bug for GDB to behave one way when only a psymtab has been
+read, and another way if the corresponding symtab has been read in.
+Such bugs are typically caused by a psymtab that does not contain all
+the visible symbols, or which has the wrong instruction address ranges.
+
+   The psymtab for a particular section of a symbol file (objfile)
+could be thrown away after the symtab has been read in.  The symtab
+should always be searched before the psymtab, so the psymtab will never
+be used (in a bug-free environment).  Currently, psymtabs are allocated
+on an obstack, and all the psymbols themselves are allocated in a pair
+of large arrays on an obstack, so there is little to be gained by
+trying to free them unless you want to do a lot more work.
+
+   Whether or not psymtabs are created depends on the objfile's symbol
+reader.  The core of GDB hides the details of partial symbols and
+partial symbol tables behind a set of function pointers known as the
+"quick symbol functions".  These are documented in `symfile.h'.
+
+8.3 Types
+=========
+
+Fundamental Types (e.g., `FT_VOID', `FT_BOOLEAN').
+--------------------------------------------------
+
+These are the fundamental types that GDB uses internally.  Fundamental
+types from the various debugging formats (stabs, ELF, etc) are mapped
+into one of these.  They are basically a union of all fundamental types
+that GDB knows about for all the languages that GDB knows about.
+
+Type Codes (e.g., `TYPE_CODE_PTR', `TYPE_CODE_ARRAY').
+------------------------------------------------------
+
+Each time GDB builds an internal type, it marks it with one of these
+types.  The type may be a fundamental type, such as `TYPE_CODE_INT', or
+a derived type, such as `TYPE_CODE_PTR' which is a pointer to another
+type.  Typically, several `FT_*' types map to one `TYPE_CODE_*' type,
+and are distinguished by other members of the type struct, such as
+whether the type is signed or unsigned, and how many bits it uses.
+
+Builtin Types (e.g., `builtin_type_void', `builtin_type_char').
+---------------------------------------------------------------
+
+These are instances of type structs that roughly correspond to
+fundamental types and are created as global types for GDB to use for
+various ugly historical reasons.  We eventually want to eliminate
+these.  Note for example that `builtin_type_int' initialized in
+`gdbtypes.c' is basically the same as a `TYPE_CODE_INT' type that is
+initialized in `c-lang.c' for an `FT_INTEGER' fundamental type.  The
+difference is that the `builtin_type' is not associated with any
+particular objfile, and only one instance exists, while `c-lang.c'
+builds as many `TYPE_CODE_INT' types as needed, with each one
+associated with some particular objfile.
+
+8.4 Object File Formats
+=======================
+
+8.4.1 a.out
+-----------
+
+The `a.out' format is the original file format for Unix.  It consists
+of three sections: `text', `data', and `bss', which are for program
+code, initialized data, and uninitialized data, respectively.
+
+   The `a.out' format is so simple that it doesn't have any reserved
+place for debugging information.  (Hey, the original Unix hackers used
+`adb', which is a machine-language debugger!)  The only debugging
+format for `a.out' is stabs, which is encoded as a set of normal
+symbols with distinctive attributes.
+
+   The basic `a.out' reader is in `dbxread.c'.
+
+8.4.2 COFF
+----------
+
+The COFF format was introduced with System V Release 3 (SVR3) Unix.
+COFF files may have multiple sections, each prefixed by a header.  The
+number of sections is limited.
+
+   The COFF specification includes support for debugging.  Although this
+was a step forward, the debugging information was woefully limited.
+For instance, it was not possible to represent code that came from an
+included file.  GNU's COFF-using configs often use stabs-type info,
+encapsulated in special sections.
+
+   The COFF reader is in `coffread.c'.
+
+8.4.3 ECOFF
+-----------
+
+ECOFF is an extended COFF originally introduced for Mips and Alpha
+workstations.
+
+   The basic ECOFF reader is in `mipsread.c'.
+
+8.4.4 XCOFF
+-----------
+
+The IBM RS/6000 running AIX uses an object file format called XCOFF.
+The COFF sections, symbols, and line numbers are used, but debugging
+symbols are `dbx'-style stabs whose strings are located in the `.debug'
+section (rather than the string table).  For more information, see
+*Note Top: (stabs)Top.
+
+   The shared library scheme has a clean interface for figuring out what
+shared libraries are in use, but the catch is that everything which
+refers to addresses (symbol tables and breakpoints at least) needs to be
+relocated for both shared libraries and the main executable.  At least
+using the standard mechanism this can only be done once the program has
+been run (or the core file has been read).
+
+8.4.5 PE
+--------
+
+Windows 95 and NT use the PE ("Portable Executable") format for their
+executables.  PE is basically COFF with additional headers.
+
+   While BFD includes special PE support, GDB needs only the basic COFF
+reader.
+
+8.4.6 ELF
+---------
+
+The ELF format came with System V Release 4 (SVR4) Unix.  ELF is
+similar to COFF in being organized into a number of sections, but it
+removes many of COFF's limitations.  Debugging info may be either stabs
+encapsulated in ELF sections, or more commonly these days, DWARF.
+
+   The basic ELF reader is in `elfread.c'.
+
+8.4.7 SOM
+---------
+
+SOM is HP's object file and debug format (not to be confused with IBM's
+SOM, which is a cross-language ABI).
+
+   The SOM reader is in `somread.c'.
+
+8.5 Debugging File Formats
+==========================
+
+This section describes characteristics of debugging information that
+are independent of the object file format.
+
+8.5.1 stabs
+-----------
+
+`stabs' started out as special symbols within the `a.out' format.
+Since then, it has been encapsulated into other file formats, such as
+COFF and ELF.
+
+   While `dbxread.c' does some of the basic stab processing, including
+for encapsulated versions, `stabsread.c' does the real work.
+
+8.5.2 COFF
+----------
+
+The basic COFF definition includes debugging information.  The level of
+support is minimal and non-extensible, and is not often used.
+
+8.5.3 Mips debug (Third Eye)
+----------------------------
+
+ECOFF includes a definition of a special debug format.
+
+   The file `mdebugread.c' implements reading for this format.
+
+8.5.4 DWARF 2
+-------------
+
+DWARF 2 is an improved but incompatible version of DWARF 1.
+
+   The DWARF 2 reader is in `dwarf2read.c'.
+
+8.5.5 Compressed DWARF 2
+------------------------
+
+Compressed DWARF 2 is not technically a separate debugging format, but
+merely DWARF 2 debug information that has been compressed.  In this
+format, every object-file section holding DWARF 2 debugging information
+is compressed and prepended with a header.  (The section is also
+typically renamed, so a section called `.debug_info' in a DWARF 2
+binary would be called `.zdebug_info' in a compressed DWARF 2 binary.)
+The header is 12 bytes long:
+
+   * 4 bytes: the literal string "ZLIB"
+
+   * 8 bytes: the uncompressed size of the section, in big-endian byte
+     order.
+
+   The same reader is used for both compressed an normal DWARF 2 info.
+Section decompression is done in `zlib_decompress_section' in
+`dwarf2read.c'.
+
+8.5.6 DWARF 3
+-------------
+
+DWARF 3 is an improved version of DWARF 2.
+
+8.5.7 SOM
+---------
+
+Like COFF, the SOM definition includes debugging information.
+
+8.6 Adding a New Symbol Reader to GDB
+=====================================
+
+If you are using an existing object file format (`a.out', COFF, ELF,
+etc), there is probably little to be done.
+
+   If you need to add a new object file format, you must first add it to
+BFD.  This is beyond the scope of this document.
+
+   You must then arrange for the BFD code to provide access to the
+debugging symbols.  Generally GDB will have to call swapping routines
+from BFD and a few other BFD internal routines to locate the debugging
+information.  As much as possible, GDB should not depend on the BFD
+internal data structures.
+
+   For some targets (e.g., COFF), there is a special transfer vector
+used to call swapping routines, since the external data structures on
+various platforms have different sizes and layouts.  Specialized
+routines that will only ever be implemented by one object file format
+may be called directly.  This interface should be described in a file
+`bfd/libXYZ.h', which is included by GDB.
+
+8.7 Memory Management for Symbol Files
+======================================
+
+Most memory associated with a loaded symbol file is stored on its
+`objfile_obstack'.  This includes symbols, types, namespace data, and
+other information produced by the symbol readers.
+
+   Because this data lives on the objfile's obstack, it is automatically
+released when the objfile is unloaded or reloaded.  Therefore one
+objfile must not reference symbol or type data from another objfile;
+they could be unloaded at different times.
+
+   User convenience variables, et cetera, have associated types.
+Normally these types live in the associated objfile.  However, when the
+objfile is unloaded, those types are deep copied to global memory, so
+that the values of the user variables and history items are not lost.
+
+
+File: gdbint.info,  Node: Language Support,  Next: Host Definition,  Prev: Symbol Handling,  Up: Top
+
+9 Language Support
+******************
+
+GDB's language support is mainly driven by the symbol reader, although
+it is possible for the user to set the source language manually.
+
+   GDB chooses the source language by looking at the extension of the
+file recorded in the debug info; `.c' means C, `.f' means Fortran, etc.
+It may also use a special-purpose language identifier if the debug
+format supports it, like with DWARF.
+
+9.1 Adding a Source Language to GDB
+===================================
+
+To add other languages to GDB's expression parser, follow the following
+steps:
+
+_Create the expression parser._
+     This should reside in a file `LANG-exp.y'.  Routines for building
+     parsed expressions into a `union exp_element' list are in
+     `parse.c'.
+
+     Since we can't depend upon everyone having Bison, and YACC produces
+     parsers that define a bunch of global names, the following lines
+     *must* be included at the top of the YACC parser, to prevent the
+     various parsers from defining the same global names:
+
+          #define yyparse         LANG_parse
+          #define yylex           LANG_lex
+          #define yyerror         LANG_error
+          #define yylval          LANG_lval
+          #define yychar          LANG_char
+          #define yydebug         LANG_debug
+          #define yypact          LANG_pact
+          #define yyr1            LANG_r1
+          #define yyr2            LANG_r2
+          #define yydef           LANG_def
+          #define yychk           LANG_chk
+          #define yypgo           LANG_pgo
+          #define yyact           LANG_act
+          #define yyexca          LANG_exca
+          #define yyerrflag       LANG_errflag
+          #define yynerrs         LANG_nerrs
+
+     At the bottom of your parser, define a `struct language_defn' and
+     initialize it with the right values for your language.  Define an
+     `initialize_LANG' routine and have it call
+     `add_language(LANG_language_defn)' to tell the rest of GDB that
+     your language exists.  You'll need some other supporting variables
+     and functions, which will be used via pointers from your
+     `LANG_language_defn'.  See the declaration of `struct
+     language_defn' in `language.h', and the other `*-exp.y' files, for
+     more information.
+
+_Add any evaluation routines, if necessary_
+     If you need new opcodes (that represent the operations of the
+     language), add them to the enumerated type in `expression.h'.  Add
+     support code for these operations in the `evaluate_subexp' function
+     defined in the file `eval.c'.  Add cases for new opcodes in two
+     functions from `parse.c': `prefixify_subexp' and
+     `length_of_subexp'.  These compute the number of `exp_element's
+     that a given operation takes up.
+
+_Update some existing code_
+     Add an enumerated identifier for your language to the enumerated
+     type `enum language' in `defs.h'.
+
+     Update the routines in `language.c' so your language is included.
+     These routines include type predicates and such, which (in some
+     cases) are language dependent.  If your language does not appear
+     in the switch statement, an error is reported.
+
+     Also included in `language.c' is the code that updates the variable
+     `current_language', and the routines that translate the
+     `language_LANG' enumerated identifier into a printable string.
+
+     Update the function `_initialize_language' to include your
+     language.  This function picks the default language upon startup,
+     so is dependent upon which languages that GDB is built for.
+
+     Update `allocate_symtab' in `symfile.c' and/or symbol-reading code
+     so that the language of each symtab (source file) is set properly.
+     This is used to determine the language to use at each stack frame
+     level.  Currently, the language is set based upon the extension of
+     the source file.  If the language can be better inferred from the
+     symbol information, please set the language of the symtab in the
+     symbol-reading code.
+
+     Add helper code to `print_subexp' (in `expprint.c') to handle any
+     new expression opcodes you have added to `expression.h'.  Also,
+     add the printed representations of your operators to
+     `op_print_tab'.
+
+_Add a place of call_
+     Add a call to `LANG_parse()' and `LANG_error' in `parse_exp_1'
+     (defined in `parse.c').
+
+_Edit `Makefile.in'_
+     Add dependencies in `Makefile.in'.  Make sure you update the macro
+     variables such as `HFILES' and `OBJS', otherwise your code may not
+     get linked in, or, worse yet, it may not get `tar'red into the
+     distribution!
+
+
+File: gdbint.info,  Node: Host Definition,  Next: Target Architecture Definition,  Prev: Language Support,  Up: Top
+
+10 Host Definition
+******************
+
+With the advent of Autoconf, it's rarely necessary to have host
+definition machinery anymore.  The following information is provided,
+mainly, as an historical reference.
+
+10.1 Adding a New Host
+======================
+
+GDB's host configuration support normally happens via Autoconf.  New
+host-specific definitions should not be needed.  Older hosts GDB still
+use the host-specific definitions and files listed below, but these
+mostly exist for historical reasons, and will eventually disappear.
+
+`gdb/config/ARCH/XYZ.mh'
+     This file is a Makefile fragment that once contained both host and
+     native configuration information (*note Native Debugging::) for the
+     machine XYZ.  The host configuration information is now handled by
+     Autoconf.
+
+     Host configuration information included definitions for `CC',
+     `SYSV_DEFINE', `XM_CFLAGS', `XM_ADD_FILES', `XM_CLIBS',
+     `XM_CDEPS', etc.; see `Makefile.in'.
+
+     New host-only configurations do not need this file.
+
+
+   (Files named `gdb/config/ARCH/xm-XYZ.h' were once used to define
+host-specific macros, but were no longer needed and have all been
+removed.)
+
+Generic Host Support Files
+--------------------------
+
+There are some "generic" versions of routines that can be used by
+various systems.
+
+`ser-unix.c'
+     This contains serial line support for Unix systems.  It is
+     included by default on all Unix-like hosts.
+
+`ser-pipe.c'
+     This contains serial pipe support for Unix systems.  It is
+     included by default on all Unix-like hosts.
+
+`ser-mingw.c'
+     This contains serial line support for 32-bit programs running under
+     Windows using MinGW.
+
+`ser-go32.c'
+     This contains serial line support for 32-bit programs running
+     under DOS, using the DJGPP (a.k.a. GO32) execution environment.
+
+`ser-tcp.c'
+     This contains generic TCP support using sockets.  It is included by
+     default on all Unix-like hosts and with MinGW.
+
+10.2 Host Conditionals
+======================
+
+When GDB is configured and compiled, various macros are defined or left
+undefined, to control compilation based on the attributes of the host
+system.  While formerly they could be set in host-specific header
+files, at present they can be changed only by setting `CFLAGS' when
+building, or by editing the source code.
+
+   These macros and their meanings (or if the meaning is not documented
+here, then one of the source files where they are used is indicated)
+are:
+
+`GDBINIT_FILENAME'
+     The default name of GDB's initialization file (normally
+     `.gdbinit').
+
+`SIGWINCH_HANDLER'
+     If your host defines `SIGWINCH', you can define this to be the name
+     of a function to be called if `SIGWINCH' is received.
+
+`SIGWINCH_HANDLER_BODY'
+     Define this to expand into code that will define the function
+     named by the expansion of `SIGWINCH_HANDLER'.
+
+`CRLF_SOURCE_FILES'
+     Define this if host files use `\r\n' rather than `\n' as a line
+     terminator.  This will cause source file listings to omit `\r'
+     characters when printing and it will allow `\r\n' line endings of
+     files which are "sourced" by gdb.  It must be possible to open
+     files in binary mode using `O_BINARY' or, for fopen, `"rb"'.
+
+`DEFAULT_PROMPT'
+     The default value of the prompt string (normally `"(gdb) "').
+
+`DEV_TTY'
+     The name of the generic TTY device, defaults to `"/dev/tty"'.
+
+`ISATTY'
+     Substitute for isatty, if not available.
+
+`FOPEN_RB'
+     Define this if binary files are opened the same way as text files.
+
+`CC_HAS_LONG_LONG'
+     Define this if the host C compiler supports `long long'.  This is
+     set by the `configure' script.
+
+`PRINTF_HAS_LONG_LONG'
+     Define this if the host can handle printing of long long integers
+     via the printf format conversion specifier `ll'.  This is set by
+     the `configure' script.
+
+`LSEEK_NOT_LINEAR'
+     Define this if `lseek (n)' does not necessarily move to byte number
+     `n' in the file.  This is only used when reading source files.  It
+     is normally faster to define `CRLF_SOURCE_FILES' when possible.
+
+`lint'
+     Define this to help placate `lint' in some situations.
+
+`volatile'
+     Define this to override the defaults of `__volatile__' or `/**/'.
+
+
+File: gdbint.info,  Node: Target Architecture Definition,  Next: Target Descriptions,  Prev: Host Definition,  Up: Top
+
+11 Target Architecture Definition
+*********************************
+
+GDB's target architecture defines what sort of machine-language
+programs GDB can work with, and how it works with them.
+
+   The target architecture object is implemented as the C structure
+`struct gdbarch *'.  The structure, and its methods, are generated
+using the Bourne shell script `gdbarch.sh'.
+
+* Menu:
+
+* OS ABI Variant Handling::
+* Initialize New Architecture::
+* Registers and Memory::
+* Pointers and Addresses::
+* Address Classes::
+* Register Representation::
+* Frame Interpretation::
+* Inferior Call Setup::
+* Adding support for debugging core files::
+* Defining Other Architecture Features::
+* Adding a New Target::
+
+
+File: gdbint.info,  Node: OS ABI Variant Handling,  Next: Initialize New Architecture,  Up: Target Architecture Definition
+
+11.1 Operating System ABI Variant Handling
+==========================================
+
+GDB provides a mechanism for handling variations in OS ABIs.  An OS ABI
+variant may have influence over any number of variables in the target
+architecture definition.  There are two major components in the OS ABI
+mechanism: sniffers and handlers.
+
+   A "sniffer" examines a file matching a BFD architecture/flavour pair
+(the architecture may be wildcarded) in an attempt to determine the OS
+ABI of that file.  Sniffers with a wildcarded architecture are
+considered to be "generic", while sniffers for a specific architecture
+are considered to be "specific".  A match from a specific sniffer
+overrides a match from a generic sniffer.  Multiple sniffers for an
+architecture/flavour may exist, in order to differentiate between two
+different operating systems which use the same basic file format.  The
+OS ABI framework provides a generic sniffer for ELF-format files which
+examines the `EI_OSABI' field of the ELF header, as well as note
+sections known to be used by several operating systems.
+
+   A "handler" is used to fine-tune the `gdbarch' structure for the
+selected OS ABI.  There may be only one handler for a given OS ABI for
+each BFD architecture.
+
+   The following OS ABI variants are defined in `defs.h':
+
+`GDB_OSABI_UNINITIALIZED'
+     Used for struct gdbarch_info if ABI is still uninitialized.
+
+`GDB_OSABI_UNKNOWN'
+     The ABI of the inferior is unknown.  The default `gdbarch'
+     settings for the architecture will be used.
+
+`GDB_OSABI_SVR4'
+     UNIX System V Release 4.
+
+`GDB_OSABI_HURD'
+     GNU using the Hurd kernel.
+
+`GDB_OSABI_SOLARIS'
+     Sun Solaris.
+
+`GDB_OSABI_OSF1'
+     OSF/1, including Digital UNIX and Compaq Tru64 UNIX.
+
+`GDB_OSABI_LINUX'
+     GNU using the Linux kernel.
+
+`GDB_OSABI_FREEBSD_AOUT'
+     FreeBSD using the `a.out' executable format.
+
+`GDB_OSABI_FREEBSD_ELF'
+     FreeBSD using the ELF executable format.
+
+`GDB_OSABI_NETBSD_AOUT'
+     NetBSD using the `a.out' executable format.
+
+`GDB_OSABI_NETBSD_ELF'
+     NetBSD using the ELF executable format.
+
+`GDB_OSABI_OPENBSD_ELF'
+     OpenBSD using the ELF executable format.
+
+`GDB_OSABI_WINCE'
+     Windows CE.
+
+`GDB_OSABI_GO32'
+     DJGPP.
+
+`GDB_OSABI_IRIX'
+     Irix.
+
+`GDB_OSABI_INTERIX'
+     Interix (Posix layer for MS-Windows systems).
+
+`GDB_OSABI_HPUX_ELF'
+     HP/UX using the ELF executable format.
+
+`GDB_OSABI_HPUX_SOM'
+     HP/UX using the SOM executable format.
+
+`GDB_OSABI_QNXNTO'
+     QNX Neutrino.
+
+`GDB_OSABI_CYGWIN'
+     Cygwin.
+
+`GDB_OSABI_AIX'
+     AIX.
+
+
+   Here are the functions that make up the OS ABI framework:
+
+ -- Function: const char * gdbarch_osabi_name (enum gdb_osabi OSABI)
+     Return the name of the OS ABI corresponding to OSABI.
+
+ -- Function: void gdbarch_register_osabi (enum bfd_architecture ARCH,
+          unsigned long MACHINE, enum gdb_osabi OSABI, void
+          (*INIT_OSABI)(struct gdbarch_info INFO, struct gdbarch
+          *GDBARCH))
+     Register the OS ABI handler specified by INIT_OSABI for the
+     architecture, machine type and OS ABI specified by ARCH, MACHINE
+     and OSABI.  In most cases, a value of zero for the machine type,
+     which implies the architecture's default machine type, will
+     suffice.
+
+ -- Function: void gdbarch_register_osabi_sniffer (enum
+          bfd_architecture ARCH, enum bfd_flavour FLAVOUR, enum
+          gdb_osabi (*SNIFFER)(bfd *ABFD))
+     Register the OS ABI file sniffer specified by SNIFFER for the BFD
+     architecture/flavour pair specified by ARCH and FLAVOUR.  If ARCH
+     is `bfd_arch_unknown', the sniffer is considered to be generic,
+     and is allowed to examine FLAVOUR-flavoured files for any
+     architecture.
+
+ -- Function: enum gdb_osabi gdbarch_lookup_osabi (bfd *ABFD)
+     Examine the file described by ABFD to determine its OS ABI.  The
+     value `GDB_OSABI_UNKNOWN' is returned if the OS ABI cannot be
+     determined.
+
+ -- Function: void gdbarch_init_osabi (struct gdbarch info INFO, struct
+          gdbarch *GDBARCH, enum gdb_osabi OSABI)
+     Invoke the OS ABI handler corresponding to OSABI to fine-tune the
+     `gdbarch' structure specified by GDBARCH.  If a handler
+     corresponding to OSABI has not been registered for GDBARCH's
+     architecture, a warning will be issued and the debugging session
+     will continue with the defaults already established for GDBARCH.
+
+ -- Function: void generic_elf_osabi_sniff_abi_tag_sections (bfd *ABFD,
+          asection *SECT, void *OBJ)
+     Helper routine for ELF file sniffers.  Examine the file described
+     by ABFD and look at ABI tag note sections to determine the OS ABI
+     from the note.  This function should be called via
+     `bfd_map_over_sections'.
+
+
+File: gdbint.info,  Node: Initialize New Architecture,  Next: Registers and Memory,  Prev: OS ABI Variant Handling,  Up: Target Architecture Definition
+
+11.2 Initializing a New Architecture
+====================================
+
+* Menu:
+
+* How an Architecture is Represented::
+* Looking Up an Existing Architecture::
+* Creating a New Architecture::
+
+
+File: gdbint.info,  Node: How an Architecture is Represented,  Next: Looking Up an Existing Architecture,  Up: Initialize New Architecture
+
+11.2.1 How an Architecture is Represented
+-----------------------------------------
+
+Each `gdbarch' is associated with a single BFD architecture, via a
+`bfd_arch_ARCH' in the `bfd_architecture' enumeration.  The `gdbarch'
+is registered by a call to `register_gdbarch_init', usually from the
+file's `_initialize_FILENAME' routine, which will be automatically
+called during GDB startup.  The arguments are a BFD architecture
+constant and an initialization function.
+
+   A GDB description for a new architecture, ARCH is created by
+defining a global function `_initialize_ARCH_tdep', by convention in
+the source file `ARCH-tdep.c'.  For example, in the case of the
+OpenRISC 1000, this function is called `_initialize_or1k_tdep' and is
+found in the file `or1k-tdep.c'.
+
+   The resulting object files containing the implementation of the
+`_initialize_ARCH_tdep' function are specified in the GDB
+`configure.tgt' file, which includes a large case statement pattern
+matching against the `--target' option of the `configure' script.  The
+new `struct gdbarch' is created within the `_initialize_ARCH_tdep'
+function by calling `gdbarch_register':
+
+     void gdbarch_register (enum bfd_architecture    ARCHITECTURE,
+                            gdbarch_init_ftype      *INIT_FUNC,
+                            gdbarch_dump_tdep_ftype *TDEP_DUMP_FUNC);
+
+   The ARCHITECTURE will identify the unique BFD to be associated with
+this `gdbarch'.  The INIT_FUNC funciton is called to create and return
+the new `struct gdbarch'.  The TDEP_DUMP_FUNC function will dump the
+target specific details associated with this architecture.
+
+   For example the function `_initialize_or1k_tdep' creates its
+architecture for 32-bit OpenRISC 1000 architectures by calling:
+
+     gdbarch_register (bfd_arch_or32, or1k_gdbarch_init, or1k_dump_tdep);
+
+
+File: gdbint.info,  Node: Looking Up an Existing Architecture,  Next: Creating a New Architecture,  Prev: How an Architecture is Represented,  Up: Initialize New Architecture
+
+11.2.2 Looking Up an Existing Architecture
+------------------------------------------
+
+The initialization function has this prototype:
+
+     static struct gdbarch *
+     ARCH_gdbarch_init (struct gdbarch_info INFO,
+                              struct gdbarch_list *ARCHES)
+
+   The INFO argument contains parameters used to select the correct
+architecture, and ARCHES is a list of architectures which have already
+been created with the same `bfd_arch_ARCH' value.
+
+   The initialization function should first make sure that INFO is
+acceptable, and return `NULL' if it is not.  Then, it should search
+through ARCHES for an exact match to INFO, and return one if found.
+Lastly, if no exact match was found, it should create a new
+architecture based on INFO and return it.
+
+   The lookup is done using `gdbarch_list_lookup_by_info'.  It is
+passed the list of existing architectures, ARCHES, and the `struct
+gdbarch_info', INFO, and returns the first matching architecture it
+finds, or `NULL' if none are found.  If an architecture is found it can
+be returned as the result from the initialization function, otherwise a
+new `struct gdbach' will need to be created.
+
+   The struct gdbarch_info has the following components:
+
+     struct gdbarch_info
+     {
+        const struct bfd_arch_info *bfd_arch_info;
+        int                         byte_order;
+        bfd                        *abfd;
+        struct gdbarch_tdep_info   *tdep_info;
+        enum gdb_osabi              osabi;
+        const struct target_desc   *target_desc;
+     };
+
+   The `bfd_arch_info' member holds the key details about the
+architecture.  The `byte_order' member is a value in an enumeration
+indicating the endianism.  The `abfd' member is a pointer to the full
+BFD, the `tdep_info' member is additional custom target specific
+information, `osabi' identifies which (if any) of a number of operating
+specific ABIs are used by this architecture and the `target_desc'
+member is a set of name-value pairs with information about register
+usage in this target.
+
+   When the `struct gdbarch' initialization function is called, not all
+the fields are provided--only those which can be deduced from the BFD.
+The `struct gdbarch_info', INFO is used as a look-up key with the list
+of existing architectures, ARCHES to see if a suitable architecture
+already exists.  The TDEP_INFO, OSABI and TARGET_DESC fields may be
+added before this lookup to refine the search.
+
+   Only information in INFO should be used to choose the new
+architecture.  Historically, INFO could be sparse, and defaults would
+be collected from the first element on ARCHES.  However, GDB now fills
+in INFO more thoroughly, so new `gdbarch' initialization functions
+should not take defaults from ARCHES.
+
+
+File: gdbint.info,  Node: Creating a New Architecture,  Prev: Looking Up an Existing Architecture,  Up: Initialize New Architecture
+
+11.2.3 Creating a New Architecture
+----------------------------------
+
+If no architecture is found, then a new architecture must be created,
+by calling `gdbarch_alloc' using the supplied `struct gdbarch_info' and
+any additional custom target specific information in a `struct
+gdbarch_tdep'.  The prototype for `gdbarch_alloc' is:
+
+     struct gdbarch *gdbarch_alloc (const struct gdbarch_info *INFO,
+                                    struct gdbarch_tdep       *TDEP);
+
+   The newly created struct gdbarch must then be populated.  Although
+there are default values, in most cases they are not what is required.
+
+   For each element, X, there is are a pair of corresponding accessor
+functions, one to set the value of that element, `set_gdbarch_X', the
+second to either get the value of an element (if it is a variable) or
+to apply the element (if it is a function), `gdbarch_X'.  Note that
+both accessor functions take a pointer to the `struct gdbarch' as first
+argument.  Populating the new `gdbarch' should use the `set_gdbarch'
+functions.
+
+   The following sections identify the main elements that should be set
+in this way.  This is not the complete list, but represents the
+functions and elements that must commonly be specified for a new
+architecture.  Many of the functions and variables are described in the
+header file `gdbarch.h'.
+
+   This is the main work in defining a new architecture.  Implementing
+the set of functions to populate the `struct gdbarch'.
+
+   `struct gdbarch_tdep' is not defined within GDB--it is up to the
+user to define this struct if it is needed to hold custom target
+information that is not covered by the standard `struct gdbarch'. For
+example with the OpenRISC 1000 architecture it is used to hold the
+number of matchpoints available in the target (along with other
+information).
+
+   If there is no additional target specific information, it can be set
+to `NULL'.
+
+
+File: gdbint.info,  Node: Registers and Memory,  Next: Pointers and Addresses,  Prev: Initialize New Architecture,  Up: Target Architecture Definition
+
+11.3 Registers and Memory
+=========================
+
+GDB's model of the target machine is rather simple.  GDB assumes the
+machine includes a bank of registers and a block of memory.  Each
+register may have a different size.
+
+   GDB does not have a magical way to match up with the compiler's idea
+of which registers are which; however, it is critical that they do
+match up accurately.  The only way to make this work is to get accurate
+information about the order that the compiler uses, and to reflect that
+in the `gdbarch_register_name' and related functions.
+
+   GDB can handle big-endian, little-endian, and bi-endian
+architectures.
+
+
+File: gdbint.info,  Node: Pointers and Addresses,  Next: Address Classes,  Prev: Registers and Memory,  Up: Target Architecture Definition
+
+11.4 Pointers Are Not Always Addresses
+======================================
+
+On almost all 32-bit architectures, the representation of a pointer is
+indistinguishable from the representation of some fixed-length number
+whose value is the byte address of the object pointed to.  On such
+machines, the words "pointer" and "address" can be used interchangeably.
+However, architectures with smaller word sizes are often cramped for
+address space, so they may choose a pointer representation that breaks
+this identity, and allows a larger code address space.
+
+   For example, the Renesas D10V is a 16-bit VLIW processor whose
+instructions are 32 bits long(1).  If the D10V used ordinary byte
+addresses to refer to code locations, then the processor would only be
+able to address 64kb of instructions.  However, since instructions must
+be aligned on four-byte boundaries, the low two bits of any valid
+instruction's byte address are always zero--byte addresses waste two
+bits.  So instead of byte addresses, the D10V uses word addresses--byte
+addresses shifted right two bits--to refer to code.  Thus, the D10V can
+use 16-bit words to address 256kb of code space.
+
+   However, this means that code pointers and data pointers have
+different forms on the D10V.  The 16-bit word `0xC020' refers to byte
+address `0xC020' when used as a data address, but refers to byte address
+`0x30080' when used as a code address.
+
+   (The D10V also uses separate code and data address spaces, which also
+affects the correspondence between pointers and addresses, but we're
+going to ignore that here; this example is already too long.)
+
+   To cope with architectures like this--the D10V is not the only
+one!--GDB tries to distinguish between "addresses", which are byte
+numbers, and "pointers", which are the target's representation of an
+address of a particular type of data.  In the example above, `0xC020'
+is the pointer, which refers to one of the addresses `0xC020' or
+`0x30080', depending on the type imposed upon it.  GDB provides
+functions for turning a pointer into an address and vice versa, in the
+appropriate way for the current architecture.
+
+   Unfortunately, since addresses and pointers are identical on almost
+all processors, this distinction tends to bit-rot pretty quickly.  Thus,
+each time you port GDB to an architecture which does distinguish
+between pointers and addresses, you'll probably need to clean up some
+architecture-independent code.
+
+   Here are functions which convert between pointers and addresses:
+
+ -- Function: CORE_ADDR extract_typed_address (void *BUF, struct type
+          *TYPE)
+     Treat the bytes at BUF as a pointer or reference of type TYPE, and
+     return the address it represents, in a manner appropriate for the
+     current architecture.  This yields an address GDB can use to read
+     target memory, disassemble, etc.  Note that BUF refers to a buffer
+     in GDB's memory, not the inferior's.
+
+     For example, if the current architecture is the Intel x86, this
+     function extracts a little-endian integer of the appropriate
+     length from BUF and returns it.  However, if the current
+     architecture is the D10V, this function will return a 16-bit
+     integer extracted from BUF, multiplied by four if TYPE is a
+     pointer to a function.
+
+     If TYPE is not a pointer or reference type, then this function
+     will signal an internal error.
+
+ -- Function: CORE_ADDR store_typed_address (void *BUF, struct type
+          *TYPE, CORE_ADDR ADDR)
+     Store the address ADDR in BUF, in the proper format for a pointer
+     of type TYPE in the current architecture.  Note that BUF refers to
+     a buffer in GDB's memory, not the inferior's.
+
+     For example, if the current architecture is the Intel x86, this
+     function stores ADDR unmodified as a little-endian integer of the
+     appropriate length in BUF.  However, if the current architecture
+     is the D10V, this function divides ADDR by four if TYPE is a
+     pointer to a function, and then stores it in BUF.
+
+     If TYPE is not a pointer or reference type, then this function
+     will signal an internal error.
+
+ -- Function: CORE_ADDR value_as_address (struct value *VAL)
+     Assuming that VAL is a pointer, return the address it represents,
+     as appropriate for the current architecture.
+
+     This function actually works on integral values, as well as
+     pointers.  For pointers, it performs architecture-specific
+     conversions as described above for `extract_typed_address'.
+
+ -- Function: CORE_ADDR value_from_pointer (struct type *TYPE,
+          CORE_ADDR ADDR)
+     Create and return a value representing a pointer of type TYPE to
+     the address ADDR, as appropriate for the current architecture.
+     This function performs architecture-specific conversions as
+     described above for `store_typed_address'.
+
+   Here are two functions which architectures can define to indicate the
+relationship between pointers and addresses.  These have default
+definitions, appropriate for architectures on which all pointers are
+simple unsigned byte addresses.
+
+ -- Function: CORE_ADDR gdbarch_pointer_to_address (struct gdbarch
+          *GDBARCH, struct type *TYPE, char *BUF)
+     Assume that BUF holds a pointer of type TYPE, in the appropriate
+     format for the current architecture.  Return the byte address the
+     pointer refers to.
+
+     This function may safely assume that TYPE is either a pointer or a
+     C++ reference type.
+
+ -- Function: void gdbarch_address_to_pointer (struct gdbarch *GDBARCH,
+          struct type *TYPE, char *BUF, CORE_ADDR ADDR)
+     Store in BUF a pointer of type TYPE representing the address ADDR,
+     in the appropriate format for the current architecture.
+
+     This function may safely assume that TYPE is either a pointer or a
+     C++ reference type.
+
+   ---------- Footnotes ----------
+
+   (1) Some D10V instructions are actually pairs of 16-bit
+sub-instructions.  However, since you can't jump into the middle of
+such a pair, code addresses can only refer to full 32 bit instructions,
+which is what matters in this explanation.
+
+
+File: gdbint.info,  Node: Address Classes,  Next: Register Representation,  Prev: Pointers and Addresses,  Up: Target Architecture Definition
+
+11.5 Address Classes
+====================
+
+Sometimes information about different kinds of addresses is available
+via the debug information.  For example, some programming environments
+define addresses of several different sizes.  If the debug information
+distinguishes these kinds of address classes through either the size
+info (e.g, `DW_AT_byte_size' in DWARF 2) or through an explicit address
+class attribute (e.g, `DW_AT_address_class' in DWARF 2), the following
+macros should be defined in order to disambiguate these types within
+GDB as well as provide the added information to a GDB user when
+printing type expressions.
+
+ -- Function: int gdbarch_address_class_type_flags (struct gdbarch
+          *GDBARCH, int BYTE_SIZE, int DWARF2_ADDR_CLASS)
+     Returns the type flags needed to construct a pointer type whose
+     size is BYTE_SIZE and whose address class is DWARF2_ADDR_CLASS.
+     This function is normally called from within a symbol reader.  See
+     `dwarf2read.c'.
+
+ -- Function: char * gdbarch_address_class_type_flags_to_name (struct
+          gdbarch *GDBARCH, int TYPE_FLAGS)
+     Given the type flags representing an address class qualifier,
+     return its name.
+
+ -- Function: int gdbarch_address_class_name_to_type_flags (struct
+          gdbarch *GDBARCH, int NAME, int *TYPE_FLAGS_PTR)
+     Given an address qualifier name, set the `int' referenced by
+     TYPE_FLAGS_PTR to the type flags for that address class qualifier.
+
+   Since the need for address classes is rather rare, none of the
+address class functions are defined by default.  Predicate functions
+are provided to detect when they are defined.
+
+   Consider a hypothetical architecture in which addresses are normally
+32-bits wide, but 16-bit addresses are also supported.  Furthermore,
+suppose that the DWARF 2 information for this architecture simply uses
+a `DW_AT_byte_size' value of 2 to indicate the use of one of these
+"short" pointers.  The following functions could be defined to
+implement the address class functions:
+
+     somearch_address_class_type_flags (int byte_size,
+                                        int dwarf2_addr_class)
+     {
+       if (byte_size == 2)
+         return TYPE_FLAG_ADDRESS_CLASS_1;
+       else
+         return 0;
+     }
+
+     static char *
+     somearch_address_class_type_flags_to_name (int type_flags)
+     {
+       if (type_flags & TYPE_FLAG_ADDRESS_CLASS_1)
+         return "short";
+       else
+         return NULL;
+     }
+
+     int
+     somearch_address_class_name_to_type_flags (char *name,
+                                                int *type_flags_ptr)
+     {
+       if (strcmp (name, "short") == 0)
+         {
+           *type_flags_ptr = TYPE_FLAG_ADDRESS_CLASS_1;
+           return 1;
+         }
+       else
+         return 0;
+     }
+
+   The qualifier `@short' is used in GDB's type expressions to indicate
+the presence of one of these "short" pointers.  For example if the
+debug information indicates that `short_ptr_var' is one of these short
+pointers, GDB might show the following behavior:
+
+     (gdb) ptype short_ptr_var
+     type = int * @short
+
+
+File: gdbint.info,  Node: Register Representation,  Next: Frame Interpretation,  Prev: Address Classes,  Up: Target Architecture Definition
+
+11.6 Register Representation
+============================
+
+* Menu:
+
+* Raw and Cooked Registers::
+* Register Architecture Functions & Variables::
+* Register Information Functions::
+* Register and Memory Data::
+* Register Caching::
+
+
+File: gdbint.info,  Node: Raw and Cooked Registers,  Next: Register Architecture Functions & Variables,  Up: Register Representation
+
+11.6.1 Raw and Cooked Registers
+-------------------------------
+
+GDB considers registers to be a set with members numbered linearly from
+0 upwards.  The first part of that set corresponds to real physical
+registers, the second part to any "pseudo-registers".  Pseudo-registers
+have no independent physical existence, but are useful representations
+of information within the architecture.  For example the OpenRISC 1000
+architecture has up to 32 general purpose registers, which are
+typically represented as 32-bit (or 64-bit) integers.  However the GPRs
+are also used as operands to the floating point operations, and it
+could be convenient to define a set of pseudo-registers, to show the
+GPRs represented as floating point values.
+
+   For any architecture, the implementer will decide on a mapping from
+hardware to GDB register numbers.  The registers corresponding to real
+hardware are referred to as "raw" registers, the remaining registers are
+"pseudo-registers".  The total register set (raw and pseudo) is called
+the "cooked" register set.
+
+
+File: gdbint.info,  Node: Register Architecture Functions & Variables,  Next: Register Information Functions,  Prev: Raw and Cooked Registers,  Up: Register Representation
+
+11.6.2 Functions and Variables Specifying the Register Architecture
+-------------------------------------------------------------------
+
+These `struct gdbarch' functions and variables specify the number and
+type of registers in the architecture.
+
+ -- Architecture Function: CORE_ADDR read_pc (struct regcache *REGCACHE)
+
+ -- Architecture Function: void write_pc (struct regcache *REGCACHE,
+          CORE_ADDR VAL)
+     Read or write the program counter.  The default value of both
+     functions is `NULL' (no function available).  If the program
+     counter is just an ordinary register, it can be specified in
+     `struct gdbarch' instead (see `pc_regnum' below) and it will be
+     read or written using the standard routines to access registers.
+     This function need only be specified if the program counter is not
+     an ordinary register.
+
+     Any register information can be obtained using the supplied
+     register cache, REGCACHE.  *Note Register Caching: Register
+     Caching.
+
+
+ -- Architecture Function: void pseudo_register_read (struct gdbarch
+          *GDBARCH, struct regcache *REGCACHE, int REGNUM, const
+          gdb_byte *BUF)
+
+ -- Architecture Function: void pseudo_register_write (struct gdbarch
+          *GDBARCH, struct regcache *REGCACHE, int REGNUM, const
+          gdb_byte *BUF)
+     These functions should be defined if there are any
+     pseudo-registers.  The default value is `NULL'.  REGNUM is the
+     number of the register to read or write (which will be a "cooked"
+     register number) and BUF is the buffer where the value read will be
+     placed, or from which the value to be written will be taken.  The
+     value in the buffer may be converted to or from a signed or
+     unsigned integral value using one of the utility functions (*note
+     Using Different Register and Memory Data Representations: Register
+     and Memory Data.).
+
+     The access should be for the specified architecture, GDBARCH.  Any
+     register information can be obtained using the supplied register
+     cache, REGCACHE.  *Note Register Caching: Register Caching.
+
+
+ -- Architecture Variable: int sp_regnum
+     This specifies the register holding the stack pointer, which may
+     be a raw or pseudo-register.  It defaults to -1 (not defined), but
+     it is an error for it not to be defined.
+
+     The value of the stack pointer register can be accessed withing
+     GDB as the variable `$sp'.
+
+
+ -- Architecture Variable: int pc_regnum
+     This specifies the register holding the program counter, which may
+     be a raw or pseudo-register.  It defaults to -1 (not defined).  If
+     `pc_regnum' is not defined, then the functions `read_pc' and
+     `write_pc' (see above) must be defined.
+
+     The value of the program counter (whether defined as a register, or
+     through `read_pc' and `write_pc') can be accessed withing GDB as
+     the variable `$pc'.
+
+
+ -- Architecture Variable: int ps_regnum
+     This specifies the register holding the processor status (often
+     called the status register), which may be a raw or
+     pseudo-register.  It defaults to -1 (not defined).
+
+     If defined, the value of this register can be accessed withing GDB
+     as the variable `$ps'.
+
+
+ -- Architecture Variable: int fp0_regnum
+     This specifies the first floating point register.  It defaults to
+     0.  `fp0_regnum' is not needed unless the target offers support
+     for floating point.
+
+
+
+File: gdbint.info,  Node: Register Information Functions,  Next: Register and Memory Data,  Prev: Register Architecture Functions & Variables,  Up: Register Representation
+
+11.6.3 Functions Giving Register Information
+--------------------------------------------
+
+These functions return information about registers.
+
+ -- Architecture Function: const char * register_name (struct gdbarch
+          *GDBARCH, int REGNUM)
+     This function should convert a register number (raw or pseudo) to a
+     register name (as a C `const char *').  This is used both to
+     determine the name of a register for output and to work out the
+     meaning of any register names used as input.  The function may
+     also return `NULL', to indicate that REGNUM is not a valid
+     register.
+
+     For example with the OpenRISC 1000, GDB registers 0-31 are the
+     General Purpose Registers, register 32 is the program counter and
+     register 33 is the supervision register (i.e. the processor status
+     register), which map to the strings `"gpr00"' through `"gpr31"',
+     `"pc"' and `"sr"' respectively. This means that the GDB command
+     `print $gpr5' should print the value of the OR1K general purpose
+     register 5(1).
+
+     The default value for this function is `NULL', meaning undefined.
+     It should always be defined.
+
+     The access should be for the specified architecture, GDBARCH.
+
+
+ -- Architecture Function: struct type * register_type (struct gdbarch
+          *GDBARCH, int REGNUM)
+     Given a register number, this function identifies the type of data
+     it may be holding, specified as a `struct type'.  GDB allows
+     creation of arbitrary types, but a number of built in types are
+     provided (`builtin_type_void', `builtin_type_int32' etc), together
+     with functions to derive types from these.
+
+     Typically the program counter will have a type of "pointer to
+     function" (it points to code), the frame pointer and stack pointer
+     will have types of "pointer to void" (they point to data on the
+     stack) and all other integer registers will have a type of 32-bit
+     integer or 64-bit integer.
+
+     This information guides the formatting when displaying register
+     information.  The default value is `NULL' meaning no information is
+     available to guide formatting when displaying registers.
+
+
+ -- Architecture Function: void print_registers_info (struct gdbarch
+          *GDBARCH, struct ui_file *FILE, struct frame_info *FRAME, int
+          REGNUM, int ALL)
+     Define this function to print out one or all of the registers for
+     the GDB `info registers' command.  The default value is the
+     function `default_print_registers_info', which uses the register
+     type information (see `register_type' above) to determine how each
+     register should be printed.  Define a custom version of this
+     function for fuller control over how the registers are displayed.
+
+     The access should be for the specified architecture, GDBARCH, with
+     output to the file specified by the User Interface Independent
+     Output file handle, FILE (*note UI-Independent Output--the
+     `ui_out' Functions: UI-Independent Output.).
+
+     The registers should show their values in the frame specified by
+     FRAME.  If REGNUM is -1 and ALL is zero, then all the
+     "significant" registers should be shown (the implementer should
+     decide which registers are "significant"). Otherwise only the
+     value of the register specified by REGNUM should be output.  If
+     REGNUM is -1 and ALL is non-zero (true), then the value of all
+     registers should be shown.
+
+     By default `default_print_registers_info' prints one register per
+     line, and if ALL is zero omits floating-point registers.
+
+
+ -- Architecture Function: void print_float_info (struct gdbarch
+          *GDBARCH, struct ui_file *FILE, struct frame_info *FRAME,
+          const char *ARGS)
+     Define this function to provide output about the floating point
+     unit and registers for the GDB `info float' command respectively.
+     The default value is `NULL' (not defined), meaning no information
+     will be provided.
+
+     The GDBARCH and FILE and FRAME arguments have the same meaning as
+     in the `print_registers_info' function above. The string ARGS
+     contains any supplementary arguments to the `info float' command.
+
+     Define this function if the target supports floating point
+     operations.
+
+
+ -- Architecture Function: void print_vector_info (struct gdbarch
+          *GDBARCH, struct ui_file *FILE, struct frame_info *FRAME,
+          const char *ARGS)
+     Define this function to provide output about the vector unit and
+     registers for the GDB `info vector' command respectively.  The
+     default value is `NULL' (not defined), meaning no information will
+     be provided.
+
+     The GDBARCH, FILE and FRAME arguments have the same meaning as in
+     the `print_registers_info' function above.  The string ARGS
+     contains any supplementary arguments to the `info vector' command.
+
+     Define this function if the target supports vector operations.
+
+
+ -- Architecture Function: int register_reggroup_p (struct gdbarch
+          *GDBARCH, int REGNUM, struct reggroup *GROUP)
+     GDB groups registers into different categories (general, vector,
+     floating point etc).  This function, given a register, REGNUM, and
+     group, GROUP, returns 1 (true) if the register is in the group and
+     0 (false) otherwise.
+
+     The information should be for the specified architecture, GDBARCH
+
+     The default value is the function `default_register_reggroup_p'
+     which will do a reasonable job based on the type of the register
+     (see the function `register_type' above), with groups for general
+     purpose registers, floating point registers, vector registers and
+     raw (i.e not pseudo) registers.
+
+
+   ---------- Footnotes ----------
+
+   (1) Historically, GDB always had a concept of a frame pointer
+register, which could be accessed via the GDB variable, `$fp'.  That
+concept is now deprecated, recognizing that not all architectures have
+a frame pointer.  However if an architecture does have a frame pointer
+register, and defines a register or pseudo-register with the name
+`"fp"', then that register will be used as the value of the `$fp'
+variable.
+
+
+File: gdbint.info,  Node: Register and Memory Data,  Next: Register Caching,  Prev: Register Information Functions,  Up: Register Representation
+
+11.6.4 Using Different Register and Memory Data Representations
+---------------------------------------------------------------
+
+Some architectures have different representations of data objects,
+depending whether the object is held in a register or memory.  For
+example:
+
+   * The Alpha architecture can represent 32 bit integer values in
+     floating-point registers.
+
+   * The x86 architecture supports 80-bit floating-point registers.  The
+     `long double' data type occupies 96 bits in memory but only 80
+     bits when stored in a register.
+
+
+   In general, the register representation of a data type is determined
+by the architecture, or GDB's interface to the architecture, while the
+memory representation is determined by the Application Binary Interface.
+
+   For almost all data types on almost all architectures, the two
+representations are identical, and no special handling is needed.
+However, they do occasionally differ.  An architecture may define the
+following `struct gdbarch' functions to request conversions between the
+register and memory representations of a data type:
+
+ -- Architecture Function: int gdbarch_convert_register_p (struct
+          gdbarch *GDBARCH, int REG)
+     Return non-zero (true) if the representation of a data value
+     stored in this register may be different to the representation of
+     that same data value when stored in memory.  The default value is
+     `NULL' (undefined).
+
+     If this function is defined and returns non-zero, the `struct
+     gdbarch' functions `gdbarch_register_to_value' and
+     `gdbarch_value_to_register' (see below) should be used to perform
+     any necessary conversion.
+
+     If defined, this function should return zero for the register's
+     native type, when no conversion is necessary.
+
+ -- Architecture Function: void gdbarch_register_to_value (struct
+          gdbarch *GDBARCH, int REG, struct type *TYPE, char *FROM,
+          char *TO)
+     Convert the value of register number REG to a data object of type
+     TYPE.  The buffer at FROM holds the register's value in raw
+     format; the converted value should be placed in the buffer at TO.
+
+          _Note:_ `gdbarch_register_to_value' and
+          `gdbarch_value_to_register' take their REG and TYPE arguments
+          in different orders.
+
+     `gdbarch_register_to_value' should only be used with registers for
+     which the `gdbarch_convert_register_p' function returns a non-zero
+     value.
+
+
+ -- Architecture Function: void gdbarch_value_to_register (struct
+          gdbarch *GDBARCH, struct type *TYPE, int REG, char *FROM,
+          char *TO)
+     Convert a data value of type TYPE to register number REG' raw
+     format.
+
+          _Note:_ `gdbarch_register_to_value' and
+          `gdbarch_value_to_register' take their REG and TYPE arguments
+          in different orders.
+
+     `gdbarch_value_to_register' should only be used with registers for
+     which the `gdbarch_convert_register_p' function returns a non-zero
+     value.
+
+
+
+File: gdbint.info,  Node: Register Caching,  Prev: Register and Memory Data,  Up: Register Representation
+
+11.6.5 Register Caching
+-----------------------
+
+Caching of registers is used, so that the target does not need to be
+accessed and reanalyzed multiple times for each register in
+circumstances where the register value cannot have changed.
+
+   GDB provides `struct regcache', associated with a particular `struct
+gdbarch' to hold the cached values of the raw registers.  A set of
+functions is provided to access both the raw registers (with `raw' in
+their name) and the full set of cooked registers (with `cooked' in
+their name).  Functions are provided to ensure the register cache is
+kept synchronized with the values of the actual registers in the target.
+
+   Accessing registers through the `struct regcache' routines will
+ensure that the appropriate `struct gdbarch' functions are called when
+necessary to access the underlying target architecture.  In general
+users should use the "cooked" functions, since these will map to the
+"raw" functions automatically as appropriate.
+
+   The two key functions are `regcache_cooked_read' and
+`regcache_cooked_write' which read or write a register from or to a
+byte buffer (type `gdb_byte *').  For convenience the wrapper functions
+`regcache_cooked_read_signed', `regcache_cooked_read_unsigned',
+`regcache_cooked_write_signed' and `regcache_cooked_write_unsigned' are
+provided, which read or write the value using the buffer and convert to
+or from an integral value as appropriate.
+
+
+File: gdbint.info,  Node: Frame Interpretation,  Next: Inferior Call Setup,  Prev: Register Representation,  Up: Target Architecture Definition
+
+11.7 Frame Interpretation
+=========================
+
+* Menu:
+
+* All About Stack Frames::
+* Frame Handling Terminology::
+* Prologue Caches::
+* Functions and Variable to Analyze Frames::
+* Functions to Access Frame Data::
+* Analyzing Stacks---Frame Sniffers::
+
+
+File: gdbint.info,  Node: All About Stack Frames,  Next: Frame Handling Terminology,  Up: Frame Interpretation
+
+11.7.1 All About Stack Frames
+-----------------------------
+
+GDB needs to understand the stack on which local (automatic) variables
+are stored.  The area of the stack containing all the local variables
+for a function invocation is known as the "stack frame" for that
+function (or colloquially just as the "frame").  In turn the function
+that called the function will have its stack frame, and so on back
+through the chain of functions that have been called.
+
+   Almost all architectures have one register dedicated to point to the
+end of the stack (the "stack pointer").  Many have a second register
+which points to the start of the currently active stack frame (the
+"frame pointer").  The specific arrangements for an architecture are a
+key part of the ABI.
+
+   A diagram helps to explain this.  Here is a simple program to compute
+factorials:
+
+     #include <stdio.h>
+     int fact (int n)
+     {
+       if (0 == n)
+         {
+           return 1;
+         }
+       else
+         {
+           return n * fact (n - 1);
+         }
+     }
+
+     main ()
+     {
+       int i;
+
+       for (i = 0; i < 10; i++)
+         {
+           int   f = fact (i);
+           printf ("%d! = %d\n", i, f);
+         }
+     }
+
+   Consider the state of the stack when the code reaches line 6 after
+the main program has called `fact (3)'.  The chain of function calls
+will be `main ()', `fact (3)', `fact (2)', `fact (1)' and `fact (0)'.
+
+   In this illustration the stack is falling (as used for example by the
+OpenRISC 1000 ABI).  The stack pointer (SP) is at the end of the stack
+(lowest address) and the frame pointer (FP) is at the highest address
+in the current stack frame.  The following diagram shows how the stack
+looks.
+
+ [image src="stack_frame.png" text="                  ^    ->|            |
+Frame             |   |  |            |
+Number          - |   |  |============|       int fact (int n)
+               |  |   |  |   i = 3    |       {
+               |  |   |  |------------|         if (0 == n) {
+               |  |   |  |   f = ?    |           return  1;  <-------- PC
+  #4 main()   <   |   |  |------------|        }
+               |  |   |  |            |         else {
+               |  |  -+->|------------|   --->    return n * fact (n - 1);
+               |   -+-+--+-----o      |  |      }
+                =   | |  |============|  |    }
+               |    | |  |   n = 3    |  |
+               |    | |  |------------|  |    main ()
+  #3 fact (3) <     | |  |     o---------+-   {
+               |   -+-+->|------------|  | |    int  i;
+               |  | |  --+-----o      |  | |
+                = | |    |============|  | |    for (i = 0; i < 10; i++) {
+               |  | |    |   n = 2    |  |  ->    int  f = fact (i);
+               |  | |    |------------|  |        printf (\"%d! = %d\\n\", i , f);
+  #2 fact (2) <   | |    |     o------+--|      }
+               |  | |  ->|------------|  |    }
+               |  |  -+--+-----o      |  |
+                = |   |  |============|  |
+               |  |   |  |   n = 1    |  |
+               |  |   |  |------------|  |
+  #1 fact (1) <   |   |  |     o------+--|
+               |  |   |  |------------|  |
+               |   ---|--+-----o      |<-+------- FP
+                =     |  |============|  |                   |
+               |      |  |   n = 0    |  |                   |
+               |      |  |------------|  |                   |
+  #0 fact (0) <       |  |     o---------                    |
+               |      |  |------------|                      |
+               |       --+-----o      |<--------- SP         |
+                =        |============|                      |
+               |         |  Red Zone  |                      v
+               |         \\/\\/\\/\\/\\/\\/\\/                 Direction of
+  #-1         <          \\/\\/\\/\\/\\/\\/\\/                 stack growth
+               |         |            |
+" ]
+
+In each stack frame, offset 0 from the stack pointer is the frame
+pointer of the previous frame and offset 4 (this is illustrating a
+32-bit architecture) from the stack pointer is the return address.
+Local variables are indexed from the frame pointer, with negative
+indexes.  In the function `fact', offset -4 from the frame pointer is
+the argument N.  In the `main' function, offset -4 from the frame
+pointer is the local variable I and offset -8 from the frame pointer is
+the local variable F(1).
+
+   It is very easy to get confused when examining stacks.  GDB has
+terminology it uses rigorously throughout.  The stack frame of the
+function currently executing, or where execution stopped is numbered
+zero.  In this example frame #0 is the stack frame of the call to
+`fact (0)'.  The stack frame of its calling function (`fact (1)' in
+this case) is numbered #1 and so on back through the chain of calls.
+
+   The main GDB data structure describing frames is
+`struct frame_info'.  It is not used directly, but only via its
+accessor functions.  `frame_info' includes information about the
+registers in the frame and a pointer to the code of the function with
+which the frame is associated.  The entire stack is represented as a
+linked list of `frame_info' structs.
+
+   ---------- Footnotes ----------
+
+   (1) This is a simplified example for illustrative purposes only.
+Good optimizing compilers would not put anything on the stack for such
+simple functions.  Indeed they might eliminate the recursion and use of
+the stack entirely!
+
+
+File: gdbint.info,  Node: Frame Handling Terminology,  Next: Prologue Caches,  Prev: All About Stack Frames,  Up: Frame Interpretation
+
+11.7.2 Frame Handling Terminology
+---------------------------------
+
+It is easy to get confused when referencing stack frames.  GDB uses
+some precise terminology.
+
+   * "THIS" frame is the frame currently under consideration.
+
+   * The "NEXT" frame, also sometimes called the inner or newer frame
+     is the frame of the function called by the function of THIS frame.
+
+   * The "PREVIOUS" frame, also sometimes called the outer or older
+     frame is the frame of the function which called the function of
+     THIS frame.
+
+
+   So in the example in the previous section (*note All About Stack
+Frames: All About Stack Frames.), if THIS frame is #3 (the call to
+`fact (3)'), the NEXT frame is frame #2 (the call to `fact (2)') and
+the PREVIOUS frame is frame #4 (the call to `main ()').
+
+   The "innermost" frame is the frame of the current executing
+function, or where the program stopped, in this example, in the middle
+of the call to `fact (0))'.  It is always numbered frame #0.
+
+   The "base" of a frame is the address immediately before the start of
+the NEXT frame.  For a stack which grows down in memory (a "falling"
+stack) this will be the lowest address and for a stack which grows up
+in memory (a "rising" stack) this will be the highest address in the
+frame.
+
+   GDB functions to analyze the stack are typically given a pointer to
+the NEXT frame to determine information about THIS frame.  Information
+about THIS frame includes data on where the registers of the PREVIOUS
+frame are stored in this stack frame.  In this example the frame
+pointer of the PREVIOUS frame is stored at offset 0 from the stack
+pointer of THIS frame.
+
+   The process whereby a function is given a pointer to the NEXT frame
+to work out information about THIS frame is referred to as "unwinding".
+The GDB functions involved in this typically include unwind in their
+name.
+
+   The process of analyzing a target to determine the information that
+should go in struct frame_info is called "sniffing".  The functions
+that carry this out are called sniffers and typically include sniffer
+in their name.  More than one sniffer may be required to extract all
+the information for a particular frame.
+
+   Because so many functions work using the NEXT frame, there is an
+issue about addressing the innermost frame--it has no NEXT frame.  To
+solve this GDB creates a dummy frame #-1, known as the "sentinel" frame.
+
+
+File: gdbint.info,  Node: Prologue Caches,  Next: Functions and Variable to Analyze Frames,  Prev: Frame Handling Terminology,  Up: Frame Interpretation
+
+11.7.3 Prologue Caches
+----------------------
+
+All the frame sniffing functions typically examine the code at the
+start of the corresponding function, to determine the state of
+registers.  The ABI will save old values and set new values of key
+registers at the start of each function in what is known as the
+function "prologue".
+
+   For any particular stack frame this data does not change, so all the
+standard unwinding functions, in addition to receiving a pointer to the
+NEXT frame as their first argument, receive a pointer to a "prologue
+cache" as their second argument.  This can be used to store values
+associated with a particular frame, for reuse on subsequent calls
+involving the same frame.
+
+   It is up to the user to define the structure used (it is a `void *'
+pointer) and arrange allocation and deallocation of storage.  However
+for general use, GDB provides `struct trad_frame_cache', with a set of
+accessor routines.  This structure holds the stack and code address of
+THIS frame, the base address of the frame, a pointer to the struct
+`frame_info' for the NEXT frame and details of where the registers of
+the PREVIOUS frame may be found in THIS frame.
+
+   Typically the first time any sniffer function is called with NEXT
+frame, the prologue sniffer for THIS frame will be `NULL'.  The sniffer
+will analyze the frame, allocate a prologue cache structure and
+populate it.  Subsequent calls using the same NEXT frame will pass in
+this prologue cache, so the data can be returned with no additional
+analysis.
+
+
+File: gdbint.info,  Node: Functions and Variable to Analyze Frames,  Next: Functions to Access Frame Data,  Prev: Prologue Caches,  Up: Frame Interpretation
+
+11.7.4 Functions and Variable to Analyze Frames
+-----------------------------------------------
+
+These struct `gdbarch' functions and variable should be defined to
+provide analysis of the stack frame and allow it to be adjusted as
+required.
+
+ -- Architecture Function: CORE_ADDR skip_prologue (struct gdbarch
+          *GDBARCH, CORE_ADDR PC)
+     The prologue of a function is the code at the beginning of the
+     function which sets up the stack frame, saves the return address
+     etc.  The code representing the behavior of the function starts
+     after the prologue.
+
+     This function skips past the prologue of a function if the program
+     counter, PC, is within the prologue of a function.  The result is
+     the program counter immediately after the prologue.  With modern
+     optimizing compilers, this may be a far from trivial exercise.
+     However the required information may be within the binary as
+     DWARF2 debugging information, making the job much easier.
+
+     The default value is `NULL' (not defined).  This function should
+     always be provided, but can take advantage of DWARF2 debugging
+     information, if that is available.
+
+
+ -- Architecture Function: int inner_than (CORE_ADDR LHS, CORE_ADDR RHS)
+     Given two frame or stack pointers, return non-zero (true) if the
+     first represents the "inner" stack frame and 0 (false) otherwise.
+     This is used to determine whether the target has a stack which
+     grows up in memory (rising stack) or grows down in memory (falling
+     stack).  *Note All About Stack Frames: All About Stack Frames, for
+     an explanation of "inner" frames.
+
+     The default value of this function is `NULL' and it should always
+     be defined.  However for almost all architectures one of the
+     built-in functions can be used: `core_addr_lessthan' (for stacks
+     growing down in memory) or `core_addr_greaterthan' (for stacks
+     growing up in memory).
+
+
+ -- Architecture Function: CORE_ADDR frame_align (struct gdbarch
+          *GDBARCH, CORE_ADDR ADDRESS)
+     The architecture may have constraints on how its frames are
+     aligned.  For example the OpenRISC 1000 ABI requires stack frames
+     to be double-word aligned, but 32-bit versions of the architecture
+     allocate single-word values to the stack.  Thus extra padding may
+     be needed at the end of a stack frame.
+
+     Given a proposed address for the stack pointer, this function
+     returns a suitably aligned address (by expanding the stack frame).
+
+     The default value is `NULL' (undefined).  This function should be
+     defined for any architecture where it is possible the stack could
+     become misaligned.  The utility functions `align_down' (for falling
+     stacks) and `align_up' (for rising stacks) will facilitate the
+     implementation of this function.
+
+
+ -- Architecture Variable: int frame_red_zone_size
+     Some ABIs reserve space beyond the end of the stack for use by leaf
+     functions without prologue or epilogue or by exception handlers
+     (for example the OpenRISC 1000).
+
+     This is known as a "red zone" (AMD terminology).  The AMD64 (nee
+     x86-64) ABI documentation refers to the "red zone" when describing
+     this scratch area.
+
+     The default value is 0.  Set this field if the architecture has
+     such a red zone.  The value must be aligned as required by the ABI
+     (see `frame_align' above for an explanation of stack frame
+     alignment).
+
+
+
+File: gdbint.info,  Node: Functions to Access Frame Data,  Next: Analyzing Stacks---Frame Sniffers,  Prev: Functions and Variable to Analyze Frames,  Up: Frame Interpretation
+
+11.7.5 Functions to Access Frame Data
+-------------------------------------
+
+These functions provide access to key registers and arguments in the
+stack frame.
+
+ -- Architecture Function: CORE_ADDR unwind_pc (struct gdbarch
+          *GDBARCH, struct frame_info *NEXT_FRAME)
+     This function is given a pointer to the NEXT stack frame (*note
+     All About Stack Frames: All About Stack Frames, for how frames are
+     represented) and returns the value of the program counter in the
+     PREVIOUS frame (i.e. the frame of the function that called THIS
+     one).  This is commonly referred to as the "return address".
+
+     The implementation, which must be frame agnostic (work with any
+     frame), is typically no more than:
+
+          ULONGEST pc;
+          pc = frame_unwind_register_unsigned (next_frame, ARCH_PC_REGNUM);
+          return gdbarch_addr_bits_remove (gdbarch, pc);
+
+
+ -- Architecture Function: CORE_ADDR unwind_sp (struct gdbarch
+          *GDBARCH, struct frame_info *NEXT_FRAME)
+     This function is given a pointer to the NEXT stack frame (*note
+     All About Stack Frames: All About Stack Frames. for how frames are
+     represented) and returns the value of the stack pointer in the
+     PREVIOUS frame (i.e. the frame of the function that called THIS
+     one).
+
+     The implementation, which must be frame agnostic (work with any
+     frame), is typically no more than:
+
+          ULONGEST sp;
+          sp = frame_unwind_register_unsigned (next_frame, ARCH_SP_REGNUM);
+          return gdbarch_addr_bits_remove (gdbarch, sp);
+
+
+ -- Architecture Function: int frame_num_args (struct gdbarch *GDBARCH,
+          struct frame_info *THIS_FRAME)
+     This function is given a pointer to THIS stack frame (*note All
+     About Stack Frames: All About Stack Frames. for how frames are
+     represented), and returns the number of arguments that are being
+     passed, or -1 if not known.
+
+     The default value is `NULL' (undefined), in which case the number
+     of arguments passed on any stack frame is always unknown.  For many
+     architectures this will be a suitable default.
+
+
+
+File: gdbint.info,  Node: Analyzing Stacks---Frame Sniffers,  Prev: Functions to Access Frame Data,  Up: Frame Interpretation
+
+11.7.6 Analyzing Stacks--Frame Sniffers
+---------------------------------------
+
+When a program stops, GDB needs to construct the chain of struct
+`frame_info' representing the state of the stack using appropriate
+"sniffers".
+
+   Each architecture requires appropriate sniffers, but they do not form
+entries in `struct gdbarch', since more than one sniffer may be
+required and a sniffer may be suitable for more than one
+`struct gdbarch'.  Instead sniffers are associated with architectures
+using the following functions.
+
+   * `frame_unwind_append_sniffer' is used to add a new sniffer to
+     analyze THIS frame when given a pointer to the NEXT frame.
+
+   * `frame_base_append_sniffer' is used to add a new sniffer which can
+     determine information about the base of a stack frame.
+
+   * `frame_base_set_default' is used to specify the default base
+     sniffer.
+
+
+   These functions all take a reference to `struct gdbarch', so they
+are associated with a specific architecture.  They are usually called
+in the `gdbarch' initialization function, after the `gdbarch' struct
+has been set up.  Unless a default has been set, the most recently
+appended sniffer will be tried first.
+
+   The main frame unwinding sniffer (as set by
+`frame_unwind_append_sniffer)' returns a structure specifying a set of
+sniffing functions:
+
+     struct frame_unwind
+     {
+        enum frame_type            type;
+        frame_this_id_ftype       *this_id;
+        frame_prev_register_ftype *prev_register;
+        const struct frame_data   *unwind_data;
+        frame_sniffer_ftype       *sniffer;
+        frame_prev_pc_ftype       *prev_pc;
+        frame_dealloc_cache_ftype *dealloc_cache;
+     };
+
+   The `type' field indicates the type of frame this sniffer can
+handle: normal, dummy (*note Functions Creating Dummy Frames: Functions
+Creating Dummy Frames.), signal handler or sentinel.  Signal handlers
+sometimes have their own simplified stack structure for efficiency, so
+may need their own handlers.
+
+   The `unwind_data' field holds additional information which may be
+relevant to particular types of frame.  For example it may hold
+additional information for signal handler frames.
+
+   The remaining fields define functions that yield different types of
+information when given a pointer to the NEXT stack frame.  Not all
+functions need be provided.  If an entry is `NULL', the next sniffer
+will be tried instead.
+
+   * `this_id' determines the stack pointer and function (code entry
+     point) for THIS stack frame.
+
+   * `prev_register' determines where the values of registers for the
+     PREVIOUS stack frame are stored in THIS stack frame.
+
+   * `sniffer' takes a look at THIS frame's registers to determine if
+     this is the appropriate unwinder.
+
+   * `prev_pc' determines the program counter for THIS frame.  Only
+     needed if the program counter is not an ordinary register (*note
+     Functions and Variables Specifying the Register Architecture:
+     Register Architecture Functions & Variables.).
+
+   * `dealloc_cache' frees any additional memory associated with the
+     prologue cache for this frame (*note Prologue Caches: Prologue
+     Caches.).
+
+
+   In general it is only the `this_id' and `prev_register' fields that
+need be defined for custom sniffers.
+
+   The frame base sniffer is much simpler.  It is a
+`struct frame_base', which refers to the corresponding `frame_unwind'
+struct and whose fields refer to functions yielding various addresses
+within the frame.
+
+     struct frame_base
+     {
+        const struct frame_unwind *unwind;
+        frame_this_base_ftype     *this_base;
+        frame_this_locals_ftype   *this_locals;
+        frame_this_args_ftype     *this_args;
+     };
+
+   All the functions referred to take a pointer to the NEXT frame as
+argument. The function referred to by `this_base' returns the base
+address of THIS frame, the function referred to by `this_locals'
+returns the base address of local variables in THIS frame and the
+function referred to by `this_args' returns the base address of the
+function arguments in this frame.
+
+   As described above, the base address of a frame is the address
+immediately before the start of the NEXT frame.  For a falling stack,
+this is the lowest address in the frame and for a rising stack it is
+the highest address in the frame.  For most architectures the same
+address is also the base address for local variables and arguments, in
+which case the same function can be used for all three entries(1).
+
+   ---------- Footnotes ----------
+
+   (1) It is worth noting that if it cannot be determined in any other
+way (for example by there being a register with the name `"fp"'), then
+the result of the `this_base' function will be used as the value of the
+frame pointer variable `$fp' in GDB.  This is very often not correct
+(for example with the OpenRISC 1000, this value is the stack pointer,
+`$sp').  In this case a register (raw or pseudo) with the name `"fp"'
+should be defined.  It will be used in preference as the value of `$fp'.
+
+
+File: gdbint.info,  Node: Inferior Call Setup,  Next: Adding support for debugging core files,  Prev: Frame Interpretation,  Up: Target Architecture Definition
+
+11.8 Inferior Call Setup
+========================
+
+* Menu:
+
+* About Dummy Frames::
+* Functions Creating Dummy Frames::
+
+
+File: gdbint.info,  Node: About Dummy Frames,  Next: Functions Creating Dummy Frames,  Up: Inferior Call Setup
+
+11.8.1 About Dummy Frames
+-------------------------
+
+GDB can call functions in the target code (for example by using the
+`call' or `print' commands).  These functions may be breakpointed, and
+it is essential that if a function does hit a breakpoint, commands like
+`backtrace' work correctly.
+
+   This is achieved by making the stack look as though the function had
+been called from the point where GDB had previously stopped.  This
+requires that GDB can set up stack frames appropriate for such function
+calls.
+
+
+File: gdbint.info,  Node: Functions Creating Dummy Frames,  Prev: About Dummy Frames,  Up: Inferior Call Setup
+
+11.8.2 Functions Creating Dummy Frames
+--------------------------------------
+
+The following functions provide the functionality to set up such
+"dummy" stack frames.
+
+ -- Architecture Function: CORE_ADDR push_dummy_call (struct gdbarch
+          *GDBARCH, struct value *FUNCTION, struct regcache *REGCACHE,
+          CORE_ADDR BP_ADDR, int NARGS, struct value **ARGS, CORE_ADDR
+          SP, int STRUCT_RETURN, CORE_ADDR STRUCT_ADDR)
+     This function sets up a dummy stack frame for the function about
+     to be called.  `push_dummy_call' is given the arguments to be
+     passed and must copy them into registers or push them on to the
+     stack as appropriate for the ABI.
+
+     FUNCTION is a pointer to the function that will be called and
+     REGCACHE the register cache from which values should be obtained.
+     BP_ADDR is the address to which the function should return (which
+     is breakpointed, so GDB can regain control, hence the name).
+     NARGS is the number of arguments to pass and ARGS an array
+     containing the argument values.  STRUCT_RETURN is non-zero (true)
+     if the function returns a structure, and if so STRUCT_ADDR is the
+     address in which the structure should be returned.
+
+     After calling this function, GDB will pass control to the target
+     at the address of the function, which will find the stack and
+     registers set up just as expected.
+
+     The default value of this function is `NULL' (undefined).  If the
+     function is not defined, then GDB will not allow the user to call
+     functions within the target being debugged.
+
+
+ -- Architecture Function: struct frame_id unwind_dummy_id (struct
+          gdbarch *GDBARCH, struct frame_info *NEXT_FRAME)
+     This is the inverse of `push_dummy_call' which restores the stack
+     pointer and program counter after a call to evaluate a function
+     using a dummy stack frame.  The result is a `struct frame_id',
+     which contains the value of the stack pointer and program counter
+     to be used.
+
+     The NEXT frame pointer is provided as argument, NEXT_FRAME.  THIS
+     frame is the frame of the dummy function, which can be unwound, to
+     yield the required stack pointer and program counter from the
+     PREVIOUS frame.
+
+     The default value is `NULL' (undefined).  If `push_dummy_call' is
+     defined, then this function should also be defined.
+
+
+ -- Architecture Function: CORE_ADDR push_dummy_code (struct gdbarch
+          *GDBARCH, CORE_ADDR SP, CORE_ADDR FUNADDR, struct value
+          **ARGS, int NARGS, struct type *VALUE_TYPE, CORE_ADDR
+          *REAL_PC, CORE_ADDR *BP_ADDR, struct regcache *REGCACHE)
+     If this function is not defined (its default value is `NULL'), a
+     dummy call will use the entry point of the currently loaded code
+     on the target as its return address.  A temporary breakpoint will
+     be set there, so the location must be writable and have room for a
+     breakpoint.
+
+     It is possible that this default is not suitable.  It might not be
+     writable (in ROM possibly), or the ABI might require code to be
+     executed on return from a call to unwind the stack before the
+     breakpoint is encountered.
+
+     If either of these is the case, then push_dummy_code should be
+     defined to push an instruction sequence onto the end of the stack
+     to which the dummy call should return.
+
+     The arguments are essentially the same as those to
+     `push_dummy_call'.  However the function is provided with the type
+     of the function result, VALUE_TYPE, BP_ADDR is used to return a
+     value (the address at which the breakpoint instruction should be
+     inserted) and REAL PC is used to specify the resume address when
+     starting the call sequence.  The function should return the
+     updated innermost stack address.
+
+          _Note:_ This does require that code in the stack can be
+          executed.  Some Harvard architectures may not allow this.
+
+
+
+File: gdbint.info,  Node: Adding support for debugging core files,  Next: Defining Other Architecture Features,  Prev: Inferior Call Setup,  Up: Target Architecture Definition
+
+11.9 Adding support for debugging core files
+============================================
+
+The prerequisite for adding core file support in GDB is to have core
+file support in BFD.
+
+   Once BFD support is available, writing the apropriate
+`regset_from_core_section' architecture function should be all that is
+needed in order to add support for core files in GDB.
+
+
+File: gdbint.info,  Node: Defining Other Architecture Features,  Next: Adding a New Target,  Prev: Adding support for debugging core files,  Up: Target Architecture Definition
+
+11.10 Defining Other Architecture Features
+==========================================
+
+This section describes other functions and values in `gdbarch',
+together with some useful macros, that you can use to define the target
+architecture.
+
+`CORE_ADDR gdbarch_addr_bits_remove (GDBARCH, ADDR)'
+     If a raw machine instruction address includes any bits that are not
+     really part of the address, then this function is used to zero
+     those bits in ADDR.  This is only used for addresses of
+     instructions, and even then not in all contexts.
+
+     For example, the two low-order bits of the PC on the
+     Hewlett-Packard PA 2.0 architecture contain the privilege level of
+     the corresponding instruction.  Since instructions must always be
+     aligned on four-byte boundaries, the processor masks out these
+     bits to generate the actual address of the instruction.
+     `gdbarch_addr_bits_remove' would then for example look like that:
+          arch_addr_bits_remove (CORE_ADDR addr)
+          {
+            return (addr &= ~0x3);
+          }
+
+`int address_class_name_to_type_flags (GDBARCH, NAME, TYPE_FLAGS_PTR)'
+     If NAME is a valid address class qualifier name, set the `int'
+     referenced by TYPE_FLAGS_PTR to the mask representing the qualifier
+     and return 1.  If NAME is not a valid address class qualifier name,
+     return 0.
+
+     The value for TYPE_FLAGS_PTR should be one of
+     `TYPE_FLAG_ADDRESS_CLASS_1', `TYPE_FLAG_ADDRESS_CLASS_2', or
+     possibly some combination of these values or'd together.  *Note
+     Address Classes: Target Architecture Definition.
+
+`int address_class_name_to_type_flags_p (GDBARCH)'
+     Predicate which indicates whether
+     `address_class_name_to_type_flags' has been defined.
+
+`int gdbarch_address_class_type_flags (GDBARCH, BYTE_SIZE, DWARF2_ADDR_CLASS)'
+     Given a pointers byte size (as described by the debug information)
+     and the possible `DW_AT_address_class' value, return the type flags
+     used by GDB to represent this address class.  The value returned
+     should be one of `TYPE_FLAG_ADDRESS_CLASS_1',
+     `TYPE_FLAG_ADDRESS_CLASS_2', or possibly some combination of these
+     values or'd together.  *Note Address Classes: Target Architecture
+     Definition.
+
+`int gdbarch_address_class_type_flags_p (GDBARCH)'
+     Predicate which indicates whether
+     `gdbarch_address_class_type_flags_p' has been defined.
+
+`const char *gdbarch_address_class_type_flags_to_name (GDBARCH, TYPE_FLAGS)'
+     Return the name of the address class qualifier associated with the
+     type flags given by TYPE_FLAGS.
+
+`int gdbarch_address_class_type_flags_to_name_p (GDBARCH)'
+     Predicate which indicates whether
+     `gdbarch_address_class_type_flags_to_name' has been defined.
+     *Note Address Classes: Target Architecture Definition.
+
+`void gdbarch_address_to_pointer (GDBARCH, TYPE, BUF, ADDR)'
+     Store in BUF a pointer of type TYPE representing the address ADDR,
+     in the appropriate format for the current architecture.  This
+     function may safely assume that TYPE is either a pointer or a C++
+     reference type.  *Note Pointers Are Not Always Addresses: Target
+     Architecture Definition.
+
+`int gdbarch_believe_pcc_promotion (GDBARCH)'
+     Used to notify if the compiler promotes a `short' or `char'
+     parameter to an `int', but still reports the parameter as its
+     original type, rather than the promoted type.
+
+`gdbarch_bits_big_endian (GDBARCH)'
+     This is used if the numbering of bits in the targets does *not*
+     match the endianism of the target byte order.  A value of 1 means
+     that the bits are numbered in a big-endian bit order, 0 means
+     little-endian.
+
+`set_gdbarch_bits_big_endian (GDBARCH, BITS_BIG_ENDIAN)'
+     Calling set_gdbarch_bits_big_endian with a value of 1 indicates
+     that the bits in the target are numbered in a big-endian bit
+     order, 0 indicates little-endian.
+
+`BREAKPOINT'
+     This is the character array initializer for the bit pattern to put
+     into memory where a breakpoint is set.  Although it's common to
+     use a trap instruction for a breakpoint, it's not required; for
+     instance, the bit pattern could be an invalid instruction.  The
+     breakpoint must be no longer than the shortest instruction of the
+     architecture.
+
+     `BREAKPOINT' has been deprecated in favor of
+     `gdbarch_breakpoint_from_pc'.
+
+`BIG_BREAKPOINT'
+`LITTLE_BREAKPOINT'
+     Similar to BREAKPOINT, but used for bi-endian targets.
+
+     `BIG_BREAKPOINT' and `LITTLE_BREAKPOINT' have been deprecated in
+     favor of `gdbarch_breakpoint_from_pc'.
+
+`const gdb_byte *gdbarch_breakpoint_from_pc (GDBARCH, PCPTR, LENPTR)'
+     Use the program counter to determine the contents and size of a
+     breakpoint instruction.  It returns a pointer to a static string
+     of bytes that encode a breakpoint instruction, stores the length
+     of the string to `*LENPTR', and adjusts the program counter (if
+     necessary) to point to the actual memory location where the
+     breakpoint should be inserted.  May return `NULL' to indicate that
+     software breakpoints are not supported.
+
+     Although it is common to use a trap instruction for a breakpoint,
+     it's not required; for instance, the bit pattern could be an
+     invalid instruction.  The breakpoint must be no longer than the
+     shortest instruction of the architecture.
+
+     Provided breakpoint bytes can be also used by
+     `bp_loc_is_permanent' to detect permanent breakpoints.
+     `gdbarch_breakpoint_from_pc' should return an unchanged memory
+     copy if it was called for a location with permanent breakpoint as
+     some architectures use breakpoint instructions containing
+     arbitrary parameter value.
+
+     Replaces all the other BREAKPOINT macros.
+
+`int gdbarch_memory_insert_breakpoint (GDBARCH, BP_TGT)'
+`gdbarch_memory_remove_breakpoint (GDBARCH, BP_TGT)'
+     Insert or remove memory based breakpoints.  Reasonable defaults
+     (`default_memory_insert_breakpoint' and
+     `default_memory_remove_breakpoint' respectively) have been
+     provided so that it is not necessary to set these for most
+     architectures.  Architectures which may want to set
+     `gdbarch_memory_insert_breakpoint' and
+     `gdbarch_memory_remove_breakpoint' will likely have instructions
+     that are oddly sized or are not stored in a conventional manner.
+
+     It may also be desirable (from an efficiency standpoint) to define
+     custom breakpoint insertion and removal routines if
+     `gdbarch_breakpoint_from_pc' needs to read the target's memory for
+     some reason.
+
+`CORE_ADDR gdbarch_adjust_breakpoint_address (GDBARCH, BPADDR)'
+     Given an address at which a breakpoint is desired, return a
+     breakpoint address adjusted to account for architectural
+     constraints on breakpoint placement.  This method is not needed by
+     most targets.
+
+     The FR-V target (see `frv-tdep.c') requires this method.  The FR-V
+     is a VLIW architecture in which a number of RISC-like instructions
+     are grouped (packed) together into an aggregate instruction or
+     instruction bundle.  When the processor executes one of these
+     bundles, the component instructions are executed in parallel.
+
+     In the course of optimization, the compiler may group instructions
+     from distinct source statements into the same bundle.  The line
+     number information associated with one of the latter statements
+     will likely refer to some instruction other than the first one in
+     the bundle.  So, if the user attempts to place a breakpoint on one
+     of these latter statements, GDB must be careful to _not_ place the
+     break instruction on any instruction other than the first one in
+     the bundle.  (Remember though that the instructions within a
+     bundle execute in parallel, so the _first_ instruction is the
+     instruction at the lowest address and has nothing to do with
+     execution order.)
+
+     The FR-V's `gdbarch_adjust_breakpoint_address' method will adjust a
+     breakpoint's address by scanning backwards for the beginning of
+     the bundle, returning the address of the bundle.
+
+     Since the adjustment of a breakpoint may significantly alter a
+     user's expectation, GDB prints a warning when an adjusted
+     breakpoint is initially set and each time that that breakpoint is
+     hit.
+
+`int gdbarch_call_dummy_location (GDBARCH)'
+     See the file `inferior.h'.
+
+     This method has been replaced by `gdbarch_push_dummy_code' (*note
+     gdbarch_push_dummy_code::).
+
+`int gdbarch_cannot_fetch_register (GDBARCH, REGUM)'
+     This function should return nonzero if REGNO cannot be fetched
+     from an inferior process.
+
+`int gdbarch_cannot_store_register (GDBARCH, REGNUM)'
+     This function should return nonzero if REGNO should not be written
+     to the target.  This is often the case for program counters,
+     status words, and other special registers.  This function returns
+     0 as default so that GDB will assume that all registers may be
+     written.
+
+`int gdbarch_convert_register_p (GDBARCH, REGNUM, struct type *TYPE)'
+     Return non-zero if register REGNUM represents data values of type
+     TYPE in a non-standard form.  *Note Using Different Register and
+     Memory Data Representations: Target Architecture Definition.
+
+`int gdbarch_fp0_regnum (GDBARCH)'
+     This function returns the number of the first floating point
+     register, if the machine has such registers.  Otherwise, it
+     returns -1.
+
+`CORE_ADDR gdbarch_decr_pc_after_break (GDBARCH)'
+     This function shall return the amount by which to decrement the PC
+     after the program encounters a breakpoint.  This is often the
+     number of bytes in `BREAKPOINT', though not always.  For most
+     targets this value will be 0.
+
+`DISABLE_UNSETTABLE_BREAK (ADDR)'
+     If defined, this should evaluate to 1 if ADDR is in a shared
+     library in which breakpoints cannot be set and so should be
+     disabled.
+
+`int gdbarch_dwarf2_reg_to_regnum (GDBARCH, DWARF2_REGNR)'
+     Convert DWARF2 register number DWARF2_REGNR into GDB regnum.  If
+     not defined, no conversion will be performed.
+
+`int gdbarch_ecoff_reg_to_regnum (GDBARCH, ECOFF_REGNR)'
+     Convert ECOFF register number  ECOFF_REGNR into GDB regnum.  If
+     not defined, no conversion will be performed.
+
+`GCC_COMPILED_FLAG_SYMBOL'
+`GCC2_COMPILED_FLAG_SYMBOL'
+     If defined, these are the names of the symbols that GDB will look
+     for to detect that GCC compiled the file.  The default symbols are
+     `gcc_compiled.' and `gcc2_compiled.', respectively.  (Currently
+     only defined for the Delta 68.)
+
+`gdbarch_get_longjmp_target'
+     This function determines the target PC address that `longjmp' will
+     jump to, assuming that we have just stopped at a `longjmp'
+     breakpoint.  It takes a `CORE_ADDR *' as argument, and stores the
+     target PC value through this pointer.  It examines the current
+     state of the machine as needed, typically by using a
+     manually-determined offset into the `jmp_buf'.  (While we might
+     like to get the offset from the target's `jmpbuf.h', that header
+     file cannot be assumed to be available when building a
+     cross-debugger.)
+
+`DEPRECATED_IBM6000_TARGET'
+     Shows that we are configured for an IBM RS/6000 system.  This
+     conditional should be eliminated (FIXME) and replaced by
+     feature-specific macros.  It was introduced in haste and we are
+     repenting at leisure.
+
+`I386_USE_GENERIC_WATCHPOINTS'
+     An x86-based target can define this to use the generic x86
+     watchpoint support; see *Note I386_USE_GENERIC_WATCHPOINTS:
+     Algorithms.
+
+`gdbarch_in_function_epilogue_p (GDBARCH, ADDR)'
+     Returns non-zero if the given ADDR is in the epilogue of a
+     function.  The epilogue of a function is defined as the part of a
+     function where the stack frame of the function already has been
+     destroyed up to the final `return from function call' instruction.
+
+`int gdbarch_in_solib_return_trampoline (GDBARCH, PC, NAME)'
+     Define this function to return nonzero if the program is stopped
+     in the trampoline that returns from a shared library.
+
+`target_so_ops.in_dynsym_resolve_code (PC)'
+     Define this to return nonzero if the program is stopped in the
+     dynamic linker.
+
+`SKIP_SOLIB_RESOLVER (PC)'
+     Define this to evaluate to the (nonzero) address at which execution
+     should continue to get past the dynamic linker's symbol resolution
+     function.  A zero value indicates that it is not important or
+     necessary to set a breakpoint to get through the dynamic linker
+     and that single stepping will suffice.
+
+`CORE_ADDR gdbarch_integer_to_address (GDBARCH, TYPE, BUF)'
+     Define this when the architecture needs to handle non-pointer to
+     address conversions specially.  Converts that value to an address
+     according to the current architectures conventions.
+
+     _Pragmatics: When the user copies a well defined expression from
+     their source code and passes it, as a parameter, to GDB's `print'
+     command, they should get the same value as would have been
+     computed by the target program.  Any deviation from this rule can
+     cause major confusion and annoyance, and needs to be justified
+     carefully.  In other words, GDB doesn't really have the freedom to
+     do these conversions in clever and useful ways.  It has, however,
+     been pointed out that users aren't complaining about how GDB casts
+     integers to pointers; they are complaining that they can't take an
+     address from a disassembly listing and give it to `x/i'.  Adding
+     an architecture method like `gdbarch_integer_to_address' certainly
+     makes it possible for GDB to "get it right" in all circumstances._
+
+     *Note Pointers Are Not Always Addresses: Target Architecture
+     Definition.
+
+`CORE_ADDR gdbarch_pointer_to_address (GDBARCH, TYPE, BUF)'
+     Assume that BUF holds a pointer of type TYPE, in the appropriate
+     format for the current architecture.  Return the byte address the
+     pointer refers to.  *Note Pointers Are Not Always Addresses:
+     Target Architecture Definition.
+
+`void gdbarch_register_to_value(GDBARCH, FRAME, REGNUM, TYPE, FUR)'
+     Convert the raw contents of register REGNUM into a value of type
+     TYPE.  *Note Using Different Register and Memory Data
+     Representations: Target Architecture Definition.
+
+`REGISTER_CONVERT_TO_VIRTUAL(REG, TYPE, FROM, TO)'
+     Convert the value of register REG from its raw form to its virtual
+     form.  *Note Raw and Virtual Register Representations: Target
+     Architecture Definition.
+
+`REGISTER_CONVERT_TO_RAW(TYPE, REG, FROM, TO)'
+     Convert the value of register REG from its virtual form to its raw
+     form.  *Note Raw and Virtual Register Representations: Target
+     Architecture Definition.
+
+`const struct regset *regset_from_core_section (struct gdbarch * GDBARCH, const char * SECT_NAME, size_t SECT_SIZE)'
+     Return the appropriate register set for a core file section with
+     name SECT_NAME and size SECT_SIZE.
+
+`SOFTWARE_SINGLE_STEP_P()'
+     Define this as 1 if the target does not have a hardware single-step
+     mechanism.  The macro `SOFTWARE_SINGLE_STEP' must also be defined.
+
+`SOFTWARE_SINGLE_STEP(SIGNAL, INSERT_BREAKPOINTS_P)'
+     A function that inserts or removes (depending on
+     INSERT_BREAKPOINTS_P) breakpoints at each possible destinations of
+     the next instruction.  See `sparc-tdep.c' and `rs6000-tdep.c' for
+     examples.
+
+`set_gdbarch_sofun_address_maybe_missing (GDBARCH, SET)'
+     Somebody clever observed that, the more actual addresses you have
+     in the debug information, the more time the linker has to spend
+     relocating them.  So whenever there's some other way the debugger
+     could find the address it needs, you should omit it from the debug
+     info, to make linking faster.
+
+     Calling `set_gdbarch_sofun_address_maybe_missing' with a non-zero
+     argument SET indicates that a particular set of hacks of this sort
+     are in use, affecting `N_SO' and `N_FUN' entries in stabs-format
+     debugging information.  `N_SO' stabs mark the beginning and ending
+     addresses of compilation units in the text segment.  `N_FUN' stabs
+     mark the starts and ends of functions.
+
+     In this case, GDB assumes two things:
+
+        * `N_FUN' stabs have an address of zero.  Instead of using those
+          addresses, you should find the address where the function
+          starts by taking the function name from the stab, and then
+          looking that up in the minsyms (the linker/assembler symbol
+          table).  In other words, the stab has the name, and the
+          linker/assembler symbol table is the only place that carries
+          the address.
+
+        * `N_SO' stabs have an address of zero, too.  You just look at
+          the `N_FUN' stabs that appear before and after the `N_SO'
+          stab, and guess the starting and ending addresses of the
+          compilation unit from them.
+
+`int gdbarch_stabs_argument_has_addr (GDBARCH, TYPE)'
+     Define this function to return nonzero if a function argument of
+     type TYPE is passed by reference instead of value.
+
+`CORE_ADDR gdbarch_push_dummy_call (GDBARCH, FUNCTION, REGCACHE, BP_ADDR, NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR)'
+     Define this to push the dummy frame's call to the inferior
+     function onto the stack.  In addition to pushing NARGS, the code
+     should push STRUCT_ADDR (when STRUCT_RETURN is non-zero), and the
+     return address (BP_ADDR).
+
+     FUNCTION is a pointer to a `struct value'; on architectures that
+     use function descriptors, this contains the function descriptor
+     value.
+
+     Returns the updated top-of-stack pointer.
+
+`CORE_ADDR gdbarch_push_dummy_code (GDBARCH, SP, FUNADDR, USING_GCC, ARGS, NARGS, VALUE_TYPE, REAL_PC, BP_ADDR, REGCACHE)'
+     Given a stack based call dummy, push the instruction sequence
+     (including space for a breakpoint) to which the called function
+     should return.
+
+     Set BP_ADDR to the address at which the breakpoint instruction
+     should be inserted, REAL_PC to the resume address when starting
+     the call sequence, and return the updated inner-most stack address.
+
+     By default, the stack is grown sufficient to hold a frame-aligned
+     (*note frame_align::) breakpoint, BP_ADDR is set to the address
+     reserved for that breakpoint, and REAL_PC set to FUNADDR.
+
+     This method replaces `gdbarch_call_dummy_location (GDBARCH)'.
+
+`int gdbarch_sdb_reg_to_regnum (GDBARCH, SDB_REGNR)'
+     Use this function to convert sdb register SDB_REGNR into GDB
+     regnum.  If not defined, no conversion will be done.
+
+`enum return_value_convention gdbarch_return_value (struct gdbarch *GDBARCH, struct type *VALTYPE, struct regcache *REGCACHE, void *READBUF, const void *WRITEBUF)'
+     Given a function with a return-value of type RETTYPE, return which
+     return-value convention that function would use.
+
+     GDB currently recognizes two function return-value conventions:
+     `RETURN_VALUE_REGISTER_CONVENTION' where the return value is found
+     in registers; and `RETURN_VALUE_STRUCT_CONVENTION' where the return
+     value is found in memory and the address of that memory location is
+     passed in as the function's first parameter.
+
+     If the register convention is being used, and WRITEBUF is
+     non-`NULL', also copy the return-value in WRITEBUF into REGCACHE.
+
+     If the register convention is being used, and READBUF is
+     non-`NULL', also copy the return value from REGCACHE into READBUF
+     (REGCACHE contains a copy of the registers from the just returned
+     function).
+
+     _Maintainer note: This method replaces separate predicate, extract,
+     store methods.  By having only one method, the logic needed to
+     determine the return-value convention need only be implemented in
+     one place.  If GDB were written in an OO language, this method
+     would instead return an object that knew how to perform the
+     register return-value extract and store._
+
+     _Maintainer note: This method does not take a GCC_P parameter, and
+     such a parameter should not be added.  If an architecture that
+     requires per-compiler or per-function information be identified,
+     then the replacement of RETTYPE with `struct value' FUNCTION
+     should be pursued._
+
+     _Maintainer note: The REGCACHE parameter limits this methods to
+     the inner most frame.  While replacing REGCACHE with a `struct
+     frame_info' FRAME parameter would remove that limitation there has
+     yet to be a demonstrated need for such a change._
+
+`void gdbarch_skip_permanent_breakpoint (GDBARCH, REGCACHE)'
+     Advance the inferior's PC past a permanent breakpoint.  GDB
+     normally steps over a breakpoint by removing it, stepping one
+     instruction, and re-inserting the breakpoint.  However, permanent
+     breakpoints are hardwired into the inferior, and can't be removed,
+     so this strategy doesn't work.  Calling
+     `gdbarch_skip_permanent_breakpoint' adjusts the processor's state
+     so that execution will resume just after the breakpoint.  This
+     function does the right thing even when the breakpoint is in the
+     delay slot of a branch or jump.
+
+`CORE_ADDR gdbarch_skip_trampoline_code (GDBARCH, FRAME, PC)'
+     If the target machine has trampoline code that sits between
+     callers and the functions being called, then define this function
+     to return a new PC that is at the start of the real function.
+
+`int gdbarch_deprecated_fp_regnum (GDBARCH)'
+     If the frame pointer is in a register, use this function to return
+     the number of that register.
+
+`int gdbarch_stab_reg_to_regnum (GDBARCH, STAB_REGNR)'
+     Use this function to convert stab register STAB_REGNR into GDB
+     regnum.  If not defined, no conversion will be done.
+
+`TARGET_CHAR_BIT'
+     Number of bits in a char; defaults to 8.
+
+`int gdbarch_char_signed (GDBARCH)'
+     Non-zero if `char' is normally signed on this architecture; zero if
+     it should be unsigned.
+
+     The ISO C standard requires the compiler to treat `char' as
+     equivalent to either `signed char' or `unsigned char'; any
+     character in the standard execution set is supposed to be positive.
+     Most compilers treat `char' as signed, but `char' is unsigned on
+     the IBM S/390, RS6000, and PowerPC targets.
+
+`int gdbarch_double_bit (GDBARCH)'
+     Number of bits in a double float; defaults to
+     `8 * TARGET_CHAR_BIT'.
+
+`int gdbarch_float_bit (GDBARCH)'
+     Number of bits in a float; defaults to `4 * TARGET_CHAR_BIT'.
+
+`int gdbarch_int_bit (GDBARCH)'
+     Number of bits in an integer; defaults to `4 * TARGET_CHAR_BIT'.
+
+`int gdbarch_long_bit (GDBARCH)'
+     Number of bits in a long integer; defaults to
+     `4 * TARGET_CHAR_BIT'.
+
+`int gdbarch_long_double_bit (GDBARCH)'
+     Number of bits in a long double float; defaults to
+     `2 * gdbarch_double_bit (GDBARCH)'.
+
+`int gdbarch_long_long_bit (GDBARCH)'
+     Number of bits in a long long integer; defaults to
+     `2 * gdbarch_long_bit (GDBARCH)'.
+
+`int gdbarch_ptr_bit (GDBARCH)'
+     Number of bits in a pointer; defaults to
+     `gdbarch_int_bit (GDBARCH)'.
+
+`int gdbarch_short_bit (GDBARCH)'
+     Number of bits in a short integer; defaults to
+     `2 * TARGET_CHAR_BIT'.
+
+`void gdbarch_virtual_frame_pointer (GDBARCH, PC, FRAME_REGNUM, FRAME_OFFSET)'
+     Returns a `(REGISTER, OFFSET)' pair representing the virtual frame
+     pointer in use at the code address PC.  If virtual frame pointers
+     are not used, a default definition simply returns
+     `gdbarch_deprecated_fp_regnum' (or `gdbarch_sp_regnum', if no
+     frame pointer is defined), with an offset of zero.
+
+`TARGET_HAS_HARDWARE_WATCHPOINTS'
+     If non-zero, the target has support for hardware-assisted
+     watchpoints.  *Note watchpoints: Algorithms, for more details and
+     other related macros.
+
+`int gdbarch_print_insn (GDBARCH, VMA, INFO)'
+     This is the function used by GDB to print an assembly instruction.
+     It prints the instruction at address VMA in debugged memory and
+     returns the length of the instruction, in bytes.  This usually
+     points to a function in the `opcodes' library (*note Opcodes:
+     Support Libraries.).  INFO is a structure (of type
+     `disassemble_info') defined in the header file
+     `include/dis-asm.h', and used to pass information to the
+     instruction decoding routine.
+
+`frame_id gdbarch_dummy_id (GDBARCH, FRAME)'
+     Given FRAME return a `struct frame_id' that uniquely identifies an
+     inferior function call's dummy frame.  The value returned must
+     match the dummy frame stack value previously saved by
+     `call_function_by_hand'.
+
+`void gdbarch_value_to_register (GDBARCH, FRAME, TYPE, BUF)'
+     Convert a value of type TYPE into the raw contents of a register.
+     *Note Using Different Register and Memory Data Representations:
+     Target Architecture Definition.
+
+
+   Motorola M68K target conditionals.
+
+`BPT_VECTOR'
+     Define this to be the 4-bit location of the breakpoint trap
+     vector.  If not defined, it will default to `0xf'.
+
+`REMOTE_BPT_VECTOR'
+     Defaults to `1'.
+
+
+
+File: gdbint.info,  Node: Adding a New Target,  Prev: Defining Other Architecture Features,  Up: Target Architecture Definition
+
+11.11 Adding a New Target
+=========================
+
+The following files add a target to GDB:
+
+`gdb/TTT-tdep.c'
+     Contains any miscellaneous code required for this target machine.
+     On some machines it doesn't exist at all.
+
+`gdb/ARCH-tdep.c'
+`gdb/ARCH-tdep.h'
+     This is required to describe the basic layout of the target
+     machine's processor chip (registers, stack, etc.).  It can be
+     shared among many targets that use the same processor architecture.
+
+
+   (Target header files such as `gdb/config/ARCH/tm-TTT.h',
+`gdb/config/ARCH/tm-ARCH.h', and `config/tm-OS.h' are no longer used.)
+
+   A GDB description for a new architecture, arch is created by
+defining a global function `_initialize_ARCH_tdep', by convention in
+the source file `ARCH-tdep.c'.  For example, in the case of the
+OpenRISC 1000, this function is called `_initialize_or1k_tdep' and is
+found in the file `or1k-tdep.c'.
+
+   The object file resulting from compiling this source file, which will
+contain the implementation of the `_initialize_ARCH_tdep' function is
+specified in the GDB `configure.tgt' file, which includes a large case
+statement pattern matching against the `--target' option of the
+`configure' script.
+
+     _Note:_ If the architecture requires multiple source files, the
+     corresponding binaries should be included in `configure.tgt'.
+     However if there are header files, the dependencies on these will
+     not be picked up from the entries in `configure.tgt'. The
+     `Makefile.in' file will need extending to show these dependencies.
+
+   A new struct gdbarch, defining the new architecture, is created
+within the `_initialize_ARCH_tdep' function by calling
+`gdbarch_register':
+
+     void gdbarch_register (enum bfd_architecture    architecture,
+                            gdbarch_init_ftype      *init_func,
+                            gdbarch_dump_tdep_ftype *tdep_dump_func);
+
+   This function has been described fully in an earlier section.  *Note
+How an Architecture is Represented: How an Architecture is Represented.
+
+   The new `struct gdbarch' should contain implementations of the
+necessary functions (described in the previous sections) to describe
+the basic layout of the target machine's processor chip (registers,
+stack, etc.).  It can be shared among many targets that use the same
+processor architecture.
+
+
+File: gdbint.info,  Node: Target Descriptions,  Next: Target Vector Definition,  Prev: Target Architecture Definition,  Up: Top
+
+12 Target Descriptions
+**********************
+
+The target architecture definition (*note Target Architecture
+Definition::) contains GDB's hard-coded knowledge about an
+architecture.  For some platforms, it is handy to have more flexible
+knowledge about a specific instance of the architecture--for instance,
+a processor or development board.  "Target descriptions" provide a
+mechanism for the user to tell GDB more about what their target
+supports, or for the target to tell GDB directly.
+
+   For details on writing, automatically supplying, and manually
+selecting target descriptions, see *Note Target Descriptions:
+(gdb)Target Descriptions.  This section will cover some related topics
+about the GDB internals.
+
+* Menu:
+
+* Target Descriptions Implementation::
+* Adding Target Described Register Support::
+
+
+File: gdbint.info,  Node: Target Descriptions Implementation,  Next: Adding Target Described Register Support,  Up: Target Descriptions
+
+12.1 Target Descriptions Implementation
+=======================================
+
+Before GDB connects to a new target, or runs a new program on an
+existing target, it discards any existing target description and
+reverts to a default gdbarch.  Then, after connecting, it looks for a
+new target description by calling `target_find_description'.
+
+   A description may come from a user specified file (XML), the remote
+`qXfer:features:read' packet (also XML), or from any custom
+`to_read_description' routine in the target vector.  For instance, the
+remote target supports guessing whether a MIPS target is 32-bit or
+64-bit based on the size of the `g' packet.
+
+   If any target description is found, GDB creates a new gdbarch
+incorporating the description by calling `gdbarch_update_p'.  Any
+`<architecture>' element is handled first, to determine which
+architecture's gdbarch initialization routine is called to create the
+new architecture.  Then the initialization routine is called, and has a
+chance to adjust the constructed architecture based on the contents of
+the target description.  For instance, it can recognize any properties
+set by a `to_read_description' routine.  Also see *Note Adding Target
+Described Register Support::.
+
+
+File: gdbint.info,  Node: Adding Target Described Register Support,  Prev: Target Descriptions Implementation,  Up: Target Descriptions
+
+12.2 Adding Target Described Register Support
+=============================================
+
+Target descriptions can report additional registers specific to an
+instance of the target.  But it takes a little work in the architecture
+specific routines to support this.
+
+   A target description must either have no registers or a complete
+set--this avoids complexity in trying to merge standard registers with
+the target defined registers.  It is the architecture's responsibility
+to validate that a description with registers has everything it needs.
+To keep architecture code simple, the same mechanism is used to assign
+fixed internal register numbers to standard registers.
+
+   If `tdesc_has_registers' returns 1, the description contains
+registers.  The architecture's `gdbarch_init' routine should:
+
+   * Call `tdesc_data_alloc' to allocate storage, early, before
+     searching for a matching gdbarch or allocating a new one.
+
+   * Use `tdesc_find_feature' to locate standard features by name.
+
+   * Use `tdesc_numbered_register' and `tdesc_numbered_register_choices'
+     to locate the expected registers in the standard features.
+
+   * Return `NULL' if a required feature is missing, or if any standard
+     feature is missing expected registers.  This will produce a
+     warning that the description was incomplete.
+
+   * Free the allocated data before returning, unless
+     `tdesc_use_registers' is called.
+
+   * Call `set_gdbarch_num_regs' as usual, with a number higher than any
+     fixed number passed to `tdesc_numbered_register'.
+
+   * Call `tdesc_use_registers' after creating a new gdbarch, before
+     returning it.
+
+
+   After `tdesc_use_registers' has been called, the architecture's
+`register_name', `register_type', and `register_reggroup_p' routines
+will not be called; that information will be taken from the target
+description.  `num_regs' may be increased to account for any additional
+registers in the description.
+
+   Pseudo-registers require some extra care:
+
+   * Using `tdesc_numbered_register' allows the architecture to give
+     constant register numbers to standard architectural registers, e.g.
+     as an `enum' in `ARCH-tdep.h'.  But because pseudo-registers are
+     always numbered above `num_regs', which may be increased by the
+     description, constant numbers can not be used for pseudos.  They
+     must be numbered relative to `num_regs' instead.
+
+   * The description will not describe pseudo-registers, so the
+     architecture must call `set_tdesc_pseudo_register_name',
+     `set_tdesc_pseudo_register_type', and
+     `set_tdesc_pseudo_register_reggroup_p' to supply routines
+     describing pseudo registers.  These routines will be passed
+     internal register numbers, so the same routines used for the
+     gdbarch equivalents are usually suitable.
+
+
+
+File: gdbint.info,  Node: Target Vector Definition,  Next: Native Debugging,  Prev: Target Descriptions,  Up: Top
+
+13 Target Vector Definition
+***************************
+
+The target vector defines the interface between GDB's abstract handling
+of target systems, and the nitty-gritty code that actually exercises
+control over a process or a serial port.  GDB includes some 30-40
+different target vectors; however, each configuration of GDB includes
+only a few of them.
+
+* Menu:
+
+* Managing Execution State::
+* Existing Targets::
+
+
+File: gdbint.info,  Node: Managing Execution State,  Next: Existing Targets,  Up: Target Vector Definition
+
+13.1 Managing Execution State
+=============================
+
+A target vector can be completely inactive (not pushed on the target
+stack), active but not running (pushed, but not connected to a fully
+manifested inferior), or completely active (pushed, with an accessible
+inferior).  Most targets are only completely inactive or completely
+active, but some support persistent connections to a target even when
+the target has exited or not yet started.
+
+   For example, connecting to the simulator using `target sim' does not
+create a running program.  Neither registers nor memory are accessible
+until `run'.  Similarly, after `kill', the program can not continue
+executing.  But in both cases GDB remains connected to the simulator,
+and target-specific commands are directed to the simulator.
+
+   A target which only supports complete activation should push itself
+onto the stack in its `to_open' routine (by calling `push_target'), and
+unpush itself from the stack in its `to_mourn_inferior' routine (by
+calling `unpush_target').
+
+   A target which supports both partial and complete activation should
+still call `push_target' in `to_open', but not call `unpush_target' in
+`to_mourn_inferior'.  Instead, it should call either
+`target_mark_running' or `target_mark_exited' in its `to_open',
+depending on whether the target is fully active after connection.  It
+should also call `target_mark_running' any time the inferior becomes
+fully active (e.g. in `to_create_inferior' and `to_attach'), and
+`target_mark_exited' when the inferior becomes inactive (in
+`to_mourn_inferior').  The target should also make sure to call
+`target_mourn_inferior' from its `to_kill', to return the target to
+inactive state.
+
+
+File: gdbint.info,  Node: Existing Targets,  Prev: Managing Execution State,  Up: Target Vector Definition
+
+13.2 Existing Targets
+=====================
+
+13.2.1 File Targets
+-------------------
+
+Both executables and core files have target vectors.
+
+13.2.2 Standard Protocol and Remote Stubs
+-----------------------------------------
+
+GDB's file `remote.c' talks a serial protocol to code that runs in the
+target system.  GDB provides several sample "stubs" that can be
+integrated into target programs or operating systems for this purpose;
+they are named `CPU-stub.c'.  Many operating systems, embedded targets,
+emulators, and simulators already have a GDB stub built into them, and
+maintenance of the remote protocol must be careful to preserve
+compatibility.
+
+   The GDB user's manual describes how to put such a stub into your
+target code.  What follows is a discussion of integrating the SPARC
+stub into a complicated operating system (rather than a simple
+program), by Stu Grossman, the author of this stub.
+
+   The trap handling code in the stub assumes the following upon entry
+to `trap_low':
+
+  1. %l1 and %l2 contain pc and npc respectively at the time of the
+     trap;
+
+  2. traps are disabled;
+
+  3. you are in the correct trap window.
+
+   As long as your trap handler can guarantee those conditions, then
+there is no reason why you shouldn't be able to "share" traps with the
+stub.  The stub has no requirement that it be jumped to directly from
+the hardware trap vector.  That is why it calls `exceptionHandler()',
+which is provided by the external environment.  For instance, this could
+set up the hardware traps to actually execute code which calls the stub
+first, and then transfers to its own trap handler.
+
+   For the most point, there probably won't be much of an issue with
+"sharing" traps, as the traps we use are usually not used by the kernel,
+and often indicate unrecoverable error conditions.  Anyway, this is all
+controlled by a table, and is trivial to modify.  The most important
+trap for us is for `ta 1'.  Without that, we can't single step or do
+breakpoints.  Everything else is unnecessary for the proper operation
+of the debugger/stub.
+
+   From reading the stub, it's probably not obvious how breakpoints
+work.  They are simply done by deposit/examine operations from GDB.
+
+13.2.3 ROM Monitor Interface
+----------------------------
+
+13.2.4 Custom Protocols
+-----------------------
+
+13.2.5 Transport Layer
+----------------------
+
+13.2.6 Builtin Simulator
+------------------------
+
+
+File: gdbint.info,  Node: Native Debugging,  Next: Support Libraries,  Prev: Target Vector Definition,  Up: Top
+
+14 Native Debugging
+*******************
+
+Several files control GDB's configuration for native support:
+
+`gdb/config/ARCH/XYZ.mh'
+     Specifies Makefile fragments needed by a _native_ configuration on
+     machine XYZ.  In particular, this lists the required
+     native-dependent object files, by defining `NATDEPFILES=...'.
+     Also specifies the header file which describes native support on
+     XYZ, by defining `NAT_FILE= nm-XYZ.h'.  You can also define
+     `NAT_CFLAGS', `NAT_ADD_FILES', `NAT_CLIBS', `NAT_CDEPS',
+     `NAT_GENERATED_FILES', etc.; see `Makefile.in'.
+
+     _Maintainer's note: The `.mh' suffix is because this file
+     originally contained `Makefile' fragments for hosting GDB on
+     machine XYZ.  While the file is no longer used for this purpose,
+     the `.mh' suffix remains.  Perhaps someone will eventually rename
+     these fragments so that they have a `.mn' suffix._
+
+`gdb/config/ARCH/nm-XYZ.h'
+     (`nm.h' is a link to this file, created by `configure').  Contains
+     C macro definitions describing the native system environment, such
+     as child process control and core file support.
+
+`gdb/XYZ-nat.c'
+     Contains any miscellaneous C code required for this native support
+     of this machine.  On some machines it doesn't exist at all.
+
+   There are some "generic" versions of routines that can be used by
+various systems.  These can be customized in various ways by macros
+defined in your `nm-XYZ.h' file.  If these routines work for the XYZ
+host, you can just include the generic file's name (with `.o', not
+`.c') in `NATDEPFILES'.
+
+   Otherwise, if your machine needs custom support routines, you will
+need to write routines that perform the same functions as the generic
+file.  Put them into `XYZ-nat.c', and put `XYZ-nat.o' into
+`NATDEPFILES'.
+
+`inftarg.c'
+     This contains the _target_ops vector_ that supports Unix child
+     processes on systems which use ptrace and wait to control the
+     child.
+
+`procfs.c'
+     This contains the _target_ops vector_ that supports Unix child
+     processes on systems which use /proc to control the child.
+
+`fork-child.c'
+     This does the low-level grunge that uses Unix system calls to do a
+     "fork and exec" to start up a child process.
+
+`infptrace.c'
+     This is the low level interface to inferior processes for systems
+     using the Unix `ptrace' call in a vanilla way.
+
+14.1 ptrace
+===========
+
+14.2 /proc
+==========
+
+14.3 win32
+==========
+
+14.4 shared libraries
+=====================
+
+14.5 Native Conditionals
+========================
+
+When GDB is configured and compiled, various macros are defined or left
+undefined, to control compilation when the host and target systems are
+the same.  These macros should be defined (or left undefined) in
+`nm-SYSTEM.h'.
+
+`I386_USE_GENERIC_WATCHPOINTS'
+     An x86-based machine can define this to use the generic x86
+     watchpoint support; see *Note I386_USE_GENERIC_WATCHPOINTS:
+     Algorithms.
+
+`SOLIB_ADD (FILENAME, FROM_TTY, TARG, READSYMS)'
+     Define this to expand into an expression that will cause the
+     symbols in FILENAME to be added to GDB's symbol table.  If
+     READSYMS is zero symbols are not read but any necessary low level
+     processing for FILENAME is still done.
+
+`SOLIB_CREATE_INFERIOR_HOOK'
+     Define this to expand into any shared-library-relocation code that
+     you want to be run just after the child process has been forked.
+
+`START_INFERIOR_TRAPS_EXPECTED'
+     When starting an inferior, GDB normally expects to trap twice;
+     once when the shell execs, and once when the program itself execs.
+     If the actual number of traps is something other than 2, then
+     define this macro to expand into the number expected.
+
+
+
+File: gdbint.info,  Node: Support Libraries,  Next: Coding Standards,  Prev: Native Debugging,  Up: Top
+
+15 Support Libraries
+********************
+
+15.1 BFD
+========
+
+BFD provides support for GDB in several ways:
+
+_identifying executable and core files_
+     BFD will identify a variety of file types, including a.out, coff,
+     and several variants thereof, as well as several kinds of core
+     files.
+
+_access to sections of files_
+     BFD parses the file headers to determine the names, virtual
+     addresses, sizes, and file locations of all the various named
+     sections in files (such as the text section or the data section).
+     GDB simply calls BFD to read or write section X at byte offset Y
+     for length Z.
+
+_specialized core file support_
+     BFD provides routines to determine the failing command name stored
+     in a core file, the signal with which the program failed, and
+     whether a core file matches (i.e. could be a core dump of) a
+     particular executable file.
+
+_locating the symbol information_
+     GDB uses an internal interface of BFD to determine where to find
+     the symbol information in an executable file or symbol-file.  GDB
+     itself handles the reading of symbols, since BFD does not
+     "understand" debug symbols, but GDB uses BFD's cached information
+     to find the symbols, string table, etc.
+
+15.2 opcodes
+============
+
+The opcodes library provides GDB's disassembler.  (It's a separate
+library because it's also used in binutils, for `objdump').
+
+15.3 readline
+=============
+
+The `readline' library provides a set of functions for use by
+applications that allow users to edit command lines as they are typed
+in.
+
+15.4 libiberty
+==============
+
+The `libiberty' library provides a set of functions and features that
+integrate and improve on functionality found in modern operating
+systems.  Broadly speaking, such features can be divided into three
+groups: supplemental functions (functions that may be missing in some
+environments and operating systems), replacement functions (providing a
+uniform and easier to use interface for commonly used standard
+functions), and extensions (which provide additional functionality
+beyond standard functions).
+
+   GDB uses various features provided by the `libiberty' library, for
+instance the C++ demangler, the IEEE floating format support functions,
+the input options parser `getopt', the `obstack' extension, and other
+functions.
+
+15.4.1 `obstacks' in GDB
+------------------------
+
+The obstack mechanism provides a convenient way to allocate and free
+chunks of memory.  Each obstack is a pool of memory that is managed
+like a stack.  Objects (of any nature, size and alignment) are
+allocated and freed in a LIFO fashion on an obstack (see `libiberty''s
+documentation for a more detailed explanation of `obstacks').
+
+   The most noticeable use of the `obstacks' in GDB is in object files.
+There is an obstack associated with each internal representation of an
+object file.  Lots of things get allocated on these `obstacks':
+dictionary entries, blocks, blockvectors, symbols, minimal symbols,
+types, vectors of fundamental types, class fields of types, object
+files section lists, object files section offset lists, line tables,
+symbol tables, partial symbol tables, string tables, symbol table
+private data, macros tables, debug information sections and entries,
+import and export lists (som), unwind information (hppa), dwarf2
+location expressions data.  Plus various strings such as directory
+names strings, debug format strings, names of types.
+
+   An essential and convenient property of all data on `obstacks' is
+that memory for it gets allocated (with `obstack_alloc') at various
+times during a debugging session, but it is released all at once using
+the `obstack_free' function.  The `obstack_free' function takes a
+pointer to where in the stack it must start the deletion from (much
+like the cleanup chains have a pointer to where to start the cleanups).
+Because of the stack like structure of the `obstacks', this allows to
+free only a top portion of the obstack.  There are a few instances in
+GDB where such thing happens.  Calls to `obstack_free' are done after
+some local data is allocated to the obstack.  Only the local data is
+deleted from the obstack.  Of course this assumes that nothing between
+the `obstack_alloc' and the `obstack_free' allocates anything else on
+the same obstack.  For this reason it is best and safest to use
+temporary `obstacks'.
+
+   Releasing the whole obstack is also not safe per se.  It is safe only
+under the condition that we know the `obstacks' memory is no longer
+needed.  In GDB we get rid of the `obstacks' only when we get rid of
+the whole objfile(s), for instance upon reading a new symbol file.
+
+15.5 gnu-regex
+==============
+
+Regex conditionals.
+
+`C_ALLOCA'
+
+`NFAILURES'
+
+`RE_NREGS'
+
+`SIGN_EXTEND_CHAR'
+
+`SWITCH_ENUM_BUG'
+
+`SYNTAX_TABLE'
+
+`Sword'
+
+`sparc'
+
+15.6 Array Containers
+=====================
+
+Often it is necessary to manipulate a dynamic array of a set of
+objects.  C forces some bookkeeping on this, which can get cumbersome
+and repetitive.  The `vec.h' file contains macros for defining and
+using a typesafe vector type.  The functions defined will be inlined
+when compiling, and so the abstraction cost should be zero.  Domain
+checks are added to detect programming errors.
+
+   An example use would be an array of symbols or section information.
+The array can be grown as symbols are read in (or preallocated), and
+the accessor macros provided keep care of all the necessary
+bookkeeping.  Because the arrays are type safe, there is no danger of
+accidentally mixing up the contents.  Think of these as C++ templates,
+but implemented in C.
+
+   Because of the different behavior of structure objects, scalar
+objects and of pointers, there are three flavors of vector, one for
+each of these variants.  Both the structure object and pointer variants
+pass pointers to objects around -- in the former case the pointers are
+stored into the vector and in the latter case the pointers are
+dereferenced and the objects copied into the vector.  The scalar object
+variant is suitable for `int'-like objects, and the vector elements are
+returned by value.
+
+   There are both `index' and `iterate' accessors.  The iterator
+returns a boolean iteration condition and updates the iteration
+variable passed by reference.  Because the iterator will be inlined,
+the address-of can be optimized away.
+
+   The vectors are implemented using the trailing array idiom, thus they
+are not resizeable without changing the address of the vector object
+itself.  This means you cannot have variables or fields of vector type
+-- always use a pointer to a vector.  The one exception is the final
+field of a structure, which could be a vector type.  You will have to
+use the `embedded_size' & `embedded_init' calls to create such objects,
+and they will probably not be resizeable (so don't use the "safe"
+allocation variants).  The trailing array idiom is used (rather than a
+pointer to an array of data), because, if we allow `NULL' to also
+represent an empty vector, empty vectors occupy minimal space in the
+structure containing them.
+
+   Each operation that increases the number of active elements is
+available in "quick" and "safe" variants.  The former presumes that
+there is sufficient allocated space for the operation to succeed (it
+dies if there is not).  The latter will reallocate the vector, if
+needed.  Reallocation causes an exponential increase in vector size.
+If you know you will be adding N elements, it would be more efficient
+to use the reserve operation before adding the elements with the
+"quick" operation.  This will ensure there are at least as many
+elements as you ask for, it will exponentially increase if there are
+too few spare slots.  If you want reserve a specific number of slots,
+but do not want the exponential increase (for instance, you know this
+is the last allocation), use a negative number for reservation.  You
+can also create a vector of a specific size from the get go.
+
+   You should prefer the push and pop operations, as they append and
+remove from the end of the vector.  If you need to remove several items
+in one go, use the truncate operation.  The insert and remove
+operations allow you to change elements in the middle of the vector.
+There are two remove operations, one which preserves the element
+ordering `ordered_remove', and one which does not `unordered_remove'.
+The latter function copies the end element into the removed slot,
+rather than invoke a memmove operation.  The `lower_bound' function
+will determine where to place an item in the array using insert that
+will maintain sorted order.
+
+   If you need to directly manipulate a vector, then the `address'
+accessor will return the address of the start of the vector.  Also the
+`space' predicate will tell you whether there is spare capacity in the
+vector.  You will not normally need to use these two functions.
+
+   Vector types are defined using a `DEF_VEC_{O,P,I}(TYPENAME)' macro.
+Variables of vector type are declared using a `VEC(TYPENAME)' macro.
+The characters `O', `P' and `I' indicate whether TYPENAME is an object
+(`O'), pointer (`P') or integral (`I') type.  Be careful to pick the
+correct one, as you'll get an awkward and inefficient API if you use
+the wrong one.  There is a check, which results in a compile-time
+warning, for the `P' and `I' versions, but there is no check for the
+`O' versions, as that is not possible in plain C.
+
+   An example of their use would be,
+
+     DEF_VEC_P(tree);   // non-managed tree vector.
+
+     struct my_struct {
+       VEC(tree) *v;      // A (pointer to) a vector of tree pointers.
+     };
+
+     struct my_struct *s;
+
+     if (VEC_length(tree, s->v)) { we have some contents }
+     VEC_safe_push(tree, s->v, decl); // append some decl onto the end
+     for (ix = 0; VEC_iterate(tree, s->v, ix, elt); ix++)
+       { do something with elt }
+
+   The `vec.h' file provides details on how to invoke the various
+accessors provided.  They are enumerated here:
+
+`VEC_length'
+     Return the number of items in the array,
+
+`VEC_empty'
+     Return true if the array has no elements.
+
+`VEC_last'
+`VEC_index'
+     Return the last or arbitrary item in the array.
+
+`VEC_iterate'
+     Access an array element and indicate whether the array has been
+     traversed.
+
+`VEC_alloc'
+`VEC_free'
+     Create and destroy an array.
+
+`VEC_embedded_size'
+`VEC_embedded_init'
+     Helpers for embedding an array as the final element of another
+     struct.
+
+`VEC_copy'
+     Duplicate an array.
+
+`VEC_space'
+     Return the amount of free space in an array.
+
+`VEC_reserve'
+     Ensure a certain amount of free space.
+
+`VEC_quick_push'
+`VEC_safe_push'
+     Append to an array, either assuming the space is available, or
+     making sure that it is.
+
+`VEC_pop'
+     Remove the last item from an array.
+
+`VEC_truncate'
+     Remove several items from the end of an array.
+
+`VEC_safe_grow'
+     Add several items to the end of an array.
+
+`VEC_replace'
+     Overwrite an item in the array.
+
+`VEC_quick_insert'
+`VEC_safe_insert'
+     Insert an item into the middle of the array.  Either the space must
+     already exist, or the space is created.
+
+`VEC_ordered_remove'
+`VEC_unordered_remove'
+     Remove an item from the array, preserving order or not.
+
+`VEC_block_remove'
+     Remove a set of items from the array.
+
+`VEC_address'
+     Provide the address of the first element.
+
+`VEC_lower_bound'
+     Binary search the array.
+
+
+15.7 include
+============
+
+
+File: gdbint.info,  Node: Coding Standards,  Next: Misc Guidelines,  Prev: Support Libraries,  Up: Top
+
+16 Coding Standards
+*******************
+
+16.1 GDB C Coding Standards
+===========================
+
+GDB follows the GNU coding standards, as described in
+`etc/standards.texi'.  This file is also available for anonymous FTP
+from GNU archive sites.  GDB takes a strict interpretation of the
+standard; in general, when the GNU standard recommends a practice but
+does not require it, GDB requires it.
+
+   GDB follows an additional set of coding standards specific to GDB,
+as described in the following sections.
+
+16.1.1 ISO C
+------------
+
+GDB assumes an ISO/IEC 9899:1990 (a.k.a. ISO C90) compliant compiler.
+
+   GDB does not assume an ISO C or POSIX compliant C library.
+
+16.1.2 Formatting
+-----------------
+
+The standard GNU recommendations for formatting must be followed
+strictly.  Any GDB-specific deviation from GNU recomendations is
+described below.
+
+   A function declaration should not have its name in column zero.  A
+function definition should have its name in column zero.
+
+     /* Declaration */
+     static void foo (void);
+     /* Definition */
+     void
+     foo (void)
+     {
+     }
+
+   _Pragmatics: This simplifies scripting.  Function definitions can be
+found using `^function-name'._
+
+   There must be a space between a function or macro name and the
+opening parenthesis of its argument list (except for macro definitions,
+as required by C).  There must not be a space after an open
+paren/bracket or before a close paren/bracket.
+
+   While additional whitespace is generally helpful for reading, do not
+use more than one blank line to separate blocks, and avoid adding
+whitespace after the end of a program line (as of 1/99, some 600 lines
+had whitespace after the semicolon).  Excess whitespace causes
+difficulties for `diff' and `patch' utilities.
+
+   Pointers are declared using the traditional K&R C style:
+
+     void *foo;
+
+and not:
+
+     void * foo;
+     void* foo;
+
+   In addition, whitespace around casts and unary operators should
+follow the following guidelines:
+
+Use...         ...instead of  
+`!x'           `! x'          
+`~x'           `~ x'          
+`-x'           `- x'          (unary minus)
+`(foo) x'      `(foo)x'       (cast)
+`*x'           `* x'          (pointer dereference)
+
+   Any two or more lines in code should be wrapped in braces, even if
+they are comments, as they look like separate statements:
+
+     if (i)
+       {
+         /* Return success.  */
+         return 0;
+       }
+
+and not:
+
+     if (i)
+       /* Return success.  */
+       return 0;
+
+16.1.3 Comments
+---------------
+
+The standard GNU requirements on comments must be followed strictly.
+
+   Block comments must appear in the following form, with no `/*'- or
+`*/'-only lines, and no leading `*':
+
+     /* Wait for control to return from inferior to debugger.  If inferior
+        gets a signal, we may decide to start it up again instead of
+        returning.  That is why there is a loop in this function.  When
+        this function actually returns it means the inferior should be left
+        stopped and GDB should read more commands.  */
+
+   (Note that this format is encouraged by Emacs; tabbing for a
+multi-line comment works correctly, and `M-q' fills the block
+consistently.)
+
+   Put a blank line between the block comments preceding function or
+variable definitions, and the definition itself.
+
+   In general, put function-body comments on lines by themselves, rather
+than trying to fit them into the 20 characters left at the end of a
+line, since either the comment or the code will inevitably get longer
+than will fit, and then somebody will have to move it anyhow.
+
+16.1.4 C Usage
+--------------
+
+Code must not depend on the sizes of C data types, the format of the
+host's floating point numbers, the alignment of anything, or the order
+of evaluation of expressions.
+
+   Use functions freely.  There are only a handful of compute-bound
+areas in GDB that might be affected by the overhead of a function call,
+mainly in symbol reading.  Most of GDB's performance is limited by the
+target interface (whether serial line or system call).
+
+   However, use functions with moderation.  A thousand one-line
+functions are just as hard to understand as a single thousand-line
+function.
+
+   _Macros are bad, M'kay._ (But if you have to use a macro, make sure
+that the macro arguments are protected with parentheses.)
+
+   Declarations like `struct foo *' should be used in preference to
+declarations like `typedef struct foo { ... } *foo_ptr'.
+
+16.1.5 Function Prototypes
+--------------------------
+
+Prototypes must be used when both _declaring_ and _defining_ a
+function.  Prototypes for GDB functions must include both the argument
+type and name, with the name matching that used in the actual function
+definition.
+
+   All external functions should have a declaration in a header file
+that callers include, except for `_initialize_*' functions, which must
+be external so that `init.c' construction works, but shouldn't be
+visible to random source files.
+
+   Where a source file needs a forward declaration of a static function,
+that declaration must appear in a block near the top of the source file.
+
+16.1.6 File Names
+-----------------
+
+Any file used when building the core of GDB must be in lower case.  Any
+file used when building the core of GDB must be 8.3 unique.  These
+requirements apply to both source and generated files.
+
+   _Pragmatics: The core of GDB must be buildable on many platforms
+including DJGPP and MacOS/HFS.  Every time an unfriendly file is
+introduced to the build process both `Makefile.in' and `configure.in'
+need to be modified accordingly.  Compare the convoluted conversion
+process needed to transform `COPYING' into `copying.c' with the
+conversion needed to transform `version.in' into `version.c'._
+
+   Any file non 8.3 compliant file (that is not used when building the
+core of GDB) must be added to `gdb/config/djgpp/fnchange.lst'.
+
+   _Pragmatics: This is clearly a compromise._
+
+   When GDB has a local version of a system header file (ex `string.h')
+the file name based on the POSIX header prefixed with `gdb_'
+(`gdb_string.h').  These headers should be relatively independent: they
+should use only macros defined by `configure', the compiler, or the
+host; they should include only system headers; they should refer only
+to system types.  They may be shared between multiple programs, e.g.
+GDB and GDBSERVER.
+
+   For other files `-' is used as the separator.
+
+16.1.7 Include Files
+--------------------
+
+A `.c' file should include `defs.h' first.
+
+   A `.c' file should directly include the `.h' file of every
+declaration and/or definition it directly refers to.  It cannot rely on
+indirect inclusion.
+
+   A `.h' file should directly include the `.h' file of every
+declaration and/or definition it directly refers to.  It cannot rely on
+indirect inclusion.  Exception: The file `defs.h' does not need to be
+directly included.
+
+   An external declaration should only appear in one include file.
+
+   An external declaration should never appear in a `.c' file.
+Exception: a declaration for the `_initialize' function that pacifies
+`-Wmissing-declaration'.
+
+   A `typedef' definition should only appear in one include file.
+
+   An opaque `struct' declaration can appear in multiple `.h' files.
+Where possible, a `.h' file should use an opaque `struct' declaration
+instead of an include.
+
+   All `.h' files should be wrapped in:
+
+     #ifndef INCLUDE_FILE_NAME_H
+     #define INCLUDE_FILE_NAME_H
+     header body
+     #endif
+
+16.2 GDB Python Coding Standards
+================================
+
+GDB follows the published `Python' coding standards in `PEP008'
+(http://www.python.org/dev/peps/pep-0008/).
+
+   In addition, the guidelines in the Google Python Style Guide
+(http://google-styleguide.googlecode.com/svn/trunk/pyguide.html) are
+also followed where they do not conflict with `PEP008'.
+
+16.2.1 GDB-specific exceptions
+------------------------------
+
+There are a few exceptions to the published standards.  They exist
+mainly for consistency with the `C' standards.
+
+   * Use `FIXME' instead of `TODO'.
+
+
+
+File: gdbint.info,  Node: Misc Guidelines,  Next: Porting GDB,  Prev: Coding Standards,  Up: Top
+
+17 Misc Guidelines
+******************
+
+This chapter covers topics that are lower-level than the major
+algorithms of GDB.
+
+17.1 Cleanups
+=============
+
+Cleanups are a structured way to deal with things that need to be done
+later.
+
+   When your code does something (e.g., `xmalloc' some memory, or
+`open' a file) that needs to be undone later (e.g., `xfree' the memory
+or `close' the file), it can make a cleanup.  The cleanup will be done
+at some future point: when the command is finished and control returns
+to the top level; when an error occurs and the stack is unwound; or
+when your code decides it's time to explicitly perform cleanups.
+Alternatively you can elect to discard the cleanups you created.
+
+   Syntax:
+
+`struct cleanup *OLD_CHAIN;'
+     Declare a variable which will hold a cleanup chain handle.
+
+`OLD_CHAIN = make_cleanup (FUNCTION, ARG);'
+     Make a cleanup which will cause FUNCTION to be called with ARG (a
+     `char *') later.  The result, OLD_CHAIN, is a handle that can
+     later be passed to `do_cleanups' or `discard_cleanups'.  Unless
+     you are going to call `do_cleanups' or `discard_cleanups', you can
+     ignore the result from `make_cleanup'.
+
+`do_cleanups (OLD_CHAIN);'
+     Do all cleanups added to the chain since the corresponding
+     `make_cleanup' call was made.
+
+`discard_cleanups (OLD_CHAIN);'
+     Same as `do_cleanups' except that it just removes the cleanups from
+     the chain and does not call the specified functions.
+
+   Cleanups are implemented as a chain.  The handle returned by
+`make_cleanups' includes the cleanup passed to the call and any later
+cleanups appended to the chain (but not yet discarded or performed).
+E.g.:
+
+     make_cleanup (a, 0);
+     {
+       struct cleanup *old = make_cleanup (b, 0);
+       make_cleanup (c, 0)
+       ...
+       do_cleanups (old);
+     }
+
+will call `c()' and `b()' but will not call `a()'.  The cleanup that
+calls `a()' will remain in the cleanup chain, and will be done later
+unless otherwise discarded.
+
+   Your function should explicitly do or discard the cleanups it
+creates.  Failing to do this leads to non-deterministic behavior since
+the caller will arbitrarily do or discard your functions cleanups.
+This need leads to two common cleanup styles.
+
+   The first style is try/finally.  Before it exits, your code-block
+calls `do_cleanups' with the old cleanup chain and thus ensures that
+your code-block's cleanups are always performed.  For instance, the
+following code-segment avoids a memory leak problem (even when `error'
+is called and a forced stack unwind occurs) by ensuring that the
+`xfree' will always be called:
+
+     struct cleanup *old = make_cleanup (null_cleanup, 0);
+     data = xmalloc (sizeof blah);
+     make_cleanup (xfree, data);
+     ... blah blah ...
+     do_cleanups (old);
+
+   The second style is try/except.  Before it exits, your code-block
+calls `discard_cleanups' with the old cleanup chain and thus ensures
+that any created cleanups are not performed.  For instance, the
+following code segment, ensures that the file will be closed but only
+if there is an error:
+
+     FILE *file = fopen ("afile", "r");
+     struct cleanup *old = make_cleanup (close_file, file);
+     ... blah blah ...
+     discard_cleanups (old);
+     return file;
+
+   Some functions, e.g., `fputs_filtered()' or `error()', specify that
+they "should not be called when cleanups are not in place".  This means
+that any actions you need to reverse in the case of an error or
+interruption must be on the cleanup chain before you call these
+functions, since they might never return to your code (they `longjmp'
+instead).
+
+17.2 Per-architecture module data
+=================================
+
+The multi-arch framework includes a mechanism for adding module
+specific per-architecture data-pointers to the `struct gdbarch'
+architecture object.
+
+   A module registers one or more per-architecture data-pointers using:
+
+ -- Architecture Function: struct gdbarch_data *
+gdbarch_data_register_pre_init (gdbarch_data_pre_init_ftype *PRE_INIT)
+     PRE_INIT is used to, on-demand, allocate an initial value for a
+     per-architecture data-pointer using the architecture's obstack
+     (passed in as a parameter).  Since PRE_INIT can be called during
+     architecture creation, it is not parameterized with the
+     architecture.  and must not call modules that use per-architecture
+     data.
+
+ -- Architecture Function: struct gdbarch_data *
+gdbarch_data_register_post_init (gdbarch_data_post_init_ftype
+          *POST_INIT)
+     POST_INIT is used to obtain an initial value for a
+     per-architecture data-pointer _after_.  Since POST_INIT is always
+     called after architecture creation, it both receives the fully
+     initialized architecture and is free to call modules that use
+     per-architecture data (care needs to be taken to ensure that those
+     other modules do not try to call back to this module as that will
+     create in cycles in the initialization call graph).
+
+   These functions return a `struct gdbarch_data' that is used to
+identify the per-architecture data-pointer added for that module.
+
+   The per-architecture data-pointer is accessed using the function:
+
+ -- Architecture Function: void * gdbarch_data (struct gdbarch
+          *GDBARCH, struct gdbarch_data *DATA_HANDLE)
+     Given the architecture ARCH and module data handle DATA_HANDLE
+     (returned by `gdbarch_data_register_pre_init' or
+     `gdbarch_data_register_post_init'), this function returns the
+     current value of the per-architecture data-pointer.  If the data
+     pointer is `NULL', it is first initialized by calling the
+     corresponding PRE_INIT or POST_INIT method.
+
+   The examples below assume the following definitions:
+
+     struct nozel { int total; };
+     static struct gdbarch_data *nozel_handle;
+
+   A module can extend the architecture vector, adding additional
+per-architecture data, using the PRE_INIT method.  The module's
+per-architecture data is then initialized during architecture creation.
+
+   In the below, the module's per-architecture _nozel_ is added.  An
+architecture can specify its nozel by calling `set_gdbarch_nozel' from
+`gdbarch_init'.
+
+     static void *
+     nozel_pre_init (struct obstack *obstack)
+     {
+       struct nozel *data = OBSTACK_ZALLOC (obstack, struct nozel);
+       return data;
+     }
+
+     extern void
+     set_gdbarch_nozel (struct gdbarch *gdbarch, int total)
+     {
+       struct nozel *data = gdbarch_data (gdbarch, nozel_handle);
+       data->total = nozel;
+     }
+
+   A module can on-demand create architecture dependent data structures
+using `post_init'.
+
+   In the below, the nozel's total is computed on-demand by
+`nozel_post_init' using information obtained from the architecture.
+
+     static void *
+     nozel_post_init (struct gdbarch *gdbarch)
+     {
+       struct nozel *data = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct nozel);
+       nozel->total = gdbarch... (gdbarch);
+       return data;
+     }
+
+     extern int
+     nozel_total (struct gdbarch *gdbarch)
+     {
+       struct nozel *data = gdbarch_data (gdbarch, nozel_handle);
+       return data->total;
+     }
+
+17.3 Wrapping Output Lines
+==========================
+
+Output that goes through `printf_filtered' or `fputs_filtered' or
+`fputs_demangled' needs only to have calls to `wrap_here' added in
+places that would be good breaking points.  The utility routines will
+take care of actually wrapping if the line width is exceeded.
+
+   The argument to `wrap_here' is an indentation string which is
+printed _only_ if the line breaks there.  This argument is saved away
+and used later.  It must remain valid until the next call to
+`wrap_here' or until a newline has been printed through the
+`*_filtered' functions.  Don't pass in a local variable and then return!
+
+   It is usually best to call `wrap_here' after printing a comma or
+space.  If you call it before printing a space, make sure that your
+indentation properly accounts for the leading space that will print if
+the line wraps there.
+
+   Any function or set of functions that produce filtered output must
+finish by printing a newline, to flush the wrap buffer, before switching
+to unfiltered (`printf') output.  Symbol reading routines that print
+warnings are a good example.
+
+17.4 Memory Management
+======================
+
+GDB does not use the functions `malloc', `realloc', `calloc', `free'
+and `asprintf'.
+
+   GDB uses the functions `xmalloc', `xrealloc' and `xcalloc' when
+allocating memory.  Unlike `malloc' et.al.  these functions do not
+return when the memory pool is empty.  Instead, they unwind the stack
+using cleanups.  These functions return `NULL' when requested to
+allocate a chunk of memory of size zero.
+
+   _Pragmatics: By using these functions, the need to check every
+memory allocation is removed.  These functions provide portable
+behavior._
+
+   GDB does not use the function `free'.
+
+   GDB uses the function `xfree' to return memory to the memory pool.
+Consistent with ISO-C, this function ignores a request to free a `NULL'
+pointer.
+
+   _Pragmatics: On some systems `free' fails when passed a `NULL'
+pointer._
+
+   GDB can use the non-portable function `alloca' for the allocation of
+small temporary values (such as strings).
+
+   _Pragmatics: This function is very non-portable.  Some systems
+restrict the memory being allocated to no more than a few kilobytes._
+
+   GDB uses the string function `xstrdup' and the print function
+`xstrprintf'.
+
+   _Pragmatics: `asprintf' and `strdup' can fail.  Print functions such
+as `sprintf' are very prone to buffer overflow errors._
+
+17.5 Compiler Warnings
+======================
+
+With few exceptions, developers should avoid the configuration option
+`--disable-werror' when building GDB.  The exceptions are listed in the
+file `gdb/MAINTAINERS'.  The default, when building with GCC, is
+`--enable-werror'.
+
+   This option causes GDB (when built using GCC) to be compiled with a
+carefully selected list of compiler warning flags.  Any warnings from
+those flags are treated as errors.
+
+   The current list of warning flags includes:
+
+`-Wall'
+     Recommended GCC warnings.
+
+`-Wdeclaration-after-statement'
+     GCC 3.x (and later) and C99 allow declarations mixed with code,
+     but GCC 2.x and C89 do not.
+
+`-Wpointer-arith'
+
+`-Wformat-nonliteral'
+     Non-literal format strings, with a few exceptions, are bugs - they
+     might contain unintended user-supplied format specifiers.  Since
+     GDB uses the `format printf' attribute on all `printf' like
+     functions this checks not just `printf' calls but also calls to
+     functions such as `fprintf_unfiltered'.
+
+`-Wno-pointer-sign'
+     In version 4.0, GCC began warning about pointer argument passing or
+     assignment even when the source and destination differed only in
+     signedness.  However, most GDB code doesn't distinguish carefully
+     between `char' and `unsigned char'.  In early 2006 the GDB
+     developers decided correcting these warnings wasn't worth the time
+     it would take.
+
+`-Wno-unused-parameter'
+     Due to the way that GDB is implemented many functions have unused
+     parameters.  Consequently this warning is avoided.  The macro
+     `ATTRIBUTE_UNUSED' is not used as it leads to false negatives --
+     it is not an error to have `ATTRIBUTE_UNUSED' on a parameter that
+     is being used.
+
+`-Wno-unused'
+`-Wno-switch'
+`-Wno-char-subscripts'
+     These are warnings which might be useful for GDB, but are
+     currently too noisy to enable with `-Werror'.
+
+
+17.6 Internal Error Recovery
+============================
+
+During its execution, GDB can encounter two types of errors.  User
+errors and internal errors.  User errors include not only a user
+entering an incorrect command but also problems arising from corrupt
+object files and system errors when interacting with the target.
+Internal errors include situations where GDB has detected, at run time,
+a corrupt or erroneous situation.
+
+   When reporting an internal error, GDB uses `internal_error' and
+`gdb_assert'.
+
+   GDB must not call `abort' or `assert'.
+
+   _Pragmatics: There is no `internal_warning' function.  Either the
+code detected a user error, recovered from it and issued a `warning' or
+the code failed to correctly recover from the user error and issued an
+`internal_error'._
+
+17.7 Command Names
+==================
+
+GDB U/I commands are written `foo-bar', not `foo_bar'.
+
+17.8 Clean Design and Portable Implementation
+=============================================
+
+In addition to getting the syntax right, there's the little question of
+semantics.  Some things are done in certain ways in GDB because long
+experience has shown that the more obvious ways caused various kinds of
+trouble.
+
+   You can't assume the byte order of anything that comes from a target
+(including VALUEs, object files, and instructions).  Such things must
+be byte-swapped using `SWAP_TARGET_AND_HOST' in GDB, or one of the swap
+routines defined in `bfd.h', such as `bfd_get_32'.
+
+   You can't assume that you know what interface is being used to talk
+to the target system.  All references to the target must go through the
+current `target_ops' vector.
+
+   You can't assume that the host and target machines are the same
+machine (except in the "native" support modules).  In particular, you
+can't assume that the target machine's header files will be available
+on the host machine.  Target code must bring along its own header files
+- written from scratch or explicitly donated by their owner, to avoid
+copyright problems.
+
+   Insertion of new `#ifdef''s will be frowned upon.  It's much better
+to write the code portably than to conditionalize it for various
+systems.
+
+   New `#ifdef''s which test for specific compilers or manufacturers or
+operating systems are unacceptable.  All `#ifdef''s should test for
+features.  The information about which configurations contain which
+features should be segregated into the configuration files.  Experience
+has proven far too often that a feature unique to one particular system
+often creeps into other systems; and that a conditional based on some
+predefined macro for your current system will become worthless over
+time, as new versions of your system come out that behave differently
+with regard to this feature.
+
+   Adding code that handles specific architectures, operating systems,
+target interfaces, or hosts, is not acceptable in generic code.
+
+   One particularly notorious area where system dependencies tend to
+creep in is handling of file names.  The mainline GDB code assumes
+Posix semantics of file names: absolute file names begin with a forward
+slash `/', slashes are used to separate leading directories,
+case-sensitive file names.  These assumptions are not necessarily true
+on non-Posix systems such as MS-Windows.  To avoid system-dependent
+code where you need to take apart or construct a file name, use the
+following portable macros:
+
+`HAVE_DOS_BASED_FILE_SYSTEM'
+     This preprocessing symbol is defined to a non-zero value on hosts
+     whose filesystems belong to the MS-DOS/MS-Windows family.  Use this
+     symbol to write conditional code which should only be compiled for
+     such hosts.
+
+`IS_DIR_SEPARATOR (C)'
+     Evaluates to a non-zero value if C is a directory separator
+     character.  On Unix and GNU/Linux systems, only a slash `/' is
+     such a character, but on Windows, both `/' and `\' will pass.
+
+`IS_ABSOLUTE_PATH (FILE)'
+     Evaluates to a non-zero value if FILE is an absolute file name.
+     For Unix and GNU/Linux hosts, a name which begins with a slash `/'
+     is absolute.  On DOS and Windows, `d:/foo' and `x:\bar' are also
+     absolute file names.
+
+`FILENAME_CMP (F1, F2)'
+     Calls a function which compares file names F1 and F2 as
+     appropriate for the underlying host filesystem.  For Posix systems,
+     this simply calls `strcmp'; on case-insensitive filesystems it
+     will call `strcasecmp' instead.
+
+`DIRNAME_SEPARATOR'
+     Evaluates to a character which separates directories in
+     `PATH'-style lists, typically held in environment variables.  This
+     character is `:' on Unix, `;' on DOS and Windows.
+
+`SLASH_STRING'
+     This evaluates to a constant string you should use to produce an
+     absolute filename from leading directories and the file's basename.
+     `SLASH_STRING' is `"/"' on most systems, but might be `"\\"' for
+     some Windows-based ports.
+
+   In addition to using these macros, be sure to use portable library
+functions whenever possible.  For example, to extract a directory or a
+basename part from a file name, use the `dirname' and `basename'
+library functions (available in `libiberty' for platforms which don't
+provide them), instead of searching for a slash with `strrchr'.
+
+   Another way to generalize GDB along a particular interface is with an
+attribute struct.  For example, GDB has been generalized to handle
+multiple kinds of remote interfaces--not by `#ifdef's everywhere, but
+by defining the `target_ops' structure and having a current target (as
+well as a stack of targets below it, for memory references).  Whenever
+something needs to be done that depends on which remote interface we are
+using, a flag in the current target_ops structure is tested (e.g.,
+`target_has_stack'), or a function is called through a pointer in the
+current target_ops structure.  In this way, when a new remote interface
+is added, only one module needs to be touched--the one that actually
+implements the new remote interface.  Other examples of
+attribute-structs are BFD access to multiple kinds of object file
+formats, or GDB's access to multiple source languages.
+
+   Please avoid duplicating code.  For example, in GDB 3.x all the code
+interfacing between `ptrace' and the rest of GDB was duplicated in
+`*-dep.c', and so changing something was very painful.  In GDB 4.x,
+these have all been consolidated into `infptrace.c'.  `infptrace.c' can
+deal with variations between systems the same way any system-independent
+file would (hooks, `#if defined', etc.), and machines which are
+radically different don't need to use `infptrace.c' at all.
+
+   All debugging code must be controllable using the `set debug MODULE'
+command.  Do not use `printf' to print trace messages.  Use
+`fprintf_unfiltered(gdb_stdlog, ...'.  Do not use `#ifdef DEBUG'.
+
+
+File: gdbint.info,  Node: Porting GDB,  Next: Versions and Branches,  Prev: Misc Guidelines,  Up: Top
+
+18 Porting GDB
+**************
+
+Most of the work in making GDB compile on a new machine is in
+specifying the configuration of the machine.  Porting a new
+architecture to GDB can be broken into a number of steps.
+
+   * Ensure a BFD exists for executables of the target architecture in
+     the `bfd' directory.  If one does not exist, create one by
+     modifying an existing similar one.
+
+   * Implement a disassembler for the target architecture in the
+     `opcodes' directory.
+
+   * Define the target architecture in the `gdb' directory (*note
+     Adding a New Target: Adding a New Target.).  Add the pattern for
+     the new target to `configure.tgt' with the names of the files that
+     contain the code.  By convention the target architecture
+     definition for an architecture ARCH is placed in `ARCH-tdep.c'.
+
+     Within `ARCH-tdep.c' define the function `_initialize_ARCH_tdep'
+     which calls `gdbarch_register' to create the new `struct gdbarch'
+     for the architecture.
+
+   * If a new remote target is needed, consider adding a new remote
+     target by defining a function `_initialize_remote_ARCH'.  However
+     if at all possible use the GDB _Remote Serial Protocol_ for this
+     and implement the server side protocol independently with the
+     target.
+
+   * If desired implement a simulator in the `sim' directory.  This
+     should create the library `libsim.a' implementing the interface in
+     `remote-sim.h' (found in the `include' directory).
+
+   * Build and test.  If desired, lobby the GDB steering group to have
+     the new port included in the main distribution!
+
+   * Add a description of the new architecture to the main GDB user
+     guide (*note Configuration Specific Information:
+     (gdb)Configuration Specific Information.).
+
+
+
+File: gdbint.info,  Node: Versions and Branches,  Next: Start of New Year Procedure,  Prev: Porting GDB,  Up: Top
+
+19 Versions and Branches
+************************
+
+19.1 Versions
+=============
+
+GDB's version is determined by the file `gdb/version.in' and takes one
+of the following forms:
+
+MAJOR.MINOR
+MAJOR.MINOR.PATCHLEVEL
+     an official release (e.g., 6.2 or 6.2.1)
+
+MAJOR.MINOR.PATCHLEVEL.YYYYMMDD
+     a snapshot taken at YYYY-MM-DD-gmt (e.g., 6.1.50.20020302,
+     6.1.90.20020304, or 6.1.0.20020308)
+
+MAJOR.MINOR.PATCHLEVEL.YYYYMMDD-cvs
+     a CVS check out drawn on YYYY-MM-DD (e.g., 6.1.50.20020302-cvs,
+     6.1.90.20020304-cvs, or 6.1.0.20020308-cvs)
+
+MAJOR.MINOR.PATCHLEVEL.YYYYMMDD (VENDOR)
+     a vendor specific release of GDB, that while based on
+     MAJOR.MINOR.PATCHLEVEL.YYYYMMDD, may include additional changes
+
+   GDB's mainline uses the MAJOR and MINOR version numbers from the
+most recent release branch, with a PATCHLEVEL of 50.  At the time each
+new release branch is created, the mainline's MAJOR and MINOR version
+numbers are updated.
+
+   GDB's release branch is similar.  When the branch is cut, the
+PATCHLEVEL is changed from 50 to 90.  As draft releases are drawn from
+the branch, the PATCHLEVEL is incremented.  Once the first release
+(MAJOR.MINOR) has been made, the PATCHLEVEL is set to 0 and updates
+have an incremented PATCHLEVEL.
+
+   For snapshots, and CVS check outs, it is also possible to identify
+the CVS origin:
+
+MAJOR.MINOR.50.YYYYMMDD
+     drawn from the HEAD of mainline CVS (e.g., 6.1.50.20020302)
+
+MAJOR.MINOR.90.YYYYMMDD
+MAJOR.MINOR.91.YYYYMMDD ...
+     drawn from a release branch prior to the release (e.g.,
+     6.1.90.20020304)
+
+MAJOR.MINOR.0.YYYYMMDD
+MAJOR.MINOR.1.YYYYMMDD ...
+     drawn from a release branch after the release (e.g.,
+     6.2.0.20020308)
+
+   If the previous GDB version is 6.1 and the current version is 6.2,
+then, substituting 6 for MAJOR and 1 or 2 for MINOR, here's an
+illustration of a typical sequence:
+
+          <HEAD>
+             |
+     6.1.50.20020302-cvs
+             |
+             +--------------------------.
+             |                    <gdb_6_2-branch>
+             |                          |
+     6.2.50.20020303-cvs        6.1.90 (draft #1)
+             |                          |
+     6.2.50.20020304-cvs        6.1.90.20020304-cvs
+             |                          |
+     6.2.50.20020305-cvs        6.1.91 (draft #2)
+             |                          |
+     6.2.50.20020306-cvs        6.1.91.20020306-cvs
+             |                          |
+     6.2.50.20020307-cvs        6.2 (release)
+             |                          |
+     6.2.50.20020308-cvs        6.2.0.20020308-cvs
+             |                          |
+     6.2.50.20020309-cvs        6.2.1 (update)
+             |                          |
+     6.2.50.20020310-cvs         <branch closed>
+             |
+     6.2.50.20020311-cvs
+             |
+             +--------------------------.
+             |                     <gdb_6_3-branch>
+             |                          |
+     6.3.50.20020312-cvs        6.2.90 (draft #1)
+             |                          |
+
+19.2 Release Branches
+=====================
+
+GDB draws a release series (6.2, 6.2.1, ...) from a single release
+branch, and identifies that branch using the CVS branch tags:
+
+     gdb_MAJOR_MINOR-YYYYMMDD-branchpoint
+     gdb_MAJOR_MINOR-branch
+     gdb_MAJOR_MINOR-YYYYMMDD-release
+
+   _Pragmatics: To help identify the date at which a branch or release
+is made, both the branchpoint and release tags include the date that
+they are cut (YYYYMMDD) in the tag.  The branch tag, denoting the head
+of the branch, does not need this._
+
+19.3 Vendor Branches
+====================
+
+To avoid version conflicts, vendors are expected to modify the file
+`gdb/version.in' to include a vendor unique alphabetic identifier (an
+official GDB release never uses alphabetic characters in its version
+identifier).  E.g., `6.2widgit2', or `6.2 (Widgit Inc Patch 2)'.
+
+19.4 Experimental Branches
+==========================
+
+19.4.1 Guidelines
+-----------------
+
+GDB permits the creation of branches, cut from the CVS repository, for
+experimental development.  Branches make it possible for developers to
+share preliminary work, and maintainers to examine significant new
+developments.
+
+   The following are a set of guidelines for creating such branches:
+
+_a branch has an owner_
+     The owner can set further policy for a branch, but may not change
+     the ground rules.  In particular, they can set a policy for
+     commits (be it adding more reviewers or deciding who can commit).
+
+_all commits are posted_
+     All changes committed to a branch shall also be posted to the GDB
+     patches mailing list <gdb-patches at sourceware.org>.  While
+     commentary on such changes are encouraged, people should remember
+     that the changes only apply to a branch.
+
+_all commits are covered by an assignment_
+     This ensures that all changes belong to the Free Software
+     Foundation, and avoids the possibility that the branch may become
+     contaminated.
+
+_a branch is focused_
+     A focused branch has a single objective or goal, and does not
+     contain unnecessary or irrelevant changes.  Cleanups, where
+     identified, being be pushed into the mainline as soon as possible.
+
+_a branch tracks mainline_
+     This keeps the level of divergence under control.  It also keeps
+     the pressure on developers to push cleanups and other stuff into
+     the mainline.
+
+_a branch shall contain the entire GDB module_
+     The GDB module `gdb' should be specified when creating a branch
+     (branches of individual files should be avoided).  *Note Tags::.
+
+_a branch shall be branded using `version.in'_
+     The file `gdb/version.in' shall be modified so that it identifies
+     the branch OWNER and branch NAME, e.g.,
+     `6.2.50.20030303_owner_name' or `6.2 (Owner Name)'.
+
+
+19.4.2 Tags
+-----------
+
+To simplify the identification of GDB branches, the following branch
+tagging convention is strongly recommended:
+
+`OWNER_NAME-YYYYMMDD-branchpoint'
+`OWNER_NAME-YYYYMMDD-branch'
+     The branch point and corresponding branch tag.  YYYYMMDD is the
+     date that the branch was created.  A branch is created using the
+     sequence:
+          cvs rtag OWNER_NAME-YYYYMMDD-branchpoint gdb
+          cvs rtag -b -r OWNER_NAME-YYYYMMDD-branchpoint \
+             OWNER_NAME-YYYYMMDD-branch gdb
+
+`OWNER_NAME-YYYYMMDD-mergepoint'
+     The tagged point, on the mainline, that was used when merging the
+     branch on YYYYMMDD.  To merge in all changes since the branch was
+     cut, use a command sequence like:
+          cvs rtag OWNER_NAME-YYYYMMDD-mergepoint gdb
+          cvs update \
+             -jOWNER_NAME-YYYYMMDD-branchpoint
+             -jOWNER_NAME-YYYYMMDD-mergepoint
+     Similar sequences can be used to just merge in changes since the
+     last merge.
+
+
+For further information on CVS, see Concurrent Versions System
+(http://www.gnu.org/software/cvs/).
+
+
+File: gdbint.info,  Node: Start of New Year Procedure,  Next: Releasing GDB,  Prev: Versions and Branches,  Up: Top
+
+20 Start of New Year Procedure
+******************************
+
+At the start of each new year, the following actions should be
+performed:
+
+   * Rotate the ChangeLog file
+
+     The current `ChangeLog' file should be renamed into
+     `ChangeLog-YYYY' where YYYY is the year that has just passed.  A
+     new `ChangeLog' file should be created, and its contents should
+     contain a reference to the previous ChangeLog.  The following
+     should also be preserved at the end of the new ChangeLog, in order
+     to provide the appropriate settings when editing this file with
+     Emacs:
+          Local Variables:
+          mode: change-log
+          left-margin: 8
+          fill-column: 74
+          version-control: never
+          coding: utf-8
+          End:
+
+   * Add an entry for the newly created ChangeLog file
+     (`ChangeLog-YYYY') in `gdb/config/djgpp/fnchange.lst'.
+
+   * Update the copyright year in the startup message
+
+     Update the copyright year in:
+        *   file `top.c', function `print_gdb_version'
+
+        *   file `gdbserver/server.c', function `gdbserver_version'
+
+        *   file `gdbserver/gdbreplay.c', function `gdbreplay_version'
+
+   * Run the `copyright.py' Python script to add the new year in the
+     copyright notices of most source files.  This script has been
+     tested with Python 2.6 and 2.7.
+
+
+
+File: gdbint.info,  Node: Releasing GDB,  Next: Testsuite,  Prev: Start of New Year Procedure,  Up: Top
+
+21 Releasing GDB
+****************
+
+21.1 Branch Commit Policy
+=========================
+
+The branch commit policy is pretty slack.  GDB releases 5.0, 5.1 and
+5.2 all used the below:
+
+   * The `gdb/MAINTAINERS' file still holds.
+
+   * Don't fix something on the branch unless/until it is also fixed in
+     the trunk.  If this isn't possible, mentioning it in the
+     `gdb/PROBLEMS' file is better than committing a hack.
+
+   * When considering a patch for the branch, suggested criteria
+     include: Does it fix a build?  Does it fix the sequence `break
+     main; run' when debugging a static binary?
+
+   * The further a change is from the core of GDB, the less likely the
+     change will worry anyone (e.g., target specific code).
+
+   * Only post a proposal to change the core of GDB after you've sent
+     individual bribes to all the people listed in the `MAINTAINERS'
+     file ;-)
+
+   _Pragmatics: Provided updates are restricted to non-core
+functionality there is little chance that a broken change will be fatal.
+This means that changes such as adding a new architectures or (within
+reason) support for a new host are considered acceptable._
+
+21.2 Obsoleting code
+====================
+
+Before anything else, poke the other developers (and around the source
+code) to see if there is anything that can be removed from GDB (an old
+target, an unused file).
+
+   Obsolete code is identified by adding an `OBSOLETE' prefix to every
+line.  Doing this means that it is easy to identify something that has
+been obsoleted when greping through the sources.
+
+   The process is done in stages -- this is mainly to ensure that the
+wider GDB community has a reasonable opportunity to respond.  Remember,
+everything on the Internet takes a week.
+
+  1. Post the proposal on the GDB mailing list <gdb at sourceware.org>
+     Creating a bug report to track the task's state, is also highly
+     recommended.
+
+  2. Wait a week or so.
+
+  3. Post the proposal on the GDB Announcement mailing list
+     <gdb-announce at sourceware.org>.
+
+  4. Wait a week or so.
+
+  5. Go through and edit all relevant files and lines so that they are
+     prefixed with the word `OBSOLETE'.
+
+  6. Wait until the next GDB version, containing this obsolete code,
+     has been released.
+
+  7. Remove the obsolete code.
+
+_Maintainer note: While removing old code is regrettable it is
+hopefully better for GDB's long term development.  Firstly it helps the
+developers by removing code that is either no longer relevant or simply
+wrong.  Secondly since it removes any history associated with the file
+(effectively clearing the slate) the developer has a much freer hand
+when it comes to fixing broken files._
+
+21.3 Before the Branch
+======================
+
+The most important objective at this stage is to find and fix simple
+changes that become a pain to track once the branch is created.  For
+instance, configuration problems that stop GDB from even building.  If
+you can't get the problem fixed, document it in the `gdb/PROBLEMS' file.
+
+Prompt for `gdb/NEWS'
+---------------------
+
+People always forget.  Send a post reminding them but also if you know
+something interesting happened add it yourself.  The `schedule' script
+will mention this in its e-mail.
+
+Review `gdb/README'
+-------------------
+
+Grab one of the nightly snapshots and then walk through the
+`gdb/README' looking for anything that can be improved.  The `schedule'
+script will mention this in its e-mail.
+
+Refresh any imported files.
+---------------------------
+
+A number of files are taken from external repositories.  They include:
+
+   * `texinfo/texinfo.tex'
+
+   * `config.guess' et. al. (see the top-level `MAINTAINERS' file)
+
+   * `etc/standards.texi', `etc/make-stds.texi'
+
+Check the ARI
+-------------
+
+A.R.I. is an `awk' script (Awk Regression Index ;-) that checks for a
+number of errors and coding conventions.  The checks include things
+like using `malloc' instead of `xmalloc' and file naming problems.
+There shouldn't be any regressions.
+
+21.3.1 Review the bug data base
+-------------------------------
+
+Close anything obviously fixed.
+
+21.3.2 Check all cross targets build
+------------------------------------
+
+The targets are listed in `gdb/MAINTAINERS'.
+
+21.4 Cut the Branch
+===================
+
+Create the branch
+-----------------
+
+     $  u=5.1
+     $  v=5.2
+     $  V=`echo $v | sed 's/\./_/g'`
+     $  D=`date -u +%Y-%m-%d`
+     $  echo $u $V $D
+     5.1 5_2 2002-03-03
+     $  echo cvs -f -d :ext:sourceware.org:/cvs/src rtag \
+     -D $D-gmt gdb_$V-$D-branchpoint insight
+     cvs -f -d :ext:sourceware.org:/cvs/src rtag
+     -D 2002-03-03-gmt gdb_5_2-2002-03-03-branchpoint insight
+     $  ^echo ^^
+     ...
+     $  echo cvs -f -d :ext:sourceware.org:/cvs/src rtag \
+     -b -r gdb_$V-$D-branchpoint gdb_$V-branch insight
+     cvs -f -d :ext:sourceware.org:/cvs/src rtag \
+     -b -r gdb_5_2-2002-03-03-branchpoint gdb_5_2-branch insight
+     $  ^echo ^^
+     ...
+     $
+
+   * By using `-D YYYY-MM-DD-gmt', the branch is forced to an exact
+     date/time.
+
+   * The trunk is first tagged so that the branch point can easily be
+     found.
+
+   * Insight, which includes GDB, is tagged at the same time.
+
+   * `version.in' gets bumped to avoid version number conflicts.
+
+   * The reading of `.cvsrc' is disabled using `-f'.
+
+Update `version.in'
+-------------------
+
+     $  u=5.1
+     $  v=5.2
+     $  V=`echo $v | sed 's/\./_/g'`
+     $  echo $u $v$V
+     5.1 5_2
+     $  cd /tmp
+     $  echo cvs -f -d :ext:sourceware.org:/cvs/src co \
+     -r gdb_$V-branch src/gdb/version.in
+     cvs -f -d :ext:sourceware.org:/cvs/src co
+      -r gdb_5_2-branch src/gdb/version.in
+     $  ^echo ^^
+     U src/gdb/version.in
+     $  cd src/gdb
+     $  echo $u.90-0000-00-00-cvs > version.in
+     $  cat version.in
+     5.1.90-0000-00-00-cvs
+     $  cvs -f commit version.in
+
+   * `0000-00-00' is used as a date to pump prime the version.in update
+     mechanism.
+
+   * `.90' and the previous branch version are used as fairly arbitrary
+     initial branch version number.
+
+Update the web and news pages
+-----------------------------
+
+Something?
+
+Tweak cron to track the new branch
+----------------------------------
+
+The file `gdbadmin/cron/crontab' contains gdbadmin's cron table.  This
+file needs to be updated so that:
+
+   * A daily timestamp is added to the file `version.in'.
+
+   * The new branch is included in the snapshot process.
+
+See the file `gdbadmin/cron/README' for how to install the updated cron
+table.
+
+   The file `gdbadmin/ss/README' should also be reviewed to reflect any
+changes.  That file is copied to both the branch/ and current/ snapshot
+directories.
+
+Update the NEWS and README files
+--------------------------------
+
+The `NEWS' file needs to be updated so that on the branch it refers to
+_changes in the current release_ while on the trunk it also refers to
+_changes since the current release_.
+
+   The `README' file needs to be updated so that it refers to the
+current release.
+
+Post the branch info
+--------------------
+
+Send an announcement to the mailing lists:
+
+   * GDB Announcement mailing list <gdb-announce at sourceware.org>
+
+   * GDB Discussion mailing list <gdb at sourceware.org> and GDB Testers
+     mailing list <gdb-testers at sourceware.org>
+
+   _Pragmatics: The branch creation is sent to the announce list to
+ensure that people people not subscribed to the higher volume discussion
+list are alerted._
+
+   The announcement should include:
+
+   * The branch tag.
+
+   * How to check out the branch using CVS.
+
+   * The date/number of weeks until the release.
+
+   * The branch commit policy still holds.
+
+21.5 Stabilize the branch
+=========================
+
+Something goes here.
+
+21.6 Create a Release
+=====================
+
+The process of creating and then making available a release is broken
+down into a number of stages.  The first part addresses the technical
+process of creating a releasable tar ball.  The later stages address the
+process of releasing that tar ball.
+
+   When making a release candidate just the first section is needed.
+
+21.6.1 Create a release candidate
+---------------------------------
+
+The objective at this stage is to create a set of tar balls that can be
+made available as a formal release (or as a less formal release
+candidate).
+
+Freeze the branch
+.................
+
+Send out an e-mail notifying everyone that the branch is frozen to
+<gdb-patches at sourceware.org>.
+
+Establish a few defaults.
+.........................
+
+     $  b=gdb_5_2-branch
+     $  v=5.2
+     $  t=/sourceware/snapshot-tmp/gdbadmin-tmp
+     $  echo $t/$b/$v
+     /sourceware/snapshot-tmp/gdbadmin-tmp/gdb_5_2-branch/5.2
+     $  mkdir -p $t/$b/$v
+     $  cd $t/$b/$v
+     $  pwd
+     /sourceware/snapshot-tmp/gdbadmin-tmp/gdb_5_2-branch/5.2
+     $  which autoconf
+     /home/gdbadmin/bin/autoconf
+     $
+
+Notes:
+
+   * Check the `autoconf' version carefully.  You want to be using the
+     version documented in the toplevel `README-maintainer-mode' file.
+     It is very unlikely that the version of `autoconf' installed in
+     system directories (e.g., `/usr/bin/autoconf') is correct.
+
+Check out the relevant modules:
+...............................
+
+     $  for m in gdb insight
+     do
+     ( mkdir -p $m && cd $m && cvs -q -f -d /cvs/src co -P -r $b $m )
+     done
+     $
+
+Note:
+
+   * The reading of `.cvsrc' is disabled (`-f') so that there isn't any
+     confusion between what is written here and what your local `cvs'
+     really does.
+
+Update relevant files.
+......................
+
+`gdb/NEWS'
+     Major releases get their comments added as part of the mainline.
+     Minor releases should probably mention any significant bugs that
+     were fixed.
+
+     Don't forget to include the `ChangeLog' entry.
+
+          $  emacs gdb/src/gdb/NEWS
+          ...
+          c-x 4 a
+          ...
+          c-x c-s c-x c-c
+          $  cp gdb/src/gdb/NEWS insight/src/gdb/NEWS
+          $  cp gdb/src/gdb/ChangeLog insight/src/gdb/ChangeLog
+
+`gdb/README'
+     You'll need to update:
+
+        * The version.
+
+        * The update date.
+
+        * Who did it.
+
+          $  emacs gdb/src/gdb/README
+          ...
+          c-x 4 a
+          ...
+          c-x c-s c-x c-c
+          $  cp gdb/src/gdb/README insight/src/gdb/README
+          $  cp gdb/src/gdb/ChangeLog insight/src/gdb/ChangeLog
+
+     _Maintainer note: Hopefully the `README' file was reviewed before
+     the initial branch was cut so just a simple substitute is needed
+     to get it updated._
+
+     _Maintainer note: Other projects generate `README' and `INSTALL'
+     from the core documentation.  This might be worth pursuing._
+
+`gdb/version.in'
+          $  echo $v > gdb/src/gdb/version.in
+          $  cat gdb/src/gdb/version.in
+          5.2
+          $  emacs gdb/src/gdb/version.in
+          ...
+          c-x 4 a
+          ... Bump to version ...
+          c-x c-s c-x c-c
+          $  cp gdb/src/gdb/version.in insight/src/gdb/version.in
+          $  cp gdb/src/gdb/ChangeLog insight/src/gdb/ChangeLog
+
+
+Do the dirty work
+.................
+
+This is identical to the process used to create the daily snapshot.
+
+     $  for m in gdb insight
+     do
+     ( cd $m/src && gmake -f src-release $m.tar )
+     done
+
+   If the top level source directory does not have `src-release' (GDB
+version 5.3.1 or earlier), try these commands instead:
+
+     $  for m in gdb insight
+     do
+     ( cd $m/src && gmake -f Makefile.in $m.tar )
+     done
+
+Check the source files
+......................
+
+You're looking for files that have mysteriously disappeared.
+`distclean' has the habit of deleting files it shouldn't.  Watch out
+for the `version.in' update `cronjob'.
+
+     $  ( cd gdb/src && cvs -f -q -n update )
+     M djunpack.bat
+     ? gdb-5.1.91.tar
+     ? proto-toplev
+     ... lots of generated files ...
+     M gdb/ChangeLog
+     M gdb/NEWS
+     M gdb/README
+     M gdb/version.in
+     ... lots of generated files ...
+     $
+
+_Don't worry about the `gdb.info-??' or `gdb/p-exp.tab.c'.  They were
+generated (and yes `gdb.info-1' was also generated only something
+strange with CVS means that they didn't get suppressed).  Fixing it
+would be nice though._
+
+Create compressed versions of the release
+.........................................
+
+     $  cp */src/*.tar .
+     $  cp */src/*.bz2 .
+     $  ls -F
+     gdb/ gdb-5.2.tar insight/ insight-5.2.tar
+     $  for m in gdb insight
+     do
+     bzip2 -v -9 -c $m-$v.tar > $m-$v.tar.bz2
+     gzip -v -9 -c $m-$v.tar > $m-$v.tar.gz
+     done
+     $
+
+Note:
+
+   * A pipe such as `bunzip2 < xxx.bz2 | gzip -9 > xxx.gz' is not since,
+     in that mode, `gzip' does not know the name of the file and, hence,
+     can not include it in the compressed file.  This is also why the
+     release process runs `tar' and `bzip2' as separate passes.
+
+21.6.2 Sanity check the tar ball
+--------------------------------
+
+Pick a popular machine (Solaris/PPC?) and try the build on that.
+
+     $  bunzip2 < gdb-5.2.tar.bz2 | tar xpf -
+     $  cd gdb-5.2
+     $  ./configure
+     $  make
+     ...
+     $  ./gdb/gdb ./gdb/gdb
+     GNU gdb 5.2
+     ...
+     (gdb)  b main
+     Breakpoint 1 at 0x80732bc: file main.c, line 734.
+     (gdb)  run
+     Starting program: /tmp/gdb-5.2/gdb/gdb
+
+     Breakpoint 1, main (argc=1, argv=0xbffff8b4) at main.c:734
+     734       catch_errors (captured_main, &args, "", RETURN_MASK_ALL);
+     (gdb)  print args
+     $1 = {argc = 136426532, argv = 0x821b7f0}
+     (gdb)
+
+21.6.3 Make a release candidate available
+-----------------------------------------
+
+If this is a release candidate then the only remaining steps are:
+
+  1. Commit `version.in' and `ChangeLog'
+
+  2. Tweak `version.in' (and `ChangeLog' to read L.M.N-0000-00-00-cvs
+     so that the version update process can restart.
+
+  3. Make the release candidate available in
+     `ftp://sourceware.org/pub/gdb/snapshots/branch'
+
+  4. Notify the relevant mailing lists ( <gdb at sourceware.org> and
+     <gdb-testers at sourceware.org> that the candidate is available.
+
+21.6.4 Make a formal release available
+--------------------------------------
+
+(And you thought all that was required was to post an e-mail.)
+
+Install on sware
+................
+
+Copy the new files to both the release and the old release directory:
+
+     $  cp *.bz2 *.gz ~ftp/pub/gdb/old-releases/
+     $  cp *.bz2 *.gz ~ftp/pub/gdb/releases
+
+Clean up the releases directory so that only the most recent releases
+are available (e.g. keep 5.2 and 5.2.1 but remove 5.1):
+
+     $  cd ~ftp/pub/gdb/releases
+     $  rm ...
+
+Update the file `README' and `.message' in the releases directory:
+
+     $  vi README
+     ...
+     $  rm -f .message
+     $  ln README .message
+
+Update the web pages.
+.....................
+
+`htdocs/download/ANNOUNCEMENT'
+     This file, which is posted as the official announcement, includes:
+        * General announcement.
+
+        * News.  If making an M.N.1 release, retain the news from
+          earlier M.N release.
+
+        * Errata.
+
+`htdocs/index.html'
+`htdocs/news/index.html'
+`htdocs/download/index.html'
+     These files include:
+        * Announcement of the most recent release.
+
+        * News entry (remember to update both the top level and the
+          news directory).
+     These pages also need to be regenerate using `index.sh'.
+
+`download/onlinedocs/'
+     You need to find the magic command that is used to generate the
+     online docs from the `.tar.bz2'.  The best way is to look in the
+     output from one of the nightly `cron' jobs and then just edit
+     accordingly.  Something like:
+
+          $  ~/ss/update-web-docs \
+           ~ftp/pub/gdb/releases/gdb-5.2.tar.bz2 \
+           $PWD/www \
+           /www/sourceware/htdocs/gdb/download/onlinedocs \
+           gdb
+
+`download/ari/'
+     Just like the online documentation.  Something like:
+
+          $  /bin/sh ~/ss/update-web-ari \
+           ~ftp/pub/gdb/releases/gdb-5.2.tar.bz2 \
+           $PWD/www \
+           /www/sourceware/htdocs/gdb/download/ari \
+           gdb
+
+
+Shadow the pages onto gnu
+.........................
+
+Something goes here.
+
+Install the GDB tar ball on GNU
+...............................
+
+At the time of writing, the GNU machine was `gnudist.gnu.org' in
+`~ftp/gnu/gdb'.
+
+Make the `ANNOUNCEMENT'
+.......................
+
+Post the `ANNOUNCEMENT' file you created above to:
+
+   * GDB Announcement mailing list <gdb-announce at sourceware.org>
+
+   * General GNU Announcement list <info-gnu at gnu.org> (but delay it a
+     day or so to let things get out)
+
+   * GDB Bug Report mailing list <bug-gdb at gnu.org>
+
+21.6.5 Cleanup
+--------------
+
+The release is out but you're still not finished.
+
+Commit outstanding changes
+..........................
+
+In particular you'll need to commit any changes to:
+
+   * `gdb/ChangeLog'
+
+   * `gdb/version.in'
+
+   * `gdb/NEWS'
+
+   * `gdb/README'
+
+Tag the release
+...............
+
+Something like:
+
+     $  d=`date -u +%Y-%m-%d`
+     $  echo $d
+     2002-01-24
+     $  ( cd insight/src/gdb && cvs -f -q update )
+     $  ( cd insight/src && cvs -f -q tag gdb_5_2-$d-release )
+
+   Insight is used since that contains more of the release than GDB.
+
+Mention the release on the trunk
+................................
+
+Just put something in the `ChangeLog' so that the trunk also indicates
+when the release was made.
+
+Restart `gdb/version.in'
+........................
+
+If `gdb/version.in' does not contain an ISO date such as `2002-01-24'
+then the daily `cronjob' won't update it.  Having committed all the
+release changes it can be set to `5.2.0_0000-00-00-cvs' which will
+restart things (yes the `_' is important - it affects the snapshot
+process).
+
+   Don't forget the `ChangeLog'.
+
+Merge into trunk
+................
+
+The files committed to the branch may also need changes merged into the
+trunk.
+
+Revise the release schedule
+...........................
+
+Post a revised release schedule to GDB Discussion List
+<gdb at sourceware.org> with an updated announcement.  The schedule can be
+generated by running:
+
+     $  ~/ss/schedule `date +%s` schedule
+
+The first parameter is approximate date/time in seconds (from the epoch)
+of the most recent release.
+
+   Also update the schedule `cronjob'.
+
+21.7 Post release
+=================
+
+Remove any `OBSOLETE' code.
+
+
+File: gdbint.info,  Node: Testsuite,  Next: Hints,  Prev: Releasing GDB,  Up: Top
+
+22 Testsuite
+************
+
+The testsuite is an important component of the GDB package.  While it
+is always worthwhile to encourage user testing, in practice this is
+rarely sufficient; users typically use only a small subset of the
+available commands, and it has proven all too common for a change to
+cause a significant regression that went unnoticed for some time.
+
+   The GDB testsuite uses the DejaGNU testing framework.  The tests
+themselves are calls to various `Tcl' procs; the framework runs all the
+procs and summarizes the passes and fails.
+
+22.1 Using the Testsuite
+========================
+
+To run the testsuite, simply go to the GDB object directory (or to the
+testsuite's objdir) and type `make check'.  This just sets up some
+environment variables and invokes DejaGNU's `runtest' script.  While
+the testsuite is running, you'll get mentions of which test file is in
+use, and a mention of any unexpected passes or fails.  When the
+testsuite is finished, you'll get a summary that looks like this:
+
+                     === gdb Summary ===
+
+     # of expected passes            6016
+     # of unexpected failures        58
+     # of unexpected successes       5
+     # of expected failures          183
+     # of unresolved testcases       3
+     # of untested testcases         5
+
+   To run a specific test script, type:
+     make check RUNTESTFLAGS='TESTS'
+   where TESTS is a list of test script file names, separated by spaces.
+
+   If you use GNU make, you can use its `-j' option to run the
+testsuite in parallel.  This can greatly reduce the amount of time it
+takes for the testsuite to run.  In this case, if you set
+`RUNTESTFLAGS' then, by default, the tests will be run serially even
+under `-j'.  You can override this and force a parallel run by setting
+the `make' variable `FORCE_PARALLEL' to any non-empty value.  Note that
+the parallel `make check' assumes that you want to run the entire
+testsuite, so it is not compatible with some dejagnu options, like
+`--directory'.
+
+   The ideal test run consists of expected passes only; however, reality
+conspires to keep us from this ideal.  Unexpected failures indicate
+real problems, whether in GDB or in the testsuite.  Expected failures
+are still failures, but ones which have been decided are too hard to
+deal with at the time; for instance, a test case might work everywhere
+except on AIX, and there is no prospect of the AIX case being fixed in
+the near future.  Expected failures should not be added lightly, since
+you may be masking serious bugs in GDB.  Unexpected successes are
+expected fails that are passing for some reason, while unresolved and
+untested cases often indicate some minor catastrophe, such as the
+compiler being unable to deal with a test program.
+
+   When making any significant change to GDB, you should run the
+testsuite before and after the change, to confirm that there are no
+regressions.  Note that truly complete testing would require that you
+run the testsuite with all supported configurations and a variety of
+compilers; however this is more than really necessary.  In many cases
+testing with a single configuration is sufficient.  Other useful
+options are to test one big-endian (Sparc) and one little-endian (x86)
+host, a cross config with a builtin simulator (powerpc-eabi, mips-elf),
+or a 64-bit host (Alpha).
+
+   If you add new functionality to GDB, please consider adding tests
+for it as well; this way future GDB hackers can detect and fix their
+changes that break the functionality you added.  Similarly, if you fix
+a bug that was not previously reported as a test failure, please add a
+test case for it.  Some cases are extremely difficult to test, such as
+code that handles host OS failures or bugs in particular versions of
+compilers, and it's OK not to try to write tests for all of those.
+
+   DejaGNU supports separate build, host, and target machines.  However,
+some GDB test scripts do not work if the build machine and the host
+machine are not the same.  In such an environment, these scripts will
+give a result of "UNRESOLVED", like this:
+
+     UNRESOLVED: gdb.base/example.exp: This test script does not work on a remote host.
+
+22.2 Testsuite Parameters
+=========================
+
+Several variables exist to modify the behavior of the testsuite.
+
+   * `TRANSCRIPT'
+
+     Sometimes it is convenient to get a transcript of the commands
+     which the testsuite sends to GDB.  For example, if GDB crashes
+     during testing, a transcript can be used to more easily
+     reconstruct the failure when running GDB under GDB.
+
+     You can instruct the GDB testsuite to write transcripts by setting
+     the DejaGNU variable `TRANSCRIPT' (to any value) before invoking
+     `runtest' or `make check'.  The transcripts will be written into
+     DejaGNU's output directory.  One transcript will be made for each
+     invocation of GDB; they will be named `transcript.N', where N is
+     an integer.  The first line of the transcript file will show how
+     GDB was invoked; each subsequent line is a command sent as input
+     to GDB.
+
+          make check RUNTESTFLAGS=TRANSCRIPT=y
+
+     Note that the transcript is not always complete.  In particular,
+     tests of completion can yield partial command lines.
+
+   * `GDB'
+
+     Sometimes one wishes to test a different GDB than the one in the
+     build directory.  For example, one may wish to run the testsuite on
+     `/usr/bin/gdb'.
+
+          make check RUNTESTFLAGS=GDB=/usr/bin/gdb
+
+   * `GDBSERVER'
+
+     When testing a different GDB, it is often useful to also test a
+     different gdbserver.
+
+          make check RUNTESTFLAGS="GDB=/usr/bin/gdb GDBSERVER=/usr/bin/gdbserver"
+
+   * `INTERNAL_GDBFLAGS'
+
+     When running the testsuite normally one doesn't want whatever is in
+     `~/.gdbinit' to interfere with the tests, therefore the test
+     harness passes `-nx' to GDB.  One also doesn't want any windowed
+     version of GDB, e.g., `gdb -tui', to run.  This is achieved via
+     `INTERNAL_GDBFLAGS'.
+
+          set INTERNAL_GDBFLAGS "-nw -nx"
+
+     This is all well and good, except when testing an installed GDB
+     that has been configured with `--with-system-gdbinit'.  Here one
+     does not want `~/.gdbinit' loaded but one may want the system
+     `.gdbinit' file loaded.  This can be achieved by pointing `$HOME'
+     at a directory without a `.gdbinit' and by overriding
+     `INTERNAL_GDBFLAGS' and removing `-nx'.
+
+          cd testsuite
+          HOME=`pwd` runtest \
+            GDB=/usr/bin/gdb \
+            GDBSERVER=/usr/bin/gdbserver \
+            INTERNAL_GDBFLAGS=-nw
+
+
+   There are two ways to run the testsuite and pass additional
+parameters to DejaGnu.  The first is with `make check' and specifying
+the makefile variable `RUNTESTFLAGS'.
+
+     make check RUNTESTFLAGS=TRANSCRIPT=y
+
+   The second is to cd to the `testsuite' directory and invoke the
+DejaGnu `runtest' command directly.
+
+     cd testsuite
+     make site.exp
+     runtest TRANSCRIPT=y
+
+22.3 Testsuite Configuration
+============================
+
+It is possible to adjust the behavior of the testsuite by defining the
+global variables listed below, either in a `site.exp' file, or in a
+board file.
+
+   * `gdb_test_timeout'
+
+     Defining this variable changes the default timeout duration used
+     during communication with GDB.  More specifically, the global
+     variable used during testing is `timeout', but this variable gets
+     reset to `gdb_test_timeout' at the beginning of each testcase,
+     making sure that any local change to `timeout' in a testcase does
+     not affect subsequent testcases.
+
+     This global variable comes in handy when the debugger is slower
+     than normal due to the testing environment, triggering unexpected
+     `TIMEOUT' test failures.  Examples include when testing on a
+     remote machine, or against a system where communications are slow.
+
+     If not specifically defined, this variable gets automatically
+     defined to the same value as `timeout' during the testsuite
+     initialization.  The default value of the timeout is defined in
+     the file `gdb/testsuite/config/unix.exp' that is part of the GDB
+     test suite(1).
+
+
+22.4 Testsuite Organization
+===========================
+
+The testsuite is entirely contained in `gdb/testsuite'.  While the
+testsuite includes some makefiles and configury, these are very minimal,
+and used for little besides cleaning up, since the tests themselves
+handle the compilation of the programs that GDB will run.  The file
+`testsuite/lib/gdb.exp' contains common utility procs useful for all
+GDB tests, while the directory `testsuite/config' contains
+configuration-specific files, typically used for special-purpose
+definitions of procs like `gdb_load' and `gdb_start'.
+
+   The tests themselves are to be found in `testsuite/gdb.*' and
+subdirectories of those.  The names of the test files must always end
+with `.exp'.  DejaGNU collects the test files by wildcarding in the
+test directories, so both subdirectories and individual files get
+chosen and run in alphabetical order.
+
+   The following table lists the main types of subdirectories and what
+they are for.  Since DejaGNU finds test files no matter where they are
+located, and since each test file sets up its own compilation and
+execution environment, this organization is simply for convenience and
+intelligibility.
+
+`gdb.base'
+     This is the base testsuite.  The tests in it should apply to all
+     configurations of GDB (but generic native-only tests may live
+     here).  The test programs should be in the subset of C that is
+     valid K&R, ANSI/ISO, and C++ (`#ifdef's are allowed if necessary,
+     for instance for prototypes).
+
+`gdb.LANG'
+     Language-specific tests for any language LANG besides C.  Examples
+     are `gdb.cp' and `gdb.java'.
+
+`gdb.PLATFORM'
+     Non-portable tests.  The tests are specific to a specific
+     configuration (host or target), such as HP-UX or eCos.  Example is
+     `gdb.hp', for HP-UX.
+
+`gdb.COMPILER'
+     Tests specific to a particular compiler.  As of this writing (June
+     1999), there aren't currently any groups of tests in this category
+     that couldn't just as sensibly be made platform-specific, but one
+     could imagine a `gdb.gcc', for tests of GDB's handling of GCC
+     extensions.
+
+`gdb.SUBSYSTEM'
+     Tests that exercise a specific GDB subsystem in more depth.  For
+     instance, `gdb.disasm' exercises various disassemblers, while
+     `gdb.stabs' tests pathways through the stabs symbol reader.
+
+22.5 Writing Tests
+==================
+
+In many areas, the GDB tests are already quite comprehensive; you
+should be able to copy existing tests to handle new cases.
+
+   You should try to use `gdb_test' whenever possible, since it
+includes cases to handle all the unexpected errors that might happen.
+However, it doesn't cost anything to add new test procedures; for
+instance, `gdb.base/exprs.exp' defines a `test_expr' that calls
+`gdb_test' multiple times.
+
+   Only use `send_gdb' and `gdb_expect' when absolutely necessary.
+Even if GDB has several valid responses to a command, you can use
+`gdb_test_multiple'.  Like `gdb_test', `gdb_test_multiple' recognizes
+internal errors and unexpected prompts.
+
+   Do not write tests which expect a literal tab character from GDB.
+On some operating systems (e.g. OpenBSD) the TTY layer expands tabs to
+spaces, so by the time GDB's output reaches expect the tab is gone.
+
+   The source language programs do _not_ need to be in a consistent
+style.  Since GDB is used to debug programs written in many different
+styles, it's worth having a mix of styles in the testsuite; for
+instance, some GDB bugs involving the display of source lines would
+never manifest themselves if the programs used GNU coding style
+uniformly.
+
+   Some testcase results need more detailed explanation:
+
+`KFAIL'
+     Known problem of GDB itself.  You must specify the GDB bug report
+     number like in these sample tests:
+          kfail "gdb/13392" "continue to marker 2"
+     or
+          setup_kfail gdb/13392 "*-*-*"
+          kfail "continue to marker 2"
+
+`XFAIL'
+     Known problem of environment.  This typically includes GCC but it
+     includes also many other system components which cannot be fixed
+     in the GDB project.  Sample test with sanity check not knowing the
+     specific cause of the problem:
+          # On x86_64 it is commonly about 4MB.
+          if {$stub_size > 25000000} {
+              xfail "stub size $stub_size is too large"
+              return
+          }
+
+     You should provide bug report number for the failing component of
+     the environment, if such bug report is available:
+          if {[test_compiler_info {gcc-[0-3]-*}]
+             || [test_compiler_info {gcc-4-[0-5]-*}]} {
+             setup_xfail "gcc/46955" *-*-*
+          }
+          gdb_test "python print ttype.template_argument(2)" "&C::c"
+
+22.6 Board settings
+===================
+
+In GDB testsuite, the tests can be configured or customized in the board
+file by means of "Board Settings".  Each setting   should be consulted
+by test cases that depend on the corresponding feature.
+
+   Here are the supported board settings:
+
+`gdb,cannot_call_functions'
+     The board does not support inferior call, that is, invoking
+     inferior functions in GDB.
+
+`gdb,can_reverse'
+     The board supports reverse execution.
+
+`gdb,no_hardware_watchpoints'
+     The board does not support hardware watchpoints.
+
+`gdb,nofileio'
+     GDB is unable to intercept target file operations in remote and
+     perform them on the host.
+
+`gdb,noinferiorio'
+     The board is unable to provide I/O capability to the inferior.
+
+`gdb,nosignals'
+     The board does not support signals.
+
+`gdb,skip_huge_test'
+     Skip time-consuming tests on the board with slow connection.
+
+`gdb,skip_float_tests'
+     Skip tests related to float points on target board.
+
+`gdb,use_precord'
+     The board supports process record.
+
+`gdb_server_prog'
+     The location of GDBserver.  If GDBserver somewhere other than its
+     default location is used in test, specify the location of
+     GDBserver in this variable.  The location is a file name of
+     GDBserver that can be either absolute or relative to testsuite
+     subdirectory in build directory.
+
+`in_proc_agent'
+     The location of in-process agent.  If in-process agent other than
+     its default location is used in test, specify the location of
+     in-process agent in this variable.  The location is a file name of
+     in-process agent that can be either  absolute or relative to
+     testsuite subdirectory in build directory.
+
+`noargs'
+     GDB does not support argument passing for inferior.
+
+`no_long_long'
+     The board does not support type `long long'.
+
+`use_gdb_stub'
+     The tests are running with gdb stub.
+
+   ---------- Footnotes ----------
+
+   (1) If you are using a board file, it could override the test-suite
+default; search the board file for "timeout".
+
+
+File: gdbint.info,  Node: Hints,  Next: GDB Observers,  Prev: Testsuite,  Up: Top
+
+23 Hints
+********
+
+Check the `README' file, it often has useful information that does not
+appear anywhere else in the directory.
+
+* Menu:
+
+* Getting Started::		Getting started working on GDB
+* Debugging GDB::		Debugging GDB with itself
+
+
+File: gdbint.info,  Node: Getting Started,  Next: Debugging GDB,  Up: Hints
+
+23.1 Getting Started
+====================
+
+GDB is a large and complicated program, and if you first starting to
+work on it, it can be hard to know where to start.  Fortunately, if you
+know how to go about it, there are ways to figure out what is going on.
+
+   This manual, the GDB Internals manual, has information which applies
+generally to many parts of GDB.
+
+   Information about particular functions or data structures are
+located in comments with those functions or data structures.  If you
+run across a function or a global variable which does not have a
+comment correctly explaining what is does, this can be thought of as a
+bug in GDB; feel free to submit a bug report, with a suggested comment
+if you can figure out what the comment should say.  If you find a
+comment which is actually wrong, be especially sure to report that.
+
+   Comments explaining the function of macros defined in host, target,
+or native dependent files can be in several places.  Sometimes they are
+repeated every place the macro is defined.  Sometimes they are where the
+macro is used.  Sometimes there is a header file which supplies a
+default definition of the macro, and the comment is there.  This manual
+also documents all the available macros.
+
+   Start with the header files.  Once you have some idea of how GDB's
+internal symbol tables are stored (see `symtab.h', `gdbtypes.h'), you
+will find it much easier to understand the code which uses and creates
+those symbol tables.
+
+   You may wish to process the information you are getting somehow, to
+enhance your understanding of it.  Summarize it, translate it to another
+language, add some (perhaps trivial or non-useful) feature to GDB, use
+the code to predict what a test case would do and write the test case
+and verify your prediction, etc.  If you are reading code and your eyes
+are starting to glaze over, this is a sign you need to use a more active
+approach.
+
+   Once you have a part of GDB to start with, you can find more
+specifically the part you are looking for by stepping through each
+function with the `next' command.  Do not use `step' or you will
+quickly get distracted; when the function you are stepping through
+calls another function try only to get a big-picture understanding
+(perhaps using the comment at the beginning of the function being
+called) of what it does.  This way you can identify which of the
+functions being called by the function you are stepping through is the
+one which you are interested in.  You may need to examine the data
+structures generated at each stage, with reference to the comments in
+the header files explaining what the data structures are supposed to
+look like.
+
+   Of course, this same technique can be used if you are just reading
+the code, rather than actually stepping through it.  The same general
+principle applies--when the code you are looking at calls something
+else, just try to understand generally what the code being called does,
+rather than worrying about all its details.
+
+   A good place to start when tracking down some particular area is with
+a command which invokes that feature.  Suppose you want to know how
+single-stepping works.  As a GDB user, you know that the `step' command
+invokes single-stepping.  The command is invoked via command tables
+(see `command.h'); by convention the function which actually performs
+the command is formed by taking the name of the command and adding
+`_command', or in the case of an `info' subcommand, `_info'.  For
+example, the `step' command invokes the `step_command' function and the
+`info display' command invokes `display_info'.  When this convention is
+not followed, you might have to use `grep' or `M-x tags-search' in
+emacs, or run GDB on itself and set a breakpoint in `execute_command'.
+
+   If all of the above fail, it may be appropriate to ask for
+information on `bug-gdb'.  But _never_ post a generic question like "I
+was wondering if anyone could give me some tips about understanding
+GDB"--if we had some magic secret we would put it in this manual.
+Suggestions for improving the manual are always welcome, of course.
+
diff --git a/gdb/doc/gdbint.info-2 b/gdb/doc/gdbint.info-2
new file mode 100644
index 0000000..506f57d
--- /dev/null
+++ b/gdb/doc/gdbint.info-2
@@ -0,0 +1,1598 @@
+This is gdbint.info, produced by makeinfo version 4.8 from
+./gdbint.texinfo.
+
+INFO-DIR-SECTION Software development
+START-INFO-DIR-ENTRY
+* Gdb-Internals: (gdbint).	The GNU debugger's internals.
+END-INFO-DIR-ENTRY
+
+   Copyright (C) 1990-1994, 1996, 1998-2006, 2008-2012 Free Software
+Foundation, Inc.  Contributed by Cygnus Solutions.  Written by John
+Gilmore.  Second Edition by Stan Shebs.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+   This file documents the internals of the GNU debugger GDB.
+
+   Copyright (C) 1990-1994, 1996, 1998-2006, 2008-2012 Free Software
+Foundation, Inc.  Contributed by Cygnus Solutions.  Written by John
+Gilmore.  Second Edition by Stan Shebs.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+
+File: gdbint.info,  Node: Debugging GDB,  Prev: Getting Started,  Up: Hints
+
+23.2 Debugging GDB with itself
+==============================
+
+If GDB is limping on your machine, this is the preferred way to get it
+fully functional.  Be warned that in some ancient Unix systems, like
+Ultrix 4.2, a program can't be running in one process while it is being
+debugged in another.  Rather than typing the command `./gdb ./gdb',
+which works on Suns and such, you can copy `gdb' to `gdb2' and then
+type `./gdb ./gdb2'.
+
+   When you run GDB in the GDB source directory, it will read
+`gdb-gdb.gdb' file (plus possibly `gdb-gdb.py' file) that sets up some
+simple things to make debugging gdb easier.  The `info' command, when
+executed without a subcommand in a GDB being debugged by gdb, will pop
+you back up to the top level gdb.  See `gdb-gdb.gdb' for details.
+
+   If you use emacs, you will probably want to do a `make TAGS' after
+you configure your distribution; this will put the machine dependent
+routines for your local machine where they will be accessed first by
+`M-.'
+
+   Also, make sure that you've either compiled GDB with your local cc,
+or have run `fixincludes' if you are compiling with gcc.
+
+23.3 Submitting Patches
+=======================
+
+Thanks for thinking of offering your changes back to the community of
+GDB users.  In general we like to get well designed enhancements.
+Thanks also for checking in advance about the best way to transfer the
+changes.
+
+   The GDB maintainers will only install "cleanly designed" patches.
+This manual summarizes what we believe to be clean design for GDB.
+
+   If the maintainers don't have time to put the patch in when it
+arrives, or if there is any question about a patch, it goes into a
+large queue with everyone else's patches and bug reports.
+
+   The legal issue is that to incorporate substantial changes requires a
+copyright assignment from you and/or your employer, granting ownership
+of the changes to the Free Software Foundation.  You can get the
+standard documents for doing this by sending mail to `gnu at gnu.org' and
+asking for it.  We recommend that people write in "All programs owned
+by the Free Software Foundation" as "NAME OF PROGRAM", so that changes
+in many programs (not just GDB, but GAS, Emacs, GCC, etc) can be
+contributed with only one piece of legalese pushed through the
+bureaucracy and filed with the FSF.  We can't start merging changes
+until this paperwork is received by the FSF (their rules, which we
+follow since we maintain it for them).
+
+   Technically, the easiest way to receive changes is to receive each
+feature as a small context diff or unidiff, suitable for `patch'.  Each
+message sent to me should include the changes to C code and header
+files for a single feature, plus `ChangeLog' entries for each directory
+where files were modified, and diffs for any changes needed to the
+manuals (`gdb/doc/gdb.texinfo' or `gdb/doc/gdbint.texinfo').  If there
+are a lot of changes for a single feature, they can be split down into
+multiple messages.
+
+   In this way, if we read and like the feature, we can add it to the
+sources with a single patch command, do some testing, and check it in.
+If you leave out the `ChangeLog', we have to write one.  If you leave
+out the doc, we have to puzzle out what needs documenting.  Etc., etc.
+
+   The reason to send each change in a separate message is that we will
+not install some of the changes.  They'll be returned to you with
+questions or comments.  If we're doing our job correctly, the message
+back to you will say what you have to fix in order to make the change
+acceptable.  The reason to have separate messages for separate features
+is so that the acceptable changes can be installed while one or more
+changes are being reworked.  If multiple features are sent in a single
+message, we tend to not put in the effort to sort out the acceptable
+changes from the unacceptable, so none of the features get installed
+until all are acceptable.
+
+   If this sounds painful or authoritarian, well, it is.  But we get a
+lot of bug reports and a lot of patches, and many of them don't get
+installed because we don't have the time to finish the job that the bug
+reporter or the contributor could have done.  Patches that arrive
+complete, working, and well designed, tend to get installed on the day
+they arrive.  The others go into a queue and get installed as time
+permits, which, since the maintainers have many demands to meet, may not
+be for quite some time.
+
+   Please send patches directly to the GDB maintainers
+<gdb-patches at sourceware.org>.
+
+23.4 Build Script
+=================
+
+The script `gdb_buildall.sh' builds GDB with flag
+`--enable-targets=all' set.  This builds GDB with all supported targets
+activated.  This helps testing GDB when doing changes that affect more
+than one architecture and is much faster than using `gdb_mbuild.sh'.
+
+   After building GDB the script checks which architectures are
+supported and then switches the current architecture to each of those
+to get information about the architecture.  The test results are stored
+in log files in the directory the script was called from.
+
+
+File: gdbint.info,  Node: GDB Observers,  Next: GNU Free Documentation License,  Prev: Hints,  Up: Top
+
+Appendix A GDB Currently available observers
+********************************************
+
+A.1 Implementation rationale
+============================
+
+An "observer" is an entity which is interested in being notified when
+GDB reaches certain states, or certain events occur in GDB.  The entity
+being observed is called the "subject".  To receive notifications, the
+observer attaches a callback to the subject.  One subject can have
+several observers.
+
+   `observer.c' implements an internal generic low-level event
+notification mechanism.  This generic event notification mechanism is
+then re-used to implement the exported high-level notification
+management routines for all possible notifications.
+
+   The current implementation of the generic observer provides support
+for contextual data.  This contextual data is given to the subject when
+attaching the callback.  In return, the subject will provide this
+contextual data back to the observer as a parameter of the callback.
+
+   Note that the current support for the contextual data is only
+partial, as it lacks a mechanism that would deallocate this data when
+the callback is detached.  This is not a problem so far, as this
+contextual data is only used internally to hold a function pointer.
+Later on, if a certain observer needs to provide support for user-level
+contextual data, then the generic notification mechanism will need to be
+enhanced to allow the observer to provide a routine to deallocate the
+data when attaching the callback.
+
+   The observer implementation is also currently not reentrant.  In
+particular, it is therefore not possible to call the attach or detach
+routines during a notification.
+
+A.2 Debugging
+=============
+
+Observer notifications can be traced using the command `set debug
+observer 1' (*note Optional messages about internal happenings:
+(gdb)Debugging Output.).
+
+A.3 `normal_stop' Notifications
+===============================
+
+GDB notifies all `normal_stop' observers when the inferior execution
+has just stopped, the associated messages and annotations have been
+printed, and the control is about to be returned to the user.
+
+   Note that the `normal_stop' notification is not emitted when the
+execution stops due to a breakpoint, and this breakpoint has a
+condition that is not met.  If the breakpoint has any associated
+commands list, the commands are executed after the notification is
+emitted.
+
+   The following interfaces are available to manage observers:
+
+ -- Function: extern struct observer *observer_attach_EVENT
+          (observer_EVENT_ftype *F)
+     Using the function F, create an observer that is notified when
+     ever EVENT occurs, return the observer.
+
+ -- Function: extern void observer_detach_EVENT (struct observer
+          *OBSERVER);
+     Remove OBSERVER from the list of observers to be notified when
+     EVENT occurs.
+
+ -- Function: extern void observer_notify_EVENT (void);
+     Send a notification to all EVENT observers.
+
+   The following observable events are defined:
+
+ -- Function: void normal_stop (struct bpstats *BS, int PRINT_FRAME)
+     The inferior has stopped for real.  The  BS argument describes the
+     breakpoints were are stopped at, if any.  Second argument
+     PRINT_FRAME non-zero means display the location where the inferior
+     has stopped.
+
+ -- Function: void target_changed (struct target_ops *TARGET)
+     The target's register contents have changed.
+
+ -- Function: void executable_changed (void)
+     The executable being debugged by GDB has changed: The user decided
+     to debug a different program, or the program he was debugging has
+     been modified since being loaded by the debugger (by being
+     recompiled, for instance).
+
+ -- Function: void inferior_created (struct target_ops *OBJFILE, int
+          FROM_TTY)
+     GDB has just connected to an inferior.  For `run', GDB calls this
+     observer while the inferior is still stopped at the entry-point
+     instruction.  For `attach' and `core', GDB calls this observer
+     immediately after connecting to the inferior, and before any
+     information on the inferior has been printed.
+
+ -- Function: void solib_loaded (struct so_list *SOLIB)
+     The shared library specified by SOLIB has been loaded.  Note that
+     when GDB calls this observer, the library's symbols probably
+     haven't been loaded yet.
+
+ -- Function: void solib_unloaded (struct so_list *SOLIB)
+     The shared library specified by SOLIB has been unloaded.  Note
+     that when GDB calls this observer, the library's symbols have not
+     been unloaded yet, and thus are still available.
+
+ -- Function: void new_objfile (struct objfile *OBJFILE)
+     The symbol file specified by OBJFILE has been loaded.  Called with
+     OBJFILE equal to `NULL' to indicate previously loaded symbol table
+     data has now been invalidated.
+
+ -- Function: void new_thread (struct thread_info *T)
+     The thread specified by T has been created.
+
+ -- Function: void thread_exit (struct thread_info *T, int SILENT)
+     The thread specified by T has exited.  The SILENT argument
+     indicates that GDB is removing the thread from its tables without
+     wanting to notify the user about it.
+
+ -- Function: void thread_stop_requested (ptid_t PTID)
+     An explicit stop request was issued to PTID.  If PTID equals
+     MINUS_ONE_PTID, the request applied to all threads.  If
+     `ptid_is_pid(ptid)' returns true, the request applied to all
+     threads of the process pointed at by PTID.  Otherwise, the request
+     applied to the single thread pointed at by PTID.
+
+ -- Function: void target_resumed (ptid_t PTID)
+     The target was resumed.  The PTID parameter specifies which thread
+     was resume, and may be RESUME_ALL if all threads are resumed.
+
+ -- Function: void about_to_proceed (void)
+     The target is about to be proceeded.
+
+ -- Function: void breakpoint_created (struct breakpoint *B)
+     A new breakpoint B has been created.
+
+ -- Function: void breakpoint_deleted (struct breakpoint *B)
+     A breakpoint has been destroyed.  The argument B is the pointer to
+     the destroyed breakpoint.
+
+ -- Function: void breakpoint_modified (struct breakpoint *B)
+     A breakpoint has been modified in some way.  The argument B is the
+     modified breakpoint.
+
+ -- Function: void tracepoint_created (int TPNUM)
+     A new tracepoint has been created.  The argument TPNUM is the
+     number of the newly-created tracepoint.
+
+ -- Function: void tracepoint_deleted (int TPNUM)
+     A tracepoint has been destroyed.  The argument TPNUM is the number
+     of the newly-destroyed tracepoint.
+
+ -- Function: void tracepoint_modified (int TPNUM)
+     A tracepoint has been modified in some way.  The argument TPNUM is
+     the number of the modified tracepoint.
+
+ -- Function: void architecture_changed (struct gdbarch *NEWARCH)
+     The current architecture has changed.  The argument NEWARCH is a
+     pointer to the new architecture.
+
+ -- Function: void thread_ptid_changed (ptid_t OLD_PTID, ptid_t
+          NEW_PTID)
+     The thread's ptid has changed.  The OLD_PTID parameter specifies
+     the old value, and NEW_PTID specifies the new value.
+
+ -- Function: void inferior_added (struct inferior *INF)
+     The inferior INF has been added to the list of inferiors.  At this
+     point, it might not be associated with any process.
+
+ -- Function: void inferior_appeared (struct inferior *INF)
+     The inferior identified by INF has been attached to a process.
+
+ -- Function: void inferior_exit (struct inferior *INF)
+     Either the inferior associated with INF has been detached from the
+     process, or the process has exited.
+
+ -- Function: void inferior_removed (struct inferior *INF)
+     The inferior INF has been removed from the list of inferiors.
+     This method is called immediately before freeing INF.
+
+ -- Function: void memory_changed (CORE_ADDR ADDR, int LEN, const
+          bfd_byte *DATA)
+     Bytes from DATA to DATA + LEN have been written to the current
+     inferior at ADDR.
+
+ -- Function: void before_prompt (const char *CURRENT_PROMPT)
+     Called before a top-level prompt is displayed.  CURRENT_PROMPT is
+     the current top-level prompt.
+
+ -- Function: void gdb_datadir_changed (void)
+     Variable gdb_datadir has been set.  The value may not necessarily
+     change.
+
+ -- Function: void test_notification (int SOMEARG)
+     This observer is used for internal testing.  Do not use.  See
+     testsuite/gdb.gdb/observer.exp.
+
+
+File: gdbint.info,  Node: GNU Free Documentation License,  Next: Concept Index,  Prev: GDB Observers,  Up: Top
+
+Appendix B GNU Free Documentation License
+*****************************************
+
+                     Version 1.3, 3 November 2008
+
+     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+     `http://fsf.org/'
+
+     Everyone is permitted to copy and distribute verbatim copies
+     of this license document, but changing it is not allowed.
+
+  0. PREAMBLE
+
+     The purpose of this License is to make a manual, textbook, or other
+     functional and useful document "free" in the sense of freedom: to
+     assure everyone the effective freedom to copy and redistribute it,
+     with or without modifying it, either commercially or
+     noncommercially.  Secondarily, this License preserves for the
+     author and publisher a way to get credit for their work, while not
+     being considered responsible for modifications made by others.
+
+     This License is a kind of "copyleft", which means that derivative
+     works of the document must themselves be free in the same sense.
+     It complements the GNU General Public License, which is a copyleft
+     license designed for free software.
+
+     We have designed this License in order to use it for manuals for
+     free software, because free software needs free documentation: a
+     free program should come with manuals providing the same freedoms
+     that the software does.  But this License is not limited to
+     software manuals; it can be used for any textual work, regardless
+     of subject matter or whether it is published as a printed book.
+     We recommend this License principally for works whose purpose is
+     instruction or reference.
+
+  1. APPLICABILITY AND DEFINITIONS
+
+     This License applies to any manual or other work, in any medium,
+     that contains a notice placed by the copyright holder saying it
+     can be distributed under the terms of this License.  Such a notice
+     grants a world-wide, royalty-free license, unlimited in duration,
+     to use that work under the conditions stated herein.  The
+     "Document", below, refers to any such manual or work.  Any member
+     of the public is a licensee, and is addressed as "you".  You
+     accept the license if you copy, modify or distribute the work in a
+     way requiring permission under copyright law.
+
+     A "Modified Version" of the Document means any work containing the
+     Document or a portion of it, either copied verbatim, or with
+     modifications and/or translated into another language.
+
+     A "Secondary Section" is a named appendix or a front-matter section
+     of the Document that deals exclusively with the relationship of the
+     publishers or authors of the Document to the Document's overall
+     subject (or to related matters) and contains nothing that could
+     fall directly within that overall subject.  (Thus, if the Document
+     is in part a textbook of mathematics, a Secondary Section may not
+     explain any mathematics.)  The relationship could be a matter of
+     historical connection with the subject or with related matters, or
+     of legal, commercial, philosophical, ethical or political position
+     regarding them.
+
+     The "Invariant Sections" are certain Secondary Sections whose
+     titles are designated, as being those of Invariant Sections, in
+     the notice that says that the Document is released under this
+     License.  If a section does not fit the above definition of
+     Secondary then it is not allowed to be designated as Invariant.
+     The Document may contain zero Invariant Sections.  If the Document
+     does not identify any Invariant Sections then there are none.
+
+     The "Cover Texts" are certain short passages of text that are
+     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+     that says that the Document is released under this License.  A
+     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+     be at most 25 words.
+
+     A "Transparent" copy of the Document means a machine-readable copy,
+     represented in a format whose specification is available to the
+     general public, that is suitable for revising the document
+     straightforwardly with generic text editors or (for images
+     composed of pixels) generic paint programs or (for drawings) some
+     widely available drawing editor, and that is suitable for input to
+     text formatters or for automatic translation to a variety of
+     formats suitable for input to text formatters.  A copy made in an
+     otherwise Transparent file format whose markup, or absence of
+     markup, has been arranged to thwart or discourage subsequent
+     modification by readers is not Transparent.  An image format is
+     not Transparent if used for any substantial amount of text.  A
+     copy that is not "Transparent" is called "Opaque".
+
+     Examples of suitable formats for Transparent copies include plain
+     ASCII without markup, Texinfo input format, LaTeX input format,
+     SGML or XML using a publicly available DTD, and
+     standard-conforming simple HTML, PostScript or PDF designed for
+     human modification.  Examples of transparent image formats include
+     PNG, XCF and JPG.  Opaque formats include proprietary formats that
+     can be read and edited only by proprietary word processors, SGML or
+     XML for which the DTD and/or processing tools are not generally
+     available, and the machine-generated HTML, PostScript or PDF
+     produced by some word processors for output purposes only.
+
+     The "Title Page" means, for a printed book, the title page itself,
+     plus such following pages as are needed to hold, legibly, the
+     material this License requires to appear in the title page.  For
+     works in formats which do not have any title page as such, "Title
+     Page" means the text near the most prominent appearance of the
+     work's title, preceding the beginning of the body of the text.
+
+     The "publisher" means any person or entity that distributes copies
+     of the Document to the public.
+
+     A section "Entitled XYZ" means a named subunit of the Document
+     whose title either is precisely XYZ or contains XYZ in parentheses
+     following text that translates XYZ in another language.  (Here XYZ
+     stands for a specific section name mentioned below, such as
+     "Acknowledgements", "Dedications", "Endorsements", or "History".)
+     To "Preserve the Title" of such a section when you modify the
+     Document means that it remains a section "Entitled XYZ" according
+     to this definition.
+
+     The Document may include Warranty Disclaimers next to the notice
+     which states that this License applies to the Document.  These
+     Warranty Disclaimers are considered to be included by reference in
+     this License, but only as regards disclaiming warranties: any other
+     implication that these Warranty Disclaimers may have is void and
+     has no effect on the meaning of this License.
+
+  2. VERBATIM COPYING
+
+     You may copy and distribute the Document in any medium, either
+     commercially or noncommercially, provided that this License, the
+     copyright notices, and the license notice saying this License
+     applies to the Document are reproduced in all copies, and that you
+     add no other conditions whatsoever to those of this License.  You
+     may not use technical measures to obstruct or control the reading
+     or further copying of the copies you make or distribute.  However,
+     you may accept compensation in exchange for copies.  If you
+     distribute a large enough number of copies you must also follow
+     the conditions in section 3.
+
+     You may also lend copies, under the same conditions stated above,
+     and you may publicly display copies.
+
+  3. COPYING IN QUANTITY
+
+     If you publish printed copies (or copies in media that commonly
+     have printed covers) of the Document, numbering more than 100, and
+     the Document's license notice requires Cover Texts, you must
+     enclose the copies in covers that carry, clearly and legibly, all
+     these Cover Texts: Front-Cover Texts on the front cover, and
+     Back-Cover Texts on the back cover.  Both covers must also clearly
+     and legibly identify you as the publisher of these copies.  The
+     front cover must present the full title with all words of the
+     title equally prominent and visible.  You may add other material
+     on the covers in addition.  Copying with changes limited to the
+     covers, as long as they preserve the title of the Document and
+     satisfy these conditions, can be treated as verbatim copying in
+     other respects.
+
+     If the required texts for either cover are too voluminous to fit
+     legibly, you should put the first ones listed (as many as fit
+     reasonably) on the actual cover, and continue the rest onto
+     adjacent pages.
+
+     If you publish or distribute Opaque copies of the Document
+     numbering more than 100, you must either include a
+     machine-readable Transparent copy along with each Opaque copy, or
+     state in or with each Opaque copy a computer-network location from
+     which the general network-using public has access to download
+     using public-standard network protocols a complete Transparent
+     copy of the Document, free of added material.  If you use the
+     latter option, you must take reasonably prudent steps, when you
+     begin distribution of Opaque copies in quantity, to ensure that
+     this Transparent copy will remain thus accessible at the stated
+     location until at least one year after the last time you
+     distribute an Opaque copy (directly or through your agents or
+     retailers) of that edition to the public.
+
+     It is requested, but not required, that you contact the authors of
+     the Document well before redistributing any large number of
+     copies, to give them a chance to provide you with an updated
+     version of the Document.
+
+  4. MODIFICATIONS
+
+     You may copy and distribute a Modified Version of the Document
+     under the conditions of sections 2 and 3 above, provided that you
+     release the Modified Version under precisely this License, with
+     the Modified Version filling the role of the Document, thus
+     licensing distribution and modification of the Modified Version to
+     whoever possesses a copy of it.  In addition, you must do these
+     things in the Modified Version:
+
+       A. Use in the Title Page (and on the covers, if any) a title
+          distinct from that of the Document, and from those of
+          previous versions (which should, if there were any, be listed
+          in the History section of the Document).  You may use the
+          same title as a previous version if the original publisher of
+          that version gives permission.
+
+       B. List on the Title Page, as authors, one or more persons or
+          entities responsible for authorship of the modifications in
+          the Modified Version, together with at least five of the
+          principal authors of the Document (all of its principal
+          authors, if it has fewer than five), unless they release you
+          from this requirement.
+
+       C. State on the Title page the name of the publisher of the
+          Modified Version, as the publisher.
+
+       D. Preserve all the copyright notices of the Document.
+
+       E. Add an appropriate copyright notice for your modifications
+          adjacent to the other copyright notices.
+
+       F. Include, immediately after the copyright notices, a license
+          notice giving the public permission to use the Modified
+          Version under the terms of this License, in the form shown in
+          the Addendum below.
+
+       G. Preserve in that license notice the full lists of Invariant
+          Sections and required Cover Texts given in the Document's
+          license notice.
+
+       H. Include an unaltered copy of this License.
+
+       I. Preserve the section Entitled "History", Preserve its Title,
+          and add to it an item stating at least the title, year, new
+          authors, and publisher of the Modified Version as given on
+          the Title Page.  If there is no section Entitled "History" in
+          the Document, create one stating the title, year, authors,
+          and publisher of the Document as given on its Title Page,
+          then add an item describing the Modified Version as stated in
+          the previous sentence.
+
+       J. Preserve the network location, if any, given in the Document
+          for public access to a Transparent copy of the Document, and
+          likewise the network locations given in the Document for
+          previous versions it was based on.  These may be placed in
+          the "History" section.  You may omit a network location for a
+          work that was published at least four years before the
+          Document itself, or if the original publisher of the version
+          it refers to gives permission.
+
+       K. For any section Entitled "Acknowledgements" or "Dedications",
+          Preserve the Title of the section, and preserve in the
+          section all the substance and tone of each of the contributor
+          acknowledgements and/or dedications given therein.
+
+       L. Preserve all the Invariant Sections of the Document,
+          unaltered in their text and in their titles.  Section numbers
+          or the equivalent are not considered part of the section
+          titles.
+
+       M. Delete any section Entitled "Endorsements".  Such a section
+          may not be included in the Modified Version.
+
+       N. Do not retitle any existing section to be Entitled
+          "Endorsements" or to conflict in title with any Invariant
+          Section.
+
+       O. Preserve any Warranty Disclaimers.
+
+     If the Modified Version includes new front-matter sections or
+     appendices that qualify as Secondary Sections and contain no
+     material copied from the Document, you may at your option
+     designate some or all of these sections as invariant.  To do this,
+     add their titles to the list of Invariant Sections in the Modified
+     Version's license notice.  These titles must be distinct from any
+     other section titles.
+
+     You may add a section Entitled "Endorsements", provided it contains
+     nothing but endorsements of your Modified Version by various
+     parties--for example, statements of peer review or that the text
+     has been approved by an organization as the authoritative
+     definition of a standard.
+
+     You may add a passage of up to five words as a Front-Cover Text,
+     and a passage of up to 25 words as a Back-Cover Text, to the end
+     of the list of Cover Texts in the Modified Version.  Only one
+     passage of Front-Cover Text and one of Back-Cover Text may be
+     added by (or through arrangements made by) any one entity.  If the
+     Document already includes a cover text for the same cover,
+     previously added by you or by arrangement made by the same entity
+     you are acting on behalf of, you may not add another; but you may
+     replace the old one, on explicit permission from the previous
+     publisher that added the old one.
+
+     The author(s) and publisher(s) of the Document do not by this
+     License give permission to use their names for publicity for or to
+     assert or imply endorsement of any Modified Version.
+
+  5. COMBINING DOCUMENTS
+
+     You may combine the Document with other documents released under
+     this License, under the terms defined in section 4 above for
+     modified versions, provided that you include in the combination
+     all of the Invariant Sections of all of the original documents,
+     unmodified, and list them all as Invariant Sections of your
+     combined work in its license notice, and that you preserve all
+     their Warranty Disclaimers.
+
+     The combined work need only contain one copy of this License, and
+     multiple identical Invariant Sections may be replaced with a single
+     copy.  If there are multiple Invariant Sections with the same name
+     but different contents, make the title of each such section unique
+     by adding at the end of it, in parentheses, the name of the
+     original author or publisher of that section if known, or else a
+     unique number.  Make the same adjustment to the section titles in
+     the list of Invariant Sections in the license notice of the
+     combined work.
+
+     In the combination, you must combine any sections Entitled
+     "History" in the various original documents, forming one section
+     Entitled "History"; likewise combine any sections Entitled
+     "Acknowledgements", and any sections Entitled "Dedications".  You
+     must delete all sections Entitled "Endorsements."
+
+  6. COLLECTIONS OF DOCUMENTS
+
+     You may make a collection consisting of the Document and other
+     documents released under this License, and replace the individual
+     copies of this License in the various documents with a single copy
+     that is included in the collection, provided that you follow the
+     rules of this License for verbatim copying of each of the
+     documents in all other respects.
+
+     You may extract a single document from such a collection, and
+     distribute it individually under this License, provided you insert
+     a copy of this License into the extracted document, and follow
+     this License in all other respects regarding verbatim copying of
+     that document.
+
+  7. AGGREGATION WITH INDEPENDENT WORKS
+
+     A compilation of the Document or its derivatives with other
+     separate and independent documents or works, in or on a volume of
+     a storage or distribution medium, is called an "aggregate" if the
+     copyright resulting from the compilation is not used to limit the
+     legal rights of the compilation's users beyond what the individual
+     works permit.  When the Document is included in an aggregate, this
+     License does not apply to the other works in the aggregate which
+     are not themselves derivative works of the Document.
+
+     If the Cover Text requirement of section 3 is applicable to these
+     copies of the Document, then if the Document is less than one half
+     of the entire aggregate, the Document's Cover Texts may be placed
+     on covers that bracket the Document within the aggregate, or the
+     electronic equivalent of covers if the Document is in electronic
+     form.  Otherwise they must appear on printed covers that bracket
+     the whole aggregate.
+
+  8. TRANSLATION
+
+     Translation is considered a kind of modification, so you may
+     distribute translations of the Document under the terms of section
+     4.  Replacing Invariant Sections with translations requires special
+     permission from their copyright holders, but you may include
+     translations of some or all Invariant Sections in addition to the
+     original versions of these Invariant Sections.  You may include a
+     translation of this License, and all the license notices in the
+     Document, and any Warranty Disclaimers, provided that you also
+     include the original English version of this License and the
+     original versions of those notices and disclaimers.  In case of a
+     disagreement between the translation and the original version of
+     this License or a notice or disclaimer, the original version will
+     prevail.
+
+     If a section in the Document is Entitled "Acknowledgements",
+     "Dedications", or "History", the requirement (section 4) to
+     Preserve its Title (section 1) will typically require changing the
+     actual title.
+
+  9. TERMINATION
+
+     You may not copy, modify, sublicense, or distribute the Document
+     except as expressly provided under this License.  Any attempt
+     otherwise to copy, modify, sublicense, or distribute it is void,
+     and will automatically terminate your rights under this License.
+
+     However, if you cease all violation of this License, then your
+     license from a particular copyright holder is reinstated (a)
+     provisionally, unless and until the copyright holder explicitly
+     and finally terminates your license, and (b) permanently, if the
+     copyright holder fails to notify you of the violation by some
+     reasonable means prior to 60 days after the cessation.
+
+     Moreover, your license from a particular copyright holder is
+     reinstated permanently if the copyright holder notifies you of the
+     violation by some reasonable means, this is the first time you have
+     received notice of violation of this License (for any work) from
+     that copyright holder, and you cure the violation prior to 30 days
+     after your receipt of the notice.
+
+     Termination of your rights under this section does not terminate
+     the licenses of parties who have received copies or rights from
+     you under this License.  If your rights have been terminated and
+     not permanently reinstated, receipt of a copy of some or all of
+     the same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+     The Free Software Foundation may publish new, revised versions of
+     the GNU Free Documentation 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.  See
+     `http://www.gnu.org/copyleft/'.
+
+     Each version of the License is given a distinguishing version
+     number.  If the Document specifies that a particular numbered
+     version of this License "or any later version" applies to it, you
+     have the option of following the terms and conditions either of
+     that specified version or of any later version that has been
+     published (not as a draft) by the Free Software Foundation.  If
+     the Document does not specify a version number of this License,
+     you may choose any version ever published (not as a draft) by the
+     Free Software Foundation.  If the Document specifies that a proxy
+     can decide which future versions of this License can be used, that
+     proxy's public statement of acceptance of a version permanently
+     authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+     World Wide Web server that publishes copyrightable works and also
+     provides prominent facilities for anybody to edit those works.  A
+     public wiki that anybody can edit is an example of such a server.
+     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+     site means any set of copyrightable works thus published on the MMC
+     site.
+
+     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+     license published by Creative Commons Corporation, a not-for-profit
+     corporation with a principal place of business in San Francisco,
+     California, as well as future copyleft versions of that license
+     published by that same organization.
+
+     "Incorporate" means to publish or republish a Document, in whole or
+     in part, as part of another Document.
+
+     An MMC is "eligible for relicensing" if it is licensed under this
+     License, and if all works that were first published under this
+     License somewhere other than this MMC, and subsequently
+     incorporated in whole or in part into the MMC, (1) had no cover
+     texts or invariant sections, and (2) were thus incorporated prior
+     to November 1, 2008.
+
+     The operator of an MMC Site may republish an MMC contained in the
+     site under CC-BY-SA on the same site at any time before August 1,
+     2009, provided the MMC is eligible for relicensing.
+
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+       Copyright (C)  YEAR  YOUR NAME.
+       Permission is granted to copy, distribute and/or modify this document
+       under the terms of the GNU Free Documentation License, Version 1.3
+       or any later version published by the Free Software Foundation;
+       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+       Texts.  A copy of the license is included in the section entitled ``GNU
+       Free Documentation License''.
+
+   If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+         with the Invariant Sections being LIST THEIR TITLES, with
+         the Front-Cover Texts being LIST, and with the Back-Cover Texts
+         being LIST.
+
+   If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+   If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License, to
+permit their use in free software.
+
+
+File: gdbint.info,  Node: Concept Index,  Next: Function and Variable Index,  Prev: GNU Free Documentation License,  Up: Top
+
+Concept Index
+*************
+
+ [index ]
+* Menu:
+
+* $fp:                                   Register Information Functions.
+                                                              (line 126)
+* $pc:                                   Register Architecture Functions & Variables.
+                                                              (line  58)
+* $ps:                                   Register Architecture Functions & Variables.
+                                                              (line  69)
+* $sp:                                   Register Architecture Functions & Variables.
+                                                              (line  49)
+* a.out format:                          Symbol Handling.     (line 218)
+* abstract interpretation of function prologues: Algorithms.  (line  48)
+* adding a new host:                     Host Definition.     (line  13)
+* adding a symbol-reading module:        Symbol Handling.     (line  37)
+* adding a target:                       Adding a New Target. (line   6)
+* adding debugging info reader:          Symbol Handling.     (line 365)
+* adding source language:                Language Support.    (line  17)
+* address classes:                       Address Classes.     (line   6)
+* address representation:                Pointers and Addresses.
+                                                              (line   6)
+* address spaces, separate data and code: Pointers and Addresses.
+                                                              (line   6)
+* algorithms:                            Algorithms.          (line   6)
+* ARCH-tdep.c:                           How an Architecture is Represented.
+                                                              (line  13)
+* architecture representation:           How an Architecture is Represented.
+                                                              (line   6)
+* Array Containers:                      Support Libraries.   (line 131)
+* assumptions about targets:             Misc Guidelines.     (line 334)
+* base of a frame:                       Frame Handling Terminology.
+                                                              (line  28)
+* BFD library:                           Support Libraries.   (line   9)
+* breakpoint address adjusted:           Defining Other Architecture Features.
+                                                              (line 145)
+* breakpoints:                           Algorithms.          (line 151)
+* bug-gdb mailing list:                  Getting Started.     (line  72)
+* build script:                          Debugging GDB.       (line  94)
+* C data types:                          Coding Standards.    (line 120)
+* call frame information:                Algorithms.          (line  14)
+* call stack frame:                      Stack Frames.        (line   6)
+* calls to the inferior:                 Inferior Call Setup. (line   6)
+* CFI (call frame information):          Algorithms.          (line  14)
+* checkpoints:                           Algorithms.          (line 600)
+* cleanups:                              Misc Guidelines.     (line  12)
+* CLI:                                   User Interface.      (line  12)
+* code pointers, word-addressed:         Pointers and Addresses.
+                                                              (line   6)
+* coding standards:                      Coding Standards.    (line   6)
+* COFF debugging info:                   Symbol Handling.     (line 315)
+* COFF format:                           Symbol Handling.     (line 233)
+* command implementation:                Getting Started.     (line  60)
+* command interpreter:                   User Interface.      (line  12)
+* comment formatting:                    Coding Standards.    (line  94)
+* compiler warnings:                     Misc Guidelines.     (line 252)
+* Compressed DWARF 2 debugging info:     Symbol Handling.     (line 335)
+* computed values:                       Values.              (line  35)
+* configure.tgt:                         How an Architecture is Represented.
+                                                              (line  19)
+* converting between pointers and addresses: Pointers and Addresses.
+                                                              (line   6)
+* converting integers to addresses:      Defining Other Architecture Features.
+                                                              (line 274)
+* cooked register representation:        Raw and Cooked Registers.
+                                                              (line   6)
+* core files:                            Adding support for debugging core files.
+                                                              (line   6)
+* D10V addresses:                        Pointers and Addresses.
+                                                              (line   6)
+* data output:                           User Interface.      (line 254)
+* data-pointer, per-architecture/per-module: Misc Guidelines. (line 100)
+* debugging GDB:                         Debugging GDB.       (line   6)
+* deprecating commands:                  User Interface.      (line  32)
+* design:                                Misc Guidelines.     (line 329)
+* DOS text files:                        Host Definition.     (line  87)
+* dummy frames:                          About Dummy Frames.  (line   6)
+* DW_AT_address_class:                   Address Classes.     (line   6)
+* DW_AT_byte_size:                       Address Classes.     (line   6)
+* DWARF 2 debugging info:                Symbol Handling.     (line 328)
+* DWARF 3 debugging info:                Symbol Handling.     (line 355)
+* ECOFF debugging info:                  Symbol Handling.     (line 321)
+* ECOFF format:                          Symbol Handling.     (line 248)
+* ELF format:                            Symbol Handling.     (line 281)
+* execution state:                       Managing Execution State.
+                                                              (line   6)
+* experimental branches:                 Versions and Branches.
+                                                              (line 116)
+* expression evaluation routines:        Language Support.    (line  58)
+* expression parser:                     Language Support.    (line  21)
+* field output functions:                User Interface.      (line 254)
+* file names, portability:               Misc Guidelines.     (line 367)
+* finding a symbol:                      Symbol Handling.     (line 133)
+* fine-tuning gdbarch structure:         OS ABI Variant Handling.
+                                                              (line  23)
+* first floating point register:         Register Architecture Functions & Variables.
+                                                              (line  78)
+* frame:                                 Stack Frames.        (line   6)
+* frame ID:                              Stack Frames.        (line  41)
+* frame pointer:                         Register Information Functions.
+                                                              (line 126)
+* frame, definition of base of a frame:  Frame Handling Terminology.
+                                                              (line  28)
+* frame, definition of innermost frame:  Frame Handling Terminology.
+                                                              (line  24)
+* frame, definition of NEXT frame:       Frame Handling Terminology.
+                                                              (line  11)
+* frame, definition of PREVIOUS frame:   Frame Handling Terminology.
+                                                              (line  14)
+* frame, definition of sentinel frame:   Frame Handling Terminology.
+                                                              (line  52)
+* frame, definition of sniffing:         Frame Handling Terminology.
+                                                              (line  46)
+* frame, definition of THIS frame:       Frame Handling Terminology.
+                                                              (line   9)
+* frame, definition of unwinding:        Frame Handling Terminology.
+                                                              (line  41)
+* frame_base:                            Analyzing Stacks---Frame Sniffers.
+                                                              (line  89)
+* frame_unwind:                          Analyzing Stacks---Frame Sniffers.
+                                                              (line  36)
+* full symbol table:                     Symbol Handling.     (line 104)
+* function prologue:                     Prologue Caches.     (line   6)
+* function prototypes:                   Coding Standards.    (line 142)
+* function usage:                        Coding Standards.    (line 124)
+* fundamental types:                     Symbol Handling.     (line 183)
+* GDB source tree structure:             Overall Structure.   (line  83)
+* gdb_byte:                              Register Caching.    (line  23)
+* gdbarch:                               How an Architecture is Represented.
+                                                              (line  19)
+* gdbarch accessor functions:            Creating a New Architecture.
+                                                              (line  14)
+* gdbarch lookup:                        Looking Up an Existing Architecture.
+                                                              (line   6)
+* gdbarch register architecture functions: Register Architecture Functions & Variables.
+                                                              (line   6)
+* gdbarch register information functions: Register Information Functions.
+                                                              (line   6)
+* gdbarch_info:                          Looking Up an Existing Architecture.
+                                                              (line  22)
+* gdbarch_tdep definition:               Creating a New Architecture.
+                                                              (line  34)
+* gdbarch_tdep when allocating new gdbarch: Creating a New Architecture.
+                                                              (line   6)
+* generic host support:                  Host Definition.     (line  38)
+* hardware breakpoints:                  Algorithms.          (line 158)
+* hardware watchpoints:                  Algorithms.          (line 280)
+* host:                                  Overall Structure.   (line  50)
+* host, adding:                          Host Definition.     (line  13)
+* innermost frame:                       Frame Handling Terminology.
+                                                              (line  24)
+* insert or remove hardware breakpoint:  Algorithms.          (line 234)
+* insert or remove hardware watchpoint:  Algorithms.          (line 347)
+* insert or remove software breakpoint:  Algorithms.          (line 211)
+* item output functions:                 User Interface.      (line 254)
+* language parser:                       Language Support.    (line  25)
+* language support:                      Language Support.    (line   6)
+* legal papers for code contributions:   Debugging GDB.       (line  42)
+* libgdb:                                libgdb.              (line   9)
+* libiberty library:                     Support Libraries.   (line  52)
+* line wrap in output:                   Misc Guidelines.     (line 191)
+* list output functions:                 User Interface.      (line 131)
+* long long data type:                   Host Definition.     (line 106)
+* longjmp debugging:                     Algorithms.          (line 258)
+* lookup_symbol:                         Symbol Handling.     (line 142)
+* lval_type enumeration, for values.:    Values.              (line  19)
+* making a new release of gdb:           Releasing GDB.       (line   6)
+* memory representation:                 Register and Memory Data.
+                                                              (line   6)
+* minimal symbol table:                  Symbol Handling.     (line 111)
+* minsymtabs:                            Symbol Handling.     (line 111)
+* multi-arch data:                       Misc Guidelines.     (line 100)
+* native conditionals:                   Native Debugging.    (line  75)
+* native debugging:                      Native Debugging.    (line   6)
+* nesting level in ui_out functions:     User Interface.      (line 143)
+* new year procedure:                    Start of New Year Procedure.
+                                                              (line   6)
+* NEXT frame:                            Frame Handling Terminology.
+                                                              (line  11)
+* normal_stop observer:                  GDB Observers.       (line  48)
+* notification about inferior execution stop: GDB Observers.  (line  48)
+* notifications about changes in internals: Algorithms.       (line 630)
+* object file formats:                   Symbol Handling.     (line 215)
+* observer pattern interface:            Algorithms.          (line 630)
+* observers implementation rationale:    GDB Observers.       (line   9)
+* obstacks:                              Support Libraries.   (line  69)
+* opcodes library:                       Support Libraries.   (line  39)
+* OS ABI variants:                       OS ABI Variant Handling.
+                                                              (line   6)
+* partial symbol table:                  Symbol Handling.     (line 114)
+* PE-COFF format:                        Symbol Handling.     (line 272)
+* per-architecture module data:          Misc Guidelines.     (line 100)
+* pointer representation:                Pointers and Addresses.
+                                                              (line   6)
+* portability:                           Misc Guidelines.     (line 350)
+* portable file name handling:           Misc Guidelines.     (line 367)
+* porting to new machines:               Porting GDB.         (line   6)
+* PREVIOUS frame:                        Frame Handling Terminology.
+                                                              (line  14)
+* processor status register:             Register Architecture Functions & Variables.
+                                                              (line  69)
+* program counter <1>:                   Register Architecture Functions & Variables.
+                                                              (line  58)
+* program counter:                       Algorithms.          (line 158)
+* prologue analysis:                     Algorithms.          (line  14)
+* prologue cache:                        Prologue Caches.     (line  12)
+* prologue of a function:                Prologue Caches.     (line   6)
+* prologue-value.c:                      Algorithms.          (line  48)
+* prompt:                                Host Definition.     (line  94)
+* pseudo-evaluation of function prologues: Algorithms.        (line  48)
+* psymtabs:                              Symbol Handling.     (line 107)
+* raw register representation:           Raw and Cooked Registers.
+                                                              (line   6)
+* reading of symbols:                    Symbol Handling.     (line  25)
+* readline library:                      Support Libraries.   (line  45)
+* register caching:                      Register Caching.    (line   6)
+* register data formats, converting:     Register and Memory Data.
+                                                              (line   6)
+* register representation:               Register and Memory Data.
+                                                              (line   6)
+* regular expressions library:           Support Libraries.   (line 110)
+* Release Branches:                      Versions and Branches.
+                                                              (line  93)
+* remote debugging support:              Host Definition.     (line  41)
+* representation of architecture:        How an Architecture is Represented.
+                                                              (line   6)
+* representations, raw and cooked registers: Raw and Cooked Registers.
+                                                              (line   6)
+* representations, register and memory:  Register and Memory Data.
+                                                              (line   6)
+* requirements for GDB:                  Requirements.        (line   6)
+* restart:                               Algorithms.          (line 600)
+* running the test suite:                Testsuite.           (line  19)
+* secondary symbol file:                 Symbol Handling.     (line  47)
+* sentinel frame <1>:                    Frame Handling Terminology.
+                                                              (line  52)
+* sentinel frame:                        Stack Frames.        (line  22)
+* separate data and code address spaces: Pointers and Addresses.
+                                                              (line   6)
+* serial line support:                   Host Definition.     (line  41)
+* set_gdbarch functions:                 Creating a New Architecture.
+                                                              (line  14)
+* sniffing:                              Frame Handling Terminology.
+                                                              (line  46)
+* software breakpoints:                  Algorithms.          (line 184)
+* software watchpoints:                  Algorithms.          (line 280)
+* SOM debugging info:                    Symbol Handling.     (line 360)
+* SOM format:                            Symbol Handling.     (line 291)
+* source code formatting:                Coding Standards.    (line  28)
+* spaces, separate data and code address: Pointers and Addresses.
+                                                              (line   6)
+* stabs debugging info:                  Symbol Handling.     (line 305)
+* stack frame, definition of base of a frame: Frame Handling Terminology.
+                                                              (line  28)
+* stack frame, definition of innermost frame: Frame Handling Terminology.
+                                                              (line  24)
+* stack frame, definition of NEXT frame: Frame Handling Terminology.
+                                                              (line  11)
+* stack frame, definition of PREVIOUS frame: Frame Handling Terminology.
+                                                              (line  14)
+* stack frame, definition of sentinel frame: Frame Handling Terminology.
+                                                              (line  52)
+* stack frame, definition of sniffing:   Frame Handling Terminology.
+                                                              (line  46)
+* stack frame, definition of THIS frame: Frame Handling Terminology.
+                                                              (line   9)
+* stack frame, definition of unwinding:  Frame Handling Terminology.
+                                                              (line  41)
+* stack pointer:                         Register Architecture Functions & Variables.
+                                                              (line  49)
+* status register:                       Register Architecture Functions & Variables.
+                                                              (line  69)
+* struct gdbarch creation:               Creating a New Architecture.
+                                                              (line   6)
+* struct regcache:                       Register Caching.    (line  10)
+* struct value, converting register contents to: Register and Memory Data.
+                                                              (line   6)
+* submitting patches:                    Debugging GDB.       (line  30)
+* sym_fns structure:                     Symbol Handling.     (line  37)
+* symbol files:                          Symbol Handling.     (line  25)
+* symbol lookup:                         Symbol Handling.     (line 133)
+* symbol reading:                        Symbol Handling.     (line  25)
+* symtabs:                               Symbol Handling.     (line 104)
+* system dependencies:                   Misc Guidelines.     (line 354)
+* table output functions:                User Interface.      (line 131)
+* target:                                Overall Structure.   (line  50)
+* target architecture definition:        Target Architecture Definition.
+                                                              (line   6)
+* target dependent files:                Adding a New Target. (line   8)
+* target descriptions:                   Target Descriptions. (line   6)
+* target descriptions, adding register support: Adding Target Described Register Support.
+                                                              (line   6)
+* target descriptions, implementation:   Target Descriptions Implementation.
+                                                              (line   6)
+* target vector:                         Target Vector Definition.
+                                                              (line   6)
+* targets:                               Existing Targets.    (line   6)
+* TCP remote support:                    Host Definition.     (line  57)
+* terminal device:                       Host Definition.     (line  97)
+* test suite:                            Testsuite.           (line   6)
+* test suite organization:               Testsuite.           (line 195)
+* Testsuite Configuration:               Testsuite.           (line 167)
+* THIS frame:                            Frame Handling Terminology.
+                                                              (line   9)
+* tuple output functions:                User Interface.      (line 131)
+* type codes:                            Symbol Handling.     (line 191)
+* types:                                 Coding Standards.    (line 136)
+* ui_out functions:                      User Interface.      (line  47)
+* ui_out functions, usage examples:      User Interface.      (line 398)
+* unwind frame:                          Stack Frames.        (line   9)
+* unwinding:                             Frame Handling Terminology.
+                                                              (line  41)
+* using ui_out functions:                User Interface.      (line 398)
+* value structure:                       Values.              (line   9)
+* values:                                Values.              (line   9)
+* VEC:                                   Support Libraries.   (line 131)
+* vendor branches:                       Versions and Branches.
+                                                              (line 108)
+* watchpoints:                           Algorithms.          (line 274)
+* watchpoints, on x86:                   Algorithms.          (line 449)
+* watchpoints, with threads:             Algorithms.          (line 425)
+* word-addressed machines:               Pointers and Addresses.
+                                                              (line   6)
+* writing tests:                         Testsuite.           (line 247)
+* x86 debug registers:                   Algorithms.          (line 449)
+* XCOFF format:                          Symbol Handling.     (line 256)
+
+
+File: gdbint.info,  Node: Function and Variable Index,  Prev: Concept Index,  Up: Top
+
+Function and Variable Index
+***************************
+
+ [index ]
+* Menu:
+
+* _initialize_ARCH_tdep <1>:             Adding a New Target. (line  22)
+* _initialize_ARCH_tdep:                 How an Architecture is Represented.
+                                                              (line  13)
+* _initialize_language:                  Language Support.    (line  79)
+* about_to_proceed:                      GDB Observers.       (line 133)
+* add_cmd:                               User Interface.      (line  21)
+* add_com:                               User Interface.      (line  21)
+* add_setshow_cmd:                       User Interface.      (line  26)
+* add_setshow_cmd_full:                  User Interface.      (line  26)
+* add_symtab_fns:                        Symbol Handling.     (line  37)
+* address_class_name_to_type_flags:      Defining Other Architecture Features.
+                                                              (line  28)
+* address_class_name_to_type_flags_p:    Defining Other Architecture Features.
+                                                              (line  39)
+* align_down:                            Functions and Variable to Analyze Frames.
+                                                              (line  46)
+* align_up:                              Functions and Variable to Analyze Frames.
+                                                              (line  46)
+* allocate_symtab:                       Language Support.    (line  83)
+* architecture_changed:                  GDB Observers.       (line 159)
+* before_prompt:                         GDB Observers.       (line 188)
+* bfd_arch_info:                         Looking Up an Existing Architecture.
+                                                              (line  41)
+* BIG_BREAKPOINT:                        Defining Other Architecture Features.
+                                                              (line 100)
+* BPT_VECTOR:                            Defining Other Architecture Features.
+                                                              (line 532)
+* BREAKPOINT:                            Defining Other Architecture Features.
+                                                              (line  88)
+* breakpoint_created:                    GDB Observers.       (line 136)
+* breakpoint_deleted:                    GDB Observers.       (line 139)
+* breakpoint_modified:                   GDB Observers.       (line 143)
+* CC_HAS_LONG_LONG:                      Host Definition.     (line 105)
+* core_addr_greaterthan:                 Functions and Variable to Analyze Frames.
+                                                              (line  30)
+* core_addr_lessthan:                    Functions and Variable to Analyze Frames.
+                                                              (line  30)
+* CRLF_SOURCE_FILES:                     Host Definition.     (line  86)
+* current_language:                      Language Support.    (line  75)
+* DEFAULT_PROMPT:                        Host Definition.     (line  93)
+* deprecate_cmd:                         User Interface.      (line  32)
+* DEPRECATED_IBM6000_TARGET:             Defining Other Architecture Features.
+                                                              (line 242)
+* DEV_TTY:                               Host Definition.     (line  96)
+* DIRNAME_SEPARATOR:                     Misc Guidelines.     (line 399)
+* DISABLE_UNSETTABLE_BREAK:              Defining Other Architecture Features.
+                                                              (line 211)
+* discard_cleanups:                      Misc Guidelines.     (line  39)
+* do_cleanups:                           Misc Guidelines.     (line  35)
+* evaluate_subexp:                       Language Support.    (line  58)
+* executable_changed:                    GDB Observers.       (line  85)
+* extract_typed_address:                 Pointers and Addresses.
+                                                              (line  52)
+* FILENAME_CMP:                          Misc Guidelines.     (line 393)
+* find_pc_function:                      Symbol Handling.     (line 136)
+* find_pc_line:                          Symbol Handling.     (line 136)
+* find_sym_fns:                          Symbol Handling.     (line  32)
+* FOPEN_RB:                              Host Definition.     (line 102)
+* fp0_regnum:                            Register Architecture Functions & Variables.
+                                                              (line  78)
+* frame_align:                           Functions and Variable to Analyze Frames.
+                                                              (line  46)
+* frame_base_append_sniffer:             Analyzing Stacks---Frame Sniffers.
+                                                              (line  19)
+* frame_base_set_default:                Analyzing Stacks---Frame Sniffers.
+                                                              (line  22)
+* frame_num_args:                        Functions to Access Frame Data.
+                                                              (line  43)
+* frame_red_zone_size:                   Functions and Variable to Analyze Frames.
+                                                              (line  63)
+* frame_register_unwind:                 Stack Frames.        (line  15)
+* frame_unwind_append_sniffer:           Analyzing Stacks---Frame Sniffers.
+                                                              (line  16)
+* frame_unwind_append_unwinder:          Stack Frames.        (line  30)
+* frame_unwind_got_address:              Stack Frames.        (line 105)
+* frame_unwind_got_constant:             Stack Frames.        (line 101)
+* frame_unwind_got_memory:               Stack Frames.        (line  98)
+* frame_unwind_got_optimized:            Stack Frames.        (line  90)
+* frame_unwind_got_register:             Stack Frames.        (line  93)
+* frame_unwind_prepend_unwinder:         Stack Frames.        (line  30)
+* GCC2_COMPILED_FLAG_SYMBOL:             Defining Other Architecture Features.
+                                                              (line 225)
+* GCC_COMPILED_FLAG_SYMBOL:              Defining Other Architecture Features.
+                                                              (line 225)
+* gdb_datadir_changed:                   GDB Observers.       (line 192)
+* GDB_OSABI_AIX:                         OS ABI Variant Handling.
+                                                              (line  90)
+* GDB_OSABI_CYGWIN:                      OS ABI Variant Handling.
+                                                              (line  87)
+* GDB_OSABI_FREEBSD_AOUT:                OS ABI Variant Handling.
+                                                              (line  51)
+* GDB_OSABI_FREEBSD_ELF:                 OS ABI Variant Handling.
+                                                              (line  54)
+* GDB_OSABI_GO32:                        OS ABI Variant Handling.
+                                                              (line  69)
+* GDB_OSABI_HPUX_ELF:                    OS ABI Variant Handling.
+                                                              (line  78)
+* GDB_OSABI_HPUX_SOM:                    OS ABI Variant Handling.
+                                                              (line  81)
+* GDB_OSABI_HURD:                        OS ABI Variant Handling.
+                                                              (line  39)
+* GDB_OSABI_INTERIX:                     OS ABI Variant Handling.
+                                                              (line  75)
+* GDB_OSABI_IRIX:                        OS ABI Variant Handling.
+                                                              (line  72)
+* GDB_OSABI_LINUX:                       OS ABI Variant Handling.
+                                                              (line  48)
+* GDB_OSABI_NETBSD_AOUT:                 OS ABI Variant Handling.
+                                                              (line  57)
+* GDB_OSABI_NETBSD_ELF:                  OS ABI Variant Handling.
+                                                              (line  60)
+* GDB_OSABI_OPENBSD_ELF:                 OS ABI Variant Handling.
+                                                              (line  63)
+* GDB_OSABI_OSF1:                        OS ABI Variant Handling.
+                                                              (line  45)
+* GDB_OSABI_QNXNTO:                      OS ABI Variant Handling.
+                                                              (line  84)
+* GDB_OSABI_SOLARIS:                     OS ABI Variant Handling.
+                                                              (line  42)
+* GDB_OSABI_SVR4:                        OS ABI Variant Handling.
+                                                              (line  36)
+* GDB_OSABI_UNINITIALIZED:               OS ABI Variant Handling.
+                                                              (line  29)
+* GDB_OSABI_UNKNOWN:                     OS ABI Variant Handling.
+                                                              (line  32)
+* GDB_OSABI_WINCE:                       OS ABI Variant Handling.
+                                                              (line  66)
+* gdbarch_addr_bits_remove:              Defining Other Architecture Features.
+                                                              (line  11)
+* gdbarch_address_class_name_to_type_flags: Address Classes.  (line  30)
+* gdbarch_address_class_type_flags <1>:  Defining Other Architecture Features.
+                                                              (line  43)
+* gdbarch_address_class_type_flags:      Address Classes.     (line  18)
+* gdbarch_address_class_type_flags_p:    Defining Other Architecture Features.
+                                                              (line  52)
+* gdbarch_address_class_type_flags_to_name <1>: Defining Other Architecture Features.
+                                                              (line  56)
+* gdbarch_address_class_type_flags_to_name: Address Classes.  (line  25)
+* gdbarch_address_class_type_flags_to_name_p: Defining Other Architecture Features.
+                                                              (line  60)
+* gdbarch_address_to_pointer <1>:        Defining Other Architecture Features.
+                                                              (line  65)
+* gdbarch_address_to_pointer:            Pointers and Addresses.
+                                                              (line 114)
+* gdbarch_adjust_breakpoint_address:     Defining Other Architecture Features.
+                                                              (line 145)
+* gdbarch_alloc:                         Creating a New Architecture.
+                                                              (line   6)
+* gdbarch_believe_pcc_promotion:         Defining Other Architecture Features.
+                                                              (line  72)
+* gdbarch_bits_big_endian:               Defining Other Architecture Features.
+                                                              (line  77)
+* gdbarch_breakpoint_from_pc:            Defining Other Architecture Features.
+                                                              (line 106)
+* gdbarch_call_dummy_location:           Defining Other Architecture Features.
+                                                              (line 178)
+* gdbarch_cannot_fetch_register:         Defining Other Architecture Features.
+                                                              (line 184)
+* gdbarch_cannot_store_register:         Defining Other Architecture Features.
+                                                              (line 188)
+* gdbarch_char_signed:                   Defining Other Architecture Features.
+                                                              (line 457)
+* gdbarch_convert_register_p <1>:        Defining Other Architecture Features.
+                                                              (line 195)
+* gdbarch_convert_register_p:            Register and Memory Data.
+                                                              (line  30)
+* gdbarch_data:                          Misc Guidelines.     (line 133)
+* gdbarch_data_register_post_init:       Misc Guidelines.     (line 118)
+* gdbarch_data_register_pre_init:        Misc Guidelines.     (line 108)
+* gdbarch_decr_pc_after_break:           Defining Other Architecture Features.
+                                                              (line 205)
+* gdbarch_deprecated_fp_regnum:          Defining Other Architecture Features.
+                                                              (line 446)
+* gdbarch_double_bit:                    Defining Other Architecture Features.
+                                                              (line 467)
+* gdbarch_dummy_id:                      Defining Other Architecture Features.
+                                                              (line 519)
+* gdbarch_dwarf2_reg_to_regnum:          Defining Other Architecture Features.
+                                                              (line 216)
+* gdbarch_ecoff_reg_to_regnum:           Defining Other Architecture Features.
+                                                              (line 220)
+* gdbarch_float_bit:                     Defining Other Architecture Features.
+                                                              (line 471)
+* gdbarch_fp0_regnum:                    Defining Other Architecture Features.
+                                                              (line 200)
+* gdbarch_get_longjmp_target <1>:        Defining Other Architecture Features.
+                                                              (line 231)
+* gdbarch_get_longjmp_target:            Algorithms.          (line 263)
+* gdbarch_have_nonsteppable_watchpoint:  Algorithms.          (line 396)
+* gdbarch_in_function_epilogue_p:        Defining Other Architecture Features.
+                                                              (line 253)
+* gdbarch_in_solib_return_trampoline:    Defining Other Architecture Features.
+                                                              (line 259)
+* gdbarch_init_osabi:                    OS ABI Variant Handling.
+                                                              (line 125)
+* gdbarch_int_bit:                       Defining Other Architecture Features.
+                                                              (line 474)
+* gdbarch_integer_to_address:            Defining Other Architecture Features.
+                                                              (line 274)
+* gdbarch_list_lookup_by_info:           Looking Up an Existing Architecture.
+                                                              (line  22)
+* gdbarch_long_bit:                      Defining Other Architecture Features.
+                                                              (line 477)
+* gdbarch_long_double_bit:               Defining Other Architecture Features.
+                                                              (line 481)
+* gdbarch_long_long_bit:                 Defining Other Architecture Features.
+                                                              (line 485)
+* gdbarch_lookup_osabi:                  OS ABI Variant Handling.
+                                                              (line 119)
+* gdbarch_memory_insert_breakpoint:      Defining Other Architecture Features.
+                                                              (line 130)
+* gdbarch_memory_remove_breakpoint:      Defining Other Architecture Features.
+                                                              (line 130)
+* gdbarch_osabi_name:                    OS ABI Variant Handling.
+                                                              (line  97)
+* gdbarch_pointer_to_address <1>:        Defining Other Architecture Features.
+                                                              (line 295)
+* gdbarch_pointer_to_address:            Pointers and Addresses.
+                                                              (line 105)
+* gdbarch_print_insn:                    Defining Other Architecture Features.
+                                                              (line 509)
+* gdbarch_ptr_bit:                       Defining Other Architecture Features.
+                                                              (line 489)
+* gdbarch_push_dummy_call:               Defining Other Architecture Features.
+                                                              (line 363)
+* gdbarch_push_dummy_code:               Defining Other Architecture Features.
+                                                              (line 375)
+* gdbarch_register <1>:                  Adding a New Target. (line  40)
+* gdbarch_register:                      How an Architecture is Represented.
+                                                              (line  19)
+* gdbarch_register_osabi:                OS ABI Variant Handling.
+                                                              (line 103)
+* gdbarch_register_osabi_sniffer:        OS ABI Variant Handling.
+                                                              (line 112)
+* gdbarch_register_to_value <1>:         Defining Other Architecture Features.
+                                                              (line 301)
+* gdbarch_register_to_value:             Register and Memory Data.
+                                                              (line  46)
+* gdbarch_return_value:                  Defining Other Architecture Features.
+                                                              (line 394)
+* gdbarch_sdb_reg_to_regnum:             Defining Other Architecture Features.
+                                                              (line 390)
+* gdbarch_short_bit:                     Defining Other Architecture Features.
+                                                              (line 493)
+* gdbarch_skip_permanent_breakpoint:     Defining Other Architecture Features.
+                                                              (line 430)
+* gdbarch_skip_trampoline_code:          Defining Other Architecture Features.
+                                                              (line 441)
+* gdbarch_stab_reg_to_regnum:            Defining Other Architecture Features.
+                                                              (line 450)
+* gdbarch_stabs_argument_has_addr:       Defining Other Architecture Features.
+                                                              (line 359)
+* gdbarch_value_to_register <1>:         Defining Other Architecture Features.
+                                                              (line 525)
+* gdbarch_value_to_register:             Register and Memory Data.
+                                                              (line  62)
+* gdbarch_virtual_frame_pointer:         Defining Other Architecture Features.
+                                                              (line 497)
+* GDBINIT_FILENAME:                      Host Definition.     (line  74)
+* generic_elf_osabi_sniff_abi_tag_sections: OS ABI Variant Handling.
+                                                              (line 133)
+* get_frame_register:                    Stack Frames.        (line  15)
+* get_frame_type:                        Stack Frames.        (line  22)
+* HAVE_CONTINUABLE_WATCHPOINT:           Algorithms.          (line 402)
+* HAVE_DOS_BASED_FILE_SYSTEM:            Misc Guidelines.     (line 376)
+* HAVE_STEPPABLE_WATCHPOINT:             Algorithms.          (line 386)
+* i386_cleanup_dregs:                    Algorithms.          (line 576)
+* I386_DR_LOW_GET_STATUS:                Algorithms.          (line 489)
+* I386_DR_LOW_RESET_ADDR:                Algorithms.          (line 485)
+* I386_DR_LOW_SET_ADDR:                  Algorithms.          (line 482)
+* I386_DR_LOW_SET_CONTROL:               Algorithms.          (line 479)
+* i386_insert_hw_breakpoint:             Algorithms.          (line 564)
+* i386_insert_watchpoint:                Algorithms.          (line 536)
+* i386_region_ok_for_watchpoint:         Algorithms.          (line 514)
+* i386_remove_hw_breakpoint:             Algorithms.          (line 564)
+* i386_remove_watchpoint:                Algorithms.          (line 536)
+* i386_stopped_by_watchpoint:            Algorithms.          (line 528)
+* i386_stopped_data_address:             Algorithms.          (line 521)
+* I386_USE_GENERIC_WATCHPOINTS:          Algorithms.          (line 461)
+* in_dynsym_resolve_code:                Defining Other Architecture Features.
+                                                              (line 263)
+* inferior_added:                        GDB Observers.       (line 168)
+* inferior_appeared:                     GDB Observers.       (line 172)
+* inferior_created:                      GDB Observers.       (line  92)
+* inferior_exit:                         GDB Observers.       (line 175)
+* inferior_removed:                      GDB Observers.       (line 179)
+* inner_than:                            Functions and Variable to Analyze Frames.
+                                                              (line  30)
+* IS_ABSOLUTE_PATH:                      Misc Guidelines.     (line 387)
+* IS_DIR_SEPARATOR:                      Misc Guidelines.     (line 382)
+* ISATTY:                                Host Definition.     (line  99)
+* length_of_subexp:                      Language Support.    (line  58)
+* lint:                                  Host Definition.     (line 119)
+* LITTLE_BREAKPOINT:                     Defining Other Architecture Features.
+                                                              (line 100)
+* LSEEK_NOT_LINEAR:                      Host Definition.     (line 114)
+* make_cleanup:                          Misc Guidelines.     (line  28)
+* make_cleanup_ui_out_list_begin_end:    User Interface.      (line 247)
+* make_cleanup_ui_out_tuple_begin_end:   User Interface.      (line 223)
+* memory_changed:                        GDB Observers.       (line 184)
+* NATDEPFILES:                           Native Debugging.    (line   8)
+* new_objfile:                           GDB Observers.       (line 109)
+* new_thread:                            GDB Observers.       (line 114)
+* normal_stop:                           GDB Observers.       (line  76)
+* op_print_tab:                          Language Support.    (line  91)
+* parse_exp_1:                           Language Support.    (line  97)
+* pc_regnum:                             Register Architecture Functions & Variables.
+                                                              (line  58)
+* prefixify_subexp:                      Language Support.    (line  58)
+* print_float_info:                      Register Information Functions.
+                                                              (line  80)
+* print_registers_info:                  Register Information Functions.
+                                                              (line  53)
+* print_subexp:                          Language Support.    (line  91)
+* print_vector_info:                     Register Information Functions.
+                                                              (line  96)
+* PRINTF_HAS_LONG_LONG:                  Host Definition.     (line 109)
+* ps_regnum:                             Register Architecture Functions & Variables.
+                                                              (line  69)
+* pseudo_register_read:                  Register Architecture Functions & Variables.
+                                                              (line  29)
+* pseudo_register_write:                 Register Architecture Functions & Variables.
+                                                              (line  33)
+* push_dummy_call:                       Functions Creating Dummy Frames.
+                                                              (line  13)
+* push_dummy_code:                       Functions Creating Dummy Frames.
+                                                              (line  57)
+* read_pc:                               Register Architecture Functions & Variables.
+                                                              (line  10)
+* regcache_cooked_read:                  Register Caching.    (line  23)
+* regcache_cooked_read_signed:           Register Caching.    (line  23)
+* regcache_cooked_read_unsigned:         Register Caching.    (line  23)
+* regcache_cooked_write:                 Register Caching.    (line  23)
+* regcache_cooked_write_signed:          Register Caching.    (line  23)
+* regcache_cooked_write_unsigned:        Register Caching.    (line  23)
+* REGISTER_CONVERT_TO_RAW:               Defining Other Architecture Features.
+                                                              (line 311)
+* REGISTER_CONVERT_TO_VIRTUAL:           Defining Other Architecture Features.
+                                                              (line 306)
+* register_name:                         Register Information Functions.
+                                                              (line  10)
+* register_reggroup_p:                   Register Information Functions.
+                                                              (line 110)
+* register_type:                         Register Information Functions.
+                                                              (line  33)
+* regset_from_core_section:              Defining Other Architecture Features.
+                                                              (line 316)
+* REMOTE_BPT_VECTOR:                     Defining Other Architecture Features.
+                                                              (line 536)
+* SENTINEL_FRAME:                        Stack Frames.        (line  22)
+* set_gdbarch_bits_big_endian:           Defining Other Architecture Features.
+                                                              (line  83)
+* set_gdbarch_sofun_address_maybe_missing: Defining Other Architecture Features.
+                                                              (line 330)
+* SIGWINCH_HANDLER:                      Host Definition.     (line  78)
+* SIGWINCH_HANDLER_BODY:                 Host Definition.     (line  82)
+* skip_prologue:                         Functions and Variable to Analyze Frames.
+                                                              (line  12)
+* SKIP_SOLIB_RESOLVER:                   Defining Other Architecture Features.
+                                                              (line 267)
+* SLASH_STRING:                          Misc Guidelines.     (line 404)
+* SOFTWARE_SINGLE_STEP:                  Defining Other Architecture Features.
+                                                              (line 324)
+* SOFTWARE_SINGLE_STEP_P:                Defining Other Architecture Features.
+                                                              (line 320)
+* SOLIB_ADD:                             Native Debugging.    (line  86)
+* SOLIB_CREATE_INFERIOR_HOOK:            Native Debugging.    (line  92)
+* solib_loaded:                          GDB Observers.       (line  99)
+* solib_unloaded:                        GDB Observers.       (line 104)
+* sp_regnum:                             Register Architecture Functions & Variables.
+                                                              (line  49)
+* START_INFERIOR_TRAPS_EXPECTED:         Native Debugging.    (line  96)
+* STOPPED_BY_WATCHPOINT:                 Algorithms.          (line 408)
+* store_typed_address:                   Pointers and Addresses.
+                                                              (line  70)
+* struct:                                GDB Observers.       (line  62)
+* TARGET_CAN_USE_HARDWARE_WATCHPOINT:    Algorithms.          (line 333)
+* target_changed:                        GDB Observers.       (line  82)
+* TARGET_CHAR_BIT:                       Defining Other Architecture Features.
+                                                              (line 454)
+* target_insert_breakpoint:              Algorithms.          (line 211)
+* target_insert_hw_breakpoint:           Algorithms.          (line 234)
+* target_insert_watchpoint:              Algorithms.          (line 347)
+* TARGET_REGION_OK_FOR_HW_WATCHPOINT:    Algorithms.          (line 343)
+* target_remove_breakpoint:              Algorithms.          (line 211)
+* target_remove_hw_breakpoint:           Algorithms.          (line 234)
+* target_remove_watchpoint:              Algorithms.          (line 347)
+* target_resumed:                        GDB Observers.       (line 129)
+* target_stopped_data_address:           Algorithms.          (line 364)
+* target_watchpoint_addr_within_range:   Algorithms.          (line 378)
+* test_notification:                     GDB Observers.       (line 196)
+* thread_exit:                           GDB Observers.       (line 117)
+* thread_ptid_changed:                   GDB Observers.       (line 164)
+* thread_stop_requested:                 GDB Observers.       (line 122)
+* tracepoint_created:                    GDB Observers.       (line 147)
+* tracepoint_deleted:                    GDB Observers.       (line 151)
+* tracepoint_modified:                   GDB Observers.       (line 155)
+* ui_out_field_core_addr:                User Interface.      (line 287)
+* ui_out_field_fmt:                      User Interface.      (line 261)
+* ui_out_field_fmt_int:                  User Interface.      (line 280)
+* ui_out_field_int:                      User Interface.      (line 273)
+* ui_out_field_skip:                     User Interface.      (line 352)
+* ui_out_field_stream:                   User Interface.      (line 320)
+* ui_out_field_string:                   User Interface.      (line 291)
+* ui_out_flush:                          User Interface.      (line 392)
+* ui_out_list_begin:                     User Interface.      (line 234)
+* ui_out_list_end:                       User Interface.      (line 240)
+* ui_out_message:                        User Interface.      (line 376)
+* ui_out_spaces:                         User Interface.      (line 371)
+* ui_out_stream_delete:                  User Interface.      (line 315)
+* ui_out_stream_new:                     User Interface.      (line 309)
+* ui_out_table_begin:                    User Interface.      (line 165)
+* ui_out_table_body:                     User Interface.      (line 191)
+* ui_out_table_end:                      User Interface.      (line 194)
+* ui_out_table_header:                   User Interface.      (line 178)
+* ui_out_text:                           User Interface.      (line 358)
+* ui_out_tuple_begin:                    User Interface.      (line 210)
+* ui_out_tuple_end:                      User Interface.      (line 216)
+* ui_out_wrap_hint:                      User Interface.      (line 382)
+* unwind_dummy_id:                       Functions Creating Dummy Frames.
+                                                              (line  38)
+* unwind_pc:                             Functions to Access Frame Data.
+                                                              (line  11)
+* unwind_sp:                             Functions to Access Frame Data.
+                                                              (line  27)
+* value_as_address:                      Pointers and Addresses.
+                                                              (line  84)
+* value_from_pointer:                    Pointers and Addresses.
+                                                              (line  93)
+* void:                                  GDB Observers.       (line  67)
+* volatile:                              Host Definition.     (line 122)
+* wrap_here:                             Misc Guidelines.     (line 191)
+* write_pc:                              Register Architecture Functions & Variables.
+                                                              (line  13)
+
+
diff --git a/gdb/doc/gdbint.texinfo b/gdb/doc/gdbint.texinfo
index 8b13789..c4c1cc9 100644
--- a/gdb/doc/gdbint.texinfo
+++ b/gdb/doc/gdbint.texinfo
@@ -1 +1,8144 @@
+\input texinfo   @c -*- texinfo -*-
+ at setfilename gdbint.info
+ at include gdb-cfg.texi
+ at settitle @value{GDBN} Internals
+ at setchapternewpage off
+ at dircategory Software development
+ at direntry
+* Gdb-Internals: (gdbint).	The GNU debugger's internals.
+ at end direntry
 
+ at copying
+Copyright @copyright{} 1990-1994, 1996, 1998-2006, 2008-2012 Free
+Software Foundation, Inc.
+Contributed by Cygnus Solutions.  Written by John Gilmore.
+Second Edition by Stan Shebs.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the section entitled ``GNU
+Free Documentation License''.
+ at end copying
+
+ at ifnottex
+This file documents the internals of the GNU debugger @value{GDBN}.
+
+ at insertcopying
+ at end ifnottex
+
+ at syncodeindex vr fn
+
+ at titlepage
+ at title @value{GDBN} Internals
+ at subtitle A guide to the internals of the GNU debugger
+ at author John Gilmore
+ at author Cygnus Solutions
+ at author Second Edition:
+ at author Stan Shebs
+ at author Cygnus Solutions
+ at page
+ at tex
+\def\$#1${{#1}}  % Kluge: collect RCS revision info without $...$
+\xdef\manvers{\$Revision$}  % For use in headers, footers too
+{\parskip=0pt
+\hfill Cygnus Solutions\par
+\hfill \manvers\par
+\hfill \TeX{}info \texinfoversion\par
+}
+ at end tex
+
+ at vskip 0pt plus 1filll
+ at insertcopying
+ at end titlepage
+
+ at contents
+
+ at node Top
+ at c Perhaps this should be the title of the document (but only for info,
+ at c not for TeX).  Existing GNU manuals seem inconsistent on this point.
+ at top Scope of this Document
+
+This document documents the internals of the GNU debugger, @value{GDBN}.  It
+includes description of @value{GDBN}'s key algorithms and operations, as well
+as the mechanisms that adapt @value{GDBN} to specific hosts and targets.
+
+ at menu
+* Summary::
+* Overall Structure::
+* Algorithms::
+* User Interface::
+* libgdb::
+* Values::
+* Stack Frames::
+* Symbol Handling::
+* Language Support::
+* Host Definition::
+* Target Architecture Definition::
+* Target Descriptions::
+* Target Vector Definition::
+* Native Debugging::
+* Support Libraries::
+* Coding Standards::
+* Misc Guidelines::
+* Porting GDB::
+* Versions and Branches::
+* Start of New Year Procedure::
+* Releasing GDB::
+* Testsuite::
+* Hints::
+
+* GDB Observers::  @value{GDBN} Currently available observers
+* GNU Free Documentation License::  The license for this documentation
+* Concept Index::
+* Function and Variable Index::
+ at end menu
+
+ at node Summary
+ at chapter Summary
+
+ at menu
+* Requirements::
+* Contributors::
+ at end menu
+
+ at node Requirements
+ at section Requirements
+ at cindex requirements for @value{GDBN}
+
+Before diving into the internals, you should understand the formal
+requirements and other expectations for @value{GDBN}.  Although some
+of these may seem obvious, there have been proposals for @value{GDBN}
+that have run counter to these requirements.
+
+First of all, @value{GDBN} is a debugger.  It's not designed to be a
+front panel for embedded systems.  It's not a text editor.  It's not a
+shell.  It's not a programming environment.
+
+ at value{GDBN} is an interactive tool.  Although a batch mode is
+available, @value{GDBN}'s primary role is to interact with a human
+programmer.
+
+ at value{GDBN} should be responsive to the user.  A programmer hot on
+the trail of a nasty bug, and operating under a looming deadline, is
+going to be very impatient of everything, including the response time
+to debugger commands.
+
+ at value{GDBN} should be relatively permissive, such as for expressions.
+While the compiler should be picky (or have the option to be made
+picky), since source code lives for a long time usually, the
+programmer doing debugging shouldn't be spending time figuring out to
+mollify the debugger.
+
+ at value{GDBN} will be called upon to deal with really large programs.
+Executable sizes of 50 to 100 megabytes occur regularly, and we've
+heard reports of programs approaching 1 gigabyte in size.
+
+ at value{GDBN} should be able to run everywhere.  No other debugger is
+available for even half as many configurations as @value{GDBN}
+supports.
+
+ at node Contributors
+ at section Contributors
+
+The first edition of this document was written by John Gilmore of
+Cygnus Solutions. The current second edition was written by Stan Shebs
+of Cygnus Solutions, who continues to update the manual.
+
+Over the years, many others have made additions and changes to this
+document. This section attempts to record the significant contributors
+to that effort. One of the virtues of free software is that everyone
+is free to contribute to it; with regret, we cannot actually
+acknowledge everyone here.
+
+ at quotation
+ at emph{Plea:} This section has only been added relatively recently (four
+years after publication of the second edition). Additions to this
+section are particularly welcome.  If you or your friends (or enemies,
+to be evenhanded) have been unfairly omitted from this list, we would
+like to add your names!
+ at end quotation
+
+A document such as this relies on being kept up to date by numerous
+small updates by contributing engineers as they make changes to the
+code base. The file @file{ChangeLog} in the @value{GDBN} distribution
+approximates a blow-by-blow account. The most prolific contributors to
+this important, but low profile task are Andrew Cagney (responsible
+for over half the entries), Daniel Jacobowitz, Mark Kettenis, Jim
+Blandy and Eli Zaretskii.
+
+Eli Zaretskii and Daniel Jacobowitz wrote the sections documenting
+watchpoints.
+
+Jeremy Bennett updated the sections on initializing a new architecture
+and register representation, and added the section on Frame Interpretation.
+
+
+ at node Overall Structure
+
+ at chapter Overall Structure
+
+ at value{GDBN} consists of three major subsystems: user interface,
+symbol handling (the @dfn{symbol side}), and target system handling (the
+ at dfn{target side}).
+
+The user interface consists of several actual interfaces, plus
+supporting code.
+
+The symbol side consists of object file readers, debugging info
+interpreters, symbol table management, source language expression
+parsing, type and value printing.
+
+The target side consists of execution control, stack frame analysis, and
+physical target manipulation.
+
+The target side/symbol side division is not formal, and there are a
+number of exceptions.  For instance, core file support involves symbolic
+elements (the basic core file reader is in BFD) and target elements (it
+supplies the contents of memory and the values of registers).  Instead,
+this division is useful for understanding how the minor subsystems
+should fit together.
+
+ at section The Symbol Side
+
+The symbolic side of @value{GDBN} can be thought of as ``everything
+you can do in @value{GDBN} without having a live program running''.
+For instance, you can look at the types of variables, and evaluate
+many kinds of expressions.
+
+ at section The Target Side
+
+The target side of @value{GDBN} is the ``bits and bytes manipulator''.
+Although it may make reference to symbolic info here and there, most
+of the target side will run with only a stripped executable
+available---or even no executable at all, in remote debugging cases.
+
+Operations such as disassembly, stack frame crawls, and register
+display, are able to work with no symbolic info at all.  In some cases,
+such as disassembly, @value{GDBN} will use symbolic info to present addresses
+relative to symbols rather than as raw numbers, but it will work either
+way.
+
+ at section Configurations
+
+ at cindex host
+ at cindex target
+ at dfn{Host} refers to attributes of the system where @value{GDBN} runs.
+ at dfn{Target} refers to the system where the program being debugged
+executes.  In most cases they are the same machine, in which case a
+third type of @dfn{Native} attributes come into play.
+
+Defines and include files needed to build on the host are host
+support.  Examples are tty support, system defined types, host byte
+order, host float format.  These are all calculated by @code{autoconf}
+when the debugger is built.
+
+Defines and information needed to handle the target format are target
+dependent.  Examples are the stack frame format, instruction set,
+breakpoint instruction, registers, and how to set up and tear down the stack
+to call a function.
+
+Information that is only needed when the host and target are the same,
+is native dependent.  One example is Unix child process support; if the
+host and target are not the same, calling @code{fork} to start the target
+process is a bad idea.  The various macros needed for finding the
+registers in the @code{upage}, running @code{ptrace}, and such are all
+in the native-dependent files.
+
+Another example of native-dependent code is support for features that
+are really part of the target environment, but which require
+ at code{#include} files that are only available on the host system.  Core
+file handling and @code{setjmp} handling are two common cases.
+
+When you want to make @value{GDBN} work as the traditional native debugger
+on a system, you will need to supply both target and native information.
+
+ at section Source Tree Structure
+ at cindex @value{GDBN} source tree structure
+
+The @value{GDBN} source directory has a mostly flat structure---there
+are only a few subdirectories.  A file's name usually gives a hint as
+to what it does; for example, @file{stabsread.c} reads stabs,
+ at file{dwarf2read.c} reads @sc{DWARF 2}, etc.
+
+Files that are related to some common task have names that share
+common substrings.  For example, @file{*-thread.c} files deal with
+debugging threads on various platforms; @file{*read.c} files deal with
+reading various kinds of symbol and object files; @file{inf*.c} files
+deal with direct control of the @dfn{inferior program} (@value{GDBN}
+parlance for the program being debugged).
+
+There are several dozens of files in the @file{*-tdep.c} family.
+ at samp{tdep} stands for @dfn{target-dependent code}---each of these
+files implements debug support for a specific target architecture
+(sparc, mips, etc).  Usually, only one of these will be used in a
+specific @value{GDBN} configuration (sometimes two, closely related).
+
+Similarly, there are many @file{*-nat.c} files, each one for native
+debugging on a specific system (e.g., @file{sparc-linux-nat.c} is for
+native debugging of Sparc machines running the Linux kernel).
+
+The few subdirectories of the source tree are:
+
+ at table @file
+ at item cli
+Code that implements @dfn{CLI}, the @value{GDBN} Command-Line
+Interpreter.  @xref{User Interface, Command Interpreter}.
+
+ at item gdbserver
+Code for the @value{GDBN} remote server.
+
+ at item gdbtk
+Code for Insight, the @value{GDBN} TK-based GUI front-end.
+
+ at item mi
+The @dfn{GDB/MI}, the @value{GDBN} Machine Interface interpreter.
+
+ at item signals
+Target signal translation code.
+
+ at item tui
+Code for @dfn{TUI}, the @value{GDBN} Text-mode full-screen User
+Interface.  @xref{User Interface, TUI}.
+ at end table
+
+ at node Algorithms
+
+ at chapter Algorithms
+ at cindex algorithms
+
+ at value{GDBN} uses a number of debugging-specific algorithms.  They are
+often not very complicated, but get lost in the thicket of special
+cases and real-world issues.  This chapter describes the basic
+algorithms and mentions some of the specific target definitions that
+they use.
+
+ at section Prologue Analysis
+
+ at cindex prologue analysis
+ at cindex call frame information
+ at cindex CFI (call frame information)
+To produce a backtrace and allow the user to manipulate older frames'
+variables and arguments, @value{GDBN} needs to find the base addresses
+of older frames, and discover where those frames' registers have been
+saved.  Since a frame's ``callee-saves'' registers get saved by
+younger frames if and when they're reused, a frame's registers may be
+scattered unpredictably across younger frames.  This means that
+changing the value of a register-allocated variable in an older frame
+may actually entail writing to a save slot in some younger frame.
+
+Modern versions of GCC emit Dwarf call frame information (``CFI''),
+which describes how to find frame base addresses and saved registers.
+But CFI is not always available, so as a fallback @value{GDBN} uses a
+technique called @dfn{prologue analysis} to find frame sizes and saved
+registers.  A prologue analyzer disassembles the function's machine
+code starting from its entry point, and looks for instructions that
+allocate frame space, save the stack pointer in a frame pointer
+register, save registers, and so on.  Obviously, this can't be done
+accurately in general, but it's tractable to do well enough to be very
+helpful.  Prologue analysis predates the GNU toolchain's support for
+CFI; at one time, prologue analysis was the only mechanism
+ at value{GDBN} used for stack unwinding at all, when the function
+calling conventions didn't specify a fixed frame layout.
+
+In the olden days, function prologues were generated by hand-written,
+target-specific code in GCC, and treated as opaque and untouchable by
+optimizers.  Looking at this code, it was usually straightforward to
+write a prologue analyzer for @value{GDBN} that would accurately
+understand all the prologues GCC would generate.  However, over time
+GCC became more aggressive about instruction scheduling, and began to
+understand more about the semantics of the prologue instructions
+themselves; in response, @value{GDBN}'s analyzers became more complex
+and fragile.  Keeping the prologue analyzers working as GCC (and the
+instruction sets themselves) evolved became a substantial task.
+
+ at cindex @file{prologue-value.c}
+ at cindex abstract interpretation of function prologues
+ at cindex pseudo-evaluation of function prologues
+To try to address this problem, the code in @file{prologue-value.h}
+and @file{prologue-value.c} provides a general framework for writing
+prologue analyzers that are simpler and more robust than ad-hoc
+analyzers.  When we analyze a prologue using the prologue-value
+framework, we're really doing ``abstract interpretation'' or
+``pseudo-evaluation'': running the function's code in simulation, but
+using conservative approximations of the values registers and memory
+would hold when the code actually runs.  For example, if our function
+starts with the instruction:
+
+ at example
+addi r1, 42     # add 42 to r1
+ at end example
+ at noindent
+we don't know exactly what value will be in @code{r1} after executing
+this instruction, but we do know it'll be 42 greater than its original
+value.
+
+If we then see an instruction like:
+
+ at example
+addi r1, 22     # add 22 to r1
+ at end example
+ at noindent
+we still don't know what @code{r1's} value is, but again, we can say
+it is now 64 greater than its original value.
+
+If the next instruction were:
+
+ at example
+mov r2, r1      # set r2 to r1's value
+ at end example
+ at noindent
+then we can say that @code{r2's} value is now the original value of
+ at code{r1} plus 64.
+
+It's common for prologues to save registers on the stack, so we'll
+need to track the values of stack frame slots, as well as the
+registers.  So after an instruction like this:
+
+ at example
+mov (fp+4), r2
+ at end example
+ at noindent
+then we'd know that the stack slot four bytes above the frame pointer
+holds the original value of @code{r1} plus 64.
+
+And so on.
+
+Of course, this can only go so far before it gets unreasonable.  If we
+wanted to be able to say anything about the value of @code{r1} after
+the instruction:
+
+ at example
+xor r1, r3      # exclusive-or r1 and r3, place result in r1
+ at end example
+ at noindent
+then things would get pretty complex.  But remember, we're just doing
+a conservative approximation; if exclusive-or instructions aren't
+relevant to prologues, we can just say @code{r1}'s value is now
+``unknown''.  We can ignore things that are too complex, if that loss of
+information is acceptable for our application.
+
+So when we say ``conservative approximation'' here, what we mean is an
+approximation that is either accurate, or marked ``unknown'', but
+never inaccurate.
+
+Using this framework, a prologue analyzer is simply an interpreter for
+machine code, but one that uses conservative approximations for the
+contents of registers and memory instead of actual values.  Starting
+from the function's entry point, you simulate instructions up to the
+current PC, or an instruction that you don't know how to simulate.
+Now you can examine the state of the registers and stack slots you've
+kept track of.
+
+ at itemize @bullet
+
+ at item
+To see how large your stack frame is, just check the value of the
+stack pointer register; if it's the original value of the SP
+minus a constant, then that constant is the stack frame's size.
+If the SP's value has been marked as ``unknown'', then that means
+the prologue has done something too complex for us to track, and
+we don't know the frame size.
+
+ at item
+To see where we've saved the previous frame's registers, we just
+search the values we've tracked --- stack slots, usually, but
+registers, too, if you want --- for something equal to the register's
+original value.  If the calling conventions suggest a standard place
+to save a given register, then we can check there first, but really,
+anything that will get us back the original value will probably work.
+ at end itemize
+
+This does take some work.  But prologue analyzers aren't
+quick-and-simple pattern patching to recognize a few fixed prologue
+forms any more; they're big, hairy functions.  Along with inferior
+function calls, prologue analysis accounts for a substantial portion
+of the time needed to stabilize a @value{GDBN} port.  So it's
+worthwhile to look for an approach that will be easier to understand
+and maintain.  In the approach described above:
+
+ at itemize @bullet
+
+ at item
+It's easier to see that the analyzer is correct: you just see
+whether the analyzer properly (albeit conservatively) simulates
+the effect of each instruction.
+
+ at item
+It's easier to extend the analyzer: you can add support for new
+instructions, and know that you haven't broken anything that
+wasn't already broken before.
+
+ at item
+It's orthogonal: to gather new information, you don't need to
+complicate the code for each instruction.  As long as your domain
+of conservative values is already detailed enough to tell you
+what you need, then all the existing instruction simulations are
+already gathering the right data for you.
+
+ at end itemize
+
+The file @file{prologue-value.h} contains detailed comments explaining
+the framework and how to use it.
+
+
+ at section Breakpoint Handling
+
+ at cindex breakpoints
+In general, a breakpoint is a user-designated location in the program
+where the user wants to regain control if program execution ever reaches
+that location.
+
+There are two main ways to implement breakpoints; either as ``hardware''
+breakpoints or as ``software'' breakpoints.
+
+ at cindex hardware breakpoints
+ at cindex program counter
+Hardware breakpoints are sometimes available as a builtin debugging
+features with some chips.  Typically these work by having dedicated
+register into which the breakpoint address may be stored.  If the PC
+(shorthand for @dfn{program counter})
+ever matches a value in a breakpoint registers, the CPU raises an
+exception and reports it to @value{GDBN}.
+
+Another possibility is when an emulator is in use; many emulators
+include circuitry that watches the address lines coming out from the
+processor, and force it to stop if the address matches a breakpoint's
+address.
+
+A third possibility is that the target already has the ability to do
+breakpoints somehow; for instance, a ROM monitor may do its own
+software breakpoints.  So although these are not literally ``hardware
+breakpoints'', from @value{GDBN}'s point of view they work the same;
+ at value{GDBN} need not do anything more than set the breakpoint and wait
+for something to happen.
+
+Since they depend on hardware resources, hardware breakpoints may be
+limited in number; when the user asks for more, @value{GDBN} will
+start trying to set software breakpoints.  (On some architectures,
+notably the 32-bit x86 platforms, @value{GDBN} cannot always know
+whether there's enough hardware resources to insert all the hardware
+breakpoints and watchpoints.  On those platforms, @value{GDBN} prints
+an error message only when the program being debugged is continued.)
+
+ at cindex software breakpoints
+Software breakpoints require @value{GDBN} to do somewhat more work.
+The basic theory is that @value{GDBN} will replace a program
+instruction with a trap, illegal divide, or some other instruction
+that will cause an exception, and then when it's encountered,
+ at value{GDBN} will take the exception and stop the program.  When the
+user says to continue, @value{GDBN} will restore the original
+instruction, single-step, re-insert the trap, and continue on.
+
+Since it literally overwrites the program being tested, the program area
+must be writable, so this technique won't work on programs in ROM.  It
+can also distort the behavior of programs that examine themselves,
+although such a situation would be highly unusual.
+
+Also, the software breakpoint instruction should be the smallest size of
+instruction, so it doesn't overwrite an instruction that might be a jump
+target, and cause disaster when the program jumps into the middle of the
+breakpoint instruction.  (Strictly speaking, the breakpoint must be no
+larger than the smallest interval between instructions that may be jump
+targets; perhaps there is an architecture where only even-numbered
+instructions may jumped to.)  Note that it's possible for an instruction
+set not to have any instructions usable for a software breakpoint,
+although in practice only the ARC has failed to define such an
+instruction.
+
+Basic breakpoint object handling is in @file{breakpoint.c}.  However,
+much of the interesting breakpoint action is in @file{infrun.c}.
+
+ at table @code
+ at cindex insert or remove software breakpoint
+ at findex target_remove_breakpoint
+ at findex target_insert_breakpoint
+ at item target_remove_breakpoint (@var{bp_tgt})
+ at itemx target_insert_breakpoint (@var{bp_tgt})
+Insert or remove a software breakpoint at address
+ at code{@var{bp_tgt}->placed_address}.  Returns zero for success,
+non-zero for failure.  On input, @var{bp_tgt} contains the address of the
+breakpoint, and is otherwise initialized to zero.  The fields of the
+ at code{struct bp_target_info} pointed to by @var{bp_tgt} are updated
+to contain other information about the breakpoint on output.  The field
+ at code{placed_address} may be updated if the breakpoint was placed at a
+related address; the field @code{shadow_contents} contains the real
+contents of the bytes where the breakpoint has been inserted,
+if reading memory would return the breakpoint instead of the
+underlying memory; the field @code{shadow_len} is the length of
+memory cached in @code{shadow_contents}, if any; and the field
+ at code{placed_size} is optionally set and used by the target, if
+it could differ from @code{shadow_len}.
+
+For example, the remote target @samp{Z0} packet does not require
+shadowing memory, so @code{shadow_len} is left at zero.  However,
+the length reported by @code{gdbarch_breakpoint_from_pc} is cached in
+ at code{placed_size}, so that a matching @samp{z0} packet can be
+used to remove the breakpoint.
+
+ at cindex insert or remove hardware breakpoint
+ at findex target_remove_hw_breakpoint
+ at findex target_insert_hw_breakpoint
+ at item target_remove_hw_breakpoint (@var{bp_tgt})
+ at itemx target_insert_hw_breakpoint (@var{bp_tgt})
+Insert or remove a hardware-assisted breakpoint at address
+ at code{@var{bp_tgt}->placed_address}.  Returns zero for success,
+non-zero for failure.  See @code{target_insert_breakpoint} for
+a description of the @code{struct bp_target_info} pointed to by
+ at var{bp_tgt}; the @code{shadow_contents} and
+ at code{shadow_len} members are not used for hardware breakpoints,
+but @code{placed_size} may be.
+ at end table
+
+ at section Single Stepping
+
+ at section Signal Handling
+
+ at section Thread Handling
+
+ at section Inferior Function Calls
+
+ at section Longjmp Support
+
+ at cindex @code{longjmp} debugging
+ at value{GDBN} has support for figuring out that the target is doing a
+ at code{longjmp} and for stopping at the target of the jump, if we are
+stepping.  This is done with a few specialized internal breakpoints,
+which are visible in the output of the @samp{maint info breakpoint}
+command.
+
+ at findex gdbarch_get_longjmp_target
+To make this work, you need to define a function called
+ at code{gdbarch_get_longjmp_target}, which will examine the
+ at code{jmp_buf} structure and extract the @code{longjmp} target address.
+Since @code{jmp_buf} is target specific and typically defined in a
+target header not available to @value{GDBN}, you will need to
+determine the offset of the PC manually and return that; many targets
+define a @code{jb_pc_offset} field in the tdep structure to save the
+value once calculated.
+
+ at section Watchpoints
+ at cindex watchpoints
+
+Watchpoints are a special kind of breakpoints (@pxref{Algorithms,
+breakpoints}) which break when data is accessed rather than when some
+instruction is executed.  When you have data which changes without
+your knowing what code does that, watchpoints are the silver bullet to
+hunt down and kill such bugs.
+
+ at cindex hardware watchpoints
+ at cindex software watchpoints
+Watchpoints can be either hardware-assisted or not; the latter type is
+known as ``software watchpoints.''  @value{GDBN} always uses
+hardware-assisted watchpoints if they are available, and falls back on
+software watchpoints otherwise.  Typical situations where @value{GDBN}
+will use software watchpoints are:
+
+ at itemize @bullet
+ at item
+The watched memory region is too large for the underlying hardware
+watchpoint support.  For example, each x86 debug register can watch up
+to 4 bytes of memory, so trying to watch data structures whose size is
+more than 16 bytes will cause @value{GDBN} to use software
+watchpoints.
+
+ at item
+The value of the expression to be watched depends on data held in
+registers (as opposed to memory).
+
+ at item
+Too many different watchpoints requested.  (On some architectures,
+this situation is impossible to detect until the debugged program is
+resumed.)  Note that x86 debug registers are used both for hardware
+breakpoints and for watchpoints, so setting too many hardware
+breakpoints might cause watchpoint insertion to fail.
+
+ at item
+No hardware-assisted watchpoints provided by the target
+implementation.
+ at end itemize
+
+Software watchpoints are very slow, since @value{GDBN} needs to
+single-step the program being debugged and test the value of the
+watched expression(s) after each instruction.  The rest of this
+section is mostly irrelevant for software watchpoints.
+
+When the inferior stops, @value{GDBN} tries to establish, among other
+possible reasons, whether it stopped due to a watchpoint being hit.
+It first uses @code{STOPPED_BY_WATCHPOINT} to see if any watchpoint
+was hit.  If not, all watchpoint checking is skipped.
+
+Then @value{GDBN} calls @code{target_stopped_data_address} exactly
+once.  This method returns the address of the watchpoint which
+triggered, if the target can determine it.  If the triggered address
+is available, @value{GDBN} compares the address returned by this
+method with each watched memory address in each active watchpoint.
+For data-read and data-access watchpoints, @value{GDBN} announces
+every watchpoint that watches the triggered address as being hit.
+For this reason, data-read and data-access watchpoints
+ at emph{require} that the triggered address be available; if not, read
+and access watchpoints will never be considered hit.  For data-write
+watchpoints, if the triggered address is available, @value{GDBN}
+considers only those watchpoints which match that address;
+otherwise, @value{GDBN} considers all data-write watchpoints.  For
+each data-write watchpoint that @value{GDBN} considers, it evaluates
+the expression whose value is being watched, and tests whether the
+watched value has changed.  Watchpoints whose watched values have
+changed are announced as hit.
+
+ at c FIXME move these to the main lists of target/native defns
+
+ at value{GDBN} uses several macros and primitives to support hardware
+watchpoints:
+
+ at table @code
+ at findex TARGET_CAN_USE_HARDWARE_WATCHPOINT
+ at item TARGET_CAN_USE_HARDWARE_WATCHPOINT (@var{type}, @var{count}, @var{other})
+Return the number of hardware watchpoints of type @var{type} that are
+possible to be set.  The value is positive if @var{count} watchpoints
+of this type can be set, zero if setting watchpoints of this type is
+not supported, and negative if @var{count} is more than the maximum
+number of watchpoints of type @var{type} that can be set.  @var{other}
+is non-zero if other types of watchpoints are currently enabled (there
+are architectures which cannot set watchpoints of different types at
+the same time).
+
+ at findex TARGET_REGION_OK_FOR_HW_WATCHPOINT
+ at item TARGET_REGION_OK_FOR_HW_WATCHPOINT (@var{addr}, @var{len})
+Return non-zero if hardware watchpoints can be used to watch a region
+whose address is @var{addr} and whose length in bytes is @var{len}.
+
+ at cindex insert or remove hardware watchpoint
+ at findex target_insert_watchpoint
+ at findex target_remove_watchpoint
+ at item target_insert_watchpoint (@var{addr}, @var{len}, @var{type})
+ at itemx target_remove_watchpoint (@var{addr}, @var{len}, @var{type})
+Insert or remove a hardware watchpoint starting at @var{addr}, for
+ at var{len} bytes.  @var{type} is the watchpoint type, one of the
+possible values of the enumerated data type @code{target_hw_bp_type},
+defined by @file{breakpoint.h} as follows:
+
+ at smallexample
+ enum target_hw_bp_type
+   @{
+     hw_write   = 0, /* Common (write) HW watchpoint */
+     hw_read    = 1, /* Read    HW watchpoint */
+     hw_access  = 2, /* Access (read or write) HW watchpoint */
+     hw_execute = 3  /* Execute HW breakpoint */
+   @};
+ at end smallexample
+
+ at noindent
+These two macros should return 0 for success, non-zero for failure.
+
+ at findex target_stopped_data_address
+ at item target_stopped_data_address (@var{addr_p})
+If the inferior has some watchpoint that triggered, place the address
+associated with the watchpoint at the location pointed to by
+ at var{addr_p} and return non-zero.  Otherwise, return zero.  This
+is required for data-read and data-access watchpoints.  It is
+not required for data-write watchpoints, but @value{GDBN} uses
+it to improve handling of those also.
+
+ at value{GDBN} will only call this method once per watchpoint stop,
+immediately after calling @code{STOPPED_BY_WATCHPOINT}.  If the
+target's watchpoint indication is sticky, i.e., stays set after
+resuming, this method should clear it.  For instance, the x86 debug
+control register has sticky triggered flags.
+
+ at findex target_watchpoint_addr_within_range
+ at item target_watchpoint_addr_within_range (@var{target}, @var{addr}, @var{start}, @var{length})
+Check whether @var{addr} (as returned by @code{target_stopped_data_address})
+lies within the hardware-defined watchpoint region described by
+ at var{start} and @var{length}.  This only needs to be provided if the
+granularity of a watchpoint is greater than one byte, i.e., if the
+watchpoint can also trigger on nearby addresses outside of the watched
+region.
+
+ at findex HAVE_STEPPABLE_WATCHPOINT
+ at item HAVE_STEPPABLE_WATCHPOINT
+If defined to a non-zero value, it is not necessary to disable a
+watchpoint to step over it.  Like @code{gdbarch_have_nonsteppable_watchpoint},
+this is usually set when watchpoints trigger at the instruction
+which will perform an interesting read or write.  It should be
+set if there is a temporary disable bit which allows the processor
+to step over the interesting instruction without raising the
+watchpoint exception again.
+
+ at findex gdbarch_have_nonsteppable_watchpoint 
+ at item int gdbarch_have_nonsteppable_watchpoint (@var{gdbarch})
+If it returns a non-zero value, @value{GDBN} should disable a
+watchpoint to step the inferior over it.  This is usually set when
+watchpoints trigger at the instruction which will perform an
+interesting read or write.
+
+ at findex HAVE_CONTINUABLE_WATCHPOINT
+ at item HAVE_CONTINUABLE_WATCHPOINT
+If defined to a non-zero value, it is possible to continue the
+inferior after a watchpoint has been hit.  This is usually set
+when watchpoints trigger at the instruction following an interesting
+read or write.
+
+ at findex STOPPED_BY_WATCHPOINT
+ at item STOPPED_BY_WATCHPOINT (@var{wait_status})
+Return non-zero if stopped by a watchpoint.  @var{wait_status} is of
+the type @code{struct target_waitstatus}, defined by @file{target.h}.
+Normally, this macro is defined to invoke the function pointed to by
+the @code{to_stopped_by_watchpoint} member of the structure (of the
+type @code{target_ops}, defined on @file{target.h}) that describes the
+target-specific operations; @code{to_stopped_by_watchpoint} ignores
+the @var{wait_status} argument.
+
+ at value{GDBN} does not require the non-zero value returned by
+ at code{STOPPED_BY_WATCHPOINT} to be 100% correct, so if a target cannot
+determine for sure whether the inferior stopped due to a watchpoint,
+it could return non-zero ``just in case''.
+ at end table
+
+ at subsection Watchpoints and Threads
+ at cindex watchpoints, with threads
+
+ at value{GDBN} only supports process-wide watchpoints, which trigger
+in all threads.  @value{GDBN} uses the thread ID to make watchpoints
+act as if they were thread-specific, but it cannot set hardware
+watchpoints that only trigger in a specific thread.  Therefore, even
+if the target supports threads, per-thread debug registers, and
+watchpoints which only affect a single thread, it should set the
+per-thread debug registers for all threads to the same value.  On
+ at sc{gnu}/Linux native targets, this is accomplished by using
+ at code{ALL_LWPS} in @code{target_insert_watchpoint} and
+ at code{target_remove_watchpoint} and by using
+ at code{linux_set_new_thread} to register a handler for newly created
+threads.
+
+ at value{GDBN}'s @sc{gnu}/Linux support only reports a single event
+at a time, although multiple events can trigger simultaneously for
+multi-threaded programs.  When multiple events occur, @file{linux-nat.c}
+queues subsequent events and returns them the next time the program
+is resumed.  This means that @code{STOPPED_BY_WATCHPOINT} and
+ at code{target_stopped_data_address} only need to consult the current
+thread's state---the thread indicated by @code{inferior_ptid}.  If
+two threads have hit watchpoints simultaneously, those routines
+will be called a second time for the second thread.
+
+ at subsection x86 Watchpoints
+ at cindex x86 debug registers
+ at cindex watchpoints, on x86
+
+The 32-bit Intel x86 (a.k.a.@: ia32) processors feature special debug
+registers designed to facilitate debugging.  @value{GDBN} provides a
+generic library of functions that x86-based ports can use to implement
+support for watchpoints and hardware-assisted breakpoints.  This
+subsection documents the x86 watchpoint facilities in @value{GDBN}.
+
+(At present, the library functions read and write debug registers directly, and are
+thus only available for native configurations.)
+
+To use the generic x86 watchpoint support, a port should do the
+following:
+
+ at itemize @bullet
+ at findex I386_USE_GENERIC_WATCHPOINTS
+ at item
+Define the macro @code{I386_USE_GENERIC_WATCHPOINTS} somewhere in the
+target-dependent headers.
+
+ at item
+Include the @file{config/i386/nm-i386.h} header file @emph{after}
+defining @code{I386_USE_GENERIC_WATCHPOINTS}.
+
+ at item
+Add @file{i386-nat.o} to the value of the Make variable
+ at code{NATDEPFILES} (@pxref{Native Debugging, NATDEPFILES}).
+
+ at item
+Provide implementations for the @code{I386_DR_LOW_*} macros described
+below.  Typically, each macro should call a target-specific function
+which does the real work.
+ at end itemize
+
+The x86 watchpoint support works by maintaining mirror images of the
+debug registers.  Values are copied between the mirror images and the
+real debug registers via a set of macros which each target needs to
+provide:
+
+ at table @code
+ at findex I386_DR_LOW_SET_CONTROL
+ at item I386_DR_LOW_SET_CONTROL (@var{val})
+Set the Debug Control (DR7) register to the value @var{val}.
+
+ at findex I386_DR_LOW_SET_ADDR
+ at item I386_DR_LOW_SET_ADDR (@var{idx}, @var{addr})
+Put the address @var{addr} into the debug register number @var{idx}.
+
+ at findex I386_DR_LOW_RESET_ADDR
+ at item I386_DR_LOW_RESET_ADDR (@var{idx})
+Reset (i.e.@: zero out) the address stored in the debug register
+number @var{idx}.
+
+ at findex I386_DR_LOW_GET_STATUS
+ at item I386_DR_LOW_GET_STATUS
+Return the value of the Debug Status (DR6) register.  This value is
+used immediately after it is returned by
+ at code{I386_DR_LOW_GET_STATUS}, so as to support per-thread status
+register values.
+ at end table
+
+For each one of the 4 debug registers (whose indices are from 0 to 3)
+that store addresses, a reference count is maintained by @value{GDBN},
+to allow sharing of debug registers by several watchpoints.  This
+allows users to define several watchpoints that watch the same
+expression, but with different conditions and/or commands, without
+wasting debug registers which are in short supply.  @value{GDBN}
+maintains the reference counts internally, targets don't have to do
+anything to use this feature.
+
+The x86 debug registers can each watch a region that is 1, 2, or 4
+bytes long.  The ia32 architecture requires that each watched region
+be appropriately aligned: 2-byte region on 2-byte boundary, 4-byte
+region on 4-byte boundary.  However, the x86 watchpoint support in
+ at value{GDBN} can watch unaligned regions and regions larger than 4
+bytes (up to 16 bytes) by allocating several debug registers to watch
+a single region.  This allocation of several registers per a watched
+region is also done automatically without target code intervention.
+
+The generic x86 watchpoint support provides the following API for the
+ at value{GDBN}'s application code:
+
+ at table @code
+ at findex i386_region_ok_for_watchpoint
+ at item i386_region_ok_for_watchpoint (@var{addr}, @var{len})
+The macro @code{TARGET_REGION_OK_FOR_HW_WATCHPOINT} is set to call
+this function.  It counts the number of debug registers required to
+watch a given region, and returns a non-zero value if that number is
+less than 4, the number of debug registers available to x86
+processors.
+
+ at findex i386_stopped_data_address
+ at item i386_stopped_data_address (@var{addr_p})
+The target function
+ at code{target_stopped_data_address} is set to call this function.
+This
+function examines the breakpoint condition bits in the DR6 Debug
+Status register, as returned by the @code{I386_DR_LOW_GET_STATUS}
+macro, and returns the address associated with the first bit that is
+set in DR6.
+
+ at findex i386_stopped_by_watchpoint
+ at item i386_stopped_by_watchpoint (void)
+The macro @code{STOPPED_BY_WATCHPOINT}
+is set to call this function.  The
+argument passed to @code{STOPPED_BY_WATCHPOINT} is ignored.  This
+function examines the breakpoint condition bits in the DR6 Debug
+Status register, as returned by the @code{I386_DR_LOW_GET_STATUS}
+macro, and returns true if any bit is set.  Otherwise, false is
+returned.
+
+ at findex i386_insert_watchpoint
+ at findex i386_remove_watchpoint
+ at item i386_insert_watchpoint (@var{addr}, @var{len}, @var{type})
+ at itemx i386_remove_watchpoint (@var{addr}, @var{len}, @var{type})
+Insert or remove a watchpoint.  The macros
+ at code{target_insert_watchpoint} and @code{target_remove_watchpoint}
+are set to call these functions.  @code{i386_insert_watchpoint} first
+looks for a debug register which is already set to watch the same
+region for the same access types; if found, it just increments the
+reference count of that debug register, thus implementing debug
+register sharing between watchpoints.  If no such register is found,
+the function looks for a vacant debug register, sets its mirrored
+value to @var{addr}, sets the mirrored value of DR7 Debug Control
+register as appropriate for the @var{len} and @var{type} parameters,
+and then passes the new values of the debug register and DR7 to the
+inferior by calling @code{I386_DR_LOW_SET_ADDR} and
+ at code{I386_DR_LOW_SET_CONTROL}.  If more than one debug register is
+required to cover the given region, the above process is repeated for
+each debug register.
+
+ at code{i386_remove_watchpoint} does the opposite: it resets the address
+in the mirrored value of the debug register and its read/write and
+length bits in the mirrored value of DR7, then passes these new
+values to the inferior via @code{I386_DR_LOW_RESET_ADDR} and
+ at code{I386_DR_LOW_SET_CONTROL}.  If a register is shared by several
+watchpoints, each time a @code{i386_remove_watchpoint} is called, it
+decrements the reference count, and only calls
+ at code{I386_DR_LOW_RESET_ADDR} and @code{I386_DR_LOW_SET_CONTROL} when
+the count goes to zero.
+
+ at findex i386_insert_hw_breakpoint
+ at findex i386_remove_hw_breakpoint
+ at item i386_insert_hw_breakpoint (@var{bp_tgt})
+ at itemx i386_remove_hw_breakpoint (@var{bp_tgt})
+These functions insert and remove hardware-assisted breakpoints.  The
+macros @code{target_insert_hw_breakpoint} and
+ at code{target_remove_hw_breakpoint} are set to call these functions.
+The argument is a @code{struct bp_target_info *}, as described in
+the documentation for @code{target_insert_breakpoint}.
+These functions work like @code{i386_insert_watchpoint} and
+ at code{i386_remove_watchpoint}, respectively, except that they set up
+the debug registers to watch instruction execution, and each
+hardware-assisted breakpoint always requires exactly one debug
+register.
+
+ at findex i386_cleanup_dregs
+ at item i386_cleanup_dregs (void)
+This function clears all the reference counts, addresses, and control
+bits in the mirror images of the debug registers.  It doesn't affect
+the actual debug registers in the inferior process.
+ at end table
+
+ at noindent
+ at strong{Notes:}
+ at enumerate 1
+ at item
+x86 processors support setting watchpoints on I/O reads or writes.
+However, since no target supports this (as of March 2001), and since
+ at code{enum target_hw_bp_type} doesn't even have an enumeration for I/O
+watchpoints, this feature is not yet available to @value{GDBN} running
+on x86.
+
+ at item
+x86 processors can enable watchpoints locally, for the current task
+only, or globally, for all the tasks.  For each debug register,
+there's a bit in the DR7 Debug Control register that determines
+whether the associated address is watched locally or globally.  The
+current implementation of x86 watchpoint support in @value{GDBN}
+always sets watchpoints to be locally enabled, since global
+watchpoints might interfere with the underlying OS and are probably
+unavailable in many platforms.
+ at end enumerate
+
+ at section Checkpoints
+ at cindex checkpoints
+ at cindex restart
+In the abstract, a checkpoint is a point in the execution history of
+the program, which the user may wish to return to at some later time.
+
+Internally, a checkpoint is a saved copy of the program state, including
+whatever information is required in order to restore the program to that
+state at a later time.  This can be expected to include the state of 
+registers and memory, and may include external state such as the state
+of open files and devices.
+
+There are a number of ways in which checkpoints may be implemented
+in gdb, e.g.@: as corefiles, as forked processes, and as some opaque
+method implemented on the target side.
+
+A corefile can be used to save an image of target memory and register
+state, which can in principle be restored later --- but corefiles do
+not typically include information about external entities such as 
+open files.  Currently this method is not implemented in gdb.
+
+A forked process can save the state of user memory and registers, 
+as well as some subset of external (kernel) state.  This method 
+is used to implement checkpoints on Linux, and in principle might
+be used on other systems.
+
+Some targets, e.g.@: simulators, might have their own built-in 
+method for saving checkpoints, and gdb might be able to take
+advantage of that capability without necessarily knowing any
+details of how it is done.
+
+
+ at section Observing changes in @value{GDBN} internals
+ at cindex observer pattern interface
+ at cindex notifications about changes in internals
+
+In order to function properly, several modules need to be notified when
+some changes occur in the @value{GDBN} internals.  Traditionally, these
+modules have relied on several paradigms, the most common ones being
+hooks and gdb-events.  Unfortunately, none of these paradigms was
+versatile enough to become the standard notification mechanism in
+ at value{GDBN}.  The fact that they only supported one ``client'' was also
+a strong limitation.
+
+A new paradigm, based on the Observer pattern of the @cite{Design
+Patterns} book, has therefore been implemented.  The goal was to provide
+a new interface overcoming the issues with the notification mechanisms
+previously available.  This new interface needed to be strongly typed,
+easy to extend, and versatile enough to be used as the standard
+interface when adding new notifications.
+
+See @ref{GDB Observers} for a brief description of the observers
+currently implemented in GDB. The rationale for the current
+implementation is also briefly discussed.
+
+ at node User Interface
+
+ at chapter User Interface
+
+ at value{GDBN} has several user interfaces, of which the traditional
+command-line interface is perhaps the most familiar.
+
+ at section Command Interpreter
+
+ at cindex command interpreter
+ at cindex CLI
+The command interpreter in @value{GDBN} is fairly simple.  It is designed to
+allow for the set of commands to be augmented dynamically, and also
+has a recursive subcommand capability, where the first argument to
+a command may itself direct a lookup on a different command list.
+
+For instance, the @samp{set} command just starts a lookup on the
+ at code{setlist} command list, while @samp{set thread} recurses
+to the @code{set_thread_cmd_list}.
+
+ at findex add_cmd
+ at findex add_com
+To add commands in general, use @code{add_cmd}.  @code{add_com} adds to
+the main command list, and should be used for those commands.  The usual
+place to add commands is in the @code{_initialize_ at var{xyz}} routines at
+the ends of most source files.
+
+ at findex add_setshow_cmd
+ at findex add_setshow_cmd_full
+To add paired @samp{set} and @samp{show} commands, use
+ at code{add_setshow_cmd} or @code{add_setshow_cmd_full}.  The former is
+a slightly simpler interface which is useful when you don't need to
+further modify the new command structures, while the latter returns
+the new command structures for manipulation.
+
+ at cindex deprecating commands
+ at findex deprecate_cmd
+Before removing commands from the command set it is a good idea to
+deprecate them for some time.  Use @code{deprecate_cmd} on commands or
+aliases to set the deprecated flag.  @code{deprecate_cmd} takes a
+ at code{struct cmd_list_element} as it's first argument.  You can use the
+return value from @code{add_com} or @code{add_cmd} to deprecate the
+command immediately after it is created.
+
+The first time a command is used the user will be warned and offered a
+replacement (if one exists). Note that the replacement string passed to
+ at code{deprecate_cmd} should be the full name of the command, i.e., the
+entire string the user should type at the command line.
+
+ at anchor{UI-Independent Output}
+ at section UI-Independent Output---the @code{ui_out} Functions
+ at c This section is based on the documentation written by Fernando
+ at c Nasser <fnasser at redhat.com>.
+
+ at cindex @code{ui_out} functions
+The @code{ui_out} functions present an abstraction level for the
+ at value{GDBN} output code.  They hide the specifics of different user
+interfaces supported by @value{GDBN}, and thus free the programmer
+from the need to write several versions of the same code, one each for
+every UI, to produce output.
+
+ at subsection Overview and Terminology
+
+In general, execution of each @value{GDBN} command produces some sort
+of output, and can even generate an input request.
+
+Output can be generated for the following purposes:
+
+ at itemize @bullet
+ at item
+to display a @emph{result} of an operation;
+
+ at item
+to convey @emph{info} or produce side-effects of a requested
+operation;
+
+ at item
+to provide a @emph{notification} of an asynchronous event (including
+progress indication of a prolonged asynchronous operation);
+
+ at item
+to display @emph{error messages} (including warnings);
+
+ at item
+to show @emph{debug data};
+
+ at item
+to @emph{query} or prompt a user for input (a special case).
+ at end itemize
+
+ at noindent
+This section mainly concentrates on how to build result output,
+although some of it also applies to other kinds of output.
+
+Generation of output that displays the results of an operation
+involves one or more of the following:
+
+ at itemize @bullet
+ at item
+output of the actual data
+
+ at item
+formatting the output as appropriate for console output, to make it
+easily readable by humans
+
+ at item
+machine oriented formatting--a more terse formatting to allow for easy
+parsing by programs which read @value{GDBN}'s output
+
+ at item
+annotation, whose purpose is to help legacy GUIs to identify interesting
+parts in the output
+ at end itemize
+
+The @code{ui_out} routines take care of the first three aspects.
+Annotations are provided by separate annotation routines.  Note that use
+of annotations for an interface between a GUI and @value{GDBN} is
+deprecated.
+
+Output can be in the form of a single item, which we call a @dfn{field};
+a @dfn{list} consisting of identical fields; a @dfn{tuple} consisting of
+non-identical fields; or a @dfn{table}, which is a tuple consisting of a
+header and a body.  In a BNF-like form:
+
+ at table @code
+ at item <table> @expansion{}
+ at code{<header> <body>}
+ at item <header> @expansion{}
+ at code{@{ <column> @}}
+ at item <column> @expansion{}
+ at code{<width> <alignment> <title>}
+ at item <body> @expansion{}
+ at code{@{<row>@}}
+ at end table
+
+
+ at subsection General Conventions
+
+Most @code{ui_out} routines are of type @code{void}, the exceptions are
+ at code{ui_out_stream_new} (which returns a pointer to the newly created
+object) and the @code{make_cleanup} routines.
+
+The first parameter is always the @code{ui_out} vector object, a pointer
+to a @code{struct ui_out}.
+
+The @var{format} parameter is like in @code{printf} family of functions.
+When it is present, there must also be a variable list of arguments
+sufficient used to satisfy the @code{%} specifiers in the supplied
+format.
+
+When a character string argument is not used in a @code{ui_out} function
+call, a @code{NULL} pointer has to be supplied instead.
+
+
+ at subsection Table, Tuple and List Functions
+
+ at cindex list output functions
+ at cindex table output functions
+ at cindex tuple output functions
+This section introduces @code{ui_out} routines for building lists,
+tuples and tables.  The routines to output the actual data items
+(fields) are presented in the next section.
+
+To recap: A @dfn{tuple} is a sequence of @dfn{fields}, each field
+containing information about an object; a @dfn{list} is a sequence of
+fields where each field describes an identical object.
+
+Use the @dfn{table} functions when your output consists of a list of
+rows (tuples) and the console output should include a heading.  Use this
+even when you are listing just one object but you still want the header.
+
+ at cindex nesting level in @code{ui_out} functions
+Tables can not be nested.  Tuples and lists can be nested up to a
+maximum of five levels.
+
+The overall structure of the table output code is something like this:
+
+ at smallexample
+  ui_out_table_begin
+    ui_out_table_header
+    @dots{}
+    ui_out_table_body
+      ui_out_tuple_begin
+        ui_out_field_*
+        @dots{}
+      ui_out_tuple_end
+      @dots{}
+  ui_out_table_end
+ at end smallexample
+
+Here is the description of table-, tuple- and list-related @code{ui_out}
+functions:
+
+ at deftypefun void ui_out_table_begin (struct ui_out *@var{uiout}, int @var{nbrofcols}, int @var{nr_rows}, const char *@var{tblid})
+The function @code{ui_out_table_begin} marks the beginning of the output
+of a table.  It should always be called before any other @code{ui_out}
+function for a given table.  @var{nbrofcols} is the number of columns in
+the table. @var{nr_rows} is the number of rows in the table.
+ at var{tblid} is an optional string identifying the table.  The string
+pointed to by @var{tblid} is copied by the implementation of
+ at code{ui_out_table_begin}, so the application can free the string if it
+was @code{malloc}ed.
+
+The companion function @code{ui_out_table_end}, described below, marks
+the end of the table's output.
+ at end deftypefun
+
+ at deftypefun void ui_out_table_header (struct ui_out *@var{uiout}, int @var{width}, enum ui_align @var{alignment}, const char *@var{colhdr})
+ at code{ui_out_table_header} provides the header information for a single
+table column.  You call this function several times, one each for every
+column of the table, after @code{ui_out_table_begin}, but before
+ at code{ui_out_table_body}.
+
+The value of @var{width} gives the column width in characters.  The
+value of @var{alignment} is one of @code{left}, @code{center}, and
+ at code{right}, and it specifies how to align the header: left-justify,
+center, or right-justify it.  @var{colhdr} points to a string that
+specifies the column header; the implementation copies that string, so
+column header strings in @code{malloc}ed storage can be freed after the
+call.
+ at end deftypefun
+
+ at deftypefun void ui_out_table_body (struct ui_out *@var{uiout})
+This function delimits the table header from the table body.
+ at end deftypefun
+
+ at deftypefun void ui_out_table_end (struct ui_out *@var{uiout})
+This function signals the end of a table's output.  It should be called
+after the table body has been produced by the list and field output
+functions.
+
+There should be exactly one call to @code{ui_out_table_end} for each
+call to @code{ui_out_table_begin}, otherwise the @code{ui_out} functions
+will signal an internal error.
+ at end deftypefun
+
+The output of the tuples that represent the table rows must follow the
+call to @code{ui_out_table_body} and precede the call to
+ at code{ui_out_table_end}.  You build a tuple by calling
+ at code{ui_out_tuple_begin} and @code{ui_out_tuple_end}, with suitable
+calls to functions which actually output fields between them.
+
+ at deftypefun void ui_out_tuple_begin (struct ui_out *@var{uiout}, const char *@var{id})
+This function marks the beginning of a tuple output.  @var{id} points
+to an optional string that identifies the tuple; it is copied by the
+implementation, and so strings in @code{malloc}ed storage can be freed
+after the call.
+ at end deftypefun
+
+ at deftypefun void ui_out_tuple_end (struct ui_out *@var{uiout})
+This function signals an end of a tuple output.  There should be exactly
+one call to @code{ui_out_tuple_end} for each call to
+ at code{ui_out_tuple_begin}, otherwise an internal @value{GDBN} error will
+be signaled.
+ at end deftypefun
+
+ at deftypefun {struct cleanup *} make_cleanup_ui_out_tuple_begin_end (struct ui_out *@var{uiout}, const char *@var{id})
+This function first opens the tuple and then establishes a cleanup
+(@pxref{Misc Guidelines, Cleanups}) to close the tuple.
+It provides a convenient and correct implementation of the
+non-portable at footnote{The function cast is not portable ISO C.} code sequence:
+ at smallexample
+struct cleanup *old_cleanup;
+ui_out_tuple_begin (uiout, "...");
+old_cleanup = make_cleanup ((void(*)(void *)) ui_out_tuple_end,
+                            uiout);
+ at end smallexample
+ at end deftypefun
+
+ at deftypefun void ui_out_list_begin (struct ui_out *@var{uiout}, const char *@var{id})
+This function marks the beginning of a list output.  @var{id} points to
+an optional string that identifies the list; it is copied by the
+implementation, and so strings in @code{malloc}ed storage can be freed
+after the call.
+ at end deftypefun
+
+ at deftypefun void ui_out_list_end (struct ui_out *@var{uiout})
+This function signals an end of a list output.  There should be exactly
+one call to @code{ui_out_list_end} for each call to
+ at code{ui_out_list_begin}, otherwise an internal @value{GDBN} error will
+be signaled.
+ at end deftypefun
+
+ at deftypefun {struct cleanup *} make_cleanup_ui_out_list_begin_end (struct ui_out *@var{uiout}, const char *@var{id})
+Similar to @code{make_cleanup_ui_out_tuple_begin_end}, this function
+opens a list and then establishes cleanup
+(@pxref{Misc Guidelines, Cleanups})
+that will close the list.
+ at end deftypefun
+
+ at subsection Item Output Functions
+
+ at cindex item output functions
+ at cindex field output functions
+ at cindex data output
+The functions described below produce output for the actual data
+items, or fields, which contain information about the object.
+
+Choose the appropriate function accordingly to your particular needs.
+
+ at deftypefun void ui_out_field_fmt (struct ui_out *@var{uiout}, char *@var{fldname}, char *@var{format}, ...)
+This is the most general output function.  It produces the
+representation of the data in the variable-length argument list
+according to formatting specifications in @var{format}, a
+ at code{printf}-like format string.  The optional argument @var{fldname}
+supplies the name of the field.  The data items themselves are
+supplied as additional arguments after @var{format}.
+
+This generic function should be used only when it is not possible to
+use one of the specialized versions (see below).
+ at end deftypefun
+
+ at deftypefun void ui_out_field_int (struct ui_out *@var{uiout}, const char *@var{fldname}, int @var{value})
+This function outputs a value of an @code{int} variable.  It uses the
+ at code{"%d"} output conversion specification.  @var{fldname} specifies
+the name of the field.
+ at end deftypefun
+
+ at deftypefun void ui_out_field_fmt_int (struct ui_out *@var{uiout}, int @var{width}, enum ui_align @var{alignment}, const char *@var{fldname}, int @var{value})
+This function outputs a value of an @code{int} variable.  It differs from
+ at code{ui_out_field_int} in that the caller specifies the desired @var{width} and @var{alignment} of the output.
+ at var{fldname} specifies
+the name of the field.
+ at end deftypefun
+
+ at deftypefun void ui_out_field_core_addr (struct ui_out *@var{uiout}, const char *@var{fldname}, struct gdbarch *@var{gdbarch}, CORE_ADDR @var{address})
+This function outputs an address as appropriate for @var{gdbarch}.
+ at end deftypefun
+
+ at deftypefun void ui_out_field_string (struct ui_out *@var{uiout}, const char *@var{fldname}, const char *@var{string})
+This function outputs a string using the @code{"%s"} conversion
+specification.
+ at end deftypefun
+
+Sometimes, there's a need to compose your output piece by piece using
+functions that operate on a stream, such as @code{value_print} or
+ at code{fprintf_symbol_filtered}.  These functions accept an argument of
+the type @code{struct ui_file *}, a pointer to a @code{ui_file} object
+used to store the data stream used for the output.  When you use one
+of these functions, you need a way to pass their results stored in a
+ at code{ui_file} object to the @code{ui_out} functions.  To this end,
+you first create a @code{ui_stream} object by calling
+ at code{ui_out_stream_new}, pass the @code{stream} member of that
+ at code{ui_stream} object to @code{value_print} and similar functions,
+and finally call @code{ui_out_field_stream} to output the field you
+constructed.  When the @code{ui_stream} object is no longer needed,
+you should destroy it and free its memory by calling
+ at code{ui_out_stream_delete}.
+
+ at deftypefun {struct ui_stream *} ui_out_stream_new (struct ui_out *@var{uiout})
+This function creates a new @code{ui_stream} object which uses the
+same output methods as the @code{ui_out} object whose pointer is
+passed in @var{uiout}.  It returns a pointer to the newly created
+ at code{ui_stream} object.
+ at end deftypefun
+
+ at deftypefun void ui_out_stream_delete (struct ui_stream *@var{streambuf})
+This functions destroys a @code{ui_stream} object specified by
+ at var{streambuf}.
+ at end deftypefun
+
+ at deftypefun void ui_out_field_stream (struct ui_out *@var{uiout}, const char *@var{fieldname}, struct ui_stream *@var{streambuf})
+This function consumes all the data accumulated in
+ at code{streambuf->stream} and outputs it like
+ at code{ui_out_field_string} does.  After a call to
+ at code{ui_out_field_stream}, the accumulated data no longer exists, but
+the stream is still valid and may be used for producing more fields.
+ at end deftypefun
+
+ at strong{Important:} If there is any chance that your code could bail
+out before completing output generation and reaching the point where
+ at code{ui_out_stream_delete} is called, it is necessary to set up a
+cleanup, to avoid leaking memory and other resources.  Here's a
+skeleton code to do that:
+
+ at smallexample
+ struct ui_stream *mybuf = ui_out_stream_new (uiout);
+ struct cleanup *old = make_cleanup (ui_out_stream_delete, mybuf);
+ ...
+ do_cleanups (old);
+ at end smallexample
+
+If the function already has the old cleanup chain set (for other kinds
+of cleanups), you just have to add your cleanup to it:
+
+ at smallexample
+  mybuf = ui_out_stream_new (uiout);
+  make_cleanup (ui_out_stream_delete, mybuf);
+ at end smallexample
+
+Note that with cleanups in place, you should not call
+ at code{ui_out_stream_delete} directly, or you would attempt to free the
+same buffer twice.
+
+ at subsection Utility Output Functions
+
+ at deftypefun void ui_out_field_skip (struct ui_out *@var{uiout}, const char *@var{fldname})
+This function skips a field in a table.  Use it if you have to leave
+an empty field without disrupting the table alignment.  The argument
+ at var{fldname} specifies a name for the (missing) filed.
+ at end deftypefun
+
+ at deftypefun void ui_out_text (struct ui_out *@var{uiout}, const char *@var{string})
+This function outputs the text in @var{string} in a way that makes it
+easy to be read by humans.  For example, the console implementation of
+this method filters the text through a built-in pager, to prevent it
+from scrolling off the visible portion of the screen.
+
+Use this function for printing relatively long chunks of text around
+the actual field data: the text it produces is not aligned according
+to the table's format.  Use @code{ui_out_field_string} to output a
+string field, and use @code{ui_out_message}, described below, to
+output short messages.
+ at end deftypefun
+
+ at deftypefun void ui_out_spaces (struct ui_out *@var{uiout}, int @var{nspaces})
+This function outputs @var{nspaces} spaces.  It is handy to align the
+text produced by @code{ui_out_text} with the rest of the table or
+list.
+ at end deftypefun
+
+ at deftypefun void ui_out_message (struct ui_out *@var{uiout}, int @var{verbosity}, const char *@var{format}, ...)
+This function produces a formatted message, provided that the current
+verbosity level is at least as large as given by @var{verbosity}.  The
+current verbosity level is specified by the user with the @samp{set
+verbositylevel} command. at footnote{As of this writing (April 2001),
+setting verbosity level is not yet implemented, and is always returned
+as zero.  So calling @code{ui_out_message} with a @var{verbosity}
+argument more than zero will cause the message to never be printed.}
+ at end deftypefun
+
+ at deftypefun void ui_out_wrap_hint (struct ui_out *@var{uiout}, char *@var{indent})
+This function gives the console output filter (a paging filter) a hint
+of where to break lines which are too long.  Ignored for all other
+output consumers.  @var{indent}, if non- at code{NULL}, is the string to
+be printed to indent the wrapped text on the next line; it must remain
+accessible until the next call to @code{ui_out_wrap_hint}, or until an
+explicit newline is produced by one of the other functions.  If
+ at var{indent} is @code{NULL}, the wrapped text will not be indented.
+ at end deftypefun
+
+ at deftypefun void ui_out_flush (struct ui_out *@var{uiout})
+This function flushes whatever output has been accumulated so far, if
+the UI buffers output.
+ at end deftypefun
+
+
+ at subsection Examples of Use of @code{ui_out} functions
+
+ at cindex using @code{ui_out} functions
+ at cindex @code{ui_out} functions, usage examples
+This section gives some practical examples of using the @code{ui_out}
+functions to generalize the old console-oriented code in
+ at value{GDBN}.  The examples all come from functions defined on the
+ at file{breakpoints.c} file.
+
+This example, from the @code{breakpoint_1} function, shows how to
+produce a table.
+
+The original code was:
+
+ at smallexample
+ if (!found_a_breakpoint++)
+   @{
+     annotate_breakpoints_headers ();
+
+     annotate_field (0);
+     printf_filtered ("Num ");
+     annotate_field (1);
+     printf_filtered ("Type           ");
+     annotate_field (2);
+     printf_filtered ("Disp ");
+     annotate_field (3);
+     printf_filtered ("Enb ");
+     if (addressprint)
+       @{
+         annotate_field (4);
+         printf_filtered ("Address    ");
+       @}
+     annotate_field (5);
+     printf_filtered ("What\n");
+
+     annotate_breakpoints_table ();
+   @}
+ at end smallexample
+
+Here's the new version:
+
+ at smallexample
+  nr_printable_breakpoints = @dots{};
+
+  if (addressprint)
+    ui_out_table_begin (ui, 6, nr_printable_breakpoints, "BreakpointTable");
+  else
+    ui_out_table_begin (ui, 5, nr_printable_breakpoints, "BreakpointTable");
+
+  if (nr_printable_breakpoints > 0)
+    annotate_breakpoints_headers ();
+  if (nr_printable_breakpoints > 0)
+    annotate_field (0);
+  ui_out_table_header (uiout, 3, ui_left, "number", "Num");		/* 1 */
+  if (nr_printable_breakpoints > 0)
+    annotate_field (1);
+  ui_out_table_header (uiout, 14, ui_left, "type", "Type");		/* 2 */
+  if (nr_printable_breakpoints > 0)
+    annotate_field (2);
+  ui_out_table_header (uiout, 4, ui_left, "disp", "Disp");		/* 3 */
+  if (nr_printable_breakpoints > 0)
+    annotate_field (3);
+  ui_out_table_header (uiout, 3, ui_left, "enabled", "Enb");	/* 4 */
+  if (addressprint)
+    @{
+     if (nr_printable_breakpoints > 0)
+       annotate_field (4);
+     if (print_address_bits <= 32)
+       ui_out_table_header (uiout, 10, ui_left, "addr", "Address");/* 5 */
+     else
+       ui_out_table_header (uiout, 18, ui_left, "addr", "Address");/* 5 */
+    @}
+  if (nr_printable_breakpoints > 0)
+    annotate_field (5);
+  ui_out_table_header (uiout, 40, ui_noalign, "what", "What");	/* 6 */
+  ui_out_table_body (uiout);
+  if (nr_printable_breakpoints > 0)
+    annotate_breakpoints_table ();
+ at end smallexample
+
+This example, from the @code{print_one_breakpoint} function, shows how
+to produce the actual data for the table whose structure was defined
+in the above example.  The original code was:
+
+ at smallexample
+   annotate_record ();
+   annotate_field (0);
+   printf_filtered ("%-3d ", b->number);
+   annotate_field (1);
+   if ((int)b->type > (sizeof(bptypes)/sizeof(bptypes[0]))
+       || ((int) b->type != bptypes[(int) b->type].type))
+     internal_error ("bptypes table does not describe type #%d.",
+                     (int)b->type);
+   printf_filtered ("%-14s ", bptypes[(int)b->type].description);
+   annotate_field (2);
+   printf_filtered ("%-4s ", bpdisps[(int)b->disposition]);
+   annotate_field (3);
+   printf_filtered ("%-3c ", bpenables[(int)b->enable]);
+   @dots{}
+ at end smallexample
+
+This is the new version:
+
+ at smallexample
+   annotate_record ();
+   ui_out_tuple_begin (uiout, "bkpt");
+   annotate_field (0);
+   ui_out_field_int (uiout, "number", b->number);
+   annotate_field (1);
+   if (((int) b->type > (sizeof (bptypes) / sizeof (bptypes[0])))
+       || ((int) b->type != bptypes[(int) b->type].type))
+     internal_error ("bptypes table does not describe type #%d.",
+                     (int) b->type);
+   ui_out_field_string (uiout, "type", bptypes[(int)b->type].description);
+   annotate_field (2);
+   ui_out_field_string (uiout, "disp", bpdisps[(int)b->disposition]);
+   annotate_field (3);
+   ui_out_field_fmt (uiout, "enabled", "%c", bpenables[(int)b->enable]);
+   @dots{}
+ at end smallexample
+
+This example, also from @code{print_one_breakpoint}, shows how to
+produce a complicated output field using the @code{print_expression}
+functions which requires a stream to be passed.  It also shows how to
+automate stream destruction with cleanups.  The original code was:
+
+ at smallexample
+    annotate_field (5);
+    print_expression (b->exp, gdb_stdout);
+ at end smallexample
+
+The new version is:
+
+ at smallexample
+  struct ui_stream *stb = ui_out_stream_new (uiout);
+  struct cleanup *old_chain = make_cleanup_ui_out_stream_delete (stb);
+  ...
+  annotate_field (5);
+  print_expression (b->exp, stb->stream);
+  ui_out_field_stream (uiout, "what", local_stream);
+ at end smallexample
+
+This example, also from @code{print_one_breakpoint}, shows how to use
+ at code{ui_out_text} and @code{ui_out_field_string}.  The original code
+was:
+
+ at smallexample
+  annotate_field (5);
+  if (b->dll_pathname == NULL)
+    printf_filtered ("<any library> ");
+  else
+    printf_filtered ("library \"%s\" ", b->dll_pathname);
+ at end smallexample
+
+It became:
+
+ at smallexample
+  annotate_field (5);
+  if (b->dll_pathname == NULL)
+    @{
+      ui_out_field_string (uiout, "what", "<any library>");
+      ui_out_spaces (uiout, 1);
+    @}
+  else
+    @{
+      ui_out_text (uiout, "library \"");
+      ui_out_field_string (uiout, "what", b->dll_pathname);
+      ui_out_text (uiout, "\" ");
+    @}
+ at end smallexample
+
+The following example from @code{print_one_breakpoint} shows how to
+use @code{ui_out_field_int} and @code{ui_out_spaces}.  The original
+code was:
+
+ at smallexample
+  annotate_field (5);
+  if (b->forked_inferior_pid != 0)
+    printf_filtered ("process %d ", b->forked_inferior_pid);
+ at end smallexample
+
+It became:
+
+ at smallexample
+  annotate_field (5);
+  if (b->forked_inferior_pid != 0)
+    @{
+      ui_out_text (uiout, "process ");
+      ui_out_field_int (uiout, "what", b->forked_inferior_pid);
+      ui_out_spaces (uiout, 1);
+    @}
+ at end smallexample
+
+Here's an example of using @code{ui_out_field_string}.  The original
+code was:
+
+ at smallexample
+  annotate_field (5);
+  if (b->exec_pathname != NULL)
+    printf_filtered ("program \"%s\" ", b->exec_pathname);
+ at end smallexample
+
+It became:
+
+ at smallexample
+  annotate_field (5);
+  if (b->exec_pathname != NULL)
+    @{
+      ui_out_text (uiout, "program \"");
+      ui_out_field_string (uiout, "what", b->exec_pathname);
+      ui_out_text (uiout, "\" ");
+    @}
+ at end smallexample
+
+Finally, here's an example of printing an address.  The original code:
+
+ at smallexample
+  annotate_field (4);
+  printf_filtered ("%s ",
+        hex_string_custom ((unsigned long) b->address, 8));
+ at end smallexample
+
+It became:
+
+ at smallexample
+  annotate_field (4);
+  ui_out_field_core_addr (uiout, "Address", b->address);
+ at end smallexample
+
+
+ at section Console Printing
+
+ at section TUI
+
+ at node libgdb
+
+ at chapter libgdb
+
+ at section libgdb 1.0
+ at cindex @code{libgdb}
+ at code{libgdb} 1.0 was an abortive project of years ago.  The theory was
+to provide an API to @value{GDBN}'s functionality.
+
+ at section libgdb 2.0
+ at cindex @code{libgdb}
+ at code{libgdb} 2.0 is an ongoing effort to update @value{GDBN} so that is
+better able to support graphical and other environments.
+
+Since @code{libgdb} development is on-going, its architecture is still
+evolving.  The following components have so far been identified:
+
+ at itemize @bullet
+ at item
+Observer - @file{gdb-events.h}.  
+ at item
+Builder - @file{ui-out.h}
+ at item
+Event Loop - @file{event-loop.h}
+ at item
+Library - @file{gdb.h}
+ at end itemize
+
+The model that ties these components together is described below.
+
+ at section The @code{libgdb} Model
+
+A client of @code{libgdb} interacts with the library in two ways.
+
+ at itemize @bullet
+ at item
+As an observer (using @file{gdb-events}) receiving notifications from
+ at code{libgdb} of any internal state changes (break point changes, run
+state, etc).
+ at item
+As a client querying @code{libgdb} (using the @file{ui-out} builder) to
+obtain various status values from @value{GDBN}.
+ at end itemize
+
+Since @code{libgdb} could have multiple clients (e.g., a GUI supporting
+the existing @value{GDBN} CLI), those clients must co-operate when
+controlling @code{libgdb}.  In particular, a client must ensure that
+ at code{libgdb} is idle (i.e.@: no other client is using @code{libgdb})
+before responding to a @file{gdb-event} by making a query.
+
+ at section CLI support
+
+At present @value{GDBN}'s CLI is very much entangled in with the core of
+ at code{libgdb}.  Consequently, a client wishing to include the CLI in
+their interface needs to carefully co-ordinate its own and the CLI's
+requirements.
+
+It is suggested that the client set @code{libgdb} up to be bi-modal
+(alternate between CLI and client query modes).  The notes below sketch
+out the theory:
+
+ at itemize @bullet
+ at item
+The client registers itself as an observer of @code{libgdb}.
+ at item
+The client create and install @code{cli-out} builder using its own
+versions of the @code{ui-file} @code{gdb_stderr}, @code{gdb_stdtarg} and
+ at code{gdb_stdout} streams.
+ at item
+The client creates a separate custom @code{ui-out} builder that is only
+used while making direct queries to @code{libgdb}.
+ at end itemize
+
+When the client receives input intended for the CLI, it simply passes it
+along.  Since the @code{cli-out} builder is installed by default, all
+the CLI output in response to that command is routed (pronounced rooted)
+through to the client controlled @code{gdb_stdout} et.@: al.@: streams.
+At the same time, the client is kept abreast of internal changes by
+virtue of being a @code{libgdb} observer.
+
+The only restriction on the client is that it must wait until
+ at code{libgdb} becomes idle before initiating any queries (using the
+client's custom builder).
+
+ at section @code{libgdb} components
+
+ at subheading Observer - @file{gdb-events.h}
+ at file{gdb-events} provides the client with a very raw mechanism that can
+be used to implement an observer.  At present it only allows for one
+observer and that observer must, internally, handle the need to delay
+the processing of any event notifications until after @code{libgdb} has
+finished the current command.
+
+ at subheading Builder - @file{ui-out.h}
+ at file{ui-out} provides the infrastructure necessary for a client to
+create a builder.  That builder is then passed down to @code{libgdb}
+when doing any queries.
+
+ at subheading Event Loop - @file{event-loop.h}
+ at c There could be an entire section on the event-loop
+ at file{event-loop}, currently non-re-entrant, provides a simple event
+loop.  A client would need to either plug its self into this loop or,
+implement a new event-loop that @value{GDBN} would use.
+
+The event-loop will eventually be made re-entrant.  This is so that
+ at value{GDBN} can better handle the problem of some commands blocking
+instead of returning.
+
+ at subheading Library - @file{gdb.h}
+ at file{libgdb} is the most obvious component of this system.  It provides
+the query interface.  Each function is parameterized by a @code{ui-out}
+builder.  The result of the query is constructed using that builder
+before the query function returns.
+
+ at node Values
+ at chapter Values
+ at section Values
+
+ at cindex values
+ at cindex @code{value} structure
+ at value{GDBN} uses @code{struct value}, or @dfn{values}, as an internal
+abstraction for the representation of a variety of inferior objects
+and @value{GDBN} convenience objects.
+
+Values have an associated @code{struct type}, that describes a virtual
+view of the raw data or object stored in or accessed through the
+value.
+
+A value is in addition discriminated by its lvalue-ness, given its
+ at code{enum lval_type} enumeration type:
+
+ at cindex @code{lval_type} enumeration, for values.
+ at table @code
+ at item @code{not_lval}
+This value is not an lval.  It can't be assigned to.
+
+ at item @code{lval_memory}
+This value represents an object in memory.
+
+ at item @code{lval_register}
+This value represents an object that lives in a register.
+
+ at item @code{lval_internalvar}
+Represents the value of an internal variable.
+
+ at item @code{lval_internalvar_component}
+Represents part of a @value{GDBN} internal variable.  E.g., a
+structure field.
+
+ at cindex computed values
+ at item @code{lval_computed}
+These are ``computed'' values.  They allow creating specialized value
+objects for specific purposes, all abstracted away from the core value
+support code.  The creator of such a value writes specialized
+functions to handle the reading and writing to/from the value's
+backend data, and optionally, a ``copy operator'' and a
+``destructor''.
+
+Pointers to these functions are stored in a @code{struct lval_funcs}
+instance (declared in @file{value.h}), and passed to the
+ at code{allocate_computed_value} function, as in the example below.
+
+ at smallexample
+static void
+nil_value_read (struct value *v)
+@{
+  /* This callback reads data from some backend, and stores it in V.
+     In this case, we always read null data.  You'll want to fill in
+     something more interesting.  */
+
+  memset (value_contents_all_raw (v),
+          value_offset (v),
+          TYPE_LENGTH (value_type (v)));
+@}
+
+static void
+nil_value_write (struct value *v, struct value *fromval)
+@{
+  /* Takes the data from FROMVAL and stores it in the backend of V.  */
+
+  to_oblivion (value_contents_all_raw (fromval),
+               value_offset (v),
+               TYPE_LENGTH (value_type (fromval)));
+@}
+
+static struct lval_funcs nil_value_funcs =
+  @{
+    nil_value_read,
+    nil_value_write
+  @};
+
+struct value *
+make_nil_value (void)
+@{
+   struct type *type;
+   struct value *v;
+
+   type = make_nils_type ();
+   v = allocate_computed_value (type, &nil_value_funcs, NULL);
+
+   return v;
+@}
+ at end smallexample
+
+See the implementation of the @code{$_siginfo} convenience variable in
+ at file{infrun.c} as a real example use of lval_computed.
+
+ at end table
+
+ at node Stack Frames
+ at chapter Stack Frames
+
+ at cindex frame
+ at cindex call stack frame
+A frame is a construct that @value{GDBN} uses to keep track of calling
+and called functions.
+
+ at cindex unwind frame
+ at value{GDBN}'s frame model, a fresh design, was implemented with the
+need to support @sc{dwarf}'s Call Frame Information in mind.  In fact,
+the term ``unwind'' is taken directly from that specification.
+Developers wishing to learn more about unwinders, are encouraged to
+read the @sc{dwarf} specification, available from
+ at url{http://www.dwarfstd.org}.
+
+ at findex frame_register_unwind
+ at findex get_frame_register
+ at value{GDBN}'s model is that you find a frame's registers by
+``unwinding'' them from the next younger frame.  That is,
+ at samp{get_frame_register} which returns the value of a register in
+frame #1 (the next-to-youngest frame), is implemented by calling frame
+#0's @code{frame_register_unwind} (the youngest frame).  But then the
+obvious question is: how do you access the registers of the youngest
+frame itself?
+
+ at cindex sentinel frame
+ at findex get_frame_type
+ at vindex SENTINEL_FRAME
+To answer this question, @value{GDBN} has the @dfn{sentinel} frame, the
+``-1st'' frame.  Unwinding registers from the sentinel frame gives you
+the current values of the youngest real frame's registers.  If @var{f}
+is a sentinel frame, then @code{get_frame_type (@var{f}) @equiv{}
+SENTINEL_FRAME}.
+
+ at section Selecting an Unwinder
+
+ at findex frame_unwind_prepend_unwinder
+ at findex frame_unwind_append_unwinder
+The architecture registers a list of frame unwinders (@code{struct
+frame_unwind}), using the functions
+ at code{frame_unwind_prepend_unwinder} and
+ at code{frame_unwind_append_unwinder}.  Each unwinder includes a
+sniffer.  Whenever @value{GDBN} needs to unwind a frame (to fetch the
+previous frame's registers or the current frame's ID), it calls
+registered sniffers in order to find one which recognizes the frame.
+The first time a sniffer returns non-zero, the corresponding unwinder
+is assigned to the frame.
+
+ at section Unwinding the Frame ID
+ at cindex frame ID
+
+Every frame has an associated ID, of type @code{struct frame_id}.
+The ID includes the stack base and function start address for
+the frame.  The ID persists through the entire life of the frame,
+including while other called frames are running; it is used to
+locate an appropriate @code{struct frame_info} from the cache.
+
+Every time the inferior stops, and at various other times, the frame
+cache is flushed.  Because of this, parts of @value{GDBN} which need
+to keep track of individual frames cannot use pointers to @code{struct
+frame_info}.  A frame ID provides a stable reference to a frame, even
+when the unwinder must be run again to generate a new @code{struct
+frame_info} for the same frame.
+
+The frame's unwinder's @code{this_id} method is called to find the ID.
+Note that this is different from register unwinding, where the next
+frame's @code{prev_register} is called to unwind this frame's
+registers.
+
+Both stack base and function address are required to identify the
+frame, because a recursive function has the same function address for
+two consecutive frames and a leaf function may have the same stack
+address as its caller.  On some platforms, a third address is part of
+the ID to further disambiguate frames---for instance, on IA-64
+the separate register stack address is included in the ID.
+
+An invalid frame ID (@code{outer_frame_id}) returned from the
+ at code{this_id} method means to stop unwinding after this frame.
+
+ at code{null_frame_id} is another invalid frame ID which should be used
+when there is no frame.  For instance, certain breakpoints are attached
+to a specific frame, and that frame is identified through its frame ID
+(we use this to implement the "finish" command).  Using
+ at code{null_frame_id} as the frame ID for a given breakpoint means
+that the breakpoint is not specific to any frame.  The @code{this_id}
+method should never return @code{null_frame_id}.
+
+ at section Unwinding Registers
+
+Each unwinder includes a @code{prev_register} method.  This method
+takes a frame, an associated cache pointer, and a register number.
+It returns a @code{struct value *} describing the requested register,
+as saved by this frame.  This is the value of the register that is
+current in this frame's caller.
+
+The returned value must have the same type as the register.  It may
+have any lvalue type.  In most circumstances one of these routines
+will generate the appropriate value:
+
+ at table @code
+ at item frame_unwind_got_optimized
+ at findex frame_unwind_got_optimized
+This register was not saved.
+
+ at item frame_unwind_got_register
+ at findex frame_unwind_got_register
+This register was copied into another register in this frame.  This
+is also used for unchanged registers; they are ``copied'' into the
+same register.
+
+ at item frame_unwind_got_memory
+ at findex frame_unwind_got_memory
+This register was saved in memory.
+
+ at item frame_unwind_got_constant
+ at findex frame_unwind_got_constant
+This register was not saved, but the unwinder can compute the previous
+value some other way.
+
+ at item frame_unwind_got_address
+ at findex frame_unwind_got_address
+Same as @code{frame_unwind_got_constant}, except that the value is a target
+address.  This is frequently used for the stack pointer, which is not
+explicitly saved but has a known offset from this frame's stack
+pointer.  For architectures with a flat unified address space, this is
+generally the same as @code{frame_unwind_got_constant}.
+ at end table
+
+ at node Symbol Handling
+
+ at chapter Symbol Handling
+
+Symbols are a key part of @value{GDBN}'s operation.  Symbols include
+variables, functions, and types.
+
+Symbol information for a large program can be truly massive, and
+reading of symbol information is one of the major performance
+bottlenecks in @value{GDBN}; it can take many minutes to process it
+all.  Studies have shown that nearly all the time spent is
+computational, rather than file reading.
+
+One of the ways for @value{GDBN} to provide a good user experience is
+to start up quickly, taking no more than a few seconds.  It is simply
+not possible to process all of a program's debugging info in that
+time, and so we attempt to handle symbols incrementally.  For instance,
+we create @dfn{partial symbol tables} consisting of only selected
+symbols, and only expand them to full symbol tables when necessary.
+
+ at section Symbol Reading
+
+ at cindex symbol reading
+ at cindex reading of symbols
+ at cindex symbol files
+ at value{GDBN} reads symbols from @dfn{symbol files}.  The usual symbol
+file is the file containing the program which @value{GDBN} is
+debugging.  @value{GDBN} can be directed to use a different file for
+symbols (with the @samp{symbol-file} command), and it can also read
+more symbols via the @samp{add-file} and @samp{load} commands. In
+addition, it may bring in more symbols while loading shared
+libraries.
+
+ at findex find_sym_fns
+Symbol files are initially opened by code in @file{symfile.c} using
+the BFD library (@pxref{Support Libraries}).  BFD identifies the type
+of the file by examining its header.  @code{find_sym_fns} then uses
+this identification to locate a set of symbol-reading functions.
+
+ at findex add_symtab_fns
+ at cindex @code{sym_fns} structure
+ at cindex adding a symbol-reading module
+Symbol-reading modules identify themselves to @value{GDBN} by calling
+ at code{add_symtab_fns} during their module initialization.  The argument
+to @code{add_symtab_fns} is a @code{struct sym_fns} which contains the
+name (or name prefix) of the symbol format, the length of the prefix,
+and pointers to four functions.  These functions are called at various
+times to process symbol files whose identification matches the specified
+prefix.
+
+The functions supplied by each module are:
+
+ at table @code
+ at item @var{xyz}_symfile_init(struct sym_fns *sf)
+
+ at cindex secondary symbol file
+Called from @code{symbol_file_add} when we are about to read a new
+symbol file.  This function should clean up any internal state (possibly
+resulting from half-read previous files, for example) and prepare to
+read a new symbol file.  Note that the symbol file which we are reading
+might be a new ``main'' symbol file, or might be a secondary symbol file
+whose symbols are being added to the existing symbol table.
+
+The argument to @code{@var{xyz}_symfile_init} is a newly allocated
+ at code{struct sym_fns} whose @code{bfd} field contains the BFD for the
+new symbol file being read.  Its @code{private} field has been zeroed,
+and can be modified as desired.  Typically, a struct of private
+information will be @code{malloc}'d, and a pointer to it will be placed
+in the @code{private} field.
+
+There is no result from @code{@var{xyz}_symfile_init}, but it can call
+ at code{error} if it detects an unavoidable problem.
+
+ at item @var{xyz}_new_init()
+
+Called from @code{symbol_file_add} when discarding existing symbols.
+This function needs only handle the symbol-reading module's internal
+state; the symbol table data structures visible to the rest of
+ at value{GDBN} will be discarded by @code{symbol_file_add}.  It has no
+arguments and no result.  It may be called after
+ at code{@var{xyz}_symfile_init}, if a new symbol table is being read, or
+may be called alone if all symbols are simply being discarded.
+
+ at item @var{xyz}_symfile_read(struct sym_fns *sf, CORE_ADDR addr, int mainline)
+
+Called from @code{symbol_file_add} to actually read the symbols from a
+symbol-file into a set of psymtabs or symtabs.
+
+ at code{sf} points to the @code{struct sym_fns} originally passed to
+ at code{@var{xyz}_sym_init} for possible initialization.  @code{addr} is
+the offset between the file's specified start address and its true
+address in memory.  @code{mainline} is 1 if this is the main symbol
+table being read, and 0 if a secondary symbol file (e.g., shared library
+or dynamically loaded file) is being read. at refill
+ at end table
+
+In addition, if a symbol-reading module creates psymtabs when
+ at var{xyz}_symfile_read is called, these psymtabs will contain a pointer
+to a function @code{@var{xyz}_psymtab_to_symtab}, which can be called
+from any point in the @value{GDBN} symbol-handling code.
+
+ at table @code
+ at item @var{xyz}_psymtab_to_symtab (struct partial_symtab *pst)
+
+Called from @code{psymtab_to_symtab} (or the @code{PSYMTAB_TO_SYMTAB} macro) if
+the psymtab has not already been read in and had its @code{pst->symtab}
+pointer set.  The argument is the psymtab to be fleshed-out into a
+symtab.  Upon return, @code{pst->readin} should have been set to 1, and
+ at code{pst->symtab} should contain a pointer to the new corresponding symtab, or
+zero if there were no symbols in that part of the symbol file.
+ at end table
+
+ at section Partial Symbol Tables
+
+ at value{GDBN} has three types of symbol tables:
+
+ at itemize @bullet
+ at cindex full symbol table
+ at cindex symtabs
+ at item
+Full symbol tables (@dfn{symtabs}).  These contain the main
+information about symbols and addresses.
+
+ at cindex psymtabs
+ at item
+Partial symbol tables (@dfn{psymtabs}).  These contain enough
+information to know when to read the corresponding part of the full
+symbol table.
+
+ at cindex minimal symbol table
+ at cindex minsymtabs
+ at item
+Minimal symbol tables (@dfn{msymtabs}).  These contain information
+gleaned from non-debugging symbols.
+ at end itemize
+
+ at cindex partial symbol table
+This section describes partial symbol tables.
+
+A psymtab is constructed by doing a very quick pass over an executable
+file's debugging information.  Small amounts of information are
+extracted---enough to identify which parts of the symbol table will
+need to be re-read and fully digested later, when the user needs the
+information.  The speed of this pass causes @value{GDBN} to start up very
+quickly.  Later, as the detailed rereading occurs, it occurs in small
+pieces, at various times, and the delay therefrom is mostly invisible to
+the user.
+ at c (@xref{Symbol Reading}.)
+
+The symbols that show up in a file's psymtab should be, roughly, those
+visible to the debugger's user when the program is not running code from
+that file.  These include external symbols and types, static symbols and
+types, and @code{enum} values declared at file scope.
+
+The psymtab also contains the range of instruction addresses that the
+full symbol table would represent.
+
+ at cindex finding a symbol
+ at cindex symbol lookup
+The idea is that there are only two ways for the user (or much of the
+code in the debugger) to reference a symbol:
+
+ at itemize @bullet
+ at findex find_pc_function
+ at findex find_pc_line
+ at item
+By its address (e.g., execution stops at some address which is inside a
+function in this file).  The address will be noticed to be in the
+range of this psymtab, and the full symtab will be read in.
+ at code{find_pc_function}, @code{find_pc_line}, and other
+ at code{find_pc_ at dots{}} functions handle this.
+
+ at cindex lookup_symbol
+ at item
+By its name
+(e.g., the user asks to print a variable, or set a breakpoint on a
+function).  Global names and file-scope names will be found in the
+psymtab, which will cause the symtab to be pulled in.  Local names will
+have to be qualified by a global name, or a file-scope name, in which
+case we will have already read in the symtab as we evaluated the
+qualifier.  Or, a local symbol can be referenced when we are ``in'' a
+local scope, in which case the first case applies.  @code{lookup_symbol}
+does most of the work here.
+ at end itemize
+
+The only reason that psymtabs exist is to cause a symtab to be read in
+at the right moment.  Any symbol that can be elided from a psymtab,
+while still causing that to happen, should not appear in it.  Since
+psymtabs don't have the idea of scope, you can't put local symbols in
+them anyway.  Psymtabs don't have the idea of the type of a symbol,
+either, so types need not appear, unless they will be referenced by
+name.
+
+It is a bug for @value{GDBN} to behave one way when only a psymtab has
+been read, and another way if the corresponding symtab has been read
+in.  Such bugs are typically caused by a psymtab that does not contain
+all the visible symbols, or which has the wrong instruction address
+ranges.
+
+The psymtab for a particular section of a symbol file (objfile) could be
+thrown away after the symtab has been read in.  The symtab should always
+be searched before the psymtab, so the psymtab will never be used (in a
+bug-free environment).  Currently, psymtabs are allocated on an obstack,
+and all the psymbols themselves are allocated in a pair of large arrays
+on an obstack, so there is little to be gained by trying to free them
+unless you want to do a lot more work.
+
+Whether or not psymtabs are created depends on the objfile's symbol
+reader.  The core of @value{GDBN} hides the details of partial symbols
+and partial symbol tables behind a set of function pointers known as
+the @dfn{quick symbol functions}.  These are documented in
+ at file{symfile.h}.
+
+ at section Types
+
+ at unnumberedsubsec Fundamental Types (e.g., @code{FT_VOID}, @code{FT_BOOLEAN}).
+
+ at cindex fundamental types
+These are the fundamental types that @value{GDBN} uses internally.  Fundamental
+types from the various debugging formats (stabs, ELF, etc) are mapped
+into one of these.  They are basically a union of all fundamental types
+that @value{GDBN} knows about for all the languages that @value{GDBN}
+knows about.
+
+ at unnumberedsubsec Type Codes (e.g., @code{TYPE_CODE_PTR}, @code{TYPE_CODE_ARRAY}).
+
+ at cindex type codes
+Each time @value{GDBN} builds an internal type, it marks it with one
+of these types.  The type may be a fundamental type, such as
+ at code{TYPE_CODE_INT}, or a derived type, such as @code{TYPE_CODE_PTR}
+which is a pointer to another type.  Typically, several @code{FT_*}
+types map to one @code{TYPE_CODE_*} type, and are distinguished by
+other members of the type struct, such as whether the type is signed
+or unsigned, and how many bits it uses.
+
+ at unnumberedsubsec Builtin Types (e.g., @code{builtin_type_void}, @code{builtin_type_char}).
+
+These are instances of type structs that roughly correspond to
+fundamental types and are created as global types for @value{GDBN} to
+use for various ugly historical reasons.  We eventually want to
+eliminate these.  Note for example that @code{builtin_type_int}
+initialized in @file{gdbtypes.c} is basically the same as a
+ at code{TYPE_CODE_INT} type that is initialized in @file{c-lang.c} for
+an @code{FT_INTEGER} fundamental type.  The difference is that the
+ at code{builtin_type} is not associated with any particular objfile, and
+only one instance exists, while @file{c-lang.c} builds as many
+ at code{TYPE_CODE_INT} types as needed, with each one associated with
+some particular objfile.
+
+ at section Object File Formats
+ at cindex object file formats
+
+ at subsection a.out
+
+ at cindex @code{a.out} format
+The @code{a.out} format is the original file format for Unix.  It
+consists of three sections: @code{text}, @code{data}, and @code{bss},
+which are for program code, initialized data, and uninitialized data,
+respectively.
+
+The @code{a.out} format is so simple that it doesn't have any reserved
+place for debugging information.  (Hey, the original Unix hackers used
+ at samp{adb}, which is a machine-language debugger!)  The only debugging
+format for @code{a.out} is stabs, which is encoded as a set of normal
+symbols with distinctive attributes.
+
+The basic @code{a.out} reader is in @file{dbxread.c}.
+
+ at subsection COFF
+
+ at cindex COFF format
+The COFF format was introduced with System V Release 3 (SVR3) Unix.
+COFF files may have multiple sections, each prefixed by a header.  The
+number of sections is limited.
+
+The COFF specification includes support for debugging.  Although this
+was a step forward, the debugging information was woefully limited.
+For instance, it was not possible to represent code that came from an
+included file.  GNU's COFF-using configs often use stabs-type info,
+encapsulated in special sections.
+
+The COFF reader is in @file{coffread.c}.
+
+ at subsection ECOFF
+
+ at cindex ECOFF format
+ECOFF is an extended COFF originally introduced for Mips and Alpha
+workstations.
+
+The basic ECOFF reader is in @file{mipsread.c}.
+
+ at subsection XCOFF
+
+ at cindex XCOFF format
+The IBM RS/6000 running AIX uses an object file format called XCOFF.
+The COFF sections, symbols, and line numbers are used, but debugging
+symbols are @code{dbx}-style stabs whose strings are located in the
+ at code{.debug} section (rather than the string table).  For more
+information, see @ref{Top,,,stabs,The Stabs Debugging Format}.
+
+The shared library scheme has a clean interface for figuring out what
+shared libraries are in use, but the catch is that everything which
+refers to addresses (symbol tables and breakpoints at least) needs to be
+relocated for both shared libraries and the main executable.  At least
+using the standard mechanism this can only be done once the program has
+been run (or the core file has been read).
+
+ at subsection PE
+
+ at cindex PE-COFF format
+Windows 95 and NT use the PE (@dfn{Portable Executable}) format for their
+executables.  PE is basically COFF with additional headers.
+
+While BFD includes special PE support, @value{GDBN} needs only the basic
+COFF reader.
+
+ at subsection ELF
+
+ at cindex ELF format
+The ELF format came with System V Release 4 (SVR4) Unix.  ELF is
+similar to COFF in being organized into a number of sections, but it
+removes many of COFF's limitations.  Debugging info may be either stabs
+encapsulated in ELF sections, or more commonly these days, DWARF.
+
+The basic ELF reader is in @file{elfread.c}.
+
+ at subsection SOM
+
+ at cindex SOM format
+SOM is HP's object file and debug format (not to be confused with IBM's
+SOM, which is a cross-language ABI).
+
+The SOM reader is in @file{somread.c}.
+
+ at section Debugging File Formats
+
+This section describes characteristics of debugging information that
+are independent of the object file format.
+
+ at subsection stabs
+
+ at cindex stabs debugging info
+ at code{stabs} started out as special symbols within the @code{a.out}
+format.  Since then, it has been encapsulated into other file
+formats, such as COFF and ELF.
+
+While @file{dbxread.c} does some of the basic stab processing,
+including for encapsulated versions, @file{stabsread.c} does
+the real work.
+
+ at subsection COFF
+
+ at cindex COFF debugging info
+The basic COFF definition includes debugging information.  The level
+of support is minimal and non-extensible, and is not often used.
+
+ at subsection Mips debug (Third Eye)
+
+ at cindex ECOFF debugging info
+ECOFF includes a definition of a special debug format.
+
+The file @file{mdebugread.c} implements reading for this format.
+
+ at c mention DWARF 1 as a formerly-supported format
+
+ at subsection DWARF 2
+
+ at cindex DWARF 2 debugging info
+DWARF 2 is an improved but incompatible version of DWARF 1.
+
+The DWARF 2 reader is in @file{dwarf2read.c}.
+
+ at subsection Compressed DWARF 2
+
+ at cindex Compressed DWARF 2 debugging info
+Compressed DWARF 2 is not technically a separate debugging format, but
+merely DWARF 2 debug information that has been compressed.  In this
+format, every object-file section holding DWARF 2 debugging
+information is compressed and prepended with a header.  (The section
+is also typically renamed, so a section called @code{.debug_info} in a
+DWARF 2 binary would be called @code{.zdebug_info} in a compressed
+DWARF 2 binary.)  The header is 12 bytes long:
+
+ at itemize @bullet
+ at item
+4 bytes: the literal string ``ZLIB''
+ at item
+8 bytes: the uncompressed size of the section, in big-endian byte
+order.
+ at end itemize
+
+The same reader is used for both compressed an normal DWARF 2 info.
+Section decompression is done in @code{zlib_decompress_section} in
+ at file{dwarf2read.c}.
+
+ at subsection DWARF 3
+
+ at cindex DWARF 3 debugging info
+DWARF 3 is an improved version of DWARF 2.
+
+ at subsection SOM
+
+ at cindex SOM debugging info
+Like COFF, the SOM definition includes debugging information.
+
+ at section Adding a New Symbol Reader to @value{GDBN}
+
+ at cindex adding debugging info reader
+If you are using an existing object file format (@code{a.out}, COFF, ELF, etc),
+there is probably little to be done.
+
+If you need to add a new object file format, you must first add it to
+BFD.  This is beyond the scope of this document.
+
+You must then arrange for the BFD code to provide access to the
+debugging symbols.  Generally @value{GDBN} will have to call swapping
+routines from BFD and a few other BFD internal routines to locate the
+debugging information.  As much as possible, @value{GDBN} should not
+depend on the BFD internal data structures.
+
+For some targets (e.g., COFF), there is a special transfer vector used
+to call swapping routines, since the external data structures on various
+platforms have different sizes and layouts.  Specialized routines that
+will only ever be implemented by one object file format may be called
+directly.  This interface should be described in a file
+ at file{bfd/lib at var{xyz}.h}, which is included by @value{GDBN}.
+
+ at section Memory Management for Symbol Files
+
+Most memory associated with a loaded symbol file is stored on
+its @code{objfile_obstack}.  This includes symbols, types,
+namespace data, and other information produced by the symbol readers.
+
+Because this data lives on the objfile's obstack, it is automatically
+released when the objfile is unloaded or reloaded.  Therefore one
+objfile must not reference symbol or type data from another objfile;
+they could be unloaded at different times.
+
+User convenience variables, et cetera, have associated types.  Normally
+these types live in the associated objfile.  However, when the objfile
+is unloaded, those types are deep copied to global memory, so that
+the values of the user variables and history items are not lost.
+
+
+ at node Language Support
+
+ at chapter Language Support
+
+ at cindex language support
+ at value{GDBN}'s language support is mainly driven by the symbol reader,
+although it is possible for the user to set the source language
+manually.
+
+ at value{GDBN} chooses the source language by looking at the extension
+of the file recorded in the debug info; @file{.c} means C, @file{.f}
+means Fortran, etc.  It may also use a special-purpose language
+identifier if the debug format supports it, like with DWARF.
+
+ at section Adding a Source Language to @value{GDBN}
+
+ at cindex adding source language
+To add other languages to @value{GDBN}'s expression parser, follow the
+following steps:
+
+ at table @emph
+ at item Create the expression parser.
+
+ at cindex expression parser
+This should reside in a file @file{@var{lang}-exp.y}.  Routines for
+building parsed expressions into a @code{union exp_element} list are in
+ at file{parse.c}.
+
+ at cindex language parser
+Since we can't depend upon everyone having Bison, and YACC produces
+parsers that define a bunch of global names, the following lines
+ at strong{must} be included at the top of the YACC parser, to prevent the
+various parsers from defining the same global names:
+
+ at smallexample
+#define yyparse         @var{lang}_parse
+#define yylex           @var{lang}_lex
+#define yyerror         @var{lang}_error
+#define yylval          @var{lang}_lval
+#define yychar          @var{lang}_char
+#define yydebug         @var{lang}_debug
+#define yypact          @var{lang}_pact 
+#define yyr1            @var{lang}_r1   
+#define yyr2            @var{lang}_r2   
+#define yydef           @var{lang}_def  
+#define yychk           @var{lang}_chk  
+#define yypgo           @var{lang}_pgo  
+#define yyact           @var{lang}_act  
+#define yyexca          @var{lang}_exca
+#define yyerrflag       @var{lang}_errflag
+#define yynerrs         @var{lang}_nerrs
+ at end smallexample
+
+At the bottom of your parser, define a @code{struct language_defn} and
+initialize it with the right values for your language.  Define an
+ at code{initialize_ at var{lang}} routine and have it call
+ at samp{add_language(@var{lang}_language_defn)} to tell the rest of @value{GDBN}
+that your language exists.  You'll need some other supporting variables
+and functions, which will be used via pointers from your
+ at code{@var{lang}_language_defn}.  See the declaration of @code{struct
+language_defn} in @file{language.h}, and the other @file{*-exp.y} files,
+for more information.
+
+ at item Add any evaluation routines, if necessary
+
+ at cindex expression evaluation routines
+ at findex evaluate_subexp
+ at findex prefixify_subexp
+ at findex length_of_subexp
+If you need new opcodes (that represent the operations of the language),
+add them to the enumerated type in @file{expression.h}.  Add support
+code for these operations in the @code{evaluate_subexp} function
+defined in the file @file{eval.c}.  Add cases
+for new opcodes in two functions from @file{parse.c}:
+ at code{prefixify_subexp} and @code{length_of_subexp}.  These compute
+the number of @code{exp_element}s that a given operation takes up.
+
+ at item Update some existing code
+
+Add an enumerated identifier for your language to the enumerated type
+ at code{enum language} in @file{defs.h}.
+
+Update the routines in @file{language.c} so your language is included.
+These routines include type predicates and such, which (in some cases)
+are language dependent.  If your language does not appear in the switch
+statement, an error is reported.
+
+ at vindex current_language
+Also included in @file{language.c} is the code that updates the variable
+ at code{current_language}, and the routines that translate the
+ at code{language_ at var{lang}} enumerated identifier into a printable
+string.
+
+ at findex _initialize_language
+Update the function @code{_initialize_language} to include your
+language.  This function picks the default language upon startup, so is
+dependent upon which languages that @value{GDBN} is built for.
+
+ at findex allocate_symtab
+Update @code{allocate_symtab} in @file{symfile.c} and/or symbol-reading
+code so that the language of each symtab (source file) is set properly.
+This is used to determine the language to use at each stack frame level.
+Currently, the language is set based upon the extension of the source
+file.  If the language can be better inferred from the symbol
+information, please set the language of the symtab in the symbol-reading
+code.
+
+ at findex print_subexp
+ at findex op_print_tab
+Add helper code to @code{print_subexp} (in @file{expprint.c}) to handle any new
+expression opcodes you have added to @file{expression.h}.  Also, add the
+printed representations of your operators to @code{op_print_tab}.
+
+ at item Add a place of call
+
+ at findex parse_exp_1
+Add a call to @code{@var{lang}_parse()} and @code{@var{lang}_error} in
+ at code{parse_exp_1} (defined in @file{parse.c}).
+
+ at item Edit @file{Makefile.in}
+
+Add dependencies in @file{Makefile.in}.  Make sure you update the macro
+variables such as @code{HFILES} and @code{OBJS}, otherwise your code may
+not get linked in, or, worse yet, it may not get @code{tar}red into the
+distribution!
+ at end table
+
+
+ at node Host Definition
+
+ at chapter Host Definition
+
+With the advent of Autoconf, it's rarely necessary to have host
+definition machinery anymore.  The following information is provided,
+mainly, as an historical reference.
+
+ at section Adding a New Host
+
+ at cindex adding a new host
+ at cindex host, adding
+ at value{GDBN}'s host configuration support normally happens via Autoconf.
+New host-specific definitions should not be needed.  Older hosts
+ at value{GDBN} still use the host-specific definitions and files listed
+below, but these mostly exist for historical reasons, and will
+eventually disappear.
+
+ at table @file
+ at item gdb/config/@var{arch}/@var{xyz}.mh
+This file is a Makefile fragment that once contained both host and
+native configuration information (@pxref{Native Debugging}) for the
+machine @var{xyz}.  The host configuration information is now handled
+by Autoconf.
+
+Host configuration information included definitions for @code{CC},
+ at code{SYSV_DEFINE}, @code{XM_CFLAGS}, @code{XM_ADD_FILES},
+ at code{XM_CLIBS}, @code{XM_CDEPS}, etc.; see @file{Makefile.in}.
+
+New host-only configurations do not need this file.
+
+ at end table
+
+(Files named @file{gdb/config/@var{arch}/xm- at var{xyz}.h} were once
+used to define host-specific macros, but were no longer needed and
+have all been removed.)
+
+ at subheading Generic Host Support Files
+
+ at cindex generic host support
+There are some ``generic'' versions of routines that can be used by
+various systems.
+
+ at table @file
+ at cindex remote debugging support
+ at cindex serial line support
+ at item ser-unix.c
+This contains serial line support for Unix systems.  It is included by
+default on all Unix-like hosts.
+
+ at item ser-pipe.c
+This contains serial pipe support for Unix systems.  It is included by
+default on all Unix-like hosts.
+
+ at item ser-mingw.c
+This contains serial line support for 32-bit programs running under
+Windows using MinGW.
+
+ at item ser-go32.c
+This contains serial line support for 32-bit programs running under DOS,
+using the DJGPP (a.k.a.@: GO32) execution environment.
+
+ at cindex TCP remote support
+ at item ser-tcp.c
+This contains generic TCP support using sockets.  It is included by
+default on all Unix-like hosts and with MinGW.
+ at end table
+
+ at section Host Conditionals
+
+When @value{GDBN} is configured and compiled, various macros are
+defined or left undefined, to control compilation based on the
+attributes of the host system.  While formerly they could be set in
+host-specific header files, at present they can be changed only by
+setting @code{CFLAGS} when building, or by editing the source code.
+
+These macros and their meanings (or if the meaning is not documented
+here, then one of the source files where they are used is indicated)
+are:
+
+ at ftable @code
+ at item @value{GDBN}INIT_FILENAME
+The default name of @value{GDBN}'s initialization file (normally
+ at file{.gdbinit}).
+
+ at item SIGWINCH_HANDLER
+If your host defines @code{SIGWINCH}, you can define this to be the name
+of a function to be called if @code{SIGWINCH} is received.
+
+ at item SIGWINCH_HANDLER_BODY
+Define this to expand into code that will define the function named by
+the expansion of @code{SIGWINCH_HANDLER}.
+
+ at item CRLF_SOURCE_FILES
+ at cindex DOS text files
+Define this if host files use @code{\r\n} rather than @code{\n} as a
+line terminator.  This will cause source file listings to omit @code{\r}
+characters when printing and it will allow @code{\r\n} line endings of files
+which are ``sourced'' by gdb.  It must be possible to open files in binary
+mode using @code{O_BINARY} or, for fopen, @code{"rb"}.
+
+ at item DEFAULT_PROMPT
+ at cindex prompt
+The default value of the prompt string (normally @code{"(gdb) "}).
+
+ at item DEV_TTY
+ at cindex terminal device
+The name of the generic TTY device, defaults to @code{"/dev/tty"}.
+
+ at item ISATTY
+Substitute for isatty, if not available.
+
+ at item FOPEN_RB
+Define this if binary files are opened the same way as text files.
+
+ at item CC_HAS_LONG_LONG
+ at cindex @code{long long} data type
+Define this if the host C compiler supports @code{long long}.  This is set
+by the @code{configure} script.
+
+ at item PRINTF_HAS_LONG_LONG
+Define this if the host can handle printing of long long integers via
+the printf format conversion specifier @code{ll}.  This is set by the
+ at code{configure} script.
+
+ at item LSEEK_NOT_LINEAR
+Define this if @code{lseek (n)} does not necessarily move to byte number
+ at code{n} in the file.  This is only used when reading source files.  It
+is normally faster to define @code{CRLF_SOURCE_FILES} when possible.
+
+ at item lint
+Define this to help placate @code{lint} in some situations.
+
+ at item volatile
+Define this to override the defaults of @code{__volatile__} or
+ at code{/**/}.
+ at end ftable
+
+
+ at node Target Architecture Definition
+
+ at chapter Target Architecture Definition
+
+ at cindex target architecture definition
+ at value{GDBN}'s target architecture defines what sort of
+machine-language programs @value{GDBN} can work with, and how it works
+with them.
+
+The target architecture object is implemented as the C structure
+ at code{struct gdbarch *}.  The structure, and its methods, are generated
+using the Bourne shell script @file{gdbarch.sh}.
+
+ at menu
+* OS ABI Variant Handling::
+* Initialize New Architecture::
+* Registers and Memory::
+* Pointers and Addresses::
+* Address Classes::
+* Register Representation::
+* Frame Interpretation::
+* Inferior Call Setup::
+* Adding support for debugging core files::
+* Defining Other Architecture Features::
+* Adding a New Target::
+ at end menu
+
+ at node  OS ABI Variant Handling
+ at section Operating System ABI Variant Handling
+ at cindex OS ABI variants
+
+ at value{GDBN} provides a mechanism for handling variations in OS
+ABIs.  An OS ABI variant may have influence over any number of
+variables in the target architecture definition.  There are two major
+components in the OS ABI mechanism: sniffers and handlers.
+
+A @dfn{sniffer} examines a file matching a BFD architecture/flavour pair
+(the architecture may be wildcarded) in an attempt to determine the
+OS ABI of that file.  Sniffers with a wildcarded architecture are considered
+to be @dfn{generic}, while sniffers for a specific architecture are
+considered to be @dfn{specific}.  A match from a specific sniffer
+overrides a match from a generic sniffer.  Multiple sniffers for an
+architecture/flavour may exist, in order to differentiate between two
+different operating systems which use the same basic file format.  The
+OS ABI framework provides a generic sniffer for ELF-format files which
+examines the @code{EI_OSABI} field of the ELF header, as well as note
+sections known to be used by several operating systems.
+
+ at cindex fine-tuning @code{gdbarch} structure
+A @dfn{handler} is used to fine-tune the @code{gdbarch} structure for the
+selected OS ABI.  There may be only one handler for a given OS ABI
+for each BFD architecture.
+
+The following OS ABI variants are defined in @file{defs.h}:
+
+ at table @code
+
+ at findex GDB_OSABI_UNINITIALIZED
+ at item GDB_OSABI_UNINITIALIZED
+Used for struct gdbarch_info if ABI is still uninitialized.
+
+ at findex GDB_OSABI_UNKNOWN
+ at item GDB_OSABI_UNKNOWN
+The ABI of the inferior is unknown.  The default @code{gdbarch}
+settings for the architecture will be used.
+
+ at findex GDB_OSABI_SVR4
+ at item GDB_OSABI_SVR4
+UNIX System V Release 4.
+
+ at findex GDB_OSABI_HURD
+ at item GDB_OSABI_HURD
+GNU using the Hurd kernel.
+
+ at findex GDB_OSABI_SOLARIS
+ at item GDB_OSABI_SOLARIS
+Sun Solaris.
+
+ at findex GDB_OSABI_OSF1
+ at item GDB_OSABI_OSF1
+OSF/1, including Digital UNIX and Compaq Tru64 UNIX.
+
+ at findex GDB_OSABI_LINUX
+ at item GDB_OSABI_LINUX
+GNU using the Linux kernel.
+
+ at findex GDB_OSABI_FREEBSD_AOUT
+ at item GDB_OSABI_FREEBSD_AOUT
+FreeBSD using the @code{a.out} executable format.
+
+ at findex GDB_OSABI_FREEBSD_ELF
+ at item GDB_OSABI_FREEBSD_ELF
+FreeBSD using the ELF executable format.
+
+ at findex GDB_OSABI_NETBSD_AOUT
+ at item GDB_OSABI_NETBSD_AOUT
+NetBSD using the @code{a.out} executable format.
+
+ at findex GDB_OSABI_NETBSD_ELF
+ at item GDB_OSABI_NETBSD_ELF
+NetBSD using the ELF executable format.
+
+ at findex GDB_OSABI_OPENBSD_ELF
+ at item GDB_OSABI_OPENBSD_ELF
+OpenBSD using the ELF executable format.
+
+ at findex GDB_OSABI_WINCE
+ at item GDB_OSABI_WINCE
+Windows CE.
+
+ at findex GDB_OSABI_GO32
+ at item GDB_OSABI_GO32
+DJGPP.
+
+ at findex GDB_OSABI_IRIX
+ at item GDB_OSABI_IRIX
+Irix.
+
+ at findex GDB_OSABI_INTERIX
+ at item GDB_OSABI_INTERIX
+Interix (Posix layer for MS-Windows systems).
+
+ at findex GDB_OSABI_HPUX_ELF
+ at item GDB_OSABI_HPUX_ELF
+HP/UX using the ELF executable format.
+
+ at findex GDB_OSABI_HPUX_SOM
+ at item GDB_OSABI_HPUX_SOM
+HP/UX using the SOM executable format.
+
+ at findex GDB_OSABI_QNXNTO
+ at item GDB_OSABI_QNXNTO
+QNX Neutrino.
+
+ at findex GDB_OSABI_CYGWIN
+ at item GDB_OSABI_CYGWIN
+Cygwin.
+
+ at findex GDB_OSABI_AIX
+ at item GDB_OSABI_AIX
+AIX.
+
+ at end table
+
+Here are the functions that make up the OS ABI framework:
+
+ at deftypefun {const char *} gdbarch_osabi_name (enum gdb_osabi @var{osabi})
+Return the name of the OS ABI corresponding to @var{osabi}.
+ at end deftypefun
+
+ at deftypefun void gdbarch_register_osabi (enum bfd_architecture @var{arch}, unsigned long @var{machine}, enum gdb_osabi @var{osabi}, void (*@var{init_osabi})(struct gdbarch_info @var{info}, struct gdbarch *@var{gdbarch}))
+Register the OS ABI handler specified by @var{init_osabi} for the
+architecture, machine type and OS ABI specified by @var{arch},
+ at var{machine} and @var{osabi}.  In most cases, a value of zero for the
+machine type, which implies the architecture's default machine type,
+will suffice.
+ at end deftypefun
+
+ at deftypefun void gdbarch_register_osabi_sniffer (enum bfd_architecture @var{arch}, enum bfd_flavour @var{flavour}, enum gdb_osabi (*@var{sniffer})(bfd *@var{abfd}))
+Register the OS ABI file sniffer specified by @var{sniffer} for the
+BFD architecture/flavour pair specified by @var{arch} and @var{flavour}.
+If @var{arch} is @code{bfd_arch_unknown}, the sniffer is considered to
+be generic, and is allowed to examine @var{flavour}-flavoured files for
+any architecture.
+ at end deftypefun
+
+ at deftypefun {enum gdb_osabi} gdbarch_lookup_osabi (bfd *@var{abfd})
+Examine the file described by @var{abfd} to determine its OS ABI.
+The value @code{GDB_OSABI_UNKNOWN} is returned if the OS ABI cannot
+be determined.
+ at end deftypefun
+
+ at deftypefun void gdbarch_init_osabi (struct gdbarch info @var{info}, struct gdbarch *@var{gdbarch}, enum gdb_osabi @var{osabi})
+Invoke the OS ABI handler corresponding to @var{osabi} to fine-tune the
+ at code{gdbarch} structure specified by @var{gdbarch}.  If a handler
+corresponding to @var{osabi} has not been registered for @var{gdbarch}'s
+architecture, a warning will be issued and the debugging session will continue
+with the defaults already established for @var{gdbarch}.
+ at end deftypefun
+
+ at deftypefun void generic_elf_osabi_sniff_abi_tag_sections (bfd *@var{abfd}, asection *@var{sect}, void *@var{obj})
+Helper routine for ELF file sniffers.  Examine the file described by
+ at var{abfd} and look at ABI tag note sections to determine the OS ABI
+from the note.  This function should be called via
+ at code{bfd_map_over_sections}.
+ at end deftypefun
+
+ at node Initialize New Architecture
+ at section Initializing a New Architecture
+
+ at menu
+* How an Architecture is Represented::
+* Looking Up an Existing Architecture::
+* Creating a New Architecture::
+ at end menu
+
+ at node How an Architecture is Represented
+ at subsection How an Architecture is Represented
+ at cindex architecture representation
+ at cindex representation of architecture
+
+Each @code{gdbarch} is associated with a single @sc{bfd} architecture,
+via a @code{bfd_arch_ at var{arch}} in the @code{bfd_architecture}
+enumeration.  The @code{gdbarch} is registered by a call to
+ at code{register_gdbarch_init}, usually from the file's
+ at code{_initialize_ at var{filename}} routine, which will be automatically
+called during @value{GDBN} startup.  The arguments are a @sc{bfd}
+architecture constant and an initialization function.
+
+ at findex _initialize_ at var{arch}_tdep
+ at cindex @file{@var{arch}-tdep.c}
+A @value{GDBN} description for a new architecture, @var{arch} is created by
+defining a global function @code{_initialize_ at var{arch}_tdep}, by
+convention in the source file @file{@var{arch}-tdep.c}.  For example,
+in the case of the OpenRISC 1000, this function is called
+ at code{_initialize_or1k_tdep} and is found in the file
+ at file{or1k-tdep.c}.
+
+ at cindex @file{configure.tgt}
+ at cindex @code{gdbarch}
+ at findex gdbarch_register
+The resulting object files containing the implementation of the
+ at code{_initialize_ at var{arch}_tdep} function are specified in the @value{GDBN}
+ at file{configure.tgt} file, which includes a large case statement
+pattern matching against the @code{--target} option of the
+ at code{configure} script.  The new @code{struct gdbarch} is created
+within the @code{_initialize_ at var{arch}_tdep} function by calling
+ at code{gdbarch_register}:
+
+ at smallexample
+void gdbarch_register (enum bfd_architecture    @var{architecture},
+                       gdbarch_init_ftype      *@var{init_func},
+                       gdbarch_dump_tdep_ftype *@var{tdep_dump_func});
+ at end smallexample
+
+The @var{architecture} will identify the unique @sc{bfd} to be
+associated with this @code{gdbarch}.  The @var{init_func} funciton is
+called to create and return the new @code{struct gdbarch}.  The
+ at var{tdep_dump_func} function will dump the target specific details
+associated with this architecture.
+
+For example the function @code{_initialize_or1k_tdep} creates its
+architecture for 32-bit OpenRISC 1000 architectures by calling:
+
+ at smallexample
+gdbarch_register (bfd_arch_or32, or1k_gdbarch_init, or1k_dump_tdep);
+ at end smallexample
+
+ at node Looking Up an Existing Architecture
+ at subsection Looking Up an Existing Architecture
+ at cindex @code{gdbarch} lookup
+
+The initialization function has this prototype:
+
+ at smallexample
+static struct gdbarch *
+ at var{arch}_gdbarch_init (struct gdbarch_info @var{info},
+                         struct gdbarch_list *@var{arches})
+ at end smallexample
+
+The @var{info} argument contains parameters used to select the correct
+architecture, and @var{arches} is a list of architectures which
+have already been created with the same @code{bfd_arch_ at var{arch}}
+value.
+
+The initialization function should first make sure that @var{info}
+is acceptable, and return @code{NULL} if it is not.  Then, it should
+search through @var{arches} for an exact match to @var{info}, and
+return one if found.  Lastly, if no exact match was found, it should
+create a new architecture based on @var{info} and return it.
+
+ at findex gdbarch_list_lookup_by_info
+ at cindex @code{gdbarch_info}
+The lookup is done using @code{gdbarch_list_lookup_by_info}.  It is
+passed the list of existing architectures, @var{arches}, and the
+ at code{struct gdbarch_info}, @var{info}, and returns the first matching
+architecture it finds, or @code{NULL} if none are found.  If an
+architecture is found it can be returned as the result from the
+initialization function, otherwise a new @code{struct gdbach} will need
+to be created.
+
+The struct gdbarch_info has the following components:
+
+ at smallexample
+struct gdbarch_info
+@{
+   const struct bfd_arch_info *bfd_arch_info;
+   int                         byte_order;
+   bfd                        *abfd;
+   struct gdbarch_tdep_info   *tdep_info;
+   enum gdb_osabi              osabi;
+   const struct target_desc   *target_desc;
+@};
+ at end smallexample
+
+ at vindex bfd_arch_info
+The @code{bfd_arch_info} member holds the key details about the
+architecture.  The @code{byte_order} member is a value in an
+enumeration indicating the endianism.  The @code{abfd} member is a
+pointer to the full @sc{bfd}, the @code{tdep_info} member is
+additional custom target specific information, @code{osabi} identifies
+which (if any) of a number of operating specific ABIs are used by this
+architecture and the @code{target_desc} member is a set of name-value
+pairs with information about register usage in this target.
+
+When the @code{struct gdbarch} initialization function is called, not
+all the fields are provided---only those which can be deduced from the
+ at sc{bfd}.  The @code{struct gdbarch_info}, @var{info} is used as a
+look-up key with the list of existing architectures, @var{arches} to
+see if a suitable architecture already exists.  The @var{tdep_info},
+ at var{osabi} and @var{target_desc} fields may be added before this
+lookup to refine the search.
+
+Only information in @var{info} should be used to choose the new
+architecture.  Historically, @var{info} could be sparse, and
+defaults would be collected from the first element on @var{arches}.
+However, @value{GDBN} now fills in @var{info} more thoroughly,
+so new @code{gdbarch} initialization functions should not take
+defaults from @var{arches}.
+
+ at node Creating a New Architecture
+ at subsection Creating a New Architecture
+ at cindex @code{struct gdbarch} creation
+
+ at findex gdbarch_alloc
+ at cindex @code{gdbarch_tdep} when allocating new @code{gdbarch}
+If no architecture is found, then a new architecture must be created,
+by calling @code{gdbarch_alloc} using the supplied @code{@w{struct
+gdbarch_info}} and any additional custom target specific
+information in a @code{struct gdbarch_tdep}.  The prototype for
+ at code{gdbarch_alloc} is:
+
+ at smallexample
+struct gdbarch *gdbarch_alloc (const struct gdbarch_info *@var{info},
+                               struct gdbarch_tdep       *@var{tdep}); 
+ at end smallexample
+
+ at cindex @code{set_gdbarch} functions
+ at cindex @code{gdbarch} accessor functions
+The newly created struct gdbarch must then be populated.  Although
+there are default values, in most cases they are not what is
+required.
+
+For each element, @var{X}, there is are a pair of corresponding accessor
+functions, one to set the value of that element,
+ at code{set_gdbarch_ at var{X}}, the second to either get the value of an
+element (if it is a variable) or to apply the element (if it is a
+function), @code{gdbarch_ at var{X}}.  Note that both accessor functions
+take a pointer to the @code{@w{struct gdbarch}} as first
+argument.  Populating the new @code{gdbarch} should use the
+ at code{set_gdbarch} functions.
+
+The following sections identify the main elements that should be set
+in this way.  This is not the complete list, but represents the
+functions and elements that must commonly be specified for a new
+architecture.  Many of the functions and variables are described in the
+header file @file{gdbarch.h}.
+
+This is the main work in defining a new architecture.  Implementing the
+set of functions to populate the @code{struct gdbarch}.
+
+ at cindex @code{gdbarch_tdep} definition
+ at code{struct gdbarch_tdep} is not defined within @value{GDBN}---it is up
+to the user to define this struct if it is needed to hold custom target
+information that is not covered by the standard @code{@w{struct
+gdbarch}}. For example with the OpenRISC 1000 architecture it is used to
+hold the number of matchpoints available in the target (along with other
+information).
+
+If there is no additional target specific information, it can be set to
+ at code{NULL}.
+
+ at node Registers and Memory
+ at section Registers and Memory
+
+ at value{GDBN}'s model of the target machine is rather simple.
+ at value{GDBN} assumes the machine includes a bank of registers and a
+block of memory.  Each register may have a different size.
+
+ at value{GDBN} does not have a magical way to match up with the
+compiler's idea of which registers are which; however, it is critical
+that they do match up accurately.  The only way to make this work is
+to get accurate information about the order that the compiler uses,
+and to reflect that in the @code{gdbarch_register_name} and related functions.
+
+ at value{GDBN} can handle big-endian, little-endian, and bi-endian architectures.
+
+ at node Pointers and Addresses
+ at section Pointers Are Not Always Addresses
+ at cindex pointer representation
+ at cindex address representation
+ at cindex word-addressed machines
+ at cindex separate data and code address spaces
+ at cindex spaces, separate data and code address
+ at cindex address spaces, separate data and code
+ at cindex code pointers, word-addressed
+ at cindex converting between pointers and addresses
+ at cindex D10V addresses
+
+On almost all 32-bit architectures, the representation of a pointer is
+indistinguishable from the representation of some fixed-length number
+whose value is the byte address of the object pointed to.  On such
+machines, the words ``pointer'' and ``address'' can be used interchangeably.
+However, architectures with smaller word sizes are often cramped for
+address space, so they may choose a pointer representation that breaks this
+identity, and allows a larger code address space.
+
+ at c D10V is gone from sources - more current example?
+
+For example, the Renesas D10V is a 16-bit VLIW processor whose
+instructions are 32 bits long at footnote{Some D10V instructions are
+actually pairs of 16-bit sub-instructions.  However, since you can't
+jump into the middle of such a pair, code addresses can only refer to
+full 32 bit instructions, which is what matters in this explanation.}.
+If the D10V used ordinary byte addresses to refer to code locations,
+then the processor would only be able to address 64kb of instructions.
+However, since instructions must be aligned on four-byte boundaries, the
+low two bits of any valid instruction's byte address are always
+zero---byte addresses waste two bits.  So instead of byte addresses,
+the D10V uses word addresses---byte addresses shifted right two bits---to
+refer to code.  Thus, the D10V can use 16-bit words to address 256kb of
+code space.
+
+However, this means that code pointers and data pointers have different
+forms on the D10V.  The 16-bit word @code{0xC020} refers to byte address
+ at code{0xC020} when used as a data address, but refers to byte address
+ at code{0x30080} when used as a code address.
+
+(The D10V also uses separate code and data address spaces, which also
+affects the correspondence between pointers and addresses, but we're
+going to ignore that here; this example is already too long.)
+
+To cope with architectures like this---the D10V is not the only
+one!--- at value{GDBN} tries to distinguish between @dfn{addresses}, which are
+byte numbers, and @dfn{pointers}, which are the target's representation
+of an address of a particular type of data.  In the example above,
+ at code{0xC020} is the pointer, which refers to one of the addresses
+ at code{0xC020} or @code{0x30080}, depending on the type imposed upon it.
+ at value{GDBN} provides functions for turning a pointer into an address
+and vice versa, in the appropriate way for the current architecture.
+
+Unfortunately, since addresses and pointers are identical on almost all
+processors, this distinction tends to bit-rot pretty quickly.  Thus,
+each time you port @value{GDBN} to an architecture which does
+distinguish between pointers and addresses, you'll probably need to
+clean up some architecture-independent code.
+
+Here are functions which convert between pointers and addresses:
+
+ at deftypefun CORE_ADDR extract_typed_address (void *@var{buf}, struct type *@var{type})
+Treat the bytes at @var{buf} as a pointer or reference of type
+ at var{type}, and return the address it represents, in a manner
+appropriate for the current architecture.  This yields an address
+ at value{GDBN} can use to read target memory, disassemble, etc.  Note that
+ at var{buf} refers to a buffer in @value{GDBN}'s memory, not the
+inferior's.
+
+For example, if the current architecture is the Intel x86, this function
+extracts a little-endian integer of the appropriate length from
+ at var{buf} and returns it.  However, if the current architecture is the
+D10V, this function will return a 16-bit integer extracted from
+ at var{buf}, multiplied by four if @var{type} is a pointer to a function.
+
+If @var{type} is not a pointer or reference type, then this function
+will signal an internal error.
+ at end deftypefun
+
+ at deftypefun CORE_ADDR store_typed_address (void *@var{buf}, struct type *@var{type}, CORE_ADDR @var{addr})
+Store the address @var{addr} in @var{buf}, in the proper format for a
+pointer of type @var{type} in the current architecture.  Note that
+ at var{buf} refers to a buffer in @value{GDBN}'s memory, not the
+inferior's.
+
+For example, if the current architecture is the Intel x86, this function
+stores @var{addr} unmodified as a little-endian integer of the
+appropriate length in @var{buf}.  However, if the current architecture
+is the D10V, this function divides @var{addr} by four if @var{type} is
+a pointer to a function, and then stores it in @var{buf}.
+
+If @var{type} is not a pointer or reference type, then this function
+will signal an internal error.
+ at end deftypefun
+
+ at deftypefun CORE_ADDR value_as_address (struct value *@var{val})
+Assuming that @var{val} is a pointer, return the address it represents,
+as appropriate for the current architecture.
+
+This function actually works on integral values, as well as pointers.
+For pointers, it performs architecture-specific conversions as
+described above for @code{extract_typed_address}.
+ at end deftypefun
+
+ at deftypefun CORE_ADDR value_from_pointer (struct type *@var{type}, CORE_ADDR @var{addr})
+Create and return a value representing a pointer of type @var{type} to
+the address @var{addr}, as appropriate for the current architecture.
+This function performs architecture-specific conversions as described
+above for @code{store_typed_address}.
+ at end deftypefun
+
+Here are two functions which architectures can define to indicate the
+relationship between pointers and addresses.  These have default
+definitions, appropriate for architectures on which all pointers are
+simple unsigned byte addresses.
+
+ at deftypefun CORE_ADDR gdbarch_pointer_to_address (struct gdbarch *@var{gdbarch}, struct type *@var{type}, char *@var{buf})
+Assume that @var{buf} holds a pointer of type @var{type}, in the
+appropriate format for the current architecture.  Return the byte
+address the pointer refers to.
+
+This function may safely assume that @var{type} is either a pointer or a
+C at t{++} reference type.
+ at end deftypefun
+
+ at deftypefun void gdbarch_address_to_pointer (struct gdbarch *@var{gdbarch}, struct type *@var{type}, char *@var{buf}, CORE_ADDR @var{addr})
+Store in @var{buf} a pointer of type @var{type} representing the address
+ at var{addr}, in the appropriate format for the current architecture.
+
+This function may safely assume that @var{type} is either a pointer or a
+C at t{++} reference type.
+ at end deftypefun
+
+ at node Address Classes
+ at section Address Classes
+ at cindex address classes
+ at cindex DW_AT_byte_size
+ at cindex DW_AT_address_class
+
+Sometimes information about different kinds of addresses is available
+via the debug information.  For example, some programming environments
+define addresses of several different sizes.  If the debug information
+distinguishes these kinds of address classes through either the size
+info (e.g, @code{DW_AT_byte_size} in @w{DWARF 2}) or through an explicit
+address class attribute (e.g, @code{DW_AT_address_class} in @w{DWARF 2}), the
+following macros should be defined in order to disambiguate these
+types within @value{GDBN} as well as provide the added information to
+a @value{GDBN} user when printing type expressions.
+
+ at deftypefun int gdbarch_address_class_type_flags (struct gdbarch *@var{gdbarch}, int @var{byte_size}, int @var{dwarf2_addr_class})
+Returns the type flags needed to construct a pointer type whose size
+is @var{byte_size} and whose address class is @var{dwarf2_addr_class}.
+This function is normally called from within a symbol reader.  See
+ at file{dwarf2read.c}.
+ at end deftypefun
+
+ at deftypefun {char *} gdbarch_address_class_type_flags_to_name (struct gdbarch *@var{gdbarch}, int @var{type_flags})
+Given the type flags representing an address class qualifier, return
+its name.
+ at end deftypefun
+ at deftypefun int gdbarch_address_class_name_to_type_flags (struct gdbarch *@var{gdbarch}, int @var{name}, int *@var{type_flags_ptr})
+Given an address qualifier name, set the @code{int} referenced by @var{type_flags_ptr} to the type flags
+for that address class qualifier.
+ at end deftypefun
+
+Since the need for address classes is rather rare, none of
+the address class functions are defined by default.  Predicate
+functions are provided to detect when they are defined.
+
+Consider a hypothetical architecture in which addresses are normally
+32-bits wide, but 16-bit addresses are also supported.  Furthermore,
+suppose that the @w{DWARF 2} information for this architecture simply
+uses a @code{DW_AT_byte_size} value of 2 to indicate the use of one
+of these "short" pointers.  The following functions could be defined
+to implement the address class functions:
+
+ at smallexample
+somearch_address_class_type_flags (int byte_size,
+                                   int dwarf2_addr_class)
+@{
+  if (byte_size == 2)
+    return TYPE_FLAG_ADDRESS_CLASS_1;
+  else
+    return 0;
+@}
+
+static char *
+somearch_address_class_type_flags_to_name (int type_flags)
+@{
+  if (type_flags & TYPE_FLAG_ADDRESS_CLASS_1)
+    return "short";
+  else
+    return NULL;
+@}
+
+int
+somearch_address_class_name_to_type_flags (char *name,
+                                           int *type_flags_ptr)
+@{
+  if (strcmp (name, "short") == 0)
+    @{
+      *type_flags_ptr = TYPE_FLAG_ADDRESS_CLASS_1;
+      return 1;
+    @}
+  else
+    return 0;
+@}
+ at end smallexample
+
+The qualifier @code{@@short} is used in @value{GDBN}'s type expressions
+to indicate the presence of one of these ``short'' pointers.  For
+example if the debug information indicates that @code{short_ptr_var} is
+one of these short pointers, @value{GDBN} might show the following
+behavior:
+
+ at smallexample
+(gdb) ptype short_ptr_var
+type = int * @@short
+ at end smallexample
+
+
+ at node Register Representation
+ at section Register Representation
+
+ at menu
+* Raw and Cooked Registers::
+* Register Architecture Functions & Variables::
+* Register Information Functions::
+* Register and Memory Data::
+* Register Caching::
+ at end menu
+
+ at node Raw and Cooked Registers
+ at subsection Raw and Cooked Registers
+ at cindex raw register representation
+ at cindex cooked register representation
+ at cindex representations, raw and cooked registers
+
+ at value{GDBN} considers registers to be a set with members numbered
+linearly from 0 upwards.  The first part of that set corresponds to real
+physical registers, the second part to any @dfn{pseudo-registers}.
+Pseudo-registers have no independent physical existence, but are useful
+representations of information within the architecture.  For example the
+OpenRISC 1000 architecture has up to 32 general purpose registers, which
+are typically represented as 32-bit (or 64-bit) integers.  However the
+GPRs are also used as operands to the floating point operations, and it
+could be convenient to define a set of pseudo-registers, to show the
+GPRs represented as floating point values.
+
+For any architecture, the implementer will decide on a mapping from
+hardware to @value{GDBN} register numbers.  The registers corresponding to real
+hardware are referred to as @dfn{raw} registers, the remaining registers are
+ at dfn{pseudo-registers}.  The total register set (raw and pseudo) is called
+the @dfn{cooked} register set.
+
+
+ at node Register Architecture Functions & Variables
+ at subsection Functions and Variables Specifying the Register Architecture
+ at cindex @code{gdbarch} register architecture functions
+
+These @code{struct gdbarch} functions and variables specify the number
+and type of registers in the architecture.
+
+ at deftypefn {Architecture Function} CORE_ADDR read_pc (struct regcache *@var{regcache})
+ at end deftypefn
+ at deftypefn {Architecture Function} void write_pc (struct regcache *@var{regcache}, CORE_ADDR @var{val})
+
+Read or write the program counter.  The default value of both
+functions is @code{NULL} (no function available).  If the program
+counter is just an ordinary register, it can be specified in
+ at code{struct gdbarch} instead (see @code{pc_regnum} below) and it will
+be read or written using the standard routines to access registers.  This
+function need only be specified if the program counter is not an
+ordinary register.
+
+Any register information can be obtained using the supplied register
+cache, @var{regcache}.  @xref{Register Caching, , Register Caching}.
+
+ at end deftypefn
+
+ at deftypefn {Architecture Function} void pseudo_register_read (struct gdbarch *@var{gdbarch}, struct regcache *@var{regcache}, int @var{regnum}, const gdb_byte *@var{buf})
+ at end deftypefn
+ at deftypefn {Architecture Function} void pseudo_register_write (struct gdbarch *@var{gdbarch}, struct regcache *@var{regcache}, int @var{regnum}, const gdb_byte *@var{buf})
+
+These functions should be defined if there are any pseudo-registers.
+The default value is @code{NULL}.  @var{regnum} is the number of the
+register to read or write (which will be a @dfn{cooked} register
+number) and @var{buf} is the buffer where the value read will be
+placed, or from which the value to be written will be taken.  The
+value in the buffer may be converted to or from a signed or unsigned
+integral value using one of the utility functions (@pxref{Register and
+Memory Data, , Using Different Register and Memory Data
+Representations}).
+
+The access should be for the specified architecture,
+ at var{gdbarch}.  Any register information can be obtained using the
+supplied register cache, @var{regcache}.  @xref{Register Caching, ,
+Register Caching}.
+
+ at end deftypefn
+
+ at deftypevr {Architecture Variable} int sp_regnum
+ at vindex sp_regnum
+ at cindex stack pointer
+ at cindex @kbd{$sp}
+
+This specifies the register holding the stack pointer, which may be a
+raw or pseudo-register.  It defaults to -1 (not defined), but it is an
+error for it not to be defined.
+
+The value of the stack pointer register can be accessed withing
+ at value{GDBN} as the variable @kbd{$sp}.
+
+ at end deftypevr
+
+ at deftypevr {Architecture Variable} int pc_regnum
+ at vindex pc_regnum
+ at cindex program counter
+ at cindex @kbd{$pc}
+
+This specifies the register holding the program counter, which may be a
+raw or pseudo-register.  It defaults to -1 (not defined).  If
+ at code{pc_regnum} is not defined, then the functions @code{read_pc} and
+ at code{write_pc} (see above) must be defined.
+
+The value of the program counter (whether defined as a register, or
+through @code{read_pc} and @code{write_pc}) can be accessed withing
+ at value{GDBN} as the variable @kbd{$pc}.
+
+ at end deftypevr
+
+ at deftypevr {Architecture Variable} int ps_regnum
+ at vindex ps_regnum
+ at cindex processor status register
+ at cindex status register
+ at cindex @kbd{$ps}
+
+This specifies the register holding the processor status (often called
+the status register), which may be a raw or pseudo-register.  It
+defaults to -1 (not defined).
+
+If defined, the value of this register can be accessed withing
+ at value{GDBN} as the variable @kbd{$ps}.
+
+ at end deftypevr
+
+ at deftypevr {Architecture Variable} int fp0_regnum
+ at vindex fp0_regnum
+ at cindex first floating point register
+
+This specifies the first floating point register.  It defaults to
+0.  @code{fp0_regnum} is not needed unless the target offers support
+for floating point.
+
+ at end deftypevr
+
+ at node Register Information Functions
+ at subsection Functions Giving Register Information
+ at cindex @code{gdbarch} register information functions
+
+These functions return information about registers.
+
+ at deftypefn {Architecture Function} {const char *} register_name (struct gdbarch *@var{gdbarch}, int @var{regnum})
+
+This function should convert a register number (raw or pseudo) to a
+register name (as a C @code{const char *}).  This is used both to
+determine the name of a register for output and to work out the meaning
+of any register names used as input.  The function may also return
+ at code{NULL}, to indicate that @var{regnum} is not a valid register.
+
+For example with the OpenRISC 1000, @value{GDBN} registers 0-31 are the
+General Purpose Registers, register 32 is the program counter and
+register 33 is the supervision register (i.e.@: the processor status
+register), which map to the strings @code{"gpr00"} through
+ at code{"gpr31"}, @code{"pc"} and @code{"sr"} respectively. This means
+that the @value{GDBN} command @kbd{print $gpr5} should print the value of
+the OR1K general purpose register 5 at footnote{
+ at cindex frame pointer
+ at cindex @kbd{$fp}
+Historically, @value{GDBN} always had a concept of a frame pointer
+register, which could be accessed via the @value{GDBN} variable,
+ at kbd{$fp}.  That concept is now deprecated, recognizing that not all
+architectures have a frame pointer.  However if an architecture does
+have a frame pointer register, and defines a register or
+pseudo-register with the name @code{"fp"}, then that register will be
+used as the value of the @kbd{$fp} variable.}.
+
+The default value for this function is @code{NULL}, meaning
+undefined. It should always be defined.
+
+The access should be for the specified architecture, @var{gdbarch}.
+
+ at end deftypefn
+
+ at deftypefn {Architecture Function} {struct type *} register_type (struct gdbarch *@var{gdbarch}, int @var{regnum})
+
+Given a register number, this function identifies the type of data it
+may be holding, specified as a @code{struct type}.  @value{GDBN} allows
+creation of arbitrary types, but a number of built in types are
+provided (@code{builtin_type_void}, @code{builtin_type_int32} etc),
+together with functions to derive types from these.
+
+Typically the program counter will have a type of ``pointer to
+function'' (it points to code), the frame pointer and stack pointer
+will have types of ``pointer to void'' (they point to data on the stack)
+and all other integer registers will have a type of 32-bit integer or
+64-bit integer.
+
+This information guides the formatting when displaying register
+information.  The default value is @code{NULL} meaning no information is
+available to guide formatting when displaying registers.
+
+ at end deftypefn
+
+ at deftypefn {Architecture Function} void print_registers_info (struct gdbarch *@var{gdbarch}, struct ui_file *@var{file}, struct frame_info *@var{frame}, int @var{regnum}, int @var{all})
+
+Define this function to print out one or all of the registers for the
+ at value{GDBN} @kbd{info registers} command.  The default value is the
+function @code{default_print_registers_info}, which uses the register
+type information (see @code{register_type} above) to determine how each
+register should be printed.  Define a custom version of this function
+for fuller control over how the registers are displayed.
+
+The access should be for the specified architecture, @var{gdbarch},
+with output to the file specified by the User Interface
+Independent Output file handle, @var{file} (@pxref{UI-Independent
+Output, , UI-Independent Output---the @code{ui_out}
+Functions}).
+
+The registers should show their values in the frame specified by
+ at var{frame}.  If @var{regnum} is -1 and @var{all} is zero, then all
+the ``significant'' registers should be shown (the implementer should
+decide which registers are ``significant''). Otherwise only the value of
+the register specified by @var{regnum} should be output.  If
+ at var{regnum} is -1 and @var{all} is non-zero (true), then the value of
+all registers should be shown.
+
+By default @code{default_print_registers_info} prints one register per
+line, and if @var{all} is zero omits floating-point registers.
+
+ at end deftypefn
+
+ at deftypefn {Architecture Function} void print_float_info (struct gdbarch *@var{gdbarch}, struct ui_file *@var{file}, struct frame_info *@var{frame}, const char *@var{args})
+
+Define this function to provide output about the floating point unit and
+registers for the @value{GDBN} @kbd{info float} command respectively.
+The default value is @code{NULL} (not defined), meaning no information
+will be provided.
+
+The @var{gdbarch} and @var{file} and @var{frame} arguments have the same
+meaning as in the @code{print_registers_info} function above. The string
+ at var{args} contains any supplementary arguments to the @kbd{info float}
+command.
+
+Define this function if the target supports floating point operations.
+
+ at end deftypefn
+
+ at deftypefn {Architecture Function} void print_vector_info (struct gdbarch *@var{gdbarch}, struct ui_file *@var{file}, struct frame_info *@var{frame}, const char *@var{args})
+
+Define this function to provide output about the vector unit and
+registers for the @value{GDBN} @kbd{info vector} command respectively.
+The default value is @code{NULL} (not defined), meaning no information
+will be provided.
+
+The @var{gdbarch}, @var{file} and @var{frame} arguments have the
+same meaning as in the @code{print_registers_info} function above.  The
+string @var{args} contains any supplementary arguments to the @kbd{info
+vector} command.
+
+Define this function if the target supports vector operations.
+
+ at end deftypefn
+
+ at deftypefn {Architecture Function} int register_reggroup_p (struct gdbarch *@var{gdbarch}, int @var{regnum}, struct reggroup *@var{group})
+
+ at value{GDBN} groups registers into different categories (general,
+vector, floating point etc).  This function, given a register,
+ at var{regnum}, and group, @var{group}, returns 1 (true) if the register
+is in the group and 0 (false) otherwise.
+
+The information should be for the specified architecture,
+ at var{gdbarch}
+
+The default value is the function @code{default_register_reggroup_p}
+which will do a reasonable job based on the type of the register (see
+the function @code{register_type} above), with groups for general
+purpose registers, floating point registers, vector registers and raw
+(i.e not pseudo) registers.
+
+ at end deftypefn
+
+ at node Register and Memory Data
+ at subsection Using Different Register and Memory Data Representations
+ at cindex register representation
+ at cindex memory representation
+ at cindex representations, register and memory
+ at cindex register data formats, converting
+ at cindex @code{struct value}, converting register contents to
+
+Some architectures have different representations of data objects,
+depending whether the object is held in a register or memory.  For
+example:
+
+ at itemize @bullet
+
+ at item
+The Alpha architecture can represent 32 bit integer values in
+floating-point registers.
+
+ at item
+The x86 architecture supports 80-bit floating-point registers.  The
+ at code{long double} data type occupies 96 bits in memory but only 80
+bits when stored in a register.
+
+ at end itemize
+
+In general, the register representation of a data type is determined by
+the architecture, or @value{GDBN}'s interface to the architecture, while
+the memory representation is determined by the Application Binary
+Interface.
+
+For almost all data types on almost all architectures, the two
+representations are identical, and no special handling is needed.
+However, they do occasionally differ.  An architecture may define the
+following @code{struct gdbarch} functions to request conversions
+between the register and memory representations of a data type:
+
+ at deftypefn {Architecture Function} int gdbarch_convert_register_p (struct gdbarch *@var{gdbarch}, int @var{reg})
+
+Return non-zero (true) if the representation of a data value stored in
+this register may be different to the representation of that same data
+value when stored in memory.  The default value is @code{NULL}
+(undefined).
+
+If this function is defined and returns non-zero, the @code{struct
+gdbarch} functions @code{gdbarch_register_to_value} and
+ at code{gdbarch_value_to_register} (see below) should be used to perform
+any necessary conversion.
+
+If defined, this function should return zero for the register's native
+type, when no conversion is necessary.
+ at end deftypefn
+
+ at deftypefn {Architecture Function} void gdbarch_register_to_value (struct gdbarch *@var{gdbarch}, int @var{reg}, struct type *@var{type}, char *@var{from}, char *@var{to})
+
+Convert the value of register number @var{reg} to a data object of
+type @var{type}.  The buffer at @var{from} holds the register's value
+in raw format; the converted value should be placed in the buffer at
+ at var{to}.
+
+ at quotation
+ at emph{Note:} @code{gdbarch_register_to_value} and
+ at code{gdbarch_value_to_register} take their @var{reg} and @var{type}
+arguments in different orders.
+ at end quotation
+
+ at code{gdbarch_register_to_value} should only be used with registers
+for which the @code{gdbarch_convert_register_p} function returns a
+non-zero value.
+
+ at end deftypefn
+
+ at deftypefn {Architecture Function} void gdbarch_value_to_register (struct gdbarch *@var{gdbarch}, struct type *@var{type}, int @var{reg}, char *@var{from}, char *@var{to})
+
+Convert a data value of type @var{type} to register number @var{reg}'
+raw format.
+
+ at quotation
+ at emph{Note:} @code{gdbarch_register_to_value} and
+ at code{gdbarch_value_to_register} take their @var{reg} and @var{type}
+arguments in different orders.
+ at end quotation
+
+ at code{gdbarch_value_to_register} should only be used with registers
+for which the @code{gdbarch_convert_register_p} function returns a
+non-zero value.
+
+ at end deftypefn
+
+ at node Register Caching
+ at subsection Register Caching
+ at cindex register caching
+
+Caching of registers is used, so that the target does not need to be
+accessed and reanalyzed multiple times for each register in
+circumstances where the register value cannot have changed.
+
+ at cindex @code{struct regcache}
+ at value{GDBN} provides @code{struct regcache}, associated with a
+particular @code{struct gdbarch} to hold the cached values of the raw
+registers.  A set of functions is provided to access both the raw
+registers (with @code{raw} in their name) and the full set of cooked
+registers (with @code{cooked} in their name).  Functions are provided
+to ensure the register cache is kept synchronized with the values of
+the actual registers in the target.
+
+Accessing registers through the @code{struct regcache} routines will
+ensure that the appropriate @code{struct gdbarch} functions are called
+when necessary to access the underlying target architecture.  In general
+users should use the @dfn{cooked} functions, since these will map to the
+ at dfn{raw} functions automatically as appropriate.
+
+ at findex regcache_cooked_read
+ at findex regcache_cooked_write
+ at cindex @code{gdb_byte}
+ at findex regcache_cooked_read_signed
+ at findex regcache_cooked_read_unsigned
+ at findex regcache_cooked_write_signed
+ at findex regcache_cooked_write_unsigned
+The two key functions are @code{regcache_cooked_read} and
+ at code{regcache_cooked_write} which read or write a register from or to
+a byte buffer (type @code{gdb_byte *}).  For convenience the wrapper
+functions @code{regcache_cooked_read_signed},
+ at code{regcache_cooked_read_unsigned},
+ at code{regcache_cooked_write_signed} and
+ at code{regcache_cooked_write_unsigned} are provided, which read or
+write the value using the buffer and convert to or from an integral
+value as appropriate.
+
+ at node Frame Interpretation
+ at section Frame Interpretation
+
+ at menu
+* All About Stack Frames::
+* Frame Handling Terminology::
+* Prologue Caches::
+* Functions and Variable to Analyze Frames::
+* Functions to Access Frame Data::
+* Analyzing Stacks---Frame Sniffers::
+ at end menu
+
+ at node All About Stack Frames
+ at subsection All About Stack Frames
+
+ at value{GDBN} needs to understand the stack on which local (automatic)
+variables are stored.  The area of the stack containing all the local
+variables for a function invocation is known as the @dfn{stack frame}
+for that function (or colloquially just as the @dfn{frame}).  In turn the
+function that called the function will have its stack frame, and so on
+back through the chain of functions that have been called.
+
+Almost all architectures have one register dedicated to point to the
+end of the stack (the @dfn{stack pointer}).  Many have a second register
+which points to the start of the currently active stack frame (the
+ at dfn{frame pointer}).  The specific arrangements for an architecture are
+a key part of the ABI.
+
+A diagram helps to explain this.  Here is a simple program to compute
+factorials:
+
+ at smallexample
+#include <stdio.h>
+int fact (int n)
+@{
+  if (0 == n)
+    @{
+      return 1;
+    @}
+  else
+    @{
+      return n * fact (n - 1);
+    @}
+@}
+
+main ()
+@{
+  int i;
+
+  for (i = 0; i < 10; i++)
+    @{
+      int   f = fact (i);
+      printf ("%d! = %d\n", i, f);
+    @}
+@}
+ at end smallexample
+
+Consider the state of the stack when the code reaches line 6 after the
+main program has called @code{fact at w{ }(3)}.  The chain of function
+calls will be @code{main ()}, @code{fact at w{ }(3)}, @code{fact at w{
+}(2)}, @code{@w{fact (1)}} and @code{fact at w{ }(0)}.
+
+In this illustration the stack is falling (as used for example by the
+OpenRISC 1000 ABI).  The stack pointer (SP) is at the end of the stack
+(lowest address) and the frame pointer (FP) is at the highest address
+in the current stack frame.  The following diagram shows how the stack
+looks.
+
+ at center @image{stack_frame,14cm}
+
+In each stack frame, offset 0 from the stack pointer is the frame
+pointer of the previous frame and offset 4 (this is illustrating a
+32-bit architecture) from the stack pointer is the return address.
+Local variables are indexed from the frame pointer, with negative
+indexes.  In the function @code{fact}, offset -4 from the frame
+pointer is the argument @var{n}.  In the @code{main} function, offset
+-4 from the frame pointer is the local variable @var{i} and offset -8
+from the frame pointer is the local variable @var{f}@footnote{This is
+a simplified example for illustrative purposes only.  Good optimizing
+compilers would not put anything on the stack for such simple
+functions.  Indeed they might eliminate the recursion and use of the
+stack entirely!}.
+
+It is very easy to get confused when examining stacks.  @value{GDBN}
+has terminology it uses rigorously throughout.  The stack frame of the
+function currently executing, or where execution stopped is numbered
+zero.  In this example frame #0 is the stack frame of the call to
+ at code{fact at w{ }(0)}.  The stack frame of its calling function
+(@code{fact at w{ }(1)} in this case) is numbered #1 and so on back
+through the chain of calls.
+
+The main @value{GDBN} data structure describing frames is
+ @code{@w{struct frame_info}}.  It is not used directly, but only via
+its accessor functions.  @code{frame_info} includes information about
+the registers in the frame and a pointer to the code of the function
+with which the frame is associated.  The entire stack is represented as
+a linked list of @code{frame_info} structs.
+
+ at node Frame Handling Terminology
+ at subsection Frame Handling Terminology
+
+It is easy to get confused when referencing stack frames.  @value{GDBN}
+uses some precise terminology.
+
+ at itemize @bullet
+
+ at item
+ at cindex THIS frame
+ at cindex stack frame, definition of THIS frame
+ at cindex frame, definition of THIS frame
+ at dfn{THIS} frame is the frame currently under consideration.
+
+ at item
+ at cindex NEXT frame
+ at cindex stack frame, definition of NEXT frame
+ at cindex frame, definition of NEXT frame
+The @dfn{NEXT} frame, also sometimes called the inner or newer frame is the
+frame of the function called by the function of THIS frame.
+
+ at item
+ at cindex PREVIOUS frame
+ at cindex stack frame, definition of PREVIOUS frame
+ at cindex frame, definition of PREVIOUS frame
+The @dfn{PREVIOUS} frame, also sometimes called the outer or older frame is
+the frame of the function which called the function of THIS frame.
+
+ at end itemize
+
+So in the example in the previous section (@pxref{All About Stack
+Frames, , All About Stack Frames}), if THIS frame is #3 (the call to
+ at code{fact at w{ }(3)}), the NEXT frame is frame #2 (the call to
+ at code{fact at w{ }(2)}) and the PREVIOUS frame is frame #4 (the call to
+ at code{main at w{ }()}).
+
+ at cindex innermost frame
+ at cindex stack frame, definition of innermost frame
+ at cindex frame, definition of innermost frame
+The @dfn{innermost} frame is the frame of the current executing
+function, or where the program stopped, in this example, in the middle
+of the call to @code{@w{fact (0))}}.  It is always numbered frame #0.
+
+ at cindex base of a frame
+ at cindex stack frame, definition of base of a frame
+ at cindex frame, definition of base of a frame
+The @dfn{base} of a frame is the address immediately before the start
+of the NEXT frame.  For a stack which grows down in memory (a
+ at dfn{falling} stack) this will be the lowest address and for a stack
+which grows up in memory (a @dfn{rising} stack) this will be the
+highest address in the frame.
+
+ at value{GDBN} functions to analyze the stack are typically given a
+pointer to the NEXT frame to determine information about THIS
+frame.  Information about THIS frame includes data on where the
+registers of the PREVIOUS frame are stored in this stack frame.  In
+this example the frame pointer of the PREVIOUS frame is stored at
+offset 0 from the stack pointer of THIS frame.
+
+ at cindex unwinding
+ at cindex stack frame, definition of unwinding
+ at cindex frame, definition of unwinding
+The process whereby a function is given a pointer to the NEXT
+frame to work out information about THIS frame is referred to as
+ at dfn{unwinding}.  The @value{GDBN} functions involved in this typically
+include unwind in their name.
+
+ at cindex sniffing
+ at cindex stack frame, definition of sniffing
+ at cindex frame, definition of sniffing
+The process of analyzing a target to determine the information that
+should go in struct frame_info is called @dfn{sniffing}.  The functions
+that carry this out are called sniffers and typically include sniffer
+in their name.  More than one sniffer may be required to extract all
+the information for a particular frame.
+
+ at cindex sentinel frame
+ at cindex stack frame, definition of sentinel frame
+ at cindex frame, definition of sentinel frame
+Because so many functions work using the NEXT frame, there is an issue
+about addressing the innermost frame---it has no NEXT frame.  To solve
+this @value{GDBN} creates a dummy frame #-1, known as the
+ at dfn{sentinel} frame.
+
+ at node Prologue Caches
+ at subsection Prologue Caches
+
+ at cindex function prologue
+ at cindex prologue of a function
+All the frame sniffing functions typically examine the code at the
+start of the corresponding function, to determine the state of
+registers.  The ABI will save old values and set new values of key
+registers at the start of each function in what is known as the
+function @dfn{prologue}.
+
+ at cindex prologue cache
+For any particular stack frame this data does not change, so all the
+standard unwinding functions, in addition to receiving a pointer to
+the NEXT frame as their first argument, receive a pointer to a
+ at dfn{prologue cache} as their second argument.  This can be used to store
+values associated with a particular frame, for reuse on subsequent
+calls involving the same frame.
+
+It is up to the user to define the structure used (it is a
+ at code{void at w{ }*} pointer) and arrange allocation and deallocation of
+storage.  However for general use, @value{GDBN} provides
+ at code{@w{struct trad_frame_cache}}, with a set of accessor
+routines.  This structure holds the stack and code address of
+THIS frame, the base address of the frame, a pointer to the
+struct @code{frame_info} for the NEXT frame and details of
+where the registers of the PREVIOUS frame may be found in THIS
+frame.
+
+Typically the first time any sniffer function is called with NEXT
+frame, the prologue sniffer for THIS frame will be @code{NULL}.  The
+sniffer will analyze the frame, allocate a prologue cache structure
+and populate it.  Subsequent calls using the same NEXT frame will
+pass in this prologue cache, so the data can be returned with no
+additional analysis.
+
+ at node Functions and Variable to Analyze Frames
+ at subsection Functions and Variable to Analyze Frames
+
+These struct @code{gdbarch} functions and variable should be defined
+to provide analysis of the stack frame and allow it to be adjusted as
+required.
+
+ at deftypefn {Architecture Function} CORE_ADDR skip_prologue (struct gdbarch *@var{gdbarch}, CORE_ADDR @var{pc})
+
+The prologue of a function is the code at the beginning of the
+function which sets up the stack frame, saves the return address
+etc.  The code representing the behavior of the function starts after
+the prologue.
+
+This function skips past the prologue of a function if the program
+counter, @var{pc}, is within the prologue of a function.  The result is
+the program counter immediately after the prologue.  With modern
+optimizing compilers, this may be a far from trivial exercise.  However
+the required information may be within the binary as DWARF2 debugging
+information, making the job much easier.
+
+The default value is @code{NULL} (not defined).  This function should always
+be provided, but can take advantage of DWARF2 debugging information,
+if that is available.
+
+ at end deftypefn
+
+ at deftypefn {Architecture Function} int inner_than (CORE_ADDR @var{lhs}, CORE_ADDR @var{rhs})
+ at findex core_addr_lessthan
+ at findex core_addr_greaterthan
+
+Given two frame or stack pointers, return non-zero (true) if the first
+represents the @dfn{inner} stack frame and 0 (false) otherwise.  This
+is used to determine whether the target has a stack which grows up in
+memory (rising stack) or grows down in memory (falling stack).
+ at xref{All About Stack Frames, , All About Stack Frames}, for an
+explanation of @dfn{inner} frames.
+
+The default value of this function is @code{NULL} and it should always
+be defined.  However for almost all architectures one of the built-in
+functions can be used: @code{core_addr_lessthan} (for stacks growing
+down in memory) or @code{core_addr_greaterthan} (for stacks growing up
+in memory).
+
+ at end deftypefn
+
+ at anchor{frame_align}
+ at deftypefn {Architecture Function} CORE_ADDR frame_align (struct gdbarch *@var{gdbarch}, CORE_ADDR @var{address})
+ at findex align_down
+ at findex align_up
+
+The architecture may have constraints on how its frames are
+aligned.  For example the OpenRISC 1000 ABI requires stack frames to be
+double-word aligned, but 32-bit versions of the architecture allocate
+single-word values to the stack.  Thus extra padding may be needed at
+the end of a stack frame.
+
+Given a proposed address for the stack pointer, this function
+returns a suitably aligned address (by expanding the stack frame).
+
+The default value is @code{NULL} (undefined).  This function should be defined
+for any architecture where it is possible the stack could become
+misaligned.  The utility functions @code{align_down} (for falling
+stacks) and @code{align_up} (for rising stacks) will facilitate the
+implementation of this function.
+
+ at end deftypefn
+
+ at deftypevr {Architecture Variable} int frame_red_zone_size
+
+Some ABIs reserve space beyond the end of the stack for use by leaf
+functions without prologue or epilogue or by exception handlers (for
+example the OpenRISC 1000).
+
+This is known as a @dfn{red zone} (AMD terminology).  The @sc{amd64}
+(nee x86-64) ABI documentation refers to the @dfn{red zone} when
+describing this scratch area.
+
+The default value is 0.  Set this field if the architecture has such a
+red zone.  The value must be aligned as required by the ABI (see
+ at code{frame_align} above for an explanation of stack frame alignment).
+
+ at end deftypevr
+
+ at node Functions to Access Frame Data
+ at subsection Functions to Access Frame Data
+
+These functions provide access to key registers and arguments in the
+stack frame.
+
+ at deftypefn {Architecture Function} CORE_ADDR unwind_pc (struct gdbarch *@var{gdbarch}, struct frame_info *@var{next_frame})
+
+This function is given a pointer to the NEXT stack frame (@pxref{All
+About Stack Frames, , All About Stack Frames}, for how frames are
+represented) and returns the value of the program counter in the
+PREVIOUS frame (i.e.@: the frame of the function that called THIS
+one).  This is commonly referred to as the @dfn{return address}.
+
+The implementation, which must be frame agnostic (work with any frame),
+is typically no more than:
+
+ at smallexample
+ULONGEST pc;
+pc = frame_unwind_register_unsigned (next_frame, @var{ARCH}_PC_REGNUM);
+return gdbarch_addr_bits_remove (gdbarch, pc);
+ at end smallexample
+
+ at end deftypefn
+
+ at deftypefn {Architecture Function} CORE_ADDR unwind_sp (struct gdbarch *@var{gdbarch}, struct frame_info *@var{next_frame})
+
+This function is given a pointer to the NEXT stack frame
+(@pxref{All About Stack Frames, , All About Stack Frames} for how
+frames are represented) and returns the value of the stack pointer in
+the PREVIOUS frame (i.e.@: the frame of the function that called
+THIS one).
+
+The implementation, which must be frame agnostic (work with any frame),
+is typically no more than:
+
+ at smallexample
+ULONGEST sp;
+sp = frame_unwind_register_unsigned (next_frame, @var{ARCH}_SP_REGNUM);
+return gdbarch_addr_bits_remove (gdbarch, sp);
+ at end smallexample
+
+ at end deftypefn
+
+ at deftypefn {Architecture Function} int frame_num_args (struct gdbarch *@var{gdbarch}, struct frame_info *@var{this_frame})
+
+This function is given a pointer to THIS stack frame (@pxref{All
+About Stack Frames, , All About Stack Frames} for how frames are
+represented), and returns the number of arguments that are being
+passed, or -1 if not known.
+
+The default value is @code{NULL} (undefined), in which case the number of
+arguments passed on any stack frame is always unknown.  For many
+architectures this will be a suitable default.
+
+ at end deftypefn
+
+ at node Analyzing Stacks---Frame Sniffers
+ at subsection Analyzing Stacks---Frame Sniffers
+
+When a program stops, @value{GDBN} needs to construct the chain of
+struct @code{frame_info} representing the state of the stack using
+appropriate @dfn{sniffers}.
+
+Each architecture requires appropriate sniffers, but they do not form
+entries in @code{@w{struct gdbarch}}, since more than one sniffer may
+be required and a sniffer may be suitable for more than one
+ at code{@w{struct gdbarch}}.  Instead sniffers are associated with
+architectures using the following functions.
+
+ at itemize @bullet
+
+ at item
+ at findex frame_unwind_append_sniffer
+ at code{frame_unwind_append_sniffer} is used to add a new sniffer to
+analyze THIS frame when given a pointer to the NEXT frame.
+
+ at item
+ at findex frame_base_append_sniffer
+ at code{frame_base_append_sniffer} is used to add a new sniffer
+which can determine information about the base of a stack frame.
+
+ at item
+ at findex frame_base_set_default
+ at code{frame_base_set_default} is used to specify the default base
+sniffer.
+
+ at end itemize
+
+These functions all take a reference to @code{@w{struct gdbarch}}, so
+they are associated with a specific architecture.  They are usually
+called in the @code{gdbarch} initialization function, after the
+ at code{gdbarch} struct has been set up.  Unless a default has been set, the
+most recently appended sniffer will be tried first.
+
+The main frame unwinding sniffer (as set by
+ at code{frame_unwind_append_sniffer)} returns a structure specifying
+a set of sniffing functions:
+
+ at cindex @code{frame_unwind}
+ at smallexample
+struct frame_unwind
+@{
+   enum frame_type            type;
+   frame_this_id_ftype       *this_id;
+   frame_prev_register_ftype *prev_register;
+   const struct frame_data   *unwind_data;
+   frame_sniffer_ftype       *sniffer;
+   frame_prev_pc_ftype       *prev_pc;
+   frame_dealloc_cache_ftype *dealloc_cache;
+@};
+ at end smallexample
+
+The @code{type} field indicates the type of frame this sniffer can
+handle: normal, dummy (@pxref{Functions Creating Dummy Frames, ,
+Functions Creating Dummy Frames}), signal handler or sentinel.  Signal
+handlers sometimes have their own simplified stack structure for
+efficiency, so may need their own handlers.
+
+The @code{unwind_data} field holds additional information which may be
+relevant to particular types of frame.  For example it may hold
+additional information for signal handler frames.
+
+The remaining fields define functions that yield different types of
+information when given a pointer to the NEXT stack frame.  Not all
+functions need be provided.  If an entry is @code{NULL}, the next sniffer will
+be tried instead.
+
+ at itemize @bullet
+
+ at item
+ at code{this_id} determines the stack pointer and function (code
+entry point) for THIS stack frame.
+
+ at item
+ at code{prev_register} determines where the values of registers for
+the PREVIOUS stack frame are stored in THIS stack frame.
+
+ at item
+ at code{sniffer} takes a look at THIS frame's registers to
+determine if this is the appropriate unwinder.
+
+ at item
+ at code{prev_pc} determines the program counter for THIS
+frame.  Only needed if the program counter is not an ordinary register
+(@pxref{Register Architecture Functions & Variables,
+, Functions and Variables Specifying the Register Architecture}).
+
+ at item
+ at code{dealloc_cache} frees any additional memory associated with
+the prologue cache for this frame (@pxref{Prologue Caches, , Prologue
+Caches}).
+
+ at end itemize
+
+In general it is only the @code{this_id} and @code{prev_register}
+fields that need be defined for custom sniffers.
+
+The frame base sniffer is much simpler.  It is a @code{@w{struct
+frame_base}}, which refers to the corresponding @code{frame_unwind}
+struct and whose fields refer to functions yielding various addresses
+within the frame.
+
+ at cindex @code{frame_base}
+ at smallexample
+struct frame_base
+@{
+   const struct frame_unwind *unwind;
+   frame_this_base_ftype     *this_base;
+   frame_this_locals_ftype   *this_locals;
+   frame_this_args_ftype     *this_args;
+@};
+ at end smallexample
+
+All the functions referred to take a pointer to the NEXT frame as
+argument. The function referred to by @code{this_base} returns the
+base address of THIS frame, the function referred to by
+ at code{this_locals} returns the base address of local variables in THIS
+frame and the function referred to by @code{this_args} returns the
+base address of the function arguments in this frame.
+
+As described above, the base address of a frame is the address
+immediately before the start of the NEXT frame.  For a falling
+stack, this is the lowest address in the frame and for a rising stack
+it is the highest address in the frame.  For most architectures the
+same address is also the base address for local variables and
+arguments, in which case the same function can be used for all three
+entries at footnote{It is worth noting that if it cannot be determined in any
+other way (for example by there being a register with the name
+ at code{"fp"}), then the result of the @code{this_base} function will be
+used as the value of the frame pointer variable @kbd{$fp} in
+ at value{GDBN}.  This is very often not correct (for example with the
+OpenRISC 1000, this value is the stack pointer, @kbd{$sp}).  In this
+case a register (raw or pseudo) with the name @code{"fp"} should be
+defined.  It will be used in preference as the value of @kbd{$fp}.}.
+
+ at node Inferior Call Setup
+ at section Inferior Call Setup
+ at cindex calls to the inferior
+
+ at menu
+* About Dummy Frames::
+* Functions Creating Dummy Frames::
+ at end menu
+
+ at node About Dummy Frames
+ at subsection About Dummy Frames
+ at cindex dummy frames
+
+ at value{GDBN} can call functions in the target code (for example by
+using the @kbd{call} or @kbd{print} commands).  These functions may be
+breakpointed, and it is essential that if a function does hit a
+breakpoint, commands like @kbd{backtrace} work correctly.
+
+This is achieved by making the stack look as though the function had
+been called from the point where @value{GDBN} had previously stopped.
+This requires that @value{GDBN} can set up stack frames appropriate for
+such function calls.
+
+ at node Functions Creating Dummy Frames
+ at subsection Functions Creating Dummy Frames
+
+The following functions provide the functionality to set up such
+ at dfn{dummy} stack frames.
+
+ at deftypefn {Architecture Function} CORE_ADDR push_dummy_call (struct gdbarch *@var{gdbarch}, struct value *@var{function}, struct regcache *@var{regcache}, CORE_ADDR @var{bp_addr}, int  @var{nargs}, struct value **@var{args}, CORE_ADDR @var{sp}, int  @var{struct_return}, CORE_ADDR @var{struct_addr})
+
+This function sets up a dummy stack frame for the function about to be
+called.  @code{push_dummy_call} is given the arguments to be passed
+and must copy them into registers or push them on to the stack as
+appropriate for the ABI.
+
+ at var{function} is a pointer to the function
+that will be called and @var{regcache} the register cache from which
+values should be obtained.  @var{bp_addr} is the address to which the
+function should return (which is breakpointed, so @value{GDBN} can
+regain control, hence the name).  @var{nargs} is the number of
+arguments to pass and @var{args} an array containing the argument
+values.  @var{struct_return} is non-zero (true) if the function returns
+a structure, and if so @var{struct_addr} is the address in which the
+structure should be returned.
+
+ After calling this function, @value{GDBN} will pass control to the
+target at the address of the function, which will find the stack and
+registers set up just as expected.
+
+The default value of this function is @code{NULL} (undefined).  If the
+function is not defined, then @value{GDBN} will not allow the user to
+call functions within the target being debugged.
+
+ at end deftypefn
+
+ at deftypefn {Architecture Function} {struct frame_id} unwind_dummy_id (struct gdbarch *@var{gdbarch}, struct frame_info *@var{next_frame}) 
+
+This is the inverse of @code{push_dummy_call} which restores the stack
+pointer and program counter after a call to evaluate a function using
+a dummy stack frame.  The result is a @code{@w{struct frame_id}}, which
+contains the value of the stack pointer and program counter to be
+used.
+
+The NEXT frame pointer is provided as argument,
+ at var{next_frame}.  THIS frame is the frame of the dummy function,
+which can be unwound, to yield the required stack pointer and program
+counter from the PREVIOUS frame.
+
+The default value is @code{NULL} (undefined).  If @code{push_dummy_call} is
+defined, then this function should also be defined.
+
+ at end deftypefn
+
+ at deftypefn {Architecture Function} CORE_ADDR push_dummy_code (struct gdbarch *@var{gdbarch}, CORE_ADDR @var{sp}, CORE_ADDR @var{funaddr}, struct value **@var{args}, int  @var{nargs}, struct type *@var{value_type}, CORE_ADDR *@var{real_pc}, CORE_ADDR *@var{bp_addr}, struct regcache *@var{regcache})
+
+If this function is not defined (its default value is @code{NULL}), a dummy
+call will use the entry point of the currently loaded code on the
+target as its return address.  A temporary breakpoint will be set
+there, so the location must be writable and have room for a
+breakpoint.
+
+It is possible that this default is not suitable.  It might not be
+writable (in ROM possibly), or the ABI might require code to be
+executed on return from a call to unwind the stack before the
+breakpoint is encountered.
+
+If either of these is the case, then push_dummy_code should be defined
+to push an instruction sequence onto the end of the stack to which the
+dummy call should return.
+
+The arguments are essentially the same as those to
+ at code{push_dummy_call}.  However the function is provided with the
+type of the function result, @var{value_type}, @var{bp_addr} is used
+to return a value (the address at which the breakpoint instruction
+should be inserted) and @var{real pc} is used to specify the resume
+address when starting the call sequence.  The function should return
+the updated innermost stack address.
+
+ at quotation
+ at emph{Note:} This does require that code in the stack can be executed.
+Some Harvard architectures may not allow this.
+ at end quotation
+
+ at end deftypefn
+
+ at node Adding support for debugging core files
+ at section Adding support for debugging core files
+ at cindex core files
+
+The prerequisite for adding core file support in @value{GDBN} is to have
+core file support in BFD.
+
+Once BFD support is available, writing the apropriate
+ at code{regset_from_core_section} architecture function should be all
+that is needed in order to add support for core files in @value{GDBN}.
+
+ at node Defining Other Architecture Features 
+ at section Defining Other Architecture Features 
+
+This section describes other functions and values in @code{gdbarch},
+together with some useful macros, that you can use to define the
+target architecture.
+
+ at table @code
+
+ at item CORE_ADDR gdbarch_addr_bits_remove (@var{gdbarch}, @var{addr})
+ at findex gdbarch_addr_bits_remove
+If a raw machine instruction address includes any bits that are not
+really part of the address, then this function is used to zero those bits in
+ at var{addr}.  This is only used for addresses of instructions, and even then not
+in all contexts.
+
+For example, the two low-order bits of the PC on the Hewlett-Packard PA
+2.0 architecture contain the privilege level of the corresponding
+instruction.  Since instructions must always be aligned on four-byte
+boundaries, the processor masks out these bits to generate the actual
+address of the instruction.  @code{gdbarch_addr_bits_remove} would then for
+example look like that:
+ at smallexample
+arch_addr_bits_remove (CORE_ADDR addr)
+@{
+  return (addr &= ~0x3);
+@}
+ at end smallexample
+
+ at item int address_class_name_to_type_flags (@var{gdbarch}, @var{name}, @var{type_flags_ptr})
+ at findex address_class_name_to_type_flags
+If @var{name} is a valid address class qualifier name, set the @code{int}
+referenced by @var{type_flags_ptr} to the mask representing the qualifier
+and return 1.  If @var{name} is not a valid address class qualifier name,
+return 0.
+
+The value for @var{type_flags_ptr} should be one of
+ at code{TYPE_FLAG_ADDRESS_CLASS_1}, @code{TYPE_FLAG_ADDRESS_CLASS_2}, or
+possibly some combination of these values or'd together.
+ at xref{Target Architecture Definition, , Address Classes}.
+
+ at item int address_class_name_to_type_flags_p (@var{gdbarch})
+ at findex address_class_name_to_type_flags_p
+Predicate which indicates whether @code{address_class_name_to_type_flags}
+has been defined.
+
+ at item int gdbarch_address_class_type_flags (@var{gdbarch}, @var{byte_size}, @var{dwarf2_addr_class})
+ at findex gdbarch_address_class_type_flags
+Given a pointers byte size (as described by the debug information) and
+the possible @code{DW_AT_address_class} value, return the type flags
+used by @value{GDBN} to represent this address class.  The value
+returned should be one of @code{TYPE_FLAG_ADDRESS_CLASS_1},
+ at code{TYPE_FLAG_ADDRESS_CLASS_2}, or possibly some combination of these
+values or'd together.
+ at xref{Target Architecture Definition, , Address Classes}.
+
+ at item int gdbarch_address_class_type_flags_p (@var{gdbarch})
+ at findex gdbarch_address_class_type_flags_p
+Predicate which indicates whether @code{gdbarch_address_class_type_flags_p} has
+been defined.
+
+ at item const char *gdbarch_address_class_type_flags_to_name (@var{gdbarch}, @var{type_flags})
+ at findex gdbarch_address_class_type_flags_to_name
+Return the name of the address class qualifier associated with the type
+flags given by @var{type_flags}.
+
+ at item int gdbarch_address_class_type_flags_to_name_p (@var{gdbarch})
+ at findex gdbarch_address_class_type_flags_to_name_p
+Predicate which indicates whether @code{gdbarch_address_class_type_flags_to_name} has been defined.
+ at xref{Target Architecture Definition, , Address Classes}.
+
+ at item void gdbarch_address_to_pointer (@var{gdbarch}, @var{type}, @var{buf}, @var{addr})
+ at findex gdbarch_address_to_pointer
+Store in @var{buf} a pointer of type @var{type} representing the address
+ at var{addr}, in the appropriate format for the current architecture.
+This function may safely assume that @var{type} is either a pointer or a
+C at t{++} reference type.
+ at xref{Target Architecture Definition, , Pointers Are Not Always Addresses}.
+
+ at item int gdbarch_believe_pcc_promotion (@var{gdbarch})
+ at findex gdbarch_believe_pcc_promotion
+Used to notify if the compiler promotes a @code{short} or @code{char}
+parameter to an @code{int}, but still reports the parameter as its
+original type, rather than the promoted type.
+
+ at item gdbarch_bits_big_endian (@var{gdbarch})
+ at findex gdbarch_bits_big_endian
+This is used if the numbering of bits in the targets does @strong{not} match
+the endianism of the target byte order.  A value of 1 means that the bits
+are numbered in a big-endian bit order, 0 means little-endian.
+
+ at item set_gdbarch_bits_big_endian (@var{gdbarch}, @var{bits_big_endian})
+ at findex set_gdbarch_bits_big_endian
+Calling set_gdbarch_bits_big_endian with a value of 1 indicates that the
+bits in the target are numbered in a big-endian bit order, 0 indicates
+little-endian.
+
+ at item BREAKPOINT
+ at findex BREAKPOINT
+This is the character array initializer for the bit pattern to put into
+memory where a breakpoint is set.  Although it's common to use a trap
+instruction for a breakpoint, it's not required; for instance, the bit
+pattern could be an invalid instruction.  The breakpoint must be no
+longer than the shortest instruction of the architecture.
+
+ at code{BREAKPOINT} has been deprecated in favor of
+ at code{gdbarch_breakpoint_from_pc}.
+
+ at item BIG_BREAKPOINT
+ at itemx LITTLE_BREAKPOINT
+ at findex LITTLE_BREAKPOINT
+ at findex BIG_BREAKPOINT
+Similar to BREAKPOINT, but used for bi-endian targets.
+
+ at code{BIG_BREAKPOINT} and @code{LITTLE_BREAKPOINT} have been deprecated in
+favor of @code{gdbarch_breakpoint_from_pc}.
+
+ at item const gdb_byte *gdbarch_breakpoint_from_pc (@var{gdbarch}, @var{pcptr}, @var{lenptr})
+ at findex gdbarch_breakpoint_from_pc
+ at anchor{gdbarch_breakpoint_from_pc} Use the program counter to determine the
+contents and size of a breakpoint instruction.  It returns a pointer to
+a static string of bytes that encode a breakpoint instruction, stores the
+length of the string to @code{*@var{lenptr}}, and adjusts the program
+counter (if necessary) to point to the actual memory location where the
+breakpoint should be inserted.  May return @code{NULL} to indicate that
+software breakpoints are not supported.
+
+Although it is common to use a trap instruction for a breakpoint, it's
+not required; for instance, the bit pattern could be an invalid
+instruction.  The breakpoint must be no longer than the shortest
+instruction of the architecture.
+
+Provided breakpoint bytes can be also used by @code{bp_loc_is_permanent} to
+detect permanent breakpoints.  @code{gdbarch_breakpoint_from_pc} should return
+an unchanged memory copy if it was called for a location with permanent
+breakpoint as some architectures use breakpoint instructions containing
+arbitrary parameter value.
+
+Replaces all the other @var{BREAKPOINT} macros.
+
+ at item int gdbarch_memory_insert_breakpoint (@var{gdbarch}, @var{bp_tgt})
+ at itemx gdbarch_memory_remove_breakpoint (@var{gdbarch}, @var{bp_tgt})
+ at findex gdbarch_memory_remove_breakpoint
+ at findex gdbarch_memory_insert_breakpoint
+Insert or remove memory based breakpoints.  Reasonable defaults
+(@code{default_memory_insert_breakpoint} and
+ at code{default_memory_remove_breakpoint} respectively) have been
+provided so that it is not necessary to set these for most
+architectures.  Architectures which may want to set
+ at code{gdbarch_memory_insert_breakpoint} and @code{gdbarch_memory_remove_breakpoint} will likely have instructions that are oddly sized or are not stored in a
+conventional manner.
+
+It may also be desirable (from an efficiency standpoint) to define
+custom breakpoint insertion and removal routines if
+ at code{gdbarch_breakpoint_from_pc} needs to read the target's memory for some
+reason.
+
+ at item CORE_ADDR gdbarch_adjust_breakpoint_address (@var{gdbarch}, @var{bpaddr})
+ at findex gdbarch_adjust_breakpoint_address
+ at cindex breakpoint address adjusted
+Given an address at which a breakpoint is desired, return a breakpoint
+address adjusted to account for architectural constraints on
+breakpoint placement.  This method is not needed by most targets.
+
+The FR-V target (see @file{frv-tdep.c}) requires this method.
+The FR-V is a VLIW architecture in which a number of RISC-like
+instructions are grouped (packed) together into an aggregate
+instruction or instruction bundle.  When the processor executes
+one of these bundles, the component instructions are executed
+in parallel.
+
+In the course of optimization, the compiler may group instructions
+from distinct source statements into the same bundle.  The line number
+information associated with one of the latter statements will likely
+refer to some instruction other than the first one in the bundle.  So,
+if the user attempts to place a breakpoint on one of these latter
+statements, @value{GDBN} must be careful to @emph{not} place the break
+instruction on any instruction other than the first one in the bundle.
+(Remember though that the instructions within a bundle execute
+in parallel, so the @emph{first} instruction is the instruction
+at the lowest address and has nothing to do with execution order.)
+
+The FR-V's @code{gdbarch_adjust_breakpoint_address} method will adjust a
+breakpoint's address by scanning backwards for the beginning of
+the bundle, returning the address of the bundle.
+
+Since the adjustment of a breakpoint may significantly alter a user's
+expectation, @value{GDBN} prints a warning when an adjusted breakpoint
+is initially set and each time that that breakpoint is hit.
+
+ at item int gdbarch_call_dummy_location (@var{gdbarch})
+ at findex gdbarch_call_dummy_location
+See the file @file{inferior.h}.
+
+This method has been replaced by @code{gdbarch_push_dummy_code}
+(@pxref{gdbarch_push_dummy_code}).
+
+ at item int gdbarch_cannot_fetch_register (@var{gdbarch}, @var{regum})
+ at findex gdbarch_cannot_fetch_register
+This function should return nonzero if @var{regno} cannot be fetched
+from an inferior process.
+
+ at item int gdbarch_cannot_store_register (@var{gdbarch}, @var{regnum})
+ at findex gdbarch_cannot_store_register
+This function should return nonzero if @var{regno} should not be
+written to the target.  This is often the case for program counters,
+status words, and other special registers.  This function returns 0 as
+default so that @value{GDBN} will assume that all registers may be written.
+
+ at item int gdbarch_convert_register_p (@var{gdbarch}, @var{regnum}, struct type *@var{type})
+ at findex gdbarch_convert_register_p
+Return non-zero if register @var{regnum} represents data values of type
+ at var{type} in a non-standard form.
+ at xref{Target Architecture Definition, , Using Different Register and Memory Data Representations}.
+
+ at item int gdbarch_fp0_regnum (@var{gdbarch})
+ at findex gdbarch_fp0_regnum
+This function returns the number of the first floating point register,
+if the machine has such registers.  Otherwise, it returns -1.
+
+ at item CORE_ADDR gdbarch_decr_pc_after_break (@var{gdbarch})
+ at findex gdbarch_decr_pc_after_break
+This function shall return the amount by which to decrement the PC after the
+program encounters a breakpoint.  This is often the number of bytes in
+ at code{BREAKPOINT}, though not always.  For most targets this value will be 0.
+
+ at item DISABLE_UNSETTABLE_BREAK (@var{addr})
+ at findex DISABLE_UNSETTABLE_BREAK
+If defined, this should evaluate to 1 if @var{addr} is in a shared
+library in which breakpoints cannot be set and so should be disabled.
+
+ at item int gdbarch_dwarf2_reg_to_regnum (@var{gdbarch}, @var{dwarf2_regnr})
+ at findex gdbarch_dwarf2_reg_to_regnum
+Convert DWARF2 register number @var{dwarf2_regnr} into @value{GDBN} regnum.
+If not defined, no conversion will be performed.
+
+ at item int gdbarch_ecoff_reg_to_regnum (@var{gdbarch}, @var{ecoff_regnr})
+ at findex gdbarch_ecoff_reg_to_regnum
+Convert ECOFF register number  @var{ecoff_regnr} into @value{GDBN} regnum.  If
+not defined, no conversion will be performed.
+
+ at item GCC_COMPILED_FLAG_SYMBOL
+ at itemx GCC2_COMPILED_FLAG_SYMBOL
+ at findex GCC2_COMPILED_FLAG_SYMBOL
+ at findex GCC_COMPILED_FLAG_SYMBOL
+If defined, these are the names of the symbols that @value{GDBN} will
+look for to detect that GCC compiled the file.  The default symbols
+are @code{gcc_compiled.} and @code{gcc2_compiled.},
+respectively.  (Currently only defined for the Delta 68.)
+
+ at item gdbarch_get_longjmp_target
+ at findex gdbarch_get_longjmp_target
+This function determines the target PC address that @code{longjmp}
+will jump to, assuming that we have just stopped at a @code{longjmp}
+breakpoint.  It takes a @code{CORE_ADDR *} as argument, and stores the
+target PC value through this pointer.  It examines the current state
+of the machine as needed, typically by using a manually-determined
+offset into the @code{jmp_buf}.  (While we might like to get the offset
+from the target's @file{jmpbuf.h}, that header file cannot be assumed
+to be available when building a cross-debugger.)
+
+ at item DEPRECATED_IBM6000_TARGET
+ at findex DEPRECATED_IBM6000_TARGET
+Shows that we are configured for an IBM RS/6000 system.  This
+conditional should be eliminated (FIXME) and replaced by
+feature-specific macros.  It was introduced in haste and we are
+repenting at leisure.
+
+ at item I386_USE_GENERIC_WATCHPOINTS
+An x86-based target can define this to use the generic x86 watchpoint
+support; see @ref{Algorithms, I386_USE_GENERIC_WATCHPOINTS}.
+
+ at item gdbarch_in_function_epilogue_p (@var{gdbarch}, @var{addr})
+ at findex gdbarch_in_function_epilogue_p
+Returns non-zero if the given @var{addr} is in the epilogue of a function.
+The epilogue of a function is defined as the part of a function where
+the stack frame of the function already has been destroyed up to the
+final `return from function call' instruction.
+
+ at item int gdbarch_in_solib_return_trampoline (@var{gdbarch}, @var{pc}, @var{name})
+ at findex gdbarch_in_solib_return_trampoline
+Define this function to return nonzero if the program is stopped in the
+trampoline that returns from a shared library.
+
+ at item target_so_ops.in_dynsym_resolve_code (@var{pc})
+ at findex in_dynsym_resolve_code
+Define this to return nonzero if the program is stopped in the
+dynamic linker.
+
+ at item SKIP_SOLIB_RESOLVER (@var{pc})
+ at findex SKIP_SOLIB_RESOLVER
+Define this to evaluate to the (nonzero) address at which execution
+should continue to get past the dynamic linker's symbol resolution
+function.  A zero value indicates that it is not important or necessary
+to set a breakpoint to get through the dynamic linker and that single
+stepping will suffice.
+
+ at item CORE_ADDR gdbarch_integer_to_address (@var{gdbarch}, @var{type}, @var{buf})
+ at findex gdbarch_integer_to_address
+ at cindex converting integers to addresses
+Define this when the architecture needs to handle non-pointer to address
+conversions specially.  Converts that value to an address according to
+the current architectures conventions.
+
+ at emph{Pragmatics: When the user copies a well defined expression from
+their source code and passes it, as a parameter, to @value{GDBN}'s
+ at code{print} command, they should get the same value as would have been
+computed by the target program.  Any deviation from this rule can cause
+major confusion and annoyance, and needs to be justified carefully.  In
+other words, @value{GDBN} doesn't really have the freedom to do these
+conversions in clever and useful ways.  It has, however, been pointed
+out that users aren't complaining about how @value{GDBN} casts integers
+to pointers; they are complaining that they can't take an address from a
+disassembly listing and give it to @code{x/i}.  Adding an architecture
+method like @code{gdbarch_integer_to_address} certainly makes it possible for
+ at value{GDBN} to ``get it right'' in all circumstances.}
+
+ at xref{Target Architecture Definition, , Pointers Are Not Always
+Addresses}.
+
+ at item CORE_ADDR gdbarch_pointer_to_address (@var{gdbarch}, @var{type}, @var{buf})
+ at findex gdbarch_pointer_to_address
+Assume that @var{buf} holds a pointer of type @var{type}, in the
+appropriate format for the current architecture.  Return the byte
+address the pointer refers to.
+ at xref{Target Architecture Definition, , Pointers Are Not Always Addresses}.
+
+ at item void gdbarch_register_to_value(@var{gdbarch}, @var{frame}, @var{regnum}, @var{type}, @var{fur})
+ at findex gdbarch_register_to_value
+Convert the raw contents of register @var{regnum} into a value of type
+ at var{type}.
+ at xref{Target Architecture Definition, , Using Different Register and Memory Data Representations}.
+
+ at item REGISTER_CONVERT_TO_VIRTUAL(@var{reg}, @var{type}, @var{from}, @var{to})
+ at findex REGISTER_CONVERT_TO_VIRTUAL
+Convert the value of register @var{reg} from its raw form to its virtual
+form.
+ at xref{Target Architecture Definition, , Raw and Virtual Register Representations}.
+
+ at item REGISTER_CONVERT_TO_RAW(@var{type}, @var{reg}, @var{from}, @var{to})
+ at findex REGISTER_CONVERT_TO_RAW
+Convert the value of register @var{reg} from its virtual form to its raw
+form.
+ at xref{Target Architecture Definition, , Raw and Virtual Register Representations}.
+
+ at item const struct regset *regset_from_core_section (struct gdbarch * @var{gdbarch}, const char * @var{sect_name}, size_t @var{sect_size})
+ at findex regset_from_core_section
+Return the appropriate register set for a core file section with name
+ at var{sect_name} and size @var{sect_size}.
+
+ at item SOFTWARE_SINGLE_STEP_P()
+ at findex SOFTWARE_SINGLE_STEP_P
+Define this as 1 if the target does not have a hardware single-step
+mechanism.  The macro @code{SOFTWARE_SINGLE_STEP} must also be defined.
+
+ at item SOFTWARE_SINGLE_STEP(@var{signal}, @var{insert_breakpoints_p})
+ at findex SOFTWARE_SINGLE_STEP
+A function that inserts or removes (depending on
+ at var{insert_breakpoints_p}) breakpoints at each possible destinations of
+the next instruction.  See @file{sparc-tdep.c} and @file{rs6000-tdep.c}
+for examples.
+
+ at item set_gdbarch_sofun_address_maybe_missing (@var{gdbarch}, @var{set})
+ at findex set_gdbarch_sofun_address_maybe_missing
+Somebody clever observed that, the more actual addresses you have in the
+debug information, the more time the linker has to spend relocating
+them.  So whenever there's some other way the debugger could find the
+address it needs, you should omit it from the debug info, to make
+linking faster.
+
+Calling @code{set_gdbarch_sofun_address_maybe_missing} with a non-zero
+argument @var{set} indicates that a particular set of hacks of this sort
+are in use, affecting @code{N_SO} and @code{N_FUN} entries in stabs-format
+debugging information.  @code{N_SO} stabs mark the beginning and ending
+addresses of compilation units in the text segment.  @code{N_FUN} stabs
+mark the starts and ends of functions.
+
+In this case, @value{GDBN} assumes two things:
+
+ at itemize @bullet
+ at item
+ at code{N_FUN} stabs have an address of zero.  Instead of using those
+addresses, you should find the address where the function starts by
+taking the function name from the stab, and then looking that up in the
+minsyms (the linker/assembler symbol table).  In other words, the stab
+has the name, and the linker/assembler symbol table is the only place
+that carries the address.
+
+ at item
+ at code{N_SO} stabs have an address of zero, too.  You just look at the
+ at code{N_FUN} stabs that appear before and after the @code{N_SO} stab, and
+guess the starting and ending addresses of the compilation unit from them.
+ at end itemize
+
+ at item int gdbarch_stabs_argument_has_addr (@var{gdbarch}, @var{type})
+ at findex gdbarch_stabs_argument_has_addr
+ at anchor{gdbarch_stabs_argument_has_addr} Define this function to return
+nonzero if a function argument of type @var{type} is passed by reference
+instead of value.
+
+ at item CORE_ADDR gdbarch_push_dummy_call (@var{gdbarch}, @var{function}, @var{regcache}, @var{bp_addr}, @var{nargs}, @var{args}, @var{sp}, @var{struct_return}, @var{struct_addr})
+ at findex gdbarch_push_dummy_call
+ at anchor{gdbarch_push_dummy_call} Define this to push the dummy frame's call to
+the inferior function onto the stack.  In addition to pushing @var{nargs}, the
+code should push @var{struct_addr} (when @var{struct_return} is non-zero), and
+the return address (@var{bp_addr}).
+
+ at var{function} is a pointer to a @code{struct value}; on architectures that use
+function descriptors, this contains the function descriptor value.
+
+Returns the updated top-of-stack pointer.
+
+ at item CORE_ADDR gdbarch_push_dummy_code (@var{gdbarch}, @var{sp}, @var{funaddr}, @var{using_gcc}, @var{args}, @var{nargs}, @var{value_type}, @var{real_pc}, @var{bp_addr}, @var{regcache})
+ at findex gdbarch_push_dummy_code
+ at anchor{gdbarch_push_dummy_code} Given a stack based call dummy, push the
+instruction sequence (including space for a breakpoint) to which the
+called function should return.
+
+Set @var{bp_addr} to the address at which the breakpoint instruction
+should be inserted, @var{real_pc} to the resume address when starting
+the call sequence, and return the updated inner-most stack address.
+
+By default, the stack is grown sufficient to hold a frame-aligned
+(@pxref{frame_align}) breakpoint, @var{bp_addr} is set to the address
+reserved for that breakpoint, and @var{real_pc} set to @var{funaddr}.
+
+This method replaces @w{@code{gdbarch_call_dummy_location (@var{gdbarch})}}.
+
+ at item int gdbarch_sdb_reg_to_regnum (@var{gdbarch}, @var{sdb_regnr})
+ at findex gdbarch_sdb_reg_to_regnum
+Use this function to convert sdb register @var{sdb_regnr} into @value{GDBN}
+regnum.  If not defined, no conversion will be done.
+
+ at item enum return_value_convention gdbarch_return_value (struct gdbarch *@var{gdbarch}, struct type *@var{valtype}, struct regcache *@var{regcache}, void *@var{readbuf}, const void *@var{writebuf})
+ at findex gdbarch_return_value
+ at anchor{gdbarch_return_value} Given a function with a return-value of
+type @var{rettype}, return which return-value convention that function
+would use.
+
+ at value{GDBN} currently recognizes two function return-value conventions:
+ at code{RETURN_VALUE_REGISTER_CONVENTION} where the return value is found
+in registers; and @code{RETURN_VALUE_STRUCT_CONVENTION} where the return
+value is found in memory and the address of that memory location is
+passed in as the function's first parameter.
+
+If the register convention is being used, and @var{writebuf} is
+non- at code{NULL}, also copy the return-value in @var{writebuf} into
+ at var{regcache}.
+
+If the register convention is being used, and @var{readbuf} is
+non- at code{NULL}, also copy the return value from @var{regcache} into
+ at var{readbuf} (@var{regcache} contains a copy of the registers from the
+just returned function).
+
+ at emph{Maintainer note: This method replaces separate predicate, extract,
+store methods.  By having only one method, the logic needed to determine
+the return-value convention need only be implemented in one place.  If
+ at value{GDBN} were written in an @sc{oo} language, this method would
+instead return an object that knew how to perform the register
+return-value extract and store.}
+
+ at emph{Maintainer note: This method does not take a @var{gcc_p}
+parameter, and such a parameter should not be added.  If an architecture
+that requires per-compiler or per-function information be identified,
+then the replacement of @var{rettype} with @code{struct value}
+ at var{function} should be pursued.}
+
+ at emph{Maintainer note: The @var{regcache} parameter limits this methods
+to the inner most frame.  While replacing @var{regcache} with a
+ at code{struct frame_info} @var{frame} parameter would remove that
+limitation there has yet to be a demonstrated need for such a change.}
+
+ at item void gdbarch_skip_permanent_breakpoint (@var{gdbarch}, @var{regcache})
+ at findex gdbarch_skip_permanent_breakpoint
+Advance the inferior's PC past a permanent breakpoint.  @value{GDBN} normally
+steps over a breakpoint by removing it, stepping one instruction, and
+re-inserting the breakpoint.  However, permanent breakpoints are
+hardwired into the inferior, and can't be removed, so this strategy
+doesn't work.  Calling @code{gdbarch_skip_permanent_breakpoint} adjusts the
+processor's state so that execution will resume just after the breakpoint.
+This function does the right thing even when the breakpoint is in the delay slot
+of a branch or jump.
+
+ at item CORE_ADDR gdbarch_skip_trampoline_code (@var{gdbarch}, @var{frame}, @var{pc})
+ at findex gdbarch_skip_trampoline_code
+If the target machine has trampoline code that sits between callers and
+the functions being called, then define this function to return a new PC
+that is at the start of the real function.
+
+ at item int gdbarch_deprecated_fp_regnum (@var{gdbarch})
+ at findex gdbarch_deprecated_fp_regnum
+If the frame pointer is in a register, use this function to return the
+number of that register.
+
+ at item int gdbarch_stab_reg_to_regnum (@var{gdbarch}, @var{stab_regnr})
+ at findex gdbarch_stab_reg_to_regnum
+Use this function to convert stab register @var{stab_regnr} into @value{GDBN}
+regnum.  If not defined, no conversion will be done.
+
+ at item TARGET_CHAR_BIT
+ at findex TARGET_CHAR_BIT
+Number of bits in a char; defaults to 8.
+
+ at item int gdbarch_char_signed (@var{gdbarch})
+ at findex gdbarch_char_signed
+Non-zero if @code{char} is normally signed on this architecture; zero if
+it should be unsigned.
+
+The ISO C standard requires the compiler to treat @code{char} as
+equivalent to either @code{signed char} or @code{unsigned char}; any
+character in the standard execution set is supposed to be positive.
+Most compilers treat @code{char} as signed, but @code{char} is unsigned
+on the IBM S/390, RS6000, and PowerPC targets.
+
+ at item int gdbarch_double_bit (@var{gdbarch})
+ at findex gdbarch_double_bit
+Number of bits in a double float; defaults to @w{@code{8 * TARGET_CHAR_BIT}}.
+
+ at item int gdbarch_float_bit (@var{gdbarch})
+ at findex gdbarch_float_bit
+Number of bits in a float; defaults to @w{@code{4 * TARGET_CHAR_BIT}}.
+
+ at item int gdbarch_int_bit (@var{gdbarch})
+ at findex gdbarch_int_bit
+Number of bits in an integer; defaults to @w{@code{4 * TARGET_CHAR_BIT}}.
+
+ at item int gdbarch_long_bit (@var{gdbarch})
+ at findex gdbarch_long_bit
+Number of bits in a long integer; defaults to @w{@code{4 * TARGET_CHAR_BIT}}.
+
+ at item int gdbarch_long_double_bit (@var{gdbarch})
+ at findex gdbarch_long_double_bit
+Number of bits in a long double float;
+defaults to @w{@code{2 * gdbarch_double_bit (@var{gdbarch})}}.
+
+ at item int gdbarch_long_long_bit (@var{gdbarch})
+ at findex gdbarch_long_long_bit
+Number of bits in a long long integer; defaults to
+ at w{@code{2 * gdbarch_long_bit (@var{gdbarch})}}.
+
+ at item int gdbarch_ptr_bit (@var{gdbarch})
+ at findex gdbarch_ptr_bit
+Number of bits in a pointer; defaults to
+ at w{@code{gdbarch_int_bit (@var{gdbarch})}}.
+
+ at item int gdbarch_short_bit (@var{gdbarch})
+ at findex gdbarch_short_bit
+Number of bits in a short integer; defaults to @w{@code{2 * TARGET_CHAR_BIT}}.
+
+ at item void gdbarch_virtual_frame_pointer (@var{gdbarch}, @var{pc}, @var{frame_regnum}, @var{frame_offset})
+ at findex gdbarch_virtual_frame_pointer
+Returns a @code{(@var{register}, @var{offset})} pair representing the virtual
+frame pointer in use at the code address @var{pc}.  If virtual frame
+pointers are not used, a default definition simply returns
+ at code{gdbarch_deprecated_fp_regnum} (or @code{gdbarch_sp_regnum}, if
+no frame pointer is defined), with an offset of zero.
+
+ at c need to explain virtual frame pointers, they are recorded in agent
+ at c expressions for tracepoints
+
+ at item TARGET_HAS_HARDWARE_WATCHPOINTS
+If non-zero, the target has support for hardware-assisted
+watchpoints.  @xref{Algorithms, watchpoints}, for more details and
+other related macros.
+
+ at item int gdbarch_print_insn (@var{gdbarch}, @var{vma}, @var{info})
+ at findex gdbarch_print_insn
+This is the function used by @value{GDBN} to print an assembly
+instruction.  It prints the instruction at address @var{vma} in
+debugged memory and returns the length of the instruction, in bytes.
+This usually points to a function in the @code{opcodes} library
+(@pxref{Support Libraries, ,Opcodes}).  @var{info} is a structure (of
+type @code{disassemble_info}) defined in the header file
+ at file{include/dis-asm.h}, and used to pass information to the
+instruction decoding routine.
+
+ at item frame_id gdbarch_dummy_id (@var{gdbarch}, @var{frame})
+ at findex gdbarch_dummy_id
+ at anchor{gdbarch_dummy_id} Given @var{frame} return a @w{@code{struct
+frame_id}} that uniquely identifies an inferior function call's dummy
+frame.  The value returned must match the dummy frame stack value
+previously saved by @code{call_function_by_hand}.
+
+ at item void gdbarch_value_to_register (@var{gdbarch}, @var{frame}, @var{type}, @var{buf})
+ at findex gdbarch_value_to_register
+Convert a value of type @var{type} into the raw contents of a register.
+ at xref{Target Architecture Definition, , Using Different Register and Memory Data Representations}.
+
+ at end table
+
+Motorola M68K target conditionals.
+
+ at ftable @code
+ at item BPT_VECTOR
+Define this to be the 4-bit location of the breakpoint trap vector.  If
+not defined, it will default to @code{0xf}.
+
+ at item REMOTE_BPT_VECTOR
+Defaults to @code{1}.
+
+ at end ftable
+
+ at node Adding a New Target
+ at section Adding a New Target
+
+ at cindex adding a target
+The following files add a target to @value{GDBN}:
+
+ at table @file
+ at cindex target dependent files
+
+ at item gdb/@var{ttt}-tdep.c
+Contains any miscellaneous code required for this target machine.  On
+some machines it doesn't exist at all.
+
+ at item gdb/@var{arch}-tdep.c
+ at itemx gdb/@var{arch}-tdep.h
+This is required to describe the basic layout of the target machine's
+processor chip (registers, stack, etc.).  It can be shared among many
+targets that use the same processor architecture.
+
+ at end table
+
+(Target header files such as
+ at file{gdb/config/@var{arch}/tm- at var{ttt}.h},
+ at file{gdb/config/@var{arch}/tm- at var{arch}.h}, and
+ at file{config/tm- at var{os}.h} are no longer used.)
+
+ at findex _initialize_ at var{arch}_tdep
+A @value{GDBN} description for a new architecture, arch is created by
+defining a global function @code{_initialize_ at var{arch}_tdep}, by
+convention in the source file @file{@var{arch}-tdep.c}.  For
+example, in the case of the OpenRISC 1000, this function is called
+ at code{_initialize_or1k_tdep} and is found in the file
+ at file{or1k-tdep.c}.
+
+The object file resulting from compiling this source file, which will
+contain the implementation of the
+ at code{_initialize_ at var{arch}_tdep} function is specified in the
+ at value{GDBN} @file{configure.tgt} file, which includes a large case
+statement pattern matching against the @code{--target} option of the
+ at kbd{configure} script.
+
+ at quotation
+ at emph{Note:} If the architecture requires multiple source files, the
+corresponding binaries should be included in
+ at file{configure.tgt}. However if there are header files, the
+dependencies on these will not be picked up from the entries in
+ at file{configure.tgt}. The @file{Makefile.in} file will need extending to
+show these dependencies.
+ at end quotation
+
+ at findex gdbarch_register
+A new struct gdbarch, defining the new architecture, is created within
+the @code{_initialize_ at var{arch}_tdep} function by calling
+ at code{gdbarch_register}:
+
+ at smallexample
+void gdbarch_register (enum bfd_architecture    architecture,
+                       gdbarch_init_ftype      *init_func,
+                       gdbarch_dump_tdep_ftype *tdep_dump_func);
+ at end smallexample
+
+This function has been described fully in an earlier
+section.  @xref{How an Architecture is Represented, , How an
+Architecture is Represented}.
+
+The new @code{@w{struct gdbarch}} should contain implementations of
+the necessary functions (described in the previous sections) to
+describe the basic layout of the target machine's processor chip
+(registers, stack, etc.).  It can be shared among many targets that use
+the same processor architecture.
+
+ at node Target Descriptions
+ at chapter Target Descriptions
+ at cindex target descriptions
+
+The target architecture definition (@pxref{Target Architecture Definition})
+contains @value{GDBN}'s hard-coded knowledge about an architecture.  For
+some platforms, it is handy to have more flexible knowledge about a specific
+instance of the architecture---for instance, a processor or development board.
+ at dfn{Target descriptions} provide a mechanism for the user to tell @value{GDBN}
+more about what their target supports, or for the target to tell @value{GDBN}
+directly.
+
+For details on writing, automatically supplying, and manually selecting
+target descriptions, see @ref{Target Descriptions, , , gdb,
+Debugging with @value{GDBN}}.  This section will cover some related
+topics about the @value{GDBN} internals.
+
+ at menu
+* Target Descriptions Implementation::
+* Adding Target Described Register Support::
+ at end menu
+
+ at node Target Descriptions Implementation
+ at section Target Descriptions Implementation
+ at cindex target descriptions, implementation
+
+Before @value{GDBN} connects to a new target, or runs a new program on
+an existing target, it discards any existing target description and
+reverts to a default gdbarch.  Then, after connecting, it looks for a
+new target description by calling @code{target_find_description}.
+
+A description may come from a user specified file (XML), the remote
+ at samp{qXfer:features:read} packet (also XML), or from any custom
+ at code{to_read_description} routine in the target vector.  For instance,
+the remote target supports guessing whether a MIPS target is 32-bit or
+64-bit based on the size of the @samp{g} packet.
+
+If any target description is found, @value{GDBN} creates a new gdbarch
+incorporating the description by calling @code{gdbarch_update_p}.  Any
+ at samp{<architecture>} element is handled first, to determine which
+architecture's gdbarch initialization routine is called to create the
+new architecture.  Then the initialization routine is called, and has
+a chance to adjust the constructed architecture based on the contents
+of the target description.  For instance, it can recognize any
+properties set by a @code{to_read_description} routine.  Also
+see @ref{Adding Target Described Register Support}.
+
+ at node Adding Target Described Register Support
+ at section Adding Target Described Register Support
+ at cindex target descriptions, adding register support
+
+Target descriptions can report additional registers specific to an
+instance of the target.  But it takes a little work in the architecture
+specific routines to support this.
+
+A target description must either have no registers or a complete
+set---this avoids complexity in trying to merge standard registers
+with the target defined registers.  It is the architecture's
+responsibility to validate that a description with registers has
+everything it needs.  To keep architecture code simple, the same
+mechanism is used to assign fixed internal register numbers to
+standard registers.
+
+If @code{tdesc_has_registers} returns 1, the description contains
+registers.  The architecture's @code{gdbarch_init} routine should:
+
+ at itemize @bullet
+
+ at item
+Call @code{tdesc_data_alloc} to allocate storage, early, before
+searching for a matching gdbarch or allocating a new one.
+
+ at item
+Use @code{tdesc_find_feature} to locate standard features by name.
+
+ at item
+Use @code{tdesc_numbered_register} and @code{tdesc_numbered_register_choices}
+to locate the expected registers in the standard features.
+
+ at item
+Return @code{NULL} if a required feature is missing, or if any standard
+feature is missing expected registers.  This will produce a warning that
+the description was incomplete.
+
+ at item
+Free the allocated data before returning, unless @code{tdesc_use_registers}
+is called.
+
+ at item
+Call @code{set_gdbarch_num_regs} as usual, with a number higher than any
+fixed number passed to @code{tdesc_numbered_register}.
+
+ at item
+Call @code{tdesc_use_registers} after creating a new gdbarch, before
+returning it.
+
+ at end itemize
+
+After @code{tdesc_use_registers} has been called, the architecture's
+ at code{register_name}, @code{register_type}, and @code{register_reggroup_p}
+routines will not be called; that information will be taken from
+the target description.  @code{num_regs} may be increased to account
+for any additional registers in the description.
+
+Pseudo-registers require some extra care:
+
+ at itemize @bullet
+
+ at item
+Using @code{tdesc_numbered_register} allows the architecture to give
+constant register numbers to standard architectural registers, e.g.@:
+as an @code{enum} in @file{@var{arch}-tdep.h}.  But because
+pseudo-registers are always numbered above @code{num_regs},
+which may be increased by the description, constant numbers
+can not be used for pseudos.  They must be numbered relative to
+ at code{num_regs} instead.
+
+ at item
+The description will not describe pseudo-registers, so the
+architecture must call @code{set_tdesc_pseudo_register_name},
+ at code{set_tdesc_pseudo_register_type}, and
+ at code{set_tdesc_pseudo_register_reggroup_p} to supply routines
+describing pseudo registers.  These routines will be passed
+internal register numbers, so the same routines used for the
+gdbarch equivalents are usually suitable.
+
+ at end itemize
+
+
+ at node Target Vector Definition
+
+ at chapter Target Vector Definition
+ at cindex target vector
+
+The target vector defines the interface between @value{GDBN}'s
+abstract handling of target systems, and the nitty-gritty code that
+actually exercises control over a process or a serial port.
+ at value{GDBN} includes some 30-40 different target vectors; however,
+each configuration of @value{GDBN} includes only a few of them.
+
+ at menu
+* Managing Execution State::
+* Existing Targets::
+ at end menu
+
+ at node Managing Execution State
+ at section Managing Execution State
+ at cindex execution state
+
+A target vector can be completely inactive (not pushed on the target
+stack), active but not running (pushed, but not connected to a fully
+manifested inferior), or completely active (pushed, with an accessible
+inferior).  Most targets are only completely inactive or completely
+active, but some support persistent connections to a target even
+when the target has exited or not yet started.
+
+For example, connecting to the simulator using @code{target sim} does
+not create a running program.  Neither registers nor memory are
+accessible until @code{run}.  Similarly, after @code{kill}, the
+program can not continue executing.  But in both cases @value{GDBN}
+remains connected to the simulator, and target-specific commands
+are directed to the simulator.
+
+A target which only supports complete activation should push itself
+onto the stack in its @code{to_open} routine (by calling
+ at code{push_target}), and unpush itself from the stack in its
+ at code{to_mourn_inferior} routine (by calling @code{unpush_target}).
+
+A target which supports both partial and complete activation should
+still call @code{push_target} in @code{to_open}, but not call
+ at code{unpush_target} in @code{to_mourn_inferior}.  Instead, it should
+call either @code{target_mark_running} or @code{target_mark_exited}
+in its @code{to_open}, depending on whether the target is fully active
+after connection.  It should also call @code{target_mark_running} any
+time the inferior becomes fully active (e.g.@: in
+ at code{to_create_inferior} and @code{to_attach}), and
+ at code{target_mark_exited} when the inferior becomes inactive (in
+ at code{to_mourn_inferior}).  The target should also make sure to call
+ at code{target_mourn_inferior} from its @code{to_kill}, to return the
+target to inactive state.
+
+ at node Existing Targets
+ at section Existing Targets
+ at cindex targets
+
+ at subsection File Targets
+
+Both executables and core files have target vectors.
+
+ at subsection Standard Protocol and Remote Stubs
+
+ at value{GDBN}'s file @file{remote.c} talks a serial protocol to code that
+runs in the target system.  @value{GDBN} provides several sample
+ at dfn{stubs} that can be integrated into target programs or operating
+systems for this purpose; they are named @file{@var{cpu}-stub.c}.  Many
+operating systems, embedded targets, emulators, and simulators already
+have a @value{GDBN} stub built into them, and maintenance of the remote
+protocol must be careful to preserve compatibility.
+
+The @value{GDBN} user's manual describes how to put such a stub into
+your target code.  What follows is a discussion of integrating the
+SPARC stub into a complicated operating system (rather than a simple
+program), by Stu Grossman, the author of this stub.
+
+The trap handling code in the stub assumes the following upon entry to
+ at code{trap_low}:
+
+ at enumerate
+ at item
+%l1 and %l2 contain pc and npc respectively at the time of the trap;
+
+ at item
+traps are disabled;
+
+ at item
+you are in the correct trap window.
+ at end enumerate
+
+As long as your trap handler can guarantee those conditions, then there
+is no reason why you shouldn't be able to ``share'' traps with the stub.
+The stub has no requirement that it be jumped to directly from the
+hardware trap vector.  That is why it calls @code{exceptionHandler()},
+which is provided by the external environment.  For instance, this could
+set up the hardware traps to actually execute code which calls the stub
+first, and then transfers to its own trap handler.
+
+For the most point, there probably won't be much of an issue with
+``sharing'' traps, as the traps we use are usually not used by the kernel,
+and often indicate unrecoverable error conditions.  Anyway, this is all
+controlled by a table, and is trivial to modify.  The most important
+trap for us is for @code{ta 1}.  Without that, we can't single step or
+do breakpoints.  Everything else is unnecessary for the proper operation
+of the debugger/stub.
+
+From reading the stub, it's probably not obvious how breakpoints work.
+They are simply done by deposit/examine operations from @value{GDBN}.
+
+ at subsection ROM Monitor Interface
+
+ at subsection Custom Protocols
+
+ at subsection Transport Layer
+
+ at subsection Builtin Simulator
+
+
+ at node Native Debugging
+
+ at chapter Native Debugging
+ at cindex native debugging
+
+Several files control @value{GDBN}'s configuration for native support:
+
+ at table @file
+ at vindex NATDEPFILES
+ at item gdb/config/@var{arch}/@var{xyz}.mh
+Specifies Makefile fragments needed by a @emph{native} configuration on
+machine @var{xyz}.  In particular, this lists the required
+native-dependent object files, by defining @samp{NATDEPFILES=@dots{}}.
+Also specifies the header file which describes native support on
+ at var{xyz}, by defining @samp{NAT_FILE= nm- at var{xyz}.h}.  You can also
+define @samp{NAT_CFLAGS}, @samp{NAT_ADD_FILES}, @samp{NAT_CLIBS},
+ at samp{NAT_CDEPS}, @samp{NAT_GENERATED_FILES}, etc.; see @file{Makefile.in}.
+
+ at emph{Maintainer's note: The @file{.mh} suffix is because this file
+originally contained @file{Makefile} fragments for hosting @value{GDBN}
+on machine @var{xyz}.  While the file is no longer used for this
+purpose, the @file{.mh} suffix remains.  Perhaps someone will
+eventually rename these fragments so that they have a @file{.mn}
+suffix.}
+
+ at item gdb/config/@var{arch}/nm- at var{xyz}.h
+(@file{nm.h} is a link to this file, created by @code{configure}).  Contains C
+macro definitions describing the native system environment, such as
+child process control and core file support.
+
+ at item gdb/@var{xyz}-nat.c
+Contains any miscellaneous C code required for this native support of
+this machine.  On some machines it doesn't exist at all.
+ at end table
+
+There are some ``generic'' versions of routines that can be used by
+various systems.  These can be customized in various ways by macros
+defined in your @file{nm- at var{xyz}.h} file.  If these routines work for
+the @var{xyz} host, you can just include the generic file's name (with
+ at samp{.o}, not @samp{.c}) in @code{NATDEPFILES}.
+
+Otherwise, if your machine needs custom support routines, you will need
+to write routines that perform the same functions as the generic file.
+Put them into @file{@var{xyz}-nat.c}, and put @file{@var{xyz}-nat.o}
+into @code{NATDEPFILES}.
+
+ at table @file
+ at item inftarg.c
+This contains the @emph{target_ops vector} that supports Unix child
+processes on systems which use ptrace and wait to control the child.
+
+ at item procfs.c
+This contains the @emph{target_ops vector} that supports Unix child
+processes on systems which use /proc to control the child.
+
+ at item fork-child.c
+This does the low-level grunge that uses Unix system calls to do a ``fork
+and exec'' to start up a child process.
+
+ at item infptrace.c
+This is the low level interface to inferior processes for systems using
+the Unix @code{ptrace} call in a vanilla way.
+ at end table
+
+ at section ptrace
+
+ at section /proc
+
+ at section win32
+
+ at section shared libraries
+
+ at section Native Conditionals
+ at cindex native conditionals
+
+When @value{GDBN} is configured and compiled, various macros are
+defined or left undefined, to control compilation when the host and
+target systems are the same.  These macros should be defined (or left
+undefined) in @file{nm- at var{system}.h}.
+
+ at table @code
+
+ at item I386_USE_GENERIC_WATCHPOINTS
+An x86-based machine can define this to use the generic x86 watchpoint
+support; see @ref{Algorithms, I386_USE_GENERIC_WATCHPOINTS}.
+
+ at item SOLIB_ADD (@var{filename}, @var{from_tty}, @var{targ}, @var{readsyms})
+ at findex SOLIB_ADD
+Define this to expand into an expression that will cause the symbols in
+ at var{filename} to be added to @value{GDBN}'s symbol table.  If
+ at var{readsyms} is zero symbols are not read but any necessary low level
+processing for @var{filename} is still done.
+
+ at item SOLIB_CREATE_INFERIOR_HOOK
+ at findex SOLIB_CREATE_INFERIOR_HOOK
+Define this to expand into any shared-library-relocation code that you
+want to be run just after the child process has been forked.
+
+ at item START_INFERIOR_TRAPS_EXPECTED
+ at findex START_INFERIOR_TRAPS_EXPECTED
+When starting an inferior, @value{GDBN} normally expects to trap
+twice; once when
+the shell execs, and once when the program itself execs.  If the actual
+number of traps is something other than 2, then define this macro to
+expand into the number expected.
+
+ at end table
+
+ at node Support Libraries
+
+ at chapter Support Libraries
+
+ at section BFD
+ at cindex BFD library
+
+BFD provides support for @value{GDBN} in several ways:
+
+ at table @emph
+ at item identifying executable and core files
+BFD will identify a variety of file types, including a.out, coff, and
+several variants thereof, as well as several kinds of core files.
+
+ at item access to sections of files
+BFD parses the file headers to determine the names, virtual addresses,
+sizes, and file locations of all the various named sections in files
+(such as the text section or the data section).  @value{GDBN} simply
+calls BFD to read or write section @var{x} at byte offset @var{y} for
+length @var{z}.
+
+ at item specialized core file support
+BFD provides routines to determine the failing command name stored in a
+core file, the signal with which the program failed, and whether a core
+file matches (i.e.@: could be a core dump of) a particular executable
+file.
+
+ at item locating the symbol information
+ at value{GDBN} uses an internal interface of BFD to determine where to find the
+symbol information in an executable file or symbol-file.  @value{GDBN} itself
+handles the reading of symbols, since BFD does not ``understand'' debug
+symbols, but @value{GDBN} uses BFD's cached information to find the symbols,
+string table, etc.
+ at end table
+
+ at section opcodes
+ at cindex opcodes library
+
+The opcodes library provides @value{GDBN}'s disassembler.  (It's a separate
+library because it's also used in binutils, for @file{objdump}).
+
+ at section readline
+ at cindex readline library
+The @code{readline} library provides a set of functions for use by applications
+that allow users to edit command lines as they are typed in.
+
+ at section libiberty
+ at cindex @code{libiberty} library
+
+The @code{libiberty} library provides a set of functions and features
+that integrate and improve on functionality found in modern operating
+systems.  Broadly speaking, such features can be divided into three
+groups: supplemental functions (functions that may be missing in some
+environments and operating systems), replacement functions (providing
+a uniform and easier to use interface for commonly used standard
+functions), and extensions (which provide additional functionality
+beyond standard functions).
+
+ at value{GDBN} uses various features provided by the @code{libiberty}
+library, for instance the C at t{++} demangler, the @acronym{IEEE}
+floating format support functions, the input options parser
+ at samp{getopt}, the @samp{obstack} extension, and other functions.
+
+ at subsection @code{obstacks} in @value{GDBN}
+ at cindex @code{obstacks}
+
+The obstack mechanism provides a convenient way to allocate and free
+chunks of memory.  Each obstack is a pool of memory that is managed
+like a stack.  Objects (of any nature, size and alignment) are
+allocated and freed in a @acronym{LIFO} fashion on an obstack (see
+ at code{libiberty}'s documentation for a more detailed explanation of
+ at code{obstacks}).
+
+The most noticeable use of the @code{obstacks} in @value{GDBN} is in
+object files.  There is an obstack associated with each internal
+representation of an object file.  Lots of things get allocated on
+these @code{obstacks}: dictionary entries, blocks, blockvectors,
+symbols, minimal symbols, types, vectors of fundamental types, class
+fields of types, object files section lists, object files section
+offset lists, line tables, symbol tables, partial symbol tables,
+string tables, symbol table private data, macros tables, debug
+information sections and entries, import and export lists (som),
+unwind information (hppa), dwarf2 location expressions data.  Plus
+various strings such as directory names strings, debug format strings,
+names of types.
+
+An essential and convenient property of all data on @code{obstacks} is
+that memory for it gets allocated (with @code{obstack_alloc}) at
+various times during a debugging session, but it is released all at
+once using the @code{obstack_free} function.  The @code{obstack_free}
+function takes a pointer to where in the stack it must start the
+deletion from (much like the cleanup chains have a pointer to where to
+start the cleanups).  Because of the stack like structure of the
+ at code{obstacks}, this allows to free only a top portion of the
+obstack.  There are a few instances in @value{GDBN} where such thing
+happens.  Calls to @code{obstack_free} are done after some local data
+is allocated to the obstack.  Only the local data is deleted from the
+obstack.  Of course this assumes that nothing between the
+ at code{obstack_alloc} and the @code{obstack_free} allocates anything
+else on the same obstack.  For this reason it is best and safest to
+use temporary @code{obstacks}.
+
+Releasing the whole obstack is also not safe per se.  It is safe only
+under the condition that we know the @code{obstacks} memory is no
+longer needed.  In @value{GDBN} we get rid of the @code{obstacks} only
+when we get rid of the whole objfile(s), for instance upon reading a
+new symbol file.
+
+ at section gnu-regex
+ at cindex regular expressions library
+
+Regex conditionals.
+
+ at table @code
+ at item C_ALLOCA
+
+ at item NFAILURES
+
+ at item RE_NREGS
+
+ at item SIGN_EXTEND_CHAR
+
+ at item SWITCH_ENUM_BUG
+
+ at item SYNTAX_TABLE
+
+ at item Sword
+
+ at item sparc
+ at end table
+
+ at section Array Containers
+ at cindex Array Containers
+ at cindex VEC
+
+Often it is necessary to manipulate a dynamic array of a set of
+objects.  C forces some bookkeeping on this, which can get cumbersome
+and repetitive.  The @file{vec.h} file contains macros for defining
+and using a typesafe vector type.  The functions defined will be
+inlined when compiling, and so the abstraction cost should be zero.
+Domain checks are added to detect programming errors.
+
+An example use would be an array of symbols or section information.
+The array can be grown as symbols are read in (or preallocated), and
+the accessor macros provided keep care of all the necessary
+bookkeeping.  Because the arrays are type safe, there is no danger of
+accidentally mixing up the contents.  Think of these as C++ templates,
+but implemented in C.
+
+Because of the different behavior of structure objects, scalar objects
+and of pointers, there are three flavors of vector, one for each of
+these variants.  Both the structure object and pointer variants pass
+pointers to objects around --- in the former case the pointers are
+stored into the vector and in the latter case the pointers are
+dereferenced and the objects copied into the vector.  The scalar
+object variant is suitable for @code{int}-like objects, and the vector
+elements are returned by value.
+
+There are both @code{index} and @code{iterate} accessors.  The iterator
+returns a boolean iteration condition and updates the iteration
+variable passed by reference.  Because the iterator will be inlined,
+the address-of can be optimized away.
+
+The vectors are implemented using the trailing array idiom, thus they
+are not resizeable without changing the address of the vector object
+itself.  This means you cannot have variables or fields of vector type
+--- always use a pointer to a vector.  The one exception is the final
+field of a structure, which could be a vector type.  You will have to
+use the @code{embedded_size} & @code{embedded_init} calls to create
+such objects, and they will probably not be resizeable (so don't use
+the @dfn{safe} allocation variants).  The trailing array idiom is used
+(rather than a pointer to an array of data), because, if we allow
+ at code{NULL} to also represent an empty vector, empty vectors occupy
+minimal space in the structure containing them.
+
+Each operation that increases the number of active elements is
+available in @dfn{quick} and @dfn{safe} variants.  The former presumes
+that there is sufficient allocated space for the operation to succeed
+(it dies if there is not).  The latter will reallocate the vector, if
+needed.  Reallocation causes an exponential increase in vector size.
+If you know you will be adding N elements, it would be more efficient
+to use the reserve operation before adding the elements with the
+ at dfn{quick} operation.  This will ensure there are at least as many
+elements as you ask for, it will exponentially increase if there are
+too few spare slots.  If you want reserve a specific number of slots,
+but do not want the exponential increase (for instance, you know this
+is the last allocation), use a negative number for reservation.  You
+can also create a vector of a specific size from the get go.
+
+You should prefer the push and pop operations, as they append and
+remove from the end of the vector.  If you need to remove several items
+in one go, use the truncate operation.  The insert and remove
+operations allow you to change elements in the middle of the vector.
+There are two remove operations, one which preserves the element
+ordering @code{ordered_remove}, and one which does not
+ at code{unordered_remove}.  The latter function copies the end element
+into the removed slot, rather than invoke a memmove operation.  The
+ at code{lower_bound} function will determine where to place an item in
+the array using insert that will maintain sorted order.
+
+If you need to directly manipulate a vector, then the @code{address}
+accessor will return the address of the start of the vector.  Also the
+ at code{space} predicate will tell you whether there is spare capacity in the
+vector.  You will not normally need to use these two functions.
+
+Vector types are defined using a
+ at code{DEF_VEC_@{O,P,I@}(@var{typename})} macro.  Variables of vector
+type are declared using a @code{VEC(@var{typename})} macro.  The
+characters @code{O}, @code{P} and @code{I} indicate whether
+ at var{typename} is an object (@code{O}), pointer (@code{P}) or integral
+(@code{I}) type.  Be careful to pick the correct one, as you'll get an
+awkward and inefficient API if you use the wrong one.  There is a
+check, which results in a compile-time warning, for the @code{P} and
+ at code{I} versions, but there is no check for the @code{O} versions, as
+that is not possible in plain C.
+
+An example of their use would be,
+
+ at smallexample
+DEF_VEC_P(tree);   // non-managed tree vector.
+
+struct my_struct @{
+  VEC(tree) *v;      // A (pointer to) a vector of tree pointers.
+@};
+
+struct my_struct *s;
+
+if (VEC_length(tree, s->v)) @{ we have some contents @}
+VEC_safe_push(tree, s->v, decl); // append some decl onto the end
+for (ix = 0; VEC_iterate(tree, s->v, ix, elt); ix++)
+  @{ do something with elt @}
+
+ at end smallexample
+
+The @file{vec.h} file provides details on how to invoke the various
+accessors provided.  They are enumerated here:
+
+ at table @code
+ at item VEC_length
+Return the number of items in the array,
+
+ at item VEC_empty
+Return true if the array has no elements.
+
+ at item VEC_last
+ at itemx VEC_index
+Return the last or arbitrary item in the array.
+
+ at item VEC_iterate
+Access an array element and indicate whether the array has been
+traversed.
+
+ at item VEC_alloc
+ at itemx VEC_free
+Create and destroy an array.
+
+ at item VEC_embedded_size
+ at itemx VEC_embedded_init
+Helpers for embedding an array as the final element of another struct.
+
+ at item VEC_copy
+Duplicate an array.
+
+ at item VEC_space
+Return the amount of free space in an array.
+
+ at item VEC_reserve
+Ensure a certain amount of free space.
+
+ at item VEC_quick_push
+ at itemx VEC_safe_push
+Append to an array, either assuming the space is available, or making
+sure that it is.
+
+ at item VEC_pop
+Remove the last item from an array.
+
+ at item VEC_truncate
+Remove several items from the end of an array.
+
+ at item VEC_safe_grow
+Add several items to the end of an array.
+
+ at item VEC_replace
+Overwrite an item in the array.
+
+ at item VEC_quick_insert
+ at itemx VEC_safe_insert
+Insert an item into the middle of the array.  Either the space must
+already exist, or the space is created.
+
+ at item VEC_ordered_remove
+ at itemx VEC_unordered_remove
+Remove an item from the array, preserving order or not.
+
+ at item VEC_block_remove
+Remove a set of items from the array.
+
+ at item VEC_address
+Provide the address of the first element.
+
+ at item VEC_lower_bound
+Binary search the array.
+
+ at end table
+
+ at section include
+
+ at node Coding Standards
+
+ at chapter Coding Standards
+ at cindex coding standards
+
+ at section @value{GDBN} C Coding Standards
+
+ at value{GDBN} follows the GNU coding standards, as described in
+ at file{etc/standards.texi}.  This file is also available for anonymous
+FTP from GNU archive sites.  @value{GDBN} takes a strict interpretation
+of the standard; in general, when the GNU standard recommends a practice
+but does not require it, @value{GDBN} requires it.
+
+ at value{GDBN} follows an additional set of coding standards specific to
+ at value{GDBN}, as described in the following sections.
+
+ at subsection ISO C
+
+ at value{GDBN} assumes an ISO/IEC 9899:1990 (a.k.a.@: ISO C90) compliant
+compiler.
+
+ at value{GDBN} does not assume an ISO C or POSIX compliant C library.
+
+ at subsection Formatting
+
+ at cindex source code formatting
+The standard GNU recommendations for formatting must be followed
+strictly.  Any @value{GDBN}-specific deviation from GNU
+recomendations is described below.
+
+A function declaration should not have its name in column zero.  A
+function definition should have its name in column zero.
+
+ at smallexample
+/* Declaration */
+static void foo (void);
+/* Definition */
+void
+foo (void)
+@{
+@}
+ at end smallexample
+
+ at emph{Pragmatics: This simplifies scripting.  Function definitions can
+be found using @samp{^function-name}.}
+
+There must be a space between a function or macro name and the opening
+parenthesis of its argument list (except for macro definitions, as
+required by C).  There must not be a space after an open paren/bracket
+or before a close paren/bracket.
+
+While additional whitespace is generally helpful for reading, do not use
+more than one blank line to separate blocks, and avoid adding whitespace
+after the end of a program line (as of 1/99, some 600 lines had
+whitespace after the semicolon).  Excess whitespace causes difficulties
+for @code{diff} and @code{patch} utilities.
+
+Pointers are declared using the traditional K&R C style:
+
+ at smallexample
+void *foo;
+ at end smallexample
+
+ at noindent
+and not:
+
+ at smallexample
+void * foo;
+void* foo;
+ at end smallexample
+
+In addition, whitespace around casts and unary operators should follow
+the following guidelines:
+
+ at multitable @columnfractions .2 .2 .8
+ at item Use... @tab ...instead of @tab
+
+ at item @code{!x}
+ at tab @code{! x}
+ at item @code{~x}
+ at tab @code{~ x}
+ at item @code{-x}
+ at tab @code{- x}
+ at tab (unary minus)
+ at item @code{(foo) x}
+ at tab @code{(foo)x}
+ at tab (cast)
+ at item @code{*x}
+ at tab @code{* x}
+ at tab (pointer dereference)
+ at end multitable
+
+Any two or more lines in code should be wrapped in braces, even if
+they are comments, as they look like separate statements:
+
+ at smallexample
+if (i)
+  @{
+    /* Return success.  */
+    return 0;
+  @}
+ at end smallexample
+
+ at noindent
+and not:
+
+ at smallexample
+if (i)
+  /* Return success.  */
+  return 0;
+ at end smallexample
+
+ at subsection Comments
+
+ at cindex comment formatting
+The standard GNU requirements on comments must be followed strictly.
+
+Block comments must appear in the following form, with no @code{/*}- or
+ at code{*/}-only lines, and no leading @code{*}:
+
+ at smallexample
+/* Wait for control to return from inferior to debugger.  If inferior
+   gets a signal, we may decide to start it up again instead of
+   returning.  That is why there is a loop in this function.  When
+   this function actually returns it means the inferior should be left
+   stopped and @value{GDBN} should read more commands.  */
+ at end smallexample
+
+(Note that this format is encouraged by Emacs; tabbing for a multi-line
+comment works correctly, and @kbd{M-q} fills the block consistently.)
+
+Put a blank line between the block comments preceding function or
+variable definitions, and the definition itself.
+
+In general, put function-body comments on lines by themselves, rather
+than trying to fit them into the 20 characters left at the end of a
+line, since either the comment or the code will inevitably get longer
+than will fit, and then somebody will have to move it anyhow.
+
+ at subsection C Usage
+
+ at cindex C data types
+Code must not depend on the sizes of C data types, the format of the
+host's floating point numbers, the alignment of anything, or the order
+of evaluation of expressions.
+
+ at cindex function usage
+Use functions freely.  There are only a handful of compute-bound areas
+in @value{GDBN} that might be affected by the overhead of a function
+call, mainly in symbol reading.  Most of @value{GDBN}'s performance is
+limited by the target interface (whether serial line or system call).
+
+However, use functions with moderation.  A thousand one-line functions
+are just as hard to understand as a single thousand-line function.
+
+ at emph{Macros are bad, M'kay.}
+(But if you have to use a macro, make sure that the macro arguments are
+protected with parentheses.)
+
+ at cindex types
+
+Declarations like @samp{struct foo *} should be used in preference to
+declarations like @samp{typedef struct foo @{ @dots{} @} *foo_ptr}.
+
+ at subsection Function Prototypes
+ at cindex function prototypes
+
+Prototypes must be used when both @emph{declaring} and @emph{defining}
+a function.  Prototypes for @value{GDBN} functions must include both the
+argument type and name, with the name matching that used in the actual
+function definition.
+
+All external functions should have a declaration in a header file that
+callers include, except for @code{_initialize_*} functions, which must
+be external so that @file{init.c} construction works, but shouldn't be
+visible to random source files.
+
+Where a source file needs a forward declaration of a static function,
+that declaration must appear in a block near the top of the source file.
+
+ at subsection File Names
+
+Any file used when building the core of @value{GDBN} must be in lower
+case.  Any file used when building the core of @value{GDBN} must be 8.3
+unique.  These requirements apply to both source and generated files.
+
+ at emph{Pragmatics: The core of @value{GDBN} must be buildable on many
+platforms including DJGPP and MacOS/HFS.  Every time an unfriendly file
+is introduced to the build process both @file{Makefile.in} and
+ at file{configure.in} need to be modified accordingly.  Compare the
+convoluted conversion process needed to transform @file{COPYING} into
+ at file{copying.c} with the conversion needed to transform
+ at file{version.in} into @file{version.c}.}
+
+Any file non 8.3 compliant file (that is not used when building the core
+of @value{GDBN}) must be added to @file{gdb/config/djgpp/fnchange.lst}.
+
+ at emph{Pragmatics: This is clearly a compromise.}
+
+When @value{GDBN} has a local version of a system header file (ex
+ at file{string.h}) the file name based on the POSIX header prefixed with
+ at file{gdb_} (@file{gdb_string.h}).  These headers should be relatively
+independent: they should use only macros defined by @file{configure},
+the compiler, or the host; they should include only system headers; they
+should refer only to system types.  They may be shared between multiple
+programs, e.g.@: @value{GDBN} and @sc{gdbserver}.
+
+For other files @samp{-} is used as the separator.
+
+ at subsection Include Files
+
+A @file{.c} file should include @file{defs.h} first.
+
+A @file{.c} file should directly include the @code{.h} file of every
+declaration and/or definition it directly refers to.  It cannot rely on
+indirect inclusion.
+
+A @file{.h} file should directly include the @code{.h} file of every
+declaration and/or definition it directly refers to.  It cannot rely on
+indirect inclusion.  Exception: The file @file{defs.h} does not need to
+be directly included.
+
+An external declaration should only appear in one include file.
+
+An external declaration should never appear in a @code{.c} file.
+Exception: a declaration for the @code{_initialize} function that
+pacifies @option{-Wmissing-declaration}.
+
+A @code{typedef} definition should only appear in one include file.
+
+An opaque @code{struct} declaration can appear in multiple @file{.h}
+files.  Where possible, a @file{.h} file should use an opaque
+ at code{struct} declaration instead of an include.
+
+All @file{.h} files should be wrapped in:
+
+ at smallexample
+#ifndef INCLUDE_FILE_NAME_H
+#define INCLUDE_FILE_NAME_H
+header body
+#endif
+ at end smallexample
+
+ at section @value{GDBN} Python Coding Standards
+
+ at value{GDBN} follows the published @code{Python} coding standards in
+ at uref{http://www.python.org/dev/peps/pep-0008/, @code{PEP008}}.
+
+In addition, the guidelines in the
+ at uref{http://google-styleguide.googlecode.com/svn/trunk/pyguide.html,
+Google Python Style Guide} are also followed where they do not
+conflict with @code{PEP008}.
+
+ at subsection @value{GDBN}-specific exceptions
+
+There are a few exceptions to the published standards.
+They exist mainly for consistency with the @code{C} standards.
+
+ at c It is expected that there are a few more exceptions,
+ at c so we use itemize here.
+
+ at itemize @bullet
+
+ at item
+Use @code{FIXME} instead of @code{TODO}.
+
+ at end itemize
+
+ at node Misc Guidelines
+
+ at chapter Misc Guidelines
+
+This chapter covers topics that are lower-level than the major
+algorithms of @value{GDBN}.
+
+ at section Cleanups
+ at cindex cleanups
+
+Cleanups are a structured way to deal with things that need to be done
+later.
+
+When your code does something (e.g., @code{xmalloc} some memory, or
+ at code{open} a file) that needs to be undone later (e.g., @code{xfree}
+the memory or @code{close} the file), it can make a cleanup.  The
+cleanup will be done at some future point: when the command is finished
+and control returns to the top level; when an error occurs and the stack
+is unwound; or when your code decides it's time to explicitly perform
+cleanups.  Alternatively you can elect to discard the cleanups you
+created.
+
+Syntax:
+
+ at table @code
+ at item struct cleanup *@var{old_chain};
+Declare a variable which will hold a cleanup chain handle.
+
+ at findex make_cleanup
+ at item @var{old_chain} = make_cleanup (@var{function}, @var{arg});
+Make a cleanup which will cause @var{function} to be called with
+ at var{arg} (a @code{char *}) later.  The result, @var{old_chain}, is a
+handle that can later be passed to @code{do_cleanups} or
+ at code{discard_cleanups}.  Unless you are going to call
+ at code{do_cleanups} or @code{discard_cleanups}, you can ignore the result
+from @code{make_cleanup}.
+
+ at findex do_cleanups
+ at item do_cleanups (@var{old_chain});
+Do all cleanups added to the chain since the corresponding
+ at code{make_cleanup} call was made.
+
+ at findex discard_cleanups
+ at item discard_cleanups (@var{old_chain});
+Same as @code{do_cleanups} except that it just removes the cleanups from
+the chain and does not call the specified functions.
+ at end table
+
+Cleanups are implemented as a chain.  The handle returned by
+ at code{make_cleanups} includes the cleanup passed to the call and any
+later cleanups appended to the chain (but not yet discarded or
+performed).  E.g.:
+
+ at smallexample
+make_cleanup (a, 0); 
+@{
+  struct cleanup *old = make_cleanup (b, 0); 
+  make_cleanup (c, 0)
+  ...
+  do_cleanups (old);
+@}
+ at end smallexample
+
+ at noindent
+will call @code{c()} and @code{b()} but will not call @code{a()}.  The
+cleanup that calls @code{a()} will remain in the cleanup chain, and will
+be done later unless otherwise discarded. at refill
+
+Your function should explicitly do or discard the cleanups it creates.
+Failing to do this leads to non-deterministic behavior since the caller
+will arbitrarily do or discard your functions cleanups.  This need leads
+to two common cleanup styles.
+
+The first style is try/finally.  Before it exits, your code-block calls
+ at code{do_cleanups} with the old cleanup chain and thus ensures that your
+code-block's cleanups are always performed.  For instance, the following
+code-segment avoids a memory leak problem (even when @code{error} is
+called and a forced stack unwind occurs) by ensuring that the
+ at code{xfree} will always be called:
+
+ at smallexample
+struct cleanup *old = make_cleanup (null_cleanup, 0);
+data = xmalloc (sizeof blah);
+make_cleanup (xfree, data);
+... blah blah ...
+do_cleanups (old);
+ at end smallexample
+
+The second style is try/except.  Before it exits, your code-block calls
+ at code{discard_cleanups} with the old cleanup chain and thus ensures that
+any created cleanups are not performed.  For instance, the following
+code segment, ensures that the file will be closed but only if there is
+an error:
+
+ at smallexample
+FILE *file = fopen ("afile", "r");
+struct cleanup *old = make_cleanup (close_file, file);
+... blah blah ...
+discard_cleanups (old);
+return file;
+ at end smallexample
+
+Some functions, e.g., @code{fputs_filtered()} or @code{error()}, specify
+that they ``should not be called when cleanups are not in place''.  This
+means that any actions you need to reverse in the case of an error or
+interruption must be on the cleanup chain before you call these
+functions, since they might never return to your code (they
+ at samp{longjmp} instead).
+
+ at section Per-architecture module data
+ at cindex per-architecture module data
+ at cindex multi-arch data
+ at cindex data-pointer, per-architecture/per-module
+
+The multi-arch framework includes a mechanism for adding module
+specific per-architecture data-pointers to the @code{struct gdbarch}
+architecture object.
+
+A module registers one or more per-architecture data-pointers using:
+
+ at deftypefn {Architecture Function} {struct gdbarch_data *} gdbarch_data_register_pre_init (gdbarch_data_pre_init_ftype *@var{pre_init})
+ at var{pre_init} is used to, on-demand, allocate an initial value for a
+per-architecture data-pointer using the architecture's obstack (passed
+in as a parameter).  Since @var{pre_init} can be called during
+architecture creation, it is not parameterized with the architecture.
+and must not call modules that use per-architecture data.
+ at end deftypefn
+
+ at deftypefn {Architecture Function} {struct gdbarch_data *} gdbarch_data_register_post_init (gdbarch_data_post_init_ftype *@var{post_init})
+ at var{post_init} is used to obtain an initial value for a
+per-architecture data-pointer @emph{after}.  Since @var{post_init} is
+always called after architecture creation, it both receives the fully
+initialized architecture and is free to call modules that use
+per-architecture data (care needs to be taken to ensure that those
+other modules do not try to call back to this module as that will
+create in cycles in the initialization call graph).
+ at end deftypefn
+
+These functions return a @code{struct gdbarch_data} that is used to
+identify the per-architecture data-pointer added for that module.
+
+The per-architecture data-pointer is accessed using the function:
+
+ at deftypefn {Architecture Function} {void *} gdbarch_data (struct gdbarch *@var{gdbarch}, struct gdbarch_data *@var{data_handle})
+Given the architecture @var{arch} and module data handle
+ at var{data_handle} (returned by @code{gdbarch_data_register_pre_init}
+or @code{gdbarch_data_register_post_init}), this function returns the
+current value of the per-architecture data-pointer.  If the data
+pointer is @code{NULL}, it is first initialized by calling the
+corresponding @var{pre_init} or @var{post_init} method.
+ at end deftypefn
+
+The examples below assume the following definitions:
+
+ at smallexample
+struct nozel @{ int total; @};
+static struct gdbarch_data *nozel_handle;
+ at end smallexample
+
+A module can extend the architecture vector, adding additional
+per-architecture data, using the @var{pre_init} method.  The module's
+per-architecture data is then initialized during architecture
+creation.
+
+In the below, the module's per-architecture @emph{nozel} is added.  An
+architecture can specify its nozel by calling @code{set_gdbarch_nozel}
+from @code{gdbarch_init}.
+
+ at smallexample
+static void *
+nozel_pre_init (struct obstack *obstack)
+@{
+  struct nozel *data = OBSTACK_ZALLOC (obstack, struct nozel);
+  return data;
+@}
+ at end smallexample
+
+ at smallexample
+extern void
+set_gdbarch_nozel (struct gdbarch *gdbarch, int total)
+@{
+  struct nozel *data = gdbarch_data (gdbarch, nozel_handle);
+  data->total = nozel;
+@}
+ at end smallexample
+
+A module can on-demand create architecture dependent data structures
+using @code{post_init}.
+
+In the below, the nozel's total is computed on-demand by
+ at code{nozel_post_init} using information obtained from the
+architecture.
+
+ at smallexample
+static void *
+nozel_post_init (struct gdbarch *gdbarch)
+@{
+  struct nozel *data = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct nozel);
+  nozel->total = gdbarch at dots{} (gdbarch);
+  return data;
+@}
+ at end smallexample
+
+ at smallexample
+extern int
+nozel_total (struct gdbarch *gdbarch)
+@{
+  struct nozel *data = gdbarch_data (gdbarch, nozel_handle);
+  return data->total;
+@}
+ at end smallexample
+
+ at section Wrapping Output Lines
+ at cindex line wrap in output
+
+ at findex wrap_here
+Output that goes through @code{printf_filtered} or @code{fputs_filtered}
+or @code{fputs_demangled} needs only to have calls to @code{wrap_here}
+added in places that would be good breaking points.  The utility
+routines will take care of actually wrapping if the line width is
+exceeded.
+
+The argument to @code{wrap_here} is an indentation string which is
+printed @emph{only} if the line breaks there.  This argument is saved
+away and used later.  It must remain valid until the next call to
+ at code{wrap_here} or until a newline has been printed through the
+ at code{*_filtered} functions.  Don't pass in a local variable and then
+return!
+
+It is usually best to call @code{wrap_here} after printing a comma or
+space.  If you call it before printing a space, make sure that your
+indentation properly accounts for the leading space that will print if
+the line wraps there.
+
+Any function or set of functions that produce filtered output must
+finish by printing a newline, to flush the wrap buffer, before switching
+to unfiltered (@code{printf}) output.  Symbol reading routines that
+print warnings are a good example.
+
+ at section Memory Management
+
+ at value{GDBN} does not use the functions @code{malloc}, @code{realloc},
+ at code{calloc}, @code{free} and @code{asprintf}.
+
+ at value{GDBN} uses the functions @code{xmalloc}, @code{xrealloc} and
+ at code{xcalloc} when allocating memory.  Unlike @code{malloc} et.al.@:
+these functions do not return when the memory pool is empty.  Instead,
+they unwind the stack using cleanups.  These functions return
+ at code{NULL} when requested to allocate a chunk of memory of size zero.
+
+ at emph{Pragmatics: By using these functions, the need to check every
+memory allocation is removed.  These functions provide portable
+behavior.}
+
+ at value{GDBN} does not use the function @code{free}.
+
+ at value{GDBN} uses the function @code{xfree} to return memory to the
+memory pool.  Consistent with ISO-C, this function ignores a request to
+free a @code{NULL} pointer.
+
+ at emph{Pragmatics: On some systems @code{free} fails when passed a
+ at code{NULL} pointer.}
+
+ at value{GDBN} can use the non-portable function @code{alloca} for the
+allocation of small temporary values (such as strings).
+
+ at emph{Pragmatics: This function is very non-portable.  Some systems
+restrict the memory being allocated to no more than a few kilobytes.}
+
+ at value{GDBN} uses the string function @code{xstrdup} and the print
+function @code{xstrprintf}.
+
+ at emph{Pragmatics: @code{asprintf} and @code{strdup} can fail.  Print
+functions such as @code{sprintf} are very prone to buffer overflow
+errors.}
+
+
+ at section Compiler Warnings
+ at cindex compiler warnings
+
+With few exceptions, developers should avoid the configuration option
+ at samp{--disable-werror} when building @value{GDBN}.  The exceptions
+are listed in the file @file{gdb/MAINTAINERS}.  The default, when
+building with @sc{gcc}, is @samp{--enable-werror}.
+
+This option causes @value{GDBN} (when built using GCC) to be compiled
+with a carefully selected list of compiler warning flags.  Any warnings
+from those flags are treated as errors.
+
+The current list of warning flags includes:
+
+ at table @samp
+ at item -Wall
+Recommended @sc{gcc} warnings.
+
+ at item -Wdeclaration-after-statement
+
+ at sc{gcc} 3.x (and later) and @sc{c99} allow declarations mixed with
+code, but @sc{gcc} 2.x and @sc{c89} do not.
+
+ at item -Wpointer-arith
+
+ at item -Wformat-nonliteral
+Non-literal format strings, with a few exceptions, are bugs - they
+might contain unintended user-supplied format specifiers.
+Since @value{GDBN} uses the @code{format printf} attribute on all
+ at code{printf} like functions this checks not just @code{printf} calls
+but also calls to functions such as @code{fprintf_unfiltered}.
+
+ at item -Wno-pointer-sign
+In version 4.0, GCC began warning about pointer argument passing or
+assignment even when the source and destination differed only in
+signedness.  However, most @value{GDBN} code doesn't distinguish
+carefully between @code{char} and @code{unsigned char}.  In early 2006
+the @value{GDBN} developers decided correcting these warnings wasn't
+worth the time it would take.
+
+ at item -Wno-unused-parameter
+Due to the way that @value{GDBN} is implemented many functions have
+unused parameters.  Consequently this warning is avoided.  The macro
+ at code{ATTRIBUTE_UNUSED} is not used as it leads to false negatives ---
+it is not an error to have @code{ATTRIBUTE_UNUSED} on a parameter that
+is being used.
+
+ at item -Wno-unused
+ at itemx -Wno-switch
+ at itemx -Wno-char-subscripts
+These are warnings which might be useful for @value{GDBN}, but are
+currently too noisy to enable with @samp{-Werror}.
+
+ at end table
+
+ at section Internal Error Recovery
+
+During its execution, @value{GDBN} can encounter two types of errors.
+User errors and internal errors.  User errors include not only a user
+entering an incorrect command but also problems arising from corrupt
+object files and system errors when interacting with the target.
+Internal errors include situations where @value{GDBN} has detected, at
+run time, a corrupt or erroneous situation.
+
+When reporting an internal error, @value{GDBN} uses
+ at code{internal_error} and @code{gdb_assert}.
+
+ at value{GDBN} must not call @code{abort} or @code{assert}.
+
+ at emph{Pragmatics: There is no @code{internal_warning} function.  Either
+the code detected a user error, recovered from it and issued a
+ at code{warning} or the code failed to correctly recover from the user
+error and issued an @code{internal_error}.}
+
+ at section Command Names
+
+GDB U/I commands are written @samp{foo-bar}, not @samp{foo_bar}.
+
+ at section Clean Design and Portable Implementation
+
+ at cindex design
+In addition to getting the syntax right, there's the little question of
+semantics.  Some things are done in certain ways in @value{GDBN} because long
+experience has shown that the more obvious ways caused various kinds of
+trouble.
+
+ at cindex assumptions about targets
+You can't assume the byte order of anything that comes from a target
+(including @var{value}s, object files, and instructions).  Such things
+must be byte-swapped using @code{SWAP_TARGET_AND_HOST} in
+ at value{GDBN}, or one of the swap routines defined in @file{bfd.h},
+such as @code{bfd_get_32}.
+
+You can't assume that you know what interface is being used to talk to
+the target system.  All references to the target must go through the
+current @code{target_ops} vector.
+
+You can't assume that the host and target machines are the same machine
+(except in the ``native'' support modules).  In particular, you can't
+assume that the target machine's header files will be available on the
+host machine.  Target code must bring along its own header files --
+written from scratch or explicitly donated by their owner, to avoid
+copyright problems.
+
+ at cindex portability
+Insertion of new @code{#ifdef}'s will be frowned upon.  It's much better
+to write the code portably than to conditionalize it for various
+systems.
+
+ at cindex system dependencies
+New @code{#ifdef}'s which test for specific compilers or manufacturers
+or operating systems are unacceptable.  All @code{#ifdef}'s should test
+for features.  The information about which configurations contain which
+features should be segregated into the configuration files.  Experience
+has proven far too often that a feature unique to one particular system
+often creeps into other systems; and that a conditional based on some
+predefined macro for your current system will become worthless over
+time, as new versions of your system come out that behave differently
+with regard to this feature.
+
+Adding code that handles specific architectures, operating systems,
+target interfaces, or hosts, is not acceptable in generic code.
+
+ at cindex portable file name handling
+ at cindex file names, portability
+One particularly notorious area where system dependencies tend to
+creep in is handling of file names.  The mainline @value{GDBN} code
+assumes Posix semantics of file names: absolute file names begin with
+a forward slash @file{/}, slashes are used to separate leading
+directories, case-sensitive file names.  These assumptions are not
+necessarily true on non-Posix systems such as MS-Windows.  To avoid
+system-dependent code where you need to take apart or construct a file
+name, use the following portable macros:
+
+ at table @code
+ at findex HAVE_DOS_BASED_FILE_SYSTEM
+ at item HAVE_DOS_BASED_FILE_SYSTEM
+This preprocessing symbol is defined to a non-zero value on hosts
+whose filesystems belong to the MS-DOS/MS-Windows family.  Use this
+symbol to write conditional code which should only be compiled for
+such hosts.
+
+ at findex IS_DIR_SEPARATOR
+ at item IS_DIR_SEPARATOR (@var{c})
+Evaluates to a non-zero value if @var{c} is a directory separator
+character.  On Unix and GNU/Linux systems, only a slash @file{/} is
+such a character, but on Windows, both @file{/} and @file{\} will
+pass.
+
+ at findex IS_ABSOLUTE_PATH
+ at item IS_ABSOLUTE_PATH (@var{file})
+Evaluates to a non-zero value if @var{file} is an absolute file name.
+For Unix and GNU/Linux hosts, a name which begins with a slash
+ at file{/} is absolute.  On DOS and Windows, @file{d:/foo} and
+ at file{x:\bar} are also absolute file names.
+
+ at findex FILENAME_CMP
+ at item FILENAME_CMP (@var{f1}, @var{f2})
+Calls a function which compares file names @var{f1} and @var{f2} as
+appropriate for the underlying host filesystem.  For Posix systems,
+this simply calls @code{strcmp}; on case-insensitive filesystems it
+will call @code{strcasecmp} instead.
+
+ at findex DIRNAME_SEPARATOR
+ at item DIRNAME_SEPARATOR
+Evaluates to a character which separates directories in
+ at code{PATH}-style lists, typically held in environment variables.
+This character is @samp{:} on Unix, @samp{;} on DOS and Windows.
+
+ at findex SLASH_STRING
+ at item SLASH_STRING
+This evaluates to a constant string you should use to produce an
+absolute filename from leading directories and the file's basename.
+ at code{SLASH_STRING} is @code{"/"} on most systems, but might be
+ at code{"\\"} for some Windows-based ports.
+ at end table
+
+In addition to using these macros, be sure to use portable library
+functions whenever possible.  For example, to extract a directory or a
+basename part from a file name, use the @code{dirname} and
+ at code{basename} library functions (available in @code{libiberty} for
+platforms which don't provide them), instead of searching for a slash
+with @code{strrchr}.
+
+Another way to generalize @value{GDBN} along a particular interface is with an
+attribute struct.  For example, @value{GDBN} has been generalized to handle
+multiple kinds of remote interfaces---not by @code{#ifdef}s everywhere, but
+by defining the @code{target_ops} structure and having a current target (as
+well as a stack of targets below it, for memory references).  Whenever
+something needs to be done that depends on which remote interface we are
+using, a flag in the current target_ops structure is tested (e.g.,
+ at code{target_has_stack}), or a function is called through a pointer in the
+current target_ops structure.  In this way, when a new remote interface
+is added, only one module needs to be touched---the one that actually
+implements the new remote interface.  Other examples of
+attribute-structs are BFD access to multiple kinds of object file
+formats, or @value{GDBN}'s access to multiple source languages.
+
+Please avoid duplicating code.  For example, in @value{GDBN} 3.x all
+the code interfacing between @code{ptrace} and the rest of
+ at value{GDBN} was duplicated in @file{*-dep.c}, and so changing
+something was very painful.  In @value{GDBN} 4.x, these have all been
+consolidated into @file{infptrace.c}.  @file{infptrace.c} can deal
+with variations between systems the same way any system-independent
+file would (hooks, @code{#if defined}, etc.), and machines which are
+radically different don't need to use @file{infptrace.c} at all.
+
+All debugging code must be controllable using the @samp{set debug
+ at var{module}} command.  Do not use @code{printf} to print trace
+messages.  Use @code{fprintf_unfiltered(gdb_stdlog, ...}.  Do not use
+ at code{#ifdef DEBUG}.
+
+ at node Porting GDB
+
+ at chapter Porting @value{GDBN}
+ at cindex porting to new machines
+
+Most of the work in making @value{GDBN} compile on a new machine is in
+specifying the configuration of the machine.  Porting a new
+architecture to @value{GDBN} can be broken into a number of steps.
+
+ at itemize @bullet
+
+ at item
+Ensure a @sc{bfd} exists for executables of the target architecture in
+the @file{bfd} directory.  If one does not exist, create one by
+modifying an existing similar one.
+
+ at item
+Implement a disassembler for the target architecture in the @file{opcodes}
+directory.
+
+ at item
+Define the target architecture in the @file{gdb} directory
+(@pxref{Adding a New Target, , Adding a New Target}).  Add the pattern
+for the new target to @file{configure.tgt} with the names of the files
+that contain the code.  By convention the target architecture
+definition for an architecture @var{arch} is placed in
+ at file{@var{arch}-tdep.c}.
+
+Within @file{@var{arch}-tdep.c} define the function
+ at code{_initialize_ at var{arch}_tdep} which calls
+ at code{gdbarch_register} to create the new @code{@w{struct
+gdbarch}} for the architecture.
+
+ at item
+If a new remote target is needed, consider adding a new remote target
+by defining a function
+ at code{_initialize_remote_ at var{arch}}.  However if at all possible
+use the @value{GDBN} @emph{Remote Serial Protocol} for this and implement
+the server side protocol independently with the target.
+
+ at item
+If desired implement a simulator in the @file{sim} directory.  This
+should create the library @file{libsim.a} implementing the interface
+in @file{remote-sim.h} (found in the @file{include} directory).
+
+ at item
+Build and test.  If desired, lobby the @sc{gdb} steering group to
+have the new port included in the main distribution!
+
+ at item
+Add a description of the new architecture to the main @value{GDBN} user
+guide (@pxref{Configuration Specific Information, , Configuration
+Specific Information, gdb, Debugging with @value{GDBN}}).
+
+ at end itemize
+
+ at node Versions and Branches
+ at chapter Versions and Branches
+
+ at section Versions
+
+ at value{GDBN}'s version is determined by the file
+ at file{gdb/version.in} and takes one of the following forms:
+
+ at table @asis
+ at item @var{major}. at var{minor}
+ at itemx @var{major}. at var{minor}. at var{patchlevel}
+an official release (e.g., 6.2 or 6.2.1)
+ at item @var{major}. at var{minor}. at var{patchlevel}. at var{YYYY}@var{MM}@var{DD}
+a snapshot taken at @var{YYYY}- at var{MM}- at var{DD}-gmt (e.g.,
+6.1.50.20020302, 6.1.90.20020304, or 6.1.0.20020308)
+ at item @var{major}. at var{minor}. at var{patchlevel}. at var{YYYY}@var{MM}@var{DD}-cvs
+a @sc{cvs} check out drawn on @var{YYYY}- at var{MM}- at var{DD} (e.g.,
+6.1.50.20020302-cvs, 6.1.90.20020304-cvs, or 6.1.0.20020308-cvs)
+ at item @var{major}. at var{minor}. at var{patchlevel}. at var{YYYY}@var{MM}@var{DD} (@var{vendor})
+a vendor specific release of @value{GDBN}, that while based on@*
+ at var{major}. at var{minor}. at var{patchlevel}. at var{YYYY}@var{MM}@var{DD},
+may include additional changes
+ at end table
+
+ at value{GDBN}'s mainline uses the @var{major} and @var{minor} version
+numbers from the most recent release branch, with a @var{patchlevel}
+of 50.  At the time each new release branch is created, the mainline's
+ at var{major} and @var{minor} version numbers are updated.
+
+ at value{GDBN}'s release branch is similar.  When the branch is cut, the
+ at var{patchlevel} is changed from 50 to 90.  As draft releases are
+drawn from the branch, the @var{patchlevel} is incremented.  Once the
+first release (@var{major}. at var{minor}) has been made, the
+ at var{patchlevel} is set to 0 and updates have an incremented
+ at var{patchlevel}.
+
+For snapshots, and @sc{cvs} check outs, it is also possible to
+identify the @sc{cvs} origin:
+
+ at table @asis
+ at item @var{major}. at var{minor}.50. at var{YYYY}@var{MM}@var{DD}
+drawn from the @sc{head} of mainline @sc{cvs} (e.g., 6.1.50.20020302)
+ at item @var{major}. at var{minor}.90. at var{YYYY}@var{MM}@var{DD}
+ at itemx @var{major}. at var{minor}.91. at var{YYYY}@var{MM}@var{DD} @dots{}
+drawn from a release branch prior to the release (e.g.,
+6.1.90.20020304)
+ at item @var{major}. at var{minor}.0. at var{YYYY}@var{MM}@var{DD}
+ at itemx @var{major}. at var{minor}.1. at var{YYYY}@var{MM}@var{DD} @dots{}
+drawn from a release branch after the release (e.g., 6.2.0.20020308)
+ at end table
+
+If the previous @value{GDBN} version is 6.1 and the current version is
+6.2, then, substituting 6 for @var{major} and 1 or 2 for @var{minor},
+here's an illustration of a typical sequence:
+
+ at smallexample
+     <HEAD>
+        |
+6.1.50.20020302-cvs
+        |
+        +--------------------------.
+        |                    <gdb_6_2-branch>
+        |                          |
+6.2.50.20020303-cvs        6.1.90 (draft #1)
+        |                          |
+6.2.50.20020304-cvs        6.1.90.20020304-cvs
+        |                          |
+6.2.50.20020305-cvs        6.1.91 (draft #2)
+        |                          |
+6.2.50.20020306-cvs        6.1.91.20020306-cvs
+        |                          |
+6.2.50.20020307-cvs        6.2 (release)
+        |                          |
+6.2.50.20020308-cvs        6.2.0.20020308-cvs
+        |                          |
+6.2.50.20020309-cvs        6.2.1 (update)
+        |                          |
+6.2.50.20020310-cvs         <branch closed>
+        |
+6.2.50.20020311-cvs
+        |
+        +--------------------------.
+        |                     <gdb_6_3-branch>
+        |                          |
+6.3.50.20020312-cvs        6.2.90 (draft #1)
+        |                          |
+ at end smallexample
+
+ at section Release Branches
+ at cindex Release Branches
+
+ at value{GDBN} draws a release series (6.2, 6.2.1, @dots{}) from a
+single release branch, and identifies that branch using the @sc{cvs}
+branch tags:
+
+ at smallexample
+gdb_ at var{major}_ at var{minor}- at var{YYYY}@var{MM}@var{DD}-branchpoint
+gdb_ at var{major}_ at var{minor}-branch
+gdb_ at var{major}_ at var{minor}- at var{YYYY}@var{MM}@var{DD}-release
+ at end smallexample
+
+ at emph{Pragmatics: To help identify the date at which a branch or
+release is made, both the branchpoint and release tags include the
+date that they are cut (@var{YYYY}@var{MM}@var{DD}) in the tag.  The
+branch tag, denoting the head of the branch, does not need this.}
+
+ at section Vendor Branches
+ at cindex vendor branches
+
+To avoid version conflicts, vendors are expected to modify the file
+ at file{gdb/version.in} to include a vendor unique alphabetic identifier
+(an official @value{GDBN} release never uses alphabetic characters in
+its version identifier).  E.g., @samp{6.2widgit2}, or @samp{6.2 (Widgit
+Inc Patch 2)}.
+
+ at section Experimental Branches
+ at cindex experimental branches
+
+ at subsection Guidelines
+
+ at value{GDBN} permits the creation of branches, cut from the @sc{cvs}
+repository, for experimental development.  Branches make it possible
+for developers to share preliminary work, and maintainers to examine
+significant new developments.
+
+The following are a set of guidelines for creating such branches:
+
+ at table @emph
+
+ at item a branch has an owner
+The owner can set further policy for a branch, but may not change the
+ground rules.  In particular, they can set a policy for commits (be it
+adding more reviewers or deciding who can commit).
+
+ at item all commits are posted
+All changes committed to a branch shall also be posted to
+ at email{gdb-patches@@sourceware.org, the @value{GDBN} patches
+mailing list}.  While commentary on such changes are encouraged, people
+should remember that the changes only apply to a branch.
+
+ at item all commits are covered by an assignment
+This ensures that all changes belong to the Free Software Foundation,
+and avoids the possibility that the branch may become contaminated.
+
+ at item a branch is focused
+A focused branch has a single objective or goal, and does not contain
+unnecessary or irrelevant changes.  Cleanups, where identified, being
+be pushed into the mainline as soon as possible.
+
+ at item a branch tracks mainline
+This keeps the level of divergence under control.  It also keeps the
+pressure on developers to push cleanups and other stuff into the
+mainline.
+
+ at item a branch shall contain the entire @value{GDBN} module
+The @value{GDBN} module @code{gdb} should be specified when creating a
+branch (branches of individual files should be avoided).  @xref{Tags}.
+
+ at item a branch shall be branded using @file{version.in}
+The file @file{gdb/version.in} shall be modified so that it identifies
+the branch @var{owner} and branch @var{name}, e.g.,
+ at samp{6.2.50.20030303_owner_name} or @samp{6.2 (Owner Name)}.
+
+ at end table
+
+ at subsection Tags
+ at anchor{Tags}
+
+To simplify the identification of @value{GDBN} branches, the following
+branch tagging convention is strongly recommended:
+
+ at table @code
+
+ at item @var{owner}_ at var{name}- at var{YYYYMMDD}-branchpoint
+ at itemx @var{owner}_ at var{name}- at var{YYYYMMDD}-branch
+The branch point and corresponding branch tag.  @var{YYYYMMDD} is the
+date that the branch was created.  A branch is created using the
+sequence: @anchor{experimental branch tags}
+ at smallexample
+cvs rtag @var{owner}_ at var{name}- at var{YYYYMMDD}-branchpoint gdb
+cvs rtag -b -r @var{owner}_ at var{name}- at var{YYYYMMDD}-branchpoint \
+   @var{owner}_ at var{name}- at var{YYYYMMDD}-branch gdb
+ at end smallexample
+
+ at item @var{owner}_ at var{name}- at var{yyyymmdd}-mergepoint
+The tagged point, on the mainline, that was used when merging the branch
+on @var{yyyymmdd}.  To merge in all changes since the branch was cut,
+use a command sequence like:
+ at smallexample
+cvs rtag @var{owner}_ at var{name}- at var{yyyymmdd}-mergepoint gdb
+cvs update \
+   -j at var{owner}_ at var{name}- at var{YYYYMMDD}-branchpoint
+   -j at var{owner}_ at var{name}- at var{yyyymmdd}-mergepoint
+ at end smallexample
+ at noindent
+Similar sequences can be used to just merge in changes since the last
+merge.
+
+ at end table
+
+ at noindent
+For further information on @sc{cvs}, see
+ at uref{http://www.gnu.org/software/cvs/, Concurrent Versions System}.
+ 
+ at node Start of New Year Procedure
+ at chapter Start of New Year Procedure
+ at cindex new year procedure
+
+At the start of each new year, the following actions should be performed:
+
+ at itemize @bullet
+ at item
+Rotate the ChangeLog file
+
+The current @file{ChangeLog} file should be renamed into
+ at file{ChangeLog-YYYY} where YYYY is the year that has just passed.
+A new @file{ChangeLog} file should be created, and its contents should
+contain a reference to the previous ChangeLog.  The following should
+also be preserved at the end of the new ChangeLog, in order to provide
+the appropriate settings when editing this file with Emacs:
+ at smallexample
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+coding: utf-8
+End:
+ at end smallexample
+
+ at item
+Add an entry for the newly created ChangeLog file (@file{ChangeLog-YYYY})
+in @file{gdb/config/djgpp/fnchange.lst}.
+
+ at item
+Update the copyright year in the startup message
+
+Update the copyright year in:
+ at itemize @bullet
+  @item
+  file @file{top.c}, function @code{print_gdb_version}
+  @item
+  file @file{gdbserver/server.c}, function @code{gdbserver_version}
+  @item
+  file @file{gdbserver/gdbreplay.c}, function @code{gdbreplay_version}
+ at end itemize
+
+ at item
+Run the @file{copyright.py} Python script to add the new year in the copyright
+notices of most source files.  This script has been tested with Python
+2.6 and 2.7.
+
+ at end itemize
+
+ at node Releasing GDB
+
+ at chapter Releasing @value{GDBN}
+ at cindex making a new release of gdb
+
+ at section Branch Commit Policy
+
+The branch commit policy is pretty slack.  @value{GDBN} releases 5.0,
+5.1 and 5.2 all used the below:
+
+ at itemize @bullet
+ at item
+The @file{gdb/MAINTAINERS} file still holds.
+ at item
+Don't fix something on the branch unless/until it is also fixed in the
+trunk.  If this isn't possible, mentioning it in the @file{gdb/PROBLEMS}
+file is better than committing a hack.
+ at item
+When considering a patch for the branch, suggested criteria include:
+Does it fix a build?  Does it fix the sequence @kbd{break main; run}
+when debugging a static binary?
+ at item
+The further a change is from the core of @value{GDBN}, the less likely
+the change will worry anyone (e.g., target specific code).
+ at item
+Only post a proposal to change the core of @value{GDBN} after you've
+sent individual bribes to all the people listed in the
+ at file{MAINTAINERS} file @t{;-)}
+ at end itemize
+
+ at emph{Pragmatics: Provided updates are restricted to non-core
+functionality there is little chance that a broken change will be fatal.
+This means that changes such as adding a new architectures or (within
+reason) support for a new host are considered acceptable.}
+
+
+ at section Obsoleting code
+
+Before anything else, poke the other developers (and around the source
+code) to see if there is anything that can be removed from @value{GDBN}
+(an old target, an unused file).
+
+Obsolete code is identified by adding an @code{OBSOLETE} prefix to every
+line.  Doing this means that it is easy to identify something that has
+been obsoleted when greping through the sources.
+
+The process is done in stages --- this is mainly to ensure that the
+wider @value{GDBN} community has a reasonable opportunity to respond.
+Remember, everything on the Internet takes a week.
+
+ at enumerate
+ at item
+Post the proposal on @email{gdb@@sourceware.org, the GDB mailing
+list} Creating a bug report to track the task's state, is also highly
+recommended.
+ at item
+Wait a week or so.
+ at item
+Post the proposal on @email{gdb-announce@@sourceware.org, the GDB
+Announcement mailing list}.
+ at item
+Wait a week or so.
+ at item
+Go through and edit all relevant files and lines so that they are
+prefixed with the word @code{OBSOLETE}.
+ at item
+Wait until the next GDB version, containing this obsolete code, has been
+released.
+ at item
+Remove the obsolete code.
+ at end enumerate
+
+ at noindent
+ at emph{Maintainer note: While removing old code is regrettable it is
+hopefully better for @value{GDBN}'s long term development.  Firstly it
+helps the developers by removing code that is either no longer relevant
+or simply wrong.  Secondly since it removes any history associated with
+the file (effectively clearing the slate) the developer has a much freer
+hand when it comes to fixing broken files.}
+
+
+
+ at section Before the Branch
+
+The most important objective at this stage is to find and fix simple
+changes that become a pain to track once the branch is created.  For
+instance, configuration problems that stop @value{GDBN} from even
+building.  If you can't get the problem fixed, document it in the
+ at file{gdb/PROBLEMS} file.
+
+ at subheading Prompt for @file{gdb/NEWS}
+
+People always forget.  Send a post reminding them but also if you know
+something interesting happened add it yourself.  The @code{schedule}
+script will mention this in its e-mail.
+
+ at subheading Review @file{gdb/README}
+
+Grab one of the nightly snapshots and then walk through the
+ at file{gdb/README} looking for anything that can be improved.  The
+ at code{schedule} script will mention this in its e-mail.
+
+ at subheading Refresh any imported files.
+
+A number of files are taken from external repositories.  They include:
+
+ at itemize @bullet
+ at item
+ at file{texinfo/texinfo.tex}
+ at item
+ at file{config.guess} et.@: al.@: (see the top-level @file{MAINTAINERS}
+file)
+ at item
+ at file{etc/standards.texi}, @file{etc/make-stds.texi}
+ at end itemize
+
+ at subheading Check the ARI
+
+ at uref{http://sourceware.org/gdb/ari,,A.R.I.} is an @code{awk} script
+(Awk Regression Index ;-) that checks for a number of errors and coding
+conventions.  The checks include things like using @code{malloc} instead
+of @code{xmalloc} and file naming problems.  There shouldn't be any
+regressions.
+
+ at subsection Review the bug data base
+
+Close anything obviously fixed.
+
+ at subsection Check all cross targets build
+
+The targets are listed in @file{gdb/MAINTAINERS}.
+
+
+ at section Cut the Branch
+
+ at subheading Create the branch
+
+ at smallexample
+$  u=5.1
+$  v=5.2
+$  V=`echo $v | sed 's/\./_/g'`
+$  D=`date -u +%Y-%m-%d`
+$  echo $u $V $D
+5.1 5_2 2002-03-03
+$  echo cvs -f -d :ext:sourceware.org:/cvs/src rtag \
+-D $D-gmt gdb_$V-$D-branchpoint insight
+cvs -f -d :ext:sourceware.org:/cvs/src rtag
+-D 2002-03-03-gmt gdb_5_2-2002-03-03-branchpoint insight
+$  ^echo ^^
+...
+$  echo cvs -f -d :ext:sourceware.org:/cvs/src rtag \
+-b -r gdb_$V-$D-branchpoint gdb_$V-branch insight
+cvs -f -d :ext:sourceware.org:/cvs/src rtag \
+-b -r gdb_5_2-2002-03-03-branchpoint gdb_5_2-branch insight
+$  ^echo ^^
+...
+$
+ at end smallexample
+
+ at itemize @bullet
+ at item
+By using @kbd{-D YYYY-MM-DD-gmt}, the branch is forced to an exact
+date/time.
+ at item
+The trunk is first tagged so that the branch point can easily be found.
+ at item
+Insight, which includes @value{GDBN}, is tagged at the same time.
+ at item
+ at file{version.in} gets bumped to avoid version number conflicts.
+ at item
+The reading of @file{.cvsrc} is disabled using @file{-f}.
+ at end itemize
+
+ at subheading Update @file{version.in}
+
+ at smallexample
+$  u=5.1
+$  v=5.2
+$  V=`echo $v | sed 's/\./_/g'`
+$  echo $u $v$V
+5.1 5_2
+$  cd /tmp
+$  echo cvs -f -d :ext:sourceware.org:/cvs/src co \
+-r gdb_$V-branch src/gdb/version.in
+cvs -f -d :ext:sourceware.org:/cvs/src co
+ -r gdb_5_2-branch src/gdb/version.in
+$  ^echo ^^
+U src/gdb/version.in
+$  cd src/gdb
+$  echo $u.90-0000-00-00-cvs > version.in
+$  cat version.in
+5.1.90-0000-00-00-cvs
+$  cvs -f commit version.in
+ at end smallexample
+
+ at itemize @bullet
+ at item
+ at file{0000-00-00} is used as a date to pump prime the version.in update
+mechanism.
+ at item
+ at file{.90} and the previous branch version are used as fairly arbitrary
+initial branch version number.
+ at end itemize
+
+
+ at subheading Update the web and news pages
+
+Something?
+
+ at subheading Tweak cron to track the new branch
+
+The file @file{gdbadmin/cron/crontab} contains gdbadmin's cron table.
+This file needs to be updated so that:
+
+ at itemize @bullet
+ at item
+A daily timestamp is added to the file @file{version.in}.
+ at item
+The new branch is included in the snapshot process.
+ at end itemize
+
+ at noindent
+See the file @file{gdbadmin/cron/README} for how to install the updated
+cron table.
+
+The file @file{gdbadmin/ss/README} should also be reviewed to reflect
+any changes.  That file is copied to both the branch/ and current/
+snapshot directories.
+
+
+ at subheading Update the NEWS and README files
+
+The @file{NEWS} file needs to be updated so that on the branch it refers
+to @emph{changes in the current release} while on the trunk it also
+refers to @emph{changes since the current release}.
+
+The @file{README} file needs to be updated so that it refers to the
+current release.
+
+ at subheading Post the branch info
+
+Send an announcement to the mailing lists:
+
+ at itemize @bullet
+ at item
+ at email{gdb-announce@@sourceware.org, GDB Announcement mailing list}
+ at item
+ at email{gdb@@sourceware.org, GDB Discussion mailing list} and
+ at email{gdb-testers@@sourceware.org, GDB Testers mailing list}
+ at end itemize
+
+ at emph{Pragmatics: The branch creation is sent to the announce list to
+ensure that people people not subscribed to the higher volume discussion
+list are alerted.}
+
+The announcement should include:
+
+ at itemize @bullet
+ at item
+The branch tag.
+ at item
+How to check out the branch using CVS.
+ at item
+The date/number of weeks until the release.
+ at item
+The branch commit policy still holds.
+ at end itemize
+
+ at section Stabilize the branch
+
+Something goes here.
+
+ at section Create a Release
+
+The process of creating and then making available a release is broken
+down into a number of stages.  The first part addresses the technical
+process of creating a releasable tar ball.  The later stages address the
+process of releasing that tar ball.
+
+When making a release candidate just the first section is needed.
+
+ at subsection Create a release candidate
+
+The objective at this stage is to create a set of tar balls that can be
+made available as a formal release (or as a less formal release
+candidate).
+
+ at subsubheading Freeze the branch
+
+Send out an e-mail notifying everyone that the branch is frozen to
+ at email{gdb-patches@@sourceware.org}.
+
+ at subsubheading Establish a few defaults.
+
+ at smallexample
+$  b=gdb_5_2-branch
+$  v=5.2
+$  t=/sourceware/snapshot-tmp/gdbadmin-tmp
+$  echo $t/$b/$v
+/sourceware/snapshot-tmp/gdbadmin-tmp/gdb_5_2-branch/5.2
+$  mkdir -p $t/$b/$v
+$  cd $t/$b/$v
+$  pwd
+/sourceware/snapshot-tmp/gdbadmin-tmp/gdb_5_2-branch/5.2
+$  which autoconf
+/home/gdbadmin/bin/autoconf
+$
+ at end smallexample
+
+ at noindent
+Notes:
+
+ at itemize @bullet
+ at item
+Check the @code{autoconf} version carefully.  You want to be using the
+version documented in the toplevel @file{README-maintainer-mode} file.
+It is very unlikely that the version of @code{autoconf} installed in
+system directories (e.g., @file{/usr/bin/autoconf}) is correct.
+ at end itemize
+
+ at subsubheading Check out the relevant modules:
+
+ at smallexample
+$  for m in gdb insight
+do
+( mkdir -p $m && cd $m && cvs -q -f -d /cvs/src co -P -r $b $m )
+done
+$
+ at end smallexample
+
+ at noindent
+Note:
+
+ at itemize @bullet
+ at item
+The reading of @file{.cvsrc} is disabled (@file{-f}) so that there isn't
+any confusion between what is written here and what your local
+ at code{cvs} really does.
+ at end itemize
+
+ at subsubheading Update relevant files.
+
+ at table @file
+
+ at item gdb/NEWS
+
+Major releases get their comments added as part of the mainline.  Minor
+releases should probably mention any significant bugs that were fixed.
+
+Don't forget to include the @file{ChangeLog} entry.
+
+ at smallexample
+$  emacs gdb/src/gdb/NEWS
+...
+c-x 4 a
+...
+c-x c-s c-x c-c
+$  cp gdb/src/gdb/NEWS insight/src/gdb/NEWS 
+$  cp gdb/src/gdb/ChangeLog insight/src/gdb/ChangeLog 
+ at end smallexample
+
+ at item gdb/README
+
+You'll need to update:
+
+ at itemize @bullet
+ at item
+The version.
+ at item
+The update date.
+ at item
+Who did it.
+ at end itemize
+
+ at smallexample
+$  emacs gdb/src/gdb/README
+...
+c-x 4 a
+...
+c-x c-s c-x c-c
+$  cp gdb/src/gdb/README insight/src/gdb/README 
+$  cp gdb/src/gdb/ChangeLog insight/src/gdb/ChangeLog 
+ at end smallexample
+
+ at emph{Maintainer note: Hopefully the @file{README} file was reviewed
+before the initial branch was cut so just a simple substitute is needed
+to get it updated.}
+
+ at emph{Maintainer note: Other projects generate @file{README} and
+ at file{INSTALL} from the core documentation.  This might be worth
+pursuing.}
+
+ at item gdb/version.in
+
+ at smallexample
+$  echo $v > gdb/src/gdb/version.in
+$  cat gdb/src/gdb/version.in
+5.2
+$  emacs gdb/src/gdb/version.in
+...
+c-x 4 a
+... Bump to version ...
+c-x c-s c-x c-c
+$  cp gdb/src/gdb/version.in insight/src/gdb/version.in 
+$  cp gdb/src/gdb/ChangeLog insight/src/gdb/ChangeLog 
+ at end smallexample
+
+ at end table
+
+ at subsubheading Do the dirty work
+
+This is identical to the process used to create the daily snapshot.
+
+ at smallexample
+$  for m in gdb insight
+do
+( cd $m/src && gmake -f src-release $m.tar )
+done
+ at end smallexample
+
+If the top level source directory does not have @file{src-release}
+(@value{GDBN} version 5.3.1 or earlier), try these commands instead:
+
+ at smallexample
+$  for m in gdb insight
+do
+( cd $m/src && gmake -f Makefile.in $m.tar )
+done
+ at end smallexample
+
+ at subsubheading Check the source files
+
+You're looking for files that have mysteriously disappeared.
+ at kbd{distclean} has the habit of deleting files it shouldn't.  Watch out
+for the @file{version.in} update @kbd{cronjob}.
+
+ at smallexample
+$  ( cd gdb/src && cvs -f -q -n update )
+M djunpack.bat
+? gdb-5.1.91.tar
+? proto-toplev
+ at dots{} lots of generated files @dots{}
+M gdb/ChangeLog
+M gdb/NEWS
+M gdb/README
+M gdb/version.in
+ at dots{} lots of generated files @dots{}
+$
+ at end smallexample
+
+ at noindent
+ at emph{Don't worry about the @file{gdb.info-??} or
+ at file{gdb/p-exp.tab.c}.  They were generated (and yes @file{gdb.info-1}
+was also generated only something strange with CVS means that they
+didn't get suppressed).  Fixing it would be nice though.}
+
+ at subsubheading Create compressed versions of the release
+
+ at smallexample
+$  cp */src/*.tar .
+$  cp */src/*.bz2 .
+$  ls -F
+gdb/ gdb-5.2.tar insight/ insight-5.2.tar
+$  for m in gdb insight
+do
+bzip2 -v -9 -c $m-$v.tar > $m-$v.tar.bz2
+gzip -v -9 -c $m-$v.tar > $m-$v.tar.gz
+done
+$
+ at end smallexample
+
+ at noindent
+Note:
+
+ at itemize @bullet
+ at item
+A pipe such as @kbd{bunzip2 < xxx.bz2 | gzip -9 > xxx.gz} is not since,
+in that mode, @code{gzip} does not know the name of the file and, hence,
+can not include it in the compressed file.  This is also why the release
+process runs @code{tar} and @code{bzip2} as separate passes.
+ at end itemize
+
+ at subsection Sanity check the tar ball
+
+Pick a popular machine (Solaris/PPC?) and try the build on that.
+
+ at smallexample
+$  bunzip2 < gdb-5.2.tar.bz2 | tar xpf -
+$  cd gdb-5.2
+$  ./configure 
+$  make
+ at dots{}
+$  ./gdb/gdb ./gdb/gdb
+GNU gdb 5.2
+ at dots{}
+(gdb)  b main
+Breakpoint 1 at 0x80732bc: file main.c, line 734.
+(gdb)  run
+Starting program: /tmp/gdb-5.2/gdb/gdb 
+
+Breakpoint 1, main (argc=1, argv=0xbffff8b4) at main.c:734
+734       catch_errors (captured_main, &args, "", RETURN_MASK_ALL);
+(gdb)  print args
+$1 = @{argc = 136426532, argv = 0x821b7f0@}
+(gdb)
+ at end smallexample
+
+ at subsection Make a release candidate available
+
+If this is a release candidate then the only remaining steps are:
+
+ at enumerate
+ at item
+Commit @file{version.in} and @file{ChangeLog}
+ at item
+Tweak @file{version.in} (and @file{ChangeLog} to read
+ at var{L}. at var{M}. at var{N}-0000-00-00-cvs so that the version update
+process can restart.
+ at item
+Make the release candidate available in
+ at uref{ftp://sourceware.org/pub/gdb/snapshots/branch}
+ at item
+Notify the relevant mailing lists ( @email{gdb@@sourceware.org} and
+ at email{gdb-testers@@sourceware.org} that the candidate is available.
+ at end enumerate
+
+ at subsection Make a formal release available
+
+(And you thought all that was required was to post an e-mail.)
+
+ at subsubheading Install on sware
+
+Copy the new files to both the release and the old release directory:
+
+ at smallexample
+$  cp *.bz2 *.gz ~ftp/pub/gdb/old-releases/
+$  cp *.bz2 *.gz ~ftp/pub/gdb/releases
+ at end smallexample
+
+ at noindent
+Clean up the releases directory so that only the most recent releases
+are available (e.g.@: keep 5.2 and 5.2.1 but remove 5.1):
+
+ at smallexample
+$  cd ~ftp/pub/gdb/releases
+$  rm @dots{}
+ at end smallexample
+
+ at noindent
+Update the file @file{README} and @file{.message} in the releases
+directory:
+
+ at smallexample
+$  vi README
+ at dots{}
+$  rm -f .message
+$  ln README .message
+ at end smallexample
+
+ at subsubheading Update the web pages.
+
+ at table @file
+
+ at item htdocs/download/ANNOUNCEMENT
+This file, which is posted as the official announcement, includes:
+ at itemize @bullet
+ at item
+General announcement.
+ at item
+News.  If making an @var{M}. at var{N}.1 release, retain the news from
+earlier @var{M}. at var{N} release.
+ at item
+Errata.
+ at end itemize
+
+ at item htdocs/index.html
+ at itemx htdocs/news/index.html
+ at itemx htdocs/download/index.html
+These files include:
+ at itemize @bullet
+ at item
+Announcement of the most recent release.
+ at item
+News entry (remember to update both the top level and the news directory).
+ at end itemize
+These pages also need to be regenerate using @code{index.sh}.
+
+ at item download/onlinedocs/
+You need to find the magic command that is used to generate the online
+docs from the @file{.tar.bz2}.  The best way is to look in the output
+from one of the nightly @code{cron} jobs and then just edit accordingly.
+Something like:
+
+ at smallexample
+$  ~/ss/update-web-docs \
+ ~ftp/pub/gdb/releases/gdb-5.2.tar.bz2 \
+ $PWD/www \
+ /www/sourceware/htdocs/gdb/download/onlinedocs \
+ gdb
+ at end smallexample
+
+ at item download/ari/
+Just like the online documentation.  Something like:
+
+ at smallexample
+$  /bin/sh ~/ss/update-web-ari \
+ ~ftp/pub/gdb/releases/gdb-5.2.tar.bz2 \
+ $PWD/www \
+ /www/sourceware/htdocs/gdb/download/ari \
+ gdb
+ at end smallexample
+
+ at end table
+
+ at subsubheading Shadow the pages onto gnu
+
+Something goes here.
+
+
+ at subsubheading Install the @value{GDBN} tar ball on GNU
+
+At the time of writing, the GNU machine was @kbd{gnudist.gnu.org} in
+ at file{~ftp/gnu/gdb}.
+
+ at subsubheading Make the @file{ANNOUNCEMENT}
+
+Post the @file{ANNOUNCEMENT} file you created above to:
+
+ at itemize @bullet
+ at item
+ at email{gdb-announce@@sourceware.org, GDB Announcement mailing list}
+ at item
+ at email{info-gnu@@gnu.org, General GNU Announcement list} (but delay it a
+day or so to let things get out)
+ at item
+ at email{bug-gdb@@gnu.org, GDB Bug Report mailing list}
+ at end itemize
+
+ at subsection Cleanup
+
+The release is out but you're still not finished.
+
+ at subsubheading Commit outstanding changes
+
+In particular you'll need to commit any changes to:
+
+ at itemize @bullet
+ at item
+ at file{gdb/ChangeLog}
+ at item
+ at file{gdb/version.in}
+ at item
+ at file{gdb/NEWS}
+ at item
+ at file{gdb/README}
+ at end itemize
+
+ at subsubheading Tag the release
+
+Something like:
+
+ at smallexample
+$  d=`date -u +%Y-%m-%d`
+$  echo $d
+2002-01-24
+$  ( cd insight/src/gdb && cvs -f -q update )
+$  ( cd insight/src && cvs -f -q tag gdb_5_2-$d-release )
+ at end smallexample
+
+Insight is used since that contains more of the release than
+ at value{GDBN}.
+
+ at subsubheading Mention the release on the trunk
+
+Just put something in the @file{ChangeLog} so that the trunk also
+indicates when the release was made.
+
+ at subsubheading Restart @file{gdb/version.in}
+
+If @file{gdb/version.in} does not contain an ISO date such as
+ at kbd{2002-01-24} then the daily @code{cronjob} won't update it.  Having
+committed all the release changes it can be set to
+ at file{5.2.0_0000-00-00-cvs} which will restart things (yes the @kbd{_}
+is important - it affects the snapshot process).
+
+Don't forget the @file{ChangeLog}.
+
+ at subsubheading Merge into trunk
+
+The files committed to the branch may also need changes merged into the
+trunk.
+
+ at subsubheading Revise the release schedule
+
+Post a revised release schedule to @email{gdb@@sourceware.org, GDB
+Discussion List} with an updated announcement.  The schedule can be
+generated by running:
+
+ at smallexample
+$  ~/ss/schedule `date +%s` schedule
+ at end smallexample
+
+ at noindent
+The first parameter is approximate date/time in seconds (from the epoch)
+of the most recent release.
+
+Also update the schedule @code{cronjob}.
+
+ at section Post release
+
+Remove any @code{OBSOLETE} code.
+
+ at node Testsuite
+
+ at chapter Testsuite
+ at cindex test suite
+
+The testsuite is an important component of the @value{GDBN} package.
+While it is always worthwhile to encourage user testing, in practice
+this is rarely sufficient; users typically use only a small subset of
+the available commands, and it has proven all too common for a change
+to cause a significant regression that went unnoticed for some time.
+
+The @value{GDBN} testsuite uses the DejaGNU testing framework.  The
+tests themselves are calls to various @code{Tcl} procs; the framework
+runs all the procs and summarizes the passes and fails.
+
+ at section Using the Testsuite
+
+ at cindex running the test suite
+To run the testsuite, simply go to the @value{GDBN} object directory (or to the
+testsuite's objdir) and type @code{make check}.  This just sets up some
+environment variables and invokes DejaGNU's @code{runtest} script.  While
+the testsuite is running, you'll get mentions of which test file is in use,
+and a mention of any unexpected passes or fails.  When the testsuite is
+finished, you'll get a summary that looks like this:
+
+ at smallexample
+                === gdb Summary ===
+
+# of expected passes            6016
+# of unexpected failures        58
+# of unexpected successes       5
+# of expected failures          183
+# of unresolved testcases       3
+# of untested testcases         5
+ at end smallexample
+
+To run a specific test script, type:
+ at example
+make check RUNTESTFLAGS='@var{tests}'
+ at end example
+where @var{tests} is a list of test script file names, separated by
+spaces.
+
+If you use GNU make, you can use its @option{-j} option to run the
+testsuite in parallel.  This can greatly reduce the amount of time it
+takes for the testsuite to run.  In this case, if you set
+ at code{RUNTESTFLAGS} then, by default, the tests will be run serially
+even under @option{-j}.  You can override this and force a parallel run
+by setting the @code{make} variable @code{FORCE_PARALLEL} to any
+non-empty value.  Note that the parallel @kbd{make check} assumes
+that you want to run the entire testsuite, so it is not compatible
+with some dejagnu options, like @option{--directory}.
+
+The ideal test run consists of expected passes only; however, reality
+conspires to keep us from this ideal.  Unexpected failures indicate
+real problems, whether in @value{GDBN} or in the testsuite.  Expected
+failures are still failures, but ones which have been decided are too
+hard to deal with at the time; for instance, a test case might work
+everywhere except on AIX, and there is no prospect of the AIX case
+being fixed in the near future.  Expected failures should not be added
+lightly, since you may be masking serious bugs in @value{GDBN}.
+Unexpected successes are expected fails that are passing for some
+reason, while unresolved and untested cases often indicate some minor
+catastrophe, such as the compiler being unable to deal with a test
+program.
+
+When making any significant change to @value{GDBN}, you should run the
+testsuite before and after the change, to confirm that there are no
+regressions.  Note that truly complete testing would require that you
+run the testsuite with all supported configurations and a variety of
+compilers; however this is more than really necessary.  In many cases
+testing with a single configuration is sufficient.  Other useful
+options are to test one big-endian (Sparc) and one little-endian (x86)
+host, a cross config with a builtin simulator (powerpc-eabi,
+mips-elf), or a 64-bit host (Alpha).
+
+If you add new functionality to @value{GDBN}, please consider adding
+tests for it as well; this way future @value{GDBN} hackers can detect
+and fix their changes that break the functionality you added.
+Similarly, if you fix a bug that was not previously reported as a test
+failure, please add a test case for it.  Some cases are extremely
+difficult to test, such as code that handles host OS failures or bugs
+in particular versions of compilers, and it's OK not to try to write
+tests for all of those.
+
+DejaGNU supports separate build, host, and target machines.  However,
+some @value{GDBN} test scripts do not work if the build machine and
+the host machine are not the same.  In such an environment, these scripts
+will give a result of ``UNRESOLVED'', like this:
+
+ at smallexample
+UNRESOLVED: gdb.base/example.exp: This test script does not work on a remote host.
+ at end smallexample
+
+ at section Testsuite Parameters
+
+Several variables exist to modify the behavior of the testsuite.
+
+ at itemize @bullet
+
+ at item @code{TRANSCRIPT}
+
+Sometimes it is convenient to get a transcript of the commands which
+the testsuite sends to @value{GDBN}.  For example, if @value{GDBN}
+crashes during testing, a transcript can be used to more easily
+reconstruct the failure when running @value{GDBN} under @value{GDBN}.
+
+You can instruct the @value{GDBN} testsuite to write transcripts by
+setting the DejaGNU variable @code{TRANSCRIPT} (to any value)
+before invoking @code{runtest} or @kbd{make check}.  The transcripts
+will be written into DejaGNU's output directory.  One transcript will
+be made for each invocation of @value{GDBN}; they will be named
+ at file{transcript. at var{n}}, where @var{n} is an integer.  The first
+line of the transcript file will show how @value{GDBN} was invoked;
+each subsequent line is a command sent as input to @value{GDBN}.
+
+ at smallexample
+make check RUNTESTFLAGS=TRANSCRIPT=y
+ at end smallexample
+
+Note that the transcript is not always complete.  In particular, tests
+of completion can yield partial command lines.
+
+ at item @code{GDB}
+
+Sometimes one wishes to test a different @value{GDBN} than the one in the build
+directory.  For example, one may wish to run the testsuite on
+ at file{/usr/bin/gdb}.
+
+ at smallexample
+make check RUNTESTFLAGS=GDB=/usr/bin/gdb
+ at end smallexample
+
+ at item @code{GDBSERVER}
+
+When testing a different @value{GDBN}, it is often useful to also test a
+different gdbserver.
+
+ at smallexample
+make check RUNTESTFLAGS="GDB=/usr/bin/gdb GDBSERVER=/usr/bin/gdbserver"
+ at end smallexample
+
+ at item @code{INTERNAL_GDBFLAGS}
+
+When running the testsuite normally one doesn't want whatever is in
+ at file{~/.gdbinit} to interfere with the tests, therefore the test harness
+passes @option{-nx} to @value{GDBN}.  One also doesn't want any windowed
+version of @value{GDBN}, e.g., @samp{gdb -tui}, to run.
+This is achieved via @code{INTERNAL_GDBFLAGS}.  
+
+ at smallexample
+set INTERNAL_GDBFLAGS "-nw -nx"
+ at end smallexample
+
+This is all well and good, except when testing an installed @value{GDBN}
+that has been configured with @option{--with-system-gdbinit}.  Here one
+does not want @file{~/.gdbinit} loaded but one may want the system
+ at file{.gdbinit} file loaded.  This can be achieved by pointing @code{$HOME}
+at a directory without a @file{.gdbinit} and by overriding
+ at code{INTERNAL_GDBFLAGS} and removing @option{-nx}.
+
+ at smallexample
+cd testsuite
+HOME=`pwd` runtest \
+  GDB=/usr/bin/gdb \
+  GDBSERVER=/usr/bin/gdbserver \
+  INTERNAL_GDBFLAGS=-nw
+ at end smallexample
+
+ at end itemize
+
+There are two ways to run the testsuite and pass additional parameters
+to DejaGnu.  The first is with @kbd{make check} and specifying the
+makefile variable @samp{RUNTESTFLAGS}.
+
+ at smallexample
+make check RUNTESTFLAGS=TRANSCRIPT=y
+ at end smallexample
+
+The second is to cd to the @file{testsuite} directory and invoke the DejaGnu
+ at command{runtest} command directly.
+
+ at smallexample
+cd testsuite
+make site.exp
+runtest TRANSCRIPT=y
+ at end smallexample
+
+ at section Testsuite Configuration
+ at cindex Testsuite Configuration
+
+It is possible to adjust the behavior of the testsuite by defining
+the global variables listed below, either in a @file{site.exp} file,
+or in a board file.
+
+ at itemize @bullet
+
+ at item @code{gdb_test_timeout}
+
+Defining this variable changes the default timeout duration used during
+communication with @value{GDBN}.  More specifically, the global variable
+used during testing is @code{timeout}, but this variable gets reset to
+ at code{gdb_test_timeout} at the beginning of each testcase, making sure
+that any local change to @code{timeout} in a testcase does not affect
+subsequent testcases.
+
+This global variable comes in handy when the debugger is slower than
+normal due to the testing environment, triggering unexpected @code{TIMEOUT}
+test failures.  Examples include when testing on a remote machine, or
+against a system where communications are slow.
+
+If not specifically defined, this variable gets automatically defined
+to the same value as @code{timeout} during the testsuite initialization.
+The default value of the timeout is defined in the file
+ at file{gdb/testsuite/config/unix.exp} that is part of the @value{GDBN}
+test suite at footnote{If you are using a board file, it could override
+the test-suite default; search the board file for "timeout".}.
+
+ at end itemize
+
+ at section Testsuite Organization
+
+ at cindex test suite organization
+The testsuite is entirely contained in @file{gdb/testsuite}.  While the
+testsuite includes some makefiles and configury, these are very minimal,
+and used for little besides cleaning up, since the tests themselves
+handle the compilation of the programs that @value{GDBN} will run.  The file
+ at file{testsuite/lib/gdb.exp} contains common utility procs useful for
+all @value{GDBN} tests, while the directory @file{testsuite/config} contains
+configuration-specific files, typically used for special-purpose
+definitions of procs like @code{gdb_load} and @code{gdb_start}.
+
+The tests themselves are to be found in @file{testsuite/gdb.*} and
+subdirectories of those.  The names of the test files must always end
+with @file{.exp}.  DejaGNU collects the test files by wildcarding
+in the test directories, so both subdirectories and individual files
+get chosen and run in alphabetical order.
+
+The following table lists the main types of subdirectories and what they
+are for.  Since DejaGNU finds test files no matter where they are
+located, and since each test file sets up its own compilation and
+execution environment, this organization is simply for convenience and
+intelligibility.
+
+ at table @file
+ at item gdb.base
+This is the base testsuite.  The tests in it should apply to all
+configurations of @value{GDBN} (but generic native-only tests may live here).
+The test programs should be in the subset of C that is valid K&R,
+ANSI/ISO, and C at t{++} (@code{#ifdef}s are allowed if necessary, for instance
+for prototypes).
+
+ at item gdb. at var{lang}
+Language-specific tests for any language @var{lang} besides C.  Examples are
+ at file{gdb.cp} and @file{gdb.java}.
+
+ at item gdb. at var{platform}
+Non-portable tests.  The tests are specific to a specific configuration
+(host or target), such as HP-UX or eCos.  Example is @file{gdb.hp}, for
+HP-UX.
+
+ at item gdb. at var{compiler}
+Tests specific to a particular compiler.  As of this writing (June
+1999), there aren't currently any groups of tests in this category that
+couldn't just as sensibly be made platform-specific, but one could
+imagine a @file{gdb.gcc}, for tests of @value{GDBN}'s handling of GCC
+extensions.
+
+ at item gdb. at var{subsystem}
+Tests that exercise a specific @value{GDBN} subsystem in more depth.  For
+instance, @file{gdb.disasm} exercises various disassemblers, while
+ at file{gdb.stabs} tests pathways through the stabs symbol reader.
+ at end table
+
+ at section Writing Tests
+ at cindex writing tests
+
+In many areas, the @value{GDBN} tests are already quite comprehensive; you
+should be able to copy existing tests to handle new cases.
+
+You should try to use @code{gdb_test} whenever possible, since it
+includes cases to handle all the unexpected errors that might happen.
+However, it doesn't cost anything to add new test procedures; for
+instance, @file{gdb.base/exprs.exp} defines a @code{test_expr} that
+calls @code{gdb_test} multiple times.
+
+Only use @code{send_gdb} and @code{gdb_expect} when absolutely
+necessary.  Even if @value{GDBN} has several valid responses to
+a command, you can use @code{gdb_test_multiple}.  Like @code{gdb_test},
+ at code{gdb_test_multiple} recognizes internal errors and unexpected
+prompts.
+
+Do not write tests which expect a literal tab character from @value{GDBN}.
+On some operating systems (e.g.@: OpenBSD) the TTY layer expands tabs to
+spaces, so by the time @value{GDBN}'s output reaches expect the tab is gone.
+
+The source language programs do @emph{not} need to be in a consistent
+style.  Since @value{GDBN} is used to debug programs written in many different
+styles, it's worth having a mix of styles in the testsuite; for
+instance, some @value{GDBN} bugs involving the display of source lines would
+never manifest themselves if the programs used GNU coding style
+uniformly.
+
+Some testcase results need more detailed explanation:
+
+ at table @code
+ at item KFAIL
+Known problem of @value{GDBN} itself.  You must specify the @value{GDBN} bug
+report number like in these sample tests:
+ at smallexample
+kfail "gdb/13392" "continue to marker 2"
+ at end smallexample
+or
+ at smallexample
+setup_kfail gdb/13392 "*-*-*"
+kfail "continue to marker 2"
+ at end smallexample
+
+ at item XFAIL
+Known problem of environment.  This typically includes @value{NGCC} but it
+includes also many other system components which cannot be fixed in the
+ at value{GDBN} project.  Sample test with sanity check not knowing the specific
+cause of the problem:
+ at smallexample
+# On x86_64 it is commonly about 4MB.
+if @{$stub_size > 25000000@} @{
+    xfail "stub size $stub_size is too large"
+    return
+@}
+ at end smallexample
+
+You should provide bug report number for the failing component of the
+environment, if such bug report is available:
+ at smallexample
+if @{[test_compiler_info @{gcc-[0-3]-*@}]
+   || [test_compiler_info @{gcc-4-[0-5]-*@}]@} @{
+   setup_xfail "gcc/46955" *-*-*
+@}
+gdb_test "python print ttype.template_argument(2)" "&C::c"
+ at end smallexample
+ at end table
+
+ at section Board settings
+In @value{GDBN} testsuite, the tests can be configured or customized in the board
+file by means of @dfn{Board Settings}.  Each setting   should be consulted by
+test cases that depend on the corresponding feature.
+
+Here are the supported board settings:
+
+ at table @code
+
+ at item gdb,cannot_call_functions
+The board does not support inferior call, that is, invoking inferior functions
+in @value{GDBN}.
+ at item gdb,can_reverse
+The board supports reverse execution.
+ at item gdb,no_hardware_watchpoints
+The board does not support hardware watchpoints.
+ at item gdb,nofileio
+ at value{GDBN} is unable to intercept target file operations in remote and perform
+them on the host.
+ at item gdb,noinferiorio
+The board is unable to provide I/O capability to the inferior.
+ at c @item gdb,noresults
+ at c NEED DOCUMENT.
+ at item gdb,nosignals
+The board does not support signals.
+ at item gdb,skip_huge_test
+Skip time-consuming tests on the board with slow connection.
+ at item gdb,skip_float_tests
+Skip tests related to float points on target board.
+ at item gdb,use_precord
+The board supports process record.
+ at item gdb_server_prog
+The location of GDBserver.  If GDBserver somewhere other than its default
+location is used in test, specify the location of GDBserver in this variable.
+The location is a file name of GDBserver that can be either absolute or
+relative to testsuite subdirectory in build directory.
+ at item in_proc_agent
+The location of in-process agent.  If in-process agent other than its default
+location is used in test, specify the location of in-process agent in
+this variable.  The location is a file name of in-process agent that can be
+either  absolute or relative to testsuite subdirectory in build directory.
+ at item noargs
+ at value{GDBN} does not support argument passing for inferior.
+ at item no_long_long
+The board does not support type @code{long long}.
+ at c @item use_cygmon
+ at c NEED DOCUMENT.
+ at item use_gdb_stub
+The tests are running with gdb stub.
+ at end table
+
+ at node Hints
+
+ at chapter Hints
+
+Check the @file{README} file, it often has useful information that does not
+appear anywhere else in the directory.
+
+ at menu
+* Getting Started::		Getting started working on @value{GDBN}
+* Debugging GDB::		Debugging @value{GDBN} with itself
+ at end menu
+
+ at node Getting Started
+
+ at section Getting Started
+
+ at value{GDBN} is a large and complicated program, and if you first starting to
+work on it, it can be hard to know where to start.  Fortunately, if you
+know how to go about it, there are ways to figure out what is going on.
+
+This manual, the @value{GDBN} Internals manual, has information which applies
+generally to many parts of @value{GDBN}.
+
+Information about particular functions or data structures are located in
+comments with those functions or data structures.  If you run across a
+function or a global variable which does not have a comment correctly
+explaining what is does, this can be thought of as a bug in @value{GDBN}; feel
+free to submit a bug report, with a suggested comment if you can figure
+out what the comment should say.  If you find a comment which is
+actually wrong, be especially sure to report that.
+
+Comments explaining the function of macros defined in host, target, or
+native dependent files can be in several places.  Sometimes they are
+repeated every place the macro is defined.  Sometimes they are where the
+macro is used.  Sometimes there is a header file which supplies a
+default definition of the macro, and the comment is there.  This manual
+also documents all the available macros.
+ at c (@pxref{Host Conditionals}, @pxref{Target
+ at c Conditionals}, @pxref{Native Conditionals}, and @pxref{Obsolete
+ at c Conditionals})
+
+Start with the header files.  Once you have some idea of how
+ at value{GDBN}'s internal symbol tables are stored (see @file{symtab.h},
+ at file{gdbtypes.h}), you will find it much easier to understand the
+code which uses and creates those symbol tables.
+
+You may wish to process the information you are getting somehow, to
+enhance your understanding of it.  Summarize it, translate it to another
+language, add some (perhaps trivial or non-useful) feature to @value{GDBN}, use
+the code to predict what a test case would do and write the test case
+and verify your prediction, etc.  If you are reading code and your eyes
+are starting to glaze over, this is a sign you need to use a more active
+approach.
+
+Once you have a part of @value{GDBN} to start with, you can find more
+specifically the part you are looking for by stepping through each
+function with the @code{next} command.  Do not use @code{step} or you
+will quickly get distracted; when the function you are stepping through
+calls another function try only to get a big-picture understanding
+(perhaps using the comment at the beginning of the function being
+called) of what it does.  This way you can identify which of the
+functions being called by the function you are stepping through is the
+one which you are interested in.  You may need to examine the data
+structures generated at each stage, with reference to the comments in
+the header files explaining what the data structures are supposed to
+look like.
+
+Of course, this same technique can be used if you are just reading the
+code, rather than actually stepping through it.  The same general
+principle applies---when the code you are looking at calls something
+else, just try to understand generally what the code being called does,
+rather than worrying about all its details.
+
+ at cindex command implementation
+A good place to start when tracking down some particular area is with
+a command which invokes that feature.  Suppose you want to know how
+single-stepping works.  As a @value{GDBN} user, you know that the
+ at code{step} command invokes single-stepping.  The command is invoked
+via command tables (see @file{command.h}); by convention the function
+which actually performs the command is formed by taking the name of
+the command and adding @samp{_command}, or in the case of an
+ at code{info} subcommand, @samp{_info}.  For example, the @code{step}
+command invokes the @code{step_command} function and the @code{info
+display} command invokes @code{display_info}.  When this convention is
+not followed, you might have to use @code{grep} or @kbd{M-x
+tags-search} in emacs, or run @value{GDBN} on itself and set a
+breakpoint in @code{execute_command}.
+
+ at cindex @code{bug-gdb} mailing list
+If all of the above fail, it may be appropriate to ask for information
+on @code{bug-gdb}.  But @emph{never} post a generic question like ``I was
+wondering if anyone could give me some tips about understanding
+ at value{GDBN}''---if we had some magic secret we would put it in this manual.
+Suggestions for improving the manual are always welcome, of course.
+
+ at node Debugging GDB
+
+ at section Debugging @value{GDBN} with itself
+ at cindex debugging @value{GDBN}
+
+If @value{GDBN} is limping on your machine, this is the preferred way to get it
+fully functional.  Be warned that in some ancient Unix systems, like
+Ultrix 4.2, a program can't be running in one process while it is being
+debugged in another.  Rather than typing the command @kbd{@w{./gdb
+./gdb}}, which works on Suns and such, you can copy @file{gdb} to
+ at file{gdb2} and then type @kbd{@w{./gdb ./gdb2}}.
+
+When you run @value{GDBN} in the @value{GDBN} source directory, it will read
+ at file{gdb-gdb.gdb} file (plus possibly @file{gdb-gdb.py} file) that sets up
+some simple things to make debugging gdb easier.  The @code{info} command, when
+executed without a subcommand in a @value{GDBN} being debugged by gdb, will pop
+you back up to the top level gdb.  See @file{gdb-gdb.gdb} for details.
+
+If you use emacs, you will probably want to do a @code{make TAGS} after
+you configure your distribution; this will put the machine dependent
+routines for your local machine where they will be accessed first by
+ at kbd{M-.}
+
+Also, make sure that you've either compiled @value{GDBN} with your local cc, or
+have run @code{fixincludes} if you are compiling with gcc.
+
+ at section Submitting Patches
+
+ at cindex submitting patches
+Thanks for thinking of offering your changes back to the community of
+ at value{GDBN} users.  In general we like to get well designed enhancements.
+Thanks also for checking in advance about the best way to transfer the
+changes.
+
+The @value{GDBN} maintainers will only install ``cleanly designed'' patches.
+This manual summarizes what we believe to be clean design for @value{GDBN}.
+
+If the maintainers don't have time to put the patch in when it arrives,
+or if there is any question about a patch, it goes into a large queue
+with everyone else's patches and bug reports.
+
+ at cindex legal papers for code contributions
+The legal issue is that to incorporate substantial changes requires a
+copyright assignment from you and/or your employer, granting ownership
+of the changes to the Free Software Foundation.  You can get the
+standard documents for doing this by sending mail to @code{gnu@@gnu.org}
+and asking for it.  We recommend that people write in "All programs
+owned by the Free Software Foundation" as "NAME OF PROGRAM", so that
+changes in many programs (not just @value{GDBN}, but GAS, Emacs, GCC,
+etc) can be
+contributed with only one piece of legalese pushed through the
+bureaucracy and filed with the FSF.  We can't start merging changes until
+this paperwork is received by the FSF (their rules, which we follow
+since we maintain it for them).
+
+Technically, the easiest way to receive changes is to receive each
+feature as a small context diff or unidiff, suitable for @code{patch}.
+Each message sent to me should include the changes to C code and
+header files for a single feature, plus @file{ChangeLog} entries for
+each directory where files were modified, and diffs for any changes
+needed to the manuals (@file{gdb/doc/gdb.texinfo} or
+ at file{gdb/doc/gdbint.texinfo}).  If there are a lot of changes for a
+single feature, they can be split down into multiple messages.
+
+In this way, if we read and like the feature, we can add it to the
+sources with a single patch command, do some testing, and check it in.
+If you leave out the @file{ChangeLog}, we have to write one.  If you leave
+out the doc, we have to puzzle out what needs documenting.  Etc., etc.
+
+The reason to send each change in a separate message is that we will not
+install some of the changes.  They'll be returned to you with questions
+or comments.  If we're doing our job correctly, the message back to you
+will say what you have to fix in order to make the change acceptable.
+The reason to have separate messages for separate features is so that
+the acceptable changes can be installed while one or more changes are
+being reworked.  If multiple features are sent in a single message, we
+tend to not put in the effort to sort out the acceptable changes from
+the unacceptable, so none of the features get installed until all are
+acceptable.
+
+If this sounds painful or authoritarian, well, it is.  But we get a lot
+of bug reports and a lot of patches, and many of them don't get
+installed because we don't have the time to finish the job that the bug
+reporter or the contributor could have done.  Patches that arrive
+complete, working, and well designed, tend to get installed on the day
+they arrive.  The others go into a queue and get installed as time
+permits, which, since the maintainers have many demands to meet, may not
+be for quite some time.
+
+Please send patches directly to
+ at email{gdb-patches@@sourceware.org, the @value{GDBN} maintainers}.
+
+ at section Build Script
+
+ at cindex build script
+
+The script @file{gdb_buildall.sh} builds @value{GDBN} with flag
+ at option{--enable-targets=all} set.  This builds @value{GDBN} with all supported
+targets activated.  This helps testing @value{GDBN} when doing changes that
+affect more than one architecture and is much faster than using
+ at file{gdb_mbuild.sh}.
+
+After building @value{GDBN} the script checks which architectures are
+supported and then switches the current architecture to each of those to get
+information about the architecture.  The test results are stored in log files
+in the directory the script was called from.
+
+ at include observer.texi
+
+ at node GNU Free Documentation License
+ at appendix GNU Free Documentation License
+ at include fdl.texi
+
+ at node Concept Index
+ at unnumbered Concept Index
+
+ at printindex cp
+
+ at node Function and Variable Index
+ at unnumbered Function and Variable Index
+
+ at printindex fn
+
+ at bye
diff --git a/gdb/doc/gpl.texi b/gdb/doc/gpl.texi
index 8b13789..ca6d72d 100644
--- a/gdb/doc/gpl.texi
+++ b/gdb/doc/gpl.texi
@@ -1 +1,735 @@
+ at ignore
+ at c Set file name and title for man page.
+ at setfilename gpl
+ at settitle GNU General Public License
+ at c man begin SEEALSO
+gfdl(7), fsf-funding(7).
+ at c man end
+ at c man begin COPYRIGHT
+Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/}
 
+Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.
+ at c man end
+ at end ignore
+ at node Copying
+ at c man begin DESCRIPTION
+ at appendix GNU GENERAL PUBLIC LICENSE
+ at c The GNU General Public License.
+ at center Version 3, 29 June 2007
+
+ at c This file is intended to be included within another document,
+ at c hence no sectioning command or @node.
+
+ at display
+Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/}
+
+Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.
+ at end display
+
+ at heading Preamble
+
+The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom
+to share and change all versions of a program---to make sure it remains
+free software for all its users.  We, the Free Software Foundation,
+use the GNU General Public License for most of our software; it
+applies also to any other work released this way by its authors.  You
+can apply it to your programs, too.
+
+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
+them 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.
+
+To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you
+have certain responsibilities if you distribute copies of the
+software, or if you modify it: responsibilities to respect the freedom
+of others.
+
+For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too,
+receive or can get the source code.  And you must show them these
+terms so they know their rights.
+
+Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the
+manufacturer can do so.  This is fundamentally incompatible with the
+aim of protecting users' freedom to change the software.  The
+systematic pattern of such abuse occurs in the area of products for
+individuals to use, which is precisely where it is most unacceptable.
+Therefore, we have designed this version of the GPL to prohibit the
+practice for those products.  If such problems arise substantially in
+other domains, we stand ready to extend this provision to those
+domains in future versions of the GPL, as needed to protect the
+freedom of users.
+
+Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish
+to avoid the special danger that patents applied to a free program
+could make it effectively proprietary.  To prevent this, the GPL
+assures that patents cannot be used to render the program non-free.
+
+The precise terms and conditions for copying, distribution and
+modification follow.
+
+ at heading TERMS AND CONDITIONS
+
+ at enumerate 0
+ at item Definitions.
+
+``This License'' refers to version 3 of the GNU General Public License.
+
+``Copyright'' also means copyright-like laws that apply to other kinds
+of works, such as semiconductor masks.
+
+``The Program'' refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as ``you''.  ``Licensees'' and
+``recipients'' may be individuals or organizations.
+
+To ``modify'' a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of
+an exact copy.  The resulting work is called a ``modified version'' of
+the earlier work or a work ``based on'' the earlier work.
+
+A ``covered work'' means either the unmodified Program or a work based
+on the Program.
+
+To ``propagate'' a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+To ``convey'' a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user
+through a computer network, with no transfer of a copy, is not
+conveying.
+
+An interactive user interface displays ``Appropriate Legal Notices'' to
+the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ at item Source Code.
+
+The ``source code'' for a work means the preferred form of the work for
+making modifications to it.  ``Object code'' means any non-source form
+of a work.
+
+A ``Standard Interface'' means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+The ``System Libraries'' of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+``Major Component'', in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+The ``Corresponding Source'' for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+The Corresponding Source need not include anything that users can
+regenerate automatically from other parts of the Corresponding Source.
+
+The Corresponding Source for a work in source code form is that same
+work.
+
+ at item Basic Permissions.
+
+All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+You may make, run and propagate covered works that you do not convey,
+without conditions so long as your license otherwise remains in force.
+You may convey covered works to others for the sole purpose of having
+them make modifications exclusively for you, or provide you with
+facilities for running those works, provided that you comply with the
+terms of this License in conveying all material for which you do not
+control copyright.  Those thus making or running the covered works for
+you must do so exclusively on your behalf, under your direction and
+control, on terms that prohibit them from making any copies of your
+copyrighted material outside their relationship with you.
+
+Conveying under any other circumstances is permitted solely under the
+conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ at item Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such
+circumvention is effected by exercising rights under this License with
+respect to the covered work, and you disclaim any intention to limit
+operation or modification of the work as a means of enforcing, against
+the work's users, your or third parties' legal rights to forbid
+circumvention of technological measures.
+
+ at item Conveying Verbatim Copies.
+
+You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ at item Conveying Modified Source Versions.
+
+You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these
+conditions:
+
+ at enumerate a
+ at item
+The work must carry prominent notices stating that you modified it,
+and giving a relevant date.
+
+ at item
+The work must carry prominent notices stating that it is released
+under this License and any conditions added under section 7.  This
+requirement modifies the requirement in section 4 to ``keep intact all
+notices''.
+
+ at item
+You must license the entire work, as a whole, under this License to
+anyone who comes into possession of a copy.  This License will
+therefore apply, along with any applicable section 7 additional terms,
+to the whole of the work, and all its parts, regardless of how they
+are packaged.  This License gives no permission to license the work in
+any other way, but it does not invalidate such permission if you have
+separately received it.
+
+ at item
+If the work has interactive user interfaces, each must display
+Appropriate Legal Notices; however, if the Program has interactive
+interfaces that do not display Appropriate Legal Notices, your work
+need not make them do so.
+ at end enumerate
+
+A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+``aggregate'' if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ at item  Conveying Non-Source Forms.
+
+You may convey a covered work in object code form under the terms of
+sections 4 and 5, provided that you also convey the machine-readable
+Corresponding Source under the terms of this License, in one of these
+ways:
+
+ at enumerate a
+ at item
+Convey the object code in, or embodied in, a physical product
+(including a physical distribution medium), accompanied by the
+Corresponding Source fixed on a durable physical medium customarily
+used for software interchange.
+
+ at item
+Convey the object code in, or embodied in, a physical product
+(including a physical distribution medium), accompanied by a written
+offer, valid for at least three years and valid for as long as you
+offer spare parts or customer support for that product model, to give
+anyone who possesses the object code either (1) a copy of the
+Corresponding Source for all the software in the product that is
+covered by this License, on a durable physical medium customarily used
+for software interchange, for a price no more than your reasonable
+cost of physically performing this conveying of source, or (2) access
+to copy the Corresponding Source from a network server at no charge.
+
+ at item
+Convey individual copies of the object code with a copy of the written
+offer to provide the Corresponding Source.  This alternative is
+allowed only occasionally and noncommercially, and only if you
+received the object code with such an offer, in accord with subsection
+6b.
+
+ at item
+Convey the object code by offering access from a designated place
+(gratis or for a charge), and offer equivalent access to the
+Corresponding Source in the same way through the same place at no
+further charge.  You need not require recipients to copy the
+Corresponding Source along with the object code.  If the place to copy
+the object code is a network server, the Corresponding Source may be
+on a different server (operated by you or a third party) that supports
+equivalent copying facilities, provided you maintain clear directions
+next to the object code saying where to find the Corresponding Source.
+Regardless of what server hosts the Corresponding Source, you remain
+obligated to ensure that it is available for as long as needed to
+satisfy these requirements.
+
+ at item
+Convey the object code using peer-to-peer transmission, provided you
+inform other peers where the object code and Corresponding Source of
+the work are being offered to the general public at no charge under
+subsection 6d.
+
+ at end enumerate
+
+A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+A ``User Product'' is either (1) a ``consumer product'', which means any
+tangible personal property which is normally used for personal,
+family, or household purposes, or (2) anything designed or sold for
+incorporation into a dwelling.  In determining whether a product is a
+consumer product, doubtful cases shall be resolved in favor of
+coverage.  For a particular product received by a particular user,
+``normally used'' refers to a typical or common use of that class of
+product, regardless of the status of the particular user or of the way
+in which the particular user actually uses, or expects or is expected
+to use, the product.  A product is a consumer product regardless of
+whether the product has substantial commercial, industrial or
+non-consumer uses, unless such uses represent the only significant
+mode of use of the product.
+
+``Installation Information'' for a User Product means any methods,
+procedures, authorization keys, or other information required to
+install and execute modified versions of a covered work in that User
+Product from a modified version of its Corresponding Source.  The
+information must suffice to ensure that the continued functioning of
+the modified object code is in no case prevented or interfered with
+solely because modification has been made.
+
+If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or
+updates for a work that has been modified or installed by the
+recipient, or for the User Product in which it has been modified or
+installed.  Access to a network may be denied when the modification
+itself materially and adversely affects the operation of the network
+or violates the rules and protocols for communication across the
+network.
+
+Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ at item Additional Terms.
+
+``Additional permissions'' are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders
+of that material) supplement the terms of this License with terms:
+
+ at enumerate a
+ at item
+Disclaiming warranty or limiting liability differently from the terms
+of sections 15 and 16 of this License; or
+
+ at item
+Requiring preservation of specified reasonable legal notices or author
+attributions in that material or in the Appropriate Legal Notices
+displayed by works containing it; or
+
+ at item
+Prohibiting misrepresentation of the origin of that material, or
+requiring that modified versions of such material be marked in
+reasonable ways as different from the original version; or
+
+ at item
+Limiting the use for publicity purposes of names of licensors or
+authors of the material; or
+
+ at item
+Declining to grant rights under trademark law for use of some trade
+names, trademarks, or service marks; or
+
+ at item
+Requiring indemnification of licensors and authors of that material by
+anyone who conveys the material (or modified versions of it) with
+contractual assumptions of liability to the recipient, for any
+liability that these contractual assumptions directly impose on those
+licensors and authors.
+ at end enumerate
+
+All other non-permissive additional terms are considered ``further
+restrictions'' within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions; the
+above requirements apply either way.
+
+ at item Termination.
+
+You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ at item Acceptance Not Required for Having Copies.
+
+You are not required to accept this License in order to receive or run
+a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ at item Automatic Licensing of Downstream Recipients.
+
+Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+An ``entity transaction'' is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ at item Patents.
+
+A ``contributor'' is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's ``contributor version''.
+
+A contributor's ``essential patent claims'' are all patent claims owned
+or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, ``control'' includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+In the following three paragraphs, a ``patent license'' is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To ``grant'' such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  ``Knowingly relying'' means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+A patent license is ``discriminatory'' if it does not include within the
+scope of its coverage, prohibits the exercise of, or is conditioned on
+the non-exercise of one or more of the rights that are specifically
+granted under this License.  You may not convey a covered work if you
+are a party to an arrangement with a third party that is in the
+business of distributing software, under which you make payment to the
+third party based on the extent of your activity of conveying the
+work, and under which the third party grants, to any of the parties
+who would receive the covered work from you, a discriminatory patent
+license (a) in connection with copies of the covered work conveyed by
+you (or copies made from those copies), or (b) primarily for and in
+connection with specific products or compilations that contain the
+covered work, unless you entered into that arrangement, or that patent
+license was granted, prior to 28 March 2007.
+
+Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ at item No Surrender of Others' Freedom.
+
+If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey
+a covered work so as to satisfy simultaneously your obligations under
+this License and any other pertinent obligations, then as a
+consequence you may not convey it at all.  For example, if you agree
+to terms that obligate you to collect a royalty for further conveying
+from those to whom you convey the Program, the only way you could
+satisfy both those terms and this License would be to refrain entirely
+from conveying the Program.
+
+ at item Use with the GNU Affero General Public License.
+
+Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ at item Revised Versions of this License.
+
+The Free Software Foundation may publish revised and/or new versions
+of the GNU 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.
+
+Each version is given a distinguishing version number.  If the Program
+specifies that a certain numbered version of the GNU General Public
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that numbered version or
+of any later version published by the Free Software Foundation.  If
+the Program does not specify a version number of the GNU General
+Public License, you may choose any version ever published by the Free
+Software Foundation.
+
+If the Program specifies that a proxy can decide which future versions
+of the GNU General Public License can be used, that proxy's public
+statement of acceptance of a version permanently authorizes you to
+choose that version for the Program.
+
+Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ at item Disclaimer of Warranty.
+
+THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT
+WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
+PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE
+DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
+CORRECTION.
+
+ at item Limitation of Liability.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
+CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
+NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
+LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
+TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
+PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+ at item Interpretation of Sections 15 and 16.
+
+If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ at end enumerate
+
+ at heading END OF TERMS AND CONDITIONS
+
+ at heading How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the ``copyright'' line and a pointer to where the full notice is found.
+
+ at smallexample
+ at var{one line to give the program's name and a brief idea of what it does.}
+Copyright (C) @var{year} @var{name of author}
+
+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 3 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, see @url{http://www.gnu.org/licenses/}.
+ at end smallexample
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ at smallexample
+ at var{program} Copyright (C) @var{year} @var{name of author}
+This program comes with ABSOLUTELY NO WARRANTY; for details type @samp{show w}.
+This is free software, and you are welcome to redistribute it
+under certain conditions; type @samp{show c} for details.
+ at end smallexample
+
+The hypothetical commands @samp{show w} and @samp{show c} should show
+the appropriate parts of the General Public License.  Of course, your
+program's commands might be different; for a GUI interface, you would
+use an ``about box''.
+
+You should also get your employer (if you work as a programmer) or school,
+if any, to sign a ``copyright disclaimer'' for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+ at url{http://www.gnu.org/licenses/}.
+
+The GNU General Public License does not permit incorporating your
+program into proprietary programs.  If your program is a subroutine
+library, you may consider it more useful to permit linking proprietary
+applications with the library.  If this is what you want to do, use
+the GNU Lesser General Public License instead of this License.  But
+first, please read @url{http://www.gnu.org/philosophy/why-not-lgpl.html}.
+ at c man end
diff --git a/gdb/doc/observer.texi b/gdb/doc/observer.texi
index fec8b59..6827ed8 100644
--- a/gdb/doc/observer.texi
+++ b/gdb/doc/observer.texi
@@ -1,3 +1,5 @@
+ at c -*-texinfo-*-
+
 @c This file is part of the GDB manual.
 @c
 @c Copyright (C) 2003-2006, 2008-2012 Free Software Foundation, Inc.
@@ -5,39 +7,231 @@
 @c See the file gdbint.texinfo for copying conditions.
 @c
 @c Also, the @deftypefun lines from this file are processed into a
- at c Also, the @deftypefun lines from this file are processed into a
 @c header file during the GDB build process.  Permission is granted
 @c to redistribute and/or modify those lines under the terms of the
 @c GNU General Public License as published by the Free Software
 @c Foundation; either version 3 of the License, or (at your option)
 @c any later version.
+
+ at node GDB Observers
+ at appendix @value{GDBN} Currently available observers
+
+ at section Implementation rationale
+ at cindex observers implementation rationale
+
+An @dfn{observer} is an entity which is interested in being notified
+when GDB reaches certain states, or certain events occur in GDB.
+The entity being observed is called the @dfn{subject}.  To receive
+notifications, the observer attaches a callback to the subject.
+One subject can have several observers.
+
+ at file{observer.c} implements an internal generic low-level event
+notification mechanism.  This generic event notification mechanism is
+then re-used to implement the exported high-level notification
+management routines for all possible notifications.
+
+The current implementation of the generic observer provides support
+for contextual data.  This contextual data is given to the subject
+when attaching the callback.  In return, the subject will provide
+this contextual data back to the observer as a parameter of the
+callback.
+
+Note that the current support for the contextual data is only partial,
+as it lacks a mechanism that would deallocate this data when the
+callback is detached.  This is not a problem so far, as this contextual
+data is only used internally to hold a function pointer.  Later on, if
+a certain observer needs to provide support for user-level contextual
+data, then the generic notification mechanism will need to be
+enhanced to allow the observer to provide a routine to deallocate the
+data when attaching the callback.
+
+The observer implementation is also currently not reentrant.
+In particular, it is therefore not possible to call the attach
+or detach routines during a notification.
+
+ at section Debugging
+Observer notifications can be traced using the command @samp{set debug
+observer 1} (@pxref{Debugging Output, , Optional messages about
+internal happenings, gdb, Debugging with @var{GDBN}}).
+
+ at section @code{normal_stop} Notifications
+ at cindex @code{normal_stop} observer
+ at cindex notification about inferior execution stop
+
+ at value{GDBN} notifies all @code{normal_stop} observers when the
+inferior execution has just stopped, the associated messages and
+annotations have been printed, and the control is about to be returned
+to the user.
+
+Note that the @code{normal_stop} notification is not emitted when
+the execution stops due to a breakpoint, and this breakpoint has
+a condition that is not met.  If the breakpoint has any associated
+commands list, the commands are executed after the notification
+is emitted.
+
+The following interfaces are available to manage observers:
+
 @deftypefun extern struct observer *observer_attach_ at var{event} (observer_ at var{event}_ftype *@var{f})
+Using the function @var{f}, create an observer that is notified when
+ever @var{event} occurs, return the observer.
+ at end deftypefun
+
 @deftypefun extern void observer_detach_ at var{event} (struct observer *@var{observer});
+Remove @var{observer} from the list of observers to be notified when
+ at var{event} occurs.
+ at end deftypefun
+
 @deftypefun extern void observer_notify_ at var{event} (void);
+Send a notification to all @var{event} observers.
+ at end deftypefun
+
+The following observable events are defined:
+
 @deftypefun void normal_stop (struct bpstats *@var{bs}, int @var{print_frame})
+The inferior has stopped for real.  The  @var{bs} argument describes
+the breakpoints were are stopped at, if any.  Second argument
+ at var{print_frame} non-zero means display the location where the
+inferior has stopped.
+ at end deftypefun
+
 @deftypefun void target_changed (struct target_ops *@var{target})
+The target's register contents have changed.
+ at end deftypefun
+
 @deftypefun void executable_changed (void)
+The executable being debugged by GDB has changed: The user decided
+to debug a different program, or the program he was debugging has
+been modified since being loaded by the debugger (by being recompiled,
+for instance).
+ at end deftypefun
+
 @deftypefun void inferior_created (struct target_ops *@var{objfile}, int @var{from_tty})
+ at value{GDBN} has just connected to an inferior.  For @samp{run},
+ at value{GDBN} calls this observer while the inferior is still stopped
+at the entry-point instruction.  For @samp{attach} and @samp{core},
+ at value{GDBN} calls this observer immediately after connecting to the
+inferior, and before any information on the inferior has been printed.
+ at end deftypefun
+
 @deftypefun void solib_loaded (struct so_list *@var{solib})
+The shared library specified by @var{solib} has been loaded.  Note that
+when @value{GDBN} calls this observer, the library's symbols probably
+haven't been loaded yet.
+ at end deftypefun
+
 @deftypefun void solib_unloaded (struct so_list *@var{solib})
+The shared library specified by @var{solib} has been unloaded.
+Note that when @value{GDBN} calls this observer, the library's
+symbols have not been unloaded yet, and thus are still available.
+ at end deftypefun
+
 @deftypefun void new_objfile (struct objfile *@var{objfile})
+The symbol file specified by @var{objfile} has been loaded.
+Called with @var{objfile} equal to @code{NULL} to indicate
+previously loaded symbol table data has now been invalidated.
+ at end deftypefun
+
 @deftypefun void new_thread (struct thread_info *@var{t})
+The thread specified by @var{t} has been created.
+ at end deftypefun
+
 @deftypefun void thread_exit (struct thread_info *@var{t}, int @var{silent})
+The thread specified by @var{t} has exited.  The @var{silent} argument
+indicates that @value{GDBN} is removing the thread from its tables
+without wanting to notify the user about it.
+ at end deftypefun
+
 @deftypefun void thread_stop_requested (ptid_t @var{ptid})
+An explicit stop request was issued to @var{ptid}.  If @var{ptid}
+equals @var{minus_one_ptid}, the request applied to all threads.  If
+ at code{ptid_is_pid(ptid)} returns true, the request applied to all
+threads of the process pointed at by @var{ptid}.  Otherwise, the
+request applied to the single thread pointed at by @var{ptid}.
+ at end deftypefun
+
 @deftypefun void target_resumed (ptid_t @var{ptid})
+The target was resumed.  The @var{ptid} parameter specifies which
+thread was resume, and may be RESUME_ALL if all threads are resumed.
+ at end deftypefun
+
 @deftypefun void about_to_proceed (void)
+The target is about to be proceeded.
+ at end deftypefun
+
 @deftypefun void breakpoint_created (struct breakpoint *@var{b})
+A new breakpoint @var{b} has been created.
+ at end deftypefun
+
 @deftypefun void breakpoint_deleted (struct breakpoint *@var{b})
+A breakpoint has been destroyed.  The argument @var{b} is the
+pointer to the destroyed breakpoint.
+ at end deftypefun
+
 @deftypefun void breakpoint_modified (struct breakpoint *@var{b})
+A breakpoint has been modified in some way.  The argument @var{b}
+is the modified breakpoint.
+ at end deftypefun
+
 @deftypefun void tracepoint_created (int @var{tpnum})
+A new tracepoint has been created.  The argument @var{tpnum} is the
+number of the newly-created tracepoint.
+ at end deftypefun
+
 @deftypefun void tracepoint_deleted (int @var{tpnum})
+A tracepoint has been destroyed.  The argument @var{tpnum} is the
+number of the newly-destroyed tracepoint.
+ at end deftypefun
+
 @deftypefun void tracepoint_modified (int @var{tpnum})
+A tracepoint has been modified in some way.  The argument @var{tpnum}
+is the number of the modified tracepoint.
+ at end deftypefun
+
 @deftypefun void architecture_changed (struct gdbarch *@var{newarch})
+The current architecture has changed.  The argument @var{newarch} is
+a pointer to the new architecture.
+ at end deftypefun
+
 @deftypefun void thread_ptid_changed (ptid_t @var{old_ptid}, ptid_t @var{new_ptid})
+The thread's ptid has changed.  The @var{old_ptid} parameter specifies
+the old value, and @var{new_ptid} specifies the new value.
+ at end deftypefun
+
 @deftypefun void inferior_added (struct inferior *@var{inf})
+The inferior @var{inf} has been added to the list of inferiors.  At
+this point, it might not be associated with any process.
+ at end deftypefun
+
 @deftypefun void inferior_appeared (struct inferior *@var{inf})
+The inferior identified by @var{inf} has been attached to a process.
+ at end deftypefun
+
 @deftypefun void inferior_exit (struct inferior *@var{inf})
+Either the inferior associated with @var{inf} has been detached from the
+process, or the process has exited.
+ at end deftypefun
+
 @deftypefun void inferior_removed (struct inferior *@var{inf})
+The inferior @var{inf} has been removed from the list of inferiors.
+This method is called immediately before freeing @var{inf}.
+ at end deftypefun
+
 @deftypefun void memory_changed (CORE_ADDR @var{addr}, int @var{len}, const bfd_byte *@var{data})
+Bytes from @var{data} to @var{data} + @var{len} have been written
+to the current inferior at @var{addr}.
+ at end deftypefun
+
 @deftypefun void before_prompt (const char *@var{current_prompt})
+Called before a top-level prompt is displayed.  @var{current_prompt} is
+the current top-level prompt.
+ at end deftypefun
+
+ at deftypefun void gdb_datadir_changed (void)
+Variable gdb_datadir has been set.  The value may not necessarily change.
+ at end deftypefun
+
 @deftypefun void test_notification (int @var{somearg})
+This observer is used for internal testing.  Do not use.  
+See testsuite/gdb.gdb/observer.exp.
+ at end deftypefun
+
diff --git a/gdb/doc/refcard.tex b/gdb/doc/refcard.tex
index c6656e5..bee7c3d 100644
--- a/gdb/doc/refcard.tex
+++ b/gdb/doc/refcard.tex
@@ -68,7 +68,7 @@
 % all variations of a command.
 % The GDB-under-Emacs section omits gdb-mode functions without default
 % keybindings.  GDB startup options are not described.
-% set print sevenbit-strings, set symbol-reloading omitted.
+% set print sevenbit-strings omitted.
 % printsyms, printpsyms, omitted since they're for GDB maintenance primarily
 % share omitted due to obsolescence
 % set check range/type omitted at least til code is in GDB.
diff --git a/gdb/doc/stabs.info b/gdb/doc/stabs.info
new file mode 100644
index 0000000..d5f2bd1
--- /dev/null
+++ b/gdb/doc/stabs.info
@@ -0,0 +1,4588 @@
+This is stabs.info, produced by makeinfo version 4.8 from
+./stabs.texinfo.
+
+INFO-DIR-SECTION Software development
+START-INFO-DIR-ENTRY
+* Stabs: (stabs).                 The "stabs" debugging information format.
+END-INFO-DIR-ENTRY
+
+   Copyright (C) 1992-1995, 1997-1998, 2000-2007, 2009-2012 Free
+Software Foundation, Inc.  Contributed by Cygnus Support.  Written by
+Julia Menapace, Jim Kingdon, and David MacKenzie.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+   This document describes the stabs debugging symbol tables.
+
+   Copyright (C) 1992-1995, 1997-1998, 2000-2007, 2009-2012 Free
+Software Foundation, Inc.  Contributed by Cygnus Support.  Written by
+Julia Menapace, Jim Kingdon, and David MacKenzie.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+
+File: stabs.info,  Node: Top,  Next: Overview,  Up: (dir)
+
+The "stabs" representation of debugging information
+***************************************************
+
+This document describes the stabs debugging format.
+
+* Menu:
+
+* Overview::			Overview of stabs
+* Program Structure::		Encoding of the structure of the program
+* Constants::			Constants
+* Variables::
+* Types::			Type definitions
+* Macro define and undefine::	Representation of #define and #undef
+* Symbol Tables::		Symbol information in symbol tables
+* Cplusplus::			Stabs specific to C++
+* Stab Types::			Symbol types in a.out files
+* Symbol Descriptors::		Table of symbol descriptors
+* Type Descriptors::		Table of type descriptors
+* Expanded Reference::		Reference information by stab type
+* Questions::			Questions and anomalies
+* Stab Sections::		In some object file formats, stabs are
+                                in sections.
+* GNU Free Documentation License::  The license for this documentation
+* Symbol Types Index::          Index of symbolic stab symbol type names.
+
+
+File: stabs.info,  Node: Overview,  Next: Program Structure,  Prev: Top,  Up: Top
+
+1 Overview of Stabs
+*******************
+
+"Stabs" refers to a format for information that describes a program to
+a debugger.  This format was apparently invented by Peter Kessler at
+the University of California at Berkeley, for the `pdx' Pascal
+debugger; the format has spread widely since then.
+
+   This document is one of the few published sources of documentation on
+stabs.  It is believed to be comprehensive for stabs used by C.  The
+lists of symbol descriptors (*note Symbol Descriptors::) and type
+descriptors (*note Type Descriptors::) are believed to be completely
+comprehensive.  Stabs for COBOL-specific features and for variant
+records (used by Pascal and Modula-2) are poorly documented here.
+
+   Other sources of information on stabs are `Dbx and Dbxtool
+Interfaces', 2nd edition, by Sun, 1988, and `AIX Version 3.2 Files
+Reference', Fourth Edition, September 1992, "dbx Stabstring Grammar" in
+the a.out section, page 2-31.  This document is believed to incorporate
+the information from those two sources except where it explicitly
+directs you to them for more information.
+
+* Menu:
+
+* Flow::			Overview of debugging information flow
+* Stabs Format::		Overview of stab format
+* String Field::		The string field
+* C Example::			A simple example in C source
+* Assembly Code::		The simple example at the assembly level
+
+
+File: stabs.info,  Node: Flow,  Next: Stabs Format,  Up: Overview
+
+1.1 Overview of Debugging Information Flow
+==========================================
+
+The GNU C compiler compiles C source in a `.c' file into assembly
+language in a `.s' file, which the assembler translates into a `.o'
+file, which the linker combines with other `.o' files and libraries to
+produce an executable file.
+
+   With the `-g' option, GCC puts in the `.s' file additional debugging
+information, which is slightly transformed by the assembler and linker,
+and carried through into the final executable.  This debugging
+information describes features of the source file like line numbers,
+the types and scopes of variables, and function names, parameters, and
+scopes.
+
+   For some object file formats, the debugging information is
+encapsulated in assembler directives known collectively as "stab"
+(symbol table) directives, which are interspersed with the generated
+code.  Stabs are the native format for debugging information in the
+a.out and XCOFF object file formats.  The GNU tools can also emit stabs
+in the COFF and ECOFF object file formats.
+
+   The assembler adds the information from stabs to the symbol
+information it places by default in the symbol table and the string
+table of the `.o' file it is building.  The linker consolidates the `.o'
+files into one executable file, with one symbol table and one string
+table.  Debuggers use the symbol and string tables in the executable as
+a source of debugging information about the program.
+
+
+File: stabs.info,  Node: Stabs Format,  Next: String Field,  Prev: Flow,  Up: Overview
+
+1.2 Overview of Stab Format
+===========================
+
+There are three overall formats for stab assembler directives,
+differentiated by the first word of the stab.  The name of the directive
+describes which combination of four possible data fields follows.  It is
+either `.stabs' (string), `.stabn' (number), or `.stabd' (dot).  IBM's
+XCOFF assembler uses `.stabx' (and some other directives such as
+`.file' and `.bi') instead of `.stabs', `.stabn' or `.stabd'.
+
+   The overall format of each class of stab is:
+
+     .stabs "STRING",TYPE,OTHER,DESC,VALUE
+     .stabn TYPE,OTHER,DESC,VALUE
+     .stabd TYPE,OTHER,DESC
+     .stabx "STRING",VALUE,TYPE,SDB-TYPE
+
+   For `.stabn' and `.stabd', there is no STRING (the `n_strx' field is
+zero; see *Note Symbol Tables::).  For `.stabd', the VALUE field is
+implicit and has the value of the current file location.  For `.stabx',
+the SDB-TYPE field is unused for stabs and can always be set to zero.
+The OTHER field is almost always unused and can be set to zero.
+
+   The number in the TYPE field gives some basic information about
+which type of stab this is (or whether it _is_ a stab, as opposed to an
+ordinary symbol).  Each valid type number defines a different stab
+type; further, the stab type defines the exact interpretation of, and
+possible values for, any remaining STRING, DESC, or VALUE fields
+present in the stab.  *Note Stab Types::, for a list in numeric order
+of the valid TYPE field values for stab directives.
+
+
+File: stabs.info,  Node: String Field,  Next: C Example,  Prev: Stabs Format,  Up: Overview
+
+1.3 The String Field
+====================
+
+For most stabs the string field holds the meat of the debugging
+information.  The flexible nature of this field is what makes stabs
+extensible.  For some stab types the string field contains only a name.
+For other stab types the contents can be a great deal more complex.
+
+   The overall format of the string field for most stab types is:
+
+     "NAME:SYMBOL-DESCRIPTOR TYPE-INFORMATION"
+
+   NAME is the name of the symbol represented by the stab; it can
+contain a pair of colons (*note Nested Symbols::).  NAME can be
+omitted, which means the stab represents an unnamed object.  For
+example, `:t10=*2' defines type 10 as a pointer to type 2, but does not
+give the type a name.  Omitting the NAME field is supported by AIX dbx
+and GDB after about version 4.8, but not other debuggers.  GCC
+sometimes uses a single space as the name instead of omitting the name
+altogether; apparently that is supported by most debuggers.
+
+   The SYMBOL-DESCRIPTOR following the `:' is an alphabetic character
+that tells more specifically what kind of symbol the stab represents.
+If the SYMBOL-DESCRIPTOR is omitted, but type information follows, then
+the stab represents a local variable.  For a list of symbol
+descriptors, see *Note Symbol Descriptors::.  The `c' symbol descriptor
+is an exception in that it is not followed by type information.  *Note
+Constants::.
+
+   TYPE-INFORMATION is either a TYPE-NUMBER, or `TYPE-NUMBER='.  A
+TYPE-NUMBER alone is a type reference, referring directly to a type
+that has already been defined.
+
+   The `TYPE-NUMBER=' form is a type definition, where the number
+represents a new type which is about to be defined.  The type
+definition may refer to other types by number, and those type numbers
+may be followed by `=' and nested definitions.  Also, the Lucid
+compiler will repeat `TYPE-NUMBER=' more than once if it wants to
+define several type numbers at once.
+
+   In a type definition, if the character that follows the equals sign
+is non-numeric then it is a TYPE-DESCRIPTOR, and tells what kind of
+type is about to be defined.  Any other values following the
+TYPE-DESCRIPTOR vary, depending on the TYPE-DESCRIPTOR.  *Note Type
+Descriptors::, for a list of TYPE-DESCRIPTOR values.  If a number
+follows the `=' then the number is a TYPE-REFERENCE.  For a full
+description of types, *Note Types::.
+
+   A TYPE-NUMBER is often a single number.  The GNU and Sun tools
+additionally permit a TYPE-NUMBER to be a pair
+(FILE-NUMBER,FILETYPE-NUMBER) (the parentheses appear in the string,
+and serve to distinguish the two cases).  The FILE-NUMBER is 0 for the
+base source file, 1 for the first included file, 2 for the next, and so
+on.  The FILETYPE-NUMBER is a number starting with 1 which is
+incremented for each new type defined in the file.  (Separating the
+file number and the type number permits the `N_BINCL' optimization to
+succeed more often; see *Note Include Files::).
+
+   There is an AIX extension for type attributes.  Following the `='
+are any number of type attributes.  Each one starts with `@' and ends
+with `;'.  Debuggers, including AIX's dbx and GDB 4.10, skip any type
+attributes they do not recognize.  GDB 4.9 and other versions of dbx
+may not do this.  Because of a conflict with C++ (*note Cplusplus::),
+new attributes should not be defined which begin with a digit, `(', or
+`-'; GDB may be unable to distinguish those from the C++ type
+descriptor `@'.  The attributes are:
+
+`aBOUNDARY'
+     BOUNDARY is an integer specifying the alignment.  I assume it
+     applies to all variables of this type.
+
+`pINTEGER'
+     Pointer class (for checking).  Not sure what this means, or how
+     INTEGER is interpreted.
+
+`P'
+     Indicate this is a packed type, meaning that structure fields or
+     array elements are placed more closely in memory, to save memory
+     at the expense of speed.
+
+`sSIZE'
+     Size in bits of a variable of this type.  This is fully supported
+     by GDB 4.11 and later.
+
+`S'
+     Indicate that this type is a string instead of an array of
+     characters, or a bitstring instead of a set.  It doesn't change
+     the layout of the data being represented, but does enable the
+     debugger to know which type it is.
+
+`V'
+     Indicate that this type is a vector instead of an array.  The only
+     major difference between vectors and arrays is that vectors are
+     passed by value instead of by reference (vector coprocessor
+     extension).
+
+
+   All of this can make the string field quite long.  All versions of
+GDB, and some versions of dbx, can handle arbitrarily long strings.
+But many versions of dbx (or assemblers or linkers, I'm not sure which)
+cretinously limit the strings to about 80 characters, so compilers which
+must work with such systems need to split the `.stabs' directive into
+several `.stabs' directives.  Each stab duplicates every field except
+the string field.  The string field of every stab except the last is
+marked as continued with a backslash at the end (in the assembly code
+this may be written as a double backslash, depending on the assembler).
+Removing the backslashes and concatenating the string fields of each
+stab produces the original, long string.  Just to be incompatible (or so
+they don't have to worry about what the assembler does with
+backslashes), AIX can use `?' instead of backslash.
+
+
+File: stabs.info,  Node: C Example,  Next: Assembly Code,  Prev: String Field,  Up: Overview
+
+1.4 A Simple Example in C Source
+================================
+
+To get the flavor of how stabs describe source information for a C
+program, let's look at the simple program:
+
+     main()
+     {
+             printf("Hello world");
+     }
+
+   When compiled with `-g', the program above yields the following `.s'
+file.  Line numbers have been added to make it easier to refer to parts
+of the `.s' file in the description of the stabs that follows.
+
+
+File: stabs.info,  Node: Assembly Code,  Prev: C Example,  Up: Overview
+
+1.5 The Simple Example at the Assembly Level
+============================================
+
+This simple "hello world" example demonstrates several of the stab
+types used to describe C language source files.
+
+     1  gcc2_compiled.:
+     2  .stabs "/cygint/s1/users/jcm/play/",100,0,0,Ltext0
+     3  .stabs "hello.c",100,0,0,Ltext0
+     4  .text
+     5  Ltext0:
+     6  .stabs "int:t1=r1;-2147483648;2147483647;",128,0,0,0
+     7  .stabs "char:t2=r2;0;127;",128,0,0,0
+     8  .stabs "long int:t3=r1;-2147483648;2147483647;",128,0,0,0
+     9  .stabs "unsigned int:t4=r1;0;-1;",128,0,0,0
+     10 .stabs "long unsigned int:t5=r1;0;-1;",128,0,0,0
+     11 .stabs "short int:t6=r1;-32768;32767;",128,0,0,0
+     12 .stabs "long long int:t7=r1;0;-1;",128,0,0,0
+     13 .stabs "short unsigned int:t8=r1;0;65535;",128,0,0,0
+     14 .stabs "long long unsigned int:t9=r1;0;-1;",128,0,0,0
+     15 .stabs "signed char:t10=r1;-128;127;",128,0,0,0
+     16 .stabs "unsigned char:t11=r1;0;255;",128,0,0,0
+     17 .stabs "float:t12=r1;4;0;",128,0,0,0
+     18 .stabs "double:t13=r1;8;0;",128,0,0,0
+     19 .stabs "long double:t14=r1;8;0;",128,0,0,0
+     20 .stabs "void:t15=15",128,0,0,0
+     21      .align 4
+     22 LC0:
+     23      .ascii "Hello, world!\12\0"
+     24      .align 4
+     25      .global _main
+     26      .proc 1
+     27 _main:
+     28 .stabn 68,0,4,LM1
+     29 LM1:
+     30      !#PROLOGUE# 0
+     31      save %sp,-136,%sp
+     32      !#PROLOGUE# 1
+     33      call ___main,0
+     34      nop
+     35 .stabn 68,0,5,LM2
+     36 LM2:
+     37 LBB2:
+     38      sethi %hi(LC0),%o1
+     39      or %o1,%lo(LC0),%o0
+     40      call _printf,0
+     41      nop
+     42 .stabn 68,0,6,LM3
+     43 LM3:
+     44 LBE2:
+     45 .stabn 68,0,6,LM4
+     46 LM4:
+     47 L1:
+     48      ret
+     49      restore
+     50 .stabs "main:F1",36,0,0,_main
+     51 .stabn 192,0,0,LBB2
+     52 .stabn 224,0,0,LBE2
+
+
+File: stabs.info,  Node: Program Structure,  Next: Constants,  Prev: Overview,  Up: Top
+
+2 Encoding the Structure of the Program
+***************************************
+
+The elements of the program structure that stabs encode include the name
+of the main function, the names of the source and include files, the
+line numbers, procedure names and types, and the beginnings and ends of
+blocks of code.
+
+* Menu:
+
+* Main Program::		Indicate what the main program is
+* Source Files::		The path and name of the source file
+* Include Files::               Names of include files
+* Line Numbers::
+* Procedures::
+* Nested Procedures::
+* Block Structure::
+* Alternate Entry Points::      Entering procedures except at the beginning.
+
+
+File: stabs.info,  Node: Main Program,  Next: Source Files,  Up: Program Structure
+
+2.1 Main Program
+================
+
+Most languages allow the main program to have any name.  The `N_MAIN'
+stab type tells the debugger the name that is used in this program.
+Only the string field is significant; it is the name of a function
+which is the main program.  Most C compilers do not use this stab (they
+expect the debugger to assume that the name is `main'), but some C
+compilers emit an `N_MAIN' stab for the `main' function.  I'm not sure
+how XCOFF handles this.
+
+
+File: stabs.info,  Node: Source Files,  Next: Include Files,  Prev: Main Program,  Up: Program Structure
+
+2.2 Paths and Names of the Source Files
+=======================================
+
+Before any other stabs occur, there must be a stab specifying the source
+file.  This information is contained in a symbol of stab type `N_SO';
+the string field contains the name of the file.  The value of the
+symbol is the start address of the portion of the text section
+corresponding to that file.
+
+   Some compilers use the desc field to indicate the language of the
+source file.  Sun's compilers started this usage, and the first
+constants are derived from their documentation.  Languages added by
+gcc/gdb start at 0x32 to avoid conflict with languages Sun may add in
+the future.  A desc field with a value 0 indicates that no language has
+been specified via this mechanism.
+
+`N_SO_AS' (0x1)
+     Assembly language
+
+`N_SO_C'  (0x2)
+     K&R traditional C
+
+`N_SO_ANSI_C' (0x3)
+     ANSI C
+
+`N_SO_CC'  (0x4)
+     C++
+
+`N_SO_FORTRAN' (0x5)
+     Fortran
+
+`N_SO_PASCAL' (0x6)
+     Pascal
+
+`N_SO_FORTRAN90' (0x7)
+     Fortran90
+
+`N_SO_OBJC' (0x32)
+     Objective-C
+
+`N_SO_OBJCPLUS' (0x33)
+     Objective-C++
+
+   Some compilers (for example, GCC2 and SunOS4 `/bin/cc') also include
+the directory in which the source was compiled, in a second `N_SO'
+symbol preceding the one containing the file name.  This symbol can be
+distinguished by the fact that it ends in a slash.  Code from the
+`cfront' C++ compiler can have additional `N_SO' symbols for
+nonexistent source files after the `N_SO' for the real source file;
+these are believed to contain no useful information.
+
+   For example:
+
+     .stabs "/cygint/s1/users/jcm/play/",100,0,0,Ltext0     # 100 is N_SO
+     .stabs "hello.c",100,0,0,Ltext0
+             .text
+     Ltext0:
+
+   Instead of `N_SO' symbols, XCOFF uses a `.file' assembler directive
+which assembles to a `C_FILE' symbol; explaining this in detail is
+outside the scope of this document.
+
+   If it is useful to indicate the end of a source file, this is done
+with an `N_SO' symbol with an empty string for the name.  The value is
+the address of the end of the text section for the file.  For some
+systems, there is no indication of the end of a source file, and you
+just need to figure it ended when you see an `N_SO' for a different
+source file, or a symbol ending in `.o' (which at least some linkers
+insert to mark the start of a new `.o' file).
+
+
+File: stabs.info,  Node: Include Files,  Next: Line Numbers,  Prev: Source Files,  Up: Program Structure
+
+2.3 Names of Include Files
+==========================
+
+There are several schemes for dealing with include files: the
+traditional `N_SOL' approach, Sun's `N_BINCL' approach, and the XCOFF
+`C_BINCL' approach (which despite the similar name has little in common
+with `N_BINCL').
+
+   An `N_SOL' symbol specifies which include file subsequent symbols
+refer to.  The string field is the name of the file and the value is the
+text address corresponding to the end of the previous include file and
+the start of this one.  To specify the main source file again, use an
+`N_SOL' symbol with the name of the main source file.
+
+   The `N_BINCL' approach works as follows.  An `N_BINCL' symbol
+specifies the start of an include file.  In an object file, only the
+string is significant; the linker puts data into some of the other
+fields.  The end of the include file is marked by an `N_EINCL' symbol
+(which has no string field).  In an object file, there is no
+significant data in the `N_EINCL' symbol.  `N_BINCL' and `N_EINCL' can
+be nested.
+
+   If the linker detects that two source files have identical stabs
+between an `N_BINCL' and `N_EINCL' pair (as will generally be the case
+for a header file), then it only puts out the stabs once.  Each
+additional occurrence is replaced by an `N_EXCL' symbol.  I believe the
+GNU linker and the Sun (both SunOS4 and Solaris) linker are the only
+ones which supports this feature.
+
+   A linker which supports this feature will set the value of a
+`N_BINCL' symbol to the total of all the characters in the stabs
+strings included in the header file, omitting any file numbers.  The
+value of an `N_EXCL' symbol is the same as the value of the `N_BINCL'
+symbol it replaces.  This information can be used to match up `N_EXCL'
+and `N_BINCL' symbols which have the same filename.  The `N_EINCL'
+value, and the values of the other and description fields for all
+three, appear to always be zero.
+
+   For the start of an include file in XCOFF, use the `.bi' assembler
+directive, which generates a `C_BINCL' symbol.  A `.ei' directive,
+which generates a `C_EINCL' symbol, denotes the end of the include
+file.  Both directives are followed by the name of the source file in
+quotes, which becomes the string for the symbol.  The value of each
+symbol, produced automatically by the assembler and linker, is the
+offset into the executable of the beginning (inclusive, as you'd
+expect) or end (inclusive, as you would not expect) of the portion of
+the COFF line table that corresponds to this include file.  `C_BINCL'
+and `C_EINCL' do not nest.
+
+
+File: stabs.info,  Node: Line Numbers,  Next: Procedures,  Prev: Include Files,  Up: Program Structure
+
+2.4 Line Numbers
+================
+
+An `N_SLINE' symbol represents the start of a source line.  The desc
+field contains the line number and the value contains the code address
+for the start of that source line.  On most machines the address is
+absolute; for stabs in sections (*note Stab Sections::), it is relative
+to the function in which the `N_SLINE' symbol occurs.
+
+   GNU documents `N_DSLINE' and `N_BSLINE' symbols for line numbers in
+the data or bss segments, respectively.  They are identical to
+`N_SLINE' but are relocated differently by the linker.  They were
+intended to be used to describe the source location of a variable
+declaration, but I believe that GCC2 actually puts the line number in
+the desc field of the stab for the variable itself.  GDB has been
+ignoring these symbols (unless they contain a string field) since at
+least GDB 3.5.
+
+   For single source lines that generate discontiguous code, such as
+flow of control statements, there may be more than one line number
+entry for the same source line.  In this case there is a line number
+entry at the start of each code range, each with the same line number.
+
+   XCOFF does not use stabs for line numbers.  Instead, it uses COFF
+line numbers (which are outside the scope of this document).  Standard
+COFF line numbers cannot deal with include files, but in XCOFF this is
+fixed with the `C_BINCL' method of marking include files (*note Include
+Files::).
+
+
+File: stabs.info,  Node: Procedures,  Next: Nested Procedures,  Prev: Line Numbers,  Up: Program Structure
+
+2.5 Procedures
+==============
+
+All of the following stabs normally use the `N_FUN' symbol type.
+However, Sun's `acc' compiler on SunOS4 uses `N_GSYM' and `N_STSYM',
+which means that the value of the stab for the function is useless and
+the debugger must get the address of the function from the non-stab
+symbols instead.  On systems where non-stab symbols have leading
+underscores, the stabs will lack underscores and the debugger needs to
+know about the leading underscore to match up the stab and the non-stab
+symbol.  BSD Fortran is said to use `N_FNAME' with the same
+restriction; the value of the symbol is not useful (I'm not sure it
+really does use this, because GDB doesn't handle this and no one has
+complained).
+
+   A function is represented by an `F' symbol descriptor for a global
+(extern) function, and `f' for a static (local) function.  For a.out,
+the value of the symbol is the address of the start of the function; it
+is already relocated.  For stabs in ELF, the SunPRO compiler version
+2.0.1 and GCC put out an address which gets relocated by the linker.
+In a future release SunPRO is planning to put out zero, in which case
+the address can be found from the ELF (non-stab) symbol.  Because
+looking things up in the ELF symbols would probably be slow, I'm not
+sure how to find which symbol of that name is the right one, and this
+doesn't provide any way to deal with nested functions, it would
+probably be better to make the value of the stab an address relative to
+the start of the file, or just absolute.  See *Note ELF Linker
+Relocation:: for more information on linker relocation of stabs in ELF
+files.  For XCOFF, the stab uses the `C_FUN' storage class and the
+value of the stab is meaningless; the address of the function can be
+found from the csect symbol (XTY_LD/XMC_PR).
+
+   The type information of the stab represents the return type of the
+function; thus `foo:f5' means that foo is a function returning type 5.
+There is no need to try to get the line number of the start of the
+function from the stab for the function; it is in the next `N_SLINE'
+symbol.
+
+   Some compilers (such as Sun's Solaris compiler) support an extension
+for specifying the types of the arguments.  I suspect this extension is
+not used for old (non-prototyped) function definitions in C.  If the
+extension is in use, the type information of the stab for the function
+is followed by type information for each argument, with each argument
+preceded by `;'.  An argument type of 0 means that additional arguments
+are being passed, whose types and number may vary (`...' in ANSI C).
+GDB has tolerated this extension (parsed the syntax, if not necessarily
+used the information) since at least version 4.8; I don't know whether
+all versions of dbx tolerate it.  The argument types given here are not
+redundant with the symbols for the formal parameters (*note
+Parameters::); they are the types of the arguments as they are passed,
+before any conversions might take place.  For example, if a C function
+which is declared without a prototype takes a `float' argument, the
+value is passed as a `double' but then converted to a `float'.
+Debuggers need to use the types given in the arguments when printing
+values, but when calling the function they need to use the types given
+in the symbol defining the function.
+
+   If the return type and types of arguments of a function which is
+defined in another source file are specified (i.e., a function
+prototype in ANSI C), traditionally compilers emit no stab; the only
+way for the debugger to find the information is if the source file
+where the function is defined was also compiled with debugging symbols.
+As an extension the Solaris compiler uses symbol descriptor `P'
+followed by the return type of the function, followed by the arguments,
+each preceded by `;', as in a stab with symbol descriptor `f' or `F'.
+This use of symbol descriptor `P' can be distinguished from its use for
+register parameters (*note Register Parameters::) by the fact that it
+has symbol type `N_FUN'.
+
+   The AIX documentation also defines symbol descriptor `J' as an
+internal function.  I assume this means a function nested within another
+function.  It also says symbol descriptor `m' is a module in Modula-2
+or extended Pascal.
+
+   Procedures (functions which do not return values) are represented as
+functions returning the `void' type in C.  I don't see why this couldn't
+be used for all languages (inventing a `void' type for this purpose if
+necessary), but the AIX documentation defines `I', `P', and `Q' for
+internal, global, and static procedures, respectively.  These symbol
+descriptors are unusual in that they are not followed by type
+information.
+
+   The following example shows a stab for a function `main' which
+returns type number `1'.  The `_main' specified for the value is a
+reference to an assembler label which is used to fill in the start
+address of the function.
+
+     .stabs "main:F1",36,0,0,_main      # 36 is N_FUN
+
+   The stab representing a procedure is located immediately following
+the code of the procedure.  This stab is in turn directly followed by a
+group of other stabs describing elements of the procedure.  These other
+stabs describe the procedure's parameters, its block local variables,
+and its block structure.
+
+   If functions can appear in different sections, then the debugger may
+not be able to find the end of a function.  Recent versions of GCC will
+mark the end of a function with an `N_FUN' symbol with an empty string
+for the name.  The value is the address of the end of the current
+function.  Without such a symbol, there is no indication of the address
+of the end of a function, and you must assume that it ended at the
+starting address of the next function or at the end of the text section
+for the program.
+
+
+File: stabs.info,  Node: Nested Procedures,  Next: Block Structure,  Prev: Procedures,  Up: Program Structure
+
+2.6 Nested Procedures
+=====================
+
+For any of the symbol descriptors representing procedures, after the
+symbol descriptor and the type information is optionally a scope
+specifier.  This consists of a comma, the name of the procedure, another
+comma, and the name of the enclosing procedure.  The first name is local
+to the scope specified, and seems to be redundant with the name of the
+symbol (before the `:').  This feature is used by GCC, and presumably
+Pascal, Modula-2, etc., compilers, for nested functions.
+
+   If procedures are nested more than one level deep, only the
+immediately containing scope is specified.  For example, this code:
+
+     int
+     foo (int x)
+     {
+       int bar (int y)
+         {
+           int baz (int z)
+             {
+               return x + y + z;
+             }
+           return baz (x + 2 * y);
+         }
+       return x + bar (3 * x);
+     }
+
+produces the stabs:
+
+     .stabs "baz:f1,baz,bar",36,0,0,_baz.15         # 36 is N_FUN
+     .stabs "bar:f1,bar,foo",36,0,0,_bar.12
+     .stabs "foo:F1",36,0,0,_foo
+
+
+File: stabs.info,  Node: Block Structure,  Next: Alternate Entry Points,  Prev: Nested Procedures,  Up: Program Structure
+
+2.7 Block Structure
+===================
+
+The program's block structure is represented by the `N_LBRAC' (left
+brace) and the `N_RBRAC' (right brace) stab types.  The variables
+defined inside a block precede the `N_LBRAC' symbol for most compilers,
+including GCC.  Other compilers, such as the Convex, Acorn RISC
+machine, and Sun `acc' compilers, put the variables after the `N_LBRAC'
+symbol.  The values of the `N_LBRAC' and `N_RBRAC' symbols are the
+start and end addresses of the code of the block, respectively.  For
+most machines, they are relative to the starting address of this source
+file.  For the Gould NP1, they are absolute.  For stabs in sections
+(*note Stab Sections::), they are relative to the function in which
+they occur.
+
+   The `N_LBRAC' and `N_RBRAC' stabs that describe the block scope of a
+procedure are located after the `N_FUN' stab that represents the
+procedure itself.
+
+   Sun documents the desc field of `N_LBRAC' and `N_RBRAC' symbols as
+containing the nesting level of the block.  However, dbx seems to not
+care, and GCC always sets desc to zero.
+
+   For XCOFF, block scope is indicated with `C_BLOCK' symbols.  If the
+name of the symbol is `.bb', then it is the beginning of the block; if
+the name of the symbol is `.be'; it is the end of the block.
+
+
+File: stabs.info,  Node: Alternate Entry Points,  Prev: Block Structure,  Up: Program Structure
+
+2.8 Alternate Entry Points
+==========================
+
+Some languages, like Fortran, have the ability to enter procedures at
+some place other than the beginning.  One can declare an alternate entry
+point.  The `N_ENTRY' stab is for this; however, the Sun FORTRAN
+compiler doesn't use it.  According to AIX documentation, only the name
+of a `C_ENTRY' stab is significant; the address of the alternate entry
+point comes from the corresponding external symbol.  A previous
+revision of this document said that the value of an `N_ENTRY' stab was
+the address of the alternate entry point, but I don't know the source
+for that information.
+
+
+File: stabs.info,  Node: Constants,  Next: Variables,  Prev: Program Structure,  Up: Top
+
+3 Constants
+***********
+
+The `c' symbol descriptor indicates that this stab represents a
+constant.  This symbol descriptor is an exception to the general rule
+that symbol descriptors are followed by type information.  Instead, it
+is followed by `=' and one of the following:
+
+`b VALUE'
+     Boolean constant.  VALUE is a numeric value; I assume it is 0 for
+     false or 1 for true.
+
+`c VALUE'
+     Character constant.  VALUE is the numeric value of the constant.
+
+`e TYPE-INFORMATION , VALUE'
+     Constant whose value can be represented as integral.
+     TYPE-INFORMATION is the type of the constant, as it would appear
+     after a symbol descriptor (*note String Field::).  VALUE is the
+     numeric value of the constant.  GDB 4.9 does not actually get the
+     right value if VALUE does not fit in a host `int', but it does not
+     do anything violent, and future debuggers could be extended to
+     accept integers of any size (whether unsigned or not).  This
+     constant type is usually documented as being only for enumeration
+     constants, but GDB has never imposed that restriction; I don't
+     know about other debuggers.
+
+`i VALUE'
+     Integer constant.  VALUE is the numeric value.  The type is some
+     sort of generic integer type (for GDB, a host `int'); to specify
+     the type explicitly, use `e' instead.
+
+`r VALUE'
+     Real constant.  VALUE is the real value, which can be `INF'
+     (optionally preceded by a sign) for infinity, `QNAN' for a quiet
+     NaN (not-a-number), or `SNAN' for a signalling NaN.  If it is a
+     normal number the format is that accepted by the C library function
+     `atof'.
+
+`s STRING'
+     String constant.  STRING is a string enclosed in either `'' (in
+     which case `'' characters within the string are represented as
+     `\'' or `"' (in which case `"' characters within the string are
+     represented as `\"').
+
+`S TYPE-INFORMATION , ELEMENTS , BITS , PATTERN'
+     Set constant.  TYPE-INFORMATION is the type of the constant, as it
+     would appear after a symbol descriptor (*note String Field::).
+     ELEMENTS is the number of elements in the set (does this means how
+     many bits of PATTERN are actually used, which would be redundant
+     with the type, or perhaps the number of bits set in PATTERN?  I
+     don't get it), BITS is the number of bits in the constant (meaning
+     it specifies the length of PATTERN, I think), and PATTERN is a
+     hexadecimal representation of the set.  AIX documentation refers
+     to a limit of 32 bytes, but I see no reason why this limit should
+     exist.  This form could probably be used for arbitrary constants,
+     not just sets; the only catch is that PATTERN should be understood
+     to be target, not host, byte order and format.
+
+   The boolean, character, string, and set constants are not supported
+by GDB 4.9, but it ignores them.  GDB 4.8 and earlier gave an error
+message and refused to read symbols from the file containing the
+constants.
+
+   The above information is followed by `;'.
+
+
+File: stabs.info,  Node: Variables,  Next: Types,  Prev: Constants,  Up: Top
+
+4 Variables
+***********
+
+Different types of stabs describe the various ways that variables can be
+allocated: on the stack, globally, in registers, in common blocks,
+statically, or as arguments to a function.
+
+* Menu:
+
+* Stack Variables::		Variables allocated on the stack.
+* Global Variables::		Variables used by more than one source file.
+* Register Variables::		Variables in registers.
+* Common Blocks::		Variables statically allocated together.
+* Statics::			Variables local to one source file.
+* Based Variables::		Fortran pointer based variables.
+* Parameters::			Variables for arguments to functions.
+
+
+File: stabs.info,  Node: Stack Variables,  Next: Global Variables,  Up: Variables
+
+4.1 Automatic Variables Allocated on the Stack
+==============================================
+
+If a variable's scope is local to a function and its lifetime is only as
+long as that function executes (C calls such variables "automatic"), it
+can be allocated in a register (*note Register Variables::) or on the
+stack.
+
+   Each variable allocated on the stack has a stab with the symbol
+descriptor omitted.  Since type information should begin with a digit,
+`-', or `(', only those characters precluded from being used for symbol
+descriptors.  However, the Acorn RISC machine (ARM) is said to get this
+wrong: it puts out a mere type definition here, without the preceding
+`TYPE-NUMBER='.  This is a bad idea; there is no guarantee that type
+descriptors are distinct from symbol descriptors.  Stabs for stack
+variables use the `N_LSYM' stab type, or `C_LSYM' for XCOFF.
+
+   The value of the stab is the offset of the variable within the local
+variables.  On most machines this is an offset from the frame pointer
+and is negative.  The location of the stab specifies which block it is
+defined in; see *Note Block Structure::.
+
+   For example, the following C code:
+
+     int
+     main ()
+     {
+       int x;
+     }
+
+   produces the following stabs:
+
+     .stabs "main:F1",36,0,0,_main   # 36 is N_FUN
+     .stabs "x:1",128,0,0,-12        # 128 is N_LSYM
+     .stabn 192,0,0,LBB2             # 192 is N_LBRAC
+     .stabn 224,0,0,LBE2             # 224 is N_RBRAC
+
+   See *Note Procedures:: for more information on the `N_FUN' stab, and
+*Note Block Structure:: for more information on the `N_LBRAC' and
+`N_RBRAC' stabs.
+
+
+File: stabs.info,  Node: Global Variables,  Next: Register Variables,  Prev: Stack Variables,  Up: Variables
+
+4.2 Global Variables
+====================
+
+A variable whose scope is not specific to just one source file is
+represented by the `G' symbol descriptor.  These stabs use the `N_GSYM'
+stab type (C_GSYM for XCOFF).  The type information for the stab (*note
+String Field::) gives the type of the variable.
+
+   For example, the following source code:
+
+     char g_foo = 'c';
+
+yields the following assembly code:
+
+     .stabs "g_foo:G2",32,0,0,0     # 32 is N_GSYM
+          .global _g_foo
+          .data
+     _g_foo:
+          .byte 99
+
+   The address of the variable represented by the `N_GSYM' is not
+contained in the `N_GSYM' stab.  The debugger gets this information
+from the external symbol for the global variable.  In the example above,
+the `.global _g_foo' and `_g_foo:' lines tell the assembler to produce
+an external symbol.
+
+   Some compilers, like GCC, output `N_GSYM' stabs only once, where the
+variable is defined.  Other compilers, like SunOS4 /bin/cc, output a
+`N_GSYM' stab for each compilation unit which references the variable.
+
+
+File: stabs.info,  Node: Register Variables,  Next: Common Blocks,  Prev: Global Variables,  Up: Variables
+
+4.3 Register Variables
+======================
+
+Register variables have their own stab type, `N_RSYM' (`C_RSYM' for
+XCOFF), and their own symbol descriptor, `r'.  The stab's value is the
+number of the register where the variable data will be stored.
+
+   AIX defines a separate symbol descriptor `d' for floating point
+registers.  This seems unnecessary; why not just just give floating
+point registers different register numbers?  I have not verified whether
+the compiler actually uses `d'.
+
+   If the register is explicitly allocated to a global variable, but not
+initialized, as in:
+
+     register int g_bar asm ("%g5");
+
+then the stab may be emitted at the end of the object file, with the
+other bss symbols.
+
+
+File: stabs.info,  Node: Common Blocks,  Next: Statics,  Prev: Register Variables,  Up: Variables
+
+4.4 Common Blocks
+=================
+
+A common block is a statically allocated section of memory which can be
+referred to by several source files.  It may contain several variables.
+I believe Fortran is the only language with this feature.
+
+   A `N_BCOMM' stab begins a common block and an `N_ECOMM' stab ends
+it.  The only field that is significant in these two stabs is the
+string, which names a normal (non-debugging) symbol that gives the
+address of the common block.  According to IBM documentation, only the
+`N_BCOMM' has the name of the common block (even though their compiler
+actually puts it both places).
+
+   The stabs for the members of the common block are between the
+`N_BCOMM' and the `N_ECOMM'; the value of each stab is the offset
+within the common block of that variable.  IBM uses the `C_ECOML' stab
+type, and there is a corresponding `N_ECOML' stab type, but Sun's
+Fortran compiler uses `N_GSYM' instead.  The variables within a common
+block use the `V' symbol descriptor (I believe this is true of all
+Fortran variables).  Other stabs (at least type declarations using
+`C_DECL') can also be between the `N_BCOMM' and the `N_ECOMM'.
+
+
+File: stabs.info,  Node: Statics,  Next: Based Variables,  Prev: Common Blocks,  Up: Variables
+
+4.5 Static Variables
+====================
+
+Initialized static variables are represented by the `S' and `V' symbol
+descriptors.  `S' means file scope static, and `V' means procedure
+scope static.  One exception: in XCOFF, IBM's xlc compiler always uses
+`V', and whether it is file scope or not is distinguished by whether
+the stab is located within a function.
+
+   In a.out files, `N_STSYM' means the data section, `N_FUN' means the
+text section, and `N_LCSYM' means the bss section.  For those systems
+with a read-only data section separate from the text section (Solaris),
+`N_ROSYM' means the read-only data section.
+
+   For example, the source lines:
+
+     static const int var_const = 5;
+     static int var_init = 2;
+     static int var_noinit;
+
+yield the following stabs:
+
+     .stabs "var_const:S1",36,0,0,_var_const      # 36 is N_FUN
+     ...
+     .stabs "var_init:S1",38,0,0,_var_init        # 38 is N_STSYM
+     ...
+     .stabs "var_noinit:S1",40,0,0,_var_noinit    # 40 is N_LCSYM
+
+   In XCOFF files, the stab type need not indicate the section;
+`C_STSYM' can be used for all statics.  Also, each static variable is
+enclosed in a static block.  A `C_BSTAT' (emitted with a `.bs'
+assembler directive) symbol begins the static block; its value is the
+symbol number of the csect symbol whose value is the address of the
+static block, its section is the section of the variables in that
+static block, and its name is `.bs'.  A `C_ESTAT' (emitted with a `.es'
+assembler directive) symbol ends the static block; its name is `.es'
+and its value and section are ignored.
+
+   In ECOFF files, the storage class is used to specify the section, so
+the stab type need not indicate the section.
+
+   In ELF files, for the SunPRO compiler version 2.0.1, symbol
+descriptor `S' means that the address is absolute (the linker relocates
+it) and symbol descriptor `V' means that the address is relative to the
+start of the relevant section for that compilation unit.  SunPRO has
+plans to have the linker stop relocating stabs; I suspect that their the
+debugger gets the address from the corresponding ELF (not stab) symbol.
+I'm not sure how to find which symbol of that name is the right one.
+The clean way to do all this would be to have the value of a symbol
+descriptor `S' symbol be an offset relative to the start of the file,
+just like everything else, but that introduces obvious compatibility
+problems.  For more information on linker stab relocation, *Note ELF
+Linker Relocation::.
+
+
+File: stabs.info,  Node: Based Variables,  Next: Parameters,  Prev: Statics,  Up: Variables
+
+4.6 Fortran Based Variables
+===========================
+
+Fortran (at least, the Sun and SGI dialects of FORTRAN-77) has a feature
+which allows allocating arrays with `malloc', but which avoids blurring
+the line between arrays and pointers the way that C does.  In stabs
+such a variable uses the `b' symbol descriptor.
+
+   For example, the Fortran declarations
+
+     real foo, foo10(10), foo10_5(10,5)
+     pointer (foop, foo)
+     pointer (foo10p, foo10)
+     pointer (foo105p, foo10_5)
+
+   produce the stabs
+
+     foo:b6
+     foo10:bar3;1;10;6
+     foo10_5:bar3;1;5;ar3;1;10;6
+
+   In this example, `real' is type 6 and type 3 is an integral type
+which is the type of the subscripts of the array (probably `integer').
+
+   The `b' symbol descriptor is like `V' in that it denotes a
+statically allocated symbol whose scope is local to a function; see
+*Note Statics::.  The value of the symbol, instead of being the address
+of the variable itself, is the address of a pointer to that variable.
+So in the above example, the value of the `foo' stab is the address of
+a pointer to a real, the value of the `foo10' stab is the address of a
+pointer to a 10-element array of reals, and the value of the `foo10_5'
+stab is the address of a pointer to a 5-element array of 10-element
+arrays of reals.
+
+
+File: stabs.info,  Node: Parameters,  Prev: Based Variables,  Up: Variables
+
+4.7 Parameters
+==============
+
+Formal parameters to a function are represented by a stab (or sometimes
+two; see below) for each parameter.  The stabs are in the order in which
+the debugger should print the parameters (i.e., the order in which the
+parameters are declared in the source file).  The exact form of the stab
+depends on how the parameter is being passed.
+
+   Parameters passed on the stack use the symbol descriptor `p' and the
+`N_PSYM' symbol type (or `C_PSYM' for XCOFF).  The value of the symbol
+is an offset used to locate the parameter on the stack; its exact
+meaning is machine-dependent, but on most machines it is an offset from
+the frame pointer.
+
+   As a simple example, the code:
+
+     main (argc, argv)
+          int argc;
+          char **argv;
+
+   produces the stabs:
+
+     .stabs "main:F1",36,0,0,_main                 # 36 is N_FUN
+     .stabs "argc:p1",160,0,0,68                   # 160 is N_PSYM
+     .stabs "argv:p20=*21=*2",160,0,0,72
+
+   The type definition of `argv' is interesting because it contains
+several type definitions.  Type 21 is pointer to type 2 (char) and
+`argv' (type 20) is pointer to type 21.
+
+   The following symbol descriptors are also said to go with `N_PSYM'.
+The value of the symbol is said to be an offset from the argument
+pointer (I'm not sure whether this is true or not).
+
+     pP (<<??>>)
+     pF Fortran function parameter
+     X  (function result variable)
+
+* Menu:
+
+* Register Parameters::
+* Local Variable Parameters::
+* Reference Parameters::
+* Conformant Arrays::
+
+
+File: stabs.info,  Node: Register Parameters,  Next: Local Variable Parameters,  Up: Parameters
+
+4.7.1 Passing Parameters in Registers
+-------------------------------------
+
+If the parameter is passed in a register, then traditionally there are
+two symbols for each argument:
+
+     .stabs "arg:p1" . . .       ; N_PSYM
+     .stabs "arg:r1" . . .       ; N_RSYM
+
+   Debuggers use the second one to find the value, and the first one to
+know that it is an argument.
+
+   Because that approach is kind of ugly, some compilers use symbol
+descriptor `P' or `R' to indicate an argument which is in a register.
+Symbol type `C_RPSYM' is used in XCOFF and `N_RSYM' is used otherwise.
+The symbol's value is the register number.  `P' and `R' mean the same
+thing; the difference is that `P' is a GNU invention and `R' is an IBM
+(XCOFF) invention.  As of version 4.9, GDB should handle either one.
+
+   There is at least one case where GCC uses a `p' and `r' pair rather
+than `P'; this is where the argument is passed in the argument list and
+then loaded into a register.
+
+   According to the AIX documentation, symbol descriptor `D' is for a
+parameter passed in a floating point register.  This seems
+unnecessary--why not just use `R' with a register number which
+indicates that it's a floating point register?  I haven't verified
+whether the system actually does what the documentation indicates.
+
+   On the sparc and hppa, for a `P' symbol whose type is a structure or
+union, the register contains the address of the structure.  On the
+sparc, this is also true of a `p' and `r' pair (using Sun `cc') or a
+`p' symbol.  However, if a (small) structure is really in a register,
+`r' is used.  And, to top it all off, on the hppa it might be a
+structure which was passed on the stack and loaded into a register and
+for which there is a `p' and `r' pair!  I believe that symbol
+descriptor `i' is supposed to deal with this case (it is said to mean
+"value parameter by reference, indirect access"; I don't know the
+source for this information), but I don't know details or what
+compilers or debuggers use it, if any (not GDB or GCC).  It is not
+clear to me whether this case needs to be dealt with differently than
+parameters passed by reference (*note Reference Parameters::).
+
+
+File: stabs.info,  Node: Local Variable Parameters,  Next: Reference Parameters,  Prev: Register Parameters,  Up: Parameters
+
+4.7.2 Storing Parameters as Local Variables
+-------------------------------------------
+
+There is a case similar to an argument in a register, which is an
+argument that is actually stored as a local variable.  Sometimes this
+happens when the argument was passed in a register and then the compiler
+stores it as a local variable.  If possible, the compiler should claim
+that it's in a register, but this isn't always done.
+
+   If a parameter is passed as one type and converted to a smaller type
+by the prologue (for example, the parameter is declared as a `float',
+but the calling conventions specify that it is passed as a `double'),
+then GCC2 (sometimes) uses a pair of symbols.  The first symbol uses
+symbol descriptor `p' and the type which is passed.  The second symbol
+has the type and location which the parameter actually has after the
+prologue.  For example, suppose the following C code appears with no
+prototypes involved:
+
+     void
+     subr (f)
+          float f;
+     {
+
+   if `f' is passed as a double at stack offset 8, and the prologue
+converts it to a float in register number 0, then the stabs look like:
+
+     .stabs "f:p13",160,0,3,8   # 160 is `N_PSYM', here 13 is `double'
+     .stabs "f:r12",64,0,3,0    # 64 is `N_RSYM', here 12 is `float'
+
+   In both stabs 3 is the line number where `f' is declared (*note Line
+Numbers::).
+
+   GCC, at least on the 960, has another solution to the same problem.
+It uses a single `p' symbol descriptor for an argument which is stored
+as a local variable but uses `N_LSYM' instead of `N_PSYM'.  In this
+case, the value of the symbol is an offset relative to the local
+variables for that function, not relative to the arguments; on some
+machines those are the same thing, but not on all.
+
+   On the VAX or on other machines in which the calling convention
+includes the number of words of arguments actually passed, the debugger
+(GDB at least) uses the parameter symbols to keep track of whether it
+needs to print nameless arguments in addition to the formal parameters
+which it has printed because each one has a stab.  For example, in
+
+     extern int fprintf (FILE *stream, char *format, ...);
+     ...
+     fprintf (stdout, "%d\n", x);
+
+   there are stabs for `stream' and `format'.  On most machines, the
+debugger can only print those two arguments (because it has no way of
+knowing that additional arguments were passed), but on the VAX or other
+machines with a calling convention which indicates the number of words
+of arguments, the debugger can print all three arguments.  To do so,
+the parameter symbol (symbol descriptor `p') (not necessarily `r' or
+symbol descriptor omitted symbols) needs to contain the actual type as
+passed (for example, `double' not `float' if it is passed as a double
+and converted to a float).
+
+
+File: stabs.info,  Node: Reference Parameters,  Next: Conformant Arrays,  Prev: Local Variable Parameters,  Up: Parameters
+
+4.7.3 Passing Parameters by Reference
+-------------------------------------
+
+If the parameter is passed by reference (e.g., Pascal `VAR'
+parameters), then the symbol descriptor is `v' if it is in the argument
+list, or `a' if it in a register.  Other than the fact that these
+contain the address of the parameter rather than the parameter itself,
+they are identical to `p' and `R', respectively.  I believe `a' is an
+AIX invention; `v' is supported by all stabs-using systems as far as I
+know.
+
+
+File: stabs.info,  Node: Conformant Arrays,  Prev: Reference Parameters,  Up: Parameters
+
+4.7.4 Passing Conformant Array Parameters
+-----------------------------------------
+
+Conformant arrays are a feature of Modula-2, and perhaps other
+languages, in which the size of an array parameter is not known to the
+called function until run-time.  Such parameters have two stabs: a `x'
+for the array itself, and a `C', which represents the size of the
+array.  The value of the `x' stab is the offset in the argument list
+where the address of the array is stored (it this right?  it is a
+guess); the value of the `C' stab is the offset in the argument list
+where the size of the array (in elements? in bytes?) is stored.
+
+
+File: stabs.info,  Node: Types,  Next: Macro define and undefine,  Prev: Variables,  Up: Top
+
+5 Defining Types
+****************
+
+The examples so far have described types as references to previously
+defined types, or defined in terms of subranges of or pointers to
+previously defined types.  This chapter describes the other type
+descriptors that may follow the `=' in a type definition.
+
+* Menu:
+
+* Builtin Types::		Integers, floating point, void, etc.
+* Miscellaneous Types::		Pointers, sets, files, etc.
+* Cross-References::		Referring to a type not yet defined.
+* Subranges::			A type with a specific range.
+* Arrays::			An aggregate type of same-typed elements.
+* Strings::			Like an array but also has a length.
+* Enumerations::		Like an integer but the values have names.
+* Structures::			An aggregate type of different-typed elements.
+* Typedefs::			Giving a type a name.
+* Unions::			Different types sharing storage.
+* Function Types::
+
+
+File: stabs.info,  Node: Builtin Types,  Next: Miscellaneous Types,  Up: Types
+
+5.1 Builtin Types
+=================
+
+Certain types are built in (`int', `short', `void', `float', etc.); the
+debugger recognizes these types and knows how to handle them.  Thus,
+don't be surprised if some of the following ways of specifying builtin
+types do not specify everything that a debugger would need to know
+about the type--in some cases they merely specify enough information to
+distinguish the type from other types.
+
+   The traditional way to define builtin types is convoluted, so new
+ways have been invented to describe them.  Sun's `acc' uses special
+builtin type descriptors (`b' and `R'), and IBM uses negative type
+numbers.  GDB accepts all three ways, as of version 4.8; dbx just
+accepts the traditional builtin types and perhaps one of the other two
+formats.  The following sections describe each of these formats.
+
+* Menu:
+
+* Traditional Builtin Types::	Put on your seat belts and prepare for kludgery
+* Builtin Type Descriptors::	Builtin types with special type descriptors
+* Negative Type Numbers::	Builtin types using negative type numbers
+
+
+File: stabs.info,  Node: Traditional Builtin Types,  Next: Builtin Type Descriptors,  Up: Builtin Types
+
+5.1.1 Traditional Builtin Types
+-------------------------------
+
+This is the traditional, convoluted method for defining builtin types.
+There are several classes of such type definitions: integer, floating
+point, and `void'.
+
+* Menu:
+
+* Traditional Integer Types::
+* Traditional Other Types::
+
+
+File: stabs.info,  Node: Traditional Integer Types,  Next: Traditional Other Types,  Up: Traditional Builtin Types
+
+5.1.1.1 Traditional Integer Types
+.................................
+
+Often types are defined as subranges of themselves.  If the bounding
+values fit within an `int', then they are given normally.  For example:
+
+     .stabs "int:t1=r1;-2147483648;2147483647;",128,0,0,0    # 128 is N_LSYM
+     .stabs "char:t2=r2;0;127;",128,0,0,0
+
+   Builtin types can also be described as subranges of `int':
+
+     .stabs "unsigned short:t6=r1;0;65535;",128,0,0,0
+
+   If the lower bound of a subrange is 0 and the upper bound is -1, the
+type is an unsigned integral type whose bounds are too big to describe
+in an `int'.  Traditionally this is only used for `unsigned int' and
+`unsigned long':
+
+     .stabs "unsigned int:t4=r1;0;-1;",128,0,0,0
+
+   For larger types, GCC 2.4.5 puts out bounds in octal, with one or
+more leading zeroes.  In this case a negative bound consists of a number
+which is a 1 bit (for the sign bit) followed by a 0 bit for each bit in
+the number (except the sign bit), and a positive bound is one which is a
+1 bit for each bit in the number (except possibly the sign bit).  All
+known versions of dbx and GDB version 4 accept this (at least in the
+sense of not refusing to process the file), but GDB 3.5 refuses to read
+the whole file containing such symbols.  So GCC 2.3.3 did not output the
+proper size for these types.  As an example of octal bounds, the string
+fields of the stabs for 64 bit integer types look like:
+
+     long int:t3=r1;001000000000000000000000;000777777777777777777777;
+     long unsigned int:t5=r1;000000000000000000000000;001777777777777777777777;
+
+   If the lower bound of a subrange is 0 and the upper bound is
+negative, the type is an unsigned integral type whose size in bytes is
+the absolute value of the upper bound.  I believe this is a Convex
+convention for `unsigned long long'.
+
+   If the lower bound of a subrange is negative and the upper bound is
+0, the type is a signed integral type whose size in bytes is the
+absolute value of the lower bound.  I believe this is a Convex
+convention for `long long'.  To distinguish this from a legitimate
+subrange, the type should be a subrange of itself.  I'm not sure whether
+this is the case for Convex.
+
+
+File: stabs.info,  Node: Traditional Other Types,  Prev: Traditional Integer Types,  Up: Traditional Builtin Types
+
+5.1.1.2 Traditional Other Types
+...............................
+
+If the upper bound of a subrange is 0 and the lower bound is positive,
+the type is a floating point type, and the lower bound of the subrange
+indicates the number of bytes in the type:
+
+     .stabs "float:t12=r1;4;0;",128,0,0,0
+     .stabs "double:t13=r1;8;0;",128,0,0,0
+
+   However, GCC writes `long double' the same way it writes `double',
+so there is no way to distinguish.
+
+     .stabs "long double:t14=r1;8;0;",128,0,0,0
+
+   Complex types are defined the same way as floating-point types;
+there is no way to distinguish a single-precision complex from a
+double-precision floating-point type.
+
+   The C `void' type is defined as itself:
+
+     .stabs "void:t15=15",128,0,0,0
+
+   I'm not sure how a boolean type is represented.
+
+
+File: stabs.info,  Node: Builtin Type Descriptors,  Next: Negative Type Numbers,  Prev: Traditional Builtin Types,  Up: Builtin Types
+
+5.1.2 Defining Builtin Types Using Builtin Type Descriptors
+-----------------------------------------------------------
+
+This is the method used by Sun's `acc' for defining builtin types.
+These are the type descriptors to define builtin types:
+
+`b SIGNED CHAR-FLAG WIDTH ; OFFSET ; NBITS ;'
+     Define an integral type.  SIGNED is `u' for unsigned or `s' for
+     signed.  CHAR-FLAG is `c' which indicates this is a character
+     type, or is omitted.  I assume this is to distinguish an integral
+     type from a character type of the same size, for example it might
+     make sense to set it for the C type `wchar_t' so the debugger can
+     print such variables differently (Solaris does not do this).  Sun
+     sets it on the C types `signed char' and `unsigned char' which
+     arguably is wrong.  WIDTH and OFFSET appear to be for small
+     objects stored in larger ones, for example a `short' in an `int'
+     register.  WIDTH is normally the number of bytes in the type.
+     OFFSET seems to always be zero.  NBITS is the number of bits in
+     the type.
+
+     Note that type descriptor `b' used for builtin types conflicts with
+     its use for Pascal space types (*note Miscellaneous Types::); they
+     can be distinguished because the character following the type
+     descriptor will be a digit, `(', or `-' for a Pascal space type, or
+     `u' or `s' for a builtin type.
+
+`w'
+     Documented by AIX to define a wide character type, but their
+     compiler actually uses negative type numbers (*note Negative Type
+     Numbers::).
+
+`R FP-TYPE ; BYTES ;'
+     Define a floating point type.  FP-TYPE has one of the following
+     values:
+
+    `1 (NF_SINGLE)'
+          IEEE 32-bit (single precision) floating point format.
+
+    `2 (NF_DOUBLE)'
+          IEEE 64-bit (double precision) floating point format.
+
+    `3 (NF_COMPLEX)'
+
+    `4 (NF_COMPLEX16)'
+
+    `5 (NF_COMPLEX32)'
+          These are for complex numbers.  A comment in the GDB source
+          describes them as Fortran `complex', `double complex', and
+          `complex*16', respectively, but what does that mean?  (i.e.,
+          Single precision?  Double precision?).
+
+    `6 (NF_LDOUBLE)'
+          Long double.  This should probably only be used for Sun format
+          `long double', and new codes should be used for other floating
+          point formats (`NF_DOUBLE' can be used if a `long double' is
+          really just an IEEE double, of course).
+
+     BYTES is the number of bytes occupied by the type.  This allows a
+     debugger to perform some operations with the type even if it
+     doesn't understand FP-TYPE.
+
+`g TYPE-INFORMATION ; NBITS'
+     Documented by AIX to define a floating type, but their compiler
+     actually uses negative type numbers (*note Negative Type
+     Numbers::).
+
+`c TYPE-INFORMATION ; NBITS'
+     Documented by AIX to define a complex type, but their compiler
+     actually uses negative type numbers (*note Negative Type
+     Numbers::).
+
+   The C `void' type is defined as a signed integral type 0 bits long:
+     .stabs "void:t19=bs0;0;0",128,0,0,0
+   The Solaris compiler seems to omit the trailing semicolon in this
+case.  Getting sloppy in this way is not a swift move because if a type
+is embedded in a more complex expression it is necessary to be able to
+tell where it ends.
+
+   I'm not sure how a boolean type is represented.
+
+
+File: stabs.info,  Node: Negative Type Numbers,  Prev: Builtin Type Descriptors,  Up: Builtin Types
+
+5.1.3 Negative Type Numbers
+---------------------------
+
+This is the method used in XCOFF for defining builtin types.  Since the
+debugger knows about the builtin types anyway, the idea of negative
+type numbers is simply to give a special type number which indicates
+the builtin type.  There is no stab defining these types.
+
+   There are several subtle issues with negative type numbers.
+
+   One is the size of the type.  A builtin type (for example the C types
+`int' or `long') might have different sizes depending on compiler
+options, the target architecture, the ABI, etc.  This issue doesn't
+come up for IBM tools since (so far) they just target the RS/6000; the
+sizes indicated below for each size are what the IBM RS/6000 tools use.
+To deal with differing sizes, either define separate negative type
+numbers for each size (which works but requires changing the debugger,
+and, unless you get both AIX dbx and GDB to accept the change,
+introduces an incompatibility), or use a type attribute (*note String
+Field::) to define a new type with the appropriate size (which merely
+requires a debugger which understands type attributes, like AIX dbx or
+GDB).  For example,
+
+     .stabs "boolean:t10=@s8;-16",128,0,0,0
+
+   defines an 8-bit boolean type, and
+
+     .stabs "boolean:t10=@s64;-16",128,0,0,0
+
+   defines a 64-bit boolean type.
+
+   A similar issue is the format of the type.  This comes up most often
+for floating-point types, which could have various formats (particularly
+extended doubles, which vary quite a bit even among IEEE systems).
+Again, it is best to define a new negative type number for each
+different format; changing the format based on the target system has
+various problems.  One such problem is that the Alpha has both VAX and
+IEEE floating types.  One can easily imagine one library using the VAX
+types and another library in the same executable using the IEEE types.
+Another example is that the interpretation of whether a boolean is true
+or false can be based on the least significant bit, most significant
+bit, whether it is zero, etc., and different compilers (or different
+options to the same compiler) might provide different kinds of boolean.
+
+   The last major issue is the names of the types.  The name of a given
+type depends _only_ on the negative type number given; these do not
+vary depending on the language, the target system, or anything else.
+One can always define separate type numbers--in the following list you
+will see for example separate `int' and `integer*4' types which are
+identical except for the name.  But compatibility can be maintained by
+not inventing new negative type numbers and instead just defining a new
+type with a new name.  For example:
+
+     .stabs "CARDINAL:t10=-8",128,0,0,0
+
+   Here is the list of negative type numbers.  The phrase "integral
+type" is used to mean twos-complement (I strongly suspect that all
+machines which use stabs use twos-complement; most machines use
+twos-complement these days).
+
+`-1'
+     `int', 32 bit signed integral type.
+
+`-2'
+     `char', 8 bit type holding a character.   Both GDB and dbx on AIX
+     treat this as signed.  GCC uses this type whether `char' is signed
+     or not, which seems like a bad idea.  The AIX compiler (`xlc')
+     seems to avoid this type; it uses -5 instead for `char'.
+
+`-3'
+     `short', 16 bit signed integral type.
+
+`-4'
+     `long', 32 bit signed integral type.
+
+`-5'
+     `unsigned char', 8 bit unsigned integral type.
+
+`-6'
+     `signed char', 8 bit signed integral type.
+
+`-7'
+     `unsigned short', 16 bit unsigned integral type.
+
+`-8'
+     `unsigned int', 32 bit unsigned integral type.
+
+`-9'
+     `unsigned', 32 bit unsigned integral type.
+
+`-10'
+     `unsigned long', 32 bit unsigned integral type.
+
+`-11'
+     `void', type indicating the lack of a value.
+
+`-12'
+     `float', IEEE single precision.
+
+`-13'
+     `double', IEEE double precision.
+
+`-14'
+     `long double', IEEE double precision.  The compiler claims the size
+     will increase in a future release, and for binary compatibility
+     you have to avoid using `long double'.  I hope when they increase
+     it they use a new negative type number.
+
+`-15'
+     `integer'.  32 bit signed integral type.
+
+`-16'
+     `boolean'.  32 bit type.  GDB and GCC assume that zero is false,
+     one is true, and other values have unspecified meaning.  I hope
+     this agrees with how the IBM tools use the type.
+
+`-17'
+     `short real'.  IEEE single precision.
+
+`-18'
+     `real'.  IEEE double precision.
+
+`-19'
+     `stringptr'.  *Note Strings::.
+
+`-20'
+     `character', 8 bit unsigned character type.
+
+`-21'
+     `logical*1', 8 bit type.  This Fortran type has a split
+     personality in that it is used for boolean variables, but can also
+     be used for unsigned integers.  0 is false, 1 is true, and other
+     values are non-boolean.
+
+`-22'
+     `logical*2', 16 bit type.  This Fortran type has a split
+     personality in that it is used for boolean variables, but can also
+     be used for unsigned integers.  0 is false, 1 is true, and other
+     values are non-boolean.
+
+`-23'
+     `logical*4', 32 bit type.  This Fortran type has a split
+     personality in that it is used for boolean variables, but can also
+     be used for unsigned integers.  0 is false, 1 is true, and other
+     values are non-boolean.
+
+`-24'
+     `logical', 32 bit type.  This Fortran type has a split personality
+     in that it is used for boolean variables, but can also be used for
+     unsigned integers.  0 is false, 1 is true, and other values are
+     non-boolean.
+
+`-25'
+     `complex'.  A complex type consisting of two IEEE single-precision
+     floating point values.
+
+`-26'
+     `complex'.  A complex type consisting of two IEEE double-precision
+     floating point values.
+
+`-27'
+     `integer*1', 8 bit signed integral type.
+
+`-28'
+     `integer*2', 16 bit signed integral type.
+
+`-29'
+     `integer*4', 32 bit signed integral type.
+
+`-30'
+     `wchar'.  Wide character, 16 bits wide, unsigned (what format?
+     Unicode?).
+
+`-31'
+     `long long', 64 bit signed integral type.
+
+`-32'
+     `unsigned long long', 64 bit unsigned integral type.
+
+`-33'
+     `logical*8', 64 bit unsigned integral type.
+
+`-34'
+     `integer*8', 64 bit signed integral type.
+
+
+File: stabs.info,  Node: Miscellaneous Types,  Next: Cross-References,  Prev: Builtin Types,  Up: Types
+
+5.2 Miscellaneous Types
+=======================
+
+`b TYPE-INFORMATION ; BYTES'
+     Pascal space type.  This is documented by IBM; what does it mean?
+
+     This use of the `b' type descriptor can be distinguished from its
+     use for builtin integral types (*note Builtin Type Descriptors::)
+     because the character following the type descriptor is always a
+     digit, `(', or `-'.
+
+`B TYPE-INFORMATION'
+     A volatile-qualified version of TYPE-INFORMATION.  This is a Sun
+     extension.  References and stores to a variable with a
+     volatile-qualified type must not be optimized or cached; they must
+     occur as the user specifies them.
+
+`d TYPE-INFORMATION'
+     File of type TYPE-INFORMATION.  As far as I know this is only used
+     by Pascal.
+
+`k TYPE-INFORMATION'
+     A const-qualified version of TYPE-INFORMATION.  This is a Sun
+     extension.  A variable with a const-qualified type cannot be
+     modified.
+
+`M TYPE-INFORMATION ; LENGTH'
+     Multiple instance type.  The type seems to composed of LENGTH
+     repetitions of TYPE-INFORMATION, for example `character*3' is
+     represented by `M-2;3', where `-2' is a reference to a character
+     type (*note Negative Type Numbers::).  I'm not sure how this
+     differs from an array.  This appears to be a Fortran feature.
+     LENGTH is a bound, like those in range types; see *Note
+     Subranges::.
+
+`S TYPE-INFORMATION'
+     Pascal set type.  TYPE-INFORMATION must be a small type such as an
+     enumeration or a subrange, and the type is a bitmask whose length
+     is specified by the number of elements in TYPE-INFORMATION.
+
+     In CHILL, if it is a bitstring instead of a set, also use the `S'
+     type attribute (*note String Field::).
+
+`* TYPE-INFORMATION'
+     Pointer to TYPE-INFORMATION.
+
+
+File: stabs.info,  Node: Cross-References,  Next: Subranges,  Prev: Miscellaneous Types,  Up: Types
+
+5.3 Cross-References to Other Types
+===================================
+
+A type can be used before it is defined; one common way to deal with
+that situation is just to use a type reference to a type which has not
+yet been defined.
+
+   Another way is with the `x' type descriptor, which is followed by
+`s' for a structure tag, `u' for a union tag, or `e' for a enumerator
+tag, followed by the name of the tag, followed by `:'.  If the name
+contains `::' between a `<' and `>' pair (for C++ templates), such a
+`::' does not end the name--only a single `:' ends the name; see *Note
+Nested Symbols::.
+
+   For example, the following C declarations:
+
+     struct foo;
+     struct foo *bar;
+
+produce:
+
+     .stabs "bar:G16=*17=xsfoo:",32,0,0,0
+
+   Not all debuggers support the `x' type descriptor, so on some
+machines GCC does not use it.  I believe that for the above example it
+would just emit a reference to type 17 and never define it, but I
+haven't verified that.
+
+   Modula-2 imported types, at least on AIX, use the `i' type
+descriptor, which is followed by the name of the module from which the
+type is imported, followed by `:', followed by the name of the type.
+There is then optionally a comma followed by type information for the
+type.  This differs from merely naming the type (*note Typedefs::) in
+that it identifies the module; I don't understand whether the name of
+the type given here is always just the same as the name we are giving
+it, or whether this type descriptor is used with a nameless stab (*note
+String Field::), or what.  The symbol ends with `;'.
+
+
+File: stabs.info,  Node: Subranges,  Next: Arrays,  Prev: Cross-References,  Up: Types
+
+5.4 Subrange Types
+==================
+
+The `r' type descriptor defines a type as a subrange of another type.
+It is followed by type information for the type of which it is a
+subrange, a semicolon, an integral lower bound, a semicolon, an
+integral upper bound, and a semicolon.  The AIX documentation does not
+specify the trailing semicolon, in an effort to specify array indexes
+more cleanly, but a subrange which is not an array index has always
+included a trailing semicolon (*note Arrays::).
+
+   Instead of an integer, either bound can be one of the following:
+
+`A OFFSET'
+     The bound is passed by reference on the stack at offset OFFSET
+     from the argument list.  *Note Parameters::, for more information
+     on such offsets.
+
+`T OFFSET'
+     The bound is passed by value on the stack at offset OFFSET from
+     the argument list.
+
+`a REGISTER-NUMBER'
+     The bound is passed by reference in register number
+     REGISTER-NUMBER.
+
+`t REGISTER-NUMBER'
+     The bound is passed by value in register number REGISTER-NUMBER.
+
+`J'
+     There is no bound.
+
+   Subranges are also used for builtin types; see *Note Traditional
+Builtin Types::.
+
+
+File: stabs.info,  Node: Arrays,  Next: Strings,  Prev: Subranges,  Up: Types
+
+5.5 Array Types
+===============
+
+Arrays use the `a' type descriptor.  Following the type descriptor is
+the type of the index and the type of the array elements.  If the index
+type is a range type, it ends in a semicolon; otherwise (for example,
+if it is a type reference), there does not appear to be any way to tell
+where the types are separated.  In an effort to clean up this mess, IBM
+documents the two types as being separated by a semicolon, and a range
+type as not ending in a semicolon (but this is not right for range
+types which are not array indexes, *note Subranges::).  I think
+probably the best solution is to specify that a semicolon ends a range
+type, and that the index type and element type of an array are
+separated by a semicolon, but that if the index type is a range type,
+the extra semicolon can be omitted.  GDB (at least through version 4.9)
+doesn't support any kind of index type other than a range anyway; I'm
+not sure about dbx.
+
+   It is well established, and widely used, that the type of the index,
+unlike most types found in the stabs, is merely a type definition, not
+type information (*note String Field::) (that is, it need not start with
+`TYPE-NUMBER=' if it is defining a new type).  According to a comment
+in GDB, this is also true of the type of the array elements; it gives
+`ar1;1;10;ar1;1;10;4' as a legitimate way to express a two dimensional
+array.  According to AIX documentation, the element type must be type
+information.  GDB accepts either.
+
+   The type of the index is often a range type, expressed as the type
+descriptor `r' and some parameters.  It defines the size of the array.
+In the example below, the range `r1;0;2;' defines an index type which
+is a subrange of type 1 (integer), with a lower bound of 0 and an upper
+bound of 2.  This defines the valid range of subscripts of a
+three-element C array.
+
+   For example, the definition:
+
+     char char_vec[3] = {'a','b','c'};
+
+produces the output:
+
+     .stabs "char_vec:G19=ar1;0;2;2",32,0,0,0
+          .global _char_vec
+          .align 4
+     _char_vec:
+          .byte 97
+          .byte 98
+          .byte 99
+
+   If an array is "packed", the elements are spaced more closely than
+normal, saving memory at the expense of speed.  For example, an array
+of 3-byte objects might, if unpacked, have each element aligned on a
+4-byte boundary, but if packed, have no padding.  One way to specify
+that something is packed is with type attributes (*note String
+Field::).  In the case of arrays, another is to use the `P' type
+descriptor instead of `a'.  Other than specifying a packed array, `P'
+is identical to `a'.
+
+   An open array is represented by the `A' type descriptor followed by
+type information specifying the type of the array elements.
+
+   An N-dimensional dynamic array is represented by
+
+     D DIMENSIONS ; TYPE-INFORMATION
+
+   DIMENSIONS is the number of dimensions; TYPE-INFORMATION specifies
+the type of the array elements.
+
+   A subarray of an N-dimensional array is represented by
+
+     E DIMENSIONS ; TYPE-INFORMATION
+
+   DIMENSIONS is the number of dimensions; TYPE-INFORMATION specifies
+the type of the array elements.
+
+
+File: stabs.info,  Node: Strings,  Next: Enumerations,  Prev: Arrays,  Up: Types
+
+5.6 Strings
+===========
+
+Some languages, like C or the original Pascal, do not have string types,
+they just have related things like arrays of characters.  But most
+Pascals and various other languages have string types, which are
+indicated as follows:
+
+`n TYPE-INFORMATION ; BYTES'
+     BYTES is the maximum length.  I'm not sure what TYPE-INFORMATION
+     is; I suspect that it means that this is a string of
+     TYPE-INFORMATION (thus allowing a string of integers, a string of
+     wide characters, etc., as well as a string of characters).  Not
+     sure what the format of this type is.  This is an AIX feature.
+
+`z TYPE-INFORMATION ; BYTES'
+     Just like `n' except that this is a gstring, not an ordinary
+     string.  I don't know the difference.
+
+`N'
+     Pascal Stringptr.  What is this?  This is an AIX feature.
+
+   Languages, such as CHILL which have a string type which is basically
+just an array of characters use the `S' type attribute (*note String
+Field::).
+
+
+File: stabs.info,  Node: Enumerations,  Next: Structures,  Prev: Strings,  Up: Types
+
+5.7 Enumerations
+================
+
+Enumerations are defined with the `e' type descriptor.
+
+   The source line below declares an enumeration type at file scope.
+The type definition is located after the `N_RBRAC' that marks the end of
+the previous procedure's block scope, and before the `N_FUN' that marks
+the beginning of the next procedure's block scope.  Therefore it does
+not describe a block local symbol, but a file local one.
+
+   The source line:
+
+     enum e_places {first,second=3,last};
+
+generates the following stab:
+
+     .stabs "e_places:T22=efirst:0,second:3,last:4,;",128,0,0,0
+
+   The symbol descriptor (`T') says that the stab describes a
+structure, enumeration, or union tag.  The type descriptor `e',
+following the `22=' of the type definition narrows it down to an
+enumeration type.  Following the `e' is a list of the elements of the
+enumeration.  The format is `NAME:VALUE,'.  The list of elements ends
+with `;'.  The fact that VALUE is specified as an integer can cause
+problems if the value is large.  GCC 2.5.2 tries to output it in octal
+in that case with a leading zero, which is probably a good thing,
+although GDB 4.11 supports octal only in cases where decimal is
+perfectly good.  Negative decimal values are supported by both GDB and
+dbx.
+
+   There is no standard way to specify the size of an enumeration type;
+it is determined by the architecture (normally all enumerations types
+are 32 bits).  Type attributes can be used to specify an enumeration
+type of another size for debuggers which support them; see *Note String
+Field::.
+
+   Enumeration types are unusual in that they define symbols for the
+enumeration values (`first', `second', and `third' in the above
+example), and even though these symbols are visible in the file as a
+whole (rather than being in a more local namespace like structure
+member names), they are defined in the type definition for the
+enumeration type rather than each having their own symbol.  In order to
+be fast, GDB will only get symbols from such types (in its initial scan
+of the stabs) if the type is the first thing defined after a `T' or `t'
+symbol descriptor (the above example fulfills this requirement).  If
+the type does not have a name, the compiler should emit it in a
+nameless stab (*note String Field::); GCC does this.
+
+
+File: stabs.info,  Node: Structures,  Next: Typedefs,  Prev: Enumerations,  Up: Types
+
+5.8 Structures
+==============
+
+The encoding of structures in stabs can be shown with an example.
+
+   The following source code declares a structure tag and defines an
+instance of the structure in global scope. Then a `typedef' equates the
+structure tag with a new type.  Separate stabs are generated for the
+structure tag, the structure `typedef', and the structure instance.  The
+stabs for the tag and the `typedef' are emitted when the definitions are
+encountered.  Since the structure elements are not initialized, the
+stab and code for the structure variable itself is located at the end
+of the program in the bss section.
+
+     struct s_tag {
+       int   s_int;
+       float s_float;
+       char  s_char_vec[8];
+       struct s_tag* s_next;
+     } g_an_s;
+
+     typedef struct s_tag s_typedef;
+
+   The structure tag has an `N_LSYM' stab type because, like the
+enumeration, the symbol has file scope.  Like the enumeration, the
+symbol descriptor is `T', for enumeration, structure, or tag type.  The
+type descriptor `s' following the `16=' of the type definition narrows
+the symbol type to structure.
+
+   Following the `s' type descriptor is the number of bytes the
+structure occupies, followed by a description of each structure element.
+The structure element descriptions are of the form `NAME:TYPE, BIT
+OFFSET FROM THE START OF THE STRUCT, NUMBER OF BITS IN THE ELEMENT'.
+
+     # 128 is N_LSYM
+     .stabs "s_tag:T16=s20s_int:1,0,32;s_float:12,32,32;
+             s_char_vec:17=ar1;0;7;2,64,64;s_next:18=*16,128,32;;",128,0,0,0
+
+   In this example, the first two structure elements are previously
+defined types.  For these, the type following the `NAME:' part of the
+element description is a simple type reference.  The other two structure
+elements are new types.  In this case there is a type definition
+embedded after the `NAME:'.  The type definition for the array element
+looks just like a type definition for a stand-alone array.  The
+`s_next' field is a pointer to the same kind of structure that the
+field is an element of.  So the definition of structure type 16
+contains a type definition for an element which is a pointer to type 16.
+
+   If a field is a static member (this is a C++ feature in which a
+single variable appears to be a field of every structure of a given
+type) it still starts out with the field name, a colon, and the type,
+but then instead of a comma, bit position, comma, and bit size, there
+is a colon followed by the name of the variable which each such field
+refers to.
+
+   If the structure has methods (a C++ feature), they follow the
+non-method fields; see *Note Cplusplus::.
+
+
+File: stabs.info,  Node: Typedefs,  Next: Unions,  Prev: Structures,  Up: Types
+
+5.9 Giving a Type a Name
+========================
+
+To give a type a name, use the `t' symbol descriptor.  The type is
+specified by the type information (*note String Field::) for the stab.
+For example,
+
+     .stabs "s_typedef:t16",128,0,0,0     # 128 is N_LSYM
+
+   specifies that `s_typedef' refers to type number 16.  Such stabs
+have symbol type `N_LSYM' (or `C_DECL' for XCOFF).  (The Sun
+documentation mentions using `N_GSYM' in some cases).
+
+   If you are specifying the tag name for a structure, union, or
+enumeration, use the `T' symbol descriptor instead.  I believe C is the
+only language with this feature.
+
+   If the type is an opaque type (I believe this is a Modula-2 feature),
+AIX provides a type descriptor to specify it.  The type descriptor is
+`o' and is followed by a name.  I don't know what the name means--is it
+always the same as the name of the type, or is this type descriptor
+used with a nameless stab (*note String Field::)?  There optionally
+follows a comma followed by type information which defines the type of
+this type.  If omitted, a semicolon is used in place of the comma and
+the type information, and the type is much like a generic pointer
+type--it has a known size but little else about it is specified.
+
+
+File: stabs.info,  Node: Unions,  Next: Function Types,  Prev: Typedefs,  Up: Types
+
+5.10 Unions
+===========
+
+     union u_tag {
+       int  u_int;
+       float u_float;
+       char* u_char;
+     } an_u;
+
+   This code generates a stab for a union tag and a stab for a union
+variable.  Both use the `N_LSYM' stab type.  If a union variable is
+scoped locally to the procedure in which it is defined, its stab is
+located immediately preceding the `N_LBRAC' for the procedure's block
+start.
+
+   The stab for the union tag, however, is located preceding the code
+for the procedure in which it is defined.  The stab type is `N_LSYM'.
+This would seem to imply that the union type is file scope, like the
+struct type `s_tag'.  This is not true.  The contents and position of
+the stab for `u_type' do not convey any information about its procedure
+local scope.
+
+     # 128 is N_LSYM
+     .stabs "u_tag:T23=u4u_int:1,0,32;u_float:12,0,32;u_char:21,0,32;;",
+            128,0,0,0
+
+   The symbol descriptor `T', following the `name:' means that the stab
+describes an enumeration, structure, or union tag.  The type descriptor
+`u', following the `23=' of the type definition, narrows it down to a
+union type definition.  Following the `u' is the number of bytes in the
+union.  After that is a list of union element descriptions.  Their
+format is `NAME:TYPE, BIT OFFSET INTO THE UNION, NUMBER OF BYTES FOR
+THE ELEMENT;'.
+
+   The stab for the union variable is:
+
+     .stabs "an_u:23",128,0,0,-20     # 128 is N_LSYM
+
+   `-20' specifies where the variable is stored (*note Stack
+Variables::).
+
+
+File: stabs.info,  Node: Function Types,  Prev: Unions,  Up: Types
+
+5.11 Function Types
+===================
+
+Various types can be defined for function variables.  These types are
+not used in defining functions (*note Procedures::); they are used for
+things like pointers to functions.
+
+   The simple, traditional, type is type descriptor `f' is followed by
+type information for the return type of the function, followed by a
+semicolon.
+
+   This does not deal with functions for which the number and types of
+the parameters are part of the type, as in Modula-2 or ANSI C.  AIX
+provides extensions to specify these, using the `f', `F', `p', and `R'
+type descriptors.
+
+   First comes the type descriptor.  If it is `f' or `F', this type
+involves a function rather than a procedure, and the type information
+for the return type of the function follows, followed by a comma.  Then
+comes the number of parameters to the function and a semicolon.  Then,
+for each parameter, there is the name of the parameter followed by a
+colon (this is only present for type descriptors `R' and `F' which
+represent Pascal function or procedure parameters), type information
+for the parameter, a comma, 0 if passed by reference or 1 if passed by
+value, and a semicolon.  The type definition ends with a semicolon.
+
+   For example, this variable definition:
+
+     int (*g_pf)();
+
+generates the following code:
+
+     .stabs "g_pf:G24=*25=f1",32,0,0,0
+         .common _g_pf,4,"bss"
+
+   The variable defines a new type, 24, which is a pointer to another
+new type, 25, which is a function returning `int'.
+
+
+File: stabs.info,  Node: Macro define and undefine,  Next: Symbol Tables,  Prev: Types,  Up: Top
+
+6 Representation of #define and #undef
+**************************************
+
+This section describes the stabs support for macro define and undefine
+information, supported on some systems.  (e.g., with `-g3' `-gstabs'
+when using GCC).
+
+   A `#define MACRO-NAME MACRO-BODY' is represented with an
+`N_MAC_DEFINE' stab with a string field of `MACRO-NAME MACRO-BODY'.  
+
+   An `#undef MACRO-NAME' is represented with an `N_MAC_UNDEF' stabs
+with a string field of simply `MACRO-NAME'.  
+
+   For both `N_MAC_DEFINE' and `N_MAC_UNDEF', the desc field is the
+line number within the file where the corresponding `#define' or
+`#undef' occurred.
+
+   For example, the following C code:
+
+         #define NONE	42
+         #define TWO(a, b)	(a + (a) + 2 * b)
+         #define ONE(c)	(c + 19)
+
+         main(int argc, char *argv[])
+         {
+           func(NONE, TWO(10, 11));
+           func(NONE, ONE(23));
+
+         #undef ONE
+         #define ONE(c)	(c + 23)
+
+           func(NONE, ONE(-23));
+
+           return (0);
+         }
+
+         int global;
+
+         func(int arg1, int arg2)
+         {
+           global = arg1 + arg2;
+         }
+
+produces the following stabs (as well as many others):
+
+         .stabs	"NONE 42",54,0,1,0
+         .stabs	"TWO(a,b) (a + (a) + 2 * b)",54,0,2,0
+         .stabs	"ONE(c) (c + 19)",54,0,3,0
+         .stabs	"ONE",58,0,10,0
+         .stabs	"ONE(c) (c + 23)",54,0,11,0
+
+NOTE: In the above example, `54' is `N_MAC_DEFINE' and `58' is
+`N_MAC_UNDEF'.
+
+
+File: stabs.info,  Node: Symbol Tables,  Next: Cplusplus,  Prev: Macro define and undefine,  Up: Top
+
+7 Symbol Information in Symbol Tables
+*************************************
+
+This chapter describes the format of symbol table entries and how stab
+assembler directives map to them.  It also describes the
+transformations that the assembler and linker make on data from stabs.
+
+* Menu:
+
+* Symbol Table Format::
+* Transformations On Symbol Tables::
+
+
+File: stabs.info,  Node: Symbol Table Format,  Next: Transformations On Symbol Tables,  Up: Symbol Tables
+
+7.1 Symbol Table Format
+=======================
+
+Each time the assembler encounters a stab directive, it puts each field
+of the stab into a corresponding field in a symbol table entry of its
+output file.  If the stab contains a string field, the symbol table
+entry for that stab points to a string table entry containing the
+string data from the stab.  Assembler labels become relocatable
+addresses.  Symbol table entries in a.out have the format:
+
+     struct internal_nlist {
+       unsigned long n_strx;         /* index into string table of name */
+       unsigned char n_type;         /* type of symbol */
+       unsigned char n_other;        /* misc info (usually empty) */
+       unsigned short n_desc;        /* description field */
+       bfd_vma n_value;              /* value of symbol */
+     };
+
+   If the stab has a string, the `n_strx' field holds the offset in
+bytes of the string within the string table.  The string is terminated
+by a NUL character.  If the stab lacks a string (for example, it was
+produced by a `.stabn' or `.stabd' directive), the `n_strx' field is
+zero.
+
+   Symbol table entries with `n_type' field values greater than 0x1f
+originated as stabs generated by the compiler (with one random
+exception).  The other entries were placed in the symbol table of the
+executable by the assembler or the linker.
+
+
+File: stabs.info,  Node: Transformations On Symbol Tables,  Prev: Symbol Table Format,  Up: Symbol Tables
+
+7.2 Transformations on Symbol Tables
+====================================
+
+The linker concatenates object files and does fixups of externally
+defined symbols.
+
+   You can see the transformations made on stab data by the assembler
+and linker by examining the symbol table after each pass of the build.
+To do this, use `nm -ap', which dumps the symbol table, including
+debugging information, unsorted.  For stab entries the columns are:
+VALUE, OTHER, DESC, TYPE, STRING.  For assembler and linker symbols,
+the columns are: VALUE, TYPE, STRING.
+
+   The low 5 bits of the stab type tell the linker how to relocate the
+value of the stab.  Thus for stab types like `N_RSYM' and `N_LSYM',
+where the value is an offset or a register number, the low 5 bits are
+`N_ABS', which tells the linker not to relocate the value.
+
+   Where the value of a stab contains an assembly language label, it is
+transformed by each build step.  The assembler turns it into a
+relocatable address and the linker turns it into an absolute address.
+
+* Menu:
+
+* Transformations On Static Variables::
+* Transformations On Global Variables::
+* Stab Section Transformations::	   For some object file formats,
+                                           things are a bit different.
+
+
+File: stabs.info,  Node: Transformations On Static Variables,  Next: Transformations On Global Variables,  Up: Transformations On Symbol Tables
+
+7.2.1 Transformations on Static Variables
+-----------------------------------------
+
+This source line defines a static variable at file scope:
+
+     static int s_g_repeat
+
+The following stab describes the symbol:
+
+     .stabs "s_g_repeat:S1",38,0,0,_s_g_repeat
+
+The assembler transforms the stab into this symbol table entry in the
+`.o' file.  The location is expressed as a data segment offset.
+
+     00000084 - 00 0000 STSYM s_g_repeat:S1
+
+In the symbol table entry from the executable, the linker has made the
+relocatable address absolute.
+
+     0000e00c - 00 0000 STSYM s_g_repeat:S1
+
+
+File: stabs.info,  Node: Transformations On Global Variables,  Next: Stab Section Transformations,  Prev: Transformations On Static Variables,  Up: Transformations On Symbol Tables
+
+7.2.2 Transformations on Global Variables
+-----------------------------------------
+
+Stabs for global variables do not contain location information. In this
+case, the debugger finds location information in the assembler or
+linker symbol table entry describing the variable.  The source line:
+
+     char g_foo = 'c';
+
+generates the stab:
+
+     .stabs "g_foo:G2",32,0,0,0
+
+   The variable is represented by two symbol table entries in the object
+file (see below).  The first one originated as a stab.  The second one
+is an external symbol.  The upper case `D' signifies that the `n_type'
+field of the symbol table contains 7, `N_DATA' with local linkage.  The
+stab's value is zero since the value is not used for `N_GSYM' stabs.
+The value of the linker symbol is the relocatable address corresponding
+to the variable.
+
+     00000000 - 00 0000  GSYM g_foo:G2
+     00000080 D _g_foo
+
+These entries as transformed by the linker.  The linker symbol table
+entry now holds an absolute address:
+
+     00000000 - 00 0000  GSYM g_foo:G2
+     ...
+     0000e008 D _g_foo
+
+
+File: stabs.info,  Node: Stab Section Transformations,  Prev: Transformations On Global Variables,  Up: Transformations On Symbol Tables
+
+7.2.3 Transformations of Stabs in separate sections
+---------------------------------------------------
+
+For object file formats using stabs in separate sections (*note Stab
+Sections::), use `objdump --stabs' instead of `nm' to show the stabs in
+an object or executable file.  `objdump' is a GNU utility; Sun does not
+provide any equivalent.
+
+   The following example is for a stab whose value is an address is
+relative to the compilation unit (*note ELF Linker Relocation::).  For
+example, if the source line
+
+     static int ld = 5;
+
+   appears within a function, then the assembly language output from the
+compiler contains:
+
+     .Ddata.data:
+     ...
+             .stabs "ld:V(0,3)",0x26,0,4,.L18-Ddata.data    # 0x26 is N_STSYM
+     ...
+     .L18:
+             .align 4
+             .word 0x5
+
+   Because the value is formed by subtracting one symbol from another,
+the value is absolute, not relocatable, and so the object file contains
+
+     Symnum n_type n_othr n_desc n_value  n_strx String
+     31     STSYM  0      4      00000004 680    ld:V(0,3)
+
+   without any relocations, and the executable file also contains
+
+     Symnum n_type n_othr n_desc n_value  n_strx String
+     31     STSYM  0      4      00000004 680    ld:V(0,3)
+
+
+File: stabs.info,  Node: Cplusplus,  Next: Stab Types,  Prev: Symbol Tables,  Up: Top
+
+8 GNU C++ Stabs
+***************
+
+* Menu:
+
+* Class Names::			C++ class names are both tags and typedefs.
+* Nested Symbols::		C++ symbol names can be within other types.
+* Basic Cplusplus Types::
+* Simple Classes::
+* Class Instance::
+* Methods::			Method definition
+* Method Type Descriptor::      The `#' type descriptor
+* Member Type Descriptor::      The `@' type descriptor
+* Protections::
+* Method Modifiers::
+* Virtual Methods::
+* Inheritance::
+* Virtual Base Classes::
+* Static Members::
+
+
+File: stabs.info,  Node: Class Names,  Next: Nested Symbols,  Up: Cplusplus
+
+8.1 C++ Class Names
+===================
+
+In C++, a class name which is declared with `class', `struct', or
+`union', is not only a tag, as in C, but also a type name.  Thus there
+should be stabs with both `t' and `T' symbol descriptors (*note
+Typedefs::).
+
+   To save space, there is a special abbreviation for this case.  If the
+`T' symbol descriptor is followed by `t', then the stab defines both a
+type name and a tag.
+
+   For example, the C++ code
+
+     struct foo {int x;};
+
+   can be represented as either
+
+     .stabs "foo:T19=s4x:1,0,32;;",128,0,0,0       # 128 is N_LSYM
+     .stabs "foo:t19",128,0,0,0
+
+   or
+
+     .stabs "foo:Tt19=s4x:1,0,32;;",128,0,0,0
+
+
+File: stabs.info,  Node: Nested Symbols,  Next: Basic Cplusplus Types,  Prev: Class Names,  Up: Cplusplus
+
+8.2 Defining a Symbol Within Another Type
+=========================================
+
+In C++, a symbol (such as a type name) can be defined within another
+type.
+
+   In stabs, this is sometimes represented by making the name of a
+symbol which contains `::'.  Such a pair of colons does not end the name
+of the symbol, the way a single colon would (*note String Field::).  I'm
+not sure how consistently used or well thought out this mechanism is.
+So that a pair of colons in this position always has this meaning, `:'
+cannot be used as a symbol descriptor.
+
+   For example, if the string for a stab is `foo::bar::baz:t5=*6', then
+`foo::bar::baz' is the name of the symbol, `t' is the symbol
+descriptor, and `5=*6' is the type information.
+
+
+File: stabs.info,  Node: Basic Cplusplus Types,  Next: Simple Classes,  Prev: Nested Symbols,  Up: Cplusplus
+
+8.3 Basic Types For C++
+=======================
+
+<< the examples that follow are based on a01.C >>
+
+   C++ adds two more builtin types to the set defined for C.  These are
+the unknown type and the vtable record type.  The unknown type, type
+16, is defined in terms of itself like the void type.
+
+   The vtable record type, type 17, is defined as a structure type and
+then as a structure tag.  The structure has four fields: delta, index,
+pfn, and delta2.  pfn is the function pointer.
+
+   << In boilerplate $vtbl_ptr_type, what are the fields delta, index,
+and delta2 used for? >>
+
+   This basic type is present in all C++ programs even if there are no
+virtual methods defined.
+
+     .stabs "struct_name:sym_desc(type)type_def(17)=type_desc(struct)struct_bytes(8)
+             elem_name(delta):type_ref(short int),bit_offset(0),field_bits(16);
+             elem_name(index):type_ref(short int),bit_offset(16),field_bits(16);
+             elem_name(pfn):type_def(18)=type_desc(ptr to)type_ref(void),
+                                         bit_offset(32),field_bits(32);
+             elem_name(delta2):type_def(short int);bit_offset(32),field_bits(16);;"
+             N_LSYM, NIL, NIL
+
+     .stabs "$vtbl_ptr_type:t17=s8
+             delta:6,0,16;index:6,16,16;pfn:18=*15,32,32;delta2:6,32,16;;"
+             ,128,0,0,0
+
+     .stabs "name:sym_dec(struct tag)type_ref($vtbl_ptr_type)",N_LSYM,NIL,NIL,NIL
+
+     .stabs "$vtbl_ptr_type:T17",128,0,0,0
+
+
+File: stabs.info,  Node: Simple Classes,  Next: Class Instance,  Prev: Basic Cplusplus Types,  Up: Cplusplus
+
+8.4 Simple Class Definition
+===========================
+
+The stabs describing C++ language features are an extension of the
+stabs describing C.  Stabs representing C++ class types elaborate
+extensively on the stab format used to describe structure types in C.
+Stabs representing class type variables look just like stabs
+representing C language variables.
+
+   Consider the following very simple class definition.
+
+     class baseA {
+     public:
+             int Adat;
+             int Ameth(int in, char other);
+     };
+
+   The class `baseA' is represented by two stabs.  The first stab
+describes the class as a structure type.  The second stab describes a
+structure tag of the class type.  Both stabs are of stab type `N_LSYM'.
+Since the stab is not located between an `N_FUN' and an `N_LBRAC' stab
+this indicates that the class is defined at file scope.  If it were,
+then the `N_LSYM' would signify a local variable.
+
+   A stab describing a C++ class type is similar in format to a stab
+describing a C struct, with each class member shown as a field in the
+structure.  The part of the struct format describing fields is expanded
+to include extra information relevant to C++ class members.  In
+addition, if the class has multiple base classes or virtual functions
+the struct format outside of the field parts is also augmented.
+
+   In this simple example the field part of the C++ class stab
+representing member data looks just like the field part of a C struct
+stab.  The section on protections describes how its format is sometimes
+extended for member data.
+
+   The field part of a C++ class stab representing a member function
+differs substantially from the field part of a C struct stab.  It still
+begins with `name:' but then goes on to define a new type number for
+the member function, describe its return type, its argument types, its
+protection level, any qualifiers applied to the method definition, and
+whether the method is virtual or not.  If the method is virtual then
+the method description goes on to give the vtable index of the method,
+and the type number of the first base class defining the method.
+
+   When the field name is a method name it is followed by two colons
+rather than one.  This is followed by a new type definition for the
+method.  This is a number followed by an equal sign and the type of the
+method.  Normally this will be a type declared using the `#' type
+descriptor; see *Note Method Type Descriptor::; static member functions
+are declared using the `f' type descriptor instead; see *Note Function
+Types::.
+
+   The format of an overloaded operator method name differs from that of
+other methods.  It is `op$::OPERATOR-NAME.' where OPERATOR-NAME is the
+operator name such as `+' or `+='.  The name ends with a period, and
+any characters except the period can occur in the OPERATOR-NAME string.
+
+   The next part of the method description represents the arguments to
+the method, preceded by a colon and ending with a semi-colon.  The
+types of the arguments are expressed in the same way argument types are
+expressed in C++ name mangling.  In this example an `int' and a `char'
+map to `ic'.
+
+   This is followed by a number, a letter, and an asterisk or period,
+followed by another semicolon.  The number indicates the protections
+that apply to the member function.  Here the 2 means public.  The
+letter encodes any qualifier applied to the method definition.  In this
+case, `A' means that it is a normal function definition.  The dot shows
+that the method is not virtual.  The sections that follow elaborate
+further on these fields and describe the additional information present
+for virtual methods.
+
+     .stabs "class_name:sym_desc(type)type_def(20)=type_desc(struct)struct_bytes(4)
+             field_name(Adat):type(int),bit_offset(0),field_bits(32);
+
+             method_name(Ameth)::type_def(21)=type_desc(method)return_type(int);
+             :arg_types(int char);
+             protection(public)qualifier(normal)virtual(no);;"
+             N_LSYM,NIL,NIL,NIL
+
+     .stabs "baseA:t20=s4Adat:1,0,32;Ameth::21=##1;:ic;2A.;;",128,0,0,0
+
+     .stabs "class_name:sym_desc(struct tag)",N_LSYM,NIL,NIL,NIL
+
+     .stabs "baseA:T20",128,0,0,0
+
+
+File: stabs.info,  Node: Class Instance,  Next: Methods,  Prev: Simple Classes,  Up: Cplusplus
+
+8.5 Class Instance
+==================
+
+As shown above, describing even a simple C++ class definition is
+accomplished by massively extending the stab format used in C to
+describe structure types.  However, once the class is defined, C stabs
+with no modifications can be used to describe class instances.  The
+following source:
+
+     main () {
+             baseA AbaseA;
+     }
+
+yields the following stab describing the class instance.  It looks no
+different from a standard C stab describing a local variable.
+
+     .stabs "name:type_ref(baseA)", N_LSYM, NIL, NIL, frame_ptr_offset
+
+     .stabs "AbaseA:20",128,0,0,-20
+
+
+File: stabs.info,  Node: Methods,  Next: Method Type Descriptor,  Prev: Class Instance,  Up: Cplusplus
+
+8.6 Method Definition
+=====================
+
+The class definition shown above declares Ameth.  The C++ source below
+defines Ameth:
+
+     int
+     baseA::Ameth(int in, char other)
+     {
+             return in;
+     };
+
+   This method definition yields three stabs following the code of the
+method.  One stab describes the method itself and following two describe
+its parameters.  Although there is only one formal argument all methods
+have an implicit argument which is the `this' pointer.  The `this'
+pointer is a pointer to the object on which the method was called.  Note
+that the method name is mangled to encode the class name and argument
+types.  Name mangling is described in the ARM (`The Annotated C++
+Reference Manual', by Ellis and Stroustrup, ISBN 0-201-51459-1);
+`gpcompare.texi' in Cygnus GCC distributions describes the differences
+between GNU mangling and ARM mangling.
+
+     .stabs "name:symbol_descriptor(global function)return_type(int)",
+             N_FUN, NIL, NIL, code_addr_of_method_start
+
+     .stabs "Ameth__5baseAic:F1",36,0,0,_Ameth__5baseAic
+
+   Here is the stab for the `this' pointer implicit argument.  The name
+of the `this' pointer is always `this'.  Type 19, the `this' pointer is
+defined as a pointer to type 20, `baseA', but a stab defining `baseA'
+has not yet been emitted.  Since the compiler knows it will be emitted
+shortly, here it just outputs a cross reference to the undefined
+symbol, by prefixing the symbol name with `xs'.
+
+     .stabs "name:sym_desc(register param)type_def(19)=
+             type_desc(ptr to)type_ref(baseA)=
+             type_desc(cross-reference to)baseA:",N_RSYM,NIL,NIL,register_number
+
+     .stabs "this:P19=*20=xsbaseA:",64,0,0,8
+
+   The stab for the explicit integer argument looks just like a
+parameter to a C function.  The last field of the stab is the offset
+from the argument pointer, which in most systems is the same as the
+frame pointer.
+
+     .stabs "name:sym_desc(value parameter)type_ref(int)",
+             N_PSYM,NIL,NIL,offset_from_arg_ptr
+
+     .stabs "in:p1",160,0,0,72
+
+   << The examples that follow are based on A1.C >>
+
+
+File: stabs.info,  Node: Method Type Descriptor,  Next: Member Type Descriptor,  Prev: Methods,  Up: Cplusplus
+
+8.7 The `#' Type Descriptor
+===========================
+
+This is used to describe a class method.  This is a function which takes
+an extra argument as its first argument, for the `this' pointer.
+
+   If the `#' is immediately followed by another `#', the second one
+will be followed by the return type and a semicolon.  The class and
+argument types are not specified, and must be determined by demangling
+the name of the method if it is available.
+
+   Otherwise, the single `#' is followed by the class type, a comma,
+the return type, a comma, and zero or more parameter types separated by
+commas.  The list of arguments is terminated by a semicolon.  In the
+debugging output generated by gcc, a final argument type of `void'
+indicates a method which does not take a variable number of arguments.
+If the final argument type of `void' does not appear, the method was
+declared with an ellipsis.
+
+   Note that although such a type will normally be used to describe
+fields in structures, unions, or classes, for at least some versions of
+the compiler it can also be used in other contexts.
+
+
+File: stabs.info,  Node: Member Type Descriptor,  Next: Protections,  Prev: Method Type Descriptor,  Up: Cplusplus
+
+8.8 The `@' Type Descriptor
+===========================
+
+The `@' type descriptor is used for a pointer-to-non-static-member-data
+type.  It is followed by type information for the class (or union), a
+comma, and type information for the member data.
+
+   The following C++ source:
+
+     typedef int A::*int_in_a;
+
+   generates the following stab:
+
+     .stabs "int_in_a:t20=21=@19,1",128,0,0,0
+
+   Note that there is a conflict between this and type attributes
+(*note String Field::); both use type descriptor `@'.  Fortunately, the
+`@' type descriptor used in this C++ sense always will be followed by a
+digit, `(', or `-', and type attributes never start with those things.
+
+
+File: stabs.info,  Node: Protections,  Next: Method Modifiers,  Prev: Member Type Descriptor,  Up: Cplusplus
+
+8.9 Protections
+===============
+
+In the simple class definition shown above all member data and
+functions were publicly accessible.  The example that follows contrasts
+public, protected and privately accessible fields and shows how these
+protections are encoded in C++ stabs.
+
+   If the character following the `FIELD-NAME:' part of the string is
+`/', then the next character is the visibility.  `0' means private, `1'
+means protected, and `2' means public.  Debuggers should ignore
+visibility characters they do not recognize, and assume a reasonable
+default (such as public) (GDB 4.11 does not, but this should be fixed
+in the next GDB release).  If no visibility is specified the field is
+public.  The visibility `9' means that the field has been optimized out
+and is public (there is no way to specify an optimized out field with a
+private or protected visibility).  Visibility `9' is not supported by
+GDB 4.11; this should be fixed in the next GDB release.
+
+   The following C++ source:
+
+     class vis {
+     private:
+             int   priv;
+     protected:
+             char  prot;
+     public:
+             float pub;
+     };
+
+generates the following stab:
+
+     # 128 is N_LSYM
+     .stabs "vis:T19=s12priv:/01,0,32;prot:/12,32,8;pub:12,64,32;;",128,0,0,0
+
+   `vis:T19=s12' indicates that type number 19 is a 12 byte structure
+named `vis' The `priv' field has public visibility (`/0'), type int
+(`1'), and offset and size `,0,32;'.  The `prot' field has protected
+visibility (`/1'), type char (`2') and offset and size `,32,8;'.  The
+`pub' field has type float (`12'), and offset and size `,64,32;'.
+
+   Protections for member functions are signified by one digit embedded
+in the field part of the stab describing the method.  The digit is 0 if
+private, 1 if protected and 2 if public.  Consider the C++ class
+definition below:
+
+     class all_methods {
+     private:
+             int   priv_meth(int in){return in;};
+     protected:
+             char  protMeth(char in){return in;};
+     public:
+             float pubMeth(float in){return in;};
+     };
+
+   It generates the following stab.  The digit in question is to the
+left of an `A' in each case.  Notice also that in this case two symbol
+descriptors apply to the class name struct tag and struct type.
+
+     .stabs "class_name:sym_desc(struct tag&type)type_def(21)=
+             sym_desc(struct)struct_bytes(1)
+             meth_name::type_def(22)=sym_desc(method)returning(int);
+             :args(int);protection(private)modifier(normal)virtual(no);
+             meth_name::type_def(23)=sym_desc(method)returning(char);
+             :args(char);protection(protected)modifier(normal)virtual(no);
+             meth_name::type_def(24)=sym_desc(method)returning(float);
+             :args(float);protection(public)modifier(normal)virtual(no);;",
+             N_LSYM,NIL,NIL,NIL
+
+     .stabs "all_methods:Tt21=s1priv_meth::22=##1;:i;0A.;protMeth::23=##2;:c;1A.;
+             pubMeth::24=##12;:f;2A.;;",128,0,0,0
+
+
+File: stabs.info,  Node: Method Modifiers,  Next: Virtual Methods,  Prev: Protections,  Up: Cplusplus
+
+8.10 Method Modifiers (`const', `volatile', `const volatile')
+=============================================================
+
+<< based on a6.C >>
+
+   In the class example described above all the methods have the normal
+modifier.  This method modifier information is located just after the
+protection information for the method.  This field has four possible
+character values.  Normal methods use `A', const methods use `B',
+volatile methods use `C', and const volatile methods use `D'.  Consider
+the class definition below:
+
+     class A {
+     public:
+             int ConstMeth (int arg) const { return arg; };
+             char VolatileMeth (char arg) volatile { return arg; };
+             float ConstVolMeth (float arg) const volatile {return arg; };
+     };
+
+   This class is described by the following stab:
+
+     .stabs "class(A):sym_desc(struct)type_def(20)=type_desc(struct)struct_bytes(1)
+             meth_name(ConstMeth)::type_def(21)sym_desc(method)
+             returning(int);:arg(int);protection(public)modifier(const)virtual(no);
+             meth_name(VolatileMeth)::type_def(22)=sym_desc(method)
+             returning(char);:arg(char);protection(public)modifier(volatile)virt(no)
+             meth_name(ConstVolMeth)::type_def(23)=sym_desc(method)
+             returning(float);:arg(float);protection(public)modifier(const volatile)
+             virtual(no);;", ...
+
+     .stabs "A:T20=s1ConstMeth::21=##1;:i;2B.;VolatileMeth::22=##2;:c;2C.;
+                  ConstVolMeth::23=##12;:f;2D.;;",128,0,0,0
+
+
+File: stabs.info,  Node: Virtual Methods,  Next: Inheritance,  Prev: Method Modifiers,  Up: Cplusplus
+
+8.11 Virtual Methods
+====================
+
+<< The following examples are based on a4.C >>
+
+   The presence of virtual methods in a class definition adds additional
+data to the class description.  The extra data is appended to the
+description of the virtual method and to the end of the class
+description.  Consider the class definition below:
+
+     class A {
+     public:
+             int Adat;
+             virtual int A_virt (int arg) { return arg; };
+     };
+
+   This results in the stab below describing class A.  It defines a new
+type (20) which is an 8 byte structure.  The first field of the class
+struct is `Adat', an integer, starting at structure offset 0 and
+occupying 32 bits.
+
+   The second field in the class struct is not explicitly defined by the
+C++ class definition but is implied by the fact that the class contains
+a virtual method.  This field is the vtable pointer.  The name of the
+vtable pointer field starts with `$vf' and continues with a type
+reference to the class it is part of.  In this example the type
+reference for class A is 20 so the name of its vtable pointer field is
+`$vf20', followed by the usual colon.
+
+   Next there is a type definition for the vtable pointer type (21).
+This is in turn defined as a pointer to another new type (22).
+
+   Type 22 is the vtable itself, which is defined as an array, indexed
+by a range of integers between 0 and 1, and whose elements are of type
+17.  Type 17 was the vtable record type defined by the boilerplate C++
+type definitions, as shown earlier.
+
+   The bit offset of the vtable pointer field is 32.  The number of bits
+in the field are not specified when the field is a vtable pointer.
+
+   Next is the method definition for the virtual member function
+`A_virt'.  Its description starts out using the same format as the
+non-virtual member functions described above, except instead of a dot
+after the `A' there is an asterisk, indicating that the function is
+virtual.  Since is is virtual some addition information is appended to
+the end of the method description.
+
+   The first number represents the vtable index of the method.  This is
+a 32 bit unsigned number with the high bit set, followed by a
+semi-colon.
+
+   The second number is a type reference to the first base class in the
+inheritance hierarchy defining the virtual member function.  In this
+case the class stab describes a base class so the virtual function is
+not overriding any other definition of the method.  Therefore the
+reference is to the type number of the class that the stab is
+describing (20).
+
+   This is followed by three semi-colons.  One marks the end of the
+current sub-section, one marks the end of the method field, and the
+third marks the end of the struct definition.
+
+   For classes containing virtual functions the very last section of the
+string part of the stab holds a type reference to the first base class.
+This is preceded by `~%' and followed by a final semi-colon.
+
+     .stabs "class_name(A):type_def(20)=sym_desc(struct)struct_bytes(8)
+             field_name(Adat):type_ref(int),bit_offset(0),field_bits(32);
+             field_name(A virt func ptr):type_def(21)=type_desc(ptr to)type_def(22)=
+             sym_desc(array)index_type_ref(range of int from 0 to 1);
+             elem_type_ref(vtbl elem type),
+             bit_offset(32);
+             meth_name(A_virt)::typedef(23)=sym_desc(method)returning(int);
+             :arg_type(int),protection(public)normal(yes)virtual(yes)
+             vtable_index(1);class_first_defining(A);;;~%first_base(A);",
+             N_LSYM,NIL,NIL,NIL
+
+     .stabs "A:t20=s8Adat:1,0,32;$vf20:21=*22=ar1;0;1;17,32;
+             A_virt::23=##1;:i;2A*-2147483647;20;;;~%20;",128,0,0,0
+
+
+File: stabs.info,  Node: Inheritance,  Next: Virtual Base Classes,  Prev: Virtual Methods,  Up: Cplusplus
+
+8.12 Inheritance
+================
+
+Stabs describing C++ derived classes include additional sections that
+describe the inheritance hierarchy of the class.  A derived class stab
+also encodes the number of base classes.  For each base class it tells
+if the base class is virtual or not, and if the inheritance is private
+or public.  It also gives the offset into the object of the portion of
+the object corresponding to each base class.
+
+   This additional information is embedded in the class stab following
+the number of bytes in the struct.  First the number of base classes
+appears bracketed by an exclamation point and a comma.
+
+   Then for each base type there repeats a series: a virtual character,
+a visibility character, a number, a comma, another number, and a
+semi-colon.
+
+   The virtual character is `1' if the base class is virtual and `0' if
+not.  The visibility character is `2' if the derivation is public, `1'
+if it is protected, and `0' if it is private.  Debuggers should ignore
+virtual or visibility characters they do not recognize, and assume a
+reasonable default (such as public and non-virtual) (GDB 4.11 does not,
+but this should be fixed in the next GDB release).
+
+   The number following the virtual and visibility characters is the
+offset from the start of the object to the part of the object
+pertaining to the base class.
+
+   After the comma, the second number is a type_descriptor for the base
+type.  Finally a semi-colon ends the series, which repeats for each
+base class.
+
+   The source below defines three base classes `A', `B', and `C' and
+the derived class `D'.
+
+     class A {
+     public:
+             int Adat;
+             virtual int A_virt (int arg) { return arg; };
+     };
+
+     class B {
+     public:
+             int B_dat;
+             virtual int B_virt (int arg) {return arg; };
+     };
+
+     class C {
+     public:
+             int Cdat;
+             virtual int C_virt (int arg) {return arg; };
+     };
+
+     class D : A, virtual B, public C {
+     public:
+             int Ddat;
+             virtual int A_virt (int arg ) { return arg+1; };
+             virtual int B_virt (int arg)  { return arg+2; };
+             virtual int C_virt (int arg)  { return arg+3; };
+             virtual int D_virt (int arg)  { return arg; };
+     };
+
+   Class stabs similar to the ones described earlier are generated for
+each base class.
+
+     .stabs "A:T20=s8Adat:1,0,32;$vf20:21=*22=ar1;0;1;17,32;
+             A_virt::23=##1;:i;2A*-2147483647;20;;;~%20;",128,0,0,0
+
+     .stabs "B:Tt25=s8Bdat:1,0,32;$vf25:21,32;B_virt::26=##1;
+             :i;2A*-2147483647;25;;;~%25;",128,0,0,0
+
+     .stabs "C:Tt28=s8Cdat:1,0,32;$vf28:21,32;C_virt::29=##1;
+             :i;2A*-2147483647;28;;;~%28;",128,0,0,0
+
+   In the stab describing derived class `D' below, the information about
+the derivation of this class is encoded as follows.
+
+     .stabs "derived_class_name:symbol_descriptors(struct tag&type)=
+             type_descriptor(struct)struct_bytes(32)!num_bases(3),
+             base_virtual(no)inheritance_public(no)base_offset(0),
+             base_class_type_ref(A);
+             base_virtual(yes)inheritance_public(no)base_offset(NIL),
+             base_class_type_ref(B);
+             base_virtual(no)inheritance_public(yes)base_offset(64),
+             base_class_type_ref(C); ...
+
+     .stabs "D:Tt31=s32!3,000,20;100,25;0264,28;$vb25:24,128;Ddat:
+             1,160,32;A_virt::32=##1;:i;2A*-2147483647;20;;B_virt:
+             :32:i;2A*-2147483647;25;;C_virt::32:i;2A*-2147483647;
+             28;;D_virt::32:i;2A*-2147483646;31;;;~%20;",128,0,0,0
+
+
+File: stabs.info,  Node: Virtual Base Classes,  Next: Static Members,  Prev: Inheritance,  Up: Cplusplus
+
+8.13 Virtual Base Classes
+=========================
+
+A derived class object consists of a concatenation in memory of the data
+areas defined by each base class, starting with the leftmost and ending
+with the rightmost in the list of base classes.  The exception to this
+rule is for virtual inheritance.  In the example above, class `D'
+inherits virtually from base class `B'.  This means that an instance of
+a `D' object will not contain its own `B' part but merely a pointer to
+a `B' part, known as a virtual base pointer.
+
+   In a derived class stab, the base offset part of the derivation
+information, described above, shows how the base class parts are
+ordered.  The base offset for a virtual base class is always given as 0.
+Notice that the base offset for `B' is given as 0 even though `B' is
+not the first base class.  The first base class `A' starts at offset 0.
+
+   The field information part of the stab for class `D' describes the
+field which is the pointer to the virtual base class `B'. The vbase
+pointer name is `$vb' followed by a type reference to the virtual base
+class.  Since the type id for `B' in this example is 25, the vbase
+pointer name is `$vb25'.
+
+     .stabs "D:Tt31=s32!3,000,20;100,25;0264,28;$vb25:24,128;Ddat:1,
+            160,32;A_virt::32=##1;:i;2A*-2147483647;20;;B_virt::32:i;
+            2A*-2147483647;25;;C_virt::32:i;2A*-2147483647;28;;D_virt:
+            :32:i;2A*-2147483646;31;;;~%20;",128,0,0,0
+
+   Following the name and a semicolon is a type reference describing the
+type of the virtual base class pointer, in this case 24.  Type 24 was
+defined earlier as the type of the `B' class `this' pointer.  The
+`this' pointer for a class is a pointer to the class type.
+
+     .stabs "this:P24=*25=xsB:",64,0,0,8
+
+   Finally the field offset part of the vbase pointer field description
+shows that the vbase pointer is the first field in the `D' object,
+before any data fields defined by the class.  The layout of a `D' class
+object is a follows, `Adat' at 0, the vtable pointer for `A' at 32,
+`Cdat' at 64, the vtable pointer for C at 96, the virtual base pointer
+for `B' at 128, and `Ddat' at 160.
+
+
+File: stabs.info,  Node: Static Members,  Prev: Virtual Base Classes,  Up: Cplusplus
+
+8.14 Static Members
+===================
+
+The data area for a class is a concatenation of the space used by the
+data members of the class.  If the class has virtual methods, a vtable
+pointer follows the class data.  The field offset part of each field
+description in the class stab shows this ordering.
+
+   << How is this reflected in stabs?  See Cygnus bug #677 for some
+info.  >>
+
+
+File: stabs.info,  Node: Stab Types,  Next: Symbol Descriptors,  Prev: Cplusplus,  Up: Top
+
+Appendix A Table of Stab Types
+******************************
+
+The following are all the possible values for the stab type field, for
+a.out files, in numeric order.  This does not apply to XCOFF, but it
+does apply to stabs in sections (*note Stab Sections::).  Stabs in
+ECOFF use these values but add 0x8f300 to distinguish them from non-stab
+symbols.
+
+   The symbolic names are defined in the file `include/aout/stabs.def'.
+
+* Menu:
+
+* Non-Stab Symbol Types::	Types from 0 to 0x1f
+* Stab Symbol Types::		Types from 0x20 to 0xff
+
+
+File: stabs.info,  Node: Non-Stab Symbol Types,  Next: Stab Symbol Types,  Up: Stab Types
+
+A.1 Non-Stab Symbol Types
+=========================
+
+The following types are used by the linker and assembler, not by stab
+directives.  Since this document does not attempt to describe aspects of
+object file format other than the debugging format, no details are
+given.
+
+`0x0     N_UNDF'
+     Undefined symbol
+
+`0x2     N_ABS'
+     File scope absolute symbol
+
+`0x3     N_ABS | N_EXT'
+     External absolute symbol
+
+`0x4     N_TEXT'
+     File scope text symbol
+
+`0x5     N_TEXT | N_EXT'
+     External text symbol
+
+`0x6     N_DATA'
+     File scope data symbol
+
+`0x7     N_DATA | N_EXT'
+     External data symbol
+
+`0x8     N_BSS'
+     File scope BSS symbol
+
+`0x9     N_BSS | N_EXT'
+     External BSS symbol
+
+`0x0c    N_FN_SEQ'
+     Same as `N_FN', for Sequent compilers
+
+`0x0a    N_INDR'
+     Symbol is indirected to another symbol
+
+`0x12    N_COMM'
+     Common--visible after shared library dynamic link
+
+`0x14 N_SETA'
+`0x15 N_SETA | N_EXT'
+     Absolute set element
+
+`0x16 N_SETT'
+`0x17 N_SETT | N_EXT'
+     Text segment set element
+
+`0x18 N_SETD'
+`0x19 N_SETD | N_EXT'
+     Data segment set element
+
+`0x1a N_SETB'
+`0x1b N_SETB | N_EXT'
+     BSS segment set element
+
+`0x1c N_SETV'
+`0x1d N_SETV | N_EXT'
+     Pointer to set vector
+
+`0x1e N_WARNING'
+     Print a warning message during linking
+
+`0x1f    N_FN'
+     File name of a `.o' file
+
+
+File: stabs.info,  Node: Stab Symbol Types,  Prev: Non-Stab Symbol Types,  Up: Stab Types
+
+A.2 Stab Symbol Types
+=====================
+
+The following symbol types indicate that this is a stab.  This is the
+full list of stab numbers, including stab types that are used in
+languages other than C.
+
+`0x20     N_GSYM'
+     Global symbol; see *Note Global Variables::.
+
+`0x22     N_FNAME'
+     Function name (for BSD Fortran); see *Note Procedures::.
+
+`0x24     N_FUN'
+     Function name (*note Procedures::) or text segment variable (*note
+     Statics::).
+
+`0x26 N_STSYM'
+     Data segment file-scope variable; see *Note Statics::.
+
+`0x28 N_LCSYM'
+     BSS segment file-scope variable; see *Note Statics::.
+
+`0x2a N_MAIN'
+     Name of main routine; see *Note Main Program::.
+
+`0x2c N_ROSYM'
+     Variable in `.rodata' section; see *Note Statics::.
+
+`0x30     N_PC'
+     Global symbol (for Pascal); see *Note N_PC::.
+
+`0x32     N_NSYMS'
+     Number of symbols (according to Ultrix V4.0); see *Note N_NSYMS::.
+
+`0x34     N_NOMAP'
+     No DST map; see *Note N_NOMAP::.
+
+`0x36     N_MAC_DEFINE'
+     Name and body of a `#define'd macro; see *Note Macro define and
+     undefine::.
+
+`0x38 N_OBJ'
+     Object file (Solaris2).
+
+`0x3a     N_MAC_UNDEF'
+     Name of an `#undef'ed macro; see *Note Macro define and undefine::.
+
+`0x3c N_OPT'
+     Debugger options (Solaris2).
+
+`0x40     N_RSYM'
+     Register variable; see *Note Register Variables::.
+
+`0x42     N_M2C'
+     Modula-2 compilation unit; see *Note N_M2C::.
+
+`0x44     N_SLINE'
+     Line number in text segment; see *Note Line Numbers::.
+
+`0x46     N_DSLINE'
+     Line number in data segment; see *Note Line Numbers::.
+
+`0x48     N_BSLINE'
+     Line number in bss segment; see *Note Line Numbers::.
+
+`0x48     N_BROWS'
+     Sun source code browser, path to `.cb' file; see *Note N_BROWS::.
+
+`0x4a     N_DEFD'
+     GNU Modula2 definition module dependency; see *Note N_DEFD::.
+
+`0x4c N_FLINE'
+     Function start/body/end line numbers (Solaris2).
+
+`0x50     N_EHDECL'
+     GNU C++ exception variable; see *Note N_EHDECL::.
+
+`0x50     N_MOD2'
+     Modula2 info "for imc" (according to Ultrix V4.0); see *Note
+     N_MOD2::.
+
+`0x54     N_CATCH'
+     GNU C++ `catch' clause; see *Note N_CATCH::.
+
+`0x60     N_SSYM'
+     Structure of union element; see *Note N_SSYM::.
+
+`0x62 N_ENDM'
+     Last stab for module (Solaris2).
+
+`0x64     N_SO'
+     Path and name of source file; see *Note Source Files::.
+
+`0x80 N_LSYM'
+     Stack variable (*note Stack Variables::) or type (*note
+     Typedefs::).
+
+`0x82     N_BINCL'
+     Beginning of an include file (Sun only); see *Note Include Files::.
+
+`0x84     N_SOL'
+     Name of include file; see *Note Include Files::.
+
+`0xa0     N_PSYM'
+     Parameter variable; see *Note Parameters::.
+
+`0xa2     N_EINCL'
+     End of an include file; see *Note Include Files::.
+
+`0xa4     N_ENTRY'
+     Alternate entry point; see *Note Alternate Entry Points::.
+
+`0xc0     N_LBRAC'
+     Beginning of a lexical block; see *Note Block Structure::.
+
+`0xc2     N_EXCL'
+     Place holder for a deleted include file; see *Note Include Files::.
+
+`0xc4     N_SCOPE'
+     Modula2 scope information (Sun linker); see *Note N_SCOPE::.
+
+`0xe0     N_RBRAC'
+     End of a lexical block; see *Note Block Structure::.
+
+`0xe2     N_BCOMM'
+     Begin named common block; see *Note Common Blocks::.
+
+`0xe4     N_ECOMM'
+     End named common block; see *Note Common Blocks::.
+
+`0xe8     N_ECOML'
+     Member of a common block; see *Note Common Blocks::.
+
+`0xea N_WITH'
+     Pascal `with' statement: type,,0,0,offset (Solaris2).
+
+`0xf0     N_NBTEXT'
+     Gould non-base registers; see *Note Gould::.
+
+`0xf2     N_NBDATA'
+     Gould non-base registers; see *Note Gould::.
+
+`0xf4     N_NBBSS'
+     Gould non-base registers; see *Note Gould::.
+
+`0xf6     N_NBSTS'
+     Gould non-base registers; see *Note Gould::.
+
+`0xf8     N_NBLCS'
+     Gould non-base registers; see *Note Gould::.
+
+
+File: stabs.info,  Node: Symbol Descriptors,  Next: Type Descriptors,  Prev: Stab Types,  Up: Top
+
+Appendix B Table of Symbol Descriptors
+**************************************
+
+The symbol descriptor is the character which follows the colon in many
+stabs, and which tells what kind of stab it is.  *Note String Field::,
+for more information about their use.
+
+`DIGIT'
+`('
+`-'
+     Variable on the stack; see *Note Stack Variables::.
+
+`:'
+     C++ nested symbol; see *Note Nested Symbols::.
+
+`a'
+     Parameter passed by reference in register; see *Note Reference
+     Parameters::.
+
+`b'
+     Based variable; see *Note Based Variables::.
+
+`c'
+     Constant; see *Note Constants::.
+
+`C'
+     Conformant array bound (Pascal, maybe other languages); *Note
+     Conformant Arrays::.  Name of a caught exception (GNU C++).  These
+     can be distinguished because the latter uses `N_CATCH' and the
+     former uses another symbol type.
+
+`d'
+     Floating point register variable; see *Note Register Variables::.
+
+`D'
+     Parameter in floating point register; see *Note Register
+     Parameters::.
+
+`f'
+     File scope function; see *Note Procedures::.
+
+`F'
+     Global function; see *Note Procedures::.
+
+`G'
+     Global variable; see *Note Global Variables::.
+
+`i'
+     *Note Register Parameters::.
+
+`I'
+     Internal (nested) procedure; see *Note Nested Procedures::.
+
+`J'
+     Internal (nested) function; see *Note Nested Procedures::.
+
+`L'
+     Label name (documented by AIX, no further information known).
+
+`m'
+     Module; see *Note Procedures::.
+
+`p'
+     Argument list parameter; see *Note Parameters::.
+
+`pP'
+     *Note Parameters::.
+
+`pF'
+     Fortran Function parameter; see *Note Parameters::.
+
+`P'
+     Unfortunately, three separate meanings have been independently
+     invented for this symbol descriptor.  At least the GNU and Sun
+     uses can be distinguished by the symbol type.  Global Procedure
+     (AIX) (symbol type used unknown); see *Note Procedures::.
+     Register parameter (GNU) (symbol type `N_PSYM'); see *Note
+     Parameters::.  Prototype of function referenced by this file (Sun
+     `acc') (symbol type `N_FUN').
+
+`Q'
+     Static Procedure; see *Note Procedures::.
+
+`R'
+     Register parameter; see *Note Register Parameters::.
+
+`r'
+     Register variable; see *Note Register Variables::.
+
+`S'
+     File scope variable; see *Note Statics::.
+
+`s'
+     Local variable (OS9000).
+
+`t'
+     Type name; see *Note Typedefs::.
+
+`T'
+     Enumeration, structure, or union tag; see *Note Typedefs::.
+
+`v'
+     Parameter passed by reference; see *Note Reference Parameters::.
+
+`V'
+     Procedure scope static variable; see *Note Statics::.
+
+`x'
+     Conformant array; see *Note Conformant Arrays::.
+
+`X'
+     Function return variable; see *Note Parameters::.
+
+
+File: stabs.info,  Node: Type Descriptors,  Next: Expanded Reference,  Prev: Symbol Descriptors,  Up: Top
+
+Appendix C Table of Type Descriptors
+************************************
+
+The type descriptor is the character which follows the type number and
+an equals sign.  It specifies what kind of type is being defined.
+*Note String Field::, for more information about their use.
+
+`DIGIT'
+`('
+     Type reference; see *Note String Field::.
+
+`-'
+     Reference to builtin type; see *Note Negative Type Numbers::.
+
+`#'
+     Method (C++); see *Note Method Type Descriptor::.
+
+`*'
+     Pointer; see *Note Miscellaneous Types::.
+
+`&'
+     Reference (C++).
+
+`@'
+     Type Attributes (AIX); see *Note String Field::.  Member (class
+     and variable) type (GNU C++); see *Note Member Type Descriptor::.
+
+`a'
+     Array; see *Note Arrays::.
+
+`A'
+     Open array; see *Note Arrays::.
+
+`b'
+     Pascal space type (AIX); see *Note Miscellaneous Types::.  Builtin
+     integer type (Sun); see *Note Builtin Type Descriptors::.  Const
+     and volatile qualified type (OS9000).
+
+`B'
+     Volatile-qualified type; see *Note Miscellaneous Types::.
+
+`c'
+     Complex builtin type (AIX); see *Note Builtin Type Descriptors::.
+     Const-qualified type (OS9000).
+
+`C'
+     COBOL Picture type.  See AIX documentation for details.
+
+`d'
+     File type; see *Note Miscellaneous Types::.
+
+`D'
+     N-dimensional dynamic array; see *Note Arrays::.
+
+`e'
+     Enumeration type; see *Note Enumerations::.
+
+`E'
+     N-dimensional subarray; see *Note Arrays::.
+
+`f'
+     Function type; see *Note Function Types::.
+
+`F'
+     Pascal function parameter; see *Note Function Types::
+
+`g'
+     Builtin floating point type; see *Note Builtin Type Descriptors::.
+
+`G'
+     COBOL Group.  See AIX documentation for details.
+
+`i'
+     Imported type (AIX); see *Note Cross-References::.
+     Volatile-qualified type (OS9000).
+
+`k'
+     Const-qualified type; see *Note Miscellaneous Types::.
+
+`K'
+     COBOL File Descriptor.  See AIX documentation for details.
+
+`M'
+     Multiple instance type; see *Note Miscellaneous Types::.
+
+`n'
+     String type; see *Note Strings::.
+
+`N'
+     Stringptr; see *Note Strings::.
+
+`o'
+     Opaque type; see *Note Typedefs::.
+
+`p'
+     Procedure; see *Note Function Types::.
+
+`P'
+     Packed array; see *Note Arrays::.
+
+`r'
+     Range type; see *Note Subranges::.
+
+`R'
+     Builtin floating type; see *Note Builtin Type Descriptors:: (Sun).
+     Pascal subroutine parameter; see *Note Function Types:: (AIX).
+     Detecting this conflict is possible with careful parsing (hint: a
+     Pascal subroutine parameter type will always contain a comma, and
+     a builtin type descriptor never will).
+
+`s'
+     Structure type; see *Note Structures::.
+
+`S'
+     Set type; see *Note Miscellaneous Types::.
+
+`u'
+     Union; see *Note Unions::.
+
+`v'
+     Variant record.  This is a Pascal and Modula-2 feature which is
+     like a union within a struct in C.  See AIX documentation for
+     details.
+
+`w'
+     Wide character; see *Note Builtin Type Descriptors::.
+
+`x'
+     Cross-reference; see *Note Cross-References::.
+
+`Y'
+     Used by IBM's xlC C++ compiler (for structures, I think).
+
+`z'
+     gstring; see *Note Strings::.
+
+
+File: stabs.info,  Node: Expanded Reference,  Next: Questions,  Prev: Type Descriptors,  Up: Top
+
+Appendix D Expanded Reference by Stab Type
+******************************************
+
+For a full list of stab types, and cross-references to where they are
+described, see *Note Stab Types::.  This appendix just covers certain
+stabs which are not yet described in the main body of this document;
+eventually the information will all be in one place.
+
+   Format of an entry:
+
+   The first line is the symbol type (see `include/aout/stab.def').
+
+   The second line describes the language constructs the symbol type
+represents.
+
+   The third line is the stab format with the significant stab fields
+named and the rest NIL.
+
+   Subsequent lines expand upon the meaning and possible values for each
+significant stab field.
+
+   Finally, any further information.
+
+* Menu:
+
+* N_PC::			Pascal global symbol
+* N_NSYMS::			Number of symbols
+* N_NOMAP::			No DST map
+* N_M2C::			Modula-2 compilation unit
+* N_BROWS::			Path to .cb file for Sun source code browser
+* N_DEFD::			GNU Modula2 definition module dependency
+* N_EHDECL::			GNU C++ exception variable
+* N_MOD2::			Modula2 information "for imc"
+* N_CATCH::			GNU C++ "catch" clause
+* N_SSYM::			Structure or union element
+* N_SCOPE::			Modula2 scope information (Sun only)
+* Gould::			non-base register symbols used on Gould systems
+* N_LENG::			Length of preceding entry
+
+
+File: stabs.info,  Node: N_PC,  Next: N_NSYMS,  Up: Expanded Reference
+
+D.1 N_PC
+========
+
+ -- `.stabs': N_PC
+     Global symbol (for Pascal).
+
+          "name" -> "symbol_name"  <<?>>
+          value  -> supposedly the line number (stab.def is skeptical)
+
+          `stabdump.c' says:
+
+          global pascal symbol: name,,0,subtype,line
+          << subtype? >>
+
+
+File: stabs.info,  Node: N_NSYMS,  Next: N_NOMAP,  Prev: N_PC,  Up: Expanded Reference
+
+D.2 N_NSYMS
+===========
+
+ -- `.stabn': N_NSYMS
+     Number of symbols (according to Ultrix V4.0).
+
+                  0, files,,funcs,lines (stab.def)
+
+
+File: stabs.info,  Node: N_NOMAP,  Next: N_M2C,  Prev: N_NSYMS,  Up: Expanded Reference
+
+D.3 N_NOMAP
+===========
+
+ -- `.stabs': N_NOMAP
+     No DST map for symbol (according to Ultrix V4.0).  I think this
+     means a variable has been optimized out.
+
+                  name, ,0,type,ignored (stab.def)
+
+
+File: stabs.info,  Node: N_M2C,  Next: N_BROWS,  Prev: N_NOMAP,  Up: Expanded Reference
+
+D.4 N_M2C
+=========
+
+ -- `.stabs': N_M2C
+     Modula-2 compilation unit.
+
+          "string" -> "unit_name,unit_time_stamp[,code_time_stamp]"
+          desc   -> unit_number
+          value  -> 0 (main unit)
+                    1 (any other unit)
+
+     See `Dbx and Dbxtool Interfaces', 2nd edition, by Sun, 1988, for
+     more information.
+
+
+
+File: stabs.info,  Node: N_BROWS,  Next: N_DEFD,  Prev: N_M2C,  Up: Expanded Reference
+
+D.5 N_BROWS
+===========
+
+ -- `.stabs': N_BROWS
+     Sun source code browser, path to `.cb' file
+
+     <<?>> "path to associated `.cb' file"
+
+     Note: N_BROWS has the same value as N_BSLINE.
+
+
+File: stabs.info,  Node: N_DEFD,  Next: N_EHDECL,  Prev: N_BROWS,  Up: Expanded Reference
+
+D.6 N_DEFD
+==========
+
+ -- `.stabn': N_DEFD
+     GNU Modula2 definition module dependency.
+
+     GNU Modula-2 definition module dependency.  The value is the
+     modification time of the definition file.  The other field is
+     non-zero if it is imported with the GNU M2 keyword `%INITIALIZE'.
+     Perhaps `N_M2C' can be used if there are enough empty fields?
+
+
+File: stabs.info,  Node: N_EHDECL,  Next: N_MOD2,  Prev: N_DEFD,  Up: Expanded Reference
+
+D.7 N_EHDECL
+============
+
+ -- `.stabs': N_EHDECL
+     GNU C++ exception variable <<?>>.
+
+     "STRING is variable name"
+
+     Note: conflicts with `N_MOD2'.
+
+
+File: stabs.info,  Node: N_MOD2,  Next: N_CATCH,  Prev: N_EHDECL,  Up: Expanded Reference
+
+D.8 N_MOD2
+==========
+
+ -- `.stab?': N_MOD2
+     Modula2 info "for imc" (according to Ultrix V4.0)
+
+     Note: conflicts with `N_EHDECL'  <<?>>
+
+
+File: stabs.info,  Node: N_CATCH,  Next: N_SSYM,  Prev: N_MOD2,  Up: Expanded Reference
+
+D.9 N_CATCH
+===========
+
+ -- `.stabn': N_CATCH
+     GNU C++ `catch' clause
+
+     GNU C++ `catch' clause.  The value is its address.  The desc field
+     is nonzero if this entry is immediately followed by a `CAUGHT' stab
+     saying what exception was caught.  Multiple `CAUGHT' stabs means
+     that multiple exceptions can be caught here.  If desc is 0, it
+     means all exceptions are caught here.
+
+
+File: stabs.info,  Node: N_SSYM,  Next: N_SCOPE,  Prev: N_CATCH,  Up: Expanded Reference
+
+D.10 N_SSYM
+===========
+
+ -- `.stabn': N_SSYM
+     Structure or union element.
+
+     The value is the offset in the structure.
+
+     <<?looking at structs and unions in C I didn't see these>>
+
+
+File: stabs.info,  Node: N_SCOPE,  Next: Gould,  Prev: N_SSYM,  Up: Expanded Reference
+
+D.11 N_SCOPE
+============
+
+ -- `.stab?': N_SCOPE
+     Modula2 scope information (Sun linker) <<?>>
+
+
+File: stabs.info,  Node: Gould,  Next: N_LENG,  Prev: N_SCOPE,  Up: Expanded Reference
+
+D.12 Non-base registers on Gould systems
+========================================
+
+ -- `.stab?': N_NBTEXT
+ -- `.stab?': N_NBDATA
+ -- `.stab?': N_NBBSS
+ -- `.stab?': N_NBSTS
+ -- `.stab?': N_NBLCS
+     These are used on Gould systems for non-base registers syms.
+
+     However, the following values are not the values used by Gould;
+     they are the values which GNU has been documenting for these
+     values for a long time, without actually checking what Gould uses.
+     I include these values only because perhaps some someone actually
+     did something with the GNU information (I hope not, why GNU
+     knowingly assigned wrong values to these in the header file is a
+     complete mystery to me).
+
+          240    0xf0     N_NBTEXT  ??
+          242    0xf2     N_NBDATA  ??
+          244    0xf4     N_NBBSS   ??
+          246    0xf6     N_NBSTS   ??
+          248    0xf8     N_NBLCS   ??
+
+
+File: stabs.info,  Node: N_LENG,  Prev: Gould,  Up: Expanded Reference
+
+D.13 N_LENG
+===========
+
+ -- `.stabn': N_LENG
+     Second symbol entry containing a length-value for the preceding
+     entry.  The value is the length.
+
+
+File: stabs.info,  Node: Questions,  Next: Stab Sections,  Prev: Expanded Reference,  Up: Top
+
+Appendix E Questions and Anomalies
+**********************************
+
+   * For GNU C stabs defining local and global variables (`N_LSYM' and
+     `N_GSYM'), the desc field is supposed to contain the source line
+     number on which the variable is defined.  In reality the desc
+     field is always 0.  (This behavior is defined in `dbxout.c' and
+     putting a line number in desc is controlled by `#ifdef
+     WINNING_GDB', which defaults to false). GDB supposedly uses this
+     information if you say `list VAR'.  In reality, VAR can be a
+     variable defined in the program and GDB says `function VAR not
+     defined'.
+
+   * In GNU C stabs, there seems to be no way to differentiate tag
+     types: structures, unions, and enums (symbol descriptor `T') and
+     typedefs (symbol descriptor `t') defined at file scope from types
+     defined locally to a procedure or other more local scope.  They
+     all use the `N_LSYM' stab type.  Types defined at procedure scope
+     are emitted after the `N_RBRAC' of the preceding function and
+     before the code of the procedure in which they are defined.  This
+     is exactly the same as types defined in the source file between
+     the two procedure bodies.  GDB over-compensates by placing all
+     types in block #1, the block for symbols of file scope.  This is
+     true for default, `-ansi' and `-traditional' compiler options.
+     (Bugs gcc/1063, gdb/1066.)
+
+   * What ends the procedure scope?  Is it the proc block's `N_RBRAC'
+     or the next `N_FUN'?  (I believe its the first.)
+
+
+File: stabs.info,  Node: Stab Sections,  Next: GNU Free Documentation License,  Prev: Questions,  Up: Top
+
+Appendix F Using Stabs in Their Own Sections
+********************************************
+
+Many object file formats allow tools to create object files with custom
+sections containing any arbitrary data.  For any such object file
+format, stabs can be embedded in special sections.  This is how stabs
+are used with ELF and SOM, and aside from ECOFF and XCOFF, is how stabs
+are used with COFF.
+
+* Menu:
+
+* Stab Section Basics::    How to embed stabs in sections
+* ELF Linker Relocation::  Sun ELF hacks
+
+
+File: stabs.info,  Node: Stab Section Basics,  Next: ELF Linker Relocation,  Up: Stab Sections
+
+F.1 How to Embed Stabs in Sections
+==================================
+
+The assembler creates two custom sections, a section named `.stab'
+which contains an array of fixed length structures, one struct per stab,
+and a section named `.stabstr' containing all the variable length
+strings that are referenced by stabs in the `.stab' section.  The byte
+order of the stabs binary data depends on the object file format.  For
+ELF, it matches the byte order of the ELF file itself, as determined
+from the `EI_DATA' field in the `e_ident' member of the ELF header.
+For SOM, it is always big-endian (is this true??? FIXME).  For COFF, it
+matches the byte order of the COFF headers.  The meaning of the fields
+is the same as for a.out (*note Symbol Table Format::), except that the
+`n_strx' field is relative to the strings for the current compilation
+unit (which can be found using the synthetic N_UNDF stab described
+below), rather than the entire string table.
+
+   The first stab in the `.stab' section for each compilation unit is
+synthetic, generated entirely by the assembler, with no corresponding
+`.stab' directive as input to the assembler.  This stab contains the
+following fields:
+
+`n_strx'
+     Offset in the `.stabstr' section to the source filename.
+
+`n_type'
+     `N_UNDF'.
+
+`n_other'
+     Unused field, always zero.  This may eventually be used to hold
+     overflows from the count in the `n_desc' field.
+
+`n_desc'
+     Count of upcoming symbols, i.e., the number of remaining stabs for
+     this source file.
+
+`n_value'
+     Size of the string table fragment associated with this source
+     file, in bytes.
+
+   The `.stabstr' section always starts with a null byte (so that string
+offsets of zero reference a null string), followed by random length
+strings, each of which is null byte terminated.
+
+   The ELF section header for the `.stab' section has its `sh_link'
+member set to the section number of the `.stabstr' section, and the
+`.stabstr' section has its ELF section header `sh_type' member set to
+`SHT_STRTAB' to mark it as a string table.  SOM and COFF have no way of
+linking the sections together or marking them as string tables.
+
+   For COFF, the `.stab' and `.stabstr' sections may be simply
+concatenated by the linker.  GDB then uses the `n_desc' fields to
+figure out the extent of the original sections.  Similarly, the
+`n_value' fields of the header symbols are added together in order to
+get the actual position of the strings in a desired `.stabstr' section.
+Although this design obviates any need for the linker to relocate or
+otherwise manipulate `.stab' and `.stabstr' sections, it also requires
+some care to ensure that the offsets are calculated correctly.  For
+instance, if the linker were to pad in between the `.stabstr' sections
+before concatenating, then the offsets to strings in the middle of the
+executable's `.stabstr' section would be wrong.
+
+   The GNU linker is able to optimize stabs information by merging
+duplicate strings and removing duplicate header file information (*note
+Include Files::).  When some versions of the GNU linker optimize stabs
+in sections, they remove the leading `N_UNDF' symbol and arranges for
+all the `n_strx' fields to be relative to the start of the `.stabstr'
+section.
+
+
+File: stabs.info,  Node: ELF Linker Relocation,  Prev: Stab Section Basics,  Up: Stab Sections
+
+F.2 Having the Linker Relocate Stabs in ELF
+===========================================
+
+This section describes some Sun hacks for Stabs in ELF; it does not
+apply to COFF or SOM.
+
+   To keep linking fast, you don't want the linker to have to relocate
+very many stabs.  Making sure this is done for `N_SLINE', `N_RBRAC',
+and `N_LBRAC' stabs is the most important thing (see the descriptions
+of those stabs for more information).  But Sun's stabs in ELF has taken
+this further, to make all addresses in the `n_value' field (functions
+and static variables) relative to the source file.  For the `N_SO'
+symbol itself, Sun simply omits the address.  To find the address of
+each section corresponding to a given source file, the compiler puts
+out symbols giving the address of each section for a given source file.
+Since these are ELF (not stab) symbols, the linker relocates them
+correctly without having to touch the stabs section.  They are named
+`Bbss.bss' for the bss section, `Ddata.data' for the data section, and
+`Drodata.rodata' for the rodata section.  For the text section, there
+is no such symbol (but there should be, see below).  For an example of
+how these symbols work, *Note Stab Section Transformations::.  GCC does
+not provide these symbols; it instead relies on the stabs getting
+relocated.  Thus addresses which would normally be relative to
+`Bbss.bss', etc., are already relocated.  The Sun linker provided with
+Solaris 2.2 and earlier relocates stabs using normal ELF relocation
+information, as it would do for any section.  Sun has been threatening
+to kludge their linker to not do this (to speed up linking), even
+though the correct way to avoid having the linker do these relocations
+is to have the compiler no longer output relocatable values.  Last I
+heard they had been talked out of the linker kludge.  See Sun point
+patch 101052-01 and Sun bug 1142109.  With the Sun compiler this
+affects `S' symbol descriptor stabs (*note Statics::) and functions
+(*note Procedures::).  In the latter case, to adopt the clean solution
+(making the value of the stab relative to the start of the compilation
+unit), it would be necessary to invent a `Ttext.text' symbol, analogous
+to the `Bbss.bss', etc., symbols.  I recommend this rather than using a
+zero value and getting the address from the ELF symbols.
+
+   Finding the correct `Bbss.bss', etc., symbol is difficult, because
+the linker simply concatenates the `.stab' sections from each `.o' file
+without including any information about which part of a `.stab' section
+comes from which `.o' file.  The way GDB does this is to look for an
+ELF `STT_FILE' symbol which has the same name as the last component of
+the file name from the `N_SO' symbol in the stabs (for example, if the
+file name is `../../gdb/main.c', it looks for an ELF `STT_FILE' symbol
+named `main.c').  This loses if different files have the same name
+(they could be in different directories, a library could have been
+copied from one system to another, etc.).  It would be much cleaner to
+have the `Bbss.bss' symbols in the stabs themselves.  Having the linker
+relocate them there is no more work than having the linker relocate ELF
+symbols, and it solves the problem of having to associate the ELF and
+stab symbols.  However, no one has yet designed or implemented such a
+scheme.
+
+
+File: stabs.info,  Node: GNU Free Documentation License,  Next: Symbol Types Index,  Prev: Stab Sections,  Up: Top
+
+Appendix G GNU Free Documentation License
+*****************************************
+
+                     Version 1.3, 3 November 2008
+
+     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+     `http://fsf.org/'
+
+     Everyone is permitted to copy and distribute verbatim copies
+     of this license document, but changing it is not allowed.
+
+  0. PREAMBLE
+
+     The purpose of this License is to make a manual, textbook, or other
+     functional and useful document "free" in the sense of freedom: to
+     assure everyone the effective freedom to copy and redistribute it,
+     with or without modifying it, either commercially or
+     noncommercially.  Secondarily, this License preserves for the
+     author and publisher a way to get credit for their work, while not
+     being considered responsible for modifications made by others.
+
+     This License is a kind of "copyleft", which means that derivative
+     works of the document must themselves be free in the same sense.
+     It complements the GNU General Public License, which is a copyleft
+     license designed for free software.
+
+     We have designed this License in order to use it for manuals for
+     free software, because free software needs free documentation: a
+     free program should come with manuals providing the same freedoms
+     that the software does.  But this License is not limited to
+     software manuals; it can be used for any textual work, regardless
+     of subject matter or whether it is published as a printed book.
+     We recommend this License principally for works whose purpose is
+     instruction or reference.
+
+  1. APPLICABILITY AND DEFINITIONS
+
+     This License applies to any manual or other work, in any medium,
+     that contains a notice placed by the copyright holder saying it
+     can be distributed under the terms of this License.  Such a notice
+     grants a world-wide, royalty-free license, unlimited in duration,
+     to use that work under the conditions stated herein.  The
+     "Document", below, refers to any such manual or work.  Any member
+     of the public is a licensee, and is addressed as "you".  You
+     accept the license if you copy, modify or distribute the work in a
+     way requiring permission under copyright law.
+
+     A "Modified Version" of the Document means any work containing the
+     Document or a portion of it, either copied verbatim, or with
+     modifications and/or translated into another language.
+
+     A "Secondary Section" is a named appendix or a front-matter section
+     of the Document that deals exclusively with the relationship of the
+     publishers or authors of the Document to the Document's overall
+     subject (or to related matters) and contains nothing that could
+     fall directly within that overall subject.  (Thus, if the Document
+     is in part a textbook of mathematics, a Secondary Section may not
+     explain any mathematics.)  The relationship could be a matter of
+     historical connection with the subject or with related matters, or
+     of legal, commercial, philosophical, ethical or political position
+     regarding them.
+
+     The "Invariant Sections" are certain Secondary Sections whose
+     titles are designated, as being those of Invariant Sections, in
+     the notice that says that the Document is released under this
+     License.  If a section does not fit the above definition of
+     Secondary then it is not allowed to be designated as Invariant.
+     The Document may contain zero Invariant Sections.  If the Document
+     does not identify any Invariant Sections then there are none.
+
+     The "Cover Texts" are certain short passages of text that are
+     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+     that says that the Document is released under this License.  A
+     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+     be at most 25 words.
+
+     A "Transparent" copy of the Document means a machine-readable copy,
+     represented in a format whose specification is available to the
+     general public, that is suitable for revising the document
+     straightforwardly with generic text editors or (for images
+     composed of pixels) generic paint programs or (for drawings) some
+     widely available drawing editor, and that is suitable for input to
+     text formatters or for automatic translation to a variety of
+     formats suitable for input to text formatters.  A copy made in an
+     otherwise Transparent file format whose markup, or absence of
+     markup, has been arranged to thwart or discourage subsequent
+     modification by readers is not Transparent.  An image format is
+     not Transparent if used for any substantial amount of text.  A
+     copy that is not "Transparent" is called "Opaque".
+
+     Examples of suitable formats for Transparent copies include plain
+     ASCII without markup, Texinfo input format, LaTeX input format,
+     SGML or XML using a publicly available DTD, and
+     standard-conforming simple HTML, PostScript or PDF designed for
+     human modification.  Examples of transparent image formats include
+     PNG, XCF and JPG.  Opaque formats include proprietary formats that
+     can be read and edited only by proprietary word processors, SGML or
+     XML for which the DTD and/or processing tools are not generally
+     available, and the machine-generated HTML, PostScript or PDF
+     produced by some word processors for output purposes only.
+
+     The "Title Page" means, for a printed book, the title page itself,
+     plus such following pages as are needed to hold, legibly, the
+     material this License requires to appear in the title page.  For
+     works in formats which do not have any title page as such, "Title
+     Page" means the text near the most prominent appearance of the
+     work's title, preceding the beginning of the body of the text.
+
+     The "publisher" means any person or entity that distributes copies
+     of the Document to the public.
+
+     A section "Entitled XYZ" means a named subunit of the Document
+     whose title either is precisely XYZ or contains XYZ in parentheses
+     following text that translates XYZ in another language.  (Here XYZ
+     stands for a specific section name mentioned below, such as
+     "Acknowledgements", "Dedications", "Endorsements", or "History".)
+     To "Preserve the Title" of such a section when you modify the
+     Document means that it remains a section "Entitled XYZ" according
+     to this definition.
+
+     The Document may include Warranty Disclaimers next to the notice
+     which states that this License applies to the Document.  These
+     Warranty Disclaimers are considered to be included by reference in
+     this License, but only as regards disclaiming warranties: any other
+     implication that these Warranty Disclaimers may have is void and
+     has no effect on the meaning of this License.
+
+  2. VERBATIM COPYING
+
+     You may copy and distribute the Document in any medium, either
+     commercially or noncommercially, provided that this License, the
+     copyright notices, and the license notice saying this License
+     applies to the Document are reproduced in all copies, and that you
+     add no other conditions whatsoever to those of this License.  You
+     may not use technical measures to obstruct or control the reading
+     or further copying of the copies you make or distribute.  However,
+     you may accept compensation in exchange for copies.  If you
+     distribute a large enough number of copies you must also follow
+     the conditions in section 3.
+
+     You may also lend copies, under the same conditions stated above,
+     and you may publicly display copies.
+
+  3. COPYING IN QUANTITY
+
+     If you publish printed copies (or copies in media that commonly
+     have printed covers) of the Document, numbering more than 100, and
+     the Document's license notice requires Cover Texts, you must
+     enclose the copies in covers that carry, clearly and legibly, all
+     these Cover Texts: Front-Cover Texts on the front cover, and
+     Back-Cover Texts on the back cover.  Both covers must also clearly
+     and legibly identify you as the publisher of these copies.  The
+     front cover must present the full title with all words of the
+     title equally prominent and visible.  You may add other material
+     on the covers in addition.  Copying with changes limited to the
+     covers, as long as they preserve the title of the Document and
+     satisfy these conditions, can be treated as verbatim copying in
+     other respects.
+
+     If the required texts for either cover are too voluminous to fit
+     legibly, you should put the first ones listed (as many as fit
+     reasonably) on the actual cover, and continue the rest onto
+     adjacent pages.
+
+     If you publish or distribute Opaque copies of the Document
+     numbering more than 100, you must either include a
+     machine-readable Transparent copy along with each Opaque copy, or
+     state in or with each Opaque copy a computer-network location from
+     which the general network-using public has access to download
+     using public-standard network protocols a complete Transparent
+     copy of the Document, free of added material.  If you use the
+     latter option, you must take reasonably prudent steps, when you
+     begin distribution of Opaque copies in quantity, to ensure that
+     this Transparent copy will remain thus accessible at the stated
+     location until at least one year after the last time you
+     distribute an Opaque copy (directly or through your agents or
+     retailers) of that edition to the public.
+
+     It is requested, but not required, that you contact the authors of
+     the Document well before redistributing any large number of
+     copies, to give them a chance to provide you with an updated
+     version of the Document.
+
+  4. MODIFICATIONS
+
+     You may copy and distribute a Modified Version of the Document
+     under the conditions of sections 2 and 3 above, provided that you
+     release the Modified Version under precisely this License, with
+     the Modified Version filling the role of the Document, thus
+     licensing distribution and modification of the Modified Version to
+     whoever possesses a copy of it.  In addition, you must do these
+     things in the Modified Version:
+
+       A. Use in the Title Page (and on the covers, if any) a title
+          distinct from that of the Document, and from those of
+          previous versions (which should, if there were any, be listed
+          in the History section of the Document).  You may use the
+          same title as a previous version if the original publisher of
+          that version gives permission.
+
+       B. List on the Title Page, as authors, one or more persons or
+          entities responsible for authorship of the modifications in
+          the Modified Version, together with at least five of the
+          principal authors of the Document (all of its principal
+          authors, if it has fewer than five), unless they release you
+          from this requirement.
+
+       C. State on the Title page the name of the publisher of the
+          Modified Version, as the publisher.
+
+       D. Preserve all the copyright notices of the Document.
+
+       E. Add an appropriate copyright notice for your modifications
+          adjacent to the other copyright notices.
+
+       F. Include, immediately after the copyright notices, a license
+          notice giving the public permission to use the Modified
+          Version under the terms of this License, in the form shown in
+          the Addendum below.
+
+       G. Preserve in that license notice the full lists of Invariant
+          Sections and required Cover Texts given in the Document's
+          license notice.
+
+       H. Include an unaltered copy of this License.
+
+       I. Preserve the section Entitled "History", Preserve its Title,
+          and add to it an item stating at least the title, year, new
+          authors, and publisher of the Modified Version as given on
+          the Title Page.  If there is no section Entitled "History" in
+          the Document, create one stating the title, year, authors,
+          and publisher of the Document as given on its Title Page,
+          then add an item describing the Modified Version as stated in
+          the previous sentence.
+
+       J. Preserve the network location, if any, given in the Document
+          for public access to a Transparent copy of the Document, and
+          likewise the network locations given in the Document for
+          previous versions it was based on.  These may be placed in
+          the "History" section.  You may omit a network location for a
+          work that was published at least four years before the
+          Document itself, or if the original publisher of the version
+          it refers to gives permission.
+
+       K. For any section Entitled "Acknowledgements" or "Dedications",
+          Preserve the Title of the section, and preserve in the
+          section all the substance and tone of each of the contributor
+          acknowledgements and/or dedications given therein.
+
+       L. Preserve all the Invariant Sections of the Document,
+          unaltered in their text and in their titles.  Section numbers
+          or the equivalent are not considered part of the section
+          titles.
+
+       M. Delete any section Entitled "Endorsements".  Such a section
+          may not be included in the Modified Version.
+
+       N. Do not retitle any existing section to be Entitled
+          "Endorsements" or to conflict in title with any Invariant
+          Section.
+
+       O. Preserve any Warranty Disclaimers.
+
+     If the Modified Version includes new front-matter sections or
+     appendices that qualify as Secondary Sections and contain no
+     material copied from the Document, you may at your option
+     designate some or all of these sections as invariant.  To do this,
+     add their titles to the list of Invariant Sections in the Modified
+     Version's license notice.  These titles must be distinct from any
+     other section titles.
+
+     You may add a section Entitled "Endorsements", provided it contains
+     nothing but endorsements of your Modified Version by various
+     parties--for example, statements of peer review or that the text
+     has been approved by an organization as the authoritative
+     definition of a standard.
+
+     You may add a passage of up to five words as a Front-Cover Text,
+     and a passage of up to 25 words as a Back-Cover Text, to the end
+     of the list of Cover Texts in the Modified Version.  Only one
+     passage of Front-Cover Text and one of Back-Cover Text may be
+     added by (or through arrangements made by) any one entity.  If the
+     Document already includes a cover text for the same cover,
+     previously added by you or by arrangement made by the same entity
+     you are acting on behalf of, you may not add another; but you may
+     replace the old one, on explicit permission from the previous
+     publisher that added the old one.
+
+     The author(s) and publisher(s) of the Document do not by this
+     License give permission to use their names for publicity for or to
+     assert or imply endorsement of any Modified Version.
+
+  5. COMBINING DOCUMENTS
+
+     You may combine the Document with other documents released under
+     this License, under the terms defined in section 4 above for
+     modified versions, provided that you include in the combination
+     all of the Invariant Sections of all of the original documents,
+     unmodified, and list them all as Invariant Sections of your
+     combined work in its license notice, and that you preserve all
+     their Warranty Disclaimers.
+
+     The combined work need only contain one copy of this License, and
+     multiple identical Invariant Sections may be replaced with a single
+     copy.  If there are multiple Invariant Sections with the same name
+     but different contents, make the title of each such section unique
+     by adding at the end of it, in parentheses, the name of the
+     original author or publisher of that section if known, or else a
+     unique number.  Make the same adjustment to the section titles in
+     the list of Invariant Sections in the license notice of the
+     combined work.
+
+     In the combination, you must combine any sections Entitled
+     "History" in the various original documents, forming one section
+     Entitled "History"; likewise combine any sections Entitled
+     "Acknowledgements", and any sections Entitled "Dedications".  You
+     must delete all sections Entitled "Endorsements."
+
+  6. COLLECTIONS OF DOCUMENTS
+
+     You may make a collection consisting of the Document and other
+     documents released under this License, and replace the individual
+     copies of this License in the various documents with a single copy
+     that is included in the collection, provided that you follow the
+     rules of this License for verbatim copying of each of the
+     documents in all other respects.
+
+     You may extract a single document from such a collection, and
+     distribute it individually under this License, provided you insert
+     a copy of this License into the extracted document, and follow
+     this License in all other respects regarding verbatim copying of
+     that document.
+
+  7. AGGREGATION WITH INDEPENDENT WORKS
+
+     A compilation of the Document or its derivatives with other
+     separate and independent documents or works, in or on a volume of
+     a storage or distribution medium, is called an "aggregate" if the
+     copyright resulting from the compilation is not used to limit the
+     legal rights of the compilation's users beyond what the individual
+     works permit.  When the Document is included in an aggregate, this
+     License does not apply to the other works in the aggregate which
+     are not themselves derivative works of the Document.
+
+     If the Cover Text requirement of section 3 is applicable to these
+     copies of the Document, then if the Document is less than one half
+     of the entire aggregate, the Document's Cover Texts may be placed
+     on covers that bracket the Document within the aggregate, or the
+     electronic equivalent of covers if the Document is in electronic
+     form.  Otherwise they must appear on printed covers that bracket
+     the whole aggregate.
+
+  8. TRANSLATION
+
+     Translation is considered a kind of modification, so you may
+     distribute translations of the Document under the terms of section
+     4.  Replacing Invariant Sections with translations requires special
+     permission from their copyright holders, but you may include
+     translations of some or all Invariant Sections in addition to the
+     original versions of these Invariant Sections.  You may include a
+     translation of this License, and all the license notices in the
+     Document, and any Warranty Disclaimers, provided that you also
+     include the original English version of this License and the
+     original versions of those notices and disclaimers.  In case of a
+     disagreement between the translation and the original version of
+     this License or a notice or disclaimer, the original version will
+     prevail.
+
+     If a section in the Document is Entitled "Acknowledgements",
+     "Dedications", or "History", the requirement (section 4) to
+     Preserve its Title (section 1) will typically require changing the
+     actual title.
+
+  9. TERMINATION
+
+     You may not copy, modify, sublicense, or distribute the Document
+     except as expressly provided under this License.  Any attempt
+     otherwise to copy, modify, sublicense, or distribute it is void,
+     and will automatically terminate your rights under this License.
+
+     However, if you cease all violation of this License, then your
+     license from a particular copyright holder is reinstated (a)
+     provisionally, unless and until the copyright holder explicitly
+     and finally terminates your license, and (b) permanently, if the
+     copyright holder fails to notify you of the violation by some
+     reasonable means prior to 60 days after the cessation.
+
+     Moreover, your license from a particular copyright holder is
+     reinstated permanently if the copyright holder notifies you of the
+     violation by some reasonable means, this is the first time you have
+     received notice of violation of this License (for any work) from
+     that copyright holder, and you cure the violation prior to 30 days
+     after your receipt of the notice.
+
+     Termination of your rights under this section does not terminate
+     the licenses of parties who have received copies or rights from
+     you under this License.  If your rights have been terminated and
+     not permanently reinstated, receipt of a copy of some or all of
+     the same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+     The Free Software Foundation may publish new, revised versions of
+     the GNU Free Documentation 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.  See
+     `http://www.gnu.org/copyleft/'.
+
+     Each version of the License is given a distinguishing version
+     number.  If the Document specifies that a particular numbered
+     version of this License "or any later version" applies to it, you
+     have the option of following the terms and conditions either of
+     that specified version or of any later version that has been
+     published (not as a draft) by the Free Software Foundation.  If
+     the Document does not specify a version number of this License,
+     you may choose any version ever published (not as a draft) by the
+     Free Software Foundation.  If the Document specifies that a proxy
+     can decide which future versions of this License can be used, that
+     proxy's public statement of acceptance of a version permanently
+     authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+     World Wide Web server that publishes copyrightable works and also
+     provides prominent facilities for anybody to edit those works.  A
+     public wiki that anybody can edit is an example of such a server.
+     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+     site means any set of copyrightable works thus published on the MMC
+     site.
+
+     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+     license published by Creative Commons Corporation, a not-for-profit
+     corporation with a principal place of business in San Francisco,
+     California, as well as future copyleft versions of that license
+     published by that same organization.
+
+     "Incorporate" means to publish or republish a Document, in whole or
+     in part, as part of another Document.
+
+     An MMC is "eligible for relicensing" if it is licensed under this
+     License, and if all works that were first published under this
+     License somewhere other than this MMC, and subsequently
+     incorporated in whole or in part into the MMC, (1) had no cover
+     texts or invariant sections, and (2) were thus incorporated prior
+     to November 1, 2008.
+
+     The operator of an MMC Site may republish an MMC contained in the
+     site under CC-BY-SA on the same site at any time before August 1,
+     2009, provided the MMC is eligible for relicensing.
+
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+       Copyright (C)  YEAR  YOUR NAME.
+       Permission is granted to copy, distribute and/or modify this document
+       under the terms of the GNU Free Documentation License, Version 1.3
+       or any later version published by the Free Software Foundation;
+       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+       Texts.  A copy of the license is included in the section entitled ``GNU
+       Free Documentation License''.
+
+   If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+         with the Invariant Sections being LIST THEIR TITLES, with
+         the Front-Cover Texts being LIST, and with the Back-Cover Texts
+         being LIST.
+
+   If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+   If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License, to
+permit their use in free software.
+
+
+File: stabs.info,  Node: Symbol Types Index,  Prev: GNU Free Documentation License,  Up: Top
+
+Symbol Types Index
+******************
+
+ [index ]
+* Menu:
+
+* .bb:                                   Block Structure.      (line 26)
+* .be:                                   Block Structure.      (line 26)
+* C_BCOMM:                               Common Blocks.        (line 10)
+* C_BINCL:                               Include Files.        (line 41)
+* C_BLOCK:                               Block Structure.      (line 26)
+* C_BSTAT:                               Statics.              (line 31)
+* C_DECL, for types:                     Typedefs.             (line  6)
+* C_ECOML:                               Common Blocks.        (line 17)
+* C_ECOMM:                               Common Blocks.        (line 10)
+* C_EINCL:                               Include Files.        (line 41)
+* C_ENTRY:                               Alternate Entry Points.
+                                                               (line  6)
+* C_ESTAT:                               Statics.              (line 31)
+* C_FILE:                                Source Files.         (line 61)
+* C_FUN:                                 Procedures.           (line 18)
+* C_GSYM:                                Global Variables.     (line  6)
+* C_LSYM:                                Stack Variables.      (line 11)
+* C_PSYM:                                Parameters.           (line 12)
+* C_RPSYM:                               Register Parameters.  (line 15)
+* C_RSYM:                                Register Variables.   (line  6)
+* C_STSYM:                               Statics.              (line 31)
+* N_BCOMM:                               Common Blocks.        (line 10)
+* N_BINCL:                               Include Files.        (line 17)
+* N_BROWS:                               N_BROWS.              (line  7)
+* N_BSLINE:                              Line Numbers.         (line 12)
+* N_CATCH:                               N_CATCH.              (line  7)
+* N_DEFD:                                N_DEFD.               (line  7)
+* N_DSLINE:                              Line Numbers.         (line 12)
+* N_ECOML:                               Common Blocks.        (line 17)
+* N_ECOMM:                               Common Blocks.        (line 10)
+* N_EHDECL:                              N_EHDECL.             (line  7)
+* N_EINCL:                               Include Files.        (line 17)
+* N_ENTRY:                               Alternate Entry Points.
+                                                               (line  6)
+* N_EXCL:                                Include Files.        (line 17)
+* N_FNAME:                               Procedures.           (line  6)
+* N_FUN, for functions:                  Procedures.           (line  6)
+* N_FUN, for variables:                  Statics.              (line 12)
+* N_GSYM:                                Global Variables.     (line  6)
+* N_GSYM, for functions (Sun acc):       Procedures.           (line  6)
+* N_LBRAC:                               Block Structure.      (line  6)
+* N_LCSYM:                               Statics.              (line 12)
+* N_LENG:                                N_LENG.               (line  7)
+* N_LSYM, for parameter:                 Local Variable Parameters.
+                                                               (line 35)
+* N_LSYM, for stack variables:           Stack Variables.      (line 11)
+* N_LSYM, for types:                     Typedefs.             (line  6)
+* N_M2C:                                 N_M2C.                (line  7)
+* N_MAC_DEFINE:                          Macro define and undefine.
+                                                               (line 11)
+* N_MAC_UNDEF:                           Macro define and undefine.
+                                                               (line 14)
+* N_MAIN:                                Main Program.         (line  6)
+* N_MOD2:                                N_MOD2.               (line  7)
+* N_NBBSS:                               Gould.                (line  9)
+* N_NBDATA:                              Gould.                (line  8)
+* N_NBLCS:                               Gould.                (line 11)
+* N_NBSTS:                               Gould.                (line 10)
+* N_NBTEXT:                              Gould.                (line  7)
+* N_NOMAP:                               N_NOMAP.              (line  7)
+* N_NSYMS:                               N_NSYMS.              (line  7)
+* N_PC:                                  N_PC.                 (line  7)
+* N_PSYM:                                Parameters.           (line 12)
+* N_RBRAC:                               Block Structure.      (line  6)
+* N_ROSYM:                               Statics.              (line 12)
+* N_RSYM:                                Register Variables.   (line  6)
+* N_RSYM, for parameters:                Register Parameters.  (line 15)
+* N_SCOPE:                               N_SCOPE.              (line  7)
+* N_SLINE:                               Line Numbers.         (line  6)
+* N_SO:                                  Source Files.         (line  6)
+* N_SOL:                                 Include Files.        (line 11)
+* N_SSYM:                                N_SSYM.               (line  7)
+* N_STSYM:                               Statics.              (line 12)
+* N_STSYM, for functions (Sun acc):      Procedures.           (line  6)
+
+
+
+Tag Table:
+Node: Top1432
+Node: Overview2479
+Node: Flow3894
+Node: Stabs Format5420
+Node: String Field6982
+Node: C Example12413
+Node: Assembly Code12958
+Node: Program Structure14929
+Node: Main Program15655
+Node: Source Files16216
+Node: Include Files18668
+Node: Line Numbers21333
+Node: Procedures22867
+Node: Nested Procedures28757
+Node: Block Structure29933
+Node: Alternate Entry Points31339
+Node: Constants32072
+Node: Variables35184
+Node: Stack Variables35872
+Node: Global Variables37573
+Node: Register Variables38729
+Node: Common Blocks39551
+Node: Statics40805
+Node: Based Variables43384
+Node: Parameters44769
+Node: Register Parameters46381
+Node: Local Variable Parameters48642
+Node: Reference Parameters51557
+Node: Conformant Arrays52177
+Node: Types52894
+Node: Builtin Types53841
+Node: Traditional Builtin Types54987
+Node: Traditional Integer Types55388
+Node: Traditional Other Types57696
+Node: Builtin Type Descriptors58610
+Node: Negative Type Numbers62110
+Node: Miscellaneous Types68465
+Node: Cross-References70351
+Node: Subranges72026
+Node: Arrays73265
+Node: Strings76490
+Node: Enumerations77552
+Node: Structures79937
+Node: Typedefs82644
+Node: Unions83968
+Node: Function Types85549
+Node: Macro define and undefine87131
+Node: Symbol Tables88708
+Node: Symbol Table Format89160
+Node: Transformations On Symbol Tables90608
+Node: Transformations On Static Variables91962
+Node: Transformations On Global Variables92698
+Node: Stab Section Transformations93941
+Node: Cplusplus95324
+Node: Class Names95907
+Node: Nested Symbols96652
+Node: Basic Cplusplus Types97498
+Node: Simple Classes99058
+Node: Class Instance103352
+Node: Methods104069
+Node: Method Type Descriptor106288
+Node: Member Type Descriptor107488
+Node: Protections108280
+Node: Method Modifiers111370
+Node: Virtual Methods112998
+Node: Inheritance116799
+Node: Virtual Base Classes120495
+Node: Static Members122739
+Node: Stab Types123209
+Node: Non-Stab Symbol Types123833
+Node: Stab Symbol Types125264
+Node: Symbol Descriptors129195
+Node: Type Descriptors131974
+Node: Expanded Reference135186
+Node: N_PC136604
+Node: N_NSYMS136972
+Node: N_NOMAP137213
+Node: N_M2C137519
+Node: N_BROWS137953
+Node: N_DEFD138236
+Node: N_EHDECL138693
+Node: N_MOD2138944
+Node: N_CATCH139182
+Node: N_SSYM139676
+Node: N_SCOPE139961
+Node: Gould140151
+Node: N_LENG141143
+Node: Questions141371
+Node: Stab Sections143015
+Node: Stab Section Basics143625
+Node: ELF Linker Relocation146966
+Node: GNU Free Documentation License150376
+Node: Symbol Types Index175555
+
+End Tag Table
diff --git a/gdb/doc/stabs.texinfo b/gdb/doc/stabs.texinfo
index 8b13789..6dafecf 100644
--- a/gdb/doc/stabs.texinfo
+++ b/gdb/doc/stabs.texinfo
@@ -1 +1,4126 @@
+\input texinfo
+ at setfilename stabs.info
+ at setchapternewpage odd
+ at settitle STABS
 
+ at c @finalout
+
+ at c This is a dir.info fragment to support semi-automated addition of
+ at c manuals to an info tree.
+ at dircategory Software development
+ at direntry
+* Stabs: (stabs).                 The "stabs" debugging information format.   
+ at end direntry
+
+ at copying
+Copyright @copyright{} 1992-1995, 1997-1998, 2000-2007, 2009-2012 Free
+Software Foundation, Inc.
+Contributed by Cygnus Support.  Written by Julia Menapace, Jim Kingdon,
+and David MacKenzie.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the section entitled ``GNU
+Free Documentation License''.
+ at end copying
+
+ at ifnottex
+This document describes the stabs debugging symbol tables.
+
+ at insertcopying
+ at end ifnottex
+
+ at titlepage
+ at title The ``stabs'' debug format
+ at author Julia Menapace, Jim Kingdon, David MacKenzie
+ at author Cygnus Support
+ at page
+ at tex
+\def\$#1${{#1}}  % Kluge: collect RCS revision info without $...$
+\xdef\manvers{\$Revision: 2.130 $}  % For use in headers, footers too
+{\parskip=0pt
+\hfill Cygnus Support\par
+\hfill \manvers\par
+\hfill \TeX{}info \texinfoversion\par
+}
+ at end tex
+
+ at vskip 0pt plus 1filll
+ at insertcopying
+ at end titlepage
+
+ at ifnottex
+ at node Top
+ at top The "stabs" representation of debugging information
+
+This document describes the stabs debugging format.
+
+ at menu
+* Overview::			Overview of stabs
+* Program Structure::		Encoding of the structure of the program
+* Constants::			Constants
+* Variables::
+* Types::			Type definitions
+* Macro define and undefine::	Representation of #define and #undef
+* Symbol Tables::		Symbol information in symbol tables
+* Cplusplus::			Stabs specific to C++
+* Stab Types::			Symbol types in a.out files
+* Symbol Descriptors::		Table of symbol descriptors
+* Type Descriptors::		Table of type descriptors
+* Expanded Reference::		Reference information by stab type
+* Questions::			Questions and anomalies
+* Stab Sections::		In some object file formats, stabs are
+                                in sections.
+* GNU Free Documentation License::  The license for this documentation
+* Symbol Types Index::          Index of symbolic stab symbol type names.
+ at end menu
+ at end ifnottex
+
+ at contents
+
+ at node Overview
+ at chapter Overview of Stabs
+
+ at dfn{Stabs} refers to a format for information that describes a program
+to a debugger.  This format was apparently invented by
+Peter Kessler at
+the University of California at Berkeley, for the @code{pdx} Pascal
+debugger; the format has spread widely since then.
+
+This document is one of the few published sources of documentation on
+stabs.  It is believed to be comprehensive for stabs used by C.  The
+lists of symbol descriptors (@pxref{Symbol Descriptors}) and type
+descriptors (@pxref{Type Descriptors}) are believed to be completely
+comprehensive.  Stabs for COBOL-specific features and for variant
+records (used by Pascal and Modula-2) are poorly documented here.
+
+ at c FIXME: Need to document all OS9000 stuff in GDB; see all references
+ at c to os9k_stabs in stabsread.c.
+
+Other sources of information on stabs are @cite{Dbx and Dbxtool
+Interfaces}, 2nd edition, by Sun, 1988, and @cite{AIX Version 3.2 Files
+Reference}, Fourth Edition, September 1992, "dbx Stabstring Grammar" in
+the a.out section, page 2-31.  This document is believed to incorporate
+the information from those two sources except where it explicitly directs
+you to them for more information.
+
+ at menu
+* Flow::			Overview of debugging information flow
+* Stabs Format::		Overview of stab format
+* String Field::		The string field
+* C Example::			A simple example in C source
+* Assembly Code::		The simple example at the assembly level
+ at end menu
+
+ at node Flow
+ at section Overview of Debugging Information Flow
+
+The GNU C compiler compiles C source in a @file{.c} file into assembly
+language in a @file{.s} file, which the assembler translates into
+a @file{.o} file, which the linker combines with other @file{.o} files and
+libraries to produce an executable file.
+
+With the @samp{-g} option, GCC puts in the @file{.s} file additional
+debugging information, which is slightly transformed by the assembler
+and linker, and carried through into the final executable.  This
+debugging information describes features of the source file like line
+numbers, the types and scopes of variables, and function names,
+parameters, and scopes.
+
+For some object file formats, the debugging information is encapsulated
+in assembler directives known collectively as @dfn{stab} (symbol table)
+directives, which are interspersed with the generated code.  Stabs are
+the native format for debugging information in the a.out and XCOFF
+object file formats.  The GNU tools can also emit stabs in the COFF and
+ECOFF object file formats.
+
+The assembler adds the information from stabs to the symbol information
+it places by default in the symbol table and the string table of the
+ at file{.o} file it is building.  The linker consolidates the @file{.o}
+files into one executable file, with one symbol table and one string
+table.  Debuggers use the symbol and string tables in the executable as
+a source of debugging information about the program.
+
+ at node Stabs Format
+ at section Overview of Stab Format
+
+There are three overall formats for stab assembler directives,
+differentiated by the first word of the stab.  The name of the directive
+describes which combination of four possible data fields follows.  It is
+either @code{.stabs} (string), @code{.stabn} (number), or @code{.stabd}
+(dot).  IBM's XCOFF assembler uses @code{.stabx} (and some other
+directives such as @code{.file} and @code{.bi}) instead of
+ at code{.stabs}, @code{.stabn} or @code{.stabd}.
+
+The overall format of each class of stab is:
+
+ at example
+.stabs "@var{string}", at var{type}, at var{other}, at var{desc}, at var{value}
+.stabn @var{type}, at var{other}, at var{desc}, at var{value}
+.stabd @var{type}, at var{other}, at var{desc}
+.stabx "@var{string}", at var{value}, at var{type}, at var{sdb-type}
+ at end example
+
+ at c what is the correct term for "current file location"?  My AIX
+ at c assembler manual calls it "the value of the current location counter".
+For @code{.stabn} and @code{.stabd}, there is no @var{string} (the
+ at code{n_strx} field is zero; see @ref{Symbol Tables}).  For
+ at code{.stabd}, the @var{value} field is implicit and has the value of
+the current file location.  For @code{.stabx}, the @var{sdb-type} field
+is unused for stabs and can always be set to zero.  The @var{other}
+field is almost always unused and can be set to zero.
+
+The number in the @var{type} field gives some basic information about
+which type of stab this is (or whether it @emph{is} a stab, as opposed
+to an ordinary symbol).  Each valid type number defines a different stab
+type; further, the stab type defines the exact interpretation of, and
+possible values for, any remaining @var{string}, @var{desc}, or
+ at var{value} fields present in the stab.  @xref{Stab Types}, for a list
+in numeric order of the valid @var{type} field values for stab directives.
+
+ at node String Field
+ at section The String Field
+
+For most stabs the string field holds the meat of the
+debugging information.  The flexible nature of this field
+is what makes stabs extensible.  For some stab types the string field
+contains only a name.  For other stab types the contents can be a great
+deal more complex.
+
+The overall format of the string field for most stab types is:
+
+ at example
+"@var{name}:@var{symbol-descriptor} @var{type-information}"
+ at end example
+
+ at var{name} is the name of the symbol represented by the stab; it can
+contain a pair of colons (@pxref{Nested Symbols}).  @var{name} can be
+omitted, which means the stab represents an unnamed object.  For
+example, @samp{:t10=*2} defines type 10 as a pointer to type 2, but does
+not give the type a name.  Omitting the @var{name} field is supported by
+AIX dbx and GDB after about version 4.8, but not other debuggers.  GCC
+sometimes uses a single space as the name instead of omitting the name
+altogether; apparently that is supported by most debuggers.
+
+The @var{symbol-descriptor} following the @samp{:} is an alphabetic
+character that tells more specifically what kind of symbol the stab
+represents. If the @var{symbol-descriptor} is omitted, but type
+information follows, then the stab represents a local variable.  For a
+list of symbol descriptors, see @ref{Symbol Descriptors}.  The @samp{c}
+symbol descriptor is an exception in that it is not followed by type
+information.  @xref{Constants}.
+
+ at var{type-information} is either a @var{type-number}, or
+ at samp{@var{type-number}=}.  A @var{type-number} alone is a type
+reference, referring directly to a type that has already been defined.
+
+The @samp{@var{type-number}=} form is a type definition, where the
+number represents a new type which is about to be defined.  The type
+definition may refer to other types by number, and those type numbers
+may be followed by @samp{=} and nested definitions.  Also, the Lucid
+compiler will repeat @samp{@var{type-number}=} more than once if it
+wants to define several type numbers at once.
+
+In a type definition, if the character that follows the equals sign is
+non-numeric then it is a @var{type-descriptor}, and tells what kind of
+type is about to be defined.  Any other values following the
+ at var{type-descriptor} vary, depending on the @var{type-descriptor}.
+ at xref{Type Descriptors}, for a list of @var{type-descriptor} values.  If
+a number follows the @samp{=} then the number is a @var{type-reference}.
+For a full description of types, @ref{Types}.
+
+A @var{type-number} is often a single number.  The GNU and Sun tools
+additionally permit a @var{type-number} to be a pair
+(@var{file-number}, at var{filetype-number}) (the parentheses appear in the
+string, and serve to distinguish the two cases).  The @var{file-number}
+is 0 for the base source file, 1 for the first included file, 2 for the
+next, and so on.  The @var{filetype-number} is a number starting with
+1 which is incremented for each new type defined in the file.
+(Separating the file number and the type number permits the
+ at code{N_BINCL} optimization to succeed more often; see @ref{Include
+Files}).
+
+There is an AIX extension for type attributes.  Following the @samp{=}
+are any number of type attributes.  Each one starts with @samp{@@} and
+ends with @samp{;}.  Debuggers, including AIX's dbx and GDB 4.10, skip
+any type attributes they do not recognize.  GDB 4.9 and other versions
+of dbx may not do this.  Because of a conflict with C at t{++}
+(@pxref{Cplusplus}), new attributes should not be defined which begin
+with a digit, @samp{(}, or @samp{-}; GDB may be unable to distinguish
+those from the C at t{++} type descriptor @samp{@@}.  The attributes are:
+
+ at table @code
+ at item a at var{boundary}
+ at var{boundary} is an integer specifying the alignment.  I assume it
+applies to all variables of this type.
+
+ at item p at var{integer}
+Pointer class (for checking).  Not sure what this means, or how
+ at var{integer} is interpreted.
+
+ at item P
+Indicate this is a packed type, meaning that structure fields or array
+elements are placed more closely in memory, to save memory at the
+expense of speed.
+
+ at item s at var{size}
+Size in bits of a variable of this type.  This is fully supported by GDB
+4.11 and later.
+
+ at item S
+Indicate that this type is a string instead of an array of characters,
+or a bitstring instead of a set.  It doesn't change the layout of the
+data being represented, but does enable the debugger to know which type
+it is.
+
+ at item V
+Indicate that this type is a vector instead of an array.  The only 
+major difference between vectors and arrays is that vectors are
+passed by value instead of by reference (vector coprocessor extension).
+
+ at end table
+
+All of this can make the string field quite long.  All versions of GDB,
+and some versions of dbx, can handle arbitrarily long strings.  But many
+versions of dbx (or assemblers or linkers, I'm not sure which)
+cretinously limit the strings to about 80 characters, so compilers which
+must work with such systems need to split the @code{.stabs} directive
+into several @code{.stabs} directives.  Each stab duplicates every field
+except the string field.  The string field of every stab except the last
+is marked as continued with a backslash at the end (in the assembly code
+this may be written as a double backslash, depending on the assembler).
+Removing the backslashes and concatenating the string fields of each
+stab produces the original, long string.  Just to be incompatible (or so
+they don't have to worry about what the assembler does with
+backslashes), AIX can use @samp{?} instead of backslash.
+
+ at node C Example
+ at section A Simple Example in C Source
+
+To get the flavor of how stabs describe source information for a C
+program, let's look at the simple program:
+
+ at example
+main()
+@{
+        printf("Hello world");
+@}
+ at end example
+
+When compiled with @samp{-g}, the program above yields the following
+ at file{.s} file.  Line numbers have been added to make it easier to refer
+to parts of the @file{.s} file in the description of the stabs that
+follows.
+
+ at node Assembly Code
+ at section The Simple Example at the Assembly Level
+
+This simple ``hello world'' example demonstrates several of the stab
+types used to describe C language source files.
+
+ at example
+1  gcc2_compiled.:
+2  .stabs "/cygint/s1/users/jcm/play/",100,0,0,Ltext0
+3  .stabs "hello.c",100,0,0,Ltext0
+4  .text
+5  Ltext0:
+6  .stabs "int:t1=r1;-2147483648;2147483647;",128,0,0,0
+7  .stabs "char:t2=r2;0;127;",128,0,0,0
+8  .stabs "long int:t3=r1;-2147483648;2147483647;",128,0,0,0
+9  .stabs "unsigned int:t4=r1;0;-1;",128,0,0,0
+10 .stabs "long unsigned int:t5=r1;0;-1;",128,0,0,0
+11 .stabs "short int:t6=r1;-32768;32767;",128,0,0,0
+12 .stabs "long long int:t7=r1;0;-1;",128,0,0,0
+13 .stabs "short unsigned int:t8=r1;0;65535;",128,0,0,0
+14 .stabs "long long unsigned int:t9=r1;0;-1;",128,0,0,0
+15 .stabs "signed char:t10=r1;-128;127;",128,0,0,0
+16 .stabs "unsigned char:t11=r1;0;255;",128,0,0,0
+17 .stabs "float:t12=r1;4;0;",128,0,0,0
+18 .stabs "double:t13=r1;8;0;",128,0,0,0
+19 .stabs "long double:t14=r1;8;0;",128,0,0,0
+20 .stabs "void:t15=15",128,0,0,0
+21      .align 4
+22 LC0:
+23      .ascii "Hello, world!\12\0"
+24      .align 4
+25      .global _main
+26      .proc 1
+27 _main:
+28 .stabn 68,0,4,LM1
+29 LM1:
+30      !#PROLOGUE# 0
+31      save %sp,-136,%sp
+32      !#PROLOGUE# 1
+33      call ___main,0
+34      nop
+35 .stabn 68,0,5,LM2
+36 LM2:
+37 LBB2:
+38      sethi %hi(LC0),%o1
+39      or %o1,%lo(LC0),%o0
+40      call _printf,0
+41      nop
+42 .stabn 68,0,6,LM3
+43 LM3:
+44 LBE2:
+45 .stabn 68,0,6,LM4
+46 LM4:
+47 L1:
+48      ret
+49      restore
+50 .stabs "main:F1",36,0,0,_main
+51 .stabn 192,0,0,LBB2
+52 .stabn 224,0,0,LBE2
+ at end example
+
+ at node Program Structure
+ at chapter Encoding the Structure of the Program
+
+The elements of the program structure that stabs encode include the name
+of the main function, the names of the source and include files, the
+line numbers, procedure names and types, and the beginnings and ends of
+blocks of code.
+
+ at menu
+* Main Program::		Indicate what the main program is
+* Source Files::		The path and name of the source file
+* Include Files::               Names of include files
+* Line Numbers::
+* Procedures::
+* Nested Procedures::
+* Block Structure::
+* Alternate Entry Points::      Entering procedures except at the beginning.
+ at end menu
+
+ at node Main Program
+ at section Main Program
+
+ at findex N_MAIN
+Most languages allow the main program to have any name.  The
+ at code{N_MAIN} stab type tells the debugger the name that is used in this
+program.  Only the string field is significant; it is the name of
+a function which is the main program.  Most C compilers do not use this
+stab (they expect the debugger to assume that the name is @code{main}),
+but some C compilers emit an @code{N_MAIN} stab for the @code{main}
+function.  I'm not sure how XCOFF handles this.
+
+ at node Source Files
+ at section Paths and Names of the Source Files
+
+ at findex N_SO
+Before any other stabs occur, there must be a stab specifying the source
+file.  This information is contained in a symbol of stab type
+ at code{N_SO}; the string field contains the name of the file.  The
+value of the symbol is the start address of the portion of the
+text section corresponding to that file.
+
+Some compilers use the desc field to indicate the language of the
+source file.  Sun's compilers started this usage, and the first
+constants are derived from their documentation.  Languages added
+by gcc/gdb start at 0x32 to avoid conflict with languages Sun may
+add in the future.  A desc field with a value 0 indicates that no
+language has been specified via this mechanism.
+
+ at table @asis
+ at item @code{N_SO_AS} (0x1)
+Assembly language
+ at item @code{N_SO_C}  (0x2)
+K&R traditional C
+ at item @code{N_SO_ANSI_C} (0x3)
+ANSI C
+ at item @code{N_SO_CC}  (0x4)
+C++
+ at item @code{N_SO_FORTRAN} (0x5)
+Fortran
+ at item @code{N_SO_PASCAL} (0x6)
+Pascal
+ at item @code{N_SO_FORTRAN90} (0x7)
+Fortran90
+ at item @code{N_SO_OBJC} (0x32)
+Objective-C
+ at item @code{N_SO_OBJCPLUS} (0x33)
+Objective-C++
+ at end table
+
+Some compilers (for example, GCC2 and SunOS4 @file{/bin/cc}) also
+include the directory in which the source was compiled, in a second
+ at code{N_SO} symbol preceding the one containing the file name.  This
+symbol can be distinguished by the fact that it ends in a slash.  Code
+from the @code{cfront} C at t{++} compiler can have additional @code{N_SO} symbols for
+nonexistent source files after the @code{N_SO} for the real source file;
+these are believed to contain no useful information.
+
+For example:
+
+ at example
+.stabs "/cygint/s1/users/jcm/play/",100,0,0,Ltext0     # @r{100 is N_SO}
+.stabs "hello.c",100,0,0,Ltext0
+        .text
+Ltext0:
+ at end example
+
+ at findex C_FILE
+Instead of @code{N_SO} symbols, XCOFF uses a @code{.file} assembler
+directive which assembles to a @code{C_FILE} symbol; explaining this in
+detail is outside the scope of this document.
+
+ at c FIXME: Exactly when should the empty N_SO be used?  Why?
+If it is useful to indicate the end of a source file, this is done with
+an @code{N_SO} symbol with an empty string for the name.  The value is
+the address of the end of the text section for the file.  For some
+systems, there is no indication of the end of a source file, and you
+just need to figure it ended when you see an @code{N_SO} for a different
+source file, or a symbol ending in @code{.o} (which at least some
+linkers insert to mark the start of a new @code{.o} file).
+
+ at node Include Files
+ at section Names of Include Files
+
+There are several schemes for dealing with include files: the
+traditional @code{N_SOL} approach, Sun's @code{N_BINCL} approach, and the
+XCOFF @code{C_BINCL} approach (which despite the similar name has little in
+common with @code{N_BINCL}).
+
+ at findex N_SOL
+An @code{N_SOL} symbol specifies which include file subsequent symbols
+refer to.  The string field is the name of the file and the value is the
+text address corresponding to the end of the previous include file and
+the start of this one.  To specify the main source file again, use an
+ at code{N_SOL} symbol with the name of the main source file.
+
+ at findex N_BINCL
+ at findex N_EINCL
+ at findex N_EXCL
+The @code{N_BINCL} approach works as follows.  An @code{N_BINCL} symbol
+specifies the start of an include file.  In an object file, only the
+string is significant; the linker puts data into some of the other
+fields.  The end of the include file is marked by an @code{N_EINCL}
+symbol (which has no string field).  In an object file, there is no
+significant data in the @code{N_EINCL} symbol.  @code{N_BINCL} and
+ at code{N_EINCL} can be nested.
+
+If the linker detects that two source files have identical stabs between
+an @code{N_BINCL} and @code{N_EINCL} pair (as will generally be the case
+for a header file), then it only puts out the stabs once.  Each
+additional occurrence is replaced by an @code{N_EXCL} symbol.  I believe
+the GNU linker and the Sun (both SunOS4 and Solaris) linker are the only
+ones which supports this feature.
+
+A linker which supports this feature will set the value of a
+ at code{N_BINCL} symbol to the total of all the characters in the stabs
+strings included in the header file, omitting any file numbers.  The
+value of an @code{N_EXCL} symbol is the same as the value of the
+ at code{N_BINCL} symbol it replaces.  This information can be used to
+match up @code{N_EXCL} and @code{N_BINCL} symbols which have the same
+filename.  The @code{N_EINCL} value, and the values of the other and
+description fields for all three, appear to always be zero.
+
+ at findex C_BINCL
+ at findex C_EINCL
+For the start of an include file in XCOFF, use the @file{.bi} assembler
+directive, which generates a @code{C_BINCL} symbol.  A @file{.ei}
+directive, which generates a @code{C_EINCL} symbol, denotes the end of
+the include file.  Both directives are followed by the name of the
+source file in quotes, which becomes the string for the symbol.
+The value of each symbol, produced automatically by the assembler
+and linker, is the offset into the executable of the beginning
+(inclusive, as you'd expect) or end (inclusive, as you would not expect)
+of the portion of the COFF line table that corresponds to this include
+file.  @code{C_BINCL} and @code{C_EINCL} do not nest.
+
+ at node Line Numbers
+ at section Line Numbers
+
+ at findex N_SLINE
+An @code{N_SLINE} symbol represents the start of a source line.  The
+desc field contains the line number and the value contains the code
+address for the start of that source line.  On most machines the address
+is absolute; for stabs in sections (@pxref{Stab Sections}), it is
+relative to the function in which the @code{N_SLINE} symbol occurs.
+
+ at findex N_DSLINE
+ at findex N_BSLINE
+GNU documents @code{N_DSLINE} and @code{N_BSLINE} symbols for line
+numbers in the data or bss segments, respectively.  They are identical
+to @code{N_SLINE} but are relocated differently by the linker.  They
+were intended to be used to describe the source location of a variable
+declaration, but I believe that GCC2 actually puts the line number in
+the desc field of the stab for the variable itself.  GDB has been
+ignoring these symbols (unless they contain a string field) since
+at least GDB 3.5.
+
+For single source lines that generate discontiguous code, such as flow
+of control statements, there may be more than one line number entry for
+the same source line.  In this case there is a line number entry at the
+start of each code range, each with the same line number.
+
+XCOFF does not use stabs for line numbers.  Instead, it uses COFF line
+numbers (which are outside the scope of this document).  Standard COFF
+line numbers cannot deal with include files, but in XCOFF this is fixed
+with the @code{C_BINCL} method of marking include files (@pxref{Include
+Files}).
+
+ at node Procedures
+ at section Procedures
+
+ at findex N_FUN, for functions
+ at findex N_FNAME
+ at findex N_STSYM, for functions (Sun acc)
+ at findex N_GSYM, for functions (Sun acc)
+All of the following stabs normally use the @code{N_FUN} symbol type.
+However, Sun's @code{acc} compiler on SunOS4 uses @code{N_GSYM} and
+ at code{N_STSYM}, which means that the value of the stab for the function
+is useless and the debugger must get the address of the function from
+the non-stab symbols instead.  On systems where non-stab symbols have
+leading underscores, the stabs will lack underscores and the debugger
+needs to know about the leading underscore to match up the stab and the
+non-stab symbol.  BSD Fortran is said to use @code{N_FNAME} with the
+same restriction; the value of the symbol is not useful (I'm not sure it
+really does use this, because GDB doesn't handle this and no one has
+complained).
+
+ at findex C_FUN
+A function is represented by an @samp{F} symbol descriptor for a global
+(extern) function, and @samp{f} for a static (local) function.  For
+a.out, the value of the symbol is the address of the start of the
+function; it is already relocated.  For stabs in ELF, the SunPRO
+compiler version 2.0.1 and GCC put out an address which gets relocated
+by the linker.  In a future release SunPRO is planning to put out zero,
+in which case the address can be found from the ELF (non-stab) symbol.
+Because looking things up in the ELF symbols would probably be slow, I'm
+not sure how to find which symbol of that name is the right one, and
+this doesn't provide any way to deal with nested functions, it would
+probably be better to make the value of the stab an address relative to
+the start of the file, or just absolute.  See @ref{ELF Linker
+Relocation} for more information on linker relocation of stabs in ELF
+files.  For XCOFF, the stab uses the @code{C_FUN} storage class and the
+value of the stab is meaningless; the address of the function can be
+found from the csect symbol (XTY_LD/XMC_PR).
+
+The type information of the stab represents the return type of the
+function; thus @samp{foo:f5} means that foo is a function returning type
+5.  There is no need to try to get the line number of the start of the
+function from the stab for the function; it is in the next
+ at code{N_SLINE} symbol.
+
+ at c FIXME: verify whether the "I suspect" below is true or not.
+Some compilers (such as Sun's Solaris compiler) support an extension for
+specifying the types of the arguments.  I suspect this extension is not
+used for old (non-prototyped) function definitions in C.  If the
+extension is in use, the type information of the stab for the function
+is followed by type information for each argument, with each argument
+preceded by @samp{;}.  An argument type of 0 means that additional
+arguments are being passed, whose types and number may vary (@samp{...}
+in ANSI C).  GDB has tolerated this extension (parsed the syntax, if not
+necessarily used the information) since at least version 4.8; I don't
+know whether all versions of dbx tolerate it.  The argument types given
+here are not redundant with the symbols for the formal parameters
+(@pxref{Parameters}); they are the types of the arguments as they are
+passed, before any conversions might take place.  For example, if a C
+function which is declared without a prototype takes a @code{float}
+argument, the value is passed as a @code{double} but then converted to a
+ at code{float}.  Debuggers need to use the types given in the arguments
+when printing values, but when calling the function they need to use the
+types given in the symbol defining the function.
+
+If the return type and types of arguments of a function which is defined
+in another source file are specified (i.e., a function prototype in ANSI
+C), traditionally compilers emit no stab; the only way for the debugger
+to find the information is if the source file where the function is
+defined was also compiled with debugging symbols.  As an extension the
+Solaris compiler uses symbol descriptor @samp{P} followed by the return
+type of the function, followed by the arguments, each preceded by
+ at samp{;}, as in a stab with symbol descriptor @samp{f} or @samp{F}.
+This use of symbol descriptor @samp{P} can be distinguished from its use
+for register parameters (@pxref{Register Parameters}) by the fact that it has
+symbol type @code{N_FUN}.
+
+The AIX documentation also defines symbol descriptor @samp{J} as an
+internal function.  I assume this means a function nested within another
+function.  It also says symbol descriptor @samp{m} is a module in
+Modula-2 or extended Pascal.
+
+Procedures (functions which do not return values) are represented as
+functions returning the @code{void} type in C.  I don't see why this couldn't
+be used for all languages (inventing a @code{void} type for this purpose if
+necessary), but the AIX documentation defines @samp{I}, @samp{P}, and
+ at samp{Q} for internal, global, and static procedures, respectively.
+These symbol descriptors are unusual in that they are not followed by
+type information.
+
+The following example shows a stab for a function @code{main} which
+returns type number @code{1}.  The @code{_main} specified for the value
+is a reference to an assembler label which is used to fill in the start
+address of the function.
+
+ at example
+.stabs "main:F1",36,0,0,_main      # @r{36 is N_FUN}
+ at end example
+
+The stab representing a procedure is located immediately following the
+code of the procedure.  This stab is in turn directly followed by a
+group of other stabs describing elements of the procedure.  These other
+stabs describe the procedure's parameters, its block local variables, and
+its block structure.
+
+If functions can appear in different sections, then the debugger may not
+be able to find the end of a function.  Recent versions of GCC will mark
+the end of a function with an @code{N_FUN} symbol with an empty string
+for the name.  The value is the address of the end of the current
+function.  Without such a symbol, there is no indication of the address
+of the end of a function, and you must assume that it ended at the
+starting address of the next function or at the end of the text section
+for the program.
+
+ at node Nested Procedures
+ at section Nested Procedures
+
+For any of the symbol descriptors representing procedures, after the
+symbol descriptor and the type information is optionally a scope
+specifier.  This consists of a comma, the name of the procedure, another
+comma, and the name of the enclosing procedure.  The first name is local
+to the scope specified, and seems to be redundant with the name of the
+symbol (before the @samp{:}).  This feature is used by GCC, and
+presumably Pascal, Modula-2, etc., compilers, for nested functions.
+
+If procedures are nested more than one level deep, only the immediately
+containing scope is specified.  For example, this code:
+
+ at example
+int
+foo (int x)
+@{
+  int bar (int y)
+    @{
+      int baz (int z)
+        @{
+          return x + y + z;
+        @}
+      return baz (x + 2 * y);
+    @}
+  return x + bar (3 * x);
+@}
+ at end example
+
+ at noindent
+produces the stabs:
+
+ at example
+.stabs "baz:f1,baz,bar",36,0,0,_baz.15         # @r{36 is N_FUN}
+.stabs "bar:f1,bar,foo",36,0,0,_bar.12
+.stabs "foo:F1",36,0,0,_foo
+ at end example
+
+ at node Block Structure
+ at section Block Structure
+
+ at findex N_LBRAC
+ at findex N_RBRAC
+ at c For GCC 2.5.8 or so stabs-in-coff, these are absolute instead of
+ at c function relative (as documented below).  But GDB has never been able
+ at c to deal with that (it had wanted them to be relative to the file, but
+ at c I just fixed that (between GDB 4.12 and 4.13)), so it is function
+ at c relative just like ELF and SOM and the below documentation.
+The program's block structure is represented by the @code{N_LBRAC} (left
+brace) and the @code{N_RBRAC} (right brace) stab types.  The variables
+defined inside a block precede the @code{N_LBRAC} symbol for most
+compilers, including GCC.  Other compilers, such as the Convex, Acorn
+RISC machine, and Sun @code{acc} compilers, put the variables after the
+ at code{N_LBRAC} symbol.  The values of the @code{N_LBRAC} and
+ at code{N_RBRAC} symbols are the start and end addresses of the code of
+the block, respectively.  For most machines, they are relative to the
+starting address of this source file.  For the Gould NP1, they are
+absolute.  For stabs in sections (@pxref{Stab Sections}), they are
+relative to the function in which they occur.
+
+The @code{N_LBRAC} and @code{N_RBRAC} stabs that describe the block
+scope of a procedure are located after the @code{N_FUN} stab that
+represents the procedure itself.
+
+Sun documents the desc field of @code{N_LBRAC} and
+ at code{N_RBRAC} symbols as containing the nesting level of the block.
+However, dbx seems to not care, and GCC always sets desc to
+zero.
+
+ at findex .bb
+ at findex .be
+ at findex C_BLOCK
+For XCOFF, block scope is indicated with @code{C_BLOCK} symbols.  If the
+name of the symbol is @samp{.bb}, then it is the beginning of the block;
+if the name of the symbol is @samp{.be}; it is the end of the block.
+
+ at node Alternate Entry Points
+ at section Alternate Entry Points
+
+ at findex N_ENTRY
+ at findex C_ENTRY
+Some languages, like Fortran, have the ability to enter procedures at
+some place other than the beginning.  One can declare an alternate entry
+point.  The @code{N_ENTRY} stab is for this; however, the Sun FORTRAN
+compiler doesn't use it.  According to AIX documentation, only the name
+of a @code{C_ENTRY} stab is significant; the address of the alternate
+entry point comes from the corresponding external symbol.  A previous
+revision of this document said that the value of an @code{N_ENTRY} stab
+was the address of the alternate entry point, but I don't know the
+source for that information.
+
+ at node Constants
+ at chapter Constants
+
+The @samp{c} symbol descriptor indicates that this stab represents a
+constant.  This symbol descriptor is an exception to the general rule
+that symbol descriptors are followed by type information.  Instead, it
+is followed by @samp{=} and one of the following:
+
+ at table @code
+ at item b @var{value}
+Boolean constant.  @var{value} is a numeric value; I assume it is 0 for
+false or 1 for true.
+
+ at item c @var{value}
+Character constant.  @var{value} is the numeric value of the constant.
+
+ at item e @var{type-information} , @var{value}
+Constant whose value can be represented as integral.
+ at var{type-information} is the type of the constant, as it would appear
+after a symbol descriptor (@pxref{String Field}).  @var{value} is the
+numeric value of the constant.  GDB 4.9 does not actually get the right
+value if @var{value} does not fit in a host @code{int}, but it does not
+do anything violent, and future debuggers could be extended to accept
+integers of any size (whether unsigned or not).  This constant type is
+usually documented as being only for enumeration constants, but GDB has
+never imposed that restriction; I don't know about other debuggers.
+
+ at item i @var{value}
+Integer constant.  @var{value} is the numeric value.  The type is some
+sort of generic integer type (for GDB, a host @code{int}); to specify
+the type explicitly, use @samp{e} instead.
+
+ at item r @var{value}
+Real constant.  @var{value} is the real value, which can be @samp{INF}
+(optionally preceded by a sign) for infinity, @samp{QNAN} for a quiet
+NaN (not-a-number), or @samp{SNAN} for a signalling NaN.  If it is a
+normal number the format is that accepted by the C library function
+ at code{atof}.
+
+ at item s @var{string}
+String constant.  @var{string} is a string enclosed in either @samp{'}
+(in which case @samp{'} characters within the string are represented as
+ at samp{\'} or @samp{"} (in which case @samp{"} characters within the
+string are represented as @samp{\"}).
+
+ at item S @var{type-information} , @var{elements} , @var{bits} , @var{pattern}
+Set constant.  @var{type-information} is the type of the constant, as it
+would appear after a symbol descriptor (@pxref{String Field}).
+ at var{elements} is the number of elements in the set (does this means
+how many bits of @var{pattern} are actually used, which would be
+redundant with the type, or perhaps the number of bits set in
+ at var{pattern}?  I don't get it), @var{bits} is the number of bits in the
+constant (meaning it specifies the length of @var{pattern}, I think),
+and @var{pattern} is a hexadecimal representation of the set.  AIX
+documentation refers to a limit of 32 bytes, but I see no reason why
+this limit should exist.  This form could probably be used for arbitrary
+constants, not just sets; the only catch is that @var{pattern} should be
+understood to be target, not host, byte order and format.
+ at end table
+
+The boolean, character, string, and set constants are not supported by
+GDB 4.9, but it ignores them.  GDB 4.8 and earlier gave an error
+message and refused to read symbols from the file containing the
+constants.
+
+The above information is followed by @samp{;}.
+
+ at node Variables
+ at chapter Variables
+
+Different types of stabs describe the various ways that variables can be
+allocated: on the stack, globally, in registers, in common blocks,
+statically, or as arguments to a function.
+
+ at menu
+* Stack Variables::		Variables allocated on the stack.
+* Global Variables::		Variables used by more than one source file.
+* Register Variables::		Variables in registers.
+* Common Blocks::		Variables statically allocated together.
+* Statics::			Variables local to one source file.
+* Based Variables::		Fortran pointer based variables.
+* Parameters::			Variables for arguments to functions.
+ at end menu
+
+ at node Stack Variables
+ at section Automatic Variables Allocated on the Stack
+
+If a variable's scope is local to a function and its lifetime is only as
+long as that function executes (C calls such variables
+ at dfn{automatic}), it can be allocated in a register (@pxref{Register
+Variables}) or on the stack.
+
+ at findex N_LSYM, for stack variables
+ at findex C_LSYM
+Each variable allocated on the stack has a stab with the symbol
+descriptor omitted.  Since type information should begin with a digit,
+ at samp{-}, or @samp{(}, only those characters precluded from being used
+for symbol descriptors.  However, the Acorn RISC machine (ARM) is said
+to get this wrong: it puts out a mere type definition here, without the
+preceding @samp{@var{type-number}=}.  This is a bad idea; there is no
+guarantee that type descriptors are distinct from symbol descriptors.
+Stabs for stack variables use the @code{N_LSYM} stab type, or
+ at code{C_LSYM} for XCOFF.
+
+The value of the stab is the offset of the variable within the
+local variables.  On most machines this is an offset from the frame
+pointer and is negative.  The location of the stab specifies which block
+it is defined in; see @ref{Block Structure}.
+
+For example, the following C code:
+
+ at example
+int
+main ()
+@{
+  int x;
+@}
+ at end example
+
+produces the following stabs:
+
+ at example
+.stabs "main:F1",36,0,0,_main   # @r{36 is N_FUN}
+.stabs "x:1",128,0,0,-12        # @r{128 is N_LSYM}
+.stabn 192,0,0,LBB2             # @r{192 is N_LBRAC}
+.stabn 224,0,0,LBE2             # @r{224 is N_RBRAC}
+ at end example
+
+See @ref{Procedures} for more information on the @code{N_FUN} stab, and
+ at ref{Block Structure} for more information on the @code{N_LBRAC} and
+ at code{N_RBRAC} stabs.
+
+ at node Global Variables
+ at section Global Variables
+
+ at findex N_GSYM
+ at findex C_GSYM
+ at c FIXME: verify for sure that it really is C_GSYM on XCOFF
+A variable whose scope is not specific to just one source file is
+represented by the @samp{G} symbol descriptor.  These stabs use the
+ at code{N_GSYM} stab type (C_GSYM for XCOFF).  The type information for
+the stab (@pxref{String Field}) gives the type of the variable.
+
+For example, the following source code:
+
+ at example
+char g_foo = 'c';
+ at end example
+
+ at noindent
+yields the following assembly code:
+
+ at example
+.stabs "g_foo:G2",32,0,0,0     # @r{32 is N_GSYM}
+     .global _g_foo
+     .data
+_g_foo:
+     .byte 99
+ at end example
+
+The address of the variable represented by the @code{N_GSYM} is not
+contained in the @code{N_GSYM} stab.  The debugger gets this information
+from the external symbol for the global variable.  In the example above,
+the @code{.global _g_foo} and @code{_g_foo:} lines tell the assembler to
+produce an external symbol.
+
+Some compilers, like GCC, output @code{N_GSYM} stabs only once, where
+the variable is defined.  Other compilers, like SunOS4 /bin/cc, output a
+ at code{N_GSYM} stab for each compilation unit which references the
+variable.
+
+ at node Register Variables
+ at section Register Variables
+
+ at findex N_RSYM
+ at findex C_RSYM
+ at c According to an old version of this manual, AIX uses C_RPSYM instead
+ at c of C_RSYM.  I am skeptical; this should be verified.
+Register variables have their own stab type, @code{N_RSYM}
+(@code{C_RSYM} for XCOFF), and their own symbol descriptor, @samp{r}.
+The stab's value is the number of the register where the variable data
+will be stored.
+ at c .stabs "name:type",N_RSYM,0,RegSize,RegNumber (Sun doc)
+
+AIX defines a separate symbol descriptor @samp{d} for floating point
+registers.  This seems unnecessary; why not just just give floating
+point registers different register numbers?  I have not verified whether
+the compiler actually uses @samp{d}.
+
+If the register is explicitly allocated to a global variable, but not
+initialized, as in:
+
+ at example
+register int g_bar asm ("%g5");
+ at end example
+
+ at noindent
+then the stab may be emitted at the end of the object file, with
+the other bss symbols.
+
+ at node Common Blocks
+ at section Common Blocks
+
+A common block is a statically allocated section of memory which can be
+referred to by several source files.  It may contain several variables.
+I believe Fortran is the only language with this feature.
+
+ at findex N_BCOMM
+ at findex N_ECOMM
+ at findex C_BCOMM
+ at findex C_ECOMM
+A @code{N_BCOMM} stab begins a common block and an @code{N_ECOMM} stab
+ends it.  The only field that is significant in these two stabs is the
+string, which names a normal (non-debugging) symbol that gives the
+address of the common block.  According to IBM documentation, only the
+ at code{N_BCOMM} has the name of the common block (even though their
+compiler actually puts it both places).
+
+ at findex N_ECOML
+ at findex C_ECOML
+The stabs for the members of the common block are between the
+ at code{N_BCOMM} and the @code{N_ECOMM}; the value of each stab is the
+offset within the common block of that variable.  IBM uses the
+ at code{C_ECOML} stab type, and there is a corresponding @code{N_ECOML}
+stab type, but Sun's Fortran compiler uses @code{N_GSYM} instead.  The
+variables within a common block use the @samp{V} symbol descriptor (I
+believe this is true of all Fortran variables).  Other stabs (at least
+type declarations using @code{C_DECL}) can also be between the
+ at code{N_BCOMM} and the @code{N_ECOMM}.
+
+ at node Statics
+ at section Static Variables
+
+Initialized static variables are represented by the @samp{S} and
+ at samp{V} symbol descriptors.  @samp{S} means file scope static, and
+ at samp{V} means procedure scope static.  One exception: in XCOFF, IBM's
+xlc compiler always uses @samp{V}, and whether it is file scope or not
+is distinguished by whether the stab is located within a function.
+
+ at c This is probably not worth mentioning; it is only true on the sparc
+ at c for `double' variables which although declared const are actually in
+ at c the data segment (the text segment can't guarantee 8 byte alignment).
+ at c (although GCC
+ at c 2.4.5 has a bug in that it uses @code{N_FUN}, so neither dbx nor GDB can
+ at c find the variables)
+ at findex N_STSYM
+ at findex N_LCSYM
+ at findex N_FUN, for variables
+ at findex N_ROSYM
+In a.out files, @code{N_STSYM} means the data section, @code{N_FUN}
+means the text section, and @code{N_LCSYM} means the bss section.  For
+those systems with a read-only data section separate from the text
+section (Solaris), @code{N_ROSYM} means the read-only data section.
+
+For example, the source lines:
+
+ at example
+static const int var_const = 5;
+static int var_init = 2;
+static int var_noinit;
+ at end example
+
+ at noindent
+yield the following stabs:
+
+ at example
+.stabs "var_const:S1",36,0,0,_var_const      # @r{36 is N_FUN}
+ at dots{}
+.stabs "var_init:S1",38,0,0,_var_init        # @r{38 is N_STSYM}
+ at dots{}
+.stabs "var_noinit:S1",40,0,0,_var_noinit    # @r{40 is N_LCSYM}
+ at end example
+
+ at findex C_STSYM
+ at findex C_BSTAT
+ at findex C_ESTAT
+In XCOFF files, the stab type need not indicate the section;
+ at code{C_STSYM} can be used for all statics.  Also, each static variable
+is enclosed in a static block.  A @code{C_BSTAT} (emitted with a
+ at samp{.bs} assembler directive) symbol begins the static block; its
+value is the symbol number of the csect symbol whose value is the
+address of the static block, its section is the section of the variables
+in that static block, and its name is @samp{.bs}.  A @code{C_ESTAT}
+(emitted with a @samp{.es} assembler directive) symbol ends the static
+block; its name is @samp{.es} and its value and section are ignored.
+
+In ECOFF files, the storage class is used to specify the section, so the
+stab type need not indicate the section.
+
+In ELF files, for the SunPRO compiler version 2.0.1, symbol descriptor
+ at samp{S} means that the address is absolute (the linker relocates it)
+and symbol descriptor @samp{V} means that the address is relative to the
+start of the relevant section for that compilation unit.  SunPRO has
+plans to have the linker stop relocating stabs; I suspect that their the
+debugger gets the address from the corresponding ELF (not stab) symbol.
+I'm not sure how to find which symbol of that name is the right one.
+The clean way to do all this would be to have the value of a symbol
+descriptor @samp{S} symbol be an offset relative to the start of the
+file, just like everything else, but that introduces obvious
+compatibility problems.  For more information on linker stab relocation,
+ at xref{ELF Linker Relocation}.
+
+ at node Based Variables
+ at section Fortran Based Variables
+
+Fortran (at least, the Sun and SGI dialects of FORTRAN-77) has a feature
+which allows allocating arrays with @code{malloc}, but which avoids
+blurring the line between arrays and pointers the way that C does.  In
+stabs such a variable uses the @samp{b} symbol descriptor.
+
+For example, the Fortran declarations
+
+ at example
+real foo, foo10(10), foo10_5(10,5)
+pointer (foop, foo)
+pointer (foo10p, foo10)
+pointer (foo105p, foo10_5)
+ at end example
+
+produce the stabs
+
+ at example
+foo:b6
+foo10:bar3;1;10;6
+foo10_5:bar3;1;5;ar3;1;10;6
+ at end example
+
+In this example, @code{real} is type 6 and type 3 is an integral type
+which is the type of the subscripts of the array (probably
+ at code{integer}).
+
+The @samp{b} symbol descriptor is like @samp{V} in that it denotes a
+statically allocated symbol whose scope is local to a function; see
+ at xref{Statics}.  The value of the symbol, instead of being the address
+of the variable itself, is the address of a pointer to that variable.
+So in the above example, the value of the @code{foo} stab is the address
+of a pointer to a real, the value of the @code{foo10} stab is the
+address of a pointer to a 10-element array of reals, and the value of
+the @code{foo10_5} stab is the address of a pointer to a 5-element array
+of 10-element arrays of reals.
+
+ at node Parameters
+ at section Parameters
+
+Formal parameters to a function are represented by a stab (or sometimes
+two; see below) for each parameter.  The stabs are in the order in which
+the debugger should print the parameters (i.e., the order in which the
+parameters are declared in the source file).  The exact form of the stab
+depends on how the parameter is being passed.
+
+ at findex N_PSYM
+ at findex C_PSYM
+Parameters passed on the stack use the symbol descriptor @samp{p} and
+the @code{N_PSYM} symbol type (or @code{C_PSYM} for XCOFF).  The value
+of the symbol is an offset used to locate the parameter on the stack;
+its exact meaning is machine-dependent, but on most machines it is an
+offset from the frame pointer.
+
+As a simple example, the code:
+
+ at example
+main (argc, argv)
+     int argc;
+     char **argv;
+ at end example
+
+produces the stabs:
+
+ at example
+.stabs "main:F1",36,0,0,_main                 # @r{36 is N_FUN}
+.stabs "argc:p1",160,0,0,68                   # @r{160 is N_PSYM}
+.stabs "argv:p20=*21=*2",160,0,0,72
+ at end example
+
+The type definition of @code{argv} is interesting because it contains
+several type definitions.  Type 21 is pointer to type 2 (char) and
+ at code{argv} (type 20) is pointer to type 21.
+
+ at c FIXME: figure out what these mean and describe them coherently.
+The following symbol descriptors are also said to go with @code{N_PSYM}.
+The value of the symbol is said to be an offset from the argument
+pointer (I'm not sure whether this is true or not).
+
+ at example
+pP (<<??>>)
+pF Fortran function parameter
+X  (function result variable)
+ at end example
+
+ at menu
+* Register Parameters::
+* Local Variable Parameters::
+* Reference Parameters::
+* Conformant Arrays::
+ at end menu
+
+ at node Register Parameters
+ at subsection Passing Parameters in Registers
+
+If the parameter is passed in a register, then traditionally there are
+two symbols for each argument:
+
+ at example
+.stabs "arg:p1" . . .       ; N_PSYM
+.stabs "arg:r1" . . .       ; N_RSYM
+ at end example
+
+Debuggers use the second one to find the value, and the first one to
+know that it is an argument.
+
+ at findex C_RPSYM
+ at findex N_RSYM, for parameters
+Because that approach is kind of ugly, some compilers use symbol
+descriptor @samp{P} or @samp{R} to indicate an argument which is in a
+register.  Symbol type @code{C_RPSYM} is used in XCOFF and @code{N_RSYM}
+is used otherwise.  The symbol's value is the register number.  @samp{P}
+and @samp{R} mean the same thing; the difference is that @samp{P} is a
+GNU invention and @samp{R} is an IBM (XCOFF) invention.  As of version
+4.9, GDB should handle either one.
+
+There is at least one case where GCC uses a @samp{p} and @samp{r} pair
+rather than @samp{P}; this is where the argument is passed in the
+argument list and then loaded into a register.
+
+According to the AIX documentation, symbol descriptor @samp{D} is for a
+parameter passed in a floating point register.  This seems
+unnecessary---why not just use @samp{R} with a register number which
+indicates that it's a floating point register?  I haven't verified
+whether the system actually does what the documentation indicates.
+
+ at c FIXME: On the hppa this is for any type > 8 bytes, I think, and not
+ at c for small structures (investigate).
+On the sparc and hppa, for a @samp{P} symbol whose type is a structure
+or union, the register contains the address of the structure.  On the
+sparc, this is also true of a @samp{p} and @samp{r} pair (using Sun
+ at code{cc}) or a @samp{p} symbol.  However, if a (small) structure is
+really in a register, @samp{r} is used.  And, to top it all off, on the
+hppa it might be a structure which was passed on the stack and loaded
+into a register and for which there is a @samp{p} and @samp{r} pair!  I
+believe that symbol descriptor @samp{i} is supposed to deal with this
+case (it is said to mean "value parameter by reference, indirect
+access"; I don't know the source for this information), but I don't know
+details or what compilers or debuggers use it, if any (not GDB or GCC).
+It is not clear to me whether this case needs to be dealt with
+differently than parameters passed by reference (@pxref{Reference Parameters}).
+
+ at node Local Variable Parameters
+ at subsection Storing Parameters as Local Variables
+
+There is a case similar to an argument in a register, which is an
+argument that is actually stored as a local variable.  Sometimes this
+happens when the argument was passed in a register and then the compiler
+stores it as a local variable.  If possible, the compiler should claim
+that it's in a register, but this isn't always done.
+
+If a parameter is passed as one type and converted to a smaller type by
+the prologue (for example, the parameter is declared as a @code{float},
+but the calling conventions specify that it is passed as a
+ at code{double}), then GCC2 (sometimes) uses a pair of symbols.  The first
+symbol uses symbol descriptor @samp{p} and the type which is passed.
+The second symbol has the type and location which the parameter actually
+has after the prologue.  For example, suppose the following C code
+appears with no prototypes involved:
+
+ at example
+void
+subr (f)
+     float f;
+@{
+ at end example
+
+if @code{f} is passed as a double at stack offset 8, and the prologue
+converts it to a float in register number 0, then the stabs look like:
+
+ at example
+.stabs "f:p13",160,0,3,8   # @r{160 is @code{N_PSYM}, here 13 is @code{double}}
+.stabs "f:r12",64,0,3,0    # @r{64 is @code{N_RSYM}, here 12 is @code{float}}
+ at end example
+
+In both stabs 3 is the line number where @code{f} is declared
+(@pxref{Line Numbers}).
+
+ at findex N_LSYM, for parameter
+GCC, at least on the 960, has another solution to the same problem.  It
+uses a single @samp{p} symbol descriptor for an argument which is stored
+as a local variable but uses @code{N_LSYM} instead of @code{N_PSYM}.  In
+this case, the value of the symbol is an offset relative to the local
+variables for that function, not relative to the arguments; on some
+machines those are the same thing, but not on all.
+
+ at c This is mostly just background info; the part that logically belongs
+ at c here is the last sentence.  
+On the VAX or on other machines in which the calling convention includes
+the number of words of arguments actually passed, the debugger (GDB at
+least) uses the parameter symbols to keep track of whether it needs to
+print nameless arguments in addition to the formal parameters which it
+has printed because each one has a stab.  For example, in 
+
+ at example
+extern int fprintf (FILE *stream, char *format, @dots{});
+ at dots{}
+fprintf (stdout, "%d\n", x);
+ at end example
+
+there are stabs for @code{stream} and @code{format}.  On most machines,
+the debugger can only print those two arguments (because it has no way
+of knowing that additional arguments were passed), but on the VAX or
+other machines with a calling convention which indicates the number of
+words of arguments, the debugger can print all three arguments.  To do
+so, the parameter symbol (symbol descriptor @samp{p}) (not necessarily
+ at samp{r} or symbol descriptor omitted symbols) needs to contain the
+actual type as passed (for example, @code{double} not @code{float} if it
+is passed as a double and converted to a float).
+
+ at node Reference Parameters
+ at subsection Passing Parameters by Reference
+
+If the parameter is passed by reference (e.g., Pascal @code{VAR}
+parameters), then the symbol descriptor is @samp{v} if it is in the
+argument list, or @samp{a} if it in a register.  Other than the fact
+that these contain the address of the parameter rather than the
+parameter itself, they are identical to @samp{p} and @samp{R},
+respectively.  I believe @samp{a} is an AIX invention; @samp{v} is
+supported by all stabs-using systems as far as I know.
+
+ at node Conformant Arrays
+ at subsection Passing Conformant Array Parameters
+
+ at c Is this paragraph correct?  It is based on piecing together patchy
+ at c information and some guesswork
+Conformant arrays are a feature of Modula-2, and perhaps other
+languages, in which the size of an array parameter is not known to the
+called function until run-time.  Such parameters have two stabs: a
+ at samp{x} for the array itself, and a @samp{C}, which represents the size
+of the array.  The value of the @samp{x} stab is the offset in the
+argument list where the address of the array is stored (it this right?
+it is a guess); the value of the @samp{C} stab is the offset in the
+argument list where the size of the array (in elements? in bytes?) is
+stored.
+
+ at node Types
+ at chapter Defining Types
+
+The examples so far have described types as references to previously
+defined types, or defined in terms of subranges of or pointers to
+previously defined types.  This chapter describes the other type
+descriptors that may follow the @samp{=} in a type definition.
+
+ at menu
+* Builtin Types::		Integers, floating point, void, etc.
+* Miscellaneous Types::		Pointers, sets, files, etc.
+* Cross-References::		Referring to a type not yet defined.
+* Subranges::			A type with a specific range.
+* Arrays::			An aggregate type of same-typed elements.
+* Strings::			Like an array but also has a length.
+* Enumerations::		Like an integer but the values have names.
+* Structures::			An aggregate type of different-typed elements.
+* Typedefs::			Giving a type a name.
+* Unions::			Different types sharing storage.
+* Function Types::
+ at end menu
+
+ at node Builtin Types
+ at section Builtin Types
+
+Certain types are built in (@code{int}, @code{short}, @code{void},
+ at code{float}, etc.); the debugger recognizes these types and knows how
+to handle them.  Thus, don't be surprised if some of the following ways
+of specifying builtin types do not specify everything that a debugger
+would need to know about the type---in some cases they merely specify
+enough information to distinguish the type from other types.
+
+The traditional way to define builtin types is convoluted, so new ways
+have been invented to describe them.  Sun's @code{acc} uses special
+builtin type descriptors (@samp{b} and @samp{R}), and IBM uses negative
+type numbers.  GDB accepts all three ways, as of version 4.8; dbx just
+accepts the traditional builtin types and perhaps one of the other two
+formats.  The following sections describe each of these formats.
+
+ at menu
+* Traditional Builtin Types::	Put on your seat belts and prepare for kludgery
+* Builtin Type Descriptors::	Builtin types with special type descriptors
+* Negative Type Numbers::	Builtin types using negative type numbers
+ at end menu
+
+ at node Traditional Builtin Types
+ at subsection Traditional Builtin Types
+
+This is the traditional, convoluted method for defining builtin types.
+There are several classes of such type definitions: integer, floating
+point, and @code{void}.
+
+ at menu
+* Traditional Integer Types::
+* Traditional Other Types::
+ at end menu
+
+ at node Traditional Integer Types
+ at subsubsection Traditional Integer Types
+
+Often types are defined as subranges of themselves.  If the bounding values
+fit within an @code{int}, then they are given normally.  For example:
+
+ at example
+.stabs "int:t1=r1;-2147483648;2147483647;",128,0,0,0    # @r{128 is N_LSYM}
+.stabs "char:t2=r2;0;127;",128,0,0,0
+ at end example
+
+Builtin types can also be described as subranges of @code{int}:
+
+ at example
+.stabs "unsigned short:t6=r1;0;65535;",128,0,0,0
+ at end example
+
+If the lower bound of a subrange is 0 and the upper bound is -1,
+the type is an unsigned integral type whose bounds are too
+big to describe in an @code{int}.  Traditionally this is only used for
+ at code{unsigned int} and @code{unsigned long}:
+
+ at example
+.stabs "unsigned int:t4=r1;0;-1;",128,0,0,0
+ at end example
+
+For larger types, GCC 2.4.5 puts out bounds in octal, with one or more
+leading zeroes.  In this case a negative bound consists of a number
+which is a 1 bit (for the sign bit) followed by a 0 bit for each bit in
+the number (except the sign bit), and a positive bound is one which is a
+1 bit for each bit in the number (except possibly the sign bit).  All
+known versions of dbx and GDB version 4 accept this (at least in the
+sense of not refusing to process the file), but GDB 3.5 refuses to read
+the whole file containing such symbols.  So GCC 2.3.3 did not output the
+proper size for these types.  As an example of octal bounds, the string
+fields of the stabs for 64 bit integer types look like:
+
+ at c .stabs directives, etc., omitted to make it fit on the page.
+ at example
+long int:t3=r1;001000000000000000000000;000777777777777777777777;
+long unsigned int:t5=r1;000000000000000000000000;001777777777777777777777;
+ at end example
+
+If the lower bound of a subrange is 0 and the upper bound is negative,
+the type is an unsigned integral type whose size in bytes is the
+absolute value of the upper bound.  I believe this is a Convex
+convention for @code{unsigned long long}.
+
+If the lower bound of a subrange is negative and the upper bound is 0,
+the type is a signed integral type whose size in bytes is
+the absolute value of the lower bound.  I believe this is a Convex
+convention for @code{long long}.  To distinguish this from a legitimate
+subrange, the type should be a subrange of itself.  I'm not sure whether
+this is the case for Convex.
+
+ at node Traditional Other Types
+ at subsubsection Traditional Other Types
+
+If the upper bound of a subrange is 0 and the lower bound is positive,
+the type is a floating point type, and the lower bound of the subrange
+indicates the number of bytes in the type:
+
+ at example
+.stabs "float:t12=r1;4;0;",128,0,0,0
+.stabs "double:t13=r1;8;0;",128,0,0,0
+ at end example
+
+However, GCC writes @code{long double} the same way it writes
+ at code{double}, so there is no way to distinguish.
+
+ at example
+.stabs "long double:t14=r1;8;0;",128,0,0,0
+ at end example
+
+Complex types are defined the same way as floating-point types; there is
+no way to distinguish a single-precision complex from a double-precision
+floating-point type.
+
+The C @code{void} type is defined as itself:
+
+ at example
+.stabs "void:t15=15",128,0,0,0
+ at end example
+
+I'm not sure how a boolean type is represented.
+
+ at node Builtin Type Descriptors
+ at subsection Defining Builtin Types Using Builtin Type Descriptors
+
+This is the method used by Sun's @code{acc} for defining builtin types.
+These are the type descriptors to define builtin types:
+
+ at table @code
+ at c FIXME: clean up description of width and offset, once we figure out
+ at c what they mean
+ at item b @var{signed} @var{char-flag} @var{width} ; @var{offset} ; @var{nbits} ;
+Define an integral type.  @var{signed} is @samp{u} for unsigned or
+ at samp{s} for signed.  @var{char-flag} is @samp{c} which indicates this
+is a character type, or is omitted.  I assume this is to distinguish an
+integral type from a character type of the same size, for example it
+might make sense to set it for the C type @code{wchar_t} so the debugger
+can print such variables differently (Solaris does not do this).  Sun
+sets it on the C types @code{signed char} and @code{unsigned char} which
+arguably is wrong.  @var{width} and @var{offset} appear to be for small
+objects stored in larger ones, for example a @code{short} in an
+ at code{int} register.  @var{width} is normally the number of bytes in the
+type.  @var{offset} seems to always be zero.  @var{nbits} is the number
+of bits in the type.
+
+Note that type descriptor @samp{b} used for builtin types conflicts with
+its use for Pascal space types (@pxref{Miscellaneous Types}); they can
+be distinguished because the character following the type descriptor
+will be a digit, @samp{(}, or @samp{-} for a Pascal space type, or
+ at samp{u} or @samp{s} for a builtin type.
+
+ at item w
+Documented by AIX to define a wide character type, but their compiler
+actually uses negative type numbers (@pxref{Negative Type Numbers}).
+
+ at item R @var{fp-type} ; @var{bytes} ;
+Define a floating point type.  @var{fp-type} has one of the following values:
+
+ at table @code
+ at item 1 (NF_SINGLE)
+IEEE 32-bit (single precision) floating point format.
+
+ at item 2 (NF_DOUBLE)
+IEEE 64-bit (double precision) floating point format.
+
+ at item 3 (NF_COMPLEX)
+ at item 4 (NF_COMPLEX16)
+ at item 5 (NF_COMPLEX32)
+ at c "GDB source" really means @file{include/aout/stab_gnu.h}, but trying
+ at c to put that here got an overfull hbox.
+These are for complex numbers.  A comment in the GDB source describes
+them as Fortran @code{complex}, @code{double complex}, and
+ at code{complex*16}, respectively, but what does that mean?  (i.e., Single
+precision?  Double precision?).
+
+ at item 6 (NF_LDOUBLE)
+Long double.  This should probably only be used for Sun format
+ at code{long double}, and new codes should be used for other floating
+point formats (@code{NF_DOUBLE} can be used if a @code{long double} is
+really just an IEEE double, of course).
+ at end table
+
+ at var{bytes} is the number of bytes occupied by the type.  This allows a
+debugger to perform some operations with the type even if it doesn't
+understand @var{fp-type}.
+
+ at item g @var{type-information} ; @var{nbits}
+Documented by AIX to define a floating type, but their compiler actually
+uses negative type numbers (@pxref{Negative Type Numbers}).
+
+ at item c @var{type-information} ; @var{nbits}
+Documented by AIX to define a complex type, but their compiler actually
+uses negative type numbers (@pxref{Negative Type Numbers}).
+ at end table
+
+The C @code{void} type is defined as a signed integral type 0 bits long:
+ at example
+.stabs "void:t19=bs0;0;0",128,0,0,0
+ at end example
+The Solaris compiler seems to omit the trailing semicolon in this case.
+Getting sloppy in this way is not a swift move because if a type is
+embedded in a more complex expression it is necessary to be able to tell
+where it ends.
+
+I'm not sure how a boolean type is represented.
+
+ at node Negative Type Numbers
+ at subsection Negative Type Numbers
+
+This is the method used in XCOFF for defining builtin types.
+Since the debugger knows about the builtin types anyway, the idea of
+negative type numbers is simply to give a special type number which
+indicates the builtin type.  There is no stab defining these types.
+
+There are several subtle issues with negative type numbers.
+
+One is the size of the type.  A builtin type (for example the C types
+ at code{int} or @code{long}) might have different sizes depending on
+compiler options, the target architecture, the ABI, etc.  This issue
+doesn't come up for IBM tools since (so far) they just target the
+RS/6000; the sizes indicated below for each size are what the IBM
+RS/6000 tools use.  To deal with differing sizes, either define separate
+negative type numbers for each size (which works but requires changing
+the debugger, and, unless you get both AIX dbx and GDB to accept the
+change, introduces an incompatibility), or use a type attribute
+(@pxref{String Field}) to define a new type with the appropriate size
+(which merely requires a debugger which understands type attributes,
+like AIX dbx or GDB).  For example,
+
+ at example
+.stabs "boolean:t10=@@s8;-16",128,0,0,0
+ at end example
+
+defines an 8-bit boolean type, and
+
+ at example
+.stabs "boolean:t10=@@s64;-16",128,0,0,0
+ at end example
+
+defines a 64-bit boolean type.
+
+A similar issue is the format of the type.  This comes up most often for
+floating-point types, which could have various formats (particularly
+extended doubles, which vary quite a bit even among IEEE systems).
+Again, it is best to define a new negative type number for each
+different format; changing the format based on the target system has
+various problems.  One such problem is that the Alpha has both VAX and
+IEEE floating types.  One can easily imagine one library using the VAX
+types and another library in the same executable using the IEEE types.
+Another example is that the interpretation of whether a boolean is true
+or false can be based on the least significant bit, most significant
+bit, whether it is zero, etc., and different compilers (or different
+options to the same compiler) might provide different kinds of boolean.
+
+The last major issue is the names of the types.  The name of a given
+type depends @emph{only} on the negative type number given; these do not
+vary depending on the language, the target system, or anything else.
+One can always define separate type numbers---in the following list you
+will see for example separate @code{int} and @code{integer*4} types
+which are identical except for the name.  But compatibility can be
+maintained by not inventing new negative type numbers and instead just
+defining a new type with a new name.  For example:
+
+ at example
+.stabs "CARDINAL:t10=-8",128,0,0,0
+ at end example
+
+Here is the list of negative type numbers.  The phrase @dfn{integral
+type} is used to mean twos-complement (I strongly suspect that all
+machines which use stabs use twos-complement; most machines use
+twos-complement these days).
+
+ at table @code
+ at item -1
+ at code{int}, 32 bit signed integral type.
+
+ at item -2
+ at code{char}, 8 bit type holding a character.   Both GDB and dbx on AIX
+treat this as signed.  GCC uses this type whether @code{char} is signed
+or not, which seems like a bad idea.  The AIX compiler (@code{xlc}) seems to
+avoid this type; it uses -5 instead for @code{char}.
+
+ at item -3
+ at code{short}, 16 bit signed integral type.
+
+ at item -4
+ at code{long}, 32 bit signed integral type.
+
+ at item -5
+ at code{unsigned char}, 8 bit unsigned integral type.
+
+ at item -6
+ at code{signed char}, 8 bit signed integral type.
+
+ at item -7
+ at code{unsigned short}, 16 bit unsigned integral type.
+
+ at item -8
+ at code{unsigned int}, 32 bit unsigned integral type.
+
+ at item -9
+ at code{unsigned}, 32 bit unsigned integral type.
+
+ at item -10
+ at code{unsigned long}, 32 bit unsigned integral type.
+
+ at item -11
+ at code{void}, type indicating the lack of a value.
+
+ at item -12
+ at code{float}, IEEE single precision.
+
+ at item -13
+ at code{double}, IEEE double precision.
+
+ at item -14
+ at code{long double}, IEEE double precision.  The compiler claims the size
+will increase in a future release, and for binary compatibility you have
+to avoid using @code{long double}.  I hope when they increase it they
+use a new negative type number.
+
+ at item -15
+ at code{integer}.  32 bit signed integral type.
+
+ at item -16
+ at code{boolean}.  32 bit type.  GDB and GCC assume that zero is false,
+one is true, and other values have unspecified meaning.  I hope this
+agrees with how the IBM tools use the type.
+
+ at item -17
+ at code{short real}.  IEEE single precision.
+
+ at item -18
+ at code{real}.  IEEE double precision.
+
+ at item -19
+ at code{stringptr}.  @xref{Strings}.
+
+ at item -20
+ at code{character}, 8 bit unsigned character type.
+
+ at item -21
+ at code{logical*1}, 8 bit type.  This Fortran type has a split
+personality in that it is used for boolean variables, but can also be
+used for unsigned integers.  0 is false, 1 is true, and other values are
+non-boolean.
+
+ at item -22
+ at code{logical*2}, 16 bit type.  This Fortran type has a split
+personality in that it is used for boolean variables, but can also be
+used for unsigned integers.  0 is false, 1 is true, and other values are
+non-boolean.
+
+ at item -23
+ at code{logical*4}, 32 bit type.  This Fortran type has a split
+personality in that it is used for boolean variables, but can also be
+used for unsigned integers.  0 is false, 1 is true, and other values are
+non-boolean.
+
+ at item -24
+ at code{logical}, 32 bit type.  This Fortran type has a split
+personality in that it is used for boolean variables, but can also be
+used for unsigned integers.  0 is false, 1 is true, and other values are
+non-boolean.
+
+ at item -25
+ at code{complex}.  A complex type consisting of two IEEE single-precision
+floating point values.
+
+ at item -26
+ at code{complex}.  A complex type consisting of two IEEE double-precision
+floating point values.
+
+ at item -27
+ at code{integer*1}, 8 bit signed integral type.
+
+ at item -28
+ at code{integer*2}, 16 bit signed integral type.
+
+ at item -29
+ at code{integer*4}, 32 bit signed integral type.
+
+ at item -30
+ at code{wchar}.  Wide character, 16 bits wide, unsigned (what format?
+Unicode?).
+
+ at item -31
+ at code{long long}, 64 bit signed integral type.
+
+ at item -32
+ at code{unsigned long long}, 64 bit unsigned integral type.
+
+ at item -33
+ at code{logical*8}, 64 bit unsigned integral type.
+
+ at item -34
+ at code{integer*8}, 64 bit signed integral type.
+ at end table
+
+ at node Miscellaneous Types
+ at section Miscellaneous Types
+
+ at table @code
+ at item b @var{type-information} ; @var{bytes}
+Pascal space type.  This is documented by IBM; what does it mean?
+
+This use of the @samp{b} type descriptor can be distinguished
+from its use for builtin integral types (@pxref{Builtin Type
+Descriptors}) because the character following the type descriptor is
+always a digit, @samp{(}, or @samp{-}.
+
+ at item B @var{type-information}
+A volatile-qualified version of @var{type-information}.  This is
+a Sun extension.  References and stores to a variable with a
+volatile-qualified type must not be optimized or cached; they
+must occur as the user specifies them.
+
+ at item d @var{type-information}
+File of type @var{type-information}.  As far as I know this is only used
+by Pascal.
+
+ at item k @var{type-information}
+A const-qualified version of @var{type-information}.  This is a Sun
+extension.  A variable with a const-qualified type cannot be modified.
+
+ at item M @var{type-information} ; @var{length}
+Multiple instance type.  The type seems to composed of @var{length}
+repetitions of @var{type-information}, for example @code{character*3} is
+represented by @samp{M-2;3}, where @samp{-2} is a reference to a
+character type (@pxref{Negative Type Numbers}).  I'm not sure how this
+differs from an array.  This appears to be a Fortran feature.
+ at var{length} is a bound, like those in range types; see @ref{Subranges}.
+
+ at item S @var{type-information}
+Pascal set type.  @var{type-information} must be a small type such as an
+enumeration or a subrange, and the type is a bitmask whose length is
+specified by the number of elements in @var{type-information}.
+
+In CHILL, if it is a bitstring instead of a set, also use the @samp{S}
+type attribute (@pxref{String Field}).
+
+ at item * @var{type-information}
+Pointer to @var{type-information}.
+ at end table
+
+ at node Cross-References
+ at section Cross-References to Other Types
+
+A type can be used before it is defined; one common way to deal with
+that situation is just to use a type reference to a type which has not
+yet been defined.
+
+Another way is with the @samp{x} type descriptor, which is followed by
+ at samp{s} for a structure tag, @samp{u} for a union tag, or @samp{e} for
+a enumerator tag, followed by the name of the tag, followed by @samp{:}.
+If the name contains @samp{::} between a @samp{<} and @samp{>} pair (for
+C at t{++} templates), such a @samp{::} does not end the name---only a single
+ at samp{:} ends the name; see @ref{Nested Symbols}.
+
+For example, the following C declarations:
+
+ at example
+struct foo;
+struct foo *bar;
+ at end example
+
+ at noindent
+produce:
+
+ at example
+.stabs "bar:G16=*17=xsfoo:",32,0,0,0
+ at end example
+
+Not all debuggers support the @samp{x} type descriptor, so on some
+machines GCC does not use it.  I believe that for the above example it
+would just emit a reference to type 17 and never define it, but I
+haven't verified that.
+
+Modula-2 imported types, at least on AIX, use the @samp{i} type
+descriptor, which is followed by the name of the module from which the
+type is imported, followed by @samp{:}, followed by the name of the
+type.  There is then optionally a comma followed by type information for
+the type.  This differs from merely naming the type (@pxref{Typedefs}) in
+that it identifies the module; I don't understand whether the name of
+the type given here is always just the same as the name we are giving
+it, or whether this type descriptor is used with a nameless stab
+(@pxref{String Field}), or what.  The symbol ends with @samp{;}.
+
+ at node Subranges
+ at section Subrange Types
+
+The @samp{r} type descriptor defines a type as a subrange of another
+type.  It is followed by type information for the type of which it is a
+subrange, a semicolon, an integral lower bound, a semicolon, an
+integral upper bound, and a semicolon.  The AIX documentation does not
+specify the trailing semicolon, in an effort to specify array indexes
+more cleanly, but a subrange which is not an array index has always
+included a trailing semicolon (@pxref{Arrays}).
+
+Instead of an integer, either bound can be one of the following:
+
+ at table @code
+ at item A @var{offset}
+The bound is passed by reference on the stack at offset @var{offset}
+from the argument list.  @xref{Parameters}, for more information on such
+offsets.
+
+ at item T @var{offset}
+The bound is passed by value on the stack at offset @var{offset} from
+the argument list.
+
+ at item a @var{register-number}
+The bound is passed by reference in register number
+ at var{register-number}.
+
+ at item t @var{register-number}
+The bound is passed by value in register number @var{register-number}.
+
+ at item J
+There is no bound.
+ at end table
+
+Subranges are also used for builtin types; see @ref{Traditional Builtin Types}.
+
+ at node Arrays
+ at section Array Types
+
+Arrays use the @samp{a} type descriptor.  Following the type descriptor
+is the type of the index and the type of the array elements.  If the
+index type is a range type, it ends in a semicolon; otherwise
+(for example, if it is a type reference), there does not
+appear to be any way to tell where the types are separated.  In an
+effort to clean up this mess, IBM documents the two types as being
+separated by a semicolon, and a range type as not ending in a semicolon
+(but this is not right for range types which are not array indexes,
+ at pxref{Subranges}).  I think probably the best solution is to specify
+that a semicolon ends a range type, and that the index type and element
+type of an array are separated by a semicolon, but that if the index
+type is a range type, the extra semicolon can be omitted.  GDB (at least
+through version 4.9) doesn't support any kind of index type other than a
+range anyway; I'm not sure about dbx.
+
+It is well established, and widely used, that the type of the index,
+unlike most types found in the stabs, is merely a type definition, not
+type information (@pxref{String Field}) (that is, it need not start with
+ at samp{@var{type-number}=} if it is defining a new type).  According to a
+comment in GDB, this is also true of the type of the array elements; it
+gives @samp{ar1;1;10;ar1;1;10;4} as a legitimate way to express a two
+dimensional array.  According to AIX documentation, the element type
+must be type information.  GDB accepts either.
+
+The type of the index is often a range type, expressed as the type
+descriptor @samp{r} and some parameters.  It defines the size of the
+array.  In the example below, the range @samp{r1;0;2;} defines an index
+type which is a subrange of type 1 (integer), with a lower bound of 0
+and an upper bound of 2.  This defines the valid range of subscripts of
+a three-element C array.
+
+For example, the definition:
+
+ at example
+char char_vec[3] = @{'a','b','c'@};
+ at end example
+
+ at noindent
+produces the output:
+
+ at example
+.stabs "char_vec:G19=ar1;0;2;2",32,0,0,0
+     .global _char_vec
+     .align 4
+_char_vec:
+     .byte 97
+     .byte 98
+     .byte 99
+ at end example
+
+If an array is @dfn{packed}, the elements are spaced more
+closely than normal, saving memory at the expense of speed.  For
+example, an array of 3-byte objects might, if unpacked, have each
+element aligned on a 4-byte boundary, but if packed, have no padding.
+One way to specify that something is packed is with type attributes
+(@pxref{String Field}).  In the case of arrays, another is to use the
+ at samp{P} type descriptor instead of @samp{a}.  Other than specifying a
+packed array, @samp{P} is identical to @samp{a}.
+
+ at c FIXME-what is it?  A pointer?
+An open array is represented by the @samp{A} type descriptor followed by
+type information specifying the type of the array elements.
+
+ at c FIXME: what is the format of this type?  A pointer to a vector of pointers?
+An N-dimensional dynamic array is represented by
+
+ at example
+D @var{dimensions} ; @var{type-information}
+ at end example
+
+ at c Does dimensions really have this meaning?  The AIX documentation
+ at c doesn't say.
+ at var{dimensions} is the number of dimensions; @var{type-information}
+specifies the type of the array elements.
+
+ at c FIXME: what is the format of this type?  A pointer to some offsets in
+ at c another array?
+A subarray of an N-dimensional array is represented by
+
+ at example
+E @var{dimensions} ; @var{type-information}
+ at end example
+
+ at c Does dimensions really have this meaning?  The AIX documentation
+ at c doesn't say.
+ at var{dimensions} is the number of dimensions; @var{type-information}
+specifies the type of the array elements.
+
+ at node Strings
+ at section Strings
+
+Some languages, like C or the original Pascal, do not have string types,
+they just have related things like arrays of characters.  But most
+Pascals and various other languages have string types, which are
+indicated as follows:
+
+ at table @code
+ at item n @var{type-information} ; @var{bytes}
+ at var{bytes} is the maximum length.  I'm not sure what
+ at var{type-information} is; I suspect that it means that this is a string
+of @var{type-information} (thus allowing a string of integers, a string
+of wide characters, etc., as well as a string of characters).  Not sure
+what the format of this type is.  This is an AIX feature.
+
+ at item z @var{type-information} ; @var{bytes}
+Just like @samp{n} except that this is a gstring, not an ordinary
+string.  I don't know the difference.
+
+ at item N
+Pascal Stringptr.  What is this?  This is an AIX feature.
+ at end table
+
+Languages, such as CHILL which have a string type which is basically
+just an array of characters use the @samp{S} type attribute
+(@pxref{String Field}).
+
+ at node Enumerations
+ at section Enumerations
+
+Enumerations are defined with the @samp{e} type descriptor.
+
+ at c FIXME: Where does this information properly go?  Perhaps it is
+ at c redundant with something we already explain.
+The source line below declares an enumeration type at file scope.
+The type definition is located after the @code{N_RBRAC} that marks the end of
+the previous procedure's block scope, and before the @code{N_FUN} that marks
+the beginning of the next procedure's block scope.  Therefore it does not
+describe a block local symbol, but a file local one.
+
+The source line:
+
+ at example
+enum e_places @{first,second=3,last@};
+ at end example
+
+ at noindent
+generates the following stab:
+
+ at example
+.stabs "e_places:T22=efirst:0,second:3,last:4,;",128,0,0,0
+ at end example
+
+The symbol descriptor (@samp{T}) says that the stab describes a
+structure, enumeration, or union tag.  The type descriptor @samp{e},
+following the @samp{22=} of the type definition narrows it down to an
+enumeration type.  Following the @samp{e} is a list of the elements of
+the enumeration.  The format is @samp{@var{name}:@var{value},}.  The
+list of elements ends with @samp{;}.  The fact that @var{value} is
+specified as an integer can cause problems if the value is large.  GCC
+2.5.2 tries to output it in octal in that case with a leading zero,
+which is probably a good thing, although GDB 4.11 supports octal only in
+cases where decimal is perfectly good.  Negative decimal values are
+supported by both GDB and dbx.
+
+There is no standard way to specify the size of an enumeration type; it
+is determined by the architecture (normally all enumerations types are
+32 bits).  Type attributes can be used to specify an enumeration type of
+another size for debuggers which support them; see @ref{String Field}.
+
+Enumeration types are unusual in that they define symbols for the
+enumeration values (@code{first}, @code{second}, and @code{third} in the
+above example), and even though these symbols are visible in the file as
+a whole (rather than being in a more local namespace like structure
+member names), they are defined in the type definition for the
+enumeration type rather than each having their own symbol.  In order to
+be fast, GDB will only get symbols from such types (in its initial scan
+of the stabs) if the type is the first thing defined after a @samp{T} or
+ at samp{t} symbol descriptor (the above example fulfills this
+requirement).  If the type does not have a name, the compiler should
+emit it in a nameless stab (@pxref{String Field}); GCC does this.
+
+ at node Structures
+ at section Structures
+
+The encoding of structures in stabs can be shown with an example.
+
+The following source code declares a structure tag and defines an
+instance of the structure in global scope. Then a @code{typedef} equates the
+structure tag with a new type.  Separate stabs are generated for the
+structure tag, the structure @code{typedef}, and the structure instance.  The
+stabs for the tag and the @code{typedef} are emitted when the definitions are
+encountered.  Since the structure elements are not initialized, the
+stab and code for the structure variable itself is located at the end
+of the program in the bss section.
+
+ at example
+struct s_tag @{
+  int   s_int;
+  float s_float;
+  char  s_char_vec[8];
+  struct s_tag* s_next;
+@} g_an_s;
+
+typedef struct s_tag s_typedef;
+ at end example
+
+The structure tag has an @code{N_LSYM} stab type because, like the
+enumeration, the symbol has file scope.  Like the enumeration, the
+symbol descriptor is @samp{T}, for enumeration, structure, or tag type.
+The type descriptor @samp{s} following the @samp{16=} of the type
+definition narrows the symbol type to structure.
+
+Following the @samp{s} type descriptor is the number of bytes the
+structure occupies, followed by a description of each structure element.
+The structure element descriptions are of the form
+ at samp{@var{name}:@var{type}, @var{bit offset from the start of the
+struct}, @var{number of bits in the element}}.
+
+ at c FIXME: phony line break.  Can probably be fixed by using an example
+ at c with fewer fields.
+ at example
+# @r{128 is N_LSYM}
+.stabs "s_tag:T16=s20s_int:1,0,32;s_float:12,32,32;
+        s_char_vec:17=ar1;0;7;2,64,64;s_next:18=*16,128,32;;",128,0,0,0
+ at end example
+
+In this example, the first two structure elements are previously defined
+types.  For these, the type following the @samp{@var{name}:} part of the
+element description is a simple type reference.  The other two structure
+elements are new types.  In this case there is a type definition
+embedded after the @samp{@var{name}:}.  The type definition for the
+array element looks just like a type definition for a stand-alone array.
+The @code{s_next} field is a pointer to the same kind of structure that
+the field is an element of.  So the definition of structure type 16
+contains a type definition for an element which is a pointer to type 16.
+
+If a field is a static member (this is a C at t{++} feature in which a single
+variable appears to be a field of every structure of a given type) it
+still starts out with the field name, a colon, and the type, but then
+instead of a comma, bit position, comma, and bit size, there is a colon
+followed by the name of the variable which each such field refers to.
+
+If the structure has methods (a C at t{++} feature), they follow the non-method
+fields; see @ref{Cplusplus}.
+
+ at node Typedefs
+ at section Giving a Type a Name
+
+ at findex N_LSYM, for types
+ at findex C_DECL, for types
+To give a type a name, use the @samp{t} symbol descriptor.  The type
+is specified by the type information (@pxref{String Field}) for the stab.
+For example,
+
+ at example
+.stabs "s_typedef:t16",128,0,0,0     # @r{128 is N_LSYM}
+ at end example
+
+specifies that @code{s_typedef} refers to type number 16.  Such stabs
+have symbol type @code{N_LSYM} (or @code{C_DECL} for XCOFF).  (The Sun
+documentation mentions using @code{N_GSYM} in some cases).
+
+If you are specifying the tag name for a structure, union, or
+enumeration, use the @samp{T} symbol descriptor instead.  I believe C is
+the only language with this feature.
+
+If the type is an opaque type (I believe this is a Modula-2 feature),
+AIX provides a type descriptor to specify it.  The type descriptor is
+ at samp{o} and is followed by a name.  I don't know what the name
+means---is it always the same as the name of the type, or is this type
+descriptor used with a nameless stab (@pxref{String Field})?  There
+optionally follows a comma followed by type information which defines
+the type of this type.  If omitted, a semicolon is used in place of the
+comma and the type information, and the type is much like a generic
+pointer type---it has a known size but little else about it is
+specified.
+
+ at node Unions
+ at section Unions
+
+ at example
+union u_tag @{
+  int  u_int;
+  float u_float;
+  char* u_char;
+@} an_u;
+ at end example
+
+This code generates a stab for a union tag and a stab for a union
+variable.  Both use the @code{N_LSYM} stab type.  If a union variable is
+scoped locally to the procedure in which it is defined, its stab is
+located immediately preceding the @code{N_LBRAC} for the procedure's block
+start.
+
+The stab for the union tag, however, is located preceding the code for
+the procedure in which it is defined.  The stab type is @code{N_LSYM}.  This
+would seem to imply that the union type is file scope, like the struct
+type @code{s_tag}.  This is not true.  The contents and position of the stab
+for @code{u_type} do not convey any information about its procedure local
+scope.
+
+ at c FIXME: phony line break.  Can probably be fixed by using an example
+ at c with fewer fields.
+ at smallexample
+# @r{128 is N_LSYM}
+.stabs "u_tag:T23=u4u_int:1,0,32;u_float:12,0,32;u_char:21,0,32;;",
+       128,0,0,0
+ at end smallexample
+
+The symbol descriptor @samp{T}, following the @samp{name:} means that
+the stab describes an enumeration, structure, or union tag.  The type
+descriptor @samp{u}, following the @samp{23=} of the type definition,
+narrows it down to a union type definition.  Following the @samp{u} is
+the number of bytes in the union.  After that is a list of union element
+descriptions.  Their format is @samp{@var{name}:@var{type}, @var{bit
+offset into the union}, @var{number of bytes for the element};}.
+
+The stab for the union variable is:
+
+ at example
+.stabs "an_u:23",128,0,0,-20     # @r{128 is N_LSYM}
+ at end example
+
+ at samp{-20} specifies where the variable is stored (@pxref{Stack
+Variables}).
+
+ at node Function Types
+ at section Function Types
+
+Various types can be defined for function variables.  These types are
+not used in defining functions (@pxref{Procedures}); they are used for
+things like pointers to functions.
+
+The simple, traditional, type is type descriptor @samp{f} is followed by
+type information for the return type of the function, followed by a
+semicolon.
+
+This does not deal with functions for which the number and types of the
+parameters are part of the type, as in Modula-2 or ANSI C.  AIX provides
+extensions to specify these, using the @samp{f}, @samp{F}, @samp{p}, and
+ at samp{R} type descriptors.
+
+First comes the type descriptor.  If it is @samp{f} or @samp{F}, this
+type involves a function rather than a procedure, and the type
+information for the return type of the function follows, followed by a
+comma.  Then comes the number of parameters to the function and a
+semicolon.  Then, for each parameter, there is the name of the parameter
+followed by a colon (this is only present for type descriptors @samp{R}
+and @samp{F} which represent Pascal function or procedure parameters),
+type information for the parameter, a comma, 0 if passed by reference or
+1 if passed by value, and a semicolon.  The type definition ends with a
+semicolon.
+
+For example, this variable definition:
+
+ at example
+int (*g_pf)();
+ at end example
+
+ at noindent
+generates the following code:
+
+ at example
+.stabs "g_pf:G24=*25=f1",32,0,0,0
+    .common _g_pf,4,"bss"
+ at end example
+
+The variable defines a new type, 24, which is a pointer to another new
+type, 25, which is a function returning @code{int}.
+
+ at node Macro define and undefine
+ at chapter Representation of #define and #undef
+
+This section describes the stabs support for macro define and undefine
+information, supported on some systems.  (e.g., with @option{-g3}
+ at option{-gstabs} when using GCC).
+
+A @code{#define @var{macro-name} @var{macro-body}} is represented with
+an @code{N_MAC_DEFINE} stab with a string field of
+ at code{@var{macro-name} @var{macro-body}}.
+ at findex N_MAC_DEFINE
+
+An @code{#undef @var{macro-name}} is represented with an
+ at code{N_MAC_UNDEF} stabs with a string field of simply
+ at code{@var{macro-name}}.
+ at findex N_MAC_UNDEF
+
+For both @code{N_MAC_DEFINE} and @code{N_MAC_UNDEF}, the desc field is
+the line number within the file where the corresponding @code{#define}
+or @code{#undef} occurred.
+
+For example, the following C code:
+
+ at example
+    #define NONE	42
+    #define TWO(a, b)	(a + (a) + 2 * b)
+    #define ONE(c)	(c + 19)
+
+    main(int argc, char *argv[])
+    @{
+      func(NONE, TWO(10, 11));
+      func(NONE, ONE(23));
+
+    #undef ONE
+    #define ONE(c)	(c + 23)
+
+      func(NONE, ONE(-23));
+
+      return (0);
+    @}
+
+    int global;
+
+    func(int arg1, int arg2)
+    @{
+      global = arg1 + arg2;
+    @}
+ at end example
+
+ at noindent
+produces the following stabs (as well as many others):
+
+ at example
+    .stabs	"NONE 42",54,0,1,0
+    .stabs	"TWO(a,b) (a + (a) + 2 * b)",54,0,2,0
+    .stabs	"ONE(c) (c + 19)",54,0,3,0
+    .stabs	"ONE",58,0,10,0
+    .stabs	"ONE(c) (c + 23)",54,0,11,0
+ at end example
+
+ at noindent
+NOTE: In the above example, @code{54} is @code{N_MAC_DEFINE} and
+ at code{58} is @code{N_MAC_UNDEF}.
+
+ at node Symbol Tables
+ at chapter Symbol Information in Symbol Tables
+
+This chapter describes the format of symbol table entries
+and how stab assembler directives map to them.  It also describes the
+transformations that the assembler and linker make on data from stabs.
+
+ at menu
+* Symbol Table Format::
+* Transformations On Symbol Tables::
+ at end menu
+
+ at node Symbol Table Format
+ at section Symbol Table Format
+
+Each time the assembler encounters a stab directive, it puts
+each field of the stab into a corresponding field in a symbol table
+entry of its output file.  If the stab contains a string field, the
+symbol table entry for that stab points to a string table entry
+containing the string data from the stab.  Assembler labels become
+relocatable addresses.  Symbol table entries in a.out have the format:
+
+ at c FIXME: should refer to external, not internal.
+ at example
+struct internal_nlist @{
+  unsigned long n_strx;         /* index into string table of name */
+  unsigned char n_type;         /* type of symbol */
+  unsigned char n_other;        /* misc info (usually empty) */
+  unsigned short n_desc;        /* description field */
+  bfd_vma n_value;              /* value of symbol */
+@};
+ at end example
+
+If the stab has a string, the @code{n_strx} field holds the offset in
+bytes of the string within the string table.  The string is terminated
+by a NUL character.  If the stab lacks a string (for example, it was
+produced by a @code{.stabn} or @code{.stabd} directive), the
+ at code{n_strx} field is zero.
+
+Symbol table entries with @code{n_type} field values greater than 0x1f
+originated as stabs generated by the compiler (with one random
+exception).  The other entries were placed in the symbol table of the
+executable by the assembler or the linker.
+
+ at node Transformations On Symbol Tables
+ at section Transformations on Symbol Tables
+
+The linker concatenates object files and does fixups of externally
+defined symbols.
+
+You can see the transformations made on stab data by the assembler and
+linker by examining the symbol table after each pass of the build.  To
+do this, use @samp{nm -ap}, which dumps the symbol table, including
+debugging information, unsorted.  For stab entries the columns are:
+ at var{value}, @var{other}, @var{desc}, @var{type}, @var{string}.  For
+assembler and linker symbols, the columns are: @var{value}, @var{type},
+ at var{string}.
+
+The low 5 bits of the stab type tell the linker how to relocate the
+value of the stab.  Thus for stab types like @code{N_RSYM} and
+ at code{N_LSYM}, where the value is an offset or a register number, the
+low 5 bits are @code{N_ABS}, which tells the linker not to relocate the
+value.
+
+Where the value of a stab contains an assembly language label,
+it is transformed by each build step.  The assembler turns it into a
+relocatable address and the linker turns it into an absolute address.
+
+ at menu
+* Transformations On Static Variables::
+* Transformations On Global Variables::
+* Stab Section Transformations::	   For some object file formats,
+                                           things are a bit different.
+ at end menu
+
+ at node Transformations On Static Variables
+ at subsection Transformations on Static Variables
+
+This source line defines a static variable at file scope:
+
+ at example
+static int s_g_repeat
+ at end example
+
+ at noindent
+The following stab describes the symbol:
+
+ at example
+.stabs "s_g_repeat:S1",38,0,0,_s_g_repeat
+ at end example
+
+ at noindent
+The assembler transforms the stab into this symbol table entry in the
+ at file{.o} file.  The location is expressed as a data segment offset.
+
+ at example
+00000084 - 00 0000 STSYM s_g_repeat:S1
+ at end example
+
+ at noindent
+In the symbol table entry from the executable, the linker has made the
+relocatable address absolute.
+
+ at example
+0000e00c - 00 0000 STSYM s_g_repeat:S1
+ at end example
+
+ at node Transformations On Global Variables
+ at subsection Transformations on Global Variables
+
+Stabs for global variables do not contain location information. In
+this case, the debugger finds location information in the assembler or
+linker symbol table entry describing the variable.  The source line:
+
+ at example
+char g_foo = 'c';
+ at end example
+
+ at noindent
+generates the stab:
+
+ at example
+.stabs "g_foo:G2",32,0,0,0
+ at end example
+
+The variable is represented by two symbol table entries in the object
+file (see below).  The first one originated as a stab.  The second one
+is an external symbol.  The upper case @samp{D} signifies that the
+ at code{n_type} field of the symbol table contains 7, @code{N_DATA} with
+local linkage.  The stab's value is zero since the value is not used for
+ at code{N_GSYM} stabs.  The value of the linker symbol is the relocatable
+address corresponding to the variable.
+
+ at example
+00000000 - 00 0000  GSYM g_foo:G2
+00000080 D _g_foo
+ at end example
+
+ at noindent
+These entries as transformed by the linker.  The linker symbol table
+entry now holds an absolute address:
+
+ at example
+00000000 - 00 0000  GSYM g_foo:G2
+ at dots{}
+0000e008 D _g_foo
+ at end example
+
+ at node Stab Section Transformations
+ at subsection Transformations of Stabs in separate sections
+
+For object file formats using stabs in separate sections (@pxref{Stab
+Sections}), use @code{objdump --stabs} instead of @code{nm} to show the
+stabs in an object or executable file.  @code{objdump} is a GNU utility;
+Sun does not provide any equivalent.
+
+The following example is for a stab whose value is an address is
+relative to the compilation unit (@pxref{ELF Linker Relocation}).  For
+example, if the source line
+
+ at example
+static int ld = 5;
+ at end example
+
+appears within a function, then the assembly language output from the
+compiler contains:
+
+ at example
+.Ddata.data:
+ at dots{}
+        .stabs "ld:V(0,3)",0x26,0,4,.L18-Ddata.data    # @r{0x26 is N_STSYM}
+ at dots{}
+.L18:
+        .align 4
+        .word 0x5
+ at end example
+
+Because the value is formed by subtracting one symbol from another, the
+value is absolute, not relocatable, and so the object file contains
+
+ at example
+Symnum n_type n_othr n_desc n_value  n_strx String
+31     STSYM  0      4      00000004 680    ld:V(0,3)
+ at end example
+
+without any relocations, and the executable file also contains
+
+ at example
+Symnum n_type n_othr n_desc n_value  n_strx String
+31     STSYM  0      4      00000004 680    ld:V(0,3)
+ at end example
+
+ at node Cplusplus
+ at chapter GNU C at t{++} Stabs
+
+ at menu
+* Class Names::			C++ class names are both tags and typedefs.
+* Nested Symbols::		C++ symbol names can be within other types.
+* Basic Cplusplus Types::
+* Simple Classes::
+* Class Instance::
+* Methods::			Method definition
+* Method Type Descriptor::      The @samp{#} type descriptor
+* Member Type Descriptor::      The @samp{@@} type descriptor
+* Protections::
+* Method Modifiers::
+* Virtual Methods::
+* Inheritance::
+* Virtual Base Classes::
+* Static Members::
+ at end menu
+
+ at node Class Names
+ at section C at t{++} Class Names
+
+In C at t{++}, a class name which is declared with @code{class}, @code{struct},
+or @code{union}, is not only a tag, as in C, but also a type name.  Thus
+there should be stabs with both @samp{t} and @samp{T} symbol descriptors
+(@pxref{Typedefs}).
+
+To save space, there is a special abbreviation for this case.  If the
+ at samp{T} symbol descriptor is followed by @samp{t}, then the stab
+defines both a type name and a tag.
+
+For example, the C at t{++} code
+
+ at example
+struct foo @{int x;@};
+ at end example
+
+can be represented as either
+
+ at example
+.stabs "foo:T19=s4x:1,0,32;;",128,0,0,0       # @r{128 is N_LSYM}
+.stabs "foo:t19",128,0,0,0
+ at end example
+
+or
+
+ at example
+.stabs "foo:Tt19=s4x:1,0,32;;",128,0,0,0
+ at end example
+
+ at node Nested Symbols
+ at section Defining a Symbol Within Another Type
+
+In C at t{++}, a symbol (such as a type name) can be defined within another type.
+ at c FIXME: Needs example.
+
+In stabs, this is sometimes represented by making the name of a symbol
+which contains @samp{::}.  Such a pair of colons does not end the name
+of the symbol, the way a single colon would (@pxref{String Field}).  I'm
+not sure how consistently used or well thought out this mechanism is.
+So that a pair of colons in this position always has this meaning,
+ at samp{:} cannot be used as a symbol descriptor.
+
+For example, if the string for a stab is @samp{foo::bar::baz:t5=*6},
+then @code{foo::bar::baz} is the name of the symbol, @samp{t} is the
+symbol descriptor, and @samp{5=*6} is the type information.
+
+ at node Basic Cplusplus Types
+ at section Basic Types For C at t{++}
+
+<< the examples that follow are based on a01.C >>
+
+
+C at t{++} adds two more builtin types to the set defined for C.  These are
+the unknown type and the vtable record type.  The unknown type, type
+16, is defined in terms of itself like the void type.
+
+The vtable record type, type 17, is defined as a structure type and
+then as a structure tag.  The structure has four fields: delta, index,
+pfn, and delta2.  pfn is the function pointer.
+
+<< In boilerplate $vtbl_ptr_type, what are the fields delta,
+index, and delta2 used for? >>
+
+This basic type is present in all C at t{++} programs even if there are no
+virtual methods defined.
+
+ at display
+.stabs "struct_name:sym_desc(type)type_def(17)=type_desc(struct)struct_bytes(8)
+        elem_name(delta):type_ref(short int),bit_offset(0),field_bits(16);
+        elem_name(index):type_ref(short int),bit_offset(16),field_bits(16);
+        elem_name(pfn):type_def(18)=type_desc(ptr to)type_ref(void),
+                                    bit_offset(32),field_bits(32);
+        elem_name(delta2):type_def(short int);bit_offset(32),field_bits(16);;"
+        N_LSYM, NIL, NIL
+ at end display
+
+ at smallexample
+.stabs "$vtbl_ptr_type:t17=s8
+        delta:6,0,16;index:6,16,16;pfn:18=*15,32,32;delta2:6,32,16;;"
+        ,128,0,0,0
+ at end smallexample
+
+ at display
+.stabs "name:sym_dec(struct tag)type_ref($vtbl_ptr_type)",N_LSYM,NIL,NIL,NIL
+ at end display
+
+ at example
+.stabs "$vtbl_ptr_type:T17",128,0,0,0
+ at end example
+
+ at node Simple Classes
+ at section Simple Class Definition
+
+The stabs describing C at t{++} language features are an extension of the
+stabs describing C.  Stabs representing C at t{++} class types elaborate
+extensively on the stab format used to describe structure types in C.
+Stabs representing class type variables look just like stabs
+representing C language variables.
+
+Consider the following very simple class definition.
+
+ at example
+class baseA @{
+public:
+        int Adat;
+        int Ameth(int in, char other);
+@};
+ at end example
+
+The class @code{baseA} is represented by two stabs.  The first stab describes
+the class as a structure type.  The second stab describes a structure
+tag of the class type.  Both stabs are of stab type @code{N_LSYM}.  Since the
+stab is not located between an @code{N_FUN} and an @code{N_LBRAC} stab this indicates
+that the class is defined at file scope.  If it were, then the @code{N_LSYM}
+would signify a local variable.
+
+A stab describing a C at t{++} class type is similar in format to a stab
+describing a C struct, with each class member shown as a field in the
+structure.  The part of the struct format describing fields is
+expanded to include extra information relevant to C at t{++} class members.
+In addition, if the class has multiple base classes or virtual
+functions the struct format outside of the field parts is also
+augmented.
+
+In this simple example the field part of the C at t{++} class stab
+representing member data looks just like the field part of a C struct
+stab.  The section on protections describes how its format is
+sometimes extended for member data.
+
+The field part of a C at t{++} class stab representing a member function
+differs substantially from the field part of a C struct stab.  It
+still begins with @samp{name:} but then goes on to define a new type number
+for the member function, describe its return type, its argument types,
+its protection level, any qualifiers applied to the method definition,
+and whether the method is virtual or not.  If the method is virtual
+then the method description goes on to give the vtable index of the
+method, and the type number of the first base class defining the
+method.
+
+When the field name is a method name it is followed by two colons rather
+than one.  This is followed by a new type definition for the method.
+This is a number followed by an equal sign and the type of the method.
+Normally this will be a type declared using the @samp{#} type
+descriptor; see @ref{Method Type Descriptor}; static member functions
+are declared using the @samp{f} type descriptor instead; see
+ at ref{Function Types}.
+
+The format of an overloaded operator method name differs from that of
+other methods.  It is @samp{op$::@var{operator-name}.} where
+ at var{operator-name} is the operator name such as @samp{+} or @samp{+=}.
+The name ends with a period, and any characters except the period can
+occur in the @var{operator-name} string.
+
+The next part of the method description represents the arguments to the
+method, preceded by a colon and ending with a semi-colon.  The types of
+the arguments are expressed in the same way argument types are expressed
+in C at t{++} name mangling.  In this example an @code{int} and a @code{char}
+map to @samp{ic}.
+
+This is followed by a number, a letter, and an asterisk or period,
+followed by another semicolon.  The number indicates the protections
+that apply to the member function.  Here the 2 means public.  The
+letter encodes any qualifier applied to the method definition.  In
+this case, @samp{A} means that it is a normal function definition.  The dot
+shows that the method is not virtual.  The sections that follow
+elaborate further on these fields and describe the additional
+information present for virtual methods.
+
+
+ at display
+.stabs "class_name:sym_desc(type)type_def(20)=type_desc(struct)struct_bytes(4)
+        field_name(Adat):type(int),bit_offset(0),field_bits(32);
+
+        method_name(Ameth)::type_def(21)=type_desc(method)return_type(int);
+        :arg_types(int char);
+        protection(public)qualifier(normal)virtual(no);;"
+        N_LSYM,NIL,NIL,NIL
+ at end display
+
+ at smallexample
+.stabs "baseA:t20=s4Adat:1,0,32;Ameth::21=##1;:ic;2A.;;",128,0,0,0
+
+.stabs "class_name:sym_desc(struct tag)",N_LSYM,NIL,NIL,NIL
+
+.stabs "baseA:T20",128,0,0,0
+ at end smallexample
+
+ at node Class Instance
+ at section Class Instance
+
+As shown above, describing even a simple C at t{++} class definition is
+accomplished by massively extending the stab format used in C to
+describe structure types.  However, once the class is defined, C stabs
+with no modifications can be used to describe class instances.  The
+following source:
+
+ at example
+main () @{
+        baseA AbaseA;
+@}
+ at end example
+
+ at noindent
+yields the following stab describing the class instance.  It looks no
+different from a standard C stab describing a local variable.
+
+ at display
+.stabs "name:type_ref(baseA)", N_LSYM, NIL, NIL, frame_ptr_offset
+ at end display
+
+ at example
+.stabs "AbaseA:20",128,0,0,-20
+ at end example
+
+ at node Methods
+ at section Method Definition
+
+The class definition shown above declares Ameth.  The C at t{++} source below
+defines Ameth:
+
+ at example
+int
+baseA::Ameth(int in, char other)
+@{
+        return in;
+@};
+ at end example
+
+
+This method definition yields three stabs following the code of the
+method.  One stab describes the method itself and following two describe
+its parameters.  Although there is only one formal argument all methods
+have an implicit argument which is the @code{this} pointer.  The @code{this}
+pointer is a pointer to the object on which the method was called.  Note
+that the method name is mangled to encode the class name and argument
+types.  Name mangling is described in the @sc{arm} (@cite{The Annotated
+C++ Reference Manual}, by Ellis and Stroustrup, @sc{isbn}
+0-201-51459-1); @file{gpcompare.texi} in Cygnus GCC distributions
+describes the differences between GNU mangling and @sc{arm}
+mangling.
+ at c FIXME: Use @xref, especially if this is generally installed in the
+ at c info tree.
+ at c FIXME: This information should be in a net release, either of GCC or
+ at c GDB.  But gpcompare.texi doesn't seem to be in the FSF GCC.
+
+ at example
+.stabs "name:symbol_descriptor(global function)return_type(int)",
+        N_FUN, NIL, NIL, code_addr_of_method_start
+
+.stabs "Ameth__5baseAic:F1",36,0,0,_Ameth__5baseAic
+ at end example
+
+Here is the stab for the @code{this} pointer implicit argument.  The
+name of the @code{this} pointer is always @code{this}.  Type 19, the
+ at code{this} pointer is defined as a pointer to type 20, @code{baseA},
+but a stab defining @code{baseA} has not yet been emitted.  Since the
+compiler knows it will be emitted shortly, here it just outputs a cross
+reference to the undefined symbol, by prefixing the symbol name with
+ at samp{xs}.
+
+ at example
+.stabs "name:sym_desc(register param)type_def(19)=
+        type_desc(ptr to)type_ref(baseA)=
+        type_desc(cross-reference to)baseA:",N_RSYM,NIL,NIL,register_number
+
+.stabs "this:P19=*20=xsbaseA:",64,0,0,8
+ at end example
+
+The stab for the explicit integer argument looks just like a parameter
+to a C function.  The last field of the stab is the offset from the
+argument pointer, which in most systems is the same as the frame
+pointer.
+
+ at example
+.stabs "name:sym_desc(value parameter)type_ref(int)",
+        N_PSYM,NIL,NIL,offset_from_arg_ptr
+
+.stabs "in:p1",160,0,0,72
+ at end example
+
+<< The examples that follow are based on A1.C >>
+
+ at node Method Type Descriptor
+ at section The @samp{#} Type Descriptor
+
+This is used to describe a class method.  This is a function which takes
+an extra argument as its first argument, for the @code{this} pointer.
+
+If the @samp{#} is immediately followed by another @samp{#}, the second
+one will be followed by the return type and a semicolon.  The class and
+argument types are not specified, and must be determined by demangling
+the name of the method if it is available.
+
+Otherwise, the single @samp{#} is followed by the class type, a comma,
+the return type, a comma, and zero or more parameter types separated by
+commas.  The list of arguments is terminated by a semicolon.  In the
+debugging output generated by gcc, a final argument type of @code{void}
+indicates a method which does not take a variable number of arguments.
+If the final argument type of @code{void} does not appear, the method
+was declared with an ellipsis.
+
+Note that although such a type will normally be used to describe fields
+in structures, unions, or classes, for at least some versions of the
+compiler it can also be used in other contexts.
+
+ at node Member Type Descriptor
+ at section The @samp{@@} Type Descriptor
+
+The @samp{@@} type descriptor is used for a
+pointer-to-non-static-member-data type.  It is followed
+by type information for the class (or union), a comma, and type
+information for the member data.
+
+The following C at t{++} source:
+
+ at smallexample
+typedef int A::*int_in_a;
+ at end smallexample
+
+generates the following stab:
+
+ at smallexample
+.stabs "int_in_a:t20=21=@@19,1",128,0,0,0
+ at end smallexample
+
+Note that there is a conflict between this and type attributes
+(@pxref{String Field}); both use type descriptor @samp{@@}.
+Fortunately, the @samp{@@} type descriptor used in this C at t{++} sense always
+will be followed by a digit, @samp{(}, or @samp{-}, and type attributes
+never start with those things.
+
+ at node Protections
+ at section Protections
+
+In the simple class definition shown above all member data and
+functions were publicly accessible.  The example that follows
+contrasts public, protected and privately accessible fields and shows
+how these protections are encoded in C at t{++} stabs.
+
+If the character following the @samp{@var{field-name}:} part of the
+string is @samp{/}, then the next character is the visibility.  @samp{0}
+means private, @samp{1} means protected, and @samp{2} means public.
+Debuggers should ignore visibility characters they do not recognize, and
+assume a reasonable default (such as public) (GDB 4.11 does not, but
+this should be fixed in the next GDB release).  If no visibility is
+specified the field is public.  The visibility @samp{9} means that the
+field has been optimized out and is public (there is no way to specify
+an optimized out field with a private or protected visibility).
+Visibility @samp{9} is not supported by GDB 4.11; this should be fixed
+in the next GDB release.
+
+The following C at t{++} source:
+
+ at example
+class vis @{
+private:
+        int   priv;
+protected:
+        char  prot;
+public:
+        float pub;
+@};
+ at end example
+
+ at noindent
+generates the following stab:
+
+ at example
+# @r{128 is N_LSYM}
+.stabs "vis:T19=s12priv:/01,0,32;prot:/12,32,8;pub:12,64,32;;",128,0,0,0
+ at end example
+
+ at samp{vis:T19=s12} indicates that type number 19 is a 12 byte structure
+named @code{vis} The @code{priv} field has public visibility
+(@samp{/0}), type int (@samp{1}), and offset and size @samp{,0,32;}.
+The @code{prot} field has protected visibility (@samp{/1}), type char
+(@samp{2}) and offset and size @samp{,32,8;}.  The @code{pub} field has
+type float (@samp{12}), and offset and size @samp{,64,32;}.
+
+Protections for member functions are signified by one digit embedded in
+the field part of the stab describing the method.  The digit is 0 if
+private, 1 if protected and 2 if public.  Consider the C at t{++} class
+definition below:
+
+ at example
+class all_methods @{
+private:
+        int   priv_meth(int in)@{return in;@};
+protected:
+        char  protMeth(char in)@{return in;@};
+public:
+        float pubMeth(float in)@{return in;@};
+@};
+ at end example
+
+It generates the following stab.  The digit in question is to the left
+of an @samp{A} in each case.  Notice also that in this case two symbol
+descriptors apply to the class name struct tag and struct type.
+
+ at display
+.stabs "class_name:sym_desc(struct tag&type)type_def(21)=
+        sym_desc(struct)struct_bytes(1)
+        meth_name::type_def(22)=sym_desc(method)returning(int);
+        :args(int);protection(private)modifier(normal)virtual(no);
+        meth_name::type_def(23)=sym_desc(method)returning(char);
+        :args(char);protection(protected)modifier(normal)virtual(no);
+        meth_name::type_def(24)=sym_desc(method)returning(float);
+        :args(float);protection(public)modifier(normal)virtual(no);;",
+        N_LSYM,NIL,NIL,NIL
+ at end display
+
+ at smallexample
+.stabs "all_methods:Tt21=s1priv_meth::22=##1;:i;0A.;protMeth::23=##2;:c;1A.;
+        pubMeth::24=##12;:f;2A.;;",128,0,0,0
+ at end smallexample
+
+ at node Method Modifiers
+ at section Method Modifiers (@code{const}, @code{volatile}, @code{const volatile})
+
+<< based on a6.C >>
+
+In the class example described above all the methods have the normal
+modifier.  This method modifier information is located just after the
+protection information for the method.  This field has four possible
+character values.  Normal methods use @samp{A}, const methods use
+ at samp{B}, volatile methods use @samp{C}, and const volatile methods use
+ at samp{D}.  Consider the class definition below:
+
+ at example
+class A @{
+public:
+        int ConstMeth (int arg) const @{ return arg; @};
+        char VolatileMeth (char arg) volatile @{ return arg; @};
+        float ConstVolMeth (float arg) const volatile @{return arg; @};
+@};
+ at end example
+
+This class is described by the following stab:
+
+ at display
+.stabs "class(A):sym_desc(struct)type_def(20)=type_desc(struct)struct_bytes(1)
+        meth_name(ConstMeth)::type_def(21)sym_desc(method)
+        returning(int);:arg(int);protection(public)modifier(const)virtual(no);
+        meth_name(VolatileMeth)::type_def(22)=sym_desc(method)
+        returning(char);:arg(char);protection(public)modifier(volatile)virt(no)
+        meth_name(ConstVolMeth)::type_def(23)=sym_desc(method)
+        returning(float);:arg(float);protection(public)modifier(const volatile)
+        virtual(no);;", @dots{}
+ at end display
+
+ at example
+.stabs "A:T20=s1ConstMeth::21=##1;:i;2B.;VolatileMeth::22=##2;:c;2C.;
+             ConstVolMeth::23=##12;:f;2D.;;",128,0,0,0
+ at end example
+
+ at node Virtual Methods
+ at section Virtual Methods
+
+<< The following examples are based on a4.C >>
+
+The presence of virtual methods in a class definition adds additional
+data to the class description.  The extra data is appended to the
+description of the virtual method and to the end of the class
+description.  Consider the class definition below:
+
+ at example
+class A @{
+public:
+        int Adat;
+        virtual int A_virt (int arg) @{ return arg; @};
+@};
+ at end example
+
+This results in the stab below describing class A.  It defines a new
+type (20) which is an 8 byte structure.  The first field of the class
+struct is @samp{Adat}, an integer, starting at structure offset 0 and
+occupying 32 bits.
+
+The second field in the class struct is not explicitly defined by the
+C at t{++} class definition but is implied by the fact that the class
+contains a virtual method.  This field is the vtable pointer.  The
+name of the vtable pointer field starts with @samp{$vf} and continues with a
+type reference to the class it is part of.  In this example the type
+reference for class A is 20 so the name of its vtable pointer field is
+ at samp{$vf20}, followed by the usual colon.
+
+Next there is a type definition for the vtable pointer type (21).
+This is in turn defined as a pointer to another new type (22).
+
+Type 22 is the vtable itself, which is defined as an array, indexed by
+a range of integers between 0 and 1, and whose elements are of type
+17.  Type 17 was the vtable record type defined by the boilerplate C at t{++}
+type definitions, as shown earlier.
+
+The bit offset of the vtable pointer field is 32.  The number of bits
+in the field are not specified when the field is a vtable pointer.
+
+Next is the method definition for the virtual member function @code{A_virt}.
+Its description starts out using the same format as the non-virtual
+member functions described above, except instead of a dot after the
+ at samp{A} there is an asterisk, indicating that the function is virtual.
+Since is is virtual some addition information is appended to the end
+of the method description.
+
+The first number represents the vtable index of the method.  This is a
+32 bit unsigned number with the high bit set, followed by a
+semi-colon.
+
+The second number is a type reference to the first base class in the
+inheritance hierarchy defining the virtual member function.  In this
+case the class stab describes a base class so the virtual function is
+not overriding any other definition of the method.  Therefore the
+reference is to the type number of the class that the stab is
+describing (20).
+
+This is followed by three semi-colons.  One marks the end of the
+current sub-section, one marks the end of the method field, and the
+third marks the end of the struct definition.
+
+For classes containing virtual functions the very last section of the
+string part of the stab holds a type reference to the first base
+class.  This is preceded by @samp{~%} and followed by a final semi-colon.
+
+ at display
+.stabs "class_name(A):type_def(20)=sym_desc(struct)struct_bytes(8)
+        field_name(Adat):type_ref(int),bit_offset(0),field_bits(32);
+        field_name(A virt func ptr):type_def(21)=type_desc(ptr to)type_def(22)=
+        sym_desc(array)index_type_ref(range of int from 0 to 1);
+        elem_type_ref(vtbl elem type),
+        bit_offset(32);
+        meth_name(A_virt)::typedef(23)=sym_desc(method)returning(int);
+        :arg_type(int),protection(public)normal(yes)virtual(yes)
+        vtable_index(1);class_first_defining(A);;;~%first_base(A);",
+        N_LSYM,NIL,NIL,NIL
+ at end display
+
+ at c FIXME: bogus line break.
+ at example
+.stabs "A:t20=s8Adat:1,0,32;$vf20:21=*22=ar1;0;1;17,32;
+        A_virt::23=##1;:i;2A*-2147483647;20;;;~%20;",128,0,0,0
+ at end example
+
+ at node Inheritance
+ at section Inheritance
+
+Stabs describing C at t{++} derived classes include additional sections that
+describe the inheritance hierarchy of the class.  A derived class stab
+also encodes the number of base classes.  For each base class it tells
+if the base class is virtual or not, and if the inheritance is private
+or public.  It also gives the offset into the object of the portion of
+the object corresponding to each base class.
+
+This additional information is embedded in the class stab following the
+number of bytes in the struct.  First the number of base classes
+appears bracketed by an exclamation point and a comma.
+
+Then for each base type there repeats a series: a virtual character, a
+visibility character, a number, a comma, another number, and a
+semi-colon.
+
+The virtual character is @samp{1} if the base class is virtual and
+ at samp{0} if not.  The visibility character is @samp{2} if the derivation
+is public, @samp{1} if it is protected, and @samp{0} if it is private.
+Debuggers should ignore virtual or visibility characters they do not
+recognize, and assume a reasonable default (such as public and
+non-virtual) (GDB 4.11 does not, but this should be fixed in the next
+GDB release).
+
+The number following the virtual and visibility characters is the offset
+from the start of the object to the part of the object pertaining to the
+base class.
+
+After the comma, the second number is a type_descriptor for the base
+type.  Finally a semi-colon ends the series, which repeats for each
+base class.
+
+The source below defines three base classes @code{A}, @code{B}, and
+ at code{C} and the derived class @code{D}.
+
+
+ at example
+class A @{
+public:
+        int Adat;
+        virtual int A_virt (int arg) @{ return arg; @};
+@};
+
+class B @{
+public:
+        int B_dat;
+        virtual int B_virt (int arg) @{return arg; @};
+@};
+
+class C @{
+public:
+        int Cdat;
+        virtual int C_virt (int arg) @{return arg; @};
+@};
+
+class D : A, virtual B, public C @{
+public:
+        int Ddat;
+        virtual int A_virt (int arg ) @{ return arg+1; @};
+        virtual int B_virt (int arg)  @{ return arg+2; @};
+        virtual int C_virt (int arg)  @{ return arg+3; @};
+        virtual int D_virt (int arg)  @{ return arg; @};
+@};
+ at end example
+
+Class stabs similar to the ones described earlier are generated for
+each base class.
+
+ at c FIXME!!! the linebreaks in the following example probably make the
+ at c examples literally unusable, but I don't know any other way to get
+ at c them on the page.
+ at c One solution would be to put some of the type definitions into
+ at c separate stabs, even if that's not exactly what the compiler actually
+ at c emits.
+ at smallexample
+.stabs "A:T20=s8Adat:1,0,32;$vf20:21=*22=ar1;0;1;17,32;
+        A_virt::23=##1;:i;2A*-2147483647;20;;;~%20;",128,0,0,0
+
+.stabs "B:Tt25=s8Bdat:1,0,32;$vf25:21,32;B_virt::26=##1;
+        :i;2A*-2147483647;25;;;~%25;",128,0,0,0
+
+.stabs "C:Tt28=s8Cdat:1,0,32;$vf28:21,32;C_virt::29=##1;
+        :i;2A*-2147483647;28;;;~%28;",128,0,0,0
+ at end smallexample
+
+In the stab describing derived class @code{D} below, the information about
+the derivation of this class is encoded as follows.
+
+ at display
+.stabs "derived_class_name:symbol_descriptors(struct tag&type)=
+        type_descriptor(struct)struct_bytes(32)!num_bases(3),
+        base_virtual(no)inheritance_public(no)base_offset(0),
+        base_class_type_ref(A);
+        base_virtual(yes)inheritance_public(no)base_offset(NIL),
+        base_class_type_ref(B);
+        base_virtual(no)inheritance_public(yes)base_offset(64),
+        base_class_type_ref(C); @dots{}
+ at end display
+
+ at c FIXME! fake linebreaks.
+ at smallexample
+.stabs "D:Tt31=s32!3,000,20;100,25;0264,28;$vb25:24,128;Ddat:
+        1,160,32;A_virt::32=##1;:i;2A*-2147483647;20;;B_virt:
+        :32:i;2A*-2147483647;25;;C_virt::32:i;2A*-2147483647;
+        28;;D_virt::32:i;2A*-2147483646;31;;;~%20;",128,0,0,0
+ at end smallexample
+
+ at node Virtual Base Classes
+ at section Virtual Base Classes
+
+A derived class object consists of a concatenation in memory of the data
+areas defined by each base class, starting with the leftmost and ending
+with the rightmost in the list of base classes.  The exception to this
+rule is for virtual inheritance.  In the example above, class @code{D}
+inherits virtually from base class @code{B}.  This means that an
+instance of a @code{D} object will not contain its own @code{B} part but
+merely a pointer to a @code{B} part, known as a virtual base pointer.
+
+In a derived class stab, the base offset part of the derivation
+information, described above, shows how the base class parts are
+ordered.  The base offset for a virtual base class is always given as 0.
+Notice that the base offset for @code{B} is given as 0 even though
+ at code{B} is not the first base class.  The first base class @code{A}
+starts at offset 0.
+
+The field information part of the stab for class @code{D} describes the field
+which is the pointer to the virtual base class @code{B}. The vbase pointer
+name is @samp{$vb} followed by a type reference to the virtual base class.
+Since the type id for @code{B} in this example is 25, the vbase pointer name
+is @samp{$vb25}.
+
+ at c FIXME!! fake linebreaks below
+ at smallexample
+.stabs "D:Tt31=s32!3,000,20;100,25;0264,28;$vb25:24,128;Ddat:1,
+       160,32;A_virt::32=##1;:i;2A*-2147483647;20;;B_virt::32:i;
+       2A*-2147483647;25;;C_virt::32:i;2A*-2147483647;28;;D_virt:
+       :32:i;2A*-2147483646;31;;;~%20;",128,0,0,0
+ at end smallexample
+
+Following the name and a semicolon is a type reference describing the
+type of the virtual base class pointer, in this case 24.  Type 24 was
+defined earlier as the type of the @code{B} class @code{this} pointer.  The
+ at code{this} pointer for a class is a pointer to the class type.
+
+ at example
+.stabs "this:P24=*25=xsB:",64,0,0,8
+ at end example
+
+Finally the field offset part of the vbase pointer field description
+shows that the vbase pointer is the first field in the @code{D} object,
+before any data fields defined by the class.  The layout of a @code{D}
+class object is a follows, @code{Adat} at 0, the vtable pointer for
+ at code{A} at 32, @code{Cdat} at 64, the vtable pointer for C at 96, the
+virtual base pointer for @code{B} at 128, and @code{Ddat} at 160.
+
+
+ at node Static Members
+ at section Static Members
+
+The data area for a class is a concatenation of the space used by the
+data members of the class.  If the class has virtual methods, a vtable
+pointer follows the class data.  The field offset part of each field
+description in the class stab shows this ordering.
+
+<< How is this reflected in stabs?  See Cygnus bug #677 for some info.  >>
+
+ at node Stab Types
+ at appendix Table of Stab Types
+
+The following are all the possible values for the stab type field, for
+a.out files, in numeric order.  This does not apply to XCOFF, but
+it does apply to stabs in sections (@pxref{Stab Sections}).  Stabs in
+ECOFF use these values but add 0x8f300 to distinguish them from non-stab
+symbols.
+
+The symbolic names are defined in the file @file{include/aout/stabs.def}.
+
+ at menu
+* Non-Stab Symbol Types::	Types from 0 to 0x1f
+* Stab Symbol Types::		Types from 0x20 to 0xff
+ at end menu
+
+ at node Non-Stab Symbol Types
+ at appendixsec Non-Stab Symbol Types
+
+The following types are used by the linker and assembler, not by stab
+directives.  Since this document does not attempt to describe aspects of
+object file format other than the debugging format, no details are
+given.
+
+ at c Try to get most of these to fit on a single line.
+ at iftex
+ at tableindent=1.5in
+ at end iftex
+
+ at table @code
+ at item 0x0     N_UNDF
+Undefined symbol
+
+ at item 0x2     N_ABS
+File scope absolute symbol
+
+ at item 0x3     N_ABS | N_EXT
+External absolute symbol
+
+ at item 0x4     N_TEXT
+File scope text symbol
+
+ at item 0x5     N_TEXT | N_EXT
+External text symbol
+
+ at item 0x6     N_DATA
+File scope data symbol
+
+ at item 0x7     N_DATA | N_EXT
+External data symbol
+
+ at item 0x8     N_BSS
+File scope BSS symbol
+
+ at item 0x9     N_BSS | N_EXT
+External BSS symbol
+
+ at item 0x0c    N_FN_SEQ
+Same as @code{N_FN}, for Sequent compilers
+
+ at item 0x0a    N_INDR
+Symbol is indirected to another symbol
+
+ at item 0x12    N_COMM
+Common---visible after shared library dynamic link
+
+ at item 0x14 N_SETA
+ at itemx 0x15 N_SETA | N_EXT
+Absolute set element
+
+ at item 0x16 N_SETT
+ at itemx 0x17 N_SETT | N_EXT
+Text segment set element
+
+ at item 0x18 N_SETD
+ at itemx 0x19 N_SETD | N_EXT
+Data segment set element
+
+ at item 0x1a N_SETB
+ at itemx 0x1b N_SETB | N_EXT
+BSS segment set element
+
+ at item 0x1c N_SETV
+ at itemx 0x1d N_SETV | N_EXT
+Pointer to set vector
+
+ at item 0x1e N_WARNING
+Print a warning message during linking
+
+ at item 0x1f    N_FN
+File name of a @file{.o} file
+ at end table
+
+ at node Stab Symbol Types
+ at appendixsec Stab Symbol Types
+
+The following symbol types indicate that this is a stab.  This is the
+full list of stab numbers, including stab types that are used in
+languages other than C.
+
+ at table @code
+ at item 0x20     N_GSYM
+Global symbol; see @ref{Global Variables}.
+
+ at item 0x22     N_FNAME
+Function name (for BSD Fortran); see @ref{Procedures}.
+
+ at item 0x24     N_FUN
+Function name (@pxref{Procedures}) or text segment variable
+(@pxref{Statics}).
+
+ at item 0x26 N_STSYM
+Data segment file-scope variable; see @ref{Statics}.
+
+ at item 0x28 N_LCSYM
+BSS segment file-scope variable; see @ref{Statics}.
+
+ at item 0x2a N_MAIN
+Name of main routine; see @ref{Main Program}.
+
+ at item 0x2c N_ROSYM
+Variable in @code{.rodata} section; see @ref{Statics}.
+
+ at item 0x30     N_PC
+Global symbol (for Pascal); see @ref{N_PC}.
+
+ at item 0x32     N_NSYMS
+Number of symbols (according to Ultrix V4.0); see @ref{N_NSYMS}.
+
+ at item 0x34     N_NOMAP
+No DST map; see @ref{N_NOMAP}.
+
+ at item 0x36     N_MAC_DEFINE
+Name and body of a @code{#define}d macro; see @ref{Macro define and undefine}.
+
+ at c FIXME: describe this solaris feature in the body of the text (see
+ at c comments in include/aout/stab.def).
+ at item 0x38 N_OBJ
+Object file (Solaris2).
+
+ at item 0x3a     N_MAC_UNDEF
+Name of an @code{#undef}ed macro; see @ref{Macro define and undefine}.
+
+ at c See include/aout/stab.def for (a little) more info.
+ at item 0x3c N_OPT
+Debugger options (Solaris2).
+
+ at item 0x40     N_RSYM
+Register variable; see @ref{Register Variables}.
+
+ at item 0x42     N_M2C
+Modula-2 compilation unit; see @ref{N_M2C}.
+
+ at item 0x44     N_SLINE
+Line number in text segment; see @ref{Line Numbers}.
+
+ at item 0x46     N_DSLINE
+Line number in data segment; see @ref{Line Numbers}.
+
+ at item 0x48     N_BSLINE
+Line number in bss segment; see @ref{Line Numbers}.
+
+ at item 0x48     N_BROWS
+Sun source code browser, path to @file{.cb} file; see @ref{N_BROWS}.
+
+ at item 0x4a     N_DEFD
+GNU Modula2 definition module dependency; see @ref{N_DEFD}.
+
+ at item 0x4c N_FLINE
+Function start/body/end line numbers (Solaris2).
+
+ at item 0x50     N_EHDECL
+GNU C at t{++} exception variable; see @ref{N_EHDECL}.
+
+ at item 0x50     N_MOD2
+Modula2 info "for imc" (according to Ultrix V4.0); see @ref{N_MOD2}.
+
+ at item 0x54     N_CATCH
+GNU C at t{++} @code{catch} clause; see @ref{N_CATCH}.
+
+ at item 0x60     N_SSYM
+Structure of union element; see @ref{N_SSYM}.
+
+ at item 0x62 N_ENDM
+Last stab for module (Solaris2).
+
+ at item 0x64     N_SO
+Path and name of source file; see @ref{Source Files}.
+
+ at item 0x80 N_LSYM
+Stack variable (@pxref{Stack Variables}) or type (@pxref{Typedefs}).
+
+ at item 0x82     N_BINCL
+Beginning of an include file (Sun only); see @ref{Include Files}.
+
+ at item 0x84     N_SOL
+Name of include file; see @ref{Include Files}.
+
+ at item 0xa0     N_PSYM
+Parameter variable; see @ref{Parameters}.
+
+ at item 0xa2     N_EINCL
+End of an include file; see @ref{Include Files}.
+
+ at item 0xa4     N_ENTRY
+Alternate entry point; see @ref{Alternate Entry Points}.
+
+ at item 0xc0     N_LBRAC
+Beginning of a lexical block; see @ref{Block Structure}.
+
+ at item 0xc2     N_EXCL
+Place holder for a deleted include file; see @ref{Include Files}.
+
+ at item 0xc4     N_SCOPE
+Modula2 scope information (Sun linker); see @ref{N_SCOPE}.
+
+ at item 0xe0     N_RBRAC
+End of a lexical block; see @ref{Block Structure}.
+
+ at item 0xe2     N_BCOMM
+Begin named common block; see @ref{Common Blocks}.
+
+ at item 0xe4     N_ECOMM
+End named common block; see @ref{Common Blocks}.
+
+ at item 0xe8     N_ECOML
+Member of a common block; see @ref{Common Blocks}.
+
+ at c FIXME: How does this really work?  Move it to main body of document.
+ at item 0xea N_WITH
+Pascal @code{with} statement: type,,0,0,offset (Solaris2).
+
+ at item 0xf0     N_NBTEXT
+Gould non-base registers; see @ref{Gould}.
+
+ at item 0xf2     N_NBDATA
+Gould non-base registers; see @ref{Gould}.
+
+ at item 0xf4     N_NBBSS
+Gould non-base registers; see @ref{Gould}.
+
+ at item 0xf6     N_NBSTS
+Gould non-base registers; see @ref{Gould}.
+
+ at item 0xf8     N_NBLCS
+Gould non-base registers; see @ref{Gould}.
+ at end table
+
+ at c Restore the default table indent
+ at iftex
+ at tableindent=.8in
+ at end iftex
+
+ at node Symbol Descriptors
+ at appendix Table of Symbol Descriptors
+
+The symbol descriptor is the character which follows the colon in many
+stabs, and which tells what kind of stab it is.  @xref{String Field},
+for more information about their use.
+
+ at c Please keep this alphabetical
+ at table @code
+ at c In TeX, this looks great, digit is in italics.  But makeinfo insists
+ at c on putting it in `', not realizing that @var should override @code.
+ at c I don't know of any way to make makeinfo do the right thing.  Seems
+ at c like a makeinfo bug to me.
+ at item @var{digit}
+ at itemx (
+ at itemx -
+Variable on the stack; see @ref{Stack Variables}.
+
+ at item :
+C at t{++} nested symbol; see @xref{Nested Symbols}.
+
+ at item a
+Parameter passed by reference in register; see @ref{Reference Parameters}.
+
+ at item b
+Based variable; see @ref{Based Variables}.
+
+ at item c
+Constant; see @ref{Constants}.
+
+ at item C
+Conformant array bound (Pascal, maybe other languages); @ref{Conformant
+Arrays}.  Name of a caught exception (GNU C at t{++}).  These can be
+distinguished because the latter uses @code{N_CATCH} and the former uses
+another symbol type.
+
+ at item d
+Floating point register variable; see @ref{Register Variables}.
+
+ at item D
+Parameter in floating point register; see @ref{Register Parameters}.
+
+ at item f
+File scope function; see @ref{Procedures}.
+
+ at item F
+Global function; see @ref{Procedures}.
+
+ at item G
+Global variable; see @ref{Global Variables}.
+
+ at item i
+ at xref{Register Parameters}.
+
+ at item I
+Internal (nested) procedure; see @ref{Nested Procedures}.
+
+ at item J
+Internal (nested) function; see @ref{Nested Procedures}.
+
+ at item L
+Label name (documented by AIX, no further information known).
+
+ at item m
+Module; see @ref{Procedures}.
+
+ at item p
+Argument list parameter; see @ref{Parameters}.
+
+ at item pP
+ at xref{Parameters}.
+
+ at item pF
+Fortran Function parameter; see @ref{Parameters}.
+
+ at item P
+Unfortunately, three separate meanings have been independently invented
+for this symbol descriptor.  At least the GNU and Sun uses can be
+distinguished by the symbol type.  Global Procedure (AIX) (symbol type
+used unknown); see @ref{Procedures}.  Register parameter (GNU) (symbol
+type @code{N_PSYM}); see @ref{Parameters}.  Prototype of function
+referenced by this file (Sun @code{acc}) (symbol type @code{N_FUN}).
+
+ at item Q
+Static Procedure; see @ref{Procedures}.
+
+ at item R
+Register parameter; see @ref{Register Parameters}.
+
+ at item r
+Register variable; see @ref{Register Variables}.
+
+ at item S
+File scope variable; see @ref{Statics}.
+
+ at item s
+Local variable (OS9000).
+
+ at item t
+Type name; see @ref{Typedefs}.
+
+ at item T
+Enumeration, structure, or union tag; see @ref{Typedefs}.
+
+ at item v
+Parameter passed by reference; see @ref{Reference Parameters}.
+
+ at item V
+Procedure scope static variable; see @ref{Statics}.
+
+ at item x
+Conformant array; see @ref{Conformant Arrays}.
+
+ at item X
+Function return variable; see @ref{Parameters}.
+ at end table
+
+ at node Type Descriptors
+ at appendix Table of Type Descriptors
+
+The type descriptor is the character which follows the type number and
+an equals sign.  It specifies what kind of type is being defined.
+ at xref{String Field}, for more information about their use.
+
+ at table @code
+ at item @var{digit}
+ at itemx (
+Type reference; see @ref{String Field}.
+
+ at item -
+Reference to builtin type; see @ref{Negative Type Numbers}.
+
+ at item #
+Method (C at t{++}); see @ref{Method Type Descriptor}.
+
+ at item *
+Pointer; see @ref{Miscellaneous Types}.
+
+ at item &
+Reference (C at t{++}).
+
+ at item @@
+Type Attributes (AIX); see @ref{String Field}.  Member (class and variable)
+type (GNU C at t{++}); see @ref{Member Type Descriptor}.
+
+ at item a
+Array; see @ref{Arrays}.
+
+ at item A
+Open array; see @ref{Arrays}.
+
+ at item b
+Pascal space type (AIX); see @ref{Miscellaneous Types}.  Builtin integer
+type (Sun); see @ref{Builtin Type Descriptors}.  Const and volatile
+qualified type (OS9000).
+
+ at item B
+Volatile-qualified type; see @ref{Miscellaneous Types}.
+
+ at item c
+Complex builtin type (AIX); see @ref{Builtin Type Descriptors}.
+Const-qualified type (OS9000).
+
+ at item C
+COBOL Picture type.  See AIX documentation for details.
+
+ at item d
+File type; see @ref{Miscellaneous Types}.
+
+ at item D
+N-dimensional dynamic array; see @ref{Arrays}.
+
+ at item e
+Enumeration type; see @ref{Enumerations}.
+
+ at item E
+N-dimensional subarray; see @ref{Arrays}.
+
+ at item f
+Function type; see @ref{Function Types}.
+
+ at item F
+Pascal function parameter; see @ref{Function Types}
+
+ at item g
+Builtin floating point type; see @ref{Builtin Type Descriptors}.
+
+ at item G
+COBOL Group.  See AIX documentation for details.
+
+ at item i
+Imported type (AIX); see @ref{Cross-References}.  Volatile-qualified
+type (OS9000).
+
+ at item k
+Const-qualified type; see @ref{Miscellaneous Types}.
+
+ at item K
+COBOL File Descriptor.  See AIX documentation for details.
+
+ at item M
+Multiple instance type; see @ref{Miscellaneous Types}.
+
+ at item n
+String type; see @ref{Strings}.
+
+ at item N
+Stringptr; see @ref{Strings}.
+
+ at item o
+Opaque type; see @ref{Typedefs}.
+
+ at item p
+Procedure; see @ref{Function Types}.
+
+ at item P
+Packed array; see @ref{Arrays}.
+
+ at item r
+Range type; see @ref{Subranges}.
+
+ at item R
+Builtin floating type; see @ref{Builtin Type Descriptors} (Sun).  Pascal
+subroutine parameter; see @ref{Function Types} (AIX).  Detecting this
+conflict is possible with careful parsing (hint: a Pascal subroutine
+parameter type will always contain a comma, and a builtin type
+descriptor never will).
+
+ at item s
+Structure type; see @ref{Structures}.
+
+ at item S
+Set type; see @ref{Miscellaneous Types}.
+
+ at item u
+Union; see @ref{Unions}.
+
+ at item v
+Variant record.  This is a Pascal and Modula-2 feature which is like a
+union within a struct in C.  See AIX documentation for details.
+
+ at item w
+Wide character; see @ref{Builtin Type Descriptors}.
+
+ at item x
+Cross-reference; see @ref{Cross-References}.
+
+ at item Y
+Used by IBM's xlC C at t{++} compiler (for structures, I think).
+
+ at item z
+gstring; see @ref{Strings}.
+ at end table
+
+ at node Expanded Reference
+ at appendix Expanded Reference by Stab Type
+
+ at c FIXME: This appendix should go away; see N_PSYM or N_SO for an example.
+
+For a full list of stab types, and cross-references to where they are
+described, see @ref{Stab Types}.  This appendix just covers certain
+stabs which are not yet described in the main body of this document;
+eventually the information will all be in one place.
+
+Format of an entry:
+
+The first line is the symbol type (see @file{include/aout/stab.def}).
+
+The second line describes the language constructs the symbol type
+represents.
+
+The third line is the stab format with the significant stab fields
+named and the rest NIL.
+
+Subsequent lines expand upon the meaning and possible values for each
+significant stab field.
+
+Finally, any further information.
+
+ at menu
+* N_PC::			Pascal global symbol
+* N_NSYMS::			Number of symbols
+* N_NOMAP::			No DST map
+* N_M2C::			Modula-2 compilation unit
+* N_BROWS::			Path to .cb file for Sun source code browser
+* N_DEFD::			GNU Modula2 definition module dependency
+* N_EHDECL::			GNU C++ exception variable
+* N_MOD2::			Modula2 information "for imc"
+* N_CATCH::			GNU C++ "catch" clause
+* N_SSYM::			Structure or union element
+* N_SCOPE::			Modula2 scope information (Sun only)
+* Gould::			non-base register symbols used on Gould systems
+* N_LENG::			Length of preceding entry
+ at end menu
+
+ at node N_PC
+ at section N_PC
+
+ at deffn @code{.stabs} N_PC
+ at findex N_PC
+Global symbol (for Pascal).
+
+ at example
+"name" -> "symbol_name"  <<?>>
+value  -> supposedly the line number (stab.def is skeptical)
+ at end example
+
+ at display
+ at file{stabdump.c} says:
+
+global pascal symbol: name,,0,subtype,line
+<< subtype? >>
+ at end display
+ at end deffn
+
+ at node N_NSYMS
+ at section N_NSYMS
+
+ at deffn @code{.stabn} N_NSYMS
+ at findex N_NSYMS
+Number of symbols (according to Ultrix V4.0).
+
+ at display
+        0, files,,funcs,lines (stab.def)
+ at end display
+ at end deffn
+
+ at node N_NOMAP
+ at section N_NOMAP
+
+ at deffn @code{.stabs} N_NOMAP
+ at findex N_NOMAP
+No DST map for symbol (according to Ultrix V4.0).  I think this means a
+variable has been optimized out.
+
+ at display
+        name, ,0,type,ignored (stab.def)
+ at end display
+ at end deffn
+
+ at node N_M2C
+ at section N_M2C
+
+ at deffn @code{.stabs} N_M2C
+ at findex N_M2C
+Modula-2 compilation unit.
+
+ at example
+"string" -> "unit_name,unit_time_stamp[,code_time_stamp]"
+desc   -> unit_number
+value  -> 0 (main unit)
+          1 (any other unit)
+ at end example
+
+See @cite{Dbx and Dbxtool Interfaces}, 2nd edition, by Sun, 1988, for
+more information.
+
+ at end deffn
+
+ at node N_BROWS
+ at section N_BROWS
+
+ at deffn @code{.stabs} N_BROWS
+ at findex N_BROWS
+Sun source code browser, path to @file{.cb} file
+
+<<?>>
+"path to associated @file{.cb} file"
+
+Note: N_BROWS has the same value as N_BSLINE.
+ at end deffn
+
+ at node N_DEFD
+ at section N_DEFD
+
+ at deffn @code{.stabn} N_DEFD
+ at findex N_DEFD
+GNU Modula2 definition module dependency.
+
+GNU Modula-2 definition module dependency.  The value is the
+modification time of the definition file.  The other field is non-zero
+if it is imported with the GNU M2 keyword @code{%INITIALIZE}.  Perhaps
+ at code{N_M2C} can be used if there are enough empty fields?
+ at end deffn
+
+ at node N_EHDECL
+ at section N_EHDECL
+
+ at deffn @code{.stabs} N_EHDECL
+ at findex N_EHDECL
+GNU C at t{++} exception variable <<?>>.
+
+"@var{string} is variable name"
+
+Note: conflicts with @code{N_MOD2}.
+ at end deffn
+
+ at node N_MOD2
+ at section N_MOD2
+
+ at deffn @code{.stab?} N_MOD2
+ at findex N_MOD2
+Modula2 info "for imc" (according to Ultrix V4.0)
+
+Note: conflicts with @code{N_EHDECL}  <<?>>
+ at end deffn
+
+ at node N_CATCH
+ at section N_CATCH
+
+ at deffn @code{.stabn} N_CATCH
+ at findex N_CATCH
+GNU C at t{++} @code{catch} clause
+
+GNU C at t{++} @code{catch} clause.  The value is its address.  The desc field
+is nonzero if this entry is immediately followed by a @code{CAUGHT} stab
+saying what exception was caught.  Multiple @code{CAUGHT} stabs means
+that multiple exceptions can be caught here.  If desc is 0, it means all
+exceptions are caught here.
+ at end deffn
+
+ at node N_SSYM
+ at section N_SSYM
+
+ at deffn @code{.stabn} N_SSYM
+ at findex N_SSYM
+Structure or union element.
+
+The value is the offset in the structure.
+
+<<?looking at structs and unions in C I didn't see these>>
+ at end deffn
+
+ at node N_SCOPE
+ at section N_SCOPE
+
+ at deffn @code{.stab?} N_SCOPE
+ at findex N_SCOPE
+Modula2 scope information (Sun linker)
+<<?>>
+ at end deffn
+
+ at node Gould
+ at section Non-base registers on Gould systems
+
+ at deffn @code{.stab?} N_NBTEXT
+ at deffnx @code{.stab?} N_NBDATA
+ at deffnx @code{.stab?} N_NBBSS
+ at deffnx @code{.stab?} N_NBSTS
+ at deffnx @code{.stab?} N_NBLCS
+ at findex N_NBTEXT
+ at findex N_NBDATA
+ at findex N_NBBSS
+ at findex N_NBSTS
+ at findex N_NBLCS
+These are used on Gould systems for non-base registers syms.
+
+However, the following values are not the values used by Gould; they are
+the values which GNU has been documenting for these values for a long
+time, without actually checking what Gould uses.  I include these values
+only because perhaps some someone actually did something with the GNU
+information (I hope not, why GNU knowingly assigned wrong values to
+these in the header file is a complete mystery to me).
+
+ at example
+240    0xf0     N_NBTEXT  ??
+242    0xf2     N_NBDATA  ??
+244    0xf4     N_NBBSS   ??
+246    0xf6     N_NBSTS   ??
+248    0xf8     N_NBLCS   ??
+ at end example
+ at end deffn
+
+ at node N_LENG
+ at section N_LENG
+
+ at deffn @code{.stabn} N_LENG
+ at findex N_LENG
+Second symbol entry containing a length-value for the preceding entry.
+The value is the length.
+ at end deffn
+
+ at node Questions
+ at appendix Questions and Anomalies
+
+ at itemize @bullet
+ at item
+ at c I think this is changed in GCC 2.4.5 to put the line number there.
+For GNU C stabs defining local and global variables (@code{N_LSYM} and
+ at code{N_GSYM}), the desc field is supposed to contain the source
+line number on which the variable is defined.  In reality the desc
+field is always 0.  (This behavior is defined in @file{dbxout.c} and
+putting a line number in desc is controlled by @samp{#ifdef
+WINNING_GDB}, which defaults to false). GDB supposedly uses this
+information if you say @samp{list @var{var}}.  In reality, @var{var} can
+be a variable defined in the program and GDB says @samp{function
+ at var{var} not defined}.
+
+ at item
+In GNU C stabs, there seems to be no way to differentiate tag types:
+structures, unions, and enums (symbol descriptor @samp{T}) and typedefs
+(symbol descriptor @samp{t}) defined at file scope from types defined locally
+to a procedure or other more local scope.  They all use the @code{N_LSYM}
+stab type.  Types defined at procedure scope are emitted after the
+ at code{N_RBRAC} of the preceding function and before the code of the
+procedure in which they are defined.  This is exactly the same as
+types defined in the source file between the two procedure bodies.
+GDB over-compensates by placing all types in block #1, the block for
+symbols of file scope.  This is true for default, @samp{-ansi} and
+ at samp{-traditional} compiler options. (Bugs gcc/1063, gdb/1066.)
+
+ at item
+What ends the procedure scope?  Is it the proc block's @code{N_RBRAC} or the
+next @code{N_FUN}?  (I believe its the first.)
+ at end itemize
+
+ at node Stab Sections
+ at appendix Using Stabs in Their Own Sections
+
+Many object file formats allow tools to create object files with custom
+sections containing any arbitrary data.  For any such object file
+format, stabs can be embedded in special sections.  This is how stabs
+are used with ELF and SOM, and aside from ECOFF and XCOFF, is how stabs
+are used with COFF.
+
+ at menu
+* Stab Section Basics::    How to embed stabs in sections
+* ELF Linker Relocation::  Sun ELF hacks
+ at end menu
+
+ at node Stab Section Basics
+ at appendixsec How to Embed Stabs in Sections
+
+The assembler creates two custom sections, a section named @code{.stab}
+which contains an array of fixed length structures, one struct per stab,
+and a section named @code{.stabstr} containing all the variable length
+strings that are referenced by stabs in the @code{.stab} section.  The
+byte order of the stabs binary data depends on the object file format.
+For ELF, it matches the byte order of the ELF file itself, as determined
+from the @code{EI_DATA} field in the @code{e_ident} member of the ELF
+header.  For SOM, it is always big-endian (is this true??? FIXME).  For
+COFF, it matches the byte order of the COFF headers.  The meaning of the
+fields is the same as for a.out (@pxref{Symbol Table Format}), except
+that the @code{n_strx} field is relative to the strings for the current
+compilation unit (which can be found using the synthetic N_UNDF stab
+described below), rather than the entire string table.
+
+The first stab in the @code{.stab} section for each compilation unit is
+synthetic, generated entirely by the assembler, with no corresponding
+ at code{.stab} directive as input to the assembler.  This stab contains
+the following fields:
+
+ at table @code
+ at item n_strx
+Offset in the @code{.stabstr} section to the source filename.
+
+ at item n_type
+ at code{N_UNDF}.
+
+ at item n_other
+Unused field, always zero.
+This may eventually be used to hold overflows from the count in
+the @code{n_desc} field.
+
+ at item n_desc
+Count of upcoming symbols, i.e., the number of remaining stabs for this
+source file.
+
+ at item n_value
+Size of the string table fragment associated with this source file, in
+bytes.
+ at end table
+
+The @code{.stabstr} section always starts with a null byte (so that string
+offsets of zero reference a null string), followed by random length strings,
+each of which is null byte terminated.
+
+The ELF section header for the @code{.stab} section has its
+ at code{sh_link} member set to the section number of the @code{.stabstr}
+section, and the @code{.stabstr} section has its ELF section
+header @code{sh_type} member set to @code{SHT_STRTAB} to mark it as a
+string table.  SOM and COFF have no way of linking the sections together
+or marking them as string tables.
+
+For COFF, the @code{.stab} and @code{.stabstr} sections may be simply
+concatenated by the linker.  GDB then uses the @code{n_desc} fields to
+figure out the extent of the original sections.  Similarly, the
+ at code{n_value} fields of the header symbols are added together in order
+to get the actual position of the strings in a desired @code{.stabstr}
+section.  Although this design obviates any need for the linker to
+relocate or otherwise manipulate @code{.stab} and @code{.stabstr}
+sections, it also requires some care to ensure that the offsets are
+calculated correctly.  For instance, if the linker were to pad in
+between the @code{.stabstr} sections before concatenating, then the
+offsets to strings in the middle of the executable's @code{.stabstr}
+section would be wrong.
+
+The GNU linker is able to optimize stabs information by merging
+duplicate strings and removing duplicate header file information
+(@pxref{Include Files}).  When some versions of the GNU linker optimize
+stabs in sections, they remove the leading @code{N_UNDF} symbol and
+arranges for all the @code{n_strx} fields to be relative to the start of
+the @code{.stabstr} section.
+
+ at node ELF Linker Relocation
+ at appendixsec Having the Linker Relocate Stabs in ELF 
+
+This section describes some Sun hacks for Stabs in ELF; it does not
+apply to COFF or SOM.
+
+To keep linking fast, you don't want the linker to have to relocate very
+many stabs.  Making sure this is done for @code{N_SLINE},
+ at code{N_RBRAC}, and @code{N_LBRAC} stabs is the most important thing
+(see the descriptions of those stabs for more information).  But Sun's
+stabs in ELF has taken this further, to make all addresses in the
+ at code{n_value} field (functions and static variables) relative to the
+source file.  For the @code{N_SO} symbol itself, Sun simply omits the
+address.  To find the address of each section corresponding to a given
+source file, the compiler puts out symbols giving the address of each
+section for a given source file.  Since these are ELF (not stab)
+symbols, the linker relocates them correctly without having to touch the
+stabs section.  They are named @code{Bbss.bss} for the bss section,
+ at code{Ddata.data} for the data section, and @code{Drodata.rodata} for
+the rodata section.  For the text section, there is no such symbol (but
+there should be, see below).  For an example of how these symbols work,
+ at xref{Stab Section Transformations}.  GCC does not provide these symbols;
+it instead relies on the stabs getting relocated.  Thus addresses which
+would normally be relative to @code{Bbss.bss}, etc., are already
+relocated.  The Sun linker provided with Solaris 2.2 and earlier
+relocates stabs using normal ELF relocation information, as it would do
+for any section.  Sun has been threatening to kludge their linker to not
+do this (to speed up linking), even though the correct way to avoid
+having the linker do these relocations is to have the compiler no longer
+output relocatable values.  Last I heard they had been talked out of the
+linker kludge.  See Sun point patch 101052-01 and Sun bug 1142109.  With
+the Sun compiler this affects @samp{S} symbol descriptor stabs
+(@pxref{Statics}) and functions (@pxref{Procedures}).  In the latter
+case, to adopt the clean solution (making the value of the stab relative
+to the start of the compilation unit), it would be necessary to invent a
+ at code{Ttext.text} symbol, analogous to the @code{Bbss.bss}, etc.,
+symbols.  I recommend this rather than using a zero value and getting
+the address from the ELF symbols.
+
+Finding the correct @code{Bbss.bss}, etc., symbol is difficult, because
+the linker simply concatenates the @code{.stab} sections from each
+ at file{.o} file without including any information about which part of a
+ at code{.stab} section comes from which @file{.o} file.  The way GDB does
+this is to look for an ELF @code{STT_FILE} symbol which has the same
+name as the last component of the file name from the @code{N_SO} symbol
+in the stabs (for example, if the file name is @file{../../gdb/main.c},
+it looks for an ELF @code{STT_FILE} symbol named @code{main.c}).  This
+loses if different files have the same name (they could be in different
+directories, a library could have been copied from one system to
+another, etc.).  It would be much cleaner to have the @code{Bbss.bss}
+symbols in the stabs themselves.  Having the linker relocate them there
+is no more work than having the linker relocate ELF symbols, and it
+solves the problem of having to associate the ELF and stab symbols.
+However, no one has yet designed or implemented such a scheme.
+
+ at node GNU Free Documentation License
+ at appendix GNU Free Documentation License
+ at include fdl.texi
+
+ at node Symbol Types Index
+ at unnumbered Symbol Types Index
+
+ at printindex fn
+
+ at bye
diff --git a/gdb/dummy-frame.c b/gdb/dummy-frame.c
index 4a42a76..b8a8c86 100644
--- a/gdb/dummy-frame.c
+++ b/gdb/dummy-frame.c
@@ -29,6 +29,7 @@
 #include "gdbcmd.h"
 #include "gdb_string.h"
 #include "observer.h"
+#include "gdbthread.h"
 
 /* Dummy frame.  This saves the processor state just prior to setting
    up the inferior function call.  Older targets save the registers
@@ -108,19 +109,44 @@ remove_dummy_frame (struct dummy_frame **dummy_ptr)
   xfree (dummy);
 }
 
+/* Delete any breakpoint B which is a momentary breakpoint for return from
+   inferior call matching DUMMY_VOIDP.  */
+
+static int
+pop_dummy_frame_bpt (struct breakpoint *b, void *dummy_voidp)
+{
+  struct dummy_frame *dummy = dummy_voidp;
+
+  if (b->thread == pid_to_thread_id (inferior_ptid)
+      && b->disposition == disp_del && frame_id_eq (b->frame_id, dummy->id))
+    {
+      while (b->related_breakpoint != b)
+	delete_breakpoint (b->related_breakpoint);
+
+      delete_breakpoint (b);
+
+      /* Stop the traversal.  */
+      return 1;
+    }
+
+  /* Continue the traversal.  */
+  return 0;
+}
+
 /* Pop *DUMMY_PTR, restoring program state to that before the
    frame was created.  */
 
 static void
 pop_dummy_frame (struct dummy_frame **dummy_ptr)
 {
-  struct dummy_frame *dummy;
+  struct dummy_frame *dummy = *dummy_ptr;
+
+  restore_infcall_suspend_state (dummy->caller_state);
 
-  restore_infcall_suspend_state ((*dummy_ptr)->caller_state);
+  iterate_over_breakpoints (pop_dummy_frame_bpt, dummy);
 
   /* restore_infcall_control_state frees inf_state,
      all that remains is to pop *dummy_ptr.  */
-  dummy = *dummy_ptr;
   *dummy_ptr = dummy->next;
   xfree (dummy);
 
@@ -166,9 +192,22 @@ dummy_frame_pop (struct frame_id dummy_id)
   pop_dummy_frame (dp);
 }
 
-/* There may be stale dummy frames, perhaps left over from when a longjump took
-   us out of a function that was called by the debugger.  Clean them up at
-   least once whenever we start a new inferior.  */
+/* Drop dummy frame DUMMY_ID.  Do nothing if it is not found.  Do not restore
+   its state into inferior, just free its memory.  */
+
+void
+dummy_frame_discard (struct frame_id dummy_id)
+{
+  struct dummy_frame **dp;
+
+  dp = lookup_dummy_frame (dummy_id);
+  if (dp)
+    remove_dummy_frame (dp);
+}
+
+/* There may be stale dummy frames, perhaps left over from when an uncaught
+   longjmp took us out of a function that was called by the debugger.  Clean
+   them up at least once whenever we start a new inferior.  */
 
 static void
 cleanup_dummy_frames (struct target_ops *target, int from_tty)
diff --git a/gdb/dummy-frame.h b/gdb/dummy-frame.h
index a921e92..1b3979d 100644
--- a/gdb/dummy-frame.h
+++ b/gdb/dummy-frame.h
@@ -52,6 +52,8 @@ extern void dummy_frame_push (struct infcall_suspend_state *caller_state,
 
 extern void dummy_frame_pop (struct frame_id dummy_id);
 
+extern void dummy_frame_discard (struct frame_id dummy_id);
+
 /* If the PC falls in a dummy frame, return a dummy frame
    unwinder.  */
 
diff --git a/gdb/dwarf2-frame-tailcall.c b/gdb/dwarf2-frame-tailcall.c
index 912cdf4..fcfeaf4 100644
--- a/gdb/dwarf2-frame-tailcall.c
+++ b/gdb/dwarf2-frame-tailcall.c
@@ -236,7 +236,6 @@ pretend_pc (struct frame_info *this_frame, struct tailcall_cache *cache)
 {
   int next_levels = existing_next_levels (this_frame, cache);
   struct call_site_chain *chain = cache->chain;
-  int caller_no;
 
   gdb_assert (chain != NULL);
 
@@ -367,10 +366,9 @@ dwarf2_tailcall_sniffer_first (struct frame_info *this_frame,
 {
   CORE_ADDR prev_pc = 0, prev_sp = 0;	/* GCC warning.  */
   int prev_sp_p = 0;
-  CORE_ADDR this_pc, pc;
+  CORE_ADDR this_pc;
   struct gdbarch *prev_gdbarch;
   struct call_site_chain *chain = NULL;
-  struct frame_info *fi;
   struct tailcall_cache *cache;
   volatile struct gdb_exception except;
 
diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c
index 88aa338..986aaea 100644
--- a/gdb/dwarf2-frame.c
+++ b/gdb/dwarf2-frame.c
@@ -68,8 +68,8 @@ struct dwarf2_cie
   ULONGEST return_address_register;
 
   /* Instruction sequence to initialize a register set.  */
-  gdb_byte *initial_instructions;
-  gdb_byte *end;
+  const gdb_byte *initial_instructions;
+  const gdb_byte *end;
 
   /* Saved augmentation, in case it's needed later.  */
   char *augmentation;
@@ -116,8 +116,8 @@ struct dwarf2_fde
   CORE_ADDR address_range;
 
   /* Instruction sequence.  */
-  gdb_byte *instructions;
-  gdb_byte *end;
+  const gdb_byte *instructions;
+  const gdb_byte *end;
 
   /* True if this FDE is read from a .eh_frame instead of a .debug_frame
      section.  */
@@ -354,7 +354,8 @@ static const struct dwarf_expr_context_funcs dwarf2_frame_ctx_funcs =
   ctx_no_get_tls_address,
   ctx_no_dwarf_call,
   ctx_no_get_base_type,
-  ctx_no_push_dwarf_reg_entry_value
+  ctx_no_push_dwarf_reg_entry_value,
+  ctx_no_get_addr_index
 };
 
 static CORE_ADDR
@@ -415,8 +416,8 @@ execute_cfa_program (struct dwarf2_fde *fde, const gdb_byte *insn_ptr,
   while (insn_ptr < insn_end && fs->pc <= pc)
     {
       gdb_byte insn = *insn_ptr++;
-      ULONGEST utmp, reg;
-      LONGEST offset;
+      uint64_t utmp, reg;
+      int64_t offset;
 
       if ((insn & 0xc0) == DW_CFA_advance_loc)
 	fs->pc += (insn & 0x3f) * fs->code_align;
@@ -424,7 +425,7 @@ execute_cfa_program (struct dwarf2_fde *fde, const gdb_byte *insn_ptr,
 	{
 	  reg = insn & 0x3f;
 	  reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
-	  insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
+	  insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
 	  offset = utmp * fs->data_align;
 	  dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
 	  fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
@@ -466,9 +467,9 @@ execute_cfa_program (struct dwarf2_fde *fde, const gdb_byte *insn_ptr,
 	      break;
 
 	    case DW_CFA_offset_extended:
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
 	      reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
 	      offset = utmp * fs->data_align;
 	      dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
 	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
@@ -476,28 +477,28 @@ execute_cfa_program (struct dwarf2_fde *fde, const gdb_byte *insn_ptr,
 	      break;
 
 	    case DW_CFA_restore_extended:
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
 	      dwarf2_restore_rule (gdbarch, reg, fs, eh_frame_p);
 	      break;
 
 	    case DW_CFA_undefined:
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
 	      reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
 	      dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
 	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_UNDEFINED;
 	      break;
 
 	    case DW_CFA_same_value:
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
 	      reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
 	      dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
 	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAME_VALUE;
 	      break;
 
 	    case DW_CFA_register:
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
 	      reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
 	      utmp = dwarf2_frame_adjust_regnum (gdbarch, utmp, eh_frame_p);
 	      dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
 	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_REG;
@@ -535,8 +536,9 @@ bad CFI data; mismatched DW_CFA_restore_state at %s"),
 	      break;
 
 	    case DW_CFA_def_cfa:
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &fs->regs.cfa_reg);
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
+	      fs->regs.cfa_reg = reg;
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
 
 	      if (fs->armcc_cfa_offsets_sf)
 		utmp *= fs->data_align;
@@ -546,15 +548,14 @@ bad CFI data; mismatched DW_CFA_restore_state at %s"),
 	      break;
 
 	    case DW_CFA_def_cfa_register:
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &fs->regs.cfa_reg);
-	      fs->regs.cfa_reg = dwarf2_frame_adjust_regnum (gdbarch,
-                                                             fs->regs.cfa_reg,
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
+	      fs->regs.cfa_reg = dwarf2_frame_adjust_regnum (gdbarch, reg,
                                                              eh_frame_p);
 	      fs->regs.cfa_how = CFA_REG_OFFSET;
 	      break;
 
 	    case DW_CFA_def_cfa_offset:
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
 
 	      if (fs->armcc_cfa_offsets_sf)
 		utmp *= fs->data_align;
@@ -567,18 +568,18 @@ bad CFI data; mismatched DW_CFA_restore_state at %s"),
 	      break;
 
 	    case DW_CFA_def_cfa_expression:
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end,
-                                       &fs->regs.cfa_exp_len);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
+	      fs->regs.cfa_exp_len = utmp;
 	      fs->regs.cfa_exp = insn_ptr;
 	      fs->regs.cfa_how = CFA_EXP;
 	      insn_ptr += fs->regs.cfa_exp_len;
 	      break;
 
 	    case DW_CFA_expression:
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
 	      reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
 	      dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
 	      fs->regs.reg[reg].loc.exp = insn_ptr;
 	      fs->regs.reg[reg].exp_len = utmp;
 	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_EXP;
@@ -586,9 +587,9 @@ bad CFI data; mismatched DW_CFA_restore_state at %s"),
 	      break;
 
 	    case DW_CFA_offset_extended_sf:
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
 	      reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
-	      insn_ptr = read_sleb128 (insn_ptr, insn_end, &offset);
+	      insn_ptr = safe_read_sleb128 (insn_ptr, insn_end, &offset);
 	      offset *= fs->data_align;
 	      dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
 	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
@@ -596,27 +597,27 @@ bad CFI data; mismatched DW_CFA_restore_state at %s"),
 	      break;
 
 	    case DW_CFA_val_offset:
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
 	      dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
 	      offset = utmp * fs->data_align;
 	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_OFFSET;
 	      fs->regs.reg[reg].loc.offset = offset;
 	      break;
 
 	    case DW_CFA_val_offset_sf:
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
 	      dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
-	      insn_ptr = read_sleb128 (insn_ptr, insn_end, &offset);
+	      insn_ptr = safe_read_sleb128 (insn_ptr, insn_end, &offset);
 	      offset *= fs->data_align;
 	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_OFFSET;
 	      fs->regs.reg[reg].loc.offset = offset;
 	      break;
 
 	    case DW_CFA_val_expression:
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
 	      dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
 	      fs->regs.reg[reg].loc.exp = insn_ptr;
 	      fs->regs.reg[reg].exp_len = utmp;
 	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_EXP;
@@ -624,17 +625,16 @@ bad CFI data; mismatched DW_CFA_restore_state at %s"),
 	      break;
 
 	    case DW_CFA_def_cfa_sf:
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &fs->regs.cfa_reg);
-	      fs->regs.cfa_reg = dwarf2_frame_adjust_regnum (gdbarch,
-                                                             fs->regs.cfa_reg,
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
+	      fs->regs.cfa_reg = dwarf2_frame_adjust_regnum (gdbarch, reg,
                                                              eh_frame_p);
-	      insn_ptr = read_sleb128 (insn_ptr, insn_end, &offset);
+	      insn_ptr = safe_read_sleb128 (insn_ptr, insn_end, &offset);
 	      fs->regs.cfa_offset = offset * fs->data_align;
 	      fs->regs.cfa_how = CFA_REG_OFFSET;
 	      break;
 
 	    case DW_CFA_def_cfa_offset_sf:
-	      insn_ptr = read_sleb128 (insn_ptr, insn_end, &offset);
+	      insn_ptr = safe_read_sleb128 (insn_ptr, insn_end, &offset);
 	      fs->regs.cfa_offset = offset * fs->data_align;
 	      /* cfa_how deliberately not set.  */
 	      break;
@@ -666,13 +666,13 @@ bad CFI data; mismatched DW_CFA_restore_state at %s"),
 
 	    case DW_CFA_GNU_args_size:
 	      /* Ignored.  */
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &utmp);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp);
 	      break;
 
 	    case DW_CFA_GNU_negative_offset_extended:
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &reg);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &reg);
 	      reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p);
-	      insn_ptr = read_uleb128 (insn_ptr, insn_end, &offset);
+	      insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &offset);
 	      offset *= fs->data_align;
 	      dwarf2_frame_state_alloc_regs (&fs->regs, reg + 1);
 	      fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
@@ -891,7 +891,7 @@ dwarf2_compile_cfa_to_ax (struct agent_expr *expr, struct axs_value *loc,
   const int num_regs = gdbarch_num_regs (gdbarch)
 		       + gdbarch_num_pseudo_regs (gdbarch);
   struct dwarf2_fde *fde;
-  CORE_ADDR text_offset, cfa;
+  CORE_ADDR text_offset;
   struct dwarf2_frame_state fs;
   int addr_size;
 
@@ -994,10 +994,20 @@ struct dwarf2_frame_cache
   void *tailcall_cache;
 };
 
+/* A cleanup that sets a pointer to NULL.  */
+
+static void
+clear_pointer_cleanup (void *arg)
+{
+  void **ptr = arg;
+
+  *ptr = NULL;
+}
+
 static struct dwarf2_frame_cache *
 dwarf2_frame_cache (struct frame_info *this_frame, void **this_cache)
 {
-  struct cleanup *old_chain;
+  struct cleanup *reset_cache_cleanup, *old_chain;
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   const int num_regs = gdbarch_num_regs (gdbarch)
 		       + gdbarch_num_pseudo_regs (gdbarch);
@@ -1017,6 +1027,7 @@ dwarf2_frame_cache (struct frame_info *this_frame, void **this_cache)
   cache = FRAME_OBSTACK_ZALLOC (struct dwarf2_frame_cache);
   cache->reg = FRAME_OBSTACK_CALLOC (num_regs, struct dwarf2_frame_state_reg);
   *this_cache = cache;
+  reset_cache_cleanup = make_cleanup (clear_pointer_cleanup, this_cache);
 
   /* Allocate and initialize the frame state.  */
   fs = XZALLOC (struct dwarf2_frame_state);
@@ -1110,6 +1121,8 @@ dwarf2_frame_cache (struct frame_info *this_frame, void **this_cache)
       if (ex.error == NOT_AVAILABLE_ERROR)
 	{
 	  cache->unavailable_retaddr = 1;
+	  do_cleanups (old_chain);
+	  discard_cleanups (reset_cache_cleanup);
 	  return cache;
 	}
 
@@ -1225,6 +1238,7 @@ incomplete CFI data; unspecified registers (e.g., %s) at %s"),
 				 (entry_cfa_sp_offset_p
 				  ? &entry_cfa_sp_offset : NULL));
 
+  discard_cleanups (reset_cache_cleanup);
   return cache;
 }
 
@@ -1490,88 +1504,36 @@ dwarf2_frame_cfa (struct frame_info *this_frame)
   if (!frame_unwinder_is (this_frame, &dwarf2_frame_unwind)
       && !frame_unwinder_is (this_frame, &dwarf2_tailcall_frame_unwind))
     error (_("can't compute CFA for this frame"));
+  if (get_frame_unwind_stop_reason (this_frame) == UNWIND_UNAVAILABLE)
+    throw_error (NOT_AVAILABLE_ERROR,
+		 _("can't compute CFA for this frame: "
+		   "required registers or memory are unavailable"));
   return get_frame_base (this_frame);
 }
 

 const struct objfile_data *dwarf2_frame_objfile_data;
 
 static unsigned int
-read_1_byte (bfd *abfd, gdb_byte *buf)
+read_1_byte (bfd *abfd, const gdb_byte *buf)
 {
   return bfd_get_8 (abfd, buf);
 }
 
 static unsigned int
-read_4_bytes (bfd *abfd, gdb_byte *buf)
+read_4_bytes (bfd *abfd, const gdb_byte *buf)
 {
   return bfd_get_32 (abfd, buf);
 }
 
 static ULONGEST
-read_8_bytes (bfd *abfd, gdb_byte *buf)
+read_8_bytes (bfd *abfd, const gdb_byte *buf)
 {
   return bfd_get_64 (abfd, buf);
 }
 
 static ULONGEST
-read_unsigned_leb128 (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
-{
-  ULONGEST result;
-  unsigned int num_read;
-  int shift;
-  gdb_byte byte;
-
-  result = 0;
-  shift = 0;
-  num_read = 0;
-
-  do
-    {
-      byte = bfd_get_8 (abfd, (bfd_byte *) buf);
-      buf++;
-      num_read++;
-      result |= ((byte & 0x7f) << shift);
-      shift += 7;
-    }
-  while (byte & 0x80);
-
-  *bytes_read_ptr = num_read;
-
-  return result;
-}
-
-static LONGEST
-read_signed_leb128 (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
-{
-  LONGEST result;
-  int shift;
-  unsigned int num_read;
-  gdb_byte byte;
-
-  result = 0;
-  shift = 0;
-  num_read = 0;
-
-  do
-    {
-      byte = bfd_get_8 (abfd, (bfd_byte *) buf);
-      buf++;
-      num_read++;
-      result |= ((byte & 0x7f) << shift);
-      shift += 7;
-    }
-  while (byte & 0x80);
-
-  if (shift < 8 * sizeof (result) && (byte & 0x40))
-    result |= -(((LONGEST)1) << shift);
-
-  *bytes_read_ptr = num_read;
-
-  return result;
-}
-
-static ULONGEST
-read_initial_length (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
+read_initial_length (bfd *abfd, const gdb_byte *buf,
+		     unsigned int *bytes_read_ptr)
 {
   LONGEST result;
 
@@ -1680,10 +1642,10 @@ read_encoded_value (struct comp_unit *unit, gdb_byte encoding,
     {
     case DW_EH_PE_uleb128:
       {
-	ULONGEST value;
+	uint64_t value;
 	const gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7;
 
-	*bytes_read_ptr += read_uleb128 (buf, end_buf, &value) - buf;
+	*bytes_read_ptr += safe_read_uleb128 (buf, end_buf, &value) - buf;
 	return base + value;
       }
     case DW_EH_PE_udata2:
@@ -1697,10 +1659,10 @@ read_encoded_value (struct comp_unit *unit, gdb_byte encoding,
       return (base + bfd_get_64 (unit->abfd, (bfd_byte *) buf));
     case DW_EH_PE_sleb128:
       {
-	LONGEST value;
+	int64_t value;
 	const gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7;
 
-	*bytes_read_ptr += read_sleb128 (buf, end_buf, &value) - buf;
+	*bytes_read_ptr += safe_read_sleb128 (buf, end_buf, &value) - buf;
 	return base + value;
       }
     case DW_EH_PE_sdata2:
@@ -1858,28 +1820,32 @@ enum eh_frame_type
   EH_CIE_OR_FDE_TYPE_ID = EH_CIE_TYPE_ID | EH_FDE_TYPE_ID
 };
 
-static gdb_byte *decode_frame_entry (struct comp_unit *unit, gdb_byte *start,
-				     int eh_frame_p,
-                                     struct dwarf2_cie_table *cie_table,
-                                     struct dwarf2_fde_table *fde_table,
-                                     enum eh_frame_type entry_type);
+static const gdb_byte *decode_frame_entry (struct comp_unit *unit,
+					   const gdb_byte *start,
+					   int eh_frame_p,
+					   struct dwarf2_cie_table *cie_table,
+					   struct dwarf2_fde_table *fde_table,
+					   enum eh_frame_type entry_type);
 
 /* Decode the next CIE or FDE, entry_type specifies the expected type.
    Return NULL if invalid input, otherwise the next byte to be processed.  */
 
-static gdb_byte *
-decode_frame_entry_1 (struct comp_unit *unit, gdb_byte *start, int eh_frame_p,
+static const gdb_byte *
+decode_frame_entry_1 (struct comp_unit *unit, const gdb_byte *start,
+		      int eh_frame_p,
                       struct dwarf2_cie_table *cie_table,
                       struct dwarf2_fde_table *fde_table,
                       enum eh_frame_type entry_type)
 {
   struct gdbarch *gdbarch = get_objfile_arch (unit->objfile);
-  gdb_byte *buf, *end;
+  const gdb_byte *buf, *end;
   LONGEST length;
   unsigned int bytes_read;
   int dwarf64_p;
   ULONGEST cie_id;
   ULONGEST cie_pointer;
+  int64_t sleb128;
+  uint64_t uleb128;
 
   buf = start;
   length = read_initial_length (unit->abfd, buf, &bytes_read);
@@ -1995,37 +1961,41 @@ decode_frame_entry_1 (struct comp_unit *unit, gdb_byte *start, int eh_frame_p,
       else
 	cie->ptr_size = cie->addr_size;
 
-      cie->code_alignment_factor =
-	read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
-      buf += bytes_read;
+      buf = gdb_read_uleb128 (buf, end, &uleb128);
+      if (buf == NULL)
+	return NULL;
+      cie->code_alignment_factor = uleb128;
 
-      cie->data_alignment_factor =
-	read_signed_leb128 (unit->abfd, buf, &bytes_read);
-      buf += bytes_read;
+      buf = gdb_read_sleb128 (buf, end, &sleb128);
+      if (buf == NULL)
+	return NULL;
+      cie->data_alignment_factor = sleb128;
 
       if (cie_version == 1)
 	{
 	  cie->return_address_register = read_1_byte (unit->abfd, buf);
-	  bytes_read = 1;
+	  ++buf;
 	}
       else
-	cie->return_address_register = read_unsigned_leb128 (unit->abfd, buf,
-							     &bytes_read);
+	{
+	  buf = gdb_read_uleb128 (buf, end, &uleb128);
+	  if (buf == NULL)
+	    return NULL;
+	  cie->return_address_register = uleb128;
+	}
+
       cie->return_address_register
 	= dwarf2_frame_adjust_regnum (gdbarch,
 				      cie->return_address_register,
 				      eh_frame_p);
 
-      buf += bytes_read;
-
       cie->saw_z_augmentation = (*augmentation == 'z');
       if (cie->saw_z_augmentation)
 	{
-	  ULONGEST length;
+	  uint64_t length;
 
-	  length = read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
-	  buf += bytes_read;
-	  if (buf > end)
+	  buf = gdb_read_uleb128 (buf, end, &length);
+	  if (buf == NULL)
 	    return NULL;
 	  cie->initial_instructions = buf + length;
 	  augmentation++;
@@ -2139,10 +2109,12 @@ decode_frame_entry_1 (struct comp_unit *unit, gdb_byte *start, int eh_frame_p,
 	 can skip the whole thing.  */
       if (fde->cie->saw_z_augmentation)
 	{
-	  ULONGEST length;
+	  uint64_t length;
 
-	  length = read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
-	  buf += bytes_read + length;
+	  buf = gdb_read_uleb128 (buf, end, &length);
+	  if (buf == NULL)
+	    return NULL;
+	  buf += length;
 	  if (buf > end)
 	    return NULL;
 	}
@@ -2161,14 +2133,15 @@ decode_frame_entry_1 (struct comp_unit *unit, gdb_byte *start, int eh_frame_p,
 /* Read a CIE or FDE in BUF and decode it. Entry_type specifies whether we
    expect an FDE or a CIE.  */
 
-static gdb_byte *
-decode_frame_entry (struct comp_unit *unit, gdb_byte *start, int eh_frame_p,
+static const gdb_byte *
+decode_frame_entry (struct comp_unit *unit, const gdb_byte *start,
+		    int eh_frame_p,
                     struct dwarf2_cie_table *cie_table,
                     struct dwarf2_fde_table *fde_table,
                     enum eh_frame_type entry_type)
 {
   enum { NONE, ALIGN4, ALIGN8, FAIL } workaround = NONE;
-  gdb_byte *ret;
+  const gdb_byte *ret;
   ptrdiff_t start_offset;
 
   while (1)
@@ -2280,7 +2253,7 @@ void
 dwarf2_build_frame_info (struct objfile *objfile)
 {
   struct comp_unit *unit;
-  gdb_byte *frame_ptr;
+  const gdb_byte *frame_ptr;
   struct dwarf2_cie_table cie_table;
   struct dwarf2_fde_table fde_table;
   struct dwarf2_fde_table *fde_table2;
diff --git a/gdb/dwarf2expr.c b/gdb/dwarf2expr.c
index 222fcc3..214b371 100644
--- a/gdb/dwarf2expr.c
+++ b/gdb/dwarf2expr.c
@@ -342,7 +342,7 @@ add_piece (struct dwarf_expr_context *ctx, ULONGEST size, ULONGEST offset)
     }
   else if (p->location == DWARF_VALUE_IMPLICIT_POINTER)
     {
-      p->v.ptr.die = ctx->len;
+      p->v.ptr.die.cu_off = ctx->len;
       p->v.ptr.offset = value_as_long (dwarf_expr_fetch (ctx, 0));
     }
   else if (p->location == DWARF_VALUE_REGISTER)
@@ -369,60 +369,36 @@ dwarf_expr_eval (struct dwarf_expr_context *ctx, const gdb_byte *addr,
   gdb_assert (ctx->recursion_depth == old_recursion_depth);
 }
 
-/* Decode the unsigned LEB128 constant at BUF into the variable pointed to
-   by R, and return the new value of BUF.  Verify that it doesn't extend
-   past BUF_END.  R can be NULL, the constant is then only skipped.  */
+/* Helper to read a uleb128 value or throw an error.  */
 
 const gdb_byte *
-read_uleb128 (const gdb_byte *buf, const gdb_byte *buf_end, ULONGEST * r)
+safe_read_uleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
+		   uint64_t *r)
 {
-  unsigned shift = 0;
-  ULONGEST result = 0;
-  gdb_byte byte;
-
-  while (1)
-    {
-      if (buf >= buf_end)
-	error (_("read_uleb128: Corrupted DWARF expression."));
-
-      byte = *buf++;
-      result |= ((ULONGEST) (byte & 0x7f)) << shift;
-      if ((byte & 0x80) == 0)
-	break;
-      shift += 7;
-    }
-  if (r)
-    *r = result;
+  buf = gdb_read_uleb128 (buf, buf_end, r);
+  if (buf == NULL)
+    error (_("DWARF expression error: ran off end of buffer reading uleb128 value"));
   return buf;
 }
 
-/* Decode the signed LEB128 constant at BUF into the variable pointed to
-   by R, and return the new value of BUF.  Verify that it doesn't extend
-   past BUF_END.  R can be NULL, the constant is then only skipped.  */
+/* Helper to read a sleb128 value or throw an error.  */
 
 const gdb_byte *
-read_sleb128 (const gdb_byte *buf, const gdb_byte *buf_end, LONGEST * r)
+safe_read_sleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
+		   int64_t *r)
 {
-  unsigned shift = 0;
-  LONGEST result = 0;
-  gdb_byte byte;
-
-  while (1)
-    {
-      if (buf >= buf_end)
-	error (_("read_sleb128: Corrupted DWARF expression."));
-
-      byte = *buf++;
-      result |= ((ULONGEST) (byte & 0x7f)) << shift;
-      shift += 7;
-      if ((byte & 0x80) == 0)
-	break;
-    }
-  if (shift < (sizeof (*r) * 8) && (byte & 0x40) != 0)
-    result |= -(((LONGEST) 1) << shift);
+  buf = gdb_read_sleb128 (buf, buf_end, r);
+  if (buf == NULL)
+    error (_("DWARF expression error: ran off end of buffer reading sleb128 value"));
+  return buf;
+}
 
-  if (r)
-    *r = result;
+const gdb_byte *
+safe_skip_leb128 (const gdb_byte *buf, const gdb_byte *buf_end)
+{
+  buf = gdb_skip_leb128 (buf, buf_end);
+  if (buf == NULL)
+    error (_("DWARF expression error: ran off end of buffer reading leb128 value"));
   return buf;
 }
 

@@ -464,7 +440,7 @@ base_types_equal_p (struct type *t1, struct type *t2)
    size.  */
 
 static struct type *
-dwarf_get_base_type (struct dwarf_expr_context *ctx, ULONGEST die, int size)
+dwarf_get_base_type (struct dwarf_expr_context *ctx, cu_offset die, int size)
 {
   struct type *result;
 
@@ -489,7 +465,7 @@ dwarf_get_base_type (struct dwarf_expr_context *ctx, ULONGEST die, int size)
 int
 dwarf_block_to_dwarf_reg (const gdb_byte *buf, const gdb_byte *buf_end)
 {
-  ULONGEST dwarf_reg;
+  uint64_t dwarf_reg;
 
   if (buf_end <= buf)
     return -1;
@@ -503,13 +479,19 @@ dwarf_block_to_dwarf_reg (const gdb_byte *buf, const gdb_byte *buf_end)
   if (*buf == DW_OP_GNU_regval_type)
     {
       buf++;
-      buf = read_uleb128 (buf, buf_end, &dwarf_reg);
-      buf = read_uleb128 (buf, buf_end, NULL);
+      buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg);
+      if (buf == NULL)
+	return -1;
+      buf = gdb_skip_leb128 (buf, buf_end);
+      if (buf == NULL)
+	return -1;
     }
   else if (*buf == DW_OP_regx)
     {
       buf++;
-      buf = read_uleb128 (buf, buf_end, &dwarf_reg);
+      buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg);
+      if (buf == NULL)
+	return -1;
     }
   else
     return -1;
@@ -527,31 +509,35 @@ int
 dwarf_block_to_dwarf_reg_deref (const gdb_byte *buf, const gdb_byte *buf_end,
 				CORE_ADDR *deref_size_return)
 {
-  ULONGEST dwarf_reg;
-  LONGEST offset;
+  uint64_t dwarf_reg;
+  int64_t offset;
 
   if (buf_end <= buf)
     return -1;
+
   if (*buf >= DW_OP_breg0 && *buf <= DW_OP_breg31)
     {
       dwarf_reg = *buf - DW_OP_breg0;
       buf++;
+      if (buf >= buf_end)
+	return -1;
     }
   else if (*buf == DW_OP_bregx)
     {
       buf++;
-      buf = read_uleb128 (buf, buf_end, &dwarf_reg);
+      buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg);
+      if (buf == NULL)
+	return -1;
       if ((int) dwarf_reg != dwarf_reg)
        return -1;
     }
   else
     return -1;
 
-  buf = read_sleb128 (buf, buf_end, &offset);
-  if (offset != 0)
+  buf = gdb_read_sleb128 (buf, buf_end, &offset);
+  if (buf == NULL)
     return -1;
-
-  if (buf >= buf_end)
+  if (offset != 0)
     return -1;
 
   if (*buf == DW_OP_deref)
@@ -582,7 +568,7 @@ int
 dwarf_block_to_fb_offset (const gdb_byte *buf, const gdb_byte *buf_end,
 			  CORE_ADDR *fb_offset_return)
 {
-  LONGEST fb_offset;
+  int64_t fb_offset;
 
   if (buf_end <= buf)
     return 0;
@@ -591,7 +577,9 @@ dwarf_block_to_fb_offset (const gdb_byte *buf, const gdb_byte *buf_end,
     return 0;
   buf++;
 
-  buf = read_sleb128 (buf, buf_end, &fb_offset);
+  buf = gdb_read_sleb128 (buf, buf_end, &fb_offset);
+  if (buf == NULL)
+    return 0;
   *fb_offset_return = fb_offset;
   if (buf != buf_end || fb_offset != (LONGEST) *fb_offset_return)
     return 0;
@@ -607,8 +595,8 @@ int
 dwarf_block_to_sp_offset (struct gdbarch *gdbarch, const gdb_byte *buf,
 			  const gdb_byte *buf_end, CORE_ADDR *sp_offset_return)
 {
-  ULONGEST dwarf_reg;
-  LONGEST sp_offset;
+  uint64_t dwarf_reg;
+  int64_t sp_offset;
 
   if (buf_end <= buf)
     return 0;
@@ -622,14 +610,18 @@ dwarf_block_to_sp_offset (struct gdbarch *gdbarch, const gdb_byte *buf,
       if (*buf != DW_OP_bregx)
        return 0;
       buf++;
-      buf = read_uleb128 (buf, buf_end, &dwarf_reg);
+      buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg);
+      if (buf == NULL)
+	return 0;
     }
 
   if (gdbarch_dwarf2_reg_to_regnum (gdbarch, dwarf_reg)
       != gdbarch_sp_regnum (gdbarch))
     return 0;
 
-  buf = read_sleb128 (buf, buf_end, &sp_offset);
+  buf = gdb_read_sleb128 (buf, buf_end, &sp_offset);
+  if (buf == NULL)
+    return 0;
   *sp_offset_return = sp_offset;
   if (buf != buf_end || sp_offset != (LONGEST) *sp_offset_return)
     return 0;
@@ -673,8 +665,8 @@ execute_stack_op (struct dwarf_expr_context *ctx,
 	 This is just an optimization, so it's always ok to punt
 	 and leave this as 0.  */
       int in_stack_memory = 0;
-      ULONGEST uoffset, reg;
-      LONGEST offset;
+      uint64_t uoffset, reg;
+      int64_t offset;
       struct value *result_val = NULL;
 
       /* The DWARF expression might have a bug causing an infinite
@@ -732,6 +724,18 @@ execute_stack_op (struct dwarf_expr_context *ctx,
 	  result_val = value_from_ulongest (address_type, result);
 	  break;
 
+	case DW_OP_GNU_addr_index:
+	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
+	  result = (ctx->funcs->get_addr_index) (ctx->baton, uoffset);
+	  result += ctx->offset;
+	  result_val = value_from_ulongest (address_type, result);
+	  break;
+	case DW_OP_GNU_const_index:
+	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
+	  result = (ctx->funcs->get_addr_index) (ctx->baton, uoffset);
+	  result_val = value_from_ulongest (address_type, result);
+	  break;
+
 	case DW_OP_const1u:
 	  result = extract_unsigned_integer (op_ptr, 1, byte_order);
 	  result_val = value_from_ulongest (address_type, result);
@@ -773,12 +777,12 @@ execute_stack_op (struct dwarf_expr_context *ctx,
 	  op_ptr += 8;
 	  break;
 	case DW_OP_constu:
-	  op_ptr = read_uleb128 (op_ptr, op_end, &uoffset);
+	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
 	  result = uoffset;
 	  result_val = value_from_ulongest (address_type, result);
 	  break;
 	case DW_OP_consts:
-	  op_ptr = read_sleb128 (op_ptr, op_end, &offset);
+	  op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
 	  result = offset;
 	  result_val = value_from_ulongest (address_type, result);
 	  break;
@@ -831,7 +835,7 @@ execute_stack_op (struct dwarf_expr_context *ctx,
 	  break;
 
 	case DW_OP_regx:
-	  op_ptr = read_uleb128 (op_ptr, op_end, &reg);
+	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
 	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
 
 	  result = reg;
@@ -841,9 +845,9 @@ execute_stack_op (struct dwarf_expr_context *ctx,
 
 	case DW_OP_implicit_value:
 	  {
-	    ULONGEST len;
+	    uint64_t len;
 
-	    op_ptr = read_uleb128 (op_ptr, op_end, &len);
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &len);
 	    if (op_ptr + len > op_end)
 	      error (_("DW_OP_implicit_value: too few bytes available."));
 	    ctx->len = len;
@@ -862,20 +866,19 @@ execute_stack_op (struct dwarf_expr_context *ctx,
 
 	case DW_OP_GNU_implicit_pointer:
 	  {
-	    ULONGEST die;
-	    LONGEST len;
+	    int64_t len;
 
 	    if (ctx->ref_addr_size == -1)
 	      error (_("DWARF-2 expression error: DW_OP_GNU_implicit_pointer "
 		       "is not allowed in frame context"));
 
-	    /* The referred-to DIE.  */
+	    /* The referred-to DIE of cu_offset kind.  */
 	    ctx->len = extract_unsigned_integer (op_ptr, ctx->ref_addr_size,
 						 byte_order);
 	    op_ptr += ctx->ref_addr_size;
 
 	    /* The byte offset into the data.  */
-	    op_ptr = read_sleb128 (op_ptr, op_end, &len);
+	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &len);
 	    result = (ULONGEST) len;
 	    result_val = value_from_ulongest (address_type, result);
 
@@ -918,7 +921,7 @@ execute_stack_op (struct dwarf_expr_context *ctx,
 	case DW_OP_breg30:
 	case DW_OP_breg31:
 	  {
-	    op_ptr = read_sleb128 (op_ptr, op_end, &offset);
+	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
 	    result = (ctx->funcs->read_reg) (ctx->baton, op - DW_OP_breg0);
 	    result += offset;
 	    result_val = value_from_ulongest (address_type, result);
@@ -926,8 +929,8 @@ execute_stack_op (struct dwarf_expr_context *ctx,
 	  break;
 	case DW_OP_bregx:
 	  {
-	    op_ptr = read_uleb128 (op_ptr, op_end, &reg);
-	    op_ptr = read_sleb128 (op_ptr, op_end, &offset);
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
+	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
 	    result = (ctx->funcs->read_reg) (ctx->baton, reg);
 	    result += offset;
 	    result_val = value_from_ulongest (address_type, result);
@@ -939,7 +942,7 @@ execute_stack_op (struct dwarf_expr_context *ctx,
 	    size_t datalen;
 	    unsigned int before_stack_len;
 
-	    op_ptr = read_sleb128 (op_ptr, op_end, &offset);
+	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
 	    /* Rather than create a whole new context, we simply
 	       record the stack length before execution, then reset it
 	       afterwards, effectively erasing whatever the recursive
@@ -1031,9 +1034,10 @@ execute_stack_op (struct dwarf_expr_context *ctx,
 
 	    if (op == DW_OP_GNU_deref_type)
 	      {
-		ULONGEST type_die;
+		cu_offset type_die;
 
-		op_ptr = read_uleb128 (op_ptr, op_end, &type_die);
+		op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
+		type_die.cu_off = uoffset;
 		type = dwarf_get_base_type (ctx, type_die, 0);
 	      }
 	    else
@@ -1083,7 +1087,7 @@ execute_stack_op (struct dwarf_expr_context *ctx,
 	      case DW_OP_plus_uconst:
 		dwarf_require_integral (value_type (result_val));
 		result = value_as_long (result_val);
-		op_ptr = read_uleb128 (op_ptr, op_end, &reg);
+		op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
 		result += reg;
 		result_val = value_from_ulongest (address_type, result);
 		break;
@@ -1293,10 +1297,10 @@ execute_stack_op (struct dwarf_expr_context *ctx,
 
         case DW_OP_piece:
           {
-            ULONGEST size;
+            uint64_t size;
 
             /* Record the piece.  */
-            op_ptr = read_uleb128 (op_ptr, op_end, &size);
+            op_ptr = safe_read_uleb128 (op_ptr, op_end, &size);
 	    add_piece (ctx, 8 * size, 0);
 
             /* Pop off the address/regnum, and reset the location
@@ -1310,11 +1314,11 @@ execute_stack_op (struct dwarf_expr_context *ctx,
 
 	case DW_OP_bit_piece:
 	  {
-	    ULONGEST size, offset;
+	    uint64_t size, offset;
 
             /* Record the piece.  */
-	    op_ptr = read_uleb128 (op_ptr, op_end, &size);
-	    op_ptr = read_uleb128 (op_ptr, op_end, &offset);
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &size);
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &offset);
 	    add_piece (ctx, size, offset);
 
             /* Pop off the address/regnum, and reset the location
@@ -1335,47 +1339,57 @@ execute_stack_op (struct dwarf_expr_context *ctx,
 	  goto no_push;
 
 	case DW_OP_call2:
-	  result = extract_unsigned_integer (op_ptr, 2, byte_order);
-	  op_ptr += 2;
-	  ctx->funcs->dwarf_call (ctx, result);
+	  {
+	    cu_offset offset;
+
+	    offset.cu_off = extract_unsigned_integer (op_ptr, 2, byte_order);
+	    op_ptr += 2;
+	    ctx->funcs->dwarf_call (ctx, offset);
+	  }
 	  goto no_push;
 
 	case DW_OP_call4:
-	  result = extract_unsigned_integer (op_ptr, 4, byte_order);
-	  op_ptr += 4;
-	  ctx->funcs->dwarf_call (ctx, result);
+	  {
+	    cu_offset offset;
+
+	    offset.cu_off = extract_unsigned_integer (op_ptr, 4, byte_order);
+	    op_ptr += 4;
+	    ctx->funcs->dwarf_call (ctx, offset);
+	  }
 	  goto no_push;
 	
 	case DW_OP_GNU_entry_value:
 	  {
-	    ULONGEST len;
-	    int dwarf_reg;
+	    uint64_t len;
 	    CORE_ADDR deref_size;
+	    union call_site_parameter_u kind_u;
 
-	    op_ptr = read_uleb128 (op_ptr, op_end, &len);
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &len);
 	    if (op_ptr + len > op_end)
 	      error (_("DW_OP_GNU_entry_value: too few bytes available."));
 
-	    dwarf_reg = dwarf_block_to_dwarf_reg (op_ptr, op_ptr + len);
-	    if (dwarf_reg != -1)
+	    kind_u.dwarf_reg = dwarf_block_to_dwarf_reg (op_ptr, op_ptr + len);
+	    if (kind_u.dwarf_reg != -1)
 	      {
 		op_ptr += len;
-		ctx->funcs->push_dwarf_reg_entry_value (ctx, dwarf_reg,
-							0 /* unused */,
+		ctx->funcs->push_dwarf_reg_entry_value (ctx,
+						  CALL_SITE_PARAMETER_DWARF_REG,
+							kind_u,
 							-1 /* deref_size */);
 		goto no_push;
 	      }
 
-	    dwarf_reg = dwarf_block_to_dwarf_reg_deref (op_ptr, op_ptr + len,
-							&deref_size);
-	    if (dwarf_reg != -1)
+	    kind_u.dwarf_reg = dwarf_block_to_dwarf_reg_deref (op_ptr,
+							       op_ptr + len,
+							       &deref_size);
+	    if (kind_u.dwarf_reg != -1)
 	      {
 		if (deref_size == -1)
 		  deref_size = ctx->addr_size;
 		op_ptr += len;
-		ctx->funcs->push_dwarf_reg_entry_value (ctx, dwarf_reg,
-							0 /* unused */,
-							deref_size);
+		ctx->funcs->push_dwarf_reg_entry_value (ctx,
+						  CALL_SITE_PARAMETER_DWARF_REG,
+							kind_u, deref_size);
 		goto no_push;
 	      }
 
@@ -1384,14 +1398,29 @@ execute_stack_op (struct dwarf_expr_context *ctx,
 		     "or for DW_OP_breg*(0)+DW_OP_deref*"));
 	  }
 
+	case DW_OP_GNU_parameter_ref:
+	  {
+	    union call_site_parameter_u kind_u;
+
+	    kind_u.param_offset.cu_off = extract_unsigned_integer (op_ptr, 4,
+								   byte_order);
+	    op_ptr += 4;
+	    ctx->funcs->push_dwarf_reg_entry_value (ctx,
+					       CALL_SITE_PARAMETER_PARAM_OFFSET,
+						    kind_u,
+						    -1 /* deref_size */);
+	  }
+	  goto no_push;
+
 	case DW_OP_GNU_const_type:
 	  {
-	    ULONGEST type_die;
+	    cu_offset type_die;
 	    int n;
 	    const gdb_byte *data;
 	    struct type *type;
 
-	    op_ptr = read_uleb128 (op_ptr, op_end, &type_die);
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
+	    type_die.cu_off = uoffset;
 	    n = *op_ptr++;
 	    data = op_ptr;
 	    op_ptr += n;
@@ -1403,11 +1432,12 @@ execute_stack_op (struct dwarf_expr_context *ctx,
 
 	case DW_OP_GNU_regval_type:
 	  {
-	    ULONGEST type_die;
+	    cu_offset type_die;
 	    struct type *type;
 
-	    op_ptr = read_uleb128 (op_ptr, op_end, &reg);
-	    op_ptr = read_uleb128 (op_ptr, op_end, &type_die);
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
+	    type_die.cu_off = uoffset;
 
 	    type = dwarf_get_base_type (ctx, type_die, 0);
 	    result = (ctx->funcs->read_reg) (ctx->baton, reg);
@@ -1420,12 +1450,13 @@ execute_stack_op (struct dwarf_expr_context *ctx,
 	case DW_OP_GNU_convert:
 	case DW_OP_GNU_reinterpret:
 	  {
-	    ULONGEST type_die;
+	    cu_offset type_die;
 	    struct type *type;
 
-	    op_ptr = read_uleb128 (op_ptr, op_end, &type_die);
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
+	    type_die.cu_off = uoffset;
 
-	    if (type_die == 0)
+	    if (type_die.cu_off == 0)
 	      type = address_type;
 	    else
 	      type = dwarf_get_base_type (ctx, type_die, 0);
@@ -1506,7 +1537,7 @@ ctx_no_get_tls_address (void *baton, CORE_ADDR offset)
 /* Stub dwarf_expr_context_funcs.dwarf_call implementation.  */
 
 void
-ctx_no_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset)
+ctx_no_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset)
 {
   error (_("%s is invalid in this context"), "DW_OP_call*");
 }
@@ -1514,7 +1545,7 @@ ctx_no_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset)
 /* Stub dwarf_expr_context_funcs.get_base_type implementation.  */
 
 struct type *
-ctx_no_get_base_type (struct dwarf_expr_context *ctx, size_t die)
+ctx_no_get_base_type (struct dwarf_expr_context *ctx, cu_offset die)
 {
   error (_("Support for typed DWARF is not supported in this context"));
 }
@@ -1524,13 +1555,25 @@ ctx_no_get_base_type (struct dwarf_expr_context *ctx, size_t die)
 
 void
 ctx_no_push_dwarf_reg_entry_value (struct dwarf_expr_context *ctx,
-				   int dwarf_reg, CORE_ADDR fb_offset,
+				   enum call_site_parameter_kind kind,
+				   union call_site_parameter_u kind_u,
 				   int deref_size)
 {
   internal_error (__FILE__, __LINE__,
 		  _("Support for DW_OP_GNU_entry_value is unimplemented"));
 }
 
+/* Stub dwarf_expr_context_funcs.get_addr_index implementation.  */
+
+CORE_ADDR
+ctx_no_get_addr_index (void *baton, unsigned int index)
+{
+  error (_("%s is invalid in this context"), "DW_OP_GNU_addr_index");
+}
+
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_dwarf2expr;
+
 void
 _initialize_dwarf2expr (void)
 {
diff --git a/gdb/dwarf2expr.h b/gdb/dwarf2expr.h
index fd70bf9..19efbfd 100644
--- a/gdb/dwarf2expr.h
+++ b/gdb/dwarf2expr.h
@@ -23,6 +23,9 @@
 #if !defined (DWARF2EXPR_H)
 #define DWARF2EXPR_H
 
+#include "leb128.h"
+#include "gdbtypes.h"
+
 struct dwarf_expr_context;
 
 /* Virtual method table for struct dwarf_expr_context below.  */
@@ -53,26 +56,28 @@ struct dwarf_expr_context_funcs
   /* Execute DW_AT_location expression for the DWARF expression subroutine in
      the DIE at DIE_OFFSET in the CU from CTX.  Do not touch STACK while it
      being passed to and returned from the called DWARF subroutine.  */
-  void (*dwarf_call) (struct dwarf_expr_context *ctx, size_t die_offset);
+  void (*dwarf_call) (struct dwarf_expr_context *ctx, cu_offset die_offset);
 
   /* Return the base type given by the indicated DIE.  This can throw
      an exception if the DIE is invalid or does not represent a base
      type.  If can also be NULL in the special case where the
      callbacks are not performing evaluation, and thus it is
      meaningful to substitute a stub type of the correct size.  */
-  struct type *(*get_base_type) (struct dwarf_expr_context *ctx, size_t die);
+  struct type *(*get_base_type) (struct dwarf_expr_context *ctx, cu_offset die);
 
   /* Push on DWARF stack an entry evaluated for DW_TAG_GNU_call_site's
-     DWARF_REG/FB_OFFSET at the caller of specified BATON.  If DWARF register
-     number DWARF_REG specifying the push_dwarf_reg_entry_value parameter is
-     not -1 FB_OFFSET is ignored.  Otherwise FB_OFFSET specifies stack
-     parameter offset against caller's stack pointer (which equals the callee's
-     frame base).  If DEREF_SIZE is not -1 then use
-     DW_AT_GNU_call_site_data_value instead of DW_AT_GNU_call_site_value.  */
+     parameter matching KIND and KIND_U at the caller of specified BATON.
+     If DEREF_SIZE is not -1 then use DW_AT_GNU_call_site_data_value instead of
+     DW_AT_GNU_call_site_value.  */
   void (*push_dwarf_reg_entry_value) (struct dwarf_expr_context *ctx,
-				      int dwarf_reg, CORE_ADDR fb_offset,
+				      enum call_site_parameter_kind kind,
+				      union call_site_parameter_u kind_u,
 				      int deref_size);
 
+  /* Return the address indexed by DW_OP_GNU_addr_index.
+     This can throw an exception if the index is out of range.  */
+  CORE_ADDR (*get_addr_index) (void *baton, unsigned int index);
+
 #if 0
   /* Not yet implemented.  */
 
@@ -140,7 +145,7 @@ struct dwarf_expr_context
      context and operations depending on DW_FORM_ref_addr are not allowed.  */
   int ref_addr_size;
 
-  /* Offset used to relocate DW_OP_addr argument.  */
+  /* Offset used to relocate DW_OP_addr and DW_OP_GNU_addr_index arguments.  */
   CORE_ADDR offset;
 
   /* An opaque argument provided by the caller, which will be passed
@@ -160,7 +165,7 @@ struct dwarf_expr_context
 
   /* For DWARF_VALUE_LITERAL, the current literal value's length and
      data.  For DWARF_VALUE_IMPLICIT_POINTER, LEN is the offset of the
-     target DIE.  */
+     target DIE of cu_offset kind.  */
   ULONGEST len;
   const gdb_byte *data;
 
@@ -231,7 +236,7 @@ struct dwarf_expr_piece
     struct
     {
       /* The referent DIE from DW_OP_GNU_implicit_pointer.  */
-      ULONGEST die;
+      cu_offset die;
       /* The byte offset into the resulting data.  */
       LONGEST offset;
     } ptr;
@@ -257,14 +262,6 @@ struct value *dwarf_expr_fetch (struct dwarf_expr_context *ctx, int n);
 CORE_ADDR dwarf_expr_fetch_address (struct dwarf_expr_context *ctx, int n);
 int dwarf_expr_fetch_in_stack_memory (struct dwarf_expr_context *ctx, int n);
 
-
-const gdb_byte *read_uleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
-			      ULONGEST * r);
-const gdb_byte *read_sleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
-			      LONGEST * r);
-
-const char *dwarf_stack_op_name (unsigned int);
-
 void dwarf_expr_require_composition (const gdb_byte *, const gdb_byte *,
 				     const char *);
 
@@ -275,11 +272,14 @@ void ctx_no_get_frame_base (void *baton, const gdb_byte **start,
 CORE_ADDR ctx_no_get_frame_cfa (void *baton);
 CORE_ADDR ctx_no_get_frame_pc (void *baton);
 CORE_ADDR ctx_no_get_tls_address (void *baton, CORE_ADDR offset);
-void ctx_no_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset);
-struct type *ctx_no_get_base_type (struct dwarf_expr_context *ctx, size_t die);
+void ctx_no_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset);
+struct type *ctx_no_get_base_type (struct dwarf_expr_context *ctx,
+				   cu_offset die);
 void ctx_no_push_dwarf_reg_entry_value (struct dwarf_expr_context *ctx,
-					int dwarf_reg, CORE_ADDR fb_offset,
+					enum call_site_parameter_kind kind,
+					union call_site_parameter_u kind_u,
 					int deref_size);
+CORE_ADDR ctx_no_get_addr_index (void *baton, unsigned int index);
 
 int dwarf_block_to_dwarf_reg (const gdb_byte *buf, const gdb_byte *buf_end);
 
@@ -294,4 +294,50 @@ int dwarf_block_to_sp_offset (struct gdbarch *gdbarch, const gdb_byte *buf,
 			      const gdb_byte *buf_end,
 			      CORE_ADDR *sp_offset_return);
 
+/* Wrappers around the leb128 reader routines to simplify them for our
+   purposes.  */
+
+static inline const gdb_byte *
+gdb_read_uleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
+		  uint64_t *r)
+{
+  size_t bytes_read = read_uleb128_to_uint64 (buf, buf_end, r);
+
+  if (bytes_read == 0)
+    return NULL;
+  return buf + bytes_read;
+}
+
+static inline const gdb_byte *
+gdb_read_sleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
+		  int64_t *r)
+{
+  size_t bytes_read = read_sleb128_to_int64 (buf, buf_end, r);
+
+  if (bytes_read == 0)
+    return NULL;
+  return buf + bytes_read;
+}
+
+static inline const gdb_byte *
+gdb_skip_leb128 (const gdb_byte *buf, const gdb_byte *buf_end)
+{
+  size_t bytes_read = skip_leb128 (buf, buf_end);
+
+  if (bytes_read == 0)
+    return NULL;
+  return buf + bytes_read;
+}
+
+extern const gdb_byte *safe_read_uleb128 (const gdb_byte *buf,
+					  const gdb_byte *buf_end,
+					  uint64_t *r);
+
+extern const gdb_byte *safe_read_sleb128 (const gdb_byte *buf,
+					  const gdb_byte *buf_end,
+					  int64_t *r);
+
+extern const gdb_byte *safe_skip_leb128 (const gdb_byte *buf,
+					 const gdb_byte *buf_end);
+
 #endif /* dwarf2expr.h */
diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c
index 313df7b..38e4814 100644
--- a/gdb/dwarf2loc.c
+++ b/gdb/dwarf2loc.c
@@ -42,6 +42,8 @@
 #include "gdb_string.h"
 #include "gdb_assert.h"
 
+DEF_VEC_I(int);
+
 extern int dwarf2_always_disassemble;
 
 static void dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc,
@@ -56,6 +58,139 @@ static struct value *dwarf2_evaluate_loc_desc_full (struct type *type,
 					      struct dwarf2_per_cu_data *per_cu,
 						    LONGEST byte_offset);
 
+/* Until these have formal names, we define these here.
+   ref: http://gcc.gnu.org/wiki/DebugFission
+   Each entry in .debug_loc.dwo begins with a byte that describes the entry,
+   and is then followed by data specific to that entry.  */
+
+enum debug_loc_kind
+{
+  /* Indicates the end of the list of entries.  */
+  DEBUG_LOC_END_OF_LIST = 0,
+
+  /* This is followed by an unsigned LEB128 number that is an index into
+     .debug_addr and specifies the base address for all following entries.  */
+  DEBUG_LOC_BASE_ADDRESS = 1,
+
+  /* This is followed by two unsigned LEB128 numbers that are indices into
+     .debug_addr and specify the beginning and ending addresses, and then
+     a normal location expression as in .debug_loc.  */
+  DEBUG_LOC_START_END = 2,
+
+  /* This is followed by an unsigned LEB128 number that is an index into
+     .debug_addr and specifies the beginning address, and a 4 byte unsigned
+     number that specifies the length, and then a normal location expression
+     as in .debug_loc.  */
+  DEBUG_LOC_START_LENGTH = 3,
+
+  /* An internal value indicating there is insufficient data.  */
+  DEBUG_LOC_BUFFER_OVERFLOW = -1,
+
+  /* An internal value indicating an invalid kind of entry was found.  */
+  DEBUG_LOC_INVALID_ENTRY = -2
+};
+
+/* Decode the addresses in a non-dwo .debug_loc entry.
+   A pointer to the next byte to examine is returned in *NEW_PTR.
+   The encoded low,high addresses are return in *LOW,*HIGH.
+   The result indicates the kind of entry found.  */
+
+static enum debug_loc_kind
+decode_debug_loc_addresses (const gdb_byte *loc_ptr, const gdb_byte *buf_end,
+			    const gdb_byte **new_ptr,
+			    CORE_ADDR *low, CORE_ADDR *high,
+			    enum bfd_endian byte_order,
+			    unsigned int addr_size,
+			    int signed_addr_p)
+{
+  CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
+
+  if (buf_end - loc_ptr < 2 * addr_size)
+    return DEBUG_LOC_BUFFER_OVERFLOW;
+
+  if (signed_addr_p)
+    *low = extract_signed_integer (loc_ptr, addr_size, byte_order);
+  else
+    *low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
+  loc_ptr += addr_size;
+
+  if (signed_addr_p)
+    *high = extract_signed_integer (loc_ptr, addr_size, byte_order);
+  else
+    *high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
+  loc_ptr += addr_size;
+
+  *new_ptr = loc_ptr;
+
+  /* A base-address-selection entry.  */
+  if ((*low & base_mask) == base_mask)
+    return DEBUG_LOC_BASE_ADDRESS;
+
+  /* An end-of-list entry.  */
+  if (*low == 0 && *high == 0)
+    return DEBUG_LOC_END_OF_LIST;
+
+  return DEBUG_LOC_START_END;
+}
+
+/* Decode the addresses in .debug_loc.dwo entry.
+   A pointer to the next byte to examine is returned in *NEW_PTR.
+   The encoded low,high addresses are return in *LOW,*HIGH.
+   The result indicates the kind of entry found.  */
+
+static enum debug_loc_kind
+decode_debug_loc_dwo_addresses (struct dwarf2_per_cu_data *per_cu,
+				const gdb_byte *loc_ptr,
+				const gdb_byte *buf_end,
+				const gdb_byte **new_ptr,
+				CORE_ADDR *low, CORE_ADDR *high,
+				enum bfd_endian byte_order)
+{
+  uint64_t low_index, high_index;
+
+  if (loc_ptr == buf_end)
+    return DEBUG_LOC_BUFFER_OVERFLOW;
+
+  switch (*loc_ptr++)
+    {
+    case DEBUG_LOC_END_OF_LIST:
+      *new_ptr = loc_ptr;
+      return DEBUG_LOC_END_OF_LIST;
+    case DEBUG_LOC_BASE_ADDRESS:
+      *low = 0;
+      loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &high_index);
+      if (loc_ptr == NULL)
+	return DEBUG_LOC_BUFFER_OVERFLOW;
+      *high = dwarf2_read_addr_index (per_cu, high_index);
+      *new_ptr = loc_ptr;
+      return DEBUG_LOC_BASE_ADDRESS;
+    case DEBUG_LOC_START_END:
+      loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &low_index);
+      if (loc_ptr == NULL)
+	return DEBUG_LOC_BUFFER_OVERFLOW;
+      *low = dwarf2_read_addr_index (per_cu, low_index);
+      loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &high_index);
+      if (loc_ptr == NULL)
+	return DEBUG_LOC_BUFFER_OVERFLOW;
+      *high = dwarf2_read_addr_index (per_cu, high_index);
+      *new_ptr = loc_ptr;
+      return DEBUG_LOC_START_END;
+    case DEBUG_LOC_START_LENGTH:
+      loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &low_index);
+      if (loc_ptr == NULL)
+	return DEBUG_LOC_BUFFER_OVERFLOW;
+      *low = dwarf2_read_addr_index (per_cu, low_index);
+      if (loc_ptr + 4 > buf_end)
+	return DEBUG_LOC_BUFFER_OVERFLOW;
+      *high = *low;
+      *high += extract_unsigned_integer (loc_ptr, 4, byte_order);
+      *new_ptr = loc_ptr + 4;
+      return DEBUG_LOC_START_LENGTH;
+    default:
+      return DEBUG_LOC_INVALID_ENTRY;
+    }
+}
+
 /* A function for dealing with location lists.  Given a
    symbol baton (BATON) and a pc value (PC), find the appropriate
    location expression, set *LOCEXPR_LENGTH, and return a pointer
@@ -68,52 +203,53 @@ const gdb_byte *
 dwarf2_find_location_expression (struct dwarf2_loclist_baton *baton,
 				 size_t *locexpr_length, CORE_ADDR pc)
 {
-  CORE_ADDR low, high;
-  const gdb_byte *loc_ptr, *buf_end;
-  int length;
   struct objfile *objfile = dwarf2_per_cu_objfile (baton->per_cu);
   struct gdbarch *gdbarch = get_objfile_arch (objfile);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   unsigned int addr_size = dwarf2_per_cu_addr_size (baton->per_cu);
   int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
-  CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
   /* Adjust base_address for relocatable objects.  */
   CORE_ADDR base_offset = dwarf2_per_cu_text_offset (baton->per_cu);
   CORE_ADDR base_address = baton->base_address + base_offset;
+  const gdb_byte *loc_ptr, *buf_end;
 
   loc_ptr = baton->data;
   buf_end = baton->data + baton->size;
 
   while (1)
     {
-      if (buf_end - loc_ptr < 2 * addr_size)
-	error (_("dwarf2_find_location_expression: "
-		 "Corrupted DWARF expression."));
-
-      if (signed_addr_p)
-	low = extract_signed_integer (loc_ptr, addr_size, byte_order);
-      else
-	low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
-      loc_ptr += addr_size;
-
-      if (signed_addr_p)
-	high = extract_signed_integer (loc_ptr, addr_size, byte_order);
+      CORE_ADDR low = 0, high = 0; /* init for gcc -Wall */
+      int length;
+      enum debug_loc_kind kind;
+      const gdb_byte *new_ptr = NULL; /* init for gcc -Wall */
+
+      if (baton->from_dwo)
+	kind = decode_debug_loc_dwo_addresses (baton->per_cu,
+					       loc_ptr, buf_end, &new_ptr,
+					       &low, &high, byte_order);
       else
-	high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
-      loc_ptr += addr_size;
-
-      /* A base-address-selection entry.  */
-      if ((low & base_mask) == base_mask)
-	{
-	  base_address = high + base_offset;
-	  continue;
-	}
-
-      /* An end-of-list entry.  */
-      if (low == 0 && high == 0)
+	kind = decode_debug_loc_addresses (loc_ptr, buf_end, &new_ptr,
+					   &low, &high,
+					   byte_order, addr_size,
+					   signed_addr_p);
+      loc_ptr = new_ptr;
+      switch (kind)
 	{
+	case DEBUG_LOC_END_OF_LIST:
 	  *locexpr_length = 0;
 	  return NULL;
+	case DEBUG_LOC_BASE_ADDRESS:
+	  base_address = high + base_offset;
+	  continue;
+	case DEBUG_LOC_START_END:
+	case DEBUG_LOC_START_LENGTH:
+	  break;
+	case DEBUG_LOC_BUFFER_OVERFLOW:
+	case DEBUG_LOC_INVALID_ENTRY:
+	  error (_("dwarf2_find_location_expression: "
+		   "Corrupted DWARF expression."));
+	default:
+	  gdb_assert_not_reached ("bad debug_loc_kind");
 	}
 
       /* Otherwise, a location expression entry.  */
@@ -282,7 +418,7 @@ dwarf_expr_tls_address (void *baton, CORE_ADDR offset)
    call and return.  */
 
 static void
-per_cu_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset,
+per_cu_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset,
 		   struct dwarf2_per_cu_data *per_cu,
 		   CORE_ADDR (*get_frame_pc) (void *baton),
 		   void *baton)
@@ -301,7 +437,7 @@ per_cu_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset,
 /* Helper interface of per_cu_dwarf_call for dwarf2_evaluate_loc_desc.  */
 
 static void
-dwarf_expr_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset)
+dwarf_expr_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset)
 {
   struct dwarf_expr_baton *debaton = ctx->baton;
 
@@ -312,7 +448,8 @@ dwarf_expr_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset)
 /* Callback function for dwarf2_evaluate_loc_desc.  */
 
 static struct type *
-dwarf_expr_get_base_type (struct dwarf_expr_context *ctx, size_t die_offset)
+dwarf_expr_get_base_type (struct dwarf_expr_context *ctx,
+			  cu_offset die_offset)
 {
   struct dwarf_expr_baton *debaton = ctx->baton;
 
@@ -648,7 +785,6 @@ static struct call_site_chain *
 call_site_find_chain_1 (struct gdbarch *gdbarch, CORE_ADDR caller_pc,
 			CORE_ADDR callee_pc)
 {
-  struct func_type *func_specific;
   struct obstack addr_obstack;
   struct cleanup *back_to_retval, *back_to_workdata;
   struct call_site_chain *retval = NULL;
@@ -812,16 +948,36 @@ call_site_find_chain (struct gdbarch *gdbarch, CORE_ADDR caller_pc,
   return retval;
 }
 
-/* Fetch call_site_parameter from caller matching the parameters.  FRAME is for
-   callee.  See DWARF_REG and FB_OFFSET description at struct
-   dwarf_expr_context_funcs->push_dwarf_reg_entry_value.
+/* Return 1 if KIND and KIND_U match PARAMETER.  Return 0 otherwise.  */
+
+static int
+call_site_parameter_matches (struct call_site_parameter *parameter,
+			     enum call_site_parameter_kind kind,
+			     union call_site_parameter_u kind_u)
+{
+  if (kind == parameter->kind)
+    switch (kind)
+      {
+      case CALL_SITE_PARAMETER_DWARF_REG:
+	return kind_u.dwarf_reg == parameter->u.dwarf_reg;
+      case CALL_SITE_PARAMETER_FB_OFFSET:
+	return kind_u.fb_offset == parameter->u.fb_offset;
+      case CALL_SITE_PARAMETER_PARAM_OFFSET:
+	return kind_u.param_offset.cu_off == parameter->u.param_offset.cu_off;
+      }
+  return 0;
+}
+
+/* Fetch call_site_parameter from caller matching KIND and KIND_U.
+   FRAME is for callee.
 
    Function always returns non-NULL, it throws NO_ENTRY_VALUE_ERROR
    otherwise.  */
 
 static struct call_site_parameter *
-dwarf_expr_reg_to_entry_parameter (struct frame_info *frame, int dwarf_reg,
-				   CORE_ADDR fb_offset,
+dwarf_expr_reg_to_entry_parameter (struct frame_info *frame,
+				   enum call_site_parameter_kind kind,
+				   union call_site_parameter_u kind_u,
 				   struct dwarf2_per_cu_data **per_cu_return)
 {
   CORE_ADDR func_addr = get_frame_func (frame);
@@ -830,8 +986,6 @@ dwarf_expr_reg_to_entry_parameter (struct frame_info *frame, int dwarf_reg,
   struct frame_info *caller_frame = get_prev_frame (frame);
   struct call_site *call_site;
   int iparams;
-  struct value *val;
-  struct dwarf2_locexpr_baton *dwarf_block;
   /* Initialize it just to avoid a GCC false warning.  */
   struct call_site_parameter *parameter = NULL;
   CORE_ADDR target_addr;
@@ -886,12 +1040,7 @@ dwarf_expr_reg_to_entry_parameter (struct frame_info *frame, int dwarf_reg,
   for (iparams = 0; iparams < call_site->parameter_count; iparams++)
     {
       parameter = &call_site->parameter[iparams];
-      if (parameter->dwarf_reg == -1 && dwarf_reg == -1)
-	{
-	  if (parameter->fb_offset == fb_offset)
-	    break;
-	}
-      else if (parameter->dwarf_reg == dwarf_reg)
+      if (call_site_parameter_matches (parameter, kind, kind_u))
 	break;
     }
   if (iparams == call_site->parameter_count)
@@ -948,17 +1097,17 @@ dwarf_entry_parameter_to_value (struct call_site_parameter *parameter,
   return dwarf2_evaluate_loc_desc (type, caller_frame, data, size + 1, per_cu);
 }
 
-/* Execute call_site_parameter's DWARF block matching DEREF_SIZE for caller of
-   the CTX's frame.  CTX must be of dwarf_expr_ctx_funcs kind.  See DWARF_REG
-   and FB_OFFSET description at struct
-   dwarf_expr_context_funcs->push_dwarf_reg_entry_value.
+/* Execute DWARF block of call_site_parameter which matches KIND and KIND_U.
+   Choose DEREF_SIZE value of that parameter.  Search caller of the CTX's
+   frame.  CTX must be of dwarf_expr_ctx_funcs kind.
 
    The CTX caller can be from a different CU - per_cu_dwarf_call implementation
    can be more simple as it does not support cross-CU DWARF executions.  */
 
 static void
 dwarf_expr_push_dwarf_reg_entry_value (struct dwarf_expr_context *ctx,
-				       int dwarf_reg, CORE_ADDR fb_offset,
+				       enum call_site_parameter_kind kind,
+				       union call_site_parameter_u kind_u,
 				       int deref_size)
 {
   struct dwarf_expr_baton *debaton;
@@ -975,7 +1124,7 @@ dwarf_expr_push_dwarf_reg_entry_value (struct dwarf_expr_context *ctx,
   frame = debaton->frame;
   caller_frame = get_prev_frame (frame);
 
-  parameter = dwarf_expr_reg_to_entry_parameter (frame, dwarf_reg, fb_offset,
+  parameter = dwarf_expr_reg_to_entry_parameter (frame, kind, kind_u,
 						 &caller_per_cu);
   data_src = deref_size == -1 ? parameter->value : parameter->data_value;
   size = deref_size == -1 ? parameter->value_size : parameter->data_value_size;
@@ -1005,6 +1154,17 @@ dwarf_expr_push_dwarf_reg_entry_value (struct dwarf_expr_context *ctx,
   ctx->baton = saved_ctx.baton;
 }
 
+/* Callback function for dwarf2_evaluate_loc_desc.
+   Fetch the address indexed by DW_OP_GNU_addr_index.  */
+
+static CORE_ADDR
+dwarf_expr_get_addr_index (void *baton, unsigned int index)
+{
+  struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
+
+  return dwarf2_read_addr_index (debaton->per_cu, index);
+}
+
 /* VALUE must be of type lval_computed with entry_data_value_funcs.  Perform
    the indirect method on it, that is use its stored target value, the sole
    purpose of entry_data_value_funcs..  */
@@ -1061,17 +1221,17 @@ static const struct lval_funcs entry_data_value_funcs =
   entry_data_value_free_closure
 };
 
-/* Read parameter of TYPE at (callee) FRAME's function entry.  DWARF_REG and
-   FB_OFFSET are used to match DW_AT_location at the caller's
-   DW_TAG_GNU_call_site_parameter.  See DWARF_REG and FB_OFFSET description at
-   struct dwarf_expr_context_funcs->push_dwarf_reg_entry_value.
+/* Read parameter of TYPE at (callee) FRAME's function entry.  KIND and KIND_U
+   are used to match DW_AT_location at the caller's
+   DW_TAG_GNU_call_site_parameter.
 
    Function always returns non-NULL value.  It throws NO_ENTRY_VALUE_ERROR if it
    cannot resolve the parameter for any reason.  */
 
 static struct value *
 value_of_dwarf_reg_entry (struct type *type, struct frame_info *frame,
-			  int dwarf_reg, CORE_ADDR fb_offset)
+			  enum call_site_parameter_kind kind,
+			  union call_site_parameter_u kind_u)
 {
   struct type *checked_type = check_typedef (type);
   struct type *target_type = TYPE_TARGET_TYPE (checked_type);
@@ -1081,7 +1241,7 @@ value_of_dwarf_reg_entry (struct type *type, struct frame_info *frame,
   struct dwarf2_per_cu_data *caller_per_cu;
   CORE_ADDR addr;
 
-  parameter = dwarf_expr_reg_to_entry_parameter (frame, dwarf_reg, fb_offset,
+  parameter = dwarf_expr_reg_to_entry_parameter (frame, kind, kind_u,
 						 &caller_per_cu);
 
   outer_val = dwarf_entry_parameter_to_value (parameter, -1 /* deref_size */,
@@ -1133,15 +1293,16 @@ static struct value *
 value_of_dwarf_block_entry (struct type *type, struct frame_info *frame,
 			    const gdb_byte *block, size_t block_len)
 {
-  int dwarf_reg;
-  CORE_ADDR fb_offset;
+  union call_site_parameter_u kind_u;
 
-  dwarf_reg = dwarf_block_to_dwarf_reg (block, block + block_len);
-  if (dwarf_reg != -1)
-    return value_of_dwarf_reg_entry (type, frame, dwarf_reg, 0 /* unused */);
+  kind_u.dwarf_reg = dwarf_block_to_dwarf_reg (block, block + block_len);
+  if (kind_u.dwarf_reg != -1)
+    return value_of_dwarf_reg_entry (type, frame, CALL_SITE_PARAMETER_DWARF_REG,
+				     kind_u);
 
-  if (dwarf_block_to_fb_offset (block, block + block_len, &fb_offset))
-    return value_of_dwarf_reg_entry (type, frame, -1, fb_offset);
+  if (dwarf_block_to_fb_offset (block, block + block_len, &kind_u.fb_offset))
+    return value_of_dwarf_reg_entry (type, frame, CALL_SITE_PARAMETER_FB_OFFSET,
+                                     kind_u);
 
   /* This can normally happen - throw NO_ENTRY_VALUE_ERROR to get the message
      suppressed during normal operation.  The expression can be arbitrary if
@@ -1939,7 +2100,8 @@ static const struct dwarf_expr_context_funcs dwarf_expr_ctx_funcs =
   dwarf_expr_tls_address,
   dwarf_expr_dwarf_call,
   dwarf_expr_get_base_type,
-  dwarf_expr_push_dwarf_reg_entry_value
+  dwarf_expr_push_dwarf_reg_entry_value,
+  dwarf_expr_get_addr_index
 };
 
 /* Evaluate a location description, starting at DATA and with length
@@ -2219,7 +2381,7 @@ needs_frame_tls_address (void *baton, CORE_ADDR offset)
 /* Helper interface of per_cu_dwarf_call for dwarf2_loc_desc_needs_frame.  */
 
 static void
-needs_frame_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset)
+needs_frame_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset)
 {
   struct needs_frame_baton *nf_baton = ctx->baton;
 
@@ -2231,11 +2393,24 @@ needs_frame_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset)
 
 static void
 needs_dwarf_reg_entry_value (struct dwarf_expr_context *ctx,
-			     int dwarf_reg, CORE_ADDR fb_offset, int deref_size)
+			     enum call_site_parameter_kind kind,
+			     union call_site_parameter_u kind_u, int deref_size)
 {
   struct needs_frame_baton *nf_baton = ctx->baton;
 
   nf_baton->needs_frame = 1;
+
+  /* The expression may require some stub values on DWARF stack.  */
+  dwarf_expr_push_address (ctx, 0, 0);
+}
+
+/* DW_OP_GNU_addr_index doesn't require a frame.  */
+
+static CORE_ADDR
+needs_get_addr_index (void *baton, unsigned int index)
+{
+  /* Nothing to do.  */
+  return 1;
 }
 
 /* Virtual method table for dwarf2_loc_desc_needs_frame below.  */
@@ -2250,7 +2425,8 @@ static const struct dwarf_expr_context_funcs needs_frame_ctx_funcs =
   needs_frame_tls_address,
   needs_frame_dwarf_call,
   NULL,				/* get_base_type */
-  needs_dwarf_reg_entry_value
+  needs_dwarf_reg_entry_value,
+  needs_get_addr_index
 };
 
 /* Return non-zero iff the location expression at DATA (length SIZE)
@@ -2306,7 +2482,7 @@ dwarf2_loc_desc_needs_frame (const gdb_byte *data, unsigned short size,
 static void
 unimplemented (unsigned int op)
 {
-  const char *name = dwarf_stack_op_name (op);
+  const char *name = get_DW_OP_name (op);
 
   if (name)
     error (_("DWARF operator %s cannot be translated to an agent expression"),
@@ -2429,8 +2605,8 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
   while (op_ptr < op_end)
     {
       enum dwarf_location_atom op = *op_ptr;
-      ULONGEST uoffset, reg;
-      LONGEST offset;
+      uint64_t uoffset, reg;
+      int64_t offset;
       int i;
 
       offsets[op_ptr - base] = expr->len;
@@ -2534,11 +2710,11 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
 	  op_ptr += 8;
 	  break;
 	case DW_OP_constu:
-	  op_ptr = read_uleb128 (op_ptr, op_end, &uoffset);
+	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
 	  ax_const_l (expr, uoffset);
 	  break;
 	case DW_OP_consts:
-	  op_ptr = read_sleb128 (op_ptr, op_end, &offset);
+	  op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
 	  ax_const_l (expr, offset);
 	  break;
 
@@ -2580,7 +2756,7 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
 	  break;
 
 	case DW_OP_regx:
-	  op_ptr = read_uleb128 (op_ptr, op_end, &reg);
+	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
 	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
 	  loc->u.reg = translate_register (arch, reg);
 	  loc->kind = axs_lvalue_register;
@@ -2588,9 +2764,9 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
 
 	case DW_OP_implicit_value:
 	  {
-	    ULONGEST len;
+	    uint64_t len;
 
-	    op_ptr = read_uleb128 (op_ptr, op_end, &len);
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &len);
 	    if (op_ptr + len > op_end)
 	      error (_("DW_OP_implicit_value: too few bytes available."));
 	    if (len > sizeof (ULONGEST))
@@ -2644,7 +2820,7 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
 	case DW_OP_breg29:
 	case DW_OP_breg30:
 	case DW_OP_breg31:
-	  op_ptr = read_sleb128 (op_ptr, op_end, &offset);
+	  op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
 	  i = translate_register (arch, op - DW_OP_breg0);
 	  ax_reg (expr, i);
 	  if (offset != 0)
@@ -2655,8 +2831,8 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
 	  break;
 	case DW_OP_bregx:
 	  {
-	    op_ptr = read_uleb128 (op_ptr, op_end, &reg);
-	    op_ptr = read_sleb128 (op_ptr, op_end, &offset);
+	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
+	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
 	    i = translate_register (arch, reg);
 	    ax_reg (expr, i);
 	    if (offset != 0)
@@ -2670,7 +2846,6 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
 	  {
 	    const gdb_byte *datastart;
 	    size_t datalen;
-	    unsigned int before_stack_len;
 	    struct block *b;
 	    struct symbol *framefunc;
 	    LONGEST base_offset = 0;
@@ -2688,7 +2863,7 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
 	    dwarf_expr_frame_base_1 (framefunc, expr->scope,
 				     &datastart, &datalen);
 
-	    op_ptr = read_sleb128 (op_ptr, op_end, &offset);
+	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
 	    dwarf2_compile_expr_to_ax (expr, loc, arch, addr_size, datastart,
 				       datastart + datalen, per_cu);
 
@@ -2752,10 +2927,10 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
 		ax_simple (expr, aop_ref64);
 		break;
 	      default:
-		/* Note that dwarf_stack_op_name will never return
+		/* Note that get_DW_OP_name will never return
 		   NULL here.  */
 		error (_("Unsupported size %d in %s"),
-		       size, dwarf_stack_op_name (op));
+		       size, get_DW_OP_name (op));
 	      }
 	  }
 	  break;
@@ -2789,7 +2964,7 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
 	  break;
 
 	case DW_OP_plus_uconst:
-	  op_ptr = read_uleb128 (op_ptr, op_end, &reg);
+	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
 	  /* It would be really weird to emit `DW_OP_plus_uconst 0',
 	     but we micro-optimize anyhow.  */
 	  if (reg != 0)
@@ -2939,20 +3114,20 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
         case DW_OP_piece:
 	case DW_OP_bit_piece:
 	  {
-	    ULONGEST size, offset;
+	    uint64_t size, offset;
 
 	    if (op_ptr - 1 == previous_piece)
 	      error (_("Cannot translate empty pieces to agent expressions"));
 	    previous_piece = op_ptr - 1;
 
-            op_ptr = read_uleb128 (op_ptr, op_end, &size);
+            op_ptr = safe_read_uleb128 (op_ptr, op_end, &size);
 	    if (op == DW_OP_piece)
 	      {
 		size *= 8;
 		offset = 0;
 	      }
 	    else
-	      op_ptr = read_uleb128 (op_ptr, op_end, &offset);
+	      op_ptr = safe_read_uleb128 (op_ptr, op_end, &offset);
 
 	    if (bits_collected + size > 8 * sizeof (LONGEST))
 	      error (_("Expression pieces exceed word size"));
@@ -3012,11 +3187,13 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
 	  {
 	    struct dwarf2_locexpr_baton block;
 	    int size = (op == DW_OP_call2 ? 2 : 4);
+	    cu_offset offset;
 
 	    uoffset = extract_unsigned_integer (op_ptr, size, byte_order);
 	    op_ptr += size;
 
-	    block = dwarf2_fetch_die_location_block (uoffset, per_cu,
+	    offset.cu_off = uoffset;
+	    block = dwarf2_fetch_die_location_block (offset, per_cu,
 						     get_ax_pc, expr);
 
 	    /* DW_OP_call_ref is currently not supported.  */
@@ -3110,15 +3287,18 @@ locexpr_regname (struct gdbarch *gdbarch, int dwarf_regnum)
 /* Nicely describe a single piece of a location, returning an updated
    position in the bytecode sequence.  This function cannot recognize
    all locations; if a location is not recognized, it simply returns
-   DATA.  */
+   DATA.  If there is an error during reading, e.g. we run off the end
+   of the buffer, an error is thrown.  */
 
 static const gdb_byte *
 locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
 				 CORE_ADDR addr, struct objfile *objfile,
+				 struct dwarf2_per_cu_data *per_cu,
 				 const gdb_byte *data, const gdb_byte *end,
 				 unsigned int addr_size)
 {
   struct gdbarch *gdbarch = get_objfile_arch (objfile);
+  size_t leb128_size;
 
   if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31)
     {
@@ -3128,9 +3308,9 @@ locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
     }
   else if (data[0] == DW_OP_regx)
     {
-      ULONGEST reg;
+      uint64_t reg;
 
-      data = read_uleb128 (data + 1, end, &reg);
+      data = safe_read_uleb128 (data + 1, end, &reg);
       fprintf_filtered (stream, _("a variable in $%s"),
 			locexpr_regname (gdbarch, reg));
     }
@@ -3139,12 +3319,12 @@ locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
       struct block *b;
       struct symbol *framefunc;
       int frame_reg = 0;
-      LONGEST frame_offset;
+      int64_t frame_offset;
       const gdb_byte *base_data, *new_data, *save_data = data;
       size_t base_size;
-      LONGEST base_offset = 0;
+      int64_t base_offset = 0;
 
-      new_data = read_sleb128 (data + 1, end, &frame_offset);
+      new_data = safe_read_sleb128 (data + 1, end, &frame_offset);
       if (!piece_end_p (new_data, end))
 	return data;
       data = new_data;
@@ -3168,8 +3348,8 @@ locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
 	  const gdb_byte *buf_end;
 	  
 	  frame_reg = base_data[0] - DW_OP_breg0;
-	  buf_end = read_sleb128 (base_data + 1,
-				  base_data + base_size, &base_offset);
+	  buf_end = safe_read_sleb128 (base_data + 1, base_data + base_size,
+				       &base_offset);
 	  if (buf_end != base_data + base_size)
 	    error (_("Unexpected opcode after "
 		     "DW_OP_breg%u for symbol \"%s\"."),
@@ -3196,9 +3376,9 @@ locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
   else if (data[0] >= DW_OP_breg0 && data[0] <= DW_OP_breg31
 	   && piece_end_p (data, end))
     {
-      LONGEST offset;
+      int64_t offset;
 
-      data = read_sleb128 (data + 1, end, &offset);
+      data = safe_read_sleb128 (data + 1, end, &offset);
 
       fprintf_filtered (stream,
 			_("a variable at offset %s from base reg $%s"),
@@ -3238,6 +3418,29 @@ locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
 
       data += 1 + addr_size + 1;
     }
+
+  /* With -gsplit-dwarf a TLS variable can also look like this:
+     DW_AT_location    : 3 byte block: fc 4 e0
+                        (DW_OP_GNU_const_index: 4;
+			 DW_OP_GNU_push_tls_address)  */
+  else if (data + 3 <= end
+	   && data + 1 + (leb128_size = skip_leb128 (data + 1, end)) < end
+	   && data[0] == DW_OP_GNU_const_index
+	   && leb128_size > 0
+	   && data[1 + leb128_size] == DW_OP_GNU_push_tls_address
+	   && piece_end_p (data + 2 + leb128_size, end))
+    {
+      ULONGEST offset;
+
+      data = safe_read_uleb128 (data + 1, end, &offset);
+      offset = dwarf2_read_addr_index (per_cu, offset);
+      fprintf_filtered (stream, 
+			_("a thread-local variable at offset 0x%s "
+			  "in the thread-local storage for `%s'"),
+			phex_nz (offset, addr_size), objfile->name);
+      ++data;
+    }
+
   else if (data[0] >= DW_OP_lit0
 	   && data[0] <= DW_OP_lit31
 	   && data + 1 < end
@@ -3253,7 +3456,9 @@ locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
 /* Disassemble an expression, stopping at the end of a piece or at the
    end of the expression.  Returns a pointer to the next unread byte
    in the input expression.  If ALL is nonzero, then this function
-   will keep going until it reaches the end of the expression.  */
+   will keep going until it reaches the end of the expression.
+   If there is an error during reading, e.g. we run off the end
+   of the buffer, an error is thrown.  */
 
 static const gdb_byte *
 disassemble_dwarf_expression (struct ui_file *stream,
@@ -3268,11 +3473,11 @@ disassemble_dwarf_expression (struct ui_file *stream,
 	     || (data[0] != DW_OP_piece && data[0] != DW_OP_bit_piece)))
     {
       enum dwarf_location_atom op = *data++;
-      ULONGEST ul;
-      LONGEST l;
+      uint64_t ul;
+      int64_t l;
       const char *name;
 
-      name = dwarf_stack_op_name (op);
+      name = get_DW_OP_name (op);
 
       if (!name)
 	error (_("Unrecognized DWARF opcode 0x%02x at %ld"),
@@ -3330,11 +3535,11 @@ disassemble_dwarf_expression (struct ui_file *stream,
 	  fprintf_filtered (stream, " %s", plongest (l));
 	  break;
 	case DW_OP_constu:
-	  data = read_uleb128 (data, end, &ul);
+	  data = safe_read_uleb128 (data, end, &ul);
 	  fprintf_filtered (stream, " %s", pulongest (ul));
 	  break;
 	case DW_OP_consts:
-	  data = read_sleb128 (data, end, &l);
+	  data = safe_read_sleb128 (data, end, &l);
 	  fprintf_filtered (stream, " %s", plongest (l));
 	  break;
 
@@ -3375,13 +3580,13 @@ disassemble_dwarf_expression (struct ui_file *stream,
 	  break;
 
 	case DW_OP_regx:
-	  data = read_uleb128 (data, end, &ul);
+	  data = safe_read_uleb128 (data, end, &ul);
 	  fprintf_filtered (stream, " %s [$%s]", pulongest (ul),
 			    locexpr_regname (arch, (int) ul));
 	  break;
 
 	case DW_OP_implicit_value:
-	  data = read_uleb128 (data, end, &ul);
+	  data = safe_read_uleb128 (data, end, &ul);
 	  data += ul;
 	  fprintf_filtered (stream, " %s", pulongest (ul));
 	  break;
@@ -3418,14 +3623,14 @@ disassemble_dwarf_expression (struct ui_file *stream,
 	case DW_OP_breg29:
 	case DW_OP_breg30:
 	case DW_OP_breg31:
-	  data = read_sleb128 (data, end, &l);
+	  data = safe_read_sleb128 (data, end, &l);
 	  fprintf_filtered (stream, " %s [$%s]", plongest (l),
 			    locexpr_regname (arch, op - DW_OP_breg0));
 	  break;
 
 	case DW_OP_bregx:
-	  data = read_uleb128 (data, end, &ul);
-	  data = read_sleb128 (data, end, &l);
+	  data = safe_read_uleb128 (data, end, &ul);
+	  data = safe_read_sleb128 (data, end, &l);
 	  fprintf_filtered (stream, " register %s [$%s] offset %s",
 			    pulongest (ul),
 			    locexpr_regname (arch, (int) ul),
@@ -3433,7 +3638,7 @@ disassemble_dwarf_expression (struct ui_file *stream,
 	  break;
 
 	case DW_OP_fbreg:
-	  data = read_sleb128 (data, end, &l);
+	  data = safe_read_sleb128 (data, end, &l);
 	  fprintf_filtered (stream, " %s", plongest (l));
 	  break;
 
@@ -3445,7 +3650,7 @@ disassemble_dwarf_expression (struct ui_file *stream,
 	  break;
 
 	case DW_OP_plus_uconst:
-	  data = read_uleb128 (data, end, &ul);
+	  data = safe_read_uleb128 (data, end, &ul);
 	  fprintf_filtered (stream, " %s", pulongest (ul));
 	  break;
 
@@ -3483,16 +3688,16 @@ disassemble_dwarf_expression (struct ui_file *stream,
 	  break;
 
         case DW_OP_piece:
-	  data = read_uleb128 (data, end, &ul);
+	  data = safe_read_uleb128 (data, end, &ul);
 	  fprintf_filtered (stream, " %s (bytes)", pulongest (ul));
 	  break;
 
 	case DW_OP_bit_piece:
 	  {
-	    ULONGEST offset;
+	    uint64_t offset;
 
-	    data = read_uleb128 (data, end, &ul);
-	    data = read_uleb128 (data, end, &offset);
+	    data = safe_read_uleb128 (data, end, &ul);
+	    data = safe_read_uleb128 (data, end, &offset);
 	    fprintf_filtered (stream, " size %s offset %s (bits)",
 			      pulongest (ul), pulongest (offset));
 	  }
@@ -3504,7 +3709,7 @@ disassemble_dwarf_expression (struct ui_file *stream,
 					   gdbarch_byte_order (arch));
 	    data += offset_size;
 
-	    data = read_sleb128 (data, end, &l);
+	    data = safe_read_sleb128 (data, end, &l);
 
 	    fprintf_filtered (stream, " DIE %s offset %s",
 			      phex_nz (ul, offset_size),
@@ -3515,43 +3720,48 @@ disassemble_dwarf_expression (struct ui_file *stream,
 	case DW_OP_GNU_deref_type:
 	  {
 	    int addr_size = *data++;
-	    ULONGEST offset;
+	    cu_offset offset;
 	    struct type *type;
 
-	    data = read_uleb128 (data, end, &offset);
+	    data = safe_read_uleb128 (data, end, &ul);
+	    offset.cu_off = ul;
 	    type = dwarf2_get_die_type (offset, per_cu);
 	    fprintf_filtered (stream, "<");
 	    type_print (type, "", stream, -1);
-	    fprintf_filtered (stream, " [0x%s]> %d", phex_nz (offset, 0),
+	    fprintf_filtered (stream, " [0x%s]> %d", phex_nz (offset.cu_off, 0),
 			      addr_size);
 	  }
 	  break;
 
 	case DW_OP_GNU_const_type:
 	  {
-	    ULONGEST type_die;
+	    cu_offset type_die;
 	    struct type *type;
 
-	    data = read_uleb128 (data, end, &type_die);
+	    data = safe_read_uleb128 (data, end, &ul);
+	    type_die.cu_off = ul;
 	    type = dwarf2_get_die_type (type_die, per_cu);
 	    fprintf_filtered (stream, "<");
 	    type_print (type, "", stream, -1);
-	    fprintf_filtered (stream, " [0x%s]>", phex_nz (type_die, 0));
+	    fprintf_filtered (stream, " [0x%s]>", phex_nz (type_die.cu_off, 0));
 	  }
 	  break;
 
 	case DW_OP_GNU_regval_type:
 	  {
-	    ULONGEST type_die, reg;
+	    uint64_t reg;
+	    cu_offset type_die;
 	    struct type *type;
 
-	    data = read_uleb128 (data, end, &reg);
-	    data = read_uleb128 (data, end, &type_die);
+	    data = safe_read_uleb128 (data, end, &reg);
+	    data = safe_read_uleb128 (data, end, &ul);
+	    type_die.cu_off = ul;
 
 	    type = dwarf2_get_die_type (type_die, per_cu);
 	    fprintf_filtered (stream, "<");
 	    type_print (type, "", stream, -1);
-	    fprintf_filtered (stream, " [0x%s]> [$%s]", phex_nz (type_die, 0),
+	    fprintf_filtered (stream, " [0x%s]> [$%s]",
+			      phex_nz (type_die.cu_off, 0),
 			      locexpr_regname (arch, reg));
 	  }
 	  break;
@@ -3559,11 +3769,12 @@ disassemble_dwarf_expression (struct ui_file *stream,
 	case DW_OP_GNU_convert:
 	case DW_OP_GNU_reinterpret:
 	  {
-	    ULONGEST type_die;
+	    cu_offset type_die;
 
-	    data = read_uleb128 (data, end, &type_die);
+	    data = safe_read_uleb128 (data, end, &ul);
+	    type_die.cu_off = ul;
 
-	    if (type_die == 0)
+	    if (type_die.cu_off == 0)
 	      fprintf_filtered (stream, "<0>");
 	    else
 	      {
@@ -3572,19 +3783,36 @@ disassemble_dwarf_expression (struct ui_file *stream,
 		type = dwarf2_get_die_type (type_die, per_cu);
 		fprintf_filtered (stream, "<");
 		type_print (type, "", stream, -1);
-		fprintf_filtered (stream, " [0x%s]>", phex_nz (type_die, 0));
+		fprintf_filtered (stream, " [0x%s]>", phex_nz (type_die.cu_off, 0));
 	      }
 	  }
 	  break;
 
 	case DW_OP_GNU_entry_value:
-	  data = read_uleb128 (data, end, &ul);
+	  data = safe_read_uleb128 (data, end, &ul);
 	  fputc_filtered ('\n', stream);
 	  disassemble_dwarf_expression (stream, arch, addr_size, offset_size,
 					start, data, data + ul, indent + 2,
 					all, per_cu);
 	  data += ul;
 	  continue;
+
+	case DW_OP_GNU_parameter_ref:
+	  ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
+	  data += 4;
+	  fprintf_filtered (stream, " offset %s", phex_nz (ul, 4));
+	  break;
+
+	case DW_OP_GNU_addr_index:
+	  data = safe_read_uleb128 (data, end, &ul);
+	  ul = dwarf2_read_addr_index (per_cu, ul);
+	  fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size));
+	  break;
+	case DW_OP_GNU_const_index:
+	  data = safe_read_uleb128 (data, end, &ul);
+	  ul = dwarf2_read_addr_index (per_cu, ul);
+	  fprintf_filtered (stream, " %s", pulongest (ul));
+	  break;
 	}
 
       fprintf_filtered (stream, "\n");
@@ -3619,7 +3847,7 @@ locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
       if (!dwarf2_always_disassemble)
 	{
 	  data = locexpr_describe_location_piece (symbol, stream,
-						  addr, objfile,
+						  addr, objfile, per_cu,
 						  data, end, addr_size);
 	  /* If we printed anything, or if we have an empty piece,
 	     then don't disassemble.  */
@@ -3647,9 +3875,9 @@ locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
 	    fprintf_filtered (stream, "   ");
 	  if (data[0] == DW_OP_piece)
 	    {
-	      ULONGEST bytes;
+	      uint64_t bytes;
 
-	      data = read_uleb128 (data + 1, end, &bytes);
+	      data = safe_read_uleb128 (data + 1, end, &bytes);
 
 	      if (empty)
 		fprintf_filtered (stream, _("an empty %s-byte piece"),
@@ -3660,10 +3888,10 @@ locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
 	    }
 	  else if (data[0] == DW_OP_bit_piece)
 	    {
-	      ULONGEST bits, offset;
+	      uint64_t bits, offset;
 
-	      data = read_uleb128 (data + 1, end, &bits);
-	      data = read_uleb128 (data, end, &offset);
+	      data = safe_read_uleb128 (data + 1, end, &bits);
+	      data = safe_read_uleb128 (data, end, &offset);
 
 	      if (empty)
 		fprintf_filtered (stream,
@@ -3803,19 +4031,18 @@ loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
 			   struct ui_file *stream)
 {
   struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
-  CORE_ADDR low, high;
   const gdb_byte *loc_ptr, *buf_end;
-  int length, first = 1;
+  int first = 1;
   struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
   struct gdbarch *gdbarch = get_objfile_arch (objfile);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu);
   int offset_size = dwarf2_per_cu_offset_size (dlbaton->per_cu);
   int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
-  CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
   /* Adjust base_address for relocatable objects.  */
   CORE_ADDR base_offset = dwarf2_per_cu_text_offset (dlbaton->per_cu);
   CORE_ADDR base_address = dlbaton->base_address + base_offset;
+  int done = 0;
 
   loc_ptr = dlbaton->data;
   buf_end = dlbaton->data + dlbaton->size;
@@ -3823,37 +4050,44 @@ loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
   fprintf_filtered (stream, _("multi-location:\n"));
 
   /* Iterate through locations until we run out.  */
-  while (1)
+  while (!done)
     {
-      if (buf_end - loc_ptr < 2 * addr_size)
-	error (_("Corrupted DWARF expression for symbol \"%s\"."),
-	       SYMBOL_PRINT_NAME (symbol));
-
-      if (signed_addr_p)
-	low = extract_signed_integer (loc_ptr, addr_size, byte_order);
+      CORE_ADDR low = 0, high = 0; /* init for gcc -Wall */
+      int length;
+      enum debug_loc_kind kind;
+      const gdb_byte *new_ptr = NULL; /* init for gcc -Wall */
+
+      if (dlbaton->from_dwo)
+	kind = decode_debug_loc_dwo_addresses (dlbaton->per_cu,
+					       loc_ptr, buf_end, &new_ptr,
+					       &low, &high, byte_order);
       else
-	low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
-      loc_ptr += addr_size;
-
-      if (signed_addr_p)
-	high = extract_signed_integer (loc_ptr, addr_size, byte_order);
-      else
-	high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
-      loc_ptr += addr_size;
-
-      /* A base-address-selection entry.  */
-      if ((low & base_mask) == base_mask)
+	kind = decode_debug_loc_addresses (loc_ptr, buf_end, &new_ptr,
+					   &low, &high,
+					   byte_order, addr_size,
+					   signed_addr_p);
+      loc_ptr = new_ptr;
+      switch (kind)
 	{
+	case DEBUG_LOC_END_OF_LIST:
+	  done = 1;
+	  continue;
+	case DEBUG_LOC_BASE_ADDRESS:
 	  base_address = high + base_offset;
 	  fprintf_filtered (stream, _("  Base address %s"),
 			    paddress (gdbarch, base_address));
 	  continue;
+	case DEBUG_LOC_START_END:
+	case DEBUG_LOC_START_LENGTH:
+	  break;
+	case DEBUG_LOC_BUFFER_OVERFLOW:
+	case DEBUG_LOC_INVALID_ENTRY:
+	  error (_("Corrupted DWARF expression for symbol \"%s\"."),
+		 SYMBOL_PRINT_NAME (symbol));
+	default:
+	  gdb_assert_not_reached ("bad debug_loc_kind");
 	}
 
-      /* An end-of-list entry.  */
-      if (low == 0 && high == 0)
-	break;
-
       /* Otherwise, a location expression entry.  */
       low += base_address;
       high += base_address;
@@ -3906,6 +4140,9 @@ const struct symbol_computed_ops dwarf2_loclist_funcs = {
   loclist_tracepoint_var_ref
 };
 
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_dwarf2loc;
+
 void
 _initialize_dwarf2loc (void)
 {
diff --git a/gdb/dwarf2loc.h b/gdb/dwarf2loc.h
index da05c98..e9d06a3 100644
--- a/gdb/dwarf2loc.h
+++ b/gdb/dwarf2loc.h
@@ -20,6 +20,8 @@
 #if !defined (DWARF2LOC_H)
 #define DWARF2LOC_H
 
+#include "dwarf2expr.h"
+
 struct symbol_computed_ops;
 struct objfile;
 struct dwarf2_per_cu_data;
@@ -39,7 +41,7 @@ extern int entry_values_debug;
 struct objfile *dwarf2_per_cu_objfile (struct dwarf2_per_cu_data *cu);
 
 /* Return the address size given in the compilation unit header for CU.  */
-CORE_ADDR dwarf2_per_cu_addr_size (struct dwarf2_per_cu_data *cu);
+int dwarf2_per_cu_addr_size (struct dwarf2_per_cu_data *cu);
 
 /* Return the DW_FORM_ref_addr size given in the compilation unit header for
    CU.  */
@@ -61,11 +63,11 @@ const gdb_byte *dwarf2_find_location_expression
    CORE_ADDR pc);
 
 struct dwarf2_locexpr_baton dwarf2_fetch_die_location_block
-  (unsigned int offset, struct dwarf2_per_cu_data *per_cu,
+  (cu_offset offset_in_cu, struct dwarf2_per_cu_data *per_cu,
    CORE_ADDR (*get_frame_pc) (void *baton),
    void *baton);
 
-struct type *dwarf2_get_die_type (unsigned int die_offset,
+struct type *dwarf2_get_die_type (cu_offset die_offset,
 				  struct dwarf2_per_cu_data *per_cu);
 
 /* Evaluate a location description, starting at DATA and with length
@@ -78,6 +80,9 @@ struct value *dwarf2_evaluate_loc_desc (struct type *type,
 					unsigned short size,
 					struct dwarf2_per_cu_data *per_cu);
 
+CORE_ADDR dwarf2_read_addr_index (struct dwarf2_per_cu_data *per_cu,
+				  unsigned int addr_index);
+
 /* The symbol location baton types used by the DWARF-2 reader (i.e.
    SYMBOL_LOCATION_BATON for a LOC_COMPUTED symbol).  "struct
    dwarf2_locexpr_baton" is for a symbol with a single location
@@ -114,6 +119,10 @@ struct dwarf2_loclist_baton
   /* The compilation unit containing the symbol whose location
      we're computing.  */
   struct dwarf2_per_cu_data *per_cu;
+
+  /* Non-zero if the location list lives in .debug_loc.dwo.
+     The format of entries in this section are different.  */
+  unsigned char from_dwo;
 };
 
 extern const struct symbol_computed_ops dwarf2_locexpr_funcs;
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 8c81c8a..deee5a2 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -24,6 +24,10 @@
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
+/* FIXME: Various die-reading functions need to be more careful with
+   reading off the end of the section.
+   E.g., load_partial_dies, read_partial_die.  */
+
 #include "defs.h"
 #include "bfd.h"
 #include "symtab.h"
@@ -55,7 +59,10 @@
 #include "completer.h"
 #include "vec.h"
 #include "c-lang.h"
+#include "go-lang.h"
 #include "valprint.h"
+#include "gdbcore.h" /* for gnutarget */
+#include "gdb/gdb-index.h"
 #include <ctype.h>
 
 #include <fcntl.h>
@@ -75,45 +82,9 @@
 typedef struct symbol *symbolp;
 DEF_VEC_P (symbolp);
 
-#if 0
-/* .debug_info header for a compilation unit
-   Because of alignment constraints, this structure has padding and cannot
-   be mapped directly onto the beginning of the .debug_info section.  */
-typedef struct comp_unit_header
-  {
-    unsigned int length;	/* length of the .debug_info
-				   contribution */
-    unsigned short version;	/* version number -- 2 for DWARF
-				   version 2 */
-    unsigned int abbrev_offset;	/* offset into .debug_abbrev section */
-    unsigned char addr_size;	/* byte size of an address -- 4 */
-  }
-_COMP_UNIT_HEADER;
-#define _ACTUAL_COMP_UNIT_HEADER_SIZE 11
-#endif
-
-/* .debug_line statement program prologue
-   Because of alignment constraints, this structure has padding and cannot
-   be mapped directly onto the beginning of the .debug_info section.  */
-typedef struct statement_prologue
-  {
-    unsigned int total_length;	/* byte length of the statement
-				   information */
-    unsigned short version;	/* version number -- 2 for DWARF
-				   version 2 */
-    unsigned int prologue_length;	/* # bytes between prologue &
-					   stmt program */
-    unsigned char minimum_instruction_length;	/* byte size of
-						   smallest instr */
-    unsigned char default_is_stmt;	/* initial value of is_stmt
-					   register */
-    char line_base;
-    unsigned char line_range;
-    unsigned char opcode_base;	/* number assigned to first special
-				   opcode */
-    unsigned char *standard_opcode_lengths;
-  }
-_STATEMENT_PROLOGUE;
+/* When non-zero, print basic high level tracing messages.
+   This is in contrast to the low level DIE reading of dwarf2_die_debug.  */
+static int dwarf2_read_debug = 0;
 
 /* When non-zero, dump DIEs after they are read in.  */
 static int dwarf2_die_debug = 0;
@@ -121,6 +92,9 @@ static int dwarf2_die_debug = 0;
 /* When non-zero, cross-check physname against demangler.  */
 static int check_physname = 0;
 
+/* When non-zero, do not reject deprecated .gdb_index sections.  */
+static int use_deprecated_index_sections = 0;
+
 static int pagesize;
 
 /* When set, the file that we're processing is known to have debugging
@@ -153,6 +127,28 @@ typedef uint32_t offset_type;
 
 DEF_VEC_I (offset_type);
 
+/* Ensure only legit values are used.  */
+#define DW2_GDB_INDEX_SYMBOL_STATIC_SET_VALUE(cu_index, value) \
+  do { \
+    gdb_assert ((unsigned int) (value) <= 1); \
+    GDB_INDEX_SYMBOL_STATIC_SET_VALUE((cu_index), (value)); \
+  } while (0)
+
+/* Ensure only legit values are used.  */
+#define DW2_GDB_INDEX_SYMBOL_KIND_SET_VALUE(cu_index, value) \
+  do { \
+    gdb_assert ((value) >= GDB_INDEX_SYMBOL_KIND_TYPE \
+                && (value) <= GDB_INDEX_SYMBOL_KIND_OTHER); \
+    GDB_INDEX_SYMBOL_KIND_SET_VALUE((cu_index), (value)); \
+  } while (0)
+
+/* Ensure we don't use more than the alloted nuber of bits for the CU.  */
+#define DW2_GDB_INDEX_CU_SET_VALUE(cu_index, value) \
+  do { \
+    gdb_assert (((value) & ~GDB_INDEX_CU_MASK) == 0); \
+    GDB_INDEX_CU_SET_VALUE((cu_index), (value)); \
+  } while (0)
+
 /* A description of the mapped index.  The file format is described in
    a comment by the code that writes the index.  */
 struct mapped_index
@@ -179,6 +175,12 @@ struct mapped_index
   const char *constant_pool;
 };
 
+typedef struct dwarf2_per_cu_data *dwarf2_per_cu_ptr;
+DEF_VEC_P (dwarf2_per_cu_ptr);
+
+/* Collection of data recorded per objfile.
+   This hangs off of dwarf2_objfile_data_key.  */
+
 struct dwarf2_per_objfile
 {
   struct dwarf2_section_info info;
@@ -189,6 +191,7 @@ struct dwarf2_per_objfile
   struct dwarf2_section_info macro;
   struct dwarf2_section_info str;
   struct dwarf2_section_info ranges;
+  struct dwarf2_section_info addr;
   struct dwarf2_section_info frame;
   struct dwarf2_section_info eh_frame;
   struct dwarf2_section_info gdb_index;
@@ -198,7 +201,7 @@ struct dwarf2_per_objfile
   /* Back link.  */
   struct objfile *objfile;
 
-  /* A list of all the compilation units.  This is used to locate
+  /* Table of all the compilation units.  This is used to locate
      the target compilation unit of a particular reference.  */
   struct dwarf2_per_cu_data **all_comp_units;
 
@@ -206,19 +209,44 @@ struct dwarf2_per_objfile
   int n_comp_units;
 
   /* The number of .debug_types-related CUs.  */
-  int n_type_comp_units;
+  int n_type_units;
 
-  /* The .debug_types-related CUs.  */
-  struct dwarf2_per_cu_data **type_comp_units;
+  /* The .debug_types-related CUs (TUs).  */
+  struct signatured_type **all_type_units;
 
-  /* A chain of compilation units that are currently read in, so that
-     they can be freed later.  */
-  struct dwarf2_per_cu_data *read_in_chain;
+  /* The number of entries in all_type_unit_groups.  */
+  int n_type_unit_groups;
+
+  /* Table of type unit groups.
+     This exists to make it easy to iterate over all CUs and TU groups.  */
+  struct type_unit_group **all_type_unit_groups;
+
+  /* Table of struct type_unit_group objects.
+     The hash key is the DW_AT_stmt_list value.  */
+  htab_t type_unit_groups;
 
   /* A table mapping .debug_types signatures to its signatured_type entry.
      This is NULL if the .debug_types section hasn't been read in yet.  */
   htab_t signatured_types;
 
+  /* Type unit statistics, to see how well the scaling improvements
+     are doing.  */
+  struct tu_stats
+  {
+    int nr_uniq_abbrev_tables;
+    int nr_symtabs;
+    int nr_symtab_sharers;
+    int nr_stmt_less_type_units;
+  } tu_stats;
+
+  /* A chain of compilation units that are currently read in, so that
+     they can be freed later.  */
+  struct dwarf2_per_cu_data *read_in_chain;
+
+  /* A table mapping DW_AT_dwo_name values to struct dwo_file objects.
+     This is NULL if the table hasn't been allocated yet.  */
+  htab_t dwo_files;
+
   /* A flag indicating wether this objfile has a section loaded at a
      VMA of 0.  */
   int has_section_at_zero;
@@ -240,15 +268,13 @@ struct dwarf2_per_objfile
      symbols.  */
   int reading_partial_symbols;
 
-  /* Table mapping type .debug_info DIE offsets to types.
+  /* Table mapping type DIEs to their struct type *.
      This is NULL if not allocated yet.
-     It (currently) makes sense to allocate debug_types_type_hash lazily.
-     To keep things simple we allocate both lazily.  */
-  htab_t debug_info_type_hash;
+     The mapping is done via (CU/TU signature + DIE offset) -> type.  */
+  htab_t die_type_hash;
 
-  /* Table mapping type .debug_types DIE offsets to types.
-     This is NULL if not allocated yet.  */
-  htab_t debug_types_type_hash;
+  /* The CUs we recently read.  */
+  VEC (dwarf2_per_cu_ptr) *just_read_cus;
 };
 
 static struct dwarf2_per_objfile *dwarf2_per_objfile;
@@ -258,7 +284,8 @@ static struct dwarf2_per_objfile *dwarf2_per_objfile;
 /* Note that if the debugging section has been compressed, it might
    have a name like .zdebug_info.  */
 
-static const struct dwarf2_debug_sections dwarf2_elf_names = {
+static const struct dwarf2_debug_sections dwarf2_elf_names =
+{
   { ".debug_info", ".zdebug_info" },
   { ".debug_abbrev", ".zdebug_abbrev" },
   { ".debug_line", ".zdebug_line" },
@@ -268,18 +295,41 @@ static const struct dwarf2_debug_sections dwarf2_elf_names = {
   { ".debug_str", ".zdebug_str" },
   { ".debug_ranges", ".zdebug_ranges" },
   { ".debug_types", ".zdebug_types" },
+  { ".debug_addr", ".zdebug_addr" },
   { ".debug_frame", ".zdebug_frame" },
   { ".eh_frame", NULL },
   { ".gdb_index", ".zgdb_index" },
   23
 };
 
-/* local data types */
+/* List of DWO sections.  */
+
+static const struct dwo_section_names
+{
+  struct dwarf2_section_names abbrev_dwo;
+  struct dwarf2_section_names info_dwo;
+  struct dwarf2_section_names line_dwo;
+  struct dwarf2_section_names loc_dwo;
+  struct dwarf2_section_names macinfo_dwo;
+  struct dwarf2_section_names macro_dwo;
+  struct dwarf2_section_names str_dwo;
+  struct dwarf2_section_names str_offsets_dwo;
+  struct dwarf2_section_names types_dwo;
+}
+dwo_section_names =
+{
+  { ".debug_abbrev.dwo", ".zdebug_abbrev.dwo" },
+  { ".debug_info.dwo", ".zdebug_info.dwo" },
+  { ".debug_line.dwo", ".zdebug_line.dwo" },
+  { ".debug_loc.dwo", ".zdebug_loc.dwo" },
+  { ".debug_macinfo.dwo", ".zdebug_macinfo.dwo" },
+  { ".debug_macro.dwo", ".zdebug_macro.dwo" },
+  { ".debug_str.dwo", ".zdebug_str.dwo" },
+  { ".debug_str_offsets.dwo", ".zdebug_str_offsets.dwo" },
+  { ".debug_types.dwo", ".zdebug_types.dwo" },
+};
 
-/* We hold several abbreviation tables in memory at the same time.  */
-#ifndef ABBREV_HASH_SIZE
-#define ABBREV_HASH_SIZE 121
-#endif
+/* local data types */
 
 /* The data in a compilation unit header, after target2host
    translation, looks like this.  */
@@ -289,7 +339,7 @@ struct comp_unit_head
   short version;
   unsigned char addr_size;
   unsigned char signed_addr_p;
-  unsigned int abbrev_offset;
+  sect_offset abbrev_offset;
 
   /* Size of file offsets; either 4 or 8.  */
   unsigned int offset_size;
@@ -299,11 +349,11 @@ struct comp_unit_head
 
   /* Offset to the first byte of this compilation unit header in the
      .debug_info section, for resolving relative reference dies.  */
-  unsigned int offset;
+  sect_offset offset;
 
   /* Offset to first die in this cu from the start of the cu.
      This will be the first byte following the compilation unit header.  */
-  unsigned int first_die_offset;
+  cu_offset first_die_offset;
 };
 
 /* Type used for delaying computation of method physnames.
@@ -344,8 +394,6 @@ struct dwarf2_cu
   /* Non-zero if base_address has been set.  */
   int base_known;
 
-  struct function_range *first_fn, *last_fn, *cached_fn;
-
   /* The language we are debugging.  */
   enum language language;
   const struct language_defn *language_defn;
@@ -363,13 +411,13 @@ struct dwarf2_cu
      distinguish these in buildsym.c.  */
   struct pending **list_in_scope;
 
-  /* DWARF abbreviation table associated with this compilation unit.  */
-  struct abbrev_info **dwarf2_abbrevs;
-
-  /* Storage for the abbrev table.  */
-  struct obstack abbrev_obstack;
+  /* The abbrev table for this CU.
+     Normally this points to the abbrev table in the objfile.
+     But if DWO_UNIT is non-NULL this is the abbrev table in the DWO file.  */
+  struct abbrev_table *abbrev_table;
 
-  /* Hash table holding all the loaded partial DIEs.  */
+  /* Hash table holding all the loaded partial DIEs
+     with partial_die->offset.SECT_OFF as hash.  */
   htab_t partial_dies;
 
   /* Storage for things with the same lifetime as this read-in compilation
@@ -388,7 +436,8 @@ struct dwarf2_cu
   /* How many compilation units ago was this CU last referenced?  */
   int last_used;
 
-  /* A hash table of die offsets for following references.  */
+  /* A hash table of DIE cu_offset for following references with
+     die_info->offset.sect_off as hash.  */
   htab_t die_hash;
 
   /* Full DIEs if read in.  */
@@ -409,32 +458,50 @@ struct dwarf2_cu
   /* To be copied to symtab->call_site_htab.  */
   htab_t call_site_htab;
 
+  /* Non-NULL if this CU came from a DWO file.
+     There is an invariant here that is important to remember:
+     Except for attributes copied from the top level DIE in the "main"
+     (or "stub") file in preparation for reading the DWO file
+     (e.g., DW_AT_GNU_addr_base), we KISS: there is only *one* CU.
+     Either there isn't a DWO file (in which case this is NULL and the point
+     is moot), or there is and either we're not going to read it (in which
+     case this is NULL) or there is and we are reading it (in which case this
+     is non-NULL).  */
+  struct dwo_unit *dwo_unit;
+
+  /* The DW_AT_addr_base attribute if present, zero otherwise
+     (zero is a valid value though).
+     Note this value comes from the stub CU/TU's DIE.  */
+  ULONGEST addr_base;
+
+  /* The DW_AT_ranges_base attribute if present, zero otherwise
+     (zero is a valid value though).
+     Note this value comes from the stub CU/TU's DIE.
+     Also note that the value is zero in the non-DWO case so this value can
+     be used without needing to know whether DWO files are in use or not.  */
+  ULONGEST ranges_base;
+
   /* Mark used when releasing cached dies.  */
   unsigned int mark : 1;
 
-  /* This flag will be set if this compilation unit might include
-     inter-compilation-unit references.  */
-  unsigned int has_form_ref_addr : 1;
-
-  /* This flag will be set if this compilation unit includes any
-     DW_TAG_namespace DIEs.  If we know that there are explicit
-     DIEs for namespaces, we don't need to try to infer them
-     from mangled names.  */
-  unsigned int has_namespace_info : 1;
-
   /* This CU references .debug_loc.  See the symtab->locations_valid field.
      This test is imperfect as there may exist optimized debug code not using
      any location list and still facing inlining issues if handled as
      unoptimized code.  For a future better test see GCC PR other/32998.  */
-
   unsigned int has_loclist : 1;
+
+  /* These cache the results for producer_is_gxx_lt_4_6 and producer_is_icc.
+     CHECKED_PRODUCER is set if both PRODUCER_IS_GXX_LT_4_6 and PRODUCER_IS_ICC
+     are valid.  This information is cached because profiling CU expansion
+     showed excessive time spent in producer_is_gxx_lt_4_6.  */
+  unsigned int checked_producer : 1;
+  unsigned int producer_is_gxx_lt_4_6 : 1;
+  unsigned int producer_is_icc : 1;
 };
 
 /* Persistent data held for a compilation unit, even when not
    processing it.  We put a pointer to this structure in the
-   read_symtab_private field of the psymtab.  If we encounter
-   inter-compilation-unit references, we also maintain a sorted
-   list of all compilation units.  */
+   read_symtab_private field of the psymtab.  */
 
 struct dwarf2_per_cu_data
 {
@@ -442,29 +509,37 @@ struct dwarf2_per_cu_data
      bytes should suffice to store the length of any compilation unit
      - if it doesn't, GDB will fall over anyway.
      NOTE: Unlike comp_unit_head.length, this length includes
-     initial_length_size.  */
-  unsigned int offset;
+     initial_length_size.
+     If the DIE refers to a DWO file, this is always of the original die,
+     not the DWO file.  */
+  sect_offset offset;
   unsigned int length : 29;
 
   /* Flag indicating this compilation unit will be read in before
      any of the current compilation units are processed.  */
   unsigned int queued : 1;
 
-  /* This flag will be set if we need to load absolutely all DIEs
-     for this compilation unit, instead of just the ones we think
-     are interesting.  It gets set if we look for a DIE in the
+  /* This flag will be set when reading partial DIEs if we need to load
+     absolutely all DIEs for this compilation unit, instead of just the ones
+     we think are interesting.  It gets set if we look for a DIE in the
      hash table and don't find it.  */
   unsigned int load_all_dies : 1;
 
-  /* Non-null if this CU is from .debug_types; in which case it points
-     to the section.  Otherwise it's from .debug_info.  */
-  struct dwarf2_section_info *debug_types_section;
+  /* Non-zero if this CU is from .debug_types.  */
+  unsigned int is_debug_types : 1;
+
+  /* The section this CU/TU lives in.
+     If the DIE refers to a DWO file, this is always the original die,
+     not the DWO file.  */
+  struct dwarf2_section_info *info_or_types_section;
 
   /* Set to non-NULL iff this CU is currently loaded.  When it gets freed out
      of the CU cache it gets reset to NULL again.  */
   struct dwarf2_cu *cu;
 
-  /* The corresponding objfile.  */
+  /* The corresponding objfile.
+     Normally we can get the objfile from dwarf2_per_objfile.
+     However we can enter this file with just a "per_cu" handle.  */
   struct objfile *objfile;
 
   /* When using partial symbol tables, the 'psymtab' field is active.
@@ -472,47 +547,208 @@ struct dwarf2_per_cu_data
   union
   {
     /* The partial symbol table associated with this compilation unit,
-       or NULL for partial units (which do not have an associated
-       symtab).  */
+       or NULL for unread partial units.  */
     struct partial_symtab *psymtab;
 
     /* Data needed by the "quick" functions.  */
     struct dwarf2_per_cu_quick_data *quick;
   } v;
+
+  union
+  {
+    /* The CUs we import using DW_TAG_imported_unit.  This is filled in
+       while reading psymtabs, used to compute the psymtab dependencies,
+       and then cleared.  Then it is filled in again while reading full
+       symbols, and only deleted when the objfile is destroyed.  */
+    VEC (dwarf2_per_cu_ptr) *imported_symtabs;
+
+    /* Type units are grouped by their DW_AT_stmt_list entry so that they
+       can share them.  If this is a TU, this points to the containing
+       symtab.  */
+    struct type_unit_group *type_unit_group;
+  } s;
 };
 
 /* Entry in the signatured_types hash table.  */
 
 struct signatured_type
 {
+  /* The "per_cu" object of this type.
+     N.B.: This is the first member so that it's easy to convert pointers
+     between them.  */
+  struct dwarf2_per_cu_data per_cu;
+
+  /* The type's signature.  */
   ULONGEST signature;
 
-  /* Offset in .debug_types of the type defined by this TU.  */
-  unsigned int type_offset;
+  /* Offset in the TU of the type's DIE, as read from the TU header.
+     If the definition lives in a DWO file, this value is unusable.  */
+  cu_offset type_offset_in_tu;
+
+  /* Offset in the section of the type's DIE.
+     If the definition lives in a DWO file, this is the offset in the
+     .debug_types.dwo section.
+     The value is zero until the actual value is known.
+     Zero is otherwise not a valid section offset.  */
+  sect_offset type_offset_in_section;
+};
+
+/* A struct that can be used as a hash key for tables based on DW_AT_stmt_list.
+   This includes type_unit_group and quick_file_names.  */
 
-  /* The CU(/TU) of this type.  */
+struct stmt_list_hash
+{
+  /* The DWO unit this table is from or NULL if there is none.  */
+  struct dwo_unit *dwo_unit;
+
+  /* Offset in .debug_line or .debug_line.dwo.  */
+  sect_offset line_offset;
+};
+
+/* Each element of dwarf2_per_objfile->type_unit_groups is a pointer to
+   an object of this type.  */
+
+struct type_unit_group
+{
+  /* dwarf2read.c's main "handle" on the symtab.
+     To simplify things we create an artificial CU that "includes" all the
+     type units using this stmt_list so that the rest of the code still has
+     a "per_cu" handle on the symtab.
+     This PER_CU is recognized by having no section.  */
+#define IS_TYPE_UNIT_GROUP(per_cu) ((per_cu)->info_or_types_section == NULL)
   struct dwarf2_per_cu_data per_cu;
+
+  union
+  {
+    /* The TUs that share this DW_AT_stmt_list entry.
+       This is added to while parsing type units to build partial symtabs,
+       and is deleted afterwards and not used again.  */
+    VEC (dwarf2_per_cu_ptr) *tus;
+
+    /* When reading the line table in "quick" functions, we need a real TU.
+       Any will do, we know they all share the same DW_AT_stmt_list entry.
+       For simplicity's sake, we pick the first one.  */
+    struct dwarf2_per_cu_data *first_tu;
+  } t;
+
+  /* The primary symtab.
+     Type units in a group needn't all be defined in the same source file,
+     so we create an essentially anonymous symtab as the primary symtab.  */
+  struct symtab *primary_symtab;
+
+  /* The data used to construct the hash key.  */
+  struct stmt_list_hash hash;
+
+  /* The number of symtabs from the line header.
+     The value here must match line_header.num_file_names.  */
+  unsigned int num_symtabs;
+
+  /* The symbol tables for this TU (obtained from the files listed in
+     DW_AT_stmt_list).
+     WARNING: The order of entries here must match the order of entries
+     in the line header.  After the first TU using this type_unit_group, the
+     line header for the subsequent TUs is recreated from this.  This is done
+     because we need to use the same symtabs for each TU using the same
+     DW_AT_stmt_list value.  Also note that symtabs may be repeated here,
+     there's no guarantee the line header doesn't have duplicate entries.  */
+  struct symtab **symtabs;
+};
+
+/* These sections are what may appear in a "dwo" file.  */
+
+struct dwo_sections
+{
+  struct dwarf2_section_info abbrev;
+  struct dwarf2_section_info info;
+  struct dwarf2_section_info line;
+  struct dwarf2_section_info loc;
+  struct dwarf2_section_info macinfo;
+  struct dwarf2_section_info macro;
+  struct dwarf2_section_info str;
+  struct dwarf2_section_info str_offsets;
+  VEC (dwarf2_section_info_def) *types;
+};
+
+/* Common bits of DWO CUs/TUs.  */
+
+struct dwo_unit
+{
+  /* Backlink to the containing struct dwo_file.  */
+  struct dwo_file *dwo_file;
+
+  /* The "id" that distinguishes this CU/TU.
+     .debug_info calls this "dwo_id", .debug_types calls this "signature".
+     Since signatures came first, we stick with it for consistency.  */
+  ULONGEST signature;
+
+  /* The section this CU/TU lives in, in the DWO file.  */
+  struct dwarf2_section_info *info_or_types_section;
+
+  /* Same as dwarf2_per_cu_data:{offset,length} but for the DWO section.  */
+  sect_offset offset;
+  unsigned int length;
+
+  /* For types, offset in the type's DIE of the type defined by this TU.  */
+  cu_offset type_offset_in_tu;
+};
+
+/* Data for one DWO file.  */
+
+struct dwo_file
+{
+  /* The DW_AT_GNU_dwo_name attribute.
+     We don't manage space for this, it's an attribute.  */
+  const char *dwo_name;
+
+  /* The bfd, when the file is open.  Otherwise this is NULL.  */
+  bfd *dwo_bfd;
+
+  /* Section info for this file.  */
+  struct dwo_sections sections;
+
+  /* Table of CUs in the file.
+     Each element is a struct dwo_unit.  */
+  htab_t cus;
+
+  /* Table of TUs in the file.
+     Each element is a struct dwo_unit.  */
+  htab_t tus;
 };
 
 /* Struct used to pass misc. parameters to read_die_and_children, et
    al.  which are used for both .debug_info and .debug_types dies.
    All parameters here are unchanging for the life of the call.  This
-   struct exists to abstract away the constant parameters of die
-   reading.  */
+   struct exists to abstract away the constant parameters of die reading.  */
 
 struct die_reader_specs
 {
-  /* The bfd of this objfile.  */
+  /* die_section->asection->owner.  */
   bfd* abfd;
 
   /* The CU of the DIE we are parsing.  */
   struct dwarf2_cu *cu;
 
-  /* Pointer to start of section buffer.
-     This is either the start of .debug_info or .debug_types.  */
-  const gdb_byte *buffer;
+  /* Non-NULL if reading a DWO file.  */
+  struct dwo_file *dwo_file;
+
+  /* The section the die comes from.
+     This is either .debug_info or .debug_types, or the .dwo variants.  */
+  struct dwarf2_section_info *die_section;
+
+  /* die_section->buffer.  */
+  gdb_byte *buffer;
+
+  /* The end of the buffer.  */
+  const gdb_byte *buffer_end;
 };
 
+/* Type of function passed to init_cutu_and_read_dies, et.al.  */
+typedef void (die_reader_func_ftype) (const struct die_reader_specs *reader,
+				      gdb_byte *info_ptr,
+				      struct die_info *comp_unit_die,
+				      int has_children,
+				      void *data);
+
 /* The line number information for a compilation unit (found in the
    .debug_line section) begins with a "statement program header",
    which contains the following information.  */
@@ -565,7 +801,7 @@ struct line_header
 struct partial_die_info
   {
     /* Offset of this DIE.  */
-    unsigned int offset;
+    sect_offset offset;
 
     /* DWARF-2 tag for this DIE.  */
     ENUM_BITFIELD(dwarf_tag) tag : 16;
@@ -577,6 +813,7 @@ struct partial_die_info
     unsigned int has_type : 1;
     unsigned int has_specification : 1;
     unsigned int has_pc_info : 1;
+    unsigned int may_be_inlined : 1;
 
     /* Flag set if the SCOPE field of this structure has been
        computed.  */
@@ -603,8 +840,15 @@ struct partial_die_info
        when this compilation unit leaves the cache.  */
     char *scope;
 
-    /* The location description associated with this DIE, if any.  */
-    struct dwarf_block *locdesc;
+    /* Some data associated with the partial DIE.  The tag determines
+       which field is live.  */
+    union
+    {
+      /* The location description associated with this DIE, if any.  */
+      struct dwarf_block *locdesc;
+      /* The offset of an import, for DW_TAG_imported_unit.  */
+      sect_offset offset;
+    } d;
 
     /* If HAS_PC_INFO, the PC range associated with this DIE.  */
     CORE_ADDR lowpc;
@@ -619,7 +863,7 @@ struct partial_die_info
     /* If HAS_SPECIFICATION, the offset of the DIE referred to by
        DW_AT_specification (or DW_AT_abstract_origin or
        DW_AT_extension).  */
-    unsigned int spec_offset;
+    sect_offset spec_offset;
 
     /* Pointers to this DIE's parent, first child, and next sibling,
        if any.  */
@@ -643,6 +887,27 @@ struct attr_abbrev
     ENUM_BITFIELD(dwarf_form) form : 16;
   };
 
+/* Size of abbrev_table.abbrev_hash_table.  */
+#define ABBREV_HASH_SIZE 121
+
+/* Top level data structure to contain an abbreviation table.  */
+
+struct abbrev_table
+{
+  /* Where the abbrev table came from.
+     This is used as a sanity check when the table is used.  */
+  sect_offset offset;
+
+  /* Storage for the abbrev table.  */
+  struct obstack abbrev_obstack;
+
+  /* Hash table of abbrevs.
+     This is an array of size ABBREV_HASH_SIZE allocated in abbrev_obstack.
+     It could be statically allocated, but the previous code didn't so we
+     don't either.  */
+  struct abbrev_info **abbrevs;
+};
+
 /* Attributes have a name and a value.  */
 struct attribute
   {
@@ -683,7 +948,7 @@ struct die_info
     unsigned int abbrev;
 
     /* Offset in .debug_info or .debug_types section.  */
-    unsigned int offset;
+    sect_offset offset;
 
     /* The dies in a compilation unit form an n-ary tree.  PARENT
        points to this die's parent; CHILD points to the first child of
@@ -699,14 +964,6 @@ struct die_info
     struct attribute attrs[1];
   };
 
-struct function_range
-{
-  const char *name;
-  CORE_ADDR lowpc, highpc;
-  int seen_line;
-  struct function_range *next;
-};
-
 /* Get at parts of an attribute structure.  */
 
 #define DW_STRING(attr)    ((attr)->u.str)
@@ -803,6 +1060,7 @@ struct field_info
 struct dwarf2_queue_item
 {
   struct dwarf2_per_cu_data *per_cu;
+  enum language pretend_language;
   struct dwarf2_queue_item *next;
 };
 
@@ -865,11 +1123,13 @@ dwarf2_const_value_length_mismatch_complaint (const char *arg1, int arg2,
 }
 
 static void
-dwarf2_macros_too_long_complaint (struct dwarf2_section_info *section)
+dwarf2_section_buffer_overflow_complaint (struct dwarf2_section_info *section)
 {
   complaint (&symfile_complaints,
-	     _("macro info runs off end of `%s' section"),
-	     section->asection->name);
+	     _("debug info runs off end of %s section"
+	       " [in module %s]"),
+	     section->asection->name,
+	     bfd_get_filename (section->asection->owner));
 }
 
 static void
@@ -923,47 +1183,45 @@ static void add_partial_subprogram (struct partial_die_info *pdi,
 				    CORE_ADDR *lowpc, CORE_ADDR *highpc,
 				    int need_pc, struct dwarf2_cu *cu);
 
-static gdb_byte *locate_pdi_sibling (struct partial_die_info *orig_pdi,
-				     gdb_byte *buffer, gdb_byte *info_ptr,
-                                     bfd *abfd, struct dwarf2_cu *cu);
-
 static void dwarf2_psymtab_to_symtab (struct partial_symtab *);
 
 static void psymtab_to_symtab_1 (struct partial_symtab *);
 
-static void dwarf2_read_abbrevs (bfd *abfd, struct dwarf2_cu *cu);
+static struct abbrev_info *abbrev_table_lookup_abbrev
+  (const struct abbrev_table *, unsigned int);
 
-static void dwarf2_free_abbrev_table (void *);
+static struct abbrev_table *abbrev_table_read_table
+  (struct dwarf2_section_info *, sect_offset);
 
-static unsigned int peek_abbrev_code (bfd *, gdb_byte *);
+static void abbrev_table_free (struct abbrev_table *);
 
-static struct abbrev_info *peek_die_abbrev (gdb_byte *, unsigned int *,
-					    struct dwarf2_cu *);
+static void abbrev_table_free_cleanup (void *);
 
-static struct abbrev_info *dwarf2_lookup_abbrev (unsigned int,
-						 struct dwarf2_cu *);
+static void dwarf2_read_abbrevs (struct dwarf2_cu *,
+				 struct dwarf2_section_info *);
 
-static struct partial_die_info *load_partial_dies (bfd *,
-						   gdb_byte *, gdb_byte *,
-						   int, struct dwarf2_cu *);
+static void dwarf2_free_abbrev_table (void *);
+
+static unsigned int peek_abbrev_code (bfd *, gdb_byte *);
+
+static struct partial_die_info *load_partial_dies
+  (const struct die_reader_specs *, gdb_byte *, int);
 
-static gdb_byte *read_partial_die (struct partial_die_info *,
-                                   struct abbrev_info *abbrev,
-				   unsigned int, bfd *,
-				   gdb_byte *, gdb_byte *,
-				   struct dwarf2_cu *);
+static gdb_byte *read_partial_die (const struct die_reader_specs *,
+				   struct partial_die_info *,
+				   struct abbrev_info *,
+				   unsigned int,
+				   gdb_byte *);
 
-static struct partial_die_info *find_partial_die (unsigned int,
+static struct partial_die_info *find_partial_die (sect_offset,
 						  struct dwarf2_cu *);
 
 static void fixup_partial_die (struct partial_die_info *,
 			       struct dwarf2_cu *);
 
-static gdb_byte *read_attribute (struct attribute *, struct attr_abbrev *,
-                                 bfd *, gdb_byte *, struct dwarf2_cu *);
-
-static gdb_byte *read_attribute_value (struct attribute *, unsigned,
-                                       bfd *, gdb_byte *, struct dwarf2_cu *);
+static gdb_byte *read_attribute (const struct die_reader_specs *,
+				 struct attribute *, struct attr_abbrev *,
+				 gdb_byte *);
 
 static unsigned int read_1_byte (bfd *, gdb_byte *);
 
@@ -989,6 +1247,9 @@ static LONGEST read_offset (bfd *, gdb_byte *, const struct comp_unit_head *,
 
 static LONGEST read_offset_1 (bfd *, gdb_byte *, unsigned int);
 
+static sect_offset read_abbrev_offset (struct dwarf2_section_info *,
+				       sect_offset);
+
 static gdb_byte *read_n_bytes (bfd *, gdb_byte *, unsigned int);
 
 static char *read_direct_string (bfd *, gdb_byte *, unsigned int *);
@@ -997,11 +1258,15 @@ static char *read_indirect_string (bfd *, gdb_byte *,
                                    const struct comp_unit_head *,
                                    unsigned int *);
 
-static unsigned long read_unsigned_leb128 (bfd *, gdb_byte *, unsigned int *);
+static ULONGEST read_unsigned_leb128 (bfd *, gdb_byte *, unsigned int *);
 
-static long read_signed_leb128 (bfd *, gdb_byte *, unsigned int *);
+static LONGEST read_signed_leb128 (bfd *, gdb_byte *, unsigned int *);
 
-static gdb_byte *skip_leb128 (bfd *, gdb_byte *);
+static CORE_ADDR read_addr_index_from_leb128 (struct dwarf2_cu *, gdb_byte *,
+					      unsigned int *);
+
+static char *read_str_index (const struct die_reader_specs *reader,
+			     struct dwarf2_cu *cu, ULONGEST str_index);
 
 static void set_cu_language (unsigned int, struct dwarf2_cu *);
 
@@ -1009,8 +1274,7 @@ static struct attribute *dwarf2_attr (struct die_info *, unsigned int,
 				      struct dwarf2_cu *);
 
 static struct attribute *dwarf2_attr_no_follow (struct die_info *,
-						unsigned int,
-						struct dwarf2_cu *);
+						unsigned int);
 
 static int dwarf2_flag_true_p (struct die_info *die, unsigned name,
                                struct dwarf2_cu *cu);
@@ -1025,9 +1289,8 @@ static void free_line_header (struct line_header *lh);
 static void add_file_name (struct line_header *, char *, unsigned int,
                            unsigned int, unsigned int);
 
-static struct line_header *(dwarf_decode_line_header
-                            (unsigned int offset,
-                             bfd *abfd, struct dwarf2_cu *cu));
+static struct line_header *dwarf_decode_line_header (unsigned int offset,
+						     struct dwarf2_cu *cu);
 
 static void dwarf_decode_lines (struct line_header *, const char *,
 				struct dwarf2_cu *, struct partial_symtab *,
@@ -1035,6 +1298,9 @@ static void dwarf_decode_lines (struct line_header *, const char *,
 
 static void dwarf2_start_subfile (char *, const char *, const char *);
 
+static void dwarf2_start_symtab (struct dwarf2_cu *,
+				 char *, char *, CORE_ADDR);
+
 static struct symbol *new_symbol (struct die_info *, struct type *,
 				  struct dwarf2_cu *);
 
@@ -1048,7 +1314,7 @@ static void dwarf2_const_value_attr (struct attribute *attr,
 				     struct type *type,
 				     const char *name,
 				     struct obstack *obstack,
-				     struct dwarf2_cu *cu, long *value,
+				     struct dwarf2_cu *cu, LONGEST *value,
 				     gdb_byte **bytes,
 				     struct dwarf2_locexpr_baton **baton);
 
@@ -1072,7 +1338,7 @@ static struct type *read_type_die (struct die_info *, struct dwarf2_cu *);
 
 static struct type *read_type_die_1 (struct die_info *, struct dwarf2_cu *);
 
-static char *determine_prefix (struct die_info *die, struct dwarf2_cu *);
+static const char *determine_prefix (struct die_info *die, struct dwarf2_cu *);
 
 static char *typename_concat (struct obstack *obs, const char *prefix,
 			      const char *suffix, int physname,
@@ -1139,26 +1405,21 @@ static CORE_ADDR decode_locdesc (struct dwarf_block *, struct dwarf2_cu *);
 static enum dwarf_array_dim_ordering read_array_order (struct die_info *,
 						       struct dwarf2_cu *);
 
-static struct die_info *read_comp_unit (gdb_byte *, struct dwarf2_cu *);
-
-static struct die_info *read_die_and_children_1 (const struct die_reader_specs *reader,
-						 gdb_byte *info_ptr,
-						 gdb_byte **new_info_ptr,
-						 struct die_info *parent);
-
-static struct die_info *read_die_and_children (const struct die_reader_specs *reader,
+static struct die_info *read_die_and_children (const struct die_reader_specs *,
 					       gdb_byte *info_ptr,
 					       gdb_byte **new_info_ptr,
 					       struct die_info *parent);
 
-static struct die_info *read_die_and_siblings (const struct die_reader_specs *reader,
+static struct die_info *read_die_and_siblings (const struct die_reader_specs *,
 					       gdb_byte *info_ptr,
 					       gdb_byte **new_info_ptr,
 					       struct die_info *parent);
 
-static gdb_byte *read_full_die (const struct die_reader_specs *reader,
-				struct die_info **, gdb_byte *,
-				int *);
+static gdb_byte *read_full_die_1 (const struct die_reader_specs *,
+				  struct die_info **, gdb_byte *, int *, int);
+
+static gdb_byte *read_full_die (const struct die_reader_specs *,
+				struct die_info **, gdb_byte *, int *);
 
 static void process_die (struct die_info *, struct dwarf2_cu *);
 
@@ -1174,19 +1435,15 @@ static const char *dwarf2_full_name (char *name,
 static struct die_info *dwarf2_extension (struct die_info *die,
 					  struct dwarf2_cu **);
 
-static char *dwarf_tag_name (unsigned int);
+static const char *dwarf_tag_name (unsigned int);
 
-static char *dwarf_attr_name (unsigned int);
+static const char *dwarf_attr_name (unsigned int);
 
-static char *dwarf_form_name (unsigned int);
+static const char *dwarf_form_name (unsigned int);
 
 static char *dwarf_bool_name (unsigned int);
 
-static char *dwarf_type_encoding_name (unsigned int);
-
-#if 0
-static char *dwarf_cfi_name (unsigned int);
-#endif
+static const char *dwarf_type_encoding_name (unsigned int);
 
 static struct die_info *sibling_die (struct die_info *);
 
@@ -1204,7 +1461,7 @@ static void store_in_ref_table (struct die_info *,
 
 static int is_ref_attr (struct attribute *);
 
-static unsigned int dwarf2_get_ref_die_offset (struct attribute *);
+static sect_offset dwarf2_get_ref_die_offset (struct attribute *);
 
 static LONGEST dwarf2_get_attr_constant_value (struct attribute *, int);
 
@@ -1222,33 +1479,25 @@ static struct die_info *follow_die_sig (struct die_info *,
 
 static struct signatured_type *lookup_signatured_type_at_offset
     (struct objfile *objfile,
-     struct dwarf2_section_info *section,
-     unsigned int offset);
+     struct dwarf2_section_info *section, sect_offset offset);
+
+static void load_full_type_unit (struct dwarf2_per_cu_data *per_cu);
+
+static void read_signatured_type (struct signatured_type *);
 
-static void read_signatured_type_at_offset (struct objfile *objfile,
-					    struct dwarf2_section_info *sect,
-					    unsigned int offset);
+static struct type_unit_group *get_type_unit_group
+    (struct dwarf2_cu *, struct attribute *);
 
-static void read_signatured_type (struct objfile *,
-				  struct signatured_type *type_sig);
+static void build_type_unit_groups (die_reader_func_ftype *, void *);
 
 /* memory allocation interface */
 
 static struct dwarf_block *dwarf_alloc_block (struct dwarf2_cu *);
 
-static struct abbrev_info *dwarf_alloc_abbrev (struct dwarf2_cu *);
-
 static struct die_info *dwarf_alloc_die (struct dwarf2_cu *, int);
 
-static void initialize_cu_func_list (struct dwarf2_cu *);
-
-static void add_to_cu_func_list (const char *, CORE_ADDR, CORE_ADDR,
-				 struct dwarf2_cu *);
-
-static void dwarf_decode_macros (struct line_header *, unsigned int,
-                                 char *, bfd *, struct dwarf2_cu *,
-				 struct dwarf2_section_info *,
-				 int);
+static void dwarf_decode_macros (struct dwarf2_cu *, unsigned int,
+				 char *, int);
 
 static int attr_form_is_block (struct attribute *);
 
@@ -1264,9 +1513,9 @@ static void dwarf2_symbol_mark_computed (struct attribute *attr,
 					 struct symbol *sym,
 					 struct dwarf2_cu *cu);
 
-static gdb_byte *skip_one_die (gdb_byte *buffer, gdb_byte *info_ptr,
-			       struct abbrev_info *abbrev,
-			       struct dwarf2_cu *cu);
+static gdb_byte *skip_one_die (const struct die_reader_specs *reader,
+			       gdb_byte *info_ptr,
+			       struct abbrev_info *abbrev);
 
 static void free_stack_comp_unit (void *);
 
@@ -1275,36 +1524,38 @@ static hashval_t partial_die_hash (const void *item);
 static int partial_die_eq (const void *item_lhs, const void *item_rhs);
 
 static struct dwarf2_per_cu_data *dwarf2_find_containing_comp_unit
-  (unsigned int offset, struct objfile *objfile);
-
-static struct dwarf2_per_cu_data *dwarf2_find_comp_unit
-  (unsigned int offset, struct objfile *objfile);
+  (sect_offset offset, struct objfile *objfile);
 
 static void init_one_comp_unit (struct dwarf2_cu *cu,
-				struct objfile *objfile);
+				struct dwarf2_per_cu_data *per_cu);
 
 static void prepare_one_comp_unit (struct dwarf2_cu *cu,
-				   struct die_info *comp_unit_die);
+				   struct die_info *comp_unit_die,
+				   enum language pretend_language);
 
-static void free_one_comp_unit (void *);
+static void free_heap_comp_unit (void *);
 
 static void free_cached_comp_units (void *);
 
 static void age_cached_comp_units (void);
 
-static void free_one_cached_comp_unit (void *);
+static void free_one_cached_comp_unit (struct dwarf2_per_cu_data *);
 
 static struct type *set_die_type (struct die_info *, struct type *,
 				  struct dwarf2_cu *);
 
 static void create_all_comp_units (struct objfile *);
 
-static int create_debug_types_hash_table (struct objfile *objfile);
+static int create_all_type_units (struct objfile *);
 
 static void load_full_comp_unit (struct dwarf2_per_cu_data *,
-				 struct objfile *);
+				 enum language);
+
+static void process_full_comp_unit (struct dwarf2_per_cu_data *,
+				    enum language);
 
-static void process_full_comp_unit (struct dwarf2_per_cu_data *);
+static void process_full_type_unit (struct dwarf2_per_cu_data *,
+				    enum language);
 
 static void dwarf2_add_dependence (struct dwarf2_cu *,
 				   struct dwarf2_per_cu_data *);
@@ -1313,7 +1564,7 @@ static void dwarf2_mark (struct dwarf2_cu *);
 
 static void dwarf2_clear_marks (struct dwarf2_per_cu_data *);
 
-static struct type *get_die_type_at_offset (unsigned int,
+static struct type *get_die_type_at_offset (sect_offset,
 					    struct dwarf2_per_cu_data *per_cu);
 
 static struct type *get_die_type (struct die_info *die, struct dwarf2_cu *cu);
@@ -1321,9 +1572,13 @@ static struct type *get_die_type (struct die_info *die, struct dwarf2_cu *cu);
 static void dwarf2_release_queue (void *dummy);
 
 static void queue_comp_unit (struct dwarf2_per_cu_data *per_cu,
-			     struct objfile *objfile);
+			     enum language pretend_language);
 
-static void process_queue (struct objfile *objfile);
+static int maybe_queue_comp_unit (struct dwarf2_cu *this_cu,
+				  struct dwarf2_per_cu_data *per_cu,
+				  enum language pretend_language);
+
+static void process_queue (void);
 
 static void find_file_and_directory (struct die_info *die,
 				     struct dwarf2_cu *cu,
@@ -1332,18 +1587,31 @@ static void find_file_and_directory (struct die_info *die,
 static char *file_full_name (int file, struct line_header *lh,
 			     const char *comp_dir);
 
-static gdb_byte *partial_read_comp_unit_head (struct comp_unit_head *header,
-					      gdb_byte *info_ptr,
-					      gdb_byte *buffer,
-					      unsigned int buffer_size,
-					      bfd *abfd,
-					      int is_debug_types_section);
+static void init_cutu_and_read_dies
+  (struct dwarf2_per_cu_data *this_cu, struct abbrev_table *abbrev_table,
+   int use_existing_cu, int keep,
+   die_reader_func_ftype *die_reader_func, void *data);
 
-static void init_cu_die_reader (struct die_reader_specs *reader,
-				struct dwarf2_cu *cu);
+static void init_cutu_and_read_dies_simple
+  (struct dwarf2_per_cu_data *this_cu,
+   die_reader_func_ftype *die_reader_func, void *data);
 
 static htab_t allocate_signatured_type_table (struct objfile *objfile);
 
+static htab_t allocate_dwo_unit_table (struct objfile *objfile);
+
+static struct dwo_unit *lookup_dwo_comp_unit
+  (struct dwarf2_per_cu_data *, char *, const char *, ULONGEST);
+
+static struct dwo_unit *lookup_dwo_type_unit
+  (struct signatured_type *, char *, const char *);
+
+static void free_dwo_file_cleanup (void *);
+
+static void munmap_section_buffer (struct dwarf2_section_info *);
+
+static void process_cu_includes (void);
+
 #if WORDS_BIGENDIAN
 
 /* Convert VALUE between big- and little-endian.  */
@@ -1464,6 +1732,11 @@ dwarf2_locate_sections (bfd *abfd, asection *sectp, void *vnames)
       dwarf2_per_objfile->str.asection = sectp;
       dwarf2_per_objfile->str.size = bfd_get_section_size (sectp);
     }
+  else if (section_is_p (sectp->name, &names->addr))
+    {
+      dwarf2_per_objfile->addr.asection = sectp;
+      dwarf2_per_objfile->addr.size = bfd_get_section_size (sectp);
+    }
   else if (section_is_p (sectp->name, &names->frame))
     {
       dwarf2_per_objfile->frame.asection = sectp;
@@ -1471,7 +1744,7 @@ dwarf2_locate_sections (bfd *abfd, asection *sectp, void *vnames)
     }
   else if (section_is_p (sectp->name, &names->eh_frame))
     {
-      flagword aflag = bfd_get_section_flags (ignore_abfd, sectp);
+      flagword aflag = bfd_get_section_flags (abfd, sectp);
 
       if (aflag & SEC_HAS_CONTENTS)
         {
@@ -1513,7 +1786,7 @@ static void
 zlib_decompress_section (struct objfile *objfile, asection *sectp,
                          gdb_byte **outbuf, bfd_size_type *outsize)
 {
-  bfd *abfd = objfile->obfd;
+  bfd *abfd = sectp->owner;
 #ifndef HAVE_ZLIB_H
   error (_("Support for zlib-compressed DWARF data (from '%s') "
            "is disabled in this copy of GDB"),
@@ -1585,7 +1858,8 @@ zlib_decompress_section (struct objfile *objfile, asection *sectp,
 #endif
 }
 
-/* A helper function that decides whether a section is empty.  */
+/* A helper function that decides whether a section is empty,
+   or not present.  */
 
 static int
 dwarf2_section_empty_p (struct dwarf2_section_info *info)
@@ -1593,15 +1867,17 @@ dwarf2_section_empty_p (struct dwarf2_section_info *info)
   return info->asection == NULL || info->size == 0;
 }
 
-/* Read the contents of the section SECTP from object file specified by
-   OBJFILE, store info about the section into INFO.
+/* Read the contents of the section INFO.
+   OBJFILE is the main object file, but not necessarily the file where
+   the section comes from.  E.g., for DWO files INFO->asection->owner
+   is the bfd of the DWO file.
    If the section is compressed, uncompress it before returning.  */
 
 static void
 dwarf2_read_section (struct objfile *objfile, struct dwarf2_section_info *info)
 {
-  bfd *abfd = objfile->obfd;
   asection *sectp = info->asection;
+  bfd *abfd;
   gdb_byte *buf, *retbuf;
   unsigned char header[4];
 
@@ -1614,6 +1890,9 @@ dwarf2_read_section (struct objfile *objfile, struct dwarf2_section_info *info)
   if (dwarf2_section_empty_p (info))
     return;
 
+  /* Note that ABFD may not be from OBJFILE, e.g. a DWO section.  */
+  abfd = sectp->owner;
+
   /* Check if the file has a 4-byte header indicating compression.  */
   if (info->size > sizeof (header)
       && bfd_seek (abfd, sectp->filepos, SEEK_SET) == 0
@@ -1740,8 +2019,8 @@ dwarf2_get_section_info (struct objfile *objfile,
    line_header when we're done and don't need to record it here.  */
 struct quick_file_names
 {
-  /* The offset in .debug_line of the line table.  We hash on this.  */
-  unsigned int offset;
+  /* The data used to construct the hash key.  */
+  struct stmt_list_hash hash;
 
   /* The number of entries in file_names, real_names.  */
   unsigned int num_file_names;
@@ -1778,6 +2057,34 @@ struct dwarf2_per_cu_quick_data
   unsigned int no_file_data : 1;
 };
 
+/* Utility hash function for a stmt_list_hash.  */
+
+static hashval_t
+hash_stmt_list_entry (const struct stmt_list_hash *stmt_list_hash)
+{
+  hashval_t v = 0;
+
+  if (stmt_list_hash->dwo_unit != NULL)
+    v += (uintptr_t) stmt_list_hash->dwo_unit->dwo_file;
+  v += stmt_list_hash->line_offset.sect_off;
+  return v;
+}
+
+/* Utility equality function for a stmt_list_hash.  */
+
+static int
+eq_stmt_list_entry (const struct stmt_list_hash *lhs,
+		    const struct stmt_list_hash *rhs)
+{
+  if ((lhs->dwo_unit != NULL) != (rhs->dwo_unit != NULL))
+    return 0;
+  if (lhs->dwo_unit != NULL
+      && lhs->dwo_unit->dwo_file != rhs->dwo_unit->dwo_file)
+    return 0;
+
+  return lhs->line_offset.sect_off == rhs->line_offset.sect_off;
+}
+
 /* Hash function for a quick_file_names.  */
 
 static hashval_t
@@ -1785,7 +2092,7 @@ hash_file_name_entry (const void *e)
 {
   const struct quick_file_names *file_data = e;
 
-  return file_data->offset;
+  return hash_stmt_list_entry (&file_data->hash);
 }
 
 /* Equality function for a quick_file_names.  */
@@ -1796,7 +2103,7 @@ eq_file_name_entry (const void *a, const void *b)
   const struct quick_file_names *ea = a;
   const struct quick_file_names *eb = b;
 
-  return ea->offset == eb->offset;
+  return eq_stmt_list_entry (&ea->hash, &eb->hash);
 }
 
 /* Delete function for a quick_file_names.  */
@@ -1835,34 +2142,39 @@ create_quick_file_names_table (unsigned int nr_initial_entries)
 static void
 load_cu (struct dwarf2_per_cu_data *per_cu)
 {
-  if (per_cu->debug_types_section)
-    read_signatured_type_at_offset (per_cu->objfile,
-				    per_cu->debug_types_section,
-				    per_cu->offset);
+  if (per_cu->is_debug_types)
+    load_full_type_unit (per_cu);
   else
-    load_full_comp_unit (per_cu, per_cu->objfile);
-
-  dwarf2_find_base_address (per_cu->cu->dies, per_cu->cu);
+    load_full_comp_unit (per_cu, language_minimal);
 
   gdb_assert (per_cu->cu != NULL);
+
+  dwarf2_find_base_address (per_cu->cu->dies, per_cu->cu);
 }
 
-/* Read in the symbols for PER_CU.  OBJFILE is the objfile from which
-   this CU came.  */
+/* Read in the symbols for PER_CU.  */
 
 static void
-dw2_do_instantiate_symtab (struct objfile *objfile,
-			   struct dwarf2_per_cu_data *per_cu)
+dw2_do_instantiate_symtab (struct dwarf2_per_cu_data *per_cu)
 {
   struct cleanup *back_to;
 
-  back_to = make_cleanup (dwarf2_release_queue, NULL);
+  /* Skip type_unit_groups, reading the type units they contain
+     is handled elsewhere.  */
+  if (IS_TYPE_UNIT_GROUP (per_cu))
+    return;
 
-  queue_comp_unit (per_cu, objfile);
+  back_to = make_cleanup (dwarf2_release_queue, NULL);
 
-  load_cu (per_cu);
+  if (dwarf2_per_objfile->using_index
+      ? per_cu->v.quick->symtab == NULL
+      : (per_cu->v.psymtab == NULL || !per_cu->v.psymtab->readin))
+    {
+      queue_comp_unit (per_cu, language_minimal);
+      load_cu (per_cu);
+    }
 
-  process_queue (objfile);
+  process_queue ();
 
   /* Age the cache, releasing compilation units that have not
      been used recently.  */
@@ -1876,20 +2188,32 @@ dw2_do_instantiate_symtab (struct objfile *objfile,
    table.  */
 
 static struct symtab *
-dw2_instantiate_symtab (struct objfile *objfile,
-			struct dwarf2_per_cu_data *per_cu)
+dw2_instantiate_symtab (struct dwarf2_per_cu_data *per_cu)
 {
+  gdb_assert (dwarf2_per_objfile->using_index);
   if (!per_cu->v.quick->symtab)
     {
       struct cleanup *back_to = make_cleanup (free_cached_comp_units, NULL);
       increment_reading_symtab ();
-      dw2_do_instantiate_symtab (objfile, per_cu);
+      dw2_do_instantiate_symtab (per_cu);
+      process_cu_includes ();
       do_cleanups (back_to);
     }
   return per_cu->v.quick->symtab;
 }
 
-/* Return the CU given its index.  */
+/* Return the CU given its index.
+
+   This is intended for loops like:
+
+   for (i = 0; i < (dwarf2_per_objfile->n_comp_units
+		    + dwarf2_per_objfile->n_type_units); ++i)
+     {
+       struct dwarf2_per_cu_data *per_cu = dw2_get_cu (i);
+
+       ...;
+     }
+*/
 
 static struct dwarf2_per_cu_data *
 dw2_get_cu (int index)
@@ -1897,8 +2221,38 @@ dw2_get_cu (int index)
   if (index >= dwarf2_per_objfile->n_comp_units)
     {
       index -= dwarf2_per_objfile->n_comp_units;
-      return dwarf2_per_objfile->type_comp_units[index];
+      gdb_assert (index < dwarf2_per_objfile->n_type_units);
+      return &dwarf2_per_objfile->all_type_units[index]->per_cu;
+    }
+
+  return dwarf2_per_objfile->all_comp_units[index];
+}
+
+/* Return the primary CU given its index.
+   The difference between this function and dw2_get_cu is in the handling
+   of type units (TUs).  Here we return the type_unit_group object.
+
+   This is intended for loops like:
+
+   for (i = 0; i < (dwarf2_per_objfile->n_comp_units
+		    + dwarf2_per_objfile->n_type_unit_groups); ++i)
+     {
+       struct dwarf2_per_cu_data *per_cu = dw2_get_primary_cu (i);
+
+       ...;
+     }
+*/
+
+static struct dwarf2_per_cu_data *
+dw2_get_primary_cu (int index)
+{
+  if (index >= dwarf2_per_objfile->n_comp_units)
+    {
+      index -= dwarf2_per_objfile->n_comp_units;
+      gdb_assert (index < dwarf2_per_objfile->n_type_unit_groups);
+      return &dwarf2_per_objfile->all_type_unit_groups[index]->per_cu;
     }
+
   return dwarf2_per_objfile->all_comp_units[index];
 }
 
@@ -1953,9 +2307,10 @@ create_cus_from_index (struct objfile *objfile, const gdb_byte *cu_list,
 
       the_cu = OBSTACK_ZALLOC (&objfile->objfile_obstack,
 			       struct dwarf2_per_cu_data);
-      the_cu->offset = offset;
+      the_cu->offset.sect_off = offset;
       the_cu->length = length;
       the_cu->objfile = objfile;
+      the_cu->info_or_types_section = &dwarf2_per_objfile->info;
       the_cu->v.quick = OBSTACK_ZALLOC (&objfile->objfile_obstack,
 					struct dwarf2_per_cu_quick_data);
       dwarf2_per_objfile->all_comp_units[i / 2] = the_cu;
@@ -1975,41 +2330,42 @@ create_signatured_type_table_from_index (struct objfile *objfile,
   offset_type i;
   htab_t sig_types_hash;
 
-  dwarf2_per_objfile->n_type_comp_units = elements / 3;
-  dwarf2_per_objfile->type_comp_units
+  dwarf2_per_objfile->n_type_units = elements / 3;
+  dwarf2_per_objfile->all_type_units
     = obstack_alloc (&objfile->objfile_obstack,
-		     dwarf2_per_objfile->n_type_comp_units
-		     * sizeof (struct dwarf2_per_cu_data *));
+		     dwarf2_per_objfile->n_type_units
+		     * sizeof (struct signatured_type *));
 
   sig_types_hash = allocate_signatured_type_table (objfile);
 
   for (i = 0; i < elements; i += 3)
     {
-      struct signatured_type *type_sig;
-      ULONGEST offset, type_offset, signature;
+      struct signatured_type *sig_type;
+      ULONGEST offset, type_offset_in_tu, signature;
       void **slot;
 
       if (!extract_cu_value (bytes, &offset)
-	  || !extract_cu_value (bytes + 8, &type_offset))
+	  || !extract_cu_value (bytes + 8, &type_offset_in_tu))
 	return 0;
       signature = extract_unsigned_integer (bytes + 16, 8, BFD_ENDIAN_LITTLE);
       bytes += 3 * 8;
 
-      type_sig = OBSTACK_ZALLOC (&objfile->objfile_obstack,
+      sig_type = OBSTACK_ZALLOC (&objfile->objfile_obstack,
 				 struct signatured_type);
-      type_sig->signature = signature;
-      type_sig->type_offset = type_offset;
-      type_sig->per_cu.debug_types_section = section;
-      type_sig->per_cu.offset = offset;
-      type_sig->per_cu.objfile = objfile;
-      type_sig->per_cu.v.quick
+      sig_type->signature = signature;
+      sig_type->type_offset_in_tu.cu_off = type_offset_in_tu;
+      sig_type->per_cu.is_debug_types = 1;
+      sig_type->per_cu.info_or_types_section = section;
+      sig_type->per_cu.offset.sect_off = offset;
+      sig_type->per_cu.objfile = objfile;
+      sig_type->per_cu.v.quick
 	= OBSTACK_ZALLOC (&objfile->objfile_obstack,
 			  struct dwarf2_per_cu_quick_data);
 
-      slot = htab_find_slot (sig_types_hash, type_sig, INSERT);
-      *slot = type_sig;
+      slot = htab_find_slot (sig_types_hash, sig_type, INSERT);
+      *slot = sig_type;
 
-      dwarf2_per_objfile->type_comp_units[i / 3] = &type_sig->per_cu;
+      dwarf2_per_objfile->all_type_units[i / 3] = sig_type;
     }
 
   dwarf2_per_objfile->signatured_types = sig_types_hash;
@@ -2117,7 +2473,7 @@ find_slot_in_mapped_hash (struct mapped_index *index, const char *name,
     }
 
   /* Index version 4 did not support case insensitive searches.  But the
-     indexes for case insensitive languages are built in lowercase, therefore
+     indices for case insensitive languages are built in lowercase, therefore
      simulate our NAME being searched is also lowercased.  */
   hash = mapped_index_string_hash ((index->version == 4
                                     && case_sensitivity == case_sensitive_off
@@ -2184,13 +2540,43 @@ dwarf2_read_index (struct objfile *objfile)
   /* Versions earlier than 3 emitted every copy of a psymbol.  This
      causes the index to behave very poorly for certain requests.  Version 3
      contained incomplete addrmap.  So, it seems better to just ignore such
-     indices.  Index version 4 uses a different hash function than index
-     version 5 and later.  */
+     indices.  */
   if (version < 4)
-    return 0;
+    {
+      static int warning_printed = 0;
+      if (!warning_printed)
+	{
+	  warning (_("Skipping obsolete .gdb_index section in %s."),
+		   objfile->name);
+	  warning_printed = 1;
+	}
+      return 0;
+    }
+  /* Index version 4 uses a different hash function than index version
+     5 and later.
+
+     Versions earlier than 6 did not emit psymbols for inlined
+     functions.  Using these files will cause GDB not to be able to
+     set breakpoints on inlined functions by name, so we ignore these
+     indices unless the user has done
+     "set use-deprecated-index-sections on".  */
+  if (version < 6 && !use_deprecated_index_sections)
+    {
+      static int warning_printed = 0;
+      if (!warning_printed)
+	{
+	  warning (_("\
+Skipping deprecated .gdb_index section in %s.\n\
+Do \"set use-deprecated-index-sections on\" before the file is read\n\
+to use the section anyway."),
+		   objfile->name);
+	  warning_printed = 1;
+	}
+      return 0;
+    }
   /* Indexes with higher version than the one supported by GDB may be no
      longer backward compatible.  */
-  if (version > 5)
+  if (version > 7)
     return 0;
 
   map = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct mapped_index);
@@ -2224,6 +2610,10 @@ dwarf2_read_index (struct objfile *objfile)
 
   map->constant_pool = addr + MAYBE_SWAP (metadata[i]);
 
+  /* Don't use the index if it's empty.  */
+  if (map->symbol_table_slots == 0)
+    return 0;
+
   if (!create_cus_from_index (objfile, cu_list, cu_list_elements))
     return 0;
 
@@ -2265,75 +2655,87 @@ dw2_setup (struct objfile *objfile)
   gdb_assert (dwarf2_per_objfile);
 }
 
-/* A helper for the "quick" functions which attempts to read the line
-   table for THIS_CU.  */
+/* Reader function for dw2_build_type_unit_groups.  */
 
-static struct quick_file_names *
-dw2_get_file_names (struct objfile *objfile,
-		    struct dwarf2_per_cu_data *this_cu)
+static void
+dw2_build_type_unit_groups_reader (const struct die_reader_specs *reader,
+				   gdb_byte *info_ptr,
+				   struct die_info *type_unit_die,
+				   int has_children,
+				   void *data)
 {
-  bfd *abfd = objfile->obfd;
+  struct dwarf2_cu *cu = reader->cu;
+  struct attribute *attr;
+  struct type_unit_group *tu_group;
+
+  gdb_assert (data == NULL);
+
+  if (! has_children)
+    return;
+
+  attr = dwarf2_attr_no_follow (type_unit_die, DW_AT_stmt_list);
+  /* Call this for its side-effect of creating the associated
+     struct type_unit_group if it doesn't already exist.  */
+  tu_group = get_type_unit_group (cu, attr);
+}
+
+/* Build dwarf2_per_objfile->type_unit_groups.
+   This function may be called multiple times.  */
+
+static void
+dw2_build_type_unit_groups (void)
+{
+  if (dwarf2_per_objfile->type_unit_groups == NULL)
+    build_type_unit_groups (dw2_build_type_unit_groups_reader, NULL);
+}
+
+/* die_reader_func for dw2_get_file_names.  */
+
+static void
+dw2_get_file_names_reader (const struct die_reader_specs *reader,
+			   gdb_byte *info_ptr,
+			   struct die_info *comp_unit_die,
+			   int has_children,
+			   void *data)
+{
+  struct dwarf2_cu *cu = reader->cu;
+  struct dwarf2_per_cu_data *this_cu = cu->per_cu;  
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
+  struct dwarf2_per_cu_data *lh_cu;
   struct line_header *lh;
   struct attribute *attr;
-  struct cleanup *cleanups;
-  struct die_info *comp_unit_die;
-  struct dwarf2_section_info* sec;
-  gdb_byte *info_ptr, *buffer;
-  int has_children, i;
-  struct dwarf2_cu cu;
-  unsigned int bytes_read, buffer_size;
-  struct die_reader_specs reader_specs;
+  int i;
   char *name, *comp_dir;
   void **slot;
   struct quick_file_names *qfn;
   unsigned int line_offset;
 
-  if (this_cu->v.quick->file_names != NULL)
-    return this_cu->v.quick->file_names;
-  /* If we know there is no line data, no point in looking again.  */
-  if (this_cu->v.quick->no_file_data)
-    return NULL;
+  /* Our callers never want to match partial units -- instead they
+     will match the enclosing full CU.  */
+  if (comp_unit_die->tag == DW_TAG_partial_unit)
+    {
+      this_cu->v.quick->no_file_data = 1;
+      return;
+    }
 
-  init_one_comp_unit (&cu, objfile);
-  cleanups = make_cleanup (free_stack_comp_unit, &cu);
+  /* If we're reading the line header for TUs, store it in the "per_cu"
+     for tu_group.  */
+  if (this_cu->is_debug_types)
+    {
+      struct type_unit_group *tu_group = data;
 
-  if (this_cu->debug_types_section)
-    sec = this_cu->debug_types_section;
+      gdb_assert (tu_group != NULL);
+      lh_cu = &tu_group->per_cu;
+    }
   else
-    sec = &dwarf2_per_objfile->info;
-  dwarf2_read_section (objfile, sec);
-  buffer_size = sec->size;
-  buffer = sec->buffer;
-  info_ptr = buffer + this_cu->offset;
+    lh_cu = this_cu;
 
-  info_ptr = partial_read_comp_unit_head (&cu.header, info_ptr,
-					  buffer, buffer_size,
-					  abfd,
-					  this_cu->debug_types_section != NULL);
+  lh = NULL;
+  slot = NULL;
+  line_offset = 0;
 
-  /* Skip dummy compilation units.  */
-  if (info_ptr >= buffer + buffer_size
-      || peek_abbrev_code (abfd, info_ptr) == 0)
-    {
-      do_cleanups (cleanups);
-      return NULL;
-    }
-
-  this_cu->cu = &cu;
-  cu.per_cu = this_cu;
-
-  dwarf2_read_abbrevs (abfd, &cu);
-  make_cleanup (dwarf2_free_abbrev_table, &cu);
-
-  init_cu_die_reader (&reader_specs, &cu);
-  read_full_die (&reader_specs, &comp_unit_die, info_ptr,
-		 &has_children);
-
-  lh = NULL;
-  slot = NULL;
-  line_offset = 0;
-  attr = dwarf2_attr (comp_unit_die, DW_AT_stmt_list, &cu);
-  if (attr)
+  attr = dwarf2_attr (comp_unit_die, DW_AT_stmt_list, cu);
+  if (attr)
     {
       struct quick_file_names find_entry;
 
@@ -2341,31 +2743,31 @@ dw2_get_file_names (struct objfile *objfile,
 
       /* We may have already read in this line header (TU line header sharing).
 	 If we have we're done.  */
-      find_entry.offset = line_offset;
+      find_entry.hash.dwo_unit = cu->dwo_unit;
+      find_entry.hash.line_offset.sect_off = line_offset;
       slot = htab_find_slot (dwarf2_per_objfile->quick_file_names_table,
 			     &find_entry, INSERT);
       if (*slot != NULL)
 	{
-	  do_cleanups (cleanups);
-	  this_cu->v.quick->file_names = *slot;
-	  return *slot;
+	  lh_cu->v.quick->file_names = *slot;
+	  return;
 	}
 
-      lh = dwarf_decode_line_header (line_offset, abfd, &cu);
+      lh = dwarf_decode_line_header (line_offset, cu);
     }
   if (lh == NULL)
     {
-      do_cleanups (cleanups);
-      this_cu->v.quick->no_file_data = 1;
-      return NULL;
+      lh_cu->v.quick->no_file_data = 1;
+      return;
     }
 
   qfn = obstack_alloc (&objfile->objfile_obstack, sizeof (*qfn));
-  qfn->offset = line_offset;
+  qfn->hash.dwo_unit = cu->dwo_unit;
+  qfn->hash.line_offset.sect_off = line_offset;
   gdb_assert (slot != NULL);
   *slot = qfn;
 
-  find_file_and_directory (comp_unit_die, &cu, &name, &comp_dir);
+  find_file_and_directory (comp_unit_die, cu, &name, &comp_dir);
 
   qfn->num_file_names = lh->num_file_names;
   qfn->file_names = obstack_alloc (&objfile->objfile_obstack,
@@ -2375,10 +2777,44 @@ dw2_get_file_names (struct objfile *objfile,
   qfn->real_names = NULL;
 
   free_line_header (lh);
-  do_cleanups (cleanups);
 
-  this_cu->v.quick->file_names = qfn;
-  return qfn;
+  lh_cu->v.quick->file_names = qfn;
+}
+
+/* A helper for the "quick" functions which attempts to read the line
+   table for THIS_CU.  */
+
+static struct quick_file_names *
+dw2_get_file_names (struct objfile *objfile,
+		    struct dwarf2_per_cu_data *this_cu)
+{
+  /* For TUs this should only be called on the parent group.  */
+  if (this_cu->is_debug_types)
+    gdb_assert (IS_TYPE_UNIT_GROUP (this_cu));
+
+  if (this_cu->v.quick->file_names != NULL)
+    return this_cu->v.quick->file_names;
+  /* If we know there is no line data, no point in looking again.  */
+  if (this_cu->v.quick->no_file_data)
+    return NULL;
+
+  /* If DWO files are in use, we can still find the DW_AT_stmt_list attribute
+     in the stub for CUs, there's is no need to lookup the DWO file.
+     However, that's not the case for TUs where DW_AT_stmt_list lives in the
+     DWO file.  */
+  if (this_cu->is_debug_types)
+    {
+      struct type_unit_group *tu_group = this_cu->s.type_unit_group;
+
+      init_cutu_and_read_dies (tu_group->t.first_tu, NULL, 0, 0,
+			       dw2_get_file_names_reader, tu_group);
+    }
+  else
+    init_cutu_and_read_dies_simple (this_cu, dw2_get_file_names_reader, NULL);
+
+  if (this_cu->v.quick->no_file_data)
+    return NULL;
+  return this_cu->v.quick->file_names;
 }
 
 /* A helper for the "quick" functions which computes and caches the
@@ -2405,7 +2841,7 @@ dw2_find_last_source_symtab (struct objfile *objfile)
 
   dw2_setup (objfile);
   index = dwarf2_per_objfile->n_comp_units - 1;
-  return dw2_instantiate_symtab (objfile, dw2_get_cu (index));
+  return dw2_instantiate_symtab (dw2_get_cu (index));
 }
 
 /* Traversal function for dw2_forget_cached_source_info.  */
@@ -2457,7 +2893,7 @@ dw2_map_expand_apply (struct objfile *objfile,
 
   /* This may expand more than one symtab, and we want to iterate over
      all of them.  */
-  dw2_instantiate_symtab (objfile, per_cu);
+  dw2_instantiate_symtab (per_cu);
 
   return iterate_over_some_symtabs (name, full_path, real_path, callback, data,
 				    objfile->symtabs, last_made);
@@ -2473,16 +2909,18 @@ dw2_map_symtabs_matching_filename (struct objfile *objfile, const char *name,
 {
   int i;
   const char *name_basename = lbasename (name);
-  int check_basename = name_basename == name;
-  struct dwarf2_per_cu_data *base_cu = NULL;
+  int name_len = strlen (name);
+  int is_abs = IS_ABSOLUTE_PATH (name);
 
   dw2_setup (objfile);
 
+  dw2_build_type_unit_groups ();
+
   for (i = 0; i < (dwarf2_per_objfile->n_comp_units
-		   + dwarf2_per_objfile->n_type_comp_units); ++i)
+		   + dwarf2_per_objfile->n_type_unit_groups); ++i)
     {
       int j;
-      struct dwarf2_per_cu_data *per_cu = dw2_get_cu (i);
+      struct dwarf2_per_cu_data *per_cu = dw2_get_primary_cu (i);
       struct quick_file_names *file_data;
 
       /* We only need to look at symtabs not already expanded.  */
@@ -2497,7 +2935,9 @@ dw2_map_symtabs_matching_filename (struct objfile *objfile, const char *name,
 	{
 	  const char *this_name = file_data->file_names[j];
 
-	  if (FILENAME_CMP (name, this_name) == 0)
+	  if (FILENAME_CMP (name, this_name) == 0
+	      || (!is_abs && compare_filenames_for_search (this_name,
+							   name, name_len)))
 	    {
 	      if (dw2_map_expand_apply (objfile, per_cu,
 					name, full_path, real_path,
@@ -2505,10 +2945,6 @@ dw2_map_symtabs_matching_filename (struct objfile *objfile, const char *name,
 		return 1;
 	    }
 
-	  if (check_basename && ! base_cu
-	      && FILENAME_CMP (lbasename (this_name), name) == 0)
-	    base_cu = per_cu;
-
 	  /* Before we invoke realpath, which can get expensive when many
 	     files are involved, do a quick comparison of the basenames.  */
 	  if (! basenames_may_differ
@@ -2521,7 +2957,10 @@ dw2_map_symtabs_matching_filename (struct objfile *objfile, const char *name,
 							      file_data, j);
 
 	      if (this_real_name != NULL
-		  && FILENAME_CMP (full_path, this_real_name) == 0)
+		  && (FILENAME_CMP (full_path, this_real_name) == 0
+		      || (!is_abs
+			  && compare_filenames_for_search (this_real_name,
+							   name, name_len))))
 		{
 		  if (dw2_map_expand_apply (objfile, per_cu,
 					    name, full_path, real_path,
@@ -2536,7 +2975,10 @@ dw2_map_symtabs_matching_filename (struct objfile *objfile, const char *name,
 							      file_data, j);
 
 	      if (this_real_name != NULL
-		  && FILENAME_CMP (real_path, this_real_name) == 0)
+		  && (FILENAME_CMP (real_path, this_real_name) == 0
+		      || (!is_abs
+			  && compare_filenames_for_search (this_real_name,
+							   name, name_len))))
 		{
 		  if (dw2_map_expand_apply (objfile, per_cu,
 					    name, full_path, real_path,
@@ -2547,14 +2989,6 @@ dw2_map_symtabs_matching_filename (struct objfile *objfile, const char *name,
 	}
     }
 
-  if (base_cu)
-    {
-      if (dw2_map_expand_apply (objfile, base_cu,
-				name, full_path, real_path,
-				callback, data))
-	return 1;
-    }
-
   return 0;
 }
 
@@ -2568,28 +3002,72 @@ dw2_lookup_symbol (struct objfile *objfile, int block_index,
 }
 
 /* A helper function that expands all symtabs that hold an object
-   named NAME.  */
+   named NAME.  If WANT_SPECIFIC_BLOCK is non-zero, only look for
+   symbols in block BLOCK_KIND.  */
 
 static void
-dw2_do_expand_symtabs_matching (struct objfile *objfile, const char *name)
+dw2_do_expand_symtabs_matching (struct objfile *objfile,
+				int want_specific_block,
+				enum block_enum block_kind,
+				const char *name, domain_enum domain)
 {
+  struct mapped_index *index;
+
   dw2_setup (objfile);
 
+  index = dwarf2_per_objfile->index_table;
+
   /* index_table is NULL if OBJF_READNOW.  */
-  if (dwarf2_per_objfile->index_table)
+  if (index)
     {
       offset_type *vec;
 
-      if (find_slot_in_mapped_hash (dwarf2_per_objfile->index_table,
-				    name, &vec))
+      if (find_slot_in_mapped_hash (index, name, &vec))
 	{
 	  offset_type i, len = MAYBE_SWAP (*vec);
 	  for (i = 0; i < len; ++i)
 	    {
-	      offset_type cu_index = MAYBE_SWAP (vec[i + 1]);
+	      offset_type cu_index_and_attrs = MAYBE_SWAP (vec[i + 1]);
+	      offset_type cu_index = GDB_INDEX_CU_VALUE (cu_index_and_attrs);
 	      struct dwarf2_per_cu_data *per_cu = dw2_get_cu (cu_index);
+	      int want_static = block_kind != GLOBAL_BLOCK;
+	      /* This value is only valid for index versions >= 7.  */
+	      int is_static = GDB_INDEX_SYMBOL_STATIC_VALUE (cu_index_and_attrs);
+	      gdb_index_symbol_kind symbol_kind =
+		GDB_INDEX_SYMBOL_KIND_VALUE (cu_index_and_attrs);
+
+	      if (want_specific_block
+		  && index->version >= 7
+		  && want_static != is_static)
+		continue;
+
+	      /* Only check the symbol's kind if it has one.
+		 Indices prior to version 7 don't record it.  */
+	      if (index->version >= 7)
+		{
+		  switch (domain)
+		    {
+		    case VAR_DOMAIN:
+		      if (symbol_kind != GDB_INDEX_SYMBOL_KIND_VARIABLE
+			  && symbol_kind != GDB_INDEX_SYMBOL_KIND_FUNCTION
+			  /* Some types are also in VAR_DOMAIN.  */
+			  && symbol_kind != GDB_INDEX_SYMBOL_KIND_TYPE)
+			continue;
+		      break;
+		    case STRUCT_DOMAIN:
+		      if (symbol_kind != GDB_INDEX_SYMBOL_KIND_TYPE)
+			continue;
+		      break;
+		    case LABEL_DOMAIN:
+		      if (symbol_kind != GDB_INDEX_SYMBOL_KIND_OTHER)
+			continue;
+		      break;
+		    default:
+		      break;
+		    }
+		}
 
-	      dw2_instantiate_symtab (objfile, per_cu);
+	      dw2_instantiate_symtab (per_cu);
 	    }
 	}
     }
@@ -2600,7 +3078,7 @@ dw2_pre_expand_symtabs_matching (struct objfile *objfile,
 				 enum block_enum block_kind, const char *name,
 				 domain_enum domain)
 {
-  dw2_do_expand_symtabs_matching (objfile, name);
+  dw2_do_expand_symtabs_matching (objfile, 1, block_kind, name, domain);
 }
 
 static void
@@ -2611,7 +3089,7 @@ dw2_print_stats (struct objfile *objfile)
   dw2_setup (objfile);
   count = 0;
   for (i = 0; i < (dwarf2_per_objfile->n_comp_units
-		   + dwarf2_per_objfile->n_type_comp_units); ++i)
+		   + dwarf2_per_objfile->n_type_units); ++i)
     {
       struct dwarf2_per_cu_data *per_cu = dw2_get_cu (i);
 
@@ -2638,7 +3116,9 @@ static void
 dw2_expand_symtabs_for_function (struct objfile *objfile,
 				 const char *func_name)
 {
-  dw2_do_expand_symtabs_matching (objfile, func_name);
+  /* Note: It doesn't matter what we pass for block_kind here.  */
+  dw2_do_expand_symtabs_matching (objfile, 0, GLOBAL_BLOCK, func_name,
+				  VAR_DOMAIN);
 }
 
 static void
@@ -2649,11 +3129,11 @@ dw2_expand_all_symtabs (struct objfile *objfile)
   dw2_setup (objfile);
 
   for (i = 0; i < (dwarf2_per_objfile->n_comp_units
-		   + dwarf2_per_objfile->n_type_comp_units); ++i)
+		   + dwarf2_per_objfile->n_type_units); ++i)
     {
       struct dwarf2_per_cu_data *per_cu = dw2_get_cu (i);
 
-      dw2_instantiate_symtab (objfile, per_cu);
+      dw2_instantiate_symtab (per_cu);
     }
 }
 
@@ -2689,19 +3169,41 @@ dw2_expand_symtabs_with_filename (struct objfile *objfile,
 	  const char *this_name = file_data->file_names[j];
 	  if (FILENAME_CMP (this_name, filename) == 0)
 	    {
-	      dw2_instantiate_symtab (objfile, per_cu);
+	      dw2_instantiate_symtab (per_cu);
 	      break;
 	    }
 	}
     }
 }
 
+/* A helper function for dw2_find_symbol_file that finds the primary
+   file name for a given CU.  This is a die_reader_func.  */
+
+static void
+dw2_get_primary_filename_reader (const struct die_reader_specs *reader,
+				 gdb_byte *info_ptr,
+				 struct die_info *comp_unit_die,
+				 int has_children,
+				 void *data)
+{
+  const char **result_ptr = data;
+  struct dwarf2_cu *cu = reader->cu;
+  struct attribute *attr;
+
+  attr = dwarf2_attr (comp_unit_die, DW_AT_name, cu);
+  if (attr == NULL)
+    *result_ptr = NULL;
+  else
+    *result_ptr = DW_STRING (attr);
+}
+
 static const char *
 dw2_find_symbol_file (struct objfile *objfile, const char *name)
 {
   struct dwarf2_per_cu_data *per_cu;
   offset_type *vec;
   struct quick_file_names *file_data;
+  const char *filename;
 
   dw2_setup (objfile);
 
@@ -2710,16 +3212,15 @@ dw2_find_symbol_file (struct objfile *objfile, const char *name)
     {
       struct symtab *s;
 
-      ALL_OBJFILE_SYMTABS (objfile, s)
-	if (s->primary)
-	  {
-	    struct blockvector *bv = BLOCKVECTOR (s);
-	    const struct block *block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
-	    struct symbol *sym = lookup_block_symbol (block, name, VAR_DOMAIN);
+      ALL_OBJFILE_PRIMARY_SYMTABS (objfile, s)
+	{
+	  struct blockvector *bv = BLOCKVECTOR (s);
+	  const struct block *block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
+	  struct symbol *sym = lookup_block_symbol (block, name, VAR_DOMAIN);
 
-	    if (sym)
-	      return sym->symtab->filename;
-	  }
+	  if (sym)
+	    return sym->symtab->filename;
+	}
       return NULL;
     }
 
@@ -2732,13 +3233,15 @@ dw2_find_symbol_file (struct objfile *objfile, const char *name)
      should be rewritten so that it doesn't require a custom hook.  It
      could just use the ordinary symbol tables.  */
   /* vec[0] is the length, which must always be >0.  */
-  per_cu = dw2_get_cu (MAYBE_SWAP (vec[1]));
+  per_cu = dw2_get_cu (GDB_INDEX_CU_VALUE (MAYBE_SWAP (vec[1])));
 
-  file_data = dw2_get_file_names (objfile, per_cu);
-  if (file_data == NULL)
-    return NULL;
+  if (per_cu->v.quick->symtab != NULL)
+    return per_cu->v.quick->symtab->filename;
+
+  init_cutu_and_read_dies (per_cu, NULL, 0, 0,
+			   dw2_get_primary_filename_reader, &filename);
 
-  return file_data->file_names[file_data->num_file_names - 1];
+  return filename;
 }
 
 static void
@@ -2758,7 +3261,7 @@ static void
 dw2_expand_symtabs_matching
   (struct objfile *objfile,
    int (*file_matcher) (const char *, void *),
-   int (*name_matcher) (const struct language_defn *, const char *, void *),
+   int (*name_matcher) (const char *, void *),
    enum search_domain kind,
    void *data)
 {
@@ -2774,32 +3277,65 @@ dw2_expand_symtabs_matching
   index = dwarf2_per_objfile->index_table;
 
   if (file_matcher != NULL)
-    for (i = 0; i < (dwarf2_per_objfile->n_comp_units
-		     + dwarf2_per_objfile->n_type_comp_units); ++i)
-      {
-	int j;
-	struct dwarf2_per_cu_data *per_cu = dw2_get_cu (i);
-	struct quick_file_names *file_data;
+    {
+      struct cleanup *cleanup;
+      htab_t visited_found, visited_not_found;
 
-	per_cu->v.quick->mark = 0;
+      dw2_build_type_unit_groups ();
 
-	/* We only need to look at symtabs not already expanded.  */
-	if (per_cu->v.quick->symtab)
-	  continue;
+      visited_found = htab_create_alloc (10,
+					 htab_hash_pointer, htab_eq_pointer,
+					 NULL, xcalloc, xfree);
+      cleanup = make_cleanup_htab_delete (visited_found);
+      visited_not_found = htab_create_alloc (10,
+					     htab_hash_pointer, htab_eq_pointer,
+					     NULL, xcalloc, xfree);
+      make_cleanup_htab_delete (visited_not_found);
 
-	file_data = dw2_get_file_names (objfile, per_cu);
-	if (file_data == NULL)
-	  continue;
+      for (i = 0; i < (dwarf2_per_objfile->n_comp_units
+		       + dwarf2_per_objfile->n_type_unit_groups); ++i)
+	{
+	  int j;
+	  struct dwarf2_per_cu_data *per_cu = dw2_get_primary_cu (i);
+	  struct quick_file_names *file_data;
+	  void **slot;
 
-	for (j = 0; j < file_data->num_file_names; ++j)
-	  {
-	    if (file_matcher (file_data->file_names[j], data))
-	      {
-		per_cu->v.quick->mark = 1;
-		break;
-	      }
-	  }
-      }
+	  per_cu->v.quick->mark = 0;
+
+	  /* We only need to look at symtabs not already expanded.  */
+	  if (per_cu->v.quick->symtab)
+	    continue;
+
+	  file_data = dw2_get_file_names (objfile, per_cu);
+	  if (file_data == NULL)
+	    continue;
+
+	  if (htab_find (visited_not_found, file_data) != NULL)
+	    continue;
+	  else if (htab_find (visited_found, file_data) != NULL)
+	    {
+	      per_cu->v.quick->mark = 1;
+	      continue;
+	    }
+
+	  for (j = 0; j < file_data->num_file_names; ++j)
+	    {
+	      if (file_matcher (file_data->file_names[j], data))
+		{
+		  per_cu->v.quick->mark = 1;
+		  break;
+		}
+	    }
+
+	  slot = htab_find_slot (per_cu->v.quick->mark
+				 ? visited_found
+				 : visited_not_found,
+				 file_data, INSERT);
+	  *slot = file_data;
+	}
+
+      do_cleanups (cleanup);
+    }
 
   for (iter = 0; iter < index->symbol_table_slots; ++iter)
     {
@@ -2812,7 +3348,7 @@ dw2_expand_symtabs_matching
 
       name = index->constant_pool + MAYBE_SWAP (index->symbol_table[idx]);
 
-      if (! (*name_matcher) (current_language, name, data))
+      if (! (*name_matcher) (name, data))
 	continue;
 
       /* The name was matched, now expand corresponding CUs that were
@@ -2823,14 +3359,73 @@ dw2_expand_symtabs_matching
       for (vec_idx = 0; vec_idx < vec_len; ++vec_idx)
 	{
 	  struct dwarf2_per_cu_data *per_cu;
+	  offset_type cu_index_and_attrs = MAYBE_SWAP (vec[vec_idx + 1]);
+	  gdb_index_symbol_kind symbol_kind =
+	    GDB_INDEX_SYMBOL_KIND_VALUE (cu_index_and_attrs);
+	  int cu_index = GDB_INDEX_CU_VALUE (cu_index_and_attrs);
+
+	  /* Don't crash on bad data.  */
+	  if (cu_index >= (dwarf2_per_objfile->n_comp_units
+			   + dwarf2_per_objfile->n_type_units))
+	    continue;
+
+	  /* Only check the symbol's kind if it has one.
+	     Indices prior to version 7 don't record it.  */
+	  if (index->version >= 7)
+	    {
+	      switch (kind)
+		{
+		case VARIABLES_DOMAIN:
+		  if (symbol_kind != GDB_INDEX_SYMBOL_KIND_VARIABLE)
+		    continue;
+		  break;
+		case FUNCTIONS_DOMAIN:
+		  if (symbol_kind != GDB_INDEX_SYMBOL_KIND_FUNCTION)
+		    continue;
+		  break;
+		case TYPES_DOMAIN:
+		  if (symbol_kind != GDB_INDEX_SYMBOL_KIND_TYPE)
+		    continue;
+		  break;
+		default:
+		  break;
+		}
+	    }
 
-	  per_cu = dw2_get_cu (MAYBE_SWAP (vec[vec_idx + 1]));
+	  per_cu = dw2_get_cu (cu_index);
 	  if (file_matcher == NULL || per_cu->v.quick->mark)
-	    dw2_instantiate_symtab (objfile, per_cu);
+	    dw2_instantiate_symtab (per_cu);
 	}
     }
 }
 
+/* A helper for dw2_find_pc_sect_symtab which finds the most specific
+   symtab.  */
+
+static struct symtab *
+recursively_find_pc_sect_symtab (struct symtab *symtab, CORE_ADDR pc)
+{
+  int i;
+
+  if (BLOCKVECTOR (symtab) != NULL
+      && blockvector_contains_pc (BLOCKVECTOR (symtab), pc))
+    return symtab;
+
+  if (symtab->includes == NULL)
+    return NULL;
+
+  for (i = 0; symtab->includes[i]; ++i)
+    {
+      struct symtab *s = symtab->includes[i];
+
+      s = recursively_find_pc_sect_symtab (s, pc);
+      if (s != NULL)
+	return s;
+    }
+
+  return NULL;
+}
+
 static struct symtab *
 dw2_find_pc_sect_symtab (struct objfile *objfile,
 			 struct minimal_symbol *msymbol,
@@ -2839,6 +3434,7 @@ dw2_find_pc_sect_symtab (struct objfile *objfile,
 			 int warn_if_readin)
 {
   struct dwarf2_per_cu_data *data;
+  struct symtab *result;
 
   dw2_setup (objfile);
 
@@ -2853,7 +3449,9 @@ dw2_find_pc_sect_symtab (struct objfile *objfile,
     warning (_("(Internal error: pc %s in read in CU, but not in symtab.)"),
 	     paddress (get_objfile_arch (objfile), pc));
 
-  return dw2_instantiate_symtab (objfile, data);
+  result = recursively_find_pc_sect_symtab (dw2_instantiate_symtab (data), pc);
+  gdb_assert (result != NULL);
+  return result;
 }
 
 static void
@@ -2861,15 +3459,37 @@ dw2_map_symbol_filenames (struct objfile *objfile, symbol_filename_ftype *fun,
 			  void *data, int need_fullname)
 {
   int i;
+  struct cleanup *cleanup;
+  htab_t visited = htab_create_alloc (10, htab_hash_pointer, htab_eq_pointer,
+				      NULL, xcalloc, xfree);
 
+  cleanup = make_cleanup_htab_delete (visited);
   dw2_setup (objfile);
 
+  dw2_build_type_unit_groups ();
+
+  /* We can ignore file names coming from already-expanded CUs.  */
   for (i = 0; i < (dwarf2_per_objfile->n_comp_units
-		   + dwarf2_per_objfile->n_type_comp_units); ++i)
+		   + dwarf2_per_objfile->n_type_units); ++i)
     {
-      int j;
       struct dwarf2_per_cu_data *per_cu = dw2_get_cu (i);
+
+      if (per_cu->v.quick->symtab)
+	{
+	  void **slot = htab_find_slot (visited, per_cu->v.quick->file_names,
+					INSERT);
+
+	  *slot = per_cu->v.quick->file_names;
+	}
+    }
+
+  for (i = 0; i < (dwarf2_per_objfile->n_comp_units
+		   + dwarf2_per_objfile->n_type_unit_groups); ++i)
+    {
+      int j;
+      struct dwarf2_per_cu_data *per_cu = dw2_get_primary_cu (i);
       struct quick_file_names *file_data;
+      void **slot;
 
       /* We only need to look at symtabs not already expanded.  */
       if (per_cu->v.quick->symtab)
@@ -2879,6 +3499,14 @@ dw2_map_symbol_filenames (struct objfile *objfile, symbol_filename_ftype *fun,
       if (file_data == NULL)
 	continue;
 
+      slot = htab_find_slot (visited, file_data, INSERT);
+      if (*slot)
+	{
+	  /* Already visited.  */
+	  continue;
+	}
+      *slot = file_data;
+
       for (j = 0; j < file_data->num_file_names; ++j)
 	{
 	  const char *this_real_name;
@@ -2890,6 +3518,8 @@ dw2_map_symbol_filenames (struct objfile *objfile, symbol_filename_ftype *fun,
 	  (*fun) (file_data->file_names[j], this_real_name, data);
 	}
     }
+
+  do_cleanups (cleanup);
 }
 
 static int
@@ -2935,12 +3565,12 @@ dwarf2_initialize_objfile (struct objfile *objfile)
 
       dwarf2_per_objfile->using_index = 1;
       create_all_comp_units (objfile);
-      create_debug_types_hash_table (objfile);
+      create_all_type_units (objfile);
       dwarf2_per_objfile->quick_file_names_table =
 	create_quick_file_names_table (dwarf2_per_objfile->n_comp_units);
 
       for (i = 0; i < (dwarf2_per_objfile->n_comp_units
-		       + dwarf2_per_objfile->n_type_comp_units); ++i)
+		       + dwarf2_per_objfile->n_type_units); ++i)
 	{
 	  struct dwarf2_per_cu_data *per_cu = dw2_get_cu (i);
 
@@ -2975,17 +3605,54 @@ dwarf2_build_psymtabs (struct objfile *objfile)
   dwarf2_build_psymtabs_hard (objfile);
 }
 
+/* Return the total length of the CU described by HEADER.  */
+
+static unsigned int
+get_cu_length (const struct comp_unit_head *header)
+{
+  return header->initial_length_size + header->length;
+}
+
 /* Return TRUE if OFFSET is within CU_HEADER.  */
 
 static inline int
-offset_in_cu_p (const struct comp_unit_head *cu_header, unsigned int offset)
+offset_in_cu_p (const struct comp_unit_head *cu_header, sect_offset offset)
+{
+  sect_offset bottom = { cu_header->offset.sect_off };
+  sect_offset top = { cu_header->offset.sect_off + get_cu_length (cu_header) };
+
+  return (offset.sect_off >= bottom.sect_off && offset.sect_off < top.sect_off);
+}
+
+/* Find the base address of the compilation unit for range lists and
+   location lists.  It will normally be specified by DW_AT_low_pc.
+   In DWARF-3 draft 4, the base address could be overridden by
+   DW_AT_entry_pc.  It's been removed, but GCC still uses this for
+   compilation units with discontinuous ranges.  */
+
+static void
+dwarf2_find_base_address (struct die_info *die, struct dwarf2_cu *cu)
 {
-  unsigned int bottom = cu_header->offset;
-  unsigned int top = (cu_header->offset
-		      + cu_header->length
-		      + cu_header->initial_length_size);
+  struct attribute *attr;
 
-  return (offset >= bottom && offset < top);
+  cu->base_known = 0;
+  cu->base_address = 0;
+
+  attr = dwarf2_attr (die, DW_AT_entry_pc, cu);
+  if (attr)
+    {
+      cu->base_address = DW_ADDR (attr);
+      cu->base_known = 1;
+    }
+  else
+    {
+      attr = dwarf2_attr (die, DW_AT_low_pc, cu);
+      if (attr)
+	{
+	  cu->base_address = DW_ADDR (attr);
+	  cu->base_known = 1;
+	}
+    }
 }
 
 /* Read in the comp unit header information from the debug_info at info_ptr.
@@ -3005,8 +3672,8 @@ read_comp_unit_head (struct comp_unit_head *cu_header,
   info_ptr += bytes_read;
   cu_header->version = read_2_bytes (abfd, info_ptr);
   info_ptr += 2;
-  cu_header->abbrev_offset = read_offset (abfd, info_ptr, cu_header,
-					  &bytes_read);
+  cu_header->abbrev_offset.sect_off = read_offset (abfd, info_ptr, cu_header,
+					     &bytes_read);
   info_ptr += bytes_read;
   cu_header->addr_size = read_1_byte (abfd, info_ptr);
   info_ptr += 1;
@@ -3019,47 +3686,67 @@ read_comp_unit_head (struct comp_unit_head *cu_header,
   return info_ptr;
 }
 
-/* Read in a CU header and perform some basic error checking.  */
+/* Subroutine of read_and_check_comp_unit_head and
+   read_and_check_type_unit_head to simplify them.
+   Perform various error checking on the header.  */
 
-static gdb_byte *
-partial_read_comp_unit_head (struct comp_unit_head *header, gdb_byte *info_ptr,
-			     gdb_byte *buffer, unsigned int buffer_size,
-			     bfd *abfd, int is_debug_types_section)
+static void
+error_check_comp_unit_head (struct comp_unit_head *header,
+			    struct dwarf2_section_info *section,
+			    struct dwarf2_section_info *abbrev_section)
 {
-  gdb_byte *beg_of_comp_unit = info_ptr;
-
-  header->offset = beg_of_comp_unit - buffer;
-
-  info_ptr = read_comp_unit_head (header, info_ptr, abfd);
-
-  /* If we're reading a type unit, skip over the signature and
-     type_offset fields.  */
-  if (is_debug_types_section)
-    info_ptr += 8 /*signature*/ + header->offset_size;
-
-  header->first_die_offset = info_ptr - beg_of_comp_unit;
+  bfd *abfd = section->asection->owner;
+  const char *filename = bfd_get_filename (abfd);
 
   if (header->version != 2 && header->version != 3 && header->version != 4)
     error (_("Dwarf Error: wrong version in compilation unit header "
 	   "(is %d, should be 2, 3, or 4) [in module %s]"), header->version,
-	   bfd_get_filename (abfd));
+	   filename);
 
-  if (header->abbrev_offset
+  if (header->abbrev_offset.sect_off
       >= dwarf2_section_size (dwarf2_per_objfile->objfile,
 			      &dwarf2_per_objfile->abbrev))
     error (_("Dwarf Error: bad offset (0x%lx) in compilation unit header "
 	   "(offset 0x%lx + 6) [in module %s]"),
-	   (long) header->abbrev_offset,
-	   (long) (beg_of_comp_unit - buffer),
-	   bfd_get_filename (abfd));
+	   (long) header->abbrev_offset.sect_off, (long) header->offset.sect_off,
+	   filename);
 
-  if (beg_of_comp_unit + header->length + header->initial_length_size
-      > buffer + buffer_size)
+  /* Cast to unsigned long to use 64-bit arithmetic when possible to
+     avoid potential 32-bit overflow.  */
+  if (((unsigned long) header->offset.sect_off + get_cu_length (header))
+      > section->size)
     error (_("Dwarf Error: bad length (0x%lx) in compilation unit header "
 	   "(offset 0x%lx + 0) [in module %s]"),
-	   (long) header->length,
-	   (long) (beg_of_comp_unit - buffer),
-	   bfd_get_filename (abfd));
+	   (long) header->length, (long) header->offset.sect_off,
+	   filename);
+}
+
+/* Read in a CU/TU header and perform some basic error checking.
+   The contents of the header are stored in HEADER.
+   The result is a pointer to the start of the first DIE.  */
+
+static gdb_byte *
+read_and_check_comp_unit_head (struct comp_unit_head *header,
+			       struct dwarf2_section_info *section,
+			       struct dwarf2_section_info *abbrev_section,
+			       gdb_byte *info_ptr,
+			       int is_debug_types_section)
+{
+  gdb_byte *beg_of_comp_unit = info_ptr;
+  bfd *abfd = section->asection->owner;
+
+  header->offset.sect_off = beg_of_comp_unit - section->buffer;
+
+  info_ptr = read_comp_unit_head (header, info_ptr, abfd);
+
+  /* If we're reading a type unit, skip over the signature and
+     type_offset fields.  */
+  if (is_debug_types_section)
+    info_ptr += 8 /*signature*/ + header->offset_size;
+
+  header->first_die_offset.cu_off = info_ptr - beg_of_comp_unit;
+
+  error_check_comp_unit_head (header, section, abbrev_section);
 
   return info_ptr;
 }
@@ -3068,24 +3755,55 @@ partial_read_comp_unit_head (struct comp_unit_head *header, gdb_byte *info_ptr,
    types_ptr.  The result is a pointer to one past the end of the header.  */
 
 static gdb_byte *
-read_type_comp_unit_head (struct comp_unit_head *cu_header,
-			  struct dwarf2_section_info *section,
-			  ULONGEST *signature,
-			  gdb_byte *types_ptr, bfd *abfd)
+read_and_check_type_unit_head (struct comp_unit_head *header,
+			       struct dwarf2_section_info *section,
+			       struct dwarf2_section_info *abbrev_section,
+			       gdb_byte *info_ptr,
+			       ULONGEST *signature,
+			       cu_offset *type_offset_in_tu)
 {
-  gdb_byte *initial_types_ptr = types_ptr;
+  gdb_byte *beg_of_comp_unit = info_ptr;
+  bfd *abfd = section->asection->owner;
 
-  dwarf2_read_section (dwarf2_per_objfile->objfile, section);
-  cu_header->offset = types_ptr - section->buffer;
+  header->offset.sect_off = beg_of_comp_unit - section->buffer;
+
+  info_ptr = read_comp_unit_head (header, info_ptr, abfd);
+
+  /* If we're reading a type unit, skip over the signature and
+     type_offset fields.  */
+  if (signature != NULL)
+    *signature = read_8_bytes (abfd, info_ptr);
+  info_ptr += 8;
+  if (type_offset_in_tu != NULL)
+    type_offset_in_tu->cu_off = read_offset_1 (abfd, info_ptr,
+					       header->offset_size);
+  info_ptr += header->offset_size;
+
+  header->first_die_offset.cu_off = info_ptr - beg_of_comp_unit;
+
+  error_check_comp_unit_head (header, section, abbrev_section);
+
+  return info_ptr;
+}
 
-  types_ptr = read_comp_unit_head (cu_header, types_ptr, abfd);
+/* Fetch the abbreviation table offset from a comp or type unit header.  */
 
-  *signature = read_8_bytes (abfd, types_ptr);
-  types_ptr += 8;
-  types_ptr += cu_header->offset_size;
-  cu_header->first_die_offset = types_ptr - initial_types_ptr;
+static sect_offset
+read_abbrev_offset (struct dwarf2_section_info *section,
+		    sect_offset offset)
+{
+  bfd *abfd = section->asection->owner;
+  gdb_byte *info_ptr;
+  unsigned int length, initial_length_size, offset_size;
+  sect_offset abbrev_offset;
 
-  return types_ptr;
+  dwarf2_read_section (dwarf2_per_objfile->objfile, section);
+  info_ptr = section->buffer + offset.sect_off;
+  length = read_initial_length (abfd, info_ptr, &initial_length_size);
+  offset_size = initial_length_size == 4 ? 4 : 8;
+  info_ptr += initial_length_size + 2 /*version*/;
+  abbrev_offset.sect_off = read_offset_1 (abfd, info_ptr, offset_size);
+  return abbrev_offset;
 }
 
 /* Allocate a new partial symtab for file named NAME and mark this new
@@ -3127,21 +3845,15 @@ dwarf2_create_include_psymtab (char *name, struct partial_symtab *pst,
 
 static void
 dwarf2_build_include_psymtabs (struct dwarf2_cu *cu,
-                               struct die_info *die,
-                               struct partial_symtab *pst)
+			       struct die_info *die,
+			       struct partial_symtab *pst)
 {
-  struct objfile *objfile = cu->objfile;
-  bfd *abfd = objfile->obfd;
   struct line_header *lh = NULL;
   struct attribute *attr;
 
   attr = dwarf2_attr (die, DW_AT_stmt_list, cu);
   if (attr)
-    {
-      unsigned int line_offset = DW_UNSND (attr);
-
-      lh = dwarf_decode_line_header (line_offset, abfd, cu);
-    }
+    lh = dwarf_decode_line_header (DW_UNSND (attr), cu);
   if (lh == NULL)
     return;  /* No linetable, so no includes.  */
 
@@ -3152,16 +3864,16 @@ dwarf2_build_include_psymtabs (struct dwarf2_cu *cu,
 }
 
 static hashval_t
-hash_type_signature (const void *item)
+hash_signatured_type (const void *item)
 {
-  const struct signatured_type *type_sig = item;
+  const struct signatured_type *sig_type = item;
 
   /* This drops the top 32 bits of the signature, but is ok for a hash.  */
-  return type_sig->signature;
+  return sig_type->signature;
 }
 
 static int
-eq_type_signature (const void *item_lhs, const void *item_rhs)
+eq_signatured_type (const void *item_lhs, const void *item_rhs)
 {
   const struct signatured_type *lhs = item_lhs;
   const struct signatured_type *rhs = item_rhs;
@@ -3175,51 +3887,60 @@ static htab_t
 allocate_signatured_type_table (struct objfile *objfile)
 {
   return htab_create_alloc_ex (41,
-			       hash_type_signature,
-			       eq_type_signature,
+			       hash_signatured_type,
+			       eq_signatured_type,
 			       NULL,
 			       &objfile->objfile_obstack,
 			       hashtab_obstack_allocate,
 			       dummy_obstack_deallocate);
 }
 
-/* A helper function to add a signatured type CU to a list.  */
+/* A helper function to add a signatured type CU to a table.  */
 
 static int
-add_signatured_type_cu_to_list (void **slot, void *datum)
+add_signatured_type_cu_to_table (void **slot, void *datum)
 {
   struct signatured_type *sigt = *slot;
-  struct dwarf2_per_cu_data ***datap = datum;
+  struct signatured_type ***datap = datum;
 
-  **datap = &sigt->per_cu;
+  **datap = sigt;
   ++*datap;
 
   return 1;
 }
 
 /* Create the hash table of all entries in the .debug_types section.
-   The result is zero if there is an error (e.g. missing .debug_types section),
-   otherwise non-zero.	*/
+   DWO_FILE is a pointer to the DWO file for .debug_types.dwo, NULL otherwise.
+   The result is a pointer to the hash table or NULL if there are
+   no types.  */
 
-static int
-create_debug_types_hash_table (struct objfile *objfile)
+static htab_t
+create_debug_types_hash_table (struct dwo_file *dwo_file,
+			       VEC (dwarf2_section_info_def) *types)
 {
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
   htab_t types_htab = NULL;
-  struct dwarf2_per_cu_data **iter;
   int ix;
   struct dwarf2_section_info *section;
+  struct dwarf2_section_info *abbrev_section;
 
-  if (VEC_empty (dwarf2_section_info_def, dwarf2_per_objfile->types))
-    {
-      dwarf2_per_objfile->signatured_types = NULL;
-      return 0;
-    }
+  if (VEC_empty (dwarf2_section_info_def, types))
+    return NULL;
+
+  abbrev_section = (dwo_file != NULL
+		    ? &dwo_file->sections.abbrev
+		    : &dwarf2_per_objfile->abbrev);
+
+  if (dwarf2_read_debug)
+    fprintf_unfiltered (gdb_stdlog, "Reading .debug_types%s for %s:\n",
+			dwo_file ? ".dwo" : "",
+			bfd_get_filename (abbrev_section->asection->owner));
 
   for (ix = 0;
-       VEC_iterate (dwarf2_section_info_def, dwarf2_per_objfile->types,
-		    ix, section);
+       VEC_iterate (dwarf2_section_info_def, types, ix, section);
        ++ix)
     {
+      bfd *abfd;
       gdb_byte *info_ptr, *end_ptr;
 
       dwarf2_read_section (objfile, section);
@@ -3228,110 +3949,161 @@ create_debug_types_hash_table (struct objfile *objfile)
       if (info_ptr == NULL)
 	continue;
 
+      /* We can't set abfd until now because the section may be empty or
+	 not present, in which case section->asection will be NULL.  */
+      abfd = section->asection->owner;
+
       if (types_htab == NULL)
-	types_htab = allocate_signatured_type_table (objfile);
+	{
+	  if (dwo_file)
+	    types_htab = allocate_dwo_unit_table (objfile);
+	  else
+	    types_htab = allocate_signatured_type_table (objfile);
+	}
 
-      if (dwarf2_die_debug)
-	fprintf_unfiltered (gdb_stdlog, "Signatured types:\n");
+      /* We don't use init_cutu_and_read_dies_simple, or some such, here
+	 because we don't need to read any dies: the signature is in the
+	 header.  */
 
       end_ptr = info_ptr + section->size;
       while (info_ptr < end_ptr)
 	{
-	  unsigned int offset;
-	  unsigned int offset_size;
-	  unsigned int type_offset;
-	  unsigned int length, initial_length_size;
-	  unsigned short version;
+	  sect_offset offset;
+	  cu_offset type_offset_in_tu;
 	  ULONGEST signature;
-	  struct signatured_type *type_sig;
+	  struct signatured_type *sig_type;
+	  struct dwo_unit *dwo_tu;
 	  void **slot;
 	  gdb_byte *ptr = info_ptr;
+	  struct comp_unit_head header;
+	  unsigned int length;
 
-	  offset = ptr - section->buffer;
+	  offset.sect_off = ptr - section->buffer;
 
 	  /* We need to read the type's signature in order to build the hash
-	     table, but we don't need to read anything else just yet.  */
+	     table, but we don't need anything else just yet.  */
 
-	  /* Sanity check to ensure entire cu is present.  */
-	  length = read_initial_length (objfile->obfd, ptr,
-					&initial_length_size);
-	  if (ptr + length + initial_length_size > end_ptr)
-	    {
-	      complaint (&symfile_complaints,
-			 _("debug type entry runs off end "
-			   "of `.debug_types' section, ignored"));
-	      break;
-	    }
+	  ptr = read_and_check_type_unit_head (&header, section,
+					       abbrev_section, ptr,
+					       &signature, &type_offset_in_tu);
 
-	  offset_size = initial_length_size == 4 ? 4 : 8;
-	  ptr += initial_length_size;
-	  version = bfd_get_16 (objfile->obfd, ptr);
-	  ptr += 2;
-	  ptr += offset_size; /* abbrev offset */
-	  ptr += 1; /* address size */
-	  signature = bfd_get_64 (objfile->obfd, ptr);
-	  ptr += 8;
-	  type_offset = read_offset_1 (objfile->obfd, ptr, offset_size);
-	  ptr += offset_size;
+	  length = get_cu_length (&header);
 
 	  /* Skip dummy type units.  */
-	  if (ptr >= end_ptr || peek_abbrev_code (objfile->obfd, ptr) == 0)
+	  if (ptr >= info_ptr + length
+	      || peek_abbrev_code (abfd, ptr) == 0)
 	    {
-	      info_ptr = info_ptr + initial_length_size + length;
+	      info_ptr += length;
 	      continue;
 	    }
 
-	  type_sig = obstack_alloc (&objfile->objfile_obstack, sizeof (*type_sig));
-	  memset (type_sig, 0, sizeof (*type_sig));
-	  type_sig->signature = signature;
-	  type_sig->type_offset = type_offset;
-	  type_sig->per_cu.objfile = objfile;
-	  type_sig->per_cu.debug_types_section = section;
-	  type_sig->per_cu.offset = offset;
+	  if (dwo_file)
+	    {
+	      sig_type = NULL;
+	      dwo_tu = OBSTACK_ZALLOC (&objfile->objfile_obstack,
+				       struct dwo_unit);
+	      dwo_tu->dwo_file = dwo_file;
+	      dwo_tu->signature = signature;
+	      dwo_tu->type_offset_in_tu = type_offset_in_tu;
+	      dwo_tu->info_or_types_section = section;
+	      dwo_tu->offset = offset;
+	      dwo_tu->length = length;
+	    }
+	  else
+	    {
+	      /* N.B.: type_offset is not usable if this type uses a DWO file.
+		 The real type_offset is in the DWO file.  */
+	      dwo_tu = NULL;
+	      sig_type = OBSTACK_ZALLOC (&objfile->objfile_obstack,
+					 struct signatured_type);
+	      sig_type->signature = signature;
+	      sig_type->type_offset_in_tu = type_offset_in_tu;
+	      sig_type->per_cu.objfile = objfile;
+	      sig_type->per_cu.is_debug_types = 1;
+	      sig_type->per_cu.info_or_types_section = section;
+	      sig_type->per_cu.offset = offset;
+	      sig_type->per_cu.length = length;
+	    }
 
-	  slot = htab_find_slot (types_htab, type_sig, INSERT);
+	  slot = htab_find_slot (types_htab,
+				 dwo_file ? (void*) dwo_tu : (void *) sig_type,
+				 INSERT);
 	  gdb_assert (slot != NULL);
 	  if (*slot != NULL)
 	    {
-	      const struct signatured_type *dup_sig = *slot;
+	      sect_offset dup_offset;
+
+	      if (dwo_file)
+		{
+		  const struct dwo_unit *dup_tu = *slot;
+
+		  dup_offset = dup_tu->offset;
+		}
+	      else
+		{
+		  const struct signatured_type *dup_tu = *slot;
+
+		  dup_offset = dup_tu->per_cu.offset;
+		}
 
 	      complaint (&symfile_complaints,
 			 _("debug type entry at offset 0x%x is duplicate to the "
 			   "entry at offset 0x%x, signature 0x%s"),
-			 offset, dup_sig->per_cu.offset,
+			 offset.sect_off, dup_offset.sect_off,
 			 phex (signature, sizeof (signature)));
-	      gdb_assert (signature == dup_sig->signature);
 	    }
-	  *slot = type_sig;
+	  *slot = dwo_file ? (void *) dwo_tu : (void *) sig_type;
 
-	  if (dwarf2_die_debug)
+	  if (dwarf2_read_debug)
 	    fprintf_unfiltered (gdb_stdlog, "  offset 0x%x, signature 0x%s\n",
-				offset, phex (signature, sizeof (signature)));
+				offset.sect_off,
+				phex (signature, sizeof (signature)));
 
-	  info_ptr = info_ptr + initial_length_size + length;
+	  info_ptr += length;
 	}
     }
 
+  return types_htab;
+}
+
+/* Create the hash table of all entries in the .debug_types section,
+   and initialize all_type_units.
+   The result is zero if there is an error (e.g. missing .debug_types section),
+   otherwise non-zero.	*/
+
+static int
+create_all_type_units (struct objfile *objfile)
+{
+  htab_t types_htab;
+  struct signatured_type **iter;
+
+  types_htab = create_debug_types_hash_table (NULL, dwarf2_per_objfile->types);
+  if (types_htab == NULL)
+    {
+      dwarf2_per_objfile->signatured_types = NULL;
+      return 0;
+    }
+
   dwarf2_per_objfile->signatured_types = types_htab;
 
-  dwarf2_per_objfile->n_type_comp_units = htab_elements (types_htab);
-  dwarf2_per_objfile->type_comp_units
+  dwarf2_per_objfile->n_type_units = htab_elements (types_htab);
+  dwarf2_per_objfile->all_type_units
     = obstack_alloc (&objfile->objfile_obstack,
-		     dwarf2_per_objfile->n_type_comp_units
-		     * sizeof (struct dwarf2_per_cu_data *));
-  iter = &dwarf2_per_objfile->type_comp_units[0];
-  htab_traverse_noresize (types_htab, add_signatured_type_cu_to_list, &iter);
-  gdb_assert (iter - &dwarf2_per_objfile->type_comp_units[0]
-	      == dwarf2_per_objfile->n_type_comp_units);
+		     dwarf2_per_objfile->n_type_units
+		     * sizeof (struct signatured_type *));
+  iter = &dwarf2_per_objfile->all_type_units[0];
+  htab_traverse_noresize (types_htab, add_signatured_type_cu_to_table, &iter);
+  gdb_assert (iter - &dwarf2_per_objfile->all_type_units[0]
+	      == dwarf2_per_objfile->n_type_units);
 
   return 1;
 }
 
-/* Lookup a signature based type.
-   Returns NULL if SIG is not present in the table.  */
+/* Lookup a signature based type for DW_FORM_ref_sig8.
+   Returns NULL if signature SIG is not present in the table.  */
 
 static struct signatured_type *
-lookup_signatured_type (struct objfile *objfile, ULONGEST sig)
+lookup_signatured_type (ULONGEST sig)
 {
   struct signatured_type find_entry, *entry;
 
@@ -3339,186 +4111,553 @@ lookup_signatured_type (struct objfile *objfile, ULONGEST sig)
     {
       complaint (&symfile_complaints,
 		 _("missing `.debug_types' section for DW_FORM_ref_sig8 die"));
-      return 0;
+      return NULL;
     }
 
   find_entry.signature = sig;
   entry = htab_find (dwarf2_per_objfile->signatured_types, &find_entry);
   return entry;
 }
+

+/* Low level DIE reading support.  */
 
 /* Initialize a die_reader_specs struct from a dwarf2_cu struct.  */
 
 static void
 init_cu_die_reader (struct die_reader_specs *reader,
-		    struct dwarf2_cu *cu)
+		    struct dwarf2_cu *cu,
+		    struct dwarf2_section_info *section,
+		    struct dwo_file *dwo_file)
 {
-  reader->abfd = cu->objfile->obfd;
+  gdb_assert (section->readin && section->buffer != NULL);
+  reader->abfd = section->asection->owner;
   reader->cu = cu;
-  if (cu->per_cu->debug_types_section)
+  reader->dwo_file = dwo_file;
+  reader->die_section = section;
+  reader->buffer = section->buffer;
+  reader->buffer_end = section->buffer + section->size;
+}
+
+/* Initialize a CU (or TU) and read its DIEs.
+   If the CU defers to a DWO file, read the DWO file as well.
+
+   ABBREV_TABLE, if non-NULL, is the abbreviation table to use.
+   Otherwise the table specified in the comp unit header is read in and used.
+   This is an optimization for when we already have the abbrev table.
+
+   If USE_EXISTING_CU is non-zero, and THIS_CU->cu is non-NULL, then use it.
+   Otherwise, a new CU is allocated with xmalloc.
+
+   If KEEP is non-zero, then if we allocated a dwarf2_cu we add it to
+   read_in_chain.  Otherwise the dwarf2_cu data is freed at the end.
+
+   WARNING: If THIS_CU is a "dummy CU" (used as filler by the incremental
+   linker) then DIE_READER_FUNC will not get called.  */
+
+static void
+init_cutu_and_read_dies (struct dwarf2_per_cu_data *this_cu,
+			 struct abbrev_table *abbrev_table,
+			 int use_existing_cu, int keep,
+			 die_reader_func_ftype *die_reader_func,
+			 void *data)
+{
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
+  struct dwarf2_section_info *section = this_cu->info_or_types_section;
+  bfd *abfd = section->asection->owner;
+  struct dwarf2_cu *cu;
+  gdb_byte *begin_info_ptr, *info_ptr;
+  struct die_reader_specs reader;
+  struct die_info *comp_unit_die;
+  int has_children;
+  struct attribute *attr;
+  struct cleanup *cleanups, *free_cu_cleanup = NULL;
+  struct signatured_type *sig_type = NULL;
+  struct dwarf2_section_info *abbrev_section;
+  /* Non-zero if CU currently points to a DWO file and we need to
+     reread it.  When this happens we need to reread the skeleton die
+     before we can reread the DWO file.  */
+  int rereading_dwo_cu = 0;
+
+  if (dwarf2_die_debug)
+    fprintf_unfiltered (gdb_stdlog, "Reading %s unit at offset 0x%x\n",
+			this_cu->is_debug_types ? "type" : "comp",
+			this_cu->offset.sect_off);
+
+  if (use_existing_cu)
+    gdb_assert (keep);
+
+  cleanups = make_cleanup (null_cleanup, NULL);
+
+  /* This is cheap if the section is already read in.  */
+  dwarf2_read_section (objfile, section);
+
+  begin_info_ptr = info_ptr = section->buffer + this_cu->offset.sect_off;
+  abbrev_section = &dwarf2_per_objfile->abbrev;
+
+  if (use_existing_cu && this_cu->cu != NULL)
     {
-      gdb_assert (cu->per_cu->debug_types_section->readin);
-      reader->buffer = cu->per_cu->debug_types_section->buffer;
+      cu = this_cu->cu;
+
+      /* If this CU is from a DWO file we need to start over, we need to
+	 refetch the attributes from the skeleton CU.
+	 This could be optimized by retrieving those attributes from when we
+	 were here the first time: the previous comp_unit_die was stored in
+	 comp_unit_obstack.  But there's no data yet that we need this
+	 optimization.  */
+      if (cu->dwo_unit != NULL)
+	rereading_dwo_cu = 1;
     }
   else
     {
-      gdb_assert (dwarf2_per_objfile->info.readin);
-      reader->buffer = dwarf2_per_objfile->info.buffer;
+      /* If !use_existing_cu, this_cu->cu must be NULL.  */
+      gdb_assert (this_cu->cu == NULL);
+
+      cu = xmalloc (sizeof (*cu));
+      init_one_comp_unit (cu, this_cu);
+
+      /* If an error occurs while loading, release our storage.  */
+      free_cu_cleanup = make_cleanup (free_heap_comp_unit, cu);
     }
-}
 
-/* Find the base address of the compilation unit for range lists and
-   location lists.  It will normally be specified by DW_AT_low_pc.
-   In DWARF-3 draft 4, the base address could be overridden by
-   DW_AT_entry_pc.  It's been removed, but GCC still uses this for
-   compilation units with discontinuous ranges.  */
+  if (cu->header.first_die_offset.cu_off != 0 && ! rereading_dwo_cu)
+    {
+      /* We already have the header, there's no need to read it in again.  */
+      info_ptr += cu->header.first_die_offset.cu_off;
+    }
+  else
+    {
+      if (this_cu->is_debug_types)
+	{
+	  ULONGEST signature;
+	  cu_offset type_offset_in_tu;
+
+	  info_ptr = read_and_check_type_unit_head (&cu->header, section,
+						    abbrev_section, info_ptr,
+						    &signature,
+						    &type_offset_in_tu);
+
+	  /* Since per_cu is the first member of struct signatured_type,
+	     we can go from a pointer to one to a pointer to the other.  */
+	  sig_type = (struct signatured_type *) this_cu;
+	  gdb_assert (sig_type->signature == signature);
+	  gdb_assert (sig_type->type_offset_in_tu.cu_off
+		      == type_offset_in_tu.cu_off);
+	  gdb_assert (this_cu->offset.sect_off == cu->header.offset.sect_off);
+
+	  /* LENGTH has not been set yet for type units if we're
+	     using .gdb_index.  */
+	  this_cu->length = get_cu_length (&cu->header);
+
+	  /* Establish the type offset that can be used to lookup the type.  */
+	  sig_type->type_offset_in_section.sect_off =
+	    this_cu->offset.sect_off + sig_type->type_offset_in_tu.cu_off;
+	}
+      else
+	{
+	  info_ptr = read_and_check_comp_unit_head (&cu->header, section,
+						    abbrev_section,
+						    info_ptr, 0);
 
-static void
-dwarf2_find_base_address (struct die_info *die, struct dwarf2_cu *cu)
-{
-  struct attribute *attr;
+	  gdb_assert (this_cu->offset.sect_off == cu->header.offset.sect_off);
+	  gdb_assert (this_cu->length == get_cu_length (&cu->header));
+	}
+    }
 
-  cu->base_known = 0;
-  cu->base_address = 0;
+  /* Skip dummy compilation units.  */
+  if (info_ptr >= begin_info_ptr + this_cu->length
+      || peek_abbrev_code (abfd, info_ptr) == 0)
+    {
+      do_cleanups (cleanups);
+      return;
+    }
 
-  attr = dwarf2_attr (die, DW_AT_entry_pc, cu);
-  if (attr)
+  /* If we don't have them yet, read the abbrevs for this compilation unit.
+     And if we need to read them now, make sure they're freed when we're
+     done.  Note that it's important that if the CU had an abbrev table
+     on entry we don't free it when we're done: Somewhere up the call stack
+     it may be in use.  */
+  if (abbrev_table != NULL)
     {
-      cu->base_address = DW_ADDR (attr);
-      cu->base_known = 1;
+      gdb_assert (cu->abbrev_table == NULL);
+      gdb_assert (cu->header.abbrev_offset.sect_off
+		  == abbrev_table->offset.sect_off);
+      cu->abbrev_table = abbrev_table;
     }
-  else
+  else if (cu->abbrev_table == NULL)
     {
-      attr = dwarf2_attr (die, DW_AT_low_pc, cu);
+      dwarf2_read_abbrevs (cu, abbrev_section);
+      make_cleanup (dwarf2_free_abbrev_table, cu);
+    }
+  else if (rereading_dwo_cu)
+    {
+      dwarf2_free_abbrev_table (cu);
+      dwarf2_read_abbrevs (cu, abbrev_section);
+    }
+
+  /* Read the top level CU/TU die.  */
+  init_cu_die_reader (&reader, cu, section, NULL);
+  info_ptr = read_full_die (&reader, &comp_unit_die, info_ptr, &has_children);
+
+  /* If we have a DWO stub, process it and then read in the DWO file.
+     Note that if USE_EXISTING_OK != 0, and THIS_CU->cu already contains
+     a DWO CU, that this test will fail.  */
+  attr = dwarf2_attr (comp_unit_die, DW_AT_GNU_dwo_name, cu);
+  if (attr)
+    {
+      char *dwo_name = DW_STRING (attr);
+      const char *comp_dir_string;
+      struct dwo_unit *dwo_unit;
+      ULONGEST signature; /* Or dwo_id.  */
+      struct attribute *comp_dir, *stmt_list, *low_pc, *high_pc, *ranges;
+      int i,num_extra_attrs;
+      struct dwarf2_section_info *dwo_abbrev_section;
+
+      if (has_children)
+	error (_("Dwarf Error: compilation unit with DW_AT_GNU_dwo_name"
+		 " has children (offset 0x%x) [in module %s]"),
+	       this_cu->offset.sect_off, bfd_get_filename (abfd));
+
+      /* These attributes aren't processed until later:
+	 DW_AT_stmt_list, DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges.
+	 However, the attribute is found in the stub which we won't have later.
+	 In order to not impose this complication on the rest of the code,
+	 we read them here and copy them to the DWO CU/TU die.  */
+
+      /* For TUs in DWO files, the DW_AT_stmt_list attribute lives in the
+	 DWO file.  */
+      stmt_list = NULL;
+      if (! this_cu->is_debug_types)
+	stmt_list = dwarf2_attr (comp_unit_die, DW_AT_stmt_list, cu);
+      low_pc = dwarf2_attr (comp_unit_die, DW_AT_low_pc, cu);
+      high_pc = dwarf2_attr (comp_unit_die, DW_AT_high_pc, cu);
+      ranges = dwarf2_attr (comp_unit_die, DW_AT_ranges, cu);
+      comp_dir = dwarf2_attr (comp_unit_die, DW_AT_comp_dir, cu);
+
+      /* There should be a DW_AT_addr_base attribute here (if needed).
+	 We need the value before we can process DW_FORM_GNU_addr_index.  */
+      cu->addr_base = 0;
+      attr = dwarf2_attr (comp_unit_die, DW_AT_GNU_addr_base, cu);
+      if (attr)
+	cu->addr_base = DW_UNSND (attr);
+
+      /* There should be a DW_AT_ranges_base attribute here (if needed).
+	 We need the value before we can process DW_AT_ranges.  */
+      cu->ranges_base = 0;
+      attr = dwarf2_attr (comp_unit_die, DW_AT_GNU_ranges_base, cu);
       if (attr)
+	cu->ranges_base = DW_UNSND (attr);
+
+      if (this_cu->is_debug_types)
 	{
-	  cu->base_address = DW_ADDR (attr);
-	  cu->base_known = 1;
+	  gdb_assert (sig_type != NULL);
+	  signature = sig_type->signature;
+	}
+      else
+	{
+	  attr = dwarf2_attr (comp_unit_die, DW_AT_GNU_dwo_id, cu);
+	  if (! attr)
+	    error (_("Dwarf Error: missing dwo_id [in module %s]"),
+		   dwo_name);
+	  signature = DW_UNSND (attr);
+	}
+
+      /* We may need the comp_dir in order to find the DWO file.  */
+      comp_dir_string = NULL;
+      if (comp_dir)
+	comp_dir_string = DW_STRING (comp_dir);
+
+      if (this_cu->is_debug_types)
+	dwo_unit = lookup_dwo_type_unit (sig_type, dwo_name, comp_dir_string);
+      else
+	dwo_unit = lookup_dwo_comp_unit (this_cu, dwo_name, comp_dir_string,
+					 signature);
+
+      if (dwo_unit == NULL)
+	{
+	  error (_("Dwarf Error: CU at offset 0x%x references unknown DWO"
+		   " with ID %s [in module %s]"),
+		 this_cu->offset.sect_off,
+		 phex (signature, sizeof (signature)),
+		 objfile->name);
 	}
+
+      /* Set up for reading the DWO CU/TU.  */
+      cu->dwo_unit = dwo_unit;
+      section = dwo_unit->info_or_types_section;
+      begin_info_ptr = info_ptr = section->buffer + dwo_unit->offset.sect_off;
+      dwo_abbrev_section = &dwo_unit->dwo_file->sections.abbrev;
+      init_cu_die_reader (&reader, cu, section, dwo_unit->dwo_file);
+
+      if (this_cu->is_debug_types)
+	{
+	  ULONGEST signature;
+
+	  info_ptr = read_and_check_type_unit_head (&cu->header, section,
+						    dwo_abbrev_section,
+						    info_ptr,
+						    &signature, NULL);
+	  gdb_assert (sig_type->signature == signature);
+	  gdb_assert (dwo_unit->offset.sect_off == cu->header.offset.sect_off);
+	  gdb_assert (dwo_unit->length == get_cu_length (&cu->header));
+
+	  /* Establish the type offset that can be used to lookup the type.
+	     For DWO files, we don't know it until now.  */
+	  sig_type->type_offset_in_section.sect_off =
+	    dwo_unit->offset.sect_off + dwo_unit->type_offset_in_tu.cu_off;
+	}
+      else
+	{
+	  info_ptr = read_and_check_comp_unit_head (&cu->header, section,
+						    dwo_abbrev_section,
+						    info_ptr, 0);
+	  gdb_assert (dwo_unit->offset.sect_off == cu->header.offset.sect_off);
+	  gdb_assert (dwo_unit->length == get_cu_length (&cu->header));
+	}
+
+      /* Discard the original CU's abbrev table, and read the DWO's.  */
+      if (abbrev_table == NULL)
+	{
+	  dwarf2_free_abbrev_table (cu);
+	  dwarf2_read_abbrevs (cu, dwo_abbrev_section);
+	}
+      else
+	{
+	  dwarf2_read_abbrevs (cu, dwo_abbrev_section);
+	  make_cleanup (dwarf2_free_abbrev_table, cu);
+	}
+
+      /* Read in the die, but leave space to copy over the attributes
+	 from the stub.  This has the benefit of simplifying the rest of
+	 the code - all the real work is done here.  */
+      num_extra_attrs = ((stmt_list != NULL)
+			 + (low_pc != NULL)
+			 + (high_pc != NULL)
+			 + (ranges != NULL)
+			 + (comp_dir != NULL));
+      info_ptr = read_full_die_1 (&reader, &comp_unit_die, info_ptr,
+				  &has_children, num_extra_attrs);
+
+      /* Copy over the attributes from the stub to the DWO die.  */
+      i = comp_unit_die->num_attrs;
+      if (stmt_list != NULL)
+	comp_unit_die->attrs[i++] = *stmt_list;
+      if (low_pc != NULL)
+	comp_unit_die->attrs[i++] = *low_pc;
+      if (high_pc != NULL)
+	comp_unit_die->attrs[i++] = *high_pc;
+      if (ranges != NULL)
+	comp_unit_die->attrs[i++] = *ranges;
+      if (comp_dir != NULL)
+	comp_unit_die->attrs[i++] = *comp_dir;
+      comp_unit_die->num_attrs += num_extra_attrs;
+
+      /* Skip dummy compilation units.  */
+      if (info_ptr >= begin_info_ptr + dwo_unit->length
+	  || peek_abbrev_code (abfd, info_ptr) == 0)
+	{
+	  do_cleanups (cleanups);
+	  return;
+	}
+    }
+
+  die_reader_func (&reader, info_ptr, comp_unit_die, has_children, data);
+
+  if (free_cu_cleanup != NULL)
+    {
+      if (keep)
+	{
+	  /* We've successfully allocated this compilation unit.  Let our
+	     caller clean it up when finished with it.  */
+	  discard_cleanups (free_cu_cleanup);
+
+	  /* We can only discard free_cu_cleanup and all subsequent cleanups.
+	     So we have to manually free the abbrev table.  */
+	  dwarf2_free_abbrev_table (cu);
+
+	  /* Link this CU into read_in_chain.  */
+	  this_cu->cu->read_in_chain = dwarf2_per_objfile->read_in_chain;
+	  dwarf2_per_objfile->read_in_chain = this_cu;
+	}
+      else
+	do_cleanups (free_cu_cleanup);
     }
+
+  do_cleanups (cleanups);
 }
 
-/* Subroutine of process_type_comp_unit and dwarf2_build_psymtabs_hard
-   to combine the common parts.
-   Process a compilation unit for a psymtab.
-   BUFFER is a pointer to the beginning of the dwarf section buffer,
-   either .debug_info or debug_types.
-   INFO_PTR is a pointer to the start of the CU.
-   Returns a pointer to the next CU.  */
+/* Read CU/TU THIS_CU in section SECTION,
+   but do not follow DW_AT_GNU_dwo_name if present.
+   DWO_FILE, if non-NULL, is the DWO file to read (the caller is assumed to
+   have already done the lookup to find the DWO file).
 
-static gdb_byte *
-process_psymtab_comp_unit (struct objfile *objfile,
-			   struct dwarf2_per_cu_data *this_cu,
-			   gdb_byte *buffer, gdb_byte *info_ptr,
-			   unsigned int buffer_size)
+   The caller is required to fill in THIS_CU->section, THIS_CU->offset, and
+   THIS_CU->is_debug_types, but nothing else.
+
+   We fill in THIS_CU->length.
+
+   WARNING: If THIS_CU is a "dummy CU" (used as filler by the incremental
+   linker) then DIE_READER_FUNC will not get called.
+
+   THIS_CU->cu is always freed when done.
+   This is done in order to not leave THIS_CU->cu in a state where we have
+   to care whether it refers to the "main" CU or the DWO CU.  */
+
+static void
+init_cutu_and_read_dies_no_follow (struct dwarf2_per_cu_data *this_cu,
+				   struct dwarf2_section_info *abbrev_section,
+				   struct dwo_file *dwo_file,
+				   die_reader_func_ftype *die_reader_func,
+				   void *data)
 {
-  bfd *abfd = objfile->obfd;
-  gdb_byte *beg_of_comp_unit = info_ptr;
-  struct die_info *comp_unit_die;
-  struct partial_symtab *pst;
-  CORE_ADDR baseaddr;
-  struct cleanup *back_to_inner;
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
+  struct dwarf2_section_info *section = this_cu->info_or_types_section;
+  bfd *abfd = section->asection->owner;
   struct dwarf2_cu cu;
-  int has_children, has_pc_info;
-  struct attribute *attr;
-  CORE_ADDR best_lowpc = 0, best_highpc = 0;
-  struct die_reader_specs reader_specs;
-  const char *filename;
+  gdb_byte *begin_info_ptr, *info_ptr;
+  struct die_reader_specs reader;
+  struct cleanup *cleanups;
+  struct die_info *comp_unit_die;
+  int has_children;
+
+  if (dwarf2_die_debug)
+    fprintf_unfiltered (gdb_stdlog, "Reading %s unit at offset 0x%x\n",
+			this_cu->is_debug_types ? "type" : "comp",
+			this_cu->offset.sect_off);
+
+  gdb_assert (this_cu->cu == NULL);
 
-  init_one_comp_unit (&cu, objfile);
-  back_to_inner = make_cleanup (free_stack_comp_unit, &cu);
+  /* This is cheap if the section is already read in.  */
+  dwarf2_read_section (objfile, section);
+
+  init_one_comp_unit (&cu, this_cu);
+
+  cleanups = make_cleanup (free_stack_comp_unit, &cu);
 
-  info_ptr = partial_read_comp_unit_head (&cu.header, info_ptr,
-					  buffer, buffer_size,
-					  abfd,
-					  this_cu->debug_types_section != NULL);
+  begin_info_ptr = info_ptr = section->buffer + this_cu->offset.sect_off;
+  info_ptr = read_and_check_comp_unit_head (&cu.header, section,
+					    abbrev_section, info_ptr,
+					    this_cu->is_debug_types);
+
+  this_cu->length = get_cu_length (&cu.header);
 
   /* Skip dummy compilation units.  */
-  if (info_ptr >= buffer + buffer_size
+  if (info_ptr >= begin_info_ptr + this_cu->length
       || peek_abbrev_code (abfd, info_ptr) == 0)
     {
-      info_ptr = (beg_of_comp_unit + cu.header.length
-		  + cu.header.initial_length_size);
-      do_cleanups (back_to_inner);
-      return info_ptr;
+      do_cleanups (cleanups);
+      return;
     }
 
-  cu.list_in_scope = &file_symbols;
+  dwarf2_read_abbrevs (&cu, abbrev_section);
+  make_cleanup (dwarf2_free_abbrev_table, &cu);
 
-  /* If this compilation unit was already read in, free the
-     cached copy in order to read it in again.	This is
-     necessary because we skipped some symbols when we first
-     read in the compilation unit (see load_partial_dies).
-     This problem could be avoided, but the benefit is
-     unclear.  */
-  if (this_cu->cu != NULL)
-    free_one_cached_comp_unit (this_cu->cu);
+  init_cu_die_reader (&reader, &cu, section, dwo_file);
+  info_ptr = read_full_die (&reader, &comp_unit_die, info_ptr, &has_children);
 
-  /* Note that this is a pointer to our stack frame, being
-     added to a global data structure.	It will be cleaned up
-     in free_stack_comp_unit when we finish with this
-     compilation unit.	*/
-  this_cu->cu = &cu;
-  cu.per_cu = this_cu;
+  die_reader_func (&reader, info_ptr, comp_unit_die, has_children, data);
 
-  /* Read the abbrevs for this compilation unit into a table.  */
-  dwarf2_read_abbrevs (abfd, &cu);
-  make_cleanup (dwarf2_free_abbrev_table, &cu);
+  do_cleanups (cleanups);
+}
 
-  /* Read the compilation unit die.  */
-  init_cu_die_reader (&reader_specs, &cu);
-  info_ptr = read_full_die (&reader_specs, &comp_unit_die, info_ptr,
-			    &has_children);
+/* Read a CU/TU, except that this does not look for DW_AT_GNU_dwo_name and
+   does not lookup the specified DWO file.
+   This cannot be used to read DWO files.
 
-  if (this_cu->debug_types_section)
-    {
-      /* LENGTH has not been set yet for type units.  */
-      gdb_assert (this_cu->offset == cu.header.offset);
-      this_cu->length = cu.header.length + cu.header.initial_length_size;
-    }
-  else if (comp_unit_die->tag == DW_TAG_partial_unit)
-    {
-      info_ptr = (beg_of_comp_unit + cu.header.length
-		  + cu.header.initial_length_size);
-      do_cleanups (back_to_inner);
-      return info_ptr;
-    }
+   THIS_CU->cu is always freed when done.
+   This is done in order to not leave THIS_CU->cu in a state where we have
+   to care whether it refers to the "main" CU or the DWO CU.
+   We can revisit this if the data shows there's a performance issue.  */
+
+static void
+init_cutu_and_read_dies_simple (struct dwarf2_per_cu_data *this_cu,
+				die_reader_func_ftype *die_reader_func,
+				void *data)
+{
+  init_cutu_and_read_dies_no_follow (this_cu,
+				     &dwarf2_per_objfile->abbrev,
+				     NULL,
+				     die_reader_func, data);
+}
+
+/* Create a psymtab named NAME and assign it to PER_CU.
+
+   The caller must fill in the following details:
+   dirname, textlow, texthigh.  */
+
+static struct partial_symtab *
+create_partial_symtab (struct dwarf2_per_cu_data *per_cu, const char *name)
+{
+  struct objfile *objfile = per_cu->objfile;
+  struct partial_symtab *pst;
+
+  pst = start_psymtab_common (objfile, objfile->section_offsets,
+			      name, 0,
+			      objfile->global_psymbols.next,
+			      objfile->static_psymbols.next);
+
+  pst->psymtabs_addrmap_supported = 1;
+
+  /* This is the glue that links PST into GDB's symbol API.  */
+  pst->read_symtab_private = per_cu;
+  pst->read_symtab = dwarf2_psymtab_to_symtab;
+  per_cu->v.psymtab = pst;
 
-  prepare_one_comp_unit (&cu, comp_unit_die);
+  return pst;
+}
+
+/* die_reader_func for process_psymtab_comp_unit.  */
+
+static void
+process_psymtab_comp_unit_reader (const struct die_reader_specs *reader,
+				  gdb_byte *info_ptr,
+				  struct die_info *comp_unit_die,
+				  int has_children,
+				  void *data)
+{
+  struct dwarf2_cu *cu = reader->cu;
+  struct objfile *objfile = cu->objfile;
+  struct dwarf2_per_cu_data *per_cu = cu->per_cu;
+  struct attribute *attr;
+  CORE_ADDR baseaddr;
+  CORE_ADDR best_lowpc = 0, best_highpc = 0;
+  struct partial_symtab *pst;
+  int has_pc_info;
+  const char *filename;
+  int *want_partial_unit_ptr = data;
+
+  if (comp_unit_die->tag == DW_TAG_partial_unit
+      && (want_partial_unit_ptr == NULL
+	  || !*want_partial_unit_ptr))
+    return;
+
+  gdb_assert (! per_cu->is_debug_types);
+
+  prepare_one_comp_unit (cu, comp_unit_die, language_minimal);
+
+  cu->list_in_scope = &file_symbols;
 
   /* Allocate a new partial symbol table structure.  */
-  attr = dwarf2_attr (comp_unit_die, DW_AT_name, &cu);
+  attr = dwarf2_attr (comp_unit_die, DW_AT_name, cu);
   if (attr == NULL || !DW_STRING (attr))
     filename = "";
   else
     filename = DW_STRING (attr);
-  pst = start_psymtab_common (objfile, objfile->section_offsets,
-			      filename,
-			      /* TEXTLOW and TEXTHIGH are set below.  */
-			      0,
-			      objfile->global_psymbols.next,
-			      objfile->static_psymbols.next);
-  pst->psymtabs_addrmap_supported = 1;
 
-  attr = dwarf2_attr (comp_unit_die, DW_AT_comp_dir, &cu);
+  pst = create_partial_symtab (per_cu, filename);
+
+  /* This must be done before calling dwarf2_build_include_psymtabs.  */
+  attr = dwarf2_attr (comp_unit_die, DW_AT_comp_dir, cu);
   if (attr != NULL)
     pst->dirname = DW_STRING (attr);
 
-  pst->read_symtab_private = this_cu;
-
   baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
 
-  /* Store the function that reads in the rest of the symbol table.  */
-  pst->read_symtab = dwarf2_psymtab_to_symtab;
-
-  this_cu->v.psymtab = pst;
-
-  dwarf2_find_base_address (comp_unit_die, &cu);
+  dwarf2_find_base_address (comp_unit_die, cu);
 
   /* Possibly set the default values of LOWPC and HIGHPC from
      `DW_AT_ranges'.  */
   has_pc_info = dwarf2_get_pc_bounds (comp_unit_die, &best_lowpc,
-				      &best_highpc, &cu, pst);
+				      &best_highpc, cu, pst);
   if (has_pc_info == 1 && best_lowpc < best_highpc)
     /* Store the contiguous range if it is not empty; it can be empty for
        CUs with no code.  */
@@ -3537,10 +4676,10 @@ process_psymtab_comp_unit (struct objfile *objfile,
       lowpc = ((CORE_ADDR) -1);
       highpc = ((CORE_ADDR) 0);
 
-      first_die = load_partial_dies (abfd, buffer, info_ptr, 1, &cu);
+      first_die = load_partial_dies (reader, info_ptr, 1);
 
       scan_partial_symbols (first_die, &lowpc, &highpc,
-			    ! has_pc_info, &cu);
+			    ! has_pc_info, cu);
 
       /* If we didn't find a lowpc, set it to highpc to avoid
 	 complaints from `maint check'.	 */
@@ -3564,44 +4703,462 @@ process_psymtab_comp_unit (struct objfile *objfile,
     (objfile->static_psymbols.list + pst->statics_offset);
   sort_pst_symbols (pst);
 
-  info_ptr = (beg_of_comp_unit + cu.header.length
-	      + cu.header.initial_length_size);
-
-  if (this_cu->debug_types_section)
+  if (!VEC_empty (dwarf2_per_cu_ptr, cu->per_cu->s.imported_symtabs))
     {
-      /* It's not clear we want to do anything with stmt lists here.
-	 Waiting to see what gcc ultimately does.  */
+      int i;
+      int len = VEC_length (dwarf2_per_cu_ptr, cu->per_cu->s.imported_symtabs);
+      struct dwarf2_per_cu_data *iter;
+
+      /* Fill in 'dependencies' here; we fill in 'users' in a
+	 post-pass.  */
+      pst->number_of_dependencies = len;
+      pst->dependencies = obstack_alloc (&objfile->objfile_obstack,
+					 len * sizeof (struct symtab *));
+      for (i = 0;
+	   VEC_iterate (dwarf2_per_cu_ptr, cu->per_cu->s.imported_symtabs,
+			i, iter);
+	   ++i)
+	pst->dependencies[i] = iter->v.psymtab;
+
+      VEC_free (dwarf2_per_cu_ptr, cu->per_cu->s.imported_symtabs);
+    }
+
+  /* Get the list of files included in the current compilation unit,
+     and build a psymtab for each of them.  */
+  dwarf2_build_include_psymtabs (cu, comp_unit_die, pst);
+
+  if (dwarf2_read_debug)
+    {
+      struct gdbarch *gdbarch = get_objfile_arch (objfile);
+
+      fprintf_unfiltered (gdb_stdlog,
+			  "Psymtab for %s unit @0x%x: 0x%s - 0x%s"
+			  ", %d global, %d static syms\n",
+			  per_cu->is_debug_types ? "type" : "comp",
+			  per_cu->offset.sect_off,
+			  paddress (gdbarch, pst->textlow),
+			  paddress (gdbarch, pst->texthigh),
+			  pst->n_global_syms, pst->n_static_syms);
+    }
+}
+
+/* Subroutine of dwarf2_build_psymtabs_hard to simplify it.
+   Process compilation unit THIS_CU for a psymtab.  */
+
+static void
+process_psymtab_comp_unit (struct dwarf2_per_cu_data *this_cu,
+			   int want_partial_unit)
+{
+  /* If this compilation unit was already read in, free the
+     cached copy in order to read it in again.	This is
+     necessary because we skipped some symbols when we first
+     read in the compilation unit (see load_partial_dies).
+     This problem could be avoided, but the benefit is unclear.  */
+  if (this_cu->cu != NULL)
+    free_one_cached_comp_unit (this_cu);
+
+  gdb_assert (! this_cu->is_debug_types);
+  init_cutu_and_read_dies (this_cu, NULL, 0, 0,
+			   process_psymtab_comp_unit_reader,
+			   &want_partial_unit);
+
+  /* Age out any secondary CUs.  */
+  age_cached_comp_units ();
+}
+
+static hashval_t
+hash_type_unit_group (const void *item)
+{
+  const struct type_unit_group *tu_group = item;
+
+  return hash_stmt_list_entry (&tu_group->hash);
+}
+
+static int
+eq_type_unit_group (const void *item_lhs, const void *item_rhs)
+{
+  const struct type_unit_group *lhs = item_lhs;
+  const struct type_unit_group *rhs = item_rhs;
+
+  return eq_stmt_list_entry (&lhs->hash, &rhs->hash);
+}
+
+/* Allocate a hash table for type unit groups.  */
+
+static htab_t
+allocate_type_unit_groups_table (void)
+{
+  return htab_create_alloc_ex (3,
+			       hash_type_unit_group,
+			       eq_type_unit_group,
+			       NULL,
+			       &dwarf2_per_objfile->objfile->objfile_obstack,
+			       hashtab_obstack_allocate,
+			       dummy_obstack_deallocate);
+}
+
+/* Type units that don't have DW_AT_stmt_list are grouped into their own
+   partial symtabs.  We combine several TUs per psymtab to not let the size
+   of any one psymtab grow too big.  */
+#define NO_STMT_LIST_TYPE_UNIT_PSYMTAB (1 << 31)
+#define NO_STMT_LIST_TYPE_UNIT_PSYMTAB_SIZE 10
+
+/* Helper routine for get_type_unit_group.
+   Create the type_unit_group object used to hold one or more TUs.  */
+
+static struct type_unit_group *
+create_type_unit_group (struct dwarf2_cu *cu, sect_offset line_offset_struct)
+{
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
+  struct dwarf2_per_cu_data *per_cu;
+  struct type_unit_group *tu_group;
+
+  tu_group = OBSTACK_ZALLOC (&objfile->objfile_obstack,
+			     struct type_unit_group);
+  per_cu = &tu_group->per_cu;
+  per_cu->objfile = objfile;
+  per_cu->is_debug_types = 1;
+  per_cu->s.type_unit_group = tu_group;
+
+  if (dwarf2_per_objfile->using_index)
+    {
+      per_cu->v.quick = OBSTACK_ZALLOC (&objfile->objfile_obstack,
+					struct dwarf2_per_cu_quick_data);
+      tu_group->t.first_tu = cu->per_cu;
     }
   else
     {
-      /* Get the list of files included in the current compilation unit,
-	 and build a psymtab for each of them.  */
-      dwarf2_build_include_psymtabs (&cu, comp_unit_die, pst);
+      unsigned int line_offset = line_offset_struct.sect_off;
+      struct partial_symtab *pst;
+      char *name;
+
+      /* Give the symtab a useful name for debug purposes.  */
+      if ((line_offset & NO_STMT_LIST_TYPE_UNIT_PSYMTAB) != 0)
+	name = xstrprintf ("<type_units_%d>",
+			   (line_offset & ~NO_STMT_LIST_TYPE_UNIT_PSYMTAB));
+      else
+	name = xstrprintf ("<type_units_at_0x%x>", line_offset);
+
+      pst = create_partial_symtab (per_cu, name);
+      pst->anonymous = 1;
+
+      xfree (name);
     }
 
-  do_cleanups (back_to_inner);
+  tu_group->hash.dwo_unit = cu->dwo_unit;
+  tu_group->hash.line_offset = line_offset_struct;
 
-  return info_ptr;
+  return tu_group;
+}
+
+/* Look up the type_unit_group for type unit CU, and create it if necessary.
+   STMT_LIST is a DW_AT_stmt_list attribute.  */
+
+static struct type_unit_group *
+get_type_unit_group (struct dwarf2_cu *cu, struct attribute *stmt_list)
+{
+  struct tu_stats *tu_stats = &dwarf2_per_objfile->tu_stats;
+  struct type_unit_group *tu_group;
+  void **slot;
+  unsigned int line_offset;
+  struct type_unit_group type_unit_group_for_lookup;
+
+  if (dwarf2_per_objfile->type_unit_groups == NULL)
+    {
+      dwarf2_per_objfile->type_unit_groups =
+	allocate_type_unit_groups_table ();
+    }
+
+  /* Do we need to create a new group, or can we use an existing one?  */
+
+  if (stmt_list)
+    {
+      line_offset = DW_UNSND (stmt_list);
+      ++tu_stats->nr_symtab_sharers;
+    }
+  else
+    {
+      /* Ugh, no stmt_list.  Rare, but we have to handle it.
+	 We can do various things here like create one group per TU or
+	 spread them over multiple groups to split up the expansion work.
+	 To avoid worst case scenarios (too many groups or too large groups)
+	 we, umm, group them in bunches.  */
+      line_offset = (NO_STMT_LIST_TYPE_UNIT_PSYMTAB
+		     | (tu_stats->nr_stmt_less_type_units
+			/ NO_STMT_LIST_TYPE_UNIT_PSYMTAB_SIZE));
+      ++tu_stats->nr_stmt_less_type_units;
+    }
+
+  type_unit_group_for_lookup.hash.dwo_unit = cu->dwo_unit;
+  type_unit_group_for_lookup.hash.line_offset.sect_off = line_offset;
+  slot = htab_find_slot (dwarf2_per_objfile->type_unit_groups,
+			 &type_unit_group_for_lookup, INSERT);
+  if (*slot != NULL)
+    {
+      tu_group = *slot;
+      gdb_assert (tu_group != NULL);
+    }
+  else
+    {
+      sect_offset line_offset_struct;
+
+      line_offset_struct.sect_off = line_offset;
+      tu_group = create_type_unit_group (cu, line_offset_struct);
+      *slot = tu_group;
+      ++tu_stats->nr_symtabs;
+    }
+
+  return tu_group;
 }
 
-/* Traversal function for htab_traverse_noresize.
-   Process one .debug_types comp-unit.	*/
+/* Struct used to sort TUs by their abbreviation table offset.  */
+
+struct tu_abbrev_offset
+{
+  struct signatured_type *sig_type;
+  sect_offset abbrev_offset;
+};
+
+/* Helper routine for build_type_unit_groups, passed to qsort.  */
 
 static int
-process_type_comp_unit (void **slot, void *info)
+sort_tu_by_abbrev_offset (const void *ap, const void *bp)
 {
-  struct signatured_type *entry = (struct signatured_type *) *slot;
-  struct objfile *objfile = (struct objfile *) info;
-  struct dwarf2_per_cu_data *this_cu;
+  const struct tu_abbrev_offset * const *a = ap;
+  const struct tu_abbrev_offset * const *b = bp;
+  unsigned int aoff = (*a)->abbrev_offset.sect_off;
+  unsigned int boff = (*b)->abbrev_offset.sect_off;
+
+  return (aoff > boff) - (aoff < boff);
+}
+
+/* A helper function to add a type_unit_group to a table.  */
+
+static int
+add_type_unit_group_to_table (void **slot, void *datum)
+{
+  struct type_unit_group *tu_group = *slot;
+  struct type_unit_group ***datap = datum;
+
+  **datap = tu_group;
+  ++*datap;
+
+  return 1;
+}
+
+/* Efficiently read all the type units, calling init_cutu_and_read_dies on
+   each one passing FUNC,DATA.
+
+   The efficiency is because we sort TUs by the abbrev table they use and
+   only read each abbrev table once.  In one program there are 200K TUs
+   sharing 8K abbrev tables.
+
+   The main purpose of this function is to support building the
+   dwarf2_per_objfile->type_unit_groups table.
+   TUs typically share the DW_AT_stmt_list of the CU they came from, so we
+   can collapse the search space by grouping them by stmt_list.
+   The savings can be significant, in the same program from above the 200K TUs
+   share 8K stmt_list tables.
+
+   FUNC is expected to call get_type_unit_group, which will create the
+   struct type_unit_group if necessary and add it to
+   dwarf2_per_objfile->type_unit_groups.  */
+
+static void
+build_type_unit_groups (die_reader_func_ftype *func, void *data)
+{
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
+  struct tu_stats *tu_stats = &dwarf2_per_objfile->tu_stats;
+  struct cleanup *cleanups;
+  struct abbrev_table *abbrev_table;
+  sect_offset abbrev_offset;
+  struct tu_abbrev_offset *sorted_by_abbrev;
+  struct type_unit_group **iter;
+  int i;
+
+  /* It's up to the caller to not call us multiple times.  */
+  gdb_assert (dwarf2_per_objfile->type_unit_groups == NULL);
+
+  if (dwarf2_per_objfile->n_type_units == 0)
+    return;
+
+  /* TUs typically share abbrev tables, and there can be way more TUs than
+     abbrev tables.  Sort by abbrev table to reduce the number of times we
+     read each abbrev table in.
+     Alternatives are to punt or to maintain a cache of abbrev tables.
+     This is simpler and efficient enough for now.
+
+     Later we group TUs by their DW_AT_stmt_list value (as this defines the
+     symtab to use).  Typically TUs with the same abbrev offset have the same
+     stmt_list value too so in practice this should work well.
+
+     The basic algorithm here is:
+
+      sort TUs by abbrev table
+      for each TU with same abbrev table:
+	read abbrev table if first user
+	read TU top level DIE
+	  [IWBN if DWO skeletons had DW_AT_stmt_list]
+	call FUNC  */
+
+  if (dwarf2_read_debug)
+    fprintf_unfiltered (gdb_stdlog, "Building type unit groups ...\n");
+
+  /* Sort in a separate table to maintain the order of all_type_units
+     for .gdb_index: TU indices directly index all_type_units.  */
+  sorted_by_abbrev = XNEWVEC (struct tu_abbrev_offset,
+			      dwarf2_per_objfile->n_type_units);
+  for (i = 0; i < dwarf2_per_objfile->n_type_units; ++i)
+    {
+      struct signatured_type *sig_type = dwarf2_per_objfile->all_type_units[i];
+
+      sorted_by_abbrev[i].sig_type = sig_type;
+      sorted_by_abbrev[i].abbrev_offset =
+	read_abbrev_offset (sig_type->per_cu.info_or_types_section,
+			    sig_type->per_cu.offset);
+    }
+  cleanups = make_cleanup (xfree, sorted_by_abbrev);
+  qsort (sorted_by_abbrev, dwarf2_per_objfile->n_type_units,
+	 sizeof (struct tu_abbrev_offset), sort_tu_by_abbrev_offset);
+
+  /* Note: In the .gdb_index case, get_type_unit_group may have already been
+     called any number of times, so we don't reset tu_stats here.  */
+
+  abbrev_offset.sect_off = ~(unsigned) 0;
+  abbrev_table = NULL;
+  make_cleanup (abbrev_table_free_cleanup, &abbrev_table);
+
+  for (i = 0; i < dwarf2_per_objfile->n_type_units; ++i)
+    {
+      const struct tu_abbrev_offset *tu = &sorted_by_abbrev[i];
+
+      /* Switch to the next abbrev table if necessary.  */
+      if (abbrev_table == NULL
+	  || tu->abbrev_offset.sect_off != abbrev_offset.sect_off)
+	{
+	  if (abbrev_table != NULL)
+	    {
+	      abbrev_table_free (abbrev_table);
+	      /* Reset to NULL in case abbrev_table_read_table throws
+		 an error: abbrev_table_free_cleanup will get called.  */
+	      abbrev_table = NULL;
+	    }
+	  abbrev_offset = tu->abbrev_offset;
+	  abbrev_table =
+	    abbrev_table_read_table (&dwarf2_per_objfile->abbrev,
+				     abbrev_offset);
+	  ++tu_stats->nr_uniq_abbrev_tables;
+	}
+
+      init_cutu_and_read_dies (&tu->sig_type->per_cu, abbrev_table, 0, 0,
+			       func, data);
+    }
+
+  /* Create a vector of pointers to primary type units to make it easy to
+     iterate over them and CUs.  See dw2_get_primary_cu.  */
+  dwarf2_per_objfile->n_type_unit_groups =
+    htab_elements (dwarf2_per_objfile->type_unit_groups);
+  dwarf2_per_objfile->all_type_unit_groups =
+    obstack_alloc (&objfile->objfile_obstack,
+		   dwarf2_per_objfile->n_type_unit_groups
+		   * sizeof (struct type_unit_group *));
+  iter = &dwarf2_per_objfile->all_type_unit_groups[0];
+  htab_traverse_noresize (dwarf2_per_objfile->type_unit_groups,
+			  add_type_unit_group_to_table, &iter);
+  gdb_assert (iter - &dwarf2_per_objfile->all_type_unit_groups[0]
+	      == dwarf2_per_objfile->n_type_unit_groups);
+
+  do_cleanups (cleanups);
+
+  if (dwarf2_read_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog, "Done building type unit groups:\n");
+      fprintf_unfiltered (gdb_stdlog, "  %d TUs\n",
+			  dwarf2_per_objfile->n_type_units);
+      fprintf_unfiltered (gdb_stdlog, "  %d uniq abbrev tables\n",
+			  tu_stats->nr_uniq_abbrev_tables);
+      fprintf_unfiltered (gdb_stdlog, "  %d symtabs from stmt_list entries\n",
+			  tu_stats->nr_symtabs);
+      fprintf_unfiltered (gdb_stdlog, "  %d symtab sharers\n",
+			  tu_stats->nr_symtab_sharers);
+      fprintf_unfiltered (gdb_stdlog, "  %d type units without a stmt_list\n",
+			  tu_stats->nr_stmt_less_type_units);
+    }
+}
+
+/* Reader function for build_type_psymtabs.  */
+
+static void
+build_type_psymtabs_reader (const struct die_reader_specs *reader,
+			    gdb_byte *info_ptr,
+			    struct die_info *type_unit_die,
+			    int has_children,
+			    void *data)
+{
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
+  struct dwarf2_cu *cu = reader->cu;
+  struct dwarf2_per_cu_data *per_cu = cu->per_cu;
+  struct type_unit_group *tu_group;
+  struct attribute *attr;
+  struct partial_die_info *first_die;
+  CORE_ADDR lowpc, highpc;
+  struct partial_symtab *pst;
+
+  gdb_assert (data == NULL);
+
+  if (! has_children)
+    return;
+
+  attr = dwarf2_attr_no_follow (type_unit_die, DW_AT_stmt_list);
+  tu_group = get_type_unit_group (cu, attr);
+
+  VEC_safe_push (dwarf2_per_cu_ptr, tu_group->t.tus, per_cu);
+
+  prepare_one_comp_unit (cu, type_unit_die, language_minimal);
+  cu->list_in_scope = &file_symbols;
+  pst = create_partial_symtab (per_cu, "");
+  pst->anonymous = 1;
+
+  first_die = load_partial_dies (reader, info_ptr, 1);
+
+  lowpc = (CORE_ADDR) -1;
+  highpc = (CORE_ADDR) 0;
+  scan_partial_symbols (first_die, &lowpc, &highpc, 0, cu);
+
+  pst->n_global_syms = objfile->global_psymbols.next -
+    (objfile->global_psymbols.list + pst->globals_offset);
+  pst->n_static_syms = objfile->static_psymbols.next -
+    (objfile->static_psymbols.list + pst->statics_offset);
+  sort_pst_symbols (pst);
+}
+
+/* Traversal function for build_type_psymtabs.  */
+
+static int
+build_type_psymtab_dependencies (void **slot, void *info)
+{
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
+  struct type_unit_group *tu_group = (struct type_unit_group *) *slot;
+  struct dwarf2_per_cu_data *per_cu = &tu_group->per_cu;
+  struct partial_symtab *pst = per_cu->v.psymtab;
+  int len = VEC_length (dwarf2_per_cu_ptr, tu_group->t.tus);
+  struct dwarf2_per_cu_data *iter;
+  int i;
+
+  gdb_assert (len > 0);
 
-  this_cu = &entry->per_cu;
+  pst->number_of_dependencies = len;
+  pst->dependencies = obstack_alloc (&objfile->objfile_obstack,
+				     len * sizeof (struct psymtab *));
+  for (i = 0;
+       VEC_iterate (dwarf2_per_cu_ptr, tu_group->t.tus, i, iter);
+       ++i)
+    {
+      pst->dependencies[i] = iter->v.psymtab;
+      iter->s.type_unit_group = tu_group;
+    }
 
-  gdb_assert (this_cu->debug_types_section->readin);
-  process_psymtab_comp_unit (objfile, this_cu,
-			     this_cu->debug_types_section->buffer,
-			     (this_cu->debug_types_section->buffer
-			      + this_cu->offset),
-			     this_cu->debug_types_section->size);
+  VEC_free (dwarf2_per_cu_ptr, tu_group->t.tus);
 
   return 1;
 }
@@ -3612,11 +5169,14 @@ process_type_comp_unit (void **slot, void *info)
 static void
 build_type_psymtabs (struct objfile *objfile)
 {
-  if (! create_debug_types_hash_table (objfile))
+  if (! create_all_type_units (objfile))
     return;
 
-  htab_traverse_noresize (dwarf2_per_objfile->signatured_types,
-			  process_type_comp_unit, objfile);
+  build_type_unit_groups (build_type_psymtabs_reader, NULL);
+
+  /* Now that all TUs have been processed we can fill in the dependencies.  */
+  htab_traverse_noresize (dwarf2_per_objfile->type_unit_groups,
+			  build_type_psymtab_dependencies, NULL);
 }
 
 /* A cleanup function that clears objfile's psymtabs_addrmap field.  */
@@ -3629,20 +5189,47 @@ psymtabs_addrmap_cleanup (void *o)
   objfile->psymtabs_addrmap = NULL;
 }
 
+/* Compute the 'user' field for each psymtab in OBJFILE.  */
+
+static void
+set_partial_user (struct objfile *objfile)
+{
+  int i;
+
+  for (i = 0; i < dwarf2_per_objfile->n_comp_units; ++i)
+    {
+      struct dwarf2_per_cu_data *per_cu = dw2_get_cu (i);
+      struct partial_symtab *pst = per_cu->v.psymtab;
+      int j;
+
+      for (j = 0; j < pst->number_of_dependencies; ++j)
+	{
+	  /* Set the 'user' field only if it is not already set.  */
+	  if (pst->dependencies[j]->user == NULL)
+	    pst->dependencies[j]->user = pst;
+	}
+    }
+}
+
 /* Build the partial symbol table by doing a quick pass through the
    .debug_info and .debug_abbrev sections.  */
 
 static void
 dwarf2_build_psymtabs_hard (struct objfile *objfile)
 {
-  gdb_byte *info_ptr;
   struct cleanup *back_to, *addrmap_cleanup;
   struct obstack temp_obstack;
+  int i;
+
+  if (dwarf2_read_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog, "Building psymtabs of objfile %s ...\n",
+			  objfile->name);
+    }
 
   dwarf2_per_objfile->reading_partial_symbols = 1;
 
   dwarf2_read_section (objfile, &dwarf2_per_objfile->info);
-  info_ptr = dwarf2_per_objfile->info.buffer;
 
   /* Any cached compilation units will be linked by the per-objfile
      read_in_chain.  Make sure to free them when we're done.  */
@@ -3659,132 +5246,58 @@ dwarf2_build_psymtabs_hard (struct objfile *objfile)
   objfile->psymtabs_addrmap = addrmap_create_mutable (&temp_obstack);
   addrmap_cleanup = make_cleanup (psymtabs_addrmap_cleanup, objfile);
 
-  /* Since the objects we're extracting from .debug_info vary in
-     length, only the individual functions to extract them (like
-     read_comp_unit_head and load_partial_die) can really know whether
-     the buffer is large enough to hold another complete object.
-
-     At the moment, they don't actually check that.  If .debug_info
-     holds just one extra byte after the last compilation unit's dies,
-     then read_comp_unit_head will happily read off the end of the
-     buffer.  read_partial_die is similarly casual.  Those functions
-     should be fixed.
-
-     For this loop condition, simply checking whether there's any data
-     left at all should be sufficient.  */
-
-  while (info_ptr < (dwarf2_per_objfile->info.buffer
-		     + dwarf2_per_objfile->info.size))
+  for (i = 0; i < dwarf2_per_objfile->n_comp_units; ++i)
     {
-      struct dwarf2_per_cu_data *this_cu;
-
-      this_cu = dwarf2_find_comp_unit (info_ptr
-				       - dwarf2_per_objfile->info.buffer,
-				       objfile);
+      struct dwarf2_per_cu_data *per_cu = dw2_get_cu (i);
 
-      info_ptr = process_psymtab_comp_unit (objfile, this_cu,
-					    dwarf2_per_objfile->info.buffer,
-					    info_ptr,
-					    dwarf2_per_objfile->info.size);
+      process_psymtab_comp_unit (per_cu, 0);
     }
 
+  set_partial_user (objfile);
+
   objfile->psymtabs_addrmap = addrmap_create_fixed (objfile->psymtabs_addrmap,
 						    &objfile->objfile_obstack);
   discard_cleanups (addrmap_cleanup);
 
   do_cleanups (back_to);
+
+  if (dwarf2_read_debug)
+    fprintf_unfiltered (gdb_stdlog, "Done building psymtabs of %s\n",
+			objfile->name);
 }
 
-/* Load the partial DIEs for a secondary CU into memory.  */
+/* die_reader_func for load_partial_comp_unit.  */
 
 static void
-load_partial_comp_unit (struct dwarf2_per_cu_data *this_cu,
-			struct objfile *objfile)
+load_partial_comp_unit_reader (const struct die_reader_specs *reader,
+			       gdb_byte *info_ptr,
+			       struct die_info *comp_unit_die,
+			       int has_children,
+			       void *data)
 {
-  bfd *abfd = objfile->obfd;
-  gdb_byte *info_ptr;
-  struct die_info *comp_unit_die;
-  struct dwarf2_cu *cu;
-  struct cleanup *free_abbrevs_cleanup, *free_cu_cleanup = NULL;
-  int has_children;
-  struct die_reader_specs reader_specs;
-  int read_cu = 0;
-
-  gdb_assert (! this_cu->debug_types_section);
-
-  gdb_assert (dwarf2_per_objfile->info.readin);
-  info_ptr = dwarf2_per_objfile->info.buffer + this_cu->offset;
-
-  if (this_cu->cu == NULL)
-    {
-      cu = xmalloc (sizeof (*cu));
-      init_one_comp_unit (cu, objfile);
-
-      read_cu = 1;
-
-      /* If an error occurs while loading, release our storage.  */
-      free_cu_cleanup = make_cleanup (free_one_comp_unit, cu);
-
-      info_ptr = partial_read_comp_unit_head (&cu->header, info_ptr,
-					      dwarf2_per_objfile->info.buffer,
-					      dwarf2_per_objfile->info.size,
-					      abfd, 0);
-
-      /* Skip dummy compilation units.  */
-      if (info_ptr >= (dwarf2_per_objfile->info.buffer
-		       + dwarf2_per_objfile->info.size)
-	  || peek_abbrev_code (abfd, info_ptr) == 0)
-	{
-	  do_cleanups (free_cu_cleanup);
-	  return;
-	}
-
-      /* Link this compilation unit into the compilation unit tree.  */
-      this_cu->cu = cu;
-      cu->per_cu = this_cu;
-
-      /* Link this CU into read_in_chain.  */
-      this_cu->cu->read_in_chain = dwarf2_per_objfile->read_in_chain;
-      dwarf2_per_objfile->read_in_chain = this_cu;
-    }
-  else
-    {
-      cu = this_cu->cu;
-      info_ptr += cu->header.first_die_offset;
-    }
-
-  /* Read the abbrevs for this compilation unit into a table.  */
-  gdb_assert (cu->dwarf2_abbrevs == NULL);
-  dwarf2_read_abbrevs (abfd, cu);
-  free_abbrevs_cleanup = make_cleanup (dwarf2_free_abbrev_table, cu);
-
-  /* Read the compilation unit die.  */
-  init_cu_die_reader (&reader_specs, cu);
-  info_ptr = read_full_die (&reader_specs, &comp_unit_die, info_ptr,
-			    &has_children);
+  struct dwarf2_cu *cu = reader->cu;
 
-  prepare_one_comp_unit (cu, comp_unit_die);
+  prepare_one_comp_unit (cu, comp_unit_die, language_minimal);
 
   /* Check if comp unit has_children.
      If so, read the rest of the partial symbols from this comp unit.
      If not, there's no more debug_info for this comp unit.  */
   if (has_children)
-    load_partial_dies (abfd, dwarf2_per_objfile->info.buffer, info_ptr, 0, cu);
+    load_partial_dies (reader, info_ptr, 0);
+}
 
-  do_cleanups (free_abbrevs_cleanup);
+/* Load the partial DIEs for a secondary CU into memory.
+   This is also used when rereading a primary CU with load_all_dies.  */
 
-  if (read_cu)
-    {
-      /* We've successfully allocated this compilation unit.  Let our
-	 caller clean it up when finished with it.  */
-      discard_cleanups (free_cu_cleanup);
-    }
+static void
+load_partial_comp_unit (struct dwarf2_per_cu_data *this_cu)
+{
+  init_cutu_and_read_dies (this_cu, NULL, 1, 1,
+			   load_partial_comp_unit_reader, NULL);
 }
 
-/* Create a list of all compilation units in OBJFILE.  We do this only
-   if an inter-comp-unit reference is found; presumably if there is one,
-   there will be many, and one will occur early in the .debug_info section.
-   So there's no point in building this list incrementally.  */
+/* Create a list of all compilation units in OBJFILE.
+   This is only done for -readnow and building partial symtabs.  */
 
 static void
 create_all_comp_units (struct objfile *objfile)
@@ -3807,9 +5320,9 @@ create_all_comp_units (struct objfile *objfile)
     {
       unsigned int length, initial_length_size;
       struct dwarf2_per_cu_data *this_cu;
-      unsigned int offset;
+      sect_offset offset;
 
-      offset = info_ptr - dwarf2_per_objfile->info.buffer;
+      offset.sect_off = info_ptr - dwarf2_per_objfile->info.buffer;
 
       /* Read just enough information to find out where the next
 	 compilation unit is.  */
@@ -3823,6 +5336,7 @@ create_all_comp_units (struct objfile *objfile)
       this_cu->offset = offset;
       this_cu->length = length + initial_length_size;
       this_cu->objfile = objfile;
+      this_cu->info_or_types_section = &dwarf2_per_objfile->info;
 
       if (n_comp_units == n_allocated)
 	{
@@ -3873,7 +5387,8 @@ scan_partial_symbols (struct partial_die_info *first_die, CORE_ADDR *lowpc,
 	 enums.  */
 
       if (pdi->name != NULL || pdi->tag == DW_TAG_namespace
-	  || pdi->tag == DW_TAG_module || pdi->tag == DW_TAG_enumeration_type)
+	  || pdi->tag == DW_TAG_module || pdi->tag == DW_TAG_enumeration_type
+	  || pdi->tag == DW_TAG_imported_unit)
 	{
 	  switch (pdi->tag)
 	    {
@@ -3913,6 +5428,29 @@ scan_partial_symbols (struct partial_die_info *first_die, CORE_ADDR *lowpc,
 	    case DW_TAG_module:
 	      add_partial_module (pdi, lowpc, highpc, need_pc, cu);
 	      break;
+	    case DW_TAG_imported_unit:
+	      {
+		struct dwarf2_per_cu_data *per_cu;
+
+		/* For now we don't handle imported units in type units.  */
+		if (cu->per_cu->is_debug_types)
+		  {
+		    error (_("Dwarf Error: DW_TAG_imported_unit is not"
+			     " supported in type units [in module %s]"),
+			   cu->objfile->name);
+		  }
+
+		per_cu = dwarf2_find_containing_comp_unit (pdi->d.offset,
+							   cu->objfile);
+
+		/* Go read the partial unit, if needed.  */
+		if (per_cu->v.psymtab == NULL)
+		  process_psymtab_comp_unit (per_cu, 1);
+
+		VEC_safe_push (dwarf2_per_cu_ptr,
+			       cu->per_cu->s.imported_symtabs, per_cu);
+	      }
+	      break;
 	    default:
 	      break;
 	    }
@@ -4011,7 +5549,7 @@ partial_die_parent_scope (struct partial_die_info *pdi,
 	 ignoring them.  */
       complaint (&symfile_complaints,
 		 _("unhandled containing DIE tag %d for DIE at %d"),
-		 parent->tag, pdi->offset);
+		 parent->tag, pdi->offset.sect_off);
       parent->scope = grandparent_scope;
     }
 
@@ -4021,6 +5559,7 @@ partial_die_parent_scope (struct partial_die_info *pdi,
 
 /* Return the fully scoped name associated with PDI, from compilation unit
    CU.  The result will be allocated with malloc.  */
+
 static char *
 partial_die_full_name (struct partial_die_info *pdi,
 		       struct dwarf2_cu *cu)
@@ -4041,9 +5580,10 @@ partial_die_full_name (struct partial_die_info *pdi,
 	  struct attribute attr;
 	  struct dwarf2_cu *ref_cu = cu;
 
+	  /* DW_FORM_ref_addr is using section offset.  */
 	  attr.name = 0;
 	  attr.form = DW_FORM_ref_addr;
-	  attr.u.addr = pdi->offset;
+	  attr.u.unsnd = pdi->offset.sect_off;
 	  die = follow_die_ref (NULL, &attr, &ref_cu);
 
 	  return xstrdup (dwarf2_full_name (NULL, die, ref_cu));
@@ -4063,7 +5603,6 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
   struct objfile *objfile = cu->objfile;
   CORE_ADDR addr = 0;
   char *actual_name = NULL;
-  const struct partial_symbol *psym = NULL;
   CORE_ADDR baseaddr;
   int built_actual_name = 0;
 
@@ -4120,10 +5659,10 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
       }
       break;
     case DW_TAG_variable:
-      if (pdi->locdesc)
-	addr = decode_locdesc (pdi->locdesc, cu);
+      if (pdi->d.locdesc)
+	addr = decode_locdesc (pdi->d.locdesc, cu);
 
-      if (pdi->locdesc
+      if (pdi->d.locdesc
 	  && addr == 0
 	  && !dwarf2_per_objfile->has_section_at_zero)
 	{
@@ -4147,7 +5686,7 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
 	     used by GDB, but it comes in handy for debugging partial symbol
 	     table building.  */
 
-	  if (pdi->locdesc || pdi->has_type)
+	  if (pdi->d.locdesc || pdi->has_type)
 	    add_psymbol_to_list (actual_name, strlen (actual_name),
 				 built_actual_name,
 				 VAR_DOMAIN, LOC_STATIC,
@@ -4158,7 +5697,7 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
       else
 	{
 	  /* Static Variable.  Skip symbols without location descriptors.  */
-	  if (pdi->locdesc == NULL)
+	  if (pdi->d.locdesc == NULL)
 	    {
 	      if (built_actual_name)
 		xfree (actual_name);
@@ -4303,6 +5842,10 @@ add_partial_subprogram (struct partial_die_info *pdi,
 				 pdi->highpc - 1 + baseaddr,
 				 cu->per_cu->v.psymtab);
 	    }
+        }
+
+      if (pdi->has_pc_info || (!pdi->is_external && pdi->may_be_inlined))
+	{
           if (!pdi->is_declaration)
 	    /* Ignore subprogram DIEs that do not have a name, they are
 	       illegal.  Do not emit a complaint at this point, we will
@@ -4379,7 +5922,7 @@ peek_die_abbrev (gdb_byte *info_ptr, unsigned int *bytes_read,
   if (abbrev_number == 0)
     return NULL;
 
-  abbrev = dwarf2_lookup_abbrev (abbrev_number, cu);
+  abbrev = abbrev_table_lookup_abbrev (cu->abbrev_table, abbrev_number);
   if (!abbrev)
     {
       error (_("Dwarf Error: Could not find abbrev number %d [in module %s]"),
@@ -4394,8 +5937,9 @@ peek_die_abbrev (gdb_byte *info_ptr, unsigned int *bytes_read,
    DIE.  Any children of the skipped DIEs will also be skipped.  */
 
 static gdb_byte *
-skip_children (gdb_byte *buffer, gdb_byte *info_ptr, struct dwarf2_cu *cu)
+skip_children (const struct die_reader_specs *reader, gdb_byte *info_ptr)
 {
+  struct dwarf2_cu *cu = reader->cu;
   struct abbrev_info *abbrev;
   unsigned int bytes_read;
 
@@ -4405,7 +5949,7 @@ skip_children (gdb_byte *buffer, gdb_byte *info_ptr, struct dwarf2_cu *cu)
       if (abbrev == NULL)
 	return info_ptr + bytes_read;
       else
-	info_ptr = skip_one_die (buffer, info_ptr + bytes_read, abbrev, cu);
+	info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev);
     }
 }
 
@@ -4416,12 +5960,16 @@ skip_children (gdb_byte *buffer, gdb_byte *info_ptr, struct dwarf2_cu *cu)
    children.  */
 
 static gdb_byte *
-skip_one_die (gdb_byte *buffer, gdb_byte *info_ptr,
-	      struct abbrev_info *abbrev, struct dwarf2_cu *cu)
+skip_one_die (const struct die_reader_specs *reader, gdb_byte *info_ptr,
+	      struct abbrev_info *abbrev)
 {
   unsigned int bytes_read;
   struct attribute attr;
-  bfd *abfd = cu->objfile->obfd;
+  bfd *abfd = reader->abfd;
+  struct dwarf2_cu *cu = reader->cu;
+  gdb_byte *buffer = reader->buffer;
+  const gdb_byte *buffer_end = reader->buffer_end;
+  gdb_byte *start_info_ptr = info_ptr;
   unsigned int form, i;
 
   for (i = 0; i < abbrev->num_attrs; i++)
@@ -4429,13 +5977,12 @@ skip_one_die (gdb_byte *buffer, gdb_byte *info_ptr,
       /* The only abbrev we care about is DW_AT_sibling.  */
       if (abbrev->attrs[i].name == DW_AT_sibling)
 	{
-	  read_attribute (&attr, &abbrev->attrs[i],
-			  abfd, info_ptr, cu);
+	  read_attribute (reader, &attr, &abbrev->attrs[i], info_ptr);
 	  if (attr.form == DW_FORM_ref_addr)
 	    complaint (&symfile_complaints,
 		       _("ignoring absolute DW_AT_sibling"));
 	  else
-	    return buffer + dwarf2_get_ref_die_offset (&attr);
+	    return buffer + dwarf2_get_ref_die_offset (&attr).sect_off;
 	}
 
       /* If it isn't DW_AT_sibling, skip this attribute.  */
@@ -4499,7 +6046,9 @@ skip_one_die (gdb_byte *buffer, gdb_byte *info_ptr,
 	case DW_FORM_sdata:
 	case DW_FORM_udata:
 	case DW_FORM_ref_udata:
-	  info_ptr = skip_leb128 (abfd, info_ptr);
+	case DW_FORM_GNU_addr_index:
+	case DW_FORM_GNU_str_index:
+	  info_ptr = (gdb_byte *) safe_skip_leb128 (info_ptr, buffer_end);
 	  break;
 	case DW_FORM_indirect:
 	  form = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
@@ -4517,19 +6066,18 @@ skip_one_die (gdb_byte *buffer, gdb_byte *info_ptr,
     }
 
   if (abbrev->has_children)
-    return skip_children (buffer, info_ptr, cu);
+    return skip_children (reader, info_ptr);
   else
     return info_ptr;
 }
 
 /* Locate ORIG_PDI's sibling.
-   INFO_PTR should point to the start of the next DIE after ORIG_PDI
-   in BUFFER.  */
+   INFO_PTR should point to the start of the next DIE after ORIG_PDI.  */
 
 static gdb_byte *
-locate_pdi_sibling (struct partial_die_info *orig_pdi,
-		    gdb_byte *buffer, gdb_byte *info_ptr,
-		    bfd *abfd, struct dwarf2_cu *cu)
+locate_pdi_sibling (const struct die_reader_specs *reader,
+		    struct partial_die_info *orig_pdi,
+		    gdb_byte *info_ptr)
 {
   /* Do we know the sibling already?  */
 
@@ -4543,7 +6091,7 @@ locate_pdi_sibling (struct partial_die_info *orig_pdi,
 
   /* Skip the children the long way.  */
 
-  return skip_children (buffer, info_ptr, cu);
+  return skip_children (reader, info_ptr);
 }
 
 /* Expand this partial symbol table into a full symbol table.  */
@@ -4594,18 +6142,24 @@ dwarf2_psymtab_to_symtab (struct partial_symtab *pst)
 	    printf_filtered (_("done.\n"));
 	}
     }
+
+  process_cu_includes ();
 }
+

+/* Reading in full CUs.  */
 
 /* Add PER_CU to the queue.  */
 
 static void
-queue_comp_unit (struct dwarf2_per_cu_data *per_cu, struct objfile *objfile)
+queue_comp_unit (struct dwarf2_per_cu_data *per_cu,
+		 enum language pretend_language)
 {
   struct dwarf2_queue_item *item;
 
   per_cu->queued = 1;
   item = xmalloc (sizeof (*item));
   item->per_cu = per_cu;
+  item->pretend_language = pretend_language;
   item->next = NULL;
 
   if (dwarf2_queue == NULL)
@@ -4616,13 +6170,62 @@ queue_comp_unit (struct dwarf2_per_cu_data *per_cu, struct objfile *objfile)
   dwarf2_queue_tail = item;
 }
 
+/* THIS_CU has a reference to PER_CU.  If necessary, load the new compilation
+   unit and add it to our queue.
+   The result is non-zero if PER_CU was queued, otherwise the result is zero
+   meaning either PER_CU is already queued or it is already loaded.  */
+
+static int
+maybe_queue_comp_unit (struct dwarf2_cu *this_cu,
+		       struct dwarf2_per_cu_data *per_cu,
+		       enum language pretend_language)
+{
+  /* We may arrive here during partial symbol reading, if we need full
+     DIEs to process an unusual case (e.g. template arguments).  Do
+     not queue PER_CU, just tell our caller to load its DIEs.  */
+  if (dwarf2_per_objfile->reading_partial_symbols)
+    {
+      if (per_cu->cu == NULL || per_cu->cu->dies == NULL)
+	return 1;
+      return 0;
+    }
+
+  /* Mark the dependence relation so that we don't flush PER_CU
+     too early.  */
+  dwarf2_add_dependence (this_cu, per_cu);
+
+  /* If it's already on the queue, we have nothing to do.  */
+  if (per_cu->queued)
+    return 0;
+
+  /* If the compilation unit is already loaded, just mark it as
+     used.  */
+  if (per_cu->cu != NULL)
+    {
+      per_cu->cu->last_used = 0;
+      return 0;
+    }
+
+  /* Add it to the queue.  */
+  queue_comp_unit (per_cu, pretend_language);
+
+  return 1;
+}
+
 /* Process the queue.  */
 
 static void
-process_queue (struct objfile *objfile)
+process_queue (void)
 {
   struct dwarf2_queue_item *item, *next_item;
 
+  if (dwarf2_read_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+			  "Expanding one or more symtabs of objfile %s ...\n",
+			  dwarf2_per_objfile->objfile->name);
+    }
+
   /* The queue starts out with one item, but following a DIE reference
      may load a new CU, adding it to the end of the queue.  */
   for (item = dwarf2_queue; item != NULL; dwarf2_queue = item = next_item)
@@ -4630,7 +6233,30 @@ process_queue (struct objfile *objfile)
       if (dwarf2_per_objfile->using_index
 	  ? !item->per_cu->v.quick->symtab
 	  : (item->per_cu->v.psymtab && !item->per_cu->v.psymtab->readin))
-	process_full_comp_unit (item->per_cu);
+	{
+	  struct dwarf2_per_cu_data *per_cu = item->per_cu;
+
+	  if (dwarf2_read_debug)
+	    {
+	      fprintf_unfiltered (gdb_stdlog,
+				  "Expanding symtab of %s at offset 0x%x\n",
+				  per_cu->is_debug_types ? "TU" : "CU",
+				  per_cu->offset.sect_off);
+	    }
+
+	  if (per_cu->is_debug_types)
+	    process_full_type_unit (per_cu, item->pretend_language);
+	  else
+	    process_full_comp_unit (per_cu, item->pretend_language);
+
+	  if (dwarf2_read_debug)
+	    {
+	      fprintf_unfiltered (gdb_stdlog,
+				  "Done expanding %s at offset 0x%x\n",
+				  per_cu->is_debug_types ? "TU" : "CU",
+				  per_cu->offset.sect_off);
+	    }
+	}
 
       item->per_cu->queued = 0;
       next_item = item->next;
@@ -4638,6 +6264,12 @@ process_queue (struct objfile *objfile)
     }
 
   dwarf2_queue_tail = NULL;
+
+  if (dwarf2_read_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog, "Done expanding symtabs of %s.\n",
+			  dwarf2_per_objfile->objfile->name);
+    }
 }
 
 /* Free all allocated queue entries.  This function only releases anything if
@@ -4657,7 +6289,7 @@ dwarf2_release_queue (void *dummy)
       if (item->per_cu->queued)
 	{
 	  if (item->per_cu->cu != NULL)
-	    free_one_cached_comp_unit (item->per_cu->cu);
+	    free_one_cached_comp_unit (item->per_cu);
 	  item->per_cu->queued = 0;
 	}
 
@@ -4675,11 +6307,14 @@ static void
 psymtab_to_symtab_1 (struct partial_symtab *pst)
 {
   struct dwarf2_per_cu_data *per_cu;
-  struct cleanup *back_to;
   int i;
 
+  if (pst->readin)
+    return;
+
   for (i = 0; i < pst->number_of_dependencies; i++)
-    if (!pst->dependencies[i]->readin)
+    if (!pst->dependencies[i]->readin
+	&& pst->dependencies[i]->user == NULL)
       {
         /* Inform about additional files that need to be read in.  */
         if (info_verbose)
@@ -4706,98 +6341,81 @@ psymtab_to_symtab_1 (struct partial_symtab *pst)
       return;
     }
 
-  dw2_do_instantiate_symtab (pst->objfile, per_cu);
+  dw2_do_instantiate_symtab (per_cu);
 }
 
-/* Load the DIEs associated with PER_CU into memory.  */
+/* Trivial hash function for die_info: the hash value of a DIE
+   is its offset in .debug_info for this objfile.  */
 
-static void
-load_full_comp_unit (struct dwarf2_per_cu_data *per_cu,
-		     struct objfile *objfile)
+static hashval_t
+die_hash (const void *item)
 {
-  bfd *abfd = objfile->obfd;
-  struct dwarf2_cu *cu;
-  unsigned int offset;
-  gdb_byte *info_ptr, *beg_of_comp_unit;
-  struct cleanup *free_abbrevs_cleanup = NULL, *free_cu_cleanup = NULL;
-  struct attribute *attr;
-  int read_cu = 0;
-
-  gdb_assert (! per_cu->debug_types_section);
-
-  /* Set local variables from the partial symbol table info.  */
-  offset = per_cu->offset;
-
-  dwarf2_read_section (objfile, &dwarf2_per_objfile->info);
-  info_ptr = dwarf2_per_objfile->info.buffer + offset;
-  beg_of_comp_unit = info_ptr;
-
-  if (per_cu->cu == NULL)
-    {
-      cu = xmalloc (sizeof (*cu));
-      init_one_comp_unit (cu, objfile);
-
-      read_cu = 1;
+  const struct die_info *die = item;
 
-      /* If an error occurs while loading, release our storage.  */
-      free_cu_cleanup = make_cleanup (free_one_comp_unit, cu);
+  return die->offset.sect_off;
+}
 
-      /* Read in the comp_unit header.  */
-      info_ptr = read_comp_unit_head (&cu->header, info_ptr, abfd);
+/* Trivial comparison function for die_info structures: two DIEs
+   are equal if they have the same offset.  */
 
-      /* Skip dummy compilation units.  */
-      if (info_ptr >= (dwarf2_per_objfile->info.buffer
-		       + dwarf2_per_objfile->info.size)
-	  || peek_abbrev_code (abfd, info_ptr) == 0)
-	{
-	  do_cleanups (free_cu_cleanup);
-	  return;
-	}
+static int
+die_eq (const void *item_lhs, const void *item_rhs)
+{
+  const struct die_info *die_lhs = item_lhs;
+  const struct die_info *die_rhs = item_rhs;
 
-      /* Complete the cu_header.  */
-      cu->header.offset = offset;
-      cu->header.first_die_offset = info_ptr - beg_of_comp_unit;
+  return die_lhs->offset.sect_off == die_rhs->offset.sect_off;
+}
 
-      /* Read the abbrevs for this compilation unit.  */
-      dwarf2_read_abbrevs (abfd, cu);
-      free_abbrevs_cleanup = make_cleanup (dwarf2_free_abbrev_table, cu);
+/* die_reader_func for load_full_comp_unit.
+   This is identical to read_signatured_type_reader,
+   but is kept separate for now.  */
 
-      /* Link this compilation unit into the compilation unit tree.  */
-      per_cu->cu = cu;
-      cu->per_cu = per_cu;
+static void
+load_full_comp_unit_reader (const struct die_reader_specs *reader,
+			    gdb_byte *info_ptr,
+			    struct die_info *comp_unit_die,
+			    int has_children,
+			    void *data)
+{
+  struct dwarf2_cu *cu = reader->cu;
+  enum language *language_ptr = data;
 
-      /* Link this CU into read_in_chain.  */
-      per_cu->cu->read_in_chain = dwarf2_per_objfile->read_in_chain;
-      dwarf2_per_objfile->read_in_chain = per_cu;
-    }
-  else
-    {
-      cu = per_cu->cu;
-      info_ptr += cu->header.first_die_offset;
-    }
+  gdb_assert (cu->die_hash == NULL);
+  cu->die_hash =
+    htab_create_alloc_ex (cu->header.length / 12,
+			  die_hash,
+			  die_eq,
+			  NULL,
+			  &cu->comp_unit_obstack,
+			  hashtab_obstack_allocate,
+			  dummy_obstack_deallocate);
 
-  cu->dies = read_comp_unit (info_ptr, cu);
+  if (has_children)
+    comp_unit_die->child = read_die_and_siblings (reader, info_ptr,
+						  &info_ptr, comp_unit_die);
+  cu->dies = comp_unit_die;
+  /* comp_unit_die is not stored in die_hash, no need.  */
 
   /* We try not to read any attributes in this function, because not
-     all objfiles needed for references have been loaded yet, and symbol
+     all CUs needed for references have been loaded yet, and symbol
      table processing isn't initialized.  But we have to set the CU language,
-     or we won't be able to build types correctly.  */
-  prepare_one_comp_unit (cu, cu->dies);
-
-  /* Similarly, if we do not read the producer, we can not apply
+     or we won't be able to build types correctly.
+     Similarly, if we do not read the producer, we can not apply
      producer-specific interpretation.  */
-  attr = dwarf2_attr (cu->dies, DW_AT_producer, cu);
-  if (attr)
-    cu->producer = DW_STRING (attr);
+  prepare_one_comp_unit (cu, cu->dies, *language_ptr);
+}
 
-  if (read_cu)
-    {
-      do_cleanups (free_abbrevs_cleanup);
+/* Load the DIEs associated with PER_CU into memory.  */
 
-      /* We've successfully allocated this compilation unit.  Let our
-	 caller clean it up when finished with it.  */
-      discard_cleanups (free_cu_cleanup);
-    }
+static void
+load_full_comp_unit (struct dwarf2_per_cu_data *this_cu,
+		     enum language pretend_language)
+{
+  gdb_assert (! this_cu->is_debug_types);
+
+  init_cutu_and_read_dies (this_cu, NULL, 1, 1,
+			   load_full_comp_unit_reader, &pretend_language);
 }
 
 /* Add a DIE to the delayed physname list.  */
@@ -4850,11 +6468,194 @@ compute_delayed_physnames (struct dwarf2_cu *cu)
     }
 }
 
-/* Generate full symbol information for PST and CU, whose DIEs have
+/* Go objects should be embedded in a DW_TAG_module DIE,
+   and it's not clear if/how imported objects will appear.
+   To keep Go support simple until that's worked out,
+   go back through what we've read and create something usable.
+   We could do this while processing each DIE, and feels kinda cleaner,
+   but that way is more invasive.
+   This is to, for example, allow the user to type "p var" or "b main"
+   without having to specify the package name, and allow lookups
+   of module.object to work in contexts that use the expression
+   parser.  */
+
+static void
+fixup_go_packaging (struct dwarf2_cu *cu)
+{
+  char *package_name = NULL;
+  struct pending *list;
+  int i;
+
+  for (list = global_symbols; list != NULL; list = list->next)
+    {
+      for (i = 0; i < list->nsyms; ++i)
+	{
+	  struct symbol *sym = list->symbol[i];
+
+	  if (SYMBOL_LANGUAGE (sym) == language_go
+	      && SYMBOL_CLASS (sym) == LOC_BLOCK)
+	    {
+	      char *this_package_name = go_symbol_package_name (sym);
+
+	      if (this_package_name == NULL)
+		continue;
+	      if (package_name == NULL)
+		package_name = this_package_name;
+	      else
+		{
+		  if (strcmp (package_name, this_package_name) != 0)
+		    complaint (&symfile_complaints,
+			       _("Symtab %s has objects from two different Go packages: %s and %s"),
+			       (sym->symtab && sym->symtab->filename
+				? sym->symtab->filename
+				: cu->objfile->name),
+			       this_package_name, package_name);
+		  xfree (this_package_name);
+		}
+	    }
+	}
+    }
+
+  if (package_name != NULL)
+    {
+      struct objfile *objfile = cu->objfile;
+      struct type *type = init_type (TYPE_CODE_MODULE, 0, 0,
+				     package_name, objfile);
+      struct symbol *sym;
+
+      TYPE_TAG_NAME (type) = TYPE_NAME (type);
+
+      sym = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct symbol);
+      SYMBOL_SET_LANGUAGE (sym, language_go);
+      SYMBOL_SET_NAMES (sym, package_name, strlen (package_name), 1, objfile);
+      /* This is not VAR_DOMAIN because we want a way to ensure a lookup of,
+	 e.g., "main" finds the "main" module and not C's main().  */
+      SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
+      SYMBOL_CLASS (sym) = LOC_TYPEDEF;
+      SYMBOL_TYPE (sym) = type;
+
+      add_symbol_to_list (sym, &global_symbols);
+
+      xfree (package_name);
+    }
+}
+
+static void compute_symtab_includes (struct dwarf2_per_cu_data *per_cu);
+
+/* Return the symtab for PER_CU.  This works properly regardless of
+   whether we're using the index or psymtabs.  */
+
+static struct symtab *
+get_symtab (struct dwarf2_per_cu_data *per_cu)
+{
+  return (dwarf2_per_objfile->using_index
+	  ? per_cu->v.quick->symtab
+	  : per_cu->v.psymtab->symtab);
+}
+
+/* A helper function for computing the list of all symbol tables
+   included by PER_CU.  */
+
+static void
+recursively_compute_inclusions (VEC (dwarf2_per_cu_ptr) **result,
+				htab_t all_children,
+				struct dwarf2_per_cu_data *per_cu)
+{
+  void **slot;
+  int ix;
+  struct dwarf2_per_cu_data *iter;
+
+  slot = htab_find_slot (all_children, per_cu, INSERT);
+  if (*slot != NULL)
+    {
+      /* This inclusion and its children have been processed.  */
+      return;
+    }
+
+  *slot = per_cu;
+  /* Only add a CU if it has a symbol table.  */
+  if (get_symtab (per_cu) != NULL)
+    VEC_safe_push (dwarf2_per_cu_ptr, *result, per_cu);
+
+  for (ix = 0;
+       VEC_iterate (dwarf2_per_cu_ptr, per_cu->s.imported_symtabs, ix, iter);
+       ++ix)
+    recursively_compute_inclusions (result, all_children, iter);
+}
+
+/* Compute the symtab 'includes' fields for the symtab related to
+   PER_CU.  */
+
+static void
+compute_symtab_includes (struct dwarf2_per_cu_data *per_cu)
+{
+  gdb_assert (! per_cu->is_debug_types);
+
+  if (!VEC_empty (dwarf2_per_cu_ptr, per_cu->s.imported_symtabs))
+    {
+      int ix, len;
+      struct dwarf2_per_cu_data *iter;
+      VEC (dwarf2_per_cu_ptr) *result_children = NULL;
+      htab_t all_children;
+      struct symtab *symtab = get_symtab (per_cu);
+
+      /* If we don't have a symtab, we can just skip this case.  */
+      if (symtab == NULL)
+	return;
+
+      all_children = htab_create_alloc (1, htab_hash_pointer, htab_eq_pointer,
+					NULL, xcalloc, xfree);
+
+      for (ix = 0;
+	   VEC_iterate (dwarf2_per_cu_ptr, per_cu->s.imported_symtabs,
+			ix, iter);
+	   ++ix)
+	recursively_compute_inclusions (&result_children, all_children, iter);
+
+      /* Now we have a transitive closure of all the included CUs, so
+	 we can convert it to a list of symtabs.  */
+      len = VEC_length (dwarf2_per_cu_ptr, result_children);
+      symtab->includes
+	= obstack_alloc (&dwarf2_per_objfile->objfile->objfile_obstack,
+			 (len + 1) * sizeof (struct symtab *));
+      for (ix = 0;
+	   VEC_iterate (dwarf2_per_cu_ptr, result_children, ix, iter);
+	   ++ix)
+	symtab->includes[ix] = get_symtab (iter);
+      symtab->includes[len] = NULL;
+
+      VEC_free (dwarf2_per_cu_ptr, result_children);
+      htab_delete (all_children);
+    }
+}
+
+/* Compute the 'includes' field for the symtabs of all the CUs we just
+   read.  */
+
+static void
+process_cu_includes (void)
+{
+  int ix;
+  struct dwarf2_per_cu_data *iter;
+
+  for (ix = 0;
+       VEC_iterate (dwarf2_per_cu_ptr, dwarf2_per_objfile->just_read_cus,
+		    ix, iter);
+       ++ix)
+    {
+      if (! iter->is_debug_types)
+	compute_symtab_includes (iter);
+    }
+
+  VEC_free (dwarf2_per_cu_ptr, dwarf2_per_objfile->just_read_cus);
+}
+
+/* Generate full symbol information for PER_CU, whose DIEs have
    already been loaded into memory.  */
 
 static void
-process_full_comp_unit (struct dwarf2_per_cu_data *per_cu)
+process_full_comp_unit (struct dwarf2_per_cu_data *per_cu,
+			enum language pretend_language)
 {
   struct dwarf2_cu *cu = per_cu->cu;
   struct objfile *objfile = per_cu->objfile;
@@ -4862,6 +6663,7 @@ process_full_comp_unit (struct dwarf2_per_cu_data *per_cu)
   struct symtab *symtab;
   struct cleanup *back_to, *delayed_list_cleanup;
   CORE_ADDR baseaddr;
+  struct block *static_block;
 
   baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
 
@@ -4871,9 +6673,16 @@ process_full_comp_unit (struct dwarf2_per_cu_data *per_cu)
 
   cu->list_in_scope = &file_symbols;
 
+  cu->language = pretend_language;
+  cu->language_defn = language_def (cu->language);
+
   /* Do line number decoding in read_file_scope () */
   process_die (cu->dies, cu);
 
+  /* For now fudge the Go package.  */
+  if (cu->language == language_go)
+    fixup_go_packaging (cu);
+
   /* Now that we have processed all the DIEs in the CU, all the types 
      should be complete, and it should now be safe to compute all of the
      physnames.  */
@@ -4885,7 +6694,17 @@ process_full_comp_unit (struct dwarf2_per_cu_data *per_cu)
      it, by scanning the DIE's below the compilation unit.  */
   get_scope_pc_bounds (cu->dies, &lowpc, &highpc, cu);
 
-  symtab = end_symtab (highpc + baseaddr, objfile, SECT_OFF_TEXT (objfile));
+  static_block = end_symtab_get_static_block (highpc + baseaddr, objfile, 0);
+
+  /* If the comp unit has DW_AT_ranges, it may have discontiguous ranges.
+     Also, DW_AT_ranges may record ranges not belonging to any child DIEs
+     (such as virtual method tables).  Record the ranges in STATIC_BLOCK's
+     addrmap to help ensure it has an accurate map of pc values belonging to
+     this comp unit.  */
+  dwarf2_record_block_ranges (cu->dies, static_block, baseaddr, cu);
+
+  symtab = end_symtab_from_static_block (static_block, objfile,
+					 SECT_OFF_TEXT (objfile), 0);
 
   if (symtab != NULL)
     {
@@ -4899,7 +6718,9 @@ process_full_comp_unit (struct dwarf2_per_cu_data *per_cu)
 
       /* GCC-4.0 has started to support -fvar-tracking.  GCC-3.x still can
 	 produce DW_AT_location with location lists but it can be possibly
-	 invalid without -fvar-tracking.
+	 invalid without -fvar-tracking.  Still up to GCC-4.4.x incl. 4.4.0
+	 there were bugs in prologue debug info, fixed later in GCC-4.5
+	 by "unwind info for epilogues" patch (which is not directly related).
 
 	 For -gdwarf-4 type units LOCATIONS_VALID indication is fortunately not
 	 needed, it would be wrong due to missing DW_AT_producer there.
@@ -4907,7 +6728,7 @@ process_full_comp_unit (struct dwarf2_per_cu_data *per_cu)
 	 Still one can confuse GDB by using non-standard GCC compilation
 	 options - this waits on GCC PR other/32998 (-frecord-gcc-switches).
 	 */ 
-      if (cu->has_loclist && gcc_4_minor >= 0)
+      if (cu->has_loclist && gcc_4_minor >= 5)
 	symtab->locations_valid = 1;
 
       if (gcc_4_minor >= 5)
@@ -4925,66 +6746,176 @@ process_full_comp_unit (struct dwarf2_per_cu_data *per_cu)
       pst->readin = 1;
     }
 
+  /* Push it for inclusion processing later.  */
+  VEC_safe_push (dwarf2_per_cu_ptr, dwarf2_per_objfile->just_read_cus, per_cu);
+
   do_cleanups (back_to);
 }
 
-/* Process a die and its children.  */
+/* Generate full symbol information for type unit PER_CU, whose DIEs have
+   already been loaded into memory.  */
 
 static void
-process_die (struct die_info *die, struct dwarf2_cu *cu)
+process_full_type_unit (struct dwarf2_per_cu_data *per_cu,
+			enum language pretend_language)
 {
-  switch (die->tag)
-    {
-    case DW_TAG_padding:
-      break;
-    case DW_TAG_compile_unit:
-      read_file_scope (die, cu);
-      break;
-    case DW_TAG_type_unit:
-      read_type_unit_scope (die, cu);
-      break;
-    case DW_TAG_subprogram:
-    case DW_TAG_inlined_subroutine:
-      read_func_scope (die, cu);
-      break;
-    case DW_TAG_lexical_block:
-    case DW_TAG_try_block:
-    case DW_TAG_catch_block:
-      read_lexical_block_scope (die, cu);
-      break;
-    case DW_TAG_GNU_call_site:
-      read_call_site_scope (die, cu);
-      break;
-    case DW_TAG_class_type:
-    case DW_TAG_interface_type:
-    case DW_TAG_structure_type:
-    case DW_TAG_union_type:
-      process_structure_scope (die, cu);
-      break;
-    case DW_TAG_enumeration_type:
-      process_enumeration_scope (die, cu);
-      break;
+  struct dwarf2_cu *cu = per_cu->cu;
+  struct objfile *objfile = per_cu->objfile;
+  struct symtab *symtab;
+  struct cleanup *back_to, *delayed_list_cleanup;
 
-    /* These dies have a type, but processing them does not create
-       a symbol or recurse to process the children.  Therefore we can
-       read them on-demand through read_type_die.  */
-    case DW_TAG_subroutine_type:
-    case DW_TAG_set_type:
-    case DW_TAG_array_type:
-    case DW_TAG_pointer_type:
-    case DW_TAG_ptr_to_member_type:
-    case DW_TAG_reference_type:
-    case DW_TAG_string_type:
-      break;
+  buildsym_init ();
+  back_to = make_cleanup (really_free_pendings, NULL);
+  delayed_list_cleanup = make_cleanup (free_delayed_list, cu);
 
-    case DW_TAG_base_type:
-    case DW_TAG_subrange_type:
-    case DW_TAG_typedef:
-      /* Add a typedef symbol for the type definition, if it has a
-         DW_AT_name.  */
-      new_symbol (die, read_type_die (die, cu), cu);
-      break;
-    case DW_TAG_common_block:
+  cu->list_in_scope = &file_symbols;
+
+  cu->language = pretend_language;
+  cu->language_defn = language_def (cu->language);
+
+  /* The symbol tables are set up in read_type_unit_scope.  */
+  process_die (cu->dies, cu);
+
+  /* For now fudge the Go package.  */
+  if (cu->language == language_go)
+    fixup_go_packaging (cu);
+
+  /* Now that we have processed all the DIEs in the CU, all the types 
+     should be complete, and it should now be safe to compute all of the
+     physnames.  */
+  compute_delayed_physnames (cu);
+  do_cleanups (delayed_list_cleanup);
+
+  /* TUs share symbol tables.
+     If this is the first TU to use this symtab, complete the construction
+     of it with end_expandable_symtab.  Otherwise, complete the addition of
+     this TU's symbols to the existing symtab.  */
+  if (per_cu->s.type_unit_group->primary_symtab == NULL)
+    {
+      symtab = end_expandable_symtab (0, objfile, SECT_OFF_TEXT (objfile));
+      per_cu->s.type_unit_group->primary_symtab = symtab;
+
+      if (symtab != NULL)
+	{
+	  /* Set symtab language to language from DW_AT_language.  If the
+	     compilation is from a C file generated by language preprocessors,
+	     do not set the language if it was already deduced by
+	     start_subfile.  */
+	  if (!(cu->language == language_c && symtab->language != language_c))
+	    symtab->language = cu->language;
+	}
+    }
+  else
+    {
+      augment_type_symtab (objfile,
+			   per_cu->s.type_unit_group->primary_symtab);
+      symtab = per_cu->s.type_unit_group->primary_symtab;
+    }
+
+  if (dwarf2_per_objfile->using_index)
+    per_cu->v.quick->symtab = symtab;
+  else
+    {
+      struct partial_symtab *pst = per_cu->v.psymtab;
+      pst->symtab = symtab;
+      pst->readin = 1;
+    }
+
+  do_cleanups (back_to);
+}
+
+/* Process an imported unit DIE.  */
+
+static void
+process_imported_unit_die (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct attribute *attr;
+
+  /* For now we don't handle imported units in type units.  */
+  if (cu->per_cu->is_debug_types)
+    {
+      error (_("Dwarf Error: DW_TAG_imported_unit is not"
+	       " supported in type units [in module %s]"),
+	     cu->objfile->name);
+    }
+
+  attr = dwarf2_attr (die, DW_AT_import, cu);
+  if (attr != NULL)
+    {
+      struct dwarf2_per_cu_data *per_cu;
+      struct symtab *imported_symtab;
+      sect_offset offset;
+
+      offset = dwarf2_get_ref_die_offset (attr);
+      per_cu = dwarf2_find_containing_comp_unit (offset, cu->objfile);
+
+      /* Queue the unit, if needed.  */
+      if (maybe_queue_comp_unit (cu, per_cu, cu->language))
+	load_full_comp_unit (per_cu, cu->language);
+
+      VEC_safe_push (dwarf2_per_cu_ptr, cu->per_cu->s.imported_symtabs,
+		     per_cu);
+    }
+}
+
+/* Process a die and its children.  */
+
+static void
+process_die (struct die_info *die, struct dwarf2_cu *cu)
+{
+  switch (die->tag)
+    {
+    case DW_TAG_padding:
+      break;
+    case DW_TAG_compile_unit:
+    case DW_TAG_partial_unit:
+      read_file_scope (die, cu);
+      break;
+    case DW_TAG_type_unit:
+      read_type_unit_scope (die, cu);
+      break;
+    case DW_TAG_subprogram:
+    case DW_TAG_inlined_subroutine:
+      read_func_scope (die, cu);
+      break;
+    case DW_TAG_lexical_block:
+    case DW_TAG_try_block:
+    case DW_TAG_catch_block:
+      read_lexical_block_scope (die, cu);
+      break;
+    case DW_TAG_GNU_call_site:
+      read_call_site_scope (die, cu);
+      break;
+    case DW_TAG_class_type:
+    case DW_TAG_interface_type:
+    case DW_TAG_structure_type:
+    case DW_TAG_union_type:
+      process_structure_scope (die, cu);
+      break;
+    case DW_TAG_enumeration_type:
+      process_enumeration_scope (die, cu);
+      break;
+
+    /* These dies have a type, but processing them does not create
+       a symbol or recurse to process the children.  Therefore we can
+       read them on-demand through read_type_die.  */
+    case DW_TAG_subroutine_type:
+    case DW_TAG_set_type:
+    case DW_TAG_array_type:
+    case DW_TAG_pointer_type:
+    case DW_TAG_ptr_to_member_type:
+    case DW_TAG_reference_type:
+    case DW_TAG_string_type:
+      break;
+
+    case DW_TAG_base_type:
+    case DW_TAG_subrange_type:
+    case DW_TAG_typedef:
+      /* Add a typedef symbol for the type definition, if it has a
+         DW_AT_name.  */
+      new_symbol (die, read_type_die (die, cu), cu);
+      break;
+    case DW_TAG_common_block:
       read_common_block (die, cu);
       break;
     case DW_TAG_common_inclusion:
@@ -5006,6 +6937,11 @@ process_die (struct die_info *die, struct dwarf2_cu *cu)
 		   dwarf_tag_name (die->tag));
       read_import_statement (die, cu);
       break;
+
+    case DW_TAG_imported_unit:
+      process_imported_unit_die (die, cu);
+      break;
+
     default:
       new_symbol (die, NULL, cu);
       break;
@@ -5081,8 +7017,14 @@ do_ui_file_peek_last (void *object, const char *buffer, long length)
 }
 
 /* Compute the fully qualified name of DIE in CU.  If PHYSNAME is nonzero,
-   compute the physname for the object, which include a method's
-   formal parameters (C++/Java) and return type (Java).
+   compute the physname for the object, which include a method's:
+   - formal parameters (C++/Java),
+   - receiver type (Go),
+   - return type (Java).
+
+   The term "physname" is a bit confusing.
+   For C++, for example, it is the demangled name.
+   For Go, for example, it's the mangled name.
 
    For Ada, return the DIE's linkage name rather than the fully qualified
    name.  PHYSNAME is ignored..
@@ -5093,6 +7035,8 @@ static const char *
 dwarf2_compute_name (char *name, struct die_info *die, struct dwarf2_cu *cu,
 		     int physname)
 {
+  struct objfile *objfile = cu->objfile;
+
   if (name == NULL)
     name = dwarf2_name (die, cu);
 
@@ -5123,7 +7067,7 @@ dwarf2_compute_name (char *name, struct die_info *die, struct dwarf2_cu *cu,
       if (die_needs_namespace (die, cu))
 	{
 	  long length;
-	  char *prefix;
+	  const char *prefix;
 	  struct ui_file *buf;
 
 	  prefix = determine_prefix (die, cu);
@@ -5171,7 +7115,7 @@ dwarf2_compute_name (char *name, struct die_info *die, struct dwarf2_cu *cu,
 	      for (child = die->child; child != NULL; child = child->sibling)
 		{
 		  struct type *type;
-		  long value;
+		  LONGEST value;
 		  gdb_byte *bytes;
 		  struct dwarf2_locexpr_baton *baton;
 		  struct value *v;
@@ -5300,7 +7244,7 @@ dwarf2_compute_name (char *name, struct die_info *die, struct dwarf2_cu *cu,
 		}
 	    }
 
-	  name = ui_file_obsavestring (buf, &cu->objfile->objfile_obstack,
+	  name = ui_file_obsavestring (buf, &objfile->objfile_obstack,
 				       &length);
 	  ui_file_delete (buf);
 
@@ -5308,7 +7252,7 @@ dwarf2_compute_name (char *name, struct die_info *die, struct dwarf2_cu *cu,
 	    {
 	      char *cname
 		= dwarf2_canonicalize_name (name, cu,
-					    &cu->objfile->objfile_obstack);
+					    &objfile->objfile_obstack);
 
 	      if (cname != NULL)
 		name = cname;
@@ -5343,6 +7287,7 @@ dwarf2_full_name (char *name, struct die_info *die, struct dwarf2_cu *cu)
 static const char *
 dwarf2_physname (char *name, struct die_info *die, struct dwarf2_cu *cu)
 {
+  struct objfile *objfile = cu->objfile;
   struct attribute *attr;
   const char *retval, *mangled = NULL, *canon = NULL;
   struct cleanup *back_to;
@@ -5376,10 +7321,21 @@ dwarf2_physname (char *name, struct die_info *die, struct dwarf2_cu *cu)
 	 variant `long name(params)' does not have the proper inferior type.
 	 */
 
-      demangled = cplus_demangle (mangled, (DMGL_PARAMS | DMGL_ANSI
-					    | (cu->language == language_java
-					       ? DMGL_JAVA | DMGL_RET_POSTFIX
-					       : DMGL_RET_DROP)));
+      if (cu->language == language_go)
+	{
+	  /* This is a lie, but we already lie to the caller new_symbol_full.
+	     new_symbol_full assumes we return the mangled name.
+	     This just undoes that lie until things are cleaned up.  */
+	  demangled = NULL;
+	}
+      else
+	{
+	  demangled = cplus_demangle (mangled,
+				      (DMGL_PARAMS | DMGL_ANSI
+				       | (cu->language == language_java
+					  ? DMGL_JAVA | DMGL_RET_POSTFIX
+					  : DMGL_RET_DROP)));
+	}
       if (demangled)
 	{
 	  make_cleanup (xfree, demangled);
@@ -5405,7 +7361,7 @@ dwarf2_physname (char *name, struct die_info *die, struct dwarf2_cu *cu)
 	  complaint (&symfile_complaints,
 		     _("Computed physname <%s> does not match demangled <%s> "
 		       "(from linkage <%s>) - DIE at 0x%x [in module %s]"),
-		     physname, canon, mangled, die->offset, cu->objfile->name);
+		     physname, canon, mangled, die->offset.sect_off, objfile->name);
 
 	  /* Prefer DW_AT_linkage_name (in the CANON form) - when it
 	     is available here - over computed PHYSNAME.  It is safer
@@ -5424,7 +7380,7 @@ dwarf2_physname (char *name, struct die_info *die, struct dwarf2_cu *cu)
 
   if (need_copy)
     retval = obsavestring (retval, strlen (retval),
-			   &cu->objfile->objfile_obstack);
+			   &objfile->objfile_obstack);
 
   do_cleanups (back_to);
   return retval;
@@ -5435,6 +7391,7 @@ dwarf2_physname (char *name, struct die_info *die, struct dwarf2_cu *cu)
 static void
 read_import_statement (struct die_info *die, struct dwarf2_cu *cu)
 {
+  struct objfile *objfile = cu->objfile;
   struct attribute *import_attr;
   struct die_info *imported_die, *child_die;
   struct dwarf2_cu *imported_cu;
@@ -5541,7 +7498,7 @@ read_import_statement (struct die_info *die, struct dwarf2_cu *cu)
 	    complaint (&symfile_complaints,
 		       _("child DW_TAG_imported_declaration expected "
 			 "- DIE at 0x%x [in module %s]"),
-		       child_die->offset, cu->objfile->name);
+		       child_die->offset.sect_off, objfile->name);
 	    continue;
 	  }
 
@@ -5562,7 +7519,7 @@ read_import_statement (struct die_info *die, struct dwarf2_cu *cu)
 	    complaint (&symfile_complaints,
 		       _("child DW_TAG_imported_declaration has unknown "
 			 "imported name - DIE at 0x%x [in module %s]"),
-		       child_die->offset, cu->objfile->name);
+		       child_die->offset.sect_off, objfile->name);
 	    continue;
 	  }
 
@@ -5576,18 +7533,12 @@ read_import_statement (struct die_info *die, struct dwarf2_cu *cu)
                           import_alias,
                           imported_declaration,
 			  excludes,
-                          &cu->objfile->objfile_obstack);
+                          &objfile->objfile_obstack);
 
   do_cleanups (cleanups);
 }
 
-static void
-initialize_cu_func_list (struct dwarf2_cu *cu)
-{
-  cu->first_fn = cu->last_fn = cu->cached_fn = NULL;
-}
-
-/* Cleanup function for read_file_scope.  */
+/* Cleanup function for handle_DW_AT_stmt_list.  */
 
 static void
 free_cu_line_header (void *arg)
@@ -5638,41 +7589,41 @@ find_file_and_directory (struct die_info *die, struct dwarf2_cu *cu,
     *name = "<unknown>";
 }
 
-/* Handle DW_AT_stmt_list for a compilation unit or type unit.
-   DIE is the DW_TAG_compile_unit or DW_TAG_type_unit die for CU.
+/* Handle DW_AT_stmt_list for a compilation unit.
+   DIE is the DW_TAG_compile_unit die for CU.
    COMP_DIR is the compilation directory.
    WANT_LINE_INFO is non-zero if the pc/line-number mapping is needed.  */
 
 static void
 handle_DW_AT_stmt_list (struct die_info *die, struct dwarf2_cu *cu,
-			const char *comp_dir, int want_line_info)
+			const char *comp_dir)
 {
   struct attribute *attr;
-  struct objfile *objfile = cu->objfile;
-  bfd *abfd = objfile->obfd;
+
+  gdb_assert (! cu->per_cu->is_debug_types);
 
   attr = dwarf2_attr (die, DW_AT_stmt_list, cu);
   if (attr)
     {
       unsigned int line_offset = DW_UNSND (attr);
       struct line_header *line_header
-	= dwarf_decode_line_header (line_offset, abfd, cu);
+	= dwarf_decode_line_header (line_offset, cu);
 
       if (line_header)
-        {
-          cu->line_header = line_header;
-          make_cleanup (free_cu_line_header, cu);
-	  dwarf_decode_lines (line_header, comp_dir, cu, NULL, want_line_info);
-        }
+	{
+	  cu->line_header = line_header;
+	  make_cleanup (free_cu_line_header, cu);
+	  dwarf_decode_lines (line_header, comp_dir, cu, NULL, 1);
+	}
     }
 }
 
-/* Process DW_TAG_compile_unit.  */
+/* Process DW_TAG_compile_unit or DW_TAG_partial_unit.  */
 
 static void
 read_file_scope (struct die_info *die, struct dwarf2_cu *cu)
 {
-  struct objfile *objfile = cu->objfile;
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
   struct cleanup *back_to = make_cleanup (null_cleanup, 0);
   CORE_ADDR lowpc = ((CORE_ADDR) -1);
   CORE_ADDR highpc = ((CORE_ADDR) 0);
@@ -5696,15 +7647,7 @@ read_file_scope (struct die_info *die, struct dwarf2_cu *cu)
 
   find_file_and_directory (die, cu, &name, &comp_dir);
 
-  attr = dwarf2_attr (die, DW_AT_language, cu);
-  if (attr)
-    {
-      set_cu_language (DW_UNSND (attr), cu);
-    }
-
-  attr = dwarf2_attr (die, DW_AT_producer, cu);
-  if (attr)
-    cu->producer = DW_STRING (attr);
+  prepare_one_comp_unit (cu, die, cu->language);
 
   /* The XLCL doesn't generate DW_LANG_OpenCL because this attribute is not
      standardised yet.  As a workaround for the language detection we fall
@@ -5712,21 +7655,16 @@ read_file_scope (struct die_info *die, struct dwarf2_cu *cu)
   if (cu->producer && strstr (cu->producer, "IBM XL C for OpenCL") != NULL)
     cu->language = language_opencl;
 
-  /* We assume that we're processing GCC output.  */
-  processing_gcc_compilation = 2;
-
-  processing_has_namespace_info = 0;
-
-  start_symtab (name, comp_dir, lowpc);
-  record_debugformat ("DWARF 2");
-  record_producer (cu->producer);
+  /* Similar hack for Go.  */
+  if (cu->producer && strstr (cu->producer, "GNU Go ") != NULL)
+    set_cu_language (DW_LANG_Go, cu);
 
-  initialize_cu_func_list (cu);
+  dwarf2_start_symtab (cu, name, comp_dir, lowpc);
 
   /* Decode line number information if present.  We do this before
      processing child DIEs, so that the line header table is available
      for DW_AT_decl_file.  */
-  handle_DW_AT_stmt_list (die, cu, comp_dir, 1);
+  handle_DW_AT_stmt_list (die, cu, comp_dir);
 
   /* Process all dies in compilation unit.  */
   if (die->child != NULL)
@@ -5750,9 +7688,7 @@ read_file_scope (struct die_info *die, struct dwarf2_cu *cu)
 	complaint (&symfile_complaints,
 		   _("CU refers to both DW_AT_GNU_macros and DW_AT_macro_info"));
 
-      dwarf_decode_macros (cu->line_header, DW_UNSND (attr),
-			   comp_dir, abfd, cu,
-			   &dwarf2_per_objfile->macro, 1);
+      dwarf_decode_macros (cu, DW_UNSND (attr), comp_dir, 1);
     }
   else
     {
@@ -5761,14 +7697,122 @@ read_file_scope (struct die_info *die, struct dwarf2_cu *cu)
 	{
 	  unsigned int macro_offset = DW_UNSND (attr);
 
-	  dwarf_decode_macros (cu->line_header, macro_offset,
-			       comp_dir, abfd, cu,
-			       &dwarf2_per_objfile->macinfo, 0);
+	  dwarf_decode_macros (cu, macro_offset, comp_dir, 0);
 	}
     }
+
   do_cleanups (back_to);
 }
 
+/* TU version of handle_DW_AT_stmt_list for read_type_unit_scope.
+   Create the set of symtabs used by this TU, or if this TU is sharing
+   symtabs with another TU and the symtabs have already been created
+   then restore those symtabs in the line header.
+   We don't need the pc/line-number mapping for type units.  */
+
+static void
+setup_type_unit_groups (struct die_info *die, struct dwarf2_cu *cu)
+{
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
+  struct dwarf2_per_cu_data *per_cu = cu->per_cu;
+  struct type_unit_group *tu_group;
+  int first_time;
+  struct line_header *lh;
+  struct attribute *attr;
+  unsigned int i, line_offset;
+
+  gdb_assert (per_cu->is_debug_types);
+
+  attr = dwarf2_attr (die, DW_AT_stmt_list, cu);
+
+  /* If we're using .gdb_index (includes -readnow) then
+     per_cu->s.type_unit_group may not have been set up yet.  */
+  if (per_cu->s.type_unit_group == NULL)
+    per_cu->s.type_unit_group = get_type_unit_group (cu, attr);
+  tu_group = per_cu->s.type_unit_group;
+
+  /* If we've already processed this stmt_list there's no real need to
+     do it again, we could fake it and just recreate the part we need
+     (file name,index -> symtab mapping).  If data shows this optimization
+     is useful we can do it then.  */
+  first_time = tu_group->primary_symtab == NULL;
+
+  /* We have to handle the case of both a missing DW_AT_stmt_list or bad
+     debug info.  */
+  lh = NULL;
+  if (attr != NULL)
+    {
+      line_offset = DW_UNSND (attr);
+      lh = dwarf_decode_line_header (line_offset, cu);
+    }
+  if (lh == NULL)
+    {
+      if (first_time)
+	dwarf2_start_symtab (cu, "", NULL, 0);
+      else
+	{
+	  gdb_assert (tu_group->symtabs == NULL);
+	  restart_symtab (0);
+	}
+      /* Note: The primary symtab will get allocated at the end.  */
+      return;
+    }
+
+  cu->line_header = lh;
+  make_cleanup (free_cu_line_header, cu);
+
+  if (first_time)
+    {
+      dwarf2_start_symtab (cu, "", NULL, 0);
+
+      tu_group->num_symtabs = lh->num_file_names;
+      tu_group->symtabs = XNEWVEC (struct symtab *, lh->num_file_names);
+
+      for (i = 0; i < lh->num_file_names; ++i)
+	{
+	  char *dir = NULL;
+	  struct file_entry *fe = &lh->file_names[i];
+
+	  if (fe->dir_index)
+	    dir = lh->include_dirs[fe->dir_index - 1];
+	  dwarf2_start_subfile (fe->name, dir, NULL);
+
+	  /* Note: We don't have to watch for the main subfile here, type units
+	     don't have DW_AT_name.  */
+
+	  if (current_subfile->symtab == NULL)
+	    {
+	      /* NOTE: start_subfile will recognize when it's been passed
+		 a file it has already seen.  So we can't assume there's a
+		 simple mapping from lh->file_names to subfiles,
+		 lh->file_names may contain dups.  */
+	      current_subfile->symtab = allocate_symtab (current_subfile->name,
+							 objfile);
+	    }
+
+	  fe->symtab = current_subfile->symtab;
+	  tu_group->symtabs[i] = fe->symtab;
+	}
+    }
+  else
+    {
+      restart_symtab (0);
+
+      for (i = 0; i < lh->num_file_names; ++i)
+	{
+	  struct file_entry *fe = &lh->file_names[i];
+
+	  fe->symtab = tu_group->symtabs[i];
+	}
+    }
+
+  /* The main symtab is allocated last.  Type units don't have DW_AT_name
+     so they don't have a "real" (so to speak) symtab anyway.
+     There is later code that will assign the main symtab to all symbols
+     that don't have one.  We need to handle the case of a symbol with a
+     missing symtab (DW_AT_decl_file) anyway.  */
+}
+
 /* Process DW_TAG_type_unit.
    For TUs we want to skip the first top level sibling if it's not the
    actual type being defined by this TU.  In this case the first top
@@ -5777,104 +7821,561 @@ read_file_scope (struct die_info *die, struct dwarf2_cu *cu)
 static void
 read_type_unit_scope (struct die_info *die, struct dwarf2_cu *cu)
 {
-  struct objfile *objfile = cu->objfile;
-  struct cleanup *back_to = make_cleanup (null_cleanup, 0);
-  CORE_ADDR lowpc;
-  struct attribute *attr;
-  char *name = NULL;
-  char *comp_dir = NULL;
   struct die_info *child_die;
-  bfd *abfd = objfile->obfd;
 
-  /* start_symtab needs a low pc, but we don't really have one.
-     Do what read_file_scope would do in the absence of such info.  */
-  lowpc = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
+  prepare_one_comp_unit (cu, die, language_minimal);
 
-  /* Find the filename.  Do not use dwarf2_name here, since the filename
-     is not a source language identifier.  */
-  attr = dwarf2_attr (die, DW_AT_name, cu);
-  if (attr)
-    name = DW_STRING (attr);
+  /* Initialize (or reinitialize) the machinery for building symtabs.
+     We do this before processing child DIEs, so that the line header table
+     is available for DW_AT_decl_file.  */
+  setup_type_unit_groups (die, cu);
 
-  attr = dwarf2_attr (die, DW_AT_comp_dir, cu);
-  if (attr)
-    comp_dir = DW_STRING (attr);
-  else if (name != NULL && IS_ABSOLUTE_PATH (name))
+  if (die->child != NULL)
     {
-      comp_dir = ldirname (name);
-      if (comp_dir != NULL)
-	make_cleanup (xfree, comp_dir);
+      child_die = die->child;
+      while (child_die && child_die->tag)
+	{
+	  process_die (child_die, cu);
+	  child_die = sibling_die (child_die);
+	}
     }
+}
+

+/* DWO files.  */
 
-  if (name == NULL)
-    name = "<unknown>";
+static hashval_t
+hash_dwo_file (const void *item)
+{
+  const struct dwo_file *dwo_file = item;
 
-  attr = dwarf2_attr (die, DW_AT_language, cu);
-  if (attr)
-    set_cu_language (DW_UNSND (attr), cu);
+  return htab_hash_string (dwo_file->dwo_name);
+}
 
-  /* This isn't technically needed today.  It is done for symmetry
-     with read_file_scope.  */
-  attr = dwarf2_attr (die, DW_AT_producer, cu);
-  if (attr)
-    cu->producer = DW_STRING (attr);
+static int
+eq_dwo_file (const void *item_lhs, const void *item_rhs)
+{
+  const struct dwo_file *lhs = item_lhs;
+  const struct dwo_file *rhs = item_rhs;
 
-  /* We assume that we're processing GCC output.  */
-  processing_gcc_compilation = 2;
+  return strcmp (lhs->dwo_name, rhs->dwo_name) == 0;
+}
 
-  processing_has_namespace_info = 0;
+/* Allocate a hash table for DWO files.  */
 
-  start_symtab (name, comp_dir, lowpc);
-  record_debugformat ("DWARF 2");
-  record_producer (cu->producer);
+static htab_t
+allocate_dwo_file_hash_table (void)
+{
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
 
-  /* Decode line number information if present.  We do this before
-     processing child DIEs, so that the line header table is available
-     for DW_AT_decl_file.
-     We don't need the pc/line-number mapping for type units.  */
-  handle_DW_AT_stmt_list (die, cu, comp_dir, 0);
+  return htab_create_alloc_ex (41,
+			       hash_dwo_file,
+			       eq_dwo_file,
+			       NULL,
+			       &objfile->objfile_obstack,
+			       hashtab_obstack_allocate,
+			       dummy_obstack_deallocate);
+}
 
-  /* Process the dies in the type unit.  */
-  if (die->child == NULL)
+static hashval_t
+hash_dwo_unit (const void *item)
+{
+  const struct dwo_unit *dwo_unit = item;
+
+  /* This drops the top 32 bits of the id, but is ok for a hash.  */
+  return dwo_unit->signature;
+}
+
+static int
+eq_dwo_unit (const void *item_lhs, const void *item_rhs)
+{
+  const struct dwo_unit *lhs = item_lhs;
+  const struct dwo_unit *rhs = item_rhs;
+
+  /* The signature is assumed to be unique within the DWO file.
+     So while object file CU dwo_id's always have the value zero,
+     that's OK, assuming each object file DWO file has only one CU,
+     and that's the rule for now.  */
+  return lhs->signature == rhs->signature;
+}
+
+/* Allocate a hash table for DWO CUs,TUs.
+   There is one of these tables for each of CUs,TUs for each DWO file.  */
+
+static htab_t
+allocate_dwo_unit_table (struct objfile *objfile)
+{
+  /* Start out with a pretty small number.
+     Generally DWO files contain only one CU and maybe some TUs.  */
+  return htab_create_alloc_ex (3,
+			       hash_dwo_unit,
+			       eq_dwo_unit,
+			       NULL,
+			       &objfile->objfile_obstack,
+			       hashtab_obstack_allocate,
+			       dummy_obstack_deallocate);
+}
+
+/* This function is mapped across the sections and remembers the offset and
+   size of each of the DWO debugging sections we are interested in.  */
+
+static void
+dwarf2_locate_dwo_sections (bfd *abfd, asection *sectp, void *dwo_file_ptr)
+{
+  struct dwo_file *dwo_file = dwo_file_ptr;
+  const struct dwo_section_names *names = &dwo_section_names;
+
+  if (section_is_p (sectp->name, &names->abbrev_dwo))
     {
-      dump_die_for_error (die);
-      error (_("Dwarf Error: Missing children for type unit [in module %s]"),
-	     bfd_get_filename (abfd));
+      dwo_file->sections.abbrev.asection = sectp;
+      dwo_file->sections.abbrev.size = bfd_get_section_size (sectp);
+    }
+  else if (section_is_p (sectp->name, &names->info_dwo))
+    {
+      dwo_file->sections.info.asection = sectp;
+      dwo_file->sections.info.size = bfd_get_section_size (sectp);
+    }
+  else if (section_is_p (sectp->name, &names->line_dwo))
+    {
+      dwo_file->sections.line.asection = sectp;
+      dwo_file->sections.line.size = bfd_get_section_size (sectp);
+    }
+  else if (section_is_p (sectp->name, &names->loc_dwo))
+    {
+      dwo_file->sections.loc.asection = sectp;
+      dwo_file->sections.loc.size = bfd_get_section_size (sectp);
+    }
+  else if (section_is_p (sectp->name, &names->macinfo_dwo))
+    {
+      dwo_file->sections.macinfo.asection = sectp;
+      dwo_file->sections.macinfo.size = bfd_get_section_size (sectp);
+    }
+  else if (section_is_p (sectp->name, &names->macro_dwo))
+    {
+      dwo_file->sections.macro.asection = sectp;
+      dwo_file->sections.macro.size = bfd_get_section_size (sectp);
+    }
+  else if (section_is_p (sectp->name, &names->str_dwo))
+    {
+      dwo_file->sections.str.asection = sectp;
+      dwo_file->sections.str.size = bfd_get_section_size (sectp);
+    }
+  else if (section_is_p (sectp->name, &names->str_offsets_dwo))
+    {
+      dwo_file->sections.str_offsets.asection = sectp;
+      dwo_file->sections.str_offsets.size = bfd_get_section_size (sectp);
+    }
+  else if (section_is_p (sectp->name, &names->types_dwo))
+    {
+      struct dwarf2_section_info type_section;
+
+      memset (&type_section, 0, sizeof (type_section));
+      type_section.asection = sectp;
+      type_section.size = bfd_get_section_size (sectp);
+      VEC_safe_push (dwarf2_section_info_def, dwo_file->sections.types,
+		     &type_section);
+    }
+}
+
+/* Structure used to pass data to create_debug_info_hash_table_reader.  */
+
+struct create_dwo_info_table_data
+{
+  struct dwo_file *dwo_file;
+  htab_t cu_htab;
+};
+
+/* die_reader_func for create_debug_info_hash_table.  */
+
+static void
+create_debug_info_hash_table_reader (const struct die_reader_specs *reader,
+				     gdb_byte *info_ptr,
+				     struct die_info *comp_unit_die,
+				     int has_children,
+				     void *datap)
+{
+  struct dwarf2_cu *cu = reader->cu;
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
+  sect_offset offset = cu->per_cu->offset;
+  struct dwarf2_section_info *section = cu->per_cu->info_or_types_section;
+  struct create_dwo_info_table_data *data = datap;
+  struct dwo_file *dwo_file = data->dwo_file;
+  htab_t cu_htab = data->cu_htab;
+  void **slot;
+  struct attribute *attr;
+  struct dwo_unit *dwo_unit;
+
+  attr = dwarf2_attr (comp_unit_die, DW_AT_GNU_dwo_id, cu);
+  if (attr == NULL)
+    {
+      error (_("Dwarf Error: debug entry at offset 0x%x is missing"
+	       " its dwo_id [in module %s]"),
+	     offset.sect_off, dwo_file->dwo_name);
+      return;
+    }
+
+  dwo_unit = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct dwo_unit);
+  dwo_unit->dwo_file = dwo_file;
+  dwo_unit->signature = DW_UNSND (attr);
+  dwo_unit->info_or_types_section = section;
+  dwo_unit->offset = offset;
+  dwo_unit->length = cu->per_cu->length;
+
+  slot = htab_find_slot (cu_htab, dwo_unit, INSERT);
+  gdb_assert (slot != NULL);
+  if (*slot != NULL)
+    {
+      const struct dwo_unit *dup_dwo_unit = *slot;
+
+      complaint (&symfile_complaints,
+		 _("debug entry at offset 0x%x is duplicate to the entry at"
+		   " offset 0x%x, dwo_id 0x%s [in module %s]"),
+		 offset.sect_off, dup_dwo_unit->offset.sect_off,
+		 phex (dwo_unit->signature, sizeof (dwo_unit->signature)),
+		 dwo_file->dwo_name);
     }
+  else
+    *slot = dwo_unit;
+
+  if (dwarf2_read_debug)
+    fprintf_unfiltered (gdb_stdlog, "  offset 0x%x, dwo_id 0x%s\n",
+			offset.sect_off,
+			phex (dwo_unit->signature,
+			      sizeof (dwo_unit->signature)));
+}
+
+/* Create a hash table to map DWO IDs to their CU entry in .debug_info.dwo.  */
+
+static htab_t
+create_debug_info_hash_table (struct dwo_file *dwo_file)
+{
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
+  struct dwarf2_section_info *section = &dwo_file->sections.info;
+  bfd *abfd;
+  htab_t cu_htab;
+  gdb_byte *info_ptr, *end_ptr;
+  struct create_dwo_info_table_data create_dwo_info_table_data;
+
+  dwarf2_read_section (objfile, section);
+  info_ptr = section->buffer;
+
+  if (info_ptr == NULL)
+    return NULL;
+
+  /* We can't set abfd until now because the section may be empty or
+     not present, in which case section->asection will be NULL.  */
+  abfd = section->asection->owner;
+
+  if (dwarf2_read_debug)
+    fprintf_unfiltered (gdb_stdlog, "Reading .debug_info.dwo for %s:\n",
+			bfd_get_filename (abfd));
+
+  cu_htab = allocate_dwo_unit_table (objfile);
+
+  create_dwo_info_table_data.dwo_file = dwo_file;
+  create_dwo_info_table_data.cu_htab = cu_htab;
+
+  end_ptr = info_ptr + section->size;
+  while (info_ptr < end_ptr)
+    {
+      struct dwarf2_per_cu_data per_cu;
+
+      memset (&per_cu, 0, sizeof (per_cu));
+      per_cu.objfile = objfile;
+      per_cu.is_debug_types = 0;
+      per_cu.offset.sect_off = info_ptr - section->buffer;
+      per_cu.info_or_types_section = section;
+
+      init_cutu_and_read_dies_no_follow (&per_cu,
+					 &dwo_file->sections.abbrev,
+					 dwo_file,
+					 create_debug_info_hash_table_reader,
+					 &create_dwo_info_table_data);
+
+      info_ptr += per_cu.length;
+    }
+
+  return cu_htab;
+}
+
+/* Subroutine of open_dwo_file to simplify it.
+   Open the file specified by FILE_NAME and hand it off to BFD for
+   preliminary analysis.  Return a newly initialized bfd *, which
+   includes a canonicalized copy of FILE_NAME.
+   In case of trouble, return NULL.
+   NOTE: This function is derived from symfile_bfd_open.  */
+
+static bfd *
+try_open_dwo_file (const char *file_name)
+{
+  bfd *sym_bfd;
+  int desc;
+  char *absolute_name;
+
+  desc = openp (debug_file_directory, OPF_TRY_CWD_FIRST, file_name,
+		O_RDONLY | O_BINARY, &absolute_name);
+  if (desc < 0)
+    return NULL;
+
+  sym_bfd = bfd_fopen (absolute_name, gnutarget, FOPEN_RB, desc);
+  if (!sym_bfd)
+    {
+      xfree (absolute_name);
+      return NULL;
+    }
+  bfd_set_cacheable (sym_bfd, 1);
+
+  if (!bfd_check_format (sym_bfd, bfd_object))
+    {
+      bfd_close (sym_bfd); /* This also closes desc.  */
+      xfree (absolute_name);
+      return NULL;
+    }
+
+  /* bfd_usrdata exists for applications and libbfd must not touch it.  */
+  gdb_assert (bfd_usrdata (sym_bfd) == NULL);
+
+  return sym_bfd;
+}
+
+/* Try to open DWO file DWO_NAME.
+   COMP_DIR is the DW_AT_comp_dir attribute.
+   The result is the bfd handle of the file.
+   If there is a problem finding or opening the file, return NULL.
+   Upon success, the canonicalized path of the file is stored in the bfd,
+   same as symfile_bfd_open.  */
+
+static bfd *
+open_dwo_file (const char *dwo_name, const char *comp_dir)
+{
+  bfd *abfd;
+
+  if (IS_ABSOLUTE_PATH (dwo_name))
+    return try_open_dwo_file (dwo_name);
+
+  /* Before trying the search path, try DWO_NAME in COMP_DIR.  */
+
+  if (comp_dir != NULL)
+    {
+      char *path_to_try = concat (comp_dir, SLASH_STRING, dwo_name, NULL);
+
+      /* NOTE: If comp_dir is a relative path, this will also try the
+	 search path, which seems useful.  */
+      abfd = try_open_dwo_file (path_to_try);
+      xfree (path_to_try);
+      if (abfd != NULL)
+	return abfd;
+    }
+
+  /* That didn't work, try debug-file-directory, which, despite its name,
+     is a list of paths.  */
+
+  if (*debug_file_directory == '\0')
+    return NULL;
+
+  return try_open_dwo_file (dwo_name);
+}
+
+/* Initialize the use of the DWO file specified by DWO_NAME.  */
+
+static struct dwo_file *
+init_dwo_file (const char *dwo_name, const char *comp_dir)
+{
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
+  struct dwo_file *dwo_file = OBSTACK_ZALLOC (&objfile->objfile_obstack,
+					      struct dwo_file);
+  bfd *abfd;
+  struct cleanup *cleanups;
+
+  if (dwarf2_read_debug)
+    fprintf_unfiltered (gdb_stdlog, "Reading DWO file %s:\n", dwo_name);
+
+  abfd = open_dwo_file (dwo_name, comp_dir);
+  if (abfd == NULL)
+    return NULL;
+  dwo_file->dwo_name = dwo_name;
+  dwo_file->dwo_bfd = abfd;
+
+  cleanups = make_cleanup (free_dwo_file_cleanup, dwo_file);
+
+  bfd_map_over_sections (abfd, dwarf2_locate_dwo_sections, dwo_file);
+
+  dwo_file->cus = create_debug_info_hash_table (dwo_file);
+
+  dwo_file->tus = create_debug_types_hash_table (dwo_file,
+						 dwo_file->sections.types);
+
+  discard_cleanups (cleanups);
+
+  return dwo_file;
+}
+
+/* Lookup DWO file DWO_NAME.  */
+
+static struct dwo_file *
+lookup_dwo_file (char *dwo_name, const char *comp_dir)
+{
+  struct dwo_file *dwo_file;
+  struct dwo_file find_entry;
+  void **slot;
+
+  if (dwarf2_per_objfile->dwo_files == NULL)
+    dwarf2_per_objfile->dwo_files = allocate_dwo_file_hash_table ();
+
+  /* Have we already seen this DWO file?  */
+  find_entry.dwo_name = dwo_name;
+  slot = htab_find_slot (dwarf2_per_objfile->dwo_files, &find_entry, INSERT);
+
+  /* If not, read it in and build a table of the DWOs it contains.  */
+  if (*slot == NULL)
+    *slot = init_dwo_file (dwo_name, comp_dir);
+
+  /* NOTE: This will be NULL if unable to open the file.  */
+  dwo_file = *slot;
+
+  return dwo_file;
+}
+
+/* Lookup the DWO CU referenced from THIS_CU in DWO file DWO_NAME.
+   If non-NULL, comp_dir is the DW_AT_comp_dir attribute.
+   SIGNATURE is the "dwo_id" of the CU (for consistency we use the same
+   nomenclature as TUs).
+   The result is a pointer to the dwo_unit object or NULL if we didn't find it
+   (dwo_id mismatch or couldn't find the DWO file).  */
+
+static struct dwo_unit *
+lookup_dwo_comp_unit (struct dwarf2_per_cu_data *this_cu,
+		      char *dwo_name, const char *comp_dir,
+		      ULONGEST signature)
+{
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
+  struct dwo_file *dwo_file;
+
+  dwo_file = lookup_dwo_file (dwo_name, comp_dir);
+  if (dwo_file == NULL)
+    return NULL;
+
+  /* Look up the DWO using its signature(dwo_id).  */
+
+  if (dwo_file->cus != NULL)
+    {
+      struct dwo_unit find_dwo_cu, *dwo_cu;
+
+      find_dwo_cu.signature = signature;
+      dwo_cu = htab_find (dwo_file->cus, &find_dwo_cu);
+
+      if (dwo_cu != NULL)
+	return dwo_cu;
+    }
+
+  /* We didn't find it.  This must mean a dwo_id mismatch.  */
+
+  complaint (&symfile_complaints,
+	     _("Could not find DWO CU referenced by CU at offset 0x%x"
+	       " [in module %s]"),
+	     this_cu->offset.sect_off, objfile->name);
+  return NULL;
+}
+
+/* Lookup the DWO TU referenced from THIS_TU in DWO file DWO_NAME.
+   If non-NULL, comp_dir is the DW_AT_comp_dir attribute.
+   The result is a pointer to the dwo_unit object or NULL if we didn't find it
+   (dwo_id mismatch or couldn't find the DWO file).  */
+
+static struct dwo_unit *
+lookup_dwo_type_unit (struct signatured_type *this_tu,
+		      char *dwo_name, const char *comp_dir)
+{
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
+  struct dwo_file *dwo_file;
+
+  dwo_file = lookup_dwo_file (dwo_name, comp_dir);
+  if (dwo_file == NULL)
+    return NULL;
+
+  /* Look up the DWO using its signature(dwo_id).  */
+
+  if (dwo_file->tus != NULL)
+    {
+      struct dwo_unit find_dwo_tu, *dwo_tu;
+
+      find_dwo_tu.signature = this_tu->signature;
+      dwo_tu = htab_find (dwo_file->tus, &find_dwo_tu);
+
+      if (dwo_tu != NULL)
+	return dwo_tu;
+    }
+
+  /* We didn't find it.  This must mean a dwo_id mismatch.  */
+
+  complaint (&symfile_complaints,
+	     _("Could not find DWO TU referenced by TU at offset 0x%x"
+	       " [in module %s]"),
+	     this_tu->per_cu.offset.sect_off, objfile->name);
+  return NULL;
+}
+
+/* Free all resources associated with DWO_FILE.
+   Close the DWO file and munmap the sections.
+   All memory should be on the objfile obstack.  */
+
+static void
+free_dwo_file (struct dwo_file *dwo_file, struct objfile *objfile)
+{
+  int ix;
+  struct dwarf2_section_info *section;
+
+  gdb_assert (dwo_file->dwo_bfd != objfile->obfd);
+  bfd_close (dwo_file->dwo_bfd);
+
+  munmap_section_buffer (&dwo_file->sections.abbrev);
+  munmap_section_buffer (&dwo_file->sections.info);
+  munmap_section_buffer (&dwo_file->sections.line);
+  munmap_section_buffer (&dwo_file->sections.loc);
+  munmap_section_buffer (&dwo_file->sections.str);
+  munmap_section_buffer (&dwo_file->sections.str_offsets);
+
+  for (ix = 0;
+       VEC_iterate (dwarf2_section_info_def, dwo_file->sections.types,
+		    ix, section);
+       ++ix)
+    munmap_section_buffer (section);
 
-  child_die = die->child;
+  VEC_free (dwarf2_section_info_def, dwo_file->sections.types);
+}
 
-  while (child_die && child_die->tag)
-    {
-      process_die (child_die, cu);
+/* Wrapper for free_dwo_file for use in cleanups.  */
 
-      child_die = sibling_die (child_die);
-    }
+static void
+free_dwo_file_cleanup (void *arg)
+{
+  struct dwo_file *dwo_file = (struct dwo_file *) arg;
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
 
-  do_cleanups (back_to);
+  free_dwo_file (dwo_file, objfile);
 }
 
-static void
-add_to_cu_func_list (const char *name, CORE_ADDR lowpc, CORE_ADDR highpc,
-		     struct dwarf2_cu *cu)
+/* Traversal function for free_dwo_files.  */
+
+static int
+free_dwo_file_from_slot (void **slot, void *info)
 {
-  struct function_range *thisfn;
+  struct dwo_file *dwo_file = (struct dwo_file *) *slot;
+  struct objfile *objfile = (struct objfile *) info;
 
-  thisfn = (struct function_range *)
-    obstack_alloc (&cu->comp_unit_obstack, sizeof (struct function_range));
-  thisfn->name = name;
-  thisfn->lowpc = lowpc;
-  thisfn->highpc = highpc;
-  thisfn->seen_line = 0;
-  thisfn->next = NULL;
+  free_dwo_file (dwo_file, objfile);
 
-  if (cu->last_fn == NULL)
-      cu->first_fn = thisfn;
-  else
-      cu->last_fn->next = thisfn;
+  return 1;
+}
 
-  cu->last_fn = thisfn;
+/* Free all resources associated with DWO_FILES.  */
+
+static void
+free_dwo_files (htab_t dwo_files, struct objfile *objfile)
+{
+  htab_traverse_noresize (dwo_files, free_dwo_file_from_slot, objfile);
 }
+

+/* Read in various DIEs.  */
 
 /* qsort helper for inherit_abstract_dies.  */
 
@@ -5898,8 +8399,8 @@ inherit_abstract_dies (struct die_info *die, struct dwarf2_cu *cu)
   struct die_info *child_die;
   unsigned die_children_count;
   /* CU offsets which were referenced by children of the current DIE.  */
-  unsigned *offsets;
-  unsigned *offsets_end, *offsetp;
+  sect_offset *offsets;
+  sect_offset *offsets_end, *offsetp;
   /* Parent of DIE - referenced by DW_AT_abstract_origin.  */
   struct die_info *origin_die;
   /* Iterator of the ORIGIN_DIE children.  */
@@ -5929,7 +8430,7 @@ inherit_abstract_dies (struct die_info *die, struct dwarf2_cu *cu)
 	   && origin_die->tag == DW_TAG_subprogram))
     complaint (&symfile_complaints,
 	       _("DIE 0x%x and its abstract origin 0x%x have different tags"),
-	       die->offset, origin_die->offset);
+	       die->offset.sect_off, origin_die->offset.sect_off);
 
   child_die = die->child;
   die_children_count = 0;
@@ -5972,13 +8473,13 @@ inherit_abstract_dies (struct die_info *die, struct dwarf2_cu *cu)
 		   && child_origin_die->tag == DW_TAG_subprogram))
 	    complaint (&symfile_complaints,
 		       _("Child DIE 0x%x and its abstract origin 0x%x have "
-			 "different tags"), child_die->offset,
-		       child_origin_die->offset);
+			 "different tags"), child_die->offset.sect_off,
+		       child_origin_die->offset.sect_off);
 	  if (child_origin_die->parent != origin_die)
 	    complaint (&symfile_complaints,
 		       _("Child DIE 0x%x and its abstract origin 0x%x have "
-			 "different parents"), child_die->offset,
-		       child_origin_die->offset);
+			 "different parents"), child_die->offset.sect_off,
+		       child_origin_die->offset.sect_off);
 	  else
 	    *offsets_end++ = child_origin_die->offset;
 	}
@@ -5987,20 +8488,22 @@ inherit_abstract_dies (struct die_info *die, struct dwarf2_cu *cu)
   qsort (offsets, offsets_end - offsets, sizeof (*offsets),
 	 unsigned_int_compar);
   for (offsetp = offsets + 1; offsetp < offsets_end; offsetp++)
-    if (offsetp[-1] == *offsetp)
+    if (offsetp[-1].sect_off == offsetp->sect_off)
       complaint (&symfile_complaints,
 		 _("Multiple children of DIE 0x%x refer "
 		   "to DIE 0x%x as their abstract origin"),
-		 die->offset, *offsetp);
+		 die->offset.sect_off, offsetp->sect_off);
 
   offsetp = offsets;
   origin_child_die = origin_die->child;
   while (origin_child_die && origin_child_die->tag)
     {
       /* Is ORIGIN_CHILD_DIE referenced by any of the DIE children?  */
-      while (offsetp < offsets_end && *offsetp < origin_child_die->offset)
+      while (offsetp < offsets_end
+	     && offsetp->sect_off < origin_child_die->offset.sect_off)
 	offsetp++;
-      if (offsetp >= offsets_end || *offsetp > origin_child_die->offset)
+      if (offsetp >= offsets_end
+	  || offsetp->sect_off > origin_child_die->offset.sect_off)
 	{
 	  /* Found that ORIGIN_CHILD_DIE is really not referenced.  */
 	  process_die (origin_child_die, origin_cu);
@@ -6051,7 +8554,8 @@ read_func_scope (struct die_info *die, struct dwarf2_cu *cu)
   if (name == NULL)
     {
       complaint (&symfile_complaints,
-                 _("missing name for subprogram DIE at %d"), die->offset);
+		 _("missing name for subprogram DIE at %d"),
+		 die->offset.sect_off);
       return;
     }
 
@@ -6063,16 +8567,13 @@ read_func_scope (struct die_info *die, struct dwarf2_cu *cu)
 	complaint (&symfile_complaints,
 		   _("cannot get low and high bounds "
 		     "for subprogram DIE at %d"),
-		   die->offset);
+		   die->offset.sect_off);
       return;
     }
 
   lowpc += baseaddr;
   highpc += baseaddr;
 
-  /* Record the function range for dwarf_decode_lines.  */
-  add_to_cu_func_list (name, lowpc, highpc, cu);
-
   /* If we have any template arguments, then we must allocate a
      different sort of symbol.  */
   for (child_die = die->child; child_die; child_die = sibling_die (child_die))
@@ -6278,7 +8779,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu)
       complaint (&symfile_complaints,
 		 _("missing DW_AT_low_pc for DW_TAG_GNU_call_site "
 		   "DIE 0x%x [in module %s]"),
-		 die->offset, cu->objfile->name);
+		 die->offset.sect_off, objfile->name);
       return;
     }
   pc = DW_ADDR (attr) + baseaddr;
@@ -6294,7 +8795,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu)
       complaint (&symfile_complaints,
 		 _("Duplicate PC %s for DW_TAG_GNU_call_site "
 		   "DIE 0x%x [in module %s]"),
-		 paddress (gdbarch, pc), die->offset, cu->objfile->name);
+		 paddress (gdbarch, pc), die->offset.sect_off, objfile->name);
       return;
     }
 
@@ -6309,7 +8810,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu)
 	  complaint (&symfile_complaints,
 		     _("Tag %d is not DW_TAG_GNU_call_site_parameter in "
 		       "DW_TAG_GNU_call_site child DIE 0x%x [in module %s]"),
-		     child_die->tag, child_die->offset, cu->objfile->name);
+		     child_die->tag, child_die->offset.sect_off, objfile->name);
 	  continue;
 	}
 
@@ -6367,7 +8868,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu)
 	    complaint (&symfile_complaints,
 		       _("Cannot find function owning DW_TAG_GNU_call_site "
 			 "DIE 0x%x [in module %s]"),
-		       die->offset, cu->objfile->name);
+		       die->offset.sect_off, objfile->name);
 	}
     }
 
@@ -6390,7 +8891,6 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu)
     }
   else if (is_ref_attr (attr))
     {
-      struct objfile *objfile = cu->objfile;
       struct dwarf2_cu *target_cu = cu;
       struct die_info *target_die;
 
@@ -6405,7 +8905,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu)
 	    complaint (&symfile_complaints,
 		       _("DW_AT_GNU_call_site_target target DIE has invalid "
 		         "physname, for referencing DIE 0x%x [in module %s]"),
-		       die->offset, cu->objfile->name);
+		       die->offset.sect_off, objfile->name);
 	  else
 	    SET_FIELD_PHYSNAME (call_site->target, (char *) target_physname);
 	}
@@ -6418,7 +8918,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu)
 	    complaint (&symfile_complaints,
 		       _("DW_AT_GNU_call_site_target target DIE has invalid "
 		         "low pc, for referencing DIE 0x%x [in module %s]"),
-		       die->offset, cu->objfile->name);
+		       die->offset.sect_off, objfile->name);
 	  else
 	    SET_FIELD_PHYSADDR (call_site->target, lowpc + baseaddr);
 	}
@@ -6427,7 +8927,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu)
     complaint (&symfile_complaints,
 	       _("DW_TAG_GNU_call_site DW_AT_GNU_call_site_target is neither "
 		 "block nor reference, for DIE 0x%x [in module %s]"),
-	       die->offset, cu->objfile->name);
+	       die->offset.sect_off, objfile->name);
 
   call_site->per_cu = cu->per_cu;
 
@@ -6435,8 +8935,8 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu)
        child_die && child_die->tag;
        child_die = sibling_die (child_die))
     {
-      struct dwarf2_locexpr_baton *dlbaton;
       struct call_site_parameter *parameter;
+      struct attribute *loc, *origin;
 
       if (child_die->tag != DW_TAG_GNU_call_site_parameter)
 	{
@@ -6447,31 +8947,61 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu)
       gdb_assert (call_site->parameter_count < nparams);
       parameter = &call_site->parameter[call_site->parameter_count];
 
-      /* DW_AT_location specifies the register number.  Value of the data
-	 assumed for the register is contained in DW_AT_GNU_call_site_value.  */
+      /* DW_AT_location specifies the register number or DW_AT_abstract_origin
+	 specifies DW_TAG_formal_parameter.  Value of the data assumed for the
+	 register is contained in DW_AT_GNU_call_site_value.  */
+
+      loc = dwarf2_attr (child_die, DW_AT_location, cu);
+      origin = dwarf2_attr (child_die, DW_AT_abstract_origin, cu);
+      if (loc == NULL && origin != NULL && is_ref_attr (origin))
+	{
+	  sect_offset offset;
 
-      attr = dwarf2_attr (child_die, DW_AT_location, cu);
-      if (!attr || !attr_form_is_block (attr))
+	  parameter->kind = CALL_SITE_PARAMETER_PARAM_OFFSET;
+	  offset = dwarf2_get_ref_die_offset (origin);
+	  if (!offset_in_cu_p (&cu->header, offset))
+	    {
+	      /* As DW_OP_GNU_parameter_ref uses CU-relative offset this
+		 binding can be done only inside one CU.  Such referenced DIE
+		 therefore cannot be even moved to DW_TAG_partial_unit.  */
+	      complaint (&symfile_complaints,
+			 _("DW_AT_abstract_origin offset is not in CU for "
+			   "DW_TAG_GNU_call_site child DIE 0x%x "
+			   "[in module %s]"),
+			 child_die->offset.sect_off, objfile->name);
+	      continue;
+	    }
+	  parameter->u.param_offset.cu_off = (offset.sect_off
+	                                      - cu->header.offset.sect_off);
+	}
+      else if (loc == NULL || origin != NULL || !attr_form_is_block (loc))
 	{
 	  complaint (&symfile_complaints,
 		     _("No DW_FORM_block* DW_AT_location for "
 		       "DW_TAG_GNU_call_site child DIE 0x%x [in module %s]"),
-		     child_die->offset, cu->objfile->name);
+		     child_die->offset.sect_off, objfile->name);
 	  continue;
 	}
-      parameter->dwarf_reg = dwarf_block_to_dwarf_reg (DW_BLOCK (attr)->data,
-				 &DW_BLOCK (attr)->data[DW_BLOCK (attr)->size]);
-      if (parameter->dwarf_reg == -1
-	  && !dwarf_block_to_sp_offset (gdbarch, DW_BLOCK (attr)->data,
-				  &DW_BLOCK (attr)->data[DW_BLOCK (attr)->size],
-					&parameter->fb_offset))
+      else
 	{
-	  complaint (&symfile_complaints,
-		     _("Only single DW_OP_reg or DW_OP_fbreg is supported "
-		       "for DW_FORM_block* DW_AT_location for "
-		       "DW_TAG_GNU_call_site child DIE 0x%x [in module %s]"),
-		     child_die->offset, cu->objfile->name);
-	  continue;
+	  parameter->u.dwarf_reg = dwarf_block_to_dwarf_reg
+	    (DW_BLOCK (loc)->data, &DW_BLOCK (loc)->data[DW_BLOCK (loc)->size]);
+	  if (parameter->u.dwarf_reg != -1)
+	    parameter->kind = CALL_SITE_PARAMETER_DWARF_REG;
+	  else if (dwarf_block_to_sp_offset (gdbarch, DW_BLOCK (loc)->data,
+				    &DW_BLOCK (loc)->data[DW_BLOCK (loc)->size],
+					     &parameter->u.fb_offset))
+	    parameter->kind = CALL_SITE_PARAMETER_FB_OFFSET;
+	  else
+	    {
+	      complaint (&symfile_complaints,
+			 _("Only single DW_OP_reg or DW_OP_fbreg is supported "
+			   "for DW_FORM_block* DW_AT_location is supported for "
+			   "DW_TAG_GNU_call_site child DIE 0x%x "
+			   "[in module %s]"),
+			 child_die->offset.sect_off, objfile->name);
+	      continue;
+	    }
 	}
 
       attr = dwarf2_attr (child_die, DW_AT_GNU_call_site_value, cu);
@@ -6480,7 +9010,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu)
 	  complaint (&symfile_complaints,
 		     _("No DW_FORM_block* DW_AT_GNU_call_site_value for "
 		       "DW_TAG_GNU_call_site child DIE 0x%x [in module %s]"),
-		     child_die->offset, cu->objfile->name);
+		     child_die->offset.sect_off, objfile->name);
 	  continue;
 	}
       parameter->value = DW_BLOCK (attr)->data;
@@ -6498,7 +9028,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu)
 	    complaint (&symfile_complaints,
 		       _("No DW_FORM_block* DW_AT_GNU_call_site_data_value for "
 			 "DW_TAG_GNU_call_site child DIE 0x%x [in module %s]"),
-		       child_die->offset, cu->objfile->name);
+		       child_die->offset.sect_off, objfile->name);
 	  else
 	    {
 	      parameter->data_value = DW_BLOCK (attr)->data;
@@ -6653,23 +9183,31 @@ dwarf2_ranges_read (unsigned offset, CORE_ADDR *low_return,
 /* Get low and high pc attributes from a die.  Return 1 if the attributes
    are present and valid, otherwise, return 0.  Return -1 if the range is
    discontinuous, i.e. derived from DW_AT_ranges information.  */
+
 static int
 dwarf2_get_pc_bounds (struct die_info *die, CORE_ADDR *lowpc,
 		      CORE_ADDR *highpc, struct dwarf2_cu *cu,
 		      struct partial_symtab *pst)
 {
   struct attribute *attr;
+  struct attribute *attr_high;
   CORE_ADDR low = 0;
   CORE_ADDR high = 0;
   int ret = 0;
 
-  attr = dwarf2_attr (die, DW_AT_high_pc, cu);
-  if (attr)
+  attr_high = dwarf2_attr (die, DW_AT_high_pc, cu);
+  if (attr_high)
     {
-      high = DW_ADDR (attr);
       attr = dwarf2_attr (die, DW_AT_low_pc, cu);
       if (attr)
-	low = DW_ADDR (attr);
+        {
+	  low = DW_ADDR (attr);
+	  if (attr_high->form == DW_FORM_addr
+	      || attr_high->form == DW_FORM_GNU_addr_index)
+	    high = DW_ADDR (attr_high);
+	  else
+	    high = low + DW_UNSND (attr_high);
+	}
       else
 	/* Found high w/o low attribute.  */
 	return 0;
@@ -6682,9 +9220,11 @@ dwarf2_get_pc_bounds (struct die_info *die, CORE_ADDR *lowpc,
       attr = dwarf2_attr (die, DW_AT_ranges, cu);
       if (attr != NULL)
 	{
+	  unsigned int ranges_offset = DW_UNSND (attr) + cu->ranges_base;
+
 	  /* Value of the DW_AT_ranges attribute is the offset in the
 	     .debug_ranges section.  */
-	  if (!dwarf2_ranges_read (DW_UNSND (attr), &low, &high, cu, pst))
+	  if (!dwarf2_ranges_read (ranges_offset, &low, &high, cu, pst))
 	    return 0;
 	  /* Found discontinuous range of addresses.  */
 	  ret = -1;
@@ -6810,21 +9350,28 @@ get_scope_pc_bounds (struct die_info *die,
 
 /* Record the address ranges for BLOCK, offset by BASEADDR, as given
    in DIE.  */
+
 static void
 dwarf2_record_block_ranges (struct die_info *die, struct block *block,
                             CORE_ADDR baseaddr, struct dwarf2_cu *cu)
 {
+  struct objfile *objfile = cu->objfile;
   struct attribute *attr;
+  struct attribute *attr_high;
 
-  attr = dwarf2_attr (die, DW_AT_high_pc, cu);
-  if (attr)
+  attr_high = dwarf2_attr (die, DW_AT_high_pc, cu);
+  if (attr_high)
     {
-      CORE_ADDR high = DW_ADDR (attr);
-
       attr = dwarf2_attr (die, DW_AT_low_pc, cu);
       if (attr)
         {
           CORE_ADDR low = DW_ADDR (attr);
+	  CORE_ADDR high;
+	  if (attr_high->form == DW_FORM_addr
+	      || attr_high->form == DW_FORM_GNU_addr_index)
+	    high = DW_ADDR (attr_high);
+	  else
+	    high = low + DW_UNSND (attr_high);
 
           record_block_range (block, baseaddr + low, baseaddr + high - 1);
         }
@@ -6833,11 +9380,11 @@ dwarf2_record_block_ranges (struct die_info *die, struct block *block,
   attr = dwarf2_attr (die, DW_AT_ranges, cu);
   if (attr)
     {
-      bfd *obfd = cu->objfile->obfd;
+      bfd *obfd = objfile->obfd;
 
       /* The value of the DW_AT_ranges attribute is the offset of the
          address range list in the .debug_ranges section.  */
-      unsigned long offset = DW_UNSND (attr);
+      unsigned long offset = DW_UNSND (attr) + cu->ranges_base;
       gdb_byte *buffer = dwarf2_per_objfile->ranges.buffer + offset;
 
       /* For some target architectures, but not others, the
@@ -6919,12 +9466,11 @@ dwarf2_record_block_ranges (struct die_info *die, struct block *block,
     }
 }
 
-/* Check for GCC PR debug/45124 fix which is not present in any G++ version up
-   to 4.5.any while it is present already in G++ 4.6.0 - the PR has been fixed
-   during 4.6.0 experimental.  */
+/* Check whether the producer field indicates either of GCC < 4.6, or the
+   Intel C/C++ compiler, and cache the result in CU.  */
 
-static int
-producer_is_gxx_lt_4_6 (struct dwarf2_cu *cu)
+static void
+check_producer (struct dwarf2_cu *cu)
 {
   const char *cs;
   int major, minor, release;
@@ -6939,30 +9485,43 @@ producer_is_gxx_lt_4_6 (struct dwarf2_cu *cu)
 	 for their space efficiency GDB cannot workaround gcc-4.5.x -gdwarf-4
 	 combination.  gcc-4.5.x -gdwarf-4 binaries have DW_AT_accessibility
 	 interpreted incorrectly by GDB now - GCC PR debug/48229.  */
-
-      return 0;
     }
-
-  /* Skip any identifier after "GNU " - such as "C++" or "Java".  */
-
-  if (strncmp (cu->producer, "GNU ", strlen ("GNU ")) != 0)
+  else if (strncmp (cu->producer, "GNU ", strlen ("GNU ")) == 0)
     {
-      /* For non-GCC compilers expect their behavior is DWARF version
-	 compliant.  */
+      /* Skip any identifier after "GNU " - such as "C++" or "Java".  */
 
-      return 0;
+      cs = &cu->producer[strlen ("GNU ")];
+      while (*cs && !isdigit (*cs))
+	cs++;
+      if (sscanf (cs, "%d.%d.%d", &major, &minor, &release) != 3)
+	{
+	  /* Not recognized as GCC.  */
+	}
+      else
+	cu->producer_is_gxx_lt_4_6 = major < 4 || (major == 4 && minor < 6);
     }
-  cs = &cu->producer[strlen ("GNU ")];
-  while (*cs && !isdigit (*cs))
-    cs++;
-  if (sscanf (cs, "%d.%d.%d", &major, &minor, &release) != 3)
+  else if (strncmp (cu->producer, "Intel(R) C", strlen ("Intel(R) C")) == 0)
+    cu->producer_is_icc = 1;
+  else
     {
-      /* Not recognized as GCC.  */
-
-      return 0;
+      /* For other non-GCC compilers, expect their behavior is DWARF version
+	 compliant.  */
     }
 
-  return major < 4 || (major == 4 && minor < 6);
+  cu->checked_producer = 1;
+}
+
+/* Check for GCC PR debug/45124 fix which is not present in any G++ version up
+   to 4.5.any while it is present already in G++ 4.6.0 - the PR has been fixed
+   during 4.6.0 experimental.  */
+
+static int
+producer_is_gxx_lt_4_6 (struct dwarf2_cu *cu)
+{
+  if (!cu->checked_producer)
+    check_producer (cu);
+
+  return cu->producer_is_gxx_lt_4_6;
 }
 
 /* Return the default accessibility type if it is not overriden by
@@ -7110,7 +9669,7 @@ dwarf2_add_field (struct field_info *fip, struct die_info *die,
 	         anonymous object to the MSB of the field.  We don't
 	         have to do anything special since we don't need to
 	         know the size of the anonymous object.  */
-	      FIELD_BITPOS (*fp) += DW_UNSND (attr);
+	      SET_FIELD_BITPOS (*fp, FIELD_BITPOS (*fp) + DW_UNSND (attr));
 	    }
 	  else
 	    {
@@ -7139,8 +9698,10 @@ dwarf2_add_field (struct field_info *fip, struct die_info *die,
 		     bit field.  */
 		  anonymous_size = TYPE_LENGTH (fp->type);
 		}
-	      FIELD_BITPOS (*fp) += anonymous_size * bits_per_byte
-		- bit_offset - FIELD_BITSIZE (*fp);
+	      SET_FIELD_BITPOS (*fp,
+				(FIELD_BITPOS (*fp)
+				 + anonymous_size * bits_per_byte
+				 - bit_offset - FIELD_BITSIZE (*fp)));
 	    }
 	}
 
@@ -7540,7 +10101,7 @@ dwarf2_add_member_fn (struct field_info *fip, struct die_info *die,
 	  complaint (&symfile_complaints,
 		     _("Member function \"%s\" (offset %d) is virtual "
 		       "but the vtable offset is not specified"),
-		     fieldname, die->offset);
+		     fieldname, die->offset.sect_off);
 	  ALLOCATE_CPLUS_STRUCT_TYPE (type);
 	  TYPE_CPLUS_DYNAMIC (type) = 1;
 	}
@@ -7554,7 +10115,6 @@ dwarf2_attach_fn_fields_to_type (struct field_info *fip, struct type *type,
 				 struct dwarf2_cu *cu)
 {
   struct fnfieldlist *flp;
-  int total_length = 0;
   int i;
 
   if (cu->language == language_ada)
@@ -7576,12 +10136,9 @@ dwarf2_attach_fn_fields_to_type (struct field_info *fip, struct type *type,
 	TYPE_ALLOC (type, sizeof (struct fn_field) * flp->length);
       for (k = flp->length; (k--, nfp); nfp = nfp->next)
 	fn_flp->fn_fields[k] = nfp->fnfield;
-
-      total_length += flp->length;
     }
 
   TYPE_NFN_FIELDS (type) = fip->nfnfields;
-  TYPE_NFN_FIELDS_TOTAL (type) = total_length;
 }
 
 /* Returns non-zero if NAME is the name of a vtable member in CU's
@@ -7647,6 +10204,18 @@ quirk_gcc_member_function_pointer (struct type *type, struct objfile *objfile)
   smash_to_methodptr_type (type, new_type);
 }
 
+/* Return non-zero if the CU's PRODUCER string matches the Intel C/C++ compiler
+   (icc).  */
+
+static int
+producer_is_icc (struct dwarf2_cu *cu)
+{
+  if (!cu->checked_producer)
+    check_producer (cu);
+
+  return cu->producer_is_icc;
+}
+
 /* Called when we find the DIE that starts a structure or union scope
    (definition) to create a type for the structure or union.  Fill in
    the type's name and general properties; the members will not be
@@ -7675,7 +10244,7 @@ read_structure_type (struct die_info *die, struct dwarf2_cu *cu)
   /* If the definition of this type lives in .debug_types, read that type.
      Don't follow DW_AT_specification though, that will take us back up
      the chain and we want to go down.  */
-  attr = dwarf2_attr_no_follow (die, DW_AT_signature, cu);
+  attr = dwarf2_attr_no_follow (die, DW_AT_signature);
   if (attr)
     {
       struct dwarf2_cu *type_cu = cu;
@@ -7749,7 +10318,14 @@ read_structure_type (struct die_info *die, struct dwarf2_cu *cu)
       TYPE_LENGTH (type) = 0;
     }
 
-  TYPE_STUB_SUPPORTED (type) = 1;
+  if (producer_is_icc (cu))
+    {
+      /* ICC does not output the required DW_AT_declaration
+	 on incomplete types, but gives them a size of zero.  */
+    }
+  else
+    TYPE_STUB_SUPPORTED (type) = 1;
+
   if (die_is_declaration (die, cu))
     TYPE_STUB (type) = 1;
   else if (attr == NULL && die->child == NULL
@@ -7873,7 +10449,7 @@ process_structure_scope (struct die_info *die, struct dwarf2_cu *cu)
 		       i >= TYPE_N_BASECLASSES (t);
 		       --i)
 		    {
-		      char *fieldname = TYPE_FIELD_NAME (t, i);
+		      const char *fieldname = TYPE_FIELD_NAME (t, i);
 
                       if (is_vtable_name (fieldname, cu))
 			{
@@ -7948,7 +10524,7 @@ process_structure_scope (struct die_info *die, struct dwarf2_cu *cu)
 	TYPE_CPLUS_REALLY_JAVA (type) = cu->language == language_java;
     }
 
-  quirk_gcc_member_function_pointer (type, cu->objfile);
+  quirk_gcc_member_function_pointer (type, objfile);
 
   /* NOTE: carlton/2004-03-16: GCC 3.4 (or at least one of its
      snapshots) has been known to create a die giving a declaration
@@ -7995,7 +10571,7 @@ read_enumeration_type (struct die_info *die, struct dwarf2_cu *cu)
   /* If the definition of this type lives in .debug_types, read that type.
      Don't follow DW_AT_specification though, that will take us back up
      the chain and we want to go down.  */
-  attr = dwarf2_attr_no_follow (die, DW_AT_signature, cu);
+  attr = dwarf2_attr_no_follow (die, DW_AT_signature);
   if (attr)
     {
       struct dwarf2_cu *type_cu = cu;
@@ -8059,6 +10635,8 @@ process_enumeration_scope (struct die_info *die, struct dwarf2_cu *cu)
       int num_fields = 0;
       int unsigned_enum = 1;
       char *name;
+      int flag_enum = 1;
+      ULONGEST mask = 0;
 
       child_die = die->child;
       while (child_die && child_die->tag)
@@ -8074,7 +10652,14 @@ process_enumeration_scope (struct die_info *die, struct dwarf2_cu *cu)
 		{
 		  sym = new_symbol (child_die, this_type, cu);
 		  if (SYMBOL_VALUE (sym) < 0)
-		    unsigned_enum = 0;
+		    {
+		      unsigned_enum = 0;
+		      flag_enum = 0;
+		    }
+		  else if ((mask & SYMBOL_VALUE (sym)) != 0)
+		    flag_enum = 0;
+		  else
+		    mask |= SYMBOL_VALUE (sym);
 
 		  if ((num_fields % DW_FIELD_ALLOC_CHUNK) == 0)
 		    {
@@ -8086,7 +10671,7 @@ process_enumeration_scope (struct die_info *die, struct dwarf2_cu *cu)
 
 		  FIELD_NAME (fields[num_fields]) = SYMBOL_LINKAGE_NAME (sym);
 		  FIELD_TYPE (fields[num_fields]) = NULL;
-		  SET_FIELD_BITPOS (fields[num_fields], SYMBOL_VALUE (sym));
+		  SET_FIELD_ENUMVAL (fields[num_fields], SYMBOL_VALUE (sym));
 		  FIELD_BITSIZE (fields[num_fields]) = 0;
 
 		  num_fields++;
@@ -8107,6 +10692,8 @@ process_enumeration_scope (struct die_info *die, struct dwarf2_cu *cu)
 	}
       if (unsigned_enum)
 	TYPE_UNSIGNED (this_type) = 1;
+      if (flag_enum)
+	TYPE_FLAG_ENUM (this_type) = 1;
     }
 
   /* If we are reading an enum from a .debug_types unit, and the enum
@@ -8117,16 +10704,17 @@ process_enumeration_scope (struct die_info *die, struct dwarf2_cu *cu)
      actually available.  Note that we do not want to do this for all
      enums which are just declarations, because C++0x allows forward
      enum declarations.  */
-  if (cu->per_cu->debug_types_section
+  if (cu->per_cu->is_debug_types
       && die_is_declaration (die, cu))
     {
-      struct signatured_type *type_sig;
+      struct signatured_type *sig_type;
 
-      type_sig
+      sig_type
 	= lookup_signatured_type_at_offset (dwarf2_per_objfile->objfile,
-					    cu->per_cu->debug_types_section,
+					    cu->per_cu->info_or_types_section,
 					    cu->per_cu->offset);
-      if (type_sig->type_offset != die->offset)
+      gdb_assert (sig_type->type_offset_in_section.sect_off != 0);
+      if (sig_type->type_offset_in_section.sect_off != die->offset.sect_off)
 	return;
     }
 
@@ -8452,7 +11040,7 @@ read_module_type (struct die_info *die, struct dwarf2_cu *cu)
   if (!module_name)
     complaint (&symfile_complaints,
 	       _("DW_TAG_module has no name, offset 0x%x"),
-               die->offset);
+               die->offset.sect_off);
   type = init_type (TYPE_CODE_MODULE, 0, 0, module_name, objfile);
 
   /* determine_prefix uses TYPE_TAG_NAME.  */
@@ -8735,6 +11323,7 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu)
 static struct type *
 read_subroutine_type (struct die_info *die, struct dwarf2_cu *cu)
 {
+  struct objfile *objfile = cu->objfile;
   struct type *type;		/* Type that this function returns.  */
   struct type *ftype;		/* Function that returns above type.  */
   struct attribute *attr;
@@ -8780,7 +11369,7 @@ read_subroutine_type (struct die_info *die, struct dwarf2_cu *cu)
 
   if (die->child != NULL)
     {
-      struct type *void_type = objfile_type (cu->objfile)->builtin_void;
+      struct type *void_type = objfile_type (objfile)->builtin_void;
       struct die_info *child_die;
       int nparams, iparams;
 
@@ -8890,14 +11479,26 @@ read_typedef (struct die_info *die, struct dwarf2_cu *cu)
 {
   struct objfile *objfile = cu->objfile;
   const char *name = NULL;
-  struct type *this_type;
+  struct type *this_type, *target_type;
 
   name = dwarf2_full_name (NULL, die, cu);
   this_type = init_type (TYPE_CODE_TYPEDEF, 0,
 			 TYPE_FLAG_TARGET_STUB, NULL, objfile);
   TYPE_NAME (this_type) = (char *) name;
   set_die_type (die, this_type, cu);
-  TYPE_TARGET_TYPE (this_type) = die_type (die, cu);
+  target_type = die_type (die, cu);
+  if (target_type != this_type)
+    TYPE_TARGET_TYPE (this_type) = target_type;
+  else
+    {
+      /* Self-referential typedefs are, it seems, not allowed by the DWARF
+	 spec and cause infinite loops in GDB.  */
+      complaint (&symfile_complaints,
+		 _("Self-referential DW_TAG_typedef "
+		   "- DIE at 0x%x [in module %s]"),
+		 die->offset.sect_off, objfile->name);
+      TYPE_TARGET_TYPE (this_type) = NULL;
+    }
   return this_type;
 }
 
@@ -9006,8 +11607,8 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
   struct type *base_type;
   struct type *range_type;
   struct attribute *attr;
-  LONGEST low = 0;
-  LONGEST high = -1;
+  LONGEST low, high;
+  int low_default_is_valid;
   char *name;
   LONGEST negative_mask;
 
@@ -9020,10 +11621,35 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
   if (range_type)
     return range_type;
 
-  if (cu->language == language_fortran)
+  /* Set LOW_DEFAULT_IS_VALID if current language and DWARF version allow
+     omitting DW_AT_lower_bound.  */
+  switch (cu->language)
     {
-      /* FORTRAN implies a lower bound of 1, if not given.  */
+    case language_c:
+    case language_cplus:
+      low = 0;
+      low_default_is_valid = 1;
+      break;
+    case language_fortran:
+      low = 1;
+      low_default_is_valid = 1;
+      break;
+    case language_d:
+    case language_java:
+    case language_objc:
+      low = 0;
+      low_default_is_valid = (cu->header.version >= 4);
+      break;
+    case language_ada:
+    case language_m2:
+    case language_pascal:
       low = 1;
+      low_default_is_valid = (cu->header.version >= 4);
+      break;
+    default:
+      low = 0;
+      low_default_is_valid = 0;
+      break;
     }
 
   /* FIXME: For variable sized arrays either of these could be
@@ -9031,7 +11657,11 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
      but we don't know how to handle it.  */
   attr = dwarf2_attr (die, DW_AT_lower_bound, cu);
   if (attr)
-    low = dwarf2_get_attr_constant_value (attr, 0);
+    low = dwarf2_get_attr_constant_value (attr, low);
+  else if (!low_default_is_valid)
+    complaint (&symfile_complaints, _("Missing DW_AT_lower_bound "
+				      "- DIE at 0x%x [in module %s]"),
+	       die->offset.sect_off, cu->objfile->name);
 
   attr = dwarf2_attr (die, DW_AT_upper_bound, cu);
   if (attr)
@@ -9155,92 +11785,6 @@ read_unspecified_type (struct die_info *die, struct dwarf2_cu *cu)
   return set_die_type (die, type, cu);
 }
 
-/* Trivial hash function for die_info: the hash value of a DIE
-   is its offset in .debug_info for this objfile.  */
-
-static hashval_t
-die_hash (const void *item)
-{
-  const struct die_info *die = item;
-
-  return die->offset;
-}
-
-/* Trivial comparison function for die_info structures: two DIEs
-   are equal if they have the same offset.  */
-
-static int
-die_eq (const void *item_lhs, const void *item_rhs)
-{
-  const struct die_info *die_lhs = item_lhs;
-  const struct die_info *die_rhs = item_rhs;
-
-  return die_lhs->offset == die_rhs->offset;
-}
-
-/* Read a whole compilation unit into a linked list of dies.  */
-
-static struct die_info *
-read_comp_unit (gdb_byte *info_ptr, struct dwarf2_cu *cu)
-{
-  struct die_reader_specs reader_specs;
-  int read_abbrevs = 0;
-  struct cleanup *back_to = NULL;
-  struct die_info *die;
-
-  if (cu->dwarf2_abbrevs == NULL)
-    {
-      dwarf2_read_abbrevs (cu->objfile->obfd, cu);
-      back_to = make_cleanup (dwarf2_free_abbrev_table, cu);
-      read_abbrevs = 1;
-    }
-
-  gdb_assert (cu->die_hash == NULL);
-  cu->die_hash
-    = htab_create_alloc_ex (cu->header.length / 12,
-			    die_hash,
-			    die_eq,
-			    NULL,
-			    &cu->comp_unit_obstack,
-			    hashtab_obstack_allocate,
-			    dummy_obstack_deallocate);
-
-  init_cu_die_reader (&reader_specs, cu);
-
-  die = read_die_and_children (&reader_specs, info_ptr, &info_ptr, NULL);
-
-  if (read_abbrevs)
-    do_cleanups (back_to);
-
-  return die;
-}
-
-/* Main entry point for reading a DIE and all children.
-   Read the DIE and dump it if requested.  */
-
-static struct die_info *
-read_die_and_children (const struct die_reader_specs *reader,
-		       gdb_byte *info_ptr,
-		       gdb_byte **new_info_ptr,
-		       struct die_info *parent)
-{
-  struct die_info *result = read_die_and_children_1 (reader, info_ptr,
-						     new_info_ptr, parent);
-
-  if (dwarf2_die_debug)
-    {
-      fprintf_unfiltered (gdb_stdlog,
-			  "\nRead die from %s of %s:\n",
-			  (reader->cu->per_cu->debug_types_section
-			   ? ".debug_types"
-			   : ".debug_info"),
-			  reader->abfd->filename);
-      dump_die (result, dwarf2_die_debug);
-    }
-
-  return result;
-}
-
 /* Read a single die and all its descendents.  Set the die's sibling
    field to NULL; set other fields in the die correctly, and set all
    of the descendents' fields correctly.  Set *NEW_INFO_PTR to the
@@ -9248,10 +11792,10 @@ read_die_and_children (const struct die_reader_specs *reader,
    is the parent of the die in question.  */
 
 static struct die_info *
-read_die_and_children_1 (const struct die_reader_specs *reader,
-			 gdb_byte *info_ptr,
-			 gdb_byte **new_info_ptr,
-			 struct die_info *parent)
+read_die_and_children (const struct die_reader_specs *reader,
+		       gdb_byte *info_ptr,
+		       gdb_byte **new_info_ptr,
+		       struct die_info *parent)
 {
   struct die_info *die;
   gdb_byte *cur_ptr;
@@ -9297,7 +11841,7 @@ read_die_and_siblings (const struct die_reader_specs *reader,
   while (1)
     {
       struct die_info *die
-	= read_die_and_children_1 (reader, cur_ptr, &cur_ptr, parent);
+	= read_die_and_children (reader, cur_ptr, &cur_ptr, parent);
 
       if (die == NULL)
 	{
@@ -9314,23 +11858,27 @@ read_die_and_siblings (const struct die_reader_specs *reader,
     }
 }
 
-/* Read the die from the .debug_info section buffer.  Set DIEP to
-   point to a newly allocated die with its information, except for its
-   child, sibling, and parent fields.  Set HAS_CHILDREN to tell
-   whether the die has children or not.  */
+/* Read a die and all its attributes, leave space for NUM_EXTRA_ATTRS
+   attributes.
+   The caller is responsible for filling in the extra attributes
+   and updating (*DIEP)->num_attrs.
+   Set DIEP to point to a newly allocated die with its information,
+   except for its child, sibling, and parent fields.
+   Set HAS_CHILDREN to tell whether the die has children or not.  */
 
 static gdb_byte *
-read_full_die (const struct die_reader_specs *reader,
-	       struct die_info **diep, gdb_byte *info_ptr,
-	       int *has_children)
+read_full_die_1 (const struct die_reader_specs *reader,
+		 struct die_info **diep, gdb_byte *info_ptr,
+		 int *has_children, int num_extra_attrs)
 {
-  unsigned int abbrev_number, bytes_read, i, offset;
+  unsigned int abbrev_number, bytes_read, i;
+  sect_offset offset;
   struct abbrev_info *abbrev;
   struct die_info *die;
   struct dwarf2_cu *cu = reader->cu;
   bfd *abfd = reader->abfd;
 
-  offset = info_ptr - reader->buffer;
+  offset.sect_off = info_ptr - reader->buffer;
   abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
   info_ptr += bytes_read;
   if (!abbrev_number)
@@ -9340,56 +11888,127 @@ read_full_die (const struct die_reader_specs *reader,
       return info_ptr;
     }
 
-  abbrev = dwarf2_lookup_abbrev (abbrev_number, cu);
+  abbrev = abbrev_table_lookup_abbrev (cu->abbrev_table, abbrev_number);
   if (!abbrev)
     error (_("Dwarf Error: could not find abbrev number %d [in module %s]"),
 	   abbrev_number,
 	   bfd_get_filename (abfd));
 
-  die = dwarf_alloc_die (cu, abbrev->num_attrs);
+  die = dwarf_alloc_die (cu, abbrev->num_attrs + num_extra_attrs);
   die->offset = offset;
   die->tag = abbrev->tag;
   die->abbrev = abbrev_number;
 
+  /* Make the result usable.
+     The caller needs to update num_attrs after adding the extra
+     attributes.  */
   die->num_attrs = abbrev->num_attrs;
 
   for (i = 0; i < abbrev->num_attrs; ++i)
-    info_ptr = read_attribute (&die->attrs[i], &abbrev->attrs[i],
-			       abfd, info_ptr, cu);
+    info_ptr = read_attribute (reader, &die->attrs[i], &abbrev->attrs[i],
+			       info_ptr);
 
   *diep = die;
   *has_children = abbrev->has_children;
   return info_ptr;
 }
 
-/* In DWARF version 2, the description of the debugging information is
+/* Read a die and all its attributes.
+   Set DIEP to point to a newly allocated die with its information,
+   except for its child, sibling, and parent fields.
+   Set HAS_CHILDREN to tell whether the die has children or not.  */
+
+static gdb_byte *
+read_full_die (const struct die_reader_specs *reader,
+	       struct die_info **diep, gdb_byte *info_ptr,
+	       int *has_children)
+{
+  return read_full_die_1 (reader, diep, info_ptr, has_children, 0);
+}
+

+/* Abbreviation tables.
+
+   In DWARF version 2, the description of the debugging information is
    stored in a separate .debug_abbrev section.  Before we read any
    dies from a section we read in all abbreviations and install them
-   in a hash table.  This function also sets flags in CU describing
-   the data found in the abbrev table.  */
+   in a hash table.  */
+
+/* Allocate space for a struct abbrev_info object in ABBREV_TABLE.  */
+
+static struct abbrev_info *
+abbrev_table_alloc_abbrev (struct abbrev_table *abbrev_table)
+{
+  struct abbrev_info *abbrev;
+
+  abbrev = (struct abbrev_info *)
+    obstack_alloc (&abbrev_table->abbrev_obstack, sizeof (struct abbrev_info));
+  memset (abbrev, 0, sizeof (struct abbrev_info));
+  return abbrev;
+}
+
+/* Add an abbreviation to the table.  */
 
 static void
-dwarf2_read_abbrevs (bfd *abfd, struct dwarf2_cu *cu)
+abbrev_table_add_abbrev (struct abbrev_table *abbrev_table,
+			 unsigned int abbrev_number,
+			 struct abbrev_info *abbrev)
 {
-  struct comp_unit_head *cu_header = &cu->header;
+  unsigned int hash_number;
+
+  hash_number = abbrev_number % ABBREV_HASH_SIZE;
+  abbrev->next = abbrev_table->abbrevs[hash_number];
+  abbrev_table->abbrevs[hash_number] = abbrev;
+}
+
+/* Look up an abbrev in the table.
+   Returns NULL if the abbrev is not found.  */
+
+static struct abbrev_info *
+abbrev_table_lookup_abbrev (const struct abbrev_table *abbrev_table,
+			    unsigned int abbrev_number)
+{
+  unsigned int hash_number;
+  struct abbrev_info *abbrev;
+
+  hash_number = abbrev_number % ABBREV_HASH_SIZE;
+  abbrev = abbrev_table->abbrevs[hash_number];
+
+  while (abbrev)
+    {
+      if (abbrev->number == abbrev_number)
+	return abbrev;
+      abbrev = abbrev->next;
+    }
+  return NULL;
+}
+
+/* Read in an abbrev table.  */
+
+static struct abbrev_table *
+abbrev_table_read_table (struct dwarf2_section_info *section,
+			 sect_offset offset)
+{
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
+  bfd *abfd = section->asection->owner;
+  struct abbrev_table *abbrev_table;
   gdb_byte *abbrev_ptr;
   struct abbrev_info *cur_abbrev;
   unsigned int abbrev_number, bytes_read, abbrev_name;
-  unsigned int abbrev_form, hash_number;
+  unsigned int abbrev_form;
   struct attr_abbrev *cur_attrs;
   unsigned int allocated_attrs;
 
-  /* Initialize dwarf2 abbrevs.  */
-  obstack_init (&cu->abbrev_obstack);
-  cu->dwarf2_abbrevs = obstack_alloc (&cu->abbrev_obstack,
-				      (ABBREV_HASH_SIZE
-				       * sizeof (struct abbrev_info *)));
-  memset (cu->dwarf2_abbrevs, 0,
-          ABBREV_HASH_SIZE * sizeof (struct abbrev_info *));
-
-  dwarf2_read_section (dwarf2_per_objfile->objfile,
-		       &dwarf2_per_objfile->abbrev);
-  abbrev_ptr = dwarf2_per_objfile->abbrev.buffer + cu_header->abbrev_offset;
+  abbrev_table = XMALLOC (struct abbrev_table);
+  abbrev_table->offset = offset;
+  obstack_init (&abbrev_table->abbrev_obstack);
+  abbrev_table->abbrevs = obstack_alloc (&abbrev_table->abbrev_obstack,
+					 (ABBREV_HASH_SIZE
+					  * sizeof (struct abbrev_info *)));
+  memset (abbrev_table->abbrevs, 0,
+	  ABBREV_HASH_SIZE * sizeof (struct abbrev_info *));
+
+  dwarf2_read_section (objfile, section);
+  abbrev_ptr = section->buffer + offset.sect_off;
   abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
   abbrev_ptr += bytes_read;
 
@@ -9399,7 +12018,7 @@ dwarf2_read_abbrevs (bfd *abfd, struct dwarf2_cu *cu)
   /* Loop until we reach an abbrev number of 0.  */
   while (abbrev_number)
     {
-      cur_abbrev = dwarf_alloc_abbrev (cu);
+      cur_abbrev = abbrev_table_alloc_abbrev (abbrev_table);
 
       /* read in abbrev header */
       cur_abbrev->number = abbrev_number;
@@ -9408,9 +12027,6 @@ dwarf2_read_abbrevs (bfd *abfd, struct dwarf2_cu *cu)
       cur_abbrev->has_children = read_1_byte (abfd, abbrev_ptr);
       abbrev_ptr += 1;
 
-      if (cur_abbrev->tag == DW_TAG_namespace)
-	cu->has_namespace_info = 1;
-
       /* now read in declarations */
       abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
       abbrev_ptr += bytes_read;
@@ -9426,16 +12042,6 @@ dwarf2_read_abbrevs (bfd *abfd, struct dwarf2_cu *cu)
 					* sizeof (struct attr_abbrev)));
 	    }
 
-	  /* Record whether this compilation unit might have
-	     inter-compilation-unit references.  If we don't know what form
-	     this attribute will have, then it might potentially be a
-	     DW_FORM_ref_addr, so we conservatively expect inter-CU
-	     references.  */
-
-	  if (abbrev_form == DW_FORM_ref_addr
-	      || abbrev_form == DW_FORM_indirect)
-	    cu->has_form_ref_addr = 1;
-
 	  cur_attrs[cur_abbrev->num_attrs].name = abbrev_name;
 	  cur_attrs[cur_abbrev->num_attrs++].form = abbrev_form;
 	  abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
@@ -9444,15 +12050,13 @@ dwarf2_read_abbrevs (bfd *abfd, struct dwarf2_cu *cu)
 	  abbrev_ptr += bytes_read;
 	}
 
-      cur_abbrev->attrs = obstack_alloc (&cu->abbrev_obstack,
+      cur_abbrev->attrs = obstack_alloc (&abbrev_table->abbrev_obstack,
 					 (cur_abbrev->num_attrs
 					  * sizeof (struct attr_abbrev)));
       memcpy (cur_abbrev->attrs, cur_attrs,
 	      cur_abbrev->num_attrs * sizeof (struct attr_abbrev));
 
-      hash_number = abbrev_number % ABBREV_HASH_SIZE;
-      cur_abbrev->next = cu->dwarf2_abbrevs[hash_number];
-      cu->dwarf2_abbrevs[hash_number] = cur_abbrev;
+      abbrev_table_add_abbrev (abbrev_table, abbrev_number, cur_abbrev);
 
       /* Get next abbreviation.
          Under Irix6 the abbreviations for a compilation unit are not
@@ -9461,50 +12065,65 @@ dwarf2_read_abbrevs (bfd *abfd, struct dwarf2_cu *cu)
          already read (which means we are about to read the abbreviations
          for the next compile unit) or if the end of the abbreviation
          table is reached.  */
-      if ((unsigned int) (abbrev_ptr - dwarf2_per_objfile->abbrev.buffer)
-	  >= dwarf2_per_objfile->abbrev.size)
+      if ((unsigned int) (abbrev_ptr - section->buffer) >= section->size)
 	break;
       abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
       abbrev_ptr += bytes_read;
-      if (dwarf2_lookup_abbrev (abbrev_number, cu) != NULL)
+      if (abbrev_table_lookup_abbrev (abbrev_table, abbrev_number) != NULL)
 	break;
     }
 
   xfree (cur_attrs);
+  return abbrev_table;
 }
 
-/* Release the memory used by the abbrev table for a compilation unit.  */
+/* Free the resources held by ABBREV_TABLE.  */
 
 static void
-dwarf2_free_abbrev_table (void *ptr_to_cu)
+abbrev_table_free (struct abbrev_table *abbrev_table)
 {
-  struct dwarf2_cu *cu = ptr_to_cu;
-
-  obstack_free (&cu->abbrev_obstack, NULL);
-  cu->dwarf2_abbrevs = NULL;
+  obstack_free (&abbrev_table->abbrev_obstack, NULL);
+  xfree (abbrev_table);
 }
 
-/* Lookup an abbrev_info structure in the abbrev hash table.  */
+/* Same as abbrev_table_free but as a cleanup.
+   We pass in a pointer to the pointer to the table so that we can
+   set the pointer to NULL when we're done.  It also simplifies
+   build_type_unit_groups.  */
 
-static struct abbrev_info *
-dwarf2_lookup_abbrev (unsigned int number, struct dwarf2_cu *cu)
+static void
+abbrev_table_free_cleanup (void *table_ptr)
 {
-  unsigned int hash_number;
-  struct abbrev_info *abbrev;
+  struct abbrev_table **abbrev_table_ptr = table_ptr;
 
-  hash_number = number % ABBREV_HASH_SIZE;
-  abbrev = cu->dwarf2_abbrevs[hash_number];
+  if (*abbrev_table_ptr != NULL)
+    abbrev_table_free (*abbrev_table_ptr);
+  *abbrev_table_ptr = NULL;
+}
 
-  while (abbrev)
-    {
-      if (abbrev->number == number)
-	return abbrev;
-      else
-	abbrev = abbrev->next;
-    }
-  return NULL;
+/* Read the abbrev table for CU from ABBREV_SECTION.  */
+
+static void
+dwarf2_read_abbrevs (struct dwarf2_cu *cu,
+		     struct dwarf2_section_info *abbrev_section)
+{
+  cu->abbrev_table =
+    abbrev_table_read_table (abbrev_section, cu->header.abbrev_offset);
 }
 
+/* Release the memory used by the abbrev table for a compilation unit.  */
+
+static void
+dwarf2_free_abbrev_table (void *ptr_to_cu)
+{
+  struct dwarf2_cu *cu = ptr_to_cu;
+
+  abbrev_table_free (cu->abbrev_table);
+  /* Set this to NULL so that we SEGV if we try to read it later,
+     and also because free_comp_unit verifies this is NULL.  */
+  cu->abbrev_table = NULL;
+}
+

 /* Returns nonzero if TAG represents a type that we might generate a partial
    symbol for.  */
 
@@ -9540,21 +12159,23 @@ is_type_tag_for_partial (int tag)
 /* Load all DIEs that are interesting for partial symbols into memory.  */
 
 static struct partial_die_info *
-load_partial_dies (bfd *abfd, gdb_byte *buffer, gdb_byte *info_ptr,
-		   int building_psymtab, struct dwarf2_cu *cu)
+load_partial_dies (const struct die_reader_specs *reader,
+		   gdb_byte *info_ptr, int building_psymtab)
 {
+  struct dwarf2_cu *cu = reader->cu;
+  struct objfile *objfile = cu->objfile;
   struct partial_die_info *part_die;
   struct partial_die_info *parent_die, *last_die, *first_die = NULL;
   struct abbrev_info *abbrev;
   unsigned int bytes_read;
   unsigned int load_all = 0;
-
   int nesting_level = 1;
 
   parent_die = NULL;
   last_die = NULL;
 
-  if (cu->per_cu && cu->per_cu->load_all_dies)
+  gdb_assert (cu->per_cu != NULL);
+  if (cu->per_cu->load_all_dies)
     load_all = 1;
 
   cu->partial_dies
@@ -9604,20 +12225,19 @@ load_partial_dies (bfd *abfd, gdb_byte *buffer, gdb_byte *info_ptr,
 	  if (!load_all)
 	    {
 	      /* We don't need a partial DIE for the template argument.  */
-	      info_ptr = skip_one_die (buffer, info_ptr + bytes_read, abbrev,
-				       cu);
+	      info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev);
 	      continue;
 	    }
 	}
 
-      /* We only recurse into subprograms looking for template arguments.
+      /* We only recurse into c++ subprograms looking for template arguments.
 	 Skip their other children.  */
       if (!load_all
 	  && cu->language == language_cplus
 	  && parent_die != NULL
 	  && parent_die->tag == DW_TAG_subprogram)
 	{
-	  info_ptr = skip_one_die (buffer, info_ptr + bytes_read, abbrev, cu);
+	  info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev);
 	  continue;
 	}
 
@@ -9634,15 +12254,16 @@ load_partial_dies (bfd *abfd, gdb_byte *buffer, gdb_byte *info_ptr,
 	  && abbrev->tag != DW_TAG_variable
 	  && abbrev->tag != DW_TAG_namespace
 	  && abbrev->tag != DW_TAG_module
-	  && abbrev->tag != DW_TAG_member)
+	  && abbrev->tag != DW_TAG_member
+	  && abbrev->tag != DW_TAG_imported_unit)
 	{
 	  /* Otherwise we skip to the next sibling, if any.  */
-	  info_ptr = skip_one_die (buffer, info_ptr + bytes_read, abbrev, cu);
+	  info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev);
 	  continue;
 	}
 
-      info_ptr = read_partial_die (part_die, abbrev, bytes_read, abfd,
-				   buffer, info_ptr, cu);
+      info_ptr = read_partial_die (reader, part_die, abbrev, bytes_read,
+				   info_ptr);
 
       /* This two-pass algorithm for processing partial symbols has a
 	 high cost in cache pressure.  Thus, handle some simple cases
@@ -9670,9 +12291,9 @@ load_partial_dies (bfd *abfd, gdb_byte *buffer, gdb_byte *info_ptr,
 	  if (building_psymtab && part_die->name != NULL)
 	    add_psymbol_to_list (part_die->name, strlen (part_die->name), 0,
 				 VAR_DOMAIN, LOC_TYPEDEF,
-				 &cu->objfile->static_psymbols,
-				 0, (CORE_ADDR) 0, cu->language, cu->objfile);
-	  info_ptr = locate_pdi_sibling (part_die, buffer, info_ptr, abfd, cu);
+				 &objfile->static_psymbols,
+				 0, (CORE_ADDR) 0, cu->language, objfile);
+	  info_ptr = locate_pdi_sibling (reader, part_die, info_ptr);
 	  continue;
 	}
 
@@ -9688,7 +12309,7 @@ load_partial_dies (bfd *abfd, gdb_byte *buffer, gdb_byte *info_ptr,
 	complaint (&symfile_complaints,
 		   _("DW_TAG_typedef has childen - GCC PR debug/47510 bug "
 		     "- DIE at 0x%x [in module %s]"),
-		   part_die->offset, cu->objfile->name);
+		   part_die->offset.sect_off, objfile->name);
 
       /* If we're at the second level, and we're an enumerator, and
 	 our parent has no specification (meaning possibly lives in a
@@ -9708,11 +12329,11 @@ load_partial_dies (bfd *abfd, gdb_byte *buffer, gdb_byte *info_ptr,
 				 VAR_DOMAIN, LOC_CONST,
 				 (cu->language == language_cplus
 				  || cu->language == language_java)
-				 ? &cu->objfile->global_psymbols
-				 : &cu->objfile->static_psymbols,
-				 0, (CORE_ADDR) 0, cu->language, cu->objfile);
+				 ? &objfile->global_psymbols
+				 : &objfile->static_psymbols,
+				 0, (CORE_ADDR) 0, cu->language, objfile);
 
-	  info_ptr = locate_pdi_sibling (part_die, buffer, info_ptr, abfd, cu);
+	  info_ptr = locate_pdi_sibling (reader, part_die, info_ptr);
 	  continue;
 	}
 
@@ -9762,7 +12383,7 @@ load_partial_dies (bfd *abfd, gdb_byte *buffer, gdb_byte *info_ptr,
 	  void **slot;
 
 	  slot = htab_find_slot_with_hash (cu->partial_dies, part_die,
-					   part_die->offset, INSERT);
+					   part_die->offset.sect_off, INSERT);
 	  *slot = part_die;
 	}
 
@@ -9805,7 +12426,7 @@ load_partial_dies (bfd *abfd, gdb_byte *buffer, gdb_byte *info_ptr,
 	}
 
       /* Otherwise we skip to the next sibling, if any.  */
-      info_ptr = locate_pdi_sibling (last_die, buffer, info_ptr, abfd, cu);
+      info_ptr = locate_pdi_sibling (reader, last_die, info_ptr);
 
       /* Back to the top, do it again.  */
     }
@@ -9814,20 +12435,23 @@ load_partial_dies (bfd *abfd, gdb_byte *buffer, gdb_byte *info_ptr,
 /* Read a minimal amount of information into the minimal die structure.  */
 
 static gdb_byte *
-read_partial_die (struct partial_die_info *part_die,
-		  struct abbrev_info *abbrev,
-		  unsigned int abbrev_len, bfd *abfd,
-		  gdb_byte *buffer, gdb_byte *info_ptr,
-		  struct dwarf2_cu *cu)
+read_partial_die (const struct die_reader_specs *reader,
+		  struct partial_die_info *part_die,
+		  struct abbrev_info *abbrev, unsigned int abbrev_len,
+		  gdb_byte *info_ptr)
 {
+  struct dwarf2_cu *cu = reader->cu;
+  struct objfile *objfile = cu->objfile;
+  gdb_byte *buffer = reader->buffer;
   unsigned int i;
   struct attribute attr;
   int has_low_pc_attr = 0;
   int has_high_pc_attr = 0;
+  int high_pc_relative = 0;
 
   memset (part_die, 0, sizeof (struct partial_die_info));
 
-  part_die->offset = info_ptr - buffer;
+  part_die->offset.sect_off = info_ptr - buffer;
 
   info_ptr += abbrev_len;
 
@@ -9839,7 +12463,7 @@ read_partial_die (struct partial_die_info *part_die,
 
   for (i = 0; i < abbrev->num_attrs; ++i)
     {
-      info_ptr = read_attribute (&attr, &abbrev->attrs[i], abfd, info_ptr, cu);
+      info_ptr = read_attribute (reader, &attr, &abbrev->attrs[i], info_ptr);
 
       /* Store the data if it is of an attribute we want to keep in a
          partial symbol table.  */
@@ -9849,6 +12473,7 @@ read_partial_die (struct partial_die_info *part_die,
 	  switch (part_die->tag)
 	    {
 	    case DW_TAG_compile_unit:
+	    case DW_TAG_partial_unit:
 	    case DW_TAG_type_unit:
 	      /* Compilation units have a DW_AT_name that is a filename, not
 		 a source language identifier.  */
@@ -9861,7 +12486,7 @@ read_partial_die (struct partial_die_info *part_die,
 	    default:
 	      part_die->name
 		= dwarf2_canonicalize_name (DW_STRING (&attr), cu,
-					    &cu->objfile->objfile_obstack);
+					    &objfile->objfile_obstack);
 	      break;
 	    }
 	  break;
@@ -9880,13 +12505,20 @@ read_partial_die (struct partial_die_info *part_die,
 	  break;
 	case DW_AT_high_pc:
 	  has_high_pc_attr = 1;
-	  part_die->highpc = DW_ADDR (&attr);
+	  if (attr.form == DW_FORM_addr
+	      || attr.form == DW_FORM_GNU_addr_index)
+	    part_die->highpc = DW_ADDR (&attr);
+	  else
+	    {
+	      high_pc_relative = 1;
+	      part_die->highpc = DW_UNSND (&attr);
+	    }
 	  break;
 	case DW_AT_location:
           /* Support the .debug_loc offsets.  */
           if (attr_form_is_block (&attr))
             {
-	       part_die->locdesc = DW_BLOCK (&attr);
+	       part_die->d.locdesc = DW_BLOCK (&attr);
             }
           else if (attr_form_is_section_offset (&attr))
             {
@@ -9920,7 +12552,7 @@ read_partial_die (struct partial_die_info *part_die,
 	    complaint (&symfile_complaints,
 		       _("ignoring absolute DW_AT_sibling"));
 	  else
-	    part_die->sibling = buffer + dwarf2_get_ref_die_offset (&attr);
+	    part_die->sibling = buffer + dwarf2_get_ref_die_offset (&attr).sect_off;
 	  break;
         case DW_AT_byte_size:
           part_die->has_byte_size = 1;
@@ -9950,11 +12582,25 @@ read_partial_die (struct partial_die_info *part_die,
 	      language_of_main = language_fortran;
 	    }
 	  break;
+	case DW_AT_inline:
+	  if (DW_UNSND (&attr) == DW_INL_inlined
+	      || DW_UNSND (&attr) == DW_INL_declared_inlined)
+	    part_die->may_be_inlined = 1;
+	  break;
+
+	case DW_AT_import:
+	  if (part_die->tag == DW_TAG_imported_unit)
+	    part_die->d.offset = dwarf2_get_ref_die_offset (&attr);
+	  break;
+
 	default:
 	  break;
 	}
     }
 
+  if (high_pc_relative)
+    part_die->highpc += part_die->lowpc;
+
   if (has_low_pc_attr && has_high_pc_attr)
     {
       /* When using the GNU linker, .gnu.linkonce. sections are used to
@@ -9967,25 +12613,25 @@ read_partial_die (struct partial_die_info *part_die,
 	 so that GDB will ignore it.  */
       if (part_die->lowpc == 0 && !dwarf2_per_objfile->has_section_at_zero)
 	{
-	  struct gdbarch *gdbarch = get_objfile_arch (cu->objfile);
+	  struct gdbarch *gdbarch = get_objfile_arch (objfile);
 
 	  complaint (&symfile_complaints,
 		     _("DW_AT_low_pc %s is zero "
 		       "for DIE at 0x%x [in module %s]"),
 		     paddress (gdbarch, part_die->lowpc),
-		     part_die->offset, cu->objfile->name);
+		     part_die->offset.sect_off, objfile->name);
 	}
       /* dwarf2_get_pc_bounds has also the strict low < high requirement.  */
       else if (part_die->lowpc >= part_die->highpc)
 	{
-	  struct gdbarch *gdbarch = get_objfile_arch (cu->objfile);
+	  struct gdbarch *gdbarch = get_objfile_arch (objfile);
 
 	  complaint (&symfile_complaints,
 		     _("DW_AT_low_pc %s is not < DW_AT_high_pc %s "
 		       "for DIE at 0x%x [in module %s]"),
 		     paddress (gdbarch, part_die->lowpc),
 		     paddress (gdbarch, part_die->highpc),
-		     part_die->offset, cu->objfile->name);
+		     part_die->offset.sect_off, objfile->name);
 	}
       else
 	part_die->has_pc_info = 1;
@@ -9997,13 +12643,14 @@ read_partial_die (struct partial_die_info *part_die,
 /* Find a cached partial DIE at OFFSET in CU.  */
 
 static struct partial_die_info *
-find_partial_die_in_comp_unit (unsigned int offset, struct dwarf2_cu *cu)
+find_partial_die_in_comp_unit (sect_offset offset, struct dwarf2_cu *cu)
 {
   struct partial_die_info *lookup_die = NULL;
   struct partial_die_info part_die;
 
   part_die.offset = offset;
-  lookup_die = htab_find_with_hash (cu->partial_dies, &part_die, offset);
+  lookup_die = htab_find_with_hash (cu->partial_dies, &part_die,
+				    offset.sect_off);
 
   return lookup_die;
 }
@@ -10014,75 +12661,63 @@ find_partial_die_in_comp_unit (unsigned int offset, struct dwarf2_cu *cu)
    DW_FORM_ref_sig8).  */
 
 static struct partial_die_info *
-find_partial_die (unsigned int offset, struct dwarf2_cu *cu)
+find_partial_die (sect_offset offset, struct dwarf2_cu *cu)
 {
+  struct objfile *objfile = cu->objfile;
   struct dwarf2_per_cu_data *per_cu = NULL;
   struct partial_die_info *pd = NULL;
 
-  if (cu->per_cu->debug_types_section)
-    {
-      pd = find_partial_die_in_comp_unit (offset, cu);
-      if (pd != NULL)
-	return pd;
-      goto not_found;
-    }
-
   if (offset_in_cu_p (&cu->header, offset))
     {
       pd = find_partial_die_in_comp_unit (offset, cu);
       if (pd != NULL)
 	return pd;
+      /* We missed recording what we needed.
+	 Load all dies and try again.  */
+      per_cu = cu->per_cu;
     }
+  else
+    {
+      /* TUs don't reference other CUs/TUs (except via type signatures).  */
+      if (cu->per_cu->is_debug_types)
+	{
+	  error (_("Dwarf Error: Type Unit at offset 0x%lx contains"
+		   " external reference to offset 0x%lx [in module %s].\n"),
+		 (long) cu->header.offset.sect_off, (long) offset.sect_off,
+		 bfd_get_filename (objfile->obfd));
+	}
+      per_cu = dwarf2_find_containing_comp_unit (offset, objfile);
 
-  per_cu = dwarf2_find_containing_comp_unit (offset, cu->objfile);
+      if (per_cu->cu == NULL || per_cu->cu->partial_dies == NULL)
+	load_partial_comp_unit (per_cu);
 
-  if (per_cu->cu == NULL || per_cu->cu->partial_dies == NULL)
-    load_partial_comp_unit (per_cu, cu->objfile);
+      per_cu->cu->last_used = 0;
+      pd = find_partial_die_in_comp_unit (offset, per_cu->cu);
+    }
 
-  per_cu->cu->last_used = 0;
-  pd = find_partial_die_in_comp_unit (offset, per_cu->cu);
+  /* If we didn't find it, and not all dies have been loaded,
+     load them all and try again.  */
 
   if (pd == NULL && per_cu->load_all_dies == 0)
     {
-      struct cleanup *back_to;
-      struct partial_die_info comp_unit_die;
-      struct abbrev_info *abbrev;
-      unsigned int bytes_read;
-      char *info_ptr;
-
       per_cu->load_all_dies = 1;
 
-      /* Re-read the DIEs.  */
-      back_to = make_cleanup (null_cleanup, 0);
-      if (per_cu->cu->dwarf2_abbrevs == NULL)
-	{
-	  dwarf2_read_abbrevs (per_cu->cu->objfile->obfd, per_cu->cu);
-	  make_cleanup (dwarf2_free_abbrev_table, per_cu->cu);
-	}
-      info_ptr = (dwarf2_per_objfile->info.buffer
-		  + per_cu->cu->header.offset
-		  + per_cu->cu->header.first_die_offset);
-      abbrev = peek_die_abbrev (info_ptr, &bytes_read, per_cu->cu);
-      info_ptr = read_partial_die (&comp_unit_die, abbrev, bytes_read,
-				   per_cu->cu->objfile->obfd,
-				   dwarf2_per_objfile->info.buffer, info_ptr,
-				   per_cu->cu);
-      if (comp_unit_die.has_children)
-	load_partial_dies (per_cu->cu->objfile->obfd,
-			   dwarf2_per_objfile->info.buffer, info_ptr,
-			   0, per_cu->cu);
-      do_cleanups (back_to);
+      /* This is nasty.  When we reread the DIEs, somewhere up the call chain
+	 THIS_CU->cu may already be in use.  So we can't just free it and
+	 replace its DIEs with the ones we read in.  Instead, we leave those
+	 DIEs alone (which can still be in use, e.g. in scan_partial_symbols),
+	 and clobber THIS_CU->cu->partial_dies with the hash table for the new
+	 set.  */
+      load_partial_comp_unit (per_cu);
 
       pd = find_partial_die_in_comp_unit (offset, per_cu->cu);
     }
 
- not_found:
-
   if (pd == NULL)
     internal_error (__FILE__, __LINE__,
 		    _("could not find partial DIE 0x%x "
 		      "in cache [from module %s]\n"),
-		    offset, bfd_get_filename (cu->objfile->obfd));
+		    offset.sect_off, bfd_get_filename (objfile->obfd));
   return pd;
 }
 
@@ -10178,9 +12813,7 @@ fixup_partial_die (struct partial_die_info *part_die,
 
   /* If there is no parent die to provide a namespace, and there are
      children, see if we can determine the namespace from their linkage
-     name.
-     NOTE: We need to do this even if cu->has_namespace_info != 0.
-     gcc-4.5 -gdwarf-4 can drop the enclosing namespace.  */
+     name.  */
   if (cu->language == language_cplus
       && !VEC_empty (dwarf2_section_info_def, dwarf2_per_objfile->types)
       && part_die->die_parent == NULL
@@ -10226,10 +12859,12 @@ fixup_partial_die (struct partial_die_info *part_die,
 /* Read an attribute value described by an attribute form.  */
 
 static gdb_byte *
-read_attribute_value (struct attribute *attr, unsigned form,
-		      bfd *abfd, gdb_byte *info_ptr,
-		      struct dwarf2_cu *cu)
+read_attribute_value (const struct die_reader_specs *reader,
+		      struct attribute *attr, unsigned form,
+		      gdb_byte *info_ptr)
 {
+  struct dwarf2_cu *cu = reader->cu;
+  bfd *abfd = reader->abfd;
   struct comp_unit_head *cu_header = &cu->header;
   unsigned int bytes_read;
   struct dwarf_block *blk;
@@ -10239,10 +12874,10 @@ read_attribute_value (struct attribute *attr, unsigned form,
     {
     case DW_FORM_ref_addr:
       if (cu->header.version == 2)
-	DW_ADDR (attr) = read_address (abfd, info_ptr, cu, &bytes_read);
+	DW_UNSND (attr) = read_address (abfd, info_ptr, cu, &bytes_read);
       else
-	DW_ADDR (attr) = read_offset (abfd, info_ptr,
-				      &cu->header, &bytes_read);
+	DW_UNSND (attr) = read_offset (abfd, info_ptr,
+				       &cu->header, &bytes_read);
       info_ptr += bytes_read;
       break;
     case DW_FORM_addr:
@@ -10329,19 +12964,23 @@ read_attribute_value (struct attribute *attr, unsigned form,
       info_ptr += bytes_read;
       break;
     case DW_FORM_ref1:
-      DW_ADDR (attr) = cu->header.offset + read_1_byte (abfd, info_ptr);
+      DW_UNSND (attr) = (cu->header.offset.sect_off
+			 + read_1_byte (abfd, info_ptr));
       info_ptr += 1;
       break;
     case DW_FORM_ref2:
-      DW_ADDR (attr) = cu->header.offset + read_2_bytes (abfd, info_ptr);
+      DW_UNSND (attr) = (cu->header.offset.sect_off
+			 + read_2_bytes (abfd, info_ptr));
       info_ptr += 2;
       break;
     case DW_FORM_ref4:
-      DW_ADDR (attr) = cu->header.offset + read_4_bytes (abfd, info_ptr);
+      DW_UNSND (attr) = (cu->header.offset.sect_off
+			 + read_4_bytes (abfd, info_ptr));
       info_ptr += 4;
       break;
     case DW_FORM_ref8:
-      DW_ADDR (attr) = cu->header.offset + read_8_bytes (abfd, info_ptr);
+      DW_UNSND (attr) = (cu->header.offset.sect_off
+			 + read_8_bytes (abfd, info_ptr));
       info_ptr += 8;
       break;
     case DW_FORM_ref_sig8:
@@ -10349,18 +12988,48 @@ read_attribute_value (struct attribute *attr, unsigned form,
 	 for later lookup.
          NOTE: This is NULL if the type wasn't found.  */
       DW_SIGNATURED_TYPE (attr) =
-	lookup_signatured_type (cu->objfile, read_8_bytes (abfd, info_ptr));
+	lookup_signatured_type (read_8_bytes (abfd, info_ptr));
       info_ptr += 8;
       break;
     case DW_FORM_ref_udata:
-      DW_ADDR (attr) = (cu->header.offset
-			+ read_unsigned_leb128 (abfd, info_ptr, &bytes_read));
+      DW_UNSND (attr) = (cu->header.offset.sect_off
+			 + read_unsigned_leb128 (abfd, info_ptr, &bytes_read));
       info_ptr += bytes_read;
       break;
     case DW_FORM_indirect:
       form = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
       info_ptr += bytes_read;
-      info_ptr = read_attribute_value (attr, form, abfd, info_ptr, cu);
+      info_ptr = read_attribute_value (reader, attr, form, info_ptr);
+      break;
+    case DW_FORM_GNU_addr_index:
+      if (reader->dwo_file == NULL)
+	{
+	  /* For now flag a hard error.
+	     Later we can turn this into a complaint.  */
+	  error (_("Dwarf Error: %s found in non-DWO CU [in module %s]"),
+		 dwarf_form_name (form),
+		 bfd_get_filename (abfd));
+	}
+      DW_ADDR (attr) = read_addr_index_from_leb128 (cu, info_ptr, &bytes_read);
+      info_ptr += bytes_read;
+      break;
+    case DW_FORM_GNU_str_index:
+      if (reader->dwo_file == NULL)
+	{
+	  /* For now flag a hard error.
+	     Later we can turn this into a complaint if warranted.  */
+	  error (_("Dwarf Error: %s found in non-DWO CU [in module %s]"),
+		 dwarf_form_name (form),
+		 bfd_get_filename (abfd));
+	}
+      {
+	ULONGEST str_index =
+	  read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
+
+	DW_STRING (attr) = read_str_index (reader, cu, str_index);
+	DW_STRING_IS_CANONICAL (attr) = 0;
+	info_ptr += bytes_read;
+      }
       break;
     default:
       error (_("Dwarf Error: Cannot handle %s in DWARF reader [in module %s]"),
@@ -10391,11 +13060,12 @@ read_attribute_value (struct attribute *attr, unsigned form,
 /* Read an attribute described by an abbreviated attribute.  */
 
 static gdb_byte *
-read_attribute (struct attribute *attr, struct attr_abbrev *abbrev,
-		bfd *abfd, gdb_byte *info_ptr, struct dwarf2_cu *cu)
+read_attribute (const struct die_reader_specs *reader,
+		struct attribute *attr, struct attr_abbrev *abbrev,
+		gdb_byte *info_ptr)
 {
   attr->name = abbrev->name;
-  return read_attribute_value (attr, abbrev->form, abfd, info_ptr, cu);
+  return read_attribute_value (reader, attr, abbrev->form, info_ptr);
 }
 
 /* Read dwarf information from a buffer.  */
@@ -10673,10 +13343,10 @@ read_indirect_string (bfd *abfd, gdb_byte *buf,
   return read_indirect_string_at_offset (abfd, str_offset);
 }
 
-static unsigned long
+static ULONGEST
 read_unsigned_leb128 (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
 {
-  unsigned long result;
+  ULONGEST result;
   unsigned int num_read;
   int i, shift;
   unsigned char byte;
@@ -10690,7 +13360,7 @@ read_unsigned_leb128 (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
       byte = bfd_get_8 (abfd, buf);
       buf++;
       num_read++;
-      result |= ((unsigned long)(byte & 127) << shift);
+      result |= ((ULONGEST) (byte & 127) << shift);
       if ((byte & 128) == 0)
 	{
 	  break;
@@ -10701,10 +13371,10 @@ read_unsigned_leb128 (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
   return result;
 }
 
-static long
+static LONGEST
 read_signed_leb128 (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
 {
-  long result;
+  LONGEST result;
   int i, shift, num_read;
   unsigned char byte;
 
@@ -10717,7 +13387,7 @@ read_signed_leb128 (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
       byte = bfd_get_8 (abfd, buf);
       buf++;
       num_read++;
-      result |= ((long)(byte & 127) << shift);
+      result |= ((LONGEST) (byte & 127) << shift);
       shift += 7;
       if ((byte & 128) == 0)
 	{
@@ -10725,24 +13395,187 @@ read_signed_leb128 (bfd *abfd, gdb_byte *buf, unsigned int *bytes_read_ptr)
 	}
     }
   if ((shift < 8 * sizeof (result)) && (byte & 0x40))
-    result |= -(((long)1) << shift);
+    result |= -(((LONGEST) 1) << shift);
   *bytes_read_ptr = num_read;
   return result;
 }
 
-/* Return a pointer to just past the end of an LEB128 number in BUF.  */
+/* Given index ADDR_INDEX in .debug_addr, fetch the value.
+   ADDR_BASE is the DW_AT_GNU_addr_base attribute or zero.
+   ADDR_SIZE is the size of addresses from the CU header.  */
 
-static gdb_byte *
-skip_leb128 (bfd *abfd, gdb_byte *buf)
+static CORE_ADDR
+read_addr_index_1 (unsigned int addr_index, ULONGEST addr_base, int addr_size)
+{
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
+  bfd *abfd = objfile->obfd;
+  const gdb_byte *info_ptr;
+
+  dwarf2_read_section (objfile, &dwarf2_per_objfile->addr);
+  if (dwarf2_per_objfile->addr.buffer == NULL)
+    error (_("DW_FORM_addr_index used without .debug_addr section [in module %s]"),
+	   objfile->name);
+  if (addr_base + addr_index * addr_size >= dwarf2_per_objfile->addr.size)
+    error (_("DW_FORM_addr_index pointing outside of "
+	     ".debug_addr section [in module %s]"),
+	   objfile->name);
+  info_ptr = (dwarf2_per_objfile->addr.buffer
+	      + addr_base + addr_index * addr_size);
+  if (addr_size == 4)
+    return bfd_get_32 (abfd, info_ptr);
+  else
+    return bfd_get_64 (abfd, info_ptr);
+}
+
+/* Given index ADDR_INDEX in .debug_addr, fetch the value.  */
+
+static CORE_ADDR
+read_addr_index (struct dwarf2_cu *cu, unsigned int addr_index)
+{
+  return read_addr_index_1 (addr_index, cu->addr_base, cu->header.addr_size);
+}
+
+/* Given a pointer to an leb128 value, fetch the value from .debug_addr.  */
+
+static CORE_ADDR
+read_addr_index_from_leb128 (struct dwarf2_cu *cu, gdb_byte *info_ptr,
+			     unsigned int *bytes_read)
+{
+  bfd *abfd = cu->objfile->obfd;
+  unsigned int addr_index = read_unsigned_leb128 (abfd, info_ptr, bytes_read);
+
+  return read_addr_index (cu, addr_index);
+}
+
+/* Data structure to pass results from dwarf2_read_addr_index_reader
+   back to dwarf2_read_addr_index.  */
+
+struct dwarf2_read_addr_index_data
+{
+  ULONGEST addr_base;
+  int addr_size;
+};
+
+/* die_reader_func for dwarf2_read_addr_index.  */
+
+static void
+dwarf2_read_addr_index_reader (const struct die_reader_specs *reader,
+			       gdb_byte *info_ptr,
+			       struct die_info *comp_unit_die,
+			       int has_children,
+			       void *data)
+{
+  struct dwarf2_cu *cu = reader->cu;
+  struct dwarf2_read_addr_index_data *aidata =
+    (struct dwarf2_read_addr_index_data *) data;
+
+  aidata->addr_base = cu->addr_base;
+  aidata->addr_size = cu->header.addr_size;
+}
+
+/* Given an index in .debug_addr, fetch the value.
+   NOTE: This can be called during dwarf expression evaluation,
+   long after the debug information has been read, and thus per_cu->cu
+   may no longer exist.  */
+
+CORE_ADDR
+dwarf2_read_addr_index (struct dwarf2_per_cu_data *per_cu,
+			unsigned int addr_index)
+{
+  struct objfile *objfile = per_cu->objfile;
+  struct dwarf2_cu *cu = per_cu->cu;
+  ULONGEST addr_base;
+  int addr_size;
+
+  /* This is intended to be called from outside this file.  */
+  dw2_setup (objfile);
+
+  /* We need addr_base and addr_size.
+     If we don't have PER_CU->cu, we have to get it.
+     Nasty, but the alternative is storing the needed info in PER_CU,
+     which at this point doesn't seem justified: it's not clear how frequently
+     it would get used and it would increase the size of every PER_CU.
+     Entry points like dwarf2_per_cu_addr_size do a similar thing
+     so we're not in uncharted territory here.
+     Alas we need to be a bit more complicated as addr_base is contained
+     in the DIE.
+
+     We don't need to read the entire CU(/TU).
+     We just need the header and top level die.
+     IWBN to use the aging mechanism to let us lazily later discard the CU.
+     See however init_cutu_and_read_dies_simple.  */
+
+  if (cu != NULL)
+    {
+      addr_base = cu->addr_base;
+      addr_size = cu->header.addr_size;
+    }
+  else
+    {
+      struct dwarf2_read_addr_index_data aidata;
+
+      init_cutu_and_read_dies_simple (per_cu, dwarf2_read_addr_index_reader,
+				      &aidata);
+      addr_base = aidata.addr_base;
+      addr_size = aidata.addr_size;
+    }
+
+  return read_addr_index_1 (addr_index, addr_base, addr_size);
+}
+
+/* Given a DW_AT_str_index, fetch the string.  */
+
+static char *
+read_str_index (const struct die_reader_specs *reader,
+		struct dwarf2_cu *cu, ULONGEST str_index)
+{
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
+  const char *dwo_name = objfile->name;
+  bfd *abfd = objfile->obfd;
+  struct dwo_sections *sections = &reader->dwo_file->sections;
+  gdb_byte *info_ptr;
+  ULONGEST str_offset;
+
+  dwarf2_read_section (objfile, &sections->str);
+  dwarf2_read_section (objfile, &sections->str_offsets);
+  if (sections->str.buffer == NULL)
+    error (_("DW_FORM_str_index used without .debug_str.dwo section"
+	     " in CU at offset 0x%lx [in module %s]"),
+	   (long) cu->header.offset.sect_off, dwo_name);
+  if (sections->str_offsets.buffer == NULL)
+    error (_("DW_FORM_str_index used without .debug_str_offsets.dwo section"
+	     " in CU at offset 0x%lx [in module %s]"),
+	   (long) cu->header.offset.sect_off, dwo_name);
+  if (str_index * cu->header.offset_size >= sections->str_offsets.size)
+    error (_("DW_FORM_str_index pointing outside of .debug_str_offsets.dwo"
+	     " section in CU at offset 0x%lx [in module %s]"),
+	   (long) cu->header.offset.sect_off, dwo_name);
+  info_ptr = (sections->str_offsets.buffer
+	      + str_index * cu->header.offset_size);
+  if (cu->header.offset_size == 4)
+    str_offset = bfd_get_32 (abfd, info_ptr);
+  else
+    str_offset = bfd_get_64 (abfd, info_ptr);
+  if (str_offset >= sections->str.size)
+    error (_("Offset from DW_FORM_str_index pointing outside of"
+	     " .debug_str.dwo section in CU at offset 0x%lx [in module %s]"),
+	   (long) cu->header.offset.sect_off, dwo_name);
+  return (char *) (sections->str.buffer + str_offset);
+}
+
+/* Return the length of an LEB128 number in BUF.  */
+
+static int
+leb128_size (const gdb_byte *buf)
 {
-  int byte;
+  const gdb_byte *begin = buf;
+  gdb_byte byte;
 
   while (1)
     {
-      byte = bfd_get_8 (abfd, buf);
-      buf++;
+      byte = *buf++;
       if ((byte & 128) == 0)
-	return buf;
+	return buf - begin;
     }
 }
 
@@ -10767,6 +13600,9 @@ set_cu_language (unsigned int lang, struct dwarf2_cu *cu)
     case DW_LANG_Fortran95:
       cu->language = language_fortran;
       break;
+    case DW_LANG_Go:
+      cu->language = language_go;
+      break;
     case DW_LANG_Mips_Assembler:
       cu->language = language_asm;
       break;
@@ -10800,22 +13636,24 @@ set_cu_language (unsigned int lang, struct dwarf2_cu *cu)
 static struct attribute *
 dwarf2_attr (struct die_info *die, unsigned int name, struct dwarf2_cu *cu)
 {
-  unsigned int i;
-  struct attribute *spec = NULL;
-
-  for (i = 0; i < die->num_attrs; ++i)
+  for (;;)
     {
-      if (die->attrs[i].name == name)
-	return &die->attrs[i];
-      if (die->attrs[i].name == DW_AT_specification
-	  || die->attrs[i].name == DW_AT_abstract_origin)
-	spec = &die->attrs[i];
-    }
+      unsigned int i;
+      struct attribute *spec = NULL;
+
+      for (i = 0; i < die->num_attrs; ++i)
+	{
+	  if (die->attrs[i].name == name)
+	    return &die->attrs[i];
+	  if (die->attrs[i].name == DW_AT_specification
+	      || die->attrs[i].name == DW_AT_abstract_origin)
+	    spec = &die->attrs[i];
+	}
+
+      if (!spec)
+	break;
 
-  if (spec)
-    {
       die = follow_die_ref (die, spec, &cu);
-      return dwarf2_attr (die, name, cu);
     }
 
   return NULL;
@@ -10828,8 +13666,7 @@ dwarf2_attr (struct die_info *die, unsigned int name, struct dwarf2_cu *cu)
    back up the chain, and we want to go down.  */
 
 static struct attribute *
-dwarf2_attr_no_follow (struct die_info *die, unsigned int name,
-		       struct dwarf2_cu *cu)
+dwarf2_attr_no_follow (struct die_info *die, unsigned int name)
 {
   unsigned int i;
 
@@ -10968,16 +13805,15 @@ add_file_name (struct line_header *lh,
 }
 
 /* Read the statement program header starting at OFFSET in
-   .debug_line, according to the endianness of ABFD.  Return a pointer
+   .debug_line, or .debug_line.dwo.  Return a pointer
    to a struct line_header, allocated using xmalloc.
 
    NOTE: the strings in the include directory and file name tables of
-   the returned object point into debug_line_buffer, and must not be
-   freed.  */
+   the returned object point into the dwarf line section buffer,
+   and must not be freed.  */
 
 static struct line_header *
-dwarf_decode_line_header (unsigned int offset, bfd *abfd,
-			  struct dwarf2_cu *cu)
+dwarf_decode_line_header (unsigned int offset, struct dwarf2_cu *cu)
 {
   struct cleanup *back_to;
   struct line_header *lh;
@@ -10985,17 +13821,33 @@ dwarf_decode_line_header (unsigned int offset, bfd *abfd,
   unsigned int bytes_read, offset_size;
   int i;
   char *cur_dir, *cur_file;
+  struct dwarf2_section_info *section;
+  bfd *abfd;
+
+  /* For TUs in DWO files, the DW_AT_stmt_list attribute lives in the
+     DWO file.  */
+  if (cu->dwo_unit && cu->per_cu->is_debug_types)
+    section = &cu->dwo_unit->dwo_file->sections.line;
+  else
+    section = &dwarf2_per_objfile->line;
 
-  dwarf2_read_section (dwarf2_per_objfile->objfile, &dwarf2_per_objfile->line);
-  if (dwarf2_per_objfile->line.buffer == NULL)
+  dwarf2_read_section (dwarf2_per_objfile->objfile, section);
+  if (section->buffer == NULL)
     {
-      complaint (&symfile_complaints, _("missing .debug_line section"));
+      if (cu->dwo_unit && cu->per_cu->is_debug_types)
+	complaint (&symfile_complaints, _("missing .debug_line.dwo section"));
+      else
+	complaint (&symfile_complaints, _("missing .debug_line section"));
       return 0;
     }
 
+  /* We can't do this until we know the section is non-empty.
+     Only then do we know we have such a section.  */
+  abfd = section->asection->owner;
+
   /* Make sure that at least there's room for the total_length field.
      That could be 12 bytes long, but we're just going to fudge that.  */
-  if (offset + 4 >= dwarf2_per_objfile->line.size)
+  if (offset + 4 >= section->size)
     {
       dwarf2_statement_list_fits_in_line_number_section_complaint ();
       return 0;
@@ -11006,15 +13858,14 @@ dwarf_decode_line_header (unsigned int offset, bfd *abfd,
   back_to = make_cleanup ((make_cleanup_ftype *) free_line_header,
                           (void *) lh);
 
-  line_ptr = dwarf2_per_objfile->line.buffer + offset;
+  line_ptr = section->buffer + offset;
 
   /* Read in the header.  */
   lh->total_length =
     read_checked_initial_length_and_offset (abfd, line_ptr, &cu->header,
 					    &bytes_read, &offset_size);
   line_ptr += bytes_read;
-  if (line_ptr + lh->total_length > (dwarf2_per_objfile->line.buffer
-				     + dwarf2_per_objfile->line.size))
+  if (line_ptr + lh->total_length > (section->buffer + section->size))
     {
       dwarf2_statement_list_fits_in_line_number_section_complaint ();
       return 0;
@@ -11086,8 +13937,7 @@ dwarf_decode_line_header (unsigned int offset, bfd *abfd,
   line_ptr += bytes_read;
   lh->statement_program_start = line_ptr;
 
-  if (line_ptr > (dwarf2_per_objfile->line.buffer
-		  + dwarf2_per_objfile->line.size))
+  if (line_ptr > (section->buffer + section->size))
     complaint (&symfile_complaints,
 	       _("line number info header doesn't "
 		 "fit in `.debug_line' section"));
@@ -11096,52 +13946,6 @@ dwarf_decode_line_header (unsigned int offset, bfd *abfd,
   return lh;
 }
 
-/* This function exists to work around a bug in certain compilers
-   (particularly GCC 2.95), in which the first line number marker of a
-   function does not show up until after the prologue, right before
-   the second line number marker.  This function shifts ADDRESS down
-   to the beginning of the function if necessary, and is called on
-   addresses passed to record_line.  */
-
-static CORE_ADDR
-check_cu_functions (CORE_ADDR address, struct dwarf2_cu *cu)
-{
-  struct function_range *fn;
-
-  /* Find the function_range containing address.  */
-  if (!cu->first_fn)
-    return address;
-
-  if (!cu->cached_fn)
-    cu->cached_fn = cu->first_fn;
-
-  fn = cu->cached_fn;
-  while (fn)
-    if (fn->lowpc <= address && fn->highpc > address)
-      goto found;
-    else
-      fn = fn->next;
-
-  fn = cu->first_fn;
-  while (fn && fn != cu->cached_fn)
-    if (fn->lowpc <= address && fn->highpc > address)
-      goto found;
-    else
-      fn = fn->next;
-
-  return address;
-
- found:
-  if (fn->seen_line)
-    return address;
-  if (address != fn->lowpc)
-    complaint (&symfile_complaints,
-	       _("misplaced first line number at 0x%lx for '%s'"),
-	       (unsigned long) address, fn->name);
-  fn->seen_line = 1;
-  return fn->lowpc;
-}
-
 /* Subroutine of dwarf_decode_lines to simplify it.
    Return the file name of the psymtab for included file FILE_INDEX
    in line header LH of PST.
@@ -11321,8 +14125,7 @@ dwarf_decode_lines_1 (struct line_header *lh, const char *comp_dir,
 			  last_subfile = current_subfile;
 			}
 		      /* Append row to matrix using current values.  */
-		      addr = check_cu_functions (address, cu);
-		      addr = gdbarch_addr_bits_remove (gdbarch, addr);
+		      addr = gdbarch_addr_bits_remove (gdbarch, address);
 		      (*p_record_line) (current_subfile, line, addr);
 		    }
 		}
@@ -11357,7 +14160,7 @@ dwarf_decode_lines_1 (struct line_header *lh, const char *comp_dir,
 		      complaint (&symfile_complaints,
 				 _(".debug_line address at offset 0x%lx is 0 "
 				   "[in module %s]"),
-				 line_offset, cu->objfile->name);
+				 line_offset, objfile->name);
 		      p_record_line = noop_record_line;
 		    }
 
@@ -11420,8 +14223,7 @@ dwarf_decode_lines_1 (struct line_header *lh, const char *comp_dir,
 			    (*p_record_line) (last_subfile, 0, addr);
 			  last_subfile = current_subfile;
 			}
-		      addr = check_cu_functions (address, cu);
-		      addr = gdbarch_addr_bits_remove (gdbarch, addr);
+		      addr = gdbarch_addr_bits_remove (gdbarch, address);
 		      (*p_record_line) (current_subfile, line, addr);
 		    }
 		}
@@ -11601,7 +14403,7 @@ dwarf_decode_lines (struct line_header *lh, const char *comp_dir,
 
 	  if (current_subfile->symtab == NULL)
 	    current_subfile->symtab = allocate_symtab (current_subfile->name,
-						       cu->objfile);
+						       objfile);
 	  fe->symtab = current_subfile->symtab;
 	}
     }
@@ -11658,6 +14460,23 @@ dwarf2_start_subfile (char *filename, const char *dirname,
     xfree (fullname);
 }
 
+/* Start a symtab for DWARF.
+   NAME, COMP_DIR, LOW_PC are passed to start_symtab.  */
+
+static void
+dwarf2_start_symtab (struct dwarf2_cu *cu,
+		     char *name, char *comp_dir, CORE_ADDR low_pc)
+{
+  start_symtab (name, comp_dir, low_pc);
+  record_debugformat ("DWARF 2");
+  record_producer (cu->producer);
+
+  /* We assume that we're processing GCC output.  */
+  processing_gcc_compilation = 2;
+
+  processing_has_namespace_info = 0;
+}
+
 static void
 var_decode_location (struct attribute *attr, struct symbol *sym,
 		     struct dwarf2_cu *cu)
@@ -11685,17 +14504,24 @@ var_decode_location (struct attribute *attr, struct symbol *sym,
 
   /* Handle one degenerate form of location expression specially, to
      preserve GDB's previous behavior when section offsets are
-     specified.  If this is just a DW_OP_addr then mark this symbol
-     as LOC_STATIC.  */
+     specified.  If this is just a DW_OP_addr or DW_OP_GNU_addr_index
+     then mark this symbol as LOC_STATIC.  */
 
   if (attr_form_is_block (attr)
-      && DW_BLOCK (attr)->size == 1 + cu_header->addr_size
-      && DW_BLOCK (attr)->data[0] == DW_OP_addr)
+      && ((DW_BLOCK (attr)->data[0] == DW_OP_addr
+	   && DW_BLOCK (attr)->size == 1 + cu_header->addr_size)
+	  || (DW_BLOCK (attr)->data[0] == DW_OP_GNU_addr_index
+	      && (DW_BLOCK (attr)->size
+		  == 1 + leb128_size (&DW_BLOCK (attr)->data[1])))))
     {
       unsigned int dummy;
 
-      SYMBOL_VALUE_ADDRESS (sym) =
-	read_address (objfile->obfd, DW_BLOCK (attr)->data + 1, cu, &dummy);
+      if (DW_BLOCK (attr)->data[0] == DW_OP_addr)
+	SYMBOL_VALUE_ADDRESS (sym) =
+	  read_address (objfile->obfd, DW_BLOCK (attr)->data + 1, cu, &dummy);
+      else
+	SYMBOL_VALUE_ADDRESS (sym) =
+	  read_addr_index_from_leb128 (cu, DW_BLOCK (attr)->data + 1, &dummy);
       SYMBOL_CLASS (sym) = LOC_STATIC;
       fixup_symbol_section (sym, objfile);
       SYMBOL_VALUE_ADDRESS (sym) += ANOFFSET (objfile->section_offsets,
@@ -11841,8 +14667,7 @@ new_symbol_full (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
 	     finish_block.  */
 	  SYMBOL_CLASS (sym) = LOC_BLOCK;
 	  SYMBOL_INLINED (sym) = 1;
-	  /* Do not add the symbol to any lists.  It will be found via
-	     BLOCK_FUNCTION from the blockvector.  */
+	  list_to_add = cu->list_in_scope;
 	  break;
 	case DW_TAG_template_value_param:
 	  suppress_add = 1;
@@ -12097,7 +14922,7 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
 static gdb_byte *
 dwarf2_const_value_data (struct attribute *attr, struct type *type,
 			 const char *name, struct obstack *obstack,
-			 struct dwarf2_cu *cu, long *value, int bits)
+			 struct dwarf2_cu *cu, LONGEST *value, int bits)
 {
   struct objfile *objfile = cu->objfile;
   enum bfd_endian byte_order = bfd_big_endian (objfile->obfd) ?
@@ -12131,7 +14956,7 @@ static void
 dwarf2_const_value_attr (struct attribute *attr, struct type *type,
 			 const char *name, struct obstack *obstack,
 			 struct dwarf2_cu *cu,
-			 long *value, gdb_byte **bytes,
+			 LONGEST *value, gdb_byte **bytes,
 			 struct dwarf2_locexpr_baton **baton)
 {
   struct objfile *objfile = cu->objfile;
@@ -12147,6 +14972,7 @@ dwarf2_const_value_attr (struct attribute *attr, struct type *type,
   switch (attr->form)
     {
     case DW_FORM_addr:
+    case DW_FORM_GNU_addr_index:
       {
 	gdb_byte *data;
 
@@ -12174,6 +15000,7 @@ dwarf2_const_value_attr (struct attribute *attr, struct type *type,
       break;
     case DW_FORM_string:
     case DW_FORM_strp:
+    case DW_FORM_GNU_str_index:
       /* DW_STRING is already allocated on the objfile obstack, point
 	 directly to it.  */
       *bytes = (gdb_byte *) DW_STRING (attr);
@@ -12238,7 +15065,7 @@ dwarf2_const_value (struct attribute *attr, struct symbol *sym,
 {
   struct objfile *objfile = cu->objfile;
   struct comp_unit_head *cu_header = &cu->header;
-  long value;
+  LONGEST value;
   gdb_byte *bytes;
   struct dwarf2_locexpr_baton *baton;
 
@@ -12355,38 +15182,44 @@ static struct type *
 lookup_die_type (struct die_info *die, struct attribute *attr,
 		 struct dwarf2_cu *cu)
 {
+  struct objfile *objfile = cu->objfile;
   struct type *this_type;
 
   /* First see if we have it cached.  */
 
   if (is_ref_attr (attr))
     {
-      unsigned int offset = dwarf2_get_ref_die_offset (attr);
+      sect_offset offset = dwarf2_get_ref_die_offset (attr);
 
       this_type = get_die_type_at_offset (offset, cu->per_cu);
     }
   else if (attr->form == DW_FORM_ref_sig8)
     {
       struct signatured_type *sig_type = DW_SIGNATURED_TYPE (attr);
-      struct dwarf2_cu *sig_cu;
-      unsigned int offset;
 
       /* sig_type will be NULL if the signatured type is missing from
 	 the debug info.  */
       if (sig_type == NULL)
 	error (_("Dwarf Error: Cannot find signatured DIE referenced from DIE "
 		 "at 0x%x [in module %s]"),
-	       die->offset, cu->objfile->name);
+	       die->offset.sect_off, objfile->name);
 
-      gdb_assert (sig_type->per_cu.debug_types_section);
-      offset = sig_type->per_cu.offset + sig_type->type_offset;
-      this_type = get_die_type_at_offset (offset, &sig_type->per_cu);
+      gdb_assert (sig_type->per_cu.is_debug_types);
+      /* If we haven't filled in type_offset_in_section yet, then we
+	 haven't read the type in yet.  */
+      this_type = NULL;
+      if (sig_type->type_offset_in_section.sect_off != 0)
+	{
+	  this_type =
+	    get_die_type_at_offset (sig_type->type_offset_in_section,
+				    &sig_type->per_cu);
+	}
     }
   else
     {
       dump_die_for_error (die);
       error (_("Dwarf Error: Bad type attribute %s [in module %s]"),
-	     dwarf_attr_name (attr->name), cu->objfile->name);
+	     dwarf_attr_name (attr->name), objfile->name);
     }
 
   /* If not cached we need to read it in.  */
@@ -12397,9 +15230,12 @@ lookup_die_type (struct die_info *die, struct attribute *attr,
       struct dwarf2_cu *type_cu = cu;
 
       type_die = follow_die_ref_or_sig (die, attr, &type_cu);
-      /* If the type is cached, we should have found it above.  */
-      gdb_assert (get_die_type (type_die, type_cu) == NULL);
-      this_type = read_type_die_1 (type_die, type_cu);
+      /* If we found the type now, it's probably because the type came
+	 from an inter-CU reference and the type's CU got expanded before
+	 ours.  */
+      this_type = get_die_type (type_die, type_cu);
+      if (this_type == NULL)
+	this_type = read_type_die_1 (type_die, type_cu);
     }
 
   /* If we still don't have a type use an error marker.  */
@@ -12410,14 +15246,14 @@ lookup_die_type (struct die_info *die, struct attribute *attr,
 
       /* read_type_die already issued a complaint.  */
       message = xstrprintf (_("<unknown type in %s, CU 0x%x, DIE 0x%x>"),
-			    cu->objfile->name,
-			    cu->header.offset,
-			    die->offset);
-      saved = obstack_copy0 (&cu->objfile->objfile_obstack,
+			    objfile->name,
+			    cu->header.offset.sect_off,
+			    die->offset.sect_off);
+      saved = obstack_copy0 (&objfile->objfile_obstack,
 			     message, strlen (message));
       xfree (message);
 
-      this_type = init_type (TYPE_CODE_ERROR, 0, 0, saved, cu->objfile);
+      this_type = init_type (TYPE_CODE_ERROR, 0, 0, saved, objfile);
     }
 
   return this_type;
@@ -12642,7 +15478,7 @@ anonymous_struct_prefix (struct die_info *die, struct dwarf2_cu *cu)
 
    then determine_prefix on foo's die will return "N::C".  */
 
-static char *
+static const char *
 determine_prefix (struct die_info *die, struct dwarf2_cu *cu)
 {
   struct die_info *parent, *spec_die;
@@ -12759,6 +15595,7 @@ determine_prefix (struct die_info *die, struct dwarf2_cu *cu)
 	     So it does not need a prefix.  */
 	  return "";
       case DW_TAG_compile_unit:
+      case DW_TAG_partial_unit:
 	/* gcc-4.5 -gdwarf-4 can drop the enclosing namespace.  Cope.  */
 	if (cu->language == language_cplus
 	    && !VEC_empty (dwarf2_section_info_def, dwarf2_per_objfile->types)
@@ -12879,6 +15716,7 @@ dwarf2_name (struct die_info *die, struct dwarf2_cu *cu)
   switch (die->tag)
     {
     case DW_TAG_compile_unit:
+    case DW_TAG_partial_unit:
       /* Compilation units have a DW_AT_name that is a filename, not
 	 a source language identifier.  */
     case DW_TAG_enumeration_type:
@@ -12912,7 +15750,8 @@ dwarf2_name (struct die_info *die, struct dwarf2_cu *cu)
 	      if (die->tag == DW_TAG_class_type)
 		return dwarf2_name (die, cu);
 	    }
-	  while (die->tag != DW_TAG_compile_unit);
+	  while (die->tag != DW_TAG_compile_unit
+		 && die->tag != DW_TAG_partial_unit);
 	}
       break;
 
@@ -13000,843 +15839,51 @@ dwarf2_extension (struct die_info *die, struct dwarf2_cu **ext_cu)
 
 /* Convert a DIE tag into its string name.  */
 
-static char *
+static const char *
 dwarf_tag_name (unsigned tag)
 {
-  switch (tag)
-    {
-    case DW_TAG_padding:
-      return "DW_TAG_padding";
-    case DW_TAG_array_type:
-      return "DW_TAG_array_type";
-    case DW_TAG_class_type:
-      return "DW_TAG_class_type";
-    case DW_TAG_entry_point:
-      return "DW_TAG_entry_point";
-    case DW_TAG_enumeration_type:
-      return "DW_TAG_enumeration_type";
-    case DW_TAG_formal_parameter:
-      return "DW_TAG_formal_parameter";
-    case DW_TAG_imported_declaration:
-      return "DW_TAG_imported_declaration";
-    case DW_TAG_label:
-      return "DW_TAG_label";
-    case DW_TAG_lexical_block:
-      return "DW_TAG_lexical_block";
-    case DW_TAG_member:
-      return "DW_TAG_member";
-    case DW_TAG_pointer_type:
-      return "DW_TAG_pointer_type";
-    case DW_TAG_reference_type:
-      return "DW_TAG_reference_type";
-    case DW_TAG_compile_unit:
-      return "DW_TAG_compile_unit";
-    case DW_TAG_string_type:
-      return "DW_TAG_string_type";
-    case DW_TAG_structure_type:
-      return "DW_TAG_structure_type";
-    case DW_TAG_subroutine_type:
-      return "DW_TAG_subroutine_type";
-    case DW_TAG_typedef:
-      return "DW_TAG_typedef";
-    case DW_TAG_union_type:
-      return "DW_TAG_union_type";
-    case DW_TAG_unspecified_parameters:
-      return "DW_TAG_unspecified_parameters";
-    case DW_TAG_variant:
-      return "DW_TAG_variant";
-    case DW_TAG_common_block:
-      return "DW_TAG_common_block";
-    case DW_TAG_common_inclusion:
-      return "DW_TAG_common_inclusion";
-    case DW_TAG_inheritance:
-      return "DW_TAG_inheritance";
-    case DW_TAG_inlined_subroutine:
-      return "DW_TAG_inlined_subroutine";
-    case DW_TAG_module:
-      return "DW_TAG_module";
-    case DW_TAG_ptr_to_member_type:
-      return "DW_TAG_ptr_to_member_type";
-    case DW_TAG_set_type:
-      return "DW_TAG_set_type";
-    case DW_TAG_subrange_type:
-      return "DW_TAG_subrange_type";
-    case DW_TAG_with_stmt:
-      return "DW_TAG_with_stmt";
-    case DW_TAG_access_declaration:
-      return "DW_TAG_access_declaration";
-    case DW_TAG_base_type:
-      return "DW_TAG_base_type";
-    case DW_TAG_catch_block:
-      return "DW_TAG_catch_block";
-    case DW_TAG_const_type:
-      return "DW_TAG_const_type";
-    case DW_TAG_constant:
-      return "DW_TAG_constant";
-    case DW_TAG_enumerator:
-      return "DW_TAG_enumerator";
-    case DW_TAG_file_type:
-      return "DW_TAG_file_type";
-    case DW_TAG_friend:
-      return "DW_TAG_friend";
-    case DW_TAG_namelist:
-      return "DW_TAG_namelist";
-    case DW_TAG_namelist_item:
-      return "DW_TAG_namelist_item";
-    case DW_TAG_packed_type:
-      return "DW_TAG_packed_type";
-    case DW_TAG_subprogram:
-      return "DW_TAG_subprogram";
-    case DW_TAG_template_type_param:
-      return "DW_TAG_template_type_param";
-    case DW_TAG_template_value_param:
-      return "DW_TAG_template_value_param";
-    case DW_TAG_thrown_type:
-      return "DW_TAG_thrown_type";
-    case DW_TAG_try_block:
-      return "DW_TAG_try_block";
-    case DW_TAG_variant_part:
-      return "DW_TAG_variant_part";
-    case DW_TAG_variable:
-      return "DW_TAG_variable";
-    case DW_TAG_volatile_type:
-      return "DW_TAG_volatile_type";
-    case DW_TAG_dwarf_procedure:
-      return "DW_TAG_dwarf_procedure";
-    case DW_TAG_restrict_type:
-      return "DW_TAG_restrict_type";
-    case DW_TAG_interface_type:
-      return "DW_TAG_interface_type";
-    case DW_TAG_namespace:
-      return "DW_TAG_namespace";
-    case DW_TAG_imported_module:
-      return "DW_TAG_imported_module";
-    case DW_TAG_unspecified_type:
-      return "DW_TAG_unspecified_type";
-    case DW_TAG_partial_unit:
-      return "DW_TAG_partial_unit";
-    case DW_TAG_imported_unit:
-      return "DW_TAG_imported_unit";
-    case DW_TAG_condition:
-      return "DW_TAG_condition";
-    case DW_TAG_shared_type:
-      return "DW_TAG_shared_type";
-    case DW_TAG_type_unit:
-      return "DW_TAG_type_unit";
-    case DW_TAG_MIPS_loop:
-      return "DW_TAG_MIPS_loop";
-    case DW_TAG_HP_array_descriptor:
-      return "DW_TAG_HP_array_descriptor";
-    case DW_TAG_format_label:
-      return "DW_TAG_format_label";
-    case DW_TAG_function_template:
-      return "DW_TAG_function_template";
-    case DW_TAG_class_template:
-      return "DW_TAG_class_template";
-    case DW_TAG_GNU_BINCL:
-      return "DW_TAG_GNU_BINCL";
-    case DW_TAG_GNU_EINCL:
-      return "DW_TAG_GNU_EINCL";
-    case DW_TAG_upc_shared_type:
-      return "DW_TAG_upc_shared_type";
-    case DW_TAG_upc_strict_type:
-      return "DW_TAG_upc_strict_type";
-    case DW_TAG_upc_relaxed_type:
-      return "DW_TAG_upc_relaxed_type";
-    case DW_TAG_PGI_kanji_type:
-      return "DW_TAG_PGI_kanji_type";
-    case DW_TAG_PGI_interface_block:
-      return "DW_TAG_PGI_interface_block";
-    case DW_TAG_GNU_call_site:
-      return "DW_TAG_GNU_call_site";
-    default:
-      return "DW_TAG_<unknown>";
-    }
+  const char *name = get_DW_TAG_name (tag);
+
+  if (name == NULL)
+    return "DW_TAG_<unknown>";
+
+  return name;
 }
 
 /* Convert a DWARF attribute code into its string name.  */
 
-static char *
+static const char *
 dwarf_attr_name (unsigned attr)
 {
-  switch (attr)
-    {
-    case DW_AT_sibling:
-      return "DW_AT_sibling";
-    case DW_AT_location:
-      return "DW_AT_location";
-    case DW_AT_name:
-      return "DW_AT_name";
-    case DW_AT_ordering:
-      return "DW_AT_ordering";
-    case DW_AT_subscr_data:
-      return "DW_AT_subscr_data";
-    case DW_AT_byte_size:
-      return "DW_AT_byte_size";
-    case DW_AT_bit_offset:
-      return "DW_AT_bit_offset";
-    case DW_AT_bit_size:
-      return "DW_AT_bit_size";
-    case DW_AT_element_list:
-      return "DW_AT_element_list";
-    case DW_AT_stmt_list:
-      return "DW_AT_stmt_list";
-    case DW_AT_low_pc:
-      return "DW_AT_low_pc";
-    case DW_AT_high_pc:
-      return "DW_AT_high_pc";
-    case DW_AT_language:
-      return "DW_AT_language";
-    case DW_AT_member:
-      return "DW_AT_member";
-    case DW_AT_discr:
-      return "DW_AT_discr";
-    case DW_AT_discr_value:
-      return "DW_AT_discr_value";
-    case DW_AT_visibility:
-      return "DW_AT_visibility";
-    case DW_AT_import:
-      return "DW_AT_import";
-    case DW_AT_string_length:
-      return "DW_AT_string_length";
-    case DW_AT_common_reference:
-      return "DW_AT_common_reference";
-    case DW_AT_comp_dir:
-      return "DW_AT_comp_dir";
-    case DW_AT_const_value:
-      return "DW_AT_const_value";
-    case DW_AT_containing_type:
-      return "DW_AT_containing_type";
-    case DW_AT_default_value:
-      return "DW_AT_default_value";
-    case DW_AT_inline:
-      return "DW_AT_inline";
-    case DW_AT_is_optional:
-      return "DW_AT_is_optional";
-    case DW_AT_lower_bound:
-      return "DW_AT_lower_bound";
-    case DW_AT_producer:
-      return "DW_AT_producer";
-    case DW_AT_prototyped:
-      return "DW_AT_prototyped";
-    case DW_AT_return_addr:
-      return "DW_AT_return_addr";
-    case DW_AT_start_scope:
-      return "DW_AT_start_scope";
-    case DW_AT_bit_stride:
-      return "DW_AT_bit_stride";
-    case DW_AT_upper_bound:
-      return "DW_AT_upper_bound";
-    case DW_AT_abstract_origin:
-      return "DW_AT_abstract_origin";
-    case DW_AT_accessibility:
-      return "DW_AT_accessibility";
-    case DW_AT_address_class:
-      return "DW_AT_address_class";
-    case DW_AT_artificial:
-      return "DW_AT_artificial";
-    case DW_AT_base_types:
-      return "DW_AT_base_types";
-    case DW_AT_calling_convention:
-      return "DW_AT_calling_convention";
-    case DW_AT_count:
-      return "DW_AT_count";
-    case DW_AT_data_member_location:
-      return "DW_AT_data_member_location";
-    case DW_AT_decl_column:
-      return "DW_AT_decl_column";
-    case DW_AT_decl_file:
-      return "DW_AT_decl_file";
-    case DW_AT_decl_line:
-      return "DW_AT_decl_line";
-    case DW_AT_declaration:
-      return "DW_AT_declaration";
-    case DW_AT_discr_list:
-      return "DW_AT_discr_list";
-    case DW_AT_encoding:
-      return "DW_AT_encoding";
-    case DW_AT_external:
-      return "DW_AT_external";
-    case DW_AT_frame_base:
-      return "DW_AT_frame_base";
-    case DW_AT_friend:
-      return "DW_AT_friend";
-    case DW_AT_identifier_case:
-      return "DW_AT_identifier_case";
-    case DW_AT_macro_info:
-      return "DW_AT_macro_info";
-    case DW_AT_namelist_items:
-      return "DW_AT_namelist_items";
-    case DW_AT_priority:
-      return "DW_AT_priority";
-    case DW_AT_segment:
-      return "DW_AT_segment";
-    case DW_AT_specification:
-      return "DW_AT_specification";
-    case DW_AT_static_link:
-      return "DW_AT_static_link";
-    case DW_AT_type:
-      return "DW_AT_type";
-    case DW_AT_use_location:
-      return "DW_AT_use_location";
-    case DW_AT_variable_parameter:
-      return "DW_AT_variable_parameter";
-    case DW_AT_virtuality:
-      return "DW_AT_virtuality";
-    case DW_AT_vtable_elem_location:
-      return "DW_AT_vtable_elem_location";
-    /* DWARF 3 values.  */
-    case DW_AT_allocated:
-      return "DW_AT_allocated";
-    case DW_AT_associated:
-      return "DW_AT_associated";
-    case DW_AT_data_location:
-      return "DW_AT_data_location";
-    case DW_AT_byte_stride:
-      return "DW_AT_byte_stride";
-    case DW_AT_entry_pc:
-      return "DW_AT_entry_pc";
-    case DW_AT_use_UTF8:
-      return "DW_AT_use_UTF8";
-    case DW_AT_extension:
-      return "DW_AT_extension";
-    case DW_AT_ranges:
-      return "DW_AT_ranges";
-    case DW_AT_trampoline:
-      return "DW_AT_trampoline";
-    case DW_AT_call_column:
-      return "DW_AT_call_column";
-    case DW_AT_call_file:
-      return "DW_AT_call_file";
-    case DW_AT_call_line:
-      return "DW_AT_call_line";
-    case DW_AT_description:
-      return "DW_AT_description";
-    case DW_AT_binary_scale:
-      return "DW_AT_binary_scale";
-    case DW_AT_decimal_scale:
-      return "DW_AT_decimal_scale";
-    case DW_AT_small:
-      return "DW_AT_small";
-    case DW_AT_decimal_sign:
-      return "DW_AT_decimal_sign";
-    case DW_AT_digit_count:
-      return "DW_AT_digit_count";
-    case DW_AT_picture_string:
-      return "DW_AT_picture_string";
-    case DW_AT_mutable:
-      return "DW_AT_mutable";
-    case DW_AT_threads_scaled:
-      return "DW_AT_threads_scaled";
-    case DW_AT_explicit:
-      return "DW_AT_explicit";
-    case DW_AT_object_pointer:
-      return "DW_AT_object_pointer";
-    case DW_AT_endianity:
-      return "DW_AT_endianity";
-    case DW_AT_elemental:
-      return "DW_AT_elemental";
-    case DW_AT_pure:
-      return "DW_AT_pure";
-    case DW_AT_recursive:
-      return "DW_AT_recursive";
-    /* DWARF 4 values.  */
-    case DW_AT_signature:
-      return "DW_AT_signature";
-    case DW_AT_linkage_name:
-      return "DW_AT_linkage_name";
-    /* SGI/MIPS extensions.  */
+  const char *name;
+
 #ifdef MIPS /* collides with DW_AT_HP_block_index */
-    case DW_AT_MIPS_fde:
-      return "DW_AT_MIPS_fde";
-#endif
-    case DW_AT_MIPS_loop_begin:
-      return "DW_AT_MIPS_loop_begin";
-    case DW_AT_MIPS_tail_loop_begin:
-      return "DW_AT_MIPS_tail_loop_begin";
-    case DW_AT_MIPS_epilog_begin:
-      return "DW_AT_MIPS_epilog_begin";
-    case DW_AT_MIPS_loop_unroll_factor:
-      return "DW_AT_MIPS_loop_unroll_factor";
-    case DW_AT_MIPS_software_pipeline_depth:
-      return "DW_AT_MIPS_software_pipeline_depth";
-    case DW_AT_MIPS_linkage_name:
-      return "DW_AT_MIPS_linkage_name";
-    case DW_AT_MIPS_stride:
-      return "DW_AT_MIPS_stride";
-    case DW_AT_MIPS_abstract_name:
-      return "DW_AT_MIPS_abstract_name";
-    case DW_AT_MIPS_clone_origin:
-      return "DW_AT_MIPS_clone_origin";
-    case DW_AT_MIPS_has_inlines:
-      return "DW_AT_MIPS_has_inlines";
-    /* HP extensions.  */
-#ifndef MIPS /* collides with DW_AT_MIPS_fde */
-    case DW_AT_HP_block_index:
-      return "DW_AT_HP_block_index";
+  if (attr == DW_AT_MIPS_fde)
+    return "DW_AT_MIPS_fde";
+#else
+  if (attr == DW_AT_HP_block_index)
+    return "DW_AT_HP_block_index";
 #endif
-    case DW_AT_HP_unmodifiable:
-      return "DW_AT_HP_unmodifiable";
-    case DW_AT_HP_actuals_stmt_list:
-      return "DW_AT_HP_actuals_stmt_list";
-    case DW_AT_HP_proc_per_section:
-      return "DW_AT_HP_proc_per_section";
-    case DW_AT_HP_raw_data_ptr:
-      return "DW_AT_HP_raw_data_ptr";
-    case DW_AT_HP_pass_by_reference:
-      return "DW_AT_HP_pass_by_reference";
-    case DW_AT_HP_opt_level:
-      return "DW_AT_HP_opt_level";
-    case DW_AT_HP_prof_version_id:
-      return "DW_AT_HP_prof_version_id";
-    case DW_AT_HP_opt_flags:
-      return "DW_AT_HP_opt_flags";
-    case DW_AT_HP_cold_region_low_pc:
-      return "DW_AT_HP_cold_region_low_pc";
-    case DW_AT_HP_cold_region_high_pc:
-      return "DW_AT_HP_cold_region_high_pc";
-    case DW_AT_HP_all_variables_modifiable:
-      return "DW_AT_HP_all_variables_modifiable";
-    case DW_AT_HP_linkage_name:
-      return "DW_AT_HP_linkage_name";
-    case DW_AT_HP_prof_flags:
-      return "DW_AT_HP_prof_flags";
-    /* GNU extensions.  */
-    case DW_AT_sf_names:
-      return "DW_AT_sf_names";
-    case DW_AT_src_info:
-      return "DW_AT_src_info";
-    case DW_AT_mac_info:
-      return "DW_AT_mac_info";
-    case DW_AT_src_coords:
-      return "DW_AT_src_coords";
-    case DW_AT_body_begin:
-      return "DW_AT_body_begin";
-    case DW_AT_body_end:
-      return "DW_AT_body_end";
-    case DW_AT_GNU_vector:
-      return "DW_AT_GNU_vector";
-    case DW_AT_GNU_odr_signature:
-      return "DW_AT_GNU_odr_signature";
-    /* VMS extensions.  */
-    case DW_AT_VMS_rtnbeg_pd_address:
-      return "DW_AT_VMS_rtnbeg_pd_address";
-    /* UPC extension.  */
-    case DW_AT_upc_threads_scaled:
-      return "DW_AT_upc_threads_scaled";
-    /* PGI (STMicroelectronics) extensions.  */
-    case DW_AT_PGI_lbase:
-      return "DW_AT_PGI_lbase";
-    case DW_AT_PGI_soffset:
-      return "DW_AT_PGI_soffset";
-    case DW_AT_PGI_lstride:
-      return "DW_AT_PGI_lstride";
-    default:
-      return "DW_AT_<unknown>";
-    }
-}
 
-/* Convert a DWARF value form code into its string name.  */
+  name = get_DW_AT_name (attr);
 
-static char *
-dwarf_form_name (unsigned form)
-{
-  switch (form)
-    {
-    case DW_FORM_addr:
-      return "DW_FORM_addr";
-    case DW_FORM_block2:
-      return "DW_FORM_block2";
-    case DW_FORM_block4:
-      return "DW_FORM_block4";
-    case DW_FORM_data2:
-      return "DW_FORM_data2";
-    case DW_FORM_data4:
-      return "DW_FORM_data4";
-    case DW_FORM_data8:
-      return "DW_FORM_data8";
-    case DW_FORM_string:
-      return "DW_FORM_string";
-    case DW_FORM_block:
-      return "DW_FORM_block";
-    case DW_FORM_block1:
-      return "DW_FORM_block1";
-    case DW_FORM_data1:
-      return "DW_FORM_data1";
-    case DW_FORM_flag:
-      return "DW_FORM_flag";
-    case DW_FORM_sdata:
-      return "DW_FORM_sdata";
-    case DW_FORM_strp:
-      return "DW_FORM_strp";
-    case DW_FORM_udata:
-      return "DW_FORM_udata";
-    case DW_FORM_ref_addr:
-      return "DW_FORM_ref_addr";
-    case DW_FORM_ref1:
-      return "DW_FORM_ref1";
-    case DW_FORM_ref2:
-      return "DW_FORM_ref2";
-    case DW_FORM_ref4:
-      return "DW_FORM_ref4";
-    case DW_FORM_ref8:
-      return "DW_FORM_ref8";
-    case DW_FORM_ref_udata:
-      return "DW_FORM_ref_udata";
-    case DW_FORM_indirect:
-      return "DW_FORM_indirect";
-    case DW_FORM_sec_offset:
-      return "DW_FORM_sec_offset";
-    case DW_FORM_exprloc:
-      return "DW_FORM_exprloc";
-    case DW_FORM_flag_present:
-      return "DW_FORM_flag_present";
-    case DW_FORM_ref_sig8:
-      return "DW_FORM_ref_sig8";
-    default:
-      return "DW_FORM_<unknown>";
-    }
-}
-
-/* Convert a DWARF stack opcode into its string name.  */
-
-const char *
-dwarf_stack_op_name (unsigned op)
-{
-  switch (op)
-    {
-    case DW_OP_addr:
-      return "DW_OP_addr";
-    case DW_OP_deref:
-      return "DW_OP_deref";
-    case DW_OP_const1u:
-      return "DW_OP_const1u";
-    case DW_OP_const1s:
-      return "DW_OP_const1s";
-    case DW_OP_const2u:
-      return "DW_OP_const2u";
-    case DW_OP_const2s:
-      return "DW_OP_const2s";
-    case DW_OP_const4u:
-      return "DW_OP_const4u";
-    case DW_OP_const4s:
-      return "DW_OP_const4s";
-    case DW_OP_const8u:
-      return "DW_OP_const8u";
-    case DW_OP_const8s:
-      return "DW_OP_const8s";
-    case DW_OP_constu:
-      return "DW_OP_constu";
-    case DW_OP_consts:
-      return "DW_OP_consts";
-    case DW_OP_dup:
-      return "DW_OP_dup";
-    case DW_OP_drop:
-      return "DW_OP_drop";
-    case DW_OP_over:
-      return "DW_OP_over";
-    case DW_OP_pick:
-      return "DW_OP_pick";
-    case DW_OP_swap:
-      return "DW_OP_swap";
-    case DW_OP_rot:
-      return "DW_OP_rot";
-    case DW_OP_xderef:
-      return "DW_OP_xderef";
-    case DW_OP_abs:
-      return "DW_OP_abs";
-    case DW_OP_and:
-      return "DW_OP_and";
-    case DW_OP_div:
-      return "DW_OP_div";
-    case DW_OP_minus:
-      return "DW_OP_minus";
-    case DW_OP_mod:
-      return "DW_OP_mod";
-    case DW_OP_mul:
-      return "DW_OP_mul";
-    case DW_OP_neg:
-      return "DW_OP_neg";
-    case DW_OP_not:
-      return "DW_OP_not";
-    case DW_OP_or:
-      return "DW_OP_or";
-    case DW_OP_plus:
-      return "DW_OP_plus";
-    case DW_OP_plus_uconst:
-      return "DW_OP_plus_uconst";
-    case DW_OP_shl:
-      return "DW_OP_shl";
-    case DW_OP_shr:
-      return "DW_OP_shr";
-    case DW_OP_shra:
-      return "DW_OP_shra";
-    case DW_OP_xor:
-      return "DW_OP_xor";
-    case DW_OP_bra:
-      return "DW_OP_bra";
-    case DW_OP_eq:
-      return "DW_OP_eq";
-    case DW_OP_ge:
-      return "DW_OP_ge";
-    case DW_OP_gt:
-      return "DW_OP_gt";
-    case DW_OP_le:
-      return "DW_OP_le";
-    case DW_OP_lt:
-      return "DW_OP_lt";
-    case DW_OP_ne:
-      return "DW_OP_ne";
-    case DW_OP_skip:
-      return "DW_OP_skip";
-    case DW_OP_lit0:
-      return "DW_OP_lit0";
-    case DW_OP_lit1:
-      return "DW_OP_lit1";
-    case DW_OP_lit2:
-      return "DW_OP_lit2";
-    case DW_OP_lit3:
-      return "DW_OP_lit3";
-    case DW_OP_lit4:
-      return "DW_OP_lit4";
-    case DW_OP_lit5:
-      return "DW_OP_lit5";
-    case DW_OP_lit6:
-      return "DW_OP_lit6";
-    case DW_OP_lit7:
-      return "DW_OP_lit7";
-    case DW_OP_lit8:
-      return "DW_OP_lit8";
-    case DW_OP_lit9:
-      return "DW_OP_lit9";
-    case DW_OP_lit10:
-      return "DW_OP_lit10";
-    case DW_OP_lit11:
-      return "DW_OP_lit11";
-    case DW_OP_lit12:
-      return "DW_OP_lit12";
-    case DW_OP_lit13:
-      return "DW_OP_lit13";
-    case DW_OP_lit14:
-      return "DW_OP_lit14";
-    case DW_OP_lit15:
-      return "DW_OP_lit15";
-    case DW_OP_lit16:
-      return "DW_OP_lit16";
-    case DW_OP_lit17:
-      return "DW_OP_lit17";
-    case DW_OP_lit18:
-      return "DW_OP_lit18";
-    case DW_OP_lit19:
-      return "DW_OP_lit19";
-    case DW_OP_lit20:
-      return "DW_OP_lit20";
-    case DW_OP_lit21:
-      return "DW_OP_lit21";
-    case DW_OP_lit22:
-      return "DW_OP_lit22";
-    case DW_OP_lit23:
-      return "DW_OP_lit23";
-    case DW_OP_lit24:
-      return "DW_OP_lit24";
-    case DW_OP_lit25:
-      return "DW_OP_lit25";
-    case DW_OP_lit26:
-      return "DW_OP_lit26";
-    case DW_OP_lit27:
-      return "DW_OP_lit27";
-    case DW_OP_lit28:
-      return "DW_OP_lit28";
-    case DW_OP_lit29:
-      return "DW_OP_lit29";
-    case DW_OP_lit30:
-      return "DW_OP_lit30";
-    case DW_OP_lit31:
-      return "DW_OP_lit31";
-    case DW_OP_reg0:
-      return "DW_OP_reg0";
-    case DW_OP_reg1:
-      return "DW_OP_reg1";
-    case DW_OP_reg2:
-      return "DW_OP_reg2";
-    case DW_OP_reg3:
-      return "DW_OP_reg3";
-    case DW_OP_reg4:
-      return "DW_OP_reg4";
-    case DW_OP_reg5:
-      return "DW_OP_reg5";
-    case DW_OP_reg6:
-      return "DW_OP_reg6";
-    case DW_OP_reg7:
-      return "DW_OP_reg7";
-    case DW_OP_reg8:
-      return "DW_OP_reg8";
-    case DW_OP_reg9:
-      return "DW_OP_reg9";
-    case DW_OP_reg10:
-      return "DW_OP_reg10";
-    case DW_OP_reg11:
-      return "DW_OP_reg11";
-    case DW_OP_reg12:
-      return "DW_OP_reg12";
-    case DW_OP_reg13:
-      return "DW_OP_reg13";
-    case DW_OP_reg14:
-      return "DW_OP_reg14";
-    case DW_OP_reg15:
-      return "DW_OP_reg15";
-    case DW_OP_reg16:
-      return "DW_OP_reg16";
-    case DW_OP_reg17:
-      return "DW_OP_reg17";
-    case DW_OP_reg18:
-      return "DW_OP_reg18";
-    case DW_OP_reg19:
-      return "DW_OP_reg19";
-    case DW_OP_reg20:
-      return "DW_OP_reg20";
-    case DW_OP_reg21:
-      return "DW_OP_reg21";
-    case DW_OP_reg22:
-      return "DW_OP_reg22";
-    case DW_OP_reg23:
-      return "DW_OP_reg23";
-    case DW_OP_reg24:
-      return "DW_OP_reg24";
-    case DW_OP_reg25:
-      return "DW_OP_reg25";
-    case DW_OP_reg26:
-      return "DW_OP_reg26";
-    case DW_OP_reg27:
-      return "DW_OP_reg27";
-    case DW_OP_reg28:
-      return "DW_OP_reg28";
-    case DW_OP_reg29:
-      return "DW_OP_reg29";
-    case DW_OP_reg30:
-      return "DW_OP_reg30";
-    case DW_OP_reg31:
-      return "DW_OP_reg31";
-    case DW_OP_breg0:
-      return "DW_OP_breg0";
-    case DW_OP_breg1:
-      return "DW_OP_breg1";
-    case DW_OP_breg2:
-      return "DW_OP_breg2";
-    case DW_OP_breg3:
-      return "DW_OP_breg3";
-    case DW_OP_breg4:
-      return "DW_OP_breg4";
-    case DW_OP_breg5:
-      return "DW_OP_breg5";
-    case DW_OP_breg6:
-      return "DW_OP_breg6";
-    case DW_OP_breg7:
-      return "DW_OP_breg7";
-    case DW_OP_breg8:
-      return "DW_OP_breg8";
-    case DW_OP_breg9:
-      return "DW_OP_breg9";
-    case DW_OP_breg10:
-      return "DW_OP_breg10";
-    case DW_OP_breg11:
-      return "DW_OP_breg11";
-    case DW_OP_breg12:
-      return "DW_OP_breg12";
-    case DW_OP_breg13:
-      return "DW_OP_breg13";
-    case DW_OP_breg14:
-      return "DW_OP_breg14";
-    case DW_OP_breg15:
-      return "DW_OP_breg15";
-    case DW_OP_breg16:
-      return "DW_OP_breg16";
-    case DW_OP_breg17:
-      return "DW_OP_breg17";
-    case DW_OP_breg18:
-      return "DW_OP_breg18";
-    case DW_OP_breg19:
-      return "DW_OP_breg19";
-    case DW_OP_breg20:
-      return "DW_OP_breg20";
-    case DW_OP_breg21:
-      return "DW_OP_breg21";
-    case DW_OP_breg22:
-      return "DW_OP_breg22";
-    case DW_OP_breg23:
-      return "DW_OP_breg23";
-    case DW_OP_breg24:
-      return "DW_OP_breg24";
-    case DW_OP_breg25:
-      return "DW_OP_breg25";
-    case DW_OP_breg26:
-      return "DW_OP_breg26";
-    case DW_OP_breg27:
-      return "DW_OP_breg27";
-    case DW_OP_breg28:
-      return "DW_OP_breg28";
-    case DW_OP_breg29:
-      return "DW_OP_breg29";
-    case DW_OP_breg30:
-      return "DW_OP_breg30";
-    case DW_OP_breg31:
-      return "DW_OP_breg31";
-    case DW_OP_regx:
-      return "DW_OP_regx";
-    case DW_OP_fbreg:
-      return "DW_OP_fbreg";
-    case DW_OP_bregx:
-      return "DW_OP_bregx";
-    case DW_OP_piece:
-      return "DW_OP_piece";
-    case DW_OP_deref_size:
-      return "DW_OP_deref_size";
-    case DW_OP_xderef_size:
-      return "DW_OP_xderef_size";
-    case DW_OP_nop:
-      return "DW_OP_nop";
-    /* DWARF 3 extensions.  */
-    case DW_OP_push_object_address:
-      return "DW_OP_push_object_address";
-    case DW_OP_call2:
-      return "DW_OP_call2";
-    case DW_OP_call4:
-      return "DW_OP_call4";
-    case DW_OP_call_ref:
-      return "DW_OP_call_ref";
-    case DW_OP_form_tls_address:
-      return "DW_OP_form_tls_address";
-    case DW_OP_call_frame_cfa:
-      return "DW_OP_call_frame_cfa";
-    case DW_OP_bit_piece:
-      return "DW_OP_bit_piece";
-    /* DWARF 4 extensions.  */
-    case DW_OP_implicit_value:
-      return "DW_OP_implicit_value";
-    case DW_OP_stack_value:
-      return "DW_OP_stack_value";
-    /* GNU extensions.  */
-    case DW_OP_GNU_push_tls_address:
-      return "DW_OP_GNU_push_tls_address";
-    case DW_OP_GNU_uninit:
-      return "DW_OP_GNU_uninit";
-    case DW_OP_GNU_implicit_pointer:
-      return "DW_OP_GNU_implicit_pointer";
-    case DW_OP_GNU_entry_value:
-      return "DW_OP_GNU_entry_value";
-    case DW_OP_GNU_const_type:
-      return "DW_OP_GNU_const_type";
-    case DW_OP_GNU_regval_type:
-      return "DW_OP_GNU_regval_type";
-    case DW_OP_GNU_deref_type:
-      return "DW_OP_GNU_deref_type";
-    case DW_OP_GNU_convert:
-      return "DW_OP_GNU_convert";
-    case DW_OP_GNU_reinterpret:
-      return "DW_OP_GNU_reinterpret";
-    default:
-      return NULL;
-    }
+  if (name == NULL)
+    return "DW_AT_<unknown>";
+
+  return name;
+}
+
+/* Convert a DWARF value form code into its string name.  */
+
+static const char *
+dwarf_form_name (unsigned form)
+{
+  const char *name = get_DW_FORM_name (form);
+
+  if (name == NULL)
+    return "DW_FORM_<unknown>";
+
+  return name;
 }
 
 static char *
@@ -13850,143 +15897,16 @@ dwarf_bool_name (unsigned mybool)
 
 /* Convert a DWARF type code into its string name.  */
 
-static char *
+static const char *
 dwarf_type_encoding_name (unsigned enc)
 {
-  switch (enc)
-    {
-    case DW_ATE_void:
-      return "DW_ATE_void";
-    case DW_ATE_address:
-      return "DW_ATE_address";
-    case DW_ATE_boolean:
-      return "DW_ATE_boolean";
-    case DW_ATE_complex_float:
-      return "DW_ATE_complex_float";
-    case DW_ATE_float:
-      return "DW_ATE_float";
-    case DW_ATE_signed:
-      return "DW_ATE_signed";
-    case DW_ATE_signed_char:
-      return "DW_ATE_signed_char";
-    case DW_ATE_unsigned:
-      return "DW_ATE_unsigned";
-    case DW_ATE_unsigned_char:
-      return "DW_ATE_unsigned_char";
-    /* DWARF 3.  */
-    case DW_ATE_imaginary_float:
-      return "DW_ATE_imaginary_float";
-    case DW_ATE_packed_decimal:
-      return "DW_ATE_packed_decimal";
-    case DW_ATE_numeric_string:
-      return "DW_ATE_numeric_string";
-    case DW_ATE_edited:
-      return "DW_ATE_edited";
-    case DW_ATE_signed_fixed:
-      return "DW_ATE_signed_fixed";
-    case DW_ATE_unsigned_fixed:
-      return "DW_ATE_unsigned_fixed";
-    case DW_ATE_decimal_float:
-      return "DW_ATE_decimal_float";
-    /* DWARF 4.  */
-    case DW_ATE_UTF:
-      return "DW_ATE_UTF";
-    /* HP extensions.  */
-    case DW_ATE_HP_float80:
-      return "DW_ATE_HP_float80";
-    case DW_ATE_HP_complex_float80:
-      return "DW_ATE_HP_complex_float80";
-    case DW_ATE_HP_float128:
-      return "DW_ATE_HP_float128";
-    case DW_ATE_HP_complex_float128:
-      return "DW_ATE_HP_complex_float128";
-    case DW_ATE_HP_floathpintel:
-      return "DW_ATE_HP_floathpintel";
-    case DW_ATE_HP_imaginary_float80:
-      return "DW_ATE_HP_imaginary_float80";
-    case DW_ATE_HP_imaginary_float128:
-      return "DW_ATE_HP_imaginary_float128";
-    default:
-      return "DW_ATE_<unknown>";
-    }
-}
+  const char *name = get_DW_ATE_name (enc);
 
-/* Convert a DWARF call frame info operation to its string name.  */
+  if (name == NULL)
+    return "DW_ATE_<unknown>";
 
-#if 0
-static char *
-dwarf_cfi_name (unsigned cfi_opc)
-{
-  switch (cfi_opc)
-    {
-    case DW_CFA_advance_loc:
-      return "DW_CFA_advance_loc";
-    case DW_CFA_offset:
-      return "DW_CFA_offset";
-    case DW_CFA_restore:
-      return "DW_CFA_restore";
-    case DW_CFA_nop:
-      return "DW_CFA_nop";
-    case DW_CFA_set_loc:
-      return "DW_CFA_set_loc";
-    case DW_CFA_advance_loc1:
-      return "DW_CFA_advance_loc1";
-    case DW_CFA_advance_loc2:
-      return "DW_CFA_advance_loc2";
-    case DW_CFA_advance_loc4:
-      return "DW_CFA_advance_loc4";
-    case DW_CFA_offset_extended:
-      return "DW_CFA_offset_extended";
-    case DW_CFA_restore_extended:
-      return "DW_CFA_restore_extended";
-    case DW_CFA_undefined:
-      return "DW_CFA_undefined";
-    case DW_CFA_same_value:
-      return "DW_CFA_same_value";
-    case DW_CFA_register:
-      return "DW_CFA_register";
-    case DW_CFA_remember_state:
-      return "DW_CFA_remember_state";
-    case DW_CFA_restore_state:
-      return "DW_CFA_restore_state";
-    case DW_CFA_def_cfa:
-      return "DW_CFA_def_cfa";
-    case DW_CFA_def_cfa_register:
-      return "DW_CFA_def_cfa_register";
-    case DW_CFA_def_cfa_offset:
-      return "DW_CFA_def_cfa_offset";
-    /* DWARF 3.  */
-    case DW_CFA_def_cfa_expression:
-      return "DW_CFA_def_cfa_expression";
-    case DW_CFA_expression:
-      return "DW_CFA_expression";
-    case DW_CFA_offset_extended_sf:
-      return "DW_CFA_offset_extended_sf";
-    case DW_CFA_def_cfa_sf:
-      return "DW_CFA_def_cfa_sf";
-    case DW_CFA_def_cfa_offset_sf:
-      return "DW_CFA_def_cfa_offset_sf";
-    case DW_CFA_val_offset:
-      return "DW_CFA_val_offset";
-    case DW_CFA_val_offset_sf:
-      return "DW_CFA_val_offset_sf";
-    case DW_CFA_val_expression:
-      return "DW_CFA_val_expression";
-    /* SGI/MIPS specific.  */
-    case DW_CFA_MIPS_advance_loc8:
-      return "DW_CFA_MIPS_advance_loc8";
-    /* GNU extensions.  */
-    case DW_CFA_GNU_window_save:
-      return "DW_CFA_GNU_window_save";
-    case DW_CFA_GNU_args_size:
-      return "DW_CFA_GNU_args_size";
-    case DW_CFA_GNU_negative_offset_extended:
-      return "DW_CFA_GNU_negative_offset_extended";
-    default:
-      return "DW_CFA_<unknown>";
-    }
+  return name;
 }
-#endif
 
 static void
 dump_die_shallow (struct ui_file *f, int indent, struct die_info *die)
@@ -13995,13 +15915,13 @@ dump_die_shallow (struct ui_file *f, int indent, struct die_info *die)
 
   print_spaces (indent, f);
   fprintf_unfiltered (f, "Die: %s (abbrev %d, offset 0x%x)\n",
-	   dwarf_tag_name (die->tag), die->abbrev, die->offset);
+	   dwarf_tag_name (die->tag), die->abbrev, die->offset.sect_off);
 
   if (die->parent != NULL)
     {
       print_spaces (indent, f);
       fprintf_unfiltered (f, "  parent at offset: 0x%x\n",
-			  die->parent->offset);
+			  die->parent->offset.sect_off);
     }
 
   print_spaces (indent, f);
@@ -14020,8 +15940,8 @@ dump_die_shallow (struct ui_file *f, int indent, struct die_info *die)
 
       switch (die->attrs[i].form)
 	{
-	case DW_FORM_ref_addr:
 	case DW_FORM_addr:
+	case DW_FORM_GNU_addr_index:
 	  fprintf_unfiltered (f, "address: ");
 	  fputs_filtered (hex_string (DW_ADDR (&die->attrs[i])), f);
 	  break;
@@ -14036,11 +15956,17 @@ dump_die_shallow (struct ui_file *f, int indent, struct die_info *die)
 	  fprintf_unfiltered (f, "expression: size %u",
 			      DW_BLOCK (&die->attrs[i])->size);
 	  break;
+	case DW_FORM_ref_addr:
+	  fprintf_unfiltered (f, "ref address: ");
+	  fputs_filtered (hex_string (DW_UNSND (&die->attrs[i])), f);
+	  break;
 	case DW_FORM_ref1:
 	case DW_FORM_ref2:
 	case DW_FORM_ref4:
+	case DW_FORM_ref8:
+	case DW_FORM_ref_udata:
 	  fprintf_unfiltered (f, "constant ref: 0x%lx (adjusted)",
-			      (long) (DW_ADDR (&die->attrs[i])));
+			      (long) (DW_UNSND (&die->attrs[i])));
 	  break;
 	case DW_FORM_data1:
 	case DW_FORM_data2:
@@ -14058,12 +15984,13 @@ dump_die_shallow (struct ui_file *f, int indent, struct die_info *die)
 	case DW_FORM_ref_sig8:
 	  if (DW_SIGNATURED_TYPE (&die->attrs[i]) != NULL)
 	    fprintf_unfiltered (f, "signatured type, offset: 0x%x",
-			  DW_SIGNATURED_TYPE (&die->attrs[i])->per_cu.offset);
+			 DW_SIGNATURED_TYPE (&die->attrs[i])->per_cu.offset.sect_off);
 	  else
 	    fprintf_unfiltered (f, "signatured type, offset: unknown");
 	  break;
 	case DW_FORM_string:
 	case DW_FORM_strp:
+	case DW_FORM_GNU_str_index:
 	  fprintf_unfiltered (f, "string: \"%s\" (%s canonicalized)",
 		   DW_STRING (&die->attrs[i])
 		   ? DW_STRING (&die->attrs[i]) : "",
@@ -14147,11 +16074,15 @@ store_in_ref_table (struct die_info *die, struct dwarf2_cu *cu)
 {
   void **slot;
 
-  slot = htab_find_slot_with_hash (cu->die_hash, die, die->offset, INSERT);
+  slot = htab_find_slot_with_hash (cu->die_hash, die, die->offset.sect_off,
+				   INSERT);
 
   *slot = die;
 }
 
+/* DW_ADDR is always stored already as sect_offset; despite for the forms
+   besides DW_FORM_ref_addr it is stored as cu_offset in the DWARF file.  */
+
 static int
 is_ref_attr (struct attribute *attr)
 {
@@ -14169,16 +16100,22 @@ is_ref_attr (struct attribute *attr)
     }
 }
 
-static unsigned int
+/* Return DIE offset of ATTR.  Return 0 with complaint if ATTR is not of the
+   required kind.  */
+
+static sect_offset
 dwarf2_get_ref_die_offset (struct attribute *attr)
 {
+  sect_offset retval = { DW_UNSND (attr) };
+
   if (is_ref_attr (attr))
-    return DW_ADDR (attr);
+    return retval;
 
+  retval.sect_off = 0;
   complaint (&symfile_complaints,
 	     _("unsupported die ref attribute form: '%s'"),
 	     dwarf_form_name (attr->form));
-  return 0;
+  return retval;
 }
 
 /* Return the constant value held by ATTR.  Return DEFAULT_VALUE if
@@ -14204,47 +16141,6 @@ dwarf2_get_attr_constant_value (struct attribute *attr, int default_value)
     }
 }
 
-/* THIS_CU has a reference to PER_CU.  If necessary, load the new compilation
-   unit and add it to our queue.
-   The result is non-zero if PER_CU was queued, otherwise the result is zero
-   meaning either PER_CU is already queued or it is already loaded.  */
-
-static int
-maybe_queue_comp_unit (struct dwarf2_cu *this_cu,
-		       struct dwarf2_per_cu_data *per_cu)
-{
-  /* We may arrive here during partial symbol reading, if we need full
-     DIEs to process an unusual case (e.g. template arguments).  Do
-     not queue PER_CU, just tell our caller to load its DIEs.  */
-  if (dwarf2_per_objfile->reading_partial_symbols)
-    {
-      if (per_cu->cu == NULL || per_cu->cu->dies == NULL)
-	return 1;
-      return 0;
-    }
-
-  /* Mark the dependence relation so that we don't flush PER_CU
-     too early.  */
-  dwarf2_add_dependence (this_cu, per_cu);
-
-  /* If it's already on the queue, we have nothing to do.  */
-  if (per_cu->queued)
-    return 0;
-
-  /* If the compilation unit is already loaded, just mark it as
-     used.  */
-  if (per_cu->cu != NULL)
-    {
-      per_cu->cu->last_used = 0;
-      return 0;
-    }
-
-  /* Add it to the queue.  */
-  queue_comp_unit (per_cu, this_cu->objfile);
-
-  return 1;
-}
-
 /* Follow reference or signature attribute ATTR of SRC_DIE.
    On entry *REF_CU is the CU of SRC_DIE.
    On exit *REF_CU is the CU of the result.  */
@@ -14275,7 +16171,7 @@ follow_die_ref_or_sig (struct die_info *src_die, struct attribute *attr,
    Returns NULL if OFFSET is invalid.  */
 
 static struct die_info *
-follow_die_offset (unsigned int offset, struct dwarf2_cu **ref_cu)
+follow_die_offset (sect_offset offset, struct dwarf2_cu **ref_cu)
 {
   struct die_info temp_die;
   struct dwarf2_cu *target_cu, *cu = *ref_cu;
@@ -14284,7 +16180,7 @@ follow_die_offset (unsigned int offset, struct dwarf2_cu **ref_cu)
 
   target_cu = cu;
 
-  if (cu->per_cu->debug_types_section)
+  if (cu->per_cu->is_debug_types)
     {
       /* .debug_types CUs cannot reference anything outside their CU.
 	 If they need to, they have to reference a signatured type via
@@ -14299,8 +16195,8 @@ follow_die_offset (unsigned int offset, struct dwarf2_cu **ref_cu)
       per_cu = dwarf2_find_containing_comp_unit (offset, cu->objfile);
 
       /* If necessary, add it to the queue and load its DIEs.  */
-      if (maybe_queue_comp_unit (cu, per_cu))
-	load_full_comp_unit (per_cu, cu->objfile);
+      if (maybe_queue_comp_unit (cu, per_cu, cu->language))
+	load_full_comp_unit (per_cu, cu->language);
 
       target_cu = per_cu->cu;
     }
@@ -14308,12 +16204,12 @@ follow_die_offset (unsigned int offset, struct dwarf2_cu **ref_cu)
     {
       /* We're loading full DIEs during partial symbol reading.  */
       gdb_assert (dwarf2_per_objfile->reading_partial_symbols);
-      load_full_comp_unit (cu->per_cu, cu->objfile);
+      load_full_comp_unit (cu->per_cu, language_minimal);
     }
 
   *ref_cu = target_cu;
   temp_die.offset = offset;
-  return htab_find_with_hash (target_cu->die_hash, &temp_die, offset);
+  return htab_find_with_hash (target_cu->die_hash, &temp_die, offset.sect_off);
 }
 
 /* Follow reference attribute ATTR of SRC_DIE.
@@ -14324,7 +16220,7 @@ static struct die_info *
 follow_die_ref (struct die_info *src_die, struct attribute *attr,
 		struct dwarf2_cu **ref_cu)
 {
-  unsigned int offset = dwarf2_get_ref_die_offset (attr);
+  sect_offset offset = dwarf2_get_ref_die_offset (attr);
   struct dwarf2_cu *cu = *ref_cu;
   struct die_info *die;
 
@@ -14332,7 +16228,7 @@ follow_die_ref (struct die_info *src_die, struct attribute *attr,
   if (!die)
     error (_("Dwarf Error: Cannot find DIE at 0x%x referenced from DIE "
 	   "at 0x%x [in module %s]"),
-	   offset, src_die->offset, cu->objfile->name);
+	   offset.sect_off, src_die->offset.sect_off, cu->objfile->name);
 
   return die;
 }
@@ -14342,11 +16238,12 @@ follow_die_ref (struct die_info *src_die, struct attribute *attr,
    dwarf2_locexpr_baton->data has lifetime of PER_CU->OBJFILE.  */
 
 struct dwarf2_locexpr_baton
-dwarf2_fetch_die_location_block (unsigned int offset,
+dwarf2_fetch_die_location_block (cu_offset offset_in_cu,
 				 struct dwarf2_per_cu_data *per_cu,
 				 CORE_ADDR (*get_frame_pc) (void *baton),
 				 void *baton)
 {
+  sect_offset offset = { per_cu->offset.sect_off + offset_in_cu.cu_off };
   struct dwarf2_cu *cu;
   struct die_info *die;
   struct attribute *attr;
@@ -14361,7 +16258,7 @@ dwarf2_fetch_die_location_block (unsigned int offset,
   die = follow_die_offset (offset, &cu);
   if (!die)
     error (_("Dwarf Error: Cannot find DIE at 0x%x referenced in module %s"),
-	   offset, per_cu->cu->objfile->name);
+	   offset.sect_off, per_cu->objfile->name);
 
   attr = dwarf2_attr (die, DW_AT_location, cu);
   if (!attr)
@@ -14389,7 +16286,7 @@ dwarf2_fetch_die_location_block (unsigned int offset,
       if (!attr_form_is_block (attr))
 	error (_("Dwarf Error: DIE at 0x%x referenced in module %s "
 		 "is neither DW_FORM_block* nor DW_FORM_exprloc"),
-	       offset, per_cu->cu->objfile->name);
+	       offset.sect_off, per_cu->objfile->name);
 
       retval.data = DW_BLOCK (attr)->data;
       retval.size = DW_BLOCK (attr)->size;
@@ -14405,11 +16302,15 @@ dwarf2_fetch_die_location_block (unsigned int offset,
    PER_CU.  */
 
 struct type *
-dwarf2_get_die_type (unsigned int die_offset,
+dwarf2_get_die_type (cu_offset die_offset,
 		     struct dwarf2_per_cu_data *per_cu)
 {
+  sect_offset die_offset_sect;
+
   dw2_setup (per_cu->objfile);
-  return get_die_type_at_offset (die_offset, per_cu);
+
+  die_offset_sect.sect_off = per_cu->offset.sect_off + die_offset.cu_off;
+  return get_die_type_at_offset (die_offset_sect, per_cu);
 }
 
 /* Follow the signature attribute ATTR in SRC_DIE.
@@ -14431,18 +16332,20 @@ follow_die_sig (struct die_info *src_die, struct attribute *attr,
   if (sig_type == NULL)
     error (_("Dwarf Error: Cannot find signatured DIE referenced from DIE "
 	     "at 0x%x [in module %s]"),
-	   src_die->offset, objfile->name);
+	   src_die->offset.sect_off, objfile->name);
 
   /* If necessary, add it to the queue and load its DIEs.  */
 
-  if (maybe_queue_comp_unit (*ref_cu, &sig_type->per_cu))
-    read_signatured_type (objfile, sig_type);
+  if (maybe_queue_comp_unit (*ref_cu, &sig_type->per_cu, language_minimal))
+    read_signatured_type (sig_type);
 
   gdb_assert (sig_type->per_cu.cu != NULL);
 
   sig_cu = sig_type->per_cu.cu;
-  temp_die.offset = sig_cu->header.offset + sig_type->type_offset;
-  die = htab_find_with_hash (sig_cu->die_hash, &temp_die, temp_die.offset);
+  gdb_assert (sig_type->type_offset_in_section.sect_off != 0);
+  temp_die.offset = sig_type->type_offset_in_section;
+  die = htab_find_with_hash (sig_cu->die_hash, &temp_die,
+			     temp_die.offset.sect_off);
   if (die)
     {
       *ref_cu = sig_cu;
@@ -14451,7 +16354,7 @@ follow_die_sig (struct die_info *src_die, struct attribute *attr,
 
   error (_("Dwarf Error: Cannot find signatured DIE at 0x%x referenced "
 	 "from DIE at 0x%x [in module %s]"),
-	 sig_type->type_offset, src_die->offset, objfile->name);
+	 temp_die.offset.sect_off, src_die->offset.sect_off, objfile->name);
 }
 
 /* Given an offset of a signatured type, return its signatured_type.  */
@@ -14459,12 +16362,12 @@ follow_die_sig (struct die_info *src_die, struct attribute *attr,
 static struct signatured_type *
 lookup_signatured_type_at_offset (struct objfile *objfile,
 				  struct dwarf2_section_info *section,
-				  unsigned int offset)
+				  sect_offset offset)
 {
-  gdb_byte *info_ptr = section->buffer + offset;
+  gdb_byte *info_ptr = section->buffer + offset.sect_off;
   unsigned int length, initial_length_size;
   unsigned int sig_offset;
-  struct signatured_type find_entry, *type_sig;
+  struct signatured_type find_entry, *sig_type;
 
   length = read_initial_length (objfile->obfd, info_ptr, &initial_length_size);
   sig_offset = (initial_length_size
@@ -14472,100 +16375,90 @@ lookup_signatured_type_at_offset (struct objfile *objfile,
 		+ (initial_length_size == 4 ? 4 : 8) /*debug_abbrev_offset*/
 		+ 1 /*address_size*/);
   find_entry.signature = bfd_get_64 (objfile->obfd, info_ptr + sig_offset);
-  type_sig = htab_find (dwarf2_per_objfile->signatured_types, &find_entry);
+  sig_type = htab_find (dwarf2_per_objfile->signatured_types, &find_entry);
 
   /* This is only used to lookup previously recorded types.
      If we didn't find it, it's our bug.  */
-  gdb_assert (type_sig != NULL);
-  gdb_assert (offset == type_sig->per_cu.offset);
+  gdb_assert (sig_type != NULL);
+  gdb_assert (offset.sect_off == sig_type->per_cu.offset.sect_off);
 
-  return type_sig;
+  return sig_type;
 }
 
-/* Read in signatured type at OFFSET and build its CU and die(s).  */
+/* Load the DIEs associated with type unit PER_CU into memory.  */
 
 static void
-read_signatured_type_at_offset (struct objfile *objfile,
-				struct dwarf2_section_info *sect,
-				unsigned int offset)
+load_full_type_unit (struct dwarf2_per_cu_data *per_cu)
 {
-  struct signatured_type *type_sig;
+  struct signatured_type *sig_type;
 
-  dwarf2_read_section (objfile, sect);
+  /* Caller is responsible for ensuring type_unit_groups don't get here.  */
+  gdb_assert (! IS_TYPE_UNIT_GROUP (per_cu));
 
-  /* We have the section offset, but we need the signature to do the
-     hash table lookup.	 */
-  type_sig = lookup_signatured_type_at_offset (objfile, sect, offset);
+  /* We have the per_cu, but we need the signatured_type.
+     Fortunately this is an easy translation.  */
+  gdb_assert (per_cu->is_debug_types);
+  sig_type = (struct signatured_type *) per_cu;
 
-  gdb_assert (type_sig->per_cu.cu == NULL);
+  gdb_assert (per_cu->cu == NULL);
 
-  read_signatured_type (objfile, type_sig);
+  read_signatured_type (sig_type);
 
-  gdb_assert (type_sig->per_cu.cu != NULL);
+  gdb_assert (per_cu->cu != NULL);
 }
 
-/* Read in a signatured type and build its CU and DIEs.  */
+/* die_reader_func for read_signatured_type.
+   This is identical to load_full_comp_unit_reader,
+   but is kept separate for now.  */
 
 static void
-read_signatured_type (struct objfile *objfile,
-		      struct signatured_type *type_sig)
+read_signatured_type_reader (const struct die_reader_specs *reader,
+			     gdb_byte *info_ptr,
+			     struct die_info *comp_unit_die,
+			     int has_children,
+			     void *data)
 {
-  gdb_byte *types_ptr;
-  struct die_reader_specs reader_specs;
-  struct dwarf2_cu *cu;
-  ULONGEST signature;
-  struct cleanup *back_to, *free_cu_cleanup;
-  struct dwarf2_section_info *section = type_sig->per_cu.debug_types_section;
-
-  dwarf2_read_section (objfile, section);
-  types_ptr = section->buffer + type_sig->per_cu.offset;
-
-  gdb_assert (type_sig->per_cu.cu == NULL);
-
-  cu = xmalloc (sizeof (*cu));
-  init_one_comp_unit (cu, objfile);
-
-  type_sig->per_cu.cu = cu;
-  cu->per_cu = &type_sig->per_cu;
-
-  /* If an error occurs while loading, release our storage.  */
-  free_cu_cleanup = make_cleanup (free_one_comp_unit, cu);
-
-  types_ptr = read_type_comp_unit_head (&cu->header, section, &signature,
-					types_ptr, objfile->obfd);
-  gdb_assert (signature == type_sig->signature);
-
-  cu->die_hash
-    = htab_create_alloc_ex (cu->header.length / 12,
-			    die_hash,
-			    die_eq,
-			    NULL,
-			    &cu->comp_unit_obstack,
-			    hashtab_obstack_allocate,
-			    dummy_obstack_deallocate);
-
-  dwarf2_read_abbrevs (cu->objfile->obfd, cu);
-  back_to = make_cleanup (dwarf2_free_abbrev_table, cu);
+  struct dwarf2_cu *cu = reader->cu;
 
-  init_cu_die_reader (&reader_specs, cu);
+  gdb_assert (cu->die_hash == NULL);
+  cu->die_hash =
+    htab_create_alloc_ex (cu->header.length / 12,
+			  die_hash,
+			  die_eq,
+			  NULL,
+			  &cu->comp_unit_obstack,
+			  hashtab_obstack_allocate,
+			  dummy_obstack_deallocate);
 
-  cu->dies = read_die_and_children (&reader_specs, types_ptr, &types_ptr,
-				    NULL /*parent*/);
+  if (has_children)
+    comp_unit_die->child = read_die_and_siblings (reader, info_ptr,
+						  &info_ptr, comp_unit_die);
+  cu->dies = comp_unit_die;
+  /* comp_unit_die is not stored in die_hash, no need.  */
 
   /* We try not to read any attributes in this function, because not
-     all objfiles needed for references have been loaded yet, and symbol
+     all CUs needed for references have been loaded yet, and symbol
      table processing isn't initialized.  But we have to set the CU language,
-     or we won't be able to build types correctly.  */
-  prepare_one_comp_unit (cu, cu->dies);
+     or we won't be able to build types correctly.
+     Similarly, if we do not read the producer, we can not apply
+     producer-specific interpretation.  */
+  prepare_one_comp_unit (cu, cu->dies, language_minimal);
+}
 
-  do_cleanups (back_to);
+/* Read in a signatured type and build its CU and DIEs.
+   If the type is a stub for the real type in a DWO file,
+   read in the real type from the DWO file as well.  */
+
+static void
+read_signatured_type (struct signatured_type *sig_type)
+{
+  struct dwarf2_per_cu_data *per_cu = &sig_type->per_cu;
 
-  /* We've successfully allocated this compilation unit.  Let our caller
-     clean it up when finished with it.	 */
-  discard_cleanups (free_cu_cleanup);
+  gdb_assert (per_cu->is_debug_types);
+  gdb_assert (per_cu->cu == NULL);
 
-  type_sig->per_cu.cu->read_in_chain = dwarf2_per_objfile->read_in_chain;
-  dwarf2_per_objfile->read_in_chain = &type_sig->per_cu;
+  init_cutu_and_read_dies (per_cu, NULL, 0, 1,
+			   read_signatured_type_reader, NULL);
 }
 
 /* Decode simple location descriptions.
@@ -14790,9 +16683,16 @@ decode_locdesc (struct dwarf_block *blk, struct dwarf2_cu *cu)
 	case DW_OP_GNU_uninit:
 	  break;
 
+	case DW_OP_GNU_addr_index:
+	case DW_OP_GNU_const_index:
+	  stack[++stacki] = read_addr_index_from_leb128 (cu, &data[i],
+							 &bytes_read);
+	  i += bytes_read;
+	  break;
+
 	default:
 	  {
-	    const char *name = dwarf_stack_op_name (op);
+	    const char *name = get_DW_OP_name (op);
 
 	    if (name)
 	      complaint (&symfile_complaints, _("unsupported stack op: '%s'"),
@@ -14836,17 +16736,6 @@ dwarf_alloc_block (struct dwarf2_cu *cu)
   return (blk);
 }
 
-static struct abbrev_info *
-dwarf_alloc_abbrev (struct dwarf2_cu *cu)
-{
-  struct abbrev_info *abbrev;
-
-  abbrev = (struct abbrev_info *)
-    obstack_alloc (&cu->abbrev_obstack, sizeof (struct abbrev_info));
-  memset (abbrev, 0, sizeof (struct abbrev_info));
-  return (abbrev);
-}
-
 static struct die_info *
 dwarf_alloc_die (struct dwarf2_cu *cu, int num_attrs)
 {
@@ -14937,9 +16826,12 @@ macro_start_file (int file, int line,
                                       objfile->macro_cache);
 
   if (! current_file)
-    /* If we have no current file, then this must be the start_file
-       directive for the compilation unit's main source file.  */
-    current_file = macro_set_main (pending_macros, full_name);
+    {
+      /* If we have no current file, then this must be the start_file
+	 directive for the compilation unit's main source file.  */
+      current_file = macro_set_main (pending_macros, full_name);
+      macro_define_special (pending_macros);
+    }
   else
     current_file = macro_include (current_file, line, full_name);
 
@@ -15124,7 +17016,7 @@ parse_macro_definition (struct macro_source_file *file, int line,
    Returns the new pointer.  */
 
 static gdb_byte *
-skip_form_bytes (bfd *abfd, gdb_byte *bytes,
+skip_form_bytes (bfd *abfd, gdb_byte *bytes, gdb_byte *buffer_end,
 		 enum dwarf_form form,
 		 unsigned int offset_size,
 		 struct dwarf2_section_info *section)
@@ -15177,7 +17069,14 @@ skip_form_bytes (bfd *abfd, gdb_byte *bytes,
 
     case DW_FORM_sdata:
     case DW_FORM_udata:
-      bytes = skip_leb128 (abfd, bytes);
+    case DW_FORM_GNU_addr_index:
+    case DW_FORM_GNU_str_index:
+      bytes = (gdb_byte *) gdb_skip_leb128 (bytes, buffer_end);
+      if (bytes == NULL)
+	{
+	  dwarf2_section_buffer_overflow_complaint (section);
+	  return NULL;
+	}
       break;
 
     default:
@@ -15201,7 +17100,7 @@ skip_form_bytes (bfd *abfd, gdb_byte *bytes,
 static gdb_byte *
 skip_unknown_opcode (unsigned int opcode,
 		     gdb_byte **opcode_definitions,
-		     gdb_byte *mac_ptr,
+		     gdb_byte *mac_ptr, gdb_byte *mac_end,
 		     bfd *abfd,
 		     unsigned int offset_size,
 		     struct dwarf2_section_info *section)
@@ -15224,7 +17123,8 @@ skip_unknown_opcode (unsigned int opcode,
 
   for (i = 0; i < arg; ++i)
     {
-      mac_ptr = skip_form_bytes (abfd, mac_ptr, defn[i], offset_size, section);
+      mac_ptr = skip_form_bytes (abfd, mac_ptr, mac_end, defn[i], offset_size,
+				 section);
       if (mac_ptr == NULL)
 	{
 	  /* skip_form_bytes already issued the complaint.  */
@@ -15297,7 +17197,7 @@ dwarf_parse_macro_header (gdb_byte **opcode_definitions,
 }
 
 /* A helper for dwarf_decode_macros that handles the GNU extensions,
-   including DW_GNU_MACINFO_transparent_include.  */
+   including DW_MACRO_GNU_transparent_include.  */
 
 static void
 dwarf_decode_macro_bytes (bfd *abfd, gdb_byte *mac_ptr, gdb_byte *mac_end,
@@ -15306,7 +17206,8 @@ dwarf_decode_macro_bytes (bfd *abfd, gdb_byte *mac_ptr, gdb_byte *mac_end,
 			  struct dwarf2_section_info *section,
 			  int section_is_gnu,
 			  unsigned int offset_size,
-			  struct objfile *objfile)
+			  struct objfile *objfile,
+			  htab_t include_hash)
 {
   enum dwarf_macro_record_type macinfo_type;
   int at_commandline;
@@ -15334,7 +17235,7 @@ dwarf_decode_macro_bytes (bfd *abfd, gdb_byte *mac_ptr, gdb_byte *mac_end,
       /* Do we at least have room for a macinfo type byte?  */
       if (mac_ptr >= mac_end)
 	{
-	  dwarf2_macros_too_long_complaint (section);
+	  dwarf2_section_buffer_overflow_complaint (section);
 	  break;
 	}
 
@@ -15461,7 +17362,7 @@ dwarf_decode_macro_bytes (bfd *abfd, gdb_byte *mac_ptr, gdb_byte *mac_end,
                   /* Do we at least have room for a macinfo type byte?  */
                   if (mac_ptr >= mac_end)
                     {
-		      dwarf2_macros_too_long_complaint (section);
+		      dwarf2_section_buffer_overflow_complaint (section);
                       return;
                     }
 
@@ -15481,16 +17382,33 @@ dwarf_decode_macro_bytes (bfd *abfd, gdb_byte *mac_ptr, gdb_byte *mac_end,
 	case DW_MACRO_GNU_transparent_include:
 	  {
 	    LONGEST offset;
+	    void **slot;
 
 	    offset = read_offset_1 (abfd, mac_ptr, offset_size);
 	    mac_ptr += offset_size;
 
-	    dwarf_decode_macro_bytes (abfd,
-				      section->buffer + offset,
-				      mac_end, current_file,
-				      lh, comp_dir,
-				      section, section_is_gnu,
-				      offset_size, objfile);
+	    slot = htab_find_slot (include_hash, mac_ptr, INSERT);
+	    if (*slot != NULL)
+	      {
+		/* This has actually happened; see
+		   http://sourceware.org/bugzilla/show_bug.cgi?id=13568.  */
+		complaint (&symfile_complaints,
+			   _("recursive DW_MACRO_GNU_transparent_include in "
+			     ".debug_macro section"));
+	      }
+	    else
+	      {
+		*slot = mac_ptr;
+
+		dwarf_decode_macro_bytes (abfd,
+					  section->buffer + offset,
+					  mac_end, current_file,
+					  lh, comp_dir,
+					  section, section_is_gnu,
+					  offset_size, objfile, include_hash);
+
+		htab_remove_elt (include_hash, mac_ptr);
+	      }
 	  }
 	  break;
 
@@ -15512,7 +17430,7 @@ dwarf_decode_macro_bytes (bfd *abfd, gdb_byte *mac_ptr, gdb_byte *mac_end,
 
 	default:
 	  mac_ptr = skip_unknown_opcode (macinfo_type, opcode_definitions,
-					 mac_ptr, abfd, offset_size,
+					 mac_ptr, mac_end, abfd, offset_size,
 					 section);
 	  if (mac_ptr == NULL)
 	    return;
@@ -15522,25 +17440,57 @@ dwarf_decode_macro_bytes (bfd *abfd, gdb_byte *mac_ptr, gdb_byte *mac_end,
 }
 
 static void
-dwarf_decode_macros (struct line_header *lh, unsigned int offset,
-                     char *comp_dir, bfd *abfd,
-                     struct dwarf2_cu *cu,
-		     struct dwarf2_section_info *section,
-		     int section_is_gnu)
+dwarf_decode_macros (struct dwarf2_cu *cu, unsigned int offset,
+                     char *comp_dir, int section_is_gnu)
 {
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
+  struct line_header *lh = cu->line_header;
+  bfd *abfd;
   gdb_byte *mac_ptr, *mac_end;
   struct macro_source_file *current_file = 0;
   enum dwarf_macro_record_type macinfo_type;
   unsigned int offset_size = cu->header.offset_size;
   gdb_byte *opcode_definitions[256];
+  struct cleanup *cleanup;
+  htab_t include_hash;
+  void **slot;
+  struct dwarf2_section_info *section;
+  const char *section_name;
 
-  dwarf2_read_section (dwarf2_per_objfile->objfile, section);
+  if (cu->dwo_unit != NULL)
+    {
+      if (section_is_gnu)
+	{
+	  section = &cu->dwo_unit->dwo_file->sections.macro;
+	  section_name = ".debug_macro.dwo";
+	}
+      else
+	{
+	  section = &cu->dwo_unit->dwo_file->sections.macinfo;
+	  section_name = ".debug_macinfo.dwo";
+	}
+    }
+  else
+    {
+      if (section_is_gnu)
+	{
+	  section = &dwarf2_per_objfile->macro;
+	  section_name = ".debug_macro";
+	}
+      else
+	{
+	  section = &dwarf2_per_objfile->macinfo;
+	  section_name = ".debug_macinfo";
+	}
+    }
+
+  dwarf2_read_section (objfile, section);
   if (section->buffer == NULL)
     {
-      complaint (&symfile_complaints, _("missing %s section"),
-		 section->asection->name);
+      complaint (&symfile_complaints, _("missing %s section"), section_name);
       return;
     }
+  abfd = section->asection->owner;
 
   /* First pass: Find the name of the base filename.
      This filename is needed in order to process all macros whose definition
@@ -15611,7 +17561,7 @@ dwarf_decode_macros (struct line_header *lh, unsigned int offset,
 	    mac_ptr += bytes_read;
 
 	    current_file = macro_start_file (file, line, current_file,
-					     comp_dir, lh, cu->objfile);
+					     comp_dir, lh, objfile);
 	  }
 	  break;
 
@@ -15652,7 +17602,7 @@ dwarf_decode_macros (struct line_header *lh, unsigned int offset,
 
 	default:
 	  mac_ptr = skip_unknown_opcode (macinfo_type, opcode_definitions,
-					 mac_ptr, abfd, offset_size,
+					 mac_ptr, mac_end, abfd, offset_size,
 					 section);
 	  if (mac_ptr == NULL)
 	    return;
@@ -15666,13 +17616,21 @@ dwarf_decode_macros (struct line_header *lh, unsigned int offset,
      command-line macro definitions/undefinitions.  This flag is unset when we
      reach the first DW_MACINFO_start_file entry.  */
 
-  dwarf_decode_macro_bytes (abfd, section->buffer + offset, mac_end,
+  include_hash = htab_create_alloc (1, htab_hash_pointer, htab_eq_pointer,
+				    NULL, xcalloc, xfree);
+  cleanup = make_cleanup_htab_delete (include_hash);
+  mac_ptr = section->buffer + offset;
+  slot = htab_find_slot (include_hash, mac_ptr, INSERT);
+  *slot = mac_ptr;
+  dwarf_decode_macro_bytes (abfd, mac_ptr, mac_end,
 			    current_file, lh, comp_dir, section, section_is_gnu,
-			    offset_size, cu->objfile);
+			    offset_size, objfile, include_hash);
+  do_cleanups (cleanup);
 }
 
 /* Check if the attribute's form is a DW_FORM_block*
    if so return true else false.  */
+
 static int
 attr_form_is_block (struct attribute *attr)
 {
@@ -15692,6 +17650,7 @@ attr_form_is_block (struct attribute *attr)
    may have a value that belongs to more than one of these classes; it
    would be ambiguous if we did, because we use the same forms for all
    of them.  */
+
 static int
 attr_form_is_section_offset (struct attribute *attr)
 {
@@ -15700,7 +17659,6 @@ attr_form_is_section_offset (struct attribute *attr)
 	  || attr->form == DW_FORM_sec_offset);
 }
 
-
 /* Return non-zero if ATTR's value falls in the 'constant' class, or
    zero otherwise.  When this function returns true, you can apply
    dwarf2_get_attr_constant_value to it.
@@ -15713,6 +17671,7 @@ attr_form_is_section_offset (struct attribute *attr)
    that, if an attribute's can be either a constant or one of the
    section offset classes, DW_FORM_data4 and DW_FORM_data8 should be
    taken as section offsets, not constants.  */
+
 static int
 attr_form_is_constant (struct attribute *attr)
 {
@@ -15730,6 +17689,17 @@ attr_form_is_constant (struct attribute *attr)
     }
 }
 
+/* Return the .debug_loc section to use for CU.
+   For DWO files use .debug_loc.dwo.  */
+
+static struct dwarf2_section_info *
+cu_debug_loc_section (struct dwarf2_cu *cu)
+{
+  if (cu->dwo_unit)
+    return &cu->dwo_unit->dwo_file->sections.loc;
+  return &dwarf2_per_objfile->loc;
+}
+
 /* A helper function that fills in a dwarf2_loclist_baton.  */
 
 static void
@@ -15737,32 +17707,36 @@ fill_in_loclist_baton (struct dwarf2_cu *cu,
 		       struct dwarf2_loclist_baton *baton,
 		       struct attribute *attr)
 {
-  dwarf2_read_section (dwarf2_per_objfile->objfile,
-		       &dwarf2_per_objfile->loc);
+  struct dwarf2_section_info *section = cu_debug_loc_section (cu);
+
+  dwarf2_read_section (dwarf2_per_objfile->objfile, section);
 
   baton->per_cu = cu->per_cu;
   gdb_assert (baton->per_cu);
   /* We don't know how long the location list is, but make sure we
      don't run off the edge of the section.  */
-  baton->size = dwarf2_per_objfile->loc.size - DW_UNSND (attr);
-  baton->data = dwarf2_per_objfile->loc.buffer + DW_UNSND (attr);
+  baton->size = section->size - DW_UNSND (attr);
+  baton->data = section->buffer + DW_UNSND (attr);
   baton->base_address = cu->base_address;
+  baton->from_dwo = cu->dwo_unit != NULL;
 }
 
 static void
 dwarf2_symbol_mark_computed (struct attribute *attr, struct symbol *sym,
 			     struct dwarf2_cu *cu)
 {
+  struct objfile *objfile = dwarf2_per_objfile->objfile;
+  struct dwarf2_section_info *section = cu_debug_loc_section (cu);
+
   if (attr_form_is_section_offset (attr)
-      /* ".debug_loc" may not exist at all, or the offset may be outside
+      /* .debug_loc{,.dwo} may not exist at all, or the offset may be outside
 	 the section.  If so, fall through to the complaint in the
 	 other branch.  */
-      && DW_UNSND (attr) < dwarf2_section_size (dwarf2_per_objfile->objfile,
-						&dwarf2_per_objfile->loc))
+      && DW_UNSND (attr) < dwarf2_section_size (objfile, section))
     {
       struct dwarf2_loclist_baton *baton;
 
-      baton = obstack_alloc (&cu->objfile->objfile_obstack,
+      baton = obstack_alloc (&objfile->objfile_obstack,
 			     sizeof (struct dwarf2_loclist_baton));
 
       fill_in_loclist_baton (cu, baton, attr);
@@ -15779,7 +17753,7 @@ dwarf2_symbol_mark_computed (struct attribute *attr, struct symbol *sym,
     {
       struct dwarf2_locexpr_baton *baton;
 
-      baton = obstack_alloc (&cu->objfile->objfile_obstack,
+      baton = obstack_alloc (&objfile->objfile_obstack,
 			     sizeof (struct dwarf2_locexpr_baton));
       baton->per_cu = cu->per_cu;
       gdb_assert (baton->per_cu);
@@ -15831,26 +17805,22 @@ static const struct comp_unit_head *
 per_cu_header_read_in (struct comp_unit_head *cu_headerp,
 		       struct dwarf2_per_cu_data *per_cu)
 {
-  struct objfile *objfile;
-  struct dwarf2_per_objfile *per_objfile;
   gdb_byte *info_ptr;
 
   if (per_cu->cu)
     return &per_cu->cu->header;
 
-  objfile = per_cu->objfile;
-  per_objfile = objfile_data (objfile, dwarf2_objfile_data_key);
-  info_ptr = per_objfile->info.buffer + per_cu->offset;
+  info_ptr = per_cu->info_or_types_section->buffer + per_cu->offset.sect_off;
 
   memset (cu_headerp, 0, sizeof (*cu_headerp));
-  read_comp_unit_head (cu_headerp, info_ptr, objfile->obfd);
+  read_comp_unit_head (cu_headerp, info_ptr, per_cu->objfile->obfd);
 
   return cu_headerp;
 }
 
 /* Return the address size given in the compilation unit header for CU.  */
 
-CORE_ADDR
+int
 dwarf2_per_cu_addr_size (struct dwarf2_per_cu_data *per_cu)
 {
   struct comp_unit_head cu_header_local;
@@ -15907,7 +17877,7 @@ dwarf2_per_cu_text_offset (struct dwarf2_per_cu_data *per_cu)
    the DIE at OFFSET.  Raises an error on failure.  */
 
 static struct dwarf2_per_cu_data *
-dwarf2_find_containing_comp_unit (unsigned int offset,
+dwarf2_find_containing_comp_unit (sect_offset offset,
 				  struct objfile *objfile)
 {
   struct dwarf2_per_cu_data *this_cu;
@@ -15919,61 +17889,53 @@ dwarf2_find_containing_comp_unit (unsigned int offset,
     {
       int mid = low + (high - low) / 2;
 
-      if (dwarf2_per_objfile->all_comp_units[mid]->offset >= offset)
+      if (dwarf2_per_objfile->all_comp_units[mid]->offset.sect_off
+	  >= offset.sect_off)
 	high = mid;
       else
 	low = mid + 1;
     }
   gdb_assert (low == high);
-  if (dwarf2_per_objfile->all_comp_units[low]->offset > offset)
+  if (dwarf2_per_objfile->all_comp_units[low]->offset.sect_off
+      > offset.sect_off)
     {
       if (low == 0)
 	error (_("Dwarf Error: could not find partial DIE containing "
 	       "offset 0x%lx [in module %s]"),
-	       (long) offset, bfd_get_filename (objfile->obfd));
+	       (long) offset.sect_off, bfd_get_filename (objfile->obfd));
 
-      gdb_assert (dwarf2_per_objfile->all_comp_units[low-1]->offset <= offset);
+      gdb_assert (dwarf2_per_objfile->all_comp_units[low-1]->offset.sect_off
+		  <= offset.sect_off);
       return dwarf2_per_objfile->all_comp_units[low-1];
     }
   else
     {
       this_cu = dwarf2_per_objfile->all_comp_units[low];
       if (low == dwarf2_per_objfile->n_comp_units - 1
-	  && offset >= this_cu->offset + this_cu->length)
-	error (_("invalid dwarf2 offset %u"), offset);
-      gdb_assert (offset < this_cu->offset + this_cu->length);
+	  && offset.sect_off >= this_cu->offset.sect_off + this_cu->length)
+	error (_("invalid dwarf2 offset %u"), offset.sect_off);
+      gdb_assert (offset.sect_off < this_cu->offset.sect_off + this_cu->length);
       return this_cu;
     }
 }
 
-/* Locate the compilation unit from OBJFILE which is located at exactly
-   OFFSET.  Raises an error on failure.  */
-
-static struct dwarf2_per_cu_data *
-dwarf2_find_comp_unit (unsigned int offset, struct objfile *objfile)
-{
-  struct dwarf2_per_cu_data *this_cu;
-
-  this_cu = dwarf2_find_containing_comp_unit (offset, objfile);
-  if (this_cu->offset != offset)
-    error (_("no compilation unit with offset %u."), offset);
-  return this_cu;
-}
-
-/* Initialize dwarf2_cu CU for OBJFILE in a pre-allocated space.  */
+/* Initialize dwarf2_cu CU, owned by PER_CU.  */
 
 static void
-init_one_comp_unit (struct dwarf2_cu *cu, struct objfile *objfile)
+init_one_comp_unit (struct dwarf2_cu *cu, struct dwarf2_per_cu_data *per_cu)
 {
   memset (cu, 0, sizeof (*cu));
-  cu->objfile = objfile;
+  per_cu->cu = cu;
+  cu->per_cu = per_cu;
+  cu->objfile = per_cu->objfile;
   obstack_init (&cu->comp_unit_obstack);
 }
 
 /* Initialize basic fields of dwarf_cu CU according to DIE COMP_UNIT_DIE.  */
 
 static void
-prepare_one_comp_unit (struct dwarf2_cu *cu, struct die_info *comp_unit_die)
+prepare_one_comp_unit (struct dwarf2_cu *cu, struct die_info *comp_unit_die,
+		       enum language pretend_language)
 {
   struct attribute *attr;
 
@@ -15983,9 +17945,13 @@ prepare_one_comp_unit (struct dwarf2_cu *cu, struct die_info *comp_unit_die)
     set_cu_language (DW_UNSND (attr), cu);
   else
     {
-      cu->language = language_minimal;
+      cu->language = pretend_language;
       cu->language_defn = language_def (cu->language);
     }
+
+  attr = dwarf2_attr (comp_unit_die, DW_AT_producer, cu);
+  if (attr)
+    cu->producer = DW_STRING (attr);
 }
 
 /* Release one cached compilation unit, CU.  We unlink it from the tree
@@ -15995,12 +17961,12 @@ prepare_one_comp_unit (struct dwarf2_cu *cu, struct die_info *comp_unit_die)
    cleanup routine.  */
 
 static void
-free_one_comp_unit (void *data)
+free_heap_comp_unit (void *data)
 {
   struct dwarf2_cu *cu = data;
 
-  if (cu->per_cu != NULL)
-    cu->per_cu->cu = NULL;
+  gdb_assert (cu->per_cu != NULL);
+  cu->per_cu->cu = NULL;
   cu->per_cu = NULL;
 
   obstack_free (&cu->comp_unit_obstack, NULL);
@@ -16010,30 +17976,19 @@ free_one_comp_unit (void *data)
 
 /* This cleanup function is passed the address of a dwarf2_cu on the stack
    when we're finished with it.  We can't free the pointer itself, but be
-   sure to unlink it from the cache.  Also release any associated storage
-   and perform cache maintenance.
-
-   Only used during partial symbol parsing.  */
+   sure to unlink it from the cache.  Also release any associated storage.  */
 
 static void
 free_stack_comp_unit (void *data)
 {
   struct dwarf2_cu *cu = data;
 
+  gdb_assert (cu->per_cu != NULL);
+  cu->per_cu->cu = NULL;
+  cu->per_cu = NULL;
+
   obstack_free (&cu->comp_unit_obstack, NULL);
   cu->partial_dies = NULL;
-
-  if (cu->per_cu != NULL)
-    {
-      /* This compilation unit is on the stack in our caller, so we
-	 should not xfree it.  Just unlink it.  */
-      cu->per_cu->cu = NULL;
-      cu->per_cu = NULL;
-
-      /* If we had a per-cu pointer, then we may have other compilation
-	 units loaded, so age them now.  */
-      age_cached_comp_units ();
-    }
 }
 
 /* Free all cached compilation units.  */
@@ -16051,7 +18006,7 @@ free_cached_comp_units (void *data)
 
       next_cu = per_cu->cu->read_in_chain;
 
-      free_one_comp_unit (per_cu->cu);
+      free_heap_comp_unit (per_cu->cu);
       *last_chain = next_cu;
 
       per_cu = next_cu;
@@ -16086,7 +18041,7 @@ age_cached_comp_units (void)
 
       if (!per_cu->cu->mark)
 	{
-	  free_one_comp_unit (per_cu->cu);
+	  free_heap_comp_unit (per_cu->cu);
 	  *last_chain = next_cu;
 	}
       else
@@ -16099,7 +18054,7 @@ age_cached_comp_units (void)
 /* Remove a single compilation unit from the cache.  */
 
 static void
-free_one_cached_comp_unit (void *target_cu)
+free_one_cached_comp_unit (struct dwarf2_per_cu_data *target_per_cu)
 {
   struct dwarf2_per_cu_data *per_cu, **last_chain;
 
@@ -16111,9 +18066,10 @@ free_one_cached_comp_unit (void *target_cu)
 
       next_cu = per_cu->cu->read_in_chain;
 
-      if (per_cu->cu == target_cu)
+      if (per_cu == target_per_cu)
 	{
-	  free_one_comp_unit (per_cu->cu);
+	  free_heap_comp_unit (per_cu->cu);
+	  per_cu->cu = NULL;
 	  *last_chain = next_cu;
 	  break;
 	}
@@ -16143,35 +18099,45 @@ dwarf2_free_objfile (struct objfile *objfile)
   /* Everything else should be on the objfile obstack.  */
 }
 
-/* A pair of DIE offset and GDB type pointer.  We store these
-   in a hash table separate from the DIEs, and preserve them
-   when the DIEs are flushed out of cache.  */
+/* A set of CU "per_cu" pointer, DIE offset, and GDB type pointer.
+   We store these in a hash table separate from the DIEs, and preserve them
+   when the DIEs are flushed out of cache.
+
+   The CU "per_cu" pointer is needed because offset alone is not enough to
+   uniquely identify the type.  A file may have multiple .debug_types sections,
+   or the type may come from a DWO file.  We have to use something in
+   dwarf2_per_cu_data (or the pointer to it) because we can enter the lookup
+   routine, get_die_type_at_offset, from outside this file, and thus won't
+   necessarily have PER_CU->cu.  Fortunately, PER_CU is stable for the life
+   of the objfile.  */
 
-struct dwarf2_offset_and_type
+struct dwarf2_per_cu_offset_and_type
 {
-  unsigned int offset;
+  const struct dwarf2_per_cu_data *per_cu;
+  sect_offset offset;
   struct type *type;
 };
 
-/* Hash function for a dwarf2_offset_and_type.  */
+/* Hash function for a dwarf2_per_cu_offset_and_type.  */
 
 static hashval_t
-offset_and_type_hash (const void *item)
+per_cu_offset_and_type_hash (const void *item)
 {
-  const struct dwarf2_offset_and_type *ofs = item;
+  const struct dwarf2_per_cu_offset_and_type *ofs = item;
 
-  return ofs->offset;
+  return (uintptr_t) ofs->per_cu + ofs->offset.sect_off;
 }
 
-/* Equality function for a dwarf2_offset_and_type.  */
+/* Equality function for a dwarf2_per_cu_offset_and_type.  */
 
 static int
-offset_and_type_eq (const void *item_lhs, const void *item_rhs)
+per_cu_offset_and_type_eq (const void *item_lhs, const void *item_rhs)
 {
-  const struct dwarf2_offset_and_type *ofs_lhs = item_lhs;
-  const struct dwarf2_offset_and_type *ofs_rhs = item_rhs;
+  const struct dwarf2_per_cu_offset_and_type *ofs_lhs = item_lhs;
+  const struct dwarf2_per_cu_offset_and_type *ofs_rhs = item_rhs;
 
-  return ofs_lhs->offset == ofs_rhs->offset;
+  return (ofs_lhs->per_cu == ofs_rhs->per_cu
+	  && ofs_lhs->offset.sect_off == ofs_rhs->offset.sect_off);
 }
 
 /* Set the type associated with DIE to TYPE.  Save it in CU's hash
@@ -16195,9 +18161,8 @@ offset_and_type_eq (const void *item_lhs, const void *item_rhs)
 static struct type *
 set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
 {
-  struct dwarf2_offset_and_type **slot, ofs;
+  struct dwarf2_per_cu_offset_and_type **slot, ofs;
   struct objfile *objfile = cu->objfile;
-  htab_t *type_hash_ptr;
 
   /* For Ada types, make sure that the gnat-specific data is always
      initialized (if not already set).  There are a few types where
@@ -16212,55 +18177,47 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
       && !HAVE_GNAT_AUX_INFO (type))
     INIT_GNAT_SPECIFIC (type);
 
-  if (cu->per_cu->debug_types_section)
-    type_hash_ptr = &dwarf2_per_objfile->debug_types_type_hash;
-  else
-    type_hash_ptr = &dwarf2_per_objfile->debug_info_type_hash;
-
-  if (*type_hash_ptr == NULL)
+  if (dwarf2_per_objfile->die_type_hash == NULL)
     {
-      *type_hash_ptr
-	= htab_create_alloc_ex (127,
-				offset_and_type_hash,
-				offset_and_type_eq,
-				NULL,
-				&objfile->objfile_obstack,
-				hashtab_obstack_allocate,
-				dummy_obstack_deallocate);
+      dwarf2_per_objfile->die_type_hash =
+	htab_create_alloc_ex (127,
+			      per_cu_offset_and_type_hash,
+			      per_cu_offset_and_type_eq,
+			      NULL,
+			      &objfile->objfile_obstack,
+			      hashtab_obstack_allocate,
+			      dummy_obstack_deallocate);
     }
 
+  ofs.per_cu = cu->per_cu;
   ofs.offset = die->offset;
   ofs.type = type;
-  slot = (struct dwarf2_offset_and_type **)
-    htab_find_slot_with_hash (*type_hash_ptr, &ofs, ofs.offset, INSERT);
+  slot = (struct dwarf2_per_cu_offset_and_type **)
+    htab_find_slot (dwarf2_per_objfile->die_type_hash, &ofs, INSERT);
   if (*slot)
     complaint (&symfile_complaints,
 	       _("A problem internal to GDB: DIE 0x%x has type already set"),
-	       die->offset);
+	       die->offset.sect_off);
   *slot = obstack_alloc (&objfile->objfile_obstack, sizeof (**slot));
   **slot = ofs;
   return type;
 }
 
-/* Look up the type for the die at DIE_OFFSET in the appropriate type_hash
+/* Look up the type for the die at OFFSET in the appropriate type_hash
    table, or return NULL if the die does not have a saved type.  */
 
 static struct type *
-get_die_type_at_offset (unsigned int offset,
+get_die_type_at_offset (sect_offset offset,
 			struct dwarf2_per_cu_data *per_cu)
 {
-  struct dwarf2_offset_and_type *slot, ofs;
-  htab_t type_hash;
+  struct dwarf2_per_cu_offset_and_type *slot, ofs;
 
-  if (per_cu->debug_types_section)
-    type_hash = dwarf2_per_objfile->debug_types_type_hash;
-  else
-    type_hash = dwarf2_per_objfile->debug_info_type_hash;
-  if (type_hash == NULL)
+  if (dwarf2_per_objfile->die_type_hash == NULL)
     return NULL;
 
+  ofs.per_cu = per_cu;
   ofs.offset = offset;
-  slot = htab_find_with_hash (type_hash, &ofs, ofs.offset);
+  slot = htab_find (dwarf2_per_objfile->die_type_hash, &ofs);
   if (slot)
     return slot->type;
   else
@@ -16354,7 +18311,7 @@ partial_die_hash (const void *item)
 {
   const struct partial_die_info *part_die = item;
 
-  return part_die->offset;
+  return part_die->offset.sect_off;
 }
 
 /* Trivial comparison function for partial_die_info structures: two DIEs
@@ -16366,7 +18323,7 @@ partial_die_eq (const void *item_lhs, const void *item_rhs)
   const struct partial_die_info *part_die_lhs = item_lhs;
   const struct partial_die_info *part_die_rhs = item_rhs;
 
-  return part_die_lhs->offset == part_die_rhs->offset;
+  return part_die_lhs->offset.sect_off == part_die_rhs->offset.sect_off;
 }
 
 static struct cmd_list_element *set_dwarf2_cmdlist;
@@ -16422,6 +18379,7 @@ dwarf2_per_objfile_free (struct objfile *objfile, void *d)
   munmap_section_buffer (&data->macro);
   munmap_section_buffer (&data->str);
   munmap_section_buffer (&data->ranges);
+  munmap_section_buffer (&data->addr);
   munmap_section_buffer (&data->frame);
   munmap_section_buffer (&data->eh_frame);
   munmap_section_buffer (&data->gdb_index);
@@ -16431,7 +18389,14 @@ dwarf2_per_objfile_free (struct objfile *objfile, void *d)
        ++ix)
     munmap_section_buffer (section);
 
+  for (ix = 0; ix < dwarf2_per_objfile->n_comp_units; ++ix)
+    VEC_free (dwarf2_per_cu_ptr,
+	      dwarf2_per_objfile->all_comp_units[ix]->s.imported_symtabs);
+
   VEC_free (dwarf2_section_info_def, data->types);
+
+  if (data->dwo_files)
+    free_dwo_files (data->dwo_files, objfile);
 }
 
 

@@ -16638,14 +18603,17 @@ hash_expand (struct mapped_symtab *symtab)
   xfree (old_entries);
 }
 
-/* Add an entry to SYMTAB.  NAME is the name of the symbol.  CU_INDEX
-   is the index of the CU in which the symbol appears.  */
+/* Add an entry to SYMTAB.  NAME is the name of the symbol.
+   CU_INDEX is the index of the CU in which the symbol appears.
+   IS_STATIC is one if the symbol is static, otherwise zero (global).  */
 
 static void
 add_index_entry (struct mapped_symtab *symtab, const char *name,
+		 int is_static, gdb_index_symbol_kind kind,
 		 offset_type cu_index)
 {
   struct symtab_index_entry **slot;
+  offset_type cu_index_and_attrs;
 
   ++symtab->n_elements;
   if (4 * symtab->n_elements / 3 >= symtab->size)
@@ -16656,13 +18624,76 @@ add_index_entry (struct mapped_symtab *symtab, const char *name,
     {
       *slot = XNEW (struct symtab_index_entry);
       (*slot)->name = name;
+      /* index_offset is set later.  */
       (*slot)->cu_indices = NULL;
     }
-  /* Don't push an index twice.  Due to how we add entries we only
-     have to check the last one.  */ 
-  if (VEC_empty (offset_type, (*slot)->cu_indices)
-      || VEC_last (offset_type, (*slot)->cu_indices) != cu_index)
-    VEC_safe_push (offset_type, (*slot)->cu_indices, cu_index);
+
+  cu_index_and_attrs = 0;
+  DW2_GDB_INDEX_CU_SET_VALUE (cu_index_and_attrs, cu_index);
+  DW2_GDB_INDEX_SYMBOL_STATIC_SET_VALUE (cu_index_and_attrs, is_static);
+  DW2_GDB_INDEX_SYMBOL_KIND_SET_VALUE (cu_index_and_attrs, kind);
+
+  /* We don't want to record an index value twice as we want to avoid the
+     duplication.
+     We process all global symbols and then all static symbols
+     (which would allow us to avoid the duplication by only having to check
+     the last entry pushed), but a symbol could have multiple kinds in one CU.
+     To keep things simple we don't worry about the duplication here and
+     sort and uniqufy the list after we've processed all symbols.  */
+  VEC_safe_push (offset_type, (*slot)->cu_indices, cu_index_and_attrs);
+}
+
+/* qsort helper routine for uniquify_cu_indices.  */
+
+static int
+offset_type_compare (const void *ap, const void *bp)
+{
+  offset_type a = *(offset_type *) ap;
+  offset_type b = *(offset_type *) bp;
+
+  return (a > b) - (b > a);
+}
+
+/* Sort and remove duplicates of all symbols' cu_indices lists.  */
+
+static void
+uniquify_cu_indices (struct mapped_symtab *symtab)
+{
+  int i;
+
+  for (i = 0; i < symtab->size; ++i)
+    {
+      struct symtab_index_entry *entry = symtab->data[i];
+
+      if (entry
+	  && entry->cu_indices != NULL)
+	{
+	  unsigned int next_to_insert, next_to_check;
+	  offset_type last_value;
+
+	  qsort (VEC_address (offset_type, entry->cu_indices),
+		 VEC_length (offset_type, entry->cu_indices),
+		 sizeof (offset_type), offset_type_compare);
+
+	  last_value = VEC_index (offset_type, entry->cu_indices, 0);
+	  next_to_insert = 1;
+	  for (next_to_check = 1;
+	       next_to_check < VEC_length (offset_type, entry->cu_indices);
+	       ++next_to_check)
+	    {
+	      if (VEC_index (offset_type, entry->cu_indices, next_to_check)
+		  != last_value)
+		{
+		  last_value = VEC_index (offset_type, entry->cu_indices,
+					  next_to_check);
+		  VEC_replace (offset_type, entry->cu_indices, next_to_insert,
+			       last_value);
+		  ++next_to_insert;
+		}
+	    }
+	  VEC_truncate (offset_type, entry->cu_indices, next_to_insert);
+	}
+    }
 }
 
 /* Add a vector of indices to the constant pool.  */
@@ -16821,8 +18852,6 @@ add_address_entry_worker (void *datap, CORE_ADDR start_addr, void *obj)
 {
   struct addrmap_index_data *data = datap;
   struct partial_symtab *pst = obj;
-  offset_type cu_index;
-  void **slot;
 
   if (data->previous_valid)
     add_address_entry (data->objfile, data->addr_obstack,
@@ -16878,6 +18907,44 @@ write_address_map (struct objfile *objfile, struct obstack *obstack,
 		       addrmap_index_data.previous_cu_index);
 }
 
+/* Return the symbol kind of PSYM.  */
+
+static gdb_index_symbol_kind
+symbol_kind (struct partial_symbol *psym)
+{
+  domain_enum domain = PSYMBOL_DOMAIN (psym);
+  enum address_class aclass = PSYMBOL_CLASS (psym);
+
+  switch (domain)
+    {
+    case VAR_DOMAIN:
+      switch (aclass)
+	{
+	case LOC_BLOCK:
+	  return GDB_INDEX_SYMBOL_KIND_FUNCTION;
+	case LOC_TYPEDEF:
+	  return GDB_INDEX_SYMBOL_KIND_TYPE;
+	case LOC_COMPUTED:
+	case LOC_CONST_BYTES:
+	case LOC_OPTIMIZED_OUT:
+	case LOC_STATIC:
+	  return GDB_INDEX_SYMBOL_KIND_VARIABLE;
+	case LOC_CONST:
+	  /* Note: It's currently impossible to recognize psyms as enum values
+	     short of reading the type info.  For now punt.  */
+	  return GDB_INDEX_SYMBOL_KIND_VARIABLE;
+	default:
+	  /* There are other LOC_FOO values that one might want to classify
+	     as variables, but dwarf2read.c doesn't currently use them.  */
+	  return GDB_INDEX_SYMBOL_KIND_OTHER;
+	}
+    case STRUCT_DOMAIN:
+      return GDB_INDEX_SYMBOL_KIND_TYPE;
+    default:
+      return GDB_INDEX_SYMBOL_KIND_OTHER;
+    }
+}
+
 /* Add a list of partial symbols to SYMTAB.  */
 
 static void
@@ -16890,29 +18957,21 @@ write_psymbols (struct mapped_symtab *symtab,
 {
   for (; count-- > 0; ++psymp)
     {
-      void **slot, *lookup;
+      struct partial_symbol *psym = *psymp;
+      void **slot;
 
-      if (SYMBOL_LANGUAGE (*psymp) == language_ada)
+      if (SYMBOL_LANGUAGE (psym) == language_ada)
 	error (_("Ada is not currently supported by the index"));
 
-      /* We only want to add a given psymbol once.  However, we also
-	 want to account for whether it is global or static.  So, we
-	 may add it twice, using slightly different values.  */
-      if (is_static)
-	{
-	  uintptr_t val = 1 | (uintptr_t) *psymp;
-
-	  lookup = (void *) val;
-	}
-      else
-	lookup = *psymp;
-
       /* Only add a given psymbol once.  */
-      slot = htab_find_slot (psyms_seen, lookup, INSERT);
+      slot = htab_find_slot (psyms_seen, psym, INSERT);
       if (!*slot)
 	{
-	  *slot = lookup;
-	  add_index_entry (symtab, SYMBOL_NATURAL_NAME (*psymp), cu_index);
+	  gdb_index_symbol_kind kind = symbol_kind (psym);
+
+	  *slot = psym;
+	  add_index_entry (symtab, SYMBOL_SEARCH_NAME (psym),
+			   is_static, kind, cu_index);
 	}
     }
 }
@@ -16974,9 +19033,11 @@ write_one_signatured_type (void **slot, void *d)
 		  psymtab->n_static_syms, info->cu_index,
 		  1);
 
-  store_unsigned_integer (val, 8, BFD_ENDIAN_LITTLE, entry->per_cu.offset);
+  store_unsigned_integer (val, 8, BFD_ENDIAN_LITTLE,
+			  entry->per_cu.offset.sect_off);
   obstack_grow (info->types_list, val, 8);
-  store_unsigned_integer (val, 8, BFD_ENDIAN_LITTLE, entry->type_offset);
+  store_unsigned_integer (val, 8, BFD_ENDIAN_LITTLE,
+			  entry->type_offset_in_tu.cu_off);
   obstack_grow (info->types_list, val, 8);
   store_unsigned_integer (val, 8, BFD_ENDIAN_LITTLE, entry->signature);
   obstack_grow (info->types_list, val, 8);
@@ -16986,6 +19047,35 @@ write_one_signatured_type (void **slot, void *d)
   return 1;
 }
 
+/* Recurse into all "included" dependencies and write their symbols as
+   if they appeared in this psymtab.  */
+
+static void
+recursively_write_psymbols (struct objfile *objfile,
+			    struct partial_symtab *psymtab,
+			    struct mapped_symtab *symtab,
+			    htab_t psyms_seen,
+			    offset_type cu_index)
+{
+  int i;
+
+  for (i = 0; i < psymtab->number_of_dependencies; ++i)
+    if (psymtab->dependencies[i]->user != NULL)
+      recursively_write_psymbols (objfile, psymtab->dependencies[i],
+				  symtab, psyms_seen, cu_index);
+
+  write_psymbols (symtab,
+		  psyms_seen,
+		  objfile->global_psymbols.list + psymtab->globals_offset,
+		  psymtab->n_global_syms, cu_index,
+		  0);
+  write_psymbols (symtab,
+		  psyms_seen,
+		  objfile->static_psymbols.list + psymtab->statics_offset,
+		  psymtab->n_static_syms, cu_index,
+		  1);
+}
+
 /* Create an index file for OBJFILE in the directory DIR.  */
 
 static void
@@ -17000,7 +19090,6 @@ write_psymtabs_to_index (struct objfile *objfile, const char *dir)
   struct mapped_symtab *symtab;
   offset_type val, size_of_contents, total_len;
   struct stat st;
-  char buf[8];
   htab_t psyms_seen;
   htab_t cu_index_htab;
   struct psymtab_cu_index_map *psymtab_cu_index_map;
@@ -17070,16 +19159,8 @@ write_psymtabs_to_index (struct objfile *objfile, const char *dir)
       struct psymtab_cu_index_map *map;
       void **slot;
 
-      write_psymbols (symtab,
-		      psyms_seen,
-		      objfile->global_psymbols.list + psymtab->globals_offset,
-		      psymtab->n_global_syms, i,
-		      0);
-      write_psymbols (symtab,
-		      psyms_seen,
-		      objfile->static_psymbols.list + psymtab->statics_offset,
-		      psymtab->n_static_syms, i,
-		      1);
+      if (psymtab->user == NULL)
+	recursively_write_psymbols (objfile, psymtab, symtab, psyms_seen, i);
 
       map = &psymtab_cu_index_map[i];
       map->psymtab = psymtab;
@@ -17089,7 +19170,8 @@ write_psymtabs_to_index (struct objfile *objfile, const char *dir)
       gdb_assert (*slot == NULL);
       *slot = map;
 
-      store_unsigned_integer (val, 8, BFD_ENDIAN_LITTLE, per_cu->offset);
+      store_unsigned_integer (val, 8, BFD_ENDIAN_LITTLE,
+			      per_cu->offset.sect_off);
       obstack_grow (&cu_list, val, 8);
       store_unsigned_integer (val, 8, BFD_ENDIAN_LITTLE, per_cu->length);
       obstack_grow (&cu_list, val, 8);
@@ -17112,6 +19194,10 @@ write_psymtabs_to_index (struct objfile *objfile, const char *dir)
 			      write_one_signatured_type, &sig_data);
     }
 
+  /* Now that we've processed all symbols we can shrink their cu_indices
+     lists.  */
+  uniquify_cu_indices (symtab);
+
   obstack_init (&constant_pool);
   make_cleanup_obstack_free (&constant_pool);
   obstack_init (&symtab_obstack);
@@ -17124,7 +19210,7 @@ write_psymtabs_to_index (struct objfile *objfile, const char *dir)
   total_len = size_of_contents;
 
   /* The version number.  */
-  val = MAYBE_SWAP (5);
+  val = MAYBE_SWAP (7);
   obstack_grow (&contents, &val, sizeof (val));
 
   /* The offset of the CU list from the start of the file.  */
@@ -17277,6 +19363,15 @@ conversational style, when possible."),
 			   &set_dwarf2_cmdlist,
 			   &show_dwarf2_cmdlist);
 
+  add_setshow_boolean_cmd ("dwarf2-read", no_class, &dwarf2_read_debug, _("\
+Set debugging of the dwarf2 reader."), _("\
+Show debugging of the dwarf2 reader."), _("\
+When enabled, debugging messages are printed during dwarf2 reading\n\
+and symtab expansion."),
+			    NULL,
+			    NULL,
+			    &setdebuglist, &showdebuglist);
+
   add_setshow_zinteger_cmd ("dwarf2-die", no_class, &dwarf2_die_debug, _("\
 Set debugging of the dwarf2 DIE reader."), _("\
 Show debugging of the dwarf2 DIE reader."), _("\
@@ -17294,6 +19389,18 @@ the demangler."),
 			   NULL, show_check_physname,
 			   &setdebuglist, &showdebuglist);
 
+  add_setshow_boolean_cmd ("use-deprecated-index-sections",
+			   no_class, &use_deprecated_index_sections, _("\
+Set whether to use deprecated gdb_index sections."), _("\
+Show whether to use deprecated gdb_index sections."), _("\
+When enabled, deprecated .gdb_index sections are used anyway.\n\
+Normally they are ignored either because of a missing feature or\n\
+performance issue.\n\
+Warning: This option must be enabled before gdb reads the file."),
+			   NULL,
+			   NULL,
+			   &setlist, &showlist);
+
   c = add_cmd ("gdb-index", class_files, save_gdb_index_command,
 	       _("\
 Save a gdb-index file.\n\
diff --git a/gdb/elfread.c b/gdb/elfread.c
index ca1c2a9..1edfb27 100644
--- a/gdb/elfread.c
+++ b/gdb/elfread.c
@@ -36,11 +36,14 @@
 #include "demangle.h"
 #include "psympriv.h"
 #include "filenames.h"
+#include "probe.h"
+#include "arch-utils.h"
 #include "gdbtypes.h"
 #include "value.h"
 #include "infcall.h"
 #include "gdbthread.h"
 #include "regcache.h"
+#include "bcache.h"
 
 extern void _initialize_elfread (void);
 
@@ -59,6 +62,10 @@ struct elfinfo
     asection *mdebugsect;	/* Section pointer for .mdebug section */
   };
 
+/* Per-objfile data for probe info.  */
+
+static const struct objfile_data *probe_key = NULL;
+
 static void free_elfinfo (void *);
 
 /* Minimal symbols located at the GOT entries for .plt - that is the real
@@ -141,7 +148,7 @@ elf_symfile_segments (bfd *abfd)
 	 binaries are not relocatable.  */
       if (bfd_get_section_size (sect) > 0 && j == num_segments
 	  && (bfd_get_section_flags (abfd, sect) & SEC_LOAD) != 0)
-	warning (_("Loadable segment \"%s\" outside of ELF segments"),
+	warning (_("Loadable section \"%s\" outside of ELF segments"),
 		 bfd_section_name (abfd, sect));
     }
 
@@ -238,8 +245,8 @@ elf_symtab_read (struct objfile *objfile, int type,
      seen any section info for it yet.  */
   asymbol *filesym = 0;
   /* Name of filesym.  This is either a constant string or is saved on
-     the objfile's obstack.  */
-  char *filesymname = "";
+     the objfile's filename cache.  */
+  const char *filesymname = "";
   struct dbx_symfile_info *dbx = objfile->deprecated_sym_stab_info;
   int stripped = (bfd_get_symcount (objfile->obfd) == 0);
 
@@ -265,7 +272,7 @@ elf_symtab_read (struct objfile *objfile, int type,
 
       offset = ANOFFSET (objfile->section_offsets, sym->section->index);
       if (type == ST_DYNAMIC
-	  && sym->section == &bfd_und_section
+	  && sym->section == bfd_und_section_ptr
 	  && (sym->flags & BSF_FUNCTION))
 	{
 	  struct minimal_symbol *msym;
@@ -301,6 +308,23 @@ elf_symtab_read (struct objfile *objfile, int type,
 	  if (!sect)
 	    continue;
 
+	  /* On ia64-hpux, we have discovered that the system linker
+	     adds undefined symbols with nonzero addresses that cannot
+	     be right (their address points inside the code of another
+	     function in the .text section).  This creates problems
+	     when trying to determine which symbol corresponds to
+	     a given address.
+
+	     We try to detect those buggy symbols by checking which
+	     section we think they correspond to.  Normally, PLT symbols
+	     are stored inside their own section, and the typical name
+	     for that section is ".plt".  So, if there is a ".plt"
+	     section, and yet the section name of our symbol does not
+	     start with ".plt", we ignore that symbol.  */
+	  if (strncmp (sect->name, ".plt", 4) != 0
+	      && bfd_get_section_by_name (abfd, ".plt") != NULL)
+	    continue;
+
 	  symaddr += ANOFFSET (objfile->section_offsets, sect->index);
 
 	  msym = record_minimal_symbol
@@ -327,9 +351,8 @@ elf_symtab_read (struct objfile *objfile, int type,
 	      sectinfo = NULL;
 	    }
 	  filesym = sym;
-	  filesymname =
-	    obsavestring ((char *) filesym->name, strlen (filesym->name),
-			  &objfile->objfile_obstack);
+	  filesymname = bcache (filesym->name, strlen (filesym->name) + 1,
+				objfile->filename_cache);
 	}
       else if (sym->flags & BSF_SECTION_SYM)
 	continue;
@@ -344,7 +367,7 @@ elf_symtab_read (struct objfile *objfile, int type,
 	  symaddr = sym->value + sym->section->vma;
 	  /* Relocate all non-absolute and non-TLS symbols by the
 	     section offset.  */
-	  if (sym->section != &bfd_abs_section
+	  if (sym->section != bfd_abs_section_ptr
 	      && !(sym->section->flags & SEC_THREAD_LOCAL))
 	    {
 	      symaddr += offset;
@@ -352,7 +375,7 @@ elf_symtab_read (struct objfile *objfile, int type,
 	  /* For non-absolute symbols, use the type of the section
 	     they are relative to, to intuit text/data.  Bfd provides
 	     no way of figuring this out for absolute symbols.  */
-	  if (sym->section == &bfd_abs_section)
+	  if (sym->section == bfd_abs_section_ptr)
 	    {
 	      /* This is a hack to get the minimal symbol type
 		 right for Irix 5, which has absolute addresses
@@ -494,7 +517,7 @@ elf_symtab_read (struct objfile *objfile, int type,
 		      symaddr = sym->value + sym->section->vma;
 		      /* Relocate non-absolute symbols by the
 			 section offset.  */
-		      if (sym->section != &bfd_abs_section)
+		      if (sym->section != bfd_abs_section_ptr)
 			symaddr += offset;
 		      sectinfo->sections[special_local_sect] = symaddr;
 		      /* The special local symbols don't go in the
@@ -571,6 +594,7 @@ elf_symtab_read (struct objfile *objfile, int type,
 		  if (mtramp)
 		    {
 		      MSYMBOL_SIZE (mtramp) = MSYMBOL_SIZE (msym);
+		      mtramp->created_by_gdb = 1;
 		      mtramp->filename = filesymname;
 		      gdbarch_elf_make_msymbol_special (gdbarch, sym, mtramp);
 		    }
@@ -593,7 +617,6 @@ elf_rel_plt_read (struct objfile *objfile, asymbol **dyn_symbol_table)
   bfd *obfd = objfile->obfd;
   const struct elf_backend_data *bed = get_elf_backend_data (obfd);
   asection *plt, *relplt, *got_plt;
-  unsigned u;
   int plt_elf_idx;
   bfd_size_type reloc_count, reloc;
   char *string_buffer = NULL;
@@ -632,7 +655,7 @@ elf_rel_plt_read (struct objfile *objfile, asymbol **dyn_symbol_table)
   reloc_count = relplt->size / elf_section_data (relplt)->this_hdr.sh_entsize;
   for (reloc = 0; reloc < reloc_count; reloc++)
     {
-      const char *name, *name_got_plt;
+      const char *name;
       struct minimal_symbol *msym;
       CORE_ADDR address;
       const size_t got_suffix_len = strlen (SYMBOL_GOT_PLT_SUFFIX);
@@ -903,7 +926,7 @@ elf_gnu_ifunc_resolve_name (const char *name, CORE_ADDR *addr_p)
 static CORE_ADDR
 elf_gnu_ifunc_resolve_addr (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
-  char *name_at_pc;
+  const char *name_at_pc;
   CORE_ADDR start_at_pc, address;
   struct type *func_func_type = builtin_type (gdbarch)->builtin_func_func;
   struct value *function, *address_val;
@@ -978,6 +1001,9 @@ elf_gnu_ifunc_resolver_stop (struct breakpoint *b)
 					   prev_frame_id,
 					   bp_gnu_ifunc_resolver_return);
 
+      /* set_momentary_breakpoint invalidates PREV_FRAME.  */
+      prev_frame = NULL;
+
       /* Add new b_return to the ring list b->related_breakpoint.  */
       gdb_assert (b_return->related_breakpoint == b_return);
       b_return->related_breakpoint = b->related_breakpoint;
@@ -994,6 +1020,7 @@ elf_gnu_ifunc_resolver_return_stop (struct breakpoint *b)
   struct type *func_func_type = builtin_type (gdbarch)->builtin_func_func;
   struct type *value_type = TYPE_TARGET_TYPE (func_func_type);
   struct regcache *regcache = get_thread_regcache (inferior_ptid);
+  struct value *func_func;
   struct value *value;
   CORE_ADDR resolved_address, resolved_pc;
   struct symtab_and_line sal;
@@ -1001,14 +1028,6 @@ elf_gnu_ifunc_resolver_return_stop (struct breakpoint *b)
 
   gdb_assert (b->type == bp_gnu_ifunc_resolver_return);
 
-  value = allocate_value (value_type);
-  gdbarch_return_value (gdbarch, func_func_type, value_type, regcache,
-			value_contents_raw (value), NULL);
-  resolved_address = value_as_address (value);
-  resolved_pc = gdbarch_convert_from_func_ptr_addr (gdbarch,
-						    resolved_address,
-						    &current_target);
-
   while (b->related_breakpoint != b)
     {
       struct breakpoint *b_next = b->related_breakpoint;
@@ -1029,6 +1048,18 @@ elf_gnu_ifunc_resolver_return_stop (struct breakpoint *b)
       b = b_next;
     }
   gdb_assert (b->type == bp_gnu_ifunc_resolver);
+  gdb_assert (b->loc->next == NULL);
+
+  func_func = allocate_value (func_func_type);
+  set_value_address (func_func, b->loc->related_address);
+
+  value = allocate_value (value_type);
+  gdbarch_return_value (gdbarch, func_func, value_type, regcache,
+			value_contents_raw (value), NULL);
+  resolved_address = value_as_address (value);
+  resolved_pc = gdbarch_convert_from_func_ptr_addr (gdbarch,
+						    resolved_address,
+						    &current_target);
 
   gdb_assert (current_program_space == b->pspace || b->pspace == NULL);
   elf_gnu_ifunc_record_cache (b->addr_string, resolved_pc);
@@ -1103,6 +1134,9 @@ static char *
 build_id_to_debug_filename (struct build_id *build_id)
 {
   char *link, *debugdir, *retval = NULL;
+  VEC (char_ptr) *debugdir_vec;
+  struct cleanup *back_to;
+  int ix;
 
   /* DEBUG_FILE_DIRECTORY/.build-id/ab/cdef */
   link = alloca (strlen (debug_file_directory) + (sizeof "/.build-id/" - 1) + 1
@@ -1111,22 +1145,18 @@ build_id_to_debug_filename (struct build_id *build_id)
   /* Keep backward compatibility so that DEBUG_FILE_DIRECTORY being "" will
      cause "/.build-id/..." lookups.  */
 
-  debugdir = debug_file_directory;
-  do
+  debugdir_vec = dirnames_to_char_ptr_vec (debug_file_directory);
+  back_to = make_cleanup_free_char_ptr_vec (debugdir_vec);
+
+  for (ix = 0; VEC_iterate (char_ptr, debugdir_vec, ix, debugdir); ++ix)
     {
-      char *s, *debugdir_end;
+      size_t debugdir_len = strlen (debugdir);
       gdb_byte *data = build_id->data;
       size_t size = build_id->size;
+      char *s;
 
-      while (*debugdir == DIRNAME_SEPARATOR)
-	debugdir++;
-
-      debugdir_end = strchr (debugdir, DIRNAME_SEPARATOR);
-      if (debugdir_end == NULL)
-	debugdir_end = &debugdir[strlen (debugdir)];
-
-      memcpy (link, debugdir, debugdir_end - debugdir);
-      s = &link[debugdir_end - debugdir];
+      memcpy (link, debugdir, debugdir_len);
+      s = &link[debugdir_len];
       s += sprintf (s, "/.build-id/");
       if (size > 0)
 	{
@@ -1151,11 +1181,9 @@ build_id_to_debug_filename (struct build_id *build_id)
 
       if (retval != NULL)
 	break;
-
-      debugdir = debugdir_end;
     }
-  while (*debugdir != 0);
 
+  do_cleanups (back_to);
   return retval;
 }
 
@@ -1223,6 +1251,13 @@ elf_symfile_read (struct objfile *objfile, int symfile_flags)
   asymbol **symbol_table = NULL, **dyn_symbol_table = NULL;
   asymbol *synthsyms;
 
+  if (symtab_create_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+			  "Reading minimal symbols of objfile %s ...\n",
+			  objfile->name);
+    }
+
   init_minimal_symbol_collection ();
   back_to = make_cleanup_discard_minimal_symbols ();
 
@@ -1415,6 +1450,9 @@ elf_symfile_read (struct objfile *objfile, int symfile_flags)
 	  xfree (debugfile);
 	}
     }
+
+  if (symtab_create_debug)
+    fprintf_unfiltered (gdb_stdlog, "Done reading minimal symbols.\n");
 }
 
 /* Callback to lazily read psymtabs.  */
@@ -1559,7 +1597,117 @@ elfstab_offset_sections (struct objfile *objfile, struct partial_symtab *pst)
     complaint (&symfile_complaints,
 	       _("elf/stab section information missing for %s"), filename);
 }
+
+/* Implementation of `sym_get_probes', as documented in symfile.h.  */
+
+static VEC (probe_p) *
+elf_get_probes (struct objfile *objfile)
+{
+  VEC (probe_p) *probes_per_objfile;
+
+  /* Have we parsed this objfile's probes already?  */
+  probes_per_objfile = objfile_data (objfile, probe_key);
+
+  if (!probes_per_objfile)
+    {
+      int ix;
+      const struct probe_ops *probe_ops;
+
+      /* Here we try to gather information about all types of probes from the
+	 objfile.  */
+      for (ix = 0; VEC_iterate (probe_ops_cp, all_probe_ops, ix, probe_ops);
+	   ix++)
+	probe_ops->get_probes (&probes_per_objfile, objfile);
+
+      if (probes_per_objfile == NULL)
+	{
+	  VEC_reserve (probe_p, probes_per_objfile, 1);
+	  gdb_assert (probes_per_objfile != NULL);
+	}
+
+      set_objfile_data (objfile, probe_key, probes_per_objfile);
+    }
+
+  return probes_per_objfile;
+}
+
+/* Implementation of `sym_get_probe_argument_count', as documented in
+   symfile.h.  */
+
+static unsigned
+elf_get_probe_argument_count (struct objfile *objfile,
+			      struct probe *probe)
+{
+  return probe->pops->get_probe_argument_count (probe, objfile);
+}
+
+/* Implementation of `sym_evaluate_probe_argument', as documented in
+   symfile.h.  */
+
+static struct value *
+elf_evaluate_probe_argument (struct objfile *objfile,
+			     struct probe *probe,
+			     unsigned n)
+{
+  return probe->pops->evaluate_probe_argument (probe, objfile, n);
+}
+
+/* Implementation of `sym_compile_to_ax', as documented in symfile.h.  */
+
+static void
+elf_compile_to_ax (struct objfile *objfile,
+		   struct probe *probe,
+		   struct agent_expr *expr,
+		   struct axs_value *value,
+		   unsigned n)
+{
+  probe->pops->compile_to_ax (probe, objfile, expr, value, n);
+}
+
+/* Implementation of `sym_relocate_probe', as documented in symfile.h.  */
+
+static void
+elf_symfile_relocate_probe (struct objfile *objfile,
+			    struct section_offsets *new_offsets,
+			    struct section_offsets *delta)
+{
+  int ix;
+  VEC (probe_p) *probes = objfile_data (objfile, probe_key);
+  struct probe *probe;
+
+  for (ix = 0; VEC_iterate (probe_p, probes, ix, probe); ix++)
+    probe->pops->relocate (probe, ANOFFSET (delta, SECT_OFF_TEXT (objfile)));
+}
+
+/* Helper function used to free the space allocated for storing SystemTap
+   probe information.  */
+
+static void
+probe_key_free (struct objfile *objfile, void *d)
+{
+  int ix;
+  VEC (probe_p) *probes = d;
+  struct probe *probe;
+
+  for (ix = 0; VEC_iterate (probe_p, probes, ix, probe); ix++)
+    probe->pops->destroy (probe);
+
+  VEC_free (probe_p, probes);
+}
+
 

+
+/* Implementation `sym_probe_fns', as documented in symfile.h.  */
+
+static const struct sym_probe_fns elf_probe_fns =
+{
+  elf_get_probes,		/* sym_get_probes */
+  elf_get_probe_argument_count,	/* sym_get_probe_argument_count */
+  elf_evaluate_probe_argument,	/* sym_evaluate_probe_argument */
+  elf_compile_to_ax,		/* sym_compile_to_ax */
+  elf_symfile_relocate_probe,	/* sym_relocate_probe */
+};
+
 /* Register that we are able to handle ELF object file formats.  */
 
 static const struct sym_fns elf_sym_fns =
@@ -1574,6 +1722,7 @@ static const struct sym_fns elf_sym_fns =
   elf_symfile_segments,		/* Get segment information from a file.  */
   NULL,
   default_symfile_relocate,	/* Relocate a debug section.  */
+  &elf_probe_fns,		/* sym_probe_fns */
   &psym_functions
 };
 
@@ -1592,6 +1741,7 @@ static const struct sym_fns elf_sym_fns_lazy_psyms =
   elf_symfile_segments,		/* Get segment information from a file.  */
   NULL,
   default_symfile_relocate,	/* Relocate a debug section.  */
+  &elf_probe_fns,		/* sym_probe_fns */
   &psym_functions
 };
 
@@ -1609,6 +1759,7 @@ static const struct sym_fns elf_sym_fns_gdb_index =
   elf_symfile_segments,		/* Get segment information from a file.  */
   NULL,
   default_symfile_relocate,	/* Relocate a debug section.  */
+  &elf_probe_fns,		/* sym_probe_fns */
   &dwarf2_gdb_index_functions
 };
 
@@ -1625,6 +1776,7 @@ static const struct gnu_ifunc_fns elf_gnu_ifunc_fns =
 void
 _initialize_elfread (void)
 {
+  probe_key = register_objfile_data_with_cleanup (NULL, probe_key_free);
   add_symtab_fns (&elf_sym_fns);
 
   elf_objfile_gnu_ifunc_cache_data = register_objfile_data ();
diff --git a/gdb/eval.c b/gdb/eval.c
index d48b450..7d3a8b9 100644
--- a/gdb/eval.c
+++ b/gdb/eval.c
@@ -41,7 +41,6 @@
 #include "gdb_obstack.h"
 #include "objfiles.h"
 #include "python/python.h"
-#include "wrapper.h"
 
 #include "gdb_assert.h"
 
@@ -126,7 +125,7 @@ parse_and_eval (char *exp)
 struct value *
 parse_to_comma_and_eval (char **expp)
 {
-  struct expression *expr = parse_exp_1 (expp, (struct block *) 0, 1);
+  struct expression *expr = parse_exp_1 (expp, 0, (struct block *) 0, 1);
   struct value *val;
   struct cleanup *old_chain =
     make_cleanup (free_current_contents, &expr);
@@ -234,9 +233,21 @@ fetch_subexp_value (struct expression *exp, int *pc, struct value **valp,
 
   /* Make sure it's not lazy, so that after the target stops again we
      have a non-lazy previous value to compare with.  */
-  if (result != NULL
-      && (!value_lazy (result) || gdb_value_fetch_lazy (result)))
-    *valp = result;
+  if (result != NULL)
+    {
+      if (!value_lazy (result))
+	*valp = result;
+      else
+	{
+	  volatile struct gdb_exception except;
+
+	  TRY_CATCH (except, RETURN_MASK_ERROR)
+	    {
+	      value_fetch_lazy (result);
+	      *valp = result;
+	    }
+	}
+    }
 
   if (val_chain)
     {
@@ -324,7 +335,8 @@ evaluate_struct_tuple (struct value *struct_val,
 	      for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type);
 		   fieldno++)
 		{
-		  char *field_name = TYPE_FIELD_NAME (struct_type, fieldno);
+		  const char *field_name =
+		    TYPE_FIELD_NAME (struct_type, fieldno);
 
 		  if (field_name != NULL && strcmp (field_name, label) == 0)
 		    {
@@ -337,7 +349,8 @@ evaluate_struct_tuple (struct value *struct_val,
 	      for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type);
 		   fieldno++)
 		{
-		  char *field_name = TYPE_FIELD_NAME (struct_type, fieldno);
+		  const char *field_name =
+		    TYPE_FIELD_NAME (struct_type, fieldno);
 
 		  field_type = TYPE_FIELD_TYPE (struct_type, fieldno);
 		  if ((field_name == 0 || *field_name == '\0')
@@ -756,6 +769,23 @@ make_params (int num_types, struct type **param_types)
   TYPE_CODE (type) = TYPE_CODE_METHOD;
   TYPE_VPTR_FIELDNO (type) = -1;
   TYPE_CHAIN (type) = type;
+  if (num_types > 0)
+    {
+      if (param_types[num_types - 1] == NULL)
+	{
+	  --num_types;
+	  TYPE_VARARGS (type) = 1;
+	}
+      else if (TYPE_CODE (check_typedef (param_types[num_types - 1]))
+	       == TYPE_CODE_VOID)
+	{
+	  --num_types;
+	  /* Caller should have ensured this.  */
+	  gdb_assert (num_types == 0);
+	  TYPE_PROTOTYPED (type) = 1;
+	}
+    }
+
   TYPE_NFIELDS (type) = num_types;
   TYPE_FIELDS (type) = (struct field *)
     TYPE_ZALLOC (type, sizeof (struct field) * num_types);
@@ -780,7 +810,7 @@ evaluate_subexp_standard (struct type *expect_type,
   struct type *type;
   int nargs;
   struct value **argvec;
-  int upper, lower;
+  int lower;
   int code;
   int ix;
   long mem_offset;
@@ -1345,8 +1375,7 @@ evaluate_subexp_standard (struct type *expect_type,
 		  val_type = expect_type;
 	      }
 
-	    struct_return = using_struct_return (exp->gdbarch,
-						 value_type (method),
+	    struct_return = using_struct_return (exp->gdbarch, method,
 						 val_type);
 	  }
 	else if (expect_type != NULL)
@@ -1988,16 +2017,10 @@ evaluate_subexp_standard (struct type *expect_type,
         if (opts.objectprint && TYPE_TARGET_TYPE(type)
             && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_CLASS))
           {
-            real_type = value_rtti_target_type (arg1, &full, &top, &using_enc);
+            real_type = value_rtti_indirect_type (arg1, &full, &top,
+						  &using_enc);
             if (real_type)
-              {
-                if (TYPE_CODE (type) == TYPE_CODE_PTR)
-                  real_type = lookup_pointer_type (real_type);
-                else
-                  real_type = lookup_reference_type (real_type);
-
                 arg1 = value_cast (real_type, arg1);
-              }
           }
       }
 
@@ -2041,8 +2064,8 @@ evaluate_subexp_standard (struct type *expect_type,
 
 	case TYPE_CODE_MEMBERPTR:
 	  /* Now, convert these values to an address.  */
-	  arg1 = value_cast (lookup_pointer_type (TYPE_DOMAIN_TYPE (type)),
-			     arg1);
+	  arg1 = value_cast_pointers (lookup_pointer_type (TYPE_DOMAIN_TYPE (type)),
+				      arg1, 1);
 
 	  mem_offset = value_as_long (arg2);
 
diff --git a/gdb/exceptions.c b/gdb/exceptions.c
index 2ac1283..7db9df9 100644
--- a/gdb/exceptions.c
+++ b/gdb/exceptions.c
@@ -66,6 +66,22 @@ struct catcher
 /* Where to go for throw_exception().  */
 static struct catcher *current_catcher;
 
+/* Return length of current_catcher list.  */
+
+static int
+catcher_list_size (void)
+{
+  int size;
+  struct catcher *catcher;
+
+  for (size = 0, catcher = current_catcher;
+       catcher != NULL;
+       catcher = catcher->prev)
+    ++size;
+
+  return size;
+}
+
 EXCEPTIONS_SIGJMP_BUF *
 exceptions_state_mc_init (volatile struct gdb_exception *exception,
 			  return_mask mask)
@@ -208,7 +224,7 @@ throw_exception (struct gdb_exception exception)
   quit_flag = 0;
   immediate_quit = 0;
 
-  do_cleanups (ALL_CLEANUPS);
+  do_cleanups (all_cleanups ());
 
   /* Jump to the containing catch_errors() call, communicating REASON
      to that call via setjmp's return value.  Note that REASON can't
@@ -218,8 +234,6 @@ throw_exception (struct gdb_exception exception)
   EXCEPTIONS_SIGLONGJMP (current_catcher->buf, exception.reason);
 }
 
-static char *last_message;
-
 void
 deprecated_throw_reason (enum return_reason reason)
 {
@@ -357,23 +371,53 @@ print_any_exception (struct ui_file *file, const char *prefix,
     }
 }
 
+/* A stack of exception messages.
+   This is needed to handle nested calls to throw_it: we don't want to
+   xfree space for a message before it's used.
+   This can happen if we throw an exception during a cleanup:
+   An outer TRY_CATCH may have an exception message it wants to print,
+   but while doing cleanups further calls to throw_it are made.
+
+   This is indexed by the size of the current_catcher list.
+   It is a dynamically allocated array so that we don't care how deeply
+   GDB nests its TRY_CATCHs.  */
+static char **exception_messages;
+
+/* The number of currently allocated entries in exception_messages.  */
+static int exception_messages_size;
+
 static void ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (3, 0)
 throw_it (enum return_reason reason, enum errors error, const char *fmt,
 	  va_list ap)
 {
   struct gdb_exception e;
   char *new_message;
+  int depth = catcher_list_size ();
+
+  gdb_assert (depth > 0);
 
-  /* Save the message.  Create the new message before deleting the
-     old, the new message may include the old message text.  */
+  /* Note: The new message may use an old message's text.  */
   new_message = xstrvprintf (fmt, ap);
-  xfree (last_message);
-  last_message = new_message;
+
+  if (depth > exception_messages_size)
+    {
+      int old_size = exception_messages_size;
+
+      exception_messages_size = depth + 10;
+      exception_messages = (char **) xrealloc (exception_messages,
+					       exception_messages_size
+					       * sizeof (char *));
+      memset (exception_messages + old_size, 0,
+	      (exception_messages_size - old_size) * sizeof (char *));
+    }
+
+  xfree (exception_messages[depth - 1]);
+  exception_messages[depth - 1] = new_message;
 
   /* Create the exception.  */
   e.reason = reason;
   e.error = error;
-  e.message = last_message;
+  e.message = new_message;
 
   /* Throw the exception.  */
   throw_exception (e);
diff --git a/gdb/exec.c b/gdb/exec.c
index cd129f7..6ba1986 100644
--- a/gdb/exec.c
+++ b/gdb/exec.c
@@ -238,7 +238,6 @@ exec_file_attach (char *filename, int from_tty)
 
       if (!exec_bfd)
 	{
-	  close (scratch_chan);
 	  error (_("\"%s\": could not open as an executable file: %s"),
 		 scratch_pathname, bfd_errmsg (bfd_get_error ()));
 	}
@@ -667,7 +666,7 @@ section_table_xfer_memory_partial (gdb_byte *readbuf, const gdb_byte *writebuf,
   return 0;			/* We can't help.  */
 }
 
-struct target_section_table *
+static struct target_section_table *
 exec_get_section_table (struct target_ops *ops)
 {
   return current_target_sections;
@@ -761,7 +760,10 @@ print_section_info (struct target_section_table *t, bfd *abfd)
 static void
 exec_files_info (struct target_ops *t)
 {
-  print_section_info (current_target_sections, exec_bfd);
+  if (exec_bfd)
+    print_section_info (current_target_sections, exec_bfd);
+  else
+    puts_filtered (_("\t<no file loaded>\n"));
 
   if (vmap)
     {
@@ -813,9 +815,9 @@ set_section_command (char *args, int from_tty)
   table = current_target_sections;
   for (p = table->sections; p < table->sections_end; p++)
     {
-      if (!strncmp (secname, bfd_section_name (exec_bfd,
+      if (!strncmp (secname, bfd_section_name (p->bfd,
 					       p->the_bfd_section), seclen)
-	  && bfd_section_name (exec_bfd, p->the_bfd_section)[seclen] == '\0')
+	  && bfd_section_name (p->bfd, p->the_bfd_section)[seclen] == '\0')
 	{
 	  offset = secaddr - p->addr;
 	  p->addr += offset;
diff --git a/gdb/expprint.c b/gdb/expprint.c
index d9d9b8f..6915d43 100644
--- a/gdb/expprint.c
+++ b/gdb/expprint.c
@@ -136,8 +136,6 @@ print_subexp_standard (struct expression *exp, int *pos,
 
     case OP_VAR_ENTRY_VALUE:
       {
-	struct block *b;
-
 	(*pos) += 2;
 	fprintf_filtered (stream, "%s at entry",
 			  SYMBOL_PRINT_NAME (exp->elts[pc + 1].symbol));
@@ -647,12 +645,11 @@ op_string (enum exp_opcode op)
 /* Support for dumping the raw data from expressions in a human readable
    form.  */
 
-static char *op_name (struct expression *, enum exp_opcode);
 static int dump_subexp_body (struct expression *exp, struct ui_file *, int);
 
 /* Name for OPCODE, when it appears in expression EXP.  */
 
-static char *
+char *
 op_name (struct expression *exp, enum exp_opcode opcode)
 {
   return exp->language_defn->la_exp_desc->op_name (opcode);
@@ -975,7 +972,6 @@ dump_subexp_body_standard (struct expression *exp,
       break;
     case TYPE_INSTANCE:
       {
-	char *elem_name;
 	LONGEST len;
 
 	len = exp->elts[elt++].longconst;
diff --git a/gdb/expression.h b/gdb/expression.h
index be26002..004a60e 100644
--- a/gdb/expression.h
+++ b/gdb/expression.h
@@ -100,7 +100,8 @@ extern struct expression *parse_expression (char *);
 
 extern struct type *parse_field_expression (char *, char **);
 
-extern struct expression *parse_exp_1 (char **, struct block *, int);
+extern struct expression *parse_exp_1 (char **, CORE_ADDR pc, struct block *,
+				       int);
 
 /* For use by parsers; set if we want to parse an expression and
    attempt to complete a field name.  */
@@ -137,6 +138,8 @@ extern struct value *evaluate_subexp_standard
 
 extern void print_expression (struct expression *, struct ui_file *);
 
+extern char *op_name (struct expression *exp, enum exp_opcode opcode);
+
 extern char *op_string (enum exp_opcode);
 
 extern void dump_raw_expression (struct expression *,
diff --git a/gdb/f-exp.c b/gdb/f-exp.c
index 68c4652..e550a62 100644
--- a/gdb/f-exp.c
+++ b/gdb/f-exp.c
@@ -202,6 +202,12 @@
 #define yygindex f_yygindex
 #define yytable	 f_yytable
 #define yycheck	 f_yycheck
+#define yyss	f_yyss
+#define yysslim	f_yysslim
+#define yyssp	f_yyssp
+#define yystacksize f_yystacksize
+#define yyvs	f_yyvs
+#define yyvsp	f_yyvsp
 
 #ifndef YYDEBUG
 #define	YYDEBUG	1		/* Default to yydebug support */
@@ -235,7 +241,7 @@ static int match_string_literal (void);
 #endif
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 132 "f-exp.y"
+#line 138 "f-exp.y"
 typedef union YYSTYPE {
     LONGEST lval;
     struct {
@@ -257,7 +263,7 @@ typedef union YYSTYPE {
     int *ivec;
   } YYSTYPE;
 /* Line 191 of yacc.c.  */
-#line 261 "f-exp.c"
+#line 267 "f-exp.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -266,14 +272,14 @@ typedef union YYSTYPE {
 
 
 /* Copy the second part of user declarations.  */
-#line 153 "f-exp.y"
+#line 159 "f-exp.y"
 
 /* YYSTYPE gets defined by %union */
 static int parse_number (char *, int, int, YYSTYPE *);
 
 
 /* Line 214 of yacc.c.  */
-#line 277 "f-exp.c"
+#line 283 "f-exp.c"
 
 #if ! defined (yyoverflow) || YYERROR_VERBOSE
 
@@ -482,15 +488,15 @@ static const yysigned_char yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short yyrline[] =
 {
-       0,   232,   232,   233,   236,   242,   247,   251,   255,   259,
-     263,   267,   277,   276,   284,   287,   291,   295,   301,   307,
-     313,   319,   325,   329,   335,   341,   349,   353,   357,   361,
-     365,   369,   373,   377,   381,   385,   389,   393,   397,   401,
-     405,   409,   413,   417,   422,   426,   430,   436,   443,   452,
-     459,   462,   465,   473,   480,   488,   528,   531,   532,   575,
-     577,   579,   581,   583,   586,   588,   590,   594,   596,   601,
-     603,   605,   607,   609,   611,   613,   615,   617,   619,   621,
-     623,   625,   627,   632,   637,   644,   648
+       0,   238,   238,   239,   242,   248,   253,   257,   261,   265,
+     269,   273,   283,   282,   290,   293,   297,   301,   307,   313,
+     319,   325,   331,   335,   341,   347,   355,   359,   363,   367,
+     371,   375,   379,   383,   387,   391,   395,   399,   403,   407,
+     411,   415,   419,   423,   428,   432,   436,   442,   449,   458,
+     465,   468,   471,   479,   486,   494,   534,   537,   538,   581,
+     583,   585,   587,   589,   592,   594,   596,   600,   602,   607,
+     609,   611,   613,   615,   617,   619,   621,   623,   625,   627,
+     629,   631,   633,   638,   643,   650,   654
 };
 #endif
 
@@ -1361,237 +1367,237 @@ yyreduce:
   switch (yyn)
     {
         case 4:
-#line 237 "f-exp.y"
+#line 243 "f-exp.y"
     { write_exp_elt_opcode(OP_TYPE);
 			  write_exp_elt_type(yyvsp[0].tval);
 			  write_exp_elt_opcode(OP_TYPE); }
     break;
 
   case 5:
-#line 243 "f-exp.y"
+#line 249 "f-exp.y"
     { }
     break;
 
   case 6:
-#line 248 "f-exp.y"
+#line 254 "f-exp.y"
     { write_exp_elt_opcode (UNOP_IND); }
     break;
 
   case 7:
-#line 252 "f-exp.y"
+#line 258 "f-exp.y"
     { write_exp_elt_opcode (UNOP_ADDR); }
     break;
 
   case 8:
-#line 256 "f-exp.y"
+#line 262 "f-exp.y"
     { write_exp_elt_opcode (UNOP_NEG); }
     break;
 
   case 9:
-#line 260 "f-exp.y"
+#line 266 "f-exp.y"
     { write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
     break;
 
   case 10:
-#line 264 "f-exp.y"
+#line 270 "f-exp.y"
     { write_exp_elt_opcode (UNOP_COMPLEMENT); }
     break;
 
   case 11:
-#line 268 "f-exp.y"
+#line 274 "f-exp.y"
     { write_exp_elt_opcode (UNOP_SIZEOF); }
     break;
 
   case 12:
-#line 277 "f-exp.y"
+#line 283 "f-exp.y"
     { start_arglist (); }
     break;
 
   case 13:
-#line 279 "f-exp.y"
+#line 285 "f-exp.y"
     { write_exp_elt_opcode (OP_F77_UNDETERMINED_ARGLIST);
 			  write_exp_elt_longcst ((LONGEST) end_arglist ());
 			  write_exp_elt_opcode (OP_F77_UNDETERMINED_ARGLIST); }
     break;
 
   case 15:
-#line 288 "f-exp.y"
+#line 294 "f-exp.y"
     { arglist_len = 1; }
     break;
 
   case 16:
-#line 292 "f-exp.y"
+#line 298 "f-exp.y"
     { arglist_len = 1; }
     break;
 
   case 17:
-#line 296 "f-exp.y"
+#line 302 "f-exp.y"
     { arglist_len++; }
     break;
 
   case 18:
-#line 302 "f-exp.y"
+#line 308 "f-exp.y"
     { write_exp_elt_opcode (OP_F90_RANGE); 
 			  write_exp_elt_longcst (NONE_BOUND_DEFAULT);
 			  write_exp_elt_opcode (OP_F90_RANGE); }
     break;
 
   case 19:
-#line 308 "f-exp.y"
+#line 314 "f-exp.y"
     { write_exp_elt_opcode (OP_F90_RANGE);
 			  write_exp_elt_longcst (HIGH_BOUND_DEFAULT);
 			  write_exp_elt_opcode (OP_F90_RANGE); }
     break;
 
   case 20:
-#line 314 "f-exp.y"
+#line 320 "f-exp.y"
     { write_exp_elt_opcode (OP_F90_RANGE);
 			  write_exp_elt_longcst (LOW_BOUND_DEFAULT);
 			  write_exp_elt_opcode (OP_F90_RANGE); }
     break;
 
   case 21:
-#line 320 "f-exp.y"
+#line 326 "f-exp.y"
     { write_exp_elt_opcode (OP_F90_RANGE);
 			  write_exp_elt_longcst (BOTH_BOUND_DEFAULT);
 			  write_exp_elt_opcode (OP_F90_RANGE); }
     break;
 
   case 22:
-#line 326 "f-exp.y"
+#line 332 "f-exp.y"
     { }
     break;
 
   case 23:
-#line 330 "f-exp.y"
+#line 336 "f-exp.y"
     { write_exp_elt_opcode(OP_COMPLEX);
 			  write_exp_elt_type (parse_f_type->builtin_complex_s16);
                 	  write_exp_elt_opcode(OP_COMPLEX); }
     break;
 
   case 24:
-#line 336 "f-exp.y"
+#line 342 "f-exp.y"
     { write_exp_elt_opcode (UNOP_CAST);
 			  write_exp_elt_type (yyvsp[-2].tval);
 			  write_exp_elt_opcode (UNOP_CAST); }
     break;
 
   case 25:
-#line 342 "f-exp.y"
+#line 348 "f-exp.y"
     { write_exp_elt_opcode (STRUCTOP_STRUCT);
                           write_exp_string (yyvsp[0].sval);
                           write_exp_elt_opcode (STRUCTOP_STRUCT); }
     break;
 
   case 26:
-#line 350 "f-exp.y"
+#line 356 "f-exp.y"
     { write_exp_elt_opcode (BINOP_REPEAT); }
     break;
 
   case 27:
-#line 354 "f-exp.y"
+#line 360 "f-exp.y"
     { write_exp_elt_opcode (BINOP_EXP); }
     break;
 
   case 28:
-#line 358 "f-exp.y"
+#line 364 "f-exp.y"
     { write_exp_elt_opcode (BINOP_MUL); }
     break;
 
   case 29:
-#line 362 "f-exp.y"
+#line 368 "f-exp.y"
     { write_exp_elt_opcode (BINOP_DIV); }
     break;
 
   case 30:
-#line 366 "f-exp.y"
+#line 372 "f-exp.y"
     { write_exp_elt_opcode (BINOP_ADD); }
     break;
 
   case 31:
-#line 370 "f-exp.y"
+#line 376 "f-exp.y"
     { write_exp_elt_opcode (BINOP_SUB); }
     break;
 
   case 32:
-#line 374 "f-exp.y"
+#line 380 "f-exp.y"
     { write_exp_elt_opcode (BINOP_LSH); }
     break;
 
   case 33:
-#line 378 "f-exp.y"
+#line 384 "f-exp.y"
     { write_exp_elt_opcode (BINOP_RSH); }
     break;
 
   case 34:
-#line 382 "f-exp.y"
+#line 388 "f-exp.y"
     { write_exp_elt_opcode (BINOP_EQUAL); }
     break;
 
   case 35:
-#line 386 "f-exp.y"
+#line 392 "f-exp.y"
     { write_exp_elt_opcode (BINOP_NOTEQUAL); }
     break;
 
   case 36:
-#line 390 "f-exp.y"
+#line 396 "f-exp.y"
     { write_exp_elt_opcode (BINOP_LEQ); }
     break;
 
   case 37:
-#line 394 "f-exp.y"
+#line 400 "f-exp.y"
     { write_exp_elt_opcode (BINOP_GEQ); }
     break;
 
   case 38:
-#line 398 "f-exp.y"
+#line 404 "f-exp.y"
     { write_exp_elt_opcode (BINOP_LESS); }
     break;
 
   case 39:
-#line 402 "f-exp.y"
+#line 408 "f-exp.y"
     { write_exp_elt_opcode (BINOP_GTR); }
     break;
 
   case 40:
-#line 406 "f-exp.y"
+#line 412 "f-exp.y"
     { write_exp_elt_opcode (BINOP_BITWISE_AND); }
     break;
 
   case 41:
-#line 410 "f-exp.y"
+#line 416 "f-exp.y"
     { write_exp_elt_opcode (BINOP_BITWISE_XOR); }
     break;
 
   case 42:
-#line 414 "f-exp.y"
+#line 420 "f-exp.y"
     { write_exp_elt_opcode (BINOP_BITWISE_IOR); }
     break;
 
   case 43:
-#line 418 "f-exp.y"
+#line 424 "f-exp.y"
     { write_exp_elt_opcode (BINOP_LOGICAL_AND); }
     break;
 
   case 44:
-#line 423 "f-exp.y"
+#line 429 "f-exp.y"
     { write_exp_elt_opcode (BINOP_LOGICAL_OR); }
     break;
 
   case 45:
-#line 427 "f-exp.y"
+#line 433 "f-exp.y"
     { write_exp_elt_opcode (BINOP_ASSIGN); }
     break;
 
   case 46:
-#line 431 "f-exp.y"
+#line 437 "f-exp.y"
     { write_exp_elt_opcode (BINOP_ASSIGN_MODIFY);
 			  write_exp_elt_opcode (yyvsp[-1].opcode);
 			  write_exp_elt_opcode (BINOP_ASSIGN_MODIFY); }
     break;
 
   case 47:
-#line 437 "f-exp.y"
+#line 443 "f-exp.y"
     { write_exp_elt_opcode (OP_LONG);
 			  write_exp_elt_type (yyvsp[0].typed_val.type);
 			  write_exp_elt_longcst ((LONGEST)(yyvsp[0].typed_val.val));
@@ -1599,7 +1605,7 @@ yyreduce:
     break;
 
   case 48:
-#line 444 "f-exp.y"
+#line 450 "f-exp.y"
     { YYSTYPE val;
 			  parse_number (yyvsp[0].ssym.stoken.ptr, yyvsp[0].ssym.stoken.length, 0, &val);
 			  write_exp_elt_opcode (OP_LONG);
@@ -1609,7 +1615,7 @@ yyreduce:
     break;
 
   case 49:
-#line 453 "f-exp.y"
+#line 459 "f-exp.y"
     { write_exp_elt_opcode (OP_DOUBLE);
 			  write_exp_elt_type (parse_f_type->builtin_real_s8);
 			  write_exp_elt_dblcst (yyvsp[0].dval);
@@ -1617,7 +1623,7 @@ yyreduce:
     break;
 
   case 52:
-#line 466 "f-exp.y"
+#line 472 "f-exp.y"
     { write_exp_elt_opcode (OP_LONG);
 			  write_exp_elt_type (parse_f_type->builtin_integer);
 			  CHECK_TYPEDEF (yyvsp[-1].tval);
@@ -1626,7 +1632,7 @@ yyreduce:
     break;
 
   case 53:
-#line 474 "f-exp.y"
+#line 480 "f-exp.y"
     { write_exp_elt_opcode (OP_BOOL);
 			  write_exp_elt_longcst ((LONGEST) yyvsp[0].lval);
 			  write_exp_elt_opcode (OP_BOOL);
@@ -1634,7 +1640,7 @@ yyreduce:
     break;
 
   case 54:
-#line 481 "f-exp.y"
+#line 487 "f-exp.y"
     {
 			  write_exp_elt_opcode (OP_STRING);
 			  write_exp_string (yyvsp[0].sval);
@@ -1643,7 +1649,7 @@ yyreduce:
     break;
 
   case 55:
-#line 489 "f-exp.y"
+#line 495 "f-exp.y"
     { struct symbol *sym = yyvsp[0].ssym.sym;
 
 			  if (sym)
@@ -1683,7 +1689,7 @@ yyreduce:
     break;
 
   case 58:
-#line 533 "f-exp.y"
+#line 539 "f-exp.y"
     {
 		  /* This is where the interesting stuff happens.  */
 		  int done = 0;
@@ -1727,122 +1733,122 @@ yyreduce:
     break;
 
   case 59:
-#line 576 "f-exp.y"
+#line 582 "f-exp.y"
     { push_type (tp_pointer); yyval.voidval = 0; }
     break;
 
   case 60:
-#line 578 "f-exp.y"
+#line 584 "f-exp.y"
     { push_type (tp_pointer); yyval.voidval = yyvsp[0].voidval; }
     break;
 
   case 61:
-#line 580 "f-exp.y"
+#line 586 "f-exp.y"
     { push_type (tp_reference); yyval.voidval = 0; }
     break;
 
   case 62:
-#line 582 "f-exp.y"
+#line 588 "f-exp.y"
     { push_type (tp_reference); yyval.voidval = yyvsp[0].voidval; }
     break;
 
   case 64:
-#line 587 "f-exp.y"
+#line 593 "f-exp.y"
     { yyval.voidval = yyvsp[-1].voidval; }
     break;
 
   case 65:
-#line 589 "f-exp.y"
+#line 595 "f-exp.y"
     { push_type (tp_function); }
     break;
 
   case 66:
-#line 591 "f-exp.y"
+#line 597 "f-exp.y"
     { push_type (tp_function); }
     break;
 
   case 67:
-#line 595 "f-exp.y"
+#line 601 "f-exp.y"
     { yyval.voidval = 0; }
     break;
 
   case 68:
-#line 597 "f-exp.y"
+#line 603 "f-exp.y"
     { xfree (yyvsp[-1].tvec); yyval.voidval = 0; }
     break;
 
   case 69:
-#line 602 "f-exp.y"
+#line 608 "f-exp.y"
     { yyval.tval = yyvsp[0].tsym.type; }
     break;
 
   case 70:
-#line 604 "f-exp.y"
+#line 610 "f-exp.y"
     { yyval.tval = parse_f_type->builtin_integer; }
     break;
 
   case 71:
-#line 606 "f-exp.y"
+#line 612 "f-exp.y"
     { yyval.tval = parse_f_type->builtin_integer_s2; }
     break;
 
   case 72:
-#line 608 "f-exp.y"
+#line 614 "f-exp.y"
     { yyval.tval = parse_f_type->builtin_character; }
     break;
 
   case 73:
-#line 610 "f-exp.y"
+#line 616 "f-exp.y"
     { yyval.tval = parse_f_type->builtin_logical_s8; }
     break;
 
   case 74:
-#line 612 "f-exp.y"
+#line 618 "f-exp.y"
     { yyval.tval = parse_f_type->builtin_logical; }
     break;
 
   case 75:
-#line 614 "f-exp.y"
+#line 620 "f-exp.y"
     { yyval.tval = parse_f_type->builtin_logical_s2; }
     break;
 
   case 76:
-#line 616 "f-exp.y"
+#line 622 "f-exp.y"
     { yyval.tval = parse_f_type->builtin_logical_s1; }
     break;
 
   case 77:
-#line 618 "f-exp.y"
+#line 624 "f-exp.y"
     { yyval.tval = parse_f_type->builtin_real; }
     break;
 
   case 78:
-#line 620 "f-exp.y"
+#line 626 "f-exp.y"
     { yyval.tval = parse_f_type->builtin_real_s8; }
     break;
 
   case 79:
-#line 622 "f-exp.y"
+#line 628 "f-exp.y"
     { yyval.tval = parse_f_type->builtin_real_s16; }
     break;
 
   case 80:
-#line 624 "f-exp.y"
+#line 630 "f-exp.y"
     { yyval.tval = parse_f_type->builtin_complex_s8; }
     break;
 
   case 81:
-#line 626 "f-exp.y"
+#line 632 "f-exp.y"
     { yyval.tval = parse_f_type->builtin_complex_s16; }
     break;
 
   case 82:
-#line 628 "f-exp.y"
+#line 634 "f-exp.y"
     { yyval.tval = parse_f_type->builtin_complex_s32; }
     break;
 
   case 83:
-#line 633 "f-exp.y"
+#line 639 "f-exp.y"
     { yyval.tvec = (struct type **) xmalloc (sizeof (struct type *) * 2);
 		  yyval.ivec[0] = 1;	/* Number of types in vector */
 		  yyval.tvec[1] = yyvsp[0].tval;
@@ -1850,7 +1856,7 @@ yyreduce:
     break;
 
   case 84:
-#line 638 "f-exp.y"
+#line 644 "f-exp.y"
     { int len = sizeof (struct type *) * (++(yyvsp[-2].ivec[0]) + 1);
 		  yyval.tvec = (struct type **) xrealloc ((char *) yyvsp[-2].tvec, len);
 		  yyval.tvec[yyval.ivec[0]] = yyvsp[0].tval;
@@ -1858,7 +1864,7 @@ yyreduce:
     break;
 
   case 85:
-#line 645 "f-exp.y"
+#line 651 "f-exp.y"
     {  yyval.sval = yyvsp[0].ssym.stoken; }
     break;
 
@@ -1866,7 +1872,7 @@ yyreduce:
     }
 
 /* Line 1000 of yacc.c.  */
-#line 1870 "f-exp.c"
+#line 1876 "f-exp.c"
 

   yyvsp -= yylen;
   yyssp -= yylen;
@@ -2091,7 +2097,7 @@ yyreturn:
 }
 
 
-#line 658 "f-exp.y"
+#line 664 "f-exp.y"
 
 
 /* Take care of parsing a number (anything that starts with a digit).
@@ -2101,11 +2107,7 @@ yyreturn:
 /*** Needs some error checking for the float case ***/
 
 static int
-parse_number (p, len, parsed_float, putithere)
-     char *p;
-     int len;
-     int parsed_float;
-     YYSTYPE *putithere;
+parse_number (char *p, int len, int parsed_float, YYSTYPE *putithere)
 {
   LONGEST n = 0;
   LONGEST prevn = 0;
@@ -2332,8 +2334,7 @@ static int tempbufindex;	/* Current index into buffer */
    first one on demand.  */
 
 static void
-growbuf_by_size (count)
-     int count;
+growbuf_by_size (int count)
 {
   int growby;
 
@@ -2654,8 +2655,7 @@ yylex (void)
 }
 
 void
-yyerror (msg)
-     char *msg;
+yyerror (char *msg)
 {
   if (prev_lexptr)
     lexptr = prev_lexptr;
diff --git a/gdb/f-exp.y b/gdb/f-exp.y
index fa464cf..33c7418 100644
--- a/gdb/f-exp.y
+++ b/gdb/f-exp.y
@@ -105,6 +105,12 @@
 #define yygindex f_yygindex
 #define yytable	 f_yytable
 #define yycheck	 f_yycheck
+#define yyss	f_yyss
+#define yysslim	f_yysslim
+#define yyssp	f_yyssp
+#define yystacksize f_yystacksize
+#define yyvs	f_yyvs
+#define yyvsp	f_yyvsp
 
 #ifndef YYDEBUG
 #define	YYDEBUG	1		/* Default to yydebug support */
@@ -664,11 +670,7 @@ name_not_typename :	NAME
 /*** Needs some error checking for the float case ***/
 
 static int
-parse_number (p, len, parsed_float, putithere)
-     char *p;
-     int len;
-     int parsed_float;
-     YYSTYPE *putithere;
+parse_number (char *p, int len, int parsed_float, YYSTYPE *putithere)
 {
   LONGEST n = 0;
   LONGEST prevn = 0;
@@ -895,8 +897,7 @@ static int tempbufindex;	/* Current index into buffer */
    first one on demand.  */
 
 static void
-growbuf_by_size (count)
-     int count;
+growbuf_by_size (int count)
 {
   int growby;
 
@@ -1217,8 +1218,7 @@ yylex (void)
 }
 
 void
-yyerror (msg)
-     char *msg;
+yyerror (char *msg)
 {
   if (prev_lexptr)
     lexptr = prev_lexptr;
diff --git a/gdb/f-lang.c b/gdb/f-lang.c
index 4149cef..7492149 100644
--- a/gdb/f-lang.c
+++ b/gdb/f-lang.c
@@ -33,6 +33,7 @@
 #include "value.h"
 #include "cp-support.h"
 #include "charset.h"
+#include "c-lang.h"
 
 
 /* Following is dubious stuff that had been in the xcoff reader.  */
@@ -262,17 +263,12 @@ f_word_break_characters (void)
 /* Consider the modules separator :: as a valid symbol name character
    class.  */
 
-static char **
+static VEC (char_ptr) *
 f_make_symbol_completion_list (char *text, char *word)
 {
   return default_make_symbol_completion_list_break_on (text, word, ":");
 }
 
-/* This is declared in c-lang.h but it is silly to import that file for what
-   is already just a hack.  */
-extern int c_value_print (struct value *, struct ui_file *,
-			  const struct value_print_options *);
-
 const struct language_defn f_language_defn =
 {
   "fortran",
@@ -293,6 +289,7 @@ const struct language_defn f_language_defn =
   default_print_typedef,	/* Print a typedef using appropriate syntax */
   f_val_print,			/* Print a value using appropriate syntax */
   c_value_print,		/* FIXME */
+  default_read_var_value,	/* la_read_var_value */
   NULL,				/* Language specific skip_trampoline */
   NULL,                    	/* name_of_this */
   cp_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
@@ -309,7 +306,7 @@ const struct language_defn f_language_defn =
   default_print_array_index,
   default_pass_by_reference,
   default_get_string,
-  strcmp_iw_ordered,
+  NULL,				/* la_get_symbol_name_cmp */
   iterate_over_symbols,
   LANG_MAGIC
 };
@@ -572,7 +569,7 @@ find_first_common_named (char *name)
    that belongs to function funcname.  */
 
 SAVED_F77_COMMON_PTR
-find_common_for_function (char *name, char *funcname)
+find_common_for_function (const char *name, const char *funcname)
 {
 
   SAVED_F77_COMMON_PTR tmp;
diff --git a/gdb/f-lang.h b/gdb/f-lang.h
index 3a46ebf..4aae3c5 100644
--- a/gdb/f-lang.h
+++ b/gdb/f-lang.h
@@ -28,10 +28,10 @@ extern void f_error (char *);	/* Defined in f-exp.y */
 extern void f_print_type (struct type *, const char *, struct ui_file *, int,
 			  int);
 
-extern int f_val_print (struct type *, const gdb_byte *, int, CORE_ADDR,
-			struct ui_file *, int,
-			const struct value *,
-			const struct value_print_options *);
+extern void f_val_print (struct type *, const gdb_byte *, int, CORE_ADDR,
+			 struct ui_file *, int,
+			 const struct value *,
+			 const struct value_print_options *);
 
 /* Language-specific data structures */
 
@@ -75,7 +75,8 @@ extern SAVED_F77_COMMON_PTR head_common_list;	/* Ptr to 1st saved COMMON  */
 extern SAVED_F77_COMMON_PTR tail_common_list;	/* Ptr to last saved COMMON  */
 extern SAVED_F77_COMMON_PTR current_common;	/* Ptr to current COMMON */
 
-extern SAVED_F77_COMMON_PTR find_common_for_function (char *, char *);
+extern SAVED_F77_COMMON_PTR find_common_for_function (const char *,
+						      const char *);
 
 #define UNINITIALIZED_SECNUM -1
 #define COMMON_NEEDS_PATCHING(blk) ((blk)->secnum == UNINITIALIZED_SECNUM)
diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c
index 87b2ed1..4359f6f 100644
--- a/gdb/f-valprint.c
+++ b/gdb/f-valprint.c
@@ -41,7 +41,7 @@ static int there_is_a_visible_common_named (char *);
 
 extern void _initialize_f_valprint (void);
 static void info_common_command (char *, int);
-static void list_all_visible_commons (char *);
+static void list_all_visible_commons (const char *);
 static void f77_create_arrayprint_offset_tbl (struct type *,
 					      struct ui_file *);
 static void f77_get_dynamic_length_of_aggregate (struct type *);
@@ -242,11 +242,22 @@ Type node corrupt! F77 arrays cannot have %d subscripts (%d Max)"),
 }
 

 
+/* Decorations for Fortran.  */
+
+static const struct generic_val_print_decorations f_decorations =
+{
+  "(",
+  ",",
+  ")",
+  ".TRUE.",
+  ".FALSE.",
+  "VOID",
+};
+
 /* See val_print for a description of the various parameters of this
-   function; they are identical.  The semantics of the return value is
-   also identical to val_print.  */
+   function; they are identical.  */
 
-int
+void
 f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
 	     CORE_ADDR address, struct ui_file *stream, int recurse,
 	     const struct value *original_value,
@@ -256,7 +267,6 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   unsigned int i = 0;	/* Number of characters printed.  */
   struct type *elttype;
-  LONGEST val;
   CORE_ADDR addr;
   int index;
 
@@ -299,19 +309,26 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
 	}
       else
 	{
+	  int want_space = 0;
+
 	  addr = unpack_pointer (type, valaddr + embedded_offset);
 	  elttype = check_typedef (TYPE_TARGET_TYPE (type));
 
 	  if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
 	    {
 	      /* Try to print what function it points to.  */
-	      print_address_demangle (gdbarch, addr, stream, demangle);
-	      /* Return value is irrelevant except for string pointers.  */
-	      return 0;
+	      print_function_pointer_address (options, gdbarch, addr, stream);
+	      return;
 	    }
 
-	  if (options->addressprint && options->format != 's')
-	    fputs_filtered (paddress (gdbarch, addr), stream);
+	  if (options->symbol_print)
+	    want_space = print_address_demangle (options, gdbarch, addr,
+						 stream, demangle);
+	  else if (options->addressprint && options->format != 's')
+	    {
+	      fputs_filtered (paddress (gdbarch, addr), stream);
+	      want_space = 1;
+	    }
 
 	  /* For a pointer to char or unsigned char, also print the string
 	     pointed to, unless pointer is null.  */
@@ -319,73 +336,17 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
 	      && TYPE_CODE (elttype) == TYPE_CODE_INT
 	      && (options->format == 0 || options->format == 's')
 	      && addr != 0)
-	    i = val_print_string (TYPE_TARGET_TYPE (type), NULL, addr, -1,
-				  stream, options);
-
-	  /* Return number of characters printed, including the terminating
-	     '\0' if we reached the end.  val_print_string takes care including
-	     the terminating '\0' if necessary.  */
-	  return i;
-	}
-      break;
-
-    case TYPE_CODE_REF:
-      elttype = check_typedef (TYPE_TARGET_TYPE (type));
-      if (options->addressprint)
-	{
-	  CORE_ADDR addr
-	    = extract_typed_address (valaddr + embedded_offset, type);
-
-	  fprintf_filtered (stream, "@");
-	  fputs_filtered (paddress (gdbarch, addr), stream);
-	  if (options->deref_ref)
-	    fputs_filtered (": ", stream);
-	}
-      /* De-reference the reference.  */
-      if (options->deref_ref)
-	{
-	  if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF)
 	    {
-	      struct value *deref_val;
-
-	      deref_val = coerce_ref_if_computed (original_value);
-	      if (deref_val != NULL)
-		{
-		  /* More complicated computed references are not supported.  */
-		  gdb_assert (embedded_offset == 0);
-		}
-	      else
-		deref_val = value_at (TYPE_TARGET_TYPE (type),
-				      unpack_pointer (type,
-						      (valaddr
-						       + embedded_offset)));
-
-	      common_val_print (deref_val, stream, recurse,
-				options, current_language);
+	      if (want_space)
+		fputs_filtered (" ", stream);
+	      i = val_print_string (TYPE_TARGET_TYPE (type), NULL, addr, -1,
+				    stream, options);
 	    }
-	  else
-	    fputs_filtered ("???", stream);
-	}
-      break;
-
-    case TYPE_CODE_FUNC:
-      if (options->format)
-	{
-	  val_print_scalar_formatted (type, valaddr, embedded_offset,
-				      original_value, options, 0, stream);
-	  break;
+	  return;
 	}
-      /* FIXME, we should consider, at least for ANSI C language, eliminating
-         the distinction made between FUNCs and POINTERs to FUNCs.  */
-      fprintf_filtered (stream, "{");
-      type_print (type, "", stream, -1);
-      fprintf_filtered (stream, "} ");
-      /* Try to print what function it points to, and its address.  */
-      print_address_demangle (gdbarch, address, stream, demangle);
       break;
 
     case TYPE_CODE_INT:
-    case TYPE_CODE_CHAR:
       if (options->format || options->output_format)
 	{
 	  struct value_print_options opts = *options;
@@ -402,7 +363,7 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
 	     Since we don't know whether the value is really intended to
 	     be used as an integer or a character, print the character
 	     equivalent as well.  */
-	  if (TYPE_LENGTH (type) == 1 || TYPE_CODE (type) == TYPE_CODE_CHAR)
+	  if (TYPE_LENGTH (type) == 1)
 	    {
 	      LONGEST c;
 
@@ -413,84 +374,6 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
 	}
       break;
 
-    case TYPE_CODE_FLAGS:
-      if (options->format)
-	val_print_scalar_formatted (type, valaddr, embedded_offset,
-				    original_value, options, 0, stream);
-      else
-	val_print_type_code_flags (type, valaddr + embedded_offset, stream);
-      break;
-
-    case TYPE_CODE_FLT:
-      if (options->format)
-	val_print_scalar_formatted (type, valaddr, embedded_offset,
-				    original_value, options, 0, stream);
-      else
-	print_floating (valaddr + embedded_offset, type, stream);
-      break;
-
-    case TYPE_CODE_VOID:
-      fprintf_filtered (stream, "VOID");
-      break;
-
-    case TYPE_CODE_ERROR:
-      fprintf_filtered (stream, "%s", TYPE_ERROR_NAME (type));
-      break;
-
-    case TYPE_CODE_RANGE:
-      /* FIXME, we should not ever have to print one of these yet.  */
-      fprintf_filtered (stream, "<range type>");
-      break;
-
-    case TYPE_CODE_BOOL:
-      if (options->format || options->output_format)
-	{
-	  struct value_print_options opts = *options;
-
-	  opts.format = (options->format ? options->format
-			 : options->output_format);
-	  val_print_scalar_formatted (type, valaddr, embedded_offset,
-				      original_value, &opts, 0, stream);
-	}
-      else
-	{
-	  val = extract_unsigned_integer (valaddr + embedded_offset,
-					  TYPE_LENGTH (type), byte_order);
-	  if (val == 0)
-	    fprintf_filtered (stream, ".FALSE.");
-	  else if (val == 1)
-	    fprintf_filtered (stream, ".TRUE.");
-	  else
-	    /* Not a legitimate logical type, print as an integer.  */
-	    {
-	      /* Bash the type code temporarily.  */
-	      TYPE_CODE (type) = TYPE_CODE_INT;
-	      val_print (type, valaddr, embedded_offset,
-			 address, stream, recurse,
-			 original_value, options, current_language);
-	      /* Restore the type code so later uses work as intended.  */
-	      TYPE_CODE (type) = TYPE_CODE_BOOL;
-	    }
-	}
-      break;
-
-    case TYPE_CODE_COMPLEX:
-      type = TYPE_TARGET_TYPE (type);
-      fputs_filtered ("(", stream);
-      print_floating (valaddr + embedded_offset, type, stream);
-      fputs_filtered (",", stream);
-      print_floating (valaddr + embedded_offset + TYPE_LENGTH (type),
-		      type, stream);
-      fputs_filtered (")", stream);
-      break;
-
-    case TYPE_CODE_UNDEF:
-      /* This happens (without TYPE_FLAG_STUB set) on systems which don't use
-         dbx xrefs (NO_DBX_XREFS in gcc) if a file has a "struct foo *bar"
-         and no complete type for struct foo in that file.  */
-      fprintf_filtered (stream, "<incomplete type>");
-      break;
-
     case TYPE_CODE_STRUCT:
     case TYPE_CODE_UNION:
       /* Starting from the Fortran 90 standard, Fortran supports derived
@@ -510,15 +393,28 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
       fprintf_filtered (stream, " )");
       break;     
 
+    case TYPE_CODE_REF:
+    case TYPE_CODE_FUNC:
+    case TYPE_CODE_FLAGS:
+    case TYPE_CODE_FLT:
+    case TYPE_CODE_VOID:
+    case TYPE_CODE_ERROR:
+    case TYPE_CODE_RANGE:
+    case TYPE_CODE_UNDEF:
+    case TYPE_CODE_COMPLEX:
+    case TYPE_CODE_BOOL:
+    case TYPE_CODE_CHAR:
     default:
-      error (_("Invalid F77 type code %d in symbol table."), TYPE_CODE (type));
+      generic_val_print (type, valaddr, embedded_offset, address,
+			 stream, recurse, original_value, options,
+			 &f_decorations);
+      break;
     }
   gdb_flush (stream);
-  return 0;
 }
 
 static void
-list_all_visible_commons (char *funname)
+list_all_visible_commons (const char *funname)
 {
   SAVED_F77_COMMON_PTR tmp;
 
@@ -545,7 +441,7 @@ info_common_command (char *comname, int from_tty)
   SAVED_F77_COMMON_PTR the_common;
   COMMON_ENTRY_PTR entry;
   struct frame_info *fi;
-  char *funname = 0;
+  const char *funname = 0;
   struct symbol *func;
 
   /* We have been told to display the contents of F77 COMMON 
@@ -609,6 +505,8 @@ info_common_command (char *comname, int from_tty)
 
   if (the_common)
     {
+      struct frame_id frame_id = get_frame_id (fi);
+
       if (strcmp (comname, BLANK_COMMON_NAME_LOCAL) == 0)
 	printf_filtered (_("Contents of blank COMMON block:\n"));
       else
@@ -619,7 +517,18 @@ info_common_command (char *comname, int from_tty)
 
       while (entry != NULL)
 	{
+	  fi = frame_find_by_id (frame_id);
+	  if (fi == NULL)
+	    {
+	      warning (_("Unable to restore previously selected frame."));
+	      break;
+	    }
+
 	  print_variable_and_value (NULL, entry->symbol, fi, gdb_stdout, 0);
+
+	  /* print_variable_and_value invalidates FI.  */
+	  fi = NULL;
+
 	  entry = entry->next;
 	}
     }
diff --git a/gdb/fbsd-nat.c b/gdb/fbsd-nat.c
index 6a69b39..b3e4fab 100644
--- a/gdb/fbsd-nat.c
+++ b/gdb/fbsd-nat.c
@@ -142,14 +142,14 @@ fbsd_find_memory_regions (find_memory_region_ftype func, void *obfd)
 static int
 find_signalled_thread (struct thread_info *info, void *data)
 {
-  if (info->suspend.stop_signal != TARGET_SIGNAL_0
+  if (info->suspend.stop_signal != GDB_SIGNAL_0
       && ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid))
     return 1;
 
   return 0;
 }
 
-static enum target_signal
+static enum gdb_signal
 find_stop_signal (void)
 {
   struct thread_info *info =
@@ -158,7 +158,7 @@ find_stop_signal (void)
   if (info)
     return info->suspend.stop_signal;
   else
-    return TARGET_SIGNAL_0;
+    return GDB_SIGNAL_0;
 }
 
 /* Create appropriate note sections for a corefile, returning them in
diff --git a/gdb/features/Makefile b/gdb/features/Makefile
index 8eaa03f..79803a5 100644
--- a/gdb/features/Makefile
+++ b/gdb/features/Makefile
@@ -31,12 +31,16 @@
 #   make GDB=/path/to/gdb XMLTOC="xml files" cfiles
 
 WHICH = arm-with-iwmmxt arm-with-vfpv2 arm-with-vfpv3 arm-with-neon \
+	arm-with-m arm-with-m-fpa-layout arm-with-m-vfp-d16 \
 	i386/i386 i386/i386-linux \
 	i386/i386-mmx i386/i386-mmx-linux \
 	i386/amd64 i386/amd64-linux \
 	i386/i386-avx i386/i386-avx-linux \
 	i386/amd64-avx i386/amd64-avx-linux \
-	mips-linux mips64-linux \
+	i386/x32 i386/x32-linux \
+	i386/x32-avx i386/x32-avx-linux \
+	mips-linux mips-dsp-linux \
+	mips64-linux mips64-dsp-linux \
 	rs6000/powerpc-32 \
 	rs6000/powerpc-32l rs6000/powerpc-altivec32l rs6000/powerpc-e500l \
 	rs6000/powerpc-64l rs6000/powerpc-altivec64l rs6000/powerpc-vsx32l \
@@ -59,8 +63,14 @@ i386/i386-mmx-expedite = ebp,esp,eip
 i386/i386-mmx-linux-expedite = ebp,esp,eip
 i386/amd64-avx-expedite = rbp,rsp,rip
 i386/amd64-avx-linux-expedite = rbp,rsp,rip
+i386/x32-expedite = rbp,rsp,rip
+i386/x32-linux-expedite = rbp,rsp,rip
+i386/x32-avx-expedite = rbp,rsp,rip
+i386/x32-avx-linux-expedite = rbp,rsp,rip
 mips-expedite = r29,pc
+mips-dsp-expedite = r29,pc
 mips64-expedite = r29,pc
+mips64-dsp-expedite = r29,pc
 powerpc-expedite = r1,pc
 rs6000/powerpc-cell32l-expedite = r1,pc,r0,orig_r3,r4
 rs6000/powerpc-cell64l-expedite = r1,pc,r0,orig_r3,r4
@@ -124,3 +134,9 @@ $(outdir)/i386/i386-mmx-linux.dat: i386/32bit-core.xml i386/32bit-linux.xml
 $(outdir)/i386/amd64-avx.dat: i386/64bit-core.xml i386/64bit-avx.xml
 $(outdir)/i386/amd64-avx-linux.dat: i386/64bit-core.xml i386/64bit-avx.xml \
 				    i386/64bit-linux.xml
+$(outdir)/i386/x32.dat: i386/x32-core.xml i386/64bit-sse.xml
+$(outdir)/i386/x32-linux.dat: i386/x32-core.xml i386/64bit-sse.xml \
+			      i386/64bit-linux.xml
+$(outdir)/i386/x32-avx.dat: i386/x32-core.xml i386/64bit-avx.xml
+$(outdir)/i386/x32-avx-linux.dat: i386/x32-core.xml i386/64bit-avx.xml \
+				  i386/64bit-linux.xml
diff --git a/gdb/features/arm-with-iwmmxt.c b/gdb/features/arm-with-iwmmxt.c
index f3918bb..d3b5fe9 100644
--- a/gdb/features/arm-with-iwmmxt.c
+++ b/gdb/features/arm-with-iwmmxt.c
@@ -10,7 +10,8 @@ initialize_tdesc_arm_with_iwmmxt (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
+  struct tdesc_type *field_type;
+  struct tdesc_type *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("iwmmxt"));
 
diff --git a/gdb/features/arm-with-m-fpa-layout.c b/gdb/features/arm-with-m-fpa-layout.c
new file mode 100644
index 0000000..6531c3d
--- /dev/null
+++ b/gdb/features/arm-with-m-fpa-layout.c
@@ -0,0 +1,43 @@
+/* THIS FILE IS GENERATED.  Original: arm-with-m-fpa-layout.xml */
+
+#include "defs.h"
+#include "osabi.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_arm_with_m_fpa_layout;
+static void
+initialize_tdesc_arm_with_m_fpa_layout (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.arm.m-profile");
+  tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r3", 3, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r4", 4, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r5", 5, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r6", 6, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r7", 7, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r8", 8, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r9", 9, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r10", 10, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r11", 11, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r12", 12, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "sp", 13, 1, NULL, 32, "data_ptr");
+  tdesc_create_reg (feature, "lr", 14, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "pc", 15, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "", 16, 1, NULL, 96, "arm_fpa_ext");
+  tdesc_create_reg (feature, "", 17, 1, NULL, 96, "arm_fpa_ext");
+  tdesc_create_reg (feature, "", 18, 1, NULL, 96, "arm_fpa_ext");
+  tdesc_create_reg (feature, "", 19, 1, NULL, 96, "arm_fpa_ext");
+  tdesc_create_reg (feature, "", 20, 1, NULL, 96, "arm_fpa_ext");
+  tdesc_create_reg (feature, "", 21, 1, NULL, 96, "arm_fpa_ext");
+  tdesc_create_reg (feature, "", 22, 1, NULL, 96, "arm_fpa_ext");
+  tdesc_create_reg (feature, "", 23, 1, NULL, 96, "arm_fpa_ext");
+  tdesc_create_reg (feature, "", 24, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "xpsr", 25, 1, NULL, 32, "int");
+
+  tdesc_arm_with_m_fpa_layout = result;
+}
diff --git a/gdb/features/arm-with-m-fpa-layout.xml b/gdb/features/arm-with-m-fpa-layout.xml
new file mode 100644
index 0000000..e3a1149
--- /dev/null
+++ b/gdb/features/arm-with-m-fpa-layout.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!-- A target description for an M-profile device, for stubs that
+     transfer registers using the historical fpa layout.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+<feature name="org.gnu.gdb.arm.m-profile">
+  <reg name="r0" bitsize="32"/>
+  <reg name="r1" bitsize="32"/>
+  <reg name="r2" bitsize="32"/>
+  <reg name="r3" bitsize="32"/>
+  <reg name="r4" bitsize="32"/>
+  <reg name="r5" bitsize="32"/>
+  <reg name="r6" bitsize="32"/>
+  <reg name="r7" bitsize="32"/>
+  <reg name="r8" bitsize="32"/>
+  <reg name="r9" bitsize="32"/>
+  <reg name="r10" bitsize="32"/>
+  <reg name="r11" bitsize="32"/>
+  <reg name="r12" bitsize="32"/>
+  <reg name="sp" bitsize="32" type="data_ptr"/>
+  <reg name="lr" bitsize="32"/>
+  <reg name="pc" bitsize="32" type="code_ptr"/>
+
+  <!-- Slack for unused FPA registers (f0-f7 + fps).
+       See arm-fpa.xml.  -->
+  <reg name="" bitsize="96" type="arm_fpa_ext" regnum="16"/>
+  <reg name="" bitsize="96" type="arm_fpa_ext"/>
+  <reg name="" bitsize="96" type="arm_fpa_ext"/>
+  <reg name="" bitsize="96" type="arm_fpa_ext"/>
+  <reg name="" bitsize="96" type="arm_fpa_ext"/>
+  <reg name="" bitsize="96" type="arm_fpa_ext"/>
+  <reg name="" bitsize="96" type="arm_fpa_ext"/>
+  <reg name="" bitsize="96" type="arm_fpa_ext"/>
+  <reg name="" bitsize="32"/>
+
+  <reg name="xpsr" bitsize="32" regnum="25"/>
+</feature>
+</target>
diff --git a/gdb/features/arm-with-m-vfp-d16.c b/gdb/features/arm-with-m-vfp-d16.c
new file mode 100644
index 0000000..cadeaf1
--- /dev/null
+++ b/gdb/features/arm-with-m-vfp-d16.c
@@ -0,0 +1,53 @@
+/* THIS FILE IS GENERATED.  Original: arm-with-m-vfp-d16.xml */
+
+#include "defs.h"
+#include "osabi.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_arm_with_m_vfp_d16;
+static void
+initialize_tdesc_arm_with_m_vfp_d16 (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.arm.m-profile");
+  tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r3", 3, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r4", 4, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r5", 5, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r6", 6, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r7", 7, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r8", 8, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r9", 9, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r10", 10, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r11", 11, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r12", 12, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "sp", 13, 1, NULL, 32, "data_ptr");
+  tdesc_create_reg (feature, "lr", 14, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "pc", 15, 1, NULL, 32, "code_ptr");
+  tdesc_create_reg (feature, "xpsr", 25, 1, NULL, 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.arm.vfp");
+  tdesc_create_reg (feature, "d0", 26, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "d1", 27, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "d2", 28, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "d3", 29, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "d4", 30, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "d5", 31, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "d6", 32, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "d7", 33, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "d8", 34, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "d9", 35, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "d10", 36, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "d11", 37, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "d12", 38, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "d13", 39, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "d14", 40, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "d15", 41, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "fpscr", 42, 1, "float", 32, "int");
+
+  tdesc_arm_with_m_vfp_d16 = result;
+}
diff --git a/gdb/features/arm-with-m-vfp-d16.xml b/gdb/features/arm-with-m-vfp-d16.xml
new file mode 100644
index 0000000..9637d5e
--- /dev/null
+++ b/gdb/features/arm-with-m-vfp-d16.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2010-2012 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <xi:include href="arm-m-profile.xml"/>
+  <!-- Layout of vfpv4-sp-d16 is identical to vfpv2 -->
+  <xi:include href="arm-vfpv2.xml"/>
+</target>
diff --git a/gdb/features/arm-with-m.c b/gdb/features/arm-with-m.c
index b188f57..2ac3df9 100644
--- a/gdb/features/arm-with-m.c
+++ b/gdb/features/arm-with-m.c
@@ -10,7 +10,6 @@ initialize_tdesc_arm_with_m (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.arm.m-profile");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int");
diff --git a/gdb/features/arm-with-neon.c b/gdb/features/arm-with-neon.c
index c1eeb0b..d7df4e9 100644
--- a/gdb/features/arm-with-neon.c
+++ b/gdb/features/arm-with-neon.c
@@ -10,7 +10,6 @@ initialize_tdesc_arm_with_neon (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.arm.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
diff --git a/gdb/features/arm-with-vfpv2.c b/gdb/features/arm-with-vfpv2.c
index ad872f8..7b014cd 100644
--- a/gdb/features/arm-with-vfpv2.c
+++ b/gdb/features/arm-with-vfpv2.c
@@ -10,7 +10,6 @@ initialize_tdesc_arm_with_vfpv2 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.arm.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
diff --git a/gdb/features/arm-with-vfpv3.c b/gdb/features/arm-with-vfpv3.c
index 2d5b5a8..f66524c 100644
--- a/gdb/features/arm-with-vfpv3.c
+++ b/gdb/features/arm-with-vfpv3.c
@@ -10,7 +10,6 @@ initialize_tdesc_arm_with_vfpv3 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.arm.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
diff --git a/gdb/features/i386/i386-mmx-linux.c b/gdb/features/i386/i386-mmx-linux.c
index 364ade4..872826a 100644
--- a/gdb/features/i386/i386-mmx-linux.c
+++ b/gdb/features/i386/i386-mmx-linux.c
@@ -10,7 +10,7 @@ initialize_tdesc_i386_mmx_linux (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
+  struct tdesc_type *field_type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("i386"));
 
diff --git a/gdb/features/i386/x32-avx-linux.c b/gdb/features/i386/x32-avx-linux.c
new file mode 100644
index 0000000..d2e5ce9
--- /dev/null
+++ b/gdb/features/i386/x32-avx-linux.c
@@ -0,0 +1,171 @@
+/* THIS FILE IS GENERATED.  Original: x32-avx-linux.xml */
+
+#include "defs.h"
+#include "osabi.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_x32_avx_linux;
+static void
+initialize_tdesc_x32_avx_linux (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+  struct tdesc_type *field_type, *type;
+
+  set_tdesc_architecture (result, bfd_scan_arch ("i386:x64-32"));
+
+  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
+  field_type = tdesc_create_flags (feature, "i386_eflags", 4);
+  tdesc_add_flag (field_type, 0, "CF");
+  tdesc_add_flag (field_type, 1, "");
+  tdesc_add_flag (field_type, 2, "PF");
+  tdesc_add_flag (field_type, 4, "AF");
+  tdesc_add_flag (field_type, 6, "ZF");
+  tdesc_add_flag (field_type, 7, "SF");
+  tdesc_add_flag (field_type, 8, "TF");
+  tdesc_add_flag (field_type, 9, "IF");
+  tdesc_add_flag (field_type, 10, "DF");
+  tdesc_add_flag (field_type, 11, "OF");
+  tdesc_add_flag (field_type, 14, "NT");
+  tdesc_add_flag (field_type, 16, "RF");
+  tdesc_add_flag (field_type, 17, "VM");
+  tdesc_add_flag (field_type, 18, "AC");
+  tdesc_add_flag (field_type, 19, "VIF");
+  tdesc_add_flag (field_type, 20, "VIP");
+  tdesc_add_flag (field_type, 21, "ID");
+
+  tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rdx", 3, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rsi", 4, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rdi", 5, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rbp", 6, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rsp", 7, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rip", 16, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "eflags", 17, 1, NULL, 32, "i386_eflags");
+  tdesc_create_reg (feature, "cs", 18, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "ss", 19, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "ds", 20, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "es", 21, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "fs", 22, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "gs", 23, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "st0", 24, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st1", 25, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st2", 26, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st3", 27, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st4", 28, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st5", 29, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st6", 30, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st7", 31, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "fctrl", 32, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fstat", 33, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "ftag", 34, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fiseg", 35, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fioff", 36, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "foseg", 37, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fooff", 38, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fop", 39, 1, "float", 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
+  field_type = tdesc_named_type (feature, "ieee_single");
+  tdesc_create_vector (feature, "v4f", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "ieee_double");
+  tdesc_create_vector (feature, "v2d", field_type, 2);
+
+  field_type = tdesc_named_type (feature, "int8");
+  tdesc_create_vector (feature, "v16i8", field_type, 16);
+
+  field_type = tdesc_named_type (feature, "int16");
+  tdesc_create_vector (feature, "v8i16", field_type, 8);
+
+  field_type = tdesc_named_type (feature, "int32");
+  tdesc_create_vector (feature, "v4i32", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "int64");
+  tdesc_create_vector (feature, "v2i64", field_type, 2);
+
+  type = tdesc_create_union (feature, "vec128");
+  field_type = tdesc_named_type (feature, "v4f");
+  tdesc_add_field (type, "v4_float", field_type);
+  field_type = tdesc_named_type (feature, "v2d");
+  tdesc_add_field (type, "v2_double", field_type);
+  field_type = tdesc_named_type (feature, "v16i8");
+  tdesc_add_field (type, "v16_int8", field_type);
+  field_type = tdesc_named_type (feature, "v8i16");
+  tdesc_add_field (type, "v8_int16", field_type);
+  field_type = tdesc_named_type (feature, "v4i32");
+  tdesc_add_field (type, "v4_int32", field_type);
+  field_type = tdesc_named_type (feature, "v2i64");
+  tdesc_add_field (type, "v2_int64", field_type);
+  field_type = tdesc_named_type (feature, "uint128");
+  tdesc_add_field (type, "uint128", field_type);
+
+  field_type = tdesc_create_flags (feature, "i386_mxcsr", 4);
+  tdesc_add_flag (field_type, 0, "IE");
+  tdesc_add_flag (field_type, 1, "DE");
+  tdesc_add_flag (field_type, 2, "ZE");
+  tdesc_add_flag (field_type, 3, "OE");
+  tdesc_add_flag (field_type, 4, "UE");
+  tdesc_add_flag (field_type, 5, "PE");
+  tdesc_add_flag (field_type, 6, "DAZ");
+  tdesc_add_flag (field_type, 7, "IM");
+  tdesc_add_flag (field_type, 8, "DM");
+  tdesc_add_flag (field_type, 9, "ZM");
+  tdesc_add_flag (field_type, 10, "OM");
+  tdesc_add_flag (field_type, 11, "UM");
+  tdesc_add_flag (field_type, 12, "PM");
+  tdesc_add_flag (field_type, 15, "FZ");
+
+  tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm3", 43, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm4", 44, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm5", 45, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm6", 46, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm7", 47, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm8", 48, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm9", 49, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm10", 50, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm11", 51, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm12", 52, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm13", 53, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm14", 54, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm15", 55, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "mxcsr", 56, 1, "vector", 32, "i386_mxcsr");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux");
+  tdesc_create_reg (feature, "orig_rax", 57, 1, NULL, 64, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx");
+  tdesc_create_reg (feature, "ymm0h", 58, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm1h", 59, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm2h", 60, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm3h", 61, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm4h", 62, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm5h", 63, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm6h", 64, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm7h", 65, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm8h", 66, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm9h", 67, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm10h", 68, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm11h", 69, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm12h", 70, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm13h", 71, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm14h", 72, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm15h", 73, 1, NULL, 128, "uint128");
+
+  tdesc_x32_avx_linux = result;
+}
diff --git a/gdb/features/i386/x32-avx-linux.xml b/gdb/features/i386/x32-avx-linux.xml
new file mode 100644
index 0000000..9ce4b2a
--- /dev/null
+++ b/gdb/features/i386/x32-avx-linux.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2012 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!-- X32 with AVX - Includes Linux-only special "register".  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <architecture>i386:x64-32</architecture>
+  <osabi>GNU/Linux</osabi>
+  <xi:include href="x32-core.xml"/>
+  <xi:include href="64bit-sse.xml"/>
+  <xi:include href="64bit-linux.xml"/>
+  <xi:include href="64bit-avx.xml"/>
+</target>
diff --git a/gdb/features/i386/x32-avx.c b/gdb/features/i386/x32-avx.c
new file mode 100644
index 0000000..47d7305
--- /dev/null
+++ b/gdb/features/i386/x32-avx.c
@@ -0,0 +1,166 @@
+/* THIS FILE IS GENERATED.  Original: x32-avx.xml */
+
+#include "defs.h"
+#include "osabi.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_x32_avx;
+static void
+initialize_tdesc_x32_avx (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+  struct tdesc_type *field_type, *type;
+
+  set_tdesc_architecture (result, bfd_scan_arch ("i386:x64-32"));
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
+  field_type = tdesc_create_flags (feature, "i386_eflags", 4);
+  tdesc_add_flag (field_type, 0, "CF");
+  tdesc_add_flag (field_type, 1, "");
+  tdesc_add_flag (field_type, 2, "PF");
+  tdesc_add_flag (field_type, 4, "AF");
+  tdesc_add_flag (field_type, 6, "ZF");
+  tdesc_add_flag (field_type, 7, "SF");
+  tdesc_add_flag (field_type, 8, "TF");
+  tdesc_add_flag (field_type, 9, "IF");
+  tdesc_add_flag (field_type, 10, "DF");
+  tdesc_add_flag (field_type, 11, "OF");
+  tdesc_add_flag (field_type, 14, "NT");
+  tdesc_add_flag (field_type, 16, "RF");
+  tdesc_add_flag (field_type, 17, "VM");
+  tdesc_add_flag (field_type, 18, "AC");
+  tdesc_add_flag (field_type, 19, "VIF");
+  tdesc_add_flag (field_type, 20, "VIP");
+  tdesc_add_flag (field_type, 21, "ID");
+
+  tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rdx", 3, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rsi", 4, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rdi", 5, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rbp", 6, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rsp", 7, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rip", 16, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "eflags", 17, 1, NULL, 32, "i386_eflags");
+  tdesc_create_reg (feature, "cs", 18, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "ss", 19, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "ds", 20, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "es", 21, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "fs", 22, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "gs", 23, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "st0", 24, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st1", 25, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st2", 26, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st3", 27, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st4", 28, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st5", 29, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st6", 30, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st7", 31, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "fctrl", 32, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fstat", 33, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "ftag", 34, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fiseg", 35, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fioff", 36, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "foseg", 37, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fooff", 38, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fop", 39, 1, "float", 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
+  field_type = tdesc_named_type (feature, "ieee_single");
+  tdesc_create_vector (feature, "v4f", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "ieee_double");
+  tdesc_create_vector (feature, "v2d", field_type, 2);
+
+  field_type = tdesc_named_type (feature, "int8");
+  tdesc_create_vector (feature, "v16i8", field_type, 16);
+
+  field_type = tdesc_named_type (feature, "int16");
+  tdesc_create_vector (feature, "v8i16", field_type, 8);
+
+  field_type = tdesc_named_type (feature, "int32");
+  tdesc_create_vector (feature, "v4i32", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "int64");
+  tdesc_create_vector (feature, "v2i64", field_type, 2);
+
+  type = tdesc_create_union (feature, "vec128");
+  field_type = tdesc_named_type (feature, "v4f");
+  tdesc_add_field (type, "v4_float", field_type);
+  field_type = tdesc_named_type (feature, "v2d");
+  tdesc_add_field (type, "v2_double", field_type);
+  field_type = tdesc_named_type (feature, "v16i8");
+  tdesc_add_field (type, "v16_int8", field_type);
+  field_type = tdesc_named_type (feature, "v8i16");
+  tdesc_add_field (type, "v8_int16", field_type);
+  field_type = tdesc_named_type (feature, "v4i32");
+  tdesc_add_field (type, "v4_int32", field_type);
+  field_type = tdesc_named_type (feature, "v2i64");
+  tdesc_add_field (type, "v2_int64", field_type);
+  field_type = tdesc_named_type (feature, "uint128");
+  tdesc_add_field (type, "uint128", field_type);
+
+  field_type = tdesc_create_flags (feature, "i386_mxcsr", 4);
+  tdesc_add_flag (field_type, 0, "IE");
+  tdesc_add_flag (field_type, 1, "DE");
+  tdesc_add_flag (field_type, 2, "ZE");
+  tdesc_add_flag (field_type, 3, "OE");
+  tdesc_add_flag (field_type, 4, "UE");
+  tdesc_add_flag (field_type, 5, "PE");
+  tdesc_add_flag (field_type, 6, "DAZ");
+  tdesc_add_flag (field_type, 7, "IM");
+  tdesc_add_flag (field_type, 8, "DM");
+  tdesc_add_flag (field_type, 9, "ZM");
+  tdesc_add_flag (field_type, 10, "OM");
+  tdesc_add_flag (field_type, 11, "UM");
+  tdesc_add_flag (field_type, 12, "PM");
+  tdesc_add_flag (field_type, 15, "FZ");
+
+  tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm3", 43, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm4", 44, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm5", 45, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm6", 46, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm7", 47, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm8", 48, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm9", 49, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm10", 50, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm11", 51, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm12", 52, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm13", 53, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm14", 54, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm15", 55, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "mxcsr", 56, 1, "vector", 32, "i386_mxcsr");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx");
+  tdesc_create_reg (feature, "ymm0h", 57, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm1h", 58, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm2h", 59, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm3h", 60, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm4h", 61, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm5h", 62, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm6h", 63, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm7h", 64, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm8h", 65, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm9h", 66, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm10h", 67, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm11h", 68, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm12h", 69, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm13h", 70, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm14h", 71, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm15h", 72, 1, NULL, 128, "uint128");
+
+  tdesc_x32_avx = result;
+}
diff --git a/gdb/features/i386/x32-avx.xml b/gdb/features/i386/x32-avx.xml
new file mode 100644
index 0000000..57a32c9
--- /dev/null
+++ b/gdb/features/i386/x32-avx.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2012 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!-- X32 with AVX -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <architecture>i386:x64-32</architecture>
+  <xi:include href="x32-core.xml"/>
+  <xi:include href="64bit-sse.xml"/>
+  <xi:include href="64bit-avx.xml"/>
+</target>
diff --git a/gdb/features/i386/x32-core.xml b/gdb/features/i386/x32-core.xml
new file mode 100644
index 0000000..1e41417
--- /dev/null
+++ b/gdb/features/i386/x32-core.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2012 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.i386.core">
+  <flags id="i386_eflags" size="4">
+    <field name="CF" start="0" end="0"/>
+    <field name="" start="1" end="1"/>
+    <field name="PF" start="2" end="2"/>
+    <field name="AF" start="4" end="4"/>
+    <field name="ZF" start="6" end="6"/>
+    <field name="SF" start="7" end="7"/>
+    <field name="TF" start="8" end="8"/>
+    <field name="IF" start="9" end="9"/>
+    <field name="DF" start="10" end="10"/>
+    <field name="OF" start="11" end="11"/>
+    <field name="NT" start="14" end="14"/>
+    <field name="RF" start="16" end="16"/>
+    <field name="VM" start="17" end="17"/>
+    <field name="AC" start="18" end="18"/>
+    <field name="VIF" start="19" end="19"/>
+    <field name="VIP" start="20" end="20"/>
+    <field name="ID" start="21" end="21"/>
+  </flags>
+
+  <reg name="rax" bitsize="64" type="int64"/>
+  <reg name="rbx" bitsize="64" type="int64"/>
+  <reg name="rcx" bitsize="64" type="int64"/>
+  <reg name="rdx" bitsize="64" type="int64"/>
+  <reg name="rsi" bitsize="64" type="int64"/>
+  <reg name="rdi" bitsize="64" type="int64"/>
+  <reg name="rbp" bitsize="64" type="int64"/>
+  <reg name="rsp" bitsize="64" type="int64"/>
+  <reg name="r8" bitsize="64" type="int64"/>
+  <reg name="r9" bitsize="64" type="int64"/>
+  <reg name="r10" bitsize="64" type="int64"/>
+  <reg name="r11" bitsize="64" type="int64"/>
+  <reg name="r12" bitsize="64" type="int64"/>
+  <reg name="r13" bitsize="64" type="int64"/>
+  <reg name="r14" bitsize="64" type="int64"/>
+  <reg name="r15" bitsize="64" type="int64"/>
+
+  <reg name="rip" bitsize="64" type="uint64"/>
+  <reg name="eflags" bitsize="32" type="i386_eflags"/>
+  <reg name="cs" bitsize="32" type="int32"/>
+  <reg name="ss" bitsize="32" type="int32"/>
+  <reg name="ds" bitsize="32" type="int32"/>
+  <reg name="es" bitsize="32" type="int32"/>
+  <reg name="fs" bitsize="32" type="int32"/>
+  <reg name="gs" bitsize="32" type="int32"/>
+
+  <reg name="st0" bitsize="80" type="i387_ext"/>
+  <reg name="st1" bitsize="80" type="i387_ext"/>
+  <reg name="st2" bitsize="80" type="i387_ext"/>
+  <reg name="st3" bitsize="80" type="i387_ext"/>
+  <reg name="st4" bitsize="80" type="i387_ext"/>
+  <reg name="st5" bitsize="80" type="i387_ext"/>
+  <reg name="st6" bitsize="80" type="i387_ext"/>
+  <reg name="st7" bitsize="80" type="i387_ext"/>
+
+  <reg name="fctrl" bitsize="32" type="int" group="float"/>
+  <reg name="fstat" bitsize="32" type="int" group="float"/>
+  <reg name="ftag" bitsize="32" type="int" group="float"/>
+  <reg name="fiseg" bitsize="32" type="int" group="float"/>
+  <reg name="fioff" bitsize="32" type="int" group="float"/>
+  <reg name="foseg" bitsize="32" type="int" group="float"/>
+  <reg name="fooff" bitsize="32" type="int" group="float"/>
+  <reg name="fop" bitsize="32" type="int" group="float"/>
+</feature>
diff --git a/gdb/features/i386/x32-linux.c b/gdb/features/i386/x32-linux.c
new file mode 100644
index 0000000..b42287d
--- /dev/null
+++ b/gdb/features/i386/x32-linux.c
@@ -0,0 +1,153 @@
+/* THIS FILE IS GENERATED.  Original: x32-linux.xml */
+
+#include "defs.h"
+#include "osabi.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_x32_linux;
+static void
+initialize_tdesc_x32_linux (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+  struct tdesc_type *field_type, *type;
+
+  set_tdesc_architecture (result, bfd_scan_arch ("i386:x64-32"));
+
+  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
+  field_type = tdesc_create_flags (feature, "i386_eflags", 4);
+  tdesc_add_flag (field_type, 0, "CF");
+  tdesc_add_flag (field_type, 1, "");
+  tdesc_add_flag (field_type, 2, "PF");
+  tdesc_add_flag (field_type, 4, "AF");
+  tdesc_add_flag (field_type, 6, "ZF");
+  tdesc_add_flag (field_type, 7, "SF");
+  tdesc_add_flag (field_type, 8, "TF");
+  tdesc_add_flag (field_type, 9, "IF");
+  tdesc_add_flag (field_type, 10, "DF");
+  tdesc_add_flag (field_type, 11, "OF");
+  tdesc_add_flag (field_type, 14, "NT");
+  tdesc_add_flag (field_type, 16, "RF");
+  tdesc_add_flag (field_type, 17, "VM");
+  tdesc_add_flag (field_type, 18, "AC");
+  tdesc_add_flag (field_type, 19, "VIF");
+  tdesc_add_flag (field_type, 20, "VIP");
+  tdesc_add_flag (field_type, 21, "ID");
+
+  tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rdx", 3, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rsi", 4, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rdi", 5, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rbp", 6, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rsp", 7, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rip", 16, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "eflags", 17, 1, NULL, 32, "i386_eflags");
+  tdesc_create_reg (feature, "cs", 18, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "ss", 19, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "ds", 20, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "es", 21, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "fs", 22, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "gs", 23, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "st0", 24, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st1", 25, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st2", 26, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st3", 27, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st4", 28, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st5", 29, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st6", 30, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st7", 31, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "fctrl", 32, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fstat", 33, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "ftag", 34, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fiseg", 35, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fioff", 36, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "foseg", 37, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fooff", 38, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fop", 39, 1, "float", 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
+  field_type = tdesc_named_type (feature, "ieee_single");
+  tdesc_create_vector (feature, "v4f", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "ieee_double");
+  tdesc_create_vector (feature, "v2d", field_type, 2);
+
+  field_type = tdesc_named_type (feature, "int8");
+  tdesc_create_vector (feature, "v16i8", field_type, 16);
+
+  field_type = tdesc_named_type (feature, "int16");
+  tdesc_create_vector (feature, "v8i16", field_type, 8);
+
+  field_type = tdesc_named_type (feature, "int32");
+  tdesc_create_vector (feature, "v4i32", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "int64");
+  tdesc_create_vector (feature, "v2i64", field_type, 2);
+
+  type = tdesc_create_union (feature, "vec128");
+  field_type = tdesc_named_type (feature, "v4f");
+  tdesc_add_field (type, "v4_float", field_type);
+  field_type = tdesc_named_type (feature, "v2d");
+  tdesc_add_field (type, "v2_double", field_type);
+  field_type = tdesc_named_type (feature, "v16i8");
+  tdesc_add_field (type, "v16_int8", field_type);
+  field_type = tdesc_named_type (feature, "v8i16");
+  tdesc_add_field (type, "v8_int16", field_type);
+  field_type = tdesc_named_type (feature, "v4i32");
+  tdesc_add_field (type, "v4_int32", field_type);
+  field_type = tdesc_named_type (feature, "v2i64");
+  tdesc_add_field (type, "v2_int64", field_type);
+  field_type = tdesc_named_type (feature, "uint128");
+  tdesc_add_field (type, "uint128", field_type);
+
+  field_type = tdesc_create_flags (feature, "i386_mxcsr", 4);
+  tdesc_add_flag (field_type, 0, "IE");
+  tdesc_add_flag (field_type, 1, "DE");
+  tdesc_add_flag (field_type, 2, "ZE");
+  tdesc_add_flag (field_type, 3, "OE");
+  tdesc_add_flag (field_type, 4, "UE");
+  tdesc_add_flag (field_type, 5, "PE");
+  tdesc_add_flag (field_type, 6, "DAZ");
+  tdesc_add_flag (field_type, 7, "IM");
+  tdesc_add_flag (field_type, 8, "DM");
+  tdesc_add_flag (field_type, 9, "ZM");
+  tdesc_add_flag (field_type, 10, "OM");
+  tdesc_add_flag (field_type, 11, "UM");
+  tdesc_add_flag (field_type, 12, "PM");
+  tdesc_add_flag (field_type, 15, "FZ");
+
+  tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm3", 43, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm4", 44, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm5", 45, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm6", 46, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm7", 47, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm8", 48, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm9", 49, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm10", 50, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm11", 51, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm12", 52, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm13", 53, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm14", 54, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm15", 55, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "mxcsr", 56, 1, "vector", 32, "i386_mxcsr");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux");
+  tdesc_create_reg (feature, "orig_rax", 57, 1, NULL, 64, "int");
+
+  tdesc_x32_linux = result;
+}
diff --git a/gdb/features/i386/x32-linux.xml b/gdb/features/i386/x32-linux.xml
new file mode 100644
index 0000000..6a1bc7f
--- /dev/null
+++ b/gdb/features/i386/x32-linux.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2012 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!-- X32 - Includes Linux-only special "register".  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <architecture>i386:x64-32</architecture>
+  <osabi>GNU/Linux</osabi>
+  <xi:include href="x32-core.xml"/>
+  <xi:include href="64bit-sse.xml"/>
+  <xi:include href="64bit-linux.xml"/>
+</target>
diff --git a/gdb/features/i386/x32.c b/gdb/features/i386/x32.c
new file mode 100644
index 0000000..6342ddd
--- /dev/null
+++ b/gdb/features/i386/x32.c
@@ -0,0 +1,148 @@
+/* THIS FILE IS GENERATED.  Original: x32.xml */
+
+#include "defs.h"
+#include "osabi.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_x32;
+static void
+initialize_tdesc_x32 (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+  struct tdesc_type *field_type, *type;
+
+  set_tdesc_architecture (result, bfd_scan_arch ("i386:x64-32"));
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
+  field_type = tdesc_create_flags (feature, "i386_eflags", 4);
+  tdesc_add_flag (field_type, 0, "CF");
+  tdesc_add_flag (field_type, 1, "");
+  tdesc_add_flag (field_type, 2, "PF");
+  tdesc_add_flag (field_type, 4, "AF");
+  tdesc_add_flag (field_type, 6, "ZF");
+  tdesc_add_flag (field_type, 7, "SF");
+  tdesc_add_flag (field_type, 8, "TF");
+  tdesc_add_flag (field_type, 9, "IF");
+  tdesc_add_flag (field_type, 10, "DF");
+  tdesc_add_flag (field_type, 11, "OF");
+  tdesc_add_flag (field_type, 14, "NT");
+  tdesc_add_flag (field_type, 16, "RF");
+  tdesc_add_flag (field_type, 17, "VM");
+  tdesc_add_flag (field_type, 18, "AC");
+  tdesc_add_flag (field_type, 19, "VIF");
+  tdesc_add_flag (field_type, 20, "VIP");
+  tdesc_add_flag (field_type, 21, "ID");
+
+  tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rdx", 3, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rsi", 4, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rdi", 5, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rbp", 6, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rsp", 7, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rip", 16, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "eflags", 17, 1, NULL, 32, "i386_eflags");
+  tdesc_create_reg (feature, "cs", 18, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "ss", 19, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "ds", 20, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "es", 21, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "fs", 22, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "gs", 23, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "st0", 24, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st1", 25, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st2", 26, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st3", 27, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st4", 28, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st5", 29, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st6", 30, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st7", 31, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "fctrl", 32, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fstat", 33, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "ftag", 34, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fiseg", 35, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fioff", 36, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "foseg", 37, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fooff", 38, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fop", 39, 1, "float", 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
+  field_type = tdesc_named_type (feature, "ieee_single");
+  tdesc_create_vector (feature, "v4f", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "ieee_double");
+  tdesc_create_vector (feature, "v2d", field_type, 2);
+
+  field_type = tdesc_named_type (feature, "int8");
+  tdesc_create_vector (feature, "v16i8", field_type, 16);
+
+  field_type = tdesc_named_type (feature, "int16");
+  tdesc_create_vector (feature, "v8i16", field_type, 8);
+
+  field_type = tdesc_named_type (feature, "int32");
+  tdesc_create_vector (feature, "v4i32", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "int64");
+  tdesc_create_vector (feature, "v2i64", field_type, 2);
+
+  type = tdesc_create_union (feature, "vec128");
+  field_type = tdesc_named_type (feature, "v4f");
+  tdesc_add_field (type, "v4_float", field_type);
+  field_type = tdesc_named_type (feature, "v2d");
+  tdesc_add_field (type, "v2_double", field_type);
+  field_type = tdesc_named_type (feature, "v16i8");
+  tdesc_add_field (type, "v16_int8", field_type);
+  field_type = tdesc_named_type (feature, "v8i16");
+  tdesc_add_field (type, "v8_int16", field_type);
+  field_type = tdesc_named_type (feature, "v4i32");
+  tdesc_add_field (type, "v4_int32", field_type);
+  field_type = tdesc_named_type (feature, "v2i64");
+  tdesc_add_field (type, "v2_int64", field_type);
+  field_type = tdesc_named_type (feature, "uint128");
+  tdesc_add_field (type, "uint128", field_type);
+
+  field_type = tdesc_create_flags (feature, "i386_mxcsr", 4);
+  tdesc_add_flag (field_type, 0, "IE");
+  tdesc_add_flag (field_type, 1, "DE");
+  tdesc_add_flag (field_type, 2, "ZE");
+  tdesc_add_flag (field_type, 3, "OE");
+  tdesc_add_flag (field_type, 4, "UE");
+  tdesc_add_flag (field_type, 5, "PE");
+  tdesc_add_flag (field_type, 6, "DAZ");
+  tdesc_add_flag (field_type, 7, "IM");
+  tdesc_add_flag (field_type, 8, "DM");
+  tdesc_add_flag (field_type, 9, "ZM");
+  tdesc_add_flag (field_type, 10, "OM");
+  tdesc_add_flag (field_type, 11, "UM");
+  tdesc_add_flag (field_type, 12, "PM");
+  tdesc_add_flag (field_type, 15, "FZ");
+
+  tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm3", 43, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm4", 44, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm5", 45, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm6", 46, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm7", 47, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm8", 48, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm9", 49, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm10", 50, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm11", 51, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm12", 52, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm13", 53, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm14", 54, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm15", 55, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "mxcsr", 56, 1, "vector", 32, "i386_mxcsr");
+
+  tdesc_x32 = result;
+}
diff --git a/gdb/features/i386/x32.xml b/gdb/features/i386/x32.xml
new file mode 100644
index 0000000..f950f4e
--- /dev/null
+++ b/gdb/features/i386/x32.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2012 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!-- X32 -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <architecture>i386:x64-32</architecture>
+  <xi:include href="x32-core.xml"/>
+  <xi:include href="64bit-sse.xml"/>
+</target>
diff --git a/gdb/features/mips-dsp-linux.c b/gdb/features/mips-dsp-linux.c
new file mode 100644
index 0000000..20e4ee3
--- /dev/null
+++ b/gdb/features/mips-dsp-linux.c
@@ -0,0 +1,109 @@
+/* THIS FILE IS GENERATED.  Original: mips-dsp-linux.xml */
+
+#include "defs.h"
+#include "osabi.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_mips_dsp_linux;
+static void
+initialize_tdesc_mips_dsp_linux (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+
+  set_tdesc_architecture (result, bfd_scan_arch ("mips"));
+
+  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.cpu");
+  tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r3", 3, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r4", 4, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r5", 5, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r6", 6, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r7", 7, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r8", 8, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r9", 9, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r10", 10, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r11", 11, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r12", 12, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r13", 13, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r14", 14, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r15", 15, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r16", 16, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r17", 17, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r18", 18, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r19", 19, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r20", 20, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r21", 21, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r22", 22, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r23", 23, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r24", 24, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r25", 25, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r26", 26, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r27", 27, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r28", 28, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r29", 29, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r30", 30, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r31", 31, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "lo", 33, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "hi", 34, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "pc", 37, 1, NULL, 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.cp0");
+  tdesc_create_reg (feature, "status", 32, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "badvaddr", 35, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "cause", 36, 1, NULL, 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.fpu");
+  tdesc_create_reg (feature, "f0", 38, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f1", 39, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f2", 40, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f3", 41, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f4", 42, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f5", 43, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f6", 44, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f7", 45, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f8", 46, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f9", 47, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f10", 48, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f11", 49, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f12", 50, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f13", 51, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f14", 52, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f15", 53, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f16", 54, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f17", 55, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f18", 56, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f19", 57, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f20", 58, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f21", 59, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f22", 60, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f23", 61, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f24", 62, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f25", 63, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f26", 64, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f27", 65, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f28", 66, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f29", 67, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f30", 68, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "f31", 69, 1, NULL, 32, "ieee_single");
+  tdesc_create_reg (feature, "fcsr", 70, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fir", 71, 1, "float", 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.dsp");
+  tdesc_create_reg (feature, "hi1", 72, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "lo1", 73, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "hi2", 74, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "lo2", 75, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "hi3", 76, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "lo3", 77, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "dspctl", 78, 1, NULL, 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.linux");
+  tdesc_create_reg (feature, "restart", 79, 1, "system", 32, "int");
+
+  tdesc_mips_dsp_linux = result;
+}
diff --git a/gdb/features/mips-dsp-linux.xml b/gdb/features/mips-dsp-linux.xml
new file mode 100644
index 0000000..63e3efd
--- /dev/null
+++ b/gdb/features/mips-dsp-linux.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2012 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <architecture>mips</architecture>
+  <osabi>GNU/Linux</osabi>
+  <xi:include href="mips-cpu.xml"/>
+  <xi:include href="mips-cp0.xml"/>
+  <xi:include href="mips-fpu.xml"/>
+  <xi:include href="mips-dsp.xml"/>
+
+  <feature name="org.gnu.gdb.mips.linux">
+    <reg name="restart" bitsize="32" group="system"/>
+  </feature>
+</target>
diff --git a/gdb/features/mips-dsp.xml b/gdb/features/mips-dsp.xml
new file mode 100644
index 0000000..0a421cf
--- /dev/null
+++ b/gdb/features/mips-dsp.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2012 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.mips.dsp">
+  <reg name="hi1" bitsize="32" regnum="72"/>
+  <reg name="lo1" bitsize="32" regnum="73"/>
+  <reg name="hi2" bitsize="32" regnum="74"/>
+  <reg name="lo2" bitsize="32" regnum="75"/>
+  <reg name="hi3" bitsize="32" regnum="76"/>
+  <reg name="lo3" bitsize="32" regnum="77"/>
+
+  <reg name="dspctl" bitsize="32" regnum="78"/>
+</feature>
diff --git a/gdb/features/mips-linux.c b/gdb/features/mips-linux.c
index 2af6b84..b0181eb 100644
--- a/gdb/features/mips-linux.c
+++ b/gdb/features/mips-linux.c
@@ -9,7 +9,6 @@ initialize_tdesc_mips_linux (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("mips"));
 
diff --git a/gdb/features/mips64-dsp-linux.c b/gdb/features/mips64-dsp-linux.c
new file mode 100644
index 0000000..3e67990
--- /dev/null
+++ b/gdb/features/mips64-dsp-linux.c
@@ -0,0 +1,107 @@
+/* THIS FILE IS GENERATED.  Original: mips64-dsp-linux.xml */
+
+#include "defs.h"
+#include "osabi.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_mips64_dsp_linux;
+static void
+initialize_tdesc_mips64_dsp_linux (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+
+  set_tdesc_architecture (result, bfd_scan_arch ("mips"));
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.cpu");
+  tdesc_create_reg (feature, "r0", 0, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r1", 1, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r2", 2, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r3", 3, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r4", 4, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r5", 5, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r6", 6, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r7", 7, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r16", 16, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r17", 17, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r18", 18, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r19", 19, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r20", 20, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r21", 21, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r22", 22, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r23", 23, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r24", 24, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r25", 25, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r26", 26, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r27", 27, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r28", 28, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r29", 29, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r30", 30, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "r31", 31, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "lo", 33, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "hi", 34, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "pc", 37, 1, NULL, 64, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.cp0");
+  tdesc_create_reg (feature, "status", 32, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "badvaddr", 35, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "cause", 36, 1, NULL, 64, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.fpu");
+  tdesc_create_reg (feature, "f0", 38, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f1", 39, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f2", 40, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f3", 41, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f4", 42, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f5", 43, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f6", 44, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f7", 45, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f8", 46, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f9", 47, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f10", 48, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f11", 49, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f12", 50, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f13", 51, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f14", 52, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f15", 53, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f16", 54, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f17", 55, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f18", 56, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f19", 57, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f20", 58, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f21", 59, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f22", 60, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f23", 61, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f24", 62, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f25", 63, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f26", 64, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f27", 65, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f28", 66, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f29", 67, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f30", 68, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "f31", 69, 1, NULL, 64, "ieee_double");
+  tdesc_create_reg (feature, "fcsr", 70, 1, "float", 64, "int");
+  tdesc_create_reg (feature, "fir", 71, 1, "float", 64, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.dsp");
+  tdesc_create_reg (feature, "hi1", 72, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "lo1", 73, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "hi2", 74, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "lo2", 75, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "hi3", 76, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "lo3", 77, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "dspctl", 78, 1, NULL, 32, "int");
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.mips.linux");
+  tdesc_create_reg (feature, "restart", 79, 1, "system", 64, "int");
+
+  tdesc_mips64_dsp_linux = result;
+}
diff --git a/gdb/features/mips64-dsp-linux.xml b/gdb/features/mips64-dsp-linux.xml
new file mode 100644
index 0000000..bce8838
--- /dev/null
+++ b/gdb/features/mips64-dsp-linux.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2012 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <architecture>mips</architecture>
+  <xi:include href="mips64-cpu.xml"/>
+  <xi:include href="mips64-cp0.xml"/>
+  <xi:include href="mips64-fpu.xml"/>
+  <xi:include href="mips64-dsp.xml"/>
+
+  <feature name="org.gnu.gdb.mips.linux">
+    <reg name="restart" bitsize="64" group="system"/>
+  </feature>
+</target>
diff --git a/gdb/features/mips64-dsp.xml b/gdb/features/mips64-dsp.xml
new file mode 100644
index 0000000..413e4d3
--- /dev/null
+++ b/gdb/features/mips64-dsp.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2012 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.mips.dsp">
+  <reg name="hi1" bitsize="64" regnum="72"/>
+  <reg name="lo1" bitsize="64" regnum="73"/>
+  <reg name="hi2" bitsize="64" regnum="74"/>
+  <reg name="lo2" bitsize="64" regnum="75"/>
+  <reg name="hi3" bitsize="64" regnum="76"/>
+  <reg name="lo3" bitsize="64" regnum="77"/>
+
+  <reg name="dspctl" bitsize="32" regnum="78"/>
+</feature>
diff --git a/gdb/features/mips64-linux.c b/gdb/features/mips64-linux.c
index 73dce6d..f214d12 100644
--- a/gdb/features/mips64-linux.c
+++ b/gdb/features/mips64-linux.c
@@ -9,7 +9,6 @@ initialize_tdesc_mips64_linux (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("mips"));
 
diff --git a/gdb/features/rs6000/powerpc-32.c b/gdb/features/rs6000/powerpc-32.c
index 1f503cd..1a1bdaa 100644
--- a/gdb/features/rs6000/powerpc-32.c
+++ b/gdb/features/rs6000/powerpc-32.c
@@ -9,7 +9,6 @@ initialize_tdesc_powerpc_32 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common"));
 
diff --git a/gdb/features/rs6000/powerpc-32l.c b/gdb/features/rs6000/powerpc-32l.c
index c954200..d562189 100644
--- a/gdb/features/rs6000/powerpc-32l.c
+++ b/gdb/features/rs6000/powerpc-32l.c
@@ -9,7 +9,6 @@ initialize_tdesc_powerpc_32l (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common"));
 
diff --git a/gdb/features/rs6000/powerpc-403.c b/gdb/features/rs6000/powerpc-403.c
index 5260450..990ed76 100644
--- a/gdb/features/rs6000/powerpc-403.c
+++ b/gdb/features/rs6000/powerpc-403.c
@@ -9,7 +9,6 @@ initialize_tdesc_powerpc_403 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
diff --git a/gdb/features/rs6000/powerpc-403gc.c b/gdb/features/rs6000/powerpc-403gc.c
index 1b51b9a..315b9ff 100644
--- a/gdb/features/rs6000/powerpc-403gc.c
+++ b/gdb/features/rs6000/powerpc-403gc.c
@@ -9,7 +9,6 @@ initialize_tdesc_powerpc_403gc (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
diff --git a/gdb/features/rs6000/powerpc-405.c b/gdb/features/rs6000/powerpc-405.c
index 7a6e476..3330535 100644
--- a/gdb/features/rs6000/powerpc-405.c
+++ b/gdb/features/rs6000/powerpc-405.c
@@ -10,7 +10,6 @@ initialize_tdesc_powerpc_405 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct type *field_type, *type;
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
diff --git a/gdb/features/rs6000/powerpc-505.c b/gdb/features/rs6000/powerpc-505.c
index bb4fafb..4974505 100644
--- a/gdb/features/rs6000/powerpc-505.c
+++ b/gdb/features/rs6000/powerpc-505.c
@@ -9,7 +9,6 @@ initialize_tdesc_powerpc_505 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
diff --git a/gdb/features/rs6000/powerpc-601.c b/gdb/features/rs6000/powerpc-601.c
index 7a68315..7d7e440 100644
--- a/gdb/features/rs6000/powerpc-601.c
+++ b/gdb/features/rs6000/powerpc-601.c
@@ -9,7 +9,6 @@ initialize_tdesc_powerpc_601 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int");
diff --git a/gdb/features/rs6000/powerpc-602.c b/gdb/features/rs6000/powerpc-602.c
index e4dfe88..c71e45a 100644
--- a/gdb/features/rs6000/powerpc-602.c
+++ b/gdb/features/rs6000/powerpc-602.c
@@ -9,7 +9,6 @@ initialize_tdesc_powerpc_602 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
diff --git a/gdb/features/rs6000/powerpc-603.c b/gdb/features/rs6000/powerpc-603.c
index 10c13d6..e2e3275 100644
--- a/gdb/features/rs6000/powerpc-603.c
+++ b/gdb/features/rs6000/powerpc-603.c
@@ -9,7 +9,6 @@ initialize_tdesc_powerpc_603 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
diff --git a/gdb/features/rs6000/powerpc-604.c b/gdb/features/rs6000/powerpc-604.c
index 5623277..24f2f14 100644
--- a/gdb/features/rs6000/powerpc-604.c
+++ b/gdb/features/rs6000/powerpc-604.c
@@ -9,7 +9,6 @@ initialize_tdesc_powerpc_604 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
diff --git a/gdb/features/rs6000/powerpc-64.c b/gdb/features/rs6000/powerpc-64.c
index 05b80a4..826af38 100644
--- a/gdb/features/rs6000/powerpc-64.c
+++ b/gdb/features/rs6000/powerpc-64.c
@@ -9,7 +9,6 @@ initialize_tdesc_powerpc_64 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64"));
 
diff --git a/gdb/features/rs6000/powerpc-64l.c b/gdb/features/rs6000/powerpc-64l.c
index 58e8476..7b83a70 100644
--- a/gdb/features/rs6000/powerpc-64l.c
+++ b/gdb/features/rs6000/powerpc-64l.c
@@ -9,7 +9,6 @@ initialize_tdesc_powerpc_64l (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64"));
 
diff --git a/gdb/features/rs6000/powerpc-750.c b/gdb/features/rs6000/powerpc-750.c
index 60d671f..8af9e80 100644
--- a/gdb/features/rs6000/powerpc-750.c
+++ b/gdb/features/rs6000/powerpc-750.c
@@ -9,7 +9,6 @@ initialize_tdesc_powerpc_750 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
diff --git a/gdb/features/rs6000/powerpc-860.c b/gdb/features/rs6000/powerpc-860.c
index 189062a..c259397 100644
--- a/gdb/features/rs6000/powerpc-860.c
+++ b/gdb/features/rs6000/powerpc-860.c
@@ -9,7 +9,6 @@ initialize_tdesc_powerpc_860 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   feature = tdesc_create_feature (result, "org.gnu.gdb.power.core");
   tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "uint32");
diff --git a/gdb/features/rs6000/powerpc-e500.c b/gdb/features/rs6000/powerpc-e500.c
index 28235ba..db54f6a 100644
--- a/gdb/features/rs6000/powerpc-e500.c
+++ b/gdb/features/rs6000/powerpc-e500.c
@@ -9,7 +9,6 @@ initialize_tdesc_powerpc_e500 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("powerpc:e500"));
 
diff --git a/gdb/features/rs6000/powerpc-e500l.c b/gdb/features/rs6000/powerpc-e500l.c
index d5facd4..479578c 100644
--- a/gdb/features/rs6000/powerpc-e500l.c
+++ b/gdb/features/rs6000/powerpc-e500l.c
@@ -9,7 +9,6 @@ initialize_tdesc_powerpc_e500l (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("powerpc:e500"));
 
diff --git a/gdb/features/rs6000/powerpc-isa205-32l.c b/gdb/features/rs6000/powerpc-isa205-32l.c
index 1cbbab9..5d1006c 100644
--- a/gdb/features/rs6000/powerpc-isa205-32l.c
+++ b/gdb/features/rs6000/powerpc-isa205-32l.c
@@ -9,7 +9,6 @@ initialize_tdesc_powerpc_isa205_32l (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common"));
 
diff --git a/gdb/features/rs6000/powerpc-isa205-64l.c b/gdb/features/rs6000/powerpc-isa205-64l.c
index 9b7e01b..c0a851d 100644
--- a/gdb/features/rs6000/powerpc-isa205-64l.c
+++ b/gdb/features/rs6000/powerpc-isa205-64l.c
@@ -9,7 +9,6 @@ initialize_tdesc_powerpc_isa205_64l (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("powerpc:common64"));
 
diff --git a/gdb/features/rs6000/rs6000.c b/gdb/features/rs6000/rs6000.c
index e499d16..9793059 100644
--- a/gdb/features/rs6000/rs6000.c
+++ b/gdb/features/rs6000/rs6000.c
@@ -9,7 +9,6 @@ initialize_tdesc_rs6000 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("rs6000:6000"));
 
diff --git a/gdb/features/s390-linux32.c b/gdb/features/s390-linux32.c
index 0c5069f..57ade3b 100644
--- a/gdb/features/s390-linux32.c
+++ b/gdb/features/s390-linux32.c
@@ -10,7 +10,6 @@ initialize_tdesc_s390_linux32 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit"));
 
diff --git a/gdb/features/s390-linux32v1.c b/gdb/features/s390-linux32v1.c
index d04641d..f1637cb 100644
--- a/gdb/features/s390-linux32v1.c
+++ b/gdb/features/s390-linux32v1.c
@@ -10,7 +10,6 @@ initialize_tdesc_s390_linux32v1 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit"));
 
diff --git a/gdb/features/s390-linux32v2.c b/gdb/features/s390-linux32v2.c
index 76620f0..75db548 100644
--- a/gdb/features/s390-linux32v2.c
+++ b/gdb/features/s390-linux32v2.c
@@ -10,7 +10,6 @@ initialize_tdesc_s390_linux32v2 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit"));
 
diff --git a/gdb/features/s390-linux64.c b/gdb/features/s390-linux64.c
index b8c4b16..bd6972e 100644
--- a/gdb/features/s390-linux64.c
+++ b/gdb/features/s390-linux64.c
@@ -10,7 +10,6 @@ initialize_tdesc_s390_linux64 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit"));
 
diff --git a/gdb/features/s390-linux64v1.c b/gdb/features/s390-linux64v1.c
index 0e6865f..4936a7f 100644
--- a/gdb/features/s390-linux64v1.c
+++ b/gdb/features/s390-linux64v1.c
@@ -10,7 +10,6 @@ initialize_tdesc_s390_linux64v1 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit"));
 
diff --git a/gdb/features/s390-linux64v2.c b/gdb/features/s390-linux64v2.c
index 13a6587..955b635 100644
--- a/gdb/features/s390-linux64v2.c
+++ b/gdb/features/s390-linux64v2.c
@@ -10,7 +10,6 @@ initialize_tdesc_s390_linux64v2 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("s390:31-bit"));
 
diff --git a/gdb/features/s390x-linux64.c b/gdb/features/s390x-linux64.c
index 9f95619..9cb8958 100644
--- a/gdb/features/s390x-linux64.c
+++ b/gdb/features/s390x-linux64.c
@@ -10,7 +10,6 @@ initialize_tdesc_s390x_linux64 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("s390:64-bit"));
 
diff --git a/gdb/features/s390x-linux64v1.c b/gdb/features/s390x-linux64v1.c
index b838c34..c41ff76 100644
--- a/gdb/features/s390x-linux64v1.c
+++ b/gdb/features/s390x-linux64v1.c
@@ -10,7 +10,6 @@ initialize_tdesc_s390x_linux64v1 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("s390:64-bit"));
 
diff --git a/gdb/features/s390x-linux64v2.c b/gdb/features/s390x-linux64v2.c
index 90a25d8..fb93d68 100644
--- a/gdb/features/s390x-linux64v2.c
+++ b/gdb/features/s390x-linux64v2.c
@@ -10,7 +10,6 @@ initialize_tdesc_s390x_linux64v2 (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("s390:64-bit"));
 
diff --git a/gdb/features/tic6x-c62x-linux.c b/gdb/features/tic6x-c62x-linux.c
index df82fc2..288309f 100644
--- a/gdb/features/tic6x-c62x-linux.c
+++ b/gdb/features/tic6x-c62x-linux.c
@@ -10,7 +10,6 @@ initialize_tdesc_tic6x_c62x_linux (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("tic6x"));
 
diff --git a/gdb/features/tic6x-c62x.c b/gdb/features/tic6x-c62x.c
index 6e3a9c8..0a2f958 100644
--- a/gdb/features/tic6x-c62x.c
+++ b/gdb/features/tic6x-c62x.c
@@ -10,7 +10,6 @@ initialize_tdesc_tic6x_c62x (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("tic6x"));
 
diff --git a/gdb/features/tic6x-c64x-linux.c b/gdb/features/tic6x-c64x-linux.c
index 39f9e95..59e1ced 100644
--- a/gdb/features/tic6x-c64x-linux.c
+++ b/gdb/features/tic6x-c64x-linux.c
@@ -10,7 +10,6 @@ initialize_tdesc_tic6x_c64x_linux (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("tic6x"));
 
diff --git a/gdb/features/tic6x-c64x.c b/gdb/features/tic6x-c64x.c
index 90f1785..f0fcdce 100644
--- a/gdb/features/tic6x-c64x.c
+++ b/gdb/features/tic6x-c64x.c
@@ -10,7 +10,6 @@ initialize_tdesc_tic6x_c64x (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("tic6x"));
 
diff --git a/gdb/features/tic6x-c64xp-linux.c b/gdb/features/tic6x-c64xp-linux.c
index a959ec6..927f8da 100644
--- a/gdb/features/tic6x-c64xp-linux.c
+++ b/gdb/features/tic6x-c64xp-linux.c
@@ -10,7 +10,6 @@ initialize_tdesc_tic6x_c64xp_linux (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("tic6x"));
 
diff --git a/gdb/features/tic6x-c64xp.c b/gdb/features/tic6x-c64xp.c
index 90cacb9..cd4de3a 100644
--- a/gdb/features/tic6x-c64xp.c
+++ b/gdb/features/tic6x-c64xp.c
@@ -10,7 +10,6 @@ initialize_tdesc_tic6x_c64xp (void)
 {
   struct target_desc *result = allocate_target_description ();
   struct tdesc_feature *feature;
-  struct tdesc_type *field_type, *type;
 
   set_tdesc_architecture (result, bfd_scan_arch ("tic6x"));
 
diff --git a/gdb/filesystem.c b/gdb/filesystem.c
index a32b957..d855b75 100644
--- a/gdb/filesystem.c
+++ b/gdb/filesystem.c
@@ -25,7 +25,7 @@
 const char file_system_kind_auto[] = "auto";
 const char file_system_kind_unix[] = "unix";
 const char file_system_kind_dos_based[] = "dos-based";
-const char *target_file_system_kinds[] =
+const char *const target_file_system_kinds[] =
 {
   file_system_kind_auto,
   file_system_kind_unix,
diff --git a/gdb/findcmd.c b/gdb/findcmd.c
index 3fce269..68184aa 100644
--- a/gdb/findcmd.c
+++ b/gdb/findcmd.c
@@ -170,6 +170,7 @@ parse_find_args (char *args, ULONGEST *max_countp,
     {
       LONGEST x;
       int val_bytes;
+      ULONGEST pattern_buf_size_need;
 
       while (isspace (*s))
 	++s;
@@ -179,12 +180,13 @@ parse_find_args (char *args, ULONGEST *max_countp,
 
       /* Keep it simple and assume size == 'g' when watching for when we
 	 need to grow the pattern buf.  */
-      if ((pattern_buf_end - pattern_buf + max (val_bytes, sizeof (int64_t)))
-	  > pattern_buf_size)
+      pattern_buf_size_need = (pattern_buf_end - pattern_buf
+			       + max (val_bytes, sizeof (int64_t)));
+      if (pattern_buf_size_need > pattern_buf_size)
 	{
 	  size_t current_offset = pattern_buf_end - pattern_buf;
 
-	  pattern_buf_size *= 2;
+	  pattern_buf_size = pattern_buf_size_need * 2;
 	  pattern_buf = xrealloc (pattern_buf, pattern_buf_size);
 	  pattern_buf_end = pattern_buf + current_offset;
 	}
diff --git a/gdb/findvar.c b/gdb/findvar.c
index 79c4221..66bcebe 100644
--- a/gdb/findvar.c
+++ b/gdb/findvar.c
@@ -34,6 +34,7 @@
 #include "user-regs.h"
 #include "block.h"
 #include "objfiles.h"
+#include "language.h"
 
 /* Basic byte-swapping routines.  All 'extract' functions return a
    host-format integer from a target-format integer at ADDR which is
@@ -405,13 +406,42 @@ symbol_read_needs_frame (struct symbol *sym)
   return 1;
 }
 
-/* Given a struct symbol for a variable,
-   and a stack frame id, read the value of the variable
-   and return a (pointer to a) struct value containing the value.
-   If the variable cannot be found, throw error.  */
+/* Private data to be used with minsym_lookup_iterator_cb.  */
+
+struct minsym_lookup_data
+{
+  /* The name of the minimal symbol we are searching for.  */
+  const char *name;
+
+  /* The field where the callback should store the minimal symbol
+     if found.  It should be initialized to NULL before the search
+     is started.  */
+  struct minimal_symbol *result;
+};
+
+/* A callback function for gdbarch_iterate_over_objfiles_in_search_order.
+   It searches by name for a minimal symbol within the given OBJFILE.
+   The arguments are passed via CB_DATA, which in reality is a pointer
+   to struct minsym_lookup_data.  */
+
+static int
+minsym_lookup_iterator_cb (struct objfile *objfile, void *cb_data)
+{
+  struct minsym_lookup_data *data = (struct minsym_lookup_data *) cb_data;
+
+  gdb_assert (data->result == NULL);
+
+  data->result = lookup_minimal_symbol (data->name, NULL, objfile);
+
+  /* The iterator should stop iff a match was found.  */
+  return (data->result != NULL);
+}
+
+/* A default implementation for the "la_read_var_value" hook in
+   the language vector which should work in most situations.  */
 
 struct value *
-read_var_value (struct symbol *var, struct frame_info *frame)
+default_read_var_value (struct symbol *var, struct frame_info *frame)
 {
   struct value *v;
   struct type *type = SYMBOL_TYPE (var);
@@ -560,10 +590,19 @@ read_var_value (struct symbol *var, struct frame_info *frame)
 
     case LOC_UNRESOLVED:
       {
+	struct minsym_lookup_data lookup_data;
 	struct minimal_symbol *msym;
 	struct obj_section *obj_section;
 
-	msym = lookup_minimal_symbol (SYMBOL_LINKAGE_NAME (var), NULL, NULL);
+	memset (&lookup_data, 0, sizeof (lookup_data));
+	lookup_data.name = SYMBOL_LINKAGE_NAME (var);
+
+	gdbarch_iterate_over_objfiles_in_search_order
+	  (get_objfile_arch (SYMBOL_SYMTAB (var)->objfile),
+	   minsym_lookup_iterator_cb, &lookup_data,
+	   SYMBOL_SYMTAB (var)->objfile);
+	msym = lookup_data.result;
+
 	if (msym == NULL)
 	  error (_("No global symbol \"%s\"."), SYMBOL_LINKAGE_NAME (var));
 	if (overlay_debugging)
@@ -594,6 +633,19 @@ read_var_value (struct symbol *var, struct frame_info *frame)
   return v;
 }
 
+/* Calls VAR's language la_read_var_value hook with the given arguments.  */
+
+struct value *
+read_var_value (struct symbol *var, struct frame_info *frame)
+{
+  const struct language_defn *lang = language_def (SYMBOL_LANGUAGE (var));
+
+  gdb_assert (lang != NULL);
+  gdb_assert (lang->la_read_var_value != NULL);
+
+  return lang->la_read_var_value (var, frame);
+}
+
 /* Install default attributes for register values.  */
 
 struct value *
diff --git a/gdb/fork-child.c b/gdb/fork-child.c
index cba91f9..b47019d 100644
--- a/gdb/fork-child.c
+++ b/gdb/fork-child.c
@@ -272,9 +272,6 @@ fork_inferior (char *exec_file_arg, char *allargs, char **env,
       argv[3] = (char *) 0;
     }
 
-  /* On some systems an exec will fail if the executable is open.  */
-  close_exec_file ();
-
   /* Retain a copy of our environment variables, since the child will
      replace the value of environ and if we're vforked, we have to
      restore it.  */
@@ -434,7 +431,7 @@ startup_inferior (int ntraps)
 
   while (1)
     {
-      enum target_signal resume_signal = TARGET_SIGNAL_0;
+      enum gdb_signal resume_signal = GDB_SIGNAL_0;
       ptid_t event_ptid;
 
       struct target_waitstatus ws;
@@ -461,8 +458,8 @@ startup_inferior (int ntraps)
 	    target_terminal_ours ();
 	    target_mourn_inferior ();
 	    error (_("During startup program terminated with signal %s, %s."),
-		   target_signal_to_name (ws.value.sig),
-		   target_signal_to_string (ws.value.sig));
+		   gdb_signal_to_name (ws.value.sig),
+		   gdb_signal_to_string (ws.value.sig));
 	    return;
 
 	  case TARGET_WAITKIND_EXITED:
@@ -478,7 +475,7 @@ startup_inferior (int ntraps)
 	  case TARGET_WAITKIND_EXECD:
 	    /* Handle EXEC signals as if they were SIGTRAP signals.  */
 	    xfree (ws.value.execd_pathname);
-	    resume_signal = TARGET_SIGNAL_TRAP;
+	    resume_signal = GDB_SIGNAL_TRAP;
 	    switch_to_thread (event_ptid);
 	    break;
 
@@ -488,7 +485,7 @@ startup_inferior (int ntraps)
 	    break;
 	}
 
-      if (resume_signal != TARGET_SIGNAL_TRAP)
+      if (resume_signal != GDB_SIGNAL_TRAP)
 	{
 	  /* Let shell child handle its own signals in its own way.  */
 	  target_resume (resume_ptid, 0, resume_signal);
@@ -517,7 +514,7 @@ startup_inferior (int ntraps)
 	    break;
 
 	  /* Just make it go on.  */
-	  target_resume (resume_ptid, 0, TARGET_SIGNAL_0);
+	  target_resume (resume_ptid, 0, GDB_SIGNAL_0);
 	}
     }
 
diff --git a/gdb/frame-unwind.h b/gdb/frame-unwind.h
index f82d763..aa58640 100644
--- a/gdb/frame-unwind.h
+++ b/gdb/frame-unwind.h
@@ -44,7 +44,9 @@ struct value;
 
 /* Given THIS frame, take a whiff of its registers (namely
    the PC and attributes) and if SELF is the applicable unwinder,
-   return non-zero.  Possibly also initialize THIS_PROLOGUE_CACHE.  */
+   return non-zero.  Possibly also initialize THIS_PROLOGUE_CACHE; but
+   only if returning 1.  Initializing THIS_PROLOGUE_CACHE in other
+   cases (0 return, or exception) is invalid.  */
 
 typedef int (frame_sniffer_ftype) (const struct frame_unwind *self,
 				   struct frame_info *this_frame,
diff --git a/gdb/frame.c b/gdb/frame.c
index 2bb843e..e012f2d 100644
--- a/gdb/frame.c
+++ b/gdb/frame.c
@@ -1031,6 +1031,26 @@ get_frame_register_unsigned (struct frame_info *frame, int regnum)
   return frame_unwind_register_unsigned (frame->next, regnum);
 }
 
+int
+read_frame_register_unsigned (struct frame_info *frame, int regnum,
+			      ULONGEST *val)
+{
+  struct value *regval = get_frame_register_value (frame, regnum);
+
+  if (!value_optimized_out (regval)
+      && value_entirely_available (regval))
+    {
+      struct gdbarch *gdbarch = get_frame_arch (frame);
+      enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+      int size = register_size (gdbarch, VALUE_REGNUM (regval));
+
+      *val = extract_unsigned_integer (value_contents (regval), size, byte_order);
+      return 1;
+    }
+
+  return 0;
+}
+
 void
 put_frame_register (struct frame_info *frame, int regnum,
 		    const gdb_byte *buf)
@@ -2096,6 +2116,8 @@ find_frame_sal (struct frame_info *frame, struct symtab_and_line *sal)
 	   we can't do much better.  */
 	sal->pc = get_frame_pc (frame);
 
+      sal->pspace = get_frame_program_space (frame);
+
       return;
     }
 
diff --git a/gdb/frame.h b/gdb/frame.h
index 67dddbd..7b42b56 100644
--- a/gdb/frame.h
+++ b/gdb/frame.h
@@ -500,6 +500,13 @@ extern ULONGEST frame_unwind_register_unsigned (struct frame_info *frame,
 extern ULONGEST get_frame_register_unsigned (struct frame_info *frame,
 					     int regnum);
 
+/* Read a register from this, or unwind a register from the next
+   frame.  Note that the read_frame methods are wrappers to
+   get_frame_register_value, that do not throw if the result is
+   optimized out or unavailable.  */
+
+extern int read_frame_register_unsigned (struct frame_info *frame,
+					 int regnum, ULONGEST *val);
 
 /* Get the value of the register that belongs to this FRAME.  This
    function is a wrapper to the call sequence ``frame_register_unwind
diff --git a/gdb/frv-linux-tdep.c b/gdb/frv-linux-tdep.c
index 76acdcf..dd41883 100644
--- a/gdb/frv-linux-tdep.c
+++ b/gdb/frv-linux-tdep.c
@@ -42,7 +42,8 @@ enum {
 };
 
 static int
-frv_linux_pc_in_sigtramp (struct gdbarch *gdbarch, CORE_ADDR pc, char *name)
+frv_linux_pc_in_sigtramp (struct gdbarch *gdbarch, CORE_ADDR pc,
+			  const char *name)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   char buf[frv_instr_size];
@@ -323,7 +324,7 @@ frv_linux_sigtramp_frame_sniffer (const struct frame_unwind *self,
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   CORE_ADDR pc = get_frame_pc (this_frame);
-  char *name;
+  const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
   if (frv_linux_pc_in_sigtramp (gdbarch, pc, name))
diff --git a/gdb/frv-tdep.c b/gdb/frv-tdep.c
index 370deb8..9262b10 100644
--- a/gdb/frv-tdep.c
+++ b/gdb/frv-tdep.c
@@ -136,7 +136,6 @@ new_variant (void)
 {
   struct gdbarch_tdep *var;
   int r;
-  char buf[20];
 
   var = xmalloc (sizeof (*var));
   memset (var, 0, sizeof (*var));
@@ -1099,8 +1098,6 @@ frv_frame_unwind_cache (struct frame_info *this_frame,
 			 void **this_prologue_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  CORE_ADDR pc;
-  ULONGEST this_base;
   struct frv_unwind_cache *info;
 
   if ((*this_prologue_cache))
@@ -1351,7 +1348,7 @@ frv_store_return_value (struct type *type, struct regcache *regcache,
 }
 
 static enum return_value_convention
-frv_return_value (struct gdbarch *gdbarch, struct type *func_type,
+frv_return_value (struct gdbarch *gdbarch, struct value *function,
 		  struct type *valtype, struct regcache *regcache,
 		  gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -1377,72 +1374,6 @@ frv_return_value (struct gdbarch *gdbarch, struct type *func_type,
     return RETURN_VALUE_REGISTER_CONVENTION;
 }
 
-
-/* Hardware watchpoint / breakpoint support for the FR500
-   and FR400.  */
-
-int
-frv_check_watch_resources (struct gdbarch *gdbarch, int type, int cnt, int ot)
-{
-  struct gdbarch_tdep *var = gdbarch_tdep (gdbarch);
-
-  /* Watchpoints not supported on simulator.  */
-  if (strcmp (target_shortname, "sim") == 0)
-    return 0;
-
-  if (type == bp_hardware_breakpoint)
-    {
-      if (var->num_hw_breakpoints == 0)
-	return 0;
-      else if (cnt <= var->num_hw_breakpoints)
-	return 1;
-    }
-  else
-    {
-      if (var->num_hw_watchpoints == 0)
-	return 0;
-      else if (ot)
-	return -1;
-      else if (cnt <= var->num_hw_watchpoints)
-	return 1;
-    }
-  return -1;
-}
-
-
-int
-frv_stopped_data_address (CORE_ADDR *addr_p)
-{
-  struct frame_info *frame = get_current_frame ();
-  CORE_ADDR brr, dbar0, dbar1, dbar2, dbar3;
-
-  brr = get_frame_register_unsigned (frame, brr_regnum);
-  dbar0 = get_frame_register_unsigned (frame, dbar0_regnum);
-  dbar1 = get_frame_register_unsigned (frame, dbar1_regnum);
-  dbar2 = get_frame_register_unsigned (frame, dbar2_regnum);
-  dbar3 = get_frame_register_unsigned (frame, dbar3_regnum);
-
-  if (brr & (1<<11))
-    *addr_p = dbar0;
-  else if (brr & (1<<10))
-    *addr_p = dbar1;
-  else if (brr & (1<<9))
-    *addr_p = dbar2;
-  else if (brr & (1<<8))
-    *addr_p = dbar3;
-  else
-    return 0;
-
-  return 1;
-}
-
-int
-frv_have_stopped_data_address (void)
-{
-  CORE_ADDR addr = 0;
-  return frv_stopped_data_address (&addr);
-}
-
 static CORE_ADDR
 frv_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
 {
diff --git a/gdb/gcore.c b/gdb/gcore.c
index f9e7590..aedda41 100644
--- a/gdb/gcore.c
+++ b/gdb/gcore.c
@@ -71,35 +71,37 @@ write_gcore_file (bfd *obfd)
   asection *note_sec = NULL;
 
   /* An external target method must build the notes section.  */
-  note_data = target_make_corefile_notes (obfd, &note_size);
+  /* FIXME: uweigand/2011-10-06: All architectures that support core file
+     generation should be converted to gdbarch_make_corefile_notes; at that
+     point, the target vector method can be removed.  */
+  if (!gdbarch_make_corefile_notes_p (target_gdbarch))
+    note_data = target_make_corefile_notes (obfd, &note_size);
+  else
+    note_data = gdbarch_make_corefile_notes (target_gdbarch, obfd, &note_size);
 
-  /* Create the note section.  */
-  if (note_data != NULL && note_size != 0)
-    {
-      note_sec = bfd_make_section_anyway_with_flags (obfd, "note0",
-						     SEC_HAS_CONTENTS
-						     | SEC_READONLY
-						     | SEC_ALLOC);
-      if (note_sec == NULL)
-	error (_("Failed to create 'note' section for corefile: %s"),
-	       bfd_errmsg (bfd_get_error ()));
+  if (note_data == NULL || note_size == 0)
+    error (_("Target does not support core file generation."));
 
-      bfd_set_section_vma (obfd, note_sec, 0);
-      bfd_set_section_alignment (obfd, note_sec, 0);
-      bfd_set_section_size (obfd, note_sec, note_size);
-    }
+  /* Create the note section.  */
+  note_sec = bfd_make_section_anyway_with_flags (obfd, "note0",
+						 SEC_HAS_CONTENTS
+						 | SEC_READONLY
+						 | SEC_ALLOC);
+  if (note_sec == NULL)
+    error (_("Failed to create 'note' section for corefile: %s"),
+	   bfd_errmsg (bfd_get_error ()));
+
+  bfd_set_section_vma (obfd, note_sec, 0);
+  bfd_set_section_alignment (obfd, note_sec, 0);
+  bfd_set_section_size (obfd, note_sec, note_size);
 
   /* Now create the memory/load sections.  */
   if (gcore_memory_sections (obfd) == 0)
     error (_("gcore: failed to get corefile memory sections from target."));
 
   /* Write out the contents of the note section.  */
-  if (note_data != NULL && note_size != 0)
-    {
-      if (!bfd_set_section_contents (obfd, note_sec, note_data, 0, note_size))
-	warning (_("writing note section (%s)"), 
-		 bfd_errmsg (bfd_get_error ()));
-    }
+  if (!bfd_set_section_contents (obfd, note_sec, note_data, 0, note_size))
+    warning (_("writing note section (%s)"), bfd_errmsg (bfd_get_error ()));
 }
 
 static void
@@ -559,8 +561,14 @@ gcore_copy_callback (bfd *obfd, asection *osec, void *ignored)
 static int
 gcore_memory_sections (bfd *obfd)
 {
-  if (target_find_memory_regions (gcore_create_callback, obfd) != 0)
-    return 0;			/* FIXME: error return/msg?  */
+  /* Try gdbarch method first, then fall back to target method.  */
+  if (!gdbarch_find_memory_regions_p (target_gdbarch)
+      || gdbarch_find_memory_regions (target_gdbarch,
+				      gcore_create_callback, obfd) != 0)
+    {
+      if (target_find_memory_regions (gcore_create_callback, obfd) != 0)
+	return 0;			/* FIXME: error return/msg?  */
+    }
 
   /* Record phdrs for section-to-segment mapping.  */
   bfd_map_over_sections (obfd, make_output_phdrs, NULL);
diff --git a/gdb/gdb-code-style.el b/gdb/gdb-code-style.el
new file mode 100644
index 0000000..28028e6
--- /dev/null
+++ b/gdb/gdb-code-style.el
@@ -0,0 +1,77 @@
+;;; gdb-code-style.el --- code style checker for GDB contributors
+
+;; Copyright (C) 2012 Free Software Foundation, Inc.
+
+;; Author: Yao Qi <yao at codesourcery.com>
+;; Created: 17 April 2012
+;; Version: 1.0
+;; Keywords: GDB
+
+;; 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 3 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, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; These hooks defined in this file provide some code style checks in
+;; Emacs.  You can load it in your ~/.emacs,
+;; (load-file "~/$(GDB_SOURCE)/gdb/gdb-code-style.el")
+
+
+;;; Code:
+
+;; Don't use these functions.  Their alternatives are better.  This list
+;; of functions is from ARI rules.
+(defun gdb-fun-name-hook ()
+  (font-lock-add-keywords
+   nil
+   '(("\\<\\(\\(xasprintf\\|abort\\|vasprintf\\|strerror\\|strdup\\|asprintf\\|sprintf\\)[ ]*\(\\)" 1 font-lock-warning-face t))))
+(add-hook 'c-mode-common-hook 'gdb-fun-name-hook)
+
+;; Don't include these files directly.
+(defun gdb-include-hook ()
+  (font-lock-add-keywords
+   nil
+   '(("\\<include[ ]*\\(<\\(sys/stat\\|stat\\|dirent\\|wait\\|sys/wait\\|assert\\)\\.h>\\)" 1 font-lock-warning-face t))))
+
+(add-hook 'c-mode-common-hook 'gdb-include-hook)
+
+;; Check marker up.  If the marker up is missing, like,
+;;   warning ("abc");
+;; The '(' and '"' will be highlight.
+(defun gdb-markup-hook ()
+  (font-lock-add-keywords
+   nil
+   '(("\\<\\(warning\\|error\\)[ ]*\\(\([^_]\\)" 2 font-lock-warning-face t))))
+
+(add-hook 'c-mode-common-hook 'gdb-markup-hook)
+
+(defun gdb-comment-hook ()
+  ;; A space should follow "/*", otherwise report a warning.
+  ;; If the comment is like:
+  ;; /*F.  */
+  ;; The 'F' will be highlight.
+  (font-lock-add-keywords
+   nil
+   '(("/\\*\\([^ ]\\).*\\*/" 1 font-lock-warning-face t)))
+  ;; Two spaces are needed between "." and "*/".  Report warning if there
+  ;; is no space (".*/") or only one space (". */").
+  ;; If the comment is like:
+  ;; /* ABC. */ or /* ABC.*/
+  ;; the '.' is highlight.
+  (font-lock-add-keywords
+   nil
+   '(("\\<[[:ascii:]]*\\(\\.[ ]?\\)\\*/" 1 font-lock-warning-face t)))
+  )
+(add-hook 'c-mode-common-hook 'gdb-comment-hook)
+
+;;; gdb-code-style.el ends here
diff --git a/gdb/gdbinit.in b/gdb/gdb-gdb.gdb.in
similarity index 100%
rename from gdb/gdbinit.in
rename to gdb/gdb-gdb.gdb.in
diff --git a/gdb/gdb-gdb.py b/gdb/gdb-gdb.py
index 7dace99..1ea03ce 100644
--- a/gdb/gdb-gdb.py
+++ b/gdb/gdb-gdb.py
@@ -99,10 +99,10 @@ class TypeFlagsPrinter:
             return
         # Note: TYPE_FLAG_MIN is a duplicate of TYPE_FLAG_UNSIGNED,
         # so exclude it from the list we are building.
-        TYPE_FLAGS = [TypeFlag(field.name, field.bitpos)
+        TYPE_FLAGS = [TypeFlag(field.name, field.enumval)
                       for field in flags.fields()
                       if field.name != 'TYPE_FLAG_MIN']
-        TYPE_FLAGS += [TypeFlag(field.name, field.bitpos)
+        TYPE_FLAGS += [TypeFlag(field.name, field.enumval)
                        for field in iflags.fields()]
         TYPE_FLAGS.sort()
 
@@ -154,6 +154,8 @@ class StructMainTypePrettyPrinter:
         loc_kind = str(field_val['loc_kind'])
         if loc_kind == "FIELD_LOC_KIND_BITPOS":
             return 'bitpos = %d' % loc_val['bitpos']
+        elif loc_kind == "FIELD_LOC_KIND_ENUMVAL":
+            return 'enumval = %d' % loc_val['enumval']
         elif loc_kind == "FIELD_LOC_KIND_PHYSADDR":
             return 'physaddr = 0x%x' % loc_val['physaddr']
         elif loc_kind == "FIELD_LOC_KIND_PHYSNAME":
@@ -166,7 +168,7 @@ class StructMainTypePrettyPrinter:
         """Return an image of the main_type field number FIELDNO.
         """
         f = self.val['flds_bnds']['fields'][fieldno]
-        label = "field[%d]:" % fieldno
+        label = "flds_bnds.fields[%d]:" % fieldno
         if f['artificial']:
             label += " (artificial)"
         fields = []
@@ -186,7 +188,7 @@ class StructMainTypePrettyPrinter:
         high = str(b['high'])
         if b['high_undefined'] != 0:
             high += " (undefined)"
-        return "bounds = {%s, %s}" % (low, high)
+        return "flds_bnds.bounds = {%s, %s}" % (low, high)
     def type_specific_img(self):
         """Return a string image of the main_type type_specific union.
         Only the relevant component of that union is printed (based on
diff --git a/gdb/gdb.1 b/gdb/gdb.1
index bdee581..f944343 100644
--- a/gdb/gdb.1
+++ b/gdb/gdb.1
@@ -33,7 +33,10 @@ gdb \- The GNU Debugger
 .I core\c
 \&\|]
 .RB "[\|" "\-x "\c
-.I cmds\c
+.I file\c
+\&\|]
+.RB "[\|" "\-ex "\c
+.I cmd\c
 \&\|]
 .RB "[\|" "\-d "\c
 .I dir\c
@@ -263,6 +266,13 @@ Execute GDB commands from file \c
 \&.  
 
 .TP
+.BI "\-ex " "command"\c
+\&
+Execute given GDB \c
+.I command\c
+\&.
+
+.TP
 .BI "\-directory=" "directory"\c
 .TP
 .BI "\-d " "directory"\c
diff --git a/gdb/gdb_curses.h b/gdb/gdb_curses.h
index 787f293..242d6e7 100644
--- a/gdb/gdb_curses.h
+++ b/gdb/gdb_curses.h
@@ -20,13 +20,6 @@
 #ifndef GDB_CURSES_H
 #define GDB_CURSES_H 1
 
-#if defined (HAVE_NCURSES_NCURSES_H)
-#include <ncurses/ncurses.h>
-#elif defined (HAVE_NCURSES_H)
-#include <ncurses.h>
-#elif defined (HAVE_CURSESX_H)
-#include <cursesX.h>
-#elif defined (HAVE_CURSES_H)
 #ifdef __MINGW32__
 /* Windows API headers, included e.g. by serial.h, define MOUSE_MOVED,
    and so does PDCurses's curses.h, but for an entirely different
@@ -34,7 +27,18 @@
    anywhere, avoid compiler warnings by undefining MOUSE_MOVED before
    including curses.h.  */
 #undef MOUSE_MOVED
+/* Likewise, KEY_EVENT is defined by ncurses.h, but also by Windows
+   API headers.  */
+#undef KEY_EVENT
 #endif
+
+#if defined (HAVE_NCURSES_NCURSES_H)
+#include <ncurses/ncurses.h>
+#elif defined (HAVE_NCURSES_H)
+#include <ncurses.h>
+#elif defined (HAVE_CURSESX_H)
+#include <cursesX.h>
+#elif defined (HAVE_CURSES_H)
 #include <curses.h>
 #endif
 
diff --git a/gdb/gdb_proc_service.h b/gdb/gdb_proc_service.h
index 42309b8..34167a0 100644
--- a/gdb/gdb_proc_service.h
+++ b/gdb/gdb_proc_service.h
@@ -23,7 +23,31 @@
 
 #ifdef HAVE_PROC_SERVICE_H
 #include <proc_service.h>
-#else
+
+#else /* HAVE_PROC_SERVICE_H */
+
+/* The following fallback definitions have been imported and adjusted
+   from glibc's proc_service.h  */
+
+/* Callback interface for libthread_db, functions users must define.
+   Copyright (C) 1999,2002,2003 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* The definitions in this file must correspond to those in the debugger.  */
 
 #ifdef HAVE_SYS_PROCFS_H
 #include <sys/procfs.h>
@@ -31,15 +55,16 @@
 
 #include "gregset.h"
 
+/* Functions in this interface return one of these status codes.  */
 typedef enum
 {
-  PS_OK,			/* Success.  */
-  PS_ERR,			/* Generic error.  */
-  PS_BADPID,			/* Bad process handle.  */
-  PS_BADLID,			/* Bad LWP id.  */
-  PS_BADADDR,			/* Bad address.  */
-  PS_NOSYM,			/* Symbol not found.  */
-  PS_NOFREGS			/* FPU register set not available.  */
+  PS_OK,		/* Generic "call succeeded".  */
+  PS_ERR,		/* Generic error. */
+  PS_BADPID,		/* Bad process handle.  */
+  PS_BADLID,		/* Bad LWP identifier.  */
+  PS_BADADDR,		/* Bad address.  */
+  PS_NOSYM,		/* Could not find given symbol.  */
+  PS_NOFREGS		/* FPU register set not available for given LWP.  */
 } ps_err_e;
 
 #ifndef HAVE_LWPID_T
@@ -58,6 +83,73 @@ typedef gdb_gregset_t prgregset_t;
 typedef gdb_fpregset_t prfpregset_t;
 #endif
 
+/* This type is opaque in this interface.  It's defined by the user of
+   libthread_db.  GDB's version is defined below.  */
+struct ps_prochandle;
+
+
+/* Read or write process memory at the given address.  */
+extern ps_err_e ps_pdread (struct ps_prochandle *,
+			   psaddr_t, void *, size_t);
+extern ps_err_e ps_pdwrite (struct ps_prochandle *,
+			    psaddr_t, const void *, size_t);
+extern ps_err_e ps_ptread (struct ps_prochandle *,
+			   psaddr_t, void *, size_t);
+extern ps_err_e ps_ptwrite (struct ps_prochandle *,
+			    psaddr_t, const void *, size_t);
+
+
+/* Get and set the given LWP's general or FPU register set.  */
+extern ps_err_e ps_lgetregs (struct ps_prochandle *,
+			     lwpid_t, prgregset_t);
+extern ps_err_e ps_lsetregs (struct ps_prochandle *,
+			     lwpid_t, const prgregset_t);
+extern ps_err_e ps_lgetfpregs (struct ps_prochandle *,
+			       lwpid_t, prfpregset_t *);
+extern ps_err_e ps_lsetfpregs (struct ps_prochandle *,
+			       lwpid_t, const prfpregset_t *);
+
+/* Return the PID of the process.  */
+extern pid_t ps_getpid (struct ps_prochandle *);
+
+/* Fetch the special per-thread address associated with the given LWP.
+   This call is only used on a few platforms (most use a normal register).
+   The meaning of the `int' parameter is machine-dependent.  */
+extern ps_err_e ps_get_thread_area (const struct ps_prochandle *,
+				    lwpid_t, int, psaddr_t *);
+
+
+/* Look up the named symbol in the named DSO in the symbol tables
+   associated with the process being debugged, filling in *SYM_ADDR
+   with the corresponding run-time address.  */
+extern ps_err_e ps_pglobal_lookup (struct ps_prochandle *,
+				   const char *object_name,
+				   const char *sym_name,
+				   psaddr_t *sym_addr);
+
+
+/* Stop or continue the entire process.  */
+extern ps_err_e ps_pstop (struct ps_prochandle *);
+extern ps_err_e ps_pcontinue (struct ps_prochandle *);
+
+/* Stop or continue the given LWP alone.  */
+extern ps_err_e ps_lstop (struct ps_prochandle *, lwpid_t);
+extern ps_err_e ps_lcontinue (struct ps_prochandle *, lwpid_t);
+
+/* The following are only defined in/called by Solaris.  */
+
+/* Get size of extra register set.  */
+extern ps_err_e ps_lgetxregsize (struct ps_prochandle *ph,
+				 lwpid_t lwpid, int *xregsize);
+/* Get extra register set.  */
+extern ps_err_e ps_lgetxregs (struct ps_prochandle *ph, lwpid_t lwpid,
+			      caddr_t xregset);
+extern ps_err_e ps_lsetxregs (struct ps_prochandle *ph, lwpid_t lwpid,
+			      caddr_t xregset);
+
+/* Log a message (sends to gdb_stderr).  */
+extern void ps_plog (const char *fmt, ...);
+
 #endif /* HAVE_PROC_SERVICE_H */
 
 /* Fix-up some broken systems.  */
@@ -72,7 +164,7 @@ typedef gdb_fpregset_t gdb_prfpregset_t;
 typedef prfpregset_t gdb_prfpregset_t;
 #endif
 
-/* Structure that identifies the target process.  */
+/* GDB specific structure that identifies the target process.  */
 struct ps_prochandle
 {
   /* The LWP we use for memory reads.  */
diff --git a/gdb/gdb_vecs.h b/gdb/gdb_vecs.h
new file mode 100644
index 0000000..d6de54a
--- /dev/null
+++ b/gdb/gdb_vecs.h
@@ -0,0 +1,47 @@
+/* Some commonly-used VEC types.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+
+#ifndef GDB_VECS_H
+#define GDB_VECS_H
+
+#include "vec.h"
+
+struct probe;
+
+DEF_VEC_P (char_ptr);
+
+DEF_VEC_P (const_char_ptr);
+
+/* From utils.c: */
+
+extern void free_char_ptr_vec (VEC (char_ptr) *char_ptr_vec);
+
+extern struct cleanup *
+  make_cleanup_free_char_ptr_vec (VEC (char_ptr) *char_ptr_vec);
+
+extern void dirnames_to_char_ptr_vec_append (VEC (char_ptr) **vecp,
+					     const char *dirnames);
+
+extern VEC (char_ptr) *dirnames_to_char_ptr_vec (const char *dirnames);
+
+typedef struct probe *probe_p;
+DEF_VEC_P (probe_p);
+
+#endif /* GDB_VECS_H */
diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c
index 1ada504..f3d81a1 100644
--- a/gdb/gdbarch.c
+++ b/gdb/gdbarch.c
@@ -49,6 +49,7 @@
 #include "gdb_obstack.h"
 #include "observer.h"
 #include "regcache.h"
+#include "objfiles.h"
 
 /* Static function declarations */
 
@@ -199,6 +200,7 @@ struct gdbarch
   gdbarch_address_to_pointer_ftype *address_to_pointer;
   gdbarch_integer_to_address_ftype *integer_to_address;
   gdbarch_return_value_ftype *return_value;
+  gdbarch_return_in_first_hidden_param_p_ftype *return_in_first_hidden_param_p;
   gdbarch_skip_prologue_ftype *skip_prologue;
   gdbarch_skip_main_prologue_ftype *skip_main_prologue;
   gdbarch_inner_than_ftype *inner_than;
@@ -239,6 +241,8 @@ struct gdbarch
   gdbarch_fetch_pointer_argument_ftype *fetch_pointer_argument;
   gdbarch_regset_from_core_section_ftype *regset_from_core_section;
   struct core_regset_section * core_regset_sections;
+  gdbarch_make_corefile_notes_ftype *make_corefile_notes;
+  gdbarch_find_memory_regions_ftype *find_memory_regions;
   gdbarch_core_xfer_shared_libraries_ftype *core_xfer_shared_libraries;
   gdbarch_core_pid_to_str_ftype *core_pid_to_str;
   const char * gcore_bfd_target;
@@ -258,11 +262,20 @@ struct gdbarch
   int sofun_address_maybe_missing;
   gdbarch_process_record_ftype *process_record;
   gdbarch_process_record_signal_ftype *process_record_signal;
-  gdbarch_target_signal_from_host_ftype *target_signal_from_host;
-  gdbarch_target_signal_to_host_ftype *target_signal_to_host;
+  gdbarch_gdb_signal_from_target_ftype *gdb_signal_from_target;
   gdbarch_get_siginfo_type_ftype *get_siginfo_type;
   gdbarch_record_special_symbol_ftype *record_special_symbol;
   gdbarch_get_syscall_number_ftype *get_syscall_number;
+  const char * stap_integer_prefix;
+  const char * stap_integer_suffix;
+  const char * stap_register_prefix;
+  const char * stap_register_suffix;
+  const char * stap_register_indirection_prefix;
+  const char * stap_register_indirection_suffix;
+  const char * stap_gdb_register_prefix;
+  const char * stap_gdb_register_suffix;
+  gdbarch_stap_is_single_operand_ftype *stap_is_single_operand;
+  gdbarch_stap_parse_special_token_ftype *stap_parse_special_token;
   int has_global_solist;
   int has_global_breakpoints;
   gdbarch_has_shared_address_space_ftype *has_shared_address_space;
@@ -272,6 +285,8 @@ struct gdbarch
   const char * solib_symbols_extension;
   int has_dos_based_file_system;
   gdbarch_gen_return_address_ftype *gen_return_address;
+  gdbarch_info_proc_ftype *info_proc;
+  gdbarch_iterate_over_objfiles_in_search_order_ftype *iterate_over_objfiles_in_search_order;
 };
 
 
@@ -354,6 +369,7 @@ struct gdbarch startup_gdbarch =
   unsigned_address_to_pointer,  /* address_to_pointer */
   0,  /* integer_to_address */
   0,  /* return_value */
+  default_return_in_first_hidden_param_p,  /* return_in_first_hidden_param_p */
   0,  /* skip_prologue */
   0,  /* skip_main_prologue */
   0,  /* inner_than */
@@ -394,6 +410,8 @@ struct gdbarch startup_gdbarch =
   0,  /* fetch_pointer_argument */
   0,  /* regset_from_core_section */
   0,  /* core_regset_sections */
+  0,  /* make_corefile_notes */
+  0,  /* find_memory_regions */
   0,  /* core_xfer_shared_libraries */
   0,  /* core_pid_to_str */
   0,  /* gcore_bfd_target */
@@ -413,11 +431,20 @@ struct gdbarch startup_gdbarch =
   0,  /* sofun_address_maybe_missing */
   0,  /* process_record */
   0,  /* process_record_signal */
-  default_target_signal_from_host,  /* target_signal_from_host */
-  default_target_signal_to_host,  /* target_signal_to_host */
+  0,  /* gdb_signal_from_target */
   0,  /* get_siginfo_type */
   0,  /* record_special_symbol */
   0,  /* get_syscall_number */
+  0,  /* stap_integer_prefix */
+  0,  /* stap_integer_suffix */
+  0,  /* stap_register_prefix */
+  0,  /* stap_register_suffix */
+  0,  /* stap_register_indirection_prefix */
+  0,  /* stap_register_indirection_suffix */
+  0,  /* stap_gdb_register_prefix */
+  0,  /* stap_gdb_register_suffix */
+  0,  /* stap_is_single_operand */
+  0,  /* stap_parse_special_token */
   0,  /* has_global_solist */
   0,  /* has_global_breakpoints */
   default_has_shared_address_space,  /* has_shared_address_space */
@@ -427,6 +454,8 @@ struct gdbarch startup_gdbarch =
   0,  /* solib_symbols_extension */
   0,  /* has_dos_based_file_system */
   default_gen_return_address,  /* gen_return_address */
+  0,  /* info_proc */
+  default_iterate_over_objfiles_in_search_order,  /* iterate_over_objfiles_in_search_order */
   /* startup_gdbarch() */
 };
 
@@ -492,6 +521,7 @@ gdbarch_alloc (const struct gdbarch_info *info,
   gdbarch->value_from_register = default_value_from_register;
   gdbarch->pointer_to_address = unsigned_pointer_to_address;
   gdbarch->address_to_pointer = unsigned_address_to_pointer;
+  gdbarch->return_in_first_hidden_param_p = default_return_in_first_hidden_param_p;
   gdbarch->remote_breakpoint_from_pc = default_remote_breakpoint_from_pc;
   gdbarch->memory_insert_breakpoint = default_memory_insert_breakpoint;
   gdbarch->memory_remove_breakpoint = default_memory_remove_breakpoint;
@@ -512,13 +542,12 @@ gdbarch_alloc (const struct gdbarch_info *info,
   gdbarch->displaced_step_free_closure = NULL;
   gdbarch->displaced_step_location = NULL;
   gdbarch->relocate_instruction = NULL;
-  gdbarch->target_signal_from_host = default_target_signal_from_host;
-  gdbarch->target_signal_to_host = default_target_signal_to_host;
   gdbarch->has_shared_address_space = default_has_shared_address_space;
   gdbarch->fast_tracepoint_valid_at = default_fast_tracepoint_valid_at;
   gdbarch->auto_charset = default_auto_charset;
   gdbarch->auto_wide_charset = default_auto_wide_charset;
   gdbarch->gen_return_address = default_gen_return_address;
+  gdbarch->iterate_over_objfiles_in_search_order = default_iterate_over_objfiles_in_search_order;
   /* gdbarch_alloc() */
 
   return gdbarch;
@@ -639,6 +668,7 @@ verify_gdbarch (struct gdbarch *gdbarch)
   /* Skip verify of address_to_pointer, invalid_p == 0 */
   /* Skip verify of integer_to_address, has predicate.  */
   /* Skip verify of return_value, has predicate.  */
+  /* Skip verify of return_in_first_hidden_param_p, invalid_p == 0 */
   if (gdbarch->skip_prologue == 0)
     fprintf_unfiltered (log, "\n\tskip_prologue");
   /* Skip verify of skip_main_prologue, has predicate.  */
@@ -681,6 +711,8 @@ verify_gdbarch (struct gdbarch *gdbarch)
   /* Skip verify of register_reggroup_p, invalid_p == 0 */
   /* Skip verify of fetch_pointer_argument, has predicate.  */
   /* Skip verify of regset_from_core_section, has predicate.  */
+  /* Skip verify of make_corefile_notes, has predicate.  */
+  /* Skip verify of find_memory_regions, has predicate.  */
   /* Skip verify of core_xfer_shared_libraries, has predicate.  */
   /* Skip verify of core_pid_to_str, has predicate.  */
   /* Skip verify of gcore_bfd_target, has predicate.  */
@@ -702,11 +734,20 @@ verify_gdbarch (struct gdbarch *gdbarch)
   /* Skip verify of sofun_address_maybe_missing, invalid_p == 0 */
   /* Skip verify of process_record, has predicate.  */
   /* Skip verify of process_record_signal, has predicate.  */
-  /* Skip verify of target_signal_from_host, invalid_p == 0 */
-  /* Skip verify of target_signal_to_host, invalid_p == 0 */
+  /* Skip verify of gdb_signal_from_target, has predicate.  */
   /* Skip verify of get_siginfo_type, has predicate.  */
   /* Skip verify of record_special_symbol, has predicate.  */
   /* Skip verify of get_syscall_number, has predicate.  */
+  /* Skip verify of stap_integer_prefix, invalid_p == 0 */
+  /* Skip verify of stap_integer_suffix, invalid_p == 0 */
+  /* Skip verify of stap_register_prefix, invalid_p == 0 */
+  /* Skip verify of stap_register_suffix, invalid_p == 0 */
+  /* Skip verify of stap_register_indirection_prefix, invalid_p == 0 */
+  /* Skip verify of stap_register_indirection_suffix, invalid_p == 0 */
+  /* Skip verify of stap_gdb_register_prefix, invalid_p == 0 */
+  /* Skip verify of stap_gdb_register_suffix, invalid_p == 0 */
+  /* Skip verify of stap_is_single_operand, has predicate.  */
+  /* Skip verify of stap_parse_special_token, has predicate.  */
   /* Skip verify of has_global_solist, invalid_p == 0 */
   /* Skip verify of has_global_breakpoints, invalid_p == 0 */
   /* Skip verify of has_shared_address_space, invalid_p == 0 */
@@ -715,6 +756,8 @@ verify_gdbarch (struct gdbarch *gdbarch)
   /* Skip verify of auto_wide_charset, invalid_p == 0 */
   /* Skip verify of has_dos_based_file_system, invalid_p == 0 */
   /* Skip verify of gen_return_address, invalid_p == 0 */
+  /* Skip verify of info_proc, has predicate.  */
+  /* Skip verify of iterate_over_objfiles_in_search_order, invalid_p == 0 */
   buf = ui_file_xstrdup (log, &length);
   make_cleanup (xfree, buf);
   if (length > 0)
@@ -922,6 +965,12 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
                       "gdbarch_dump: fetch_tls_load_module_address = <%s>\n",
                       host_address_to_string (gdbarch->fetch_tls_load_module_address));
   fprintf_unfiltered (file,
+                      "gdbarch_dump: gdbarch_find_memory_regions_p() = %d\n",
+                      gdbarch_find_memory_regions_p (gdbarch));
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: find_memory_regions = <%s>\n",
+                      host_address_to_string (gdbarch->find_memory_regions));
+  fprintf_unfiltered (file,
                       "gdbarch_dump: float_bit = %s\n",
                       plongest (gdbarch->float_bit));
   fprintf_unfiltered (file,
@@ -955,6 +1004,12 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
                       "gdbarch_dump: gcore_bfd_target = %s\n",
                       pstring (gdbarch->gcore_bfd_target));
   fprintf_unfiltered (file,
+                      "gdbarch_dump: gdbarch_gdb_signal_from_target_p() = %d\n",
+                      gdbarch_gdb_signal_from_target_p (gdbarch));
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: gdb_signal_from_target = <%s>\n",
+                      host_address_to_string (gdbarch->gdb_signal_from_target));
+  fprintf_unfiltered (file,
                       "gdbarch_dump: gen_return_address = <%s>\n",
                       host_address_to_string (gdbarch->gen_return_address));
   fprintf_unfiltered (file,
@@ -1003,6 +1058,12 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
                       "gdbarch_dump: in_solib_return_trampoline = <%s>\n",
                       host_address_to_string (gdbarch->in_solib_return_trampoline));
   fprintf_unfiltered (file,
+                      "gdbarch_dump: gdbarch_info_proc_p() = %d\n",
+                      gdbarch_info_proc_p (gdbarch));
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: info_proc = <%s>\n",
+                      host_address_to_string (gdbarch->info_proc));
+  fprintf_unfiltered (file,
                       "gdbarch_dump: inner_than = <%s>\n",
                       host_address_to_string (gdbarch->inner_than));
   fprintf_unfiltered (file,
@@ -1015,6 +1076,9 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
                       "gdbarch_dump: integer_to_address = <%s>\n",
                       host_address_to_string (gdbarch->integer_to_address));
   fprintf_unfiltered (file,
+                      "gdbarch_dump: iterate_over_objfiles_in_search_order = <%s>\n",
+                      host_address_to_string (gdbarch->iterate_over_objfiles_in_search_order));
+  fprintf_unfiltered (file,
                       "gdbarch_dump: long_bit = %s\n",
                       plongest (gdbarch->long_bit));
   fprintf_unfiltered (file,
@@ -1030,6 +1094,12 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
                       "gdbarch_dump: long_long_bit = %s\n",
                       plongest (gdbarch->long_long_bit));
   fprintf_unfiltered (file,
+                      "gdbarch_dump: gdbarch_make_corefile_notes_p() = %d\n",
+                      gdbarch_make_corefile_notes_p (gdbarch));
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: make_corefile_notes = <%s>\n",
+                      host_address_to_string (gdbarch->make_corefile_notes));
+  fprintf_unfiltered (file,
                       "gdbarch_dump: gdbarch_max_insn_length_p() = %d\n",
                       gdbarch_max_insn_length_p (gdbarch));
   fprintf_unfiltered (file,
@@ -1177,6 +1247,9 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
                       "gdbarch_dump: remote_register_number = <%s>\n",
                       host_address_to_string (gdbarch->remote_register_number));
   fprintf_unfiltered (file,
+                      "gdbarch_dump: return_in_first_hidden_param_p = <%s>\n",
+                      host_address_to_string (gdbarch->return_in_first_hidden_param_p));
+  fprintf_unfiltered (file,
                       "gdbarch_dump: gdbarch_return_value_p() = %d\n",
                       gdbarch_return_value_p (gdbarch));
   fprintf_unfiltered (file,
@@ -1240,6 +1313,42 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
                       "gdbarch_dump: stabs_argument_has_addr = <%s>\n",
                       host_address_to_string (gdbarch->stabs_argument_has_addr));
   fprintf_unfiltered (file,
+                      "gdbarch_dump: stap_gdb_register_prefix = %s\n",
+                      gdbarch->stap_gdb_register_prefix);
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: stap_gdb_register_suffix = %s\n",
+                      gdbarch->stap_gdb_register_suffix);
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: stap_integer_prefix = %s\n",
+                      gdbarch->stap_integer_prefix);
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: stap_integer_suffix = %s\n",
+                      gdbarch->stap_integer_suffix);
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: gdbarch_stap_is_single_operand_p() = %d\n",
+                      gdbarch_stap_is_single_operand_p (gdbarch));
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: stap_is_single_operand = <%s>\n",
+                      host_address_to_string (gdbarch->stap_is_single_operand));
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: gdbarch_stap_parse_special_token_p() = %d\n",
+                      gdbarch_stap_parse_special_token_p (gdbarch));
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: stap_parse_special_token = <%s>\n",
+                      host_address_to_string (gdbarch->stap_parse_special_token));
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: stap_register_indirection_prefix = %s\n",
+                      gdbarch->stap_register_indirection_prefix);
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: stap_register_indirection_suffix = %s\n",
+                      gdbarch->stap_register_indirection_suffix);
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: stap_register_prefix = %s\n",
+                      gdbarch->stap_register_prefix);
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: stap_register_suffix = %s\n",
+                      gdbarch->stap_register_suffix);
+  fprintf_unfiltered (file,
                       "gdbarch_dump: gdbarch_static_transform_name_p() = %d\n",
                       gdbarch_static_transform_name_p (gdbarch));
   fprintf_unfiltered (file,
@@ -1249,12 +1358,6 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
                       "gdbarch_dump: target_desc = %s\n",
                       host_address_to_string (gdbarch->target_desc));
   fprintf_unfiltered (file,
-                      "gdbarch_dump: target_signal_from_host = <%s>\n",
-                      host_address_to_string (gdbarch->target_signal_from_host));
-  fprintf_unfiltered (file,
-                      "gdbarch_dump: target_signal_to_host = <%s>\n",
-                      host_address_to_string (gdbarch->target_signal_to_host));
-  fprintf_unfiltered (file,
                       "gdbarch_dump: gdbarch_unwind_pc_p() = %d\n",
                       gdbarch_unwind_pc_p (gdbarch));
   fprintf_unfiltered (file,
@@ -2443,13 +2546,13 @@ gdbarch_return_value_p (struct gdbarch *gdbarch)
 }
 
 enum return_value_convention
-gdbarch_return_value (struct gdbarch *gdbarch, struct type *functype, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
+gdbarch_return_value (struct gdbarch *gdbarch, struct value *function, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
 {
   gdb_assert (gdbarch != NULL);
   gdb_assert (gdbarch->return_value != NULL);
   if (gdbarch_debug >= 2)
     fprintf_unfiltered (gdb_stdlog, "gdbarch_return_value called\n");
-  return gdbarch->return_value (gdbarch, functype, valtype, regcache, readbuf, writebuf);
+  return gdbarch->return_value (gdbarch, function, valtype, regcache, readbuf, writebuf);
 }
 
 void
@@ -2459,6 +2562,23 @@ set_gdbarch_return_value (struct gdbarch *gdbarch,
   gdbarch->return_value = return_value;
 }
 
+int
+gdbarch_return_in_first_hidden_param_p (struct gdbarch *gdbarch, struct type *type)
+{
+  gdb_assert (gdbarch != NULL);
+  gdb_assert (gdbarch->return_in_first_hidden_param_p != NULL);
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_return_in_first_hidden_param_p called\n");
+  return gdbarch->return_in_first_hidden_param_p (gdbarch, type);
+}
+
+void
+set_gdbarch_return_in_first_hidden_param_p (struct gdbarch *gdbarch,
+                                            gdbarch_return_in_first_hidden_param_p_ftype return_in_first_hidden_param_p)
+{
+  gdbarch->return_in_first_hidden_param_p = return_in_first_hidden_param_p;
+}
+
 CORE_ADDR
 gdbarch_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR ip)
 {
@@ -2981,7 +3101,7 @@ set_gdbarch_skip_solib_resolver (struct gdbarch *gdbarch,
 }
 
 int
-gdbarch_in_solib_return_trampoline (struct gdbarch *gdbarch, CORE_ADDR pc, char *name)
+gdbarch_in_solib_return_trampoline (struct gdbarch *gdbarch, CORE_ADDR pc, const char *name)
 {
   gdb_assert (gdbarch != NULL);
   gdb_assert (gdbarch->in_solib_return_trampoline != NULL);
@@ -3236,6 +3356,54 @@ set_gdbarch_core_regset_sections (struct gdbarch *gdbarch,
 }
 
 int
+gdbarch_make_corefile_notes_p (struct gdbarch *gdbarch)
+{
+  gdb_assert (gdbarch != NULL);
+  return gdbarch->make_corefile_notes != NULL;
+}
+
+char *
+gdbarch_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size)
+{
+  gdb_assert (gdbarch != NULL);
+  gdb_assert (gdbarch->make_corefile_notes != NULL);
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_make_corefile_notes called\n");
+  return gdbarch->make_corefile_notes (gdbarch, obfd, note_size);
+}
+
+void
+set_gdbarch_make_corefile_notes (struct gdbarch *gdbarch,
+                                 gdbarch_make_corefile_notes_ftype make_corefile_notes)
+{
+  gdbarch->make_corefile_notes = make_corefile_notes;
+}
+
+int
+gdbarch_find_memory_regions_p (struct gdbarch *gdbarch)
+{
+  gdb_assert (gdbarch != NULL);
+  return gdbarch->find_memory_regions != NULL;
+}
+
+int
+gdbarch_find_memory_regions (struct gdbarch *gdbarch, find_memory_region_ftype func, void *data)
+{
+  gdb_assert (gdbarch != NULL);
+  gdb_assert (gdbarch->find_memory_regions != NULL);
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_find_memory_regions called\n");
+  return gdbarch->find_memory_regions (gdbarch, func, data);
+}
+
+void
+set_gdbarch_find_memory_regions (struct gdbarch *gdbarch,
+                                 gdbarch_find_memory_regions_ftype find_memory_regions)
+{
+  gdbarch->find_memory_regions = find_memory_regions;
+}
+
+int
 gdbarch_core_xfer_shared_libraries_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
@@ -3571,8 +3739,8 @@ gdbarch_static_transform_name_p (struct gdbarch *gdbarch)
   return gdbarch->static_transform_name != NULL;
 }
 
-char *
-gdbarch_static_transform_name (struct gdbarch *gdbarch, char *name)
+const char *
+gdbarch_static_transform_name (struct gdbarch *gdbarch, const char *name)
 {
   gdb_assert (gdbarch != NULL);
   gdb_assert (gdbarch->static_transform_name != NULL);
@@ -3637,7 +3805,7 @@ gdbarch_process_record_signal_p (struct gdbarch *gdbarch)
 }
 
 int
-gdbarch_process_record_signal (struct gdbarch *gdbarch, struct regcache *regcache, enum target_signal signal)
+gdbarch_process_record_signal (struct gdbarch *gdbarch, struct regcache *regcache, enum gdb_signal signal)
 {
   gdb_assert (gdbarch != NULL);
   gdb_assert (gdbarch->process_record_signal != NULL);
@@ -3653,38 +3821,28 @@ set_gdbarch_process_record_signal (struct gdbarch *gdbarch,
   gdbarch->process_record_signal = process_record_signal;
 }
 
-enum target_signal
-gdbarch_target_signal_from_host (struct gdbarch *gdbarch, int signo)
+int
+gdbarch_gdb_signal_from_target_p (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  gdb_assert (gdbarch->target_signal_from_host != NULL);
-  if (gdbarch_debug >= 2)
-    fprintf_unfiltered (gdb_stdlog, "gdbarch_target_signal_from_host called\n");
-  return gdbarch->target_signal_from_host (gdbarch, signo);
+  return gdbarch->gdb_signal_from_target != NULL;
 }
 
-void
-set_gdbarch_target_signal_from_host (struct gdbarch *gdbarch,
-                                     gdbarch_target_signal_from_host_ftype target_signal_from_host)
-{
-  gdbarch->target_signal_from_host = target_signal_from_host;
-}
-
-int
-gdbarch_target_signal_to_host (struct gdbarch *gdbarch, enum target_signal ts)
+enum gdb_signal
+gdbarch_gdb_signal_from_target (struct gdbarch *gdbarch, int signo)
 {
   gdb_assert (gdbarch != NULL);
-  gdb_assert (gdbarch->target_signal_to_host != NULL);
+  gdb_assert (gdbarch->gdb_signal_from_target != NULL);
   if (gdbarch_debug >= 2)
-    fprintf_unfiltered (gdb_stdlog, "gdbarch_target_signal_to_host called\n");
-  return gdbarch->target_signal_to_host (gdbarch, ts);
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_gdb_signal_from_target called\n");
+  return gdbarch->gdb_signal_from_target (gdbarch, signo);
 }
 
 void
-set_gdbarch_target_signal_to_host (struct gdbarch *gdbarch,
-                                   gdbarch_target_signal_to_host_ftype target_signal_to_host)
+set_gdbarch_gdb_signal_from_target (struct gdbarch *gdbarch,
+                                    gdbarch_gdb_signal_from_target_ftype gdb_signal_from_target)
 {
-  gdbarch->target_signal_to_host = target_signal_to_host;
+  gdbarch->gdb_signal_from_target = gdb_signal_from_target;
 }
 
 int
@@ -3759,6 +3917,190 @@ set_gdbarch_get_syscall_number (struct gdbarch *gdbarch,
   gdbarch->get_syscall_number = get_syscall_number;
 }
 
+const char *
+gdbarch_stap_integer_prefix (struct gdbarch *gdbarch)
+{
+  gdb_assert (gdbarch != NULL);
+  /* Skip verify of stap_integer_prefix, invalid_p == 0 */
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_integer_prefix called\n");
+  return gdbarch->stap_integer_prefix;
+}
+
+void
+set_gdbarch_stap_integer_prefix (struct gdbarch *gdbarch,
+                                 const char * stap_integer_prefix)
+{
+  gdbarch->stap_integer_prefix = stap_integer_prefix;
+}
+
+const char *
+gdbarch_stap_integer_suffix (struct gdbarch *gdbarch)
+{
+  gdb_assert (gdbarch != NULL);
+  /* Skip verify of stap_integer_suffix, invalid_p == 0 */
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_integer_suffix called\n");
+  return gdbarch->stap_integer_suffix;
+}
+
+void
+set_gdbarch_stap_integer_suffix (struct gdbarch *gdbarch,
+                                 const char * stap_integer_suffix)
+{
+  gdbarch->stap_integer_suffix = stap_integer_suffix;
+}
+
+const char *
+gdbarch_stap_register_prefix (struct gdbarch *gdbarch)
+{
+  gdb_assert (gdbarch != NULL);
+  /* Skip verify of stap_register_prefix, invalid_p == 0 */
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_register_prefix called\n");
+  return gdbarch->stap_register_prefix;
+}
+
+void
+set_gdbarch_stap_register_prefix (struct gdbarch *gdbarch,
+                                  const char * stap_register_prefix)
+{
+  gdbarch->stap_register_prefix = stap_register_prefix;
+}
+
+const char *
+gdbarch_stap_register_suffix (struct gdbarch *gdbarch)
+{
+  gdb_assert (gdbarch != NULL);
+  /* Skip verify of stap_register_suffix, invalid_p == 0 */
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_register_suffix called\n");
+  return gdbarch->stap_register_suffix;
+}
+
+void
+set_gdbarch_stap_register_suffix (struct gdbarch *gdbarch,
+                                  const char * stap_register_suffix)
+{
+  gdbarch->stap_register_suffix = stap_register_suffix;
+}
+
+const char *
+gdbarch_stap_register_indirection_prefix (struct gdbarch *gdbarch)
+{
+  gdb_assert (gdbarch != NULL);
+  /* Skip verify of stap_register_indirection_prefix, invalid_p == 0 */
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_register_indirection_prefix called\n");
+  return gdbarch->stap_register_indirection_prefix;
+}
+
+void
+set_gdbarch_stap_register_indirection_prefix (struct gdbarch *gdbarch,
+                                              const char * stap_register_indirection_prefix)
+{
+  gdbarch->stap_register_indirection_prefix = stap_register_indirection_prefix;
+}
+
+const char *
+gdbarch_stap_register_indirection_suffix (struct gdbarch *gdbarch)
+{
+  gdb_assert (gdbarch != NULL);
+  /* Skip verify of stap_register_indirection_suffix, invalid_p == 0 */
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_register_indirection_suffix called\n");
+  return gdbarch->stap_register_indirection_suffix;
+}
+
+void
+set_gdbarch_stap_register_indirection_suffix (struct gdbarch *gdbarch,
+                                              const char * stap_register_indirection_suffix)
+{
+  gdbarch->stap_register_indirection_suffix = stap_register_indirection_suffix;
+}
+
+const char *
+gdbarch_stap_gdb_register_prefix (struct gdbarch *gdbarch)
+{
+  gdb_assert (gdbarch != NULL);
+  /* Skip verify of stap_gdb_register_prefix, invalid_p == 0 */
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_gdb_register_prefix called\n");
+  return gdbarch->stap_gdb_register_prefix;
+}
+
+void
+set_gdbarch_stap_gdb_register_prefix (struct gdbarch *gdbarch,
+                                      const char * stap_gdb_register_prefix)
+{
+  gdbarch->stap_gdb_register_prefix = stap_gdb_register_prefix;
+}
+
+const char *
+gdbarch_stap_gdb_register_suffix (struct gdbarch *gdbarch)
+{
+  gdb_assert (gdbarch != NULL);
+  /* Skip verify of stap_gdb_register_suffix, invalid_p == 0 */
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_gdb_register_suffix called\n");
+  return gdbarch->stap_gdb_register_suffix;
+}
+
+void
+set_gdbarch_stap_gdb_register_suffix (struct gdbarch *gdbarch,
+                                      const char * stap_gdb_register_suffix)
+{
+  gdbarch->stap_gdb_register_suffix = stap_gdb_register_suffix;
+}
+
+int
+gdbarch_stap_is_single_operand_p (struct gdbarch *gdbarch)
+{
+  gdb_assert (gdbarch != NULL);
+  return gdbarch->stap_is_single_operand != NULL;
+}
+
+int
+gdbarch_stap_is_single_operand (struct gdbarch *gdbarch, const char *s)
+{
+  gdb_assert (gdbarch != NULL);
+  gdb_assert (gdbarch->stap_is_single_operand != NULL);
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_is_single_operand called\n");
+  return gdbarch->stap_is_single_operand (gdbarch, s);
+}
+
+void
+set_gdbarch_stap_is_single_operand (struct gdbarch *gdbarch,
+                                    gdbarch_stap_is_single_operand_ftype stap_is_single_operand)
+{
+  gdbarch->stap_is_single_operand = stap_is_single_operand;
+}
+
+int
+gdbarch_stap_parse_special_token_p (struct gdbarch *gdbarch)
+{
+  gdb_assert (gdbarch != NULL);
+  return gdbarch->stap_parse_special_token != NULL;
+}
+
+int
+gdbarch_stap_parse_special_token (struct gdbarch *gdbarch, struct stap_parse_info *p)
+{
+  gdb_assert (gdbarch != NULL);
+  gdb_assert (gdbarch->stap_parse_special_token != NULL);
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_stap_parse_special_token called\n");
+  return gdbarch->stap_parse_special_token (gdbarch, p);
+}
+
+void
+set_gdbarch_stap_parse_special_token (struct gdbarch *gdbarch,
+                                      gdbarch_stap_parse_special_token_ftype stap_parse_special_token)
+{
+  gdbarch->stap_parse_special_token = stap_parse_special_token;
+}
+
 int
 gdbarch_has_global_solist (struct gdbarch *gdbarch)
 {
@@ -3911,6 +4253,47 @@ set_gdbarch_gen_return_address (struct gdbarch *gdbarch,
   gdbarch->gen_return_address = gen_return_address;
 }
 
+int
+gdbarch_info_proc_p (struct gdbarch *gdbarch)
+{
+  gdb_assert (gdbarch != NULL);
+  return gdbarch->info_proc != NULL;
+}
+
+void
+gdbarch_info_proc (struct gdbarch *gdbarch, char *args, enum info_proc_what what)
+{
+  gdb_assert (gdbarch != NULL);
+  gdb_assert (gdbarch->info_proc != NULL);
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_info_proc called\n");
+  gdbarch->info_proc (gdbarch, args, what);
+}
+
+void
+set_gdbarch_info_proc (struct gdbarch *gdbarch,
+                       gdbarch_info_proc_ftype info_proc)
+{
+  gdbarch->info_proc = info_proc;
+}
+
+void
+gdbarch_iterate_over_objfiles_in_search_order (struct gdbarch *gdbarch, iterate_over_objfiles_in_search_order_cb_ftype *cb, void *cb_data, struct objfile *current_objfile)
+{
+  gdb_assert (gdbarch != NULL);
+  gdb_assert (gdbarch->iterate_over_objfiles_in_search_order != NULL);
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_iterate_over_objfiles_in_search_order called\n");
+  gdbarch->iterate_over_objfiles_in_search_order (gdbarch, cb, cb_data, current_objfile);
+}
+
+void
+set_gdbarch_iterate_over_objfiles_in_search_order (struct gdbarch *gdbarch,
+                                                   gdbarch_iterate_over_objfiles_in_search_order_ftype iterate_over_objfiles_in_search_order)
+{
+  gdbarch->iterate_over_objfiles_in_search_order = iterate_over_objfiles_in_search_order;
+}
+
 
 /* Keep a registry of per-architecture data-pointers required by GDB
    modules.  */
diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h
index 46c5afa..a239aa4 100644
--- a/gdb/gdbarch.h
+++ b/gdb/gdbarch.h
@@ -55,6 +55,7 @@ struct core_regset_section;
 struct syscall;
 struct agent_expr;
 struct axs_value;
+struct stap_parse_info;
 
 /* The architecture associated with the connection to the target.
  
@@ -68,6 +69,12 @@ struct axs_value;
    GDB, this global should be made target-specific.  */
 extern struct gdbarch *target_gdbarch;
 
+/* Callback type for the 'iterate_over_objfiles_in_search_order'
+   gdbarch  method.  */
+
+typedef int (iterate_over_objfiles_in_search_order_cb_ftype)
+  (struct objfile *objfile, void *cb_data);
+
 
 /* The following are pre-initialized by GDBARCH.  */
 
@@ -433,8 +440,8 @@ typedef CORE_ADDR (gdbarch_integer_to_address_ftype) (struct gdbarch *gdbarch, s
 extern CORE_ADDR gdbarch_integer_to_address (struct gdbarch *gdbarch, struct type *type, const gdb_byte *buf);
 extern void set_gdbarch_integer_to_address (struct gdbarch *gdbarch, gdbarch_integer_to_address_ftype *integer_to_address);
 
-/* Return the return-value convention that will be used by FUNCTYPE
-   to return a value of type VALTYPE.  FUNCTYPE may be NULL in which
+/* Return the return-value convention that will be used by FUNCTION
+   to return a value of type VALTYPE.  FUNCTION may be NULL in which
    case the return convention is computed based only on VALTYPE.
   
    If READBUF is not NULL, extract the return value and save it in this buffer.
@@ -446,10 +453,20 @@ extern void set_gdbarch_integer_to_address (struct gdbarch *gdbarch, gdbarch_int
 
 extern int gdbarch_return_value_p (struct gdbarch *gdbarch);
 
-typedef enum return_value_convention (gdbarch_return_value_ftype) (struct gdbarch *gdbarch, struct type *functype, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf);
-extern enum return_value_convention gdbarch_return_value (struct gdbarch *gdbarch, struct type *functype, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf);
+typedef enum return_value_convention (gdbarch_return_value_ftype) (struct gdbarch *gdbarch, struct value *function, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf);
+extern enum return_value_convention gdbarch_return_value (struct gdbarch *gdbarch, struct value *function, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf);
 extern void set_gdbarch_return_value (struct gdbarch *gdbarch, gdbarch_return_value_ftype *return_value);
 
+/* Return true if the return value of function is stored in the first hidden
+   parameter.  In theory, this feature should be language-dependent, specified
+   by language and its ABI, such as C++.  Unfortunately, compiler may
+   implement it to a target-dependent feature.  So that we need such hook here
+   to be aware of this in GDB. */
+
+typedef int (gdbarch_return_in_first_hidden_param_p_ftype) (struct gdbarch *gdbarch, struct type *type);
+extern int gdbarch_return_in_first_hidden_param_p (struct gdbarch *gdbarch, struct type *type);
+extern void set_gdbarch_return_in_first_hidden_param_p (struct gdbarch *gdbarch, gdbarch_return_in_first_hidden_param_p_ftype *return_in_first_hidden_param_p);
+
 typedef CORE_ADDR (gdbarch_skip_prologue_ftype) (struct gdbarch *gdbarch, CORE_ADDR ip);
 extern CORE_ADDR gdbarch_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR ip);
 extern void set_gdbarch_skip_prologue (struct gdbarch *gdbarch, gdbarch_skip_prologue_ftype *skip_prologue);
@@ -631,8 +648,8 @@ extern void set_gdbarch_skip_solib_resolver (struct gdbarch *gdbarch, gdbarch_sk
 
 /* Some systems also have trampoline code for returning from shared libs. */
 
-typedef int (gdbarch_in_solib_return_trampoline_ftype) (struct gdbarch *gdbarch, CORE_ADDR pc, char *name);
-extern int gdbarch_in_solib_return_trampoline (struct gdbarch *gdbarch, CORE_ADDR pc, char *name);
+typedef int (gdbarch_in_solib_return_trampoline_ftype) (struct gdbarch *gdbarch, CORE_ADDR pc, const char *name);
+extern int gdbarch_in_solib_return_trampoline (struct gdbarch *gdbarch, CORE_ADDR pc, const char *name);
 extern void set_gdbarch_in_solib_return_trampoline (struct gdbarch *gdbarch, gdbarch_in_solib_return_trampoline_ftype *in_solib_return_trampoline);
 
 /* A target might have problems with watchpoints as soon as the stack
@@ -709,6 +726,22 @@ extern void set_gdbarch_regset_from_core_section (struct gdbarch *gdbarch, gdbar
 extern struct core_regset_section * gdbarch_core_regset_sections (struct gdbarch *gdbarch);
 extern void set_gdbarch_core_regset_sections (struct gdbarch *gdbarch, struct core_regset_section * core_regset_sections);
 
+/* Create core file notes */
+
+extern int gdbarch_make_corefile_notes_p (struct gdbarch *gdbarch);
+
+typedef char * (gdbarch_make_corefile_notes_ftype) (struct gdbarch *gdbarch, bfd *obfd, int *note_size);
+extern char * gdbarch_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size);
+extern void set_gdbarch_make_corefile_notes (struct gdbarch *gdbarch, gdbarch_make_corefile_notes_ftype *make_corefile_notes);
+
+/* Find core file memory regions */
+
+extern int gdbarch_find_memory_regions_p (struct gdbarch *gdbarch);
+
+typedef int (gdbarch_find_memory_regions_ftype) (struct gdbarch *gdbarch, find_memory_region_ftype func, void *data);
+extern int gdbarch_find_memory_regions (struct gdbarch *gdbarch, find_memory_region_ftype func, void *data);
+extern void set_gdbarch_find_memory_regions (struct gdbarch *gdbarch, gdbarch_find_memory_regions_ftype *find_memory_regions);
+
 /* Read offset OFFSET of TARGET_OBJECT_LIBRARIES formatted shared libraries list from
    core file into buffer READBUF with length LEN. */
 
@@ -754,7 +787,7 @@ typedef void (gdbarch_skip_permanent_breakpoint_ftype) (struct regcache *regcach
 extern void gdbarch_skip_permanent_breakpoint (struct gdbarch *gdbarch, struct regcache *regcache);
 extern void set_gdbarch_skip_permanent_breakpoint (struct gdbarch *gdbarch, gdbarch_skip_permanent_breakpoint_ftype *skip_permanent_breakpoint);
 
-/* The maximum length of an instruction on this architecture. */
+/* The maximum length of an instruction on this architecture in bytes. */
 
 extern int gdbarch_max_insn_length_p (struct gdbarch *gdbarch);
 
@@ -893,8 +926,8 @@ extern void set_gdbarch_core_read_description (struct gdbarch *gdbarch, gdbarch_
 
 extern int gdbarch_static_transform_name_p (struct gdbarch *gdbarch);
 
-typedef char * (gdbarch_static_transform_name_ftype) (char *name);
-extern char * gdbarch_static_transform_name (struct gdbarch *gdbarch, char *name);
+typedef const char * (gdbarch_static_transform_name_ftype) (const char *name);
+extern const char * gdbarch_static_transform_name (struct gdbarch *gdbarch, const char *name);
 extern void set_gdbarch_static_transform_name (struct gdbarch *gdbarch, gdbarch_static_transform_name_ftype *static_transform_name);
 
 /* Set if the address in N_SO or N_FUN stabs may be zero. */
@@ -918,23 +951,23 @@ extern void set_gdbarch_process_record (struct gdbarch *gdbarch, gdbarch_process
 
 extern int gdbarch_process_record_signal_p (struct gdbarch *gdbarch);
 
-typedef int (gdbarch_process_record_signal_ftype) (struct gdbarch *gdbarch, struct regcache *regcache, enum target_signal signal);
-extern int gdbarch_process_record_signal (struct gdbarch *gdbarch, struct regcache *regcache, enum target_signal signal);
+typedef int (gdbarch_process_record_signal_ftype) (struct gdbarch *gdbarch, struct regcache *regcache, enum gdb_signal signal);
+extern int gdbarch_process_record_signal (struct gdbarch *gdbarch, struct regcache *regcache, enum gdb_signal signal);
 extern void set_gdbarch_process_record_signal (struct gdbarch *gdbarch, gdbarch_process_record_signal_ftype *process_record_signal);
 
-/* Signal translation: translate inferior's signal (host's) number into
-   GDB's representation. */
+/* Signal translation: translate inferior's signal (target's) number
+   into GDB's representation.  The implementation of this method must
+   be host independent.  IOW, don't rely on symbols of the NAT_FILE
+   header (the nm-*.h files), the host <signal.h> header, or similar
+   headers.  This is mainly used when cross-debugging core files ---
+   "Live" targets hide the translation behind the target interface
+   (target_wait, target_resume, etc.). */
 
-typedef enum target_signal (gdbarch_target_signal_from_host_ftype) (struct gdbarch *gdbarch, int signo);
-extern enum target_signal gdbarch_target_signal_from_host (struct gdbarch *gdbarch, int signo);
-extern void set_gdbarch_target_signal_from_host (struct gdbarch *gdbarch, gdbarch_target_signal_from_host_ftype *target_signal_from_host);
+extern int gdbarch_gdb_signal_from_target_p (struct gdbarch *gdbarch);
 
-/* Signal translation: translate GDB's signal number into inferior's host
-   signal number. */
-
-typedef int (gdbarch_target_signal_to_host_ftype) (struct gdbarch *gdbarch, enum target_signal ts);
-extern int gdbarch_target_signal_to_host (struct gdbarch *gdbarch, enum target_signal ts);
-extern void set_gdbarch_target_signal_to_host (struct gdbarch *gdbarch, gdbarch_target_signal_to_host_ftype *target_signal_to_host);
+typedef enum gdb_signal (gdbarch_gdb_signal_from_target_ftype) (struct gdbarch *gdbarch, int signo);
+extern enum gdb_signal gdbarch_gdb_signal_from_target (struct gdbarch *gdbarch, int signo);
+extern void set_gdbarch_gdb_signal_from_target (struct gdbarch *gdbarch, gdbarch_gdb_signal_from_target_ftype *gdb_signal_from_target);
 
 /* Extra signal info inspection.
   
@@ -963,6 +996,125 @@ typedef LONGEST (gdbarch_get_syscall_number_ftype) (struct gdbarch *gdbarch, pti
 extern LONGEST gdbarch_get_syscall_number (struct gdbarch *gdbarch, ptid_t ptid);
 extern void set_gdbarch_get_syscall_number (struct gdbarch *gdbarch, gdbarch_get_syscall_number_ftype *get_syscall_number);
 
+/* SystemTap related fields and functions.
+   Prefix used to mark an integer constant on the architecture's assembly
+   For example, on x86 integer constants are written as:
+  
+    $10 ;; integer constant 10
+  
+   in this case, this prefix would be the character `$'. */
+
+extern const char * gdbarch_stap_integer_prefix (struct gdbarch *gdbarch);
+extern void set_gdbarch_stap_integer_prefix (struct gdbarch *gdbarch, const char * stap_integer_prefix);
+
+/* Suffix used to mark an integer constant on the architecture's assembly. */
+
+extern const char * gdbarch_stap_integer_suffix (struct gdbarch *gdbarch);
+extern void set_gdbarch_stap_integer_suffix (struct gdbarch *gdbarch, const char * stap_integer_suffix);
+
+/* Prefix used to mark a register name on the architecture's assembly.
+   For example, on x86 the register name is written as:
+  
+    %eax ;; register eax
+  
+   in this case, this prefix would be the character `%'. */
+
+extern const char * gdbarch_stap_register_prefix (struct gdbarch *gdbarch);
+extern void set_gdbarch_stap_register_prefix (struct gdbarch *gdbarch, const char * stap_register_prefix);
+
+/* Suffix used to mark a register name on the architecture's assembly */
+
+extern const char * gdbarch_stap_register_suffix (struct gdbarch *gdbarch);
+extern void set_gdbarch_stap_register_suffix (struct gdbarch *gdbarch, const char * stap_register_suffix);
+
+/* Prefix used to mark a register indirection on the architecture's assembly.
+   For example, on x86 the register indirection is written as:
+  
+    (%eax) ;; indirecting eax
+  
+   in this case, this prefix would be the charater `('.
+  
+   Please note that we use the indirection prefix also for register
+   displacement, e.g., `4(%eax)' on x86. */
+
+extern const char * gdbarch_stap_register_indirection_prefix (struct gdbarch *gdbarch);
+extern void set_gdbarch_stap_register_indirection_prefix (struct gdbarch *gdbarch, const char * stap_register_indirection_prefix);
+
+/* Suffix used to mark a register indirection on the architecture's assembly.
+   For example, on x86 the register indirection is written as:
+  
+    (%eax) ;; indirecting eax
+  
+   in this case, this prefix would be the charater `)'.
+  
+   Please note that we use the indirection suffix also for register
+   displacement, e.g., `4(%eax)' on x86. */
+
+extern const char * gdbarch_stap_register_indirection_suffix (struct gdbarch *gdbarch);
+extern void set_gdbarch_stap_register_indirection_suffix (struct gdbarch *gdbarch, const char * stap_register_indirection_suffix);
+
+/* Prefix used to name a register using GDB's nomenclature.
+  
+   For example, on PPC a register is represented by a number in the assembly
+   language (e.g., `10' is the 10th general-purpose register).  However,
+   inside GDB this same register has an `r' appended to its name, so the 10th
+   register would be represented as `r10' internally. */
+
+extern const char * gdbarch_stap_gdb_register_prefix (struct gdbarch *gdbarch);
+extern void set_gdbarch_stap_gdb_register_prefix (struct gdbarch *gdbarch, const char * stap_gdb_register_prefix);
+
+/* Suffix used to name a register using GDB's nomenclature. */
+
+extern const char * gdbarch_stap_gdb_register_suffix (struct gdbarch *gdbarch);
+extern void set_gdbarch_stap_gdb_register_suffix (struct gdbarch *gdbarch, const char * stap_gdb_register_suffix);
+
+/* Check if S is a single operand.
+  
+   Single operands can be:
+    - Literal integers, e.g. `$10' on x86
+    - Register access, e.g. `%eax' on x86
+    - Register indirection, e.g. `(%eax)' on x86
+    - Register displacement, e.g. `4(%eax)' on x86
+  
+   This function should check for these patterns on the string
+   and return 1 if some were found, or zero otherwise.  Please try to match
+   as much info as you can from the string, i.e., if you have to match
+   something like `(%', do not match just the `('. */
+
+extern int gdbarch_stap_is_single_operand_p (struct gdbarch *gdbarch);
+
+typedef int (gdbarch_stap_is_single_operand_ftype) (struct gdbarch *gdbarch, const char *s);
+extern int gdbarch_stap_is_single_operand (struct gdbarch *gdbarch, const char *s);
+extern void set_gdbarch_stap_is_single_operand (struct gdbarch *gdbarch, gdbarch_stap_is_single_operand_ftype *stap_is_single_operand);
+
+/* Function used to handle a "special case" in the parser.
+  
+   A "special case" is considered to be an unknown token, i.e., a token
+   that the parser does not know how to parse.  A good example of special
+   case would be ARM's register displacement syntax:
+  
+    [R0, #4]  ;; displacing R0 by 4
+  
+   Since the parser assumes that a register displacement is of the form:
+  
+    <number> <indirection_prefix> <register_name> <indirection_suffix>
+  
+   it means that it will not be able to recognize and parse this odd syntax.
+   Therefore, we should add a special case function that will handle this token.
+  
+   This function should generate the proper expression form of the expression
+   using GDB's internal expression mechanism (e.g., `write_exp_elt_opcode'
+   and so on).  It should also return 1 if the parsing was successful, or zero
+   if the token was not recognized as a special token (in this case, returning
+   zero means that the special parser is deferring the parsing to the generic
+   parser), and should advance the buffer pointer (p->arg). */
+
+extern int gdbarch_stap_parse_special_token_p (struct gdbarch *gdbarch);
+
+typedef int (gdbarch_stap_parse_special_token_ftype) (struct gdbarch *gdbarch, struct stap_parse_info *p);
+extern int gdbarch_stap_parse_special_token (struct gdbarch *gdbarch, struct stap_parse_info *p);
+extern void set_gdbarch_stap_parse_special_token (struct gdbarch *gdbarch, gdbarch_stap_parse_special_token_ftype *stap_parse_special_token);
+
 /* True if the list of shared libraries is one and only for all
    processes, as opposed to a list of shared libraries per inferior.
    This usually means that all processes, although may or may not share
@@ -1031,6 +1183,32 @@ typedef void (gdbarch_gen_return_address_ftype) (struct gdbarch *gdbarch, struct
 extern void gdbarch_gen_return_address (struct gdbarch *gdbarch, struct agent_expr *ax, struct axs_value *value, CORE_ADDR scope);
 extern void set_gdbarch_gen_return_address (struct gdbarch *gdbarch, gdbarch_gen_return_address_ftype *gen_return_address);
 
+/* Implement the "info proc" command. */
+
+extern int gdbarch_info_proc_p (struct gdbarch *gdbarch);
+
+typedef void (gdbarch_info_proc_ftype) (struct gdbarch *gdbarch, char *args, enum info_proc_what what);
+extern void gdbarch_info_proc (struct gdbarch *gdbarch, char *args, enum info_proc_what what);
+extern void set_gdbarch_info_proc (struct gdbarch *gdbarch, gdbarch_info_proc_ftype *info_proc);
+
+/* Iterate over all objfiles in the order that makes the most sense
+   for the architecture to make global symbol searches.
+  
+   CB is a callback function where OBJFILE is the objfile to be searched,
+   and CB_DATA a pointer to user-defined data (the same data that is passed
+   when calling this gdbarch method).  The iteration stops if this function
+   returns nonzero.
+  
+   CB_DATA is a pointer to some user-defined data to be passed to
+   the callback.
+  
+   If not NULL, CURRENT_OBJFILE corresponds to the objfile being
+   inspected when the symbol search was requested. */
+
+typedef void (gdbarch_iterate_over_objfiles_in_search_order_ftype) (struct gdbarch *gdbarch, iterate_over_objfiles_in_search_order_cb_ftype *cb, void *cb_data, struct objfile *current_objfile);
+extern void gdbarch_iterate_over_objfiles_in_search_order (struct gdbarch *gdbarch, iterate_over_objfiles_in_search_order_cb_ftype *cb, void *cb_data, struct objfile *current_objfile);
+extern void set_gdbarch_iterate_over_objfiles_in_search_order (struct gdbarch *gdbarch, gdbarch_iterate_over_objfiles_in_search_order_ftype *iterate_over_objfiles_in_search_order);
+
 /* Definition for an unknown syscall, used basically in error-cases.  */
 #define UNKNOWN_SYSCALL (-1)
 
diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh
index b85d9d0..06294ab 100755
--- a/gdb/gdbarch.sh
+++ b/gdb/gdbarch.sh
@@ -503,8 +503,8 @@ m:CORE_ADDR:pointer_to_address:struct type *type, const gdb_byte *buf:type, buf:
 m:void:address_to_pointer:struct type *type, gdb_byte *buf, CORE_ADDR addr:type, buf, addr::unsigned_address_to_pointer::0
 M:CORE_ADDR:integer_to_address:struct type *type, const gdb_byte *buf:type, buf
 
-# Return the return-value convention that will be used by FUNCTYPE
-# to return a value of type VALTYPE.  FUNCTYPE may be NULL in which
+# Return the return-value convention that will be used by FUNCTION
+# to return a value of type VALTYPE.  FUNCTION may be NULL in which
 # case the return convention is computed based only on VALTYPE.
 #
 # If READBUF is not NULL, extract the return value and save it in this buffer.
@@ -513,7 +513,14 @@ M:CORE_ADDR:integer_to_address:struct type *type, const gdb_byte *buf:type, buf
 # stored into the appropriate register.  This can be used when we want
 # to force the value returned by a function (see the "return" command
 # for instance).
-M:enum return_value_convention:return_value:struct type *functype, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf:functype, valtype, regcache, readbuf, writebuf
+M:enum return_value_convention:return_value:struct value *function, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf:function, valtype, regcache, readbuf, writebuf
+
+# Return true if the return value of function is stored in the first hidden
+# parameter.  In theory, this feature should be language-dependent, specified
+# by language and its ABI, such as C++.  Unfortunately, compiler may
+# implement it to a target-dependent feature.  So that we need such hook here
+# to be aware of this in GDB.
+m:int:return_in_first_hidden_param_p:struct type *type:type::default_return_in_first_hidden_param_p::0
 
 m:CORE_ADDR:skip_prologue:CORE_ADDR ip:ip:0:0
 M:CORE_ADDR:skip_main_prologue:CORE_ADDR ip:ip
@@ -600,7 +607,7 @@ f:CORE_ADDR:skip_trampoline_code:struct frame_info *frame, CORE_ADDR pc:frame, p
 # a step-resume breakpoint to get us past the dynamic linker.
 m:CORE_ADDR:skip_solib_resolver:CORE_ADDR pc:pc::generic_skip_solib_resolver::0
 # Some systems also have trampoline code for returning from shared libs.
-m:int:in_solib_return_trampoline:CORE_ADDR pc, char *name:pc, name::generic_in_solib_return_trampoline::0
+m:int:in_solib_return_trampoline:CORE_ADDR pc, const char *name:pc, name::generic_in_solib_return_trampoline::0
 
 # A target might have problems with watchpoints as soon as the stack
 # frame of the current function has been destroyed.  This mostly happens
@@ -631,6 +638,12 @@ M:const struct regset *:regset_from_core_section:const char *sect_name, size_t s
 # Supported register notes in a core file.
 v:struct core_regset_section *:core_regset_sections:const char *name, int len::::::host_address_to_string (gdbarch->core_regset_sections)
 
+# Create core file notes
+M:char *:make_corefile_notes:bfd *obfd, int *note_size:obfd, note_size
+
+# Find core file memory regions
+M:int:find_memory_regions:find_memory_region_ftype func, void *data:func, data
+
 # Read offset OFFSET of TARGET_OBJECT_LIBRARIES formatted shared libraries list from
 # core file into buffer READBUF with length LEN.
 M:LONGEST:core_xfer_shared_libraries:gdb_byte *readbuf, ULONGEST offset, LONGEST len:readbuf, offset, len
@@ -653,7 +666,7 @@ v:int:vbit_in_delta:::0:0::0
 # Advance PC to next instruction in order to skip a permanent breakpoint.
 F:void:skip_permanent_breakpoint:struct regcache *regcache:regcache
 
-# The maximum length of an instruction on this architecture.
+# The maximum length of an instruction on this architecture in bytes.
 V:ULONGEST:max_insn_length:::0:0
 
 # Copy the instruction at FROM to TO, and make any adjustments
@@ -752,7 +765,7 @@ F:void:overlay_update:struct obj_section *osect:osect
 M:const struct target_desc *:core_read_description:struct target_ops *target, bfd *abfd:target, abfd
 
 # Handle special encoding of static variables in stabs debug info.
-F:char *:static_transform_name:char *name:name
+F:const char *:static_transform_name:const char *name:name
 # Set if the address in N_SO or N_FUN stabs may be zero.
 v:int:sofun_address_maybe_missing:::0:0::0
 
@@ -764,14 +777,16 @@ M:int:process_record:struct regcache *regcache, CORE_ADDR addr:regcache, addr
 
 # Save process state after a signal.
 # Return -1 if something goes wrong, 0 otherwise.
-M:int:process_record_signal:struct regcache *regcache, enum target_signal signal:regcache, signal
+M:int:process_record_signal:struct regcache *regcache, enum gdb_signal signal:regcache, signal
 
-# Signal translation: translate inferior's signal (host's) number into
-# GDB's representation.
-m:enum target_signal:target_signal_from_host:int signo:signo::default_target_signal_from_host::0
-# Signal translation: translate GDB's signal number into inferior's host
-# signal number.
-m:int:target_signal_to_host:enum target_signal ts:ts::default_target_signal_to_host::0
+# Signal translation: translate inferior's signal (target's) number
+# into GDB's representation.  The implementation of this method must
+# be host independent.  IOW, don't rely on symbols of the NAT_FILE
+# header (the nm-*.h files), the host <signal.h> header, or similar
+# headers.  This is mainly used when cross-debugging core files ---
+# "Live" targets hide the translation behind the target interface
+# (target_wait, target_resume, etc.).
+M:enum gdb_signal:gdb_signal_from_target:int signo:signo
 
 # Extra signal info inspection.
 #
@@ -786,6 +801,101 @@ M:void:record_special_symbol:struct objfile *objfile, asymbol *sym:objfile, sym
 # Get architecture-specific system calls information from registers.
 M:LONGEST:get_syscall_number:ptid_t ptid:ptid
 
+# SystemTap related fields and functions.
+
+# Prefix used to mark an integer constant on the architecture's assembly
+# For example, on x86 integer constants are written as:
+#
+#  \$10 ;; integer constant 10
+#
+# in this case, this prefix would be the character \`\$\'.
+v:const char *:stap_integer_prefix:::0:0::0:gdbarch->stap_integer_prefix
+
+# Suffix used to mark an integer constant on the architecture's assembly.
+v:const char *:stap_integer_suffix:::0:0::0:gdbarch->stap_integer_suffix
+
+# Prefix used to mark a register name on the architecture's assembly.
+# For example, on x86 the register name is written as:
+#
+#  \%eax ;; register eax
+#
+# in this case, this prefix would be the character \`\%\'.
+v:const char *:stap_register_prefix:::0:0::0:gdbarch->stap_register_prefix
+
+# Suffix used to mark a register name on the architecture's assembly
+v:const char *:stap_register_suffix:::0:0::0:gdbarch->stap_register_suffix
+
+# Prefix used to mark a register indirection on the architecture's assembly.
+# For example, on x86 the register indirection is written as:
+#
+#  \(\%eax\) ;; indirecting eax
+#
+# in this case, this prefix would be the charater \`\(\'.
+#
+# Please note that we use the indirection prefix also for register
+# displacement, e.g., \`4\(\%eax\)\' on x86.
+v:const char *:stap_register_indirection_prefix:::0:0::0:gdbarch->stap_register_indirection_prefix
+
+# Suffix used to mark a register indirection on the architecture's assembly.
+# For example, on x86 the register indirection is written as:
+#
+#  \(\%eax\) ;; indirecting eax
+#
+# in this case, this prefix would be the charater \`\)\'.
+#
+# Please note that we use the indirection suffix also for register
+# displacement, e.g., \`4\(\%eax\)\' on x86.
+v:const char *:stap_register_indirection_suffix:::0:0::0:gdbarch->stap_register_indirection_suffix
+
+# Prefix used to name a register using GDB's nomenclature.
+#
+# For example, on PPC a register is represented by a number in the assembly
+# language (e.g., \`10\' is the 10th general-purpose register).  However,
+# inside GDB this same register has an \`r\' appended to its name, so the 10th
+# register would be represented as \`r10\' internally.
+v:const char *:stap_gdb_register_prefix:::0:0::0:gdbarch->stap_gdb_register_prefix
+
+# Suffix used to name a register using GDB's nomenclature.
+v:const char *:stap_gdb_register_suffix:::0:0::0:gdbarch->stap_gdb_register_suffix
+
+# Check if S is a single operand.
+#
+# Single operands can be:
+#  \- Literal integers, e.g. \`\$10\' on x86
+#  \- Register access, e.g. \`\%eax\' on x86
+#  \- Register indirection, e.g. \`\(\%eax\)\' on x86
+#  \- Register displacement, e.g. \`4\(\%eax\)\' on x86
+#
+# This function should check for these patterns on the string
+# and return 1 if some were found, or zero otherwise.  Please try to match
+# as much info as you can from the string, i.e., if you have to match
+# something like \`\(\%\', do not match just the \`\(\'.
+M:int:stap_is_single_operand:const char *s:s
+
+# Function used to handle a "special case" in the parser.
+#
+# A "special case" is considered to be an unknown token, i.e., a token
+# that the parser does not know how to parse.  A good example of special
+# case would be ARM's register displacement syntax:
+#
+#  [R0, #4]  ;; displacing R0 by 4
+#
+# Since the parser assumes that a register displacement is of the form:
+#
+#  <number> <indirection_prefix> <register_name> <indirection_suffix>
+#
+# it means that it will not be able to recognize and parse this odd syntax.
+# Therefore, we should add a special case function that will handle this token.
+#
+# This function should generate the proper expression form of the expression
+# using GDB\'s internal expression mechanism (e.g., \`write_exp_elt_opcode\'
+# and so on).  It should also return 1 if the parsing was successful, or zero
+# if the token was not recognized as a special token (in this case, returning
+# zero means that the special parser is deferring the parsing to the generic
+# parser), and should advance the buffer pointer (p->arg).
+M:int:stap_parse_special_token:struct stap_parse_info *p:p
+
+
 # True if the list of shared libraries is one and only for all
 # processes, as opposed to a list of shared libraries per inferior.
 # This usually means that all processes, although may or may not share
@@ -830,6 +940,24 @@ v:int:has_dos_based_file_system:::0:0::0
 # places that the return address may be found.
 m:void:gen_return_address:struct agent_expr *ax, struct axs_value *value, CORE_ADDR scope:ax, value, scope::default_gen_return_address::0
 
+# Implement the "info proc" command.
+M:void:info_proc:char *args, enum info_proc_what what:args, what
+
+# Iterate over all objfiles in the order that makes the most sense
+# for the architecture to make global symbol searches.
+#
+# CB is a callback function where OBJFILE is the objfile to be searched,
+# and CB_DATA a pointer to user-defined data (the same data that is passed
+# when calling this gdbarch method).  The iteration stops if this function
+# returns nonzero.
+#
+# CB_DATA is a pointer to some user-defined data to be passed to
+# the callback.
+#
+# If not NULL, CURRENT_OBJFILE corresponds to the objfile being
+# inspected when the symbol search was requested.
+m:void:iterate_over_objfiles_in_search_order:iterate_over_objfiles_in_search_order_cb_ftype *cb, void *cb_data, struct objfile *current_objfile:cb, cb_data, current_objfile:0:default_iterate_over_objfiles_in_search_order::0
+
 EOF
 }
 
@@ -945,6 +1073,7 @@ struct core_regset_section;
 struct syscall;
 struct agent_expr;
 struct axs_value;
+struct stap_parse_info;
 
 /* The architecture associated with the connection to the target.
  
@@ -957,6 +1086,12 @@ struct axs_value;
    Eventually, when support for multiple targets is implemented in
    GDB, this global should be made target-specific.  */
 extern struct gdbarch *target_gdbarch;
+
+/* Callback type for the 'iterate_over_objfiles_in_search_order'
+   gdbarch  method.  */
+
+typedef int (iterate_over_objfiles_in_search_order_cb_ftype)
+  (struct objfile *objfile, void *cb_data);
 EOF
 
 # function typedef's
@@ -1275,6 +1410,7 @@ cat <<EOF
 #include "gdb_obstack.h"
 #include "observer.h"
 #include "regcache.h"
+#include "objfiles.h"
 
 /* Static function declarations */
 
diff --git a/gdb/gdbcore.h b/gdb/gdbcore.h
index 776ce9f..d6c9de2 100644
--- a/gdb/gdbcore.h
+++ b/gdb/gdbcore.h
@@ -45,11 +45,11 @@ extern void memory_error (int status, CORE_ADDR memaddr);
 
 /* Like target_read_memory, but report an error if can't read.  */
 
-extern void read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len);
+extern void read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len);
 
 /* Like target_read_stack, but report an error if can't read.  */
 
-extern void read_stack (CORE_ADDR memaddr, gdb_byte *myaddr, int len);
+extern void read_stack (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len);
 
 /* Read an integer from debugged memory, given address and number of
    bytes.  */
@@ -83,7 +83,14 @@ CORE_ADDR read_memory_typed_address (CORE_ADDR addr, struct type *type);
    byteswapping, alignment, different sizes for host vs. target types,
    etc.  */
 
-extern void write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, int len);
+extern void write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr,
+			  ssize_t len);
+
+/* Same as write_memory, but notify 'memory_changed' observers.  */
+
+extern void write_memory_with_notification (CORE_ADDR memaddr,
+					    const bfd_byte *myaddr,
+					    ssize_t len);
 
 /* Store VALUE at ADDR in the inferior as a LEN-byte unsigned integer.  */
 extern void write_memory_unsigned_integer (CORE_ADDR addr, int len,
diff --git a/gdb/gdbserver/.gitignore b/gdb/gdbserver/.gitignore
index 9c94950..bb5c293 100644
--- a/gdb/gdbserver/.gitignore
+++ b/gdb/gdbserver/.gitignore
@@ -1,4 +1,12 @@
 gdbreplay
 gdbserver
+libinproctrace.so
+
+amd64-avx-linux.c
+amd64-linux.c
+i386-avx-linux.c
+i386-linux.c
+i386-mmx-linux.c
 reg-*.c
 version.c
+xml-builtin.c
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index c954a43..7fc0588 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,4 +1,910 @@
-2012-01-06  Joel Brobecker  <brobecker at adacore.com>
+2012-08-02  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* hostio.c (handle_pread): If pread fails, fall back to attempting
+	lseek/read.
+	(handle_pwrite): Likewise for pwrite.
+
+2012-08-01  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* linux-arm-low.c (arm_linux_hw_point_initialize): Distinguish
+	between unsupported TYPE and unimplementable ADDR/LEN combination.
+	(arm_insert_point): Act on new return value.
+
+2012-08-01  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* linux-arm-low.c (arm_linux_hw_point_initialize): Do not attempt
+	to 4-byte-align HW breakpoint addresses for Thumb.
+
+2012-07-27  Yao Qi  <yao at codesourcery.com>
+
+	* server.c (process_point_options): Stop at 'X' when parsing.
+
+2012-07-07  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdbserver/linux-low.c (initialize_low): Call
+	linux_ptrace_init_warnings.
+
+2012-07-02  Doug Evans  <dje at google.com>
+
+	* mem-break.c (gdb_no_commands_at_breakpoint): Fix cast from
+	pointer to int.
+
+2012-07-02  Stan Shebs  <stan at codesourcery.com>
+
+	* Makefile.in (WARN_CFLAGS_NO_FORMAT): Define.
+	(ax.o): Add it to build rule.
+	(ax-ipa.o): Ditto.
+	(OBS): Add format.o.
+	(IPA_OBS): Add format.o.
+	* server.c (handle_query): Claim support for breakpoint commands.
+	(process_point_options): Add command case.
+	(process_serial_event): Leave running if there are printfs in
+	effect.
+	* mem-break.h (any_persistent_commands): Declare.
+	(add_breakpoint_commands): Declare.
+	(gdb_no_commands_at_breakpoint): Declare.
+	(run_breakpoint_commands): Declare.
+	* mem-break.c (struct point_command_list): New struct.
+	(struct breakpoint): New field command_list.
+	(any_persistent_commands): New function.
+	(add_commands_to_breakpoint): New function.
+	(add_breakpoint_commands): New function.
+	(gdb_no_commands_at_breakpoint): New function.
+	(run_breakpoint_commands): New function.
+	* linux-low.c (linux_wait_1): Test for and run breakpoint commands
+	locally.
+	* ax.c: Include format.h.
+	(ax_printf): New function.
+	(gdb_eval_agent_expr): Add printf opcode.
+
+2012-06-13  Yao Qi  <yao at codesourcery.com>
+
+	* server.c (start_inferior): Remove duplicated writes to fields
+	'last_resume_kind' and 'last_status' of 'current_inferior'.
+
+2012-06-12  Yao Qi  <yao at codesourcery.com>
+	    Pedro Alves  <palves at redhat.com>
+
+	* linux-low.c (linux_set_resume_request): Simplify predicate.  Add
+	comment.
+	* server.c (handle_v_cont): Extend comment.
+
+2012-06-11  Yao Qi  <yao at codesourcery.com>
+
+	* linux-low.c (linux_attach): Add 'static'.
+
+2012-06-06  Yao Qi  <yao at codesourcery.com>
+
+	* ax.c (gdb_eval_agent_expr): Print `top' in hex.
+
+2012-06-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix gcc -flto compilation warning.
+	* server.c (main): Make variable multi_mode and attach volatile.
+
+2012-05-30  Thiago Jung Bauermann  <thiago.bauermann at linaro.org>
+
+	* linux-low.c (get_r_debug): Disable code using DT_MIPS_RLD_MAP
+	if the platform doesn't know about it.
+
+2012-05-30  Jeff Kenton  <jkenton at tilera.com>
+
+	* Makefile.in (SFILES): Add linux-tile-low.c.
+	(linux-tile-low.o, reg-tilegx.o, reg-tilegx.c): New rules.
+	* configure.srv: Handle tilegx-*-linux*.
+	* linux-tile-low.c: New file.
+
+2012-05-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* linux-low.c (linux_qxfer_libraries_svr4): Return -1 if R_DEBUG is -1.
+
+2012-05-24  Pedro Alves  <palves at redhat.com>
+
+	PR gdb/7205
+
+        Replace TARGET_SIGNAL_ with GDB_SIGNAL_ throughout.
+
+2012-05-24  Pedro Alves  <palves at redhat.com>
+
+	PR gdb/7205
+
+	Replace target_signal with gdb_signal throughout.
+
+2012-05-22  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* linux-low.c (linux_store_registers): Avoid the copying sequence
+	when no data has been retrieved by ptrace.
+
+2012-05-22  Will Deacon  <will.deacon at arm.com>
+
+	* linux-low (__UCLIBC__ && !(__UCLIBC_HAS_MMU__ || __ARCH_HAS_MMU__)):
+	Include asm/ptrace.h.
+	(PT_TEXT_ADDR, PT_DATA_ADDR, PT_TEXT_END_ADDR): Define only if not
+	already defined.
+
+2012-05-21  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* linux-low.c (linux_store_registers): Don't re-retrieve data
+	with ptrace that has already been obtained from /proc.  Always
+	copy any data retrieved with ptrace to the buffer supplied.
+
+2012-05-11  Yao Qi  <yao at codesourcery.com>
+	    Pedro Alves  <palves at redhat.com>
+
+	* linux-low.c (enum stopping_threads_kind): New.
+	(stopping_threads): Change type to `enum stopping_threads_kind'.
+	(handle_extended_wait): If stopping and suspending threads, leave
+	the new_lwp suspended too.
+	(linux_wait_for_event): Adjust.
+	(stop_all_lwps): Set `stopping_threads' to
+	STOPPING_AND_SUSPENDING_THREADS or STOPPING_THREADS depending on
+	whether we're suspending threads or just stopping them.  Assert no
+	recursion happens.
+
+2012-04-29  Yao Qi  <yao at codesourcery.com>
+
+	* server.h: Move some code to ...
+	* gdbthread.h: ... here.  New.
+	* Makefile.in (inferiors.o, regcache.o): Depends on gdbthread.h
+	(remote-utils.o, server.o, target.o tracepoint.o): Likewise.
+	(nto-low.o, win32-low.o): Likewise.
+	* inferiors.c, linux-low.h, nto-low.c: Include gdbthread.h.
+	* regcache.c, remote-utils.c, server.c: Likewise.
+	* target.c, tracepoint.c, win32-low.c: Likewise.
+
+2012-04-24  Thiago Jung Bauermann  <thiago.bauermann at linaro.org>
+
+	* linux-low.h (PTRACE_ARG3_TYPE): Move macro from linux-low.c.
+	(PTRACE_ARG4_TYPE): Likewise.
+	(PTRACE_XFER_TYPE): Likewise.
+	* linux-arm-low.c (arm_prepare_to_resume): Cast third argument of
+	ptrace to PTRACE_ARG3_TYPE.
+	* linux-low.c (PTRACE_ARG3_TYPE): Move macro to linux-low.h.
+	(PTRACE_ARG4_TYPE): Likewise.
+	(PTRACE_XFER_TYPE): Likewise.
+	(linux_detach_one_lwp): Cast fourth argument of
+	ptrace to long then PTRACE_ARG4_TYPE.
+	(regsets_fetch_inferior_registers): Cast third argument of
+	ptrace to long then PTRACE_ARG3_TYPE.
+	(regsets_store_inferior_registers): Likewise.
+
+2012-04-20  Pedro Alves  <palves at redhat.com>
+
+	* configure: Regenerate.
+
+2012-04-19  Pedro Alves  <palves at redhat.com>
+
+        * Makefile.in (GNULIB_BUILDDIR): New.
+	(LIBGNU, INCGNU, GNULIB_H): Adjust.
+        (SUBDIRS, CLEANDIRS, REQUIRED_SUBDIRS): New.
+        (all, install-only, uninstall, clean-info, all-lib, clean): No
+        longer pass GNULIB_FLAGS_TO_PASS.  Use subdir_do.
+        (maintainer-clean realclean distclean): Use subdir_do.
+        (subdir_do): New.
+        (gnulib/import/Makefile): Adjust.  Replace gnulib/import with
+	$(GNULIB_BUILDDIR).  Don't pass argument to config.status.
+        * acinclude.m4: Include acx_configure_dir.m4.
+        * configure.ac: Remove gl_EARLY, gl_INIT, and AM_INIT_AUTOMAKE
+        calls.  Call AC_PROG_RANLIB.  Configure gnulib using
+        ACX_CONFIGURE_DIR.
+        (GNULIB): New.
+        (GNULIB_STDINT_H): Adjust.
+        (AC_OUTPUT): Don't output gnulib/Makefile anymore.
+        * gdbreplay.c: Include build-gnulib/config.h.
+        * server.h: Likewise.
+        * aclocal.m4: Regenerate.
+        * config.in: Regenerate.
+        * configure: Regenerate.
+
+2012-04-19  Pedro Alves  <palves at redhat.com>
+
+	* Makefile.in (LIBGNU, INCGNU): Adjust.
+	(GNULIB_FLAGS_TO_PASS, GNULIB_H): Adjust.
+	(all, install-only, uninstall, clean-info, all-lib, clean)
+	(maintainer-clean, Makefile, gnulib/Makefile): Adjust.
+	* configure.ac: Adjust AC_OUTPUT output.
+	* aclocal.m4: Regenerate.
+	* configure: Regenerate.
+
+2012-04-19  Pedro Alves  <palves at redhat.com>
+
+	* Makefile.in (generated_files): New.
+	(server_h): Remove the explicit dependency on config.h, and depend
+	on $generated_files.
+
+2012-04-19  Pedro Alves  <palves at redhat.com>
+
+	* Makefile.in (INCGNU): Add -Ignulib.
+
+2012-04-19  Pedro Alves  <palves at redhat.com>
+
+	* Makefile.in (GNULIB_INCLUDE_DIR): Rename to ...
+	(INCGNU): ... this, and spell out -I here.
+	(GNULIB_LIB): Rename to ...
+	(LIBGNU): ... this.
+	(INCLUDE_CFLAGS, gdbserver$(EXEEXT), $(GNULIB_LIB) rule): Adjust.
+
+2012-04-19  Pedro Alves  <palves at redhat.com>
+
+	* config.in: Regenerate.
+
+2012-04-19  Pedro Alves  <palves at redhat.com>
+
+	* configure.ac: Remove AC_CHECK_DECLS check for memmem.
+	* server.h (memmem): Remove declaration.
+	* config.in: Regenerate.
+	* configure: Regenerate.
+
+2012-04-19  Yao Qi  <yao at codesourcery.com>
+
+	* Makefile.in (SFILES): Add common/vec.c.
+	(OBS): Add vec.o.
+	(vec.o): New rule.
+
+2012-04-19  Yao Qi  <yao at codesourcery.com>
+
+	* remote-utils.c (prepare_resume_reply): Replace with macro
+	target_core_of_thread.
+	* server.c (handle_qxfer_threads_proper): Likewise.
+	* target.h (traget_core_of_thread): New macro.
+
+2012-04-18  Pedro Alves  <palves at redhat.com>
+
+	* aclocal.m4: Regenerate.
+	* configure: Regenerate.
+
+2012-04-16  Yao Qi  <yao at codesourcery.com>
+
+	* tracepoint.c (cmd_qtstart): Download tracepoints even when they are
+	duplicated on address.
+
+2012-04-16  Yao Qi  <yao at codesourcery.com>
+
+	* tracepoint.c (COPY_FIELD_TO_BUF): New macro.
+	(struct tracepoint_action_ops) <send>: New field.
+	(m_tracepoint_action_send, r_tracepoint_action_send): New.
+	(agent_expr_send, x_tracepoint_action_send): New.
+	(l_tracepoint_action_send): New.
+	(cmd_qtdp): Download and install tracepoint
+	according to `use_agent'.
+	(run_inferior_command): Add one more parameter `len'.
+	Update callers.
+	(tracepoint_send_agent): New.
+	(cmd_qtdp, cmd_qtstart): Call tracepoint_send_agent.
+
+2012-04-16  Yao Qi  <yao at codesourcery.com>
+
+	* tracepoint.c (download_tracepoints): Moved to ...
+	(cmd_qtstart): ... here.
+
+2012-04-14  Yao Qi  <yao at codesourcery.com>
+
+	* tracepoint.c: Include inttypes.h.
+	(struct collect_memory_action): Use sized types.
+	(struct tracepoint): Likewise.
+	(cmd_qtdp, stop_tracing): Update print specifiers.
+	(cmd_qtp, response_tracepoint): Likewise.
+	(collect_data_at_tracepoint): Likewise.
+	(collect_data_at_step): Likewise.
+
+2012-04-14  Yao Qi  <yao at codesourcery.com>
+
+	Import gnulib module inttypes.
+	* aclocal.m4, config.in, configure: Regenerated.
+
+2012-04-14  Yao Qi  <yao at codesourcery.com>
+
+	* Makefile.in (maintainer-clean, realclean, distclean): Remove
+	Makefile and config.status at last.
+
+2012-04-13  Yao Qi  <yao at codesourcery.com>
+
+	* tracepoint.c: Include stdint.h unconditionally.
+
+2012-04-13  Thiago Jung Bauermann  <thiago.bauermann at linaro.org>
+
+	* acinclude.m4 (GDBSERVER_HAVE_THREAD_DB_TYPE): New macro based
+	on BFD_HAVE_SYS_PROCFS_TYPE.
+	* configure.ac: Look for lwpid_t and psaddr_t in libthread_db.h.
+	* configure: Regenerate.
+	* config.in: Likewise.
+
+2012-04-13  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* Makefile.in (clean): Also remove x32.c x32-linux.c
+	x32-avx.c x32-avx-linux.c.
+	(x32.o): New target.
+	(x32.c): Likewise.
+	(x32-linux.o): Likewise.
+	(x32-linux.c): Likewise.
+	(x32-avx.o): Likewise.
+	(x32-avx.c): Likewise.
+	(x32-avx-linux.o): Likewise.
+	(x32-avx-linux.c): Likewise.
+
+	* configure.srv (srv_amd64_regobj): Add x32.o x32-avx.o.
+	(srv_amd64_linux_regobj): Add x32-linux.o x32-avx-linux.o.
+	(srv_i386_64bit_xmlfiles): Add i386/x32-core.xml.
+	(srv_amd64_xmlfiles): Add i386/x32.xml i386/x32-avx.xml.
+	(srv_amd64_linux_xmlfiles): Add i386/x32-linux.xml
+	i386/x32-avx-linux.xml.
+
+	* linux-x86-low.c (init_registers_x32_linux): New prototype.
+	(init_registers_x32_avx_linux): Likwise.
+	(x86_linux_update_xmltarget): Call init_registers_x32_linux
+	or init_registers_x32_avx_linux if linux_is_elf64 is false.
+
+2012-04-13  Pedro Alves  <palves at redhat.com>
+
+	* Makefile.in (GNULIB_FLAGS_TO_PASS): New.
+	(FLAGS_TO_PASS): Don't change or set $top_srcdir, $srcdir and VPATH.
+	(all, uninstall, clean-info, all-lib, clean, maintainer-clean)
+	(realclean, distclean): Explicitly pass $GNULIB_FLAGS_TO_PASS to
+	the sub-make.
+
+2012-04-12  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* linux-x86-low.c (compat_x32_clock_t): New.
+	(compat_x32_siginfo_t): Likewise.
+	(compat_x32_siginfo_from_siginfo): Likewise.
+	(siginfo_from_compat_x32_siginfo): Likewise.
+	(linux_is_elf64): Likewise.
+	(x86_siginfo_fixup): Call compat_x32_siginfo_from_siginfo
+	and siginfo_from_compat_x32_siginfo for x32.
+	(x86_arch_setup): Set linux_is_elf64.
+
+2012-04-12  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR gdb/13969
+	* linux-low.c (linux_pid_exe_is_elf_64_file): Also return the
+	e_machine field.
+	(linux_qxfer_libraries_svr4): Update call to elf_64_file_p.
+	* linux-low.h (linux_pid_exe_is_elf_64_file): Updated.
+	* linux-x86-low.c (x86_arch_setup): Check if GDBserver is
+	compatible with process.
+
+2012-04-12  Yao Qi  <yao at codesourcery.com>
+
+	* Makefile.in: Define abs_top_srcdir and abs_srcdir.
+	(INCLUDE_CFLAGS): Append GNULIB_INCLUDE_DIR.
+	(install-only, install-info, clean): Handle sub dir gnulib.
+	(all-lib, am--refresh): New targets.
+	(memmem.o): Remove target.
+	* configure.ac: Remove AC_CONFIG_LIBOBJ_DIR.
+	Invoke gl_EARLY.  Invoke AC_CHECK_PROGS for make.
+	(AC_REPLACE_FUNCS): Remove memmem.
+	Invoke gl_INIT and AM_INIT_AUTOMAKE.
+	(AC_OUTPUT): Generate Makefile in gnulib/.
+	* aclocal.m4, config.in, configure: Regenerated.
+
+2012-04-10  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* linux-low.c (get_r_debug): Handle DT_MIPS_RLD_MAP.
+
+2012-04-05  Pedro Alves  <palves at redhat.com>
+
+	-Werror=strict-aliasing
+
+	* spu-low.c (parse_spufs_run): Avoid dereferencing type-punned
+	pointer.
+
+2012-04-04  Pedro Alves  <palves at redhat.com>
+
+	* linux-sparc-low.c (sparc_fill_gregset_to_stack)
+	(sparc_store_gregset_from_stack, sparc_store_gregset)
+	(sparc_breakpoint_at): Fix formatting.
+
+2012-03-30  Thiago Jung Bauermann  <thiago.bauermann at linaro.org>
+
+	* configure.ac: Check whether Elf32_auxv_t and Elf64_auxv_t
+	are available.
+	* linux-low.c [HAVE_ELF32_AUXV_T] (Elf32_auxv_t): Add typedef.
+	[HAVE_ELF64_AUXV_T] (Elf64_auxv_t): Likewise.
+	* config.in: Regenerate.
+	* configure: Likewise.
+
+2012-03-29  Pedro Alves  <palves at redhat.com>
+
+	* linux-low.c (regsets_store_inferior_registers) [__sparc__]:
+	Correct ptrace arguments.
+
+2012-03-28  Pedro Alves  <palves at redhat.com>
+
+	* linux-ia64-low.c (ia64_regmap): Map IA64_EC_REGNUM to PT_AR_EC.
+	(IA64_GR0_REGNUM, IA64_FR0_REGNUM)
+	(IA64_FR1_REGNUM): New defines.
+	(ia64_fetch_register): New.
+	(the_low_target): Install it.
+	* linux-low.h (struct linux_target_ops) <fetch_register>: New
+	field.
+	* linux-low.c (linux_fetch_registers): Try the
+	the_low_target.fetch_register hook first.
+
+	* linux-arm-low.c (the_low_target): Adjust.
+	* linux-bfin-low.c (the_low_target): Adjust.
+	* linux-cris-low.c (the_low_target): Adjust.
+	* linux-crisv32-low.c (the_low_target): Adjust.
+	* linux-m32r-low.c (the_low_target): Adjust.
+	* linux-m68k-low.c (the_low_target): Adjust.
+	* linux-mips-low.c (the_low_target): Adjust.
+	* linux-ppc-low.c (the_low_target): Adjust.
+	* linux-s390-low.c (the_low_target): Adjust.
+	* linux-sh-low.c (the_low_target): Adjust.
+	* linux-sparc-low.c (the_low_target): Adjust.
+	* linux-tic6x-low.c (the_low_target): Adjust.
+	* linux-x86-low.c (the_low_target): Adjust.
+	* linux-xtensa-low.c (the_low_target): Adjust.
+
+2012-03-26  Pedro Alves  <palves at redhat.com>
+
+	* server.c (handle_qxfer_libraries): Don't bail early if
+	the_target->qxfer_libraries_svr4 is not NULL.
+
+2012-03-26  Pedro Alves  <palves at redhat.com>
+
+	* linux-low.c (linux_qxfer_libraries_svr4): Fix pasto in comment.
+
+2012-03-23  Pedro Alves  <palves at redhat.com>
+
+	* linux-low.c (linux_qxfer_libraries_svr4): Terminate the
+	"library-list-svr4" element's start tag when the the DSO list is
+	empty.
+
+2012-03-23  Pedro Alves  <palves at redhat.com>
+
+	* linux-low.c (read_one_ptr): Read the inferior's pointer through
+	a variable whose type size is the same as the inferior's pointer
+	size.
+
+2012-03-21  Thomas Schwinge  <thomas at codesourcery.com>
+
+	* linux-arm-low.c (arm_stopped_by_watchpoint): Use siginfo_t instead of
+	struct siginfo.
+	* linux-low.c (siginfo_fixup, linux_xfer_siginfo): Likewise.
+	* linux-x86-low.c (x86_siginfo_fixup): Likewise.
+	* linux-low.h: Include <signal.h>.
+	(struct siginfo): Remove forward declaration.
+	(struct linux_target_ops) <siginfo_fixup>: Use siginfo_t instead of
+	struct siginfo.
+
+2012-03-21  Mike Frysinger  <vapier at gentoo.org>
+
+	* .gitignore: Ignore more files.
+
+2012-03-19  Pedro Alves  <palves at redhat.com>
+	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* server.c (cont_thread, general_thread): Add describing comments.
+	(start_inferior): Clear `cont_thread'.
+	(handle_v_cont): Don't set `cont_thread' if resuming all threads
+	of a process.
+
+2012-03-15  Yao Qi  <yao at codesourcery.com>
+
+	* tracepoint.c (install_tracepoint): Move duplicated tracepoint
+	handling to ...
+	(cmd_qtdp): ... here.
+
+2012-03-15  Yao Qi  <yao at codesourcery.com>
+
+	* tracepoint.c (struct tracepoint_action_ops): New.
+	(struct tracepoint_action) [!IN_PROCESS_AGENT] <ops>: New field.
+	(m_tracepoint_action_download): New.
+	(r_tracepoint_action_download): New.
+	(x_tracepoint_action_download): New.
+	(l_tracepoint_action_download): New.
+	(add_tracepoint_action): Install `action->ops' according type.
+	(download_tracepoint_1): Move code `download' function pointer
+	of various tracepoint_action_ops.
+
+2012-03-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* linux-low.c (linux_attach_lwp_1): New variable buffer.  Call
+	linux_ptrace_attach_warnings.
+
+2012-03-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* Makefile.in (linux-ptrace.o): New.
+	* configure.srv (arm*-*-linux*, bfin-*-*linux*, crisv32-*-linux*)
+	(cris-*-linux*, i[34567]86-*-linux*, ia64-*-linux*, m32r*-*-linux*)
+	(m68*-*-linux*, m68*-*-uclinux*, mips*-*-linux*, powerpc*-*-linux*)
+	(s390*-*-linux*, sh*-*-linux*, sparc*-*-linux*, tic6x-*-uclinux)
+	(x86_64-*-linux*, xtensa*-*-linux*): Add linux-ptrace.o to SRV_TGTOBJ
+	of these targets.
+	* linux-low.c (linux_attach_lwp_1): Remove redundent else clause.
+
+2012-03-08  Yao Qi  <yao at codesourcery.com>
+	    Pedro Alves  <palves at redhat.com>
+
+	Fix PR server/13392.
+	* linux-x86-low.c (amd64_install_fast_tracepoint_jump_pad): Check
+	offset of JMP insn.
+	* tracepoint.c (remove_tracepoint): New.
+	(cmd_qtdp): Call remove_tracepoint when failed to install.
+
+2012-03-07  Pedro Alves  <palves at redhat.com>
+
+	* linux-low.c (get_detach_signal): New.
+	(linux_detach_one_lwp): Get rid of a pending SIGSTOP with SIGCONT.
+	Pass on pending signals to PTRACE_DETACH.  Check the result of the
+	ptrace call.
+	* server.c (program_signals, program_signals_p): New.
+	(handle_general_set): Handle QProgramSignals.
+	* server.h (program_signals, program_signals_p): Declare.
+
+2012-03-05  Pedro Alves  <palves at redhat.com>
+	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* linux-low.c (get_dynamic): Don't warn when PT_PHDR isn't found.
+	New comment why.
+
+2012-03-03  Yao Qi  <yao at codesourcery.com>
+
+	* tracepoint.c (tracepoint_look_up_symbols): Update call to
+	agent_look_up_symbols.
+
+2012-03-03  Yao Qi  <yao at codesourcery.com>
+
+	* Makefile.in (linux-low.o): Keep dependence on agent.h.
+	(linux-x86-low.o): Likewise.
+	* server.h: Remove in_process_agent_loaded.
+	* tracepoint.c (in_process_agent_loaded): Removed.  Moved it
+	common/agent.c.
+	Update callers.
+
+2012-03-03  Yao Qi  <yao at codesourcery.com>
+
+	* tracepoint.c (gdb_agent_capability): New global.
+	(in_process_agent_loaded_ust): Renamed to
+	`in_process_agent_supports_ust'.
+	Update callers.
+	(in_process_agent_supports_ust): Call agent_capability_check.
+	(clear_installed_tracepoints): Assert that agent supports
+	agent.
+
+2012-03-03  Yao Qi  <yao at codesourcery.com>
+
+	* linux-low.c (linux_supports_agent): New.
+	(linux_target_ops): Initialize field `supports_agent' with
+	linux_supports_agent.
+	* target.h (struct target_ops) <supports_agent>: New.
+	(target_supports_agent): New macro.
+	* server.c (handle_general_set): Handle packet 'QAgent'.
+	(handle_query): Send `QAgent+'.
+	* Makefile.in (server.o): Depends on agent.h.
+
+2012-03-03  Yao Qi  <yao at codesourcery.com>
+
+	* Makefile.in (OBS): Add agent.o.
+	Add new rule for agent.o.
+	Track dependence of tracepoint.c on agent.h.
+	* tracepoint.c (run_inferior_command_1):
+	(run_inferior_command): Call agent_run_command.
+	(gdb_ust_connect_sync_socket): Deleted.  Move it to
+	common/agent.c.
+	(resume_thread, stop_thread): Likewise.
+	(gdb_ust_socket_init): Renamed to ...
+	(gdb_agent_socket_init): ... New.
+	(gdb_ust_thread): Renamed to ...
+	(gdb_agent_helper_thread): ... New.
+	(gdb_ust_init): Move some code to ...
+	(gdb_agent_init): ... here.  New.
+	[HAVE_UST]: Call gdb_ust_init.
+	(initialize_tracepoint_ftlib):  Call gdb_agent_init.
+	* configure.ac: Add `sys/un.h' to AC_CHECK_HEADERS.
+	* config.in, configure: Regenerated.
+
+2012-03-02  Pedro Alves  <palves at redhat.com>
+
+	* inferiors.c (add_pid_to_list, pull_pid_from_list): Delete.
+	* linux-low.c (struct simple_pid_list): New.
+	(stopped_pids): New a struct simple_pid_list pointer.
+	(add_to_pid_list, pull_pid_from_list): New.
+	(handle_extended_wait): Don't assume the first signal new children
+	report is SIGSTOP.  Adjust call to pull_pid_from_list.
+	(linux_wait_for_lwp): Adjust.
+
+2012-03-02  Yao Qi  <yao at codesourcery.com>
+
+	* tracepoint.c (do_action_at_tracepoint): Write `stop_pc' in
+	debug log.
+
+2012-03-02  Yao Qi  <yao at codesourcery.com>
+
+	* tracepoint.c (collect_ust_data_at_tracepoint): Remove parameters
+	`stop_pc' and `tpoint'.  Update caller.
+
+2012-03-01  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* linux-low.h (linux_target_ops): Add regset_bitmap member.
+	* linux-low.c (use_linux_regsets): New macro.
+	[!HAVE_LINUX_REGSETS] (regsets_fetch_inferior_registers): Likewise.
+	[!HAVE_LINUX_REGSETS] (regsets_store_inferior_registers): Likewise.
+	(linux_register_in_regsets): New function.
+	(usr_fetch_inferior_registers): Skip registers covered by
+	regsets.
+	(usr_store_inferior_registers): Likewise.
+	(usr_fetch_inferior_registers): New macro.
+	(usr_store_inferior_registers): Likewise.
+	(linux_fetch_registers): Handle mixed regset/non-regset targets.
+	(linux_store_registers): Likewise.
+	* linux-mips-low.c (init_registers_mips_dsp_linux): New
+	prototype.
+	(init_registers_mips64_dsp_linux): Likewise.
+	(init_registers_mips_linux): New macro.
+	(init_registers_mips_dsp_linux): Likewise.
+	(mips_dsp_num_regs): Likewise.
+	(DSP_BASE, DSP_CONTROL): New fallback macros.
+	(mips_base_regs): New macro.
+	(mips_regmap): Use it.  Fix the size.
+	(mips_dsp_regmap): New variable.
+	(mips_dsp_regset_bitmap): Likewise.
+	(mips_arch_setup): New function.
+	(mips_cannot_fetch_register): Use the_low_target.regmap rather
+	than mips_regmap.
+	(mips_cannot_store_register): Likewise.
+	(the_low_target): Update .arch_setup, .num_regs and .regmap
+	initializers.  Add .regset_bitmap initializer.
+	* linux-arm-low.c (the_low_target): Add .regset_bitmap
+	initializer.
+	* linux-bfin-low.c (the_low_target): Likewise.
+	* linux-cris-low.c (the_low_target): Likewise.
+	* linux-crisv32-low.c (the_low_target): Likewise.
+	* linux-ia64-low.c (the_low_target): Likewise.
+	* linux-m32r-low.c (the_low_target): Likewise.
+	* linux-m68k-low.c (the_low_target): Likewise.
+	* linux-ppc-low.c (the_low_target): Likewise.
+	* linux-s390-low.c (the_low_target): Likewise.
+	* linux-sh-low.c (the_low_target): Likewise.
+	* linux-sparc-low.c (the_low_target): Likewise.
+	* linux-tic6x-low.c (the_low_target): Likewise.
+	* linux-x86-low.c (the_low_target): Likewise.
+	* linux-xtensa-low.c (the_low_target): Likewise.
+	* configure.srv <mips*-*-linux*>: Add mips-dsp-linux.o and
+	mips64-dsp-linux.o to srv_regobj.  Add mips-dsp-linux.xml,
+	mips64-dsp-linux.xml, mips-dsp.xml and mips64-dsp.xml to
+	srv_xmlfiles.
+	* Makefile.in (mips-dsp-linux.o, mips-dsp-linux.c): New targets.
+	(mips64-dsp-linux.o, mips64-dsp-linux.c): Likewise.
+
+2012-02-29  Yao Qi  <yao at codesourcery.com>
+	    Pedro Alves  <palves at redhat.com>
+
+	* linux-low.c: (linux_wait_1): Call unsuspend_all_lwps when
+	`step_over_finished' is true.
+
+2012-02-27  Pedro Alves  <palves at redhat.com>
+
+	* linux-low.c (pid_is_stopped): Delete, moved to common/.
+	(linux_attach_lwp_1): Adjust to use linux_proc_pid_is_stopped.
+
+2012-02-27  Pedro Alves  <palves at redhat.com>
+
+	PR server/9684
+	* linux-low.c (pid_is_stopped): New.
+	(linux_attach_lwp_1): Handle attaching to 'T (stopped)' processes.
+
+2012-02-25  Luis Machado  <lgustavo at codesourcery.com>
+
+	* mem-break.c (clear_gdb_breakpoint_conditions): Fix de-allocation
+	of conditions.
+
+2012-02-24  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* linux-mips-low.c (mips_regmap): Correct the index of $f9.
+
+2012-02-24  Luis Machado  <lgustavo at codesourcery>
+
+	* server.c (handle_query): Advertise support for target-side
+	breakpoint condition evaluation.
+	(process_point_options): New function.
+	(process_serial_event): When inserting a breakpoint, check for
+	a target-side condition that should be evaluated.
+
+	* mem-break.c: Include regcache.h and ax.h.
+	(point_cond_list_t): New data structure.
+	(breakpoint) <cond_list>: New field.
+	(find_gdb_breakpoint_at): Make non-static.
+	(delete_gdb_breakpoint_at): Clear any target-side
+	conditions.
+	(clear_gdb_breakpoint_conditions): New function.
+	(add_condition_to_breakpoint): Likewise.
+	(add_breakpoint_condition): Likewise.
+	(gdb_condition_true_at_breakpoint): Likewise.
+	(gdb_breakpoint_here): Return result directly instead
+	of going through a local variable.
+
+	* mem-break.h (find_gdb_breakpoint_at): New prototype.
+	(clear_gdb_breakpoint_conditions): Likewise.
+	(add_breakpoint_condition): Likewise.
+	(gdb_condition_true_at_breakpoint): Likewise.
+
+	* linux-low.c (linux_wait_1): Evaluate target-side breakpoint condition.
+	(need_step_over_p): Take target-side breakpoint condition into
+	consideration.
+
+2012-02-24  Luis Machado  <lgustavo at codesourcery>
+
+	* server.h: Include tracepoint.h.
+	(agent_mem_read, agent_get_trace_state_variable_value,
+	agent_set_trace_state_variable_value,
+	agent_tsv_read, agent_mem_read_string, get_get_tsv_func_addr,
+	get_set_tsv_func_addr): New prototypes.
+
+	* ax.h: New include file.
+	* ax.c: New source file.
+
+	* tracepoint.c: Include ax.h.
+	(gdb_agent_op, gdb_agent_op_names, gdb_agent_op_sizes,
+	agent_expr, eval_result_type): Move to ax.h.
+	(parse_agent_expr): Rename to ...
+	(gdb_parse_agent_expr): ... this, make it non-static and move
+	to ax.h.
+	(unparse_agent_expr) Rename to ...
+	(gdb_unparse_agent_expr): ... this, make it non-static and move
+	to ax.h.
+	(eval_agent_expr): Rename to ...
+	(eval_tracepoint_agent_expr): ... this.
+	(agent_mem_read, agent_mem_read_string, agent_tsv_read): Remove
+	forward declarations.
+	(add_tracepoint_action): Call gdb_parse_agent_expr (...).
+	(agent_get_trace_state_variable_value): New function.
+	(agent_set_trace_state_variable_value): New function.
+	(cmd_qtdp): Call gdb_parse_agent_expr (...).
+	(response_tracepoint): Call gdb_unparse_agent_expr (...).
+	(do_action_at_tracepoint): Call eval_tracepoint_agent_expr (...).
+	(condition_true_at_tracepoint): Likewise.
+	(parse_agent_expr): Rename to ...
+	(gdb_parse_agent_expr): ... this and move to ax.c.
+	(unparse_agent_expr): Rename to ...
+	(gdb_unparse_agent_expr): ... this and move to ax.c.
+	(gdb_agent_op_name): Move to ax.c.
+	(eval_agent_expr): Rename to ...
+	(gdb_eval_agent_expr): ... this, use regcache passed as parameter
+	and move to ax.c.
+	(eval_tracepoint_agent_expr): New function.
+	(agent_mem_read, agent_mem_read_string, agent_tsv_read): Make
+	non-static. 
+	(current_insn_ptr, emit_error, struct bytecode_address): Move to
+	ax.c.
+	(emit_prologue, emit_epilogue, emit_add, emit_sub, emit_mul, emit_lsh,
+	emit_rsh_signed, emit_rsh_unsigned, emit_ext, emit_log_not,
+	emit_bit_and, emit_bit_or, emit_bit_xor, emit_bit_not, emit_equal,
+	emit_less_signed, emit_less_unsigned, emit_ref, emit_if_goto,
+	emit_goto, write_goto_address, emit_const, emit_reg, emit_pop,
+	emit_stack, emit_zero_ext, emit_swap, emit_stack_adjust,
+	emit_int_call_1, emit_void_call_2, emit_eq_goto, emit_ne_goto,
+	emit_lt_goto, emit_ge_goto, emit_gt_goto, emit_le_goto): Move to ax.c.
+	(get_get_tsv_func_addr, get_set_tsv_func_addr): New functions.
+	(compile_bytecodes): Remove forward declaration.
+	(is_goto_target): Move to ax.c.
+	(compile_bytecodes): Move to ax.c and call
+	agent_get_trace_state_variable_value (...) and
+	agent_set_trace_state_variable_value (...).
+
+	* Makefile.in: Update ax.c and IPA dependencies.
+
+2012-02-24  Pedro Alves  <palves at redhat.com>
+
+	* tracepoint.c (cmd_bigqtbuffer): Rename as ...
+	(cmd_bigqtbuffer_circular): ... this.  Only handle
+	'QTBuffer:circular:'.
+	(handle_tracepoint_general_set): Adjust.
+
+2012-02-16  Yao Qi  <yao at codesourcery.com>
+
+	* inferiors.c: Move code to ...
+	* dll.c: .... here.  New.
+	* server.h: Declare clear_dlls.
+	* Makefile.in (SFILES): Add dll.c.
+	(OBS): Add dll.o
+	(dll.o): New rule.
+
+2012-02-11  Yao Qi  <yao at codesourcery.com>
+
+	* server.c: (handle_monitor_command): Add a new parameter
+	`own_buf'.
+	(handle_query): Update caller.
+
+2012-02-09  Joel Brobecker  <brobecker at adacore.com>
+
+	* configure.ac: Add readlink to AC_CHECK_FUNCS list.
+	* configure, config.in: Regenerate.
+	* hostio.c: Provide an alternate implementation if HAVE_READLINK
+	is not defined.
+
+2012-02-02  Pedro Alves  <palves at redhat.com>
+
+	Try SIGKILL first, then PTRACE_KILL.
+	* linux-low.c (linux_kill_one_lwp): New.
+	(linux_kill_one_lwp): Rename to ...
+	(kill_one_lwp_callback): ... this.  Use the new
+	linux_kill_one_lwp.
+
+2012-02-02  Pedro Alves  <palves at redhat.com>
+
+	* tracepoint.c (cmd_qtminftpilen): Return 0 if there's no current
+	inferior.
+
+2012-01-27  Pedro Alves  <palves at redhat.com>
+
+	* linux-low.c (linux_child_pid_to_exec_file): Delete.
+	(elf_64_file_p): Make static.
+	(linux_pid_exe_is_elf_64_file): New.
+	* linux-low.h (linux_child_pid_to_exec_file, elf_64_file_p):
+	Delete declarations.
+	(linux_pid_exe_is_elf_64_file): Declare.
+	* linux-x86-low.c (x86_arch_setup): Use
+	linux_pid_exe_is_elf_64_file.
+
+2012-01-25  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* linux-low.c (linux_wait_for_event_1): Rename to ...
+	(linux_wait_for_event): ... here and merge it with former
+	linux_wait_for_event - new variable wait_ptid, use it.
+	(linux_wait_for_event): Remove - merge it to linux_wait_for_event_1.
+
+2012-01-23  Pedro Alves  <palves at redhat.com>
+
+	* server.c (main): Avoid yet another case of infinite loop while
+	detaching/killing after a longjmp.
+
+2012-01-20  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup.
+	* linux-low.c (linux_wait_for_event_1): Use ptid_is_pid.
+
+2012-01-20  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* hostio.c (handle_readlink): New function.
+	(handle_vFile): Call it to handle "vFile:readlink" packets.
+
+2012-01-20  Pedro Alves  <palves at redhat.com>
+	    Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* server.c (handle_v_requests): Only support vAttach and vRun to
+	start multiple processes when in extended protocol mode.
+
+2012-01-17  Pedro Alves  <palves at redhat.com>
+
+	* tracepoint.c (initialize_tracepoint): Use mmap instead of
+	memalign plus mprotect to allocate the scratch buffer.
+
+2012-01-13  Pedro Alves  <palves at redhat.com>
+
+	* server.c (attach_inferior): Clear `cont_thread'.
+
+2012-01-13  Pedro Alves  <palves at redhat.com>
+
+	* server.c (main): Avoid infinite loop while detaching/killing
+	after a longjmp.
+
+2012-01-09  Doug Evans  <dje at google.com>
+
+	* server.c (start_inferior): Set last_ptid in --wrapper case.
+
+2012-01-06  Yao Qi  <yao at codesourcery.com>
+
+	* tracepoint.c [IN_PROCESS_AGENT] (debug_threads): Macro
+	defined.
+	[IN_PROCESS_AGENT] (debug_agent): New global variable.
+
+2012-01-04  Yao Qi  <yao at codesourcery.com>
+
+	* tracepoint.c (cmd_qtdp): Print debug message
+	for static tracepoint.
+
+2012-01-04  Yao Qi  <yao at codesourcery.com>
+
+	* tracepoint.c (trace_vdebug): Differentiate debug message
+	between gdbserver and IPA.
+
+2012-01-03  Yao Qi  <yao at codesourcery.com>
+
+	* tracepoint.c (tracepoint_was_hit): Don't collect for
+	static tracepoint.
+
+2012-01-02  Joel Brobecker  <brobecker at adacore.com>
 
 	* terminal.h: Reformat copyright header.
 
@@ -7,6 +913,66 @@
 	* server.c (gdbserver_version): Update copyright year.
 	* gdbreplay.c (gdbreplay_version): Likewise.
 
+2011-12-18  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* linux-low.c (linux_create_inferior): Put empty if clause for write.
+
+	Revert:
+	2011-12-18  Hui Zhu  <teawater at gmail.com>
+	* linux-low.c (linux_create_inferior): Save return value to ret.
+
+2011-12-18  Hui Zhu  <teawater at gmail.com>
+
+	* linux-low.c (linux_create_inferior): Save return value to ret.
+
+2011-12-16  Doug Evans  <dje at google.com>
+
+	* linux-low.c (linux_create_inferior): If stdio connection,
+	redirect stdin from /dev/null, stdout to stderr.
+	* remote-utils.c (remote_is_stdio): New static global.
+	(remote_connection_is_stdio): New function.
+	(remote_prepare): Handle stdio connection.
+	(remote_open): Ditto.
+	(remote_close): Don't close stdin for stdio connections.
+	(read_prim,write_prim): New functions.  Replace all calls to
+	read/write to these.
+	* server.c (main): Watch for "-" argument.  Move call to
+	remote_prepare before start_inferior.
+	* server.h (STDIO_CONNECTION_NAME): New macro.
+	(remote_connection_is_stdio): Declare.
+
+	* remote-utils.c (prepare_resume_reply): Remove extraneous \n
+	in debugging output.
+
+2011-12-15  Yao Qi  <yao at codesourcery.com>
+
+	* tracepoint.c: Include sys/syscall.h.
+	(gdb_ust_thread): Remove preprocessor conditional.
+
+2011-12-14  Pedro Alves  <pedro at codesourcery.com>
+
+	* linux-low.c (linux_detach_one_lwp): Call
+	the_low_target.prepare_to_resume before detaching.
+
+2011-12-14  Yao Qi  <yao at codesourcery.com>
+
+	* tracepoint.c (gdb_ust_thread): Don't ignore return value
+	of write.
+
+2011-12-14  Yao Qi  <yao at codesourcery.com>
+
+	* i386-low.c (i386_low_stopped_data_address): Initialize local
+	variable `control'.
+
+2011-12-13  Pedro Alves  <pedro at codesourcery.com>
+
+	PR remote/13492
+
+	* i386-low.c (i386_low_stopped_data_address): Avoid fetching
+	DR_CONTROL unless necessary.  Extend comments.
+	* linux-x86-low.c (x86_linux_prepare_to_resume): Don't write to
+	DR0-3 if not used.  If any watchpoint was set, clear DR_STATUS.
+
 2011-12-13  Yao Qi  <yao at codesourcery.com>
 
 	* tracepoint.c (trace_buffer_alloc): Replace magic numbers with
diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in
index 6ccf5ae..446ea04 100644
--- a/gdb/gdbserver/Makefile.in
+++ b/gdb/gdbserver/Makefile.in
@@ -47,12 +47,15 @@ EXEEXT = @EXEEXT@
 INSTALL = @INSTALL@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_DATA = @INSTALL_DATA@
+RANLIB = @RANLIB@
 
 CC = @CC@
 
 # Directory containing source files.  Don't clean up the spacing,
 # this exact string is matched for by the "configure" script.
 srcdir = @srcdir@
+abs_top_srcdir=@abs_top_srcdir@
+abs_srcdir=@abs_srcdir@
 VPATH = @srcdir@
 
 # It is also possible that you will need to add -I/usr/include/sys to the
@@ -72,12 +75,22 @@ INCLUDE_DEP = $$(INCLUDE_DIR)
 ustlibs = @ustlibs@
 ustinc = @ustinc@
 
+# gnulib
+GNULIB_BUILDDIR = build-gnulib-gdbserver
+LIBGNU = $(GNULIB_BUILDDIR)/import/libgnu.a
+INCGNU = -I$(srcdir)/../gnulib/import -I$(GNULIB_BUILDDIR)/import
+
+# Generated headers in the gnulib directory.  These must be listed
+# so that they are generated before other files are compiled.
+GNULIB_H = $(GNULIB_BUILDDIR)/import/string.h @GNULIB_STDINT_H@
+
 # All the includes used for CFLAGS and for lint.
 # -I. for config files.
 # -I${srcdir} for our headers.
 # -I$(srcdir)/../regformats for regdef.h.
 INCLUDE_CFLAGS = -I. -I${srcdir} -I$(srcdir)/../common \
-	-I$(srcdir)/../regformats -I$(INCLUDE_DIR)
+	-I$(srcdir)/../regformats -I$(INCLUDE_DIR) \
+	$(INCGNU)
 
 # M{H,T}_CFLAGS, if defined, has host- and target-dependent CFLAGS
 # from the config/ directory.
@@ -87,6 +100,9 @@ GLOBAL_CFLAGS = ${MT_CFLAGS} ${MH_CFLAGS}
 WARN_CFLAGS = @WARN_CFLAGS@
 WERROR_CFLAGS = @WERROR_CFLAGS@
 
+WARN_CFLAGS_NO_FORMAT = `echo " $(WARN_CFLAGS) " \
+		   | sed "s/ -Wformat-nonliteral / -Wno-format-nonliteral /g"`
+
 # CFLAGS is specifically reserved for setting from the command line
 # when running make.  I.E.  "make CFLAGS=-Wmissing-prototypes".
 CFLAGS = @CFLAGS@
@@ -104,7 +120,7 @@ INTERNAL_LDFLAGS = $(LDFLAGS) @RDYNAMIC@
 
 # All source files that go into linking GDB remote server.
 
-SFILES=	$(srcdir)/gdbreplay.c $(srcdir)/inferiors.c \
+SFILES=	$(srcdir)/gdbreplay.c $(srcdir)/inferiors.c $(srcdir)/dll.c \
 	$(srcdir)/mem-break.c $(srcdir)/proc-service.c \
 	$(srcdir)/proc-service.list $(srcdir)/regcache.c \
 	$(srcdir)/remote-utils.c $(srcdir)/server.c $(srcdir)/target.c \
@@ -120,9 +136,11 @@ SFILES=	$(srcdir)/gdbreplay.c $(srcdir)/inferiors.c \
 	$(srcdir)/linux-sh-low.c $(srcdir)/linux-sparc-low.c \
 	$(srcdir)/linux-x86-low.c \
 	$(srcdir)/linux-xtensa-low.c \
+	$(srcdir)/linux-tile-low.c \
 	$(srcdir)/win32-arm-low.c $(srcdir)/win32-i386-low.c \
 	$(srcdir)/win32-low.c $(srcdir)/wincecompat.c \
 	$(srcdir)/hostio.c $(srcdir)/hostio-errno.c \
+	$(srcdir)/common/vec.c \
 	$(srcdir)/common/common-utils.c $(srcdir)/common/xml-utils.c \
 	$(srcdir)/common/linux-osdata.c $(srcdir)/common/ptid.c \
 	$(srcdir)/common/buffer.c
@@ -134,10 +152,11 @@ LIBOBJS = @LIBOBJS@
 SOURCES = $(SFILES)
 TAGFILES = $(SOURCES) ${HFILES} ${ALLPARAM} ${POSSLIBS}
 
-OBS = inferiors.o regcache.o remote-utils.o server.o signals.o target.o \
-	utils.o version.o \
+OBS = agent.o ax.o inferiors.o regcache.o remote-utils.o server.o signals.o target.o \
+	utils.o version.o vec.o \
 	mem-break.o hostio.o event-loop.o tracepoint.o \
-	xml-utils.o common-utils.o ptid.o buffer.o \
+	xml-utils.o common-utils.o ptid.o buffer.o format.o \
+	dll.o \
 	$(XML_BUILTIN) \
 	$(DEPFILES) $(LIBOBJS)
 GDBREPLAY_OBS = gdbreplay.o version.o
@@ -153,6 +172,15 @@ XML_BUILTIN = @srv_xmlbuiltin@
 IPA_DEPFILES = @IPA_DEPFILES@
 extra_libraries = @extra_libraries@
 
+SUBDIRS = $(GNULIB_BUILDDIR)
+CLEANDIRS = $(SUBDIRS)
+
+# List of subdirectories in the build tree that must exist.
+# This is used to force build failures in existing trees when
+# a new directory is added.
+# The format here is for the `case' shell command.
+REQUIRED_SUBDIRS = $(GNULIB_BUILDDIR)
+
 FLAGS_TO_PASS = \
 	"prefix=$(prefix)" \
 	"exec_prefix=$(exec_prefix)" \
@@ -185,12 +213,16 @@ FLAGS_TO_PASS = \
 	"RUNTEST=$(RUNTEST)" \
 	"RUNTESTFLAGS=$(RUNTESTFLAGS)"
 
+# All generated files which can be included by another file.
+generated_files = config.h $(GNULIB_H)
+
 # Prevent Sun make from putting in the machine type.  Setting
 # TARGET_ARCH to nothing works for SunOS 3, 4.0, but not for 4.1.
 .c.o:
 	${CC} -c ${INTERNAL_CFLAGS} $<
 
 all: gdbserver$(EXEEXT) gdbreplay$(EXEEXT) $(extra_libraries)
+	@$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do
 
 # Traditionally "install" depends on "all".  But it may be useful
 # not to; for example, if the user has made some trivial change to a
@@ -211,11 +243,13 @@ install-only:
 	$(INSTALL_PROGRAM) gdbserver$(EXEEXT) $(DESTDIR)$(bindir)/$$n$(EXEEXT); \
 	$(SHELL) $(srcdir)/../../mkinstalldirs $(DESTDIR)$(man1dir); \
 	$(INSTALL_DATA) $(srcdir)/gdbserver.1 $(DESTDIR)$(man1dir)/$$n.1
+	@$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do
 
 uninstall: force
 	n=`echo gdbserver | sed '$(program_transform_name)'`; \
 	if [ x$$n = x ]; then n=gdbserver; else true; fi; \
 	rm -f $(DESTDIR)/$(bindir)/$$n$(EXEEXT) $(DESTDIR)$(man1dir)/$$n.1
+	@$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do
 
 installcheck:
 check:
@@ -224,19 +258,25 @@ install-info:
 install-pdf:
 html:
 install-html:
-clean-info:
+clean-info: force
+	@$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do
 
-gdbserver$(EXEEXT): $(OBS) ${ADD_DEPS} ${CDEPS}
+gdbserver$(EXEEXT): $(OBS) ${ADD_DEPS} ${CDEPS} $(LIBGNU)
 	rm -f gdbserver$(EXEEXT)
 	${CC-LD} $(INTERNAL_CFLAGS) $(INTERNAL_LDFLAGS) -o gdbserver$(EXEEXT) $(OBS) \
-	  $(GDBSERVER_LIBS) $(XM_CLIBS)
+	$(LIBGNU) $(GDBSERVER_LIBS) $(XM_CLIBS)
+
+$(LIBGNU) $(GNULIB_H): all-lib
+all-lib: $(GNULIB_BUILDDIR)/Makefile
+	@$(MAKE) $(FLAGS_TO_PASS) DO=all DODIRS=$(GNULIB_BUILDDIR) subdir_do
+.PHONY: all-lib
 
 gdbreplay$(EXEEXT): $(GDBREPLAY_OBS)
 	rm -f gdbreplay$(EXEEXT)
 	${CC-LD} $(INTERNAL_CFLAGS) $(INTERNAL_LDFLAGS) -o gdbreplay$(EXEEXT) $(GDBREPLAY_OBS) \
 	  $(XM_CLIBS)
 
-IPA_OBJS=tracepoint-ipa.o utils-ipa.o regcache-ipa.o remote-utils-ipa.o common-utils-ipa.o ${IPA_DEPFILES}
+IPA_OBJS=ax-ipa.o tracepoint-ipa.o format-ipa.o utils-ipa.o regcache-ipa.o remote-utils-ipa.o common-utils-ipa.o ${IPA_DEPFILES}
 
 IPA_LIB=libinproctrace.so
 
@@ -283,11 +323,32 @@ clean:
 	rm -f i386-avx.c i386-avx-linux.c
 	rm -f amd64-avx.c amd64-avx-linux.c
 	rm -f i386-mmx.c i386-mmx-linux.c
+	rm -f x32.c x32-linux.c
+	rm -f x32-avx.c x32-avx-linux.c
+	@$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do
 
 maintainer-clean realclean distclean: clean
-	rm -f nm.h tm.h xm.h config.status config.h stamp-h config.log
+	@$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do
+	rm -rf $(GNULIB_BUILDDIR)
+	rm -f Makefile config.status config.h stamp-h config.log
 	rm -f Makefile
 
+subdir_do: force
+	@for i in $(DODIRS); do \
+		case $$i in \
+		$(REQUIRED_SUBDIRS)) \
+			if [ ! -f ./$$i/Makefile ] ; then \
+				echo "Missing $$i/Makefile" >&2 ; \
+				exit 1 ; \
+			fi ;; \
+		esac ; \
+		if [ -f ./$$i/Makefile ] ; then \
+			if (cd ./$$i; \
+				$(MAKE) $(FLAGS_TO_PASS) $(DO)) ; then true ; \
+			else exit 1 ; fi ; \
+		else true ; fi ; \
+	done
+
 config.h: stamp-h ; @true
 stamp-h: config.in config.status
 	CONFIG_FILES="" CONFIG_HEADERS=config.h:config.in $(SHELL) ./config.status
@@ -295,9 +356,23 @@ stamp-h: config.in config.status
 Makefile: Makefile.in config.status
 	CONFIG_HEADERS="" $(SHELL) ./config.status
 
+$(GNULIB_BUILDDIR)/Makefile: $(srcdir)/../gnulib/Makefile.in config.status
+	  @cd $(GNULIB_BUILDDIR); CONFIG_FILES="Makefile" \
+	  CONFIG_COMMANDS="depfiles" \
+	  CONFIG_HEADERS= \
+	  CONFIG_LINKS= \
+	  $(SHELL) config.status
+
 config.status: configure configure.srv
 	$(SHELL) ./config.status --recheck
 
+# automatic rebuilding in automake-generated Makefiles requires
+# this rule in the toplevel Makefile, which, with GNU make, causes
+# the desired updates through the implicit regeneration of the Makefile
+# and all of its prerequisites.
+am--refresh:
+	@:
+
 force:
 
 version.c: Makefile $(srcdir)/../version.in
@@ -335,8 +410,13 @@ regcache_h = $(srcdir)/regcache.h
 signals_def = $(srcdir)/../../include/gdb/signals.def
 signals_h = $(srcdir)/../../include/gdb/signals.h $(signals_def)
 ptid_h = $(srcdir)/../common/ptid.h
+ax_h = $(srcdir)/ax.h
+agent_h = $(srcdir)/../common/agent.h
 linux_osdata_h = $(srcdir)/../common/linux-osdata.h
-server_h = $(srcdir)/server.h $(regcache_h) config.h $(srcdir)/target.h \
+vec_h = $(srcdir)/../common/vec.h
+# Since everything must include server.h, we make that depend on
+# generated files.
+server_h = $(srcdir)/server.h $(regcache_h) $(srcdir)/target.h \
 		$(srcdir)/mem-break.h $(srcdir)/../common/gdb_signals.h \
 		$(srcdir)/../common/common-utils.h \
 		$(srcdir)/../common/xml-utils.h \
@@ -344,9 +424,11 @@ server_h = $(srcdir)/server.h $(regcache_h) config.h $(srcdir)/target.h \
 		$(srcdir)/../common/gdb_assert.h \
 		$(srcdir)/../common/gdb_locale.h \
 		$(ptid_h) \
-		$(signals_h)
+		$(signals_h) \
+		$(generated_files)
 
-linux_low_h = $(srcdir)/linux-low.h
+gdbthread_h = $(srcdir)/gdbthread.h $(target_h) $(srcdir)/server.h
+linux_low_h = $(srcdir)/linux-low.h $(gdbthread_h)
 
 linux_ptrace_h = $(srcdir)/../common/linux-ptrace.h
 
@@ -367,10 +449,14 @@ IPAGENT_CFLAGS = $(CPPFLAGS) $(INTERNAL_CFLAGS) $(UST_CFLAGS) \
 	-fvisibility=hidden
 
 # In-process agent object rules
-tracepoint-ipa.o: tracepoint.c $(server_h) $(srcdir)/../common/ax.def
+ax-ipa.o: ax.c $(server_h) $(ax_h) $(srcdir)/../common/ax.def
+	$(CC) -c $(IPAGENT_CFLAGS) $(WARN_CFLAGS_NO_FORMAT) $< -o ax-ipa.o
+tracepoint-ipa.o: tracepoint.c $(server_h) ${ax_h}
 	$(CC) -c $(IPAGENT_CFLAGS) $< -o tracepoint-ipa.o
 utils-ipa.o: utils.c $(server_h)
 	$(CC) -c $(IPAGENT_CFLAGS) $< -o utils-ipa.o
+format-ipa.o: ../common/format.c $(server_h) ${ax_h}
+	$(CC) -c $(IPAGENT_CFLAGS) $< -o format-ipa.o
 common-utils-ipa.o: ../common/common-utils.c $(server_h)
 	$(CC) -c $(IPAGENT_CFLAGS) $< -o common-utils-ipa.o
 remote-utils-ipa.o: remote-utils.c $(server_h)
@@ -386,21 +472,24 @@ linux-amd64-ipa.o: linux-amd64-ipa.c $(server_h)
 amd64-linux-ipa.o : amd64-linux.c $(regdef_h)
 	$(CC) -c $(IPAGENT_CFLAGS) $< -o amd64-linux-ipa.o
 
+ax.o: ax.c $(server_h) $(ax_h) $(srcdir)/../common/ax.def
+	$(CC) -c $(CPPFLAGS) $(INTERNAL_CFLAGS) $(WARN_CFLAGS_NO_FORMAT) $<
 event-loop.o: event-loop.c $(server_h)
 hostio.o: hostio.c $(server_h)
 hostio-errno.o: hostio-errno.c $(server_h)
-inferiors.o: inferiors.c $(server_h)
-mem-break.o: mem-break.c $(server_h)
+inferiors.o: inferiors.c $(server_h) $(gdbthread_h)
+mem-break.o: mem-break.c $(server_h) $(ax_h)
 proc-service.o: proc-service.c $(server_h) $(gdb_proc_service_h)
-regcache.o: regcache.c $(server_h) $(regdef_h)
-remote-utils.o: remote-utils.c terminal.h $(server_h)
-server.o: server.c $(server_h)
-target.o: target.c $(server_h)
+regcache.o: regcache.c $(server_h) $(regdef_h) $(gdbthread_h)
+remote-utils.o: remote-utils.c terminal.h $(server_h) $(gdbthread_h)
+server.o: server.c $(server_h) $(agent_h) $(gdbthread_h)
+target.o: target.c $(server_h) 
 thread-db.o: thread-db.c $(server_h) $(linux_low_h) $(gdb_proc_service_h) \
 	$(gdb_thread_db_h)
-tracepoint.o: tracepoint.c $(server_h) $(srcdir)/../common/ax.def
+tracepoint.o: tracepoint.c $(server_h) $(ax_h) $(agent_h) $(gdbthread_h)
 utils.o: utils.c $(server_h)
 gdbreplay.o: gdbreplay.c config.h
+dll.o: dll.c $(server_h)
 
 signals.o: ../common/signals.c $(server_h) $(signals_def)
 	$(CC) -c $(CPPFLAGS) $(INTERNAL_CFLAGS) $< -DGDBSERVER
@@ -408,9 +497,15 @@ signals.o: ../common/signals.c $(server_h) $(signals_def)
 linux-procfs.o: ../common/linux-procfs.c $(server_h)
 	$(CC) -c $(CPPFLAGS) $(INTERNAL_CFLAGS) $< -DGDBSERVER
 
+linux-ptrace.o: ../common/linux-ptrace.c $(server_h)
+	$(CC) -c $(CPPFLAGS) $(INTERNAL_CFLAGS) $< -DGDBSERVER
+
 common-utils.o: ../common/common-utils.c $(server_h)
 	$(CC) -c $(CPPFLAGS) $(INTERNAL_CFLAGS) $< -DGDBSERVER
 
+vec.o: ../common/vec.c $(vec_h)
+	$(CC) -c $(CPPFLAGS) $(INTERNAL_CFLAGS) $< -DGDBSERVER
+
 xml-utils.o: ../common/xml-utils.c $(server_h)
 	$(CC) -c $(CPPFLAGS) $(INTERNAL_CFLAGS) $< -DGDBSERVER
 
@@ -423,13 +518,11 @@ ptid.o: ../common/ptid.c $(ptid_h)
 buffer.o: ../common/buffer.c $(server_h)
 	$(CC) -c $(CPPFLAGS) $(INTERNAL_CFLAGS) $< -DGDBSERVER
 
-# We build memmem.c without -Werror because this file is not under
-# our control.  On LynxOS, the compiler generates some warnings
-# because str-two-way.h uses a constant (MAX_SIZE) whose definition
-# makes it ambiguous whether it is signed or unsigned ("warning: this
-# decimal constant is unsigned only in ISO C90").
-memmem.o: ../gnulib/memmem.c
-	$(CC) -o memmem.o -c $(CPPFLAGS) $(INTERNAL_WARN_CFLAGS) $<
+format.o: ../common/format.c $(server_h)
+	$(CC) -c $(CPPFLAGS) $(INTERNAL_CFLAGS) $< -DGDBSERVER
+
+agent.o: ../common/agent.c $(server_h) $(agent_h)
+	$(CC) -c $(CPPFLAGS) $(INTERNAL_CFLAGS) $< -DGDBSERVER
 
 # We build vasprintf with -DHAVE_CONFIG_H because we want that unit to
 # include our config.h file.  Otherwise, some system headers do not get
@@ -447,7 +540,7 @@ i386-low.o: i386-low.c $(i386_low_h) $(server_h) $(target_h)
 i387-fp.o: i387-fp.c $(server_h)
 
 linux-low.o: linux-low.c $(linux_low_h) $(linux_ptrace_h) $(linux_procfs_h) \
-	$(server_h) $(linux_osdata_h)
+	$(server_h) $(linux_osdata_h) $(agent_h)
 	$(CC) -c $(CPPFLAGS) $(INTERNAL_CFLAGS) $< @USE_THREAD_DB@
 
 linux-arm-low.o: linux-arm-low.c $(linux_low_h) $(server_h) \
@@ -464,17 +557,18 @@ linux-s390-low.o: linux-s390-low.c $(linux_low_h) $(server_h)
 linux-sh-low.o: linux-sh-low.c $(linux_low_h) $(server_h)
 linux-tic6x-low.o: linux-tic6x-low.c $(linux_low_h) $(server_h)
 linux-x86-low.o: linux-x86-low.c $(linux_low_h) $(server_h) \
-	$(gdb_proc_service_h) $(i386_low_h)
+	$(gdb_proc_service_h) $(i386_low_h) $(agent_h)
 linux-xtensa-low.o: linux-xtensa-low.c xtensa-xtregs.c $(linux_low_h) $(server_h)
+linux-tile-low.o: linux-tile-low.c $(linux_low_h) $(server_h)
 
 lynx-low.o: lynx-low.c $(server_h) $(target_h) $(lynx_low_h)
 lynx-ppc-low.o: lynx-ppc-low.c $(server_h) $(lynx_low_h)
-nto-low.o: nto-low.c $(server_h) $(nto_low_h)
+nto-low.o: nto-low.c $(server_h) $(nto_low_h) $(gdbthread_h)
 nto-x86-low.o: nto-x86-low.c $(server_h) $(nto_low_h) $(regdef_h) $(regcache_h)
 
 win32_low_h = $(srcdir)/win32-low.h
 
-win32-low.o: win32-low.c $(win32_low_h) $(server_h) $(regdef_h) $(regcache_h)
+win32-low.o: win32-low.c $(win32_low_h) $(server_h) $(regdef_h) $(regcache_h) $(gdbthread_h)
 
 win32-arm-low.o: win32-arm-low.c $(win32_low_h) $(server_h)
 win32-i386-low.o: win32-i386-low.c $(win32_low_h) $(server_h) $(i386_low_h)
@@ -538,9 +632,15 @@ reg-cf.c : $(srcdir)/../regformats/reg-cf.dat $(regdat_sh)
 mips-linux.o : mips-linux.c $(regdef_h)
 mips-linux.c : $(srcdir)/../regformats/mips-linux.dat $(regdat_sh)
 	$(SHELL) $(regdat_sh) $(srcdir)/../regformats/mips-linux.dat mips-linux.c
+mips-dsp-linux.o : mips-dsp-linux.c $(regdef_h)
+mips-dsp-linux.c : $(srcdir)/../regformats/mips-dsp-linux.dat $(regdat_sh)
+	$(SHELL) $(regdat_sh) $(srcdir)/../regformats/mips-dsp-linux.dat mips-dsp-linux.c
 mips64-linux.o : mips64-linux.c $(regdef_h)
 mips64-linux.c : $(srcdir)/../regformats/mips64-linux.dat $(regdat_sh)
 	$(SHELL) $(regdat_sh) $(srcdir)/../regformats/mips64-linux.dat mips64-linux.c
+mips64-dsp-linux.o : mips64-dsp-linux.c $(regdef_h)
+mips64-dsp-linux.c : $(srcdir)/../regformats/mips64-dsp-linux.dat $(regdat_sh)
+	$(SHELL) $(regdat_sh) $(srcdir)/../regformats/mips64-dsp-linux.dat mips64-dsp-linux.c
 powerpc-32.o : powerpc-32.c $(regdef_h)
 powerpc-32.c : $(srcdir)/../regformats/rs6000/powerpc-32.dat $(regdat_sh)
 	$(SHELL) $(regdat_sh) $(srcdir)/../regformats/rs6000/powerpc-32.dat powerpc-32.c
@@ -648,7 +748,22 @@ amd64-avx.c : $(srcdir)/../regformats/i386/amd64-avx.dat $(regdat_sh)
 amd64-avx-linux.o : amd64-avx-linux.c $(regdef_h)
 amd64-avx-linux.c : $(srcdir)/../regformats/i386/amd64-avx-linux.dat $(regdat_sh)
 	$(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/amd64-avx-linux.dat amd64-avx-linux.c
+x32.o : x32.c $(regdef_h)
+x32.c : $(srcdir)/../regformats/i386/x32.dat $(regdat_sh)
+	$(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/x32.dat x32.c
+x32-linux.o : x32-linux.c $(regdef_h)
+x32-linux.c : $(srcdir)/../regformats/i386/x32-linux.dat $(regdat_sh)
+	$(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/x32-linux.dat x32-linux.c
+x32-avx.o : x32-avx.c $(regdef_h)
+x32-avx.c : $(srcdir)/../regformats/i386/x32-avx.dat $(regdat_sh)
+	$(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/x32-avx.dat x32-avx.c
+x32-avx-linux.o : x32-avx-linux.c $(regdef_h)
+x32-avx-linux.c : $(srcdir)/../regformats/i386/x32-avx-linux.dat $(regdat_sh)
+	$(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/x32-avx-linux.dat x32-avx-linux.c
 reg-xtensa.o : reg-xtensa.c $(regdef_h)
 reg-xtensa.c : $(srcdir)/../regformats/reg-xtensa.dat $(regdat_sh)
 	$(SHELL) $(regdat_sh) $(srcdir)/../regformats/reg-xtensa.dat reg-xtensa.c
+reg-tilegx.o : reg-tilegx.c $(regdef_h)
+reg-tilegx.c : $(srcdir)/../regformats/reg-tilegx.dat $(regdat_sh)
+	$(SHELL) $(regdat_sh) $(srcdir)/../regformats/reg-tilegx.dat reg-tilegx.c
 # This is the end of "Makefile.in".
diff --git a/gdb/gdbserver/acinclude.m4 b/gdb/gdbserver/acinclude.m4
index 87d0db5..037cc32 100644
--- a/gdb/gdbserver/acinclude.m4
+++ b/gdb/gdbserver/acinclude.m4
@@ -1,9 +1,29 @@
 dnl gdb/gdbserver/configure.in uses BFD_HAVE_SYS_PROCFS_TYPE.
 sinclude(../../bfd/bfd.m4)
 
+sinclude(../acx_configure_dir.m4)
+
 dnl This gets autoconf bugfixes
 sinclude(../../config/override.m4)
 
 dnl For ACX_PKGVERSION and ACX_BUGURL.
 sinclude(../../config/acx.m4)
 
+dnl Check for existence of a type $1 in libthread_db.h
+dnl Based on BFD_HAVE_SYS_PROCFS_TYPE in bfd/bfd.m4.
+
+AC_DEFUN([GDBSERVER_HAVE_THREAD_DB_TYPE],
+[AC_MSG_CHECKING([for $1 in thread_db.h])
+ AC_CACHE_VAL(gdbserver_cv_have_thread_db_type_$1,
+   [AC_TRY_COMPILE([
+#include <thread_db.h>],
+      [$1 avar],
+      gdbserver_cv_have_thread_db_type_$1=yes,
+      gdbserver_cv_have_thread_db_type_$1=no
+   )])
+ if test $gdbserver_cv_have_thread_db_type_$1 = yes; then
+   AC_DEFINE([HAVE_]translit($1, [a-z], [A-Z]), 1,
+	     [Define if <thread_db.h> has $1.])
+ fi
+ AC_MSG_RESULT($gdbserver_cv_have_thread_db_type_$1)
+])
diff --git a/gdb/gdbserver/aclocal.m4 b/gdb/gdbserver/aclocal.m4
index cdae6e7..7b546b7 100644
--- a/gdb/gdbserver/aclocal.m4
+++ b/gdb/gdbserver/aclocal.m4
@@ -11,4 +11,99 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless `enable' is passed literally.
+# For symmetry, `disable' may be passed as well.  Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+       [enable], [m4_define([am_maintainer_other], [disable])],
+       [disable], [m4_define([am_maintainer_other], [enable])],
+       [m4_define([am_maintainer_other], [enable])
+        m4_warn([syntax], [unexpected argument to AM@&t at _MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles])
+  dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+  AC_ARG_ENABLE([maintainer-mode],
+[  --][am_maintainer_other][-maintainer-mode  am_maintainer_other make rules and dependencies not useful
+			  (and sometimes confusing) to the casual installer],
+      [USE_MAINTAINER_MODE=$enableval],
+      [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+  AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+  MAINT=$MAINTAINER_MODE_TRUE
+  AC_SUBST([MAINT])dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
 m4_include([acinclude.m4])
diff --git a/gdb/gdbserver/ax.c b/gdb/gdbserver/ax.c
new file mode 100644
index 0000000..70e9322
--- /dev/null
+++ b/gdb/gdbserver/ax.c
@@ -0,0 +1,1346 @@
+/* Agent expression code for remote server.
+   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "server.h"
+#include "ax.h"
+#include "format.h"
+
+static void ax_vdebug (const char *, ...) ATTR_FORMAT (printf, 1, 2);
+
+#ifdef IN_PROCESS_AGENT
+int debug_agent = 0;
+#endif
+
+static void
+ax_vdebug (const char *fmt, ...)
+{
+  char buf[1024];
+  va_list ap;
+
+  va_start (ap, fmt);
+  vsprintf (buf, fmt, ap);
+  fprintf (stderr, PROG "/ax: %s\n", buf);
+  va_end (ap);
+}
+
+#define ax_debug_1(level, fmt, args...)	\
+  do {						\
+    if (level <= debug_threads)			\
+      ax_vdebug ((fmt), ##args);		\
+  } while (0)
+
+#define ax_debug(FMT, args...)		\
+  ax_debug_1 (1, FMT, ##args)
+
+/* This enum must exactly match what is documented in
+   gdb/doc/agentexpr.texi, including all the numerical values.  */
+
+enum gdb_agent_op
+  {
+#define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE)  \
+    gdb_agent_op_ ## NAME = VALUE,
+#include "ax.def"
+#undef DEFOP
+    gdb_agent_op_last
+  };
+
+static const char *gdb_agent_op_names [gdb_agent_op_last] =
+  {
+    "?undef?"
+#define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE)  , # NAME
+#include "ax.def"
+#undef DEFOP
+  };
+
+static const unsigned char gdb_agent_op_sizes [gdb_agent_op_last] =
+  {
+    0
+#define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE)  , SIZE
+#include "ax.def"
+#undef DEFOP
+  };
+
+/* A wrapper for gdb_agent_op_names that does some bounds-checking.  */
+
+static const char *
+gdb_agent_op_name (int op)
+{
+  if (op < 0 || op >= gdb_agent_op_last || gdb_agent_op_names[op] == NULL)
+    return "?undef?";
+  return gdb_agent_op_names[op];
+}
+
+#ifndef IN_PROCESS_AGENT
+
+/* The packet form of an agent expression consists of an 'X', number
+   of bytes in expression, a comma, and then the bytes.  */
+
+struct agent_expr *
+gdb_parse_agent_expr (char **actparm)
+{
+  char *act = *actparm;
+  ULONGEST xlen;
+  struct agent_expr *aexpr;
+
+  ++act;  /* skip the X */
+  act = unpack_varlen_hex (act, &xlen);
+  ++act;  /* skip a comma */
+  aexpr = xmalloc (sizeof (struct agent_expr));
+  aexpr->length = xlen;
+  aexpr->bytes = xmalloc (xlen);
+  convert_ascii_to_int (act, aexpr->bytes, xlen);
+  *actparm = act + (xlen * 2);
+  return aexpr;
+}
+
+/* Convert the bytes of an agent expression back into hex digits, so
+   they can be printed or uploaded.  This allocates the buffer,
+   callers should free when they are done with it.  */
+
+char *
+gdb_unparse_agent_expr (struct agent_expr *aexpr)
+{
+  char *rslt;
+
+  rslt = xmalloc (2 * aexpr->length + 1);
+  convert_int_to_ascii (aexpr->bytes, rslt, aexpr->length);
+  return rslt;
+}
+
+/* Bytecode compilation.  */
+
+CORE_ADDR current_insn_ptr;
+
+int emit_error;
+
+struct bytecode_address
+{
+  int pc;
+  CORE_ADDR address;
+  int goto_pc;
+  /* Offset and size of field to be modified in the goto block.  */
+  int from_offset, from_size;
+  struct bytecode_address *next;
+} *bytecode_address_table;
+
+void
+emit_prologue (void)
+{
+  target_emit_ops ()->emit_prologue ();
+}
+
+void
+emit_epilogue (void)
+{
+  target_emit_ops ()->emit_epilogue ();
+}
+
+static void
+emit_add (void)
+{
+  target_emit_ops ()->emit_add ();
+}
+
+static void
+emit_sub (void)
+{
+  target_emit_ops ()->emit_sub ();
+}
+
+static void
+emit_mul (void)
+{
+  target_emit_ops ()->emit_mul ();
+}
+
+static void
+emit_lsh (void)
+{
+  target_emit_ops ()->emit_lsh ();
+}
+
+static void
+emit_rsh_signed (void)
+{
+  target_emit_ops ()->emit_rsh_signed ();
+}
+
+static void
+emit_rsh_unsigned (void)
+{
+  target_emit_ops ()->emit_rsh_unsigned ();
+}
+
+static void
+emit_ext (int arg)
+{
+  target_emit_ops ()->emit_ext (arg);
+}
+
+static void
+emit_log_not (void)
+{
+  target_emit_ops ()->emit_log_not ();
+}
+
+static void
+emit_bit_and (void)
+{
+  target_emit_ops ()->emit_bit_and ();
+}
+
+static void
+emit_bit_or (void)
+{
+  target_emit_ops ()->emit_bit_or ();
+}
+
+static void
+emit_bit_xor (void)
+{
+  target_emit_ops ()->emit_bit_xor ();
+}
+
+static void
+emit_bit_not (void)
+{
+  target_emit_ops ()->emit_bit_not ();
+}
+
+static void
+emit_equal (void)
+{
+  target_emit_ops ()->emit_equal ();
+}
+
+static void
+emit_less_signed (void)
+{
+  target_emit_ops ()->emit_less_signed ();
+}
+
+static void
+emit_less_unsigned (void)
+{
+  target_emit_ops ()->emit_less_unsigned ();
+}
+
+static void
+emit_ref (int size)
+{
+  target_emit_ops ()->emit_ref (size);
+}
+
+static void
+emit_if_goto (int *offset_p, int *size_p)
+{
+  target_emit_ops ()->emit_if_goto (offset_p, size_p);
+}
+
+static void
+emit_goto (int *offset_p, int *size_p)
+{
+  target_emit_ops ()->emit_goto (offset_p, size_p);
+}
+
+static void
+write_goto_address (CORE_ADDR from, CORE_ADDR to, int size)
+{
+  target_emit_ops ()->write_goto_address (from, to, size);
+}
+
+static void
+emit_const (LONGEST num)
+{
+  target_emit_ops ()->emit_const (num);
+}
+
+static void
+emit_reg (int reg)
+{
+  target_emit_ops ()->emit_reg (reg);
+}
+
+static void
+emit_pop (void)
+{
+  target_emit_ops ()->emit_pop ();
+}
+
+static void
+emit_stack_flush (void)
+{
+  target_emit_ops ()->emit_stack_flush ();
+}
+
+static void
+emit_zero_ext (int arg)
+{
+  target_emit_ops ()->emit_zero_ext (arg);
+}
+
+static void
+emit_swap (void)
+{
+  target_emit_ops ()->emit_swap ();
+}
+
+static void
+emit_stack_adjust (int n)
+{
+  target_emit_ops ()->emit_stack_adjust (n);
+}
+
+/* FN's prototype is `LONGEST(*fn)(int)'.  */
+
+static void
+emit_int_call_1 (CORE_ADDR fn, int arg1)
+{
+  target_emit_ops ()->emit_int_call_1 (fn, arg1);
+}
+
+/* FN's prototype is `void(*fn)(int,LONGEST)'.  */
+
+static void
+emit_void_call_2 (CORE_ADDR fn, int arg1)
+{
+  target_emit_ops ()->emit_void_call_2 (fn, arg1);
+}
+
+static void
+emit_eq_goto (int *offset_p, int *size_p)
+{
+  target_emit_ops ()->emit_eq_goto (offset_p, size_p);
+}
+
+static void
+emit_ne_goto (int *offset_p, int *size_p)
+{
+  target_emit_ops ()->emit_ne_goto (offset_p, size_p);
+}
+
+static void
+emit_lt_goto (int *offset_p, int *size_p)
+{
+  target_emit_ops ()->emit_lt_goto (offset_p, size_p);
+}
+
+static void
+emit_ge_goto (int *offset_p, int *size_p)
+{
+  target_emit_ops ()->emit_ge_goto (offset_p, size_p);
+}
+
+static void
+emit_gt_goto (int *offset_p, int *size_p)
+{
+  target_emit_ops ()->emit_gt_goto (offset_p, size_p);
+}
+
+static void
+emit_le_goto (int *offset_p, int *size_p)
+{
+  target_emit_ops ()->emit_le_goto (offset_p, size_p);
+}
+
+/* Scan an agent expression for any evidence that the given PC is the
+   target of a jump bytecode in the expression.  */
+
+int
+is_goto_target (struct agent_expr *aexpr, int pc)
+{
+  int i;
+  unsigned char op;
+
+  for (i = 0; i < aexpr->length; i += 1 + gdb_agent_op_sizes[op])
+    {
+      op = aexpr->bytes[i];
+
+      if (op == gdb_agent_op_goto || op == gdb_agent_op_if_goto)
+	{
+	  int target = (aexpr->bytes[i + 1] << 8) + aexpr->bytes[i + 2];
+	  if (target == pc)
+	    return 1;
+	}
+    }
+
+  return 0;
+}
+
+/* Given an agent expression, turn it into native code.  */
+
+enum eval_result_type
+compile_bytecodes (struct agent_expr *aexpr)
+{
+  int pc = 0;
+  int done = 0;
+  unsigned char op, next_op;
+  int arg;
+  /* This is only used to build 64-bit value for constants.  */
+  ULONGEST top;
+  struct bytecode_address *aentry, *aentry2;
+
+#define UNHANDLED					\
+  do							\
+    {							\
+      ax_debug ("Cannot compile op 0x%x\n", op);	\
+      return expr_eval_unhandled_opcode;		\
+    } while (0)
+
+  if (aexpr->length == 0)
+    {
+      ax_debug ("empty agent expression\n");
+      return expr_eval_empty_expression;
+    }
+
+  bytecode_address_table = NULL;
+
+  while (!done)
+    {
+      op = aexpr->bytes[pc];
+
+      ax_debug ("About to compile op 0x%x, pc=%d\n", op, pc);
+
+      /* Record the compiled-code address of the bytecode, for use by
+	 jump instructions.  */
+      aentry = xmalloc (sizeof (struct bytecode_address));
+      aentry->pc = pc;
+      aentry->address = current_insn_ptr;
+      aentry->goto_pc = -1;
+      aentry->from_offset = aentry->from_size = 0;
+      aentry->next = bytecode_address_table;
+      bytecode_address_table = aentry;
+
+      ++pc;
+
+      emit_error = 0;
+
+      switch (op)
+	{
+	case gdb_agent_op_add:
+	  emit_add ();
+	  break;
+
+	case gdb_agent_op_sub:
+	  emit_sub ();
+	  break;
+
+	case gdb_agent_op_mul:
+	  emit_mul ();
+	  break;
+
+	case gdb_agent_op_div_signed:
+	  UNHANDLED;
+	  break;
+
+	case gdb_agent_op_div_unsigned:
+	  UNHANDLED;
+	  break;
+
+	case gdb_agent_op_rem_signed:
+	  UNHANDLED;
+	  break;
+
+	case gdb_agent_op_rem_unsigned:
+	  UNHANDLED;
+	  break;
+
+	case gdb_agent_op_lsh:
+	  emit_lsh ();
+	  break;
+
+	case gdb_agent_op_rsh_signed:
+	  emit_rsh_signed ();
+	  break;
+
+	case gdb_agent_op_rsh_unsigned:
+	  emit_rsh_unsigned ();
+	  break;
+
+	case gdb_agent_op_trace:
+	  UNHANDLED;
+	  break;
+
+	case gdb_agent_op_trace_quick:
+	  UNHANDLED;
+	  break;
+
+	case gdb_agent_op_log_not:
+	  emit_log_not ();
+	  break;
+
+	case gdb_agent_op_bit_and:
+	  emit_bit_and ();
+	  break;
+
+	case gdb_agent_op_bit_or:
+	  emit_bit_or ();
+	  break;
+
+	case gdb_agent_op_bit_xor:
+	  emit_bit_xor ();
+	  break;
+
+	case gdb_agent_op_bit_not:
+	  emit_bit_not ();
+	  break;
+
+	case gdb_agent_op_equal:
+	  next_op = aexpr->bytes[pc];
+	  if (next_op == gdb_agent_op_if_goto
+	      && !is_goto_target (aexpr, pc)
+	      && target_emit_ops ()->emit_eq_goto)
+	    {
+	      ax_debug ("Combining equal & if_goto");
+	      pc += 1;
+	      aentry->pc = pc;
+	      arg = aexpr->bytes[pc++];
+	      arg = (arg << 8) + aexpr->bytes[pc++];
+	      aentry->goto_pc = arg;
+	      emit_eq_goto (&(aentry->from_offset), &(aentry->from_size));
+	    }
+	  else if (next_op == gdb_agent_op_log_not
+		   && (aexpr->bytes[pc + 1] == gdb_agent_op_if_goto)
+		   && !is_goto_target (aexpr, pc + 1)
+		   && target_emit_ops ()->emit_ne_goto)
+	    {
+	      ax_debug ("Combining equal & log_not & if_goto");
+	      pc += 2;
+	      aentry->pc = pc;
+	      arg = aexpr->bytes[pc++];
+	      arg = (arg << 8) + aexpr->bytes[pc++];
+	      aentry->goto_pc = arg;
+	      emit_ne_goto (&(aentry->from_offset), &(aentry->from_size));
+	    }
+	  else
+	    emit_equal ();
+	  break;
+
+	case gdb_agent_op_less_signed:
+	  next_op = aexpr->bytes[pc];
+	  if (next_op == gdb_agent_op_if_goto
+	      && !is_goto_target (aexpr, pc))
+	    {
+	      ax_debug ("Combining less_signed & if_goto");
+	      pc += 1;
+	      aentry->pc = pc;
+	      arg = aexpr->bytes[pc++];
+	      arg = (arg << 8) + aexpr->bytes[pc++];
+	      aentry->goto_pc = arg;
+	      emit_lt_goto (&(aentry->from_offset), &(aentry->from_size));
+	    }
+	  else if (next_op == gdb_agent_op_log_not
+		   && !is_goto_target (aexpr, pc)
+		   && (aexpr->bytes[pc + 1] == gdb_agent_op_if_goto)
+		   && !is_goto_target (aexpr, pc + 1))
+	    {
+	      ax_debug ("Combining less_signed & log_not & if_goto");
+	      pc += 2;
+	      aentry->pc = pc;
+	      arg = aexpr->bytes[pc++];
+	      arg = (arg << 8) + aexpr->bytes[pc++];
+	      aentry->goto_pc = arg;
+	      emit_ge_goto (&(aentry->from_offset), &(aentry->from_size));
+	    }
+	  else
+	    emit_less_signed ();
+	  break;
+
+	case gdb_agent_op_less_unsigned:
+	  emit_less_unsigned ();
+	  break;
+
+	case gdb_agent_op_ext:
+	  arg = aexpr->bytes[pc++];
+	  if (arg < (sizeof (LONGEST) * 8))
+	    emit_ext (arg);
+	  break;
+
+	case gdb_agent_op_ref8:
+	  emit_ref (1);
+	  break;
+
+	case gdb_agent_op_ref16:
+	  emit_ref (2);
+	  break;
+
+	case gdb_agent_op_ref32:
+	  emit_ref (4);
+	  break;
+
+	case gdb_agent_op_ref64:
+	  emit_ref (8);
+	  break;
+
+	case gdb_agent_op_if_goto:
+	  arg = aexpr->bytes[pc++];
+	  arg = (arg << 8) + aexpr->bytes[pc++];
+	  aentry->goto_pc = arg;
+	  emit_if_goto (&(aentry->from_offset), &(aentry->from_size));
+	  break;
+
+	case gdb_agent_op_goto:
+	  arg = aexpr->bytes[pc++];
+	  arg = (arg << 8) + aexpr->bytes[pc++];
+	  aentry->goto_pc = arg;
+	  emit_goto (&(aentry->from_offset), &(aentry->from_size));
+	  break;
+
+	case gdb_agent_op_const8:
+	  emit_stack_flush ();
+	  top = aexpr->bytes[pc++];
+	  emit_const (top);
+	  break;
+
+	case gdb_agent_op_const16:
+	  emit_stack_flush ();
+	  top = aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  emit_const (top);
+	  break;
+
+	case gdb_agent_op_const32:
+	  emit_stack_flush ();
+	  top = aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  emit_const (top);
+	  break;
+
+	case gdb_agent_op_const64:
+	  emit_stack_flush ();
+	  top = aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  emit_const (top);
+	  break;
+
+	case gdb_agent_op_reg:
+	  emit_stack_flush ();
+	  arg = aexpr->bytes[pc++];
+	  arg = (arg << 8) + aexpr->bytes[pc++];
+	  emit_reg (arg);
+	  break;
+
+	case gdb_agent_op_end:
+	  ax_debug ("At end of expression\n");
+
+	  /* Assume there is one stack element left, and that it is
+	     cached in "top" where emit_epilogue can get to it.  */
+	  emit_stack_adjust (1);
+
+	  done = 1;
+	  break;
+
+	case gdb_agent_op_dup:
+	  /* In our design, dup is equivalent to stack flushing.  */
+	  emit_stack_flush ();
+	  break;
+
+	case gdb_agent_op_pop:
+	  emit_pop ();
+	  break;
+
+	case gdb_agent_op_zero_ext:
+	  arg = aexpr->bytes[pc++];
+	  if (arg < (sizeof (LONGEST) * 8))
+	    emit_zero_ext (arg);
+	  break;
+
+	case gdb_agent_op_swap:
+	  next_op = aexpr->bytes[pc];
+	  /* Detect greater-than comparison sequences.  */
+	  if (next_op == gdb_agent_op_less_signed
+	      && !is_goto_target (aexpr, pc)
+	      && (aexpr->bytes[pc + 1] == gdb_agent_op_if_goto)
+	      && !is_goto_target (aexpr, pc + 1))
+	    {
+	      ax_debug ("Combining swap & less_signed & if_goto");
+	      pc += 2;
+	      aentry->pc = pc;
+	      arg = aexpr->bytes[pc++];
+	      arg = (arg << 8) + aexpr->bytes[pc++];
+	      aentry->goto_pc = arg;
+	      emit_gt_goto (&(aentry->from_offset), &(aentry->from_size));
+	    }
+	  else if (next_op == gdb_agent_op_less_signed
+		   && !is_goto_target (aexpr, pc)
+		   && (aexpr->bytes[pc + 1] == gdb_agent_op_log_not)
+		   && !is_goto_target (aexpr, pc + 1)
+		   && (aexpr->bytes[pc + 2] == gdb_agent_op_if_goto)
+		   && !is_goto_target (aexpr, pc + 2))
+	    {
+	      ax_debug ("Combining swap & less_signed & log_not & if_goto");
+	      pc += 3;
+	      aentry->pc = pc;
+	      arg = aexpr->bytes[pc++];
+	      arg = (arg << 8) + aexpr->bytes[pc++];
+	      aentry->goto_pc = arg;
+	      emit_le_goto (&(aentry->from_offset), &(aentry->from_size));
+	    }
+	  else
+	    emit_swap ();
+	  break;
+
+	case gdb_agent_op_getv:
+	  emit_stack_flush ();
+	  arg = aexpr->bytes[pc++];
+	  arg = (arg << 8) + aexpr->bytes[pc++];
+	  emit_int_call_1 (get_get_tsv_func_addr (),
+			   arg);
+	  break;
+
+	case gdb_agent_op_setv:
+	  arg = aexpr->bytes[pc++];
+	  arg = (arg << 8) + aexpr->bytes[pc++];
+	  emit_void_call_2 (get_set_tsv_func_addr (),
+			    arg);
+	  break;
+
+	case gdb_agent_op_tracev:
+	  UNHANDLED;
+	  break;
+
+	  /* GDB never (currently) generates any of these ops.  */
+	case gdb_agent_op_float:
+	case gdb_agent_op_ref_float:
+	case gdb_agent_op_ref_double:
+	case gdb_agent_op_ref_long_double:
+	case gdb_agent_op_l_to_d:
+	case gdb_agent_op_d_to_l:
+	case gdb_agent_op_trace16:
+	  UNHANDLED;
+	  break;
+
+	default:
+	  ax_debug ("Agent expression op 0x%x not recognized\n", op);
+	  /* Don't struggle on, things will just get worse.  */
+	  return expr_eval_unrecognized_opcode;
+	}
+
+      /* This catches errors that occur in target-specific code
+	 emission.  */
+      if (emit_error)
+	{
+	  ax_debug ("Error %d while emitting code for %s\n",
+		    emit_error, gdb_agent_op_name (op));
+	  return expr_eval_unhandled_opcode;
+	}
+
+      ax_debug ("Op %s compiled\n", gdb_agent_op_name (op));
+    }
+
+  /* Now fill in real addresses as goto destinations.  */
+  for (aentry = bytecode_address_table; aentry; aentry = aentry->next)
+    {
+      int written = 0;
+
+      if (aentry->goto_pc < 0)
+	continue;
+
+      /* Find the location that we are going to, and call back into
+	 target-specific code to write the actual address or
+	 displacement.  */
+      for (aentry2 = bytecode_address_table; aentry2; aentry2 = aentry2->next)
+	{
+	  if (aentry2->pc == aentry->goto_pc)
+	    {
+	      ax_debug ("Want to jump from %s to %s\n",
+			paddress (aentry->address),
+			paddress (aentry2->address));
+	      write_goto_address (aentry->address + aentry->from_offset,
+				  aentry2->address, aentry->from_size);
+	      written = 1;
+	      break;
+	    }
+	}
+
+      /* Error out if we didn't find a destination.  */
+      if (!written)
+	{
+	  ax_debug ("Destination of goto %d not found\n",
+		    aentry->goto_pc);
+	  return expr_eval_invalid_goto;
+	}
+    }
+
+  return expr_eval_no_error;
+}
+
+#endif
+
+/* Make printf-type calls using arguments supplied from the host.  We
+   need to parse the format string ourselves, and call the formatting
+   function with one argument at a time, partly because there is no
+   safe portable way to construct a varargs call, and partly to serve
+   as a security barrier against bad format strings that might get
+   in.  */
+
+static void
+ax_printf (CORE_ADDR fn, CORE_ADDR chan, char *format,
+	   int nargs, ULONGEST *args)
+{
+  char *f = format;
+  struct format_piece *fpieces;
+  int i, fp;
+  char *current_substring;
+  int nargs_wanted;
+
+  ax_debug ("Printf of \"%s\" with %d args", format, nargs);
+
+  fpieces = parse_format_string (&f);
+
+  nargs_wanted = 0;
+  for (fp = 0; fpieces[fp].string != NULL; fp++)
+    if (fpieces[fp].argclass != literal_piece)
+      ++nargs_wanted;
+
+  if (nargs != nargs_wanted)
+    error (_("Wrong number of arguments for specified format-string"));
+
+  i = 0;
+  for (fp = 0; fpieces[fp].string != NULL; fp++)
+    {
+      current_substring = fpieces[fp].string;
+      ax_debug ("current substring is '%s', class is %d",
+		current_substring, fpieces[fp].argclass);
+      switch (fpieces[fp].argclass)
+	{
+	case string_arg:
+	  {
+	    gdb_byte *str;
+	    CORE_ADDR tem;
+	    int j;
+
+	    tem = args[i];
+
+	    /* This is a %s argument.  Find the length of the string.  */
+	    for (j = 0;; j++)
+	      {
+		gdb_byte c;
+
+		read_inferior_memory (tem + j, &c, 1);
+		if (c == 0)
+		  break;
+	      }
+
+	      /* Copy the string contents into a string inside GDB.  */
+	      str = (gdb_byte *) alloca (j + 1);
+	      if (j != 0)
+		read_inferior_memory (tem, str, j);
+	      str[j] = 0;
+
+              printf (current_substring, (char *) str);
+	    }
+	    break;
+
+	  case long_long_arg:
+#if defined (CC_HAS_LONG_LONG) && defined (PRINTF_HAS_LONG_LONG)
+	    {
+	      long long val = args[i];
+
+              printf (current_substring, val);
+	      break;
+	    }
+#else
+	    error (_("long long not supported in agent printf"));
+#endif
+	case int_arg:
+	  {
+	    int val = args[i];
+
+	    printf (current_substring, val);
+	    break;
+	  }
+
+	case long_arg:
+	  {
+	    long val = args[i];
+
+	    printf (current_substring, val);
+	    break;
+	  }
+
+	case literal_piece:
+	  /* Print a portion of the format string that has no
+	     directives.  Note that this will not include any
+	     ordinary %-specs, but it might include "%%".  That is
+	     why we use printf_filtered and not puts_filtered here.
+	     Also, we pass a dummy argument because some platforms
+	     have modified GCC to include -Wformat-security by
+	     default, which will warn here if there is no
+	     argument.  */
+	  printf (current_substring, 0);
+	  break;
+
+	default:
+	  error (_("Format directive in '%s' not supported in agent printf"),
+		 current_substring);
+	}
+
+      /* Maybe advance to the next argument.  */
+      if (fpieces[fp].argclass != literal_piece)
+	++i;
+    }
+
+  free_format_pieces (fpieces);
+}
+
+/* The agent expression evaluator, as specified by the GDB docs. It
+   returns 0 if everything went OK, and a nonzero error code
+   otherwise.  */
+
+enum eval_result_type
+gdb_eval_agent_expr (struct regcache *regcache,
+		     struct traceframe *tframe,
+		     struct agent_expr *aexpr,
+		     ULONGEST *rslt)
+{
+  int pc = 0;
+#define STACK_MAX 100
+  ULONGEST stack[STACK_MAX], top;
+  int sp = 0;
+  unsigned char op;
+  int arg;
+
+  /* This union is a convenient way to convert representations.  For
+     now, assume a standard architecture where the hardware integer
+     types have 8, 16, 32, 64 bit types.  A more robust solution would
+     be to import stdint.h from gnulib.  */
+  union
+  {
+    union
+    {
+      unsigned char bytes[1];
+      unsigned char val;
+    } u8;
+    union
+    {
+      unsigned char bytes[2];
+      unsigned short val;
+    } u16;
+    union
+    {
+      unsigned char bytes[4];
+      unsigned int val;
+    } u32;
+    union
+    {
+      unsigned char bytes[8];
+      ULONGEST val;
+    } u64;
+  } cnv;
+
+  if (aexpr->length == 0)
+    {
+      ax_debug ("empty agent expression");
+      return expr_eval_empty_expression;
+    }
+
+  /* Cache the stack top in its own variable. Much of the time we can
+     operate on this variable, rather than dinking with the stack. It
+     needs to be copied to the stack when sp changes.  */
+  top = 0;
+
+  while (1)
+    {
+      op = aexpr->bytes[pc++];
+
+      ax_debug ("About to interpret byte 0x%x", op);
+
+      switch (op)
+	{
+	case gdb_agent_op_add:
+	  top += stack[--sp];
+	  break;
+
+	case gdb_agent_op_sub:
+	  top = stack[--sp] - top;
+	  break;
+
+	case gdb_agent_op_mul:
+	  top *= stack[--sp];
+	  break;
+
+	case gdb_agent_op_div_signed:
+	  if (top == 0)
+	    {
+	      ax_debug ("Attempted to divide by zero");
+	      return expr_eval_divide_by_zero;
+	    }
+	  top = ((LONGEST) stack[--sp]) / ((LONGEST) top);
+	  break;
+
+	case gdb_agent_op_div_unsigned:
+	  if (top == 0)
+	    {
+	      ax_debug ("Attempted to divide by zero");
+	      return expr_eval_divide_by_zero;
+	    }
+	  top = stack[--sp] / top;
+	  break;
+
+	case gdb_agent_op_rem_signed:
+	  if (top == 0)
+	    {
+	      ax_debug ("Attempted to divide by zero");
+	      return expr_eval_divide_by_zero;
+	    }
+	  top = ((LONGEST) stack[--sp]) % ((LONGEST) top);
+	  break;
+
+	case gdb_agent_op_rem_unsigned:
+	  if (top == 0)
+	    {
+	      ax_debug ("Attempted to divide by zero");
+	      return expr_eval_divide_by_zero;
+	    }
+	  top = stack[--sp] % top;
+	  break;
+
+	case gdb_agent_op_lsh:
+	  top = stack[--sp] << top;
+	  break;
+
+	case gdb_agent_op_rsh_signed:
+	  top = ((LONGEST) stack[--sp]) >> top;
+	  break;
+
+	case gdb_agent_op_rsh_unsigned:
+	  top = stack[--sp] >> top;
+	  break;
+
+	case gdb_agent_op_trace:
+	  agent_mem_read (tframe,
+			  NULL, (CORE_ADDR) stack[--sp], (ULONGEST) top);
+	  if (--sp >= 0)
+	    top = stack[sp];
+	  break;
+
+	case gdb_agent_op_trace_quick:
+	  arg = aexpr->bytes[pc++];
+	  agent_mem_read (tframe, NULL, (CORE_ADDR) top, (ULONGEST) arg);
+	  break;
+
+	case gdb_agent_op_log_not:
+	  top = !top;
+	  break;
+
+	case gdb_agent_op_bit_and:
+	  top &= stack[--sp];
+	  break;
+
+	case gdb_agent_op_bit_or:
+	  top |= stack[--sp];
+	  break;
+
+	case gdb_agent_op_bit_xor:
+	  top ^= stack[--sp];
+	  break;
+
+	case gdb_agent_op_bit_not:
+	  top = ~top;
+	  break;
+
+	case gdb_agent_op_equal:
+	  top = (stack[--sp] == top);
+	  break;
+
+	case gdb_agent_op_less_signed:
+	  top = (((LONGEST) stack[--sp]) < ((LONGEST) top));
+	  break;
+
+	case gdb_agent_op_less_unsigned:
+	  top = (stack[--sp] < top);
+	  break;
+
+	case gdb_agent_op_ext:
+	  arg = aexpr->bytes[pc++];
+	  if (arg < (sizeof (LONGEST) * 8))
+	    {
+	      LONGEST mask = 1 << (arg - 1);
+	      top &= ((LONGEST) 1 << arg) - 1;
+	      top = (top ^ mask) - mask;
+	    }
+	  break;
+
+	case gdb_agent_op_ref8:
+	  agent_mem_read (tframe, cnv.u8.bytes, (CORE_ADDR) top, 1);
+	  top = cnv.u8.val;
+	  break;
+
+	case gdb_agent_op_ref16:
+	  agent_mem_read (tframe, cnv.u16.bytes, (CORE_ADDR) top, 2);
+	  top = cnv.u16.val;
+	  break;
+
+	case gdb_agent_op_ref32:
+	  agent_mem_read (tframe, cnv.u32.bytes, (CORE_ADDR) top, 4);
+	  top = cnv.u32.val;
+	  break;
+
+	case gdb_agent_op_ref64:
+	  agent_mem_read (tframe, cnv.u64.bytes, (CORE_ADDR) top, 8);
+	  top = cnv.u64.val;
+	  break;
+
+	case gdb_agent_op_if_goto:
+	  if (top)
+	    pc = (aexpr->bytes[pc] << 8) + (aexpr->bytes[pc + 1]);
+	  else
+	    pc += 2;
+	  if (--sp >= 0)
+	    top = stack[sp];
+	  break;
+
+	case gdb_agent_op_goto:
+	  pc = (aexpr->bytes[pc] << 8) + (aexpr->bytes[pc + 1]);
+	  break;
+
+	case gdb_agent_op_const8:
+	  /* Flush the cached stack top.  */
+	  stack[sp++] = top;
+	  top = aexpr->bytes[pc++];
+	  break;
+
+	case gdb_agent_op_const16:
+	  /* Flush the cached stack top.  */
+	  stack[sp++] = top;
+	  top = aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  break;
+
+	case gdb_agent_op_const32:
+	  /* Flush the cached stack top.  */
+	  stack[sp++] = top;
+	  top = aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  break;
+
+	case gdb_agent_op_const64:
+	  /* Flush the cached stack top.  */
+	  stack[sp++] = top;
+	  top = aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  top = (top << 8) + aexpr->bytes[pc++];
+	  break;
+
+	case gdb_agent_op_reg:
+	  /* Flush the cached stack top.  */
+	  stack[sp++] = top;
+	  arg = aexpr->bytes[pc++];
+	  arg = (arg << 8) + aexpr->bytes[pc++];
+	  {
+	    int regnum = arg;
+
+	    switch (register_size (regnum))
+	      {
+	      case 8:
+		collect_register (regcache, regnum, cnv.u64.bytes);
+		top = cnv.u64.val;
+		break;
+	      case 4:
+		collect_register (regcache, regnum, cnv.u32.bytes);
+		top = cnv.u32.val;
+		break;
+	      case 2:
+		collect_register (regcache, regnum, cnv.u16.bytes);
+		top = cnv.u16.val;
+		break;
+	      case 1:
+		collect_register (regcache, regnum, cnv.u8.bytes);
+		top = cnv.u8.val;
+		break;
+	      default:
+		internal_error (__FILE__, __LINE__,
+				"unhandled register size");
+	      }
+	  }
+	  break;
+
+	case gdb_agent_op_end:
+	  ax_debug ("At end of expression, sp=%d, stack top cache=0x%s",
+		    sp, pulongest (top));
+	  if (rslt)
+	    {
+	      if (sp <= 0)
+		{
+		  /* This should be an error */
+		  ax_debug ("Stack is empty, nothing to return");
+		  return expr_eval_empty_stack;
+		}
+	      *rslt = top;
+	    }
+	  return expr_eval_no_error;
+
+	case gdb_agent_op_dup:
+	  stack[sp++] = top;
+	  break;
+
+	case gdb_agent_op_pop:
+	  if (--sp >= 0)
+	    top = stack[sp];
+	  break;
+
+	case gdb_agent_op_pick:
+	  arg = aexpr->bytes[pc++];
+	  stack[sp] = top;
+	  top = stack[sp - arg];
+	  ++sp;
+	  break;
+
+	case gdb_agent_op_rot:
+	  {
+	    ULONGEST tem = stack[sp - 1];
+
+	    stack[sp - 1] = stack[sp - 2];
+	    stack[sp - 2] = top;
+	    top = tem;
+	  }
+	  break;
+
+	case gdb_agent_op_zero_ext:
+	  arg = aexpr->bytes[pc++];
+	  if (arg < (sizeof (LONGEST) * 8))
+	    top &= ((LONGEST) 1 << arg) - 1;
+	  break;
+
+	case gdb_agent_op_swap:
+	  /* Interchange top two stack elements, making sure top gets
+	     copied back onto stack.  */
+	  stack[sp] = top;
+	  top = stack[sp - 1];
+	  stack[sp - 1] = stack[sp];
+	  break;
+
+	case gdb_agent_op_getv:
+	  /* Flush the cached stack top.  */
+	  stack[sp++] = top;
+	  arg = aexpr->bytes[pc++];
+	  arg = (arg << 8) + aexpr->bytes[pc++];
+	  top = agent_get_trace_state_variable_value (arg);
+	  break;
+
+	case gdb_agent_op_setv:
+	  arg = aexpr->bytes[pc++];
+	  arg = (arg << 8) + aexpr->bytes[pc++];
+	  agent_set_trace_state_variable_value (arg, top);
+	  /* Note that we leave the value on the stack, for the
+	     benefit of later/enclosing expressions.  */
+	  break;
+
+	case gdb_agent_op_tracev:
+	  arg = aexpr->bytes[pc++];
+	  arg = (arg << 8) + aexpr->bytes[pc++];
+	  agent_tsv_read (tframe, arg);
+	  break;
+
+	case gdb_agent_op_tracenz:
+	  agent_mem_read_string (tframe, NULL, (CORE_ADDR) stack[--sp],
+				 (ULONGEST) top);
+	  if (--sp >= 0)
+	    top = stack[sp];
+	  break;
+
+	case gdb_agent_op_printf:
+	  {
+	    int nargs, slen, i;
+	    CORE_ADDR fn = 0, chan = 0;
+	    /* Can't have more args than the entire size of the stack.  */
+	    ULONGEST args[STACK_MAX];
+	    char *format;
+
+	    nargs = aexpr->bytes[pc++];
+	    slen = aexpr->bytes[pc++];
+	    slen = (slen << 8) + aexpr->bytes[pc++];
+	    format = (char *) &(aexpr->bytes[pc]);
+	    pc += slen;
+	    /* Pop function and channel.  */
+	    fn = top;
+	    if (--sp >= 0)
+	      top = stack[sp];
+	    chan = top;
+	    if (--sp >= 0)
+	      top = stack[sp];
+	    /* Pop arguments into a dedicated array.  */
+	    for (i = 0; i < nargs; ++i)
+	      {
+		args[i] = top;
+		if (--sp >= 0)
+		  top = stack[sp];
+	      }
+
+	    /* A bad format string means something is very wrong; give
+	       up immediately.  */
+	    if (format[slen - 1] != '\0')
+	      error (_("Unterminated format string in printf bytecode"));
+
+	    ax_printf (fn, chan, format, nargs, args);
+	  }
+	  break;
+
+	  /* GDB never (currently) generates any of these ops.  */
+	case gdb_agent_op_float:
+	case gdb_agent_op_ref_float:
+	case gdb_agent_op_ref_double:
+	case gdb_agent_op_ref_long_double:
+	case gdb_agent_op_l_to_d:
+	case gdb_agent_op_d_to_l:
+	case gdb_agent_op_trace16:
+	  ax_debug ("Agent expression op 0x%x valid, but not handled",
+		    op);
+	  /* If ever GDB generates any of these, we don't have the
+	     option of ignoring.  */
+	  return 1;
+
+	default:
+	  ax_debug ("Agent expression op 0x%x not recognized", op);
+	  /* Don't struggle on, things will just get worse.  */
+	  return expr_eval_unrecognized_opcode;
+	}
+
+      /* Check for stack badness.  */
+      if (sp >= (STACK_MAX - 1))
+	{
+	  ax_debug ("Expression stack overflow");
+	  return expr_eval_stack_overflow;
+	}
+
+      if (sp < 0)
+	{
+	  ax_debug ("Expression stack underflow");
+	  return expr_eval_stack_underflow;
+	}
+
+      ax_debug ("Op %s -> sp=%d, top=0x%s",
+		gdb_agent_op_name (op), sp, phex_nz (top, 0));
+    }
+}
diff --git a/gdb/gdbserver/ax.h b/gdb/gdbserver/ax.h
new file mode 100644
index 0000000..3ada3dd
--- /dev/null
+++ b/gdb/gdbserver/ax.h
@@ -0,0 +1,74 @@
+/* Data structures and functions associated with agent expressions in GDB.
+   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#if !defined (AX_H)
+#define AX_H 1
+
+#include "server.h"
+#include "regcache.h"
+
+#ifdef IN_PROCESS_AGENT
+extern int debug_agent;
+#define debug_threads debug_agent
+#endif
+
+struct traceframe;
+
+/* Enumeration of the different kinds of things that can happen during
+   agent expression evaluation.  */
+
+enum eval_result_type
+  {
+    expr_eval_no_error,
+    expr_eval_empty_expression,
+    expr_eval_empty_stack,
+    expr_eval_stack_overflow,
+    expr_eval_stack_underflow,
+    expr_eval_unhandled_opcode,
+    expr_eval_unrecognized_opcode,
+    expr_eval_divide_by_zero,
+    expr_eval_invalid_goto
+  };
+
+struct agent_expr
+{
+  int length;
+
+  unsigned char *bytes;
+};
+
+#ifndef IN_PROCESS_AGENT
+
+/* The packet form of an agent expression consists of an 'X', number
+   of bytes in expression, a comma, and then the bytes.  */
+struct agent_expr *gdb_parse_agent_expr (char **actparm);
+
+/* Convert the bytes of an agent expression back into hex digits, so
+   they can be printed or uploaded.  This allocates the buffer,
+   callers should free when they are done with it.  */
+char *gdb_unparse_agent_expr (struct agent_expr *aexpr);
+void emit_prologue (void);
+void emit_epilogue (void);
+enum eval_result_type compile_bytecodes (struct agent_expr *aexpr);
+#endif
+
+enum eval_result_type gdb_eval_agent_expr (struct regcache *regcache,
+					   struct traceframe *tframe,
+					   struct agent_expr *aexpr,
+					   ULONGEST *rslt);
+#endif /* AX_H */
diff --git a/gdb/gdbserver/config.in b/gdb/gdbserver/config.in
index a9472ea..26742ac 100644
--- a/gdb/gdbserver/config.in
+++ b/gdb/gdbserver/config.in
@@ -22,10 +22,6 @@
    you don't. */
 #undef HAVE_DECL_ADDR_NO_RANDOMIZE
 
-/* Define to 1 if you have the declaration of `memmem', and to 0 if you don't.
-   */
-#undef HAVE_DECL_MEMMEM
-
 /* Define to 1 if you have the declaration of `perror', and to 0 if you don't.
    */
 #undef HAVE_DECL_PERROR
@@ -49,6 +45,12 @@
 /* Define to 1 if you have the `dladdr' function. */
 #undef HAVE_DLADDR
 
+/* Define to 1 if the system has the type `Elf32_auxv_t'. */
+#undef HAVE_ELF32_AUXV_T
+
+/* Define to 1 if the system has the type `Elf64_auxv_t'. */
+#undef HAVE_ELF64_AUXV_T
+
 /* Define if <sys/procfs.h> has elf_fpregset_t. */
 #undef HAVE_ELF_FPREGSET_T
 
@@ -76,15 +78,12 @@
 /* Define if the target supports PTRACE_PEEKUSR for register access. */
 #undef HAVE_LINUX_USRREGS
 
-/* Define if <sys/procfs.h> has lwpid_t. */
+/* Define if <thread_db.h> has lwpid_t. */
 #undef HAVE_LWPID_T
 
 /* Define to 1 if you have the <malloc.h> header file. */
 #undef HAVE_MALLOC_H
 
-/* Define to 1 if you have the `memmem' function. */
-#undef HAVE_MEMMEM
-
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 
@@ -115,7 +114,7 @@
 /* Define to 1 if you have the <proc_service.h> header file. */
 #undef HAVE_PROC_SERVICE_H
 
-/* Define if <sys/procfs.h> has psaddr_t. */
+/* Define if <thread_db.h> has psaddr_t. */
 #undef HAVE_PSADDR_T
 
 /* Define if the target supports PTRACE_GETFPXREGS for extended register
@@ -128,6 +127,9 @@
 /* Define to 1 if you have the `pwrite' function. */
 #undef HAVE_PWRITE
 
+/* Define to 1 if you have the `readlink' function. */
+#undef HAVE_READLINK
+
 /* Define to 1 if you have the <sgtty.h> header file. */
 #undef HAVE_SGTTY_H
 
@@ -181,6 +183,9 @@
 /* Define to 1 if you have the <sys/types.h> header file. */
 #undef HAVE_SYS_TYPES_H
 
+/* Define to 1 if you have the <sys/un.h> header file. */
+#undef HAVE_SYS_UN_H
+
 /* Define to 1 if you have the <sys/wait.h> header file. */
 #undef HAVE_SYS_WAIT_H
 
diff --git a/gdb/gdbserver/configure b/gdb/gdbserver/configure
index d92a00f..63e25c2 100755
--- a/gdb/gdbserver/configure
+++ b/gdb/gdbserver/configure
@@ -552,7 +552,6 @@ PACKAGE_BUGREPORT=
 PACKAGE_URL=
 
 ac_unique_file="server.c"
-ac_config_libobj_dir=../gnulib
 # Factoring default headers for most tests.
 ac_includes_default="\
 #include <stdio.h>
@@ -590,6 +589,7 @@ ac_includes_default="\
 #endif"
 
 ac_subst_vars='LTLIBOBJS
+GNULIB_STDINT_H
 extra_libraries
 IPA_DEPFILES
 srv_xmlfiles
@@ -606,7 +606,9 @@ WARN_CFLAGS
 ustinc
 ustlibs
 LIBOBJS
+MAKE
 ALLOCA
+RANLIB
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
@@ -632,6 +634,9 @@ CPPFLAGS
 LDFLAGS
 CFLAGS
 CC
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
 target_alias
 host_alias
 build_alias
@@ -673,6 +678,7 @@ SHELL'
 ac_subst_files=''
 ac_user_opts='
 enable_option_checking
+enable_maintainer_mode
 with_ust
 with_ust_include
 with_ust_lib
@@ -1309,6 +1315,8 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-maintainer-mode  enable make rules and dependencies not useful
+			  (and sometimes confusing) to the casual installer
   --enable-werror         treat compile warnings as errors
   --enable-inprocess-agent
                           inprocess agent
@@ -2220,6 +2228,29 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+    # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then :
+  enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+  USE_MAINTAINER_MODE=no
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+   if test $USE_MAINTAINER_MODE = yes; then
+  MAINTAINER_MODE_TRUE=
+  MAINTAINER_MODE_FALSE='#'
+else
+  MAINTAINER_MODE_TRUE='#'
+  MAINTAINER_MODE_FALSE=
+fi
+
+  MAINT=$MAINTAINER_MODE_TRUE
+
+
+
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -3675,6 +3706,98 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
 
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
+if test -n "$ac_tool_prefix"; then
+  # 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
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
 
 test "$program_prefix" != NONE &&
   program_transform_name="s&^&$program_prefix&;$program_transform_name"
@@ -4149,7 +4272,154 @@ _ACEOF
 
 fi
 
-for ac_header in sgtty.h termio.h termios.h sys/reg.h string.h 		 proc_service.h sys/procfs.h thread_db.h linux/elf.h 		 stdlib.h unistd.h 		 errno.h fcntl.h signal.h sys/file.h malloc.h 		 sys/ioctl.h netinet/in.h sys/socket.h netdb.h 		 netinet/tcp.h arpa/inet.h sys/wait.h
+
+# Check for the 'make' the user wants to use.
+for ac_prog in make
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_MAKE+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$MAKE"; then
+  ac_cv_prog_MAKE="$MAKE" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_MAKE="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+MAKE=$ac_cv_prog_MAKE
+if test -n "$MAKE"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKE" >&5
+$as_echo "$MAKE" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$MAKE" && break
+done
+
+
+# Configure gnulib.  We can't use AC_CONFIG_SUBDIRS as that'd expect
+# to find the the source subdir to be configured directly under
+# gdbserver/.  We need to build gnulib under some other directory not
+# "gnulib", to avoid the problem of both GDB and GDBserver wanting to
+# build it in the same directory, when building in the source dir.
+
+  in_src="../gnulib"
+  in_build="build-gnulib-gdbserver"
+
+  # Remove --cache-file, --srcdir, and --disable-option-checking arguments
+  # so they do not pile up.
+  ac_sub_configure_args=
+  ac_prev=
+  eval "set x $ac_configure_args"
+  shift
+  for ac_arg
+  do
+    if test -n "$ac_prev"; then
+      ac_prev=
+      continue
+    fi
+    case $ac_arg in
+    -cache-file | --cache-file | --cache-fil | --cache-fi \
+    | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+      ac_prev=cache_file ;;
+    -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+    | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \
+    | --c=*)
+      ;;
+    --config-cache | -C)
+      ;;
+    -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+      ac_prev=srcdir ;;
+    -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+      ;;
+    -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+      ac_prev=prefix ;;
+    -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+      ;;
+    --disable-option-checking)
+      ;;
+    *)
+      case $ac_arg in
+      *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+      esac
+      as_fn_append ac_sub_configure_args " '$ac_arg'" ;;
+    esac
+  done
+
+  # Always prepend --prefix to ensure using the same prefix
+  # in subdir configurations.
+  ac_arg="--prefix=$prefix"
+  case $ac_arg in
+  *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+  esac
+  ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args"
+
+  # Pass --silent
+  if test "$silent" = yes; then
+    ac_sub_configure_args="--silent $ac_sub_configure_args"
+  fi
+
+  # Always prepend --disable-option-checking to silence warnings, since
+  # different subdirs can have different --enable and --with options.
+  ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args"
+
+  ac_popdir=`pwd`
+  ac_dir=$in_build
+
+  ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)"
+  $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5
+  $as_echo "$ac_msg" >&6
+  as_dir="$ac_dir"; as_fn_mkdir_p
+
+  case $srcdir in
+  [\\/]* | ?:[\\/]* )
+    ac_srcdir=$srcdir/$in_src ;;
+  *) # Relative name.
+    ac_srcdir=../$srcdir/$in_src ;;
+  esac
+
+  cd "$ac_dir"
+
+  ac_sub_configure=$ac_srcdir/configure
+
+  # Make the cache file name correct relative to the subdirectory.
+  case $cache_file in
+  [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;;
+  *) # Relative name.
+    ac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
+  esac
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5
+$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
+  # The eval makes quoting arguments work.
+  eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \
+       --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" ||
+    as_fn_error "$ac_sub_configure failed for $ac_dir" "$LINENO" 5
+
+  cd "$ac_popdir"
+
+
+for ac_header in sgtty.h termio.h termios.h sys/reg.h string.h 		 proc_service.h sys/procfs.h thread_db.h linux/elf.h 		 stdlib.h unistd.h 		 errno.h fcntl.h signal.h sys/file.h malloc.h 		 sys/ioctl.h netinet/in.h sys/socket.h netdb.h 		 netinet/tcp.h arpa/inet.h sys/wait.h sys/un.h
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@@ -4163,7 +4433,7 @@ fi
 
 done
 
-for ac_func in pread pwrite pread64
+for ac_func in pread pwrite pread64 readlink
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -4176,7 +4446,7 @@ _ACEOF
 fi
 done
 
-for ac_func in memmem vasprintf vsnprintf
+for ac_func in vasprintf vsnprintf
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -4428,16 +4698,6 @@ fi
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_PERROR $ac_have_decl
 _ACEOF
-ac_fn_c_check_decl "$LINENO" "memmem" "ac_cv_have_decl_memmem" "$ac_includes_default"
-if test "x$ac_cv_have_decl_memmem" = x""yes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_MEMMEM $ac_have_decl
-_ACEOF
 ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default"
 if test "x$ac_cv_have_decl_vasprintf" = x""yes; then :
   ac_have_decl=1
@@ -4474,6 +4734,30 @@ _ACEOF
 fi
 
 
+ac_fn_c_check_type "$LINENO" "Elf32_auxv_t" "ac_cv_type_Elf32_auxv_t" "#include <elf.h>
+
+"
+if test "x$ac_cv_type_Elf32_auxv_t" = x""yes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_ELF32_AUXV_T 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "Elf64_auxv_t" "ac_cv_type_Elf64_auxv_t" "#include <elf.h>
+
+"
+if test "x$ac_cv_type_Elf64_auxv_t" = x""yes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_ELF64_AUXV_T 1
+_ACEOF
+
+
+fi
+
+
 
 
 # Check whether --with-pkgversion was given.
@@ -4838,6 +5122,80 @@ $as_echo "$bfd_cv_have_sys_procfs_type_elf_fpregset_t" >&6; }
 
 fi
 
+if test "$bfd_cv_have_sys_procfs_type_lwpid_t" != yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpid_t in thread_db.h" >&5
+$as_echo_n "checking for lwpid_t in thread_db.h... " >&6; }
+ if test "${gdbserver_cv_have_thread_db_type_lwpid_t+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <thread_db.h>
+int
+main ()
+{
+lwpid_t avar
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gdbserver_cv_have_thread_db_type_lwpid_t=yes
+else
+  gdbserver_cv_have_thread_db_type_lwpid_t=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+ if test $gdbserver_cv_have_thread_db_type_lwpid_t = yes; then
+
+$as_echo "#define HAVE_LWPID_T 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdbserver_cv_have_thread_db_type_lwpid_t" >&5
+$as_echo "$gdbserver_cv_have_thread_db_type_lwpid_t" >&6; }
+
+fi
+
+if test "$bfd_cv_have_sys_procfs_type_psaddr_t" != yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psaddr_t in thread_db.h" >&5
+$as_echo_n "checking for psaddr_t in thread_db.h... " >&6; }
+ if test "${gdbserver_cv_have_thread_db_type_psaddr_t+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <thread_db.h>
+int
+main ()
+{
+psaddr_t avar
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gdbserver_cv_have_thread_db_type_psaddr_t=yes
+else
+  gdbserver_cv_have_thread_db_type_psaddr_t=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+ if test $gdbserver_cv_have_thread_db_type_psaddr_t = yes; then
+
+$as_echo "#define HAVE_PSADDR_T 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdbserver_cv_have_thread_db_type_psaddr_t" >&5
+$as_echo "$gdbserver_cv_have_thread_db_type_psaddr_t" >&6; }
+
+fi
+
 old_LIBS="$LIBS"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
 $as_echo_n "checking for dlopen in -ldl... " >&6; }
@@ -5182,6 +5540,14 @@ fi
 
 
 
+GNULIB=build-gnulib-gdbserver/import
+
+GNULIB_STDINT_H=
+if test x"$STDINT_H" != x; then
+  GNULIB_STDINT_H=$GNULIB/$STDINT_H
+fi
+
+
 ac_config_files="$ac_config_files Makefile"
 
 ac_config_commands="$ac_config_commands default"
@@ -5283,6 +5649,10 @@ LIBOBJS=$ac_libobjs
 LTLIBOBJS=$ac_ltlibobjs
 
 
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+  as_fn_error "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 
 : ${CONFIG_STATUS=./config.status}
 ac_write_fail=0
diff --git a/gdb/gdbserver/configure.ac b/gdb/gdbserver/configure.ac
index 30666ec..7013a21 100644
--- a/gdb/gdbserver/configure.ac
+++ b/gdb/gdbserver/configure.ac
@@ -22,7 +22,8 @@ AC_PREREQ(2.59)dnl
 
 AC_INIT(server.c)
 AC_CONFIG_HEADER(config.h:config.in)
-AC_CONFIG_LIBOBJ_DIR(../gnulib)
+
+AM_MAINTAINER_MODE
 
 AC_PROG_CC
 AC_GNU_SOURCE
@@ -30,6 +31,7 @@ AC_GNU_SOURCE
 AC_CANONICAL_SYSTEM
 
 AC_PROG_INSTALL
+AC_PROG_RANLIB
 
 AC_ARG_PROGRAM
 
@@ -37,14 +39,25 @@ AC_HEADER_STDC
 AC_HEADER_DIRENT
 
 AC_FUNC_ALLOCA
+
+# Check for the 'make' the user wants to use.
+AC_CHECK_PROGS(MAKE, make)
+
+# Configure gnulib.  We can't use AC_CONFIG_SUBDIRS as that'd expect
+# to find the the source subdir to be configured directly under
+# gdbserver/.  We need to build gnulib under some other directory not
+# "gnulib", to avoid the problem of both GDB and GDBserver wanting to
+# build it in the same directory, when building in the source dir.
+ACX_CONFIGURE_DIR(["../gnulib"], ["build-gnulib-gdbserver"])
+
 AC_CHECK_HEADERS(sgtty.h termio.h termios.h sys/reg.h string.h dnl
 		 proc_service.h sys/procfs.h thread_db.h linux/elf.h dnl
 		 stdlib.h unistd.h dnl
 		 errno.h fcntl.h signal.h sys/file.h malloc.h dnl
 		 sys/ioctl.h netinet/in.h sys/socket.h netdb.h dnl
-		 netinet/tcp.h arpa/inet.h sys/wait.h)
-AC_CHECK_FUNCS(pread pwrite pread64)
-AC_REPLACE_FUNCS(memmem vasprintf vsnprintf)
+		 netinet/tcp.h arpa/inet.h sys/wait.h sys/un.h)
+AC_CHECK_FUNCS(pread pwrite pread64 readlink)
+AC_REPLACE_FUNCS(vasprintf vsnprintf)
 
 # Check for UST
 ustlibs=""
@@ -161,13 +174,17 @@ AC_TRY_LINK([
   [AC_MSG_RESULT(no)])
 fi
 
-AC_CHECK_DECLS([strerror, perror, memmem, vasprintf, vsnprintf])
+AC_CHECK_DECLS([strerror, perror, vasprintf, vsnprintf])
 
 AC_CHECK_TYPES(socklen_t, [], [],
 [#include <sys/types.h>
 #include <sys/socket.h>
 ])
 
+AC_CHECK_TYPES([Elf32_auxv_t, Elf64_auxv_t], [], [],
+#include <elf.h>
+)
+
 ACX_PKGVERSION([GDB])
 ACX_BUGURL([http://www.gnu.org/software/gdb/bugs/])
 AC_DEFINE_UNQUOTED([PKGVERSION], ["$PKGVERSION"], [Additional package description])
@@ -268,6 +285,16 @@ if test "$ac_cv_header_sys_procfs_h" = yes; then
   BFD_HAVE_SYS_PROCFS_TYPE(elf_fpregset_t)
 fi
 
+dnl Some systems (e.g., Android) have lwpid_t defined in libthread_db.h.
+if test "$bfd_cv_have_sys_procfs_type_lwpid_t" != yes; then
+  GDBSERVER_HAVE_THREAD_DB_TYPE(lwpid_t)
+fi
+
+dnl Some systems (e.g., Android) have psaddr_t defined in libthread_db.h.
+if test "$bfd_cv_have_sys_procfs_type_psaddr_t" != yes; then
+  GDBSERVER_HAVE_THREAD_DB_TYPE(psaddr_t)
+fi
+
 dnl Check for libdl, but do not add it to LIBS as only gdbserver
 dnl needs it (and gdbreplay doesn't).
 old_LIBS="$LIBS"
@@ -419,6 +446,14 @@ AC_SUBST(srv_xmlfiles)
 AC_SUBST(IPA_DEPFILES)
 AC_SUBST(extra_libraries)
 
+GNULIB=build-gnulib-gdbserver/import
+
+GNULIB_STDINT_H=
+if test x"$STDINT_H" != x; then
+  GNULIB_STDINT_H=$GNULIB/$STDINT_H
+fi
+AC_SUBST(GNULIB_STDINT_H)
+
 AC_OUTPUT(Makefile,
 [case x$CONFIG_HEADERS in
 xconfig.h:config.in)
diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv
index 7c47c86..d1e04a9 100644
--- a/gdb/gdbserver/configure.srv
+++ b/gdb/gdbserver/configure.srv
@@ -26,18 +26,18 @@ srv_hostio_err_objs="hostio-errno.o"
 
 srv_i386_regobj="i386.o i386-avx.o i386-mmx.o"
 srv_i386_linux_regobj="i386-linux.o i386-avx-linux.o i386-mmx-linux.o"
-srv_amd64_regobj="amd64.o amd64-avx.o"
-srv_amd64_linux_regobj="amd64-linux.o amd64-avx-linux.o"
+srv_amd64_regobj="amd64.o amd64-avx.o x32.o x32-avx.o"
+srv_amd64_linux_regobj="amd64-linux.o amd64-avx-linux.o x32-linux.o x32-avx-linux.o"
 
 ipa_i386_linux_regobj=i386-linux-ipa.o
 ipa_amd64_linux_regobj=amd64-linux-ipa.o
 
 srv_i386_32bit_xmlfiles="i386/32bit-core.xml i386/32bit-sse.xml i386/32bit-avx.xml"
-srv_i386_64bit_xmlfiles="i386/64bit-core.xml i386/64bit-sse.xml i386/64bit-avx.xml"
+srv_i386_64bit_xmlfiles="i386/64bit-core.xml i386/64bit-sse.xml i386/64bit-avx.xml i386/x32-core.xml"
 srv_i386_xmlfiles="i386/i386.xml i386/i386-avx.xml i386/i386-mmx.xml $srv_i386_32bit_xmlfiles"
-srv_amd64_xmlfiles="i386/amd64.xml i386/amd64-avx.xml $srv_i386_64bit_xmlfiles"
+srv_amd64_xmlfiles="i386/amd64.xml i386/amd64-avx.xml i386/x32.xml i386/x32-avx.xml $srv_i386_64bit_xmlfiles"
 srv_i386_linux_xmlfiles="i386/i386-linux.xml i386/i386-avx-linux.xml i386/i386-mmx-linux.xml i386/32bit-linux.xml $srv_i386_32bit_xmlfiles"
-srv_amd64_linux_xmlfiles="i386/amd64-linux.xml i386/amd64-avx-linux.xml i386/64bit-linux.xml $srv_i386_64bit_xmlfiles"
+srv_amd64_linux_xmlfiles="i386/amd64-linux.xml i386/amd64-avx-linux.xml i386/64bit-linux.xml i386/x32-linux.xml i386/x32-avx-linux.xml $srv_i386_64bit_xmlfiles"
 
 # Input is taken from the "${target}" variable.
 
@@ -47,6 +47,7 @@ case "${target}" in
 			srv_regobj="${srv_regobj} arm-with-vfpv3.o"
 			srv_regobj="${srv_regobj} arm-with-neon.o"
 			srv_tgtobj="linux-low.o linux-osdata.o linux-arm-low.o linux-procfs.o"
+			srv_tgtobj="${srv_tgtobj} linux-ptrace.o"
 			srv_xmlfiles="arm-with-iwmmxt.xml"
 			srv_xmlfiles="${srv_xmlfiles} arm-with-vfpv2.xml"
 			srv_xmlfiles="${srv_xmlfiles} arm-with-vfpv3.xml"
@@ -69,16 +70,19 @@ case "${target}" in
 			;;
   bfin-*-*linux*)	srv_regobj=reg-bfin.o
 			srv_tgtobj="linux-low.o linux-osdata.o linux-bfin-low.o linux-procfs.o"
+			srv_tgtobj="${srv_tgtobj} linux-ptrace.o"
 			srv_linux_usrregs=yes
 			srv_linux_thread_db=yes
 			;;
   crisv32-*-linux*)	srv_regobj=reg-crisv32.o
 			srv_tgtobj="linux-low.o linux-osdata.o linux-crisv32-low.o linux-procfs.o"
+			srv_tgtobj="${srv_tgtobj} linux-ptrace.o"
 			srv_linux_regsets=yes
 			srv_linux_thread_db=yes
 			;;
   cris-*-linux*)	srv_regobj=reg-cris.o
 			srv_tgtobj="linux-low.o linux-osdata.o linux-cris-low.o linux-procfs.o"
+			srv_tgtobj="${srv_tgtobj} linux-ptrace.o"
 			srv_linux_usrregs=yes
 			srv_linux_thread_db=yes
 			;;
@@ -93,6 +97,7 @@ case "${target}" in
 			    srv_xmlfiles="${srv_xmlfiles} $srv_amd64_linux_xmlfiles"
 			fi
 			srv_tgtobj="linux-low.o linux-osdata.o linux-x86-low.o i386-low.o i387-fp.o linux-procfs.o"
+			srv_tgtobj="${srv_tgtobj} linux-ptrace.o"
 			srv_linux_usrregs=yes
 			srv_linux_regsets=yes
 			srv_linux_thread_db=yes
@@ -124,10 +129,12 @@ case "${target}" in
 			;;
   ia64-*-linux*)	srv_regobj=reg-ia64.o
 			srv_tgtobj="linux-low.o linux-osdata.o linux-ia64-low.o linux-procfs.o"
+			srv_tgtobj="${srv_tgtobj} linux-ptrace.o"
 			srv_linux_usrregs=yes
 			;;
   m32r*-*-linux*)	srv_regobj=reg-m32r.o
 			srv_tgtobj="linux-low.o linux-osdata.o linux-m32r-low.o linux-procfs.o"
+			srv_tgtobj="${srv_tgtobj} linux-ptrace.o"
 			srv_linux_usrregs=yes
  			srv_linux_thread_db=yes
 			;;
@@ -137,6 +144,7 @@ case "${target}" in
                           srv_regobj=reg-m68k.o
                         fi
 			srv_tgtobj="linux-low.o linux-osdata.o linux-m68k-low.o linux-procfs.o"
+			srv_tgtobj="${srv_tgtobj} linux-ptrace.o"
 			srv_linux_usrregs=yes
 			srv_linux_regsets=yes
 			srv_linux_thread_db=yes
@@ -147,20 +155,29 @@ case "${target}" in
                           srv_regobj=reg-m68k.o
                         fi
 			srv_tgtobj="linux-low.o linux-osdata.o linux-m68k-low.o linux-procfs.o"
+			srv_tgtobj="${srv_tgtobj} linux-ptrace.o"
 			srv_linux_usrregs=yes
 			srv_linux_regsets=yes
 			srv_linux_thread_db=yes
 			;;
-  mips*-*-linux*)	srv_regobj="mips-linux.o mips64-linux.o"
+  mips*-*-linux*)	srv_regobj="mips-linux.o"
+			srv_regobj="${srv_regobj} mips-dsp-linux.o"
+			srv_regobj="${srv_regobj} mips64-linux.o"
+			srv_regobj="${srv_regobj} mips64-dsp-linux.o"
 			srv_tgtobj="linux-low.o linux-osdata.o linux-mips-low.o linux-procfs.o"
+			srv_tgtobj="${srv_tgtobj} linux-ptrace.o"
 			srv_xmlfiles="mips-linux.xml"
+			srv_xmlfiles="${srv_xmlfiles} mips-dsp-linux.xml"
 			srv_xmlfiles="${srv_xmlfiles} mips-cpu.xml"
 			srv_xmlfiles="${srv_xmlfiles} mips-cp0.xml"
 			srv_xmlfiles="${srv_xmlfiles} mips-fpu.xml"
+			srv_xmlfiles="${srv_xmlfiles} mips-dsp.xml"
 			srv_xmlfiles="${srv_xmlfiles} mips64-linux.xml"
+			srv_xmlfiles="${srv_xmlfiles} mips64-dsp-linux.xml"
 			srv_xmlfiles="${srv_xmlfiles} mips64-cpu.xml"
 			srv_xmlfiles="${srv_xmlfiles} mips64-cp0.xml"
 			srv_xmlfiles="${srv_xmlfiles} mips64-fpu.xml"
+			srv_xmlfiles="${srv_xmlfiles} mips64-dsp.xml"
 			srv_linux_regsets=yes
 			srv_linux_usrregs=yes
 			srv_linux_thread_db=yes
@@ -181,6 +198,7 @@ case "${target}" in
 			srv_regobj="${srv_regobj} powerpc-isa205-altivec64l.o"
 			srv_regobj="${srv_regobj} powerpc-isa205-vsx64l.o"
 			srv_tgtobj="linux-low.o linux-osdata.o linux-ppc-low.o linux-procfs.o"
+			srv_tgtobj="${srv_tgtobj} linux-ptrace.o"
 			srv_xmlfiles="rs6000/powerpc-32l.xml"
 			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-altivec32l.xml"
 			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-cell32l.xml"
@@ -223,6 +241,7 @@ case "${target}" in
 			srv_regobj="${srv_regobj} s390x-linux64v1.o"
 			srv_regobj="${srv_regobj} s390x-linux64v2.o"
 			srv_tgtobj="linux-low.o linux-osdata.o linux-s390-low.o linux-procfs.o"
+			srv_tgtobj="${srv_tgtobj} linux-ptrace.o"
 			srv_xmlfiles="s390-linux32.xml"
 			srv_xmlfiles="${srv_xmlfiles} s390-linux32v1.xml"
 			srv_xmlfiles="${srv_xmlfiles} s390-linux32v2.xml"
@@ -243,12 +262,14 @@ case "${target}" in
 			;;
   sh*-*-linux*)		srv_regobj=reg-sh.o
 			srv_tgtobj="linux-low.o linux-osdata.o linux-sh-low.o linux-procfs.o"
+			srv_tgtobj="${srv_tgtobj} linux-ptrace.o"
 			srv_linux_usrregs=yes
 			srv_linux_regsets=yes
 			srv_linux_thread_db=yes
 			;;
   sparc*-*-linux*)	srv_regobj=reg-sparc64.o
 			srv_tgtobj="linux-low.o linux-osdata.o linux-sparc-low.o linux-procfs.o"
+			srv_tgtobj="${srv_tgtobj} linux-ptrace.o"
 			srv_linux_regsets=yes
 			srv_linux_thread_db=yes
 			;;
@@ -265,12 +286,14 @@ case "${target}" in
 			srv_xmlfiles="${srv_xmlfiles} tic6x-gp.xml"
 			srv_xmlfiles="${srv_xmlfiles} tic6x-c6xp.xml"
   			srv_tgtobj="linux-low.o linux-osdata.o linux-tic6x-low.o linux-procfs.o"
+			srv_tgtobj="${srv_tgtobj} linux-ptrace.o"
 			srv_linux_regsets=yes
 			srv_linux_usrregs=yes
 			srv_linux_thread_db=yes
 			;;
   x86_64-*-linux*)	srv_regobj="$srv_amd64_linux_regobj $srv_i386_linux_regobj"
 			srv_tgtobj="linux-low.o linux-osdata.o linux-x86-low.o i386-low.o i387-fp.o linux-procfs.o"
+			srv_tgtobj="${srv_tgtobj} linux-ptrace.o"
 			srv_xmlfiles="$srv_i386_linux_xmlfiles $srv_amd64_linux_xmlfiles"
 			srv_linux_usrregs=yes # This is for i386 progs.
 			srv_linux_regsets=yes
@@ -285,8 +308,15 @@ case "${target}" in
 
   xtensa*-*-linux*)	srv_regobj=reg-xtensa.o
 			srv_tgtobj="linux-low.o linux-osdata.o linux-xtensa-low.o linux-procfs.o"
+			srv_tgtobj="${srv_tgtobj} linux-ptrace.o"
 			srv_linux_regsets=yes
 			;;
+  tilegx-*-linux*)	srv_regobj=reg-tilegx.o
+			srv_tgtobj="linux-low.o linux-tile-low.o linux-osdata.o linux-procfs.o"
+			srv_tgtobj="${srv_tgtobj} linux-ptrace.o"
+			srv_linux_regsets=yes
+			srv_linux_thread_db=yes
+			;;
   *)			echo "Error: target not supported by gdbserver."
 			exit 1
 			;;
diff --git a/gdb/gdbserver/dll.c b/gdb/gdbserver/dll.c
new file mode 100644
index 0000000..cb6fb43
--- /dev/null
+++ b/gdb/gdbserver/dll.c
@@ -0,0 +1,110 @@
+/* Copyright (C) 2002, 2005, 2007-2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "server.h"
+
+#define get_dll(inf) ((struct dll_info *)(inf))
+
+struct inferior_list all_dlls;
+int dlls_changed;
+
+static void
+free_one_dll (struct inferior_list_entry *inf)
+{
+  struct dll_info *dll = get_dll (inf);
+  if (dll->name != NULL)
+    free (dll->name);
+  free (dll);
+}
+
+/* Find a DLL with the same name and/or base address.  A NULL name in
+   the key is ignored; so is an all-ones base address.  */
+
+static int
+match_dll (struct inferior_list_entry *inf, void *arg)
+{
+  struct dll_info *iter = (void *) inf;
+  struct dll_info *key = arg;
+
+  if (key->base_addr != ~(CORE_ADDR) 0
+      && iter->base_addr == key->base_addr)
+    return 1;
+  else if (key->name != NULL
+	   && iter->name != NULL
+	   && strcmp (key->name, iter->name) == 0)
+    return 1;
+
+  return 0;
+}
+
+/* Record a newly loaded DLL at BASE_ADDR.  */
+
+void
+loaded_dll (const char *name, CORE_ADDR base_addr)
+{
+  struct dll_info *new_dll = xmalloc (sizeof (*new_dll));
+  memset (new_dll, 0, sizeof (*new_dll));
+
+  new_dll->entry.id = minus_one_ptid;
+
+  new_dll->name = xstrdup (name);
+  new_dll->base_addr = base_addr;
+
+  add_inferior_to_list (&all_dlls, &new_dll->entry);
+  dlls_changed = 1;
+}
+
+/* Record that the DLL with NAME and BASE_ADDR has been unloaded.  */
+
+void
+unloaded_dll (const char *name, CORE_ADDR base_addr)
+{
+  struct dll_info *dll;
+  struct dll_info key_dll;
+
+  /* Be careful not to put the key DLL in any list.  */
+  key_dll.name = (char *) name;
+  key_dll.base_addr = base_addr;
+
+  dll = (void *) find_inferior (&all_dlls, match_dll, &key_dll);
+
+  if (dll == NULL)
+    /* For some inferiors we might get unloaded_dll events without having
+       a corresponding loaded_dll.  In that case, the dll cannot be found
+       in ALL_DLL, and there is nothing further for us to do.
+
+       This has been observed when running 32bit executables on Windows64
+       (i.e. through WOW64, the interface between the 32bits and 64bits
+       worlds).  In that case, the inferior always does some strange
+       unloading of unnamed dll.  */
+    return;
+  else
+    {
+      /* DLL has been found so remove the entry and free associated
+         resources.  */
+      remove_inferior (&all_dlls, &dll->entry);
+      free_one_dll (&dll->entry);
+      dlls_changed = 1;
+    }
+}
+
+void
+clear_dlls (void)
+{
+  for_each_inferior (&all_dlls, free_one_dll);
+  all_dlls.head = all_dlls.tail = NULL;
+}
diff --git a/gdb/gdbserver/gdbthread.h b/gdb/gdbserver/gdbthread.h
new file mode 100644
index 0000000..d863ec0
--- /dev/null
+++ b/gdb/gdbserver/gdbthread.h
@@ -0,0 +1,71 @@
+/* Multi-thread control defs for remote server for GDB.
+   Copyright (C) 1993, 1995, 1997-2000, 2002-2012 Free Software
+   Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef GDB_THREAD_H
+#define GDB_THREAD_H
+
+#include "server.h"
+
+struct thread_info
+{
+  struct inferior_list_entry entry;
+  void *target_data;
+  void *regcache_data;
+
+  /* The last resume GDB requested on this thread.  */
+  enum resume_kind last_resume_kind;
+
+  /* The last wait status reported for this thread.  */
+  struct target_waitstatus last_status;
+
+  /* Given `while-stepping', a thread may be collecting data for more
+     than one tracepoint simultaneously.  E.g.:
+
+    ff0001  INSN1 <-- TP1, while-stepping 10 collect $regs
+    ff0002  INSN2
+    ff0003  INSN3 <-- TP2, collect $regs
+    ff0004  INSN4 <-- TP3, while-stepping 10 collect $regs
+    ff0005  INSN5
+
+   Notice that when instruction INSN5 is reached, the while-stepping
+   actions of both TP1 and TP3 are still being collected, and that TP2
+   had been collected meanwhile.  The whole range of ff0001-ff0005
+   should be single-stepped, due to at least TP1's while-stepping
+   action covering the whole range.
+
+   On the other hand, the same tracepoint with a while-stepping action
+   may be hit by more than one thread simultaneously, hence we can't
+   keep the current step count in the tracepoint itself.
+
+   This is the head of the list of the states of `while-stepping'
+   tracepoint actions this thread is now collecting; NULL if empty.
+   Each item in the list holds the current step of the while-stepping
+   action.  */
+  struct wstep_state *while_stepping;
+};
+
+extern struct inferior_list all_threads;
+
+void remove_thread (struct thread_info *thread);
+void add_thread (ptid_t ptid, void *target_data);
+
+struct thread_info *find_thread_ptid (ptid_t ptid);
+struct thread_info *gdb_id_to_thread (unsigned int);
+
+#endif /* GDB_THREAD_H */
diff --git a/gdb/gdbserver/hostio.c b/gdb/gdbserver/hostio.c
index b1508ec..72e334c 100644
--- a/gdb/gdbserver/hostio.c
+++ b/gdb/gdbserver/hostio.c
@@ -328,10 +328,15 @@ handle_pread (char *own_buf, int *new_packet_len)
 #ifdef HAVE_PREAD
   ret = pread (fd, data, len, offset);
 #else
-  ret = lseek (fd, offset, SEEK_SET);
-  if (ret != -1)
-    ret = read (fd, data, len);
+  ret = -1;
 #endif
+  /* If we have no pread or it failed for this file, use lseek/read.  */
+  if (ret == -1)
+    {
+      ret = lseek (fd, offset, SEEK_SET);
+      if (ret != -1)
+	ret = read (fd, data, len);
+    }
 
   if (ret == -1)
     {
@@ -376,10 +381,15 @@ handle_pwrite (char *own_buf, int packet_len)
 #ifdef HAVE_PWRITE
   ret = pwrite (fd, data, len, offset);
 #else
-  ret = lseek (fd, offset, SEEK_SET);
-  if (ret != -1)
-    ret = write (fd, data, len);
+  ret = -1;
 #endif
+  /* If we have no pwrite or it failed for this file, use lseek/write.  */
+  if (ret == -1)
+    {
+      ret = lseek (fd, offset, SEEK_SET);
+      if (ret != -1)
+	ret = write (fd, data, len);
+    }
 
   if (ret == -1)
     {
@@ -456,6 +466,41 @@ handle_unlink (char *own_buf)
   hostio_reply (own_buf, ret);
 }
 
+static void
+handle_readlink (char *own_buf, int *new_packet_len)
+{
+#if defined (HAVE_READLINK)
+  char filename[PATH_MAX], linkname[PATH_MAX];
+  char *p;
+  int ret, bytes_sent;
+
+  p = own_buf + strlen ("vFile:readlink:");
+
+  if (require_filename (&p, filename)
+      || require_end (p))
+    {
+      hostio_packet_error (own_buf);
+      return;
+    }
+
+  ret = readlink (filename, linkname, sizeof linkname);
+  if (ret == -1)
+    {
+      hostio_error (own_buf);
+      return;
+    }
+
+  bytes_sent = hostio_reply_with_data (own_buf, linkname, ret, new_packet_len);
+
+  /* If the response does not fit into a single packet, do not attempt
+     to return a partial response, but simply fail.  */
+  if (bytes_sent < ret)
+    sprintf (own_buf, "F-1,%x", FILEIO_ENAMETOOLONG);
+#else /* ! HAVE_READLINK */
+    sprintf (own_buf, "F-1,%x", FILEIO_ENOSYS);
+#endif
+}
+
 /* Handle all the 'F' file transfer packets.  */
 
 int
@@ -471,6 +516,8 @@ handle_vFile (char *own_buf, int packet_len, int *new_packet_len)
     handle_close (own_buf);
   else if (strncmp (own_buf, "vFile:unlink:", 13) == 0)
     handle_unlink (own_buf);
+  else if (strncmp (own_buf, "vFile:readlink:", 15) == 0)
+    handle_readlink (own_buf, new_packet_len);
   else
     return 0;
 
diff --git a/gdb/gdbserver/i386-low.c b/gdb/gdbserver/i386-low.c
index 362395c..902a9e9 100644
--- a/gdb/gdbserver/i386-low.c
+++ b/gdb/gdbserver/i386-low.c
@@ -559,24 +559,60 @@ i386_low_stopped_data_address (struct i386_debug_reg_state *state,
   CORE_ADDR addr = 0;
   int i;
   int rc = 0;
+  /* The current thread's DR_STATUS.  We always need to read this to
+     check whether some watchpoint caused the trap.  */
   unsigned status;
-  unsigned control;
-
-  /* Get the current values the inferior has.  If the thread was
-     running when we last changed watchpoints, the mirror no longer
-     represents what was set in this LWP's debug registers.  */
+  /* We need DR_CONTROL as well, but only iff DR_STATUS indicates a
+     data breakpoint trap.  Only fetch it when necessary, to avoid an
+     unnecessary extra syscall when no watchpoint triggered.  */
+  int control_p = 0;
+  unsigned control = 0;
+
+  /* In non-stop/async, threads can be running while we change the
+     global dr_mirror (and friends).  Say, we set a watchpoint, and
+     let threads resume.  Now, say you delete the watchpoint, or
+     add/remove watchpoints such that dr_mirror changes while threads
+     are running.  On targets that support non-stop,
+     inserting/deleting watchpoints updates the global dr_mirror only.
+     It does not update the real thread's debug registers; that's only
+     done prior to resume.  Instead, if threads are running when the
+     mirror changes, a temporary and transparent stop on all threads
+     is forced so they can get their copy of the debug registers
+     updated on re-resume.  Now, say, a thread hit a watchpoint before
+     having been updated with the new dr_mirror contents, and we
+     haven't yet handled the corresponding SIGTRAP.  If we trusted
+     dr_mirror below, we'd mistake the real trapped address (from the
+     last time we had updated debug registers in the thread) with
+     whatever was currently in dr_mirror.  So to fix this, dr_mirror
+     always represents intention, what we _want_ threads to have in
+     debug registers.  To get at the address and cause of the trap, we
+     need to read the state the thread still has in its debug
+     registers.
+
+     In sum, always get the current debug register values the current
+     thread has, instead of trusting the global mirror.  If the thread
+     was running when we last changed watchpoints, the mirror no
+     longer represents what was set in this thread's debug
+     registers.  */
   status = i386_dr_low_get_status ();
-  control = i386_dr_low_get_control ();
 
   ALL_DEBUG_REGISTERS (i)
     {
-      if (I386_DR_WATCH_HIT (status, i)
-	  /* This second condition makes sure DRi is set up for a data
-	     watchpoint, not a hardware breakpoint.  The reason is
-	     that GDB doesn't call the target_stopped_data_address
-	     method except for data watchpoints.  In other words, I'm
-	     being paranoiac.  */
-	  && I386_DR_GET_RW_LEN (control, i) != 0)
+      if (!I386_DR_WATCH_HIT (status, i))
+	continue;
+
+      if (!control_p)
+	{
+	  control = i386_dr_low_get_control ();
+	  control_p = 1;
+	}
+
+      /* This second condition makes sure DRi is set up for a data
+	 watchpoint, not a hardware breakpoint.  The reason is that
+	 GDB doesn't call the target_stopped_data_address method
+	 except for data watchpoints.  In other words, I'm being
+	 paranoiac.  */
+      if (I386_DR_GET_RW_LEN (control, i) != 0)
 	{
 	  addr = i386_dr_low_get_addr (i);
 	  rc = 1;
diff --git a/gdb/gdbserver/inferiors.c b/gdb/gdbserver/inferiors.c
index cac9878..76abaf5 100644
--- a/gdb/gdbserver/inferiors.c
+++ b/gdb/gdbserver/inferiors.c
@@ -21,16 +21,14 @@
 #include <stdlib.h>
 
 #include "server.h"
+#include "gdbthread.h"
 
 struct inferior_list all_processes;
 struct inferior_list all_threads;
-struct inferior_list all_dlls;
-int dlls_changed;
 
 struct thread_info *current_inferior;
 
 #define get_thread(inf) ((struct thread_info *)(inf))
-#define get_dll(inf) ((struct dll_info *)(inf))
 
 void
 add_inferior_to_list (struct inferior_list *list,
@@ -228,86 +226,6 @@ set_inferior_regcache_data (struct thread_info *inferior, void *data)
   inferior->regcache_data = data;
 }
 
-static void
-free_one_dll (struct inferior_list_entry *inf)
-{
-  struct dll_info *dll = get_dll (inf);
-  if (dll->name != NULL)
-    free (dll->name);
-  free (dll);
-}
-
-/* Find a DLL with the same name and/or base address.  A NULL name in
-   the key is ignored; so is an all-ones base address.  */
-
-static int
-match_dll (struct inferior_list_entry *inf, void *arg)
-{
-  struct dll_info *iter = (void *) inf;
-  struct dll_info *key = arg;
-
-  if (key->base_addr != ~(CORE_ADDR) 0
-      && iter->base_addr == key->base_addr)
-    return 1;
-  else if (key->name != NULL
-	   && iter->name != NULL
-	   && strcmp (key->name, iter->name) == 0)
-    return 1;
-
-  return 0;
-}
-
-/* Record a newly loaded DLL at BASE_ADDR.  */
-
-void
-loaded_dll (const char *name, CORE_ADDR base_addr)
-{
-  struct dll_info *new_dll = xmalloc (sizeof (*new_dll));
-  memset (new_dll, 0, sizeof (*new_dll));
-
-  new_dll->entry.id = minus_one_ptid;
-
-  new_dll->name = xstrdup (name);
-  new_dll->base_addr = base_addr;
-
-  add_inferior_to_list (&all_dlls, &new_dll->entry);
-  dlls_changed = 1;
-}
-
-/* Record that the DLL with NAME and BASE_ADDR has been unloaded.  */
-
-void
-unloaded_dll (const char *name, CORE_ADDR base_addr)
-{
-  struct dll_info *dll;
-  struct dll_info key_dll;
-
-  /* Be careful not to put the key DLL in any list.  */
-  key_dll.name = (char *) name;
-  key_dll.base_addr = base_addr;
-
-  dll = (void *) find_inferior (&all_dlls, match_dll, &key_dll);
-
-  if (dll == NULL)
-    /* For some inferiors we might get unloaded_dll events without having
-       a corresponding loaded_dll.  In that case, the dll cannot be found
-       in ALL_DLL, and there is nothing further for us to do.
-
-       This has been observed when running 32bit executables on Windows64
-       (i.e. through WOW64, the interface between the 32bits and 64bits
-       worlds).  In that case, the inferior always does some strange
-       unloading of unnamed dll.  */
-    return;
-  else
-    {
-      /* DLL has been found so remove the entry and free associated
-         resources.  */
-      remove_inferior (&all_dlls, &dll->entry);
-      free_one_dll (&dll->entry);
-      dlls_changed = 1;
-    }
-}
-
 #define clear_list(LIST) \
   do { (LIST)->head = (LIST)->tail = NULL; } while (0)
 
@@ -315,41 +233,11 @@ void
 clear_inferiors (void)
 {
   for_each_inferior (&all_threads, free_one_thread);
-  for_each_inferior (&all_dlls, free_one_dll);
-
   clear_list (&all_threads);
-  clear_list (&all_dlls);
-
-  current_inferior = NULL;
-}
 
-/* Two utility functions for a truly degenerate inferior_list: a simple
-   PID listing.  */
+  clear_dlls ();
 
-void
-add_pid_to_list (struct inferior_list *list, unsigned long pid)
-{
-  struct inferior_list_entry *new_entry;
-
-  new_entry = xmalloc (sizeof (struct inferior_list_entry));
-  new_entry->id = pid_to_ptid (pid);
-  add_inferior_to_list (list, new_entry);
-}
-
-int
-pull_pid_from_list (struct inferior_list *list, unsigned long pid)
-{
-  struct inferior_list_entry *new_entry;
-
-  new_entry = find_inferior_id (list, pid_to_ptid (pid));
-  if (new_entry == NULL)
-    return 0;
-  else
-    {
-      remove_inferior (list, new_entry);
-      free (new_entry);
-      return 1;
-    }
+  current_inferior = NULL;
 }
 
 struct process_info *
diff --git a/gdb/gdbserver/linux-arm-low.c b/gdb/gdbserver/linux-arm-low.c
index 3096546..2718cec 100644
--- a/gdb/gdbserver/linux-arm-low.c
+++ b/gdb/gdbserver/linux-arm-low.c
@@ -432,8 +432,9 @@ arm_linux_hw_breakpoint_equal (const struct arm_linux_hw_breakpoint *p1,
 
 /* Initialize the hardware breakpoint structure P for a breakpoint or
    watchpoint at ADDR to LEN.  The type of watchpoint is given in TYPE.
-   Returns -1 if TYPE is unsupported, 0 if TYPE represents a breakpoint,
-   and 1 if type represents a watchpoint.  */
+   Returns -1 if TYPE is unsupported, or -2 if the particular combination
+   of ADDR and LEN cannot be implemented.  Otherwise, returns 0 if TYPE
+   represents a breakpoint and 1 if type represents a watchpoint.  */
 static int
 arm_linux_hw_point_initialize (char type, CORE_ADDR addr, int len,
 			       struct arm_linux_hw_breakpoint *p)
@@ -474,17 +475,17 @@ arm_linux_hw_point_initialize (char type, CORE_ADDR addr, int len,
 	{
 	case 2:	 /* 16-bit Thumb mode breakpoint */
 	case 3:  /* 32-bit Thumb mode breakpoint */
-	  mask = 0x3 << (addr & 2);
+	  mask = 0x3;
+	  addr &= ~1;
 	  break;
 	case 4:  /* 32-bit ARM mode breakpoint */
 	  mask = 0xf;
+	  addr &= ~3;
 	  break;
 	default:
 	  /* Unsupported. */
-	  return -1;
+	  return -2;
 	}
-
-      addr &= ~3;
     }
   else
     {
@@ -493,17 +494,17 @@ arm_linux_hw_point_initialize (char type, CORE_ADDR addr, int len,
 
       /* Can not set watchpoints for zero or negative lengths.  */
       if (len <= 0)
-	return -1;
+	return -2;
       /* The current ptrace interface can only handle watchpoints that are a
 	 power of 2.  */
       if ((len & (len - 1)) != 0)
-	return -1;
+	return -2;
 
       /* Test that the range [ADDR, ADDR + LEN) fits into the largest address
 	 range covered by a watchpoint.  */
       aligned_addr = addr & ~(max_wp_length - 1);
       if (aligned_addr + max_wp_length < addr + len)
-	return -1;
+	return -2;
 
       mask = (1 << len) - 1;
     }
@@ -560,7 +561,7 @@ arm_insert_point (char type, CORE_ADDR addr, int len)
   if (watch < 0)
     {
       /* Unsupported.  */
-      return 1;
+      return watch == -1 ? 1 : -1;
     }
 
   if (watch)
@@ -631,7 +632,7 @@ static int
 arm_stopped_by_watchpoint (void)
 {
   struct lwp_info *lwp = get_thread_lwp (current_inferior);
-  struct siginfo siginfo;
+  siginfo_t siginfo;
 
   /* We must be able to set hardware watchpoints.  */
   if (arm_linux_get_hw_watchpoint_count () == 0)
@@ -709,13 +710,15 @@ arm_prepare_to_resume (struct lwp_info *lwp)
 	errno = 0;
 
 	if (arm_hwbp_control_is_enabled (proc_info->bpts[i].control))
-	  if (ptrace (PTRACE_SETHBPREGS, pid, ((i << 1) + 1),
-	      &proc_info->bpts[i].address) < 0)
+	  if (ptrace (PTRACE_SETHBPREGS, pid,
+		      (PTRACE_ARG3_TYPE) ((i << 1) + 1),
+		      &proc_info->bpts[i].address) < 0)
 	    perror_with_name ("Unexpected error setting breakpoint address");
 
 	if (arm_hwbp_control_is_initialized (proc_info->bpts[i].control))
-	  if (ptrace (PTRACE_SETHBPREGS, pid, ((i << 1) + 2),
-	      &proc_info->bpts[i].control) < 0)
+	  if (ptrace (PTRACE_SETHBPREGS, pid,
+		      (PTRACE_ARG3_TYPE) ((i << 1) + 2),
+		      &proc_info->bpts[i].control) < 0)
 	    perror_with_name ("Unexpected error setting breakpoint");
 
 	lwp_info->bpts_changed[i] = 0;
@@ -727,13 +730,15 @@ arm_prepare_to_resume (struct lwp_info *lwp)
 	errno = 0;
 
 	if (arm_hwbp_control_is_enabled (proc_info->wpts[i].control))
-	  if (ptrace (PTRACE_SETHBPREGS, pid, -((i << 1) + 1),
-	      &proc_info->wpts[i].address) < 0)
+	  if (ptrace (PTRACE_SETHBPREGS, pid,
+		      (PTRACE_ARG3_TYPE) -((i << 1) + 1),
+		      &proc_info->wpts[i].address) < 0)
 	    perror_with_name ("Unexpected error setting watchpoint address");
 
 	if (arm_hwbp_control_is_initialized (proc_info->wpts[i].control))
-	  if (ptrace (PTRACE_SETHBPREGS, pid, -((i << 1) + 2),
-	      &proc_info->wpts[i].control) < 0)
+	  if (ptrace (PTRACE_SETHBPREGS, pid,
+		      (PTRACE_ARG3_TYPE) -((i << 1) + 2),
+		      &proc_info->wpts[i].control) < 0)
 	    perror_with_name ("Unexpected error setting watchpoint");
 
 	lwp_info->wpts_changed[i] = 0;
@@ -834,8 +839,10 @@ struct linux_target_ops the_low_target = {
   arm_arch_setup,
   arm_num_regs,
   arm_regmap,
+  NULL,
   arm_cannot_fetch_register,
   arm_cannot_store_register,
+  NULL, /* fetch_register */
   arm_get_pc,
   arm_set_pc,
 
diff --git a/gdb/gdbserver/linux-bfin-low.c b/gdb/gdbserver/linux-bfin-low.c
index 5e5aed2..d5b0361 100644
--- a/gdb/gdbserver/linux-bfin-low.c
+++ b/gdb/gdbserver/linux-bfin-low.c
@@ -94,8 +94,10 @@ struct linux_target_ops the_low_target = {
   init_registers_bfin,
   bfin_num_regs,
   bfin_regmap,
+  NULL,
   bfin_cannot_fetch_register,
   bfin_cannot_store_register,
+  NULL, /* fetch_register */
   bfin_get_pc,
   bfin_set_pc,
   bfin_breakpoint,
diff --git a/gdb/gdbserver/linux-cris-low.c b/gdb/gdbserver/linux-cris-low.c
index 60188b2..0c92e62 100644
--- a/gdb/gdbserver/linux-cris-low.c
+++ b/gdb/gdbserver/linux-cris-low.c
@@ -112,8 +112,10 @@ struct linux_target_ops the_low_target = {
   init_registers_cris,
   cris_num_regs,
   cris_regmap,
+  NULL,
   cris_cannot_fetch_register,
   cris_cannot_store_register,
+  NULL, /* fetch_register */
   cris_get_pc,
   cris_set_pc,
   (const unsigned char *) &cris_breakpoint,
diff --git a/gdb/gdbserver/linux-crisv32-low.c b/gdb/gdbserver/linux-crisv32-low.c
index e0e5504..1cc4cd1 100644
--- a/gdb/gdbserver/linux-crisv32-low.c
+++ b/gdb/gdbserver/linux-crisv32-low.c
@@ -376,6 +376,8 @@ struct linux_target_ops the_low_target = {
   NULL,
   NULL,
   NULL,
+  NULL,
+  NULL, /* fetch_register */
   cris_get_pc,
   cris_set_pc,
   (const unsigned char *) &cris_breakpoint,
diff --git a/gdb/gdbserver/linux-ia64-low.c b/gdb/gdbserver/linux-ia64-low.c
index 1b0ad81..c8fa603 100644
--- a/gdb/gdbserver/linux-ia64-low.c
+++ b/gdb/gdbserver/linux-ia64-low.c
@@ -256,7 +256,7 @@ static int ia64_regmap[] =
     -1, -1, -1, -1, -1, -1, -1, -1, -1,
     PT_AR_PFS,
     PT_AR_LC,
-    -1,		/* Not available: EC, the Epilog Count register */
+    PT_AR_EC,
     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
@@ -278,10 +278,54 @@ ia64_cannot_fetch_register (int regno)
   return 0;
 }
 
+/* GDB register numbers.  */
+#define IA64_GR0_REGNUM		0
+#define IA64_FR0_REGNUM		128
+#define IA64_FR1_REGNUM		129
+
+static int
+ia64_fetch_register (struct regcache *regcache, int regnum)
+{
+  /* r0 cannot be fetched but is always zero.  */
+  if (regnum == IA64_GR0_REGNUM)
+    {
+      const gdb_byte zero[8] = { 0 };
+
+      gdb_assert (sizeof (zero) == register_size (regnum));
+      supply_register (regcache, regnum, zero);
+      return 1;
+    }
+
+  /* fr0 cannot be fetched but is always zero.  */
+  if (regnum == IA64_FR0_REGNUM)
+    {
+      const gdb_byte f_zero[16] = { 0 };
+
+      gdb_assert (sizeof (f_zero) == register_size (regnum));
+      supply_register (regcache, regnum, f_zero);
+      return 1;
+    }
+
+  /* fr1 cannot be fetched but is always one (1.0).  */
+  if (regnum == IA64_FR1_REGNUM)
+    {
+      const gdb_byte f_one[16] =
+	{ 0, 0, 0, 0, 0, 0, 0, 0x80, 0xff, 0xff, 0, 0, 0, 0, 0, 0 };
+
+      gdb_assert (sizeof (f_one) == register_size (regnum));
+      supply_register (regcache, regnum, f_one);
+      return 1;
+    }
+
+  return 0;
+}
+
 struct linux_target_ops the_low_target = {
   init_registers_ia64,
   ia64_num_regs,
   ia64_regmap,
+  NULL,
   ia64_cannot_fetch_register,
   ia64_cannot_store_register,
+  ia64_fetch_register,
 };
diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
index 1a1b39a..a476031 100644
--- a/gdb/gdbserver/linux-low.c
+++ b/gdb/gdbserver/linux-low.c
@@ -19,6 +19,7 @@
 #include "server.h"
 #include "linux-low.h"
 #include "linux-osdata.h"
+#include "agent.h"
 
 #include <sys/wait.h>
 #include <stdio.h>
@@ -77,10 +78,42 @@
 
 #ifdef __UCLIBC__
 #if !(defined(__UCLIBC_HAS_MMU__) || defined(__ARCH_HAS_MMU__))
+/* PTRACE_TEXT_ADDR and friends.  */
+#include <asm/ptrace.h>
 #define HAS_NOMMU
 #endif
 #endif
 
+#ifndef HAVE_ELF32_AUXV_T
+/* Copied from glibc's elf.h.  */
+typedef struct
+{
+  uint32_t a_type;		/* Entry type */
+  union
+    {
+      uint32_t a_val;		/* Integer value */
+      /* We use to have pointer elements added here.  We cannot do that,
+	 though, since it does not work when using 32-bit definitions
+	 on 64-bit platforms and vice versa.  */
+    } a_un;
+} Elf32_auxv_t;
+#endif
+
+#ifndef HAVE_ELF64_AUXV_T
+/* Copied from glibc's elf.h.  */
+typedef struct
+{
+  uint64_t a_type;		/* Entry type */
+  union
+    {
+      uint64_t a_val;		/* Integer value */
+      /* We use to have pointer elements added here.  We cannot do that,
+	 though, since it does not work when using 32-bit definitions
+	 on 64-bit platforms and vice versa.  */
+    } a_un;
+} Elf64_auxv_t;
+#endif
+
 /* ``all_threads'' is keyed by the LWP ID, which we use as the GDB protocol
    representation of the thread ID.
 
@@ -92,14 +125,69 @@
 
 struct inferior_list all_lwps;
 
-/* A list of all unknown processes which receive stop signals.  Some other
-   process will presumably claim each of these as forked children
-   momentarily.  */
+/* A list of all unknown processes which receive stop signals.  Some
+   other process will presumably claim each of these as forked
+   children momentarily.  */
+
+struct simple_pid_list
+{
+  /* The process ID.  */
+  int pid;
+
+  /* The status as reported by waitpid.  */
+  int status;
+
+  /* Next in chain.  */
+  struct simple_pid_list *next;
+};
+struct simple_pid_list *stopped_pids;
+
+/* Trivial list manipulation functions to keep track of a list of new
+   stopped processes.  */
+
+static void
+add_to_pid_list (struct simple_pid_list **listp, int pid, int status)
+{
+  struct simple_pid_list *new_pid = xmalloc (sizeof (struct simple_pid_list));
+
+  new_pid->pid = pid;
+  new_pid->status = status;
+  new_pid->next = *listp;
+  *listp = new_pid;
+}
+
+static int
+pull_pid_from_list (struct simple_pid_list **listp, int pid, int *statusp)
+{
+  struct simple_pid_list **p;
+
+  for (p = listp; *p != NULL; p = &(*p)->next)
+    if ((*p)->pid == pid)
+      {
+	struct simple_pid_list *next = (*p)->next;
+
+	*statusp = (*p)->status;
+	xfree (*p);
+	*p = next;
+	return 1;
+      }
+  return 0;
+}
+
+enum stopping_threads_kind
+  {
+    /* Not stopping threads presently.  */
+    NOT_STOPPING_THREADS,
+
+    /* Stopping threads.  */
+    STOPPING_THREADS,
 
-struct inferior_list stopped_pids;
+    /* Stopping and suspending threads.  */
+    STOPPING_AND_SUSPENDING_THREADS
+  };
 
-/* FIXME this is a bit of a hack, and could be removed.  */
-int stopping_threads;
+/* This is set while stop_all_lwps is in effect.  */
+enum stopping_threads_kind stopping_threads = NOT_STOPPING_THREADS;
 
 /* FIXME make into a target method?  */
 int using_threads = 1;
@@ -167,10 +255,6 @@ struct pending_signals
   struct pending_signals *prev;
 };
 
-#define PTRACE_ARG3_TYPE void *
-#define PTRACE_ARG4_TYPE void *
-#define PTRACE_XFER_TYPE long
-
 #ifdef HAVE_LINUX_REGSETS
 static char *disabled_regsets;
 static int num_regsets;
@@ -186,50 +270,30 @@ static int linux_event_pipe[2] = { -1, -1 };
 static void send_sigstop (struct lwp_info *lwp);
 static void wait_for_sigstop (struct inferior_list_entry *entry);
 
-/* Accepts an integer PID; Returns a string representing a file that
-   can be opened to get info for the child process.
-   Space for the result is malloc'd, caller must free.  */
-
-char *
-linux_child_pid_to_exec_file (int pid)
-{
-  char *name1, *name2;
-
-  name1 = xmalloc (MAXPATHLEN);
-  name2 = xmalloc (MAXPATHLEN);
-  memset (name2, 0, MAXPATHLEN);
-
-  sprintf (name1, "/proc/%d/exe", pid);
-  if (readlink (name1, name2, MAXPATHLEN) > 0)
-    {
-      free (name1);
-      return name2;
-    }
-  else
-    {
-      free (name2);
-      return name1;
-    }
-}
-
 /* Return non-zero if HEADER is a 64-bit ELF file.  */
 
 static int
-elf_64_header_p (const Elf64_Ehdr *header)
+elf_64_header_p (const Elf64_Ehdr *header, unsigned int *machine)
 {
-  return (header->e_ident[EI_MAG0] == ELFMAG0
-          && header->e_ident[EI_MAG1] == ELFMAG1
-          && header->e_ident[EI_MAG2] == ELFMAG2
-          && header->e_ident[EI_MAG3] == ELFMAG3
-          && header->e_ident[EI_CLASS] == ELFCLASS64);
+  if (header->e_ident[EI_MAG0] == ELFMAG0
+      && header->e_ident[EI_MAG1] == ELFMAG1
+      && header->e_ident[EI_MAG2] == ELFMAG2
+      && header->e_ident[EI_MAG3] == ELFMAG3)
+    {
+      *machine = header->e_machine;
+      return header->e_ident[EI_CLASS] == ELFCLASS64;
+
+    }
+  *machine = EM_NONE;
+  return -1;
 }
 
 /* Return non-zero if FILE is a 64-bit ELF file,
    zero if the file is not a 64-bit ELF file,
    and -1 if the file is not accessible or doesn't exist.  */
 
-int
-elf_64_file_p (const char *file)
+static int
+elf_64_file_p (const char *file, unsigned int *machine)
 {
   Elf64_Ehdr header;
   int fd;
@@ -245,7 +309,19 @@ elf_64_file_p (const char *file)
     }
   close (fd);
 
-  return elf_64_header_p (&header);
+  return elf_64_header_p (&header, machine);
+}
+
+/* Accepts an integer PID; Returns true if the executable PID is
+   running is a 64-bit ELF file..  */
+
+int
+linux_pid_exe_is_elf_64_file (int pid, unsigned int *machine)
+{
+  char file[MAXPATHLEN];
+
+  sprintf (file, "/proc/%d/exe", pid);
+  return elf_64_file_p (file, machine);
 }
 
 static void
@@ -367,12 +443,12 @@ handle_extended_wait (struct lwp_info *event_child, int wstat)
     {
       ptid_t ptid;
       unsigned long new_pid;
-      int ret, status = W_STOPCODE (SIGSTOP);
+      int ret, status;
 
       ptrace (PTRACE_GETEVENTMSG, lwpid_of (event_child), 0, &new_pid);
 
       /* If we haven't already seen the new PID stop, wait for it now.  */
-      if (! pull_pid_from_list (&stopped_pids, new_pid))
+      if (!pull_pid_from_list (&stopped_pids, new_pid, &status))
 	{
 	  /* The new child has a pending SIGSTOP.  We can't affect it until it
 	     hits the SIGSTOP, but we're already attached.  */
@@ -399,12 +475,17 @@ handle_extended_wait (struct lwp_info *event_child, int wstat)
 	 before calling linux_resume_one_lwp.  */
       new_lwp->stopped = 1;
 
+     /* If we're suspending all threads, leave this one suspended
+	too.  */
+      if (stopping_threads == STOPPING_AND_SUSPENDING_THREADS)
+	new_lwp->suspended = 1;
+
       /* Normally we will get the pending SIGSTOP.  But in some cases
 	 we might get another signal delivered to the group first.
 	 If we do get another signal, be sure not to lose it.  */
       if (WSTOPSIG (status) == SIGSTOP)
 	{
-	  if (stopping_threads)
+	  if (stopping_threads != NOT_STOPPING_THREADS)
 	    new_lwp->stop_pc = get_stop_pc (new_lwp);
 	  else
 	    linux_resume_one_lwp (new_lwp, 0, 0, NULL);
@@ -413,7 +494,7 @@ handle_extended_wait (struct lwp_info *event_child, int wstat)
 	{
 	  new_lwp->stop_expected = 1;
 
-	  if (stopping_threads)
+	  if (stopping_threads != NOT_STOPPING_THREADS)
 	    {
 	      new_lwp->stop_pc = get_stop_pc (new_lwp);
 	      new_lwp->status_pending_p = 1;
@@ -568,6 +649,19 @@ linux_create_inferior (char *program, char **allargs)
 
       setpgid (0, 0);
 
+      /* If gdbserver is connected to gdb via stdio, redirect the inferior's
+	 stdout to stderr so that inferior i/o doesn't corrupt the connection.
+	 Also, redirect stdin to /dev/null.  */
+      if (remote_connection_is_stdio ())
+	{
+	  close (0);
+	  open ("/dev/null", O_RDONLY);
+	  dup2 (2, 1);
+	  if (write (2, "stdin/stdout redirected\n",
+		     sizeof ("stdin/stdout redirected\n") - 1) < 0)
+	    /* Errors ignored.  */;
+	}
+
       execv (program, allargs);
       if (errno == ENOENT)
 	execvp (program, allargs);
@@ -609,6 +703,8 @@ linux_attach_lwp_1 (unsigned long lwpid, int initial)
 
   if (ptrace (PTRACE_ATTACH, lwpid, 0, 0) != 0)
     {
+      struct buffer buffer;
+
       if (!initial)
 	{
 	  /* If we fail to attach to an LWP, just warn.  */
@@ -617,10 +713,13 @@ linux_attach_lwp_1 (unsigned long lwpid, int initial)
 	  fflush (stderr);
 	  return;
 	}
-      else
-	/* If we fail to attach to a process, report an error.  */
-	error ("Cannot attach to lwp %ld: %s (%d)\n", lwpid,
-	       strerror (errno), errno);
+
+      /* If we fail to attach to a process, report an error.  */
+      buffer_init (&buffer);
+      linux_ptrace_attach_warnings (lwpid, &buffer);
+      buffer_grow_str0 (&buffer, "");
+      error ("%sCannot attach to lwp %ld: %s (%d)", buffer_finish (&buffer),
+	     lwpid, strerror (errno), errno);
     }
 
   if (initial)
@@ -644,6 +743,33 @@ linux_attach_lwp_1 (unsigned long lwpid, int initial)
      ptrace call on this LWP.  */
   new_lwp->must_set_ptrace_flags = 1;
 
+  if (linux_proc_pid_is_stopped (lwpid))
+    {
+      if (debug_threads)
+	fprintf (stderr,
+		 "Attached to a stopped process\n");
+
+      /* The process is definitely stopped.  It is in a job control
+	 stop, unless the kernel predates the TASK_STOPPED /
+	 TASK_TRACED distinction, in which case it might be in a
+	 ptrace stop.  Make sure it is in a ptrace stop; from there we
+	 can kill it, signal it, et cetera.
+
+	 First make sure there is a pending SIGSTOP.  Since we are
+	 already attached, the process can not transition from stopped
+	 to running without a PTRACE_CONT; so we know this signal will
+	 go into the queue.  The SIGSTOP generated by PTRACE_ATTACH is
+	 probably already in the queue (unless this kernel is old
+	 enough to use TASK_STOPPED for ptrace stops); but since
+	 SIGSTOP is not an RT signal, it can only be queued once.  */
+      kill_lwp (lwpid, SIGSTOP);
+
+      /* Finally, resume the stopped process.  This will deliver the
+	 SIGSTOP (or a higher priority signal, just like normal
+	 PTRACE_ATTACH), which we'll catch later on.  */
+      ptrace (PTRACE_CONT, lwpid, 0, 0);
+    }
+
   /* The next time we wait for this LWP we'll see a SIGSTOP as PTRACE_ATTACH
      brings it to a halt.
 
@@ -691,7 +817,7 @@ linux_attach_lwp (unsigned long lwpid)
 /* Attach to PID.  If PID is the tgid, attach to it and all
    of its threads.  */
 
-int
+static int
 linux_attach (unsigned long pid)
 {
   /* Attach to PID.  We will check for other threads
@@ -802,10 +928,49 @@ last_thread_of_process_p (struct thread_info *thread)
 			 second_thread_of_pid_p, &counter) == NULL);
 }
 
-/* Kill the inferior lwp.  */
+/* Kill LWP.  */
+
+static void
+linux_kill_one_lwp (struct lwp_info *lwp)
+{
+  int pid = lwpid_of (lwp);
+
+  /* PTRACE_KILL is unreliable.  After stepping into a signal handler,
+     there is no signal context, and ptrace(PTRACE_KILL) (or
+     ptrace(PTRACE_CONT, SIGKILL), pretty much the same) acts like
+     ptrace(CONT, pid, 0,0) and just resumes the tracee.  A better
+     alternative is to kill with SIGKILL.  We only need one SIGKILL
+     per process, not one for each thread.  But since we still support
+     linuxthreads, and we also support debugging programs using raw
+     clone without CLONE_THREAD, we send one for each thread.  For
+     years, we used PTRACE_KILL only, so we're being a bit paranoid
+     about some old kernels where PTRACE_KILL might work better
+     (dubious if there are any such, but that's why it's paranoia), so
+     we try SIGKILL first, PTRACE_KILL second, and so we're fine
+     everywhere.  */
+
+  errno = 0;
+  kill (pid, SIGKILL);
+  if (debug_threads)
+    fprintf (stderr,
+	     "LKL:  kill (SIGKILL) %s, 0, 0 (%s)\n",
+	     target_pid_to_str (ptid_of (lwp)),
+	     errno ? strerror (errno) : "OK");
+
+  errno = 0;
+  ptrace (PTRACE_KILL, pid, 0, 0);
+  if (debug_threads)
+    fprintf (stderr,
+	     "LKL:  PTRACE_KILL %s, 0, 0 (%s)\n",
+	     target_pid_to_str (ptid_of (lwp)),
+	     errno ? strerror (errno) : "OK");
+}
+
+/* Callback for `find_inferior'.  Kills an lwp of a given process,
+   except the leader.  */
 
 static int
-linux_kill_one_lwp (struct inferior_list_entry *entry, void *args)
+kill_one_lwp_callback (struct inferior_list_entry *entry, void *args)
 {
   struct thread_info *thread = (struct thread_info *) entry;
   struct lwp_info *lwp = get_thread_lwp (thread);
@@ -830,7 +995,7 @@ linux_kill_one_lwp (struct inferior_list_entry *entry, void *args)
 
   do
     {
-      ptrace (PTRACE_KILL, lwpid_of (lwp), 0, 0);
+      linux_kill_one_lwp (lwp);
 
       /* Make sure it died.  The loop is most likely unnecessary.  */
       pid = linux_wait_for_event (lwp->head.id, &wstat, __WALL);
@@ -855,7 +1020,7 @@ linux_kill (int pid)
      first, as PTRACE_KILL will not work otherwise.  */
   stop_all_lwps (0, NULL);
 
-  find_inferior (&all_threads, linux_kill_one_lwp, &pid);
+  find_inferior (&all_threads, kill_one_lwp_callback , &pid);
 
   /* See the comment in linux_kill_one_lwp.  We did not kill the first
      thread in the list, so do so now.  */
@@ -875,7 +1040,7 @@ linux_kill (int pid)
 
       do
 	{
-	  ptrace (PTRACE_KILL, lwpid_of (lwp), 0, 0);
+	  linux_kill_one_lwp (lwp);
 
 	  /* Make sure it died.  The loop is most likely unnecessary.  */
 	  lwpid = linux_wait_for_event (lwp->head.id, &wstat, __WALL);
@@ -890,34 +1055,128 @@ linux_kill (int pid)
   return 0;
 }
 
+/* Get pending signal of THREAD, for detaching purposes.  This is the
+   signal the thread last stopped for, which we need to deliver to the
+   thread when detaching, otherwise, it'd be suppressed/lost.  */
+
+static int
+get_detach_signal (struct thread_info *thread)
+{
+  enum gdb_signal signo = GDB_SIGNAL_0;
+  int status;
+  struct lwp_info *lp = get_thread_lwp (thread);
+
+  if (lp->status_pending_p)
+    status = lp->status_pending;
+  else
+    {
+      /* If the thread had been suspended by gdbserver, and it stopped
+	 cleanly, then it'll have stopped with SIGSTOP.  But we don't
+	 want to deliver that SIGSTOP.  */
+      if (thread->last_status.kind != TARGET_WAITKIND_STOPPED
+	  || thread->last_status.value.sig == GDB_SIGNAL_0)
+	return 0;
+
+      /* Otherwise, we may need to deliver the signal we
+	 intercepted.  */
+      status = lp->last_status;
+    }
+
+  if (!WIFSTOPPED (status))
+    {
+      if (debug_threads)
+	fprintf (stderr,
+		 "GPS: lwp %s hasn't stopped: no pending signal\n",
+		 target_pid_to_str (ptid_of (lp)));
+      return 0;
+    }
+
+  /* Extended wait statuses aren't real SIGTRAPs.  */
+  if (WSTOPSIG (status) == SIGTRAP && status >> 16 != 0)
+    {
+      if (debug_threads)
+	fprintf (stderr,
+		 "GPS: lwp %s had stopped with extended "
+		 "status: no pending signal\n",
+		 target_pid_to_str (ptid_of (lp)));
+      return 0;
+    }
+
+  signo = gdb_signal_from_host (WSTOPSIG (status));
+
+  if (program_signals_p && !program_signals[signo])
+    {
+      if (debug_threads)
+	fprintf (stderr,
+		 "GPS: lwp %s had signal %s, but it is in nopass state\n",
+		 target_pid_to_str (ptid_of (lp)),
+		 gdb_signal_to_string (signo));
+      return 0;
+    }
+  else if (!program_signals_p
+	   /* If we have no way to know which signals GDB does not
+	      want to have passed to the program, assume
+	      SIGTRAP/SIGINT, which is GDB's default.  */
+	   && (signo == GDB_SIGNAL_TRAP || signo == GDB_SIGNAL_INT))
+    {
+      if (debug_threads)
+	fprintf (stderr,
+		 "GPS: lwp %s had signal %s, "
+		 "but we don't know if we should pass it.  Default to not.\n",
+		 target_pid_to_str (ptid_of (lp)),
+		 gdb_signal_to_string (signo));
+      return 0;
+    }
+  else
+    {
+      if (debug_threads)
+	fprintf (stderr,
+		 "GPS: lwp %s has pending signal %s: delivering it.\n",
+		 target_pid_to_str (ptid_of (lp)),
+		 gdb_signal_to_string (signo));
+
+      return WSTOPSIG (status);
+    }
+}
+
 static int
 linux_detach_one_lwp (struct inferior_list_entry *entry, void *args)
 {
   struct thread_info *thread = (struct thread_info *) entry;
   struct lwp_info *lwp = get_thread_lwp (thread);
   int pid = * (int *) args;
+  int sig;
 
   if (ptid_get_pid (entry->id) != pid)
     return 0;
 
-  /* If this process is stopped but is expecting a SIGSTOP, then make
-     sure we take care of that now.  This isn't absolutely guaranteed
-     to collect the SIGSTOP, but is fairly likely to.  */
+  /* If there is a pending SIGSTOP, get rid of it.  */
   if (lwp->stop_expected)
     {
-      int wstat;
-      /* Clear stop_expected, so that the SIGSTOP will be reported.  */
+      if (debug_threads)
+	fprintf (stderr,
+		 "Sending SIGCONT to %s\n",
+		 target_pid_to_str (ptid_of (lwp)));
+
+      kill_lwp (lwpid_of (lwp), SIGCONT);
       lwp->stop_expected = 0;
-      linux_resume_one_lwp (lwp, 0, 0, NULL);
-      linux_wait_for_event (lwp->head.id, &wstat, __WALL);
     }
 
   /* Flush any pending changes to the process's registers.  */
   regcache_invalidate_one ((struct inferior_list_entry *)
 			   get_lwp_thread (lwp));
 
+  /* Pass on any pending signal for this thread.  */
+  sig = get_detach_signal (thread);
+
   /* Finally, let it resume.  */
-  ptrace (PTRACE_DETACH, lwpid_of (lwp), 0, 0);
+  if (the_low_target.prepare_to_resume != NULL)
+    the_low_target.prepare_to_resume (lwp);
+  if (ptrace (PTRACE_DETACH, lwpid_of (lwp), 0,
+	      (PTRACE_ARG4_TYPE) (long) sig) < 0)
+    error (_("Can't detach %s: %s"),
+	   target_pid_to_str (ptid_of (lwp)),
+	   strerror (errno));
 
   delete_lwp (lwp);
   return 0;
@@ -1103,7 +1362,7 @@ retry:
      was reported to us by the kernel.  Save its PID.  */
   if (child == NULL && WIFSTOPPED (*wstatp))
     {
-      add_pid_to_list (&stopped_pids, ret);
+      add_to_pid_list (&stopped_pids, ret, *wstatp);
       goto retry;
     }
   else if (child == NULL)
@@ -1280,7 +1539,7 @@ maybe_move_out_of_jump_pad (struct lwp_info *lwp, int *wstat)
   if ((wstat == NULL
        || (WIFSTOPPED (*wstat) && WSTOPSIG (*wstat) != SIGTRAP))
       && supports_fast_tracepoints ()
-      && in_process_agent_loaded ())
+      && agent_loaded_p ())
     {
       struct fast_tpoint_collect_status status;
       int r;
@@ -1554,17 +1813,17 @@ ptid_t step_over_bkpt;
    the stopped child otherwise.  */
 
 static int
-linux_wait_for_event_1 (ptid_t ptid, int *wstat, int options)
+linux_wait_for_event (ptid_t ptid, int *wstat, int options)
 {
   struct lwp_info *event_child, *requested_child;
+  ptid_t wait_ptid;
 
   event_child = NULL;
   requested_child = NULL;
 
   /* Check for a lwp with a pending status.  */
 
-  if (ptid_equal (ptid, minus_one_ptid)
-      || ptid_equal (pid_to_ptid (ptid_get_pid (ptid)), ptid))
+  if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
     {
       event_child = (struct lwp_info *)
 	find_inferior (&all_lwps, status_pending_p_callback, &ptid);
@@ -1575,7 +1834,7 @@ linux_wait_for_event_1 (ptid_t ptid, int *wstat, int options)
     {
       requested_child = find_lwp_pid (ptid);
 
-      if (!stopping_threads
+      if (stopping_threads == NOT_STOPPING_THREADS
 	  && requested_child->status_pending_p
 	  && requested_child->collecting_fast_tracepoint)
 	{
@@ -1606,13 +1865,24 @@ linux_wait_for_event_1 (ptid_t ptid, int *wstat, int options)
       return lwpid_of (event_child);
     }
 
+  if (ptid_is_pid (ptid))
+    {
+      /* A request to wait for a specific tgid.  This is not possible
+	 with waitpid, so instead, we wait for any child, and leave
+	 children we're not interested in right now with a pending
+	 status to report later.  */
+      wait_ptid = minus_one_ptid;
+    }
+  else
+    wait_ptid = ptid;
+
   /* We only enter this loop if no process has a pending wait status.  Thus
      any action taken in response to a wait status inside this loop is
      responding as soon as we detect the status, not after any pending
      events.  */
   while (1)
     {
-      event_child = linux_wait_for_lwp (ptid, wstat, options);
+      event_child = linux_wait_for_lwp (wait_ptid, wstat, options);
 
       if ((options & WNOHANG) && event_child == NULL)
 	{
@@ -1624,6 +1894,19 @@ linux_wait_for_event_1 (ptid_t ptid, int *wstat, int options)
       if (event_child == NULL)
 	error ("event from unknown child");
 
+      if (ptid_is_pid (ptid)
+	  && ptid_get_pid (ptid) != ptid_get_pid (ptid_of (event_child)))
+	{
+	  if (! WIFSTOPPED (*wstat))
+	    mark_lwp_dead (event_child, *wstat);
+	  else
+	    {
+	      event_child->status_pending_p = 1;
+	      event_child->status_pending = *wstat;
+	    }
+	  continue;
+	}
+
       current_inferior = get_lwp_thread (event_child);
 
       /* Check for thread exit.  */
@@ -1699,7 +1982,7 @@ linux_wait_for_event_1 (ptid_t ptid, int *wstat, int options)
 	  event_child->stop_expected = 0;
 
 	  should_stop = (current_inferior->last_resume_kind == resume_stop
-			 || stopping_threads);
+			 || stopping_threads != NOT_STOPPING_THREADS);
 
 	  if (!should_stop)
 	    {
@@ -1716,48 +1999,6 @@ linux_wait_for_event_1 (ptid_t ptid, int *wstat, int options)
   return 0;
 }
 
-static int
-linux_wait_for_event (ptid_t ptid, int *wstat, int options)
-{
-  ptid_t wait_ptid;
-
-  if (ptid_is_pid (ptid))
-    {
-      /* A request to wait for a specific tgid.  This is not possible
-	 with waitpid, so instead, we wait for any child, and leave
-	 children we're not interested in right now with a pending
-	 status to report later.  */
-      wait_ptid = minus_one_ptid;
-    }
-  else
-    wait_ptid = ptid;
-
-  while (1)
-    {
-      int event_pid;
-
-      event_pid = linux_wait_for_event_1 (wait_ptid, wstat, options);
-
-      if (event_pid > 0
-	  && ptid_is_pid (ptid) && ptid_get_pid (ptid) != event_pid)
-	{
-	  struct lwp_info *event_child
-	    = find_lwp_pid (pid_to_ptid (event_pid));
-
-	  if (! WIFSTOPPED (*wstat))
-	    mark_lwp_dead (event_child, *wstat);
-	  else
-	    {
-	      event_child->status_pending_p = 1;
-	      event_child->status_pending = *wstat;
-	    }
-	}
-      else
-	return event_pid;
-    }
-}
-
-
 /* Count the LWP's that have had events.  */
 
 static int
@@ -2021,10 +2262,10 @@ linux_stabilize_threads (void)
 	  /* Lock it.  */
 	  lwp->suspended++;
 
-	  if (ourstatus.value.sig != TARGET_SIGNAL_0
+	  if (ourstatus.value.sig != GDB_SIGNAL_0
 	      || current_inferior->last_resume_kind == resume_stop)
 	    {
-	      wstat = W_STOPCODE (target_signal_to_host (ourstatus.value.sig));
+	      wstat = W_STOPCODE (gdb_signal_to_host (ourstatus.value.sig));
 	      enqueue_one_deferred_signal (lwp, &wstat);
 	    }
 	}
@@ -2145,7 +2386,7 @@ retry:
 	  else
 	    {
 	      ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
-	      ourstatus->value.sig = target_signal_from_host (WTERMSIG (w));
+	      ourstatus->value.sig = gdb_signal_from_host (WTERMSIG (w));
 
 	      if (debug_threads)
 		fprintf (stderr,
@@ -2229,7 +2470,7 @@ retry:
   if (WIFSTOPPED (w)
       && WSTOPSIG (w) != SIGTRAP
       && supports_fast_tracepoints ()
-      && in_process_agent_loaded ())
+      && agent_loaded_p ())
     {
       if (debug_threads)
 	fprintf (stderr,
@@ -2317,7 +2558,7 @@ Check if we're already there.\n",
 	      if (stabilizing_threads)
 		{
 		  ourstatus->kind = TARGET_WAITKIND_STOPPED;
-		  ourstatus->value.sig = TARGET_SIGNAL_0;
+		  ourstatus->value.sig = GDB_SIGNAL_0;
 		  return ptid_of (event_child);
 		}
 	    }
@@ -2344,7 +2585,7 @@ Check if we're already there.\n",
 	       || WSTOPSIG (w) == __SIGRTMIN + 1))
 	  ||
 #endif
-	  (pass_signals[target_signal_from_host (WSTOPSIG (w))]
+	  (pass_signals[gdb_signal_from_host (WSTOPSIG (w))]
 	   && !(WSTOPSIG (w) == SIGSTOP
 		&& current_inferior->last_resume_kind == resume_stop))))
     {
@@ -2376,7 +2617,11 @@ Check if we're already there.\n",
 		   || event_child->stopped_by_watchpoint
 		   || (!step_over_finished
 		       && !bp_explains_trap && !trace_event)
-		   || gdb_breakpoint_here (event_child->stop_pc));
+		   || (gdb_breakpoint_here (event_child->stop_pc)
+		       && gdb_condition_true_at_breakpoint (event_child->stop_pc)
+		       && gdb_no_commands_at_breakpoint (event_child->stop_pc)));
+
+  run_breakpoint_commands (event_child->stop_pc);
 
   /* We found no reason GDB would want us to stop.  We either hit one
      of our own breakpoints, or finished an internal step GDB
@@ -2459,6 +2704,15 @@ Check if we're already there.\n",
 	 why.  */
       find_inferior (&all_lwps, cancel_breakpoints_callback, event_child);
 
+      /* If we were going a step-over, all other threads but the stepping one
+	 had been paused in start_step_over, with their suspend counts
+	 incremented.  We don't want to do a full unstop/unpause, because we're
+	 in all-stop mode (so we want threads stopped), but we still need to
+	 unsuspend the other threads, to decrement their `suspended' count
+	 back.  */
+      if (step_over_finished)
+	unsuspend_all_lwps (event_child);
+
       /* Stabilize threads (move out of jump pads).  */
       stabilize_threads ();
     }
@@ -2480,18 +2734,18 @@ Check if we're already there.\n",
       /* A thread that has been requested to stop by GDB with vCont;t,
 	 and it stopped cleanly, so report as SIG0.  The use of
 	 SIGSTOP is an implementation detail.  */
-      ourstatus->value.sig = TARGET_SIGNAL_0;
+      ourstatus->value.sig = GDB_SIGNAL_0;
     }
   else if (current_inferior->last_resume_kind == resume_stop
 	   && WSTOPSIG (w) != SIGSTOP)
     {
       /* A thread that has been requested to stop by GDB with vCont;t,
 	 but, it stopped for other reasons.  */
-      ourstatus->value.sig = target_signal_from_host (WSTOPSIG (w));
+      ourstatus->value.sig = gdb_signal_from_host (WSTOPSIG (w));
     }
   else
     {
-      ourstatus->value.sig = target_signal_from_host (WSTOPSIG (w));
+      ourstatus->value.sig = gdb_signal_from_host (WSTOPSIG (w));
     }
 
   gdb_assert (ptid_equal (step_over_bkpt, null_ptid));
@@ -2773,7 +3027,7 @@ stuck_in_jump_pad_callback (struct inferior_list_entry *entry, void *data)
 
   /* Allow debugging the jump pad, gdb_collect, etc..  */
   return (supports_fast_tracepoints ()
-	  && in_process_agent_loaded ()
+	  && agent_loaded_p ()
 	  && (gdb_breakpoint_here (lwp->stop_pc)
 	      || lwp->stopped_by_watchpoint
 	      || thread->last_resume_kind == resume_step)
@@ -2840,14 +3094,19 @@ lwp_running (struct inferior_list_entry *entry, void *data)
 static void
 stop_all_lwps (int suspend, struct lwp_info *except)
 {
-  stopping_threads = 1;
+  /* Should not be called recursively.  */
+  gdb_assert (stopping_threads == NOT_STOPPING_THREADS);
+
+  stopping_threads = (suspend
+		      ? STOPPING_AND_SUSPENDING_THREADS
+		      : STOPPING_THREADS);
 
   if (suspend)
     find_inferior (&all_lwps, suspend_and_send_sigstop_callback, except);
   else
     find_inferior (&all_lwps, send_sigstop_callback, except);
   for_each_inferior (&all_lwps, wait_for_sigstop);
-  stopping_threads = 0;
+  stopping_threads = NOT_STOPPING_THREADS;
 }
 
 /* Resume execution of the inferior process.
@@ -3083,10 +3342,11 @@ linux_set_resume_request (struct inferior_list_entry *entry, void *arg)
       ptid_t ptid = r->resume[ndx].thread;
       if (ptid_equal (ptid, minus_one_ptid)
 	  || ptid_equal (ptid, entry->id)
-	  || (ptid_is_pid (ptid)
-	      && (ptid_get_pid (ptid) == pid_of (lwp)))
-	  || (ptid_get_lwp (ptid) == -1
-	      && (ptid_get_pid (ptid) == pid_of (lwp))))
+	  /* Handle both 'pPID' and 'pPID.-1' as meaning 'all threads
+	     of PID'.  */
+	  || (ptid_get_pid (ptid) == pid_of (lwp)
+	      && (ptid_is_pid (ptid)
+		  || ptid_get_lwp (ptid) == -1)))
 	{
 	  if (r->resume[ndx].kind == resume_stop
 	      && thread->last_resume_kind == resume_stop)
@@ -3239,8 +3499,11 @@ need_step_over_p (struct inferior_list_entry *entry, void *dummy)
   if (breakpoint_here (pc) || fast_tracepoint_jump_here (pc))
     {
       /* Don't step over a breakpoint that GDB expects to hit
-	 though.  */
-      if (gdb_breakpoint_here (pc))
+	 though.  If the condition is being evaluated on the target's side
+	 and it evaluate to false, step over this breakpoint as well.  */
+      if (gdb_breakpoint_here (pc)
+	  && gdb_condition_true_at_breakpoint (pc)
+	  && gdb_no_commands_at_breakpoint (pc))
 	{
 	  if (debug_threads)
 	    fprintf (stderr,
@@ -3720,166 +3983,32 @@ unstop_all_lwps (int unsuspend, struct lwp_info *except)
     find_inferior (&all_lwps, proceed_one_lwp, except);
 }
 
-#ifdef HAVE_LINUX_USRREGS
-
-int
-register_addr (int regnum)
-{
-  int addr;
-
-  if (regnum < 0 || regnum >= the_low_target.num_regs)
-    error ("Invalid register number %d.", regnum);
 
-  addr = the_low_target.regmap[regnum];
+#ifdef HAVE_LINUX_REGSETS
 
-  return addr;
-}
+#define use_linux_regsets 1
 
-/* Fetch one register.  */
-static void
-fetch_register (struct regcache *regcache, int regno)
+static int
+regsets_fetch_inferior_registers (struct regcache *regcache)
 {
-  CORE_ADDR regaddr;
-  int i, size;
-  char *buf;
+  struct regset_info *regset;
+  int saw_general_regs = 0;
   int pid;
+  struct iovec iov;
 
-  if (regno >= the_low_target.num_regs)
-    return;
-  if ((*the_low_target.cannot_fetch_register) (regno))
-    return;
-
-  regaddr = register_addr (regno);
-  if (regaddr == -1)
-    return;
-
-  size = ((register_size (regno) + sizeof (PTRACE_XFER_TYPE) - 1)
-	  & -sizeof (PTRACE_XFER_TYPE));
-  buf = alloca (size);
+  regset = target_regsets;
 
   pid = lwpid_of (get_thread_lwp (current_inferior));
-  for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
+  while (regset->size >= 0)
     {
-      errno = 0;
-      *(PTRACE_XFER_TYPE *) (buf + i) =
-	ptrace (PTRACE_PEEKUSER, pid,
-		/* Coerce to a uintptr_t first to avoid potential gcc warning
-		   of coercing an 8 byte integer to a 4 byte pointer.  */
-		(PTRACE_ARG3_TYPE) (uintptr_t) regaddr, 0);
-      regaddr += sizeof (PTRACE_XFER_TYPE);
-      if (errno != 0)
-	error ("reading register %d: %s", regno, strerror (errno));
-    }
+      void *buf, *data;
+      int nt_type, res;
 
-  if (the_low_target.supply_ptrace_register)
-    the_low_target.supply_ptrace_register (regcache, regno, buf);
-  else
-    supply_register (regcache, regno, buf);
-}
-
-/* Store one register.  */
-static void
-store_register (struct regcache *regcache, int regno)
-{
-  CORE_ADDR regaddr;
-  int i, size;
-  char *buf;
-  int pid;
-
-  if (regno >= the_low_target.num_regs)
-    return;
-  if ((*the_low_target.cannot_store_register) (regno))
-    return;
-
-  regaddr = register_addr (regno);
-  if (regaddr == -1)
-    return;
-
-  size = ((register_size (regno) + sizeof (PTRACE_XFER_TYPE) - 1)
-	  & -sizeof (PTRACE_XFER_TYPE));
-  buf = alloca (size);
-  memset (buf, 0, size);
-
-  if (the_low_target.collect_ptrace_register)
-    the_low_target.collect_ptrace_register (regcache, regno, buf);
-  else
-    collect_register (regcache, regno, buf);
-
-  pid = lwpid_of (get_thread_lwp (current_inferior));
-  for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
-    {
-      errno = 0;
-      ptrace (PTRACE_POKEUSER, pid,
-	    /* Coerce to a uintptr_t first to avoid potential gcc warning
-	       about coercing an 8 byte integer to a 4 byte pointer.  */
-	      (PTRACE_ARG3_TYPE) (uintptr_t) regaddr,
-	      (PTRACE_ARG4_TYPE) *(PTRACE_XFER_TYPE *) (buf + i));
-      if (errno != 0)
-	{
-	  /* At this point, ESRCH should mean the process is
-	     already gone, in which case we simply ignore attempts
-	     to change its registers.  See also the related
-	     comment in linux_resume_one_lwp.  */
-	  if (errno == ESRCH)
-	    return;
-
-	  if ((*the_low_target.cannot_store_register) (regno) == 0)
-	    error ("writing register %d: %s", regno, strerror (errno));
-	}
-      regaddr += sizeof (PTRACE_XFER_TYPE);
-    }
-}
-
-/* Fetch all registers, or just one, from the child process.  */
-static void
-usr_fetch_inferior_registers (struct regcache *regcache, int regno)
-{
-  if (regno == -1)
-    for (regno = 0; regno < the_low_target.num_regs; regno++)
-      fetch_register (regcache, regno);
-  else
-    fetch_register (regcache, regno);
-}
-
-/* Store our register values back into the inferior.
-   If REGNO is -1, do this for all registers.
-   Otherwise, REGNO specifies which register (so we can save time).  */
-static void
-usr_store_inferior_registers (struct regcache *regcache, int regno)
-{
-  if (regno == -1)
-    for (regno = 0; regno < the_low_target.num_regs; regno++)
-      store_register (regcache, regno);
-  else
-    store_register (regcache, regno);
-}
-#endif /* HAVE_LINUX_USRREGS */
-
-
-
-#ifdef HAVE_LINUX_REGSETS
-
-static int
-regsets_fetch_inferior_registers (struct regcache *regcache)
-{
-  struct regset_info *regset;
-  int saw_general_regs = 0;
-  int pid;
-  struct iovec iov;
-
-  regset = target_regsets;
-
-  pid = lwpid_of (get_thread_lwp (current_inferior));
-  while (regset->size >= 0)
-    {
-      void *buf, *data;
-      int nt_type, res;
-
-      if (regset->size == 0 || disabled_regsets[regset - target_regsets])
-	{
-	  regset ++;
-	  continue;
-	}
+      if (regset->size == 0 || disabled_regsets[regset - target_regsets])
+	{
+	  regset ++;
+	  continue;
+	}
 
       buf = xmalloc (regset->size);
 
@@ -3894,7 +4023,8 @@ regsets_fetch_inferior_registers (struct regcache *regcache)
 	data = buf;
 
 #ifndef __sparc__
-      res = ptrace (regset->get_request, pid, nt_type, data);
+      res = ptrace (regset->get_request, pid,
+		    (PTRACE_ARG3_TYPE) (long) nt_type, data);
 #else
       res = ptrace (regset->get_request, pid, data, nt_type);
 #endif
@@ -3967,9 +4097,10 @@ regsets_store_inferior_registers (struct regcache *regcache)
 	data = buf;
 
 #ifndef __sparc__
-      res = ptrace (regset->get_request, pid, nt_type, data);
+      res = ptrace (regset->get_request, pid,
+		    (PTRACE_ARG3_TYPE) (long) nt_type, data);
 #else
-      res = ptrace (regset->get_request, pid, &iov, data);
+      res = ptrace (regset->get_request, pid, data, nt_type);
 #endif
 
       if (res == 0)
@@ -3979,7 +4110,8 @@ regsets_store_inferior_registers (struct regcache *regcache)
 
 	  /* Only now do we write the register set.  */
 #ifndef __sparc__
-	  res = ptrace (regset->set_request, pid, nt_type, data);
+	  res = ptrace (regset->set_request, pid,
+			(PTRACE_ARG3_TYPE) (long) nt_type, data);
 #else
 	  res = ptrace (regset->set_request, pid, data, nt_type);
 #endif
@@ -4018,34 +4150,232 @@ regsets_store_inferior_registers (struct regcache *regcache)
     return 0;
   else
     return 1;
-  return 0;
 }
 
-#endif /* HAVE_LINUX_REGSETS */
+#else /* !HAVE_LINUX_REGSETS */
 
+#define use_linux_regsets 0
+#define regsets_fetch_inferior_registers(regcache) 1
+#define regsets_store_inferior_registers(regcache) 1
 
-void
-linux_fetch_registers (struct regcache *regcache, int regno)
-{
-#ifdef HAVE_LINUX_REGSETS
-  if (regsets_fetch_inferior_registers (regcache) == 0)
-    return;
 #endif
+
+/* Return 1 if register REGNO is supported by one of the regset ptrace
+   calls or 0 if it has to be transferred individually.  */
+
+static int
+linux_register_in_regsets (int regno)
+{
+  unsigned char mask = 1 << (regno % 8);
+  size_t index = regno / 8;
+
+  return (use_linux_regsets
+	  && (the_low_target.regset_bitmap == NULL
+	      || (the_low_target.regset_bitmap[index] & mask) != 0));
+}
+
 #ifdef HAVE_LINUX_USRREGS
-  usr_fetch_inferior_registers (regcache, regno);
+
+int
+register_addr (int regnum)
+{
+  int addr;
+
+  if (regnum < 0 || regnum >= the_low_target.num_regs)
+    error ("Invalid register number %d.", regnum);
+
+  addr = the_low_target.regmap[regnum];
+
+  return addr;
+}
+
+/* Fetch one register.  */
+static void
+fetch_register (struct regcache *regcache, int regno)
+{
+  CORE_ADDR regaddr;
+  int i, size;
+  char *buf;
+  int pid;
+
+  if (regno >= the_low_target.num_regs)
+    return;
+  if ((*the_low_target.cannot_fetch_register) (regno))
+    return;
+
+  regaddr = register_addr (regno);
+  if (regaddr == -1)
+    return;
+
+  size = ((register_size (regno) + sizeof (PTRACE_XFER_TYPE) - 1)
+	  & -sizeof (PTRACE_XFER_TYPE));
+  buf = alloca (size);
+
+  pid = lwpid_of (get_thread_lwp (current_inferior));
+  for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
+    {
+      errno = 0;
+      *(PTRACE_XFER_TYPE *) (buf + i) =
+	ptrace (PTRACE_PEEKUSER, pid,
+		/* Coerce to a uintptr_t first to avoid potential gcc warning
+		   of coercing an 8 byte integer to a 4 byte pointer.  */
+		(PTRACE_ARG3_TYPE) (uintptr_t) regaddr, 0);
+      regaddr += sizeof (PTRACE_XFER_TYPE);
+      if (errno != 0)
+	error ("reading register %d: %s", regno, strerror (errno));
+    }
+
+  if (the_low_target.supply_ptrace_register)
+    the_low_target.supply_ptrace_register (regcache, regno, buf);
+  else
+    supply_register (regcache, regno, buf);
+}
+
+/* Store one register.  */
+static void
+store_register (struct regcache *regcache, int regno)
+{
+  CORE_ADDR regaddr;
+  int i, size;
+  char *buf;
+  int pid;
+
+  if (regno >= the_low_target.num_regs)
+    return;
+  if ((*the_low_target.cannot_store_register) (regno))
+    return;
+
+  regaddr = register_addr (regno);
+  if (regaddr == -1)
+    return;
+
+  size = ((register_size (regno) + sizeof (PTRACE_XFER_TYPE) - 1)
+	  & -sizeof (PTRACE_XFER_TYPE));
+  buf = alloca (size);
+  memset (buf, 0, size);
+
+  if (the_low_target.collect_ptrace_register)
+    the_low_target.collect_ptrace_register (regcache, regno, buf);
+  else
+    collect_register (regcache, regno, buf);
+
+  pid = lwpid_of (get_thread_lwp (current_inferior));
+  for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
+    {
+      errno = 0;
+      ptrace (PTRACE_POKEUSER, pid,
+	    /* Coerce to a uintptr_t first to avoid potential gcc warning
+	       about coercing an 8 byte integer to a 4 byte pointer.  */
+	      (PTRACE_ARG3_TYPE) (uintptr_t) regaddr,
+	      (PTRACE_ARG4_TYPE) *(PTRACE_XFER_TYPE *) (buf + i));
+      if (errno != 0)
+	{
+	  /* At this point, ESRCH should mean the process is
+	     already gone, in which case we simply ignore attempts
+	     to change its registers.  See also the related
+	     comment in linux_resume_one_lwp.  */
+	  if (errno == ESRCH)
+	    return;
+
+	  if ((*the_low_target.cannot_store_register) (regno) == 0)
+	    error ("writing register %d: %s", regno, strerror (errno));
+	}
+      regaddr += sizeof (PTRACE_XFER_TYPE);
+    }
+}
+
+/* Fetch all registers, or just one, from the child process.
+   If REGNO is -1, do this for all registers, skipping any that are
+   assumed to have been retrieved by regsets_fetch_inferior_registers,
+   unless ALL is non-zero.
+   Otherwise, REGNO specifies which register (so we can save time).  */
+static void
+usr_fetch_inferior_registers (struct regcache *regcache, int regno, int all)
+{
+  if (regno == -1)
+    {
+      for (regno = 0; regno < the_low_target.num_regs; regno++)
+	if (all || !linux_register_in_regsets (regno))
+	  fetch_register (regcache, regno);
+    }
+  else
+    fetch_register (regcache, regno);
+}
+
+/* Store our register values back into the inferior.
+   If REGNO is -1, do this for all registers, skipping any that are
+   assumed to have been saved by regsets_store_inferior_registers,
+   unless ALL is non-zero.
+   Otherwise, REGNO specifies which register (so we can save time).  */
+static void
+usr_store_inferior_registers (struct regcache *regcache, int regno, int all)
+{
+  if (regno == -1)
+    {
+      for (regno = 0; regno < the_low_target.num_regs; regno++)
+	if (all || !linux_register_in_regsets (regno))
+	  store_register (regcache, regno);
+    }
+  else
+    store_register (regcache, regno);
+}
+
+#else /* !HAVE_LINUX_USRREGS */
+
+#define usr_fetch_inferior_registers(regcache, regno, all) do {} while (0)
+#define usr_store_inferior_registers(regcache, regno, all) do {} while (0)
+
 #endif
+
+
+void
+linux_fetch_registers (struct regcache *regcache, int regno)
+{
+  int use_regsets;
+  int all = 0;
+
+  if (regno == -1)
+    {
+      if (the_low_target.fetch_register != NULL)
+	for (regno = 0; regno < the_low_target.num_regs; regno++)
+	  (*the_low_target.fetch_register) (regcache, regno);
+
+      all = regsets_fetch_inferior_registers (regcache);
+      usr_fetch_inferior_registers (regcache, -1, all);
+    }
+  else
+    {
+      if (the_low_target.fetch_register != NULL
+	  && (*the_low_target.fetch_register) (regcache, regno))
+	return;
+
+      use_regsets = linux_register_in_regsets (regno);
+      if (use_regsets)
+	all = regsets_fetch_inferior_registers (regcache);
+      if (!use_regsets || all)
+	usr_fetch_inferior_registers (regcache, regno, 1);
+    }
 }
 
 void
 linux_store_registers (struct regcache *regcache, int regno)
 {
-#ifdef HAVE_LINUX_REGSETS
-  if (regsets_store_inferior_registers (regcache) == 0)
-    return;
-#endif
-#ifdef HAVE_LINUX_USRREGS
-  usr_store_inferior_registers (regcache, regno);
-#endif
+  int use_regsets;
+  int all = 0;
+
+  if (regno == -1)
+    {
+      all = regsets_store_inferior_registers (regcache);
+      usr_store_inferior_registers (regcache, regno, all);
+    }
+  else
+    {
+      use_regsets = linux_register_in_regsets (regno);
+      if (use_regsets)
+	all = regsets_store_inferior_registers (regcache);
+      if (!use_regsets || all)
+	usr_store_inferior_registers (regcache, regno, 1);
+    }
 }
 
 
@@ -4055,23 +4385,20 @@ linux_store_registers (struct regcache *regcache, int regno)
 static int
 linux_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
 {
+  int pid = lwpid_of (get_thread_lwp (current_inferior));
+  register PTRACE_XFER_TYPE *buffer;
+  register CORE_ADDR addr;
+  register int count;
+  char filename[64];
   register int i;
-  /* Round starting address down to longword boundary.  */
-  register CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
-  /* Round ending address up; get number of longwords that makes.  */
-  register int count
-    = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
-      / sizeof (PTRACE_XFER_TYPE);
-  /* Allocate buffer of that many longwords.  */
-  register PTRACE_XFER_TYPE *buffer
-    = (PTRACE_XFER_TYPE *) alloca (count * sizeof (PTRACE_XFER_TYPE));
+  int ret;
   int fd;
-  char filename[64];
-  int pid = lwpid_of (get_thread_lwp (current_inferior));
 
   /* Try using /proc.  Don't bother for one word.  */
   if (len >= 3 * sizeof (long))
     {
+      int bytes;
+
       /* We could keep this file open and cache it - possibly one per
 	 thread.  That requires some juggling, but is even faster.  */
       sprintf (filename, "/proc/%d/mem", pid);
@@ -4084,38 +4411,59 @@ linux_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
 	 32-bit platforms (for instance, SPARC debugging a SPARC64
 	 application).  */
 #ifdef HAVE_PREAD64
-      if (pread64 (fd, myaddr, len, memaddr) != len)
+      bytes = pread64 (fd, myaddr, len, memaddr);
 #else
-      if (lseek (fd, memaddr, SEEK_SET) == -1 || read (fd, myaddr, len) != len)
+      bytes = -1;
+      if (lseek (fd, memaddr, SEEK_SET) != -1)
+	bytes = read (fd, myaddr, len);
 #endif
-	{
-	  close (fd);
-	  goto no_proc;
-	}
 
       close (fd);
-      return 0;
+      if (bytes == len)
+	return 0;
+
+      /* Some data was read, we'll try to get the rest with ptrace.  */
+      if (bytes > 0)
+	{
+	  memaddr += bytes;
+	  myaddr += bytes;
+	  len -= bytes;
+	}
     }
 
  no_proc:
+  /* Round starting address down to longword boundary.  */
+  addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
+  /* Round ending address up; get number of longwords that makes.  */
+  count = ((((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
+	   / sizeof (PTRACE_XFER_TYPE));
+  /* Allocate buffer of that many longwords.  */
+  buffer = (PTRACE_XFER_TYPE *) alloca (count * sizeof (PTRACE_XFER_TYPE));
+
   /* Read all the longwords */
+  errno = 0;
   for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
     {
-      errno = 0;
       /* Coerce the 3rd arg to a uintptr_t first to avoid potential gcc warning
 	 about coercing an 8 byte integer to a 4 byte pointer.  */
       buffer[i] = ptrace (PTRACE_PEEKTEXT, pid,
 			  (PTRACE_ARG3_TYPE) (uintptr_t) addr, 0);
       if (errno)
-	return errno;
+	break;
     }
+  ret = errno;
 
   /* Copy appropriate bytes out of the buffer.  */
-  memcpy (myaddr,
-	  (char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
-	  len);
+  if (i > 0)
+    {
+      i *= sizeof (PTRACE_XFER_TYPE);
+      i -= memaddr & (sizeof (PTRACE_XFER_TYPE) - 1);
+      memcpy (myaddr,
+	      (char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
+	      i < len ? i : len);
+    }
 
-  return 0;
+  return ret;
 }
 
 /* Copy LEN bytes of data from debugger memory at MYADDR to inferior's
@@ -4458,6 +4806,9 @@ linux_stopped_data_address (void)
 }
 
 #if defined(__UCLIBC__) && defined(HAS_NOMMU)
+#if ! (defined(PT_TEXT_ADDR) \
+       || defined(PT_DATA_ADDR) \
+       || defined(PT_TEXT_END_ADDR))
 #if defined(__mcoldfire__)
 /* These should really be defined in the kernel's ptrace.h header.  */
 #define PT_TEXT_ADDR 49*4
@@ -4472,6 +4823,7 @@ linux_stopped_data_address (void)
 #define PT_DATA_ADDR     (0x10004*4)
 #define PT_TEXT_END_ADDR (0x10008*4)
 #endif
+#endif
 
 /* Under uClinux, programs are loaded at non-zero offsets, which we need
    to tell gdb about.  */
@@ -4522,7 +4874,7 @@ linux_qxfer_osdata (const char *annex,
    layout of the inferiors' architecture.  */
 
 static void
-siginfo_fixup (struct siginfo *siginfo, void *inf_siginfo, int direction)
+siginfo_fixup (siginfo_t *siginfo, void *inf_siginfo, int direction)
 {
   int done = 0;
 
@@ -4534,9 +4886,9 @@ siginfo_fixup (struct siginfo *siginfo, void *inf_siginfo, int direction)
   if (!done)
     {
       if (direction == 1)
-	memcpy (siginfo, inf_siginfo, sizeof (struct siginfo));
+	memcpy (siginfo, inf_siginfo, sizeof (siginfo_t));
       else
-	memcpy (inf_siginfo, siginfo, sizeof (struct siginfo));
+	memcpy (inf_siginfo, siginfo, sizeof (siginfo_t));
     }
 }
 
@@ -4545,8 +4897,8 @@ linux_xfer_siginfo (const char *annex, unsigned char *readbuf,
 		    unsigned const char *writebuf, CORE_ADDR offset, int len)
 {
   int pid;
-  struct siginfo siginfo;
-  char inf_siginfo[sizeof (struct siginfo)];
+  siginfo_t siginfo;
+  char inf_siginfo[sizeof (siginfo_t)];
 
   if (current_inferior == NULL)
     return -1;
@@ -4694,6 +5046,12 @@ linux_supports_disable_randomization (void)
 #endif
 }
 
+static int
+linux_supports_agent (void)
+{
+  return 1;
+}
+
 /* Enumerate spufs IDs for process PID.  */
 static int
 spu_enumerate_spu_ids (long pid, unsigned char *buf, CORE_ADDR offset, int len)
@@ -5083,7 +5441,16 @@ get_dynamic (const int pid, const int is_elf64)
 
   if (relocation == -1)
     {
-      warning ("Unexpected missing PT_PHDR");
+      /* PT_PHDR is optional, but necessary for PIE in general.  Fortunately
+	 any real world executables, including PIE executables, have always
+	 PT_PHDR present.  PT_PHDR is not present in some shared libraries or
+	 in fpc (Free Pascal 2.4) binaries but neither of those have a need for
+	 or present DT_DEBUG anyway (fpc binaries are statically linked).
+
+	 Therefore if there exists DT_DEBUG there is always also PT_PHDR.
+
+	 GDB could find RELOCATION also from AT_ENTRY - e_entry.  */
+
       return 0;
     }
 
@@ -5109,7 +5476,9 @@ get_dynamic (const int pid, const int is_elf64)
 }
 
 /* Return &_r_debug in the inferior, or -1 if not present.  Return value
-   can be 0 if the inferior does not yet have the library list initialized.  */
+   can be 0 if the inferior does not yet have the library list initialized.
+   We look for DT_MIPS_RLD_MAP first.  MIPS executables use this instead of
+   DT_DEBUG, although they sometimes contain an unused DT_DEBUG entry too.  */
 
 static CORE_ADDR
 get_r_debug (const int pid, const int is_elf64)
@@ -5117,19 +5486,37 @@ get_r_debug (const int pid, const int is_elf64)
   CORE_ADDR dynamic_memaddr;
   const int dyn_size = is_elf64 ? sizeof (Elf64_Dyn) : sizeof (Elf32_Dyn);
   unsigned char buf[sizeof (Elf64_Dyn)];  /* The larger of the two.  */
+  CORE_ADDR map = -1;
 
   dynamic_memaddr = get_dynamic (pid, is_elf64);
   if (dynamic_memaddr == 0)
-    return (CORE_ADDR) -1;
+    return map;
 
   while (linux_read_memory (dynamic_memaddr, buf, dyn_size) == 0)
     {
       if (is_elf64)
 	{
 	  Elf64_Dyn *const dyn = (Elf64_Dyn *) buf;
+#ifdef DT_MIPS_RLD_MAP
+	  union
+	    {
+	      Elf64_Xword map;
+	      unsigned char buf[sizeof (Elf64_Xword)];
+	    }
+	  rld_map;
+
+	  if (dyn->d_tag == DT_MIPS_RLD_MAP)
+	    {
+	      if (linux_read_memory (dyn->d_un.d_val,
+				     rld_map.buf, sizeof (rld_map.buf)) == 0)
+		return rld_map.map;
+	      else
+		break;
+	    }
+#endif	/* DT_MIPS_RLD_MAP */
 
-	  if (dyn->d_tag == DT_DEBUG)
-	    return dyn->d_un.d_val;
+	  if (dyn->d_tag == DT_DEBUG && map == -1)
+	    map = dyn->d_un.d_val;
 
 	  if (dyn->d_tag == DT_NULL)
 	    break;
@@ -5137,9 +5524,26 @@ get_r_debug (const int pid, const int is_elf64)
       else
 	{
 	  Elf32_Dyn *const dyn = (Elf32_Dyn *) buf;
+#ifdef DT_MIPS_RLD_MAP
+	  union
+	    {
+	      Elf32_Word map;
+	      unsigned char buf[sizeof (Elf32_Word)];
+	    }
+	  rld_map;
+
+	  if (dyn->d_tag == DT_MIPS_RLD_MAP)
+	    {
+	      if (linux_read_memory (dyn->d_un.d_val,
+				     rld_map.buf, sizeof (rld_map.buf)) == 0)
+		return rld_map.map;
+	      else
+		break;
+	    }
+#endif	/* DT_MIPS_RLD_MAP */
 
-	  if (dyn->d_tag == DT_DEBUG)
-	    return dyn->d_un.d_val;
+	  if (dyn->d_tag == DT_DEBUG && map == -1)
+	    map = dyn->d_un.d_val;
 
 	  if (dyn->d_tag == DT_NULL)
 	    break;
@@ -5148,7 +5552,7 @@ get_r_debug (const int pid, const int is_elf64)
       dynamic_memaddr += dyn_size;
     }
 
-  return (CORE_ADDR) -1;
+  return map;
 }
 
 /* Read one pointer from MEMADDR in the inferior.  */
@@ -5156,8 +5560,30 @@ get_r_debug (const int pid, const int is_elf64)
 static int
 read_one_ptr (CORE_ADDR memaddr, CORE_ADDR *ptr, int ptr_size)
 {
-  *ptr = 0;
-  return linux_read_memory (memaddr, (unsigned char *) ptr, ptr_size);
+  int ret;
+
+  /* Go through a union so this works on either big or little endian
+     hosts, when the inferior's pointer size is smaller than the size
+     of CORE_ADDR.  It is assumed the inferior's endianness is the
+     same of the superior's.  */
+  union
+  {
+    CORE_ADDR core_addr;
+    unsigned int ui;
+    unsigned char uc;
+  } addr;
+
+  ret = linux_read_memory (memaddr, &addr.uc, ptr_size);
+  if (ret == 0)
+    {
+      if (ptr_size == sizeof (CORE_ADDR))
+	*ptr = addr.core_addr;
+      else if (ptr_size == sizeof (unsigned int))
+	*ptr = addr.ui;
+      else
+	gdb_assert_not_reached ("unhandled pointer size");
+    }
+  return ret;
 }
 
 struct link_map_offsets
@@ -5184,7 +5610,7 @@ struct link_map_offsets
     int l_prev_offset;
   };
 
-/* Construct qXfer:libraries:read reply.  */
+/* Construct qXfer:libraries-svr4:read reply.  */
 
 static int
 linux_qxfer_libraries_svr4 (const char *annex, unsigned char *readbuf,
@@ -5219,6 +5645,7 @@ linux_qxfer_libraries_svr4 (const char *annex, unsigned char *readbuf,
       32     /* l_prev offset in link_map.  */
     };
   const struct link_map_offsets *lmo;
+  unsigned int machine;
 
   if (writebuf != NULL)
     return -2;
@@ -5227,13 +5654,19 @@ linux_qxfer_libraries_svr4 (const char *annex, unsigned char *readbuf,
 
   pid = lwpid_of (get_thread_lwp (current_inferior));
   xsnprintf (filename, sizeof filename, "/proc/%d/exe", pid);
-  is_elf64 = elf_64_file_p (filename);
+  is_elf64 = elf_64_file_p (filename, &machine);
   lmo = is_elf64 ? &lmo_64bit_offsets : &lmo_32bit_offsets;
 
   if (priv->r_debug == 0)
     priv->r_debug = get_r_debug (pid, is_elf64);
 
-  if (priv->r_debug == (CORE_ADDR) -1 || priv->r_debug == 0)
+  /* We failed to find DT_DEBUG.  Such situation will not change for this
+     inferior - do not retry it.  Report it to GDB as E01, see for the reasons
+     at the GDB solib-svr4.c side.  */
+  if (priv->r_debug == (CORE_ADDR) -1)
+    return -1;
+
+  if (priv->r_debug == 0)
     {
       document = xstrdup ("<library-list-svr4 version=\"1.0\"/>\n");
     }
@@ -5336,7 +5769,13 @@ linux_qxfer_libraries_svr4 (const char *annex, unsigned char *readbuf,
 	  lm_addr = l_next;
 	}
     done:
-      strcpy (p, "</library-list-svr4>");
+      if (!header_done)
+	{
+	  /* Empty list; terminate `<library-list-svr4'.  */
+	  strcpy (p, "/>");
+	}
+      else
+	strcpy (p, "</library-list-svr4>");
     }
 
   document_len = strlen (document);
@@ -5416,6 +5855,7 @@ static struct target_ops linux_target_ops = {
   linux_supports_disable_randomization,
   linux_get_min_fast_tracepoint_insn_len,
   linux_qxfer_libraries_svr4,
+  linux_supports_agent,
 };
 
 static void
@@ -5438,6 +5878,7 @@ initialize_low (void)
 		       the_low_target.breakpoint_len);
   linux_init_signals ();
   linux_test_for_tracefork ();
+  linux_ptrace_init_warnings ();
 #ifdef HAVE_LINUX_REGSETS
   for (num_regsets = 0; target_regsets[num_regsets].size >= 0; num_regsets++)
     ;
diff --git a/gdb/gdbserver/linux-low.h b/gdb/gdbserver/linux-low.h
index 2befc48..99d882a 100644
--- a/gdb/gdbserver/linux-low.h
+++ b/gdb/gdbserver/linux-low.h
@@ -20,9 +20,15 @@
 #ifdef HAVE_THREAD_DB_H
 #include <thread_db.h>
 #endif
+#include <signal.h>
 
+#include "gdbthread.h"
 #include "gdb_proc_service.h"
 
+#define PTRACE_ARG3_TYPE void *
+#define PTRACE_ARG4_TYPE void *
+#define PTRACE_XFER_TYPE long
+
 #ifdef HAVE_LINUX_REGSETS
 typedef void (*regset_fill_func) (struct regcache *, void *);
 typedef void (*regset_store_func) (struct regcache *, const void *);
@@ -46,8 +52,6 @@ struct regset_info
 extern struct regset_info target_regsets[];
 #endif
 
-struct siginfo;
-
 struct process_info_private
 {
   /* Arch-specific additions.  */
@@ -70,12 +74,26 @@ struct linux_target_ops
 
   int num_regs;
   int *regmap;
+
+  /* Regset support bitmap: 1 for registers that are transferred as a part
+     of a regset, 0 for ones that need to be handled individually.  This
+     can be NULL if all registers are transferred with regsets or regsets
+     are not supported.  */
+  unsigned char *regset_bitmap;
   int (*cannot_fetch_register) (int);
 
   /* Returns 0 if we can store the register, 1 if we can not
      store the register, and 2 if failure to store the register
      is acceptable.  */
   int (*cannot_store_register) (int);
+
+  /* Hook to fetch a register in some non-standard way.  Used for
+     example by backends that have read-only registers with hardcoded
+     values (e.g., IA64's gr0/fr0/fr1).  Returns true if register
+     REGNO was supplied, false if not, and we should fallback to the
+     standard ptrace methods.  */
+  int (*fetch_register) (struct regcache *regcache, int regno);
+
   CORE_ADDR (*get_pc) (struct regcache *regcache);
   void (*set_pc) (struct regcache *regcache, CORE_ADDR newpc);
   const unsigned char *breakpoint;
@@ -103,7 +121,7 @@ struct linux_target_ops
      Returns true if any conversion was done; false otherwise.
      If DIRECTION is 1, then copy from INF to NATIVE.
      If DIRECTION is 0, copy from NATIVE to INF.  */
-  int (*siginfo_fixup) (struct siginfo *native, void *inf, int direction);
+  int (*siginfo_fixup) (siginfo_t *native, void *inf, int direction);
 
   /* Hook to call when a new process is created or attached to.
      If extra per-process architecture-specific data is needed,
@@ -265,8 +283,7 @@ struct lwp_info
 
 extern struct inferior_list all_lwps;
 
-char *linux_child_pid_to_exec_file (int pid);
-int elf_64_file_p (const char *file);
+int linux_pid_exe_is_elf_64_file (int pid, unsigned int *machine);
 
 void linux_attach_lwp (unsigned long pid);
 struct lwp_info *find_lwp_pid (ptid_t ptid);
diff --git a/gdb/gdbserver/linux-m32r-low.c b/gdb/gdbserver/linux-m32r-low.c
index 6df1a0a..29bb3f7 100644
--- a/gdb/gdbserver/linux-m32r-low.c
+++ b/gdb/gdbserver/linux-m32r-low.c
@@ -91,8 +91,10 @@ struct linux_target_ops the_low_target = {
   init_registers_m32r,
   m32r_num_regs,
   m32r_regmap,
+  NULL,
   m32r_cannot_fetch_register,
   m32r_cannot_store_register,
+  NULL, /* fetch_register */
   m32r_get_pc,
   m32r_set_pc,
   (const unsigned char *) &m32r_breakpoint,
diff --git a/gdb/gdbserver/linux-m68k-low.c b/gdb/gdbserver/linux-m68k-low.c
index 9843d17..6769dac 100644
--- a/gdb/gdbserver/linux-m68k-low.c
+++ b/gdb/gdbserver/linux-m68k-low.c
@@ -179,8 +179,10 @@ struct linux_target_ops the_low_target = {
   init_registers_m68k,
   m68k_num_regs,
   m68k_regmap,
+  NULL,
   m68k_cannot_fetch_register,
   m68k_cannot_store_register,
+  NULL, /* fetch_register */
   m68k_get_pc,
   m68k_set_pc,
   m68k_breakpoint,
diff --git a/gdb/gdbserver/linux-mips-low.c b/gdb/gdbserver/linux-mips-low.c
index 8baf1b0..8e37298 100644
--- a/gdb/gdbserver/linux-mips-low.c
+++ b/gdb/gdbserver/linux-mips-low.c
@@ -27,8 +27,17 @@
 
 /* Defined in auto-generated file mips-linux.c.  */
 void init_registers_mips_linux (void);
+/* Defined in auto-generated file mips-dsp-linux.c.  */
+void init_registers_mips_dsp_linux (void);
 /* Defined in auto-generated file mips64-linux.c.  */
 void init_registers_mips64_linux (void);
+/* Defined in auto-generated file mips64-dsp-linux.c.  */
+void init_registers_mips64_dsp_linux (void);
+
+#ifdef __mips64
+#define init_registers_mips_linux init_registers_mips64_linux
+#define init_registers_mips_dsp_linux init_registers_mips64_dsp_linux
+#endif
 
 #ifndef PTRACE_GET_THREAD_AREA
 #define PTRACE_GET_THREAD_AREA 25
@@ -39,9 +48,15 @@ void init_registers_mips64_linux (void);
 #endif
 
 #define mips_num_regs 73
+#define mips_dsp_num_regs 80
 
 #include <asm/ptrace.h>
 
+#ifndef DSP_BASE
+#define DSP_BASE 71
+#define DSP_CONTROL 77
+#endif
+
 union mips_register
 {
   unsigned char buf[8];
@@ -53,27 +68,84 @@ union mips_register
 
 /* Return the ptrace ``address'' of register REGNO. */
 
-static int mips_regmap[] = {
-  -1,  1,  2,  3,  4,  5,  6,  7,
-  8,  9,  10, 11, 12, 13, 14, 15,
-  16, 17, 18, 19, 20, 21, 22, 23,
-  24, 25, 26, 27, 28, 29, 30, 31,
+#define mips_base_regs							\
+  -1,  1,  2,  3,  4,  5,  6,  7,					\
+  8,  9,  10, 11, 12, 13, 14, 15,					\
+  16, 17, 18, 19, 20, 21, 22, 23,					\
+  24, 25, 26, 27, 28, 29, 30, 31,					\
+									\
+  -1, MMLO, MMHI, BADVADDR, CAUSE, PC,					\
+									\
+  FPR_BASE,      FPR_BASE + 1,  FPR_BASE + 2,  FPR_BASE + 3,		\
+  FPR_BASE + 4,  FPR_BASE + 5,  FPR_BASE + 6,  FPR_BASE + 7,		\
+  FPR_BASE + 8,  FPR_BASE + 9,  FPR_BASE + 10, FPR_BASE + 11,		\
+  FPR_BASE + 12, FPR_BASE + 13, FPR_BASE + 14, FPR_BASE + 15,		\
+  FPR_BASE + 16, FPR_BASE + 17, FPR_BASE + 18, FPR_BASE + 19,		\
+  FPR_BASE + 20, FPR_BASE + 21, FPR_BASE + 22, FPR_BASE + 23,		\
+  FPR_BASE + 24, FPR_BASE + 25, FPR_BASE + 26, FPR_BASE + 27,		\
+  FPR_BASE + 28, FPR_BASE + 29, FPR_BASE + 30, FPR_BASE + 31,		\
+  FPC_CSR, FPC_EIR
+
+#define mips_dsp_regs							\
+  DSP_BASE,      DSP_BASE + 1,  DSP_BASE + 2,  DSP_BASE + 3,		\
+  DSP_BASE + 4,  DSP_BASE + 5,						\
+  DSP_CONTROL
+
+static int mips_regmap[mips_num_regs] = {
+  mips_base_regs,
+  0
+};
 
-  -1, MMLO, MMHI, BADVADDR, CAUSE, PC,
+static int mips_dsp_regmap[mips_dsp_num_regs] = {
+  mips_base_regs,
+  mips_dsp_regs,
+  0
+};
 
-  FPR_BASE,      FPR_BASE + 1,  FPR_BASE + 2,  FPR_BASE + 3,
-  FPR_BASE + 4,  FPR_BASE + 5,  FPR_BASE + 6,  FPR_BASE + 7,
-  FPR_BASE + 8,  FPR_BASE + 8,  FPR_BASE + 10, FPR_BASE + 11,
-  FPR_BASE + 12, FPR_BASE + 13, FPR_BASE + 14, FPR_BASE + 15,
-  FPR_BASE + 16, FPR_BASE + 17, FPR_BASE + 18, FPR_BASE + 19,
-  FPR_BASE + 20, FPR_BASE + 21, FPR_BASE + 22, FPR_BASE + 23,
-  FPR_BASE + 24, FPR_BASE + 25, FPR_BASE + 26, FPR_BASE + 27,
-  FPR_BASE + 28, FPR_BASE + 29, FPR_BASE + 30, FPR_BASE + 31,
-  FPC_CSR, FPC_EIR,
+/* DSP registers are not in any regset and can only be accessed
+   individually.  */
 
-  0
+static unsigned char mips_dsp_regset_bitmap[(mips_dsp_num_regs + 7) / 8] = {
+  0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x80
 };
 
+/* Try peeking at an arbitrarily chosen DSP register and pick the available
+   user register set accordingly.  */
+
+static void
+mips_arch_setup (void)
+{
+  static void (*init_registers) (void);
+
+  gdb_assert (current_inferior);
+
+  if (init_registers == NULL)
+    {
+      int pid = lwpid_of (get_thread_lwp (current_inferior));
+
+      ptrace (PTRACE_PEEKUSER, pid, DSP_CONTROL, 0);
+      switch (errno)
+	{
+	case 0:
+	  the_low_target.num_regs = mips_dsp_num_regs;
+	  the_low_target.regmap = mips_dsp_regmap;
+	  the_low_target.regset_bitmap = mips_dsp_regset_bitmap;
+	  init_registers = init_registers_mips_dsp_linux;
+	  break;
+	case EIO:
+	  the_low_target.num_regs = mips_num_regs;
+	  the_low_target.regmap = mips_regmap;
+	  the_low_target.regset_bitmap = NULL;
+	  init_registers = init_registers_mips_linux;
+	  break;
+	default:
+	  perror_with_name ("ptrace");
+	  break;
+	}
+    }
+  init_registers ();
+}
+
 /* From mips-linux-nat.c.  */
 
 /* Pseudo registers can not be read.  ptrace does not provide a way to
@@ -84,7 +156,7 @@ static int mips_regmap[] = {
 static int
 mips_cannot_fetch_register (int regno)
 {
-  if (mips_regmap[regno] == -1)
+  if (the_low_target.regmap[regno] == -1)
     return 1;
 
   if (find_regno ("r0") == regno)
@@ -96,7 +168,7 @@ mips_cannot_fetch_register (int regno)
 static int
 mips_cannot_store_register (int regno)
 {
-  if (mips_regmap[regno] == -1)
+  if (the_low_target.regmap[regno] == -1)
     return 1;
 
   if (find_regno ("r0") == regno)
@@ -352,15 +424,13 @@ struct regset_info target_regsets[] = {
 };
 
 struct linux_target_ops the_low_target = {
-#ifdef __mips64
-  init_registers_mips64_linux,
-#else
-  init_registers_mips_linux,
-#endif
-  mips_num_regs,
-  mips_regmap,
+  mips_arch_setup,
+  -1,
+  NULL,
+  NULL,
   mips_cannot_fetch_register,
   mips_cannot_store_register,
+  NULL, /* fetch_register */
   mips_get_pc,
   mips_set_pc,
   (const unsigned char *) &mips_breakpoint,
diff --git a/gdb/gdbserver/linux-ppc-low.c b/gdb/gdbserver/linux-ppc-low.c
index 36d3cb1..ed254fa 100644
--- a/gdb/gdbserver/linux-ppc-low.c
+++ b/gdb/gdbserver/linux-ppc-low.c
@@ -610,8 +610,10 @@ struct linux_target_ops the_low_target = {
   ppc_arch_setup,
   ppc_num_regs,
   ppc_regmap,
+  NULL,
   ppc_cannot_fetch_register,
   ppc_cannot_store_register,
+  NULL, /* fetch_register */
   ppc_get_pc,
   ppc_set_pc,
   (const unsigned char *) &ppc_breakpoint,
diff --git a/gdb/gdbserver/linux-s390-low.c b/gdb/gdbserver/linux-s390-low.c
index be8d441..ea46206 100644
--- a/gdb/gdbserver/linux-s390-low.c
+++ b/gdb/gdbserver/linux-s390-low.c
@@ -461,8 +461,10 @@ struct linux_target_ops the_low_target = {
   s390_arch_setup,
   s390_num_regs,
   s390_regmap,
+  NULL,
   s390_cannot_fetch_register,
   s390_cannot_store_register,
+  NULL, /* fetch_register */
   s390_get_pc,
   s390_set_pc,
   s390_breakpoint,
diff --git a/gdb/gdbserver/linux-sh-low.c b/gdb/gdbserver/linux-sh-low.c
index 4f2ba39..fbd67c6 100644
--- a/gdb/gdbserver/linux-sh-low.c
+++ b/gdb/gdbserver/linux-sh-low.c
@@ -112,8 +112,10 @@ struct linux_target_ops the_low_target = {
   init_registers_sh,
   sh_num_regs,
   sh_regmap,
+  NULL,
   sh_cannot_fetch_register,
   sh_cannot_store_register,
+  NULL, /* fetch_register */
   sh_get_pc,
   sh_set_pc,
   (const unsigned char *) &sh_breakpoint,
diff --git a/gdb/gdbserver/linux-sparc-low.c b/gdb/gdbserver/linux-sparc-low.c
index 834f63f..78d5409 100644
--- a/gdb/gdbserver/linux-sparc-low.c
+++ b/gdb/gdbserver/linux-sparc-low.c
@@ -119,19 +119,21 @@ sparc_fill_gregset_to_stack (struct regcache *regcache, const void *buf)
   int i;
   CORE_ADDR addr = 0;
   unsigned char tmp_reg_buf[8];
-  const int l0_regno = find_regno("l0");
+  const int l0_regno = find_regno ("l0");
   const int i7_regno = l0_regno + 15;
 
   /* These registers have to be stored in the stack.  */
-  memcpy(&addr, ((char *) buf) + sparc_regmap[find_regno("sp")], sizeof(addr));
+  memcpy (&addr,
+	  ((char *) buf) + sparc_regmap[find_regno ("sp")],
+	  sizeof (addr));
 
   addr += BIAS;
 
   for (i = l0_regno; i <= i7_regno; i++)
     {
       collect_register (regcache, i, tmp_reg_buf);
-      (*the_target->write_memory) (addr, tmp_reg_buf, sizeof(tmp_reg_buf));
-      addr += sizeof(tmp_reg_buf);
+      (*the_target->write_memory) (addr, tmp_reg_buf, sizeof (tmp_reg_buf));
+      addr += sizeof (tmp_reg_buf);
     }
 }
 
@@ -169,19 +171,21 @@ sparc_store_gregset_from_stack (struct regcache *regcache, const void *buf)
   int i;
   CORE_ADDR addr = 0;
   unsigned char tmp_reg_buf[8];
-  const int l0_regno = find_regno("l0");
+  const int l0_regno = find_regno ("l0");
   const int i7_regno = l0_regno + 15;
 
   /* These registers have to be obtained from the stack.  */
-  memcpy(&addr, ((char *) buf) + sparc_regmap[find_regno("sp")], sizeof(addr));
+  memcpy (&addr,
+	  ((char *) buf) + sparc_regmap[find_regno ("sp")],
+	  sizeof (addr));
 
   addr += BIAS;
 
   for (i = l0_regno; i <= i7_regno; i++)
     {
-      (*the_target->read_memory) (addr, tmp_reg_buf, sizeof(tmp_reg_buf));
+      (*the_target->read_memory) (addr, tmp_reg_buf, sizeof (tmp_reg_buf));
       supply_register (regcache, i, tmp_reg_buf);
-      addr += sizeof(tmp_reg_buf);
+      addr += sizeof (tmp_reg_buf);
     }
 }
 
@@ -192,7 +196,7 @@ sparc_store_gregset (struct regcache *regcache, const void *buf)
   char zerobuf[8];
   int range;
 
-  memset (zerobuf, 0, sizeof(zerobuf));
+  memset (zerobuf, 0, sizeof (zerobuf));
 
   for (range = 0; range < N_GREGS_RANGES; range++)
     for (i = gregs_ranges[range].regno_start;
@@ -241,9 +245,9 @@ sparc_breakpoint_at (CORE_ADDR where)
 {
   unsigned char insn[INSN_SIZE];
 
-  (*the_target->read_memory) (where, (unsigned char *) insn, sizeof(insn));
+  (*the_target->read_memory) (where, (unsigned char *) insn, sizeof (insn));
 
-  if (memcmp(sparc_breakpoint, insn, sizeof(insn)) == 0)
+  if (memcmp (sparc_breakpoint, insn, sizeof (insn)) == 0)
     return 1;
 
   /* If necessary, recognize more trap instructions here.  GDB only
@@ -281,8 +285,10 @@ struct linux_target_ops the_low_target = {
   sparc_num_regs,
   /* No regmap needs to be provided since this impl. doesn't use USRREGS.  */
   NULL,
+  NULL,
   sparc_cannot_fetch_register,
   sparc_cannot_store_register,
+  NULL, /* fetch_register */
   sparc_get_pc,
   /* No sparc_set_pc is needed.  */
   NULL,
diff --git a/gdb/gdbserver/linux-tic6x-low.c b/gdb/gdbserver/linux-tic6x-low.c
index 895d99d..69d538b 100644
--- a/gdb/gdbserver/linux-tic6x-low.c
+++ b/gdb/gdbserver/linux-tic6x-low.c
@@ -321,8 +321,10 @@ struct linux_target_ops the_low_target = {
   tic6x_arch_setup,
   TIC6X_NUM_REGS,
   0,
+  NULL,
   tic6x_cannot_fetch_register,
   tic6x_cannot_store_register,
+  NULL, /* fetch_register */
   tic6x_get_pc,
   tic6x_set_pc,
   (const unsigned char *) &tic6x_breakpoint,
diff --git a/gdb/gdbserver/linux-tile-low.c b/gdb/gdbserver/linux-tile-low.c
new file mode 100644
index 0000000..e7c7d11
--- /dev/null
+++ b/gdb/gdbserver/linux-tile-low.c
@@ -0,0 +1,142 @@
+/* GNU/Linux/TILE-Gx specific low level interface, GDBserver.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "server.h"
+#include "linux-low.h"
+
+#include <sys/ptrace.h>
+
+/* Defined in auto-generated file reg-tile.c.  */
+void init_registers_tile (void);
+
+#define tile_num_regs 65
+
+static int tile_regmap[] =
+{
+   0,  1,  2,  3,  4,  5,  6,  7,
+   8,  9, 10, 11, 12, 13, 14, 15,
+  16, 17, 18, 19, 20, 21, 22, 23,
+  24, 25, 26, 27, 28, 29, 30, 31,
+  32, 33, 34, 35, 36, 37, 38, 39,
+  40, 41, 42, 43, 44, 45, 46, 47,
+  48, 49, 50, 51, 52, 53, 54, 55,
+  -1, -1, -1, -1, -1, -1, -1, -1,
+  56
+};
+
+static int
+tile_cannot_fetch_register (int regno)
+{
+  if (regno >= 0 && regno < 56)
+    return 0;
+  else if (regno == 64)
+    return 0;
+  else
+    return 1;
+}
+
+static int
+tile_cannot_store_register (int regno)
+{
+  if (regno >= 0 && regno < 56)
+    return 0;
+  else if (regno == 64)
+    return 0;
+  else
+    return 1;
+}
+
+static CORE_ADDR
+tile_get_pc (struct regcache *regcache)
+{
+  unsigned long pc;
+
+  collect_register_by_name (regcache, "pc", &pc);
+  return pc;
+}
+
+static void
+tile_set_pc (struct regcache *regcache, CORE_ADDR pc)
+{
+  unsigned long newpc = pc;
+
+  supply_register_by_name (regcache, "pc", &newpc);
+}
+
+static uint64_t tile_breakpoint = 0x400b3cae70166000ULL;
+#define tile_breakpoint_len 8
+
+static int
+tile_breakpoint_at (CORE_ADDR where)
+{
+  uint64_t insn;
+
+  (*the_target->read_memory) (where, (unsigned char *) &insn, 8);
+  if (insn == tile_breakpoint)
+    return 1;
+
+  /* If necessary, recognize more trap instructions here.  GDB only uses the
+     one.  */
+  return 0;
+}
+
+static void
+tile_fill_gregset (struct regcache *regcache, void *buf)
+{
+  int i;
+
+  for (i = 0; i < tile_num_regs; i++)
+    if (tile_regmap[i] != -1)
+      collect_register (regcache, i, ((unsigned int *) buf) + tile_regmap[i]);
+}
+
+static void
+tile_store_gregset (struct regcache *regcache, const void *buf)
+{
+  int i;
+
+  for (i = 0; i < tile_num_regs; i++)
+    if (tile_regmap[i] != -1)
+      supply_register (regcache, i, ((unsigned long *) buf) + tile_regmap[i]);
+}
+
+struct regset_info target_regsets[] =
+{
+  { PTRACE_GETREGS, PTRACE_SETREGS, 0, tile_num_regs * 4,
+    GENERAL_REGS, tile_fill_gregset, tile_store_gregset },
+  { 0, 0, 0, -1, -1, NULL, NULL }
+};
+
+struct linux_target_ops the_low_target =
+{
+  init_registers_tile,
+  tile_num_regs,
+  tile_regmap,
+  NULL,
+  tile_cannot_fetch_register,
+  tile_cannot_store_register,
+  NULL,
+  tile_get_pc,
+  tile_set_pc,
+  (const unsigned char *) &tile_breakpoint,
+  tile_breakpoint_len,
+  NULL,
+  0,
+  tile_breakpoint_at,
+};
diff --git a/gdb/gdbserver/linux-x86-low.c b/gdb/gdbserver/linux-x86-low.c
index 85ffa52..4ea284e 100644
--- a/gdb/gdbserver/linux-x86-low.c
+++ b/gdb/gdbserver/linux-x86-low.c
@@ -20,6 +20,7 @@
 #include <stddef.h>
 #include <signal.h>
 #include <limits.h>
+#include <inttypes.h>
 #include "server.h"
 #include "linux-low.h"
 #include "i387-fp.h"
@@ -28,6 +29,7 @@
 #include "elf/common.h"
 
 #include "gdb_proc_service.h"
+#include "agent.h"
 
 /* Defined in auto-generated file i386-linux.c.  */
 void init_registers_i386_linux (void);
@@ -39,6 +41,10 @@ void init_registers_i386_avx_linux (void);
 void init_registers_amd64_avx_linux (void);
 /* Defined in auto-generated file i386-mmx-linux.c.  */
 void init_registers_i386_mmx_linux (void);
+/* Defined in auto-generated file x32-linux.c.  */
+void init_registers_x32_linux (void);
+/* Defined in auto-generated file x32-avx-linux.c.  */
+void init_registers_x32_avx_linux (void);
 
 static unsigned char jump_insn[] = { 0xe9, 0, 0, 0, 0 };
 static unsigned char small_jump_insn[] = { 0x66, 0xe9, 0, 0 };
@@ -654,6 +660,7 @@ static void
 x86_linux_prepare_to_resume (struct lwp_info *lwp)
 {
   ptid_t ptid = ptid_of (lwp);
+  int clear_status = 0;
 
   if (lwp->arch_private->debug_registers_changed)
     {
@@ -664,14 +671,23 @@ x86_linux_prepare_to_resume (struct lwp_info *lwp)
 	= &proc->private->arch_private->debug_reg_state;
 
       for (i = DR_FIRSTADDR; i <= DR_LASTADDR; i++)
-	x86_linux_dr_set (ptid, i, state->dr_mirror[i]);
+	if (state->dr_ref_count[i] > 0)
+	  {
+	    x86_linux_dr_set (ptid, i, state->dr_mirror[i]);
+
+	    /* If we're setting a watchpoint, any change the inferior
+	       had done itself to the debug registers needs to be
+	       discarded, otherwise, i386_low_stopped_data_address can
+	       get confused.  */
+	    clear_status = 1;
+	  }
 
       x86_linux_dr_set (ptid, DR_CONTROL, state->dr_control_mirror);
 
       lwp->arch_private->debug_registers_changed = 0;
     }
 
-  if (lwp->stopped_by_watchpoint)
+  if (clear_status || lwp->stopped_by_watchpoint)
     x86_linux_dr_set (ptid, DR_STATUS, 0);
 }
 

@@ -764,6 +780,67 @@ typedef struct compat_siginfo
   } _sifields;
 } compat_siginfo_t;
 
+/* For x32, clock_t in _sigchld is 64bit aligned at 4 bytes.  */
+typedef long __attribute__ ((__aligned__ (4))) compat_x32_clock_t;
+
+typedef struct compat_x32_siginfo
+{
+  int si_signo;
+  int si_errno;
+  int si_code;
+
+  union
+  {
+    int _pad[((128 / sizeof (int)) - 3)];
+
+    /* kill() */
+    struct
+    {
+      unsigned int _pid;
+      unsigned int _uid;
+    } _kill;
+
+    /* POSIX.1b timers */
+    struct
+    {
+      compat_timer_t _tid;
+      int _overrun;
+      compat_sigval_t _sigval;
+    } _timer;
+
+    /* POSIX.1b signals */
+    struct
+    {
+      unsigned int _pid;
+      unsigned int _uid;
+      compat_sigval_t _sigval;
+    } _rt;
+
+    /* SIGCHLD */
+    struct
+    {
+      unsigned int _pid;
+      unsigned int _uid;
+      int _status;
+      compat_x32_clock_t _utime;
+      compat_x32_clock_t _stime;
+    } _sigchld;
+
+    /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
+    struct
+    {
+      unsigned int _addr;
+    } _sigfault;
+
+    /* SIGPOLL */
+    struct
+    {
+      int _band;
+      int _fd;
+    } _sigpoll;
+  } _sifields;
+} compat_x32_siginfo_t __attribute__ ((__aligned__ (8)));
+
 #define cpt_si_pid _sifields._kill._pid
 #define cpt_si_uid _sifields._kill._uid
 #define cpt_si_timerid _sifields._timer._tid
@@ -897,6 +974,122 @@ siginfo_from_compat_siginfo (siginfo_t *to, compat_siginfo_t *from)
     }
 }
 
+static void
+compat_x32_siginfo_from_siginfo (compat_x32_siginfo_t *to,
+				 siginfo_t *from)
+{
+  memset (to, 0, sizeof (*to));
+
+  to->si_signo = from->si_signo;
+  to->si_errno = from->si_errno;
+  to->si_code = from->si_code;
+
+  if (to->si_code == SI_TIMER)
+    {
+      to->cpt_si_timerid = from->si_timerid;
+      to->cpt_si_overrun = from->si_overrun;
+      to->cpt_si_ptr = (intptr_t) from->si_ptr;
+    }
+  else if (to->si_code == SI_USER)
+    {
+      to->cpt_si_pid = from->si_pid;
+      to->cpt_si_uid = from->si_uid;
+    }
+  else if (to->si_code < 0)
+    {
+      to->cpt_si_pid = from->si_pid;
+      to->cpt_si_uid = from->si_uid;
+      to->cpt_si_ptr = (intptr_t) from->si_ptr;
+    }
+  else
+    {
+      switch (to->si_signo)
+	{
+	case SIGCHLD:
+	  to->cpt_si_pid = from->si_pid;
+	  to->cpt_si_uid = from->si_uid;
+	  to->cpt_si_status = from->si_status;
+	  to->cpt_si_utime = from->si_utime;
+	  to->cpt_si_stime = from->si_stime;
+	  break;
+	case SIGILL:
+	case SIGFPE:
+	case SIGSEGV:
+	case SIGBUS:
+	  to->cpt_si_addr = (intptr_t) from->si_addr;
+	  break;
+	case SIGPOLL:
+	  to->cpt_si_band = from->si_band;
+	  to->cpt_si_fd = from->si_fd;
+	  break;
+	default:
+	  to->cpt_si_pid = from->si_pid;
+	  to->cpt_si_uid = from->si_uid;
+	  to->cpt_si_ptr = (intptr_t) from->si_ptr;
+	  break;
+	}
+    }
+}
+
+static void
+siginfo_from_compat_x32_siginfo (siginfo_t *to,
+				 compat_x32_siginfo_t *from)
+{
+  memset (to, 0, sizeof (*to));
+
+  to->si_signo = from->si_signo;
+  to->si_errno = from->si_errno;
+  to->si_code = from->si_code;
+
+  if (to->si_code == SI_TIMER)
+    {
+      to->si_timerid = from->cpt_si_timerid;
+      to->si_overrun = from->cpt_si_overrun;
+      to->si_ptr = (void *) (intptr_t) from->cpt_si_ptr;
+    }
+  else if (to->si_code == SI_USER)
+    {
+      to->si_pid = from->cpt_si_pid;
+      to->si_uid = from->cpt_si_uid;
+    }
+  else if (to->si_code < 0)
+    {
+      to->si_pid = from->cpt_si_pid;
+      to->si_uid = from->cpt_si_uid;
+      to->si_ptr = (void *) (intptr_t) from->cpt_si_ptr;
+    }
+  else
+    {
+      switch (to->si_signo)
+	{
+	case SIGCHLD:
+	  to->si_pid = from->cpt_si_pid;
+	  to->si_uid = from->cpt_si_uid;
+	  to->si_status = from->cpt_si_status;
+	  to->si_utime = from->cpt_si_utime;
+	  to->si_stime = from->cpt_si_stime;
+	  break;
+	case SIGILL:
+	case SIGFPE:
+	case SIGSEGV:
+	case SIGBUS:
+	  to->si_addr = (void *) (intptr_t) from->cpt_si_addr;
+	  break;
+	case SIGPOLL:
+	  to->si_band = from->cpt_si_band;
+	  to->si_fd = from->cpt_si_fd;
+	  break;
+	default:
+	  to->si_pid = from->cpt_si_pid;
+	  to->si_uid = from->cpt_si_uid;
+	  to->si_ptr = (void* ) (intptr_t) from->cpt_si_ptr;
+	  break;
+	}
+    }
+}
+
+/* Is this process 64-bit?  */
+static int linux_is_elf64;
 #endif /* __x86_64__ */
 
 /* Convert a native/host siginfo object, into/from the siginfo in the
@@ -906,13 +1099,13 @@ siginfo_from_compat_siginfo (siginfo_t *to, compat_siginfo_t *from)
    INF.  */
 
 static int
-x86_siginfo_fixup (struct siginfo *native, void *inf, int direction)
+x86_siginfo_fixup (siginfo_t *native, void *inf, int direction)
 {
 #ifdef __x86_64__
   /* Is the inferior 32-bit?  If so, then fixup the siginfo object.  */
   if (register_size (0) == 4)
     {
-      if (sizeof (struct siginfo) != sizeof (compat_siginfo_t))
+      if (sizeof (siginfo_t) != sizeof (compat_siginfo_t))
 	fatal ("unexpected difference in siginfo");
 
       if (direction == 0)
@@ -922,6 +1115,21 @@ x86_siginfo_fixup (struct siginfo *native, void *inf, int direction)
 
       return 1;
     }
+  /* No fixup for native x32 GDB.  */
+  else if (!linux_is_elf64 && sizeof (void *) == 8)
+    {
+      if (sizeof (siginfo_t) != sizeof (compat_x32_siginfo_t))
+	fatal ("unexpected difference in siginfo");
+
+      if (direction == 0)
+	compat_x32_siginfo_from_siginfo ((struct compat_x32_siginfo *) inf,
+					 native);
+      else
+	siginfo_from_compat_x32_siginfo (native,
+					 (struct compat_x32_siginfo *) inf);
+
+      return 1;
+    }
 #endif
 
   return 0;
@@ -954,8 +1162,10 @@ x86_linux_update_xmltarget (void)
 #ifdef __x86_64__
   if (num_xmm_registers == 8)
     init_registers_i386_linux ();
-  else
+  else if (linux_is_elf64)
     init_registers_amd64_linux ();
+  else
+    init_registers_x32_linux ();
 #else
     {
 # ifdef HAVE_PTRACE_GETFPXREGS
@@ -1050,8 +1260,10 @@ x86_linux_update_xmltarget (void)
 	  /* I386 has 8 xmm regs.  */
 	  if (num_xmm_registers == 8)
 	    init_registers_i386_avx_linux ();
-	  else
+	  else if (linux_is_elf64)
 	    init_registers_amd64_avx_linux ();
+	  else
+	    init_registers_x32_avx_linux ();
 #else
 	  init_registers_i386_avx_linux ();
 #endif
@@ -1094,20 +1306,28 @@ x86_linux_process_qsupported (const char *query)
 static void
 x86_arch_setup (void)
 {
-#ifdef __x86_64__
   int pid = pid_of (get_thread_lwp (current_inferior));
-  char *file = linux_child_pid_to_exec_file (pid);
-  int use_64bit = elf_64_file_p (file);
+  unsigned int machine;
+  int is_elf64 = linux_pid_exe_is_elf_64_file (pid, &machine);
 
-  free (file);
+  if (sizeof (void *) == 4)
+    {
+      if (is_elf64 > 0)
+	error (_("Can't debug 64-bit process with 32-bit GDBserver"));
+#ifndef __x86_64__
+      else if (machine == EM_X86_64)
+	error (_("Can't debug x86-64 process with 32-bit GDBserver"));
+#endif
+    }
 
-  if (use_64bit < 0)
+#ifdef __x86_64__
+  if (is_elf64 < 0)
     {
       /* This can only happen if /proc/<pid>/exe is unreadable,
 	 but "that can't happen" if we've gotten this far.
 	 Fall through and assume this is a 32-bit program.  */
     }
-  else if (use_64bit)
+  else if (machine == EM_X86_64)
     {
       /* Amd64 doesn't have HAVE_LINUX_USRREGS.  */
       the_low_target.num_regs = -1;
@@ -1118,9 +1338,12 @@ x86_arch_setup (void)
       /* Amd64 has 16 xmm regs.  */
       num_xmm_registers = 16;
 
+      linux_is_elf64 = is_elf64;
       x86_linux_update_xmltarget ();
       return;
     }
+
+  linux_is_elf64 = 0;
 #endif
 
   /* Ok we have a 32-bit inferior.  */
@@ -1192,6 +1415,8 @@ amd64_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, CORE_ADDR tpaddr,
 {
   unsigned char buf[40];
   int i, offset;
+  int64_t loffset;
+
   CORE_ADDR buildaddr = *jump_entry;
 
   /* Build the jump pad.  */
@@ -1315,7 +1540,17 @@ amd64_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, CORE_ADDR tpaddr,
   *adjusted_insn_addr_end = buildaddr;
 
   /* Finally, write a jump back to the program.  */
-  offset = (tpaddr + orig_size) - (buildaddr + sizeof (jump_insn));
+
+  loffset = (tpaddr + orig_size) - (buildaddr + sizeof (jump_insn));
+  if (loffset > INT_MAX || loffset < INT_MIN)
+    {
+      sprintf (err,
+	       "E.Jump back from jump pad too far from tracepoint "
+	       "(offset 0x%" PRIx64 " > int32).", loffset);
+      return 1;
+    }
+
+  offset = (int) loffset;
   memcpy (buf, jump_insn, sizeof (jump_insn));
   memcpy (buf + 1, &offset, 4);
   append_insns (&buildaddr, sizeof (jump_insn), buf);
@@ -1324,7 +1559,17 @@ amd64_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, CORE_ADDR tpaddr,
      is always done last (by our caller actually), so that we can
      install fast tracepoints with threads running.  This relies on
      the agent's atomic write support.  */
-  offset = *jump_entry - (tpaddr + sizeof (jump_insn));
+  loffset = *jump_entry - (tpaddr + sizeof (jump_insn));
+  if (loffset > INT_MAX || loffset < INT_MIN)
+    {
+      sprintf (err,
+	       "E.Jump pad too far from tracepoint "
+	       "(offset 0x%" PRIx64 " > int32).", loffset);
+      return 1;
+    }
+
+  offset = (int) loffset;
+
   memcpy (buf, jump_insn, sizeof (jump_insn));
   memcpy (buf + 1, &offset, 4);
   memcpy (jjump_pad_insn, buf, sizeof (jump_insn));
@@ -1579,7 +1824,7 @@ x86_get_min_fast_tracepoint_insn_len (void)
     return 5;
 #endif
 
-  if (in_process_agent_loaded ())
+  if (agent_loaded_p ())
     {
       char errbuf[IPA_BUFSIZ];
 
@@ -2937,6 +3182,8 @@ struct linux_target_ops the_low_target =
   NULL,
   NULL,
   NULL,
+  NULL,
+  NULL, /* fetch_register */
   x86_get_pc,
   x86_set_pc,
   x86_breakpoint,
diff --git a/gdb/gdbserver/linux-xtensa-low.c b/gdb/gdbserver/linux-xtensa-low.c
index 4158395..34370f9 100644
--- a/gdb/gdbserver/linux-xtensa-low.c
+++ b/gdb/gdbserver/linux-xtensa-low.c
@@ -180,8 +180,10 @@ struct linux_target_ops the_low_target = {
   init_registers_xtensa,
   0,
   0,
+  NULL,
   0,
   0,
+  NULL, /* fetch_register */
   xtensa_get_pc,
   xtensa_set_pc,
   xtensa_breakpoint,
diff --git a/gdb/gdbserver/lynx-low.c b/gdb/gdbserver/lynx-low.c
index aaed07d..2c7ab6e 100644
--- a/gdb/gdbserver/lynx-low.c
+++ b/gdb/gdbserver/lynx-low.c
@@ -450,7 +450,7 @@ retry:
   if (WIFSTOPPED (wstat))
     {
       status->kind = TARGET_WAITKIND_STOPPED;
-      status->value.integer = target_signal_from_host (WSTOPSIG (wstat));
+      status->value.integer = gdb_signal_from_host (WSTOPSIG (wstat));
       lynx_debug ("process stopped with signal: %d",
                   status->value.integer);
     }
@@ -463,7 +463,7 @@ retry:
   else if (WIFSIGNALED (wstat))
     {
       status->kind = TARGET_WAITKIND_SIGNALLED;
-      status->value.integer = target_signal_from_host (WTERMSIG (wstat));
+      status->value.integer = gdb_signal_from_host (WTERMSIG (wstat));
       lynx_debug ("process terminated with code: %d",
                   status->value.integer);
     }
@@ -473,7 +473,7 @@ retry:
 	 in fact get here.  But if we do, handle the event the best
 	 we can.  */
       status->kind = TARGET_WAITKIND_STOPPED;
-      status->value.integer = target_signal_from_host (0);
+      status->value.integer = gdb_signal_from_host (0);
       lynx_debug ("unknown event ????");
     }
 
@@ -481,7 +481,7 @@ retry:
      breakpoint events (Eg. new-thread events).  Handle those other types
      of events, and resume the execution if necessary.  */
   if (status->kind == TARGET_WAITKIND_STOPPED
-      && status->value.integer == TARGET_SIGNAL_TRAP)
+      && status->value.integer == GDB_SIGNAL_TRAP)
     {
       const int realsig = lynx_ptrace (PTRACE_GETTRACESIG, new_ptid, 0, 0, 0);
 
diff --git a/gdb/gdbserver/mem-break.c b/gdb/gdbserver/mem-break.c
index 60b83b1..39dcb86 100644
--- a/gdb/gdbserver/mem-break.c
+++ b/gdb/gdbserver/mem-break.c
@@ -20,6 +20,9 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "server.h"
+#include "regcache.h"
+#include "ax.h"
+#include <stdint.h>
 
 const unsigned char *breakpoint_data;
 int breakpoint_len;
@@ -85,6 +88,30 @@ enum bkpt_type
     other_breakpoint,
   };
 
+struct point_cond_list
+{
+  /* Pointer to the agent expression that is the breakpoint's
+     conditional.  */
+  struct agent_expr *cond;
+
+  /* Pointer to the next condition.  */
+  struct point_cond_list *next;
+};
+
+struct point_command_list
+{
+  /* Pointer to the agent expression that is the breakpoint's
+     commands.  */
+  struct agent_expr *cmd;
+
+  /* Flag that is true if this command should run even while GDB is
+     disconnected.  */
+  int persistence;
+
+  /* Pointer to the next command.  */
+  struct point_command_list *next;
+};
+
 /* A high level (in gdbserver's perspective) breakpoint.  */
 struct breakpoint
 {
@@ -93,6 +120,15 @@ struct breakpoint
   /* The breakpoint's type.  */
   enum bkpt_type type;
 
+  /* Pointer to the condition list that should be evaluated on
+     the target or NULL if the breakpoint is unconditional or
+     if GDB doesn't want us to evaluate the conditionals on the
+     target's side.  */
+  struct point_cond_list *cond_list;
+
+  /* Point to the list of commands to run when this is hit.  */
+  struct point_command_list *command_list;
+
   /* Link to this breakpoint's raw breakpoint.  This is always
      non-NULL.  */
   struct raw_breakpoint *raw;
@@ -103,6 +139,23 @@ struct breakpoint
   int (*handler) (CORE_ADDR);
 };
 
+int
+any_persistent_commands ()
+{
+  struct process_info *proc = current_process ();
+  struct breakpoint *bp;
+  struct point_command_list *cl;
+
+  for (bp = proc->breakpoints; bp != NULL; bp = bp->next)
+    {
+      for (cl = bp->command_list; cl != NULL; cl = cl->next)
+	if (cl->persistence)
+	  return 1;
+    }
+
+  return 0;
+}
+
 static struct raw_breakpoint *
 find_raw_breakpoint_at (CORE_ADDR where)
 {
@@ -632,7 +685,7 @@ delete_breakpoint (struct breakpoint *todel)
   return delete_breakpoint_1 (proc, todel);
 }
 
-static struct breakpoint *
+struct breakpoint *
 find_gdb_breakpoint_at (CORE_ADDR where)
 {
   struct process_info *proc = current_process ();
@@ -692,6 +745,9 @@ delete_gdb_breakpoint_at (CORE_ADDR addr)
   if (bp == NULL)
     return -1;
 
+  /* Before deleting the breakpoint, make sure to free
+     its condition list.  */
+  clear_gdb_breakpoint_conditions (addr);
   err = delete_breakpoint (bp);
   if (err)
     return -1;
@@ -699,12 +755,220 @@ delete_gdb_breakpoint_at (CORE_ADDR addr)
   return 0;
 }
 
+/* Clear all conditions associated with this breakpoint address.  */
+
+void
+clear_gdb_breakpoint_conditions (CORE_ADDR addr)
+{
+  struct breakpoint *bp = find_gdb_breakpoint_at (addr);
+  struct point_cond_list *cond;
+
+  if (bp == NULL || bp->cond_list == NULL)
+    return;
+
+  cond = bp->cond_list;
+
+  while (cond != NULL)
+    {
+      struct point_cond_list *cond_next;
+
+      cond_next = cond->next;
+      free (cond->cond->bytes);
+      free (cond->cond);
+      free (cond);
+      cond = cond_next;
+    }
+
+  bp->cond_list = NULL;
+}
+
+/* Add condition CONDITION to GDBserver's breakpoint BP.  */
+
+void
+add_condition_to_breakpoint (struct breakpoint *bp,
+			     struct agent_expr *condition)
+{
+  struct point_cond_list *new_cond;
+
+  /* Create new condition.  */
+  new_cond = xcalloc (1, sizeof (*new_cond));
+  new_cond->cond = condition;
+
+  /* Add condition to the list.  */
+  new_cond->next = bp->cond_list;
+  bp->cond_list = new_cond;
+}
+
+/* Add a target-side condition CONDITION to the breakpoint at ADDR.  */
+
+int
+add_breakpoint_condition (CORE_ADDR addr, char **condition)
+{
+  struct breakpoint *bp = find_gdb_breakpoint_at (addr);
+  char *actparm = *condition;
+  struct agent_expr *cond;
+
+  if (bp == NULL)
+    return 1;
+
+  if (condition == NULL)
+    return 1;
+
+  cond = gdb_parse_agent_expr (&actparm);
+
+  if (cond == NULL)
+    {
+      fprintf (stderr, "Condition evaluation failed. "
+	       "Assuming unconditional.\n");
+      return 0;
+    }
+
+  add_condition_to_breakpoint (bp, cond);
+
+  *condition = actparm;
+
+  return 0;
+}
+
+/* Evaluate condition (if any) at breakpoint BP.  Return 1 if
+   true and 0 otherwise.  */
+
 int
-gdb_breakpoint_here (CORE_ADDR where)
+gdb_condition_true_at_breakpoint (CORE_ADDR where)
 {
+  /* Fetch registers for the current inferior.  */
   struct breakpoint *bp = find_gdb_breakpoint_at (where);
+  ULONGEST value = 0;
+  struct point_cond_list *cl;
+  int err = 0;
 
-  return (bp != NULL);
+  struct regcache *regcache = get_thread_regcache (current_inferior, 1);
+
+  if (bp == NULL)
+    return 0;
+
+  /* Check if the breakpoint is unconditional.  If it is,
+     the condition always evaluates to TRUE.  */
+  if (bp->cond_list == NULL)
+    return 1;
+
+  /* Evaluate each condition in the breakpoint's list of conditions.
+     Return true if any of the conditions evaluates to TRUE.
+
+     If we failed to evaluate the expression, TRUE is returned.  This
+     forces GDB to reevaluate the conditions.  */
+  for (cl = bp->cond_list;
+       cl && !value && !err; cl = cl->next)
+    {
+      /* Evaluate the condition.  */
+      err = gdb_eval_agent_expr (regcache, NULL, cl->cond, &value);
+    }
+
+  if (err)
+    return 1;
+
+  return (value != 0);
+}
+
+/* Add commands COMMANDS to GDBserver's breakpoint BP.  */
+
+void
+add_commands_to_breakpoint (struct breakpoint *bp,
+			    struct agent_expr *commands, int persist)
+{
+  struct point_command_list *new_cmd;
+
+  /* Create new command.  */
+  new_cmd = xcalloc (1, sizeof (*new_cmd));
+  new_cmd->cmd = commands;
+  new_cmd->persistence = persist;
+
+  /* Add commands to the list.  */
+  new_cmd->next = bp->command_list;
+  bp->command_list = new_cmd;
+}
+
+/* Add a target-side command COMMAND to the breakpoint at ADDR.  */
+
+int
+add_breakpoint_commands (CORE_ADDR addr, char **command, int persist)
+{
+  struct breakpoint *bp = find_gdb_breakpoint_at (addr);
+  char *actparm = *command;
+  struct agent_expr *cmd;
+
+  if (bp == NULL)
+    return 1;
+
+  if (command == NULL)
+    return 1;
+
+  cmd = gdb_parse_agent_expr (&actparm);
+
+  if (cmd == NULL)
+    {
+      fprintf (stderr, "Command evaluation failed. "
+	       "Disabling.\n");
+      return 0;
+    }
+
+  add_commands_to_breakpoint (bp, cmd, persist);
+
+  *command = actparm;
+
+  return 0;
+}
+
+/* Return true if there are no commands to run at this location,
+   which likely means we want to report back to GDB.  */
+int
+gdb_no_commands_at_breakpoint (CORE_ADDR where)
+{
+  struct breakpoint *bp = find_gdb_breakpoint_at (where);
+
+  if (bp == NULL)
+    return 0;
+
+  if (debug_threads)
+    fprintf (stderr, "at 0x%s, bp command_list is 0x%s\n",
+	     paddress (where),
+	     phex_nz ((uintptr_t) bp->command_list, 0));
+  return (bp->command_list == NULL);
+}
+
+void
+run_breakpoint_commands (CORE_ADDR where)
+{
+  /* Fetch registers for the current inferior.  */
+  struct breakpoint *bp = find_gdb_breakpoint_at (where);
+  ULONGEST value = 0;
+  struct point_command_list *cl;
+  int err = 0;
+
+  struct regcache *regcache = get_thread_regcache (current_inferior, 1);
+
+  if (bp == NULL)
+    return;
+
+  for (cl = bp->command_list;
+       cl && !value && !err; cl = cl->next)
+    {
+      /* Run the command.  */
+      err = gdb_eval_agent_expr (regcache, NULL, cl->cmd, &value);
+
+      /* If one command has a problem, stop digging the hole deeper.  */
+      if (err)
+	break;
+    }
+}
+
+/* Return 1 if there is a breakpoint inserted in address WHERE
+   and if its condition, if it exists, is true.  */
+
+int
+gdb_breakpoint_here (CORE_ADDR where)
+{
+  return (find_gdb_breakpoint_at (where) != NULL);
 }
 
 void
diff --git a/gdb/gdbserver/mem-break.h b/gdb/gdbserver/mem-break.h
index 16b6dec..bb2aa03 100644
--- a/gdb/gdbserver/mem-break.h
+++ b/gdb/gdbserver/mem-break.h
@@ -25,6 +25,11 @@
 struct breakpoint;
 struct fast_tracepoint_jump;
 
+/* Locate a breakpoint placed at address WHERE and return a pointer
+   to its structure.  */
+
+struct breakpoint *find_gdb_breakpoint_at (CORE_ADDR where);
+
 /* Create a new GDB breakpoint at WHERE.  Returns -1 if breakpoints
    are not supported on this target, 0 otherwise.  */
 
@@ -39,6 +44,27 @@ int breakpoint_here (CORE_ADDR addr);
 
 int breakpoint_inserted_here (CORE_ADDR addr);
 
+/* Clear all breakpoint conditions associated with this address.  */
+
+void clear_gdb_breakpoint_conditions (CORE_ADDR addr);
+
+/* Set target-side condition CONDITION to the breakpoint at ADDR.  */
+
+int add_breakpoint_condition (CORE_ADDR addr, char **condition);
+
+int add_breakpoint_commands (CORE_ADDR addr, char **commands, int persist);
+
+int any_persistent_commands (void);
+
+/* Evaluation condition (if any) at breakpoint BP.  Return 1 if
+   true and 0 otherwise.  */
+
+int gdb_condition_true_at_breakpoint (CORE_ADDR where);
+
+int gdb_no_commands_at_breakpoint (CORE_ADDR where);
+
+void run_breakpoint_commands (CORE_ADDR where);
+
 /* Returns TRUE if there's a GDB breakpoint set at ADDR.  */
 
 int gdb_breakpoint_here (CORE_ADDR where);
diff --git a/gdb/gdbserver/nto-low.c b/gdb/gdbserver/nto-low.c
index eabee10..73618cd 100644
--- a/gdb/gdbserver/nto-low.c
+++ b/gdb/gdbserver/nto-low.c
@@ -19,6 +19,7 @@
 
 
 #include "server.h"
+#include "gdbthread.h"
 #include "nto-low.h"
 
 #include <limits.h>
@@ -531,14 +532,14 @@ nto_wait (ptid_t ptid,
     {
       TRACE ("SSTEP\n");
       ourstatus->kind = TARGET_WAITKIND_STOPPED;
-      ourstatus->value.sig = TARGET_SIGNAL_TRAP;
+      ourstatus->value.sig = GDB_SIGNAL_TRAP;
     }
   /* Was it a breakpoint?  */
   else if (status.flags & trace_mask)
     {
       TRACE ("STOPPED\n");
       ourstatus->kind = TARGET_WAITKIND_STOPPED;
-      ourstatus->value.sig = TARGET_SIGNAL_TRAP;
+      ourstatus->value.sig = GDB_SIGNAL_TRAP;
     }
   else if (status.flags & _DEBUG_FLAG_ISTOP)
     {
@@ -549,7 +550,7 @@ nto_wait (ptid_t ptid,
 	  TRACE ("  SIGNALLED\n");
 	  ourstatus->kind = TARGET_WAITKIND_STOPPED;
 	  ourstatus->value.sig =
-	    target_signal_from_host (status.info.si_signo);
+	    gdb_signal_from_host (status.info.si_signo);
 	  nto_inferior.exit_signo = ourstatus->value.sig;
 	  break;
 	case _DEBUG_WHY_FAULTED:
@@ -563,7 +564,7 @@ nto_wait (ptid_t ptid,
 	  else
 	    {
 	      ourstatus->value.sig =
-		target_signal_from_host (status.info.si_signo);
+		gdb_signal_from_host (status.info.si_signo);
 	      nto_inferior.exit_signo = ourstatus->value.sig;
 	    }
 	  break;
@@ -594,7 +595,7 @@ nto_wait (ptid_t ptid,
 	  TRACE ("REQUESTED\n");
 	  /* We are assuming a requested stop is due to a SIGINT.  */
 	  ourstatus->kind = TARGET_WAITKIND_STOPPED;
-	  ourstatus->value.sig = TARGET_SIGNAL_INT;
+	  ourstatus->value.sig = GDB_SIGNAL_INT;
 	  nto_inferior.exit_signo = 0;
 	  break;
 	}
diff --git a/gdb/gdbserver/regcache.c b/gdb/gdbserver/regcache.c
index 5eda9df..5e4c149 100644
--- a/gdb/gdbserver/regcache.c
+++ b/gdb/gdbserver/regcache.c
@@ -19,6 +19,7 @@
 
 #include "server.h"
 #include "regdef.h"
+#include "gdbthread.h"
 
 #include <stdlib.h>
 #include <string.h>
diff --git a/gdb/gdbserver/remote-utils.c b/gdb/gdbserver/remote-utils.c
index 9052c48..0b3adac 100644
--- a/gdb/gdbserver/remote-utils.c
+++ b/gdb/gdbserver/remote-utils.c
@@ -19,6 +19,7 @@
 #include "server.h"
 #include "terminal.h"
 #include "target.h"
+#include "gdbthread.h"
 #include <stdio.h>
 #include <string.h>
 #if HAVE_SYS_IOCTL_H
@@ -105,6 +106,8 @@ struct sym_cache
 int remote_debug = 0;
 struct ui_file *gdb_stdlog;
 
+static int remote_is_stdio = 0;
+
 static gdb_fildes_t remote_desc = INVALID_DESCRIPTOR;
 static gdb_fildes_t listen_desc = INVALID_DESCRIPTOR;
 
@@ -128,6 +131,14 @@ gdb_connected (void)
   return remote_desc != INVALID_DESCRIPTOR;
 }
 
+/* Return true if the remote connection is over stdio.  */
+
+int
+remote_connection_is_stdio (void)
+{
+  return remote_is_stdio;
+}
+
 static void
 enable_async_notification (int fd)
 {
@@ -220,6 +231,17 @@ remote_prepare (char *name)
   socklen_t tmp;
   char *port_end;
 
+  remote_is_stdio = 0;
+  if (strcmp (name, STDIO_CONNECTION_NAME) == 0)
+    {
+      /* We need to record fact that we're using stdio sooner than the
+	 call to remote_open so start_inferior knows the connection is
+	 via stdio.  */
+      remote_is_stdio = 1;
+      transport_is_reliable = 1;
+      return;
+    }
+
   port_str = strchr (name, ':');
   if (port_str == NULL)
     {
@@ -270,11 +292,27 @@ remote_open (char *name)
   char *port_str;
 
   port_str = strchr (name, ':');
+#ifdef USE_WIN32API
   if (port_str == NULL)
+    error ("Only <host>:<port> is supported on this platform.");
+#endif
+
+  if (strcmp (name, STDIO_CONNECTION_NAME) == 0)
+    {
+      fprintf (stderr, "Remote debugging using stdio\n");
+
+      /* Use stdin as the handle of the connection.
+	 We only select on reads, for example.  */
+      remote_desc = fileno (stdin);
+
+      enable_async_notification (remote_desc);
+
+      /* Register the event loop handler.  */
+      add_file_handler (remote_desc, handle_serial_event, NULL);
+    }
+#ifndef USE_WIN32API
+  else if (port_str == NULL)
     {
-#ifdef USE_WIN32API
-      error ("Only <host>:<port> is supported on this platform.");
-#else
       struct stat statbuf;
 
       if (stat (name, &statbuf) == 0
@@ -339,8 +377,8 @@ remote_open (char *name)
 
       /* Register the event loop handler.  */
       add_file_handler (remote_desc, handle_serial_event, NULL);
-#endif /* USE_WIN32API */
     }
+#endif /* USE_WIN32API */
   else
     {
       int port;
@@ -370,7 +408,8 @@ remote_close (void)
 #ifdef USE_WIN32API
   closesocket (remote_desc);
 #else
-  close (remote_desc);
+  if (! remote_connection_is_stdio ())
+    close (remote_desc);
 #endif
   remote_desc = INVALID_DESCRIPTOR;
 
@@ -729,6 +768,32 @@ read_ptid (char *buf, char **obuf)
   return ptid_build (pid, tid, 0);
 }
 
+/* Write COUNT bytes in BUF to the client.
+   The result is the number of bytes written or -1 if error.
+   This may return less than COUNT.  */
+
+static int
+write_prim (const void *buf, int count)
+{
+  if (remote_connection_is_stdio ())
+    return write (fileno (stdout), buf, count);
+  else
+    return write (remote_desc, buf, count);
+}
+
+/* Read COUNT bytes from the client and store in BUF.
+   The result is the number of bytes read or -1 if error.
+   This may return less than COUNT.  */
+
+static int
+read_prim (void *buf, int count)
+{
+  if (remote_connection_is_stdio ())
+    return read (fileno (stdin), buf, count);
+  else
+    return read (remote_desc, buf, count);
+}
+
 /* Send a packet to the remote machine, with error checking.
    The data of the packet is in BUF, and the length of the
    packet is in CNT.  Returns >= 0 on success, -1 otherwise.  */
@@ -766,7 +831,7 @@ putpkt_binary_1 (char *buf, int cnt, int is_notif)
 
   do
     {
-      if (write (remote_desc, buf2, p - buf2) != p - buf2)
+      if (write_prim (buf2, p - buf2) != p - buf2)
 	{
 	  perror ("putpkt(write)");
 	  free (buf2);
@@ -861,7 +926,7 @@ input_interrupt (int unused)
       int cc;
       char c = 0;
 
-      cc = read (remote_desc, &c, 1);
+      cc = read_prim (&c, 1);
 
       if (cc != 1 || c != '\003' || current_inferior == NULL)
 	{
@@ -989,8 +1054,7 @@ readchar (void)
 
   if (readchar_bufcnt == 0)
     {
-      readchar_bufcnt = read (remote_desc, readchar_buf,
-			      sizeof (readchar_buf));
+      readchar_bufcnt = read_prim (readchar_buf, sizeof (readchar_buf));
 
       if (readchar_bufcnt <= 0)
 	{
@@ -1112,7 +1176,7 @@ getpkt (char *buf)
 
       fprintf (stderr, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n",
 	       (c1 << 4) + c2, csum, buf);
-      if (write (remote_desc, "-", 1) != 1)
+      if (write_prim ("-", 1) != 1)
 	return -1;
     }
 
@@ -1124,7 +1188,7 @@ getpkt (char *buf)
 	  fflush (stderr);
 	}
 
-      if (write (remote_desc, "+", 1) != 1)
+      if (write_prim ("+", 1) != 1)
 	return -1;
 
       if (remote_debug)
@@ -1250,7 +1314,7 @@ prepare_resume_reply (char *buf, ptid_t ptid,
 		      struct target_waitstatus *status)
 {
   if (debug_threads)
-    fprintf (stderr, "Writing resume reply for %s:%d\n\n",
+    fprintf (stderr, "Writing resume reply for %s:%d\n",
 	     target_pid_to_str (ptid), status->kind);
 
   switch (status->kind)
@@ -1327,8 +1391,8 @@ prepare_resume_reply (char *buf, ptid_t ptid,
 		strcat (buf, ";");
 		buf += strlen (buf);
 
-		if (the_target->core_of_thread)
-		  core = (*the_target->core_of_thread) (ptid);
+		core = target_core_of_thread (ptid);
+
 		if (core != -1)
 		  {
 		    sprintf (buf, "core:");
diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c
index c75a58e..4e15b3c 100644
--- a/gdb/gdbserver/server.c
+++ b/gdb/gdbserver/server.c
@@ -18,6 +18,8 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "server.h"
+#include "gdbthread.h"
+#include "agent.h"
 
 #if HAVE_UNISTD_H
 #include <unistd.h>
@@ -29,7 +31,19 @@
 #include <sys/wait.h>
 #endif
 
+/* The thread set with an `Hc' packet.  `Hc' is deprecated in favor of
+   `vCont'.  Note the multi-process extensions made `vCont' a
+   requirement, so `Hc pPID.TID' is pretty much undefined.  So
+   CONT_THREAD can be null_ptid for no `Hc' thread, minus_one_ptid for
+   resuming all threads of the process (again, `Hc' isn't used for
+   multi-process), or a specific thread ptid_t.
+
+   We also set this when handling a single-thread `vCont' resume, as
+   some places in the backends check it to know when (and for which
+   thread) single-thread scheduler-locking is in effect.  */
 ptid_t cont_thread;
+
+/* The thread set with an `Hg' packet.  */
 ptid_t general_thread;
 
 int server_waiting;
@@ -57,7 +71,9 @@ int debug_threads;
 /* Enable debugging of h/w breakpoint/watchpoint support.  */
 int debug_hw_points;
 
-int pass_signals[TARGET_SIGNAL_LAST];
+int pass_signals[GDB_SIGNAL_LAST];
+int program_signals[GDB_SIGNAL_LAST];
+int program_signals_p;
 
 jmp_buf toplevel;
 
@@ -259,6 +275,10 @@ start_inferior (char **argv)
   signal (SIGTTIN, SIG_DFL);
 #endif
 
+  /* Clear this so the backend doesn't get confused, thinking
+     CONT_THREAD died, and it needs to resume all threads.  */
+  cont_thread = null_ptid;
+
   signal_pid = create_inferior (new_argv[0], new_argv);
 
   /* FIXME: we don't actually know at this point that the create
@@ -284,7 +304,7 @@ start_inferior (char **argv)
       resume_info.kind = resume_continue;
       resume_info.sig = 0;
 
-      mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);
+      last_ptid = mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);
 
       if (last_status.kind != TARGET_WAITKIND_STOPPED)
 	return signal_pid;
@@ -293,17 +313,15 @@ start_inferior (char **argv)
 	{
 	  (*the_target->resume) (&resume_info, 1);
 
- 	  mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);
+ 	  last_ptid = mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);
 	  if (last_status.kind != TARGET_WAITKIND_STOPPED)
 	    return signal_pid;
 
 	  current_inferior->last_resume_kind = resume_stop;
 	  current_inferior->last_status = last_status;
 	}
-      while (last_status.value.sig != TARGET_SIGNAL_TRAP);
+      while (last_status.value.sig != GDB_SIGNAL_TRAP);
 
-      current_inferior->last_resume_kind = resume_stop;
-      current_inferior->last_status = last_status;
       return signal_pid;
     }
 
@@ -338,6 +356,10 @@ attach_inferior (int pid)
      whichever we were told to attach to.  */
   signal_pid = pid;
 
+  /* Clear this so the backend doesn't get confused, thinking
+     CONT_THREAD died, and it needs to resume all threads.  */
+  cont_thread = null_ptid;
+
   if (!non_stop)
     {
       last_ptid = mywait (pid_to_ptid (pid), &last_status, 0, 0);
@@ -346,8 +368,8 @@ attach_inferior (int pid)
 	 process using the "attach" command, but this is different; it's
 	 just using "target remote".  Pretend it's just starting up.  */
       if (last_status.kind == TARGET_WAITKIND_STOPPED
-	  && last_status.value.sig == TARGET_SIGNAL_STOP)
-	last_status.value.sig = TARGET_SIGNAL_TRAP;
+	  && last_status.value.sig == GDB_SIGNAL_STOP)
+	last_status.value.sig = GDB_SIGNAL_TRAP;
 
       current_inferior->last_resume_kind = resume_stop;
       current_inferior->last_status = last_status;
@@ -427,7 +449,7 @@ handle_general_set (char *own_buf)
 {
   if (strncmp ("QPassSignals:", own_buf, strlen ("QPassSignals:")) == 0)
     {
-      int numsigs = (int) TARGET_SIGNAL_LAST, i;
+      int numsigs = (int) GDB_SIGNAL_LAST, i;
       const char *p = own_buf + strlen ("QPassSignals:");
       CORE_ADDR cursig;
 
@@ -450,6 +472,33 @@ handle_general_set (char *own_buf)
       return;
     }
 
+  if (strncmp ("QProgramSignals:", own_buf, strlen ("QProgramSignals:")) == 0)
+    {
+      int numsigs = (int) GDB_SIGNAL_LAST, i;
+      const char *p = own_buf + strlen ("QProgramSignals:");
+      CORE_ADDR cursig;
+
+      program_signals_p = 1;
+
+      p = decode_address_to_semicolon (&cursig, p);
+      for (i = 0; i < numsigs; i++)
+	{
+	  if (i == cursig)
+	    {
+	      program_signals[i] = 1;
+	      if (*p == '\0')
+		/* Keep looping, to clear the remaining signals.  */
+		cursig = -1;
+	      else
+		p = decode_address_to_semicolon (&cursig, p);
+	    }
+	  else
+	    program_signals[i] = 0;
+	}
+      strcpy (own_buf, "OK");
+      return;
+    }
+
   if (strcmp (own_buf, "QStartNoAckMode") == 0)
     {
       if (remote_debug)
@@ -525,6 +574,30 @@ handle_general_set (char *own_buf)
       && handle_tracepoint_general_set (own_buf))
     return;
 
+  if (strncmp ("QAgent:", own_buf, strlen ("QAgent:")) == 0)
+    {
+      char *mode = own_buf + strlen ("QAgent:");
+      int req = 0;
+
+      if (strcmp (mode, "0") == 0)
+	req = 0;
+      else if (strcmp (mode, "1") == 0)
+	req = 1;
+      else
+	{
+	  /* We don't know what this value is, so complain to GDB.  */
+	  sprintf (own_buf, "E.Unknown QAgent value");
+	  return;
+	}
+
+      /* Update the flag.  */
+      use_agent = req;
+      if (remote_debug)
+	fprintf (stderr, "[%s agent]\n", req ? "Enable" : "Disable");
+      write_ok (own_buf);
+      return;
+    }
+
   /* Otherwise we didn't know what packet it was.  Say we didn't
      understand it.  */
   own_buf[0] = 0;
@@ -807,7 +880,7 @@ handle_search_memory (char *own_buf, int packet_len)
 /* Handle monitor commands not handled by target-specific handlers.  */
 
 static void
-handle_monitor_command (char *mon)
+handle_monitor_command (char *mon, char *own_buf)
 {
   if (strcmp (mon, "set debug 1") == 0)
     {
@@ -941,10 +1014,6 @@ handle_qxfer_libraries (const char *annex,
   if (annex[0] != '\0' || !target_running ())
     return -1;
 
-  /* Do not confuse this packet with qXfer:libraries-svr4:read.  */
-  if (the_target->qxfer_libraries_svr4 != NULL)
-    return 0;
-
   /* Over-estimate the necessary memory.  Assume that every character
      in the library name must be escaped.  */
   total_len = 64;
@@ -1091,14 +1160,11 @@ handle_qxfer_threads_proper (struct buffer *buffer)
     {
       ptid_t ptid = thread_to_gdb_id ((struct thread_info *)thread);
       char ptid_s[100];
-      int core = -1;
+      int core = target_core_of_thread (ptid);
       char core_s[21];
 
       write_ptid (ptid_s, ptid);
 
-      if (the_target->core_of_thread)
-	core = (*the_target->core_of_thread) (ptid);
-
       if (core != -1)
 	{
 	  sprintf (core_s, "%d", core);
@@ -1555,7 +1621,9 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
 	  free (qsupported);
 	}
 
-      sprintf (own_buf, "PacketSize=%x;QPassSignals+", PBUFSIZ - 1);
+      sprintf (own_buf,
+	       "PacketSize=%x;QPassSignals+;QProgramSignals+",
+	       PBUFSIZ - 1);
 
       if (the_target->qxfer_libraries_svr4 != NULL)
 	strcat (own_buf, ";qXfer:libraries-svr4:read+");
@@ -1617,6 +1685,13 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
 	  strcat (own_buf, ";tracenz+");
 	}
 
+      /* Support target-side breakpoint conditions and commands.  */
+      strcat (own_buf, ";ConditionalBreakpoints+");
+      strcat (own_buf, ";BreakpointCommands+");
+
+      if (target_supports_agent ())
+	strcat (own_buf, ";QAgent+");
+
       return;
     }
 
@@ -1733,7 +1808,7 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
       if (the_target->handle_monitor_command == NULL
 	  || (*the_target->handle_monitor_command) (mon) == 0)
 	/* Default processing.  */
-	handle_monitor_command (mon);
+	handle_monitor_command (mon, own_buf);
 
       free (mon);
       return;
@@ -1859,9 +1934,9 @@ handle_v_cont (char *own_buf)
 	    goto err;
 	  p = q;
 
-	  if (!target_signal_to_host_p (sig))
+	  if (!gdb_signal_to_host_p (sig))
 	    goto err;
-	  resume_info[i].sig = target_signal_to_host (sig);
+	  resume_info[i].sig = gdb_signal_to_host (sig);
 	}
       else
 	{
@@ -1896,9 +1971,13 @@ handle_v_cont (char *own_buf)
   if (i < n)
     resume_info[i] = default_action;
 
-  /* Still used in occasional places in the backend.  */
+  /* `cont_thread' is still used in occasional places in the backend,
+     to implement single-thread scheduler-locking.  Doesn't make sense
+     to set it if we see a stop request, or a wildcard action (one
+     with '-1' (all threads), or 'pPID.-1' (all threads of PID)).  */
   if (n == 1
-      && !ptid_equal (resume_info[0].thread, minus_one_ptid)
+      && !(ptid_equal (resume_info[0].thread, minus_one_ptid)
+	   || ptid_get_lwp (resume_info[0].thread) == -1)
       && resume_info[0].kind != resume_stop)
     cont_thread = resume_info[0].thread;
   else
@@ -2078,7 +2157,7 @@ handle_v_kill (char *own_buf)
   if (pid != 0 && kill_inferior (pid) == 0)
     {
       last_status.kind = TARGET_WAITKIND_SIGNALLED;
-      last_status.value.sig = TARGET_SIGNAL_KILL;
+      last_status.value.sig = GDB_SIGNAL_KILL;
       last_ptid = pid_to_ptid (pid);
       discard_queued_stop_replies (pid);
       write_ok (own_buf);
@@ -2140,7 +2219,7 @@ handle_v_requests (char *own_buf, int packet_len, int *new_packet_len)
 
   if (strncmp (own_buf, "vAttach;", 8) == 0)
     {
-      if (!multi_process && target_running ())
+      if ((!extended_protocol || !multi_process) && target_running ())
 	{
 	  fprintf (stderr, "Already debugging a process\n");
 	  write_enn (own_buf);
@@ -2152,7 +2231,7 @@ handle_v_requests (char *own_buf, int packet_len, int *new_packet_len)
 
   if (strncmp (own_buf, "vRun;", 5) == 0)
     {
-      if (!multi_process && target_running ())
+      if ((!extended_protocol || !multi_process) && target_running ())
 	{
 	  fprintf (stderr, "Already debugging a process\n");
 	  write_enn (own_buf);
@@ -2301,7 +2380,7 @@ gdb_wants_thread_stopped (struct inferior_list_entry *entry)
       /* Most threads are stopped implicitly (all-stop); tag that with
 	 signal 0.  */
       thread->last_status.kind = TARGET_WAITKIND_STOPPED;
-      thread->last_status.value.sig = TARGET_SIGNAL_0;
+      thread->last_status.value.sig = GDB_SIGNAL_0;
     }
 }
 
@@ -2356,7 +2435,7 @@ handle_status (char *own_buf)
 	  struct target_waitstatus status;
 
 	  status.kind = TARGET_WAITKIND_STOPPED;
-	  status.value.sig = TARGET_SIGNAL_TRAP;
+	  status.value.sig = GDB_SIGNAL_TRAP;
 	  prepare_resume_reply (own_buf,
 				all_threads.head->id, &status);
 	}
@@ -2524,8 +2603,8 @@ main (int argc, char *argv[])
   int pid;
   char *arg_end, *port;
   char **next_arg = &argv[1];
-  int multi_mode = 0;
-  int attach = 0;
+  volatile int multi_mode = 0;
+  volatile int attach = 0;
   int was_running;
 
   while (*next_arg != NULL && **next_arg == '-')
@@ -2605,6 +2684,13 @@ main (int argc, char *argv[])
 		}
 	    }
 	}
+      else if (strcmp (*next_arg, "-") == 0)
+	{
+	  /* "-" specifies a stdio connection and is a form of port
+	     specification.  */
+	  *next_arg = STDIO_CONNECTION_NAME;
+	  break;
+	}
       else if (strcmp (*next_arg, "--disable-randomization") == 0)
 	disable_randomization = 1;
       else if (strcmp (*next_arg, "--no-disable-randomization") == 0)
@@ -2635,6 +2721,12 @@ main (int argc, char *argv[])
       exit (1);
     }
 
+  /* We need to know whether the remote connection is stdio before
+     starting the inferior.  Inferiors created in this scenario have
+     stdin,stdout redirected.  So do this here before we call
+     start_inferior.  */
+  remote_prepare (port);
+
   bad_attach = 0;
   pid = 0;
 
@@ -2706,7 +2798,14 @@ main (int argc, char *argv[])
 
   if (setjmp (toplevel))
     {
-      detach_or_kill_for_exit ();
+      /* If something fails and longjmps while detaching or killing
+	 inferiors, we'd end up here again, stuck in an infinite loop
+	 trap.  Be sure that if that happens, we exit immediately
+	 instead.  */
+      if (setjmp (toplevel) == 0)
+	detach_or_kill_for_exit ();
+      else
+	fprintf (stderr, "Detach or kill failed.  Exiting\n");
       exit (1);
     }
 
@@ -2722,8 +2821,6 @@ main (int argc, char *argv[])
       exit (1);
     }
 
-  remote_prepare (port);
-
   while (1)
     {
       noack_mode = 0;
@@ -2754,8 +2851,20 @@ main (int argc, char *argv[])
 
       if (exit_requested || run_once)
 	{
-	  detach_or_kill_for_exit ();
-	  exit (0);
+	  /* If something fails and longjmps while detaching or
+	     killing inferiors, we'd end up here again, stuck in an
+	     infinite loop trap.  Be sure that if that happens, we
+	     exit immediately instead.  */
+	  if (setjmp (toplevel) == 0)
+	    {
+	      detach_or_kill_for_exit ();
+	      exit (0);
+	    }
+	  else
+	    {
+	      fprintf (stderr, "Detach or kill failed.  Exiting\n");
+	      exit (1);
+	    }
 	}
 
       fprintf (stderr,
@@ -2791,6 +2900,56 @@ main (int argc, char *argv[])
     }
 }
 
+/* Process options coming from Z packets for *point at address
+   POINT_ADDR.  PACKET is the packet buffer.  *PACKET is updated
+   to point to the first char after the last processed option.  */
+
+static void
+process_point_options (CORE_ADDR point_addr, char **packet)
+{
+  char *dataptr = *packet;
+  int persist;
+
+  /* Check if data has the correct format.  */
+  if (*dataptr != ';')
+    return;
+
+  dataptr++;
+
+  while (*dataptr)
+    {
+      if (*dataptr == ';')
+	++dataptr;
+
+      if (*dataptr == 'X')
+	{
+	  /* Conditional expression.  */
+	  fprintf (stderr, "Found breakpoint condition.\n");
+	  add_breakpoint_condition (point_addr, &dataptr);
+	}
+      else if (strncmp (dataptr, "cmds:", strlen ("cmds:")) == 0)
+	{
+	  dataptr += strlen ("cmds:");
+	  if (debug_threads)
+	    fprintf (stderr, "Found breakpoint commands %s.\n", dataptr);
+	  persist = (*dataptr == '1');
+	  dataptr += 2;
+	  add_breakpoint_commands (point_addr, &dataptr, persist);
+	}
+      else
+	{
+	  /* Unrecognized token, just skip it.  */
+	  fprintf (stderr, "Unknown token %c, ignoring.\n",
+		   *dataptr);
+	}
+
+      /* Skip tokens until we find one that we recognize.  */
+      while (*dataptr && *dataptr != 'X' && *dataptr != ';')
+	dataptr++;
+    }
+  *packet = dataptr;
+}
+
 /* Event loop callback that handles a serial event.  The first byte in
    the serial buffer gets us here.  We expect characters to arrive at
    a brisk pace, so we read the rest of the packet with a blocking
@@ -2851,7 +3010,7 @@ process_serial_event (void)
 	pid =
 	  ptid_get_pid (((struct inferior_list_entry *) current_inferior)->id);
 
-      if (tracing && disconnected_tracing)
+      if ((tracing && disconnected_tracing) || any_persistent_commands ())
 	{
 	  struct thread_resume resume_info;
 	  struct process_info *process = find_process_pid (pid);
@@ -2862,9 +3021,15 @@ process_serial_event (void)
 	      break;
 	    }
 
-	  fprintf (stderr,
-		   "Disconnected tracing in effect, "
-		   "leaving gdbserver attached to the process\n");
+	  if (tracing && disconnected_tracing)
+	    fprintf (stderr,
+		     "Disconnected tracing in effect, "
+		     "leaving gdbserver attached to the process\n");
+
+	  if (any_persistent_commands ())
+	    fprintf (stderr,
+		     "Persistent commands are present, "
+		     "leaving gdbserver attached to the process\n");
 
 	  /* Make sure we're in non-stop/async mode, so we we can both
 	     wait for an async socket accept, and handle async target
@@ -3065,8 +3230,8 @@ process_serial_event (void)
     case 'C':
       require_running (own_buf);
       convert_ascii_to_int (own_buf + 1, &sig, 1);
-      if (target_signal_to_host_p (sig))
-	signal = target_signal_to_host (sig);
+      if (gdb_signal_to_host_p (sig))
+	signal = gdb_signal_to_host (sig);
       else
 	signal = 0;
       myresume (own_buf, 0, signal);
@@ -3074,8 +3239,8 @@ process_serial_event (void)
     case 'S':
       require_running (own_buf);
       convert_ascii_to_int (own_buf + 1, &sig, 1);
-      if (target_signal_to_host_p (sig))
-	signal = target_signal_to_host (sig);
+      if (gdb_signal_to_host_p (sig))
+	signal = gdb_signal_to_host (sig);
       else
 	signal = 0;
       myresume (own_buf, 1, signal);
@@ -3113,7 +3278,22 @@ process_serial_event (void)
 	  case '4': /* access watchpoint */
 	    require_running (own_buf);
 	    if (insert && the_target->insert_point != NULL)
-	      res = (*the_target->insert_point) (type, addr, len);
+	      {
+		/* Insert the breakpoint.  If it is already inserted, nothing
+		   will take place.  */
+		res = (*the_target->insert_point) (type, addr, len);
+
+		/* GDB may have sent us a list of *point parameters to be
+		   evaluated on the target's side.  Read such list here.  If we
+		   already have a list of parameters, GDB is telling us to drop
+		   that list and use this one instead.  */
+		if (!res && (type == '0' || type == '1'))
+		  {
+		    /* Remove previous conditions.  */
+		    clear_gdb_breakpoint_conditions (addr);
+		    process_point_options (addr, &dataptr);
+		  }
+	      }
 	    else if (!insert && the_target->remove_point != NULL)
 	      res = (*the_target->remove_point) (type, addr, len);
 	    break;
@@ -3145,7 +3325,7 @@ process_serial_event (void)
       if (extended_protocol)
 	{
 	  last_status.kind = TARGET_WAITKIND_EXITED;
-	  last_status.value.sig = TARGET_SIGNAL_KILL;
+	  last_status.value.sig = GDB_SIGNAL_KILL;
 	  return 0;
 	}
       else
@@ -3189,7 +3369,7 @@ process_serial_event (void)
 	  else
 	    {
 	      last_status.kind = TARGET_WAITKIND_EXITED;
-	      last_status.value.sig = TARGET_SIGNAL_KILL;
+	      last_status.value.sig = GDB_SIGNAL_KILL;
 	    }
 	  return 0;
 	}
@@ -3313,7 +3493,7 @@ handle_target_event (int err, gdb_client_data client_data)
 
 	      resume_info.thread = last_ptid;
 	      resume_info.kind = resume_continue;
-	      resume_info.sig = target_signal_to_host (last_status.value.sig);
+	      resume_info.sig = gdb_signal_to_host (last_status.value.sig);
 	      (*the_target->resume) (&resume_info, 1);
 	    }
 	  else if (debug_threads)
diff --git a/gdb/gdbserver/server.h b/gdb/gdbserver/server.h
index 2d8a1c0..02dfa29 100644
--- a/gdb/gdbserver/server.h
+++ b/gdb/gdbserver/server.h
@@ -59,10 +59,6 @@ extern void perror (const char *);
 #endif
 #endif
 
-#if !HAVE_DECL_MEMMEM
-extern void *memmem (const void *, size_t , const void *, size_t);
-#endif
-
 #if !HAVE_DECL_VASPRINTF
 extern int vasprintf(char **strp, const char *fmt, va_list ap);
 #endif
@@ -102,6 +98,12 @@ int vsnprintf(char *str, size_t size, const char *format, va_list ap);
 #define _(String) (String)
 #endif
 
+#ifdef IN_PROCESS_AGENT
+#  define PROG "ipa"
+#else
+#  define PROG "gdbserver"
+#endif
+
 /* A type used for binary buffers.  */
 typedef unsigned char gdb_byte;
 
@@ -139,44 +141,7 @@ struct regcache;
 #include "gdb_signals.h"
 #include "target.h"
 #include "mem-break.h"
-
-struct thread_info
-{
-  struct inferior_list_entry entry;
-  void *target_data;
-  void *regcache_data;
-
-  /* The last resume GDB requested on this thread.  */
-  enum resume_kind last_resume_kind;
-
-  /* The last wait status reported for this thread.  */
-  struct target_waitstatus last_status;
-
-  /* Given `while-stepping', a thread may be collecting data for more
-     than one tracepoint simultaneously.  E.g.:
-
-    ff0001  INSN1 <-- TP1, while-stepping 10 collect $regs
-    ff0002  INSN2
-    ff0003  INSN3 <-- TP2, collect $regs
-    ff0004  INSN4 <-- TP3, while-stepping 10 collect $regs
-    ff0005  INSN5
-
-   Notice that when instruction INSN5 is reached, the while-stepping
-   actions of both TP1 and TP3 are still being collected, and that TP2
-   had been collected meanwhile.  The whole range of ff0001-ff0005
-   should be single-stepped, due to at least TP1's while-stepping
-   action covering the whole range.
-
-   On the other hand, the same tracepoint with a while-stepping action
-   may be hit by more than one thread simultaneously, hence we can't
-   keep the current step count in the tracepoint itself.
-
-   This is the head of the list of the states of `while-stepping'
-   tracepoint actions this thread is now collecting; NULL if empty.
-   Each item in the list holds the current step of the while-stepping
-   action.  */
-  struct wstep_state *while_stepping;
-};
+#include "gdbthread.h"
 
 struct dll_info
 {
@@ -233,9 +198,9 @@ void initialize_low ();
 /* From inferiors.c.  */
 
 extern struct inferior_list all_processes;
-extern struct inferior_list all_threads;
 extern struct inferior_list all_dlls;
 extern int dlls_changed;
+extern void clear_dlls (void);
 
 void add_inferior_to_list (struct inferior_list *list,
 			   struct inferior_list_entry *new_inferior);
@@ -245,8 +210,6 @@ void for_each_inferior (struct inferior_list *list,
 extern struct thread_info *current_inferior;
 void remove_inferior (struct inferior_list *list,
 		      struct inferior_list_entry *entry);
-void remove_thread (struct thread_info *thread);
-void add_thread (ptid_t ptid, void *target_data);
 
 struct process_info *add_process (int pid, int attached);
 void remove_process (struct process_info *process);
@@ -254,12 +217,10 @@ struct process_info *find_process_pid (int pid);
 int have_started_inferiors_p (void);
 int have_attached_inferiors_p (void);
 
-struct thread_info *find_thread_ptid (ptid_t ptid);
-
 ptid_t thread_id_to_gdb_id (ptid_t);
 ptid_t thread_to_gdb_id (struct thread_info *);
 ptid_t gdb_id_to_thread_id (ptid_t);
-struct thread_info *gdb_id_to_thread (unsigned int);
+
 void clear_inferiors (void);
 struct inferior_list_entry *find_inferior
      (struct inferior_list *,
@@ -272,8 +233,6 @@ void *inferior_target_data (struct thread_info *);
 void set_inferior_target_data (struct thread_info *, void *);
 void *inferior_regcache_data (struct thread_info *);
 void set_inferior_regcache_data (struct thread_info *, void *);
-void add_pid_to_list (struct inferior_list *list, unsigned long pid);
-int pull_pid_from_list (struct inferior_list *list, unsigned long pid);
 
 void loaded_dll (const char *name, CORE_ADDR base_addr);
 void unloaded_dll (const char *name, CORE_ADDR base_addr);
@@ -287,6 +246,8 @@ extern int server_waiting;
 extern int debug_threads;
 extern int debug_hw_points;
 extern int pass_signals[];
+extern int program_signals[];
+extern int program_signals_p;
 
 extern jmp_buf toplevel;
 
@@ -342,6 +303,9 @@ extern int transport_is_reliable;
 
 int gdb_connected (void);
 
+#define STDIO_CONNECTION_NAME "stdio"
+int remote_connection_is_stdio (void);
+
 ptid_t read_ptid (char *buf, char **obuf);
 char *write_ptid (char *buf, ptid_t ptid);
 
@@ -433,8 +397,6 @@ char *pfildes (gdb_fildes_t fd);
    agent back to GDBserver.  */
 #define IPA_BUFSIZ 100
 
-int in_process_agent_loaded (void);
-
 void initialize_tracepoint (void);
 
 extern int tracing;
@@ -507,6 +469,26 @@ int claim_trampoline_space (ULONGEST used, CORE_ADDR *trampoline);
 int have_fast_tracepoint_trampoline_buffer (char *msgbuf);
 #endif
 
+struct traceframe;
+
+/* Do memory copies for bytecodes.  */
+/* Do the recording of memory blocks for actions and bytecodes.  */
+
+int agent_mem_read (struct traceframe *tframe,
+		    unsigned char *to, CORE_ADDR from,
+		    ULONGEST len);
+
+LONGEST agent_get_trace_state_variable_value (int num);
+void agent_set_trace_state_variable_value (int num, LONGEST val);
+
+/* Record the value of a trace state variable.  */
+
+int agent_tsv_read (struct traceframe *tframe, int n);
+int agent_mem_read_string (struct traceframe *tframe,
+			   unsigned char *to,
+			   CORE_ADDR from,
+			   ULONGEST len);
+
 /* Bytecode compilation function vector.  */
 
 struct emit_ops
@@ -562,6 +544,12 @@ struct emit_ops
 
 /* Returns the address of the get_raw_reg function in the IPA.  */
 CORE_ADDR get_raw_reg_func_addr (void);
+/* Returns the address of the get_trace_state_variable_value
+   function in the IPA.  */
+CORE_ADDR get_get_tsv_func_addr (void);
+/* Returns the address of the set_trace_state_variable_value
+   function in the IPA.  */
+CORE_ADDR get_set_tsv_func_addr (void);
 
 CORE_ADDR current_insn_ptr;
 int emit_error;
diff --git a/gdb/gdbserver/spu-low.c b/gdb/gdbserver/spu-low.c
index 2a720ae..d7283a9 100644
--- a/gdb/gdbserver/spu-low.c
+++ b/gdb/gdbserver/spu-low.c
@@ -206,14 +206,14 @@ store_ppc_memory (CORE_ADDR memaddr, char *myaddr, int len)
 static int
 parse_spufs_run (int *fd, CORE_ADDR *addr)
 {
-  char buf[4];
+  unsigned int insn;
   CORE_ADDR pc = fetch_ppc_register (32);  /* nip */
 
   /* Fetch instruction preceding current NIP.  */
-  if (fetch_ppc_memory (pc-4, buf, 4) != 0)
+  if (fetch_ppc_memory (pc-4, (char *) &insn, 4) != 0)
     return 0;
   /* It should be a "sc" instruction.  */
-  if (*(unsigned int *)buf != INSTR_SC)
+  if (insn != INSTR_SC)
     return 0;
   /* System call number should be NR_spu_run.  */
   if (fetch_ppc_register (0) != NR_spu_run)
@@ -455,7 +455,7 @@ spu_wait (ptid_t ptid, struct target_waitstatus *ourstatus, int options)
     {
       fprintf (stderr, "\nChild terminated with signal = %x \n", WTERMSIG (w));
       ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
-      ourstatus->value.sig = target_signal_from_host (WTERMSIG (w));
+      ourstatus->value.sig = gdb_signal_from_host (WTERMSIG (w));
       clear_inferiors ();
       return pid_to_ptid (ret);
     }
@@ -465,12 +465,12 @@ spu_wait (ptid_t ptid, struct target_waitstatus *ourstatus, int options)
   if (!server_waiting)
     {
       ourstatus->kind = TARGET_WAITKIND_STOPPED;
-      ourstatus->value.sig = TARGET_SIGNAL_0;
+      ourstatus->value.sig = GDB_SIGNAL_0;
       return ptid_build (ret, ret, 0);
     }
 
   ourstatus->kind = TARGET_WAITKIND_STOPPED;
-  ourstatus->value.sig = target_signal_from_host (WSTOPSIG (w));
+  ourstatus->value.sig = gdb_signal_from_host (WSTOPSIG (w));
   return ptid_build (ret, ret, 0);
 }
 
diff --git a/gdb/gdbserver/target.c b/gdb/gdbserver/target.c
index 998d6c1..7539476 100644
--- a/gdb/gdbserver/target.c
+++ b/gdb/gdbserver/target.c
@@ -87,8 +87,8 @@ mywait (ptid_t ptid, struct target_waitstatus *ourstatus, int options,
 	     "\nChild exited with status %d\n", ourstatus->value.integer);
   else if (ourstatus->kind == TARGET_WAITKIND_SIGNALLED)
     fprintf (stderr, "\nChild terminated with signal = 0x%x (%s)\n",
-	     target_signal_to_host (ourstatus->value.sig),
-	     target_signal_to_name (ourstatus->value.sig));
+	     gdb_signal_to_host (ourstatus->value.sig),
+	     gdb_signal_to_name (ourstatus->value.sig));
 
   if (connected_wait)
     server_waiting = 0;
@@ -157,11 +157,11 @@ target_waitstatus_to_string (const struct target_waitstatus *ws)
       break;
     case TARGET_WAITKIND_STOPPED:
       sprintf (buf, "%sstopped, signal = %s",
-	       kind_str, target_signal_to_name (ws->value.sig));
+	       kind_str, gdb_signal_to_name (ws->value.sig));
       break;
     case TARGET_WAITKIND_SIGNALLED:
       sprintf (buf, "%ssignalled, signal = %s",
-	       kind_str, target_signal_to_name (ws->value.sig));
+	       kind_str, gdb_signal_to_name (ws->value.sig));
       break;
     case TARGET_WAITKIND_LOADED:
       sprintf (buf, "%sloaded", kind_str);
diff --git a/gdb/gdbserver/target.h b/gdb/gdbserver/target.h
index 03dff0f..0cf5687 100644
--- a/gdb/gdbserver/target.h
+++ b/gdb/gdbserver/target.h
@@ -53,7 +53,7 @@ struct thread_resume
      thread.  If stopping a thread, and this is 0, the target should
      stop the thread however it best decides to (e.g., SIGSTOP on
      linux; SuspendThread on win32).  This is a host signal value (not
-     enum target_signal).  */
+     enum gdb_signal).  */
   int sig;
 };
 
@@ -97,7 +97,7 @@ struct target_waitstatus
     union
       {
 	int integer;
-	enum target_signal sig;
+	enum gdb_signal sig;
 	ptid_t related_pid;
 	char *execd_pathname;
       }
@@ -394,6 +394,9 @@ struct target_ops
   int (*qxfer_libraries_svr4) (const char *annex, unsigned char *readbuf,
 			       unsigned const char *writebuf,
 			       CORE_ADDR offset, int len);
+
+  /* Return true if target supports debugging agent.  */
+  int (*supports_agent) (void);
 };
 
 extern struct target_ops *the_target;
@@ -514,6 +517,10 @@ void set_target_ops (struct target_ops *);
   (the_target->supports_disable_randomization ? \
    (*the_target->supports_disable_randomization) () : 0)
 
+#define target_supports_agent() \
+  (the_target->supports_agent ? \
+   (*the_target->supports_agent) () : 0)
+
 /* Start non-stop mode, returns 0 on success, -1 on failure.   */
 
 int start_non_stop (int nonstop);
@@ -533,6 +540,10 @@ ptid_t mywait (ptid_t ptid, struct target_waitstatus *ourstatus, int options,
 	(*the_target->done_accessing_memory) ();  	\
     } while (0)
 
+#define target_core_of_thread(ptid)		\
+  (the_target->core_of_thread ? (*the_target->core_of_thread) (ptid) \
+   : -1)
+
 int read_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len);
 
 int write_inferior_memory (CORE_ADDR memaddr, const unsigned char *myaddr,
diff --git a/gdb/gdbserver/tracepoint.c b/gdb/gdbserver/tracepoint.c
index 37a02da..f103dfc 100644
--- a/gdb/gdbserver/tracepoint.c
+++ b/gdb/gdbserver/tracepoint.c
@@ -17,14 +17,18 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "server.h"
+#include "gdbthread.h"
+#include "agent.h"
+
 #include <ctype.h>
 #include <fcntl.h>
 #include <unistd.h>
 #include <sys/time.h>
 #include <stddef.h>
-#if HAVE_STDINT_H
+#include <inttypes.h>
 #include <stdint.h>
-#endif
+
+#include "ax.h"
 
 /* This file is built for both GDBserver, and the in-process
    agent (IPA), a shared library that includes a tracing agent that is
@@ -63,13 +67,13 @@ trace_vdebug (const char *fmt, ...)
 
   va_start (ap, fmt);
   vsprintf (buf, fmt, ap);
-  fprintf (stderr, "gdbserver/tracepoint: %s\n", buf);
+  fprintf (stderr, PROG "/tracepoint: %s\n", buf);
   va_end (ap);
 }
 
 #define trace_debug_1(level, fmt, args...)	\
   do {						\
-    if (level <= debug_threads)			\
+    if (level <= debug_threads)		\
       trace_vdebug ((fmt), ##args);		\
   } while (0)
 
@@ -177,18 +181,8 @@ struct ipa_sym_addresses
   CORE_ADDR addr_get_trace_state_variable_value;
   CORE_ADDR addr_set_trace_state_variable_value;
   CORE_ADDR addr_ust_loaded;
-  CORE_ADDR addr_helper_thread_id;
-  CORE_ADDR addr_cmd_buf;
 };
 
-#define STRINGIZE_1(STR) #STR
-#define STRINGIZE(STR) STRINGIZE_1(STR)
-#define IPA_SYM(SYM)					\
-  {							\
-    STRINGIZE (gdb_agent_ ## SYM),			\
-    offsetof (struct ipa_sym_addresses, addr_ ## SYM)	\
-  }
-
 static struct
 {
   const char *name;
@@ -224,43 +218,41 @@ static struct
   IPA_SYM(get_trace_state_variable_value),
   IPA_SYM(set_trace_state_variable_value),
   IPA_SYM(ust_loaded),
-  IPA_SYM(helper_thread_id),
-  IPA_SYM(cmd_buf),
 };
 
-struct ipa_sym_addresses ipa_sym_addrs;
-
-int all_tracepoint_symbols_looked_up;
-
-int
-in_process_agent_loaded (void)
-{
-  return all_tracepoint_symbols_looked_up;
-}
+static struct ipa_sym_addresses ipa_sym_addrs;
 
 static int read_inferior_integer (CORE_ADDR symaddr, int *val);
 
 /* Returns true if both the in-process agent library and the static
-   tracepoints libraries are loaded in the inferior.  */
+   tracepoints libraries are loaded in the inferior, and agent has
+   capability on static tracepoints.  */
 
 static int
-in_process_agent_loaded_ust (void)
+in_process_agent_supports_ust (void)
 {
   int loaded = 0;
 
-  if (!in_process_agent_loaded ())
+  if (!agent_loaded_p ())
     {
       warning ("In-process agent not loaded");
       return 0;
     }
 
-  if (read_inferior_integer (ipa_sym_addrs.addr_ust_loaded, &loaded))
+  if (agent_capability_check (AGENT_CAPA_STATIC_TRACE))
     {
-      warning ("Error reading ust_loaded in lib");
-      return 0;
-    }
+      /* Agent understands static tracepoint, then check whether UST is in
+	 fact loaded in the inferior.  */
+      if (read_inferior_integer (ipa_sym_addrs.addr_ust_loaded, &loaded))
+	{
+	  warning ("Error reading ust_loaded in lib");
+	  return 0;
+	}
 
-  return loaded;
+      return loaded;
+    }
+  else
+    return 0;
 }
 
 static void
@@ -292,7 +284,7 @@ write_e_ust_not_loaded (char *buffer)
 static int
 maybe_write_ipa_not_loaded (char *buffer)
 {
-  if (!in_process_agent_loaded ())
+  if (!agent_loaded_p ())
     {
       write_e_ipa_not_loaded (buffer);
       return 1;
@@ -307,12 +299,12 @@ maybe_write_ipa_not_loaded (char *buffer)
 static int
 maybe_write_ipa_ust_not_loaded (char *buffer)
 {
-  if (!in_process_agent_loaded ())
+  if (!agent_loaded_p ())
     {
       write_e_ipa_not_loaded (buffer);
       return 1;
     }
-  else if (!in_process_agent_loaded_ust ())
+  else if (!in_process_agent_supports_ust ())
     {
       write_e_ust_not_loaded (buffer);
       return 1;
@@ -331,7 +323,7 @@ tracepoint_look_up_symbols (void)
 {
   int i;
 
-  if (all_tracepoint_symbols_looked_up)
+  if (agent_loaded_p ())
     return;
 
   for (i = 0; i < sizeof (symbol_list) / sizeof (symbol_list[0]); i++)
@@ -347,7 +339,7 @@ tracepoint_look_up_symbols (void)
 	}
     }
 
-  all_tracepoint_symbols_looked_up = 1;
+  agent_look_up_symbols (NULL);
 }
 
 #endif
@@ -366,8 +358,6 @@ tracepoint_look_up_symbols (void)
    GDBserver side.  */
 
 #ifdef IN_PROCESS_AGENT
-int debug_threads = 0;
-
 int
 read_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
 {
@@ -419,11 +409,10 @@ static int stop_tracing_handler (CORE_ADDR);
 struct breakpoint *flush_trace_buffer_bkpt;
 static int flush_trace_buffer_handler (CORE_ADDR);
 
-static void download_tracepoints (void);
 static void download_trace_state_variables (void);
 static void upload_fast_traceframes (void);
 
-static int run_inferior_command (char *cmd);
+static int run_inferior_command (char *cmd, int len);
 
 static int
 read_inferior_integer (CORE_ADDR symaddr, int *val)
@@ -432,6 +421,9 @@ read_inferior_integer (CORE_ADDR symaddr, int *val)
 			       sizeof (*val));
 }
 
+struct tracepoint;
+static int tracepoint_send_agent (struct tracepoint *tpoint);
+
 static int
 read_inferior_uinteger (CORE_ADDR symaddr, unsigned int *val)
 {
@@ -470,47 +462,39 @@ write_inferior_uinteger (CORE_ADDR symaddr, unsigned int val)
   return write_inferior_memory (symaddr, (unsigned char *) &val, sizeof (val));
 }
 
-#endif
+static CORE_ADDR target_malloc (ULONGEST size);
+static int write_inferior_data_ptr (CORE_ADDR where, CORE_ADDR ptr);
 
-/* This enum must exactly match what is documented in
-   gdb/doc/agentexpr.texi, including all the numerical values.  */
+#define COPY_FIELD_TO_BUF(BUF, OBJ, FIELD)	\
+  do {							\
+    memcpy (BUF, &(OBJ)->FIELD, sizeof ((OBJ)->FIELD)); \
+    BUF += sizeof ((OBJ)->FIELD);			\
+  } while (0)
 
-enum gdb_agent_op
-  {
-#define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE)  \
-    gdb_agent_op_ ## NAME = VALUE,
-#include "ax.def"
-#undef DEFOP
-    gdb_agent_op_last
-  };
+#endif
 
-static const char *gdb_agent_op_names [gdb_agent_op_last] =
-  {
-    "?undef?"
-#define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE)  , # NAME
-#include "ax.def"
-#undef DEFOP
-  };
+/* Operations on various types of tracepoint actions.  */
 
-static const unsigned char gdb_agent_op_sizes [gdb_agent_op_last] =
-  {
-    0
-#define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE)  , SIZE
-#include "ax.def"
-#undef DEFOP
-  };
+struct tracepoint_action;
 
-struct agent_expr
+struct tracepoint_action_ops
 {
-  int length;
+  /* Download tracepoint action ACTION to IPA.  Return the address of action
+     in IPA/inferior.  */
+  CORE_ADDR (*download) (const struct tracepoint_action *action);
 
-  unsigned char *bytes;
+  /* Send ACTION to agent via command buffer started from BUFFER.  Return
+     updated head of command buffer.  */
+  char* (*send) (char *buffer, const struct tracepoint_action *action);
 };
 
 /* Base action.  Concrete actions inherit this.  */
 
 struct tracepoint_action
 {
+#ifndef IN_PROCESS_AGENT
+  const struct tracepoint_action_ops *ops;
+#endif
   char type;
 };
 
@@ -521,7 +505,7 @@ struct collect_memory_action
 
   ULONGEST addr;
   ULONGEST len;
-  int basereg;
+  int32_t basereg;
 };
 
 /* An 'R' (collect registers) action.  */
@@ -546,6 +530,147 @@ struct collect_static_trace_data_action
   struct tracepoint_action base;
 };
 
+#ifndef IN_PROCESS_AGENT
+static CORE_ADDR
+m_tracepoint_action_download (const struct tracepoint_action *action)
+{
+  int size_in_ipa = (sizeof (struct collect_memory_action)
+		     - offsetof (struct tracepoint_action, type));
+  CORE_ADDR ipa_action = target_malloc (size_in_ipa);
+
+  write_inferior_memory (ipa_action, (unsigned char *) &action->type,
+			 size_in_ipa);
+
+  return ipa_action;
+}
+static char *
+m_tracepoint_action_send (char *buffer, const struct tracepoint_action *action)
+{
+  struct collect_memory_action *maction
+    = (struct collect_memory_action *) action;
+
+  COPY_FIELD_TO_BUF (buffer, maction, addr);
+  COPY_FIELD_TO_BUF (buffer, maction, len);
+  COPY_FIELD_TO_BUF (buffer, maction, basereg);
+
+  return buffer;
+}
+
+static const struct tracepoint_action_ops m_tracepoint_action_ops =
+{
+  m_tracepoint_action_download,
+  m_tracepoint_action_send,
+};
+
+static CORE_ADDR
+r_tracepoint_action_download (const struct tracepoint_action *action)
+{
+  int size_in_ipa = (sizeof (struct collect_registers_action)
+		     - offsetof (struct tracepoint_action, type));
+  CORE_ADDR ipa_action  = target_malloc (size_in_ipa);
+
+  write_inferior_memory (ipa_action, (unsigned char *) &action->type,
+			size_in_ipa);
+
+  return ipa_action;
+}
+
+static char *
+r_tracepoint_action_send (char *buffer, const struct tracepoint_action *action)
+{
+  return buffer;
+}
+
+static const struct tracepoint_action_ops r_tracepoint_action_ops =
+{
+  r_tracepoint_action_download,
+  r_tracepoint_action_send,
+};
+
+static CORE_ADDR download_agent_expr (struct agent_expr *expr);
+
+static CORE_ADDR
+x_tracepoint_action_download (const struct tracepoint_action *action)
+{
+  int size_in_ipa = (sizeof (struct eval_expr_action)
+		     - offsetof (struct tracepoint_action, type));
+  CORE_ADDR ipa_action = target_malloc (size_in_ipa);
+  CORE_ADDR expr;
+
+  write_inferior_memory (ipa_action, (unsigned char *) &action->type,
+			 size_in_ipa);
+  expr = download_agent_expr (((struct eval_expr_action *)action)->expr);
+  write_inferior_data_ptr (ipa_action + offsetof (struct eval_expr_action, expr)
+			   - offsetof (struct tracepoint_action, type),
+			   expr);
+
+  return ipa_action;
+}
+
+/* Copy agent expression AEXPR to buffer pointed by P.  If AEXPR is NULL,
+   copy 0 to P.  Return updated header of buffer.  */
+
+static char *
+agent_expr_send (char *p, const struct agent_expr *aexpr)
+{
+  /* Copy the length of condition first, and then copy its
+     content.  */
+  if (aexpr == NULL)
+    {
+      memset (p, 0, 4);
+      p += 4;
+    }
+  else
+    {
+      memcpy (p, &aexpr->length, 4);
+      p +=4;
+
+      memcpy (p, aexpr->bytes, aexpr->length);
+      p += aexpr->length;
+    }
+  return p;
+}
+
+static char *
+x_tracepoint_action_send ( char *buffer, const struct tracepoint_action *action)
+{
+  struct eval_expr_action *eaction = (struct eval_expr_action *) action;
+
+  return agent_expr_send (buffer, eaction->expr);
+}
+
+static const struct tracepoint_action_ops x_tracepoint_action_ops =
+{
+  x_tracepoint_action_download,
+  x_tracepoint_action_send,
+};
+
+static CORE_ADDR
+l_tracepoint_action_download (const struct tracepoint_action *action)
+{
+  int size_in_ipa = (sizeof (struct collect_static_trace_data_action)
+		     - offsetof (struct tracepoint_action, type));
+  CORE_ADDR ipa_action = target_malloc (size_in_ipa);
+
+  write_inferior_memory (ipa_action, (unsigned char *) &action->type,
+			 size_in_ipa);
+
+  return ipa_action;
+}
+
+static char *
+l_tracepoint_action_send (char *buffer, const struct tracepoint_action *action)
+{
+  return buffer;
+}
+
+static const struct tracepoint_action_ops l_tracepoint_action_ops =
+{
+  l_tracepoint_action_download,
+  l_tracepoint_action_send,
+};
+#endif
+
 /* This structure describes a piece of the source-level definition of
    the tracepoint.  The contents are not interpreted by the target,
    but preserved verbatim for uploading upon reconnection.  */
@@ -600,7 +725,7 @@ struct tracepoint
 {
   /* The number of the tracepoint, as specified by GDB.  Several
      tracepoint objects here may share a number.  */
-  int number;
+  uint32_t number;
 
   /* Address at which the tracepoint is supposed to trigger.  Several
      tracepoints may share an address.  */
@@ -610,30 +735,30 @@ struct tracepoint
   enum tracepoint_type type;
 
   /* True if the tracepoint is currently enabled.  */
-  int enabled;
+  int8_t enabled;
 
   /* The number of single steps that will be performed after each
      tracepoint hit.  */
-  long step_count;
+  uint64_t step_count;
 
   /* The number of times the tracepoint may be hit before it will
      terminate the entire tracing run.  */
-  long pass_count;
+  uint64_t pass_count;
 
   /* Pointer to the agent expression that is the tracepoint's
      conditional, or NULL if the tracepoint is unconditional.  */
   struct agent_expr *cond;
 
   /* The list of actions to take when the tracepoint triggers.  */
-  int numactions;
+  uint32_t numactions;
   struct tracepoint_action **actions;
 
   /* Count of the times we've hit this tracepoint during the run.
      Note that while-stepping steps are not counted as "hits".  */
-  long hit_count;
+  uint64_t hit_count;
 
   /* Cached sum of the sizes of traceframes created by this point.  */
-  long traceframe_usage;
+  uint64_t traceframe_usage;
 
   CORE_ADDR compiled_cond;
 
@@ -653,7 +778,7 @@ struct tracepoint
   /* The number of bytes displaced by fast tracepoints. It may subsume
      multiple instructions, for multi-byte fast tracepoints.  This
      field is only valid for fast tracepoints.  */
-  int orig_size;
+  uint32_t orig_size;
 
   /* Only for fast tracepoints.  */
   CORE_ADDR obj_addr_on_target;
@@ -738,22 +863,6 @@ IP_AGENT_EXPORT struct tracepoint *stopping_tracepoint;
 
 IP_AGENT_EXPORT int trace_buffer_is_full;
 
-/* Enumeration of the different kinds of things that can happen during
-   agent expression evaluation.  */
-
-enum eval_result_type
-  {
-    expr_eval_no_error,
-    expr_eval_empty_expression,
-    expr_eval_empty_stack,
-    expr_eval_stack_overflow,
-    expr_eval_stack_underflow,
-    expr_eval_unhandled_opcode,
-    expr_eval_unrecognized_opcode,
-    expr_eval_divide_by_zero,
-    expr_eval_invalid_goto
-  };
-
 static enum eval_result_type expr_eval_result = expr_eval_no_error;
 
 #ifndef IN_PROCESS_AGENT
@@ -1237,21 +1346,11 @@ struct trap_tracepoint_ctx
 
 #endif
 
-#ifndef IN_PROCESS_AGENT
-static struct agent_expr *parse_agent_expr (char **actparm);
-static char *unparse_agent_expr (struct agent_expr *aexpr);
-#endif
-static enum eval_result_type eval_agent_expr (struct tracepoint_hit_ctx *ctx,
-					      struct traceframe *tframe,
-					      struct agent_expr *aexpr,
-					      ULONGEST *rslt);
-
-static int agent_mem_read (struct traceframe *tframe,
-			   unsigned char *to, CORE_ADDR from, ULONGEST len);
-static int agent_mem_read_string (struct traceframe *tframe,
-				  unsigned char *to, CORE_ADDR from,
-				  ULONGEST len);
-static int agent_tsv_read (struct traceframe *tframe, int n);
+static enum eval_result_type
+eval_tracepoint_agent_expr (struct tracepoint_hit_ctx *ctx,
+			    struct traceframe *tframe,
+			    struct agent_expr *aexpr,
+			    ULONGEST *rslt);
 
 #ifndef IN_PROCESS_AGENT
 static CORE_ADDR traceframe_get_pc (struct traceframe *tframe);
@@ -1288,6 +1387,8 @@ static struct tracepoint *fast_tracepoint_from_ipa_tpoint_address (CORE_ADDR);
 static void install_tracepoint (struct tracepoint *, char *own_buf);
 static void download_tracepoint (struct tracepoint *);
 static int install_fast_tracepoint (struct tracepoint *, char *errbuf);
+static void clone_fast_tracepoint (struct tracepoint *to,
+				   const struct tracepoint *from);
 #endif
 
 static LONGEST get_timestamp (void);
@@ -1304,10 +1405,6 @@ static LONGEST get_timestamp (void);
 #define cmpxchg(mem, oldval, newval) \
   __sync_val_compare_and_swap (mem, oldval, newval)
 
-/* The size in bytes of the buffer used to talk to the IPA helper
-   thread.  */
-#define CMD_BUF_SIZE 1024
-
 /* Record that an error occurred during expression evaluation.  */
 
 static void
@@ -1760,6 +1857,28 @@ find_tracepoint (int id, CORE_ADDR addr)
   return NULL;
 }
 
+/* Remove TPOINT from global list.  */
+
+static void
+remove_tracepoint (struct tracepoint *tpoint)
+{
+  struct tracepoint *tp, *tp_prev;
+
+  for (tp = tracepoints, tp_prev = NULL; tp && tp != tpoint;
+       tp_prev = tp, tp = tp->next)
+    ;
+
+  if (tp)
+    {
+      if (tp_prev)
+	tp_prev->next = tp->next;
+      else
+	tracepoints = tp->next;
+
+      xfree (tp);
+    }
+}
+
 /* There may be several tracepoints with the same number (because they
    are "locations", in GDB parlance); return the next one after the
    given tracepoint, or search from the beginning of the list if the
@@ -1825,6 +1944,7 @@ add_tracepoint_action (struct tracepoint *tpoint, char *packet)
 
 	    maction = xmalloc (sizeof *maction);
 	    maction->base.type = *act;
+	    maction->base.ops = &m_tracepoint_action_ops;
 	    action = &maction->base;
 
 	    ++act;
@@ -1850,6 +1970,7 @@ add_tracepoint_action (struct tracepoint *tpoint, char *packet)
 
 	    raction = xmalloc (sizeof *raction);
 	    raction->base.type = *act;
+	    raction->base.ops = &r_tracepoint_action_ops;
 	    action = &raction->base;
 
 	    trace_debug ("Want to collect registers");
@@ -1865,6 +1986,7 @@ add_tracepoint_action (struct tracepoint *tpoint, char *packet)
 
 	    raction = xmalloc (sizeof *raction);
 	    raction->base.type = *act;
+	    raction->base.ops = &l_tracepoint_action_ops;
 	    action = &raction->base;
 
 	    trace_debug ("Want to collect static trace data");
@@ -1881,10 +2003,11 @@ add_tracepoint_action (struct tracepoint *tpoint, char *packet)
 
 	    xaction = xmalloc (sizeof (*xaction));
 	    xaction->base.type = *act;
+	    xaction->base.ops = &x_tracepoint_action_ops;
 	    action = &xaction->base;
 
 	    trace_debug ("Want to evaluate expression");
-	    xaction->expr = parse_agent_expr (&act);
+	    xaction->expr = gdb_parse_agent_expr (&act);
 	    break;
 	  }
 	default:
@@ -2028,6 +2151,18 @@ set_trace_state_variable_value (int num, LONGEST val)
   tsv->value = val;
 }
 
+LONGEST
+agent_get_trace_state_variable_value (int num)
+{
+  return get_trace_state_variable_value (num);
+}
+
+void
+agent_set_trace_state_variable_value (int num, LONGEST val)
+{
+  set_trace_state_variable_value (num, val);
+}
+
 static void
 set_trace_state_variable_name (int num, const char *name)
 {
@@ -2267,10 +2402,10 @@ cmd_qtinit (char *packet)
 static void
 unprobe_marker_at (CORE_ADDR address)
 {
-  char cmd[CMD_BUF_SIZE];
+  char cmd[IPA_CMD_BUF_SIZE];
 
   sprintf (cmd, "unprobe_marker_at:%s", paddress (address));
-  run_inferior_command (cmd);
+  run_inferior_command (cmd, strlen (cmd) + 1);
 }
 
 /* Restore the program to its pre-tracing state.  This routine may be called
@@ -2404,7 +2539,7 @@ cmd_qtdp (char *own_buf)
 	  else if (*packet == 'X')
 	    {
 	      actparm = (char *) packet;
-	      tpoint->cond = parse_agent_expr (&actparm);
+	      tpoint->cond = gdb_parse_agent_expr (&actparm);
 	      packet = actparm;
 	    }
 	  else if (*packet == '-')
@@ -2421,9 +2556,9 @@ cmd_qtdp (char *own_buf)
 	}
 
       trace_debug ("Defined %stracepoint %d at 0x%s, "
-		   "enabled %d step %ld pass %ld",
+		   "enabled %d step %" PRIu64 " pass %" PRIu64,
 		   tpoint->type == fast_tracepoint ? "fast "
-		   : "",
+		   : tpoint->type == static_tracepoint ? "static " : "",
 		   tpoint->number, paddress (tpoint->address), tpoint->enabled,
 		   tpoint->step_count, tpoint->pass_count);
     }
@@ -2443,6 +2578,8 @@ cmd_qtdp (char *own_buf)
      trailing hyphen in QTDP packet.  */
   if (tracing && !trail_hyphen)
     {
+      struct tracepoint *tp = NULL;
+
       /* Pause all threads temporarily while we patch tracepoints.  */
       pause_all (0);
 
@@ -2453,8 +2590,52 @@ cmd_qtdp (char *own_buf)
       /* Freeze threads.  */
       pause_all (1);
 
-      download_tracepoint (tpoint);
-      install_tracepoint (tpoint, own_buf);
+
+      if (tpoint->type != trap_tracepoint)
+	{
+	  /* Find another fast or static tracepoint at the same address.  */
+	  for (tp = tracepoints; tp; tp = tp->next)
+	    {
+	      if (tp->address == tpoint->address && tp->type == tpoint->type
+		  && tp->number != tpoint->number)
+		break;
+	    }
+
+	  /* TPOINT is installed at the same address as TP.  */
+	  if (tp)
+	    {
+	      if (tpoint->type == fast_tracepoint)
+		clone_fast_tracepoint (tpoint, tp);
+	      else if (tpoint->type == static_tracepoint)
+		tpoint->handle = (void *) -1;
+	    }
+	}
+
+      if (use_agent && tpoint->type == fast_tracepoint
+	  && agent_capability_check (AGENT_CAPA_FAST_TRACE))
+	{
+	  /* Download and install fast tracepoint by agent.  */
+	  if (tracepoint_send_agent (tpoint) == 0)
+	    write_ok (own_buf);
+	  else
+	    {
+	      write_enn (own_buf);
+	      remove_tracepoint (tpoint);
+	    }
+	}
+      else
+	{
+	  download_tracepoint (tpoint);
+
+	  if (tpoint->type == trap_tracepoint || tp == NULL)
+	    {
+	      install_tracepoint (tpoint, own_buf);
+	      if (strcmp (own_buf, "OK") != 0)
+		remove_tracepoint (tpoint);
+	    }
+	  else
+	    write_ok (own_buf);
+	}
 
       unpause_all (1);
       return;
@@ -2841,11 +3022,11 @@ have_fast_tracepoint_trampoline_buffer (char *buf)
 static int
 probe_marker_at (CORE_ADDR address, char *errout)
 {
-  char cmd[CMD_BUF_SIZE];
+  char cmd[IPA_CMD_BUF_SIZE];
   int err;
 
   sprintf (cmd, "probe_marker_at:%s", paddress (address));
-  err = run_inferior_command (cmd);
+  err = run_inferior_command (cmd, strlen (cmd) + 1);
 
   if (err == 0)
     {
@@ -2958,9 +3139,7 @@ install_tracepoint (struct tracepoint *tpoint, char *own_buf)
     }
   else if (tpoint->type == fast_tracepoint || tpoint->type == static_tracepoint)
     {
-      struct tracepoint *tp;
-
-      if (!in_process_agent_loaded ())
+      if (!agent_loaded_p ())
 	{
 	  trace_debug ("Requested a %s tracepoint, but fast "
 		       "tracepoints aren't supported.",
@@ -2968,7 +3147,8 @@ install_tracepoint (struct tracepoint *tpoint, char *own_buf)
 	  write_e_ipa_not_loaded (own_buf);
 	  return;
 	}
-      if (tpoint->type == static_tracepoint && !in_process_agent_loaded_ust ())
+      if (tpoint->type == static_tracepoint
+	  && !in_process_agent_supports_ust ())
 	{
 	  trace_debug ("Requested a static tracepoint, but static "
 		       "tracepoints are not supported.");
@@ -2976,30 +3156,12 @@ install_tracepoint (struct tracepoint *tpoint, char *own_buf)
 	  return;
 	}
 
-      /* Find another fast or static tracepoint at the same address.  */
-      for (tp = tracepoints; tp; tp = tp->next)
-	{
-	  if (tp->address == tpoint->address && tp->type == tpoint->type
-	      && tp->number != tpoint->number)
-	    break;
-	}
-
       if (tpoint->type == fast_tracepoint)
-	{
-	  if (tp) /* TPOINT is installed at the same address as TP.  */
-	    clone_fast_tracepoint (tpoint, tp);
-	  else
-	    install_fast_tracepoint (tpoint, own_buf);
-	}
+	install_fast_tracepoint (tpoint, own_buf);
       else
 	{
-	  if (tp)
+	  if (probe_marker_at (tpoint->address, own_buf) == 0)
 	    tpoint->handle = (void *) -1;
-	  else
-	    {
-	      if (probe_marker_at (tpoint->address, own_buf) == 0)
-		tpoint->handle = (void *) -1;
-	    }
 	}
 
     }
@@ -3015,10 +3177,13 @@ install_tracepoint (struct tracepoint *tpoint, char *own_buf)
     write_ok (own_buf);
 }
 
+static void download_tracepoint_1 (struct tracepoint *tpoint);
+
 static void
 cmd_qtstart (char *packet)
 {
   struct tracepoint *tpoint, *prev_ftpoint, *prev_stpoint;
+  CORE_ADDR tpptr = 0, prev_tpptr = 0;
 
   trace_debug ("Starting the trace");
 
@@ -3035,11 +3200,8 @@ cmd_qtstart (char *packet)
   pause_all (1);
 
   /* Sync the fast tracepoints list in the inferior ftlib.  */
-  if (in_process_agent_loaded ())
-    {
-      download_tracepoints ();
-      download_trace_state_variables ();
-    }
+  if (agent_loaded_p ())
+    download_trace_state_variables ();
 
   /* No previous fast tpoint yet.  */
   prev_ftpoint = NULL;
@@ -3049,7 +3211,11 @@ cmd_qtstart (char *packet)
 
   *packet = '\0';
 
-  /* Install tracepoints.  */
+  /* Start out empty.  */
+  if (agent_loaded_p ())
+    write_inferior_data_ptr (ipa_sym_addrs.addr_tracepoints, 0);
+
+  /* Download and install tracepoints.  */
   for (tpoint = tracepoints; tpoint; tpoint = tpoint->next)
     {
       /* Ensure all the hit counts start at zero.  */
@@ -3065,48 +3231,89 @@ cmd_qtstart (char *packet)
 	  tpoint->handle = set_breakpoint_at (tpoint->address,
 					      tracepoint_handler);
 	}
-      else if (tpoint->type == fast_tracepoint)
+      else if (tpoint->type == fast_tracepoint
+	       || tpoint->type == static_tracepoint)
 	{
 	  if (maybe_write_ipa_not_loaded (packet))
 	    {
-	      trace_debug ("Requested a fast tracepoint, but fast "
-			   "tracepoints aren't supported.");
+	      trace_debug ("Requested a %s tracepoint, but fast "
+			   "tracepoints aren't supported.",
+			   tpoint->type == static_tracepoint
+			   ? "static" : "fast");
 	      break;
 	    }
 
-	  if (prev_ftpoint != NULL && prev_ftpoint->address == tpoint->address)
-	    clone_fast_tracepoint (tpoint, prev_ftpoint);
-	  else
-	    {
-	      if (install_fast_tracepoint (tpoint, packet) == 0)
-		prev_ftpoint = tpoint;
-	    }
-	}
-      else if (tpoint->type == static_tracepoint)
-	{
-	  if (maybe_write_ipa_ust_not_loaded (packet))
+	  if (tpoint->type == fast_tracepoint)
 	    {
-	      trace_debug ("Requested a static tracepoint, but static "
-			   "tracepoints are not supported.");
-	      break;
-	    }
+	      int use_agent_p
+		= use_agent && agent_capability_check (AGENT_CAPA_FAST_TRACE);
 
-	  /* Can only probe a given marker once.  */
-	  if (prev_stpoint != NULL && prev_stpoint->address == tpoint->address)
-	    {
-	      tpoint->handle = (void *) -1;
+	      if (prev_ftpoint != NULL
+		  && prev_ftpoint->address == tpoint->address)
+		{
+		  if (use_agent_p)
+		    tracepoint_send_agent (tpoint);
+		  else
+		    download_tracepoint_1 (tpoint);
+
+		  clone_fast_tracepoint (tpoint, prev_ftpoint);
+		}
+	      else
+		{
+		  /* Tracepoint is installed successfully?  */
+		  int installed = 0;
+
+		  /* Download and install fast tracepoint by agent.  */
+		  if (use_agent_p)
+		    installed = !tracepoint_send_agent (tpoint);
+		  else
+		    {
+		      download_tracepoint_1 (tpoint);
+		      installed = !install_fast_tracepoint (tpoint, packet);
+		    }
+
+		  if (installed)
+		    prev_ftpoint = tpoint;
+		}
 	    }
 	  else
 	    {
-	      if (probe_marker_at (tpoint->address, packet) == 0)
+	      if (!in_process_agent_supports_ust ())
 		{
-		  tpoint->handle = (void *) -1;
+		  trace_debug ("Requested a static tracepoint, but static "
+			       "tracepoints are not supported.");
+		  break;
+		}
 
-		  /* So that we can handle multiple static tracepoints
-		     at the same address easily.  */
-		  prev_stpoint = tpoint;
+	      download_tracepoint_1 (tpoint);
+	      /* Can only probe a given marker once.  */
+	      if (prev_stpoint != NULL
+		  && prev_stpoint->address == tpoint->address)
+		tpoint->handle = (void *) -1;
+	      else
+		{
+		  if (probe_marker_at (tpoint->address, packet) == 0)
+		    {
+		      tpoint->handle = (void *) -1;
+
+		      /* So that we can handle multiple static tracepoints
+			 at the same address easily.  */
+		      prev_stpoint = tpoint;
+		    }
 		}
 	    }
+
+	  prev_tpptr = tpptr;
+	  tpptr = tpoint->obj_addr_on_target;
+
+	  if (tpoint == tracepoints)
+	    /* First object in list, set the head pointer in the
+	       inferior.  */
+	    write_inferior_data_ptr (ipa_sym_addrs.addr_tracepoints, tpptr);
+	  else
+	    write_inferior_data_ptr (prev_tpptr + offsetof (struct tracepoint,
+							    next),
+				     tpptr);
 	}
 
       /* Any failure in the inner loop is sufficient cause to give
@@ -3136,7 +3343,7 @@ cmd_qtstart (char *packet)
   /* Tracing is now active, hits will now start being logged.  */
   tracing = 1;
 
-  if (in_process_agent_loaded ())
+  if (agent_loaded_p ())
     {
       if (write_inferior_integer (ipa_sym_addrs.addr_tracing, 1))
 	fatal ("Error setting tracing variable in lib");
@@ -3195,7 +3402,7 @@ stop_tracing (void)
   /* Stop logging. Tracepoints can still be hit, but they will not be
      recorded.  */
   tracing = 0;
-  if (in_process_agent_loaded ())
+  if (agent_loaded_p ())
     {
       if (write_inferior_integer (ipa_sym_addrs.addr_tracing, 0))
 	fatal ("Error clearing tracing variable in lib");
@@ -3207,7 +3414,7 @@ stop_tracing (void)
   if (stopping_tracepoint)
     {
       trace_debug ("Stopping the trace because "
-		   "tracepoint %d was hit %ld times",
+		   "tracepoint %d was hit %" PRIu64 " times",
 		   stopping_tracepoint->number,
 		   stopping_tracepoint->pass_count);
       tracing_stop_reason = "tpasscount";
@@ -3243,7 +3450,7 @@ stop_tracing (void)
   /* Clear out the tracepoints.  */
   clear_installed_tracepoints ();
 
-  if (in_process_agent_loaded ())
+  if (agent_loaded_p ())
     {
       /* Pull in fast tracepoint trace frames from the inferior lib
 	 buffer into our buffer, even if our buffer is already full,
@@ -3406,7 +3613,7 @@ cmd_qtstatus (char *packet)
   trace_debug ("Returning trace status as %d, stop reason %s",
 	       tracing, tracing_stop_reason);
 
-  if (in_process_agent_loaded ())
+  if (agent_loaded_p ())
     {
       pause_all (1);
 
@@ -3485,7 +3692,8 @@ cmd_qtp (char *own_buf)
       return;
     }
 
-  sprintf (own_buf, "V%lx:%lx", tpoint->hit_count, tpoint->traceframe_usage);
+  sprintf (own_buf, "V%" PRIu64 ":%" PRIu64 "", tpoint->hit_count,
+	   tpoint->traceframe_usage);
 }
 
 /* State variables to help return all the tracepoint bits.  */
@@ -3503,7 +3711,7 @@ response_tracepoint (char *packet, struct tracepoint *tpoint)
 {
   char *buf;
 
-  sprintf (packet, "T%x:%s:%c:%lx:%lx", tpoint->number,
+  sprintf (packet, "T%x:%s:%c:%" PRIx64 ":%" PRIx64, tpoint->number,
 	   paddress (tpoint->address),
 	   (tpoint->enabled ? 'E' : 'D'), tpoint->step_count,
 	   tpoint->pass_count);
@@ -3514,7 +3722,7 @@ response_tracepoint (char *packet, struct tracepoint *tpoint)
 
   if (tpoint->cond)
     {
-      buf = unparse_agent_expr (tpoint->cond);
+      buf = gdb_unparse_agent_expr (tpoint->cond);
       sprintf (packet + strlen (packet), ":X%x,%s",
 	       tpoint->cond->length, buf);
       free (buf);
@@ -3693,7 +3901,7 @@ static void
 cmd_qtfstm (char *packet)
 {
   if (!maybe_write_ipa_ust_not_loaded (packet))
-    run_inferior_command (packet);
+    run_inferior_command (packet, strlen (packet) + 1);
 }
 
 /* Return additional static tracepoints markers.  */
@@ -3702,7 +3910,7 @@ static void
 cmd_qtsstm (char *packet)
 {
   if (!maybe_write_ipa_ust_not_loaded (packet))
-    run_inferior_command (packet);
+    run_inferior_command (packet, strlen (packet) + 1);
 }
 
 /* Return the definition of the static tracepoint at a given address.
@@ -3712,7 +3920,7 @@ static void
 cmd_qtstmat (char *packet)
 {
   if (!maybe_write_ipa_ust_not_loaded (packet))
-    run_inferior_command (packet);
+    run_inferior_command (packet, strlen (packet) + 1);
 }
 
 /* Return the minimum instruction size needed for fast tracepoints as a
@@ -3721,6 +3929,13 @@ cmd_qtstmat (char *packet)
 static void
 cmd_qtminftpilen (char *packet)
 {
+  if (current_inferior == NULL)
+    {
+      /* Indicate that the minimum length is currently unknown.  */
+      strcpy (packet, "0");
+      return;
+    }
+
   sprintf (packet, "%x", target_get_min_fast_tracepoint_insn_len ());
 }
 
@@ -3779,24 +3994,18 @@ cmd_qtbuffer (char *own_buf)
 }
 
 static void
-cmd_bigqtbuffer (char *own_buf)
+cmd_bigqtbuffer_circular (char *own_buf)
 {
   ULONGEST val;
   char *packet = own_buf;
 
-  packet += strlen ("QTBuffer:");
+  packet += strlen ("QTBuffer:circular:");
 
-  if (strncmp ("circular:", packet, strlen ("circular:")) == 0)
-    {
-      packet += strlen ("circular:");
-      unpack_varlen_hex (packet, &val);
-      circular_trace_buffer = val;
-      trace_debug ("Trace buffer is now %s",
-		   circular_trace_buffer ? "circular" : "linear");
-      write_ok (own_buf);
-    }
-  else
-    write_enn (own_buf);
+  unpack_varlen_hex (packet, &val);
+  circular_trace_buffer = val;
+  trace_debug ("Trace buffer is now %s",
+	       circular_trace_buffer ? "circular" : "linear");
+  write_ok (own_buf);
 }
 
 static void
@@ -3915,9 +4124,9 @@ handle_tracepoint_general_set (char *packet)
       cmd_qtframe (packet);
       return 1;
     }
-  else if (strncmp ("QTBuffer:", packet, strlen ("QTBuffer:")) == 0)
+  else if (strncmp ("QTBuffer:circular:", packet, strlen ("QTBuffer:circular:")) == 0)
     {
-      cmd_bigqtbuffer (packet);
+      cmd_bigqtbuffer_circular (packet);
       return 1;
     }
   else if (strncmp ("QTNotes:", packet, strlen ("QTNotes:")) == 0)
@@ -4073,7 +4282,7 @@ tracepoint_finished_step (struct thread_info *tinfo, CORE_ADDR stop_pc)
 
   /* Pull in fast tracepoint trace frames from the inferior lib buffer into
      our buffer.  */
-  if (in_process_agent_loaded ())
+  if (agent_loaded_p ())
     upload_fast_traceframes ();
 
   /* Check if we were indeed collecting data for one of more
@@ -4174,7 +4383,7 @@ handle_tracepoint_bkpts (struct thread_info *tinfo, CORE_ADDR stop_pc)
   /* Pull in fast tracepoint trace frames from the inferior in-process
      agent's buffer into our buffer.  */
 
-  if (!in_process_agent_loaded ())
+  if (!agent_loaded_p ())
     return 0;
 
   upload_fast_traceframes ();
@@ -4268,8 +4477,12 @@ tracepoint_was_hit (struct thread_info *tinfo, CORE_ADDR stop_pc)
     {
       /* Note that we collect fast tracepoints here as well.  We'll
 	 step over the fast tracepoint jump later, which avoids the
-	 double collect.  */
-      if (tpoint->enabled && stop_pc == tpoint->address)
+	 double collect.  However, we don't collect for static
+	 tracepoints here, because UST markers are compiled in program,
+	 and probes will be executed in program.  So static tracepoints
+	 are collected there.   */
+      if (tpoint->enabled && stop_pc == tpoint->address
+	  && tpoint->type != static_tracepoint)
 	{
 	  trace_debug ("Thread %s at address of tracepoint %d at 0x%s",
 		       target_pid_to_str (tinfo->entry.id),
@@ -4309,8 +4522,6 @@ tracepoint_was_hit (struct thread_info *tinfo, CORE_ADDR stop_pc)
 #if defined IN_PROCESS_AGENT && defined HAVE_UST
 struct ust_marker_data;
 static void collect_ust_data_at_tracepoint (struct tracepoint_hit_ctx *ctx,
-					    CORE_ADDR stop_pc,
-					    struct tracepoint *tpoint,
 					    struct traceframe *tframe);
 #endif
 
@@ -4337,7 +4548,7 @@ collect_data_at_tracepoint (struct tracepoint_hit_ctx *ctx, CORE_ADDR stop_pc,
       && stopping_tracepoint == NULL)
     stopping_tracepoint = tpoint;
 
-  trace_debug ("Making new traceframe for tracepoint %d at 0x%s, hit %ld",
+  trace_debug ("Making new traceframe for tracepoint %d at 0x%s, hit %" PRIu64,
 	       tpoint->number, paddress (tpoint->address), tpoint->hit_count);
 
   tframe = add_traceframe (tpoint);
@@ -4374,7 +4585,7 @@ collect_data_at_step (struct tracepoint_hit_ctx *ctx,
   int acti;
 
   trace_debug ("Making new step traceframe for "
-	       "tracepoint %d at 0x%s, step %d of %ld, hit %ld",
+	       "tracepoint %d at 0x%s, step %d of %" PRIu64 ", hit %" PRIu64,
 	       tpoint->number, paddress (tpoint->address),
 	       current_step, tpoint->step_count,
 	       tpoint->hit_count);
@@ -4520,7 +4731,7 @@ do_action_at_tracepoint (struct tracepoint_hit_ctx *ctx,
 	   preemptively), since the PC had already been adjusted to
 	   contain the tracepoint's address by the jump pad.  */
 	trace_debug ("Storing stop pc (0x%s) in regblock",
-		     paddress (tpoint->address));
+		     paddress (stop_pc));
 
 	/* This changes the regblock, not the thread's
 	   regcache.  */
@@ -4536,7 +4747,7 @@ do_action_at_tracepoint (struct tracepoint_hit_ctx *ctx,
 
 	trace_debug ("Want to evaluate expression");
 
-	err = eval_agent_expr (ctx, tframe, eaction->expr, NULL);
+	err = eval_tracepoint_agent_expr (ctx, tframe, eaction->expr, NULL);
 
 	if (err != expr_eval_no_error)
 	  {
@@ -4549,8 +4760,7 @@ do_action_at_tracepoint (struct tracepoint_hit_ctx *ctx,
       {
 #if defined IN_PROCESS_AGENT && defined HAVE_UST
 	trace_debug ("Want to collect static trace data");
-	collect_ust_data_at_tracepoint (ctx, stop_pc,
-					tpoint, tframe);
+	collect_ust_data_at_tracepoint (ctx, tframe);
 #else
 	trace_debug ("warning: collecting static trace data, "
 		     "but static tracepoints are not supported");
@@ -4589,7 +4799,7 @@ condition_true_at_tracepoint (struct tracepoint_hit_ctx *ctx,
     err = ((condfn) (uintptr_t) (tpoint->compiled_cond)) (ctx, &value);
   else
 #endif
-    err = eval_agent_expr (ctx, NULL, tpoint->cond, &value);
+    err = eval_tracepoint_agent_expr (ctx, NULL, tpoint->cond, &value);
 
   if (err != expr_eval_no_error)
     {
@@ -4604,481 +4814,44 @@ condition_true_at_tracepoint (struct tracepoint_hit_ctx *ctx,
   return (value ? 1 : 0);
 }
 
-#ifndef IN_PROCESS_AGENT
-
-/* The packet form of an agent expression consists of an 'X', number
-   of bytes in expression, a comma, and then the bytes.  */
-
-static struct agent_expr *
-parse_agent_expr (char **actparm)
-{
-  char *act = *actparm;
-  ULONGEST xlen;
-  struct agent_expr *aexpr;
-
-  ++act;  /* skip the X */
-  act = unpack_varlen_hex (act, &xlen);
-  ++act;  /* skip a comma */
-  aexpr = xmalloc (sizeof (struct agent_expr));
-  aexpr->length = xlen;
-  aexpr->bytes = xmalloc (xlen);
-  convert_ascii_to_int (act, aexpr->bytes, xlen);
-  *actparm = act + (xlen * 2);
-  return aexpr;
-}
-
-/* Convert the bytes of an agent expression back into hex digits, so
-   they can be printed or uploaded.  This allocates the buffer,
-   callers should free when they are done with it.  */
+/* Evaluates a tracepoint agent expression with context CTX,
+   traceframe TFRAME, agent expression AEXPR and store the
+   result in RSLT.  */
 
-static char *
-unparse_agent_expr (struct agent_expr *aexpr)
+static enum eval_result_type
+eval_tracepoint_agent_expr (struct tracepoint_hit_ctx *ctx,
+			    struct traceframe *tframe,
+			    struct agent_expr *aexpr,
+			    ULONGEST *rslt)
 {
-  char *rslt;
+  struct regcache *regcache;
+  regcache = get_context_regcache (ctx);
 
-  rslt = xmalloc (2 * aexpr->length + 1);
-  convert_int_to_ascii (aexpr->bytes, rslt, aexpr->length);
-  return rslt;
+  return gdb_eval_agent_expr (regcache, tframe, aexpr, rslt);
 }
 
-#endif
-
-/* A wrapper for gdb_agent_op_names that does some bounds-checking.  */
+/* Do memory copies for bytecodes.  */
+/* Do the recording of memory blocks for actions and bytecodes.  */
 
-static const char *
-gdb_agent_op_name (int op)
+int
+agent_mem_read (struct traceframe *tframe,
+		unsigned char *to, CORE_ADDR from, ULONGEST len)
 {
-  if (op < 0 || op >= gdb_agent_op_last || gdb_agent_op_names[op] == NULL)
-    return "?undef?";
-  return gdb_agent_op_names[op];
-}
-
-/* The agent expression evaluator, as specified by the GDB docs. It
-   returns 0 if everything went OK, and a nonzero error code
-   otherwise.  */
-
-static enum eval_result_type
-eval_agent_expr (struct tracepoint_hit_ctx *ctx,
-		 struct traceframe *tframe,
-		 struct agent_expr *aexpr,
-		 ULONGEST *rslt)
-{
-  int pc = 0;
-#define STACK_MAX 100
-  ULONGEST stack[STACK_MAX], top;
-  int sp = 0;
-  unsigned char op;
-  int arg;
-
-  /* This union is a convenient way to convert representations.  For
-     now, assume a standard architecture where the hardware integer
-     types have 8, 16, 32, 64 bit types.  A more robust solution would
-     be to import stdint.h from gnulib.  */
-  union
-  {
-    union
-    {
-      unsigned char bytes[1];
-      unsigned char val;
-    } u8;
-    union
-    {
-      unsigned char bytes[2];
-      unsigned short val;
-    } u16;
-    union
-    {
-      unsigned char bytes[4];
-      unsigned int val;
-    } u32;
-    union
-    {
-      unsigned char bytes[8];
-      ULONGEST val;
-    } u64;
-  } cnv;
+  unsigned char *mspace;
+  ULONGEST remaining = len;
+  unsigned short blocklen;
 
-  if (aexpr->length == 0)
+  /* If a 'to' buffer is specified, use it.  */
+  if (to != NULL)
     {
-      trace_debug ("empty agent expression");
-      return expr_eval_empty_expression;
+      read_inferior_memory (from, to, len);
+      return 0;
     }
 
-  /* Cache the stack top in its own variable. Much of the time we can
-     operate on this variable, rather than dinking with the stack. It
-     needs to be copied to the stack when sp changes.  */
-  top = 0;
-
-  while (1)
+  /* Otherwise, create a new memory block in the trace buffer.  */
+  while (remaining > 0)
     {
-      op = aexpr->bytes[pc++];
-
-      trace_debug ("About to interpret byte 0x%x", op);
-
-      switch (op)
-	{
-	case gdb_agent_op_add:
-	  top += stack[--sp];
-	  break;
-
-	case gdb_agent_op_sub:
-	  top = stack[--sp] - top;
-	  break;
-
-	case gdb_agent_op_mul:
-	  top *= stack[--sp];
-	  break;
-
-	case gdb_agent_op_div_signed:
-	  if (top == 0)
-	    {
-	      trace_debug ("Attempted to divide by zero");
-	      return expr_eval_divide_by_zero;
-	    }
-	  top = ((LONGEST) stack[--sp]) / ((LONGEST) top);
-	  break;
-
-	case gdb_agent_op_div_unsigned:
-	  if (top == 0)
-	    {
-	      trace_debug ("Attempted to divide by zero");
-	      return expr_eval_divide_by_zero;
-	    }
-	  top = stack[--sp] / top;
-	  break;
-
-	case gdb_agent_op_rem_signed:
-	  if (top == 0)
-	    {
-	      trace_debug ("Attempted to divide by zero");
-	      return expr_eval_divide_by_zero;
-	    }
-	  top = ((LONGEST) stack[--sp]) % ((LONGEST) top);
-	  break;
-
-	case gdb_agent_op_rem_unsigned:
-	  if (top == 0)
-	    {
-	      trace_debug ("Attempted to divide by zero");
-	      return expr_eval_divide_by_zero;
-	    }
-	  top = stack[--sp] % top;
-	  break;
-
-	case gdb_agent_op_lsh:
-	  top = stack[--sp] << top;
-	  break;
-
-	case gdb_agent_op_rsh_signed:
-	  top = ((LONGEST) stack[--sp]) >> top;
-	  break;
-
-	case gdb_agent_op_rsh_unsigned:
-	  top = stack[--sp] >> top;
-	  break;
-
-	case gdb_agent_op_trace:
-	  agent_mem_read (tframe,
-			  NULL, (CORE_ADDR) stack[--sp], (ULONGEST) top);
-	  if (--sp >= 0)
-	    top = stack[sp];
-	  break;
-
-	case gdb_agent_op_trace_quick:
-	  arg = aexpr->bytes[pc++];
-	  agent_mem_read (tframe, NULL, (CORE_ADDR) top, (ULONGEST) arg);
-	  break;
-
-	case gdb_agent_op_log_not:
-	  top = !top;
-	  break;
-
-	case gdb_agent_op_bit_and:
-	  top &= stack[--sp];
-	  break;
-
-	case gdb_agent_op_bit_or:
-	  top |= stack[--sp];
-	  break;
-
-	case gdb_agent_op_bit_xor:
-	  top ^= stack[--sp];
-	  break;
-
-	case gdb_agent_op_bit_not:
-	  top = ~top;
-	  break;
-
-	case gdb_agent_op_equal:
-	  top = (stack[--sp] == top);
-	  break;
-
-	case gdb_agent_op_less_signed:
-	  top = (((LONGEST) stack[--sp]) < ((LONGEST) top));
-	  break;
-
-	case gdb_agent_op_less_unsigned:
-	  top = (stack[--sp] < top);
-	  break;
-
-	case gdb_agent_op_ext:
-	  arg = aexpr->bytes[pc++];
-	  if (arg < (sizeof (LONGEST) * 8))
-	    {
-	      LONGEST mask = 1 << (arg - 1);
-	      top &= ((LONGEST) 1 << arg) - 1;
-	      top = (top ^ mask) - mask;
-	    }
-	  break;
-
-	case gdb_agent_op_ref8:
-	  agent_mem_read (tframe, cnv.u8.bytes, (CORE_ADDR) top, 1);
-	  top = cnv.u8.val;
-	  break;
-
-	case gdb_agent_op_ref16:
-	  agent_mem_read (tframe, cnv.u16.bytes, (CORE_ADDR) top, 2);
-	  top = cnv.u16.val;
-	  break;
-
-	case gdb_agent_op_ref32:
-	  agent_mem_read (tframe, cnv.u32.bytes, (CORE_ADDR) top, 4);
-	  top = cnv.u32.val;
-	  break;
-
-	case gdb_agent_op_ref64:
-	  agent_mem_read (tframe, cnv.u64.bytes, (CORE_ADDR) top, 8);
-	  top = cnv.u64.val;
-	  break;
-
-	case gdb_agent_op_if_goto:
-	  if (top)
-	    pc = (aexpr->bytes[pc] << 8) + (aexpr->bytes[pc + 1]);
-	  else
-	    pc += 2;
-	  if (--sp >= 0)
-	    top = stack[sp];
-	  break;
-
-	case gdb_agent_op_goto:
-	  pc = (aexpr->bytes[pc] << 8) + (aexpr->bytes[pc + 1]);
-	  break;
-
-	case gdb_agent_op_const8:
-	  /* Flush the cached stack top.  */
-	  stack[sp++] = top;
-	  top = aexpr->bytes[pc++];
-	  break;
-
-	case gdb_agent_op_const16:
-	  /* Flush the cached stack top.  */
-	  stack[sp++] = top;
-	  top = aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  break;
-
-	case gdb_agent_op_const32:
-	  /* Flush the cached stack top.  */
-	  stack[sp++] = top;
-	  top = aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  break;
-
-	case gdb_agent_op_const64:
-	  /* Flush the cached stack top.  */
-	  stack[sp++] = top;
-	  top = aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  break;
-
-	case gdb_agent_op_reg:
-	  /* Flush the cached stack top.  */
-	  stack[sp++] = top;
-	  arg = aexpr->bytes[pc++];
-	  arg = (arg << 8) + aexpr->bytes[pc++];
-	  {
-	    int regnum = arg;
-	    struct regcache *regcache;
-
-	    regcache = get_context_regcache (ctx);
-
-	    switch (register_size (regnum))
-	      {
-	      case 8:
-		collect_register (regcache, regnum, cnv.u64.bytes);
-		top = cnv.u64.val;
-		break;
-	      case 4:
-		collect_register (regcache, regnum, cnv.u32.bytes);
-		top = cnv.u32.val;
-		break;
-	      case 2:
-		collect_register (regcache, regnum, cnv.u16.bytes);
-		top = cnv.u16.val;
-		break;
-	      case 1:
-		collect_register (regcache, regnum, cnv.u8.bytes);
-		top = cnv.u8.val;
-		break;
-	      default:
-		internal_error (__FILE__, __LINE__,
-				"unhandled register size");
-	      }
-	  }
-	  break;
-
-	case gdb_agent_op_end:
-	  trace_debug ("At end of expression, sp=%d, stack top cache=0x%s",
-		       sp, pulongest (top));
-	  if (rslt)
-	    {
-	      if (sp <= 0)
-		{
-		  /* This should be an error */
-		  trace_debug ("Stack is empty, nothing to return");
-		  return expr_eval_empty_stack;
-		}
-	      *rslt = top;
-	    }
-	  return expr_eval_no_error;
-
-	case gdb_agent_op_dup:
-	  stack[sp++] = top;
-	  break;
-
-	case gdb_agent_op_pop:
-	  if (--sp >= 0)
-	    top = stack[sp];
-	  break;
-
-	case gdb_agent_op_pick:
-	  arg = aexpr->bytes[pc++];
-	  stack[sp] = top;
-	  top = stack[sp - arg];
-	  ++sp;
-	  break;
-
-	case gdb_agent_op_rot:
-	  {
-	    ULONGEST tem = stack[sp - 1];
-
-	    stack[sp - 1] = stack[sp - 2];
-	    stack[sp - 2] = top;
-	    top = tem;
-	  }
-	  break;
-
-	case gdb_agent_op_zero_ext:
-	  arg = aexpr->bytes[pc++];
-	  if (arg < (sizeof (LONGEST) * 8))
-	    top &= ((LONGEST) 1 << arg) - 1;
-	  break;
-
-	case gdb_agent_op_swap:
-	  /* Interchange top two stack elements, making sure top gets
-	     copied back onto stack.  */
-	  stack[sp] = top;
-	  top = stack[sp - 1];
-	  stack[sp - 1] = stack[sp];
-	  break;
-
-	case gdb_agent_op_getv:
-	  /* Flush the cached stack top.  */
-	  stack[sp++] = top;
-	  arg = aexpr->bytes[pc++];
-	  arg = (arg << 8) + aexpr->bytes[pc++];
-	  top = get_trace_state_variable_value (arg);
-	  break;
-
-	case gdb_agent_op_setv:
-	  arg = aexpr->bytes[pc++];
-	  arg = (arg << 8) + aexpr->bytes[pc++];
-	  set_trace_state_variable_value (arg, top);
-	  /* Note that we leave the value on the stack, for the
-	     benefit of later/enclosing expressions.  */
-	  break;
-
-	case gdb_agent_op_tracev:
-	  arg = aexpr->bytes[pc++];
-	  arg = (arg << 8) + aexpr->bytes[pc++];
-	  agent_tsv_read (tframe, arg);
-	  break;
-
-	case gdb_agent_op_tracenz:
-	  agent_mem_read_string (tframe, NULL, (CORE_ADDR) stack[--sp],
-				 (ULONGEST) top);
-	  if (--sp >= 0)
-	    top = stack[sp];
-	  break;
-
-	  /* GDB never (currently) generates any of these ops.  */
-	case gdb_agent_op_float:
-	case gdb_agent_op_ref_float:
-	case gdb_agent_op_ref_double:
-	case gdb_agent_op_ref_long_double:
-	case gdb_agent_op_l_to_d:
-	case gdb_agent_op_d_to_l:
-	case gdb_agent_op_trace16:
-	  trace_debug ("Agent expression op 0x%x valid, but not handled",
-		       op);
-	  /* If ever GDB generates any of these, we don't have the
-	     option of ignoring.  */
-	  return 1;
-
-	default:
-	  trace_debug ("Agent expression op 0x%x not recognized", op);
-	  /* Don't struggle on, things will just get worse.  */
-	  return expr_eval_unrecognized_opcode;
-	}
-
-      /* Check for stack badness.  */
-      if (sp >= (STACK_MAX - 1))
-	{
-	  trace_debug ("Expression stack overflow");
-	  return expr_eval_stack_overflow;
-	}
-
-      if (sp < 0)
-	{
-	  trace_debug ("Expression stack underflow");
-	  return expr_eval_stack_underflow;
-	}
-
-      trace_debug ("Op %s -> sp=%d, top=0x%s",
-		   gdb_agent_op_name (op), sp, pulongest (top));
-    }
-}
-
-/* Do memory copies for bytecodes.  */
-/* Do the recording of memory blocks for actions and bytecodes.  */
-
-static int
-agent_mem_read (struct traceframe *tframe,
-		unsigned char *to, CORE_ADDR from, ULONGEST len)
-{
-  unsigned char *mspace;
-  ULONGEST remaining = len;
-  unsigned short blocklen;
-
-  /* If a 'to' buffer is specified, use it.  */
-  if (to != NULL)
-    {
-      read_inferior_memory (from, to, len);
-      return 0;
-    }
-
-  /* Otherwise, create a new memory block in the trace buffer.  */
-  while (remaining > 0)
-    {
-      size_t sp;
+      size_t sp;
 
       blocklen = (remaining > 65535 ? 65535 : remaining);
       sp = 1 + sizeof (from) + sizeof (blocklen) + blocklen;
@@ -5102,7 +4875,7 @@ agent_mem_read (struct traceframe *tframe,
   return 0;
 }
 
-static int
+int
 agent_mem_read_string (struct traceframe *tframe,
 		       unsigned char *to, CORE_ADDR from, ULONGEST len)
 {
@@ -5164,7 +4937,7 @@ agent_mem_read_string (struct traceframe *tframe,
 
 /* Record the value of a trace state variable.  */
 
-static int
+int
 agent_tsv_read (struct traceframe *tframe, int n)
 {
   unsigned char *vspace;
@@ -5957,250 +5730,24 @@ gdb_collect (struct tracepoint *tpoint, unsigned char *regs)
 
 #ifndef IN_PROCESS_AGENT
 
-/* Bytecode compilation.  */
-
-CORE_ADDR current_insn_ptr;
-
-int emit_error;
-
-struct bytecode_address
-{
-  int pc;
-  CORE_ADDR address;
-  int goto_pc;
-  /* Offset and size of field to be modified in the goto block.  */
-  int from_offset, from_size;
-  struct bytecode_address *next;
-} *bytecode_address_table;
-
 CORE_ADDR
 get_raw_reg_func_addr (void)
 {
   return ipa_sym_addrs.addr_get_raw_reg;
 }
 
-static void
-emit_prologue (void)
-{
-  target_emit_ops ()->emit_prologue ();
-}
-
-static void
-emit_epilogue (void)
-{
-  target_emit_ops ()->emit_epilogue ();
-}
-
-static void
-emit_add (void)
-{
-  target_emit_ops ()->emit_add ();
-}
-
-static void
-emit_sub (void)
-{
-  target_emit_ops ()->emit_sub ();
-}
-
-static void
-emit_mul (void)
-{
-  target_emit_ops ()->emit_mul ();
-}
-
-static void
-emit_lsh (void)
-{
-  target_emit_ops ()->emit_lsh ();
-}
-
-static void
-emit_rsh_signed (void)
-{
-  target_emit_ops ()->emit_rsh_signed ();
-}
-
-static void
-emit_rsh_unsigned (void)
-{
-  target_emit_ops ()->emit_rsh_unsigned ();
-}
-
-static void
-emit_ext (int arg)
-{
-  target_emit_ops ()->emit_ext (arg);
-}
-
-static void
-emit_log_not (void)
-{
-  target_emit_ops ()->emit_log_not ();
-}
-
-static void
-emit_bit_and (void)
-{
-  target_emit_ops ()->emit_bit_and ();
-}
-
-static void
-emit_bit_or (void)
-{
-  target_emit_ops ()->emit_bit_or ();
-}
-
-static void
-emit_bit_xor (void)
-{
-  target_emit_ops ()->emit_bit_xor ();
-}
-
-static void
-emit_bit_not (void)
-{
-  target_emit_ops ()->emit_bit_not ();
-}
-
-static void
-emit_equal (void)
-{
-  target_emit_ops ()->emit_equal ();
-}
-
-static void
-emit_less_signed (void)
-{
-  target_emit_ops ()->emit_less_signed ();
-}
-
-static void
-emit_less_unsigned (void)
-{
-  target_emit_ops ()->emit_less_unsigned ();
-}
-
-static void
-emit_ref (int size)
-{
-  target_emit_ops ()->emit_ref (size);
-}
-
-static void
-emit_if_goto (int *offset_p, int *size_p)
-{
-  target_emit_ops ()->emit_if_goto (offset_p, size_p);
-}
-
-static void
-emit_goto (int *offset_p, int *size_p)
-{
-  target_emit_ops ()->emit_goto (offset_p, size_p);
-}
-
-static void
-write_goto_address (CORE_ADDR from, CORE_ADDR to, int size)
-{
-  target_emit_ops ()->write_goto_address (from, to, size);
-}
-
-static void
-emit_const (LONGEST num)
-{
-  target_emit_ops ()->emit_const (num);
-}
-
-static void
-emit_reg (int reg)
-{
-  target_emit_ops ()->emit_reg (reg);
-}
-
-static void
-emit_pop (void)
-{
-  target_emit_ops ()->emit_pop ();
-}
-
-static void
-emit_stack_flush (void)
-{
-  target_emit_ops ()->emit_stack_flush ();
-}
-
-static void
-emit_zero_ext (int arg)
-{
-  target_emit_ops ()->emit_zero_ext (arg);
-}
-
-static void
-emit_swap (void)
-{
-  target_emit_ops ()->emit_swap ();
-}
-
-static void
-emit_stack_adjust (int n)
-{
-  target_emit_ops ()->emit_stack_adjust (n);
-}
-
-/* FN's prototype is `LONGEST(*fn)(int)'.  */
-
-static void
-emit_int_call_1 (CORE_ADDR fn, int arg1)
-{
-  target_emit_ops ()->emit_int_call_1 (fn, arg1);
-}
-
-/* FN's prototype is `void(*fn)(int,LONGEST)'.  */
-
-static void
-emit_void_call_2 (CORE_ADDR fn, int arg1)
-{
-  target_emit_ops ()->emit_void_call_2 (fn, arg1);
-}
-
-static void
-emit_eq_goto (int *offset_p, int *size_p)
-{
-  target_emit_ops ()->emit_eq_goto (offset_p, size_p);
-}
-
-static void
-emit_ne_goto (int *offset_p, int *size_p)
-{
-  target_emit_ops ()->emit_ne_goto (offset_p, size_p);
-}
-
-static void
-emit_lt_goto (int *offset_p, int *size_p)
-{
-  target_emit_ops ()->emit_lt_goto (offset_p, size_p);
-}
-
-static void
-emit_ge_goto (int *offset_p, int *size_p)
-{
-  target_emit_ops ()->emit_ge_goto (offset_p, size_p);
-}
-
-static void
-emit_gt_goto (int *offset_p, int *size_p)
+CORE_ADDR
+get_get_tsv_func_addr (void)
 {
-  target_emit_ops ()->emit_gt_goto (offset_p, size_p);
+  return ipa_sym_addrs.addr_get_trace_state_variable_value;
 }
 
-static void
-emit_le_goto (int *offset_p, int *size_p)
+CORE_ADDR
+get_set_tsv_func_addr (void)
 {
-  target_emit_ops ()->emit_le_goto (offset_p, size_p);
+  return ipa_sym_addrs.addr_set_trace_state_variable_value;
 }
 
-static enum eval_result_type compile_bytecodes (struct agent_expr *aexpr);
-
 static void
 compile_tracepoint_condition (struct tracepoint *tpoint,
 			      CORE_ADDR *jump_entry)
@@ -6230,452 +5777,22 @@ compile_tracepoint_condition (struct tracepoint *tpoint,
     }
   else
     {
-      /* Leave the unfinished code in situ, but don't point to it.  */
-
-      tpoint->compiled_cond = 0;
-
-      trace_debug ("Condition compilation for tracepoint %d failed, "
-		   "error code %d",
-		   tpoint->number, err);
-    }
-
-  /* Update the code pointer passed in.  Note that we do this even if
-     the compile fails, so that we can look at the partial results
-     instead of letting them be overwritten.  */
-  *jump_entry = current_insn_ptr;
-
-  /* Leave a gap, to aid dump decipherment.  */
-  *jump_entry += 16;
-}
-
-/* Scan an agent expression for any evidence that the given PC is the
-   target of a jump bytecode in the expression.  */
-
-int
-is_goto_target (struct agent_expr *aexpr, int pc)
-{
-  int i;
-  unsigned char op;
-
-  for (i = 0; i < aexpr->length; i += 1 + gdb_agent_op_sizes[op])
-    {
-      op = aexpr->bytes[i];
-
-      if (op == gdb_agent_op_goto || op == gdb_agent_op_if_goto)
-	{
-	  int target = (aexpr->bytes[i + 1] << 8) + aexpr->bytes[i + 2];
-	  if (target == pc)
-	    return 1;
-	}
-    }
-
-  return 0;
-}
-
-/* Given an agent expression, turn it into native code.  */
-
-static enum eval_result_type
-compile_bytecodes (struct agent_expr *aexpr)
-{
-  int pc = 0;
-  int done = 0;
-  unsigned char op, next_op;
-  int arg;
-  /* This is only used to build 64-bit value for constants.  */
-  ULONGEST top;
-  struct bytecode_address *aentry, *aentry2;
-
-#define UNHANDLED					\
-  do							\
-    {							\
-      trace_debug ("Cannot compile op 0x%x\n", op);	\
-      return expr_eval_unhandled_opcode;		\
-    } while (0)
-
-  if (aexpr->length == 0)
-    {
-      trace_debug ("empty agent expression\n");
-      return expr_eval_empty_expression;
-    }
-
-  bytecode_address_table = NULL;
-
-  while (!done)
-    {
-      op = aexpr->bytes[pc];
-
-      trace_debug ("About to compile op 0x%x, pc=%d\n", op, pc);
-
-      /* Record the compiled-code address of the bytecode, for use by
-	 jump instructions.  */
-      aentry = xmalloc (sizeof (struct bytecode_address));
-      aentry->pc = pc;
-      aentry->address = current_insn_ptr;
-      aentry->goto_pc = -1;
-      aentry->from_offset = aentry->from_size = 0;
-      aentry->next = bytecode_address_table;
-      bytecode_address_table = aentry;
-
-      ++pc;
-
-      emit_error = 0;
-
-      switch (op)
-	{
-	case gdb_agent_op_add:
-	  emit_add ();
-	  break;
-
-	case gdb_agent_op_sub:
-	  emit_sub ();
-	  break;
-
-	case gdb_agent_op_mul:
-	  emit_mul ();
-	  break;
-
-	case gdb_agent_op_div_signed:
-	  UNHANDLED;
-	  break;
-
-	case gdb_agent_op_div_unsigned:
-	  UNHANDLED;
-	  break;
-
-	case gdb_agent_op_rem_signed:
-	  UNHANDLED;
-	  break;
-
-	case gdb_agent_op_rem_unsigned:
-	  UNHANDLED;
-	  break;
-
-	case gdb_agent_op_lsh:
-	  emit_lsh ();
-	  break;
-
-	case gdb_agent_op_rsh_signed:
-	  emit_rsh_signed ();
-	  break;
-
-	case gdb_agent_op_rsh_unsigned:
-	  emit_rsh_unsigned ();
-	  break;
-
-	case gdb_agent_op_trace:
-	  UNHANDLED;
-	  break;
-
-	case gdb_agent_op_trace_quick:
-	  UNHANDLED;
-	  break;
-
-	case gdb_agent_op_log_not:
-	  emit_log_not ();
-	  break;
-
-	case gdb_agent_op_bit_and:
-	  emit_bit_and ();
-	  break;
-
-	case gdb_agent_op_bit_or:
-	  emit_bit_or ();
-	  break;
-
-	case gdb_agent_op_bit_xor:
-	  emit_bit_xor ();
-	  break;
-
-	case gdb_agent_op_bit_not:
-	  emit_bit_not ();
-	  break;
-
-	case gdb_agent_op_equal:
-	  next_op = aexpr->bytes[pc];
-	  if (next_op == gdb_agent_op_if_goto
-	      && !is_goto_target (aexpr, pc)
-	      && target_emit_ops ()->emit_eq_goto)
-	    {
-	      trace_debug ("Combining equal & if_goto");
-	      pc += 1;
-	      aentry->pc = pc;
-	      arg = aexpr->bytes[pc++];
-	      arg = (arg << 8) + aexpr->bytes[pc++];
-	      aentry->goto_pc = arg;
-	      emit_eq_goto (&(aentry->from_offset), &(aentry->from_size));
-	    }
-	  else if (next_op == gdb_agent_op_log_not
-		   && (aexpr->bytes[pc + 1] == gdb_agent_op_if_goto)
-		   && !is_goto_target (aexpr, pc + 1)
-		   && target_emit_ops ()->emit_ne_goto)
-	    {
-	      trace_debug ("Combining equal & log_not & if_goto");
-	      pc += 2;
-	      aentry->pc = pc;
-	      arg = aexpr->bytes[pc++];
-	      arg = (arg << 8) + aexpr->bytes[pc++];
-	      aentry->goto_pc = arg;
-	      emit_ne_goto (&(aentry->from_offset), &(aentry->from_size));
-	    }
-	  else
-	    emit_equal ();
-	  break;
-
-	case gdb_agent_op_less_signed:
-	  next_op = aexpr->bytes[pc];
-	  if (next_op == gdb_agent_op_if_goto
-	      && !is_goto_target (aexpr, pc))
-	    {
-	      trace_debug ("Combining less_signed & if_goto");
-	      pc += 1;
-	      aentry->pc = pc;
-	      arg = aexpr->bytes[pc++];
-	      arg = (arg << 8) + aexpr->bytes[pc++];
-	      aentry->goto_pc = arg;
-	      emit_lt_goto (&(aentry->from_offset), &(aentry->from_size));
-	    }
-	  else if (next_op == gdb_agent_op_log_not
-		   && !is_goto_target (aexpr, pc)
-		   && (aexpr->bytes[pc + 1] == gdb_agent_op_if_goto)
-		   && !is_goto_target (aexpr, pc + 1))
-	    {
-	      trace_debug ("Combining less_signed & log_not & if_goto");
-	      pc += 2;
-	      aentry->pc = pc;
-	      arg = aexpr->bytes[pc++];
-	      arg = (arg << 8) + aexpr->bytes[pc++];
-	      aentry->goto_pc = arg;
-	      emit_ge_goto (&(aentry->from_offset), &(aentry->from_size));
-	    }
-	  else
-	    emit_less_signed ();
-	  break;
-
-	case gdb_agent_op_less_unsigned:
-	  emit_less_unsigned ();
-	  break;
-
-	case gdb_agent_op_ext:
-	  arg = aexpr->bytes[pc++];
-	  if (arg < (sizeof (LONGEST) * 8))
-	    emit_ext (arg);
-	  break;
-
-	case gdb_agent_op_ref8:
-	  emit_ref (1);
-	  break;
-
-	case gdb_agent_op_ref16:
-	  emit_ref (2);
-	  break;
-
-	case gdb_agent_op_ref32:
-	  emit_ref (4);
-	  break;
-
-	case gdb_agent_op_ref64:
-	  emit_ref (8);
-	  break;
-
-	case gdb_agent_op_if_goto:
-	  arg = aexpr->bytes[pc++];
-	  arg = (arg << 8) + aexpr->bytes[pc++];
-	  aentry->goto_pc = arg;
-	  emit_if_goto (&(aentry->from_offset), &(aentry->from_size));
-	  break;
-
-	case gdb_agent_op_goto:
-	  arg = aexpr->bytes[pc++];
-	  arg = (arg << 8) + aexpr->bytes[pc++];
-	  aentry->goto_pc = arg;
-	  emit_goto (&(aentry->from_offset), &(aentry->from_size));
-	  break;
-
-	case gdb_agent_op_const8:
-	  emit_stack_flush ();
-	  top = aexpr->bytes[pc++];
-	  emit_const (top);
-	  break;
-
-	case gdb_agent_op_const16:
-	  emit_stack_flush ();
-	  top = aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  emit_const (top);
-	  break;
-
-	case gdb_agent_op_const32:
-	  emit_stack_flush ();
-	  top = aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  emit_const (top);
-	  break;
-
-	case gdb_agent_op_const64:
-	  emit_stack_flush ();
-	  top = aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  top = (top << 8) + aexpr->bytes[pc++];
-	  emit_const (top);
-	  break;
-
-	case gdb_agent_op_reg:
-	  emit_stack_flush ();
-	  arg = aexpr->bytes[pc++];
-	  arg = (arg << 8) + aexpr->bytes[pc++];
-	  emit_reg (arg);
-	  break;
-
-	case gdb_agent_op_end:
-	  trace_debug ("At end of expression\n");
-
-	  /* Assume there is one stack element left, and that it is
-	     cached in "top" where emit_epilogue can get to it.  */
-	  emit_stack_adjust (1);
-
-	  done = 1;
-	  break;
-
-	case gdb_agent_op_dup:
-	  /* In our design, dup is equivalent to stack flushing.  */
-	  emit_stack_flush ();
-	  break;
-
-	case gdb_agent_op_pop:
-	  emit_pop ();
-	  break;
-
-	case gdb_agent_op_zero_ext:
-	  arg = aexpr->bytes[pc++];
-	  if (arg < (sizeof (LONGEST) * 8))
-	    emit_zero_ext (arg);
-	  break;
-
-	case gdb_agent_op_swap:
-	  next_op = aexpr->bytes[pc];
-	  /* Detect greater-than comparison sequences.  */
-	  if (next_op == gdb_agent_op_less_signed
-	      && !is_goto_target (aexpr, pc)
-	      && (aexpr->bytes[pc + 1] == gdb_agent_op_if_goto)
-	      && !is_goto_target (aexpr, pc + 1))
-	    {
-	      trace_debug ("Combining swap & less_signed & if_goto");
-	      pc += 2;
-	      aentry->pc = pc;
-	      arg = aexpr->bytes[pc++];
-	      arg = (arg << 8) + aexpr->bytes[pc++];
-	      aentry->goto_pc = arg;
-	      emit_gt_goto (&(aentry->from_offset), &(aentry->from_size));
-	    }
-	  else if (next_op == gdb_agent_op_less_signed
-		   && !is_goto_target (aexpr, pc)
-		   && (aexpr->bytes[pc + 1] == gdb_agent_op_log_not)
-		   && !is_goto_target (aexpr, pc + 1)
-		   && (aexpr->bytes[pc + 2] == gdb_agent_op_if_goto)
-		   && !is_goto_target (aexpr, pc + 2))
-	    {
-	      trace_debug ("Combining swap & less_signed & log_not & if_goto");
-	      pc += 3;
-	      aentry->pc = pc;
-	      arg = aexpr->bytes[pc++];
-	      arg = (arg << 8) + aexpr->bytes[pc++];
-	      aentry->goto_pc = arg;
-	      emit_le_goto (&(aentry->from_offset), &(aentry->from_size));
-	    }
-	  else
-	    emit_swap ();
-	  break;
-
-	case gdb_agent_op_getv:
-	  emit_stack_flush ();
-	  arg = aexpr->bytes[pc++];
-	  arg = (arg << 8) + aexpr->bytes[pc++];
-	  emit_int_call_1 (ipa_sym_addrs.addr_get_trace_state_variable_value,
-			   arg);
-	  break;
-
-	case gdb_agent_op_setv:
-	  arg = aexpr->bytes[pc++];
-	  arg = (arg << 8) + aexpr->bytes[pc++];
-	  emit_void_call_2 (ipa_sym_addrs.addr_set_trace_state_variable_value,
-			    arg);
-	  break;
-
-	case gdb_agent_op_tracev:
-	  UNHANDLED;
-	  break;
-
-	  /* GDB never (currently) generates any of these ops.  */
-	case gdb_agent_op_float:
-	case gdb_agent_op_ref_float:
-	case gdb_agent_op_ref_double:
-	case gdb_agent_op_ref_long_double:
-	case gdb_agent_op_l_to_d:
-	case gdb_agent_op_d_to_l:
-	case gdb_agent_op_trace16:
-	  UNHANDLED;
-	  break;
-
-	default:
-	  trace_debug ("Agent expression op 0x%x not recognized\n", op);
-	  /* Don't struggle on, things will just get worse.  */
-	  return expr_eval_unrecognized_opcode;
-	}
-
-      /* This catches errors that occur in target-specific code
-	 emission.  */
-      if (emit_error)
-	{
-	  trace_debug ("Error %d while emitting code for %s\n",
-		       emit_error, gdb_agent_op_name (op));
-	  return expr_eval_unhandled_opcode;
-	}
-
-      trace_debug ("Op %s compiled\n", gdb_agent_op_name (op));
-    }
-
-  /* Now fill in real addresses as goto destinations.  */
-  for (aentry = bytecode_address_table; aentry; aentry = aentry->next)
-    {
-      int written = 0;
-
-      if (aentry->goto_pc < 0)
-	continue;
+      /* Leave the unfinished code in situ, but don't point to it.  */
 
-      /* Find the location that we are going to, and call back into
-	 target-specific code to write the actual address or
-	 displacement.  */
-      for (aentry2 = bytecode_address_table; aentry2; aentry2 = aentry2->next)
-	{
-	  if (aentry2->pc == aentry->goto_pc)
-	    {
-	      trace_debug ("Want to jump from %s to %s\n",
-			   paddress (aentry->address),
-			   paddress (aentry2->address));
-	      write_goto_address (aentry->address + aentry->from_offset,
-				  aentry2->address, aentry->from_size);
-	      written = 1;
-	      break;
-	    }
-	}
+      tpoint->compiled_cond = 0;
 
-      /* Error out if we didn't find a destination.  */
-      if (!written)
-	{
-	  trace_debug ("Destination of goto %d not found\n",
-		       aentry->goto_pc);
-	  return expr_eval_invalid_goto;
-	}
+      trace_debug ("Condition compilation for tracepoint %d failed, "
+		   "error code %d",
+		   tpoint->number, err);
     }
 
-  return expr_eval_no_error;
+  /* Update the code pointer passed in.  Note that we do this even if
+     the compile fails, so that we can look at the partial results
+     instead of letting them be overwritten.  */
+  *jump_entry = current_insn_ptr;
+
+  /* Leave a gap, to aid dump decipherment.  */
+  *jump_entry += 16;
 }
 
 /* We'll need to adjust these when we consider bi-arch setups, and big
@@ -6808,55 +5925,8 @@ download_tracepoint_1 (struct tracepoint *tpoint)
       /* Now for each pointer, download the action.  */
       for (i = 0; i < tpoint->numactions; i++)
 	{
-	  CORE_ADDR ipa_action = 0;
 	  struct tracepoint_action *action = tpoint->actions[i];
-
-	  switch (action->type)
-	    {
-	    case 'M':
-	      ipa_action
-		= target_malloc (sizeof (struct collect_memory_action));
-	      write_inferior_memory (ipa_action,
-				     (unsigned char *) action,
-				     sizeof (struct collect_memory_action));
-	      break;
-	    case 'R':
-	      ipa_action
-		= target_malloc (sizeof (struct collect_registers_action));
-	      write_inferior_memory (ipa_action,
-				     (unsigned char *) action,
-				     sizeof (struct collect_registers_action));
-	      break;
-	    case 'X':
-	      {
-		CORE_ADDR expr;
-		struct eval_expr_action *eaction
-		  = (struct eval_expr_action *) action;
-
-		ipa_action = target_malloc (sizeof (*eaction));
-		write_inferior_memory (ipa_action,
-				       (unsigned char *) eaction,
-				       sizeof (*eaction));
-
-		expr = download_agent_expr (eaction->expr);
-		write_inferior_data_ptr
-		  (ipa_action + offsetof (struct eval_expr_action, expr),
-		   expr);
-		break;
-	      }
-	    case 'L':
-	      ipa_action = target_malloc
-		(sizeof (struct collect_static_trace_data_action));
-	      write_inferior_memory
-		(ipa_action,
-		 (unsigned char *) action,
-		 sizeof (struct collect_static_trace_data_action));
-	      break;
-	    default:
-	      trace_debug ("unknown trace action '%c', ignoring",
-			   action->type);
-	      break;
-	    }
+	  CORE_ADDR ipa_action = action->ops->download (action);
 
 	  if (ipa_action != 0)
 	    write_inferior_data_ptr
@@ -6866,6 +5936,91 @@ download_tracepoint_1 (struct tracepoint *tpoint)
     }
 }
 
+#define IPA_PROTO_FAST_TRACE_FLAG 0
+#define IPA_PROTO_FAST_TRACE_ADDR_ON_TARGET 2
+#define IPA_PROTO_FAST_TRACE_JUMP_PAD 10
+#define IPA_PROTO_FAST_TRACE_FJUMP_SIZE 18
+#define IPA_PROTO_FAST_TRACE_FJUMP_INSN 22
+
+/* Send a command to agent to download and install tracepoint TPOINT.  */
+
+static int
+tracepoint_send_agent (struct tracepoint *tpoint)
+{
+  char buf[IPA_CMD_BUF_SIZE];
+  char *p;
+  int i, ret;
+
+  p = buf;
+  strcpy (p, "FastTrace:");
+  p += 10;
+
+  COPY_FIELD_TO_BUF (p, tpoint, number);
+  COPY_FIELD_TO_BUF (p, tpoint, address);
+  COPY_FIELD_TO_BUF (p, tpoint, type);
+  COPY_FIELD_TO_BUF (p, tpoint, enabled);
+  COPY_FIELD_TO_BUF (p, tpoint, step_count);
+  COPY_FIELD_TO_BUF (p, tpoint, pass_count);
+  COPY_FIELD_TO_BUF (p, tpoint, numactions);
+  COPY_FIELD_TO_BUF (p, tpoint, hit_count);
+  COPY_FIELD_TO_BUF (p, tpoint, traceframe_usage);
+  COPY_FIELD_TO_BUF (p, tpoint, compiled_cond);
+  COPY_FIELD_TO_BUF (p, tpoint, orig_size);
+
+  /* condition */
+  p = agent_expr_send (p, tpoint->cond);
+
+  /* tracepoint_action */
+  for (i = 0; i < tpoint->numactions; i++)
+    {
+      struct tracepoint_action *action = tpoint->actions[i];
+
+      p[0] = action->type;
+      p = action->ops->send (&p[1], action);
+    }
+
+  get_jump_space_head ();
+  /* Copy the value of GDB_JUMP_PAD_HEAD to command buffer, so that
+     agent can use jump pad from it.  */
+  if (tpoint->type == fast_tracepoint)
+    {
+      memcpy (p, &gdb_jump_pad_head, 8);
+      p += 8;
+    }
+
+  ret = run_inferior_command (buf, (int) (ptrdiff_t) (p - buf));
+  if (ret)
+    return ret;
+
+  if (strncmp (buf, "OK", 2) != 0)
+    return 1;
+
+  /* The value of tracepoint's target address is stored in BUF.  */
+  memcpy (&tpoint->obj_addr_on_target,
+	  &buf[IPA_PROTO_FAST_TRACE_ADDR_ON_TARGET], 8);
+
+  if (tpoint->type == fast_tracepoint)
+    {
+      unsigned char *insn
+	= (unsigned char *) &buf[IPA_PROTO_FAST_TRACE_FJUMP_INSN];
+      int fjump_size;
+
+     trace_debug ("agent: read from cmd_buf 0x%x 0x%x\n",
+		  (unsigned int) tpoint->obj_addr_on_target,
+		  (unsigned int) gdb_jump_pad_head);
+
+      memcpy (&gdb_jump_pad_head, &buf[IPA_PROTO_FAST_TRACE_JUMP_PAD], 8);
+
+      /* This has been done in agent.  We should also set up record for it.  */
+      memcpy (&fjump_size, &buf[IPA_PROTO_FAST_TRACE_FJUMP_SIZE], 4);
+      /* Wire it in.  */
+      tpoint->handle
+	= set_fast_tracepoint_jump (tpoint->address, insn, fjump_size);
+    }
+
+  return 0;
+}
+
 static void
 download_tracepoint (struct tracepoint *tpoint)
 {
@@ -6914,42 +6069,6 @@ download_tracepoint (struct tracepoint *tpoint)
 }
 
 static void
-download_tracepoints (void)
-{
-  CORE_ADDR tpptr = 0, prev_tpptr = 0;
-  struct tracepoint *tpoint;
-
-  /* Start out empty.  */
-  write_inferior_data_ptr (ipa_sym_addrs.addr_tracepoints, 0);
-
-  for (tpoint = tracepoints; tpoint; tpoint = tpoint->next)
-    {
-      if (tpoint->type != fast_tracepoint
-	  && tpoint->type != static_tracepoint)
-	continue;
-
-      prev_tpptr = tpptr;
-
-      download_tracepoint_1 (tpoint);
-
-      tpptr = tpoint->obj_addr_on_target;
-
-      if (tpoint == tracepoints)
-	{
-	  /* First object in list, set the head pointer in the
-	     inferior.  */
-	  write_inferior_data_ptr (ipa_sym_addrs.addr_tracepoints, tpptr);
-	}
-      else
-	{
-	  write_inferior_data_ptr (prev_tpptr + offsetof (struct tracepoint,
-							  next),
-				   tpptr);
-	}
-    }
-}
-
-static void
 download_trace_state_variables (void)
 {
   CORE_ADDR ptr = 0, prev_ptr = 0;
@@ -7285,7 +6404,7 @@ upload_fast_traceframes (void)
 #ifdef IN_PROCESS_AGENT
 
 IP_AGENT_EXPORT int ust_loaded;
-IP_AGENT_EXPORT char cmd_buf[CMD_BUF_SIZE];
+IP_AGENT_EXPORT char cmd_buf[IPA_CMD_BUF_SIZE];
 
 #ifdef HAVE_UST
 
@@ -7478,8 +6597,6 @@ gdb_probe (const struct marker *mdata, void *probe_private,
 
 static void
 collect_ust_data_at_tracepoint (struct tracepoint_hit_ctx *ctx,
-				CORE_ADDR stop_pc,
-				struct tracepoint *tpoint,
 				struct traceframe *tframe)
 {
   struct static_tracepoint_ctx *umd = (struct static_tracepoint_ctx *) ctx;
@@ -7536,94 +6653,8 @@ static struct ltt_available_probe gdb_ust_probe =
 #endif /* HAVE_UST */
 #endif /* IN_PROCESS_AGENT */
 
-#ifdef HAVE_UST
-
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#ifndef UNIX_PATH_MAX
-#define UNIX_PATH_MAX sizeof(((struct sockaddr_un *) NULL)->sun_path)
-#endif
-
-/* Where we put the socked used for synchronization.  */
-#define SOCK_DIR P_tmpdir
-
-#endif /* HAVE_UST */
-
 #ifndef IN_PROCESS_AGENT
 
-#ifdef HAVE_UST
-
-static int
-gdb_ust_connect_sync_socket (int pid)
-{
-  struct sockaddr_un addr;
-  int res, fd;
-  char path[UNIX_PATH_MAX];
-
-  res = xsnprintf (path, UNIX_PATH_MAX, "%s/gdb_ust%d", SOCK_DIR, pid);
-  if (res >= UNIX_PATH_MAX)
-    {
-      trace_debug ("string overflow allocating socket name");
-      return -1;
-    }
-
-  res = fd = socket (PF_UNIX, SOCK_STREAM, 0);
-  if (res == -1)
-    {
-      warning ("error opening sync socket: %s\n", strerror (errno));
-      return -1;
-    }
-
-  addr.sun_family = AF_UNIX;
-
-  res = xsnprintf (addr.sun_path, UNIX_PATH_MAX, "%s", path);
-  if (res >= UNIX_PATH_MAX)
-    {
-      warning ("string overflow allocating socket name\n");
-      close (fd);
-      return -1;
-    }
-
-  res = connect (fd, (struct sockaddr *) &addr, sizeof (addr));
-  if (res == -1)
-    {
-      warning ("error connecting sync socket (%s): %s. "
-	       "Make sure the directory exists and that it is writable.",
-	       path, strerror (errno));
-      close (fd);
-      return -1;
-    }
-
-  return fd;
-}
-
-/* Resume thread PTID.  */
-
-static void
-resume_thread (ptid_t ptid)
-{
-  struct thread_resume resume_info;
-
-  resume_info.thread = ptid;
-  resume_info.kind = resume_continue;
-  resume_info.sig = TARGET_SIGNAL_0;
-  (*the_target->resume) (&resume_info, 1);
-}
-
-/* Stop thread PTID.  */
-
-static void
-stop_thread (ptid_t ptid)
-{
-  struct thread_resume resume_info;
-
-  resume_info.thread = ptid;
-  resume_info.kind = resume_stop;
-  resume_info.sig = TARGET_SIGNAL_0;
-  (*the_target->resume) (&resume_info, 1);
-}
-
 /* Ask the in-process agent to run a command.  Since we don't want to
    have to handle the IPA hitting breakpoints while running the
    command, we pause all threads, remove all breakpoints, and then set
@@ -7632,94 +6663,17 @@ stop_thread (ptid_t ptid)
    synchronization.  */
 
 static int
-run_inferior_command (char *cmd)
+run_inferior_command (char *cmd, int len)
 {
   int err = -1;
-  int fd = -1;
   int pid = ptid_get_pid (current_inferior->entry.id);
-  int tid;
-  ptid_t ptid = null_ptid;
 
   trace_debug ("run_inferior_command: running: %s", cmd);
 
   pause_all (0);
   uninsert_all_breakpoints ();
 
-  if (read_inferior_integer (ipa_sym_addrs.addr_helper_thread_id, &tid))
-    {
-      warning ("Error reading helper thread's id in lib");
-      goto out;
-    }
-
-  if (tid == 0)
-    {
-      warning ("helper thread not initialized yet");
-      goto out;
-    }
-
-  if (write_inferior_memory (ipa_sym_addrs.addr_cmd_buf,
-			     (unsigned char *) cmd, strlen (cmd) + 1))
-    {
-      warning ("Error writing command");
-      goto out;
-    }
-
-  ptid = ptid_build (pid, tid, 0);
-
-  resume_thread (ptid);
-
-  fd = gdb_ust_connect_sync_socket (pid);
-  if (fd >= 0)
-    {
-      char buf[1] = "";
-      int ret;
-
-      trace_debug ("signalling helper thread");
-
-      do
-	{
-	  ret = write (fd, buf, 1);
-	} while (ret == -1 && errno == EINTR);
-
-      trace_debug ("waiting for helper thread's response");
-
-      do
-	{
-	  ret = read (fd, buf, 1);
-	} while (ret == -1 && errno == EINTR);
-
-      close (fd);
-
-      trace_debug ("helper thread's response received");
-    }
-
- out:
-
-  /* Need to read response with the inferior stopped.  */
-  if (!ptid_equal (ptid, null_ptid))
-    {
-      int was_non_stop = non_stop;
-      struct target_waitstatus status;
-
-      stop_thread (ptid);
-      non_stop = 1;
-      mywait (ptid, &status, 0, 0);
-      non_stop = was_non_stop;
-    }
-
-  if (fd >= 0)
-    {
-      if (read_inferior_memory (ipa_sym_addrs.addr_cmd_buf,
-				(unsigned char *) cmd, CMD_BUF_SIZE))
-	{
-	  warning ("Error reading command response");
-	}
-      else
-	{
-	  err = 0;
-	  trace_debug ("run_inferior_command: response: %s", cmd);
-	}
-    }
+  err = agent_run_command (pid, (const char *) cmd, len);
 
   reinsert_all_breakpoints ();
   unpause_all (0);
@@ -7727,24 +6681,22 @@ run_inferior_command (char *cmd)
   return err;
 }
 
-#else /* HAVE_UST */
+#else /* !IN_PROCESS_AGENT */
 
-static int
-run_inferior_command (char *cmd)
-{
-  return -1;
-}
+#include <sys/socket.h>
+#include <sys/un.h>
 
-#endif /* HAVE_UST */
+#ifndef UNIX_PATH_MAX
+#define UNIX_PATH_MAX sizeof(((struct sockaddr_un *) NULL)->sun_path)
+#endif
 
-#else /* !IN_PROCESS_AGENT */
+/* Where we put the socked used for synchronization.  */
+#define SOCK_DIR P_tmpdir
 
 /* Thread ID of the helper thread.  GDBserver reads this to know which
    is the help thread.  This is an LWP id on Linux.  */
 int helper_thread_id;
 
-#ifdef HAVE_UST
-
 static int
 init_named_socket (const char *name)
 {
@@ -7797,7 +6749,7 @@ init_named_socket (const char *name)
 }
 
 static int
-gdb_ust_socket_init (void)
+gdb_agent_socket_init (void)
 {
   int result, fd;
   char name[UNIX_PATH_MAX];
@@ -7819,17 +6771,7 @@ gdb_ust_socket_init (void)
   return fd;
 }
 
-/* Return an hexstr version of the STR C string, fit for sending to
-   GDB.  */
-
-static char *
-cstr_to_hexstr (const char *str)
-{
-  int len = strlen (str);
-  char *hexstr = xmalloc (len * 2 + 1);
-  convert_int_to_ascii ((gdb_byte *) str, hexstr, len);
-  return hexstr;
-}
+#ifdef HAVE_UST
 
 /* The next marker to be returned on a qTsSTM command.  */
 static const struct marker *next_st;
@@ -7869,6 +6811,18 @@ next_marker (const struct marker *m)
   return NULL;
 }
 
+/* Return an hexstr version of the STR C string, fit for sending to
+   GDB.  */
+
+static char *
+cstr_to_hexstr (const char *str)
+{
+  int len = strlen (str);
+  char *hexstr = xmalloc (len * 2 + 1);
+  convert_int_to_ascii ((gdb_byte *) str, hexstr, len);
+  return hexstr;
+}
+
 /* Compose packet that is the response to the qTsSTM/qTfSTM/qTSTMat
    packets.  */
 
@@ -8029,19 +6983,32 @@ cmd_qtstmat (char *packet)
   return -1;
 }
 
+static void
+gdb_ust_init (void)
+{
+  if (!dlsym_ust ())
+    return;
+
+  USTF(ltt_probe_register) (&gdb_ust_probe);
+}
+
+#endif /* HAVE_UST */
+
+#include <sys/syscall.h>
+
+/* Helper thread of agent.  */
+
 static void *
-gdb_ust_thread (void *arg)
+gdb_agent_helper_thread (void *arg)
 {
   int listen_fd;
 
   while (1)
     {
-      listen_fd = gdb_ust_socket_init ();
+      listen_fd = gdb_agent_socket_init ();
 
-#ifdef SYS_gettid
       if (helper_thread_id == 0)
 	helper_thread_id = syscall (SYS_gettid);
-#endif
 
       if (listen_fd == -1)
 	{
@@ -8088,6 +7055,7 @@ gdb_ust_thread (void *arg)
 
 	  if (cmd_buf[0])
 	    {
+#ifdef HAVE_UST
 	      if (strcmp ("qTfSTM", cmd_buf) == 0)
 		{
 		  cmd_qtfstm (cmd_buf);
@@ -8114,15 +7082,11 @@ gdb_ust_thread (void *arg)
 		{
 		  cmd_qtstmat (cmd_buf);
 		}
-	      else if (strcmp (cmd_buf, "help") == 0)
-		{
-		  strcpy (cmd_buf, "for help, press F1\n");
-		}
-	      else
-		strcpy (cmd_buf, "");
+#endif /* HAVE_UST */
 	    }
 
-	  write (fd, buf, 1);
+	  /* Fix compiler's warning: ignoring return value of 'write'.  */
+	  ret = write (fd, buf, 1);
 	  close (fd);
 	}
     }
@@ -8131,18 +7095,18 @@ gdb_ust_thread (void *arg)
 }
 
 #include <signal.h>
+#include <pthread.h>
+
+IP_AGENT_EXPORT int gdb_agent_capability = AGENT_CAPA_STATIC_TRACE;
 
 static void
-gdb_ust_init (void)
+gdb_agent_init (void)
 {
   int res;
   pthread_t thread;
   sigset_t new_mask;
   sigset_t orig_mask;
 
-  if (!dlsym_ust ())
-    return;
-
   /* We want the helper thread to be as transparent as possible, so
      have it inherit an all-signals-blocked mask.  */
 
@@ -8153,7 +7117,7 @@ gdb_ust_init (void)
 
   res = pthread_create (&thread,
 			NULL,
-			gdb_ust_thread,
+			gdb_agent_helper_thread,
 			NULL);
 
   res = pthread_sigmask (SIG_SETMASK, &orig_mask, NULL);
@@ -8163,11 +7127,11 @@ gdb_ust_init (void)
   while (helper_thread_id == 0)
     usleep (1);
 
-  USTF(ltt_probe_register) (&gdb_ust_probe);
+#ifdef HAVE_UST
+  gdb_ust_init ();
+#endif
 }
 
-#endif /* HAVE_UST */
-
 #include <sys/mman.h>
 #include <fcntl.h>
 
@@ -8198,9 +7162,7 @@ initialize_tracepoint_ftlib (void)
 {
   initialize_tracepoint ();
 
-#ifdef HAVE_UST
-  gdb_ust_init ();
-#endif
+  gdb_agent_init ();
 }
 
 #endif /* IN_PROCESS_AGENT */
@@ -8238,23 +7200,35 @@ initialize_tracepoint (void)
 
 #ifdef IN_PROCESS_AGENT
   {
+    uintptr_t addr;
     int pagesize;
+
     pagesize = sysconf (_SC_PAGE_SIZE);
     if (pagesize == -1)
       fatal ("sysconf");
 
     gdb_tp_heap_buffer = xmalloc (5 * 1024 * 1024);
 
-    /* Allocate scratch buffer aligned on a page boundary.  */
-    gdb_jump_pad_buffer = memalign (pagesize, pagesize * 20);
-    gdb_jump_pad_buffer_end = gdb_jump_pad_buffer + pagesize * 20;
+#define SCRATCH_BUFFER_NPAGES 20
+
+    /* Allocate scratch buffer aligned on a page boundary, at a low
+       address (close to the main executable's code).  */
+    for (addr = pagesize; addr != 0; addr += pagesize)
+      {
+	gdb_jump_pad_buffer = mmap ((void *) addr, pagesize * SCRATCH_BUFFER_NPAGES,
+				    PROT_READ | PROT_WRITE | PROT_EXEC,
+				    MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED,
+				    -1, 0);
+	if (gdb_jump_pad_buffer != MAP_FAILED)
+	  break;
+      }
 
-    /* Make it writable and executable.  */
-    if (mprotect (gdb_jump_pad_buffer, pagesize * 20,
-		  PROT_READ | PROT_WRITE | PROT_EXEC) != 0)
+    if (addr == 0)
       fatal ("\
-initialize_tracepoint: mprotect(%p, %d, PROT_READ|PROT_EXEC) failed with %s",
-	     gdb_jump_pad_buffer, pagesize * 20, strerror (errno));
+initialize_tracepoint: mmap'ing jump pad buffer failed with %s",
+	     strerror (errno));
+
+    gdb_jump_pad_buffer_end = gdb_jump_pad_buffer + pagesize * SCRATCH_BUFFER_NPAGES;
   }
 
   gdb_trampoline_buffer = gdb_trampoline_buffer_end = 0;
diff --git a/gdb/gdbserver/win32-low.c b/gdb/gdbserver/win32-low.c
index 3e10490..4d5fe67 100644
--- a/gdb/gdbserver/win32-low.c
+++ b/gdb/gdbserver/win32-low.c
@@ -24,6 +24,7 @@
 #include "gdb/fileio.h"
 #include "mem-break.h"
 #include "win32-low.h"
+#include "gdbthread.h"
 
 #include <stdint.h>
 #include <windows.h>
@@ -73,7 +74,7 @@ static int attaching = 0;
 static HANDLE current_process_handle = NULL;
 static DWORD current_process_id = 0;
 static DWORD main_thread_id = 0;
-static enum target_signal last_sig = TARGET_SIGNAL_0;
+static enum gdb_signal last_sig = GDB_SIGNAL_0;
 
 /* The current debug event from WaitForDebugEvent.  */
 static DEBUG_EVENT current_event;
@@ -307,7 +308,7 @@ child_init_thread_list (void)
 static void
 do_initial_child_stuff (HANDLE proch, DWORD pid, int attached)
 {
-  last_sig = TARGET_SIGNAL_0;
+  last_sig = GDB_SIGNAL_0;
 
   current_process_handle = proch;
   current_process_id = pid;
@@ -805,7 +806,7 @@ static void
 win32_resume (struct thread_resume *resume_info, size_t n)
 {
   DWORD tid;
-  enum target_signal sig;
+  enum gdb_signal sig;
   int step;
   win32_thread_info *th;
   DWORD continue_status = DBG_CONTINUE;
@@ -834,7 +835,7 @@ win32_resume (struct thread_resume *resume_info, size_t n)
       step = 0;
     }
 
-  if (sig != TARGET_SIGNAL_0)
+  if (sig != GDB_SIGNAL_0)
     {
       if (current_event.dwDebugEventCode != EXCEPTION_DEBUG_EVENT)
 	{
@@ -846,7 +847,7 @@ win32_resume (struct thread_resume *resume_info, size_t n)
 	OUTMSG (("Can only continue with recieved signal %d.\n", last_sig));
     }
 
-  last_sig = TARGET_SIGNAL_0;
+  last_sig = GDB_SIGNAL_0;
 
   /* Get context for the currently selected thread.  */
   ptid = debug_event_ptid (&current_event);
@@ -1231,55 +1232,55 @@ handle_exception (struct target_waitstatus *ourstatus)
     {
     case EXCEPTION_ACCESS_VIOLATION:
       OUTMSG2 (("EXCEPTION_ACCESS_VIOLATION"));
-      ourstatus->value.sig = TARGET_SIGNAL_SEGV;
+      ourstatus->value.sig = GDB_SIGNAL_SEGV;
       break;
     case STATUS_STACK_OVERFLOW:
       OUTMSG2 (("STATUS_STACK_OVERFLOW"));
-      ourstatus->value.sig = TARGET_SIGNAL_SEGV;
+      ourstatus->value.sig = GDB_SIGNAL_SEGV;
       break;
     case STATUS_FLOAT_DENORMAL_OPERAND:
       OUTMSG2 (("STATUS_FLOAT_DENORMAL_OPERAND"));
-      ourstatus->value.sig = TARGET_SIGNAL_FPE;
+      ourstatus->value.sig = GDB_SIGNAL_FPE;
       break;
     case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
       OUTMSG2 (("EXCEPTION_ARRAY_BOUNDS_EXCEEDED"));
-      ourstatus->value.sig = TARGET_SIGNAL_FPE;
+      ourstatus->value.sig = GDB_SIGNAL_FPE;
       break;
     case STATUS_FLOAT_INEXACT_RESULT:
       OUTMSG2 (("STATUS_FLOAT_INEXACT_RESULT"));
-      ourstatus->value.sig = TARGET_SIGNAL_FPE;
+      ourstatus->value.sig = GDB_SIGNAL_FPE;
       break;
     case STATUS_FLOAT_INVALID_OPERATION:
       OUTMSG2 (("STATUS_FLOAT_INVALID_OPERATION"));
-      ourstatus->value.sig = TARGET_SIGNAL_FPE;
+      ourstatus->value.sig = GDB_SIGNAL_FPE;
       break;
     case STATUS_FLOAT_OVERFLOW:
       OUTMSG2 (("STATUS_FLOAT_OVERFLOW"));
-      ourstatus->value.sig = TARGET_SIGNAL_FPE;
+      ourstatus->value.sig = GDB_SIGNAL_FPE;
       break;
     case STATUS_FLOAT_STACK_CHECK:
       OUTMSG2 (("STATUS_FLOAT_STACK_CHECK"));
-      ourstatus->value.sig = TARGET_SIGNAL_FPE;
+      ourstatus->value.sig = GDB_SIGNAL_FPE;
       break;
     case STATUS_FLOAT_UNDERFLOW:
       OUTMSG2 (("STATUS_FLOAT_UNDERFLOW"));
-      ourstatus->value.sig = TARGET_SIGNAL_FPE;
+      ourstatus->value.sig = GDB_SIGNAL_FPE;
       break;
     case STATUS_FLOAT_DIVIDE_BY_ZERO:
       OUTMSG2 (("STATUS_FLOAT_DIVIDE_BY_ZERO"));
-      ourstatus->value.sig = TARGET_SIGNAL_FPE;
+      ourstatus->value.sig = GDB_SIGNAL_FPE;
       break;
     case STATUS_INTEGER_DIVIDE_BY_ZERO:
       OUTMSG2 (("STATUS_INTEGER_DIVIDE_BY_ZERO"));
-      ourstatus->value.sig = TARGET_SIGNAL_FPE;
+      ourstatus->value.sig = GDB_SIGNAL_FPE;
       break;
     case STATUS_INTEGER_OVERFLOW:
       OUTMSG2 (("STATUS_INTEGER_OVERFLOW"));
-      ourstatus->value.sig = TARGET_SIGNAL_FPE;
+      ourstatus->value.sig = GDB_SIGNAL_FPE;
       break;
     case EXCEPTION_BREAKPOINT:
       OUTMSG2 (("EXCEPTION_BREAKPOINT"));
-      ourstatus->value.sig = TARGET_SIGNAL_TRAP;
+      ourstatus->value.sig = GDB_SIGNAL_TRAP;
 #ifdef _WIN32_WCE
       /* Remove the initial breakpoint.  */
       check_breakpoints ((CORE_ADDR) (long) current_event
@@ -1288,27 +1289,27 @@ handle_exception (struct target_waitstatus *ourstatus)
       break;
     case DBG_CONTROL_C:
       OUTMSG2 (("DBG_CONTROL_C"));
-      ourstatus->value.sig = TARGET_SIGNAL_INT;
+      ourstatus->value.sig = GDB_SIGNAL_INT;
       break;
     case DBG_CONTROL_BREAK:
       OUTMSG2 (("DBG_CONTROL_BREAK"));
-      ourstatus->value.sig = TARGET_SIGNAL_INT;
+      ourstatus->value.sig = GDB_SIGNAL_INT;
       break;
     case EXCEPTION_SINGLE_STEP:
       OUTMSG2 (("EXCEPTION_SINGLE_STEP"));
-      ourstatus->value.sig = TARGET_SIGNAL_TRAP;
+      ourstatus->value.sig = GDB_SIGNAL_TRAP;
       break;
     case EXCEPTION_ILLEGAL_INSTRUCTION:
       OUTMSG2 (("EXCEPTION_ILLEGAL_INSTRUCTION"));
-      ourstatus->value.sig = TARGET_SIGNAL_ILL;
+      ourstatus->value.sig = GDB_SIGNAL_ILL;
       break;
     case EXCEPTION_PRIV_INSTRUCTION:
       OUTMSG2 (("EXCEPTION_PRIV_INSTRUCTION"));
-      ourstatus->value.sig = TARGET_SIGNAL_ILL;
+      ourstatus->value.sig = GDB_SIGNAL_ILL;
       break;
     case EXCEPTION_NONCONTINUABLE_EXCEPTION:
       OUTMSG2 (("EXCEPTION_NONCONTINUABLE_EXCEPTION"));
-      ourstatus->value.sig = TARGET_SIGNAL_ILL;
+      ourstatus->value.sig = GDB_SIGNAL_ILL;
       break;
     default:
       if (current_event.u.Exception.dwFirstChance)
@@ -1320,7 +1321,7 @@ handle_exception (struct target_waitstatus *ourstatus)
 		current_event.u.Exception.ExceptionRecord.ExceptionCode,
 		phex_nz ((uintptr_t) current_event.u.Exception.ExceptionRecord.
 		ExceptionAddress, sizeof (uintptr_t))));
-      ourstatus->value.sig = TARGET_SIGNAL_UNKNOWN;
+      ourstatus->value.sig = GDB_SIGNAL_UNKNOWN;
       break;
     }
   OUTMSG2 (("\n"));
@@ -1378,7 +1379,7 @@ get_child_debug_event (struct target_waitstatus *ourstatus)
 {
   ptid_t ptid;
 
-  last_sig = TARGET_SIGNAL_0;
+  last_sig = GDB_SIGNAL_0;
   ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
 
   /* Check if GDB sent us an interrupt request.  */
@@ -1528,7 +1529,7 @@ get_child_debug_event (struct target_waitstatus *ourstatus)
       handle_load_dll ();
 
       ourstatus->kind = TARGET_WAITKIND_LOADED;
-      ourstatus->value.sig = TARGET_SIGNAL_TRAP;
+      ourstatus->value.sig = GDB_SIGNAL_TRAP;
       break;
 
     case UNLOAD_DLL_DEBUG_EVENT:
@@ -1538,7 +1539,7 @@ get_child_debug_event (struct target_waitstatus *ourstatus)
 		(unsigned) current_event.dwThreadId));
       handle_unload_dll ();
       ourstatus->kind = TARGET_WAITKIND_LOADED;
-      ourstatus->value.sig = TARGET_SIGNAL_TRAP;
+      ourstatus->value.sig = GDB_SIGNAL_TRAP;
       break;
 
     case EXCEPTION_DEBUG_EVENT:
diff --git a/gdb/gdbthread.h b/gdb/gdbthread.h
index fb8de16..0250555 100644
--- a/gdb/gdbthread.h
+++ b/gdb/gdbthread.h
@@ -123,7 +123,7 @@ struct thread_control_state
 struct thread_suspend_state
 {
   /* Last signal that the inferior received (why it stopped).  */
-  enum target_signal stop_signal;
+  enum gdb_signal stop_signal;
 };
 
 struct thread_info
@@ -216,7 +216,9 @@ struct thread_info
   int stop_requested;
 
   /* The initiating frame of a nexting operation, used for deciding
-     which exceptions to intercept.  */
+     which exceptions to intercept.  If it is null_frame_id no
+     bp_longjmp or bp_exception but longjmp has been caught just for
+     bp_longjmp_call_dummy.  */
   struct frame_id initiating_frame;
 
   /* Private data used by the target vector implementation.  */
@@ -299,6 +301,11 @@ void thread_change_ptid (ptid_t old_ptid, ptid_t new_ptid);
 typedef int (*thread_callback_func) (struct thread_info *, void *);
 extern struct thread_info *iterate_over_threads (thread_callback_func, void *);
 
+/* Traverse all threads.  */
+
+#define ALL_THREADS(T)				\
+  for (T = thread_list; T; T = T->next)
+
 extern int thread_count (void);
 
 /* Switch from one thread to another.  */
@@ -389,4 +396,6 @@ extern struct thread_info* inferior_thread (void);
 
 extern void update_thread_list (void);
 
+extern struct thread_info *thread_list;
+
 #endif /* GDBTHREAD_H */
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index dc52446..8142ab9 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -33,11 +33,10 @@
 #include "demangle.h"
 #include "complaints.h"
 #include "gdbcmd.h"
-#include "wrapper.h"
 #include "cp-abi.h"
 #include "gdb_assert.h"
 #include "hashtab.h"
-
+#include "exceptions.h"
 
 /* Initialize BADNESS constants.  */
 
@@ -463,6 +462,43 @@ lookup_function_type (struct type *type)
   return make_function_type (type, (struct type **) 0);
 }
 
+/* Given a type TYPE and argument types, return the appropriate
+   function type.  If the final type in PARAM_TYPES is NULL, make a
+   varargs function.  */
+
+struct type *
+lookup_function_type_with_arguments (struct type *type,
+				     int nparams,
+				     struct type **param_types)
+{
+  struct type *fn = make_function_type (type, (struct type **) 0);
+  int i;
+
+  if (nparams > 0)
+    {
+      if (param_types[nparams - 1] == NULL)
+	{
+	  --nparams;
+	  TYPE_VARARGS (fn) = 1;
+	}
+      else if (TYPE_CODE (check_typedef (param_types[nparams - 1]))
+	       == TYPE_CODE_VOID)
+	{
+	  --nparams;
+	  /* Caller should have ensured this.  */
+	  gdb_assert (nparams == 0);
+	  TYPE_PROTOTYPED (fn) = 1;
+	}
+    }
+
+  TYPE_NFIELDS (fn) = nparams;
+  TYPE_FIELDS (fn) = TYPE_ZALLOC (fn, nparams * sizeof (struct field));
+  for (i = 0; i < nparams; ++i)
+    TYPE_FIELD_TYPE (fn, i) = param_types[i];
+
+  return fn;
+}
+
 /* Identify address space identifier by name --
    return the integer flag defined in gdbtypes.h.  */
 extern int
@@ -776,13 +812,13 @@ get_discrete_bounds (struct type *type, LONGEST *lowp, LONGEST *highp)
 	     entries.  */
 	  int i;
 
-	  *lowp = *highp = TYPE_FIELD_BITPOS (type, 0);
+	  *lowp = *highp = TYPE_FIELD_ENUMVAL (type, 0);
 	  for (i = 0; i < TYPE_NFIELDS (type); i++)
 	    {
-	      if (TYPE_FIELD_BITPOS (type, i) < *lowp)
-		*lowp = TYPE_FIELD_BITPOS (type, i);
-	      if (TYPE_FIELD_BITPOS (type, i) > *highp)
-		*highp = TYPE_FIELD_BITPOS (type, i);
+	      if (TYPE_FIELD_ENUMVAL (type, i) < *lowp)
+		*lowp = TYPE_FIELD_ENUMVAL (type, i);
+	      if (TYPE_FIELD_ENUMVAL (type, i) > *highp)
+		*highp = TYPE_FIELD_ENUMVAL (type, i);
 	    }
 
 	  /* Set unsigned indicator if warranted.  */
@@ -1093,7 +1129,7 @@ smash_to_method_type (struct type *type, struct type *domain,
 /* Return a typename for a struct/union/enum type without "struct ",
    "union ", or "enum ".  If the type has a NULL name, return NULL.  */
 
-char *
+const char *
 type_name_no_tag (const struct type *type)
 {
   if (TYPE_TAG_NAME (type) != NULL)
@@ -1141,31 +1177,24 @@ lookup_typename (const struct language_defn *language,
 		 const struct block *block, int noerr)
 {
   struct symbol *sym;
-  struct type *tmp;
+  struct type *type;
 
   sym = lookup_symbol (name, block, VAR_DOMAIN, 0);
-  if (sym == NULL || SYMBOL_CLASS (sym) != LOC_TYPEDEF)
-    {
-      tmp = language_lookup_primitive_type_by_name (language, gdbarch, name);
-      if (tmp)
-	{
-	  return tmp;
-	}
-      else if (!tmp && noerr)
-	{
-	  return NULL;
-	}
-      else
-	{
-	  error (_("No type named %s."), name);
-	}
-    }
-  return (SYMBOL_TYPE (sym));
+  if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
+    return SYMBOL_TYPE (sym);
+
+  type = language_lookup_primitive_type_by_name (language, gdbarch, name);
+  if (type)
+    return type;
+
+  if (noerr)
+    return NULL;
+  error (_("No type named %s."), name);
 }
 
 struct type *
 lookup_unsigned_typename (const struct language_defn *language,
-			  struct gdbarch *gdbarch, char *name)
+			  struct gdbarch *gdbarch, const char *name)
 {
   char *uns = alloca (strlen (name) + 10);
 
@@ -1176,7 +1205,7 @@ lookup_unsigned_typename (const struct language_defn *language,
 
 struct type *
 lookup_signed_typename (const struct language_defn *language,
-			struct gdbarch *gdbarch, char *name)
+			struct gdbarch *gdbarch, const char *name)
 {
   struct type *t;
   char *uns = alloca (strlen (name) + 8);
@@ -1339,7 +1368,7 @@ lookup_struct_elt_type (struct type *type, char *name, int noerr)
 
   for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--)
     {
-      char *t_field_name = TYPE_FIELD_NAME (type, i);
+      const char *t_field_name = TYPE_FIELD_NAME (type, i);
 
       if (t_field_name && (strcmp_iw (t_field_name, name) == 0))
 	{
@@ -1481,7 +1510,7 @@ check_typedef (struct type *type)
     {
       if (!TYPE_TARGET_TYPE (type))
 	{
-	  char *name;
+	  const char *name;
 	  struct symbol *sym;
 
 	  /* It is dangerous to call lookup_symbol if we are currently
@@ -1544,7 +1573,7 @@ check_typedef (struct type *type)
       && opaque_type_resolution 
       && !currently_reading_symtab)
     {
-      char *name = type_name_no_tag (type);
+      const char *name = type_name_no_tag (type);
       struct type *newtype;
 
       if (name == NULL)
@@ -1578,7 +1607,7 @@ check_typedef (struct type *type)
      types.  */
   else if (TYPE_STUB (type) && !currently_reading_symtab)
     {
-      char *name = type_name_no_tag (type);
+      const char *name = type_name_no_tag (type);
       /* FIXME: shouldn't we separately check the TYPE_NAME and the
          TYPE_TAG_NAME, and look in STRUCT_DOMAIN and/or VAR_DOMAIN
          as appropriate?  (this code was written before TYPE_NAME and
@@ -1675,14 +1704,20 @@ static struct type *
 safe_parse_type (struct gdbarch *gdbarch, char *p, int length)
 {
   struct ui_file *saved_gdb_stderr;
-  struct type *type;
+  struct type *type = NULL; /* Initialize to keep gcc happy.  */
+  volatile struct gdb_exception except;
 
   /* Suppress error messages.  */
   saved_gdb_stderr = gdb_stderr;
   gdb_stderr = ui_file_new ();
 
   /* Call parse_and_eval_type() without fear of longjmp()s.  */
-  if (!gdb_parse_and_eval_type (p, length, &type))
+  TRY_CATCH (except, RETURN_MASK_ERROR)
+    {
+      type = parse_and_eval_type (p, length);
+    }
+
+  if (except.reason < 0)
     type = builtin_type (gdbarch)->builtin_void;
 
   /* Stop suppressing error messages.  */
@@ -2895,8 +2930,6 @@ print_cplus_stuff (struct type *type, int spaces)
 		    TYPE_N_BASECLASSES (type));
   printfi_filtered (spaces, "nfn_fields %d\n",
 		    TYPE_NFN_FIELDS (type));
-  printfi_filtered (spaces, "nfn_fields_total %d\n",
-		    TYPE_NFN_FIELDS_TOTAL (type));
   if (TYPE_N_BASECLASSES (type) > 0)
     {
       printfi_filtered (spaces, "virtual_field_bits (%d bits at *",
@@ -3194,10 +3227,15 @@ recursive_dump_type (struct type *type, int spaces)
   puts_filtered ("\n");
   for (idx = 0; idx < TYPE_NFIELDS (type); idx++)
     {
-      printfi_filtered (spaces + 2,
-			"[%d] bitpos %d bitsize %d type ",
-			idx, TYPE_FIELD_BITPOS (type, idx),
-			TYPE_FIELD_BITSIZE (type, idx));
+      if (TYPE_CODE (type) == TYPE_CODE_ENUM)
+	printfi_filtered (spaces + 2,
+			  "[%d] enumval %s type ",
+			  idx, plongest (TYPE_FIELD_ENUMVAL (type, idx)));
+      else
+	printfi_filtered (spaces + 2,
+			  "[%d] bitpos %d bitsize %d type ",
+			  idx, TYPE_FIELD_BITPOS (type, idx),
+			  TYPE_FIELD_BITSIZE (type, idx));
       gdb_print_host_address (TYPE_FIELD_TYPE (type, idx), gdb_stdout);
       printf_filtered (" name '%s' (",
 		       TYPE_FIELD_NAME (type, idx) != NULL
@@ -3394,6 +3432,10 @@ copy_type_recursive (struct objfile *objfile,
 	      SET_FIELD_BITPOS (TYPE_FIELD (new_type, i),
 				TYPE_FIELD_BITPOS (type, i));
 	      break;
+	    case FIELD_LOC_KIND_ENUMVAL:
+	      SET_FIELD_ENUMVAL (TYPE_FIELD (new_type, i),
+				 TYPE_FIELD_ENUMVAL (type, i));
+	      break;
 	    case FIELD_LOC_KIND_PHYSADDR:
 	      SET_FIELD_PHYSADDR (TYPE_FIELD (new_type, i),
 				  TYPE_FIELD_STATIC_PHYSADDR (type, i));
@@ -3603,12 +3645,12 @@ append_flags_type_flag (struct type *type, int bitpos, char *name)
   if (name)
     {
       TYPE_FIELD_NAME (type, bitpos) = xstrdup (name);
-      TYPE_FIELD_BITPOS (type, bitpos) = bitpos;
+      SET_FIELD_BITPOS (TYPE_FIELD (type, bitpos), bitpos);
     }
   else
     {
       /* Don't show this field to the user.  */
-      TYPE_FIELD_BITPOS (type, bitpos) = -1;
+      SET_FIELD_BITPOS (TYPE_FIELD (type, bitpos), -1);
     }
 }
 
@@ -3663,9 +3705,10 @@ append_composite_type_field_aligned (struct type *t, char *name,
       TYPE_LENGTH (t) = TYPE_LENGTH (t) + TYPE_LENGTH (field);
       if (TYPE_NFIELDS (t) > 1)
 	{
-	  FIELD_BITPOS (f[0]) = (FIELD_BITPOS (f[-1])
-				 + (TYPE_LENGTH (FIELD_TYPE (f[-1]))
-				    * TARGET_CHAR_BIT));
+	  SET_FIELD_BITPOS (f[0],
+			    (FIELD_BITPOS (f[-1])
+			     + (TYPE_LENGTH (FIELD_TYPE (f[-1]))
+				* TARGET_CHAR_BIT)));
 
 	  if (alignment)
 	    {
@@ -3676,7 +3719,7 @@ append_composite_type_field_aligned (struct type *t, char *name,
 
 	      if (left)
 		{
-		  FIELD_BITPOS (f[0]) += (alignment - left);
+		  SET_FIELD_BITPOS (f[0], FIELD_BITPOS (f[0]) + (alignment - left));
 		  TYPE_LENGTH (t) += (alignment - left) / TARGET_CHAR_BIT;
 		}
 	    }
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
index a54a302..17bfbc5 100644
--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
@@ -30,6 +30,21 @@ struct block;
 struct value_print_options;
 struct language_defn;
 
+/* These declarations are DWARF-specific as some of the gdbtypes.h data types
+   are already DWARF-specific.  */
+
+/* Offset relative to the start of its containing CU (compilation unit).  */
+typedef struct
+{
+  unsigned int cu_off;
+} cu_offset;
+
+/* Offset relative to the start of its .debug_info or .debug_types section.  */
+typedef struct
+{
+  unsigned int sect_off;
+} sect_offset;
+
 /* Some macros for char-based bitfields.  */
 
 #define B_SET(a,x)	((a)[(x)>>3] |= (1 << ((x)&7)))
@@ -290,6 +305,12 @@ enum type_instance_flag_value
 
 #define TYPE_DECLARED_CLASS(t) (TYPE_MAIN_TYPE (t)->flag_declared_class)
 
+/* True if this type is a "flag" enum.  A flag enum is one where all
+   the values are pairwise disjoint when "and"ed together.  This
+   affects how enum values are printed.  */
+
+#define TYPE_FLAG_ENUM(t) (TYPE_MAIN_TYPE (t)->flag_flag_enum)
+
 /* Constant type.  If this is set, the corresponding type has a
    const modifier.  */
 
@@ -345,6 +366,7 @@ enum type_instance_flag_value
 enum field_loc_kind
   {
     FIELD_LOC_KIND_BITPOS,	/* bitpos */
+    FIELD_LOC_KIND_ENUMVAL,	/* enumval */
     FIELD_LOC_KIND_PHYSADDR,	/* physaddr */
     FIELD_LOC_KIND_PHYSNAME,	/* physname */
     FIELD_LOC_KIND_DWARF_BLOCK	/* dwarf_block */
@@ -400,6 +422,11 @@ struct main_type
      "struct".  */
   unsigned int flag_declared_class : 1;
 
+  /* True if this is an enum type with disjoint values.  This affects
+     how the enum is printed.  */
+
+  unsigned int flag_flag_enum : 1;
+
   /* A discriminant telling us which field of the type_specific union
      is being used for this type, if any.  */
   ENUM_BITFIELD(type_specific_kind) type_specific_field : 3;
@@ -425,9 +452,11 @@ struct main_type
   /* Name of this type, or NULL if none.
 
      This is used for printing only, except by poorly designed C++ code.
-     For looking up a name, look for a symbol in the VAR_DOMAIN.  */
+     For looking up a name, look for a symbol in the VAR_DOMAIN.
+     This is generally allocated in the objfile's obstack.
+     However coffread.c uses malloc.  */
 
-  char *name;
+  const char *name;
 
   /* Tag name for this type, or NULL if none.  This means that the
      name of the type consists of a keyword followed by the tag name.
@@ -440,7 +469,7 @@ struct main_type
      One more legitimate use is that if TYPE_FLAG_STUB is set, this is
      the name to use to look for definitions in other files.  */
 
-  char *tag_name;
+  const char *tag_name;
 
   /* Every type is now associated with a particular objfile, and the
      type is allocated on the objfile_obstack for that objfile.  One problem
@@ -498,11 +527,13 @@ struct main_type
 	   containing structure.  For gdbarch_bits_big_endian=1
 	   targets, it is the bit offset to the MSB.  For
 	   gdbarch_bits_big_endian=0 targets, it is the bit offset to
-	   the LSB.  For a range bound or enum value, this is the
-	   value itself.  */
+	   the LSB.  */
 
 	int bitpos;
 
+	/* Enum value.  */
+	LONGEST enumval;
+
 	/* For a static field, if TYPE_FIELD_STATIC_HAS_ADDR then physaddr
 	   is the location (in the target) of the static field.
 	   Otherwise, physname is the mangled label of the static field.  */
@@ -525,7 +556,7 @@ struct main_type
       unsigned int artificial : 1;
 
       /* Discriminant for union field_location.  */
-      ENUM_BITFIELD(field_loc_kind) loc_kind : 2;
+      ENUM_BITFIELD(field_loc_kind) loc_kind : 3;
 
       /* Size of this field, in bits, or zero if not packed.
 	 If non-zero in an array type, indicates the element size in
@@ -533,7 +564,7 @@ struct main_type
 	 For an unpacked field, the field's type's length
 	 says how many bytes the field occupies.  */
 
-      unsigned int bitsize : 29;
+      unsigned int bitsize : 28;
 
       /* In a struct or union type, type of this field.
 	 In a function or member type, type of this argument.
@@ -545,7 +576,7 @@ struct main_type
 	 NULL for range bounds, array domains, and member function
 	 arguments.  */
 
-      char *name;
+      const char *name;
     } *fields;
 
     /* Union member used for range types.  */
@@ -693,11 +724,6 @@ struct cplus_struct_type
 
     short nfn_fields;
 
-    /* Number of methods described for this type, not including the
-       methods that it derives from.  */
-
-    short nfn_fields_total;
-
     /* Number of template arguments.  */
     unsigned short n_template_arguments;
 
@@ -755,9 +781,11 @@ struct cplus_struct_type
     struct fn_fieldlist
       {
 
-	/* The overloaded name.  */
+	/* The overloaded name.
+	   This is generally allocated in the objfile's obstack.
+	   However stabsread.c sometimes uses malloc.  */
 
-	char *name;
+	const char *name;
 
 	/* The number of methods with this name.  */
 
@@ -856,13 +884,6 @@ struct cplus_struct_type
     struct symbol **template_arguments;
   };
 
-/* Struct used in computing virtual base list.  */
-struct vbase
-  {
-    struct type *vbasetype;	/* pointer to virtual base */
-    struct vbase *next;		/* next in chain */
-  };
-
 /* Struct used to store conversion rankings.  */
 struct rank
   {
@@ -909,6 +930,20 @@ struct func_type
     struct call_site *tail_call_list;
   };
 
+/* struct call_site_parameter can be referenced in callees by several ways.  */
+
+enum call_site_parameter_kind
+{
+  /* Use field call_site_parameter.u.dwarf_reg.  */
+  CALL_SITE_PARAMETER_DWARF_REG,
+
+  /* Use field call_site_parameter.u.fb_offset.  */
+  CALL_SITE_PARAMETER_FB_OFFSET,
+
+  /* Use field call_site_parameter.u.param_offset.  */
+  CALL_SITE_PARAMETER_PARAM_OFFSET
+};
+
 /* A place where a function gets called from, represented by
    DW_TAG_GNU_call_site.  It can be looked up from symtab->call_site_htab.  */
 
@@ -928,7 +963,7 @@ struct call_site
 	union field_location loc;
 
 	/* Discriminant for union field_location.  */
-	ENUM_BITFIELD(field_loc_kind) loc_kind : 2;
+	ENUM_BITFIELD(field_loc_kind) loc_kind : 3;
       }
     target;
 
@@ -942,15 +977,24 @@ struct call_site
     /* Describe DW_TAG_GNU_call_site's DW_TAG_formal_parameter.  */
     struct call_site_parameter
       {
-	/* DW_TAG_formal_parameter's DW_AT_location's DW_OP_regX as DWARF
-	   register number, for register passed parameters.  If -1 then use
-	   fb_offset.  */
-	int dwarf_reg;
+	ENUM_BITFIELD (call_site_parameter_kind) kind : 2;
 
-	/* Offset from the callee's frame base, for stack passed parameters.
-	   This equals offset from the caller's stack pointer.  Valid only if
-	   DWARF_REGNUM is -1.  */
-	CORE_ADDR fb_offset;
+	union call_site_parameter_u
+	  {
+	    /* DW_TAG_formal_parameter's DW_AT_location's DW_OP_regX as DWARF
+	       register number, for register passed parameters.  */
+	    int dwarf_reg;
+
+	    /* Offset from the callee's frame base, for stack passed parameters.
+	       This equals offset from the caller's stack pointer.  */
+	    CORE_ADDR fb_offset;
+
+	    /* Offset relative to the start of this PER_CU to
+	       DW_TAG_formal_parameter which is referenced by both caller and
+	       the callee.  */
+	    cu_offset param_offset;
+	  }
+	u;
 
 	/* DW_TAG_formal_parameter's DW_AT_GNU_call_site_value.  It is never
 	   NULL.  */
@@ -1050,7 +1094,6 @@ extern void allocate_gnat_aux_type (struct type *);
 #define TYPE_VPTR_FIELDNO(thistype) TYPE_MAIN_TYPE(thistype)->vptr_fieldno
 #define TYPE_FN_FIELDS(thistype) TYPE_CPLUS_SPECIFIC(thistype)->fn_fields
 #define TYPE_NFN_FIELDS(thistype) TYPE_CPLUS_SPECIFIC(thistype)->nfn_fields
-#define TYPE_NFN_FIELDS_TOTAL(thistype) TYPE_CPLUS_SPECIFIC(thistype)->nfn_fields_total
 #define TYPE_SPECIFIC_FIELD(thistype) \
   TYPE_MAIN_TYPE(thistype)->type_specific_field
 #define	TYPE_TYPE_SPECIFIC(thistype) TYPE_MAIN_TYPE(thistype)->type_specific
@@ -1085,13 +1128,19 @@ extern void allocate_gnat_aux_type (struct type *);
 #define FIELD_TYPE(thisfld) ((thisfld).type)
 #define FIELD_NAME(thisfld) ((thisfld).name)
 #define FIELD_LOC_KIND(thisfld) ((thisfld).loc_kind)
-#define FIELD_BITPOS(thisfld) ((thisfld).loc.bitpos)
+#define FIELD_BITPOS_LVAL(thisfld) ((thisfld).loc.bitpos)
+#define FIELD_BITPOS(thisfld) (FIELD_BITPOS_LVAL (thisfld) + 0)
+#define FIELD_ENUMVAL_LVAL(thisfld) ((thisfld).loc.enumval)
+#define FIELD_ENUMVAL(thisfld) (FIELD_ENUMVAL_LVAL (thisfld) + 0)
 #define FIELD_STATIC_PHYSNAME(thisfld) ((thisfld).loc.physname)
 #define FIELD_STATIC_PHYSADDR(thisfld) ((thisfld).loc.physaddr)
 #define FIELD_DWARF_BLOCK(thisfld) ((thisfld).loc.dwarf_block)
 #define SET_FIELD_BITPOS(thisfld, bitpos)			\
   (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_BITPOS,		\
-   FIELD_BITPOS (thisfld) = (bitpos))
+   FIELD_BITPOS_LVAL (thisfld) = (bitpos))
+#define SET_FIELD_ENUMVAL(thisfld, enumval)			\
+  (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_ENUMVAL,		\
+   FIELD_ENUMVAL_LVAL (thisfld) = (enumval))
 #define SET_FIELD_PHYSNAME(thisfld, name)			\
   (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_PHYSNAME,		\
    FIELD_STATIC_PHYSNAME (thisfld) = (name))
@@ -1109,6 +1158,7 @@ extern void allocate_gnat_aux_type (struct type *);
 #define TYPE_FIELD_NAME(thistype, n) FIELD_NAME(TYPE_FIELD(thistype, n))
 #define TYPE_FIELD_LOC_KIND(thistype, n) FIELD_LOC_KIND (TYPE_FIELD (thistype, n))
 #define TYPE_FIELD_BITPOS(thistype, n) FIELD_BITPOS (TYPE_FIELD (thistype, n))
+#define TYPE_FIELD_ENUMVAL(thistype, n) FIELD_ENUMVAL (TYPE_FIELD (thistype, n))
 #define TYPE_FIELD_STATIC_PHYSNAME(thistype, n) FIELD_STATIC_PHYSNAME (TYPE_FIELD (thistype, n))
 #define TYPE_FIELD_STATIC_PHYSADDR(thistype, n) FIELD_STATIC_PHYSADDR (TYPE_FIELD (thistype, n))
 #define TYPE_FIELD_DWARF_BLOCK(thistype, n) FIELD_DWARF_BLOCK (TYPE_FIELD (thistype, n))
@@ -1456,7 +1506,7 @@ extern void smash_to_methodptr_type (struct type *, struct type *);
 
 extern struct type *allocate_stub_method (struct type *);
 
-extern char *type_name_no_tag (const struct type *);
+extern const char *type_name_no_tag (const struct type *);
 
 extern const char *type_name_no_tag_or_error (struct type *type);
 
@@ -1470,6 +1520,10 @@ extern struct type *make_function_type (struct type *, struct type **);
 
 extern struct type *lookup_function_type (struct type *);
 
+extern struct type *lookup_function_type_with_arguments (struct type *,
+							 int,
+							 struct type **);
+
 extern struct type *create_range_type (struct type *, struct type *, LONGEST,
 				       LONGEST);
 
@@ -1484,10 +1538,10 @@ extern struct type *lookup_string_range_type (struct type *, int, int);
 extern struct type *create_set_type (struct type *, struct type *);
 
 extern struct type *lookup_unsigned_typename (const struct language_defn *,
-					      struct gdbarch *,char *);
+					      struct gdbarch *, const char *);
 
 extern struct type *lookup_signed_typename (const struct language_defn *,
-					    struct gdbarch *,char *);
+					    struct gdbarch *, const char *);
 
 extern struct type *check_typedef (struct type *);
 
diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
index 17b0a45..0c45f20 100644
--- a/gdb/gnu-nat.c
+++ b/gdb/gnu-nat.c
@@ -107,7 +107,7 @@ void inf_resume (struct inf *inf);
 void inf_set_step_thread (struct inf *inf, struct proc *proc);
 void inf_detach (struct inf *inf);
 void inf_attach (struct inf *inf, int pid);
-void inf_signal (struct inf *inf, enum target_signal sig);
+void inf_signal (struct inf *inf, enum gdb_signal sig);
 void inf_continue (struct inf *inf);
 
 #define inf_debug(_inf, msg, args...) \
@@ -1254,7 +1254,7 @@ inf_detach (struct inf *inf)
 	  if (inf->nomsg)
 	    inf_continue (inf);
 	  else
-	    inf_signal (inf, TARGET_SIGNAL_0);
+	    inf_signal (inf, GDB_SIGNAL_0);
 	}
 
       proc_restore_exc_port (task);
@@ -1321,12 +1321,12 @@ inf_restore_exc_ports (struct inf *inf)
    signal 0, will continue it.  INF is assumed to be in a paused state, and
    the resume_sc's of INF's threads may be affected.  */
 void
-inf_signal (struct inf *inf, enum target_signal sig)
+inf_signal (struct inf *inf, enum gdb_signal sig)
 {
   error_t err = 0;
-  int host_sig = target_signal_to_host (sig);
+  int host_sig = gdb_signal_to_host (sig);
 
-#define NAME target_signal_to_name (sig)
+#define NAME gdb_signal_to_name (sig)
 
   if (host_sig >= _NSIG)
     /* A mach exception.  Exceptions are encoded in the signal space by
@@ -1574,7 +1574,7 @@ rewait:
 		     inf->pending_execs);
 	}
       else if (kind == TARGET_WAITKIND_STOPPED
-	       && w->status.value.sig == TARGET_SIGNAL_TRAP)
+	       && w->status.value.sig == GDB_SIGNAL_TRAP)
 	/* Ah hah!  A SIGTRAP from the inferior while starting up probably
 	   means we've succesfully completed an exec!  */
 	{
@@ -1694,7 +1694,7 @@ S_exception_raise_request (mach_port_t port, mach_port_t reply_port,
       if (exception == EXC_BREAKPOINT)
 	/* GDB likes to get SIGTRAP for breakpoints.  */
 	{
-	  inf->wait.status.value.sig = TARGET_SIGNAL_TRAP;
+	  inf->wait.status.value.sig = GDB_SIGNAL_TRAP;
 	  mach_port_deallocate (mach_task_self (), reply_port);
 	}
       else
@@ -1728,7 +1728,7 @@ S_exception_raise_request (mach_port_t port, mach_port_t reply_port,
 	     them after _NSIG; this assumes they're positive (and not
 	     extremely large)!  */
 	  inf->wait.status.value.sig =
-	    target_signal_from_host (_NSIG + exception);
+	    gdb_signal_from_host (_NSIG + exception);
 	}
     }
   else
@@ -1750,7 +1750,7 @@ inf_task_died_status (struct inf *inf)
   warning (_("Pid %d died with unknown exit status, using SIGKILL."),
 	   inf->pid);
   inf->wait.status.kind = TARGET_WAITKIND_SIGNALLED;
-  inf->wait.status.value.sig = TARGET_SIGNAL_KILL;
+  inf->wait.status.value.sig = GDB_SIGNAL_KILL;
 }
 
 /* Notify server routines.  The only real one is dead name notification.  */
@@ -1918,7 +1918,7 @@ S_msg_sig_post_untraced_reply (mach_port_t reply, error_t err)
        server should like).  */
     {
       inf->wait.status.kind = TARGET_WAITKIND_STOPPED;
-      inf->wait.status.value.sig = TARGET_SIGNAL_0;
+      inf->wait.status.value.sig = GDB_SIGNAL_0;
     }
   else if (err)
     warning (_("Signal delivery failed: %s"), safe_strerror (err));
@@ -1975,7 +1975,7 @@ port_msgs_queued (mach_port_t port)
 
 static void
 gnu_resume (struct target_ops *ops,
-	    ptid_t ptid, int step, enum target_signal sig)
+	    ptid_t ptid, int step, enum gdb_signal sig)
 {
   struct proc *step_thread = 0;
   int resume_all;
@@ -1986,9 +1986,9 @@ gnu_resume (struct target_ops *ops,
 
   inf_validate_procinfo (inf);
 
-  if (sig != TARGET_SIGNAL_0 || inf->stopped)
+  if (sig != GDB_SIGNAL_0 || inf->stopped)
     {
-      if (sig == TARGET_SIGNAL_0 && inf->nomsg)
+      if (sig == GDB_SIGNAL_0 && inf->nomsg)
 	inf_continue (inf);
       else
 	inf_signal (inf, sig);
@@ -2000,7 +2000,7 @@ gnu_resume (struct target_ops *ops,
       proc_abort (inf->wait.thread, 1);
       warning (_("Aborting %s with unforwarded exception %s."),
 	       proc_string (inf->wait.thread),
-	       target_signal_to_name (inf->wait.status.value.sig));
+	       gdb_signal_to_name (inf->wait.status.value.sig));
     }
 
   if (port_msgs_queued (inf->event_port))
diff --git a/gdb/gnu-v2-abi.c b/gdb/gnu-v2-abi.c
index de6f80a..e635e8f 100644
--- a/gdb/gnu-v2-abi.c
+++ b/gdb/gnu-v2-abi.c
@@ -194,6 +194,7 @@ gnuv2_value_rtti_type (struct value *v, int *full, int *top, int *using_enc)
   CORE_ADDR vtbl;
   struct minimal_symbol *minsym;
   char *demangled_name, *p;
+  const char *linkage_name;
   struct type *btype;
   struct type *known_type_vptr_basetype;
   int known_type_vptr_fieldno;
@@ -246,12 +247,12 @@ gnuv2_value_rtti_type (struct value *v, int *full, int *top, int *using_enc)
   /* Try to find a symbol that is the vtable.  */
   minsym=lookup_minimal_symbol_by_pc(vtbl);
   if (minsym==NULL
-      || (demangled_name=SYMBOL_LINKAGE_NAME (minsym))==NULL
-      || !is_vtable_name (demangled_name))
+      || (linkage_name=SYMBOL_LINKAGE_NAME (minsym))==NULL
+      || !is_vtable_name (linkage_name))
     return NULL;
 
   /* If we just skip the prefix, we get screwed by namespaces.  */
-  demangled_name=cplus_demangle(demangled_name,DMGL_PARAMS|DMGL_ANSI);
+  demangled_name=cplus_demangle(linkage_name,DMGL_PARAMS|DMGL_ANSI);
   p = strchr (demangled_name, ' ');
   if (p)
     *p = '\0';
@@ -297,8 +298,8 @@ static int
 vb_match (struct type *type, int index, struct type *basetype)
 {
   struct type *fieldtype;
-  char *name = TYPE_FIELD_NAME (type, index);
-  char *field_class_name = NULL;
+  const char *name = TYPE_FIELD_NAME (type, index);
+  const char *field_class_name = NULL;
 
   if (*name != '_')
     return 0;
diff --git a/gdb/gnu-v3-abi.c b/gdb/gnu-v3-abi.c
index a461bb0..3a83e2d 100644
--- a/gdb/gnu-v3-abi.c
+++ b/gdb/gnu-v3-abi.c
@@ -26,6 +26,7 @@
 #include "objfiles.h"
 #include "valprint.h"
 #include "c-lang.h"
+#include "exceptions.h"
 
 #include "gdb_assert.h"
 #include "gdb_string.h"
@@ -129,28 +130,28 @@ build_gdb_vtable_type (struct gdbarch *arch)
   /* ptrdiff_t vcall_and_vbase_offsets[0]; */
   FIELD_NAME (*field) = "vcall_and_vbase_offsets";
   FIELD_TYPE (*field) = lookup_array_range_type (ptrdiff_type, 0, -1);
-  FIELD_BITPOS (*field) = offset * TARGET_CHAR_BIT;
+  SET_FIELD_BITPOS (*field, offset * TARGET_CHAR_BIT);
   offset += TYPE_LENGTH (FIELD_TYPE (*field));
   field++;
 
   /* ptrdiff_t offset_to_top; */
   FIELD_NAME (*field) = "offset_to_top";
   FIELD_TYPE (*field) = ptrdiff_type;
-  FIELD_BITPOS (*field) = offset * TARGET_CHAR_BIT;
+  SET_FIELD_BITPOS (*field, offset * TARGET_CHAR_BIT);
   offset += TYPE_LENGTH (FIELD_TYPE (*field));
   field++;
 
   /* void *type_info; */
   FIELD_NAME (*field) = "type_info";
   FIELD_TYPE (*field) = void_ptr_type;
-  FIELD_BITPOS (*field) = offset * TARGET_CHAR_BIT;
+  SET_FIELD_BITPOS (*field, offset * TARGET_CHAR_BIT);
   offset += TYPE_LENGTH (FIELD_TYPE (*field));
   field++;
 
   /* void (*virtual_functions[0]) (); */
   FIELD_NAME (*field) = "virtual_functions";
   FIELD_TYPE (*field) = lookup_array_range_type (ptr_to_void_fn_type, 0, -1);
-  FIELD_BITPOS (*field) = offset * TARGET_CHAR_BIT;
+  SET_FIELD_BITPOS (*field, offset * TARGET_CHAR_BIT);
   offset += TYPE_LENGTH (FIELD_TYPE (*field));
   field++;
 
@@ -429,8 +430,9 @@ gnuv3_baseclass_offset (struct type *type, int index,
   ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
 
   /* If it isn't a virtual base, this is easy.  The offset is in the
-     type definition.  */
-  if (!BASETYPE_VIA_VIRTUAL (type, index))
+     type definition.  Likewise for Java, which doesn't really have
+     virtual inheritance in the C++ sense.  */
+  if (!BASETYPE_VIA_VIRTUAL (type, index) || TYPE_CPLUS_REALLY_JAVA (type))
     return TYPE_BASECLASS_BITPOS (type, index) / 8;
 
   /* To access a virtual base, we need to use the vbase offset stored in
@@ -619,7 +621,12 @@ gnuv3_print_method_ptr (const gdb_byte *contents,
       print_longest (stream, 'd', 1, ptr_value);
     }
   else
-    print_address_demangle (gdbarch, ptr_value, stream, demangle);
+    {
+      struct value_print_options opts;
+
+      get_user_print_options (&opts);
+      print_address_demangle (&opts, gdbarch, ptr_value, stream, demangle);
+    }
 
   if (adjustment)
     {
@@ -725,6 +732,245 @@ gnuv3_method_ptr_to_value (struct value **this_p, struct value *method_ptr)
     return value_from_pointer (lookup_pointer_type (method_type), ptr_value);
 }
 
+/* Objects of this type are stored in a hash table and a vector when
+   printing the vtables for a class.  */
+
+struct value_and_voffset
+{
+  /* The value representing the object.  */
+  struct value *value;
+
+  /* The maximum vtable offset we've found for any object at this
+     offset in the outermost object.  */
+  int max_voffset;
+};
+
+typedef struct value_and_voffset *value_and_voffset_p;
+DEF_VEC_P (value_and_voffset_p);
+
+/* Hash function for value_and_voffset.  */
+
+static hashval_t
+hash_value_and_voffset (const void *p)
+{
+  const struct value_and_voffset *o = p;
+
+  return value_address (o->value) + value_embedded_offset (o->value);
+}
+
+/* Equality function for value_and_voffset.  */
+
+static int
+eq_value_and_voffset (const void *a, const void *b)
+{
+  const struct value_and_voffset *ova = a;
+  const struct value_and_voffset *ovb = b;
+
+  return (value_address (ova->value) + value_embedded_offset (ova->value)
+	  == value_address (ovb->value) + value_embedded_offset (ovb->value));
+}
+
+/* qsort comparison function for value_and_voffset.  */
+
+static int
+compare_value_and_voffset (const void *a, const void *b)
+{
+  const struct value_and_voffset * const *ova = a;
+  CORE_ADDR addra = (value_address ((*ova)->value)
+		     + value_embedded_offset ((*ova)->value));
+  const struct value_and_voffset * const *ovb = b;
+  CORE_ADDR addrb = (value_address ((*ovb)->value)
+		     + value_embedded_offset ((*ovb)->value));
+
+  if (addra < addrb)
+    return -1;
+  if (addra > addrb)
+    return 1;
+  return 0;
+}
+
+/* A helper function used when printing vtables.  This determines the
+   key (most derived) sub-object at each address and also computes the
+   maximum vtable offset seen for the corresponding vtable.  Updates
+   OFFSET_HASH and OFFSET_VEC with a new value_and_voffset object, if
+   needed.  VALUE is the object to examine.  */
+
+static void
+compute_vtable_size (htab_t offset_hash,
+		     VEC (value_and_voffset_p) **offset_vec,
+		     struct value *value)
+{
+  int i;
+  struct type *type = check_typedef (value_type (value));
+  void **slot;
+  struct value_and_voffset search_vo, *current_vo;
+  CORE_ADDR addr = value_address (value) + value_embedded_offset (value);
+
+  /* If the object is not dynamic, then we are done; as it cannot have
+     dynamic base types either.  */
+  if (!gnuv3_dynamic_class (type))
+    return;
+
+  /* Update the hash and the vec, if needed.  */
+  search_vo.value = value;
+  slot = htab_find_slot (offset_hash, &search_vo, INSERT);
+  if (*slot)
+    current_vo = *slot;
+  else
+    {
+      current_vo = XNEW (struct value_and_voffset);
+      current_vo->value = value;
+      current_vo->max_voffset = -1;
+      *slot = current_vo;
+      VEC_safe_push (value_and_voffset_p, *offset_vec, current_vo);
+    }
+
+  /* Update the value_and_voffset object with the highest vtable
+     offset from this class.  */
+  for (i = 0; i < TYPE_NFN_FIELDS (type); ++i)
+    {
+      int j;
+      struct fn_field *fn = TYPE_FN_FIELDLIST1 (type, i);
+
+      for (j = 0; j < TYPE_FN_FIELDLIST_LENGTH (type, i); ++j)
+	{
+	  if (TYPE_FN_FIELD_VIRTUAL_P (fn, j))
+	    {
+	      int voffset = TYPE_FN_FIELD_VOFFSET (fn, j);
+
+	      if (voffset > current_vo->max_voffset)
+		current_vo->max_voffset = voffset;
+	    }
+	}
+    }
+
+  /* Recurse into base classes.  */
+  for (i = 0; i < TYPE_N_BASECLASSES (type); ++i)
+    compute_vtable_size (offset_hash, offset_vec, value_field (value, i));
+}
+
+/* Helper for gnuv3_print_vtable that prints a single vtable.  */
+
+static void
+print_one_vtable (struct gdbarch *gdbarch, struct value *value,
+		  int max_voffset,
+		  struct value_print_options *opts)
+{
+  int i;
+  struct type *type = check_typedef (value_type (value));
+  struct value *vtable;
+  CORE_ADDR vt_addr;
+
+  vtable = gnuv3_get_vtable (gdbarch, type,
+			     value_address (value)
+			     + value_embedded_offset (value));
+  vt_addr = value_address (value_field (vtable,
+					vtable_field_virtual_functions));
+
+  printf_filtered (_("vtable for '%s' @ %s (subobject @ %s):\n"),
+		   TYPE_SAFE_NAME (type),
+		   paddress (gdbarch, vt_addr),
+		   paddress (gdbarch, (value_address (value)
+				       + value_embedded_offset (value))));
+
+  for (i = 0; i <= max_voffset; ++i)
+    {
+      /* Initialize it just to avoid a GCC false warning.  */
+      CORE_ADDR addr = 0;
+      struct value *vfn;
+      volatile struct gdb_exception ex;
+
+      printf_filtered ("[%d]: ", i);
+
+      vfn = value_subscript (value_field (vtable,
+					  vtable_field_virtual_functions),
+			     i);
+
+      if (gdbarch_vtable_function_descriptors (gdbarch))
+	vfn = value_addr (vfn);
+
+      TRY_CATCH (ex, RETURN_MASK_ERROR)
+	{
+	  addr = value_as_address (vfn);
+	}
+      if (ex.reason < 0)
+	printf_filtered (_("<error: %s>"), ex.message);
+      else
+	print_function_pointer_address (opts, gdbarch, addr, gdb_stdout);
+      printf_filtered ("\n");
+    }
+}
+
+/* Implementation of the print_vtable method.  */
+
+static void
+gnuv3_print_vtable (struct value *value)
+{
+  struct gdbarch *gdbarch;
+  struct type *type;
+  struct value *vtable;
+  struct value_print_options opts;
+  htab_t offset_hash;
+  struct cleanup *cleanup;
+  VEC (value_and_voffset_p) *result_vec = NULL;
+  struct value_and_voffset *iter;
+  int i, count;
+
+  value = coerce_ref (value);
+  type = check_typedef (value_type (value));
+  if (TYPE_CODE (type) == TYPE_CODE_PTR)
+    {
+      value = value_ind (value);
+      type = check_typedef (value_type (value));
+    }
+
+  get_user_print_options (&opts);
+
+  /* Respect 'set print object'.  */
+  if (opts.objectprint)
+    {
+      value = value_full_object (value, NULL, 0, 0, 0);
+      type = check_typedef (value_type (value));
+    }
+
+  gdbarch = get_type_arch (type);
+  vtable = gnuv3_get_vtable (gdbarch, type,
+			     value_as_address (value_addr (value)));
+
+  if (!vtable)
+    {
+      printf_filtered (_("This object does not have a virtual function table\n"));
+      return;
+    }
+
+  offset_hash = htab_create_alloc (1, hash_value_and_voffset,
+				   eq_value_and_voffset,
+				   xfree, xcalloc, xfree);
+  cleanup = make_cleanup_htab_delete (offset_hash);
+  make_cleanup (VEC_cleanup (value_and_voffset_p), &result_vec);
+
+  compute_vtable_size (offset_hash, &result_vec, value);
+
+  qsort (VEC_address (value_and_voffset_p, result_vec),
+	 VEC_length (value_and_voffset_p, result_vec),
+	 sizeof (value_and_voffset_p),
+	 compare_value_and_voffset);
+
+  count = 0;
+  for (i = 0; VEC_iterate (value_and_voffset_p, result_vec, i, iter); ++i)
+    {
+      if (iter->max_voffset >= 0)
+	{
+	  if (count > 0)
+	    printf_filtered ("\n");
+	  print_one_vtable (gdbarch, iter->value, iter->max_voffset, &opts);
+	  ++count;
+	}
+    }
+
+  do_cleanups (cleanup);
+}
+
 /* Determine if we are currently in a C++ thunk.  If so, get the address
    of the routine we are thunking to and continue to there instead.  */
 
@@ -735,7 +981,7 @@ gnuv3_skip_trampoline (struct frame_info *frame, CORE_ADDR stop_pc)
   struct gdbarch *gdbarch = get_frame_arch (frame);
   struct minimal_symbol *thunk_sym, *fn_sym;
   struct obj_section *section;
-  char *thunk_name, *fn_name;
+  const char *thunk_name, *fn_name;
   
   real_stop_pc = gdbarch_skip_trampoline_code (gdbarch, frame, stop_pc);
   if (real_stop_pc == 0)
@@ -804,7 +1050,7 @@ gnuv3_pass_by_reference (struct type *type)
 	 fieldelem++)
       {
 	struct fn_field *fn = TYPE_FN_FIELDLIST1 (type, fieldnum);
-	char *name = TYPE_FN_FIELDLIST_NAME (type, fieldnum);
+	const char *name = TYPE_FN_FIELDLIST_NAME (type, fieldnum);
 	struct type *fieldtype = TYPE_FN_FIELD_TYPE (fn, fieldelem);
 
 	/* If this function is marked as artificial, it is compiler-generated,
@@ -873,6 +1119,7 @@ init_gnuv3_ops (void)
   gnu_v3_abi_ops.method_ptr_size = gnuv3_method_ptr_size;
   gnu_v3_abi_ops.make_method_ptr = gnuv3_make_method_ptr;
   gnu_v3_abi_ops.method_ptr_to_value = gnuv3_method_ptr_to_value;
+  gnu_v3_abi_ops.print_vtable = gnuv3_print_vtable;
   gnu_v3_abi_ops.skip_trampoline = gnuv3_skip_trampoline;
   gnu_v3_abi_ops.pass_by_reference = gnuv3_pass_by_reference;
 }
diff --git a/gdb/gnulib/Makefile.am b/gdb/gnulib/Makefile.am
deleted file mode 100644
index f07c7a2..0000000
--- a/gdb/gnulib/Makefile.am
+++ /dev/null
@@ -1,353 +0,0 @@
-## DO NOT EDIT! GENERATED AUTOMATICALLY!
-## Process this file with automake to produce Makefile.in.
-# Copyright (C) 2002-2011 Free Software Foundation, Inc.
-#
-# This file is free software, distributed under the terms of the GNU
-# General Public License.  As a special exception to the GNU General
-# Public License, this file may be distributed as part of a program
-# that contains a configuration script generated by Autoconf, under
-# the same distribution terms as the rest of that program.
-#
-# Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=gnulib --m4-base=gnulib/m4 --doc-base=doc --tests-base=tests --aux-dir=gnulib/extra --no-libtool --macro-prefix=gl --no-vc-files memmem
-
-AUTOMAKE_OPTIONS = 1.5 gnits
-
-SUBDIRS =
-noinst_HEADERS =
-noinst_LIBRARIES =
-noinst_LTLIBRARIES =
-EXTRA_DIST =
-BUILT_SOURCES =
-SUFFIXES =
-MOSTLYCLEANFILES = core *.stackdump
-MOSTLYCLEANDIRS =
-CLEANFILES =
-DISTCLEANFILES =
-MAINTAINERCLEANFILES =
-EXTRA_DIST += m4/gnulib-cache.m4
-
-AM_CPPFLAGS =
-AM_CFLAGS =
-
-noinst_LIBRARIES += libgnu.a
-
-libgnu_a_SOURCES =
-libgnu_a_LIBADD = $(gl_LIBOBJS)
-libgnu_a_DEPENDENCIES = $(gl_LIBOBJS)
-EXTRA_libgnu_a_SOURCES =
-
-## begin gnulib module arg-nonnull
-
-# The BUILT_SOURCES created by this Makefile snippet are not used via #include
-# statements but through direct file reference. Therefore this snippet must be
-# present in all Makefile.am that need it. This is ensured by the applicability
-# 'all' defined above.
-
-BUILT_SOURCES += arg-nonnull.h
-# The arg-nonnull.h that gets inserted into generated .h files is the same as
-# build-aux/arg-nonnull.h, except that it has the copyright header cut off.
-arg-nonnull.h: $(top_srcdir)/gnulib/extra/arg-nonnull.h
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	sed -n -e '/GL_ARG_NONNULL/,$$p' \
-	  < $(top_srcdir)/gnulib/extra/arg-nonnull.h \
-	  > $@-t && \
-	mv $@-t $@
-MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t
-
-ARG_NONNULL_H=arg-nonnull.h
-
-EXTRA_DIST += $(top_srcdir)/gnulib/extra/arg-nonnull.h
-
-## end   gnulib module arg-nonnull
-
-## begin gnulib module c++defs
-
-# The BUILT_SOURCES created by this Makefile snippet are not used via #include
-# statements but through direct file reference. Therefore this snippet must be
-# present in all Makefile.am that need it. This is ensured by the applicability
-# 'all' defined above.
-
-BUILT_SOURCES += c++defs.h
-# The c++defs.h that gets inserted into generated .h files is the same as
-# build-aux/c++defs.h, except that it has the copyright header cut off.
-c++defs.h: $(top_srcdir)/gnulib/extra/c++defs.h
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	sed -n -e '/_GL_CXXDEFS/,$$p' \
-	  < $(top_srcdir)/gnulib/extra/c++defs.h \
-	  > $@-t && \
-	mv $@-t $@
-MOSTLYCLEANFILES += c++defs.h c++defs.h-t
-
-CXXDEFS_H=c++defs.h
-
-EXTRA_DIST += $(top_srcdir)/gnulib/extra/c++defs.h
-
-## end   gnulib module c++defs
-
-## begin gnulib module memchr
-
-
-EXTRA_DIST += memchr.c memchr.valgrind
-
-EXTRA_libgnu_a_SOURCES += memchr.c
-
-## end   gnulib module memchr
-
-## begin gnulib module memmem-simple
-
-
-EXTRA_DIST += memmem.c str-two-way.h
-
-EXTRA_libgnu_a_SOURCES += memmem.c
-
-## end   gnulib module memmem-simple
-
-## begin gnulib module stddef
-
-BUILT_SOURCES += $(STDDEF_H)
-
-# We need the following in order to create <stddef.h> when the system
-# doesn't have one that works with the given compiler.
-stddef.h: stddef.in.h
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-	  sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-	      -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
-	      -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
-	      -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
-	      < $(srcdir)/stddef.in.h; \
-	} > $@-t && \
-	mv $@-t $@
-MOSTLYCLEANFILES += stddef.h stddef.h-t
-
-EXTRA_DIST += stddef.in.h
-
-## end   gnulib module stddef
-
-## begin gnulib module stdint
-
-BUILT_SOURCES += $(STDINT_H)
-
-# We need the following in order to create <stdint.h> when the system
-# doesn't have one that works with the given compiler.
-stdint.h: stdint.in.h
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-	  sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
-	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-	      -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
-	      -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
-	      -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
-	      -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
-	      -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
-	      -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
-	      -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
-	      -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
-	      -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
-	      -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
-	      -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
-	      -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
-	      -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
-	      -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
-	      -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
-	      -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
-	      -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
-	      -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
-	      -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
-	      -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
-	      -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
-	      < $(srcdir)/stdint.in.h; \
-	} > $@-t && \
-	mv $@-t $@
-MOSTLYCLEANFILES += stdint.h stdint.h-t
-
-EXTRA_DIST += stdint.in.h
-
-## end   gnulib module stdint
-
-## begin gnulib module string
-
-BUILT_SOURCES += string.h
-
-# We need the following in order to create <string.h> when the system
-# doesn't have one that works with the given compiler.
-string.h: string.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-	  sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-	      -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
-	      -e 's|@''GNULIB_MBSLEN''@|$(GNULIB_MBSLEN)|g' \
-	      -e 's|@''GNULIB_MBSNLEN''@|$(GNULIB_MBSNLEN)|g' \
-	      -e 's|@''GNULIB_MBSCHR''@|$(GNULIB_MBSCHR)|g' \
-	      -e 's|@''GNULIB_MBSRCHR''@|$(GNULIB_MBSRCHR)|g' \
-	      -e 's|@''GNULIB_MBSSTR''@|$(GNULIB_MBSSTR)|g' \
-	      -e 's|@''GNULIB_MBSCASECMP''@|$(GNULIB_MBSCASECMP)|g' \
-	      -e 's|@''GNULIB_MBSNCASECMP''@|$(GNULIB_MBSNCASECMP)|g' \
-	      -e 's|@''GNULIB_MBSPCASECMP''@|$(GNULIB_MBSPCASECMP)|g' \
-	      -e 's|@''GNULIB_MBSCASESTR''@|$(GNULIB_MBSCASESTR)|g' \
-	      -e 's|@''GNULIB_MBSCSPN''@|$(GNULIB_MBSCSPN)|g' \
-	      -e 's|@''GNULIB_MBSPBRK''@|$(GNULIB_MBSPBRK)|g' \
-	      -e 's|@''GNULIB_MBSSPN''@|$(GNULIB_MBSSPN)|g' \
-	      -e 's|@''GNULIB_MBSSEP''@|$(GNULIB_MBSSEP)|g' \
-	      -e 's|@''GNULIB_MBSTOK_R''@|$(GNULIB_MBSTOK_R)|g' \
-	      -e 's|@''GNULIB_MEMCHR''@|$(GNULIB_MEMCHR)|g' \
-	      -e 's|@''GNULIB_MEMMEM''@|$(GNULIB_MEMMEM)|g' \
-	      -e 's|@''GNULIB_MEMPCPY''@|$(GNULIB_MEMPCPY)|g' \
-	      -e 's|@''GNULIB_MEMRCHR''@|$(GNULIB_MEMRCHR)|g' \
-	      -e 's|@''GNULIB_RAWMEMCHR''@|$(GNULIB_RAWMEMCHR)|g' \
-	      -e 's|@''GNULIB_STPCPY''@|$(GNULIB_STPCPY)|g' \
-	      -e 's|@''GNULIB_STPNCPY''@|$(GNULIB_STPNCPY)|g' \
-	      -e 's|@''GNULIB_STRCHRNUL''@|$(GNULIB_STRCHRNUL)|g' \
-	      -e 's|@''GNULIB_STRDUP''@|$(GNULIB_STRDUP)|g' \
-	      -e 's|@''GNULIB_STRNCAT''@|$(GNULIB_STRNCAT)|g' \
-	      -e 's|@''GNULIB_STRNDUP''@|$(GNULIB_STRNDUP)|g' \
-	      -e 's|@''GNULIB_STRNLEN''@|$(GNULIB_STRNLEN)|g' \
-	      -e 's|@''GNULIB_STRPBRK''@|$(GNULIB_STRPBRK)|g' \
-	      -e 's|@''GNULIB_STRSEP''@|$(GNULIB_STRSEP)|g' \
-	      -e 's|@''GNULIB_STRSTR''@|$(GNULIB_STRSTR)|g' \
-	      -e 's|@''GNULIB_STRCASESTR''@|$(GNULIB_STRCASESTR)|g' \
-	      -e 's|@''GNULIB_STRTOK_R''@|$(GNULIB_STRTOK_R)|g' \
-	      -e 's|@''GNULIB_STRERROR''@|$(GNULIB_STRERROR)|g' \
-	      -e 's|@''GNULIB_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|g' \
-	      -e 's|@''GNULIB_STRVERSCMP''@|$(GNULIB_STRVERSCMP)|g' \
-	      < $(srcdir)/string.in.h | \
-	  sed -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
-	      -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \
-	      -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
-	      -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
-	      -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
-	      -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \
-	      -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \
-	      -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
-	      -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
-	      -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
-	      -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
-	      -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
-	      -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
-	      -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \
-	      -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
-	      -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
-	      -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
-	      -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
-	      -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \
-	      -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \
-	      -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
-	      -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
-	      -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
-	      -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
-	      -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
-	      -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \
-	      -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \
-	      -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \
-	      -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
-	      -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
-	      -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
-	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
-	      < $(srcdir)/string.in.h; \
-	} > $@-t && \
-	mv $@-t $@
-MOSTLYCLEANFILES += string.h string.h-t
-
-EXTRA_DIST += string.in.h
-
-## end   gnulib module string
-
-## begin gnulib module warn-on-use
-
-BUILT_SOURCES += warn-on-use.h
-# The warn-on-use.h that gets inserted into generated .h files is the same as
-# build-aux/warn-on-use.h, except that it has the copyright header cut off.
-warn-on-use.h: $(top_srcdir)/gnulib/extra/warn-on-use.h
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	sed -n -e '/^.ifndef/,$$p' \
-	  < $(top_srcdir)/gnulib/extra/warn-on-use.h \
-	  > $@-t && \
-	mv $@-t $@
-MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t
-
-WARN_ON_USE_H=warn-on-use.h
-
-EXTRA_DIST += $(top_srcdir)/gnulib/extra/warn-on-use.h
-
-## end   gnulib module warn-on-use
-
-## begin gnulib module wchar
-
-BUILT_SOURCES += wchar.h
-
-# We need the following in order to create <wchar.h> when the system
-# version does not work standalone.
-wchar.h: wchar.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-	  sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-	      -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
-	      -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
-	      -e 's|@''GNULIB_BTOWC''@|$(GNULIB_BTOWC)|g' \
-	      -e 's|@''GNULIB_WCTOB''@|$(GNULIB_WCTOB)|g' \
-	      -e 's|@''GNULIB_MBSINIT''@|$(GNULIB_MBSINIT)|g' \
-	      -e 's|@''GNULIB_MBRTOWC''@|$(GNULIB_MBRTOWC)|g' \
-	      -e 's|@''GNULIB_MBRLEN''@|$(GNULIB_MBRLEN)|g' \
-	      -e 's|@''GNULIB_MBSRTOWCS''@|$(GNULIB_MBSRTOWCS)|g' \
-	      -e 's|@''GNULIB_MBSNRTOWCS''@|$(GNULIB_MBSNRTOWCS)|g' \
-	      -e 's|@''GNULIB_WCRTOMB''@|$(GNULIB_WCRTOMB)|g' \
-	      -e 's|@''GNULIB_WCSRTOMBS''@|$(GNULIB_WCSRTOMBS)|g' \
-	      -e 's|@''GNULIB_WCSNRTOMBS''@|$(GNULIB_WCSNRTOMBS)|g' \
-	      -e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \
-	      -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
-	      -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
-	      -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
-	      -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
-	      -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
-	      -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
-	      -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
-	      -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
-	      -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
-	      -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
-	      -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
-	      -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
-	      -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
-	      -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
-	      -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
-	      -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
-	      -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
-	      -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
-	      -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
-	      -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
-	      -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
-	      -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
-	      -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
-	      -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
-	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
-	    < $(srcdir)/wchar.in.h; \
-	} > $@-t && \
-	mv $@-t $@
-MOSTLYCLEANFILES += wchar.h wchar.h-t
-
-EXTRA_DIST += wchar.in.h
-
-## end   gnulib module wchar
-
-## begin gnulib module dummy
-
-libgnu_a_SOURCES += dummy.c
-
-## end   gnulib module dummy
-
-
-mostlyclean-local: mostlyclean-generic
-	@for dir in '' $(MOSTLYCLEANDIRS); do \
-	  if test -n "$$dir" && test -d $$dir; then \
-	    echo "rmdir $$dir"; rmdir $$dir; \
-	  fi; \
-	done; \
-	:
diff --git a/gdb/gnulib/Makefile.in b/gdb/gnulib/Makefile.in
index 0a2aad1..86814b3 100644
--- a/gdb/gnulib/Makefile.in
+++ b/gdb/gnulib/Makefile.in
@@ -1,1140 +1,285 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
-# @configure_input@
+# Copyright (C) 1989-2012 Free Software Foundation, Inc.
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-# 2004, 2005, 2006, 2007, 2008, 2009, 2011 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
+# This file is part of GDB.
 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-# Copyright (C) 2002-2010 Free Software Foundation, Inc.
+# 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 3 of the License, or
+# (at your option) any later version.
 #
-# This file is free software, distributed under the terms of the GNU
-# General Public License.  As a special exception to the GNU General
-# Public License, this file may be distributed as part of a program
-# that contains a configuration script generated by Autoconf, under
-# the same distribution terms as the rest of that program.
+# 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.
 #
-# Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=gnulib --m4-base=gnulib/m4 --doc-base=doc --tests-base=tests --aux-dir=gnulib/extra --no-libtool --macro-prefix=gl --no-vc-files memmem
-
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+prefix = @prefix@
+exec_prefix = @exec_prefix@
 
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-target_triplet = @target@
-subdir = gnulib
-DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/00gnulib.m4 \
-	$(top_srcdir)/gnulib/m4/extensions.m4 \
-	$(top_srcdir)/gnulib/m4/gnulib-common.m4 \
-	$(top_srcdir)/gnulib/m4/gnulib-comp.m4 \
-	$(top_srcdir)/gnulib/m4/include_next.m4 \
-	$(top_srcdir)/gnulib/m4/longlong.m4 \
-	$(top_srcdir)/gnulib/m4/memchr.m4 \
-	$(top_srcdir)/gnulib/m4/memmem.m4 \
-	$(top_srcdir)/gnulib/m4/mmap-anon.m4 \
-	$(top_srcdir)/gnulib/m4/multiarch.m4 \
-	$(top_srcdir)/gnulib/m4/onceonly.m4 \
-	$(top_srcdir)/gnulib/m4/stddef_h.m4 \
-	$(top_srcdir)/gnulib/m4/stdint.m4 \
-	$(top_srcdir)/gnulib/m4/string_h.m4 \
-	$(top_srcdir)/gnulib/m4/warn-on-use.m4 \
-	$(top_srcdir)/gnulib/m4/wchar_h.m4 \
-	$(top_srcdir)/gnulib/m4/wchar_t.m4 \
-	$(top_srcdir)/gnulib/m4/wint_t.m4 \
-	$(top_srcdir)/../config/largefile.m4 \
-	$(top_srcdir)/../config/lead-dot.m4 \
-	$(top_srcdir)/../config/plugins.m4 $(top_srcdir)/acinclude.m4 \
-	$(top_srcdir)/../bfd/bfd.m4 \
-	$(top_srcdir)/../config/acinclude.m4 \
-	$(top_srcdir)/../config/override.m4 \
-	$(top_srcdir)/../config/gettext-sister.m4 \
-	$(top_srcdir)/../config/lib-ld.m4 \
-	$(top_srcdir)/../config/lib-prefix.m4 \
-	$(top_srcdir)/../config/lib-link.m4 \
-	$(top_srcdir)/../config/acx.m4 $(top_srcdir)/../config/tcl.m4 \
-	$(top_srcdir)/../config/depstand.m4 \
-	$(top_srcdir)/../config/lcmessage.m4 \
-	$(top_srcdir)/../config/codeset.m4 \
-	$(top_srcdir)/../config/zlib.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LIBRARIES = $(noinst_LIBRARIES)
-ARFLAGS = cru
-libgnu_a_AR = $(AR) $(ARFLAGS)
-am__DEPENDENCIES_1 =
-am_libgnu_a_OBJECTS = dummy.$(OBJEXT)
-libgnu_a_OBJECTS = $(am_libgnu_a_OBJECTS)
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/../depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(libgnu_a_SOURCES) $(EXTRA_libgnu_a_SOURCES)
-DIST_SOURCES = $(libgnu_a_SOURCES) $(EXTRA_libgnu_a_SOURCES)
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
-HEADERS = $(noinst_HEADERS)
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMTAR = @AMTAR@
-APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
-BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
-BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
-BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
-BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CONFIG_ALL = @CONFIG_ALL@
-CONFIG_CLEAN = @CONFIG_CLEAN@
-CONFIG_DEPS = @CONFIG_DEPS@
-CONFIG_INSTALL = @CONFIG_INSTALL@
-CONFIG_LDFLAGS = @CONFIG_LDFLAGS@
-CONFIG_OBS = @CONFIG_OBS@
-CONFIG_SRCS = @CONFIG_SRCS@
-CONFIG_UNINSTALL = @CONFIG_UNINSTALL@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEBUGDIR = @DEBUGDIR@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-ENABLE_CFLAGS = @ENABLE_CFLAGS@
-EXEEXT = @EXEEXT@
-GDBTKLIBS = @GDBTKLIBS@
-GDBTK_CFLAGS = @GDBTK_CFLAGS@
-GDBTK_SRC_DIR = @GDBTK_SRC_DIR@
-GDB_DATADIR = @GDB_DATADIR@
-GDB_NM_FILE = @GDB_NM_FILE@
-GENCAT = @GENCAT@
-GMSGFMT = @GMSGFMT@
-GNULIB_BTOWC = @GNULIB_BTOWC@
-GNULIB_MBRLEN = @GNULIB_MBRLEN@
-GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
-GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
-GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
-GNULIB_MBSCHR = @GNULIB_MBSCHR@
-GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
-GNULIB_MBSINIT = @GNULIB_MBSINIT@
-GNULIB_MBSLEN = @GNULIB_MBSLEN@
-GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
-GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
-GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
-GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
-GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
-GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
-GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
-GNULIB_MBSSEP = @GNULIB_MBSSEP@
-GNULIB_MBSSPN = @GNULIB_MBSSPN@
-GNULIB_MBSSTR = @GNULIB_MBSSTR@
-GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
-GNULIB_MEMCHR = @GNULIB_MEMCHR@
-GNULIB_MEMMEM = @GNULIB_MEMMEM@
-GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
-GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
-GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
-GNULIB_STDINT_H = @GNULIB_STDINT_H@
-GNULIB_STPCPY = @GNULIB_STPCPY@
-GNULIB_STPNCPY = @GNULIB_STPNCPY@
-GNULIB_STRCASESTR = @GNULIB_STRCASESTR@
-GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@
-GNULIB_STRDUP = @GNULIB_STRDUP@
-GNULIB_STRERROR = @GNULIB_STRERROR@
-GNULIB_STRNCAT = @GNULIB_STRNCAT@
-GNULIB_STRNDUP = @GNULIB_STRNDUP@
-GNULIB_STRNLEN = @GNULIB_STRNLEN@
-GNULIB_STRPBRK = @GNULIB_STRPBRK@
-GNULIB_STRSEP = @GNULIB_STRSEP@
-GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
-GNULIB_STRSTR = @GNULIB_STRSTR@
-GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
-GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
-GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
-GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
-GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
-GNULIB_WCTOB = @GNULIB_WCTOB@
-GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
-GREP = @GREP@
-GUI_CFLAGS_X = @GUI_CFLAGS_X@
-HAVE_BTOWC = @HAVE_BTOWC@
-HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
-HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
-HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
-HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
-HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
-HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
-HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
-HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
-HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
-HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
-HAVE_LIBEXPAT = @HAVE_LIBEXPAT@
-HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
-HAVE_MBRLEN = @HAVE_MBRLEN@
-HAVE_MBRTOWC = @HAVE_MBRTOWC@
-HAVE_MBSINIT = @HAVE_MBSINIT@
-HAVE_MBSLEN = @HAVE_MBSLEN@
-HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
-HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
-HAVE_MEMCHR = @HAVE_MEMCHR@
-HAVE_MEMPCPY = @HAVE_MEMPCPY@
-HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
-HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
-HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
-HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
-HAVE_STDINT_H = @HAVE_STDINT_H@
-HAVE_STPCPY = @HAVE_STPCPY@
-HAVE_STPNCPY = @HAVE_STPNCPY@
-HAVE_STRCASESTR = @HAVE_STRCASESTR@
-HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
-HAVE_STRPBRK = @HAVE_STRPBRK@
-HAVE_STRSEP = @HAVE_STRSEP@
-HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
-HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
-HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
-HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
-HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
-HAVE_WCHAR_H = @HAVE_WCHAR_H@
-HAVE_WCHAR_T = @HAVE_WCHAR_T@
-HAVE_WCRTOMB = @HAVE_WCRTOMB@
-HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
-HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
-HAVE_WINT_T = @HAVE_WINT_T@
-INCINTL = @INCINTL@
-INCLUDE_NEXT = @INCLUDE_NEXT@
-INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-LDFLAGS = @LDFLAGS@
-LIBEXPAT = @LIBEXPAT@
-LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
-LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
-LIBGUI = @LIBGUI@
-LIBINTL = @LIBINTL@
-LIBINTL_DEP = @LIBINTL_DEP@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LN_S = @LN_S@
-LTLIBEXPAT = @LTLIBEXPAT@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKE = @MAKE@
-MAKEINFO = @MAKEINFO@
-MIG = @MIG@
-MKDIR_P = @MKDIR_P@
-NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
-NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
-NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
-NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
-NEXT_STDDEF_H = @NEXT_STDDEF_H@
-NEXT_STDINT_H = @NEXT_STDINT_H@
-NEXT_STRING_H = @NEXT_STRING_H@
-NEXT_WCHAR_H = @NEXT_WCHAR_H@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKGVERSION = @PKGVERSION@
-POSUB = @POSUB@
-PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
-PROFILE_CFLAGS = @PROFILE_CFLAGS@
-PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
-PYTHON_CFLAGS = @PYTHON_CFLAGS@
-RANLIB = @RANLIB@
-READLINE = @READLINE@
-READLINE_CFLAGS = @READLINE_CFLAGS@
-READLINE_DEPS = @READLINE_DEPS@
-REPLACE_BTOWC = @REPLACE_BTOWC@
-REPLACE_MBRLEN = @REPLACE_MBRLEN@
-REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
-REPLACE_MBSINIT = @REPLACE_MBSINIT@
-REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
-REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
-REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
-REPLACE_MEMCHR = @REPLACE_MEMCHR@
-REPLACE_MEMMEM = @REPLACE_MEMMEM@
-REPLACE_NULL = @REPLACE_NULL@
-REPLACE_STPNCPY = @REPLACE_STPNCPY@
-REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
-REPLACE_STRDUP = @REPLACE_STRDUP@
-REPLACE_STRERROR = @REPLACE_STRERROR@
-REPLACE_STRNCAT = @REPLACE_STRNCAT@
-REPLACE_STRNDUP = @REPLACE_STRNDUP@
-REPLACE_STRNLEN = @REPLACE_STRNLEN@
-REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
-REPLACE_STRSTR = @REPLACE_STRSTR@
-REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
-REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
-REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
-REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
-REPLACE_WCTOB = @REPLACE_WCTOB@
-REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
-REPORT_BUGS_TEXI = @REPORT_BUGS_TEXI@
-REPORT_BUGS_TO = @REPORT_BUGS_TO@
-SER_HARDWIRE = @SER_HARDWIRE@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
-SIM = @SIM@
-SIM_OBS = @SIM_OBS@
-SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
-STDDEF_H = @STDDEF_H@
-STDINT_H = @STDINT_H@
-STRIP = @STRIP@
-SYSTEM_GDBINIT = @SYSTEM_GDBINIT@
-TARGET_OBS = @TARGET_OBS@
-TARGET_SYSTEM_ROOT = @TARGET_SYSTEM_ROOT@
-TARGET_SYSTEM_ROOT_DEFINE = @TARGET_SYSTEM_ROOT_DEFINE@
-TCL_BIN_DIR = @TCL_BIN_DIR@
-TCL_DEPS = @TCL_DEPS@
-TCL_INCLUDE = @TCL_INCLUDE@
-TCL_LIBRARY = @TCL_LIBRARY@
-TCL_LIB_FILE = @TCL_LIB_FILE@
-TCL_LIB_FLAG = @TCL_LIB_FLAG@
-TCL_LIB_SPEC = @TCL_LIB_SPEC@
-TCL_PATCH_LEVEL = @TCL_PATCH_LEVEL@
-TCL_SRC_DIR = @TCL_SRC_DIR@
-TCL_STUB_LIB_FILE = @TCL_STUB_LIB_FILE@
-TCL_STUB_LIB_FLAG = @TCL_STUB_LIB_FLAG@
-TCL_STUB_LIB_SPEC = @TCL_STUB_LIB_SPEC@
-TCL_VERSION = @TCL_VERSION@
-TK_BIN_DIR = @TK_BIN_DIR@
-TK_DEPS = @TK_DEPS@
-TK_INCLUDE = @TK_INCLUDE@
-TK_LIBRARY = @TK_LIBRARY@
-TK_LIB_FILE = @TK_LIB_FILE@
-TK_LIB_FLAG = @TK_LIB_FLAG@
-TK_LIB_SPEC = @TK_LIB_SPEC@
-TK_SRC_DIR = @TK_SRC_DIR@
-TK_STUB_LIB_FILE = @TK_STUB_LIB_FILE@
-TK_STUB_LIB_FLAG = @TK_STUB_LIB_FLAG@
-TK_STUB_LIB_SPEC = @TK_STUB_LIB_SPEC@
-TK_VERSION = @TK_VERSION@
-TK_XINCLUDES = @TK_XINCLUDES@
-UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
-USE_NLS = @USE_NLS@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
-WERROR_CFLAGS = @WERROR_CFLAGS@
-WIN32LDAPP = @WIN32LDAPP@
-WIN32LIBS = @WIN32LIBS@
-WINDRES = @WINDRES@
-WINT_T_SUFFIX = @WINT_T_SUFFIX@
-XGETTEXT = @XGETTEXT@
-XMKMF = @XMKMF@
-X_CFLAGS = @X_CFLAGS@
-X_LDFLAGS = @X_LDFLAGS@
-X_LIBS = @X_LIBS@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
+host_alias = @host_alias@
+target_alias = @target_alias@
+program_transform_name = @program_transform_name@
 bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
+libdir = @libdir@
+tooldir = $(libdir)/$(target_alias)
+
 datadir = @datadir@
+localedir = @localedir@
+mandir = @mandir@
+man1dir = $(mandir)/man1
+man2dir = $(mandir)/man2
+man3dir = $(mandir)/man3
+man4dir = $(mandir)/man4
+man5dir = $(mandir)/man5
+man6dir = $(mandir)/man6
+man7dir = $(mandir)/man7
+man8dir = $(mandir)/man8
+man9dir = $(mandir)/man9
+infodir = @infodir@
 datarootdir = @datarootdir@
 docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-frags = @frags@
-gl_LIBOBJS = @gl_LIBOBJS@
-gl_LTLIBOBJS = @gl_LTLIBOBJS@
-gltests_LIBOBJS = @gltests_LIBOBJS@
-gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
-gltests_WITNESS = @gltests_WITNESS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
 htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-subdirs = @subdirs@
-sysconfdir = @sysconfdir@
-target = @target@
-target_alias = @target_alias@
-target_cpu = @target_cpu@
-target_os = @target_os@
-target_subdir = @target_subdir@
-target_vendor = @target_vendor@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AUTOMAKE_OPTIONS = 1.5 gnits
-SUBDIRS = 
-noinst_HEADERS = 
-noinst_LIBRARIES = libgnu.a
-noinst_LTLIBRARIES = 
-EXTRA_DIST = m4/gnulib-cache.m4 \
-	$(top_srcdir)/gnulib/extra/arg-nonnull.h \
-	$(top_srcdir)/gnulib/extra/c++defs.h memchr.c memchr.valgrind \
-	memmem.c str-two-way.h stddef.in.h stdint.in.h string.in.h \
-	$(top_srcdir)/gnulib/extra/warn-on-use.h wchar.in.h
-
-# The BUILT_SOURCES created by this Makefile snippet are not used via #include
-# statements but through direct file reference. Therefore this snippet must be
-# present in all Makefile.am that need it. This is ensured by the applicability
-# 'all' defined above.
-
-# The BUILT_SOURCES created by this Makefile snippet are not used via #include
-# statements but through direct file reference. Therefore this snippet must be
-# present in all Makefile.am that need it. This is ensured by the applicability
-# 'all' defined above.
-BUILT_SOURCES = arg-nonnull.h c++defs.h $(STDDEF_H) $(STDINT_H) \
-	string.h warn-on-use.h wchar.h
-SUFFIXES = 
-MOSTLYCLEANFILES = core *.stackdump arg-nonnull.h arg-nonnull.h-t \
-	c++defs.h c++defs.h-t stddef.h stddef.h-t stdint.h stdint.h-t \
-	string.h string.h-t warn-on-use.h warn-on-use.h-t wchar.h \
-	wchar.h-t
-MOSTLYCLEANDIRS = 
-CLEANFILES = 
-DISTCLEANFILES = 
-MAINTAINERCLEANFILES = 
-AM_CPPFLAGS = 
-AM_CFLAGS = 
-libgnu_a_SOURCES = dummy.c
-libgnu_a_LIBADD = $(gl_LIBOBJS)
-libgnu_a_DEPENDENCIES = $(gl_LIBOBJS)
-EXTRA_libgnu_a_SOURCES = memchr.c memmem.c
-ARG_NONNULL_H = arg-nonnull.h
-CXXDEFS_H = c++defs.h
-WARN_ON_USE_H = warn-on-use.h
-all: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) all-recursive
-
-.SUFFIXES:
-.SUFFIXES: .c .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits gnulib/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnits gnulib/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLIBRARIES:
-	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-libgnu.a: $(libgnu_a_OBJECTS) $(libgnu_a_DEPENDENCIES) 
-	-rm -f libgnu.a
-	$(libgnu_a_AR) libgnu.a $(libgnu_a_OBJECTS) $(libgnu_a_LIBADD)
-	$(RANLIB) libgnu.a
-
-clean-noinstLTLIBRARIES:
-	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
-	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-	  test "$$dir" != "$$p" || dir=.; \
-	  echo "rm -f \"$${dir}/so_locations\""; \
-	  rm -f "$${dir}/so_locations"; \
-	done
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dummy.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/memchr.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/memmem.Po at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-	@failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
+includedir = @includedir@
 
-$(RECURSIVE_CLEAN_TARGETS):
-	@failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
+SHELL = @SHELL@
+EXEEXT = @EXEEXT@
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
 
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
+DESTDIR =
 
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
+AR = @AR@
+AR_FLAGS = qv
+RANLIB = @RANLIB@
+DLLTOOL = @DLLTOOL@
 
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+SUBDIRS = import
+CLEANDIRS = $(SUBDIRS)
+REQUIRED_SUBDIRS = $(SUBDIRS)
 
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) check-recursive
-all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS)
-installdirs: installdirs-recursive
-installdirs-am:
-install: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
+# If you are compiling with GCC, make sure that either 1) You have the
+# fixed include files where GCC can reach them, or 2) You use the
+# -traditional flag.  Otherwise the ioctl calls in inflow.c
+# will be incorrectly compiled.  The "fixincludes" script in the gcc
+# distribution will fix your include files up.
+CC=@CC@
 
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+# Directory containing source files.
+srcdir = @srcdir@
+VPATH = @srcdir@
 
-installcheck: installcheck-recursive
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+CC_LD=$(CC)
 
-clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+# CFLAGS is specifically reserved for setting from the command line
+# when running make.  I.E.  "make CFLAGS=-Wmissing-prototypes".
+CFLAGS = @CFLAGS@
 
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+# LDFLAGS is specifically reserved for setting from the command line
+# when running make.
+LDFLAGS = @LDFLAGS@
 
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
+FLAGS_TO_PASS = \
+	"prefix=$(prefix)" \
+	"exec_prefix=$(exec_prefix)" \
+	"infodir=$(infodir)" \
+	"datarootdir=$(datarootdir)" \
+	"docdir=$(docdir)" \
+	"htmldir=$(htmldir)" \
+	"pdfdir=$(pdfdir)" \
+	"libdir=$(libdir)" \
+	"mandir=$(mandir)" \
+	"datadir=$(datadir)" \
+	"includedir=$(includedir)" \
+	"against=$(against)" \
+	"DESTDIR=$(DESTDIR)" \
+	"AR=$(AR)" \
+	"AR_FLAGS=$(AR_FLAGS)" \
+	"CC=$(CC)" \
+	"CFLAGS=$(CFLAGS)" \
+	"CXX=$(CXX)" \
+	"CXXFLAGS=$(CXXFLAGS)" \
+	"DLLTOOL=$(DLLTOOL)" \
+	"LDFLAGS=$(LDFLAGS)" \
+	"RANLIB=$(RANLIB)" \
+	"MAKEINFO=$(MAKEINFO)" \
+	"MAKEINFOFLAGS=$(MAKEINFOFLAGS)" \
+	"MAKEINFO_EXTRA_FLAGS=$(MAKEINFO_EXTRA_FLAGS)" \
+	"MAKEHTML=$(MAKEHTML)" \
+	"MAKEHTMLFLAGS=$(MAKEHTMLFLAGS)" \
+	"INSTALL=$(INSTALL)" \
+	"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
+	"INSTALL_DATA=$(INSTALL_DATA)" \
+	"RUNTEST=$(RUNTEST)" \
+	"RUNTESTFLAGS=$(RUNTESTFLAGS)"
+
+all installcheck check info install-info clean-info dvi pdf install-pdf html install-html: force
+	@$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do
+
+# Traditionally "install" depends on "all".  But it may be useful
+# not to; for example, if the user has made some trivial change to a
+# source file and doesn't care about rebuilding or just wants to save the
+# time it takes for make to check that all is up to date.
+# install-only is intended to address that need.
+install: all
+	@$(MAKE) $(FLAGS_TO_PASS) install-only
+
+install-only: $(CONFIG_INSTALL)
+	@$(MAKE) DO=install "DODIRS=$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do
+
+uninstall: force $(CONFIG_UNINSTALL)
+	@$(MAKE) DO=uninstall "DODIRS=$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do
+
+# Convenience rule to handle recursion.
+$(LIBGNU) $(GNULIB_H): all-lib
+all-lib: import/Makefile
+	@$(MAKE) $(FLAGS_TO_PASS) DO=all DODIRS=import subdir_do
+.PHONY: all-lib
+
+clean mostlyclean: $(CONFIG_CLEAN)
+	@$(MAKE) $(FLAGS_TO_PASS) DO=clean "DODIRS=$(CLEANDIRS)" subdir_do
+
+distclean: clean
+	@$(MAKE) $(FLAGS_TO_PASS) DO=distclean "DODIRS=$(CLEANDIRS)" subdir_do
+	rm -f config.status config.h stamp-h
+	rm -f config.log config.cache
+	rm -f Makefile
+	rm -rf $(DEPDIR)
+
+maintainer-clean: local-maintainer-clean do-maintainer-clean distclean
+realclean: maintainer-clean
+
+local-maintainer-clean:
+	@echo "This command is intended for maintainers to use;"
 	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-recursive
-
-clean-am: clean-generic clean-noinstLIBRARIES clean-noinstLTLIBRARIES \
-	mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-local
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
-	ctags-recursive install install-am install-strip \
-	tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am check check-am clean clean-generic \
-	clean-noinstLIBRARIES clean-noinstLTLIBRARIES ctags \
-	ctags-recursive distclean distclean-compile distclean-generic \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	installdirs-am maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-compile mostlyclean-generic \
-	mostlyclean-local pdf pdf-am ps ps-am tags tags-recursive \
-	uninstall uninstall-am
-
-# The arg-nonnull.h that gets inserted into generated .h files is the same as
-# build-aux/arg-nonnull.h, except that it has the copyright header cut off.
-arg-nonnull.h: $(top_srcdir)/gnulib/extra/arg-nonnull.h
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	sed -n -e '/GL_ARG_NONNULL/,$$p' \
-	  < $(top_srcdir)/gnulib/extra/arg-nonnull.h \
-	  > $@-t && \
-	mv $@-t $@
-# The c++defs.h that gets inserted into generated .h files is the same as
-# build-aux/c++defs.h, except that it has the copyright header cut off.
-c++defs.h: $(top_srcdir)/gnulib/extra/c++defs.h
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	sed -n -e '/_GL_CXXDEFS/,$$p' \
-	  < $(top_srcdir)/gnulib/extra/c++defs.h \
-	  > $@-t && \
-	mv $@-t $@
-
-# We need the following in order to create <stddef.h> when the system
-# doesn't have one that works with the given compiler.
-stddef.h: stddef.in.h
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-	  sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-	      -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
-	      -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
-	      -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
-	      < $(srcdir)/stddef.in.h; \
-	} > $@-t && \
-	mv $@-t $@
-
-# We need the following in order to create <stdint.h> when the system
-# doesn't have one that works with the given compiler.
-stdint.h: stdint.in.h
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-	  sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
-	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-	      -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
-	      -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
-	      -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
-	      -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
-	      -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
-	      -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
-	      -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
-	      -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
-	      -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
-	      -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
-	      -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
-	      -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
-	      -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
-	      -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
-	      -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
-	      -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
-	      -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
-	      -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
-	      -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
-	      -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
-	      -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
-	      < $(srcdir)/stdint.in.h; \
-	} > $@-t && \
-	mv $@-t $@
-
-# We need the following in order to create <string.h> when the system
-# doesn't have one that works with the given compiler.
-string.h: string.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-	  sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-	      -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
-	      -e 's|@''GNULIB_MBSLEN''@|$(GNULIB_MBSLEN)|g' \
-	      -e 's|@''GNULIB_MBSNLEN''@|$(GNULIB_MBSNLEN)|g' \
-	      -e 's|@''GNULIB_MBSCHR''@|$(GNULIB_MBSCHR)|g' \
-	      -e 's|@''GNULIB_MBSRCHR''@|$(GNULIB_MBSRCHR)|g' \
-	      -e 's|@''GNULIB_MBSSTR''@|$(GNULIB_MBSSTR)|g' \
-	      -e 's|@''GNULIB_MBSCASECMP''@|$(GNULIB_MBSCASECMP)|g' \
-	      -e 's|@''GNULIB_MBSNCASECMP''@|$(GNULIB_MBSNCASECMP)|g' \
-	      -e 's|@''GNULIB_MBSPCASECMP''@|$(GNULIB_MBSPCASECMP)|g' \
-	      -e 's|@''GNULIB_MBSCASESTR''@|$(GNULIB_MBSCASESTR)|g' \
-	      -e 's|@''GNULIB_MBSCSPN''@|$(GNULIB_MBSCSPN)|g' \
-	      -e 's|@''GNULIB_MBSPBRK''@|$(GNULIB_MBSPBRK)|g' \
-	      -e 's|@''GNULIB_MBSSPN''@|$(GNULIB_MBSSPN)|g' \
-	      -e 's|@''GNULIB_MBSSEP''@|$(GNULIB_MBSSEP)|g' \
-	      -e 's|@''GNULIB_MBSTOK_R''@|$(GNULIB_MBSTOK_R)|g' \
-	      -e 's|@''GNULIB_MEMCHR''@|$(GNULIB_MEMCHR)|g' \
-	      -e 's|@''GNULIB_MEMMEM''@|$(GNULIB_MEMMEM)|g' \
-	      -e 's|@''GNULIB_MEMPCPY''@|$(GNULIB_MEMPCPY)|g' \
-	      -e 's|@''GNULIB_MEMRCHR''@|$(GNULIB_MEMRCHR)|g' \
-	      -e 's|@''GNULIB_RAWMEMCHR''@|$(GNULIB_RAWMEMCHR)|g' \
-	      -e 's|@''GNULIB_STPCPY''@|$(GNULIB_STPCPY)|g' \
-	      -e 's|@''GNULIB_STPNCPY''@|$(GNULIB_STPNCPY)|g' \
-	      -e 's|@''GNULIB_STRCHRNUL''@|$(GNULIB_STRCHRNUL)|g' \
-	      -e 's|@''GNULIB_STRDUP''@|$(GNULIB_STRDUP)|g' \
-	      -e 's|@''GNULIB_STRNCAT''@|$(GNULIB_STRNCAT)|g' \
-	      -e 's|@''GNULIB_STRNDUP''@|$(GNULIB_STRNDUP)|g' \
-	      -e 's|@''GNULIB_STRNLEN''@|$(GNULIB_STRNLEN)|g' \
-	      -e 's|@''GNULIB_STRPBRK''@|$(GNULIB_STRPBRK)|g' \
-	      -e 's|@''GNULIB_STRSEP''@|$(GNULIB_STRSEP)|g' \
-	      -e 's|@''GNULIB_STRSTR''@|$(GNULIB_STRSTR)|g' \
-	      -e 's|@''GNULIB_STRCASESTR''@|$(GNULIB_STRCASESTR)|g' \
-	      -e 's|@''GNULIB_STRTOK_R''@|$(GNULIB_STRTOK_R)|g' \
-	      -e 's|@''GNULIB_STRERROR''@|$(GNULIB_STRERROR)|g' \
-	      -e 's|@''GNULIB_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|g' \
-	      -e 's|@''GNULIB_STRVERSCMP''@|$(GNULIB_STRVERSCMP)|g' \
-	      < $(srcdir)/string.in.h | \
-	  sed -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
-	      -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \
-	      -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
-	      -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
-	      -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
-	      -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \
-	      -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \
-	      -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
-	      -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
-	      -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
-	      -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
-	      -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
-	      -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
-	      -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \
-	      -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
-	      -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
-	      -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
-	      -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
-	      -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \
-	      -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \
-	      -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
-	      -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
-	      -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
-	      -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
-	      -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
-	      -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \
-	      -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \
-	      -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \
-	      -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
-	      -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
-	      -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
-	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
-	      < $(srcdir)/string.in.h; \
-	} > $@-t && \
-	mv $@-t $@
-# The warn-on-use.h that gets inserted into generated .h files is the same as
-# build-aux/warn-on-use.h, except that it has the copyright header cut off.
-warn-on-use.h: $(top_srcdir)/gnulib/extra/warn-on-use.h
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	sed -n -e '/^.ifndef/,$$p' \
-	  < $(top_srcdir)/gnulib/extra/warn-on-use.h \
-	  > $@-t && \
-	mv $@-t $@
+	rm -f config.status
+
+do-maintainer-clean:
+	@$(MAKE) $(FLAGS_TO_PASS) DO=maintainer-clean "DODIRS=$(CLEANDIRS)" \
+		subdir_do
+
+subdir_do: force
+	@for i in $(DODIRS); do \
+		case $$i in \
+		$(REQUIRED_SUBDIRS)) \
+			if [ ! -f ./$$i/Makefile ] ; then \
+				echo "Missing $$i/Makefile" >&2 ; \
+				exit 1 ; \
+			fi ;; \
+		esac ; \
+		if [ -f ./$$i/Makefile ] ; then \
+			if (cd ./$$i; \
+				$(MAKE) $(FLAGS_TO_PASS) $(DO)) ; then true ; \
+			else exit 1 ; fi ; \
+		else true ; fi ; \
+	done
 
-# We need the following in order to create <wchar.h> when the system
-# version does not work standalone.
-wchar.h: wchar.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-	  sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-	      -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
-	      -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
-	      -e 's|@''GNULIB_BTOWC''@|$(GNULIB_BTOWC)|g' \
-	      -e 's|@''GNULIB_WCTOB''@|$(GNULIB_WCTOB)|g' \
-	      -e 's|@''GNULIB_MBSINIT''@|$(GNULIB_MBSINIT)|g' \
-	      -e 's|@''GNULIB_MBRTOWC''@|$(GNULIB_MBRTOWC)|g' \
-	      -e 's|@''GNULIB_MBRLEN''@|$(GNULIB_MBRLEN)|g' \
-	      -e 's|@''GNULIB_MBSRTOWCS''@|$(GNULIB_MBSRTOWCS)|g' \
-	      -e 's|@''GNULIB_MBSNRTOWCS''@|$(GNULIB_MBSNRTOWCS)|g' \
-	      -e 's|@''GNULIB_WCRTOMB''@|$(GNULIB_WCRTOMB)|g' \
-	      -e 's|@''GNULIB_WCSRTOMBS''@|$(GNULIB_WCSRTOMBS)|g' \
-	      -e 's|@''GNULIB_WCSNRTOMBS''@|$(GNULIB_WCSNRTOMBS)|g' \
-	      -e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \
-	      -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
-	      -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
-	      -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
-	      -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
-	      -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
-	      -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
-	      -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
-	      -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
-	      -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
-	      -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
-	      -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
-	      -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
-	      -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
-	      -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
-	      -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
-	      -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
-	      -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
-	      -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
-	      -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
-	      -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
-	      -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
-	      -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
-	      -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
-	      -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
-	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
-	    < $(srcdir)/wchar.in.h; \
-	} > $@-t && \
-	mv $@-t $@
+Makefile: Makefile.in config.status
+	# Regenerate the Makefile.
+	CONFIG_FILES="Makefile" \
+	  CONFIG_COMMANDS= \
+	  CONFIG_HEADERS= \
+	  $(SHELL) config.status
+
+gnulib/Makefile: gnulib/Makefile.in config.status
+	CONFIG_FILES="gnulib/Makefile" \
+	  CONFIG_COMMANDS="depfiles" \
+	  CONFIG_HEADERS= \
+	  CONFIG_LINKS= \
+	  $(SHELL) config.status
+
+config.h: stamp-h ; @true
+stamp-h: $(srcdir)/config.in config.status
+	CONFIG_HEADERS=config.h:config.in \
+	  CONFIG_COMMANDS="default depdir" \
+	  CONFIG_FILES= \
+	  CONFIG_LINKS= \
+	  $(SHELL) config.status
+
+config.status: $(srcdir)/configure
+	$(SHELL) config.status --recheck
+
+ACLOCAL = aclocal
+ACLOCAL_AMFLAGS = -I import/m4 -I ../../config
+aclocal_m4_deps = \
+	configure.ac \
+	import/m4/00gnulib.m4 \
+	import/m4/alloca.m4 \
+	import/m4/codeset.m4 \
+	import/m4/configmake.m4 \
+	import/m4/extensions.m4 \
+	import/m4/fcntl-o.m4 \
+	import/m4/fnmatch.m4 \
+	import/m4/glibc21.m4 \
+	import/m4/gnulib-cache.m4 \
+	import/m4/gnulib-common.m4 \
+	import/m4/gnulib-comp.m4 \
+	import/m4/gnulib-tool.m4 \
+	import/m4/include_next.m4 \
+	import/m4/inttypes-pri.m4 \
+	import/m4/inttypes.m4 \
+	import/m4/localcharset.m4 \
+	import/m4/locale-fr.m4 \
+	import/m4/locale-ja.m4 \
+	import/m4/locale-zh.m4 \
+	import/m4/longlong.m4 \
+	import/m4/mbrtowc.m4 \
+	import/m4/mbsinit.m4 \
+	import/m4/mbsrtowcs.m4 \
+	import/m4/mbstate_t.m4 \
+	import/m4/memchr.m4 \
+	import/m4/memmem.m4 \
+	import/m4/mmap-anon.m4 \
+	import/m4/multiarch.m4 \
+	import/m4/onceonly.m4 \
+	import/m4/stdbool.m4 \
+	import/m4/stddef_h.m4 \
+	import/m4/stdint.m4 \
+	import/m4/string_h.m4 \
+	import/m4/warn-on-use.m4 \
+	import/m4/wchar_h.m4 \
+	import/m4/wchar_t.m4 \
+	import/m4/wctype_h.m4 \
+	import/m4/wint_t.m4
+
+$(srcdir)/aclocal.m4: @MAINTAINER_MODE_TRUE@ $(aclocal_m4_deps)
+	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+AUTOCONF = autoconf
+configure_deps = $(srcdir)/configure.ac $(srcdir)/aclocal.m4
+$(srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(configure_deps)
+	cd $(srcdir) && $(AUTOCONF)
+
+AUTOHEADER = autoheader
+$(srcdir)/config.in: @MAINTAINER_MODE_TRUE@ $(configure_deps)
+	cd $(srcdir) && $(AUTOHEADER)
+	rm -f stamp-h
+	touch $@
+
+# automatic rebuilding in automake-generated Makefiles requires
+# this rule in the toplevel Makefile, which, with GNU make, causes
+# the desired updates through the implicit regeneration of the Makefile
+# and all of its prerequisites.
+am--refresh:
+	@:
+
+force:
+
+force_update:
+
+# GNU Make has an annoying habit of putting *all* the Makefile variables
+# into the environment, unless you include this target as a circumvention.
+# Rumor is that this will be fixed (and this target can be removed)
+# in GNU Make 4.0.
+.NOEXPORT:
 
-mostlyclean-local: mostlyclean-generic
-	@for dir in '' $(MOSTLYCLEANDIRS); do \
-	  if test -n "$$dir" && test -d $$dir; then \
-	    echo "rmdir $$dir"; rmdir $$dir; \
-	  fi; \
-	done; \
-	:
+# GNU Make 3.63 has a different problem: it keeps tacking command line
+# overrides onto the definition of $(MAKE).  This variable setting
+# will remove them.
+MAKEOVERRIDES=
 
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
+### end of the libgnu Makefile.in.
diff --git a/gdb/gnulib/aclocal.m4 b/gdb/gnulib/aclocal.m4
new file mode 100644
index 0000000..ead4506
--- /dev/null
+++ b/gdb/gnulib/aclocal.m4
@@ -0,0 +1,1050 @@
+# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.64],,
+[m4_warning([this file was generated for autoconf 2.64.
+You have another version of autoconf.  It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.11'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.11.1], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.11.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# This was merged into AC_PROG_CC in Autoconf.
+
+AU_DEFUN([AM_PROG_CC_STDC],
+[AC_PROG_CC
+AC_DIAGNOSE([obsolete], [$0:
+	your code should no longer depend upon `am_cv_prog_cc_stdc', but upon
+	`ac_cv_prog_cc_stdc'.  Remove this warning and the assignment when
+	you adjust the code.  You can also remove the above call to
+	AC_PROG_CC if you already called it elsewhere.])
+am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc
+])
+AU_DEFUN([fp_PROG_CC_STDC])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 10
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  am__universal=false
+  m4_case([$1], [CC],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac],
+    [CXX],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac])
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 5
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`AS_DIRNAME("$mf")`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`AS_DIRNAME(["$file"])`
+      AS_MKDIR_P([$dirpart/$fdir])
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 16
+
+# 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.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+	      [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+			     [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+		  [_AM_DEPENDENCIES(CC)],
+		  [define([AC_PROG_CC],
+			  defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+		  [_AM_DEPENDENCIES(CXX)],
+		  [define([AC_PROG_CXX],
+			  defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+		  [_AM_DEPENDENCIES(OBJC)],
+		  [define([AC_PROG_OBJC],
+			  defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless `enable' is passed literally.
+# For symmetry, `disable' may be passed as well.  Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+       [enable], [m4_define([am_maintainer_other], [disable])],
+       [disable], [m4_define([am_maintainer_other], [enable])],
+       [m4_define([am_maintainer_other], [enable])
+        m4_warn([syntax], [unexpected argument to AM@&t at _MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles])
+  dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+  AC_ARG_ENABLE([maintainer-mode],
+[  --][am_maintainer_other][-maintainer-mode  am_maintainer_other make rules and dependencies not useful
+			  (and sometimes confusing) to the casual installer],
+      [USE_MAINTAINER_MODE=$enableval],
+      [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+  AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+  MAINT=$MAINTAINER_MODE_TRUE
+  AC_SUBST([MAINT])dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes.	            -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+  [[\\/$]]* | ?:[[\\/]]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[[\\\"\#\$\&\'\`$am_lf]]*)
+    AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+  *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
+    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([import/m4/00gnulib.m4])
+m4_include([import/m4/alloca.m4])
+m4_include([import/m4/codeset.m4])
+m4_include([import/m4/configmake.m4])
+m4_include([import/m4/extensions.m4])
+m4_include([import/m4/fcntl-o.m4])
+m4_include([import/m4/fnmatch.m4])
+m4_include([import/m4/glibc21.m4])
+m4_include([import/m4/gnulib-common.m4])
+m4_include([import/m4/gnulib-comp.m4])
+m4_include([import/m4/include_next.m4])
+m4_include([import/m4/inttypes-pri.m4])
+m4_include([import/m4/inttypes.m4])
+m4_include([import/m4/localcharset.m4])
+m4_include([import/m4/locale-fr.m4])
+m4_include([import/m4/locale-ja.m4])
+m4_include([import/m4/locale-zh.m4])
+m4_include([import/m4/longlong.m4])
+m4_include([import/m4/mbrtowc.m4])
+m4_include([import/m4/mbsinit.m4])
+m4_include([import/m4/mbsrtowcs.m4])
+m4_include([import/m4/mbstate_t.m4])
+m4_include([import/m4/memchr.m4])
+m4_include([import/m4/memmem.m4])
+m4_include([import/m4/mmap-anon.m4])
+m4_include([import/m4/multiarch.m4])
+m4_include([import/m4/onceonly.m4])
+m4_include([import/m4/stdbool.m4])
+m4_include([import/m4/stddef_h.m4])
+m4_include([import/m4/stdint.m4])
+m4_include([import/m4/string_h.m4])
+m4_include([import/m4/warn-on-use.m4])
+m4_include([import/m4/wchar_h.m4])
+m4_include([import/m4/wchar_t.m4])
+m4_include([import/m4/wctype_h.m4])
+m4_include([import/m4/wint_t.m4])
diff --git a/gdb/gnulib/config.in b/gdb/gnulib/config.in
new file mode 100644
index 0000000..7d97b4b
--- /dev/null
+++ b/gdb/gnulib/config.in
@@ -0,0 +1,592 @@
+/* config.in.  Generated from configure.ac by autoheader.  */
+
+/* Define to the number of bits in type 'ptrdiff_t'. */
+#undef BITSIZEOF_PTRDIFF_T
+
+/* Define to the number of bits in type 'sig_atomic_t'. */
+#undef BITSIZEOF_SIG_ATOMIC_T
+
+/* Define to the number of bits in type 'size_t'. */
+#undef BITSIZEOF_SIZE_T
+
+/* Define to the number of bits in type 'wchar_t'. */
+#undef BITSIZEOF_WCHAR_T
+
+/* Define to the number of bits in type 'wint_t'. */
+#undef BITSIZEOF_WINT_T
+
+/* Define to one of '_getb67', 'GETB67', 'getb67' for Cray-2 and Cray-YMP
+   systems. This function is required for 'alloca.c' support on those systems.
+   */
+#undef CRAY_STACKSEG_END
+
+/* Define to 1 if using 'alloca.c'. */
+#undef C_ALLOCA
+
+/* Define to 1 when the gnulib module mbrtowc should be tested. */
+#undef GNULIB_TEST_MBRTOWC
+
+/* Define to 1 when the gnulib module mbsinit should be tested. */
+#undef GNULIB_TEST_MBSINIT
+
+/* Define to 1 when the gnulib module mbsrtowcs should be tested. */
+#undef GNULIB_TEST_MBSRTOWCS
+
+/* Define to 1 when the gnulib module memchr should be tested. */
+#undef GNULIB_TEST_MEMCHR
+
+/* Define to 1 when the gnulib module memmem should be tested. */
+#undef GNULIB_TEST_MEMMEM
+
+/* Define to 1 if you have 'alloca' after including <alloca.h>, a header that
+   may be supplied by this distribution. */
+#undef HAVE_ALLOCA
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+   */
+#undef HAVE_ALLOCA_H
+
+/* Define to 1 if you have the <bp-sym.h> header file. */
+#undef HAVE_BP_SYM_H
+
+/* Define to 1 if you have the 'btowc' function. */
+#undef HAVE_BTOWC
+
+/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
+   don't. */
+#undef HAVE_DECL_GETC_UNLOCKED
+
+/* Define to 1 if you have the declaration of `isblank', and to 0 if you
+   don't. */
+#undef HAVE_DECL_ISBLANK
+
+/* Define to 1 if you have the declaration of `mbrtowc', and to 0 if you
+   don't. */
+#undef HAVE_DECL_MBRTOWC
+
+/* Define to 1 if you have the declaration of `mbsinit', and to 0 if you
+   don't. */
+#undef HAVE_DECL_MBSINIT
+
+/* Define to 1 if you have the declaration of `mbsrtowcs', and to 0 if you
+   don't. */
+#undef HAVE_DECL_MBSRTOWCS
+
+/* Define to 1 if you have the declaration of `memmem', and to 0 if you don't.
+   */
+#undef HAVE_DECL_MEMMEM
+
+/* Define to 1 if you have the declaration of `towlower', and to 0 if you
+   don't. */
+#undef HAVE_DECL_TOWLOWER
+
+/* Define to 1 if you have the <features.h> header file. */
+#undef HAVE_FEATURES_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the 'isblank' function. */
+#undef HAVE_ISBLANK
+
+/* Define to 1 if you have the 'iswcntrl' function. */
+#undef HAVE_ISWCNTRL
+
+/* Define to 1 if you have the 'iswctype' function. */
+#undef HAVE_ISWCTYPE
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+#undef HAVE_LANGINFO_CODESET
+
+/* Define to 1 if the system has the type 'long long int'. */
+#undef HAVE_LONG_LONG_INT
+
+/* Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including
+   config.h and <sys/mman.h>. */
+#undef HAVE_MAP_ANONYMOUS
+
+/* Define to 1 if you have the 'mbrtowc' function. */
+#undef HAVE_MBRTOWC
+
+/* Define to 1 if you have the 'mbsinit' function. */
+#undef HAVE_MBSINIT
+
+/* Define to 1 if you have the 'mbsrtowcs' function. */
+#undef HAVE_MBSRTOWCS
+
+/* Define to 1 if <wchar.h> declares mbstate_t. */
+#undef HAVE_MBSTATE_T
+
+/* Define to 1 if you have the `memmem' function. */
+#undef HAVE_MEMMEM
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the 'mempcpy' function. */
+#undef HAVE_MEMPCPY
+
+/* Define to 1 if you have the 'mprotect' function. */
+#undef HAVE_MPROTECT
+
+/* Define to 1 if btowc is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_BTOWC
+
+/* Define to 1 if ffsl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FFSL
+
+/* Define to 1 if ffsll is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FFSLL
+
+/* Define to 1 if imaxabs is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_IMAXABS
+
+/* Define to 1 if imaxdiv is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_IMAXDIV
+
+/* Define to 1 if iswctype is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ISWCTYPE
+
+/* Define to 1 if mbrlen is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MBRLEN
+
+/* Define to 1 if mbrtowc is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MBRTOWC
+
+/* Define to 1 if mbsinit is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MBSINIT
+
+/* Define to 1 if mbsnrtowcs is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MBSNRTOWCS
+
+/* Define to 1 if mbsrtowcs is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MBSRTOWCS
+
+/* Define to 1 if memmem is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MEMMEM
+
+/* Define to 1 if mempcpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MEMPCPY
+
+/* Define to 1 if memrchr is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MEMRCHR
+
+/* Define to 1 if rawmemchr is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_RAWMEMCHR
+
+/* Define to 1 if stpcpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STPCPY
+
+/* Define to 1 if stpncpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STPNCPY
+
+/* Define to 1 if strcasestr is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRCASESTR
+
+/* Define to 1 if strchrnul is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRCHRNUL
+
+/* Define to 1 if strdup is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRDUP
+
+/* Define to 1 if strerror_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRERROR_R
+
+/* Define to 1 if strncat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRNCAT
+
+/* Define to 1 if strndup is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRNDUP
+
+/* Define to 1 if strnlen is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRNLEN
+
+/* Define to 1 if strpbrk is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRPBRK
+
+/* Define to 1 if strsep is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRSEP
+
+/* Define to 1 if strsignal is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRSIGNAL
+
+/* Define to 1 if strtoimax is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRTOIMAX
+
+/* Define to 1 if strtok_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRTOK_R
+
+/* Define to 1 if strtoumax is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRTOUMAX
+
+/* Define to 1 if strverscmp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRVERSCMP
+
+/* Define to 1 if towctrans is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_TOWCTRANS
+
+/* Define to 1 if wcpcpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCPCPY
+
+/* Define to 1 if wcpncpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCPNCPY
+
+/* Define to 1 if wcrtomb is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCRTOMB
+
+/* Define to 1 if wcscasecmp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSCASECMP
+
+/* Define to 1 if wcscat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSCAT
+
+/* Define to 1 if wcschr is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSCHR
+
+/* Define to 1 if wcscmp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSCMP
+
+/* Define to 1 if wcscoll is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSCOLL
+
+/* Define to 1 if wcscpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSCPY
+
+/* Define to 1 if wcscspn is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSCSPN
+
+/* Define to 1 if wcsdup is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSDUP
+
+/* Define to 1 if wcslen is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSLEN
+
+/* Define to 1 if wcsncasecmp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSNCASECMP
+
+/* Define to 1 if wcsncat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSNCAT
+
+/* Define to 1 if wcsncmp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSNCMP
+
+/* Define to 1 if wcsncpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSNCPY
+
+/* Define to 1 if wcsnlen is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSNLEN
+
+/* Define to 1 if wcsnrtombs is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSNRTOMBS
+
+/* Define to 1 if wcspbrk is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSPBRK
+
+/* Define to 1 if wcsrchr is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSRCHR
+
+/* Define to 1 if wcsrtombs is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSRTOMBS
+
+/* Define to 1 if wcsspn is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSSPN
+
+/* Define to 1 if wcsstr is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSSTR
+
+/* Define to 1 if wcstok is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSTOK
+
+/* Define to 1 if wcswidth is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSWIDTH
+
+/* Define to 1 if wcsxfrm is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSXFRM
+
+/* Define to 1 if wctob is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCTOB
+
+/* Define to 1 if wctrans is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCTRANS
+
+/* Define to 1 if wctype is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCTYPE
+
+/* Define to 1 if wcwidth is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCWIDTH
+
+/* Define to 1 if wmemchr is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WMEMCHR
+
+/* Define to 1 if wmemcmp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WMEMCMP
+
+/* Define to 1 if wmemcpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WMEMCPY
+
+/* Define to 1 if wmemmove is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WMEMMOVE
+
+/* Define to 1 if wmemset is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WMEMSET
+
+/* Define to 1 if 'sig_atomic_t' is a signed integer type. */
+#undef HAVE_SIGNED_SIG_ATOMIC_T
+
+/* Define to 1 if 'wchar_t' is a signed integer type. */
+#undef HAVE_SIGNED_WCHAR_T
+
+/* Define to 1 if 'wint_t' is a signed integer type. */
+#undef HAVE_SIGNED_WINT_T
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the 'symlink' function. */
+#undef HAVE_SYMLINK
+
+/* Define to 1 if you have the <sys/bitypes.h> header file. */
+#undef HAVE_SYS_BITYPES_H
+
+/* Define to 1 if you have the <sys/inttypes.h> header file. */
+#undef HAVE_SYS_INTTYPES_H
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#undef HAVE_SYS_MMAN_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the `towlower' function. */
+#undef HAVE_TOWLOWER
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if the system has the type 'unsigned long long int'. */
+#undef HAVE_UNSIGNED_LONG_LONG_INT
+
+/* Define to 1 if you have the <wchar.h> header file. */
+#undef HAVE_WCHAR_H
+
+/* Define if you have the 'wchar_t' type. */
+#undef HAVE_WCHAR_T
+
+/* Define to 1 if you have the <wctype.h> header file. */
+#undef HAVE_WCTYPE_H
+
+/* Define if you have the 'wint_t' type. */
+#undef HAVE_WINT_T
+
+/* Define to 1 if you have the 'wmemchr' function. */
+#undef HAVE_WMEMCHR
+
+/* Define to 1 if you have the 'wmemcpy' function. */
+#undef HAVE_WMEMCPY
+
+/* Define to 1 if you have the 'wmempcpy' function. */
+#undef HAVE_WMEMPCPY
+
+/* Define to 1 if O_NOATIME works. */
+#undef HAVE_WORKING_O_NOATIME
+
+/* Define to 1 if O_NOFOLLOW works. */
+#undef HAVE_WORKING_O_NOFOLLOW
+
+/* Define to 1 if the system has the type `_Bool'. */
+#undef HAVE__BOOL
+
+/* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */
+#undef MAP_ANONYMOUS
+
+/* Define if the mbrtowc function has the NULL pwc argument bug. */
+#undef MBRTOWC_NULL_ARG1_BUG
+
+/* Define if the mbrtowc function has the NULL string argument bug. */
+#undef MBRTOWC_NULL_ARG2_BUG
+
+/* Define if the mbrtowc function does not return 0 for a NUL character. */
+#undef MBRTOWC_NUL_RETVAL_BUG
+
+/* Define if the mbrtowc function returns a wrong return value. */
+#undef MBRTOWC_RETVAL_BUG
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
+#undef PRI_MACROS_BROKEN
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'ptrdiff_t'. */
+#undef PTRDIFF_T_SUFFIX
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'sig_atomic_t'. */
+#undef SIG_ATOMIC_T_SUFFIX
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'size_t'. */
+#undef SIZE_T_SUFFIX
+
+/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at runtime.
+        STACK_DIRECTION > 0 => grows toward higher addresses
+        STACK_DIRECTION < 0 => grows toward lower addresses
+        STACK_DIRECTION = 0 => direction of growth unknown */
+#undef STACK_DIRECTION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'wchar_t'. */
+#undef WCHAR_T_SUFFIX
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'wint_t'. */
+#undef WINT_T_SUFFIX
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* The _Noreturn keyword of C11.  */
+#if ! (defined _Noreturn \
+       || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__))
+# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
+      || 0x5110 <= __SUNPRO_C)
+#  define _Noreturn __attribute__ ((__noreturn__))
+# elif defined _MSC_VER && 1200 <= _MSC_VER
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn
+# endif
+#endif
+
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for 'stat' and other things to work. */
+#undef _POSIX_SOURCE
+
+/* Define to 500 only on HP-UX. */
+#undef _XOPEN_SOURCE
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable general extensions on Mac OS X.  */
+#ifndef _DARWIN_C_SOURCE
+# undef _DARWIN_C_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define to a replacement function name for fnmatch(). */
+#undef fnmatch
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
+   the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
+   earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
+   __APPLE__ && __MACH__ test for Mac OS X.
+   __APPLE_CC__ tests for the Apple compiler and its version.
+   __STDC_VERSION__ tests for the C99 mode.  */
+#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
+# define __GNUC_STDC_INLINE__ 1
+#endif
+
+/* Define to a type if <wchar.h> does not define. */
+#undef mbstate_t
+
+/* Define to the equivalent of the C99 'restrict' keyword, or to
+   nothing if this is not supported.  Do not define if restrict is
+   supported directly.  */
+#undef restrict
+/* Work around a bug in Sun C++: it does not support _Restrict or
+   __restrict__, even though the corresponding Sun C compiler ends up with
+   "#define restrict _Restrict" or "#define restrict __restrict__" in the
+   previous line.  Perhaps some future version of Sun C++ will work with
+   restrict; if so, hopefully it defines __RESTRICT like Sun C does.  */
+#if defined __SUNPRO_CC && !defined __RESTRICT
+# define _Restrict
+# define __restrict__
+#endif
+
+/* Define as a marker that can be attached to declarations that might not
+    be used.  This helps to reduce warnings, such as from
+    GCC -Wunused-parameter.  */
+#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_UNUSED __attribute__ ((__unused__))
+#else
+# define _GL_UNUSED
+#endif
+/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
+   is a misnomer outside of parameter lists.  */
+#define _UNUSED_PARAMETER_ _GL_UNUSED
+
+/* The __pure__ attribute was added in gcc 2.96.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+/* The __const__ attribute was added in gcc 2.95.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
+#else
+# define _GL_ATTRIBUTE_CONST /* empty */
+#endif
+
diff --git a/gdb/gnulib/configure b/gdb/gnulib/configure
new file mode 100644
index 0000000..9de03a0
--- /dev/null
+++ b/gdb/gnulib/configure
@@ -0,0 +1,13479 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.64.
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
+# Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test "x$CONFIG_SHELL" = x; then
+  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+"
+  as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+  exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+  if (eval "$as_required") 2>/dev/null; then :
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  as_found=:
+  case $as_dir in #(
+	 /*)
+	   for as_base in sh bash ksh sh5; do
+	     # Try only shells that exist, to save several forks.
+	     as_shell=$as_dir/$as_base
+	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  break 2
+fi
+fi
+	   done;;
+       esac
+  as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+      if test "x$CONFIG_SHELL" != x; then :
+  # We cannot yet assume a decent shell, so we have to provide a
+	# neutralization value for shells without unset; and this also
+	# works around shells that cannot unset nonexistent variables.
+	BASH_ENV=/dev/null
+	ENV=/dev/null
+	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+	export CONFIG_SHELL
+	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+    if test x$as_have_required = xno; then :
+  $as_echo "$0: This script requires a shell more modern than all"
+  $as_echo "$0: the shells that I found on your system."
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+  else
+    $as_echo "$0: Please tell bug-autoconf at gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+  fi
+  exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+# as_fn_error ERROR [LINENO LOG_FD]
+# ---------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with status $?, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$?; test $as_status -eq 0 && as_status=1
+  if test "$3"; then
+    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  fi
+  $as_echo "$as_me: error: $1" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+	test -d "$1/.";
+      else
+	case $1 in #(
+	-*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 7<&0 </dev/null 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
+PACKAGE_URL=
+
+ac_unique_file="import/memmem.c"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+gl_fnmatch_required=POSIX
+gl_func_list=
+gl_header_list=
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+gltests_LTLIBOBJS
+gltests_LIBOBJS
+gl_LTLIBOBJS
+gl_LIBOBJS
+LTLIBOBJS
+LIBOBJS
+LN_S
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+LIBGNU_LTLIBDEPS
+LIBGNU_LIBDEPS
+gltests_WITNESS
+REPLACE_TOWLOWER
+REPLACE_ISWCNTRL
+HAVE_WCTYPE_H
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H
+NEXT_WCTYPE_H
+HAVE_ISWCNTRL
+REPLACE_ISWBLANK
+HAVE_WCTRANS_T
+HAVE_WCTYPE_T
+HAVE_ISWBLANK
+GNULIB_TOWCTRANS
+GNULIB_WCTRANS
+GNULIB_ISWCTYPE
+GNULIB_WCTYPE
+GNULIB_ISWBLANK
+HAVE_WINT_T
+HAVE_FEATURES_H
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H
+NEXT_WCHAR_H
+NEXT_AS_FIRST_DIRECTIVE_STRING_H
+NEXT_STRING_H
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H
+NEXT_STDDEF_H
+GL_GENERATE_STDDEF_H_FALSE
+GL_GENERATE_STDDEF_H_TRUE
+STDDEF_H
+HAVE_WCHAR_T
+REPLACE_NULL
+HAVE__BOOL
+GL_GENERATE_STDBOOL_H_FALSE
+GL_GENERATE_STDBOOL_H_TRUE
+STDBOOL_H
+UNDEFINE_STRTOK_R
+REPLACE_STRTOK_R
+REPLACE_STRSIGNAL
+REPLACE_STRNLEN
+REPLACE_STRNDUP
+REPLACE_STRNCAT
+REPLACE_STRERROR_R
+REPLACE_STRERROR
+REPLACE_STRCHRNUL
+REPLACE_STRCASESTR
+REPLACE_STRSTR
+REPLACE_STRDUP
+REPLACE_STPNCPY
+REPLACE_MEMMEM
+REPLACE_MEMCHR
+HAVE_STRVERSCMP
+HAVE_DECL_STRSIGNAL
+HAVE_DECL_STRERROR_R
+HAVE_DECL_STRTOK_R
+HAVE_STRCASESTR
+HAVE_STRSEP
+HAVE_STRPBRK
+HAVE_DECL_STRNLEN
+HAVE_DECL_STRNDUP
+HAVE_DECL_STRDUP
+HAVE_STRCHRNUL
+HAVE_STPNCPY
+HAVE_STPCPY
+HAVE_RAWMEMCHR
+HAVE_DECL_MEMRCHR
+HAVE_MEMPCPY
+HAVE_DECL_MEMMEM
+HAVE_MEMCHR
+HAVE_FFSLL
+HAVE_FFSL
+HAVE_MBSLEN
+GNULIB_STRVERSCMP
+GNULIB_STRSIGNAL
+GNULIB_STRERROR_R
+GNULIB_STRERROR
+GNULIB_MBSTOK_R
+GNULIB_MBSSEP
+GNULIB_MBSSPN
+GNULIB_MBSPBRK
+GNULIB_MBSCSPN
+GNULIB_MBSCASESTR
+GNULIB_MBSPCASECMP
+GNULIB_MBSNCASECMP
+GNULIB_MBSCASECMP
+GNULIB_MBSSTR
+GNULIB_MBSRCHR
+GNULIB_MBSCHR
+GNULIB_MBSNLEN
+GNULIB_MBSLEN
+GNULIB_STRTOK_R
+GNULIB_STRCASESTR
+GNULIB_STRSTR
+GNULIB_STRSEP
+GNULIB_STRPBRK
+GNULIB_STRNLEN
+GNULIB_STRNDUP
+GNULIB_STRNCAT
+GNULIB_STRDUP
+GNULIB_STRCHRNUL
+GNULIB_STPNCPY
+GNULIB_STPCPY
+GNULIB_RAWMEMCHR
+GNULIB_MEMRCHR
+GNULIB_MEMPCPY
+GNULIB_MEMMEM
+GNULIB_MEMCHR
+GNULIB_FFSLL
+GNULIB_FFSL
+LOCALE_FR
+LOCALE_FR_UTF8
+LOCALE_ZH_CN
+LOCALE_JA
+REPLACE_WCSWIDTH
+REPLACE_WCWIDTH
+REPLACE_WCSNRTOMBS
+REPLACE_WCSRTOMBS
+REPLACE_WCRTOMB
+REPLACE_MBSNRTOWCS
+REPLACE_MBSRTOWCS
+REPLACE_MBRLEN
+REPLACE_MBRTOWC
+REPLACE_MBSINIT
+REPLACE_WCTOB
+REPLACE_BTOWC
+REPLACE_MBSTATE_T
+HAVE_DECL_WCWIDTH
+HAVE_DECL_WCTOB
+HAVE_WCSWIDTH
+HAVE_WCSTOK
+HAVE_WCSSTR
+HAVE_WCSPBRK
+HAVE_WCSSPN
+HAVE_WCSCSPN
+HAVE_WCSRCHR
+HAVE_WCSCHR
+HAVE_WCSDUP
+HAVE_WCSXFRM
+HAVE_WCSCOLL
+HAVE_WCSNCASECMP
+HAVE_WCSCASECMP
+HAVE_WCSNCMP
+HAVE_WCSCMP
+HAVE_WCSNCAT
+HAVE_WCSCAT
+HAVE_WCPNCPY
+HAVE_WCSNCPY
+HAVE_WCPCPY
+HAVE_WCSCPY
+HAVE_WCSNLEN
+HAVE_WCSLEN
+HAVE_WMEMSET
+HAVE_WMEMMOVE
+HAVE_WMEMCPY
+HAVE_WMEMCMP
+HAVE_WMEMCHR
+HAVE_WCSNRTOMBS
+HAVE_WCSRTOMBS
+HAVE_WCRTOMB
+HAVE_MBSNRTOWCS
+HAVE_MBSRTOWCS
+HAVE_MBRLEN
+HAVE_MBRTOWC
+HAVE_MBSINIT
+HAVE_BTOWC
+GNULIB_WCSWIDTH
+GNULIB_WCSTOK
+GNULIB_WCSSTR
+GNULIB_WCSPBRK
+GNULIB_WCSSPN
+GNULIB_WCSCSPN
+GNULIB_WCSRCHR
+GNULIB_WCSCHR
+GNULIB_WCSDUP
+GNULIB_WCSXFRM
+GNULIB_WCSCOLL
+GNULIB_WCSNCASECMP
+GNULIB_WCSCASECMP
+GNULIB_WCSNCMP
+GNULIB_WCSCMP
+GNULIB_WCSNCAT
+GNULIB_WCSCAT
+GNULIB_WCPNCPY
+GNULIB_WCSNCPY
+GNULIB_WCPCPY
+GNULIB_WCSCPY
+GNULIB_WCSNLEN
+GNULIB_WCSLEN
+GNULIB_WMEMSET
+GNULIB_WMEMMOVE
+GNULIB_WMEMCPY
+GNULIB_WMEMCMP
+GNULIB_WMEMCHR
+GNULIB_WCWIDTH
+GNULIB_WCSNRTOMBS
+GNULIB_WCSRTOMBS
+GNULIB_WCRTOMB
+GNULIB_MBSNRTOWCS
+GNULIB_MBSRTOWCS
+GNULIB_MBRLEN
+GNULIB_MBRTOWC
+GNULIB_MBSINIT
+GNULIB_WCTOB
+GNULIB_BTOWC
+LOCALCHARSET_TESTS_ENVIRONMENT
+GLIBC21
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H
+NEXT_INTTYPES_H
+UINT64_MAX_EQ_ULONG_MAX
+UINT32_MAX_LT_UINTMAX_MAX
+PRIPTR_PREFIX
+PRI_MACROS_BROKEN
+INT64_MAX_EQ_LONG_MAX
+INT32_MAX_LT_INTMAX_MAX
+REPLACE_STRTOIMAX
+HAVE_DECL_STRTOUMAX
+HAVE_DECL_STRTOIMAX
+HAVE_DECL_IMAXDIV
+HAVE_DECL_IMAXABS
+GNULIB_STRTOUMAX
+GNULIB_STRTOIMAX
+GNULIB_IMAXDIV
+GNULIB_IMAXABS
+GL_GENERATE_STDINT_H_FALSE
+GL_GENERATE_STDINT_H_TRUE
+STDINT_H
+WINT_T_SUFFIX
+WCHAR_T_SUFFIX
+SIG_ATOMIC_T_SUFFIX
+SIZE_T_SUFFIX
+PTRDIFF_T_SUFFIX
+HAVE_SIGNED_WINT_T
+HAVE_SIGNED_WCHAR_T
+HAVE_SIGNED_SIG_ATOMIC_T
+BITSIZEOF_WINT_T
+BITSIZEOF_WCHAR_T
+BITSIZEOF_SIG_ATOMIC_T
+BITSIZEOF_SIZE_T
+BITSIZEOF_PTRDIFF_T
+APPLE_UNIVERSAL_BUILD
+HAVE_SYS_BITYPES_H
+HAVE_SYS_INTTYPES_H
+HAVE_STDINT_H
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H
+NEXT_STDINT_H
+PRAGMA_COLUMNS
+PRAGMA_SYSTEM_HEADER
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE
+INCLUDE_NEXT
+HAVE_SYS_TYPES_H
+HAVE_INTTYPES_H
+HAVE_WCHAR_H
+HAVE_UNSIGNED_LONG_LONG_INT
+HAVE_LONG_LONG_INT
+GL_GENERATE_FNMATCH_H_FALSE
+GL_GENERATE_FNMATCH_H_TRUE
+FNMATCH_H
+pkglibexecdir
+lispdir
+GL_GENERATE_ALLOCA_H_FALSE
+GL_GENERATE_ALLOCA_H_TRUE
+ALLOCA_H
+ALLOCA
+GL_COND_LIBTOOL_FALSE
+GL_COND_LIBTOOL_TRUE
+target_os
+target_vendor
+target_cpu
+target
+RANLIB
+ARFLAGS
+AR
+EGREP
+GREP
+CPP
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_maintainer_mode
+enable_dependency_tracking
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=*)	ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *)	ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) as_fn_error "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information."
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    case $ac_envvar in #(
+      '' | [0-9]* | *[!_$as_cr_alnum]* )
+      as_fn_error "invalid variable name: \`$ac_envvar'" ;;
+    esac
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  as_fn_error "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
+		datadir sysconfdir sharedstatedir localstatedir includedir \
+		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+		libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  as_fn_error "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  as_fn_error "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_myself" : 'X\(//\)[^/]' \| \
+	 X"$as_myself" : 'X\(//\)$' \| \
+	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
+	pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures this package to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/PACKAGE]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+  --target=TARGET   configure for building compilers for TARGET [HOST]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-maintainer-mode  enable make rules and dependencies not useful
+			  (and sometimes confusing) to the casual installer
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to the package provider.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+configure
+generated by GNU Autoconf 2.64
+
+Copyright (C) 2009 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  return $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  return $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_header_compiler=yes
+else
+  ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  ac_header_preproc=yes
+else
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+  yes:no: )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  return $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 $as_test_x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  return $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_check_decl LINENO SYMBOL VAR
+# ------------------------------------
+# Tests whether SYMBOL is declared, setting cache variable VAR accordingly.
+ac_fn_c_check_decl ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $2 is declared" >&5
+$as_echo_n "checking whether $2 is declared... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+#ifndef $2
+  (void) $2;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_decl
+
+# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
+# --------------------------------------------
+# Tries to find the compile-time value of EXPR in a program that includes
+# INCLUDES, setting VAR accordingly. Returns whether the value could be
+# computed
+ac_fn_c_compute_int ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if test "$cross_compiling" = yes; then
+    # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid; break
+else
+  as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+			if test $ac_lo -le $ac_mid; then
+			  ac_lo= ac_hi=
+			  break
+			fi
+			as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=$ac_mid; break
+else
+  as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+			if test $ac_mid -le $ac_hi; then
+			  ac_lo= ac_hi=
+			  break
+			fi
+			as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid
+else
+  as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in #((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (($2) < 0)
+    {
+      long int i = longval ();
+      if (i != ($2))
+	return 1;
+      fprintf (f, "%ld", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ($2))
+	return 1;
+      fprintf (f, "%lu", i);
+    }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else
+  ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+  fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  return $ac_retval
+
+} # ac_fn_c_compute_int
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+	 return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+	    return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_type
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by $as_me, which was
+generated by GNU Autoconf 2.64.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    $as_echo "PATH: $as_dir"
+  done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+    2)
+      as_fn_append ac_configure_args1 " '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      as_fn_append ac_configure_args " '$ac_arg'"
+      ;;
+    esac
+  done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+	"s/'\''/'\''\\\\'\'''\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      $as_echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=\$$ac_var
+	case $ac_val in
+	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	esac
+	$as_echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+  ac_site_file1=$CONFIG_SITE
+elif test "x$prefix" != xNONE; then
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
+else
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+  test "x$ac_site_file" = xNONE && continue
+  if test -r "$ac_site_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+gl_func_list="$gl_func_list btowc"
+gl_func_list="$gl_func_list isblank"
+gl_func_list="$gl_func_list iswctype"
+gl_func_list="$gl_func_list mbsrtowcs"
+gl_func_list="$gl_func_list mempcpy"
+gl_func_list="$gl_func_list wmemchr"
+gl_func_list="$gl_func_list wmemcpy"
+gl_func_list="$gl_func_list wmempcpy"
+gl_header_list="$gl_header_list wctype.h"
+gl_fnmatch_required=GNU
+gl_header_list="$gl_header_list wchar.h"
+gl_header_list="$gl_header_list stdint.h"
+gl_header_list="$gl_header_list inttypes.h"
+gl_header_list="$gl_header_list unistd.h"
+gl_func_list="$gl_func_list symlink"
+gl_func_list="$gl_func_list mbsinit"
+gl_func_list="$gl_func_list mbrtowc"
+gl_header_list="$gl_header_list sys/mman.h"
+gl_func_list="$gl_func_list mprotect"
+gl_header_list="$gl_header_list features.h"
+gl_func_list="$gl_func_list iswcntrl"
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	# differences in whitespace do not lead to failure.
+	ac_old_val_w=`echo x $ac_old_val`
+	ac_new_val_w=`echo x $ac_new_val`
+	if test "$ac_old_val_w" != "$ac_new_val_w"; then
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	  ac_cache_corrupted=:
+	else
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+	  eval $ac_var=\$ac_old_val
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ac_config_headers="$ac_config_headers config.h:config.in"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+    # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then :
+  enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+  USE_MAINTAINER_MODE=no
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+   if test $USE_MAINTAINER_MODE = yes; then
+  MAINTAINER_MODE_TRUE=
+  MAINTAINER_MODE_FALSE='#'
+else
+  MAINTAINER_MODE_TRUE='#'
+  MAINTAINER_MODE_FALSE=
+fi
+
+  MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "no acceptable C compiler found in \$PATH
+See \`config.log' for more details." "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    rm -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	then :; else
+	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	fi
+	# We set ac_cv_exeext here because the later test for it is not
+	# safe: cross compilers may not add the suffix if given an `-o'
+	# argument, so we may need to know it at that point already.
+	# Even if this section looks crufty: it has the advantage of
+	# actually working.
+	break;;
+    * )
+	break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+if test -z "$ac_file"; then :
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ as_fn_set_status 77
+as_fn_error "C compiler cannot create executables
+See \`config.log' for more details." "$LINENO" 5; }; }
+fi
+ac_exeext=$ac_cv_exeext
+
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." "$LINENO" 5; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out
+ac_clean_files=$ac_clean_files_save
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." "$LINENO" 5; }
+fi
+rm -f conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if test "${ac_cv_objext+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+  for ac_t in install-sh install.sh shtool; do
+    if test -f "$ac_dir/$ac_t"; then
+      ac_aux_dir=$ac_dir
+      ac_install_sh="$ac_aux_dir/$ac_t -c"
+      break 2
+    fi
+  done
+done
+if test -z "$ac_aux_dir"; then
+  as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdc=yes
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+eval as_val=\$$as_ac_Header
+   if test "x$as_val" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+        case "$host_os" in
+    hpux*)
+
+$as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h
+
+      ;;
+  esac
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#         define __EXTENSIONS__ 1
+          $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _DARWIN_C_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Minix Amsterdam compiler" >&5
+$as_echo_n "checking for Minix Amsterdam compiler... " >&6; }
+if test "${gl_cv_c_amsterdam_compiler+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef __ACK__
+Amsterdam
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Amsterdam" >/dev/null 2>&1; then :
+  gl_cv_c_amsterdam_compiler=yes
+else
+  gl_cv_c_amsterdam_compiler=no
+fi
+rm -f conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_amsterdam_compiler" >&5
+$as_echo "$gl_cv_c_amsterdam_compiler" >&6; }
+  if test -z "$AR"; then
+    if test $gl_cv_c_amsterdam_compiler = yes; then
+      AR='cc -c.a'
+      if test -z "$ARFLAGS"; then
+        ARFLAGS='-o'
+      fi
+    else
+                  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AR+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+  ac_ct_AR=$AR
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AR="ar"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_AR" = x; then
+    AR="ar"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+else
+  AR="$ac_cv_prog_AR"
+fi
+
+      if test -z "$ARFLAGS"; then
+        ARFLAGS='cru'
+      fi
+    fi
+  else
+    if test -z "$ARFLAGS"; then
+      ARFLAGS='cru'
+    fi
+  fi
+
+
+  if test -z "$RANLIB"; then
+    if test $gl_cv_c_amsterdam_compiler = yes; then
+      RANLIB=':'
+    else
+            if test -n "$ac_tool_prefix"; then
+  # 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
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+    fi
+  fi
+
+
+
+
+
+
+
+
+
+
+  # Code from module alloca:
+  # Code from module alloca-opt:
+  # Code from module configmake:
+  # Code from module extensions:
+
+  # Code from module fnmatch:
+  # Code from module fnmatch-gnu:
+  # Code from module include_next:
+  # Code from module inttypes:
+  # Code from module inttypes-incomplete:
+  # Code from module localcharset:
+  # Code from module mbrtowc:
+  # Code from module mbsinit:
+  # Code from module mbsrtowcs:
+  # Code from module memchr:
+  # Code from module memmem:
+  # Code from module memmem-simple:
+  # Code from module multiarch:
+  # Code from module snippet/arg-nonnull:
+  # Code from module snippet/c++defs:
+  # Code from module snippet/warn-on-use:
+  # Code from module stdbool:
+  # Code from module stddef:
+  # Code from module stdint:
+  # Code from module streq:
+  # Code from module string:
+  # Code from module strnlen1:
+  # Code from module update-copyright:
+  # Code from module verify:
+  # Code from module wchar:
+  # Code from module wctype-h:
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "no acceptable C compiler found in \$PATH
+See \`config.log' for more details." "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    rm -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc
+
+
+ac_aux_dir=
+for ac_dir in ../.. "$srcdir"/../..; do
+  for ac_t in install-sh install.sh shtool; do
+    if test -f "$ac_dir/$ac_t"; then
+      ac_aux_dir=$ac_dir
+      ac_install_sh="$ac_aux_dir/$ac_t -c"
+      break 2
+    fi
+  done
+done
+if test -z "$ac_aux_dir"; then
+  as_fn_error "cannot find install-sh, install.sh, or shtool in ../.. \"$srcdir\"/../.." "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
+$as_echo_n "checking target system type... " >&6; }
+if test "${ac_cv_target+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$target_alias" = x; then
+  ac_cv_target=$ac_cv_host
+else
+  ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
+    as_fn_error "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
+$as_echo "$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) as_fn_error "invalid value of canonical target" "$LINENO" 5;;
+esac
+target=$ac_cv_target
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+  test "$program_prefix$program_suffix$program_transform_name" = \
+    NONENONEs,x,x, &&
+  program_prefix=${target_alias}-
+
+
+
+
+
+
+
+          LIBC_FATAL_STDERR_=1
+  export LIBC_FATAL_STDERR_
+
+# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+# for constant arguments.  Useless!
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
+$as_echo_n "checking for working alloca.h... " >&6; }
+if test "${ac_cv_working_alloca_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <alloca.h>
+int
+main ()
+{
+char *p = (char *) alloca (2 * sizeof (int));
+			  if (p) return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_working_alloca_h=yes
+else
+  ac_cv_working_alloca_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5
+$as_echo "$ac_cv_working_alloca_h" >&6; }
+if test $ac_cv_working_alloca_h = yes; then
+
+$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
+$as_echo_n "checking for alloca... " >&6; }
+if test "${ac_cv_func_alloca_works+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+#else
+# ifdef _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# else
+#  ifdef HAVE_ALLOCA_H
+#   include <alloca.h>
+#  else
+#   ifdef _AIX
+ #pragma alloca
+#   else
+#    ifndef alloca /* predefined by HP cc +Olibcalls */
+char *alloca ();
+#    endif
+#   endif
+#  endif
+# endif
+#endif
+
+int
+main ()
+{
+char *p = (char *) alloca (1);
+				    if (p) return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_func_alloca_works=yes
+else
+  ac_cv_func_alloca_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5
+$as_echo "$ac_cv_func_alloca_works" >&6; }
+
+if test $ac_cv_func_alloca_works = yes; then
+
+$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
+
+else
+  # The SVR3 libPW and SVR4 libucb both contain incompatible functions
+# that cause trouble.  Some versions do not even contain alloca or
+# contain a buggy version.  If you still want to use their alloca,
+# use ar to extract alloca.o from them instead of compiling alloca.c.
+
+
+
+
+
+ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
+
+$as_echo "#define C_ALLOCA 1" >>confdefs.h
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether 'alloca.c' needs Cray hooks" >&5
+$as_echo_n "checking whether 'alloca.c' needs Cray hooks... " >&6; }
+if test "${ac_cv_os_cray+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined CRAY && ! defined CRAY2
+webecray
+#else
+wenotbecray
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "webecray" >/dev/null 2>&1; then :
+  ac_cv_os_cray=yes
+else
+  ac_cv_os_cray=no
+fi
+rm -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5
+$as_echo "$ac_cv_os_cray" >&6; }
+if test $ac_cv_os_cray = yes; then
+  for ac_func in _getb67 GETB67 getb67; do
+    as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+eval as_val=\$$as_ac_var
+   if test "x$as_val" = x""yes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define CRAY_STACKSEG_END $ac_func
+_ACEOF
+
+    break
+fi
+
+  done
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
+$as_echo_n "checking stack direction for C alloca... " >&6; }
+if test "${ac_cv_c_stack_direction+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_c_stack_direction=0
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+find_stack_direction (int *addr, int depth)
+{
+  int dir, dummy = 0;
+  if (! addr)
+    addr = &dummy;
+  *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
+  dir = depth ? find_stack_direction (addr, depth - 1) : 0;
+  return dir + dummy;
+}
+
+int
+main (int argc, char **argv)
+{
+  return find_stack_direction (0, argc + !argv + 20) < 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_c_stack_direction=1
+else
+  ac_cv_c_stack_direction=-1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
+$as_echo "$ac_cv_c_stack_direction" >&6; }
+cat >>confdefs.h <<_ACEOF
+#define STACK_DIRECTION $ac_cv_c_stack_direction
+_ACEOF
+
+
+fi
+
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5
+$as_echo_n "checking for mbstate_t... " >&6; }
+if test "${ac_cv_type_mbstate_t+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int
+main ()
+{
+mbstate_t x; return sizeof x;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_type_mbstate_t=yes
+else
+  ac_cv_type_mbstate_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_mbstate_t" >&5
+$as_echo "$ac_cv_type_mbstate_t" >&6; }
+   if test $ac_cv_type_mbstate_t = yes; then
+
+$as_echo "#define HAVE_MBSTATE_T 1" >>confdefs.h
+
+   else
+
+$as_echo "#define mbstate_t int" >>confdefs.h
+
+   fi
+
+
+
+
+
+  for ac_func in $gl_func_list
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+eval as_val=\$$as_ac_var
+   if test "x$as_val" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  for ac_header in $gl_header_list
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+eval as_val=\$$as_ac_Header
+   if test "x$as_val" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5
+$as_echo_n "checking for unsigned long long int... " >&6; }
+if test "${ac_cv_type_unsigned_long_long_int+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_type_unsigned_long_long_int=yes
+     if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* For now, do not test the preprocessor; as of 2007 there are too many
+         implementations with broken preprocessors.  Perhaps this can
+         be revisited in 2012.  In the meantime, code should not expect
+         #if to work with literals wider than 32 bits.  */
+      /* Test literals.  */
+      long long int ll = 9223372036854775807ll;
+      long long int nll = -9223372036854775807LL;
+      unsigned long long int ull = 18446744073709551615ULL;
+      /* Test constant expressions.   */
+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+                     ? 1 : -1)];
+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+                     ? 1 : -1)];
+      int i = 63;
+int
+main ()
+{
+/* Test availability of runtime routines for shift and division.  */
+      long long int llmax = 9223372036854775807ll;
+      unsigned long long int ullmax = 18446744073709551615ull;
+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+              | (llmax / ll) | (llmax % ll)
+              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+              | (ullmax / ull) | (ullmax % ull));
+  ;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+else
+  ac_cv_type_unsigned_long_long_int=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5
+$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; }
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+
+$as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
+
+  fi
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5
+$as_echo_n "checking for long long int... " >&6; }
+if test "${ac_cv_type_long_long_int+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_type_long_long_int=yes
+      if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+        ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
+        if test $ac_cv_type_long_long_int = yes; then
+                                        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+                 #ifndef LLONG_MAX
+                 # define HALF \
+                          (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+                 # define LLONG_MAX (HALF - 1 + HALF)
+                 #endif
+int
+main ()
+{
+long long int n = 1;
+                 int i;
+                 for (i = 0; ; i++)
+                   {
+                     long long int m = n << i;
+                     if (m >> i != n)
+                       return 1;
+                     if (LLONG_MAX / 2 < m)
+                       break;
+                   }
+                 return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_type_long_long_int=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+        fi
+      fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5
+$as_echo "$ac_cv_type_long_long_int" >&6; }
+  if test $ac_cv_type_long_long_int = yes; then
+
+$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
+
+  fi
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the preprocessor supports include_next" >&5
+$as_echo_n "checking whether the preprocessor supports include_next... " >&6; }
+if test "${gl_cv_have_include_next+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -rf conftestd1a conftestd1b conftestd2
+     mkdir conftestd1a conftestd1b conftestd2
+                                                  cat <<EOF > conftestd1a/conftest.h
+#define DEFINED_IN_CONFTESTD1
+#include_next <conftest.h>
+#ifdef DEFINED_IN_CONFTESTD2
+int foo;
+#else
+#error "include_next doesn't work"
+#endif
+EOF
+     cat <<EOF > conftestd1b/conftest.h
+#define DEFINED_IN_CONFTESTD1
+#include <stdio.h>
+#include_next <conftest.h>
+#ifdef DEFINED_IN_CONFTESTD2
+int foo;
+#else
+#error "include_next doesn't work"
+#endif
+EOF
+     cat <<EOF > conftestd2/conftest.h
+#ifndef DEFINED_IN_CONFTESTD1
+#error "include_next test doesn't work"
+#endif
+#define DEFINED_IN_CONFTESTD2
+EOF
+     gl_save_CPPFLAGS="$CPPFLAGS"
+     CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2"
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <conftest.h>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_have_include_next=yes
+else
+  CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <conftest.h>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_have_include_next=buggy
+else
+  gl_cv_have_include_next=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+     CPPFLAGS="$gl_save_CPPFLAGS"
+     rm -rf conftestd1a conftestd1b conftestd2
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_include_next" >&5
+$as_echo "$gl_cv_have_include_next" >&6; }
+  PRAGMA_SYSTEM_HEADER=
+  if test $gl_cv_have_include_next = yes; then
+    INCLUDE_NEXT=include_next
+    INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
+    if test -n "$GCC"; then
+      PRAGMA_SYSTEM_HEADER='#pragma GCC system_header'
+    fi
+  else
+    if test $gl_cv_have_include_next = buggy; then
+      INCLUDE_NEXT=include
+      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
+    else
+      INCLUDE_NEXT=include
+      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include
+    fi
+  fi
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether system header files limit the line length" >&5
+$as_echo_n "checking whether system header files limit the line length... " >&6; }
+if test "${gl_cv_pragma_columns+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef __TANDEM
+choke me
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "choke me" >/dev/null 2>&1; then :
+  gl_cv_pragma_columns=yes
+else
+  gl_cv_pragma_columns=no
+fi
+rm -f conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pragma_columns" >&5
+$as_echo "$gl_cv_pragma_columns" >&6; }
+  if test $gl_cv_pragma_columns = yes; then
+    PRAGMA_COLUMNS="#pragma COLUMNS 10000"
+  else
+    PRAGMA_COLUMNS=
+  fi
+
+
+
+
+
+
+
+
+    gl_cv_c_multiarch=no
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __APPLE_CC__
+         not a universal capable compiler
+        #endif
+        typedef int dummy;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+               arch=
+     prev=
+     for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do
+       if test -n "$prev"; then
+         case $word in
+           i?86 | x86_64 | ppc | ppc64)
+             if test -z "$arch" || test "$arch" = "$word"; then
+               arch="$word"
+             else
+               gl_cv_c_multiarch=yes
+             fi
+             ;;
+         esac
+         prev=
+       else
+         if test "x$word" = "x-arch"; then
+           prev=arch
+         fi
+       fi
+     done
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  if test $gl_cv_c_multiarch = yes; then
+    APPLE_UNIVERSAL_BUILD=1
+  else
+    APPLE_UNIVERSAL_BUILD=0
+  fi
+
+
+
+
+
+  if test $ac_cv_type_long_long_int = yes; then
+    HAVE_LONG_LONG_INT=1
+  else
+    HAVE_LONG_LONG_INT=0
+  fi
+
+
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+    HAVE_UNSIGNED_LONG_LONG_INT=1
+  else
+    HAVE_UNSIGNED_LONG_LONG_INT=0
+  fi
+
+
+
+  :
+
+
+
+
+
+  if test $ac_cv_header_wchar_h = yes; then
+    HAVE_WCHAR_H=1
+  else
+    HAVE_WCHAR_H=0
+  fi
+
+
+      if test $ac_cv_header_inttypes_h = yes; then
+    HAVE_INTTYPES_H=1
+  else
+    HAVE_INTTYPES_H=0
+  fi
+
+
+      if test $ac_cv_header_sys_types_h = yes; then
+    HAVE_SYS_TYPES_H=1
+  else
+    HAVE_SYS_TYPES_H=0
+  fi
+
+
+
+
+
+
+
+
+  :
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_stdint_h='<'stdint.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdint.h>" >&5
+$as_echo_n "checking absolute name of <stdint.h>... " >&6; }
+if test "${gl_cv_next_stdint_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_stdint_h = yes; then
+
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdint.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'stdint.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_stdint_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+          else
+               gl_cv_next_stdint_h='<'stdint.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdint_h" >&5
+$as_echo "$gl_cv_next_stdint_h" >&6; }
+     fi
+     NEXT_STDINT_H=$gl_cv_next_stdint_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'stdint.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_stdint_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive
+
+
+
+
+  if test $ac_cv_header_stdint_h = yes; then
+    HAVE_STDINT_H=1
+  else
+    HAVE_STDINT_H=0
+  fi
+
+
+    if test $ac_cv_header_stdint_h = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h conforms to C99" >&5
+$as_echo_n "checking whether stdint.h conforms to C99... " >&6; }
+if test "${gl_cv_header_working_stdint_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_cv_header_working_stdint_h=no
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>.  */
+#if !(defined WCHAR_MIN && defined WCHAR_MAX)
+#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>"
+#endif
+
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+
+#ifdef INT8_MAX
+int8_t a1 = INT8_MAX;
+int8_t a1min = INT8_MIN;
+#endif
+#ifdef INT16_MAX
+int16_t a2 = INT16_MAX;
+int16_t a2min = INT16_MIN;
+#endif
+#ifdef INT32_MAX
+int32_t a3 = INT32_MAX;
+int32_t a3min = INT32_MIN;
+#endif
+#ifdef INT64_MAX
+int64_t a4 = INT64_MAX;
+int64_t a4min = INT64_MIN;
+#endif
+#ifdef UINT8_MAX
+uint8_t b1 = UINT8_MAX;
+#else
+typedef int b1[(unsigned char) -1 != 255 ? 1 : -1];
+#endif
+#ifdef UINT16_MAX
+uint16_t b2 = UINT16_MAX;
+#endif
+#ifdef UINT32_MAX
+uint32_t b3 = UINT32_MAX;
+#endif
+#ifdef UINT64_MAX
+uint64_t b4 = UINT64_MAX;
+#endif
+int_least8_t c1 = INT8_C (0x7f);
+int_least8_t c1max = INT_LEAST8_MAX;
+int_least8_t c1min = INT_LEAST8_MIN;
+int_least16_t c2 = INT16_C (0x7fff);
+int_least16_t c2max = INT_LEAST16_MAX;
+int_least16_t c2min = INT_LEAST16_MIN;
+int_least32_t c3 = INT32_C (0x7fffffff);
+int_least32_t c3max = INT_LEAST32_MAX;
+int_least32_t c3min = INT_LEAST32_MIN;
+int_least64_t c4 = INT64_C (0x7fffffffffffffff);
+int_least64_t c4max = INT_LEAST64_MAX;
+int_least64_t c4min = INT_LEAST64_MIN;
+uint_least8_t d1 = UINT8_C (0xff);
+uint_least8_t d1max = UINT_LEAST8_MAX;
+uint_least16_t d2 = UINT16_C (0xffff);
+uint_least16_t d2max = UINT_LEAST16_MAX;
+uint_least32_t d3 = UINT32_C (0xffffffff);
+uint_least32_t d3max = UINT_LEAST32_MAX;
+uint_least64_t d4 = UINT64_C (0xffffffffffffffff);
+uint_least64_t d4max = UINT_LEAST64_MAX;
+int_fast8_t e1 = INT_FAST8_MAX;
+int_fast8_t e1min = INT_FAST8_MIN;
+int_fast16_t e2 = INT_FAST16_MAX;
+int_fast16_t e2min = INT_FAST16_MIN;
+int_fast32_t e3 = INT_FAST32_MAX;
+int_fast32_t e3min = INT_FAST32_MIN;
+int_fast64_t e4 = INT_FAST64_MAX;
+int_fast64_t e4min = INT_FAST64_MIN;
+uint_fast8_t f1 = UINT_FAST8_MAX;
+uint_fast16_t f2 = UINT_FAST16_MAX;
+uint_fast32_t f3 = UINT_FAST32_MAX;
+uint_fast64_t f4 = UINT_FAST64_MAX;
+#ifdef INTPTR_MAX
+intptr_t g = INTPTR_MAX;
+intptr_t gmin = INTPTR_MIN;
+#endif
+#ifdef UINTPTR_MAX
+uintptr_t h = UINTPTR_MAX;
+#endif
+intmax_t i = INTMAX_MAX;
+uintmax_t j = UINTMAX_MAX;
+
+#include <limits.h> /* for CHAR_BIT */
+#define TYPE_MINIMUM(t) \
+  ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t)))
+#define TYPE_MAXIMUM(t) \
+  ((t) ((t) 0 < (t) -1 \
+        ? (t) -1 \
+        : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
+struct s {
+  int check_PTRDIFF:
+      PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
+      && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
+      ? 1 : -1;
+  /* Detect bug in FreeBSD 6.0 / ia64.  */
+  int check_SIG_ATOMIC:
+      SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
+      && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
+      ? 1 : -1;
+  int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1;
+  int check_WCHAR:
+      WCHAR_MIN == TYPE_MINIMUM (wchar_t)
+      && WCHAR_MAX == TYPE_MAXIMUM (wchar_t)
+      ? 1 : -1;
+  /* Detect bug in mingw.  */
+  int check_WINT:
+      WINT_MIN == TYPE_MINIMUM (wint_t)
+      && WINT_MAX == TYPE_MAXIMUM (wint_t)
+      ? 1 : -1;
+
+  /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others.  */
+  int check_UINT8_C:
+        (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1;
+  int check_UINT16_C:
+        (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1;
+
+  /* Detect bugs in OpenBSD 3.9 stdint.h.  */
+#ifdef UINT8_MAX
+  int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1;
+#endif
+#ifdef UINT16_MAX
+  int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1;
+#endif
+#ifdef UINT32_MAX
+  int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1;
+#endif
+#ifdef UINT64_MAX
+  int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1;
+#endif
+  int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1;
+  int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1;
+  int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1;
+  int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1;
+  int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1;
+  int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1;
+  int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1;
+  int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1;
+  int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1;
+  int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1;
+  int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1;
+};
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+                                                    if test "$cross_compiling" = yes; then :
+                 gl_cv_header_working_stdint_h=yes
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+
+#include <stdio.h>
+#include <string.h>
+#define MVAL(macro) MVAL1(macro)
+#define MVAL1(expression) #expression
+static const char *macro_values[] =
+  {
+#ifdef INT8_MAX
+    MVAL (INT8_MAX),
+#endif
+#ifdef INT16_MAX
+    MVAL (INT16_MAX),
+#endif
+#ifdef INT32_MAX
+    MVAL (INT32_MAX),
+#endif
+#ifdef INT64_MAX
+    MVAL (INT64_MAX),
+#endif
+#ifdef UINT8_MAX
+    MVAL (UINT8_MAX),
+#endif
+#ifdef UINT16_MAX
+    MVAL (UINT16_MAX),
+#endif
+#ifdef UINT32_MAX
+    MVAL (UINT32_MAX),
+#endif
+#ifdef UINT64_MAX
+    MVAL (UINT64_MAX),
+#endif
+    NULL
+  };
+
+int
+main ()
+{
+
+  const char **mv;
+  for (mv = macro_values; *mv != NULL; mv++)
+    {
+      const char *value = *mv;
+      /* Test whether it looks like a cast expression.  */
+      if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0
+          || strncmp (value, "((unsigned short)"/*)*/, 17) == 0
+          || strncmp (value, "((unsigned char)"/*)*/, 16) == 0
+          || strncmp (value, "((int)"/*)*/, 6) == 0
+          || strncmp (value, "((signed short)"/*)*/, 15) == 0
+          || strncmp (value, "((signed char)"/*)*/, 14) == 0)
+        return mv - macro_values + 1;
+    }
+  return 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_header_working_stdint_h=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdint_h" >&5
+$as_echo "$gl_cv_header_working_stdint_h" >&6; }
+  fi
+  if test "$gl_cv_header_working_stdint_h" = yes; then
+    STDINT_H=
+  else
+            for ac_header in sys/inttypes.h sys/bitypes.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+eval as_val=\$$as_ac_Header
+   if test "x$as_val" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+    if test $ac_cv_header_sys_inttypes_h = yes; then
+      HAVE_SYS_INTTYPES_H=1
+    else
+      HAVE_SYS_INTTYPES_H=0
+    fi
+
+    if test $ac_cv_header_sys_bitypes_h = yes; then
+      HAVE_SYS_BITYPES_H=1
+    else
+      HAVE_SYS_BITYPES_H=0
+    fi
+
+
+
+
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+
+  for gltype in ptrdiff_t size_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5
+$as_echo_n "checking for bit size of $gltype... " >&6; }
+if { as_var=gl_cv_bitsizeof_${gltype}; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result"        "
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+#include <limits.h>"; then :
+
+else
+  result=unknown
+fi
+
+       eval gl_cv_bitsizeof_${gltype}=\$result
+
+fi
+eval ac_res=\$gl_cv_bitsizeof_${gltype}
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    eval result=\$gl_cv_bitsizeof_${gltype}
+    if test $result = unknown; then
+                                                result=0
+    fi
+    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    cat >>confdefs.h <<_ACEOF
+#define BITSIZEOF_${GLTYPE} $result
+_ACEOF
+
+    eval BITSIZEOF_${GLTYPE}=\$result
+  done
+
+
+  fi
+
+
+  for gltype in sig_atomic_t wchar_t wint_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5
+$as_echo_n "checking for bit size of $gltype... " >&6; }
+if { as_var=gl_cv_bitsizeof_${gltype}; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result"        "
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+#include <limits.h>"; then :
+
+else
+  result=unknown
+fi
+
+       eval gl_cv_bitsizeof_${gltype}=\$result
+
+fi
+eval ac_res=\$gl_cv_bitsizeof_${gltype}
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    eval result=\$gl_cv_bitsizeof_${gltype}
+    if test $result = unknown; then
+                                                result=0
+    fi
+    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    cat >>confdefs.h <<_ACEOF
+#define BITSIZEOF_${GLTYPE} $result
+_ACEOF
+
+    eval BITSIZEOF_${GLTYPE}=\$result
+  done
+
+
+
+
+  for gltype in sig_atomic_t wchar_t wint_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gltype is signed" >&5
+$as_echo_n "checking whether $gltype is signed... " >&6; }
+if { as_var=gl_cv_type_${gltype}_signed; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+            int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  result=yes
+else
+  result=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+       eval gl_cv_type_${gltype}_signed=\$result
+
+fi
+eval ac_res=\$gl_cv_type_${gltype}_signed
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    eval result=\$gl_cv_type_${gltype}_signed
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    if test "$result" = yes; then
+      cat >>confdefs.h <<_ACEOF
+#define HAVE_SIGNED_${GLTYPE} 1
+_ACEOF
+
+      eval HAVE_SIGNED_${GLTYPE}=1
+    else
+      eval HAVE_SIGNED_${GLTYPE}=0
+    fi
+  done
+
+
+  gl_cv_type_ptrdiff_t_signed=yes
+  gl_cv_type_size_t_signed=no
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+
+  for gltype in ptrdiff_t size_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5
+$as_echo_n "checking for $gltype integer literal suffix... " >&6; }
+if { as_var=gl_cv_type_${gltype}_suffix; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval gl_cv_type_${gltype}_suffix=no
+       eval result=\$gl_cv_type_${gltype}_signed
+       if test "$result" = yes; then
+         glsufu=
+       else
+         glsufu=u
+       fi
+       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
+         case $glsuf in
+           '')  gltype1='int';;
+           l)   gltype1='long int';;
+           ll)  gltype1='long long int';;
+           i64) gltype1='__int64';;
+           u)   gltype1='unsigned int';;
+           ul)  gltype1='unsigned long int';;
+           ull) gltype1='unsigned long long int';;
+           ui64)gltype1='unsigned __int64';;
+         esac
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+              extern $gltype foo;
+              extern $gltype1 foo;
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval gl_cv_type_${gltype}_suffix=\$glsuf
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         eval result=\$gl_cv_type_${gltype}_suffix
+         test "$result" != no && break
+       done
+fi
+eval ac_res=\$gl_cv_type_${gltype}_suffix
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    eval result=\$gl_cv_type_${gltype}_suffix
+    test "$result" = no && result=
+    eval ${GLTYPE}_SUFFIX=\$result
+    cat >>confdefs.h <<_ACEOF
+#define ${GLTYPE}_SUFFIX $result
+_ACEOF
+
+  done
+
+
+  fi
+
+
+  for gltype in sig_atomic_t wchar_t wint_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5
+$as_echo_n "checking for $gltype integer literal suffix... " >&6; }
+if { as_var=gl_cv_type_${gltype}_suffix; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval gl_cv_type_${gltype}_suffix=no
+       eval result=\$gl_cv_type_${gltype}_signed
+       if test "$result" = yes; then
+         glsufu=
+       else
+         glsufu=u
+       fi
+       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
+         case $glsuf in
+           '')  gltype1='int';;
+           l)   gltype1='long int';;
+           ll)  gltype1='long long int';;
+           i64) gltype1='__int64';;
+           u)   gltype1='unsigned int';;
+           ul)  gltype1='unsigned long int';;
+           ull) gltype1='unsigned long long int';;
+           ui64)gltype1='unsigned __int64';;
+         esac
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+              extern $gltype foo;
+              extern $gltype1 foo;
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval gl_cv_type_${gltype}_suffix=\$glsuf
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         eval result=\$gl_cv_type_${gltype}_suffix
+         test "$result" != no && break
+       done
+fi
+eval ac_res=\$gl_cv_type_${gltype}_suffix
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    eval result=\$gl_cv_type_${gltype}_suffix
+    test "$result" = no && result=
+    eval ${GLTYPE}_SUFFIX=\$result
+    cat >>confdefs.h <<_ACEOF
+#define ${GLTYPE}_SUFFIX $result
+_ACEOF
+
+  done
+
+
+
+          if test $BITSIZEOF_WINT_T -lt 32; then
+    BITSIZEOF_WINT_T=32
+  fi
+
+    STDINT_H=stdint.h
+  fi
+
+   if test -n "$STDINT_H"; then
+  GL_GENERATE_STDINT_H_TRUE=
+  GL_GENERATE_STDINT_H_FALSE='#'
+else
+  GL_GENERATE_STDINT_H_TRUE='#'
+  GL_GENERATE_STDINT_H_FALSE=
+fi
+
+
+
+
+
+
+
+
+  GNULIB_IMAXABS=0;
+  GNULIB_IMAXDIV=0;
+  GNULIB_STRTOIMAX=0;
+  GNULIB_STRTOUMAX=0;
+    HAVE_DECL_IMAXABS=1;
+  HAVE_DECL_IMAXDIV=1;
+  HAVE_DECL_STRTOIMAX=1;
+  HAVE_DECL_STRTOUMAX=1;
+  REPLACE_STRTOIMAX=0;
+  INT32_MAX_LT_INTMAX_MAX=1;
+  INT64_MAX_EQ_LONG_MAX='defined _LP64';
+  PRI_MACROS_BROKEN=0;
+  PRIPTR_PREFIX=__PRIPTR_PREFIX;
+  UINT32_MAX_LT_UINTMAX_MAX=1;
+  UINT64_MAX_EQ_ULONG_MAX='defined _LP64';
+
+
+
+
+  :
+
+
+
+
+
+
+
+
+
+
+
+
+
+  :
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_inttypes_h='<'inttypes.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <inttypes.h>" >&5
+$as_echo_n "checking absolute name of <inttypes.h>... " >&6; }
+if test "${gl_cv_next_inttypes_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_inttypes_h = yes; then
+
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <inttypes.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'inttypes.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_inttypes_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+          else
+               gl_cv_next_inttypes_h='<'inttypes.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_inttypes_h" >&5
+$as_echo "$gl_cv_next_inttypes_h" >&6; }
+     fi
+     NEXT_INTTYPES_H=$gl_cv_next_inttypes_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'inttypes.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_inttypes_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+    for gl_func in imaxabs imaxdiv strtoimax strtoumax; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <inttypes.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    eval as_val=\$$as_gl_Symbol
+   if test "x$as_val" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+
+  for ac_header in inttypes.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default"
+if test "x$ac_cv_header_inttypes_h" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_INTTYPES_H 1
+_ACEOF
+
+fi
+
+done
+
+  if test $ac_cv_header_inttypes_h = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the inttypes.h PRIxNN macros are broken" >&5
+$as_echo_n "checking whether the inttypes.h PRIxNN macros are broken... " >&6; }
+if test "${gt_cv_inttypes_pri_broken+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <inttypes.h>
+#ifdef PRId32
+char *p = PRId32;
+#endif
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gt_cv_inttypes_pri_broken=no
+else
+  gt_cv_inttypes_pri_broken=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_inttypes_pri_broken" >&5
+$as_echo "$gt_cv_inttypes_pri_broken" >&6; }
+  fi
+  if test "$gt_cv_inttypes_pri_broken" = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define PRI_MACROS_BROKEN 1
+_ACEOF
+
+    PRI_MACROS_BROKEN=1
+  else
+    PRI_MACROS_BROKEN=0
+  fi
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5
+$as_echo_n "checking for nl_langinfo and CODESET... " >&6; }
+if test "${am_cv_langinfo_codeset+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <langinfo.h>
+int
+main ()
+{
+char* cs = nl_langinfo(CODESET); return !cs;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  am_cv_langinfo_codeset=yes
+else
+  am_cv_langinfo_codeset=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5
+$as_echo "$am_cv_langinfo_codeset" >&6; }
+  if test $am_cv_langinfo_codeset = yes; then
+
+$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h
+
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  :
+
+
+
+
+
+
+  :
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5
+$as_echo_n "checking for working fcntl.h... " >&6; }
+if test "${gl_cv_header_working_fcntl_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  gl_cv_header_working_fcntl_h=cross-compiling
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+           #include <sys/stat.h>
+           #if HAVE_UNISTD_H
+           # include <unistd.h>
+           #else /* on Windows with MSVC */
+           # include <io.h>
+           # include <stdlib.h>
+           # defined sleep(n) _sleep ((n) * 1000)
+           #endif
+           #include <fcntl.h>
+           #ifndef O_NOATIME
+            #define O_NOATIME 0
+           #endif
+           #ifndef O_NOFOLLOW
+            #define O_NOFOLLOW 0
+           #endif
+           static int const constants[] =
+            {
+              O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
+              O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
+            };
+
+int
+main ()
+{
+
+            int result = !constants;
+            #if HAVE_SYMLINK
+            {
+              static char const sym[] = "conftest.sym";
+              if (symlink (".", sym) != 0)
+                result |= 2;
+              else
+                {
+                  int fd = open (sym, O_RDONLY | O_NOFOLLOW);
+                  if (fd >= 0)
+                    {
+                      close (fd);
+                      result |= 4;
+                    }
+                }
+              unlink (sym);
+            }
+            #endif
+            {
+              static char const file[] = "confdefs.h";
+              int fd = open (file, O_RDONLY | O_NOATIME);
+              if (fd < 0)
+                result |= 8;
+              else
+                {
+                  struct stat st0;
+                  if (fstat (fd, &st0) != 0)
+                    result |= 16;
+                  else
+                    {
+                      char c;
+                      sleep (1);
+                      if (read (fd, &c, 1) != 1)
+                        result |= 24;
+                      else
+                        {
+                          if (close (fd) != 0)
+                            result |= 32;
+                          else
+                            {
+                              struct stat st1;
+                              if (stat (file, &st1) != 0)
+                                result |= 40;
+                              else
+                                if (st0.st_atime != st1.st_atime)
+                                  result |= 64;
+                            }
+                        }
+                    }
+                }
+            }
+            return result;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_header_working_fcntl_h=yes
+else
+  case $? in #(
+        4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
+        64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
+        68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
+         *) gl_cv_header_working_fcntl_h='no';;
+        esac
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5
+$as_echo "$gl_cv_header_working_fcntl_h" >&6; }
+
+  case $gl_cv_header_working_fcntl_h in #(
+  *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
+  *) ac_val=1;;
+  esac
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_WORKING_O_NOATIME $ac_val
+_ACEOF
+
+
+  case $gl_cv_header_working_fcntl_h in #(
+  *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
+  *) ac_val=1;;
+  esac
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_WORKING_O_NOFOLLOW $ac_val
+_ACEOF
+
+
+
+      ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default"
+if test "x$ac_cv_have_decl_getc_unlocked" = x""yes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl
+_ACEOF
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library >= 2.1 or uClibc" >&5
+$as_echo_n "checking whether we are using the GNU C Library >= 2.1 or uClibc... " >&6; }
+if test "${ac_cv_gnu_library_2_1+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+  Lucky GNU user
+ #endif
+#endif
+#ifdef __UCLIBC__
+ Lucky user
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Lucky" >/dev/null 2>&1; then :
+  ac_cv_gnu_library_2_1=yes
+else
+  ac_cv_gnu_library_2_1=no
+fi
+rm -f conftest*
+
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5
+$as_echo "$ac_cv_gnu_library_2_1" >&6; }
+
+    GLIBC21="$ac_cv_gnu_library_2_1"
+
+
+
+  GNULIB_BTOWC=0;
+  GNULIB_WCTOB=0;
+  GNULIB_MBSINIT=0;
+  GNULIB_MBRTOWC=0;
+  GNULIB_MBRLEN=0;
+  GNULIB_MBSRTOWCS=0;
+  GNULIB_MBSNRTOWCS=0;
+  GNULIB_WCRTOMB=0;
+  GNULIB_WCSRTOMBS=0;
+  GNULIB_WCSNRTOMBS=0;
+  GNULIB_WCWIDTH=0;
+  GNULIB_WMEMCHR=0;
+  GNULIB_WMEMCMP=0;
+  GNULIB_WMEMCPY=0;
+  GNULIB_WMEMMOVE=0;
+  GNULIB_WMEMSET=0;
+  GNULIB_WCSLEN=0;
+  GNULIB_WCSNLEN=0;
+  GNULIB_WCSCPY=0;
+  GNULIB_WCPCPY=0;
+  GNULIB_WCSNCPY=0;
+  GNULIB_WCPNCPY=0;
+  GNULIB_WCSCAT=0;
+  GNULIB_WCSNCAT=0;
+  GNULIB_WCSCMP=0;
+  GNULIB_WCSNCMP=0;
+  GNULIB_WCSCASECMP=0;
+  GNULIB_WCSNCASECMP=0;
+  GNULIB_WCSCOLL=0;
+  GNULIB_WCSXFRM=0;
+  GNULIB_WCSDUP=0;
+  GNULIB_WCSCHR=0;
+  GNULIB_WCSRCHR=0;
+  GNULIB_WCSCSPN=0;
+  GNULIB_WCSSPN=0;
+  GNULIB_WCSPBRK=0;
+  GNULIB_WCSSTR=0;
+  GNULIB_WCSTOK=0;
+  GNULIB_WCSWIDTH=0;
+    HAVE_BTOWC=1;
+  HAVE_MBSINIT=1;
+  HAVE_MBRTOWC=1;
+  HAVE_MBRLEN=1;
+  HAVE_MBSRTOWCS=1;
+  HAVE_MBSNRTOWCS=1;
+  HAVE_WCRTOMB=1;
+  HAVE_WCSRTOMBS=1;
+  HAVE_WCSNRTOMBS=1;
+  HAVE_WMEMCHR=1;
+  HAVE_WMEMCMP=1;
+  HAVE_WMEMCPY=1;
+  HAVE_WMEMMOVE=1;
+  HAVE_WMEMSET=1;
+  HAVE_WCSLEN=1;
+  HAVE_WCSNLEN=1;
+  HAVE_WCSCPY=1;
+  HAVE_WCPCPY=1;
+  HAVE_WCSNCPY=1;
+  HAVE_WCPNCPY=1;
+  HAVE_WCSCAT=1;
+  HAVE_WCSNCAT=1;
+  HAVE_WCSCMP=1;
+  HAVE_WCSNCMP=1;
+  HAVE_WCSCASECMP=1;
+  HAVE_WCSNCASECMP=1;
+  HAVE_WCSCOLL=1;
+  HAVE_WCSXFRM=1;
+  HAVE_WCSDUP=1;
+  HAVE_WCSCHR=1;
+  HAVE_WCSRCHR=1;
+  HAVE_WCSCSPN=1;
+  HAVE_WCSSPN=1;
+  HAVE_WCSPBRK=1;
+  HAVE_WCSSTR=1;
+  HAVE_WCSTOK=1;
+  HAVE_WCSWIDTH=1;
+  HAVE_DECL_WCTOB=1;
+  HAVE_DECL_WCWIDTH=1;
+  REPLACE_MBSTATE_T=0;
+  REPLACE_BTOWC=0;
+  REPLACE_WCTOB=0;
+  REPLACE_MBSINIT=0;
+  REPLACE_MBRTOWC=0;
+  REPLACE_MBRLEN=0;
+  REPLACE_MBSRTOWCS=0;
+  REPLACE_MBSNRTOWCS=0;
+  REPLACE_WCRTOMB=0;
+  REPLACE_WCSRTOMBS=0;
+  REPLACE_WCSNRTOMBS=0;
+  REPLACE_WCWIDTH=0;
+  REPLACE_WCSWIDTH=0;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional japanese locale" >&5
+$as_echo_n "checking for a traditional japanese locale... " >&6; }
+if test "${gt_cv_locale_ja+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main ()
+{
+  const char *p;
+  /* Check whether the given locale name is recognized by the system.  */
+#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+  /* On native Windows, setlocale(category, "") looks at the system settings,
+     not at the environment variables.  Also, when an encoding suffix such
+     as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+     category of the locale to "C".  */
+  if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+      || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+    return 1;
+#else
+  if (setlocale (LC_ALL, "") == NULL) return 1;
+#endif
+  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+     On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+     some unit tests fail.
+     On MirBSD 10, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "UTF-8".  */
+#if HAVE_LANGINFO_CODESET
+  {
+    const char *cs = nl_langinfo (CODESET);
+    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+        || strcmp (cs, "UTF-8") == 0)
+      return 1;
+  }
+#endif
+#ifdef __CYGWIN__
+  /* On Cygwin, avoid locale names without encoding suffix, because the
+     locale_charset() function relies on the encoding suffix.  Note that
+     LC_ALL is set on the command line.  */
+  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+#endif
+  /* Check whether MB_CUR_MAX is > 1.  This excludes the dysfunctional locales
+     on Cygwin 1.5.x.  */
+  if (MB_CUR_MAX == 1)
+    return 1;
+  /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
+     This excludes the UTF-8 encoding (except on MirBSD).  */
+  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+  if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
+  for (p = buf; *p != '\0'; p++)
+    if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
+      return 1;
+  return 0;
+}
+
+_ACEOF
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest$ac_exeext; then
+      case "$host_os" in
+        # Handle native Windows specially, because there setlocale() interprets
+        # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+        # "fr" or "fra" as "French" or "French_France.1252",
+        # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+        # "ja" as "Japanese" or "Japanese_Japan.932",
+        # and similar.
+        mingw*)
+          # Note that on native Windows, the Japanese locale is
+          # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we
+          # cannot use it here.
+          gt_cv_locale_ja=none
+          ;;
+        *)
+          # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+          # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+          # configure script would override the LC_ALL setting. Likewise for
+          # LC_CTYPE, which is also set at the beginning of the configure script.
+          # Test for the AIX locale name.
+          if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_ja=ja_JP
+          else
+            # Test for the locale name with explicit encoding suffix.
+            if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+              gt_cv_locale_ja=ja_JP.EUC-JP
+            else
+              # Test for the HP-UX, OSF/1, NetBSD locale name.
+              if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                gt_cv_locale_ja=ja_JP.eucJP
+              else
+                # Test for the IRIX, FreeBSD locale name.
+                if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                  gt_cv_locale_ja=ja_JP.EUC
+                else
+                  # Test for the Solaris 7 locale name.
+                  if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                    gt_cv_locale_ja=ja
+                  else
+                    # Special test for NetBSD 1.6.
+                    if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then
+                      gt_cv_locale_ja=ja_JP.eucJP
+                    else
+                      # None found.
+                      gt_cv_locale_ja=none
+                    fi
+                  fi
+                fi
+              fi
+            fi
+          fi
+          ;;
+      esac
+    fi
+    rm -fr conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_ja" >&5
+$as_echo "$gt_cv_locale_ja" >&6; }
+  LOCALE_JA=$gt_cv_locale_ja
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a transitional chinese locale" >&5
+$as_echo_n "checking for a transitional chinese locale... " >&6; }
+if test "${gt_cv_locale_zh_CN+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main ()
+{
+  const char *p;
+  /* Check whether the given locale name is recognized by the system.  */
+#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+  /* On native Windows, setlocale(category, "") looks at the system settings,
+     not at the environment variables.  Also, when an encoding suffix such
+     as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+     category of the locale to "C".  */
+  if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+      || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+    return 1;
+#else
+  if (setlocale (LC_ALL, "") == NULL) return 1;
+#endif
+  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+     On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+     some unit tests fail.
+     On MirBSD 10, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "UTF-8".  */
+#if HAVE_LANGINFO_CODESET
+  {
+    const char *cs = nl_langinfo (CODESET);
+    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+        || strcmp (cs, "UTF-8") == 0)
+      return 1;
+  }
+#endif
+#ifdef __CYGWIN__
+  /* On Cygwin, avoid locale names without encoding suffix, because the
+     locale_charset() function relies on the encoding suffix.  Note that
+     LC_ALL is set on the command line.  */
+  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+#endif
+  /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
+     This excludes the UTF-8 encoding (except on MirBSD).  */
+  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+  if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
+  for (p = buf; *p != '\0'; p++)
+    if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
+      return 1;
+  /* Check whether a typical GB18030 multibyte sequence is recognized as a
+     single wide character.  This excludes the GB2312 and GBK encodings.  */
+  if (mblen ("\203\062\332\066", 5) != 4)
+    return 1;
+  return 0;
+}
+
+_ACEOF
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest$ac_exeext; then
+      case "$host_os" in
+        # Handle native Windows specially, because there setlocale() interprets
+        # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+        # "fr" or "fra" as "French" or "French_France.1252",
+        # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+        # "ja" as "Japanese" or "Japanese_Japan.932",
+        # and similar.
+        mingw*)
+          # Test for the hypothetical native Windows locale name.
+          if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_zh_CN=Chinese_China.54936
+          else
+            # None found.
+            gt_cv_locale_zh_CN=none
+          fi
+          ;;
+        solaris2.8)
+          # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are
+          # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK.
+          # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core.
+          gt_cv_locale_zh_CN=none
+          ;;
+        *)
+          # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+          # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+          # configure script would override the LC_ALL setting. Likewise for
+          # LC_CTYPE, which is also set at the beginning of the configure script.
+          # Test for the locale name without encoding suffix.
+          if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_zh_CN=zh_CN
+          else
+            # Test for the locale name with explicit encoding suffix.
+            if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+              gt_cv_locale_zh_CN=zh_CN.GB18030
+            else
+              # None found.
+              gt_cv_locale_zh_CN=none
+            fi
+          fi
+          ;;
+      esac
+    else
+      # If there was a link error, due to mblen(), the system is so old that
+      # it certainly doesn't have a chinese locale.
+      gt_cv_locale_zh_CN=none
+    fi
+    rm -fr conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_zh_CN" >&5
+$as_echo "$gt_cv_locale_zh_CN" >&6; }
+  LOCALE_ZH_CN=$gt_cv_locale_zh_CN
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5
+$as_echo_n "checking for a french Unicode locale... " >&6; }
+if test "${gt_cv_locale_fr_utf8+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+  /* On BeOS and Haiku, locales are not implemented in libc.  Rather, libintl
+     imitates locale dependent behaviour by looking at the environment
+     variables, and all locales use the UTF-8 encoding.  */
+#if !(defined __BEOS__ || defined __HAIKU__)
+  /* Check whether the given locale name is recognized by the system.  */
+# if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+  /* On native Windows, setlocale(category, "") looks at the system settings,
+     not at the environment variables.  Also, when an encoding suffix such
+     as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+     category of the locale to "C".  */
+  if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+      || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+    return 1;
+# else
+  if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+     On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+     some unit tests fail.  */
+# if HAVE_LANGINFO_CODESET
+  {
+    const char *cs = nl_langinfo (CODESET);
+    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
+      return 1;
+  }
+# endif
+# ifdef __CYGWIN__
+  /* On Cygwin, avoid locale names without encoding suffix, because the
+     locale_charset() function relies on the encoding suffix.  Note that
+     LC_ALL is set on the command line.  */
+  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+  /* Check whether in the abbreviation of the second month, the second
+     character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is
+     two bytes long, with UTF-8 encoding.  */
+  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+  if (strftime (buf, sizeof (buf), "%b", &t) < 4
+      || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v')
+    return 1;
+#endif
+#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy.  */
+  /* Check whether the decimal separator is a comma.
+     On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+     are nl_langinfo(RADIXCHAR) are both ".".  */
+  if (localeconv () ->decimal_point[0] != ',') return 1;
+#endif
+  return 0;
+}
+
+_ACEOF
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest$ac_exeext; then
+      case "$host_os" in
+        # Handle native Windows specially, because there setlocale() interprets
+        # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+        # "fr" or "fra" as "French" or "French_France.1252",
+        # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+        # "ja" as "Japanese" or "Japanese_Japan.932",
+        # and similar.
+        mingw*)
+          # Test for the hypothetical native Windows locale name.
+          if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_fr_utf8=French_France.65001
+          else
+            # None found.
+            gt_cv_locale_fr_utf8=none
+          fi
+          ;;
+        *)
+          # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+          # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+          # configure script would override the LC_ALL setting. Likewise for
+          # LC_CTYPE, which is also set at the beginning of the configure script.
+          # Test for the usual locale name.
+          if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_fr_utf8=fr_FR
+          else
+            # Test for the locale name with explicit encoding suffix.
+            if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+              gt_cv_locale_fr_utf8=fr_FR.UTF-8
+            else
+              # Test for the Solaris 7 locale name.
+              if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                gt_cv_locale_fr_utf8=fr.UTF-8
+              else
+                # None found.
+                gt_cv_locale_fr_utf8=none
+              fi
+            fi
+          fi
+          ;;
+      esac
+    fi
+    rm -fr conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5
+$as_echo "$gt_cv_locale_fr_utf8" >&6; }
+  LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5
+$as_echo_n "checking for a traditional french locale... " >&6; }
+if test "${gt_cv_locale_fr+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+  /* Check whether the given locale name is recognized by the system.  */
+#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+  /* On native Windows, setlocale(category, "") looks at the system settings,
+     not at the environment variables.  Also, when an encoding suffix such
+     as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+     category of the locale to "C".  */
+  if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+      || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+    return 1;
+#else
+  if (setlocale (LC_ALL, "") == NULL) return 1;
+#endif
+  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+     On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+     some unit tests fail.
+     On MirBSD 10, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "UTF-8".  */
+#if HAVE_LANGINFO_CODESET
+  {
+    const char *cs = nl_langinfo (CODESET);
+    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+        || strcmp (cs, "UTF-8") == 0)
+      return 1;
+  }
+#endif
+#ifdef __CYGWIN__
+  /* On Cygwin, avoid locale names without encoding suffix, because the
+     locale_charset() function relies on the encoding suffix.  Note that
+     LC_ALL is set on the command line.  */
+  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+#endif
+  /* Check whether in the abbreviation of the second month, the second
+     character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only
+     one byte long. This excludes the UTF-8 encoding.  */
+  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+  if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1;
+#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy.  */
+  /* Check whether the decimal separator is a comma.
+     On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+     are nl_langinfo(RADIXCHAR) are both ".".  */
+  if (localeconv () ->decimal_point[0] != ',') return 1;
+#endif
+  return 0;
+}
+
+_ACEOF
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest$ac_exeext; then
+      case "$host_os" in
+        # Handle native Windows specially, because there setlocale() interprets
+        # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+        # "fr" or "fra" as "French" or "French_France.1252",
+        # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+        # "ja" as "Japanese" or "Japanese_Japan.932",
+        # and similar.
+        mingw*)
+          # Test for the native Windows locale name.
+          if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_fr=French_France.1252
+          else
+            # None found.
+            gt_cv_locale_fr=none
+          fi
+          ;;
+        *)
+          # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+          # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+          # configure script would override the LC_ALL setting. Likewise for
+          # LC_CTYPE, which is also set at the beginning of the configure script.
+          # Test for the usual locale name.
+          if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_fr=fr_FR
+          else
+            # Test for the locale name with explicit encoding suffix.
+            if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+              gt_cv_locale_fr=fr_FR.ISO-8859-1
+            else
+              # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name.
+              if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                gt_cv_locale_fr=fr_FR.ISO8859-1
+              else
+                # Test for the HP-UX locale name.
+                if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                  gt_cv_locale_fr=fr_FR.iso88591
+                else
+                  # Test for the Solaris 7 locale name.
+                  if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                    gt_cv_locale_fr=fr
+                  else
+                    # None found.
+                    gt_cv_locale_fr=none
+                  fi
+                fi
+              fi
+            fi
+          fi
+          ;;
+      esac
+    fi
+    rm -fr conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5
+$as_echo "$gt_cv_locale_fr" >&6; }
+  LOCALE_FR=$gt_cv_locale_fr
+
+
+
+
+
+
+
+
+
+
+
+
+
+  GNULIB_FFSL=0;
+  GNULIB_FFSLL=0;
+  GNULIB_MEMCHR=0;
+  GNULIB_MEMMEM=0;
+  GNULIB_MEMPCPY=0;
+  GNULIB_MEMRCHR=0;
+  GNULIB_RAWMEMCHR=0;
+  GNULIB_STPCPY=0;
+  GNULIB_STPNCPY=0;
+  GNULIB_STRCHRNUL=0;
+  GNULIB_STRDUP=0;
+  GNULIB_STRNCAT=0;
+  GNULIB_STRNDUP=0;
+  GNULIB_STRNLEN=0;
+  GNULIB_STRPBRK=0;
+  GNULIB_STRSEP=0;
+  GNULIB_STRSTR=0;
+  GNULIB_STRCASESTR=0;
+  GNULIB_STRTOK_R=0;
+  GNULIB_MBSLEN=0;
+  GNULIB_MBSNLEN=0;
+  GNULIB_MBSCHR=0;
+  GNULIB_MBSRCHR=0;
+  GNULIB_MBSSTR=0;
+  GNULIB_MBSCASECMP=0;
+  GNULIB_MBSNCASECMP=0;
+  GNULIB_MBSPCASECMP=0;
+  GNULIB_MBSCASESTR=0;
+  GNULIB_MBSCSPN=0;
+  GNULIB_MBSPBRK=0;
+  GNULIB_MBSSPN=0;
+  GNULIB_MBSSEP=0;
+  GNULIB_MBSTOK_R=0;
+  GNULIB_STRERROR=0;
+  GNULIB_STRERROR_R=0;
+  GNULIB_STRSIGNAL=0;
+  GNULIB_STRVERSCMP=0;
+  HAVE_MBSLEN=0;
+    HAVE_FFSL=1;
+  HAVE_FFSLL=1;
+  HAVE_MEMCHR=1;
+  HAVE_DECL_MEMMEM=1;
+  HAVE_MEMPCPY=1;
+  HAVE_DECL_MEMRCHR=1;
+  HAVE_RAWMEMCHR=1;
+  HAVE_STPCPY=1;
+  HAVE_STPNCPY=1;
+  HAVE_STRCHRNUL=1;
+  HAVE_DECL_STRDUP=1;
+  HAVE_DECL_STRNDUP=1;
+  HAVE_DECL_STRNLEN=1;
+  HAVE_STRPBRK=1;
+  HAVE_STRSEP=1;
+  HAVE_STRCASESTR=1;
+  HAVE_DECL_STRTOK_R=1;
+  HAVE_DECL_STRERROR_R=1;
+  HAVE_DECL_STRSIGNAL=1;
+  HAVE_STRVERSCMP=1;
+  REPLACE_MEMCHR=0;
+  REPLACE_MEMMEM=0;
+  REPLACE_STPNCPY=0;
+  REPLACE_STRDUP=0;
+  REPLACE_STRSTR=0;
+  REPLACE_STRCASESTR=0;
+  REPLACE_STRCHRNUL=0;
+  REPLACE_STRERROR=0;
+  REPLACE_STRERROR_R=0;
+  REPLACE_STRNCAT=0;
+  REPLACE_STRNDUP=0;
+  REPLACE_STRNLEN=0;
+  REPLACE_STRSIGNAL=0;
+  REPLACE_STRTOK_R=0;
+  UNDEFINE_STRTOK_R=0;
+
+
+
+
+
+  # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it
+  # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is
+  # irrelevant for anonymous mappings.
+  ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap"
+if test "x$ac_cv_func_mmap" = x""yes; then :
+  gl_have_mmap=yes
+else
+  gl_have_mmap=no
+fi
+
+
+  # Try to allow MAP_ANONYMOUS.
+  gl_have_mmap_anonymous=no
+  if test $gl_have_mmap = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MAP_ANONYMOUS" >&5
+$as_echo_n "checking for MAP_ANONYMOUS... " >&6; }
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <sys/mman.h>
+#ifdef MAP_ANONYMOUS
+    I cannot identify this map
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "I cannot identify this map" >/dev/null 2>&1; then :
+  gl_have_mmap_anonymous=yes
+fi
+rm -f conftest*
+
+    if test $gl_have_mmap_anonymous != yes; then
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <sys/mman.h>
+#ifdef MAP_ANON
+    I cannot identify this map
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "I cannot identify this map" >/dev/null 2>&1; then :
+
+$as_echo "#define MAP_ANONYMOUS MAP_ANON" >>confdefs.h
+
+         gl_have_mmap_anonymous=yes
+fi
+rm -f conftest*
+
+    fi
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_have_mmap_anonymous" >&5
+$as_echo "$gl_have_mmap_anonymous" >&6; }
+    if test $gl_have_mmap_anonymous = yes; then
+
+$as_echo "#define HAVE_MAP_ANONYMOUS 1" >>confdefs.h
+
+    fi
+  fi
+
+
+  :
+
+
+
+
+
+
+  :
+
+
+
+
+
+
+
+
+  if test $HAVE_MEMCHR = 1; then
+    # Detect platform-specific bugs in some versions of glibc:
+    # memchr should not dereference anything with length 0
+    #   http://bugzilla.redhat.com/499689
+    # memchr should not dereference overestimated length after a match
+    #   http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737
+    #   http://sourceware.org/bugzilla/show_bug.cgi?id=10162
+    # Assume that memchr works on platforms that lack mprotect.
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memchr works" >&5
+$as_echo_n "checking whether memchr works... " >&6; }
+if test "${gl_cv_func_memchr_works+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+         gl_cv_func_memchr_works="guessing no"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <string.h>
+#if HAVE_SYS_MMAN_H
+# include <fcntl.h>
+# include <unistd.h>
+# include <sys/types.h>
+# include <sys/mman.h>
+# ifndef MAP_FILE
+#  define MAP_FILE 0
+# endif
+#endif
+
+int
+main ()
+{
+
+  int result = 0;
+  char *fence = NULL;
+#if HAVE_SYS_MMAN_H && HAVE_MPROTECT
+# if HAVE_MAP_ANONYMOUS
+  const int flags = MAP_ANONYMOUS | MAP_PRIVATE;
+  const int fd = -1;
+# else /* !HAVE_MAP_ANONYMOUS */
+  const int flags = MAP_FILE | MAP_PRIVATE;
+  int fd = open ("/dev/zero", O_RDONLY, 0666);
+  if (fd >= 0)
+# endif
+    {
+      int pagesize = getpagesize ();
+      char *two_pages =
+        (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE,
+                       flags, fd, 0);
+      if (two_pages != (char *)(-1)
+          && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0)
+        fence = two_pages + pagesize;
+    }
+#endif
+  if (fence)
+    {
+      if (memchr (fence, 0, 0))
+        result |= 1;
+      strcpy (fence - 9, "12345678");
+      if (memchr (fence - 9, 0, 79) != fence - 1)
+        result |= 2;
+      if (memchr (fence - 1, 0, 3) != fence - 1)
+        result |= 4;
+    }
+  return result;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_memchr_works=yes
+else
+  gl_cv_func_memchr_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_memchr_works" >&5
+$as_echo "$gl_cv_func_memchr_works" >&6; }
+    if test "$gl_cv_func_memchr_works" != yes; then
+      REPLACE_MEMCHR=1
+    fi
+  fi
+
+
+      ac_fn_c_check_decl "$LINENO" "memmem" "ac_cv_have_decl_memmem" "$ac_includes_default"
+if test "x$ac_cv_have_decl_memmem" = x""yes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MEMMEM $ac_have_decl
+_ACEOF
+
+
+
+
+
+
+  for ac_func in memmem
+do :
+  ac_fn_c_check_func "$LINENO" "memmem" "ac_cv_func_memmem"
+if test "x$ac_cv_func_memmem" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_MEMMEM 1
+_ACEOF
+
+fi
+done
+
+  if test $ac_cv_func_memmem = yes; then
+    HAVE_MEMMEM=1
+  else
+    HAVE_MEMMEM=0
+  fi
+
+  :
+
+
+
+
+
+  if test $ac_cv_have_decl_memmem = no; then
+    HAVE_DECL_MEMMEM=0
+  else
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memmem works" >&5
+$as_echo_n "checking whether memmem works... " >&6; }
+if test "${gl_cv_func_memmem_works_always+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+                                      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef __GNU_LIBRARY__
+ #include <features.h>
+ #if ((__GLIBC__ == 2 && ((__GLIBC_MINOR > 0 && __GLIBC_MINOR__ < 9) \
+                          || __GLIBC_MINOR__ > 12)) \
+      || (__GLIBC__ > 2)) \
+     || defined __UCLIBC__
+  Lucky user
+ #endif
+#elif defined __CYGWIN__
+ #include <cygwin/version.h>
+ #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7)
+  Lucky user
+ #endif
+#else
+  Lucky user
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Lucky user" >/dev/null 2>&1; then :
+  gl_cv_func_memmem_works_always="guessing yes"
+else
+  gl_cv_func_memmem_works_always="guessing no"
+fi
+rm -f conftest*
+
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <string.h> /* for memmem */
+#define P "_EF_BF_BD"
+#define HAYSTACK "F_BD_CE_BD" P P P P "_C3_88_20" P P P "_C3_A7_20" P
+#define NEEDLE P P P P P
+
+int
+main ()
+{
+
+    int result = 0;
+    if (memmem (HAYSTACK, strlen (HAYSTACK), NEEDLE, strlen (NEEDLE)))
+      result |= 1;
+    /* Check for empty needle behavior.  */
+    {
+      const char *haystack = "AAA";
+      if (memmem (haystack, 3, NULL, 0) != haystack)
+        result |= 2;
+    }
+    return result;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_memmem_works_always=yes
+else
+  gl_cv_func_memmem_works_always=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_memmem_works_always" >&5
+$as_echo "$gl_cv_func_memmem_works_always" >&6; }
+    case "$gl_cv_func_memmem_works_always" in
+      *yes) ;;
+      *)
+        REPLACE_MEMMEM=1
+        ;;
+    esac
+  fi
+  :
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5
+$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
+if test "${ac_cv_header_stdbool_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+             #include <stdbool.h>
+             #ifndef bool
+              "error: bool is not defined"
+             #endif
+             #ifndef false
+              "error: false is not defined"
+             #endif
+             #if false
+              "error: false is not 0"
+             #endif
+             #ifndef true
+              "error: true is not defined"
+             #endif
+             #if true != 1
+              "error: true is not 1"
+             #endif
+             #ifndef __bool_true_false_are_defined
+              "error: __bool_true_false_are_defined is not defined"
+             #endif
+
+             struct s { _Bool s: 1; _Bool t; } s;
+
+             char a[true == 1 ? 1 : -1];
+             char b[false == 0 ? 1 : -1];
+             char c[__bool_true_false_are_defined == 1 ? 1 : -1];
+             char d[(bool) 0.5 == true ? 1 : -1];
+             /* See body of main program for 'e'.  */
+             char f[(_Bool) 0.0 == false ? 1 : -1];
+             char g[true];
+             char h[sizeof (_Bool)];
+             char i[sizeof s.t];
+             enum { j = false, k = true, l = false * true, m = true * 256 };
+             /* The following fails for
+                HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
+             _Bool n[m];
+             char o[sizeof n == m * sizeof n[0] ? 1 : -1];
+             char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
+             /* Catch a bug in an HP-UX C compiler.  See
+                http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+                http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+              */
+             _Bool q = true;
+             _Bool *pq = &q;
+
+int
+main ()
+{
+
+             bool e = &s;
+             *pq |= q;
+             *pq |= ! q;
+             /* Refer to every declared value, to avoid compiler optimizations.  */
+             return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
+                     + !m + !n + !o + !p + !q + !pq);
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdbool_h=yes
+else
+  ac_cv_header_stdbool_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5
+$as_echo "$ac_cv_header_stdbool_h" >&6; }
+   ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
+if test "x$ac_cv_type__Bool" = x""yes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE__BOOL 1
+_ACEOF
+
+
+fi
+
+
+
+    REPLACE_NULL=0;
+  HAVE_WCHAR_T=1;
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5
+$as_echo_n "checking for wchar_t... " >&6; }
+if test "${gt_cv_c_wchar_t+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stddef.h>
+            wchar_t foo = (wchar_t)'\0';
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gt_cv_c_wchar_t=yes
+else
+  gt_cv_c_wchar_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5
+$as_echo "$gt_cv_c_wchar_t" >&6; }
+  if test $gt_cv_c_wchar_t = yes; then
+
+$as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h
+
+  fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
+$as_echo_n "checking for C/C++ restrict keyword... " >&6; }
+if test "${ac_cv_c_restrict+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_restrict=no
+   # The order here caters to the fact that C++ does not require restrict.
+   for ac_kw in __restrict __restrict__ _Restrict restrict; do
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+typedef int * int_ptr;
+	int foo (int_ptr $ac_kw ip) {
+	return ip[0];
+       }
+int
+main ()
+{
+int s[1];
+	int * $ac_kw t = s;
+	t[0] = 0;
+	return foo(t)
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_restrict=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+     test "$ac_cv_c_restrict" != no && break
+   done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5
+$as_echo "$ac_cv_c_restrict" >&6; }
+
+ case $ac_cv_c_restrict in
+   restrict) ;;
+   no) $as_echo "#define restrict /**/" >>confdefs.h
+ ;;
+   *)  cat >>confdefs.h <<_ACEOF
+#define restrict $ac_cv_c_restrict
+_ACEOF
+ ;;
+ esac
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_string_h='<'string.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <string.h>" >&5
+$as_echo_n "checking absolute name of <string.h>... " >&6; }
+if test "${gl_cv_next_string_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'string.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_string_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_string_h" >&5
+$as_echo "$gl_cv_next_string_h" >&6; }
+     fi
+     NEXT_STRING_H=$gl_cv_next_string_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'string.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_string_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STRING_H=$gl_next_as_first_directive
+
+
+
+
+
+
+    for gl_func in ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul      strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r      strerror_r strsignal strverscmp; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    eval as_val=\$$as_gl_Symbol
+   if test "x$as_val" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <wchar.h> uses 'inline' correctly" >&5
+$as_echo_n "checking whether <wchar.h> uses 'inline' correctly... " >&6; }
+if test "${gl_cv_header_wchar_h_correct_inline+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_cv_header_wchar_h_correct_inline=yes
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+       #define wcstod renamed_wcstod
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+extern int zero (void);
+int main () { return zero(); }
+
+_ACEOF
+     if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+       mv conftest.$ac_objext conftest1.$ac_objext
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+         #define wcstod renamed_wcstod
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int zero (void) { return 0; }
+
+_ACEOF
+       if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+         mv conftest.$ac_objext conftest2.$ac_objext
+         if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&5 2>&1; then
+           :
+         else
+           gl_cv_header_wchar_h_correct_inline=no
+         fi
+       fi
+     fi
+     rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_wchar_h_correct_inline" >&5
+$as_echo "$gl_cv_header_wchar_h_correct_inline" >&6; }
+  if test $gl_cv_header_wchar_h_correct_inline = no; then
+    as_fn_error "<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS).
+This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in
+C99 mode. You have four options:
+  - Add the flag -fgnu89-inline to CC and reconfigure, or
+  - Fix your include files, using parts of
+    <http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or
+  - Use a gcc version older than 4.3, or
+  - Don't use the flags -std=c99 or -std=gnu99.
+Configuration aborted." "$LINENO" 5
+  fi
+
+
+
+
+
+
+
+
+  :
+
+
+
+
+
+  if test $ac_cv_header_features_h = yes; then
+    HAVE_FEATURES_H=1
+  else
+    HAVE_FEATURES_H=0
+  fi
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5
+$as_echo_n "checking for wint_t... " >&6; }
+if test "${gt_cv_c_wint_t+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+            wint_t foo = (wchar_t)'\0';
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gt_cv_c_wint_t=yes
+else
+  gt_cv_c_wint_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5
+$as_echo "$gt_cv_c_wint_t" >&6; }
+  if test $gt_cv_c_wint_t = yes; then
+
+$as_echo "#define HAVE_WINT_T 1" >>confdefs.h
+
+  fi
+
+
+  GNULIB_ISWBLANK=0;
+  GNULIB_WCTYPE=0;
+  GNULIB_ISWCTYPE=0;
+  GNULIB_WCTRANS=0;
+  GNULIB_TOWCTRANS=0;
+    HAVE_ISWBLANK=1;
+  HAVE_WCTYPE_T=1;
+  HAVE_WCTRANS_T=1;
+  REPLACE_ISWBLANK=0;
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
+$as_echo_n "checking for inline... " >&6; }
+if test "${ac_cv_c_inline+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_inline=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
+$as_echo "$ac_cv_c_inline" >&6; }
+
+case $ac_cv_c_inline in
+  inline | yes) ;;
+  *)
+    case $ac_cv_c_inline in
+      no) ac_val=;;
+      *) ac_val=$ac_cv_c_inline;;
+    esac
+    cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+    ;;
+esac
+
+
+   if false; then
+  GL_COND_LIBTOOL_TRUE=
+  GL_COND_LIBTOOL_FALSE='#'
+else
+  GL_COND_LIBTOOL_TRUE='#'
+  GL_COND_LIBTOOL_FALSE=
+fi
+
+  gl_cond_libtool=false
+  gl_libdeps=
+  gl_ltlibdeps=
+  gl_m4_base='import/m4'
+
+
+
+
+
+
+
+
+
+  gl_source_base='import'
+
+
+  if test $ac_cv_func_alloca_works = no; then
+    :
+  fi
+
+  # Define an additional variable used in the Makefile substitution.
+  if test $ac_cv_working_alloca_h = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca as a compiler built-in" >&5
+$as_echo_n "checking for alloca as a compiler built-in... " >&6; }
+if test "${gl_cv_rpl_alloca+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#if defined __GNUC__ || defined _AIX || defined _MSC_VER
+        Need own alloca
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Need own alloca" >/dev/null 2>&1; then :
+  gl_cv_rpl_alloca=yes
+else
+  gl_cv_rpl_alloca=no
+fi
+rm -f conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_rpl_alloca" >&5
+$as_echo "$gl_cv_rpl_alloca" >&6; }
+    if test $gl_cv_rpl_alloca = yes; then
+
+$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
+
+      ALLOCA_H=alloca.h
+    else
+                  ALLOCA_H=
+    fi
+  else
+    ALLOCA_H=alloca.h
+  fi
+
+   if test -n "$ALLOCA_H"; then
+  GL_GENERATE_ALLOCA_H_TRUE=
+  GL_GENERATE_ALLOCA_H_FALSE='#'
+else
+  GL_GENERATE_ALLOCA_H_TRUE='#'
+  GL_GENERATE_ALLOCA_H_FALSE=
+fi
+
+
+
+          if test "x$datarootdir" = x; then
+    datarootdir='${datadir}'
+
+  fi
+    if test "x$docdir" = x; then
+    docdir='${datarootdir}/doc/${PACKAGE}'
+
+  fi
+    if test "x$htmldir" = x; then
+    htmldir='${docdir}'
+
+  fi
+  if test "x$dvidir" = x; then
+    dvidir='${docdir}'
+
+  fi
+  if test "x$pdfdir" = x; then
+    pdfdir='${docdir}'
+
+  fi
+  if test "x$psdir" = x; then
+    psdir='${docdir}'
+
+  fi
+  if test "x$lispdir" = x; then
+    lispdir='${datarootdir}/emacs/site-lisp'
+
+  fi
+  if test "x$localedir" = x; then
+    localedir='${datarootdir}/locale'
+
+  fi
+
+      pkglibexecdir='${libexecdir}/${PACKAGE}'
+
+
+
+
+
+
+
+  FNMATCH_H=
+  gl_fnmatch_required_lowercase=`
+    echo $gl_fnmatch_required | LC_ALL=C tr '[A-Z]' '[a-z]'
+  `
+  gl_fnmatch_cache_var="gl_cv_func_fnmatch_${gl_fnmatch_required_lowercase}"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working $gl_fnmatch_required fnmatch" >&5
+$as_echo_n "checking for working $gl_fnmatch_required fnmatch... " >&6; }
+if { as_var=$gl_fnmatch_cache_var; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+                           if test $gl_fnmatch_required = GNU; then
+       gl_fnmatch_gnu_start=
+       gl_fnmatch_gnu_end=
+     else
+       gl_fnmatch_gnu_start='#if 0'
+       gl_fnmatch_gnu_end='#endif'
+     fi
+     if test "$cross_compiling" = yes; then :
+  eval "$gl_fnmatch_cache_var=\"guessing no\""
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <fnmatch.h>
+            static int
+            y (char const *pattern, char const *string, int flags)
+            {
+              return fnmatch (pattern, string, flags) == 0;
+            }
+            static int
+            n (char const *pattern, char const *string, int flags)
+            {
+              return fnmatch (pattern, string, flags) == FNM_NOMATCH;
+            }
+
+int
+main ()
+{
+char const *Apat = 'A' < '\\\\' ? "[A-\\\\\\\\]" : "[\\\\\\\\-A]";
+            char const *apat = 'a' < '\\\\' ? "[a-\\\\\\\\]" : "[\\\\\\\\-a]";
+            static char const A_1[] = { 'A' - 1, 0 };
+            static char const A01[] = { 'A' + 1, 0 };
+            static char const a_1[] = { 'a' - 1, 0 };
+            static char const a01[] = { 'a' + 1, 0 };
+            static char const bs_1[] = { '\\\\' - 1, 0 };
+            static char const bs01[] = { '\\\\' + 1, 0 };
+            int result = 0;
+            if (!n ("a*", "", 0))
+              return 1;
+            if (!y ("a*", "abc", 0))
+              return 1;
+            if (!y ("[/b", "[/b", 0)) /*"]]"*/ /* glibc Bugzilla bug 12378 */
+              return 1;
+            if (!n ("d*/*1", "d/s/1", FNM_PATHNAME))
+              return 2;
+            if (!y ("a\\\\bc", "abc", 0))
+              return 3;
+            if (!n ("a\\\\bc", "abc", FNM_NOESCAPE))
+              return 3;
+            if (!y ("*x", ".x", 0))
+              return 4;
+            if (!n ("*x", ".x", FNM_PERIOD))
+              return 4;
+            if (!y (Apat, "\\\\", 0))
+              return 5;
+            if (!y (Apat, "A", 0))
+              return 5;
+            if (!y (apat, "\\\\", 0))
+              return 5;
+            if (!y (apat, "a", 0))
+              return 5;
+            if (!(n (Apat, A_1, 0) == ('A' < '\\\\')))
+              return 5;
+            if (!(n (apat, a_1, 0) == ('a' < '\\\\')))
+              return 5;
+            if (!(y (Apat, A01, 0) == ('A' < '\\\\')))
+              return 5;
+            if (!(y (apat, a01, 0) == ('a' < '\\\\')))
+              return 5;
+            if (!(y (Apat, bs_1, 0) == ('A' < '\\\\')))
+              return 5;
+            if (!(y (apat, bs_1, 0) == ('a' < '\\\\')))
+              return 5;
+            if (!(n (Apat, bs01, 0) == ('A' < '\\\\')))
+              return 5;
+            if (!(n (apat, bs01, 0) == ('a' < '\\\\')))
+              return 5;
+            $gl_fnmatch_gnu_start
+            if (!y ("xxXX", "xXxX", FNM_CASEFOLD))
+              result |= 8;
+            if (!y ("a++(x|yy)b", "a+xyyyyxb", FNM_EXTMATCH))
+              result |= 16;
+            if (!n ("d*/*1", "d/s/1", FNM_FILE_NAME))
+              result |= 32;
+            if (!y ("*", "x", FNM_FILE_NAME | FNM_LEADING_DIR))
+              result |= 64;
+            if (!y ("x*", "x/y/z", FNM_FILE_NAME | FNM_LEADING_DIR))
+              result |= 64;
+            if (!y ("*c*", "c/x", FNM_FILE_NAME | FNM_LEADING_DIR))
+              result |= 64;
+            $gl_fnmatch_gnu_end
+            return result;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  eval "$gl_fnmatch_cache_var=yes"
+else
+  eval "$gl_fnmatch_cache_var=no"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+eval ac_res=\$$gl_fnmatch_cache_var
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval "gl_fnmatch_result=\"\$$gl_fnmatch_cache_var\""
+  if test "$gl_fnmatch_result" = yes; then
+            rm -f "$gl_source_base/fnmatch.h"
+  else
+    FNMATCH_H=fnmatch.h
+  fi
+
+   if test -n "$FNMATCH_H"; then
+  GL_GENERATE_FNMATCH_H_TRUE=
+  GL_GENERATE_FNMATCH_H_FALSE='#'
+else
+  GL_GENERATE_FNMATCH_H_TRUE='#'
+  GL_GENERATE_FNMATCH_H_FALSE=
+fi
+
+
+if test -n "$FNMATCH_H"; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS fnmatch.$ac_objext"
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define fnmatch ${gl_fnmatch_required_lowercase}_fnmatch
+_ACEOF
+
+
+  ac_fn_c_check_decl "$LINENO" "isblank" "ac_cv_have_decl_isblank" "#include <ctype.h>
+"
+if test "x$ac_cv_have_decl_isblank" = x""yes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ISBLANK $ac_have_decl
+_ACEOF
+
+
+  :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  :
+
+
+
+
+
+
+fi
+
+
+
+
+
+if test -n "$FNMATCH_H"; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS fnmatch.$ac_objext"
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define fnmatch ${gl_fnmatch_required_lowercase}_fnmatch
+_ACEOF
+
+
+  ac_fn_c_check_decl "$LINENO" "isblank" "ac_cv_have_decl_isblank" "#include <ctype.h>
+"
+if test "x$ac_cv_have_decl_isblank" = x""yes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ISBLANK $ac_have_decl
+_ACEOF
+
+
+  :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  :
+
+
+
+
+
+
+fi
+
+
+
+
+
+  PRIPTR_PREFIX=
+  if test -n "$STDINT_H"; then
+        PRIPTR_PREFIX='"l"'
+  else
+        for glpfx in '' l ll I64; do
+      case $glpfx in
+        '')  gltype1='int';;
+        l)   gltype1='long int';;
+        ll)  gltype1='long long int';;
+        I64) gltype1='__int64';;
+      esac
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdint.h>
+           extern intptr_t foo;
+           extern $gltype1 foo;
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  PRIPTR_PREFIX='"'$glpfx'"'
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      test -n "$PRIPTR_PREFIX" && break
+    done
+  fi
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether INT32_MAX < INTMAX_MAX" >&5
+$as_echo_n "checking whether INT32_MAX < INTMAX_MAX... " >&6; }
+if test "${gl_cv_test_INT32_MAX_LT_INTMAX_MAX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Work also in C++ mode.  */
+            #define __STDC_LIMIT_MACROS 1
+
+            /* Work if build is not clean.  */
+            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+            #include <limits.h>
+            #if HAVE_STDINT_H
+             #include <stdint.h>
+            #endif
+
+            #if defined INT32_MAX && defined INTMAX_MAX
+             #define CONDITION (INT32_MAX < INTMAX_MAX)
+            #elif HAVE_LONG_LONG_INT
+             #define CONDITION (sizeof (int) < sizeof (long long int))
+            #else
+             #define CONDITION 0
+            #endif
+            int test[CONDITION ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_test_INT32_MAX_LT_INTMAX_MAX=yes
+else
+  gl_cv_test_INT32_MAX_LT_INTMAX_MAX=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&5
+$as_echo "$gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&6; }
+  if test $gl_cv_test_INT32_MAX_LT_INTMAX_MAX = yes; then
+    INT32_MAX_LT_INTMAX_MAX=1;
+  else
+    INT32_MAX_LT_INTMAX_MAX=0;
+  fi
+
+
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether INT64_MAX == LONG_MAX" >&5
+$as_echo_n "checking whether INT64_MAX == LONG_MAX... " >&6; }
+if test "${gl_cv_test_INT64_MAX_EQ_LONG_MAX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Work also in C++ mode.  */
+            #define __STDC_LIMIT_MACROS 1
+
+            /* Work if build is not clean.  */
+            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+            #include <limits.h>
+            #if HAVE_STDINT_H
+             #include <stdint.h>
+            #endif
+
+            #if defined INT64_MAX
+             #define CONDITION (INT64_MAX == LONG_MAX)
+            #elif HAVE_LONG_LONG_INT
+             #define CONDITION (sizeof (long long int) == sizeof (long int))
+            #else
+             #define CONDITION 0
+            #endif
+            int test[CONDITION ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_test_INT64_MAX_EQ_LONG_MAX=yes
+else
+  gl_cv_test_INT64_MAX_EQ_LONG_MAX=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&5
+$as_echo "$gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&6; }
+  if test $gl_cv_test_INT64_MAX_EQ_LONG_MAX = yes; then
+    INT64_MAX_EQ_LONG_MAX=1;
+  else
+    INT64_MAX_EQ_LONG_MAX=0;
+  fi
+
+
+  else
+    INT64_MAX_EQ_LONG_MAX=-1
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UINT32_MAX < UINTMAX_MAX" >&5
+$as_echo_n "checking whether UINT32_MAX < UINTMAX_MAX... " >&6; }
+if test "${gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Work also in C++ mode.  */
+            #define __STDC_LIMIT_MACROS 1
+
+            /* Work if build is not clean.  */
+            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+            #include <limits.h>
+            #if HAVE_STDINT_H
+             #include <stdint.h>
+            #endif
+
+            #if defined UINT32_MAX && defined UINTMAX_MAX
+             #define CONDITION (UINT32_MAX < UINTMAX_MAX)
+            #elif HAVE_LONG_LONG_INT
+             #define CONDITION (sizeof (unsigned int) < sizeof (unsigned long long int))
+            #else
+             #define CONDITION 0
+            #endif
+            int test[CONDITION ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=yes
+else
+  gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&5
+$as_echo "$gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&6; }
+  if test $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX = yes; then
+    UINT32_MAX_LT_UINTMAX_MAX=1;
+  else
+    UINT32_MAX_LT_UINTMAX_MAX=0;
+  fi
+
+
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UINT64_MAX == ULONG_MAX" >&5
+$as_echo_n "checking whether UINT64_MAX == ULONG_MAX... " >&6; }
+if test "${gl_cv_test_UINT64_MAX_EQ_ULONG_MAX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Work also in C++ mode.  */
+            #define __STDC_LIMIT_MACROS 1
+
+            /* Work if build is not clean.  */
+            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+            #include <limits.h>
+            #if HAVE_STDINT_H
+             #include <stdint.h>
+            #endif
+
+            #if defined UINT64_MAX
+             #define CONDITION (UINT64_MAX == ULONG_MAX)
+            #elif HAVE_LONG_LONG_INT
+             #define CONDITION (sizeof (unsigned long long int) == sizeof (unsigned long int))
+            #else
+             #define CONDITION 0
+            #endif
+            int test[CONDITION ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=yes
+else
+  gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&5
+$as_echo "$gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&6; }
+  if test $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX = yes; then
+    UINT64_MAX_EQ_ULONG_MAX=1;
+  else
+    UINT64_MAX_EQ_ULONG_MAX=0;
+  fi
+
+
+  else
+    UINT64_MAX_EQ_ULONG_MAX=-1
+  fi
+
+
+
+
+
+
+
+  :
+
+
+
+
+
+
+
+
+
+LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\""
+
+
+
+
+
+
+
+
+
+
+  :
+
+
+
+
+
+
+  :
+
+
+
+
+
+  if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5
+$as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; }
+if test "${gl_cv_func_mbrtowc_incomplete_state+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+                     # Guess no on AIX and OSF/1.
+        aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;;
+                     # Guess yes otherwise.
+        *)           gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;;
+      esac
+      if test $LOCALE_JA != none; then
+        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+    {
+      const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+        if (mbsinit (&state))
+          return 1;
+    }
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_mbrtowc_incomplete_state=yes
+else
+  gl_cv_func_mbrtowc_incomplete_state=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5
+$as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; }
+
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5
+$as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; }
+if test "${gl_cv_func_mbrtowc_sanitycheck+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+                    # Guess no on Solaris 8.
+        solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;;
+                    # Guess yes otherwise.
+        *)          gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;;
+      esac
+      if test $LOCALE_ZH_CN != none; then
+        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  /* This fails on Solaris 8:
+     mbrtowc returns 2, and sets wc to 0x00F0.
+     mbtowc returns 4 (correct) and sets wc to 0x5EDC.  */
+  if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+    {
+      char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 6, &state) != 4
+          && mbtowc (&wc, input + 3, 6) == 4)
+        return 1;
+    }
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_mbrtowc_sanitycheck=yes
+else
+  gl_cv_func_mbrtowc_sanitycheck=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5
+$as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; }
+
+    REPLACE_MBSTATE_T=0
+    case "$gl_cv_func_mbrtowc_incomplete_state" in
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
+    esac
+    case "$gl_cv_func_mbrtowc_sanitycheck" in
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
+    esac
+  else
+    REPLACE_MBSTATE_T=1
+  fi
+
+
+
+  :
+
+
+
+
+
+  if test $ac_cv_func_mbrtowc = no; then
+    HAVE_MBRTOWC=0
+    ac_fn_c_check_decl "$LINENO" "mbrtowc" "ac_cv_have_decl_mbrtowc" "
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+
+"
+if test "x$ac_cv_have_decl_mbrtowc" = x""yes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MBRTOWC $ac_have_decl
+_ACEOF
+
+    if test $ac_cv_have_decl_mbrtowc = yes; then
+                        REPLACE_MBRTOWC=1
+    fi
+  else
+    if test $REPLACE_MBSTATE_T = 1; then
+      REPLACE_MBRTOWC=1
+    else
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL pwc argument" >&5
+$as_echo_n "checking whether mbrtowc handles a NULL pwc argument... " >&6; }
+if test "${gl_cv_func_mbrtowc_null_arg1+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+                  # Guess no on Solaris.
+        solaris*) gl_cv_func_mbrtowc_null_arg1="guessing no" ;;
+                  # Guess yes otherwise.
+        *)        gl_cv_func_mbrtowc_null_arg1="guessing yes" ;;
+      esac
+      if test $LOCALE_FR_UTF8 != none; then
+        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  int result = 0;
+
+  if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+    {
+      char input[] = "\303\237er";
+      mbstate_t state;
+      wchar_t wc;
+      size_t ret;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      wc = (wchar_t) 0xBADFACE;
+      ret = mbrtowc (&wc, input, 5, &state);
+      if (ret != 2)
+        result |= 1;
+      if (!mbsinit (&state))
+        result |= 2;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      ret = mbrtowc (NULL, input, 5, &state);
+      if (ret != 2) /* Solaris 7 fails here: ret is -1.  */
+        result |= 4;
+      if (!mbsinit (&state))
+        result |= 8;
+    }
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_mbrtowc_null_arg1=yes
+else
+  gl_cv_func_mbrtowc_null_arg1=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg1" >&5
+$as_echo "$gl_cv_func_mbrtowc_null_arg1" >&6; }
+
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL string argument" >&5
+$as_echo_n "checking whether mbrtowc handles a NULL string argument... " >&6; }
+if test "${gl_cv_func_mbrtowc_null_arg2+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+              # Guess no on OSF/1.
+        osf*) gl_cv_func_mbrtowc_null_arg2="guessing no" ;;
+              # Guess yes otherwise.
+        *)    gl_cv_func_mbrtowc_null_arg2="guessing yes" ;;
+      esac
+      if test $LOCALE_FR_UTF8 != none; then
+        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+    {
+      mbstate_t state;
+      wchar_t wc;
+      int ret;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      wc = (wchar_t) 0xBADFACE;
+      mbrtowc (&wc, NULL, 5, &state);
+      /* Check that wc was not modified.  */
+      if (wc != (wchar_t) 0xBADFACE)
+        return 1;
+    }
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_mbrtowc_null_arg2=yes
+else
+  gl_cv_func_mbrtowc_null_arg2=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg2" >&5
+$as_echo "$gl_cv_func_mbrtowc_null_arg2" >&6; }
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc has a correct return value" >&5
+$as_echo_n "checking whether mbrtowc has a correct return value... " >&6; }
+if test "${gl_cv_func_mbrtowc_retval+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+                                   # Guess no on HP-UX, Solaris, native Windows.
+        hpux* | solaris* | mingw*) gl_cv_func_mbrtowc_retval="guessing no" ;;
+                                   # Guess yes otherwise.
+        *)                         gl_cv_func_mbrtowc_retval="guessing yes" ;;
+      esac
+      if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \
+         || { case "$host_os" in mingw*) true;; *) false;; esac; }; then
+        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  int result = 0;
+  int found_some_locale = 0;
+  /* This fails on Solaris.  */
+  if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+    {
+      char input[] = "B\303\274\303\237er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+        {
+          input[1] = '\0';
+          if (mbrtowc (&wc, input + 2, 5, &state) != 1)
+            result |= 1;
+        }
+      found_some_locale = 1;
+    }
+  /* This fails on HP-UX 11.11.  */
+  if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+    {
+      char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+        {
+          input[1] = '\0';
+          if (mbrtowc (&wc, input + 2, 5, &state) != 2)
+            result |= 2;
+        }
+      found_some_locale = 1;
+    }
+  /* This fails on native Windows.  */
+  if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL)
+    {
+      char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2))
+        {
+          input[3] = '\0';
+          if (mbrtowc (&wc, input + 4, 4, &state) != 1)
+            result |= 4;
+        }
+      found_some_locale = 1;
+    }
+  if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL)
+    {
+      char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2))
+        {
+          input[3] = '\0';
+          if (mbrtowc (&wc, input + 4, 4, &state) != 1)
+            result |= 8;
+        }
+      found_some_locale = 1;
+    }
+  if (setlocale (LC_ALL, "Chinese_China.936") != NULL)
+    {
+      char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2))
+        {
+          input[3] = '\0';
+          if (mbrtowc (&wc, input + 4, 4, &state) != 1)
+            result |= 16;
+        }
+      found_some_locale = 1;
+    }
+  return (found_some_locale ? result : 77);
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_mbrtowc_retval=yes
+else
+  if test $? != 77; then
+             gl_cv_func_mbrtowc_retval=no
+           fi
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_retval" >&5
+$as_echo "$gl_cv_func_mbrtowc_retval" >&6; }
+
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc returns 0 when parsing a NUL character" >&5
+$as_echo_n "checking whether mbrtowc returns 0 when parsing a NUL character... " >&6; }
+if test "${gl_cv_func_mbrtowc_nul_retval+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+                       # Guess no on Solaris 8 and 9.
+        solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;;
+                       # Guess yes otherwise.
+        *)             gl_cv_func_mbrtowc_nul_retval="guessing yes" ;;
+      esac
+      if test $LOCALE_ZH_CN != none; then
+        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  /* This fails on Solaris 8 and 9.  */
+  if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+    {
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, "", 1, &state) != 0)
+        return 1;
+    }
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_mbrtowc_nul_retval=yes
+else
+  gl_cv_func_mbrtowc_nul_retval=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_nul_retval" >&5
+$as_echo "$gl_cv_func_mbrtowc_nul_retval" >&6; }
+
+      case "$gl_cv_func_mbrtowc_null_arg1" in
+        *yes) ;;
+        *)
+$as_echo "#define MBRTOWC_NULL_ARG1_BUG 1" >>confdefs.h
+
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
+      case "$gl_cv_func_mbrtowc_null_arg2" in
+        *yes) ;;
+        *)
+$as_echo "#define MBRTOWC_NULL_ARG2_BUG 1" >>confdefs.h
+
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
+      case "$gl_cv_func_mbrtowc_retval" in
+        *yes) ;;
+        *)
+$as_echo "#define MBRTOWC_RETVAL_BUG 1" >>confdefs.h
+
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
+      case "$gl_cv_func_mbrtowc_nul_retval" in
+        *yes) ;;
+        *)
+$as_echo "#define MBRTOWC_NUL_RETVAL_BUG 1" >>confdefs.h
+
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
+    fi
+  fi
+
+if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS mbrtowc.$ac_objext"
+
+
+  :
+
+fi
+
+
+
+
+
+          GNULIB_MBRTOWC=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_MBRTOWC 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+  :
+
+
+
+
+
+
+  :
+
+
+
+
+
+  if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5
+$as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; }
+if test "${gl_cv_func_mbrtowc_incomplete_state+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+                     # Guess no on AIX and OSF/1.
+        aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;;
+                     # Guess yes otherwise.
+        *)           gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;;
+      esac
+      if test $LOCALE_JA != none; then
+        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+    {
+      const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+        if (mbsinit (&state))
+          return 1;
+    }
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_mbrtowc_incomplete_state=yes
+else
+  gl_cv_func_mbrtowc_incomplete_state=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5
+$as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; }
+
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5
+$as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; }
+if test "${gl_cv_func_mbrtowc_sanitycheck+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+                    # Guess no on Solaris 8.
+        solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;;
+                    # Guess yes otherwise.
+        *)          gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;;
+      esac
+      if test $LOCALE_ZH_CN != none; then
+        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  /* This fails on Solaris 8:
+     mbrtowc returns 2, and sets wc to 0x00F0.
+     mbtowc returns 4 (correct) and sets wc to 0x5EDC.  */
+  if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+    {
+      char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 6, &state) != 4
+          && mbtowc (&wc, input + 3, 6) == 4)
+        return 1;
+    }
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_mbrtowc_sanitycheck=yes
+else
+  gl_cv_func_mbrtowc_sanitycheck=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5
+$as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; }
+
+    REPLACE_MBSTATE_T=0
+    case "$gl_cv_func_mbrtowc_incomplete_state" in
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
+    esac
+    case "$gl_cv_func_mbrtowc_sanitycheck" in
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
+    esac
+  else
+    REPLACE_MBSTATE_T=1
+  fi
+
+
+
+  :
+
+
+
+
+
+  if test $ac_cv_func_mbsinit = no; then
+    HAVE_MBSINIT=0
+    ac_fn_c_check_decl "$LINENO" "mbsinit" "ac_cv_have_decl_mbsinit" "
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+
+"
+if test "x$ac_cv_have_decl_mbsinit" = x""yes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MBSINIT $ac_have_decl
+_ACEOF
+
+    if test $ac_cv_have_decl_mbsinit = yes; then
+                        REPLACE_MBSINIT=1
+    fi
+  else
+    if test $REPLACE_MBSTATE_T = 1; then
+      REPLACE_MBSINIT=1
+    else
+                        case "$host_os" in
+        mingw*) REPLACE_MBSINIT=1 ;;
+      esac
+    fi
+  fi
+
+if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS mbsinit.$ac_objext"
+
+
+  :
+
+fi
+
+
+
+
+
+          GNULIB_MBSINIT=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_MBSINIT 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+  :
+
+
+
+
+
+
+  :
+
+
+
+
+
+  if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5
+$as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; }
+if test "${gl_cv_func_mbrtowc_incomplete_state+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+                     # Guess no on AIX and OSF/1.
+        aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;;
+                     # Guess yes otherwise.
+        *)           gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;;
+      esac
+      if test $LOCALE_JA != none; then
+        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+    {
+      const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+        if (mbsinit (&state))
+          return 1;
+    }
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_mbrtowc_incomplete_state=yes
+else
+  gl_cv_func_mbrtowc_incomplete_state=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5
+$as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; }
+
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5
+$as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; }
+if test "${gl_cv_func_mbrtowc_sanitycheck+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+                    # Guess no on Solaris 8.
+        solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;;
+                    # Guess yes otherwise.
+        *)          gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;;
+      esac
+      if test $LOCALE_ZH_CN != none; then
+        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  /* This fails on Solaris 8:
+     mbrtowc returns 2, and sets wc to 0x00F0.
+     mbtowc returns 4 (correct) and sets wc to 0x5EDC.  */
+  if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+    {
+      char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 6, &state) != 4
+          && mbtowc (&wc, input + 3, 6) == 4)
+        return 1;
+    }
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_mbrtowc_sanitycheck=yes
+else
+  gl_cv_func_mbrtowc_sanitycheck=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5
+$as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; }
+
+    REPLACE_MBSTATE_T=0
+    case "$gl_cv_func_mbrtowc_incomplete_state" in
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
+    esac
+    case "$gl_cv_func_mbrtowc_sanitycheck" in
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
+    esac
+  else
+    REPLACE_MBSTATE_T=1
+  fi
+
+
+
+  :
+
+
+
+
+
+  if test $ac_cv_func_mbsrtowcs = no; then
+    HAVE_MBSRTOWCS=0
+    ac_fn_c_check_decl "$LINENO" "mbsrtowcs" "ac_cv_have_decl_mbsrtowcs" "
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+
+"
+if test "x$ac_cv_have_decl_mbsrtowcs" = x""yes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MBSRTOWCS $ac_have_decl
+_ACEOF
+
+    if test $ac_cv_have_decl_mbsrtowcs = yes; then
+                        REPLACE_MBSRTOWCS=1
+    fi
+  else
+    if test $REPLACE_MBSTATE_T = 1; then
+      REPLACE_MBSRTOWCS=1
+    else
+
+
+
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbsrtowcs works" >&5
+$as_echo_n "checking whether mbsrtowcs works... " >&6; }
+if test "${gl_cv_func_mbsrtowcs_works+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+                                   # Guess no on HP-UX, Solaris, mingw.
+        hpux* | solaris* | mingw*) gl_cv_func_mbsrtowcs_works="guessing no" ;;
+                                   # Guess yes otherwise.
+        *)                         gl_cv_func_mbsrtowcs_works="guessing yes" ;;
+      esac
+      if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then
+        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  int result = 0;
+  /* Test whether the function supports a NULL destination argument.
+     This fails on native Windows.  */
+  if (setlocale (LC_ALL, "$LOCALE_FR") != NULL)
+    {
+      const char input[] = "\337er";
+      const char *src = input;
+      mbstate_t state;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbsrtowcs (NULL, &src, 1, &state) != 3
+          || src != input)
+        result |= 1;
+    }
+  /* Test whether the function works when started with a conversion state
+     in non-initial state.  This fails on HP-UX 11.11 and Solaris 10.  */
+  if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+    {
+      const char input[] = "B\303\274\303\237er";
+      mbstate_t state;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (NULL, input + 1, 1, &state) == (size_t)(-2))
+        if (!mbsinit (&state))
+          {
+            const char *src = input + 2;
+            if (mbsrtowcs (NULL, &src, 10, &state) != 4)
+              result |= 2;
+          }
+    }
+  if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+    {
+      const char input[] = "<\306\374\313\334\270\354>";
+      mbstate_t state;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (NULL, input + 3, 1, &state) == (size_t)(-2))
+        if (!mbsinit (&state))
+          {
+            const char *src = input + 4;
+            if (mbsrtowcs (NULL, &src, 10, &state) != 3)
+              result |= 4;
+          }
+    }
+  if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+    {
+      const char input[] = "B\250\271\201\060\211\070er";
+      mbstate_t state;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (NULL, input + 1, 1, &state) == (size_t)(-2))
+        if (!mbsinit (&state))
+          {
+            const char *src = input + 2;
+            if (mbsrtowcs (NULL, &src, 10, &state) != 4)
+              result |= 8;
+          }
+    }
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_mbsrtowcs_works=yes
+else
+  gl_cv_func_mbsrtowcs_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbsrtowcs_works" >&5
+$as_echo "$gl_cv_func_mbsrtowcs_works" >&6; }
+
+      case "$gl_cv_func_mbsrtowcs_works" in
+        *yes) ;;
+        *) REPLACE_MBSRTOWCS=1 ;;
+      esac
+    fi
+  fi
+
+if test $HAVE_MBSRTOWCS = 0 || test $REPLACE_MBSRTOWCS = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS mbsrtowcs.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS mbsrtowcs-state.$ac_objext"
+
+
+  :
+
+fi
+
+
+
+
+
+          GNULIB_MBSRTOWCS=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_MBSRTOWCS 1" >>confdefs.h
+
+
+
+
+if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS memchr.$ac_objext"
+
+
+  for ac_header in bp-sym.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "bp-sym.h" "ac_cv_header_bp_sym_h" "$ac_includes_default"
+if test "x$ac_cv_header_bp_sym_h" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_BP_SYM_H 1
+_ACEOF
+
+fi
+
+done
+
+
+fi
+
+
+
+
+
+          GNULIB_MEMCHR=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_MEMCHR 1" >>confdefs.h
+
+
+
+
+
+  if test $HAVE_DECL_MEMMEM = 1 && test $REPLACE_MEMMEM = 0; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memmem works in linear time" >&5
+$as_echo_n "checking whether memmem works in linear time... " >&6; }
+if test "${gl_cv_func_memmem_works_fast+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+                    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 9) || (__GLIBC__ > 2)) \
+     && !defined __UCLIBC__
+  Lucky user
+ #endif
+#endif
+#ifdef __CYGWIN__
+ #include <cygwin/version.h>
+ #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 0)
+  Lucky user
+ #endif
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Lucky user" >/dev/null 2>&1; then :
+  gl_cv_func_memmem_works_fast="guessing yes"
+else
+  gl_cv_func_memmem_works_fast="guessing no"
+fi
+rm -f conftest*
+
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <signal.h> /* for signal */
+#include <string.h> /* for memmem */
+#include <stdlib.h> /* for malloc */
+#include <unistd.h> /* for alarm */
+static void quit (int sig) { exit (sig + 128); }
+
+int
+main ()
+{
+
+    int result = 0;
+    size_t m = 1000000;
+    char *haystack = (char *) malloc (2 * m + 1);
+    char *needle = (char *) malloc (m + 1);
+    /* Failure to compile this test due to missing alarm is okay,
+       since all such platforms (mingw) also lack memmem.  */
+    signal (SIGALRM, quit);
+    alarm (5);
+    /* Check for quadratic performance.  */
+    if (haystack && needle)
+      {
+        memset (haystack, 'A', 2 * m);
+        haystack[2 * m] = 'B';
+        memset (needle, 'A', m);
+        needle[m] = 'B';
+        if (!memmem (haystack, 2 * m + 1, needle, m + 1))
+          result |= 1;
+      }
+    return result;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_memmem_works_fast=yes
+else
+  gl_cv_func_memmem_works_fast=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_memmem_works_fast" >&5
+$as_echo "$gl_cv_func_memmem_works_fast" >&6; }
+    case "$gl_cv_func_memmem_works_fast" in
+      *yes) ;;
+      *)
+        REPLACE_MEMMEM=1
+        ;;
+    esac
+  fi
+
+if test $HAVE_MEMMEM = 0 || test $REPLACE_MEMMEM = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS memmem.$ac_objext"
+
+fi
+
+
+
+
+  for ac_func in memmem
+do :
+  ac_fn_c_check_func "$LINENO" "memmem" "ac_cv_func_memmem"
+if test "x$ac_cv_func_memmem" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_MEMMEM 1
+_ACEOF
+
+fi
+done
+
+  if test $ac_cv_func_memmem = yes; then
+    HAVE_MEMMEM=1
+  else
+    HAVE_MEMMEM=0
+  fi
+
+  :
+
+
+
+
+
+  if test $ac_cv_have_decl_memmem = no; then
+    HAVE_DECL_MEMMEM=0
+  else
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memmem works" >&5
+$as_echo_n "checking whether memmem works... " >&6; }
+if test "${gl_cv_func_memmem_works_always+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+                                      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef __GNU_LIBRARY__
+ #include <features.h>
+ #if ((__GLIBC__ == 2 && ((__GLIBC_MINOR > 0 && __GLIBC_MINOR__ < 9) \
+                          || __GLIBC_MINOR__ > 12)) \
+      || (__GLIBC__ > 2)) \
+     || defined __UCLIBC__
+  Lucky user
+ #endif
+#elif defined __CYGWIN__
+ #include <cygwin/version.h>
+ #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7)
+  Lucky user
+ #endif
+#else
+  Lucky user
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Lucky user" >/dev/null 2>&1; then :
+  gl_cv_func_memmem_works_always="guessing yes"
+else
+  gl_cv_func_memmem_works_always="guessing no"
+fi
+rm -f conftest*
+
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <string.h> /* for memmem */
+#define P "_EF_BF_BD"
+#define HAYSTACK "F_BD_CE_BD" P P P P "_C3_88_20" P P P "_C3_A7_20" P
+#define NEEDLE P P P P P
+
+int
+main ()
+{
+
+    int result = 0;
+    if (memmem (HAYSTACK, strlen (HAYSTACK), NEEDLE, strlen (NEEDLE)))
+      result |= 1;
+    /* Check for empty needle behavior.  */
+    {
+      const char *haystack = "AAA";
+      if (memmem (haystack, 3, NULL, 0) != haystack)
+        result |= 2;
+    }
+    return result;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_memmem_works_always=yes
+else
+  gl_cv_func_memmem_works_always=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_memmem_works_always" >&5
+$as_echo "$gl_cv_func_memmem_works_always" >&6; }
+    case "$gl_cv_func_memmem_works_always" in
+      *yes) ;;
+      *)
+        REPLACE_MEMMEM=1
+        ;;
+    esac
+  fi
+  :
+
+if test $HAVE_MEMMEM = 0 || test $REPLACE_MEMMEM = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS memmem.$ac_objext"
+
+fi
+
+
+
+
+
+          GNULIB_MEMMEM=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_MEMMEM 1" >>confdefs.h
+
+
+
+
+
+
+
+  # Define two additional variables used in the Makefile substitution.
+
+  if test "$ac_cv_header_stdbool_h" = yes; then
+    STDBOOL_H=''
+  else
+    STDBOOL_H='stdbool.h'
+  fi
+
+   if test -n "$STDBOOL_H"; then
+  GL_GENERATE_STDBOOL_H_TRUE=
+  GL_GENERATE_STDBOOL_H_FALSE='#'
+else
+  GL_GENERATE_STDBOOL_H_TRUE='#'
+  GL_GENERATE_STDBOOL_H_FALSE=
+fi
+
+
+  if test "$ac_cv_type__Bool" = yes; then
+    HAVE__BOOL=1
+  else
+    HAVE__BOOL=0
+  fi
+
+
+
+
+
+  STDDEF_H=
+  if test $gt_cv_c_wchar_t = no; then
+    HAVE_WCHAR_T=0
+    STDDEF_H=stddef.h
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5
+$as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; }
+if test "${gl_cv_decl_null_works+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stddef.h>
+      int test[2 * (sizeof NULL == sizeof (void *)) -1];
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_decl_null_works=yes
+else
+  gl_cv_decl_null_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5
+$as_echo "$gl_cv_decl_null_works" >&6; }
+  if test $gl_cv_decl_null_works = no; then
+    REPLACE_NULL=1
+    STDDEF_H=stddef.h
+  fi
+
+   if test -n "$STDDEF_H"; then
+  GL_GENERATE_STDDEF_H_TRUE=
+  GL_GENERATE_STDDEF_H_FALSE='#'
+else
+  GL_GENERATE_STDDEF_H_TRUE='#'
+  GL_GENERATE_STDDEF_H_FALSE=
+fi
+
+  if test -n "$STDDEF_H"; then
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_stddef_h='<'stddef.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stddef.h>" >&5
+$as_echo_n "checking absolute name of <stddef.h>... " >&6; }
+if test "${gl_cv_next_stddef_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stddef.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'stddef.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_stddef_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5
+$as_echo "$gl_cv_next_stddef_h" >&6; }
+     fi
+     NEXT_STDDEF_H=$gl_cv_next_stddef_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'stddef.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_stddef_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive
+
+
+
+
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  :
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_wchar_h='<'wchar.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wchar.h>" >&5
+$as_echo_n "checking absolute name of <wchar.h>... " >&6; }
+if test "${gl_cv_next_wchar_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_wchar_h = yes; then
+
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <wchar.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'wchar.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_wchar_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+          else
+               gl_cv_next_wchar_h='<'wchar.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wchar_h" >&5
+$as_echo "$gl_cv_next_wchar_h" >&6; }
+     fi
+     NEXT_WCHAR_H=$gl_cv_next_wchar_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'wchar.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_wchar_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_WCHAR_H=$gl_next_as_first_directive
+
+
+
+
+  if test $ac_cv_header_wchar_h = yes; then
+    HAVE_WCHAR_H=1
+  else
+    HAVE_WCHAR_H=0
+  fi
+
+
+
+
+
+  if test $gt_cv_c_wint_t = yes; then
+    HAVE_WINT_T=1
+  else
+    HAVE_WINT_T=0
+  fi
+
+
+
+    for gl_func in btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb      wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset      wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp      wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr      wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth     ; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+#endif
+#include <wchar.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    eval as_val=\$$as_gl_Symbol
+   if test "x$as_val" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+
+
+
+
+
+  :
+
+
+
+
+
+  if test $ac_cv_func_iswcntrl = yes; then
+    HAVE_ISWCNTRL=1
+  else
+    HAVE_ISWCNTRL=0
+  fi
+
+
+
+
+
+  if test $gt_cv_c_wint_t = yes; then
+    HAVE_WINT_T=1
+  else
+    HAVE_WINT_T=0
+  fi
+
+
+
+
+
+
+
+
+  :
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_wctype_h='<'wctype.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wctype.h>" >&5
+$as_echo_n "checking absolute name of <wctype.h>... " >&6; }
+if test "${gl_cv_next_wctype_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_wctype_h = yes; then
+
+
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <wctype.h>
+
+_ACEOF
+                                                                                                                        case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+
+               case "$host_os" in
+                 mingw*)
+                                                                                                                                     gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+
+               gl_header_literal_regex=`echo 'wctype.h' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+                   s|^/[^/]|//&|
+                   p
+                   q
+                 }'
+                                                            gl_cv_next_wctype_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+                      sed -n "$gl_absolute_header_sed"`'"'
+          else
+               gl_cv_next_wctype_h='<'wctype.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wctype_h" >&5
+$as_echo "$gl_cv_next_wctype_h" >&6; }
+     fi
+     NEXT_WCTYPE_H=$gl_cv_next_wctype_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'wctype.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_wctype_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H=$gl_next_as_first_directive
+
+
+
+
+  if test $ac_cv_header_wctype_h = yes; then
+    if test $ac_cv_func_iswcntrl = yes; then
+                  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iswcntrl works" >&5
+$as_echo_n "checking whether iswcntrl works... " >&6; }
+if test "${gl_cv_func_iswcntrl_works+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+          if test "$cross_compiling" = yes; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+                          #if __GNU_LIBRARY__ == 1
+                          Linux libc5 i18n is broken.
+                          #endif
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_func_iswcntrl_works="guessing yes"
+else
+  gl_cv_func_iswcntrl_works="guessing no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+               /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+                  included before <wchar.h>.
+                  BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+                  must be included before <wchar.h>.  */
+               #include <stddef.h>
+               #include <stdio.h>
+               #include <time.h>
+               #include <wchar.h>
+               #include <wctype.h>
+               int main () { return iswprint ('x') == 0; }
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_iswcntrl_works=yes
+else
+  gl_cv_func_iswcntrl_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_iswcntrl_works" >&5
+$as_echo "$gl_cv_func_iswcntrl_works" >&6; }
+    fi
+    HAVE_WCTYPE_H=1
+  else
+    HAVE_WCTYPE_H=0
+  fi
+
+
+  case "$gl_cv_func_iswcntrl_works" in
+    *yes) REPLACE_ISWCNTRL=0 ;;
+    *)    REPLACE_ISWCNTRL=1 ;;
+  esac
+
+
+  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
+        :
+  fi
+
+  if test $REPLACE_ISWCNTRL = 1; then
+    REPLACE_TOWLOWER=1
+  else
+    for ac_func in towlower
+do :
+  ac_fn_c_check_func "$LINENO" "towlower" "ac_cv_func_towlower"
+if test "x$ac_cv_func_towlower" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_TOWLOWER 1
+_ACEOF
+
+fi
+done
+
+    if test $ac_cv_func_towlower = yes; then
+      REPLACE_TOWLOWER=0
+    else
+      ac_fn_c_check_decl "$LINENO" "towlower" "ac_cv_have_decl_towlower" "/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+             included before <wchar.h>.
+             BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+             must be included before <wchar.h>.  */
+          #include <stddef.h>
+          #include <stdio.h>
+          #include <time.h>
+          #include <wchar.h>
+          #if HAVE_WCTYPE_H
+          # include <wctype.h>
+          #endif
+
+"
+if test "x$ac_cv_have_decl_towlower" = x""yes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TOWLOWER $ac_have_decl
+_ACEOF
+
+      if test $ac_cv_have_decl_towlower = yes; then
+                                REPLACE_TOWLOWER=1
+      else
+        REPLACE_TOWLOWER=0
+      fi
+    fi
+  fi
+
+
+  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then
+        :
+  fi
+
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctype_t" >&5
+$as_echo_n "checking for wctype_t... " >&6; }
+if test "${gl_cv_type_wctype_t+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+               included before <wchar.h>.
+               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+               must be included before <wchar.h>.  */
+            #include <stddef.h>
+            #include <stdio.h>
+            #include <time.h>
+            #include <wchar.h>
+            #if HAVE_WCTYPE_H
+            # include <wctype.h>
+            #endif
+            wctype_t a;
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_type_wctype_t=yes
+else
+  gl_cv_type_wctype_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctype_t" >&5
+$as_echo "$gl_cv_type_wctype_t" >&6; }
+  if test $gl_cv_type_wctype_t = no; then
+    HAVE_WCTYPE_T=0
+  fi
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctrans_t" >&5
+$as_echo_n "checking for wctrans_t... " >&6; }
+if test "${gl_cv_type_wctrans_t+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+               included before <wchar.h>.
+               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+               must be included before <wchar.h>.  */
+            #include <stddef.h>
+            #include <stdio.h>
+            #include <time.h>
+            #include <wchar.h>
+            #include <wctype.h>
+            wctrans_t a;
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_type_wctrans_t=yes
+else
+  gl_cv_type_wctrans_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctrans_t" >&5
+$as_echo "$gl_cv_type_wctrans_t" >&6; }
+  if test $gl_cv_type_wctrans_t = no; then
+    HAVE_WCTRANS_T=0
+  fi
+
+
+    for gl_func in wctype iswctype wctrans towctrans     ; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+# include <wchar.h>
+#endif
+#include <wctype.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    eval as_val=\$$as_gl_Symbol
+   if test "x$as_val" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+  # End of code from modules
+
+
+
+
+
+
+
+
+
+  gltests_libdeps=
+  gltests_ltlibdeps=
+
+
+
+
+
+
+
+
+
+  gl_source_base='tests'
+  gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
+
+  gl_module_indicator_condition=$gltests_WITNESS
+
+
+
+
+
+
+
+
+
+  LIBGNU_LIBDEPS="$gl_libdeps"
+
+  LIBGNU_LTLIBDEPS="$gl_ltlibdeps"
+
+
+
+# We don't use automake, but gnulib does.  This line lets us generate
+# its Makefile.in.
+am__api_version='1.11'
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[\\\"\#\$\&\'\`$am_lf]*)
+    as_fn_error "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+  *[\\\"\#\$\&\'\`$am_lf\ \	]*)
+    as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      as_fn_error "ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" "$LINENO" 5
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   as_fn_error "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # 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
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+  if test "${ac_cv_path_mkdir+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in mkdir gmkdir; do
+	 for ac_exec_ext in '' $ac_executable_extensions; do
+	   { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+	     'mkdir (GNU coreutils) '* | \
+	     'mkdir (coreutils) '* | \
+	     'mkdir (fileutils) '4.1*)
+	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+	       break 3;;
+	   esac
+	 done
+       done
+  done
+IFS=$as_save_IFS
+
+fi
+
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    test -d ./--version && rmdir ./--version
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+  [\\/$]* | ?:[\\/]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+	@echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE=libgnu
+ VERSION=UNUSED-VERSION
+
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+
+
+# --------------------- #
+# Checks for programs.  #
+# --------------------- #
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+if test -n "$ac_tool_prefix"; then
+  # 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
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AR+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+  ac_ct_AR=$AR
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AR="ar"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_AR" = x; then
+    AR=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+else
+  AR="$ac_cv_prog_AR"
+fi
+
+
+# ---------------------- #
+# Checks for libraries.  #
+# ---------------------- #
+
+ac_config_files="$ac_config_files Makefile import/Makefile"
+
+ac_config_commands="$ac_config_commands default"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    test "x$cache_file" != "x/dev/null" &&
+      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+    cat confcache >$cache_file
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+  as_fn_error "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then
+  as_fn_error "conditional \"GL_COND_LIBTOOL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GL_GENERATE_ALLOCA_H_TRUE}" && test -z "${GL_GENERATE_ALLOCA_H_FALSE}"; then
+  as_fn_error "conditional \"GL_GENERATE_ALLOCA_H\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GL_GENERATE_FNMATCH_H_TRUE}" && test -z "${GL_GENERATE_FNMATCH_H_FALSE}"; then
+  as_fn_error "conditional \"GL_GENERATE_FNMATCH_H\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GL_GENERATE_STDINT_H_TRUE}" && test -z "${GL_GENERATE_STDINT_H_FALSE}"; then
+  as_fn_error "conditional \"GL_GENERATE_STDINT_H\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GL_GENERATE_STDBOOL_H_TRUE}" && test -z "${GL_GENERATE_STDBOOL_H_FALSE}"; then
+  as_fn_error "conditional \"GL_GENERATE_STDBOOL_H\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then
+  as_fn_error "conditional \"GL_GENERATE_STDDEF_H\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+    gl_libobjs=
+    gl_ltlibobjs=
+    if test -n "$gl_LIBOBJS"; then
+      # Remove the extension.
+      sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+        gl_libobjs="$gl_libobjs $i.$ac_objext"
+        gl_ltlibobjs="$gl_ltlibobjs $i.lo"
+      done
+    fi
+    gl_LIBOBJS=$gl_libobjs
+
+    gl_LTLIBOBJS=$gl_ltlibobjs
+
+
+
+    gltests_libobjs=
+    gltests_ltlibobjs=
+    if test -n "$gltests_LIBOBJS"; then
+      # Remove the extension.
+      sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+        gltests_libobjs="$gltests_libobjs $i.$ac_objext"
+        gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
+      done
+    fi
+    gltests_LIBOBJS=$gltests_libobjs
+
+    gltests_LTLIBOBJS=$gltests_ltlibobjs
+
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  as_fn_error "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  as_fn_error "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+ if test -n "$EXEEXT"; then
+  am__EXEEXT_TRUE=
+  am__EXEEXT_FALSE='#'
+else
+  am__EXEEXT_TRUE='#'
+  am__EXEEXT_FALSE=
+fi
+
+
+: ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error ERROR [LINENO LOG_FD]
+# ---------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with status $?, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$?; test $as_status -eq 0 && as_status=1
+  if test "$3"; then
+    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  fi
+  $as_echo "$as_me: error: $1" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+	test -d "$1/.";
+      else
+	case $1 in #(
+	-*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by $as_me, which was
+generated by GNU Autoconf 2.64.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+  -q, --quiet, --silent
+                   do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+      --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to the package provider."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.64,
+  with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2009 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    as_fn_error "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) as_fn_error "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+  *) as_fn_append ac_config_targets " $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
+  export CONFIG_SHELL
+  exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "import/Makefile") CONFIG_FILES="$CONFIG_FILES import/Makefile" ;;
+    "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
+
+  *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp=
+  trap 'exit_status=$?
+  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+  trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+  eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\).*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\).*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = ""
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+  || as_fn_error "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[	 ]*\):*/\1/
+s/:*$//
+s/^[^=]*=[	 ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_t"; then
+    break
+  elif $ac_last_try; then
+    as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #undef with comments.  This is necessary, for example,
+    # in the case of _POSIX_SOURCE, which is predefined and required
+    # on some systems where configure will not decide to define it.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  as_fn_error "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+	 # because $ac_f cannot contain `:'.
+	 test -f "$ac_f" ||
+	   case $ac_f in
+	   [\\/$]*) false;;
+	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+	   esac ||
+	   as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      as_fn_append ac_file_inputs " '$ac_f'"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+	`' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$tmp/stdin" \
+      || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  as_dir="$ac_dir"; as_fn_mkdir_p
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+  s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+  || as_fn_error "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&2;}
+
+  rm -f "$tmp/stdin"
+  case $ac_file in
+  -) cat "$tmp/out" && rm -f "$tmp/out";;
+  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  esac \
+  || as_fn_error "could not create $ac_file" "$LINENO" 5
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+  if test x"$ac_file" != x-; then
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+    } >"$tmp/config.h" \
+      || as_fn_error "could not create $ac_file" "$LINENO" 5
+    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f "$ac_file"
+      mv "$tmp/config.h" "$ac_file" \
+	|| as_fn_error "could not create $ac_file" "$LINENO" 5
+    fi
+  else
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error "could not create -" "$LINENO" 5
+  fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$_am_arg" : 'X\(//\)[^/]' \| \
+	 X"$_am_arg" : 'X\(//\)$' \| \
+	 X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$mf" : 'X\(//\)[^/]' \| \
+	 X"$mf" : 'X\(//\)$' \| \
+	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$file" : 'X\(//\)[^/]' \| \
+	 X"$file" : 'X\(//\)$' \| \
+	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      as_dir=$dirpart/$fdir; as_fn_mkdir_p
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+ ;;
+    "default":C)
+case x$CONFIG_HEADERS in
+xconfig.h:config.in)
+echo > stamp-h ;;
+esac
+ ;;
+
+  esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+  as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || as_fn_exit $?
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
+exit 0
diff --git a/gdb/gnulib/configure.ac b/gdb/gnulib/configure.ac
new file mode 100644
index 0000000..3a39197
--- /dev/null
+++ b/gdb/gnulib/configure.ac
@@ -0,0 +1,62 @@
+dnl Autoconf configure script for GDB, the GNU debugger.
+dnl Copyright (C) 1995-2012 Free Software Foundation, Inc.
+dnl
+dnl This file is part of GDB.
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 3 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+dnl Process this file with autoconf to produce a configure script.
+
+AC_PREREQ(2.64)dnl
+AC_INIT(import/memmem.c)
+AC_CONFIG_HEADER(config.h:config.in)
+AM_MAINTAINER_MODE
+
+AC_PROG_CC
+AC_USE_SYSTEM_EXTENSIONS
+gl_EARLY
+AM_PROG_CC_STDC
+
+AC_CONFIG_AUX_DIR(../..)
+AC_CANONICAL_SYSTEM
+
+gl_INIT
+
+# We don't use automake, but gnulib does.  This line lets us generate
+# its Makefile.in.
+AM_INIT_AUTOMAKE(libgnu, UNUSED-VERSION, [no-define])
+
+# --------------------- #
+# Checks for programs.  #
+# --------------------- #
+
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_RANLIB
+
+AC_CHECK_TOOL(AR, ar)
+
+# ---------------------- #
+# Checks for libraries.  #
+# ---------------------- #
+
+AC_OUTPUT(Makefile import/Makefile,
+[
+case x$CONFIG_HEADERS in
+xconfig.h:config.in)
+echo > stamp-h ;;
+esac
+])
+
+exit 0
diff --git a/gdb/gnulib/dummy.c b/gdb/gnulib/dummy.c
deleted file mode 100644
index 0563b44..0000000
--- a/gdb/gnulib/dummy.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* A dummy file, to prevent empty libraries from breaking builds.
-   Copyright (C) 2004, 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
-
-   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 3 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, see <http://www.gnu.org/licenses/>.  */
-
-/* Some systems, reportedly OpenBSD and Mac OS X, refuse to create
-   libraries without any object files.  You might get an error like:
-
-   > ar cru .libs/libgl.a
-   > ar: no archive members specified
-
-   Compiling this file, and adding its object file to the library, will
-   prevent the library from being empty.  */
-
-/* Some systems, such as Solaris with cc 5.0, refuse to work with libraries
-   that don't export any symbol.  You might get an error like:
-
-   > cc ... libgnu.a
-   > ild: (bad file) garbled symbol table in archive ../gllib/libgnu.a
-
-   Compiling this file, and adding its object file to the library, will
-   prevent the library from exporting no symbols.  */
-
-#ifdef __sun
-/* This declaration ensures that the library will export at least 1 symbol.  */
-int gl_dummy_symbol;
-#else
-/* This declaration is solely to ensure that after preprocessing
-   this file is never empty.  */
-typedef int dummy;
-#endif
diff --git a/gdb/gnulib/extra/arg-nonnull.h b/gdb/gnulib/extra/arg-nonnull.h
deleted file mode 100644
index cf49896..0000000
--- a/gdb/gnulib/extra/arg-nonnull.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* A C macro for declaring that specific arguments must not be NULL.
-   Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
-
-   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 3 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
-   that the values passed as arguments n, ..., m must be non-NULL pointers.
-   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
-#ifndef _GL_ARG_NONNULL
-# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
-#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
-# else
-#  define _GL_ARG_NONNULL(params)
-# endif
-#endif
diff --git a/gdb/gnulib/extra/c++defs.h b/gdb/gnulib/extra/c++defs.h
deleted file mode 100644
index cc6a6a4..0000000
--- a/gdb/gnulib/extra/c++defs.h
+++ /dev/null
@@ -1,271 +0,0 @@
-/* C++ compatible function declaration macros.
-   Copyright (C) 2010, 2011 Free Software Foundation, Inc.
-
-   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 3 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef _GL_CXXDEFS_H
-#define _GL_CXXDEFS_H
-
-/* The three most frequent use cases of these macros are:
-
-   * For providing a substitute for a function that is missing on some
-     platforms, but is declared and works fine on the platforms on which
-     it exists:
-
-       #if @GNULIB_FOO@
-       # if !@HAVE_FOO@
-       _GL_FUNCDECL_SYS (foo, ...);
-       # endif
-       _GL_CXXALIAS_SYS (foo, ...);
-       _GL_CXXALIASWARN (foo);
-       #elif defined GNULIB_POSIXCHECK
-       ...
-       #endif
-
-   * For providing a replacement for a function that exists on all platforms,
-     but is broken/insufficient and needs to be replaced on some platforms:
-
-       #if @GNULIB_FOO@
-       # if @REPLACE_FOO@
-       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-       #   undef foo
-       #   define foo rpl_foo
-       #  endif
-       _GL_FUNCDECL_RPL (foo, ...);
-       _GL_CXXALIAS_RPL (foo, ...);
-       # else
-       _GL_CXXALIAS_SYS (foo, ...);
-       # endif
-       _GL_CXXALIASWARN (foo);
-       #elif defined GNULIB_POSIXCHECK
-       ...
-       #endif
-
-   * For providing a replacement for a function that exists on some platforms
-     but is broken/insufficient and needs to be replaced on some of them and
-     is additionally either missing or undeclared on some other platforms:
-
-       #if @GNULIB_FOO@
-       # if @REPLACE_FOO@
-       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-       #   undef foo
-       #   define foo rpl_foo
-       #  endif
-       _GL_FUNCDECL_RPL (foo, ...);
-       _GL_CXXALIAS_RPL (foo, ...);
-       # else
-       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
-       _GL_FUNCDECL_SYS (foo, ...);
-       #  endif
-       _GL_CXXALIAS_SYS (foo, ...);
-       # endif
-       _GL_CXXALIASWARN (foo);
-       #elif defined GNULIB_POSIXCHECK
-       ...
-       #endif
-*/
-
-/* _GL_EXTERN_C declaration;
-   performs the declaration with C linkage.  */
-#if defined __cplusplus
-# define _GL_EXTERN_C extern "C"
-#else
-# define _GL_EXTERN_C extern
-#endif
-
-/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
-   declares a replacement function, named rpl_func, with the given prototype,
-   consisting of return type, parameters, and attributes.
-   Example:
-     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
-                                  _GL_ARG_NONNULL ((1)));
- */
-#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
-  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
-#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
-  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
-
-/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
-   declares the system function, named func, with the given prototype,
-   consisting of return type, parameters, and attributes.
-   Example:
-     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
-                                  _GL_ARG_NONNULL ((1)));
- */
-#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
-  _GL_EXTERN_C rettype func parameters_and_attributes
-
-/* _GL_CXXALIAS_RPL (func, rettype, parameters);
-   declares a C++ alias called GNULIB_NAMESPACE::func
-   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
-   Example:
-     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
- */
-#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
-  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
-#if defined __cplusplus && defined GNULIB_NAMESPACE
-# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
-    namespace GNULIB_NAMESPACE                                \
-    {                                                         \
-      rettype (*const func) parameters = ::rpl_func;          \
-    }                                                         \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#else
-# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#endif
-
-/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
-   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
-   except that the C function rpl_func may have a slightly different
-   declaration.  A cast is used to silence the "invalid conversion" error
-   that would otherwise occur.  */
-#if defined __cplusplus && defined GNULIB_NAMESPACE
-# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
-    namespace GNULIB_NAMESPACE                                     \
-    {                                                              \
-      rettype (*const func) parameters =                           \
-        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
-    }                                                              \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#else
-# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#endif
-
-/* _GL_CXXALIAS_SYS (func, rettype, parameters);
-   declares a C++ alias called GNULIB_NAMESPACE::func
-   that redirects to the system provided function func, if GNULIB_NAMESPACE
-   is defined.
-   Example:
-     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
- */
-#if defined __cplusplus && defined GNULIB_NAMESPACE
-  /* If we were to write
-       rettype (*const func) parameters = ::func;
-     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
-     better (remove an indirection through a 'static' pointer variable),
-     but then the _GL_CXXALIASWARN macro below would cause a warning not only
-     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
-# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
-    namespace GNULIB_NAMESPACE                     \
-    {                                              \
-      static rettype (*func) parameters = ::func;  \
-    }                                              \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#else
-# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#endif
-
-/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
-   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
-   except that the C function func may have a slightly different declaration.
-   A cast is used to silence the "invalid conversion" error that would
-   otherwise occur.  */
-#if defined __cplusplus && defined GNULIB_NAMESPACE
-# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
-    namespace GNULIB_NAMESPACE                          \
-    {                                                   \
-      static rettype (*func) parameters =               \
-        reinterpret_cast<rettype(*)parameters>(::func); \
-    }                                                   \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#else
-# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#endif
-
-/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
-   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
-   except that the C function is picked among a set of overloaded functions,
-   namely the one with rettype2 and parameters2.  Two consecutive casts
-   are used to silence the "cannot find a match" and "invalid conversion"
-   errors that would otherwise occur.  */
-#if defined __cplusplus && defined GNULIB_NAMESPACE
-  /* The outer cast must be a reinterpret_cast.
-     The inner cast: When the function is defined as a set of overloaded
-     functions, it works as a static_cast<>, choosing the designated variant.
-     When the function is defined as a single variant, it works as a
-     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
-# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
-    namespace GNULIB_NAMESPACE                                                \
-    {                                                                         \
-      static rettype (*func) parameters =                                     \
-        reinterpret_cast<rettype(*)parameters>(                               \
-          (rettype2(*)parameters2)(::func));                                  \
-    }                                                                         \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#else
-# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#endif
-
-/* _GL_CXXALIASWARN (func);
-   causes a warning to be emitted when ::func is used but not when
-   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
-   variants.  */
-#if defined __cplusplus && defined GNULIB_NAMESPACE
-# define _GL_CXXALIASWARN(func) \
-   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
-# define _GL_CXXALIASWARN_1(func,namespace) \
-   _GL_CXXALIASWARN_2 (func, namespace)
-/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
-   we enable the warning only when not optimizing.  */
-# if !__OPTIMIZE__
-#  define _GL_CXXALIASWARN_2(func,namespace) \
-    _GL_WARN_ON_USE (func, \
-                     "The symbol ::" #func " refers to the system function. " \
-                     "Use " #namespace "::" #func " instead.")
-# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
-#  define _GL_CXXALIASWARN_2(func,namespace) \
-     extern __typeof__ (func) func
-# else
-#  define _GL_CXXALIASWARN_2(func,namespace) \
-     _GL_EXTERN_C int _gl_cxxalias_dummy
-# endif
-#else
-# define _GL_CXXALIASWARN(func) \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#endif
-
-/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
-   causes a warning to be emitted when the given overloaded variant of ::func
-   is used but not when GNULIB_NAMESPACE::func is used.  */
-#if defined __cplusplus && defined GNULIB_NAMESPACE
-# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
-   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
-                        GNULIB_NAMESPACE)
-# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
-   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
-/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
-   we enable the warning only when not optimizing.  */
-# if !__OPTIMIZE__
-#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
-    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
-                         "The symbol ::" #func " refers to the system function. " \
-                         "Use " #namespace "::" #func " instead.")
-# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
-#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
-     extern __typeof__ (func) func
-# else
-#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
-     _GL_EXTERN_C int _gl_cxxalias_dummy
-# endif
-#else
-# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#endif
-
-#endif /* _GL_CXXDEFS_H */
diff --git a/gdb/gnulib/extra/warn-on-use.h b/gdb/gnulib/extra/warn-on-use.h
deleted file mode 100644
index dc882c7..0000000
--- a/gdb/gnulib/extra/warn-on-use.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/* A C macro for emitting warnings if a function is used.
-   Copyright (C) 2010, 2011 Free Software Foundation, Inc.
-
-   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 3 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* _GL_WARN_ON_USE (function, "literal string") issues a declaration
-   for FUNCTION which will then trigger a compiler warning containing
-   the text of "literal string" anywhere that function is called, if
-   supported by the compiler.  If the compiler does not support this
-   feature, the macro expands to an unused extern declaration.
-
-   This macro is useful for marking a function as a potential
-   portability trap, with the intent that "literal string" include
-   instructions on the replacement function that should be used
-   instead.  However, one of the reasons that a function is a
-   portability trap is if it has the wrong signature.  Declaring
-   FUNCTION with a different signature in C is a compilation error, so
-   this macro must use the same type as any existing declaration so
-   that programs that avoid the problematic FUNCTION do not fail to
-   compile merely because they included a header that poisoned the
-   function.  But this implies that _GL_WARN_ON_USE is only safe to
-   use if FUNCTION is known to already have a declaration.  Use of
-   this macro implies that there must not be any other macro hiding
-   the declaration of FUNCTION; but undefining FUNCTION first is part
-   of the poisoning process anyway (although for symbols that are
-   provided only via a macro, the result is a compilation error rather
-   than a warning containing "literal string").  Also note that in
-   C++, it is only safe to use if FUNCTION has no overloads.
-
-   For an example, it is possible to poison 'getline' by:
-   - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]],
-     [getline]) in configure.ac, which potentially defines
-     HAVE_RAW_DECL_GETLINE
-   - adding this code to a header that wraps the system <stdio.h>:
-     #undef getline
-     #if HAVE_RAW_DECL_GETLINE
-     _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but"
-       "not universally present; use the gnulib module getline");
-     #endif
-
-   It is not possible to directly poison global variables.  But it is
-   possible to write a wrapper accessor function, and poison that
-   (less common usage, like &environ, will cause a compilation error
-   rather than issue the nice warning, but the end result of informing
-   the developer about their portability problem is still achieved):
-   #if HAVE_RAW_DECL_ENVIRON
-   static inline char ***rpl_environ (void) { return &environ; }
-   _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared");
-   # undef environ
-   # define environ (*rpl_environ ())
-   #endif
-   */
-#ifndef _GL_WARN_ON_USE
-
-# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
-/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
-#  define _GL_WARN_ON_USE(function, message) \
-extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
-# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
-/* Verify the existence of the function.  */
-#  define _GL_WARN_ON_USE(function, message) \
-extern __typeof__ (function) function
-# else /* Unsupported.  */
-#  define _GL_WARN_ON_USE(function, message) \
-_GL_WARN_EXTERN_C int _gl_warn_on_use
-# endif
-#endif
-
-/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
-   is like _GL_WARN_ON_USE (function, "string"), except that the function is
-   declared with the given prototype, consisting of return type, parameters,
-   and attributes.
-   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
-   not work in this case.  */
-#ifndef _GL_WARN_ON_USE_CXX
-# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
-#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
-extern rettype function parameters_and_attributes \
-     __attribute__ ((__warning__ (msg)))
-# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
-/* Verify the existence of the function.  */
-#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
-extern rettype function parameters_and_attributes
-# else /* Unsupported.  */
-#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
-_GL_WARN_EXTERN_C int _gl_warn_on_use
-# endif
-#endif
-
-/* _GL_WARN_EXTERN_C declaration;
-   performs the declaration with C linkage.  */
-#ifndef _GL_WARN_EXTERN_C
-# if defined __cplusplus
-#  define _GL_WARN_EXTERN_C extern "C"
-# else
-#  define _GL_WARN_EXTERN_C extern
-# endif
-#endif
diff --git a/gdb/gnulib/import/Makefile.am b/gdb/gnulib/import/Makefile.am
new file mode 100644
index 0000000..12c1c93
--- /dev/null
+++ b/gdb/gnulib/import/Makefile.am
@@ -0,0 +1,785 @@
+## DO NOT EDIT! GENERATED AUTOMATICALLY!
+## Process this file with automake to produce Makefile.in.
+# Copyright (C) 2002-2012 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 3 of the License, or
+# (at your option) any later version.
+#
+# This file 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 file.  If not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License,
+# this file may be distributed as part of a program that
+# contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=import --m4-base=import/m4 --doc-base=doc --tests-base=tests --aux-dir=import/extra --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files fnmatch-gnu inttypes memmem update-copyright
+
+AUTOMAKE_OPTIONS = 1.5 gnits
+
+SUBDIRS =
+noinst_HEADERS =
+noinst_LIBRARIES =
+noinst_LTLIBRARIES =
+EXTRA_DIST =
+BUILT_SOURCES =
+SUFFIXES =
+MOSTLYCLEANFILES = core *.stackdump
+MOSTLYCLEANDIRS =
+CLEANFILES =
+DISTCLEANFILES =
+MAINTAINERCLEANFILES =
+EXTRA_DIST += m4/gnulib-cache.m4
+
+AM_CPPFLAGS =
+AM_CFLAGS =
+
+noinst_LIBRARIES += libgnu.a
+
+libgnu_a_SOURCES =
+libgnu_a_LIBADD = $(gl_LIBOBJS)
+libgnu_a_DEPENDENCIES = $(gl_LIBOBJS)
+EXTRA_libgnu_a_SOURCES =
+
+## begin gnulib module alloca
+
+
+libgnu_a_LIBADD += @ALLOCA@
+libgnu_a_DEPENDENCIES += @ALLOCA@
+EXTRA_DIST += alloca.c
+
+EXTRA_libgnu_a_SOURCES += alloca.c
+
+## end   gnulib module alloca
+
+## begin gnulib module alloca-opt
+
+BUILT_SOURCES += $(ALLOCA_H)
+
+# We need the following in order to create <alloca.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_ALLOCA_H
+alloca.h: alloca.in.h $(top_builddir)/config.status
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  cat $(srcdir)/alloca.in.h; \
+	} > $@-t && \
+	mv -f $@-t $@
+else
+alloca.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += alloca.h alloca.h-t
+
+EXTRA_DIST += alloca.in.h
+
+## end   gnulib module alloca-opt
+
+## begin gnulib module configmake
+
+# Listed in the same order as the GNU makefile conventions, and
+# provided by autoconf 2.59c+.
+# The Automake-defined pkg* macros are appended, in the order
+# listed in the Automake 1.10a+ documentation.
+configmake.h: Makefile
+	$(AM_V_GEN)rm -f $@-t && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  echo '#define PREFIX "$(prefix)"'; \
+	  echo '#define EXEC_PREFIX "$(exec_prefix)"'; \
+	  echo '#define BINDIR "$(bindir)"'; \
+	  echo '#define SBINDIR "$(sbindir)"'; \
+	  echo '#define LIBEXECDIR "$(libexecdir)"'; \
+	  echo '#define DATAROOTDIR "$(datarootdir)"'; \
+	  echo '#define DATADIR "$(datadir)"'; \
+	  echo '#define SYSCONFDIR "$(sysconfdir)"'; \
+	  echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \
+	  echo '#define LOCALSTATEDIR "$(localstatedir)"'; \
+	  echo '#define INCLUDEDIR "$(includedir)"'; \
+	  echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \
+	  echo '#define DOCDIR "$(docdir)"'; \
+	  echo '#define INFODIR "$(infodir)"'; \
+	  echo '#define HTMLDIR "$(htmldir)"'; \
+	  echo '#define DVIDIR "$(dvidir)"'; \
+	  echo '#define PDFDIR "$(pdfdir)"'; \
+	  echo '#define PSDIR "$(psdir)"'; \
+	  echo '#define LIBDIR "$(libdir)"'; \
+	  echo '#define LISPDIR "$(lispdir)"'; \
+	  echo '#define LOCALEDIR "$(localedir)"'; \
+	  echo '#define MANDIR "$(mandir)"'; \
+	  echo '#define MANEXT "$(manext)"'; \
+	  echo '#define PKGDATADIR "$(pkgdatadir)"'; \
+	  echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \
+	  echo '#define PKGLIBDIR "$(pkglibdir)"'; \
+	  echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \
+	} | sed '/""/d' > $@-t && \
+	mv -f $@-t $@
+
+BUILT_SOURCES += configmake.h
+CLEANFILES += configmake.h configmake.h-t
+
+## end   gnulib module configmake
+
+## begin gnulib module fnmatch
+
+BUILT_SOURCES += $(FNMATCH_H)
+
+# We need the following in order to create <fnmatch.h> when the system
+# doesn't have one that supports the required API.
+if GL_GENERATE_FNMATCH_H
+fnmatch.h: fnmatch.in.h $(top_builddir)/config.status $(ARG_NONNULL_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      < $(srcdir)/fnmatch.in.h; \
+	} > $@-t && \
+	mv -f $@-t $@
+else
+fnmatch.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += fnmatch.h fnmatch.h-t
+
+EXTRA_DIST += fnmatch.c fnmatch.in.h fnmatch_loop.c
+
+EXTRA_libgnu_a_SOURCES += fnmatch.c fnmatch_loop.c
+
+## end   gnulib module fnmatch
+
+## begin gnulib module inttypes-incomplete
+
+BUILT_SOURCES += inttypes.h
+
+# We need the following in order to create <inttypes.h> when the system
+# doesn't have one that works with the given compiler.
+inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \
+	      -e 's/@''PRI_MACROS_BROKEN''@/$(PRI_MACROS_BROKEN)/g' \
+	      -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+	      -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
+	      -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
+	      -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \
+	      -e 's/@''GNULIB_IMAXABS''@/$(GNULIB_IMAXABS)/g' \
+	      -e 's/@''GNULIB_IMAXDIV''@/$(GNULIB_IMAXDIV)/g' \
+	      -e 's/@''GNULIB_STRTOIMAX''@/$(GNULIB_STRTOIMAX)/g' \
+	      -e 's/@''GNULIB_STRTOUMAX''@/$(GNULIB_STRTOUMAX)/g' \
+	      -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \
+	      -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \
+	      -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \
+	      -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \
+	      -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \
+	      -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \
+	      -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \
+	      -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \
+	      -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/inttypes.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += inttypes.h inttypes.h-t
+
+EXTRA_DIST += inttypes.in.h
+
+## end   gnulib module inttypes-incomplete
+
+## begin gnulib module localcharset
+
+libgnu_a_SOURCES += localcharset.h localcharset.c
+
+# We need the following in order to install a simple file in $(libdir)
+# which is shared with other installed packages. We use a list of referencing
+# packages so that "make uninstall" will remove the file if and only if it
+# is not used by another installed package.
+# On systems with glibc-2.1 or newer, the file is redundant, therefore we
+# avoid installing it.
+
+all-local: charset.alias ref-add.sed ref-del.sed
+
+charset_alias = $(DESTDIR)$(libdir)/charset.alias
+charset_tmp = $(DESTDIR)$(libdir)/charset.tmp
+install-exec-local: install-exec-localcharset
+install-exec-localcharset: all-local
+	if test $(GLIBC21) = no; then \
+	  case '$(host_os)' in \
+	    darwin[56]*) \
+	      need_charset_alias=true ;; \
+	    darwin* | cygwin* | mingw* | pw32* | cegcc*) \
+	      need_charset_alias=false ;; \
+	    *) \
+	      need_charset_alias=true ;; \
+	  esac ; \
+	else \
+	  need_charset_alias=false ; \
+	fi ; \
+	if $$need_charset_alias; then \
+	  $(mkinstalldirs) $(DESTDIR)$(libdir) ; \
+	fi ; \
+	if test -f $(charset_alias); then \
+	  sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \
+	  $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
+	  rm -f $(charset_tmp) ; \
+	else \
+	  if $$need_charset_alias; then \
+	    sed -f ref-add.sed charset.alias > $(charset_tmp) ; \
+	    $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
+	    rm -f $(charset_tmp) ; \
+	  fi ; \
+	fi
+
+uninstall-local: uninstall-localcharset
+uninstall-localcharset: all-local
+	if test -f $(charset_alias); then \
+	  sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \
+	  if grep '^# Packages using this file: $$' $(charset_tmp) \
+	      > /dev/null; then \
+	    rm -f $(charset_alias); \
+	  else \
+	    $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \
+	  fi; \
+	  rm -f $(charset_tmp); \
+	fi
+
+charset.alias: config.charset
+	$(AM_V_GEN)rm -f t-$@ $@ && \
+	$(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \
+	mv t-$@ $@
+
+SUFFIXES += .sed .sin
+.sin.sed:
+	$(AM_V_GEN)rm -f t-$@ $@ && \
+	sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \
+	mv t-$@ $@
+
+CLEANFILES += charset.alias ref-add.sed ref-del.sed
+
+EXTRA_DIST += config.charset ref-add.sin ref-del.sin
+
+## end   gnulib module localcharset
+
+## begin gnulib module mbrtowc
+
+
+EXTRA_DIST += mbrtowc.c
+
+EXTRA_libgnu_a_SOURCES += mbrtowc.c
+
+## end   gnulib module mbrtowc
+
+## begin gnulib module mbsinit
+
+
+EXTRA_DIST += mbsinit.c
+
+EXTRA_libgnu_a_SOURCES += mbsinit.c
+
+## end   gnulib module mbsinit
+
+## begin gnulib module mbsrtowcs
+
+
+EXTRA_DIST += mbsrtowcs-impl.h mbsrtowcs-state.c mbsrtowcs.c
+
+EXTRA_libgnu_a_SOURCES += mbsrtowcs-state.c mbsrtowcs.c
+
+## end   gnulib module mbsrtowcs
+
+## begin gnulib module memchr
+
+
+EXTRA_DIST += memchr.c memchr.valgrind
+
+EXTRA_libgnu_a_SOURCES += memchr.c
+
+## end   gnulib module memchr
+
+## begin gnulib module memmem-simple
+
+
+EXTRA_DIST += memmem.c str-two-way.h
+
+EXTRA_libgnu_a_SOURCES += memmem.c
+
+## end   gnulib module memmem-simple
+
+## begin gnulib module snippet/arg-nonnull
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+
+BUILT_SOURCES += arg-nonnull.h
+# The arg-nonnull.h that gets inserted into generated .h files is the same as
+# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut
+# off.
+arg-nonnull.h: $(top_srcdir)/import/extra/snippet/arg-nonnull.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	sed -n -e '/GL_ARG_NONNULL/,$$p' \
+	  < $(top_srcdir)/import/extra/snippet/arg-nonnull.h \
+	  > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t
+
+ARG_NONNULL_H=arg-nonnull.h
+
+EXTRA_DIST += $(top_srcdir)/import/extra/snippet/arg-nonnull.h
+
+## end   gnulib module snippet/arg-nonnull
+
+## begin gnulib module snippet/c++defs
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+
+BUILT_SOURCES += c++defs.h
+# The c++defs.h that gets inserted into generated .h files is the same as
+# build-aux/snippet/c++defs.h, except that it has the copyright header cut off.
+c++defs.h: $(top_srcdir)/import/extra/snippet/c++defs.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	sed -n -e '/_GL_CXXDEFS/,$$p' \
+	  < $(top_srcdir)/import/extra/snippet/c++defs.h \
+	  > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += c++defs.h c++defs.h-t
+
+CXXDEFS_H=c++defs.h
+
+EXTRA_DIST += $(top_srcdir)/import/extra/snippet/c++defs.h
+
+## end   gnulib module snippet/c++defs
+
+## begin gnulib module snippet/warn-on-use
+
+BUILT_SOURCES += warn-on-use.h
+# The warn-on-use.h that gets inserted into generated .h files is the same as
+# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut
+# off.
+warn-on-use.h: $(top_srcdir)/import/extra/snippet/warn-on-use.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	sed -n -e '/^.ifndef/,$$p' \
+	  < $(top_srcdir)/import/extra/snippet/warn-on-use.h \
+	  > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t
+
+WARN_ON_USE_H=warn-on-use.h
+
+EXTRA_DIST += $(top_srcdir)/import/extra/snippet/warn-on-use.h
+
+## end   gnulib module snippet/warn-on-use
+
+## begin gnulib module stdbool
+
+BUILT_SOURCES += $(STDBOOL_H)
+
+# We need the following in order to create <stdbool.h> when the system
+# doesn't have one that works.
+if GL_GENERATE_STDBOOL_H
+stdbool.h: stdbool.in.h $(top_builddir)/config.status
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+else
+stdbool.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += stdbool.h stdbool.h-t
+
+EXTRA_DIST += stdbool.in.h
+
+## end   gnulib module stdbool
+
+## begin gnulib module stddef
+
+BUILT_SOURCES += $(STDDEF_H)
+
+# We need the following in order to create <stddef.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_STDDEF_H
+stddef.h: stddef.in.h $(top_builddir)/config.status
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
+	      -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
+	      -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
+	      < $(srcdir)/stddef.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+else
+stddef.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += stddef.h stddef.h-t
+
+EXTRA_DIST += stddef.in.h
+
+## end   gnulib module stddef
+
+## begin gnulib module stdint
+
+BUILT_SOURCES += $(STDINT_H)
+
+# We need the following in order to create <stdint.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_STDINT_H
+stdint.h: stdint.in.h $(top_builddir)/config.status
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
+	      -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
+	      -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+	      -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
+	      -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
+	      -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
+	      -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
+	      -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
+	      -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+	      -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
+	      -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
+	      -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
+	      -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
+	      -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
+	      -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
+	      -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
+	      -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
+	      -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
+	      -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
+	      -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
+	      -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
+	      -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
+	      < $(srcdir)/stdint.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+else
+stdint.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += stdint.h stdint.h-t
+
+EXTRA_DIST += stdint.in.h
+
+## end   gnulib module stdint
+
+## begin gnulib module streq
+
+
+EXTRA_DIST += streq.h
+
+## end   gnulib module streq
+
+## begin gnulib module string
+
+BUILT_SOURCES += string.h
+
+# We need the following in order to create <string.h> when the system
+# doesn't have one that works with the given compiler.
+string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
+	      -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \
+	      -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \
+	      -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \
+	      -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \
+	      -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \
+	      -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \
+	      -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \
+	      -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \
+	      -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \
+	      -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \
+	      -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \
+	      -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \
+	      -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \
+	      -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \
+	      -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \
+	      -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \
+	      -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \
+	      -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \
+	      -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \
+	      -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \
+	      -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \
+	      -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \
+	      -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \
+	      -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \
+	      -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \
+	      -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \
+	      -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \
+	      -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \
+	      -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \
+	      -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \
+	      -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \
+	      -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \
+	      -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \
+	      -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \
+	      -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \
+	      -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \
+	      -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \
+	      < $(srcdir)/string.in.h | \
+	  sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \
+	      -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \
+	      -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
+	      -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \
+	      -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
+	      -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
+	      -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
+	      -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \
+	      -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \
+	      -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
+	      -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
+	      -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
+	      -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
+	      -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
+	      -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
+	      -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \
+	      -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
+	      -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
+	      -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \
+	      -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
+	      -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
+	      -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \
+	      -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \
+	      -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
+	      -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
+	      -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \
+	      -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
+	      -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
+	      -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
+	      -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \
+	      -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \
+	      -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \
+	      -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \
+	      -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
+	      -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
+	      -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	      < $(srcdir)/string.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += string.h string.h-t
+
+EXTRA_DIST += string.in.h
+
+## end   gnulib module string
+
+## begin gnulib module strnlen1
+
+libgnu_a_SOURCES += strnlen1.h strnlen1.c
+
+## end   gnulib module strnlen1
+
+## begin gnulib module update-copyright
+
+
+EXTRA_DIST += $(top_srcdir)/import/extra/update-copyright
+
+## end   gnulib module update-copyright
+
+## begin gnulib module verify
+
+
+EXTRA_DIST += verify.h
+
+## end   gnulib module verify
+
+## begin gnulib module wchar
+
+BUILT_SOURCES += wchar.h
+
+# We need the following in order to create <wchar.h> when the system
+# version does not work standalone.
+wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \
+	      -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
+	      -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
+	      -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \
+	      -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \
+	      -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \
+	      -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \
+	      -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \
+	      -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \
+	      -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \
+	      -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \
+	      -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \
+	      -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \
+	      -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \
+	      -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \
+	      -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \
+	      -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \
+	      -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \
+	      -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \
+	      -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \
+	      -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \
+	      -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \
+	      -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \
+	      -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \
+	      -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \
+	      -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \
+	      -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \
+	      -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \
+	      -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \
+	      -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \
+	      -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \
+	      -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \
+	      -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \
+	      -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \
+	      -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \
+	      -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \
+	      -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \
+	      -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \
+	      -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \
+	      -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \
+	      -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \
+	      -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \
+	      < $(srcdir)/wchar.in.h | \
+	  sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
+	      -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
+	      -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
+	      -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
+	      -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
+	      -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
+	      -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
+	      -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
+	      -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
+	      -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
+	      -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \
+	      -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \
+	      -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \
+	      -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \
+	      -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \
+	      -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \
+	      -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \
+	      -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \
+	      -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \
+	      -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \
+	      -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \
+	      -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \
+	      -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \
+	      -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \
+	      -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \
+	      -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \
+	      -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \
+	      -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \
+	      -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \
+	      -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \
+	      -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \
+	      -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \
+	      -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \
+	      -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \
+	      -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \
+	      -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \
+	      -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \
+	      -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \
+	      -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
+	      -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
+	  | \
+	  sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
+	      -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
+	      -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
+	      -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
+	      -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
+	      -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
+	      -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
+	      -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
+	      -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
+	      -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
+	      -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
+	      -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
+	      -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += wchar.h wchar.h-t
+
+EXTRA_DIST += wchar.in.h
+
+## end   gnulib module wchar
+
+## begin gnulib module wctype-h
+
+BUILT_SOURCES += wctype.h
+
+# We need the following in order to create <wctype.h> when the system
+# doesn't have one that works with the given compiler.
+wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
+	      -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \
+	      -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \
+	      -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \
+	      -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \
+	      -e 's/@''GNULIB_TOWCTRANS''@/$(GNULIB_TOWCTRANS)/g' \
+	      -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \
+	      -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
+	      -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \
+	      -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \
+	      -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
+	      -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \
+	      -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
+	      -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/wctype.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += wctype.h wctype.h-t
+
+EXTRA_DIST += wctype.in.h
+
+## end   gnulib module wctype-h
+
+
+mostlyclean-local: mostlyclean-generic
+	@for dir in '' $(MOSTLYCLEANDIRS); do \
+	  if test -n "$$dir" && test -d $$dir; then \
+	    echo "rmdir $$dir"; rmdir $$dir; \
+	  fi; \
+	done; \
+	:
diff --git a/gdb/gnulib/import/Makefile.in b/gdb/gnulib/import/Makefile.in
new file mode 100644
index 0000000..514380b
--- /dev/null
+++ b/gdb/gnulib/import/Makefile.in
@@ -0,0 +1,1474 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# Copyright (C) 2002-2012 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 3 of the License, or
+# (at your option) any later version.
+#
+# This file 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 file.  If not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License,
+# this file may be distributed as part of a program that
+# contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=import --m4-base=import/m4 --doc-base=doc --tests-base=tests --aux-dir=import/extra --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files fnmatch-gnu inttypes memmem update-copyright
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = import
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in alloca.c
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/import/m4/00gnulib.m4 \
+	$(top_srcdir)/import/m4/alloca.m4 \
+	$(top_srcdir)/import/m4/codeset.m4 \
+	$(top_srcdir)/import/m4/configmake.m4 \
+	$(top_srcdir)/import/m4/extensions.m4 \
+	$(top_srcdir)/import/m4/fcntl-o.m4 \
+	$(top_srcdir)/import/m4/fnmatch.m4 \
+	$(top_srcdir)/import/m4/glibc21.m4 \
+	$(top_srcdir)/import/m4/gnulib-common.m4 \
+	$(top_srcdir)/import/m4/gnulib-comp.m4 \
+	$(top_srcdir)/import/m4/include_next.m4 \
+	$(top_srcdir)/import/m4/inttypes-pri.m4 \
+	$(top_srcdir)/import/m4/inttypes.m4 \
+	$(top_srcdir)/import/m4/localcharset.m4 \
+	$(top_srcdir)/import/m4/locale-fr.m4 \
+	$(top_srcdir)/import/m4/locale-ja.m4 \
+	$(top_srcdir)/import/m4/locale-zh.m4 \
+	$(top_srcdir)/import/m4/longlong.m4 \
+	$(top_srcdir)/import/m4/mbrtowc.m4 \
+	$(top_srcdir)/import/m4/mbsinit.m4 \
+	$(top_srcdir)/import/m4/mbsrtowcs.m4 \
+	$(top_srcdir)/import/m4/mbstate_t.m4 \
+	$(top_srcdir)/import/m4/memchr.m4 \
+	$(top_srcdir)/import/m4/memmem.m4 \
+	$(top_srcdir)/import/m4/mmap-anon.m4 \
+	$(top_srcdir)/import/m4/multiarch.m4 \
+	$(top_srcdir)/import/m4/onceonly.m4 \
+	$(top_srcdir)/import/m4/stdbool.m4 \
+	$(top_srcdir)/import/m4/stddef_h.m4 \
+	$(top_srcdir)/import/m4/stdint.m4 \
+	$(top_srcdir)/import/m4/string_h.m4 \
+	$(top_srcdir)/import/m4/warn-on-use.m4 \
+	$(top_srcdir)/import/m4/wchar_h.m4 \
+	$(top_srcdir)/import/m4/wchar_t.m4 \
+	$(top_srcdir)/import/m4/wctype_h.m4 \
+	$(top_srcdir)/import/m4/wint_t.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/../../mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+libgnu_a_AR = $(AR) $(ARFLAGS)
+am__DEPENDENCIES_1 =
+am_libgnu_a_OBJECTS = localcharset.$(OBJEXT) strnlen1.$(OBJEXT)
+libgnu_a_OBJECTS = $(am_libgnu_a_OBJECTS)
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/../../depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libgnu_a_SOURCES) $(EXTRA_libgnu_a_SOURCES)
+DIST_SOURCES = $(libgnu_a_SOURCES) $(EXTRA_libgnu_a_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+HEADERS = $(noinst_HEADERS)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+pkglibexecdir = @pkglibexecdir@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FNMATCH_H = @FNMATCH_H@
+GLIBC21 = @GLIBC21@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_FFSL = @GNULIB_FFSL@
+GNULIB_FFSLL = @GNULIB_FFSLL@
+GNULIB_IMAXABS = @GNULIB_IMAXABS@
+GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
+GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
+GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_STPCPY = @GNULIB_STPCPY@
+GNULIB_STPNCPY = @GNULIB_STPNCPY@
+GNULIB_STRCASESTR = @GNULIB_STRCASESTR@
+GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@
+GNULIB_STRDUP = @GNULIB_STRDUP@
+GNULIB_STRERROR = @GNULIB_STRERROR@
+GNULIB_STRERROR_R = @GNULIB_STRERROR_R@
+GNULIB_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
+GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
+GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
+GNULIB_WCPCPY = @GNULIB_WCPCPY@
+GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
+GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
+GNULIB_WCSCAT = @GNULIB_WCSCAT@
+GNULIB_WCSCHR = @GNULIB_WCSCHR@
+GNULIB_WCSCMP = @GNULIB_WCSCMP@
+GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
+GNULIB_WCSCPY = @GNULIB_WCSCPY@
+GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
+GNULIB_WCSDUP = @GNULIB_WCSDUP@
+GNULIB_WCSLEN = @GNULIB_WCSLEN@
+GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
+GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
+GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
+GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
+GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
+GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCSSPN = @GNULIB_WCSSPN@
+GNULIB_WCSSTR = @GNULIB_WCSSTR@
+GNULIB_WCSTOK = @GNULIB_WCSTOK@
+GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
+GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCTRANS = @GNULIB_WCTRANS@
+GNULIB_WCTYPE = @GNULIB_WCTYPE@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
+GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
+GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
+GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
+GNULIB_WMEMSET = @GNULIB_WMEMSET@
+GREP = @GREP@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMSET = @HAVE_WMEMSET@
+HAVE__BOOL = @HAVE__BOOL@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
+LDFLAGS = @LDFLAGS@
+LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
+LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALE_FR = @LOCALE_FR@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDBOOL_H = @STDBOOL_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+VERSION = @VERSION@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = 1.5 gnits
+SUBDIRS = 
+noinst_HEADERS = 
+noinst_LIBRARIES = libgnu.a
+noinst_LTLIBRARIES = 
+EXTRA_DIST = m4/gnulib-cache.m4 alloca.c alloca.in.h fnmatch.c \
+	fnmatch.in.h fnmatch_loop.c inttypes.in.h config.charset \
+	ref-add.sin ref-del.sin mbrtowc.c mbsinit.c mbsrtowcs-impl.h \
+	mbsrtowcs-state.c mbsrtowcs.c memchr.c memchr.valgrind \
+	memmem.c str-two-way.h \
+	$(top_srcdir)/import/extra/snippet/arg-nonnull.h \
+	$(top_srcdir)/import/extra/snippet/c++defs.h \
+	$(top_srcdir)/import/extra/snippet/warn-on-use.h stdbool.in.h \
+	stddef.in.h stdint.in.h streq.h string.in.h \
+	$(top_srcdir)/import/extra/update-copyright verify.h \
+	wchar.in.h wctype.in.h
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+BUILT_SOURCES = $(ALLOCA_H) configmake.h $(FNMATCH_H) inttypes.h \
+	arg-nonnull.h c++defs.h warn-on-use.h $(STDBOOL_H) $(STDDEF_H) \
+	$(STDINT_H) string.h wchar.h wctype.h
+SUFFIXES = .sed .sin
+MOSTLYCLEANFILES = core *.stackdump alloca.h alloca.h-t fnmatch.h \
+	fnmatch.h-t inttypes.h inttypes.h-t arg-nonnull.h \
+	arg-nonnull.h-t c++defs.h c++defs.h-t warn-on-use.h \
+	warn-on-use.h-t stdbool.h stdbool.h-t stddef.h stddef.h-t \
+	stdint.h stdint.h-t string.h string.h-t wchar.h wchar.h-t \
+	wctype.h wctype.h-t
+MOSTLYCLEANDIRS = 
+CLEANFILES = configmake.h configmake.h-t charset.alias ref-add.sed \
+	ref-del.sed
+DISTCLEANFILES = 
+MAINTAINERCLEANFILES = 
+AM_CPPFLAGS = 
+AM_CFLAGS = 
+libgnu_a_SOURCES = localcharset.h localcharset.c strnlen1.h strnlen1.c
+libgnu_a_LIBADD = $(gl_LIBOBJS) @ALLOCA@
+libgnu_a_DEPENDENCIES = $(gl_LIBOBJS) @ALLOCA@
+EXTRA_libgnu_a_SOURCES = alloca.c fnmatch.c fnmatch_loop.c mbrtowc.c \
+	mbsinit.c mbsrtowcs-state.c mbsrtowcs.c memchr.c memmem.c
+charset_alias = $(DESTDIR)$(libdir)/charset.alias
+charset_tmp = $(DESTDIR)$(libdir)/charset.tmp
+ARG_NONNULL_H = arg-nonnull.h
+CXXDEFS_H = c++defs.h
+WARN_ON_USE_H = warn-on-use.h
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .sed .sin .c .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits import/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnits import/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLIBRARIES:
+	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+libgnu.a: $(libgnu_a_OBJECTS) $(libgnu_a_DEPENDENCIES) 
+	-rm -f libgnu.a
+	$(libgnu_a_AR) libgnu.a $(libgnu_a_OBJECTS) $(libgnu_a_LIBADD)
+	$(RANLIB) libgnu.a
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/alloca.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/alloca.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fnmatch.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fnmatch_loop.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/localcharset.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mbrtowc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mbsinit.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mbsrtowcs-state.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mbsrtowcs.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/memchr.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/memmem.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/strnlen1.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) all-local
+installdirs: installdirs-recursive
+installdirs-am:
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-noinstLIBRARIES clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf $(DEPDIR) ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-exec-local
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -rf $(DEPDIR) ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-local
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-local
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
+	ctags-recursive install install-am install-strip \
+	tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am all-local check check-am clean clean-generic \
+	clean-noinstLIBRARIES clean-noinstLTLIBRARIES ctags \
+	ctags-recursive distclean distclean-compile distclean-generic \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-exec-local \
+	install-html install-html-am install-info install-info-am \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-local pdf pdf-am ps ps-am tags \
+	tags-recursive uninstall uninstall-am uninstall-local
+
+
+# We need the following in order to create <alloca.h> when the system
+# doesn't have one that works with the given compiler.
+ at GL_GENERATE_ALLOCA_H_TRUE@alloca.h: alloca.in.h $(top_builddir)/config.status
+ at GL_GENERATE_ALLOCA_H_TRUE@	$(AM_V_GEN)rm -f $@-t $@ && \
+ at GL_GENERATE_ALLOCA_H_TRUE@	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ at GL_GENERATE_ALLOCA_H_TRUE@	  cat $(srcdir)/alloca.in.h; \
+ at GL_GENERATE_ALLOCA_H_TRUE@	} > $@-t && \
+ at GL_GENERATE_ALLOCA_H_TRUE@	mv -f $@-t $@
+ at GL_GENERATE_ALLOCA_H_FALSE@alloca.h: $(top_builddir)/config.status
+ at GL_GENERATE_ALLOCA_H_FALSE@	rm -f $@
+
+# Listed in the same order as the GNU makefile conventions, and
+# provided by autoconf 2.59c+.
+# The Automake-defined pkg* macros are appended, in the order
+# listed in the Automake 1.10a+ documentation.
+configmake.h: Makefile
+	$(AM_V_GEN)rm -f $@-t && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  echo '#define PREFIX "$(prefix)"'; \
+	  echo '#define EXEC_PREFIX "$(exec_prefix)"'; \
+	  echo '#define BINDIR "$(bindir)"'; \
+	  echo '#define SBINDIR "$(sbindir)"'; \
+	  echo '#define LIBEXECDIR "$(libexecdir)"'; \
+	  echo '#define DATAROOTDIR "$(datarootdir)"'; \
+	  echo '#define DATADIR "$(datadir)"'; \
+	  echo '#define SYSCONFDIR "$(sysconfdir)"'; \
+	  echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \
+	  echo '#define LOCALSTATEDIR "$(localstatedir)"'; \
+	  echo '#define INCLUDEDIR "$(includedir)"'; \
+	  echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \
+	  echo '#define DOCDIR "$(docdir)"'; \
+	  echo '#define INFODIR "$(infodir)"'; \
+	  echo '#define HTMLDIR "$(htmldir)"'; \
+	  echo '#define DVIDIR "$(dvidir)"'; \
+	  echo '#define PDFDIR "$(pdfdir)"'; \
+	  echo '#define PSDIR "$(psdir)"'; \
+	  echo '#define LIBDIR "$(libdir)"'; \
+	  echo '#define LISPDIR "$(lispdir)"'; \
+	  echo '#define LOCALEDIR "$(localedir)"'; \
+	  echo '#define MANDIR "$(mandir)"'; \
+	  echo '#define MANEXT "$(manext)"'; \
+	  echo '#define PKGDATADIR "$(pkgdatadir)"'; \
+	  echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \
+	  echo '#define PKGLIBDIR "$(pkglibdir)"'; \
+	  echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \
+	} | sed '/""/d' > $@-t && \
+	mv -f $@-t $@
+
+# We need the following in order to create <fnmatch.h> when the system
+# doesn't have one that supports the required API.
+ at GL_GENERATE_FNMATCH_H_TRUE@fnmatch.h: fnmatch.in.h $(top_builddir)/config.status $(ARG_NONNULL_H)
+ at GL_GENERATE_FNMATCH_H_TRUE@	$(AM_V_GEN)rm -f $@-t $@ && \
+ at GL_GENERATE_FNMATCH_H_TRUE@	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ at GL_GENERATE_FNMATCH_H_TRUE@	  sed -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ at GL_GENERATE_FNMATCH_H_TRUE@	      < $(srcdir)/fnmatch.in.h; \
+ at GL_GENERATE_FNMATCH_H_TRUE@	} > $@-t && \
+ at GL_GENERATE_FNMATCH_H_TRUE@	mv -f $@-t $@
+ at GL_GENERATE_FNMATCH_H_FALSE@fnmatch.h: $(top_builddir)/config.status
+ at GL_GENERATE_FNMATCH_H_FALSE@	rm -f $@
+
+# We need the following in order to create <inttypes.h> when the system
+# doesn't have one that works with the given compiler.
+inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \
+	      -e 's/@''PRI_MACROS_BROKEN''@/$(PRI_MACROS_BROKEN)/g' \
+	      -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+	      -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
+	      -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
+	      -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \
+	      -e 's/@''GNULIB_IMAXABS''@/$(GNULIB_IMAXABS)/g' \
+	      -e 's/@''GNULIB_IMAXDIV''@/$(GNULIB_IMAXDIV)/g' \
+	      -e 's/@''GNULIB_STRTOIMAX''@/$(GNULIB_STRTOIMAX)/g' \
+	      -e 's/@''GNULIB_STRTOUMAX''@/$(GNULIB_STRTOUMAX)/g' \
+	      -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \
+	      -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \
+	      -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \
+	      -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \
+	      -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \
+	      -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \
+	      -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \
+	      -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \
+	      -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/inttypes.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+
+# We need the following in order to install a simple file in $(libdir)
+# which is shared with other installed packages. We use a list of referencing
+# packages so that "make uninstall" will remove the file if and only if it
+# is not used by another installed package.
+# On systems with glibc-2.1 or newer, the file is redundant, therefore we
+# avoid installing it.
+
+all-local: charset.alias ref-add.sed ref-del.sed
+install-exec-local: install-exec-localcharset
+install-exec-localcharset: all-local
+	if test $(GLIBC21) = no; then \
+	  case '$(host_os)' in \
+	    darwin[56]*) \
+	      need_charset_alias=true ;; \
+	    darwin* | cygwin* | mingw* | pw32* | cegcc*) \
+	      need_charset_alias=false ;; \
+	    *) \
+	      need_charset_alias=true ;; \
+	  esac ; \
+	else \
+	  need_charset_alias=false ; \
+	fi ; \
+	if $$need_charset_alias; then \
+	  $(mkinstalldirs) $(DESTDIR)$(libdir) ; \
+	fi ; \
+	if test -f $(charset_alias); then \
+	  sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \
+	  $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
+	  rm -f $(charset_tmp) ; \
+	else \
+	  if $$need_charset_alias; then \
+	    sed -f ref-add.sed charset.alias > $(charset_tmp) ; \
+	    $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
+	    rm -f $(charset_tmp) ; \
+	  fi ; \
+	fi
+
+uninstall-local: uninstall-localcharset
+uninstall-localcharset: all-local
+	if test -f $(charset_alias); then \
+	  sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \
+	  if grep '^# Packages using this file: $$' $(charset_tmp) \
+	      > /dev/null; then \
+	    rm -f $(charset_alias); \
+	  else \
+	    $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \
+	  fi; \
+	  rm -f $(charset_tmp); \
+	fi
+
+charset.alias: config.charset
+	$(AM_V_GEN)rm -f t-$@ $@ && \
+	$(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \
+	mv t-$@ $@
+.sin.sed:
+	$(AM_V_GEN)rm -f t-$@ $@ && \
+	sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \
+	mv t-$@ $@
+# The arg-nonnull.h that gets inserted into generated .h files is the same as
+# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut
+# off.
+arg-nonnull.h: $(top_srcdir)/import/extra/snippet/arg-nonnull.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	sed -n -e '/GL_ARG_NONNULL/,$$p' \
+	  < $(top_srcdir)/import/extra/snippet/arg-nonnull.h \
+	  > $@-t && \
+	mv $@-t $@
+# The c++defs.h that gets inserted into generated .h files is the same as
+# build-aux/snippet/c++defs.h, except that it has the copyright header cut off.
+c++defs.h: $(top_srcdir)/import/extra/snippet/c++defs.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	sed -n -e '/_GL_CXXDEFS/,$$p' \
+	  < $(top_srcdir)/import/extra/snippet/c++defs.h \
+	  > $@-t && \
+	mv $@-t $@
+# The warn-on-use.h that gets inserted into generated .h files is the same as
+# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut
+# off.
+warn-on-use.h: $(top_srcdir)/import/extra/snippet/warn-on-use.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	sed -n -e '/^.ifndef/,$$p' \
+	  < $(top_srcdir)/import/extra/snippet/warn-on-use.h \
+	  > $@-t && \
+	mv $@-t $@
+
+# We need the following in order to create <stdbool.h> when the system
+# doesn't have one that works.
+ at GL_GENERATE_STDBOOL_H_TRUE@stdbool.h: stdbool.in.h $(top_builddir)/config.status
+ at GL_GENERATE_STDBOOL_H_TRUE@	$(AM_V_GEN)rm -f $@-t $@ && \
+ at GL_GENERATE_STDBOOL_H_TRUE@	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ at GL_GENERATE_STDBOOL_H_TRUE@	  sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \
+ at GL_GENERATE_STDBOOL_H_TRUE@	} > $@-t && \
+ at GL_GENERATE_STDBOOL_H_TRUE@	mv $@-t $@
+ at GL_GENERATE_STDBOOL_H_FALSE@stdbool.h: $(top_builddir)/config.status
+ at GL_GENERATE_STDBOOL_H_FALSE@	rm -f $@
+
+# We need the following in order to create <stddef.h> when the system
+# doesn't have one that works with the given compiler.
+ at GL_GENERATE_STDDEF_H_TRUE@stddef.h: stddef.in.h $(top_builddir)/config.status
+ at GL_GENERATE_STDDEF_H_TRUE@	$(AM_V_GEN)rm -f $@-t $@ && \
+ at GL_GENERATE_STDDEF_H_TRUE@	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+ at GL_GENERATE_STDDEF_H_TRUE@	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ at GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ at GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ at GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ at GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
+ at GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
+ at GL_GENERATE_STDDEF_H_TRUE@	      -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
+ at GL_GENERATE_STDDEF_H_TRUE@	      < $(srcdir)/stddef.in.h; \
+ at GL_GENERATE_STDDEF_H_TRUE@	} > $@-t && \
+ at GL_GENERATE_STDDEF_H_TRUE@	mv $@-t $@
+ at GL_GENERATE_STDDEF_H_FALSE@stddef.h: $(top_builddir)/config.status
+ at GL_GENERATE_STDDEF_H_FALSE@	rm -f $@
+
+# We need the following in order to create <stdint.h> when the system
+# doesn't have one that works with the given compiler.
+ at GL_GENERATE_STDINT_H_TRUE@stdint.h: stdint.in.h $(top_builddir)/config.status
+ at GL_GENERATE_STDINT_H_TRUE@	$(AM_V_GEN)rm -f $@-t $@ && \
+ at GL_GENERATE_STDINT_H_TRUE@	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ at GL_GENERATE_STDINT_H_TRUE@	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
+ at GL_GENERATE_STDINT_H_TRUE@	      < $(srcdir)/stdint.in.h; \
+ at GL_GENERATE_STDINT_H_TRUE@	} > $@-t && \
+ at GL_GENERATE_STDINT_H_TRUE@	mv $@-t $@
+ at GL_GENERATE_STDINT_H_FALSE@stdint.h: $(top_builddir)/config.status
+ at GL_GENERATE_STDINT_H_FALSE@	rm -f $@
+
+# We need the following in order to create <string.h> when the system
+# doesn't have one that works with the given compiler.
+string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
+	      -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \
+	      -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \
+	      -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \
+	      -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \
+	      -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \
+	      -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \
+	      -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \
+	      -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \
+	      -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \
+	      -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \
+	      -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \
+	      -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \
+	      -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \
+	      -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \
+	      -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \
+	      -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \
+	      -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \
+	      -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \
+	      -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \
+	      -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \
+	      -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \
+	      -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \
+	      -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \
+	      -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \
+	      -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \
+	      -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \
+	      -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \
+	      -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \
+	      -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \
+	      -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \
+	      -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \
+	      -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \
+	      -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \
+	      -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \
+	      -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \
+	      -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \
+	      -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \
+	      < $(srcdir)/string.in.h | \
+	  sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \
+	      -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \
+	      -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
+	      -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \
+	      -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
+	      -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
+	      -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
+	      -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \
+	      -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \
+	      -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
+	      -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
+	      -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
+	      -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
+	      -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
+	      -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
+	      -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \
+	      -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
+	      -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
+	      -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \
+	      -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
+	      -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
+	      -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \
+	      -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \
+	      -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
+	      -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
+	      -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \
+	      -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
+	      -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
+	      -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
+	      -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \
+	      -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \
+	      -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \
+	      -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \
+	      -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
+	      -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
+	      -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	      < $(srcdir)/string.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+
+# We need the following in order to create <wchar.h> when the system
+# version does not work standalone.
+wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \
+	      -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
+	      -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
+	      -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \
+	      -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \
+	      -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \
+	      -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \
+	      -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \
+	      -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \
+	      -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \
+	      -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \
+	      -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \
+	      -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \
+	      -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \
+	      -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \
+	      -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \
+	      -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \
+	      -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \
+	      -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \
+	      -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \
+	      -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \
+	      -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \
+	      -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \
+	      -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \
+	      -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \
+	      -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \
+	      -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \
+	      -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \
+	      -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \
+	      -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \
+	      -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \
+	      -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \
+	      -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \
+	      -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \
+	      -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \
+	      -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \
+	      -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \
+	      -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \
+	      -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \
+	      -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \
+	      -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \
+	      -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \
+	      < $(srcdir)/wchar.in.h | \
+	  sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
+	      -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
+	      -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
+	      -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
+	      -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
+	      -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
+	      -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
+	      -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
+	      -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
+	      -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
+	      -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \
+	      -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \
+	      -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \
+	      -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \
+	      -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \
+	      -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \
+	      -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \
+	      -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \
+	      -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \
+	      -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \
+	      -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \
+	      -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \
+	      -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \
+	      -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \
+	      -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \
+	      -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \
+	      -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \
+	      -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \
+	      -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \
+	      -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \
+	      -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \
+	      -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \
+	      -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \
+	      -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \
+	      -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \
+	      -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \
+	      -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \
+	      -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \
+	      -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
+	      -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
+	  | \
+	  sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
+	      -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
+	      -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
+	      -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
+	      -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
+	      -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
+	      -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
+	      -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
+	      -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
+	      -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
+	      -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
+	      -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
+	      -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	} > $@-t && \
+	mv $@-t $@
+
+# We need the following in order to create <wctype.h> when the system
+# doesn't have one that works with the given compiler.
+wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
+	      -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \
+	      -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \
+	      -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \
+	      -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \
+	      -e 's/@''GNULIB_TOWCTRANS''@/$(GNULIB_TOWCTRANS)/g' \
+	      -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \
+	      -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
+	      -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \
+	      -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \
+	      -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
+	      -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \
+	      -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
+	      -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/wctype.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+
+mostlyclean-local: mostlyclean-generic
+	@for dir in '' $(MOSTLYCLEANDIRS); do \
+	  if test -n "$$dir" && test -d $$dir; then \
+	    echo "rmdir $$dir"; rmdir $$dir; \
+	  fi; \
+	done; \
+	:
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gdb/gnulib/import/alloca.c b/gdb/gnulib/import/alloca.c
new file mode 100644
index 0000000..ee0f018
--- /dev/null
+++ b/gdb/gnulib/import/alloca.c
@@ -0,0 +1,478 @@
+/* alloca.c -- allocate automatically reclaimed memory
+   (Mostly) portable public-domain implementation -- D A Gwyn
+
+   This implementation of the PWB library alloca function,
+   which is used to allocate space off the run-time stack so
+   that it is automatically reclaimed upon procedure exit,
+   was inspired by discussions with J. Q. Johnson of Cornell.
+   J.Otto Tennant <jot at cray.com> contributed the Cray support.
+
+   There are some preprocessor constants that can
+   be defined when compiling for your specific system, for
+   improved efficiency; however, the defaults should be okay.
+
+   The general concept of this implementation is to keep
+   track of all alloca-allocated blocks, and reclaim any
+   that are found to be deeper in the stack than the current
+   invocation.  This heuristic does not reclaim storage as
+   soon as it becomes invalid, but it will do so eventually.
+
+   As a special case, alloca(0) reclaims storage without
+   allocating any.  It is a good idea to use alloca(0) in
+   your main control loop, etc. to force garbage collection.  */
+
+#include <config.h>
+
+#include <alloca.h>
+
+#include <string.h>
+#include <stdlib.h>
+
+#ifdef emacs
+# include "lisp.h"
+# include "blockinput.h"
+# ifdef EMACS_FREE
+#  undef free
+#  define free EMACS_FREE
+# endif
+#else
+# define memory_full() abort ()
+#endif
+
+/* If compiling with GCC 2, this file's not needed.  */
+#if !defined (__GNUC__) || __GNUC__ < 2
+
+/* If someone has defined alloca as a macro,
+   there must be some other way alloca is supposed to work.  */
+# ifndef alloca
+
+#  ifdef emacs
+#   ifdef static
+/* actually, only want this if static is defined as ""
+   -- this is for usg, in which emacs must undefine static
+   in order to make unexec workable
+   */
+#    ifndef STACK_DIRECTION
+you
+lose
+-- must know STACK_DIRECTION at compile-time
+/* Using #error here is not wise since this file should work for
+   old and obscure compilers.  */
+#    endif /* STACK_DIRECTION undefined */
+#   endif /* static */
+#  endif /* emacs */
+
+/* If your stack is a linked list of frames, you have to
+   provide an "address metric" ADDRESS_FUNCTION macro.  */
+
+#  if defined (CRAY) && defined (CRAY_STACKSEG_END)
+long i00afunc ();
+#   define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg))
+#  else
+#   define ADDRESS_FUNCTION(arg) &(arg)
+#  endif
+
+/* Define STACK_DIRECTION if you know the direction of stack
+   growth for your system; otherwise it will be automatically
+   deduced at run-time.
+
+   STACK_DIRECTION > 0 => grows toward higher addresses
+   STACK_DIRECTION < 0 => grows toward lower addresses
+   STACK_DIRECTION = 0 => direction of growth unknown  */
+
+#  ifndef STACK_DIRECTION
+#   define STACK_DIRECTION      0       /* Direction unknown.  */
+#  endif
+
+#  if STACK_DIRECTION != 0
+
+#   define STACK_DIR    STACK_DIRECTION /* Known at compile-time.  */
+
+#  else /* STACK_DIRECTION == 0; need run-time code.  */
+
+static int stack_dir;           /* 1 or -1 once known.  */
+#   define STACK_DIR    stack_dir
+
+static int
+find_stack_direction (int *addr, int depth)
+{
+  int dir, dummy = 0;
+  if (! addr)
+    addr = &dummy;
+  *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
+  dir = depth ? find_stack_direction (addr, depth - 1) : 0;
+  return dir + dummy;
+}
+
+#  endif /* STACK_DIRECTION == 0 */
+
+/* An "alloca header" is used to:
+   (a) chain together all alloca'ed blocks;
+   (b) keep track of stack depth.
+
+   It is very important that sizeof(header) agree with malloc
+   alignment chunk size.  The following default should work okay.  */
+
+#  ifndef       ALIGN_SIZE
+#   define ALIGN_SIZE   sizeof(double)
+#  endif
+
+typedef union hdr
+{
+  char align[ALIGN_SIZE];       /* To force sizeof(header).  */
+  struct
+    {
+      union hdr *next;          /* For chaining headers.  */
+      char *deep;               /* For stack depth measure.  */
+    } h;
+} header;
+
+static header *last_alloca_header = NULL;       /* -> last alloca header.  */
+
+/* Return a pointer to at least SIZE bytes of storage,
+   which will be automatically reclaimed upon exit from
+   the procedure that called alloca.  Originally, this space
+   was supposed to be taken from the current stack frame of the
+   caller, but that method cannot be made to work for some
+   implementations of C, for example under Gould's UTX/32.  */
+
+void *
+alloca (size_t size)
+{
+  auto char probe;              /* Probes stack depth: */
+  register char *depth = ADDRESS_FUNCTION (probe);
+
+#  if STACK_DIRECTION == 0
+  if (STACK_DIR == 0)           /* Unknown growth direction.  */
+    STACK_DIR = find_stack_direction (NULL, (size & 1) + 20);
+#  endif
+
+  /* Reclaim garbage, defined as all alloca'd storage that
+     was allocated from deeper in the stack than currently.  */
+
+  {
+    register header *hp;        /* Traverses linked list.  */
+
+#  ifdef emacs
+    BLOCK_INPUT;
+#  endif
+
+    for (hp = last_alloca_header; hp != NULL;)
+      if ((STACK_DIR > 0 && hp->h.deep > depth)
+          || (STACK_DIR < 0 && hp->h.deep < depth))
+        {
+          register header *np = hp->h.next;
+
+          free (hp);            /* Collect garbage.  */
+
+          hp = np;              /* -> next header.  */
+        }
+      else
+        break;                  /* Rest are not deeper.  */
+
+    last_alloca_header = hp;    /* -> last valid storage.  */
+
+#  ifdef emacs
+    UNBLOCK_INPUT;
+#  endif
+  }
+
+  if (size == 0)
+    return NULL;                /* No allocation required.  */
+
+  /* Allocate combined header + user data storage.  */
+
+  {
+    /* Address of header.  */
+    register header *new;
+
+    size_t combined_size = sizeof (header) + size;
+    if (combined_size < sizeof (header))
+      memory_full ();
+
+    new = malloc (combined_size);
+
+    if (! new)
+      memory_full ();
+
+    new->h.next = last_alloca_header;
+    new->h.deep = depth;
+
+    last_alloca_header = new;
+
+    /* User storage begins just after header.  */
+
+    return (void *) (new + 1);
+  }
+}
+
+#  if defined (CRAY) && defined (CRAY_STACKSEG_END)
+
+#   ifdef DEBUG_I00AFUNC
+#    include <stdio.h>
+#   endif
+
+#   ifndef CRAY_STACK
+#    define CRAY_STACK
+#    ifndef CRAY2
+/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */
+struct stack_control_header
+  {
+    long shgrow:32;             /* Number of times stack has grown.  */
+    long shaseg:32;             /* Size of increments to stack.  */
+    long shhwm:32;              /* High water mark of stack.  */
+    long shsize:32;             /* Current size of stack (all segments).  */
+  };
+
+/* The stack segment linkage control information occurs at
+   the high-address end of a stack segment.  (The stack
+   grows from low addresses to high addresses.)  The initial
+   part of the stack segment linkage control information is
+   0200 (octal) words.  This provides for register storage
+   for the routine which overflows the stack.  */
+
+struct stack_segment_linkage
+  {
+    long ss[0200];              /* 0200 overflow words.  */
+    long sssize:32;             /* Number of words in this segment.  */
+    long ssbase:32;             /* Offset to stack base.  */
+    long:32;
+    long sspseg:32;             /* Offset to linkage control of previous
+                                   segment of stack.  */
+    long:32;
+    long sstcpt:32;             /* Pointer to task common address block.  */
+    long sscsnm;                /* Private control structure number for
+                                   microtasking.  */
+    long ssusr1;                /* Reserved for user.  */
+    long ssusr2;                /* Reserved for user.  */
+    long sstpid;                /* Process ID for pid based multi-tasking.  */
+    long ssgvup;                /* Pointer to multitasking thread giveup.  */
+    long sscray[7];             /* Reserved for Cray Research.  */
+    long ssa0;
+    long ssa1;
+    long ssa2;
+    long ssa3;
+    long ssa4;
+    long ssa5;
+    long ssa6;
+    long ssa7;
+    long sss0;
+    long sss1;
+    long sss2;
+    long sss3;
+    long sss4;
+    long sss5;
+    long sss6;
+    long sss7;
+  };
+
+#    else /* CRAY2 */
+/* The following structure defines the vector of words
+   returned by the STKSTAT library routine.  */
+struct stk_stat
+  {
+    long now;                   /* Current total stack size.  */
+    long maxc;                  /* Amount of contiguous space which would
+                                   be required to satisfy the maximum
+                                   stack demand to date.  */
+    long high_water;            /* Stack high-water mark.  */
+    long overflows;             /* Number of stack overflow ($STKOFEN) calls.  */
+    long hits;                  /* Number of internal buffer hits.  */
+    long extends;               /* Number of block extensions.  */
+    long stko_mallocs;          /* Block allocations by $STKOFEN.  */
+    long underflows;            /* Number of stack underflow calls ($STKRETN).  */
+    long stko_free;             /* Number of deallocations by $STKRETN.  */
+    long stkm_free;             /* Number of deallocations by $STKMRET.  */
+    long segments;              /* Current number of stack segments.  */
+    long maxs;                  /* Maximum number of stack segments so far.  */
+    long pad_size;              /* Stack pad size.  */
+    long current_address;       /* Current stack segment address.  */
+    long current_size;          /* Current stack segment size.  This
+                                   number is actually corrupted by STKSTAT to
+                                   include the fifteen word trailer area.  */
+    long initial_address;       /* Address of initial segment.  */
+    long initial_size;          /* Size of initial segment.  */
+  };
+
+/* The following structure describes the data structure which trails
+   any stack segment.  I think that the description in 'asdef' is
+   out of date.  I only describe the parts that I am sure about.  */
+
+struct stk_trailer
+  {
+    long this_address;          /* Address of this block.  */
+    long this_size;             /* Size of this block (does not include
+                                   this trailer).  */
+    long unknown2;
+    long unknown3;
+    long link;                  /* Address of trailer block of previous
+                                   segment.  */
+    long unknown5;
+    long unknown6;
+    long unknown7;
+    long unknown8;
+    long unknown9;
+    long unknown10;
+    long unknown11;
+    long unknown12;
+    long unknown13;
+    long unknown14;
+  };
+
+#    endif /* CRAY2 */
+#   endif /* not CRAY_STACK */
+
+#   ifdef CRAY2
+/* Determine a "stack measure" for an arbitrary ADDRESS.
+   I doubt that "lint" will like this much.  */
+
+static long
+i00afunc (long *address)
+{
+  struct stk_stat status;
+  struct stk_trailer *trailer;
+  long *block, size;
+  long result = 0;
+
+  /* We want to iterate through all of the segments.  The first
+     step is to get the stack status structure.  We could do this
+     more quickly and more directly, perhaps, by referencing the
+     $LM00 common block, but I know that this works.  */
+
+  STKSTAT (&status);
+
+  /* Set up the iteration.  */
+
+  trailer = (struct stk_trailer *) (status.current_address
+                                    + status.current_size
+                                    - 15);
+
+  /* There must be at least one stack segment.  Therefore it is
+     a fatal error if "trailer" is null.  */
+
+  if (trailer == 0)
+    abort ();
+
+  /* Discard segments that do not contain our argument address.  */
+
+  while (trailer != 0)
+    {
+      block = (long *) trailer->this_address;
+      size = trailer->this_size;
+      if (block == 0 || size == 0)
+        abort ();
+      trailer = (struct stk_trailer *) trailer->link;
+      if ((block <= address) && (address < (block + size)))
+        break;
+    }
+
+  /* Set the result to the offset in this segment and add the sizes
+     of all predecessor segments.  */
+
+  result = address - block;
+
+  if (trailer == 0)
+    {
+      return result;
+    }
+
+  do
+    {
+      if (trailer->this_size <= 0)
+        abort ();
+      result += trailer->this_size;
+      trailer = (struct stk_trailer *) trailer->link;
+    }
+  while (trailer != 0);
+
+  /* We are done.  Note that if you present a bogus address (one
+     not in any segment), you will get a different number back, formed
+     from subtracting the address of the first block.  This is probably
+     not what you want.  */
+
+  return (result);
+}
+
+#   else /* not CRAY2 */
+/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP.
+   Determine the number of the cell within the stack,
+   given the address of the cell.  The purpose of this
+   routine is to linearize, in some sense, stack addresses
+   for alloca.  */
+
+static long
+i00afunc (long address)
+{
+  long stkl = 0;
+
+  long size, pseg, this_segment, stack;
+  long result = 0;
+
+  struct stack_segment_linkage *ssptr;
+
+  /* Register B67 contains the address of the end of the
+     current stack segment.  If you (as a subprogram) store
+     your registers on the stack and find that you are past
+     the contents of B67, you have overflowed the segment.
+
+     B67 also points to the stack segment linkage control
+     area, which is what we are really interested in.  */
+
+  stkl = CRAY_STACKSEG_END ();
+  ssptr = (struct stack_segment_linkage *) stkl;
+
+  /* If one subtracts 'size' from the end of the segment,
+     one has the address of the first word of the segment.
+
+     If this is not the first segment, 'pseg' will be
+     nonzero.  */
+
+  pseg = ssptr->sspseg;
+  size = ssptr->sssize;
+
+  this_segment = stkl - size;
+
+  /* It is possible that calling this routine itself caused
+     a stack overflow.  Discard stack segments which do not
+     contain the target address.  */
+
+  while (!(this_segment <= address && address <= stkl))
+    {
+#    ifdef DEBUG_I00AFUNC
+      fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl);
+#    endif
+      if (pseg == 0)
+        break;
+      stkl = stkl - pseg;
+      ssptr = (struct stack_segment_linkage *) stkl;
+      size = ssptr->sssize;
+      pseg = ssptr->sspseg;
+      this_segment = stkl - size;
+    }
+
+  result = address - this_segment;
+
+  /* If you subtract pseg from the current end of the stack,
+     you get the address of the previous stack segment's end.
+     This seems a little convoluted to me, but I'll bet you save
+     a cycle somewhere.  */
+
+  while (pseg != 0)
+    {
+#    ifdef DEBUG_I00AFUNC
+      fprintf (stderr, "%011o %011o\n", pseg, size);
+#    endif
+      stkl = stkl - pseg;
+      ssptr = (struct stack_segment_linkage *) stkl;
+      size = ssptr->sssize;
+      pseg = ssptr->sspseg;
+      result += size;
+    }
+  return (result);
+}
+
+#   endif /* not CRAY2 */
+#  endif /* CRAY */
+
+# endif /* no alloca */
+#endif /* not GCC 2 */
diff --git a/gdb/gnulib/import/alloca.in.h b/gdb/gnulib/import/alloca.in.h
new file mode 100644
index 0000000..e94eb68
--- /dev/null
+++ b/gdb/gnulib/import/alloca.in.h
@@ -0,0 +1,56 @@
+/* Memory allocation on the stack.
+
+   Copyright (C) 1995, 1999, 2001-2004, 2006-2012 Free Software Foundation,
+   Inc.
+
+   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 3, 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, see
+   <http://www.gnu.org/licenses/>.
+  */
+
+/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H
+   means there is a real alloca function.  */
+#ifndef _GL_ALLOCA_H
+#define _GL_ALLOCA_H
+
+/* alloca (N) returns a pointer to N bytes of memory
+   allocated on the stack, which will last until the function returns.
+   Use of alloca should be avoided:
+     - inside arguments of function calls - undefined behaviour,
+     - in inline functions - the allocation may actually last until the
+       calling function returns,
+     - for huge N (say, N >= 65536) - you never know how large (or small)
+       the stack is, and when the stack cannot fulfill the memory allocation
+       request, the program just crashes.
+ */
+
+#ifndef alloca
+# ifdef __GNUC__
+#  define alloca __builtin_alloca
+# elif defined _AIX
+#  define alloca __alloca
+# elif defined _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# elif defined __DECC && defined __VMS
+#  define alloca __ALLOCA
+# else
+#  include <stddef.h>
+#  ifdef  __cplusplus
+extern "C"
+#  endif
+void *alloca (size_t);
+# endif
+#endif
+
+#endif /* _GL_ALLOCA_H */
diff --git a/gdb/gnulib/import/config.charset b/gdb/gnulib/import/config.charset
new file mode 100644
index 0000000..0a3b343
--- /dev/null
+++ b/gdb/gnulib/import/config.charset
@@ -0,0 +1,684 @@
+#! /bin/sh
+# Output a system dependent table of character encoding aliases.
+#
+#   Copyright (C) 2000-2004, 2006-2012 Free Software Foundation, Inc.
+#
+#   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 3, 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, see <http://www.gnu.org/licenses/>.
+#
+# The table consists of lines of the form
+#    ALIAS  CANONICAL
+#
+# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
+# ALIAS is compared in a case sensitive way.
+#
+# CANONICAL is the GNU canonical name for this character encoding.
+# It must be an encoding supported by libiconv. Support by GNU libc is
+# also desirable. CANONICAL is case insensitive. Usually an upper case
+# MIME charset name is preferred.
+# The current list of GNU canonical charset names is as follows.
+#
+#       name              MIME?             used by which systems
+#                                    (darwin = Mac OS X, woe32 = native Windows)
+#
+#   ASCII, ANSI_X3.4-1968       glibc solaris freebsd netbsd darwin cygwin
+#   ISO-8859-1              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin
+#   ISO-8859-2              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin
+#   ISO-8859-3              Y   glibc solaris cygwin
+#   ISO-8859-4              Y   osf solaris freebsd netbsd openbsd darwin
+#   ISO-8859-5              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin
+#   ISO-8859-6              Y   glibc aix hpux solaris cygwin
+#   ISO-8859-7              Y   glibc aix hpux irix osf solaris netbsd openbsd darwin cygwin
+#   ISO-8859-8              Y   glibc aix hpux osf solaris cygwin
+#   ISO-8859-9              Y   glibc aix hpux irix osf solaris darwin cygwin
+#   ISO-8859-13                 glibc netbsd openbsd darwin cygwin
+#   ISO-8859-14                 glibc cygwin
+#   ISO-8859-15                 glibc aix osf solaris freebsd netbsd openbsd darwin cygwin
+#   KOI8-R                  Y   glibc solaris freebsd netbsd openbsd darwin
+#   KOI8-U                  Y   glibc freebsd netbsd openbsd darwin cygwin
+#   KOI8-T                      glibc
+#   CP437                       dos
+#   CP775                       dos
+#   CP850                       aix osf dos
+#   CP852                       dos
+#   CP855                       dos
+#   CP856                       aix
+#   CP857                       dos
+#   CP861                       dos
+#   CP862                       dos
+#   CP864                       dos
+#   CP865                       dos
+#   CP866                       freebsd netbsd openbsd darwin dos
+#   CP869                       dos
+#   CP874                       woe32 dos
+#   CP922                       aix
+#   CP932                       aix cygwin woe32 dos
+#   CP943                       aix
+#   CP949                       osf darwin woe32 dos
+#   CP950                       woe32 dos
+#   CP1046                      aix
+#   CP1124                      aix
+#   CP1125                      dos
+#   CP1129                      aix
+#   CP1131                      darwin
+#   CP1250                      woe32
+#   CP1251                      glibc solaris netbsd openbsd darwin cygwin woe32
+#   CP1252                      aix woe32
+#   CP1253                      woe32
+#   CP1254                      woe32
+#   CP1255                      glibc woe32
+#   CP1256                      woe32
+#   CP1257                      woe32
+#   GB2312                  Y   glibc aix hpux irix solaris freebsd netbsd darwin
+#   EUC-JP                  Y   glibc aix hpux irix osf solaris freebsd netbsd darwin
+#   EUC-KR                  Y   glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin
+#   EUC-TW                      glibc aix hpux irix osf solaris netbsd
+#   BIG5                    Y   glibc aix hpux osf solaris freebsd netbsd darwin cygwin
+#   BIG5-HKSCS                  glibc solaris darwin
+#   GBK                         glibc aix osf solaris darwin cygwin woe32 dos
+#   GB18030                     glibc solaris netbsd darwin
+#   SHIFT_JIS               Y   hpux osf solaris freebsd netbsd darwin
+#   JOHAB                       glibc solaris woe32
+#   TIS-620                     glibc aix hpux osf solaris cygwin
+#   VISCII                  Y   glibc
+#   TCVN5712-1                  glibc
+#   ARMSCII-8                   glibc darwin
+#   GEORGIAN-PS                 glibc cygwin
+#   PT154                       glibc
+#   HP-ROMAN8                   hpux
+#   HP-ARABIC8                  hpux
+#   HP-GREEK8                   hpux
+#   HP-HEBREW8                  hpux
+#   HP-TURKISH8                 hpux
+#   HP-KANA8                    hpux
+#   DEC-KANJI                   osf
+#   DEC-HANYU                   osf
+#   UTF-8                   Y   glibc aix hpux osf solaris netbsd darwin cygwin
+#
+# Note: Names which are not marked as being a MIME name should not be used in
+# Internet protocols for information interchange (mail, news, etc.).
+#
+# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
+# must understand both names and treat them as equivalent.
+#
+# The first argument passed to this file is the canonical host specification,
+#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+
+host="$1"
+os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
+echo "# This file contains a table of character encoding aliases,"
+echo "# suitable for operating system '${os}'."
+echo "# It was automatically generated from config.charset."
+# List of references, updated during installation:
+echo "# Packages using this file: "
+case "$os" in
+  linux-gnulibc1*)
+    # Linux libc5 doesn't have nl_langinfo(CODESET); therefore
+    # localcharset.c falls back to using the full locale name
+    # from the environment variables.
+    echo "C ASCII"
+    echo "POSIX ASCII"
+    for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \
+             en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \
+             en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \
+             es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \
+             et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \
+             fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \
+             it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \
+             sv_FI sv_SE; do
+      echo "$l ISO-8859-1"
+      echo "$l.iso-8859-1 ISO-8859-1"
+      echo "$l.iso-8859-15 ISO-8859-15"
+      echo "$l.iso-8859-15 at euro ISO-8859-15"
+      echo "$l at euro ISO-8859-15"
+      echo "$l.cp-437 CP437"
+      echo "$l.cp-850 CP850"
+      echo "$l.cp-1252 CP1252"
+      echo "$l.cp-1252 at euro CP1252"
+      #echo "$l.atari-st ATARI-ST" # not a commonly used encoding
+      echo "$l.utf-8 UTF-8"
+      echo "$l.utf-8 at euro UTF-8"
+    done
+    for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \
+             sl_SI sr sr_CS sr_YU; do
+      echo "$l ISO-8859-2"
+      echo "$l.iso-8859-2 ISO-8859-2"
+      echo "$l.cp-852 CP852"
+      echo "$l.cp-1250 CP1250"
+      echo "$l.utf-8 UTF-8"
+    done
+    for l in mk mk_MK ru ru_RU; do
+      echo "$l ISO-8859-5"
+      echo "$l.iso-8859-5 ISO-8859-5"
+      echo "$l.koi8-r KOI8-R"
+      echo "$l.cp-866 CP866"
+      echo "$l.cp-1251 CP1251"
+      echo "$l.utf-8 UTF-8"
+    done
+    for l in ar ar_SA; do
+      echo "$l ISO-8859-6"
+      echo "$l.iso-8859-6 ISO-8859-6"
+      echo "$l.cp-864 CP864"
+      #echo "$l.cp-868 CP868" # not a commonly used encoding
+      echo "$l.cp-1256 CP1256"
+      echo "$l.utf-8 UTF-8"
+    done
+    for l in el el_GR gr gr_GR; do
+      echo "$l ISO-8859-7"
+      echo "$l.iso-8859-7 ISO-8859-7"
+      echo "$l.cp-869 CP869"
+      echo "$l.cp-1253 CP1253"
+      echo "$l.cp-1253 at euro CP1253"
+      echo "$l.utf-8 UTF-8"
+      echo "$l.utf-8 at euro UTF-8"
+    done
+    for l in he he_IL iw iw_IL; do
+      echo "$l ISO-8859-8"
+      echo "$l.iso-8859-8 ISO-8859-8"
+      echo "$l.cp-862 CP862"
+      echo "$l.cp-1255 CP1255"
+      echo "$l.utf-8 UTF-8"
+    done
+    for l in tr tr_TR; do
+      echo "$l ISO-8859-9"
+      echo "$l.iso-8859-9 ISO-8859-9"
+      echo "$l.cp-857 CP857"
+      echo "$l.cp-1254 CP1254"
+      echo "$l.utf-8 UTF-8"
+    done
+    for l in lt lt_LT lv lv_LV; do
+      #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name
+      echo "$l ISO-8859-13"
+    done
+    for l in ru_UA uk uk_UA; do
+      echo "$l KOI8-U"
+    done
+    for l in zh zh_CN; do
+      #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name
+      echo "$l GB2312"
+    done
+    for l in ja ja_JP ja_JP.EUC; do
+      echo "$l EUC-JP"
+    done
+    for l in ko ko_KR; do
+      echo "$l EUC-KR"
+    done
+    for l in th th_TH; do
+      echo "$l TIS-620"
+    done
+    for l in fa fa_IR; do
+      #echo "$l ISIRI-3342" # a broken encoding
+      echo "$l.utf-8 UTF-8"
+    done
+    ;;
+  linux* | *-gnu*)
+    # With glibc-2.1 or newer, we don't need any canonicalization,
+    # because glibc has iconv and both glibc and libiconv support all
+    # GNU canonical names directly. Therefore, the Makefile does not
+    # need to install the alias file at all.
+    # The following applies only to glibc-2.0.x and older libcs.
+    echo "ISO_646.IRV:1983 ASCII"
+    ;;
+  aix*)
+    echo "ISO8859-1 ISO-8859-1"
+    echo "ISO8859-2 ISO-8859-2"
+    echo "ISO8859-5 ISO-8859-5"
+    echo "ISO8859-6 ISO-8859-6"
+    echo "ISO8859-7 ISO-8859-7"
+    echo "ISO8859-8 ISO-8859-8"
+    echo "ISO8859-9 ISO-8859-9"
+    echo "ISO8859-15 ISO-8859-15"
+    echo "IBM-850 CP850"
+    echo "IBM-856 CP856"
+    echo "IBM-921 ISO-8859-13"
+    echo "IBM-922 CP922"
+    echo "IBM-932 CP932"
+    echo "IBM-943 CP943"
+    echo "IBM-1046 CP1046"
+    echo "IBM-1124 CP1124"
+    echo "IBM-1129 CP1129"
+    echo "IBM-1252 CP1252"
+    echo "IBM-eucCN GB2312"
+    echo "IBM-eucJP EUC-JP"
+    echo "IBM-eucKR EUC-KR"
+    echo "IBM-eucTW EUC-TW"
+    echo "big5 BIG5"
+    echo "GBK GBK"
+    echo "TIS-620 TIS-620"
+    echo "UTF-8 UTF-8"
+    ;;
+  hpux*)
+    echo "iso88591 ISO-8859-1"
+    echo "iso88592 ISO-8859-2"
+    echo "iso88595 ISO-8859-5"
+    echo "iso88596 ISO-8859-6"
+    echo "iso88597 ISO-8859-7"
+    echo "iso88598 ISO-8859-8"
+    echo "iso88599 ISO-8859-9"
+    echo "iso885915 ISO-8859-15"
+    echo "roman8 HP-ROMAN8"
+    echo "arabic8 HP-ARABIC8"
+    echo "greek8 HP-GREEK8"
+    echo "hebrew8 HP-HEBREW8"
+    echo "turkish8 HP-TURKISH8"
+    echo "kana8 HP-KANA8"
+    echo "tis620 TIS-620"
+    echo "big5 BIG5"
+    echo "eucJP EUC-JP"
+    echo "eucKR EUC-KR"
+    echo "eucTW EUC-TW"
+    echo "hp15CN GB2312"
+    #echo "ccdc ?" # what is this?
+    echo "SJIS SHIFT_JIS"
+    echo "utf8 UTF-8"
+    ;;
+  irix*)
+    echo "ISO8859-1 ISO-8859-1"
+    echo "ISO8859-2 ISO-8859-2"
+    echo "ISO8859-5 ISO-8859-5"
+    echo "ISO8859-7 ISO-8859-7"
+    echo "ISO8859-9 ISO-8859-9"
+    echo "eucCN GB2312"
+    echo "eucJP EUC-JP"
+    echo "eucKR EUC-KR"
+    echo "eucTW EUC-TW"
+    ;;
+  osf*)
+    echo "ISO8859-1 ISO-8859-1"
+    echo "ISO8859-2 ISO-8859-2"
+    echo "ISO8859-4 ISO-8859-4"
+    echo "ISO8859-5 ISO-8859-5"
+    echo "ISO8859-7 ISO-8859-7"
+    echo "ISO8859-8 ISO-8859-8"
+    echo "ISO8859-9 ISO-8859-9"
+    echo "ISO8859-15 ISO-8859-15"
+    echo "cp850 CP850"
+    echo "big5 BIG5"
+    echo "dechanyu DEC-HANYU"
+    echo "dechanzi GB2312"
+    echo "deckanji DEC-KANJI"
+    echo "deckorean EUC-KR"
+    echo "eucJP EUC-JP"
+    echo "eucKR EUC-KR"
+    echo "eucTW EUC-TW"
+    echo "GBK GBK"
+    echo "KSC5601 CP949"
+    echo "sdeckanji EUC-JP"
+    echo "SJIS SHIFT_JIS"
+    echo "TACTIS TIS-620"
+    echo "UTF-8 UTF-8"
+    ;;
+  solaris*)
+    echo "646 ASCII"
+    echo "ISO8859-1 ISO-8859-1"
+    echo "ISO8859-2 ISO-8859-2"
+    echo "ISO8859-3 ISO-8859-3"
+    echo "ISO8859-4 ISO-8859-4"
+    echo "ISO8859-5 ISO-8859-5"
+    echo "ISO8859-6 ISO-8859-6"
+    echo "ISO8859-7 ISO-8859-7"
+    echo "ISO8859-8 ISO-8859-8"
+    echo "ISO8859-9 ISO-8859-9"
+    echo "ISO8859-15 ISO-8859-15"
+    echo "koi8-r KOI8-R"
+    echo "ansi-1251 CP1251"
+    echo "BIG5 BIG5"
+    echo "Big5-HKSCS BIG5-HKSCS"
+    echo "gb2312 GB2312"
+    echo "GBK GBK"
+    echo "GB18030 GB18030"
+    echo "cns11643 EUC-TW"
+    echo "5601 EUC-KR"
+    echo "ko_KR.johap92 JOHAB"
+    echo "eucJP EUC-JP"
+    echo "PCK SHIFT_JIS"
+    echo "TIS620.2533 TIS-620"
+    #echo "sun_eu_greek ?" # what is this?
+    echo "UTF-8 UTF-8"
+    ;;
+  freebsd* | os2*)
+    # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
+    # localcharset.c falls back to using the full locale name
+    # from the environment variables.
+    # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just
+    # reuse FreeBSD's locale data for OS/2.
+    echo "C ASCII"
+    echo "US-ASCII ASCII"
+    for l in la_LN lt_LN; do
+      echo "$l.ASCII ASCII"
+    done
+    for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
+             fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \
+             lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do
+      echo "$l.ISO_8859-1 ISO-8859-1"
+      echo "$l.DIS_8859-15 ISO-8859-15"
+    done
+    for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do
+      echo "$l.ISO_8859-2 ISO-8859-2"
+    done
+    for l in la_LN lt_LT; do
+      echo "$l.ISO_8859-4 ISO-8859-4"
+    done
+    for l in ru_RU ru_SU; do
+      echo "$l.KOI8-R KOI8-R"
+      echo "$l.ISO_8859-5 ISO-8859-5"
+      echo "$l.CP866 CP866"
+    done
+    echo "uk_UA.KOI8-U KOI8-U"
+    echo "zh_TW.BIG5 BIG5"
+    echo "zh_TW.Big5 BIG5"
+    echo "zh_CN.EUC GB2312"
+    echo "ja_JP.EUC EUC-JP"
+    echo "ja_JP.SJIS SHIFT_JIS"
+    echo "ja_JP.Shift_JIS SHIFT_JIS"
+    echo "ko_KR.EUC EUC-KR"
+    ;;
+  netbsd*)
+    echo "646 ASCII"
+    echo "ISO8859-1 ISO-8859-1"
+    echo "ISO8859-2 ISO-8859-2"
+    echo "ISO8859-4 ISO-8859-4"
+    echo "ISO8859-5 ISO-8859-5"
+    echo "ISO8859-7 ISO-8859-7"
+    echo "ISO8859-13 ISO-8859-13"
+    echo "ISO8859-15 ISO-8859-15"
+    echo "eucCN GB2312"
+    echo "eucJP EUC-JP"
+    echo "eucKR EUC-KR"
+    echo "eucTW EUC-TW"
+    echo "BIG5 BIG5"
+    echo "SJIS SHIFT_JIS"
+    ;;
+  openbsd*)
+    echo "646 ASCII"
+    echo "ISO8859-1 ISO-8859-1"
+    echo "ISO8859-2 ISO-8859-2"
+    echo "ISO8859-4 ISO-8859-4"
+    echo "ISO8859-5 ISO-8859-5"
+    echo "ISO8859-7 ISO-8859-7"
+    echo "ISO8859-13 ISO-8859-13"
+    echo "ISO8859-15 ISO-8859-15"
+    ;;
+  darwin[56]*)
+    # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore
+    # localcharset.c falls back to using the full locale name
+    # from the environment variables.
+    echo "C ASCII"
+    for l in en_AU en_CA en_GB en_US la_LN; do
+      echo "$l.US-ASCII ASCII"
+    done
+    for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
+             fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \
+             nl_NL no_NO pt_PT sv_SE; do
+      echo "$l ISO-8859-1"
+      echo "$l.ISO8859-1 ISO-8859-1"
+      echo "$l.ISO8859-15 ISO-8859-15"
+    done
+    for l in la_LN; do
+      echo "$l.ISO8859-1 ISO-8859-1"
+      echo "$l.ISO8859-15 ISO-8859-15"
+    done
+    for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do
+      echo "$l.ISO8859-2 ISO-8859-2"
+    done
+    for l in la_LN lt_LT; do
+      echo "$l.ISO8859-4 ISO-8859-4"
+    done
+    for l in ru_RU; do
+      echo "$l.KOI8-R KOI8-R"
+      echo "$l.ISO8859-5 ISO-8859-5"
+      echo "$l.CP866 CP866"
+    done
+    for l in bg_BG; do
+      echo "$l.CP1251 CP1251"
+    done
+    echo "uk_UA.KOI8-U KOI8-U"
+    echo "zh_TW.BIG5 BIG5"
+    echo "zh_TW.Big5 BIG5"
+    echo "zh_CN.EUC GB2312"
+    echo "ja_JP.EUC EUC-JP"
+    echo "ja_JP.SJIS SHIFT_JIS"
+    echo "ko_KR.EUC EUC-KR"
+    ;;
+  darwin*)
+    # Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is
+    # useless:
+    # - It returns the empty string when LANG is set to a locale of the
+    #   form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8
+    #   LC_CTYPE file.
+    # - The environment variables LANG, LC_CTYPE, LC_ALL are not set by
+    #   the system; nl_langinfo(CODESET) returns "US-ASCII" in this case.
+    # - The documentation says:
+    #     "... all code that calls BSD system routines should ensure
+    #      that the const *char parameters of these routines are in UTF-8
+    #      encoding. All BSD system functions expect their string
+    #      parameters to be in UTF-8 encoding and nothing else."
+    #   It also says
+    #     "An additional caveat is that string parameters for files,
+    #      paths, and other file-system entities must be in canonical
+    #      UTF-8. In a canonical UTF-8 Unicode string, all decomposable
+    #      characters are decomposed ..."
+    #   but this is not true: You can pass non-decomposed UTF-8 strings
+    #   to file system functions, and it is the OS which will convert
+    #   them to decomposed UTF-8 before accessing the file system.
+    # - The Apple Terminal application displays UTF-8 by default.
+    # - However, other applications are free to use different encodings:
+    #   - xterm uses ISO-8859-1 by default.
+    #   - TextEdit uses MacRoman by default.
+    # We prefer UTF-8 over decomposed UTF-8-MAC because one should
+    # minimize the use of decomposed Unicode. Unfortunately, through the
+    # Darwin file system, decomposed UTF-8 strings are leaked into user
+    # space nevertheless.
+    # Then there are also the locales with encodings other than US-ASCII
+    # and UTF-8. These locales can be occasionally useful to users (e.g.
+    # when grepping through ISO-8859-1 encoded text files), when all their
+    # file names are in US-ASCII.
+    echo "ISO8859-1 ISO-8859-1"
+    echo "ISO8859-2 ISO-8859-2"
+    echo "ISO8859-4 ISO-8859-4"
+    echo "ISO8859-5 ISO-8859-5"
+    echo "ISO8859-7 ISO-8859-7"
+    echo "ISO8859-9 ISO-8859-9"
+    echo "ISO8859-13 ISO-8859-13"
+    echo "ISO8859-15 ISO-8859-15"
+    echo "KOI8-R KOI8-R"
+    echo "KOI8-U KOI8-U"
+    echo "CP866 CP866"
+    echo "CP949 CP949"
+    echo "CP1131 CP1131"
+    echo "CP1251 CP1251"
+    echo "eucCN GB2312"
+    echo "GB2312 GB2312"
+    echo "eucJP EUC-JP"
+    echo "eucKR EUC-KR"
+    echo "Big5 BIG5"
+    echo "Big5HKSCS BIG5-HKSCS"
+    echo "GBK GBK"
+    echo "GB18030 GB18030"
+    echo "SJIS SHIFT_JIS"
+    echo "ARMSCII-8 ARMSCII-8"
+    echo "PT154 PT154"
+    #echo "ISCII-DEV ?"
+    echo "* UTF-8"
+    ;;
+  beos* | haiku*)
+    # BeOS and Haiku have a single locale, and it has UTF-8 encoding.
+    echo "* UTF-8"
+    ;;
+  msdosdjgpp*)
+    # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
+    # localcharset.c falls back to using the full locale name
+    # from the environment variables.
+    echo "#"
+    echo "# The encodings given here may not all be correct."
+    echo "# If you find that the encoding given for your language and"
+    echo "# country is not the one your DOS machine actually uses, just"
+    echo "# correct it in this file, and send a mail to"
+    echo "# Juan Manuel Guerrero <juan.guerrero at gmx.de>"
+    echo "# and Bruno Haible <bruno at clisp.org>."
+    echo "#"
+    echo "C ASCII"
+    # ISO-8859-1 languages
+    echo "ca CP850"
+    echo "ca_ES CP850"
+    echo "da CP865"    # not CP850 ??
+    echo "da_DK CP865" # not CP850 ??
+    echo "de CP850"
+    echo "de_AT CP850"
+    echo "de_CH CP850"
+    echo "de_DE CP850"
+    echo "en CP850"
+    echo "en_AU CP850" # not CP437 ??
+    echo "en_CA CP850"
+    echo "en_GB CP850"
+    echo "en_NZ CP437"
+    echo "en_US CP437"
+    echo "en_ZA CP850" # not CP437 ??
+    echo "es CP850"
+    echo "es_AR CP850"
+    echo "es_BO CP850"
+    echo "es_CL CP850"
+    echo "es_CO CP850"
+    echo "es_CR CP850"
+    echo "es_CU CP850"
+    echo "es_DO CP850"
+    echo "es_EC CP850"
+    echo "es_ES CP850"
+    echo "es_GT CP850"
+    echo "es_HN CP850"
+    echo "es_MX CP850"
+    echo "es_NI CP850"
+    echo "es_PA CP850"
+    echo "es_PY CP850"
+    echo "es_PE CP850"
+    echo "es_SV CP850"
+    echo "es_UY CP850"
+    echo "es_VE CP850"
+    echo "et CP850"
+    echo "et_EE CP850"
+    echo "eu CP850"
+    echo "eu_ES CP850"
+    echo "fi CP850"
+    echo "fi_FI CP850"
+    echo "fr CP850"
+    echo "fr_BE CP850"
+    echo "fr_CA CP850"
+    echo "fr_CH CP850"
+    echo "fr_FR CP850"
+    echo "ga CP850"
+    echo "ga_IE CP850"
+    echo "gd CP850"
+    echo "gd_GB CP850"
+    echo "gl CP850"
+    echo "gl_ES CP850"
+    echo "id CP850"    # not CP437 ??
+    echo "id_ID CP850" # not CP437 ??
+    echo "is CP861"    # not CP850 ??
+    echo "is_IS CP861" # not CP850 ??
+    echo "it CP850"
+    echo "it_CH CP850"
+    echo "it_IT CP850"
+    echo "lt CP775"
+    echo "lt_LT CP775"
+    echo "lv CP775"
+    echo "lv_LV CP775"
+    echo "nb CP865"    # not CP850 ??
+    echo "nb_NO CP865" # not CP850 ??
+    echo "nl CP850"
+    echo "nl_BE CP850"
+    echo "nl_NL CP850"
+    echo "nn CP865"    # not CP850 ??
+    echo "nn_NO CP865" # not CP850 ??
+    echo "no CP865"    # not CP850 ??
+    echo "no_NO CP865" # not CP850 ??
+    echo "pt CP850"
+    echo "pt_BR CP850"
+    echo "pt_PT CP850"
+    echo "sv CP850"
+    echo "sv_SE CP850"
+    # ISO-8859-2 languages
+    echo "cs CP852"
+    echo "cs_CZ CP852"
+    echo "hr CP852"
+    echo "hr_HR CP852"
+    echo "hu CP852"
+    echo "hu_HU CP852"
+    echo "pl CP852"
+    echo "pl_PL CP852"
+    echo "ro CP852"
+    echo "ro_RO CP852"
+    echo "sk CP852"
+    echo "sk_SK CP852"
+    echo "sl CP852"
+    echo "sl_SI CP852"
+    echo "sq CP852"
+    echo "sq_AL CP852"
+    echo "sr CP852"    # CP852 or CP866 or CP855 ??
+    echo "sr_CS CP852" # CP852 or CP866 or CP855 ??
+    echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
+    # ISO-8859-3 languages
+    echo "mt CP850"
+    echo "mt_MT CP850"
+    # ISO-8859-5 languages
+    echo "be CP866"
+    echo "be_BE CP866"
+    echo "bg CP866"    # not CP855 ??
+    echo "bg_BG CP866" # not CP855 ??
+    echo "mk CP866"    # not CP855 ??
+    echo "mk_MK CP866" # not CP855 ??
+    echo "ru CP866"
+    echo "ru_RU CP866"
+    echo "uk CP1125"
+    echo "uk_UA CP1125"
+    # ISO-8859-6 languages
+    echo "ar CP864"
+    echo "ar_AE CP864"
+    echo "ar_DZ CP864"
+    echo "ar_EG CP864"
+    echo "ar_IQ CP864"
+    echo "ar_IR CP864"
+    echo "ar_JO CP864"
+    echo "ar_KW CP864"
+    echo "ar_MA CP864"
+    echo "ar_OM CP864"
+    echo "ar_QA CP864"
+    echo "ar_SA CP864"
+    echo "ar_SY CP864"
+    # ISO-8859-7 languages
+    echo "el CP869"
+    echo "el_GR CP869"
+    # ISO-8859-8 languages
+    echo "he CP862"
+    echo "he_IL CP862"
+    # ISO-8859-9 languages
+    echo "tr CP857"
+    echo "tr_TR CP857"
+    # Japanese
+    echo "ja CP932"
+    echo "ja_JP CP932"
+    # Chinese
+    echo "zh_CN GBK"
+    echo "zh_TW CP950" # not CP938 ??
+    # Korean
+    echo "kr CP949"    # not CP934 ??
+    echo "kr_KR CP949" # not CP934 ??
+    # Thai
+    echo "th CP874"
+    echo "th_TH CP874"
+    # Other
+    echo "eo CP850"
+    echo "eo_EO CP850"
+    ;;
+esac
diff --git a/gdb/gnulib/import/extra/snippet/arg-nonnull.h b/gdb/gnulib/import/extra/snippet/arg-nonnull.h
new file mode 100644
index 0000000..3a9dd26
--- /dev/null
+++ b/gdb/gnulib/import/extra/snippet/arg-nonnull.h
@@ -0,0 +1,26 @@
+/* A C macro for declaring that specific arguments must not be NULL.
+   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
diff --git a/gdb/gnulib/import/extra/snippet/c++defs.h b/gdb/gnulib/import/extra/snippet/c++defs.h
new file mode 100644
index 0000000..96da94b
--- /dev/null
+++ b/gdb/gnulib/import/extra/snippet/c++defs.h
@@ -0,0 +1,271 @@
+/* C++ compatible function declaration macros.
+   Copyright (C) 2010-2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
diff --git a/gdb/gnulib/import/extra/snippet/warn-on-use.h b/gdb/gnulib/import/extra/snippet/warn-on-use.h
new file mode 100644
index 0000000..d4cb94f
--- /dev/null
+++ b/gdb/gnulib/import/extra/snippet/warn-on-use.h
@@ -0,0 +1,109 @@
+/* A C macro for emitting warnings if a function is used.
+   Copyright (C) 2010-2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* _GL_WARN_ON_USE (function, "literal string") issues a declaration
+   for FUNCTION which will then trigger a compiler warning containing
+   the text of "literal string" anywhere that function is called, if
+   supported by the compiler.  If the compiler does not support this
+   feature, the macro expands to an unused extern declaration.
+
+   This macro is useful for marking a function as a potential
+   portability trap, with the intent that "literal string" include
+   instructions on the replacement function that should be used
+   instead.  However, one of the reasons that a function is a
+   portability trap is if it has the wrong signature.  Declaring
+   FUNCTION with a different signature in C is a compilation error, so
+   this macro must use the same type as any existing declaration so
+   that programs that avoid the problematic FUNCTION do not fail to
+   compile merely because they included a header that poisoned the
+   function.  But this implies that _GL_WARN_ON_USE is only safe to
+   use if FUNCTION is known to already have a declaration.  Use of
+   this macro implies that there must not be any other macro hiding
+   the declaration of FUNCTION; but undefining FUNCTION first is part
+   of the poisoning process anyway (although for symbols that are
+   provided only via a macro, the result is a compilation error rather
+   than a warning containing "literal string").  Also note that in
+   C++, it is only safe to use if FUNCTION has no overloads.
+
+   For an example, it is possible to poison 'getline' by:
+   - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]],
+     [getline]) in configure.ac, which potentially defines
+     HAVE_RAW_DECL_GETLINE
+   - adding this code to a header that wraps the system <stdio.h>:
+     #undef getline
+     #if HAVE_RAW_DECL_GETLINE
+     _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but"
+       "not universally present; use the gnulib module getline");
+     #endif
+
+   It is not possible to directly poison global variables.  But it is
+   possible to write a wrapper accessor function, and poison that
+   (less common usage, like &environ, will cause a compilation error
+   rather than issue the nice warning, but the end result of informing
+   the developer about their portability problem is still achieved):
+   #if HAVE_RAW_DECL_ENVIRON
+   static inline char ***rpl_environ (void) { return &environ; }
+   _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared");
+   # undef environ
+   # define environ (*rpl_environ ())
+   #endif
+   */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
diff --git a/gdb/gnulib/import/extra/update-copyright b/gdb/gnulib/import/extra/update-copyright
new file mode 100644
index 0000000..082b749
--- /dev/null
+++ b/gdb/gnulib/import/extra/update-copyright
@@ -0,0 +1,274 @@
+eval '(exit $?0)' && eval 'exec perl -wS -0777 -pi "$0" ${1+"$@"}'
+  & eval 'exec perl -wS -0777 -pi "$0" $argv:q'
+    if 0;
+# Update an FSF copyright year list to include the current year.
+
+my $VERSION = '2012-02-05.21:39'; # UTC
+
+# Copyright (C) 2009-2012 Free Software Foundation, Inc.
+#
+# 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 3, 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, see <http://www.gnu.org/licenses/>.
+
+# Written by Jim Meyering and Joel E. Denny
+
+# The arguments to this script should be names of files that contain
+# copyright statements to be updated.  The copyright holder's name
+# defaults to "Free Software Foundation, Inc." but may be changed to
+# any other name by using the "UPDATE_COPYRIGHT_HOLDER" environment
+# variable.
+#
+# For example, you might wish to use the update-copyright target rule
+# in maint.mk from gnulib's maintainer-makefile module.
+#
+# Iff a copyright statement is recognized in a file and the final
+# year is not the current year, then the statement is updated for the
+# new year and it is reformatted to:
+#
+#   1. Fit within 72 columns.
+#   2. Convert 2-digit years to 4-digit years by prepending "19".
+#   3. Expand copyright year intervals.  (See "Environment variables"
+#      below.)
+#
+# A warning is printed for every file for which no copyright
+# statement is recognized.
+#
+# Each file's copyright statement must be formatted correctly in
+# order to be recognized.  For example, each of these is fine:
+#
+#   Copyright @copyright{} 1990-2005, 2007-2009 Free Software
+#   Foundation, Inc.
+#
+#   # Copyright (C) 1990-2005, 2007-2009 Free Software
+#   # Foundation, Inc.
+#
+#   /*
+#    * Copyright © 90,2005,2007-2009
+#    * Free Software Foundation, Inc.
+#    */
+#
+# However, the following format is not recognized because the line
+# prefix changes after the first line:
+#
+#   ## Copyright (C) 1990-2005, 2007-2009 Free Software
+#   #  Foundation, Inc.
+#
+# However, any correctly formatted copyright statement following
+# a non-matching copyright statements would be recognized.
+#
+# The exact conditions that a file's copyright statement must meet
+# to be recognized are:
+#
+#   1. It is the first copyright statement that meets all of the
+#      following conditions.  Subsequent copyright statements are
+#      ignored.
+#   2. Its format is "Copyright (C)", then a list of copyright years,
+#      and then the name of the copyright holder.
+#   3. The "(C)" takes one of the following forms or is omitted
+#      entirely:
+#
+#        A. (C)
+#        B. (c)
+#        C. @copyright{}
+#        D. ©
+#
+#   4. The "Copyright" appears at the beginning of a line, except that it
+#      may be prefixed by any sequence (e.g., a comment) of no more than
+#      5 characters -- including white space.
+#   5. Iff such a prefix is present, the same prefix appears at the
+#      beginning of each remaining line within the FSF copyright
+#      statement.  There is one exception in order to support C-style
+#      comments: if the first line's prefix contains nothing but
+#      whitespace surrounding a "/*", then the prefix for all subsequent
+#      lines is the same as the first line's prefix except with each of
+#      "/" and possibly "*" replaced by a " ".  The replacement of "*"
+#      by " " is consistent throughout all subsequent lines.
+#   6. Blank lines, even if preceded by the prefix, do not appear
+#      within the FSF copyright statement.
+#   7. Each copyright year is 2 or 4 digits, and years are separated by
+#      commas or dashes.  Whitespace may appear after commas.
+#
+# Environment variables:
+#
+#   1. If UPDATE_COPYRIGHT_FORCE=1, a recognized FSF copyright statement
+#      is reformatted even if it does not need updating for the new
+#      year.  If unset or set to 0, only updated FSF copyright
+#      statements are reformatted.
+#   2. If UPDATE_COPYRIGHT_USE_INTERVALS=1, every series of consecutive
+#      copyright years (such as 90, 1991, 1992-2007, 2008) in a
+#      reformatted FSF copyright statement is collapsed to a single
+#      interval (such as 1990-2008).  If unset or set to 0, all existing
+#      copyright year intervals in a reformatted FSF copyright statement
+#      are expanded instead.
+#      If UPDATE_COPYRIGHT_USE_INTERVALS=2, convert a sequence with gaps
+#      to the minimal containing range.  For example, convert
+#      2000, 2004-2007, 2009 to 2000-2009.
+#   3. For testing purposes, you can set the assumed current year in
+#      UPDATE_COPYRIGHT_YEAR.
+#   4. The default maximum line length for a copyright line is 72.
+#      Set UPDATE_COPYRIGHT_MAX_LINE_LENGTH to use a different length.
+#   5. Set UPDATE_COPYRIGHT_HOLDER if the copyright holder is other
+#      than "Free Software Foundation, Inc.".
+
+use strict;
+use warnings;
+
+my $copyright_re = 'Copyright';
+my $circle_c_re = '(?:\([cC]\)|@copyright{}|©)';
+my $holder = $ENV{UPDATE_COPYRIGHT_HOLDER};
+$holder ||= 'Free Software Foundation, Inc.';
+my $prefix_max = 5;
+my $margin = $ENV{UPDATE_COPYRIGHT_MAX_LINE_LENGTH};
+!$margin || $margin !~ m/^\d+$/
+  and $margin = 72;
+
+my $tab_width = 8;
+
+my $this_year = $ENV{UPDATE_COPYRIGHT_YEAR};
+if (!$this_year || $this_year !~ m/^\d{4}$/)
+  {
+    my ($sec, $min, $hour, $mday, $month, $year) = localtime (time ());
+    $this_year = $year + 1900;
+  }
+
+# Unless the file consistently uses "\r\n" as the EOL, use "\n" instead.
+my $eol = /(?:^|[^\r])\n/ ? "\n" : "\r\n";
+
+my $leading;
+my $prefix;
+my $ws_re;
+my $stmt_re;
+while (/(^|\n)(.{0,$prefix_max})$copyright_re/g)
+  {
+    $leading = "$1$2";
+    $prefix = $2;
+    if ($prefix =~ /^(\s*\/)\*(\s*)$/)
+      {
+        $prefix =~ s,/, ,;
+        my $prefix_ws = $prefix;
+        $prefix_ws =~ s/\*/ /; # Only whitespace.
+        if (/\G(?:[^*\n]|\*[^\/\n])*\*?\n$prefix_ws/)
+          {
+            $prefix = $prefix_ws;
+          }
+      }
+    $ws_re = '[ \t\r\f]'; # \s without \n
+    $ws_re =
+      "(?:$ws_re*(?:$ws_re|\\n" . quotemeta($prefix) . ")$ws_re*)";
+    my $holder_re = $holder;
+    $holder_re =~ s/\s/$ws_re/g;
+    my $stmt_remainder_re =
+      "(?:$ws_re$circle_c_re)?"
+      . "$ws_re(?:(?:\\d\\d)?\\d\\d(?:,$ws_re?|-))*"
+      . "((?:\\d\\d)?\\d\\d)$ws_re$holder_re";
+    if (/\G$stmt_remainder_re/)
+      {
+        $stmt_re =
+          quotemeta($leading) . "($copyright_re$stmt_remainder_re)";
+        last;
+      }
+  }
+if (defined $stmt_re)
+  {
+    /$stmt_re/ or die; # Should never die.
+    my $stmt = $1;
+    my $final_year_orig = $2;
+
+    # Handle two-digit year numbers like "98" and "99".
+    my $final_year = $final_year_orig;
+    $final_year <= 99
+      and $final_year += 1900;
+
+    if ($final_year != $this_year)
+      {
+        # Update the year.
+        $stmt =~ s/$final_year_orig/$final_year, $this_year/;
+      }
+    if ($final_year != $this_year || $ENV{'UPDATE_COPYRIGHT_FORCE'})
+      {
+        # Normalize all whitespace including newline-prefix sequences.
+        $stmt =~ s/$ws_re/ /g;
+
+        # Put spaces after commas.
+        $stmt =~ s/, ?/, /g;
+
+        # Convert 2-digit to 4-digit years.
+        $stmt =~ s/(\b\d\d\b)/19$1/g;
+
+        # Make the use of intervals consistent.
+        if (!$ENV{UPDATE_COPYRIGHT_USE_INTERVALS})
+          {
+            $stmt =~ s/(\d{4})-(\d{4})/join(', ', $1..$2)/eg;
+          }
+        else
+          {
+            $stmt =~
+              s/
+                (\d{4})
+                (?:
+                  (,\ |-)
+                  ((??{
+                    if    ($2 eq '-') { '\d{4}'; }
+                    elsif (!$3)       { $1 + 1;  }
+                    else              { $3 + 1;  }
+                  }))
+                )+
+              /$1-$3/gx;
+
+            # When it's 2, emit a single range encompassing all year numbers.
+            $ENV{UPDATE_COPYRIGHT_USE_INTERVALS} == 2
+              and $stmt =~ s/\b(\d{4})\b.*\b(\d{4})\b/$1-$2/;
+          }
+
+        # Format within margin.
+        my $stmt_wrapped;
+        my $text_margin = $margin - length($prefix);
+        if ($prefix =~ /^(\t+)/)
+          {
+            $text_margin -= length($1) * ($tab_width - 1);
+          }
+        while (length $stmt)
+          {
+            if (($stmt =~ s/^(.{1,$text_margin})(?: |$)//)
+                || ($stmt =~ s/^([\S]+)(?: |$)//))
+              {
+                my $line = $1;
+                $stmt_wrapped .= $stmt_wrapped ? "$eol$prefix" : $leading;
+                $stmt_wrapped .= $line;
+              }
+            else
+              {
+                # Should be unreachable, but we don't want an infinite
+                # loop if it can be reached.
+                die;
+              }
+          }
+
+        # Replace the old copyright statement.
+        s/$stmt_re/$stmt_wrapped/;
+      }
+  }
+else
+  {
+    print STDERR "$ARGV: warning: copyright statement not found\n";
+  }
+
+# Local variables:
+# mode: perl
+# indent-tabs-mode: nil
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "my $VERSION = '"
+# time-stamp-format: "%:y-%02m-%02d.%02H:%02M"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "'; # UTC"
+# End:
diff --git a/gdb/gnulib/import/fnmatch.c b/gdb/gnulib/import/fnmatch.c
new file mode 100644
index 0000000..842182b
--- /dev/null
+++ b/gdb/gnulib/import/fnmatch.c
@@ -0,0 +1,350 @@
+/* Copyright (C) 1991-1993, 1996-2007, 2009-2012 Free Software Foundation, Inc.
+
+   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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _LIBC
+# include <config.h>
+#endif
+
+/* Enable GNU extensions in fnmatch.h.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE    1
+#endif
+
+#if ! defined __builtin_expect && __GNUC__ < 3
+# define __builtin_expect(expr, expected) (expr)
+#endif
+
+#include <fnmatch.h>
+
+#include <alloca.h>
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+#include <stddef.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define WIDE_CHAR_SUPPORT \
+  (HAVE_WCTYPE_H && HAVE_BTOWC && HAVE_ISWCTYPE \
+   && HAVE_WMEMCHR && (HAVE_WMEMCPY || HAVE_WMEMPCPY))
+
+/* For platform which support the ISO C amendment 1 functionality we
+   support user defined character classes.  */
+#if defined _LIBC || WIDE_CHAR_SUPPORT
+# include <wctype.h>
+# include <wchar.h>
+#endif
+
+/* We need some of the locale data (the collation sequence information)
+   but there is no interface to get this information in general.  Therefore
+   we support a correct implementation only in glibc.  */
+#ifdef _LIBC
+# include "../locale/localeinfo.h"
+# include "../locale/elem-hash.h"
+# include "../locale/coll-lookup.h"
+# include <shlib-compat.h>
+
+# define CONCAT(a,b) __CONCAT(a,b)
+# define mbsrtowcs __mbsrtowcs
+# define fnmatch __fnmatch
+extern int fnmatch (const char *pattern, const char *string, int flags);
+#endif
+
+#ifndef SIZE_MAX
+# define SIZE_MAX ((size_t) -1)
+#endif
+
+/* We often have to test for FNM_FILE_NAME and FNM_PERIOD being both set.  */
+#define NO_LEADING_PERIOD(flags) \
+  ((flags & (FNM_FILE_NAME | FNM_PERIOD)) == (FNM_FILE_NAME | FNM_PERIOD))
+
+/* Comment out all this code if we are using the GNU C Library, and are not
+   actually compiling the library itself, and have not detected a bug
+   in the library.  This code is part of the GNU C
+   Library, but also included in many other GNU distributions.  Compiling
+   and linking in this code is a waste when using the GNU C library
+   (especially if it is a shared library).  Rather than having every GNU
+   program understand 'configure --with-gnu-libc' and omit the object files,
+   it is simpler to just do this in the source for each such file.  */
+
+#if defined _LIBC || !defined __GNU_LIBRARY__ || !HAVE_FNMATCH_GNU
+
+
+# if ! (defined isblank || (HAVE_ISBLANK && HAVE_DECL_ISBLANK))
+#  define isblank(c) ((c) == ' ' || (c) == '\t')
+# endif
+
+# define STREQ(s1, s2) (strcmp (s1, s2) == 0)
+
+# if defined _LIBC || WIDE_CHAR_SUPPORT
+/* The GNU C library provides support for user-defined character classes
+   and the functions from ISO C amendment 1.  */
+#  ifdef CHARCLASS_NAME_MAX
+#   define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX
+#  else
+/* This shouldn't happen but some implementation might still have this
+   problem.  Use a reasonable default value.  */
+#   define CHAR_CLASS_MAX_LENGTH 256
+#  endif
+
+#  ifdef _LIBC
+#   define IS_CHAR_CLASS(string) __wctype (string)
+#  else
+#   define IS_CHAR_CLASS(string) wctype (string)
+#  endif
+
+#  ifdef _LIBC
+#   define ISWCTYPE(WC, WT)     __iswctype (WC, WT)
+#  else
+#   define ISWCTYPE(WC, WT)     iswctype (WC, WT)
+#  endif
+
+#  if (HAVE_MBSTATE_T && HAVE_MBSRTOWCS) || _LIBC
+/* In this case we are implementing the multibyte character handling.  */
+#   define HANDLE_MULTIBYTE     1
+#  endif
+
+# else
+#  define CHAR_CLASS_MAX_LENGTH  6 /* Namely, 'xdigit'.  */
+
+#  define IS_CHAR_CLASS(string)                                               \
+   (STREQ (string, "alpha") || STREQ (string, "upper")                        \
+    || STREQ (string, "lower") || STREQ (string, "digit")                     \
+    || STREQ (string, "alnum") || STREQ (string, "xdigit")                    \
+    || STREQ (string, "space") || STREQ (string, "print")                     \
+    || STREQ (string, "punct") || STREQ (string, "graph")                     \
+    || STREQ (string, "cntrl") || STREQ (string, "blank"))
+# endif
+
+/* Avoid depending on library functions or files
+   whose names are inconsistent.  */
+
+/* Global variable.  */
+static int posixly_correct;
+
+# ifndef internal_function
+/* Inside GNU libc we mark some function in a special way.  In other
+   environments simply ignore the marking.  */
+#  define internal_function
+# endif
+
+/* Note that this evaluates C many times.  */
+# define FOLD(c) ((flags & FNM_CASEFOLD) ? tolower (c) : (c))
+# define CHAR   char
+# define UCHAR  unsigned char
+# define INT    int
+# define FCT    internal_fnmatch
+# define EXT    ext_match
+# define END    end_pattern
+# define L_(CS) CS
+# ifdef _LIBC
+#  define BTOWC(C)      __btowc (C)
+# else
+#  define BTOWC(C)      btowc (C)
+# endif
+# define STRLEN(S) strlen (S)
+# define STRCAT(D, S) strcat (D, S)
+# ifdef _LIBC
+#  define MEMPCPY(D, S, N) __mempcpy (D, S, N)
+# else
+#  if HAVE_MEMPCPY
+#   define MEMPCPY(D, S, N) mempcpy (D, S, N)
+#  else
+#   define MEMPCPY(D, S, N) ((void *) ((char *) memcpy (D, S, N) + (N)))
+#  endif
+# endif
+# define MEMCHR(S, C, N) memchr (S, C, N)
+# include "fnmatch_loop.c"
+
+
+# if HANDLE_MULTIBYTE
+#  define FOLD(c) ((flags & FNM_CASEFOLD) ? towlower (c) : (c))
+#  define CHAR  wchar_t
+#  define UCHAR wint_t
+#  define INT   wint_t
+#  define FCT   internal_fnwmatch
+#  define EXT   ext_wmatch
+#  define END   end_wpattern
+#  define L_(CS)        L##CS
+#  define BTOWC(C)      (C)
+#  ifdef _LIBC
+#   define STRLEN(S) __wcslen (S)
+#   define STRCAT(D, S) __wcscat (D, S)
+#   define MEMPCPY(D, S, N) __wmempcpy (D, S, N)
+#  else
+#   define STRLEN(S) wcslen (S)
+#   define STRCAT(D, S) wcscat (D, S)
+#   if HAVE_WMEMPCPY
+#    define MEMPCPY(D, S, N) wmempcpy (D, S, N)
+#   else
+#    define MEMPCPY(D, S, N) (wmemcpy (D, S, N) + (N))
+#   endif
+#  endif
+#  define MEMCHR(S, C, N) wmemchr (S, C, N)
+#  define WIDE_CHAR_VERSION 1
+
+#  undef IS_CHAR_CLASS
+/* We have to convert the wide character string in a multibyte string.  But
+   we know that the character class names consist of alphanumeric characters
+   from the portable character set, and since the wide character encoding
+   for a member of the portable character set is the same code point as
+   its single-byte encoding, we can use a simplified method to convert the
+   string to a multibyte character string.  */
+static wctype_t
+is_char_class (const wchar_t *wcs)
+{
+  char s[CHAR_CLASS_MAX_LENGTH + 1];
+  char *cp = s;
+
+  do
+    {
+      /* Test for a printable character from the portable character set.  */
+#  ifdef _LIBC
+      if (*wcs < 0x20 || *wcs > 0x7e
+          || *wcs == 0x24 || *wcs == 0x40 || *wcs == 0x60)
+        return (wctype_t) 0;
+#  else
+      switch (*wcs)
+        {
+        case L' ': case L'!': case L'"': case L'#': case L'%':
+        case L'&': case L'\'': case L'(': case L')': case L'*':
+        case L'+': case L',': case L'-': case L'.': case L'/':
+        case L'0': case L'1': case L'2': case L'3': case L'4':
+        case L'5': case L'6': case L'7': case L'8': case L'9':
+        case L':': case L';': case L'<': case L'=': case L'>':
+        case L'?':
+        case L'A': case L'B': case L'C': case L'D': case L'E':
+        case L'F': case L'G': case L'H': case L'I': case L'J':
+        case L'K': case L'L': case L'M': case L'N': case L'O':
+        case L'P': case L'Q': case L'R': case L'S': case L'T':
+        case L'U': case L'V': case L'W': case L'X': case L'Y':
+        case L'Z':
+        case L'[': case L'\\': case L']': case L'^': case L'_':
+        case L'a': case L'b': case L'c': case L'd': case L'e':
+        case L'f': case L'g': case L'h': case L'i': case L'j':
+        case L'k': case L'l': case L'm': case L'n': case L'o':
+        case L'p': case L'q': case L'r': case L's': case L't':
+        case L'u': case L'v': case L'w': case L'x': case L'y':
+        case L'z': case L'{': case L'|': case L'}': case L'~':
+          break;
+        default:
+          return (wctype_t) 0;
+        }
+#  endif
+
+      /* Avoid overrunning the buffer.  */
+      if (cp == s + CHAR_CLASS_MAX_LENGTH)
+        return (wctype_t) 0;
+
+      *cp++ = (char) *wcs++;
+    }
+  while (*wcs != L'\0');
+
+  *cp = '\0';
+
+#  ifdef _LIBC
+  return __wctype (s);
+#  else
+  return wctype (s);
+#  endif
+}
+#  define IS_CHAR_CLASS(string) is_char_class (string)
+
+#  include "fnmatch_loop.c"
+# endif
+
+
+int
+fnmatch (const char *pattern, const char *string, int flags)
+{
+# if HANDLE_MULTIBYTE
+#  define ALLOCA_LIMIT 2000
+  if (__builtin_expect (MB_CUR_MAX, 1) != 1)
+    {
+      mbstate_t ps;
+      size_t patsize;
+      size_t strsize;
+      size_t totsize;
+      wchar_t *wpattern;
+      wchar_t *wstring;
+      int res;
+
+      /* Calculate the size needed to convert the strings to
+         wide characters.  */
+      memset (&ps, '\0', sizeof (ps));
+      patsize = mbsrtowcs (NULL, &pattern, 0, &ps) + 1;
+      if (__builtin_expect (patsize != 0, 1))
+        {
+          assert (mbsinit (&ps));
+          strsize = mbsrtowcs (NULL, &string, 0, &ps) + 1;
+          if (__builtin_expect (strsize != 0, 1))
+            {
+              assert (mbsinit (&ps));
+              totsize = patsize + strsize;
+              if (__builtin_expect (! (patsize <= totsize
+                                       && totsize <= SIZE_MAX / sizeof (wchar_t)),
+                                    0))
+                {
+                  errno = ENOMEM;
+                  return -1;
+                }
+
+              /* Allocate room for the wide characters.  */
+              if (__builtin_expect (totsize < ALLOCA_LIMIT, 1))
+                wpattern = (wchar_t *) alloca (totsize * sizeof (wchar_t));
+              else
+                {
+                  wpattern = malloc (totsize * sizeof (wchar_t));
+                  if (__builtin_expect (! wpattern, 0))
+                    {
+                      errno = ENOMEM;
+                      return -1;
+                    }
+                }
+              wstring = wpattern + patsize;
+
+              /* Convert the strings into wide characters.  */
+              mbsrtowcs (wpattern, &pattern, patsize, &ps);
+              assert (mbsinit (&ps));
+              mbsrtowcs (wstring, &string, strsize, &ps);
+
+              res = internal_fnwmatch (wpattern, wstring, wstring + strsize - 1,
+                                       flags & FNM_PERIOD, flags);
+
+              if (__builtin_expect (! (totsize < ALLOCA_LIMIT), 0))
+                free (wpattern);
+              return res;
+            }
+        }
+    }
+
+# endif /* HANDLE_MULTIBYTE */
+
+  return internal_fnmatch (pattern, string, string + strlen (string),
+                           flags & FNM_PERIOD, flags);
+}
+
+# ifdef _LIBC
+#  undef fnmatch
+versioned_symbol (libc, __fnmatch, fnmatch, GLIBC_2_2_3);
+#  if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_3)
+strong_alias (__fnmatch, __fnmatch_old)
+compat_symbol (libc, __fnmatch_old, fnmatch, GLIBC_2_0);
+#  endif
+libc_hidden_ver (__fnmatch, fnmatch)
+# endif
+
+#endif  /* _LIBC or not __GNU_LIBRARY__.  */
diff --git a/gdb/gnulib/import/fnmatch.in.h b/gdb/gnulib/import/fnmatch.in.h
new file mode 100644
index 0000000..b0a3c95
--- /dev/null
+++ b/gdb/gnulib/import/fnmatch.in.h
@@ -0,0 +1,67 @@
+/* Copyright (C) 1991-1993, 1996-1999, 2001-2003, 2005, 2007, 2009-2012 Free
+   Software Foundation, Inc.
+
+   This file is part of the GNU C 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _FNMATCH_H
+#define _FNMATCH_H      1
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* We #undef these before defining them because some losing systems
+   (HP-UX A.08.07 for example) define these in <unistd.h>.  */
+#undef  FNM_PATHNAME
+#undef  FNM_NOESCAPE
+#undef  FNM_PERIOD
+
+/* Bits set in the FLAGS argument to 'fnmatch'.  */
+#define FNM_PATHNAME    (1 << 0) /* No wildcard can ever match '/'.  */
+#define FNM_NOESCAPE    (1 << 1) /* Backslashes don't quote special chars.  */
+#define FNM_PERIOD      (1 << 2) /* Leading '.' is matched only explicitly.  */
+
+#if !defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _GNU_SOURCE
+# define FNM_FILE_NAME   FNM_PATHNAME   /* Preferred GNU name.  */
+# define FNM_LEADING_DIR (1 << 3)       /* Ignore '/...' after a match.  */
+# define FNM_CASEFOLD    (1 << 4)       /* Compare without regard to case.  */
+# define FNM_EXTMATCH    (1 << 5)       /* Use ksh-like extended matching. */
+#endif
+
+/* Value returned by 'fnmatch' if STRING does not match PATTERN.  */
+#define FNM_NOMATCH     1
+
+/* This value is returned if the implementation does not support
+   'fnmatch'.  Since this is not the case here it will never be
+   returned but the conformance test suites still require the symbol
+   to be defined.  */
+#ifdef _XOPEN_SOURCE
+# define FNM_NOSYS      (-1)
+#endif
+
+/* Match NAME against the file name pattern PATTERN,
+   returning zero if it matches, FNM_NOMATCH if not.  */
+extern int fnmatch (const char *__pattern, const char *__name,
+                    int __flags)
+     _GL_ARG_NONNULL ((1, 2));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* fnmatch.h */
diff --git a/gdb/gnulib/import/fnmatch_loop.c b/gdb/gnulib/import/fnmatch_loop.c
new file mode 100644
index 0000000..048079e
--- /dev/null
+++ b/gdb/gnulib/import/fnmatch_loop.c
@@ -0,0 +1,1219 @@
+/* Copyright (C) 1991-1993, 1996-2006, 2009-2012 Free Software Foundation, Inc.
+   This file is part of the GNU C 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Match STRING against the file name pattern PATTERN, returning zero if
+   it matches, nonzero if not.  */
+static int EXT (INT opt, const CHAR *pattern, const CHAR *string,
+                const CHAR *string_end, bool no_leading_period, int flags)
+     internal_function;
+static const CHAR *END (const CHAR *patternp) internal_function;
+
+static int
+internal_function
+FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end,
+     bool no_leading_period, int flags)
+{
+  register const CHAR *p = pattern, *n = string;
+  register UCHAR c;
+#ifdef _LIBC
+# if WIDE_CHAR_VERSION
+  const char *collseq = (const char *)
+    _NL_CURRENT(LC_COLLATE, _NL_COLLATE_COLLSEQWC);
+# else
+  const UCHAR *collseq = (const UCHAR *)
+    _NL_CURRENT(LC_COLLATE, _NL_COLLATE_COLLSEQMB);
+# endif
+#endif
+
+  while ((c = *p++) != L_('\0'))
+    {
+      bool new_no_leading_period = false;
+      c = FOLD (c);
+
+      switch (c)
+        {
+        case L_('?'):
+          if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(')
+            {
+              int res;
+
+              res = EXT (c, p, n, string_end, no_leading_period,
+                         flags);
+              if (res != -1)
+                return res;
+            }
+
+          if (n == string_end)
+            return FNM_NOMATCH;
+          else if (*n == L_('/') && (flags & FNM_FILE_NAME))
+            return FNM_NOMATCH;
+          else if (*n == L_('.') && no_leading_period)
+            return FNM_NOMATCH;
+          break;
+
+        case L_('\\'):
+          if (!(flags & FNM_NOESCAPE))
+            {
+              c = *p++;
+              if (c == L_('\0'))
+                /* Trailing \ loses.  */
+                return FNM_NOMATCH;
+              c = FOLD (c);
+            }
+          if (n == string_end || FOLD ((UCHAR) *n) != c)
+            return FNM_NOMATCH;
+          break;
+
+        case L_('*'):
+          if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(')
+            {
+              int res;
+
+              res = EXT (c, p, n, string_end, no_leading_period,
+                         flags);
+              if (res != -1)
+                return res;
+            }
+
+          if (n != string_end && *n == L_('.') && no_leading_period)
+            return FNM_NOMATCH;
+
+          for (c = *p++; c == L_('?') || c == L_('*'); c = *p++)
+            {
+              if (*p == L_('(') && (flags & FNM_EXTMATCH) != 0)
+                {
+                  const CHAR *endp = END (p);
+                  if (endp != p)
+                    {
+                      /* This is a pattern.  Skip over it.  */
+                      p = endp;
+                      continue;
+                    }
+                }
+
+              if (c == L_('?'))
+                {
+                  /* A ? needs to match one character.  */
+                  if (n == string_end)
+                    /* There isn't another character; no match.  */
+                    return FNM_NOMATCH;
+                  else if (*n == L_('/')
+                           && __builtin_expect (flags & FNM_FILE_NAME, 0))
+                    /* A slash does not match a wildcard under
+                       FNM_FILE_NAME.  */
+                    return FNM_NOMATCH;
+                  else
+                    /* One character of the string is consumed in matching
+                       this ? wildcard, so *??? won't match if there are
+                       less than three characters.  */
+                    ++n;
+                }
+            }
+
+          if (c == L_('\0'))
+            /* The wildcard(s) is/are the last element of the pattern.
+               If the name is a file name and contains another slash
+               this means it cannot match, unless the FNM_LEADING_DIR
+               flag is set.  */
+            {
+              int result = (flags & FNM_FILE_NAME) == 0 ? 0 : FNM_NOMATCH;
+
+              if (flags & FNM_FILE_NAME)
+                {
+                  if (flags & FNM_LEADING_DIR)
+                    result = 0;
+                  else
+                    {
+                      if (MEMCHR (n, L_('/'), string_end - n) == NULL)
+                        result = 0;
+                    }
+                }
+
+              return result;
+            }
+          else
+            {
+              const CHAR *endp;
+
+              endp = MEMCHR (n, (flags & FNM_FILE_NAME) ? L_('/') : L_('\0'),
+                             string_end - n);
+              if (endp == NULL)
+                endp = string_end;
+
+              if (c == L_('[')
+                  || (__builtin_expect (flags & FNM_EXTMATCH, 0) != 0
+                      && (c == L_('@') || c == L_('+') || c == L_('!'))
+                      && *p == L_('(')))
+                {
+                  int flags2 = ((flags & FNM_FILE_NAME)
+                                ? flags : (flags & ~FNM_PERIOD));
+                  bool no_leading_period2 = no_leading_period;
+
+                  for (--p; n < endp; ++n, no_leading_period2 = false)
+                    if (FCT (p, n, string_end, no_leading_period2, flags2)
+                        == 0)
+                      return 0;
+                }
+              else if (c == L_('/') && (flags & FNM_FILE_NAME))
+                {
+                  while (n < string_end && *n != L_('/'))
+                    ++n;
+                  if (n < string_end && *n == L_('/')
+                      && (FCT (p, n + 1, string_end, flags & FNM_PERIOD, flags)
+                          == 0))
+                    return 0;
+                }
+              else
+                {
+                  int flags2 = ((flags & FNM_FILE_NAME)
+                                ? flags : (flags & ~FNM_PERIOD));
+                  int no_leading_period2 = no_leading_period;
+
+                  if (c == L_('\\') && !(flags & FNM_NOESCAPE))
+                    c = *p;
+                  c = FOLD (c);
+                  for (--p; n < endp; ++n, no_leading_period2 = false)
+                    if (FOLD ((UCHAR) *n) == c
+                        && (FCT (p, n, string_end, no_leading_period2, flags2)
+                            == 0))
+                      return 0;
+                }
+            }
+
+          /* If we come here no match is possible with the wildcard.  */
+          return FNM_NOMATCH;
+
+        case L_('['):
+          {
+            /* Nonzero if the sense of the character class is inverted.  */
+            const CHAR *p_init = p;
+            const CHAR *n_init = n;
+            register bool not;
+            CHAR cold;
+            UCHAR fn;
+
+            if (posixly_correct == 0)
+              posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1;
+
+            if (n == string_end)
+              return FNM_NOMATCH;
+
+            if (*n == L_('.') && no_leading_period)
+              return FNM_NOMATCH;
+
+            if (*n == L_('/') && (flags & FNM_FILE_NAME))
+              /* '/' cannot be matched.  */
+              return FNM_NOMATCH;
+
+            not = (*p == L_('!') || (posixly_correct < 0 && *p == L_('^')));
+            if (not)
+              ++p;
+
+            fn = FOLD ((UCHAR) *n);
+
+            c = *p++;
+            for (;;)
+              {
+                if (!(flags & FNM_NOESCAPE) && c == L_('\\'))
+                  {
+                    if (*p == L_('\0'))
+                      return FNM_NOMATCH;
+                    c = FOLD ((UCHAR) *p);
+                    ++p;
+
+                    goto normal_bracket;
+                  }
+                else if (c == L_('[') && *p == L_(':'))
+                  {
+                    /* Leave room for the null.  */
+                    CHAR str[CHAR_CLASS_MAX_LENGTH + 1];
+                    size_t c1 = 0;
+#if defined _LIBC || WIDE_CHAR_SUPPORT
+                    wctype_t wt;
+#endif
+                    const CHAR *startp = p;
+
+                    for (;;)
+                      {
+                        if (c1 == CHAR_CLASS_MAX_LENGTH)
+                          /* The name is too long and therefore the pattern
+                             is ill-formed.  */
+                          return FNM_NOMATCH;
+
+                        c = *++p;
+                        if (c == L_(':') && p[1] == L_(']'))
+                          {
+                            p += 2;
+                            break;
+                          }
+                        if (c < L_('a') || c >= L_('z'))
+                          {
+                            /* This cannot possibly be a character class name.
+                               Match it as a normal range.  */
+                            p = startp;
+                            c = L_('[');
+                            goto normal_bracket;
+                          }
+                        str[c1++] = c;
+                      }
+                    str[c1] = L_('\0');
+
+#if defined _LIBC || WIDE_CHAR_SUPPORT
+                    wt = IS_CHAR_CLASS (str);
+                    if (wt == 0)
+                      /* Invalid character class name.  */
+                      return FNM_NOMATCH;
+
+# if defined _LIBC && ! WIDE_CHAR_VERSION
+                    /* The following code is glibc specific but does
+                       there a good job in speeding up the code since
+                       we can avoid the btowc() call.  */
+                    if (_ISCTYPE ((UCHAR) *n, wt))
+                      goto matched;
+# else
+                    if (ISWCTYPE (BTOWC ((UCHAR) *n), wt))
+                      goto matched;
+# endif
+#else
+                    if ((STREQ (str, L_("alnum")) && isalnum ((UCHAR) *n))
+                        || (STREQ (str, L_("alpha")) && isalpha ((UCHAR) *n))
+                        || (STREQ (str, L_("blank")) && isblank ((UCHAR) *n))
+                        || (STREQ (str, L_("cntrl")) && iscntrl ((UCHAR) *n))
+                        || (STREQ (str, L_("digit")) && isdigit ((UCHAR) *n))
+                        || (STREQ (str, L_("graph")) && isgraph ((UCHAR) *n))
+                        || (STREQ (str, L_("lower")) && islower ((UCHAR) *n))
+                        || (STREQ (str, L_("print")) && isprint ((UCHAR) *n))
+                        || (STREQ (str, L_("punct")) && ispunct ((UCHAR) *n))
+                        || (STREQ (str, L_("space")) && isspace ((UCHAR) *n))
+                        || (STREQ (str, L_("upper")) && isupper ((UCHAR) *n))
+                        || (STREQ (str, L_("xdigit")) && isxdigit ((UCHAR) *n)))
+                      goto matched;
+#endif
+                    c = *p++;
+                  }
+#ifdef _LIBC
+                else if (c == L_('[') && *p == L_('='))
+                  {
+                    UCHAR str[1];
+                    uint32_t nrules =
+                      _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
+                    const CHAR *startp = p;
+
+                    c = *++p;
+                    if (c == L_('\0'))
+                      {
+                        p = startp;
+                        c = L_('[');
+                        goto normal_bracket;
+                      }
+                    str[0] = c;
+
+                    c = *++p;
+                    if (c != L_('=') || p[1] != L_(']'))
+                      {
+                        p = startp;
+                        c = L_('[');
+                        goto normal_bracket;
+                      }
+                    p += 2;
+
+                    if (nrules == 0)
+                      {
+                        if ((UCHAR) *n == str[0])
+                          goto matched;
+                      }
+                    else
+                      {
+                        const int32_t *table;
+# if WIDE_CHAR_VERSION
+                        const int32_t *weights;
+                        const int32_t *extra;
+# else
+                        const unsigned char *weights;
+                        const unsigned char *extra;
+# endif
+                        const int32_t *indirect;
+                        int32_t idx;
+                        const UCHAR *cp = (const UCHAR *) str;
+
+                        /* This #include defines a local function!  */
+# if WIDE_CHAR_VERSION
+#  include <locale/weightwc.h>
+# else
+#  include <locale/weight.h>
+# endif
+
+# if WIDE_CHAR_VERSION
+                        table = (const int32_t *)
+                          _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEWC);
+                        weights = (const int32_t *)
+                          _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTWC);
+                        extra = (const int32_t *)
+                          _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAWC);
+                        indirect = (const int32_t *)
+                          _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTWC);
+# else
+                        table = (const int32_t *)
+                          _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
+                        weights = (const unsigned char *)
+                          _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB);
+                        extra = (const unsigned char *)
+                          _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB);
+                        indirect = (const int32_t *)
+                          _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB);
+# endif
+
+                        idx = findidx (&cp);
+                        if (idx != 0)
+                          {
+                            /* We found a table entry.  Now see whether the
+                               character we are currently at has the same
+                               equivalence class value.  */
+                            int len = weights[idx & 0xffffff];
+                            int32_t idx2;
+                            const UCHAR *np = (const UCHAR *) n;
+
+                            idx2 = findidx (&np);
+                            if (idx2 != 0
+                                && (idx >> 24) == (idx2 >> 24)
+                                && len == weights[idx2 & 0xffffff])
+                              {
+                                int cnt = 0;
+
+                                idx &= 0xffffff;
+                                idx2 &= 0xffffff;
+
+                                while (cnt < len
+                                       && (weights[idx + 1 + cnt]
+                                           == weights[idx2 + 1 + cnt]))
+                                  ++cnt;
+
+                                if (cnt == len)
+                                  goto matched;
+                              }
+                          }
+                      }
+
+                    c = *p++;
+                  }
+#endif
+                else if (c == L_('\0'))
+                  {
+                    /* [ unterminated, treat as normal character.  */
+                    p = p_init;
+                    n = n_init;
+                    c = L_('[');
+                    goto normal_match;
+                  }
+                else
+                  {
+                    bool is_range = false;
+
+#ifdef _LIBC
+                    bool is_seqval = false;
+
+                    if (c == L_('[') && *p == L_('.'))
+                      {
+                        uint32_t nrules =
+                          _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
+                        const CHAR *startp = p;
+                        size_t c1 = 0;
+
+                        while (1)
+                          {
+                            c = *++p;
+                            if (c == L_('.') && p[1] == L_(']'))
+                              {
+                                p += 2;
+                                break;
+                              }
+                            if (c == '\0')
+                              return FNM_NOMATCH;
+                            ++c1;
+                          }
+
+                        /* We have to handling the symbols differently in
+                           ranges since then the collation sequence is
+                           important.  */
+                        is_range = *p == L_('-') && p[1] != L_('\0');
+
+                        if (nrules == 0)
+                          {
+                            /* There are no names defined in the collation
+                               data.  Therefore we only accept the trivial
+                               names consisting of the character itself.  */
+                            if (c1 != 1)
+                              return FNM_NOMATCH;
+
+                            if (!is_range && *n == startp[1])
+                              goto matched;
+
+                            cold = startp[1];
+                            c = *p++;
+                          }
+                        else
+                          {
+                            int32_t table_size;
+                            const int32_t *symb_table;
+# ifdef WIDE_CHAR_VERSION
+                            char str[c1];
+                            size_t strcnt;
+# else
+#  define str (startp + 1)
+# endif
+                            const unsigned char *extra;
+                            int32_t idx;
+                            int32_t elem;
+                            int32_t second;
+                            int32_t hash;
+
+# ifdef WIDE_CHAR_VERSION
+                            /* We have to convert the name to a single-byte
+                               string.  This is possible since the names
+                               consist of ASCII characters and the internal
+                               representation is UCS4.  */
+                            for (strcnt = 0; strcnt < c1; ++strcnt)
+                              str[strcnt] = startp[1 + strcnt];
+# endif
+
+                            table_size =
+                              _NL_CURRENT_WORD (LC_COLLATE,
+                                                _NL_COLLATE_SYMB_HASH_SIZEMB);
+                            symb_table = (const int32_t *)
+                              _NL_CURRENT (LC_COLLATE,
+                                           _NL_COLLATE_SYMB_TABLEMB);
+                            extra = (const unsigned char *)
+                              _NL_CURRENT (LC_COLLATE,
+                                           _NL_COLLATE_SYMB_EXTRAMB);
+
+                            /* Locate the character in the hashing table.  */
+                            hash = elem_hash (str, c1);
+
+                            idx = 0;
+                            elem = hash % table_size;
+                            if (symb_table[2 * elem] != 0)
+                              {
+                                second = hash % (table_size - 2) + 1;
+
+                                do
+                                  {
+                                    /* First compare the hashing value.  */
+                                    if (symb_table[2 * elem] == hash
+                                        && (c1
+                                            == extra[symb_table[2 * elem + 1]])
+                                        && memcmp (str,
+                                                   &extra[symb_table[2 * elem
+                                                                     + 1]
+                                                          + 1], c1) == 0)
+                                      {
+                                        /* Yep, this is the entry.  */
+                                        idx = symb_table[2 * elem + 1];
+                                        idx += 1 + extra[idx];
+                                        break;
+                                      }
+
+                                    /* Next entry.  */
+                                    elem += second;
+                                  }
+                                while (symb_table[2 * elem] != 0);
+                              }
+
+                            if (symb_table[2 * elem] != 0)
+                              {
+                                /* Compare the byte sequence but only if
+                                   this is not part of a range.  */
+# ifdef WIDE_CHAR_VERSION
+                                int32_t *wextra;
+
+                                idx += 1 + extra[idx];
+                                /* Adjust for the alignment.  */
+                                idx = (idx + 3) & ~3;
+
+                                wextra = (int32_t *) &extra[idx + 4];
+# endif
+
+                                if (! is_range)
+                                  {
+# ifdef WIDE_CHAR_VERSION
+                                    for (c1 = 0;
+                                         (int32_t) c1 < wextra[idx];
+                                         ++c1)
+                                      if (n[c1] != wextra[1 + c1])
+                                        break;
+
+                                    if ((int32_t) c1 == wextra[idx])
+                                      goto matched;
+# else
+                                    for (c1 = 0; c1 < extra[idx]; ++c1)
+                                      if (n[c1] != extra[1 + c1])
+                                        break;
+
+                                    if (c1 == extra[idx])
+                                      goto matched;
+# endif
+                                  }
+
+                                /* Get the collation sequence value.  */
+                                is_seqval = true;
+# ifdef WIDE_CHAR_VERSION
+                                cold = wextra[1 + wextra[idx]];
+# else
+                                /* Adjust for the alignment.  */
+                                idx += 1 + extra[idx];
+                                idx = (idx + 3) & ~4;
+                                cold = *((int32_t *) &extra[idx]);
+# endif
+
+                                c = *p++;
+                              }
+                            else if (c1 == 1)
+                              {
+                                /* No valid character.  Match it as a
+                                   single byte.  */
+                                if (!is_range && *n == str[0])
+                                  goto matched;
+
+                                cold = str[0];
+                                c = *p++;
+                              }
+                            else
+                              return FNM_NOMATCH;
+                          }
+                      }
+                    else
+# undef str
+#endif
+                      {
+                        c = FOLD (c);
+                      normal_bracket:
+
+                        /* We have to handling the symbols differently in
+                           ranges since then the collation sequence is
+                           important.  */
+                        is_range = (*p == L_('-') && p[1] != L_('\0')
+                                    && p[1] != L_(']'));
+
+                        if (!is_range && c == fn)
+                          goto matched;
+
+#if _LIBC
+                        /* This is needed if we goto normal_bracket; from
+                           outside of is_seqval's scope.  */
+                        is_seqval = false;
+#endif
+
+                        cold = c;
+                        c = *p++;
+                      }
+
+                    if (c == L_('-') && *p != L_(']'))
+                      {
+#if _LIBC
+                        /* We have to find the collation sequence
+                           value for C.  Collation sequence is nothing
+                           we can regularly access.  The sequence
+                           value is defined by the order in which the
+                           definitions of the collation values for the
+                           various characters appear in the source
+                           file.  A strange concept, nowhere
+                           documented.  */
+                        uint32_t fcollseq;
+                        uint32_t lcollseq;
+                        UCHAR cend = *p++;
+
+# ifdef WIDE_CHAR_VERSION
+                        /* Search in the 'names' array for the characters.  */
+                        fcollseq = __collseq_table_lookup (collseq, fn);
+                        if (fcollseq == ~((uint32_t) 0))
+                          /* XXX We don't know anything about the character
+                             we are supposed to match.  This means we are
+                             failing.  */
+                          goto range_not_matched;
+
+                        if (is_seqval)
+                          lcollseq = cold;
+                        else
+                          lcollseq = __collseq_table_lookup (collseq, cold);
+# else
+                        fcollseq = collseq[fn];
+                        lcollseq = is_seqval ? cold : collseq[(UCHAR) cold];
+# endif
+
+                        is_seqval = false;
+                        if (cend == L_('[') && *p == L_('.'))
+                          {
+                            uint32_t nrules =
+                              _NL_CURRENT_WORD (LC_COLLATE,
+                                                _NL_COLLATE_NRULES);
+                            const CHAR *startp = p;
+                            size_t c1 = 0;
+
+                            while (1)
+                              {
+                                c = *++p;
+                                if (c == L_('.') && p[1] == L_(']'))
+                                  {
+                                    p += 2;
+                                    break;
+                                  }
+                                if (c == '\0')
+                                  return FNM_NOMATCH;
+                                ++c1;
+                              }
+
+                            if (nrules == 0)
+                              {
+                                /* There are no names defined in the
+                                   collation data.  Therefore we only
+                                   accept the trivial names consisting
+                                   of the character itself.  */
+                                if (c1 != 1)
+                                  return FNM_NOMATCH;
+
+                                cend = startp[1];
+                              }
+                            else
+                              {
+                                int32_t table_size;
+                                const int32_t *symb_table;
+# ifdef WIDE_CHAR_VERSION
+                                char str[c1];
+                                size_t strcnt;
+# else
+#  define str (startp + 1)
+# endif
+                                const unsigned char *extra;
+                                int32_t idx;
+                                int32_t elem;
+                                int32_t second;
+                                int32_t hash;
+
+# ifdef WIDE_CHAR_VERSION
+                                /* We have to convert the name to a single-byte
+                                   string.  This is possible since the names
+                                   consist of ASCII characters and the internal
+                                   representation is UCS4.  */
+                                for (strcnt = 0; strcnt < c1; ++strcnt)
+                                  str[strcnt] = startp[1 + strcnt];
+# endif
+
+                                table_size =
+                                  _NL_CURRENT_WORD (LC_COLLATE,
+                                                    _NL_COLLATE_SYMB_HASH_SIZEMB);
+                                symb_table = (const int32_t *)
+                                  _NL_CURRENT (LC_COLLATE,
+                                               _NL_COLLATE_SYMB_TABLEMB);
+                                extra = (const unsigned char *)
+                                  _NL_CURRENT (LC_COLLATE,
+                                               _NL_COLLATE_SYMB_EXTRAMB);
+
+                                /* Locate the character in the hashing
+                                   table.  */
+                                hash = elem_hash (str, c1);
+
+                                idx = 0;
+                                elem = hash % table_size;
+                                if (symb_table[2 * elem] != 0)
+                                  {
+                                    second = hash % (table_size - 2) + 1;
+
+                                    do
+                                      {
+                                        /* First compare the hashing value.  */
+                                        if (symb_table[2 * elem] == hash
+                                            && (c1
+                                                == extra[symb_table[2 * elem + 1]])
+                                            && memcmp (str,
+                                                       &extra[symb_table[2 * elem + 1]
+                                                              + 1], c1) == 0)
+                                          {
+                                            /* Yep, this is the entry.  */
+                                            idx = symb_table[2 * elem + 1];
+                                            idx += 1 + extra[idx];
+                                            break;
+                                          }
+
+                                        /* Next entry.  */
+                                        elem += second;
+                                      }
+                                    while (symb_table[2 * elem] != 0);
+                                  }
+
+                                if (symb_table[2 * elem] != 0)
+                                  {
+                                    /* Compare the byte sequence but only if
+                                       this is not part of a range.  */
+# ifdef WIDE_CHAR_VERSION
+                                    int32_t *wextra;
+
+                                    idx += 1 + extra[idx];
+                                    /* Adjust for the alignment.  */
+                                    idx = (idx + 3) & ~4;
+
+                                    wextra = (int32_t *) &extra[idx + 4];
+# endif
+                                    /* Get the collation sequence value.  */
+                                    is_seqval = true;
+# ifdef WIDE_CHAR_VERSION
+                                    cend = wextra[1 + wextra[idx]];
+# else
+                                    /* Adjust for the alignment.  */
+                                    idx += 1 + extra[idx];
+                                    idx = (idx + 3) & ~4;
+                                    cend = *((int32_t *) &extra[idx]);
+# endif
+                                  }
+                                else if (symb_table[2 * elem] != 0 && c1 == 1)
+                                  {
+                                    cend = str[0];
+                                    c = *p++;
+                                  }
+                                else
+                                  return FNM_NOMATCH;
+                              }
+# undef str
+                          }
+                        else
+                          {
+                            if (!(flags & FNM_NOESCAPE) && cend == L_('\\'))
+                              cend = *p++;
+                            if (cend == L_('\0'))
+                              return FNM_NOMATCH;
+                            cend = FOLD (cend);
+                          }
+
+                        /* XXX It is not entirely clear to me how to handle
+                           characters which are not mentioned in the
+                           collation specification.  */
+                        if (
+# ifdef WIDE_CHAR_VERSION
+                            lcollseq == 0xffffffff ||
+# endif
+                            lcollseq <= fcollseq)
+                          {
+                            /* We have to look at the upper bound.  */
+                            uint32_t hcollseq;
+
+                            if (is_seqval)
+                              hcollseq = cend;
+                            else
+                              {
+# ifdef WIDE_CHAR_VERSION
+                                hcollseq =
+                                  __collseq_table_lookup (collseq, cend);
+                                if (hcollseq == ~((uint32_t) 0))
+                                  {
+                                    /* Hum, no information about the upper
+                                       bound.  The matching succeeds if the
+                                       lower bound is matched exactly.  */
+                                    if (lcollseq != fcollseq)
+                                      goto range_not_matched;
+
+                                    goto matched;
+                                  }
+# else
+                                hcollseq = collseq[cend];
+# endif
+                              }
+
+                            if (lcollseq <= hcollseq && fcollseq <= hcollseq)
+                              goto matched;
+                          }
+# ifdef WIDE_CHAR_VERSION
+                      range_not_matched:
+# endif
+#else
+                        /* We use a boring value comparison of the character
+                           values.  This is better than comparing using
+                           'strcoll' since the latter would have surprising
+                           and sometimes fatal consequences.  */
+                        UCHAR cend = *p++;
+
+                        if (!(flags & FNM_NOESCAPE) && cend == L_('\\'))
+                          cend = *p++;
+                        if (cend == L_('\0'))
+                          return FNM_NOMATCH;
+
+                        /* It is a range.  */
+                        if (cold <= fn && fn <= cend)
+                          goto matched;
+#endif
+
+                        c = *p++;
+                      }
+                  }
+
+                if (c == L_(']'))
+                  break;
+              }
+
+            if (!not)
+              return FNM_NOMATCH;
+            break;
+
+          matched:
+            /* Skip the rest of the [...] that already matched.  */
+            do
+              {
+              ignore_next:
+                c = *p++;
+
+                if (c == L_('\0'))
+                  /* [... (unterminated) loses.  */
+                  return FNM_NOMATCH;
+
+                if (!(flags & FNM_NOESCAPE) && c == L_('\\'))
+                  {
+                    if (*p == L_('\0'))
+                      return FNM_NOMATCH;
+                    /* XXX 1003.2d11 is unclear if this is right.  */
+                    ++p;
+                  }
+                else if (c == L_('[') && *p == L_(':'))
+                  {
+                    int c1 = 0;
+                    const CHAR *startp = p;
+
+                    while (1)
+                      {
+                        c = *++p;
+                        if (++c1 == CHAR_CLASS_MAX_LENGTH)
+                          return FNM_NOMATCH;
+
+                        if (*p == L_(':') && p[1] == L_(']'))
+                          break;
+
+                        if (c < L_('a') || c >= L_('z'))
+                          {
+                            p = startp;
+                            goto ignore_next;
+                          }
+                      }
+                    p += 2;
+                    c = *p++;
+                  }
+                else if (c == L_('[') && *p == L_('='))
+                  {
+                    c = *++p;
+                    if (c == L_('\0'))
+                      return FNM_NOMATCH;
+                    c = *++p;
+                    if (c != L_('=') || p[1] != L_(']'))
+                      return FNM_NOMATCH;
+                    p += 2;
+                    c = *p++;
+                  }
+                else if (c == L_('[') && *p == L_('.'))
+                  {
+                    ++p;
+                    while (1)
+                      {
+                        c = *++p;
+                        if (c == '\0')
+                          return FNM_NOMATCH;
+
+                        if (*p == L_('.') && p[1] == L_(']'))
+                          break;
+                      }
+                    p += 2;
+                    c = *p++;
+                  }
+              }
+            while (c != L_(']'));
+            if (not)
+              return FNM_NOMATCH;
+          }
+          break;
+
+        case L_('+'):
+        case L_('@'):
+        case L_('!'):
+          if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(')
+            {
+              int res;
+
+              res = EXT (c, p, n, string_end, no_leading_period, flags);
+              if (res != -1)
+                return res;
+            }
+          goto normal_match;
+
+        case L_('/'):
+          if (NO_LEADING_PERIOD (flags))
+            {
+              if (n == string_end || c != (UCHAR) *n)
+                return FNM_NOMATCH;
+
+              new_no_leading_period = true;
+              break;
+            }
+          /* FALLTHROUGH */
+        default:
+        normal_match:
+          if (n == string_end || c != FOLD ((UCHAR) *n))
+            return FNM_NOMATCH;
+        }
+
+      no_leading_period = new_no_leading_period;
+      ++n;
+    }
+
+  if (n == string_end)
+    return 0;
+
+  if ((flags & FNM_LEADING_DIR) && n != string_end && *n == L_('/'))
+    /* The FNM_LEADING_DIR flag says that "foo*" matches "foobar/frobozz".  */
+    return 0;
+
+  return FNM_NOMATCH;
+}
+
+
+static const CHAR *
+internal_function
+END (const CHAR *pattern)
+{
+  const CHAR *p = pattern;
+
+  while (1)
+    if (*++p == L_('\0'))
+      /* This is an invalid pattern.  */
+      return pattern;
+    else if (*p == L_('['))
+      {
+        /* Handle brackets special.  */
+        if (posixly_correct == 0)
+          posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1;
+
+        /* Skip the not sign.  We have to recognize it because of a possibly
+           following ']'.  */
+        if (*++p == L_('!') || (posixly_correct < 0 && *p == L_('^')))
+          ++p;
+        /* A leading ']' is recognized as such.  */
+        if (*p == L_(']'))
+          ++p;
+        /* Skip over all characters of the list.  */
+        while (*p != L_(']'))
+          if (*p++ == L_('\0'))
+            /* This is no valid pattern.  */
+            return pattern;
+      }
+    else if ((*p == L_('?') || *p == L_('*') || *p == L_('+') || *p == L_('@')
+              || *p == L_('!')) && p[1] == L_('('))
+      p = END (p + 1);
+    else if (*p == L_(')'))
+      break;
+
+  return p + 1;
+}
+
+
+static int
+internal_function
+EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end,
+     bool no_leading_period, int flags)
+{
+  const CHAR *startp;
+  size_t level;
+  struct patternlist
+  {
+    struct patternlist *next;
+    CHAR str[1];
+  } *list = NULL;
+  struct patternlist **lastp = &list;
+  size_t pattern_len = STRLEN (pattern);
+  const CHAR *p;
+  const CHAR *rs;
+  enum { ALLOCA_LIMIT = 8000 };
+
+  /* Parse the pattern.  Store the individual parts in the list.  */
+  level = 0;
+  for (startp = p = pattern + 1; ; ++p)
+    if (*p == L_('\0'))
+      /* This is an invalid pattern.  */
+      return -1;
+    else if (*p == L_('['))
+      {
+        /* Handle brackets special.  */
+        if (posixly_correct == 0)
+          posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1;
+
+        /* Skip the not sign.  We have to recognize it because of a possibly
+           following ']'.  */
+        if (*++p == L_('!') || (posixly_correct < 0 && *p == L_('^')))
+          ++p;
+        /* A leading ']' is recognized as such.  */
+        if (*p == L_(']'))
+          ++p;
+        /* Skip over all characters of the list.  */
+        while (*p != L_(']'))
+          if (*p++ == L_('\0'))
+            /* This is no valid pattern.  */
+            return -1;
+      }
+    else if ((*p == L_('?') || *p == L_('*') || *p == L_('+') || *p == L_('@')
+              || *p == L_('!')) && p[1] == L_('('))
+      /* Remember the nesting level.  */
+      ++level;
+    else if (*p == L_(')'))
+      {
+        if (level-- == 0)
+          {
+            /* This means we found the end of the pattern.  */
+#define NEW_PATTERN \
+            struct patternlist *newp;                                         \
+            size_t plen;                                                      \
+            size_t plensize;                                                  \
+            size_t newpsize;                                                  \
+                                                                              \
+            plen = (opt == L_('?') || opt == L_('@')                          \
+                    ? pattern_len                                             \
+                    : p - startp + 1UL);                                      \
+            plensize = plen * sizeof (CHAR);                                  \
+            newpsize = offsetof (struct patternlist, str) + plensize;         \
+            if ((size_t) -1 / sizeof (CHAR) < plen                            \
+                || newpsize < offsetof (struct patternlist, str)              \
+                || ALLOCA_LIMIT <= newpsize)                                  \
+              return -1;                                                      \
+            newp = (struct patternlist *) alloca (newpsize);                  \
+            *((CHAR *) MEMPCPY (newp->str, startp, p - startp)) = L_('\0');    \
+            newp->next = NULL;                                                \
+            *lastp = newp;                                                    \
+            lastp = &newp->next
+            NEW_PATTERN;
+            break;
+          }
+      }
+    else if (*p == L_('|'))
+      {
+        if (level == 0)
+          {
+            NEW_PATTERN;
+            startp = p + 1;
+          }
+      }
+  assert (list != NULL);
+  assert (p[-1] == L_(')'));
+#undef NEW_PATTERN
+
+  switch (opt)
+    {
+    case L_('*'):
+      if (FCT (p, string, string_end, no_leading_period, flags) == 0)
+        return 0;
+      /* FALLTHROUGH */
+
+    case L_('+'):
+      do
+        {
+          for (rs = string; rs <= string_end; ++rs)
+            /* First match the prefix with the current pattern with the
+               current pattern.  */
+            if (FCT (list->str, string, rs, no_leading_period,
+                     flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0
+                /* This was successful.  Now match the rest with the rest
+                   of the pattern.  */
+                && (FCT (p, rs, string_end,
+                         rs == string
+                         ? no_leading_period
+                         : rs[-1] == '/' && NO_LEADING_PERIOD (flags),
+                         flags & FNM_FILE_NAME
+                         ? flags : flags & ~FNM_PERIOD) == 0
+                    /* This didn't work.  Try the whole pattern.  */
+                    || (rs != string
+                        && FCT (pattern - 1, rs, string_end,
+                                rs == string
+                                ? no_leading_period
+                                : rs[-1] == '/' && NO_LEADING_PERIOD (flags),
+                                flags & FNM_FILE_NAME
+                                ? flags : flags & ~FNM_PERIOD) == 0)))
+              /* It worked.  Signal success.  */
+              return 0;
+        }
+      while ((list = list->next) != NULL);
+
+      /* None of the patterns lead to a match.  */
+      return FNM_NOMATCH;
+
+    case L_('?'):
+      if (FCT (p, string, string_end, no_leading_period, flags) == 0)
+        return 0;
+      /* FALLTHROUGH */
+
+    case L_('@'):
+      do
+        /* I cannot believe it but 'strcat' is actually acceptable
+           here.  Match the entire string with the prefix from the
+           pattern list and the rest of the pattern following the
+           pattern list.  */
+        if (FCT (STRCAT (list->str, p), string, string_end,
+                 no_leading_period,
+                 flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0)
+          /* It worked.  Signal success.  */
+          return 0;
+      while ((list = list->next) != NULL);
+
+      /* None of the patterns lead to a match.  */
+      return FNM_NOMATCH;
+
+    case L_('!'):
+      for (rs = string; rs <= string_end; ++rs)
+        {
+          struct patternlist *runp;
+
+          for (runp = list; runp != NULL; runp = runp->next)
+            if (FCT (runp->str, string, rs,  no_leading_period,
+                     flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0)
+              break;
+
+          /* If none of the patterns matched see whether the rest does.  */
+          if (runp == NULL
+              && (FCT (p, rs, string_end,
+                       rs == string
+                       ? no_leading_period
+                       : rs[-1] == '/' && NO_LEADING_PERIOD (flags),
+                       flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD)
+                  == 0))
+            /* This is successful.  */
+            return 0;
+        }
+
+      /* None of the patterns together with the rest of the pattern
+         lead to a match.  */
+      return FNM_NOMATCH;
+
+    default:
+      assert (! "Invalid extended matching operator");
+      break;
+    }
+
+  return -1;
+}
+
+
+#undef FOLD
+#undef CHAR
+#undef UCHAR
+#undef INT
+#undef FCT
+#undef EXT
+#undef END
+#undef MEMPCPY
+#undef MEMCHR
+#undef STRLEN
+#undef STRCAT
+#undef L_
+#undef BTOWC
diff --git a/gdb/gnulib/import/inttypes.in.h b/gdb/gnulib/import/inttypes.in.h
new file mode 100644
index 0000000..b9da2b5
--- /dev/null
+++ b/gdb/gnulib/import/inttypes.in.h
@@ -0,0 +1,1130 @@
+/* Copyright (C) 2006-2012 Free Software Foundation, Inc.
+   Written by Paul Eggert, Bruno Haible, Derek Price.
+   This file is part of gnulib.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/*
+ * ISO C 99 <inttypes.h> for platforms that lack it.
+ * <http://www.opengroup.org/susv3xbd/inttypes.h.html>
+ */
+
+#if __GNUC__ >= 3
+ at PRAGMA_SYSTEM_HEADER@
+#endif
+ at PRAGMA_COLUMNS@
+
+/* Include the original <inttypes.h> if it exists, and if this file
+   has not been included yet or if this file includes gnulib stdint.h
+   which in turn includes this file.
+   The include_next requires a split double-inclusion guard.  */
+#if ! defined INTTYPES_H || defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+# if @HAVE_INTTYPES_H@
+
+   /* Some pre-C++11 <stdint.h> implementations need this.  */
+#  if defined __cplusplus && ! defined __STDC_FORMAT_MACROS
+#   define __STDC_FORMAT_MACROS 1
+#  endif
+
+#  @INCLUDE_NEXT@ @NEXT_INTTYPES_H@
+# endif
+#endif
+
+#if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+#define INTTYPES_H
+
+/* Include <stdint.h> or the gnulib replacement.
+   But avoid namespace pollution on glibc systems.  */
+#ifndef __GLIBC__
+# include <stdint.h>
+#endif
+/* Get CHAR_BIT.  */
+#include <limits.h>
+
+#if !(INT_MIN == INT32_MIN && INT_MAX == INT32_MAX)
+# error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to <bug-gnulib at gnu.org>."
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+/* 7.8.1 Macros for format specifiers */
+
+#if defined _TNS_R_TARGET
+   /* Tandem NonStop R series and compatible platforms released before
+      July 2005 support %Ld but not %lld.  */
+# define _LONG_LONG_FORMAT_PREFIX "L"
+#else
+# define _LONG_LONG_FORMAT_PREFIX "ll"
+#endif
+
+#if !defined PRId8 || @PRI_MACROS_BROKEN@
+# undef PRId8
+# ifdef INT8_MAX
+#  define PRId8 "d"
+# endif
+#endif
+#if !defined PRIi8 || @PRI_MACROS_BROKEN@
+# undef PRIi8
+# ifdef INT8_MAX
+#  define PRIi8 "i"
+# endif
+#endif
+#if !defined PRIo8 || @PRI_MACROS_BROKEN@
+# undef PRIo8
+# ifdef UINT8_MAX
+#  define PRIo8 "o"
+# endif
+#endif
+#if !defined PRIu8 || @PRI_MACROS_BROKEN@
+# undef PRIu8
+# ifdef UINT8_MAX
+#  define PRIu8 "u"
+# endif
+#endif
+#if !defined PRIx8 || @PRI_MACROS_BROKEN@
+# undef PRIx8
+# ifdef UINT8_MAX
+#  define PRIx8 "x"
+# endif
+#endif
+#if !defined PRIX8 || @PRI_MACROS_BROKEN@
+# undef PRIX8
+# ifdef UINT8_MAX
+#  define PRIX8 "X"
+# endif
+#endif
+#if !defined PRId16 || @PRI_MACROS_BROKEN@
+# undef PRId16
+# ifdef INT16_MAX
+#  define PRId16 "d"
+# endif
+#endif
+#if !defined PRIi16 || @PRI_MACROS_BROKEN@
+# undef PRIi16
+# ifdef INT16_MAX
+#  define PRIi16 "i"
+# endif
+#endif
+#if !defined PRIo16 || @PRI_MACROS_BROKEN@
+# undef PRIo16
+# ifdef UINT16_MAX
+#  define PRIo16 "o"
+# endif
+#endif
+#if !defined PRIu16 || @PRI_MACROS_BROKEN@
+# undef PRIu16
+# ifdef UINT16_MAX
+#  define PRIu16 "u"
+# endif
+#endif
+#if !defined PRIx16 || @PRI_MACROS_BROKEN@
+# undef PRIx16
+# ifdef UINT16_MAX
+#  define PRIx16 "x"
+# endif
+#endif
+#if !defined PRIX16 || @PRI_MACROS_BROKEN@
+# undef PRIX16
+# ifdef UINT16_MAX
+#  define PRIX16 "X"
+# endif
+#endif
+#if !defined PRId32 || @PRI_MACROS_BROKEN@
+# undef PRId32
+# ifdef INT32_MAX
+#  define PRId32 "d"
+# endif
+#endif
+#if !defined PRIi32 || @PRI_MACROS_BROKEN@
+# undef PRIi32
+# ifdef INT32_MAX
+#  define PRIi32 "i"
+# endif
+#endif
+#if !defined PRIo32 || @PRI_MACROS_BROKEN@
+# undef PRIo32
+# ifdef UINT32_MAX
+#  define PRIo32 "o"
+# endif
+#endif
+#if !defined PRIu32 || @PRI_MACROS_BROKEN@
+# undef PRIu32
+# ifdef UINT32_MAX
+#  define PRIu32 "u"
+# endif
+#endif
+#if !defined PRIx32 || @PRI_MACROS_BROKEN@
+# undef PRIx32
+# ifdef UINT32_MAX
+#  define PRIx32 "x"
+# endif
+#endif
+#if !defined PRIX32 || @PRI_MACROS_BROKEN@
+# undef PRIX32
+# ifdef UINT32_MAX
+#  define PRIX32 "X"
+# endif
+#endif
+#ifdef INT64_MAX
+# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@)
+#  define _PRI64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+#  define _PRI64_PREFIX "I64"
+# elif @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
+#  define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined PRId64 || @PRI_MACROS_BROKEN@
+#  undef PRId64
+#  define PRId64 _PRI64_PREFIX "d"
+# endif
+# if !defined PRIi64 || @PRI_MACROS_BROKEN@
+#  undef PRIi64
+#  define PRIi64 _PRI64_PREFIX "i"
+# endif
+#endif
+#ifdef UINT64_MAX
+# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@)
+#  define _PRIu64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+#  define _PRIu64_PREFIX "I64"
+# elif @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+#  define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined PRIo64 || @PRI_MACROS_BROKEN@
+#  undef PRIo64
+#  define PRIo64 _PRIu64_PREFIX "o"
+# endif
+# if !defined PRIu64 || @PRI_MACROS_BROKEN@
+#  undef PRIu64
+#  define PRIu64 _PRIu64_PREFIX "u"
+# endif
+# if !defined PRIx64 || @PRI_MACROS_BROKEN@
+#  undef PRIx64
+#  define PRIx64 _PRIu64_PREFIX "x"
+# endif
+# if !defined PRIX64 || @PRI_MACROS_BROKEN@
+#  undef PRIX64
+#  define PRIX64 _PRIu64_PREFIX "X"
+# endif
+#endif
+
+#if !defined PRIdLEAST8 || @PRI_MACROS_BROKEN@
+# undef PRIdLEAST8
+# define PRIdLEAST8 "d"
+#endif
+#if !defined PRIiLEAST8 || @PRI_MACROS_BROKEN@
+# undef PRIiLEAST8
+# define PRIiLEAST8 "i"
+#endif
+#if !defined PRIoLEAST8 || @PRI_MACROS_BROKEN@
+# undef PRIoLEAST8
+# define PRIoLEAST8 "o"
+#endif
+#if !defined PRIuLEAST8 || @PRI_MACROS_BROKEN@
+# undef PRIuLEAST8
+# define PRIuLEAST8 "u"
+#endif
+#if !defined PRIxLEAST8 || @PRI_MACROS_BROKEN@
+# undef PRIxLEAST8
+# define PRIxLEAST8 "x"
+#endif
+#if !defined PRIXLEAST8 || @PRI_MACROS_BROKEN@
+# undef PRIXLEAST8
+# define PRIXLEAST8 "X"
+#endif
+#if !defined PRIdLEAST16 || @PRI_MACROS_BROKEN@
+# undef PRIdLEAST16
+# define PRIdLEAST16 "d"
+#endif
+#if !defined PRIiLEAST16 || @PRI_MACROS_BROKEN@
+# undef PRIiLEAST16
+# define PRIiLEAST16 "i"
+#endif
+#if !defined PRIoLEAST16 || @PRI_MACROS_BROKEN@
+# undef PRIoLEAST16
+# define PRIoLEAST16 "o"
+#endif
+#if !defined PRIuLEAST16 || @PRI_MACROS_BROKEN@
+# undef PRIuLEAST16
+# define PRIuLEAST16 "u"
+#endif
+#if !defined PRIxLEAST16 || @PRI_MACROS_BROKEN@
+# undef PRIxLEAST16
+# define PRIxLEAST16 "x"
+#endif
+#if !defined PRIXLEAST16 || @PRI_MACROS_BROKEN@
+# undef PRIXLEAST16
+# define PRIXLEAST16 "X"
+#endif
+#if !defined PRIdLEAST32 || @PRI_MACROS_BROKEN@
+# undef PRIdLEAST32
+# define PRIdLEAST32 "d"
+#endif
+#if !defined PRIiLEAST32 || @PRI_MACROS_BROKEN@
+# undef PRIiLEAST32
+# define PRIiLEAST32 "i"
+#endif
+#if !defined PRIoLEAST32 || @PRI_MACROS_BROKEN@
+# undef PRIoLEAST32
+# define PRIoLEAST32 "o"
+#endif
+#if !defined PRIuLEAST32 || @PRI_MACROS_BROKEN@
+# undef PRIuLEAST32
+# define PRIuLEAST32 "u"
+#endif
+#if !defined PRIxLEAST32 || @PRI_MACROS_BROKEN@
+# undef PRIxLEAST32
+# define PRIxLEAST32 "x"
+#endif
+#if !defined PRIXLEAST32 || @PRI_MACROS_BROKEN@
+# undef PRIXLEAST32
+# define PRIXLEAST32 "X"
+#endif
+#ifdef INT64_MAX
+# if !defined PRIdLEAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIdLEAST64
+#  define PRIdLEAST64 PRId64
+# endif
+# if !defined PRIiLEAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIiLEAST64
+#  define PRIiLEAST64 PRIi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined PRIoLEAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIoLEAST64
+#  define PRIoLEAST64 PRIo64
+# endif
+# if !defined PRIuLEAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIuLEAST64
+#  define PRIuLEAST64 PRIu64
+# endif
+# if !defined PRIxLEAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIxLEAST64
+#  define PRIxLEAST64 PRIx64
+# endif
+# if !defined PRIXLEAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIXLEAST64
+#  define PRIXLEAST64 PRIX64
+# endif
+#endif
+
+#if !defined PRIdFAST8 || @PRI_MACROS_BROKEN@
+# undef PRIdFAST8
+# if INT_FAST8_MAX > INT32_MAX
+#  define PRIdFAST8 PRId64
+# else
+#  define PRIdFAST8 "d"
+# endif
+#endif
+#if !defined PRIiFAST8 || @PRI_MACROS_BROKEN@
+# undef PRIiFAST8
+# if INT_FAST8_MAX > INT32_MAX
+#  define PRIiFAST8 PRIi64
+# else
+#  define PRIiFAST8 "i"
+# endif
+#endif
+#if !defined PRIoFAST8 || @PRI_MACROS_BROKEN@
+# undef PRIoFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define PRIoFAST8 PRIo64
+# else
+#  define PRIoFAST8 "o"
+# endif
+#endif
+#if !defined PRIuFAST8 || @PRI_MACROS_BROKEN@
+# undef PRIuFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define PRIuFAST8 PRIu64
+# else
+#  define PRIuFAST8 "u"
+# endif
+#endif
+#if !defined PRIxFAST8 || @PRI_MACROS_BROKEN@
+# undef PRIxFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define PRIxFAST8 PRIx64
+# else
+#  define PRIxFAST8 "x"
+# endif
+#endif
+#if !defined PRIXFAST8 || @PRI_MACROS_BROKEN@
+# undef PRIXFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define PRIXFAST8 PRIX64
+# else
+#  define PRIXFAST8 "X"
+# endif
+#endif
+#if !defined PRIdFAST16 || @PRI_MACROS_BROKEN@
+# undef PRIdFAST16
+# if INT_FAST16_MAX > INT32_MAX
+#  define PRIdFAST16 PRId64
+# else
+#  define PRIdFAST16 "d"
+# endif
+#endif
+#if !defined PRIiFAST16 || @PRI_MACROS_BROKEN@
+# undef PRIiFAST16
+# if INT_FAST16_MAX > INT32_MAX
+#  define PRIiFAST16 PRIi64
+# else
+#  define PRIiFAST16 "i"
+# endif
+#endif
+#if !defined PRIoFAST16 || @PRI_MACROS_BROKEN@
+# undef PRIoFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define PRIoFAST16 PRIo64
+# else
+#  define PRIoFAST16 "o"
+# endif
+#endif
+#if !defined PRIuFAST16 || @PRI_MACROS_BROKEN@
+# undef PRIuFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define PRIuFAST16 PRIu64
+# else
+#  define PRIuFAST16 "u"
+# endif
+#endif
+#if !defined PRIxFAST16 || @PRI_MACROS_BROKEN@
+# undef PRIxFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define PRIxFAST16 PRIx64
+# else
+#  define PRIxFAST16 "x"
+# endif
+#endif
+#if !defined PRIXFAST16 || @PRI_MACROS_BROKEN@
+# undef PRIXFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define PRIXFAST16 PRIX64
+# else
+#  define PRIXFAST16 "X"
+# endif
+#endif
+#if !defined PRIdFAST32 || @PRI_MACROS_BROKEN@
+# undef PRIdFAST32
+# if INT_FAST32_MAX > INT32_MAX
+#  define PRIdFAST32 PRId64
+# else
+#  define PRIdFAST32 "d"
+# endif
+#endif
+#if !defined PRIiFAST32 || @PRI_MACROS_BROKEN@
+# undef PRIiFAST32
+# if INT_FAST32_MAX > INT32_MAX
+#  define PRIiFAST32 PRIi64
+# else
+#  define PRIiFAST32 "i"
+# endif
+#endif
+#if !defined PRIoFAST32 || @PRI_MACROS_BROKEN@
+# undef PRIoFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define PRIoFAST32 PRIo64
+# else
+#  define PRIoFAST32 "o"
+# endif
+#endif
+#if !defined PRIuFAST32 || @PRI_MACROS_BROKEN@
+# undef PRIuFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define PRIuFAST32 PRIu64
+# else
+#  define PRIuFAST32 "u"
+# endif
+#endif
+#if !defined PRIxFAST32 || @PRI_MACROS_BROKEN@
+# undef PRIxFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define PRIxFAST32 PRIx64
+# else
+#  define PRIxFAST32 "x"
+# endif
+#endif
+#if !defined PRIXFAST32 || @PRI_MACROS_BROKEN@
+# undef PRIXFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define PRIXFAST32 PRIX64
+# else
+#  define PRIXFAST32 "X"
+# endif
+#endif
+#ifdef INT64_MAX
+# if !defined PRIdFAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIdFAST64
+#  define PRIdFAST64 PRId64
+# endif
+# if !defined PRIiFAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIiFAST64
+#  define PRIiFAST64 PRIi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined PRIoFAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIoFAST64
+#  define PRIoFAST64 PRIo64
+# endif
+# if !defined PRIuFAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIuFAST64
+#  define PRIuFAST64 PRIu64
+# endif
+# if !defined PRIxFAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIxFAST64
+#  define PRIxFAST64 PRIx64
+# endif
+# if !defined PRIXFAST64 || @PRI_MACROS_BROKEN@
+#  undef PRIXFAST64
+#  define PRIXFAST64 PRIX64
+# endif
+#endif
+
+#if !defined PRIdMAX || @PRI_MACROS_BROKEN@
+# undef PRIdMAX
+# if @INT32_MAX_LT_INTMAX_MAX@
+#  define PRIdMAX PRId64
+# else
+#  define PRIdMAX "ld"
+# endif
+#endif
+#if !defined PRIiMAX || @PRI_MACROS_BROKEN@
+# undef PRIiMAX
+# if @INT32_MAX_LT_INTMAX_MAX@
+#  define PRIiMAX PRIi64
+# else
+#  define PRIiMAX "li"
+# endif
+#endif
+#if !defined PRIoMAX || @PRI_MACROS_BROKEN@
+# undef PRIoMAX
+# if @UINT32_MAX_LT_UINTMAX_MAX@
+#  define PRIoMAX PRIo64
+# else
+#  define PRIoMAX "lo"
+# endif
+#endif
+#if !defined PRIuMAX || @PRI_MACROS_BROKEN@
+# undef PRIuMAX
+# if @UINT32_MAX_LT_UINTMAX_MAX@
+#  define PRIuMAX PRIu64
+# else
+#  define PRIuMAX "lu"
+# endif
+#endif
+#if !defined PRIxMAX || @PRI_MACROS_BROKEN@
+# undef PRIxMAX
+# if @UINT32_MAX_LT_UINTMAX_MAX@
+#  define PRIxMAX PRIx64
+# else
+#  define PRIxMAX "lx"
+# endif
+#endif
+#if !defined PRIXMAX || @PRI_MACROS_BROKEN@
+# undef PRIXMAX
+# if @UINT32_MAX_LT_UINTMAX_MAX@
+#  define PRIXMAX PRIX64
+# else
+#  define PRIXMAX "lX"
+# endif
+#endif
+
+#if !defined PRIdPTR || @PRI_MACROS_BROKEN@
+# undef PRIdPTR
+# ifdef INTPTR_MAX
+#  define PRIdPTR @PRIPTR_PREFIX@ "d"
+# endif
+#endif
+#if !defined PRIiPTR || @PRI_MACROS_BROKEN@
+# undef PRIiPTR
+# ifdef INTPTR_MAX
+#  define PRIiPTR @PRIPTR_PREFIX@ "i"
+# endif
+#endif
+#if !defined PRIoPTR || @PRI_MACROS_BROKEN@
+# undef PRIoPTR
+# ifdef UINTPTR_MAX
+#  define PRIoPTR @PRIPTR_PREFIX@ "o"
+# endif
+#endif
+#if !defined PRIuPTR || @PRI_MACROS_BROKEN@
+# undef PRIuPTR
+# ifdef UINTPTR_MAX
+#  define PRIuPTR @PRIPTR_PREFIX@ "u"
+# endif
+#endif
+#if !defined PRIxPTR || @PRI_MACROS_BROKEN@
+# undef PRIxPTR
+# ifdef UINTPTR_MAX
+#  define PRIxPTR @PRIPTR_PREFIX@ "x"
+# endif
+#endif
+#if !defined PRIXPTR || @PRI_MACROS_BROKEN@
+# undef PRIXPTR
+# ifdef UINTPTR_MAX
+#  define PRIXPTR @PRIPTR_PREFIX@ "X"
+# endif
+#endif
+
+#if !defined SCNd8 || @PRI_MACROS_BROKEN@
+# undef SCNd8
+# ifdef INT8_MAX
+#  define SCNd8 "hhd"
+# endif
+#endif
+#if !defined SCNi8 || @PRI_MACROS_BROKEN@
+# undef SCNi8
+# ifdef INT8_MAX
+#  define SCNi8 "hhi"
+# endif
+#endif
+#if !defined SCNo8 || @PRI_MACROS_BROKEN@
+# undef SCNo8
+# ifdef UINT8_MAX
+#  define SCNo8 "hho"
+# endif
+#endif
+#if !defined SCNu8 || @PRI_MACROS_BROKEN@
+# undef SCNu8
+# ifdef UINT8_MAX
+#  define SCNu8 "hhu"
+# endif
+#endif
+#if !defined SCNx8 || @PRI_MACROS_BROKEN@
+# undef SCNx8
+# ifdef UINT8_MAX
+#  define SCNx8 "hhx"
+# endif
+#endif
+#if !defined SCNd16 || @PRI_MACROS_BROKEN@
+# undef SCNd16
+# ifdef INT16_MAX
+#  define SCNd16 "hd"
+# endif
+#endif
+#if !defined SCNi16 || @PRI_MACROS_BROKEN@
+# undef SCNi16
+# ifdef INT16_MAX
+#  define SCNi16 "hi"
+# endif
+#endif
+#if !defined SCNo16 || @PRI_MACROS_BROKEN@
+# undef SCNo16
+# ifdef UINT16_MAX
+#  define SCNo16 "ho"
+# endif
+#endif
+#if !defined SCNu16 || @PRI_MACROS_BROKEN@
+# undef SCNu16
+# ifdef UINT16_MAX
+#  define SCNu16 "hu"
+# endif
+#endif
+#if !defined SCNx16 || @PRI_MACROS_BROKEN@
+# undef SCNx16
+# ifdef UINT16_MAX
+#  define SCNx16 "hx"
+# endif
+#endif
+#if !defined SCNd32 || @PRI_MACROS_BROKEN@
+# undef SCNd32
+# ifdef INT32_MAX
+#  define SCNd32 "d"
+# endif
+#endif
+#if !defined SCNi32 || @PRI_MACROS_BROKEN@
+# undef SCNi32
+# ifdef INT32_MAX
+#  define SCNi32 "i"
+# endif
+#endif
+#if !defined SCNo32 || @PRI_MACROS_BROKEN@
+# undef SCNo32
+# ifdef UINT32_MAX
+#  define SCNo32 "o"
+# endif
+#endif
+#if !defined SCNu32 || @PRI_MACROS_BROKEN@
+# undef SCNu32
+# ifdef UINT32_MAX
+#  define SCNu32 "u"
+# endif
+#endif
+#if !defined SCNx32 || @PRI_MACROS_BROKEN@
+# undef SCNx32
+# ifdef UINT32_MAX
+#  define SCNx32 "x"
+# endif
+#endif
+#ifdef INT64_MAX
+# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@)
+#  define _SCN64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+#  define _SCN64_PREFIX "I64"
+# elif @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
+#  define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined SCNd64 || @PRI_MACROS_BROKEN@
+#  undef SCNd64
+#  define SCNd64 _SCN64_PREFIX "d"
+# endif
+# if !defined SCNi64 || @PRI_MACROS_BROKEN@
+#  undef SCNi64
+#  define SCNi64 _SCN64_PREFIX "i"
+# endif
+#endif
+#ifdef UINT64_MAX
+# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@)
+#  define _SCNu64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+#  define _SCNu64_PREFIX "I64"
+# elif @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+#  define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined SCNo64 || @PRI_MACROS_BROKEN@
+#  undef SCNo64
+#  define SCNo64 _SCNu64_PREFIX "o"
+# endif
+# if !defined SCNu64 || @PRI_MACROS_BROKEN@
+#  undef SCNu64
+#  define SCNu64 _SCNu64_PREFIX "u"
+# endif
+# if !defined SCNx64 || @PRI_MACROS_BROKEN@
+#  undef SCNx64
+#  define SCNx64 _SCNu64_PREFIX "x"
+# endif
+#endif
+
+#if !defined SCNdLEAST8 || @PRI_MACROS_BROKEN@
+# undef SCNdLEAST8
+# define SCNdLEAST8 "hhd"
+#endif
+#if !defined SCNiLEAST8 || @PRI_MACROS_BROKEN@
+# undef SCNiLEAST8
+# define SCNiLEAST8 "hhi"
+#endif
+#if !defined SCNoLEAST8 || @PRI_MACROS_BROKEN@
+# undef SCNoLEAST8
+# define SCNoLEAST8 "hho"
+#endif
+#if !defined SCNuLEAST8 || @PRI_MACROS_BROKEN@
+# undef SCNuLEAST8
+# define SCNuLEAST8 "hhu"
+#endif
+#if !defined SCNxLEAST8 || @PRI_MACROS_BROKEN@
+# undef SCNxLEAST8
+# define SCNxLEAST8 "hhx"
+#endif
+#if !defined SCNdLEAST16 || @PRI_MACROS_BROKEN@
+# undef SCNdLEAST16
+# define SCNdLEAST16 "hd"
+#endif
+#if !defined SCNiLEAST16 || @PRI_MACROS_BROKEN@
+# undef SCNiLEAST16
+# define SCNiLEAST16 "hi"
+#endif
+#if !defined SCNoLEAST16 || @PRI_MACROS_BROKEN@
+# undef SCNoLEAST16
+# define SCNoLEAST16 "ho"
+#endif
+#if !defined SCNuLEAST16 || @PRI_MACROS_BROKEN@
+# undef SCNuLEAST16
+# define SCNuLEAST16 "hu"
+#endif
+#if !defined SCNxLEAST16 || @PRI_MACROS_BROKEN@
+# undef SCNxLEAST16
+# define SCNxLEAST16 "hx"
+#endif
+#if !defined SCNdLEAST32 || @PRI_MACROS_BROKEN@
+# undef SCNdLEAST32
+# define SCNdLEAST32 "d"
+#endif
+#if !defined SCNiLEAST32 || @PRI_MACROS_BROKEN@
+# undef SCNiLEAST32
+# define SCNiLEAST32 "i"
+#endif
+#if !defined SCNoLEAST32 || @PRI_MACROS_BROKEN@
+# undef SCNoLEAST32
+# define SCNoLEAST32 "o"
+#endif
+#if !defined SCNuLEAST32 || @PRI_MACROS_BROKEN@
+# undef SCNuLEAST32
+# define SCNuLEAST32 "u"
+#endif
+#if !defined SCNxLEAST32 || @PRI_MACROS_BROKEN@
+# undef SCNxLEAST32
+# define SCNxLEAST32 "x"
+#endif
+#ifdef INT64_MAX
+# if !defined SCNdLEAST64 || @PRI_MACROS_BROKEN@
+#  undef SCNdLEAST64
+#  define SCNdLEAST64 SCNd64
+# endif
+# if !defined SCNiLEAST64 || @PRI_MACROS_BROKEN@
+#  undef SCNiLEAST64
+#  define SCNiLEAST64 SCNi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined SCNoLEAST64 || @PRI_MACROS_BROKEN@
+#  undef SCNoLEAST64
+#  define SCNoLEAST64 SCNo64
+# endif
+# if !defined SCNuLEAST64 || @PRI_MACROS_BROKEN@
+#  undef SCNuLEAST64
+#  define SCNuLEAST64 SCNu64
+# endif
+# if !defined SCNxLEAST64 || @PRI_MACROS_BROKEN@
+#  undef SCNxLEAST64
+#  define SCNxLEAST64 SCNx64
+# endif
+#endif
+
+#if !defined SCNdFAST8 || @PRI_MACROS_BROKEN@
+# undef SCNdFAST8
+# if INT_FAST8_MAX > INT32_MAX
+#  define SCNdFAST8 SCNd64
+# elif INT_FAST8_MAX == 0x7fff
+#  define SCNdFAST8 "hd"
+# elif INT_FAST8_MAX == 0x7f
+#  define SCNdFAST8 "hhd"
+# else
+#  define SCNdFAST8 "d"
+# endif
+#endif
+#if !defined SCNiFAST8 || @PRI_MACROS_BROKEN@
+# undef SCNiFAST8
+# if INT_FAST8_MAX > INT32_MAX
+#  define SCNiFAST8 SCNi64
+# elif INT_FAST8_MAX == 0x7fff
+#  define SCNiFAST8 "hi"
+# elif INT_FAST8_MAX == 0x7f
+#  define SCNiFAST8 "hhi"
+# else
+#  define SCNiFAST8 "i"
+# endif
+#endif
+#if !defined SCNoFAST8 || @PRI_MACROS_BROKEN@
+# undef SCNoFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define SCNoFAST8 SCNo64
+# elif UINT_FAST8_MAX == 0xffff
+#  define SCNoFAST8 "ho"
+# elif UINT_FAST8_MAX == 0xff
+#  define SCNoFAST8 "hho"
+# else
+#  define SCNoFAST8 "o"
+# endif
+#endif
+#if !defined SCNuFAST8 || @PRI_MACROS_BROKEN@
+# undef SCNuFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define SCNuFAST8 SCNu64
+# elif UINT_FAST8_MAX == 0xffff
+#  define SCNuFAST8 "hu"
+# elif UINT_FAST8_MAX == 0xff
+#  define SCNuFAST8 "hhu"
+# else
+#  define SCNuFAST8 "u"
+# endif
+#endif
+#if !defined SCNxFAST8 || @PRI_MACROS_BROKEN@
+# undef SCNxFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+#  define SCNxFAST8 SCNx64
+# elif UINT_FAST8_MAX == 0xffff
+#  define SCNxFAST8 "hx"
+# elif UINT_FAST8_MAX == 0xff
+#  define SCNxFAST8 "hhx"
+# else
+#  define SCNxFAST8 "x"
+# endif
+#endif
+#if !defined SCNdFAST16 || @PRI_MACROS_BROKEN@
+# undef SCNdFAST16
+# if INT_FAST16_MAX > INT32_MAX
+#  define SCNdFAST16 SCNd64
+# elif INT_FAST16_MAX == 0x7fff
+#  define SCNdFAST16 "hd"
+# else
+#  define SCNdFAST16 "d"
+# endif
+#endif
+#if !defined SCNiFAST16 || @PRI_MACROS_BROKEN@
+# undef SCNiFAST16
+# if INT_FAST16_MAX > INT32_MAX
+#  define SCNiFAST16 SCNi64
+# elif INT_FAST16_MAX == 0x7fff
+#  define SCNiFAST16 "hi"
+# else
+#  define SCNiFAST16 "i"
+# endif
+#endif
+#if !defined SCNoFAST16 || @PRI_MACROS_BROKEN@
+# undef SCNoFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define SCNoFAST16 SCNo64
+# elif UINT_FAST16_MAX == 0xffff
+#  define SCNoFAST16 "ho"
+# else
+#  define SCNoFAST16 "o"
+# endif
+#endif
+#if !defined SCNuFAST16 || @PRI_MACROS_BROKEN@
+# undef SCNuFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define SCNuFAST16 SCNu64
+# elif UINT_FAST16_MAX == 0xffff
+#  define SCNuFAST16 "hu"
+# else
+#  define SCNuFAST16 "u"
+# endif
+#endif
+#if !defined SCNxFAST16 || @PRI_MACROS_BROKEN@
+# undef SCNxFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+#  define SCNxFAST16 SCNx64
+# elif UINT_FAST16_MAX == 0xffff
+#  define SCNxFAST16 "hx"
+# else
+#  define SCNxFAST16 "x"
+# endif
+#endif
+#if !defined SCNdFAST32 || @PRI_MACROS_BROKEN@
+# undef SCNdFAST32
+# if INT_FAST32_MAX > INT32_MAX
+#  define SCNdFAST32 SCNd64
+# else
+#  define SCNdFAST32 "d"
+# endif
+#endif
+#if !defined SCNiFAST32 || @PRI_MACROS_BROKEN@
+# undef SCNiFAST32
+# if INT_FAST32_MAX > INT32_MAX
+#  define SCNiFAST32 SCNi64
+# else
+#  define SCNiFAST32 "i"
+# endif
+#endif
+#if !defined SCNoFAST32 || @PRI_MACROS_BROKEN@
+# undef SCNoFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define SCNoFAST32 SCNo64
+# else
+#  define SCNoFAST32 "o"
+# endif
+#endif
+#if !defined SCNuFAST32 || @PRI_MACROS_BROKEN@
+# undef SCNuFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define SCNuFAST32 SCNu64
+# else
+#  define SCNuFAST32 "u"
+# endif
+#endif
+#if !defined SCNxFAST32 || @PRI_MACROS_BROKEN@
+# undef SCNxFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+#  define SCNxFAST32 SCNx64
+# else
+#  define SCNxFAST32 "x"
+# endif
+#endif
+#ifdef INT64_MAX
+# if !defined SCNdFAST64 || @PRI_MACROS_BROKEN@
+#  undef SCNdFAST64
+#  define SCNdFAST64 SCNd64
+# endif
+# if !defined SCNiFAST64 || @PRI_MACROS_BROKEN@
+#  undef SCNiFAST64
+#  define SCNiFAST64 SCNi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined SCNoFAST64 || @PRI_MACROS_BROKEN@
+#  undef SCNoFAST64
+#  define SCNoFAST64 SCNo64
+# endif
+# if !defined SCNuFAST64 || @PRI_MACROS_BROKEN@
+#  undef SCNuFAST64
+#  define SCNuFAST64 SCNu64
+# endif
+# if !defined SCNxFAST64 || @PRI_MACROS_BROKEN@
+#  undef SCNxFAST64
+#  define SCNxFAST64 SCNx64
+# endif
+#endif
+
+#if !defined SCNdMAX || @PRI_MACROS_BROKEN@
+# undef SCNdMAX
+# if @INT32_MAX_LT_INTMAX_MAX@
+#  define SCNdMAX SCNd64
+# else
+#  define SCNdMAX "ld"
+# endif
+#endif
+#if !defined SCNiMAX || @PRI_MACROS_BROKEN@
+# undef SCNiMAX
+# if @INT32_MAX_LT_INTMAX_MAX@
+#  define SCNiMAX SCNi64
+# else
+#  define SCNiMAX "li"
+# endif
+#endif
+#if !defined SCNoMAX || @PRI_MACROS_BROKEN@
+# undef SCNoMAX
+# if @UINT32_MAX_LT_UINTMAX_MAX@
+#  define SCNoMAX SCNo64
+# else
+#  define SCNoMAX "lo"
+# endif
+#endif
+#if !defined SCNuMAX || @PRI_MACROS_BROKEN@
+# undef SCNuMAX
+# if @UINT32_MAX_LT_UINTMAX_MAX@
+#  define SCNuMAX SCNu64
+# else
+#  define SCNuMAX "lu"
+# endif
+#endif
+#if !defined SCNxMAX || @PRI_MACROS_BROKEN@
+# undef SCNxMAX
+# if @UINT32_MAX_LT_UINTMAX_MAX@
+#  define SCNxMAX SCNx64
+# else
+#  define SCNxMAX "lx"
+# endif
+#endif
+
+#if !defined SCNdPTR || @PRI_MACROS_BROKEN@
+# undef SCNdPTR
+# ifdef INTPTR_MAX
+#  define SCNdPTR @PRIPTR_PREFIX@ "d"
+# endif
+#endif
+#if !defined SCNiPTR || @PRI_MACROS_BROKEN@
+# undef SCNiPTR
+# ifdef INTPTR_MAX
+#  define SCNiPTR @PRIPTR_PREFIX@ "i"
+# endif
+#endif
+#if !defined SCNoPTR || @PRI_MACROS_BROKEN@
+# undef SCNoPTR
+# ifdef UINTPTR_MAX
+#  define SCNoPTR @PRIPTR_PREFIX@ "o"
+# endif
+#endif
+#if !defined SCNuPTR || @PRI_MACROS_BROKEN@
+# undef SCNuPTR
+# ifdef UINTPTR_MAX
+#  define SCNuPTR @PRIPTR_PREFIX@ "u"
+# endif
+#endif
+#if !defined SCNxPTR || @PRI_MACROS_BROKEN@
+# undef SCNxPTR
+# ifdef UINTPTR_MAX
+#  define SCNxPTR @PRIPTR_PREFIX@ "x"
+# endif
+#endif
+
+/* 7.8.2 Functions for greatest-width integer types */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if @GNULIB_IMAXABS@
+# if !@HAVE_DECL_IMAXABS@
+extern intmax_t imaxabs (intmax_t);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef imaxabs
+# if HAVE_RAW_DECL_IMAXABS
+_GL_WARN_ON_USE (imaxabs, "imaxabs is unportable - "
+                 "use gnulib module imaxabs for portability");
+# endif
+#endif
+
+#if @GNULIB_IMAXDIV@
+# if !@HAVE_DECL_IMAXDIV@
+#  if !GNULIB_defined_imaxdiv_t
+typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t;
+#   define GNULIB_defined_imaxdiv_t 1
+#  endif
+extern imaxdiv_t imaxdiv (intmax_t, intmax_t);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef imaxdiv
+# if HAVE_RAW_DECL_IMAXDIV
+_GL_WARN_ON_USE (imaxdiv, "imaxdiv is unportable - "
+                 "use gnulib module imaxdiv for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOIMAX@
+# if @REPLACE_STRTOIMAX@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strtoimax
+#   define strtoimax rpl_strtoimax
+#  endif
+_GL_FUNCDECL_RPL (strtoimax, intmax_t,
+                  (const char *, char **, int) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtoimax, intmax_t, (const char *, char **, int));
+# else
+#  if !@HAVE_DECL_STRTOIMAX@
+#   undef strtoimax
+_GL_FUNCDECL_SYS (strtoimax, intmax_t,
+                  (const char *, char **, int) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strtoimax, intmax_t, (const char *, char **, int));
+# endif
+_GL_CXXALIASWARN (strtoimax);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoimax
+# if HAVE_RAW_DECL_STRTOIMAX
+_GL_WARN_ON_USE (strtoimax, "strtoimax is unportable - "
+                 "use gnulib module strtoimax for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOUMAX@
+# if !@HAVE_DECL_STRTOUMAX@
+#  undef strtoumax
+_GL_FUNCDECL_SYS (strtoumax, uintmax_t,
+                  (const char *, char **, int) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoumax, uintmax_t, (const char *, char **, int));
+_GL_CXXALIASWARN (strtoumax);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoumax
+# if HAVE_RAW_DECL_STRTOUMAX
+_GL_WARN_ON_USE (strtoumax, "strtoumax is unportable - "
+                 "use gnulib module strtoumax for portability");
+# endif
+#endif
+
+/* Don't bother defining or declaring wcstoimax and wcstoumax, since
+   wide-character functions like this are hardly ever useful.  */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined INTTYPES_H && !defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H */
diff --git a/gdb/gnulib/import/localcharset.c b/gdb/gnulib/import/localcharset.c
new file mode 100644
index 0000000..b5ee2d6
--- /dev/null
+++ b/gdb/gnulib/import/localcharset.c
@@ -0,0 +1,546 @@
+/* Determine a canonical name for the current locale's character encoding.
+
+   Copyright (C) 2000-2006, 2008-2012 Free Software Foundation, Inc.
+
+   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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno at clisp.org>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "localcharset.h"
+
+#include <fcntl.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET
+# define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */
+#endif
+
+#if defined _WIN32 || defined __WIN32__
+# define WINDOWS_NATIVE
+#endif
+
+#if defined __EMX__
+/* Assume EMX program runs on OS/2, even if compiled under DOS.  */
+# ifndef OS2
+#  define OS2
+# endif
+#endif
+
+#if !defined WINDOWS_NATIVE
+# include <unistd.h>
+# if HAVE_LANGINFO_CODESET
+#  include <langinfo.h>
+# else
+#  if 0 /* see comment below */
+#   include <locale.h>
+#  endif
+# endif
+# ifdef __CYGWIN__
+#  define WIN32_LEAN_AND_MEAN
+#  include <windows.h>
+# endif
+#elif defined WINDOWS_NATIVE
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+#if defined OS2
+# define INCL_DOS
+# include <os2.h>
+#endif
+
+#if ENABLE_RELOCATABLE
+# include "relocatable.h"
+#else
+# define relocate(pathname) (pathname)
+#endif
+
+/* Get LIBDIR.  */
+#ifndef LIBDIR
+# include "configmake.h"
+#endif
+
+/* Define O_NOFOLLOW to 0 on platforms where it does not exist.  */
+#ifndef O_NOFOLLOW
+# define O_NOFOLLOW 0
+#endif
+
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+  /* Native Windows, Cygwin, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+#endif
+
+#ifndef DIRECTORY_SEPARATOR
+# define DIRECTORY_SEPARATOR '/'
+#endif
+
+#ifndef ISSLASH
+# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
+#endif
+
+#if HAVE_DECL_GETC_UNLOCKED
+# undef getc
+# define getc getc_unlocked
+#endif
+
+/* The following static variable is declared 'volatile' to avoid a
+   possible multithread problem in the function get_charset_aliases. If we
+   are running in a threaded environment, and if two threads initialize
+   'charset_aliases' simultaneously, both will produce the same value,
+   and everything will be ok if the two assignments to 'charset_aliases'
+   are atomic. But I don't know what will happen if the two assignments mix.  */
+#if __STDC__ != 1
+# define volatile /* empty */
+#endif
+/* Pointer to the contents of the charset.alias file, if it has already been
+   read, else NULL.  Its format is:
+   ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0'  */
+static const char * volatile charset_aliases;
+
+/* Return a pointer to the contents of the charset.alias file.  */
+static const char *
+get_charset_aliases (void)
+{
+  const char *cp;
+
+  cp = charset_aliases;
+  if (cp == NULL)
+    {
+#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__)
+      const char *dir;
+      const char *base = "charset.alias";
+      char *file_name;
+
+      /* Make it possible to override the charset.alias location.  This is
+         necessary for running the testsuite before "make install".  */
+      dir = getenv ("CHARSETALIASDIR");
+      if (dir == NULL || dir[0] == '\0')
+        dir = relocate (LIBDIR);
+
+      /* Concatenate dir and base into freshly allocated file_name.  */
+      {
+        size_t dir_len = strlen (dir);
+        size_t base_len = strlen (base);
+        int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
+        file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
+        if (file_name != NULL)
+          {
+            memcpy (file_name, dir, dir_len);
+            if (add_slash)
+              file_name[dir_len] = DIRECTORY_SEPARATOR;
+            memcpy (file_name + dir_len + add_slash, base, base_len + 1);
+          }
+      }
+
+      if (file_name == NULL)
+        /* Out of memory.  Treat the file as empty.  */
+        cp = "";
+      else
+        {
+          int fd;
+
+          /* Open the file.  Reject symbolic links on platforms that support
+             O_NOFOLLOW.  This is a security feature.  Without it, an attacker
+             could retrieve parts of the contents (namely, the tail of the
+             first line that starts with "* ") of an arbitrary file by placing
+             a symbolic link to that file under the name "charset.alias" in
+             some writable directory and defining the environment variable
+             CHARSETALIASDIR to point to that directory.  */
+          fd = open (file_name,
+                     O_RDONLY | (HAVE_WORKING_O_NOFOLLOW ? O_NOFOLLOW : 0));
+          if (fd < 0)
+            /* File not found.  Treat it as empty.  */
+            cp = "";
+          else
+            {
+              FILE *fp;
+
+              fp = fdopen (fd, "r");
+              if (fp == NULL)
+                {
+                  /* Out of memory.  Treat the file as empty.  */
+                  close (fd);
+                  cp = "";
+                }
+              else
+                {
+                  /* Parse the file's contents.  */
+                  char *res_ptr = NULL;
+                  size_t res_size = 0;
+
+                  for (;;)
+                    {
+                      int c;
+                      char buf1[50+1];
+                      char buf2[50+1];
+                      size_t l1, l2;
+                      char *old_res_ptr;
+
+                      c = getc (fp);
+                      if (c == EOF)
+                        break;
+                      if (c == '\n' || c == ' ' || c == '\t')
+                        continue;
+                      if (c == '#')
+                        {
+                          /* Skip comment, to end of line.  */
+                          do
+                            c = getc (fp);
+                          while (!(c == EOF || c == '\n'));
+                          if (c == EOF)
+                            break;
+                          continue;
+                        }
+                      ungetc (c, fp);
+                      if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
+                        break;
+                      l1 = strlen (buf1);
+                      l2 = strlen (buf2);
+                      old_res_ptr = res_ptr;
+                      if (res_size == 0)
+                        {
+                          res_size = l1 + 1 + l2 + 1;
+                          res_ptr = (char *) malloc (res_size + 1);
+                        }
+                      else
+                        {
+                          res_size += l1 + 1 + l2 + 1;
+                          res_ptr = (char *) realloc (res_ptr, res_size + 1);
+                        }
+                      if (res_ptr == NULL)
+                        {
+                          /* Out of memory. */
+                          res_size = 0;
+                          free (old_res_ptr);
+                          break;
+                        }
+                      strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
+                      strcpy (res_ptr + res_size - (l2 + 1), buf2);
+                    }
+                  fclose (fp);
+                  if (res_size == 0)
+                    cp = "";
+                  else
+                    {
+                      *(res_ptr + res_size) = '\0';
+                      cp = res_ptr;
+                    }
+                }
+            }
+
+          free (file_name);
+        }
+
+#else
+
+# if defined DARWIN7
+      /* To avoid the trouble of installing a file that is shared by many
+         GNU packages -- many packaging systems have problems with this --,
+         simply inline the aliases here.  */
+      cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
+           "ISO8859-2" "\0" "ISO-8859-2" "\0"
+           "ISO8859-4" "\0" "ISO-8859-4" "\0"
+           "ISO8859-5" "\0" "ISO-8859-5" "\0"
+           "ISO8859-7" "\0" "ISO-8859-7" "\0"
+           "ISO8859-9" "\0" "ISO-8859-9" "\0"
+           "ISO8859-13" "\0" "ISO-8859-13" "\0"
+           "ISO8859-15" "\0" "ISO-8859-15" "\0"
+           "KOI8-R" "\0" "KOI8-R" "\0"
+           "KOI8-U" "\0" "KOI8-U" "\0"
+           "CP866" "\0" "CP866" "\0"
+           "CP949" "\0" "CP949" "\0"
+           "CP1131" "\0" "CP1131" "\0"
+           "CP1251" "\0" "CP1251" "\0"
+           "eucCN" "\0" "GB2312" "\0"
+           "GB2312" "\0" "GB2312" "\0"
+           "eucJP" "\0" "EUC-JP" "\0"
+           "eucKR" "\0" "EUC-KR" "\0"
+           "Big5" "\0" "BIG5" "\0"
+           "Big5HKSCS" "\0" "BIG5-HKSCS" "\0"
+           "GBK" "\0" "GBK" "\0"
+           "GB18030" "\0" "GB18030" "\0"
+           "SJIS" "\0" "SHIFT_JIS" "\0"
+           "ARMSCII-8" "\0" "ARMSCII-8" "\0"
+           "PT154" "\0" "PT154" "\0"
+         /*"ISCII-DEV" "\0" "?" "\0"*/
+           "*" "\0" "UTF-8" "\0";
+# endif
+
+# if defined VMS
+      /* To avoid the troubles of an extra file charset.alias_vms in the
+         sources of many GNU packages, simply inline the aliases here.  */
+      /* The list of encodings is taken from the OpenVMS 7.3-1 documentation
+         "Compaq C Run-Time Library Reference Manual for OpenVMS systems"
+         section 10.7 "Handling Different Character Sets".  */
+      cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
+           "ISO8859-2" "\0" "ISO-8859-2" "\0"
+           "ISO8859-5" "\0" "ISO-8859-5" "\0"
+           "ISO8859-7" "\0" "ISO-8859-7" "\0"
+           "ISO8859-8" "\0" "ISO-8859-8" "\0"
+           "ISO8859-9" "\0" "ISO-8859-9" "\0"
+           /* Japanese */
+           "eucJP" "\0" "EUC-JP" "\0"
+           "SJIS" "\0" "SHIFT_JIS" "\0"
+           "DECKANJI" "\0" "DEC-KANJI" "\0"
+           "SDECKANJI" "\0" "EUC-JP" "\0"
+           /* Chinese */
+           "eucTW" "\0" "EUC-TW" "\0"
+           "DECHANYU" "\0" "DEC-HANYU" "\0"
+           "DECHANZI" "\0" "GB2312" "\0"
+           /* Korean */
+           "DECKOREAN" "\0" "EUC-KR" "\0";
+# endif
+
+# if defined WINDOWS_NATIVE || defined __CYGWIN__
+      /* To avoid the troubles of installing a separate file in the same
+         directory as the DLL and of retrieving the DLL's directory at
+         runtime, simply inline the aliases here.  */
+
+      cp = "CP936" "\0" "GBK" "\0"
+           "CP1361" "\0" "JOHAB" "\0"
+           "CP20127" "\0" "ASCII" "\0"
+           "CP20866" "\0" "KOI8-R" "\0"
+           "CP20936" "\0" "GB2312" "\0"
+           "CP21866" "\0" "KOI8-RU" "\0"
+           "CP28591" "\0" "ISO-8859-1" "\0"
+           "CP28592" "\0" "ISO-8859-2" "\0"
+           "CP28593" "\0" "ISO-8859-3" "\0"
+           "CP28594" "\0" "ISO-8859-4" "\0"
+           "CP28595" "\0" "ISO-8859-5" "\0"
+           "CP28596" "\0" "ISO-8859-6" "\0"
+           "CP28597" "\0" "ISO-8859-7" "\0"
+           "CP28598" "\0" "ISO-8859-8" "\0"
+           "CP28599" "\0" "ISO-8859-9" "\0"
+           "CP28605" "\0" "ISO-8859-15" "\0"
+           "CP38598" "\0" "ISO-8859-8" "\0"
+           "CP51932" "\0" "EUC-JP" "\0"
+           "CP51936" "\0" "GB2312" "\0"
+           "CP51949" "\0" "EUC-KR" "\0"
+           "CP51950" "\0" "EUC-TW" "\0"
+           "CP54936" "\0" "GB18030" "\0"
+           "CP65001" "\0" "UTF-8" "\0";
+# endif
+#endif
+
+      charset_aliases = cp;
+    }
+
+  return cp;
+}
+
+/* Determine the current locale's character encoding, and canonicalize it
+   into one of the canonical names listed in config.charset.
+   The result must not be freed; it is statically allocated.
+   If the canonical name cannot be determined, the result is a non-canonical
+   name.  */
+
+#ifdef STATIC
+STATIC
+#endif
+const char *
+locale_charset (void)
+{
+  const char *codeset;
+  const char *aliases;
+
+#if !(defined WINDOWS_NATIVE || defined OS2)
+
+# if HAVE_LANGINFO_CODESET
+
+  /* Most systems support nl_langinfo (CODESET) nowadays.  */
+  codeset = nl_langinfo (CODESET);
+
+#  ifdef __CYGWIN__
+  /* Cygwin < 1.7 does not have locales.  nl_langinfo (CODESET) always
+     returns "US-ASCII".  Return the suffix of the locale name from the
+     environment variables (if present) or the codepage as a number.  */
+  if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0)
+    {
+      const char *locale;
+      static char buf[2 + 10 + 1];
+
+      locale = getenv ("LC_ALL");
+      if (locale == NULL || locale[0] == '\0')
+        {
+          locale = getenv ("LC_CTYPE");
+          if (locale == NULL || locale[0] == '\0')
+            locale = getenv ("LANG");
+        }
+      if (locale != NULL && locale[0] != '\0')
+        {
+          /* If the locale name contains an encoding after the dot, return
+             it.  */
+          const char *dot = strchr (locale, '.');
+
+          if (dot != NULL)
+            {
+              const char *modifier;
+
+              dot++;
+              /* Look for the possible @... trailer and remove it, if any.  */
+              modifier = strchr (dot, '@');
+              if (modifier == NULL)
+                return dot;
+              if (modifier - dot < sizeof (buf))
+                {
+                  memcpy (buf, dot, modifier - dot);
+                  buf [modifier - dot] = '\0';
+                  return buf;
+                }
+            }
+        }
+
+      /* The Windows API has a function returning the locale's codepage as a
+         number: GetACP().  This encoding is used by Cygwin, unless the user
+         has set the environment variable CYGWIN=codepage:oem (which very few
+         people do).
+         Output directed to console windows needs to be converted (to
+         GetOEMCP() if the console is using a raster font, or to
+         GetConsoleOutputCP() if it is using a TrueType font).  Cygwin does
+         this conversion transparently (see winsup/cygwin/fhandler_console.cc),
+         converting to GetConsoleOutputCP().  This leads to correct results,
+         except when SetConsoleOutputCP has been called and a raster font is
+         in use.  */
+      sprintf (buf, "CP%u", GetACP ());
+      codeset = buf;
+    }
+#  endif
+
+# else
+
+  /* On old systems which lack it, use setlocale or getenv.  */
+  const char *locale = NULL;
+
+  /* But most old systems don't have a complete set of locales.  Some
+     (like SunOS 4 or DJGPP) have only the C locale.  Therefore we don't
+     use setlocale here; it would return "C" when it doesn't support the
+     locale name the user has set.  */
+#  if 0
+  locale = setlocale (LC_CTYPE, NULL);
+#  endif
+  if (locale == NULL || locale[0] == '\0')
+    {
+      locale = getenv ("LC_ALL");
+      if (locale == NULL || locale[0] == '\0')
+        {
+          locale = getenv ("LC_CTYPE");
+          if (locale == NULL || locale[0] == '\0')
+            locale = getenv ("LANG");
+        }
+    }
+
+  /* On some old systems, one used to set locale = "iso8859_1". On others,
+     you set it to "language_COUNTRY.charset". In any case, we resolve it
+     through the charset.alias file.  */
+  codeset = locale;
+
+# endif
+
+#elif defined WINDOWS_NATIVE
+
+  static char buf[2 + 10 + 1];
+
+  /* The Windows API has a function returning the locale's codepage as a
+     number: GetACP().
+     When the output goes to a console window, it needs to be provided in
+     GetOEMCP() encoding if the console is using a raster font, or in
+     GetConsoleOutputCP() encoding if it is using a TrueType font.
+     But in GUI programs and for output sent to files and pipes, GetACP()
+     encoding is the best bet.  */
+  sprintf (buf, "CP%u", GetACP ());
+  codeset = buf;
+
+#elif defined OS2
+
+  const char *locale;
+  static char buf[2 + 10 + 1];
+  ULONG cp[3];
+  ULONG cplen;
+
+  /* Allow user to override the codeset, as set in the operating system,
+     with standard language environment variables.  */
+  locale = getenv ("LC_ALL");
+  if (locale == NULL || locale[0] == '\0')
+    {
+      locale = getenv ("LC_CTYPE");
+      if (locale == NULL || locale[0] == '\0')
+        locale = getenv ("LANG");
+    }
+  if (locale != NULL && locale[0] != '\0')
+    {
+      /* If the locale name contains an encoding after the dot, return it.  */
+      const char *dot = strchr (locale, '.');
+
+      if (dot != NULL)
+        {
+          const char *modifier;
+
+          dot++;
+          /* Look for the possible @... trailer and remove it, if any.  */
+          modifier = strchr (dot, '@');
+          if (modifier == NULL)
+            return dot;
+          if (modifier - dot < sizeof (buf))
+            {
+              memcpy (buf, dot, modifier - dot);
+              buf [modifier - dot] = '\0';
+              return buf;
+            }
+        }
+
+      /* Resolve through the charset.alias file.  */
+      codeset = locale;
+    }
+  else
+    {
+      /* OS/2 has a function returning the locale's codepage as a number.  */
+      if (DosQueryCp (sizeof (cp), cp, &cplen))
+        codeset = "";
+      else
+        {
+          sprintf (buf, "CP%u", cp[0]);
+          codeset = buf;
+        }
+    }
+
+#endif
+
+  if (codeset == NULL)
+    /* The canonical name cannot be determined.  */
+    codeset = "";
+
+  /* Resolve alias. */
+  for (aliases = get_charset_aliases ();
+       *aliases != '\0';
+       aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
+    if (strcmp (codeset, aliases) == 0
+        || (aliases[0] == '*' && aliases[1] == '\0'))
+      {
+        codeset = aliases + strlen (aliases) + 1;
+        break;
+      }
+
+  /* Don't return an empty string.  GNU libc and GNU libiconv interpret
+     the empty string as denoting "the locale's character encoding",
+     thus GNU libiconv would call this function a second time.  */
+  if (codeset[0] == '\0')
+    codeset = "ASCII";
+
+  return codeset;
+}
diff --git a/gdb/gnulib/import/localcharset.h b/gdb/gnulib/import/localcharset.h
new file mode 100644
index 0000000..39dc593
--- /dev/null
+++ b/gdb/gnulib/import/localcharset.h
@@ -0,0 +1,40 @@
+/* Determine a canonical name for the current locale's character encoding.
+   Copyright (C) 2000-2003, 2009-2012 Free Software Foundation, Inc.
+   This file is part of the GNU CHARSET 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _LOCALCHARSET_H
+#define _LOCALCHARSET_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Determine the current locale's character encoding, and canonicalize it
+   into one of the canonical names listed in config.charset.
+   The result must not be freed; it is statically allocated.
+   If the canonical name cannot be determined, the result is a non-canonical
+   name.  */
+extern const char * locale_charset (void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _LOCALCHARSET_H */
diff --git a/gdb/gnulib/import/m4/00gnulib.m4 b/gdb/gnulib/import/m4/00gnulib.m4
new file mode 100644
index 0000000..d978cb8
--- /dev/null
+++ b/gdb/gnulib/import/m4/00gnulib.m4
@@ -0,0 +1,30 @@
+# 00gnulib.m4 serial 2
+dnl Copyright (C) 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This file must be named something that sorts before all other
+dnl gnulib-provided .m4 files.  It is needed until such time as we can
+dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE semantics.
+
+# AC_DEFUN_ONCE([NAME], VALUE)
+# ----------------------------
+# Define NAME to expand to VALUE on the first use (whether by direct
+# expansion, or by AC_REQUIRE), and to nothing on all subsequent uses.
+# Avoid bugs in AC_REQUIRE in Autoconf 2.63 and earlier.  This
+# definition is slower than the version in Autoconf 2.64, because it
+# can only use interfaces that existed since 2.59; but it achieves the
+# same effect.  Quoting is necessary to avoid confusing Automake.
+m4_version_prereq([2.63.263], [],
+[m4_define([AC][_DEFUN_ONCE],
+  [AC][_DEFUN([$1],
+    [AC_REQUIRE([_gl_DEFUN_ONCE([$1])],
+      [m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl
+[AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])])
+
+# gl_00GNULIB
+# -----------
+# Witness macro that this file has been included.  Needed to force
+# Automake to include this file prior to all other gnulib .m4 files.
+AC_DEFUN([gl_00GNULIB])
diff --git a/gdb/gnulib/import/m4/alloca.m4 b/gdb/gnulib/import/m4/alloca.m4
new file mode 100644
index 0000000..656924b
--- /dev/null
+++ b/gdb/gnulib/import/m4/alloca.m4
@@ -0,0 +1,121 @@
+# alloca.m4 serial 14
+dnl Copyright (C) 2002-2004, 2006-2007, 2009-2012 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_ALLOCA],
+[
+  AC_REQUIRE([AC_FUNC_ALLOCA])
+  if test $ac_cv_func_alloca_works = no; then
+    gl_PREREQ_ALLOCA
+  fi
+
+  # Define an additional variable used in the Makefile substitution.
+  if test $ac_cv_working_alloca_h = yes; then
+    AC_CACHE_CHECK([for alloca as a compiler built-in], [gl_cv_rpl_alloca], [
+      AC_EGREP_CPP([Need own alloca], [
+#if defined __GNUC__ || defined _AIX || defined _MSC_VER
+        Need own alloca
+#endif
+        ], [gl_cv_rpl_alloca=yes], [gl_cv_rpl_alloca=no])
+    ])
+    if test $gl_cv_rpl_alloca = yes; then
+      dnl OK, alloca can be implemented through a compiler built-in.
+      AC_DEFINE([HAVE_ALLOCA], [1],
+        [Define to 1 if you have 'alloca' after including <alloca.h>,
+         a header that may be supplied by this distribution.])
+      ALLOCA_H=alloca.h
+    else
+      dnl alloca exists as a library function, i.e. it is slow and probably
+      dnl a memory leak. Don't define HAVE_ALLOCA in this case.
+      ALLOCA_H=
+    fi
+  else
+    ALLOCA_H=alloca.h
+  fi
+  AC_SUBST([ALLOCA_H])
+  AM_CONDITIONAL([GL_GENERATE_ALLOCA_H], [test -n "$ALLOCA_H"])
+])
+
+# Prerequisites of lib/alloca.c.
+# STACK_DIRECTION is already handled by AC_FUNC_ALLOCA.
+AC_DEFUN([gl_PREREQ_ALLOCA], [:])
+
+# This works around a bug in autoconf <= 2.68.
+# See <http://lists.gnu.org/archive/html/bug-gnulib/2011-06/msg00277.html>.
+
+m4_version_prereq([2.69], [] ,[
+
+# This is taken from the following Autoconf patch:
+# http://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=6cd9f12520b0d6f76d3230d7565feba1ecf29497
+
+# _AC_LIBOBJ_ALLOCA
+# -----------------
+# Set up the LIBOBJ replacement of 'alloca'.  Well, not exactly
+# AC_LIBOBJ since we actually set the output variable 'ALLOCA'.
+# Nevertheless, for Automake, AC_LIBSOURCES it.
+m4_define([_AC_LIBOBJ_ALLOCA],
+[# The SVR3 libPW and SVR4 libucb both contain incompatible functions
+# that cause trouble.  Some versions do not even contain alloca or
+# contain a buggy version.  If you still want to use their alloca,
+# use ar to extract alloca.o from them instead of compiling alloca.c.
+AC_LIBSOURCES(alloca.c)
+AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext])dnl
+AC_DEFINE(C_ALLOCA, 1, [Define to 1 if using 'alloca.c'.])
+
+AC_CACHE_CHECK(whether 'alloca.c' needs Cray hooks, ac_cv_os_cray,
+[AC_EGREP_CPP(webecray,
+[#if defined CRAY && ! defined CRAY2
+webecray
+#else
+wenotbecray
+#endif
+], ac_cv_os_cray=yes, ac_cv_os_cray=no)])
+if test $ac_cv_os_cray = yes; then
+  for ac_func in _getb67 GETB67 getb67; do
+    AC_CHECK_FUNC($ac_func,
+                  [AC_DEFINE_UNQUOTED(CRAY_STACKSEG_END, $ac_func,
+                                      [Define to one of '_getb67', 'GETB67',
+                                       'getb67' for Cray-2 and Cray-YMP
+                                       systems. This function is required for
+                                       'alloca.c' support on those systems.])
+    break])
+  done
+fi
+
+AC_CACHE_CHECK([stack direction for C alloca],
+               [ac_cv_c_stack_direction],
+[AC_RUN_IFELSE([AC_LANG_SOURCE(
+[AC_INCLUDES_DEFAULT
+int
+find_stack_direction (int *addr, int depth)
+{
+  int dir, dummy = 0;
+  if (! addr)
+    addr = &dummy;
+  *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
+  dir = depth ? find_stack_direction (addr, depth - 1) : 0;
+  return dir + dummy;
+}
+
+int
+main (int argc, char **argv)
+{
+  return find_stack_direction (0, argc + !argv + 20) < 0;
+}])],
+               [ac_cv_c_stack_direction=1],
+               [ac_cv_c_stack_direction=-1],
+               [ac_cv_c_stack_direction=0])])
+AH_VERBATIM([STACK_DIRECTION],
+[/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at runtime.
+        STACK_DIRECTION > 0 => grows toward higher addresses
+        STACK_DIRECTION < 0 => grows toward lower addresses
+        STACK_DIRECTION = 0 => direction of growth unknown */
+@%:@undef STACK_DIRECTION])dnl
+AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction)
+])# _AC_LIBOBJ_ALLOCA
+])
diff --git a/gdb/gnulib/import/m4/codeset.m4 b/gdb/gnulib/import/m4/codeset.m4
new file mode 100644
index 0000000..cf53d24
--- /dev/null
+++ b/gdb/gnulib/import/m4/codeset.m4
@@ -0,0 +1,23 @@
+# codeset.m4 serial 5 (gettext-0.18.2)
+dnl Copyright (C) 2000-2002, 2006, 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_LANGINFO_CODESET],
+[
+  AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset],
+    [AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <langinfo.h>]],
+          [[char* cs = nl_langinfo(CODESET); return !cs;]])],
+       [am_cv_langinfo_codeset=yes],
+       [am_cv_langinfo_codeset=no])
+    ])
+  if test $am_cv_langinfo_codeset = yes; then
+    AC_DEFINE([HAVE_LANGINFO_CODESET], [1],
+      [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
+  fi
+])
diff --git a/gdb/gnulib/import/m4/configmake.m4 b/gdb/gnulib/import/m4/configmake.m4
new file mode 100644
index 0000000..8c82371
--- /dev/null
+++ b/gdb/gnulib/import/m4/configmake.m4
@@ -0,0 +1,50 @@
+# configmake.m4 serial 1
+dnl Copyright (C) 2010-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# gl_CONFIGMAKE_PREP
+# ------------------
+# Guarantee all of the standard directory variables, even when used with
+# autoconf 2.59 (datarootdir wasn't supported until 2.59c) or automake
+# 1.9.6 (pkglibexecdir wasn't supported until 1.10b.).
+AC_DEFUN([gl_CONFIGMAKE_PREP],
+[
+  dnl Technically, datadir should default to datarootdir.  But if
+  dnl autoconf is too old to provide datarootdir, then reversing the
+  dnl definition is a reasonable compromise.  Only AC_SUBST a variable
+  dnl if it was not already defined earlier by autoconf.
+  if test "x$datarootdir" = x; then
+    AC_SUBST([datarootdir], ['${datadir}'])
+  fi
+  dnl Copy the approach used in autoconf 2.60.
+  if test "x$docdir" = x; then
+    AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME],
+      ['${datarootdir}/doc/${PACKAGE_TARNAME}'],
+      ['${datarootdir}/doc/${PACKAGE}'])])
+  fi
+  dnl The remaining variables missing from autoconf 2.59 are easier.
+  if test "x$htmldir" = x; then
+    AC_SUBST([htmldir], ['${docdir}'])
+  fi
+  if test "x$dvidir" = x; then
+    AC_SUBST([dvidir], ['${docdir}'])
+  fi
+  if test "x$pdfdir" = x; then
+    AC_SUBST([pdfdir], ['${docdir}'])
+  fi
+  if test "x$psdir" = x; then
+    AC_SUBST([psdir], ['${docdir}'])
+  fi
+  if test "x$lispdir" = x; then
+    AC_SUBST([lispdir], ['${datarootdir}/emacs/site-lisp'])
+  fi
+  if test "x$localedir" = x; then
+    AC_SUBST([localedir], ['${datarootdir}/locale'])
+  fi
+
+  dnl Automake 1.9.6 only lacks pkglibexecdir; and since 1.11 merely
+  dnl provides it without AC_SUBST, this blind use of AC_SUBST is safe.
+  AC_SUBST([pkglibexecdir], ['${libexecdir}/${PACKAGE}'])
+])
diff --git a/gdb/gnulib/import/m4/extensions.m4 b/gdb/gnulib/import/m4/extensions.m4
new file mode 100644
index 0000000..6d17d8a
--- /dev/null
+++ b/gdb/gnulib/import/m4/extensions.m4
@@ -0,0 +1,123 @@
+# serial 12  -*- Autoconf -*-
+# Enable extensions on systems that normally disable them.
+
+# Copyright (C) 2003, 2006-2012 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from CVS
+# Autoconf.  Perhaps we can remove this once we can assume Autoconf
+# 2.62 or later everywhere, but since CVS Autoconf mutates rapidly
+# enough in this area it's likely we'll need to redefine
+# AC_USE_SYSTEM_EXTENSIONS for quite some time.
+
+# If autoconf reports a warning
+#     warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
+# or  warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
+# the fix is
+#   1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked
+#      but always AC_REQUIREd,
+#   2) to ensure that for each occurrence of
+#        AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+#      or
+#        AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+#      the corresponding gnulib module description has 'extensions' among
+#      its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS
+#      invocation occurs in gl_EARLY, not in gl_INIT.
+
+# AC_USE_SYSTEM_EXTENSIONS
+# ------------------------
+# Enable extensions on systems that normally disable them,
+# typically due to standards-conformance issues.
+# Remember that #undef in AH_VERBATIM gets replaced with #define by
+# AC_DEFINE.  The goal here is to define all known feature-enabling
+# macros, then, if reports of conflicts are made, disable macros that
+# cause problems on some platforms (such as __EXTENSIONS__).
+AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS],
+[AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl
+AC_BEFORE([$0], [AC_RUN_IFELSE])dnl
+
+  AC_REQUIRE([AC_CANONICAL_HOST])
+
+  AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=])
+  if test "$MINIX" = yes; then
+    AC_DEFINE([_POSIX_SOURCE], [1],
+      [Define to 1 if you need to in order for 'stat' and other
+       things to work.])
+    AC_DEFINE([_POSIX_1_SOURCE], [2],
+      [Define to 2 if the system does not provide POSIX.1 features
+       except with this defined.])
+    AC_DEFINE([_MINIX], [1],
+      [Define to 1 if on MINIX.])
+  fi
+
+  dnl HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to 500,
+  dnl regardless of whether the flags -Ae or _D_HPUX_SOURCE=1 are already
+  dnl provided.
+  case "$host_os" in
+    hpux*)
+      AC_DEFINE([_XOPEN_SOURCE], [500],
+        [Define to 500 only on HP-UX.])
+      ;;
+  esac
+
+  AH_VERBATIM([__EXTENSIONS__],
+[/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable general extensions on Mac OS X.  */
+#ifndef _DARWIN_C_SOURCE
+# undef _DARWIN_C_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+])
+  AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__],
+    [ac_cv_safe_to_define___extensions__],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM([[
+#         define __EXTENSIONS__ 1
+          ]AC_INCLUDES_DEFAULT])],
+       [ac_cv_safe_to_define___extensions__=yes],
+       [ac_cv_safe_to_define___extensions__=no])])
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    AC_DEFINE([__EXTENSIONS__])
+  AC_DEFINE([_ALL_SOURCE])
+  AC_DEFINE([_DARWIN_C_SOURCE])
+  AC_DEFINE([_GNU_SOURCE])
+  AC_DEFINE([_POSIX_PTHREAD_SEMANTICS])
+  AC_DEFINE([_TANDEM_SOURCE])
+])# AC_USE_SYSTEM_EXTENSIONS
+
+# gl_USE_SYSTEM_EXTENSIONS
+# ------------------------
+# Enable extensions on systems that normally disable them,
+# typically due to standards-conformance issues.
+AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS],
+[
+  dnl Require this macro before AC_USE_SYSTEM_EXTENSIONS.
+  dnl gnulib does not need it. But if it gets required by third-party macros
+  dnl after AC_USE_SYSTEM_EXTENSIONS is required, autoconf 2.62..2.63 emit a
+  dnl warning: "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS".
+  dnl Note: We can do this only for one of the macros AC_AIX, AC_GNU_SOURCE,
+  dnl AC_MINIX. If people still use AC_AIX or AC_MINIX, they are out of luck.
+  AC_REQUIRE([AC_GNU_SOURCE])
+
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+])
diff --git a/gdb/gnulib/import/m4/fcntl-o.m4 b/gdb/gnulib/import/m4/fcntl-o.m4
new file mode 100644
index 0000000..9862741
--- /dev/null
+++ b/gdb/gnulib/import/m4/fcntl-o.m4
@@ -0,0 +1,123 @@
+# fcntl-o.m4 serial 4
+dnl Copyright (C) 2006, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Paul Eggert.
+
+# Test whether the flags O_NOATIME and O_NOFOLLOW actually work.
+# Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise.
+# Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise.
+AC_DEFUN([gl_FCNTL_O_FLAGS],
+[
+  dnl Persuade glibc <fcntl.h> to define O_NOATIME and O_NOFOLLOW.
+  dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes
+  dnl AC_GNU_SOURCE.
+  m4_ifdef([AC_USE_SYSTEM_EXTENSIONS],
+    [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])],
+    [AC_REQUIRE([AC_GNU_SOURCE])])
+
+  AC_CHECK_HEADERS_ONCE([unistd.h])
+  AC_CHECK_FUNCS_ONCE([symlink])
+  AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h],
+    [AC_RUN_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <sys/types.h>
+           #include <sys/stat.h>
+           #if HAVE_UNISTD_H
+           # include <unistd.h>
+           #else /* on Windows with MSVC */
+           # include <io.h>
+           # include <stdlib.h>
+           # defined sleep(n) _sleep ((n) * 1000)
+           #endif
+           #include <fcntl.h>
+           #ifndef O_NOATIME
+            #define O_NOATIME 0
+           #endif
+           #ifndef O_NOFOLLOW
+            #define O_NOFOLLOW 0
+           #endif
+           static int const constants[] =
+            {
+              O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
+              O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
+            };
+          ]],
+          [[
+            int result = !constants;
+            #if HAVE_SYMLINK
+            {
+              static char const sym[] = "conftest.sym";
+              if (symlink (".", sym) != 0)
+                result |= 2;
+              else
+                {
+                  int fd = open (sym, O_RDONLY | O_NOFOLLOW);
+                  if (fd >= 0)
+                    {
+                      close (fd);
+                      result |= 4;
+                    }
+                }
+              unlink (sym);
+            }
+            #endif
+            {
+              static char const file[] = "confdefs.h";
+              int fd = open (file, O_RDONLY | O_NOATIME);
+              if (fd < 0)
+                result |= 8;
+              else
+                {
+                  struct stat st0;
+                  if (fstat (fd, &st0) != 0)
+                    result |= 16;
+                  else
+                    {
+                      char c;
+                      sleep (1);
+                      if (read (fd, &c, 1) != 1)
+                        result |= 24;
+                      else
+                        {
+                          if (close (fd) != 0)
+                            result |= 32;
+                          else
+                            {
+                              struct stat st1;
+                              if (stat (file, &st1) != 0)
+                                result |= 40;
+                              else
+                                if (st0.st_atime != st1.st_atime)
+                                  result |= 64;
+                            }
+                        }
+                    }
+                }
+            }
+            return result;]])],
+       [gl_cv_header_working_fcntl_h=yes],
+       [case $? in #(
+        4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
+        64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
+        68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
+         *) gl_cv_header_working_fcntl_h='no';;
+        esac],
+       [gl_cv_header_working_fcntl_h=cross-compiling])])
+
+  case $gl_cv_header_working_fcntl_h in #(
+  *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
+  *) ac_val=1;;
+  esac
+  AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val],
+    [Define to 1 if O_NOATIME works.])
+
+  case $gl_cv_header_working_fcntl_h in #(
+  *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
+  *) ac_val=1;;
+  esac
+  AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val],
+    [Define to 1 if O_NOFOLLOW works.])
+])
diff --git a/gdb/gnulib/import/m4/fnmatch.m4 b/gdb/gnulib/import/m4/fnmatch.m4
new file mode 100644
index 0000000..e46b6e5
--- /dev/null
+++ b/gdb/gnulib/import/m4/fnmatch.m4
@@ -0,0 +1,156 @@
+# Check for fnmatch - serial 9.
+
+# Copyright (C) 2000-2007, 2009-2012 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Autoconf defines AC_FUNC_FNMATCH, but that is obsolescent.
+# New applications should use the macros below instead.
+
+# Request a POSIX compliant fnmatch function.
+AC_DEFUN([gl_FUNC_FNMATCH_POSIX],
+[
+  m4_divert_text([DEFAULTS], [gl_fnmatch_required=POSIX])
+
+  dnl Persuade glibc <fnmatch.h> to declare FNM_CASEFOLD etc.
+  dnl This is only needed if gl_fnmatch_required = GNU. It would be possible
+  dnl to avoid this dependency for gl_FUNC_FNMATCH_POSIX by putting
+  dnl gl_FUNC_FNMATCH_GNU into a separate .m4 file.
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+  FNMATCH_H=
+  gl_fnmatch_required_lowercase=`
+    echo $gl_fnmatch_required | LC_ALL=C tr '[[A-Z]]' '[[a-z]]'
+  `
+  gl_fnmatch_cache_var="gl_cv_func_fnmatch_${gl_fnmatch_required_lowercase}"
+  AC_CACHE_CHECK([for working $gl_fnmatch_required fnmatch],
+    [$gl_fnmatch_cache_var],
+    [dnl Some versions of Solaris, SCO, and the GNU C Library
+     dnl have a broken or incompatible fnmatch.
+     dnl So we run a test program.  If we are cross-compiling, take no chance.
+     dnl Thanks to John Oleynick, François Pinard, and Paul Eggert for this
+     dnl test.
+     if test $gl_fnmatch_required = GNU; then
+       gl_fnmatch_gnu_start=
+       gl_fnmatch_gnu_end=
+     else
+       gl_fnmatch_gnu_start='#if 0'
+       gl_fnmatch_gnu_end='#endif'
+     fi
+     AC_RUN_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <fnmatch.h>
+            static int
+            y (char const *pattern, char const *string, int flags)
+            {
+              return fnmatch (pattern, string, flags) == 0;
+            }
+            static int
+            n (char const *pattern, char const *string, int flags)
+            {
+              return fnmatch (pattern, string, flags) == FNM_NOMATCH;
+            }
+          ]],
+          [[char const *Apat = 'A' < '\\\\' ? "[A-\\\\\\\\]" : "[\\\\\\\\-A]";
+            char const *apat = 'a' < '\\\\' ? "[a-\\\\\\\\]" : "[\\\\\\\\-a]";
+            static char const A_1[] = { 'A' - 1, 0 };
+            static char const A01[] = { 'A' + 1, 0 };
+            static char const a_1[] = { 'a' - 1, 0 };
+            static char const a01[] = { 'a' + 1, 0 };
+            static char const bs_1[] = { '\\\\' - 1, 0 };
+            static char const bs01[] = { '\\\\' + 1, 0 };
+            int result = 0;
+            if (!n ("a*", "", 0))
+              return 1;
+            if (!y ("a*", "abc", 0))
+              return 1;
+            if (!y ("[/b", "[/b", 0)) /*"]]"*/ /* glibc Bugzilla bug 12378 */
+              return 1;
+            if (!n ("d*/*1", "d/s/1", FNM_PATHNAME))
+              return 2;
+            if (!y ("a\\\\bc", "abc", 0))
+              return 3;
+            if (!n ("a\\\\bc", "abc", FNM_NOESCAPE))
+              return 3;
+            if (!y ("*x", ".x", 0))
+              return 4;
+            if (!n ("*x", ".x", FNM_PERIOD))
+              return 4;
+            if (!y (Apat, "\\\\", 0))
+              return 5;
+            if (!y (Apat, "A", 0))
+              return 5;
+            if (!y (apat, "\\\\", 0))
+              return 5;
+            if (!y (apat, "a", 0))
+              return 5;
+            if (!(n (Apat, A_1, 0) == ('A' < '\\\\')))
+              return 5;
+            if (!(n (apat, a_1, 0) == ('a' < '\\\\')))
+              return 5;
+            if (!(y (Apat, A01, 0) == ('A' < '\\\\')))
+              return 5;
+            if (!(y (apat, a01, 0) == ('a' < '\\\\')))
+              return 5;
+            if (!(y (Apat, bs_1, 0) == ('A' < '\\\\')))
+              return 5;
+            if (!(y (apat, bs_1, 0) == ('a' < '\\\\')))
+              return 5;
+            if (!(n (Apat, bs01, 0) == ('A' < '\\\\')))
+              return 5;
+            if (!(n (apat, bs01, 0) == ('a' < '\\\\')))
+              return 5;
+            $gl_fnmatch_gnu_start
+            if (!y ("xxXX", "xXxX", FNM_CASEFOLD))
+              result |= 8;
+            if (!y ("a++(x|yy)b", "a+xyyyyxb", FNM_EXTMATCH))
+              result |= 16;
+            if (!n ("d*/*1", "d/s/1", FNM_FILE_NAME))
+              result |= 32;
+            if (!y ("*", "x", FNM_FILE_NAME | FNM_LEADING_DIR))
+              result |= 64;
+            if (!y ("x*", "x/y/z", FNM_FILE_NAME | FNM_LEADING_DIR))
+              result |= 64;
+            if (!y ("*c*", "c/x", FNM_FILE_NAME | FNM_LEADING_DIR))
+              result |= 64;
+            $gl_fnmatch_gnu_end
+            return result;
+          ]])],
+       [eval "$gl_fnmatch_cache_var=yes"],
+       [eval "$gl_fnmatch_cache_var=no"],
+       [eval "$gl_fnmatch_cache_var=\"guessing no\""])
+    ])
+  eval "gl_fnmatch_result=\"\$$gl_fnmatch_cache_var\""
+  if test "$gl_fnmatch_result" = yes; then
+    dnl Not strictly necessary. Only to avoid spurious leftover files if people
+    dnl don't do "make distclean".
+    rm -f "$gl_source_base/fnmatch.h"
+  else
+    FNMATCH_H=fnmatch.h
+  fi
+  AC_SUBST([FNMATCH_H])
+  AM_CONDITIONAL([GL_GENERATE_FNMATCH_H], [test -n "$FNMATCH_H"])
+])
+
+# Request a POSIX compliant fnmatch function with GNU extensions.
+AC_DEFUN([gl_FUNC_FNMATCH_GNU],
+[
+  m4_divert_text([INIT_PREPARE], [gl_fnmatch_required=GNU])
+
+  AC_REQUIRE([gl_FUNC_FNMATCH_POSIX])
+])
+
+AC_DEFUN([gl_PREREQ_FNMATCH],
+[
+  dnl We must choose a different name for our function, since on ELF systems
+  dnl a broken fnmatch() in libc.so would override our fnmatch() if it is
+  dnl compiled into a shared library.
+  AC_DEFINE_UNQUOTED([fnmatch], [${gl_fnmatch_required_lowercase}_fnmatch],
+    [Define to a replacement function name for fnmatch().])
+  dnl Prerequisites of lib/fnmatch.c.
+  AC_REQUIRE([AC_TYPE_MBSTATE_T])
+  AC_CHECK_DECLS([isblank], [], [], [[#include <ctype.h>]])
+  AC_CHECK_FUNCS_ONCE([btowc isblank iswctype mbsrtowcs mempcpy wmemchr wmemcpy wmempcpy])
+  AC_CHECK_HEADERS_ONCE([wctype.h])
+])
diff --git a/gdb/gnulib/import/m4/glibc21.m4 b/gdb/gnulib/import/m4/glibc21.m4
new file mode 100644
index 0000000..c938fb1
--- /dev/null
+++ b/gdb/gnulib/import/m4/glibc21.m4
@@ -0,0 +1,34 @@
+# glibc21.m4 serial 5
+dnl Copyright (C) 2000-2002, 2004, 2008, 2010-2012 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Test for the GNU C Library, version 2.1 or newer, or uClibc.
+# From Bruno Haible.
+
+AC_DEFUN([gl_GLIBC21],
+  [
+    AC_CACHE_CHECK([whether we are using the GNU C Library >= 2.1 or uClibc],
+      [ac_cv_gnu_library_2_1],
+      [AC_EGREP_CPP([Lucky],
+        [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+  Lucky GNU user
+ #endif
+#endif
+#ifdef __UCLIBC__
+ Lucky user
+#endif
+        ],
+        [ac_cv_gnu_library_2_1=yes],
+        [ac_cv_gnu_library_2_1=no])
+      ]
+    )
+    AC_SUBST([GLIBC21])
+    GLIBC21="$ac_cv_gnu_library_2_1"
+  ]
+)
diff --git a/gdb/gnulib/import/m4/gnulib-cache.m4 b/gdb/gnulib/import/m4/gnulib-cache.m4
new file mode 100644
index 0000000..895c571
--- /dev/null
+++ b/gdb/gnulib/import/m4/gnulib-cache.m4
@@ -0,0 +1,51 @@
+# Copyright (C) 2002-2012 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 3 of the License, or
+# (at your option) any later version.
+#
+# This file 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 file.  If not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License,
+# this file may be distributed as part of a program that
+# contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+#
+# This file represents the specification of how gnulib-tool is used.
+# It acts as a cache: It is written and read by gnulib-tool.
+# In projects that use version control, this file is meant to be put under
+# version control, like the configure.ac and various Makefile.am files.
+
+
+# Specification in the form of a command-line invocation:
+#   gnulib-tool --import --dir=. --lib=libgnu --source-base=import --m4-base=import/m4 --doc-base=doc --tests-base=tests --aux-dir=import/extra --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files fnmatch-gnu inttypes memmem update-copyright
+
+# Specification in the form of a few gnulib-tool.m4 macro invocations:
+gl_LOCAL_DIR([])
+gl_MODULES([
+  fnmatch-gnu
+  inttypes
+  memmem
+  update-copyright
+])
+gl_AVOID([])
+gl_SOURCE_BASE([import])
+gl_M4_BASE([import/m4])
+gl_PO_BASE([])
+gl_DOC_BASE([doc])
+gl_TESTS_BASE([tests])
+gl_LIB([libgnu])
+gl_MAKEFILE_NAME([])
+gl_MACRO_PREFIX([gl])
+gl_PO_DOMAIN([])
+gl_WITNESS_C_DOMAIN([])
+gl_VC_FILES([false])
diff --git a/gdb/gnulib/import/m4/gnulib-common.m4 b/gdb/gnulib/import/m4/gnulib-common.m4
new file mode 100644
index 0000000..15d2b2b
--- /dev/null
+++ b/gdb/gnulib/import/m4/gnulib-common.m4
@@ -0,0 +1,373 @@
+# gnulib-common.m4 serial 33
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# gl_COMMON
+# is expanded unconditionally through gnulib-tool magic.
+AC_DEFUN([gl_COMMON], [
+  dnl Use AC_REQUIRE here, so that the code is expanded once only.
+  AC_REQUIRE([gl_00GNULIB])
+  AC_REQUIRE([gl_COMMON_BODY])
+])
+AC_DEFUN([gl_COMMON_BODY], [
+  AH_VERBATIM([_Noreturn],
+[/* The _Noreturn keyword of C11.  */
+#if ! (defined _Noreturn \
+       || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__))
+# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
+      || 0x5110 <= __SUNPRO_C)
+#  define _Noreturn __attribute__ ((__noreturn__))
+# elif defined _MSC_VER && 1200 <= _MSC_VER
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn
+# endif
+#endif
+])
+  AH_VERBATIM([isoc99_inline],
+[/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
+   the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
+   earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
+   __APPLE__ && __MACH__ test for Mac OS X.
+   __APPLE_CC__ tests for the Apple compiler and its version.
+   __STDC_VERSION__ tests for the C99 mode.  */
+#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
+# define __GNUC_STDC_INLINE__ 1
+#endif])
+  AH_VERBATIM([unused_parameter],
+[/* Define as a marker that can be attached to declarations that might not
+    be used.  This helps to reduce warnings, such as from
+    GCC -Wunused-parameter.  */
+#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_UNUSED __attribute__ ((__unused__))
+#else
+# define _GL_UNUSED
+#endif
+/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
+   is a misnomer outside of parameter lists.  */
+#define _UNUSED_PARAMETER_ _GL_UNUSED
+
+/* The __pure__ attribute was added in gcc 2.96.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+/* The __const__ attribute was added in gcc 2.95.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
+#else
+# define _GL_ATTRIBUTE_CONST /* empty */
+#endif
+])
+  dnl Preparation for running test programs:
+  dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not
+  dnl to /dev/tty, so they can be redirected to log files.  Such diagnostics
+  dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N.
+  LIBC_FATAL_STDERR_=1
+  export LIBC_FATAL_STDERR_
+])
+
+# gl_MODULE_INDICATOR_CONDITION
+# expands to a C preprocessor expression that evaluates to 1 or 0, depending
+# whether a gnulib module that has been requested shall be considered present
+# or not.
+m4_define([gl_MODULE_INDICATOR_CONDITION], [1])
+
+# gl_MODULE_INDICATOR_SET_VARIABLE([modulename])
+# sets the shell variable that indicates the presence of the given module to
+# a C preprocessor expression that will evaluate to 1.
+AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE],
+[
+  gl_MODULE_INDICATOR_SET_VARIABLE_AUX(
+    [GNULIB_[]m4_translit([[$1]],
+                          [abcdefghijklmnopqrstuvwxyz./-],
+                          [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])],
+    [gl_MODULE_INDICATOR_CONDITION])
+])
+
+# gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable])
+# modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION.
+# The shell variable's value is a C preprocessor expression that evaluates
+# to 0 or 1.
+AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX],
+[
+  m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1],
+    [
+     dnl Simplify the expression VALUE || 1 to 1.
+     $1=1
+    ],
+    [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1],
+                                             [gl_MODULE_INDICATOR_CONDITION])])
+])
+
+# gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition])
+# modifies the shell variable to include the given condition.  The shell
+# variable's value is a C preprocessor expression that evaluates to 0 or 1.
+AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR],
+[
+  dnl Simplify the expression 1 || CONDITION to 1.
+  if test "$[]$1" != 1; then
+    dnl Simplify the expression 0 || CONDITION to CONDITION.
+    if test "$[]$1" = 0; then
+      $1=$2
+    else
+      $1="($[]$1 || $2)"
+    fi
+  fi
+])
+
+# gl_MODULE_INDICATOR([modulename])
+# defines a C macro indicating the presence of the given module
+# in a location where it can be used.
+#                                             |  Value  |   Value   |
+#                                             | in lib/ | in tests/ |
+# --------------------------------------------+---------+-----------+
+# Module present among main modules:          |    1    |     1     |
+# --------------------------------------------+---------+-----------+
+# Module present among tests-related modules: |    0    |     1     |
+# --------------------------------------------+---------+-----------+
+# Module not present at all:                  |    0    |     0     |
+# --------------------------------------------+---------+-----------+
+AC_DEFUN([gl_MODULE_INDICATOR],
+[
+  AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]],
+      [abcdefghijklmnopqrstuvwxyz./-],
+      [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]),
+    [gl_MODULE_INDICATOR_CONDITION],
+    [Define to a C preprocessor expression that evaluates to 1 or 0,
+     depending whether the gnulib module $1 shall be considered present.])
+])
+
+# gl_MODULE_INDICATOR_FOR_TESTS([modulename])
+# defines a C macro indicating the presence of the given module
+# in lib or tests. This is useful to determine whether the module
+# should be tested.
+#                                             |  Value  |   Value   |
+#                                             | in lib/ | in tests/ |
+# --------------------------------------------+---------+-----------+
+# Module present among main modules:          |    1    |     1     |
+# --------------------------------------------+---------+-----------+
+# Module present among tests-related modules: |    1    |     1     |
+# --------------------------------------------+---------+-----------+
+# Module not present at all:                  |    0    |     0     |
+# --------------------------------------------+---------+-----------+
+AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS],
+[
+  AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]],
+      [abcdefghijklmnopqrstuvwxyz./-],
+      [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1],
+    [Define to 1 when the gnulib module $1 should be tested.])
+])
+
+# gl_ASSERT_NO_GNULIB_POSIXCHECK
+# asserts that there will never be a need to #define GNULIB_POSIXCHECK.
+# and thereby enables an optimization of configure and config.h.
+# Used by Emacs.
+AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK],
+[
+  dnl Override gl_WARN_ON_USE_PREPARE.
+  dnl But hide this definition from 'aclocal'.
+  AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], [])
+])
+
+# gl_ASSERT_NO_GNULIB_TESTS
+# asserts that there will be no gnulib tests in the scope of the configure.ac
+# and thereby enables an optimization of config.h.
+# Used by Emacs.
+AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS],
+[
+  dnl Override gl_MODULE_INDICATOR_FOR_TESTS.
+  AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], [])
+])
+
+# Test whether <features.h> exists.
+# Set HAVE_FEATURES_H.
+AC_DEFUN([gl_FEATURES_H],
+[
+  AC_CHECK_HEADERS_ONCE([features.h])
+  if test $ac_cv_header_features_h = yes; then
+    HAVE_FEATURES_H=1
+  else
+    HAVE_FEATURES_H=0
+  fi
+  AC_SUBST([HAVE_FEATURES_H])
+])
+
+# m4_foreach_w
+# is a backport of autoconf-2.59c's m4_foreach_w.
+# Remove this macro when we can assume autoconf >= 2.60.
+m4_ifndef([m4_foreach_w],
+  [m4_define([m4_foreach_w],
+    [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])])
+
+# AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH])
+# ----------------------------------------------------
+# Backport of autoconf-2.63b's macro.
+# Remove this macro when we can assume autoconf >= 2.64.
+m4_ifndef([AS_VAR_IF],
+[m4_define([AS_VAR_IF],
+[AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])])
+
+# gl_PROG_CC_C99
+# Modifies the value of the shell variable CC in an attempt to make $CC
+# understand ISO C99 source code.
+# This is like AC_PROG_CC_C99, except that
+# - AC_PROG_CC_C99 did not exist in Autoconf versions < 2.60,
+# - AC_PROG_CC_C99 does not mix well with AC_PROG_CC_STDC
+#   <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00367.html>,
+#   but many more packages use AC_PROG_CC_STDC than AC_PROG_CC_C99
+#   <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00441.html>.
+# Remaining problems:
+# - When AC_PROG_CC_STDC is invoked twice, it adds the C99 enabling options
+#   to CC twice
+#   <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00431.html>.
+# - AC_PROG_CC_STDC is likely to change now that C11 is an ISO standard.
+AC_DEFUN([gl_PROG_CC_C99],
+[
+  dnl Change that version number to the minimum Autoconf version that supports
+  dnl mixing AC_PROG_CC_C99 calls with AC_PROG_CC_STDC calls.
+  m4_version_prereq([9.0],
+    [AC_REQUIRE([AC_PROG_CC_C99])],
+    [AC_REQUIRE([AC_PROG_CC_STDC])])
+])
+
+# gl_PROG_AR_RANLIB
+# Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler.
+# The user can set the variables AR, ARFLAGS, RANLIB if he wants to override
+# the values.
+AC_DEFUN([gl_PROG_AR_RANLIB],
+[
+  dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler
+  dnl as "cc", and GCC as "gcc". They have different object file formats and
+  dnl library formats. In particular, the GNU binutils programs ar, ranlib
+  dnl produce libraries that work only with gcc, not with cc.
+  AC_REQUIRE([AC_PROG_CC])
+  AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler],
+    [
+      AC_EGREP_CPP([Amsterdam],
+        [
+#ifdef __ACK__
+Amsterdam
+#endif
+        ],
+        [gl_cv_c_amsterdam_compiler=yes],
+        [gl_cv_c_amsterdam_compiler=no])
+    ])
+  if test -z "$AR"; then
+    if test $gl_cv_c_amsterdam_compiler = yes; then
+      AR='cc -c.a'
+      if test -z "$ARFLAGS"; then
+        ARFLAGS='-o'
+      fi
+    else
+      dnl Use the Automake-documented default values for AR and ARFLAGS,
+      dnl but prefer ${host}-ar over ar (useful for cross-compiling).
+      AC_CHECK_TOOL([AR], [ar], [ar])
+      if test -z "$ARFLAGS"; then
+        ARFLAGS='cru'
+      fi
+    fi
+  else
+    if test -z "$ARFLAGS"; then
+      ARFLAGS='cru'
+    fi
+  fi
+  AC_SUBST([AR])
+  AC_SUBST([ARFLAGS])
+  if test -z "$RANLIB"; then
+    if test $gl_cv_c_amsterdam_compiler = yes; then
+      RANLIB=':'
+    else
+      dnl Use the ranlib program if it is available.
+      AC_PROG_RANLIB
+    fi
+  fi
+  AC_SUBST([RANLIB])
+])
+
+# AC_PROG_MKDIR_P
+# is a backport of autoconf-2.60's AC_PROG_MKDIR_P, with a fix
+# for interoperability with automake-1.9.6 from autoconf-2.62.
+# Remove this macro when we can assume autoconf >= 2.62 or
+# autoconf >= 2.60 && automake >= 1.10.
+m4_ifdef([AC_PROG_MKDIR_P], [
+  dnl For automake-1.9.6 && autoconf < 2.62: Ensure MKDIR_P is AC_SUBSTed.
+  m4_define([AC_PROG_MKDIR_P],
+    m4_defn([AC_PROG_MKDIR_P])[
+    AC_SUBST([MKDIR_P])])], [
+  dnl For autoconf < 2.60: Backport of AC_PROG_MKDIR_P.
+  AC_DEFUN_ONCE([AC_PROG_MKDIR_P],
+    [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
+     MKDIR_P='$(mkdir_p)'
+     AC_SUBST([MKDIR_P])])])
+
+# AC_C_RESTRICT
+# This definition overrides the AC_C_RESTRICT macro from autoconf 2.60..2.61,
+# so that mixed use of GNU C and GNU C++ and mixed use of Sun C and Sun C++
+# works.
+# This definition can be removed once autoconf >= 2.62 can be assumed.
+m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.62]),[-1],[
+AC_DEFUN([AC_C_RESTRICT],
+[AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict],
+  [ac_cv_c_restrict=no
+   # The order here caters to the fact that C++ does not require restrict.
+   for ac_kw in __restrict __restrict__ _Restrict restrict; do
+     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+      [[typedef int * int_ptr;
+        int foo (int_ptr $ac_kw ip) {
+        return ip[0];
+       }]],
+      [[int s[1];
+        int * $ac_kw t = s;
+        t[0] = 0;
+        return foo(t)]])],
+      [ac_cv_c_restrict=$ac_kw])
+     test "$ac_cv_c_restrict" != no && break
+   done
+  ])
+ AH_VERBATIM([restrict],
+[/* Define to the equivalent of the C99 'restrict' keyword, or to
+   nothing if this is not supported.  Do not define if restrict is
+   supported directly.  */
+#undef restrict
+/* Work around a bug in Sun C++: it does not support _Restrict, even
+   though the corresponding Sun C compiler does, which causes
+   "#define restrict _Restrict" in the previous line.  Perhaps some future
+   version of Sun C++ will work with _Restrict; if so, it'll probably
+   define __RESTRICT, just as Sun C does.  */
+#if defined __SUNPRO_CC && !defined __RESTRICT
+# define _Restrict
+#endif])
+ case $ac_cv_c_restrict in
+   restrict) ;;
+   no) AC_DEFINE([restrict], []) ;;
+   *)  AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;;
+ esac
+])
+])
+
+# gl_BIGENDIAN
+# is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd.
+# Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some
+# macros invoke AC_C_BIGENDIAN with arguments.
+AC_DEFUN([gl_BIGENDIAN],
+[
+  AC_C_BIGENDIAN
+])
+
+# gl_CACHE_VAL_SILENT(cache-id, command-to-set-it)
+# is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not
+# output a spurious "(cached)" mark in the midst of other configure output.
+# This macro should be used instead of AC_CACHE_VAL when it is not surrounded
+# by an AC_MSG_CHECKING/AC_MSG_RESULT pair.
+AC_DEFUN([gl_CACHE_VAL_SILENT],
+[
+  saved_as_echo_n="$as_echo_n"
+  as_echo_n=':'
+  AC_CACHE_VAL([$1], [$2])
+  as_echo_n="$saved_as_echo_n"
+])
diff --git a/gdb/gnulib/import/m4/gnulib-comp.m4 b/gdb/gnulib/import/m4/gnulib-comp.m4
new file mode 100644
index 0000000..954ea21
--- /dev/null
+++ b/gdb/gnulib/import/m4/gnulib-comp.m4
@@ -0,0 +1,356 @@
+# DO NOT EDIT! GENERATED AUTOMATICALLY!
+# Copyright (C) 2002-2012 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 3 of the License, or
+# (at your option) any later version.
+#
+# This file 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 file.  If not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License,
+# this file may be distributed as part of a program that
+# contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+#
+# This file represents the compiled summary of the specification in
+# gnulib-cache.m4. It lists the computed macro invocations that need
+# to be invoked from configure.ac.
+# In projects that use version control, this file can be treated like
+# other built files.
+
+
+# This macro should be invoked from ./configure.ac, in the section
+# "Checks for programs", right after AC_PROG_CC, and certainly before
+# any checks for libraries, header files, types and library functions.
+AC_DEFUN([gl_EARLY],
+[
+  m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace
+  m4_pattern_allow([^gl_ES$])dnl a valid locale name
+  m4_pattern_allow([^gl_LIBOBJS$])dnl a variable
+  m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable
+  AC_REQUIRE([gl_PROG_AR_RANLIB])
+  # Code from module alloca:
+  # Code from module alloca-opt:
+  # Code from module configmake:
+  # Code from module extensions:
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+  # Code from module fnmatch:
+  # Code from module fnmatch-gnu:
+  # Code from module include_next:
+  # Code from module inttypes:
+  # Code from module inttypes-incomplete:
+  # Code from module localcharset:
+  # Code from module mbrtowc:
+  # Code from module mbsinit:
+  # Code from module mbsrtowcs:
+  # Code from module memchr:
+  # Code from module memmem:
+  # Code from module memmem-simple:
+  # Code from module multiarch:
+  # Code from module snippet/arg-nonnull:
+  # Code from module snippet/c++defs:
+  # Code from module snippet/warn-on-use:
+  # Code from module stdbool:
+  # Code from module stddef:
+  # Code from module stdint:
+  # Code from module streq:
+  # Code from module string:
+  # Code from module strnlen1:
+  # Code from module update-copyright:
+  # Code from module verify:
+  # Code from module wchar:
+  # Code from module wctype-h:
+])
+
+# This macro should be invoked from ./configure.ac, in the section
+# "Check for header files, types and library functions".
+AC_DEFUN([gl_INIT],
+[
+  AM_CONDITIONAL([GL_COND_LIBTOOL], [false])
+  gl_cond_libtool=false
+  gl_libdeps=
+  gl_ltlibdeps=
+  gl_m4_base='import/m4'
+  m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ]))
+  m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS]))
+  m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES]))
+  m4_pushdef([gl_LIBSOURCES_LIST], [])
+  m4_pushdef([gl_LIBSOURCES_DIR], [])
+  gl_COMMON
+  gl_source_base='import'
+gl_FUNC_ALLOCA
+gl_CONFIGMAKE_PREP
+gl_FUNC_FNMATCH_POSIX
+if test -n "$FNMATCH_H"; then
+  AC_LIBOBJ([fnmatch])
+  gl_PREREQ_FNMATCH
+fi
+gl_FUNC_FNMATCH_GNU
+if test -n "$FNMATCH_H"; then
+  AC_LIBOBJ([fnmatch])
+  gl_PREREQ_FNMATCH
+fi
+gl_INTTYPES_H
+gl_INTTYPES_INCOMPLETE
+gl_LOCALCHARSET
+LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\""
+AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT])
+gl_FUNC_MBRTOWC
+if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then
+  AC_LIBOBJ([mbrtowc])
+  gl_PREREQ_MBRTOWC
+fi
+gl_WCHAR_MODULE_INDICATOR([mbrtowc])
+gl_FUNC_MBSINIT
+if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then
+  AC_LIBOBJ([mbsinit])
+  gl_PREREQ_MBSINIT
+fi
+gl_WCHAR_MODULE_INDICATOR([mbsinit])
+gl_FUNC_MBSRTOWCS
+if test $HAVE_MBSRTOWCS = 0 || test $REPLACE_MBSRTOWCS = 1; then
+  AC_LIBOBJ([mbsrtowcs])
+  AC_LIBOBJ([mbsrtowcs-state])
+  gl_PREREQ_MBSRTOWCS
+fi
+gl_WCHAR_MODULE_INDICATOR([mbsrtowcs])
+gl_FUNC_MEMCHR
+if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then
+  AC_LIBOBJ([memchr])
+  gl_PREREQ_MEMCHR
+fi
+gl_STRING_MODULE_INDICATOR([memchr])
+gl_FUNC_MEMMEM
+if test $HAVE_MEMMEM = 0 || test $REPLACE_MEMMEM = 1; then
+  AC_LIBOBJ([memmem])
+fi
+gl_FUNC_MEMMEM_SIMPLE
+if test $HAVE_MEMMEM = 0 || test $REPLACE_MEMMEM = 1; then
+  AC_LIBOBJ([memmem])
+fi
+gl_STRING_MODULE_INDICATOR([memmem])
+gl_MULTIARCH
+AM_STDBOOL_H
+gl_STDDEF_H
+gl_STDINT_H
+gl_HEADER_STRING_H
+gl_WCHAR_H
+gl_WCTYPE_H
+  # End of code from modules
+  m4_ifval(gl_LIBSOURCES_LIST, [
+    m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ ||
+      for gl_file in ]gl_LIBSOURCES_LIST[ ; do
+        if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then
+          echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2
+          exit 1
+        fi
+      done])dnl
+      m4_if(m4_sysval, [0], [],
+        [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
+  ])
+  m4_popdef([gl_LIBSOURCES_DIR])
+  m4_popdef([gl_LIBSOURCES_LIST])
+  m4_popdef([AC_LIBSOURCES])
+  m4_popdef([AC_REPLACE_FUNCS])
+  m4_popdef([AC_LIBOBJ])
+  AC_CONFIG_COMMANDS_PRE([
+    gl_libobjs=
+    gl_ltlibobjs=
+    if test -n "$gl_LIBOBJS"; then
+      # Remove the extension.
+      sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+        gl_libobjs="$gl_libobjs $i.$ac_objext"
+        gl_ltlibobjs="$gl_ltlibobjs $i.lo"
+      done
+    fi
+    AC_SUBST([gl_LIBOBJS], [$gl_libobjs])
+    AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs])
+  ])
+  gltests_libdeps=
+  gltests_ltlibdeps=
+  m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ]))
+  m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS]))
+  m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES]))
+  m4_pushdef([gltests_LIBSOURCES_LIST], [])
+  m4_pushdef([gltests_LIBSOURCES_DIR], [])
+  gl_COMMON
+  gl_source_base='tests'
+changequote(,)dnl
+  gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
+changequote([, ])dnl
+  AC_SUBST([gltests_WITNESS])
+  gl_module_indicator_condition=$gltests_WITNESS
+  m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition])
+  m4_popdef([gl_MODULE_INDICATOR_CONDITION])
+  m4_ifval(gltests_LIBSOURCES_LIST, [
+    m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ ||
+      for gl_file in ]gltests_LIBSOURCES_LIST[ ; do
+        if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then
+          echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2
+          exit 1
+        fi
+      done])dnl
+      m4_if(m4_sysval, [0], [],
+        [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
+  ])
+  m4_popdef([gltests_LIBSOURCES_DIR])
+  m4_popdef([gltests_LIBSOURCES_LIST])
+  m4_popdef([AC_LIBSOURCES])
+  m4_popdef([AC_REPLACE_FUNCS])
+  m4_popdef([AC_LIBOBJ])
+  AC_CONFIG_COMMANDS_PRE([
+    gltests_libobjs=
+    gltests_ltlibobjs=
+    if test -n "$gltests_LIBOBJS"; then
+      # Remove the extension.
+      sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+        gltests_libobjs="$gltests_libobjs $i.$ac_objext"
+        gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
+      done
+    fi
+    AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs])
+    AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs])
+  ])
+  LIBGNU_LIBDEPS="$gl_libdeps"
+  AC_SUBST([LIBGNU_LIBDEPS])
+  LIBGNU_LTLIBDEPS="$gl_ltlibdeps"
+  AC_SUBST([LIBGNU_LTLIBDEPS])
+])
+
+# Like AC_LIBOBJ, except that the module name goes
+# into gl_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([gl_LIBOBJ], [
+  AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl
+  gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext"
+])
+
+# Like AC_REPLACE_FUNCS, except that the module name goes
+# into gl_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([gl_REPLACE_FUNCS], [
+  m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
+  AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)])
+])
+
+# Like AC_LIBSOURCES, except the directory where the source file is
+# expected is derived from the gnulib-tool parameterization,
+# and alloca is special cased (for the alloca-opt module).
+# We could also entirely rely on EXTRA_lib..._SOURCES.
+AC_DEFUN([gl_LIBSOURCES], [
+  m4_foreach([_gl_NAME], [$1], [
+    m4_if(_gl_NAME, [alloca.c], [], [
+      m4_define([gl_LIBSOURCES_DIR], [import])
+      m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ])
+    ])
+  ])
+])
+
+# Like AC_LIBOBJ, except that the module name goes
+# into gltests_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([gltests_LIBOBJ], [
+  AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl
+  gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext"
+])
+
+# Like AC_REPLACE_FUNCS, except that the module name goes
+# into gltests_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([gltests_REPLACE_FUNCS], [
+  m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
+  AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)])
+])
+
+# Like AC_LIBSOURCES, except the directory where the source file is
+# expected is derived from the gnulib-tool parameterization,
+# and alloca is special cased (for the alloca-opt module).
+# We could also entirely rely on EXTRA_lib..._SOURCES.
+AC_DEFUN([gltests_LIBSOURCES], [
+  m4_foreach([_gl_NAME], [$1], [
+    m4_if(_gl_NAME, [alloca.c], [], [
+      m4_define([gltests_LIBSOURCES_DIR], [tests])
+      m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ])
+    ])
+  ])
+])
+
+# This macro records the list of files which have been installed by
+# gnulib-tool and may be removed by future gnulib-tool invocations.
+AC_DEFUN([gl_FILE_LIST], [
+  build-aux/snippet/arg-nonnull.h
+  build-aux/snippet/c++defs.h
+  build-aux/snippet/warn-on-use.h
+  build-aux/update-copyright
+  lib/alloca.c
+  lib/alloca.in.h
+  lib/config.charset
+  lib/fnmatch.c
+  lib/fnmatch.in.h
+  lib/fnmatch_loop.c
+  lib/inttypes.in.h
+  lib/localcharset.c
+  lib/localcharset.h
+  lib/mbrtowc.c
+  lib/mbsinit.c
+  lib/mbsrtowcs-impl.h
+  lib/mbsrtowcs-state.c
+  lib/mbsrtowcs.c
+  lib/memchr.c
+  lib/memchr.valgrind
+  lib/memmem.c
+  lib/ref-add.sin
+  lib/ref-del.sin
+  lib/stdbool.in.h
+  lib/stddef.in.h
+  lib/stdint.in.h
+  lib/str-two-way.h
+  lib/streq.h
+  lib/string.in.h
+  lib/strnlen1.c
+  lib/strnlen1.h
+  lib/verify.h
+  lib/wchar.in.h
+  lib/wctype.in.h
+  m4/00gnulib.m4
+  m4/alloca.m4
+  m4/codeset.m4
+  m4/configmake.m4
+  m4/extensions.m4
+  m4/fcntl-o.m4
+  m4/fnmatch.m4
+  m4/glibc21.m4
+  m4/gnulib-common.m4
+  m4/include_next.m4
+  m4/inttypes-pri.m4
+  m4/inttypes.m4
+  m4/localcharset.m4
+  m4/locale-fr.m4
+  m4/locale-ja.m4
+  m4/locale-zh.m4
+  m4/longlong.m4
+  m4/mbrtowc.m4
+  m4/mbsinit.m4
+  m4/mbsrtowcs.m4
+  m4/mbstate_t.m4
+  m4/memchr.m4
+  m4/memmem.m4
+  m4/mmap-anon.m4
+  m4/multiarch.m4
+  m4/stdbool.m4
+  m4/stddef_h.m4
+  m4/stdint.m4
+  m4/string_h.m4
+  m4/warn-on-use.m4
+  m4/wchar_h.m4
+  m4/wchar_t.m4
+  m4/wctype_h.m4
+  m4/wint_t.m4
+])
diff --git a/gdb/gnulib/import/m4/gnulib-tool.m4 b/gdb/gnulib/import/m4/gnulib-tool.m4
new file mode 100644
index 0000000..a09ffc1
--- /dev/null
+++ b/gdb/gnulib/import/m4/gnulib-tool.m4
@@ -0,0 +1,57 @@
+# gnulib-tool.m4 serial 2
+dnl Copyright (C) 2004-2005, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl The following macros need not be invoked explicitly.
+dnl Invoking them does nothing except to declare default arguments
+dnl for "gnulib-tool --import".
+
+dnl Usage: gl_LOCAL_DIR([DIR])
+AC_DEFUN([gl_LOCAL_DIR], [])
+
+dnl Usage: gl_MODULES([module1 module2 ...])
+AC_DEFUN([gl_MODULES], [])
+
+dnl Usage: gl_AVOID([module1 module2 ...])
+AC_DEFUN([gl_AVOID], [])
+
+dnl Usage: gl_SOURCE_BASE([DIR])
+AC_DEFUN([gl_SOURCE_BASE], [])
+
+dnl Usage: gl_M4_BASE([DIR])
+AC_DEFUN([gl_M4_BASE], [])
+
+dnl Usage: gl_PO_BASE([DIR])
+AC_DEFUN([gl_PO_BASE], [])
+
+dnl Usage: gl_DOC_BASE([DIR])
+AC_DEFUN([gl_DOC_BASE], [])
+
+dnl Usage: gl_TESTS_BASE([DIR])
+AC_DEFUN([gl_TESTS_BASE], [])
+
+dnl Usage: gl_WITH_TESTS
+AC_DEFUN([gl_WITH_TESTS], [])
+
+dnl Usage: gl_LIB([LIBNAME])
+AC_DEFUN([gl_LIB], [])
+
+dnl Usage: gl_LGPL or gl_LGPL([VERSION])
+AC_DEFUN([gl_LGPL], [])
+
+dnl Usage: gl_MAKEFILE_NAME([FILENAME])
+AC_DEFUN([gl_MAKEFILE_NAME], [])
+
+dnl Usage: gl_LIBTOOL
+AC_DEFUN([gl_LIBTOOL], [])
+
+dnl Usage: gl_MACRO_PREFIX([PREFIX])
+AC_DEFUN([gl_MACRO_PREFIX], [])
+
+dnl Usage: gl_PO_DOMAIN([DOMAIN])
+AC_DEFUN([gl_PO_DOMAIN], [])
+
+dnl Usage: gl_VC_FILES([BOOLEAN])
+AC_DEFUN([gl_VC_FILES], [])
diff --git a/gdb/gnulib/import/m4/include_next.m4 b/gdb/gnulib/import/m4/include_next.m4
new file mode 100644
index 0000000..a60a261
--- /dev/null
+++ b/gdb/gnulib/import/m4/include_next.m4
@@ -0,0 +1,270 @@
+# include_next.m4 serial 23
+dnl Copyright (C) 2006-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert and Derek Price.
+
+dnl Sets INCLUDE_NEXT and PRAGMA_SYSTEM_HEADER.
+dnl
+dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to
+dnl 'include' otherwise.
+dnl
+dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler
+dnl supports it in the special case that it is the first include directive in
+dnl the given file, or to 'include' otherwise.
+dnl
+dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next,
+dnl so as to avoid GCC warnings when the gcc option -pedantic is used.
+dnl '#pragma GCC system_header' has the same effect as if the file was found
+dnl through the include search path specified with '-isystem' options (as
+dnl opposed to the search path specified with '-I' options). Namely, gcc
+dnl does not warn about some things, and on some systems (Solaris and Interix)
+dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side
+dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead
+dnl of plain '__STDC__'.
+dnl
+dnl PRAGMA_COLUMNS can be used in files that override system header files, so
+dnl as to avoid compilation errors on HP NonStop systems when the gnulib file
+dnl is included by a system header file that does a "#pragma COLUMNS 80" (which
+dnl has the effect of truncating the lines of that file and all files that it
+dnl includes to 80 columns) and the gnulib file has lines longer than 80
+dnl columns.
+
+AC_DEFUN([gl_INCLUDE_NEXT],
+[
+  AC_LANG_PREPROC_REQUIRE()
+  AC_CACHE_CHECK([whether the preprocessor supports include_next],
+    [gl_cv_have_include_next],
+    [rm -rf conftestd1a conftestd1b conftestd2
+     mkdir conftestd1a conftestd1b conftestd2
+     dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on
+     dnl AIX 6.1 support include_next when used as first preprocessor directive
+     dnl in a file, but not when preceded by another include directive. Check
+     dnl for this bug by including <stdio.h>.
+     dnl Additionally, with this same compiler, include_next is a no-op when
+     dnl used in a header file that was included by specifying its absolute
+     dnl file name. Despite these two bugs, include_next is used in the
+     dnl compiler's <math.h>. By virtue of the second bug, we need to use
+     dnl include_next as well in this case.
+     cat <<EOF > conftestd1a/conftest.h
+#define DEFINED_IN_CONFTESTD1
+#include_next <conftest.h>
+#ifdef DEFINED_IN_CONFTESTD2
+int foo;
+#else
+#error "include_next doesn't work"
+#endif
+EOF
+     cat <<EOF > conftestd1b/conftest.h
+#define DEFINED_IN_CONFTESTD1
+#include <stdio.h>
+#include_next <conftest.h>
+#ifdef DEFINED_IN_CONFTESTD2
+int foo;
+#else
+#error "include_next doesn't work"
+#endif
+EOF
+     cat <<EOF > conftestd2/conftest.h
+#ifndef DEFINED_IN_CONFTESTD1
+#error "include_next test doesn't work"
+#endif
+#define DEFINED_IN_CONFTESTD2
+EOF
+     gl_save_CPPFLAGS="$CPPFLAGS"
+     CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2"
+dnl We intentionally avoid using AC_LANG_SOURCE here.
+     AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]],
+       [gl_cv_have_include_next=yes],
+       [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2"
+        AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]],
+          [gl_cv_have_include_next=buggy],
+          [gl_cv_have_include_next=no])
+       ])
+     CPPFLAGS="$gl_save_CPPFLAGS"
+     rm -rf conftestd1a conftestd1b conftestd2
+    ])
+  PRAGMA_SYSTEM_HEADER=
+  if test $gl_cv_have_include_next = yes; then
+    INCLUDE_NEXT=include_next
+    INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
+    if test -n "$GCC"; then
+      PRAGMA_SYSTEM_HEADER='#pragma GCC system_header'
+    fi
+  else
+    if test $gl_cv_have_include_next = buggy; then
+      INCLUDE_NEXT=include
+      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
+    else
+      INCLUDE_NEXT=include
+      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include
+    fi
+  fi
+  AC_SUBST([INCLUDE_NEXT])
+  AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE])
+  AC_SUBST([PRAGMA_SYSTEM_HEADER])
+  AC_CACHE_CHECK([whether system header files limit the line length],
+    [gl_cv_pragma_columns],
+    [dnl HP NonStop systems, which define __TANDEM, have this misfeature.
+     AC_EGREP_CPP([choke me],
+       [
+#ifdef __TANDEM
+choke me
+#endif
+       ],
+       [gl_cv_pragma_columns=yes],
+       [gl_cv_pragma_columns=no])
+    ])
+  if test $gl_cv_pragma_columns = yes; then
+    PRAGMA_COLUMNS="#pragma COLUMNS 10000"
+  else
+    PRAGMA_COLUMNS=
+  fi
+  AC_SUBST([PRAGMA_COLUMNS])
+])
+
+# gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...)
+# ------------------------------------------
+# For each arg foo.h, if #include_next works, define NEXT_FOO_H to be
+# '<foo.h>'; otherwise define it to be
+# '"///usr/include/foo.h"', or whatever other absolute file name is suitable.
+# Also, if #include_next works as first preprocessing directive in a file,
+# define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be '<foo.h>'; otherwise define it to
+# be
+# '"///usr/include/foo.h"', or whatever other absolute file name is suitable.
+# That way, a header file with the following line:
+#       #@INCLUDE_NEXT@ @NEXT_FOO_H@
+# or
+#       #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@
+# behaves (after sed substitution) as if it contained
+#       #include_next <foo.h>
+# even if the compiler does not support include_next.
+# The three "///" are to pacify Sun C 5.8, which otherwise would say
+# "warning: #include of /usr/include/... may be non-portable".
+# Use '""', not '<>', so that the /// cannot be confused with a C99 comment.
+# Note: This macro assumes that the header file is not empty after
+# preprocessing, i.e. it does not only define preprocessor macros but also
+# provides some type/enum definitions or function/variable declarations.
+#
+# This macro also checks whether each header exists, by invoking
+# AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument.
+AC_DEFUN([gl_CHECK_NEXT_HEADERS],
+[
+  gl_NEXT_HEADERS_INTERNAL([$1], [check])
+])
+
+# gl_NEXT_HEADERS(HEADER1 HEADER2 ...)
+# ------------------------------------
+# Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist.
+# This is suitable for headers like <stddef.h> that are standardized by C89
+# and therefore can be assumed to exist.
+AC_DEFUN([gl_NEXT_HEADERS],
+[
+  gl_NEXT_HEADERS_INTERNAL([$1], [assume])
+])
+
+# The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS.
+AC_DEFUN([gl_NEXT_HEADERS_INTERNAL],
+[
+  AC_REQUIRE([gl_INCLUDE_NEXT])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+
+  m4_if([$2], [check],
+    [AC_CHECK_HEADERS_ONCE([$1])
+    ])
+
+dnl FIXME: gl_next_header and gl_header_exists must be used unquoted
+dnl until we can assume autoconf 2.64 or newer.
+  m4_foreach_w([gl_HEADER_NAME], [$1],
+    [AS_VAR_PUSHDEF([gl_next_header],
+                    [gl_cv_next_]m4_defn([gl_HEADER_NAME]))
+     if test $gl_cv_have_include_next = yes; then
+       AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>'])
+     else
+       AC_CACHE_CHECK(
+         [absolute name of <]m4_defn([gl_HEADER_NAME])[>],
+         m4_defn([gl_next_header]),
+         [m4_if([$2], [check],
+            [AS_VAR_PUSHDEF([gl_header_exists],
+                            [ac_cv_header_]m4_defn([gl_HEADER_NAME]))
+             if test AS_VAR_GET(gl_header_exists) = yes; then
+             AS_VAR_POPDEF([gl_header_exists])
+            ])
+               AC_LANG_CONFTEST(
+                 [AC_LANG_SOURCE(
+                    [[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]]
+                  )])
+               dnl AIX "xlc -E" and "cc -E" omit #line directives for header
+               dnl files that contain only a #include of other header files and
+               dnl no non-comment tokens of their own. This leads to a failure
+               dnl to detect the absolute name of <dirent.h>, <signal.h>,
+               dnl <poll.h> and others. The workaround is to force preservation
+               dnl of comments through option -C. This ensures all necessary
+               dnl #line directives are present. GCC supports option -C as well.
+               case "$host_os" in
+                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
+                 *)    gl_absname_cpp="$ac_cpp" ;;
+               esac
+changequote(,)
+               case "$host_os" in
+                 mingw*)
+                   dnl For the sake of native Windows compilers (excluding gcc),
+                   dnl treat backslash as a directory separator, like /.
+                   dnl Actually, these compilers use a double-backslash as
+                   dnl directory separator, inside the
+                   dnl   # line "filename"
+                   dnl directives.
+                   gl_dirsep_regex='[/\\]'
+                   ;;
+                 *)
+                   gl_dirsep_regex='\/'
+                   ;;
+               esac
+               dnl A sed expression that turns a string into a basic regular
+               dnl expression, for use within "/.../".
+               gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+changequote([,])
+               gl_header_literal_regex=`echo ']m4_defn([gl_HEADER_NAME])[' \
+                                        | sed -e "$gl_make_literal_regex_sed"`
+               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+changequote(,)dnl
+                   s|^/[^/]|//&|
+changequote([,])dnl
+                   p
+                   q
+                 }'
+               dnl eval is necessary to expand gl_absname_cpp.
+               dnl Ultrix and Pyramid sh refuse to redirect output of eval,
+               dnl so use subshell.
+               AS_VAR_SET(gl_next_header,
+                 ['"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
+                      sed -n "$gl_absolute_header_sed"`'"'])
+          m4_if([$2], [check],
+            [else
+               AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>'])
+             fi
+            ])
+         ])
+     fi
+     AC_SUBST(
+       AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])),
+       [AS_VAR_GET(gl_next_header)])
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'gl_HEADER_NAME'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=AS_VAR_GET(gl_next_header)
+     fi
+     AC_SUBST(
+       AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])),
+       [$gl_next_as_first_directive])
+     AS_VAR_POPDEF([gl_next_header])])
+])
+
+# Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE;
+# this fallback is safe for all earlier autoconf versions.
+m4_define_default([AC_LANG_DEFINES_PROVIDED])
diff --git a/gdb/gnulib/import/m4/inttypes-pri.m4 b/gdb/gnulib/import/m4/inttypes-pri.m4
new file mode 100644
index 0000000..977206f
--- /dev/null
+++ b/gdb/gnulib/import/m4/inttypes-pri.m4
@@ -0,0 +1,42 @@
+# inttypes-pri.m4 serial 7 (gettext-0.18.2)
+dnl Copyright (C) 1997-2002, 2006, 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ([2.53])
+
+# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI*
+# macros to non-string values.  This is the case on AIX 4.3.3.
+
+AC_DEFUN([gt_INTTYPES_PRI],
+[
+  AC_CHECK_HEADERS([inttypes.h])
+  if test $ac_cv_header_inttypes_h = yes; then
+    AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],
+      [gt_cv_inttypes_pri_broken],
+      [
+        AC_COMPILE_IFELSE(
+          [AC_LANG_PROGRAM(
+             [[
+#include <inttypes.h>
+#ifdef PRId32
+char *p = PRId32;
+#endif
+             ]],
+             [[]])],
+          [gt_cv_inttypes_pri_broken=no],
+          [gt_cv_inttypes_pri_broken=yes])
+      ])
+  fi
+  if test "$gt_cv_inttypes_pri_broken" = yes; then
+    AC_DEFINE_UNQUOTED([PRI_MACROS_BROKEN], [1],
+      [Define if <inttypes.h> exists and defines unusable PRI* macros.])
+    PRI_MACROS_BROKEN=1
+  else
+    PRI_MACROS_BROKEN=0
+  fi
+  AC_SUBST([PRI_MACROS_BROKEN])
+])
diff --git a/gdb/gnulib/import/m4/inttypes.m4 b/gdb/gnulib/import/m4/inttypes.m4
new file mode 100644
index 0000000..eec4f41
--- /dev/null
+++ b/gdb/gnulib/import/m4/inttypes.m4
@@ -0,0 +1,157 @@
+# inttypes.m4 serial 26
+dnl Copyright (C) 2006-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Derek Price, Bruno Haible.
+dnl Test whether <inttypes.h> is supported or must be substituted.
+
+AC_DEFUN([gl_INTTYPES_H],
+[
+  AC_REQUIRE([gl_INTTYPES_INCOMPLETE])
+  gl_INTTYPES_PRI_SCN
+])
+
+AC_DEFUN_ONCE([gl_INTTYPES_INCOMPLETE],
+[
+  AC_REQUIRE([gl_STDINT_H])
+  AC_CHECK_HEADERS_ONCE([inttypes.h])
+
+  dnl Override <inttypes.h> always, so that the portability warnings work.
+  AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])
+  gl_CHECK_NEXT_HEADERS([inttypes.h])
+
+  AC_REQUIRE([gl_MULTIARCH])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[#include <inttypes.h>
+    ]], [imaxabs imaxdiv strtoimax strtoumax])
+])
+
+# Ensure that the PRI* and SCN* macros are defined appropriately.
+AC_DEFUN([gl_INTTYPES_PRI_SCN],
+[
+  AC_REQUIRE([gt_INTTYPES_PRI])
+
+  PRIPTR_PREFIX=
+  if test -n "$STDINT_H"; then
+    dnl Using the gnulib <stdint.h>. It always defines intptr_t to 'long'.
+    PRIPTR_PREFIX='"l"'
+  else
+    dnl Using the system's <stdint.h>.
+    for glpfx in '' l ll I64; do
+      case $glpfx in
+        '')  gltype1='int';;
+        l)   gltype1='long int';;
+        ll)  gltype1='long long int';;
+        I64) gltype1='__int64';;
+      esac
+      AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM([[#include <stdint.h>
+           extern intptr_t foo;
+           extern $gltype1 foo;]])],
+        [PRIPTR_PREFIX='"'$glpfx'"'])
+      test -n "$PRIPTR_PREFIX" && break
+    done
+  fi
+  AC_SUBST([PRIPTR_PREFIX])
+
+  gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
+    [INT32_MAX_LT_INTMAX_MAX],
+    [defined INT32_MAX && defined INTMAX_MAX],
+    [INT32_MAX < INTMAX_MAX],
+    [sizeof (int) < sizeof (long long int)])
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+    gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
+      [INT64_MAX_EQ_LONG_MAX],
+      [defined INT64_MAX],
+      [INT64_MAX == LONG_MAX],
+      [sizeof (long long int) == sizeof (long int)])
+  else
+    INT64_MAX_EQ_LONG_MAX=-1
+  fi
+  gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
+    [UINT32_MAX_LT_UINTMAX_MAX],
+    [defined UINT32_MAX && defined UINTMAX_MAX],
+    [UINT32_MAX < UINTMAX_MAX],
+    [sizeof (unsigned int) < sizeof (unsigned long long int)])
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+    gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
+      [UINT64_MAX_EQ_ULONG_MAX],
+      [defined UINT64_MAX],
+      [UINT64_MAX == ULONG_MAX],
+      [sizeof (unsigned long long int) == sizeof (unsigned long int)])
+  else
+    UINT64_MAX_EQ_ULONG_MAX=-1
+  fi
+])
+
+# Define the symbol $1 to be 1 if the condition is true, 0 otherwise.
+# If $2 is true, the condition is $3; otherwise if long long int is supported
+# approximate the condition with $4; otherwise, assume the condition is false.
+# The condition should work on all C99 platforms; the approximations should be
+# good enough to work on all practical pre-C99 platforms.
+# $2 is evaluated by the C preprocessor, $3 and $4 as compile-time constants.
+AC_DEFUN([gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION],
+[
+  AC_CACHE_CHECK([whether $3],
+    [gl_cv_test_$1],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[/* Work also in C++ mode.  */
+            #define __STDC_LIMIT_MACROS 1
+
+            /* Work if build is not clean.  */
+            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+            #include <limits.h>
+            #if HAVE_STDINT_H
+             #include <stdint.h>
+            #endif
+
+            #if $2
+             #define CONDITION ($3)
+            #elif HAVE_LONG_LONG_INT
+             #define CONDITION ($4)
+            #else
+             #define CONDITION 0
+            #endif
+            int test[CONDITION ? 1 : -1];]])],
+       [gl_cv_test_$1=yes],
+       [gl_cv_test_$1=no])])
+  if test $gl_cv_test_$1 = yes; then
+    $1=1;
+  else
+    $1=0;
+  fi
+  AC_SUBST([$1])
+])
+
+AC_DEFUN([gl_INTTYPES_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+])
+
+AC_DEFUN([gl_INTTYPES_H_DEFAULTS],
+[
+  GNULIB_IMAXABS=0;      AC_SUBST([GNULIB_IMAXABS])
+  GNULIB_IMAXDIV=0;      AC_SUBST([GNULIB_IMAXDIV])
+  GNULIB_STRTOIMAX=0;    AC_SUBST([GNULIB_STRTOIMAX])
+  GNULIB_STRTOUMAX=0;    AC_SUBST([GNULIB_STRTOUMAX])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_DECL_IMAXABS=1;   AC_SUBST([HAVE_DECL_IMAXABS])
+  HAVE_DECL_IMAXDIV=1;   AC_SUBST([HAVE_DECL_IMAXDIV])
+  HAVE_DECL_STRTOIMAX=1; AC_SUBST([HAVE_DECL_STRTOIMAX])
+  HAVE_DECL_STRTOUMAX=1; AC_SUBST([HAVE_DECL_STRTOUMAX])
+  REPLACE_STRTOIMAX=0;   AC_SUBST([REPLACE_STRTOIMAX])
+  INT32_MAX_LT_INTMAX_MAX=1;  AC_SUBST([INT32_MAX_LT_INTMAX_MAX])
+  INT64_MAX_EQ_LONG_MAX='defined _LP64';  AC_SUBST([INT64_MAX_EQ_LONG_MAX])
+  PRI_MACROS_BROKEN=0;   AC_SUBST([PRI_MACROS_BROKEN])
+  PRIPTR_PREFIX=__PRIPTR_PREFIX;  AC_SUBST([PRIPTR_PREFIX])
+  UINT32_MAX_LT_UINTMAX_MAX=1;  AC_SUBST([UINT32_MAX_LT_UINTMAX_MAX])
+  UINT64_MAX_EQ_ULONG_MAX='defined _LP64';  AC_SUBST([UINT64_MAX_EQ_ULONG_MAX])
+])
diff --git a/gdb/gnulib/import/m4/localcharset.m4 b/gdb/gnulib/import/m4/localcharset.m4
new file mode 100644
index 0000000..8010379
--- /dev/null
+++ b/gdb/gnulib/import/m4/localcharset.m4
@@ -0,0 +1,17 @@
+# localcharset.m4 serial 7
+dnl Copyright (C) 2002, 2004, 2006, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_LOCALCHARSET],
+[
+  dnl Prerequisites of lib/localcharset.c.
+  AC_REQUIRE([AM_LANGINFO_CODESET])
+  AC_REQUIRE([gl_FCNTL_O_FLAGS])
+  AC_CHECK_DECLS_ONCE([getc_unlocked])
+
+  dnl Prerequisites of the lib/Makefile.am snippet.
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([gl_GLIBC21])
+])
diff --git a/gdb/gnulib/import/m4/locale-fr.m4 b/gdb/gnulib/import/m4/locale-fr.m4
new file mode 100644
index 0000000..71b6847
--- /dev/null
+++ b/gdb/gnulib/import/m4/locale-fr.m4
@@ -0,0 +1,250 @@
+# locale-fr.m4 serial 17
+dnl Copyright (C) 2003, 2005-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl Determine the name of a french locale with traditional encoding.
+AC_DEFUN([gt_LOCALE_FR],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AM_LANGINFO_CODESET])
+  AC_CACHE_CHECK([for a traditional french locale], [gt_cv_locale_fr], [
+    AC_LANG_CONFTEST([AC_LANG_SOURCE([
+changequote(,)dnl
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+  /* Check whether the given locale name is recognized by the system.  */
+#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+  /* On native Windows, setlocale(category, "") looks at the system settings,
+     not at the environment variables.  Also, when an encoding suffix such
+     as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+     category of the locale to "C".  */
+  if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+      || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+    return 1;
+#else
+  if (setlocale (LC_ALL, "") == NULL) return 1;
+#endif
+  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+     On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+     some unit tests fail.
+     On MirBSD 10, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "UTF-8".  */
+#if HAVE_LANGINFO_CODESET
+  {
+    const char *cs = nl_langinfo (CODESET);
+    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+        || strcmp (cs, "UTF-8") == 0)
+      return 1;
+  }
+#endif
+#ifdef __CYGWIN__
+  /* On Cygwin, avoid locale names without encoding suffix, because the
+     locale_charset() function relies on the encoding suffix.  Note that
+     LC_ALL is set on the command line.  */
+  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+#endif
+  /* Check whether in the abbreviation of the second month, the second
+     character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only
+     one byte long. This excludes the UTF-8 encoding.  */
+  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+  if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1;
+#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy.  */
+  /* Check whether the decimal separator is a comma.
+     On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+     are nl_langinfo(RADIXCHAR) are both ".".  */
+  if (localeconv () ->decimal_point[0] != ',') return 1;
+#endif
+  return 0;
+}
+changequote([,])dnl
+      ])])
+    if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
+      case "$host_os" in
+        # Handle native Windows specially, because there setlocale() interprets
+        # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+        # "fr" or "fra" as "French" or "French_France.1252",
+        # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+        # "ja" as "Japanese" or "Japanese_Japan.932",
+        # and similar.
+        mingw*)
+          # Test for the native Windows locale name.
+          if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_fr=French_France.1252
+          else
+            # None found.
+            gt_cv_locale_fr=none
+          fi
+          ;;
+        *)
+          # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+          # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+          # configure script would override the LC_ALL setting. Likewise for
+          # LC_CTYPE, which is also set at the beginning of the configure script.
+          # Test for the usual locale name.
+          if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_fr=fr_FR
+          else
+            # Test for the locale name with explicit encoding suffix.
+            if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+              gt_cv_locale_fr=fr_FR.ISO-8859-1
+            else
+              # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name.
+              if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                gt_cv_locale_fr=fr_FR.ISO8859-1
+              else
+                # Test for the HP-UX locale name.
+                if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                  gt_cv_locale_fr=fr_FR.iso88591
+                else
+                  # Test for the Solaris 7 locale name.
+                  if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                    gt_cv_locale_fr=fr
+                  else
+                    # None found.
+                    gt_cv_locale_fr=none
+                  fi
+                fi
+              fi
+            fi
+          fi
+          ;;
+      esac
+    fi
+    rm -fr conftest*
+  ])
+  LOCALE_FR=$gt_cv_locale_fr
+  AC_SUBST([LOCALE_FR])
+])
+
+dnl Determine the name of a french locale with UTF-8 encoding.
+AC_DEFUN([gt_LOCALE_FR_UTF8],
+[
+  AC_REQUIRE([AM_LANGINFO_CODESET])
+  AC_CACHE_CHECK([for a french Unicode locale], [gt_cv_locale_fr_utf8], [
+    AC_LANG_CONFTEST([AC_LANG_SOURCE([
+changequote(,)dnl
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+  /* On BeOS and Haiku, locales are not implemented in libc.  Rather, libintl
+     imitates locale dependent behaviour by looking at the environment
+     variables, and all locales use the UTF-8 encoding.  */
+#if !(defined __BEOS__ || defined __HAIKU__)
+  /* Check whether the given locale name is recognized by the system.  */
+# if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+  /* On native Windows, setlocale(category, "") looks at the system settings,
+     not at the environment variables.  Also, when an encoding suffix such
+     as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+     category of the locale to "C".  */
+  if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+      || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+    return 1;
+# else
+  if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+     On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+     some unit tests fail.  */
+# if HAVE_LANGINFO_CODESET
+  {
+    const char *cs = nl_langinfo (CODESET);
+    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
+      return 1;
+  }
+# endif
+# ifdef __CYGWIN__
+  /* On Cygwin, avoid locale names without encoding suffix, because the
+     locale_charset() function relies on the encoding suffix.  Note that
+     LC_ALL is set on the command line.  */
+  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+  /* Check whether in the abbreviation of the second month, the second
+     character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is
+     two bytes long, with UTF-8 encoding.  */
+  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+  if (strftime (buf, sizeof (buf), "%b", &t) < 4
+      || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v')
+    return 1;
+#endif
+#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy.  */
+  /* Check whether the decimal separator is a comma.
+     On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+     are nl_langinfo(RADIXCHAR) are both ".".  */
+  if (localeconv () ->decimal_point[0] != ',') return 1;
+#endif
+  return 0;
+}
+changequote([,])dnl
+      ])])
+    if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
+      case "$host_os" in
+        # Handle native Windows specially, because there setlocale() interprets
+        # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+        # "fr" or "fra" as "French" or "French_France.1252",
+        # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+        # "ja" as "Japanese" or "Japanese_Japan.932",
+        # and similar.
+        mingw*)
+          # Test for the hypothetical native Windows locale name.
+          if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_fr_utf8=French_France.65001
+          else
+            # None found.
+            gt_cv_locale_fr_utf8=none
+          fi
+          ;;
+        *)
+          # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+          # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+          # configure script would override the LC_ALL setting. Likewise for
+          # LC_CTYPE, which is also set at the beginning of the configure script.
+          # Test for the usual locale name.
+          if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_fr_utf8=fr_FR
+          else
+            # Test for the locale name with explicit encoding suffix.
+            if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+              gt_cv_locale_fr_utf8=fr_FR.UTF-8
+            else
+              # Test for the Solaris 7 locale name.
+              if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                gt_cv_locale_fr_utf8=fr.UTF-8
+              else
+                # None found.
+                gt_cv_locale_fr_utf8=none
+              fi
+            fi
+          fi
+          ;;
+      esac
+    fi
+    rm -fr conftest*
+  ])
+  LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
+  AC_SUBST([LOCALE_FR_UTF8])
+])
diff --git a/gdb/gnulib/import/m4/locale-ja.m4 b/gdb/gnulib/import/m4/locale-ja.m4
new file mode 100644
index 0000000..5ba0e43
--- /dev/null
+++ b/gdb/gnulib/import/m4/locale-ja.m4
@@ -0,0 +1,136 @@
+# locale-ja.m4 serial 12
+dnl Copyright (C) 2003, 2005-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl Determine the name of a japanese locale with EUC-JP encoding.
+AC_DEFUN([gt_LOCALE_JA],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AM_LANGINFO_CODESET])
+  AC_CACHE_CHECK([for a traditional japanese locale], [gt_cv_locale_ja], [
+    AC_LANG_CONFTEST([AC_LANG_SOURCE([
+changequote(,)dnl
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main ()
+{
+  const char *p;
+  /* Check whether the given locale name is recognized by the system.  */
+#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+  /* On native Windows, setlocale(category, "") looks at the system settings,
+     not at the environment variables.  Also, when an encoding suffix such
+     as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+     category of the locale to "C".  */
+  if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+      || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+    return 1;
+#else
+  if (setlocale (LC_ALL, "") == NULL) return 1;
+#endif
+  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+     On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+     some unit tests fail.
+     On MirBSD 10, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "UTF-8".  */
+#if HAVE_LANGINFO_CODESET
+  {
+    const char *cs = nl_langinfo (CODESET);
+    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+        || strcmp (cs, "UTF-8") == 0)
+      return 1;
+  }
+#endif
+#ifdef __CYGWIN__
+  /* On Cygwin, avoid locale names without encoding suffix, because the
+     locale_charset() function relies on the encoding suffix.  Note that
+     LC_ALL is set on the command line.  */
+  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+#endif
+  /* Check whether MB_CUR_MAX is > 1.  This excludes the dysfunctional locales
+     on Cygwin 1.5.x.  */
+  if (MB_CUR_MAX == 1)
+    return 1;
+  /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
+     This excludes the UTF-8 encoding (except on MirBSD).  */
+  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+  if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
+  for (p = buf; *p != '\0'; p++)
+    if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
+      return 1;
+  return 0;
+}
+changequote([,])dnl
+      ])])
+    if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
+      case "$host_os" in
+        # Handle native Windows specially, because there setlocale() interprets
+        # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+        # "fr" or "fra" as "French" or "French_France.1252",
+        # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+        # "ja" as "Japanese" or "Japanese_Japan.932",
+        # and similar.
+        mingw*)
+          # Note that on native Windows, the Japanese locale is
+          # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we
+          # cannot use it here.
+          gt_cv_locale_ja=none
+          ;;
+        *)
+          # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+          # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+          # configure script would override the LC_ALL setting. Likewise for
+          # LC_CTYPE, which is also set at the beginning of the configure script.
+          # Test for the AIX locale name.
+          if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_ja=ja_JP
+          else
+            # Test for the locale name with explicit encoding suffix.
+            if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+              gt_cv_locale_ja=ja_JP.EUC-JP
+            else
+              # Test for the HP-UX, OSF/1, NetBSD locale name.
+              if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                gt_cv_locale_ja=ja_JP.eucJP
+              else
+                # Test for the IRIX, FreeBSD locale name.
+                if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                  gt_cv_locale_ja=ja_JP.EUC
+                else
+                  # Test for the Solaris 7 locale name.
+                  if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+                    gt_cv_locale_ja=ja
+                  else
+                    # Special test for NetBSD 1.6.
+                    if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then
+                      gt_cv_locale_ja=ja_JP.eucJP
+                    else
+                      # None found.
+                      gt_cv_locale_ja=none
+                    fi
+                  fi
+                fi
+              fi
+            fi
+          fi
+          ;;
+      esac
+    fi
+    rm -fr conftest*
+  ])
+  LOCALE_JA=$gt_cv_locale_ja
+  AC_SUBST([LOCALE_JA])
+])
diff --git a/gdb/gnulib/import/m4/locale-zh.m4 b/gdb/gnulib/import/m4/locale-zh.m4
new file mode 100644
index 0000000..e5502b2
--- /dev/null
+++ b/gdb/gnulib/import/m4/locale-zh.m4
@@ -0,0 +1,130 @@
+# locale-zh.m4 serial 12
+dnl Copyright (C) 2003, 2005-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl Determine the name of a chinese locale with GB18030 encoding.
+AC_DEFUN([gt_LOCALE_ZH_CN],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AM_LANGINFO_CODESET])
+  AC_CACHE_CHECK([for a transitional chinese locale], [gt_cv_locale_zh_CN], [
+    AC_LANG_CONFTEST([AC_LANG_SOURCE([
+changequote(,)dnl
+#include <locale.h>
+#include <stdlib.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main ()
+{
+  const char *p;
+  /* Check whether the given locale name is recognized by the system.  */
+#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+  /* On native Windows, setlocale(category, "") looks at the system settings,
+     not at the environment variables.  Also, when an encoding suffix such
+     as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+     category of the locale to "C".  */
+  if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+      || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+    return 1;
+#else
+  if (setlocale (LC_ALL, "") == NULL) return 1;
+#endif
+  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+     On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+     some unit tests fail.
+     On MirBSD 10, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "UTF-8".  */
+#if HAVE_LANGINFO_CODESET
+  {
+    const char *cs = nl_langinfo (CODESET);
+    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+        || strcmp (cs, "UTF-8") == 0)
+      return 1;
+  }
+#endif
+#ifdef __CYGWIN__
+  /* On Cygwin, avoid locale names without encoding suffix, because the
+     locale_charset() function relies on the encoding suffix.  Note that
+     LC_ALL is set on the command line.  */
+  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+#endif
+  /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
+     This excludes the UTF-8 encoding (except on MirBSD).  */
+  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+  if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
+  for (p = buf; *p != '\0'; p++)
+    if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
+      return 1;
+  /* Check whether a typical GB18030 multibyte sequence is recognized as a
+     single wide character.  This excludes the GB2312 and GBK encodings.  */
+  if (mblen ("\203\062\332\066", 5) != 4)
+    return 1;
+  return 0;
+}
+changequote([,])dnl
+      ])])
+    if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
+      case "$host_os" in
+        # Handle native Windows specially, because there setlocale() interprets
+        # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+        # "fr" or "fra" as "French" or "French_France.1252",
+        # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+        # "ja" as "Japanese" or "Japanese_Japan.932",
+        # and similar.
+        mingw*)
+          # Test for the hypothetical native Windows locale name.
+          if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_zh_CN=Chinese_China.54936
+          else
+            # None found.
+            gt_cv_locale_zh_CN=none
+          fi
+          ;;
+        solaris2.8)
+          # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are
+          # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK.
+          # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core.
+          gt_cv_locale_zh_CN=none
+          ;;
+        *)
+          # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+          # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+          # configure script would override the LC_ALL setting. Likewise for
+          # LC_CTYPE, which is also set at the beginning of the configure script.
+          # Test for the locale name without encoding suffix.
+          if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+            gt_cv_locale_zh_CN=zh_CN
+          else
+            # Test for the locale name with explicit encoding suffix.
+            if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+              gt_cv_locale_zh_CN=zh_CN.GB18030
+            else
+              # None found.
+              gt_cv_locale_zh_CN=none
+            fi
+          fi
+          ;;
+      esac
+    else
+      # If there was a link error, due to mblen(), the system is so old that
+      # it certainly doesn't have a chinese locale.
+      gt_cv_locale_zh_CN=none
+    fi
+    rm -fr conftest*
+  ])
+  LOCALE_ZH_CN=$gt_cv_locale_zh_CN
+  AC_SUBST([LOCALE_ZH_CN])
+])
diff --git a/gdb/gnulib/import/m4/longlong.m4 b/gdb/gnulib/import/m4/longlong.m4
new file mode 100644
index 0000000..b9c65c7
--- /dev/null
+++ b/gdb/gnulib/import/m4/longlong.m4
@@ -0,0 +1,113 @@
+# longlong.m4 serial 17
+dnl Copyright (C) 1999-2007, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_LONG_LONG_INT if 'long long int' works.
+# This fixes a bug in Autoconf 2.61, and can be faster
+# than what's in Autoconf 2.62 through 2.68.
+
+# Note: If the type 'long long int' exists but is only 32 bits large
+# (as on some very old compilers), HAVE_LONG_LONG_INT will not be
+# defined. In this case you can treat 'long long int' like 'long int'.
+
+AC_DEFUN([AC_TYPE_LONG_LONG_INT],
+[
+  AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
+  AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
+     [ac_cv_type_long_long_int=yes
+      if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+        ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
+        if test $ac_cv_type_long_long_int = yes; then
+          dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
+          dnl If cross compiling, assume the bug is not important, since
+          dnl nobody cross compiles for this platform as far as we know.
+          AC_RUN_IFELSE(
+            [AC_LANG_PROGRAM(
+               [[@%:@include <limits.h>
+                 @%:@ifndef LLONG_MAX
+                 @%:@ define HALF \
+                          (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+                 @%:@ define LLONG_MAX (HALF - 1 + HALF)
+                 @%:@endif]],
+               [[long long int n = 1;
+                 int i;
+                 for (i = 0; ; i++)
+                   {
+                     long long int m = n << i;
+                     if (m >> i != n)
+                       return 1;
+                     if (LLONG_MAX / 2 < m)
+                       break;
+                   }
+                 return 0;]])],
+            [],
+            [ac_cv_type_long_long_int=no],
+            [:])
+        fi
+      fi])
+  if test $ac_cv_type_long_long_int = yes; then
+    AC_DEFINE([HAVE_LONG_LONG_INT], [1],
+      [Define to 1 if the system has the type 'long long int'.])
+  fi
+])
+
+# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
+# This fixes a bug in Autoconf 2.61, and can be faster
+# than what's in Autoconf 2.62 through 2.68.
+
+# Note: If the type 'unsigned long long int' exists but is only 32 bits
+# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
+# will not be defined. In this case you can treat 'unsigned long long int'
+# like 'unsigned long int'.
+
+AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
+[
+  AC_CACHE_CHECK([for unsigned long long int],
+    [ac_cv_type_unsigned_long_long_int],
+    [ac_cv_type_unsigned_long_long_int=yes
+     if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+       AC_LINK_IFELSE(
+         [_AC_TYPE_LONG_LONG_SNIPPET],
+         [],
+         [ac_cv_type_unsigned_long_long_int=no])
+     fi])
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+    AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1],
+      [Define to 1 if the system has the type 'unsigned long long int'.])
+  fi
+])
+
+# Expands to a C program that can be used to test for simultaneous support
+# of 'long long' and 'unsigned long long'. We don't want to say that
+# 'long long' is available if 'unsigned long long' is not, or vice versa,
+# because too many programs rely on the symmetry between signed and unsigned
+# integer types (excluding 'bool').
+AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
+[
+  AC_LANG_PROGRAM(
+    [[/* For now, do not test the preprocessor; as of 2007 there are too many
+         implementations with broken preprocessors.  Perhaps this can
+         be revisited in 2012.  In the meantime, code should not expect
+         #if to work with literals wider than 32 bits.  */
+      /* Test literals.  */
+      long long int ll = 9223372036854775807ll;
+      long long int nll = -9223372036854775807LL;
+      unsigned long long int ull = 18446744073709551615ULL;
+      /* Test constant expressions.   */
+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+                     ? 1 : -1)];
+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+                     ? 1 : -1)];
+      int i = 63;]],
+    [[/* Test availability of runtime routines for shift and division.  */
+      long long int llmax = 9223372036854775807ll;
+      unsigned long long int ullmax = 18446744073709551615ull;
+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+              | (llmax / ll) | (llmax % ll)
+              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+              | (ullmax / ull) | (ullmax % ull));]])
+])
diff --git a/gdb/gnulib/import/m4/mbrtowc.m4 b/gdb/gnulib/import/m4/mbrtowc.m4
new file mode 100644
index 0000000..8f829c8
--- /dev/null
+++ b/gdb/gnulib/import/m4/mbrtowc.m4
@@ -0,0 +1,572 @@
+# mbrtowc.m4 serial 25
+dnl Copyright (C) 2001-2002, 2004-2005, 2008-2012 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_MBRTOWC],
+[
+  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+
+  AC_REQUIRE([AC_TYPE_MBSTATE_T])
+  gl_MBSTATE_T_BROKEN
+
+  AC_CHECK_FUNCS_ONCE([mbrtowc])
+  if test $ac_cv_func_mbrtowc = no; then
+    HAVE_MBRTOWC=0
+    AC_CHECK_DECLS([mbrtowc],,, [[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+]])
+    if test $ac_cv_have_decl_mbrtowc = yes; then
+      dnl On Minix 3.1.8, the system's <wchar.h> declares mbrtowc() although
+      dnl it does not have the function. Avoid a collision with gnulib's
+      dnl replacement.
+      REPLACE_MBRTOWC=1
+    fi
+  else
+    if test $REPLACE_MBSTATE_T = 1; then
+      REPLACE_MBRTOWC=1
+    else
+      gl_MBRTOWC_NULL_ARG1
+      gl_MBRTOWC_NULL_ARG2
+      gl_MBRTOWC_RETVAL
+      gl_MBRTOWC_NUL_RETVAL
+      case "$gl_cv_func_mbrtowc_null_arg1" in
+        *yes) ;;
+        *) AC_DEFINE([MBRTOWC_NULL_ARG1_BUG], [1],
+             [Define if the mbrtowc function has the NULL pwc argument bug.])
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
+      case "$gl_cv_func_mbrtowc_null_arg2" in
+        *yes) ;;
+        *) AC_DEFINE([MBRTOWC_NULL_ARG2_BUG], [1],
+             [Define if the mbrtowc function has the NULL string argument bug.])
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
+      case "$gl_cv_func_mbrtowc_retval" in
+        *yes) ;;
+        *) AC_DEFINE([MBRTOWC_RETVAL_BUG], [1],
+             [Define if the mbrtowc function returns a wrong return value.])
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
+      case "$gl_cv_func_mbrtowc_nul_retval" in
+        *yes) ;;
+        *) AC_DEFINE([MBRTOWC_NUL_RETVAL_BUG], [1],
+             [Define if the mbrtowc function does not return 0 for a NUL character.])
+           REPLACE_MBRTOWC=1
+           ;;
+      esac
+    fi
+  fi
+])
+
+dnl Test whether mbsinit() and mbrtowc() need to be overridden in a way that
+dnl redefines the semantics of the given mbstate_t type.
+dnl Result is REPLACE_MBSTATE_T.
+dnl When this is set to 1, we replace both mbsinit() and mbrtowc(), in order to
+dnl avoid inconsistencies.
+
+AC_DEFUN([gl_MBSTATE_T_BROKEN],
+[
+  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+
+  AC_REQUIRE([AC_TYPE_MBSTATE_T])
+  AC_CHECK_FUNCS_ONCE([mbsinit])
+  AC_CHECK_FUNCS_ONCE([mbrtowc])
+  if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then
+    gl_MBRTOWC_INCOMPLETE_STATE
+    gl_MBRTOWC_SANITYCHECK
+    REPLACE_MBSTATE_T=0
+    case "$gl_cv_func_mbrtowc_incomplete_state" in
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
+    esac
+    case "$gl_cv_func_mbrtowc_sanitycheck" in
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
+    esac
+  else
+    REPLACE_MBSTATE_T=1
+  fi
+])
+
+dnl Test whether mbrtowc puts the state into non-initial state when parsing an
+dnl incomplete multibyte character.
+dnl Result is gl_cv_func_mbrtowc_incomplete_state.
+
+AC_DEFUN([gl_MBRTOWC_INCOMPLETE_STATE],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gt_LOCALE_JA])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether mbrtowc handles incomplete characters],
+    [gl_cv_func_mbrtowc_incomplete_state],
+    [
+      dnl Initial guess, used when cross-compiling or when no suitable locale
+      dnl is present.
+changequote(,)dnl
+      case "$host_os" in
+                     # Guess no on AIX and OSF/1.
+        aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;;
+                     # Guess yes otherwise.
+        *)           gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;;
+      esac
+changequote([,])dnl
+      if test $LOCALE_JA != none; then
+        AC_RUN_IFELSE(
+          [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+    {
+      const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+        if (mbsinit (&state))
+          return 1;
+    }
+  return 0;
+}]])],
+          [gl_cv_func_mbrtowc_incomplete_state=yes],
+          [gl_cv_func_mbrtowc_incomplete_state=no],
+          [:])
+      fi
+    ])
+])
+
+dnl Test whether mbrtowc works not worse than mbtowc.
+dnl Result is gl_cv_func_mbrtowc_sanitycheck.
+
+AC_DEFUN([gl_MBRTOWC_SANITYCHECK],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gt_LOCALE_ZH_CN])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether mbrtowc works as well as mbtowc],
+    [gl_cv_func_mbrtowc_sanitycheck],
+    [
+      dnl Initial guess, used when cross-compiling or when no suitable locale
+      dnl is present.
+changequote(,)dnl
+      case "$host_os" in
+                    # Guess no on Solaris 8.
+        solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;;
+                    # Guess yes otherwise.
+        *)          gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;;
+      esac
+changequote([,])dnl
+      if test $LOCALE_ZH_CN != none; then
+        AC_RUN_IFELSE(
+          [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  /* This fails on Solaris 8:
+     mbrtowc returns 2, and sets wc to 0x00F0.
+     mbtowc returns 4 (correct) and sets wc to 0x5EDC.  */
+  if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+    {
+      char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 6, &state) != 4
+          && mbtowc (&wc, input + 3, 6) == 4)
+        return 1;
+    }
+  return 0;
+}]])],
+          [gl_cv_func_mbrtowc_sanitycheck=yes],
+          [gl_cv_func_mbrtowc_sanitycheck=no],
+          [:])
+      fi
+    ])
+])
+
+dnl Test whether mbrtowc supports a NULL pwc argument correctly.
+dnl Result is gl_cv_func_mbrtowc_null_arg1.
+
+AC_DEFUN([gl_MBRTOWC_NULL_ARG1],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gt_LOCALE_FR_UTF8])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether mbrtowc handles a NULL pwc argument],
+    [gl_cv_func_mbrtowc_null_arg1],
+    [
+      dnl Initial guess, used when cross-compiling or when no suitable locale
+      dnl is present.
+changequote(,)dnl
+      case "$host_os" in
+                  # Guess no on Solaris.
+        solaris*) gl_cv_func_mbrtowc_null_arg1="guessing no" ;;
+                  # Guess yes otherwise.
+        *)        gl_cv_func_mbrtowc_null_arg1="guessing yes" ;;
+      esac
+changequote([,])dnl
+      if test $LOCALE_FR_UTF8 != none; then
+        AC_RUN_IFELSE(
+          [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  int result = 0;
+
+  if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+    {
+      char input[] = "\303\237er";
+      mbstate_t state;
+      wchar_t wc;
+      size_t ret;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      wc = (wchar_t) 0xBADFACE;
+      ret = mbrtowc (&wc, input, 5, &state);
+      if (ret != 2)
+        result |= 1;
+      if (!mbsinit (&state))
+        result |= 2;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      ret = mbrtowc (NULL, input, 5, &state);
+      if (ret != 2) /* Solaris 7 fails here: ret is -1.  */
+        result |= 4;
+      if (!mbsinit (&state))
+        result |= 8;
+    }
+  return result;
+}]])],
+          [gl_cv_func_mbrtowc_null_arg1=yes],
+          [gl_cv_func_mbrtowc_null_arg1=no],
+          [:])
+      fi
+    ])
+])
+
+dnl Test whether mbrtowc supports a NULL string argument correctly.
+dnl Result is gl_cv_func_mbrtowc_null_arg2.
+
+AC_DEFUN([gl_MBRTOWC_NULL_ARG2],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gt_LOCALE_FR_UTF8])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether mbrtowc handles a NULL string argument],
+    [gl_cv_func_mbrtowc_null_arg2],
+    [
+      dnl Initial guess, used when cross-compiling or when no suitable locale
+      dnl is present.
+changequote(,)dnl
+      case "$host_os" in
+              # Guess no on OSF/1.
+        osf*) gl_cv_func_mbrtowc_null_arg2="guessing no" ;;
+              # Guess yes otherwise.
+        *)    gl_cv_func_mbrtowc_null_arg2="guessing yes" ;;
+      esac
+changequote([,])dnl
+      if test $LOCALE_FR_UTF8 != none; then
+        AC_RUN_IFELSE(
+          [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+    {
+      mbstate_t state;
+      wchar_t wc;
+      int ret;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      wc = (wchar_t) 0xBADFACE;
+      mbrtowc (&wc, NULL, 5, &state);
+      /* Check that wc was not modified.  */
+      if (wc != (wchar_t) 0xBADFACE)
+        return 1;
+    }
+  return 0;
+}]])],
+          [gl_cv_func_mbrtowc_null_arg2=yes],
+          [gl_cv_func_mbrtowc_null_arg2=no],
+          [:])
+      fi
+    ])
+])
+
+dnl Test whether mbrtowc, when parsing the end of a multibyte character,
+dnl correctly returns the number of bytes that were needed to complete the
+dnl character (not the total number of bytes of the multibyte character).
+dnl Result is gl_cv_func_mbrtowc_retval.
+
+AC_DEFUN([gl_MBRTOWC_RETVAL],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gt_LOCALE_FR_UTF8])
+  AC_REQUIRE([gt_LOCALE_JA])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_CACHE_CHECK([whether mbrtowc has a correct return value],
+    [gl_cv_func_mbrtowc_retval],
+    [
+      dnl Initial guess, used when cross-compiling or when no suitable locale
+      dnl is present.
+changequote(,)dnl
+      case "$host_os" in
+                                   # Guess no on HP-UX, Solaris, native Windows.
+        hpux* | solaris* | mingw*) gl_cv_func_mbrtowc_retval="guessing no" ;;
+                                   # Guess yes otherwise.
+        *)                         gl_cv_func_mbrtowc_retval="guessing yes" ;;
+      esac
+changequote([,])dnl
+      if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \
+         || { case "$host_os" in mingw*) true;; *) false;; esac; }; then
+        AC_RUN_IFELSE(
+          [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  int result = 0;
+  int found_some_locale = 0;
+  /* This fails on Solaris.  */
+  if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+    {
+      char input[] = "B\303\274\303\237er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+        {
+          input[1] = '\0';
+          if (mbrtowc (&wc, input + 2, 5, &state) != 1)
+            result |= 1;
+        }
+      found_some_locale = 1;
+    }
+  /* This fails on HP-UX 11.11.  */
+  if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+    {
+      char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+        {
+          input[1] = '\0';
+          if (mbrtowc (&wc, input + 2, 5, &state) != 2)
+            result |= 2;
+        }
+      found_some_locale = 1;
+    }
+  /* This fails on native Windows.  */
+  if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL)
+    {
+      char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2))
+        {
+          input[3] = '\0';
+          if (mbrtowc (&wc, input + 4, 4, &state) != 1)
+            result |= 4;
+        }
+      found_some_locale = 1;
+    }
+  if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL)
+    {
+      char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2))
+        {
+          input[3] = '\0';
+          if (mbrtowc (&wc, input + 4, 4, &state) != 1)
+            result |= 8;
+        }
+      found_some_locale = 1;
+    }
+  if (setlocale (LC_ALL, "Chinese_China.936") != NULL)
+    {
+      char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2))
+        {
+          input[3] = '\0';
+          if (mbrtowc (&wc, input + 4, 4, &state) != 1)
+            result |= 16;
+        }
+      found_some_locale = 1;
+    }
+  return (found_some_locale ? result : 77);
+}]])],
+          [gl_cv_func_mbrtowc_retval=yes],
+          [if test $? != 77; then
+             gl_cv_func_mbrtowc_retval=no
+           fi
+          ],
+          [:])
+      fi
+    ])
+])
+
+dnl Test whether mbrtowc, when parsing a NUL character, correctly returns 0.
+dnl Result is gl_cv_func_mbrtowc_nul_retval.
+
+AC_DEFUN([gl_MBRTOWC_NUL_RETVAL],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gt_LOCALE_ZH_CN])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether mbrtowc returns 0 when parsing a NUL character],
+    [gl_cv_func_mbrtowc_nul_retval],
+    [
+      dnl Initial guess, used when cross-compiling or when no suitable locale
+      dnl is present.
+changequote(,)dnl
+      case "$host_os" in
+                       # Guess no on Solaris 8 and 9.
+        solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;;
+                       # Guess yes otherwise.
+        *)             gl_cv_func_mbrtowc_nul_retval="guessing yes" ;;
+      esac
+changequote([,])dnl
+      if test $LOCALE_ZH_CN != none; then
+        AC_RUN_IFELSE(
+          [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  /* This fails on Solaris 8 and 9.  */
+  if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+    {
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, "", 1, &state) != 0)
+        return 1;
+    }
+  return 0;
+}]])],
+          [gl_cv_func_mbrtowc_nul_retval=yes],
+          [gl_cv_func_mbrtowc_nul_retval=no],
+          [:])
+      fi
+    ])
+])
+
+# Prerequisites of lib/mbrtowc.c.
+AC_DEFUN([gl_PREREQ_MBRTOWC], [
+  :
+])
+
+
+dnl From Paul Eggert
+
+dnl This is an override of an autoconf macro.
+
+AC_DEFUN([AC_FUNC_MBRTOWC],
+[
+  dnl Same as AC_FUNC_MBRTOWC in autoconf-2.60.
+  AC_CACHE_CHECK([whether mbrtowc and mbstate_t are properly declared],
+    gl_cv_func_mbrtowc,
+    [AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM(
+            [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+                 included before <wchar.h>.
+                 BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+                 must be included before <wchar.h>.  */
+              #include <stddef.h>
+              #include <stdio.h>
+              #include <time.h>
+              #include <wchar.h>]],
+            [[wchar_t wc;
+              char const s[] = "";
+              size_t n = 1;
+              mbstate_t state;
+              return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));]])],
+       gl_cv_func_mbrtowc=yes,
+       gl_cv_func_mbrtowc=no)])
+  if test $gl_cv_func_mbrtowc = yes; then
+    AC_DEFINE([HAVE_MBRTOWC], [1],
+      [Define to 1 if mbrtowc and mbstate_t are properly declared.])
+  fi
+])
diff --git a/gdb/gnulib/import/m4/mbsinit.m4 b/gdb/gnulib/import/m4/mbsinit.m4
new file mode 100644
index 0000000..da56c3d
--- /dev/null
+++ b/gdb/gnulib/import/m4/mbsinit.m4
@@ -0,0 +1,51 @@
+# mbsinit.m4 serial 8
+dnl Copyright (C) 2008, 2010-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_MBSINIT],
+[
+  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+
+  AC_REQUIRE([AC_TYPE_MBSTATE_T])
+  gl_MBSTATE_T_BROKEN
+
+  AC_CHECK_FUNCS_ONCE([mbsinit])
+  if test $ac_cv_func_mbsinit = no; then
+    HAVE_MBSINIT=0
+    AC_CHECK_DECLS([mbsinit],,, [[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+]])
+    if test $ac_cv_have_decl_mbsinit = yes; then
+      dnl On Minix 3.1.8, the system's <wchar.h> declares mbsinit() although
+      dnl it does not have the function. Avoid a collision with gnulib's
+      dnl replacement.
+      REPLACE_MBSINIT=1
+    fi
+  else
+    if test $REPLACE_MBSTATE_T = 1; then
+      REPLACE_MBSINIT=1
+    else
+      dnl On mingw, mbsinit() always returns 1, which is inappropriate for
+      dnl states produced by mbrtowc() for an incomplete multibyte character
+      dnl in multibyte locales.
+      case "$host_os" in
+        mingw*) REPLACE_MBSINIT=1 ;;
+      esac
+    fi
+  fi
+])
+
+# Prerequisites of lib/mbsinit.c.
+AC_DEFUN([gl_PREREQ_MBSINIT], [
+  :
+])
diff --git a/gdb/gnulib/import/m4/mbsrtowcs.m4 b/gdb/gnulib/import/m4/mbsrtowcs.m4
new file mode 100644
index 0000000..a95f606
--- /dev/null
+++ b/gdb/gnulib/import/m4/mbsrtowcs.m4
@@ -0,0 +1,155 @@
+# mbsrtowcs.m4 serial 13
+dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_MBSRTOWCS],
+[
+  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+
+  AC_REQUIRE([AC_TYPE_MBSTATE_T])
+  gl_MBSTATE_T_BROKEN
+
+  AC_CHECK_FUNCS_ONCE([mbsrtowcs])
+  if test $ac_cv_func_mbsrtowcs = no; then
+    HAVE_MBSRTOWCS=0
+    AC_CHECK_DECLS([mbsrtowcs],,, [[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+]])
+    if test $ac_cv_have_decl_mbsrtowcs = yes; then
+      dnl On Minix 3.1.8, the system's <wchar.h> declares mbsrtowcs() although
+      dnl it does not have the function. Avoid a collision with gnulib's
+      dnl replacement.
+      REPLACE_MBSRTOWCS=1
+    fi
+  else
+    if test $REPLACE_MBSTATE_T = 1; then
+      REPLACE_MBSRTOWCS=1
+    else
+      gl_MBSRTOWCS_WORKS
+      case "$gl_cv_func_mbsrtowcs_works" in
+        *yes) ;;
+        *) REPLACE_MBSRTOWCS=1 ;;
+      esac
+    fi
+  fi
+])
+
+dnl Test whether mbsrtowcs works.
+dnl Result is gl_cv_func_mbsrtowcs_works.
+
+AC_DEFUN([gl_MBSRTOWCS_WORKS],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gt_LOCALE_FR])
+  AC_REQUIRE([gt_LOCALE_FR_UTF8])
+  AC_REQUIRE([gt_LOCALE_JA])
+  AC_REQUIRE([gt_LOCALE_ZH_CN])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether mbsrtowcs works],
+    [gl_cv_func_mbsrtowcs_works],
+    [
+      dnl Initial guess, used when cross-compiling or when no suitable locale
+      dnl is present.
+changequote(,)dnl
+      case "$host_os" in
+                                   # Guess no on HP-UX, Solaris, mingw.
+        hpux* | solaris* | mingw*) gl_cv_func_mbsrtowcs_works="guessing no" ;;
+                                   # Guess yes otherwise.
+        *)                         gl_cv_func_mbsrtowcs_works="guessing yes" ;;
+      esac
+changequote([,])dnl
+      if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then
+        AC_RUN_IFELSE(
+          [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int main ()
+{
+  int result = 0;
+  /* Test whether the function supports a NULL destination argument.
+     This fails on native Windows.  */
+  if (setlocale (LC_ALL, "$LOCALE_FR") != NULL)
+    {
+      const char input[] = "\337er";
+      const char *src = input;
+      mbstate_t state;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbsrtowcs (NULL, &src, 1, &state) != 3
+          || src != input)
+        result |= 1;
+    }
+  /* Test whether the function works when started with a conversion state
+     in non-initial state.  This fails on HP-UX 11.11 and Solaris 10.  */
+  if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+    {
+      const char input[] = "B\303\274\303\237er";
+      mbstate_t state;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (NULL, input + 1, 1, &state) == (size_t)(-2))
+        if (!mbsinit (&state))
+          {
+            const char *src = input + 2;
+            if (mbsrtowcs (NULL, &src, 10, &state) != 4)
+              result |= 2;
+          }
+    }
+  if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+    {
+      const char input[] = "<\306\374\313\334\270\354>";
+      mbstate_t state;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (NULL, input + 3, 1, &state) == (size_t)(-2))
+        if (!mbsinit (&state))
+          {
+            const char *src = input + 4;
+            if (mbsrtowcs (NULL, &src, 10, &state) != 3)
+              result |= 4;
+          }
+    }
+  if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+    {
+      const char input[] = "B\250\271\201\060\211\070er";
+      mbstate_t state;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (NULL, input + 1, 1, &state) == (size_t)(-2))
+        if (!mbsinit (&state))
+          {
+            const char *src = input + 2;
+            if (mbsrtowcs (NULL, &src, 10, &state) != 4)
+              result |= 8;
+          }
+    }
+  return result;
+}]])],
+          [gl_cv_func_mbsrtowcs_works=yes],
+          [gl_cv_func_mbsrtowcs_works=no],
+          [:])
+      fi
+    ])
+])
+
+# Prerequisites of lib/mbsrtowcs.c.
+AC_DEFUN([gl_PREREQ_MBSRTOWCS], [
+  :
+])
diff --git a/gdb/gnulib/import/m4/mbstate_t.m4 b/gdb/gnulib/import/m4/mbstate_t.m4
new file mode 100644
index 0000000..61a8190
--- /dev/null
+++ b/gdb/gnulib/import/m4/mbstate_t.m4
@@ -0,0 +1,41 @@
+# mbstate_t.m4 serial 13
+dnl Copyright (C) 2000-2002, 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# From Paul Eggert.
+
+# BeOS 5 has <wchar.h> but does not define mbstate_t,
+# so you can't declare an object of that type.
+# Check for this incompatibility with Standard C.
+
+# AC_TYPE_MBSTATE_T
+# -----------------
+AC_DEFUN([AC_TYPE_MBSTATE_T],
+[
+   AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl for HP-UX 11.11
+
+   AC_CACHE_CHECK([for mbstate_t], [ac_cv_type_mbstate_t],
+     [AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM(
+           [AC_INCLUDES_DEFAULT[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>]],
+           [[mbstate_t x; return sizeof x;]])],
+        [ac_cv_type_mbstate_t=yes],
+        [ac_cv_type_mbstate_t=no])])
+   if test $ac_cv_type_mbstate_t = yes; then
+     AC_DEFINE([HAVE_MBSTATE_T], [1],
+               [Define to 1 if <wchar.h> declares mbstate_t.])
+   else
+     AC_DEFINE([mbstate_t], [int],
+               [Define to a type if <wchar.h> does not define.])
+   fi
+])
diff --git a/gdb/gnulib/import/m4/memchr.m4 b/gdb/gnulib/import/m4/memchr.m4
new file mode 100644
index 0000000..0040294
--- /dev/null
+++ b/gdb/gnulib/import/m4/memchr.m4
@@ -0,0 +1,88 @@
+# memchr.m4 serial 12
+dnl Copyright (C) 2002-2004, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_FUNC_MEMCHR],
+[
+  dnl Check for prerequisites for memory fence checks.
+  gl_FUNC_MMAP_ANON
+  AC_CHECK_HEADERS_ONCE([sys/mman.h])
+  AC_CHECK_FUNCS_ONCE([mprotect])
+
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  m4_ifdef([gl_FUNC_MEMCHR_OBSOLETE], [
+    dnl These days, we assume memchr is present.  But if support for old
+    dnl platforms is desired:
+    AC_CHECK_FUNCS_ONCE([memchr])
+    if test $ac_cv_func_memchr = no; then
+      HAVE_MEMCHR=0
+    fi
+  ])
+  if test $HAVE_MEMCHR = 1; then
+    # Detect platform-specific bugs in some versions of glibc:
+    # memchr should not dereference anything with length 0
+    #   http://bugzilla.redhat.com/499689
+    # memchr should not dereference overestimated length after a match
+    #   http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737
+    #   http://sourceware.org/bugzilla/show_bug.cgi?id=10162
+    # Assume that memchr works on platforms that lack mprotect.
+    AC_CACHE_CHECK([whether memchr works], [gl_cv_func_memchr_works],
+      [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <string.h>
+#if HAVE_SYS_MMAN_H
+# include <fcntl.h>
+# include <unistd.h>
+# include <sys/types.h>
+# include <sys/mman.h>
+# ifndef MAP_FILE
+#  define MAP_FILE 0
+# endif
+#endif
+]], [[
+  int result = 0;
+  char *fence = NULL;
+#if HAVE_SYS_MMAN_H && HAVE_MPROTECT
+# if HAVE_MAP_ANONYMOUS
+  const int flags = MAP_ANONYMOUS | MAP_PRIVATE;
+  const int fd = -1;
+# else /* !HAVE_MAP_ANONYMOUS */
+  const int flags = MAP_FILE | MAP_PRIVATE;
+  int fd = open ("/dev/zero", O_RDONLY, 0666);
+  if (fd >= 0)
+# endif
+    {
+      int pagesize = getpagesize ();
+      char *two_pages =
+        (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE,
+                       flags, fd, 0);
+      if (two_pages != (char *)(-1)
+          && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0)
+        fence = two_pages + pagesize;
+    }
+#endif
+  if (fence)
+    {
+      if (memchr (fence, 0, 0))
+        result |= 1;
+      strcpy (fence - 9, "12345678");
+      if (memchr (fence - 9, 0, 79) != fence - 1)
+        result |= 2;
+      if (memchr (fence - 1, 0, 3) != fence - 1)
+        result |= 4;
+    }
+  return result;
+]])], [gl_cv_func_memchr_works=yes], [gl_cv_func_memchr_works=no],
+      [dnl Be pessimistic for now.
+       gl_cv_func_memchr_works="guessing no"])])
+    if test "$gl_cv_func_memchr_works" != yes; then
+      REPLACE_MEMCHR=1
+    fi
+  fi
+])
+
+# Prerequisites of lib/memchr.c.
+AC_DEFUN([gl_PREREQ_MEMCHR], [
+  AC_CHECK_HEADERS([bp-sym.h])
+])
diff --git a/gdb/gnulib/import/m4/memmem.m4 b/gdb/gnulib/import/m4/memmem.m4
new file mode 100644
index 0000000..88f9e20
--- /dev/null
+++ b/gdb/gnulib/import/m4/memmem.m4
@@ -0,0 +1,151 @@
+# memmem.m4 serial 24
+dnl Copyright (C) 2002-2004, 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Check that memmem is present and functional.
+AC_DEFUN([gl_FUNC_MEMMEM_SIMPLE],
+[
+  dnl Persuade glibc <string.h> to declare memmem().
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  AC_CHECK_FUNCS([memmem])
+  if test $ac_cv_func_memmem = yes; then
+    HAVE_MEMMEM=1
+  else
+    HAVE_MEMMEM=0
+  fi
+  AC_CHECK_DECLS_ONCE([memmem])
+  if test $ac_cv_have_decl_memmem = no; then
+    HAVE_DECL_MEMMEM=0
+  else
+    dnl Detect http://sourceware.org/bugzilla/show_bug.cgi?id=12092.
+    dnl Also check that we handle empty needles correctly.
+    AC_CACHE_CHECK([whether memmem works],
+      [gl_cv_func_memmem_works_always],
+      [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <string.h> /* for memmem */
+#define P "_EF_BF_BD"
+#define HAYSTACK "F_BD_CE_BD" P P P P "_C3_88_20" P P P "_C3_A7_20" P
+#define NEEDLE P P P P P
+]], [[
+    int result = 0;
+    if (memmem (HAYSTACK, strlen (HAYSTACK), NEEDLE, strlen (NEEDLE)))
+      result |= 1;
+    /* Check for empty needle behavior.  */
+    {
+      const char *haystack = "AAA";
+      if (memmem (haystack, 3, NULL, 0) != haystack)
+        result |= 2;
+    }
+    return result;
+    ]])],
+        [gl_cv_func_memmem_works_always=yes],
+        [gl_cv_func_memmem_works_always=no],
+        [dnl glibc 2.9..2.12 and cygwin 1.7.7 have issue #12092 above.
+         dnl Also empty needles work on glibc >= 2.1 and cygwin >= 1.7.0.
+         dnl uClibc is not affected, since it uses different source code.
+         dnl Assume that it works on all other platforms (even if not linear).
+         AC_EGREP_CPP([Lucky user],
+           [
+#ifdef __GNU_LIBRARY__
+ #include <features.h>
+ #if ((__GLIBC__ == 2 && ((__GLIBC_MINOR > 0 && __GLIBC_MINOR__ < 9) \
+                          || __GLIBC_MINOR__ > 12)) \
+      || (__GLIBC__ > 2)) \
+     || defined __UCLIBC__
+  Lucky user
+ #endif
+#elif defined __CYGWIN__
+ #include <cygwin/version.h>
+ #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7)
+  Lucky user
+ #endif
+#else
+  Lucky user
+#endif
+           ],
+           [gl_cv_func_memmem_works_always="guessing yes"],
+           [gl_cv_func_memmem_works_always="guessing no"])
+        ])
+      ])
+    case "$gl_cv_func_memmem_works_always" in
+      *yes) ;;
+      *)
+        REPLACE_MEMMEM=1
+        ;;
+    esac
+  fi
+  gl_PREREQ_MEMMEM
+]) # gl_FUNC_MEMMEM_SIMPLE
+
+dnl Additionally, check that memmem has linear performance characteristics
+AC_DEFUN([gl_FUNC_MEMMEM],
+[
+  AC_REQUIRE([gl_FUNC_MEMMEM_SIMPLE])
+  if test $HAVE_DECL_MEMMEM = 1 && test $REPLACE_MEMMEM = 0; then
+    AC_CACHE_CHECK([whether memmem works in linear time],
+      [gl_cv_func_memmem_works_fast],
+      [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <signal.h> /* for signal */
+#include <string.h> /* for memmem */
+#include <stdlib.h> /* for malloc */
+#include <unistd.h> /* for alarm */
+static void quit (int sig) { exit (sig + 128); }
+]], [[
+    int result = 0;
+    size_t m = 1000000;
+    char *haystack = (char *) malloc (2 * m + 1);
+    char *needle = (char *) malloc (m + 1);
+    /* Failure to compile this test due to missing alarm is okay,
+       since all such platforms (mingw) also lack memmem.  */
+    signal (SIGALRM, quit);
+    alarm (5);
+    /* Check for quadratic performance.  */
+    if (haystack && needle)
+      {
+        memset (haystack, 'A', 2 * m);
+        haystack[2 * m] = 'B';
+        memset (needle, 'A', m);
+        needle[m] = 'B';
+        if (!memmem (haystack, 2 * m + 1, needle, m + 1))
+          result |= 1;
+      }
+    return result;
+    ]])],
+        [gl_cv_func_memmem_works_fast=yes], [gl_cv_func_memmem_works_fast=no],
+        [dnl Only glibc >= 2.9 and cygwin > 1.7.0 are known to have a
+         dnl memmem that works in linear time.
+         AC_EGREP_CPP([Lucky user],
+           [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 9) || (__GLIBC__ > 2)) \
+     && !defined __UCLIBC__
+  Lucky user
+ #endif
+#endif
+#ifdef __CYGWIN__
+ #include <cygwin/version.h>
+ #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 0)
+  Lucky user
+ #endif
+#endif
+           ],
+           [gl_cv_func_memmem_works_fast="guessing yes"],
+           [gl_cv_func_memmem_works_fast="guessing no"])
+        ])
+      ])
+    case "$gl_cv_func_memmem_works_fast" in
+      *yes) ;;
+      *)
+        REPLACE_MEMMEM=1
+        ;;
+    esac
+  fi
+]) # gl_FUNC_MEMMEM
+
+# Prerequisites of lib/memmem.c.
+AC_DEFUN([gl_PREREQ_MEMMEM], [:])
diff --git a/gdb/gnulib/import/m4/mmap-anon.m4 b/gdb/gnulib/import/m4/mmap-anon.m4
new file mode 100644
index 0000000..748b17d
--- /dev/null
+++ b/gdb/gnulib/import/m4/mmap-anon.m4
@@ -0,0 +1,55 @@
+# mmap-anon.m4 serial 10
+dnl Copyright (C) 2005, 2007, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Detect how mmap can be used to create anonymous (not file-backed) memory
+# mappings.
+# - On Linux, AIX, OSF/1, Solaris, Cygwin, Interix, Haiku, both MAP_ANONYMOUS
+#   and MAP_ANON exist and have the same value.
+# - On HP-UX, only MAP_ANONYMOUS exists.
+# - On Mac OS X, FreeBSD, NetBSD, OpenBSD, only MAP_ANON exists.
+# - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be
+#   used.
+
+AC_DEFUN([gl_FUNC_MMAP_ANON],
+[
+  dnl Persuade glibc <sys/mman.h> to define MAP_ANONYMOUS.
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+  # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it
+  # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is
+  # irrelevant for anonymous mappings.
+  AC_CHECK_FUNC([mmap], [gl_have_mmap=yes], [gl_have_mmap=no])
+
+  # Try to allow MAP_ANONYMOUS.
+  gl_have_mmap_anonymous=no
+  if test $gl_have_mmap = yes; then
+    AC_MSG_CHECKING([for MAP_ANONYMOUS])
+    AC_EGREP_CPP([I cannot identify this map], [
+#include <sys/mman.h>
+#ifdef MAP_ANONYMOUS
+    I cannot identify this map
+#endif
+],
+      [gl_have_mmap_anonymous=yes])
+    if test $gl_have_mmap_anonymous != yes; then
+      AC_EGREP_CPP([I cannot identify this map], [
+#include <sys/mman.h>
+#ifdef MAP_ANON
+    I cannot identify this map
+#endif
+],
+        [AC_DEFINE([MAP_ANONYMOUS], [MAP_ANON],
+          [Define to a substitute value for mmap()'s MAP_ANONYMOUS flag.])
+         gl_have_mmap_anonymous=yes])
+    fi
+    AC_MSG_RESULT([$gl_have_mmap_anonymous])
+    if test $gl_have_mmap_anonymous = yes; then
+      AC_DEFINE([HAVE_MAP_ANONYMOUS], [1],
+        [Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including
+         config.h and <sys/mman.h>.])
+    fi
+  fi
+])
diff --git a/gdb/gnulib/import/m4/multiarch.m4 b/gdb/gnulib/import/m4/multiarch.m4
new file mode 100644
index 0000000..0c288b8
--- /dev/null
+++ b/gdb/gnulib/import/m4/multiarch.m4
@@ -0,0 +1,62 @@
+# multiarch.m4 serial 7
+dnl Copyright (C) 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Determine whether the compiler is or may be producing universal binaries.
+#
+# On Mac OS X 10.5 and later systems, the user can create libraries and
+# executables that work on multiple system types--known as "fat" or
+# "universal" binaries--by specifying multiple '-arch' options to the
+# compiler but only a single '-arch' option to the preprocessor.  Like
+# this:
+#
+#     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+#                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+#                 CPP="gcc -E" CXXCPP="g++ -E"
+#
+# Detect this situation and set APPLE_UNIVERSAL_BUILD accordingly.
+
+AC_DEFUN_ONCE([gl_MULTIARCH],
+[
+  dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN.
+  gl_cv_c_multiarch=no
+  AC_COMPILE_IFELSE(
+    [AC_LANG_SOURCE(
+      [[#ifndef __APPLE_CC__
+         not a universal capable compiler
+        #endif
+        typedef int dummy;
+      ]])],
+    [
+     dnl Check for potential -arch flags.  It is not universal unless
+     dnl there are at least two -arch flags with different values.
+     arch=
+     prev=
+     for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do
+       if test -n "$prev"; then
+         case $word in
+           i?86 | x86_64 | ppc | ppc64)
+             if test -z "$arch" || test "$arch" = "$word"; then
+               arch="$word"
+             else
+               gl_cv_c_multiarch=yes
+             fi
+             ;;
+         esac
+         prev=
+       else
+         if test "x$word" = "x-arch"; then
+           prev=arch
+         fi
+       fi
+     done
+    ])
+  if test $gl_cv_c_multiarch = yes; then
+    APPLE_UNIVERSAL_BUILD=1
+  else
+    APPLE_UNIVERSAL_BUILD=0
+  fi
+  AC_SUBST([APPLE_UNIVERSAL_BUILD])
+])
diff --git a/gdb/gnulib/import/m4/onceonly.m4 b/gdb/gnulib/import/m4/onceonly.m4
new file mode 100644
index 0000000..275d73c
--- /dev/null
+++ b/gdb/gnulib/import/m4/onceonly.m4
@@ -0,0 +1,104 @@
+# onceonly.m4 serial 9
+dnl Copyright (C) 2002-2003, 2005-2006, 2008-2012 Free Software Foundation,
+dnl Inc.
+dnl
+dnl This file is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 3 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This file is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this file.  If not, see <http://www.gnu.org/licenses/>.
+dnl
+dnl As a special exception to the GNU General Public License,
+dnl this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl This file defines some "once only" variants of standard autoconf macros.
+dnl   AC_CHECK_HEADERS_ONCE          like  AC_CHECK_HEADERS
+dnl   AC_CHECK_FUNCS_ONCE            like  AC_CHECK_FUNCS
+dnl   AC_CHECK_DECLS_ONCE            like  AC_CHECK_DECLS
+dnl   AC_REQUIRE([AC_FUNC_STRCOLL])  like  AC_FUNC_STRCOLL
+dnl The advantage is that the check for each of the headers/functions/decls
+dnl will be put only once into the 'configure' file. It keeps the size of
+dnl the 'configure' file down, and avoids redundant output when 'configure'
+dnl is run.
+dnl The drawback is that the checks cannot be conditionalized. If you write
+dnl   if some_condition; then gl_CHECK_HEADERS(stdlib.h); fi
+dnl inside an AC_DEFUNed function, the gl_CHECK_HEADERS macro call expands to
+dnl empty, and the check will be inserted before the body of the AC_DEFUNed
+dnl function.
+
+dnl The original code implemented AC_CHECK_HEADERS_ONCE and AC_CHECK_FUNCS_ONCE
+dnl in terms of AC_DEFUN and AC_REQUIRE. This implementation uses diversions to
+dnl named sections DEFAULTS and INIT_PREPARE in order to check all requested
+dnl headers at once, thus reducing the size of 'configure'. It is known to work
+dnl with autoconf 2.57..2.62 at least . The size reduction is ca. 9%.
+
+dnl Autoconf version 2.59 plus gnulib is required; this file is not needed
+dnl with Autoconf 2.60 or greater. But note that autoconf's implementation of
+dnl AC_CHECK_DECLS_ONCE expects a comma-separated list of symbols as first
+dnl argument!
+AC_PREREQ([2.59])
+
+# AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of
+# AC_CHECK_HEADERS(HEADER1 HEADER2 ...).
+AC_DEFUN([AC_CHECK_HEADERS_ONCE], [
+  :
+  m4_foreach_w([gl_HEADER_NAME], [$1], [
+    AC_DEFUN([gl_CHECK_HEADER_]m4_quote(m4_translit(gl_HEADER_NAME,
+                                                    [./-], [___])), [
+      m4_divert_text([INIT_PREPARE],
+        [gl_header_list="$gl_header_list gl_HEADER_NAME"])
+      gl_HEADERS_EXPANSION
+      AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_HEADER_NAME])),
+        [Define to 1 if you have the <]m4_defn([gl_HEADER_NAME])[> header file.])
+    ])
+    AC_REQUIRE([gl_CHECK_HEADER_]m4_quote(m4_translit(gl_HEADER_NAME,
+                                                      [./-], [___])))
+  ])
+])
+m4_define([gl_HEADERS_EXPANSION], [
+  m4_divert_text([DEFAULTS], [gl_header_list=])
+  AC_CHECK_HEADERS([$gl_header_list])
+  m4_define([gl_HEADERS_EXPANSION], [])
+])
+
+# AC_CHECK_FUNCS_ONCE(FUNC1 FUNC2 ...) is a once-only variant of
+# AC_CHECK_FUNCS(FUNC1 FUNC2 ...).
+AC_DEFUN([AC_CHECK_FUNCS_ONCE], [
+  :
+  m4_foreach_w([gl_FUNC_NAME], [$1], [
+    AC_DEFUN([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]), [
+      m4_divert_text([INIT_PREPARE],
+        [gl_func_list="$gl_func_list gl_FUNC_NAME"])
+      gl_FUNCS_EXPANSION
+      AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_FUNC_NAME])),
+        [Define to 1 if you have the ']m4_defn([gl_FUNC_NAME])[' function.])
+    ])
+    AC_REQUIRE([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]))
+  ])
+])
+m4_define([gl_FUNCS_EXPANSION], [
+  m4_divert_text([DEFAULTS], [gl_func_list=])
+  AC_CHECK_FUNCS([$gl_func_list])
+  m4_define([gl_FUNCS_EXPANSION], [])
+])
+
+# AC_CHECK_DECLS_ONCE(DECL1 DECL2 ...) is a once-only variant of
+# AC_CHECK_DECLS(DECL1, DECL2, ...).
+AC_DEFUN([AC_CHECK_DECLS_ONCE], [
+  :
+  m4_foreach_w([gl_DECL_NAME], [$1], [
+    AC_DEFUN([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]), [
+      AC_CHECK_DECLS(m4_defn([gl_DECL_NAME]))
+    ])
+    AC_REQUIRE([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]))
+  ])
+])
diff --git a/gdb/gnulib/import/m4/stdbool.m4 b/gdb/gnulib/import/m4/stdbool.m4
new file mode 100644
index 0000000..eabfa64
--- /dev/null
+++ b/gdb/gnulib/import/m4/stdbool.m4
@@ -0,0 +1,100 @@
+# Check for stdbool.h that conforms to C99.
+
+dnl Copyright (C) 2002-2006, 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+#serial 5
+
+# Prepare for substituting <stdbool.h> if it is not supported.
+
+AC_DEFUN([AM_STDBOOL_H],
+[
+  AC_REQUIRE([AC_CHECK_HEADER_STDBOOL])
+
+  # Define two additional variables used in the Makefile substitution.
+
+  if test "$ac_cv_header_stdbool_h" = yes; then
+    STDBOOL_H=''
+  else
+    STDBOOL_H='stdbool.h'
+  fi
+  AC_SUBST([STDBOOL_H])
+  AM_CONDITIONAL([GL_GENERATE_STDBOOL_H], [test -n "$STDBOOL_H"])
+
+  if test "$ac_cv_type__Bool" = yes; then
+    HAVE__BOOL=1
+  else
+    HAVE__BOOL=0
+  fi
+  AC_SUBST([HAVE__BOOL])
+])
+
+# AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future.
+AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H])
+
+# This version of the macro is needed in autoconf <= 2.68.
+
+AC_DEFUN([AC_CHECK_HEADER_STDBOOL],
+  [AC_CACHE_CHECK([for stdbool.h that conforms to C99],
+     [ac_cv_header_stdbool_h],
+     [AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[
+             #include <stdbool.h>
+             #ifndef bool
+              "error: bool is not defined"
+             #endif
+             #ifndef false
+              "error: false is not defined"
+             #endif
+             #if false
+              "error: false is not 0"
+             #endif
+             #ifndef true
+              "error: true is not defined"
+             #endif
+             #if true != 1
+              "error: true is not 1"
+             #endif
+             #ifndef __bool_true_false_are_defined
+              "error: __bool_true_false_are_defined is not defined"
+             #endif
+
+             struct s { _Bool s: 1; _Bool t; } s;
+
+             char a[true == 1 ? 1 : -1];
+             char b[false == 0 ? 1 : -1];
+             char c[__bool_true_false_are_defined == 1 ? 1 : -1];
+             char d[(bool) 0.5 == true ? 1 : -1];
+             /* See body of main program for 'e'.  */
+             char f[(_Bool) 0.0 == false ? 1 : -1];
+             char g[true];
+             char h[sizeof (_Bool)];
+             char i[sizeof s.t];
+             enum { j = false, k = true, l = false * true, m = true * 256 };
+             /* The following fails for
+                HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
+             _Bool n[m];
+             char o[sizeof n == m * sizeof n[0] ? 1 : -1];
+             char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
+             /* Catch a bug in an HP-UX C compiler.  See
+                http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+                http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+              */
+             _Bool q = true;
+             _Bool *pq = &q;
+           ]],
+           [[
+             bool e = &s;
+             *pq |= q;
+             *pq |= ! q;
+             /* Refer to every declared value, to avoid compiler optimizations.  */
+             return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
+                     + !m + !n + !o + !p + !q + !pq);
+           ]])],
+        [ac_cv_header_stdbool_h=yes],
+        [ac_cv_header_stdbool_h=no])])
+   AC_CHECK_TYPES([_Bool])
+])
diff --git a/gdb/gnulib/import/m4/stddef_h.m4 b/gdb/gnulib/import/m4/stddef_h.m4
new file mode 100644
index 0000000..cc11609
--- /dev/null
+++ b/gdb/gnulib/import/m4/stddef_h.m4
@@ -0,0 +1,47 @@
+dnl A placeholder for POSIX 2008 <stddef.h>, for platforms that have issues.
+# stddef_h.m4 serial 4
+dnl Copyright (C) 2009-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_STDDEF_H],
+[
+  AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
+  AC_REQUIRE([gt_TYPE_WCHAR_T])
+  STDDEF_H=
+  if test $gt_cv_c_wchar_t = no; then
+    HAVE_WCHAR_T=0
+    STDDEF_H=stddef.h
+  fi
+  AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions],
+    [gl_cv_decl_null_works],
+    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stddef.h>
+      int test[2 * (sizeof NULL == sizeof (void *)) -1];
+]])],
+      [gl_cv_decl_null_works=yes],
+      [gl_cv_decl_null_works=no])])
+  if test $gl_cv_decl_null_works = no; then
+    REPLACE_NULL=1
+    STDDEF_H=stddef.h
+  fi
+  AC_SUBST([STDDEF_H])
+  AM_CONDITIONAL([GL_GENERATE_STDDEF_H], [test -n "$STDDEF_H"])
+  if test -n "$STDDEF_H"; then
+    gl_NEXT_HEADERS([stddef.h])
+  fi
+])
+
+AC_DEFUN([gl_STDDEF_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+])
+
+AC_DEFUN([gl_STDDEF_H_DEFAULTS],
+[
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  REPLACE_NULL=0;                AC_SUBST([REPLACE_NULL])
+  HAVE_WCHAR_T=1;                AC_SUBST([HAVE_WCHAR_T])
+])
diff --git a/gdb/gnulib/import/m4/stdint.m4 b/gdb/gnulib/import/m4/stdint.m4
new file mode 100644
index 0000000..28d342e
--- /dev/null
+++ b/gdb/gnulib/import/m4/stdint.m4
@@ -0,0 +1,484 @@
+# stdint.m4 serial 43
+dnl Copyright (C) 2001-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert and Bruno Haible.
+dnl Test whether <stdint.h> is supported or must be substituted.
+
+AC_DEFUN_ONCE([gl_STDINT_H],
+[
+  AC_PREREQ([2.59])dnl
+
+  dnl Check for long long int and unsigned long long int.
+  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
+  if test $ac_cv_type_long_long_int = yes; then
+    HAVE_LONG_LONG_INT=1
+  else
+    HAVE_LONG_LONG_INT=0
+  fi
+  AC_SUBST([HAVE_LONG_LONG_INT])
+  AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+    HAVE_UNSIGNED_LONG_LONG_INT=1
+  else
+    HAVE_UNSIGNED_LONG_LONG_INT=0
+  fi
+  AC_SUBST([HAVE_UNSIGNED_LONG_LONG_INT])
+
+  dnl Check for <wchar.h>, in the same way as gl_WCHAR_H does.
+  AC_CHECK_HEADERS_ONCE([wchar.h])
+  if test $ac_cv_header_wchar_h = yes; then
+    HAVE_WCHAR_H=1
+  else
+    HAVE_WCHAR_H=0
+  fi
+  AC_SUBST([HAVE_WCHAR_H])
+
+  dnl Check for <inttypes.h>.
+  dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h.
+  if test $ac_cv_header_inttypes_h = yes; then
+    HAVE_INTTYPES_H=1
+  else
+    HAVE_INTTYPES_H=0
+  fi
+  AC_SUBST([HAVE_INTTYPES_H])
+
+  dnl Check for <sys/types.h>.
+  dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_sys_types_h.
+  if test $ac_cv_header_sys_types_h = yes; then
+    HAVE_SYS_TYPES_H=1
+  else
+    HAVE_SYS_TYPES_H=0
+  fi
+  AC_SUBST([HAVE_SYS_TYPES_H])
+
+  gl_CHECK_NEXT_HEADERS([stdint.h])
+  if test $ac_cv_header_stdint_h = yes; then
+    HAVE_STDINT_H=1
+  else
+    HAVE_STDINT_H=0
+  fi
+  AC_SUBST([HAVE_STDINT_H])
+
+  dnl Now see whether we need a substitute <stdint.h>.
+  if test $ac_cv_header_stdint_h = yes; then
+    AC_CACHE_CHECK([whether stdint.h conforms to C99],
+      [gl_cv_header_working_stdint_h],
+      [gl_cv_header_working_stdint_h=no
+       AC_COMPILE_IFELSE([
+         AC_LANG_PROGRAM([[
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>.  */
+#if !(defined WCHAR_MIN && defined WCHAR_MAX)
+#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>"
+#endif
+]
+gl_STDINT_INCLUDES
+[
+#ifdef INT8_MAX
+int8_t a1 = INT8_MAX;
+int8_t a1min = INT8_MIN;
+#endif
+#ifdef INT16_MAX
+int16_t a2 = INT16_MAX;
+int16_t a2min = INT16_MIN;
+#endif
+#ifdef INT32_MAX
+int32_t a3 = INT32_MAX;
+int32_t a3min = INT32_MIN;
+#endif
+#ifdef INT64_MAX
+int64_t a4 = INT64_MAX;
+int64_t a4min = INT64_MIN;
+#endif
+#ifdef UINT8_MAX
+uint8_t b1 = UINT8_MAX;
+#else
+typedef int b1[(unsigned char) -1 != 255 ? 1 : -1];
+#endif
+#ifdef UINT16_MAX
+uint16_t b2 = UINT16_MAX;
+#endif
+#ifdef UINT32_MAX
+uint32_t b3 = UINT32_MAX;
+#endif
+#ifdef UINT64_MAX
+uint64_t b4 = UINT64_MAX;
+#endif
+int_least8_t c1 = INT8_C (0x7f);
+int_least8_t c1max = INT_LEAST8_MAX;
+int_least8_t c1min = INT_LEAST8_MIN;
+int_least16_t c2 = INT16_C (0x7fff);
+int_least16_t c2max = INT_LEAST16_MAX;
+int_least16_t c2min = INT_LEAST16_MIN;
+int_least32_t c3 = INT32_C (0x7fffffff);
+int_least32_t c3max = INT_LEAST32_MAX;
+int_least32_t c3min = INT_LEAST32_MIN;
+int_least64_t c4 = INT64_C (0x7fffffffffffffff);
+int_least64_t c4max = INT_LEAST64_MAX;
+int_least64_t c4min = INT_LEAST64_MIN;
+uint_least8_t d1 = UINT8_C (0xff);
+uint_least8_t d1max = UINT_LEAST8_MAX;
+uint_least16_t d2 = UINT16_C (0xffff);
+uint_least16_t d2max = UINT_LEAST16_MAX;
+uint_least32_t d3 = UINT32_C (0xffffffff);
+uint_least32_t d3max = UINT_LEAST32_MAX;
+uint_least64_t d4 = UINT64_C (0xffffffffffffffff);
+uint_least64_t d4max = UINT_LEAST64_MAX;
+int_fast8_t e1 = INT_FAST8_MAX;
+int_fast8_t e1min = INT_FAST8_MIN;
+int_fast16_t e2 = INT_FAST16_MAX;
+int_fast16_t e2min = INT_FAST16_MIN;
+int_fast32_t e3 = INT_FAST32_MAX;
+int_fast32_t e3min = INT_FAST32_MIN;
+int_fast64_t e4 = INT_FAST64_MAX;
+int_fast64_t e4min = INT_FAST64_MIN;
+uint_fast8_t f1 = UINT_FAST8_MAX;
+uint_fast16_t f2 = UINT_FAST16_MAX;
+uint_fast32_t f3 = UINT_FAST32_MAX;
+uint_fast64_t f4 = UINT_FAST64_MAX;
+#ifdef INTPTR_MAX
+intptr_t g = INTPTR_MAX;
+intptr_t gmin = INTPTR_MIN;
+#endif
+#ifdef UINTPTR_MAX
+uintptr_t h = UINTPTR_MAX;
+#endif
+intmax_t i = INTMAX_MAX;
+uintmax_t j = UINTMAX_MAX;
+
+#include <limits.h> /* for CHAR_BIT */
+#define TYPE_MINIMUM(t) \
+  ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t)))
+#define TYPE_MAXIMUM(t) \
+  ((t) ((t) 0 < (t) -1 \
+        ? (t) -1 \
+        : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
+struct s {
+  int check_PTRDIFF:
+      PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
+      && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
+      ? 1 : -1;
+  /* Detect bug in FreeBSD 6.0 / ia64.  */
+  int check_SIG_ATOMIC:
+      SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
+      && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
+      ? 1 : -1;
+  int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1;
+  int check_WCHAR:
+      WCHAR_MIN == TYPE_MINIMUM (wchar_t)
+      && WCHAR_MAX == TYPE_MAXIMUM (wchar_t)
+      ? 1 : -1;
+  /* Detect bug in mingw.  */
+  int check_WINT:
+      WINT_MIN == TYPE_MINIMUM (wint_t)
+      && WINT_MAX == TYPE_MAXIMUM (wint_t)
+      ? 1 : -1;
+
+  /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others.  */
+  int check_UINT8_C:
+        (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1;
+  int check_UINT16_C:
+        (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1;
+
+  /* Detect bugs in OpenBSD 3.9 stdint.h.  */
+#ifdef UINT8_MAX
+  int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1;
+#endif
+#ifdef UINT16_MAX
+  int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1;
+#endif
+#ifdef UINT32_MAX
+  int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1;
+#endif
+#ifdef UINT64_MAX
+  int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1;
+#endif
+  int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1;
+  int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1;
+  int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1;
+  int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1;
+  int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1;
+  int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1;
+  int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1;
+  int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1;
+  int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1;
+  int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1;
+  int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1;
+};
+         ]])],
+         [dnl Determine whether the various *_MIN, *_MAX macros are usable
+          dnl in preprocessor expression. We could do it by compiling a test
+          dnl program for each of these macros. It is faster to run a program
+          dnl that inspects the macro expansion.
+          dnl This detects a bug on HP-UX 11.23/ia64.
+          AC_RUN_IFELSE([
+            AC_LANG_PROGRAM([[
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+]
+gl_STDINT_INCLUDES
+[
+#include <stdio.h>
+#include <string.h>
+#define MVAL(macro) MVAL1(macro)
+#define MVAL1(expression) #expression
+static const char *macro_values[] =
+  {
+#ifdef INT8_MAX
+    MVAL (INT8_MAX),
+#endif
+#ifdef INT16_MAX
+    MVAL (INT16_MAX),
+#endif
+#ifdef INT32_MAX
+    MVAL (INT32_MAX),
+#endif
+#ifdef INT64_MAX
+    MVAL (INT64_MAX),
+#endif
+#ifdef UINT8_MAX
+    MVAL (UINT8_MAX),
+#endif
+#ifdef UINT16_MAX
+    MVAL (UINT16_MAX),
+#endif
+#ifdef UINT32_MAX
+    MVAL (UINT32_MAX),
+#endif
+#ifdef UINT64_MAX
+    MVAL (UINT64_MAX),
+#endif
+    NULL
+  };
+]], [[
+  const char **mv;
+  for (mv = macro_values; *mv != NULL; mv++)
+    {
+      const char *value = *mv;
+      /* Test whether it looks like a cast expression.  */
+      if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0
+          || strncmp (value, "((unsigned short)"/*)*/, 17) == 0
+          || strncmp (value, "((unsigned char)"/*)*/, 16) == 0
+          || strncmp (value, "((int)"/*)*/, 6) == 0
+          || strncmp (value, "((signed short)"/*)*/, 15) == 0
+          || strncmp (value, "((signed char)"/*)*/, 14) == 0)
+        return mv - macro_values + 1;
+    }
+  return 0;
+]])],
+              [gl_cv_header_working_stdint_h=yes],
+              [],
+              [dnl When cross-compiling, assume it works.
+               gl_cv_header_working_stdint_h=yes
+              ])
+         ])
+      ])
+  fi
+  if test "$gl_cv_header_working_stdint_h" = yes; then
+    STDINT_H=
+  else
+    dnl Check for <sys/inttypes.h>, and for
+    dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5).
+    AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h])
+    if test $ac_cv_header_sys_inttypes_h = yes; then
+      HAVE_SYS_INTTYPES_H=1
+    else
+      HAVE_SYS_INTTYPES_H=0
+    fi
+    AC_SUBST([HAVE_SYS_INTTYPES_H])
+    if test $ac_cv_header_sys_bitypes_h = yes; then
+      HAVE_SYS_BITYPES_H=1
+    else
+      HAVE_SYS_BITYPES_H=0
+    fi
+    AC_SUBST([HAVE_SYS_BITYPES_H])
+
+    gl_STDINT_TYPE_PROPERTIES
+    STDINT_H=stdint.h
+  fi
+  AC_SUBST([STDINT_H])
+  AM_CONDITIONAL([GL_GENERATE_STDINT_H], [test -n "$STDINT_H"])
+])
+
+dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES)
+dnl Determine the size of each of the given types in bits.
+AC_DEFUN([gl_STDINT_BITSIZEOF],
+[
+  dnl Use a shell loop, to avoid bloating configure, and
+  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
+  dnl   config.h.in,
+  dnl - extra AC_SUBST calls, so that the right substitutions are made.
+  m4_foreach_w([gltype], [$1],
+    [AH_TEMPLATE([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]),
+       [Define to the number of bits in type ']gltype['.])])
+  for gltype in $1 ; do
+    AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}],
+      [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT],
+         [$2
+#include <limits.h>], [result=unknown])
+       eval gl_cv_bitsizeof_${gltype}=\$result
+      ])
+    eval result=\$gl_cv_bitsizeof_${gltype}
+    if test $result = unknown; then
+      dnl Use a nonempty default, because some compilers, such as IRIX 5 cc,
+      dnl do a syntax check even on unused #if conditions and give an error
+      dnl on valid C code like this:
+      dnl   #if 0
+      dnl   # if  > 32
+      dnl   # endif
+      dnl   #endif
+      result=0
+    fi
+    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result])
+    eval BITSIZEOF_${GLTYPE}=\$result
+  done
+  m4_foreach_w([gltype], [$1],
+    [AC_SUBST([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))])
+])
+
+dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES)
+dnl Determine the signedness of each of the given types.
+dnl Define HAVE_SIGNED_TYPE if type is signed.
+AC_DEFUN([gl_CHECK_TYPES_SIGNED],
+[
+  dnl Use a shell loop, to avoid bloating configure, and
+  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
+  dnl   config.h.in,
+  dnl - extra AC_SUBST calls, so that the right substitutions are made.
+  m4_foreach_w([gltype], [$1],
+    [AH_TEMPLATE([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]),
+       [Define to 1 if ']gltype[' is a signed integer type.])])
+  for gltype in $1 ; do
+    AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed],
+      [AC_COMPILE_IFELSE(
+         [AC_LANG_PROGRAM([$2[
+            int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])],
+         result=yes, result=no)
+       eval gl_cv_type_${gltype}_signed=\$result
+      ])
+    eval result=\$gl_cv_type_${gltype}_signed
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    if test "$result" = yes; then
+      AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1])
+      eval HAVE_SIGNED_${GLTYPE}=1
+    else
+      eval HAVE_SIGNED_${GLTYPE}=0
+    fi
+  done
+  m4_foreach_w([gltype], [$1],
+    [AC_SUBST([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))])
+])
+
+dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES)
+dnl Determine the suffix to use for integer constants of the given types.
+dnl Define t_SUFFIX for each such type.
+AC_DEFUN([gl_INTEGER_TYPE_SUFFIX],
+[
+  dnl Use a shell loop, to avoid bloating configure, and
+  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
+  dnl   config.h.in,
+  dnl - extra AC_SUBST calls, so that the right substitutions are made.
+  m4_foreach_w([gltype], [$1],
+    [AH_TEMPLATE(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX],
+       [Define to l, ll, u, ul, ull, etc., as suitable for
+        constants of type ']gltype['.])])
+  for gltype in $1 ; do
+    AC_CACHE_CHECK([for $gltype integer literal suffix],
+      [gl_cv_type_${gltype}_suffix],
+      [eval gl_cv_type_${gltype}_suffix=no
+       eval result=\$gl_cv_type_${gltype}_signed
+       if test "$result" = yes; then
+         glsufu=
+       else
+         glsufu=u
+       fi
+       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
+         case $glsuf in
+           '')  gltype1='int';;
+           l)   gltype1='long int';;
+           ll)  gltype1='long long int';;
+           i64) gltype1='__int64';;
+           u)   gltype1='unsigned int';;
+           ul)  gltype1='unsigned long int';;
+           ull) gltype1='unsigned long long int';;
+           ui64)gltype1='unsigned __int64';;
+         esac
+         AC_COMPILE_IFELSE(
+           [AC_LANG_PROGRAM([$2[
+              extern $gltype foo;
+              extern $gltype1 foo;]])],
+           [eval gl_cv_type_${gltype}_suffix=\$glsuf])
+         eval result=\$gl_cv_type_${gltype}_suffix
+         test "$result" != no && break
+       done])
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    eval result=\$gl_cv_type_${gltype}_suffix
+    test "$result" = no && result=
+    eval ${GLTYPE}_SUFFIX=\$result
+    AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result])
+  done
+  m4_foreach_w([gltype], [$1],
+    [AC_SUBST(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])])
+])
+
+dnl gl_STDINT_INCLUDES
+AC_DEFUN([gl_STDINT_INCLUDES],
+[[
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+]])
+
+dnl gl_STDINT_TYPE_PROPERTIES
+dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t
+dnl of interest to stdint.in.h.
+AC_DEFUN([gl_STDINT_TYPE_PROPERTIES],
+[
+  AC_REQUIRE([gl_MULTIARCH])
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+    gl_STDINT_BITSIZEOF([ptrdiff_t size_t],
+      [gl_STDINT_INCLUDES])
+  fi
+  gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t],
+    [gl_STDINT_INCLUDES])
+  gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t],
+    [gl_STDINT_INCLUDES])
+  gl_cv_type_ptrdiff_t_signed=yes
+  gl_cv_type_size_t_signed=no
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+    gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t],
+      [gl_STDINT_INCLUDES])
+  fi
+  gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t],
+    [gl_STDINT_INCLUDES])
+
+  dnl If wint_t is smaller than 'int', it cannot satisfy the ISO C 99
+  dnl requirement that wint_t is "unchanged by default argument promotions".
+  dnl In this case gnulib's <wchar.h> and <wctype.h> override wint_t.
+  dnl Set the variable BITSIZEOF_WINT_T accordingly.
+  if test $BITSIZEOF_WINT_T -lt 32; then
+    BITSIZEOF_WINT_T=32
+  fi
+])
+
+dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
+dnl Remove this when we can assume autoconf >= 2.61.
+m4_ifdef([AC_COMPUTE_INT], [], [
+  AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
+])
+
+# Hey Emacs!
+# Local Variables:
+# indent-tabs-mode: nil
+# End:
diff --git a/gdb/gnulib/import/m4/string_h.m4 b/gdb/gnulib/import/m4/string_h.m4
new file mode 100644
index 0000000..5677e09
--- /dev/null
+++ b/gdb/gnulib/import/m4/string_h.m4
@@ -0,0 +1,120 @@
+# Configure a GNU-like replacement for <string.h>.
+
+# Copyright (C) 2007-2012 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 21
+
+# Written by Paul Eggert.
+
+AC_DEFUN([gl_HEADER_STRING_H],
+[
+  dnl Use AC_REQUIRE here, so that the default behavior below is expanded
+  dnl once only, before all statements that occur in other macros.
+  AC_REQUIRE([gl_HEADER_STRING_H_BODY])
+])
+
+AC_DEFUN([gl_HEADER_STRING_H_BODY],
+[
+  AC_REQUIRE([AC_C_RESTRICT])
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  gl_NEXT_HEADERS([string.h])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use, and which is not
+  dnl guaranteed by C89.
+  gl_WARN_ON_USE_PREPARE([[#include <string.h>
+    ]],
+    [ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul
+     strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r
+     strerror_r strsignal strverscmp])
+])
+
+AC_DEFUN([gl_STRING_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
+[
+  GNULIB_FFSL=0;        AC_SUBST([GNULIB_FFSL])
+  GNULIB_FFSLL=0;       AC_SUBST([GNULIB_FFSLL])
+  GNULIB_MEMCHR=0;      AC_SUBST([GNULIB_MEMCHR])
+  GNULIB_MEMMEM=0;      AC_SUBST([GNULIB_MEMMEM])
+  GNULIB_MEMPCPY=0;     AC_SUBST([GNULIB_MEMPCPY])
+  GNULIB_MEMRCHR=0;     AC_SUBST([GNULIB_MEMRCHR])
+  GNULIB_RAWMEMCHR=0;   AC_SUBST([GNULIB_RAWMEMCHR])
+  GNULIB_STPCPY=0;      AC_SUBST([GNULIB_STPCPY])
+  GNULIB_STPNCPY=0;     AC_SUBST([GNULIB_STPNCPY])
+  GNULIB_STRCHRNUL=0;   AC_SUBST([GNULIB_STRCHRNUL])
+  GNULIB_STRDUP=0;      AC_SUBST([GNULIB_STRDUP])
+  GNULIB_STRNCAT=0;     AC_SUBST([GNULIB_STRNCAT])
+  GNULIB_STRNDUP=0;     AC_SUBST([GNULIB_STRNDUP])
+  GNULIB_STRNLEN=0;     AC_SUBST([GNULIB_STRNLEN])
+  GNULIB_STRPBRK=0;     AC_SUBST([GNULIB_STRPBRK])
+  GNULIB_STRSEP=0;      AC_SUBST([GNULIB_STRSEP])
+  GNULIB_STRSTR=0;      AC_SUBST([GNULIB_STRSTR])
+  GNULIB_STRCASESTR=0;  AC_SUBST([GNULIB_STRCASESTR])
+  GNULIB_STRTOK_R=0;    AC_SUBST([GNULIB_STRTOK_R])
+  GNULIB_MBSLEN=0;      AC_SUBST([GNULIB_MBSLEN])
+  GNULIB_MBSNLEN=0;     AC_SUBST([GNULIB_MBSNLEN])
+  GNULIB_MBSCHR=0;      AC_SUBST([GNULIB_MBSCHR])
+  GNULIB_MBSRCHR=0;     AC_SUBST([GNULIB_MBSRCHR])
+  GNULIB_MBSSTR=0;      AC_SUBST([GNULIB_MBSSTR])
+  GNULIB_MBSCASECMP=0;  AC_SUBST([GNULIB_MBSCASECMP])
+  GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP])
+  GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP])
+  GNULIB_MBSCASESTR=0;  AC_SUBST([GNULIB_MBSCASESTR])
+  GNULIB_MBSCSPN=0;     AC_SUBST([GNULIB_MBSCSPN])
+  GNULIB_MBSPBRK=0;     AC_SUBST([GNULIB_MBSPBRK])
+  GNULIB_MBSSPN=0;      AC_SUBST([GNULIB_MBSSPN])
+  GNULIB_MBSSEP=0;      AC_SUBST([GNULIB_MBSSEP])
+  GNULIB_MBSTOK_R=0;    AC_SUBST([GNULIB_MBSTOK_R])
+  GNULIB_STRERROR=0;    AC_SUBST([GNULIB_STRERROR])
+  GNULIB_STRERROR_R=0;  AC_SUBST([GNULIB_STRERROR_R])
+  GNULIB_STRSIGNAL=0;   AC_SUBST([GNULIB_STRSIGNAL])
+  GNULIB_STRVERSCMP=0;  AC_SUBST([GNULIB_STRVERSCMP])
+  HAVE_MBSLEN=0;        AC_SUBST([HAVE_MBSLEN])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_FFSL=1;                  AC_SUBST([HAVE_FFSL])
+  HAVE_FFSLL=1;                 AC_SUBST([HAVE_FFSLL])
+  HAVE_MEMCHR=1;                AC_SUBST([HAVE_MEMCHR])
+  HAVE_DECL_MEMMEM=1;           AC_SUBST([HAVE_DECL_MEMMEM])
+  HAVE_MEMPCPY=1;               AC_SUBST([HAVE_MEMPCPY])
+  HAVE_DECL_MEMRCHR=1;          AC_SUBST([HAVE_DECL_MEMRCHR])
+  HAVE_RAWMEMCHR=1;             AC_SUBST([HAVE_RAWMEMCHR])
+  HAVE_STPCPY=1;                AC_SUBST([HAVE_STPCPY])
+  HAVE_STPNCPY=1;               AC_SUBST([HAVE_STPNCPY])
+  HAVE_STRCHRNUL=1;             AC_SUBST([HAVE_STRCHRNUL])
+  HAVE_DECL_STRDUP=1;           AC_SUBST([HAVE_DECL_STRDUP])
+  HAVE_DECL_STRNDUP=1;          AC_SUBST([HAVE_DECL_STRNDUP])
+  HAVE_DECL_STRNLEN=1;          AC_SUBST([HAVE_DECL_STRNLEN])
+  HAVE_STRPBRK=1;               AC_SUBST([HAVE_STRPBRK])
+  HAVE_STRSEP=1;                AC_SUBST([HAVE_STRSEP])
+  HAVE_STRCASESTR=1;            AC_SUBST([HAVE_STRCASESTR])
+  HAVE_DECL_STRTOK_R=1;         AC_SUBST([HAVE_DECL_STRTOK_R])
+  HAVE_DECL_STRERROR_R=1;       AC_SUBST([HAVE_DECL_STRERROR_R])
+  HAVE_DECL_STRSIGNAL=1;        AC_SUBST([HAVE_DECL_STRSIGNAL])
+  HAVE_STRVERSCMP=1;            AC_SUBST([HAVE_STRVERSCMP])
+  REPLACE_MEMCHR=0;             AC_SUBST([REPLACE_MEMCHR])
+  REPLACE_MEMMEM=0;             AC_SUBST([REPLACE_MEMMEM])
+  REPLACE_STPNCPY=0;            AC_SUBST([REPLACE_STPNCPY])
+  REPLACE_STRDUP=0;             AC_SUBST([REPLACE_STRDUP])
+  REPLACE_STRSTR=0;             AC_SUBST([REPLACE_STRSTR])
+  REPLACE_STRCASESTR=0;         AC_SUBST([REPLACE_STRCASESTR])
+  REPLACE_STRCHRNUL=0;          AC_SUBST([REPLACE_STRCHRNUL])
+  REPLACE_STRERROR=0;           AC_SUBST([REPLACE_STRERROR])
+  REPLACE_STRERROR_R=0;         AC_SUBST([REPLACE_STRERROR_R])
+  REPLACE_STRNCAT=0;            AC_SUBST([REPLACE_STRNCAT])
+  REPLACE_STRNDUP=0;            AC_SUBST([REPLACE_STRNDUP])
+  REPLACE_STRNLEN=0;            AC_SUBST([REPLACE_STRNLEN])
+  REPLACE_STRSIGNAL=0;          AC_SUBST([REPLACE_STRSIGNAL])
+  REPLACE_STRTOK_R=0;           AC_SUBST([REPLACE_STRTOK_R])
+  UNDEFINE_STRTOK_R=0;          AC_SUBST([UNDEFINE_STRTOK_R])
+])
diff --git a/gdb/gnulib/import/m4/warn-on-use.m4 b/gdb/gnulib/import/m4/warn-on-use.m4
new file mode 100644
index 0000000..a77802e
--- /dev/null
+++ b/gdb/gnulib/import/m4/warn-on-use.m4
@@ -0,0 +1,47 @@
+# warn-on-use.m4 serial 5
+dnl Copyright (C) 2010-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES)
+# ---------------------------------------
+# For each whitespace-separated element in the list of NAMES, define
+# HAVE_RAW_DECL_name if the function has a declaration among INCLUDES
+# even after being undefined as a macro.
+#
+# See warn-on-use.h for some hints on how to poison function names, as
+# well as ideas on poisoning global variables and macros.  NAMES may
+# include global variables, but remember that only functions work with
+# _GL_WARN_ON_USE.  Typically, INCLUDES only needs to list a single
+# header, but if the replacement header pulls in other headers because
+# some systems declare functions in the wrong header, then INCLUDES
+# should do likewise.
+#
+# It is generally safe to assume declarations for functions declared
+# in the intersection of C89 and C11 (such as printf) without
+# needing gl_WARN_ON_USE_PREPARE.
+AC_DEFUN([gl_WARN_ON_USE_PREPARE],
+[
+  m4_foreach_w([gl_decl], [$2],
+    [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])),
+      [Define to 1 if ]m4_defn([gl_decl])[ is declared even after
+       undefining macros.])])dnl
+dnl FIXME: gl_Symbol must be used unquoted until we can assume
+dnl autoconf 2.64 or newer.
+  for gl_func in m4_flatten([$2]); do
+    AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl
+    AC_CACHE_CHECK([whether $gl_func is declared without a macro],
+      gl_Symbol,
+      [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1],
+[@%:@undef $gl_func
+  (void) $gl_func;])],
+        [AS_VAR_SET(gl_Symbol, [yes])], [AS_VAR_SET(gl_Symbol, [no])])])
+    AS_VAR_IF(gl_Symbol, [yes],
+      [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1])
+       dnl shortcut - if the raw declaration exists, then set a cache
+       dnl variable to allow skipping any later AC_CHECK_DECL efforts
+       eval ac_cv_have_decl_$gl_func=yes])
+    AS_VAR_POPDEF([gl_Symbol])dnl
+  done
+])
diff --git a/gdb/gnulib/import/m4/wchar_h.m4 b/gdb/gnulib/import/m4/wchar_h.m4
new file mode 100644
index 0000000..c7a8b2d
--- /dev/null
+++ b/gdb/gnulib/import/m4/wchar_h.m4
@@ -0,0 +1,225 @@
+dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues.
+
+dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Eric Blake.
+
+# wchar_h.m4 serial 39
+
+AC_DEFUN([gl_WCHAR_H],
+[
+  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+  AC_REQUIRE([gl_WCHAR_H_INLINE_OK])
+  dnl Prepare for creating substitute <wchar.h>.
+  dnl Check for <wchar.h> (missing in Linux uClibc when built without wide
+  dnl character support).
+  dnl <wchar.h> is always overridden, because of GNULIB_POSIXCHECK.
+  gl_CHECK_NEXT_HEADERS([wchar.h])
+  if test $ac_cv_header_wchar_h = yes; then
+    HAVE_WCHAR_H=1
+  else
+    HAVE_WCHAR_H=0
+  fi
+  AC_SUBST([HAVE_WCHAR_H])
+
+  AC_REQUIRE([gl_FEATURES_H])
+
+  AC_REQUIRE([gt_TYPE_WINT_T])
+  if test $gt_cv_c_wint_t = yes; then
+    HAVE_WINT_T=1
+  else
+    HAVE_WINT_T=0
+  fi
+  AC_SUBST([HAVE_WINT_T])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+#endif
+#include <wchar.h>
+    ]],
+    [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb
+     wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset
+     wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp
+     wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr
+     wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth
+    ])
+])
+
+dnl Check whether <wchar.h> is usable at all.
+AC_DEFUN([gl_WCHAR_H_INLINE_OK],
+[
+  dnl Test whether <wchar.h> suffers due to the transition from '__inline' to
+  dnl 'gnu_inline'. See <http://sourceware.org/bugzilla/show_bug.cgi?id=4022>
+  dnl and <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. In summary,
+  dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and
+  dnl the option -std=c99 or -std=gnu99, leads to a broken <wchar.h>.
+  AC_CACHE_CHECK([whether <wchar.h> uses 'inline' correctly],
+    [gl_cv_header_wchar_h_correct_inline],
+    [gl_cv_header_wchar_h_correct_inline=yes
+     AC_LANG_CONFTEST([
+       AC_LANG_SOURCE([[#define wcstod renamed_wcstod
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+extern int zero (void);
+int main () { return zero(); }
+]])])
+     if AC_TRY_EVAL([ac_compile]); then
+       mv conftest.$ac_objext conftest1.$ac_objext
+       AC_LANG_CONFTEST([
+         AC_LANG_SOURCE([[#define wcstod renamed_wcstod
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int zero (void) { return 0; }
+]])])
+       if AC_TRY_EVAL([ac_compile]); then
+         mv conftest.$ac_objext conftest2.$ac_objext
+         if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then
+           :
+         else
+           gl_cv_header_wchar_h_correct_inline=no
+         fi
+       fi
+     fi
+     rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext
+    ])
+  if test $gl_cv_header_wchar_h_correct_inline = no; then
+    AC_MSG_ERROR([<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS).
+This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in
+C99 mode. You have four options:
+  - Add the flag -fgnu89-inline to CC and reconfigure, or
+  - Fix your include files, using parts of
+    <http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or
+  - Use a gcc version older than 4.3, or
+  - Don't use the flags -std=c99 or -std=gnu99.
+Configuration aborted.])
+  fi
+])
+
+AC_DEFUN([gl_WCHAR_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_WCHAR_H_DEFAULTS],
+[
+  GNULIB_BTOWC=0;       AC_SUBST([GNULIB_BTOWC])
+  GNULIB_WCTOB=0;       AC_SUBST([GNULIB_WCTOB])
+  GNULIB_MBSINIT=0;     AC_SUBST([GNULIB_MBSINIT])
+  GNULIB_MBRTOWC=0;     AC_SUBST([GNULIB_MBRTOWC])
+  GNULIB_MBRLEN=0;      AC_SUBST([GNULIB_MBRLEN])
+  GNULIB_MBSRTOWCS=0;   AC_SUBST([GNULIB_MBSRTOWCS])
+  GNULIB_MBSNRTOWCS=0;  AC_SUBST([GNULIB_MBSNRTOWCS])
+  GNULIB_WCRTOMB=0;     AC_SUBST([GNULIB_WCRTOMB])
+  GNULIB_WCSRTOMBS=0;   AC_SUBST([GNULIB_WCSRTOMBS])
+  GNULIB_WCSNRTOMBS=0;  AC_SUBST([GNULIB_WCSNRTOMBS])
+  GNULIB_WCWIDTH=0;     AC_SUBST([GNULIB_WCWIDTH])
+  GNULIB_WMEMCHR=0;     AC_SUBST([GNULIB_WMEMCHR])
+  GNULIB_WMEMCMP=0;     AC_SUBST([GNULIB_WMEMCMP])
+  GNULIB_WMEMCPY=0;     AC_SUBST([GNULIB_WMEMCPY])
+  GNULIB_WMEMMOVE=0;    AC_SUBST([GNULIB_WMEMMOVE])
+  GNULIB_WMEMSET=0;     AC_SUBST([GNULIB_WMEMSET])
+  GNULIB_WCSLEN=0;      AC_SUBST([GNULIB_WCSLEN])
+  GNULIB_WCSNLEN=0;     AC_SUBST([GNULIB_WCSNLEN])
+  GNULIB_WCSCPY=0;      AC_SUBST([GNULIB_WCSCPY])
+  GNULIB_WCPCPY=0;      AC_SUBST([GNULIB_WCPCPY])
+  GNULIB_WCSNCPY=0;     AC_SUBST([GNULIB_WCSNCPY])
+  GNULIB_WCPNCPY=0;     AC_SUBST([GNULIB_WCPNCPY])
+  GNULIB_WCSCAT=0;      AC_SUBST([GNULIB_WCSCAT])
+  GNULIB_WCSNCAT=0;     AC_SUBST([GNULIB_WCSNCAT])
+  GNULIB_WCSCMP=0;      AC_SUBST([GNULIB_WCSCMP])
+  GNULIB_WCSNCMP=0;     AC_SUBST([GNULIB_WCSNCMP])
+  GNULIB_WCSCASECMP=0;  AC_SUBST([GNULIB_WCSCASECMP])
+  GNULIB_WCSNCASECMP=0; AC_SUBST([GNULIB_WCSNCASECMP])
+  GNULIB_WCSCOLL=0;     AC_SUBST([GNULIB_WCSCOLL])
+  GNULIB_WCSXFRM=0;     AC_SUBST([GNULIB_WCSXFRM])
+  GNULIB_WCSDUP=0;      AC_SUBST([GNULIB_WCSDUP])
+  GNULIB_WCSCHR=0;      AC_SUBST([GNULIB_WCSCHR])
+  GNULIB_WCSRCHR=0;     AC_SUBST([GNULIB_WCSRCHR])
+  GNULIB_WCSCSPN=0;     AC_SUBST([GNULIB_WCSCSPN])
+  GNULIB_WCSSPN=0;      AC_SUBST([GNULIB_WCSSPN])
+  GNULIB_WCSPBRK=0;     AC_SUBST([GNULIB_WCSPBRK])
+  GNULIB_WCSSTR=0;      AC_SUBST([GNULIB_WCSSTR])
+  GNULIB_WCSTOK=0;      AC_SUBST([GNULIB_WCSTOK])
+  GNULIB_WCSWIDTH=0;    AC_SUBST([GNULIB_WCSWIDTH])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_BTOWC=1;         AC_SUBST([HAVE_BTOWC])
+  HAVE_MBSINIT=1;       AC_SUBST([HAVE_MBSINIT])
+  HAVE_MBRTOWC=1;       AC_SUBST([HAVE_MBRTOWC])
+  HAVE_MBRLEN=1;        AC_SUBST([HAVE_MBRLEN])
+  HAVE_MBSRTOWCS=1;     AC_SUBST([HAVE_MBSRTOWCS])
+  HAVE_MBSNRTOWCS=1;    AC_SUBST([HAVE_MBSNRTOWCS])
+  HAVE_WCRTOMB=1;       AC_SUBST([HAVE_WCRTOMB])
+  HAVE_WCSRTOMBS=1;     AC_SUBST([HAVE_WCSRTOMBS])
+  HAVE_WCSNRTOMBS=1;    AC_SUBST([HAVE_WCSNRTOMBS])
+  HAVE_WMEMCHR=1;       AC_SUBST([HAVE_WMEMCHR])
+  HAVE_WMEMCMP=1;       AC_SUBST([HAVE_WMEMCMP])
+  HAVE_WMEMCPY=1;       AC_SUBST([HAVE_WMEMCPY])
+  HAVE_WMEMMOVE=1;      AC_SUBST([HAVE_WMEMMOVE])
+  HAVE_WMEMSET=1;       AC_SUBST([HAVE_WMEMSET])
+  HAVE_WCSLEN=1;        AC_SUBST([HAVE_WCSLEN])
+  HAVE_WCSNLEN=1;       AC_SUBST([HAVE_WCSNLEN])
+  HAVE_WCSCPY=1;        AC_SUBST([HAVE_WCSCPY])
+  HAVE_WCPCPY=1;        AC_SUBST([HAVE_WCPCPY])
+  HAVE_WCSNCPY=1;       AC_SUBST([HAVE_WCSNCPY])
+  HAVE_WCPNCPY=1;       AC_SUBST([HAVE_WCPNCPY])
+  HAVE_WCSCAT=1;        AC_SUBST([HAVE_WCSCAT])
+  HAVE_WCSNCAT=1;       AC_SUBST([HAVE_WCSNCAT])
+  HAVE_WCSCMP=1;        AC_SUBST([HAVE_WCSCMP])
+  HAVE_WCSNCMP=1;       AC_SUBST([HAVE_WCSNCMP])
+  HAVE_WCSCASECMP=1;    AC_SUBST([HAVE_WCSCASECMP])
+  HAVE_WCSNCASECMP=1;   AC_SUBST([HAVE_WCSNCASECMP])
+  HAVE_WCSCOLL=1;       AC_SUBST([HAVE_WCSCOLL])
+  HAVE_WCSXFRM=1;       AC_SUBST([HAVE_WCSXFRM])
+  HAVE_WCSDUP=1;        AC_SUBST([HAVE_WCSDUP])
+  HAVE_WCSCHR=1;        AC_SUBST([HAVE_WCSCHR])
+  HAVE_WCSRCHR=1;       AC_SUBST([HAVE_WCSRCHR])
+  HAVE_WCSCSPN=1;       AC_SUBST([HAVE_WCSCSPN])
+  HAVE_WCSSPN=1;        AC_SUBST([HAVE_WCSSPN])
+  HAVE_WCSPBRK=1;       AC_SUBST([HAVE_WCSPBRK])
+  HAVE_WCSSTR=1;        AC_SUBST([HAVE_WCSSTR])
+  HAVE_WCSTOK=1;        AC_SUBST([HAVE_WCSTOK])
+  HAVE_WCSWIDTH=1;      AC_SUBST([HAVE_WCSWIDTH])
+  HAVE_DECL_WCTOB=1;    AC_SUBST([HAVE_DECL_WCTOB])
+  HAVE_DECL_WCWIDTH=1;  AC_SUBST([HAVE_DECL_WCWIDTH])
+  REPLACE_MBSTATE_T=0;  AC_SUBST([REPLACE_MBSTATE_T])
+  REPLACE_BTOWC=0;      AC_SUBST([REPLACE_BTOWC])
+  REPLACE_WCTOB=0;      AC_SUBST([REPLACE_WCTOB])
+  REPLACE_MBSINIT=0;    AC_SUBST([REPLACE_MBSINIT])
+  REPLACE_MBRTOWC=0;    AC_SUBST([REPLACE_MBRTOWC])
+  REPLACE_MBRLEN=0;     AC_SUBST([REPLACE_MBRLEN])
+  REPLACE_MBSRTOWCS=0;  AC_SUBST([REPLACE_MBSRTOWCS])
+  REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS])
+  REPLACE_WCRTOMB=0;    AC_SUBST([REPLACE_WCRTOMB])
+  REPLACE_WCSRTOMBS=0;  AC_SUBST([REPLACE_WCSRTOMBS])
+  REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS])
+  REPLACE_WCWIDTH=0;    AC_SUBST([REPLACE_WCWIDTH])
+  REPLACE_WCSWIDTH=0;   AC_SUBST([REPLACE_WCSWIDTH])
+])
diff --git a/gdb/gnulib/import/m4/wchar_t.m4 b/gdb/gnulib/import/m4/wchar_t.m4
new file mode 100644
index 0000000..534735d
--- /dev/null
+++ b/gdb/gnulib/import/m4/wchar_t.m4
@@ -0,0 +1,24 @@
+# wchar_t.m4 serial 4 (gettext-0.18.2)
+dnl Copyright (C) 2002-2003, 2008-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether <stddef.h> has the 'wchar_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WCHAR_T],
+[
+  AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <stddef.h>
+            wchar_t foo = (wchar_t)'\0';]],
+          [[]])],
+       [gt_cv_c_wchar_t=yes],
+       [gt_cv_c_wchar_t=no])])
+  if test $gt_cv_c_wchar_t = yes; then
+    AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.])
+  fi
+])
diff --git a/gdb/gnulib/import/m4/wctype_h.m4 b/gdb/gnulib/import/m4/wctype_h.m4
new file mode 100644
index 0000000..4b19f64
--- /dev/null
+++ b/gdb/gnulib/import/m4/wctype_h.m4
@@ -0,0 +1,211 @@
+# wctype_h.m4 serial 17
+
+dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it.
+
+dnl Copyright (C) 2006-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Paul Eggert.
+
+AC_DEFUN([gl_WCTYPE_H],
+[
+  AC_REQUIRE([gl_WCTYPE_H_DEFAULTS])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_CHECK_FUNCS_ONCE([iswcntrl])
+  if test $ac_cv_func_iswcntrl = yes; then
+    HAVE_ISWCNTRL=1
+  else
+    HAVE_ISWCNTRL=0
+  fi
+  AC_SUBST([HAVE_ISWCNTRL])
+
+  AC_REQUIRE([AC_C_INLINE])
+
+  AC_REQUIRE([gt_TYPE_WINT_T])
+  if test $gt_cv_c_wint_t = yes; then
+    HAVE_WINT_T=1
+  else
+    HAVE_WINT_T=0
+  fi
+  AC_SUBST([HAVE_WINT_T])
+
+  gl_CHECK_NEXT_HEADERS([wctype.h])
+  if test $ac_cv_header_wctype_h = yes; then
+    if test $ac_cv_func_iswcntrl = yes; then
+      dnl Linux libc5 has an iswprint function that returns 0 for all arguments.
+      dnl The other functions are likely broken in the same way.
+      AC_CACHE_CHECK([whether iswcntrl works], [gl_cv_func_iswcntrl_works],
+        [
+          AC_RUN_IFELSE(
+            [AC_LANG_SOURCE([[
+               /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+                  included before <wchar.h>.
+                  BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+                  must be included before <wchar.h>.  */
+               #include <stddef.h>
+               #include <stdio.h>
+               #include <time.h>
+               #include <wchar.h>
+               #include <wctype.h>
+               int main () { return iswprint ('x') == 0; }
+            ]])],
+            [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no],
+            [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
+                          #if __GNU_LIBRARY__ == 1
+                          Linux libc5 i18n is broken.
+                          #endif]], [])],
+              [gl_cv_func_iswcntrl_works="guessing yes"],
+              [gl_cv_func_iswcntrl_works="guessing no"])
+            ])
+        ])
+    fi
+    HAVE_WCTYPE_H=1
+  else
+    HAVE_WCTYPE_H=0
+  fi
+  AC_SUBST([HAVE_WCTYPE_H])
+
+  case "$gl_cv_func_iswcntrl_works" in
+    *yes) REPLACE_ISWCNTRL=0 ;;
+    *)    REPLACE_ISWCNTRL=1 ;;
+  esac
+  AC_SUBST([REPLACE_ISWCNTRL])
+
+  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
+    dnl Redefine all of iswcntrl, ..., iswxdigit in <wctype.h>.
+    :
+  fi
+
+  if test $REPLACE_ISWCNTRL = 1; then
+    REPLACE_TOWLOWER=1
+  else
+    AC_CHECK_FUNCS([towlower])
+    if test $ac_cv_func_towlower = yes; then
+      REPLACE_TOWLOWER=0
+    else
+      AC_CHECK_DECLS([towlower],,,
+        [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+             included before <wchar.h>.
+             BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+             must be included before <wchar.h>.  */
+          #include <stddef.h>
+          #include <stdio.h>
+          #include <time.h>
+          #include <wchar.h>
+          #if HAVE_WCTYPE_H
+          # include <wctype.h>
+          #endif
+        ]])
+      if test $ac_cv_have_decl_towlower = yes; then
+        dnl On Minix 3.1.8, the system's <wctype.h> declares towlower() and
+        dnl towupper() although it does not have the functions. Avoid a
+        dnl collision with gnulib's replacement.
+        REPLACE_TOWLOWER=1
+      else
+        REPLACE_TOWLOWER=0
+      fi
+    fi
+  fi
+  AC_SUBST([REPLACE_TOWLOWER])
+
+  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then
+    dnl Redefine towlower, towupper in <wctype.h>.
+    :
+  fi
+
+  dnl We assume that the wctype() and iswctype() functions exist if and only
+  dnl if the type wctype_t is defined in <wchar.h> or in <wctype.h> if that
+  dnl exists.
+  dnl HP-UX 11.00 declares all these in <wchar.h> and lacks <wctype.h>.
+  AC_CACHE_CHECK([for wctype_t], [gl_cv_type_wctype_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+               included before <wchar.h>.
+               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+               must be included before <wchar.h>.  */
+            #include <stddef.h>
+            #include <stdio.h>
+            #include <time.h>
+            #include <wchar.h>
+            #if HAVE_WCTYPE_H
+            # include <wctype.h>
+            #endif
+            wctype_t a;
+          ]],
+          [[]])],
+       [gl_cv_type_wctype_t=yes],
+       [gl_cv_type_wctype_t=no])
+    ])
+  if test $gl_cv_type_wctype_t = no; then
+    HAVE_WCTYPE_T=0
+  fi
+
+  dnl We assume that the wctrans() and towctrans() functions exist if and only
+  dnl if the type wctrans_t is defined in <wctype.h>.
+  AC_CACHE_CHECK([for wctrans_t], [gl_cv_type_wctrans_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+               included before <wchar.h>.
+               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+               must be included before <wchar.h>.  */
+            #include <stddef.h>
+            #include <stdio.h>
+            #include <time.h>
+            #include <wchar.h>
+            #include <wctype.h>
+            wctrans_t a;
+          ]],
+          [[]])],
+       [gl_cv_type_wctrans_t=yes],
+       [gl_cv_type_wctrans_t=no])
+    ])
+  if test $gl_cv_type_wctrans_t = no; then
+    HAVE_WCTRANS_T=0
+  fi
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+# include <wchar.h>
+#endif
+#include <wctype.h>
+    ]],
+    [wctype iswctype wctrans towctrans
+    ])
+])
+
+AC_DEFUN([gl_WCTYPE_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_WCTYPE_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_WCTYPE_H_DEFAULTS],
+[
+  GNULIB_ISWBLANK=0;    AC_SUBST([GNULIB_ISWBLANK])
+  GNULIB_WCTYPE=0;      AC_SUBST([GNULIB_WCTYPE])
+  GNULIB_ISWCTYPE=0;    AC_SUBST([GNULIB_ISWCTYPE])
+  GNULIB_WCTRANS=0;     AC_SUBST([GNULIB_WCTRANS])
+  GNULIB_TOWCTRANS=0;   AC_SUBST([GNULIB_TOWCTRANS])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_ISWBLANK=1;      AC_SUBST([HAVE_ISWBLANK])
+  HAVE_WCTYPE_T=1;      AC_SUBST([HAVE_WCTYPE_T])
+  HAVE_WCTRANS_T=1;     AC_SUBST([HAVE_WCTRANS_T])
+  REPLACE_ISWBLANK=0;   AC_SUBST([REPLACE_ISWBLANK])
+])
diff --git a/gdb/gnulib/import/m4/wint_t.m4 b/gdb/gnulib/import/m4/wint_t.m4
new file mode 100644
index 0000000..3260cce
--- /dev/null
+++ b/gdb/gnulib/import/m4/wint_t.m4
@@ -0,0 +1,32 @@
+# wint_t.m4 serial 5 (gettext-0.18.2)
+dnl Copyright (C) 2003, 2007-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether <wchar.h> has the 'wint_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WINT_T],
+[
+  AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+            wint_t foo = (wchar_t)'\0';]],
+          [[]])],
+       [gt_cv_c_wint_t=yes],
+       [gt_cv_c_wint_t=no])])
+  if test $gt_cv_c_wint_t = yes; then
+    AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.])
+  fi
+])
diff --git a/gdb/gnulib/import/mbrtowc.c b/gdb/gnulib/import/mbrtowc.c
new file mode 100644
index 0000000..e3f354b
--- /dev/null
+++ b/gdb/gnulib/import/mbrtowc.c
@@ -0,0 +1,402 @@
+/* Convert multibyte character to wide character.
+   Copyright (C) 1999-2002, 2005-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2008.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <wchar.h>
+
+#if GNULIB_defined_mbstate_t
+/* Implement mbrtowc() on top of mbtowc().  */
+
+# include <errno.h>
+# include <stdlib.h>
+
+# include "localcharset.h"
+# include "streq.h"
+# include "verify.h"
+
+
+verify (sizeof (mbstate_t) >= 4);
+
+static char internal_state[4];
+
+size_t
+mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
+{
+  char *pstate = (char *)ps;
+
+  if (s == NULL)
+    {
+      pwc = NULL;
+      s = "";
+      n = 1;
+    }
+
+  if (n == 0)
+    return (size_t)(-2);
+
+  /* Here n > 0.  */
+
+  if (pstate == NULL)
+    pstate = internal_state;
+
+  {
+    size_t nstate = pstate[0];
+    char buf[4];
+    const char *p;
+    size_t m;
+
+    switch (nstate)
+      {
+      case 0:
+        p = s;
+        m = n;
+        break;
+      case 3:
+        buf[2] = pstate[3];
+        /*FALLTHROUGH*/
+      case 2:
+        buf[1] = pstate[2];
+        /*FALLTHROUGH*/
+      case 1:
+        buf[0] = pstate[1];
+        p = buf;
+        m = nstate;
+        buf[m++] = s[0];
+        if (n >= 2 && m < 4)
+          {
+            buf[m++] = s[1];
+            if (n >= 3 && m < 4)
+              buf[m++] = s[2];
+          }
+        break;
+      default:
+        errno = EINVAL;
+        return (size_t)(-1);
+      }
+
+    /* Here m > 0.  */
+
+# if __GLIBC__ || defined __UCLIBC__
+    /* Work around bug <http://sourceware.org/bugzilla/show_bug.cgi?id=9674> */
+    mbtowc (NULL, NULL, 0);
+# endif
+    {
+      int res = mbtowc (pwc, p, m);
+
+      if (res >= 0)
+        {
+          if (pwc != NULL && ((*pwc == 0) != (res == 0)))
+            abort ();
+          if (nstate >= (res > 0 ? res : 1))
+            abort ();
+          res -= nstate;
+          pstate[0] = 0;
+          return res;
+        }
+
+      /* mbtowc does not distinguish between invalid and incomplete multibyte
+         sequences.  But mbrtowc needs to make this distinction.
+         There are two possible approaches:
+           - Use iconv() and its return value.
+           - Use built-in knowledge about the possible encodings.
+         Given the low quality of implementation of iconv() on the systems that
+         lack mbrtowc(), we use the second approach.
+         The possible encodings are:
+           - 8-bit encodings,
+           - EUC-JP, EUC-KR, GB2312, EUC-TW, BIG5, GB18030, SJIS,
+           - UTF-8.
+         Use specialized code for each.  */
+      if (m >= 4 || m >= MB_CUR_MAX)
+        goto invalid;
+      /* Here MB_CUR_MAX > 1 and 0 < m < 4.  */
+      {
+        const char *encoding = locale_charset ();
+
+        if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0))
+          {
+            /* Cf. unistr/u8-mblen.c.  */
+            unsigned char c = (unsigned char) p[0];
+
+            if (c >= 0xc2)
+              {
+                if (c < 0xe0)
+                  {
+                    if (m == 1)
+                      goto incomplete;
+                  }
+                else if (c < 0xf0)
+                  {
+                    if (m == 1)
+                      goto incomplete;
+                    if (m == 2)
+                      {
+                        unsigned char c2 = (unsigned char) p[1];
+
+                        if ((c2 ^ 0x80) < 0x40
+                            && (c >= 0xe1 || c2 >= 0xa0)
+                            && (c != 0xed || c2 < 0xa0))
+                          goto incomplete;
+                      }
+                  }
+                else if (c <= 0xf4)
+                  {
+                    if (m == 1)
+                      goto incomplete;
+                    else /* m == 2 || m == 3 */
+                      {
+                        unsigned char c2 = (unsigned char) p[1];
+
+                        if ((c2 ^ 0x80) < 0x40
+                            && (c >= 0xf1 || c2 >= 0x90)
+                            && (c < 0xf4 || (c == 0xf4 && c2 < 0x90)))
+                          {
+                            if (m == 2)
+                              goto incomplete;
+                            else /* m == 3 */
+                              {
+                                unsigned char c3 = (unsigned char) p[2];
+
+                                if ((c3 ^ 0x80) < 0x40)
+                                  goto incomplete;
+                              }
+                          }
+                      }
+                  }
+              }
+            goto invalid;
+          }
+
+        /* As a reference for this code, you can use the GNU libiconv
+           implementation.  Look for uses of the RET_TOOFEW macro.  */
+
+        if (STREQ_OPT (encoding,
+                       "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0))
+          {
+            if (m == 1)
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if ((c >= 0xa1 && c < 0xff) || c == 0x8e || c == 0x8f)
+                  goto incomplete;
+              }
+            if (m == 2)
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if (c == 0x8f)
+                  {
+                    unsigned char c2 = (unsigned char) p[1];
+
+                    if (c2 >= 0xa1 && c2 < 0xff)
+                      goto incomplete;
+                  }
+              }
+            goto invalid;
+          }
+        if (STREQ_OPT (encoding,
+                       "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
+            || STREQ_OPT (encoding,
+                          "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0)
+            || STREQ_OPT (encoding,
+                          "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0))
+          {
+            if (m == 1)
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if (c >= 0xa1 && c < 0xff)
+                  goto incomplete;
+              }
+            goto invalid;
+          }
+        if (STREQ_OPT (encoding,
+                       "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0))
+          {
+            if (m == 1)
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if ((c >= 0xa1 && c < 0xff) || c == 0x8e)
+                  goto incomplete;
+              }
+            else /* m == 2 || m == 3 */
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if (c == 0x8e)
+                  goto incomplete;
+              }
+            goto invalid;
+          }
+        if (STREQ_OPT (encoding,
+                       "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0))
+          {
+            if (m == 1)
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if ((c >= 0x90 && c <= 0xe3) || (c >= 0xf8 && c <= 0xfe))
+                  goto incomplete;
+              }
+            else /* m == 2 || m == 3 */
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if (c >= 0x90 && c <= 0xe3)
+                  {
+                    unsigned char c2 = (unsigned char) p[1];
+
+                    if (c2 >= 0x30 && c2 <= 0x39)
+                      {
+                        if (m == 2)
+                          goto incomplete;
+                        else /* m == 3 */
+                          {
+                            unsigned char c3 = (unsigned char) p[2];
+
+                            if (c3 >= 0x81 && c3 <= 0xfe)
+                              goto incomplete;
+                          }
+                      }
+                  }
+              }
+            goto invalid;
+          }
+        if (STREQ_OPT (encoding, "SJIS", 'S', 'J', 'I', 'S', 0, 0, 0, 0, 0))
+          {
+            if (m == 1)
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea)
+                    || (c >= 0xf0 && c <= 0xf9))
+                  goto incomplete;
+              }
+            goto invalid;
+          }
+
+        /* An unknown multibyte encoding.  */
+        goto incomplete;
+      }
+
+     incomplete:
+      {
+        size_t k = nstate;
+        /* Here 0 <= k < m < 4.  */
+        pstate[++k] = s[0];
+        if (k < m)
+          {
+            pstate[++k] = s[1];
+            if (k < m)
+              pstate[++k] = s[2];
+          }
+        if (k != m)
+          abort ();
+      }
+      pstate[0] = m;
+      return (size_t)(-2);
+
+     invalid:
+      errno = EILSEQ;
+      /* The conversion state is undefined, says POSIX.  */
+      return (size_t)(-1);
+    }
+  }
+}
+
+#else
+/* Override the system's mbrtowc() function.  */
+
+# undef mbrtowc
+
+size_t
+rpl_mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
+{
+# if MBRTOWC_NULL_ARG2_BUG || MBRTOWC_RETVAL_BUG
+  if (s == NULL)
+    {
+      pwc = NULL;
+      s = "";
+      n = 1;
+    }
+# endif
+
+# if MBRTOWC_RETVAL_BUG
+  {
+    static mbstate_t internal_state;
+
+    /* Override mbrtowc's internal state.  We cannot call mbsinit() on the
+       hidden internal state, but we can call it on our variable.  */
+    if (ps == NULL)
+      ps = &internal_state;
+
+    if (!mbsinit (ps))
+      {
+        /* Parse the rest of the multibyte character byte for byte.  */
+        size_t count = 0;
+        for (; n > 0; s++, n--)
+          {
+            wchar_t wc;
+            size_t ret = mbrtowc (&wc, s, 1, ps);
+
+            if (ret == (size_t)(-1))
+              return (size_t)(-1);
+            count++;
+            if (ret != (size_t)(-2))
+              {
+                /* The multibyte character has been completed.  */
+                if (pwc != NULL)
+                  *pwc = wc;
+                return (wc == 0 ? 0 : count);
+              }
+          }
+        return (size_t)(-2);
+      }
+  }
+# endif
+
+# if MBRTOWC_NUL_RETVAL_BUG
+  {
+    wchar_t wc;
+    size_t ret = mbrtowc (&wc, s, n, ps);
+
+    if (ret != (size_t)(-1) && ret != (size_t)(-2))
+      {
+        if (pwc != NULL)
+          *pwc = wc;
+        if (wc == 0)
+          ret = 0;
+      }
+    return ret;
+  }
+# else
+  {
+#   if MBRTOWC_NULL_ARG1_BUG
+    wchar_t dummy;
+
+    if (pwc == NULL)
+      pwc = &dummy;
+#   endif
+
+    return mbrtowc (pwc, s, n, ps);
+  }
+# endif
+}
+
+#endif
diff --git a/gdb/gnulib/import/mbsinit.c b/gdb/gnulib/import/mbsinit.c
new file mode 100644
index 0000000..638142e
--- /dev/null
+++ b/gdb/gnulib/import/mbsinit.c
@@ -0,0 +1,61 @@
+/* Test for initial conversion state.
+   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2008.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <wchar.h>
+
+#include "verify.h"
+
+#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
+
+/* On native Windows, 'mbstate_t' is defined as 'int'.  */
+
+int
+mbsinit (const mbstate_t *ps)
+{
+  return ps == NULL || *ps == 0;
+}
+
+#else
+
+/* Platforms that lack mbsinit() also lack mbrlen(), mbrtowc(), mbsrtowcs()
+   and wcrtomb(), wcsrtombs().
+   We assume that
+     - sizeof (mbstate_t) >= 4,
+     - only stateless encodings are supported (such as UTF-8 and EUC-JP, but
+       not ISO-2022 variants),
+     - for each encoding, the number of bytes for a wide character is <= 4.
+       (This maximum is attained for UTF-8, GB18030, EUC-TW.)
+   We define the meaning of mbstate_t as follows:
+     - In mb -> wc direction, mbstate_t's first byte contains the number of
+       buffered bytes (in the range 0..3), followed by up to 3 buffered bytes.
+     - In wc -> mb direction, mbstate_t contains no information. In other
+       words, it is always in the initial state.  */
+
+verify (sizeof (mbstate_t) >= 4);
+
+int
+mbsinit (const mbstate_t *ps)
+{
+  const char *pstate = (const char *)ps;
+
+  return pstate == NULL || pstate[0] == 0;
+}
+
+#endif
diff --git a/gdb/gnulib/import/mbsrtowcs-impl.h b/gdb/gnulib/import/mbsrtowcs-impl.h
new file mode 100644
index 0000000..019bc33
--- /dev/null
+++ b/gdb/gnulib/import/mbsrtowcs-impl.h
@@ -0,0 +1,122 @@
+/* Convert string to wide string.
+   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2008.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+size_t
+mbsrtowcs (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
+{
+  if (ps == NULL)
+    ps = &_gl_mbsrtowcs_state;
+  {
+    const char *src = *srcp;
+
+    if (dest != NULL)
+      {
+        wchar_t *destptr = dest;
+
+        for (; len > 0; destptr++, len--)
+          {
+            size_t src_avail;
+            size_t ret;
+
+            /* An optimized variant of
+               src_avail = strnlen1 (src, MB_LEN_MAX);  */
+            if (src[0] == '\0')
+              src_avail = 1;
+            else if (src[1] == '\0')
+              src_avail = 2;
+            else if (src[2] == '\0')
+              src_avail = 3;
+            else if (MB_LEN_MAX <= 4 || src[3] == '\0')
+              src_avail = 4;
+            else
+              src_avail = 4 + strnlen1 (src + 4, MB_LEN_MAX - 4);
+
+            /* Parse the next multibyte character.  */
+            ret = mbrtowc (destptr, src, src_avail, ps);
+
+            if (ret == (size_t)(-2))
+              /* Encountered a multibyte character that extends past a '\0' byte
+                 or that is longer than MB_LEN_MAX bytes.  Cannot happen.  */
+              abort ();
+
+            if (ret == (size_t)(-1))
+              goto bad_input;
+            if (ret == 0)
+              {
+                src = NULL;
+                /* Here mbsinit (ps).  */
+                break;
+              }
+            src += ret;
+          }
+
+        *srcp = src;
+        return destptr - dest;
+      }
+    else
+      {
+        /* Ignore dest and len, don't store *srcp at the end, and
+           don't clobber *ps.  */
+        mbstate_t state = *ps;
+        size_t totalcount = 0;
+
+        for (;; totalcount++)
+          {
+            size_t src_avail;
+            size_t ret;
+
+            /* An optimized variant of
+               src_avail = strnlen1 (src, MB_LEN_MAX);  */
+            if (src[0] == '\0')
+              src_avail = 1;
+            else if (src[1] == '\0')
+              src_avail = 2;
+            else if (src[2] == '\0')
+              src_avail = 3;
+            else if (MB_LEN_MAX <= 4 || src[3] == '\0')
+              src_avail = 4;
+            else
+              src_avail = 4 + strnlen1 (src + 4, MB_LEN_MAX - 4);
+
+            /* Parse the next multibyte character.  */
+            ret = mbrtowc (NULL, src, src_avail, &state);
+
+            if (ret == (size_t)(-2))
+              /* Encountered a multibyte character that extends past a '\0' byte
+                 or that is longer than MB_LEN_MAX bytes.  Cannot happen.  */
+              abort ();
+
+            if (ret == (size_t)(-1))
+              goto bad_input2;
+            if (ret == 0)
+              {
+                /* Here mbsinit (&state).  */
+                break;
+              }
+            src += ret;
+          }
+
+        return totalcount;
+      }
+
+   bad_input:
+    *srcp = src;
+   bad_input2:
+    errno = EILSEQ;
+    return (size_t)(-1);
+  }
+}
diff --git a/gdb/gnulib/import/mbsrtowcs-state.c b/gdb/gnulib/import/mbsrtowcs-state.c
new file mode 100644
index 0000000..cca1791
--- /dev/null
+++ b/gdb/gnulib/import/mbsrtowcs-state.c
@@ -0,0 +1,37 @@
+/* Convert string to wide string.
+   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2008.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+#include <wchar.h>
+
+/* Internal state used by the functions mbsrtowcs() and mbsnrtowcs().  */
+mbstate_t _gl_mbsrtowcs_state
+/* The state must initially be in the "initial state"; so, zero-initialize it.
+   On most systems, putting it into BSS is sufficient.  Not so on Mac OS X 10.3,
+   see <http://lists.gnu.org/archive/html/bug-gnulib/2009-01/msg00329.html>.
+   When it needs an initializer, use 0 or {0} as initializer? 0 only works
+   when mbstate_t is a scalar type (such as when gnulib defines it, or on
+   AIX, IRIX, mingw). {0} works as an initializer in all cases: for a struct
+   or union type, but also for a scalar type (ISO C 99, 6.7.8.(11)).  */
+#if defined __ELF__
+  /* On ELF systems, variables in BSS behave well.  */
+#else
+  /* Use braces, to be on the safe side.  */
+  = { 0 }
+#endif
+  ;
diff --git a/gdb/gnulib/import/mbsrtowcs.c b/gdb/gnulib/import/mbsrtowcs.c
new file mode 100644
index 0000000..e3ec876
--- /dev/null
+++ b/gdb/gnulib/import/mbsrtowcs.c
@@ -0,0 +1,32 @@
+/* Convert string to wide string.
+   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2008.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <wchar.h>
+
+#include <errno.h>
+#include <limits.h>
+#include <stdlib.h>
+
+#include "strnlen1.h"
+
+
+extern mbstate_t _gl_mbsrtowcs_state;
+
+#include "mbsrtowcs-impl.h"
diff --git a/gdb/gnulib/import/memchr.c b/gdb/gnulib/import/memchr.c
new file mode 100644
index 0000000..b8fb0ef
--- /dev/null
+++ b/gdb/gnulib/import/memchr.c
@@ -0,0 +1,172 @@
+/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2012
+   Free Software Foundation, Inc.
+
+   Based on strlen implementation by Torbjorn Granlund (tege at sics.se),
+   with help from Dan Sahlin (dan at sics.se) and
+   commentary by Jim Blandy (jimb at ai.mit.edu);
+   adaptation to memchr suggested by Dick Karpinski (dick at cca.ucsf.edu),
+   and implemented by Roland McGrath (roland at ai.mit.edu).
+
+NOTE: The canonical source of this file is maintained with the GNU C Library.
+Bugs can be reported to bug-glibc at prep.ai.mit.edu.
+
+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 3 of the License, or 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _LIBC
+# include <config.h>
+#endif
+
+#include <string.h>
+
+#include <stddef.h>
+
+#if defined _LIBC
+# include <memcopy.h>
+#else
+# define reg_char char
+#endif
+
+#include <limits.h>
+
+#if HAVE_BP_SYM_H || defined _LIBC
+# include <bp-sym.h>
+#else
+# define BP_SYM(sym) sym
+#endif
+
+#undef __memchr
+#ifdef _LIBC
+# undef memchr
+#endif
+
+#ifndef weak_alias
+# define __memchr memchr
+#endif
+
+/* Search no more than N bytes of S for C.  */
+void *
+__memchr (void const *s, int c_in, size_t n)
+{
+  /* On 32-bit hardware, choosing longword to be a 32-bit unsigned
+     long instead of a 64-bit uintmax_t tends to give better
+     performance.  On 64-bit hardware, unsigned long is generally 64
+     bits already.  Change this typedef to experiment with
+     performance.  */
+  typedef unsigned long int longword;
+
+  const unsigned char *char_ptr;
+  const longword *longword_ptr;
+  longword repeated_one;
+  longword repeated_c;
+  unsigned reg_char c;
+
+  c = (unsigned char) c_in;
+
+  /* Handle the first few bytes by reading one byte at a time.
+     Do this until CHAR_PTR is aligned on a longword boundary.  */
+  for (char_ptr = (const unsigned char *) s;
+       n > 0 && (size_t) char_ptr % sizeof (longword) != 0;
+       --n, ++char_ptr)
+    if (*char_ptr == c)
+      return (void *) char_ptr;
+
+  longword_ptr = (const longword *) char_ptr;
+
+  /* All these elucidatory comments refer to 4-byte longwords,
+     but the theory applies equally well to any size longwords.  */
+
+  /* Compute auxiliary longword values:
+     repeated_one is a value which has a 1 in every byte.
+     repeated_c has c in every byte.  */
+  repeated_one = 0x01010101;
+  repeated_c = c | (c << 8);
+  repeated_c |= repeated_c << 16;
+  if (0xffffffffU < (longword) -1)
+    {
+      repeated_one |= repeated_one << 31 << 1;
+      repeated_c |= repeated_c << 31 << 1;
+      if (8 < sizeof (longword))
+        {
+          size_t i;
+
+          for (i = 64; i < sizeof (longword) * 8; i *= 2)
+            {
+              repeated_one |= repeated_one << i;
+              repeated_c |= repeated_c << i;
+            }
+        }
+    }
+
+  /* Instead of the traditional loop which tests each byte, we will test a
+     longword at a time.  The tricky part is testing if *any of the four*
+     bytes in the longword in question are equal to c.  We first use an xor
+     with repeated_c.  This reduces the task to testing whether *any of the
+     four* bytes in longword1 is zero.
+
+     We compute tmp =
+       ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7).
+     That is, we perform the following operations:
+       1. Subtract repeated_one.
+       2. & ~longword1.
+       3. & a mask consisting of 0x80 in every byte.
+     Consider what happens in each byte:
+       - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff,
+         and step 3 transforms it into 0x80.  A carry can also be propagated
+         to more significant bytes.
+       - If a byte of longword1 is nonzero, let its lowest 1 bit be at
+         position k (0 <= k <= 7); so the lowest k bits are 0.  After step 1,
+         the byte ends in a single bit of value 0 and k bits of value 1.
+         After step 2, the result is just k bits of value 1: 2^k - 1.  After
+         step 3, the result is 0.  And no carry is produced.
+     So, if longword1 has only non-zero bytes, tmp is zero.
+     Whereas if longword1 has a zero byte, call j the position of the least
+     significant zero byte.  Then the result has a zero at positions 0, ...,
+     j-1 and a 0x80 at position j.  We cannot predict the result at the more
+     significant bytes (positions j+1..3), but it does not matter since we
+     already have a non-zero bit at position 8*j+7.
+
+     So, the test whether any byte in longword1 is zero is equivalent to
+     testing whether tmp is nonzero.  */
+
+  while (n >= sizeof (longword))
+    {
+      longword longword1 = *longword_ptr ^ repeated_c;
+
+      if ((((longword1 - repeated_one) & ~longword1)
+           & (repeated_one << 7)) != 0)
+        break;
+      longword_ptr++;
+      n -= sizeof (longword);
+    }
+
+  char_ptr = (const unsigned char *) longword_ptr;
+
+  /* At this point, we know that either n < sizeof (longword), or one of the
+     sizeof (longword) bytes starting at char_ptr is == c.  On little-endian
+     machines, we could determine the first such byte without any further
+     memory accesses, just by looking at the tmp result from the last loop
+     iteration.  But this does not work on big-endian machines.  Choose code
+     that works in both cases.  */
+
+  for (; n > 0; --n, ++char_ptr)
+    {
+      if (*char_ptr == c)
+        return (void *) char_ptr;
+    }
+
+  return NULL;
+}
+#ifdef weak_alias
+weak_alias (__memchr, BP_SYM (memchr))
+#endif
diff --git a/gdb/gnulib/memchr.valgrind b/gdb/gnulib/import/memchr.valgrind
similarity index 100%
rename from gdb/gnulib/memchr.valgrind
rename to gdb/gnulib/import/memchr.valgrind
diff --git a/gdb/gnulib/import/memmem.c b/gdb/gnulib/import/memmem.c
new file mode 100644
index 0000000..29ffcc0
--- /dev/null
+++ b/gdb/gnulib/import/memmem.c
@@ -0,0 +1,75 @@
+/* Copyright (C) 1991-1994, 1996-1998, 2000, 2004, 2007-2012 Free Software
+   Foundation, Inc.
+   This file is part of the GNU C 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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* This particular implementation was written by Eric Blake, 2008.  */
+
+#ifndef _LIBC
+# include <config.h>
+#endif
+
+/* Specification of memmem.  */
+#include <string.h>
+
+#ifndef _LIBC
+# define __builtin_expect(expr, val)   (expr)
+#endif
+
+#define RETURN_TYPE void *
+#define AVAILABLE(h, h_l, j, n_l) ((j) <= (h_l) - (n_l))
+#include "str-two-way.h"
+
+/* Return the first occurrence of NEEDLE in HAYSTACK.  Return HAYSTACK
+   if NEEDLE_LEN is 0, otherwise NULL if NEEDLE is not found in
+   HAYSTACK.  */
+void *
+memmem (const void *haystack_start, size_t haystack_len,
+        const void *needle_start, size_t needle_len)
+{
+  /* Abstract memory is considered to be an array of 'unsigned char' values,
+     not an array of 'char' values.  See ISO C 99 section 6.2.6.1.  */
+  const unsigned char *haystack = (const unsigned char *) haystack_start;
+  const unsigned char *needle = (const unsigned char *) needle_start;
+
+  if (needle_len == 0)
+    /* The first occurrence of the empty string is deemed to occur at
+       the beginning of the string.  */
+    return (void *) haystack;
+
+  /* Sanity check, otherwise the loop might search through the whole
+     memory.  */
+  if (__builtin_expect (haystack_len < needle_len, 0))
+    return NULL;
+
+  /* Use optimizations in memchr when possible, to reduce the search
+     size of haystack using a linear algorithm with a smaller
+     coefficient.  However, avoid memchr for long needles, since we
+     can often achieve sublinear performance.  */
+  if (needle_len < LONG_NEEDLE_THRESHOLD)
+    {
+      haystack = memchr (haystack, *needle, haystack_len);
+      if (!haystack || __builtin_expect (needle_len == 1, 0))
+        return (void *) haystack;
+      haystack_len -= haystack - (const unsigned char *) haystack_start;
+      if (haystack_len < needle_len)
+        return NULL;
+      return two_way_short_needle (haystack, haystack_len, needle, needle_len);
+    }
+  else
+    return two_way_long_needle (haystack, haystack_len, needle, needle_len);
+}
+
+#undef LONG_NEEDLE_THRESHOLD
diff --git a/gdb/gnulib/import/ref-add.sin b/gdb/gnulib/import/ref-add.sin
new file mode 100644
index 0000000..4ec043f
--- /dev/null
+++ b/gdb/gnulib/import/ref-add.sin
@@ -0,0 +1,29 @@
+# Add this package to a list of references stored in a text file.
+#
+#   Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
+#
+#   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 3, 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, see <http://www.gnu.org/licenses/>.
+#
+# Written by Bruno Haible <haible at clisp.cons.org>.
+#
+/^# Packages using this file: / {
+  s/# Packages using this file://
+  ta
+  :a
+  s/ @PACKAGE@ / @PACKAGE@ /
+  tb
+  s/ $/ @PACKAGE@ /
+  :b
+  s/^/# Packages using this file:/
+}
diff --git a/gdb/gnulib/import/ref-del.sin b/gdb/gnulib/import/ref-del.sin
new file mode 100644
index 0000000..eb03881
--- /dev/null
+++ b/gdb/gnulib/import/ref-del.sin
@@ -0,0 +1,24 @@
+# Remove this package from a list of references stored in a text file.
+#
+#   Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc.
+#
+#   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 3, 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, see <http://www.gnu.org/licenses/>.
+#
+# Written by Bruno Haible <haible at clisp.cons.org>.
+#
+/^# Packages using this file: / {
+  s/# Packages using this file://
+  s/ @PACKAGE@ / /
+  s/^/# Packages using this file:/
+}
diff --git a/gdb/gnulib/import/stdbool.in.h b/gdb/gnulib/import/stdbool.in.h
new file mode 100644
index 0000000..ed1f9aa
--- /dev/null
+++ b/gdb/gnulib/import/stdbool.in.h
@@ -0,0 +1,121 @@
+/* Copyright (C) 2001-2003, 2006-2012 Free Software Foundation, Inc.
+   Written by Bruno Haible <haible at clisp.cons.org>, 2001.
+
+   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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _GL_STDBOOL_H
+#define _GL_STDBOOL_H
+
+/* ISO C 99 <stdbool.h> for platforms that lack it.  */
+
+/* Usage suggestions:
+
+   Programs that use <stdbool.h> should be aware of some limitations
+   and standards compliance issues.
+
+   Standards compliance:
+
+       - <stdbool.h> must be #included before 'bool', 'false', 'true'
+         can be used.
+
+       - You cannot assume that sizeof (bool) == 1.
+
+       - Programs should not undefine the macros bool, true, and false,
+         as C99 lists that as an "obsolescent feature".
+
+   Limitations of this substitute, when used in a C89 environment:
+
+       - <stdbool.h> must be #included before the '_Bool' type can be used.
+
+       - You cannot assume that _Bool is a typedef; it might be a macro.
+
+       - Bit-fields of type 'bool' are not supported.  Portable code
+         should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'.
+
+       - In C99, casts and automatic conversions to '_Bool' or 'bool' are
+         performed in such a way that every nonzero value gets converted
+         to 'true', and zero gets converted to 'false'.  This doesn't work
+         with this substitute.  With this substitute, only the values 0 and 1
+         give the expected result when converted to _Bool' or 'bool'.
+
+       - C99 allows the use of (_Bool)0.0 in constant expressions, but
+         this substitute cannot always provide this property.
+
+   Also, it is suggested that programs use 'bool' rather than '_Bool';
+   this isn't required, but 'bool' is more common.  */
+
+
+/* 7.16. Boolean type and values */
+
+/* BeOS <sys/socket.h> already #defines false 0, true 1.  We use the same
+   definitions below, but temporarily we have to #undef them.  */
+#if defined __BEOS__ && !defined __HAIKU__
+# include <OS.h> /* defines bool but not _Bool */
+# undef false
+# undef true
+#endif
+
+/* For the sake of symbolic names in gdb, we define true and false as
+   enum constants, not only as macros.
+   It is tempting to write
+      typedef enum { false = 0, true = 1 } _Bool;
+   so that gdb prints values of type 'bool' symbolically. But if we do
+   this, values of type '_Bool' may promote to 'int' or 'unsigned int'
+   (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int'
+   (see ISO C 99 6.3.1.1.(2)).  So we add a negative value to the
+   enum; this ensures that '_Bool' promotes to 'int'.  */
+#if defined __cplusplus || (defined __BEOS__ && !defined __HAIKU__)
+  /* A compiler known to have 'bool'.  */
+  /* If the compiler already has both 'bool' and '_Bool', we can assume they
+     are the same types.  */
+# if !@HAVE__BOOL@
+typedef bool _Bool;
+# endif
+#else
+# if !defined __GNUC__
+   /* If @HAVE__BOOL@:
+        Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when
+        the built-in _Bool type is used.  See
+          http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+          http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+          http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
+        Similar bugs are likely with other compilers as well; this file
+        wouldn't be used if <stdbool.h> was working.
+        So we override the _Bool type.
+      If !@HAVE__BOOL@:
+        Need to define _Bool ourselves. As 'signed char' or as an enum type?
+        Use of a typedef, with SunPRO C, leads to a stupid
+          "warning: _Bool is a keyword in ISO C99".
+        Use of an enum type, with IRIX cc, leads to a stupid
+          "warning(1185): enumerated type mixed with another type".
+        Even the existence of an enum type, without a typedef,
+          "Invalid enumerator. (badenum)" with HP-UX cc on Tru64.
+        The only benefit of the enum, debuggability, is not important
+        with these compilers.  So use 'signed char' and no enum.  */
+#  define _Bool signed char
+# else
+   /* With this compiler, trust the _Bool type if the compiler has it.  */
+#  if !@HAVE__BOOL@
+typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool;
+#  endif
+# endif
+#endif
+#define bool _Bool
+
+/* The other macros must be usable in preprocessor directives.  */
+#define false 0
+#define true 1
+#define __bool_true_false_are_defined 1
+
+#endif /* _GL_STDBOOL_H */
diff --git a/gdb/gnulib/import/stddef.in.h b/gdb/gnulib/import/stddef.in.h
new file mode 100644
index 0000000..17fcaea
--- /dev/null
+++ b/gdb/gnulib/import/stddef.in.h
@@ -0,0 +1,86 @@
+/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues.
+
+   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+
+   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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Eric Blake.  */
+
+/*
+ * POSIX 2008 <stddef.h> for platforms that have issues.
+ * <http://www.opengroup.org/susv3xbd/stddef.h.html>
+ */
+
+#if __GNUC__ >= 3
+ at PRAGMA_SYSTEM_HEADER@
+#endif
+ at PRAGMA_COLUMNS@
+
+#if defined __need_wchar_t || defined __need_size_t  \
+  || defined __need_ptrdiff_t || defined __need_NULL \
+  || defined __need_wint_t
+/* Special invocation convention inside gcc header files.  In
+   particular, gcc provides a version of <stddef.h> that blindly
+   redefines NULL even when __need_wint_t was defined, even though
+   wint_t is not normally provided by <stddef.h>.  Hence, we must
+   remember if special invocation has ever been used to obtain wint_t,
+   in which case we need to clean up NULL yet again.  */
+
+# if !(defined _ at GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T)
+#  ifdef __need_wint_t
+#   undef _ at GUARD_PREFIX@_STDDEF_H
+#   define _GL_STDDEF_WINT_T
+#  endif
+#  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
+# endif
+
+#else
+/* Normal invocation convention.  */
+
+# ifndef _ at GUARD_PREFIX@_STDDEF_H
+
+/* The include_next requires a split double-inclusion guard.  */
+
+#  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
+
+#  ifndef _ at GUARD_PREFIX@_STDDEF_H
+#   define _ at GUARD_PREFIX@_STDDEF_H
+
+/* On NetBSD 5.0, the definition of NULL lacks proper parentheses.  */
+#if @REPLACE_NULL@
+# undef NULL
+# ifdef __cplusplus
+   /* ISO C++ says that the macro NULL must expand to an integer constant
+      expression, hence '((void *) 0)' is not allowed in C++.  */
+#  if __GNUG__ >= 3
+    /* GNU C++ has a __null macro that behaves like an integer ('int' or
+       'long') but has the same size as a pointer.  Use that, to avoid
+       warnings.  */
+#   define NULL __null
+#  else
+#   define NULL 0L
+#  endif
+# else
+#  define NULL ((void *) 0)
+# endif
+#endif
+
+/* Some platforms lack wchar_t.  */
+#if !@HAVE_WCHAR_T@
+# define wchar_t int
+#endif
+
+#  endif /* _ at GUARD_PREFIX@_STDDEF_H */
+# endif /* _ at GUARD_PREFIX@_STDDEF_H */
+#endif /* __need_XXX */
diff --git a/gdb/gnulib/import/stdint.in.h b/gdb/gnulib/import/stdint.in.h
new file mode 100644
index 0000000..e2a0eb1
--- /dev/null
+++ b/gdb/gnulib/import/stdint.in.h
@@ -0,0 +1,636 @@
+/* Copyright (C) 2001-2002, 2004-2012 Free Software Foundation, Inc.
+   Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
+   This file is part of gnulib.
+
+   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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/*
+ * ISO C 99 <stdint.h> for platforms that lack it.
+ * <http://www.opengroup.org/susv3xbd/stdint.h.html>
+ */
+
+#ifndef _ at GUARD_PREFIX@_STDINT_H
+
+#if __GNUC__ >= 3
+ at PRAGMA_SYSTEM_HEADER@
+#endif
+ at PRAGMA_COLUMNS@
+
+/* When including a system file that in turn includes <inttypes.h>,
+   use the system <inttypes.h>, not our substitute.  This avoids
+   problems with (for example) VMS, whose <sys/bitypes.h> includes
+   <inttypes.h>.  */
+#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+
+/* On Android (Bionic libc), <sys/types.h> includes this file before
+   having defined 'time_t'.  Therefore in this case avoid including
+   other system header files; just include the system's <stdint.h>.
+   Ideally we should test __BIONIC__ here, but it is only defined after
+   <sys/cdefs.h> has been included; hence test __ANDROID__ instead.  */
+#if defined __ANDROID__ \
+    && defined _SYS_TYPES_H_ && !defined _SSIZE_T_DEFINED_
+# @INCLUDE_NEXT@ @NEXT_STDINT_H@
+#else
+
+/* Get those types that are already defined in other system include
+   files, so that we can "#define int8_t signed char" below without
+   worrying about a later system include file containing a "typedef
+   signed char int8_t;" that will get messed up by our macro.  Our
+   macros should all be consistent with the system versions, except
+   for the "fast" types and macros, which we recommend against using
+   in public interfaces due to compiler differences.  */
+
+#if @HAVE_STDINT_H@
+# if defined __sgi && ! defined __c99
+   /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users
+      with "This header file is to be used only for c99 mode compilations"
+      diagnostics.  */
+#  define __STDINT_H__
+# endif
+
+  /* Some pre-C++11 <stdint.h> implementations need this.  */
+# ifdef __cplusplus
+#  ifndef __STDC_CONSTANT_MACROS
+#   define __STDC_CONSTANT_MACROS 1
+#  endif
+#  ifndef __STDC_LIMIT_MACROS
+#   define __STDC_LIMIT_MACROS 1
+#  endif
+# endif
+
+  /* Other systems may have an incomplete or buggy <stdint.h>.
+     Include it before <inttypes.h>, since any "#include <stdint.h>"
+     in <inttypes.h> would reinclude us, skipping our contents because
+     _ at GUARD_PREFIX@_STDINT_H is defined.
+     The include_next requires a split double-inclusion guard.  */
+# @INCLUDE_NEXT@ @NEXT_STDINT_H@
+#endif
+
+#if ! defined _ at GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+#define _ at GUARD_PREFIX@_STDINT_H
+
+/* <sys/types.h> defines some of the stdint.h types as well, on glibc,
+   IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>).
+   AIX 5.2 <sys/types.h> isn't needed and causes troubles.
+   Mac OS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but
+   relies on the system <stdint.h> definitions, so include
+   <sys/types.h> after @NEXT_STDINT_H at .  */
+#if @HAVE_SYS_TYPES_H@ && ! defined _AIX
+# include <sys/types.h>
+#endif
+
+/* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX,
+   LONG_MIN, LONG_MAX, ULONG_MAX.  */
+#include <limits.h>
+
+#if @HAVE_INTTYPES_H@
+  /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines
+     int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__.
+     <inttypes.h> also defines intptr_t and uintptr_t.  */
+# include <inttypes.h>
+#elif @HAVE_SYS_INTTYPES_H@
+  /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and
+     the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX.  */
+# include <sys/inttypes.h>
+#endif
+
+#if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__
+  /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines
+     int{8,16,32,64}_t and __BIT_TYPES_DEFINED__.  In libc5 >= 5.2.2 it is
+     included by <sys/types.h>.  */
+# include <sys/bitypes.h>
+#endif
+
+#undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+
+/* Minimum and maximum values for an integer type under the usual assumption.
+   Return an unspecified value if BITS == 0, adding a check to pacify
+   picky compilers.  */
+
+#define _STDINT_MIN(signed, bits, zero) \
+  ((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero))
+
+#define _STDINT_MAX(signed, bits, zero) \
+  ((signed) \
+   ? ~ _STDINT_MIN (signed, bits, zero) \
+   : /* The expression for the unsigned case.  The subtraction of (signed) \
+        is a nop in the unsigned case and avoids "signed integer overflow" \
+        warnings in the signed case.  */ \
+     ((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1)
+
+#if !GNULIB_defined_stdint_types
+
+/* 7.18.1.1. Exact-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits.  */
+
+#undef int8_t
+#undef uint8_t
+typedef signed char gl_int8_t;
+typedef unsigned char gl_uint8_t;
+#define int8_t gl_int8_t
+#define uint8_t gl_uint8_t
+
+#undef int16_t
+#undef uint16_t
+typedef short int gl_int16_t;
+typedef unsigned short int gl_uint16_t;
+#define int16_t gl_int16_t
+#define uint16_t gl_uint16_t
+
+#undef int32_t
+#undef uint32_t
+typedef int gl_int32_t;
+typedef unsigned int gl_uint32_t;
+#define int32_t gl_int32_t
+#define uint32_t gl_uint32_t
+
+/* If the system defines INT64_MAX, assume int64_t works.  That way,
+   if the underlying platform defines int64_t to be a 64-bit long long
+   int, the code below won't mistakenly define it to be a 64-bit long
+   int, which would mess up C++ name mangling.  We must use #ifdef
+   rather than #if, to avoid an error with HP-UX 10.20 cc.  */
+
+#ifdef INT64_MAX
+# define GL_INT64_T
+#else
+/* Do not undefine int64_t if gnulib is not being used with 64-bit
+   types, since otherwise it breaks platforms like Tandem/NSK.  */
+# if LONG_MAX >> 31 >> 31 == 1
+#  undef int64_t
+typedef long int gl_int64_t;
+#  define int64_t gl_int64_t
+#  define GL_INT64_T
+# elif defined _MSC_VER
+#  undef int64_t
+typedef __int64 gl_int64_t;
+#  define int64_t gl_int64_t
+#  define GL_INT64_T
+# elif @HAVE_LONG_LONG_INT@
+#  undef int64_t
+typedef long long int gl_int64_t;
+#  define int64_t gl_int64_t
+#  define GL_INT64_T
+# endif
+#endif
+
+#ifdef UINT64_MAX
+# define GL_UINT64_T
+#else
+# if ULONG_MAX >> 31 >> 31 >> 1 == 1
+#  undef uint64_t
+typedef unsigned long int gl_uint64_t;
+#  define uint64_t gl_uint64_t
+#  define GL_UINT64_T
+# elif defined _MSC_VER
+#  undef uint64_t
+typedef unsigned __int64 gl_uint64_t;
+#  define uint64_t gl_uint64_t
+#  define GL_UINT64_T
+# elif @HAVE_UNSIGNED_LONG_LONG_INT@
+#  undef uint64_t
+typedef unsigned long long int gl_uint64_t;
+#  define uint64_t gl_uint64_t
+#  define GL_UINT64_T
+# endif
+#endif
+
+/* Avoid collision with Solaris 2.5.1 <pthread.h> etc.  */
+#define _UINT8_T
+#define _UINT32_T
+#define _UINT64_T
+
+
+/* 7.18.1.2. Minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
+   are the same as the corresponding N_t types.  */
+
+#undef int_least8_t
+#undef uint_least8_t
+#undef int_least16_t
+#undef uint_least16_t
+#undef int_least32_t
+#undef uint_least32_t
+#undef int_least64_t
+#undef uint_least64_t
+#define int_least8_t int8_t
+#define uint_least8_t uint8_t
+#define int_least16_t int16_t
+#define uint_least16_t uint16_t
+#define int_least32_t int32_t
+#define uint_least32_t uint32_t
+#ifdef GL_INT64_T
+# define int_least64_t int64_t
+#endif
+#ifdef GL_UINT64_T
+# define uint_least64_t uint64_t
+#endif
+
+/* 7.18.1.3. Fastest minimum-width integer types */
+
+/* Note: Other <stdint.h> substitutes may define these types differently.
+   It is not recommended to use these types in public header files. */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
+   are taken from the same list of types.  The following code normally
+   uses types consistent with glibc, as that lessens the chance of
+   incompatibility with older GNU hosts.  */
+
+#undef int_fast8_t
+#undef uint_fast8_t
+#undef int_fast16_t
+#undef uint_fast16_t
+#undef int_fast32_t
+#undef uint_fast32_t
+#undef int_fast64_t
+#undef uint_fast64_t
+typedef signed char gl_int_fast8_t;
+typedef unsigned char gl_uint_fast8_t;
+
+#ifdef __sun
+/* Define types compatible with SunOS 5.10, so that code compiled under
+   earlier SunOS versions works with code compiled under SunOS 5.10.  */
+typedef int gl_int_fast32_t;
+typedef unsigned int gl_uint_fast32_t;
+#else
+typedef long int gl_int_fast32_t;
+typedef unsigned long int gl_uint_fast32_t;
+#endif
+typedef gl_int_fast32_t gl_int_fast16_t;
+typedef gl_uint_fast32_t gl_uint_fast16_t;
+
+#define int_fast8_t gl_int_fast8_t
+#define uint_fast8_t gl_uint_fast8_t
+#define int_fast16_t gl_int_fast16_t
+#define uint_fast16_t gl_uint_fast16_t
+#define int_fast32_t gl_int_fast32_t
+#define uint_fast32_t gl_uint_fast32_t
+#ifdef GL_INT64_T
+# define int_fast64_t int64_t
+#endif
+#ifdef GL_UINT64_T
+# define uint_fast64_t uint64_t
+#endif
+
+/* 7.18.1.4. Integer types capable of holding object pointers */
+
+#undef intptr_t
+#undef uintptr_t
+typedef long int gl_intptr_t;
+typedef unsigned long int gl_uintptr_t;
+#define intptr_t gl_intptr_t
+#define uintptr_t gl_uintptr_t
+
+/* 7.18.1.5. Greatest-width integer types */
+
+/* Note: These types are compiler dependent. It may be unwise to use them in
+   public header files. */
+
+/* If the system defines INTMAX_MAX, assume that intmax_t works, and
+   similarly for UINTMAX_MAX and uintmax_t.  This avoids problems with
+   assuming one type where another is used by the system.  */
+
+#ifndef INTMAX_MAX
+# undef INTMAX_C
+# undef intmax_t
+# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
+typedef long long int gl_intmax_t;
+#  define intmax_t gl_intmax_t
+# elif defined GL_INT64_T
+#  define intmax_t int64_t
+# else
+typedef long int gl_intmax_t;
+#  define intmax_t gl_intmax_t
+# endif
+#endif
+
+#ifndef UINTMAX_MAX
+# undef UINTMAX_C
+# undef uintmax_t
+# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+typedef unsigned long long int gl_uintmax_t;
+#  define uintmax_t gl_uintmax_t
+# elif defined GL_UINT64_T
+#  define uintmax_t uint64_t
+# else
+typedef unsigned long int gl_uintmax_t;
+#  define uintmax_t gl_uintmax_t
+# endif
+#endif
+
+/* Verify that intmax_t and uintmax_t have the same size.  Too much code
+   breaks if this is not the case.  If this check fails, the reason is likely
+   to be found in the autoconf macros.  */
+typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t)
+                                ? 1 : -1];
+
+#define GNULIB_defined_stdint_types 1
+#endif /* !GNULIB_defined_stdint_types */
+
+/* 7.18.2. Limits of specified-width integer types */
+
+/* 7.18.2.1. Limits of exact-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits.  */
+
+#undef INT8_MIN
+#undef INT8_MAX
+#undef UINT8_MAX
+#define INT8_MIN  (~ INT8_MAX)
+#define INT8_MAX  127
+#define UINT8_MAX  255
+
+#undef INT16_MIN
+#undef INT16_MAX
+#undef UINT16_MAX
+#define INT16_MIN  (~ INT16_MAX)
+#define INT16_MAX  32767
+#define UINT16_MAX  65535
+
+#undef INT32_MIN
+#undef INT32_MAX
+#undef UINT32_MAX
+#define INT32_MIN  (~ INT32_MAX)
+#define INT32_MAX  2147483647
+#define UINT32_MAX  4294967295U
+
+#if defined GL_INT64_T && ! defined INT64_MAX
+/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0
+   evaluates the latter incorrectly in preprocessor expressions.  */
+# define INT64_MIN  (- INTMAX_C (1) << 63)
+# define INT64_MAX  INTMAX_C (9223372036854775807)
+#endif
+
+#if defined GL_UINT64_T && ! defined UINT64_MAX
+# define UINT64_MAX  UINTMAX_C (18446744073709551615)
+#endif
+
+/* 7.18.2.2. Limits of minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
+   are the same as the corresponding N_t types.  */
+
+#undef INT_LEAST8_MIN
+#undef INT_LEAST8_MAX
+#undef UINT_LEAST8_MAX
+#define INT_LEAST8_MIN  INT8_MIN
+#define INT_LEAST8_MAX  INT8_MAX
+#define UINT_LEAST8_MAX  UINT8_MAX
+
+#undef INT_LEAST16_MIN
+#undef INT_LEAST16_MAX
+#undef UINT_LEAST16_MAX
+#define INT_LEAST16_MIN  INT16_MIN
+#define INT_LEAST16_MAX  INT16_MAX
+#define UINT_LEAST16_MAX  UINT16_MAX
+
+#undef INT_LEAST32_MIN
+#undef INT_LEAST32_MAX
+#undef UINT_LEAST32_MAX
+#define INT_LEAST32_MIN  INT32_MIN
+#define INT_LEAST32_MAX  INT32_MAX
+#define UINT_LEAST32_MAX  UINT32_MAX
+
+#undef INT_LEAST64_MIN
+#undef INT_LEAST64_MAX
+#ifdef GL_INT64_T
+# define INT_LEAST64_MIN  INT64_MIN
+# define INT_LEAST64_MAX  INT64_MAX
+#endif
+
+#undef UINT_LEAST64_MAX
+#ifdef GL_UINT64_T
+# define UINT_LEAST64_MAX  UINT64_MAX
+#endif
+
+/* 7.18.2.3. Limits of fastest minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
+   are taken from the same list of types.  */
+
+#undef INT_FAST8_MIN
+#undef INT_FAST8_MAX
+#undef UINT_FAST8_MAX
+#define INT_FAST8_MIN  SCHAR_MIN
+#define INT_FAST8_MAX  SCHAR_MAX
+#define UINT_FAST8_MAX  UCHAR_MAX
+
+#undef INT_FAST16_MIN
+#undef INT_FAST16_MAX
+#undef UINT_FAST16_MAX
+#define INT_FAST16_MIN  INT_FAST32_MIN
+#define INT_FAST16_MAX  INT_FAST32_MAX
+#define UINT_FAST16_MAX  UINT_FAST32_MAX
+
+#undef INT_FAST32_MIN
+#undef INT_FAST32_MAX
+#undef UINT_FAST32_MAX
+#ifdef __sun
+# define INT_FAST32_MIN  INT_MIN
+# define INT_FAST32_MAX  INT_MAX
+# define UINT_FAST32_MAX  UINT_MAX
+#else
+# define INT_FAST32_MIN  LONG_MIN
+# define INT_FAST32_MAX  LONG_MAX
+# define UINT_FAST32_MAX  ULONG_MAX
+#endif
+
+#undef INT_FAST64_MIN
+#undef INT_FAST64_MAX
+#ifdef GL_INT64_T
+# define INT_FAST64_MIN  INT64_MIN
+# define INT_FAST64_MAX  INT64_MAX
+#endif
+
+#undef UINT_FAST64_MAX
+#ifdef GL_UINT64_T
+# define UINT_FAST64_MAX  UINT64_MAX
+#endif
+
+/* 7.18.2.4. Limits of integer types capable of holding object pointers */
+
+#undef INTPTR_MIN
+#undef INTPTR_MAX
+#undef UINTPTR_MAX
+#define INTPTR_MIN  LONG_MIN
+#define INTPTR_MAX  LONG_MAX
+#define UINTPTR_MAX  ULONG_MAX
+
+/* 7.18.2.5. Limits of greatest-width integer types */
+
+#ifndef INTMAX_MAX
+# undef INTMAX_MIN
+# ifdef INT64_MAX
+#  define INTMAX_MIN  INT64_MIN
+#  define INTMAX_MAX  INT64_MAX
+# else
+#  define INTMAX_MIN  INT32_MIN
+#  define INTMAX_MAX  INT32_MAX
+# endif
+#endif
+
+#ifndef UINTMAX_MAX
+# ifdef UINT64_MAX
+#  define UINTMAX_MAX  UINT64_MAX
+# else
+#  define UINTMAX_MAX  UINT32_MAX
+# endif
+#endif
+
+/* 7.18.3. Limits of other integer types */
+
+/* ptrdiff_t limits */
+#undef PTRDIFF_MIN
+#undef PTRDIFF_MAX
+#if @APPLE_UNIVERSAL_BUILD@
+# ifdef _LP64
+#  define PTRDIFF_MIN  _STDINT_MIN (1, 64, 0l)
+#  define PTRDIFF_MAX  _STDINT_MAX (1, 64, 0l)
+# else
+#  define PTRDIFF_MIN  _STDINT_MIN (1, 32, 0)
+#  define PTRDIFF_MAX  _STDINT_MAX (1, 32, 0)
+# endif
+#else
+# define PTRDIFF_MIN  \
+    _STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0 at PTRDIFF_T_SUFFIX@)
+# define PTRDIFF_MAX  \
+    _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0 at PTRDIFF_T_SUFFIX@)
+#endif
+
+/* sig_atomic_t limits */
+#undef SIG_ATOMIC_MIN
+#undef SIG_ATOMIC_MAX
+#define SIG_ATOMIC_MIN  \
+   _STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
+                0 at SIG_ATOMIC_T_SUFFIX@)
+#define SIG_ATOMIC_MAX  \
+   _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
+                0 at SIG_ATOMIC_T_SUFFIX@)
+
+
+/* size_t limit */
+#undef SIZE_MAX
+#if @APPLE_UNIVERSAL_BUILD@
+# ifdef _LP64
+#  define SIZE_MAX  _STDINT_MAX (0, 64, 0ul)
+# else
+#  define SIZE_MAX  _STDINT_MAX (0, 32, 0ul)
+# endif
+#else
+# define SIZE_MAX  _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0 at SIZE_T_SUFFIX@)
+#endif
+
+/* wchar_t limits */
+/* Get WCHAR_MIN, WCHAR_MAX.
+   This include is not on the top, above, because on OSF/1 4.0 we have a
+   sequence of nested includes
+   <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes
+   <stdint.h> and assumes its types are already defined.  */
+#if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX)
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
+# include <wchar.h>
+# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
+#endif
+#undef WCHAR_MIN
+#undef WCHAR_MAX
+#define WCHAR_MIN  \
+   _STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0 at WCHAR_T_SUFFIX@)
+#define WCHAR_MAX  \
+   _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0 at WCHAR_T_SUFFIX@)
+
+/* wint_t limits */
+#undef WINT_MIN
+#undef WINT_MAX
+#define WINT_MIN  \
+   _STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0 at WINT_T_SUFFIX@)
+#define WINT_MAX  \
+   _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0 at WINT_T_SUFFIX@)
+
+/* 7.18.4. Macros for integer constants */
+
+/* 7.18.4.1. Macros for minimum-width integer constants */
+/* According to ISO C 99 Technical Corrigendum 1 */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits, and int is 32 bits.  */
+
+#undef INT8_C
+#undef UINT8_C
+#define INT8_C(x) x
+#define UINT8_C(x) x
+
+#undef INT16_C
+#undef UINT16_C
+#define INT16_C(x) x
+#define UINT16_C(x) x
+
+#undef INT32_C
+#undef UINT32_C
+#define INT32_C(x) x
+#define UINT32_C(x) x ## U
+
+#undef INT64_C
+#undef UINT64_C
+#if LONG_MAX >> 31 >> 31 == 1
+# define INT64_C(x) x##L
+#elif defined _MSC_VER
+# define INT64_C(x) x##i64
+#elif @HAVE_LONG_LONG_INT@
+# define INT64_C(x) x##LL
+#endif
+#if ULONG_MAX >> 31 >> 31 >> 1 == 1
+# define UINT64_C(x) x##UL
+#elif defined _MSC_VER
+# define UINT64_C(x) x##ui64
+#elif @HAVE_UNSIGNED_LONG_LONG_INT@
+# define UINT64_C(x) x##ULL
+#endif
+
+/* 7.18.4.2. Macros for greatest-width integer constants */
+
+#ifndef INTMAX_C
+# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
+#  define INTMAX_C(x)   x##LL
+# elif defined GL_INT64_T
+#  define INTMAX_C(x)   INT64_C(x)
+# else
+#  define INTMAX_C(x)   x##L
+# endif
+#endif
+
+#ifndef UINTMAX_C
+# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+#  define UINTMAX_C(x)  x##ULL
+# elif defined GL_UINT64_T
+#  define UINTMAX_C(x)  UINT64_C(x)
+# else
+#  define UINTMAX_C(x)  x##UL
+# endif
+#endif
+
+#endif /* _ at GUARD_PREFIX@_STDINT_H */
+#endif /* !(defined __ANDROID__ && ...) */
+#endif /* !defined _ at GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */
diff --git a/gdb/gnulib/import/str-two-way.h b/gdb/gnulib/import/str-two-way.h
new file mode 100644
index 0000000..af8f77b
--- /dev/null
+++ b/gdb/gnulib/import/str-two-way.h
@@ -0,0 +1,452 @@
+/* Byte-wise substring search, using the Two-Way algorithm.
+   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Written by Eric Blake <ebb9 at byu.net>, 2008.
+
+   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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Before including this file, you need to include <config.h> and
+   <string.h>, and define:
+     RESULT_TYPE             A macro that expands to the return type.
+     AVAILABLE(h, h_l, j, n_l)
+                             A macro that returns nonzero if there are
+                             at least N_L bytes left starting at H[J].
+                             H is 'unsigned char *', H_L, J, and N_L
+                             are 'size_t'; H_L is an lvalue.  For
+                             NUL-terminated searches, H_L can be
+                             modified each iteration to avoid having
+                             to compute the end of H up front.
+
+  For case-insensitivity, you may optionally define:
+     CMP_FUNC(p1, p2, l)     A macro that returns 0 iff the first L
+                             characters of P1 and P2 are equal.
+     CANON_ELEMENT(c)        A macro that canonicalizes an element right after
+                             it has been fetched from one of the two strings.
+                             The argument is an 'unsigned char'; the result
+                             must be an 'unsigned char' as well.
+
+  This file undefines the macros documented above, and defines
+  LONG_NEEDLE_THRESHOLD.
+*/
+
+#include <limits.h>
+#include <stdint.h>
+
+/* We use the Two-Way string matching algorithm (also known as
+   Chrochemore-Perrin), which guarantees linear complexity with
+   constant space.  Additionally, for long needles, we also use a bad
+   character shift table similar to the Boyer-Moore algorithm to
+   achieve improved (potentially sub-linear) performance.
+
+   See http://www-igm.univ-mlv.fr/~lecroq/string/node26.html#SECTION00260,
+   http://en.wikipedia.org/wiki/Boyer-Moore_string_search_algorithm,
+   http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.34.6641&rep=rep1&type=pdf
+*/
+
+/* Point at which computing a bad-byte shift table is likely to be
+   worthwhile.  Small needles should not compute a table, since it
+   adds (1 << CHAR_BIT) + NEEDLE_LEN computations of preparation for a
+   speedup no greater than a factor of NEEDLE_LEN.  The larger the
+   needle, the better the potential performance gain.  On the other
+   hand, on non-POSIX systems with CHAR_BIT larger than eight, the
+   memory required for the table is prohibitive.  */
+#if CHAR_BIT < 10
+# define LONG_NEEDLE_THRESHOLD 32U
+#else
+# define LONG_NEEDLE_THRESHOLD SIZE_MAX
+#endif
+
+#ifndef MAX
+# define MAX(a, b) ((a < b) ? (b) : (a))
+#endif
+
+#ifndef CANON_ELEMENT
+# define CANON_ELEMENT(c) c
+#endif
+#ifndef CMP_FUNC
+# define CMP_FUNC memcmp
+#endif
+
+/* Perform a critical factorization of NEEDLE, of length NEEDLE_LEN.
+   Return the index of the first byte in the right half, and set
+   *PERIOD to the global period of the right half.
+
+   The global period of a string is the smallest index (possibly its
+   length) at which all remaining bytes in the string are repetitions
+   of the prefix (the last repetition may be a subset of the prefix).
+
+   When NEEDLE is factored into two halves, a local period is the
+   length of the smallest word that shares a suffix with the left half
+   and shares a prefix with the right half.  All factorizations of a
+   non-empty NEEDLE have a local period of at least 1 and no greater
+   than NEEDLE_LEN.
+
+   A critical factorization has the property that the local period
+   equals the global period.  All strings have at least one critical
+   factorization with the left half smaller than the global period.
+   And while some strings have more than one critical factorization,
+   it is provable that with an ordered alphabet, at least one of the
+   critical factorizations corresponds to a maximal suffix.
+
+   Given an ordered alphabet, a critical factorization can be computed
+   in linear time, with 2 * NEEDLE_LEN comparisons, by computing the
+   shorter of two ordered maximal suffixes.  The ordered maximal
+   suffixes are determined by lexicographic comparison while tracking
+   periodicity.  */
+static size_t
+critical_factorization (const unsigned char *needle, size_t needle_len,
+                        size_t *period)
+{
+  /* Index of last byte of left half, or SIZE_MAX.  */
+  size_t max_suffix, max_suffix_rev;
+  size_t j; /* Index into NEEDLE for current candidate suffix.  */
+  size_t k; /* Offset into current period.  */
+  size_t p; /* Intermediate period.  */
+  unsigned char a, b; /* Current comparison bytes.  */
+
+  /* Special case NEEDLE_LEN of 1 or 2 (all callers already filtered
+     out 0-length needles.  */
+  if (needle_len < 3)
+    {
+      *period = 1;
+      return needle_len - 1;
+    }
+
+  /* Invariants:
+     0 <= j < NEEDLE_LEN - 1
+     -1 <= max_suffix{,_rev} < j (treating SIZE_MAX as if it were signed)
+     min(max_suffix, max_suffix_rev) < global period of NEEDLE
+     1 <= p <= global period of NEEDLE
+     p == global period of the substring NEEDLE[max_suffix{,_rev}+1...j]
+     1 <= k <= p
+  */
+
+  /* Perform lexicographic search.  */
+  max_suffix = SIZE_MAX;
+  j = 0;
+  k = p = 1;
+  while (j + k < needle_len)
+    {
+      a = CANON_ELEMENT (needle[j + k]);
+      b = CANON_ELEMENT (needle[max_suffix + k]);
+      if (a < b)
+        {
+          /* Suffix is smaller, period is entire prefix so far.  */
+          j += k;
+          k = 1;
+          p = j - max_suffix;
+        }
+      else if (a == b)
+        {
+          /* Advance through repetition of the current period.  */
+          if (k != p)
+            ++k;
+          else
+            {
+              j += p;
+              k = 1;
+            }
+        }
+      else /* b < a */
+        {
+          /* Suffix is larger, start over from current location.  */
+          max_suffix = j++;
+          k = p = 1;
+        }
+    }
+  *period = p;
+
+  /* Perform reverse lexicographic search.  */
+  max_suffix_rev = SIZE_MAX;
+  j = 0;
+  k = p = 1;
+  while (j + k < needle_len)
+    {
+      a = CANON_ELEMENT (needle[j + k]);
+      b = CANON_ELEMENT (needle[max_suffix_rev + k]);
+      if (b < a)
+        {
+          /* Suffix is smaller, period is entire prefix so far.  */
+          j += k;
+          k = 1;
+          p = j - max_suffix_rev;
+        }
+      else if (a == b)
+        {
+          /* Advance through repetition of the current period.  */
+          if (k != p)
+            ++k;
+          else
+            {
+              j += p;
+              k = 1;
+            }
+        }
+      else /* a < b */
+        {
+          /* Suffix is larger, start over from current location.  */
+          max_suffix_rev = j++;
+          k = p = 1;
+        }
+    }
+
+  /* Choose the shorter suffix.  Return the index of the first byte of
+     the right half, rather than the last byte of the left half.
+
+     For some examples, 'banana' has two critical factorizations, both
+     exposed by the two lexicographic extreme suffixes of 'anana' and
+     'nana', where both suffixes have a period of 2.  On the other
+     hand, with 'aab' and 'bba', both strings have a single critical
+     factorization of the last byte, with the suffix having a period
+     of 1.  While the maximal lexicographic suffix of 'aab' is 'b',
+     the maximal lexicographic suffix of 'bba' is 'ba', which is not a
+     critical factorization.  Conversely, the maximal reverse
+     lexicographic suffix of 'a' works for 'bba', but not 'ab' for
+     'aab'.  The shorter suffix of the two will always be a critical
+     factorization.  */
+  if (max_suffix_rev + 1 < max_suffix + 1)
+    return max_suffix + 1;
+  *period = p;
+  return max_suffix_rev + 1;
+}
+
+/* Return the first location of non-empty NEEDLE within HAYSTACK, or
+   NULL.  HAYSTACK_LEN is the minimum known length of HAYSTACK.  This
+   method is optimized for NEEDLE_LEN < LONG_NEEDLE_THRESHOLD.
+   Performance is guaranteed to be linear, with an initialization cost
+   of 2 * NEEDLE_LEN comparisons.
+
+   If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at
+   most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching.
+   If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 *
+   HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching.  */
+static RETURN_TYPE
+two_way_short_needle (const unsigned char *haystack, size_t haystack_len,
+                      const unsigned char *needle, size_t needle_len)
+{
+  size_t i; /* Index into current byte of NEEDLE.  */
+  size_t j; /* Index into current window of HAYSTACK.  */
+  size_t period; /* The period of the right half of needle.  */
+  size_t suffix; /* The index of the right half of needle.  */
+
+  /* Factor the needle into two halves, such that the left half is
+     smaller than the global period, and the right half is
+     periodic (with a period as large as NEEDLE_LEN - suffix).  */
+  suffix = critical_factorization (needle, needle_len, &period);
+
+  /* Perform the search.  Each iteration compares the right half
+     first.  */
+  if (CMP_FUNC (needle, needle + period, suffix) == 0)
+    {
+      /* Entire needle is periodic; a mismatch in the left half can
+         only advance by the period, so use memory to avoid rescanning
+         known occurrences of the period in the right half.  */
+      size_t memory = 0;
+      j = 0;
+      while (AVAILABLE (haystack, haystack_len, j, needle_len))
+        {
+          /* Scan for matches in right half.  */
+          i = MAX (suffix, memory);
+          while (i < needle_len && (CANON_ELEMENT (needle[i])
+                                    == CANON_ELEMENT (haystack[i + j])))
+            ++i;
+          if (needle_len <= i)
+            {
+              /* Scan for matches in left half.  */
+              i = suffix - 1;
+              while (memory < i + 1 && (CANON_ELEMENT (needle[i])
+                                        == CANON_ELEMENT (haystack[i + j])))
+                --i;
+              if (i + 1 < memory + 1)
+                return (RETURN_TYPE) (haystack + j);
+              /* No match, so remember how many repetitions of period
+                 on the right half were scanned.  */
+              j += period;
+              memory = needle_len - period;
+            }
+          else
+            {
+              j += i - suffix + 1;
+              memory = 0;
+            }
+        }
+    }
+  else
+    {
+      /* The two halves of needle are distinct; no extra memory is
+         required, and any mismatch results in a maximal shift.  */
+      period = MAX (suffix, needle_len - suffix) + 1;
+      j = 0;
+      while (AVAILABLE (haystack, haystack_len, j, needle_len))
+        {
+          /* Scan for matches in right half.  */
+          i = suffix;
+          while (i < needle_len && (CANON_ELEMENT (needle[i])
+                                    == CANON_ELEMENT (haystack[i + j])))
+            ++i;
+          if (needle_len <= i)
+            {
+              /* Scan for matches in left half.  */
+              i = suffix - 1;
+              while (i != SIZE_MAX && (CANON_ELEMENT (needle[i])
+                                       == CANON_ELEMENT (haystack[i + j])))
+                --i;
+              if (i == SIZE_MAX)
+                return (RETURN_TYPE) (haystack + j);
+              j += period;
+            }
+          else
+            j += i - suffix + 1;
+        }
+    }
+  return NULL;
+}
+
+/* Return the first location of non-empty NEEDLE within HAYSTACK, or
+   NULL.  HAYSTACK_LEN is the minimum known length of HAYSTACK.  This
+   method is optimized for LONG_NEEDLE_THRESHOLD <= NEEDLE_LEN.
+   Performance is guaranteed to be linear, with an initialization cost
+   of 3 * NEEDLE_LEN + (1 << CHAR_BIT) operations.
+
+   If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at
+   most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching,
+   and sublinear performance O(HAYSTACK_LEN / NEEDLE_LEN) is possible.
+   If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 *
+   HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, and
+   sublinear performance is not possible.  */
+static RETURN_TYPE
+two_way_long_needle (const unsigned char *haystack, size_t haystack_len,
+                     const unsigned char *needle, size_t needle_len)
+{
+  size_t i; /* Index into current byte of NEEDLE.  */
+  size_t j; /* Index into current window of HAYSTACK.  */
+  size_t period; /* The period of the right half of needle.  */
+  size_t suffix; /* The index of the right half of needle.  */
+  size_t shift_table[1U << CHAR_BIT]; /* See below.  */
+
+  /* Factor the needle into two halves, such that the left half is
+     smaller than the global period, and the right half is
+     periodic (with a period as large as NEEDLE_LEN - suffix).  */
+  suffix = critical_factorization (needle, needle_len, &period);
+
+  /* Populate shift_table.  For each possible byte value c,
+     shift_table[c] is the distance from the last occurrence of c to
+     the end of NEEDLE, or NEEDLE_LEN if c is absent from the NEEDLE.
+     shift_table[NEEDLE[NEEDLE_LEN - 1]] contains the only 0.  */
+  for (i = 0; i < 1U << CHAR_BIT; i++)
+    shift_table[i] = needle_len;
+  for (i = 0; i < needle_len; i++)
+    shift_table[CANON_ELEMENT (needle[i])] = needle_len - i - 1;
+
+  /* Perform the search.  Each iteration compares the right half
+     first.  */
+  if (CMP_FUNC (needle, needle + period, suffix) == 0)
+    {
+      /* Entire needle is periodic; a mismatch in the left half can
+         only advance by the period, so use memory to avoid rescanning
+         known occurrences of the period in the right half.  */
+      size_t memory = 0;
+      size_t shift;
+      j = 0;
+      while (AVAILABLE (haystack, haystack_len, j, needle_len))
+        {
+          /* Check the last byte first; if it does not match, then
+             shift to the next possible match location.  */
+          shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])];
+          if (0 < shift)
+            {
+              if (memory && shift < period)
+                {
+                  /* Since needle is periodic, but the last period has
+                     a byte out of place, there can be no match until
+                     after the mismatch.  */
+                  shift = needle_len - period;
+                }
+              memory = 0;
+              j += shift;
+              continue;
+            }
+          /* Scan for matches in right half.  The last byte has
+             already been matched, by virtue of the shift table.  */
+          i = MAX (suffix, memory);
+          while (i < needle_len - 1 && (CANON_ELEMENT (needle[i])
+                                        == CANON_ELEMENT (haystack[i + j])))
+            ++i;
+          if (needle_len - 1 <= i)
+            {
+              /* Scan for matches in left half.  */
+              i = suffix - 1;
+              while (memory < i + 1 && (CANON_ELEMENT (needle[i])
+                                        == CANON_ELEMENT (haystack[i + j])))
+                --i;
+              if (i + 1 < memory + 1)
+                return (RETURN_TYPE) (haystack + j);
+              /* No match, so remember how many repetitions of period
+                 on the right half were scanned.  */
+              j += period;
+              memory = needle_len - period;
+            }
+          else
+            {
+              j += i - suffix + 1;
+              memory = 0;
+            }
+        }
+    }
+  else
+    {
+      /* The two halves of needle are distinct; no extra memory is
+         required, and any mismatch results in a maximal shift.  */
+      size_t shift;
+      period = MAX (suffix, needle_len - suffix) + 1;
+      j = 0;
+      while (AVAILABLE (haystack, haystack_len, j, needle_len))
+        {
+          /* Check the last byte first; if it does not match, then
+             shift to the next possible match location.  */
+          shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])];
+          if (0 < shift)
+            {
+              j += shift;
+              continue;
+            }
+          /* Scan for matches in right half.  The last byte has
+             already been matched, by virtue of the shift table.  */
+          i = suffix;
+          while (i < needle_len - 1 && (CANON_ELEMENT (needle[i])
+                                        == CANON_ELEMENT (haystack[i + j])))
+            ++i;
+          if (needle_len - 1 <= i)
+            {
+              /* Scan for matches in left half.  */
+              i = suffix - 1;
+              while (i != SIZE_MAX && (CANON_ELEMENT (needle[i])
+                                       == CANON_ELEMENT (haystack[i + j])))
+                --i;
+              if (i == SIZE_MAX)
+                return (RETURN_TYPE) (haystack + j);
+              j += period;
+            }
+          else
+            j += i - suffix + 1;
+        }
+    }
+  return NULL;
+}
+
+#undef AVAILABLE
+#undef CANON_ELEMENT
+#undef CMP_FUNC
+#undef MAX
+#undef RETURN_TYPE
diff --git a/gdb/gnulib/import/streq.h b/gdb/gnulib/import/streq.h
new file mode 100644
index 0000000..b312f7f
--- /dev/null
+++ b/gdb/gnulib/import/streq.h
@@ -0,0 +1,176 @@
+/* Optimized string comparison.
+   Copyright (C) 2001-2002, 2007, 2009-2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno at clisp.org>.  */
+
+#ifndef _GL_STREQ_H
+#define _GL_STREQ_H
+
+#include <string.h>
+
+/* STREQ_OPT allows to optimize string comparison with a small literal string.
+     STREQ_OPT (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
+   is semantically equivalent to
+     strcmp (s, "EUC-KR") == 0
+   just faster.  */
+
+/* Help GCC to generate good code for string comparisons with
+   immediate strings. */
+#if defined (__GNUC__) && defined (__OPTIMIZE__)
+
+static inline int
+streq9 (const char *s1, const char *s2)
+{
+  return strcmp (s1 + 9, s2 + 9) == 0;
+}
+
+static inline int
+streq8 (const char *s1, const char *s2, char s28)
+{
+  if (s1[8] == s28)
+    {
+      if (s28 == 0)
+        return 1;
+      else
+        return streq9 (s1, s2);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq7 (const char *s1, const char *s2, char s27, char s28)
+{
+  if (s1[7] == s27)
+    {
+      if (s27 == 0)
+        return 1;
+      else
+        return streq8 (s1, s2, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq6 (const char *s1, const char *s2, char s26, char s27, char s28)
+{
+  if (s1[6] == s26)
+    {
+      if (s26 == 0)
+        return 1;
+      else
+        return streq7 (s1, s2, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28)
+{
+  if (s1[5] == s25)
+    {
+      if (s25 == 0)
+        return 1;
+      else
+        return streq6 (s1, s2, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[4] == s24)
+    {
+      if (s24 == 0)
+        return 1;
+      else
+        return streq5 (s1, s2, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[3] == s23)
+    {
+      if (s23 == 0)
+        return 1;
+      else
+        return streq4 (s1, s2, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[2] == s22)
+    {
+      if (s22 == 0)
+        return 1;
+      else
+        return streq3 (s1, s2, s23, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[1] == s21)
+    {
+      if (s21 == 0)
+        return 1;
+      else
+        return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[0] == s20)
+    {
+      if (s20 == 0)
+        return 1;
+      else
+        return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+#define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
+  streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28)
+
+#else
+
+#define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
+  (strcmp (s1, s2) == 0)
+
+#endif
+
+#endif /* _GL_STREQ_H */
diff --git a/gdb/gnulib/import/string.in.h b/gdb/gnulib/import/string.in.h
new file mode 100644
index 0000000..f8d7520
--- /dev/null
+++ b/gdb/gnulib/import/string.in.h
@@ -0,0 +1,1029 @@
+/* A GNU-like <string.h>.
+
+   Copyright (C) 1995-1996, 2001-2012 Free Software Foundation, Inc.
+
+   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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ at GUARD_PREFIX@_STRING_H
+
+#if __GNUC__ >= 3
+ at PRAGMA_SYSTEM_HEADER@
+#endif
+ at PRAGMA_COLUMNS@
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_STRING_H@
+
+#ifndef _ at GUARD_PREFIX@_STRING_H
+#define _ at GUARD_PREFIX@_STRING_H
+
+/* NetBSD 5.0 mis-defines NULL.  */
+#include <stddef.h>
+
+/* MirBSD defines mbslen as a macro.  */
+#if @GNULIB_MBSLEN@ && defined __MirBSD__
+# include <wchar.h>
+#endif
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The attribute __pure__ was added in gcc 2.96.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+/* NetBSD 5.0 declares strsignal in <unistd.h>, not in <string.h>.  */
+/* But in any case avoid namespace pollution on glibc systems.  */
+#if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \
+    && ! defined __GLIBC__
+# include <unistd.h>
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+
+/* Find the index of the least-significant set bit.  */
+#if @GNULIB_FFSL@
+# if !@HAVE_FFSL@
+_GL_FUNCDECL_SYS (ffsl, int, (long int i));
+# endif
+_GL_CXXALIAS_SYS (ffsl, int, (long int i));
+_GL_CXXALIASWARN (ffsl);
+#elif defined GNULIB_POSIXCHECK
+# undef ffsl
+# if HAVE_RAW_DECL_FFSL
+_GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module");
+# endif
+#endif
+
+
+/* Find the index of the least-significant set bit.  */
+#if @GNULIB_FFSLL@
+# if !@HAVE_FFSLL@
+_GL_FUNCDECL_SYS (ffsll, int, (long long int i));
+# endif
+_GL_CXXALIAS_SYS (ffsll, int, (long long int i));
+_GL_CXXALIASWARN (ffsll);
+#elif defined GNULIB_POSIXCHECK
+# undef ffsll
+# if HAVE_RAW_DECL_FFSLL
+_GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module");
+# endif
+#endif
+
+
+/* Return the first instance of C within N bytes of S, or NULL.  */
+#if @GNULIB_MEMCHR@
+# if @REPLACE_MEMCHR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define memchr rpl_memchr
+#  endif
+_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n));
+# else
+#  if ! @HAVE_MEMCHR@
+_GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+#  endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C" { const void * std::memchr (const void *, int, size_t); }
+       extern "C++" { void * std::memchr (void *, int, size_t); }  */
+_GL_CXXALIAS_SYS_CAST2 (memchr,
+                        void *, (void const *__s, int __c, size_t __n),
+                        void const *, (void const *__s, int __c, size_t __n));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n));
+_GL_CXXALIASWARN1 (memchr, void const *,
+                   (void const *__s, int __c, size_t __n));
+# else
+_GL_CXXALIASWARN (memchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef memchr
+/* Assume memchr is always declared.  */
+_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - "
+                 "use gnulib module memchr for portability" );
+#endif
+
+/* Return the first occurrence of NEEDLE in HAYSTACK.  */
+#if @GNULIB_MEMMEM@
+# if @REPLACE_MEMMEM@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define memmem rpl_memmem
+#  endif
+_GL_FUNCDECL_RPL (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len)
+                  _GL_ATTRIBUTE_PURE
+                  _GL_ARG_NONNULL ((1, 3)));
+_GL_CXXALIAS_RPL (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len));
+# else
+#  if ! @HAVE_DECL_MEMMEM@
+_GL_FUNCDECL_SYS (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len)
+                  _GL_ATTRIBUTE_PURE
+                  _GL_ARG_NONNULL ((1, 3)));
+#  endif
+_GL_CXXALIAS_SYS (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len));
+# endif
+_GL_CXXALIASWARN (memmem);
+#elif defined GNULIB_POSIXCHECK
+# undef memmem
+# if HAVE_RAW_DECL_MEMMEM
+_GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - "
+                 "use gnulib module memmem-simple for portability, "
+                 "and module memmem for speed" );
+# endif
+#endif
+
+/* Copy N bytes of SRC to DEST, return pointer to bytes after the
+   last written byte.  */
+#if @GNULIB_MEMPCPY@
+# if ! @HAVE_MEMPCPY@
+_GL_FUNCDECL_SYS (mempcpy, void *,
+                  (void *restrict __dest, void const *restrict __src,
+                   size_t __n)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (mempcpy, void *,
+                  (void *restrict __dest, void const *restrict __src,
+                   size_t __n));
+_GL_CXXALIASWARN (mempcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef mempcpy
+# if HAVE_RAW_DECL_MEMPCPY
+_GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - "
+                 "use gnulib module mempcpy for portability");
+# endif
+#endif
+
+/* Search backwards through a block for a byte (specified as an int).  */
+#if @GNULIB_MEMRCHR@
+# if ! @HAVE_DECL_MEMRCHR@
+_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const void * std::memrchr (const void *, int, size_t); }
+       extern "C++" { void * std::memrchr (void *, int, size_t); }  */
+_GL_CXXALIAS_SYS_CAST2 (memrchr,
+                        void *, (void const *, int, size_t),
+                        void const *, (void const *, int, size_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t));
+_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t));
+# else
+_GL_CXXALIASWARN (memrchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef memrchr
+# if HAVE_RAW_DECL_MEMRCHR
+_GL_WARN_ON_USE (memrchr, "memrchr is unportable - "
+                 "use gnulib module memrchr for portability");
+# endif
+#endif
+
+/* Find the first occurrence of C in S.  More efficient than
+   memchr(S,C,N), at the expense of undefined behavior if C does not
+   occur within N bytes.  */
+#if @GNULIB_RAWMEMCHR@
+# if ! @HAVE_RAWMEMCHR@
+_GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in)
+                                     _GL_ATTRIBUTE_PURE
+                                     _GL_ARG_NONNULL ((1)));
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const void * std::rawmemchr (const void *, int); }
+       extern "C++" { void * std::rawmemchr (void *, int); }  */
+_GL_CXXALIAS_SYS_CAST2 (rawmemchr,
+                        void *, (void const *__s, int __c_in),
+                        void const *, (void const *__s, int __c_in));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in));
+_GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in));
+# else
+_GL_CXXALIASWARN (rawmemchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef rawmemchr
+# if HAVE_RAW_DECL_RAWMEMCHR
+_GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - "
+                 "use gnulib module rawmemchr for portability");
+# endif
+#endif
+
+/* Copy SRC to DST, returning the address of the terminating '\0' in DST.  */
+#if @GNULIB_STPCPY@
+# if ! @HAVE_STPCPY@
+_GL_FUNCDECL_SYS (stpcpy, char *,
+                  (char *restrict __dst, char const *restrict __src)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (stpcpy, char *,
+                  (char *restrict __dst, char const *restrict __src));
+_GL_CXXALIASWARN (stpcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef stpcpy
+# if HAVE_RAW_DECL_STPCPY
+_GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - "
+                 "use gnulib module stpcpy for portability");
+# endif
+#endif
+
+/* Copy no more than N bytes of SRC to DST, returning a pointer past the
+   last non-NUL byte written into DST.  */
+#if @GNULIB_STPNCPY@
+# if @REPLACE_STPNCPY@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef stpncpy
+#   define stpncpy rpl_stpncpy
+#  endif
+_GL_FUNCDECL_RPL (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n));
+# else
+#  if ! @HAVE_STPNCPY@
+_GL_FUNCDECL_SYS (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n));
+# endif
+_GL_CXXALIASWARN (stpncpy);
+#elif defined GNULIB_POSIXCHECK
+# undef stpncpy
+# if HAVE_RAW_DECL_STPNCPY
+_GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - "
+                 "use gnulib module stpncpy for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strchr() does not work with multibyte strings if the locale encoding is
+   GB18030 and the character to be searched is a digit.  */
+# undef strchr
+/* Assume strchr is always declared.  */
+_GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings "
+                 "in some multibyte locales - "
+                 "use mbschr if you care about internationalization");
+#endif
+
+/* Find the first occurrence of C in S or the final NUL byte.  */
+#if @GNULIB_STRCHRNUL@
+# if @REPLACE_STRCHRNUL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strchrnul rpl_strchrnul
+#  endif
+_GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in)
+                                     _GL_ATTRIBUTE_PURE
+                                     _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strchrnul, char *,
+                  (const char *str, int ch));
+# else
+#  if ! @HAVE_STRCHRNUL@
+_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in)
+                                     _GL_ATTRIBUTE_PURE
+                                     _GL_ARG_NONNULL ((1)));
+#  endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const char * std::strchrnul (const char *, int); }
+       extern "C++" { char * std::strchrnul (char *, int); }  */
+_GL_CXXALIAS_SYS_CAST2 (strchrnul,
+                        char *, (char const *__s, int __c_in),
+                        char const *, (char const *__s, int __c_in));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in));
+_GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in));
+# else
+_GL_CXXALIASWARN (strchrnul);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strchrnul
+# if HAVE_RAW_DECL_STRCHRNUL
+_GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - "
+                 "use gnulib module strchrnul for portability");
+# endif
+#endif
+
+/* Duplicate S, returning an identical malloc'd string.  */
+#if @GNULIB_STRDUP@
+# if @REPLACE_STRDUP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strdup
+#   define strdup rpl_strdup
+#  endif
+_GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strdup, char *, (char const *__s));
+# else
+#  if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup
+    /* strdup exists as a function and as a macro.  Get rid of the macro.  */
+#   undef strdup
+#  endif
+#  if !(@HAVE_DECL_STRDUP@ || defined strdup)
+_GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strdup, char *, (char const *__s));
+# endif
+_GL_CXXALIASWARN (strdup);
+#elif defined GNULIB_POSIXCHECK
+# undef strdup
+# if HAVE_RAW_DECL_STRDUP
+_GL_WARN_ON_USE (strdup, "strdup is unportable - "
+                 "use gnulib module strdup for portability");
+# endif
+#endif
+
+/* Append no more than N characters from SRC onto DEST.  */
+#if @GNULIB_STRNCAT@
+# if @REPLACE_STRNCAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strncat
+#   define strncat rpl_strncat
+#  endif
+_GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n)
+                                   _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n));
+# else
+_GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n));
+# endif
+_GL_CXXALIASWARN (strncat);
+#elif defined GNULIB_POSIXCHECK
+# undef strncat
+# if HAVE_RAW_DECL_STRNCAT
+_GL_WARN_ON_USE (strncat, "strncat is unportable - "
+                 "use gnulib module strncat for portability");
+# endif
+#endif
+
+/* Return a newly allocated copy of at most N bytes of STRING.  */
+#if @GNULIB_STRNDUP@
+# if @REPLACE_STRNDUP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strndup
+#   define strndup rpl_strndup
+#  endif
+_GL_FUNCDECL_RPL (strndup, char *, (char const *__string, size_t __n)
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strndup, char *, (char const *__string, size_t __n));
+# else
+#  if ! @HAVE_DECL_STRNDUP@
+_GL_FUNCDECL_SYS (strndup, char *, (char const *__string, size_t __n)
+                                   _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strndup, char *, (char const *__string, size_t __n));
+# endif
+_GL_CXXALIASWARN (strndup);
+#elif defined GNULIB_POSIXCHECK
+# undef strndup
+# if HAVE_RAW_DECL_STRNDUP
+_GL_WARN_ON_USE (strndup, "strndup is unportable - "
+                 "use gnulib module strndup for portability");
+# endif
+#endif
+
+/* Find the length (number of bytes) of STRING, but scan at most
+   MAXLEN bytes.  If no '\0' terminator is found in that many bytes,
+   return MAXLEN.  */
+#if @GNULIB_STRNLEN@
+# if @REPLACE_STRNLEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strnlen
+#   define strnlen rpl_strnlen
+#  endif
+_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__string, size_t __maxlen)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__string, size_t __maxlen));
+# else
+#  if ! @HAVE_DECL_STRNLEN@
+_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__string, size_t __maxlen)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__string, size_t __maxlen));
+# endif
+_GL_CXXALIASWARN (strnlen);
+#elif defined GNULIB_POSIXCHECK
+# undef strnlen
+# if HAVE_RAW_DECL_STRNLEN
+_GL_WARN_ON_USE (strnlen, "strnlen is unportable - "
+                 "use gnulib module strnlen for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strcspn() assumes the second argument is a list of single-byte characters.
+   Even in this simple case, it does not work with multibyte strings if the
+   locale encoding is GB18030 and one of the characters to be searched is a
+   digit.  */
+# undef strcspn
+/* Assume strcspn is always declared.  */
+_GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbscspn if you care about internationalization");
+#endif
+
+/* Find the first occurrence in S of any character in ACCEPT.  */
+#if @GNULIB_STRPBRK@
+# if ! @HAVE_STRPBRK@
+_GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1, 2)));
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C" { const char * strpbrk (const char *, const char *); }
+       extern "C++" { char * strpbrk (char *, const char *); }  */
+_GL_CXXALIAS_SYS_CAST2 (strpbrk,
+                        char *, (char const *__s, char const *__accept),
+                        const char *, (char const *__s, char const *__accept));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept));
+_GL_CXXALIASWARN1 (strpbrk, char const *,
+                   (char const *__s, char const *__accept));
+# else
+_GL_CXXALIASWARN (strpbrk);
+# endif
+# if defined GNULIB_POSIXCHECK
+/* strpbrk() assumes the second argument is a list of single-byte characters.
+   Even in this simple case, it does not work with multibyte strings if the
+   locale encoding is GB18030 and one of the characters to be searched is a
+   digit.  */
+#  undef strpbrk
+_GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbspbrk if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strpbrk
+# if HAVE_RAW_DECL_STRPBRK
+_GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - "
+                 "use gnulib module strpbrk for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strspn() assumes the second argument is a list of single-byte characters.
+   Even in this simple case, it cannot work with multibyte strings.  */
+# undef strspn
+/* Assume strspn is always declared.  */
+_GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbsspn if you care about internationalization");
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strrchr() does not work with multibyte strings if the locale encoding is
+   GB18030 and the character to be searched is a digit.  */
+# undef strrchr
+/* Assume strrchr is always declared.  */
+_GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings "
+                 "in some multibyte locales - "
+                 "use mbsrchr if you care about internationalization");
+#endif
+
+/* Search the next delimiter (char listed in DELIM) starting at *STRINGP.
+   If one is found, overwrite it with a NUL, and advance *STRINGP
+   to point to the next char after it.  Otherwise, set *STRINGP to NULL.
+   If *STRINGP was already NULL, nothing happens.
+   Return the old value of *STRINGP.
+
+   This is a variant of strtok() that is multithread-safe and supports
+   empty fields.
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+   Caveat: It doesn't work with multibyte strings unless all of the delimiter
+           characters are ASCII characters < 0x30.
+
+   See also strtok_r().  */
+#if @GNULIB_STRSEP@
+# if ! @HAVE_STRSEP@
+_GL_FUNCDECL_SYS (strsep, char *,
+                  (char **restrict __stringp, char const *restrict __delim)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (strsep, char *,
+                  (char **restrict __stringp, char const *restrict __delim));
+_GL_CXXALIASWARN (strsep);
+# if defined GNULIB_POSIXCHECK
+#  undef strsep
+_GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbssep if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strsep
+# if HAVE_RAW_DECL_STRSEP
+_GL_WARN_ON_USE (strsep, "strsep is unportable - "
+                 "use gnulib module strsep for portability");
+# endif
+#endif
+
+#if @GNULIB_STRSTR@
+# if @REPLACE_STRSTR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strstr rpl_strstr
+#  endif
+_GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle));
+# else
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const char * strstr (const char *, const char *); }
+       extern "C++" { char * strstr (char *, const char *); }  */
+_GL_CXXALIAS_SYS_CAST2 (strstr,
+                        char *, (const char *haystack, const char *needle),
+                        const char *, (const char *haystack, const char *needle));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle));
+_GL_CXXALIASWARN1 (strstr, const char *,
+                   (const char *haystack, const char *needle));
+# else
+_GL_CXXALIASWARN (strstr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+/* strstr() does not work with multibyte strings if the locale encoding is
+   different from UTF-8:
+   POSIX says that it operates on "strings", and "string" in POSIX is defined
+   as a sequence of bytes, not of characters.  */
+# undef strstr
+/* Assume strstr is always declared.  */
+_GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot "
+                 "work correctly on character strings in most "
+                 "multibyte locales - "
+                 "use mbsstr if you care about internationalization, "
+                 "or use strstr if you care about speed");
+#endif
+
+/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive
+   comparison.  */
+#if @GNULIB_STRCASESTR@
+# if @REPLACE_STRCASESTR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strcasestr rpl_strcasestr
+#  endif
+_GL_FUNCDECL_RPL (strcasestr, char *,
+                  (const char *haystack, const char *needle)
+                  _GL_ATTRIBUTE_PURE
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strcasestr, char *,
+                  (const char *haystack, const char *needle));
+# else
+#  if ! @HAVE_STRCASESTR@
+_GL_FUNCDECL_SYS (strcasestr, char *,
+                  (const char *haystack, const char *needle)
+                  _GL_ATTRIBUTE_PURE
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const char * strcasestr (const char *, const char *); }
+       extern "C++" { char * strcasestr (char *, const char *); }  */
+_GL_CXXALIAS_SYS_CAST2 (strcasestr,
+                        char *, (const char *haystack, const char *needle),
+                        const char *, (const char *haystack, const char *needle));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle));
+_GL_CXXALIASWARN1 (strcasestr, const char *,
+                   (const char *haystack, const char *needle));
+# else
+_GL_CXXALIASWARN (strcasestr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+/* strcasestr() does not work with multibyte strings:
+   It is a glibc extension, and glibc implements it only for unibyte
+   locales.  */
+# undef strcasestr
+# if HAVE_RAW_DECL_STRCASESTR
+_GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character "
+                 "strings in multibyte locales - "
+                 "use mbscasestr if you care about "
+                 "internationalization, or use c-strcasestr if you want "
+                 "a locale independent function");
+# endif
+#endif
+
+/* Parse S into tokens separated by characters in DELIM.
+   If S is NULL, the saved pointer in SAVE_PTR is used as
+   the next starting point.  For example:
+        char s[] = "-abc-=-def";
+        char *sp;
+        x = strtok_r(s, "-", &sp);      // x = "abc", sp = "=-def"
+        x = strtok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
+        x = strtok_r(NULL, "=", &sp);   // x = NULL
+                // s = "abc\0-def\0"
+
+   This is a variant of strtok() that is multithread-safe.
+
+   For the POSIX documentation for this function, see:
+   http://www.opengroup.org/susv3xsh/strtok.html
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+   Caveat: It doesn't work with multibyte strings unless all of the delimiter
+           characters are ASCII characters < 0x30.
+
+   See also strsep().  */
+#if @GNULIB_STRTOK_R@
+# if @REPLACE_STRTOK_R@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strtok_r
+#   define strtok_r rpl_strtok_r
+#  endif
+_GL_FUNCDECL_RPL (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr)
+                  _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr));
+# else
+#  if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK
+#   undef strtok_r
+#  endif
+#  if ! @HAVE_DECL_STRTOK_R@
+_GL_FUNCDECL_SYS (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr)
+                  _GL_ARG_NONNULL ((2, 3)));
+#  endif
+_GL_CXXALIAS_SYS (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr));
+# endif
+_GL_CXXALIASWARN (strtok_r);
+# if defined GNULIB_POSIXCHECK
+_GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character "
+                 "strings in multibyte locales - "
+                 "use mbstok_r if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strtok_r
+# if HAVE_RAW_DECL_STRTOK_R
+_GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - "
+                 "use gnulib module strtok_r for portability");
+# endif
+#endif
+
+
+/* The following functions are not specified by POSIX.  They are gnulib
+   extensions.  */
+
+#if @GNULIB_MBSLEN@
+/* Return the number of multibyte characters in the character string STRING.
+   This considers multibyte characters, unlike strlen, which counts bytes.  */
+# ifdef __MirBSD__  /* MirBSD defines mbslen as a macro.  Override it.  */
+#  undef mbslen
+# endif
+# if @HAVE_MBSLEN@  /* AIX, OSF/1, MirBSD define mbslen already in libc.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbslen rpl_mbslen
+#  endif
+_GL_FUNCDECL_RPL (mbslen, size_t, (const char *string)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string));
+# else
+_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string));
+# endif
+_GL_CXXALIASWARN (mbslen);
+#endif
+
+#if @GNULIB_MBSNLEN@
+/* Return the number of multibyte characters in the character string starting
+   at STRING and ending at STRING + LEN.  */
+_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1));
+#endif
+
+#if @GNULIB_MBSCHR@
+/* Locate the first single-byte character C in the character string STRING,
+   and return a pointer to it.  Return NULL if C is not found in STRING.
+   Unlike strchr(), this function works correctly in multibyte locales with
+   encodings such as GB18030.  */
+# if defined __hpux
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbschr rpl_mbschr /* avoid collision with HP-UX function */
+#  endif
+_GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c));
+# else
+_GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c));
+# endif
+_GL_CXXALIASWARN (mbschr);
+#endif
+
+#if @GNULIB_MBSRCHR@
+/* Locate the last single-byte character C in the character string STRING,
+   and return a pointer to it.  Return NULL if C is not found in STRING.
+   Unlike strrchr(), this function works correctly in multibyte locales with
+   encodings such as GB18030.  */
+# if defined __hpux || defined __INTERIX
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbsrchr rpl_mbsrchr /* avoid collision with system function */
+#  endif
+_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c));
+# else
+_GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c));
+# endif
+_GL_CXXALIASWARN (mbsrchr);
+#endif
+
+#if @GNULIB_MBSSTR@
+/* Find the first occurrence of the character string NEEDLE in the character
+   string HAYSTACK.  Return NULL if NEEDLE is not found in HAYSTACK.
+   Unlike strstr(), this function works correctly in multibyte locales with
+   encodings different from UTF-8.  */
+_GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSCASECMP@
+/* Compare the character strings S1 and S2, ignoring case, returning less than,
+   equal to or greater than zero if S1 is lexicographically less than, equal to
+   or greater than S2.
+   Note: This function may, in multibyte locales, return 0 for strings of
+   different lengths!
+   Unlike strcasecmp(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSNCASECMP@
+/* Compare the initial segment of the character string S1 consisting of at most
+   N characters with the initial segment of the character string S2 consisting
+   of at most N characters, ignoring case, returning less than, equal to or
+   greater than zero if the initial segment of S1 is lexicographically less
+   than, equal to or greater than the initial segment of S2.
+   Note: This function may, in multibyte locales, return 0 for initial segments
+   of different lengths!
+   Unlike strncasecmp(), this function works correctly in multibyte locales.
+   But beware that N is not a byte count but a character count!  */
+_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSPCASECMP@
+/* Compare the initial segment of the character string STRING consisting of
+   at most mbslen (PREFIX) characters with the character string PREFIX,
+   ignoring case.  If the two match, return a pointer to the first byte
+   after this prefix in STRING.  Otherwise, return NULL.
+   Note: This function may, in multibyte locales, return non-NULL if STRING
+   is of smaller length than PREFIX!
+   Unlike strncasecmp(), this function works correctly in multibyte
+   locales.  */
+_GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSCASESTR@
+/* Find the first occurrence of the character string NEEDLE in the character
+   string HAYSTACK, using case-insensitive comparison.
+   Note: This function may, in multibyte locales, return success even if
+   strlen (haystack) < strlen (needle) !
+   Unlike strcasestr(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSCSPN@
+/* Find the first occurrence in the character string STRING of any character
+   in the character string ACCEPT.  Return the number of bytes from the
+   beginning of the string to this occurrence, or to the end of the string
+   if none exists.
+   Unlike strcspn(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C size_t mbscspn (const char *string, const char *accept)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSPBRK@
+/* Find the first occurrence in the character string STRING of any character
+   in the character string ACCEPT.  Return the pointer to it, or NULL if none
+   exists.
+   Unlike strpbrk(), this function works correctly in multibyte locales.  */
+# if defined __hpux
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */
+#  endif
+_GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept));
+# else
+_GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept));
+# endif
+_GL_CXXALIASWARN (mbspbrk);
+#endif
+
+#if @GNULIB_MBSSPN@
+/* Find the first occurrence in the character string STRING of any character
+   not in the character string REJECT.  Return the number of bytes from the
+   beginning of the string to this occurrence, or to the end of the string
+   if none exists.
+   Unlike strspn(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C size_t mbsspn (const char *string, const char *reject)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSSEP@
+/* Search the next delimiter (multibyte character listed in the character
+   string DELIM) starting at the character string *STRINGP.
+   If one is found, overwrite it with a NUL, and advance *STRINGP to point
+   to the next multibyte character after it.  Otherwise, set *STRINGP to NULL.
+   If *STRINGP was already NULL, nothing happens.
+   Return the old value of *STRINGP.
+
+   This is a variant of mbstok_r() that supports empty fields.
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+
+   See also mbstok_r().  */
+_GL_EXTERN_C char * mbssep (char **stringp, const char *delim)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSTOK_R@
+/* Parse the character string STRING into tokens separated by characters in
+   the character string DELIM.
+   If STRING is NULL, the saved pointer in SAVE_PTR is used as
+   the next starting point.  For example:
+        char s[] = "-abc-=-def";
+        char *sp;
+        x = mbstok_r(s, "-", &sp);      // x = "abc", sp = "=-def"
+        x = mbstok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
+        x = mbstok_r(NULL, "=", &sp);   // x = NULL
+                // s = "abc\0-def\0"
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+
+   See also mbssep().  */
+_GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr)
+     _GL_ARG_NONNULL ((2, 3));
+#endif
+
+/* Map any int, typically from errno, into an error message.  */
+#if @GNULIB_STRERROR@
+# if @REPLACE_STRERROR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strerror
+#   define strerror rpl_strerror
+#  endif
+_GL_FUNCDECL_RPL (strerror, char *, (int));
+_GL_CXXALIAS_RPL (strerror, char *, (int));
+# else
+_GL_CXXALIAS_SYS (strerror, char *, (int));
+# endif
+_GL_CXXALIASWARN (strerror);
+#elif defined GNULIB_POSIXCHECK
+# undef strerror
+/* Assume strerror is always declared.  */
+_GL_WARN_ON_USE (strerror, "strerror is unportable - "
+                 "use gnulib module strerror to guarantee non-NULL result");
+#endif
+
+/* Map any int, typically from errno, into an error message.  Multithread-safe.
+   Uses the POSIX declaration, not the glibc declaration.  */
+#if @GNULIB_STRERROR_R@
+# if @REPLACE_STRERROR_R@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strerror_r
+#   define strerror_r rpl_strerror_r
+#  endif
+_GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)
+                                   _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen));
+# else
+#  if !@HAVE_DECL_STRERROR_R@
+_GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)
+                                   _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen));
+# endif
+# if @HAVE_DECL_STRERROR_R@
+_GL_CXXALIASWARN (strerror_r);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strerror_r
+# if HAVE_RAW_DECL_STRERROR_R
+_GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - "
+                 "use gnulib module strerror_r-posix for portability");
+# endif
+#endif
+
+#if @GNULIB_STRSIGNAL@
+# if @REPLACE_STRSIGNAL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strsignal rpl_strsignal
+#  endif
+_GL_FUNCDECL_RPL (strsignal, char *, (int __sig));
+_GL_CXXALIAS_RPL (strsignal, char *, (int __sig));
+# else
+#  if ! @HAVE_DECL_STRSIGNAL@
+_GL_FUNCDECL_SYS (strsignal, char *, (int __sig));
+#  endif
+/* Need to cast, because on Cygwin 1.5.x systems, the return type is
+   'const char *'.  */
+_GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig));
+# endif
+_GL_CXXALIASWARN (strsignal);
+#elif defined GNULIB_POSIXCHECK
+# undef strsignal
+# if HAVE_RAW_DECL_STRSIGNAL
+_GL_WARN_ON_USE (strsignal, "strsignal is unportable - "
+                 "use gnulib module strsignal for portability");
+# endif
+#endif
+
+#if @GNULIB_STRVERSCMP@
+# if !@HAVE_STRVERSCMP@
+_GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *));
+_GL_CXXALIASWARN (strverscmp);
+#elif defined GNULIB_POSIXCHECK
+# undef strverscmp
+# if HAVE_RAW_DECL_STRVERSCMP
+_GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - "
+                 "use gnulib module strverscmp for portability");
+# endif
+#endif
+
+
+#endif /* _ at GUARD_PREFIX@_STRING_H */
+#endif /* _ at GUARD_PREFIX@_STRING_H */
diff --git a/gdb/gnulib/import/strnlen1.c b/gdb/gnulib/import/strnlen1.c
new file mode 100644
index 0000000..52dc507
--- /dev/null
+++ b/gdb/gnulib/import/strnlen1.c
@@ -0,0 +1,35 @@
+/* Find the length of STRING + 1, but scan at most MAXLEN bytes.
+   Copyright (C) 2005-2006, 2009-2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "strnlen1.h"
+
+#include <string.h>
+
+/* Find the length of STRING + 1, but scan at most MAXLEN bytes.
+   If no '\0' terminator is found in that many characters, return MAXLEN.  */
+/* This is the same as strnlen (string, maxlen - 1) + 1.  */
+size_t
+strnlen1 (const char *string, size_t maxlen)
+{
+  const char *end = (const char *) memchr (string, '\0', maxlen);
+  if (end != NULL)
+    return end - string + 1;
+  else
+    return maxlen;
+}
diff --git a/gdb/gnulib/import/strnlen1.h b/gdb/gnulib/import/strnlen1.h
new file mode 100644
index 0000000..4c4f0c0
--- /dev/null
+++ b/gdb/gnulib/import/strnlen1.h
@@ -0,0 +1,40 @@
+/* Find the length of STRING + 1, but scan at most MAXLEN bytes.
+   Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _STRNLEN1_H
+#define _STRNLEN1_H
+
+#include <stddef.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Find the length of STRING + 1, but scan at most MAXLEN bytes.
+   If no '\0' terminator is found in that many characters, return MAXLEN.  */
+/* This is the same as strnlen (string, maxlen - 1) + 1.  */
+extern size_t strnlen1 (const char *string, size_t maxlen)
+  _GL_ATTRIBUTE_PURE;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _STRNLEN1_H */
diff --git a/gdb/gnulib/import/verify.h b/gdb/gnulib/import/verify.h
new file mode 100644
index 0000000..cef14ad
--- /dev/null
+++ b/gdb/gnulib/import/verify.h
@@ -0,0 +1,241 @@
+/* Compile-time assert-like macros.
+
+   Copyright (C) 2005-2006, 2009-2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert, Bruno Haible, and Jim Meyering.  */
+
+#ifndef _GL_VERIFY_H
+# define _GL_VERIFY_H
+
+
+/* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert works as per C11.
+   This is supported by GCC 4.6.0 and later, in C mode, and its use
+   here generates easier-to-read diagnostics when verify (R) fails.
+
+   Define _GL_HAVE_STATIC_ASSERT to 1 if static_assert works as per C++11.
+   This will likely be supported by future GCC versions, in C++ mode.
+
+   Use this only with GCC.  If we were willing to slow 'configure'
+   down we could also use it with other compilers, but since this
+   affects only the quality of diagnostics, why bother?  */
+# if (4 < __GNUC__ || (__GNUC__ == 4 && 6 <= __GNUC_MINOR__)) && !defined __cplusplus
+#  define _GL_HAVE__STATIC_ASSERT 1
+# endif
+/* The condition (99 < __GNUC__) is temporary, until we know about the
+   first G++ release that supports static_assert.  */
+# if (99 < __GNUC__) && defined __cplusplus
+#  define _GL_HAVE_STATIC_ASSERT 1
+# endif
+
+/* Each of these macros verifies that its argument R is nonzero.  To
+   be portable, R should be an integer constant expression.  Unlike
+   assert (R), there is no run-time overhead.
+
+   If _Static_assert works, verify (R) uses it directly.  Similarly,
+   _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct
+   that is an operand of sizeof.
+
+   The code below uses several ideas for C++ compilers, and for C
+   compilers that do not support _Static_assert:
+
+   * The first step is ((R) ? 1 : -1).  Given an expression R, of
+     integral or boolean or floating-point type, this yields an
+     expression of integral type, whose value is later verified to be
+     constant and nonnegative.
+
+   * Next this expression W is wrapped in a type
+     struct _gl_verify_type {
+       unsigned int _gl_verify_error_if_negative: W;
+     }.
+     If W is negative, this yields a compile-time error.  No compiler can
+     deal with a bit-field of negative size.
+
+     One might think that an array size check would have the same
+     effect, that is, that the type struct { unsigned int dummy[W]; }
+     would work as well.  However, inside a function, some compilers
+     (such as C++ compilers and GNU C) allow local parameters and
+     variables inside array size expressions.  With these compilers,
+     an array size check would not properly diagnose this misuse of
+     the verify macro:
+
+       void function (int n) { verify (n < 0); }
+
+   * For the verify macro, the struct _gl_verify_type will need to
+     somehow be embedded into a declaration.  To be portable, this
+     declaration must declare an object, a constant, a function, or a
+     typedef name.  If the declared entity uses the type directly,
+     such as in
+
+       struct dummy {...};
+       typedef struct {...} dummy;
+       extern struct {...} *dummy;
+       extern void dummy (struct {...} *);
+       extern struct {...} *dummy (void);
+
+     two uses of the verify macro would yield colliding declarations
+     if the entity names are not disambiguated.  A workaround is to
+     attach the current line number to the entity name:
+
+       #define _GL_CONCAT0(x, y) x##y
+       #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y)
+       extern struct {...} * _GL_CONCAT (dummy, __LINE__);
+
+     But this has the problem that two invocations of verify from
+     within the same macro would collide, since the __LINE__ value
+     would be the same for both invocations.  (The GCC __COUNTER__
+     macro solves this problem, but is not portable.)
+
+     A solution is to use the sizeof operator.  It yields a number,
+     getting rid of the identity of the type.  Declarations like
+
+       extern int dummy [sizeof (struct {...})];
+       extern void dummy (int [sizeof (struct {...})]);
+       extern int (*dummy (void)) [sizeof (struct {...})];
+
+     can be repeated.
+
+   * Should the implementation use a named struct or an unnamed struct?
+     Which of the following alternatives can be used?
+
+       extern int dummy [sizeof (struct {...})];
+       extern int dummy [sizeof (struct _gl_verify_type {...})];
+       extern void dummy (int [sizeof (struct {...})]);
+       extern void dummy (int [sizeof (struct _gl_verify_type {...})]);
+       extern int (*dummy (void)) [sizeof (struct {...})];
+       extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})];
+
+     In the second and sixth case, the struct type is exported to the
+     outer scope; two such declarations therefore collide.  GCC warns
+     about the first, third, and fourth cases.  So the only remaining
+     possibility is the fifth case:
+
+       extern int (*dummy (void)) [sizeof (struct {...})];
+
+   * GCC warns about duplicate declarations of the dummy function if
+     -Wredundant_decls is used.  GCC 4.3 and later have a builtin
+     __COUNTER__ macro that can let us generate unique identifiers for
+     each dummy function, to suppress this warning.
+
+   * This implementation exploits the fact that older versions of GCC,
+     which do not support _Static_assert, also do not warn about the
+     last declaration mentioned above.
+
+   * In C++, any struct definition inside sizeof is invalid.
+     Use a template type to work around the problem.  */
+
+/* Concatenate two preprocessor tokens.  */
+# define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y)
+# define _GL_CONCAT0(x, y) x##y
+
+/* _GL_COUNTER is an integer, preferably one that changes each time we
+   use it.  Use __COUNTER__ if it works, falling back on __LINE__
+   otherwise.  __LINE__ isn't perfect, but it's better than a
+   constant.  */
+# if defined __COUNTER__ && __COUNTER__ != __COUNTER__
+#  define _GL_COUNTER __COUNTER__
+# else
+#  define _GL_COUNTER __LINE__
+# endif
+
+/* Generate a symbol with the given prefix, making it unique if
+   possible.  */
+# define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER)
+
+/* Verify requirement R at compile-time, as an integer constant expression
+   that returns 1.  If R is false, fail at compile-time, preferably
+   with a diagnostic that includes the string-literal DIAGNOSTIC.  */
+
+# define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \
+    (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC)))
+
+# ifdef __cplusplus
+#  if !GNULIB_defined_struct__gl_verify_type
+template <int w>
+  struct _gl_verify_type {
+    unsigned int _gl_verify_error_if_negative: w;
+  };
+#   define GNULIB_defined_struct__gl_verify_type 1
+#  endif
+#  define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
+    _gl_verify_type<(R) ? 1 : -1>
+# elif defined _GL_HAVE__STATIC_ASSERT
+#  define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
+     struct {                                   \
+       _Static_assert (R, DIAGNOSTIC);          \
+       int _gl_dummy;                          \
+     }
+# else
+#  define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
+     struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; }
+# endif
+
+/* Verify requirement R at compile-time, as a declaration without a
+   trailing ';'.  If R is false, fail at compile-time, preferably
+   with a diagnostic that includes the string-literal DIAGNOSTIC.
+
+   Unfortunately, unlike C11, this implementation must appear as an
+   ordinary declaration, and cannot appear inside struct { ... }.  */
+
+# ifdef _GL_HAVE__STATIC_ASSERT
+#  define _GL_VERIFY _Static_assert
+# else
+#  define _GL_VERIFY(R, DIAGNOSTIC)				       \
+     extern int (*_GL_GENSYM (_gl_verify_function) (void))	       \
+       [_GL_VERIFY_TRUE (R, DIAGNOSTIC)]
+# endif
+
+/* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h.  */
+# ifdef _GL_STATIC_ASSERT_H
+#  if !defined _GL_HAVE__STATIC_ASSERT && !defined _Static_assert
+#   define _Static_assert(R, DIAGNOSTIC) _GL_VERIFY (R, DIAGNOSTIC)
+#  endif
+#  if !defined _GL_HAVE_STATIC_ASSERT && !defined static_assert
+#   define static_assert _Static_assert /* C11 requires this #define.  */
+#  endif
+# endif
+
+/* @assert.h omit start@  */
+
+/* Each of these macros verifies that its argument R is nonzero.  To
+   be portable, R should be an integer constant expression.  Unlike
+   assert (R), there is no run-time overhead.
+
+   There are two macros, since no single macro can be used in all
+   contexts in C.  verify_true (R) is for scalar contexts, including
+   integer constant expression contexts.  verify (R) is for declaration
+   contexts, e.g., the top level.  */
+
+/* Verify requirement R at compile-time, as an integer constant expression.
+   Return 1.  This is equivalent to verify_expr (R, 1).
+
+   verify_true is obsolescent; please use verify_expr instead.  */
+
+# define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")")
+
+/* Verify requirement R at compile-time.  Return the value of the
+   expression E.  */
+
+# define verify_expr(R, E) \
+    (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E))
+
+/* Verify requirement R at compile-time, as a declaration without a
+   trailing ';'.  */
+
+# define verify(R) _GL_VERIFY (R, "verify (" #R ")")
+
+/* @assert.h omit end@  */
+
+#endif
diff --git a/gdb/gnulib/import/wchar.in.h b/gdb/gnulib/import/wchar.in.h
new file mode 100644
index 0000000..f9bc30c
--- /dev/null
+++ b/gdb/gnulib/import/wchar.in.h
@@ -0,0 +1,1028 @@
+/* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
+
+   Copyright (C) 2007-2012 Free Software Foundation, Inc.
+
+   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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Eric Blake.  */
+
+/*
+ * ISO C 99 <wchar.h> for platforms that have issues.
+ * <http://www.opengroup.org/susv3xbd/wchar.h.html>
+ *
+ * For now, this just ensures proper prerequisite inclusion order and
+ * the declaration of wcwidth().
+ */
+
+#if __GNUC__ >= 3
+ at PRAGMA_SYSTEM_HEADER@
+#endif
+ at PRAGMA_COLUMNS@
+
+#if defined __need_mbstate_t || defined __need_wint_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H
+/* Special invocation convention:
+   - Inside glibc and uClibc header files.
+   - On HP-UX 11.00 we have a sequence of nested includes
+     <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>,
+     once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h>
+     and once directly.  In both situations 'wint_t' is not yet defined,
+     therefore we cannot provide the function overrides; instead include only
+     the system's <wchar.h>.
+   - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and
+     the latter includes <wchar.h>.  But here, we have no way to detect whether
+     <wctype.h> is completely included or is still being included.  */
+
+#@INCLUDE_NEXT@ @NEXT_WCHAR_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _ at GUARD_PREFIX@_WCHAR_H
+
+#define _GL_ALREADY_INCLUDING_WCHAR_H
+
+#if @HAVE_FEATURES_H@
+# include <features.h> /* for __GLIBC__ */
+#endif
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.
+   In some builds of uClibc, <wchar.h> is nonexistent and wchar_t is defined
+   by <stddef.h>.
+   But avoid namespace pollution on glibc systems.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <stddef.h>
+#endif
+#ifndef __GLIBC__
+# include <stdio.h>
+# include <time.h>
+#endif
+
+/* Include the original <wchar.h> if it exists.
+   Some builds of uClibc lack it.  */
+/* The include_next requires a split double-inclusion guard.  */
+#if @HAVE_WCHAR_H@
+# @INCLUDE_NEXT@ @NEXT_WCHAR_H@
+#endif
+
+#undef _GL_ALREADY_INCLUDING_WCHAR_H
+
+#ifndef _ at GUARD_PREFIX@_WCHAR_H
+#define _ at GUARD_PREFIX@_WCHAR_H
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The attribute __pure__ was added in gcc 2.96.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+
+/* Define wint_t and WEOF.  (Also done in wctype.in.h.)  */
+#if !@HAVE_WINT_T@ && !defined wint_t
+# define wint_t int
+# ifndef WEOF
+#  define WEOF -1
+# endif
+#else
+/* MSVC defines wint_t as 'unsigned short' in <crtdefs.h>.
+   This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be
+   "unchanged by default argument promotions".  Override it.  */
+# if defined _MSC_VER
+#  if !GNULIB_defined_wint_t
+#   include <crtdefs.h>
+typedef unsigned int rpl_wint_t;
+#   undef wint_t
+#   define wint_t rpl_wint_t
+#   define GNULIB_defined_wint_t 1
+#  endif
+# endif
+# ifndef WEOF
+#  define WEOF ((wint_t) -1)
+# endif
+#endif
+
+
+/* Override mbstate_t if it is too small.
+   On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for
+   implementing mbrtowc for encodings like UTF-8.  */
+#if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@
+# if !GNULIB_defined_mbstate_t
+typedef int rpl_mbstate_t;
+#  undef mbstate_t
+#  define mbstate_t rpl_mbstate_t
+#  define GNULIB_defined_mbstate_t 1
+# endif
+#endif
+
+
+/* Convert a single-byte character to a wide character.  */
+#if @GNULIB_BTOWC@
+# if @REPLACE_BTOWC@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef btowc
+#   define btowc rpl_btowc
+#  endif
+_GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (btowc, wint_t, (int c));
+# else
+#  if !@HAVE_BTOWC@
+_GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
+#  endif
+_GL_CXXALIAS_SYS (btowc, wint_t, (int c));
+# endif
+_GL_CXXALIASWARN (btowc);
+#elif defined GNULIB_POSIXCHECK
+# undef btowc
+# if HAVE_RAW_DECL_BTOWC
+_GL_WARN_ON_USE (btowc, "btowc is unportable - "
+                 "use gnulib module btowc for portability");
+# endif
+#endif
+
+
+/* Convert a wide character to a single-byte character.  */
+#if @GNULIB_WCTOB@
+# if @REPLACE_WCTOB@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wctob
+#   define wctob rpl_wctob
+#  endif
+_GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (wctob, int, (wint_t wc));
+# else
+#  if !defined wctob && !@HAVE_DECL_WCTOB@
+/* wctob is provided by gnulib, or wctob exists but is not declared.  */
+_GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
+#  endif
+_GL_CXXALIAS_SYS (wctob, int, (wint_t wc));
+# endif
+_GL_CXXALIASWARN (wctob);
+#elif defined GNULIB_POSIXCHECK
+# undef wctob
+# if HAVE_RAW_DECL_WCTOB
+_GL_WARN_ON_USE (wctob, "wctob is unportable - "
+                 "use gnulib module wctob for portability");
+# endif
+#endif
+
+
+/* Test whether *PS is in the initial state.  */
+#if @GNULIB_MBSINIT@
+# if @REPLACE_MBSINIT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsinit
+#   define mbsinit rpl_mbsinit
+#  endif
+_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps));
+# else
+#  if !@HAVE_MBSINIT@
+_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsinit);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsinit
+# if HAVE_RAW_DECL_MBSINIT
+_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - "
+                 "use gnulib module mbsinit for portability");
+# endif
+#endif
+
+
+/* Convert a multibyte character to a wide character.  */
+#if @GNULIB_MBRTOWC@
+# if @REPLACE_MBRTOWC@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbrtowc
+#   define mbrtowc rpl_mbrtowc
+#  endif
+_GL_FUNCDECL_RPL (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+# else
+#  if !@HAVE_MBRTOWC@
+_GL_FUNCDECL_SYS (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbrtowc);
+#elif defined GNULIB_POSIXCHECK
+# undef mbrtowc
+# if HAVE_RAW_DECL_MBRTOWC
+_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - "
+                 "use gnulib module mbrtowc for portability");
+# endif
+#endif
+
+
+/* Recognize a multibyte character.  */
+#if @GNULIB_MBRLEN@
+# if @REPLACE_MBRLEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbrlen
+#   define mbrlen rpl_mbrlen
+#  endif
+_GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+# else
+#  if !@HAVE_MBRLEN@
+_GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbrlen);
+#elif defined GNULIB_POSIXCHECK
+# undef mbrlen
+# if HAVE_RAW_DECL_MBRLEN
+_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - "
+                 "use gnulib module mbrlen for portability");
+# endif
+#endif
+
+
+/* Convert a string to a wide string.  */
+#if @GNULIB_MBSRTOWCS@
+# if @REPLACE_MBSRTOWCS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsrtowcs
+#   define mbsrtowcs rpl_mbsrtowcs
+#  endif
+_GL_FUNCDECL_RPL (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_MBSRTOWCS@
+_GL_FUNCDECL_SYS (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsrtowcs);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsrtowcs
+# if HAVE_RAW_DECL_MBSRTOWCS
+_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - "
+                 "use gnulib module mbsrtowcs for portability");
+# endif
+#endif
+
+
+/* Convert a string to a wide string.  */
+#if @GNULIB_MBSNRTOWCS@
+# if @REPLACE_MBSNRTOWCS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsnrtowcs
+#   define mbsnrtowcs rpl_mbsnrtowcs
+#  endif
+_GL_FUNCDECL_RPL (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_MBSNRTOWCS@
+_GL_FUNCDECL_SYS (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsnrtowcs);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsnrtowcs
+# if HAVE_RAW_DECL_MBSNRTOWCS
+_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - "
+                 "use gnulib module mbsnrtowcs for portability");
+# endif
+#endif
+
+
+/* Convert a wide character to a multibyte character.  */
+#if @GNULIB_WCRTOMB@
+# if @REPLACE_WCRTOMB@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcrtomb
+#   define wcrtomb rpl_wcrtomb
+#  endif
+_GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+_GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+# else
+#  if !@HAVE_WCRTOMB@
+_GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcrtomb);
+#elif defined GNULIB_POSIXCHECK
+# undef wcrtomb
+# if HAVE_RAW_DECL_WCRTOMB
+_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - "
+                 "use gnulib module wcrtomb for portability");
+# endif
+#endif
+
+
+/* Convert a wide string to a string.  */
+#if @GNULIB_WCSRTOMBS@
+# if @REPLACE_WCSRTOMBS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcsrtombs
+#   define wcsrtombs rpl_wcsrtombs
+#  endif
+_GL_FUNCDECL_RPL (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_WCSRTOMBS@
+_GL_FUNCDECL_SYS (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcsrtombs);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsrtombs
+# if HAVE_RAW_DECL_WCSRTOMBS
+_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - "
+                 "use gnulib module wcsrtombs for portability");
+# endif
+#endif
+
+
+/* Convert a wide string to a string.  */
+#if @GNULIB_WCSNRTOMBS@
+# if @REPLACE_WCSNRTOMBS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcsnrtombs
+#   define wcsnrtombs rpl_wcsnrtombs
+#  endif
+_GL_FUNCDECL_RPL (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_WCSNRTOMBS@
+_GL_FUNCDECL_SYS (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcsnrtombs);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsnrtombs
+# if HAVE_RAW_DECL_WCSNRTOMBS
+_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - "
+                 "use gnulib module wcsnrtombs for portability");
+# endif
+#endif
+
+
+/* Return the number of screen columns needed for WC.  */
+#if @GNULIB_WCWIDTH@
+# if @REPLACE_WCWIDTH@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcwidth
+#   define wcwidth rpl_wcwidth
+#  endif
+_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t));
+# else
+#  if !@HAVE_DECL_WCWIDTH@
+/* wcwidth exists but is not declared.  */
+_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
+#  endif
+_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t));
+# endif
+_GL_CXXALIASWARN (wcwidth);
+#elif defined GNULIB_POSIXCHECK
+# undef wcwidth
+# if HAVE_RAW_DECL_WCWIDTH
+_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - "
+                 "use gnulib module wcwidth for portability");
+# endif
+#endif
+
+
+/* Search N wide characters of S for C.  */
+#if @GNULIB_WMEMCHR@
+# if !@HAVE_WMEMCHR@
+_GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n)
+                                      _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t);
+         wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wmemchr,
+                        wchar_t *, (const wchar_t *, wchar_t, size_t),
+                        const wchar_t *, (const wchar_t *, wchar_t, size_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
+_GL_CXXALIASWARN1 (wmemchr, const wchar_t *,
+                   (const wchar_t *s, wchar_t c, size_t n));
+# else
+_GL_CXXALIASWARN (wmemchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wmemchr
+# if HAVE_RAW_DECL_WMEMCHR
+_GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - "
+                 "use gnulib module wmemchr for portability");
+# endif
+#endif
+
+
+/* Compare N wide characters of S1 and S2.  */
+#if @GNULIB_WMEMCMP@
+# if !@HAVE_WMEMCMP@
+_GL_FUNCDECL_SYS (wmemcmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wmemcmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n));
+_GL_CXXALIASWARN (wmemcmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wmemcmp
+# if HAVE_RAW_DECL_WMEMCMP
+_GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - "
+                 "use gnulib module wmemcmp for portability");
+# endif
+#endif
+
+
+/* Copy N wide characters of SRC to DEST.  */
+#if @GNULIB_WMEMCPY@
+# if !@HAVE_WMEMCPY@
+_GL_FUNCDECL_SYS (wmemcpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wmemcpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wmemcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wmemcpy
+# if HAVE_RAW_DECL_WMEMCPY
+_GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - "
+                 "use gnulib module wmemcpy for portability");
+# endif
+#endif
+
+
+/* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for
+   overlapping memory areas.  */
+#if @GNULIB_WMEMMOVE@
+# if !@HAVE_WMEMMOVE@
+_GL_FUNCDECL_SYS (wmemmove, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wmemmove, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wmemmove);
+#elif defined GNULIB_POSIXCHECK
+# undef wmemmove
+# if HAVE_RAW_DECL_WMEMMOVE
+_GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - "
+                 "use gnulib module wmemmove for portability");
+# endif
+#endif
+
+
+/* Set N wide characters of S to C.  */
+#if @GNULIB_WMEMSET@
+# if !@HAVE_WMEMSET@
+_GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
+_GL_CXXALIASWARN (wmemset);
+#elif defined GNULIB_POSIXCHECK
+# undef wmemset
+# if HAVE_RAW_DECL_WMEMSET
+_GL_WARN_ON_USE (wmemset, "wmemset is unportable - "
+                 "use gnulib module wmemset for portability");
+# endif
+#endif
+
+
+/* Return the number of wide characters in S.  */
+#if @GNULIB_WCSLEN@
+# if !@HAVE_WCSLEN@
+_GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s));
+_GL_CXXALIASWARN (wcslen);
+#elif defined GNULIB_POSIXCHECK
+# undef wcslen
+# if HAVE_RAW_DECL_WCSLEN
+_GL_WARN_ON_USE (wcslen, "wcslen is unportable - "
+                 "use gnulib module wcslen for portability");
+# endif
+#endif
+
+
+/* Return the number of wide characters in S, but at most MAXLEN.  */
+#if @GNULIB_WCSNLEN@
+# if !@HAVE_WCSNLEN@
+_GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)
+                                   _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen));
+_GL_CXXALIASWARN (wcsnlen);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsnlen
+# if HAVE_RAW_DECL_WCSNLEN
+_GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - "
+                 "use gnulib module wcsnlen for portability");
+# endif
+#endif
+
+
+/* Copy SRC to DEST.  */
+#if @GNULIB_WCSCPY@
+# if !@HAVE_WCSCPY@
+_GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
+# endif
+_GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
+_GL_CXXALIASWARN (wcscpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscpy
+# if HAVE_RAW_DECL_WCSCPY
+_GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - "
+                 "use gnulib module wcscpy for portability");
+# endif
+#endif
+
+
+/* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST.  */
+#if @GNULIB_WCPCPY@
+# if !@HAVE_WCPCPY@
+_GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
+# endif
+_GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
+_GL_CXXALIASWARN (wcpcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcpcpy
+# if HAVE_RAW_DECL_WCPCPY
+_GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - "
+                 "use gnulib module wcpcpy for portability");
+# endif
+#endif
+
+
+/* Copy no more than N wide characters of SRC to DEST.  */
+#if @GNULIB_WCSNCPY@
+# if !@HAVE_WCSNCPY@
+_GL_FUNCDECL_SYS (wcsncpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcsncpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wcsncpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncpy
+# if HAVE_RAW_DECL_WCSNCPY
+_GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - "
+                 "use gnulib module wcsncpy for portability");
+# endif
+#endif
+
+
+/* Copy no more than N characters of SRC to DEST, returning the address of
+   the last character written into DEST.  */
+#if @GNULIB_WCPNCPY@
+# if !@HAVE_WCPNCPY@
+_GL_FUNCDECL_SYS (wcpncpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcpncpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wcpncpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcpncpy
+# if HAVE_RAW_DECL_WCPNCPY
+_GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - "
+                 "use gnulib module wcpncpy for portability");
+# endif
+#endif
+
+
+/* Append SRC onto DEST.  */
+#if @GNULIB_WCSCAT@
+# if !@HAVE_WCSCAT@
+_GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src));
+# endif
+_GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src));
+_GL_CXXALIASWARN (wcscat);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscat
+# if HAVE_RAW_DECL_WCSCAT
+_GL_WARN_ON_USE (wcscat, "wcscat is unportable - "
+                 "use gnulib module wcscat for portability");
+# endif
+#endif
+
+
+/* Append no more than N wide characters of SRC onto DEST.  */
+#if @GNULIB_WCSNCAT@
+# if !@HAVE_WCSNCAT@
+_GL_FUNCDECL_SYS (wcsncat, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcsncat, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wcsncat);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncat
+# if HAVE_RAW_DECL_WCSNCAT
+_GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - "
+                 "use gnulib module wcsncat for portability");
+# endif
+#endif
+
+
+/* Compare S1 and S2.  */
+#if @GNULIB_WCSCMP@
+# if !@HAVE_WCSCMP@
+_GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)
+                               _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2));
+_GL_CXXALIASWARN (wcscmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscmp
+# if HAVE_RAW_DECL_WCSCMP
+_GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - "
+                 "use gnulib module wcscmp for portability");
+# endif
+#endif
+
+
+/* Compare no more than N wide characters of S1 and S2.  */
+#if @GNULIB_WCSNCMP@
+# if !@HAVE_WCSNCMP@
+_GL_FUNCDECL_SYS (wcsncmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsncmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n));
+_GL_CXXALIASWARN (wcsncmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncmp
+# if HAVE_RAW_DECL_WCSNCMP
+_GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - "
+                 "use gnulib module wcsncmp for portability");
+# endif
+#endif
+
+
+/* Compare S1 and S2, ignoring case.  */
+#if @GNULIB_WCSCASECMP@
+# if !@HAVE_WCSCASECMP@
+_GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)
+                                   _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2));
+_GL_CXXALIASWARN (wcscasecmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscasecmp
+# if HAVE_RAW_DECL_WCSCASECMP
+_GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - "
+                 "use gnulib module wcscasecmp for portability");
+# endif
+#endif
+
+
+/* Compare no more than N chars of S1 and S2, ignoring case.  */
+#if @GNULIB_WCSNCASECMP@
+# if !@HAVE_WCSNCASECMP@
+_GL_FUNCDECL_SYS (wcsncasecmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsncasecmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n));
+_GL_CXXALIASWARN (wcsncasecmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncasecmp
+# if HAVE_RAW_DECL_WCSNCASECMP
+_GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - "
+                 "use gnulib module wcsncasecmp for portability");
+# endif
+#endif
+
+
+/* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE
+   category of the current locale.  */
+#if @GNULIB_WCSCOLL@
+# if !@HAVE_WCSCOLL@
+_GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
+# endif
+_GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
+_GL_CXXALIASWARN (wcscoll);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscoll
+# if HAVE_RAW_DECL_WCSCOLL
+_GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - "
+                 "use gnulib module wcscoll for portability");
+# endif
+#endif
+
+
+/* Transform S2 into array pointed to by S1 such that if wcscmp is applied
+   to two transformed strings the result is the as applying 'wcscoll' to the
+   original strings.  */
+#if @GNULIB_WCSXFRM@
+# if !@HAVE_WCSXFRM@
+_GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n));
+_GL_CXXALIASWARN (wcsxfrm);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsxfrm
+# if HAVE_RAW_DECL_WCSXFRM
+_GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - "
+                 "use gnulib module wcsxfrm for portability");
+# endif
+#endif
+
+
+/* Duplicate S, returning an identical malloc'd string.  */
+#if @GNULIB_WCSDUP@
+# if !@HAVE_WCSDUP@
+_GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s));
+# endif
+_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
+_GL_CXXALIASWARN (wcsdup);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsdup
+# if HAVE_RAW_DECL_WCSDUP
+_GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - "
+                 "use gnulib module wcsdup for portability");
+# endif
+#endif
+
+
+/* Find the first occurrence of WC in WCS.  */
+#if @GNULIB_WCSCHR@
+# if !@HAVE_WCSCHR@
+_GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
+                                     _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wcschr (const wchar_t *, wchar_t);
+         wchar_t * std::wcschr (wchar_t *, wchar_t);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wcschr,
+                        wchar_t *, (const wchar_t *, wchar_t),
+                        const wchar_t *, (const wchar_t *, wchar_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc));
+_GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
+# else
+_GL_CXXALIASWARN (wcschr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcschr
+# if HAVE_RAW_DECL_WCSCHR
+_GL_WARN_ON_USE (wcschr, "wcschr is unportable - "
+                 "use gnulib module wcschr for portability");
+# endif
+#endif
+
+
+/* Find the last occurrence of WC in WCS.  */
+#if @GNULIB_WCSRCHR@
+# if !@HAVE_WCSRCHR@
+_GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
+                                      _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wcsrchr (const wchar_t *, wchar_t);
+         wchar_t * std::wcsrchr (wchar_t *, wchar_t);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wcsrchr,
+                        wchar_t *, (const wchar_t *, wchar_t),
+                        const wchar_t *, (const wchar_t *, wchar_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc));
+_GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
+# else
+_GL_CXXALIASWARN (wcsrchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcsrchr
+# if HAVE_RAW_DECL_WCSRCHR
+_GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - "
+                 "use gnulib module wcsrchr for portability");
+# endif
+#endif
+
+
+/* Return the length of the initial segmet of WCS which consists entirely
+   of wide characters not in REJECT.  */
+#if @GNULIB_WCSCSPN@
+# if !@HAVE_WCSCSPN@
+_GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)
+                                   _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject));
+_GL_CXXALIASWARN (wcscspn);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscspn
+# if HAVE_RAW_DECL_WCSCSPN
+_GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - "
+                 "use gnulib module wcscspn for portability");
+# endif
+#endif
+
+
+/* Return the length of the initial segmet of WCS which consists entirely
+   of wide characters in ACCEPT.  */
+#if @GNULIB_WCSSPN@
+# if !@HAVE_WCSSPN@
+_GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)
+                                  _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept));
+_GL_CXXALIASWARN (wcsspn);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsspn
+# if HAVE_RAW_DECL_WCSSPN
+_GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - "
+                 "use gnulib module wcsspn for portability");
+# endif
+#endif
+
+
+/* Find the first occurrence in WCS of any character in ACCEPT.  */
+#if @GNULIB_WCSPBRK@
+# if !@HAVE_WCSPBRK@
+_GL_FUNCDECL_SYS (wcspbrk, wchar_t *,
+                  (const wchar_t *wcs, const wchar_t *accept)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *);
+         wchar_t * std::wcspbrk (wchar_t *, const wchar_t *);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wcspbrk,
+                        wchar_t *, (const wchar_t *, const wchar_t *),
+                        const wchar_t *, (const wchar_t *, const wchar_t *));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcspbrk, wchar_t *,
+                   (wchar_t *wcs, const wchar_t *accept));
+_GL_CXXALIASWARN1 (wcspbrk, const wchar_t *,
+                   (const wchar_t *wcs, const wchar_t *accept));
+# else
+_GL_CXXALIASWARN (wcspbrk);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcspbrk
+# if HAVE_RAW_DECL_WCSPBRK
+_GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - "
+                 "use gnulib module wcspbrk for portability");
+# endif
+#endif
+
+
+/* Find the first occurrence of NEEDLE in HAYSTACK.  */
+#if @GNULIB_WCSSTR@
+# if !@HAVE_WCSSTR@
+_GL_FUNCDECL_SYS (wcsstr, wchar_t *,
+                  (const wchar_t *haystack, const wchar_t *needle)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *);
+         wchar_t * std::wcsstr (wchar_t *, const wchar_t *);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wcsstr,
+                        wchar_t *, (const wchar_t *, const wchar_t *),
+                        const wchar_t *, (const wchar_t *, const wchar_t *));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcsstr, wchar_t *,
+                   (wchar_t *haystack, const wchar_t *needle));
+_GL_CXXALIASWARN1 (wcsstr, const wchar_t *,
+                   (const wchar_t *haystack, const wchar_t *needle));
+# else
+_GL_CXXALIASWARN (wcsstr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcsstr
+# if HAVE_RAW_DECL_WCSSTR
+_GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - "
+                 "use gnulib module wcsstr for portability");
+# endif
+#endif
+
+
+/* Divide WCS into tokens separated by characters in DELIM.  */
+#if @GNULIB_WCSTOK@
+# if !@HAVE_WCSTOK@
+_GL_FUNCDECL_SYS (wcstok, wchar_t *,
+                  (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
+# endif
+_GL_CXXALIAS_SYS (wcstok, wchar_t *,
+                  (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
+_GL_CXXALIASWARN (wcstok);
+#elif defined GNULIB_POSIXCHECK
+# undef wcstok
+# if HAVE_RAW_DECL_WCSTOK
+_GL_WARN_ON_USE (wcstok, "wcstok is unportable - "
+                 "use gnulib module wcstok for portability");
+# endif
+#endif
+
+
+/* Determine number of column positions required for first N wide
+   characters (or fewer if S ends before this) in S.  */
+#if @GNULIB_WCSWIDTH@
+# if @REPLACE_WCSWIDTH@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcswidth
+#   define wcswidth rpl_wcswidth
+#  endif
+_GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n)
+                                 _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n));
+# else
+#  if !@HAVE_WCSWIDTH@
+_GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n)
+                                 _GL_ATTRIBUTE_PURE);
+#  endif
+_GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n));
+# endif
+_GL_CXXALIASWARN (wcswidth);
+#elif defined GNULIB_POSIXCHECK
+# undef wcswidth
+# if HAVE_RAW_DECL_WCSWIDTH
+_GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - "
+                 "use gnulib module wcswidth for portability");
+# endif
+#endif
+
+
+#endif /* _ at GUARD_PREFIX@_WCHAR_H */
+#endif /* _ at GUARD_PREFIX@_WCHAR_H */
+#endif
diff --git a/gdb/gnulib/import/wctype.in.h b/gdb/gnulib/import/wctype.in.h
new file mode 100644
index 0000000..aa018b1
--- /dev/null
+++ b/gdb/gnulib/import/wctype.in.h
@@ -0,0 +1,498 @@
+/* A substitute for ISO C99 <wctype.h>, for platforms that lack it.
+
+   Copyright (C) 2006-2012 Free Software Foundation, Inc.
+
+   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 3, 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible and Paul Eggert.  */
+
+/*
+ * ISO C 99 <wctype.h> for platforms that lack it.
+ * <http://www.opengroup.org/susv3xbd/wctype.h.html>
+ *
+ * iswctype, towctrans, towlower, towupper, wctrans, wctype,
+ * wctrans_t, and wctype_t are not yet implemented.
+ */
+
+#ifndef _ at GUARD_PREFIX@_WCTYPE_H
+
+#if __GNUC__ >= 3
+ at PRAGMA_SYSTEM_HEADER@
+#endif
+ at PRAGMA_COLUMNS@
+
+#if @HAVE_WINT_T@
+/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.
+   Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+# include <wchar.h>
+#endif
+
+/* Include the original <wctype.h> if it exists.
+   BeOS 5 has the functions but no <wctype.h>.  */
+/* The include_next requires a split double-inclusion guard.  */
+#if @HAVE_WCTYPE_H@
+# @INCLUDE_NEXT@ @NEXT_WCTYPE_H@
+#endif
+
+#ifndef _ at GUARD_PREFIX@_WCTYPE_H
+#define _ at GUARD_PREFIX@_WCTYPE_H
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+/* Solaris 2.6 <wctype.h> includes <widec.h> which includes <euc.h> which
+   #defines a number of identifiers in the application namespace.  Revert
+   these #defines.  */
+#ifdef __sun
+# undef multibyte
+# undef eucw1
+# undef eucw2
+# undef eucw3
+# undef scrw1
+# undef scrw2
+# undef scrw3
+#endif
+
+/* Define wint_t and WEOF.  (Also done in wchar.in.h.)  */
+#if !@HAVE_WINT_T@ && !defined wint_t
+# define wint_t int
+# ifndef WEOF
+#  define WEOF -1
+# endif
+#else
+/* MSVC defines wint_t as 'unsigned short' in <crtdefs.h>.
+   This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be
+   "unchanged by default argument promotions".  Override it.  */
+# if defined _MSC_VER
+#  if !GNULIB_defined_wint_t
+#   include <crtdefs.h>
+typedef unsigned int rpl_wint_t;
+#   undef wint_t
+#   define wint_t rpl_wint_t
+#   define GNULIB_defined_wint_t 1
+#  endif
+# endif
+# ifndef WEOF
+#  define WEOF ((wint_t) -1)
+# endif
+#endif
+
+
+#if !GNULIB_defined_wctype_functions
+
+/* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions.
+   Linux libc5 has <wctype.h> and the functions but they are broken.
+   Assume all 11 functions (all isw* except iswblank) are implemented the
+   same way, or not at all.  */
+# if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@
+
+/* IRIX 5.3 has macros but no functions, its isw* macros refer to an
+   undefined variable _ctmp_ and to <ctype.h> macros like _P, and they
+   refer to system functions like _iswctype that are not in the
+   standard C library.  Rather than try to get ancient buggy
+   implementations like this to work, just disable them.  */
+#  undef iswalnum
+#  undef iswalpha
+#  undef iswblank
+#  undef iswcntrl
+#  undef iswdigit
+#  undef iswgraph
+#  undef iswlower
+#  undef iswprint
+#  undef iswpunct
+#  undef iswspace
+#  undef iswupper
+#  undef iswxdigit
+#  undef towlower
+#  undef towupper
+
+/* Linux libc5 has <wctype.h> and the functions but they are broken.  */
+#  if @REPLACE_ISWCNTRL@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define iswalnum rpl_iswalnum
+#    define iswalpha rpl_iswalpha
+#    define iswblank rpl_iswblank
+#    define iswcntrl rpl_iswcntrl
+#    define iswdigit rpl_iswdigit
+#    define iswgraph rpl_iswgraph
+#    define iswlower rpl_iswlower
+#    define iswprint rpl_iswprint
+#    define iswpunct rpl_iswpunct
+#    define iswspace rpl_iswspace
+#    define iswupper rpl_iswupper
+#    define iswxdigit rpl_iswxdigit
+#   endif
+#  endif
+#  if @REPLACE_TOWLOWER@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define towlower rpl_towlower
+#    define towupper rpl_towupper
+#   endif
+#  endif
+
+static inline int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswalnum
+#  else
+iswalnum
+#  endif
+         (wint_t wc)
+{
+  return ((wc >= '0' && wc <= '9')
+          || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'));
+}
+
+static inline int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswalpha
+#  else
+iswalpha
+#  endif
+         (wint_t wc)
+{
+  return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z';
+}
+
+static inline int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswblank
+#  else
+iswblank
+#  endif
+         (wint_t wc)
+{
+  return wc == ' ' || wc == '\t';
+}
+
+static inline int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswcntrl
+#  else
+iswcntrl
+#  endif
+        (wint_t wc)
+{
+  return (wc & ~0x1f) == 0 || wc == 0x7f;
+}
+
+static inline int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswdigit
+#  else
+iswdigit
+#  endif
+         (wint_t wc)
+{
+  return wc >= '0' && wc <= '9';
+}
+
+static inline int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswgraph
+#  else
+iswgraph
+#  endif
+         (wint_t wc)
+{
+  return wc >= '!' && wc <= '~';
+}
+
+static inline int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswlower
+#  else
+iswlower
+#  endif
+         (wint_t wc)
+{
+  return wc >= 'a' && wc <= 'z';
+}
+
+static inline int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswprint
+#  else
+iswprint
+#  endif
+         (wint_t wc)
+{
+  return wc >= ' ' && wc <= '~';
+}
+
+static inline int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswpunct
+#  else
+iswpunct
+#  endif
+         (wint_t wc)
+{
+  return (wc >= '!' && wc <= '~'
+          && !((wc >= '0' && wc <= '9')
+               || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')));
+}
+
+static inline int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswspace
+#  else
+iswspace
+#  endif
+         (wint_t wc)
+{
+  return (wc == ' ' || wc == '\t'
+          || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r');
+}
+
+static inline int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswupper
+#  else
+iswupper
+#  endif
+         (wint_t wc)
+{
+  return wc >= 'A' && wc <= 'Z';
+}
+
+static inline int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswxdigit
+#  else
+iswxdigit
+#  endif
+          (wint_t wc)
+{
+  return ((wc >= '0' && wc <= '9')
+          || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
+}
+
+static inline wint_t
+#  if @REPLACE_TOWLOWER@
+rpl_towlower
+#  else
+towlower
+#  endif
+         (wint_t wc)
+{
+  return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc);
+}
+
+static inline wint_t
+#  if @REPLACE_TOWLOWER@
+rpl_towupper
+#  else
+towupper
+#  endif
+         (wint_t wc)
+{
+  return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc);
+}
+
+# elif @GNULIB_ISWBLANK@ && (! @HAVE_ISWBLANK@ || @REPLACE_ISWBLANK@)
+/* Only the iswblank function is missing.  */
+
+#  if @REPLACE_ISWBLANK@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define iswblank rpl_iswblank
+#   endif
+_GL_FUNCDECL_RPL (iswblank, int, (wint_t wc));
+#  else
+_GL_FUNCDECL_SYS (iswblank, int, (wint_t wc));
+#  endif
+
+# endif
+
+# if defined __MINGW32__
+
+/* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t.
+   The functions towlower and towupper are implemented in the MSVCRT library
+   to take a wchar_t argument and return a wchar_t result.  mingw declares
+   these functions to take a wint_t argument and return a wint_t result.
+   This means that:
+   1. When the user passes an argument outside the range 0x0000..0xFFFF, the
+      function will look only at the lower 16 bits.  This is allowed according
+      to POSIX.
+   2. The return value is returned in the lower 16 bits of the result register.
+      The upper 16 bits are random: whatever happened to be in that part of the
+      result register.  We need to fix this by adding a zero-extend from
+      wchar_t to wint_t after the call.  */
+
+static inline wint_t
+rpl_towlower (wint_t wc)
+{
+  return (wint_t) (wchar_t) towlower (wc);
+}
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define towlower rpl_towlower
+#  endif
+
+static inline wint_t
+rpl_towupper (wint_t wc)
+{
+  return (wint_t) (wchar_t) towupper (wc);
+}
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define towupper rpl_towupper
+#  endif
+
+# endif /* __MINGW32__ */
+
+# define GNULIB_defined_wctype_functions 1
+#endif
+
+#if @REPLACE_ISWCNTRL@
+_GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswlower, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswprint, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswspace, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswupper, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswlower, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswprint, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswspace, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswupper, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc));
+#endif
+_GL_CXXALIASWARN (iswalnum);
+_GL_CXXALIASWARN (iswalpha);
+_GL_CXXALIASWARN (iswcntrl);
+_GL_CXXALIASWARN (iswdigit);
+_GL_CXXALIASWARN (iswgraph);
+_GL_CXXALIASWARN (iswlower);
+_GL_CXXALIASWARN (iswprint);
+_GL_CXXALIASWARN (iswpunct);
+_GL_CXXALIASWARN (iswspace);
+_GL_CXXALIASWARN (iswupper);
+_GL_CXXALIASWARN (iswxdigit);
+
+#if @GNULIB_ISWBLANK@
+# if @REPLACE_ISWCNTRL@ || @REPLACE_ISWBLANK@
+_GL_CXXALIAS_RPL (iswblank, int, (wint_t wc));
+# else
+_GL_CXXALIAS_SYS (iswblank, int, (wint_t wc));
+# endif
+_GL_CXXALIASWARN (iswblank);
+#endif
+
+#if !@HAVE_WCTYPE_T@
+# if !GNULIB_defined_wctype_t
+typedef void * wctype_t;
+#  define GNULIB_defined_wctype_t 1
+# endif
+#endif
+
+/* Get a descriptor for a wide character property.  */
+#if @GNULIB_WCTYPE@
+# if !@HAVE_WCTYPE_T@
+_GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name));
+# endif
+_GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name));
+_GL_CXXALIASWARN (wctype);
+#elif defined GNULIB_POSIXCHECK
+# undef wctype
+# if HAVE_RAW_DECL_WCTYPE
+_GL_WARN_ON_USE (wctype, "wctype is unportable - "
+                 "use gnulib module wctype for portability");
+# endif
+#endif
+
+/* Test whether a wide character has a given property.
+   The argument WC must be either a wchar_t value or WEOF.
+   The argument DESC must have been returned by the wctype() function.  */
+#if @GNULIB_ISWCTYPE@
+# if !@HAVE_WCTYPE_T@
+_GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc));
+# endif
+_GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc));
+_GL_CXXALIASWARN (iswctype);
+#elif defined GNULIB_POSIXCHECK
+# undef iswctype
+# if HAVE_RAW_DECL_ISWCTYPE
+_GL_WARN_ON_USE (iswctype, "iswctype is unportable - "
+                 "use gnulib module iswctype for portability");
+# endif
+#endif
+
+#if @REPLACE_TOWLOWER@ || defined __MINGW32__
+_GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc));
+_GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc));
+_GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc));
+#endif
+_GL_CXXALIASWARN (towlower);
+_GL_CXXALIASWARN (towupper);
+
+#if !@HAVE_WCTRANS_T@
+# if !GNULIB_defined_wctrans_t
+typedef void * wctrans_t;
+#  define GNULIB_defined_wctrans_t 1
+# endif
+#endif
+
+/* Get a descriptor for a wide character case conversion.  */
+#if @GNULIB_WCTRANS@
+# if !@HAVE_WCTRANS_T@
+_GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name));
+# endif
+_GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name));
+_GL_CXXALIASWARN (wctrans);
+#elif defined GNULIB_POSIXCHECK
+# undef wctrans
+# if HAVE_RAW_DECL_WCTRANS
+_GL_WARN_ON_USE (wctrans, "wctrans is unportable - "
+                 "use gnulib module wctrans for portability");
+# endif
+#endif
+
+/* Perform a given case conversion on a wide character.
+   The argument WC must be either a wchar_t value or WEOF.
+   The argument DESC must have been returned by the wctrans() function.  */
+#if @GNULIB_TOWCTRANS@
+# if !@HAVE_WCTRANS_T@
+_GL_FUNCDECL_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc));
+# endif
+_GL_CXXALIAS_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc));
+_GL_CXXALIASWARN (towctrans);
+#elif defined GNULIB_POSIXCHECK
+# undef towctrans
+# if HAVE_RAW_DECL_TOWCTRANS
+_GL_WARN_ON_USE (towctrans, "towctrans is unportable - "
+                 "use gnulib module towctrans for portability");
+# endif
+#endif
+
+
+#endif /* _ at GUARD_PREFIX@_WCTYPE_H */
+#endif /* _ at GUARD_PREFIX@_WCTYPE_H */
diff --git a/gdb/gnulib/m4/00gnulib.m4 b/gdb/gnulib/m4/00gnulib.m4
deleted file mode 100644
index 7feed46..0000000
--- a/gdb/gnulib/m4/00gnulib.m4
+++ /dev/null
@@ -1,30 +0,0 @@
-# 00gnulib.m4 serial 2
-dnl Copyright (C) 2009-2011 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl This file must be named something that sorts before all other
-dnl gnulib-provided .m4 files.  It is needed until such time as we can
-dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE semantics.
-
-# AC_DEFUN_ONCE([NAME], VALUE)
-# ----------------------------
-# Define NAME to expand to VALUE on the first use (whether by direct
-# expansion, or by AC_REQUIRE), and to nothing on all subsequent uses.
-# Avoid bugs in AC_REQUIRE in Autoconf 2.63 and earlier.  This
-# definition is slower than the version in Autoconf 2.64, because it
-# can only use interfaces that existed since 2.59; but it achieves the
-# same effect.  Quoting is necessary to avoid confusing Automake.
-m4_version_prereq([2.63.263], [],
-[m4_define([AC][_DEFUN_ONCE],
-  [AC][_DEFUN([$1],
-    [AC_REQUIRE([_gl_DEFUN_ONCE([$1])],
-      [m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl
-[AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])])
-
-# gl_00GNULIB
-# -----------
-# Witness macro that this file has been included.  Needed to force
-# Automake to include this file prior to all other gnulib .m4 files.
-AC_DEFUN([gl_00GNULIB])
diff --git a/gdb/gnulib/m4/extensions.m4 b/gdb/gnulib/m4/extensions.m4
deleted file mode 100644
index 1330503..0000000
--- a/gdb/gnulib/m4/extensions.m4
+++ /dev/null
@@ -1,118 +0,0 @@
-# serial 9  -*- Autoconf -*-
-# Enable extensions on systems that normally disable them.
-
-# Copyright (C) 2003, 2006-2011 Free Software Foundation, Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from CVS
-# Autoconf.  Perhaps we can remove this once we can assume Autoconf
-# 2.62 or later everywhere, but since CVS Autoconf mutates rapidly
-# enough in this area it's likely we'll need to redefine
-# AC_USE_SYSTEM_EXTENSIONS for quite some time.
-
-# If autoconf reports a warning
-#     warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
-# or  warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
-# the fix is
-#   1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked
-#      but always AC_REQUIREd,
-#   2) to ensure that for each occurrence of
-#        AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
-#      or
-#        AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
-#      the corresponding gnulib module description has 'extensions' among
-#      its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS
-#      invocation occurs in gl_EARLY, not in gl_INIT.
-
-# AC_USE_SYSTEM_EXTENSIONS
-# ------------------------
-# Enable extensions on systems that normally disable them,
-# typically due to standards-conformance issues.
-# Remember that #undef in AH_VERBATIM gets replaced with #define by
-# AC_DEFINE.  The goal here is to define all known feature-enabling
-# macros, then, if reports of conflicts are made, disable macros that
-# cause problems on some platforms (such as __EXTENSIONS__).
-AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS],
-[AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl
-AC_BEFORE([$0], [AC_RUN_IFELSE])dnl
-
-  AC_REQUIRE([AC_CANONICAL_HOST])
-
-  AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=])
-  if test "$MINIX" = yes; then
-    AC_DEFINE([_POSIX_SOURCE], [1],
-      [Define to 1 if you need to in order for `stat' and other
-       things to work.])
-    AC_DEFINE([_POSIX_1_SOURCE], [2],
-      [Define to 2 if the system does not provide POSIX.1 features
-       except with this defined.])
-    AC_DEFINE([_MINIX], [1],
-      [Define to 1 if on MINIX.])
-  fi
-
-  dnl HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to 500,
-  dnl regardless of whether the flags -Ae or _D_HPUX_SOURCE=1 are already
-  dnl provided.
-  case "$host_os" in
-    hpux*)
-      AC_DEFINE([_XOPEN_SOURCE], [500],
-        [Define to 500 only on HP-UX.])
-      ;;
-  esac
-
-  AH_VERBATIM([__EXTENSIONS__],
-[/* Enable extensions on AIX 3, Interix.  */
-#ifndef _ALL_SOURCE
-# undef _ALL_SOURCE
-#endif
-/* Enable GNU extensions on systems that have them.  */
-#ifndef _GNU_SOURCE
-# undef _GNU_SOURCE
-#endif
-/* Enable threading extensions on Solaris.  */
-#ifndef _POSIX_PTHREAD_SEMANTICS
-# undef _POSIX_PTHREAD_SEMANTICS
-#endif
-/* Enable extensions on HP NonStop.  */
-#ifndef _TANDEM_SOURCE
-# undef _TANDEM_SOURCE
-#endif
-/* Enable general extensions on Solaris.  */
-#ifndef __EXTENSIONS__
-# undef __EXTENSIONS__
-#endif
-])
-  AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__],
-    [ac_cv_safe_to_define___extensions__],
-    [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM([[
-#         define __EXTENSIONS__ 1
-          ]AC_INCLUDES_DEFAULT])],
-       [ac_cv_safe_to_define___extensions__=yes],
-       [ac_cv_safe_to_define___extensions__=no])])
-  test $ac_cv_safe_to_define___extensions__ = yes &&
-    AC_DEFINE([__EXTENSIONS__])
-  AC_DEFINE([_ALL_SOURCE])
-  AC_DEFINE([_GNU_SOURCE])
-  AC_DEFINE([_POSIX_PTHREAD_SEMANTICS])
-  AC_DEFINE([_TANDEM_SOURCE])
-])# AC_USE_SYSTEM_EXTENSIONS
-
-# gl_USE_SYSTEM_EXTENSIONS
-# ------------------------
-# Enable extensions on systems that normally disable them,
-# typically due to standards-conformance issues.
-AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS],
-[
-  dnl Require this macro before AC_USE_SYSTEM_EXTENSIONS.
-  dnl gnulib does not need it. But if it gets required by third-party macros
-  dnl after AC_USE_SYSTEM_EXTENSIONS is required, autoconf 2.62..2.63 emit a
-  dnl warning: "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS".
-  dnl Note: We can do this only for one of the macros AC_AIX, AC_GNU_SOURCE,
-  dnl AC_MINIX. If people still use AC_AIX or AC_MINIX, they are out of luck.
-  AC_REQUIRE([AC_GNU_SOURCE])
-
-  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
-])
diff --git a/gdb/gnulib/m4/gnulib-cache.m4 b/gdb/gnulib/m4/gnulib-cache.m4
deleted file mode 100644
index 94168b5..0000000
--- a/gdb/gnulib/m4/gnulib-cache.m4
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (C) 2002-2011 Free Software Foundation, Inc.
-#
-# This file is free software, distributed under the terms of the GNU
-# General Public License.  As a special exception to the GNU General
-# Public License, this file may be distributed as part of a program
-# that contains a configuration script generated by Autoconf, under
-# the same distribution terms as the rest of that program.
-#
-# Generated by gnulib-tool.
-#
-# This file represents the specification of how gnulib-tool is used.
-# It acts as a cache: It is written and read by gnulib-tool.
-# In projects using CVS, this file is meant to be stored in CVS,
-# like the configure.ac and various Makefile.am files.
-
-
-# Specification in the form of a command-line invocation:
-#   gnulib-tool --import --dir=. --lib=libgnu --source-base=gnulib --m4-base=gnulib/m4 --doc-base=doc --tests-base=tests --aux-dir=gnulib/extra --no-libtool --macro-prefix=gl --no-vc-files memmem
-
-# Specification in the form of a few gnulib-tool.m4 macro invocations:
-gl_LOCAL_DIR([])
-gl_MODULES([
-  memmem
-])
-gl_AVOID([])
-gl_SOURCE_BASE([gnulib])
-gl_M4_BASE([gnulib/m4])
-gl_PO_BASE([])
-gl_DOC_BASE([doc])
-gl_TESTS_BASE([tests])
-gl_LIB([libgnu])
-gl_MAKEFILE_NAME([])
-gl_MACRO_PREFIX([gl])
-gl_PO_DOMAIN([])
-gl_VC_FILES([false])
diff --git a/gdb/gnulib/m4/gnulib-common.m4 b/gdb/gnulib/m4/gnulib-common.m4
deleted file mode 100644
index 7b2ce2b..0000000
--- a/gdb/gnulib/m4/gnulib-common.m4
+++ /dev/null
@@ -1,201 +0,0 @@
-# gnulib-common.m4 serial 20
-dnl Copyright (C) 2007-2011 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-# gl_COMMON
-# is expanded unconditionally through gnulib-tool magic.
-AC_DEFUN([gl_COMMON], [
-  dnl Use AC_REQUIRE here, so that the code is expanded once only.
-  AC_REQUIRE([gl_00GNULIB])
-  AC_REQUIRE([gl_COMMON_BODY])
-])
-AC_DEFUN([gl_COMMON_BODY], [
-  AH_VERBATIM([isoc99_inline],
-[/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
-   the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
-   earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
-   __APPLE__ && __MACH__ test for MacOS X.
-   __APPLE_CC__ tests for the Apple compiler and its version.
-   __STDC_VERSION__ tests for the C99 mode.  */
-#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
-# define __GNUC_STDC_INLINE__ 1
-#endif])
-  AH_VERBATIM([unused_parameter],
-[/* Define as a marker that can be attached to declarations that might not
-    be used.  This helps to reduce warnings, such as from
-    GCC -Wunused-parameter.  */
-#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
-# define _GL_UNUSED __attribute__ ((__unused__))
-#else
-# define _GL_UNUSED
-#endif
-/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
-   is a misnomer outside of parameter lists.  */
-#define _UNUSED_PARAMETER_ _GL_UNUSED
-])
-  dnl Preparation for running test programs:
-  dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not
-  dnl to /dev/tty, so they can be redirected to log files.  Such diagnostics
-  dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N.
-  LIBC_FATAL_STDERR_=1
-  export LIBC_FATAL_STDERR_
-])
-
-# gl_MODULE_INDICATOR_CONDITION
-# expands to a C preprocessor expression that evaluates to 1 or 0, depending
-# whether a gnulib module that has been requested shall be considered present
-# or not.
-AC_DEFUN([gl_MODULE_INDICATOR_CONDITION], [1])
-
-# gl_MODULE_INDICATOR_SET_VARIABLE([modulename])
-# sets the shell variable that indicates the presence of the given module to
-# a C preprocessor expression that will evaluate to 1.
-AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE],
-[
-  GNULIB_[]m4_translit([[$1]],
-    [abcdefghijklmnopqrstuvwxyz./-],
-    [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=gl_MODULE_INDICATOR_CONDITION
-])
-
-# gl_MODULE_INDICATOR([modulename])
-# defines a C macro indicating the presence of the given module
-# in a location where it can be used.
-#                                             |  Value  |   Value   |
-#                                             | in lib/ | in tests/ |
-# --------------------------------------------+---------+-----------+
-# Module present among main modules:          |    1    |     1     |
-# --------------------------------------------+---------+-----------+
-# Module present among tests-related modules: |    0    |     1     |
-# --------------------------------------------+---------+-----------+
-# Module not present at all:                  |    0    |     0     |
-# --------------------------------------------+---------+-----------+
-AC_DEFUN([gl_MODULE_INDICATOR],
-[
-  AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]],
-      [abcdefghijklmnopqrstuvwxyz./-],
-      [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]),
-    [gl_MODULE_INDICATOR_CONDITION],
-    [Define to a C preprocessor expression that evaluates to 1 or 0,
-     depending whether the gnulib module $1 shall be considered present.])
-])
-
-# gl_MODULE_INDICATOR_FOR_TESTS([modulename])
-# defines a C macro indicating the presence of the given module
-# in lib or tests. This is useful to determine whether the module
-# should be tested.
-#                                             |  Value  |   Value   |
-#                                             | in lib/ | in tests/ |
-# --------------------------------------------+---------+-----------+
-# Module present among main modules:          |    1    |     1     |
-# --------------------------------------------+---------+-----------+
-# Module present among tests-related modules: |    1    |     1     |
-# --------------------------------------------+---------+-----------+
-# Module not present at all:                  |    0    |     0     |
-# --------------------------------------------+---------+-----------+
-AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS],
-[
-  AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]],
-      [abcdefghijklmnopqrstuvwxyz./-],
-      [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1],
-    [Define to 1 when the gnulib module $1 should be tested.])
-])
-
-# m4_foreach_w
-# is a backport of autoconf-2.59c's m4_foreach_w.
-# Remove this macro when we can assume autoconf >= 2.60.
-m4_ifndef([m4_foreach_w],
-  [m4_define([m4_foreach_w],
-    [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])])
-
-# AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH])
-# ----------------------------------------------------
-# Backport of autoconf-2.63b's macro.
-# Remove this macro when we can assume autoconf >= 2.64.
-m4_ifndef([AS_VAR_IF],
-[m4_define([AS_VAR_IF],
-[AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])])
-
-# AC_PROG_MKDIR_P
-# is a backport of autoconf-2.60's AC_PROG_MKDIR_P, with a fix
-# for interoperability with automake-1.9.6 from autoconf-2.62.
-# Remove this macro when we can assume autoconf >= 2.62 or
-# autoconf >= 2.60 && automake >= 1.10.
-m4_ifdef([AC_PROG_MKDIR_P], [
-  dnl For automake-1.9.6 && autoconf < 2.62: Ensure MKDIR_P is AC_SUBSTed.
-  m4_define([AC_PROG_MKDIR_P],
-    m4_defn([AC_PROG_MKDIR_P])[
-    AC_SUBST([MKDIR_P])])], [
-  dnl For autoconf < 2.60: Backport of AC_PROG_MKDIR_P.
-  AC_DEFUN_ONCE([AC_PROG_MKDIR_P],
-    [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
-     MKDIR_P='$(mkdir_p)'
-     AC_SUBST([MKDIR_P])])])
-
-# AC_C_RESTRICT
-# This definition overrides the AC_C_RESTRICT macro from autoconf 2.60..2.61,
-# so that mixed use of GNU C and GNU C++ and mixed use of Sun C and Sun C++
-# works.
-# This definition can be removed once autoconf >= 2.62 can be assumed.
-m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.62]),[-1],[
-AC_DEFUN([AC_C_RESTRICT],
-[AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict],
-  [ac_cv_c_restrict=no
-   # The order here caters to the fact that C++ does not require restrict.
-   for ac_kw in __restrict __restrict__ _Restrict restrict; do
-     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
-      [[typedef int * int_ptr;
-        int foo (int_ptr $ac_kw ip) {
-        return ip[0];
-       }]],
-      [[int s[1];
-        int * $ac_kw t = s;
-        t[0] = 0;
-        return foo(t)]])],
-      [ac_cv_c_restrict=$ac_kw])
-     test "$ac_cv_c_restrict" != no && break
-   done
-  ])
- AH_VERBATIM([restrict],
-[/* Define to the equivalent of the C99 'restrict' keyword, or to
-   nothing if this is not supported.  Do not define if restrict is
-   supported directly.  */
-#undef restrict
-/* Work around a bug in Sun C++: it does not support _Restrict, even
-   though the corresponding Sun C compiler does, which causes
-   "#define restrict _Restrict" in the previous line.  Perhaps some future
-   version of Sun C++ will work with _Restrict; if so, it'll probably
-   define __RESTRICT, just as Sun C does.  */
-#if defined __SUNPRO_CC && !defined __RESTRICT
-# define _Restrict
-#endif])
- case $ac_cv_c_restrict in
-   restrict) ;;
-   no) AC_DEFINE([restrict], []) ;;
-   *)  AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;;
- esac
-])
-])
-
-# gl_BIGENDIAN
-# is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd.
-# Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some
-# macros invoke AC_C_BIGENDIAN with arguments.
-AC_DEFUN([gl_BIGENDIAN],
-[
-  AC_C_BIGENDIAN
-])
-
-# gl_CACHE_VAL_SILENT(cache-id, command-to-set-it)
-# is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not
-# output a spurious "(cached)" mark in the midst of other configure output.
-# This macro should be used instead of AC_CACHE_VAL when it is not surrounded
-# by an AC_MSG_CHECKING/AC_MSG_RESULT pair.
-AC_DEFUN([gl_CACHE_VAL_SILENT],
-[
-  saved_as_echo_n="$as_echo_n"
-  as_echo_n=':'
-  AC_CACHE_VAL([$1], [$2])
-  as_echo_n="$saved_as_echo_n"
-])
diff --git a/gdb/gnulib/m4/gnulib-comp.m4 b/gdb/gnulib/m4/gnulib-comp.m4
deleted file mode 100644
index f9b4734..0000000
--- a/gdb/gnulib/m4/gnulib-comp.m4
+++ /dev/null
@@ -1,253 +0,0 @@
-# DO NOT EDIT! GENERATED AUTOMATICALLY!
-# Copyright (C) 2002-2011 Free Software Foundation, Inc.
-#
-# This file is free software, distributed under the terms of the GNU
-# General Public License.  As a special exception to the GNU General
-# Public License, this file may be distributed as part of a program
-# that contains a configuration script generated by Autoconf, under
-# the same distribution terms as the rest of that program.
-#
-# Generated by gnulib-tool.
-#
-# This file represents the compiled summary of the specification in
-# gnulib-cache.m4. It lists the computed macro invocations that need
-# to be invoked from configure.ac.
-# In projects using CVS, this file can be treated like other built files.
-
-
-# This macro should be invoked from ./configure.ac, in the section
-# "Checks for programs", right after AC_PROG_CC, and certainly before
-# any checks for libraries, header files, types and library functions.
-AC_DEFUN([gl_EARLY],
-[
-  m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace
-  m4_pattern_allow([^gl_ES$])dnl a valid locale name
-  m4_pattern_allow([^gl_LIBOBJS$])dnl a variable
-  m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable
-  AC_REQUIRE([AC_PROG_RANLIB])
-  # Code from module arg-nonnull:
-  # Code from module c++defs:
-  # Code from module extensions:
-  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
-  # Code from module include_next:
-  # Code from module memchr:
-  # Code from module memmem:
-  # Code from module memmem-simple:
-  # Code from module multiarch:
-  # Code from module stddef:
-  # Code from module stdint:
-  # Code from module string:
-  # Code from module warn-on-use:
-  # Code from module wchar:
-])
-
-# This macro should be invoked from ./configure.ac, in the section
-# "Check for header files, types and library functions".
-AC_DEFUN([gl_INIT],
-[
-  AM_CONDITIONAL([GL_COND_LIBTOOL], [false])
-  gl_cond_libtool=false
-  gl_libdeps=
-  gl_ltlibdeps=
-  gl_m4_base='gnulib/m4'
-  m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ]))
-  m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS]))
-  m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES]))
-  m4_pushdef([gl_LIBSOURCES_LIST], [])
-  m4_pushdef([gl_LIBSOURCES_DIR], [])
-  gl_COMMON
-  gl_source_base='gnulib'
-  # Code from module arg-nonnull:
-  # Code from module c++defs:
-  # Code from module extensions:
-  # Code from module include_next:
-  # Code from module memchr:
-  gl_FUNC_MEMCHR
-  gl_STRING_MODULE_INDICATOR([memchr])
-  # Code from module memmem:
-  gl_FUNC_MEMMEM
-  # Code from module memmem-simple:
-  gl_FUNC_MEMMEM_SIMPLE
-  gl_STRING_MODULE_INDICATOR([memmem])
-  # Code from module multiarch:
-  gl_MULTIARCH
-  # Code from module stddef:
-  gl_STDDEF_H
-  # Code from module stdint:
-  gl_STDINT_H
-  # Code from module string:
-  gl_HEADER_STRING_H
-  # Code from module warn-on-use:
-  # Code from module wchar:
-  gl_WCHAR_H
-  # Code from module dummy:
-  # End of code from modules
-  m4_ifval(gl_LIBSOURCES_LIST, [
-    m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ ||
-      for gl_file in ]gl_LIBSOURCES_LIST[ ; do
-        if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then
-          echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2
-          exit 1
-        fi
-      done])dnl
-      m4_if(m4_sysval, [0], [],
-        [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
-  ])
-  m4_popdef([gl_LIBSOURCES_DIR])
-  m4_popdef([gl_LIBSOURCES_LIST])
-  m4_popdef([AC_LIBSOURCES])
-  m4_popdef([AC_REPLACE_FUNCS])
-  m4_popdef([AC_LIBOBJ])
-  AC_CONFIG_COMMANDS_PRE([
-    gl_libobjs=
-    gl_ltlibobjs=
-    if test -n "$gl_LIBOBJS"; then
-      # Remove the extension.
-      sed_drop_objext='s/\.o$//;s/\.obj$//'
-      for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
-        gl_libobjs="$gl_libobjs $i.$ac_objext"
-        gl_ltlibobjs="$gl_ltlibobjs $i.lo"
-      done
-    fi
-    AC_SUBST([gl_LIBOBJS], [$gl_libobjs])
-    AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs])
-  ])
-  gltests_libdeps=
-  gltests_ltlibdeps=
-  m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ]))
-  m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS]))
-  m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES]))
-  m4_pushdef([gltests_LIBSOURCES_LIST], [])
-  m4_pushdef([gltests_LIBSOURCES_DIR], [])
-  gl_COMMON
-  gl_source_base='tests'
-changequote(,)dnl
-  gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
-changequote([, ])dnl
-  AC_SUBST([gltests_WITNESS])
-  gl_module_indicator_condition=$gltests_WITNESS
-  m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition])
-  m4_popdef([gl_MODULE_INDICATOR_CONDITION])
-  m4_ifval(gltests_LIBSOURCES_LIST, [
-    m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ ||
-      for gl_file in ]gltests_LIBSOURCES_LIST[ ; do
-        if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then
-          echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2
-          exit 1
-        fi
-      done])dnl
-      m4_if(m4_sysval, [0], [],
-        [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
-  ])
-  m4_popdef([gltests_LIBSOURCES_DIR])
-  m4_popdef([gltests_LIBSOURCES_LIST])
-  m4_popdef([AC_LIBSOURCES])
-  m4_popdef([AC_REPLACE_FUNCS])
-  m4_popdef([AC_LIBOBJ])
-  AC_CONFIG_COMMANDS_PRE([
-    gltests_libobjs=
-    gltests_ltlibobjs=
-    if test -n "$gltests_LIBOBJS"; then
-      # Remove the extension.
-      sed_drop_objext='s/\.o$//;s/\.obj$//'
-      for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
-        gltests_libobjs="$gltests_libobjs $i.$ac_objext"
-        gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
-      done
-    fi
-    AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs])
-    AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs])
-  ])
-  LIBGNU_LIBDEPS="$gl_libdeps"
-  AC_SUBST([LIBGNU_LIBDEPS])
-  LIBGNU_LTLIBDEPS="$gl_ltlibdeps"
-  AC_SUBST([LIBGNU_LTLIBDEPS])
-])
-
-# Like AC_LIBOBJ, except that the module name goes
-# into gl_LIBOBJS instead of into LIBOBJS.
-AC_DEFUN([gl_LIBOBJ], [
-  AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl
-  gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext"
-])
-
-# Like AC_REPLACE_FUNCS, except that the module name goes
-# into gl_LIBOBJS instead of into LIBOBJS.
-AC_DEFUN([gl_REPLACE_FUNCS], [
-  m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
-  AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)])
-])
-
-# Like AC_LIBSOURCES, except the directory where the source file is
-# expected is derived from the gnulib-tool parameterization,
-# and alloca is special cased (for the alloca-opt module).
-# We could also entirely rely on EXTRA_lib..._SOURCES.
-AC_DEFUN([gl_LIBSOURCES], [
-  m4_foreach([_gl_NAME], [$1], [
-    m4_if(_gl_NAME, [alloca.c], [], [
-      m4_define([gl_LIBSOURCES_DIR], [gnulib])
-      m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ])
-    ])
-  ])
-])
-
-# Like AC_LIBOBJ, except that the module name goes
-# into gltests_LIBOBJS instead of into LIBOBJS.
-AC_DEFUN([gltests_LIBOBJ], [
-  AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl
-  gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext"
-])
-
-# Like AC_REPLACE_FUNCS, except that the module name goes
-# into gltests_LIBOBJS instead of into LIBOBJS.
-AC_DEFUN([gltests_REPLACE_FUNCS], [
-  m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
-  AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)])
-])
-
-# Like AC_LIBSOURCES, except the directory where the source file is
-# expected is derived from the gnulib-tool parameterization,
-# and alloca is special cased (for the alloca-opt module).
-# We could also entirely rely on EXTRA_lib..._SOURCES.
-AC_DEFUN([gltests_LIBSOURCES], [
-  m4_foreach([_gl_NAME], [$1], [
-    m4_if(_gl_NAME, [alloca.c], [], [
-      m4_define([gltests_LIBSOURCES_DIR], [tests])
-      m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ])
-    ])
-  ])
-])
-
-# This macro records the list of files which have been installed by
-# gnulib-tool and may be removed by future gnulib-tool invocations.
-AC_DEFUN([gl_FILE_LIST], [
-  build-aux/arg-nonnull.h
-  build-aux/c++defs.h
-  build-aux/warn-on-use.h
-  lib/dummy.c
-  lib/memchr.c
-  lib/memchr.valgrind
-  lib/memmem.c
-  lib/stddef.in.h
-  lib/stdint.in.h
-  lib/str-two-way.h
-  lib/string.in.h
-  lib/wchar.in.h
-  m4/00gnulib.m4
-  m4/extensions.m4
-  m4/gnulib-common.m4
-  m4/include_next.m4
-  m4/longlong.m4
-  m4/memchr.m4
-  m4/memmem.m4
-  m4/mmap-anon.m4
-  m4/multiarch.m4
-  m4/onceonly.m4
-  m4/stddef_h.m4
-  m4/stdint.m4
-  m4/string_h.m4
-  m4/warn-on-use.m4
-  m4/wchar_h.m4
-  m4/wchar_t.m4
-  m4/wint_t.m4
-])
diff --git a/gdb/gnulib/m4/gnulib-tool.m4 b/gdb/gnulib/m4/gnulib-tool.m4
deleted file mode 100644
index ed41e9d..0000000
--- a/gdb/gnulib/m4/gnulib-tool.m4
+++ /dev/null
@@ -1,57 +0,0 @@
-# gnulib-tool.m4 serial 2
-dnl Copyright (C) 2004-2005, 2009-2011 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl The following macros need not be invoked explicitly.
-dnl Invoking them does nothing except to declare default arguments
-dnl for "gnulib-tool --import".
-
-dnl Usage: gl_LOCAL_DIR([DIR])
-AC_DEFUN([gl_LOCAL_DIR], [])
-
-dnl Usage: gl_MODULES([module1 module2 ...])
-AC_DEFUN([gl_MODULES], [])
-
-dnl Usage: gl_AVOID([module1 module2 ...])
-AC_DEFUN([gl_AVOID], [])
-
-dnl Usage: gl_SOURCE_BASE([DIR])
-AC_DEFUN([gl_SOURCE_BASE], [])
-
-dnl Usage: gl_M4_BASE([DIR])
-AC_DEFUN([gl_M4_BASE], [])
-
-dnl Usage: gl_PO_BASE([DIR])
-AC_DEFUN([gl_PO_BASE], [])
-
-dnl Usage: gl_DOC_BASE([DIR])
-AC_DEFUN([gl_DOC_BASE], [])
-
-dnl Usage: gl_TESTS_BASE([DIR])
-AC_DEFUN([gl_TESTS_BASE], [])
-
-dnl Usage: gl_WITH_TESTS
-AC_DEFUN([gl_WITH_TESTS], [])
-
-dnl Usage: gl_LIB([LIBNAME])
-AC_DEFUN([gl_LIB], [])
-
-dnl Usage: gl_LGPL or gl_LGPL([VERSION])
-AC_DEFUN([gl_LGPL], [])
-
-dnl Usage: gl_MAKEFILE_NAME([FILENAME])
-AC_DEFUN([gl_MAKEFILE_NAME], [])
-
-dnl Usage: gl_LIBTOOL
-AC_DEFUN([gl_LIBTOOL], [])
-
-dnl Usage: gl_MACRO_PREFIX([PREFIX])
-AC_DEFUN([gl_MACRO_PREFIX], [])
-
-dnl Usage: gl_PO_DOMAIN([DOMAIN])
-AC_DEFUN([gl_PO_DOMAIN], [])
-
-dnl Usage: gl_VC_FILES([BOOLEAN])
-AC_DEFUN([gl_VC_FILES], [])
diff --git a/gdb/gnulib/m4/include_next.m4 b/gdb/gnulib/m4/include_next.m4
deleted file mode 100644
index 1314c33..0000000
--- a/gdb/gnulib/m4/include_next.m4
+++ /dev/null
@@ -1,187 +0,0 @@
-# include_next.m4 serial 14
-dnl Copyright (C) 2006-2011 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Paul Eggert and Derek Price.
-
-dnl Sets INCLUDE_NEXT and PRAGMA_SYSTEM_HEADER.
-dnl
-dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to
-dnl 'include' otherwise.
-dnl
-dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler
-dnl supports it in the special case that it is the first include directive in
-dnl the given file, or to 'include' otherwise.
-dnl
-dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next,
-dnl so as to avoid GCC warnings when the gcc option -pedantic is used.
-dnl '#pragma GCC system_header' has the same effect as if the file was found
-dnl through the include search path specified with '-isystem' options (as
-dnl opposed to the search path specified with '-I' options). Namely, gcc
-dnl does not warn about some things, and on some systems (Solaris and Interix)
-dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side
-dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead
-dnl of plain '__STDC__'.
-
-AC_DEFUN([gl_INCLUDE_NEXT],
-[
-  AC_LANG_PREPROC_REQUIRE()
-  AC_CACHE_CHECK([whether the preprocessor supports include_next],
-    [gl_cv_have_include_next],
-    [rm -rf conftestd1a conftestd1b conftestd2
-     mkdir conftestd1a conftestd1b conftestd2
-     dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on
-     dnl AIX 6.1 support include_next when used as first preprocessor directive
-     dnl in a file, but not when preceded by another include directive. Check
-     dnl for this bug by including <stdio.h>.
-     dnl Additionally, with this same compiler, include_next is a no-op when
-     dnl used in a header file that was included by specifying its absolute
-     dnl file name. Despite these two bugs, include_next is used in the
-     dnl compiler's <math.h>. By virtue of the second bug, we need to use
-     dnl include_next as well in this case.
-     cat <<EOF > conftestd1a/conftest.h
-#define DEFINED_IN_CONFTESTD1
-#include_next <conftest.h>
-#ifdef DEFINED_IN_CONFTESTD2
-int foo;
-#else
-#error "include_next doesn't work"
-#endif
-EOF
-     cat <<EOF > conftestd1b/conftest.h
-#define DEFINED_IN_CONFTESTD1
-#include <stdio.h>
-#include_next <conftest.h>
-#ifdef DEFINED_IN_CONFTESTD2
-int foo;
-#else
-#error "include_next doesn't work"
-#endif
-EOF
-     cat <<EOF > conftestd2/conftest.h
-#ifndef DEFINED_IN_CONFTESTD1
-#error "include_next test doesn't work"
-#endif
-#define DEFINED_IN_CONFTESTD2
-EOF
-     gl_save_CPPFLAGS="$CPPFLAGS"
-     CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2"
-     AC_COMPILE_IFELSE([#include <conftest.h>],
-       [gl_cv_have_include_next=yes],
-       [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2"
-        AC_COMPILE_IFELSE([#include <conftest.h>],
-          [gl_cv_have_include_next=buggy],
-          [gl_cv_have_include_next=no])
-       ])
-     CPPFLAGS="$gl_save_CPPFLAGS"
-     rm -rf conftestd1a conftestd1b conftestd2
-    ])
-  PRAGMA_SYSTEM_HEADER=
-  if test $gl_cv_have_include_next = yes; then
-    INCLUDE_NEXT=include_next
-    INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
-    if test -n "$GCC"; then
-      PRAGMA_SYSTEM_HEADER='#pragma GCC system_header'
-    fi
-  else
-    if test $gl_cv_have_include_next = buggy; then
-      INCLUDE_NEXT=include
-      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
-    else
-      INCLUDE_NEXT=include
-      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include
-    fi
-  fi
-  AC_SUBST([INCLUDE_NEXT])
-  AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE])
-  AC_SUBST([PRAGMA_SYSTEM_HEADER])
-])
-
-# gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...)
-# ------------------------------------------
-# For each arg foo.h, if #include_next works, define NEXT_FOO_H to be
-# '<foo.h>'; otherwise define it to be
-# '"///usr/include/foo.h"', or whatever other absolute file name is suitable.
-# Also, if #include_next works as first preprocessing directive in a file,
-# define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be '<foo.h>'; otherwise define it to
-# be
-# '"///usr/include/foo.h"', or whatever other absolute file name is suitable.
-# That way, a header file with the following line:
-#       #@INCLUDE_NEXT@ @NEXT_FOO_H@
-# or
-#       #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@
-# behaves (after sed substitution) as if it contained
-#       #include_next <foo.h>
-# even if the compiler does not support include_next.
-# The three "///" are to pacify Sun C 5.8, which otherwise would say
-# "warning: #include of /usr/include/... may be non-portable".
-# Use `""', not `<>', so that the /// cannot be confused with a C99 comment.
-# Note: This macro assumes that the header file is not empty after
-# preprocessing, i.e. it does not only define preprocessor macros but also
-# provides some type/enum definitions or function/variable declarations.
-AC_DEFUN([gl_CHECK_NEXT_HEADERS],
-[
-  AC_REQUIRE([gl_INCLUDE_NEXT])
-  AC_REQUIRE([AC_CANONICAL_HOST])
-  AC_CHECK_HEADERS_ONCE([$1])
-
-  m4_foreach_w([gl_HEADER_NAME], [$1],
-    [AS_VAR_PUSHDEF([gl_next_header],
-                    [gl_cv_next_]m4_defn([gl_HEADER_NAME]))
-     if test $gl_cv_have_include_next = yes; then
-       AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>'])
-     else
-       AC_CACHE_CHECK(
-         [absolute name of <]m4_defn([gl_HEADER_NAME])[>],
-         m4_defn([gl_next_header]),
-         [AS_VAR_PUSHDEF([gl_header_exists],
-                         [ac_cv_header_]m4_defn([gl_HEADER_NAME]))
-          if test AS_VAR_GET(gl_header_exists) = yes; then
-            AC_LANG_CONFTEST(
-              [AC_LANG_SOURCE(
-                 [[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]]
-               )])
-            dnl AIX "xlc -E" and "cc -E" omit #line directives for header files
-            dnl that contain only a #include of other header files and no
-            dnl non-comment tokens of their own. This leads to a failure to
-            dnl detect the absolute name of <dirent.h>, <signal.h>, <poll.h>
-            dnl and others. The workaround is to force preservation of comments
-            dnl through option -C. This ensures all necessary #line directives
-            dnl are present. GCC supports option -C as well.
-            case "$host_os" in
-              aix*) gl_absname_cpp="$ac_cpp -C" ;;
-              *)    gl_absname_cpp="$ac_cpp" ;;
-            esac
-            dnl eval is necessary to expand gl_absname_cpp.
-            dnl Ultrix and Pyramid sh refuse to redirect output of eval,
-            dnl so use subshell.
-            AS_VAR_SET([gl_next_header],
-              ['"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
-               sed -n '\#/]m4_defn([gl_HEADER_NAME])[#{
-                 s#.*"\(.*/]m4_defn([gl_HEADER_NAME])[\)".*#\1#
-                 s#^/[^/]#//&#
-                 p
-                 q
-               }'`'"'])
-          else
-            AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>'])
-          fi
-          AS_VAR_POPDEF([gl_header_exists])])
-     fi
-     AC_SUBST(
-       AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])),
-       [AS_VAR_GET([gl_next_header])])
-     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
-       gl_next_as_first_directive='<'gl_HEADER_NAME'>'
-     else
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
-       gl_next_as_first_directive=AS_VAR_GET([gl_next_header])
-     fi
-     AC_SUBST(
-       AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])),
-       [$gl_next_as_first_directive])
-     AS_VAR_POPDEF([gl_next_header])])
-])
diff --git a/gdb/gnulib/m4/longlong.m4 b/gdb/gnulib/m4/longlong.m4
deleted file mode 100644
index a4d95aa..0000000
--- a/gdb/gnulib/m4/longlong.m4
+++ /dev/null
@@ -1,106 +0,0 @@
-# longlong.m4 serial 14
-dnl Copyright (C) 1999-2007, 2009-2011 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Paul Eggert.
-
-# Define HAVE_LONG_LONG_INT if 'long long int' works.
-# This fixes a bug in Autoconf 2.61, but can be removed once we
-# assume 2.62 everywhere.
-
-# Note: If the type 'long long int' exists but is only 32 bits large
-# (as on some very old compilers), HAVE_LONG_LONG_INT will not be
-# defined. In this case you can treat 'long long int' like 'long int'.
-
-AC_DEFUN([AC_TYPE_LONG_LONG_INT],
-[
-  AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
-    [AC_LINK_IFELSE(
-       [_AC_TYPE_LONG_LONG_SNIPPET],
-       [dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
-        dnl If cross compiling, assume the bug isn't important, since
-        dnl nobody cross compiles for this platform as far as we know.
-        AC_RUN_IFELSE(
-          [AC_LANG_PROGRAM(
-             [[@%:@include <limits.h>
-               @%:@ifndef LLONG_MAX
-               @%:@ define HALF \
-                        (1LL << (sizeof (long long int) * CHAR_BIT - 2))
-               @%:@ define LLONG_MAX (HALF - 1 + HALF)
-               @%:@endif]],
-             [[long long int n = 1;
-               int i;
-               for (i = 0; ; i++)
-                 {
-                   long long int m = n << i;
-                   if (m >> i != n)
-                     return 1;
-                   if (LLONG_MAX / 2 < m)
-                     break;
-                 }
-               return 0;]])],
-          [ac_cv_type_long_long_int=yes],
-          [ac_cv_type_long_long_int=no],
-          [ac_cv_type_long_long_int=yes])],
-       [ac_cv_type_long_long_int=no])])
-  if test $ac_cv_type_long_long_int = yes; then
-    AC_DEFINE([HAVE_LONG_LONG_INT], [1],
-      [Define to 1 if the system has the type `long long int'.])
-  fi
-])
-
-# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
-# This fixes a bug in Autoconf 2.61, but can be removed once we
-# assume 2.62 everywhere.
-
-# Note: If the type 'unsigned long long int' exists but is only 32 bits
-# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
-# will not be defined. In this case you can treat 'unsigned long long int'
-# like 'unsigned long int'.
-
-AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
-[
-  AC_CACHE_CHECK([for unsigned long long int],
-    [ac_cv_type_unsigned_long_long_int],
-    [AC_LINK_IFELSE(
-       [_AC_TYPE_LONG_LONG_SNIPPET],
-       [ac_cv_type_unsigned_long_long_int=yes],
-       [ac_cv_type_unsigned_long_long_int=no])])
-  if test $ac_cv_type_unsigned_long_long_int = yes; then
-    AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1],
-      [Define to 1 if the system has the type `unsigned long long int'.])
-  fi
-])
-
-# Expands to a C program that can be used to test for simultaneous support
-# of 'long long' and 'unsigned long long'. We don't want to say that
-# 'long long' is available if 'unsigned long long' is not, or vice versa,
-# because too many programs rely on the symmetry between signed and unsigned
-# integer types (excluding 'bool').
-AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
-[
-  AC_LANG_PROGRAM(
-    [[/* For now, do not test the preprocessor; as of 2007 there are too many
-         implementations with broken preprocessors.  Perhaps this can
-         be revisited in 2012.  In the meantime, code should not expect
-         #if to work with literals wider than 32 bits.  */
-      /* Test literals.  */
-      long long int ll = 9223372036854775807ll;
-      long long int nll = -9223372036854775807LL;
-      unsigned long long int ull = 18446744073709551615ULL;
-      /* Test constant expressions.   */
-      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
-                     ? 1 : -1)];
-      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
-                     ? 1 : -1)];
-      int i = 63;]],
-    [[/* Test availability of runtime routines for shift and division.  */
-      long long int llmax = 9223372036854775807ll;
-      unsigned long long int ullmax = 18446744073709551615ull;
-      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
-              | (llmax / ll) | (llmax % ll)
-              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
-              | (ullmax / ull) | (ullmax % ull));]])
-])
diff --git a/gdb/gnulib/m4/memchr.m4 b/gdb/gnulib/m4/memchr.m4
deleted file mode 100644
index b2b09bd..0000000
--- a/gdb/gnulib/m4/memchr.m4
+++ /dev/null
@@ -1,85 +0,0 @@
-# memchr.m4 serial 8
-dnl Copyright (C) 2002-2004, 2009-2011 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN_ONCE([gl_FUNC_MEMCHR],
-[
-  dnl Check for prerequisites for memory fence checks.
-  gl_FUNC_MMAP_ANON
-  AC_CHECK_HEADERS_ONCE([sys/mman.h])
-  AC_CHECK_FUNCS_ONCE([mprotect])
-
-  dnl These days, we assume memchr is present.  But just in case...
-  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
-  AC_CHECK_FUNCS_ONCE([memchr])
-  if test $ac_cv_func_memchr = yes; then
-    # Detect platform-specific bugs in some versions of glibc:
-    # memchr should not dereference anything with length 0
-    #   http://bugzilla.redhat.com/499689
-    # memchr should not dereference overestimated length after a match
-    #   http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737
-    #   http://sourceware.org/bugzilla/show_bug.cgi?id=10162
-    # Assume that memchr works on platforms that lack mprotect.
-    AC_CACHE_CHECK([whether memchr works], [gl_cv_func_memchr_works],
-      [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-#include <string.h>
-#if HAVE_SYS_MMAN_H
-# include <fcntl.h>
-# include <unistd.h>
-# include <sys/types.h>
-# include <sys/mman.h>
-# ifndef MAP_FILE
-#  define MAP_FILE 0
-# endif
-#endif
-]], [[
-  char *fence = NULL;
-#if HAVE_SYS_MMAN_H && HAVE_MPROTECT
-# if HAVE_MAP_ANONYMOUS
-  const int flags = MAP_ANONYMOUS | MAP_PRIVATE;
-  const int fd = -1;
-# else /* !HAVE_MAP_ANONYMOUS */
-  const int flags = MAP_FILE | MAP_PRIVATE;
-  int fd = open ("/dev/zero", O_RDONLY, 0666);
-  if (fd >= 0)
-# endif
-    {
-      int pagesize = getpagesize ();
-      char *two_pages =
-        (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE,
-                       flags, fd, 0);
-      if (two_pages != (char *)(-1)
-          && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0)
-        fence = two_pages + pagesize;
-    }
-#endif
-  if (fence)
-    {
-      if (memchr (fence, 0, 0))
-        return 1;
-      strcpy (fence - 9, "12345678");
-      if (memchr (fence - 9, 0, 79) != fence - 1)
-        return 2;
-    }
-  return 0;
-]])], [gl_cv_func_memchr_works=yes], [gl_cv_func_memchr_works=no],
-      [dnl Be pessimistic for now.
-       gl_cv_func_memchr_works="guessing no"])])
-    if test "$gl_cv_func_memchr_works" != yes; then
-      REPLACE_MEMCHR=1
-    fi
-  else
-    HAVE_MEMCHR=0
-  fi
-  if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then
-    AC_LIBOBJ([memchr])
-    gl_PREREQ_MEMCHR
-  fi
-])
-
-# Prerequisites of lib/memchr.c.
-AC_DEFUN([gl_PREREQ_MEMCHR], [
-  AC_CHECK_HEADERS([bp-sym.h])
-])
diff --git a/gdb/gnulib/m4/memmem.m4 b/gdb/gnulib/m4/memmem.m4
deleted file mode 100644
index c6506ee..0000000
--- a/gdb/gnulib/m4/memmem.m4
+++ /dev/null
@@ -1,84 +0,0 @@
-# memmem.m4 serial 14
-dnl Copyright (C) 2002, 2003, 2004, 2007, 2008, 2009, 2010 Free Software
-dnl Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl Check that memmem is present.
-AC_DEFUN([gl_FUNC_MEMMEM_SIMPLE],
-[
-  dnl Persuade glibc <string.h> to declare memmem().
-  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
-
-  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
-  AC_REPLACE_FUNCS([memmem])
-  AC_CHECK_DECLS_ONCE([memmem])
-  if test $ac_cv_have_decl_memmem = no; then
-    HAVE_DECL_MEMMEM=0
-  fi
-  gl_PREREQ_MEMMEM
-]) # gl_FUNC_MEMMEM_SIMPLE
-
-dnl Additionally, check that memmem is efficient and handles empty needles.
-AC_DEFUN([gl_FUNC_MEMMEM],
-[
-  AC_REQUIRE([gl_FUNC_MEMMEM_SIMPLE])
-  if test $ac_cv_have_decl_memmem = yes; then
-    AC_CACHE_CHECK([whether memmem works in linear time],
-      [gl_cv_func_memmem_works],
-      [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-#include <signal.h> /* for signal */
-#include <string.h> /* for memmem */
-#include <stdlib.h> /* for malloc */
-#include <unistd.h> /* for alarm */
-]], [[size_t m = 1000000;
-    char *haystack = (char *) malloc (2 * m + 1);
-    char *needle = (char *) malloc (m + 1);
-    void *result = 0;
-    /* Failure to compile this test due to missing alarm is okay,
-       since all such platforms (mingw) also lack memmem.  */
-    signal (SIGALRM, SIG_DFL);
-    alarm (5);
-    /* Check for quadratic performance.  */
-    if (haystack && needle)
-      {
-        memset (haystack, 'A', 2 * m);
-        haystack[2 * m] = 'B';
-        memset (needle, 'A', m);
-        needle[m] = 'B';
-        result = memmem (haystack, 2 * m + 1, needle, m + 1);
-      }
-    /* Check for empty needle behavior.  */
-    return !result || !memmem ("a", 1, 0, 0);]])],
-        [gl_cv_func_memmem_works=yes], [gl_cv_func_memmem_works=no],
-        [dnl Only glibc >= 2.9 and cygwin >= 1.7.0 are known to have a
-         dnl memmem that works in linear time.
-         AC_EGREP_CPP([Lucky user],
-           [
-#include <features.h>
-#ifdef __GNU_LIBRARY__
- #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 9) || (__GLIBC__ > 2)
-  Lucky user
- #endif
-#endif
-#ifdef __CYGWIN__
- #include <cygwin/version.h>
- #if CYGWIN_VERSION_DLL_MAJOR >= 1007
-  Lucky user
- #endif
-#endif
-           ],
-           [gl_cv_func_memmem_works=yes],
-           [gl_cv_func_memmem_works="guessing no"])
-        ])
-      ])
-    if test "$gl_cv_func_memmem_works" != yes; then
-      REPLACE_MEMMEM=1
-      AC_LIBOBJ([memmem])
-    fi
-  fi
-]) # gl_FUNC_MEMMEM
-
-# Prerequisites of lib/memmem.c.
-AC_DEFUN([gl_PREREQ_MEMMEM], [:])
diff --git a/gdb/gnulib/m4/mmap-anon.m4 b/gdb/gnulib/m4/mmap-anon.m4
deleted file mode 100644
index 82f4a3c..0000000
--- a/gdb/gnulib/m4/mmap-anon.m4
+++ /dev/null
@@ -1,59 +0,0 @@
-# mmap-anon.m4 serial 8
-dnl Copyright (C) 2005, 2007, 2009-2011 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-# Detect how mmap can be used to create anonymous (not file-backed) memory
-# mappings.
-# - On Linux, AIX, OSF/1, Solaris, Cygwin, Interix, Haiku, both MAP_ANONYMOUS
-#   and MAP_ANON exist and have the same value.
-# - On HP-UX, only MAP_ANONYMOUS exists.
-# - On MacOS X, FreeBSD, NetBSD, OpenBSD, only MAP_ANON exists.
-# - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be
-#   used.
-
-AC_DEFUN([gl_FUNC_MMAP_ANON],
-[
-  dnl Work around a bug of AC_EGREP_CPP in autoconf-2.57.
-  AC_REQUIRE([AC_PROG_CPP])
-  AC_REQUIRE([AC_PROG_EGREP])
-
-  dnl Persuade glibc <sys/mman.h> to define MAP_ANONYMOUS.
-  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
-
-  # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it
-  # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is
-  # irrelevant for anonymous mappings.
-  AC_CHECK_FUNC([mmap], [gl_have_mmap=yes], [gl_have_mmap=no])
-
-  # Try to allow MAP_ANONYMOUS.
-  gl_have_mmap_anonymous=no
-  if test $gl_have_mmap = yes; then
-    AC_MSG_CHECKING([for MAP_ANONYMOUS])
-    AC_EGREP_CPP([I cant identify this map.], [
-#include <sys/mman.h>
-#ifdef MAP_ANONYMOUS
-    I cant identify this map.
-#endif
-],
-      [gl_have_mmap_anonymous=yes])
-    if test $gl_have_mmap_anonymous != yes; then
-      AC_EGREP_CPP([I cant identify this map.], [
-#include <sys/mman.h>
-#ifdef MAP_ANON
-    I cant identify this map.
-#endif
-],
-        [AC_DEFINE([MAP_ANONYMOUS], [MAP_ANON],
-          [Define to a substitute value for mmap()'s MAP_ANONYMOUS flag.])
-         gl_have_mmap_anonymous=yes])
-    fi
-    AC_MSG_RESULT([$gl_have_mmap_anonymous])
-    if test $gl_have_mmap_anonymous = yes; then
-      AC_DEFINE([HAVE_MAP_ANONYMOUS], [1],
-        [Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including
-         config.h and <sys/mman.h>.])
-    fi
-  fi
-])
diff --git a/gdb/gnulib/m4/multiarch.m4 b/gdb/gnulib/m4/multiarch.m4
deleted file mode 100644
index 9ea85af..0000000
--- a/gdb/gnulib/m4/multiarch.m4
+++ /dev/null
@@ -1,65 +0,0 @@
-# multiarch.m4 serial 5
-dnl Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-# Determine whether the compiler is or may be producing universal binaries.
-#
-# On MacOS X 10.5 and later systems, the user can create libraries and
-# executables that work on multiple system types--known as "fat" or
-# "universal" binaries--by specifying multiple '-arch' options to the
-# compiler but only a single '-arch' option to the preprocessor.  Like
-# this:
-#
-#     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
-#                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
-#                 CPP="gcc -E" CXXCPP="g++ -E"
-#
-# Detect this situation and set the macro AA_APPLE_UNIVERSAL_BUILD at the
-# beginning of config.h and set APPLE_UNIVERSAL_BUILD accordingly.
-
-AC_DEFUN_ONCE([gl_MULTIARCH],
-[
-  dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN.
-  gl_cv_c_multiarch=no
-  AC_COMPILE_IFELSE(
-    [AC_LANG_SOURCE(
-      [[#ifndef __APPLE_CC__
-         not a universal capable compiler
-        #endif
-        typedef int dummy;
-      ]])],
-    [
-     dnl Check for potential -arch flags.  It is not universal unless
-     dnl there are at least two -arch flags with different values.
-     arch=
-     prev=
-     for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do
-       if test -n "$prev"; then
-         case $word in
-           i?86 | x86_64 | ppc | ppc64)
-             if test -z "$arch" || test "$arch" = "$word"; then
-               arch="$word"
-             else
-               gl_cv_c_multiarch=yes
-             fi
-             ;;
-         esac
-         prev=
-       else
-         if test "x$word" = "x-arch"; then
-           prev=arch
-         fi
-       fi
-     done
-    ])
-  if test $gl_cv_c_multiarch = yes; then
-    AC_DEFINE([AA_APPLE_UNIVERSAL_BUILD], [1],
-      [Define if the compiler is building for multiple architectures of Apple platforms at once.])
-    APPLE_UNIVERSAL_BUILD=1
-  else
-    APPLE_UNIVERSAL_BUILD=0
-  fi
-  AC_SUBST([APPLE_UNIVERSAL_BUILD])
-])
diff --git a/gdb/gnulib/m4/onceonly.m4 b/gdb/gnulib/m4/onceonly.m4
deleted file mode 100644
index 4a3cd84..0000000
--- a/gdb/gnulib/m4/onceonly.m4
+++ /dev/null
@@ -1,91 +0,0 @@
-# onceonly.m4 serial 6
-dnl Copyright (C) 2002-2003, 2005-2006, 2008-2010 Free Software Foundation,
-dnl Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License.  As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl This file defines some "once only" variants of standard autoconf macros.
-dnl   AC_CHECK_HEADERS_ONCE          like  AC_CHECK_HEADERS
-dnl   AC_CHECK_FUNCS_ONCE            like  AC_CHECK_FUNCS
-dnl   AC_CHECK_DECLS_ONCE            like  AC_CHECK_DECLS
-dnl   AC_REQUIRE([AC_FUNC_STRCOLL])  like  AC_FUNC_STRCOLL
-dnl The advantage is that the check for each of the headers/functions/decls
-dnl will be put only once into the 'configure' file. It keeps the size of
-dnl the 'configure' file down, and avoids redundant output when 'configure'
-dnl is run.
-dnl The drawback is that the checks cannot be conditionalized. If you write
-dnl   if some_condition; then gl_CHECK_HEADERS(stdlib.h); fi
-dnl inside an AC_DEFUNed function, the gl_CHECK_HEADERS macro call expands to
-dnl empty, and the check will be inserted before the body of the AC_DEFUNed
-dnl function.
-
-dnl The original code implemented AC_CHECK_HEADERS_ONCE and AC_CHECK_FUNCS_ONCE
-dnl in terms of AC_DEFUN and AC_REQUIRE. This implementation uses diversions to
-dnl named sections DEFAULTS and INIT_PREPARE in order to check all requested
-dnl headers at once, thus reducing the size of 'configure'. It is known to work
-dnl with autoconf 2.57..2.62 at least . The size reduction is ca. 9%.
-
-dnl Autoconf version 2.59 plus gnulib is required; this file is not needed
-dnl with Autoconf 2.60 or greater. But note that autoconf's implementation of
-dnl AC_CHECK_DECLS_ONCE expects a comma-separated list of symbols as first
-dnl argument!
-AC_PREREQ([2.59])
-
-# AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of
-# AC_CHECK_HEADERS(HEADER1 HEADER2 ...).
-AC_DEFUN([AC_CHECK_HEADERS_ONCE], [
-  :
-  m4_foreach_w([gl_HEADER_NAME], [$1], [
-    AC_DEFUN([gl_CHECK_HEADER_]m4_quote(translit(gl_HEADER_NAME,
-                                                 [./-], [___])), [
-      m4_divert_text([INIT_PREPARE],
-        [gl_header_list="$gl_header_list gl_HEADER_NAME"])
-      gl_HEADERS_EXPANSION
-      AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_HEADER_NAME])),
-        [Define to 1 if you have the <]m4_defn([gl_HEADER_NAME])[> header file.])
-    ])
-    AC_REQUIRE([gl_CHECK_HEADER_]m4_quote(translit(gl_HEADER_NAME,
-                                                   [./-], [___])))
-  ])
-])
-m4_define([gl_HEADERS_EXPANSION], [
-  m4_divert_text([DEFAULTS], [gl_header_list=])
-  AC_CHECK_HEADERS([$gl_header_list])
-  m4_define([gl_HEADERS_EXPANSION], [])
-])
-
-# AC_CHECK_FUNCS_ONCE(FUNC1 FUNC2 ...) is a once-only variant of
-# AC_CHECK_FUNCS(FUNC1 FUNC2 ...).
-AC_DEFUN([AC_CHECK_FUNCS_ONCE], [
-  :
-  m4_foreach_w([gl_FUNC_NAME], [$1], [
-    AC_DEFUN([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]), [
-      m4_divert_text([INIT_PREPARE],
-        [gl_func_list="$gl_func_list gl_FUNC_NAME"])
-      gl_FUNCS_EXPANSION
-      AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_FUNC_NAME])),
-        [Define to 1 if you have the `]m4_defn([gl_FUNC_NAME])[' function.])
-    ])
-    AC_REQUIRE([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]))
-  ])
-])
-m4_define([gl_FUNCS_EXPANSION], [
-  m4_divert_text([DEFAULTS], [gl_func_list=])
-  AC_CHECK_FUNCS([$gl_func_list])
-  m4_define([gl_FUNCS_EXPANSION], [])
-])
-
-# AC_CHECK_DECLS_ONCE(DECL1 DECL2 ...) is a once-only variant of
-# AC_CHECK_DECLS(DECL1, DECL2, ...).
-AC_DEFUN([AC_CHECK_DECLS_ONCE], [
-  :
-  m4_foreach_w([gl_DECL_NAME], [$1], [
-    AC_DEFUN([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]), [
-      AC_CHECK_DECLS(m4_defn([gl_DECL_NAME]))
-    ])
-    AC_REQUIRE([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]))
-  ])
-])
diff --git a/gdb/gnulib/m4/stddef_h.m4 b/gdb/gnulib/m4/stddef_h.m4
deleted file mode 100644
index c401433..0000000
--- a/gdb/gnulib/m4/stddef_h.m4
+++ /dev/null
@@ -1,45 +0,0 @@
-dnl A placeholder for POSIX 2008 <stddef.h>, for platforms that have issues.
-# stddef_h.m4 serial 2
-dnl Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_STDDEF_H],
-[
-  AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
-  AC_REQUIRE([gt_TYPE_WCHAR_T])
-  if test $gt_cv_c_wchar_t = no; then
-    HAVE_WCHAR_T=0
-    STDDEF_H=stddef.h
-  fi
-  AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions],
-    [gl_cv_decl_null_works],
-    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stddef.h>
-      int test[2 * (sizeof NULL == sizeof (void *)) -1];
-]])],
-      [gl_cv_decl_null_works=yes],
-      [gl_cv_decl_null_works=no])])
-  if test $gl_cv_decl_null_works = no; then
-    REPLACE_NULL=1
-    STDDEF_H=stddef.h
-  fi
-  if test -n "$STDDEF_H"; then
-    gl_CHECK_NEXT_HEADERS([stddef.h])
-  fi
-])
-
-AC_DEFUN([gl_STDDEF_MODULE_INDICATOR],
-[
-  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
-  AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
-  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
-])
-
-AC_DEFUN([gl_STDDEF_H_DEFAULTS],
-[
-  dnl Assume proper GNU behavior unless another module says otherwise.
-  REPLACE_NULL=0;                AC_SUBST([REPLACE_NULL])
-  HAVE_WCHAR_T=1;                AC_SUBST([HAVE_WCHAR_T])
-  STDDEF_H='';                   AC_SUBST([STDDEF_H])
-])
diff --git a/gdb/gnulib/m4/stdint.m4 b/gdb/gnulib/m4/stdint.m4
deleted file mode 100644
index 9a588de..0000000
--- a/gdb/gnulib/m4/stdint.m4
+++ /dev/null
@@ -1,472 +0,0 @@
-# stdint.m4 serial 34
-dnl Copyright (C) 2001-2011 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Paul Eggert and Bruno Haible.
-dnl Test whether <stdint.h> is supported or must be substituted.
-
-AC_DEFUN([gl_STDINT_H],
-[
-  AC_PREREQ([2.59])dnl
-
-  dnl Check for long long int and unsigned long long int.
-  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
-  if test $ac_cv_type_long_long_int = yes; then
-    HAVE_LONG_LONG_INT=1
-  else
-    HAVE_LONG_LONG_INT=0
-  fi
-  AC_SUBST([HAVE_LONG_LONG_INT])
-  AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
-  if test $ac_cv_type_unsigned_long_long_int = yes; then
-    HAVE_UNSIGNED_LONG_LONG_INT=1
-  else
-    HAVE_UNSIGNED_LONG_LONG_INT=0
-  fi
-  AC_SUBST([HAVE_UNSIGNED_LONG_LONG_INT])
-
-  dnl Check for <inttypes.h>.
-  dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h.
-  if test $ac_cv_header_inttypes_h = yes; then
-    HAVE_INTTYPES_H=1
-  else
-    HAVE_INTTYPES_H=0
-  fi
-  AC_SUBST([HAVE_INTTYPES_H])
-
-  dnl Check for <sys/types.h>.
-  dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_sys_types_h.
-  if test $ac_cv_header_sys_types_h = yes; then
-    HAVE_SYS_TYPES_H=1
-  else
-    HAVE_SYS_TYPES_H=0
-  fi
-  AC_SUBST([HAVE_SYS_TYPES_H])
-
-  gl_CHECK_NEXT_HEADERS([stdint.h])
-  if test $ac_cv_header_stdint_h = yes; then
-    HAVE_STDINT_H=1
-  else
-    HAVE_STDINT_H=0
-  fi
-  AC_SUBST([HAVE_STDINT_H])
-
-  dnl Now see whether we need a substitute <stdint.h>.
-  if test $ac_cv_header_stdint_h = yes; then
-    AC_CACHE_CHECK([whether stdint.h conforms to C99],
-      [gl_cv_header_working_stdint_h],
-      [gl_cv_header_working_stdint_h=no
-       AC_COMPILE_IFELSE([
-         AC_LANG_PROGRAM([[
-#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */
-#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */
-#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
-#include <stdint.h>
-/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>.  */
-#if !(defined WCHAR_MIN && defined WCHAR_MAX)
-#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>"
-#endif
-]
-gl_STDINT_INCLUDES
-[
-#ifdef INT8_MAX
-int8_t a1 = INT8_MAX;
-int8_t a1min = INT8_MIN;
-#endif
-#ifdef INT16_MAX
-int16_t a2 = INT16_MAX;
-int16_t a2min = INT16_MIN;
-#endif
-#ifdef INT32_MAX
-int32_t a3 = INT32_MAX;
-int32_t a3min = INT32_MIN;
-#endif
-#ifdef INT64_MAX
-int64_t a4 = INT64_MAX;
-int64_t a4min = INT64_MIN;
-#endif
-#ifdef UINT8_MAX
-uint8_t b1 = UINT8_MAX;
-#else
-typedef int b1[(unsigned char) -1 != 255 ? 1 : -1];
-#endif
-#ifdef UINT16_MAX
-uint16_t b2 = UINT16_MAX;
-#endif
-#ifdef UINT32_MAX
-uint32_t b3 = UINT32_MAX;
-#endif
-#ifdef UINT64_MAX
-uint64_t b4 = UINT64_MAX;
-#endif
-int_least8_t c1 = INT8_C (0x7f);
-int_least8_t c1max = INT_LEAST8_MAX;
-int_least8_t c1min = INT_LEAST8_MIN;
-int_least16_t c2 = INT16_C (0x7fff);
-int_least16_t c2max = INT_LEAST16_MAX;
-int_least16_t c2min = INT_LEAST16_MIN;
-int_least32_t c3 = INT32_C (0x7fffffff);
-int_least32_t c3max = INT_LEAST32_MAX;
-int_least32_t c3min = INT_LEAST32_MIN;
-int_least64_t c4 = INT64_C (0x7fffffffffffffff);
-int_least64_t c4max = INT_LEAST64_MAX;
-int_least64_t c4min = INT_LEAST64_MIN;
-uint_least8_t d1 = UINT8_C (0xff);
-uint_least8_t d1max = UINT_LEAST8_MAX;
-uint_least16_t d2 = UINT16_C (0xffff);
-uint_least16_t d2max = UINT_LEAST16_MAX;
-uint_least32_t d3 = UINT32_C (0xffffffff);
-uint_least32_t d3max = UINT_LEAST32_MAX;
-uint_least64_t d4 = UINT64_C (0xffffffffffffffff);
-uint_least64_t d4max = UINT_LEAST64_MAX;
-int_fast8_t e1 = INT_FAST8_MAX;
-int_fast8_t e1min = INT_FAST8_MIN;
-int_fast16_t e2 = INT_FAST16_MAX;
-int_fast16_t e2min = INT_FAST16_MIN;
-int_fast32_t e3 = INT_FAST32_MAX;
-int_fast32_t e3min = INT_FAST32_MIN;
-int_fast64_t e4 = INT_FAST64_MAX;
-int_fast64_t e4min = INT_FAST64_MIN;
-uint_fast8_t f1 = UINT_FAST8_MAX;
-uint_fast16_t f2 = UINT_FAST16_MAX;
-uint_fast32_t f3 = UINT_FAST32_MAX;
-uint_fast64_t f4 = UINT_FAST64_MAX;
-#ifdef INTPTR_MAX
-intptr_t g = INTPTR_MAX;
-intptr_t gmin = INTPTR_MIN;
-#endif
-#ifdef UINTPTR_MAX
-uintptr_t h = UINTPTR_MAX;
-#endif
-intmax_t i = INTMAX_MAX;
-uintmax_t j = UINTMAX_MAX;
-
-#include <limits.h> /* for CHAR_BIT */
-#define TYPE_MINIMUM(t) \
-  ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
-#define TYPE_MAXIMUM(t) \
-  ((t) ((t) 0 < (t) -1 ? (t) -1 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
-struct s {
-  int check_PTRDIFF:
-      PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
-      && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
-      ? 1 : -1;
-  /* Detect bug in FreeBSD 6.0 / ia64.  */
-  int check_SIG_ATOMIC:
-      SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
-      && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
-      ? 1 : -1;
-  int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1;
-  int check_WCHAR:
-      WCHAR_MIN == TYPE_MINIMUM (wchar_t)
-      && WCHAR_MAX == TYPE_MAXIMUM (wchar_t)
-      ? 1 : -1;
-  /* Detect bug in mingw.  */
-  int check_WINT:
-      WINT_MIN == TYPE_MINIMUM (wint_t)
-      && WINT_MAX == TYPE_MAXIMUM (wint_t)
-      ? 1 : -1;
-
-  /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others.  */
-  int check_UINT8_C:
-        (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1;
-  int check_UINT16_C:
-        (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1;
-
-  /* Detect bugs in OpenBSD 3.9 stdint.h.  */
-#ifdef UINT8_MAX
-  int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1;
-#endif
-#ifdef UINT16_MAX
-  int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1;
-#endif
-#ifdef UINT32_MAX
-  int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1;
-#endif
-#ifdef UINT64_MAX
-  int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1;
-#endif
-  int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1;
-  int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1;
-  int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1;
-  int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1;
-  int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1;
-  int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1;
-  int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1;
-  int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1;
-  int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1;
-  int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1;
-  int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1;
-};
-         ]])],
-         [dnl Determine whether the various *_MIN, *_MAX macros are usable
-          dnl in preprocessor expression. We could do it by compiling a test
-          dnl program for each of these macros. It is faster to run a program
-          dnl that inspects the macro expansion.
-          dnl This detects a bug on HP-UX 11.23/ia64.
-          AC_RUN_IFELSE([
-            AC_LANG_PROGRAM([[
-#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */
-#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */
-#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
-#include <stdint.h>
-]
-gl_STDINT_INCLUDES
-[
-#include <stdio.h>
-#include <string.h>
-#define MVAL(macro) MVAL1(macro)
-#define MVAL1(expression) #expression
-static const char *macro_values[] =
-  {
-#ifdef INT8_MAX
-    MVAL (INT8_MAX),
-#endif
-#ifdef INT16_MAX
-    MVAL (INT16_MAX),
-#endif
-#ifdef INT32_MAX
-    MVAL (INT32_MAX),
-#endif
-#ifdef INT64_MAX
-    MVAL (INT64_MAX),
-#endif
-#ifdef UINT8_MAX
-    MVAL (UINT8_MAX),
-#endif
-#ifdef UINT16_MAX
-    MVAL (UINT16_MAX),
-#endif
-#ifdef UINT32_MAX
-    MVAL (UINT32_MAX),
-#endif
-#ifdef UINT64_MAX
-    MVAL (UINT64_MAX),
-#endif
-    NULL
-  };
-]], [[
-  const char **mv;
-  for (mv = macro_values; *mv != NULL; mv++)
-    {
-      const char *value = *mv;
-      /* Test whether it looks like a cast expression.  */
-      if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0
-          || strncmp (value, "((unsigned short)"/*)*/, 17) == 0
-          || strncmp (value, "((unsigned char)"/*)*/, 16) == 0
-          || strncmp (value, "((int)"/*)*/, 6) == 0
-          || strncmp (value, "((signed short)"/*)*/, 15) == 0
-          || strncmp (value, "((signed char)"/*)*/, 14) == 0)
-        return 1;
-    }
-  return 0;
-]])],
-              [gl_cv_header_working_stdint_h=yes],
-              [],
-              [dnl When cross-compiling, assume it works.
-               gl_cv_header_working_stdint_h=yes
-              ])
-         ])
-      ])
-  fi
-  if test "$gl_cv_header_working_stdint_h" = yes; then
-    STDINT_H=
-  else
-    dnl Check for <sys/inttypes.h>, and for
-    dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5).
-    AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h])
-    if test $ac_cv_header_sys_inttypes_h = yes; then
-      HAVE_SYS_INTTYPES_H=1
-    else
-      HAVE_SYS_INTTYPES_H=0
-    fi
-    AC_SUBST([HAVE_SYS_INTTYPES_H])
-    if test $ac_cv_header_sys_bitypes_h = yes; then
-      HAVE_SYS_BITYPES_H=1
-    else
-      HAVE_SYS_BITYPES_H=0
-    fi
-    AC_SUBST([HAVE_SYS_BITYPES_H])
-
-    dnl Check for <wchar.h> (missing in Linux uClibc when built without wide
-    dnl character support).
-    AC_CHECK_HEADERS_ONCE([wchar.h])
-
-    gl_STDINT_TYPE_PROPERTIES
-    STDINT_H=stdint.h
-  fi
-  AC_SUBST([STDINT_H])
-])
-
-dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES)
-dnl Determine the size of each of the given types in bits.
-AC_DEFUN([gl_STDINT_BITSIZEOF],
-[
-  dnl Use a shell loop, to avoid bloating configure, and
-  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
-  dnl   config.h.in,
-  dnl - extra AC_SUBST calls, so that the right substitutions are made.
-  m4_foreach_w([gltype], [$1],
-    [AH_TEMPLATE([BITSIZEOF_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]),
-       [Define to the number of bits in type ']gltype['.])])
-  for gltype in $1 ; do
-    AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}],
-      [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT],
-         [$2
-#include <limits.h>], [result=unknown])
-       eval gl_cv_bitsizeof_${gltype}=\$result
-      ])
-    eval result=\$gl_cv_bitsizeof_${gltype}
-    if test $result = unknown; then
-      dnl Use a nonempty default, because some compilers, such as IRIX 5 cc,
-      dnl do a syntax check even on unused #if conditions and give an error
-      dnl on valid C code like this:
-      dnl   #if 0
-      dnl   # if  > 32
-      dnl   # endif
-      dnl   #endif
-      result=0
-    fi
-    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result])
-    eval BITSIZEOF_${GLTYPE}=\$result
-  done
-  m4_foreach_w([gltype], [$1],
-    [AC_SUBST([BITSIZEOF_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))])
-])
-
-dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES)
-dnl Determine the signedness of each of the given types.
-dnl Define HAVE_SIGNED_TYPE if type is signed.
-AC_DEFUN([gl_CHECK_TYPES_SIGNED],
-[
-  dnl Use a shell loop, to avoid bloating configure, and
-  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
-  dnl   config.h.in,
-  dnl - extra AC_SUBST calls, so that the right substitutions are made.
-  m4_foreach_w([gltype], [$1],
-    [AH_TEMPLATE([HAVE_SIGNED_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]),
-       [Define to 1 if ']gltype[' is a signed integer type.])])
-  for gltype in $1 ; do
-    AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed],
-      [AC_COMPILE_IFELSE(
-         [AC_LANG_PROGRAM([$2[
-            int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])],
-         result=yes, result=no)
-       eval gl_cv_type_${gltype}_signed=\$result
-      ])
-    eval result=\$gl_cv_type_${gltype}_signed
-    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    if test "$result" = yes; then
-      AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1])
-      eval HAVE_SIGNED_${GLTYPE}=1
-    else
-      eval HAVE_SIGNED_${GLTYPE}=0
-    fi
-  done
-  m4_foreach_w([gltype], [$1],
-    [AC_SUBST([HAVE_SIGNED_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))])
-])
-
-dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES)
-dnl Determine the suffix to use for integer constants of the given types.
-dnl Define t_SUFFIX for each such type.
-AC_DEFUN([gl_INTEGER_TYPE_SUFFIX],
-[
-  dnl Use a shell loop, to avoid bloating configure, and
-  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
-  dnl   config.h.in,
-  dnl - extra AC_SUBST calls, so that the right substitutions are made.
-  m4_foreach_w([gltype], [$1],
-    [AH_TEMPLATE(translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX],
-       [Define to l, ll, u, ul, ull, etc., as suitable for
-        constants of type ']gltype['.])])
-  for gltype in $1 ; do
-    AC_CACHE_CHECK([for $gltype integer literal suffix],
-      [gl_cv_type_${gltype}_suffix],
-      [eval gl_cv_type_${gltype}_suffix=no
-       eval result=\$gl_cv_type_${gltype}_signed
-       if test "$result" = yes; then
-         glsufu=
-       else
-         glsufu=u
-       fi
-       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
-         case $glsuf in
-           '')  gltype1='int';;
-           l)   gltype1='long int';;
-           ll)  gltype1='long long int';;
-           i64) gltype1='__int64';;
-           u)   gltype1='unsigned int';;
-           ul)  gltype1='unsigned long int';;
-           ull) gltype1='unsigned long long int';;
-           ui64)gltype1='unsigned __int64';;
-         esac
-         AC_COMPILE_IFELSE(
-           [AC_LANG_PROGRAM([$2[
-              extern $gltype foo;
-              extern $gltype1 foo;]])],
-           [eval gl_cv_type_${gltype}_suffix=\$glsuf])
-         eval result=\$gl_cv_type_${gltype}_suffix
-         test "$result" != no && break
-       done])
-    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    eval result=\$gl_cv_type_${gltype}_suffix
-    test "$result" = no && result=
-    eval ${GLTYPE}_SUFFIX=\$result
-    AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result])
-  done
-  m4_foreach_w([gltype], [$1],
-    [AC_SUBST(translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])])
-])
-
-dnl gl_STDINT_INCLUDES
-AC_DEFUN([gl_STDINT_INCLUDES],
-[[
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-]])
-
-dnl gl_STDINT_TYPE_PROPERTIES
-dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t
-dnl of interest to stdint.in.h.
-AC_DEFUN([gl_STDINT_TYPE_PROPERTIES],
-[
-  AC_REQUIRE([gl_MULTIARCH])
-  if test $APPLE_UNIVERSAL_BUILD = 0; then
-    gl_STDINT_BITSIZEOF([ptrdiff_t size_t],
-      [gl_STDINT_INCLUDES])
-  fi
-  gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t],
-    [gl_STDINT_INCLUDES])
-  gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t],
-    [gl_STDINT_INCLUDES])
-  gl_cv_type_ptrdiff_t_signed=yes
-  gl_cv_type_size_t_signed=no
-  if test $APPLE_UNIVERSAL_BUILD = 0; then
-    gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t],
-      [gl_STDINT_INCLUDES])
-  fi
-  gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t],
-    [gl_STDINT_INCLUDES])
-])
-
-dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
-dnl Remove this when we can assume autoconf >= 2.61.
-m4_ifdef([AC_COMPUTE_INT], [], [
-  AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
-])
-
-# Hey Emacs!
-# Local Variables:
-# indent-tabs-mode: nil
-# End:
diff --git a/gdb/gnulib/m4/string_h.m4 b/gdb/gnulib/m4/string_h.m4
deleted file mode 100644
index 75310fb..0000000
--- a/gdb/gnulib/m4/string_h.m4
+++ /dev/null
@@ -1,112 +0,0 @@
-# Configure a GNU-like replacement for <string.h>.
-
-# Copyright (C) 2007-2011 Free Software Foundation, Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 17
-
-# Written by Paul Eggert.
-
-AC_DEFUN([gl_HEADER_STRING_H],
-[
-  dnl Use AC_REQUIRE here, so that the default behavior below is expanded
-  dnl once only, before all statements that occur in other macros.
-  AC_REQUIRE([gl_HEADER_STRING_H_BODY])
-])
-
-AC_DEFUN([gl_HEADER_STRING_H_BODY],
-[
-  AC_REQUIRE([AC_C_RESTRICT])
-  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
-  gl_CHECK_NEXT_HEADERS([string.h])
-
-  dnl Check for declarations of anything we want to poison if the
-  dnl corresponding gnulib module is not in use, and which is not
-  dnl guaranteed by C89.
-  gl_WARN_ON_USE_PREPARE([[#include <string.h>
-    ]],
-    [memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup
-     strncat strndup strnlen strpbrk strsep strcasestr strtok_r strsignal
-     strverscmp])
-])
-
-AC_DEFUN([gl_STRING_MODULE_INDICATOR],
-[
-  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
-  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
-  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
-  dnl Define it also as a C macro, for the benefit of the unit tests.
-  gl_MODULE_INDICATOR_FOR_TESTS([$1])
-])
-
-AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
-[
-  GNULIB_MEMCHR=0;      AC_SUBST([GNULIB_MEMCHR])
-  GNULIB_MEMMEM=0;      AC_SUBST([GNULIB_MEMMEM])
-  GNULIB_MEMPCPY=0;     AC_SUBST([GNULIB_MEMPCPY])
-  GNULIB_MEMRCHR=0;     AC_SUBST([GNULIB_MEMRCHR])
-  GNULIB_RAWMEMCHR=0;   AC_SUBST([GNULIB_RAWMEMCHR])
-  GNULIB_STPCPY=0;      AC_SUBST([GNULIB_STPCPY])
-  GNULIB_STPNCPY=0;     AC_SUBST([GNULIB_STPNCPY])
-  GNULIB_STRCHRNUL=0;   AC_SUBST([GNULIB_STRCHRNUL])
-  GNULIB_STRDUP=0;      AC_SUBST([GNULIB_STRDUP])
-  GNULIB_STRNCAT=0;     AC_SUBST([GNULIB_STRNCAT])
-  GNULIB_STRNDUP=0;     AC_SUBST([GNULIB_STRNDUP])
-  GNULIB_STRNLEN=0;     AC_SUBST([GNULIB_STRNLEN])
-  GNULIB_STRPBRK=0;     AC_SUBST([GNULIB_STRPBRK])
-  GNULIB_STRSEP=0;      AC_SUBST([GNULIB_STRSEP])
-  GNULIB_STRSTR=0;      AC_SUBST([GNULIB_STRSTR])
-  GNULIB_STRCASESTR=0;  AC_SUBST([GNULIB_STRCASESTR])
-  GNULIB_STRTOK_R=0;    AC_SUBST([GNULIB_STRTOK_R])
-  GNULIB_MBSLEN=0;      AC_SUBST([GNULIB_MBSLEN])
-  GNULIB_MBSNLEN=0;     AC_SUBST([GNULIB_MBSNLEN])
-  GNULIB_MBSCHR=0;      AC_SUBST([GNULIB_MBSCHR])
-  GNULIB_MBSRCHR=0;     AC_SUBST([GNULIB_MBSRCHR])
-  GNULIB_MBSSTR=0;      AC_SUBST([GNULIB_MBSSTR])
-  GNULIB_MBSCASECMP=0;  AC_SUBST([GNULIB_MBSCASECMP])
-  GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP])
-  GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP])
-  GNULIB_MBSCASESTR=0;  AC_SUBST([GNULIB_MBSCASESTR])
-  GNULIB_MBSCSPN=0;     AC_SUBST([GNULIB_MBSCSPN])
-  GNULIB_MBSPBRK=0;     AC_SUBST([GNULIB_MBSPBRK])
-  GNULIB_MBSSPN=0;      AC_SUBST([GNULIB_MBSSPN])
-  GNULIB_MBSSEP=0;      AC_SUBST([GNULIB_MBSSEP])
-  GNULIB_MBSTOK_R=0;    AC_SUBST([GNULIB_MBSTOK_R])
-  GNULIB_STRERROR=0;    AC_SUBST([GNULIB_STRERROR])
-  GNULIB_STRSIGNAL=0;   AC_SUBST([GNULIB_STRSIGNAL])
-  GNULIB_STRVERSCMP=0;  AC_SUBST([GNULIB_STRVERSCMP])
-  HAVE_MBSLEN=0;        AC_SUBST([HAVE_MBSLEN])
-  dnl Assume proper GNU behavior unless another module says otherwise.
-  HAVE_MEMCHR=1;                AC_SUBST([HAVE_MEMCHR])
-  HAVE_DECL_MEMMEM=1;           AC_SUBST([HAVE_DECL_MEMMEM])
-  HAVE_MEMPCPY=1;               AC_SUBST([HAVE_MEMPCPY])
-  HAVE_DECL_MEMRCHR=1;          AC_SUBST([HAVE_DECL_MEMRCHR])
-  HAVE_RAWMEMCHR=1;             AC_SUBST([HAVE_RAWMEMCHR])
-  HAVE_STPCPY=1;                AC_SUBST([HAVE_STPCPY])
-  HAVE_STPNCPY=1;               AC_SUBST([HAVE_STPNCPY])
-  HAVE_STRCHRNUL=1;             AC_SUBST([HAVE_STRCHRNUL])
-  HAVE_DECL_STRDUP=1;           AC_SUBST([HAVE_DECL_STRDUP])
-  HAVE_DECL_STRNDUP=1;          AC_SUBST([HAVE_DECL_STRNDUP])
-  HAVE_DECL_STRNLEN=1;          AC_SUBST([HAVE_DECL_STRNLEN])
-  HAVE_STRPBRK=1;               AC_SUBST([HAVE_STRPBRK])
-  HAVE_STRSEP=1;                AC_SUBST([HAVE_STRSEP])
-  HAVE_STRCASESTR=1;            AC_SUBST([HAVE_STRCASESTR])
-  HAVE_DECL_STRTOK_R=1;         AC_SUBST([HAVE_DECL_STRTOK_R])
-  HAVE_DECL_STRSIGNAL=1;        AC_SUBST([HAVE_DECL_STRSIGNAL])
-  HAVE_STRVERSCMP=1;            AC_SUBST([HAVE_STRVERSCMP])
-  REPLACE_MEMCHR=0;             AC_SUBST([REPLACE_MEMCHR])
-  REPLACE_MEMMEM=0;             AC_SUBST([REPLACE_MEMMEM])
-  REPLACE_STPNCPY=0;            AC_SUBST([REPLACE_STPNCPY])
-  REPLACE_STRDUP=0;             AC_SUBST([REPLACE_STRDUP])
-  REPLACE_STRSTR=0;             AC_SUBST([REPLACE_STRSTR])
-  REPLACE_STRCASESTR=0;         AC_SUBST([REPLACE_STRCASESTR])
-  REPLACE_STRERROR=0;           AC_SUBST([REPLACE_STRERROR])
-  REPLACE_STRNCAT=0;            AC_SUBST([REPLACE_STRNCAT])
-  REPLACE_STRNDUP=0;            AC_SUBST([REPLACE_STRNDUP])
-  REPLACE_STRNLEN=0;            AC_SUBST([REPLACE_STRNLEN])
-  REPLACE_STRSIGNAL=0;          AC_SUBST([REPLACE_STRSIGNAL])
-  REPLACE_STRTOK_R=0;           AC_SUBST([REPLACE_STRTOK_R])
-  UNDEFINE_STRTOK_R=0;          AC_SUBST([UNDEFINE_STRTOK_R])
-])
diff --git a/gdb/gnulib/m4/warn-on-use.m4 b/gdb/gnulib/m4/warn-on-use.m4
deleted file mode 100644
index 6d59996..0000000
--- a/gdb/gnulib/m4/warn-on-use.m4
+++ /dev/null
@@ -1,45 +0,0 @@
-# warn-on-use.m4 serial 2
-dnl Copyright (C) 2010, 2011 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-# gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES)
-# ---------------------------------------
-# For each whitespace-separated element in the list of NAMES, define
-# HAVE_RAW_DECL_name if the function has a declaration among INCLUDES
-# even after being undefined as a macro.
-#
-# See warn-on-use.h for some hints on how to poison function names, as
-# well as ideas on poisoning global variables and macros.  NAMES may
-# include global variables, but remember that only functions work with
-# _GL_WARN_ON_USE.  Typically, INCLUDES only needs to list a single
-# header, but if the replacement header pulls in other headers because
-# some systems declare functions in the wrong header, then INCLUDES
-# should do likewise.
-#
-# If you assume C89, then it is generally safe to assume declarations
-# for functions declared in that standard (such as gets) without
-# needing gl_WARN_ON_USE_PREPARE.
-AC_DEFUN([gl_WARN_ON_USE_PREPARE],
-[
-  m4_foreach_w([gl_decl], [$2],
-    [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])),
-      [Define to 1 if ]m4_defn([gl_decl])[ is declared even after
-       undefining macros.])])dnl
-  for gl_func in m4_flatten([$2]); do
-    AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl
-    AC_CACHE_CHECK([whether $gl_func is declared without a macro],
-      gl_Symbol,
-      [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1],
-[@%:@undef $gl_func
-  (void) $gl_func;])],
-        [AS_VAR_SET(gl_Symbol, [yes])], [AS_VAR_SET(gl_Symbol, [no])])])
-     AS_VAR_IF(gl_Symbol, [yes],
-       [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1])
-       dnl shortcut - if the raw declaration exists, then set a cache
-       dnl variable to allow skipping any later AC_CHECK_DECL efforts
-       eval ac_cv_have_decl_$gl_func=yes])
-    AS_VAR_POPDEF([gl_Symbol])dnl
-  done
-])
diff --git a/gdb/gnulib/m4/wchar_h.m4 b/gdb/gnulib/m4/wchar_h.m4
deleted file mode 100644
index a743445..0000000
--- a/gdb/gnulib/m4/wchar_h.m4
+++ /dev/null
@@ -1,152 +0,0 @@
-dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues.
-
-dnl Copyright (C) 2007-2011 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl Written by Eric Blake.
-
-# wchar_h.m4 serial 33
-
-AC_DEFUN([gl_WCHAR_H],
-[
-  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
-  AC_REQUIRE([gl_WCHAR_H_INLINE_OK])
-  dnl Prepare for creating substitute <wchar.h>.
-  dnl Check for <wchar.h> (missing in Linux uClibc when built without wide
-  dnl character support).
-  dnl <wchar.h> is always overridden, because of GNULIB_POSIXCHECK.
-  AC_CHECK_HEADERS_ONCE([wchar.h])
-  gl_CHECK_NEXT_HEADERS([wchar.h])
-  if test $ac_cv_header_wchar_h = yes; then
-    HAVE_WCHAR_H=1
-  else
-    HAVE_WCHAR_H=0
-  fi
-  AC_SUBST([HAVE_WCHAR_H])
-
-  AC_REQUIRE([gt_TYPE_WINT_T])
-  if test $gt_cv_c_wint_t = yes; then
-    HAVE_WINT_T=1
-  else
-    HAVE_WINT_T=0
-  fi
-  AC_SUBST([HAVE_WINT_T])
-
-  dnl Check for declarations of anything we want to poison if the
-  dnl corresponding gnulib module is not in use.
-  gl_WARN_ON_USE_PREPARE([[
-/* Some systems require additional headers.  */
-#ifndef __GLIBC__
-# include <stddef.h>
-# include <stdio.h>
-# include <time.h>
-#endif
-#include <wchar.h>
-    ]], [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb
-    wcsrtombs wcsnrtombs wcwidth])
-])
-
-dnl Check whether <wchar.h> is usable at all.
-AC_DEFUN([gl_WCHAR_H_INLINE_OK],
-[
-  dnl Test whether <wchar.h> suffers due to the transition from '__inline' to
-  dnl 'gnu_inline'. See <http://sourceware.org/bugzilla/show_bug.cgi?id=4022>
-  dnl and <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. In summary,
-  dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and
-  dnl the option -std=c99 or -std=gnu99, leads to a broken <wchar.h>.
-  AC_CACHE_CHECK([whether <wchar.h> uses 'inline' correctly],
-    [gl_cv_header_wchar_h_correct_inline],
-    [gl_cv_header_wchar_h_correct_inline=yes
-     AC_LANG_CONFTEST([
-       AC_LANG_SOURCE([[#define wcstod renamed_wcstod
-#include <wchar.h>
-extern int zero (void);
-int main () { return zero(); }
-]])])
-     if AC_TRY_EVAL([ac_compile]); then
-       mv conftest.$ac_objext conftest1.$ac_objext
-       AC_LANG_CONFTEST([
-         AC_LANG_SOURCE([[#define wcstod renamed_wcstod
-#include <wchar.h>
-int zero (void) { return 0; }
-]])])
-       if AC_TRY_EVAL([ac_compile]); then
-         mv conftest.$ac_objext conftest2.$ac_objext
-         if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then
-           :
-         else
-           gl_cv_header_wchar_h_correct_inline=no
-         fi
-       fi
-     fi
-     rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext
-    ])
-  if test $gl_cv_header_wchar_h_correct_inline = no; then
-    AC_MSG_ERROR([<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS).
-This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in
-C99 mode. You have four options:
-  - Add the flag -fgnu89-inline to CC and reconfigure, or
-  - Fix your include files, using parts of
-    <http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or
-  - Use a gcc version older than 4.3, or
-  - Don't use the flags -std=c99 or -std=gnu99.
-Configuration aborted.])
-  fi
-])
-
-dnl Unconditionally enables the replacement of <wchar.h>.
-AC_DEFUN([gl_REPLACE_WCHAR_H],
-[
-  dnl This is a no-op, because <wchar.h> is always overridden.
-  :
-])
-
-AC_DEFUN([gl_WCHAR_MODULE_INDICATOR],
-[
-  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
-  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
-  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
-  dnl Define it also as a C macro, for the benefit of the unit tests.
-  gl_MODULE_INDICATOR_FOR_TESTS([$1])
-])
-
-AC_DEFUN([gl_WCHAR_H_DEFAULTS],
-[
-  GNULIB_BTOWC=0;      AC_SUBST([GNULIB_BTOWC])
-  GNULIB_WCTOB=0;      AC_SUBST([GNULIB_WCTOB])
-  GNULIB_MBSINIT=0;    AC_SUBST([GNULIB_MBSINIT])
-  GNULIB_MBRTOWC=0;    AC_SUBST([GNULIB_MBRTOWC])
-  GNULIB_MBRLEN=0;     AC_SUBST([GNULIB_MBRLEN])
-  GNULIB_MBSRTOWCS=0;  AC_SUBST([GNULIB_MBSRTOWCS])
-  GNULIB_MBSNRTOWCS=0; AC_SUBST([GNULIB_MBSNRTOWCS])
-  GNULIB_WCRTOMB=0;    AC_SUBST([GNULIB_WCRTOMB])
-  GNULIB_WCSRTOMBS=0;  AC_SUBST([GNULIB_WCSRTOMBS])
-  GNULIB_WCSNRTOMBS=0; AC_SUBST([GNULIB_WCSNRTOMBS])
-  GNULIB_WCWIDTH=0;    AC_SUBST([GNULIB_WCWIDTH])
-  dnl Assume proper GNU behavior unless another module says otherwise.
-  HAVE_BTOWC=1;         AC_SUBST([HAVE_BTOWC])
-  HAVE_MBSINIT=1;       AC_SUBST([HAVE_MBSINIT])
-  HAVE_MBRTOWC=1;       AC_SUBST([HAVE_MBRTOWC])
-  HAVE_MBRLEN=1;        AC_SUBST([HAVE_MBRLEN])
-  HAVE_MBSRTOWCS=1;     AC_SUBST([HAVE_MBSRTOWCS])
-  HAVE_MBSNRTOWCS=1;    AC_SUBST([HAVE_MBSNRTOWCS])
-  HAVE_WCRTOMB=1;       AC_SUBST([HAVE_WCRTOMB])
-  HAVE_WCSRTOMBS=1;     AC_SUBST([HAVE_WCSRTOMBS])
-  HAVE_WCSNRTOMBS=1;    AC_SUBST([HAVE_WCSNRTOMBS])
-  HAVE_DECL_WCTOB=1;    AC_SUBST([HAVE_DECL_WCTOB])
-  HAVE_DECL_WCWIDTH=1;  AC_SUBST([HAVE_DECL_WCWIDTH])
-  REPLACE_MBSTATE_T=0;  AC_SUBST([REPLACE_MBSTATE_T])
-  REPLACE_BTOWC=0;      AC_SUBST([REPLACE_BTOWC])
-  REPLACE_WCTOB=0;      AC_SUBST([REPLACE_WCTOB])
-  REPLACE_MBSINIT=0;    AC_SUBST([REPLACE_MBSINIT])
-  REPLACE_MBRTOWC=0;    AC_SUBST([REPLACE_MBRTOWC])
-  REPLACE_MBRLEN=0;     AC_SUBST([REPLACE_MBRLEN])
-  REPLACE_MBSRTOWCS=0;  AC_SUBST([REPLACE_MBSRTOWCS])
-  REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS])
-  REPLACE_WCRTOMB=0;    AC_SUBST([REPLACE_WCRTOMB])
-  REPLACE_WCSRTOMBS=0;  AC_SUBST([REPLACE_WCSRTOMBS])
-  REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS])
-  REPLACE_WCWIDTH=0;    AC_SUBST([REPLACE_WCWIDTH])
-])
diff --git a/gdb/gnulib/m4/wchar_t.m4 b/gdb/gnulib/m4/wchar_t.m4
deleted file mode 100644
index 1b572e3..0000000
--- a/gdb/gnulib/m4/wchar_t.m4
+++ /dev/null
@@ -1,20 +0,0 @@
-# wchar_t.m4 serial 3 (gettext-0.18)
-dnl Copyright (C) 2002-2003, 2008-2011 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-dnl Test whether <stddef.h> has the 'wchar_t' type.
-dnl Prerequisite: AC_PROG_CC
-
-AC_DEFUN([gt_TYPE_WCHAR_T],
-[
-  AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t],
-    [AC_TRY_COMPILE([#include <stddef.h>
-       wchar_t foo = (wchar_t)'\0';], ,
-       [gt_cv_c_wchar_t=yes], [gt_cv_c_wchar_t=no])])
-  if test $gt_cv_c_wchar_t = yes; then
-    AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.])
-  fi
-])
diff --git a/gdb/gnulib/m4/wint_t.m4 b/gdb/gnulib/m4/wint_t.m4
deleted file mode 100644
index a0236e8..0000000
--- a/gdb/gnulib/m4/wint_t.m4
+++ /dev/null
@@ -1,28 +0,0 @@
-# wint_t.m4 serial 4 (gettext-0.18)
-dnl Copyright (C) 2003, 2007-2011 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-dnl Test whether <wchar.h> has the 'wint_t' type.
-dnl Prerequisite: AC_PROG_CC
-
-AC_DEFUN([gt_TYPE_WINT_T],
-[
-  AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t],
-    [AC_TRY_COMPILE([
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
-   before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-       wint_t foo = (wchar_t)'\0';], ,
-       [gt_cv_c_wint_t=yes], [gt_cv_c_wint_t=no])])
-  if test $gt_cv_c_wint_t = yes; then
-    AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.])
-  fi
-])
diff --git a/gdb/gnulib/memchr.c b/gdb/gnulib/memchr.c
deleted file mode 100644
index 6d903b1..0000000
--- a/gdb/gnulib/memchr.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2011
-   Free Software Foundation, Inc.
-
-   Based on strlen implementation by Torbjorn Granlund (tege at sics.se),
-   with help from Dan Sahlin (dan at sics.se) and
-   commentary by Jim Blandy (jimb at ai.mit.edu);
-   adaptation to memchr suggested by Dick Karpinski (dick at cca.ucsf.edu),
-   and implemented by Roland McGrath (roland at ai.mit.edu).
-
-NOTE: The canonical source of this file is maintained with the GNU C Library.
-Bugs can be reported to bug-glibc at prep.ai.mit.edu.
-
-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 3 of the License, or 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, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef _LIBC
-# include <config.h>
-#endif
-
-#include <string.h>
-
-#include <stddef.h>
-
-#if defined _LIBC
-# include <memcopy.h>
-#else
-# define reg_char char
-#endif
-
-#include <limits.h>
-
-#if HAVE_BP_SYM_H || defined _LIBC
-# include <bp-sym.h>
-#else
-# define BP_SYM(sym) sym
-#endif
-
-#undef __memchr
-#ifdef _LIBC
-# undef memchr
-#endif
-
-#ifndef weak_alias
-# define __memchr memchr
-#endif
-
-/* Search no more than N bytes of S for C.  */
-void *
-__memchr (void const *s, int c_in, size_t n)
-{
-  /* On 32-bit hardware, choosing longword to be a 32-bit unsigned
-     long instead of a 64-bit uintmax_t tends to give better
-     performance.  On 64-bit hardware, unsigned long is generally 64
-     bits already.  Change this typedef to experiment with
-     performance.  */
-  typedef unsigned long int longword;
-
-  const unsigned char *char_ptr;
-  const longword *longword_ptr;
-  longword repeated_one;
-  longword repeated_c;
-  unsigned reg_char c;
-
-  c = (unsigned char) c_in;
-
-  /* Handle the first few bytes by reading one byte at a time.
-     Do this until CHAR_PTR is aligned on a longword boundary.  */
-  for (char_ptr = (const unsigned char *) s;
-       n > 0 && (size_t) char_ptr % sizeof (longword) != 0;
-       --n, ++char_ptr)
-    if (*char_ptr == c)
-      return (void *) char_ptr;
-
-  longword_ptr = (const longword *) char_ptr;
-
-  /* All these elucidatory comments refer to 4-byte longwords,
-     but the theory applies equally well to any size longwords.  */
-
-  /* Compute auxiliary longword values:
-     repeated_one is a value which has a 1 in every byte.
-     repeated_c has c in every byte.  */
-  repeated_one = 0x01010101;
-  repeated_c = c | (c << 8);
-  repeated_c |= repeated_c << 16;
-  if (0xffffffffU < (longword) -1)
-    {
-      repeated_one |= repeated_one << 31 << 1;
-      repeated_c |= repeated_c << 31 << 1;
-      if (8 < sizeof (longword))
-        {
-          size_t i;
-
-          for (i = 64; i < sizeof (longword) * 8; i *= 2)
-            {
-              repeated_one |= repeated_one << i;
-              repeated_c |= repeated_c << i;
-            }
-        }
-    }
-
-  /* Instead of the traditional loop which tests each byte, we will test a
-     longword at a time.  The tricky part is testing if *any of the four*
-     bytes in the longword in question are equal to c.  We first use an xor
-     with repeated_c.  This reduces the task to testing whether *any of the
-     four* bytes in longword1 is zero.
-
-     We compute tmp =
-       ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7).
-     That is, we perform the following operations:
-       1. Subtract repeated_one.
-       2. & ~longword1.
-       3. & a mask consisting of 0x80 in every byte.
-     Consider what happens in each byte:
-       - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff,
-         and step 3 transforms it into 0x80.  A carry can also be propagated
-         to more significant bytes.
-       - If a byte of longword1 is nonzero, let its lowest 1 bit be at
-         position k (0 <= k <= 7); so the lowest k bits are 0.  After step 1,
-         the byte ends in a single bit of value 0 and k bits of value 1.
-         After step 2, the result is just k bits of value 1: 2^k - 1.  After
-         step 3, the result is 0.  And no carry is produced.
-     So, if longword1 has only non-zero bytes, tmp is zero.
-     Whereas if longword1 has a zero byte, call j the position of the least
-     significant zero byte.  Then the result has a zero at positions 0, ...,
-     j-1 and a 0x80 at position j.  We cannot predict the result at the more
-     significant bytes (positions j+1..3), but it does not matter since we
-     already have a non-zero bit at position 8*j+7.
-
-     So, the test whether any byte in longword1 is zero is equivalent to
-     testing whether tmp is nonzero.  */
-
-  while (n >= sizeof (longword))
-    {
-      longword longword1 = *longword_ptr ^ repeated_c;
-
-      if ((((longword1 - repeated_one) & ~longword1)
-           & (repeated_one << 7)) != 0)
-        break;
-      longword_ptr++;
-      n -= sizeof (longword);
-    }
-
-  char_ptr = (const unsigned char *) longword_ptr;
-
-  /* At this point, we know that either n < sizeof (longword), or one of the
-     sizeof (longword) bytes starting at char_ptr is == c.  On little-endian
-     machines, we could determine the first such byte without any further
-     memory accesses, just by looking at the tmp result from the last loop
-     iteration.  But this does not work on big-endian machines.  Choose code
-     that works in both cases.  */
-
-  for (; n > 0; --n, ++char_ptr)
-    {
-      if (*char_ptr == c)
-        return (void *) char_ptr;
-    }
-
-  return NULL;
-}
-#ifdef weak_alias
-weak_alias (__memchr, BP_SYM (memchr))
-#endif
diff --git a/gdb/gnulib/memmem.c b/gdb/gnulib/memmem.c
deleted file mode 100644
index 47f66a2..0000000
--- a/gdb/gnulib/memmem.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* Copyright (C) 1991, 1992, 1993, 1994, 1996, 1997, 1998, 2000, 2004, 2007,
-   2008, 2009, 2010, 2011 Free Software Foundation, Inc.
-   This file is part of the GNU C 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 3, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/* This particular implementation was written by Eric Blake, 2008.  */
-
-#ifndef _LIBC
-# include <config.h>
-#endif
-
-/* Specification of memmem.  */
-#include <string.h>
-
-#ifndef _LIBC
-# define __builtin_expect(expr, val)   (expr)
-#endif
-
-#define RETURN_TYPE void *
-#define AVAILABLE(h, h_l, j, n_l) ((j) <= (h_l) - (n_l))
-#include "str-two-way.h"
-
-/* Return the first occurrence of NEEDLE in HAYSTACK.  Return HAYSTACK
-   if NEEDLE_LEN is 0, otherwise NULL if NEEDLE is not found in
-   HAYSTACK.  */
-void *
-memmem (const void *haystack_start, size_t haystack_len,
-        const void *needle_start, size_t needle_len)
-{
-  /* Abstract memory is considered to be an array of 'unsigned char' values,
-     not an array of 'char' values.  See ISO C 99 section 6.2.6.1.  */
-  const unsigned char *haystack = (const unsigned char *) haystack_start;
-  const unsigned char *needle = (const unsigned char *) needle_start;
-
-  if (needle_len == 0)
-    /* The first occurrence of the empty string is deemed to occur at
-       the beginning of the string.  */
-    return (void *) haystack;
-
-  /* Sanity check, otherwise the loop might search through the whole
-     memory.  */
-  if (__builtin_expect (haystack_len < needle_len, 0))
-    return NULL;
-
-  /* Use optimizations in memchr when possible, to reduce the search
-     size of haystack using a linear algorithm with a smaller
-     coefficient.  However, avoid memchr for long needles, since we
-     can often achieve sublinear performance.  */
-  if (needle_len < LONG_NEEDLE_THRESHOLD)
-    {
-      haystack = memchr (haystack, *needle, haystack_len);
-      if (!haystack || __builtin_expect (needle_len == 1, 0))
-        return (void *) haystack;
-      haystack_len -= haystack - (const unsigned char *) haystack_start;
-      if (haystack_len < needle_len)
-        return NULL;
-      return two_way_short_needle (haystack, haystack_len, needle, needle_len);
-    }
-  else
-    return two_way_long_needle (haystack, haystack_len, needle, needle_len);
-}
-
-#undef LONG_NEEDLE_THRESHOLD
diff --git a/gdb/gnulib/stddef.in.h b/gdb/gnulib/stddef.in.h
deleted file mode 100644
index 32922b3..0000000
--- a/gdb/gnulib/stddef.in.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues.
-
-   Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
-
-   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 3, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/* Written by Eric Blake.  */
-
-/*
- * POSIX 2008 <stddef.h> for platforms that have issues.
- * <http://www.opengroup.org/susv3xbd/stddef.h.html>
- */
-
-#if __GNUC__ >= 3
- at PRAGMA_SYSTEM_HEADER@
-#endif
-
-#if defined __need_wchar_t || defined __need_size_t  \
-  || defined __need_ptrdiff_t || defined __need_NULL \
-  || defined __need_wint_t
-/* Special invocation convention inside gcc header files.  In
-   particular, gcc provides a version of <stddef.h> that blindly
-   redefines NULL even when __need_wint_t was defined, even though
-   wint_t is not normally provided by <stddef.h>.  Hence, we must
-   remember if special invocation has ever been used to obtain wint_t,
-   in which case we need to clean up NULL yet again.  */
-
-# if !(defined _GL_STDDEF_H && defined _GL_STDDEF_WINT_T)
-#  ifdef __need_wint_t
-#   undef _GL_STDDEF_H
-#   define _GL_STDDEF_WINT_T
-#  endif
-#  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
-# endif
-
-#else
-/* Normal invocation convention.  */
-
-# ifndef _GL_STDDEF_H
-
-/* The include_next requires a split double-inclusion guard.  */
-
-#  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
-
-#  ifndef _GL_STDDEF_H
-#   define _GL_STDDEF_H
-
-/* On NetBSD 5.0, the definition of NULL lacks proper parentheses.  */
-#if @REPLACE_NULL@
-# undef NULL
-# ifdef __cplusplus
-   /* ISO C++ says that the macro NULL must expand to an integer constant
-      expression, hence '((void *) 0)' is not allowed in C++.  */
-#  if __GNUG__ >= 3
-    /* GNU C++ has a __null macro that behaves like an integer ('int' or
-       'long') but has the same size as a pointer.  Use that, to avoid
-       warnings.  */
-#   define NULL __null
-#  else
-#   define NULL 0L
-#  endif
-# else
-#  define NULL ((void *) 0)
-# endif
-#endif
-
-/* Some platforms lack wchar_t.  */
-#if !@HAVE_WCHAR_T@
-# define wchar_t int
-#endif
-
-#  endif /* _GL_STDDEF_H */
-# endif /* _GL_STDDEF_H */
-#endif /* __need_XXX */
diff --git a/gdb/gnulib/stdint.in.h b/gdb/gnulib/stdint.in.h
deleted file mode 100644
index 8a8fe3f..0000000
--- a/gdb/gnulib/stdint.in.h
+++ /dev/null
@@ -1,568 +0,0 @@
-/* Copyright (C) 2001-2002, 2004-2011 Free Software Foundation, Inc.
-   Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
-   This file is part of gnulib.
-
-   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 3, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/*
- * ISO C 99 <stdint.h> for platforms that lack it.
- * <http://www.opengroup.org/susv3xbd/stdint.h.html>
- */
-
-#ifndef _GL_STDINT_H
-
-#if __GNUC__ >= 3
- at PRAGMA_SYSTEM_HEADER@
-#endif
-
-/* When including a system file that in turn includes <inttypes.h>,
-   use the system <inttypes.h>, not our substitute.  This avoids
-   problems with (for example) VMS, whose <sys/bitypes.h> includes
-   <inttypes.h>.  */
-#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
-
-/* Get those types that are already defined in other system include
-   files, so that we can "#define int8_t signed char" below without
-   worrying about a later system include file containing a "typedef
-   signed char int8_t;" that will get messed up by our macro.  Our
-   macros should all be consistent with the system versions, except
-   for the "fast" types and macros, which we recommend against using
-   in public interfaces due to compiler differences.  */
-
-#if @HAVE_STDINT_H@
-# if defined __sgi && ! defined __c99
-   /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users
-      with "This header file is to be used only for c99 mode compilations"
-      diagnostics.  */
-#  define __STDINT_H__
-# endif
-  /* Other systems may have an incomplete or buggy <stdint.h>.
-     Include it before <inttypes.h>, since any "#include <stdint.h>"
-     in <inttypes.h> would reinclude us, skipping our contents because
-     _GL_STDINT_H is defined.
-     The include_next requires a split double-inclusion guard.  */
-# @INCLUDE_NEXT@ @NEXT_STDINT_H@
-#endif
-
-#if ! defined _GL_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H
-#define _GL_STDINT_H
-
-/* <sys/types.h> defines some of the stdint.h types as well, on glibc,
-   IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>).
-   AIX 5.2 <sys/types.h> isn't needed and causes troubles.
-   MacOS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but
-   relies on the system <stdint.h> definitions, so include
-   <sys/types.h> after @NEXT_STDINT_H at .  */
-#if @HAVE_SYS_TYPES_H@ && ! defined _AIX
-# include <sys/types.h>
-#endif
-
-/* Get LONG_MIN, LONG_MAX, ULONG_MAX.  */
-#include <limits.h>
-
-#if @HAVE_INTTYPES_H@
-  /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines
-     int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__.
-     <inttypes.h> also defines intptr_t and uintptr_t.  */
-# include <inttypes.h>
-#elif @HAVE_SYS_INTTYPES_H@
-  /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and
-     the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX.  */
-# include <sys/inttypes.h>
-#endif
-
-#if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__
-  /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines
-     int{8,16,32,64}_t and __BIT_TYPES_DEFINED__.  In libc5 >= 5.2.2 it is
-     included by <sys/types.h>.  */
-# include <sys/bitypes.h>
-#endif
-
-#undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
-
-/* Minimum and maximum values for a integer type under the usual assumption.
-   Return an unspecified value if BITS == 0, adding a check to pacify
-   picky compilers.  */
-
-#define _STDINT_MIN(signed, bits, zero) \
-  ((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero))
-
-#define _STDINT_MAX(signed, bits, zero) \
-  ((signed) \
-   ? ~ _STDINT_MIN (signed, bits, zero) \
-   : /* The expression for the unsigned case.  The subtraction of (signed) \
-        is a nop in the unsigned case and avoids "signed integer overflow" \
-        warnings in the signed case.  */ \
-     ((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1)
-
-/* 7.18.1.1. Exact-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits.  */
-
-#undef int8_t
-#undef uint8_t
-typedef signed char gl_int8_t;
-typedef unsigned char gl_uint8_t;
-#define int8_t gl_int8_t
-#define uint8_t gl_uint8_t
-
-#undef int16_t
-#undef uint16_t
-typedef short int gl_int16_t;
-typedef unsigned short int gl_uint16_t;
-#define int16_t gl_int16_t
-#define uint16_t gl_uint16_t
-
-#undef int32_t
-#undef uint32_t
-typedef int gl_int32_t;
-typedef unsigned int gl_uint32_t;
-#define int32_t gl_int32_t
-#define uint32_t gl_uint32_t
-
-/* Do not undefine int64_t if gnulib is not being used with 64-bit
-   types, since otherwise it breaks platforms like Tandem/NSK.  */
-#if LONG_MAX >> 31 >> 31 == 1
-# undef int64_t
-typedef long int gl_int64_t;
-# define int64_t gl_int64_t
-# define GL_INT64_T
-#elif defined _MSC_VER
-# undef int64_t
-typedef __int64 gl_int64_t;
-# define int64_t gl_int64_t
-# define GL_INT64_T
-#elif @HAVE_LONG_LONG_INT@
-# undef int64_t
-typedef long long int gl_int64_t;
-# define int64_t gl_int64_t
-# define GL_INT64_T
-#endif
-
-#if ULONG_MAX >> 31 >> 31 >> 1 == 1
-# undef uint64_t
-typedef unsigned long int gl_uint64_t;
-# define uint64_t gl_uint64_t
-# define GL_UINT64_T
-#elif defined _MSC_VER
-# undef uint64_t
-typedef unsigned __int64 gl_uint64_t;
-# define uint64_t gl_uint64_t
-# define GL_UINT64_T
-#elif @HAVE_UNSIGNED_LONG_LONG_INT@
-# undef uint64_t
-typedef unsigned long long int gl_uint64_t;
-# define uint64_t gl_uint64_t
-# define GL_UINT64_T
-#endif
-
-/* Avoid collision with Solaris 2.5.1 <pthread.h> etc.  */
-#define _UINT8_T
-#define _UINT32_T
-#define _UINT64_T
-
-
-/* 7.18.1.2. Minimum-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
-   are the same as the corresponding N_t types.  */
-
-#undef int_least8_t
-#undef uint_least8_t
-#undef int_least16_t
-#undef uint_least16_t
-#undef int_least32_t
-#undef uint_least32_t
-#undef int_least64_t
-#undef uint_least64_t
-#define int_least8_t int8_t
-#define uint_least8_t uint8_t
-#define int_least16_t int16_t
-#define uint_least16_t uint16_t
-#define int_least32_t int32_t
-#define uint_least32_t uint32_t
-#ifdef GL_INT64_T
-# define int_least64_t int64_t
-#endif
-#ifdef GL_UINT64_T
-# define uint_least64_t uint64_t
-#endif
-
-/* 7.18.1.3. Fastest minimum-width integer types */
-
-/* Note: Other <stdint.h> substitutes may define these types differently.
-   It is not recommended to use these types in public header files. */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
-   are taken from the same list of types.  Assume that 'long int'
-   is fast enough for all narrower integers.  */
-
-#undef int_fast8_t
-#undef uint_fast8_t
-#undef int_fast16_t
-#undef uint_fast16_t
-#undef int_fast32_t
-#undef uint_fast32_t
-#undef int_fast64_t
-#undef uint_fast64_t
-typedef long int gl_int_fast8_t;
-typedef unsigned long int gl_uint_fast8_t;
-typedef long int gl_int_fast16_t;
-typedef unsigned long int gl_uint_fast16_t;
-typedef long int gl_int_fast32_t;
-typedef unsigned long int gl_uint_fast32_t;
-#define int_fast8_t gl_int_fast8_t
-#define uint_fast8_t gl_uint_fast8_t
-#define int_fast16_t gl_int_fast16_t
-#define uint_fast16_t gl_uint_fast16_t
-#define int_fast32_t gl_int_fast32_t
-#define uint_fast32_t gl_uint_fast32_t
-#ifdef GL_INT64_T
-# define int_fast64_t int64_t
-#endif
-#ifdef GL_UINT64_T
-# define uint_fast64_t uint64_t
-#endif
-
-/* 7.18.1.4. Integer types capable of holding object pointers */
-
-#undef intptr_t
-#undef uintptr_t
-typedef long int gl_intptr_t;
-typedef unsigned long int gl_uintptr_t;
-#define intptr_t gl_intptr_t
-#define uintptr_t gl_uintptr_t
-
-/* 7.18.1.5. Greatest-width integer types */
-
-/* Note: These types are compiler dependent. It may be unwise to use them in
-   public header files. */
-
-#undef intmax_t
-#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
-typedef long long int gl_intmax_t;
-# define intmax_t gl_intmax_t
-#elif defined GL_INT64_T
-# define intmax_t int64_t
-#else
-typedef long int gl_intmax_t;
-# define intmax_t gl_intmax_t
-#endif
-
-#undef uintmax_t
-#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
-typedef unsigned long long int gl_uintmax_t;
-# define uintmax_t gl_uintmax_t
-#elif defined GL_UINT64_T
-# define uintmax_t uint64_t
-#else
-typedef unsigned long int gl_uintmax_t;
-# define uintmax_t gl_uintmax_t
-#endif
-
-/* Verify that intmax_t and uintmax_t have the same size.  Too much code
-   breaks if this is not the case.  If this check fails, the reason is likely
-   to be found in the autoconf macros.  */
-typedef int _verify_intmax_size[2 * (sizeof (intmax_t) == sizeof (uintmax_t)) - 1];
-
-/* 7.18.2. Limits of specified-width integer types */
-
-#if ! defined __cplusplus || defined __STDC_LIMIT_MACROS
-
-/* 7.18.2.1. Limits of exact-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits.  */
-
-#undef INT8_MIN
-#undef INT8_MAX
-#undef UINT8_MAX
-#define INT8_MIN  (~ INT8_MAX)
-#define INT8_MAX  127
-#define UINT8_MAX  255
-
-#undef INT16_MIN
-#undef INT16_MAX
-#undef UINT16_MAX
-#define INT16_MIN  (~ INT16_MAX)
-#define INT16_MAX  32767
-#define UINT16_MAX  65535
-
-#undef INT32_MIN
-#undef INT32_MAX
-#undef UINT32_MAX
-#define INT32_MIN  (~ INT32_MAX)
-#define INT32_MAX  2147483647
-#define UINT32_MAX  4294967295U
-
-#undef INT64_MIN
-#undef INT64_MAX
-#ifdef GL_INT64_T
-/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0
-   evaluates the latter incorrectly in preprocessor expressions.  */
-# define INT64_MIN  (- INTMAX_C (1) << 63)
-# define INT64_MAX  INTMAX_C (9223372036854775807)
-#endif
-
-#undef UINT64_MAX
-#ifdef GL_UINT64_T
-# define UINT64_MAX  UINTMAX_C (18446744073709551615)
-#endif
-
-/* 7.18.2.2. Limits of minimum-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
-   are the same as the corresponding N_t types.  */
-
-#undef INT_LEAST8_MIN
-#undef INT_LEAST8_MAX
-#undef UINT_LEAST8_MAX
-#define INT_LEAST8_MIN  INT8_MIN
-#define INT_LEAST8_MAX  INT8_MAX
-#define UINT_LEAST8_MAX  UINT8_MAX
-
-#undef INT_LEAST16_MIN
-#undef INT_LEAST16_MAX
-#undef UINT_LEAST16_MAX
-#define INT_LEAST16_MIN  INT16_MIN
-#define INT_LEAST16_MAX  INT16_MAX
-#define UINT_LEAST16_MAX  UINT16_MAX
-
-#undef INT_LEAST32_MIN
-#undef INT_LEAST32_MAX
-#undef UINT_LEAST32_MAX
-#define INT_LEAST32_MIN  INT32_MIN
-#define INT_LEAST32_MAX  INT32_MAX
-#define UINT_LEAST32_MAX  UINT32_MAX
-
-#undef INT_LEAST64_MIN
-#undef INT_LEAST64_MAX
-#ifdef GL_INT64_T
-# define INT_LEAST64_MIN  INT64_MIN
-# define INT_LEAST64_MAX  INT64_MAX
-#endif
-
-#undef UINT_LEAST64_MAX
-#ifdef GL_UINT64_T
-# define UINT_LEAST64_MAX  UINT64_MAX
-#endif
-
-/* 7.18.2.3. Limits of fastest minimum-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
-   are taken from the same list of types.  */
-
-#undef INT_FAST8_MIN
-#undef INT_FAST8_MAX
-#undef UINT_FAST8_MAX
-#define INT_FAST8_MIN  LONG_MIN
-#define INT_FAST8_MAX  LONG_MAX
-#define UINT_FAST8_MAX  ULONG_MAX
-
-#undef INT_FAST16_MIN
-#undef INT_FAST16_MAX
-#undef UINT_FAST16_MAX
-#define INT_FAST16_MIN  LONG_MIN
-#define INT_FAST16_MAX  LONG_MAX
-#define UINT_FAST16_MAX  ULONG_MAX
-
-#undef INT_FAST32_MIN
-#undef INT_FAST32_MAX
-#undef UINT_FAST32_MAX
-#define INT_FAST32_MIN  LONG_MIN
-#define INT_FAST32_MAX  LONG_MAX
-#define UINT_FAST32_MAX  ULONG_MAX
-
-#undef INT_FAST64_MIN
-#undef INT_FAST64_MAX
-#ifdef GL_INT64_T
-# define INT_FAST64_MIN  INT64_MIN
-# define INT_FAST64_MAX  INT64_MAX
-#endif
-
-#undef UINT_FAST64_MAX
-#ifdef GL_UINT64_T
-# define UINT_FAST64_MAX  UINT64_MAX
-#endif
-
-/* 7.18.2.4. Limits of integer types capable of holding object pointers */
-
-#undef INTPTR_MIN
-#undef INTPTR_MAX
-#undef UINTPTR_MAX
-#define INTPTR_MIN  LONG_MIN
-#define INTPTR_MAX  LONG_MAX
-#define UINTPTR_MAX  ULONG_MAX
-
-/* 7.18.2.5. Limits of greatest-width integer types */
-
-#undef INTMAX_MIN
-#undef INTMAX_MAX
-#ifdef INT64_MAX
-# define INTMAX_MIN  INT64_MIN
-# define INTMAX_MAX  INT64_MAX
-#else
-# define INTMAX_MIN  INT32_MIN
-# define INTMAX_MAX  INT32_MAX
-#endif
-
-#undef UINTMAX_MAX
-#ifdef UINT64_MAX
-# define UINTMAX_MAX  UINT64_MAX
-#else
-# define UINTMAX_MAX  UINT32_MAX
-#endif
-
-/* 7.18.3. Limits of other integer types */
-
-/* ptrdiff_t limits */
-#undef PTRDIFF_MIN
-#undef PTRDIFF_MAX
-#if @APPLE_UNIVERSAL_BUILD@
-# ifdef _LP64
-#  define PTRDIFF_MIN  _STDINT_MIN (1, 64, 0l)
-#  define PTRDIFF_MAX  _STDINT_MAX (1, 64, 0l)
-# else
-#  define PTRDIFF_MIN  _STDINT_MIN (1, 32, 0)
-#  define PTRDIFF_MAX  _STDINT_MAX (1, 32, 0)
-# endif
-#else
-# define PTRDIFF_MIN  \
-    _STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0 at PTRDIFF_T_SUFFIX@)
-# define PTRDIFF_MAX  \
-    _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0 at PTRDIFF_T_SUFFIX@)
-#endif
-
-/* sig_atomic_t limits */
-#undef SIG_ATOMIC_MIN
-#undef SIG_ATOMIC_MAX
-#define SIG_ATOMIC_MIN  \
-   _STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
-                0 at SIG_ATOMIC_T_SUFFIX@)
-#define SIG_ATOMIC_MAX  \
-   _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
-                0 at SIG_ATOMIC_T_SUFFIX@)
-
-
-/* size_t limit */
-#undef SIZE_MAX
-#if @APPLE_UNIVERSAL_BUILD@
-# ifdef _LP64
-#  define SIZE_MAX  _STDINT_MAX (0, 64, 0ul)
-# else
-#  define SIZE_MAX  _STDINT_MAX (0, 32, 0ul)
-# endif
-#else
-# define SIZE_MAX  _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0 at SIZE_T_SUFFIX@)
-#endif
-
-/* wchar_t limits */
-/* Get WCHAR_MIN, WCHAR_MAX.
-   This include is not on the top, above, because on OSF/1 4.0 we have a sequence of nested
-   includes <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes
-   <stdint.h> and assumes its types are already defined.  */
-#if ! (defined WCHAR_MIN && defined WCHAR_MAX)
-# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
-# include <wchar.h>
-# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
-#endif
-#undef WCHAR_MIN
-#undef WCHAR_MAX
-#define WCHAR_MIN  \
-   _STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0 at WCHAR_T_SUFFIX@)
-#define WCHAR_MAX  \
-   _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0 at WCHAR_T_SUFFIX@)
-
-/* wint_t limits */
-#undef WINT_MIN
-#undef WINT_MAX
-#define WINT_MIN  \
-   _STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0 at WINT_T_SUFFIX@)
-#define WINT_MAX  \
-   _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0 at WINT_T_SUFFIX@)
-
-#endif /* !defined __cplusplus || defined __STDC_LIMIT_MACROS */
-
-/* 7.18.4. Macros for integer constants */
-
-#if ! defined __cplusplus || defined __STDC_CONSTANT_MACROS
-
-/* 7.18.4.1. Macros for minimum-width integer constants */
-/* According to ISO C 99 Technical Corrigendum 1 */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits, and int is 32 bits.  */
-
-#undef INT8_C
-#undef UINT8_C
-#define INT8_C(x) x
-#define UINT8_C(x) x
-
-#undef INT16_C
-#undef UINT16_C
-#define INT16_C(x) x
-#define UINT16_C(x) x
-
-#undef INT32_C
-#undef UINT32_C
-#define INT32_C(x) x
-#define UINT32_C(x) x ## U
-
-#undef INT64_C
-#undef UINT64_C
-#if LONG_MAX >> 31 >> 31 == 1
-# define INT64_C(x) x##L
-#elif defined _MSC_VER
-# define INT64_C(x) x##i64
-#elif @HAVE_LONG_LONG_INT@
-# define INT64_C(x) x##LL
-#endif
-#if ULONG_MAX >> 31 >> 31 >> 1 == 1
-# define UINT64_C(x) x##UL
-#elif defined _MSC_VER
-# define UINT64_C(x) x##ui64
-#elif @HAVE_UNSIGNED_LONG_LONG_INT@
-# define UINT64_C(x) x##ULL
-#endif
-
-/* 7.18.4.2. Macros for greatest-width integer constants */
-
-#undef INTMAX_C
-#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
-# define INTMAX_C(x)   x##LL
-#elif defined GL_INT64_T
-# define INTMAX_C(x)   INT64_C(x)
-#else
-# define INTMAX_C(x)   x##L
-#endif
-
-#undef UINTMAX_C
-#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
-# define UINTMAX_C(x)  x##ULL
-#elif defined GL_UINT64_T
-# define UINTMAX_C(x)  UINT64_C(x)
-#else
-# define UINTMAX_C(x)  x##UL
-#endif
-
-#endif /* !defined __cplusplus || defined __STDC_CONSTANT_MACROS */
-
-#endif /* _GL_STDINT_H */
-#endif /* !defined _GL_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */
diff --git a/gdb/gnulib/str-two-way.h b/gdb/gnulib/str-two-way.h
deleted file mode 100644
index 7868eb8..0000000
--- a/gdb/gnulib/str-two-way.h
+++ /dev/null
@@ -1,429 +0,0 @@
-/* Byte-wise substring search, using the Two-Way algorithm.
-   Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Written by Eric Blake <ebb9 at byu.net>, 2008.
-
-   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 3, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/* Before including this file, you need to include <config.h> and
-   <string.h>, and define:
-     RESULT_TYPE             A macro that expands to the return type.
-     AVAILABLE(h, h_l, j, n_l)
-                             A macro that returns nonzero if there are
-                             at least N_L bytes left starting at H[J].
-                             H is 'unsigned char *', H_L, J, and N_L
-                             are 'size_t'; H_L is an lvalue.  For
-                             NUL-terminated searches, H_L can be
-                             modified each iteration to avoid having
-                             to compute the end of H up front.
-
-  For case-insensitivity, you may optionally define:
-     CMP_FUNC(p1, p2, l)     A macro that returns 0 iff the first L
-                             characters of P1 and P2 are equal.
-     CANON_ELEMENT(c)        A macro that canonicalizes an element right after
-                             it has been fetched from one of the two strings.
-                             The argument is an 'unsigned char'; the result
-                             must be an 'unsigned char' as well.
-
-  This file undefines the macros documented above, and defines
-  LONG_NEEDLE_THRESHOLD.
-*/
-
-#include <limits.h>
-#include <stdint.h>
-
-/* We use the Two-Way string matching algorithm, which guarantees
-   linear complexity with constant space.  Additionally, for long
-   needles, we also use a bad character shift table similar to the
-   Boyer-Moore algorithm to achieve improved (potentially sub-linear)
-   performance.
-
-   See http://www-igm.univ-mlv.fr/~lecroq/string/node26.html#SECTION00260
-   and http://en.wikipedia.org/wiki/Boyer-Moore_string_search_algorithm
-*/
-
-/* Point at which computing a bad-byte shift table is likely to be
-   worthwhile.  Small needles should not compute a table, since it
-   adds (1 << CHAR_BIT) + NEEDLE_LEN computations of preparation for a
-   speedup no greater than a factor of NEEDLE_LEN.  The larger the
-   needle, the better the potential performance gain.  On the other
-   hand, on non-POSIX systems with CHAR_BIT larger than eight, the
-   memory required for the table is prohibitive.  */
-#if CHAR_BIT < 10
-# define LONG_NEEDLE_THRESHOLD 32U
-#else
-# define LONG_NEEDLE_THRESHOLD SIZE_MAX
-#endif
-
-#ifndef MAX
-# define MAX(a, b) ((a < b) ? (b) : (a))
-#endif
-
-#ifndef CANON_ELEMENT
-# define CANON_ELEMENT(c) c
-#endif
-#ifndef CMP_FUNC
-# define CMP_FUNC memcmp
-#endif
-
-/* Perform a critical factorization of NEEDLE, of length NEEDLE_LEN.
-   Return the index of the first byte in the right half, and set
-   *PERIOD to the global period of the right half.
-
-   The global period of a string is the smallest index (possibly its
-   length) at which all remaining bytes in the string are repetitions
-   of the prefix (the last repetition may be a subset of the prefix).
-
-   When NEEDLE is factored into two halves, a local period is the
-   length of the smallest word that shares a suffix with the left half
-   and shares a prefix with the right half.  All factorizations of a
-   non-empty NEEDLE have a local period of at least 1 and no greater
-   than NEEDLE_LEN.
-
-   A critical factorization has the property that the local period
-   equals the global period.  All strings have at least one critical
-   factorization with the left half smaller than the global period.
-
-   Given an ordered alphabet, a critical factorization can be computed
-   in linear time, with 2 * NEEDLE_LEN comparisons, by computing the
-   larger of two ordered maximal suffixes.  The ordered maximal
-   suffixes are determined by lexicographic comparison of
-   periodicity.  */
-static size_t
-critical_factorization (const unsigned char *needle, size_t needle_len,
-                        size_t *period)
-{
-  /* Index of last byte of left half, or SIZE_MAX.  */
-  size_t max_suffix, max_suffix_rev;
-  size_t j; /* Index into NEEDLE for current candidate suffix.  */
-  size_t k; /* Offset into current period.  */
-  size_t p; /* Intermediate period.  */
-  unsigned char a, b; /* Current comparison bytes.  */
-
-  /* Invariants:
-     0 <= j < NEEDLE_LEN - 1
-     -1 <= max_suffix{,_rev} < j (treating SIZE_MAX as if it were signed)
-     min(max_suffix, max_suffix_rev) < global period of NEEDLE
-     1 <= p <= global period of NEEDLE
-     p == global period of the substring NEEDLE[max_suffix{,_rev}+1...j]
-     1 <= k <= p
-  */
-
-  /* Perform lexicographic search.  */
-  max_suffix = SIZE_MAX;
-  j = 0;
-  k = p = 1;
-  while (j + k < needle_len)
-    {
-      a = CANON_ELEMENT (needle[j + k]);
-      b = CANON_ELEMENT (needle[max_suffix + k]);
-      if (a < b)
-        {
-          /* Suffix is smaller, period is entire prefix so far.  */
-          j += k;
-          k = 1;
-          p = j - max_suffix;
-        }
-      else if (a == b)
-        {
-          /* Advance through repetition of the current period.  */
-          if (k != p)
-            ++k;
-          else
-            {
-              j += p;
-              k = 1;
-            }
-        }
-      else /* b < a */
-        {
-          /* Suffix is larger, start over from current location.  */
-          max_suffix = j++;
-          k = p = 1;
-        }
-    }
-  *period = p;
-
-  /* Perform reverse lexicographic search.  */
-  max_suffix_rev = SIZE_MAX;
-  j = 0;
-  k = p = 1;
-  while (j + k < needle_len)
-    {
-      a = CANON_ELEMENT (needle[j + k]);
-      b = CANON_ELEMENT (needle[max_suffix_rev + k]);
-      if (b < a)
-        {
-          /* Suffix is smaller, period is entire prefix so far.  */
-          j += k;
-          k = 1;
-          p = j - max_suffix_rev;
-        }
-      else if (a == b)
-        {
-          /* Advance through repetition of the current period.  */
-          if (k != p)
-            ++k;
-          else
-            {
-              j += p;
-              k = 1;
-            }
-        }
-      else /* a < b */
-        {
-          /* Suffix is larger, start over from current location.  */
-          max_suffix_rev = j++;
-          k = p = 1;
-        }
-    }
-
-  /* Choose the longer suffix.  Return the first byte of the right
-     half, rather than the last byte of the left half.  */
-  if (max_suffix_rev + 1 < max_suffix + 1)
-    return max_suffix + 1;
-  *period = p;
-  return max_suffix_rev + 1;
-}
-
-/* Return the first location of non-empty NEEDLE within HAYSTACK, or
-   NULL.  HAYSTACK_LEN is the minimum known length of HAYSTACK.  This
-   method is optimized for NEEDLE_LEN < LONG_NEEDLE_THRESHOLD.
-   Performance is guaranteed to be linear, with an initialization cost
-   of 2 * NEEDLE_LEN comparisons.
-
-   If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at
-   most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching.
-   If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 *
-   HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching.  */
-static RETURN_TYPE
-two_way_short_needle (const unsigned char *haystack, size_t haystack_len,
-                      const unsigned char *needle, size_t needle_len)
-{
-  size_t i; /* Index into current byte of NEEDLE.  */
-  size_t j; /* Index into current window of HAYSTACK.  */
-  size_t period; /* The period of the right half of needle.  */
-  size_t suffix; /* The index of the right half of needle.  */
-
-  /* Factor the needle into two halves, such that the left half is
-     smaller than the global period, and the right half is
-     periodic (with a period as large as NEEDLE_LEN - suffix).  */
-  suffix = critical_factorization (needle, needle_len, &period);
-
-  /* Perform the search.  Each iteration compares the right half
-     first.  */
-  if (CMP_FUNC (needle, needle + period, suffix) == 0)
-    {
-      /* Entire needle is periodic; a mismatch can only advance by the
-         period, so use memory to avoid rescanning known occurrences
-         of the period.  */
-      size_t memory = 0;
-      j = 0;
-      while (AVAILABLE (haystack, haystack_len, j, needle_len))
-        {
-          /* Scan for matches in right half.  */
-          i = MAX (suffix, memory);
-          while (i < needle_len && (CANON_ELEMENT (needle[i])
-                                    == CANON_ELEMENT (haystack[i + j])))
-            ++i;
-          if (needle_len <= i)
-            {
-              /* Scan for matches in left half.  */
-              i = suffix - 1;
-              while (memory < i + 1 && (CANON_ELEMENT (needle[i])
-                                        == CANON_ELEMENT (haystack[i + j])))
-                --i;
-              if (i + 1 < memory + 1)
-                return (RETURN_TYPE) (haystack + j);
-              /* No match, so remember how many repetitions of period
-                 on the right half were scanned.  */
-              j += period;
-              memory = needle_len - period;
-            }
-          else
-            {
-              j += i - suffix + 1;
-              memory = 0;
-            }
-        }
-    }
-  else
-    {
-      /* The two halves of needle are distinct; no extra memory is
-         required, and any mismatch results in a maximal shift.  */
-      period = MAX (suffix, needle_len - suffix) + 1;
-      j = 0;
-      while (AVAILABLE (haystack, haystack_len, j, needle_len))
-        {
-          /* Scan for matches in right half.  */
-          i = suffix;
-          while (i < needle_len && (CANON_ELEMENT (needle[i])
-                                    == CANON_ELEMENT (haystack[i + j])))
-            ++i;
-          if (needle_len <= i)
-            {
-              /* Scan for matches in left half.  */
-              i = suffix - 1;
-              while (i != SIZE_MAX && (CANON_ELEMENT (needle[i])
-                                       == CANON_ELEMENT (haystack[i + j])))
-                --i;
-              if (i == SIZE_MAX)
-                return (RETURN_TYPE) (haystack + j);
-              j += period;
-            }
-          else
-            j += i - suffix + 1;
-        }
-    }
-  return NULL;
-}
-
-/* Return the first location of non-empty NEEDLE within HAYSTACK, or
-   NULL.  HAYSTACK_LEN is the minimum known length of HAYSTACK.  This
-   method is optimized for LONG_NEEDLE_THRESHOLD <= NEEDLE_LEN.
-   Performance is guaranteed to be linear, with an initialization cost
-   of 3 * NEEDLE_LEN + (1 << CHAR_BIT) operations.
-
-   If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at
-   most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching,
-   and sublinear performance O(HAYSTACK_LEN / NEEDLE_LEN) is possible.
-   If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 *
-   HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, and
-   sublinear performance is not possible.  */
-static RETURN_TYPE
-two_way_long_needle (const unsigned char *haystack, size_t haystack_len,
-                     const unsigned char *needle, size_t needle_len)
-{
-  size_t i; /* Index into current byte of NEEDLE.  */
-  size_t j; /* Index into current window of HAYSTACK.  */
-  size_t period; /* The period of the right half of needle.  */
-  size_t suffix; /* The index of the right half of needle.  */
-  size_t shift_table[1U << CHAR_BIT]; /* See below.  */
-
-  /* Factor the needle into two halves, such that the left half is
-     smaller than the global period, and the right half is
-     periodic (with a period as large as NEEDLE_LEN - suffix).  */
-  suffix = critical_factorization (needle, needle_len, &period);
-
-  /* Populate shift_table.  For each possible byte value c,
-     shift_table[c] is the distance from the last occurrence of c to
-     the end of NEEDLE, or NEEDLE_LEN if c is absent from the NEEDLE.
-     shift_table[NEEDLE[NEEDLE_LEN - 1]] contains the only 0.  */
-  for (i = 0; i < 1U << CHAR_BIT; i++)
-    shift_table[i] = needle_len;
-  for (i = 0; i < needle_len; i++)
-    shift_table[CANON_ELEMENT (needle[i])] = needle_len - i - 1;
-
-  /* Perform the search.  Each iteration compares the right half
-     first.  */
-  if (CMP_FUNC (needle, needle + period, suffix) == 0)
-    {
-      /* Entire needle is periodic; a mismatch can only advance by the
-         period, so use memory to avoid rescanning known occurrences
-         of the period.  */
-      size_t memory = 0;
-      size_t shift;
-      j = 0;
-      while (AVAILABLE (haystack, haystack_len, j, needle_len))
-        {
-          /* Check the last byte first; if it does not match, then
-             shift to the next possible match location.  */
-          shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])];
-          if (0 < shift)
-            {
-              if (memory && shift < period)
-                {
-                  /* Since needle is periodic, but the last period has
-                     a byte out of place, there can be no match until
-                     after the mismatch.  */
-                  shift = needle_len - period;
-                  memory = 0;
-                }
-              j += shift;
-              continue;
-            }
-          /* Scan for matches in right half.  The last byte has
-             already been matched, by virtue of the shift table.  */
-          i = MAX (suffix, memory);
-          while (i < needle_len - 1 && (CANON_ELEMENT (needle[i])
-                                        == CANON_ELEMENT (haystack[i + j])))
-            ++i;
-          if (needle_len - 1 <= i)
-            {
-              /* Scan for matches in left half.  */
-              i = suffix - 1;
-              while (memory < i + 1 && (CANON_ELEMENT (needle[i])
-                                        == CANON_ELEMENT (haystack[i + j])))
-                --i;
-              if (i + 1 < memory + 1)
-                return (RETURN_TYPE) (haystack + j);
-              /* No match, so remember how many repetitions of period
-                 on the right half were scanned.  */
-              j += period;
-              memory = needle_len - period;
-            }
-          else
-            {
-              j += i - suffix + 1;
-              memory = 0;
-            }
-        }
-    }
-  else
-    {
-      /* The two halves of needle are distinct; no extra memory is
-         required, and any mismatch results in a maximal shift.  */
-      size_t shift;
-      period = MAX (suffix, needle_len - suffix) + 1;
-      j = 0;
-      while (AVAILABLE (haystack, haystack_len, j, needle_len))
-        {
-          /* Check the last byte first; if it does not match, then
-             shift to the next possible match location.  */
-          shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])];
-          if (0 < shift)
-            {
-              j += shift;
-              continue;
-            }
-          /* Scan for matches in right half.  The last byte has
-             already been matched, by virtue of the shift table.  */
-          i = suffix;
-          while (i < needle_len - 1 && (CANON_ELEMENT (needle[i])
-                                        == CANON_ELEMENT (haystack[i + j])))
-            ++i;
-          if (needle_len - 1 <= i)
-            {
-              /* Scan for matches in left half.  */
-              i = suffix - 1;
-              while (i != SIZE_MAX && (CANON_ELEMENT (needle[i])
-                                       == CANON_ELEMENT (haystack[i + j])))
-                --i;
-              if (i == SIZE_MAX)
-                return (RETURN_TYPE) (haystack + j);
-              j += period;
-            }
-          else
-            j += i - suffix + 1;
-        }
-    }
-  return NULL;
-}
-
-#undef AVAILABLE
-#undef CANON_ELEMENT
-#undef CMP_FUNC
-#undef MAX
-#undef RETURN_TYPE
diff --git a/gdb/gnulib/string.in.h b/gdb/gnulib/string.in.h
deleted file mode 100644
index db3530a..0000000
--- a/gdb/gnulib/string.in.h
+++ /dev/null
@@ -1,929 +0,0 @@
-/* A GNU-like <string.h>.
-
-   Copyright (C) 1995-1996, 2001-2011 Free Software Foundation, Inc.
-
-   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 3, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _GL_STRING_H
-
-#if __GNUC__ >= 3
- at PRAGMA_SYSTEM_HEADER@
-#endif
-
-/* The include_next requires a split double-inclusion guard.  */
-#@INCLUDE_NEXT@ @NEXT_STRING_H@
-
-#ifndef _GL_STRING_H
-#define _GL_STRING_H
-
-/* NetBSD 5.0 mis-defines NULL.  */
-#include <stddef.h>
-
-/* MirBSD defines mbslen as a macro.  */
-#if @GNULIB_MBSLEN@ && defined __MirBSD__
-# include <wchar.h>
-#endif
-
-#ifndef __attribute__
-/* This feature is available in gcc versions 2.5 and later.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
-#  define __attribute__(Spec) /* empty */
-# endif
-/* The attribute __pure__ was added in gcc 2.96.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96)
-#  define __pure__ /* empty */
-# endif
-#endif
-
-
-/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
-
-/* The definition of _GL_ARG_NONNULL is copied here.  */
-
-/* The definition of _GL_WARN_ON_USE is copied here.  */
-
-
-/* Return the first instance of C within N bytes of S, or NULL.  */
-#if @GNULIB_MEMCHR@
-# if @REPLACE_MEMCHR@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   define memchr rpl_memchr
-#  endif
-_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n)
-                                  __attribute__ ((__pure__))
-                                  _GL_ARG_NONNULL ((1)));
-_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n));
-# else
-#  if ! @HAVE_MEMCHR@
-_GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n)
-                                  __attribute__ ((__pure__))
-                                  _GL_ARG_NONNULL ((1)));
-#  endif
-  /* On some systems, this function is defined as an overloaded function:
-       extern "C" { const void * std::memchr (const void *, int, size_t); }
-       extern "C++" { void * std::memchr (void *, int, size_t); }  */
-_GL_CXXALIAS_SYS_CAST2 (memchr,
-                        void *, (void const *__s, int __c, size_t __n),
-                        void const *, (void const *__s, int __c, size_t __n));
-# endif
-# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \
-     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n));
-_GL_CXXALIASWARN1 (memchr, void const *,
-                   (void const *__s, int __c, size_t __n));
-# else
-_GL_CXXALIASWARN (memchr);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef memchr
-/* Assume memchr is always declared.  */
-_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - "
-                 "use gnulib module memchr for portability" );
-#endif
-
-/* Return the first occurrence of NEEDLE in HAYSTACK.  */
-#if @GNULIB_MEMMEM@
-# if @REPLACE_MEMMEM@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   define memmem rpl_memmem
-#  endif
-_GL_FUNCDECL_RPL (memmem, void *,
-                  (void const *__haystack, size_t __haystack_len,
-                   void const *__needle, size_t __needle_len)
-                  __attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 3)));
-_GL_CXXALIAS_RPL (memmem, void *,
-                  (void const *__haystack, size_t __haystack_len,
-                   void const *__needle, size_t __needle_len));
-# else
-#  if ! @HAVE_DECL_MEMMEM@
-_GL_FUNCDECL_SYS (memmem, void *,
-                  (void const *__haystack, size_t __haystack_len,
-                   void const *__needle, size_t __needle_len)
-                  __attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 3)));
-#  endif
-_GL_CXXALIAS_SYS (memmem, void *,
-                  (void const *__haystack, size_t __haystack_len,
-                   void const *__needle, size_t __needle_len));
-# endif
-_GL_CXXALIASWARN (memmem);
-#elif defined GNULIB_POSIXCHECK
-# undef memmem
-# if HAVE_RAW_DECL_MEMMEM
-_GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - "
-                 "use gnulib module memmem-simple for portability, "
-                 "and module memmem for speed" );
-# endif
-#endif
-
-/* Copy N bytes of SRC to DEST, return pointer to bytes after the
-   last written byte.  */
-#if @GNULIB_MEMPCPY@
-# if ! @HAVE_MEMPCPY@
-_GL_FUNCDECL_SYS (mempcpy, void *,
-                  (void *restrict __dest, void const *restrict __src,
-                   size_t __n)
-                  _GL_ARG_NONNULL ((1, 2)));
-# endif
-_GL_CXXALIAS_SYS (mempcpy, void *,
-                  (void *restrict __dest, void const *restrict __src,
-                   size_t __n));
-_GL_CXXALIASWARN (mempcpy);
-#elif defined GNULIB_POSIXCHECK
-# undef mempcpy
-# if HAVE_RAW_DECL_MEMPCPY
-_GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - "
-                 "use gnulib module mempcpy for portability");
-# endif
-#endif
-
-/* Search backwards through a block for a byte (specified as an int).  */
-#if @GNULIB_MEMRCHR@
-# if ! @HAVE_DECL_MEMRCHR@
-_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t)
-                                   __attribute__ ((__pure__))
-                                   _GL_ARG_NONNULL ((1)));
-# endif
-  /* On some systems, this function is defined as an overloaded function:
-       extern "C++" { const void * std::memrchr (const void *, int, size_t); }
-       extern "C++" { void * std::memrchr (void *, int, size_t); }  */
-_GL_CXXALIAS_SYS_CAST2 (memrchr,
-                        void *, (void const *, int, size_t),
-                        void const *, (void const *, int, size_t));
-# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \
-     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t));
-_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t));
-# else
-_GL_CXXALIASWARN (memrchr);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef memrchr
-# if HAVE_RAW_DECL_MEMRCHR
-_GL_WARN_ON_USE (memrchr, "memrchr is unportable - "
-                 "use gnulib module memrchr for portability");
-# endif
-#endif
-
-/* Find the first occurrence of C in S.  More efficient than
-   memchr(S,C,N), at the expense of undefined behavior if C does not
-   occur within N bytes.  */
-#if @GNULIB_RAWMEMCHR@
-# if ! @HAVE_RAWMEMCHR@
-_GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in)
-                                     __attribute__ ((__pure__))
-                                     _GL_ARG_NONNULL ((1)));
-# endif
-  /* On some systems, this function is defined as an overloaded function:
-       extern "C++" { const void * std::rawmemchr (const void *, int); }
-       extern "C++" { void * std::rawmemchr (void *, int); }  */
-_GL_CXXALIAS_SYS_CAST2 (rawmemchr,
-                        void *, (void const *__s, int __c_in),
-                        void const *, (void const *__s, int __c_in));
-# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \
-     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in));
-_GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in));
-# else
-_GL_CXXALIASWARN (rawmemchr);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef rawmemchr
-# if HAVE_RAW_DECL_RAWMEMCHR
-_GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - "
-                 "use gnulib module rawmemchr for portability");
-# endif
-#endif
-
-/* Copy SRC to DST, returning the address of the terminating '\0' in DST.  */
-#if @GNULIB_STPCPY@
-# if ! @HAVE_STPCPY@
-_GL_FUNCDECL_SYS (stpcpy, char *,
-                  (char *restrict __dst, char const *restrict __src)
-                  _GL_ARG_NONNULL ((1, 2)));
-# endif
-_GL_CXXALIAS_SYS (stpcpy, char *,
-                  (char *restrict __dst, char const *restrict __src));
-_GL_CXXALIASWARN (stpcpy);
-#elif defined GNULIB_POSIXCHECK
-# undef stpcpy
-# if HAVE_RAW_DECL_STPCPY
-_GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - "
-                 "use gnulib module stpcpy for portability");
-# endif
-#endif
-
-/* Copy no more than N bytes of SRC to DST, returning a pointer past the
-   last non-NUL byte written into DST.  */
-#if @GNULIB_STPNCPY@
-# if @REPLACE_STPNCPY@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   define stpncpy rpl_stpncpy
-#  endif
-_GL_FUNCDECL_RPL (stpncpy, char *,
-                  (char *restrict __dst, char const *restrict __src,
-                   size_t __n)
-                  _GL_ARG_NONNULL ((1, 2)));
-_GL_CXXALIAS_RPL (stpncpy, char *,
-                  (char *restrict __dst, char const *restrict __src,
-                   size_t __n));
-# else
-#  if ! @HAVE_STPNCPY@
-_GL_FUNCDECL_SYS (stpncpy, char *,
-                  (char *restrict __dst, char const *restrict __src,
-                   size_t __n)
-                  _GL_ARG_NONNULL ((1, 2)));
-#  endif
-_GL_CXXALIAS_SYS (stpncpy, char *,
-                  (char *restrict __dst, char const *restrict __src,
-                   size_t __n));
-# endif
-_GL_CXXALIASWARN (stpncpy);
-#elif defined GNULIB_POSIXCHECK
-# undef stpncpy
-# if HAVE_RAW_DECL_STPNCPY
-_GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - "
-                 "use gnulib module stpncpy for portability");
-# endif
-#endif
-
-#if defined GNULIB_POSIXCHECK
-/* strchr() does not work with multibyte strings if the locale encoding is
-   GB18030 and the character to be searched is a digit.  */
-# undef strchr
-/* Assume strchr is always declared.  */
-_GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings "
-                 "in some multibyte locales - "
-                 "use mbschr if you care about internationalization");
-#endif
-
-/* Find the first occurrence of C in S or the final NUL byte.  */
-#if @GNULIB_STRCHRNUL@
-# if ! @HAVE_STRCHRNUL@
-_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in)
-                                     __attribute__ ((__pure__))
-                                     _GL_ARG_NONNULL ((1)));
-# endif
-  /* On some systems, this function is defined as an overloaded function:
-       extern "C++" { const char * std::strchrnul (const char *, int); }
-       extern "C++" { char * std::strchrnul (char *, int); }  */
-_GL_CXXALIAS_SYS_CAST2 (strchrnul,
-                        char *, (char const *__s, int __c_in),
-                        char const *, (char const *__s, int __c_in));
-# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \
-     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in));
-_GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in));
-# else
-_GL_CXXALIASWARN (strchrnul);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef strchrnul
-# if HAVE_RAW_DECL_STRCHRNUL
-_GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - "
-                 "use gnulib module strchrnul for portability");
-# endif
-#endif
-
-/* Duplicate S, returning an identical malloc'd string.  */
-#if @GNULIB_STRDUP@
-# if @REPLACE_STRDUP@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef strdup
-#   define strdup rpl_strdup
-#  endif
-_GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
-_GL_CXXALIAS_RPL (strdup, char *, (char const *__s));
-# else
-#  if !(@HAVE_DECL_STRDUP@ || defined strdup)
-_GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
-#  endif
-_GL_CXXALIAS_SYS (strdup, char *, (char const *__s));
-# endif
-_GL_CXXALIASWARN (strdup);
-#elif defined GNULIB_POSIXCHECK
-# undef strdup
-# if HAVE_RAW_DECL_STRDUP
-_GL_WARN_ON_USE (strdup, "strdup is unportable - "
-                 "use gnulib module strdup for portability");
-# endif
-#endif
-
-/* Append no more than N characters from SRC onto DEST.  */
-#if @GNULIB_STRNCAT@
-# if @REPLACE_STRNCAT@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef strncat
-#   define strncat rpl_strncat
-#  endif
-_GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n)
-                                   _GL_ARG_NONNULL ((1, 2)));
-_GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n));
-# else
-_GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n));
-# endif
-_GL_CXXALIASWARN (strncat);
-#elif defined GNULIB_POSIXCHECK
-# undef strncat
-# if HAVE_RAW_DECL_STRNCAT
-_GL_WARN_ON_USE (strncat, "strncat is unportable - "
-                 "use gnulib module strncat for portability");
-# endif
-#endif
-
-/* Return a newly allocated copy of at most N bytes of STRING.  */
-#if @GNULIB_STRNDUP@
-# if @REPLACE_STRNDUP@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef strndup
-#   define strndup rpl_strndup
-#  endif
-_GL_FUNCDECL_RPL (strndup, char *, (char const *__string, size_t __n)
-                                   _GL_ARG_NONNULL ((1)));
-_GL_CXXALIAS_RPL (strndup, char *, (char const *__string, size_t __n));
-# else
-#  if ! @HAVE_DECL_STRNDUP@
-_GL_FUNCDECL_SYS (strndup, char *, (char const *__string, size_t __n)
-                                   _GL_ARG_NONNULL ((1)));
-#  endif
-_GL_CXXALIAS_SYS (strndup, char *, (char const *__string, size_t __n));
-# endif
-_GL_CXXALIASWARN (strndup);
-#elif defined GNULIB_POSIXCHECK
-# undef strndup
-# if HAVE_RAW_DECL_STRNDUP
-_GL_WARN_ON_USE (strndup, "strndup is unportable - "
-                 "use gnulib module strndup for portability");
-# endif
-#endif
-
-/* Find the length (number of bytes) of STRING, but scan at most
-   MAXLEN bytes.  If no '\0' terminator is found in that many bytes,
-   return MAXLEN.  */
-#if @GNULIB_STRNLEN@
-# if @REPLACE_STRNLEN@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef strnlen
-#   define strnlen rpl_strnlen
-#  endif
-_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__string, size_t __maxlen)
-                                   __attribute__ ((__pure__))
-                                   _GL_ARG_NONNULL ((1)));
-_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__string, size_t __maxlen));
-# else
-#  if ! @HAVE_DECL_STRNLEN@
-_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__string, size_t __maxlen)
-                                   __attribute__ ((__pure__))
-                                   _GL_ARG_NONNULL ((1)));
-#  endif
-_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__string, size_t __maxlen));
-# endif
-_GL_CXXALIASWARN (strnlen);
-#elif defined GNULIB_POSIXCHECK
-# undef strnlen
-# if HAVE_RAW_DECL_STRNLEN
-_GL_WARN_ON_USE (strnlen, "strnlen is unportable - "
-                 "use gnulib module strnlen for portability");
-# endif
-#endif
-
-#if defined GNULIB_POSIXCHECK
-/* strcspn() assumes the second argument is a list of single-byte characters.
-   Even in this simple case, it does not work with multibyte strings if the
-   locale encoding is GB18030 and one of the characters to be searched is a
-   digit.  */
-# undef strcspn
-/* Assume strcspn is always declared.  */
-_GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings "
-                 "in multibyte locales - "
-                 "use mbscspn if you care about internationalization");
-#endif
-
-/* Find the first occurrence in S of any character in ACCEPT.  */
-#if @GNULIB_STRPBRK@
-# if ! @HAVE_STRPBRK@
-_GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept)
-                                   __attribute__ ((__pure__))
-                                   _GL_ARG_NONNULL ((1, 2)));
-# endif
-  /* On some systems, this function is defined as an overloaded function:
-       extern "C" { const char * strpbrk (const char *, const char *); }
-       extern "C++" { char * strpbrk (char *, const char *); }  */
-_GL_CXXALIAS_SYS_CAST2 (strpbrk,
-                        char *, (char const *__s, char const *__accept),
-                        const char *, (char const *__s, char const *__accept));
-# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \
-     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept));
-_GL_CXXALIASWARN1 (strpbrk, char const *,
-                   (char const *__s, char const *__accept));
-# else
-_GL_CXXALIASWARN (strpbrk);
-# endif
-# if defined GNULIB_POSIXCHECK
-/* strpbrk() assumes the second argument is a list of single-byte characters.
-   Even in this simple case, it does not work with multibyte strings if the
-   locale encoding is GB18030 and one of the characters to be searched is a
-   digit.  */
-#  undef strpbrk
-_GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings "
-                 "in multibyte locales - "
-                 "use mbspbrk if you care about internationalization");
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef strpbrk
-# if HAVE_RAW_DECL_STRPBRK
-_GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - "
-                 "use gnulib module strpbrk for portability");
-# endif
-#endif
-
-#if defined GNULIB_POSIXCHECK
-/* strspn() assumes the second argument is a list of single-byte characters.
-   Even in this simple case, it cannot work with multibyte strings.  */
-# undef strspn
-/* Assume strspn is always declared.  */
-_GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings "
-                 "in multibyte locales - "
-                 "use mbsspn if you care about internationalization");
-#endif
-
-#if defined GNULIB_POSIXCHECK
-/* strrchr() does not work with multibyte strings if the locale encoding is
-   GB18030 and the character to be searched is a digit.  */
-# undef strrchr
-/* Assume strrchr is always declared.  */
-_GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings "
-                 "in some multibyte locales - "
-                 "use mbsrchr if you care about internationalization");
-#endif
-
-/* Search the next delimiter (char listed in DELIM) starting at *STRINGP.
-   If one is found, overwrite it with a NUL, and advance *STRINGP
-   to point to the next char after it.  Otherwise, set *STRINGP to NULL.
-   If *STRINGP was already NULL, nothing happens.
-   Return the old value of *STRINGP.
-
-   This is a variant of strtok() that is multithread-safe and supports
-   empty fields.
-
-   Caveat: It modifies the original string.
-   Caveat: These functions cannot be used on constant strings.
-   Caveat: The identity of the delimiting character is lost.
-   Caveat: It doesn't work with multibyte strings unless all of the delimiter
-           characters are ASCII characters < 0x30.
-
-   See also strtok_r().  */
-#if @GNULIB_STRSEP@
-# if ! @HAVE_STRSEP@
-_GL_FUNCDECL_SYS (strsep, char *,
-                  (char **restrict __stringp, char const *restrict __delim)
-                  _GL_ARG_NONNULL ((1, 2)));
-# endif
-_GL_CXXALIAS_SYS (strsep, char *,
-                  (char **restrict __stringp, char const *restrict __delim));
-_GL_CXXALIASWARN (strsep);
-# if defined GNULIB_POSIXCHECK
-#  undef strsep
-_GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings "
-                 "in multibyte locales - "
-                 "use mbssep if you care about internationalization");
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef strsep
-# if HAVE_RAW_DECL_STRSEP
-_GL_WARN_ON_USE (strsep, "strsep is unportable - "
-                 "use gnulib module strsep for portability");
-# endif
-#endif
-
-#if @GNULIB_STRSTR@
-# if @REPLACE_STRSTR@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   define strstr rpl_strstr
-#  endif
-_GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle)
-                                  __attribute__ ((__pure__))
-                                  _GL_ARG_NONNULL ((1, 2)));
-_GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle));
-# else
-  /* On some systems, this function is defined as an overloaded function:
-       extern "C++" { const char * strstr (const char *, const char *); }
-       extern "C++" { char * strstr (char *, const char *); }  */
-_GL_CXXALIAS_SYS_CAST2 (strstr,
-                        char *, (const char *haystack, const char *needle),
-                        const char *, (const char *haystack, const char *needle));
-# endif
-# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \
-     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle));
-_GL_CXXALIASWARN1 (strstr, const char *,
-                   (const char *haystack, const char *needle));
-# else
-_GL_CXXALIASWARN (strstr);
-# endif
-#elif defined GNULIB_POSIXCHECK
-/* strstr() does not work with multibyte strings if the locale encoding is
-   different from UTF-8:
-   POSIX says that it operates on "strings", and "string" in POSIX is defined
-   as a sequence of bytes, not of characters.  */
-# undef strstr
-/* Assume strstr is always declared.  */
-_GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot "
-                 "work correctly on character strings in most "
-                 "multibyte locales - "
-                 "use mbsstr if you care about internationalization, "
-                 "or use strstr if you care about speed");
-#endif
-
-/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive
-   comparison.  */
-#if @GNULIB_STRCASESTR@
-# if @REPLACE_STRCASESTR@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   define strcasestr rpl_strcasestr
-#  endif
-_GL_FUNCDECL_RPL (strcasestr, char *,
-                  (const char *haystack, const char *needle)
-                  __attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 2)));
-_GL_CXXALIAS_RPL (strcasestr, char *,
-                  (const char *haystack, const char *needle));
-# else
-#  if ! @HAVE_STRCASESTR@
-_GL_FUNCDECL_SYS (strcasestr, char *,
-                  (const char *haystack, const char *needle)
-                  __attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 2)));
-#  endif
-  /* On some systems, this function is defined as an overloaded function:
-       extern "C++" { const char * strcasestr (const char *, const char *); }
-       extern "C++" { char * strcasestr (char *, const char *); }  */
-_GL_CXXALIAS_SYS_CAST2 (strcasestr,
-                        char *, (const char *haystack, const char *needle),
-                        const char *, (const char *haystack, const char *needle));
-# endif
-# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \
-     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle));
-_GL_CXXALIASWARN1 (strcasestr, const char *,
-                   (const char *haystack, const char *needle));
-# else
-_GL_CXXALIASWARN (strcasestr);
-# endif
-#elif defined GNULIB_POSIXCHECK
-/* strcasestr() does not work with multibyte strings:
-   It is a glibc extension, and glibc implements it only for unibyte
-   locales.  */
-# undef strcasestr
-# if HAVE_RAW_DECL_STRCASESTR
-_GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character "
-                 "strings in multibyte locales - "
-                 "use mbscasestr if you care about "
-                 "internationalization, or use c-strcasestr if you want "
-                 "a locale independent function");
-# endif
-#endif
-
-/* Parse S into tokens separated by characters in DELIM.
-   If S is NULL, the saved pointer in SAVE_PTR is used as
-   the next starting point.  For example:
-        char s[] = "-abc-=-def";
-        char *sp;
-        x = strtok_r(s, "-", &sp);      // x = "abc", sp = "=-def"
-        x = strtok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
-        x = strtok_r(NULL, "=", &sp);   // x = NULL
-                // s = "abc\0-def\0"
-
-   This is a variant of strtok() that is multithread-safe.
-
-   For the POSIX documentation for this function, see:
-   http://www.opengroup.org/susv3xsh/strtok.html
-
-   Caveat: It modifies the original string.
-   Caveat: These functions cannot be used on constant strings.
-   Caveat: The identity of the delimiting character is lost.
-   Caveat: It doesn't work with multibyte strings unless all of the delimiter
-           characters are ASCII characters < 0x30.
-
-   See also strsep().  */
-#if @GNULIB_STRTOK_R@
-# if @REPLACE_STRTOK_R@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef strtok_r
-#   define strtok_r rpl_strtok_r
-#  endif
-_GL_FUNCDECL_RPL (strtok_r, char *,
-                  (char *restrict s, char const *restrict delim,
-                   char **restrict save_ptr)
-                  _GL_ARG_NONNULL ((2, 3)));
-_GL_CXXALIAS_RPL (strtok_r, char *,
-                  (char *restrict s, char const *restrict delim,
-                   char **restrict save_ptr));
-# else
-#  if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK
-#   undef strtok_r
-#  endif
-#  if ! @HAVE_DECL_STRTOK_R@
-_GL_FUNCDECL_SYS (strtok_r, char *,
-                  (char *restrict s, char const *restrict delim,
-                   char **restrict save_ptr)
-                  _GL_ARG_NONNULL ((2, 3)));
-#  endif
-_GL_CXXALIAS_SYS (strtok_r, char *,
-                  (char *restrict s, char const *restrict delim,
-                   char **restrict save_ptr));
-# endif
-_GL_CXXALIASWARN (strtok_r);
-# if defined GNULIB_POSIXCHECK
-_GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character "
-                 "strings in multibyte locales - "
-                 "use mbstok_r if you care about internationalization");
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef strtok_r
-# if HAVE_RAW_DECL_STRTOK_R
-_GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - "
-                 "use gnulib module strtok_r for portability");
-# endif
-#endif
-
-
-/* The following functions are not specified by POSIX.  They are gnulib
-   extensions.  */
-
-#if @GNULIB_MBSLEN@
-/* Return the number of multibyte characters in the character string STRING.
-   This considers multibyte characters, unlike strlen, which counts bytes.  */
-# ifdef __MirBSD__  /* MirBSD defines mbslen as a macro.  Override it.  */
-#  undef mbslen
-# endif
-# if @HAVE_MBSLEN@  /* AIX, OSF/1, MirBSD define mbslen already in libc.  */
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   define mbslen rpl_mbslen
-#  endif
-_GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) _GL_ARG_NONNULL ((1)));
-_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string));
-# else
-_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) _GL_ARG_NONNULL ((1)));
-_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string));
-# endif
-_GL_CXXALIASWARN (mbslen);
-#endif
-
-#if @GNULIB_MBSNLEN@
-/* Return the number of multibyte characters in the character string starting
-   at STRING and ending at STRING + LEN.  */
-_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len)
-     _GL_ARG_NONNULL ((1));
-#endif
-
-#if @GNULIB_MBSCHR@
-/* Locate the first single-byte character C in the character string STRING,
-   and return a pointer to it.  Return NULL if C is not found in STRING.
-   Unlike strchr(), this function works correctly in multibyte locales with
-   encodings such as GB18030.  */
-# if defined __hpux
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   define mbschr rpl_mbschr /* avoid collision with HP-UX function */
-#  endif
-_GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c)
-                                  _GL_ARG_NONNULL ((1)));
-_GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c));
-# else
-_GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c)
-                                  _GL_ARG_NONNULL ((1)));
-_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c));
-# endif
-_GL_CXXALIASWARN (mbschr);
-#endif
-
-#if @GNULIB_MBSRCHR@
-/* Locate the last single-byte character C in the character string STRING,
-   and return a pointer to it.  Return NULL if C is not found in STRING.
-   Unlike strrchr(), this function works correctly in multibyte locales with
-   encodings such as GB18030.  */
-# if defined __hpux
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   define mbsrchr rpl_mbsrchr /* avoid collision with HP-UX function */
-#  endif
-_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c)
-                                   _GL_ARG_NONNULL ((1)));
-_GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c));
-# else
-_GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c)
-                                   _GL_ARG_NONNULL ((1)));
-_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c));
-# endif
-_GL_CXXALIASWARN (mbsrchr);
-#endif
-
-#if @GNULIB_MBSSTR@
-/* Find the first occurrence of the character string NEEDLE in the character
-   string HAYSTACK.  Return NULL if NEEDLE is not found in HAYSTACK.
-   Unlike strstr(), this function works correctly in multibyte locales with
-   encodings different from UTF-8.  */
-_GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle)
-     _GL_ARG_NONNULL ((1, 2));
-#endif
-
-#if @GNULIB_MBSCASECMP@
-/* Compare the character strings S1 and S2, ignoring case, returning less than,
-   equal to or greater than zero if S1 is lexicographically less than, equal to
-   or greater than S2.
-   Note: This function may, in multibyte locales, return 0 for strings of
-   different lengths!
-   Unlike strcasecmp(), this function works correctly in multibyte locales.  */
-_GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2)
-     _GL_ARG_NONNULL ((1, 2));
-#endif
-
-#if @GNULIB_MBSNCASECMP@
-/* Compare the initial segment of the character string S1 consisting of at most
-   N characters with the initial segment of the character string S2 consisting
-   of at most N characters, ignoring case, returning less than, equal to or
-   greater than zero if the initial segment of S1 is lexicographically less
-   than, equal to or greater than the initial segment of S2.
-   Note: This function may, in multibyte locales, return 0 for initial segments
-   of different lengths!
-   Unlike strncasecmp(), this function works correctly in multibyte locales.
-   But beware that N is not a byte count but a character count!  */
-_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n)
-     _GL_ARG_NONNULL ((1, 2));
-#endif
-
-#if @GNULIB_MBSPCASECMP@
-/* Compare the initial segment of the character string STRING consisting of
-   at most mbslen (PREFIX) characters with the character string PREFIX,
-   ignoring case, returning less than, equal to or greater than zero if this
-   initial segment is lexicographically less than, equal to or greater than
-   PREFIX.
-   Note: This function may, in multibyte locales, return 0 if STRING is of
-   smaller length than PREFIX!
-   Unlike strncasecmp(), this function works correctly in multibyte
-   locales.  */
-_GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix)
-     _GL_ARG_NONNULL ((1, 2));
-#endif
-
-#if @GNULIB_MBSCASESTR@
-/* Find the first occurrence of the character string NEEDLE in the character
-   string HAYSTACK, using case-insensitive comparison.
-   Note: This function may, in multibyte locales, return success even if
-   strlen (haystack) < strlen (needle) !
-   Unlike strcasestr(), this function works correctly in multibyte locales.  */
-_GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle)
-     _GL_ARG_NONNULL ((1, 2));
-#endif
-
-#if @GNULIB_MBSCSPN@
-/* Find the first occurrence in the character string STRING of any character
-   in the character string ACCEPT.  Return the number of bytes from the
-   beginning of the string to this occurrence, or to the end of the string
-   if none exists.
-   Unlike strcspn(), this function works correctly in multibyte locales.  */
-_GL_EXTERN_C size_t mbscspn (const char *string, const char *accept)
-     _GL_ARG_NONNULL ((1, 2));
-#endif
-
-#if @GNULIB_MBSPBRK@
-/* Find the first occurrence in the character string STRING of any character
-   in the character string ACCEPT.  Return the pointer to it, or NULL if none
-   exists.
-   Unlike strpbrk(), this function works correctly in multibyte locales.  */
-# if defined __hpux
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */
-#  endif
-_GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept)
-                                   _GL_ARG_NONNULL ((1, 2)));
-_GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept));
-# else
-_GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept)
-                                   _GL_ARG_NONNULL ((1, 2)));
-_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept));
-# endif
-_GL_CXXALIASWARN (mbspbrk);
-#endif
-
-#if @GNULIB_MBSSPN@
-/* Find the first occurrence in the character string STRING of any character
-   not in the character string REJECT.  Return the number of bytes from the
-   beginning of the string to this occurrence, or to the end of the string
-   if none exists.
-   Unlike strspn(), this function works correctly in multibyte locales.  */
-_GL_EXTERN_C size_t mbsspn (const char *string, const char *reject)
-     _GL_ARG_NONNULL ((1, 2));
-#endif
-
-#if @GNULIB_MBSSEP@
-/* Search the next delimiter (multibyte character listed in the character
-   string DELIM) starting at the character string *STRINGP.
-   If one is found, overwrite it with a NUL, and advance *STRINGP to point
-   to the next multibyte character after it.  Otherwise, set *STRINGP to NULL.
-   If *STRINGP was already NULL, nothing happens.
-   Return the old value of *STRINGP.
-
-   This is a variant of mbstok_r() that supports empty fields.
-
-   Caveat: It modifies the original string.
-   Caveat: These functions cannot be used on constant strings.
-   Caveat: The identity of the delimiting character is lost.
-
-   See also mbstok_r().  */
-_GL_EXTERN_C char * mbssep (char **stringp, const char *delim)
-     _GL_ARG_NONNULL ((1, 2));
-#endif
-
-#if @GNULIB_MBSTOK_R@
-/* Parse the character string STRING into tokens separated by characters in
-   the character string DELIM.
-   If STRING is NULL, the saved pointer in SAVE_PTR is used as
-   the next starting point.  For example:
-        char s[] = "-abc-=-def";
-        char *sp;
-        x = mbstok_r(s, "-", &sp);      // x = "abc", sp = "=-def"
-        x = mbstok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
-        x = mbstok_r(NULL, "=", &sp);   // x = NULL
-                // s = "abc\0-def\0"
-
-   Caveat: It modifies the original string.
-   Caveat: These functions cannot be used on constant strings.
-   Caveat: The identity of the delimiting character is lost.
-
-   See also mbssep().  */
-_GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr)
-     _GL_ARG_NONNULL ((2, 3));
-#endif
-
-/* Map any int, typically from errno, into an error message.  */
-#if @GNULIB_STRERROR@
-# if @REPLACE_STRERROR@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef strerror
-#   define strerror rpl_strerror
-#  endif
-_GL_FUNCDECL_RPL (strerror, char *, (int));
-_GL_CXXALIAS_RPL (strerror, char *, (int));
-# else
-_GL_CXXALIAS_SYS (strerror, char *, (int));
-# endif
-_GL_CXXALIASWARN (strerror);
-#elif defined GNULIB_POSIXCHECK
-# undef strerror
-/* Assume strerror is always declared.  */
-_GL_WARN_ON_USE (strerror, "strerror is unportable - "
-                 "use gnulib module strerror to guarantee non-NULL result");
-#endif
-
-#if @GNULIB_STRSIGNAL@
-# if @REPLACE_STRSIGNAL@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   define strsignal rpl_strsignal
-#  endif
-_GL_FUNCDECL_RPL (strsignal, char *, (int __sig));
-_GL_CXXALIAS_RPL (strsignal, char *, (int __sig));
-# else
-#  if ! @HAVE_DECL_STRSIGNAL@
-_GL_FUNCDECL_SYS (strsignal, char *, (int __sig));
-#  endif
-/* Need to cast, because on Cygwin 1.5.x systems, the return type is
-   'const char *'.  */
-_GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig));
-# endif
-_GL_CXXALIASWARN (strsignal);
-#elif defined GNULIB_POSIXCHECK
-# undef strsignal
-# if HAVE_RAW_DECL_STRSIGNAL
-_GL_WARN_ON_USE (strsignal, "strsignal is unportable - "
-                 "use gnulib module strsignal for portability");
-# endif
-#endif
-
-#if @GNULIB_STRVERSCMP@
-# if !@HAVE_STRVERSCMP@
-_GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *)
-                                   _GL_ARG_NONNULL ((1, 2)));
-# endif
-_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *));
-_GL_CXXALIASWARN (strverscmp);
-#elif defined GNULIB_POSIXCHECK
-# undef strverscmp
-# if HAVE_RAW_DECL_STRVERSCMP
-_GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - "
-                 "use gnulib module strverscmp for portability");
-# endif
-#endif
-
-
-#endif /* _GL_STRING_H */
-#endif /* _GL_STRING_H */
diff --git a/gdb/gnulib/wchar.in.h b/gdb/gnulib/wchar.in.h
deleted file mode 100644
index 7c598e6..0000000
--- a/gdb/gnulib/wchar.in.h
+++ /dev/null
@@ -1,428 +0,0 @@
-/* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
-
-   Copyright (C) 2007-2011 Free Software Foundation, Inc.
-
-   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 3, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/* Written by Eric Blake.  */
-
-/*
- * ISO C 99 <wchar.h> for platforms that have issues.
- * <http://www.opengroup.org/susv3xbd/wchar.h.html>
- *
- * For now, this just ensures proper prerequisite inclusion order and
- * the declaration of wcwidth().
- */
-
-#if __GNUC__ >= 3
- at PRAGMA_SYSTEM_HEADER@
-#endif
-
-#if defined __need_mbstate_t || defined __need_wint_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H
-/* Special invocation convention:
-   - Inside glibc and uClibc header files.
-   - On HP-UX 11.00 we have a sequence of nested includes
-     <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>,
-     once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h>
-     and once directly.  In both situations 'wint_t' is not yet defined,
-     therefore we cannot provide the function overrides; instead include only
-     the system's <wchar.h>.
-   - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and
-     the latter includes <wchar.h>.  But here, we have no way to detect whether
-     <wctype.h> is completely included or is still being included.  */
-
-#@INCLUDE_NEXT@ @NEXT_WCHAR_H@
-
-#else
-/* Normal invocation convention.  */
-
-#ifndef _GL_WCHAR_H
-
-#define _GL_ALREADY_INCLUDING_WCHAR_H
-
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.
-   But avoid namespace pollution on glibc systems.  */
-#ifndef __GLIBC__
-# include <stddef.h>
-# include <stdio.h>
-# include <time.h>
-#endif
-
-/* Include the original <wchar.h> if it exists.
-   Some builds of uClibc lack it.  */
-/* The include_next requires a split double-inclusion guard.  */
-#if @HAVE_WCHAR_H@
-# @INCLUDE_NEXT@ @NEXT_WCHAR_H@
-#endif
-
-#undef _GL_ALREADY_INCLUDING_WCHAR_H
-
-#ifndef _GL_WCHAR_H
-#define _GL_WCHAR_H
-
-/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
-
-/* The definition of _GL_ARG_NONNULL is copied here.  */
-
-/* The definition of _GL_WARN_ON_USE is copied here.  */
-
-
-/* Define wint_t and WEOF.  (Also done in wctype.in.h.)  */
-#if !@HAVE_WINT_T@ && !defined wint_t
-# define wint_t int
-# ifndef WEOF
-#  define WEOF -1
-# endif
-#else
-# ifndef WEOF
-#  define WEOF ((wint_t) -1)
-# endif
-#endif
-
-
-/* Override mbstate_t if it is too small.
-   On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for
-   implementing mbrtowc for encodings like UTF-8.  */
-#if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@
-typedef int rpl_mbstate_t;
-# undef mbstate_t
-# define mbstate_t rpl_mbstate_t
-# define GNULIB_defined_mbstate_t 1
-#endif
-
-
-/* Convert a single-byte character to a wide character.  */
-#if @GNULIB_BTOWC@
-# if @REPLACE_BTOWC@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef btowc
-#   define btowc rpl_btowc
-#  endif
-_GL_FUNCDECL_RPL (btowc, wint_t, (int c));
-_GL_CXXALIAS_RPL (btowc, wint_t, (int c));
-# else
-#  if !@HAVE_BTOWC@
-_GL_FUNCDECL_SYS (btowc, wint_t, (int c));
-#  endif
-_GL_CXXALIAS_SYS (btowc, wint_t, (int c));
-# endif
-_GL_CXXALIASWARN (btowc);
-#elif defined GNULIB_POSIXCHECK
-# undef btowc
-# if HAVE_RAW_DECL_BTOWC
-_GL_WARN_ON_USE (btowc, "btowc is unportable - "
-                 "use gnulib module btowc for portability");
-# endif
-#endif
-
-
-/* Convert a wide character to a single-byte character.  */
-#if @GNULIB_WCTOB@
-# if @REPLACE_WCTOB@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef wctob
-#   define wctob rpl_wctob
-#  endif
-_GL_FUNCDECL_RPL (wctob, int, (wint_t wc));
-_GL_CXXALIAS_RPL (wctob, int, (wint_t wc));
-# else
-#  if !defined wctob && !@HAVE_DECL_WCTOB@
-/* wctob is provided by gnulib, or wctob exists but is not declared.  */
-_GL_FUNCDECL_SYS (wctob, int, (wint_t wc));
-#  endif
-_GL_CXXALIAS_SYS (wctob, int, (wint_t wc));
-# endif
-_GL_CXXALIASWARN (wctob);
-#elif defined GNULIB_POSIXCHECK
-# undef wctob
-# if HAVE_RAW_DECL_WCTOB
-_GL_WARN_ON_USE (wctob, "wctob is unportable - "
-                 "use gnulib module wctob for portability");
-# endif
-#endif
-
-
-/* Test whether *PS is in the initial state.  */
-#if @GNULIB_MBSINIT@
-# if @REPLACE_MBSINIT@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef mbsinit
-#   define mbsinit rpl_mbsinit
-#  endif
-_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps));
-_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps));
-# else
-#  if !@HAVE_MBSINIT@
-_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps));
-#  endif
-_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (mbsinit);
-#elif defined GNULIB_POSIXCHECK
-# undef mbsinit
-# if HAVE_RAW_DECL_MBSINIT
-_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - "
-                 "use gnulib module mbsinit for portability");
-# endif
-#endif
-
-
-/* Convert a multibyte character to a wide character.  */
-#if @GNULIB_MBRTOWC@
-# if @REPLACE_MBRTOWC@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef mbrtowc
-#   define mbrtowc rpl_mbrtowc
-#  endif
-_GL_FUNCDECL_RPL (mbrtowc, size_t,
-                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
-_GL_CXXALIAS_RPL (mbrtowc, size_t,
-                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
-# else
-#  if !@HAVE_MBRTOWC@
-_GL_FUNCDECL_SYS (mbrtowc, size_t,
-                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
-#  endif
-_GL_CXXALIAS_SYS (mbrtowc, size_t,
-                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (mbrtowc);
-#elif defined GNULIB_POSIXCHECK
-# undef mbrtowc
-# if HAVE_RAW_DECL_MBRTOWC
-_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - "
-                 "use gnulib module mbrtowc for portability");
-# endif
-#endif
-
-
-/* Recognize a multibyte character.  */
-#if @GNULIB_MBRLEN@
-# if @REPLACE_MBRLEN@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef mbrlen
-#   define mbrlen rpl_mbrlen
-#  endif
-_GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
-_GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
-# else
-#  if !@HAVE_MBRLEN@
-_GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
-#  endif
-_GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (mbrlen);
-#elif defined GNULIB_POSIXCHECK
-# undef mbrlen
-# if HAVE_RAW_DECL_MBRLEN
-_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - "
-                 "use gnulib module mbrlen for portability");
-# endif
-#endif
-
-
-/* Convert a string to a wide string.  */
-#if @GNULIB_MBSRTOWCS@
-# if @REPLACE_MBSRTOWCS@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef mbsrtowcs
-#   define mbsrtowcs rpl_mbsrtowcs
-#  endif
-_GL_FUNCDECL_RPL (mbsrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-_GL_CXXALIAS_RPL (mbsrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t len,
-                   mbstate_t *ps));
-# else
-#  if !@HAVE_MBSRTOWCS@
-_GL_FUNCDECL_SYS (mbsrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-#  endif
-_GL_CXXALIAS_SYS (mbsrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t len,
-                   mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (mbsrtowcs);
-#elif defined GNULIB_POSIXCHECK
-# undef mbsrtowcs
-# if HAVE_RAW_DECL_MBSRTOWCS
-_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - "
-                 "use gnulib module mbsrtowcs for portability");
-# endif
-#endif
-
-
-/* Convert a string to a wide string.  */
-#if @GNULIB_MBSNRTOWCS@
-# if @REPLACE_MBSNRTOWCS@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef mbsnrtowcs
-#   define mbsnrtowcs rpl_mbsnrtowcs
-#  endif
-_GL_FUNCDECL_RPL (mbsnrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-_GL_CXXALIAS_RPL (mbsnrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps));
-# else
-#  if !@HAVE_MBSNRTOWCS@
-_GL_FUNCDECL_SYS (mbsnrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-#  endif
-_GL_CXXALIAS_SYS (mbsnrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (mbsnrtowcs);
-#elif defined GNULIB_POSIXCHECK
-# undef mbsnrtowcs
-# if HAVE_RAW_DECL_MBSNRTOWCS
-_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - "
-                 "use gnulib module mbsnrtowcs for portability");
-# endif
-#endif
-
-
-/* Convert a wide character to a multibyte character.  */
-#if @GNULIB_WCRTOMB@
-# if @REPLACE_WCRTOMB@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef wcrtomb
-#   define wcrtomb rpl_wcrtomb
-#  endif
-_GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
-_GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
-# else
-#  if !@HAVE_WCRTOMB@
-_GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
-#  endif
-_GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (wcrtomb);
-#elif defined GNULIB_POSIXCHECK
-# undef wcrtomb
-# if HAVE_RAW_DECL_WCRTOMB
-_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - "
-                 "use gnulib module wcrtomb for portability");
-# endif
-#endif
-
-
-/* Convert a wide string to a string.  */
-#if @GNULIB_WCSRTOMBS@
-# if @REPLACE_WCSRTOMBS@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef wcsrtombs
-#   define wcsrtombs rpl_wcsrtombs
-#  endif
-_GL_FUNCDECL_RPL (wcsrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-_GL_CXXALIAS_RPL (wcsrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t len,
-                   mbstate_t *ps));
-# else
-#  if !@HAVE_WCSRTOMBS@
-_GL_FUNCDECL_SYS (wcsrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-#  endif
-_GL_CXXALIAS_SYS (wcsrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t len,
-                   mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (wcsrtombs);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsrtombs
-# if HAVE_RAW_DECL_WCSRTOMBS
-_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - "
-                 "use gnulib module wcsrtombs for portability");
-# endif
-#endif
-
-
-/* Convert a wide string to a string.  */
-#if @GNULIB_WCSNRTOMBS@
-# if @REPLACE_WCSNRTOMBS@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef wcsnrtombs
-#   define wcsnrtombs rpl_wcsnrtombs
-#  endif
-_GL_FUNCDECL_RPL (wcsnrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-_GL_CXXALIAS_RPL (wcsnrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps));
-# else
-#  if !@HAVE_WCSNRTOMBS@
-_GL_FUNCDECL_SYS (wcsnrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-#  endif
-_GL_CXXALIAS_SYS (wcsnrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (wcsnrtombs);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsnrtombs
-# if HAVE_RAW_DECL_WCSNRTOMBS
-_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - "
-                 "use gnulib module wcsnrtombs for portability");
-# endif
-#endif
-
-
-/* Return the number of screen columns needed for WC.  */
-#if @GNULIB_WCWIDTH@
-# if @REPLACE_WCWIDTH@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef wcwidth
-#   define wcwidth rpl_wcwidth
-#  endif
-_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t));
-_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t));
-# else
-#  if !@HAVE_DECL_WCWIDTH@
-/* wcwidth exists but is not declared.  */
-_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t));
-#  endif
-_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t));
-# endif
-_GL_CXXALIASWARN (wcwidth);
-#elif defined GNULIB_POSIXCHECK
-# undef wcwidth
-# if HAVE_RAW_DECL_WCWIDTH
-_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - "
-                 "use gnulib module wcwidth for portability");
-# endif
-#endif
-
-
-#endif /* _GL_WCHAR_H */
-#endif /* _GL_WCHAR_H */
-#endif
diff --git a/gdb/go-exp.c b/gdb/go-exp.c
new file mode 100644
index 0000000..99421e5
--- /dev/null
+++ b/gdb/go-exp.c
@@ -0,0 +1,2976 @@
+/* A Bison parser, made by GNU Bison 1.875c.  */
+
+/* Skeleton parser for Yacc-like parsing with Bison,
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* As a special exception, when this file is copied by Bison into a
+   Bison output file, you may use that output file without restriction.
+   This special exception was added by the Free Software Foundation
+   in version 1.24 of Bison.  */
+
+/* Written by Richard Stallman by simplifying the original so called
+   ``semantic'' parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 0
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     INT = 258,
+     FLOAT = 259,
+     RAW_STRING = 260,
+     STRING = 261,
+     CHAR = 262,
+     NAME = 263,
+     TYPENAME = 264,
+     COMPLETE = 265,
+     NAME_OR_INT = 266,
+     TRUE_KEYWORD = 267,
+     FALSE_KEYWORD = 268,
+     STRUCT_KEYWORD = 269,
+     INTERFACE_KEYWORD = 270,
+     TYPE_KEYWORD = 271,
+     CHAN_KEYWORD = 272,
+     SIZEOF_KEYWORD = 273,
+     LEN_KEYWORD = 274,
+     CAP_KEYWORD = 275,
+     NEW_KEYWORD = 276,
+     IOTA_KEYWORD = 277,
+     NIL_KEYWORD = 278,
+     CONST_KEYWORD = 279,
+     DOTDOTDOT = 280,
+     ENTRY = 281,
+     ERROR = 282,
+     BYTE_KEYWORD = 283,
+     DOLLAR_VARIABLE = 284,
+     ASSIGN_MODIFY = 285,
+     ABOVE_COMMA = 286,
+     OROR = 287,
+     ANDAND = 288,
+     ANDNOT = 289,
+     NOTEQUAL = 290,
+     EQUAL = 291,
+     GEQ = 292,
+     LEQ = 293,
+     RSH = 294,
+     LSH = 295,
+     DECREMENT = 296,
+     INCREMENT = 297,
+     UNARY = 298,
+     LEFT_ARROW = 299
+   };
+#endif
+#define INT 258
+#define FLOAT 259
+#define RAW_STRING 260
+#define STRING 261
+#define CHAR 262
+#define NAME 263
+#define TYPENAME 264
+#define COMPLETE 265
+#define NAME_OR_INT 266
+#define TRUE_KEYWORD 267
+#define FALSE_KEYWORD 268
+#define STRUCT_KEYWORD 269
+#define INTERFACE_KEYWORD 270
+#define TYPE_KEYWORD 271
+#define CHAN_KEYWORD 272
+#define SIZEOF_KEYWORD 273
+#define LEN_KEYWORD 274
+#define CAP_KEYWORD 275
+#define NEW_KEYWORD 276
+#define IOTA_KEYWORD 277
+#define NIL_KEYWORD 278
+#define CONST_KEYWORD 279
+#define DOTDOTDOT 280
+#define ENTRY 281
+#define ERROR 282
+#define BYTE_KEYWORD 283
+#define DOLLAR_VARIABLE 284
+#define ASSIGN_MODIFY 285
+#define ABOVE_COMMA 286
+#define OROR 287
+#define ANDAND 288
+#define ANDNOT 289
+#define NOTEQUAL 290
+#define EQUAL 291
+#define GEQ 292
+#define LEQ 293
+#define RSH 294
+#define LSH 295
+#define DECREMENT 296
+#define INCREMENT 297
+#define UNARY 298
+#define LEFT_ARROW 299
+
+
+
+
+/* Copy the first part of user declarations.  */
+#line 52 "go-exp.y"
+
+
+#include "defs.h"
+#include "gdb_string.h"
+#include <ctype.h>
+#include "expression.h"
+#include "value.h"
+#include "parser-defs.h"
+#include "language.h"
+#include "c-lang.h"
+#include "go-lang.h"
+#include "bfd.h" /* Required by objfiles.h.  */
+#include "symfile.h" /* Required by objfiles.h.  */
+#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
+#include "charset.h"
+#include "block.h"
+
+#define parse_type builtin_type (parse_gdbarch)
+
+/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
+   as well as gratuitiously global symbol names, so we can have multiple
+   yacc generated parsers in gdb.  Note that these are only the variables
+   produced by yacc.  If other parser generators (bison, byacc, etc) produce
+   additional global names that conflict at link time, then those parser
+   generators need to be fixed instead of adding those names to this list.  */
+
+#define	yymaxdepth go_maxdepth
+#define	yyparse	go_parse_internal
+#define	yylex	go_lex
+#define	yyerror	go_error
+#define	yylval	go_lval
+#define	yychar	go_char
+#define	yydebug	go_debug
+#define	yypact	go_pact
+#define	yyr1	go_r1
+#define	yyr2	go_r2
+#define	yydef	go_def
+#define	yychk	go_chk
+#define	yypgo	go_pgo
+#define	yyact	go_act
+#define	yyexca	go_exca
+#define yyerrflag go_errflag
+#define yynerrs	go_nerrs
+#define	yyps	go_ps
+#define	yypv	go_pv
+#define	yys	go_s
+#define	yy_yys	go_yys
+#define	yystate	go_state
+#define	yytmp	go_tmp
+#define	yyv	go_v
+#define	yy_yyv	go_yyv
+#define	yyval	go_val
+#define	yylloc	go_lloc
+#define yyreds	go_reds		/* With YYDEBUG defined */
+#define yytoks	go_toks		/* With YYDEBUG defined */
+#define yyname	go_name		/* With YYDEBUG defined */
+#define yyrule	go_rule		/* With YYDEBUG defined */
+#define yylhs	go_yylhs
+#define yylen	go_yylen
+#define yydefred go_yydefred
+#define yydgoto	go_yydgoto
+#define yysindex go_yysindex
+#define yyrindex go_yyrindex
+#define yygindex go_yygindex
+#define yytable	 go_yytable
+#define yycheck	 go_yycheck
+
+#ifndef YYDEBUG
+#define	YYDEBUG 1		/* Default to yydebug support */
+#endif
+
+#define YYFPRINTF parser_fprintf
+
+int yyparse (void);
+
+static int yylex (void);
+
+void yyerror (char *);
+
+
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
+#line 138 "go-exp.y"
+typedef union YYSTYPE {
+    LONGEST lval;
+    struct {
+      LONGEST val;
+      struct type *type;
+    } typed_val_int;
+    struct {
+      DOUBLEST dval;
+      struct type *type;
+    } typed_val_float;
+    struct stoken sval;
+    struct symtoken ssym;
+    struct type *tval;
+    struct typed_stoken tsval;
+    struct ttype tsym;
+    int voidval;
+    enum exp_opcode opcode;
+    struct internalvar *ivar;
+    struct stoken_vector svec;
+  } YYSTYPE;
+/* Line 191 of yacc.c.  */
+#line 266 "go-exp.c"
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
+/* Copy the second part of user declarations.  */
+#line 159 "go-exp.y"
+
+/* YYSTYPE gets defined by %union.  */
+static int parse_number (char *, int, int, YYSTYPE *);
+static int parse_go_float (struct gdbarch *gdbarch, const char *p, int len,
+			   DOUBLEST *d, struct type **t);
+
+
+/* Line 214 of yacc.c.  */
+#line 284 "go-exp.c"
+
+#if ! defined (yyoverflow) || YYERROR_VERBOSE
+
+# ifndef YYFREE
+#  define YYFREE xfree
+# endif
+# ifndef YYMALLOC
+#  define YYMALLOC xmalloc
+# endif
+
+/* The parser invokes alloca or xmalloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   define YYSTACK_ALLOC alloca
+#  endif
+# else
+#  if defined (alloca) || defined (_ALLOCA_H)
+#   define YYSTACK_ALLOC alloca
+#  else
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning. */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+# else
+#  if defined (__STDC__) || defined (__cplusplus)
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   define YYSIZE_T size_t
+#  endif
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+# endif
+#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
+
+
+#if (! defined (yyoverflow) \
+     && (! defined (__cplusplus) \
+	 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  short yyss;
+  YYSTYPE yyvs;
+  };
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (short) + sizeof (YYSTYPE))				\
+      + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined (__GNUC__) && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)		\
+      do					\
+	{					\
+	  register YYSIZE_T yyi;		\
+	  for (yyi = 0; yyi < (Count); yyi++)	\
+	    (To)[yyi] = (From)[yyi];		\
+	}					\
+      while (0)
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack)					\
+    do									\
+      {									\
+	YYSIZE_T yynewbytes;						\
+	YYCOPY (&yyptr->Stack, Stack, yysize);				\
+	Stack = &yyptr->Stack;						\
+	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+	yyptr += yynewbytes / sizeof (*yyptr);				\
+      }									\
+    while (0)
+
+#endif
+
+#if defined (__STDC__) || defined (__cplusplus)
+   typedef signed char yysigned_char;
+#else
+   typedef short yysigned_char;
+#endif
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL  40
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   443
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS  68
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS  13
+/* YYNRULES -- Number of rules. */
+#define YYNRULES  69
+/* YYNRULES -- Number of states. */
+#define YYNSTATES  122
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   299
+
+#define YYTRANSLATE(YYX) 						\
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const unsigned char yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,    62,     2,     2,     2,    54,    39,     2,
+      60,    64,    52,    50,    31,    51,    58,    53,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    67,     2,
+      43,    33,    44,    34,    49,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,    59,     2,    63,    38,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,    65,    37,    66,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    32,    35,    36,    40,
+      41,    42,    45,    46,    47,    48,    55,    56,    57,    61
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const unsigned char yyprhs[] =
+{
+       0,     0,     3,     5,     7,     9,    11,    15,    18,    21,
+      24,    27,    30,    33,    36,    39,    43,    48,    52,    57,
+      58,    64,    66,    67,    69,    73,    75,    80,    85,    89,
+      93,    97,   101,   105,   109,   113,   117,   121,   125,   129,
+     133,   137,   141,   145,   149,   153,   157,   161,   165,   171,
+     175,   179,   181,   183,   185,   187,   189,   191,   196,   201,
+     203,   207,   209,   211,   213,   216,   218,   221,   223,   225
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const yysigned_char yyrhs[] =
+{
+      69,     0,    -1,    71,    -1,    70,    -1,    79,    -1,    72,
+      -1,    71,    31,    72,    -1,    52,    72,    -1,    39,    72,
+      -1,    51,    72,    -1,    50,    72,    -1,    62,    72,    -1,
+      38,    72,    -1,    72,    56,    -1,    72,    55,    -1,    72,
+      58,    80,    -1,    72,    58,    80,    10,    -1,    72,    58,
+      10,    -1,    72,    59,    71,    63,    -1,    -1,    72,    60,
+      73,    75,    64,    -1,    65,    -1,    -1,    72,    -1,    75,
+      31,    72,    -1,    66,    -1,    74,    79,    76,    72,    -1,
+      79,    60,    72,    64,    -1,    60,    71,    64,    -1,    72,
+      49,    72,    -1,    72,    52,    72,    -1,    72,    53,    72,
+      -1,    72,    54,    72,    -1,    72,    50,    72,    -1,    72,
+      51,    72,    -1,    72,    48,    72,    -1,    72,    47,    72,
+      -1,    72,    42,    72,    -1,    72,    41,    72,    -1,    72,
+      46,    72,    -1,    72,    45,    72,    -1,    72,    43,    72,
+      -1,    72,    44,    72,    -1,    72,    39,    72,    -1,    72,
+      38,    72,    -1,    72,    37,    72,    -1,    72,    36,    72,
+      -1,    72,    35,    72,    -1,    72,    34,    72,    67,    72,
+      -1,    72,    33,    72,    -1,    72,    30,    72,    -1,     3,
+      -1,     7,    -1,    11,    -1,     4,    -1,    78,    -1,    29,
+      -1,    18,    60,    79,    64,    -1,    18,    60,    72,    64,
+      -1,     6,    -1,    77,    50,     6,    -1,    77,    -1,    12,
+      -1,    13,    -1,    80,    26,    -1,    80,    -1,    52,    79,
+      -1,     9,    -1,    28,    -1,     8,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const unsigned short yyrline[] =
+{
+       0,   237,   237,   238,   241,   248,   249,   254,   258,   262,
+     266,   270,   274,   278,   282,   288,   294,   301,   311,   318,
+     315,   325,   329,   332,   336,   340,   344,   350,   356,   362,
+     366,   370,   374,   378,   382,   386,   390,   394,   398,   402,
+     406,   410,   414,   418,   422,   426,   430,   434,   438,   442,
+     446,   452,   459,   468,   481,   488,   491,   497,   509,   516,
+     533,   551,   562,   568,   574,   590,   645,   647,   654,   667
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE
+/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "INT", "FLOAT", "RAW_STRING", "STRING",
+  "CHAR", "NAME", "TYPENAME", "COMPLETE", "NAME_OR_INT", "TRUE_KEYWORD",
+  "FALSE_KEYWORD", "STRUCT_KEYWORD", "INTERFACE_KEYWORD", "TYPE_KEYWORD",
+  "CHAN_KEYWORD", "SIZEOF_KEYWORD", "LEN_KEYWORD", "CAP_KEYWORD",
+  "NEW_KEYWORD", "IOTA_KEYWORD", "NIL_KEYWORD", "CONST_KEYWORD",
+  "DOTDOTDOT", "ENTRY", "ERROR", "BYTE_KEYWORD", "DOLLAR_VARIABLE",
+  "ASSIGN_MODIFY", "','", "ABOVE_COMMA", "'='", "'?'", "OROR", "ANDAND",
+  "'|'", "'^'", "'&'", "ANDNOT", "NOTEQUAL", "EQUAL", "'<'", "'>'", "GEQ",
+  "LEQ", "RSH", "LSH", "'@'", "'+'", "'-'", "'*'", "'/'", "'%'",
+  "DECREMENT", "INCREMENT", "UNARY", "'.'", "'['", "'('", "LEFT_ARROW",
+  "'!'", "']'", "')'", "'{'", "'}'", "':'", "$accept", "start", "type_exp",
+  "exp1", "exp", "@1", "lcurly", "arglist", "rcurly", "string_exp",
+  "variable", "type", "name_not_typename", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const unsigned short yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,    44,   286,    61,    63,   287,   288,   124,    94,    38,
+     289,   290,   291,    60,    62,   292,   293,   294,   295,    64,
+      43,    45,    42,    47,    37,   296,   297,   298,    46,    91,
+      40,   299,    33,    93,    41,   123,   125,    58
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const unsigned char yyr1[] =
+{
+       0,    68,    69,    69,    70,    71,    71,    72,    72,    72,
+      72,    72,    72,    72,    72,    72,    72,    72,    72,    73,
+      72,    74,    75,    75,    75,    76,    72,    72,    72,    72,
+      72,    72,    72,    72,    72,    72,    72,    72,    72,    72,
+      72,    72,    72,    72,    72,    72,    72,    72,    72,    72,
+      72,    72,    72,    72,    72,    72,    72,    72,    72,    77,
+      77,    72,    72,    72,    78,    78,    79,    79,    79,    80
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const unsigned char yyr2[] =
+{
+       0,     2,     1,     1,     1,     1,     3,     2,     2,     2,
+       2,     2,     2,     2,     2,     3,     4,     3,     4,     0,
+       5,     1,     0,     1,     3,     1,     4,     4,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     5,     3,
+       3,     1,     1,     1,     1,     1,     1,     4,     4,     1,
+       3,     1,     1,     1,     2,     1,     2,     1,     1,     1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const unsigned char yydefact[] =
+{
+       0,    51,    54,    59,    52,    69,    67,    53,    62,    63,
+       0,    68,    56,     0,     0,     0,     0,     0,     0,     0,
+      21,     0,     3,     2,     5,     0,    61,    55,     4,    65,
+       0,    12,     0,     8,    10,     9,     7,    66,     0,    11,
+       1,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    14,    13,     0,     0,    19,     0,
+       0,     0,     0,    64,     0,     0,    28,     6,    50,    49,
+       0,    47,    46,    45,    44,    43,    38,    37,    41,    42,
+      40,    39,    36,    35,    29,    33,    34,    30,    31,    32,
+      17,    15,     0,    22,    66,    25,     0,    60,     0,    58,
+      57,     0,    16,    18,    23,     0,    26,    27,    48,     0,
+      20,    24
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const yysigned_char yydefgoto[] =
+{
+      -1,    21,    22,    23,    24,   103,    25,   115,   106,    26,
+      27,    32,    29
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -56
+static const short yypact[] =
+{
+      49,   -56,   -56,   -56,   -56,   -56,   -56,   -56,   -56,   -56,
+     -44,   -56,   -56,    49,    49,    49,    49,    49,    49,    49,
+     -56,    23,   -56,    34,   187,    45,   -23,   -56,     6,    46,
+      49,   -48,     6,   -48,   -48,   -48,   -48,     6,    38,   -48,
+     -56,    49,    49,    49,    49,    49,    49,    49,    49,    49,
+      49,    49,    49,    49,    49,    49,    49,    49,    49,    49,
+      49,    49,    49,    49,   -56,   -56,     5,    49,   -56,    45,
+       8,    65,    49,   -56,   123,   -55,   -56,   187,   187,   187,
+      88,   239,   263,   286,   308,   328,   346,   346,   360,   360,
+     360,   360,   372,   372,   383,   -34,   -34,   -48,   -48,   -48,
+     -56,    69,    33,    49,   -56,   -56,    49,   -56,   155,   -56,
+     -56,    49,   -56,   -56,   187,    39,   -48,   -56,   214,    49,
+     -56,   187
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yysigned_char yypgoto[] =
+{
+     -56,   -56,   -56,    -4,   -13,   -56,   -56,   -56,   -56,   -56,
+     -56,    51,     9
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -1
+static const unsigned char yytable[] =
+{
+      31,    33,    34,    35,    36,    72,    39,    64,    65,   110,
+      66,    67,    68,     5,    38,   100,    30,    74,    61,    62,
+      63,    64,    65,    40,    66,    67,    68,    71,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,    28,     1,     2,     6,     3,     4,     5,     6,   108,
+       7,     8,     9,   102,    41,    41,    72,    10,    37,    41,
+     119,   107,    73,    11,   105,   101,    70,    11,    12,   112,
+       0,    75,     0,     0,     0,     0,     0,    13,    14,     0,
+     114,     0,     0,   116,     0,     0,   113,    69,   118,    15,
+      16,    17,    76,   120,     0,     0,   121,     0,     0,    18,
+       0,    19,     0,     0,    20,     0,     0,     0,    42,     0,
+     104,    43,    44,    45,    46,    47,    48,    49,     0,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,     0,    66,    67,    68,     0,
+       0,     0,     0,    42,     0,   111,    43,    44,    45,    46,
+      47,    48,    49,     0,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+       0,    66,    67,    68,     0,    42,     0,   109,    43,    44,
+      45,    46,    47,    48,    49,     0,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,     0,    66,    67,    68,     0,    42,     0,   117,
+      43,    44,    45,    46,    47,    48,    49,     0,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,     0,    66,    67,    68,    44,    45,
+      46,    47,    48,    49,     0,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,     0,    66,    67,    68,    46,    47,    48,    49,     0,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,     0,    66,    67,    68,
+      47,    48,    49,     0,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+       0,    66,    67,    68,    48,    49,     0,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,     0,    66,    67,    68,    49,     0,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,     0,    66,    67,    68,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,     0,    66,    67,    68,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,     0,    66,    67,    68,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,     0,    66,    67,
+      68,    58,    59,    60,    61,    62,    63,    64,    65,     0,
+      66,    67,    68,    59,    60,    61,    62,    63,    64,    65,
+       0,    66,    67,    68
+};
+
+static const yysigned_char yycheck[] =
+{
+      13,    14,    15,    16,    17,    60,    19,    55,    56,    64,
+      58,    59,    60,     8,    18,    10,    60,    30,    52,    53,
+      54,    55,    56,     0,    58,    59,    60,    50,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,     0,     3,     4,     9,     6,     7,     8,     9,    72,
+      11,    12,    13,    67,    31,    31,    60,    18,    17,    31,
+      31,     6,    26,    28,    66,    66,    25,    28,    29,    10,
+      -1,    30,    -1,    -1,    -1,    -1,    -1,    38,    39,    -1,
+     103,    -1,    -1,   106,    -1,    -1,    63,    52,   111,    50,
+      51,    52,    64,    64,    -1,    -1,   119,    -1,    -1,    60,
+      -1,    62,    -1,    -1,    65,    -1,    -1,    -1,    30,    -1,
+      69,    33,    34,    35,    36,    37,    38,    39,    -1,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    -1,    58,    59,    60,    -1,
+      -1,    -1,    -1,    30,    -1,    67,    33,    34,    35,    36,
+      37,    38,    39,    -1,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      -1,    58,    59,    60,    -1,    30,    -1,    64,    33,    34,
+      35,    36,    37,    38,    39,    -1,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    -1,    58,    59,    60,    -1,    30,    -1,    64,
+      33,    34,    35,    36,    37,    38,    39,    -1,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    -1,    58,    59,    60,    34,    35,
+      36,    37,    38,    39,    -1,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    -1,    58,    59,    60,    36,    37,    38,    39,    -1,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    -1,    58,    59,    60,
+      37,    38,    39,    -1,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      -1,    58,    59,    60,    38,    39,    -1,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    -1,    58,    59,    60,    39,    -1,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    -1,    58,    59,    60,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    -1,    58,    59,    60,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    -1,    58,    59,    60,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    -1,    58,    59,
+      60,    49,    50,    51,    52,    53,    54,    55,    56,    -1,
+      58,    59,    60,    50,    51,    52,    53,    54,    55,    56,
+      -1,    58,    59,    60
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const unsigned char yystos[] =
+{
+       0,     3,     4,     6,     7,     8,     9,    11,    12,    13,
+      18,    28,    29,    38,    39,    50,    51,    52,    60,    62,
+      65,    69,    70,    71,    72,    74,    77,    78,    79,    80,
+      60,    72,    79,    72,    72,    72,    72,    79,    71,    72,
+       0,    31,    30,    33,    34,    35,    36,    37,    38,    39,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    58,    59,    60,    52,
+      79,    50,    60,    26,    72,    79,    64,    72,    72,    72,
+      72,    72,    72,    72,    72,    72,    72,    72,    72,    72,
+      72,    72,    72,    72,    72,    72,    72,    72,    72,    72,
+      10,    80,    71,    73,    79,    66,    76,     6,    72,    64,
+      64,    67,    10,    63,    72,    75,    72,    64,    72,    31,
+      64,    72
+};
+
+#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+# define YYSIZE_T __SIZE_TYPE__
+#endif
+#if ! defined (YYSIZE_T) && defined (size_t)
+# define YYSIZE_T size_t
+#endif
+#if ! defined (YYSIZE_T)
+# if defined (__STDC__) || defined (__cplusplus)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# endif
+#endif
+#if ! defined (YYSIZE_T)
+# define YYSIZE_T unsigned int
+#endif
+
+#define yyerrok		(yyerrstatus = 0)
+#define yyclearin	(yychar = YYEMPTY)
+#define YYEMPTY		(-2)
+#define YYEOF		0
+
+#define YYACCEPT	goto yyacceptlab
+#define YYABORT		goto yyabortlab
+#define YYERROR		goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+
+#define YYFAIL		goto yyerrlab
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)					\
+do								\
+  if (yychar == YYEMPTY && yylen == 1)				\
+    {								\
+      yychar = (Token);						\
+      yylval = (Value);						\
+      yytoken = YYTRANSLATE (yychar);				\
+      YYPOPSTACK;						\
+      goto yybackup;						\
+    }								\
+  else								\
+    { 								\
+      yyerror ("syntax error: cannot back up");\
+      YYERROR;							\
+    }								\
+while (0)
+
+#define YYTERROR	1
+#define YYERRCODE	256
+
+/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+   are run).  */
+
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)		\
+   ((Current).first_line   = (Rhs)[1].first_line,	\
+    (Current).first_column = (Rhs)[1].first_column,	\
+    (Current).last_line    = (Rhs)[N].last_line,	\
+    (Current).last_column  = (Rhs)[N].last_column)
+#endif
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)			\
+do {						\
+  if (yydebug)					\
+    YYFPRINTF Args;				\
+} while (0)
+
+# define YYDSYMPRINT(Args)			\
+do {						\
+  if (yydebug)					\
+    yysymprint Args;				\
+} while (0)
+
+# define YYDSYMPRINTF(Title, Token, Value, Location)		\
+do {								\
+  if (yydebug)							\
+    {								\
+      YYFPRINTF (stderr, "%s ", Title);				\
+      yysymprint (stderr, 					\
+                  Token, Value);	\
+      YYFPRINTF (stderr, "\n");					\
+    }								\
+} while (0)
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yy_stack_print (short *bottom, short *top)
+#else
+static void
+yy_stack_print (bottom, top)
+    short *bottom;
+    short *top;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (/* Nothing. */; bottom <= top; ++bottom)
+    YYFPRINTF (stderr, " %d", *bottom);
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)				\
+do {								\
+  if (yydebug)							\
+    yy_stack_print ((Bottom), (Top));				\
+} while (0)
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yy_reduce_print (int yyrule)
+#else
+static void
+yy_reduce_print (yyrule)
+    int yyrule;
+#endif
+{
+  int yyi;
+  unsigned int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
+             yyrule - 1, yylno);
+  /* Print the symbols being reduced, and their result.  */
+  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
+    YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
+  YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
+}
+
+# define YY_REDUCE_PRINT(Rule)		\
+do {					\
+  if (yydebug)				\
+    yy_reduce_print (Rule);		\
+} while (0)
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YYDSYMPRINT(Args)
+# define YYDSYMPRINTF(Title, Token, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef	YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
+# undef YYMAXDEPTH
+#endif
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+

+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined (__GLIBC__) && defined (_STRING_H)
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+static YYSIZE_T
+#   if defined (__STDC__) || defined (__cplusplus)
+yystrlen (const char *yystr)
+#   else
+yystrlen (yystr)
+     const char *yystr;
+#   endif
+{
+  register const char *yys = yystr;
+
+  while (*yys++ != '\0')
+    continue;
+
+  return yys - yystr - 1;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+static char *
+#   if defined (__STDC__) || defined (__cplusplus)
+yystpcpy (char *yydest, const char *yysrc)
+#   else
+yystpcpy (yydest, yysrc)
+     char *yydest;
+     const char *yysrc;
+#   endif
+{
+  register char *yyd = yydest;
+  register const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+#endif /* !YYERROR_VERBOSE */
+
+

+
+#if YYDEBUG
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yysymprint (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  /* Pacify ``unused variable'' warnings.  */
+  (void) yyvaluep;
+
+  if (yytype < YYNTOKENS)
+    {
+      YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+# ifdef YYPRINT
+      YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# endif
+    }
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  switch (yytype)
+    {
+      default:
+        break;
+    }
+  YYFPRINTF (yyoutput, ")");
+}
+
+#endif /* ! YYDEBUG */
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yydestruct (int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yytype, yyvaluep)
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  /* Pacify ``unused variable'' warnings.  */
+  (void) yyvaluep;
+
+  switch (yytype)
+    {
+
+      default:
+        break;
+    }
+}
+

+
+/* Prevent warnings from -Wmissing-prototypes.  */
+
+#ifdef YYPARSE_PARAM
+# if defined (__STDC__) || defined (__cplusplus)
+int yyparse (void *YYPARSE_PARAM);
+# else
+int yyparse ();
+# endif
+#else /* ! YYPARSE_PARAM */
+#if defined (__STDC__) || defined (__cplusplus)
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+/* The lookahead symbol.  */
+int yychar;
+
+/* The semantic value of the lookahead symbol.  */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far.  */
+int yynerrs;
+
+
+
+/*----------.
+| yyparse.  |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+# if defined (__STDC__) || defined (__cplusplus)
+int yyparse (void *YYPARSE_PARAM)
+# else
+int yyparse (YYPARSE_PARAM)
+  void *YYPARSE_PARAM;
+# endif
+#else /* ! YYPARSE_PARAM */
+#if defined (__STDC__) || defined (__cplusplus)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+  
+  register int yystate;
+  register int yyn;
+  int yyresult;
+  /* Number of tokens to shift before error messages enabled.  */
+  int yyerrstatus;
+  /* Lookahead token as an internal (translated) token number.  */
+  int yytoken = 0;
+
+  /* Three stacks and their tools:
+     `yyss': related to states,
+     `yyvs': related to semantic values,
+     `yyls': related to locations.
+
+     Refer to the stacks thru separate pointers, to allow yyoverflow
+     to xreallocate them elsewhere.  */
+
+  /* The state stack.  */
+  short	yyssa[YYINITDEPTH];
+  short *yyss = yyssa;
+  register short *yyssp;
+
+  /* The semantic value stack.  */
+  YYSTYPE yyvsa[YYINITDEPTH];
+  YYSTYPE *yyvs = yyvsa;
+  register YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK   (yyvsp--, yyssp--)
+
+  YYSIZE_T yystacksize = YYINITDEPTH;
+
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+
+  /* When reducing, the number of symbols on the RHS of the reduced
+     rule.  */
+  int yylen;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY;		/* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed. so pushing a state here evens the stacks.
+     */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+	/* Give user a chance to xreallocate the stack. Use copies of
+	   these so that the &'s don't force the real ones into
+	   memory.  */
+	YYSTYPE *yyvs1 = yyvs;
+	short *yyss1 = yyss;
+
+
+	/* Each stack pointer address is followed by the size of the
+	   data in use in that stack, in bytes.  This used to be a
+	   conditional around just the two extra args, but that might
+	   be undefined if yyoverflow is a macro.  */
+	yyoverflow ("parser stack overflow",
+		    &yyss1, yysize * sizeof (*yyssp),
+		    &yyvs1, yysize * sizeof (*yyvsp),
+
+		    &yystacksize);
+
+	yyss = yyss1;
+	yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyoverflowlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+	goto yyoverflowlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+	yystacksize = YYMAXDEPTH;
+
+      {
+	short *yyss1 = yyss;
+	union yyalloc *yyptr =
+	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+	if (! yyptr)
+	  goto yyoverflowlab;
+	YYSTACK_RELOCATE (yyss);
+	YYSTACK_RELOCATE (yyvs);
+
+#  undef YYSTACK_RELOCATE
+	if (yyss1 != yyssa)
+	  YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+		  (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+	YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+/* Do appropriate processing given the current state.  */
+/* Read a lookahead token if we need one and don't already have one.  */
+/* yyresume: */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+
+  yyn = yypact[yystate];
+  if (yyn == YYPACT_NINF)
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+	goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  /* Shift the lookahead token.  */
+  YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
+
+  /* Discard the token being shifted unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
+
+  *++yyvsp = yylval;
+
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 4:
+#line 242 "go-exp.y"
+    { write_exp_elt_opcode(OP_TYPE);
+			  write_exp_elt_type(yyvsp[0].tval);
+			  write_exp_elt_opcode(OP_TYPE); }
+    break;
+
+  case 6:
+#line 250 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_COMMA); }
+    break;
+
+  case 7:
+#line 255 "go-exp.y"
+    { write_exp_elt_opcode (UNOP_IND); }
+    break;
+
+  case 8:
+#line 259 "go-exp.y"
+    { write_exp_elt_opcode (UNOP_ADDR); }
+    break;
+
+  case 9:
+#line 263 "go-exp.y"
+    { write_exp_elt_opcode (UNOP_NEG); }
+    break;
+
+  case 10:
+#line 267 "go-exp.y"
+    { write_exp_elt_opcode (UNOP_PLUS); }
+    break;
+
+  case 11:
+#line 271 "go-exp.y"
+    { write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
+    break;
+
+  case 12:
+#line 275 "go-exp.y"
+    { write_exp_elt_opcode (UNOP_COMPLEMENT); }
+    break;
+
+  case 13:
+#line 279 "go-exp.y"
+    { write_exp_elt_opcode (UNOP_POSTINCREMENT); }
+    break;
+
+  case 14:
+#line 283 "go-exp.y"
+    { write_exp_elt_opcode (UNOP_POSTDECREMENT); }
+    break;
+
+  case 15:
+#line 289 "go-exp.y"
+    { write_exp_elt_opcode (STRUCTOP_STRUCT);
+			  write_exp_string (yyvsp[0].ssym.stoken);
+			  write_exp_elt_opcode (STRUCTOP_STRUCT); }
+    break;
+
+  case 16:
+#line 295 "go-exp.y"
+    { mark_struct_expression ();
+			  write_exp_elt_opcode (STRUCTOP_STRUCT);
+			  write_exp_string (yyvsp[-1].ssym.stoken);
+			  write_exp_elt_opcode (STRUCTOP_STRUCT); }
+    break;
+
+  case 17:
+#line 302 "go-exp.y"
+    { struct stoken s;
+			  mark_struct_expression ();
+			  write_exp_elt_opcode (STRUCTOP_STRUCT);
+			  s.ptr = "";
+			  s.length = 0;
+			  write_exp_string (s);
+			  write_exp_elt_opcode (STRUCTOP_STRUCT); }
+    break;
+
+  case 18:
+#line 312 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_SUBSCRIPT); }
+    break;
+
+  case 19:
+#line 318 "go-exp.y"
+    { start_arglist (); }
+    break;
+
+  case 20:
+#line 320 "go-exp.y"
+    { write_exp_elt_opcode (OP_FUNCALL);
+			  write_exp_elt_longcst ((LONGEST) end_arglist ());
+			  write_exp_elt_opcode (OP_FUNCALL); }
+    break;
+
+  case 21:
+#line 326 "go-exp.y"
+    { start_arglist (); }
+    break;
+
+  case 23:
+#line 333 "go-exp.y"
+    { arglist_len = 1; }
+    break;
+
+  case 24:
+#line 337 "go-exp.y"
+    { arglist_len++; }
+    break;
+
+  case 25:
+#line 341 "go-exp.y"
+    { yyval.lval = end_arglist () - 1; }
+    break;
+
+  case 26:
+#line 345 "go-exp.y"
+    { write_exp_elt_opcode (UNOP_MEMVAL);
+			  write_exp_elt_type (yyvsp[-2].tval);
+			  write_exp_elt_opcode (UNOP_MEMVAL); }
+    break;
+
+  case 27:
+#line 351 "go-exp.y"
+    { write_exp_elt_opcode (UNOP_CAST);
+			  write_exp_elt_type (yyvsp[-3].tval);
+			  write_exp_elt_opcode (UNOP_CAST); }
+    break;
+
+  case 28:
+#line 357 "go-exp.y"
+    { }
+    break;
+
+  case 29:
+#line 363 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_REPEAT); }
+    break;
+
+  case 30:
+#line 367 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_MUL); }
+    break;
+
+  case 31:
+#line 371 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_DIV); }
+    break;
+
+  case 32:
+#line 375 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_REM); }
+    break;
+
+  case 33:
+#line 379 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_ADD); }
+    break;
+
+  case 34:
+#line 383 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_SUB); }
+    break;
+
+  case 35:
+#line 387 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_LSH); }
+    break;
+
+  case 36:
+#line 391 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_RSH); }
+    break;
+
+  case 37:
+#line 395 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_EQUAL); }
+    break;
+
+  case 38:
+#line 399 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_NOTEQUAL); }
+    break;
+
+  case 39:
+#line 403 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_LEQ); }
+    break;
+
+  case 40:
+#line 407 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_GEQ); }
+    break;
+
+  case 41:
+#line 411 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_LESS); }
+    break;
+
+  case 42:
+#line 415 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_GTR); }
+    break;
+
+  case 43:
+#line 419 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_BITWISE_AND); }
+    break;
+
+  case 44:
+#line 423 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_BITWISE_XOR); }
+    break;
+
+  case 45:
+#line 427 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_BITWISE_IOR); }
+    break;
+
+  case 46:
+#line 431 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_LOGICAL_AND); }
+    break;
+
+  case 47:
+#line 435 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_LOGICAL_OR); }
+    break;
+
+  case 48:
+#line 439 "go-exp.y"
+    { write_exp_elt_opcode (TERNOP_COND); }
+    break;
+
+  case 49:
+#line 443 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_ASSIGN); }
+    break;
+
+  case 50:
+#line 447 "go-exp.y"
+    { write_exp_elt_opcode (BINOP_ASSIGN_MODIFY);
+			  write_exp_elt_opcode (yyvsp[-1].opcode);
+			  write_exp_elt_opcode (BINOP_ASSIGN_MODIFY); }
+    break;
+
+  case 51:
+#line 453 "go-exp.y"
+    { write_exp_elt_opcode (OP_LONG);
+			  write_exp_elt_type (yyvsp[0].typed_val_int.type);
+			  write_exp_elt_longcst ((LONGEST)(yyvsp[0].typed_val_int.val));
+			  write_exp_elt_opcode (OP_LONG); }
+    break;
+
+  case 52:
+#line 460 "go-exp.y"
+    {
+			  struct stoken_vector vec;
+			  vec.len = 1;
+			  vec.tokens = &yyvsp[0].tsval;
+			  write_exp_string_vector (yyvsp[0].tsval.type, &vec);
+			}
+    break;
+
+  case 53:
+#line 469 "go-exp.y"
+    { YYSTYPE val;
+			  parse_number (yyvsp[0].ssym.stoken.ptr, yyvsp[0].ssym.stoken.length,
+					0, &val);
+			  write_exp_elt_opcode (OP_LONG);
+			  write_exp_elt_type (val.typed_val_int.type);
+			  write_exp_elt_longcst ((LONGEST)
+						 val.typed_val_int.val);
+			  write_exp_elt_opcode (OP_LONG);
+			}
+    break;
+
+  case 54:
+#line 482 "go-exp.y"
+    { write_exp_elt_opcode (OP_DOUBLE);
+			  write_exp_elt_type (yyvsp[0].typed_val_float.type);
+			  write_exp_elt_dblcst (yyvsp[0].typed_val_float.dval);
+			  write_exp_elt_opcode (OP_DOUBLE); }
+    break;
+
+  case 56:
+#line 492 "go-exp.y"
+    {
+			  write_dollar_variable (yyvsp[0].sval);
+			}
+    break;
+
+  case 57:
+#line 498 "go-exp.y"
+    {
+			  /* TODO(dje): Go objects in structs.  */
+			  write_exp_elt_opcode (OP_LONG);
+			  /* TODO(dje): What's the right type here?  */
+			  write_exp_elt_type (parse_type->builtin_unsigned_int);
+			  CHECK_TYPEDEF (yyvsp[-1].tval);
+			  write_exp_elt_longcst ((LONGEST) TYPE_LENGTH (yyvsp[-1].tval));
+			  write_exp_elt_opcode (OP_LONG);
+			}
+    break;
+
+  case 58:
+#line 510 "go-exp.y"
+    {
+			  /* TODO(dje): Go objects in structs.  */
+			  write_exp_elt_opcode (UNOP_SIZEOF);
+			}
+    break;
+
+  case 59:
+#line 517 "go-exp.y"
+    {
+			  /* We copy the string here, and not in the
+			     lexer, to guarantee that we do not leak a
+			     string.  */
+			  /* Note that we NUL-terminate here, but just
+			     for convenience.  */
+			  struct typed_stoken *vec = XNEW (struct typed_stoken);
+			  yyval.svec.len = 1;
+			  yyval.svec.tokens = vec;
+
+			  vec->type = yyvsp[0].tsval.type;
+			  vec->length = yyvsp[0].tsval.length;
+			  vec->ptr = xmalloc (yyvsp[0].tsval.length + 1);
+			  memcpy (vec->ptr, yyvsp[0].tsval.ptr, yyvsp[0].tsval.length + 1);
+			}
+    break;
+
+  case 60:
+#line 534 "go-exp.y"
+    {
+			  /* Note that we NUL-terminate here, but just
+			     for convenience.  */
+			  char *p;
+			  ++yyval.svec.len;
+			  yyval.svec.tokens = xrealloc (yyval.svec.tokens,
+					       yyval.svec.len * sizeof (struct typed_stoken));
+
+			  p = xmalloc (yyvsp[0].tsval.length + 1);
+			  memcpy (p, yyvsp[0].tsval.ptr, yyvsp[0].tsval.length + 1);
+
+			  yyval.svec.tokens[yyval.svec.len - 1].type = yyvsp[0].tsval.type;
+			  yyval.svec.tokens[yyval.svec.len - 1].length = yyvsp[0].tsval.length;
+			  yyval.svec.tokens[yyval.svec.len - 1].ptr = p;
+			}
+    break;
+
+  case 61:
+#line 552 "go-exp.y"
+    {
+			  int i;
+
+			  write_exp_string_vector (0 /*always utf8*/, &yyvsp[0].svec);
+			  for (i = 0; i < yyvsp[0].svec.len; ++i)
+			    xfree (yyvsp[0].svec.tokens[i].ptr);
+			  xfree (yyvsp[0].svec.tokens);
+			}
+    break;
+
+  case 62:
+#line 563 "go-exp.y"
+    { write_exp_elt_opcode (OP_BOOL);
+			  write_exp_elt_longcst ((LONGEST) yyvsp[0].lval);
+			  write_exp_elt_opcode (OP_BOOL); }
+    break;
+
+  case 63:
+#line 569 "go-exp.y"
+    { write_exp_elt_opcode (OP_BOOL);
+			  write_exp_elt_longcst ((LONGEST) yyvsp[0].lval);
+			  write_exp_elt_opcode (OP_BOOL); }
+    break;
+
+  case 64:
+#line 575 "go-exp.y"
+    { struct symbol *sym = yyvsp[-1].ssym.sym;
+
+			  if (sym == NULL
+			      || !SYMBOL_IS_ARGUMENT (sym)
+			      || !symbol_read_needs_frame (sym))
+			    error (_("@entry can be used only for function "
+				     "parameters, not for \"%s\""),
+				   copy_name (yyvsp[-1].ssym.stoken));
+
+			  write_exp_elt_opcode (OP_VAR_ENTRY_VALUE);
+			  write_exp_elt_sym (sym);
+			  write_exp_elt_opcode (OP_VAR_ENTRY_VALUE);
+			}
+    break;
+
+  case 65:
+#line 591 "go-exp.y"
+    { struct symbol *sym = yyvsp[0].ssym.sym;
+
+			  if (sym)
+			    {
+			      if (symbol_read_needs_frame (sym))
+				{
+				  if (innermost_block == 0
+				      || contained_in (block_found,
+						       innermost_block))
+				    innermost_block = block_found;
+				}
+
+			      write_exp_elt_opcode (OP_VAR_VALUE);
+			      /* We want to use the selected frame, not
+				 another more inner frame which happens to
+				 be in the same block.  */
+			      write_exp_elt_block (NULL);
+			      write_exp_elt_sym (sym);
+			      write_exp_elt_opcode (OP_VAR_VALUE);
+			    }
+			  else if (yyvsp[0].ssym.is_a_field_of_this)
+			    {
+			      /* TODO(dje): Can we get here?
+				 E.g., via a mix of c++ and go?  */
+			      gdb_assert_not_reached ("go with `this' field");
+			    }
+			  else
+			    {
+			      struct minimal_symbol *msymbol;
+			      char *arg = copy_name (yyvsp[0].ssym.stoken);
+
+			      msymbol =
+				lookup_minimal_symbol (arg, NULL, NULL);
+			      if (msymbol != NULL)
+				write_exp_msymbol (msymbol);
+			      else if (!have_full_symbols ()
+				       && !have_partial_symbols ())
+				error (_("No symbol table is loaded.  "
+				       "Use the \"file\" command."));
+			      else
+				error (_("No symbol \"%s\" in current context."),
+				       copy_name (yyvsp[0].ssym.stoken));
+			    }
+			}
+    break;
+
+  case 66:
+#line 646 "go-exp.y"
+    { yyval.tval = lookup_pointer_type (yyvsp[0].tval); }
+    break;
+
+  case 67:
+#line 648 "go-exp.y"
+    { yyval.tval = yyvsp[0].tsym.type; }
+    break;
+
+  case 68:
+#line 655 "go-exp.y"
+    { yyval.tval = builtin_go_type (parse_gdbarch)
+			    ->builtin_uint8; }
+    break;
+
+
+    }
+
+/* Line 1000 of yacc.c.  */
+#line 1803 "go-exp.c"
+

+  yyvsp -= yylen;
+  yyssp -= yylen;
+
+
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if YYERROR_VERBOSE
+      yyn = yypact[yystate];
+
+      if (YYPACT_NINF < yyn && yyn < YYLAST)
+	{
+	  YYSIZE_T yysize = 0;
+	  int yytype = YYTRANSLATE (yychar);
+	  const char* yyprefix;
+	  char *yymsg;
+	  int yyx;
+
+	  /* Start YYX at -YYN if negative to avoid negative indexes in
+	     YYCHECK.  */
+	  int yyxbegin = yyn < 0 ? -yyn : 0;
+
+	  /* Stay within bounds of both yycheck and yytname.  */
+	  int yychecklim = YYLAST - yyn;
+	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+	  int yycount = 0;
+
+	  yyprefix = ", expecting ";
+	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+	      {
+		yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
+		yycount += 1;
+		if (yycount == 5)
+		  {
+		    yysize = 0;
+		    break;
+		  }
+	      }
+	  yysize += (sizeof ("syntax error, unexpected ")
+		     + yystrlen (yytname[yytype]));
+	  yymsg = (char *) YYSTACK_ALLOC (yysize);
+	  if (yymsg != 0)
+	    {
+	      char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
+	      yyp = yystpcpy (yyp, yytname[yytype]);
+
+	      if (yycount < 5)
+		{
+		  yyprefix = ", expecting ";
+		  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+		    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+		      {
+			yyp = yystpcpy (yyp, yyprefix);
+			yyp = yystpcpy (yyp, yytname[yyx]);
+			yyprefix = " or ";
+		      }
+		}
+	      yyerror (yymsg);
+	      YYSTACK_FREE (yymsg);
+	    }
+	  else
+	    yyerror ("syntax error; also virtual memory exhausted");
+	}
+      else
+#endif /* YYERROR_VERBOSE */
+	yyerror ("syntax error");
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse lookahead token after an
+	 error, discard it.  */
+
+      if (yychar <= YYEOF)
+        {
+          /* If at end of input, pop the error token,
+	     then the rest of the stack, then return failure.  */
+	  if (yychar == YYEOF)
+	     for (;;)
+	       {
+		 YYPOPSTACK;
+		 if (yyssp == yyss)
+		   YYABORT;
+		 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+		 yydestruct (yystos[*yyssp], yyvsp);
+	       }
+        }
+      else
+	{
+	  YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
+	  yydestruct (yytoken, &yylval);
+	  yychar = YYEMPTY;
+
+	}
+    }
+
+  /* Else will try to reuse lookahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+#ifdef __GNUC__
+  /* Pacify GCC when the user code never invokes YYERROR and the label
+     yyerrorlab therefore never appears in user code.  */
+  if (0)
+     goto yyerrorlab;
+#endif
+
+  yyvsp -= yylen;
+  yyssp -= yylen;
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+	{
+	  yyn += YYTERROR;
+	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+	    {
+	      yyn = yytable[yyn];
+	      if (0 < yyn)
+		break;
+	    }
+	}
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+	YYABORT;
+
+      YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+      yydestruct (yystos[yystate], yyvsp);
+      YYPOPSTACK;
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  YYDPRINTF ((stderr, "Shifting error token, "));
+
+  *++yyvsp = yylval;
+
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#ifndef yyoverflow
+/*----------------------------------------------.
+| yyoverflowlab -- parser overflow comes here.  |
+`----------------------------------------------*/
+yyoverflowlab:
+  yyerror ("parser stack overflow");
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+  return yyresult;
+}
+
+
+#line 677 "go-exp.y"
+
+
+/* Wrapper on parse_c_float to get the type right for Go.  */
+
+static int
+parse_go_float (struct gdbarch *gdbarch, const char *p, int len,
+		DOUBLEST *d, struct type **t)
+{
+  int result = parse_c_float (gdbarch, p, len, d, t);
+  const struct builtin_type *builtin_types = builtin_type (gdbarch);
+  const struct builtin_go_type *builtin_go_types = builtin_go_type (gdbarch);
+
+  if (*t == builtin_types->builtin_float)
+    *t = builtin_go_types->builtin_float32;
+  else if (*t == builtin_types->builtin_double)
+    *t = builtin_go_types->builtin_float64;
+
+  return result;
+}
+
+/* Take care of parsing a number (anything that starts with a digit).
+   Set yylval and return the token type; update lexptr.
+   LEN is the number of characters in it.  */
+
+/* FIXME: Needs some error checking for the float case.  */
+/* FIXME(dje): IWBN to use c-exp.y's parse_number if we could.
+   That will require moving the guts into a function that we both call
+   as our YYSTYPE is different than c-exp.y's  */
+
+static int
+parse_number (char *p, int len, int parsed_float, YYSTYPE *putithere)
+{
+  /* FIXME: Shouldn't these be unsigned?  We don't deal with negative values
+     here, and we do kind of silly things like cast to unsigned.  */
+  LONGEST n = 0;
+  LONGEST prevn = 0;
+  ULONGEST un;
+
+  int i = 0;
+  int c;
+  int base = input_radix;
+  int unsigned_p = 0;
+
+  /* Number of "L" suffixes encountered.  */
+  int long_p = 0;
+
+  /* We have found a "L" or "U" suffix.  */
+  int found_suffix = 0;
+
+  ULONGEST high_bit;
+  struct type *signed_type;
+  struct type *unsigned_type;
+
+  if (parsed_float)
+    {
+      if (! parse_go_float (parse_gdbarch, p, len,
+			    &putithere->typed_val_float.dval,
+			    &putithere->typed_val_float.type))
+	return ERROR;
+      return FLOAT;
+    }
+
+  /* Handle base-switching prefixes 0x, 0t, 0d, 0.  */
+  if (p[0] == '0')
+    switch (p[1])
+      {
+      case 'x':
+      case 'X':
+	if (len >= 3)
+	  {
+	    p += 2;
+	    base = 16;
+	    len -= 2;
+	  }
+	break;
+
+      case 'b':
+      case 'B':
+	if (len >= 3)
+	  {
+	    p += 2;
+	    base = 2;
+	    len -= 2;
+	  }
+	break;
+
+      case 't':
+      case 'T':
+      case 'd':
+      case 'D':
+	if (len >= 3)
+	  {
+	    p += 2;
+	    base = 10;
+	    len -= 2;
+	  }
+	break;
+
+      default:
+	base = 8;
+	break;
+      }
+
+  while (len-- > 0)
+    {
+      c = *p++;
+      if (c >= 'A' && c <= 'Z')
+	c += 'a' - 'A';
+      if (c != 'l' && c != 'u')
+	n *= base;
+      if (c >= '0' && c <= '9')
+	{
+	  if (found_suffix)
+	    return ERROR;
+	  n += i = c - '0';
+	}
+      else
+	{
+	  if (base > 10 && c >= 'a' && c <= 'f')
+	    {
+	      if (found_suffix)
+		return ERROR;
+	      n += i = c - 'a' + 10;
+	    }
+	  else if (c == 'l')
+	    {
+	      ++long_p;
+	      found_suffix = 1;
+	    }
+	  else if (c == 'u')
+	    {
+	      unsigned_p = 1;
+	      found_suffix = 1;
+	    }
+	  else
+	    return ERROR;	/* Char not a digit */
+	}
+      if (i >= base)
+	return ERROR;		/* Invalid digit in this base.  */
+
+      /* Portably test for overflow (only works for nonzero values, so make
+	 a second check for zero).  FIXME: Can't we just make n and prevn
+	 unsigned and avoid this?  */
+      if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
+	unsigned_p = 1;		/* Try something unsigned.  */
+
+      /* Portably test for unsigned overflow.
+	 FIXME: This check is wrong; for example it doesn't find overflow
+	 on 0x123456789 when LONGEST is 32 bits.  */
+      if (c != 'l' && c != 'u' && n != 0)
+	{
+	  if ((unsigned_p && (ULONGEST) prevn >= (ULONGEST) n))
+	    error (_("Numeric constant too large."));
+	}
+      prevn = n;
+    }
+
+  /* An integer constant is an int, a long, or a long long.  An L
+     suffix forces it to be long; an LL suffix forces it to be long
+     long.  If not forced to a larger size, it gets the first type of
+     the above that it fits in.  To figure out whether it fits, we
+     shift it right and see whether anything remains.  Note that we
+     can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one
+     operation, because many compilers will warn about such a shift
+     (which always produces a zero result).  Sometimes gdbarch_int_bit
+     or gdbarch_long_bit will be that big, sometimes not.  To deal with
+     the case where it is we just always shift the value more than
+     once, with fewer bits each time.  */
+
+  un = (ULONGEST)n >> 2;
+  if (long_p == 0
+      && (un >> (gdbarch_int_bit (parse_gdbarch) - 2)) == 0)
+    {
+      high_bit = ((ULONGEST)1) << (gdbarch_int_bit (parse_gdbarch) - 1);
+
+      /* A large decimal (not hex or octal) constant (between INT_MAX
+	 and UINT_MAX) is a long or unsigned long, according to ANSI,
+	 never an unsigned int, but this code treats it as unsigned
+	 int.  This probably should be fixed.  GCC gives a warning on
+	 such constants.  */
+
+      unsigned_type = parse_type->builtin_unsigned_int;
+      signed_type = parse_type->builtin_int;
+    }
+  else if (long_p <= 1
+	   && (un >> (gdbarch_long_bit (parse_gdbarch) - 2)) == 0)
+    {
+      high_bit = ((ULONGEST)1) << (gdbarch_long_bit (parse_gdbarch) - 1);
+      unsigned_type = parse_type->builtin_unsigned_long;
+      signed_type = parse_type->builtin_long;
+    }
+  else
+    {
+      int shift;
+      if (sizeof (ULONGEST) * HOST_CHAR_BIT
+	  < gdbarch_long_long_bit (parse_gdbarch))
+	/* A long long does not fit in a LONGEST.  */
+	shift = (sizeof (ULONGEST) * HOST_CHAR_BIT - 1);
+      else
+	shift = (gdbarch_long_long_bit (parse_gdbarch) - 1);
+      high_bit = (ULONGEST) 1 << shift;
+      unsigned_type = parse_type->builtin_unsigned_long_long;
+      signed_type = parse_type->builtin_long_long;
+    }
+
+   putithere->typed_val_int.val = n;
+
+   /* If the high bit of the worked out type is set then this number
+      has to be unsigned.  */
+
+   if (unsigned_p || (n & high_bit))
+     {
+       putithere->typed_val_int.type = unsigned_type;
+     }
+   else
+     {
+       putithere->typed_val_int.type = signed_type;
+     }
+
+   return INT;
+}
+
+/* Temporary obstack used for holding strings.  */
+static struct obstack tempbuf;
+static int tempbuf_init;
+
+/* Parse a string or character literal from TOKPTR.  The string or
+   character may be wide or unicode.  *OUTPTR is set to just after the
+   end of the literal in the input string.  The resulting token is
+   stored in VALUE.  This returns a token value, either STRING or
+   CHAR, depending on what was parsed.  *HOST_CHARS is set to the
+   number of host characters in the literal.  */
+
+static int
+parse_string_or_char (char *tokptr, char **outptr, struct typed_stoken *value,
+		      int *host_chars)
+{
+  int quote;
+
+  /* Build the gdb internal form of the input string in tempbuf.  Note
+     that the buffer is null byte terminated *only* for the
+     convenience of debugging gdb itself and printing the buffer
+     contents when the buffer contains no embedded nulls.  Gdb does
+     not depend upon the buffer being null byte terminated, it uses
+     the length string instead.  This allows gdb to handle C strings
+     (as well as strings in other languages) with embedded null
+     bytes */
+
+  if (!tempbuf_init)
+    tempbuf_init = 1;
+  else
+    obstack_free (&tempbuf, NULL);
+  obstack_init (&tempbuf);
+
+  /* Skip the quote.  */
+  quote = *tokptr;
+  ++tokptr;
+
+  *host_chars = 0;
+
+  while (*tokptr)
+    {
+      char c = *tokptr;
+      if (c == '\\')
+	{
+	  ++tokptr;
+	  *host_chars += c_parse_escape (&tokptr, &tempbuf);
+	}
+      else if (c == quote)
+	break;
+      else
+	{
+	  obstack_1grow (&tempbuf, c);
+	  ++tokptr;
+	  /* FIXME: this does the wrong thing with multi-byte host
+	     characters.  We could use mbrlen here, but that would
+	     make "set host-charset" a bit less useful.  */
+	  ++*host_chars;
+	}
+    }
+
+  if (*tokptr != quote)
+    {
+      if (quote == '"')
+	error (_("Unterminated string in expression."));
+      else
+	error (_("Unmatched single quote."));
+    }
+  ++tokptr;
+
+  value->type = C_STRING | (quote == '\'' ? C_CHAR : 0); /*FIXME*/
+  value->ptr = obstack_base (&tempbuf);
+  value->length = obstack_object_size (&tempbuf);
+
+  *outptr = tokptr;
+
+  return quote == '\'' ? CHAR : STRING;
+}
+
+struct token
+{
+  char *operator;
+  int token;
+  enum exp_opcode opcode;
+};
+
+static const struct token tokentab3[] =
+  {
+    {">>=", ASSIGN_MODIFY, BINOP_RSH},
+    {"<<=", ASSIGN_MODIFY, BINOP_LSH},
+    /*{"&^=", ASSIGN_MODIFY, BINOP_BITWISE_ANDNOT}, TODO */
+    {"...", DOTDOTDOT, OP_NULL},
+  };
+
+static const struct token tokentab2[] =
+  {
+    {"+=", ASSIGN_MODIFY, BINOP_ADD},
+    {"-=", ASSIGN_MODIFY, BINOP_SUB},
+    {"*=", ASSIGN_MODIFY, BINOP_MUL},
+    {"/=", ASSIGN_MODIFY, BINOP_DIV},
+    {"%=", ASSIGN_MODIFY, BINOP_REM},
+    {"|=", ASSIGN_MODIFY, BINOP_BITWISE_IOR},
+    {"&=", ASSIGN_MODIFY, BINOP_BITWISE_AND},
+    {"^=", ASSIGN_MODIFY, BINOP_BITWISE_XOR},
+    {"++", INCREMENT, BINOP_END},
+    {"--", DECREMENT, BINOP_END},
+    /*{"->", RIGHT_ARROW, BINOP_END}, Doesn't exist in Go.  */
+    {"<-", LEFT_ARROW, BINOP_END},
+    {"&&", ANDAND, BINOP_END},
+    {"||", OROR, BINOP_END},
+    {"<<", LSH, BINOP_END},
+    {">>", RSH, BINOP_END},
+    {"==", EQUAL, BINOP_END},
+    {"!=", NOTEQUAL, BINOP_END},
+    {"<=", LEQ, BINOP_END},
+    {">=", GEQ, BINOP_END},
+    /*{"&^", ANDNOT, BINOP_END}, TODO */
+  };
+
+/* Identifier-like tokens.  */
+static const struct token ident_tokens[] =
+  {
+    {"true", TRUE_KEYWORD, OP_NULL},
+    {"false", FALSE_KEYWORD, OP_NULL},
+    {"nil", NIL_KEYWORD, OP_NULL},
+    {"const", CONST_KEYWORD, OP_NULL},
+    {"struct", STRUCT_KEYWORD, OP_NULL},
+    {"type", TYPE_KEYWORD, OP_NULL},
+    {"interface", INTERFACE_KEYWORD, OP_NULL},
+    {"chan", CHAN_KEYWORD, OP_NULL},
+    {"byte", BYTE_KEYWORD, OP_NULL}, /* An alias of uint8.  */
+    {"len", LEN_KEYWORD, OP_NULL},
+    {"cap", CAP_KEYWORD, OP_NULL},
+    {"new", NEW_KEYWORD, OP_NULL},
+    {"iota", IOTA_KEYWORD, OP_NULL},
+  };
+
+/* This is set if a NAME token appeared at the very end of the input
+   string, with no whitespace separating the name from the EOF.  This
+   is used only when parsing to do field name completion.  */
+static int saw_name_at_eof;
+
+/* This is set if the previously-returned token was a structure
+   operator -- either '.' or ARROW.  This is used only when parsing to
+   do field name completion.  */
+static int last_was_structop;
+
+/* Read one token, getting characters through lexptr.  */
+
+static int
+lex_one_token (void)
+{
+  int c;
+  int namelen;
+  unsigned int i;
+  char *tokstart;
+  int saw_structop = last_was_structop;
+  char *copy;
+
+  last_was_structop = 0;
+
+ retry:
+
+  prev_lexptr = lexptr;
+
+  tokstart = lexptr;
+  /* See if it is a special token of length 3.  */
+  for (i = 0; i < sizeof (tokentab3) / sizeof (tokentab3[0]); i++)
+    if (strncmp (tokstart, tokentab3[i].operator, 3) == 0)
+      {
+	lexptr += 3;
+	yylval.opcode = tokentab3[i].opcode;
+	return tokentab3[i].token;
+      }
+
+  /* See if it is a special token of length 2.  */
+  for (i = 0; i < sizeof (tokentab2) / sizeof (tokentab2[0]); i++)
+    if (strncmp (tokstart, tokentab2[i].operator, 2) == 0)
+      {
+	lexptr += 2;
+	yylval.opcode = tokentab2[i].opcode;
+	/* NOTE: -> doesn't exist in Go, so we don't need to watch for
+	   setting last_was_structop here.  */
+	return tokentab2[i].token;
+      }
+
+  switch (c = *tokstart)
+    {
+    case 0:
+      if (saw_name_at_eof)
+	{
+	  saw_name_at_eof = 0;
+	  return COMPLETE;
+	}
+      else if (saw_structop)
+	return COMPLETE;
+      else
+        return 0;
+
+    case ' ':
+    case '\t':
+    case '\n':
+      lexptr++;
+      goto retry;
+
+    case '[':
+    case '(':
+      paren_depth++;
+      lexptr++;
+      return c;
+
+    case ']':
+    case ')':
+      if (paren_depth == 0)
+	return 0;
+      paren_depth--;
+      lexptr++;
+      return c;
+
+    case ',':
+      if (comma_terminates
+          && paren_depth == 0)
+	return 0;
+      lexptr++;
+      return c;
+
+    case '.':
+      /* Might be a floating point number.  */
+      if (lexptr[1] < '0' || lexptr[1] > '9')
+	{
+	  if (in_parse_field)
+	    last_was_structop = 1;
+	  goto symbol;		/* Nope, must be a symbol. */
+	}
+      /* FALL THRU into number case.  */
+
+    case '0':
+    case '1':
+    case '2':
+    case '3':
+    case '4':
+    case '5':
+    case '6':
+    case '7':
+    case '8':
+    case '9':
+      {
+	/* It's a number.  */
+	int got_dot = 0, got_e = 0, toktype;
+	char *p = tokstart;
+	int hex = input_radix > 10;
+
+	if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
+	  {
+	    p += 2;
+	    hex = 1;
+	  }
+
+	for (;; ++p)
+	  {
+	    /* This test includes !hex because 'e' is a valid hex digit
+	       and thus does not indicate a floating point number when
+	       the radix is hex.  */
+	    if (!hex && !got_e && (*p == 'e' || *p == 'E'))
+	      got_dot = got_e = 1;
+	    /* This test does not include !hex, because a '.' always indicates
+	       a decimal floating point number regardless of the radix.  */
+	    else if (!got_dot && *p == '.')
+	      got_dot = 1;
+	    else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
+		     && (*p == '-' || *p == '+'))
+	      /* This is the sign of the exponent, not the end of the
+		 number.  */
+	      continue;
+	    /* We will take any letters or digits.  parse_number will
+	       complain if past the radix, or if L or U are not final.  */
+	    else if ((*p < '0' || *p > '9')
+		     && ((*p < 'a' || *p > 'z')
+				  && (*p < 'A' || *p > 'Z')))
+	      break;
+	  }
+	toktype = parse_number (tokstart, p - tokstart, got_dot|got_e, &yylval);
+        if (toktype == ERROR)
+	  {
+	    char *err_copy = (char *) alloca (p - tokstart + 1);
+
+	    memcpy (err_copy, tokstart, p - tokstart);
+	    err_copy[p - tokstart] = 0;
+	    error (_("Invalid number \"%s\"."), err_copy);
+	  }
+	lexptr = p;
+	return toktype;
+      }
+
+    case '@':
+      {
+	char *p = &tokstart[1];
+	size_t len = strlen ("entry");
+
+	while (isspace (*p))
+	  p++;
+	if (strncmp (p, "entry", len) == 0 && !isalnum (p[len])
+	    && p[len] != '_')
+	  {
+	    lexptr = &p[len];
+	    return ENTRY;
+	  }
+      }
+      /* FALLTHRU */
+    case '+':
+    case '-':
+    case '*':
+    case '/':
+    case '%':
+    case '|':
+    case '&':
+    case '^':
+    case '~':
+    case '!':
+    case '<':
+    case '>':
+    case '?':
+    case ':':
+    case '=':
+    case '{':
+    case '}':
+    symbol:
+      lexptr++;
+      return c;
+
+    case '\'':
+    case '"':
+    case '`':
+      {
+	int host_len;
+	int result = parse_string_or_char (tokstart, &lexptr, &yylval.tsval,
+					   &host_len);
+	if (result == CHAR)
+	  {
+	    if (host_len == 0)
+	      error (_("Empty character constant."));
+	    else if (host_len > 2 && c == '\'')
+	      {
+		++tokstart;
+		namelen = lexptr - tokstart - 1;
+		goto tryname;
+	      }
+	    else if (host_len > 1)
+	      error (_("Invalid character constant."));
+	  }
+	return result;
+      }
+    }
+
+  if (!(c == '_' || c == '$'
+	|| (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
+    /* We must have come across a bad character (e.g. ';').  */
+    error (_("Invalid character '%c' in expression."), c);
+
+  /* It's a name.  See how long it is.  */
+  namelen = 0;
+  for (c = tokstart[namelen];
+       (c == '_' || c == '$' || (c >= '0' && c <= '9')
+	|| (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'));)
+    {
+      c = tokstart[++namelen];
+    }
+
+  /* The token "if" terminates the expression and is NOT removed from
+     the input stream.  It doesn't count if it appears in the
+     expansion of a macro.  */
+  if (namelen == 2
+      && tokstart[0] == 'i'
+      && tokstart[1] == 'f')
+    {
+      return 0;
+    }
+
+  /* For the same reason (breakpoint conditions), "thread N"
+     terminates the expression.  "thread" could be an identifier, but
+     an identifier is never followed by a number without intervening
+     punctuation.
+     Handle abbreviations of these, similarly to
+     breakpoint.c:find_condition_and_thread.
+     TODO: Watch for "goroutine" here?  */
+  if (namelen >= 1
+      && strncmp (tokstart, "thread", namelen) == 0
+      && (tokstart[namelen] == ' ' || tokstart[namelen] == '\t'))
+    {
+      char *p = tokstart + namelen + 1;
+      while (*p == ' ' || *p == '\t')
+	p++;
+      if (*p >= '0' && *p <= '9')
+	return 0;
+    }
+
+  lexptr += namelen;
+
+  tryname:
+
+  yylval.sval.ptr = tokstart;
+  yylval.sval.length = namelen;
+
+  /* Catch specific keywords.  */
+  copy = copy_name (yylval.sval);
+  for (i = 0; i < sizeof (ident_tokens) / sizeof (ident_tokens[0]); i++)
+    if (strcmp (copy, ident_tokens[i].operator) == 0)
+      {
+	/* It is ok to always set this, even though we don't always
+	   strictly need to.  */
+	yylval.opcode = ident_tokens[i].opcode;
+	return ident_tokens[i].token;
+      }
+
+  if (*tokstart == '$')
+    return DOLLAR_VARIABLE;
+
+  if (in_parse_field && *lexptr == '\0')
+    saw_name_at_eof = 1;
+  return NAME;
+}
+
+/* An object of this type is pushed on a FIFO by the "outer" lexer.  */
+typedef struct
+{
+  int token;
+  YYSTYPE value;
+} token_and_value;
+
+DEF_VEC_O (token_and_value);
+
+/* A FIFO of tokens that have been read but not yet returned to the
+   parser.  */
+static VEC (token_and_value) *token_fifo;
+
+/* Non-zero if the lexer should return tokens from the FIFO.  */
+static int popping;
+
+/* Temporary storage for yylex; this holds symbol names as they are
+   built up.  */
+static struct obstack name_obstack;
+
+/* Build "package.name" in name_obstack.
+   For convenience of the caller, the name is NUL-terminated,
+   but the NUL is not included in the recorded length.  */
+
+static struct stoken
+build_packaged_name (const char *package, int package_len,
+		     const char *name, int name_len)
+{
+  struct stoken result;
+
+  obstack_free (&name_obstack, obstack_base (&name_obstack));
+  obstack_grow (&name_obstack, package, package_len);
+  obstack_grow_str (&name_obstack, ".");
+  obstack_grow (&name_obstack, name, name_len);
+  obstack_grow (&name_obstack, "", 1);
+  result.ptr = obstack_base (&name_obstack);
+  result.length = obstack_object_size (&name_obstack) - 1;
+
+  return result;
+}
+
+/* Return non-zero if NAME is a package name.
+   BLOCK is the scope in which to interpret NAME; this can be NULL
+   to mean the global scope.  */
+
+static int
+package_name_p (const char *name, struct block *block)
+{
+  struct symbol *sym;
+  int is_a_field_of_this;
+
+  sym = lookup_symbol (name, block, STRUCT_DOMAIN, &is_a_field_of_this);
+
+  if (sym
+      && SYMBOL_CLASS (sym) == LOC_TYPEDEF
+      && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_MODULE)
+    return 1;
+
+  return 0;
+}
+
+/* Classify a (potential) function in the "unsafe" package.
+   We fold these into "keywords" to keep things simple, at least until
+   something more complex is warranted.  */
+
+static int
+classify_unsafe_function (struct stoken function_name)
+{
+  char *copy = copy_name (function_name);
+
+  if (strcmp (copy, "Sizeof") == 0)
+    {
+      yylval.sval = function_name;
+      return SIZEOF_KEYWORD;
+    }
+
+  error (_("Unknown function in `unsafe' package: %s"), copy);
+}
+
+/* Classify token(s) "name1.name2" where name1 is known to be a package.
+   The contents of the token are in `yylval'.
+   Updates yylval and returns the new token type.
+
+   The result is one of NAME, NAME_OR_INT, or TYPENAME.  */
+
+static int
+classify_packaged_name (struct block *block)
+{
+  char *copy;
+  struct symbol *sym;
+  int is_a_field_of_this = 0;
+
+  copy = copy_name (yylval.sval);
+
+  sym = lookup_symbol (copy, block, VAR_DOMAIN, &is_a_field_of_this);
+
+  if (sym)
+    {
+      yylval.ssym.sym = sym;
+      yylval.ssym.is_a_field_of_this = is_a_field_of_this;
+    }
+
+  return NAME;
+}
+
+/* Classify a NAME token.
+   The contents of the token are in `yylval'.
+   Updates yylval and returns the new token type.
+   BLOCK is the block in which lookups start; this can be NULL
+   to mean the global scope.
+
+   The result is one of NAME, NAME_OR_INT, or TYPENAME.  */
+
+static int
+classify_name (struct block *block)
+{
+  struct type *type;
+  struct symbol *sym;
+  char *copy;
+  int is_a_field_of_this = 0;
+
+  copy = copy_name (yylval.sval);
+
+  /* Try primitive types first so they win over bad/weird debug info.  */
+  type = language_lookup_primitive_type_by_name (parse_language,
+						 parse_gdbarch, copy);
+  if (type != NULL)
+    {
+      /* NOTE: We take advantage of the fact that yylval coming in was a
+	 NAME, and that struct ttype is a compatible extension of struct
+	 stoken, so yylval.tsym.stoken is already filled in.  */
+      yylval.tsym.type = type;
+      return TYPENAME;
+    }
+
+  /* TODO: What about other types?  */
+
+  sym = lookup_symbol (copy, block, VAR_DOMAIN, &is_a_field_of_this);
+
+  if (sym)
+    {
+      yylval.ssym.sym = sym;
+      yylval.ssym.is_a_field_of_this = is_a_field_of_this;
+      return NAME;
+    }
+
+  /* If we didn't find a symbol, look again in the current package.
+     This is to, e.g., make "p global_var" work without having to specify
+     the package name.  We intentionally only looks for objects in the
+     current package.  */
+
+  {
+    char *current_package_name = go_block_package_name (block);
+
+    if (current_package_name != NULL)
+      {
+	struct stoken sval =
+	  build_packaged_name (current_package_name,
+			       strlen (current_package_name),
+			       copy, strlen (copy));
+
+	xfree (current_package_name);
+	sym = lookup_symbol (sval.ptr, block, VAR_DOMAIN,
+			     &is_a_field_of_this);
+	if (sym)
+	  {
+	    yylval.ssym.stoken = sval;
+	    yylval.ssym.sym = sym;
+	    yylval.ssym.is_a_field_of_this = is_a_field_of_this;
+	    return NAME;
+	  }
+      }
+  }
+
+  /* Input names that aren't symbols but ARE valid hex numbers, when
+     the input radix permits them, can be names or numbers depending
+     on the parse.  Note we support radixes > 16 here.  */
+  if ((copy[0] >= 'a' && copy[0] < 'a' + input_radix - 10)
+      || (copy[0] >= 'A' && copy[0] < 'A' + input_radix - 10))
+    {
+      YYSTYPE newlval;	/* Its value is ignored.  */
+      int hextype = parse_number (copy, yylval.sval.length, 0, &newlval);
+      if (hextype == INT)
+	{
+	  yylval.ssym.sym = NULL;
+	  yylval.ssym.is_a_field_of_this = 0;
+	  return NAME_OR_INT;
+	}
+    }
+
+  yylval.ssym.sym = NULL;
+  yylval.ssym.is_a_field_of_this = 0;
+  return NAME;
+}
+
+/* This is taken from c-exp.y mostly to get something working.
+   The basic structure has been kept because we may yet need some of it.  */
+
+static int
+yylex (void)
+{
+  token_and_value current, next;
+
+  if (popping && !VEC_empty (token_and_value, token_fifo))
+    {
+      token_and_value tv = *VEC_index (token_and_value, token_fifo, 0);
+      VEC_ordered_remove (token_and_value, token_fifo, 0);
+      yylval = tv.value;
+      /* There's no need to fall through to handle package.name
+	 as that can never happen here.  In theory.  */
+      return tv.token;
+    }
+  popping = 0;
+
+  current.token = lex_one_token ();
+
+  /* TODO: Need a way to force specifying name1 as a package.
+     .name1.name2 ?  */
+
+  if (current.token != NAME)
+    return current.token;
+
+  /* See if we have "name1 . name2".  */
+
+  current.value = yylval;
+  next.token = lex_one_token ();
+  next.value = yylval;
+
+  if (next.token == '.')
+    {
+      token_and_value name2;
+
+      name2.token = lex_one_token ();
+      name2.value = yylval;
+
+      if (name2.token == NAME)
+	{
+	  /* Ok, we have "name1 . name2".  */
+	  char *copy;
+
+	  copy = copy_name (current.value.sval);
+
+	  if (strcmp (copy, "unsafe") == 0)
+	    {
+	      popping = 1;
+	      return classify_unsafe_function (name2.value.sval);
+	    }
+
+	  if (package_name_p (copy, expression_context_block))
+	    {
+	      popping = 1;
+	      yylval.sval = build_packaged_name (current.value.sval.ptr,
+						 current.value.sval.length,
+						 name2.value.sval.ptr,
+						 name2.value.sval.length);
+	      return classify_packaged_name (expression_context_block);
+	    }
+	}
+
+      VEC_safe_push (token_and_value, token_fifo, &next);
+      VEC_safe_push (token_and_value, token_fifo, &name2);
+    }
+  else
+    {
+      VEC_safe_push (token_and_value, token_fifo, &next);
+    }
+
+  /* If we arrive here we don't have a package-qualified name.  */
+
+  popping = 1;
+  yylval = current.value;
+  return classify_name (expression_context_block);
+}
+
+int
+go_parse (void)
+{
+  int result;
+  struct cleanup *back_to = make_cleanup (null_cleanup, NULL);
+
+  make_cleanup_restore_integer (&yydebug);
+  yydebug = parser_debug;
+
+  /* Initialize some state used by the lexer.  */
+  last_was_structop = 0;
+  saw_name_at_eof = 0;
+
+  VEC_free (token_and_value, token_fifo);
+  popping = 0;
+  obstack_init (&name_obstack);
+  make_cleanup_obstack_free (&name_obstack);
+
+  result = yyparse ();
+  do_cleanups (back_to);
+  return result;
+}
+
+void
+yyerror (char *msg)
+{
+  if (prev_lexptr)
+    lexptr = prev_lexptr;
+
+  error (_("A %s in expression, near `%s'."), (msg ? msg : "error"), lexptr);
+}
+
+
diff --git a/gdb/go-exp.y b/gdb/go-exp.y
new file mode 100644
index 0000000..c3171c3
--- /dev/null
+++ b/gdb/go-exp.y
@@ -0,0 +1,1623 @@
+/* YACC parser for Go expressions, for GDB.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* This file is derived from c-exp.y, p-exp.y.  */
+
+/* Parse a Go expression from text in a string,
+   and return the result as a struct expression pointer.
+   That structure contains arithmetic operations in reverse polish,
+   with constants represented by operations that are followed by special data.
+   See expression.h for the details of the format.
+   What is important here is that it can be built up sequentially
+   during the process of parsing; the lower levels of the tree always
+   come first in the result.
+
+   Note that malloc's and realloc's in this file are transformed to
+   xmalloc and xrealloc respectively by the same sed command in the
+   makefile that remaps any other malloc/realloc inserted by the parser
+   generator.  Doing this with #defines and trying to control the interaction
+   with include files (<malloc.h> and <stdlib.h> for example) just became
+   too messy, particularly when such includes can be inserted at random
+   times by the parser generator.  */
+
+/* Known bugs or limitations:
+
+   - Unicode
+   - &^
+   - '_' (blank identifier)
+   - automatic deref of pointers
+   - method expressions
+   - interfaces, channels, etc.
+
+   And lots of other things.
+   I'm sure there's some cleanup to do.
+*/
+
+%{
+
+#include "defs.h"
+#include "gdb_string.h"
+#include <ctype.h>
+#include "expression.h"
+#include "value.h"
+#include "parser-defs.h"
+#include "language.h"
+#include "c-lang.h"
+#include "go-lang.h"
+#include "bfd.h" /* Required by objfiles.h.  */
+#include "symfile.h" /* Required by objfiles.h.  */
+#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
+#include "charset.h"
+#include "block.h"
+
+#define parse_type builtin_type (parse_gdbarch)
+
+/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
+   as well as gratuitiously global symbol names, so we can have multiple
+   yacc generated parsers in gdb.  Note that these are only the variables
+   produced by yacc.  If other parser generators (bison, byacc, etc) produce
+   additional global names that conflict at link time, then those parser
+   generators need to be fixed instead of adding those names to this list.  */
+
+#define	yymaxdepth go_maxdepth
+#define	yyparse	go_parse_internal
+#define	yylex	go_lex
+#define	yyerror	go_error
+#define	yylval	go_lval
+#define	yychar	go_char
+#define	yydebug	go_debug
+#define	yypact	go_pact
+#define	yyr1	go_r1
+#define	yyr2	go_r2
+#define	yydef	go_def
+#define	yychk	go_chk
+#define	yypgo	go_pgo
+#define	yyact	go_act
+#define	yyexca	go_exca
+#define yyerrflag go_errflag
+#define yynerrs	go_nerrs
+#define	yyps	go_ps
+#define	yypv	go_pv
+#define	yys	go_s
+#define	yy_yys	go_yys
+#define	yystate	go_state
+#define	yytmp	go_tmp
+#define	yyv	go_v
+#define	yy_yyv	go_yyv
+#define	yyval	go_val
+#define	yylloc	go_lloc
+#define yyreds	go_reds		/* With YYDEBUG defined */
+#define yytoks	go_toks		/* With YYDEBUG defined */
+#define yyname	go_name		/* With YYDEBUG defined */
+#define yyrule	go_rule		/* With YYDEBUG defined */
+#define yylhs	go_yylhs
+#define yylen	go_yylen
+#define yydefred go_yydefred
+#define yydgoto	go_yydgoto
+#define yysindex go_yysindex
+#define yyrindex go_yyrindex
+#define yygindex go_yygindex
+#define yytable	 go_yytable
+#define yycheck	 go_yycheck
+
+#ifndef YYDEBUG
+#define	YYDEBUG 1		/* Default to yydebug support */
+#endif
+
+#define YYFPRINTF parser_fprintf
+
+int yyparse (void);
+
+static int yylex (void);
+
+void yyerror (char *);
+
+%}
+
+/* Although the yacc "value" of an expression is not used,
+   since the result is stored in the structure being created,
+   other node types do have values.  */
+
+%union
+  {
+    LONGEST lval;
+    struct {
+      LONGEST val;
+      struct type *type;
+    } typed_val_int;
+    struct {
+      DOUBLEST dval;
+      struct type *type;
+    } typed_val_float;
+    struct stoken sval;
+    struct symtoken ssym;
+    struct type *tval;
+    struct typed_stoken tsval;
+    struct ttype tsym;
+    int voidval;
+    enum exp_opcode opcode;
+    struct internalvar *ivar;
+    struct stoken_vector svec;
+  }
+
+%{
+/* YYSTYPE gets defined by %union.  */
+static int parse_number (char *, int, int, YYSTYPE *);
+static int parse_go_float (struct gdbarch *gdbarch, const char *p, int len,
+			   DOUBLEST *d, struct type **t);
+%}
+
+%type <voidval> exp exp1 type_exp start variable lcurly
+%type <lval> rcurly
+%type <tval> type
+
+%token <typed_val_int> INT
+%token <typed_val_float> FLOAT
+
+/* Both NAME and TYPENAME tokens represent symbols in the input,
+   and both convey their data as strings.
+   But a TYPENAME is a string that happens to be defined as a type
+   or builtin type name (such as int or char)
+   and a NAME is any other symbol.
+   Contexts where this distinction is not important can use the
+   nonterminal "name", which matches either NAME or TYPENAME.  */
+
+%token <tsval> RAW_STRING
+%token <tsval> STRING
+%token <tsval> CHAR
+%token <ssym> NAME
+%token <tsym> TYPENAME /* Not TYPE_NAME cus already taken.  */
+%token <voidval> COMPLETE
+/*%type <sval> name*/
+%type <svec> string_exp
+%type <ssym> name_not_typename
+
+/* A NAME_OR_INT is a symbol which is not known in the symbol table,
+   but which would parse as a valid number in the current input radix.
+   E.g. "c" when input_radix==16.  Depending on the parse, it will be
+   turned into a name or into a number.  */
+%token <ssym> NAME_OR_INT
+
+%token <lval> TRUE_KEYWORD FALSE_KEYWORD
+%token STRUCT_KEYWORD INTERFACE_KEYWORD TYPE_KEYWORD CHAN_KEYWORD
+%token SIZEOF_KEYWORD
+%token LEN_KEYWORD CAP_KEYWORD
+%token NEW_KEYWORD
+%token IOTA_KEYWORD NIL_KEYWORD
+%token CONST_KEYWORD
+%token DOTDOTDOT
+%token ENTRY
+%token ERROR
+
+/* Special type cases.  */
+%token BYTE_KEYWORD /* An alias of uint8.  */
+
+%token <sval> DOLLAR_VARIABLE
+
+%token <opcode> ASSIGN_MODIFY
+
+%left ','
+%left ABOVE_COMMA
+%right '=' ASSIGN_MODIFY
+%right '?'
+%left OROR
+%left ANDAND
+%left '|'
+%left '^'
+%left '&'
+%left ANDNOT
+%left EQUAL NOTEQUAL
+%left '<' '>' LEQ GEQ
+%left LSH RSH
+%left '@'
+%left '+' '-'
+%left '*' '/' '%'
+%right UNARY INCREMENT DECREMENT
+%right LEFT_ARROW '.' '[' '('
+
+

+%%
+
+start   :	exp1
+	|	type_exp
+	;
+
+type_exp:	type
+			{ write_exp_elt_opcode(OP_TYPE);
+			  write_exp_elt_type($1);
+			  write_exp_elt_opcode(OP_TYPE); }
+	;
+
+/* Expressions, including the comma operator.  */
+exp1	:	exp
+	|	exp1 ',' exp
+			{ write_exp_elt_opcode (BINOP_COMMA); }
+	;
+
+/* Expressions, not including the comma operator.  */
+exp	:	'*' exp    %prec UNARY
+			{ write_exp_elt_opcode (UNOP_IND); }
+	;
+
+exp	:	'&' exp    %prec UNARY
+			{ write_exp_elt_opcode (UNOP_ADDR); }
+	;
+
+exp	:	'-' exp    %prec UNARY
+			{ write_exp_elt_opcode (UNOP_NEG); }
+	;
+
+exp	:	'+' exp    %prec UNARY
+			{ write_exp_elt_opcode (UNOP_PLUS); }
+	;
+
+exp	:	'!' exp    %prec UNARY
+			{ write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
+	;
+
+exp	:	'^' exp    %prec UNARY
+			{ write_exp_elt_opcode (UNOP_COMPLEMENT); }
+	;
+
+exp	:	exp INCREMENT    %prec UNARY
+			{ write_exp_elt_opcode (UNOP_POSTINCREMENT); }
+	;
+
+exp	:	exp DECREMENT    %prec UNARY
+			{ write_exp_elt_opcode (UNOP_POSTDECREMENT); }
+	;
+
+/* foo->bar is not in Go.  May want as a gdb extension.  Later.  */
+
+exp	:	exp '.' name_not_typename
+			{ write_exp_elt_opcode (STRUCTOP_STRUCT);
+			  write_exp_string ($3.stoken);
+			  write_exp_elt_opcode (STRUCTOP_STRUCT); }
+	;
+
+exp	:	exp '.' name_not_typename COMPLETE
+			{ mark_struct_expression ();
+			  write_exp_elt_opcode (STRUCTOP_STRUCT);
+			  write_exp_string ($3.stoken);
+			  write_exp_elt_opcode (STRUCTOP_STRUCT); }
+	;
+
+exp	:	exp '.' COMPLETE
+			{ struct stoken s;
+			  mark_struct_expression ();
+			  write_exp_elt_opcode (STRUCTOP_STRUCT);
+			  s.ptr = "";
+			  s.length = 0;
+			  write_exp_string (s);
+			  write_exp_elt_opcode (STRUCTOP_STRUCT); }
+	;
+
+exp	:	exp '[' exp1 ']'
+			{ write_exp_elt_opcode (BINOP_SUBSCRIPT); }
+	;
+
+exp	:	exp '('
+			/* This is to save the value of arglist_len
+			   being accumulated by an outer function call.  */
+			{ start_arglist (); }
+		arglist ')'	%prec LEFT_ARROW
+			{ write_exp_elt_opcode (OP_FUNCALL);
+			  write_exp_elt_longcst ((LONGEST) end_arglist ());
+			  write_exp_elt_opcode (OP_FUNCALL); }
+	;
+
+lcurly	:	'{'
+			{ start_arglist (); }
+	;
+
+arglist	:
+	;
+
+arglist	:	exp
+			{ arglist_len = 1; }
+	;
+
+arglist	:	arglist ',' exp   %prec ABOVE_COMMA
+			{ arglist_len++; }
+	;
+
+rcurly	:	'}'
+			{ $$ = end_arglist () - 1; }
+	;
+
+exp	:	lcurly type rcurly exp  %prec UNARY
+			{ write_exp_elt_opcode (UNOP_MEMVAL);
+			  write_exp_elt_type ($2);
+			  write_exp_elt_opcode (UNOP_MEMVAL); }
+	;
+
+exp	:	type '(' exp ')'  %prec UNARY
+			{ write_exp_elt_opcode (UNOP_CAST);
+			  write_exp_elt_type ($1);
+			  write_exp_elt_opcode (UNOP_CAST); }
+	;
+
+exp	:	'(' exp1 ')'
+			{ }
+	;
+
+/* Binary operators in order of decreasing precedence.  */
+
+exp	:	exp '@' exp
+			{ write_exp_elt_opcode (BINOP_REPEAT); }
+	;
+
+exp	:	exp '*' exp
+			{ write_exp_elt_opcode (BINOP_MUL); }
+	;
+
+exp	:	exp '/' exp
+			{ write_exp_elt_opcode (BINOP_DIV); }
+	;
+
+exp	:	exp '%' exp
+			{ write_exp_elt_opcode (BINOP_REM); }
+	;
+
+exp	:	exp '+' exp
+			{ write_exp_elt_opcode (BINOP_ADD); }
+	;
+
+exp	:	exp '-' exp
+			{ write_exp_elt_opcode (BINOP_SUB); }
+	;
+
+exp	:	exp LSH exp
+			{ write_exp_elt_opcode (BINOP_LSH); }
+	;
+
+exp	:	exp RSH exp
+			{ write_exp_elt_opcode (BINOP_RSH); }
+	;
+
+exp	:	exp EQUAL exp
+			{ write_exp_elt_opcode (BINOP_EQUAL); }
+	;
+
+exp	:	exp NOTEQUAL exp
+			{ write_exp_elt_opcode (BINOP_NOTEQUAL); }
+	;
+
+exp	:	exp LEQ exp
+			{ write_exp_elt_opcode (BINOP_LEQ); }
+	;
+
+exp	:	exp GEQ exp
+			{ write_exp_elt_opcode (BINOP_GEQ); }
+	;
+
+exp	:	exp '<' exp
+			{ write_exp_elt_opcode (BINOP_LESS); }
+	;
+
+exp	:	exp '>' exp
+			{ write_exp_elt_opcode (BINOP_GTR); }
+	;
+
+exp	:	exp '&' exp
+			{ write_exp_elt_opcode (BINOP_BITWISE_AND); }
+	;
+
+exp	:	exp '^' exp
+			{ write_exp_elt_opcode (BINOP_BITWISE_XOR); }
+	;
+
+exp	:	exp '|' exp
+			{ write_exp_elt_opcode (BINOP_BITWISE_IOR); }
+	;
+
+exp	:	exp ANDAND exp
+			{ write_exp_elt_opcode (BINOP_LOGICAL_AND); }
+	;
+
+exp	:	exp OROR exp
+			{ write_exp_elt_opcode (BINOP_LOGICAL_OR); }
+	;
+
+exp	:	exp '?' exp ':' exp	%prec '?'
+			{ write_exp_elt_opcode (TERNOP_COND); }
+	;
+
+exp	:	exp '=' exp
+			{ write_exp_elt_opcode (BINOP_ASSIGN); }
+	;
+
+exp	:	exp ASSIGN_MODIFY exp
+			{ write_exp_elt_opcode (BINOP_ASSIGN_MODIFY);
+			  write_exp_elt_opcode ($2);
+			  write_exp_elt_opcode (BINOP_ASSIGN_MODIFY); }
+	;
+
+exp	:	INT
+			{ write_exp_elt_opcode (OP_LONG);
+			  write_exp_elt_type ($1.type);
+			  write_exp_elt_longcst ((LONGEST)($1.val));
+			  write_exp_elt_opcode (OP_LONG); }
+	;
+
+exp	:	CHAR
+			{
+			  struct stoken_vector vec;
+			  vec.len = 1;
+			  vec.tokens = &$1;
+			  write_exp_string_vector ($1.type, &vec);
+			}
+	;
+
+exp	:	NAME_OR_INT
+			{ YYSTYPE val;
+			  parse_number ($1.stoken.ptr, $1.stoken.length,
+					0, &val);
+			  write_exp_elt_opcode (OP_LONG);
+			  write_exp_elt_type (val.typed_val_int.type);
+			  write_exp_elt_longcst ((LONGEST)
+						 val.typed_val_int.val);
+			  write_exp_elt_opcode (OP_LONG);
+			}
+	;
+
+
+exp	:	FLOAT
+			{ write_exp_elt_opcode (OP_DOUBLE);
+			  write_exp_elt_type ($1.type);
+			  write_exp_elt_dblcst ($1.dval);
+			  write_exp_elt_opcode (OP_DOUBLE); }
+	;
+
+exp	:	variable
+	;
+
+exp	:	DOLLAR_VARIABLE
+			{
+			  write_dollar_variable ($1);
+			}
+	;
+
+exp	:	SIZEOF_KEYWORD '(' type ')'  %prec UNARY
+			{
+			  /* TODO(dje): Go objects in structs.  */
+			  write_exp_elt_opcode (OP_LONG);
+			  /* TODO(dje): What's the right type here?  */
+			  write_exp_elt_type (parse_type->builtin_unsigned_int);
+			  CHECK_TYPEDEF ($3);
+			  write_exp_elt_longcst ((LONGEST) TYPE_LENGTH ($3));
+			  write_exp_elt_opcode (OP_LONG);
+			}
+	;
+
+exp	:	SIZEOF_KEYWORD  '(' exp ')'  %prec UNARY
+			{
+			  /* TODO(dje): Go objects in structs.  */
+			  write_exp_elt_opcode (UNOP_SIZEOF);
+			}
+
+string_exp:
+		STRING
+			{
+			  /* We copy the string here, and not in the
+			     lexer, to guarantee that we do not leak a
+			     string.  */
+			  /* Note that we NUL-terminate here, but just
+			     for convenience.  */
+			  struct typed_stoken *vec = XNEW (struct typed_stoken);
+			  $$.len = 1;
+			  $$.tokens = vec;
+
+			  vec->type = $1.type;
+			  vec->length = $1.length;
+			  vec->ptr = malloc ($1.length + 1);
+			  memcpy (vec->ptr, $1.ptr, $1.length + 1);
+			}
+
+	|	string_exp '+' STRING
+			{
+			  /* Note that we NUL-terminate here, but just
+			     for convenience.  */
+			  char *p;
+			  ++$$.len;
+			  $$.tokens = realloc ($$.tokens,
+					       $$.len * sizeof (struct typed_stoken));
+
+			  p = malloc ($3.length + 1);
+			  memcpy (p, $3.ptr, $3.length + 1);
+
+			  $$.tokens[$$.len - 1].type = $3.type;
+			  $$.tokens[$$.len - 1].length = $3.length;
+			  $$.tokens[$$.len - 1].ptr = p;
+			}
+	;
+
+exp	:	string_exp  %prec ABOVE_COMMA
+			{
+			  int i;
+
+			  write_exp_string_vector (0 /*always utf8*/, &$1);
+			  for (i = 0; i < $1.len; ++i)
+			    free ($1.tokens[i].ptr);
+			  free ($1.tokens);
+			}
+	;
+
+exp	:	TRUE_KEYWORD
+			{ write_exp_elt_opcode (OP_BOOL);
+			  write_exp_elt_longcst ((LONGEST) $1);
+			  write_exp_elt_opcode (OP_BOOL); }
+	;
+
+exp	:	FALSE_KEYWORD
+			{ write_exp_elt_opcode (OP_BOOL);
+			  write_exp_elt_longcst ((LONGEST) $1);
+			  write_exp_elt_opcode (OP_BOOL); }
+	;
+
+variable:	name_not_typename ENTRY
+			{ struct symbol *sym = $1.sym;
+
+			  if (sym == NULL
+			      || !SYMBOL_IS_ARGUMENT (sym)
+			      || !symbol_read_needs_frame (sym))
+			    error (_("@entry can be used only for function "
+				     "parameters, not for \"%s\""),
+				   copy_name ($1.stoken));
+
+			  write_exp_elt_opcode (OP_VAR_ENTRY_VALUE);
+			  write_exp_elt_sym (sym);
+			  write_exp_elt_opcode (OP_VAR_ENTRY_VALUE);
+			}
+	;
+
+variable:	name_not_typename
+			{ struct symbol *sym = $1.sym;
+
+			  if (sym)
+			    {
+			      if (symbol_read_needs_frame (sym))
+				{
+				  if (innermost_block == 0
+				      || contained_in (block_found,
+						       innermost_block))
+				    innermost_block = block_found;
+				}
+
+			      write_exp_elt_opcode (OP_VAR_VALUE);
+			      /* We want to use the selected frame, not
+				 another more inner frame which happens to
+				 be in the same block.  */
+			      write_exp_elt_block (NULL);
+			      write_exp_elt_sym (sym);
+			      write_exp_elt_opcode (OP_VAR_VALUE);
+			    }
+			  else if ($1.is_a_field_of_this)
+			    {
+			      /* TODO(dje): Can we get here?
+				 E.g., via a mix of c++ and go?  */
+			      gdb_assert_not_reached ("go with `this' field");
+			    }
+			  else
+			    {
+			      struct minimal_symbol *msymbol;
+			      char *arg = copy_name ($1.stoken);
+
+			      msymbol =
+				lookup_minimal_symbol (arg, NULL, NULL);
+			      if (msymbol != NULL)
+				write_exp_msymbol (msymbol);
+			      else if (!have_full_symbols ()
+				       && !have_partial_symbols ())
+				error (_("No symbol table is loaded.  "
+				       "Use the \"file\" command."));
+			      else
+				error (_("No symbol \"%s\" in current context."),
+				       copy_name ($1.stoken));
+			    }
+			}
+	;
+
+/* TODO
+method_exp: PACKAGENAME '.' name '.' name
+			{
+			}
+	;
+*/
+
+type  /* Implements (approximately): [*] type-specifier */
+	:	'*' type
+			{ $$ = lookup_pointer_type ($2); }
+	|	TYPENAME
+			{ $$ = $1.type; }
+/*
+	|	STRUCT_KEYWORD name
+			{ $$ = lookup_struct (copy_name ($2),
+					      expression_context_block); }
+*/
+	|	BYTE_KEYWORD
+			{ $$ = builtin_go_type (parse_gdbarch)
+			    ->builtin_uint8; }
+	;
+
+/* TODO
+name	:	NAME { $$ = $1.stoken; }
+	|	TYPENAME { $$ = $1.stoken; }
+	|	NAME_OR_INT  { $$ = $1.stoken; }
+	;
+*/
+
+name_not_typename
+	:	NAME
+/* These would be useful if name_not_typename was useful, but it is just
+   a fake for "variable", so these cause reduce/reduce conflicts because
+   the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
+   =exp) or just an exp.  If name_not_typename was ever used in an lvalue
+   context where only a name could occur, this might be useful.
+	|	NAME_OR_INT
+*/
+	;
+
+%%
+
+/* Wrapper on parse_c_float to get the type right for Go.  */
+
+static int
+parse_go_float (struct gdbarch *gdbarch, const char *p, int len,
+		DOUBLEST *d, struct type **t)
+{
+  int result = parse_c_float (gdbarch, p, len, d, t);
+  const struct builtin_type *builtin_types = builtin_type (gdbarch);
+  const struct builtin_go_type *builtin_go_types = builtin_go_type (gdbarch);
+
+  if (*t == builtin_types->builtin_float)
+    *t = builtin_go_types->builtin_float32;
+  else if (*t == builtin_types->builtin_double)
+    *t = builtin_go_types->builtin_float64;
+
+  return result;
+}
+
+/* Take care of parsing a number (anything that starts with a digit).
+   Set yylval and return the token type; update lexptr.
+   LEN is the number of characters in it.  */
+
+/* FIXME: Needs some error checking for the float case.  */
+/* FIXME(dje): IWBN to use c-exp.y's parse_number if we could.
+   That will require moving the guts into a function that we both call
+   as our YYSTYPE is different than c-exp.y's  */
+
+static int
+parse_number (char *p, int len, int parsed_float, YYSTYPE *putithere)
+{
+  /* FIXME: Shouldn't these be unsigned?  We don't deal with negative values
+     here, and we do kind of silly things like cast to unsigned.  */
+  LONGEST n = 0;
+  LONGEST prevn = 0;
+  ULONGEST un;
+
+  int i = 0;
+  int c;
+  int base = input_radix;
+  int unsigned_p = 0;
+
+  /* Number of "L" suffixes encountered.  */
+  int long_p = 0;
+
+  /* We have found a "L" or "U" suffix.  */
+  int found_suffix = 0;
+
+  ULONGEST high_bit;
+  struct type *signed_type;
+  struct type *unsigned_type;
+
+  if (parsed_float)
+    {
+      if (! parse_go_float (parse_gdbarch, p, len,
+			    &putithere->typed_val_float.dval,
+			    &putithere->typed_val_float.type))
+	return ERROR;
+      return FLOAT;
+    }
+
+  /* Handle base-switching prefixes 0x, 0t, 0d, 0.  */
+  if (p[0] == '0')
+    switch (p[1])
+      {
+      case 'x':
+      case 'X':
+	if (len >= 3)
+	  {
+	    p += 2;
+	    base = 16;
+	    len -= 2;
+	  }
+	break;
+
+      case 'b':
+      case 'B':
+	if (len >= 3)
+	  {
+	    p += 2;
+	    base = 2;
+	    len -= 2;
+	  }
+	break;
+
+      case 't':
+      case 'T':
+      case 'd':
+      case 'D':
+	if (len >= 3)
+	  {
+	    p += 2;
+	    base = 10;
+	    len -= 2;
+	  }
+	break;
+
+      default:
+	base = 8;
+	break;
+      }
+
+  while (len-- > 0)
+    {
+      c = *p++;
+      if (c >= 'A' && c <= 'Z')
+	c += 'a' - 'A';
+      if (c != 'l' && c != 'u')
+	n *= base;
+      if (c >= '0' && c <= '9')
+	{
+	  if (found_suffix)
+	    return ERROR;
+	  n += i = c - '0';
+	}
+      else
+	{
+	  if (base > 10 && c >= 'a' && c <= 'f')
+	    {
+	      if (found_suffix)
+		return ERROR;
+	      n += i = c - 'a' + 10;
+	    }
+	  else if (c == 'l')
+	    {
+	      ++long_p;
+	      found_suffix = 1;
+	    }
+	  else if (c == 'u')
+	    {
+	      unsigned_p = 1;
+	      found_suffix = 1;
+	    }
+	  else
+	    return ERROR;	/* Char not a digit */
+	}
+      if (i >= base)
+	return ERROR;		/* Invalid digit in this base.  */
+
+      /* Portably test for overflow (only works for nonzero values, so make
+	 a second check for zero).  FIXME: Can't we just make n and prevn
+	 unsigned and avoid this?  */
+      if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
+	unsigned_p = 1;		/* Try something unsigned.  */
+
+      /* Portably test for unsigned overflow.
+	 FIXME: This check is wrong; for example it doesn't find overflow
+	 on 0x123456789 when LONGEST is 32 bits.  */
+      if (c != 'l' && c != 'u' && n != 0)
+	{
+	  if ((unsigned_p && (ULONGEST) prevn >= (ULONGEST) n))
+	    error (_("Numeric constant too large."));
+	}
+      prevn = n;
+    }
+
+  /* An integer constant is an int, a long, or a long long.  An L
+     suffix forces it to be long; an LL suffix forces it to be long
+     long.  If not forced to a larger size, it gets the first type of
+     the above that it fits in.  To figure out whether it fits, we
+     shift it right and see whether anything remains.  Note that we
+     can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one
+     operation, because many compilers will warn about such a shift
+     (which always produces a zero result).  Sometimes gdbarch_int_bit
+     or gdbarch_long_bit will be that big, sometimes not.  To deal with
+     the case where it is we just always shift the value more than
+     once, with fewer bits each time.  */
+
+  un = (ULONGEST)n >> 2;
+  if (long_p == 0
+      && (un >> (gdbarch_int_bit (parse_gdbarch) - 2)) == 0)
+    {
+      high_bit = ((ULONGEST)1) << (gdbarch_int_bit (parse_gdbarch) - 1);
+
+      /* A large decimal (not hex or octal) constant (between INT_MAX
+	 and UINT_MAX) is a long or unsigned long, according to ANSI,
+	 never an unsigned int, but this code treats it as unsigned
+	 int.  This probably should be fixed.  GCC gives a warning on
+	 such constants.  */
+
+      unsigned_type = parse_type->builtin_unsigned_int;
+      signed_type = parse_type->builtin_int;
+    }
+  else if (long_p <= 1
+	   && (un >> (gdbarch_long_bit (parse_gdbarch) - 2)) == 0)
+    {
+      high_bit = ((ULONGEST)1) << (gdbarch_long_bit (parse_gdbarch) - 1);
+      unsigned_type = parse_type->builtin_unsigned_long;
+      signed_type = parse_type->builtin_long;
+    }
+  else
+    {
+      int shift;
+      if (sizeof (ULONGEST) * HOST_CHAR_BIT
+	  < gdbarch_long_long_bit (parse_gdbarch))
+	/* A long long does not fit in a LONGEST.  */
+	shift = (sizeof (ULONGEST) * HOST_CHAR_BIT - 1);
+      else
+	shift = (gdbarch_long_long_bit (parse_gdbarch) - 1);
+      high_bit = (ULONGEST) 1 << shift;
+      unsigned_type = parse_type->builtin_unsigned_long_long;
+      signed_type = parse_type->builtin_long_long;
+    }
+
+   putithere->typed_val_int.val = n;
+
+   /* If the high bit of the worked out type is set then this number
+      has to be unsigned.  */
+
+   if (unsigned_p || (n & high_bit))
+     {
+       putithere->typed_val_int.type = unsigned_type;
+     }
+   else
+     {
+       putithere->typed_val_int.type = signed_type;
+     }
+
+   return INT;
+}
+
+/* Temporary obstack used for holding strings.  */
+static struct obstack tempbuf;
+static int tempbuf_init;
+
+/* Parse a string or character literal from TOKPTR.  The string or
+   character may be wide or unicode.  *OUTPTR is set to just after the
+   end of the literal in the input string.  The resulting token is
+   stored in VALUE.  This returns a token value, either STRING or
+   CHAR, depending on what was parsed.  *HOST_CHARS is set to the
+   number of host characters in the literal.  */
+
+static int
+parse_string_or_char (char *tokptr, char **outptr, struct typed_stoken *value,
+		      int *host_chars)
+{
+  int quote;
+
+  /* Build the gdb internal form of the input string in tempbuf.  Note
+     that the buffer is null byte terminated *only* for the
+     convenience of debugging gdb itself and printing the buffer
+     contents when the buffer contains no embedded nulls.  Gdb does
+     not depend upon the buffer being null byte terminated, it uses
+     the length string instead.  This allows gdb to handle C strings
+     (as well as strings in other languages) with embedded null
+     bytes */
+
+  if (!tempbuf_init)
+    tempbuf_init = 1;
+  else
+    obstack_free (&tempbuf, NULL);
+  obstack_init (&tempbuf);
+
+  /* Skip the quote.  */
+  quote = *tokptr;
+  ++tokptr;
+
+  *host_chars = 0;
+
+  while (*tokptr)
+    {
+      char c = *tokptr;
+      if (c == '\\')
+	{
+	  ++tokptr;
+	  *host_chars += c_parse_escape (&tokptr, &tempbuf);
+	}
+      else if (c == quote)
+	break;
+      else
+	{
+	  obstack_1grow (&tempbuf, c);
+	  ++tokptr;
+	  /* FIXME: this does the wrong thing with multi-byte host
+	     characters.  We could use mbrlen here, but that would
+	     make "set host-charset" a bit less useful.  */
+	  ++*host_chars;
+	}
+    }
+
+  if (*tokptr != quote)
+    {
+      if (quote == '"')
+	error (_("Unterminated string in expression."));
+      else
+	error (_("Unmatched single quote."));
+    }
+  ++tokptr;
+
+  value->type = C_STRING | (quote == '\'' ? C_CHAR : 0); /*FIXME*/
+  value->ptr = obstack_base (&tempbuf);
+  value->length = obstack_object_size (&tempbuf);
+
+  *outptr = tokptr;
+
+  return quote == '\'' ? CHAR : STRING;
+}
+
+struct token
+{
+  char *operator;
+  int token;
+  enum exp_opcode opcode;
+};
+
+static const struct token tokentab3[] =
+  {
+    {">>=", ASSIGN_MODIFY, BINOP_RSH},
+    {"<<=", ASSIGN_MODIFY, BINOP_LSH},
+    /*{"&^=", ASSIGN_MODIFY, BINOP_BITWISE_ANDNOT}, TODO */
+    {"...", DOTDOTDOT, OP_NULL},
+  };
+
+static const struct token tokentab2[] =
+  {
+    {"+=", ASSIGN_MODIFY, BINOP_ADD},
+    {"-=", ASSIGN_MODIFY, BINOP_SUB},
+    {"*=", ASSIGN_MODIFY, BINOP_MUL},
+    {"/=", ASSIGN_MODIFY, BINOP_DIV},
+    {"%=", ASSIGN_MODIFY, BINOP_REM},
+    {"|=", ASSIGN_MODIFY, BINOP_BITWISE_IOR},
+    {"&=", ASSIGN_MODIFY, BINOP_BITWISE_AND},
+    {"^=", ASSIGN_MODIFY, BINOP_BITWISE_XOR},
+    {"++", INCREMENT, BINOP_END},
+    {"--", DECREMENT, BINOP_END},
+    /*{"->", RIGHT_ARROW, BINOP_END}, Doesn't exist in Go.  */
+    {"<-", LEFT_ARROW, BINOP_END},
+    {"&&", ANDAND, BINOP_END},
+    {"||", OROR, BINOP_END},
+    {"<<", LSH, BINOP_END},
+    {">>", RSH, BINOP_END},
+    {"==", EQUAL, BINOP_END},
+    {"!=", NOTEQUAL, BINOP_END},
+    {"<=", LEQ, BINOP_END},
+    {">=", GEQ, BINOP_END},
+    /*{"&^", ANDNOT, BINOP_END}, TODO */
+  };
+
+/* Identifier-like tokens.  */
+static const struct token ident_tokens[] =
+  {
+    {"true", TRUE_KEYWORD, OP_NULL},
+    {"false", FALSE_KEYWORD, OP_NULL},
+    {"nil", NIL_KEYWORD, OP_NULL},
+    {"const", CONST_KEYWORD, OP_NULL},
+    {"struct", STRUCT_KEYWORD, OP_NULL},
+    {"type", TYPE_KEYWORD, OP_NULL},
+    {"interface", INTERFACE_KEYWORD, OP_NULL},
+    {"chan", CHAN_KEYWORD, OP_NULL},
+    {"byte", BYTE_KEYWORD, OP_NULL}, /* An alias of uint8.  */
+    {"len", LEN_KEYWORD, OP_NULL},
+    {"cap", CAP_KEYWORD, OP_NULL},
+    {"new", NEW_KEYWORD, OP_NULL},
+    {"iota", IOTA_KEYWORD, OP_NULL},
+  };
+
+/* This is set if a NAME token appeared at the very end of the input
+   string, with no whitespace separating the name from the EOF.  This
+   is used only when parsing to do field name completion.  */
+static int saw_name_at_eof;
+
+/* This is set if the previously-returned token was a structure
+   operator -- either '.' or ARROW.  This is used only when parsing to
+   do field name completion.  */
+static int last_was_structop;
+
+/* Read one token, getting characters through lexptr.  */
+
+static int
+lex_one_token (void)
+{
+  int c;
+  int namelen;
+  unsigned int i;
+  char *tokstart;
+  int saw_structop = last_was_structop;
+  char *copy;
+
+  last_was_structop = 0;
+
+ retry:
+
+  prev_lexptr = lexptr;
+
+  tokstart = lexptr;
+  /* See if it is a special token of length 3.  */
+  for (i = 0; i < sizeof (tokentab3) / sizeof (tokentab3[0]); i++)
+    if (strncmp (tokstart, tokentab3[i].operator, 3) == 0)
+      {
+	lexptr += 3;
+	yylval.opcode = tokentab3[i].opcode;
+	return tokentab3[i].token;
+      }
+
+  /* See if it is a special token of length 2.  */
+  for (i = 0; i < sizeof (tokentab2) / sizeof (tokentab2[0]); i++)
+    if (strncmp (tokstart, tokentab2[i].operator, 2) == 0)
+      {
+	lexptr += 2;
+	yylval.opcode = tokentab2[i].opcode;
+	/* NOTE: -> doesn't exist in Go, so we don't need to watch for
+	   setting last_was_structop here.  */
+	return tokentab2[i].token;
+      }
+
+  switch (c = *tokstart)
+    {
+    case 0:
+      if (saw_name_at_eof)
+	{
+	  saw_name_at_eof = 0;
+	  return COMPLETE;
+	}
+      else if (saw_structop)
+	return COMPLETE;
+      else
+        return 0;
+
+    case ' ':
+    case '\t':
+    case '\n':
+      lexptr++;
+      goto retry;
+
+    case '[':
+    case '(':
+      paren_depth++;
+      lexptr++;
+      return c;
+
+    case ']':
+    case ')':
+      if (paren_depth == 0)
+	return 0;
+      paren_depth--;
+      lexptr++;
+      return c;
+
+    case ',':
+      if (comma_terminates
+          && paren_depth == 0)
+	return 0;
+      lexptr++;
+      return c;
+
+    case '.':
+      /* Might be a floating point number.  */
+      if (lexptr[1] < '0' || lexptr[1] > '9')
+	{
+	  if (in_parse_field)
+	    last_was_structop = 1;
+	  goto symbol;		/* Nope, must be a symbol. */
+	}
+      /* FALL THRU into number case.  */
+
+    case '0':
+    case '1':
+    case '2':
+    case '3':
+    case '4':
+    case '5':
+    case '6':
+    case '7':
+    case '8':
+    case '9':
+      {
+	/* It's a number.  */
+	int got_dot = 0, got_e = 0, toktype;
+	char *p = tokstart;
+	int hex = input_radix > 10;
+
+	if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
+	  {
+	    p += 2;
+	    hex = 1;
+	  }
+
+	for (;; ++p)
+	  {
+	    /* This test includes !hex because 'e' is a valid hex digit
+	       and thus does not indicate a floating point number when
+	       the radix is hex.  */
+	    if (!hex && !got_e && (*p == 'e' || *p == 'E'))
+	      got_dot = got_e = 1;
+	    /* This test does not include !hex, because a '.' always indicates
+	       a decimal floating point number regardless of the radix.  */
+	    else if (!got_dot && *p == '.')
+	      got_dot = 1;
+	    else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
+		     && (*p == '-' || *p == '+'))
+	      /* This is the sign of the exponent, not the end of the
+		 number.  */
+	      continue;
+	    /* We will take any letters or digits.  parse_number will
+	       complain if past the radix, or if L or U are not final.  */
+	    else if ((*p < '0' || *p > '9')
+		     && ((*p < 'a' || *p > 'z')
+				  && (*p < 'A' || *p > 'Z')))
+	      break;
+	  }
+	toktype = parse_number (tokstart, p - tokstart, got_dot|got_e, &yylval);
+        if (toktype == ERROR)
+	  {
+	    char *err_copy = (char *) alloca (p - tokstart + 1);
+
+	    memcpy (err_copy, tokstart, p - tokstart);
+	    err_copy[p - tokstart] = 0;
+	    error (_("Invalid number \"%s\"."), err_copy);
+	  }
+	lexptr = p;
+	return toktype;
+      }
+
+    case '@':
+      {
+	char *p = &tokstart[1];
+	size_t len = strlen ("entry");
+
+	while (isspace (*p))
+	  p++;
+	if (strncmp (p, "entry", len) == 0 && !isalnum (p[len])
+	    && p[len] != '_')
+	  {
+	    lexptr = &p[len];
+	    return ENTRY;
+	  }
+      }
+      /* FALLTHRU */
+    case '+':
+    case '-':
+    case '*':
+    case '/':
+    case '%':
+    case '|':
+    case '&':
+    case '^':
+    case '~':
+    case '!':
+    case '<':
+    case '>':
+    case '?':
+    case ':':
+    case '=':
+    case '{':
+    case '}':
+    symbol:
+      lexptr++;
+      return c;
+
+    case '\'':
+    case '"':
+    case '`':
+      {
+	int host_len;
+	int result = parse_string_or_char (tokstart, &lexptr, &yylval.tsval,
+					   &host_len);
+	if (result == CHAR)
+	  {
+	    if (host_len == 0)
+	      error (_("Empty character constant."));
+	    else if (host_len > 2 && c == '\'')
+	      {
+		++tokstart;
+		namelen = lexptr - tokstart - 1;
+		goto tryname;
+	      }
+	    else if (host_len > 1)
+	      error (_("Invalid character constant."));
+	  }
+	return result;
+      }
+    }
+
+  if (!(c == '_' || c == '$'
+	|| (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
+    /* We must have come across a bad character (e.g. ';').  */
+    error (_("Invalid character '%c' in expression."), c);
+
+  /* It's a name.  See how long it is.  */
+  namelen = 0;
+  for (c = tokstart[namelen];
+       (c == '_' || c == '$' || (c >= '0' && c <= '9')
+	|| (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'));)
+    {
+      c = tokstart[++namelen];
+    }
+
+  /* The token "if" terminates the expression and is NOT removed from
+     the input stream.  It doesn't count if it appears in the
+     expansion of a macro.  */
+  if (namelen == 2
+      && tokstart[0] == 'i'
+      && tokstart[1] == 'f')
+    {
+      return 0;
+    }
+
+  /* For the same reason (breakpoint conditions), "thread N"
+     terminates the expression.  "thread" could be an identifier, but
+     an identifier is never followed by a number without intervening
+     punctuation.
+     Handle abbreviations of these, similarly to
+     breakpoint.c:find_condition_and_thread.
+     TODO: Watch for "goroutine" here?  */
+  if (namelen >= 1
+      && strncmp (tokstart, "thread", namelen) == 0
+      && (tokstart[namelen] == ' ' || tokstart[namelen] == '\t'))
+    {
+      char *p = tokstart + namelen + 1;
+      while (*p == ' ' || *p == '\t')
+	p++;
+      if (*p >= '0' && *p <= '9')
+	return 0;
+    }
+
+  lexptr += namelen;
+
+  tryname:
+
+  yylval.sval.ptr = tokstart;
+  yylval.sval.length = namelen;
+
+  /* Catch specific keywords.  */
+  copy = copy_name (yylval.sval);
+  for (i = 0; i < sizeof (ident_tokens) / sizeof (ident_tokens[0]); i++)
+    if (strcmp (copy, ident_tokens[i].operator) == 0)
+      {
+	/* It is ok to always set this, even though we don't always
+	   strictly need to.  */
+	yylval.opcode = ident_tokens[i].opcode;
+	return ident_tokens[i].token;
+      }
+
+  if (*tokstart == '$')
+    return DOLLAR_VARIABLE;
+
+  if (in_parse_field && *lexptr == '\0')
+    saw_name_at_eof = 1;
+  return NAME;
+}
+
+/* An object of this type is pushed on a FIFO by the "outer" lexer.  */
+typedef struct
+{
+  int token;
+  YYSTYPE value;
+} token_and_value;
+
+DEF_VEC_O (token_and_value);
+
+/* A FIFO of tokens that have been read but not yet returned to the
+   parser.  */
+static VEC (token_and_value) *token_fifo;
+
+/* Non-zero if the lexer should return tokens from the FIFO.  */
+static int popping;
+
+/* Temporary storage for yylex; this holds symbol names as they are
+   built up.  */
+static struct obstack name_obstack;
+
+/* Build "package.name" in name_obstack.
+   For convenience of the caller, the name is NUL-terminated,
+   but the NUL is not included in the recorded length.  */
+
+static struct stoken
+build_packaged_name (const char *package, int package_len,
+		     const char *name, int name_len)
+{
+  struct stoken result;
+
+  obstack_free (&name_obstack, obstack_base (&name_obstack));
+  obstack_grow (&name_obstack, package, package_len);
+  obstack_grow_str (&name_obstack, ".");
+  obstack_grow (&name_obstack, name, name_len);
+  obstack_grow (&name_obstack, "", 1);
+  result.ptr = obstack_base (&name_obstack);
+  result.length = obstack_object_size (&name_obstack) - 1;
+
+  return result;
+}
+
+/* Return non-zero if NAME is a package name.
+   BLOCK is the scope in which to interpret NAME; this can be NULL
+   to mean the global scope.  */
+
+static int
+package_name_p (const char *name, struct block *block)
+{
+  struct symbol *sym;
+  int is_a_field_of_this;
+
+  sym = lookup_symbol (name, block, STRUCT_DOMAIN, &is_a_field_of_this);
+
+  if (sym
+      && SYMBOL_CLASS (sym) == LOC_TYPEDEF
+      && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_MODULE)
+    return 1;
+
+  return 0;
+}
+
+/* Classify a (potential) function in the "unsafe" package.
+   We fold these into "keywords" to keep things simple, at least until
+   something more complex is warranted.  */
+
+static int
+classify_unsafe_function (struct stoken function_name)
+{
+  char *copy = copy_name (function_name);
+
+  if (strcmp (copy, "Sizeof") == 0)
+    {
+      yylval.sval = function_name;
+      return SIZEOF_KEYWORD;
+    }
+
+  error (_("Unknown function in `unsafe' package: %s"), copy);
+}
+
+/* Classify token(s) "name1.name2" where name1 is known to be a package.
+   The contents of the token are in `yylval'.
+   Updates yylval and returns the new token type.
+
+   The result is one of NAME, NAME_OR_INT, or TYPENAME.  */
+
+static int
+classify_packaged_name (struct block *block)
+{
+  char *copy;
+  struct symbol *sym;
+  int is_a_field_of_this = 0;
+
+  copy = copy_name (yylval.sval);
+
+  sym = lookup_symbol (copy, block, VAR_DOMAIN, &is_a_field_of_this);
+
+  if (sym)
+    {
+      yylval.ssym.sym = sym;
+      yylval.ssym.is_a_field_of_this = is_a_field_of_this;
+    }
+
+  return NAME;
+}
+
+/* Classify a NAME token.
+   The contents of the token are in `yylval'.
+   Updates yylval and returns the new token type.
+   BLOCK is the block in which lookups start; this can be NULL
+   to mean the global scope.
+
+   The result is one of NAME, NAME_OR_INT, or TYPENAME.  */
+
+static int
+classify_name (struct block *block)
+{
+  struct type *type;
+  struct symbol *sym;
+  char *copy;
+  int is_a_field_of_this = 0;
+
+  copy = copy_name (yylval.sval);
+
+  /* Try primitive types first so they win over bad/weird debug info.  */
+  type = language_lookup_primitive_type_by_name (parse_language,
+						 parse_gdbarch, copy);
+  if (type != NULL)
+    {
+      /* NOTE: We take advantage of the fact that yylval coming in was a
+	 NAME, and that struct ttype is a compatible extension of struct
+	 stoken, so yylval.tsym.stoken is already filled in.  */
+      yylval.tsym.type = type;
+      return TYPENAME;
+    }
+
+  /* TODO: What about other types?  */
+
+  sym = lookup_symbol (copy, block, VAR_DOMAIN, &is_a_field_of_this);
+
+  if (sym)
+    {
+      yylval.ssym.sym = sym;
+      yylval.ssym.is_a_field_of_this = is_a_field_of_this;
+      return NAME;
+    }
+
+  /* If we didn't find a symbol, look again in the current package.
+     This is to, e.g., make "p global_var" work without having to specify
+     the package name.  We intentionally only looks for objects in the
+     current package.  */
+
+  {
+    char *current_package_name = go_block_package_name (block);
+
+    if (current_package_name != NULL)
+      {
+	struct stoken sval =
+	  build_packaged_name (current_package_name,
+			       strlen (current_package_name),
+			       copy, strlen (copy));
+
+	xfree (current_package_name);
+	sym = lookup_symbol (sval.ptr, block, VAR_DOMAIN,
+			     &is_a_field_of_this);
+	if (sym)
+	  {
+	    yylval.ssym.stoken = sval;
+	    yylval.ssym.sym = sym;
+	    yylval.ssym.is_a_field_of_this = is_a_field_of_this;
+	    return NAME;
+	  }
+      }
+  }
+
+  /* Input names that aren't symbols but ARE valid hex numbers, when
+     the input radix permits them, can be names or numbers depending
+     on the parse.  Note we support radixes > 16 here.  */
+  if ((copy[0] >= 'a' && copy[0] < 'a' + input_radix - 10)
+      || (copy[0] >= 'A' && copy[0] < 'A' + input_radix - 10))
+    {
+      YYSTYPE newlval;	/* Its value is ignored.  */
+      int hextype = parse_number (copy, yylval.sval.length, 0, &newlval);
+      if (hextype == INT)
+	{
+	  yylval.ssym.sym = NULL;
+	  yylval.ssym.is_a_field_of_this = 0;
+	  return NAME_OR_INT;
+	}
+    }
+
+  yylval.ssym.sym = NULL;
+  yylval.ssym.is_a_field_of_this = 0;
+  return NAME;
+}
+
+/* This is taken from c-exp.y mostly to get something working.
+   The basic structure has been kept because we may yet need some of it.  */
+
+static int
+yylex (void)
+{
+  token_and_value current, next;
+
+  if (popping && !VEC_empty (token_and_value, token_fifo))
+    {
+      token_and_value tv = *VEC_index (token_and_value, token_fifo, 0);
+      VEC_ordered_remove (token_and_value, token_fifo, 0);
+      yylval = tv.value;
+      /* There's no need to fall through to handle package.name
+	 as that can never happen here.  In theory.  */
+      return tv.token;
+    }
+  popping = 0;
+
+  current.token = lex_one_token ();
+
+  /* TODO: Need a way to force specifying name1 as a package.
+     .name1.name2 ?  */
+
+  if (current.token != NAME)
+    return current.token;
+
+  /* See if we have "name1 . name2".  */
+
+  current.value = yylval;
+  next.token = lex_one_token ();
+  next.value = yylval;
+
+  if (next.token == '.')
+    {
+      token_and_value name2;
+
+      name2.token = lex_one_token ();
+      name2.value = yylval;
+
+      if (name2.token == NAME)
+	{
+	  /* Ok, we have "name1 . name2".  */
+	  char *copy;
+
+	  copy = copy_name (current.value.sval);
+
+	  if (strcmp (copy, "unsafe") == 0)
+	    {
+	      popping = 1;
+	      return classify_unsafe_function (name2.value.sval);
+	    }
+
+	  if (package_name_p (copy, expression_context_block))
+	    {
+	      popping = 1;
+	      yylval.sval = build_packaged_name (current.value.sval.ptr,
+						 current.value.sval.length,
+						 name2.value.sval.ptr,
+						 name2.value.sval.length);
+	      return classify_packaged_name (expression_context_block);
+	    }
+	}
+
+      VEC_safe_push (token_and_value, token_fifo, &next);
+      VEC_safe_push (token_and_value, token_fifo, &name2);
+    }
+  else
+    {
+      VEC_safe_push (token_and_value, token_fifo, &next);
+    }
+
+  /* If we arrive here we don't have a package-qualified name.  */
+
+  popping = 1;
+  yylval = current.value;
+  return classify_name (expression_context_block);
+}
+
+int
+go_parse (void)
+{
+  int result;
+  struct cleanup *back_to = make_cleanup (null_cleanup, NULL);
+
+  make_cleanup_restore_integer (&yydebug);
+  yydebug = parser_debug;
+
+  /* Initialize some state used by the lexer.  */
+  last_was_structop = 0;
+  saw_name_at_eof = 0;
+
+  VEC_free (token_and_value, token_fifo);
+  popping = 0;
+  obstack_init (&name_obstack);
+  make_cleanup_obstack_free (&name_obstack);
+
+  result = yyparse ();
+  do_cleanups (back_to);
+  return result;
+}
+
+void
+yyerror (char *msg)
+{
+  if (prev_lexptr)
+    lexptr = prev_lexptr;
+
+  error (_("A %s in expression, near `%s'."), (msg ? msg : "error"), lexptr);
+}
diff --git a/gdb/go-lang.c b/gdb/go-lang.c
new file mode 100644
index 0000000..147a922
--- /dev/null
+++ b/gdb/go-lang.c
@@ -0,0 +1,667 @@
+/* Go language support routines for GDB, the GNU debugger.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* TODO:
+   - split stacks
+   - printing of native types
+   - goroutines
+   - lots more
+   - gccgo mangling needs redoing
+     It's too hard, for example, to know whether one is looking at a mangled
+     Go symbol or not, and their are ambiguities, e.g., the demangler may
+     get passed *any* symbol, including symbols from other languages
+     and including symbols that are already demangled.
+     One thought is to at least add an _G prefix.
+   - 6g mangling isn't supported yet
+*/
+
+#include "defs.h"
+#include "gdb_assert.h"
+#include "gdb_obstack.h"
+#include "gdb_string.h"
+#include "block.h"
+#include "symtab.h"
+#include "language.h"
+#include "go-lang.h"
+#include "c-lang.h"
+#include "parser-defs.h"
+
+#include <ctype.h>
+
+/* The main function in the main package.  */
+static const char GO_MAIN_MAIN[] = "main.main";
+
+/* Function returning the special symbol name used by Go for the main
+   procedure in the main program if it is found in minimal symbol list.
+   This function tries to find minimal symbols so that it finds them even
+   if the program was compiled without debugging information.  */
+
+const char *
+go_main_name (void)
+{
+  struct minimal_symbol *msym;
+
+  msym = lookup_minimal_symbol (GO_MAIN_MAIN, NULL, NULL);
+  if (msym != NULL)
+    return GO_MAIN_MAIN;
+
+  /* No known entry procedure found, the main program is probably not Go.  */
+  return NULL;
+}
+
+/* Return non-zero if TYPE is a gccgo string.
+   We assume CHECK_TYPEDEF has already been done.  */
+
+static int
+gccgo_string_p (struct type *type)
+{
+  /* gccgo strings don't necessarily have a name we can use.  */
+
+  if (TYPE_NFIELDS (type) == 2)
+    {
+      struct type *type0 = TYPE_FIELD_TYPE (type, 0);
+      struct type *type1 = TYPE_FIELD_TYPE (type, 1);
+
+      CHECK_TYPEDEF (type0);
+      CHECK_TYPEDEF (type1);
+
+      if (TYPE_CODE (type0) == TYPE_CODE_PTR
+	  && strcmp (TYPE_FIELD_NAME (type, 0), "__data") == 0
+	  && TYPE_CODE (type1) == TYPE_CODE_INT
+	  && strcmp (TYPE_FIELD_NAME (type, 1), "__length") == 0)
+	{
+	  struct type *target_type = TYPE_TARGET_TYPE (type0);
+
+	  CHECK_TYPEDEF (target_type);
+
+	  if (TYPE_CODE (target_type) == TYPE_CODE_INT
+	      && TYPE_LENGTH (target_type) == 1
+	      && strcmp (TYPE_NAME (target_type), "uint8") == 0)
+	    return 1;
+	}
+    }
+
+  return 0;
+}
+
+/* Return non-zero if TYPE is a 6g string.
+   We assume CHECK_TYPEDEF has already been done.  */
+
+static int
+sixg_string_p (struct type *type)
+{
+  if (TYPE_NFIELDS (type) == 2
+      && TYPE_TAG_NAME (type) != NULL
+      && strcmp (TYPE_TAG_NAME (type), "string") == 0)
+    return 1;
+
+  return 0;
+}
+
+/* Classify the kind of Go object that TYPE is.
+   TYPE is a TYPE_CODE_STRUCT, used to represent a Go object.  */
+
+enum go_type
+go_classify_struct_type (struct type *type)
+{
+  CHECK_TYPEDEF (type);
+
+  /* Recognize strings as they're useful to be able to print without
+     pretty-printers.  */
+  if (gccgo_string_p (type)
+      || sixg_string_p (type))
+    return GO_TYPE_STRING;
+
+  return GO_TYPE_NONE;
+}
+
+/* Subroutine of unpack_mangled_go_symbol to simplify it.
+   Given "[foo.]bar.baz", store "bar" in *PACKAGEP and "baz" in *OBJECTP.
+   We stomp on the last '.' to nul-terminate "bar".
+   The caller is responsible for memory management.  */
+
+static void
+unpack_package_and_object (char *buf,
+			   const char **packagep, const char **objectp)
+{
+  char *last_dot;
+
+  last_dot = strrchr (buf, '.');
+  gdb_assert (last_dot != NULL);
+  *objectp = last_dot + 1;
+  *last_dot = '\0';
+  last_dot = strrchr (buf, '.');
+  if (last_dot != NULL)
+    *packagep = last_dot + 1;
+  else
+    *packagep = buf;
+}
+
+/* Given a mangled Go symbol, find its package name, object name, and
+   method type (if present).
+   E.g., for "libgo_net.textproto.String.N33_libgo_net.textproto.ProtocolError"
+   *PACKAGEP = "textproto"
+   *OBJECTP = "String"
+   *METHOD_TYPE_PACKAGEP = "textproto"
+   *METHOD_TYPE_OBJECTP = "ProtocolError"
+
+   Space for the resulting strings is malloc'd in one buffer.
+   PACKAGEP,OBJECTP,METHOD_TYPE* will (typically) point into this buffer.
+   [There are a few exceptions, but the caller is still responsible for
+   freeing the resulting pointer.]
+   A pointer to this buffer is returned, or NULL if symbol isn't a
+   mangled Go symbol.
+   The caller is responsible for freeing the result.
+
+   *METHOD_TYPE_IS_POINTERP is set to a boolean indicating if
+   the method type is a pointer.
+
+   There may be value in returning the outer container,
+   i.e., "net" in the above example, but for now it's not needed.
+   Plus it's currently not straightforward to compute,
+   it comes from -fgo-prefix, and there's no algorithm to compute it.
+
+   If we ever need to unpack the method type, this routine should work
+   for that too.  */
+
+static char *
+unpack_mangled_go_symbol (const char *mangled_name,
+			  const char **packagep,
+			  const char **objectp,
+			  const char **method_type_packagep,
+			  const char **method_type_objectp,
+			  int *method_type_is_pointerp)
+{
+  char *buf;
+  char *p;
+  int len = strlen (mangled_name);
+  /* Pointer to last digit in "N<digit(s)>_".  */
+  char *saw_digit;
+  /* Pointer to "N" if valid "N<digit(s)>_" found.  */
+  char *method_type;
+  /* Pointer to the first '.'.  */
+  char *first_dot;
+  /* Pointer to the last '.'.  */
+  char *last_dot;
+  /* Non-zero if we saw a pointer indicator.  */
+  int saw_pointer;
+
+  *packagep = *objectp = NULL;
+  *method_type_packagep = *method_type_objectp = NULL;
+  *method_type_is_pointerp = 0;
+
+  /* main.init is mangled specially.  */
+  if (strcmp (mangled_name, "__go_init_main") == 0)
+    {
+      char *package = xstrdup ("main");
+
+      *packagep = package;
+      *objectp = "init";
+      return package;
+    }
+
+  /* main.main is mangled specially (missing prefix).  */
+  if (strcmp (mangled_name, "main.main") == 0)
+    {
+      char *package = xstrdup ("main");
+
+      *packagep = package;
+      *objectp = "main";
+      return package;
+    }
+
+  /* We may get passed, e.g., "main.T.Foo", which is *not* mangled.
+     Alas it looks exactly like "prefix.package.object."
+     To cope for now we only recognize the following prefixes:
+
+     go: the default
+     libgo_.*: used by gccgo's runtime
+
+     Thus we don't support -fgo-prefix (except as used by the runtime).  */
+  if (strncmp (mangled_name, "go.", 3) != 0
+      && strncmp (mangled_name, "libgo_", 6) != 0)
+    return NULL;
+
+  /* Quick check for whether a search may be fruitful.  */
+  /* Ignore anything with @plt, etc. in it.  */
+  if (strchr (mangled_name, '@') != NULL)
+    return NULL;
+  /* It must have at least two dots.  */
+  first_dot = strchr (mangled_name, '.');
+  if (first_dot == NULL)
+    return NULL;
+  /* Treat "foo.bar" as unmangled.  It can collide with lots of other
+     languages and it's not clear what the consequences are.
+     And except for main.main, all gccgo symbols are at least
+     prefix.package.object.  */
+  last_dot = strrchr (mangled_name, '.');
+  if (last_dot == first_dot)
+    return NULL;
+
+  /* More quick checks.  */
+  if (last_dot[1] == '\0' /* foo. */
+      || last_dot[-1] == '.') /* foo..bar */
+    return NULL;
+
+  /* At this point we've decided we have a mangled Go symbol.  */
+
+  buf = xstrdup (mangled_name);
+
+  /* Search backwards looking for "N<digit(s)>".  */
+  p = buf + len;
+  saw_digit = method_type = NULL;
+  saw_pointer = 0;
+  while (p > buf)
+    {
+      int current = *(const unsigned char *) --p;
+      int current_is_digit = isdigit (current);
+
+      if (saw_digit)
+	{
+	  if (current_is_digit)
+	    continue;
+	  if (current == 'N'
+	      && ((p > buf && p[-1] == '.')
+		  || (p > buf + 1 && p[-1] == 'p' && p[-2] == '.')))
+	    {
+	      if (atoi (p + 1) == strlen (saw_digit + 2))
+		{
+		  if (p[-1] == '.')
+		    method_type = p - 1;
+		  else
+		    {
+		      gdb_assert (p[-1] == 'p');
+		      saw_pointer = 1;
+		      method_type = p - 2;
+		    }
+		  break;
+		}
+	    }
+	  /* Not what we're looking for, reset and keep looking.  */
+	  saw_digit = NULL;
+	  saw_pointer = 0;
+	  continue;
+	}
+      if (current_is_digit && p[1] == '_')
+	{
+	  /* Possible start of method "this" [sic] type.  */
+	  saw_digit = p;
+	  continue;
+	}
+    }
+
+  if (method_type != NULL
+      /* Ensure not something like "..foo".  */
+      && (method_type > buf && method_type[-1] != '.'))
+    {
+      unpack_package_and_object (saw_digit + 2,
+				 method_type_packagep, method_type_objectp);
+      *method_type = '\0';
+      *method_type_is_pointerp = saw_pointer;
+    }
+
+  unpack_package_and_object (buf, packagep, objectp);
+  return buf;
+}
+
+/* Implements the la_demangle language_defn routine for language Go.
+
+   N.B. This may get passed *any* symbol, including symbols from other
+   languages and including symbols that are already demangled.
+   Both of these situations are kinda unfortunate, but that's how things
+   are today.
+
+   N.B. This currently only supports gccgo's mangling.
+
+   N.B. gccgo's mangling needs, I think, changing.
+   This demangler can't work in all situations,
+   thus not too much effort is currently put into it.  */
+
+char *
+go_demangle (const char *mangled_name, int options)
+{
+  struct obstack tempbuf;
+  char *result;
+  char *name_buf;
+  const char *package_name;
+  const char *object_name;
+  const char *method_type_package_name;
+  const char *method_type_object_name;
+  int method_type_is_pointer;
+
+  if (mangled_name == NULL)
+    return NULL;
+
+  name_buf = unpack_mangled_go_symbol (mangled_name,
+				       &package_name, &object_name,
+				       &method_type_package_name,
+				       &method_type_object_name,
+				       &method_type_is_pointer);
+  if (name_buf == NULL)
+    return NULL;
+
+  obstack_init (&tempbuf);
+
+  /* Print methods as they appear in "method expressions".  */
+  if (method_type_package_name != NULL)
+    {
+      /* FIXME: Seems like we should include package_name here somewhere.  */
+      if (method_type_is_pointer)
+	  obstack_grow_str (&tempbuf, "(*");
+      obstack_grow_str (&tempbuf, method_type_package_name);
+      obstack_grow_str (&tempbuf, ".");
+      obstack_grow_str (&tempbuf, method_type_object_name);
+      if (method_type_is_pointer)
+	obstack_grow_str (&tempbuf, ")");
+      obstack_grow_str (&tempbuf, ".");
+      obstack_grow_str (&tempbuf, object_name);
+    }
+  else
+    {
+      obstack_grow_str (&tempbuf, package_name);
+      obstack_grow_str (&tempbuf, ".");
+      obstack_grow_str (&tempbuf, object_name);
+    }
+  obstack_grow_str0 (&tempbuf, "");
+
+  result = xstrdup (obstack_finish (&tempbuf));
+  obstack_free (&tempbuf, NULL);
+  xfree (name_buf);
+  return result;
+}
+
+/* Given a Go symbol, return its package or NULL if unknown.
+   Space for the result is malloc'd, caller must free.  */
+
+char *
+go_symbol_package_name (const struct symbol *sym)
+{
+  const char *mangled_name = SYMBOL_LINKAGE_NAME (sym);
+  const char *package_name;
+  const char *object_name;
+  const char *method_type_package_name;
+  const char *method_type_object_name;
+  int method_type_is_pointer;
+  char *name_buf;
+  char *result;
+
+  gdb_assert (SYMBOL_LANGUAGE (sym) == language_go);
+  name_buf = unpack_mangled_go_symbol (mangled_name,
+				       &package_name, &object_name,
+				       &method_type_package_name,
+				       &method_type_object_name,
+				       &method_type_is_pointer);
+  /* Some Go symbols don't have mangled form we interpret (yet).  */
+  if (name_buf == NULL)
+    return NULL;
+  result = xstrdup (package_name);
+  xfree (name_buf);
+  return result;
+}
+
+/* Return the package that BLOCK is in, or NULL if there isn't one.
+   Space for the result is malloc'd, caller must free.  */
+
+char *
+go_block_package_name (const struct block *block)
+{
+  while (block != NULL)
+    {
+      struct symbol *function = BLOCK_FUNCTION (block);
+
+      if (function != NULL)
+	{
+	  char *package_name = go_symbol_package_name (function);
+
+	  if (package_name != NULL)
+	    return package_name;
+
+	  /* Stop looking if we find a function without a package name.
+	     We're most likely outside of Go and thus the concept of the
+	     "current" package is gone.  */
+	  return NULL;
+	}
+
+      block = BLOCK_SUPERBLOCK (block);
+    }
+
+  return NULL;
+}
+
+/* Table mapping opcodes into strings for printing operators
+   and precedences of the operators.
+   TODO(dje): &^ ?  */
+
+static const struct op_print go_op_print_tab[] =
+{
+  {",", BINOP_COMMA, PREC_COMMA, 0},
+  {"=", BINOP_ASSIGN, PREC_ASSIGN, 1},
+  {"||", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
+  {"&&", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
+  {"|", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
+  {"^", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
+  {"&", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
+  {"==", BINOP_EQUAL, PREC_EQUAL, 0},
+  {"!=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
+  {"<=", BINOP_LEQ, PREC_ORDER, 0},
+  {">=", BINOP_GEQ, PREC_ORDER, 0},
+  {">", BINOP_GTR, PREC_ORDER, 0},
+  {"<", BINOP_LESS, PREC_ORDER, 0},
+  {">>", BINOP_RSH, PREC_SHIFT, 0},
+  {"<<", BINOP_LSH, PREC_SHIFT, 0},
+  {"+", BINOP_ADD, PREC_ADD, 0},
+  {"-", BINOP_SUB, PREC_ADD, 0},
+  {"*", BINOP_MUL, PREC_MUL, 0},
+  {"/", BINOP_DIV, PREC_MUL, 0},
+  {"%", BINOP_REM, PREC_MUL, 0},
+  {"@", BINOP_REPEAT, PREC_REPEAT, 0},
+  {"-", UNOP_NEG, PREC_PREFIX, 0},
+  {"!", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
+  {"^", UNOP_COMPLEMENT, PREC_PREFIX, 0},
+  {"*", UNOP_IND, PREC_PREFIX, 0},
+  {"&", UNOP_ADDR, PREC_PREFIX, 0},
+  {"unsafe.Sizeof ", UNOP_SIZEOF, PREC_PREFIX, 0},
+  {"++", UNOP_POSTINCREMENT, PREC_SUFFIX, 0},
+  {"--", UNOP_POSTDECREMENT, PREC_SUFFIX, 0},
+  {NULL, 0, 0, 0}
+};
+
+enum go_primitive_types {
+  go_primitive_type_void,
+  go_primitive_type_char,
+  go_primitive_type_bool,
+  go_primitive_type_int,
+  go_primitive_type_uint,
+  go_primitive_type_uintptr,
+  go_primitive_type_int8,
+  go_primitive_type_int16,
+  go_primitive_type_int32,
+  go_primitive_type_int64,
+  go_primitive_type_uint8,
+  go_primitive_type_uint16,
+  go_primitive_type_uint32,
+  go_primitive_type_uint64,
+  go_primitive_type_float32,
+  go_primitive_type_float64,
+  go_primitive_type_complex64,
+  go_primitive_type_complex128,
+  nr_go_primitive_types
+};
+
+static void
+go_language_arch_info (struct gdbarch *gdbarch,
+		       struct language_arch_info *lai)
+{
+  const struct builtin_go_type *builtin = builtin_go_type (gdbarch);
+
+  lai->string_char_type = builtin->builtin_char;
+
+  lai->primitive_type_vector
+    = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_go_primitive_types + 1,
+			      struct type *);
+
+  lai->primitive_type_vector [go_primitive_type_void]
+    = builtin->builtin_void;
+  lai->primitive_type_vector [go_primitive_type_char]
+    = builtin->builtin_char;
+  lai->primitive_type_vector [go_primitive_type_bool]
+    = builtin->builtin_bool;
+  lai->primitive_type_vector [go_primitive_type_int]
+    = builtin->builtin_int;
+  lai->primitive_type_vector [go_primitive_type_uint]
+    = builtin->builtin_uint;
+  lai->primitive_type_vector [go_primitive_type_uintptr]
+    = builtin->builtin_uintptr;
+  lai->primitive_type_vector [go_primitive_type_int8]
+    = builtin->builtin_int8;
+  lai->primitive_type_vector [go_primitive_type_int16]
+    = builtin->builtin_int16;
+  lai->primitive_type_vector [go_primitive_type_int32]
+    = builtin->builtin_int32;
+  lai->primitive_type_vector [go_primitive_type_int64]
+    = builtin->builtin_int64;
+  lai->primitive_type_vector [go_primitive_type_uint8]
+    = builtin->builtin_uint8;
+  lai->primitive_type_vector [go_primitive_type_uint16]
+    = builtin->builtin_uint16;
+  lai->primitive_type_vector [go_primitive_type_uint32]
+    = builtin->builtin_uint32;
+  lai->primitive_type_vector [go_primitive_type_uint64]
+    = builtin->builtin_uint64;
+  lai->primitive_type_vector [go_primitive_type_float32]
+    = builtin->builtin_float32;
+  lai->primitive_type_vector [go_primitive_type_float64]
+    = builtin->builtin_float64;
+  lai->primitive_type_vector [go_primitive_type_complex64]
+    = builtin->builtin_complex64;
+  lai->primitive_type_vector [go_primitive_type_complex128]
+    = builtin->builtin_complex128;
+
+  lai->bool_type_symbol = "bool";
+  lai->bool_type_default = builtin->builtin_bool;
+}
+
+static const struct language_defn go_language_defn =
+{
+  "go",
+  language_go,
+  range_check_off,
+  type_check_off,
+  case_sensitive_on,
+  array_row_major,
+  macro_expansion_no,
+  &exp_descriptor_c,
+  go_parse,
+  go_error,
+  null_post_parser,
+  c_printchar,			/* Print a character constant.  */
+  c_printstr,			/* Function to print string constant.  */
+  c_emit_char,			/* Print a single char.  */
+  go_print_type,		/* Print a type using appropriate syntax.  */
+  c_print_typedef,		/* Print a typedef using appropriate
+				   syntax.  */
+  go_val_print,			/* Print a value using appropriate syntax.  */
+  c_value_print,		/* Print a top-level value.  */
+  default_read_var_value,	/* la_read_var_value */
+  NULL,				/* Language specific skip_trampoline.  */
+  NULL,				/* name_of_this */
+  basic_lookup_symbol_nonlocal, 
+  basic_lookup_transparent_type,
+  go_demangle,			/* Language specific symbol demangler.  */
+  NULL,				/* Language specific
+				   class_name_from_physname.  */
+  go_op_print_tab,		/* Expression operators for printing.  */
+  1,				/* C-style arrays.  */
+  0,				/* String lower bound.  */
+  default_word_break_characters,
+  default_make_symbol_completion_list,
+  go_language_arch_info,
+  default_print_array_index,
+  default_pass_by_reference,
+  c_get_string,
+  NULL,
+  iterate_over_symbols,
+  LANG_MAGIC
+};
+
+static void *
+build_go_types (struct gdbarch *gdbarch)
+{
+  struct builtin_go_type *builtin_go_type
+    = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_go_type);
+
+  builtin_go_type->builtin_void
+    = arch_type (gdbarch, TYPE_CODE_VOID, 1, "void");
+  builtin_go_type->builtin_char
+    = arch_character_type (gdbarch, 8, 1, "char");
+  builtin_go_type->builtin_bool
+    = arch_boolean_type (gdbarch, 8, 0, "bool");
+  builtin_go_type->builtin_int
+    = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), 0, "int");
+  builtin_go_type->builtin_uint
+    = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), 1, "uint");
+  builtin_go_type->builtin_uintptr
+    = arch_integer_type (gdbarch, gdbarch_ptr_bit (gdbarch), 1, "uintptr");
+  builtin_go_type->builtin_int8
+    = arch_integer_type (gdbarch, 8, 0, "int8");
+  builtin_go_type->builtin_int16
+    = arch_integer_type (gdbarch, 16, 0, "int16");
+  builtin_go_type->builtin_int32
+    = arch_integer_type (gdbarch, 32, 0, "int32");
+  builtin_go_type->builtin_int64
+    = arch_integer_type (gdbarch, 64, 0, "int64");
+  builtin_go_type->builtin_uint8
+    = arch_integer_type (gdbarch, 8, 1, "uint8");
+  builtin_go_type->builtin_uint16
+    = arch_integer_type (gdbarch, 16, 1, "uint16");
+  builtin_go_type->builtin_uint32
+    = arch_integer_type (gdbarch, 32, 1, "uint32");
+  builtin_go_type->builtin_uint64
+    = arch_integer_type (gdbarch, 64, 1, "uint64");
+  builtin_go_type->builtin_float32
+    = arch_float_type (gdbarch, 32, "float32", NULL);
+  builtin_go_type->builtin_float64
+    = arch_float_type (gdbarch, 64, "float64", NULL);
+  builtin_go_type->builtin_complex64
+    = arch_complex_type (gdbarch, "complex64",
+			 builtin_go_type->builtin_float32);
+  builtin_go_type->builtin_complex128
+    = arch_complex_type (gdbarch, "complex128",
+			 builtin_go_type->builtin_float64);
+
+  return builtin_go_type;
+}
+
+static struct gdbarch_data *go_type_data;
+
+const struct builtin_go_type *
+builtin_go_type (struct gdbarch *gdbarch)
+{
+  return gdbarch_data (gdbarch, go_type_data);
+}
+
+extern initialize_file_ftype _initialize_go_language;
+
+void
+_initialize_go_language (void)
+{
+  go_type_data = gdbarch_data_register_post_init (build_go_types);
+
+  add_language (&go_language_defn);
+}
diff --git a/gdb/go-lang.h b/gdb/go-lang.h
new file mode 100644
index 0000000..67b5d93
--- /dev/null
+++ b/gdb/go-lang.h
@@ -0,0 +1,88 @@
+/* Go language support definitions for GDB, the GNU debugger.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#if !defined (GO_LANG_H)
+#define GO_LANG_H 1
+
+#include "gdbtypes.h"
+#include "symtab.h"
+#include "value.h"
+
+struct builtin_go_type
+{
+  struct type *builtin_void;
+  struct type *builtin_char;
+  struct type *builtin_bool;
+  struct type *builtin_int;
+  struct type *builtin_uint;
+  struct type *builtin_uintptr;
+  struct type *builtin_int8;
+  struct type *builtin_int16;
+  struct type *builtin_int32;
+  struct type *builtin_int64;
+  struct type *builtin_uint8;
+  struct type *builtin_uint16;
+  struct type *builtin_uint32;
+  struct type *builtin_uint64;
+  struct type *builtin_float32;
+  struct type *builtin_float64;
+  struct type *builtin_complex64;
+  struct type *builtin_complex128;
+};
+
+enum go_type
+{
+  GO_TYPE_NONE, /* Not a Go object.  */
+  GO_TYPE_STRING
+};
+
+/* Defined in go-exp.y.  */
+
+extern int go_parse (void);
+
+extern void go_error (char *);
+
+/* Defined in go-lang.c.  */
+
+extern const char *go_main_name (void);
+
+extern enum go_type go_classify_struct_type (struct type *type);
+
+extern char *go_demangle (const char *mangled, int options);
+
+extern char *go_symbol_package_name (const struct symbol *sym);
+
+extern char *go_block_package_name (const struct block *block);
+
+extern const struct builtin_go_type *builtin_go_type (struct gdbarch *);
+
+/* Defined in go-typeprint.c.  */
+
+extern void go_print_type (struct type *type, const char *varstring,
+			   struct ui_file *stream, int show, int level);
+
+/* Defined in go-valprint.c.  */
+
+extern void go_val_print (struct type *type, const gdb_byte *valaddr,
+			  int embedded_offset, CORE_ADDR address,
+			  struct ui_file *stream, int recurse,
+			  const struct value *val,
+			  const struct value_print_options *options);
+
+#endif /* !defined (GO_LANG_H) */
diff --git a/gdb/go-typeprint.c b/gdb/go-typeprint.c
new file mode 100644
index 0000000..a76c3dc
--- /dev/null
+++ b/gdb/go-typeprint.c
@@ -0,0 +1,62 @@
+/* Support for printing Go types for GDB, the GNU debugger.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* TODO:
+   - lots
+   - if the more complex types get Python pretty-printers, we'll
+     want a Python API for type printing
+*/
+
+#include "defs.h"
+#include "gdbtypes.h"
+#include "c-lang.h"
+#include "go-lang.h"
+
+/* Print a description of a type TYPE.
+   Output goes to STREAM (via stdio).
+   If VARSTRING is a non-empty string, print as an Ada variable/field
+       declaration.
+   SHOW+1 is the maximum number of levels of internal type structure
+      to show (this applies to record types, enumerated types, and
+      array types).
+   SHOW is the number of levels of internal type structure to show
+      when there is a type name for the SHOWth deepest level (0th is
+      outer level).
+   When SHOW<0, no inner structure is shown.
+   LEVEL indicates level of recursion (for nested definitions).  */
+
+void
+go_print_type (struct type *type, const char *varstring,
+	       struct ui_file *stream, int show, int level)
+{
+  /* Borrowed from c-typeprint.c.  */
+  if (show > 0)
+    CHECK_TYPEDEF (type);
+
+  /* Print the type of "abc" as "string", not char[4].  */
+  if (TYPE_CODE (type) == TYPE_CODE_ARRAY
+      && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_CHAR)
+    {
+      fputs_filtered ("string", stream);
+      return;
+    }
+
+  /* Punt the rest to C for now.  */
+  c_print_type (type, varstring, stream, show, level);
+}
diff --git a/gdb/go-valprint.c b/gdb/go-valprint.c
new file mode 100644
index 0000000..de52e9b
--- /dev/null
+++ b/gdb/go-valprint.c
@@ -0,0 +1,123 @@
+/* Support for printing Go values for GDB, the GNU debugger.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.
+
+   NOTE: This currently only provides special support for printing gccgo
+   strings.  6g objects are handled in Python.
+   The remaining gccgo types may also be handled in Python.
+   Strings are handled specially here, at least for now, in case the Python
+   support is unavailable.  */
+
+#include "defs.h"
+#include "gdbtypes.h"
+#include "gdbcore.h"
+#include "go-lang.h"
+#include "c-lang.h"
+#include "valprint.h"
+
+/* Print a Go string.
+
+   Note: We assume
+   gdb_assert (go_classify_struct_type (type) == GO_TYPE_STRING).  */
+
+static void
+print_go_string (struct type *type, const gdb_byte *valaddr,
+		 int embedded_offset, CORE_ADDR address,
+		 struct ui_file *stream, int recurse,
+		 const struct value *val,
+		 const struct value_print_options *options)
+{
+  struct gdbarch *gdbarch = get_type_arch (type);
+  struct type *elt_ptr_type = TYPE_FIELD_TYPE (type, 0);
+  struct type *elt_type = TYPE_TARGET_TYPE (elt_ptr_type);
+  LONGEST length;
+  /* TODO(dje): The encapsulation of what a pointer is belongs in value.c.
+     I.e. If there's going to be unpack_pointer, there should be
+     unpack_value_field_as_pointer.  Do this until we can get
+     unpack_value_field_as_pointer.  */
+  LONGEST addr;
+
+  gdb_assert (valaddr == value_contents_for_printing_const (val));
+
+  if (! unpack_value_field_as_long (type, valaddr, embedded_offset, 0,
+				    val, &addr))
+    error (_("Unable to read string address"));
+
+  if (! unpack_value_field_as_long (type, valaddr, embedded_offset, 1,
+				    val, &length))
+    error (_("Unable to read string length"));
+
+  /* TODO(dje): Print address of struct or actual string?  */
+  if (options->addressprint)
+    {
+      fputs_filtered (paddress (gdbarch, addr), stream);
+      fputs_filtered (" ", stream);
+    }
+
+  if (length < 0)
+    {
+      fputs_filtered (_("<invalid length: "), stream);
+      fputs_filtered (plongest (addr), stream);
+      fputs_filtered (">", stream);
+      return;
+    }
+
+  /* TODO(dje): Perhaps we should pass "UTF8" for ENCODING.
+     The target encoding is a global switch.
+     Either choice is problematic.  */
+  val_print_string (elt_type, NULL, addr, length, stream, options);
+}
+
+/* Implements the la_val_print routine for language Go.  */
+
+void
+go_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
+	      CORE_ADDR address, struct ui_file *stream, int recurse,
+	      const struct value *val,
+	      const struct value_print_options *options)
+{
+  CHECK_TYPEDEF (type);
+
+  switch (TYPE_CODE (type))
+    {
+      case TYPE_CODE_STRUCT:
+	{
+	  enum go_type go_type = go_classify_struct_type (type);
+
+	  switch (go_type)
+	    {
+	    case GO_TYPE_STRING:
+	      if (! options->raw)
+		{
+		  print_go_string (type, valaddr, embedded_offset, address,
+				   stream, recurse, val, options);
+		  return;
+		}
+	      break;
+	    default:
+	      break;
+	    }
+	}
+	/* Fall through.  */
+
+      default:
+	c_val_print (type, valaddr, embedded_offset, address, stream,
+		     recurse, val, options);
+	break;
+    }
+}
diff --git a/gdb/go32-nat.c b/gdb/go32-nat.c
index 4a78f33..b8fe284 100644
--- a/gdb/go32-nat.c
+++ b/gdb/go32-nat.c
@@ -238,7 +238,7 @@ static void go32_attach (struct target_ops *ops, char *args, int from_tty);
 static void go32_detach (struct target_ops *ops, char *args, int from_tty);
 static void go32_resume (struct target_ops *ops,
 			 ptid_t ptid, int step,
-			 enum target_signal siggnal);
+			 enum gdb_signal siggnal);
 static void go32_fetch_registers (struct target_ops *ops,
 				  struct regcache *, int regno);
 static void store_register (const struct regcache *, int regno);
@@ -309,57 +309,57 @@ regno_mapping[] =
 static struct
   {
     int go32_sig;
-    enum target_signal gdb_sig;
+    enum gdb_signal gdb_sig;
   }
 sig_map[] =
 {
-  {0, TARGET_SIGNAL_FPE},
-  {1, TARGET_SIGNAL_TRAP},
+  {0, GDB_SIGNAL_FPE},
+  {1, GDB_SIGNAL_TRAP},
   /* Exception 2 is triggered by the NMI.  DJGPP handles it as SIGILL,
      but I think SIGBUS is better, since the NMI is usually activated
      as a result of a memory parity check failure.  */
-  {2, TARGET_SIGNAL_BUS},
-  {3, TARGET_SIGNAL_TRAP},
-  {4, TARGET_SIGNAL_FPE},
-  {5, TARGET_SIGNAL_SEGV},
-  {6, TARGET_SIGNAL_ILL},
-  {7, TARGET_SIGNAL_EMT},	/* no-coprocessor exception */
-  {8, TARGET_SIGNAL_SEGV},
-  {9, TARGET_SIGNAL_SEGV},
-  {10, TARGET_SIGNAL_BUS},
-  {11, TARGET_SIGNAL_SEGV},
-  {12, TARGET_SIGNAL_SEGV},
-  {13, TARGET_SIGNAL_SEGV},
-  {14, TARGET_SIGNAL_SEGV},
-  {16, TARGET_SIGNAL_FPE},
-  {17, TARGET_SIGNAL_BUS},
-  {31, TARGET_SIGNAL_ILL},
-  {0x1b, TARGET_SIGNAL_INT},
-  {0x75, TARGET_SIGNAL_FPE},
-  {0x78, TARGET_SIGNAL_ALRM},
-  {0x79, TARGET_SIGNAL_INT},
-  {0x7a, TARGET_SIGNAL_QUIT},
-  {-1, TARGET_SIGNAL_LAST}
+  {2, GDB_SIGNAL_BUS},
+  {3, GDB_SIGNAL_TRAP},
+  {4, GDB_SIGNAL_FPE},
+  {5, GDB_SIGNAL_SEGV},
+  {6, GDB_SIGNAL_ILL},
+  {7, GDB_SIGNAL_EMT},	/* no-coprocessor exception */
+  {8, GDB_SIGNAL_SEGV},
+  {9, GDB_SIGNAL_SEGV},
+  {10, GDB_SIGNAL_BUS},
+  {11, GDB_SIGNAL_SEGV},
+  {12, GDB_SIGNAL_SEGV},
+  {13, GDB_SIGNAL_SEGV},
+  {14, GDB_SIGNAL_SEGV},
+  {16, GDB_SIGNAL_FPE},
+  {17, GDB_SIGNAL_BUS},
+  {31, GDB_SIGNAL_ILL},
+  {0x1b, GDB_SIGNAL_INT},
+  {0x75, GDB_SIGNAL_FPE},
+  {0x78, GDB_SIGNAL_ALRM},
+  {0x79, GDB_SIGNAL_INT},
+  {0x7a, GDB_SIGNAL_QUIT},
+  {-1, GDB_SIGNAL_LAST}
 };
 
 static struct {
-  enum target_signal gdb_sig;
+  enum gdb_signal gdb_sig;
   int djgpp_excepno;
 } excepn_map[] = {
-  {TARGET_SIGNAL_0, -1},
-  {TARGET_SIGNAL_ILL, 6},	/* Invalid Opcode */
-  {TARGET_SIGNAL_EMT, 7},	/* triggers SIGNOFP */
-  {TARGET_SIGNAL_SEGV, 13},	/* GPF */
-  {TARGET_SIGNAL_BUS, 17},	/* Alignment Check */
+  {GDB_SIGNAL_0, -1},
+  {GDB_SIGNAL_ILL, 6},	/* Invalid Opcode */
+  {GDB_SIGNAL_EMT, 7},	/* triggers SIGNOFP */
+  {GDB_SIGNAL_SEGV, 13},	/* GPF */
+  {GDB_SIGNAL_BUS, 17},	/* Alignment Check */
   /* The rest are fake exceptions, see dpmiexcp.c in djlsr*.zip for
      details.  */
-  {TARGET_SIGNAL_TERM, 0x1b},	/* triggers Ctrl-Break type of SIGINT */
-  {TARGET_SIGNAL_FPE, 0x75},
-  {TARGET_SIGNAL_INT, 0x79},
-  {TARGET_SIGNAL_QUIT, 0x7a},
-  {TARGET_SIGNAL_ALRM, 0x78},	/* triggers SIGTIMR */
-  {TARGET_SIGNAL_PROF, 0x78},
-  {TARGET_SIGNAL_LAST, -1}
+  {GDB_SIGNAL_TERM, 0x1b},	/* triggers Ctrl-Break type of SIGINT */
+  {GDB_SIGNAL_FPE, 0x75},
+  {GDB_SIGNAL_INT, 0x79},
+  {GDB_SIGNAL_QUIT, 0x7a},
+  {GDB_SIGNAL_ALRM, 0x78},	/* triggers SIGTIMR */
+  {GDB_SIGNAL_PROF, 0x78},
+  {GDB_SIGNAL_LAST, -1}
 };
 
 static void
@@ -391,16 +391,16 @@ static int resume_signal = -1;
 
 static void
 go32_resume (struct target_ops *ops,
-	     ptid_t ptid, int step, enum target_signal siggnal)
+	     ptid_t ptid, int step, enum gdb_signal siggnal)
 {
   int i;
 
   resume_is_step = step;
 
-  if (siggnal != TARGET_SIGNAL_0 && siggnal != TARGET_SIGNAL_TRAP)
+  if (siggnal != GDB_SIGNAL_0 && siggnal != GDB_SIGNAL_TRAP)
   {
     for (i = 0, resume_signal = -1;
-	 excepn_map[i].gdb_sig != TARGET_SIGNAL_LAST; i++)
+	 excepn_map[i].gdb_sig != GDB_SIGNAL_LAST; i++)
       if (excepn_map[i].gdb_sig == siggnal)
       {
 	resume_signal = excepn_map[i].djgpp_excepno;
@@ -408,7 +408,7 @@ go32_resume (struct target_ops *ops,
       }
     if (resume_signal == -1)
       printf_unfiltered ("Cannot deliver signal %s on this platform.\n",
-			 target_signal_to_name (siggnal));
+			 gdb_signal_to_name (siggnal));
   }
 }
 
@@ -513,7 +513,7 @@ go32_wait (struct target_ops *ops,
     }
   else
     {
-      status->value.sig = TARGET_SIGNAL_UNKNOWN;
+      status->value.sig = GDB_SIGNAL_UNKNOWN;
       status->kind = TARGET_WAITKIND_STOPPED;
       for (i = 0; sig_map[i].go32_sig != -1; i++)
 	{
@@ -521,7 +521,7 @@ go32_wait (struct target_ops *ops,
 	    {
 #if __DJGPP_MINOR__ < 3
 	      if ((status->value.sig = sig_map[i].gdb_sig) !=
-		  TARGET_SIGNAL_TRAP)
+		  GDB_SIGNAL_TRAP)
 		status->kind = TARGET_WAITKIND_SIGNALLED;
 #else
 	      status->value.sig = sig_map[i].gdb_sig;
@@ -801,6 +801,29 @@ go32_get_dr6 (void)
   return STATUS;
 }
 
+/* Get the value of the DR7 debug status register from the inferior.
+   Here we just return the value stored in D_REGS, as we've got it
+   from the last go32_wait call.  */
+
+static unsigned long
+go32_get_dr7 (void)
+{
+  return CONTROL;
+}
+
+/* Get the value of the DR debug register I from the inferior.  Here
+   we just return the value stored in D_REGS, as we've got it from the
+   last go32_wait call.  */
+
+static CORE_ADDR
+go32_get_dr (int i)
+{
+  if (i < 0 || i > 3)
+    internal_error (__FILE__, __LINE__,
+		    _("Invalid register %d in go32_get_dr.\n"), i);
+  return D_REGS[i];
+}
+
 /* Put the device open on handle FD into either raw or cooked
    mode, return 1 if it was in raw mode, zero otherwise.  */
 
@@ -984,8 +1007,9 @@ init_go32_ops (void)
 
   i386_dr_low.set_control = go32_set_dr7;
   i386_dr_low.set_addr = go32_set_dr;
-  i386_dr_low.reset_addr = NULL;
   i386_dr_low.get_status = go32_get_dr6;
+  i386_dr_low.get_control = go32_get_dr7;
+  i386_dr_low.get_addr = go32_get_dr;
   i386_set_debug_register_length (4);
 
   go32_ops.to_magic = OPS_MAGIC;
diff --git a/gdb/gregset.h b/gdb/gregset.h
index 4f34788..d73b5b8 100644
--- a/gdb/gregset.h
+++ b/gdb/gregset.h
@@ -19,6 +19,10 @@
 #ifndef GREGSET_H
 #define GREGSET_H
 
+#ifdef HAVE_SYS_PROCFS_H
+#include <sys/procfs.h>
+#endif
+
 #ifndef GDB_GREGSET_T
 #define GDB_GREGSET_T gregset_t
 #endif
diff --git a/gdb/h8300-tdep.c b/gdb/h8300-tdep.c
index aa056f9..237f4a3 100644
--- a/gdb/h8300-tdep.c
+++ b/gdb/h8300-tdep.c
@@ -430,7 +430,6 @@ h8300_frame_cache (struct frame_info *this_frame, void **this_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   struct h8300_frame_cache *cache;
-  char buf[4];
   int i;
   CORE_ADDR current_pc;
 
@@ -783,7 +782,7 @@ h8300h_extract_return_value (struct type *type, struct regcache *regcache,
   struct gdbarch *gdbarch = get_regcache_arch (regcache);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   int len = TYPE_LENGTH (type);
-  ULONGEST c, addr;
+  ULONGEST c;
 
   switch (len)
     {
@@ -901,7 +900,7 @@ h8300h_store_return_value (struct type *type, struct regcache *regcache,
 }
 
 static enum return_value_convention
-h8300_return_value (struct gdbarch *gdbarch, struct type *func_type,
+h8300_return_value (struct gdbarch *gdbarch, struct value *function,
 		    struct type *type, struct regcache *regcache,
 		    gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -915,7 +914,7 @@ h8300_return_value (struct gdbarch *gdbarch, struct type *func_type,
 }
 
 static enum return_value_convention
-h8300h_return_value (struct gdbarch *gdbarch, struct type *func_type,
+h8300h_return_value (struct gdbarch *gdbarch, struct value *function,
 		     struct type *type, struct regcache *regcache,
 		     gdb_byte *readbuf, const gdb_byte *writebuf)
 {
diff --git a/gdb/hppa-hpux-tdep.c b/gdb/hppa-hpux-tdep.c
index 8529b3a..f6dfef2 100644
--- a/gdb/hppa-hpux-tdep.c
+++ b/gdb/hppa-hpux-tdep.c
@@ -177,7 +177,7 @@ hppa64_hpux_in_solib_call_trampoline (struct gdbarch *gdbarch,
   struct minimal_symbol *minsym;
   asection *sec;
   CORE_ADDR addr;
-  int insn, i;
+  int insn;
 
   minsym = lookup_minimal_symbol_by_pc (pc);
   if (! minsym)
@@ -230,7 +230,7 @@ hppa64_hpux_in_solib_call_trampoline (struct gdbarch *gdbarch,
 
 static int
 hppa_hpux_in_solib_return_trampoline (struct gdbarch *gdbarch,
-				      CORE_ADDR pc, char *name)
+				      CORE_ADDR pc, const char *name)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   struct unwind_table_entry *u;
@@ -956,7 +956,6 @@ hppa64_hpux_search_dummy_call_sequence (struct gdbarch *gdbarch, CORE_ADDR pc,
   struct hppa_objfile_private *priv;
   CORE_ADDR addr;
   struct minimal_symbol *msym;
-  int i;
 
   sec = find_pc_section (pc);
   obj = sec->objfile;
@@ -979,10 +978,10 @@ hppa64_hpux_search_dummy_call_sequence (struct gdbarch *gdbarch, CORE_ADDR pc,
      scheme; try to read in blocks of code, and look for a "bve,n (rp)" 
      instruction.  These are likely to occur at the end of functions, so
      we only look at the last two instructions of each function.  */
-  for (i = 0, msym = obj->msymbols; i < obj->minimal_symbol_count; i++, msym++)
+  ALL_OBJFILE_MSYMBOLS (obj, msym)
     {
       CORE_ADDR begin, end;
-      char *name;
+      const char *name;
       gdb_byte buf[2 * HPPA_INSN_SIZE];
       int offset;
 
@@ -1087,7 +1086,6 @@ hppa_hpux_find_dummy_bpaddr (CORE_ADDR addr)
   struct unwind_table_entry *u;
   struct minimal_symbol *msym;
   CORE_ADDR func;
-  int i;
 
   sec = find_pc_section (addr);
   if (sec)
@@ -1107,9 +1105,7 @@ hppa_hpux_find_dummy_bpaddr (CORE_ADDR addr)
 	 work.  */
 
       find_pc_partial_function (addr, NULL, &func, NULL);
-      for (i = 0, msym = sec->objfile->msymbols;
-      	   i < sec->objfile->minimal_symbol_count;
-	   i++, msym++)
+      ALL_OBJFILE_MSYMBOLS (sec->objfile, msym)
 	{
 	  u = find_unwind_entry (SYMBOL_VALUE_ADDRESS (msym));
 	  if (func != SYMBOL_VALUE_ADDRESS (msym) 
diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c
index 7f7fb8e..581ffc7 100644
--- a/gdb/hppa-tdep.c
+++ b/gdb/hppa-tdep.c
@@ -543,7 +543,6 @@ hppa_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
   unsigned long status;
   unsigned int inst;
   char buf[4];
-  int off;
 
   status = target_read_memory (pc, buf, 4);
   if (status != 0)
@@ -1114,7 +1113,7 @@ hppa64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
 /* Handle 32/64-bit struct return conventions.  */
 
 static enum return_value_convention
-hppa32_return_value (struct gdbarch *gdbarch, struct type *func_type,
+hppa32_return_value (struct gdbarch *gdbarch, struct value *function,
 		     struct type *type, struct regcache *regcache,
 		     gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -1154,7 +1153,7 @@ hppa32_return_value (struct gdbarch *gdbarch, struct type *func_type,
 }
 
 static enum return_value_convention
-hppa64_return_value (struct gdbarch *gdbarch, struct type *func_type,
+hppa64_return_value (struct gdbarch *gdbarch, struct value *function,
 		     struct type *type, struct regcache *regcache,
 		     gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -1698,7 +1697,6 @@ after_prologue (CORE_ADDR pc)
 {
   struct symtab_and_line sal;
   CORE_ADDR func_addr, func_end;
-  struct symbol *f;
 
   /* If we can not find the symbol in the partial symbol table, then
      there is no hope we can determine the function's start address
@@ -1738,10 +1736,7 @@ after_prologue (CORE_ADDR pc)
 static CORE_ADDR
 hppa_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
-  unsigned long inst;
-  int offset;
   CORE_ADDR post_prologue_pc;
-  char buf[4];
 
   /* See if we can determine the end of the prologue via the symbol table.
      If so, then return either PC, or the PC after the prologue, whichever
@@ -1793,7 +1788,6 @@ hppa_frame_cache (struct frame_info *this_frame, void **this_cache)
   struct hppa_frame_cache *cache;
   long saved_gr_mask;
   long saved_fr_mask;
-  CORE_ADDR this_sp;
   long frame_size;
   struct unwind_table_entry *u;
   CORE_ADDR prologue_end;
diff --git a/gdb/hppanbsd-tdep.c b/gdb/hppanbsd-tdep.c
index f563289..6c9ba72 100644
--- a/gdb/hppanbsd-tdep.c
+++ b/gdb/hppanbsd-tdep.c
@@ -169,7 +169,6 @@ hppanbsd_supply_gregset (const struct regset *regset,
 			 int regnum, const void *gregs, size_t len)
 {
   const gdb_byte *regs = gregs;
-  size_t offset;
   int i;
 
   gdb_assert (len >= HPPANBSD_SIZEOF_GREGS);
diff --git a/gdb/i386-cygwin-tdep.c b/gdb/i386-cygwin-tdep.c
index fb940f8..bb395e7 100644
--- a/gdb/i386-cygwin-tdep.c
+++ b/gdb/i386-cygwin-tdep.c
@@ -257,6 +257,9 @@ i386_cygwin_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   /* Canonical paths on this target look like
      `c:\Program Files\Foo App\mydll.dll', for example.  */
   set_gdbarch_has_dos_based_file_system (gdbarch, 1);
+
+  set_gdbarch_iterate_over_objfiles_in_search_order
+    (gdbarch, windows_iterate_over_objfiles_in_search_order);
 }
 
 static enum gdb_osabi
diff --git a/gdb/i386-darwin-nat.c b/gdb/i386-darwin-nat.c
index 012a71e..6afbbd0 100644
--- a/gdb/i386-darwin-nat.c
+++ b/gdb/i386-darwin-nat.c
@@ -34,6 +34,7 @@
 #include "arch-utils.h"
 #include "gdbcore.h"
 
+#include "i386-nat.h"
 #include "darwin-nat.h"
 #include "i386-darwin-tdep.h"
 
@@ -69,8 +70,8 @@ i386_darwin_fetch_inferior_registers (struct target_ops *ops,
 	  if (ret != KERN_SUCCESS)
 	    {
 	      printf_unfiltered (_("Error calling thread_get_state for "
-				   "GP registers for thread 0x%ulx"),
-				 current_thread);
+				   "GP registers for thread 0x%lx\n"),
+				 (unsigned long) current_thread);
 	      MACH_CHECK_ERROR (ret);
 	    }
 	  amd64_supply_native_gregset (regcache, &gp_regs.uts, -1);
@@ -89,8 +90,8 @@ i386_darwin_fetch_inferior_registers (struct target_ops *ops,
 	  if (ret != KERN_SUCCESS)
 	    {
 	      printf_unfiltered (_("Error calling thread_get_state for "
-				   "float registers for thread 0x%ulx"),
-				 current_thread);
+				   "float registers for thread 0x%lx\n"),
+				 (unsigned long) current_thread);
 	      MACH_CHECK_ERROR (ret);
 	    }
           amd64_supply_fxsave (regcache, -1, &fp_regs.ufs.fs64.__fpu_fcw);
@@ -102,19 +103,19 @@ i386_darwin_fetch_inferior_registers (struct target_ops *ops,
     {
       if (regno == -1 || regno < I386_NUM_GREGS)
         {
-          i386_thread_state_t gp_regs;
-          unsigned int gp_count = i386_THREAD_STATE_COUNT;
+          x86_thread_state32_t gp_regs;
+          unsigned int gp_count = x86_THREAD_STATE32_COUNT;
           kern_return_t ret;
 	  int i;
 
 	  ret = thread_get_state
-            (current_thread, i386_THREAD_STATE, (thread_state_t) & gp_regs,
+            (current_thread, x86_THREAD_STATE32, (thread_state_t) &gp_regs,
              &gp_count);
 	  if (ret != KERN_SUCCESS)
 	    {
 	      printf_unfiltered (_("Error calling thread_get_state for "
-				   "GP registers for thread 0x%ulx"),
-				 current_thread);
+				   "GP registers for thread 0x%lx\n"),
+				 (unsigned long) current_thread);
 	      MACH_CHECK_ERROR (ret);
 	    }
 	  for (i = 0; i < I386_NUM_GREGS; i++)
@@ -128,18 +129,18 @@ i386_darwin_fetch_inferior_registers (struct target_ops *ops,
       if (regno == -1
 	  || (regno >= I386_ST0_REGNUM && regno < I386_SSE_NUM_REGS))
         {
-          i386_float_state_t fp_regs;
-          unsigned int fp_count = i386_FLOAT_STATE_COUNT;
+          x86_float_state32_t fp_regs;
+          unsigned int fp_count = x86_FLOAT_STATE32_COUNT;
           kern_return_t ret;
 
 	  ret = thread_get_state
-            (current_thread, i386_FLOAT_STATE, (thread_state_t) & fp_regs,
+            (current_thread, x86_FLOAT_STATE32, (thread_state_t) &fp_regs,
              &fp_count);
 	  if (ret != KERN_SUCCESS)
 	    {
 	      printf_unfiltered (_("Error calling thread_get_state for "
-				   "float registers for thread 0x%ulx"),
-				 current_thread);
+				   "float registers for thread 0x%lx\n"),
+				 (unsigned long) current_thread);
 	      MACH_CHECK_ERROR (ret);
 	    }
           i387_supply_fxsave (regcache, -1, &fp_regs.__fpu_fcw);
@@ -215,13 +216,13 @@ i386_darwin_store_inferior_registers (struct target_ops *ops,
     {
       if (regno == -1 || regno < I386_NUM_GREGS)
         {
-          i386_thread_state_t gp_regs;
+          x86_thread_state32_t gp_regs;
           kern_return_t ret;
-          unsigned int gp_count = i386_THREAD_STATE_COUNT;
+          unsigned int gp_count = x86_THREAD_STATE32_COUNT;
 	  int i;
 
           ret = thread_get_state
-            (current_thread, i386_THREAD_STATE, (thread_state_t) & gp_regs,
+            (current_thread, x86_THREAD_STATE32, (thread_state_t) &gp_regs,
              &gp_count);
 	  MACH_CHECK_ERROR (ret);
 
@@ -231,54 +232,37 @@ i386_darwin_store_inferior_registers (struct target_ops *ops,
 		(regcache, i,
 		 (char *)&gp_regs + i386_darwin_thread_state_reg_offset[i]);
 
-          ret = thread_set_state (current_thread, i386_THREAD_STATE,
-                                  (thread_state_t) & gp_regs,
-                                  i386_THREAD_STATE_COUNT);
+          ret = thread_set_state (current_thread, x86_THREAD_STATE32,
+                                  (thread_state_t) &gp_regs,
+                                  x86_THREAD_STATE32_COUNT);
           MACH_CHECK_ERROR (ret);
         }
 
       if (regno == -1
 	  || (regno >= I386_ST0_REGNUM && regno < I386_SSE_NUM_REGS))
         {
-          i386_float_state_t fp_regs;
-          unsigned int fp_count = i386_FLOAT_STATE_COUNT;
+          x86_float_state32_t fp_regs;
+          unsigned int fp_count = x86_FLOAT_STATE32_COUNT;
           kern_return_t ret;
 
 	  ret = thread_get_state
-            (current_thread, i386_FLOAT_STATE, (thread_state_t) & fp_regs,
+            (current_thread, x86_FLOAT_STATE32, (thread_state_t) & fp_regs,
              &fp_count);
 	  MACH_CHECK_ERROR (ret);
 
 	  i387_collect_fxsave (regcache, regno, &fp_regs.__fpu_fcw);
 
-	  ret = thread_set_state (current_thread, i386_FLOAT_STATE,
-				  (thread_state_t) & fp_regs,
-				  i386_FLOAT_STATE_COUNT);
+	  ret = thread_set_state (current_thread, x86_FLOAT_STATE32,
+				  (thread_state_t) &fp_regs,
+				  x86_FLOAT_STATE32_COUNT);
 	  MACH_CHECK_ERROR (ret);
         }
     }
 }
 
-
+#ifdef HW_WATCHPOINT_NOT_YET_ENABLED
 /* Support for debug registers, boosted mostly from i386-linux-nat.c.  */
 
-#ifndef DR_FIRSTADDR
-#define DR_FIRSTADDR 0
-#endif
-
-#ifndef DR_LASTADDR
-#define DR_LASTADDR 3
-#endif
-
-#ifndef DR_STATUS
-#define DR_STATUS 6
-#endif
-
-#ifndef DR_CONTROL
-#define DR_CONTROL 7
-#endif
-
-
 static void
 i386_darwin_dr_set (int regnum, uint32_t value)
 {
@@ -409,12 +393,10 @@ i386_darwin_dr_set_addr (int regnum, CORE_ADDR addr)
   i386_darwin_dr_set (DR_FIRSTADDR + regnum, addr);
 }
 
-void
-i386_darwin_dr_reset_addr (int regnum)
+CORE_ADDR
+i386_darwin_dr_get_addr (int regnum)
 {
-  gdb_assert (regnum >= 0 && regnum <= DR_LASTADDR - DR_FIRSTADDR);
-
-  i386_darwin_dr_set (DR_FIRSTADDR + regnum, 0L);
+  return i386_darwin_dr_get (regnum);
 }
 
 unsigned long
@@ -423,6 +405,13 @@ i386_darwin_dr_get_status (void)
   return i386_darwin_dr_get (DR_STATUS);
 }
 
+unsigned long
+i386_darwin_dr_get_control (void)
+{
+  return i386_darwin_dr_get (DR_CONTROL);
+}
+#endif
+
 void
 darwin_check_osabi (darwin_inferior *inf, thread_t thread)
 {
diff --git a/gdb/i386-darwin-tdep.c b/gdb/i386-darwin-tdep.c
index 2e3fe9e..c353154 100644
--- a/gdb/i386-darwin-tdep.c
+++ b/gdb/i386-darwin-tdep.c
@@ -56,7 +56,7 @@ int i386_darwin_thread_state_reg_offset[] =
   10 * 4,   /* EIP */
    9 * 4,   /* EFLAGS */
   11 * 4,   /* CS */
-   8,       /* SS */
+   8 * 4,   /* SS */
   12 * 4,   /* DS */
   13 * 4,   /* ES */
   14 * 4,   /* FS */
@@ -287,6 +287,9 @@ i386_mach_o_osabi_sniffer (bfd *abfd)
   return GDB_OSABI_UNKNOWN;
 }
 
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_i386_darwin_tdep;
+
 void
 _initialize_i386_darwin_tdep (void)
 {
diff --git a/gdb/i386-dicos-tdep.c b/gdb/i386-dicos-tdep.c
index 8039c90..ca37673 100644
--- a/gdb/i386-dicos-tdep.c
+++ b/gdb/i386-dicos-tdep.c
@@ -22,32 +22,12 @@
 #include "gdb_string.h"
 #include "dicos-tdep.h"
 
-static CORE_ADDR
-i386_dicos_push_dummy_code (struct gdbarch *gdbarch,
-			    CORE_ADDR sp, CORE_ADDR funaddr,
-			    struct value **args, int nargs,
-			    struct type *value_type,
-			    CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
-			    struct regcache *regcache)
-{
-  int bplen;
-  CORE_ADDR bppc = sp;
-
-  gdbarch_breakpoint_from_pc (gdbarch, &bppc, &bplen);
-  *bp_addr = sp - bplen;
-  *real_pc = funaddr;
-
-  return *bp_addr;
-}
-
 static void
 i386_dicos_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
 
   dicos_init_abi (gdbarch);
-
-  set_gdbarch_push_dummy_code (gdbarch, i386_dicos_push_dummy_code);
 }
 
 static enum gdb_osabi
diff --git a/gdb/i386-linux-nat.c b/gdb/i386-linux-nat.c
index afe6f46..5a65ef6 100644
--- a/gdb/i386-linux-nat.c
+++ b/gdb/i386-linux-nat.c
@@ -46,22 +46,6 @@
 #include <sys/debugreg.h>
 #endif
 
-#ifndef DR_FIRSTADDR
-#define DR_FIRSTADDR 0
-#endif
-
-#ifndef DR_LASTADDR
-#define DR_LASTADDR 3
-#endif
-
-#ifndef DR_STATUS
-#define DR_STATUS 6
-#endif
-
-#ifndef DR_CONTROL
-#define DR_CONTROL 7
-#endif
-
 /* Prototypes for supply_gregset etc.  */
 #include "gregset.h"
 
@@ -82,6 +66,14 @@
 #define PTRACE_SETREGSET	0x4205
 #endif
 
+/* Per-thread arch-specific data we want to keep.  */
+
+struct arch_lwp_info
+{
+  /* Non-zero if our copy differs from what's recorded in the thread.  */
+  int debug_registers_changed;
+};
+
 /* Does the current host support PTRACE_GETREGSET?  */
 static int have_ptrace_getregset = -1;
 

@@ -650,8 +642,6 @@ i386_linux_store_inferior_registers (struct target_ops *ops,
 
 /* Support for debug registers.  */
 
-static unsigned long i386_linux_dr[DR_CONTROL + 1];
-
 /* Get debug register REGNUM value from only the one LWP of PTID.  */
 
 static unsigned long
@@ -691,74 +681,127 @@ i386_linux_dr_set (ptid_t ptid, int regnum, unsigned long value)
     perror_with_name (_("Couldn't write debug register"));
 }
 
-/* Set DR_CONTROL to ADDR in all LWPs of LWP_LIST.  */
+/* Return the inferior's debug register REGNUM.  */
 
-static void
-i386_linux_dr_set_control (unsigned long control)
+static CORE_ADDR
+i386_linux_dr_get_addr (int regnum)
 {
-  struct lwp_info *lp;
+  /* DR6 and DR7 are retrieved with some other way.  */
+  gdb_assert (DR_FIRSTADDR <= regnum && regnum <= DR_LASTADDR);
 
-  i386_linux_dr[DR_CONTROL] = control;
-  ALL_LWPS (lp)
-    i386_linux_dr_set (lp->ptid, DR_CONTROL, control);
+  return i386_linux_dr_get (inferior_ptid, regnum);
 }
 
-/* Set address REGNUM (zero based) to ADDR in all LWPs of LWP_LIST.  */
+/* Return the inferior's DR7 debug control register.  */
 
-static void
-i386_linux_dr_set_addr (int regnum, CORE_ADDR addr)
+static unsigned long
+i386_linux_dr_get_control (void)
 {
-  struct lwp_info *lp;
+  return i386_linux_dr_get (inferior_ptid, DR_CONTROL);
+}
 
-  gdb_assert (regnum >= 0 && regnum <= DR_LASTADDR - DR_FIRSTADDR);
+/* Get DR_STATUS from only the one LWP of INFERIOR_PTID.  */
 
-  i386_linux_dr[DR_FIRSTADDR + regnum] = addr;
-  ALL_LWPS (lp)
-    i386_linux_dr_set (lp->ptid, DR_FIRSTADDR + regnum, addr);
+static unsigned long
+i386_linux_dr_get_status (void)
+{
+  return i386_linux_dr_get (inferior_ptid, DR_STATUS);
 }
 
-/* Set address REGNUM (zero based) to zero in all LWPs of LWP_LIST.  */
+/* Callback for linux_nat_iterate_watchpoint_lwps.  Update the debug registers
+   of LWP.  */
+
+static int
+update_debug_registers_callback (struct lwp_info *lwp, void *arg)
+{
+  if (lwp->arch_private == NULL)
+    lwp->arch_private = XCNEW (struct arch_lwp_info);
+
+  /* The actual update is done later just before resuming the lwp, we
+     just mark that the registers need updating.  */
+  lwp->arch_private->debug_registers_changed = 1;
+
+  /* If the lwp isn't stopped, force it to momentarily pause, so we
+     can update its debug registers.  */
+  if (!lwp->stopped)
+    linux_stop_lwp (lwp);
+
+  /* Continue the iteration.  */
+  return 0;
+}
+
+/* Set DR_CONTROL to ADDR in all LWPs of the current inferior.  */
 
 static void
-i386_linux_dr_reset_addr (int regnum)
+i386_linux_dr_set_control (unsigned long control)
 {
-  i386_linux_dr_set_addr (regnum, 0);
+  linux_nat_iterate_watchpoint_lwps (update_debug_registers_callback, NULL);
 }
 
-/* Get DR_STATUS from only the one LWP of INFERIOR_PTID.  */
+/* Set address REGNUM (zero based) to ADDR in all LWPs of the current
+   inferior.  */
 
-static unsigned long
-i386_linux_dr_get_status (void)
+static void
+i386_linux_dr_set_addr (int regnum, CORE_ADDR addr)
 {
-  return i386_linux_dr_get (inferior_ptid, DR_STATUS);
+  ptid_t pid_ptid = pid_to_ptid (ptid_get_pid (inferior_ptid));
+
+  gdb_assert (regnum >= 0 && regnum <= DR_LASTADDR - DR_FIRSTADDR);
+
+  linux_nat_iterate_watchpoint_lwps (update_debug_registers_callback, NULL);
 }
 
-/* Unset MASK bits in DR_STATUS in all LWPs of LWP_LIST.  */
+/* Called when resuming a thread.
+   If the debug regs have changed, update the thread's copies.  */
 
 static void
-i386_linux_dr_unset_status (unsigned long mask)
+i386_linux_prepare_to_resume (struct lwp_info *lwp)
 {
-  struct lwp_info *lp;
+  int clear_status = 0;
 
-  ALL_LWPS (lp)
+  /* NULL means this is the main thread still going through the shell,
+     or, no watchpoint has been set yet.  In that case, there's
+     nothing to do.  */
+  if (lwp->arch_private == NULL)
+    return;
+
+  if (lwp->arch_private->debug_registers_changed)
     {
-      unsigned long value;
+      struct i386_debug_reg_state *state = i386_debug_reg_state ();
+      int i;
+
+      /* See amd64_linux_prepare_to_resume for Linux kernel note on
+	 i386_linux_dr_set calls ordering.  */
 
-      value = i386_linux_dr_get (lp->ptid, DR_STATUS);
-      value &= ~mask;
-      i386_linux_dr_set (lp->ptid, DR_STATUS, value);
+      for (i = DR_FIRSTADDR; i <= DR_LASTADDR; i++)
+	if (state->dr_ref_count[i] > 0)
+	  {
+	    i386_linux_dr_set (lwp->ptid, i, state->dr_mirror[i]);
+
+	    /* If we're setting a watchpoint, any change the inferior
+	       had done itself to the debug registers needs to be
+	       discarded, otherwise, i386_stopped_data_address can get
+	       confused.  */
+	    clear_status = 1;
+	  }
+
+      i386_linux_dr_set (lwp->ptid, DR_CONTROL, state->dr_control_mirror);
+
+      lwp->arch_private->debug_registers_changed = 0;
     }
+
+  if (clear_status || lwp->stopped_by_watchpoint)
+    i386_linux_dr_set (lwp->ptid, DR_STATUS, 0);
 }
 
 static void
-i386_linux_new_thread (ptid_t ptid)
+i386_linux_new_thread (struct lwp_info *lp)
 {
-  int i;
+  struct arch_lwp_info *info = XCNEW (struct arch_lwp_info);
 
-  for (i = DR_FIRSTADDR; i <= DR_LASTADDR; i++)
-    i386_linux_dr_set (ptid, i, i386_linux_dr[i]);
+  info->debug_registers_changed = 1;
 
-  i386_linux_dr_set (ptid, DR_CONTROL, i386_linux_dr[DR_CONTROL]);
+  lp->arch_private = info;
 }
 

 
@@ -832,7 +875,7 @@ static const unsigned char linux_syscall[] = { 0xcd, 0x80 };
 
 static void
 i386_linux_resume (struct target_ops *ops,
-		   ptid_t ptid, int step, enum target_signal signal)
+		   ptid_t ptid, int step, enum gdb_signal signal)
 {
   int pid = PIDGET (ptid);
 
@@ -895,7 +938,7 @@ i386_linux_resume (struct target_ops *ops,
 	}
     }
 
-  if (ptrace (request, pid, 0, target_signal_to_host (signal)) == -1)
+  if (ptrace (request, pid, 0, gdb_signal_to_host (signal)) == -1)
     perror_with_name (("ptrace"));
 }
 
@@ -965,6 +1008,9 @@ i386_linux_read_description (struct target_ops *ops)
     return tdesc_i386_linux;
 }
 
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_i386_linux_nat;
+
 void
 _initialize_i386_linux_nat (void)
 {
@@ -977,9 +1023,9 @@ _initialize_i386_linux_nat (void)
 
   i386_dr_low.set_control = i386_linux_dr_set_control;
   i386_dr_low.set_addr = i386_linux_dr_set_addr;
-  i386_dr_low.reset_addr = i386_linux_dr_reset_addr;
+  i386_dr_low.get_addr = i386_linux_dr_get_addr;
   i386_dr_low.get_status = i386_linux_dr_get_status;
-  i386_dr_low.unset_status = i386_linux_dr_unset_status;
+  i386_dr_low.get_control = i386_linux_dr_get_control;
   i386_set_debug_register_length (4);
 
   /* Override the default ptrace resume method.  */
@@ -998,4 +1044,5 @@ _initialize_i386_linux_nat (void)
   /* Register the target.  */
   linux_nat_add_target (t);
   linux_nat_set_new_thread (t, i386_linux_new_thread);
+  linux_nat_set_prepare_to_resume (t, i386_linux_prepare_to_resume);
 }
diff --git a/gdb/i386-linux-tdep.c b/gdb/i386-linux-tdep.c
index eb114ef..8475d7a 100644
--- a/gdb/i386-linux-tdep.c
+++ b/gdb/i386-linux-tdep.c
@@ -254,7 +254,7 @@ static int
 i386_linux_sigtramp_p (struct frame_info *this_frame)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
-  char *name;
+  const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
 
@@ -279,7 +279,7 @@ i386_linux_dwarf_signal_frame_p (struct gdbarch *gdbarch,
 				 struct frame_info *this_frame)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
-  char *name;
+  const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
 
@@ -418,7 +418,7 @@ i386_canonicalize_syscall (int syscall)
 static struct linux_record_tdep i386_linux_record_tdep;
 
 static int
-i386_linux_intx80_sysenter_record (struct regcache *regcache)
+i386_linux_intx80_sysenter_syscall_record (struct regcache *regcache)
 {
   int ret;
   LONGEST syscall_native;
@@ -459,10 +459,10 @@ i386_linux_intx80_sysenter_record (struct regcache *regcache)
 #define I386_LINUX_xstate	270
 #define I386_LINUX_frame_size	732
 
-int
+static int
 i386_linux_record_signal (struct gdbarch *gdbarch,
                           struct regcache *regcache,
-                          enum target_signal signal)
+                          enum gdb_signal signal)
 {
   ULONGEST esp;
 
@@ -491,11 +491,17 @@ i386_linux_record_signal (struct gdbarch *gdbarch,
 }
 

 
+/* Core of the implementation for gdbarch get_syscall_number.  Get pending
+   syscall number from REGCACHE.  If there is no pending syscall -1 will be
+   returned.  Pending syscall means ptrace has stepped into the syscall but
+   another ptrace call will step out.  PC is right after the int $0x80
+   / syscall / sysenter instruction in both cases, PC does not change during
+   the second ptrace step.  */
+
 static LONGEST
-i386_linux_get_syscall_number (struct gdbarch *gdbarch,
-                               ptid_t ptid)
+i386_linux_get_syscall_number_from_regcache (struct regcache *regcache)
 {
-  struct regcache *regcache = get_thread_regcache (ptid);
+  struct gdbarch *gdbarch = get_regcache_arch (regcache);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   /* The content of a register.  */
   gdb_byte buf[4];
@@ -512,6 +518,18 @@ i386_linux_get_syscall_number (struct gdbarch *gdbarch,
   return ret;
 }
 
+/* Wrapper for i386_linux_get_syscall_number_from_regcache to make it
+   compatible with gdbarch get_syscall_number method prototype.  */
+
+static LONGEST
+i386_linux_get_syscall_number (struct gdbarch *gdbarch,
+                               ptid_t ptid)
+{
+  struct regcache *regcache = get_thread_regcache (ptid);
+
+  return i386_linux_get_syscall_number_from_regcache (regcache);
+}
+
 /* The register sets used in GNU/Linux ELF core-dumps are identical to
    the register sets in `struct user' that are used for a.out
    core-dumps.  These are also used by ptrace(2).  The corresponding
@@ -643,6 +661,49 @@ i386_linux_core_read_description (struct gdbarch *gdbarch,
     return tdesc_i386_mmx_linux;
 }
 
+/* Linux kernel shows PC value after the 'int $0x80' instruction even if
+   inferior is still inside the syscall.  On next PTRACE_SINGLESTEP it will
+   finish the syscall but PC will not change.
+   
+   Some vDSOs contain 'int $0x80; ret' and during stepping out of the syscall
+   i386_displaced_step_fixup would keep PC at the displaced pad location.
+   As PC is pointing to the 'ret' instruction before the step
+   i386_displaced_step_fixup would expect inferior has just executed that 'ret'
+   and PC should not be adjusted.  In reality it finished syscall instead and
+   PC should get relocated back to its vDSO address.  Hide the 'ret'
+   instruction by 'nop' so that i386_displaced_step_fixup is not confused.
+   
+   It is not fully correct as the bytes in struct displaced_step_closure will
+   not match the inferior code.  But we would need some new flag in
+   displaced_step_closure otherwise to keep the state that syscall is finishing
+   for the later i386_displaced_step_fixup execution as the syscall execution
+   is already no longer detectable there.  The new flag field would mean
+   i386-linux-tdep.c needs to wrap all the displacement methods of i386-tdep.c
+   which does not seem worth it.  The same effect is achieved by patching that
+   'nop' instruction there instead.  */
+
+static struct displaced_step_closure *
+i386_linux_displaced_step_copy_insn (struct gdbarch *gdbarch,
+				     CORE_ADDR from, CORE_ADDR to,
+				     struct regcache *regs)
+{
+  struct displaced_step_closure *closure;
+  
+  closure = i386_displaced_step_copy_insn (gdbarch, from, to, regs);
+
+  if (i386_linux_get_syscall_number_from_regcache (regs) != -1)
+    {
+      /* Since we use simple_displaced_step_copy_insn, our closure is a
+	 copy of the instruction.  */
+      gdb_byte *insn = (gdb_byte *) closure;
+
+      /* Fake nop.  */
+      insn[0] = 0x90;
+    }
+
+  return closure;
+}
+
 static void
 i386_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
@@ -856,8 +917,9 @@ i386_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   i386_linux_record_tdep.arg5 = I386_EDI_REGNUM;
   i386_linux_record_tdep.arg6 = I386_EBP_REGNUM;
 
-  tdep->i386_intx80_record = i386_linux_intx80_sysenter_record;
-  tdep->i386_sysenter_record = i386_linux_intx80_sysenter_record;
+  tdep->i386_intx80_record = i386_linux_intx80_sysenter_syscall_record;
+  tdep->i386_sysenter_record = i386_linux_intx80_sysenter_syscall_record;
+  tdep->i386_syscall_record = i386_linux_intx80_sysenter_syscall_record;
 
   /* N_FUN symbols in shared libaries have 0 for their values and need
      to be relocated.  */
@@ -890,7 +952,7 @@ i386_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 
   /* Displaced stepping.  */
   set_gdbarch_displaced_step_copy_insn (gdbarch,
-                                        i386_displaced_step_copy_insn);
+                                        i386_linux_displaced_step_copy_insn);
   set_gdbarch_displaced_step_fixup (gdbarch, i386_displaced_step_fixup);
   set_gdbarch_displaced_step_free_closure (gdbarch,
                                            simple_displaced_step_free_closure);
diff --git a/gdb/i386-nat.c b/gdb/i386-nat.c
index 29514d7..753de67 100644
--- a/gdb/i386-nat.c
+++ b/gdb/i386-nat.c
@@ -25,6 +25,7 @@
 #include "gdbcmd.h"
 #include "target.h"
 #include "gdb_assert.h"
+#include "inferior.h"
 
 /* Support for hardware watchpoints and breakpoints using the i386
    debug registers.
@@ -43,11 +44,6 @@ struct i386_dr_low_type i386_dr_low;
 /* Support for 8-byte wide hw watchpoints.  */
 #define TARGET_HAS_DR_LEN_8 (i386_dr_low.debug_register_length == 8)
 
-/* Debug registers' indices.  */
-#define DR_NADDR	4	/* The number of debug address registers.  */
-#define DR_STATUS	6	/* Index of debug status register (DR6).  */
-#define DR_CONTROL	7	/* Index of debug control register (DR7).  */
-
 /* DR7 Debug Control register fields.  */
 
 /* How many bits to skip in DR7 to get to R/W and LEN fields.  */
@@ -158,23 +154,6 @@ struct i386_dr_low_type i386_dr_low;
 /* A macro to loop over all debug registers.  */
 #define ALL_DEBUG_REGISTERS(i)	for (i = 0; i < DR_NADDR; i++)
 
-
-/* Global state needed to track h/w watchpoints.  */
-
-struct i386_debug_reg_state
-{
-  /* Mirror the inferior's DRi registers.  We keep the status and
-     control registers separated because they don't hold addresses.
-     Note that since we can change these mirrors while threads are
-     running, we never trust them to explain a cause of a trap.
-     For that, we need to peek directly in the inferior registers.  */
-  CORE_ADDR dr_mirror[DR_NADDR];
-  unsigned dr_status_mirror, dr_control_mirror;
-
-  /* Reference counts for each debug register.  */
-  int dr_ref_count[DR_NADDR];
-};
-
 /* Clear the reference counts and forget everything we knew about the
    debug registers.  */
 
@@ -192,7 +171,88 @@ i386_init_dregs (struct i386_debug_reg_state *state)
   state->dr_status_mirror  = 0;
 }
 
-static struct i386_debug_reg_state dr_mirror;
+/* Per-inferior data key.  */
+static const struct inferior_data *i386_inferior_data;
+
+/* Per-inferior data.  */
+struct i386_inferior_data
+{
+  /* Copy of i386 hardware debug registers for performance reasons.  */
+  struct i386_debug_reg_state state;
+};
+
+/* Per-inferior hook for register_inferior_data_with_cleanup.  */
+
+static void
+i386_inferior_data_cleanup (struct inferior *inf, void *arg)
+{
+  struct i386_inferior_data *inf_data = arg;
+
+  xfree (inf_data);
+}
+
+/* Get data specific for INFERIOR_PTID LWP.  Return special data area
+   for processes being detached.  */
+
+static struct i386_inferior_data *
+i386_inferior_data_get (void)
+{
+  struct inferior *inf = current_inferior ();
+  struct i386_inferior_data *inf_data;
+
+  inf_data = inferior_data (inf, i386_inferior_data);
+  if (inf_data == NULL)
+    {
+      inf_data = xzalloc (sizeof (*inf_data));
+      set_inferior_data (current_inferior (), i386_inferior_data, inf_data);
+    }
+
+  if (inf->pid != ptid_get_pid (inferior_ptid))
+    {
+      /* INFERIOR_PTID is being detached from the inferior INF.
+	 Provide local cache specific for the detached LWP.  */
+
+      static struct i386_inferior_data detached_inf_data_local;
+      static int detached_inf_pid = -1;
+
+      if (detached_inf_pid != ptid_get_pid (inferior_ptid))
+	{
+	  /* Reinitialize the local cache if INFERIOR_PTID is
+	     different from the LWP last detached.
+ 
+	     Linux kernel before 2.6.33 commit
+	     72f674d203cd230426437cdcf7dd6f681dad8b0d
+	     will inherit hardware debug registers from parent
+	     on fork/vfork/clone.  Newer Linux kernels create such tasks with
+	     zeroed debug registers.
+
+	     GDB will remove all breakpoints (and watchpoints) from the forked
+	     off process.  We also need to reset the debug registers in that
+	     process to be compatible with the older Linux kernels.
+
+	     Copy the debug registers mirrors into the new process so that all
+	     breakpoints and watchpoints can be removed together.  The debug
+	     registers mirror will become zeroed in the end before detaching
+	     the forked off process.  */
+
+	  detached_inf_pid = ptid_get_pid (inferior_ptid);
+	  detached_inf_data_local = *inf_data;
+	}
+
+      return &detached_inf_data_local;
+    }
+
+  return inf_data;
+}
+
+/* Get debug registers state for INFERIOR_PTID, see
+   i386_inferior_data_get.  */
+
+struct i386_debug_reg_state *
+i386_debug_reg_state (void)
+{
+  return &i386_inferior_data_get ()->state;
+}
 
 /* Whether or not to print the mirrored debug registers.  */
 static int maint_show_dr;
@@ -244,7 +304,9 @@ static int i386_handle_nonaligned_watchpoint (struct i386_debug_reg_state *state
 void
 i386_cleanup_dregs (void)
 {
-  i386_init_dregs (&dr_mirror);
+  struct i386_debug_reg_state *state = i386_debug_reg_state ();
+
+  i386_init_dregs (state);
 }
 
 /* Print the values of the mirrored debug registers.  This is called
@@ -508,35 +570,21 @@ Invalid value %d of operation in i386_handle_nonaligned_watchpoint.\n"),
 static void
 i386_update_inferior_debug_regs (struct i386_debug_reg_state *new_state)
 {
+  struct i386_debug_reg_state *state = i386_debug_reg_state ();
   int i;
 
   ALL_DEBUG_REGISTERS (i)
     {
-      if (I386_DR_VACANT (new_state, i) != I386_DR_VACANT (&dr_mirror, i))
-	{
-	  if (!I386_DR_VACANT (new_state, i))
-	    {
-	      i386_dr_low.set_addr (i, new_state->dr_mirror[i]);
-
-	      /* Only a sanity check for leftover bits (set possibly only
-		 by inferior).  */
-	      if (i386_dr_low.unset_status)
-		i386_dr_low.unset_status (I386_DR_WATCH_MASK (i));
-	    }
-	  else
-	    {
-	      if (i386_dr_low.reset_addr)
-		i386_dr_low.reset_addr (i);
-	    }
-	}
+      if (I386_DR_VACANT (new_state, i) != I386_DR_VACANT (state, i))
+	i386_dr_low.set_addr (i, new_state->dr_mirror[i]);
       else
-	gdb_assert (new_state->dr_mirror[i] == dr_mirror.dr_mirror[i]);
+	gdb_assert (new_state->dr_mirror[i] == state->dr_mirror[i]);
     }
 
-  if (new_state->dr_control_mirror != dr_mirror.dr_control_mirror)
+  if (new_state->dr_control_mirror != state->dr_control_mirror)
     i386_dr_low.set_control (new_state->dr_control_mirror);
 
-  dr_mirror = *new_state;
+  *state = *new_state;
 }
 
 /* Insert a watchpoint to watch a memory region which starts at
@@ -547,10 +595,11 @@ static int
 i386_insert_watchpoint (CORE_ADDR addr, int len, int type,
 			struct expression *cond)
 {
+  struct i386_debug_reg_state *state = i386_debug_reg_state ();
   int retval;
   /* Work on a local copy of the debug registers, and on success,
      commit the change back to the inferior.  */
-  struct i386_debug_reg_state local_state = dr_mirror;
+  struct i386_debug_reg_state local_state = *state;
 
   if (type == hw_read)
     return 1; /* unsupported */
@@ -571,7 +620,7 @@ i386_insert_watchpoint (CORE_ADDR addr, int len, int type,
     i386_update_inferior_debug_regs (&local_state);
 
   if (maint_show_dr)
-    i386_show_dr (&dr_mirror, "insert_watchpoint", addr, len, type);
+    i386_show_dr (state, "insert_watchpoint", addr, len, type);
 
   return retval;
 }
@@ -583,10 +632,11 @@ static int
 i386_remove_watchpoint (CORE_ADDR addr, int len, int type,
 			struct expression *cond)
 {
+  struct i386_debug_reg_state *state = i386_debug_reg_state ();
   int retval;
   /* Work on a local copy of the debug registers, and on success,
      commit the change back to the inferior.  */
-  struct i386_debug_reg_state local_state = dr_mirror;
+  struct i386_debug_reg_state local_state = *state;
 
   if (((len != 1 && len !=2 && len !=4) && !(TARGET_HAS_DR_LEN_8 && len == 8))
       || addr % len != 0)
@@ -604,7 +654,7 @@ i386_remove_watchpoint (CORE_ADDR addr, int len, int type,
     i386_update_inferior_debug_regs (&local_state);
 
   if (maint_show_dr)
-    i386_show_dr (&dr_mirror, "remove_watchpoint", addr, len, type);
+    i386_show_dr (state, "remove_watchpoint", addr, len, type);
 
   return retval;
 }
@@ -615,11 +665,12 @@ i386_remove_watchpoint (CORE_ADDR addr, int len, int type,
 static int
 i386_region_ok_for_watchpoint (CORE_ADDR addr, int len)
 {
+  struct i386_debug_reg_state *state = i386_debug_reg_state ();
   int nregs;
 
   /* Compute how many aligned watchpoints we would need to cover this
      region.  */
-  nregs = i386_handle_nonaligned_watchpoint (&dr_mirror,
+  nregs = i386_handle_nonaligned_watchpoint (state,
 					     WP_COUNT, addr, len, hw_write);
   return nregs <= DR_NADDR ? 1 : 0;
 }
@@ -631,38 +682,72 @@ i386_region_ok_for_watchpoint (CORE_ADDR addr, int len)
 static int
 i386_stopped_data_address (struct target_ops *ops, CORE_ADDR *addr_p)
 {
+  struct i386_debug_reg_state *state = i386_debug_reg_state ();
   CORE_ADDR addr = 0;
   int i;
   int rc = 0;
+  /* The current thread's DR_STATUS.  We always need to read this to
+     check whether some watchpoint caused the trap.  */
   unsigned status;
-  unsigned control;
-  struct i386_debug_reg_state *state = &dr_mirror;
-
-  dr_mirror.dr_status_mirror = i386_dr_low.get_status ();
-  status = dr_mirror.dr_status_mirror;
-  control = dr_mirror.dr_control_mirror;
+  /* We need DR_CONTROL as well, but only iff DR_STATUS indicates a
+     data breakpoint trap.  Only fetch it when necessary, to avoid an
+     unnecessary extra syscall when no watchpoint triggered.  */
+  int control_p = 0;
+  unsigned control = 0;
+
+  /* In non-stop/async, threads can be running while we change the
+     STATE (and friends).  Say, we set a watchpoint, and let threads
+     resume.  Now, say you delete the watchpoint, or add/remove
+     watchpoints such that STATE changes while threads are running.
+     On targets that support non-stop, inserting/deleting watchpoints
+     updates the STATE only.  It does not update the real thread's
+     debug registers; that's only done prior to resume.  Instead, if
+     threads are running when the mirror changes, a temporary and
+     transparent stop on all threads is forced so they can get their
+     copy of the debug registers updated on re-resume.  Now, say,
+     a thread hit a watchpoint before having been updated with the new
+     STATE contents, and we haven't yet handled the corresponding
+     SIGTRAP.  If we trusted STATE below, we'd mistake the real
+     trapped address (from the last time we had updated debug
+     registers in the thread) with whatever was currently in STATE.
+     So to fix this, STATE always represents intention, what we _want_
+     threads to have in debug registers.  To get at the address and
+     cause of the trap, we need to read the state the thread still has
+     in its debug registers.
+
+     In sum, always get the current debug register values the current
+     thread has, instead of trusting the global mirror.  If the thread
+     was running when we last changed watchpoints, the mirror no
+     longer represents what was set in this thread's debug
+     registers.  */
+  status = i386_dr_low.get_status ();
 
   ALL_DEBUG_REGISTERS(i)
     {
-      if (I386_DR_WATCH_HIT (status, i)
-	  /* This second condition makes sure DRi is set up for a data
-	     watchpoint, not a hardware breakpoint.  The reason is
-	     that GDB doesn't call the target_stopped_data_address
-	     method except for data watchpoints.  In other words, I'm
-	     being paranoiac.  */
-	  && I386_DR_GET_RW_LEN (control, i) != 0
-	  /* This third condition makes sure DRi is not vacant, this
-	     avoids false positives in windows-nat.c.  */
-	  && !I386_DR_VACANT (state, i))
+      if (!I386_DR_WATCH_HIT (status, i))
+	continue;
+
+      if (!control_p)
+	{
+	  control = i386_dr_low.get_control ();
+	  control_p = 1;
+	}
+
+      /* This second condition makes sure DRi is set up for a data
+	 watchpoint, not a hardware breakpoint.  The reason is that
+	 GDB doesn't call the target_stopped_data_address method
+	 except for data watchpoints.  In other words, I'm being
+	 paranoiac.  */
+      if (I386_DR_GET_RW_LEN (control, i) != 0)
 	{
-	  addr = state->dr_mirror[i];
+	  addr = i386_dr_low.get_addr (i);
 	  rc = 1;
 	  if (maint_show_dr)
-	    i386_show_dr (&dr_mirror, "watchpoint_hit", addr, -1, hw_write);
+	    i386_show_dr (state, "watchpoint_hit", addr, -1, hw_write);
 	}
     }
   if (maint_show_dr && addr == 0)
-    i386_show_dr (&dr_mirror, "stopped_data_addr", 0, 0, hw_write);
+    i386_show_dr (state, "stopped_data_addr", 0, 0, hw_write);
 
   if (rc)
     *addr_p = addr;
@@ -682,11 +767,12 @@ static int
 i386_insert_hw_breakpoint (struct gdbarch *gdbarch,
 			   struct bp_target_info *bp_tgt)
 {
+  struct i386_debug_reg_state *state = i386_debug_reg_state ();
   unsigned len_rw = i386_length_and_rw_bits (1, hw_execute);
   CORE_ADDR addr = bp_tgt->placed_address;
   /* Work on a local copy of the debug registers, and on success,
      commit the change back to the inferior.  */
-  struct i386_debug_reg_state local_state = dr_mirror;
+  struct i386_debug_reg_state local_state = *state;
   int retval = i386_insert_aligned_watchpoint (&local_state,
 					       addr, len_rw) ? EBUSY : 0;
 
@@ -694,7 +780,7 @@ i386_insert_hw_breakpoint (struct gdbarch *gdbarch,
     i386_update_inferior_debug_regs (&local_state);
 
   if (maint_show_dr)
-    i386_show_dr (&dr_mirror, "insert_hwbp", addr, 1, hw_execute);
+    i386_show_dr (state, "insert_hwbp", addr, 1, hw_execute);
 
   return retval;
 }
@@ -706,11 +792,12 @@ static int
 i386_remove_hw_breakpoint (struct gdbarch *gdbarch,
 			   struct bp_target_info *bp_tgt)
 {
+  struct i386_debug_reg_state *state = i386_debug_reg_state ();
   unsigned len_rw = i386_length_and_rw_bits (1, hw_execute);
   CORE_ADDR addr = bp_tgt->placed_address;
   /* Work on a local copy of the debug registers, and on success,
      commit the change back to the inferior.  */
-  struct i386_debug_reg_state local_state = dr_mirror;
+  struct i386_debug_reg_state local_state = *state;
   int retval = i386_remove_aligned_watchpoint (&local_state,
 					       addr, len_rw);
 
@@ -718,7 +805,7 @@ i386_remove_hw_breakpoint (struct gdbarch *gdbarch,
     i386_update_inferior_debug_regs (&local_state);
 
   if (maint_show_dr)
-    i386_show_dr (&dr_mirror, "remove_hwbp", addr, 1, hw_execute);
+    i386_show_dr (state, "remove_hwbp", addr, 1, hw_execute);
 
   return retval;
 }
@@ -783,6 +870,10 @@ i386_use_watchpoints (struct target_ops *t)
   t->to_remove_watchpoint = i386_remove_watchpoint;
   t->to_insert_hw_breakpoint = i386_insert_hw_breakpoint;
   t->to_remove_hw_breakpoint = i386_remove_hw_breakpoint;
+
+  if (i386_inferior_data == NULL)
+    i386_inferior_data
+      = register_inferior_data_with_cleanup (i386_inferior_data_cleanup);
 }
 
 void
diff --git a/gdb/i386-nat.h b/gdb/i386-nat.h
index 383dff4..c06993c 100644
--- a/gdb/i386-nat.h
+++ b/gdb/i386-nat.h
@@ -53,31 +53,54 @@ extern void i386_use_watchpoints (struct target_ops *);
       set_addr                 -- put an address into one debug
 				  register for all LWPs
 
-      reset_addr               -- reset the address stored in
-				  one debug register for all LWPs
+      get_addr                 -- return the address in a given debug
+				  register of the current LWP
 
       get_status               -- return the value of the debug
 				  status (DR6) register for current LWP
 
-      unset_status             -- unset the specified bits of the debug
-				  status (DR6) register for all LWPs
+      get_control               -- return the value of the debug
+				  control (DR7) register for current LWP
 
    Additionally, the native file should set the debug_register_length
    field to 4 or 8 depending on the number of bytes used for
    deubg registers.  */
 
-struct i386_dr_low_type 
+struct i386_dr_low_type
   {
     void (*set_control) (unsigned long);
     void (*set_addr) (int, CORE_ADDR);
-    void (*reset_addr) (int);
+    CORE_ADDR (*get_addr) (int);
     unsigned long (*get_status) (void);
-    void (*unset_status) (unsigned long);
+    unsigned long (*get_control) (void);
     int debug_register_length;
   };
 
 extern struct i386_dr_low_type i386_dr_low;
 
+/* Debug registers' indices.  */
+#define DR_FIRSTADDR 0
+#define DR_LASTADDR  3
+#define DR_NADDR     4	/* The number of debug address registers.  */
+#define DR_STATUS    6	/* Index of debug status register (DR6).  */
+#define DR_CONTROL   7	/* Index of debug control register (DR7).  */
+
+/* Global state needed to track h/w watchpoints.  */
+
+struct i386_debug_reg_state
+{
+  /* Mirror the inferior's DRi registers.  We keep the status and
+     control registers separated because they don't hold addresses.
+     Note that since we can change these mirrors while threads are
+     running, we never trust them to explain a cause of a trap.
+     For that, we need to peek directly in the inferior registers.  */
+  CORE_ADDR dr_mirror[DR_NADDR];
+  unsigned dr_status_mirror, dr_control_mirror;
+
+  /* Reference counts for each debug register.  */
+  int dr_ref_count[DR_NADDR];
+};
+
 /* Use this function to set i386_dr_low debug_register_length field
    rather than setting it directly to check that the length is only
    set once.  It also enables the 'maint set/show show-debug-regs' 
@@ -89,4 +112,9 @@ extern void i386_set_debug_register_length (int len);
 
 extern void i386_cleanup_dregs (void);
 
+/* Return a pointer to the the local mirror of the inferior's debug
+   registers.  */
+
+extern struct i386_debug_reg_state *i386_debug_reg_state (void);
+
 #endif /* I386_NAT_H */
diff --git a/gdb/i386-nto-tdep.c b/gdb/i386-nto-tdep.c
index 7970083..615297f 100644
--- a/gdb/i386-nto-tdep.c
+++ b/gdb/i386-nto-tdep.c
@@ -134,7 +134,6 @@ i386nto_register_area (struct gdbarch *gdbarch,
 		       int regno, int regset, unsigned *off)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-  int len;
 
   *off = 0;
   if (regset == NTO_REG_GENERAL)
@@ -281,7 +280,7 @@ static int
 i386nto_sigtramp_p (struct frame_info *this_frame)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
-  char *name;
+  const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
   return name && strcmp ("__signalstub", name) == 0;
diff --git a/gdb/i386-sol2-nat.c b/gdb/i386-sol2-nat.c
index e9fc63d..bd8643e 100644
--- a/gdb/i386-sol2-nat.c
+++ b/gdb/i386-sol2-nat.c
@@ -68,7 +68,7 @@ static int amd64_sol2_gregset64_reg_offset[] = {
   1 * 8,
   0 * 8,			/* ... %r15 */
   17 * 8,			/* %rip */
-  16 * 8,			/* %eflags */
+  19 * 8,			/* %eflags */
   18 * 8,			/* %cs */
   21 * 8,			/* %ss */
   25 * 8,			/* %ds */
@@ -89,7 +89,7 @@ static int amd64_sol2_gregset32_reg_offset[] = {
   9 * 8,			/* %esi */
   8 * 8,			/* %edi */
   17 * 8,			/* %eip */
-  16 * 8,			/* %eflags */
+  19 * 8,			/* %eflags */
   18 * 8,			/* %cs */
   21 * 8,			/* %ss */
   25 * 8,			/* %ds */
diff --git a/gdb/i386-sol2-tdep.c b/gdb/i386-sol2-tdep.c
index a9e395e..5273f52 100644
--- a/gdb/i386-sol2-tdep.c
+++ b/gdb/i386-sol2-tdep.c
@@ -55,7 +55,7 @@ static int
 i386_sol2_sigtramp_p (struct frame_info *this_frame)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
-  char *name;
+  const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
   return (name && (strcmp ("sigacthandler", name) == 0
@@ -79,8 +79,8 @@ i386_sol2_mcontext_addr (struct frame_info *this_frame)
 /* SunPRO encodes the static variables.  This is not related to C++
    mangling, it is done for C too.  */
 
-static char *
-i386_sol2_static_transform_name (char *name)
+static const char *
+i386_sol2_static_transform_name (const char *name)
 {
   char *p;
   if (name[0] == '.')
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index 549297e..6a02906 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -61,6 +61,13 @@
 #include "ax.h"
 #include "ax-gdb.h"
 
+#include "stap-probe.h"
+#include "user-regs.h"
+#include "cli/cli-utils.h"
+#include "expression.h"
+#include "parser-defs.h"
+#include <ctype.h>
+
 /* Register names.  */
 
 static const char *i386_register_names[] =
@@ -376,7 +383,7 @@ i386_svr4_reg_to_regnum (struct gdbarch *gdbarch, int reg)
    its legitimate values.  */
 static const char att_flavor[] = "att";
 static const char intel_flavor[] = "intel";
-static const char *valid_flavors[] =
+static const char *const valid_flavors[] =
 {
   att_flavor,
   intel_flavor,
@@ -521,7 +528,12 @@ i386_call_p (const gdb_byte *insn)
 static int
 i386_syscall_p (const gdb_byte *insn, int *lengthp)
 {
-  if (insn[0] == 0xcd)
+  /* Is it 'int $0x80'?  */
+  if ((insn[0] == 0xcd && insn[1] == 0x80)
+      /* Or is it 'sysenter'?  */
+      || (insn[0] == 0x0f && insn[1] == 0x34)
+      /* Or is it 'syscall'?  */
+      || (insn[0] == 0x0f && insn[1] == 0x05))
     {
       *lengthp = 2;
       return 1;
@@ -1185,7 +1197,6 @@ i386_match_insn_block (CORE_ADDR pc, struct i386_insn *insn_patterns)
 {
   CORE_ADDR current_pc;
   int ix, i;
-  gdb_byte op;
   struct i386_insn *insn;
 
   insn = i386_match_insn (pc, insn_patterns);
@@ -2036,7 +2047,7 @@ static int
 i386_in_stack_tramp_p (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
   gdb_byte insn;
-  char *name;
+  const char *name;
 
   /* A stack trampoline is detected if no name is associated
     to the current pc and if it points inside a trampoline
@@ -2321,6 +2332,22 @@ i386_16_byte_align_p (struct type *type)
   return 0;
 }
 
+/* Implementation for set_gdbarch_push_dummy_code.  */
+
+static CORE_ADDR
+i386_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp, CORE_ADDR funaddr,
+		      struct value **args, int nargs, struct type *value_type,
+		      CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
+		      struct regcache *regcache)
+{
+  /* Use 0xcc breakpoint - 1 byte.  */
+  *bp_addr = sp - 1;
+  *real_pc = funaddr;
+
+  /* Keep the stack aligned.  */
+  return sp - 16;
+}
+
 static CORE_ADDR
 i386_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
 		      struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
@@ -2340,7 +2367,6 @@ i386_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
   for (write_pass = 0; write_pass < 2; write_pass++)
     {
       int args_space_used = 0;
-      int have_16_byte_aligned_arg = 0;
 
       if (struct_return)
 	{
@@ -2378,19 +2404,20 @@ i386_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
 	  else
 	    {
 	      if (i386_16_byte_align_p (value_enclosing_type (args[i])))
-		{
-		  args_space = align_up (args_space, 16);
-		  have_16_byte_aligned_arg = 1;
-		}
+		args_space = align_up (args_space, 16);
 	      args_space += align_up (len, 4);
 	    }
 	}
 
       if (!write_pass)
 	{
-	  if (have_16_byte_aligned_arg)
-	    args_space = align_up (args_space, 16);
 	  sp -= args_space;
+
+	  /* The original System V ABI only requires word alignment,
+	     but modern incarnations need 16-byte alignment in order
+	     to support SSE.  Since wasting a few bytes here isn't
+	     harmful we unconditionally enforce 16-byte alignment.  */
+	  sp &= ~0xf;
 	}
     }
 
@@ -2545,7 +2572,7 @@ i386_store_return_value (struct gdbarch *gdbarch, struct type *type,
 static const char default_struct_convention[] = "default";
 static const char pcc_struct_convention[] = "pcc";
 static const char reg_struct_convention[] = "reg";
-static const char *valid_conventions[] =
+static const char *const valid_conventions[] =
 {
   default_struct_convention,
   pcc_struct_convention,
@@ -2593,7 +2620,7 @@ i386_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
    from WRITEBUF into REGCACHE.  */
 
 static enum return_value_convention
-i386_return_value (struct gdbarch *gdbarch, struct type *func_type,
+i386_return_value (struct gdbarch *gdbarch, struct value *function,
 		   struct type *type, struct regcache *regcache,
 		   gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -2644,7 +2671,7 @@ i386_return_value (struct gdbarch *gdbarch, struct type *func_type,
   if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
     {
       type = check_typedef (TYPE_FIELD_TYPE (type, 0));
-      return i386_return_value (gdbarch, func_type, type, regcache,
+      return i386_return_value (gdbarch, function, type, regcache,
 				readbuf, writebuf);
     }
 
@@ -2769,7 +2796,7 @@ i386_mmx_type (struct gdbarch *gdbarch)
 /* Return the GDB type object for the "standard" data type of data in
    register REGNUM.  */
 
-static struct type *
+struct type *
 i386_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
 {
   if (i386_mmx_regnum_p (gdbarch, regnum))
@@ -3273,7 +3300,7 @@ i386_pe_skip_trampoline_code (struct frame_info *frame,
 	read_memory_unsigned_integer (pc + 2, 4, byte_order);
       struct minimal_symbol *indsym =
 	indirect ? lookup_minimal_symbol_by_pc (indirect) : 0;
-      char *symname = indsym ? SYMBOL_LINKAGE_NAME (indsym) : 0;
+      const char *symname = indsym ? SYMBOL_LINKAGE_NAME (indsym) : 0;
 
       if (symname)
 	{
@@ -3294,7 +3321,7 @@ int
 i386_sigtramp_p (struct frame_info *this_frame)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
-  char *name;
+  const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
   return (name && strcmp ("_sigtramp", name) == 0);
@@ -3332,7 +3359,7 @@ static int
 i386_svr4_sigtramp_p (struct frame_info *this_frame)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
-  char *name;
+  const char *name;
 
   /* UnixWare uses _sigacthandler.  The origin of the other symbols is
      currently unknown.  */
@@ -3358,6 +3385,323 @@ i386_svr4_sigcontext_addr (struct frame_info *this_frame)
 
   return read_memory_unsigned_integer (sp + 8, 4, byte_order);
 }
+
+

+
+/* Implementation of `gdbarch_stap_is_single_operand', as defined in
+   gdbarch.h.  */
+
+int
+i386_stap_is_single_operand (struct gdbarch *gdbarch, const char *s)
+{
+  return (*s == '$' /* Literal number.  */
+	  || (isdigit (*s) && s[1] == '(' && s[2] == '%') /* Displacement.  */
+	  || (*s == '(' && s[1] == '%') /* Register indirection.  */
+	  || (*s == '%' && isalpha (s[1]))); /* Register access.  */
+}
+
+/* Implementation of `gdbarch_stap_parse_special_token', as defined in
+   gdbarch.h.  */
+
+int
+i386_stap_parse_special_token (struct gdbarch *gdbarch,
+			       struct stap_parse_info *p)
+{
+  /* In order to parse special tokens, we use a state-machine that go
+     through every known token and try to get a match.  */
+  enum
+    {
+      TRIPLET,
+      THREE_ARG_DISPLACEMENT,
+      DONE
+    } current_state;
+
+  current_state = TRIPLET;
+
+  /* The special tokens to be parsed here are:
+
+     - `register base + (register index * size) + offset', as represented
+     in `(%rcx,%rax,8)', or `[OFFSET](BASE_REG,INDEX_REG[,SIZE])'.
+
+     - Operands of the form `-8+3+1(%rbp)', which must be interpreted as
+     `*(-8 + 3 - 1 + (void *) $eax)'.  */
+
+  while (current_state != DONE)
+    {
+      const char *s = p->arg;
+
+      switch (current_state)
+	{
+	case TRIPLET:
+	    {
+	      if (isdigit (*s) || *s == '-' || *s == '+')
+		{
+		  int got_minus[3];
+		  int i;
+		  long displacements[3];
+		  const char *start;
+		  char *regname;
+		  int len;
+		  struct stoken str;
+
+		  got_minus[0] = 0;
+		  if (*s == '+')
+		    ++s;
+		  else if (*s == '-')
+		    {
+		      ++s;
+		      got_minus[0] = 1;
+		    }
+
+		  displacements[0] = strtol (s, (char **) &s, 10);
+
+		  if (*s != '+' && *s != '-')
+		    {
+		      /* We are not dealing with a triplet.  */
+		      break;
+		    }
+
+		  got_minus[1] = 0;
+		  if (*s == '+')
+		    ++s;
+		  else
+		    {
+		      ++s;
+		      got_minus[1] = 1;
+		    }
+
+		  displacements[1] = strtol (s, (char **) &s, 10);
+
+		  if (*s != '+' && *s != '-')
+		    {
+		      /* We are not dealing with a triplet.  */
+		      break;
+		    }
+
+		  got_minus[2] = 0;
+		  if (*s == '+')
+		    ++s;
+		  else
+		    {
+		      ++s;
+		      got_minus[2] = 1;
+		    }
+
+		  displacements[2] = strtol (s, (char **) &s, 10);
+
+		  if (*s != '(' || s[1] != '%')
+		    break;
+
+		  s += 2;
+		  start = s;
+
+		  while (isalnum (*s))
+		    ++s;
+
+		  if (*s++ != ')')
+		    break;
+
+		  len = s - start;
+		  regname = alloca (len + 1);
+
+		  strncpy (regname, start, len);
+		  regname[len] = '\0';
+
+		  if (user_reg_map_name_to_regnum (gdbarch,
+						   regname, len) == -1)
+		    error (_("Invalid register name `%s' "
+			     "on expression `%s'."),
+			   regname, p->saved_arg);
+
+		  for (i = 0; i < 3; i++)
+		    {
+		      write_exp_elt_opcode (OP_LONG);
+		      write_exp_elt_type
+			(builtin_type (gdbarch)->builtin_long);
+		      write_exp_elt_longcst (displacements[i]);
+		      write_exp_elt_opcode (OP_LONG);
+		      if (got_minus[i])
+			write_exp_elt_opcode (UNOP_NEG);
+		    }
+
+		  write_exp_elt_opcode (OP_REGISTER);
+		  str.ptr = regname;
+		  str.length = len;
+		  write_exp_string (str);
+		  write_exp_elt_opcode (OP_REGISTER);
+
+		  write_exp_elt_opcode (UNOP_CAST);
+		  write_exp_elt_type (builtin_type (gdbarch)->builtin_data_ptr);
+		  write_exp_elt_opcode (UNOP_CAST);
+
+		  write_exp_elt_opcode (BINOP_ADD);
+		  write_exp_elt_opcode (BINOP_ADD);
+		  write_exp_elt_opcode (BINOP_ADD);
+
+		  write_exp_elt_opcode (UNOP_CAST);
+		  write_exp_elt_type (lookup_pointer_type (p->arg_type));
+		  write_exp_elt_opcode (UNOP_CAST);
+
+		  write_exp_elt_opcode (UNOP_IND);
+
+		  p->arg = s;
+
+		  return 1;
+		}
+	      break;
+	    }
+	case THREE_ARG_DISPLACEMENT:
+	    {
+	      if (isdigit (*s) || *s == '(' || *s == '-' || *s == '+')
+		{
+		  int offset_minus = 0;
+		  long offset = 0;
+		  int size_minus = 0;
+		  long size = 0;
+		  const char *start;
+		  char *base;
+		  int len_base;
+		  char *index;
+		  int len_index;
+		  struct stoken base_token, index_token;
+
+		  if (*s == '+')
+		    ++s;
+		  else if (*s == '-')
+		    {
+		      ++s;
+		      offset_minus = 1;
+		    }
+
+		  if (offset_minus && !isdigit (*s))
+		    break;
+
+		  if (isdigit (*s))
+		    offset = strtol (s, (char **) &s, 10);
+
+		  if (*s != '(' || s[1] != '%')
+		    break;
+
+		  s += 2;
+		  start = s;
+
+		  while (isalnum (*s))
+		    ++s;
+
+		  if (*s != ',' || s[1] != '%')
+		    break;
+
+		  len_base = s - start;
+		  base = alloca (len_base + 1);
+		  strncpy (base, start, len_base);
+		  base[len_base] = '\0';
+
+		  if (user_reg_map_name_to_regnum (gdbarch,
+						   base, len_base) == -1)
+		    error (_("Invalid register name `%s' "
+			     "on expression `%s'."),
+			   base, p->saved_arg);
+
+		  s += 2;
+		  start = s;
+
+		  while (isalnum (*s))
+		    ++s;
+
+		  len_index = s - start;
+		  index = alloca (len_index + 1);
+		  strncpy (index, start, len_index);
+		  index[len_index] = '\0';
+
+		  if (user_reg_map_name_to_regnum (gdbarch,
+						   index, len_index) == -1)
+		    error (_("Invalid register name `%s' "
+			     "on expression `%s'."),
+			   index, p->saved_arg);
+
+		  if (*s != ',' && *s != ')')
+		    break;
+
+		  if (*s == ',')
+		    {
+		      ++s;
+		      if (*s == '+')
+			++s;
+		      else if (*s == '-')
+			{
+			  ++s;
+			  size_minus = 1;
+			}
+
+		      size = strtol (s, (char **) &s, 10);
+
+		      if (*s != ')')
+			break;
+		    }
+
+		  ++s;
+
+		  if (offset)
+		    {
+		      write_exp_elt_opcode (OP_LONG);
+		      write_exp_elt_type
+			(builtin_type (gdbarch)->builtin_long);
+		      write_exp_elt_longcst (offset);
+		      write_exp_elt_opcode (OP_LONG);
+		      if (offset_minus)
+			write_exp_elt_opcode (UNOP_NEG);
+		    }
+
+		  write_exp_elt_opcode (OP_REGISTER);
+		  base_token.ptr = base;
+		  base_token.length = len_base;
+		  write_exp_string (base_token);
+		  write_exp_elt_opcode (OP_REGISTER);
+
+		  if (offset)
+		    write_exp_elt_opcode (BINOP_ADD);
+
+		  write_exp_elt_opcode (OP_REGISTER);
+		  index_token.ptr = index;
+		  index_token.length = len_index;
+		  write_exp_string (index_token);
+		  write_exp_elt_opcode (OP_REGISTER);
+
+		  if (size)
+		    {
+		      write_exp_elt_opcode (OP_LONG);
+		      write_exp_elt_type
+			(builtin_type (gdbarch)->builtin_long);
+		      write_exp_elt_longcst (size);
+		      write_exp_elt_opcode (OP_LONG);
+		      if (size_minus)
+			write_exp_elt_opcode (UNOP_NEG);
+		      write_exp_elt_opcode (BINOP_MUL);
+		    }
+
+		  write_exp_elt_opcode (BINOP_ADD);
+
+		  write_exp_elt_opcode (UNOP_CAST);
+		  write_exp_elt_type (lookup_pointer_type (p->arg_type));
+		  write_exp_elt_opcode (UNOP_CAST);
+
+		  write_exp_elt_opcode (UNOP_IND);
+
+		  p->arg = s;
+
+		  return 1;
+		}
+	      break;
+	    }
+	}
+
+      /* Advancing to the next state.  */
+      ++current_state;
+    }
+
+  return 0;
+}
+
 

 
 /* Generic ELF.  */
@@ -3367,6 +3711,16 @@ i386_elf_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
   /* We typically use stabs-in-ELF with the SVR4 register numbering.  */
   set_gdbarch_stab_reg_to_regnum (gdbarch, i386_svr4_reg_to_regnum);
+
+  /* Registering SystemTap handlers.  */
+  set_gdbarch_stap_integer_prefix (gdbarch, "$");
+  set_gdbarch_stap_register_prefix (gdbarch, "%");
+  set_gdbarch_stap_register_indirection_prefix (gdbarch, "(");
+  set_gdbarch_stap_register_indirection_suffix (gdbarch, ")");
+  set_gdbarch_stap_is_single_operand (gdbarch,
+				      i386_stap_is_single_operand);
+  set_gdbarch_stap_parse_special_token (gdbarch,
+					i386_stap_parse_special_token);
 }
 
 /* System V Release 4 (SVR4).  */
@@ -3515,7 +3869,7 @@ i386_fetch_pointer_argument (struct frame_info *frame, int argi,
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  CORE_ADDR sp = get_frame_register_unsigned  (frame, I386_ESP_REGNUM);
+  CORE_ADDR sp = get_frame_register_unsigned (frame, I386_ESP_REGNUM);
   return read_memory_unsigned_integer (sp + (4 * (argi + 1)), 4, byte_order);
 }
 
@@ -3978,7 +4332,7 @@ i386_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
   int prefixes = 0;
   int regnum = 0;
   uint32_t opcode;
-  uint8_t  opcode8;
+  uint8_t opcode8;
   ULONGEST addr;
   gdb_byte buf[MAX_REGISTER_SIZE];
   struct i386_record_s ir;
@@ -7367,6 +7721,8 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_get_longjmp_target (gdbarch, i386_get_longjmp_target);
 
   /* Call dummy code.  */
+  set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
+  set_gdbarch_push_dummy_code (gdbarch, i386_push_dummy_code);
   set_gdbarch_push_dummy_call (gdbarch, i386_push_dummy_call);
   set_gdbarch_frame_align (gdbarch, i386_frame_align);
 
@@ -7449,6 +7805,9 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   tdep->num_mmx_regs = 8;
   tdep->num_ymm_regs = 0;
 
+  tdep->sp_regnum_from_eax = -1;
+  tdep->pc_regnum_from_eax = -1;
+
   tdesc_data = tdesc_data_alloc ();
 
   set_gdbarch_relocate_instruction (gdbarch, i386_relocate_instruction);
@@ -7493,6 +7852,14 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
       /* Support dword pseudo-register if it hasn't been disabled.  */
       tdep->eax_regnum = ymm0_regnum;
       ymm0_regnum += tdep->num_dword_regs;
+      if (tdep->sp_regnum_from_eax != -1)
+	set_gdbarch_sp_regnum (gdbarch,
+			       (tdep->eax_regnum
+				+ tdep->sp_regnum_from_eax));
+      if (tdep->pc_regnum_from_eax != -1)
+	set_gdbarch_pc_regnum (gdbarch,
+			       (tdep->eax_regnum
+				+ tdep->pc_regnum_from_eax));
     }
   else
     tdep->eax_regnum = -1;
diff --git a/gdb/i386-tdep.h b/gdb/i386-tdep.h
index 870054f..76afdce 100644
--- a/gdb/i386-tdep.h
+++ b/gdb/i386-tdep.h
@@ -149,6 +149,14 @@ struct gdbarch_tdep
      of pseudo dword register support.  */
   int eax_regnum;
 
+  /* Register number for SP, relative to %eax.  Set this to -1 to
+     indicate the absence of pseudo SP register support.  */
+  int sp_regnum_from_eax;
+
+  /* Register number for PC, relative to %eax.  Set this to -1 to
+     indicate the absence of pseudo PC register support.  */
+  int pc_regnum_from_eax;
+
   /* Number of core registers.  */
   int num_core_regs;
 
@@ -309,6 +317,8 @@ extern int i386_ymm_regnum_p (struct gdbarch *gdbarch, int regnum);
 
 extern const char *i386_pseudo_register_name (struct gdbarch *gdbarch,
 					      int regnum);
+extern struct type *i386_pseudo_register_type (struct gdbarch *gdbarch,
+					       int regnum);
 
 extern void i386_pseudo_register_read_into_value (struct gdbarch *gdbarch,
 						  struct regcache *regcache,
@@ -379,6 +389,7 @@ extern void i386_svr4_init_abi (struct gdbarch_info, struct gdbarch *);
 
 extern int i386_process_record (struct gdbarch *gdbarch,
                                 struct regcache *regcache, CORE_ADDR addr);
+
 

 
 /* Functions and variables exported from i386bsd-tdep.c.  */
@@ -394,4 +405,12 @@ extern int i386nbsd_sc_reg_offset[];
 extern int i386obsd_sc_reg_offset[];
 extern int i386bsd_sc_reg_offset[];
 
+/* SystemTap related functions.  */
+
+extern int i386_stap_is_single_operand (struct gdbarch *gdbarch,
+					const char *s);
+
+extern int i386_stap_parse_special_token (struct gdbarch *gdbarch,
+					  struct stap_parse_info *p);
+
 #endif /* i386-tdep.h */
diff --git a/gdb/i386-windows-nat.c b/gdb/i386-windows-nat.c
index 9c467fb..0928c9f 100644
--- a/gdb/i386-windows-nat.c
+++ b/gdb/i386-windows-nat.c
@@ -18,6 +18,7 @@
 #include "defs.h"
 #include "windows-nat.h"
 #include "i386-nat.h"
+#include "i386-tdep.h"
 
 #include <windows.h>
 
@@ -70,9 +71,21 @@ static const int mappings[] =
 };
 #undef context_offset
 
+/* segment_register_p_ftype implementation for x86.  */
+
+static int
+i386_windows_segment_register_p (int regnum)
+{
+  return regnum >= I386_CS_REGNUM && regnum <= I386_GS_REGNUM;
+}
+
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_i386_windows_nat;
+
 void
 _initialize_i386_windows_nat (void)
 {
   windows_set_context_register_offsets (mappings);
+  windows_set_segment_register_p (i386_windows_segment_register_p);
   i386_set_debug_register_length (4);
 }
diff --git a/gdb/i386bsd-nat.c b/gdb/i386bsd-nat.c
index 365cb2f..7bc906f 100644
--- a/gdb/i386bsd-nat.c
+++ b/gdb/i386bsd-nat.c
@@ -263,6 +263,18 @@ i386bsd_target (void)
 #define DBREG_DRX(d, x) ((&d->dr0)[x])
 #endif
 
+static unsigned long
+i386bsd_dr_get (ptid_t ptid, int regnum)
+{
+  struct dbreg dbregs;
+
+  if (ptrace (PT_GETDBREGS, PIDGET (inferior_ptid),
+	      (PTRACE_TYPE_ARG3) &dbregs, 0) == -1)
+    perror_with_name (_("Couldn't read debug registers"));
+
+  return DBREG_DRX ((&dbregs), regnum);
+}
+
 static void
 i386bsd_dr_set (int regnum, unsigned int value)
 {
@@ -298,29 +310,30 @@ i386bsd_dr_set_addr (int regnum, CORE_ADDR addr)
   i386bsd_dr_set (regnum, addr);
 }
 
-void
-i386bsd_dr_reset_addr (int regnum)
+CORE_ADDR
+i386bsd_dr_get_addr (int regnum)
 {
-  gdb_assert (regnum >= 0 && regnum <= 4);
-
-  i386bsd_dr_set (regnum, 0);
+  return i386bsd_dr_get (inferior_ptid, regnum);
 }
 
 unsigned long
 i386bsd_dr_get_status (void)
 {
-  struct dbreg dbregs;
-
-  if (ptrace (PT_GETDBREGS, PIDGET (inferior_ptid),
-	      (PTRACE_TYPE_ARG3) &dbregs, 0) == -1)
-    perror_with_name (_("Couldn't read debug registers"));
+  return i386bsd_dr_get (inferior_ptid, 6);
+}
 
-  return DBREG_DRX ((&dbregs), 6);
+unsigned long
+i386bsd_dr_get_control (void)
+{
+  return i386bsd_dr_get (inferior_ptid, 7);
 }
 
 #endif /* PT_GETDBREGS */
 

 
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+void _initialize_i386bsd_nat (void);
+
 void
 _initialize_i386bsd_nat (void)
 {
diff --git a/gdb/i386bsd-nat.h b/gdb/i386bsd-nat.h
index 7ddfcf5..0c5c129 100644
--- a/gdb/i386bsd-nat.h
+++ b/gdb/i386bsd-nat.h
@@ -31,8 +31,10 @@ extern void i386bsd_dr_set_control (unsigned long control);
 
 extern void i386bsd_dr_set_addr (int regnum, CORE_ADDR addr);
 
-extern void i386bsd_dr_reset_addr (int regnum);
+extern CORE_ADDR i386bsd_dr_get_addr (int regnum);
 
 extern unsigned long i386bsd_dr_get_status (void);
 
+extern unsigned long i386bsd_dr_get_control (void);
+
 #endif /* i386bsd-nat.h */
diff --git a/gdb/i386fbsd-nat.c b/gdb/i386fbsd-nat.c
index 3491ddc..60966e9 100644
--- a/gdb/i386fbsd-nat.c
+++ b/gdb/i386fbsd-nat.c
@@ -36,7 +36,7 @@
 
 static void
 i386fbsd_resume (struct target_ops *ops,
-		 ptid_t ptid, int step, enum target_signal signal)
+		 ptid_t ptid, int step, enum gdb_signal signal)
 {
   pid_t pid = ptid_get_pid (ptid);
   int request = PT_STEP;
@@ -75,7 +75,7 @@ i386fbsd_resume (struct target_ops *ops,
      was.  (If GDB wanted it to start some other way, we have already
      written a new PC value to the child.)  */
   if (ptrace (request, pid, (caddr_t) 1,
-	      target_signal_to_host (signal)) == -1)
+	      gdb_signal_to_host (signal)) == -1)
     perror_with_name (("ptrace"));
 }
 

@@ -133,8 +133,9 @@ _initialize_i386fbsd_nat (void)
 
   i386_dr_low.set_control = i386bsd_dr_set_control;
   i386_dr_low.set_addr = i386bsd_dr_set_addr;
-  i386_dr_low.reset_addr = i386bsd_dr_reset_addr;
+  i386_dr_low.get_addr = i386bsd_dr_get_addr;
   i386_dr_low.get_status = i386bsd_dr_get_status;
+  i386_dr_low.get_control = i386bsd_dr_get_control;
   i386_set_debug_register_length (4);
 
 #endif /* HAVE_PT_GETDBREGS */
diff --git a/gdb/i386obsd-tdep.c b/gdb/i386obsd-tdep.c
index ea240f5..9005304 100644
--- a/gdb/i386obsd-tdep.c
+++ b/gdb/i386obsd-tdep.c
@@ -81,7 +81,7 @@ i386obsd_sigtramp_p (struct frame_info *this_frame)
   size_t buflen = sizeof sigreturn;
   const int *offset;
   gdb_byte *buf;
-  char *name;
+  const char *name;
 
   /* If the function has a valid symbol name, it isn't a
      trampoline.  */
@@ -348,7 +348,7 @@ i386obsd_trapframe_cache (struct frame_info *this_frame, void **this_cache)
   struct trad_frame_cache *cache;
   CORE_ADDR func, sp, addr;
   ULONGEST cs;
-  char *name;
+  const char *name;
   int i;
 
   if (*this_cache)
@@ -413,7 +413,7 @@ i386obsd_trapframe_sniffer (const struct frame_unwind *self,
 			    void **this_prologue_cache)
 {
   ULONGEST cs;
-  char *name;
+  const char *name;
 
   /* Check Current Privilege Level and bail out if we're not executing
      in kernel space.  */
diff --git a/gdb/i387-tdep.c b/gdb/i387-tdep.c
index d2ff9e5..97bd5f6 100644
--- a/gdb/i387-tdep.c
+++ b/gdb/i387-tdep.c
@@ -113,13 +113,21 @@ print_i387_ext (struct gdbarch *gdbarch,
     fputs_filtered (" Unsupported", file);
 }
 
-/* Print the status word STATUS.  */
+/* Print the status word STATUS.  If STATUS_P is false, then STATUS
+   was unavailable.  */
 
 static void
-print_i387_status_word (unsigned int status, struct ui_file *file)
+print_i387_status_word (int status_p,
+			unsigned int status, struct ui_file *file)
 {
-  fprintf_filtered (file, "Status Word:         %s",
-		    hex_string_custom (status, 4));
+  fprintf_filtered (file, "Status Word:         ");
+  if (!status_p)
+    {
+      fprintf_filtered (file, "%s\n", _("<unavailable>"));
+      return;
+    }
+
+  fprintf_filtered (file, "%s", hex_string_custom (status, 4));
   fputs_filtered ("  ", file);
   fprintf_filtered (file, " %s", (status & 0x0001) ? "IE" : "  ");
   fprintf_filtered (file, " %s", (status & 0x0002) ? "DE" : "  ");
@@ -143,13 +151,21 @@ print_i387_status_word (unsigned int status, struct ui_file *file)
 		    "                       TOP: %d\n", ((status >> 11) & 7));
 }
 
-/* Print the control word CONTROL.  */
+/* Print the control word CONTROL.  If CONTROL_P is false, then
+   CONTROL was unavailable.  */
 
 static void
-print_i387_control_word (unsigned int control, struct ui_file *file)
+print_i387_control_word (int control_p,
+			 unsigned int control, struct ui_file *file)
 {
-  fprintf_filtered (file, "Control Word:        %s",
-		    hex_string_custom (control, 4));
+  fprintf_filtered (file, "Control Word:        ");
+  if (!control_p)
+    {
+      fprintf_filtered (file, "%s\n", _("<unavailable>"));
+      return;
+    }
+
+  fprintf_filtered (file, "%s", hex_string_custom (control, 4));
   fputs_filtered ("  ", file);
   fprintf_filtered (file, " %s", (control & 0x0001) ? "IM" : "  ");
   fprintf_filtered (file, " %s", (control & 0x0002) ? "DM" : "  ");
@@ -205,81 +221,117 @@ i387_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (frame));
   ULONGEST fctrl;
+  int fctrl_p;
   ULONGEST fstat;
+  int fstat_p;
   ULONGEST ftag;
+  int ftag_p;
   ULONGEST fiseg;
+  int fiseg_p;
   ULONGEST fioff;
+  int fioff_p;
   ULONGEST foseg;
+  int foseg_p;
   ULONGEST fooff;
+  int fooff_p;
   ULONGEST fop;
+  int fop_p;
   int fpreg;
   int top;
 
   gdb_assert (gdbarch == get_frame_arch (frame));
 
-  fctrl = get_frame_register_unsigned (frame, I387_FCTRL_REGNUM (tdep));
-  fstat = get_frame_register_unsigned (frame, I387_FSTAT_REGNUM (tdep));
-  ftag = get_frame_register_unsigned (frame, I387_FTAG_REGNUM (tdep));
-  fiseg = get_frame_register_unsigned (frame, I387_FISEG_REGNUM (tdep));
-  fioff = get_frame_register_unsigned (frame, I387_FIOFF_REGNUM (tdep));
-  foseg = get_frame_register_unsigned (frame, I387_FOSEG_REGNUM (tdep));
-  fooff = get_frame_register_unsigned (frame, I387_FOOFF_REGNUM (tdep));
-  fop = get_frame_register_unsigned (frame, I387_FOP_REGNUM (tdep));
+  fctrl_p = read_frame_register_unsigned (frame,
+					  I387_FCTRL_REGNUM (tdep), &fctrl);
+  fstat_p = read_frame_register_unsigned (frame,
+					  I387_FSTAT_REGNUM (tdep), &fstat);
+  ftag_p = read_frame_register_unsigned (frame,
+					 I387_FTAG_REGNUM (tdep), &ftag);
+  fiseg_p = read_frame_register_unsigned (frame,
+					  I387_FISEG_REGNUM (tdep), &fiseg);
+  fioff_p = read_frame_register_unsigned (frame,
+					  I387_FIOFF_REGNUM (tdep), &fioff);
+  foseg_p = read_frame_register_unsigned (frame,
+					  I387_FOSEG_REGNUM (tdep), &foseg);
+  fooff_p = read_frame_register_unsigned (frame,
+					  I387_FOOFF_REGNUM (tdep), &fooff);
+  fop_p = read_frame_register_unsigned (frame,
+					I387_FOP_REGNUM (tdep), &fop);
+
+  if (fstat_p)
+    {
+      top = ((fstat >> 11) & 7);
 
-  top = ((fstat >> 11) & 7);
+      for (fpreg = 7; fpreg >= 0; fpreg--)
+	{
+	  struct value *regval;
+	  int regnum;
+	  int i;
+	  int tag = -1;
 
-  for (fpreg = 7; fpreg >= 0; fpreg--)
-    {
-      gdb_byte raw[I386_MAX_REGISTER_SIZE];
-      int tag = (ftag >> (fpreg * 2)) & 3;
-      int i;
+	  fprintf_filtered (file, "%sR%d: ", fpreg == top ? "=>" : "  ", fpreg);
 
-      fprintf_filtered (file, "%sR%d: ", fpreg == top ? "=>" : "  ", fpreg);
+	  if (ftag_p)
+	    {
+	      tag = (ftag >> (fpreg * 2)) & 3;
 
-      switch (tag)
-	{
-	case 0:
-	  fputs_filtered ("Valid   ", file);
-	  break;
-	case 1:
-	  fputs_filtered ("Zero    ", file);
-	  break;
-	case 2:
-	  fputs_filtered ("Special ", file);
-	  break;
-	case 3:
-	  fputs_filtered ("Empty   ", file);
-	  break;
-	}
+	      switch (tag)
+		{
+		case 0:
+		  fputs_filtered ("Valid   ", file);
+		  break;
+		case 1:
+		  fputs_filtered ("Zero    ", file);
+		  break;
+		case 2:
+		  fputs_filtered ("Special ", file);
+		  break;
+		case 3:
+		  fputs_filtered ("Empty   ", file);
+		  break;
+		}
+	    }
+	  else
+	    fputs_filtered ("Unknown ", file);
 
-      get_frame_register (frame,
-			  (fpreg + 8 - top) % 8 + I387_ST0_REGNUM (tdep),
-			  raw);
+	  regnum = (fpreg + 8 - top) % 8 + I387_ST0_REGNUM (tdep);
+	  regval = get_frame_register_value (frame, regnum);
 
-      fputs_filtered ("0x", file);
-      for (i = 9; i >= 0; i--)
-	fprintf_filtered (file, "%02x", raw[i]);
+	  if (value_entirely_available (regval))
+	    {
+	      const char *raw = value_contents (regval);
 
-      if (tag != 3)
-	print_i387_ext (gdbarch, raw, file);
+	      fputs_filtered ("0x", file);
+	      for (i = 9; i >= 0; i--)
+		fprintf_filtered (file, "%02x", raw[i]);
 
-      fputs_filtered ("\n", file);
+	      if (tag != -1 && tag != 3)
+		print_i387_ext (gdbarch, raw, file);
+	    }
+	  else
+	    fprintf_filtered (file, "%s", _("<unavailable>"));
+
+	  fputs_filtered ("\n", file);
+	}
     }
 
   fputs_filtered ("\n", file);
-
-  print_i387_status_word (fstat, file);
-  print_i387_control_word (fctrl, file);
+  print_i387_status_word (fstat_p, fstat, file);
+  print_i387_control_word (fctrl_p, fctrl, file);
   fprintf_filtered (file, "Tag Word:            %s\n",
-		    hex_string_custom (ftag, 4));
+		    ftag_p ? hex_string_custom (ftag, 4) : _("<unavailable>"));
   fprintf_filtered (file, "Instruction Pointer: %s:",
-		    hex_string_custom (fiseg, 2));
-  fprintf_filtered (file, "%s\n", hex_string_custom (fioff, 8));
+		    fiseg_p ? hex_string_custom (fiseg, 2) : _("<unavailable>"));
+  fprintf_filtered (file, "%s\n",
+		    fioff_p ? hex_string_custom (fioff, 8) : _("<unavailable>"));
   fprintf_filtered (file, "Operand Pointer:     %s:",
-		    hex_string_custom (foseg, 2));
-  fprintf_filtered (file, "%s\n", hex_string_custom (fooff, 8));
+		    foseg_p ? hex_string_custom (foseg, 2) : _("<unavailable>"));
+  fprintf_filtered (file, "%s\n",
+		    fooff_p ? hex_string_custom (fooff, 8) : _("<unavailable>"));
   fprintf_filtered (file, "Opcode:              %s\n",
-		    hex_string_custom (fop ? (fop | 0xd800) : 0, 4));
+		    fop_p
+		    ? (hex_string_custom (fop ? (fop | 0xd800) : 0, 4))
+		    : _("<unavailable>"));
 }
 

 
@@ -726,7 +778,6 @@ i387_supply_xsave (struct regcache *regcache, int regnum,
   int i;
   unsigned int clear_bv;
   static const gdb_byte zero[MAX_REGISTER_SIZE] = { 0 };
-  const gdb_byte *p;
   enum
     {
       none = 0x0,
@@ -736,6 +787,7 @@ i387_supply_xsave (struct regcache *regcache, int regnum,
       all = x87 | sse | avxh
     } regclass;
 
+  gdb_assert (regs != NULL);
   gdb_assert (tdep->st0_regnum >= I386_ST0_REGNUM);
   gdb_assert (tdep->num_xmm_regs > 0);
 
@@ -753,7 +805,7 @@ i387_supply_xsave (struct regcache *regcache, int regnum,
   else
     regclass = none;
 
-  if (regs != NULL && regclass != none)
+  if (regclass != none)
     {
       /* Get `xstat_bv'.  */
       const gdb_byte *xstate_bv_p = XSAVE_XSTATE_BV_ADDR (regs);
@@ -772,11 +824,7 @@ i387_supply_xsave (struct regcache *regcache, int regnum,
      time in a program.  This means that from the user-space programs'
      perspective, it's the same as if the registers have always been
      zero from the start of the program.  Therefore, the debugger
-     should provide the same illusion to the user.
-
-     Note however, the case when REGS is NULL is a different case.
-     That case means we do not have access to the x87 states, so we
-     should mark the registers as unavailable (by supplying NULL).  */
+     should provide the same illusion to the user.  */
 
   switch (regclass)
     {
@@ -785,7 +833,7 @@ i387_supply_xsave (struct regcache *regcache, int regnum,
 
     case avxh:
       if ((clear_bv & I386_XSTATE_AVX))
-	regcache_raw_supply (regcache, regnum, regs == NULL ? NULL : zero);
+	regcache_raw_supply (regcache, regnum, zero);
       else
 	regcache_raw_supply (regcache, regnum,
 			     XSAVE_AVXH_ADDR (tdep, regs, regnum));
@@ -793,7 +841,7 @@ i387_supply_xsave (struct regcache *regcache, int regnum,
 
     case sse:
       if ((clear_bv & I386_XSTATE_SSE))
-	regcache_raw_supply (regcache, regnum, regs == NULL ? NULL : zero);
+	regcache_raw_supply (regcache, regnum, zero);
       else
 	regcache_raw_supply (regcache, regnum,
 			     FXSAVE_ADDR (tdep, regs, regnum));
@@ -801,7 +849,7 @@ i387_supply_xsave (struct regcache *regcache, int regnum,
 
     case x87:
       if ((clear_bv & I386_XSTATE_X87))
-	regcache_raw_supply (regcache, regnum, regs == NULL ? NULL : zero);
+	regcache_raw_supply (regcache, regnum, zero);
       else
 	regcache_raw_supply (regcache, regnum,
 			     FXSAVE_ADDR (tdep, regs, regnum));
@@ -816,7 +864,7 @@ i387_supply_xsave (struct regcache *regcache, int regnum,
 	      for (i = I387_YMM0H_REGNUM (tdep);
 		   i < I387_YMMENDH_REGNUM (tdep);
 		   i++)
-		regcache_raw_supply (regcache, i, regs == NULL ? NULL : zero);
+		regcache_raw_supply (regcache, i, zero);
 	    }
 	  else
 	    {
@@ -836,7 +884,7 @@ i387_supply_xsave (struct regcache *regcache, int regnum,
 	      for (i = I387_XMM0_REGNUM (tdep);
 		   i < I387_MXCSR_REGNUM (tdep);
 		   i++)
-		regcache_raw_supply (regcache, i, regs == NULL ? NULL : zero);
+		regcache_raw_supply (regcache, i, zero);
 	    }
 	  else
 	    {
@@ -855,7 +903,7 @@ i387_supply_xsave (struct regcache *regcache, int regnum,
 	      for (i = I387_ST0_REGNUM (tdep);
 		   i < I387_FCTRL_REGNUM (tdep);
 		   i++)
-		regcache_raw_supply (regcache, i, regs == NULL ? NULL : zero);
+		regcache_raw_supply (regcache, i, zero);
 	    }
 	  else
 	    {
@@ -872,12 +920,6 @@ i387_supply_xsave (struct regcache *regcache, int regnum,
   for (i = I387_FCTRL_REGNUM (tdep); i < I387_XMM0_REGNUM (tdep); i++)
     if (regnum == -1 || regnum == i)
       {
-	if (regs == NULL)
-	  {
-	    regcache_raw_supply (regcache, i, NULL);
-	    continue;
-	  }
-
 	/* Most of the FPU control registers occupy only 16 bits in
 	   the xsave extended state.  Give those a special treatment.  */
 	if (i != I387_FIOFF_REGNUM (tdep)
@@ -928,10 +970,8 @@ i387_supply_xsave (struct regcache *regcache, int regnum,
       }
 
   if (regnum == I387_MXCSR_REGNUM (tdep) || regnum == -1)
-    {
-      p = regs == NULL ? NULL : FXSAVE_MXCSR_ADDR (regs);
-      regcache_raw_supply (regcache, I387_MXCSR_REGNUM (tdep), p);
-    }
+    regcache_raw_supply (regcache, I387_MXCSR_REGNUM (tdep),
+			 FXSAVE_MXCSR_ADDR (regs));
 }
 
 /* Similar to i387_collect_fxsave, but use XSAVE extended state.  */
diff --git a/gdb/ia64-hpux-nat.c b/gdb/ia64-hpux-nat.c
index 4b42c22..07a433e 100644
--- a/gdb/ia64-hpux-nat.c
+++ b/gdb/ia64-hpux-nat.c
@@ -154,12 +154,12 @@ ia64_hpux_wait (struct target_ops *ops, ptid_t ptid,
      process it, and then resume the execution as if the event did
      not happen.  */
   if (ourstatus->kind == TARGET_WAITKIND_STOPPED
-      && ourstatus->value.sig == TARGET_SIGNAL_TRAP
+      && ourstatus->value.sig == GDB_SIGNAL_TRAP
       && ia64_hpux_at_dld_breakpoint_p (new_ptid))
     {
       ia64_hpux_handle_dld_breakpoint (new_ptid);
 
-      target_resume (new_ptid, 0, TARGET_SIGNAL_0);
+      target_resume (new_ptid, 0, GDB_SIGNAL_0);
       ourstatus->kind = TARGET_WAITKIND_IGNORE;
     }
 
@@ -679,10 +679,10 @@ ia64_hpux_mourn_inferior (struct target_ops *ops)
 }
 
 /* Prevent warning from -Wmissing-prototypes.  */
-void _initialize_hppa_hpux_nat (void);
+void _initialize_ia64_hpux_nat (void);
 
 void
-_initialize_hppa_hpux_nat (void)
+_initialize_ia64_hpux_nat (void)
 {
   struct target_ops *t;
 
diff --git a/gdb/ia64-libunwind-tdep.c b/gdb/ia64-libunwind-tdep.c
new file mode 100644
index 0000000..e1c89c4
--- /dev/null
+++ b/gdb/ia64-libunwind-tdep.c
@@ -0,0 +1,582 @@
+/* Frame unwinder for ia64 frames using the libunwind library.
+
+   Copyright (C) 2003-2004, 2006-2012 Free Software Foundation, Inc.
+
+   Written by Jeff Johnston, contributed by Red Hat Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+
+#include "inferior.h"
+#include "frame.h"
+#include "frame-base.h"
+#include "frame-unwind.h"
+#include "gdbcore.h"
+#include "gdbtypes.h"
+#include "symtab.h"
+#include "objfiles.h"
+#include "regcache.h"
+
+#include <dlfcn.h>
+
+#include "gdb_assert.h"
+#include "gdb_string.h"
+
+#include "ia64-libunwind-tdep.h"
+
+#include "complaints.h"
+
+/* IA-64 is the only target that currently uses ia64-libunwind-tdep.
+   Note how UNW_TARGET, UNW_OBJ, etc. are compile time constants below.
+   Those come from libunwind's headers, and are target dependent.
+   Also, some of libunwind's typedefs are target dependent, as e.g.,
+   unw_word_t.  If some other target wants to use this, we will need
+   to do some abstracting in order to make it possible to select which
+   libunwind we're talking to at runtime (and have one per arch).  */
+
+/* The following two macros are normally defined in <endian.h>.
+   But systems such as ia64-hpux do not provide such header, so
+   we just define them here if not already defined.  */
+#ifndef __LITTLE_ENDIAN
+#define __LITTLE_ENDIAN 1234
+#endif
+#ifndef __BIG_ENDIAN
+#define __BIG_ENDIAN    4321
+#endif
+
+static int libunwind_initialized;
+static struct gdbarch_data *libunwind_descr_handle;
+
+/* Required function pointers from libunwind.  */
+static int (*unw_get_reg_p) (unw_cursor_t *, unw_regnum_t, unw_word_t *);
+static int (*unw_get_fpreg_p) (unw_cursor_t *, unw_regnum_t, unw_fpreg_t *);
+static int (*unw_get_saveloc_p) (unw_cursor_t *, unw_regnum_t,
+				 unw_save_loc_t *);
+static int (*unw_is_signal_frame_p) (unw_cursor_t *);
+static int (*unw_step_p) (unw_cursor_t *);
+static int (*unw_init_remote_p) (unw_cursor_t *, unw_addr_space_t, void *);
+static unw_addr_space_t (*unw_create_addr_space_p) (unw_accessors_t *, int);
+static void (*unw_destroy_addr_space_p) (unw_addr_space_t);
+static int (*unw_search_unwind_table_p) (unw_addr_space_t, unw_word_t,
+					 unw_dyn_info_t *,
+					 unw_proc_info_t *, int, void *);
+static unw_word_t (*unw_find_dyn_list_p) (unw_addr_space_t, unw_dyn_info_t *,
+					  void *);
+
+
+struct libunwind_frame_cache
+{
+  CORE_ADDR base;
+  CORE_ADDR func_addr;
+  unw_cursor_t cursor;
+  unw_addr_space_t as;
+};
+
+/* We need to qualify the function names with a platform-specific prefix
+   to match the names used by the libunwind library.  The UNW_OBJ macro is
+   provided by the libunwind.h header file.  */
+#define STRINGIFY2(name)	#name
+#define STRINGIFY(name)		STRINGIFY2(name)
+
+#ifndef LIBUNWIND_SO
+/* Use the stable ABI major version number.  `libunwind-ia64.so' is a link time
+   only library, not a runtime one.  */
+#define LIBUNWIND_SO "libunwind-" STRINGIFY(UNW_TARGET) ".so.8"
+
+/* Provide also compatibility with older .so.  The two APIs are compatible, .8
+   is only extended a bit, GDB does not use the extended API at all.  */
+#define LIBUNWIND_SO_7 "libunwind-" STRINGIFY(UNW_TARGET) ".so.7"
+#endif
+
+static char *get_reg_name = STRINGIFY(UNW_OBJ(get_reg));
+static char *get_fpreg_name = STRINGIFY(UNW_OBJ(get_fpreg));
+static char *get_saveloc_name = STRINGIFY(UNW_OBJ(get_save_loc));
+static char *is_signal_frame_name = STRINGIFY(UNW_OBJ(is_signal_frame));
+static char *step_name = STRINGIFY(UNW_OBJ(step));
+static char *init_remote_name = STRINGIFY(UNW_OBJ(init_remote));
+static char *create_addr_space_name = STRINGIFY(UNW_OBJ(create_addr_space));
+static char *destroy_addr_space_name = STRINGIFY(UNW_OBJ(destroy_addr_space));
+static char *search_unwind_table_name
+  = STRINGIFY(UNW_OBJ(search_unwind_table));
+static char *find_dyn_list_name = STRINGIFY(UNW_OBJ(find_dyn_list));
+
+static struct libunwind_descr *
+libunwind_descr (struct gdbarch *gdbarch)
+{
+  return gdbarch_data (gdbarch, libunwind_descr_handle);
+}
+
+static void *
+libunwind_descr_init (struct gdbarch *gdbarch)
+{
+  struct libunwind_descr *descr
+    = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct libunwind_descr);
+
+  return descr;
+}
+
+void
+libunwind_frame_set_descr (struct gdbarch *gdbarch,
+			   struct libunwind_descr *descr)
+{
+  struct libunwind_descr *arch_descr;
+
+  gdb_assert (gdbarch != NULL);
+
+  arch_descr = gdbarch_data (gdbarch, libunwind_descr_handle);
+
+  if (arch_descr == NULL)
+    {
+      /* First time here.  Must initialize data area.  */
+      arch_descr = libunwind_descr_init (gdbarch);
+      deprecated_set_gdbarch_data (gdbarch,
+				   libunwind_descr_handle, arch_descr);
+    }
+
+  /* Copy new descriptor info into arch descriptor.  */
+  arch_descr->gdb2uw = descr->gdb2uw;
+  arch_descr->uw2gdb = descr->uw2gdb;
+  arch_descr->is_fpreg = descr->is_fpreg;
+  arch_descr->accessors = descr->accessors;
+  arch_descr->special_accessors = descr->special_accessors;
+}
+
+static struct libunwind_frame_cache *
+libunwind_frame_cache (struct frame_info *this_frame, void **this_cache)
+{
+  unw_accessors_t *acc;
+  unw_addr_space_t as;
+  unw_word_t fp;
+  unw_regnum_t uw_sp_regnum;
+  struct libunwind_frame_cache *cache;
+  struct libunwind_descr *descr;
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
+  int i, ret;
+
+  if (*this_cache)
+    return *this_cache;
+
+  /* Allocate a new cache.  */
+  cache = FRAME_OBSTACK_ZALLOC (struct libunwind_frame_cache);
+
+  cache->func_addr = get_frame_func (this_frame);
+  if (cache->func_addr == 0)
+    /* This can happen when the frame corresponds to a function for which
+       there is no debugging information nor any entry in the symbol table.
+       This is probably a static function for which an entry in the symbol
+       table was not created when the objfile got linked (observed in
+       libpthread.so on ia64-hpux).
+
+       The best we can do, in that case, is use the frame PC as the function
+       address.  We don't need to give up since we still have the unwind
+       record to help us perform the unwinding.  There is also another
+       compelling to continue, because abandonning now means stopping
+       the backtrace, which can never be helpful for the user.  */
+    cache->func_addr = get_frame_pc (this_frame);
+
+  /* Get a libunwind cursor to the previous frame.
+  
+     We do this by initializing a cursor.  Libunwind treats a new cursor
+     as the top of stack and will get the current register set via the
+     libunwind register accessor.  Now, we provide the platform-specific
+     accessors and we set up the register accessor to use the frame
+     register unwinding interfaces so that we properly get the registers
+     for the current frame rather than the top.  We then use the unw_step
+     function to move the libunwind cursor back one frame.  We can later
+     use this cursor to find previous registers via the unw_get_reg
+     interface which will invoke libunwind's special logic.  */
+  descr = libunwind_descr (gdbarch);
+  acc = descr->accessors;
+  as =  unw_create_addr_space_p (acc,
+				 gdbarch_byte_order (gdbarch)
+				 == BFD_ENDIAN_BIG
+				 ? __BIG_ENDIAN
+				 : __LITTLE_ENDIAN);
+
+  unw_init_remote_p (&cache->cursor, as, this_frame);
+  if (unw_step_p (&cache->cursor) < 0)
+    {
+      unw_destroy_addr_space_p (as);
+      return NULL;
+    }
+
+  /* To get base address, get sp from previous frame.  */
+  uw_sp_regnum = descr->gdb2uw (gdbarch_sp_regnum (gdbarch));
+  ret = unw_get_reg_p (&cache->cursor, uw_sp_regnum, &fp);
+  if (ret < 0)
+    {
+      unw_destroy_addr_space_p (as);
+      error (_("Can't get libunwind sp register."));
+    }
+
+  cache->base = (CORE_ADDR)fp;
+  cache->as = as;
+
+  *this_cache = cache;
+  return cache;
+}
+
+void
+libunwind_frame_dealloc_cache (struct frame_info *self, void *this_cache)
+{
+  struct libunwind_frame_cache *cache = this_cache;
+
+  if (cache->as)
+    unw_destroy_addr_space_p (cache->as);
+}
+
+unw_word_t
+libunwind_find_dyn_list (unw_addr_space_t as, unw_dyn_info_t *di, void *arg)
+{
+  return unw_find_dyn_list_p (as, di, arg);
+}
+
+/* Verify if there is sufficient libunwind information for the frame to use
+   libunwind frame unwinding.  */
+int
+libunwind_frame_sniffer (const struct frame_unwind *self,
+                         struct frame_info *this_frame, void **this_cache)
+{
+  unw_cursor_t cursor;
+  unw_accessors_t *acc;
+  unw_addr_space_t as;
+  struct libunwind_descr *descr;
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
+  int i, ret;
+
+  /* To test for libunwind unwind support, initialize a cursor to
+     the current frame and try to back up.  We use this same method
+     when setting up the frame cache (see libunwind_frame_cache()).
+     If libunwind returns success for this operation, it means that
+     it has found sufficient libunwind unwinding information to do so.  */
+
+  descr = libunwind_descr (gdbarch);
+  acc = descr->accessors;
+  as =  unw_create_addr_space_p (acc,
+				 gdbarch_byte_order (gdbarch)
+				 == BFD_ENDIAN_BIG
+				 ? __BIG_ENDIAN
+				 : __LITTLE_ENDIAN);
+
+  ret = unw_init_remote_p (&cursor, as, this_frame);
+
+  if (ret < 0)
+    {
+      unw_destroy_addr_space_p (as);
+      return 0;
+    }
+
+ 
+  /* Check to see if we have libunwind info by checking if we are in a 
+     signal frame.  If it doesn't return an error, we have libunwind info
+     and can use libunwind.  */
+  ret = unw_is_signal_frame_p (&cursor);
+  unw_destroy_addr_space_p (as);
+
+  if (ret < 0)
+    return 0;
+
+  return 1;
+}
+
+void
+libunwind_frame_this_id (struct frame_info *this_frame, void **this_cache,
+		         struct frame_id *this_id)
+{
+  struct libunwind_frame_cache *cache =
+    libunwind_frame_cache (this_frame, this_cache);
+
+  if (cache != NULL)
+    (*this_id) = frame_id_build (cache->base, cache->func_addr);
+}
+
+struct value *
+libunwind_frame_prev_register (struct frame_info *this_frame,
+                               void **this_cache, int regnum)
+{
+  struct libunwind_frame_cache *cache =
+    libunwind_frame_cache (this_frame, this_cache);
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
+
+  void *ptr;
+  unw_cursor_t *c;
+  unw_save_loc_t sl;
+  int i, ret;
+  unw_word_t intval;
+  unw_fpreg_t fpval;
+  unw_regnum_t uw_regnum;
+  struct libunwind_descr *descr;
+  struct value *val = NULL;
+
+  if (cache == NULL)
+    return frame_unwind_got_constant (this_frame, regnum, 0);
+  
+  /* Convert from gdb register number to libunwind register number.  */
+  descr = libunwind_descr (get_frame_arch (this_frame));
+  uw_regnum = descr->gdb2uw (regnum);
+
+  gdb_assert (regnum >= 0);
+
+  if (!target_has_registers)
+    error (_("No registers."));
+
+  if (uw_regnum < 0)
+    return frame_unwind_got_constant (this_frame, regnum, 0);
+
+  if (unw_get_saveloc_p (&cache->cursor, uw_regnum, &sl) < 0)
+    return frame_unwind_got_constant (this_frame, regnum, 0);
+
+  switch (sl.type)
+    {
+    case UNW_SLT_MEMORY:
+      val = frame_unwind_got_memory (this_frame, regnum, sl.u.addr);
+      break;
+
+    case UNW_SLT_REG:
+      val = frame_unwind_got_register (this_frame, regnum,
+                                       descr->uw2gdb (sl.u.regnum));
+      break;
+    case UNW_SLT_NONE:
+      {
+        /* The register is not stored at a specific memory address nor
+           inside another register.  So use libunwind to fetch the register
+           value for us, and create a constant value with the result.  */
+        if (descr->is_fpreg (uw_regnum))
+          {
+            ret = unw_get_fpreg_p (&cache->cursor, uw_regnum, &fpval);
+            if (ret < 0)
+              return frame_unwind_got_constant (this_frame, regnum, 0);
+            val = frame_unwind_got_bytes (this_frame, regnum,
+                                          (gdb_byte *) &fpval);
+          }
+        else
+          {
+            ret = unw_get_reg_p (&cache->cursor, uw_regnum, &intval);
+            if (ret < 0)
+              return frame_unwind_got_constant (this_frame, regnum, 0);
+            val = frame_unwind_got_constant (this_frame, regnum, intval);
+          }
+        break;
+      }
+    }
+
+  return val;
+} 
+
+/* The following is a glue routine to call the libunwind unwind table
+   search function to get unwind information for a specified ip address.  */ 
+int
+libunwind_search_unwind_table (void *as, long ip, void *di,
+			       void *pi, int need_unwind_info, void *args)
+{
+  return unw_search_unwind_table_p (*(unw_addr_space_t *)as, (unw_word_t )ip, 
+				    di, pi, need_unwind_info, args);
+}
+
+/* Verify if we are in a sigtramp frame and we can use libunwind to unwind.  */
+int
+libunwind_sigtramp_frame_sniffer (const struct frame_unwind *self,
+                                  struct frame_info *this_frame,
+                                  void **this_cache)
+{
+  unw_cursor_t cursor;
+  unw_accessors_t *acc;
+  unw_addr_space_t as;
+  struct libunwind_descr *descr;
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
+  int i, ret;
+
+  /* To test for libunwind unwind support, initialize a cursor to the
+     current frame and try to back up.  We use this same method when
+     setting up the frame cache (see libunwind_frame_cache()).  If
+     libunwind returns success for this operation, it means that it
+     has found sufficient libunwind unwinding information to do
+     so.  */
+
+  descr = libunwind_descr (gdbarch);
+  acc = descr->accessors;
+  as =  unw_create_addr_space_p (acc,
+				 gdbarch_byte_order (gdbarch)
+				 == BFD_ENDIAN_BIG
+				 ? __BIG_ENDIAN
+				 : __LITTLE_ENDIAN);
+
+  ret = unw_init_remote_p (&cursor, as, this_frame);
+
+  if (ret < 0)
+    {
+      unw_destroy_addr_space_p (as);
+      return 0;
+    }
+
+  /* Check to see if we are in a signal frame.  */
+  ret = unw_is_signal_frame_p (&cursor);
+  unw_destroy_addr_space_p (as);
+  if (ret > 0)
+    return 1;
+
+  return 0;
+}
+
+/* The following routine is for accessing special registers of the top frame.
+   A special set of accessors must be given that work without frame info.
+   This is used by ia64 to access the rse registers r32-r127.  While they
+   are usually located at BOF, this is not always true and only the libunwind
+   info can decipher where they actually are.  */
+int
+libunwind_get_reg_special (struct gdbarch *gdbarch, struct regcache *regcache,
+			   int regnum, void *buf)
+{
+  unw_cursor_t cursor;
+  unw_accessors_t *acc;
+  unw_addr_space_t as;
+  struct libunwind_descr *descr;
+  int ret;
+  unw_regnum_t uw_regnum;
+  unw_word_t intval;
+  unw_fpreg_t fpval;
+  void *ptr;
+
+
+  descr = libunwind_descr (gdbarch);
+  acc = descr->special_accessors;
+  as =  unw_create_addr_space_p (acc,
+				 gdbarch_byte_order (gdbarch)
+				 == BFD_ENDIAN_BIG
+				 ? __BIG_ENDIAN
+				 : __LITTLE_ENDIAN);
+
+  ret = unw_init_remote_p (&cursor, as, regcache);
+  if (ret < 0)
+    {
+      unw_destroy_addr_space_p (as);
+      return -1;
+    }
+
+  uw_regnum = descr->gdb2uw (regnum);
+
+  if (descr->is_fpreg (uw_regnum))
+    {
+      ret = unw_get_fpreg_p (&cursor, uw_regnum, &fpval);
+      ptr = &fpval;
+    }
+  else
+    {
+      ret = unw_get_reg_p (&cursor, uw_regnum, &intval);
+      ptr = &intval;
+    }
+
+  unw_destroy_addr_space_p (as);
+
+  if (ret < 0)
+    return -1;
+
+  if (buf)
+    memcpy (buf, ptr, register_size (gdbarch, regnum));
+
+  return 0;
+}
+  
+static int
+libunwind_load (void)
+{
+  void *handle;
+  char *so_error = NULL;
+
+  handle = dlopen (LIBUNWIND_SO, RTLD_NOW);
+  if (handle == NULL)
+    {
+      so_error = xstrdup (dlerror ());
+#ifdef LIBUNWIND_SO_7
+      handle = dlopen (LIBUNWIND_SO_7, RTLD_NOW);
+#endif /* LIBUNWIND_SO_7 */
+    }
+  if (handle == NULL)
+    {
+      fprintf_unfiltered (gdb_stderr, _("[GDB failed to load %s: %s]\n"),
+			  LIBUNWIND_SO, so_error);
+#ifdef LIBUNWIND_SO_7
+      fprintf_unfiltered (gdb_stderr, _("[GDB failed to load %s: %s]\n"),
+			  LIBUNWIND_SO_7, dlerror ());
+#endif /* LIBUNWIND_SO_7 */
+    }
+  xfree (so_error);
+  if (handle == NULL)
+    return 0;
+
+  /* Initialize pointers to the dynamic library functions we will use.  */
+
+  unw_get_reg_p = dlsym (handle, get_reg_name);
+  if (unw_get_reg_p == NULL)
+    return 0;
+
+  unw_get_fpreg_p = dlsym (handle, get_fpreg_name);
+  if (unw_get_fpreg_p == NULL)
+    return 0;
+
+  unw_get_saveloc_p = dlsym (handle, get_saveloc_name);
+  if (unw_get_saveloc_p == NULL)
+    return 0;
+
+  unw_is_signal_frame_p = dlsym (handle, is_signal_frame_name);
+  if (unw_is_signal_frame_p == NULL)
+    return 0;
+
+  unw_step_p = dlsym (handle, step_name);
+  if (unw_step_p == NULL)
+    return 0;
+
+  unw_init_remote_p = dlsym (handle, init_remote_name);
+  if (unw_init_remote_p == NULL)
+    return 0;
+
+  unw_create_addr_space_p = dlsym (handle, create_addr_space_name);
+  if (unw_create_addr_space_p == NULL)
+    return 0;
+
+  unw_destroy_addr_space_p = dlsym (handle, destroy_addr_space_name);
+  if (unw_destroy_addr_space_p == NULL)
+    return 0;
+
+  unw_search_unwind_table_p = dlsym (handle, search_unwind_table_name);
+  if (unw_search_unwind_table_p == NULL)
+    return 0;
+
+  unw_find_dyn_list_p = dlsym (handle, find_dyn_list_name);
+  if (unw_find_dyn_list_p == NULL)
+    return 0;
+   
+  return 1;
+}
+
+int
+libunwind_is_initialized (void)
+{
+  return libunwind_initialized;
+}
+
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+void _initialize_libunwind_frame (void);
+
+void
+_initialize_libunwind_frame (void)
+{
+  libunwind_descr_handle
+    = gdbarch_data_register_post_init (libunwind_descr_init);
+
+  libunwind_initialized = libunwind_load ();
+}
diff --git a/gdb/ia64-libunwind-tdep.h b/gdb/ia64-libunwind-tdep.h
new file mode 100644
index 0000000..88f3857
--- /dev/null
+++ b/gdb/ia64-libunwind-tdep.h
@@ -0,0 +1,77 @@
+/* Frame unwinder for ia64 frames with libunwind frame information.
+
+   Copyright (C) 2003, 2006-2012 Free Software Foundation, Inc.
+
+   Contributed by Jeff Johnston.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef IA64_LIBUNWIND_TDEP_H
+#define IA64_LIBUNWIND_TDEP_H 1
+
+struct frame_info;
+struct frame_id;
+struct regcache;
+struct gdbarch;
+struct frame_unwind;
+
+/* IA-64 is the only target that currently uses libunwind.  If some
+   other target wants to use it, we will need to do some abstracting
+   in order to make it possible to have more than one
+   ia64-libunwind-tdep instance.  Including "libunwind.h" is wrong as
+   that ends up including the libunwind-$(arch).h for the host gdb is
+   running on.  */
+#include "libunwind-ia64.h"
+
+struct libunwind_descr
+{
+  int (*gdb2uw) (int);
+  int (*uw2gdb) (int);
+  int (*is_fpreg) (int);
+  void *accessors;
+  void *special_accessors;
+};
+
+int libunwind_frame_sniffer (const struct frame_unwind *self,
+                             struct frame_info *this_frame,
+                             void **this_cache);
+                          
+int libunwind_sigtramp_frame_sniffer (const struct frame_unwind *self,
+                                      struct frame_info *this_frame,
+                                      void **this_cache);
+
+void libunwind_frame_set_descr (struct gdbarch *arch,
+				struct libunwind_descr *descr);
+
+void libunwind_frame_this_id (struct frame_info *this_frame, void **this_cache,
+			      struct frame_id *this_id);
+struct value *libunwind_frame_prev_register (struct frame_info *this_frame,
+                                             void **this_cache, int regnum);
+void libunwind_frame_dealloc_cache (struct frame_info *self, void *cache);
+
+int libunwind_is_initialized (void);
+
+int libunwind_search_unwind_table (void *as, long ip, void *di,
+				   void *pi, int need_unwind_info, void *args);
+
+unw_word_t libunwind_find_dyn_list (unw_addr_space_t, unw_dyn_info_t *,
+				    void *);
+
+int libunwind_get_reg_special (struct gdbarch *gdbarch,
+			       struct regcache *regcache,
+			       int regnum, void *buf);
+
+#endif /* IA64_LIBUNWIND_TDEP_H */
diff --git a/gdb/ia64-linux-nat.c b/gdb/ia64-linux-nat.c
index 5aaaed9..9b5fbf3 100644
--- a/gdb/ia64-linux-nat.c
+++ b/gdb/ia64-linux-nat.c
@@ -272,7 +272,7 @@ static int u_offsets[] =
     -1, -1, -1, -1, -1, -1, -1, -1, -1,
     PT_AR_PFS,
     PT_AR_LC,
-    -1,		/* Not available: EC, the Epilog Count register.  */
+    PT_AR_EC,
     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
@@ -447,8 +447,20 @@ supply_fpregset (struct regcache *regcache, const fpregset_t *fpregsetp)
 {
   int regi;
   const char *from;
+  const gdb_byte f_zero[16] = { 0 };
+  const gdb_byte f_one[16] =
+    { 0, 0, 0, 0, 0, 0, 0, 0x80, 0xff, 0xff, 0, 0, 0, 0, 0, 0 };
 
-  for (regi = IA64_FR0_REGNUM; regi <= IA64_FR127_REGNUM; regi++)
+  /* Kernel generated cores have fr1==0 instead of 1.0.  Older GDBs
+     did the same.  So ignore whatever might be recorded in fpregset_t
+     for fr0/fr1 and always supply their expected values.  */
+
+  /* fr0 is always read as zero.  */
+  regcache_raw_supply (regcache, IA64_FR0_REGNUM, f_zero);
+  /* fr1 is always read as one (1.0).  */
+  regcache_raw_supply (regcache, IA64_FR1_REGNUM, f_one);
+
+  for (regi = IA64_FR2_REGNUM; regi <= IA64_FR127_REGNUM; regi++)
     {
       from = (const char *) &((*fpregsetp)[regi - IA64_FR0_REGNUM]);
       regcache_raw_supply (regcache, regi, from);
@@ -617,7 +629,7 @@ ia64_linux_remove_watchpoint (CORE_ADDR addr, int len, int type,
 }
 
 static void
-ia64_linux_new_thread (ptid_t ptid)
+ia64_linux_new_thread (struct lwp_info *lp)
 {
   int i, any;
 
@@ -626,24 +638,25 @@ ia64_linux_new_thread (ptid_t ptid)
     {
       if (debug_registers[i] != 0)
 	any = 1;
-      store_debug_register (ptid, i, debug_registers[i]);
+      store_debug_register (lp->ptid, i, debug_registers[i]);
     }
 
   if (any)
-    enable_watchpoints_in_psr (ptid);
+    enable_watchpoints_in_psr (lp->ptid);
 }
 
 static int
 ia64_linux_stopped_data_address (struct target_ops *ops, CORE_ADDR *addr_p)
 {
   CORE_ADDR psr;
-  struct siginfo *siginfo_p;
+  siginfo_t siginfo;
   struct regcache *regcache = get_current_regcache ();
 
-  siginfo_p = linux_nat_get_siginfo (inferior_ptid);
+  if (!linux_nat_get_siginfo (inferior_ptid, &siginfo))
+    return 0;
 
-  if (siginfo_p->si_signo != SIGTRAP
-      || (siginfo_p->si_code & 0xffff) != 0x0004 /* TRAP_HWBKPT */)
+  if (siginfo.si_signo != SIGTRAP
+      || (siginfo.si_code & 0xffff) != 0x0004 /* TRAP_HWBKPT */)
     return 0;
 
   regcache_cooked_read_unsigned (regcache, IA64_PSR_REGNUM, &psr);
@@ -651,7 +664,7 @@ ia64_linux_stopped_data_address (struct target_ops *ops, CORE_ADDR *addr_p)
                            for the next instruction.  */
   regcache_cooked_write_unsigned (regcache, IA64_PSR_REGNUM, psr);
 
-  *addr_p = (CORE_ADDR)siginfo_p->si_addr;
+  *addr_p = (CORE_ADDR) siginfo.si_addr;
   return 1;
 }
 
@@ -680,6 +693,37 @@ ia64_linux_fetch_register (struct regcache *regcache, int regnum)
   PTRACE_TYPE_RET *buf;
   int pid, i;
 
+  /* r0 cannot be fetched but is always zero.  */
+  if (regnum == IA64_GR0_REGNUM)
+    {
+      const gdb_byte zero[8] = { 0 };
+
+      gdb_assert (sizeof (zero) == register_size (gdbarch, regnum));
+      regcache_raw_supply (regcache, regnum, zero);
+      return;
+    }
+
+  /* fr0 cannot be fetched but is always zero.  */
+  if (regnum == IA64_FR0_REGNUM)
+    {
+      const gdb_byte f_zero[16] = { 0 };
+
+      gdb_assert (sizeof (f_zero) == register_size (gdbarch, regnum));
+      regcache_raw_supply (regcache, regnum, f_zero);
+      return;
+    }
+
+  /* fr1 cannot be fetched but is always one (1.0).  */
+  if (regnum == IA64_FR1_REGNUM)
+    {
+      const gdb_byte f_one[16] =
+	{ 0, 0, 0, 0, 0, 0, 0, 0x80, 0xff, 0xff, 0, 0, 0, 0, 0, 0 };
+
+      gdb_assert (sizeof (f_one) == register_size (gdbarch, regnum));
+      regcache_raw_supply (regcache, regnum, f_one);
+      return;
+    }
+
   if (ia64_cannot_fetch_register (gdbarch, regnum))
     {
       regcache_raw_supply (regcache, regnum, NULL);
diff --git a/gdb/ia64-tdep.c b/gdb/ia64-tdep.c
index a297ecc..a7a802a 100644
--- a/gdb/ia64-tdep.c
+++ b/gdb/ia64-tdep.c
@@ -42,8 +42,7 @@
 
 #ifdef HAVE_LIBUNWIND_IA64_H
 #include "elf/ia64.h"           /* for PT_IA_64_UNWIND value */
-#include "libunwind-frame.h"
-#include "libunwind-ia64.h"
+#include "ia64-libunwind-tdep.h"
 
 /* Note: KERNEL_START is supposed to be an address which is not going
          to ever contain any valid unwind info.  For ia64 linux, the choice
@@ -1042,7 +1041,6 @@ ia64_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
          It can be calculated as the bsp - sof (sizeof frame).  */
       ULONGEST bsp, vbsp;
       ULONGEST cfm;
-      CORE_ADDR reg;
       status = regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
       if (status != REG_VALID)
 	return status;
@@ -1061,7 +1059,6 @@ ia64_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
       ULONGEST pr;
       ULONGEST cfm;
       ULONGEST prN_val;
-      CORE_ADDR reg;
       status = regcache_cooked_read_unsigned (regcache, IA64_PR_REGNUM, &pr);
       if (status != REG_VALID)
 	return status;
@@ -1099,7 +1096,6 @@ ia64_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
     {
       ULONGEST bsp;
       ULONGEST cfm;
-      CORE_ADDR reg;
       regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
       regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
 
@@ -1855,8 +1851,7 @@ ia64_frame_cache (struct frame_info *this_frame, void **this_cache)
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   struct ia64_frame_cache *cache;
   char buf[8];
-  CORE_ADDR cfm, sof, sol, bsp, psr;
-  int i;
+  CORE_ADDR cfm, psr;
 
   if (*this_cache)
     return *this_cache;
@@ -2243,9 +2238,7 @@ ia64_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache)
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   struct ia64_frame_cache *cache;
-  CORE_ADDR addr;
   char buf[8];
-  int i;
 
   if (*this_cache)
     return *this_cache;
@@ -2418,8 +2411,8 @@ ia64_rse_skip_regs (uint64_t addr, long num_regs)
   return addr + ((num_regs + delta/0x3f) << 3);
 }
   
-/* Gdb libunwind-frame callback function to convert from an ia64 gdb register 
-   number to a libunwind register number.  */
+/* Gdb ia64-libunwind-tdep callback function to convert from an ia64 gdb
+   register number to a libunwind register number.  */
 static int
 ia64_gdb2uw_regnum (int regnum)
 {
@@ -2451,8 +2444,8 @@ ia64_gdb2uw_regnum (int regnum)
     return -1;
 }
   
-/* Gdb libunwind-frame callback function to convert from a libunwind register 
-   number to a ia64 gdb register number.  */
+/* Gdb ia64-libunwind-tdep callback function to convert from a libunwind
+   register number to a ia64 gdb register number.  */
 static int
 ia64_uw2gdb_regnum (int uw_regnum)
 {
@@ -2482,8 +2475,8 @@ ia64_uw2gdb_regnum (int uw_regnum)
     return -1;
 }
 
-/* Gdb libunwind-frame callback function to reveal if register is a float 
-   register or not.  */
+/* Gdb ia64-libunwind-tdep callback function to reveal if register is
+   a float register or not.  */
 static int
 ia64_is_fpreg (int uw_regnum)
 {
@@ -3149,7 +3142,7 @@ static const struct frame_unwind ia64_libunwind_sigtramp_frame_unwind =
 };
 
 /* Set of libunwind callback acccessor functions.  */
-static unw_accessors_t ia64_unw_accessors =
+unw_accessors_t ia64_unw_accessors =
 {
   ia64_find_proc_info_x,
   ia64_put_unwind_info,
@@ -3165,7 +3158,7 @@ static unw_accessors_t ia64_unw_accessors =
    the rse registers.  At the top of the stack, we want libunwind to figure out
    how to read r32 - r127.  Though usually they are found sequentially in
    memory starting from $bof, this is not always true.  */
-static unw_accessors_t ia64_unw_rse_accessors =
+unw_accessors_t ia64_unw_rse_accessors =
 {
   ia64_find_proc_info_x,
   ia64_put_unwind_info,
@@ -3177,9 +3170,9 @@ static unw_accessors_t ia64_unw_rse_accessors =
   /* get_proc_name */
 };
 
-/* Set of ia64 gdb libunwind-frame callbacks and data for generic
-   libunwind-frame code to use.  */
-static struct libunwind_descr ia64_libunwind_descr =
+/* Set of ia64-libunwind-tdep gdb callbacks and data for generic
+   ia64-libunwind-tdep code to use.  */
+struct libunwind_descr ia64_libunwind_descr =
 {
   ia64_gdb2uw_regnum, 
   ia64_uw2gdb_regnum, 
@@ -3341,7 +3334,7 @@ ia64_store_return_value (struct type *type, struct regcache *regcache,
 }
   
 static enum return_value_convention
-ia64_return_value (struct gdbarch *gdbarch, struct type *func_type,
+ia64_return_value (struct gdbarch *gdbarch, struct value *function,
 		   struct type *valtype, struct regcache *regcache,
 		   gdb_byte *readbuf, const gdb_byte *writebuf)
 {
diff --git a/gdb/ia64-tdep.h b/gdb/ia64-tdep.h
index 48cc3e0..66040e4 100644
--- a/gdb/ia64-tdep.h
+++ b/gdb/ia64-tdep.h
@@ -20,6 +20,11 @@
 #ifndef IA64_TDEP_H
 #define IA64_TDEP_H
 
+#ifdef HAVE_LIBUNWIND_IA64_H
+#include "libunwind-ia64.h"
+#include "ia64-libunwind-tdep.h"
+#endif
+
 /* Register numbers of various important registers.  */
 
 /* General registers; there are 128 of these 64 bit wide registers.
@@ -250,4 +255,10 @@ struct gdbarch_tdep
 
 extern void ia64_write_pc (struct regcache *, CORE_ADDR);
 
+#ifdef HAVE_LIBUNWIND_IA64_H
+extern unw_accessors_t ia64_unw_accessors;
+extern unw_accessors_t ia64_unw_rse_accessors;
+extern struct libunwind_descr ia64_libunwind_descr;
+#endif
+
 #endif /* ia64-tdep.h */
diff --git a/gdb/ia64-vms-tdep.c b/gdb/ia64-vms-tdep.c
new file mode 100644
index 0000000..09238fc
--- /dev/null
+++ b/gdb/ia64-vms-tdep.c
@@ -0,0 +1,165 @@
+/* Target-dependent code for OpenVMS IA-64.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "frame-unwind.h"
+#include "ia64-tdep.h"
+#include "osabi.h"
+#include "gdbtypes.h"
+#include "gdbcore.h"
+
+#ifdef HAVE_LIBUNWIND_IA64_H
+
+/* Libunwind callback accessor function to acquire procedure unwind-info.  */
+
+static int
+ia64_vms_find_proc_info_x (unw_addr_space_t as, unw_word_t ip,
+                           unw_proc_info_t *pi,
+                           int need_unwind_info, void *arg)
+{
+  enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
+  unw_dyn_info_t di;
+  int ret;
+  gdb_byte buf[32];
+  const char *annex = core_addr_to_string (ip);
+  LONGEST res;
+  CORE_ADDR table_addr;
+  unsigned int info_len;
+
+  res = target_read (&current_target, TARGET_OBJECT_OPENVMS_UIB,
+                     annex + 2, buf, 0, sizeof (buf));
+
+  if (res != sizeof (buf))
+    return -UNW_ENOINFO;
+
+  pi->format = UNW_INFO_FORMAT_REMOTE_TABLE;
+  pi->start_ip = extract_unsigned_integer (buf + 0, 8, byte_order);
+  pi->end_ip = extract_unsigned_integer (buf + 8, 8, byte_order);
+  pi->gp = extract_unsigned_integer (buf + 24, 8, byte_order);
+  table_addr = extract_unsigned_integer (buf + 16, 8, byte_order);
+
+  if (table_addr == 0)
+    {
+      /* No unwind data.  */
+      pi->unwind_info = NULL;
+      pi->unwind_info_size = 0;
+      return 0;
+    }
+
+  res = target_read_memory (table_addr, buf, 8);
+  if (res != 0)
+    return -UNW_ENOINFO;
+
+  /* Check version.  */
+  if (extract_unsigned_integer (buf + 6, 2, byte_order) != 1)
+    return -UNW_EBADVERSION;
+  info_len = extract_unsigned_integer (buf + 0, 4, byte_order);
+  pi->unwind_info_size = 8 * info_len;
+
+  /* Read info.  */
+  pi->unwind_info = xmalloc (pi->unwind_info_size);
+
+  res = target_read_memory (table_addr + 8,
+                            pi->unwind_info, pi->unwind_info_size);
+  if (res != 0)
+    {
+      xfree (pi->unwind_info);
+      pi->unwind_info = NULL;
+      return -UNW_ENOINFO;
+    }
+
+  /* FIXME: Handle OSSD (OS Specific Data).  This extension to ia64 unwind
+     information by OpenVMS is currently not handled by libunwind, but
+     looks to be used only in very specific context, and is not generated by
+     GCC.  */
+
+  pi->lsda = table_addr + 8 + pi->unwind_info_size;
+  if (extract_unsigned_integer (buf + 4, 2, byte_order) & 3)
+    {
+      pi->lsda += 8;
+      /* There might be an handler, but this is not used for unwinding.  */
+      pi->handler = 0;
+    }
+
+  return 0;
+}
+
+/* Libunwind callback accessor function for cleanup.  */
+
+static void
+ia64_vms_put_unwind_info (unw_addr_space_t as,
+                          unw_proc_info_t *pip, void *arg)
+{
+  /* Nothing required for now.  */
+}
+
+/* Libunwind callback accessor function to get head of the dynamic
+   unwind-info registration list.  */
+
+static int
+ia64_vms_get_dyn_info_list (unw_addr_space_t as,
+                            unw_word_t *dilap, void *arg)
+{
+  return -UNW_ENOINFO;
+}
+
+/* Set of libunwind callback acccessor functions.  */
+static unw_accessors_t ia64_vms_unw_accessors;
+static unw_accessors_t ia64_vms_unw_rse_accessors;
+
+/* Set of ia64-libunwind-tdep gdb callbacks and data for generic
+   ia64-libunwind-tdep code to use.  */
+static struct libunwind_descr ia64_vms_libunwind_descr;
+
+#endif /* HAVE_LIBUNWIND_IA64_H */
+
+static void
+ia64_openvms_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  set_gdbarch_long_double_format (gdbarch, floatformats_ia64_quad);
+
+#ifdef HAVE_LIBUNWIND_IA64_H
+  /* Override the default descriptor.  */
+  ia64_vms_unw_accessors = ia64_unw_accessors;
+  ia64_vms_unw_accessors.find_proc_info = ia64_vms_find_proc_info_x;
+  ia64_vms_unw_accessors.put_unwind_info = ia64_vms_put_unwind_info;
+  ia64_vms_unw_accessors.get_dyn_info_list_addr = ia64_vms_get_dyn_info_list;
+
+  ia64_vms_unw_rse_accessors = ia64_unw_rse_accessors;
+  ia64_vms_unw_rse_accessors.find_proc_info = ia64_vms_find_proc_info_x;
+  ia64_vms_unw_rse_accessors.put_unwind_info = ia64_vms_put_unwind_info;
+  ia64_vms_unw_rse_accessors.get_dyn_info_list_addr = ia64_vms_get_dyn_info_list;
+
+  ia64_vms_libunwind_descr = ia64_libunwind_descr;
+  ia64_vms_libunwind_descr.accessors = &ia64_vms_unw_accessors;
+  ia64_vms_libunwind_descr.special_accessors = &ia64_vms_unw_rse_accessors;
+
+  libunwind_frame_set_descr (gdbarch, &ia64_vms_libunwind_descr);
+#endif
+}
+
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_ia64_vms_tdep;
+
+void
+_initialize_ia64_vms_tdep (void)
+{
+  gdbarch_register_osabi (bfd_arch_ia64, 0, GDB_OSABI_OPENVMS,
+			  ia64_openvms_init_abi);
+}
diff --git a/gdb/inf-child.c b/gdb/inf-child.c
index c91a89b..ae2dd1e 100644
--- a/gdb/inf-child.c
+++ b/gdb/inf-child.c
@@ -26,7 +26,41 @@
 #include "target.h"
 #include "inferior.h"
 #include "gdb_string.h"
+#include "gdb_stat.h"
 #include "inf-child.h"
+#include "gdb/fileio.h"
+#include "agent.h"
+#include "gdb_wait.h"
+
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>		/* for MAXPATHLEN */
+#endif
+#include <sys/types.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+/* Helper function for child_wait and the derivatives of child_wait.
+   HOSTSTATUS is the waitstatus from wait() or the equivalent; store our
+   translation of that in OURSTATUS.  */
+void
+store_waitstatus (struct target_waitstatus *ourstatus, int hoststatus)
+{
+  if (WIFEXITED (hoststatus))
+    {
+      ourstatus->kind = TARGET_WAITKIND_EXITED;
+      ourstatus->value.integer = WEXITSTATUS (hoststatus);
+    }
+  else if (!WIFSTOPPED (hoststatus))
+    {
+      ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
+      ourstatus->value.sig = gdb_signal_from_host (WTERMSIG (hoststatus));
+    }
+  else
+    {
+      ourstatus->kind = TARGET_WAITKIND_STOPPED;
+      ourstatus->value.sig = gdb_signal_from_host (WSTOPSIG (hoststatus));
+    }
+}
 
 /* Fetch register REGNUM from the inferior.  If REGNUM is -1, do this
    for all registers.  */
@@ -108,6 +142,249 @@ inf_child_pid_to_exec_file (int pid)
   return NULL;
 }
 
+
+/* Target file operations.  */
+
+static int
+inf_child_fileio_open_flags_to_host (int fileio_open_flags, int *open_flags_p)
+{
+  int open_flags = 0;
+
+  if (fileio_open_flags & ~FILEIO_O_SUPPORTED)
+    return -1;
+
+  if (fileio_open_flags & FILEIO_O_CREAT)
+    open_flags |= O_CREAT;
+  if (fileio_open_flags & FILEIO_O_EXCL)
+    open_flags |= O_EXCL;
+  if (fileio_open_flags & FILEIO_O_TRUNC)
+    open_flags |= O_TRUNC;
+  if (fileio_open_flags & FILEIO_O_APPEND)
+    open_flags |= O_APPEND;
+  if (fileio_open_flags & FILEIO_O_RDONLY)
+    open_flags |= O_RDONLY;
+  if (fileio_open_flags & FILEIO_O_WRONLY)
+    open_flags |= O_WRONLY;
+  if (fileio_open_flags & FILEIO_O_RDWR)
+    open_flags |= O_RDWR;
+/* On systems supporting binary and text mode, always open files in
+   binary mode. */
+#ifdef O_BINARY
+  open_flags |= O_BINARY;
+#endif
+
+  *open_flags_p = open_flags;
+  return 0;
+}
+
+static int
+inf_child_errno_to_fileio_error (int errnum)
+{
+  switch (errnum)
+    {
+      case EPERM:
+        return FILEIO_EPERM;
+      case ENOENT:
+        return FILEIO_ENOENT;
+      case EINTR:
+        return FILEIO_EINTR;
+      case EIO:
+        return FILEIO_EIO;
+      case EBADF:
+        return FILEIO_EBADF;
+      case EACCES:
+        return FILEIO_EACCES;
+      case EFAULT:
+        return FILEIO_EFAULT;
+      case EBUSY:
+        return FILEIO_EBUSY;
+      case EEXIST:
+        return FILEIO_EEXIST;
+      case ENODEV:
+        return FILEIO_ENODEV;
+      case ENOTDIR:
+        return FILEIO_ENOTDIR;
+      case EISDIR:
+        return FILEIO_EISDIR;
+      case EINVAL:
+        return FILEIO_EINVAL;
+      case ENFILE:
+        return FILEIO_ENFILE;
+      case EMFILE:
+        return FILEIO_EMFILE;
+      case EFBIG:
+        return FILEIO_EFBIG;
+      case ENOSPC:
+        return FILEIO_ENOSPC;
+      case ESPIPE:
+        return FILEIO_ESPIPE;
+      case EROFS:
+        return FILEIO_EROFS;
+      case ENOSYS:
+        return FILEIO_ENOSYS;
+      case ENAMETOOLONG:
+        return FILEIO_ENAMETOOLONG;
+    }
+  return FILEIO_EUNKNOWN;
+}
+
+/* Open FILENAME on the target, using FLAGS and MODE.  Return a
+   target file descriptor, or -1 if an error occurs (and set
+   *TARGET_ERRNO).  */
+static int
+inf_child_fileio_open (const char *filename, int flags, int mode,
+		       int *target_errno)
+{
+  int nat_flags;
+  int fd;
+
+  if (inf_child_fileio_open_flags_to_host (flags, &nat_flags) == -1)
+    {
+      *target_errno = FILEIO_EINVAL;
+      return -1;
+    }
+
+  /* We do not need to convert MODE, since the fileio protocol uses
+     the standard values.  */
+  fd = open (filename, nat_flags, mode);
+  if (fd == -1)
+    *target_errno = inf_child_errno_to_fileio_error (errno);
+
+  return fd;
+}
+
+/* Write up to LEN bytes from WRITE_BUF to FD on the target.
+   Return the number of bytes written, or -1 if an error occurs
+   (and set *TARGET_ERRNO).  */
+static int
+inf_child_fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
+			 ULONGEST offset, int *target_errno)
+{
+  int ret;
+
+#ifdef HAVE_PWRITE
+  ret = pwrite (fd, write_buf, len, (long) offset);
+#else
+  ret = -1;
+#endif
+  /* If we have no pwrite or it failed for this file, use lseek/write.  */
+  if (ret == -1)
+    {
+      ret = lseek (fd, (long) offset, SEEK_SET);
+      if (ret != -1)
+	ret = write (fd, write_buf, len);
+    }
+
+  if (ret == -1)
+    *target_errno = inf_child_errno_to_fileio_error (errno);
+
+  return ret;
+}
+
+/* Read up to LEN bytes FD on the target into READ_BUF.
+   Return the number of bytes read, or -1 if an error occurs
+   (and set *TARGET_ERRNO).  */
+static int
+inf_child_fileio_pread (int fd, gdb_byte *read_buf, int len,
+			ULONGEST offset, int *target_errno)
+{
+  int ret;
+
+#ifdef HAVE_PREAD
+  ret = pread (fd, read_buf, len, (long) offset);
+#else
+  ret = -1;
+#endif
+  /* If we have no pread or it failed for this file, use lseek/read.  */
+  if (ret == -1)
+    {
+      ret = lseek (fd, (long) offset, SEEK_SET);
+      if (ret != -1)
+	ret = read (fd, read_buf, len);
+    }
+
+  if (ret == -1)
+    *target_errno = inf_child_errno_to_fileio_error (errno);
+
+  return ret;
+}
+
+/* Close FD on the target.  Return 0, or -1 if an error occurs
+   (and set *TARGET_ERRNO).  */
+static int
+inf_child_fileio_close (int fd, int *target_errno)
+{
+  int ret;
+
+  ret = close (fd);
+  if (ret == -1)
+    *target_errno = inf_child_errno_to_fileio_error (errno);
+
+  return ret;
+}
+
+/* Unlink FILENAME on the target.  Return 0, or -1 if an error
+   occurs (and set *TARGET_ERRNO).  */
+static int
+inf_child_fileio_unlink (const char *filename, int *target_errno)
+{
+  int ret;
+
+  ret = unlink (filename);
+  if (ret == -1)
+    *target_errno = inf_child_errno_to_fileio_error (errno);
+
+  return ret;
+}
+
+/* Read value of symbolic link FILENAME on the target.  Return a
+   null-terminated string allocated via xmalloc, or NULL if an error
+   occurs (and set *TARGET_ERRNO).  */
+static char *
+inf_child_fileio_readlink (const char *filename, int *target_errno)
+{
+  /* We support readlink only on systems that also provide a compile-time
+     maximum path length (MAXPATHLEN), at least for now.  */
+#if defined (HAVE_READLINK) && defined (MAXPATHLEN)
+  char buf[MAXPATHLEN];
+  int len;
+  char *ret;
+
+  len = readlink (filename, buf, sizeof buf);
+  if (len < 0)
+    {
+      *target_errno = inf_child_errno_to_fileio_error (errno);
+      return NULL;
+    }
+
+  ret = xmalloc (len + 1);
+  memcpy (ret, buf, len);
+  ret[len] = '\0';
+  return ret;
+#else
+  *target_errno = FILEIO_ENOSYS;
+  return NULL;
+#endif
+}
+
+static int
+inf_child_use_agent (int use)
+{
+  if (agent_loaded_p ())
+    {
+      use_agent = use;
+      return 1;
+    }
+  else
+    return 0;
+}
+
+static int
+inf_child_can_use_agent (void)
+{
+  return agent_loaded_p ();
+}
+
 struct target_ops *
 inf_child_target (void)
 {
@@ -139,6 +416,14 @@ inf_child_target (void)
   t->to_has_stack = default_child_has_stack;
   t->to_has_registers = default_child_has_registers;
   t->to_has_execution = default_child_has_execution;
+  t->to_fileio_open = inf_child_fileio_open;
+  t->to_fileio_pwrite = inf_child_fileio_pwrite;
+  t->to_fileio_pread = inf_child_fileio_pread;
+  t->to_fileio_close = inf_child_fileio_close;
+  t->to_fileio_unlink = inf_child_fileio_unlink;
+  t->to_fileio_readlink = inf_child_fileio_readlink;
   t->to_magic = OPS_MAGIC;
+  t->to_use_agent = inf_child_use_agent;
+  t->to_can_use_agent = inf_child_can_use_agent;
   return t;
 }
diff --git a/gdb/inf-child.h b/gdb/inf-child.h
index d32c8cb..c394d5a 100644
--- a/gdb/inf-child.h
+++ b/gdb/inf-child.h
@@ -25,4 +25,9 @@
 
 extern struct target_ops *inf_child_target (void);
 
+/* Functions for helping to write a native target.  */
+
+/* This is for native targets which use a unix/POSIX-style waitstatus.  */
+extern void store_waitstatus (struct target_waitstatus *, int);
+
 #endif
diff --git a/gdb/inf-loop.c b/gdb/inf-loop.c
index dd9e0d0..739785c 100644
--- a/gdb/inf-loop.c
+++ b/gdb/inf-loop.c
@@ -29,6 +29,7 @@
 #include "gdbthread.h"
 #include "continuations.h"
 #include "interps.h"
+#include "top.h"
 
 static int fetch_inferior_event_wrapper (gdb_client_data client_data);
 
@@ -106,10 +107,7 @@ inferior_event_handler (enum inferior_event_type event_type,
 	{
 	  volatile struct gdb_exception e;
 
-	  if (info_verbose
-	      && current_language != expected_language
-	      && language_mode == language_mode_auto)
-	    language_info (1);	/* Print what changed.  */
+	  check_frame_language_change ();
 
 	  /* Don't propagate breakpoint commands errors.  Either we're
 	     stopping or some command resumes the inferior.  The user will
diff --git a/gdb/inf-ptrace.c b/gdb/inf-ptrace.c
index aa6dcf4..e6729ac 100644
--- a/gdb/inf-ptrace.c
+++ b/gdb/inf-ptrace.c
@@ -250,7 +250,7 @@ inf_ptrace_attach (struct target_ops *ops, char *args, int from_tty)
 
 #ifdef PT_GET_PROCESS_STATE
 
-void
+static void
 inf_ptrace_post_attach (int pid)
 {
   ptrace_event_t pe;
@@ -342,7 +342,7 @@ inf_ptrace_stop (ptid_t ptid)
 
 static void
 inf_ptrace_resume (struct target_ops *ops,
-		   ptid_t ptid, int step, enum target_signal signal)
+		   ptid_t ptid, int step, enum gdb_signal signal)
 {
   pid_t pid = ptid_get_pid (ptid);
   int request;
@@ -371,7 +371,7 @@ inf_ptrace_resume (struct target_ops *ops,
      where it was.  If GDB wanted it to start some other way, we have
      already written a new program counter value to the child.  */
   errno = 0;
-  ptrace (request, pid, (PTRACE_TYPE_ARG3)1, target_signal_to_host (signal));
+  ptrace (request, pid, (PTRACE_TYPE_ARG3)1, gdb_signal_to_host (signal));
   if (errno != 0)
     perror_with_name (("ptrace"));
 }
@@ -408,7 +408,7 @@ inf_ptrace_wait (struct target_ops *ops,
 
 	  /* Claim it exited with unknown signal.  */
 	  ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
-	  ourstatus->value.sig = TARGET_SIGNAL_UNKNOWN;
+	  ourstatus->value.sig = GDB_SIGNAL_UNKNOWN;
 	  return inferior_ptid;
 	}
 
@@ -581,6 +581,26 @@ inf_ptrace_xfer_partial (struct target_ops *ops, enum target_object object,
       return -1;
 
     case TARGET_OBJECT_AUXV:
+#if defined (PT_IO) && defined (PIOD_READ_AUXV)
+      /* OpenBSD 4.5 has a new PIOD_READ_AUXV operation for the PT_IO
+	 request that allows us to read the auxilliary vector.  Other
+	 BSD's may follow if they feel the need to support PIE.  */
+      {
+	struct ptrace_io_desc piod;
+
+	if (writebuf)
+	  return -1;
+	piod.piod_op = PIOD_READ_AUXV;
+	piod.piod_addr = readbuf;
+	piod.piod_offs = (void *) (long) offset;
+	piod.piod_len = len;
+
+	errno = 0;
+	if (ptrace (PT_IO, pid, (caddr_t)&piod, 0) == 0)
+	  /* Return the actual number of bytes read or written.  */
+	  return piod.piod_len;
+      }
+#endif
       return -1;
 
     case TARGET_OBJECT_WCOOKIE:
@@ -618,6 +638,41 @@ inf_ptrace_pid_to_str (struct target_ops *ops, ptid_t ptid)
   return normal_pid_to_str (ptid);
 }
 
+#if defined (PT_IO) && defined (PIOD_READ_AUXV)
+
+/* Read one auxv entry from *READPTR, not reading locations >= ENDPTR.
+   Return 0 if *READPTR is already at the end of the buffer.
+   Return -1 if there is insufficient buffer for a whole entry.
+   Return 1 if an entry was read into *TYPEP and *VALP.  */
+
+static int
+inf_ptrace_auxv_parse (struct target_ops *ops, gdb_byte **readptr,
+		       gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp)
+{
+  struct type *int_type = builtin_type (target_gdbarch)->builtin_int;
+  struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
+  const int sizeof_auxv_type = TYPE_LENGTH (int_type);
+  const int sizeof_auxv_val = TYPE_LENGTH (ptr_type);
+  enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
+  gdb_byte *ptr = *readptr;
+
+  if (endptr == ptr)
+    return 0;
+
+  if (endptr - ptr < 2 * sizeof_auxv_val)
+    return -1;
+
+  *typep = extract_unsigned_integer (ptr, sizeof_auxv_type, byte_order);
+  ptr += sizeof_auxv_val;	/* Alignment.  */
+  *valp = extract_unsigned_integer (ptr, sizeof_auxv_val, byte_order);
+  ptr += sizeof_auxv_val;
+
+  *readptr = ptr;
+  return 1;
+}
+
+#endif
+
 /* Create a prototype ptrace target.  The client can override it with
    local methods.  */
 
@@ -643,6 +698,9 @@ inf_ptrace_target (void)
   t->to_pid_to_str = inf_ptrace_pid_to_str;
   t->to_stop = inf_ptrace_stop;
   t->to_xfer_partial = inf_ptrace_xfer_partial;
+#if defined (PT_IO) && defined (PIOD_READ_AUXV)
+  t->to_auxv_parse = inf_ptrace_auxv_parse;
+#endif
 
   return t;
 }
diff --git a/gdb/inf-ttrace.c b/gdb/inf-ttrace.c
index e82309d..2c620d5 100644
--- a/gdb/inf-ttrace.c
+++ b/gdb/inf-ttrace.c
@@ -904,11 +904,11 @@ inf_ttrace_resume_callback (struct thread_info *info, void *arg)
 
 static void
 inf_ttrace_resume (struct target_ops *ops,
-		   ptid_t ptid, int step, enum target_signal signal)
+		   ptid_t ptid, int step, enum gdb_signal signal)
 {
   int resume_all;
   ttreq_t request = step ? TT_LWP_SINGLE : TT_LWP_CONTINUE;
-  int sig = target_signal_to_host (signal);
+  int sig = gdb_signal_to_host (signal);
   struct thread_info *info;
 
   /* A specific PTID means `step only this process id'.  */
@@ -1010,7 +1010,7 @@ inf_ttrace_wait (struct target_ops *ops,
     case TTEVT_BPT_SSTEP:
       /* Make it look like a breakpoint.  */
       ourstatus->kind = TARGET_WAITKIND_STOPPED;
-      ourstatus->value.sig = TARGET_SIGNAL_TRAP;
+      ourstatus->value.sig = GDB_SIGNAL_TRAP;
       break;
 #endif
 
@@ -1126,7 +1126,7 @@ inf_ttrace_wait (struct target_ops *ops,
     case TTEVT_SIGNAL:
       ourstatus->kind = TARGET_WAITKIND_STOPPED;
       ourstatus->value.sig =
-	target_signal_from_host (tts.tts_u.tts_signal.tts_signo);
+	gdb_signal_from_host (tts.tts_u.tts_signal.tts_signo);
       break;
 
     case TTEVT_SYSCALL_ENTRY:
@@ -1324,7 +1324,7 @@ inf_ttrace_target (void)
 

 
 /* Prevent warning from -Wmissing-prototypes.  */
-void _initialize_hppa_hpux_nat (void);
+void _initialize_inf_ttrace (void);
 
 void
 _initialize_inf_ttrace (void)
diff --git a/gdb/infcall.c b/gdb/infcall.c
index 9af56ba..1b2c3d6 100644
--- a/gdb/infcall.c
+++ b/gdb/infcall.c
@@ -88,7 +88,7 @@ show_coerce_float_to_double_p (struct ui_file *file, int from_tty,
 
    The default is to stop in the frame where the signal was received.  */
 
-int unwind_on_signal_p = 0;
+static int unwind_on_signal_p = 0;
 static void
 show_unwind_on_signal_p (struct ui_file *file, int from_tty,
 			 struct cmd_list_element *c, const char *value)
@@ -159,7 +159,7 @@ value_arg_coerce (struct gdbarch *gdbarch, struct value *arg,
 	struct value *new_value;
 
 	if (TYPE_CODE (arg_type) == TYPE_CODE_REF)
-	  return value_cast_pointers (type, arg);
+	  return value_cast_pointers (type, arg, 0);
 
 	/* Cast the value to the reference's target type, and then
 	   convert it back to a reference.  This will issue an error
@@ -399,7 +399,7 @@ run_inferior_call (struct thread_info *call_thread, CORE_ADDR real_pc)
 
   TRY_CATCH (e, RETURN_MASK_ALL)
     {
-      proceed (real_pc, TARGET_SIGNAL_0, 0);
+      proceed (real_pc, GDB_SIGNAL_0, 0);
 
       /* Inferior function calls are always synchronous, even if the
 	 target supports asynchronous execution.  Do here what
@@ -464,7 +464,7 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
 {
   CORE_ADDR sp;
   struct type *values_type, *target_values_type;
-  unsigned char struct_return = 0, lang_struct_return = 0;
+  unsigned char struct_return = 0, hidden_first_param_p = 0;
   CORE_ADDR struct_addr = 0;
   struct infcall_control_state *inf_status;
   struct cleanup *inf_status_cleanup;
@@ -598,9 +598,9 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
      the first argument is passed in out0 but the hidden structure
      return pointer would normally be passed in r8.  */
 
-  if (language_pass_by_reference (values_type))
+  if (gdbarch_return_in_first_hidden_param_p (gdbarch, values_type))
     {
-      lang_struct_return = 1;
+      hidden_first_param_p = 1;
 
       /* Tell the target specific argument pushing routine not to
 	 expect a value.  */
@@ -608,8 +608,7 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
     }
   else
     {
-      struct_return = using_struct_return (gdbarch,
-					   value_type (function), values_type);
+      struct_return = using_struct_return (gdbarch, function, values_type);
       target_values_type = values_type;
     }
 
@@ -619,15 +618,38 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
      not just the breakpoint but also an extra word containing the
      size (?) of the structure being passed.  */
 
-  /* The actual breakpoint (at BP_ADDR) is inserted separatly so there
-     is no need to write that out.  */
-
   switch (gdbarch_call_dummy_location (gdbarch))
     {
     case ON_STACK:
-      sp = push_dummy_code (gdbarch, sp, funaddr,
-				args, nargs, target_values_type,
-				&real_pc, &bp_addr, get_current_regcache ());
+      {
+	const gdb_byte *bp_bytes;
+	CORE_ADDR bp_addr_as_address;
+	int bp_size;
+
+	/* Be careful BP_ADDR is in inferior PC encoding while
+	   BP_ADDR_AS_ADDRESS is a plain memory address.  */
+
+	sp = push_dummy_code (gdbarch, sp, funaddr, args, nargs,
+			      target_values_type, &real_pc, &bp_addr,
+			      get_current_regcache ());
+
+	/* Write a legitimate instruction at the point where the infcall
+	   breakpoint is going to be inserted.  While this instruction
+	   is never going to be executed, a user investigating the
+	   memory from GDB would see this instruction instead of random
+	   uninitialized bytes.  We chose the breakpoint instruction
+	   as it may look as the most logical one to the user and also
+	   valgrind 3.7.0 needs it for proper vgdb inferior calls.
+
+	   If software breakpoints are unsupported for this target we
+	   leave the user visible memory content uninitialized.  */
+
+	bp_addr_as_address = bp_addr;
+	bp_bytes = gdbarch_breakpoint_from_pc (gdbarch, &bp_addr_as_address,
+					       &bp_size);
+	if (bp_bytes != NULL)
+	  write_memory (bp_addr_as_address, bp_bytes, bp_size);
+      }
       break;
     case AT_ENTRY_POINT:
       {
@@ -635,35 +657,12 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
 
 	real_pc = funaddr;
 	dummy_addr = entry_point_address ();
+
 	/* A call dummy always consists of just a single breakpoint, so
-	   its address is the same as the address of the dummy.  */
-	bp_addr = dummy_addr;
-	break;
-      }
-    case AT_SYMBOL:
-      /* Some executables define a symbol __CALL_DUMMY_ADDRESS whose
-	 address is the location where the breakpoint should be
-	 placed.  Once all targets are using the overhauled frame code
-	 this can be deleted - ON_STACK is a better option.  */
-      {
-	struct minimal_symbol *sym;
-	CORE_ADDR dummy_addr;
+	   its address is the same as the address of the dummy.
 
-	sym = lookup_minimal_symbol ("__CALL_DUMMY_ADDRESS", NULL, NULL);
-	real_pc = funaddr;
-	if (sym)
-	  {
-	    dummy_addr = SYMBOL_VALUE_ADDRESS (sym);
-	    /* Make certain that the address points at real code, and not
-	       a function descriptor.  */
-	    dummy_addr = gdbarch_convert_from_func_ptr_addr (gdbarch,
-							     dummy_addr,
-							     &current_target);
-	  }
-	else
-	  dummy_addr = entry_point_address ();
-	/* A call dummy always consists of just a single breakpoint,
-	   so it's address is the same as the address of the dummy.  */
+	   The actual breakpoint is inserted separatly so there is no need to
+	   write that out.  */
 	bp_addr = dummy_addr;
 	break;
       }
@@ -708,7 +707,7 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
      stack, if necessary.  Make certain that the value is correctly
      aligned.  */
 
-  if (struct_return || lang_struct_return)
+  if (struct_return || hidden_first_param_p)
     {
       int len = TYPE_LENGTH (values_type);
 
@@ -734,7 +733,7 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
 	}
     }
 
-  if (lang_struct_return)
+  if (hidden_first_param_p)
     {
       struct value **new_args;
 
@@ -772,7 +771,7 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
      inferior.  That way it breaks when it returns.  */
 
   {
-    struct breakpoint *bpt;
+    struct breakpoint *bpt, *longjmp_b;
     struct symtab_and_line sal;
 
     init_sal (&sal);		/* initialize to zeroes */
@@ -783,7 +782,22 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
        PUSH_DUMMY_CALL, saved as the dummy-frame TOS, and used by
        dummy_id to form the frame ID's stack address.  */
     bpt = set_momentary_breakpoint (gdbarch, sal, dummy_id, bp_call_dummy);
+
+    /* set_momentary_breakpoint invalidates FRAME.  */
+    frame = NULL;
+
     bpt->disposition = disp_del;
+    gdb_assert (bpt->related_breakpoint == bpt);
+
+    longjmp_b = set_longjmp_breakpoint_for_call_dummy ();
+    if (longjmp_b)
+      {
+	/* Link BPT into the chain of LONGJMP_B.  */
+	bpt->related_breakpoint = longjmp_b;
+	while (longjmp_b->related_breakpoint != bpt->related_breakpoint)
+	  longjmp_b = longjmp_b->related_breakpoint;
+	longjmp_b->related_breakpoint = bpt;
+      }
   }
 
   /* Create a breakpoint in std::terminate.
@@ -1036,7 +1050,7 @@ When the function is done executing, GDB will silently stop."),
     /* Figure out the value returned by the function.  */
     retval = allocate_value (values_type);
 
-    if (lang_struct_return)
+    if (hidden_first_param_p)
       read_value_memory (retval, 0, 1, struct_addr,
 			 value_contents_raw (retval),
 			 TYPE_LENGTH (values_type));
@@ -1044,13 +1058,13 @@ When the function is done executing, GDB will silently stop."),
       {
 	/* If the function returns void, don't bother fetching the
 	   return value.  */
-	switch (gdbarch_return_value (gdbarch, value_type (function),
-				      target_values_type, NULL, NULL, NULL))
+	switch (gdbarch_return_value (gdbarch, function, target_values_type,
+				      NULL, NULL, NULL))
 	  {
 	  case RETURN_VALUE_REGISTER_CONVENTION:
 	  case RETURN_VALUE_ABI_RETURNS_ADDRESS:
 	  case RETURN_VALUE_ABI_PRESERVES_ADDRESS:
-	    gdbarch_return_value (gdbarch, value_type (function), values_type,
+	    gdbarch_return_value (gdbarch, function, values_type,
 				  retbuf, value_contents_raw (retval), NULL);
 	    break;
 	  case RETURN_VALUE_STRUCT_CONVENTION:
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index 4b31c98..475ac90 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -75,7 +75,7 @@ void interrupt_target_command (char *args, int from_tty);
 
 static void nofp_registers_info (char *, int);
 
-static void print_return_value (struct type *func_type,
+static void print_return_value (struct value *function,
 				struct type *value_type);
 
 static void until_next_command (int);
@@ -275,10 +275,18 @@ construct_inferior_arguments (int argc, char **argv)
 
   if (STARTUP_WITH_SHELL)
     {
+#ifdef __MINGW32__
+      /* This holds all the characters considered special to the
+	 Windows shells.  */
+      char *special = "\"!&*|[]{}<>?`~^=;, \t\n";
+      const char quote = '"';
+#else
       /* This holds all the characters considered special to the
 	 typical Unix shells.  We include `^' because the SunOS
 	 /bin/sh treats it as a synonym for `|'.  */
-      char *special = "\"!#$&*()\\|[]{}<>?'\"`~^; \t\n";
+      char *special = "\"!#$&*()\\|[]{}<>?'`~^; \t\n";
+      const char quote = '\'';
+#endif
       int i;
       int length = 0;
       char *out, *cp;
@@ -298,11 +306,20 @@ construct_inferior_arguments (int argc, char **argv)
 	  /* Need to handle empty arguments specially.  */
 	  if (argv[i][0] == '\0')
 	    {
-	      *out++ = '\'';
-	      *out++ = '\'';
+	      *out++ = quote;
+	      *out++ = quote;
 	    }
 	  else
 	    {
+#ifdef __MINGW32__
+	      int quoted = 0;
+
+	      if (strpbrk (argv[i], special))
+		{
+		  quoted = 1;
+		  *out++ = quote;
+		}
+#endif
 	      for (cp = argv[i]; *cp; ++cp)
 		{
 		  if (*cp == '\n')
@@ -310,17 +327,25 @@ construct_inferior_arguments (int argc, char **argv)
 		      /* A newline cannot be quoted with a backslash (it
 			 just disappears), only by putting it inside
 			 quotes.  */
-		      *out++ = '\'';
+		      *out++ = quote;
 		      *out++ = '\n';
-		      *out++ = '\'';
+		      *out++ = quote;
 		    }
 		  else
 		    {
+#ifdef __MINGW32__
+		      if (*cp == quote)
+#else
 		      if (strchr (special, *cp) != NULL)
+#endif
 			*out++ = '\\';
 		      *out++ = *cp;
 		    }
 		}
+#ifdef __MINGW32__
+	      if (quoted)
+		*out++ = quote;
+#endif
 	    }
 	}
       *out = '\0';
@@ -607,7 +632,7 @@ run_command_1 (char *args, int from_tty, int tbreak_at_main)
 
   /* Start the target running.  Do not use -1 continuation as it would skip
      breakpoint right at the entry point.  */
-  proceed (regcache_read_pc (get_current_regcache ()), TARGET_SIGNAL_0, 0);
+  proceed (regcache_read_pc (get_current_regcache ()), GDB_SIGNAL_0, 0);
 
   /* Since there was no error, there's no need to finish the thread
      states here.  */
@@ -660,11 +685,11 @@ proceed_thread_callback (struct thread_info *thread, void *arg)
 
   switch_to_thread (thread->ptid);
   clear_proceed_status ();
-  proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
+  proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 0);
   return 0;
 }
 
-void
+static void
 ensure_valid_thread (void)
 {
   if (ptid_equal (inferior_ptid, null_ptid)
@@ -676,7 +701,7 @@ ensure_valid_thread (void)
    is likely to mix up recorded and live target data.  So simply
    disallow those commands.  */
 
-void
+static void
 ensure_not_tfind_mode (void)
 {
   if (get_traceframe_number () >= 0)
@@ -708,7 +733,7 @@ continue_1 (int all_threads)
       ensure_valid_thread ();
       ensure_not_running ();
       clear_proceed_status ();
-      proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
+      proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 0);
     }
 }
 
@@ -1036,7 +1061,7 @@ step_once (int skip_subroutines, int single_inst, int count, int thread)
 	    tp->control.step_range_start = tp->control.step_range_end = 1;
 	  else if (tp->control.step_range_end == 0)
 	    {
-	      char *name;
+	      const char *name;
 
 	      if (find_pc_partial_function (pc, &name,
 					    &tp->control.step_range_start,
@@ -1064,7 +1089,7 @@ step_once (int skip_subroutines, int single_inst, int count, int thread)
 	tp->control.step_over_calls = STEP_OVER_ALL;
 
       tp->step_multi = (count > 1);
-      proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
+      proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 1);
 
       /* For async targets, register a continuation to do any
 	 additional steps.  For sync targets, the caller will handle
@@ -1115,7 +1140,7 @@ jump_command (char *arg, int from_tty)
   if (!arg)
     error_no_arg (_("starting address"));
 
-  sals = decode_line_spec_1 (arg, DECODE_LINE_FUNFIRSTLINE);
+  sals = decode_line_with_last_displayed (arg, DECODE_LINE_FUNFIRSTLINE);
   if (sals.nelts != 1)
     {
       error (_("Unreasonable jump request"));
@@ -1175,7 +1200,7 @@ jump_command (char *arg, int from_tty)
     }
 
   clear_proceed_status ();
-  proceed (addr, TARGET_SIGNAL_0, 0);
+  proceed (addr, GDB_SIGNAL_0, 0);
 }
 

 
@@ -1198,7 +1223,7 @@ go_command (char *line_no, int from_tty)
 static void
 signal_command (char *signum_exp, int from_tty)
 {
-  enum target_signal oursig;
+  enum gdb_signal oursig;
   int async_exec = 0;
 
   dont_repeat ();		/* Too dangerous.  */
@@ -1230,26 +1255,26 @@ signal_command (char *signum_exp, int from_tty)
   /* It would be even slicker to make signal names be valid expressions,
      (the type could be "enum $signal" or some such), then the user could
      assign them to convenience variables.  */
-  oursig = target_signal_from_name (signum_exp);
+  oursig = gdb_signal_from_name (signum_exp);
 
-  if (oursig == TARGET_SIGNAL_UNKNOWN)
+  if (oursig == GDB_SIGNAL_UNKNOWN)
     {
       /* No, try numeric.  */
       int num = parse_and_eval_long (signum_exp);
 
       if (num == 0)
-	oursig = TARGET_SIGNAL_0;
+	oursig = GDB_SIGNAL_0;
       else
-	oursig = target_signal_from_command (num);
+	oursig = gdb_signal_from_command (num);
     }
 
   if (from_tty)
     {
-      if (oursig == TARGET_SIGNAL_0)
+      if (oursig == GDB_SIGNAL_0)
 	printf_filtered (_("Continuing with no signal.\n"));
       else
 	printf_filtered (_("Continuing with signal %s.\n"),
-			 target_signal_to_name (oursig));
+			 gdb_signal_to_name (oursig));
     }
 
   clear_proceed_status ();
@@ -1330,7 +1355,7 @@ until_next_command (int from_tty)
   set_longjmp_breakpoint (tp, get_frame_id (frame));
   old_chain = make_cleanup (delete_longjmp_breakpoint_cleanup, &thread);
 
-  proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
+  proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 1);
 
   if (target_can_async_p () && is_running (inferior_ptid))
     {
@@ -1416,7 +1441,7 @@ advance_command (char *arg, int from_tty)
    command/BP.  */
 
 struct value *
-get_return_value (struct type *func_type, struct type *value_type)
+get_return_value (struct value *function, struct type *value_type)
 {
   struct regcache *stop_regs = stop_registers;
   struct gdbarch *gdbarch;
@@ -1443,14 +1468,14 @@ get_return_value (struct type *func_type, struct type *value_type)
      inferior function call code.  In fact, when inferior function
      calls are made async, this will likely be made the norm.  */
 
-  switch (gdbarch_return_value (gdbarch, func_type, value_type,
+  switch (gdbarch_return_value (gdbarch, function, value_type,
   				NULL, NULL, NULL))
     {
     case RETURN_VALUE_REGISTER_CONVENTION:
     case RETURN_VALUE_ABI_RETURNS_ADDRESS:
     case RETURN_VALUE_ABI_PRESERVES_ADDRESS:
       value = allocate_value (value_type);
-      gdbarch_return_value (gdbarch, func_type, value_type, stop_regs,
+      gdbarch_return_value (gdbarch, function, value_type, stop_regs,
 			    value_contents_raw (value), NULL);
       break;
     case RETURN_VALUE_STRUCT_CONVENTION:
@@ -1468,26 +1493,26 @@ get_return_value (struct type *func_type, struct type *value_type)
 /* Print the result of a function at the end of a 'finish' command.  */
 
 static void
-print_return_value (struct type *func_type, struct type *value_type)
+print_return_value (struct value *function, struct type *value_type)
 {
-  struct value *value = get_return_value (func_type, value_type);
-  struct cleanup *old_chain;
-  struct ui_stream *stb;
+  struct value *value = get_return_value (function, value_type);
   struct ui_out *uiout = current_uiout;
 
   if (value)
     {
       struct value_print_options opts;
+      struct ui_file *stb;
+      struct cleanup *old_chain;
 
       /* Print it.  */
-      stb = ui_out_stream_new (uiout);
-      old_chain = make_cleanup_ui_out_stream_delete (stb);
+      stb = mem_fileopen ();
+      old_chain = make_cleanup_ui_file_delete (stb);
       ui_out_text (uiout, "Value returned is ");
       ui_out_field_fmt (uiout, "gdb-result-var", "$%d",
 			record_latest_value (value));
       ui_out_text (uiout, " = ");
       get_raw_print_options (&opts);
-      value_print (value, stb->stream, &opts);
+      value_print (value, stb, &opts);
       ui_out_field_stream (uiout, "return-value", stb);
       ui_out_text (uiout, "\n");
       do_cleanups (old_chain);
@@ -1548,13 +1573,15 @@ finish_command_continuation (void *arg, int err)
 	  if (TYPE_CODE (value_type) != TYPE_CODE_VOID)
 	    {
 	      volatile struct gdb_exception ex;
+	      struct value *func;
 
+	      func = read_var_value (a->function, get_current_frame ());
 	      TRY_CATCH (ex, RETURN_MASK_ALL)
 		{
 		  /* print_return_value can throw an exception in some
 		     circumstances.  We need to catch this so that we still
 		     delete the breakpoint.  */
-		  print_return_value (SYMBOL_TYPE (a->function), value_type);
+		  print_return_value (func, value_type);
 		}
 	      if (ex.reason < 0)
 		exception_print (gdb_stdout, ex);
@@ -1620,14 +1647,14 @@ finish_backward (struct symbol *function)
       insert_step_resume_breakpoint_at_sal (gdbarch,
 					    sr_sal, null_frame_id);
 
-      proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
+      proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 0);
     }
   else
     {
       /* We're almost there -- we just need to back up by one more
 	 single-step.  */
       tp->control.step_range_start = tp->control.step_range_end = 1;
-      proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
+      proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 1);
     }
 }
 
@@ -1652,6 +1679,9 @@ finish_forward (struct symbol *function, struct frame_info *frame)
 					 get_stack_frame_id (frame),
                                          bp_finish);
 
+  /* set_momentary_breakpoint invalidates FRAME.  */
+  frame = NULL;
+
   old_chain = make_cleanup_delete_breakpoint (breakpoint);
 
   set_longjmp_breakpoint (tp, frame_id);
@@ -1666,7 +1696,7 @@ finish_forward (struct symbol *function, struct frame_info *frame)
   cargs->function = function;
   add_continuation (tp, finish_command_continuation, cargs,
                     finish_command_continuation_free_arg);
-  proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
+  proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 0);
 
   discard_cleanups (old_chain);
   if (!target_can_async_p ())
@@ -1743,7 +1773,7 @@ finish_command (char *arg, int from_tty)
 	  print_stack_frame (get_selected_frame (NULL), 1, LOCATION);
 	}
 
-      proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
+      proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 1);
       return;
     }
 
@@ -1823,11 +1853,11 @@ program_info (char *args, int from_tty)
 	  stat = bpstat_num (&bs, &num);
 	}
     }
-  else if (tp->suspend.stop_signal != TARGET_SIGNAL_0)
+  else if (tp->suspend.stop_signal != GDB_SIGNAL_0)
     {
       printf_filtered (_("It stopped with signal %s, %s.\n"),
-		       target_signal_to_name (tp->suspend.stop_signal),
-		       target_signal_to_string (tp->suspend.stop_signal));
+		       gdb_signal_to_name (tp->suspend.stop_signal),
+		       gdb_signal_to_string (tp->suspend.stop_signal));
     }
 
   if (!from_tty)
@@ -2171,7 +2201,7 @@ registers_info (char *addr_exp, int fpregs)
 		struct value_print_options opts;
 		struct value *val = value_of_user_reg (regnum, frame);
 
-		printf_filtered ("%s: ", start);
+		printf_filtered ("%.*s: ", (int) (end - start), start);
 		get_formatted_print_options (&opts, 'x');
 		val_print_scalar_formatted (check_typedef (value_type (val)),
 					    value_contents_for_printing (val),
@@ -2309,7 +2339,7 @@ kill_command (char *arg, int from_tty)
 /* Used in `attach&' command.  ARG is a point to an integer
    representing a process id.  Proceed threads of this process iff
    they stopped due to debugger request, and when they did, they
-   reported a clean stop (TARGET_SIGNAL_0).  Do not proceed threads
+   reported a clean stop (GDB_SIGNAL_0).  Do not proceed threads
    that have been explicitly been told to stop.  */
 
 static int
@@ -2322,11 +2352,11 @@ proceed_after_attach_callback (struct thread_info *thread,
       && !is_exited (thread->ptid)
       && !is_executing (thread->ptid)
       && !thread->stop_requested
-      && thread->suspend.stop_signal == TARGET_SIGNAL_0)
+      && thread->suspend.stop_signal == GDB_SIGNAL_0)
     {
       switch_to_thread (thread->ptid);
       clear_proceed_status ();
-      proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
+      proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 0);
     }
 
   return 0;
@@ -2423,10 +2453,10 @@ attach_command_post_wait (char *args, int from_tty, int async_exec)
 	proceed_after_attach (inferior->pid);
       else
 	{
-	  if (inferior_thread ()->suspend.stop_signal == TARGET_SIGNAL_0)
+	  if (inferior_thread ()->suspend.stop_signal == GDB_SIGNAL_0)
 	    {
 	      clear_proceed_status ();
-	      proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
+	      proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 0);
 	    }
 	}
     }
@@ -2607,7 +2637,7 @@ notice_new_inferior (ptid_t ptid, int leave_running, int from_tty)
 
   /* If in non-stop, leave threads as running as they were.  If
      they're stopped for some reason other than us telling it to, the
-     target reports a signal != TARGET_SIGNAL_0.  We don't try to
+     target reports a signal != GDB_SIGNAL_0.  We don't try to
      resume threads with such a stop signal.  */
   async_exec = non_stop;
 
@@ -2806,9 +2836,87 @@ unset_command (char *args, int from_tty)
   help_list (unsetlist, "unset ", -1, gdb_stdout);
 }
 
+/* Implement `info proc' family of commands.  */
+
+static void
+info_proc_cmd_1 (char *args, enum info_proc_what what, int from_tty)
+{
+  struct gdbarch *gdbarch = get_current_arch ();
+
+  if (gdbarch_info_proc_p (gdbarch))
+    gdbarch_info_proc (gdbarch, args, what);
+  else
+    target_info_proc (args, what);
+}
+
+/* Implement `info proc' when given without any futher parameters.  */
+
+static void
+info_proc_cmd (char *args, int from_tty)
+{
+  info_proc_cmd_1 (args, IP_MINIMAL, from_tty);
+}
+
+/* Implement `info proc mappings'.  */
+
+static void
+info_proc_cmd_mappings (char *args, int from_tty)
+{
+  info_proc_cmd_1 (args, IP_MAPPINGS, from_tty);
+}
+
+/* Implement `info proc stat'.  */
+
+static void
+info_proc_cmd_stat (char *args, int from_tty)
+{
+  info_proc_cmd_1 (args, IP_STAT, from_tty);
+}
+
+/* Implement `info proc status'.  */
+
+static void
+info_proc_cmd_status (char *args, int from_tty)
+{
+  info_proc_cmd_1 (args, IP_STATUS, from_tty);
+}
+
+/* Implement `info proc cwd'.  */
+
+static void
+info_proc_cmd_cwd (char *args, int from_tty)
+{
+  info_proc_cmd_1 (args, IP_CWD, from_tty);
+}
+
+/* Implement `info proc cmdline'.  */
+
+static void
+info_proc_cmd_cmdline (char *args, int from_tty)
+{
+  info_proc_cmd_1 (args, IP_CMDLINE, from_tty);
+}
+
+/* Implement `info proc exe'.  */
+
+static void
+info_proc_cmd_exe (char *args, int from_tty)
+{
+  info_proc_cmd_1 (args, IP_EXE, from_tty);
+}
+
+/* Implement `info proc all'.  */
+
+static void
+info_proc_cmd_all (char *args, int from_tty)
+{
+  info_proc_cmd_1 (args, IP_ALL, from_tty);
+}
+
 void
 _initialize_infcmd (void)
 {
+  static struct cmd_list_element *info_proc_cmdlist;
   struct cmd_list_element *c = NULL;
 
   /* Add the filename of the terminal connected to inferior I/O.  */
@@ -3035,4 +3143,39 @@ Register name as argument means describe only that register."));
 
   add_info ("vector", vector_info,
 	    _("Print the status of the vector unit\n"));
+
+  add_prefix_cmd ("proc", class_info, info_proc_cmd,
+		  _("\
+Show /proc process information about any running process.\n\
+Specify any process id, or use the program being debugged by default."),
+		  &info_proc_cmdlist, "info proc ",
+		  1/*allow-unknown*/, &infolist);
+
+  add_cmd ("mappings", class_info, info_proc_cmd_mappings, _("\
+List of mapped memory regions."),
+	   &info_proc_cmdlist);
+
+  add_cmd ("stat", class_info, info_proc_cmd_stat, _("\
+List process info from /proc/PID/stat."),
+	   &info_proc_cmdlist);
+
+  add_cmd ("status", class_info, info_proc_cmd_status, _("\
+List process info from /proc/PID/status."),
+	   &info_proc_cmdlist);
+
+  add_cmd ("cwd", class_info, info_proc_cmd_cwd, _("\
+List current working directory of the process."),
+	   &info_proc_cmdlist);
+
+  add_cmd ("cmdline", class_info, info_proc_cmd_cmdline, _("\
+List command line arguments of the process."),
+	   &info_proc_cmdlist);
+
+  add_cmd ("exe", class_info, info_proc_cmd_exe, _("\
+List absolute filename for executable of the process."),
+	   &info_proc_cmdlist);
+
+  add_cmd ("all", class_info, info_proc_cmd_all, _("\
+List all available /proc info."),
+	   &info_proc_cmdlist);
 }
diff --git a/gdb/inferior.c b/gdb/inferior.c
index 65948c4..805acb4 100644
--- a/gdb/inferior.c
+++ b/gdb/inferior.c
@@ -22,6 +22,7 @@
 #include "inferior.h"
 #include "target.h"
 #include "command.h"
+#include "completer.h"
 #include "gdbcmd.h"
 #include "gdbthread.h"
 #include "ui-out.h"
@@ -178,25 +179,6 @@ delete_thread_of_inferior (struct thread_info *tp, void *data)
   return 0;
 }
 
-void
-delete_threads_of_inferior (int pid)
-{
-  struct inferior *inf;
-  struct delete_thread_of_inferior_arg arg;
-
-  for (inf = inferior_list; inf; inf = inf->next)
-    if (inf->pid == pid)
-      break;
-
-  if (!inf)
-    return;
-
-  arg.pid = pid;
-  arg.silent = 1;
-
-  iterate_over_threads (delete_thread_of_inferior, &arg);
-}
-
 /* If SILENT then be quiet -- don't announce a inferior death, or the
    exit of its threads.  */
 
@@ -276,6 +258,7 @@ exit_inferior_1 (struct inferior *inftoex, int silent)
   observer_notify_inferior_exit (inf);
 
   inf->pid = 0;
+  inf->fake_pid_p = 0;
   if (inf->vfork_parent != NULL)
     {
       inf->vfork_parent->vfork_child = NULL;
@@ -525,6 +508,18 @@ number_of_inferiors (void)
   return count;
 }
 
+/* Converts an inferior process id to a string.  Like
+   target_pid_to_str, but special cases the null process.  */
+
+static char *
+inferior_pid_to_str (int pid)
+{
+  if (pid != 0)
+    return target_pid_to_str (pid_to_ptid (pid));
+  else
+    return _("<null>");
+}
+
 /* Prints the list of inferiors and their details on UIOUT.  This is a
    version of 'info_inferior_command' suitable for use from MI.
 
@@ -578,11 +573,8 @@ print_inferior (struct ui_out *uiout, char *requested_inferiors)
 
       ui_out_field_int (uiout, "number", inf->num);
 
-      if (inf->pid)
-	ui_out_field_string (uiout, "target-id",
-			     target_pid_to_str (pid_to_ptid (inf->pid)));
-      else
-	ui_out_field_string (uiout, "target-id", "<null>");
+      ui_out_field_string (uiout, "target-id",
+			   inferior_pid_to_str (inf->pid));
 
       if (inf->pspace->ebfd)
 	ui_out_field_string (uiout, "exec",
@@ -699,7 +691,7 @@ inferior_command (char *args, int from_tty)
 
   printf_filtered (_("[Switching to inferior %d [%s] (%s)]\n"),
 		   inf->num,
-		   target_pid_to_str (pid_to_ptid (inf->pid)),
+		   inferior_pid_to_str (inf->pid),
 		   (inf->pspace->ebfd
 		    ? bfd_get_filename (inf->pspace->ebfd)
 		    : _("<noexec>")));
@@ -750,7 +742,7 @@ info_inferiors_command (char *args, int from_tty)
 
 /* remove-inferior ID */
 
-void
+static void
 remove_inferior_command (char *args, int from_tty)
 {
   int num;
@@ -809,7 +801,7 @@ add_inferior_with_spaces (void)
 
 /* add-inferior [-copies N] [-exec FILENAME]  */
 
-void
+static void
 add_inferior_command (char *args, int from_tty)
 {
   int i, copies = 1;
@@ -872,7 +864,7 @@ add_inferior_command (char *args, int from_tty)
 
 /* clone-inferior [-copies N] [ID] */
 
-void
+static void
 clone_inferior_command (char *args, int from_tty)
 {
   int i, copies = 1;
@@ -1065,6 +1057,8 @@ inferior_data (struct inferior *inf, const struct inferior_data *data)
 void
 initialize_inferiors (void)
 {
+  struct cmd_list_element *c = NULL;
+
   /* There's always one inferior.  Note that this function isn't an
      automatic _initialize_foo function, since other _initialize_foo
      routines may need to install their per-inferior data keys.  We
@@ -1078,12 +1072,13 @@ initialize_inferiors (void)
   add_info ("inferiors", info_inferiors_command, 
 	    _("IDs of specified inferiors (all inferiors if no argument)."));
 
-  add_com ("add-inferior", no_class, add_inferior_command, _("\
+  c = add_com ("add-inferior", no_class, add_inferior_command, _("\
 Add a new inferior.\n\
 Usage: add-inferior [-copies <N>] [-exec <FILENAME>]\n\
 N is the optional number of inferiors to add, default is 1.\n\
 FILENAME is the file name of the executable to use\n\
 as main program."));
+  set_cmd_completer (c, filename_completer);
 
   add_com ("remove-inferiors", no_class, remove_inferior_command, _("\
 Remove inferior ID (or list of IDs).\n\
diff --git a/gdb/inferior.h b/gdb/inferior.h
index f9b3656..3945962 100644
--- a/gdb/inferior.h
+++ b/gdb/inferior.h
@@ -36,7 +36,7 @@ struct terminal_info;
 /* For bpstat.  */
 #include "breakpoint.h"
 
-/* For enum target_signal.  */
+/* For enum gdb_signal.  */
 #include "target.h"
 
 /* For struct frame_id.  */
@@ -102,7 +102,7 @@ extern int sync_execution;
 
 extern void clear_proceed_status (void);
 
-extern void proceed (CORE_ADDR, enum target_signal, int);
+extern void proceed (CORE_ADDR, enum gdb_signal, int);
 
 extern int sched_multi;
 
@@ -154,14 +154,12 @@ extern void fetch_inferior_event (void *);
 
 extern void init_wait_for_inferior (void);
 
-extern void close_exec_file (void);
-
 extern void reopen_exec_file (void);
 
 /* The `resume' routine should only be called in special circumstances.
    Normally, use `proceed', which handles a lot of bookkeeping.  */
 
-extern void resume (int, enum target_signal);
+extern void resume (int, enum gdb_signal);
 
 extern ptid_t user_visible_resume_ptid (int step);
 
@@ -248,6 +246,8 @@ extern void set_inferior_args (char *);
 
 extern void set_inferior_args_vector (int, char **);
 
+extern void all_registers_info (char *, int);
+
 extern void registers_info (char *, int);
 
 extern void nexti_command (char *, int);
@@ -268,7 +268,7 @@ extern void detach_command (char *, int);
 
 extern void notice_new_inferior (ptid_t, int, int);
 
-extern struct value *get_return_value (struct type *func_type,
+extern struct value *get_return_value (struct value *function,
                                        struct type *value_type);
 
 /* Address at which inferior stopped.  */
@@ -359,7 +359,6 @@ struct displaced_step_closure *get_displaced_step_closure_by_addr (CORE_ADDR add
 /* Possible values for gdbarch_call_dummy_location.  */
 #define ON_STACK 1
 #define AT_ENTRY_POINT 4
-#define AT_SYMBOL 5
 
 /* If STARTUP_WITH_SHELL is set, GDB's "run"
    will attempts to start up the debugee under a shell.
@@ -398,9 +397,11 @@ struct inferior_control_state
 
    Inferior thread counterpart is `struct thread_suspend_state'.  */
 
+#if 0 /* Currently unused and empty structures are not valid C.  */
 struct inferior_suspend_state
 {
 };
+#endif
 
 /* GDB represents the state of each program execution with an object
    called an inferior.  An inferior typically corresponds to a process
@@ -423,6 +424,8 @@ struct inferior
   /* Actual target inferior id, usually, a process id.  This matches
      the ptid_t.pid member of threads of this inferior.  */
   int pid;
+  /* True if the PID was actually faked by GDB.  */
+  int fake_pid_p;
 
   /* State of GDB control of inferior process execution.
      See `struct inferior_control_state'.  */
@@ -430,7 +433,9 @@ struct inferior
 
   /* State of inferior process to restore after GDB is done with an inferior
      call.  See `struct inferior_suspend_state'.  */
+#if 0 /* Currently unused and empty structures are not valid C.  */
   struct inferior_suspend_state suspend;
+#endif
 
   /* True if this was an auto-created inferior, e.g. created from
      following a fork; false, if this inferior was manually added by
@@ -502,19 +507,10 @@ struct inferior
   int has_exit_code;
   LONGEST exit_code;
 
-  /* We keep a count of the number of times the user has requested a
-     particular syscall to be tracked, and pass this information to the
-     target.  This lets capable targets implement filtering directly.  */
-
-  /* Number of times that "any" syscall is requested.  */
-  int any_syscall_count;
-
-  /* Count of each system call.  */
-  VEC(int) *syscalls_counts;
-
-  /* This counts all syscall catch requests, so we can readily determine
-     if any catching is necessary.  */
-  int total_syscalls_count;
+  /* Default flags to pass to the symbol reading functions.  These are
+     used whenever a new objfile is created.  The valid values come
+     from enum symfile_add_flags.  */
+  int symfile_flags;
 
   /* Per inferior data-pointers required by other GDB modules.  */
   void **data;
@@ -640,4 +636,16 @@ extern struct inferior *add_inferior_with_spaces (void);
 
 extern void update_observer_mode (void);
 
+extern void update_signals_program_target (void);
+
+/* In some circumstances we allow a command to specify a numeric
+   signal.  The idea is to keep these circumstances limited so that
+   users (and scripts) develop portable habits.  For comparison,
+   POSIX.2 `kill' requires that 1,2,3,6,9,14, and 15 work (and using a
+   numeric signal at all is obsolescent.  We are slightly more lenient
+   and allow 1-15 which should match host signal numbers on most
+   systems.  Use of symbolic signal names is strongly encouraged.  */
+
+enum gdb_signal gdb_signal_from_command (int num);
+
 #endif /* !defined (INFERIOR_H) */
diff --git a/gdb/infrun.c b/gdb/infrun.c
index a6e1af7..11f981f 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -55,6 +55,8 @@
 #include "continuations.h"
 #include "interps.h"
 #include "skip.h"
+#include "probe.h"
+#include "objfiles.h"
 
 /* Prototypes for local functions */
 
@@ -62,7 +64,7 @@ static void signals_info (char *, int);
 
 static void handle_command (char *, int);
 
-static void sig_print_info (enum target_signal);
+static void sig_print_info (enum gdb_signal);
 
 static void sig_print_header (void);
 
@@ -88,11 +90,11 @@ static int prepare_to_proceed (int);
 
 static void print_exited_reason (int exitstatus);
 
-static void print_signal_exited_reason (enum target_signal siggnal);
+static void print_signal_exited_reason (enum gdb_signal siggnal);
 
 static void print_no_history_reason (void);
 
-static void print_signal_received_reason (enum target_signal siggnal);
+static void print_signal_received_reason (enum gdb_signal siggnal);
 
 static void print_end_stepping_range_reason (void);
 
@@ -335,6 +337,15 @@ static unsigned char *signal_pass;
 	(flags)[signum] = 0; \
   } while (0)
 
+/* Update the target's copy of SIGNAL_PROGRAM.  The sole purpose of
+   this function is to avoid exporting `signal_program'.  */
+
+void
+update_signals_program_target (void)
+{
+  target_program_signals ((int) GDB_SIGNAL_LAST, signal_program);
+}
+
 /* Value to pass to target_resume() to cause all threads to resume.  */
 
 #define RESUME_ALL minus_one_ptid
@@ -389,7 +400,7 @@ void init_infwait_state (void);
 static const char follow_fork_mode_child[] = "child";
 static const char follow_fork_mode_parent[] = "parent";
 
-static const char *follow_fork_mode_kind_names[] = {
+static const char *const follow_fork_mode_kind_names[] = {
   follow_fork_mode_child,
   follow_fork_mode_parent,
   NULL
@@ -611,7 +622,7 @@ proceed_after_vfork_done (struct thread_info *thread,
       && is_running (thread->ptid)
       && !is_executing (thread->ptid)
       && !thread->stop_requested
-      && thread->suspend.stop_signal == TARGET_SIGNAL_0)
+      && thread->suspend.stop_signal == GDB_SIGNAL_0)
     {
       if (debug_infrun)
 	fprintf_unfiltered (gdb_stdlog,
@@ -620,7 +631,7 @@ proceed_after_vfork_done (struct thread_info *thread,
 
       switch_to_thread (thread->ptid);
       clear_proceed_status ();
-      proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
+      proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 0);
     }
 
   return 0;
@@ -739,6 +750,7 @@ handle_vfork_child_exec_or_exit (int exec)
 	  pspace = add_program_space (maybe_new_address_space ());
 	  set_current_program_space (pspace);
 	  inf->removable = 1;
+	  inf->symfile_flags = SYMFILE_NO_READ;
 	  clone_program_space (pspace, inf->vfork_parent->pspace);
 	  inf->pspace = pspace;
 	  inf->aspace = pspace->aspace;
@@ -778,7 +790,7 @@ handle_vfork_child_exec_or_exit (int exec)
 
 static const char follow_exec_mode_new[] = "new";
 static const char follow_exec_mode_same[] = "same";
-static const char *follow_exec_mode_names[] =
+static const char *const follow_exec_mode_names[] =
 {
   follow_exec_mode_new,
   follow_exec_mode_same,
@@ -900,10 +912,13 @@ follow_exec (ptid_t pid, char *execd_pathname)
      solib_create_inferior_hook below.  breakpoint_re_set would fail to insert
      the breakpoints with the zero displacement.  */
 
-  symbol_file_add (execd_pathname, SYMFILE_MAINLINE | SYMFILE_DEFER_BP_RESET,
+  symbol_file_add (execd_pathname,
+		   (inf->symfile_flags
+		    | SYMFILE_MAINLINE | SYMFILE_DEFER_BP_RESET),
 		   NULL, 0);
 
-  set_initial_language ();
+  if ((inf->symfile_flags & SYMFILE_NO_READ) == 0)
+    set_initial_language ();
 
 #ifdef SOLIB_CREATE_INFERIOR_HOOK
   SOLIB_CREATE_INFERIOR_HOOK (PIDGET (inferior_ptid));
@@ -1170,19 +1185,6 @@ infrun_inferior_exit (struct inferior *inf)
   remove_displaced_stepping_state (inf->pid);
 }
 
-/* Enum strings for "set|show displaced-stepping".  */
-
-static const char can_use_displaced_stepping_auto[] = "auto";
-static const char can_use_displaced_stepping_on[] = "on";
-static const char can_use_displaced_stepping_off[] = "off";
-static const char *can_use_displaced_stepping_enum[] =
-{
-  can_use_displaced_stepping_auto,
-  can_use_displaced_stepping_on,
-  can_use_displaced_stepping_off,
-  NULL,
-};
-
 /* If ON, and the architecture supports it, GDB will use displaced
    stepping to step over breakpoints.  If OFF, or if the architecture
    doesn't support it, GDB will instead use the traditional
@@ -1191,15 +1193,14 @@ static const char *can_use_displaced_stepping_enum[] =
    which of all-stop or non-stop mode is active --- displaced stepping
    in non-stop mode; hold-and-step in all-stop mode.  */
 
-static const char *can_use_displaced_stepping =
-  can_use_displaced_stepping_auto;
+static enum auto_boolean can_use_displaced_stepping = AUTO_BOOLEAN_AUTO;
 
 static void
 show_can_use_displaced_stepping (struct ui_file *file, int from_tty,
 				 struct cmd_list_element *c,
 				 const char *value)
 {
-  if (can_use_displaced_stepping == can_use_displaced_stepping_auto)
+  if (can_use_displaced_stepping == AUTO_BOOLEAN_AUTO)
     fprintf_filtered (file,
 		      _("Debugger's willingness to use displaced stepping "
 			"to step over breakpoints is %s (currently %s).\n"),
@@ -1216,9 +1217,8 @@ show_can_use_displaced_stepping (struct ui_file *file, int from_tty,
 static int
 use_displaced_stepping (struct gdbarch *gdbarch)
 {
-  return (((can_use_displaced_stepping == can_use_displaced_stepping_auto
-	    && non_stop)
-	   || can_use_displaced_stepping == can_use_displaced_stepping_on)
+  return (((can_use_displaced_stepping == AUTO_BOOLEAN_AUTO && non_stop)
+	   || can_use_displaced_stepping == AUTO_BOOLEAN_TRUE)
 	  && gdbarch_displaced_step_copy_insn_p (gdbarch)
 	  && !RECORD_IS_USED);
 }
@@ -1283,6 +1283,7 @@ displaced_step_prepare (ptid_t ptid)
   ULONGEST len;
   struct displaced_step_closure *closure;
   struct displaced_step_inferior_state *displaced;
+  int status;
 
   /* We should never reach this function if the architecture does not
      support displaced stepping.  */
@@ -1343,7 +1344,12 @@ displaced_step_prepare (ptid_t ptid)
   displaced->step_saved_copy = xmalloc (len);
   ignore_cleanups = make_cleanup (free_current_contents,
 				  &displaced->step_saved_copy);
-  read_memory (copy, displaced->step_saved_copy, len);
+  status = target_read_memory (copy, displaced->step_saved_copy, len);
+  if (status != 0)
+    throw_error (MEMORY_ERROR,
+		 _("Error accessing memory address %s (%s) for "
+		   "displaced-stepping scratch space."),
+		 paddress (gdbarch, copy), safe_strerror (status));
   if (debug_displaced)
     {
       fprintf_unfiltered (gdb_stdlog, "displaced: saved %s: ",
@@ -1412,7 +1418,7 @@ displaced_step_restore (struct displaced_step_inferior_state *displaced,
 }
 
 static void
-displaced_step_fixup (ptid_t event_ptid, enum target_signal signal)
+displaced_step_fixup (ptid_t event_ptid, enum gdb_signal signal)
 {
   struct cleanup *old_cleanups;
   struct displaced_step_inferior_state *displaced
@@ -1432,7 +1438,7 @@ displaced_step_fixup (ptid_t event_ptid, enum target_signal signal)
   displaced_step_restore (displaced, displaced->step_ptid);
 
   /* Did the instruction complete successfully?  */
-  if (signal == TARGET_SIGNAL_TRAP)
+  if (signal == GDB_SIGNAL_TRAP)
     {
       /* Fix up the resulting state.  */
       gdbarch_displaced_step_fixup (displaced->step_gdbarch,
@@ -1503,9 +1509,9 @@ displaced_step_fixup (ptid_t event_ptid, enum target_signal signal)
 
 	  if (gdbarch_displaced_step_hw_singlestep (gdbarch,
 						    displaced->step_closure))
-	    target_resume (ptid, 1, TARGET_SIGNAL_0);
+	    target_resume (ptid, 1, GDB_SIGNAL_0);
 	  else
-	    target_resume (ptid, 0, TARGET_SIGNAL_0);
+	    target_resume (ptid, 0, GDB_SIGNAL_0);
 
 	  /* Done, we're stepping a thread.  */
 	  break;
@@ -1524,11 +1530,11 @@ displaced_step_fixup (ptid_t event_ptid, enum target_signal signal)
 
 	  if (debug_displaced)
 	    fprintf_unfiltered (gdb_stdlog,
-				"breakpoint is gone %s: step(%d)\n",
+				"displaced: breakpoint is gone: %s, step(%d)\n",
 				target_pid_to_str (tp->ptid), step);
 
-	  target_resume (ptid, step, TARGET_SIGNAL_0);
-	  tp->suspend.stop_signal = TARGET_SIGNAL_0;
+	  target_resume (ptid, step, GDB_SIGNAL_0);
+	  tp->suspend.stop_signal = GDB_SIGNAL_0;
 
 	  /* This request was discarded.  See if there's any other
 	     thread waiting for its turn.  */
@@ -1579,7 +1585,7 @@ resume_cleanups (void *ignore)
 static const char schedlock_off[] = "off";
 static const char schedlock_on[] = "on";
 static const char schedlock_step[] = "step";
-static const char *scheduler_enums[] = {
+static const char *const scheduler_enums[] = {
   schedlock_off,
   schedlock_on,
   schedlock_step,
@@ -1684,7 +1690,7 @@ user_visible_resume_ptid (int step)
    STEP nonzero if we should step (zero to continue instead).
    SIG is the signal to give the inferior (zero for none).  */
 void
-resume (int step, enum target_signal sig)
+resume (int step, enum gdb_signal sig)
 {
   int should_resume = 1;
   struct cleanup *old_cleanups = make_cleanup (resume_cleanups, 0);
@@ -1752,7 +1758,7 @@ a command like `return' or `jump' to continue execution."));
   if (use_displaced_stepping (gdbarch)
       && (tp->control.trap_expected
 	  || (step && gdbarch_software_single_step_p (gdbarch)))
-      && sig == TARGET_SIGNAL_0
+      && sig == GDB_SIGNAL_0
       && !current_inferior ()->waiting_for_vfork_done)
     {
       struct displaced_step_inferior_state *displaced;
@@ -1770,6 +1776,10 @@ a command like `return' or `jump' to continue execution."));
 	  return;
 	}
 
+      /* Update pc to reflect the new address from which we will execute
+	 instructions due to displaced stepping.  */
+      pc = regcache_read_pc (get_thread_regcache (inferior_ptid));
+
       displaced = get_displaced_stepping_state (ptid_get_pid (inferior_ptid));
       step = gdbarch_displaced_step_hw_singlestep (gdbarch,
 						   displaced->step_closure);
@@ -1804,7 +1814,7 @@ a command like `return' or `jump' to continue execution."));
      once we arrive back at the step-resume breakpoint, actually step
      over the breakpoint we originally wanted to step over.  */
   if (singlestep_breakpoints_inserted_p
-      && tp->control.trap_expected && sig != TARGET_SIGNAL_0)
+      && tp->control.trap_expected && sig != GDB_SIGNAL_0)
     {
       /* If we have nested signals or a pending signal is delivered
 	 immediately after a handler returns, might might already have
@@ -1900,7 +1910,7 @@ a command like `return' or `jump' to continue execution."));
 
       /* Avoid confusing the next resume, if the next stop/resume
 	 happens to apply to another thread.  */
-      tp->suspend.stop_signal = TARGET_SIGNAL_0;
+      tp->suspend.stop_signal = GDB_SIGNAL_0;
 
       /* Advise target which signals may be handled silently.  If we have
 	 removed breakpoints because we are stepping over one (which can
@@ -1912,7 +1922,7 @@ a command like `return' or `jump' to continue execution."));
 	  && !use_displaced_stepping (gdbarch))
 	target_pass_signals (0, NULL);
       else
-	target_pass_signals ((int) TARGET_SIGNAL_LAST, signal_pass);
+	target_pass_signals ((int) GDB_SIGNAL_LAST, signal_pass);
 
       target_resume (resume_ptid, step, sig);
     }
@@ -2018,10 +2028,10 @@ prepare_to_proceed (int step)
 
   /* Make sure we were stopped at a breakpoint.  */
   if (wait_status.kind != TARGET_WAITKIND_STOPPED
-      || (wait_status.value.sig != TARGET_SIGNAL_TRAP
-	  && wait_status.value.sig != TARGET_SIGNAL_ILL
-	  && wait_status.value.sig != TARGET_SIGNAL_SEGV
-	  && wait_status.value.sig != TARGET_SIGNAL_EMT))
+      || (wait_status.value.sig != GDB_SIGNAL_TRAP
+	  && wait_status.value.sig != GDB_SIGNAL_ILL
+	  && wait_status.value.sig != GDB_SIGNAL_SEGV
+	  && wait_status.value.sig != GDB_SIGNAL_EMT))
     {
       return 0;
     }
@@ -2085,7 +2095,7 @@ prepare_to_proceed (int step)
    You should call clear_proceed_status before calling proceed.  */
 
 void
-proceed (CORE_ADDR addr, enum target_signal siggnal, int step)
+proceed (CORE_ADDR addr, enum gdb_signal siggnal, int step)
 {
   struct regcache *regcache;
   struct gdbarch *gdbarch;
@@ -2213,17 +2223,17 @@ proceed (CORE_ADDR addr, enum target_signal siggnal, int step)
 	  if (last_thread)
 	    {
 	      tp->suspend.stop_signal = last_thread->suspend.stop_signal;
-	      last_thread->suspend.stop_signal = TARGET_SIGNAL_0;
+	      last_thread->suspend.stop_signal = GDB_SIGNAL_0;
 	    }
 	}
     }
 
-  if (siggnal != TARGET_SIGNAL_DEFAULT)
+  if (siggnal != GDB_SIGNAL_DEFAULT)
     tp->suspend.stop_signal = siggnal;
   /* If this signal should not be seen by program,
      give it zero.  Used for debugging signals.  */
   else if (!signal_program[tp->suspend.stop_signal])
-    tp->suspend.stop_signal = TARGET_SIGNAL_0;
+    tp->suspend.stop_signal = GDB_SIGNAL_0;
 
   annotate_starting ();
 
@@ -2367,8 +2377,7 @@ struct execution_control_state
   int stop_func_filled_in;
   CORE_ADDR stop_func_start;
   CORE_ADDR stop_func_end;
-  char *stop_func_name;
-  int new_thread_event;
+  const char *stop_func_name;
   int wait_some_more;
 };
 
@@ -2379,7 +2388,7 @@ static void handle_step_into_function (struct gdbarch *gdbarch,
 static void handle_step_into_function_backward (struct gdbarch *gdbarch,
 						struct execution_control_state *ecs);
 static void check_exception_resume (struct execution_control_state *,
-				    struct frame_info *, struct symbol *);
+				    struct frame_info *);
 
 static void stop_stepping (struct execution_control_state *ecs);
 static void prepare_to_wait (struct execution_control_state *ecs);
@@ -2413,15 +2422,13 @@ infrun_thread_stop_requested_callback (struct thread_info *info, void *arg)
 
       old_chain = make_cleanup_restore_current_thread ();
 
-      switch_to_thread (info->ptid);
-
       /* Go through handle_inferior_event/normal_stop, so we always
 	 have consistent output as if the stop event had been
 	 reported.  */
       ecs->ptid = info->ptid;
       ecs->event_thread = find_thread_ptid (info->ptid);
       ecs->ws.kind = TARGET_WAITKIND_STOPPED;
-      ecs->ws.value.sig = TARGET_SIGNAL_0;
+      ecs->ws.value.sig = GDB_SIGNAL_0;
 
       handle_inferior_event (ecs);
 
@@ -2631,14 +2638,6 @@ prepare_for_detach (void)
       old_chain_2 = make_cleanup (finish_thread_state_cleanup,
 				  &minus_one_ptid);
 
-      /* In non-stop mode, each thread is handled individually.
-	 Switch early, so the global state is set correctly for this
-	 thread.  */
-      if (non_stop
-	  && ecs->ws.kind != TARGET_WAITKIND_EXITED
-	  && ecs->ws.kind != TARGET_WAITKIND_SIGNALLED)
-	context_switch (ecs->ptid);
-
       /* Now figure out what to do with the result of the result.  */
       handle_inferior_event (ecs);
 
@@ -2669,8 +2668,6 @@ void
 wait_for_inferior (void)
 {
   struct cleanup *old_cleanups;
-  struct execution_control_state ecss;
-  struct execution_control_state *ecs;
 
   if (debug_infrun)
     fprintf_unfiltered
@@ -2679,13 +2676,14 @@ wait_for_inferior (void)
   old_cleanups =
     make_cleanup (delete_step_thread_step_resume_breakpoint_cleanup, NULL);
 
-  ecs = &ecss;
-  memset (ecs, 0, sizeof (*ecs));
-
   while (1)
     {
+      struct execution_control_state ecss;
+      struct execution_control_state *ecs = &ecss;
       struct cleanup *old_chain;
 
+      memset (ecs, 0, sizeof (*ecs));
+
       overlay_cache_invalid = 1;
 
       if (deprecated_target_wait_hook)
@@ -2701,10 +2699,6 @@ wait_for_inferior (void)
 	 state.  */
       old_chain = make_cleanup (finish_thread_state_cleanup, &minus_one_ptid);
 
-      if (ecs->ws.kind == TARGET_WAITKIND_SYSCALL_ENTRY
-          || ecs->ws.kind == TARGET_WAITKIND_SYSCALL_RETURN)
-        ecs->ws.value.syscall_number = UNKNOWN_SYSCALL;
-
       /* Now figure out what to do with the result of the result.  */
       handle_inferior_event (ecs);
 
@@ -2770,16 +2764,6 @@ fetch_inferior_event (void *client_data)
   if (debug_infrun)
     print_target_wait_results (waiton_ptid, ecs->ptid, &ecs->ws);
 
-  if (non_stop
-      && ecs->ws.kind != TARGET_WAITKIND_IGNORE
-      && ecs->ws.kind != TARGET_WAITKIND_NO_RESUMED
-      && ecs->ws.kind != TARGET_WAITKIND_EXITED
-      && ecs->ws.kind != TARGET_WAITKIND_SIGNALLED)
-    /* In non-stop mode, each thread is handled individually.  Switch
-       early, so the global state is set correctly for this
-       thread.  */
-    context_switch (ecs->ptid);
-
   /* If an error happens while handling the event, propagate GDB's
      knowledge of the executing state to the frontend/user running
      state.  */
@@ -2927,7 +2911,7 @@ adjust_pc_after_break (struct execution_control_state *ecs)
   if (ecs->ws.kind != TARGET_WAITKIND_STOPPED)
     return;
 
-  if (ecs->ws.value.sig != TARGET_SIGNAL_TRAP)
+  if (ecs->ws.value.sig != GDB_SIGNAL_TRAP)
     return;
 
   /* In reverse execution, when a breakpoint is hit, the instruction
@@ -3072,11 +3056,9 @@ handle_syscall_event (struct execution_control_state *ecs)
 
   regcache = get_thread_regcache (ecs->ptid);
   gdbarch = get_regcache_arch (regcache);
-  syscall_number = gdbarch_get_syscall_number (gdbarch, ecs->ptid);
+  syscall_number = ecs->ws.value.syscall_number;
   stop_pc = regcache_read_pc (regcache);
 
-  target_last_waitstatus.value.syscall_number = syscall_number;
-
   if (catch_syscall_enabled () > 0
       && catching_syscall_number (syscall_number) > 0)
     {
@@ -3086,20 +3068,20 @@ handle_syscall_event (struct execution_control_state *ecs)
 
       ecs->event_thread->control.stop_bpstat
 	= bpstat_stop_status (get_regcache_aspace (regcache),
-			      stop_pc, ecs->ptid);
+			      stop_pc, ecs->ptid, &ecs->ws);
       ecs->random_signal
 	= !bpstat_explains_signal (ecs->event_thread->control.stop_bpstat);
 
       if (!ecs->random_signal)
 	{
 	  /* Catchpoint hit.  */
-	  ecs->event_thread->suspend.stop_signal = TARGET_SIGNAL_TRAP;
+	  ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_TRAP;
 	  return 0;
 	}
     }
 
   /* If no catchpoint triggered for this, then keep going.  */
-  ecs->event_thread->suspend.stop_signal = TARGET_SIGNAL_0;
+  ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_0;
   keep_going (ecs);
   return 1;
 }
@@ -3211,17 +3193,15 @@ handle_inferior_event (struct execution_control_state *ecs)
       return;
     }
 
-  /* If it's a new process, add it to the thread database.  */
-
-  ecs->new_thread_event = (!ptid_equal (ecs->ptid, inferior_ptid)
-			   && !ptid_equal (ecs->ptid, minus_one_ptid)
-			   && !in_thread_list (ecs->ptid));
-
   if (ecs->ws.kind != TARGET_WAITKIND_EXITED
-      && ecs->ws.kind != TARGET_WAITKIND_SIGNALLED && ecs->new_thread_event)
-    add_thread (ecs->ptid);
-
-  ecs->event_thread = find_thread_ptid (ecs->ptid);
+      && ecs->ws.kind != TARGET_WAITKIND_SIGNALLED
+      && !ptid_equal (ecs->ptid, minus_one_ptid))
+    {
+      ecs->event_thread = find_thread_ptid (ecs->ptid);
+      /* If it's a new thread, add it to the thread database.  */
+      if (ecs->event_thread == NULL)
+	ecs->event_thread = add_thread (ecs->ptid);
+    }
 
   /* Dependent on valid ECS->EVENT_THREAD.  */
   adjust_pc_after_break (ecs);
@@ -3242,9 +3222,9 @@ handle_inferior_event (struct execution_control_state *ecs)
      for architectures like SPARC that place call dummies on the
      stack.  */
   if (ecs->ws.kind == TARGET_WAITKIND_STOPPED
-      && (ecs->ws.value.sig == TARGET_SIGNAL_ILL
-	  || ecs->ws.value.sig == TARGET_SIGNAL_SEGV
-	  || ecs->ws.value.sig == TARGET_SIGNAL_EMT))
+      && (ecs->ws.value.sig == GDB_SIGNAL_ILL
+	  || ecs->ws.value.sig == GDB_SIGNAL_SEGV
+	  || ecs->ws.value.sig == GDB_SIGNAL_EMT))
     {
       struct regcache *regcache = get_thread_regcache (ecs->ptid);
 
@@ -3254,7 +3234,7 @@ handle_inferior_event (struct execution_control_state *ecs)
 	  if (debug_infrun)
 	    fprintf_unfiltered (gdb_stdlog,
 				"infrun: Treating signal as SIGTRAP\n");
-	  ecs->ws.value.sig = TARGET_SIGNAL_TRAP;
+	  ecs->ws.value.sig = GDB_SIGNAL_TRAP;
 	}
     }
 
@@ -3322,28 +3302,32 @@ handle_inferior_event (struct execution_control_state *ecs)
          established.  */
       if (stop_soon == NO_STOP_QUIETLY)
 	{
-	  /* Check for any newly added shared libraries if we're
-	     supposed to be adding them automatically.  Switch
-	     terminal for any messages produced by
-	     breakpoint_re_set.  */
-	  target_terminal_ours_for_output ();
-	  /* NOTE: cagney/2003-11-25: Make certain that the target
-	     stack's section table is kept up-to-date.  Architectures,
-	     (e.g., PPC64), use the section table to perform
-	     operations such as address => section name and hence
-	     require the table to contain all sections (including
-	     those found in shared libraries).  */
-#ifdef SOLIB_ADD
-	  SOLIB_ADD (NULL, 0, &current_target, auto_solib_add);
-#else
-	  solib_add (NULL, 0, &current_target, auto_solib_add);
-#endif
-	  target_terminal_inferior ();
+	  struct regcache *regcache;
+
+	  if (!ptid_equal (ecs->ptid, inferior_ptid))
+	    context_switch (ecs->ptid);
+	  regcache = get_thread_regcache (ecs->ptid);
+
+	  handle_solib_event ();
+
+	  ecs->event_thread->control.stop_bpstat
+	    = bpstat_stop_status (get_regcache_aspace (regcache),
+				  stop_pc, ecs->ptid, &ecs->ws);
+	  ecs->random_signal
+	    = !bpstat_explains_signal (ecs->event_thread->control.stop_bpstat);
+
+	  if (!ecs->random_signal)
+	    {
+	      /* A catchpoint triggered.  */
+	      ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_TRAP;
+	      goto process_event_stop_test;
+	    }
 
 	  /* If requested, stop when the dynamic linker notifies
 	     gdb of events.  This allows the user to get control
 	     and place breakpoints in initializer routines for
 	     dynamically loaded objects (among other things).  */
+	  ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_0;
 	  if (stop_on_solib_events)
 	    {
 	      /* Make sure we print "Stopped due to solib-event" in
@@ -3353,9 +3337,6 @@ handle_inferior_event (struct execution_control_state *ecs)
 	      stop_stepping (ecs);
 	      return;
 	    }
-
-	  /* NOTE drow/2007-05-11: This might be a good place to check
-	     for "catch load".  */
 	}
 
       /* If we are skipping through a shell, or through shared library
@@ -3364,12 +3345,15 @@ handle_inferior_event (struct execution_control_state *ecs)
 	 we're attaching or setting up a remote connection.  */
       if (stop_soon == STOP_QUIETLY || stop_soon == NO_STOP_QUIETLY)
 	{
+	  if (!ptid_equal (ecs->ptid, inferior_ptid))
+	    context_switch (ecs->ptid);
+
 	  /* Loading of shared libraries might have changed breakpoint
 	     addresses.  Make sure new breakpoints are inserted.  */
 	  if (stop_soon == NO_STOP_QUIETLY
 	      && !breakpoints_always_inserted_mode ())
 	    insert_breakpoints ();
-	  resume (0, TARGET_SIGNAL_0);
+	  resume (0, GDB_SIGNAL_0);
 	  prepare_to_wait (ecs);
 	  return;
 	}
@@ -3379,7 +3363,10 @@ handle_inferior_event (struct execution_control_state *ecs)
     case TARGET_WAITKIND_SPURIOUS:
       if (debug_infrun)
         fprintf_unfiltered (gdb_stdlog, "infrun: TARGET_WAITKIND_SPURIOUS\n");
-      resume (0, TARGET_SIGNAL_0);
+      if (!ptid_equal (ecs->ptid, inferior_ptid)
+	  && !ptid_equal (ecs->ptid, minus_one_ptid))
+	context_switch (ecs->ptid);
+      resume (0, GDB_SIGNAL_0);
       prepare_to_wait (ecs);
       return;
 
@@ -3461,7 +3448,7 @@ handle_inferior_event (struct execution_control_state *ecs)
 	       has been done.  Perform cleanup for parent process here.  Note
 	       that this operation also cleans up the child process for vfork,
 	       because their pages are shared.  */
-	    displaced_step_fixup (ecs->ptid, TARGET_SIGNAL_TRAP);
+	    displaced_step_fixup (ecs->ptid, GDB_SIGNAL_TRAP);
 
 	    if (ecs->ws.kind == TARGET_WAITKIND_FORKED)
 	      {
@@ -3495,10 +3482,7 @@ handle_inferior_event (struct execution_control_state *ecs)
       }
 
       if (!ptid_equal (ecs->ptid, inferior_ptid))
-	{
-	  context_switch (ecs->ptid);
-	  reinit_frame_cache ();
-	}
+	context_switch (ecs->ptid);
 
       /* Immediately detach breakpoints from the child before there's
 	 any chance of letting the user delete breakpoints from the
@@ -3537,7 +3521,7 @@ handle_inferior_event (struct execution_control_state *ecs)
 
       ecs->event_thread->control.stop_bpstat
 	= bpstat_stop_status (get_regcache_aspace (get_current_regcache ()),
-			      stop_pc, ecs->ptid);
+			      stop_pc, ecs->ptid, &ecs->ws);
 
       /* Note that we're interested in knowing the bpstat actually
 	 causes a stop, not just if it may explain the signal.
@@ -3555,7 +3539,7 @@ handle_inferior_event (struct execution_control_state *ecs)
 	  int follow_child
 	    = (follow_fork_mode_string == follow_fork_mode_child);
 
-	  ecs->event_thread->suspend.stop_signal = TARGET_SIGNAL_0;
+	  ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_0;
 
 	  should_resume = follow_fork ();
 
@@ -3589,7 +3573,7 @@ handle_inferior_event (struct execution_control_state *ecs)
 	    stop_stepping (ecs);
 	  return;
 	}
-      ecs->event_thread->suspend.stop_signal = TARGET_SIGNAL_TRAP;
+      ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_TRAP;
       goto process_event_stop_test;
 
     case TARGET_WAITKIND_VFORK_DONE:
@@ -3615,10 +3599,7 @@ handle_inferior_event (struct execution_control_state *ecs)
         fprintf_unfiltered (gdb_stdlog, "infrun: TARGET_WAITKIND_EXECD\n");
 
       if (!ptid_equal (ecs->ptid, inferior_ptid))
-	{
-	  context_switch (ecs->ptid);
-	  reinit_frame_cache ();
-	}
+	context_switch (ecs->ptid);
 
       singlestep_breakpoints_inserted_p = 0;
       cancel_single_step_breakpoints ();
@@ -3635,7 +3616,7 @@ handle_inferior_event (struct execution_control_state *ecs)
 
       ecs->event_thread->control.stop_bpstat
 	= bpstat_stop_status (get_regcache_aspace (get_current_regcache ()),
-			      stop_pc, ecs->ptid);
+			      stop_pc, ecs->ptid, &ecs->ws);
       ecs->random_signal
 	= !bpstat_explains_signal (ecs->event_thread->control.stop_bpstat);
 
@@ -3647,11 +3628,11 @@ handle_inferior_event (struct execution_control_state *ecs)
       /* If no catchpoint triggered for this, then keep going.  */
       if (ecs->random_signal)
 	{
-	  ecs->event_thread->suspend.stop_signal = TARGET_SIGNAL_0;
+	  ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_0;
 	  keep_going (ecs);
 	  return;
 	}
-      ecs->event_thread->suspend.stop_signal = TARGET_SIGNAL_TRAP;
+      ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_TRAP;
       goto process_event_stop_test;
 
       /* Be careful not to try to gather much state about a thread
@@ -3694,30 +3675,6 @@ handle_inferior_event (struct execution_control_state *ecs)
       return;
     }
 
-  if (ecs->new_thread_event)
-    {
-      if (non_stop)
-	/* Non-stop assumes that the target handles adding new threads
-	   to the thread list.  */
-	internal_error (__FILE__, __LINE__,
-			"targets should add new threads to the thread "
-			"list themselves in non-stop mode.");
-
-      /* We may want to consider not doing a resume here in order to
-	 give the user a chance to play with the new thread.  It might
-	 be good to make that a user-settable option.  */
-
-      /* At this point, all threads are stopped (happens automatically
-	 in either the OS or the native code).  Therefore we need to
-	 continue all threads in order to make progress.  */
-
-      if (!ptid_equal (ecs->ptid, inferior_ptid))
-	context_switch (ecs->ptid);
-      target_resume (RESUME_ALL, 0, TARGET_SIGNAL_0);
-      prepare_to_wait (ecs);
-      return;
-    }
-
   if (ecs->ws.kind == TARGET_WAITKIND_STOPPED)
     {
       /* Do we need to clean up the state of a thread that has
@@ -3731,8 +3688,8 @@ handle_inferior_event (struct execution_control_state *ecs)
 	 SIG0 (generic unsignaled stop).  */
 
       if (ecs->event_thread->stop_requested
-	  && ecs->event_thread->suspend.stop_signal == TARGET_SIGNAL_TRAP)
-	ecs->event_thread->suspend.stop_signal = TARGET_SIGNAL_0;
+	  && ecs->event_thread->suspend.stop_signal == GDB_SIGNAL_TRAP)
+	ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_0;
     }
 
   stop_pc = regcache_read_pc (get_thread_regcache (ecs->ptid));
@@ -3776,13 +3733,15 @@ handle_inferior_event (struct execution_control_state *ecs)
       /* We've either finished single-stepping past the single-step
          breakpoint, or stopped for some other reason.  It would be nice if
          we could tell, but we can't reliably.  */
-      if (ecs->event_thread->suspend.stop_signal == TARGET_SIGNAL_TRAP)
+      if (ecs->event_thread->suspend.stop_signal == GDB_SIGNAL_TRAP)
 	{
 	  if (debug_infrun)
 	    fprintf_unfiltered (gdb_stdlog,
 				"infrun: stepping_past_"
 				"singlestep_breakpoint\n");
 	  /* Pull the single step breakpoints out of the target.  */
+	  if (!ptid_equal (ecs->ptid, inferior_ptid))
+	    context_switch (ecs->ptid);
 	  remove_single_step_breakpoints ();
 	  singlestep_breakpoints_inserted_p = 0;
 
@@ -3793,7 +3752,7 @@ handle_inferior_event (struct execution_control_state *ecs)
 	  if (deprecated_context_hook)
 	    deprecated_context_hook (pid_to_thread_id (ecs->ptid));
 
-	  resume (1, TARGET_SIGNAL_0);
+	  resume (1, GDB_SIGNAL_0);
 	  prepare_to_wait (ecs);
 	  return;
 	}
@@ -3806,7 +3765,7 @@ handle_inferior_event (struct execution_control_state *ecs)
 
       /* If we stopped for some other reason than single-stepping, ignore
 	 the fact that we were supposed to switch back.  */
-      if (ecs->event_thread->suspend.stop_signal == TARGET_SIGNAL_TRAP)
+      if (ecs->event_thread->suspend.stop_signal == GDB_SIGNAL_TRAP)
 	{
 	  if (debug_infrun)
 	    fprintf_unfiltered (gdb_stdlog,
@@ -3815,20 +3774,20 @@ handle_inferior_event (struct execution_control_state *ecs)
 	  /* Pull the single step breakpoints out of the target.  */
 	  if (singlestep_breakpoints_inserted_p)
 	    {
+	      if (!ptid_equal (ecs->ptid, inferior_ptid))
+		context_switch (ecs->ptid);
 	      remove_single_step_breakpoints ();
 	      singlestep_breakpoints_inserted_p = 0;
 	    }
 
 	  ecs->event_thread->control.trap_expected = 0;
 
-	  /* Note: We do not call context_switch at this point, as the
-	     context is already set up for stepping the original thread.  */
-	  switch_to_thread (deferred_step_ptid);
+	  context_switch (deferred_step_ptid);
 	  deferred_step_ptid = null_ptid;
 	  /* Suppress spurious "Switching to ..." message.  */
 	  previous_inferior_ptid = inferior_ptid;
 
-	  resume (1, TARGET_SIGNAL_0);
+	  resume (1, GDB_SIGNAL_0);
 	  prepare_to_wait (ecs);
 	  return;
 	}
@@ -3840,7 +3799,7 @@ handle_inferior_event (struct execution_control_state *ecs)
      another thread.  If so, then step that thread past the breakpoint,
      and continue it.  */
 
-  if (ecs->event_thread->suspend.stop_signal == TARGET_SIGNAL_TRAP)
+  if (ecs->event_thread->suspend.stop_signal == GDB_SIGNAL_TRAP)
     {
       int thread_hop_needed = 0;
       struct address_space *aspace = 
@@ -3896,7 +3855,7 @@ handle_inferior_event (struct execution_control_state *ecs)
 
 	     if (new_singlestep_pc != singlestep_pc)
 	       {
-		 enum target_signal stop_signal;
+		 enum gdb_signal stop_signal;
 
 		 if (debug_infrun)
 		   fprintf_unfiltered (gdb_stdlog, "infrun: unexpected thread,"
@@ -3907,7 +3866,7 @@ handle_inferior_event (struct execution_control_state *ecs)
 		    the context we want to use.  Just fudge our
 		    state and continue.  */
                  stop_signal = ecs->event_thread->suspend.stop_signal;
-                 ecs->event_thread->suspend.stop_signal = TARGET_SIGNAL_0;
+                 ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_0;
                  ecs->ptid = singlestep_ptid;
                  ecs->event_thread = find_thread_ptid (ecs->ptid);
                  ecs->event_thread->suspend.stop_signal = stop_signal;
@@ -4053,7 +4012,7 @@ handle_inferior_event (struct execution_control_state *ecs)
 	}
 	/* Single step */
       hw_step = maybe_software_singlestep (gdbarch, stop_pc);
-      target_resume (ecs->ptid, hw_step, TARGET_SIGNAL_0);
+      target_resume (ecs->ptid, hw_step, GDB_SIGNAL_0);
       waiton_ptid = ecs->ptid;
       if (target_have_steppable_watchpoint)
 	infwait_state = infwait_step_watch_state;
@@ -4094,15 +4053,23 @@ handle_inferior_event (struct execution_control_state *ecs)
 	 user had set a breakpoint on that inlined code, the missing
 	 skip_inline_frames call would break things.  Fortunately
 	 that's an extremely unlikely scenario.  */
-      if (!pc_at_non_inline_function (aspace, stop_pc)
-          && !(ecs->event_thread->suspend.stop_signal == TARGET_SIGNAL_TRAP
-               && ecs->event_thread->control.trap_expected
-               && pc_at_non_inline_function (aspace,
-                                             ecs->event_thread->prev_pc)))
-	skip_inline_frames (ecs->ptid);
+      if (!pc_at_non_inline_function (aspace, stop_pc, &ecs->ws)
+	  && !(ecs->event_thread->suspend.stop_signal == GDB_SIGNAL_TRAP
+	       && ecs->event_thread->control.trap_expected
+	       && pc_at_non_inline_function (aspace,
+					     ecs->event_thread->prev_pc,
+					     &ecs->ws)))
+	{
+	  skip_inline_frames (ecs->ptid);
+
+	  /* Re-fetch current thread's frame in case that invalidated
+	     the frame cache.  */
+	  frame = get_current_frame ();
+	  gdbarch = get_frame_arch (frame);
+	}
     }
 
-  if (ecs->event_thread->suspend.stop_signal == TARGET_SIGNAL_TRAP
+  if (ecs->event_thread->suspend.stop_signal == GDB_SIGNAL_TRAP
       && ecs->event_thread->control.trap_expected
       && gdbarch_single_step_through_delay_p (gdbarch)
       && currently_stepping (ecs->event_thread))
@@ -4146,11 +4113,11 @@ handle_inferior_event (struct execution_control_state *ecs)
      3) set ecs->random_signal to 1, and the decision between 1 and 2
      will be made according to the signal handling tables.  */
 
-  if (ecs->event_thread->suspend.stop_signal == TARGET_SIGNAL_TRAP
+  if (ecs->event_thread->suspend.stop_signal == GDB_SIGNAL_TRAP
       || stop_soon == STOP_QUIETLY || stop_soon == STOP_QUIETLY_NO_SIGSTOP
       || stop_soon == STOP_QUIETLY_REMOTE)
     {
-      if (ecs->event_thread->suspend.stop_signal == TARGET_SIGNAL_TRAP
+      if (ecs->event_thread->suspend.stop_signal == GDB_SIGNAL_TRAP
 	  && stop_after_trap)
 	{
           if (debug_infrun)
@@ -4184,26 +4151,27 @@ handle_inferior_event (struct execution_control_state *ecs)
 	 signal, so this is no exception.
 
 	 Also consider that the attach is complete when we see a
-	 TARGET_SIGNAL_0.  In non-stop mode, GDB will explicitly tell
+	 GDB_SIGNAL_0.  In non-stop mode, GDB will explicitly tell
 	 the target to stop all threads of the inferior, in case the
 	 low level attach operation doesn't stop them implicitly.  If
 	 they weren't stopped implicitly, then the stub will report a
-	 TARGET_SIGNAL_0, meaning: stopped for no particular reason
+	 GDB_SIGNAL_0, meaning: stopped for no particular reason
 	 other than GDB's request.  */
       if (stop_soon == STOP_QUIETLY_NO_SIGSTOP
-	  && (ecs->event_thread->suspend.stop_signal == TARGET_SIGNAL_STOP
-	      || ecs->event_thread->suspend.stop_signal == TARGET_SIGNAL_TRAP
-	      || ecs->event_thread->suspend.stop_signal == TARGET_SIGNAL_0))
+	  && (ecs->event_thread->suspend.stop_signal == GDB_SIGNAL_STOP
+	      || ecs->event_thread->suspend.stop_signal == GDB_SIGNAL_TRAP
+	      || ecs->event_thread->suspend.stop_signal == GDB_SIGNAL_0))
 	{
 	  stop_stepping (ecs);
-	  ecs->event_thread->suspend.stop_signal = TARGET_SIGNAL_0;
+	  ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_0;
 	  return;
 	}
 
-      /* See if there is a breakpoint at the current PC.  */
+      /* See if there is a breakpoint/watchpoint/catchpoint/etc. that
+	 handles this event.  */
       ecs->event_thread->control.stop_bpstat
 	= bpstat_stop_status (get_regcache_aspace (get_current_regcache ()),
-			      stop_pc, ecs->ptid);
+			      stop_pc, ecs->ptid, &ecs->ws);
 
       /* Following in case break condition called a
 	 function.  */
@@ -4218,7 +4186,7 @@ handle_inferior_event (struct execution_control_state *ecs)
 	 set.  */
 
       if (debug_infrun
-	  && ecs->event_thread->suspend.stop_signal == TARGET_SIGNAL_TRAP
+	  && ecs->event_thread->suspend.stop_signal == GDB_SIGNAL_TRAP
 	  && !bpstat_explains_signal (ecs->event_thread->control.stop_bpstat)
 	  && stopped_by_watchpoint)
 	fprintf_unfiltered (gdb_stdlog,
@@ -4245,7 +4213,7 @@ handle_inferior_event (struct execution_control_state *ecs)
          be necessary for call dummies on a non-executable stack on
          SPARC.  */
 
-      if (ecs->event_thread->suspend.stop_signal == TARGET_SIGNAL_TRAP)
+      if (ecs->event_thread->suspend.stop_signal == GDB_SIGNAL_TRAP)
 	ecs->random_signal
 	  = !(bpstat_explains_signal (ecs->event_thread->control.stop_bpstat)
 	      || stopped_by_watchpoint
@@ -4258,7 +4226,7 @@ handle_inferior_event (struct execution_control_state *ecs)
 	  ecs->random_signal = !bpstat_explains_signal
 				     (ecs->event_thread->control.stop_bpstat);
 	  if (!ecs->random_signal)
-	    ecs->event_thread->suspend.stop_signal = TARGET_SIGNAL_TRAP;
+	    ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_TRAP;
 	}
     }
 
@@ -4316,7 +4284,7 @@ process_event_stop_test:
 
       /* Clear the signal if it should not be passed.  */
       if (signal_program[ecs->event_thread->suspend.stop_signal] == 0)
-	ecs->event_thread->suspend.stop_signal = TARGET_SIGNAL_0;
+	ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_0;
 
       if (ecs->event_thread->prev_pc == stop_pc
 	  && ecs->event_thread->control.trap_expected
@@ -4346,7 +4314,7 @@ process_event_stop_test:
 	}
 
       if (ecs->event_thread->control.step_range_end != 0
-	  && ecs->event_thread->suspend.stop_signal != TARGET_SIGNAL_0
+	  && ecs->event_thread->suspend.stop_signal != GDB_SIGNAL_0
 	  && (ecs->event_thread->control.step_range_start <= stop_pc
 	      && stop_pc < ecs->event_thread->control.step_range_end)
 	  && frame_id_eq (get_stack_frame_id (frame),
@@ -4380,104 +4348,116 @@ process_event_stop_test:
 	 (leaving the inferior at the step-resume-breakpoint without
 	 actually executing it).  Either way continue until the
 	 breakpoint is really hit.  */
-      keep_going (ecs);
-      return;
     }
+  else
+    {
+      /* Handle cases caused by hitting a breakpoint.  */
 
-  /* Handle cases caused by hitting a breakpoint.  */
-  {
-    CORE_ADDR jmp_buf_pc;
-    struct bpstat_what what;
+      CORE_ADDR jmp_buf_pc;
+      struct bpstat_what what;
 
-    what = bpstat_what (ecs->event_thread->control.stop_bpstat);
+      what = bpstat_what (ecs->event_thread->control.stop_bpstat);
 
-    if (what.call_dummy)
-      {
-	stop_stack_dummy = what.call_dummy;
-      }
+      if (what.call_dummy)
+	{
+	  stop_stack_dummy = what.call_dummy;
+	}
 
-    /* If we hit an internal event that triggers symbol changes, the
-       current frame will be invalidated within bpstat_what (e.g., if
-       we hit an internal solib event).  Re-fetch it.  */
-    frame = get_current_frame ();
-    gdbarch = get_frame_arch (frame);
+      /* If we hit an internal event that triggers symbol changes, the
+	 current frame will be invalidated within bpstat_what (e.g.,
+	 if we hit an internal solib event).  Re-fetch it.  */
+      frame = get_current_frame ();
+      gdbarch = get_frame_arch (frame);
 
-    switch (what.main_action)
-      {
-      case BPSTAT_WHAT_SET_LONGJMP_RESUME:
-	/* If we hit the breakpoint at longjmp while stepping, we
-	   install a momentary breakpoint at the target of the
-	   jmp_buf.  */
+      switch (what.main_action)
+	{
+	case BPSTAT_WHAT_SET_LONGJMP_RESUME:
+	  /* If we hit the breakpoint at longjmp while stepping, we
+	     install a momentary breakpoint at the target of the
+	     jmp_buf.  */
 
-	if (debug_infrun)
-	  fprintf_unfiltered (gdb_stdlog,
-			      "infrun: BPSTAT_WHAT_SET_LONGJMP_RESUME\n");
+	  if (debug_infrun)
+	    fprintf_unfiltered (gdb_stdlog,
+				"infrun: BPSTAT_WHAT_SET_LONGJMP_RESUME\n");
 
-	ecs->event_thread->stepping_over_breakpoint = 1;
+	  ecs->event_thread->stepping_over_breakpoint = 1;
 
-	if (what.is_longjmp)
-	  {
-	    if (!gdbarch_get_longjmp_target_p (gdbarch)
-		|| !gdbarch_get_longjmp_target (gdbarch,
-						frame, &jmp_buf_pc))
-	      {
-		if (debug_infrun)
-		  fprintf_unfiltered (gdb_stdlog,
-				      "infrun: BPSTAT_WHAT_SET_LONGJMP_RESUME "
-				      "(!gdbarch_get_longjmp_target)\n");
-		keep_going (ecs);
-		return;
-	      }
+	  if (what.is_longjmp)
+	    {
+	      struct value *arg_value;
+
+	      /* If we set the longjmp breakpoint via a SystemTap
+		 probe, then use it to extract the arguments.  The
+		 destination PC is the third argument to the
+		 probe.  */
+	      arg_value = probe_safe_evaluate_at_pc (frame, 2);
+	      if (arg_value)
+		jmp_buf_pc = value_as_address (arg_value);
+	      else if (!gdbarch_get_longjmp_target_p (gdbarch)
+		       || !gdbarch_get_longjmp_target (gdbarch,
+						       frame, &jmp_buf_pc))
+		{
+		  if (debug_infrun)
+		    fprintf_unfiltered (gdb_stdlog,
+					"infrun: BPSTAT_WHAT_SET_LONGJMP_RESUME "
+					"(!gdbarch_get_longjmp_target)\n");
+		  keep_going (ecs);
+		  return;
+		}
 
-	    /* We're going to replace the current step-resume breakpoint
-	       with a longjmp-resume breakpoint.  */
-	    delete_step_resume_breakpoint (ecs->event_thread);
+	      /* Insert a breakpoint at resume address.  */
+	      insert_longjmp_resume_breakpoint (gdbarch, jmp_buf_pc);
+	    }
+	  else
+	    check_exception_resume (ecs, frame);
+	  keep_going (ecs);
+	  return;
 
-	    /* Insert a breakpoint at resume address.  */
-	    insert_longjmp_resume_breakpoint (gdbarch, jmp_buf_pc);
-	  }
-	else
+	case BPSTAT_WHAT_CLEAR_LONGJMP_RESUME:
 	  {
-	    struct symbol *func = get_frame_function (frame);
-
-	    if (func)
-	      check_exception_resume (ecs, frame, func);
-	  }
-	keep_going (ecs);
-	return;
-
-      case BPSTAT_WHAT_CLEAR_LONGJMP_RESUME:
-        if (debug_infrun)
-	  fprintf_unfiltered (gdb_stdlog,
-			      "infrun: BPSTAT_WHAT_CLEAR_LONGJMP_RESUME\n");
+	    struct frame_info *init_frame;
 
-	if (what.is_longjmp)
-	  {
-	    gdb_assert (ecs->event_thread->control.step_resume_breakpoint
-			!= NULL);
-	    delete_step_resume_breakpoint (ecs->event_thread);
-	  }
-	else
-	  {
 	    /* There are several cases to consider.
 
 	       1. The initiating frame no longer exists.  In this case
-	       we must stop, because the exception has gone too far.
+	       we must stop, because the exception or longjmp has gone
+	       too far.
 
 	       2. The initiating frame exists, and is the same as the
-	       current frame.  We stop, because the exception has been
-	       caught.
+	       current frame.  We stop, because the exception or
+	       longjmp has been caught.
 
 	       3. The initiating frame exists and is different from
-	       the current frame.  This means the exception has been
-	       caught beneath the initiating frame, so keep going.  */
-	    struct frame_info *init_frame
-	      = frame_find_by_id (ecs->event_thread->initiating_frame);
+	       the current frame.  This means the exception or longjmp
+	       has been caught beneath the initiating frame, so keep
+	       going.
+
+	       4. longjmp breakpoint has been placed just to protect
+	       against stale dummy frames and user is not interested
+	       in stopping around longjmps.  */
+
+	    if (debug_infrun)
+	      fprintf_unfiltered (gdb_stdlog,
+				  "infrun: BPSTAT_WHAT_CLEAR_LONGJMP_RESUME\n");
 
 	    gdb_assert (ecs->event_thread->control.exception_resume_breakpoint
 			!= NULL);
 	    delete_exception_resume_breakpoint (ecs->event_thread);
 
+	    if (what.is_longjmp)
+	      {
+		check_longjmp_breakpoint_for_call_dummy (ecs->event_thread->num);
+
+		if (!frame_id_p (ecs->event_thread->initiating_frame))
+		  {
+		    /* Case 4.  */
+		    keep_going (ecs);
+		    return;
+		  }
+	      }
+
+	    init_frame = frame_find_by_id (ecs->event_thread->initiating_frame);
+
 	    if (init_frame)
 	      {
 		struct frame_id current_id
@@ -4498,97 +4478,97 @@ process_event_stop_test:
 	    /* For Cases 1 and 2, remove the step-resume breakpoint,
 	       if it exists.  */
 	    delete_step_resume_breakpoint (ecs->event_thread);
+
+	    ecs->event_thread->control.stop_step = 1;
+	    print_end_stepping_range_reason ();
+	    stop_stepping (ecs);
 	  }
+	  return;
 
-	ecs->event_thread->control.stop_step = 1;
-	print_end_stepping_range_reason ();
-	stop_stepping (ecs);
-	return;
-
-      case BPSTAT_WHAT_SINGLE:
-        if (debug_infrun)
-	  fprintf_unfiltered (gdb_stdlog, "infrun: BPSTAT_WHAT_SINGLE\n");
-	ecs->event_thread->stepping_over_breakpoint = 1;
-	/* Still need to check other stuff, at least the case
-	   where we are stepping and step out of the right range.  */
-	break;
+	case BPSTAT_WHAT_SINGLE:
+	  if (debug_infrun)
+	    fprintf_unfiltered (gdb_stdlog, "infrun: BPSTAT_WHAT_SINGLE\n");
+	  ecs->event_thread->stepping_over_breakpoint = 1;
+	  /* Still need to check other stuff, at least the case where
+	     we are stepping and step out of the right range.  */
+	  break;
 
-      case BPSTAT_WHAT_STEP_RESUME:
-        if (debug_infrun)
-	  fprintf_unfiltered (gdb_stdlog, "infrun: BPSTAT_WHAT_STEP_RESUME\n");
+	case BPSTAT_WHAT_STEP_RESUME:
+	  if (debug_infrun)
+	    fprintf_unfiltered (gdb_stdlog, "infrun: BPSTAT_WHAT_STEP_RESUME\n");
 
-	delete_step_resume_breakpoint (ecs->event_thread);
-	if (ecs->event_thread->control.proceed_to_finish
-	    && execution_direction == EXEC_REVERSE)
-	  {
-	    struct thread_info *tp = ecs->event_thread;
-
-	    /* We are finishing a function in reverse, and just hit
-	       the step-resume breakpoint at the start address of the
-	       function, and we're almost there -- just need to back
-	       up by one more single-step, which should take us back
-	       to the function call.  */
-	    tp->control.step_range_start = tp->control.step_range_end = 1;
-	    keep_going (ecs);
-	    return;
-	  }
-	fill_in_stop_func (gdbarch, ecs);
-	if (stop_pc == ecs->stop_func_start
-	    && execution_direction == EXEC_REVERSE)
-	  {
-	    /* We are stepping over a function call in reverse, and
-	       just hit the step-resume breakpoint at the start
-	       address of the function.  Go back to single-stepping,
-	       which should take us back to the function call.  */
-	    ecs->event_thread->stepping_over_breakpoint = 1;
-	    keep_going (ecs);
-	    return;
-	  }
-	break;
+	  delete_step_resume_breakpoint (ecs->event_thread);
+	  if (ecs->event_thread->control.proceed_to_finish
+	      && execution_direction == EXEC_REVERSE)
+	    {
+	      struct thread_info *tp = ecs->event_thread;
+
+	      /* We are finishing a function in reverse, and just hit
+		 the step-resume breakpoint at the start address of
+		 the function, and we're almost there -- just need to
+		 back up by one more single-step, which should take us
+		 back to the function call.  */
+	      tp->control.step_range_start = tp->control.step_range_end = 1;
+	      keep_going (ecs);
+	      return;
+	    }
+	  fill_in_stop_func (gdbarch, ecs);
+	  if (stop_pc == ecs->stop_func_start
+	      && execution_direction == EXEC_REVERSE)
+	    {
+	      /* We are stepping over a function call in reverse, and
+		 just hit the step-resume breakpoint at the start
+		 address of the function.  Go back to single-stepping,
+		 which should take us back to the function call.  */
+	      ecs->event_thread->stepping_over_breakpoint = 1;
+	      keep_going (ecs);
+	      return;
+	    }
+	  break;
 
-      case BPSTAT_WHAT_STOP_NOISY:
-        if (debug_infrun)
-	  fprintf_unfiltered (gdb_stdlog, "infrun: BPSTAT_WHAT_STOP_NOISY\n");
-	stop_print_frame = 1;
+	case BPSTAT_WHAT_STOP_NOISY:
+	  if (debug_infrun)
+	    fprintf_unfiltered (gdb_stdlog, "infrun: BPSTAT_WHAT_STOP_NOISY\n");
+	  stop_print_frame = 1;
 
-	/* We are about to nuke the step_resume_breakpointt via the
-	   cleanup chain, so no need to worry about it here.  */
+	  /* We are about to nuke the step_resume_breakpointt via the
+	     cleanup chain, so no need to worry about it here.  */
 
-	stop_stepping (ecs);
-	return;
+	  stop_stepping (ecs);
+	  return;
 
-      case BPSTAT_WHAT_STOP_SILENT:
-        if (debug_infrun)
-	  fprintf_unfiltered (gdb_stdlog, "infrun: BPSTAT_WHAT_STOP_SILENT\n");
-	stop_print_frame = 0;
+	case BPSTAT_WHAT_STOP_SILENT:
+	  if (debug_infrun)
+	    fprintf_unfiltered (gdb_stdlog, "infrun: BPSTAT_WHAT_STOP_SILENT\n");
+	  stop_print_frame = 0;
 
-	/* We are about to nuke the step_resume_breakpoin via the
-	   cleanup chain, so no need to worry about it here.  */
+	  /* We are about to nuke the step_resume_breakpoin via the
+	     cleanup chain, so no need to worry about it here.  */
 
-	stop_stepping (ecs);
-	return;
+	  stop_stepping (ecs);
+	  return;
 
-      case BPSTAT_WHAT_HP_STEP_RESUME:
-        if (debug_infrun)
-	  fprintf_unfiltered (gdb_stdlog, "infrun: BPSTAT_WHAT_HP_STEP_RESUME\n");
+	case BPSTAT_WHAT_HP_STEP_RESUME:
+	  if (debug_infrun)
+	    fprintf_unfiltered (gdb_stdlog, "infrun: BPSTAT_WHAT_HP_STEP_RESUME\n");
 
-	delete_step_resume_breakpoint (ecs->event_thread);
-	if (ecs->event_thread->step_after_step_resume_breakpoint)
-	  {
-	    /* Back when the step-resume breakpoint was inserted, we
-	       were trying to single-step off a breakpoint.  Go back
-	       to doing that.  */
-	    ecs->event_thread->step_after_step_resume_breakpoint = 0;
-	    ecs->event_thread->stepping_over_breakpoint = 1;
-	    keep_going (ecs);
-	    return;
-	  }
-	break;
+	  delete_step_resume_breakpoint (ecs->event_thread);
+	  if (ecs->event_thread->step_after_step_resume_breakpoint)
+	    {
+	      /* Back when the step-resume breakpoint was inserted, we
+		 were trying to single-step off a breakpoint.  Go back
+		 to doing that.  */
+	      ecs->event_thread->step_after_step_resume_breakpoint = 0;
+	      ecs->event_thread->stepping_over_breakpoint = 1;
+	      keep_going (ecs);
+	      return;
+	    }
+	  break;
 
-      case BPSTAT_WHAT_KEEP_CHECKING:
-	break;
-      }
-  }
+	case BPSTAT_WHAT_KEEP_CHECKING:
+	  break;
+	}
+    }
 
   /* We come here if we hit a breakpoint but should not
      stop for it.  Possibly we also were stepping
@@ -4610,7 +4590,7 @@ process_event_stop_test:
 	     breakpoint, and we simply need to step over that breakpoint
 	     to get it going again, do that first.  */
 	  if ((ecs->event_thread->control.trap_expected
-	       && ecs->event_thread->suspend.stop_signal != TARGET_SIGNAL_TRAP)
+	       && ecs->event_thread->suspend.stop_signal != GDB_SIGNAL_TRAP)
 	      || ecs->event_thread->stepping_over_breakpoint)
 	    {
 	      keep_going (ecs);
@@ -4794,6 +4774,48 @@ process_event_stop_test:
       return;
     }
 
+  /* If we're in the return path from a shared library trampoline,
+     we want to proceed through the trampoline when stepping.  */
+  /* macro/2012-04-25: This needs to come before the subroutine
+     call check below as on some targets return trampolines look
+     like subroutine calls (MIPS16 return thunks).  */
+  if (gdbarch_in_solib_return_trampoline (gdbarch,
+					  stop_pc, ecs->stop_func_name)
+      && ecs->event_thread->control.step_over_calls != STEP_OVER_NONE)
+    {
+      /* Determine where this trampoline returns.  */
+      CORE_ADDR real_stop_pc;
+
+      real_stop_pc = gdbarch_skip_trampoline_code (gdbarch, frame, stop_pc);
+
+      if (debug_infrun)
+	 fprintf_unfiltered (gdb_stdlog,
+			     "infrun: stepped into solib return tramp\n");
+
+      /* Only proceed through if we know where it's going.  */
+      if (real_stop_pc)
+	{
+	  /* And put the step-breakpoint there and go until there.  */
+	  struct symtab_and_line sr_sal;
+
+	  init_sal (&sr_sal);	/* initialize to zeroes */
+	  sr_sal.pc = real_stop_pc;
+	  sr_sal.section = find_pc_overlay (sr_sal.pc);
+	  sr_sal.pspace = get_frame_program_space (frame);
+
+	  /* Do not specify what the fp should be when we stop since
+	     on some machines the prologue is where the new fp value
+	     is established.  */
+	  insert_step_resume_breakpoint_at_sal (gdbarch,
+						sr_sal, null_frame_id);
+
+	  /* Restart without fiddling with the step ranges or
+	     other state.  */
+	  keep_going (ecs);
+	  return;
+	}
+    }
+
   /* Check for subroutine calls.  The check for the current frame
      equalling the step ID is not necessary - the check of the
      previous frame's ID is sufficient - but it is a common case and
@@ -5004,44 +5026,6 @@ process_event_stop_test:
 	}
     }
 
-  /* If we're in the return path from a shared library trampoline,
-     we want to proceed through the trampoline when stepping.  */
-  if (gdbarch_in_solib_return_trampoline (gdbarch,
-					  stop_pc, ecs->stop_func_name))
-    {
-      /* Determine where this trampoline returns.  */
-      CORE_ADDR real_stop_pc;
-
-      real_stop_pc = gdbarch_skip_trampoline_code (gdbarch, frame, stop_pc);
-
-      if (debug_infrun)
-	 fprintf_unfiltered (gdb_stdlog,
-			     "infrun: stepped into solib return tramp\n");
-
-      /* Only proceed through if we know where it's going.  */
-      if (real_stop_pc)
-	{
-	  /* And put the step-breakpoint there and go until there.  */
-	  struct symtab_and_line sr_sal;
-
-	  init_sal (&sr_sal);	/* initialize to zeroes */
-	  sr_sal.pc = real_stop_pc;
-	  sr_sal.section = find_pc_overlay (sr_sal.pc);
-	  sr_sal.pspace = get_frame_program_space (frame);
-
-	  /* Do not specify what the fp should be when we stop since
-	     on some machines the prologue is where the new fp value
-	     is established.  */
-	  insert_step_resume_breakpoint_at_sal (gdbarch,
-						sr_sal, null_frame_id);
-
-	  /* Restart without fiddling with the step ranges or
-	     other state.  */
-	  keep_going (ecs);
-	  return;
-	}
-    }
-
   stop_pc_sal = find_pc_line (stop_pc, 0);
 
   /* NOTE: tausq/2004-05-24: This if block used to be done before all
@@ -5468,17 +5452,17 @@ insert_step_resume_breakpoint_at_caller (struct frame_info *next_frame)
 static void
 insert_longjmp_resume_breakpoint (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
-  /* There should never be more than one step-resume or longjmp-resume
-     breakpoint per thread, so we should never be setting a new
+  /* There should never be more than one longjmp-resume breakpoint per
+     thread, so we should never be setting a new
      longjmp_resume_breakpoint when one is already active.  */
-  gdb_assert (inferior_thread ()->control.step_resume_breakpoint == NULL);
+  gdb_assert (inferior_thread ()->control.exception_resume_breakpoint == NULL);
 
   if (debug_infrun)
     fprintf_unfiltered (gdb_stdlog,
 			"infrun: inserting longjmp-resume breakpoint at %s\n",
 			paddress (gdbarch, pc));
 
-  inferior_thread ()->control.step_resume_breakpoint =
+  inferior_thread ()->control.exception_resume_breakpoint =
     set_momentary_breakpoint_at_pc (gdbarch, pc, bp_longjmp_resume);
 }
 
@@ -5494,7 +5478,7 @@ insert_exception_resume_breakpoint (struct thread_info *tp,
 				    struct frame_info *frame,
 				    struct symbol *sym)
 {
-  struct gdb_exception e;
+  volatile struct gdb_exception e;
 
   /* We want to ignore errors here.  */
   TRY_CATCH (e, RETURN_MASK_ERROR)
@@ -5518,26 +5502,80 @@ insert_exception_resume_breakpoint (struct thread_info *tp,
 
 	  bp = set_momentary_breakpoint_at_pc (get_frame_arch (frame),
 					       handler, bp_exception_resume);
+
+	  /* set_momentary_breakpoint_at_pc invalidates FRAME.  */
+	  frame = NULL;
+
 	  bp->thread = tp->num;
 	  inferior_thread ()->control.exception_resume_breakpoint = bp;
 	}
     }
 }
 
+/* A helper for check_exception_resume that sets an
+   exception-breakpoint based on a SystemTap probe.  */
+
+static void
+insert_exception_resume_from_probe (struct thread_info *tp,
+				    const struct probe *probe,
+				    struct objfile *objfile,
+				    struct frame_info *frame)
+{
+  struct value *arg_value;
+  CORE_ADDR handler;
+  struct breakpoint *bp;
+
+  arg_value = probe_safe_evaluate_at_pc (frame, 1);
+  if (!arg_value)
+    return;
+
+  handler = value_as_address (arg_value);
+
+  if (debug_infrun)
+    fprintf_unfiltered (gdb_stdlog,
+			"infrun: exception resume at %s\n",
+			paddress (get_objfile_arch (objfile),
+				  handler));
+
+  bp = set_momentary_breakpoint_at_pc (get_frame_arch (frame),
+				       handler, bp_exception_resume);
+  bp->thread = tp->num;
+  inferior_thread ()->control.exception_resume_breakpoint = bp;
+}
+
 /* This is called when an exception has been intercepted.  Check to
    see whether the exception's destination is of interest, and if so,
    set an exception resume breakpoint there.  */
 
 static void
 check_exception_resume (struct execution_control_state *ecs,
-			struct frame_info *frame, struct symbol *func)
-{
-  struct gdb_exception e;
+			struct frame_info *frame)
+{
+  volatile struct gdb_exception e;
+  struct objfile *objfile;
+  const struct probe *probe;
+  struct symbol *func;
+
+  /* First see if this exception unwinding breakpoint was set via a
+     SystemTap probe point.  If so, the probe has two arguments: the
+     CFA and the HANDLER.  We ignore the CFA, extract the handler, and
+     set a breakpoint there.  */
+  probe = find_probe_by_pc (get_frame_pc (frame), &objfile);
+  if (probe)
+    {
+      insert_exception_resume_from_probe (ecs->event_thread, probe,
+					  objfile, frame);
+      return;
+    }
+
+  func = get_frame_function (frame);
+  if (!func)
+    return;
 
   TRY_CATCH (e, RETURN_MASK_ERROR)
     {
       struct block *b;
-      struct dict_iterator iter;
+      struct block_iterator iter;
       struct symbol *sym;
       int argno = 0;
 
@@ -5602,7 +5640,7 @@ keep_going (struct execution_control_state *ecs)
      inferior and not return to debugger.  */
 
   if (ecs->event_thread->control.trap_expected
-      && ecs->event_thread->suspend.stop_signal != TARGET_SIGNAL_TRAP)
+      && ecs->event_thread->suspend.stop_signal != GDB_SIGNAL_TRAP)
     {
       /* We took a signal (which we are supposed to pass through to
 	 the inferior, else we'd not get here) and we haven't yet
@@ -5639,7 +5677,7 @@ keep_going (struct execution_control_state *ecs)
 	}
       else
 	{
-	  struct gdb_exception e;
+	  volatile struct gdb_exception e;
 
 	  /* Stop stepping when inserting breakpoints
 	     has failed.  */
@@ -5670,9 +5708,9 @@ keep_going (struct execution_control_state *ecs)
          simulator; the simulator then delivers the hardware
          equivalent of a SIGNAL_TRAP to the program being debugged.  */
 
-      if (ecs->event_thread->suspend.stop_signal == TARGET_SIGNAL_TRAP
+      if (ecs->event_thread->suspend.stop_signal == GDB_SIGNAL_TRAP
 	  && !signal_program[ecs->event_thread->suspend.stop_signal])
-	ecs->event_thread->suspend.stop_signal = TARGET_SIGNAL_0;
+	ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_0;
 
       discard_cleanups (old_cleanups);
       resume (currently_stepping (ecs->event_thread),
@@ -5723,7 +5761,7 @@ print_end_stepping_range_reason (void)
 /* The inferior was terminated by a signal, print why it stopped.  */
 
 static void
-print_signal_exited_reason (enum target_signal siggnal)
+print_signal_exited_reason (enum gdb_signal siggnal)
 {
   struct ui_out *uiout = current_uiout;
 
@@ -5734,12 +5772,12 @@ print_signal_exited_reason (enum target_signal siggnal)
   ui_out_text (uiout, "\nProgram terminated with signal ");
   annotate_signal_name ();
   ui_out_field_string (uiout, "signal-name",
-		       target_signal_to_name (siggnal));
+		       gdb_signal_to_name (siggnal));
   annotate_signal_name_end ();
   ui_out_text (uiout, ", ");
   annotate_signal_string ();
   ui_out_field_string (uiout, "signal-meaning",
-		       target_signal_to_string (siggnal));
+		       gdb_signal_to_string (siggnal));
   annotate_signal_string_end ();
   ui_out_text (uiout, ".\n");
   ui_out_text (uiout, "The program no longer exists.\n");
@@ -5787,13 +5825,13 @@ print_exited_reason (int exitstatus)
    tells us to print about it.  */
 
 static void
-print_signal_received_reason (enum target_signal siggnal)
+print_signal_received_reason (enum gdb_signal siggnal)
 {
   struct ui_out *uiout = current_uiout;
 
   annotate_signal ();
 
-  if (siggnal == TARGET_SIGNAL_0 && !ui_out_is_mi_like_p (uiout))
+  if (siggnal == GDB_SIGNAL_0 && !ui_out_is_mi_like_p (uiout))
     {
       struct thread_info *t = inferior_thread ();
 
@@ -5811,12 +5849,12 @@ print_signal_received_reason (enum target_signal siggnal)
 	ui_out_field_string
 	  (uiout, "reason", async_reason_lookup (EXEC_ASYNC_SIGNAL_RECEIVED));
       ui_out_field_string (uiout, "signal-name",
-			   target_signal_to_name (siggnal));
+			   gdb_signal_to_name (siggnal));
       annotate_signal_name_end ();
       ui_out_text (uiout, ", ");
       annotate_signal_string ();
       ui_out_field_string (uiout, "signal-meaning",
-			   target_signal_to_string (siggnal));
+			   gdb_signal_to_string (siggnal));
       annotate_signal_string_end ();
     }
   ui_out_text (uiout, ".\n");
@@ -6068,7 +6106,8 @@ done:
       || last.kind == TARGET_WAITKIND_SIGNALLED
       || last.kind == TARGET_WAITKIND_EXITED
       || last.kind == TARGET_WAITKIND_NO_RESUMED
-      || (!inferior_thread ()->step_multi
+      || (!(inferior_thread ()->step_multi
+	    && inferior_thread ()->control.stop_step)
 	  && !(inferior_thread ()->control.stop_bpstat
 	       && inferior_thread ()->control.proceed_to_finish)
 	  && !inferior_thread ()->control.in_infcall))
@@ -6125,7 +6164,7 @@ signal_cache_update (int signo)
 {
   if (signo == -1)
     {
-      for (signo = 0; signo < (int) TARGET_SIGNAL_LAST; signo++)
+      for (signo = 0; signo < (int) GDB_SIGNAL_LAST; signo++)
 	signal_cache_update (signo);
 
       return;
@@ -6174,9 +6213,9 @@ sig_print_header (void)
 }
 
 static void
-sig_print_info (enum target_signal oursig)
+sig_print_info (enum gdb_signal oursig)
 {
-  const char *name = target_signal_to_name (oursig);
+  const char *name = gdb_signal_to_name (oursig);
   int name_padding = 13 - strlen (name);
 
   if (name_padding <= 0)
@@ -6187,7 +6226,7 @@ sig_print_info (enum target_signal oursig)
   printf_filtered ("%s\t", signal_stop[oursig] ? "Yes" : "No");
   printf_filtered ("%s\t", signal_print[oursig] ? "Yes" : "No");
   printf_filtered ("%s\t\t", signal_program[oursig] ? "Yes" : "No");
-  printf_filtered ("%s\n", target_signal_to_string (oursig));
+  printf_filtered ("%s\n", gdb_signal_to_string (oursig));
 }
 
 /* Specify how various signals in the inferior should be handled.  */
@@ -6198,7 +6237,7 @@ handle_command (char *args, int from_tty)
   char **argv;
   int digits, wordlen;
   int sigfirst, signum, siglast;
-  enum target_signal oursig;
+  enum gdb_signal oursig;
   int allsigs;
   int nsigs;
   unsigned char *sigs;
@@ -6211,7 +6250,7 @@ handle_command (char *args, int from_tty)
 
   /* Allocate and zero an array of flags for which signals to handle.  */
 
-  nsigs = (int) TARGET_SIGNAL_LAST;
+  nsigs = (int) GDB_SIGNAL_LAST;
   sigs = (unsigned char *) alloca (nsigs);
   memset (sigs, 0, nsigs);
 
@@ -6285,11 +6324,11 @@ handle_command (char *args, int from_tty)
 	     SIGHUP, SIGINT, SIGALRM, etc. will work right anyway.  */
 
 	  sigfirst = siglast = (int)
-	    target_signal_from_command (atoi (*argv));
+	    gdb_signal_from_command (atoi (*argv));
 	  if ((*argv)[digits] == '-')
 	    {
 	      siglast = (int)
-		target_signal_from_command (atoi ((*argv) + digits + 1));
+		gdb_signal_from_command (atoi ((*argv) + digits + 1));
 	    }
 	  if (sigfirst > siglast)
 	    {
@@ -6301,8 +6340,8 @@ handle_command (char *args, int from_tty)
 	}
       else
 	{
-	  oursig = target_signal_from_name (*argv);
-	  if (oursig != TARGET_SIGNAL_UNKNOWN)
+	  oursig = gdb_signal_from_name (*argv);
+	  if (oursig != GDB_SIGNAL_UNKNOWN)
 	    {
 	      sigfirst = siglast = (int) oursig;
 	    }
@@ -6318,15 +6357,15 @@ handle_command (char *args, int from_tty)
 
       for (signum = sigfirst; signum >= 0 && signum <= siglast; signum++)
 	{
-	  switch ((enum target_signal) signum)
+	  switch ((enum gdb_signal) signum)
 	    {
-	    case TARGET_SIGNAL_TRAP:
-	    case TARGET_SIGNAL_INT:
+	    case GDB_SIGNAL_TRAP:
+	    case GDB_SIGNAL_INT:
 	      if (!allsigs && !sigs[signum])
 		{
 		  if (query (_("%s is used by the debugger.\n\
 Are you sure you want to change it? "),
-			     target_signal_to_name ((enum target_signal) signum)))
+			     gdb_signal_to_name ((enum gdb_signal) signum)))
 		    {
 		      sigs[signum] = 1;
 		    }
@@ -6337,9 +6376,9 @@ Are you sure you want to change it? "),
 		    }
 		}
 	      break;
-	    case TARGET_SIGNAL_0:
-	    case TARGET_SIGNAL_DEFAULT:
-	    case TARGET_SIGNAL_UNKNOWN:
+	    case GDB_SIGNAL_0:
+	    case GDB_SIGNAL_DEFAULT:
+	    case GDB_SIGNAL_UNKNOWN:
 	      /* Make sure that "all" doesn't print these.  */
 	      break;
 	    default:
@@ -6355,7 +6394,8 @@ Are you sure you want to change it? "),
     if (sigs[signum])
       {
 	signal_cache_update (-1);
-	target_pass_signals ((int) TARGET_SIGNAL_LAST, signal_pass);
+	target_pass_signals ((int) GDB_SIGNAL_LAST, signal_pass);
+	target_program_signals ((int) GDB_SIGNAL_LAST, signal_program);
 
 	if (from_tty)
 	  {
@@ -6395,9 +6435,9 @@ xdb_handle_command (char *args, int from_tty)
       if (argBuf)
 	{
 	  int validFlag = 1;
-	  enum target_signal oursig;
+	  enum gdb_signal oursig;
 
-	  oursig = target_signal_from_name (argv[0]);
+	  oursig = gdb_signal_from_name (argv[0]);
 	  memset (argBuf, 0, bufLen);
 	  if (strcmp (argv[1], "Q") == 0)
 	    sprintf (argBuf, "%s %s", argv[0], "noprint");
@@ -6438,6 +6478,15 @@ xdb_handle_command (char *args, int from_tty)
   do_cleanups (old_chain);
 }
 
+enum gdb_signal
+gdb_signal_from_command (int num)
+{
+  if (num >= 1 && num <= 15)
+    return (enum gdb_signal) num;
+  error (_("Only signals 1-15 are valid as numeric signals.\n\
+Use \"info signals\" for a list of symbolic signals."));
+}
+
 /* Print current contents of the tables set by the handle command.
    It is possible we should just be printing signals actually used
    by the current target (but for things to work right when switching
@@ -6446,19 +6495,19 @@ xdb_handle_command (char *args, int from_tty)
 static void
 signals_info (char *signum_exp, int from_tty)
 {
-  enum target_signal oursig;
+  enum gdb_signal oursig;
 
   sig_print_header ();
 
   if (signum_exp)
     {
       /* First see if this is a symbol name.  */
-      oursig = target_signal_from_name (signum_exp);
-      if (oursig == TARGET_SIGNAL_UNKNOWN)
+      oursig = gdb_signal_from_name (signum_exp);
+      if (oursig == GDB_SIGNAL_UNKNOWN)
 	{
 	  /* No, try numeric.  */
 	  oursig =
-	    target_signal_from_command (parse_and_eval_long (signum_exp));
+	    gdb_signal_from_command (parse_and_eval_long (signum_exp));
 	}
       sig_print_info (oursig);
       return;
@@ -6466,14 +6515,14 @@ signals_info (char *signum_exp, int from_tty)
 
   printf_filtered ("\n");
   /* These ugly casts brought to you by the native VAX compiler.  */
-  for (oursig = TARGET_SIGNAL_FIRST;
-       (int) oursig < (int) TARGET_SIGNAL_LAST;
-       oursig = (enum target_signal) ((int) oursig + 1))
+  for (oursig = GDB_SIGNAL_FIRST;
+       (int) oursig < (int) GDB_SIGNAL_LAST;
+       oursig = (enum gdb_signal) ((int) oursig + 1))
     {
       QUIT;
 
-      if (oursig != TARGET_SIGNAL_UNKNOWN
-	  && oursig != TARGET_SIGNAL_DEFAULT && oursig != TARGET_SIGNAL_0)
+      if (oursig != GDB_SIGNAL_UNKNOWN
+	  && oursig != GDB_SIGNAL_DEFAULT && oursig != GDB_SIGNAL_0)
 	sig_print_info (oursig);
     }
 
@@ -6563,7 +6612,8 @@ static const struct lval_funcs siginfo_value_funcs =
    if there's no object available.  */
 
 static struct value *
-siginfo_make_value (struct gdbarch *gdbarch, struct internalvar *var)
+siginfo_make_value (struct gdbarch *gdbarch, struct internalvar *var,
+		    void *ignore)
 {
   if (target_has_stack
       && !ptid_equal (inferior_ptid, null_ptid)
@@ -6587,7 +6637,9 @@ siginfo_make_value (struct gdbarch *gdbarch, struct internalvar *var)
 struct infcall_suspend_state
 {
   struct thread_suspend_state thread_suspend;
+#if 0 /* Currently unused and empty structures are not valid C.  */
   struct inferior_suspend_state inferior_suspend;
+#endif
 
   /* Other fields:  */
   CORE_ADDR stop_pc;
@@ -6641,11 +6693,13 @@ save_infcall_suspend_state (void)
     }
 
   inf_state->thread_suspend = tp->suspend;
+#if 0 /* Currently unused and empty structures are not valid C.  */
   inf_state->inferior_suspend = inf->suspend;
+#endif
 
   /* run_inferior_call will not use the signal due to its `proceed' call with
-     TARGET_SIGNAL_0 anyway.  */
-  tp->suspend.stop_signal = TARGET_SIGNAL_0;
+     GDB_SIGNAL_0 anyway.  */
+  tp->suspend.stop_signal = GDB_SIGNAL_0;
 
   inf_state->stop_pc = stop_pc;
 
@@ -6665,7 +6719,9 @@ restore_infcall_suspend_state (struct infcall_suspend_state *inf_state)
   struct gdbarch *gdbarch = get_regcache_arch (regcache);
 
   tp->suspend = inf_state->thread_suspend;
+#if 0 /* Currently unused and empty structures are not valid C.  */
   inf->suspend = inf_state->inferior_suspend;
+#endif
 
   stop_pc = inf_state->stop_pc;
 
@@ -6860,79 +6916,6 @@ discard_infcall_control_state (struct infcall_control_state *inf_status)
 }
 

 int
-inferior_has_forked (ptid_t pid, ptid_t *child_pid)
-{
-  struct target_waitstatus last;
-  ptid_t last_ptid;
-
-  get_last_target_status (&last_ptid, &last);
-
-  if (last.kind != TARGET_WAITKIND_FORKED)
-    return 0;
-
-  if (!ptid_equal (last_ptid, pid))
-    return 0;
-
-  *child_pid = last.value.related_pid;
-  return 1;
-}
-
-int
-inferior_has_vforked (ptid_t pid, ptid_t *child_pid)
-{
-  struct target_waitstatus last;
-  ptid_t last_ptid;
-
-  get_last_target_status (&last_ptid, &last);
-
-  if (last.kind != TARGET_WAITKIND_VFORKED)
-    return 0;
-
-  if (!ptid_equal (last_ptid, pid))
-    return 0;
-
-  *child_pid = last.value.related_pid;
-  return 1;
-}
-
-int
-inferior_has_execd (ptid_t pid, char **execd_pathname)
-{
-  struct target_waitstatus last;
-  ptid_t last_ptid;
-
-  get_last_target_status (&last_ptid, &last);
-
-  if (last.kind != TARGET_WAITKIND_EXECD)
-    return 0;
-
-  if (!ptid_equal (last_ptid, pid))
-    return 0;
-
-  *execd_pathname = xstrdup (last.value.execd_pathname);
-  return 1;
-}
-
-int
-inferior_has_called_syscall (ptid_t pid, int *syscall_number)
-{
-  struct target_waitstatus last;
-  ptid_t last_ptid;
-
-  get_last_target_status (&last_ptid, &last);
-
-  if (last.kind != TARGET_WAITKIND_SYSCALL_ENTRY &&
-      last.kind != TARGET_WAITKIND_SYSCALL_RETURN)
-    return 0;
-
-  if (!ptid_equal (last_ptid, pid))
-    return 0;
-
-  *syscall_number = last.value.syscall_number;
-  return 1;
-}
-
-int
 ptid_match (ptid_t ptid, ptid_t filter)
 {
   if (ptid_equal (filter, minus_one_ptid))
@@ -6982,7 +6965,7 @@ int execution_direction = EXEC_FORWARD;
 static const char exec_forward[] = "forward";
 static const char exec_reverse[] = "reverse";
 static const char *exec_direction = exec_forward;
-static const char *exec_direction_names[] = {
+static const char *const exec_direction_names[] = {
   exec_forward,
   exec_reverse,
   NULL
@@ -7058,6 +7041,15 @@ show_schedule_multiple (struct ui_file *file, int from_tty,
 			    "of all processes is %s.\n"), value);
 }
 
+/* Implementation of `siginfo' variable.  */
+
+static const struct internalvar_funcs siginfo_funcs =
+{
+  siginfo_make_value,
+  NULL,
+  NULL
+};
+
 void
 _initialize_infrun (void)
 {
@@ -7151,7 +7143,7 @@ leave it stopped or free to run as needed."),
 			   &setlist,
 			   &showlist);
 
-  numsigs = (int) TARGET_SIGNAL_LAST;
+  numsigs = (int) GDB_SIGNAL_LAST;
   signal_stop = (unsigned char *) xmalloc (sizeof (signal_stop[0]) * numsigs);
   signal_print = (unsigned char *)
     xmalloc (sizeof (signal_print[0]) * numsigs);
@@ -7168,39 +7160,39 @@ leave it stopped or free to run as needed."),
 
   /* Signals caused by debugger's own actions
      should not be given to the program afterwards.  */
-  signal_program[TARGET_SIGNAL_TRAP] = 0;
-  signal_program[TARGET_SIGNAL_INT] = 0;
+  signal_program[GDB_SIGNAL_TRAP] = 0;
+  signal_program[GDB_SIGNAL_INT] = 0;
 
   /* Signals that are not errors should not normally enter the debugger.  */
-  signal_stop[TARGET_SIGNAL_ALRM] = 0;
-  signal_print[TARGET_SIGNAL_ALRM] = 0;
-  signal_stop[TARGET_SIGNAL_VTALRM] = 0;
-  signal_print[TARGET_SIGNAL_VTALRM] = 0;
-  signal_stop[TARGET_SIGNAL_PROF] = 0;
-  signal_print[TARGET_SIGNAL_PROF] = 0;
-  signal_stop[TARGET_SIGNAL_CHLD] = 0;
-  signal_print[TARGET_SIGNAL_CHLD] = 0;
-  signal_stop[TARGET_SIGNAL_IO] = 0;
-  signal_print[TARGET_SIGNAL_IO] = 0;
-  signal_stop[TARGET_SIGNAL_POLL] = 0;
-  signal_print[TARGET_SIGNAL_POLL] = 0;
-  signal_stop[TARGET_SIGNAL_URG] = 0;
-  signal_print[TARGET_SIGNAL_URG] = 0;
-  signal_stop[TARGET_SIGNAL_WINCH] = 0;
-  signal_print[TARGET_SIGNAL_WINCH] = 0;
-  signal_stop[TARGET_SIGNAL_PRIO] = 0;
-  signal_print[TARGET_SIGNAL_PRIO] = 0;
+  signal_stop[GDB_SIGNAL_ALRM] = 0;
+  signal_print[GDB_SIGNAL_ALRM] = 0;
+  signal_stop[GDB_SIGNAL_VTALRM] = 0;
+  signal_print[GDB_SIGNAL_VTALRM] = 0;
+  signal_stop[GDB_SIGNAL_PROF] = 0;
+  signal_print[GDB_SIGNAL_PROF] = 0;
+  signal_stop[GDB_SIGNAL_CHLD] = 0;
+  signal_print[GDB_SIGNAL_CHLD] = 0;
+  signal_stop[GDB_SIGNAL_IO] = 0;
+  signal_print[GDB_SIGNAL_IO] = 0;
+  signal_stop[GDB_SIGNAL_POLL] = 0;
+  signal_print[GDB_SIGNAL_POLL] = 0;
+  signal_stop[GDB_SIGNAL_URG] = 0;
+  signal_print[GDB_SIGNAL_URG] = 0;
+  signal_stop[GDB_SIGNAL_WINCH] = 0;
+  signal_print[GDB_SIGNAL_WINCH] = 0;
+  signal_stop[GDB_SIGNAL_PRIO] = 0;
+  signal_print[GDB_SIGNAL_PRIO] = 0;
 
   /* These signals are used internally by user-level thread
      implementations.  (See signal(5) on Solaris.)  Like the above
      signals, a healthy program receives and handles them as part of
      its normal operation.  */
-  signal_stop[TARGET_SIGNAL_LWP] = 0;
-  signal_print[TARGET_SIGNAL_LWP] = 0;
-  signal_stop[TARGET_SIGNAL_WAITING] = 0;
-  signal_print[TARGET_SIGNAL_WAITING] = 0;
-  signal_stop[TARGET_SIGNAL_CANCEL] = 0;
-  signal_print[TARGET_SIGNAL_CANCEL] = 0;
+  signal_stop[GDB_SIGNAL_LWP] = 0;
+  signal_print[GDB_SIGNAL_LWP] = 0;
+  signal_stop[GDB_SIGNAL_WAITING] = 0;
+  signal_print[GDB_SIGNAL_WAITING] = 0;
+  signal_stop[GDB_SIGNAL_CANCEL] = 0;
+  signal_print[GDB_SIGNAL_CANCEL] = 0;
 
   /* Update cached state.  */
   signal_cache_update (-1);
@@ -7289,9 +7281,8 @@ function is skipped and the step command stops at a different source line."),
 			   show_step_stop_if_no_debug,
 			   &setlist, &showlist);
 
-  add_setshow_enum_cmd ("displaced-stepping", class_run,
-			can_use_displaced_stepping_enum,
-			&can_use_displaced_stepping, _("\
+  add_setshow_auto_boolean_cmd ("displaced-stepping", class_run,
+				&can_use_displaced_stepping, _("\
 Set debugger's willingness to use displaced stepping."), _("\
 Show debugger's willingness to use displaced stepping."), _("\
 If on, gdb will use displaced stepping to step over breakpoints if it is\n\
@@ -7300,9 +7291,9 @@ stepping to step over breakpoints, even if such is supported by the target\n\
 architecture.  If auto (which is the default), gdb will use displaced stepping\n\
 if the target architecture supports it and non-stop mode is active, but will not\n\
 use it in all-stop mode (see help set non-stop)."),
-			NULL,
-			show_can_use_displaced_stepping,
-			&setlist, &showlist);
+				NULL,
+				show_can_use_displaced_stepping,
+				&setlist, &showlist);
 
   add_setshow_enum_cmd ("exec-direction", class_run, exec_direction_names,
 			&exec_direction, _("Set direction of execution.\n\
@@ -7346,7 +7337,7 @@ enabled by default on some platforms."),
      value with a void typed value, and when we get here, gdbarch
      isn't initialized yet.  At this point, we're quite sure there
      isn't another convenience variable of the same name.  */
-  create_internalvar_type_lazy ("_siginfo", siginfo_make_value);
+  create_internalvar_type_lazy ("_siginfo", &siginfo_funcs, NULL);
 
   add_setshow_boolean_cmd ("observer", no_class,
 			   &observer_mode_1, _("\
diff --git a/gdb/inline-frame.c b/gdb/inline-frame.c
index 3e2da73..06de5b0 100644
--- a/gdb/inline-frame.c
+++ b/gdb/inline-frame.c
@@ -18,6 +18,7 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
+#include "inline-frame.h"
 #include "addrmap.h"
 #include "block.h"
 #include "frame-unwind.h"
diff --git a/gdb/interps.c b/gdb/interps.c
index 36ed520..698e26e 100644
--- a/gdb/interps.c
+++ b/gdb/interps.c
@@ -73,8 +73,6 @@ struct interp
 
 /* Functions local to this file.  */
 static void initialize_interps (void);
-static char **interpreter_completer (struct cmd_list_element *cmd,
-				     char *text, char *word);
 
 /* The magic initialization routine for this module.  */
 
@@ -253,6 +251,31 @@ interp_ui_out (struct interp *interp)
   return current_interpreter->procs->ui_out_proc (current_interpreter);
 }
 
+int
+current_interp_set_logging (int start_log, struct ui_file *out,
+			    struct ui_file *logfile)
+{
+  if (current_interpreter == NULL
+      || current_interpreter->procs->set_logging_proc == NULL)
+    return 0;
+
+  return current_interpreter->procs->set_logging_proc (current_interpreter,
+						       start_log, out,
+						       logfile);
+}
+
+/* Temporarily overrides the current interpreter.  */
+struct interp *
+interp_set_temp (const char *name)
+{
+  struct interp *interp = interp_lookup (name);
+  struct interp *old_interp = current_interpreter;
+
+  if (interp)
+    current_interpreter = interp;
+  return old_interp;
+}
+
 /* Returns the interpreter's cookie.  */
 
 void *
@@ -433,54 +456,39 @@ interpreter_exec_cmd (char *args, int from_tty)
 }
 
 /* List the possible interpreters which could complete the given text.  */
-static char **
+static VEC (char_ptr) *
 interpreter_completer (struct cmd_list_element *ignore, char *text, char *word)
 {
-  int alloced = 0;
   int textlen;
-  int num_matches;
-  char **matches;
+  VEC (char_ptr) *matches = NULL;
   struct interp *interp;
 
-  /* We expect only a very limited number of interpreters, so just
-     allocate room for all of them plus one for the last that must be NULL
-     to correctly end the list.  */
-  for (interp = interp_list; interp != NULL; interp = interp->next)
-    ++alloced;
-  matches = (char **) xcalloc (alloced + 1, sizeof (char *));
-
-  num_matches = 0;
   textlen = strlen (text);
   for (interp = interp_list; interp != NULL; interp = interp->next)
     {
       if (strncmp (interp->name, text, textlen) == 0)
 	{
-	  matches[num_matches] =
-	    (char *) xmalloc (strlen (word) + strlen (interp->name) + 1);
+	  char *match;
+
+	  match = (char *) xmalloc (strlen (word) + strlen (interp->name) + 1);
 	  if (word == text)
-	    strcpy (matches[num_matches], interp->name);
+	    strcpy (match, interp->name);
 	  else if (word > text)
 	    {
 	      /* Return some portion of interp->name.  */
-	      strcpy (matches[num_matches], interp->name + (word - text));
+	      strcpy (match, interp->name + (word - text));
 	    }
 	  else
 	    {
 	      /* Return some of text plus interp->name.  */
-	      strncpy (matches[num_matches], word, text - word);
-	      matches[num_matches][text - word] = '\0';
-	      strcat (matches[num_matches], interp->name);
+	      strncpy (match, word, text - word);
+	      match[text - word] = '\0';
+	      strcat (match, interp->name);
 	    }
-	  ++num_matches;
+	  VEC_safe_push (char_ptr, matches, match);
 	}
     }
 
-  if (num_matches == 0)
-    {
-      xfree (matches);
-      matches = NULL;
-    }
-
   return matches;
 }
 
diff --git a/gdb/interps.h b/gdb/interps.h
index 99431ee..2102eca 100644
--- a/gdb/interps.h
+++ b/gdb/interps.h
@@ -45,6 +45,10 @@ typedef struct gdb_exception (interp_exec_ftype) (void *data,
 typedef void (interp_command_loop_ftype) (void *data);
 typedef struct ui_out *(interp_ui_out_ftype) (struct interp *self);
 
+typedef int (interp_set_logging_ftype) (struct interp *self, int start_log,
+					struct ui_file *out,
+					struct ui_file *logfile);
+
 struct interp_procs
 {
   interp_init_ftype *init_proc;
@@ -59,6 +63,11 @@ struct interp_procs
      formatter.  */
   interp_ui_out_ftype *ui_out_proc;
 
+  /* Provides a hook for interpreters to do any additional
+     setup/cleanup that they might need when logging is enabled or
+     disabled.  */
+  interp_set_logging_ftype *set_logging_proc;
+
   interp_command_loop_ftype *command_loop_proc;
 };
 
@@ -69,10 +78,22 @@ extern struct interp *interp_lookup (const char *name);
 extern struct ui_out *interp_ui_out (struct interp *interp);
 extern void *interp_data (struct interp *interp);
 extern const char *interp_name (struct interp *interp);
+extern struct interp *interp_set_temp (const char *name);
 
 extern int current_interp_named_p (const char *name);
 extern int current_interp_display_prompt_p (void);
 extern void current_interp_command_loop (void);
+
+/* Call this function to give the current interpreter an opportunity
+   to do any special handling of streams when logging is enabled or
+   disabled.  START_LOG is 1 when logging is starting, 0 when it ends,
+   and OUT is the stream for the log file; it will be NULL when
+   logging is ending.  LOGFILE is non-NULL if the output streams
+   are to be tees, with the log file as one of the outputs.  */
+
+extern int current_interp_set_logging (int start_log, struct ui_file *out,
+				       struct ui_file *logfile);
+
 /* Returns opaque data associated with the top-level interpreter.  */
 extern void *top_level_interpreter_data (void);
 extern struct interp *top_level_interpreter (void);
diff --git a/gdb/iq2000-tdep.c b/gdb/iq2000-tdep.c
index dd8ad61..6ecc671 100644
--- a/gdb/iq2000-tdep.c
+++ b/gdb/iq2000-tdep.c
@@ -583,7 +583,7 @@ iq2000_extract_return_value (struct type *type, struct regcache *regcache,
 }
 
 static enum return_value_convention
-iq2000_return_value (struct gdbarch *gdbarch, struct type *func_type,
+iq2000_return_value (struct gdbarch *gdbarch, struct value *function,
 		     struct type *type, struct regcache *regcache,
 		     gdb_byte *readbuf, const gdb_byte *writebuf)
 {
diff --git a/gdb/jit-reader.in b/gdb/jit-reader.in
index ccc68e4..3ad521a 100644
--- a/gdb/jit-reader.in
+++ b/gdb/jit-reader.in
@@ -36,6 +36,7 @@ extern "C" {
 #ifdef __cplusplus
 #define GDB_DECLARE_GPL_COMPATIBLE_READER       \
   extern "C" {                                  \
+  extern int plugin_is_GPL_compatible (void);   \
   extern int plugin_is_GPL_compatible (void)    \
   {                                             \
     return 0;                                   \
@@ -44,7 +45,8 @@ extern "C" {
 
 #else
 
-#define GDB_DECLARE_GPL_COMPATIBLE_READER
+#define GDB_DECLARE_GPL_COMPATIBLE_READER       \
+  extern int plugin_is_GPL_compatible (void);   \
   extern int plugin_is_GPL_compatible (void)    \
   {                                             \
     return 0;                                   \
diff --git a/gdb/jit.c b/gdb/jit.c
index 24e2cf9..568d17b 100644
--- a/gdb/jit.c
+++ b/gdb/jit.c
@@ -127,6 +127,24 @@ mem_bfd_iovec_stat (struct bfd *abfd, void *stream, struct stat *sb)
   return 0;
 }
 
+/* Open a BFD from the target's memory.  */
+
+static struct bfd *
+bfd_open_from_target_memory (CORE_ADDR addr, ULONGEST size, char *target)
+{
+  const char *filename = xstrdup ("<in-memory>");
+  struct target_buffer *buffer = xmalloc (sizeof (struct target_buffer));
+
+  buffer->base = addr;
+  buffer->size = size;
+  return bfd_openr_iovec (filename, target,
+                          mem_bfd_iovec_open,
+                          buffer,
+                          mem_bfd_iovec_pread,
+                          mem_bfd_iovec_close,
+                          mem_bfd_iovec_stat);
+}
+
 /* One reader that has been loaded successfully, and can potentially be used to
    parse debug info.  */
 
@@ -182,7 +200,6 @@ static void
 jit_reader_load_command (char *args, int from_tty)
 {
   char *so_name;
-  int len;
   struct cleanup *prev_cleanup;
 
   if (args == NULL)
@@ -213,43 +230,59 @@ jit_reader_unload_command (char *args, int from_tty)
   loaded_jit_reader = NULL;
 }
 
-/* Open a BFD from the target's memory.  */
+/* Per-inferior structure recording which objfile has the JIT
+   symbols.  */
 
-static struct bfd *
-bfd_open_from_target_memory (CORE_ADDR addr, ULONGEST size, char *target)
+struct jit_inferior_data
 {
-  const char *filename = xstrdup ("<in-memory>");
-  struct target_buffer *buffer = xmalloc (sizeof (struct target_buffer));
+  /* The objfile.  This is NULL if no objfile holds the JIT
+     symbols.  */
 
-  buffer->base = addr;
-  buffer->size = size;
-  return bfd_openr_iovec (filename, target,
-                          mem_bfd_iovec_open,
-                          buffer,
-                          mem_bfd_iovec_pread,
-                          mem_bfd_iovec_close,
-                          mem_bfd_iovec_stat);
-}
+  struct objfile *objfile;
+};
 
-/* Per-inferior structure recording the addresses in the inferior.  */
+/* Per-objfile structure recording the addresses in the inferior.  */
 
-struct jit_inferior_data
+struct jit_objfile_data
 {
-  CORE_ADDR breakpoint_addr;  /* &__jit_debug_register_code()  */
-  CORE_ADDR descriptor_addr;  /* &__jit_debug_descriptor  */
+  /* Symbol for __jit_debug_register_code.  */
+  struct minimal_symbol *register_code;
+
+  /* Symbol for __jit_debug_descriptor.  */
+  struct minimal_symbol *descriptor;
+
+  /* Address of struct jit_code_entry in this objfile.  */
+  CORE_ADDR addr;
 };
 
+/* Fetch the jit_objfile_data associated with OBJF.  If no data exists
+   yet, make a new structure and attach it.  */
+
+static struct jit_objfile_data *
+get_jit_objfile_data (struct objfile *objf)
+{
+  struct jit_objfile_data *objf_data;
+
+  objf_data = objfile_data (objf, jit_objfile_data);
+  if (objf_data == NULL)
+    {
+      objf_data = XZALLOC (struct jit_objfile_data);
+      set_objfile_data (objf, jit_objfile_data, objf_data);
+    }
+
+  return objf_data;
+}
+
 /* Remember OBJFILE has been created for struct jit_code_entry located
    at inferior address ENTRY.  */
 
 static void
 add_objfile_entry (struct objfile *objfile, CORE_ADDR entry)
 {
-  CORE_ADDR *entry_addr_ptr;
+  struct jit_objfile_data *objf_data;
 
-  entry_addr_ptr = xmalloc (sizeof (CORE_ADDR));
-  *entry_addr_ptr = entry;
-  set_objfile_data (objfile, jit_objfile_data, entry_addr_ptr);
+  objf_data = get_jit_objfile_data (objfile);
+  objf_data->addr = entry;
 }
 
 /* Return jit_inferior_data for current inferior.  Allocate if not already
@@ -279,12 +312,12 @@ jit_inferior_data_cleanup (struct inferior *inf, void *arg)
 }
 
 /* Helper function for reading the global JIT descriptor from remote
-   memory.  */
+   memory.  Returns 1 if all went well, 0 otherwise.  */
 
-static void
+static int
 jit_read_descriptor (struct gdbarch *gdbarch,
 		     struct jit_descriptor *descriptor,
-		     CORE_ADDR descriptor_addr)
+		     struct jit_inferior_data *inf_data)
 {
   int err;
   struct type *ptr_type;
@@ -292,6 +325,18 @@ jit_read_descriptor (struct gdbarch *gdbarch,
   int desc_size;
   gdb_byte *desc_buf;
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+  struct jit_objfile_data *objf_data;
+
+  if (inf_data->objfile == NULL)
+    return 0;
+  objf_data = get_jit_objfile_data (inf_data->objfile);
+  if (objf_data->descriptor == NULL)
+    return 0;
+
+  if (jit_debug)
+    fprintf_unfiltered (gdb_stdlog,
+			"jit_read_descriptor, descriptor_addr = %s\n",
+			paddress (gdbarch, SYMBOL_VALUE_ADDRESS (objf_data->descriptor)));
 
   /* Figure out how big the descriptor is on the remote and how to read it.  */
   ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
@@ -300,9 +345,14 @@ jit_read_descriptor (struct gdbarch *gdbarch,
   desc_buf = alloca (desc_size);
 
   /* Read the descriptor.  */
-  err = target_read_memory (descriptor_addr, desc_buf, desc_size);
+  err = target_read_memory (SYMBOL_VALUE_ADDRESS (objf_data->descriptor),
+			    desc_buf, desc_size);
   if (err)
-    error (_("Unable to read JIT descriptor from remote memory!"));
+    {
+      printf_unfiltered (_("Unable to read JIT descriptor from "
+			   "remote memory\n"));
+      return 0;
+    }
 
   /* Fix the endianness to match the host.  */
   descriptor->version = extract_unsigned_integer (&desc_buf[0], 4, byte_order);
@@ -311,6 +361,8 @@ jit_read_descriptor (struct gdbarch *gdbarch,
   descriptor->relevant_entry = extract_typed_address (&desc_buf[8], ptr_type);
   descriptor->first_entry =
       extract_typed_address (&desc_buf[8 + ptr_size], ptr_type);
+
+  return 1;
 }
 
 /* Helper function for reading a JITed code entry from remote memory.  */
@@ -330,7 +382,13 @@ jit_read_code_entry (struct gdbarch *gdbarch,
   /* Figure out how big the entry is on the remote and how to read it.  */
   ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
   ptr_size = TYPE_LENGTH (ptr_type);
-  entry_size = 3 * ptr_size + 8;  /* Three pointers and one 64-bit int.  */
+
+  /* Figure out where the longlong value will be.  */
+  align_bytes = gdbarch_long_long_align_bit (gdbarch) / 8;
+  off = 3 * ptr_size;
+  off = (off + (align_bytes - 1)) & ~(align_bytes - 1);
+
+  entry_size = off + 8;  /* Three pointers and one 64-bit int.  */
   entry_buf = alloca (entry_size);
 
   /* Read the entry.  */
@@ -345,11 +403,6 @@ jit_read_code_entry (struct gdbarch *gdbarch,
       extract_typed_address (&entry_buf[ptr_size], ptr_type);
   code_entry->symfile_addr =
       extract_typed_address (&entry_buf[2 * ptr_size], ptr_type);
-
-  align_bytes = gdbarch_long_long_align_bit (gdbarch) / 8;
-  off = 3 * ptr_size;
-  off = (off + (align_bytes - 1)) & ~(align_bytes - 1);
-
   code_entry->symfile_size =
       extract_unsigned_integer (&entry_buf[off], 8, byte_order);
 }
@@ -607,6 +660,10 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
       struct block *new_block = allocate_block (&objfile->objfile_obstack);
       struct symbol *block_name = obstack_alloc (&objfile->objfile_obstack,
                                                  sizeof (struct symbol));
+      struct type *block_type = arch_type (get_objfile_arch (objfile),
+					   TYPE_CODE_VOID,
+					   1,
+					   "void");
 
       BLOCK_DICT (new_block) = dict_create_linear (&objfile->objfile_obstack,
                                                    NULL);
@@ -619,6 +676,7 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
       SYMBOL_DOMAIN (block_name) = VAR_DOMAIN;
       SYMBOL_CLASS (block_name) = LOC_BLOCK;
       SYMBOL_SYMTAB (block_name) = symtab;
+      SYMBOL_TYPE (block_name) = lookup_function_type (block_type);
       SYMBOL_BLOCK_VALUE (block_name) = new_block;
 
       block_name->ginfo.name = obsavestring (gdb_block_iter->name,
@@ -640,7 +698,11 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
   block_iter = NULL;
   for (i = 0; i < FIRST_LOCAL_BLOCK; i++)
     {
-      struct block *new_block = allocate_block (&objfile->objfile_obstack);
+      struct block *new_block;
+
+      new_block = (i == GLOBAL_BLOCK
+		   ? allocate_global_block (&objfile->objfile_obstack)
+		   : allocate_block (&objfile->objfile_obstack));
       BLOCK_DICT (new_block) = dict_create_linear (&objfile->objfile_obstack,
                                                    NULL);
       BLOCK_SUPERBLOCK (new_block) = block_iter;
@@ -650,6 +712,9 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
       BLOCK_END (new_block) = (CORE_ADDR) end;
 
       BLOCKVECTOR_BLOCK (symtab->blockvector, i) = new_block;
+
+      if (i == GLOBAL_BLOCK)
+	set_block_symtab (new_block, symtab);
     }
 
   /* Fill up the superblock fields for the real blocks, using the
@@ -694,9 +759,7 @@ jit_object_close_impl (struct gdb_symbol_callbacks *cb,
   objfile = allocate_objfile (NULL, 0);
   objfile->gdbarch = target_gdbarch;
 
-  objfile->msymbols = obstack_alloc (&objfile->objfile_obstack,
-                                     sizeof (struct minimal_symbol));
-  memset (objfile->msymbols, 0, sizeof (struct minimal_symbol));
+  terminate_minimal_symbol_table (objfile);
 
   xfree (objfile->name);
   objfile->name = xstrdup ("<< JIT compiled code >>");
@@ -721,7 +784,6 @@ jit_reader_try_read_symtab (struct jit_code_entry *code_entry,
 {
   void *gdb_mem;
   int status;
-  struct jit_dbg_reader *i;
   jit_dbg_reader_data priv_data;
   struct gdb_reader_funcs *funcs;
   volatile struct gdb_exception e;
@@ -882,12 +944,13 @@ static struct objfile *
 jit_find_objf_with_entry_addr (CORE_ADDR entry_addr)
 {
   struct objfile *objf;
-  CORE_ADDR *objf_entry_addr;
 
   ALL_OBJFILES (objf)
     {
-      objf_entry_addr = (CORE_ADDR *) objfile_data (objf, jit_objfile_data);
-      if (objf_entry_addr != NULL && *objf_entry_addr == entry_addr)
+      struct jit_objfile_data *objf_data;
+
+      objf_data = objfile_data (objf, jit_objfile_data);
+      if (objf_data != NULL && objf_data->addr == entry_addr)
         return objf;
     }
   return NULL;
@@ -900,35 +963,39 @@ static int
 jit_breakpoint_re_set_internal (struct gdbarch *gdbarch,
 				struct jit_inferior_data *inf_data)
 {
-  if (inf_data->breakpoint_addr == 0)
-    {
-      struct minimal_symbol *reg_symbol;
-
-      /* Lookup the registration symbol.  If it is missing, then we assume
-	 we are not attached to a JIT.  */
-      reg_symbol = lookup_minimal_symbol (jit_break_name, NULL, NULL);
-      if (reg_symbol == NULL)
-	return 1;
-      inf_data->breakpoint_addr = SYMBOL_VALUE_ADDRESS (reg_symbol);
-      if (inf_data->breakpoint_addr == 0)
-	return 2;
-
-      /* If we have not read the jit descriptor yet (e.g. because the JITer
-	 itself is in a shared library which just got loaded), do so now.  */
-      if (inf_data->descriptor_addr == 0)
-	jit_inferior_init (gdbarch);
-    }
-  else
+  struct minimal_symbol *reg_symbol, *desc_symbol;
+  struct objfile *objf;
+  struct jit_objfile_data *objf_data;
+
+  if (inf_data->objfile != NULL)
     return 0;
 
+  /* Lookup the registration symbol.  If it is missing, then we assume
+     we are not attached to a JIT.  */
+  reg_symbol = lookup_minimal_symbol_and_objfile (jit_break_name, &objf);
+  if (reg_symbol == NULL || SYMBOL_VALUE_ADDRESS (reg_symbol) == 0)
+    return 1;
+
+  desc_symbol = lookup_minimal_symbol (jit_descriptor_name, NULL, objf);
+  if (desc_symbol == NULL || SYMBOL_VALUE_ADDRESS (desc_symbol) == 0)
+    return 1;
+
+  objf_data = get_jit_objfile_data (objf);
+  objf_data->register_code = reg_symbol;
+  objf_data->descriptor = desc_symbol;
+
+  inf_data->objfile = objf;
+
+  jit_inferior_init (gdbarch);
+
   if (jit_debug)
     fprintf_unfiltered (gdb_stdlog,
 			"jit_breakpoint_re_set_internal, "
 			"breakpoint_addr = %s\n",
-			paddress (gdbarch, inf_data->breakpoint_addr));
+			paddress (gdbarch, SYMBOL_VALUE_ADDRESS (reg_symbol)));
 
   /* Put a breakpoint in the registration symbol.  */
-  create_jit_event_breakpoint (gdbarch, inf_data->breakpoint_addr);
+  create_jit_event_breakpoint (gdbarch, SYMBOL_VALUE_ADDRESS (reg_symbol));
 
   return 0;
 }
@@ -1036,7 +1103,6 @@ jit_frame_sniffer (const struct frame_unwind *self,
 {
   struct jit_inferior_data *inf_data;
   struct jit_unwind_private *priv_data;
-  struct jit_dbg_reader *iter;
   struct gdb_unwind_callbacks callbacks;
   struct gdb_reader_funcs *funcs;
 
@@ -1188,33 +1254,19 @@ jit_inferior_init (struct gdbarch *gdbarch)
   if (jit_breakpoint_re_set_internal (gdbarch, inf_data) != 0)
     return;
 
-  if (inf_data->descriptor_addr == 0)
-    {
-      struct minimal_symbol *desc_symbol;
-
-      /* Lookup the descriptor symbol and cache the addr.  If it is
-	 missing, we assume we are not attached to a JIT and return early.  */
-      desc_symbol = lookup_minimal_symbol (jit_descriptor_name, NULL, NULL);
-      if (desc_symbol == NULL)
-	return;
-
-      inf_data->descriptor_addr = SYMBOL_VALUE_ADDRESS (desc_symbol);
-      if (inf_data->descriptor_addr == 0)
-	return;
-    }
-
-  if (jit_debug)
-    fprintf_unfiltered (gdb_stdlog,
-			"jit_inferior_init, descriptor_addr = %s\n",
-			paddress (gdbarch, inf_data->descriptor_addr));
-
   /* Read the descriptor so we can check the version number and load
      any already JITed functions.  */
-  jit_read_descriptor (gdbarch, &descriptor, inf_data->descriptor_addr);
+  if (!jit_read_descriptor (gdbarch, &descriptor, inf_data))
+    return;
 
   /* Check that the version number agrees with that we support.  */
   if (descriptor.version != 1)
-    error (_("Unsupported JIT protocol version in descriptor!"));
+    {
+      printf_unfiltered (_("Unsupported JIT protocol version %ld "
+			   "in descriptor (expected 1)\n"),
+			 (long) descriptor.version);
+      return;
+    }
 
   /* If we've attached to a running program, we need to check the descriptor
      to register any functions that were already generated.  */
@@ -1251,33 +1303,6 @@ jit_breakpoint_re_set (void)
 				  get_jit_inferior_data ());
 }
 
-/* Reset inferior_data, so sybols will be looked up again, and jit_breakpoint
-   will be reset.  */
-
-static void
-jit_reset_inferior_data_and_breakpoints (void)
-{
-  struct jit_inferior_data *inf_data;
-
-  /* Force jit_inferior_init to re-lookup of jit symbol addresses.  */
-  inf_data = get_jit_inferior_data ();
-  inf_data->breakpoint_addr = 0;
-  inf_data->descriptor_addr = 0;
-
-  /* Remove any existing JIT breakpoint(s).  */
-  remove_jit_event_breakpoints ();
-
-  jit_inferior_init (target_gdbarch);
-}
-
-/* Wrapper to match the observer function pointer prototype.  */
-
-static void
-jit_inferior_created_observer (struct target_ops *objfile, int from_tty)
-{
-  jit_reset_inferior_data_and_breakpoints ();
-}
-
 /* This function cleans up any code entries left over when the
    inferior exits.  We get left over code when the inferior exits
    without unregistering its code, for example when it crashes.  */
@@ -1289,14 +1314,13 @@ jit_inferior_exit_hook (struct inferior *inf)
   struct objfile *temp;
 
   ALL_OBJFILES_SAFE (objf, temp)
-    if (objfile_data (objf, jit_objfile_data) != NULL)
-      jit_unregister_code (objf);
-}
+    {
+      struct jit_objfile_data *objf_data = objfile_data (objf,
+							 jit_objfile_data);
 
-static void
-jit_executable_changed_observer (void)
-{
-  jit_reset_inferior_data_and_breakpoints ();
+      if (objf_data != NULL && objf_data->addr != 0)
+	jit_unregister_code (objf);
+    }
 }
 
 void
@@ -1308,8 +1332,8 @@ jit_event_handler (struct gdbarch *gdbarch)
   struct objfile *objf;
 
   /* Read the descriptor from remote memory.  */
-  jit_read_descriptor (gdbarch, &descriptor,
-		       get_jit_inferior_data ()->descriptor_addr);
+  if (!jit_read_descriptor (gdbarch, &descriptor, get_jit_inferior_data ()))
+    return;
   entry_addr = descriptor.relevant_entry;
 
   /* Do the corresponding action.  */
@@ -1342,6 +1366,16 @@ jit_event_handler (struct gdbarch *gdbarch)
 static void
 free_objfile_data (struct objfile *objfile, void *data)
 {
+  struct jit_objfile_data *objf_data = data;
+
+  if (objf_data->register_code != NULL)
+    {
+      struct jit_inferior_data *inf_data = get_jit_inferior_data ();
+
+      if (inf_data->objfile == objfile)
+	inf_data->objfile = NULL;
+    }
+
   xfree (data);
 }
 
@@ -1375,9 +1409,7 @@ _initialize_jit (void)
 			    show_jit_debug,
 			    &setdebuglist, &showdebuglist);
 
-  observer_attach_inferior_created (jit_inferior_created_observer);
   observer_attach_inferior_exit (jit_inferior_exit_hook);
-  observer_attach_executable_changed (jit_executable_changed_observer);
   jit_objfile_data =
     register_objfile_data_with_cleanup (NULL, free_objfile_data);
   jit_inferior_data =
diff --git a/gdb/jv-exp.c b/gdb/jv-exp.c
index a3faf09..2cabab8 100644
--- a/gdb/jv-exp.c
+++ b/gdb/jv-exp.c
@@ -186,6 +186,12 @@
 #define yygindex java_yygindex
 #define yytable	 java_yytable
 #define yycheck	 java_yycheck
+#define yyss	java_yyss
+#define yysslim	java_yysslim
+#define yyssp	java_yyssp
+#define yystacksize java_yystacksize
+#define yyvs	java_yyvs
+#define yyvsp	java_yyvsp
 
 #ifndef YYDEBUG
 #define	YYDEBUG 1		/* Default to yydebug support */
@@ -222,7 +228,7 @@ static void insert_exp (int, struct expression *);
 #endif
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 128 "jv-exp.y"
+#line 134 "jv-exp.y"
 typedef union YYSTYPE {
     LONGEST lval;
     struct {
@@ -244,7 +250,7 @@ typedef union YYSTYPE {
     int *ivec;
   } YYSTYPE;
 /* Line 191 of yacc.c.  */
-#line 248 "jv-exp.c"
+#line 254 "jv-exp.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -253,14 +259,14 @@ typedef union YYSTYPE {
 
 
 /* Copy the second part of user declarations.  */
-#line 149 "jv-exp.y"
+#line 155 "jv-exp.y"
 
 /* YYSTYPE gets defined by %union */
 static int parse_number (char *, int, int, YYSTYPE *);
 
 
 /* Line 214 of yacc.c.  */
-#line 264 "jv-exp.c"
+#line 270 "jv-exp.c"
 
 #if ! defined (yyoverflow) || YYERROR_VERBOSE
 
@@ -486,20 +492,20 @@ static const yysigned_char yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short yyrline[] =
 {
-       0,   205,   205,   206,   209,   218,   219,   223,   232,   237,
-     245,   250,   255,   266,   267,   272,   273,   277,   279,   281,
-     283,   285,   290,   292,   304,   309,   313,   315,   320,   321,
-     325,   326,   330,   331,   335,   358,   359,   364,   365,   369,
-     370,   371,   372,   373,   374,   375,   383,   388,   393,   399,
-     401,   407,   408,   412,   415,   421,   422,   426,   430,   432,
-     437,   439,   443,   445,   451,   457,   456,   462,   464,   469,
-     486,   488,   493,   494,   496,   498,   499,   503,   508,   513,
-     514,   515,   516,   518,   520,   524,   529,   534,   535,   537,
-     539,   543,   547,   567,   575,   576,   578,   580,   585,   586,
-     588,   593,   594,   596,   602,   603,   605,   607,   609,   615,
-     616,   618,   623,   624,   629,   630,   634,   635,   640,   641,
-     646,   647,   652,   653,   658,   659,   663,   665,   672,   674,
-     676,   677,   682
+       0,   211,   211,   212,   215,   224,   225,   229,   238,   243,
+     251,   256,   261,   272,   273,   278,   279,   283,   285,   287,
+     289,   291,   296,   298,   310,   315,   319,   321,   326,   327,
+     331,   332,   336,   337,   341,   364,   365,   370,   371,   375,
+     376,   377,   378,   379,   380,   381,   389,   394,   399,   405,
+     407,   413,   414,   418,   421,   427,   428,   432,   436,   438,
+     443,   445,   449,   451,   457,   463,   462,   468,   470,   475,
+     492,   494,   499,   500,   502,   504,   505,   509,   514,   519,
+     520,   521,   522,   524,   526,   530,   535,   540,   541,   543,
+     545,   549,   553,   573,   581,   582,   584,   586,   591,   592,
+     594,   599,   600,   602,   608,   609,   611,   613,   615,   621,
+     622,   624,   629,   630,   635,   636,   640,   641,   646,   647,
+     652,   653,   658,   659,   664,   665,   669,   671,   678,   680,
+     682,   683,   688
 };
 #endif
 
@@ -1390,7 +1396,7 @@ yyreduce:
   switch (yyn)
     {
         case 4:
-#line 210 "jv-exp.y"
+#line 216 "jv-exp.y"
     {
 		  write_exp_elt_opcode(OP_TYPE);
 		  write_exp_elt_type(yyvsp[0].tval);
@@ -1399,7 +1405,7 @@ yyreduce:
     break;
 
   case 7:
-#line 224 "jv-exp.y"
+#line 230 "jv-exp.y"
     {
 		  write_exp_elt_opcode (OP_STRING);
 		  write_exp_string (yyvsp[0].sval);
@@ -1408,7 +1414,7 @@ yyreduce:
     break;
 
   case 8:
-#line 233 "jv-exp.y"
+#line 239 "jv-exp.y"
     { write_exp_elt_opcode (OP_LONG);
 		  write_exp_elt_type (yyvsp[0].typed_val_int.type);
 		  write_exp_elt_longcst ((LONGEST)(yyvsp[0].typed_val_int.val));
@@ -1416,7 +1422,7 @@ yyreduce:
     break;
 
   case 9:
-#line 238 "jv-exp.y"
+#line 244 "jv-exp.y"
     { YYSTYPE val;
 		  parse_number (yyvsp[0].sval.ptr, yyvsp[0].sval.length, 0, &val);
 		  write_exp_elt_opcode (OP_LONG);
@@ -1427,7 +1433,7 @@ yyreduce:
     break;
 
   case 10:
-#line 246 "jv-exp.y"
+#line 252 "jv-exp.y"
     { write_exp_elt_opcode (OP_DOUBLE);
 		  write_exp_elt_type (yyvsp[0].typed_val_float.type);
 		  write_exp_elt_dblcst (yyvsp[0].typed_val_float.dval);
@@ -1435,7 +1441,7 @@ yyreduce:
     break;
 
   case 11:
-#line 251 "jv-exp.y"
+#line 257 "jv-exp.y"
     { write_exp_elt_opcode (OP_LONG);
 		  write_exp_elt_type (parse_java_type->builtin_boolean);
 		  write_exp_elt_longcst ((LONGEST)yyvsp[0].lval);
@@ -1443,62 +1449,62 @@ yyreduce:
     break;
 
   case 14:
-#line 268 "jv-exp.y"
+#line 274 "jv-exp.y"
     { yyval.tval = parse_java_type->builtin_boolean; }
     break;
 
   case 17:
-#line 278 "jv-exp.y"
+#line 284 "jv-exp.y"
     { yyval.tval = parse_java_type->builtin_byte; }
     break;
 
   case 18:
-#line 280 "jv-exp.y"
+#line 286 "jv-exp.y"
     { yyval.tval = parse_java_type->builtin_short; }
     break;
 
   case 19:
-#line 282 "jv-exp.y"
+#line 288 "jv-exp.y"
     { yyval.tval = parse_java_type->builtin_int; }
     break;
 
   case 20:
-#line 284 "jv-exp.y"
+#line 290 "jv-exp.y"
     { yyval.tval = parse_java_type->builtin_long; }
     break;
 
   case 21:
-#line 286 "jv-exp.y"
+#line 292 "jv-exp.y"
     { yyval.tval = parse_java_type->builtin_char; }
     break;
 
   case 22:
-#line 291 "jv-exp.y"
+#line 297 "jv-exp.y"
     { yyval.tval = parse_java_type->builtin_float; }
     break;
 
   case 23:
-#line 293 "jv-exp.y"
+#line 299 "jv-exp.y"
     { yyval.tval = parse_java_type->builtin_double; }
     break;
 
   case 24:
-#line 305 "jv-exp.y"
+#line 311 "jv-exp.y"
     { yyval.tval = java_type_from_name (yyvsp[0].sval); }
     break;
 
   case 26:
-#line 314 "jv-exp.y"
+#line 320 "jv-exp.y"
     { yyval.tval = java_array_type (yyvsp[-1].tval, yyvsp[0].lval); }
     break;
 
   case 27:
-#line 316 "jv-exp.y"
+#line 322 "jv-exp.y"
     { yyval.tval = java_array_type (java_type_from_name (yyvsp[-1].sval), yyvsp[0].lval); }
     break;
 
   case 34:
-#line 336 "jv-exp.y"
+#line 342 "jv-exp.y"
     { yyval.sval.length = yyvsp[-2].sval.length + yyvsp[0].sval.length + 1;
 		  if (yyvsp[-2].sval.ptr + yyvsp[-2].sval.length + 1 == yyvsp[0].sval.ptr
 		      && yyvsp[-2].sval.ptr[yyvsp[-2].sval.length] == '.')
@@ -1513,12 +1519,12 @@ yyreduce:
     break;
 
   case 36:
-#line 360 "jv-exp.y"
+#line 366 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_COMMA); }
     break;
 
   case 45:
-#line 376 "jv-exp.y"
+#line 382 "jv-exp.y"
     { write_exp_elt_opcode (OP_ARRAY);
 		  write_exp_elt_longcst ((LONGEST) 0);
 		  write_exp_elt_longcst ((LONGEST) yyvsp[0].lval);
@@ -1526,102 +1532,102 @@ yyreduce:
     break;
 
   case 46:
-#line 384 "jv-exp.y"
+#line 390 "jv-exp.y"
     { start_arglist (); }
     break;
 
   case 47:
-#line 389 "jv-exp.y"
+#line 395 "jv-exp.y"
     { yyval.lval = end_arglist () - 1; }
     break;
 
   case 48:
-#line 394 "jv-exp.y"
+#line 400 "jv-exp.y"
     { internal_error (__FILE__, __LINE__,
 				  _("FIXME - ClassInstanceCreationExpression")); }
     break;
 
   case 49:
-#line 400 "jv-exp.y"
+#line 406 "jv-exp.y"
     { arglist_len = 1; }
     break;
 
   case 50:
-#line 402 "jv-exp.y"
+#line 408 "jv-exp.y"
     { arglist_len++; }
     break;
 
   case 51:
-#line 407 "jv-exp.y"
+#line 413 "jv-exp.y"
     { arglist_len = 0; }
     break;
 
   case 53:
-#line 413 "jv-exp.y"
+#line 419 "jv-exp.y"
     { internal_error (__FILE__, __LINE__,
 				  _("FIXME - ArrayCreationExpression")); }
     break;
 
   case 54:
-#line 416 "jv-exp.y"
+#line 422 "jv-exp.y"
     { internal_error (__FILE__, __LINE__,
 				  _("FIXME - ArrayCreationExpression")); }
     break;
 
   case 58:
-#line 431 "jv-exp.y"
+#line 437 "jv-exp.y"
     { yyval.lval = 1; }
     break;
 
   case 59:
-#line 433 "jv-exp.y"
+#line 439 "jv-exp.y"
     { yyval.lval = yyvsp[-2].lval + 1; }
     break;
 
   case 61:
-#line 439 "jv-exp.y"
+#line 445 "jv-exp.y"
     { yyval.lval = 0; }
     break;
 
   case 62:
-#line 444 "jv-exp.y"
+#line 450 "jv-exp.y"
     { push_fieldnames (yyvsp[0].sval); }
     break;
 
   case 63:
-#line 446 "jv-exp.y"
+#line 452 "jv-exp.y"
     { push_fieldnames (yyvsp[0].sval); }
     break;
 
   case 64:
-#line 452 "jv-exp.y"
+#line 458 "jv-exp.y"
     { push_expression_name (yyvsp[-1].sval); }
     break;
 
   case 65:
-#line 457 "jv-exp.y"
+#line 463 "jv-exp.y"
     { start_arglist(); }
     break;
 
   case 66:
-#line 459 "jv-exp.y"
+#line 465 "jv-exp.y"
     { write_exp_elt_opcode (OP_FUNCALL);
 		  write_exp_elt_longcst ((LONGEST) end_arglist ());
 		  write_exp_elt_opcode (OP_FUNCALL); }
     break;
 
   case 67:
-#line 463 "jv-exp.y"
+#line 469 "jv-exp.y"
     { error (_("Form of method invocation not implemented")); }
     break;
 
   case 68:
-#line 465 "jv-exp.y"
+#line 471 "jv-exp.y"
     { error (_("Form of method invocation not implemented")); }
     break;
 
   case 69:
-#line 470 "jv-exp.y"
+#line 476 "jv-exp.y"
     {
                   /* Emit code for the Name now, then exchange it in the
 		     expout array with the Expression's code.  We could
@@ -1641,69 +1647,69 @@ yyreduce:
     break;
 
   case 70:
-#line 487 "jv-exp.y"
+#line 493 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_SUBSCRIPT); }
     break;
 
   case 71:
-#line 489 "jv-exp.y"
+#line 495 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_SUBSCRIPT); }
     break;
 
   case 73:
-#line 495 "jv-exp.y"
+#line 501 "jv-exp.y"
     { push_expression_name (yyvsp[0].sval); }
     break;
 
   case 77:
-#line 504 "jv-exp.y"
+#line 510 "jv-exp.y"
     { write_exp_elt_opcode (UNOP_POSTINCREMENT); }
     break;
 
   case 78:
-#line 509 "jv-exp.y"
+#line 515 "jv-exp.y"
     { write_exp_elt_opcode (UNOP_POSTDECREMENT); }
     break;
 
   case 82:
-#line 517 "jv-exp.y"
+#line 523 "jv-exp.y"
     { write_exp_elt_opcode (UNOP_NEG); }
     break;
 
   case 83:
-#line 519 "jv-exp.y"
+#line 525 "jv-exp.y"
     { write_exp_elt_opcode (UNOP_IND); }
     break;
 
   case 85:
-#line 525 "jv-exp.y"
+#line 531 "jv-exp.y"
     { write_exp_elt_opcode (UNOP_PREINCREMENT); }
     break;
 
   case 86:
-#line 530 "jv-exp.y"
+#line 536 "jv-exp.y"
     { write_exp_elt_opcode (UNOP_PREDECREMENT); }
     break;
 
   case 88:
-#line 536 "jv-exp.y"
+#line 542 "jv-exp.y"
     { write_exp_elt_opcode (UNOP_COMPLEMENT); }
     break;
 
   case 89:
-#line 538 "jv-exp.y"
+#line 544 "jv-exp.y"
     { write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
     break;
 
   case 91:
-#line 544 "jv-exp.y"
+#line 550 "jv-exp.y"
     { write_exp_elt_opcode (UNOP_CAST);
 		  write_exp_elt_type (java_array_type (yyvsp[-3].tval, yyvsp[-2].lval));
 		  write_exp_elt_opcode (UNOP_CAST); }
     break;
 
   case 92:
-#line 548 "jv-exp.y"
+#line 554 "jv-exp.y"
     {
 		  int last_exp_size = length_of_subexp(expout, expout_ptr);
 		  struct type *type;
@@ -1726,121 +1732,121 @@ yyreduce:
     break;
 
   case 93:
-#line 568 "jv-exp.y"
+#line 574 "jv-exp.y"
     { write_exp_elt_opcode (UNOP_CAST);
 		  write_exp_elt_type (java_array_type (java_type_from_name (yyvsp[-3].sval), yyvsp[-2].lval));
 		  write_exp_elt_opcode (UNOP_CAST); }
     break;
 
   case 95:
-#line 577 "jv-exp.y"
+#line 583 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_MUL); }
     break;
 
   case 96:
-#line 579 "jv-exp.y"
+#line 585 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_DIV); }
     break;
 
   case 97:
-#line 581 "jv-exp.y"
+#line 587 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_REM); }
     break;
 
   case 99:
-#line 587 "jv-exp.y"
+#line 593 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_ADD); }
     break;
 
   case 100:
-#line 589 "jv-exp.y"
+#line 595 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_SUB); }
     break;
 
   case 102:
-#line 595 "jv-exp.y"
+#line 601 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_LSH); }
     break;
 
   case 103:
-#line 597 "jv-exp.y"
+#line 603 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_RSH); }
     break;
 
   case 105:
-#line 604 "jv-exp.y"
+#line 610 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_LESS); }
     break;
 
   case 106:
-#line 606 "jv-exp.y"
+#line 612 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_GTR); }
     break;
 
   case 107:
-#line 608 "jv-exp.y"
+#line 614 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_LEQ); }
     break;
 
   case 108:
-#line 610 "jv-exp.y"
+#line 616 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_GEQ); }
     break;
 
   case 110:
-#line 617 "jv-exp.y"
+#line 623 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_EQUAL); }
     break;
 
   case 111:
-#line 619 "jv-exp.y"
+#line 625 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_NOTEQUAL); }
     break;
 
   case 113:
-#line 625 "jv-exp.y"
+#line 631 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_BITWISE_AND); }
     break;
 
   case 115:
-#line 631 "jv-exp.y"
+#line 637 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_BITWISE_XOR); }
     break;
 
   case 117:
-#line 636 "jv-exp.y"
+#line 642 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_BITWISE_IOR); }
     break;
 
   case 119:
-#line 642 "jv-exp.y"
+#line 648 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_LOGICAL_AND); }
     break;
 
   case 121:
-#line 648 "jv-exp.y"
+#line 654 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_LOGICAL_OR); }
     break;
 
   case 123:
-#line 654 "jv-exp.y"
+#line 660 "jv-exp.y"
     { write_exp_elt_opcode (TERNOP_COND); }
     break;
 
   case 126:
-#line 664 "jv-exp.y"
+#line 670 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_ASSIGN); }
     break;
 
   case 127:
-#line 666 "jv-exp.y"
+#line 672 "jv-exp.y"
     { write_exp_elt_opcode (BINOP_ASSIGN_MODIFY);
 		  write_exp_elt_opcode (yyvsp[-1].opcode);
 		  write_exp_elt_opcode (BINOP_ASSIGN_MODIFY); }
     break;
 
   case 128:
-#line 673 "jv-exp.y"
+#line 679 "jv-exp.y"
     { push_expression_name (yyvsp[0].sval); }
     break;
 
@@ -1848,7 +1854,7 @@ yyreduce:
     }
 
 /* Line 1000 of yacc.c.  */
-#line 1852 "jv-exp.c"
+#line 1858 "jv-exp.c"
 

   yyvsp -= yylen;
   yyssp -= yylen;
@@ -2073,7 +2079,7 @@ yyreturn:
 }
 
 
-#line 685 "jv-exp.y"
+#line 691 "jv-exp.y"
 
 /* Take care of parsing a number (anything that starts with a digit).
    Set yylval and return the token type; update lexptr.
diff --git a/gdb/jv-exp.y b/gdb/jv-exp.y
index a8eb430..ee17654 100644
--- a/gdb/jv-exp.y
+++ b/gdb/jv-exp.y
@@ -98,6 +98,12 @@
 #define yygindex java_yygindex
 #define yytable	 java_yytable
 #define yycheck	 java_yycheck
+#define yyss	java_yyss
+#define yysslim	java_yysslim
+#define yyssp	java_yyssp
+#define yystacksize java_yystacksize
+#define yyvs	java_yyvs
+#define yyvsp	java_yyvsp
 
 #ifndef YYDEBUG
 #define	YYDEBUG 1		/* Default to yydebug support */
diff --git a/gdb/jv-lang.c b/gdb/jv-lang.c
index 443e243..a7cfb76 100644
--- a/gdb/jv-lang.c
+++ b/gdb/jv-lang.c
@@ -45,8 +45,8 @@
 
 extern void _initialize_java_language (void);
 
-static int java_demangled_signature_length (char *);
-static void java_demangled_signature_copy (char *, char *);
+static int java_demangled_signature_length (const char *);
+static void java_demangled_signature_copy (char *, const char *);
 
 static struct symtab *get_java_class_symtab (struct gdbarch *gdbarch);
 static char *get_java_utf8_name (struct obstack *obstack, struct value *name);
@@ -158,8 +158,9 @@ get_java_class_symtab (struct gdbarch *gdbarch)
       BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK) = bl;
 
       /* Allocate GLOBAL_BLOCK.  */
-      bl = allocate_block (&objfile->objfile_obstack);
+      bl = allocate_global_block (&objfile->objfile_obstack);
       BLOCK_DICT (bl) = dict_create_hashed_expandable ();
+      set_block_symtab (bl, class_symtab);
       BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK) = bl;
 
       /* Arrange to free the dict.  */
@@ -341,8 +342,8 @@ java_link_class_type (struct gdbarch *gdbarch,
 		      struct type *type, struct value *clas)
 {
   struct value *temp;
-  char *unqualified_name;
-  char *name = TYPE_TAG_NAME (type);
+  const char *unqualified_name;
+  const char *name = TYPE_TAG_NAME (type);
   int ninterfaces, nfields, nmethods;
   int type_is_object = 0;
   struct fn_field *fn_fields;
@@ -480,7 +481,7 @@ java_link_class_type (struct gdbarch *gdbarch,
       if (accflags & 0x0008)	/* ACC_STATIC */
 	SET_FIELD_PHYSADDR (TYPE_FIELD (type, i), boffset);
       else
-	TYPE_FIELD_BITPOS (type, i) = 8 * boffset;
+	SET_FIELD_BITPOS (TYPE_FIELD (type, i), 8 * boffset);
       if (accflags & 0x8000)	/* FIELD_UNRESOLVED_FLAG */
 	{
 	  TYPE_FIELD_TYPE (type, i) = get_java_object_type ();	/* FIXME */
@@ -501,7 +502,6 @@ java_link_class_type (struct gdbarch *gdbarch,
   temp = clas;
   nmethods = value_as_long (value_struct_elt (&temp, NULL, "method_count",
 					      NULL, "structure"));
-  TYPE_NFN_FIELDS_TOTAL (type) = nmethods;
   j = nmethods * sizeof (struct fn_field);
   fn_fields = (struct fn_field *)
     obstack_alloc (&objfile->objfile_obstack, j);
@@ -512,7 +512,7 @@ java_link_class_type (struct gdbarch *gdbarch,
   methods = NULL;
   for (i = 0; i < nmethods; i++)
     {
-      char *mname;
+      const char *mname;
       int k;
 
       if (methods == NULL)
@@ -618,7 +618,7 @@ is_object_type (struct type *type)
   if (TYPE_CODE (type) == TYPE_CODE_PTR)
     {
       struct type *ttype = check_typedef (TYPE_TARGET_TYPE (type));
-      char *name;
+      const char *name;
       if (TYPE_CODE (ttype) != TYPE_CODE_STRUCT)
 	return 0;
       while (TYPE_N_BASECLASSES (ttype) > 0)
@@ -668,7 +668,7 @@ java_primitive_type (struct gdbarch *gdbarch, int signature)
 
 struct type *
 java_primitive_type_from_name (struct gdbarch *gdbarch,
-			       char *name, int namelen)
+			       const char *name, int namelen)
 {
   const struct builtin_java_type *builtin = builtin_java_type (gdbarch);
 
@@ -743,7 +743,7 @@ java_primitive_type_name (int signature)
    signature string SIGNATURE.  */
 
 static int
-java_demangled_signature_length (char *signature)
+java_demangled_signature_length (const char *signature)
 {
   int array = 0;
 
@@ -763,7 +763,7 @@ java_demangled_signature_length (char *signature)
    RESULT.  */
 
 static void
-java_demangled_signature_copy (char *result, char *signature)
+java_demangled_signature_copy (char *result, const char *signature)
 {
   int array = 0;
   char *ptr;
@@ -806,7 +806,7 @@ java_demangled_signature_copy (char *result, char *signature)
    as a freshly allocated copy.  */
 
 char *
-java_demangle_type_signature (char *signature)
+java_demangle_type_signature (const char *signature)
 {
   int length = java_demangled_signature_length (signature);
   char *result = xmalloc (length + 1);
@@ -906,7 +906,7 @@ evaluate_subexp_java (struct type *expect_type, struct expression *exp,
 {
   int pc = *pos;
   int i;
-  char *name;
+  const char *name;
   enum exp_opcode op = exp->elts[*pos].opcode;
   struct value *arg1;
   struct value *arg2;
@@ -1182,6 +1182,7 @@ const struct language_defn java_language_defn =
   default_print_typedef,	/* Print a typedef using appropriate syntax */
   java_val_print,		/* Print a value using appropriate syntax */
   java_value_print,		/* Print a top-level value */
+  default_read_var_value,	/* la_read_var_value */
   NULL,				/* Language specific skip_trampoline */
   "this",	                /* name_of_this */
   basic_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
@@ -1197,7 +1198,7 @@ const struct language_defn java_language_defn =
   default_print_array_index,
   default_pass_by_reference,
   default_get_string,
-  strcmp_iw_ordered,
+  NULL,				/* la_get_symbol_name_cmp */
   iterate_over_symbols,
   LANG_MAGIC
 };
diff --git a/gdb/jv-lang.h b/gdb/jv-lang.h
index 4344706..8ea9c3c 100644
--- a/gdb/jv-lang.h
+++ b/gdb/jv-lang.h
@@ -42,13 +42,13 @@ struct builtin_java_type
 
 extern const struct builtin_java_type *builtin_java_type (struct gdbarch *);
 
-extern int java_val_print (struct type *, const gdb_byte *, int, CORE_ADDR,
-			   struct ui_file *, int,
-			   const struct value *,
-			   const struct value_print_options *);
+extern void java_val_print (struct type *, const gdb_byte *, int, CORE_ADDR,
+			    struct ui_file *, int,
+			    const struct value *,
+			    const struct value_print_options *);
 
-extern int java_value_print (struct value *, struct ui_file *,
-			     const struct value_print_options *);
+extern void java_value_print (struct value *, struct ui_file *,
+			      const struct value_print_options *);
 
 extern struct value *java_class_from_object (struct value *);
 
@@ -57,7 +57,7 @@ extern struct type *type_from_class (struct gdbarch *, struct value *);
 extern struct type *java_primitive_type (struct gdbarch *, int signature);
 
 extern struct type *java_primitive_type_from_name (struct gdbarch *,
-						   char *, int);
+						   const char *, int);
 
 extern struct type *java_array_type (struct type *, int);
 
@@ -72,6 +72,6 @@ extern int is_object_type (struct type *);
 extern void java_print_type (struct type *, const char *,
 			     struct ui_file *, int, int);
 
-extern char *java_demangle_type_signature (char *);
+extern char *java_demangle_type_signature (const char *);
 
 #endif
diff --git a/gdb/jv-typeprint.c b/gdb/jv-typeprint.c
index c48e736..6d8ecdf 100644
--- a/gdb/jv-typeprint.c
+++ b/gdb/jv-typeprint.c
@@ -39,7 +39,7 @@ static void java_type_print_base (struct type * type,
 static void
 java_type_print_derivation_info (struct ui_file *stream, struct type *type)
 {
-  char *name;
+  const char *name;
   int i;
   int n_bases;
   int prev;
@@ -208,8 +208,8 @@ java_type_print_base (struct type *type, struct ui_file *stream, int show,
 	    {
 	      struct fn_field *f;
 	      int j;
-	      char *method_name;
-	      char *name;
+	      const char *method_name;
+	      const char *name;
 	      int is_constructor;
 	      int n_overloads;
 
@@ -329,9 +329,6 @@ java_type_print_base (struct type *type, struct ui_file *stream, int show,
 
 /* LEVEL is the depth to indent lines by.  */
 
-extern void c_type_print_varspec_suffix (struct type *, struct ui_file *,
-					 int, int, int);
-
 void
 java_print_type (struct type *type, const char *varstring,
 		 struct ui_file *stream, int show, int level)
diff --git a/gdb/jv-valprint.c b/gdb/jv-valprint.c
index 2aea0e1..d1274dd 100644
--- a/gdb/jv-valprint.c
+++ b/gdb/jv-valprint.c
@@ -33,7 +33,7 @@
 
 /* Local functions */
 
-int
+void
 java_value_print (struct value *val, struct ui_file *stream, 
 		  const struct value_print_options *options)
 {
@@ -42,7 +42,7 @@ java_value_print (struct value *val, struct ui_file *stream,
   struct type *type;
   CORE_ADDR address;
   int i;
-  char *name;
+  const char *name;
   struct value_print_options opts;
 
   type = value_type (val);
@@ -51,10 +51,13 @@ java_value_print (struct value *val, struct ui_file *stream,
   if (is_object_type (type))
     {
       CORE_ADDR obj_addr;
+      struct value *tem = val;
 
       /* Get the run-time type, and cast the object into that.  */
+      while (TYPE_CODE (value_type (tem)) == TYPE_CODE_PTR)
+	tem = value_ind (tem);
 
-      obj_addr = unpack_pointer (type, value_contents (val));
+      obj_addr = value_address (tem);
 
       if (obj_addr != 0)
 	{
@@ -205,7 +208,7 @@ java_value_print (struct value *val, struct ui_file *stream,
 
       fprintf_filtered (stream, "}");
 
-      return 0;
+      return;
     }
 
   /* If it's type String, print it.  */
@@ -228,6 +231,8 @@ java_value_print (struct value *val, struct ui_file *stream,
       unsigned long count;
       struct value *mark;
 
+      fputs_filtered (" ", stream);
+
       mark = value_mark ();	/* Remember start of new values.  */
 
       data_val = value_struct_elt (&val, NULL, "data", NULL, NULL);
@@ -245,12 +250,12 @@ java_value_print (struct value *val, struct ui_file *stream,
       val_print_string (char_type, NULL, data + boffset, count, stream,
 			options);
 
-      return 0;
+      return;
     }
 
   opts = *options;
   opts.deref_ref = 1;
-  return common_val_print (val, stream, 0, &opts, current_language);
+  common_val_print (val, stream, 0, &opts, current_language);
 }
 
 /* TYPE, VALADDR, ADDRESS, STREAM, RECURSE, and OPTIONS have the
@@ -283,7 +288,7 @@ java_print_value_fields (struct type *type, const gdb_byte *valaddr,
 	{
 	  int boffset;
 	  struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
-	  char *basename = TYPE_NAME (baseclass);
+	  const char *basename = TYPE_NAME (baseclass);
 	  const gdb_byte *base_valaddr;
 
 	  if (BASETYPE_VIA_VIRTUAL (type, i))
@@ -325,7 +330,7 @@ java_print_value_fields (struct type *type, const gdb_byte *valaddr,
 	  /* If requested, skip printing of static fields.  */
 	  if (field_is_static (&TYPE_FIELD (type, i)))
 	    {
-	      char *name = TYPE_FIELD_NAME (type, i);
+	      const char *name = TYPE_FIELD_NAME (type, i);
 
 	      if (!options->static_field_print)
 		continue;
@@ -475,10 +480,9 @@ java_print_value_fields (struct type *type, const gdb_byte *valaddr,
 }
 
 /* See val_print for a description of the various parameters of this
-   function; they are identical.  The semantics of the return value is
-   also identical to val_print.  */
+   function; they are identical.  */
 
-int
+void
 java_val_print (struct type *type, const gdb_byte *valaddr,
 		int embedded_offset, CORE_ADDR address,
 		struct ui_file *stream, int recurse,
@@ -500,35 +504,19 @@ java_val_print (struct type *type, const gdb_byte *valaddr,
 				      val, options, 0, stream);
 	  break;
 	}
-#if 0
-      if (options->vtblprint && cp_is_vtbl_ptr_type (type))
-	{
-	  /* Print the unmangled name if desired.  */
-	  /* Print vtable entry - we only get here if we ARE using
-	     -fvtable_thunks.  (Otherwise, look under TYPE_CODE_STRUCT.)  */
-	  /* Extract an address, assume that it is unsigned.  */
-	  print_address_demangle
-	    (gdbarch,
-	     extract_unsigned_integer (valaddr + embedded_offset,
-				       TYPE_LENGTH (type)),
-	     stream, demangle);
-	  break;
-	}
-#endif
       addr = unpack_pointer (type, valaddr + embedded_offset);
       if (addr == 0)
 	{
 	  fputs_filtered ("null", stream);
-	  return i;
+	  return;
 	}
       target_type = check_typedef (TYPE_TARGET_TYPE (type));
 
       if (TYPE_CODE (target_type) == TYPE_CODE_FUNC)
 	{
 	  /* Try to print what function it points to.  */
-	  print_address_demangle (gdbarch, addr, stream, demangle);
-	  /* Return value is irrelevant except for string pointers.  */
-	  return (0);
+	  print_address_demangle (options, gdbarch, addr, stream, demangle);
+	  return;
 	}
 
       if (options->addressprint && options->format != 's')
@@ -537,7 +525,7 @@ java_val_print (struct type *type, const gdb_byte *valaddr,
 	  print_longest (stream, 'x', 0, (ULONGEST) addr);
 	}
 
-      return i;
+      return;
 
     case TYPE_CODE_CHAR:
     case TYPE_CODE_INT:
@@ -568,9 +556,8 @@ java_val_print (struct type *type, const gdb_byte *valaddr,
       break;
 
     default:
-      return c_val_print (type, valaddr, embedded_offset, address, stream,
-			  recurse, val, options);
+      c_val_print (type, valaddr, embedded_offset, address, stream,
+		   recurse, val, options);
+      break;
     }
-
-  return 0;
 }
diff --git a/gdb/language.c b/gdb/language.c
index 1e452ec..f0a8697 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -66,8 +66,8 @@ static void unk_lang_printchar (int c, struct type *type,
 static void unk_lang_print_type (struct type *, const char *, struct ui_file *,
 				 int, int);
 
-static int unk_lang_value_print (struct value *, struct ui_file *,
-				 const struct value_print_options *);
+static void unk_lang_value_print (struct value *, struct ui_file *,
+				  const struct value_print_options *);
 
 static CORE_ADDR unk_lang_trampoline (struct frame_info *, CORE_ADDR pc);
 
@@ -470,243 +470,6 @@ language_info (int quietly)
     }
 }
 

-/* Return the result of a binary operation.  */
-
-#if 0				/* Currently unused */
-
-struct type *
-binop_result_type (struct value *v1, struct value *v2)
-{
-  int size, uns;
-  struct type *t1 = check_typedef (VALUE_TYPE (v1));
-  struct type *t2 = check_typedef (VALUE_TYPE (v2));
-
-  int l1 = TYPE_LENGTH (t1);
-  int l2 = TYPE_LENGTH (t2);
-
-  switch (current_language->la_language)
-    {
-    case language_c:
-    case language_cplus:
-    case language_d:
-    case language_objc:
-      if (TYPE_CODE (t1) == TYPE_CODE_FLT)
-	return TYPE_CODE (t2) == TYPE_CODE_FLT && l2 > l1 ?
-	  VALUE_TYPE (v2) : VALUE_TYPE (v1);
-      else if (TYPE_CODE (t2) == TYPE_CODE_FLT)
-	return TYPE_CODE (t1) == TYPE_CODE_FLT && l1 > l2 ?
-	  VALUE_TYPE (v1) : VALUE_TYPE (v2);
-      else if (TYPE_UNSIGNED (t1) && l1 > l2)
-	return VALUE_TYPE (v1);
-      else if (TYPE_UNSIGNED (t2) && l2 > l1)
-	return VALUE_TYPE (v2);
-      else			/* Both are signed.  Result is the
-				   longer type.  */
-	return l1 > l2 ? VALUE_TYPE (v1) : VALUE_TYPE (v2);
-      break;
-    case language_m2:
-      /* If we are doing type-checking, l1 should equal l2, so this is
-         not needed.  */
-      return l1 > l2 ? VALUE_TYPE (v1) : VALUE_TYPE (v2);
-      break;
-    }
-  internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
-  return (struct type *) 0;	/* For lint */
-}
-
-#endif /* 0 */
-#if 0
-/* This page contains functions that are used in type/range checking.
-   They all return zero if the type/range check fails.
-
-   It is hoped that these will make extending GDB to parse different
-   languages a little easier.  These are primarily used in eval.c when
-   evaluating expressions and making sure that their types are correct.
-   Instead of having a mess of conjucted/disjuncted expressions in an "if",
-   the ideas of type can be wrapped up in the following functions.
-
-   Note that some of them are not currently dependent upon which language
-   is currently being parsed.  For example, floats are the same in
-   C and Modula-2 (ie. the only floating point type has TYPE_CODE of
-   TYPE_CODE_FLT), while booleans are different.  */
-
-/* Returns non-zero if its argument is a simple type.  This is the same for
-   both Modula-2 and for C.  In the C case, TYPE_CODE_CHAR will never occur,
-   and thus will never cause the failure of the test.  */
-int
-simple_type (struct type *type)
-{
-  CHECK_TYPEDEF (type);
-  switch (TYPE_CODE (type))
-    {
-    case TYPE_CODE_INT:
-    case TYPE_CODE_CHAR:
-    case TYPE_CODE_ENUM:
-    case TYPE_CODE_FLT:
-    case TYPE_CODE_RANGE:
-    case TYPE_CODE_BOOL:
-      return 1;
-
-    default:
-      return 0;
-    }
-}
-
-/* Returns non-zero if its argument is of an ordered type.
-   An ordered type is one in which the elements can be tested for the
-   properties of "greater than", "less than", etc, or for which the
-   operations "increment" or "decrement" make sense.  */
-int
-ordered_type (struct type *type)
-{
-  CHECK_TYPEDEF (type);
-  switch (TYPE_CODE (type))
-    {
-    case TYPE_CODE_INT:
-    case TYPE_CODE_CHAR:
-    case TYPE_CODE_ENUM:
-    case TYPE_CODE_FLT:
-    case TYPE_CODE_RANGE:
-      return 1;
-
-    default:
-      return 0;
-    }
-}
-
-/* Returns non-zero if the two types are the same.  */
-int
-same_type (struct type *arg1, struct type *arg2)
-{
-  CHECK_TYPEDEF (type);
-  if (structured_type (arg1)
-      ? !structured_type (arg2) : structured_type (arg2))
-    /* One is structured and one isn't.  */
-    return 0;
-  else if (structured_type (arg1) && structured_type (arg2))
-    return arg1 == arg2;
-  else if (numeric_type (arg1) && numeric_type (arg2))
-    return (TYPE_CODE (arg2) == TYPE_CODE (arg1)) &&
-      (TYPE_UNSIGNED (arg1) == TYPE_UNSIGNED (arg2))
-      ? 1 : 0;
-  else
-    return arg1 == arg2;
-}
-
-/* Returns non-zero if the type is integral.  */
-int
-integral_type (struct type *type)
-{
-  CHECK_TYPEDEF (type);
-  switch (current_language->la_language)
-    {
-    case language_c:
-    case language_cplus:
-    case language_d:
-    case language_objc:
-      return (TYPE_CODE (type) != TYPE_CODE_INT) &&
-	(TYPE_CODE (type) != TYPE_CODE_ENUM) ? 0 : 1;
-    case language_m2:
-    case language_pascal:
-      return TYPE_CODE (type) != TYPE_CODE_INT ? 0 : 1;
-    default:
-      error (_("Language not supported."));
-    }
-}
-
-/* Returns non-zero if the value is numeric.  */
-int
-numeric_type (struct type *type)
-{
-  CHECK_TYPEDEF (type);
-  switch (TYPE_CODE (type))
-    {
-    case TYPE_CODE_INT:
-    case TYPE_CODE_FLT:
-      return 1;
-
-    default:
-      return 0;
-    }
-}
-
-/* Returns non-zero if the value is a character type.  */
-int
-character_type (struct type *type)
-{
-  CHECK_TYPEDEF (type);
-  switch (current_language->la_language)
-    {
-    case language_m2:
-    case language_pascal:
-      return TYPE_CODE (type) != TYPE_CODE_CHAR ? 0 : 1;
-
-    case language_c:
-    case language_cplus:
-    case language_d:
-    case language_objc:
-      return (TYPE_CODE (type) == TYPE_CODE_INT) &&
-	TYPE_LENGTH (type) == sizeof (char)
-      ? 1 : 0;
-    default:
-      return (0);
-    }
-}
-
-/* Returns non-zero if the value is a string type.  */
-int
-string_type (struct type *type)
-{
-  CHECK_TYPEDEF (type);
-  switch (current_language->la_language)
-    {
-    case language_m2:
-    case language_pascal:
-      return TYPE_CODE (type) != TYPE_CODE_STRING ? 0 : 1;
-
-    case language_c:
-    case language_cplus:
-    case language_d:
-    case language_objc:
-      /* C does not have distinct string type.  */
-      return (0);
-    default:
-      return (0);
-    }
-}
-
-/* Returns non-zero if the value is a boolean type.  */
-int
-boolean_type (struct type *type)
-{
-  CHECK_TYPEDEF (type);
-  if (TYPE_CODE (type) == TYPE_CODE_BOOL)
-    return 1;
-  switch (current_language->la_language)
-    {
-    case language_c:
-    case language_cplus:
-    case language_d:
-    case language_objc:
-      /* Might be more cleanly handled by having a
-         TYPE_CODE_INT_NOT_BOOL for (the deleted) CHILL and such
-         languages, or a TYPE_CODE_INT_OR_BOOL for C.  */
-      if (TYPE_CODE (type) == TYPE_CODE_INT)
-	return 1;
-    default:
-      break;
-    }
-  return 0;
-}
-
-/* Returns non-zero if the value is a floating-point type.  */
-int
-float_type (struct type *type)
-{
-  CHECK_TYPEDEF (type);
-  return TYPE_CODE (type) == TYPE_CODE_FLT;
-}
-#endif
 
 /* Returns non-zero if the value is a pointer type.  */
 int
@@ -716,35 +479,6 @@ pointer_type (struct type *type)
     TYPE_CODE (type) == TYPE_CODE_REF;
 }
 
-#if 0
-/* Returns non-zero if the value is a structured type.  */
-int
-structured_type (struct type *type)
-{
-  CHECK_TYPEDEF (type);
-  switch (current_language->la_language)
-    {
-    case language_c:
-    case language_cplus:
-    case language_d:
-    case language_objc:
-      return (TYPE_CODE (type) == TYPE_CODE_STRUCT) ||
-	(TYPE_CODE (type) == TYPE_CODE_UNION) ||
-	(TYPE_CODE (type) == TYPE_CODE_ARRAY);
-   case language_pascal:
-      return (TYPE_CODE(type) == TYPE_CODE_STRUCT) ||
-	 (TYPE_CODE(type) == TYPE_CODE_UNION) ||
-	 (TYPE_CODE(type) == TYPE_CODE_SET) ||
-	    (TYPE_CODE(type) == TYPE_CODE_ARRAY);
-    case language_m2:
-      return (TYPE_CODE (type) == TYPE_CODE_STRUCT) ||
-	(TYPE_CODE (type) == TYPE_CODE_SET) ||
-	(TYPE_CODE (type) == TYPE_CODE_ARRAY);
-    default:
-      return (0);
-    }
-}
-#endif
 

 /* This page contains functions that return info about
    (struct value) values used in GDB.  */
@@ -1113,7 +847,7 @@ unk_lang_print_type (struct type *type, const char *varstring,
 	   "function unk_lang_print_type called."));
 }
 
-static int
+static void
 unk_lang_val_print (struct type *type, const gdb_byte *valaddr,
 		    int embedded_offset, CORE_ADDR address,
 		    struct ui_file *stream, int recurse,
@@ -1124,7 +858,7 @@ unk_lang_val_print (struct type *type, const gdb_byte *valaddr,
 	   "function unk_lang_val_print called."));
 }
 
-static int
+static void
 unk_lang_value_print (struct value *val, struct ui_file *stream,
 		      const struct value_print_options *options)
 {
@@ -1183,6 +917,7 @@ const struct language_defn unknown_language_defn =
   default_print_typedef,	/* Print a typedef using appropriate syntax */
   unk_lang_val_print,		/* Print a value using appropriate syntax */
   unk_lang_value_print,		/* Print a top-level value */
+  default_read_var_value,	/* la_read_var_value */
   unk_lang_trampoline,		/* Language specific skip_trampoline */
   "this",        	    	/* name_of_this */
   basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
@@ -1199,7 +934,7 @@ const struct language_defn unknown_language_defn =
   default_print_array_index,
   default_pass_by_reference,
   default_get_string,
-  strcmp_iw_ordered,
+  NULL,				/* la_get_symbol_name_cmp */
   iterate_over_symbols,
   LANG_MAGIC
 };
@@ -1226,6 +961,7 @@ const struct language_defn auto_language_defn =
   default_print_typedef,	/* Print a typedef using appropriate syntax */
   unk_lang_val_print,		/* Print a value using appropriate syntax */
   unk_lang_value_print,		/* Print a top-level value */
+  default_read_var_value,	/* la_read_var_value */
   unk_lang_trampoline,		/* Language specific skip_trampoline */
   "this",		        /* name_of_this */
   basic_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
@@ -1242,7 +978,7 @@ const struct language_defn auto_language_defn =
   default_print_array_index,
   default_pass_by_reference,
   default_get_string,
-  strcmp_iw_ordered,
+  NULL,				/* la_get_symbol_name_cmp */
   iterate_over_symbols,
   LANG_MAGIC
 };
@@ -1267,6 +1003,7 @@ const struct language_defn local_language_defn =
   default_print_typedef,	/* Print a typedef using appropriate syntax */
   unk_lang_val_print,		/* Print a value using appropriate syntax */
   unk_lang_value_print,		/* Print a top-level value */
+  default_read_var_value,	/* la_read_var_value */
   unk_lang_trampoline,		/* Language specific skip_trampoline */
   "this", 		        /* name_of_this */
   basic_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
@@ -1283,7 +1020,7 @@ const struct language_defn local_language_defn =
   default_print_array_index,
   default_pass_by_reference,
   default_get_string,
-  strcmp_iw_ordered,
+  NULL,				/* la_get_symbol_name_cmp */
   iterate_over_symbols,
   LANG_MAGIC
 };
@@ -1375,10 +1112,10 @@ language_lookup_primitive_type_by_name (const struct language_defn *la,
 void
 _initialize_language (void)
 {
-  static const char *type_or_range_names[]
+  static const char *const type_or_range_names[]
     = { "on", "off", "warn", "auto", NULL };
 
-  static const char *case_sensitive_names[]
+  static const char *const case_sensitive_names[]
     = { "on", "off", "auto", NULL };
 
   language_gdbarch_data
diff --git a/gdb/language.h b/gdb/language.h
index 1ebae16..38c4830 100644
--- a/gdb/language.h
+++ b/gdb/language.h
@@ -136,6 +136,16 @@ struct language_arch_info
   struct type *bool_type_default;
 };
 
+/* A pointer to a function expected to return nonzero if
+   SYMBOL_SEARCH_NAME matches the given LOOKUP_NAME.
+
+   SYMBOL_SEARCH_NAME should be a symbol's "search" name.
+   LOOKUP_NAME should be the name of an entity after it has been
+   transformed for lookup.  */
+
+typedef int (*symbol_name_cmp_ftype) (const char *symbol_search_name,
+					  const char *lookup_name);
+
 /* Structure tying together assorted information about a language.  */
 
 struct language_defn
@@ -230,17 +240,26 @@ struct language_defn
        OPTIONS are the formatting options to be used when
        printing.  */
 
-    int (*la_val_print) (struct type *type,
-			 const gdb_byte *contents,
-			 int embedded_offset, CORE_ADDR address,
-			 struct ui_file *stream, int recurse,
-			 const struct value *val,
-			 const struct value_print_options *options);
+    void (*la_val_print) (struct type *type,
+			  const gdb_byte *contents,
+			  int embedded_offset, CORE_ADDR address,
+			  struct ui_file *stream, int recurse,
+			  const struct value *val,
+			  const struct value_print_options *options);
 
     /* Print a top-level value using syntax appropriate for this language.  */
 
-    int (*la_value_print) (struct value *, struct ui_file *,
-			   const struct value_print_options *);
+    void (*la_value_print) (struct value *, struct ui_file *,
+			    const struct value_print_options *);
+
+    /* Given a symbol VAR, and a stack frame id FRAME, read the value
+       of the variable an return (pointer to a) struct value containing
+       the value.
+
+       Throw an error if the variable cannot be found.  */
+
+    struct value *(*la_read_var_value) (struct symbol *var,
+					struct frame_info *frame);
 
     /* PC is possibly an unknown languages trampoline.
        If that PC falls in a trampoline belonging to this language,
@@ -287,10 +306,10 @@ struct language_defn
     /* The list of characters forming word boundaries.  */
     char *(*la_word_break_characters) (void);
 
-    /* Should return a NULL terminated array of all symbols which
-       are possible completions for TEXT.  WORD is the entire command
-       on which the completion is being made.  */
-    char **(*la_make_symbol_completion_list) (char *text, char *word);
+    /* Should return a vector of all symbols which are possible
+       completions for TEXT.  WORD is the entire command on which the
+       completion is being made.  */
+    VEC (char_ptr) *(*la_make_symbol_completion_list) (char *text, char *word);
 
     /* The per-architecture (OS/ABI) language information.  */
     void (*la_language_arch_info) (struct gdbarch *,
@@ -318,19 +337,13 @@ struct language_defn
     void (*la_get_string) (struct value *value, gdb_byte **buffer, int *length,
 			   struct type **chartype, const char **charset);
 
-    /* Compare two symbol names according to language rules.  For
-       instance, in C++, we might want to ignore whitespaces in
-       the symbol name.  Or some case-insensitive language might
-       want to ignore casing during the match.
-
-       Both STR1 and STR2 are expected to be demangled name, except
-       for Ada, where STR1 and STR2 are expected to be encoded names.
-       The latter is because searches are performed using the encoded
-       name in Ada.
+    /* Return a pointer to the function that should be used to match
+       a symbol name against LOOKUP_NAME. This is mostly for languages
+       such as Ada where the matching algorithm depends on LOOKUP_NAME.
 
-       The return value follows the same spirit as strcmp.  */
-
-    int (*la_symbol_name_compare) (const char *str1, const char *str2);
+       This field may be NULL, in which case strcmp_iw will be used
+       to perform the matching.  */
+    symbol_name_cmp_ftype (*la_get_symbol_name_cmp) (const char *lookup_name);
 
     /* Find all symbols in the current program space matching NAME in
        DOMAIN, according to this language's rules.
@@ -343,13 +356,13 @@ struct language_defn
        argument.  If CALLBACK returns zero, the iteration ends at that
        point.
 
-       This field can be NULL, meaning that this language doesn't need
-       any special code aside from ordinary searches of the symbol
-       table.  */
+       This field may not be NULL.  If the language does not need any
+       special processing here, 'iterate_over_symbols' should be
+       used as the definition.  */
     void (*la_iterate_over_symbols) (const struct block *block,
 				     const char *name,
 				     domain_enum domain,
-				     int (*callback) (struct symbol *, void *),
+				     symbol_found_callback_ftype *callback,
 				     void *data);
 
     /* Add fields above this point, so the magic number is always last.  */
@@ -473,26 +486,8 @@ extern enum language set_language (enum language);
 
 /* Type predicates */
 
-extern int simple_type (struct type *);
-
-extern int ordered_type (struct type *);
-
-extern int same_type (struct type *, struct type *);
-
-extern int integral_type (struct type *);
-
-extern int numeric_type (struct type *);
-
-extern int character_type (struct type *);
-
-extern int boolean_type (struct type *);
-
-extern int float_type (struct type *);
-
 extern int pointer_type (struct type *);
 
-extern int structured_type (struct type *);
-
 /* Checks Binary and Unary operations for semantic type correctness.  */
 /* FIXME:  Does not appear to be used.  */
 #define unop_type_check(v,o) binop_type_check((v),NULL,(o))
diff --git a/gdb/libunwind-frame.c b/gdb/libunwind-frame.c
deleted file mode 100644
index 94449b0..0000000
--- a/gdb/libunwind-frame.c
+++ /dev/null
@@ -1,574 +0,0 @@
-/* Frame unwinder for frames using the libunwind library.
-
-   Copyright (C) 2003-2004, 2006-2012 Free Software Foundation, Inc.
-
-   Written by Jeff Johnston, contributed by Red Hat Inc.
-
-   This file is part of GDB.
-
-   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 3 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, see <http://www.gnu.org/licenses/>.  */
-
-#include "defs.h"
-
-#include "inferior.h"
-#include "frame.h"
-#include "frame-base.h"
-#include "frame-unwind.h"
-#include "gdbcore.h"
-#include "gdbtypes.h"
-#include "symtab.h"
-#include "objfiles.h"
-#include "regcache.h"
-
-#include <dlfcn.h>
-
-#include "gdb_assert.h"
-#include "gdb_string.h"
-
-#include "libunwind-frame.h"
-
-#include "complaints.h"
-
-/* The following two macros are normally defined in <endian.h>.
-   But systems such as ia64-hpux do not provide such header, so
-   we just define them here if not already defined.  */
-#ifndef __LITTLE_ENDIAN
-#define __LITTLE_ENDIAN 1234
-#endif
-#ifndef __BIG_ENDIAN
-#define __BIG_ENDIAN    4321
-#endif
-
-static int libunwind_initialized;
-static struct gdbarch_data *libunwind_descr_handle;
-
-/* Required function pointers from libunwind.  */
-static int (*unw_get_reg_p) (unw_cursor_t *, unw_regnum_t, unw_word_t *);
-static int (*unw_get_fpreg_p) (unw_cursor_t *, unw_regnum_t, unw_fpreg_t *);
-static int (*unw_get_saveloc_p) (unw_cursor_t *, unw_regnum_t,
-				 unw_save_loc_t *);
-static int (*unw_is_signal_frame_p) (unw_cursor_t *);
-static int (*unw_step_p) (unw_cursor_t *);
-static int (*unw_init_remote_p) (unw_cursor_t *, unw_addr_space_t, void *);
-static unw_addr_space_t (*unw_create_addr_space_p) (unw_accessors_t *, int);
-static void (*unw_destroy_addr_space_p) (unw_addr_space_t);
-static int (*unw_search_unwind_table_p) (unw_addr_space_t, unw_word_t,
-					 unw_dyn_info_t *,
-					 unw_proc_info_t *, int, void *);
-static unw_word_t (*unw_find_dyn_list_p) (unw_addr_space_t, unw_dyn_info_t *,
-					  void *);
-
-
-struct libunwind_frame_cache
-{
-  CORE_ADDR base;
-  CORE_ADDR func_addr;
-  unw_cursor_t cursor;
-  unw_addr_space_t as;
-};
-
-/* We need to qualify the function names with a platform-specific prefix
-   to match the names used by the libunwind library.  The UNW_OBJ macro is
-   provided by the libunwind.h header file.  */
-#define STRINGIFY2(name)	#name
-#define STRINGIFY(name)		STRINGIFY2(name)
-
-#ifndef LIBUNWIND_SO
-/* Use the stable ABI major version number.  `libunwind-ia64.so' is a link time
-   only library, not a runtime one.  */
-#define LIBUNWIND_SO "libunwind-" STRINGIFY(UNW_TARGET) ".so.7"
-#endif
-
-static char *get_reg_name = STRINGIFY(UNW_OBJ(get_reg));
-static char *get_fpreg_name = STRINGIFY(UNW_OBJ(get_fpreg));
-static char *get_saveloc_name = STRINGIFY(UNW_OBJ(get_save_loc));
-static char *is_signal_frame_name = STRINGIFY(UNW_OBJ(is_signal_frame));
-static char *step_name = STRINGIFY(UNW_OBJ(step));
-static char *init_remote_name = STRINGIFY(UNW_OBJ(init_remote));
-static char *create_addr_space_name = STRINGIFY(UNW_OBJ(create_addr_space));
-static char *destroy_addr_space_name = STRINGIFY(UNW_OBJ(destroy_addr_space));
-static char *search_unwind_table_name
-  = STRINGIFY(UNW_OBJ(search_unwind_table));
-static char *find_dyn_list_name = STRINGIFY(UNW_OBJ(find_dyn_list));
-
-static struct libunwind_descr *
-libunwind_descr (struct gdbarch *gdbarch)
-{
-  return gdbarch_data (gdbarch, libunwind_descr_handle);
-}
-
-static void *
-libunwind_descr_init (struct gdbarch *gdbarch)
-{
-  struct libunwind_descr *descr
-    = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct libunwind_descr);
-
-  return descr;
-}
-
-void
-libunwind_frame_set_descr (struct gdbarch *gdbarch,
-			   struct libunwind_descr *descr)
-{
-  struct libunwind_descr *arch_descr;
-
-  gdb_assert (gdbarch != NULL);
-
-  arch_descr = gdbarch_data (gdbarch, libunwind_descr_handle);
-
-  if (arch_descr == NULL)
-    {
-      /* First time here.  Must initialize data area.  */
-      arch_descr = libunwind_descr_init (gdbarch);
-      deprecated_set_gdbarch_data (gdbarch,
-				   libunwind_descr_handle, arch_descr);
-    }
-
-  /* Copy new descriptor info into arch descriptor.  */
-  arch_descr->gdb2uw = descr->gdb2uw;
-  arch_descr->uw2gdb = descr->uw2gdb;
-  arch_descr->is_fpreg = descr->is_fpreg;
-  arch_descr->accessors = descr->accessors;
-  arch_descr->special_accessors = descr->special_accessors;
-}
-
-static struct libunwind_frame_cache *
-libunwind_frame_cache (struct frame_info *this_frame, void **this_cache)
-{
-  unw_accessors_t *acc;
-  unw_addr_space_t as;
-  unw_word_t fp;
-  unw_regnum_t uw_sp_regnum;
-  struct libunwind_frame_cache *cache;
-  struct libunwind_descr *descr;
-  struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  int i, ret;
-
-  if (*this_cache)
-    return *this_cache;
-
-  /* Allocate a new cache.  */
-  cache = FRAME_OBSTACK_ZALLOC (struct libunwind_frame_cache);
-
-  cache->func_addr = get_frame_func (this_frame);
-  if (cache->func_addr == 0)
-    /* This can happen when the frame corresponds to a function for which
-       there is no debugging information nor any entry in the symbol table.
-       This is probably a static function for which an entry in the symbol
-       table was not created when the objfile got linked (observed in
-       libpthread.so on ia64-hpux).
-
-       The best we can do, in that case, is use the frame PC as the function
-       address.  We don't need to give up since we still have the unwind
-       record to help us perform the unwinding.  There is also another
-       compelling to continue, because abandonning now means stopping
-       the backtrace, which can never be helpful for the user.  */
-    cache->func_addr = get_frame_pc (this_frame);
-
-  /* Get a libunwind cursor to the previous frame.
-  
-     We do this by initializing a cursor.  Libunwind treats a new cursor
-     as the top of stack and will get the current register set via the
-     libunwind register accessor.  Now, we provide the platform-specific
-     accessors and we set up the register accessor to use the frame
-     register unwinding interfaces so that we properly get the registers
-     for the current frame rather than the top.  We then use the unw_step
-     function to move the libunwind cursor back one frame.  We can later
-     use this cursor to find previous registers via the unw_get_reg
-     interface which will invoke libunwind's special logic.  */
-  descr = libunwind_descr (gdbarch);
-  acc = descr->accessors;
-  as =  unw_create_addr_space_p (acc,
-				 gdbarch_byte_order (gdbarch)
-				 == BFD_ENDIAN_BIG
-				 ? __BIG_ENDIAN
-				 : __LITTLE_ENDIAN);
-
-  unw_init_remote_p (&cache->cursor, as, this_frame);
-  if (unw_step_p (&cache->cursor) < 0)
-    {
-      unw_destroy_addr_space_p (as);
-      return NULL;
-    }
-
-  /* To get base address, get sp from previous frame.  */
-  uw_sp_regnum = descr->gdb2uw (gdbarch_sp_regnum (gdbarch));
-  ret = unw_get_reg_p (&cache->cursor, uw_sp_regnum, &fp);
-  if (ret < 0)
-    {
-      unw_destroy_addr_space_p (as);
-      error (_("Can't get libunwind sp register."));
-    }
-
-  cache->base = (CORE_ADDR)fp;
-  cache->as = as;
-
-  *this_cache = cache;
-  return cache;
-}
-
-void
-libunwind_frame_dealloc_cache (struct frame_info *self, void *this_cache)
-{
-  struct libunwind_frame_cache *cache = this_cache;
-
-  if (cache->as)
-    unw_destroy_addr_space_p (cache->as);
-}
-
-unw_word_t
-libunwind_find_dyn_list (unw_addr_space_t as, unw_dyn_info_t *di, void *arg)
-{
-  return unw_find_dyn_list_p (as, di, arg);
-}
-
-static const struct frame_unwind libunwind_frame_unwind =
-{
-  NORMAL_FRAME,
-  default_frame_unwind_stop_reason,
-  libunwind_frame_this_id,
-  libunwind_frame_prev_register,
-  NULL,
-  libunwind_frame_sniffer,
-  libunwind_frame_dealloc_cache,
-};
-
-/* Verify if there is sufficient libunwind information for the frame to use
-   libunwind frame unwinding.  */
-int
-libunwind_frame_sniffer (const struct frame_unwind *self,
-                         struct frame_info *this_frame, void **this_cache)
-{
-  unw_cursor_t cursor;
-  unw_accessors_t *acc;
-  unw_addr_space_t as;
-  struct libunwind_descr *descr;
-  struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  int i, ret;
-
-  /* To test for libunwind unwind support, initialize a cursor to
-     the current frame and try to back up.  We use this same method
-     when setting up the frame cache (see libunwind_frame_cache()).
-     If libunwind returns success for this operation, it means that
-     it has found sufficient libunwind unwinding information to do so.  */
-
-  descr = libunwind_descr (gdbarch);
-  acc = descr->accessors;
-  as =  unw_create_addr_space_p (acc,
-				 gdbarch_byte_order (gdbarch)
-				 == BFD_ENDIAN_BIG
-				 ? __BIG_ENDIAN
-				 : __LITTLE_ENDIAN);
-
-  ret = unw_init_remote_p (&cursor, as, this_frame);
-
-  if (ret < 0)
-    {
-      unw_destroy_addr_space_p (as);
-      return 0;
-    }
-
- 
-  /* Check to see if we have libunwind info by checking if we are in a 
-     signal frame.  If it doesn't return an error, we have libunwind info
-     and can use libunwind.  */
-  ret = unw_is_signal_frame_p (&cursor);
-  unw_destroy_addr_space_p (as);
-
-  if (ret < 0)
-    return 0;
-
-  return 1;
-}
-
-void
-libunwind_frame_this_id (struct frame_info *this_frame, void **this_cache,
-		         struct frame_id *this_id)
-{
-  struct libunwind_frame_cache *cache =
-    libunwind_frame_cache (this_frame, this_cache);
-
-  if (cache != NULL)
-    (*this_id) = frame_id_build (cache->base, cache->func_addr);
-}
-
-struct value *
-libunwind_frame_prev_register (struct frame_info *this_frame,
-                               void **this_cache, int regnum)
-{
-  struct libunwind_frame_cache *cache =
-    libunwind_frame_cache (this_frame, this_cache);
-  struct gdbarch *gdbarch = get_frame_arch (this_frame);
-
-  void *ptr;
-  unw_cursor_t *c;
-  unw_save_loc_t sl;
-  int i, ret;
-  unw_word_t intval;
-  unw_fpreg_t fpval;
-  unw_regnum_t uw_regnum;
-  struct libunwind_descr *descr;
-  struct value *val = NULL;
-
-  if (cache == NULL)
-    return frame_unwind_got_constant (this_frame, regnum, 0);
-  
-  /* Convert from gdb register number to libunwind register number.  */
-  descr = libunwind_descr (get_frame_arch (this_frame));
-  uw_regnum = descr->gdb2uw (regnum);
-
-  gdb_assert (regnum >= 0);
-
-  if (!target_has_registers)
-    error (_("No registers."));
-
-  if (uw_regnum < 0)
-    return frame_unwind_got_constant (this_frame, regnum, 0);
-
-  if (unw_get_saveloc_p (&cache->cursor, uw_regnum, &sl) < 0)
-    return frame_unwind_got_constant (this_frame, regnum, 0);
-
-  switch (sl.type)
-    {
-    case UNW_SLT_MEMORY:
-      val = frame_unwind_got_memory (this_frame, regnum, sl.u.addr);
-      break;
-
-    case UNW_SLT_REG:
-      val = frame_unwind_got_register (this_frame, regnum,
-                                       descr->uw2gdb (sl.u.regnum));
-      break;
-    case UNW_SLT_NONE:
-      {
-        /* The register is not stored at a specific memory address nor
-           inside another register.  So use libunwind to fetch the register
-           value for us, and create a constant value with the result.  */
-        if (descr->is_fpreg (uw_regnum))
-          {
-            ret = unw_get_fpreg_p (&cache->cursor, uw_regnum, &fpval);
-            if (ret < 0)
-              return frame_unwind_got_constant (this_frame, regnum, 0);
-            val = frame_unwind_got_bytes (this_frame, regnum,
-                                          (gdb_byte *) &fpval);
-          }
-        else
-          {
-            ret = unw_get_reg_p (&cache->cursor, uw_regnum, &intval);
-            if (ret < 0)
-              return frame_unwind_got_constant (this_frame, regnum, 0);
-            val = frame_unwind_got_constant (this_frame, regnum, intval);
-          }
-        break;
-      }
-    }
-
-  return val;
-} 
-
-CORE_ADDR
-libunwind_frame_base_address (struct frame_info *this_frame, void **this_cache)
-{
-  struct libunwind_frame_cache *cache =
-    libunwind_frame_cache (this_frame, this_cache);
-
-  if (cache == NULL)
-    return (CORE_ADDR)NULL;
-  return cache->base;
-}
-
-/* The following is a glue routine to call the libunwind unwind table
-   search function to get unwind information for a specified ip address.  */ 
-int
-libunwind_search_unwind_table (void *as, long ip, void *di,
-			       void *pi, int need_unwind_info, void *args)
-{
-  return unw_search_unwind_table_p (*(unw_addr_space_t *)as, (unw_word_t )ip, 
-				    di, pi, need_unwind_info, args);
-}
-
-/* Verify if we are in a sigtramp frame and we can use libunwind to unwind.  */
-int
-libunwind_sigtramp_frame_sniffer (const struct frame_unwind *self,
-                                  struct frame_info *this_frame,
-                                  void **this_cache)
-{
-  unw_cursor_t cursor;
-  unw_accessors_t *acc;
-  unw_addr_space_t as;
-  struct libunwind_descr *descr;
-  struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  int i, ret;
-
-  /* To test for libunwind unwind support, initialize a cursor to the
-     current frame and try to back up.  We use this same method when
-     setting up the frame cache (see libunwind_frame_cache()).  If
-     libunwind returns success for this operation, it means that it
-     has found sufficient libunwind unwinding information to do
-     so.  */
-
-  descr = libunwind_descr (gdbarch);
-  acc = descr->accessors;
-  as =  unw_create_addr_space_p (acc,
-				 gdbarch_byte_order (gdbarch)
-				 == BFD_ENDIAN_BIG
-				 ? __BIG_ENDIAN
-				 : __LITTLE_ENDIAN);
-
-  ret = unw_init_remote_p (&cursor, as, this_frame);
-
-  if (ret < 0)
-    {
-      unw_destroy_addr_space_p (as);
-      return 0;
-    }
-
-  /* Check to see if we are in a signal frame.  */
-  ret = unw_is_signal_frame_p (&cursor);
-  unw_destroy_addr_space_p (as);
-  if (ret > 0)
-    return 1;
-
-  return 0;
-}
-
-/* The following routine is for accessing special registers of the top frame.
-   A special set of accessors must be given that work without frame info.
-   This is used by ia64 to access the rse registers r32-r127.  While they
-   are usually located at BOF, this is not always true and only the libunwind
-   info can decipher where they actually are.  */
-int
-libunwind_get_reg_special (struct gdbarch *gdbarch, struct regcache *regcache,
-			   int regnum, void *buf)
-{
-  unw_cursor_t cursor;
-  unw_accessors_t *acc;
-  unw_addr_space_t as;
-  struct libunwind_descr *descr;
-  int ret;
-  unw_regnum_t uw_regnum;
-  unw_word_t intval;
-  unw_fpreg_t fpval;
-  void *ptr;
-
-
-  descr = libunwind_descr (gdbarch);
-  acc = descr->special_accessors;
-  as =  unw_create_addr_space_p (acc,
-				 gdbarch_byte_order (gdbarch)
-				 == BFD_ENDIAN_BIG
-				 ? __BIG_ENDIAN
-				 : __LITTLE_ENDIAN);
-
-  ret = unw_init_remote_p (&cursor, as, regcache);
-  if (ret < 0)
-    {
-      unw_destroy_addr_space_p (as);
-      return -1;
-    }
-
-  uw_regnum = descr->gdb2uw (regnum);
-
-  if (descr->is_fpreg (uw_regnum))
-    {
-      ret = unw_get_fpreg_p (&cursor, uw_regnum, &fpval);
-      ptr = &fpval;
-    }
-  else
-    {
-      ret = unw_get_reg_p (&cursor, uw_regnum, &intval);
-      ptr = &intval;
-    }
-
-  unw_destroy_addr_space_p (as);
-
-  if (ret < 0)
-    return -1;
-
-  if (buf)
-    memcpy (buf, ptr, register_size (gdbarch, regnum));
-
-  return 0;
-}
-  
-static int
-libunwind_load (void)
-{
-  void *handle;
-
-  handle = dlopen (LIBUNWIND_SO, RTLD_NOW);
-  if (handle == NULL)
-    return 0;
-
-  /* Initialize pointers to the dynamic library functions we will use.  */
-
-  unw_get_reg_p = dlsym (handle, get_reg_name);
-  if (unw_get_reg_p == NULL)
-    return 0;
-
-  unw_get_fpreg_p = dlsym (handle, get_fpreg_name);
-  if (unw_get_fpreg_p == NULL)
-    return 0;
-
-  unw_get_saveloc_p = dlsym (handle, get_saveloc_name);
-  if (unw_get_saveloc_p == NULL)
-    return 0;
-
-  unw_is_signal_frame_p = dlsym (handle, is_signal_frame_name);
-  if (unw_is_signal_frame_p == NULL)
-    return 0;
-
-  unw_step_p = dlsym (handle, step_name);
-  if (unw_step_p == NULL)
-    return 0;
-
-  unw_init_remote_p = dlsym (handle, init_remote_name);
-  if (unw_init_remote_p == NULL)
-    return 0;
-
-  unw_create_addr_space_p = dlsym (handle, create_addr_space_name);
-  if (unw_create_addr_space_p == NULL)
-    return 0;
-
-  unw_destroy_addr_space_p = dlsym (handle, destroy_addr_space_name);
-  if (unw_destroy_addr_space_p == NULL)
-    return 0;
-
-  unw_search_unwind_table_p = dlsym (handle, search_unwind_table_name);
-  if (unw_search_unwind_table_p == NULL)
-    return 0;
-
-  unw_find_dyn_list_p = dlsym (handle, find_dyn_list_name);
-  if (unw_find_dyn_list_p == NULL)
-    return 0;
-   
-  return 1;
-}
-
-int
-libunwind_is_initialized (void)
-{
-  return libunwind_initialized;
-}
-
-/* Provide a prototype to silence -Wmissing-prototypes.  */
-void _initialize_libunwind_frame (void);
-
-void
-_initialize_libunwind_frame (void)
-{
-  libunwind_descr_handle
-    = gdbarch_data_register_post_init (libunwind_descr_init);
-
-  libunwind_initialized = libunwind_load ();
-}
diff --git a/gdb/libunwind-frame.h b/gdb/libunwind-frame.h
deleted file mode 100644
index 0251819..0000000
--- a/gdb/libunwind-frame.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* Frame unwinder for frames with libunwind frame information.
-
-   Copyright (C) 2003, 2006-2012 Free Software Foundation, Inc.
-
-   Contributed by Jeff Johnston.
-
-   This file is part of GDB.
-
-   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 3 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, see <http://www.gnu.org/licenses/>.  */
-
-#ifdef HAVE_LIBUNWIND_H
-
-struct frame_info;
-struct frame_id;
-struct regcache;
-struct gdbarch;
-
-#ifndef LIBUNWIND_FRAME_H
-#define LIBUNWIND_FRAME_H 1
-
-#include "libunwind.h"
-
-struct libunwind_descr
-{
-  int (*gdb2uw) (int);
-  int (*uw2gdb) (int);
-  int (*is_fpreg) (int);
-  void *accessors;
-  void *special_accessors;
-};
-
-int libunwind_frame_sniffer (const struct frame_unwind *self,
-                             struct frame_info *this_frame,
-                             void **this_cache);
-                          
-int libunwind_sigtramp_frame_sniffer (const struct frame_unwind *self,
-                                      struct frame_info *this_frame,
-                                      void **this_cache);
-
-void libunwind_frame_set_descr (struct gdbarch *arch,
-				struct libunwind_descr *descr);
-
-void libunwind_frame_this_id (struct frame_info *this_frame, void **this_cache,
-			      struct frame_id *this_id);
-struct value *libunwind_frame_prev_register (struct frame_info *this_frame,
-                                             void **this_cache, int regnum);
-void libunwind_frame_dealloc_cache (struct frame_info *self, void *cache);
-CORE_ADDR libunwind_frame_base_address (struct frame_info *this_frame,
-                                        void **this_cache);
-
-int libunwind_is_initialized (void);
-
-int libunwind_search_unwind_table (void *as, long ip, void *di,
-				   void *pi, int need_unwind_info, void *args);
-
-unw_word_t libunwind_find_dyn_list (unw_addr_space_t, unw_dyn_info_t *,
-				    void *);
-
-int libunwind_get_reg_special (struct gdbarch *gdbarch,
-			       struct regcache *regcache,
-			       int regnum, void *buf);
-
-#endif /* libunwind-frame.h */
-
-#endif /* HAVE_LIBUNWIND_H  */
diff --git a/gdb/linespec.c b/gdb/linespec.c
index 54e699f..c9b7ecc 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -43,6 +43,7 @@
 #include "cli/cli-utils.h"
 #include "filenames.h"
 #include "ada-lang.h"
+#include "stack.h"
 
 typedef struct symtab *symtab_p;
 DEF_VEC_P (symtab_p);
@@ -63,12 +64,108 @@ struct address_entry
   CORE_ADDR addr;
 };
 
+/* A helper struct which just holds a minimal symbol and the object
+   file from which it came.  */
+
+typedef struct minsym_and_objfile
+{
+  struct minimal_symbol *minsym;
+  struct objfile *objfile;
+} minsym_and_objfile_d;
+
+DEF_VEC_O (minsym_and_objfile_d);
+
+/* An enumeration of possible signs for a line offset.  */
+enum offset_relative_sign
+{
+  /* No sign  */
+  LINE_OFFSET_NONE,
+
+  /* A plus sign ("+")  */
+  LINE_OFFSET_PLUS,
+
+  /* A minus sign ("-")  */
+  LINE_OFFSET_MINUS,
+
+  /* A special "sign" for unspecified offset.  */
+  LINE_OFFSET_UNKNOWN
+};
+
+/* A line offset in a linespec.  */
+
+struct line_offset
+{
+  /* Line offset and any specified sign.  */
+  int offset;
+  enum offset_relative_sign sign;
+};
+
+/* A linespec.  Elements of this structure are filled in by a parser
+   (either parse_linespec or some other function).  The structure is
+   then converted into SALs by convert_linespec_to_sals.  */
+
+struct linespec
+{
+  /* An expression and the resulting PC.  Specifying an expression
+     currently precludes the use of other members.  */
+
+  /* The expression entered by the user.  */
+  char *expression;
+
+  /* The resulting PC expression derived from evaluating EXPRESSION.  */
+  CORE_ADDR expr_pc;
+
+  /* Any specified file symtabs.  */
+
+  /* The user-supplied source filename or NULL if none was specified.  */
+  char *source_filename;
+
+  /* The list of symtabs to search to which to limit the search.  May not
+     be NULL.  If SOURCE_FILENAME is NULL (no user-specified filename),
+     FILE_SYMTABS should contain one single NULL member.  This will
+     cause the code to use the default symtab.  */
+  VEC (symtab_p) *file_symtabs;
+
+  /* The name of a function or method and any matching symbols.  */
+
+  /* The user-specified function name.  If no function name was
+     supplied, this may be NULL.  */
+  char *function_name;
+
+  /* A list of matching function symbols and minimal symbols.  Both lists
+     may be NULL if no matching symbols were found.  */
+  VEC (symbolp) *function_symbols;
+  VEC (minsym_and_objfile_d) *minimal_symbols;
+
+  /* The name of a label and matching symbols.  */
+
+  /* The user-specified label name.  */
+  char *label_name;
+
+  /* A structure of matching label symbols and the corresponding
+     function symbol in which the label was found.  Both may be NULL
+     or both must be non-NULL.  */
+  struct
+  {
+    VEC (symbolp) *label_symbols;
+    VEC (symbolp) *function_symbols;
+  } labels;
+
+  /* Line offset.  It may be LINE_OFFSET_UNKNOWN, meaning that no
+   offset was specified.  */
+  struct line_offset line_offset;
+};
+typedef struct linespec *linespec_p;
+
 /* An instance of this is used to keep all state while linespec
    operates.  This instance is passed around as a 'this' pointer to
    the various implementation methods.  */
 
 struct linespec_state
 {
+  /* The language in use during linespec processing.  */
+  const struct language_defn *language;
+
   /* The program space as seen when the module was entered.  */
   struct program_space *program_space;
 
@@ -78,19 +175,6 @@ struct linespec_state
   /* The default line to use.  */
   int default_line;
 
-  /* If the linespec started with "FILE:", this holds all the matching
-     symtabs.  Otherwise, it will hold a single NULL entry, meaning
-     that the default symtab should be used.  */
-  VEC (symtab_p) *file_symtabs;
-
-  /* If the linespec started with "FILE:", this holds an xmalloc'd
-     copy of "FILE".  */
-  char *user_filename;
-
-  /* If the linespec is "FUNCTION:LABEL", this holds an xmalloc'd copy
-     of "FUNCTION".  */
-  char *user_function;
-
   /* The 'funfirstline' value that was passed in to decode_line_1 or
      decode_line_full.  */
   int funfirstline;
@@ -117,67 +201,128 @@ struct collect_info
   /* The linespec object in use.  */
   struct linespec_state *state;
 
+  /* A list of symtabs to which to restrict matches.  */
+  VEC (symtab_p) *file_symtabs;
+
   /* The result being accumulated.  */
-  struct symtabs_and_lines result;
+  struct
+  {
+    VEC (symbolp) *symbols;
+    VEC (minsym_and_objfile_d) *minimal_symbols;
+  } result;
 };
 
-/* Prototypes for local functions.  */
+/* Token types  */
 
-static void initialize_defaults (struct symtab **default_symtab,
-				 int *default_line);
+enum ls_token_type
+{
+  /* A keyword  */
+  LSTOKEN_KEYWORD = 0,
 
-static struct symtabs_and_lines decode_indirect (struct linespec_state *self,
-						 char **argptr);
+  /* A colon "separator"  */
+  LSTOKEN_COLON,
 
-static char *locate_first_half (char **argptr, int *is_quote_enclosed);
+  /* A string  */
+  LSTOKEN_STRING,
 
-static struct symtabs_and_lines decode_objc (struct linespec_state *self,
-					     char **argptr);
+  /* A number  */
+  LSTOKEN_NUMBER,
+
+  /* A comma  */
+  LSTOKEN_COMMA,
+
+  /* EOI (end of input)  */
+  LSTOKEN_EOI,
+
+  /* Consumed token  */
+  LSTOKEN_CONSUMED
+};
+typedef enum ls_token_type linespec_token_type;
+
+/* List of keywords  */
+
+static const char * const linespec_keywords[] = { "if", "thread", "task" };
+
+/* A token of the linespec lexer  */
+
+struct ls_token
+{
+  /* The type of the token  */
+  linespec_token_type type;
+
+  /* Data for the token  */
+  union
+  {
+    /* A string, given as a stoken  */
+    struct stoken string;
+
+    /* A keyword  */
+    const char *keyword;
+  } data;
+};
+typedef struct ls_token linespec_token;
+
+#define LS_TOKEN_STOKEN(TOK) (TOK).data.string
+#define LS_TOKEN_KEYWORD(TOK) (TOK).data.keyword
+
+/* An instance of the linespec parser.  */
+
+struct ls_parser
+{
+  /* Lexer internal data  */
+  struct
+  {
+    /* Save head of input stream.  */
+    char *saved_arg;
 
-static struct symtabs_and_lines decode_compound (struct linespec_state *self,
-						 char **argptr,
-						 char *saved_arg,
-						 char *p);
+    /* Head of the input stream.  */
+    char **stream;
+#define PARSER_STREAM(P) (*(P)->lexer.stream)
 
-static VEC (symbolp) *lookup_prefix_sym (char **argptr, char *p,
-					 VEC (symtab_p) *,
-					 char **);
+    /* The current token.  */
+    linespec_token current;
+  } lexer;
 
-static struct symtabs_and_lines find_method (struct linespec_state *self,
-					     char *saved_arg,
-					     char *copy,
-					     const char *class_name,
-					     VEC (symbolp) *sym_classes);
+  /* Is the entire linespec quote-enclosed?  */
+  int is_quote_enclosed;
+
+  /* The state of the parse.  */
+  struct linespec_state state;
+#define PARSER_STATE(PPTR) (&(PPTR)->state)
 
-static void cplusplus_error (const char *name, const char *fmt, ...)
-     ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (2, 3);
+  /* The result of the parse.  */
+  struct linespec result;
+#define PARSER_RESULT(PPTR) (&(PPTR)->result)
+};
+typedef struct ls_parser linespec_parser;
 
-static char *find_toplevel_char (char *s, char c);
+/* Prototypes for local functions.  */
 
-static int is_objc_method_format (const char *s);
+static void initialize_defaults (struct symtab **default_symtab,
+				 int *default_line);
 
-static VEC (symtab_p) *symtabs_from_filename (char **argptr,
-					      char *p, int is_quote_enclosed,
-					      char **user_filename);
+static CORE_ADDR linespec_expression_to_pc (char **exp_ptr);
 
-static VEC (symbolp) *find_function_symbols (char **argptr, char *p,
-					     int is_quote_enclosed,
-					     char **user_function);
+static struct symtabs_and_lines decode_objc (struct linespec_state *self,
+					     linespec_p ls,
+					     char **argptr);
 
-static struct symtabs_and_lines decode_all_digits (struct linespec_state *self,
-						   char **argptr,
-						   char *q);
+static VEC (symtab_p) *symtabs_from_filename (const char *);
 
-static struct symtabs_and_lines decode_dollar (struct linespec_state *self,
-					       char *copy);
+static VEC (symbolp) *find_label_symbols (struct linespec_state *self,
+					  VEC (symbolp) *function_symbols,
+					  VEC (symbolp) **label_funcs_ret,
+					  const char *name);
 
-static int decode_label (struct linespec_state *self,
-			 VEC (symbolp) *function_symbols,
-			 char *copy,
-			 struct symtabs_and_lines *result);
+void find_linespec_symbols (struct linespec_state *self,
+			    VEC (symtab_p) *file_symtabs,
+			    const char *name,
+			    VEC (symbolp) **symbols,
+			    VEC (minsym_and_objfile_d) **minsyms);
 
-static struct symtabs_and_lines decode_variable (struct linespec_state *self,
-						 char *copy);
+static struct line_offset
+     linespec_parse_variable (struct linespec_state *self,
+			      const char *variable);
 
 static int symbol_to_sal (struct symtab_and_line *result,
 			  int funfirstline, struct symbol *sym);
@@ -190,239 +335,735 @@ static void add_all_symbol_names_from_pspace (struct collect_info *info,
 					      struct program_space *pspace,
 					      VEC (const_char_ptr) *names);
 
-/* Helper functions.  */
+static VEC (symtab_p) *collect_symtabs_from_filename (const char *file);
 
-/* Add SAL to SALS.  */
+static void decode_digits_ordinary (struct linespec_state *self,
+				    linespec_p ls,
+				    int line,
+				    struct symtabs_and_lines *sals,
+				    struct linetable_entry **best_entry);
 
-static void
-add_sal_to_sals_basic (struct symtabs_and_lines *sals,
-		       struct symtab_and_line *sal)
-{
-  ++sals->nelts;
-  sals->sals = xrealloc (sals->sals, sals->nelts * sizeof (sals->sals[0]));
-  sals->sals[sals->nelts - 1] = *sal;
-}
+static void decode_digits_list_mode (struct linespec_state *self,
+				     linespec_p ls,
+				     struct symtabs_and_lines *values,
+				     struct symtab_and_line val);
 
-/* Add SAL to SALS, and also update SELF->CANONICAL_NAMES to reflect
-   the new sal, if needed.  If not NULL, SYMNAME is the name of the
-   symbol to use when constructing the new canonical name.  */
+static void minsym_found (struct linespec_state *self, struct objfile *objfile,
+			  struct minimal_symbol *msymbol,
+			  struct symtabs_and_lines *result);
 
-static void
-add_sal_to_sals (struct linespec_state *self,
-		 struct symtabs_and_lines *sals,
-		 struct symtab_and_line *sal,
-		 const char *symname)
+static int compare_symbols (const void *a, const void *b);
+
+static int compare_msymbols (const void *a, const void *b);
+
+static const char *find_toplevel_char (const char *s, char c);
+
+/* Permitted quote characters for the parser.  This is different from the
+   completer's quote characters to allow backward compatibility with the
+   previous parser.  */
+static const char *const linespec_quote_characters = "\"\'";
+
+/* Lexer functions.  */
+
+/* Lex a number from the input in PARSER.  This only supports
+   decimal numbers.
+
+   Return true if input is decimal numbers.  Return false if not.  */
+
+static int
+linespec_lexer_lex_number (linespec_parser *parser, linespec_token *tokenp)
 {
-  add_sal_to_sals_basic (sals, sal);
+  tokenp->type = LSTOKEN_NUMBER;
+  LS_TOKEN_STOKEN (*tokenp).length = 0;
+  LS_TOKEN_STOKEN (*tokenp).ptr = PARSER_STREAM (parser);
 
-  if (self->canonical)
+  /* Keep any sign at the start of the stream.  */
+  if (*PARSER_STREAM (parser) == '+' || *PARSER_STREAM (parser) == '-')
     {
-      char *canonical_name = NULL;
-
-      self->canonical_names = xrealloc (self->canonical_names,
-					sals->nelts * sizeof (char *));
-      if (sal->symtab && sal->symtab->filename)
-	{
-	  char *filename = sal->symtab->filename;
+      ++LS_TOKEN_STOKEN (*tokenp).length;
+      ++(PARSER_STREAM (parser));
+    }
 
-	  /* Note that the filter doesn't have to be a valid linespec
-	     input.  We only apply the ":LINE" treatment to Ada for
-	     the time being.  */
-	  if (symname != NULL && sal->line != 0
-	      && current_language->la_language == language_ada)
-	    canonical_name = xstrprintf ("%s:%s:%d", filename, symname,
-					 sal->line);
-	  else if (symname != NULL)
-	    canonical_name = xstrprintf ("%s:%s", filename, symname);
-	  else
-	    canonical_name = xstrprintf ("%s:%d", filename, sal->line);
-	}
+  while (isdigit (*PARSER_STREAM (parser)))
+    {
+      ++LS_TOKEN_STOKEN (*tokenp).length;
+      ++(PARSER_STREAM (parser));
+    }
 
-      self->canonical_names[sals->nelts - 1] = canonical_name;
+  /* If the next character in the input buffer is not a space, comma,
+     quote, or colon, the input does not represent a number.  */
+  if (*PARSER_STREAM (parser) != '\0'
+      && !isspace (*PARSER_STREAM (parser)) && *PARSER_STREAM (parser) != ','
+      && *PARSER_STREAM (parser) != ':'
+      && !strchr (linespec_quote_characters, *PARSER_STREAM (parser)))
+    {
+      PARSER_STREAM (parser) = LS_TOKEN_STOKEN (*tokenp).ptr;
+      return 0;
     }
+
+  return 1;
 }
 
-/* A hash function for address_entry.  */
+/* Does P represent one of the keywords?  If so, return
+   the keyword.  If not, return NULL.  */
 
-static hashval_t
-hash_address_entry (const void *p)
+static const char *
+linespec_lexer_lex_keyword (const char *p)
 {
-  const struct address_entry *aep = p;
-  hashval_t hash;
+  int i;
 
-  hash = iterative_hash_object (aep->pspace, 0);
-  return iterative_hash_object (aep->addr, hash);
+  if (p != NULL)
+    {
+      for (i = 0; i < ARRAY_SIZE (linespec_keywords); ++i)
+	{
+	  int len = strlen (linespec_keywords[i]);
+
+	  /* If P begins with one of the keywords and the next
+	     character is not a valid identifier character,
+	     we have found a keyword.  */
+	  if (strncmp (p, linespec_keywords[i], len) == 0
+	      && !(isalnum (p[len]) || p[len] == '_'))
+	    return linespec_keywords[i];
+	}
+    }
+
+  return NULL;
 }
 
-/* An equality function for address_entry.  */
+/* Does STRING represent an Ada operator?  If so, return the length
+   of the decoded operator name.  If not, return 0.  */
 
 static int
-eq_address_entry (const void *a, const void *b)
+is_ada_operator (const char *string)
 {
-  const struct address_entry *aea = a;
-  const struct address_entry *aeb = b;
+  const struct ada_opname_map *mapping;
 
-  return aea->pspace == aeb->pspace && aea->addr == aeb->addr;
+  for (mapping = ada_opname_table;
+       mapping->encoded != NULL
+	 && strncmp (mapping->decoded, string,
+		     strlen (mapping->decoded)) != 0; ++mapping)
+    ;
+
+  return mapping->decoded == NULL ? 0 : strlen (mapping->decoded);
 }
 
-/* Check whether the address, represented by PSPACE and ADDR, is
-   already in the set.  If so, return 0.  Otherwise, add it and return
-   1.  */
+/* Find QUOTE_CHAR in STRING, accounting for the ':' terminal.  Return
+   the location of QUOTE_CHAR, or NULL if not found.  */
 
-static int
-maybe_add_address (htab_t set, struct program_space *pspace, CORE_ADDR addr)
+static const char *
+skip_quote_char (const char *string, char quote_char)
 {
-  struct address_entry e, *p;
-  void **slot;
-
-  e.pspace = pspace;
-  e.addr = addr;
-  slot = htab_find_slot (set, &e, INSERT);
-  if (*slot)
-    return 0;
+  const char *p, *last;
 
-  p = XNEW (struct address_entry);
-  memcpy (p, &e, sizeof (struct address_entry));
-  *slot = p;
+  p = last = find_toplevel_char (string, quote_char);
+  while (p && *p != '\0' && *p != ':')
+    {
+      p = find_toplevel_char (p, quote_char);
+      if (p != NULL)
+	last = p++;
+    }
 
-  return 1;
+  return last;
 }
 
-/* Issue a helpful hint on using the command completion feature on
-   single quoted demangled C++ symbols as part of the completion
-   error.  */
+/* Make a writable copy of the string given in TOKEN, trimming
+   any trailing whitespace.  */
 
-static void
-cplusplus_error (const char *name, const char *fmt, ...)
+static char *
+copy_token_string (linespec_token token)
 {
-  struct ui_file *tmp_stream;
-  char *message;
-
-  tmp_stream = mem_fileopen ();
-  make_cleanup_ui_file_delete (tmp_stream);
+  char *str, *s;
 
-  {
-    va_list args;
-
-    va_start (args, fmt);
-    vfprintf_unfiltered (tmp_stream, fmt, args);
-    va_end (args);
-  }
+  if (token.type == LSTOKEN_KEYWORD)
+    return xstrdup (LS_TOKEN_KEYWORD (token));
 
-  while (*name == '\'')
-    name++;
-  fprintf_unfiltered (tmp_stream,
-		      ("Hint: try '%s<TAB> or '%s<ESC-?>\n"
-		       "(Note leading single quote.)"),
-		      name, name);
+  str = savestring (LS_TOKEN_STOKEN (token).ptr,
+		    LS_TOKEN_STOKEN (token).length);
+  s = remove_trailing_whitespace (str, str + LS_TOKEN_STOKEN (token).length);
+  *s = '\0';
 
-  message = ui_file_xstrdup (tmp_stream, NULL);
-  make_cleanup (xfree, message);
-  throw_error (NOT_FOUND_ERROR, "%s", message);
+  return str;
 }
 
-/* A helper for iterate_over_all_matching_symtabs that is passed as a
-   callback to the expand_symtabs_matching method.  */
+/* Does P represent the end of a quote-enclosed linespec?  */
 
 static int
-iterate_name_matcher (const struct language_defn *language,
-		      const char *name, void *d)
+is_closing_quote_enclosed (const char *p)
 {
-  const char **dname = d;
-
-  if (language->la_symbol_name_compare (name, *dname) == 0)
-    return 1;
-  return 0;
+  if (strchr (linespec_quote_characters, *p))
+    ++p;
+  p = skip_spaces ((char *) p);
+  return (*p == '\0' || linespec_lexer_lex_keyword (p));
 }
 
-/* A helper that walks over all matching symtabs in all objfiles and
-   calls CALLBACK for each symbol matching NAME.  If SEARCH_PSPACE is
-   not NULL, then the search is restricted to just that program
-   space.  */
+/* Find the end of the parameter list that starts with *INPUT.
+   This helper function assists with lexing string segments
+   which might contain valid (non-terminating) commas.  */
 
-static void
-iterate_over_all_matching_symtabs (const char *name,
-				   const domain_enum domain,
-				   int (*callback) (struct symbol *, void *),
-				   void *data,
-				   struct program_space *search_pspace)
+static char *
+find_parameter_list_end (char *input)
 {
-  struct objfile *objfile;
-  struct program_space *pspace;
-
-  ALL_PSPACES (pspace)
-  {
-    if (search_pspace != NULL && search_pspace != pspace)
-      continue;
-    if (pspace->executing_startup)
-      continue;
+  char end_char, start_char;
+  int depth;
+  char *p;
 
-    set_current_program_space (pspace);
+  start_char = *input;
+  if (start_char == '(')
+    end_char = ')';
+  else if (start_char == '<')
+    end_char = '>';
+  else
+    return NULL;
 
-    ALL_OBJFILES (objfile)
+  p = input;
+  depth = 0;
+  while (*p)
     {
-      struct symtab *symtab;
-
-      if (objfile->sf)
-	objfile->sf->qf->expand_symtabs_matching (objfile, NULL,
-						  iterate_name_matcher,
-						  ALL_DOMAIN,
-						  &name);
-
-      ALL_OBJFILE_SYMTABS (objfile, symtab)
+      if (*p == start_char)
+	++depth;
+      else if (*p == end_char)
 	{
-	  if (symtab->primary)
+	  if (--depth == 0)
 	    {
-	      struct block *block;
-
-	      block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), STATIC_BLOCK);
-	      LA_ITERATE_OVER_SYMBOLS (block, name, domain, callback, data);
+	      ++p;
+	      break;
 	    }
 	}
+      ++p;
     }
-  }
+
+  return p;
 }
 
-/* Returns the block to be used for symbol searches for the given SYMTAB,
-   which may be NULL.  */
 
-static struct block *
-get_search_block (struct symtab *symtab)
+/* Lex a string from the input in PARSER.  */
+
+static linespec_token
+linespec_lexer_lex_string (linespec_parser *parser)
 {
-  struct block *block;
+  linespec_token token;
+  char *start = PARSER_STREAM (parser);
 
-  if (symtab != NULL)
-    block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), STATIC_BLOCK);
-  else
+  token.type = LSTOKEN_STRING;
+
+  /* If the input stream starts with a quote character, skip to the next
+     quote character, regardless of the content.  */
+  if (strchr (linespec_quote_characters, *PARSER_STREAM (parser)))
     {
-      enum language save_language;
+      const char *end;
+      char quote_char = *PARSER_STREAM (parser);
 
-      /* get_selected_block can change the current language when there is
-	 no selected frame yet.  */
-      save_language = current_language->la_language;
-      block = get_selected_block (0);
-      set_language (save_language);
-    }
+      /* Special case: Ada operators.  */
+      if (PARSER_STATE (parser)->language->la_language == language_ada
+	  && quote_char == '\"')
+	{
+	  int len = is_ada_operator (PARSER_STREAM (parser));
 
-  return block;
-}
+	  if (len != 0)
+	    {
+	      /* The input is an Ada operator.  Return the quoted string
+		 as-is.  */
+	      LS_TOKEN_STOKEN (token).ptr = PARSER_STREAM (parser);
+	      LS_TOKEN_STOKEN (token).length = len;
+	      PARSER_STREAM (parser) += len;
+	      return token;
+	    }
 
-/* A helper for find_method.  This finds all methods in type T which
-   match NAME.  It adds resulting symbol names to RESULT_NAMES, and
-   adds T's direct superclasses to SUPERCLASSES.  */
+	  /* The input does not represent an Ada operator -- fall through
+	     to normal quoted string handling.  */
+	}
 
-static void
-find_methods (struct type *t, const char *name,
-	      VEC (const_char_ptr) **result_names,
-	      VEC (typep) **superclasses)
-{
-  int i1 = 0;
-  int ibase;
-  char *class_name = type_name_no_tag (t);
-  char *canon;
+      /* Skip past the beginning quote.  */
+      ++(PARSER_STREAM (parser));
 
-  /* Ignore this class if it doesn't have a name.  This is ugly, but
-     unless we figure out how to get the physname without the name of
+      /* Mark the start of the string.  */
+      LS_TOKEN_STOKEN (token).ptr = PARSER_STREAM (parser);
+
+      /* Skip to the ending quote.  */
+      end = skip_quote_char (PARSER_STREAM (parser), quote_char);
+
+      /* Error if the input did not terminate properly.  */
+      if (end == NULL)
+	error (_("unmatched quote"));
+
+      /* Skip over the ending quote and mark the length of the string.  */
+      PARSER_STREAM (parser) = (char *) ++end;
+      LS_TOKEN_STOKEN (token).length = PARSER_STREAM (parser) - 2 - start;
+    }
+  else
+    {
+      char *p;
+
+      /* Otherwise, only identifier characters are permitted.
+	 Spaces are the exception.  In general, we keep spaces,
+	 but only if the next characters in the input do not resolve
+	 to one of the keywords.
+
+	 This allows users to forgo quoting CV-qualifiers, template arguments,
+	 and similar common language constructs.  */
+
+      while (1)
+	{
+	  if (isspace (*PARSER_STREAM (parser)))
+	    {
+	      p = skip_spaces (PARSER_STREAM (parser));
+	      if (linespec_lexer_lex_keyword (p) != NULL)
+		{
+		  LS_TOKEN_STOKEN (token).ptr = start;
+		  LS_TOKEN_STOKEN (token).length
+		    = PARSER_STREAM (parser) - start;
+		  return token;
+		}
+
+	      /* Advance past the whitespace.  */
+	      PARSER_STREAM (parser) = p;
+	    }
+
+	  /* If the next character is EOI or (single) ':', the
+	     string is complete;  return the token.  */
+	  if (*PARSER_STREAM (parser) == 0)
+	    {
+	      LS_TOKEN_STOKEN (token).ptr = start;
+	      LS_TOKEN_STOKEN (token).length = PARSER_STREAM (parser) - start;
+	      return token;
+	    }
+	  else if (PARSER_STREAM (parser)[0] == ':')
+	    {
+	      /* Do not tokenize the C++ scope operator. */
+	      if (PARSER_STREAM (parser)[1] == ':')
+		++(PARSER_STREAM (parser));
+
+	      /* Do not tokenify if the input length so far is one
+		 (i.e, a single-letter drive name) and the next character
+		 is a directory separator.  This allows Windows-style
+		 paths to be recognized as filenames without quoting it.  */
+	      else if ((PARSER_STREAM (parser) - start) != 1
+		       || !IS_DIR_SEPARATOR (PARSER_STREAM (parser)[1]))
+		{
+		  LS_TOKEN_STOKEN (token).ptr = start;
+		  LS_TOKEN_STOKEN (token).length
+		    = PARSER_STREAM (parser) - start;
+		  return token;
+		}
+	    }
+	  /* Special case: permit quote-enclosed linespecs.  */
+	  else if (parser->is_quote_enclosed
+		   && strchr (linespec_quote_characters,
+			      *PARSER_STREAM (parser))
+		   && is_closing_quote_enclosed (PARSER_STREAM (parser)))
+	    {
+	      LS_TOKEN_STOKEN (token).ptr = start;
+	      LS_TOKEN_STOKEN (token).length = PARSER_STREAM (parser) - start;
+	      return token;
+	    }
+	  /* Because commas may terminate a linespec and appear in
+	     the middle of valid string input, special cases for
+	     '<' and '(' are necessary.  */
+	  else if (*PARSER_STREAM (parser) == '<'
+		   || *PARSER_STREAM (parser) == '(')
+	    {
+	      char *p;
+
+	      p = find_parameter_list_end (PARSER_STREAM (parser));
+	      if (p != NULL)
+		{
+		  PARSER_STREAM (parser) = p;
+		  continue;
+		}
+	    }
+	  /* Commas are terminators, but not if they are part of an
+	     operator name.  */
+	  else if (*PARSER_STREAM (parser) == ',')
+	    {
+	      if ((PARSER_STATE (parser)->language->la_language
+		   == language_cplus)
+		  && (PARSER_STREAM (parser) - start) > 8
+		  /* strlen ("operator") */)
+		{
+		  char *p = strstr (start, "operator");
+
+		  if (p != NULL && is_operator_name (p))
+		    {
+		      /* This is an operator name.  Keep going.  */
+		      ++(PARSER_STREAM (parser));
+		      continue;
+		    }
+		}
+
+	      /* Comma terminates the string.  */
+	      LS_TOKEN_STOKEN (token).ptr = start;
+	      LS_TOKEN_STOKEN (token).length = PARSER_STREAM (parser) - start;
+	      return token;
+	    }
+
+	  /* Advance the stream.  */
+	  ++(PARSER_STREAM (parser));
+	}
+    }
+
+  return token;
+}
+
+/* Lex a single linespec token from PARSER.  */
+
+static linespec_token
+linespec_lexer_lex_one (linespec_parser *parser)
+{
+  const char *keyword;
+
+  if (parser->lexer.current.type == LSTOKEN_CONSUMED)
+    {
+      /* Skip any whitespace.  */
+      PARSER_STREAM (parser) = skip_spaces (PARSER_STREAM (parser));
+
+      /* Check for a keyword.  */
+      keyword = linespec_lexer_lex_keyword (PARSER_STREAM (parser));
+      if (keyword != NULL)
+	{
+	  parser->lexer.current.type = LSTOKEN_KEYWORD;
+	  LS_TOKEN_KEYWORD (parser->lexer.current) = keyword;
+	  return parser->lexer.current;
+	}
+
+      /* Handle other tokens.  */
+      switch (*PARSER_STREAM (parser))
+	{
+	case 0:
+	  parser->lexer.current.type = LSTOKEN_EOI;
+	  break;
+
+	case '+': case '-':
+	case '0': case '1': case '2': case '3': case '4':
+        case '5': case '6': case '7': case '8': case '9':
+           if (!linespec_lexer_lex_number (parser, &(parser->lexer.current)))
+	     parser->lexer.current = linespec_lexer_lex_string (parser);
+          break;
+
+	case ':':
+	  /* If we have a scope operator, lex the input as a string.
+	     Otherwise, return LSTOKEN_COLON.  */
+	  if (PARSER_STREAM (parser)[1] == ':')
+	    parser->lexer.current = linespec_lexer_lex_string (parser);
+	  else
+	    {
+	      parser->lexer.current.type = LSTOKEN_COLON;
+	      ++(PARSER_STREAM (parser));
+	    }
+	  break;
+
+	case '\'': case '\"':
+	  /* Special case: permit quote-enclosed linespecs.  */
+	  if (parser->is_quote_enclosed
+	      && is_closing_quote_enclosed (PARSER_STREAM (parser)))
+	    {
+	      ++(PARSER_STREAM (parser));
+	      parser->lexer.current.type = LSTOKEN_EOI;
+	    }
+	  else
+	    parser->lexer.current = linespec_lexer_lex_string (parser);
+	  break;
+
+	case ',':
+	  parser->lexer.current.type = LSTOKEN_COMMA;
+	  LS_TOKEN_STOKEN (parser->lexer.current).ptr
+	    = PARSER_STREAM (parser);
+	  LS_TOKEN_STOKEN (parser->lexer.current).length = 1;
+	  ++(PARSER_STREAM (parser));
+	  break;
+
+	default:
+	  /* If the input is not a number, it must be a string.
+	     [Keywords were already considered above.]  */
+	  parser->lexer.current = linespec_lexer_lex_string (parser);
+	  break;
+	}
+    }
+
+  return parser->lexer.current;
+}
+
+/* Consume the current token and return the next token in PARSER's
+   input stream.  */
+
+static linespec_token
+linespec_lexer_consume_token (linespec_parser *parser)
+{
+  parser->lexer.current.type = LSTOKEN_CONSUMED;
+  return linespec_lexer_lex_one (parser);
+}
+
+/* Return the next token without consuming the current token.  */
+
+static linespec_token
+linespec_lexer_peek_token (linespec_parser *parser)
+{
+  linespec_token next;
+  char *saved_stream = PARSER_STREAM (parser);
+  linespec_token saved_token = parser->lexer.current;
+
+  next = linespec_lexer_consume_token (parser);
+  PARSER_STREAM (parser) = saved_stream;
+  parser->lexer.current = saved_token;
+  return next;
+}
+
+/* Helper functions.  */
+
+/* Add SAL to SALS.  */
+
+static void
+add_sal_to_sals_basic (struct symtabs_and_lines *sals,
+		       struct symtab_and_line *sal)
+{
+  ++sals->nelts;
+  sals->sals = xrealloc (sals->sals, sals->nelts * sizeof (sals->sals[0]));
+  sals->sals[sals->nelts - 1] = *sal;
+}
+
+/* Add SAL to SALS, and also update SELF->CANONICAL_NAMES to reflect
+   the new sal, if needed.  If not NULL, SYMNAME is the name of the
+   symbol to use when constructing the new canonical name.  */
+
+static void
+add_sal_to_sals (struct linespec_state *self,
+		 struct symtabs_and_lines *sals,
+		 struct symtab_and_line *sal,
+		 const char *symname)
+{
+  add_sal_to_sals_basic (sals, sal);
+
+  if (self->canonical)
+    {
+      char *canonical_name = NULL;
+
+      self->canonical_names = xrealloc (self->canonical_names,
+					sals->nelts * sizeof (char *));
+      if (sal->symtab && sal->symtab->filename)
+	{
+	  char *filename = sal->symtab->filename;
+
+	  /* Note that the filter doesn't have to be a valid linespec
+	     input.  We only apply the ":LINE" treatment to Ada for
+	     the time being.  */
+	  if (symname != NULL && sal->line != 0
+	      && self->language->la_language == language_ada)
+	    canonical_name = xstrprintf ("%s:%s:%d", filename, symname,
+					 sal->line);
+	  else if (symname != NULL)
+	    canonical_name = xstrprintf ("%s:%s", filename, symname);
+	  else
+	    canonical_name = xstrprintf ("%s:%d", filename, sal->line);
+	}
+
+      self->canonical_names[sals->nelts - 1] = canonical_name;
+    }
+}
+
+/* A hash function for address_entry.  */
+
+static hashval_t
+hash_address_entry (const void *p)
+{
+  const struct address_entry *aep = p;
+  hashval_t hash;
+
+  hash = iterative_hash_object (aep->pspace, 0);
+  return iterative_hash_object (aep->addr, hash);
+}
+
+/* An equality function for address_entry.  */
+
+static int
+eq_address_entry (const void *a, const void *b)
+{
+  const struct address_entry *aea = a;
+  const struct address_entry *aeb = b;
+
+  return aea->pspace == aeb->pspace && aea->addr == aeb->addr;
+}
+
+/* Check whether the address, represented by PSPACE and ADDR, is
+   already in the set.  If so, return 0.  Otherwise, add it and return
+   1.  */
+
+static int
+maybe_add_address (htab_t set, struct program_space *pspace, CORE_ADDR addr)
+{
+  struct address_entry e, *p;
+  void **slot;
+
+  e.pspace = pspace;
+  e.addr = addr;
+  slot = htab_find_slot (set, &e, INSERT);
+  if (*slot)
+    return 0;
+
+  p = XNEW (struct address_entry);
+  memcpy (p, &e, sizeof (struct address_entry));
+  *slot = p;
+
+  return 1;
+}
+
+/* A callback function and the additional data to call it with.  */
+
+struct symbol_and_data_callback
+{
+  /* The callback to use.  */
+  symbol_found_callback_ftype *callback;
+
+  /* Data to be passed to the callback.  */
+  void *data;
+};
+
+/* A helper for iterate_over_all_matching_symtabs that is used to
+   restrict calls to another callback to symbols representing inline
+   symbols only.  */
+
+static int
+iterate_inline_only (struct symbol *sym, void *d)
+{
+  if (SYMBOL_INLINED (sym))
+    {
+      struct symbol_and_data_callback *cad = d;
+
+      return cad->callback (sym, cad->data);
+    }
+  return 1; /* Continue iterating.  */
+}
+
+/* Some data for the expand_symtabs_matching callback.  */
+
+struct symbol_matcher_data
+{
+  /* The lookup name against which symbol name should be compared.  */
+  const char *lookup_name;
+
+  /* The routine to be used for comparison.  */
+  symbol_name_cmp_ftype symbol_name_cmp;
+};
+
+/* A helper for iterate_over_all_matching_symtabs that is passed as a
+   callback to the expand_symtabs_matching method.  */
+
+static int
+iterate_name_matcher (const char *name, void *d)
+{
+  const struct symbol_matcher_data *data = d;
+
+  if (data->symbol_name_cmp (name, data->lookup_name) == 0)
+    return 1; /* Expand this symbol's symbol table.  */
+  return 0; /* Skip this symbol.  */
+}
+
+/* A helper that walks over all matching symtabs in all objfiles and
+   calls CALLBACK for each symbol matching NAME.  If SEARCH_PSPACE is
+   not NULL, then the search is restricted to just that program
+   space.  If INCLUDE_INLINE is nonzero then symbols representing
+   inlined instances of functions will be included in the result.  */
+
+static void
+iterate_over_all_matching_symtabs (struct linespec_state *state,
+				   const char *name,
+				   const domain_enum domain,
+				   symbol_found_callback_ftype *callback,
+				   void *data,
+				   struct program_space *search_pspace,
+				   int include_inline)
+{
+  struct objfile *objfile;
+  struct program_space *pspace;
+  struct symbol_matcher_data matcher_data;
+
+  matcher_data.lookup_name = name;
+  matcher_data.symbol_name_cmp =
+    state->language->la_get_symbol_name_cmp != NULL
+    ? state->language->la_get_symbol_name_cmp (name)
+    : strcmp_iw;
+
+  ALL_PSPACES (pspace)
+  {
+    if (search_pspace != NULL && search_pspace != pspace)
+      continue;
+    if (pspace->executing_startup)
+      continue;
+
+    set_current_program_space (pspace);
+
+    ALL_OBJFILES (objfile)
+    {
+      struct symtab *symtab;
+
+      if (objfile->sf)
+	objfile->sf->qf->expand_symtabs_matching (objfile, NULL,
+						  iterate_name_matcher,
+						  ALL_DOMAIN,
+						  &matcher_data);
+
+      ALL_OBJFILE_PRIMARY_SYMTABS (objfile, symtab)
+	{
+	  struct block *block;
+
+	  block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), STATIC_BLOCK);
+	  LA_ITERATE_OVER_SYMBOLS (block, name, domain, callback, data);
+
+	  if (include_inline)
+	    {
+	      struct symbol_and_data_callback cad = { callback, data };
+	      int i;
+
+	      for (i = FIRST_LOCAL_BLOCK;
+		   i < BLOCKVECTOR_NBLOCKS (BLOCKVECTOR (symtab)); i++)
+		{
+		  block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), i);
+		  LA_ITERATE_OVER_SYMBOLS (block, name, domain,
+					   iterate_inline_only, &cad);
+		}
+	    }
+	}
+    }
+  }
+}
+
+/* Returns the block to be used for symbol searches for the given SYMTAB,
+   which may be NULL.  */
+
+static struct block *
+get_search_block (struct symtab *symtab)
+{
+  struct block *block;
+
+  if (symtab != NULL)
+    block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), STATIC_BLOCK);
+  else
+    {
+      enum language save_language;
+
+      /* get_selected_block can change the current language when there is
+	 no selected frame yet.  */
+      save_language = current_language->la_language;
+      block = get_selected_block (0);
+      set_language (save_language);
+    }
+
+  return block;
+}
+
+/* A helper for find_method.  This finds all methods in type T which
+   match NAME.  It adds matching symbol names to RESULT_NAMES, and
+   adds T's direct superclasses to SUPERCLASSES.  */
+
+static void
+find_methods (struct type *t, const char *name,
+	      VEC (const_char_ptr) **result_names,
+	      VEC (typep) **superclasses)
+{
+  int i1 = 0;
+  int ibase;
+  const char *class_name = type_name_no_tag (t);
+
+  /* Ignore this class if it doesn't have a name.  This is ugly, but
+     unless we figure out how to get the physname without the name of
      the class, then the loop can't do any good.  */
   if (class_name)
     {
@@ -439,7 +1080,7 @@ find_methods (struct type *t, const char *name,
 	   method_counter >= 0;
 	   --method_counter)
 	{
-	  char *method_name = TYPE_FN_FIELDLIST_NAME (t, method_counter);
+	  const char *method_name = TYPE_FN_FIELDLIST_NAME (t, method_counter);
 	  char dem_opname[64];
 
 	  if (strncmp (method_name, "__", 2) == 0 ||
@@ -483,14 +1124,14 @@ find_methods (struct type *t, const char *name,
    strings.  Also, ignore the char within a template name, like a ','
    within foo<int, int>.  */
 
-static char *
-find_toplevel_char (char *s, char c)
+static const char *
+find_toplevel_char (const char *s, char c)
 {
   int quoted = 0;		/* zero if we're not in quotes;
 				   '"' if we're in a double-quoted string;
 				   '\'' if we're in a single-quoted string.  */
   int depth = 0;		/* Number of unclosed parens we've seen.  */
-  char *scan;
+  const char *scan;
 
   for (scan = s; *scan; scan++)
     {
@@ -514,23 +1155,34 @@ find_toplevel_char (char *s, char c)
   return 0;
 }
 
-/* Determines if the gives string corresponds to an Objective-C method
-   representation, such as -[Foo bar:] or +[Foo bar].  Objective-C symbols
-   are allowed to have spaces and parentheses in them.  */
+/* The string equivalent of find_toplevel_char.  Returns a pointer
+   to the location of NEEDLE in HAYSTACK, ignoring any occurrences
+   inside "()" and "<>".  Returns NULL if NEEDLE was not found.  */
 
-static int 
-is_objc_method_format (const char *s)
+static const char *
+find_toplevel_string (const char *haystack, const char *needle)
 {
-  if (s == NULL || *s == '\0')
-    return 0;
-  /* Handle arguments with the format FILENAME:SYMBOL.  */
-  if ((s[0] == ':') && (strchr ("+-", s[1]) != NULL) 
-      && (s[2] == '[') && strchr(s, ']'))
-    return 1;
-  /* Handle arguments that are just SYMBOL.  */
-  else if ((strchr ("+-", s[0]) != NULL) && (s[1] == '[') && strchr(s, ']'))
-    return 1;
-  return 0;
+  const char *s = haystack;
+
+  do
+    {
+      s = find_toplevel_char (s, *needle);
+
+      if (s != NULL)
+	{
+	  /* Found first char in HAYSTACK;  check rest of string.  */
+	  if (strncmp (s, needle, strlen (needle)) == 0)
+	    return s;
+
+	  /* Didn't find it; loop over HAYSTACK, looking for the next
+	     instance of the first character of NEEDLE.  */
+	  ++s;
+	}
+    }
+  while (s != NULL && *s != '\0');
+
+  /* NEEDLE was not found in HAYSTACK.  */
+  return NULL;
 }
 
 /* Given FILTERS, a list of canonical names, filter the sals in RESULT
@@ -634,178 +1286,690 @@ decode_line_2 (struct linespec_state *self,
       return;
     }
 
-  printf_unfiltered (_("[0] cancel\n[1] all\n"));
-  for (i = 0; VEC_iterate (const_char_ptr, item_names, i, iter); ++i)
-    printf_unfiltered ("[%d] %s\n", i + 2, iter);
+  /* Sort the list of method names alphabetically.  */
+  qsort (VEC_address (const_char_ptr, item_names),
+	 VEC_length (const_char_ptr, item_names),
+	 sizeof (const_char_ptr), compare_strings);
+
+  printf_unfiltered (_("[0] cancel\n[1] all\n"));
+  for (i = 0; VEC_iterate (const_char_ptr, item_names, i, iter); ++i)
+    printf_unfiltered ("[%d] %s\n", i + 2, iter);
+
+  prompt = getenv ("PS2");
+  if (prompt == NULL)
+    {
+      prompt = "> ";
+    }
+  args = command_line_input (prompt, 0, "overload-choice");
+
+  if (args == 0 || *args == 0)
+    error_no_arg (_("one or more choice numbers"));
+
+  init_number_or_range (&state, args);
+  while (!state.finished)
+    {
+      int num;
+
+      num = get_number_or_range (&state);
+
+      if (num == 0)
+	error (_("canceled"));
+      else if (num == 1)
+	{
+	  /* We intentionally make this result in a single breakpoint,
+	     contrary to what older versions of gdb did.  The
+	     rationale is that this lets a user get the
+	     multiple_symbols_all behavior even with the 'ask'
+	     setting; and he can get separate breakpoints by entering
+	     "2-57" at the query.  */
+	  do_cleanups (old_chain);
+	  convert_results_to_lsals (self, result);
+	  return;
+	}
+
+      num -= 2;
+      if (num >= VEC_length (const_char_ptr, item_names))
+	printf_unfiltered (_("No choice number %d.\n"), num);
+      else
+	{
+	  const char *elt = VEC_index (const_char_ptr, item_names, num);
+
+	  if (elt != NULL)
+	    {
+	      VEC_safe_push (const_char_ptr, filters, elt);
+	      VEC_replace (const_char_ptr, item_names, num, NULL);
+	    }
+	  else
+	    {
+	      printf_unfiltered (_("duplicate request for %d ignored.\n"),
+				 num);
+	    }
+	}
+    }
+
+  filter_results (self, result, filters);
+  do_cleanups (old_chain);
+}
+
+

+
+/* The parser of linespec itself.  */
+
+/* Throw an appropriate error when SYMBOL is not found (optionally in
+   FILENAME).  */
+
+static void ATTRIBUTE_NORETURN
+symbol_not_found_error (char *symbol, char *filename)
+{
+  if (symbol == NULL)
+    symbol = "";
+
+  if (!have_full_symbols ()
+      && !have_partial_symbols ()
+      && !have_minimal_symbols ())
+    throw_error (NOT_FOUND_ERROR,
+		 _("No symbol table is loaded.  Use the \"file\" command."));
+
+  /* If SYMBOL starts with '$', the user attempted to either lookup
+     a function/variable in his code starting with '$' or an internal
+     variable of that name.  Since we do not know which, be concise and
+     explain both possibilities.  */
+  if (*symbol == '$')
+    {
+      if (filename)
+	throw_error (NOT_FOUND_ERROR,
+		     _("Undefined convenience variable or function \"%s\" "
+		       "not defined in \"%s\"."), symbol, filename);
+      else
+	throw_error (NOT_FOUND_ERROR,
+		     _("Undefined convenience variable or function \"%s\" "
+		       "not defined."), symbol);
+    }
+  else
+    {
+      if (filename)
+	throw_error (NOT_FOUND_ERROR,
+		     _("Function \"%s\" not defined in \"%s\"."),
+		     symbol, filename);
+      else
+	throw_error (NOT_FOUND_ERROR,
+		     _("Function \"%s\" not defined."), symbol);
+    }
+}
+
+/* Throw an appropriate error when an unexpected token is encountered 
+   in the input.  */
+
+static void ATTRIBUTE_NORETURN
+unexpected_linespec_error (linespec_parser *parser)
+{
+  linespec_token token;
+  static const char * token_type_strings[]
+    = {"keyword", "colon", "string", "number", "comma", "end of input"};
+
+  /* Get the token that generated the error.  */
+  token = linespec_lexer_lex_one (parser);
+
+  /* Finally, throw the error.  */
+  if (token.type == LSTOKEN_STRING || token.type == LSTOKEN_NUMBER
+      || token.type == LSTOKEN_KEYWORD)
+    {
+      char *string;
+      struct cleanup *cleanup;
+
+      string = copy_token_string (token);
+      cleanup = make_cleanup (xfree, string);
+      throw_error (GENERIC_ERROR,
+		   _("malformed linespec error: unexpected %s, \"%s\""),
+		   token_type_strings[token.type], string);
+    }
+  else
+    throw_error (GENERIC_ERROR,
+		 _("malformed linespec error: unexpected %s"),
+		 token_type_strings[token.type]);
+}
+
+/* Parse and return a line offset in STRING.  */
+
+static struct line_offset
+linespec_parse_line_offset (char *string)
+{
+  struct line_offset line_offset = {0, LINE_OFFSET_NONE};
+
+  if (*string == '+')
+    {
+      line_offset.sign = LINE_OFFSET_PLUS;
+      ++string;
+    }
+  else if (*string == '-')
+    {
+      line_offset.sign = LINE_OFFSET_MINUS;
+      ++string;
+    }
+
+  /* Right now, we only allow base 10 for offsets.  */
+  line_offset.offset = atoi (string);
+  return line_offset;
+}
+
+/* Parse the basic_spec in PARSER's input.  */
+
+static void
+linespec_parse_basic (linespec_parser *parser)
+{
+  char *name;
+  linespec_token token;
+  VEC (symbolp) *symbols, *labels;
+  VEC (minsym_and_objfile_d) *minimal_symbols;
+  struct cleanup *cleanup;
+
+  /* Get the next token.  */
+  token = linespec_lexer_lex_one (parser);
+
+  /* If it is EOI or KEYWORD, issue an error.  */
+  if (token.type == LSTOKEN_KEYWORD || token.type == LSTOKEN_EOI)
+    unexpected_linespec_error (parser);
+  /* If it is a LSTOKEN_NUMBER, we have an offset.  */
+  else if (token.type == LSTOKEN_NUMBER)
+    {
+      /* Record the line offset and get the next token.  */
+      name = copy_token_string (token);
+      cleanup = make_cleanup (xfree, name);
+      PARSER_RESULT (parser)->line_offset = linespec_parse_line_offset (name);
+      do_cleanups (cleanup);
+
+      /* Get the next token.  */
+      token = linespec_lexer_consume_token (parser);
+
+      /* If the next token is a comma, stop parsing and return.  */
+      if (token.type == LSTOKEN_COMMA)
+	return;
+
+      /* If the next token is anything but EOI or KEYWORD, issue
+	 an error.  */
+      if (token.type != LSTOKEN_KEYWORD && token.type != LSTOKEN_EOI)
+	unexpected_linespec_error (parser);
+    }
+
+  if (token.type == LSTOKEN_KEYWORD || token.type == LSTOKEN_EOI)
+    return;
+
+  /* Next token must be LSTOKEN_STRING.  */
+  if (token.type != LSTOKEN_STRING)
+    unexpected_linespec_error (parser);
+
+  /* The current token will contain the name of a function, method,
+     or label.  */
+  name  = copy_token_string (token);
+  cleanup = make_cleanup (xfree, name);
+
+  /* Try looking it up as a function/method.  */
+  find_linespec_symbols (PARSER_STATE (parser),
+			 PARSER_RESULT (parser)->file_symtabs, name,
+			 &symbols, &minimal_symbols);
+
+  if (symbols != NULL || minimal_symbols != NULL)
+    {
+      PARSER_RESULT (parser)->function_symbols = symbols;
+      PARSER_RESULT (parser)->minimal_symbols = minimal_symbols;
+      PARSER_RESULT (parser)->function_name = name;
+      symbols = NULL;
+      discard_cleanups (cleanup);
+    }
+  else
+    {
+      /* NAME was not a function or a method.  So it must be a label
+	 name.  */
+      labels = find_label_symbols (PARSER_STATE (parser), NULL,
+				   &symbols, name);
+      if (labels != NULL)
+	{
+	  PARSER_RESULT (parser)->labels.label_symbols = labels;
+	  PARSER_RESULT (parser)->labels.function_symbols = symbols;
+	  PARSER_RESULT (parser)->label_name = name;
+	  symbols = NULL;
+	  discard_cleanups (cleanup);
+	}
+      else
+	{
+	  /* The name is also not a label.  Abort parsing.  Do not throw
+	     an error here.  parse_linespec will do it for us.  */
+
+	  /* Save a copy of the name we were trying to lookup.  */
+	  PARSER_RESULT (parser)->function_name = name;
+	  discard_cleanups (cleanup);
+	  return;
+	}
+    }
+
+  /* Get the next token.  */
+  token = linespec_lexer_consume_token (parser);
+
+  if (token.type == LSTOKEN_COLON)
+    {
+      /* User specified a label or a lineno.  */
+      token = linespec_lexer_consume_token (parser);
+
+      if (token.type == LSTOKEN_NUMBER)
+	{
+	  /* User specified an offset.  Record the line offset and
+	     get the next token.  */
+	  name = copy_token_string (token);
+	  cleanup = make_cleanup (xfree, name);
+	  PARSER_RESULT (parser)->line_offset
+	    = linespec_parse_line_offset (name);
+	  do_cleanups (cleanup);
+
+	  /* Ge the next token.  */
+	  token = linespec_lexer_consume_token (parser);
+	}
+      else if (token.type == LSTOKEN_STRING)
+	{
+	  /* Grab a copy of the label's name and look it up.  */
+	  name = copy_token_string (token);
+	  cleanup = make_cleanup (xfree, name);
+	  labels = find_label_symbols (PARSER_STATE (parser),
+				       PARSER_RESULT (parser)->function_symbols,
+				       &symbols, name);
+
+	  if (labels != NULL)
+	    {
+	      PARSER_RESULT (parser)->labels.label_symbols = labels;
+	      PARSER_RESULT (parser)->labels.function_symbols = symbols;
+	      PARSER_RESULT (parser)->label_name = name;
+	      symbols = NULL;
+	      discard_cleanups (cleanup);
+	    }
+	  else
+	    {
+	      /* We don't know what it was, but it isn't a label.  */
+	      throw_error (NOT_FOUND_ERROR,
+			   _("No label \"%s\" defined in function \"%s\"."),
+			   name, PARSER_RESULT (parser)->function_name);
+	    }
+
+	  /* Check for a line offset.  */
+	  token = linespec_lexer_consume_token (parser);
+	  if (token.type == LSTOKEN_COLON)
+	    {
+	      /* Get the next token.  */
+	      token = linespec_lexer_consume_token (parser);
+
+	      /* It must be a line offset.  */
+	      if (token.type != LSTOKEN_NUMBER)
+		unexpected_linespec_error (parser);
+
+	      /* Record the lione offset and get the next token.  */
+	      name = copy_token_string (token);
+	      cleanup = make_cleanup (xfree, name);
+
+	      PARSER_RESULT (parser)->line_offset
+		= linespec_parse_line_offset (name);
+	      do_cleanups (cleanup);
 
-  prompt = getenv ("PS2");
-  if (prompt == NULL)
-    {
-      prompt = "> ";
+	      /* Get the next token.  */
+	      token = linespec_lexer_consume_token (parser);
+	    }
+	}
+      else
+	{
+	  /* Trailing ':' in the input. Issue an error.  */
+	  unexpected_linespec_error (parser);
+	}
     }
-  args = command_line_input (prompt, 0, "overload-choice");
+}
 
-  if (args == 0 || *args == 0)
-    error_no_arg (_("one or more choice numbers"));
+/* Canonicalize the linespec contained in LS.  The result is saved into
+   STATE->canonical.  */
 
-  init_number_or_range (&state, args);
-  while (!state.finished)
+static void
+canonicalize_linespec (struct linespec_state *state, linespec_p ls)
+{
+  /* If canonicalization was not requested, no need to do anything.  */
+  if (!state->canonical)
+    return;
+
+  /* Shortcut expressions, which can only appear by themselves.  */
+  if (ls->expression != NULL)
+    state->canonical->addr_string = xstrdup (ls->expression);
+  else
     {
-      int num;
+      struct ui_file *buf;
+      int need_colon = 0;
 
-      num = get_number_or_range (&state);
+      buf = mem_fileopen ();
+      if (ls->source_filename)
+	{
+	  fputs_unfiltered (ls->source_filename, buf);
+	  need_colon = 1;
+	}
 
-      if (num == 0)
-	error (_("canceled"));
-      else if (num == 1)
+      if (ls->function_name)
 	{
-	  /* We intentionally make this result in a single breakpoint,
-	     contrary to what older versions of gdb did.  The
-	     rationale is that this lets a user get the
-	     multiple_symbols_all behavior even with the 'ask'
-	     setting; and he can get separate breakpoints by entering
-	     "2-57" at the query.  */
-	  do_cleanups (old_chain);
-	  convert_results_to_lsals (self, result);
-	  return;
+	  if (need_colon)
+	    fputc_unfiltered (':', buf);
+	  fputs_unfiltered (ls->function_name, buf);
+	  need_colon = 1;
 	}
 
-      num -= 2;
-      if (num >= VEC_length (const_char_ptr, item_names))
-	printf_unfiltered (_("No choice number %d.\n"), num);
-      else
+      if (ls->label_name)
 	{
-	  const char *elt = VEC_index (const_char_ptr, item_names, num);
+	  if (need_colon)
+	    fputc_unfiltered (':', buf);
 
-	  if (elt != NULL)
-	    {
-	      VEC_safe_push (const_char_ptr, filters, elt);
-	      VEC_replace (const_char_ptr, item_names, num, NULL);
-	    }
-	  else
+	  if (ls->function_name == NULL)
 	    {
-	      printf_unfiltered (_("duplicate request for %d ignored.\n"),
-				 num);
+	      struct symbol *s;
+
+	      /* No function was specified, so add the symbol name.  */
+	      gdb_assert (ls->labels.function_symbols != NULL
+			  && (VEC_length (symbolp, ls->labels.function_symbols)
+			      == 1));
+	      s = VEC_index (symbolp, ls->labels.function_symbols, 0);
+	      fputs_unfiltered (SYMBOL_NATURAL_NAME (s), buf);
+	      fputc_unfiltered (':', buf);
 	    }
+
+	  fputs_unfiltered (ls->label_name, buf);
+	  need_colon = 1;
+	  state->canonical->special_display = 1;
 	}
-    }
 
-  filter_results (self, result, filters);
-  do_cleanups (old_chain);
+      if (ls->line_offset.sign != LINE_OFFSET_UNKNOWN)
+	{
+	  if (need_colon)
+	    fputc_unfiltered (':', buf);
+	  fprintf_filtered (buf, "%s%d",
+			    (ls->line_offset.sign == LINE_OFFSET_NONE ? ""
+			     : (ls->line_offset.sign
+				== LINE_OFFSET_PLUS ? "+" : "-")),
+			    ls->line_offset.offset);
+	}
+
+      state->canonical->addr_string = ui_file_xstrdup (buf, NULL);
+      ui_file_delete (buf);
+    }
 }
 
-/* Valid delimiters for linespec keywords "if", "thread" or "task".  */
+/* Given a line offset in LS, construct the relevant SALs.  */
 
-static int
-is_linespec_boundary (char c)
+static struct symtabs_and_lines
+create_sals_line_offset (struct linespec_state *self,
+			 linespec_p ls)
 {
-  return c == ' ' || c == '\t' || c == '\0' || c == ',';
-}
+  struct symtabs_and_lines values;
+  struct symtab_and_line val;
+  int use_default = 0;
 
-/* A helper function for decode_line_1 and friends which skips P
-   past any method overload information at the beginning of P, e.g.,
-   "(const struct foo *)".
+  init_sal (&val);
+  values.sals = NULL;
+  values.nelts = 0;
 
-   This function assumes that P has already been validated to contain
-   overload information, and it will assert if *P != '('.  */
-static char *
-find_method_overload_end (char *p)
-{
-  int depth = 0;
+  /* This is where we need to make sure we have good defaults.
+     We must guarantee that this section of code is never executed
+     when we are called with just a function anme, since
+     set_default_source_symtab_and_line uses
+     select_source_symtab that calls us with such an argument.  */
 
-  gdb_assert (*p == '(');
+  if (VEC_length (symtab_p, ls->file_symtabs) == 1
+      && VEC_index (symtab_p, ls->file_symtabs, 0) == NULL)
+    {
+      set_current_program_space (self->program_space);
 
-  while (*p)
+      /* Make sure we have at least a default source line.  */
+      set_default_source_symtab_and_line ();
+      initialize_defaults (&self->default_symtab, &self->default_line);
+      VEC_pop (symtab_p, ls->file_symtabs);
+      VEC_free (symtab_p, ls->file_symtabs);
+      ls->file_symtabs
+	= collect_symtabs_from_filename (self->default_symtab->filename);
+      use_default = 1;
+    }
+
+  val.line = ls->line_offset.offset;
+  switch (ls->line_offset.sign)
     {
-      if (*p == '(')
-	++depth;
-      else if (*p == ')')
+    case LINE_OFFSET_PLUS:
+      if (ls->line_offset.offset == 0)
+	val.line = 5;
+      if (use_default)
+	val.line = self->default_line + val.line;
+      break;
+
+    case LINE_OFFSET_MINUS:
+      if (ls->line_offset.offset == 0)
+	val.line = 15;
+      if (use_default)
+	val.line = self->default_line - val.line;
+      else
+	val.line = -val.line;
+      break;
+
+    case LINE_OFFSET_NONE:
+      break;			/* No need to adjust val.line.  */
+    }
+
+  if (self->list_mode)
+    decode_digits_list_mode (self, ls, &values, val);
+  else
+    {
+      struct linetable_entry *best_entry = NULL;
+      int *filter;
+      struct block **blocks;
+      struct cleanup *cleanup;
+      struct symtabs_and_lines intermediate_results;
+      int i, j;
+
+      intermediate_results.sals = NULL;
+      intermediate_results.nelts = 0;
+
+      decode_digits_ordinary (self, ls, val.line, &intermediate_results,
+			      &best_entry);
+      if (intermediate_results.nelts == 0 && best_entry != NULL)
+	decode_digits_ordinary (self, ls, best_entry->line,
+				&intermediate_results, &best_entry);
+
+      cleanup = make_cleanup (xfree, intermediate_results.sals);
+
+      /* For optimized code, the compiler can scatter one source line
+	 across disjoint ranges of PC values, even when no duplicate
+	 functions or inline functions are involved.  For example,
+	 'for (;;)' inside a non-template, non-inline, and non-ctor-or-dtor
+	 function can result in two PC ranges.  In this case, we don't
+	 want to set a breakpoint on the first PC of each range.  To filter
+	 such cases, we use containing blocks -- for each PC found
+	 above, we see if there are other PCs that are in the same
+	 block.  If yes, the other PCs are filtered out.  */
+
+      filter = XNEWVEC (int, intermediate_results.nelts);
+      make_cleanup (xfree, filter);
+      blocks = XNEWVEC (struct block *, intermediate_results.nelts);
+      make_cleanup (xfree, blocks);
+
+      for (i = 0; i < intermediate_results.nelts; ++i)
 	{
-	  if (--depth == 0)
-	    {
-	      ++p;
-	      break;
-	    }
+	  set_current_program_space (intermediate_results.sals[i].pspace);
+
+	  filter[i] = 1;
+	  blocks[i] = block_for_pc_sect (intermediate_results.sals[i].pc,
+					 intermediate_results.sals[i].section);
 	}
-      ++p;
+
+      for (i = 0; i < intermediate_results.nelts; ++i)
+	{
+	  if (blocks[i] != NULL)
+	    for (j = i + 1; j < intermediate_results.nelts; ++j)
+	      {
+		if (blocks[j] == blocks[i])
+		  {
+		    filter[j] = 0;
+		    break;
+		  }
+	      }
+	}
+
+      for (i = 0; i < intermediate_results.nelts; ++i)
+	if (filter[i])
+	  {
+	    struct symbol *sym = (blocks[i]
+				  ? block_containing_function (blocks[i])
+				  : NULL);
+
+	    if (self->funfirstline)
+	      skip_prologue_sal (&intermediate_results.sals[i]);
+	    /* Make sure the line matches the request, not what was
+	       found.  */
+	    intermediate_results.sals[i].line = val.line;
+	    add_sal_to_sals (self, &values, &intermediate_results.sals[i],
+			     sym ? SYMBOL_NATURAL_NAME (sym) : NULL);
+	  }
+
+      do_cleanups (cleanup);
     }
 
-  return p;
+  if (values.nelts == 0)
+    {
+      if (ls->source_filename)
+	throw_error (NOT_FOUND_ERROR, _("No line %d in file \"%s\"."),
+		     val.line, ls->source_filename);
+      else
+	throw_error (NOT_FOUND_ERROR, _("No line %d in the current file."),
+		     val.line);
+    }
+
+  return values;
 }
 
-/* Keep important information used when looking up a name.  This includes
-   template parameters, overload information, and important keywords, including
-   the possible Java trailing type.  */
+/* Create and return SALs from the linespec LS.  */
 
-static char *
-keep_name_info (char *p, int on_boundary)
+static struct symtabs_and_lines
+convert_linespec_to_sals (struct linespec_state *state, linespec_p ls)
 {
-  const char *quotes = get_gdb_completer_quote_characters ();
-  char *saved_p = p;
-  int nest = 0;
+  struct symtabs_and_lines sals = {NULL, 0};
 
-  while (*p)
+  if (ls->expression != NULL)
     {
-      if (strchr (quotes, *p))
-	break;
-
-      if (*p == ',' && !nest)
-	break;
+      /* We have an expression.  No other attribute is allowed.  */
+      sals.sals = XMALLOC (struct symtab_and_line);
+      sals.nelts = 1;
+      sals.sals[0] = find_pc_line (ls->expr_pc, 0);
+      sals.sals[0].pc = ls->expr_pc;
+      sals.sals[0].section = find_pc_overlay (ls->expr_pc);
+      sals.sals[0].explicit_pc = 1;
+    }
+  else if (ls->labels.label_symbols != NULL)
+    {
+      /* We have just a bunch of functions/methods or labels.  */
+      int i;
+      struct symtab_and_line sal;
+      struct symbol *sym;
 
-      if (on_boundary && !nest)
+      for (i = 0; VEC_iterate (symbolp, ls->labels.label_symbols, i, sym); ++i)
 	{
-	  const char *const words[] = { "if", "thread", "task" };
-	  int wordi;
-
-	  for (wordi = 0; wordi < ARRAY_SIZE (words); wordi++)
-	    if (strncmp (p, words[wordi], strlen (words[wordi])) == 0
-		&& is_linespec_boundary (p[strlen (words[wordi])]))
-	      break;
-	  if (wordi < ARRAY_SIZE (words))
-	    break;
+	  if (symbol_to_sal (&sal, state->funfirstline, sym))
+	    add_sal_to_sals (state, &sals, &sal,
+			     SYMBOL_NATURAL_NAME (sym));
 	}
+    }
+  else if (ls->function_symbols != NULL || ls->minimal_symbols != NULL)
+    {
+      /* We have just a bunch of functions and/or methods.  */
+      int i;
+      struct symtab_and_line sal;
+      struct symbol *sym;
+      minsym_and_objfile_d *elem;
+      struct program_space *pspace;
 
-      if (*p == '(' || *p == '<' || *p == '[')
-	nest++;
-      else if ((*p == ')' || *p == '>' || *p == ']') && nest > 0)
-	nest--;
+      if (ls->function_symbols != NULL)
+	{
+	  /* Sort symbols so that symbols with the same program space are next
+	     to each other.  */
+	  qsort (VEC_address (symbolp, ls->function_symbols),
+		 VEC_length (symbolp, ls->function_symbols),
+		 sizeof (symbolp), compare_symbols);
 
-      p++;
+	  for (i = 0; VEC_iterate (symbolp, ls->function_symbols, i, sym); ++i)
+	    {
+	      pspace = SYMTAB_PSPACE (SYMBOL_SYMTAB (sym));
+	      set_current_program_space (pspace);
+	      if (symbol_to_sal (&sal, state->funfirstline, sym)
+		  && maybe_add_address (state->addr_set, pspace, sal.pc))
+		add_sal_to_sals (state, &sals, &sal, SYMBOL_NATURAL_NAME (sym));
+	    }
+	}
 
-      /* The ',' check could fail on "operator ,".  */
-      p += cp_validate_operator (p);
+      if (ls->minimal_symbols != NULL)
+	{
+	  /* Sort minimal symbols by program space, too.  */
+	  qsort (VEC_address (minsym_and_objfile_d, ls->minimal_symbols),
+		 VEC_length (minsym_and_objfile_d, ls->minimal_symbols),
+		 sizeof (minsym_and_objfile_d), compare_msymbols);
+
+	  for (i = 0;
+	       VEC_iterate (minsym_and_objfile_d, ls->minimal_symbols, i, elem);
+	       ++i)
+	    {
+	      pspace = elem->objfile->pspace;
+	      set_current_program_space (pspace);
+	      minsym_found (state, elem->objfile, elem->minsym, &sals);
+	    }
+	}
+    }
+  else if (ls->line_offset.sign != LINE_OFFSET_UNKNOWN)
+    {
+      /* Only an offset was specified.  */
+	sals = create_sals_line_offset (state, ls);
 
-      on_boundary = is_linespec_boundary (p[-1]);
+	/* Make sure we have a filename for canonicalization.  */
+	if (ls->source_filename == NULL)
+	  ls->source_filename = xstrdup (state->default_symtab->filename);
+    }
+  else
+    {
+      /* We haven't found any results...  */
+      return sals;
     }
 
-  while (p > saved_p && is_linespec_boundary (p[-1]))
-    p--;
+  canonicalize_linespec (state, ls);
 
-  return p;
-}
+  if (sals.nelts > 0 && state->canonical != NULL)
+    state->canonical->pre_expanded = 1;
 
-

-/* The parser of linespec itself.  */
+  return sals;
+}
 
-/* Parse a string that specifies a line number.
+/* Parse a string that specifies a linespec.
    Pass the address of a char * variable; that variable will be
    advanced over the characters actually parsed.
 
-   The string can be:
+   The basic grammar of linespecs:
+
+   linespec -> expr_spec | var_spec | basic_spec
+   expr_spec -> '*' STRING
+   var_spec -> '$' (STRING | NUMBER)
+
+   basic_spec -> file_offset_spec | function_spec | label_spec
+   file_offset_spec -> opt_file_spec offset_spec
+   function_spec -> opt_file_spec function_name_spec opt_label_spec
+   label_spec -> label_name_spec
+
+   opt_file_spec -> "" | file_name_spec ':'
+   opt_label_spec -> "" | ':' label_name_spec
 
-   LINENUM -- that line number in current file.  PC returned is 0.
-   FILE:LINENUM -- that line in that file.  PC returned is 0.
-   FUNCTION -- line number of openbrace of that function.
-   PC returned is the start of the function.
-   LABEL -- a label in the current scope
-   VARIABLE -- line number of definition of that variable.
-   PC returned is 0.
-   FILE:FUNCTION -- likewise, but prefer functions in that file.
-   *EXPR -- line in which address EXPR appears.
+   file_name_spec -> STRING
+   function_name_spec -> STRING
+   label_name_spec -> STRING
+   function_name_spec -> STRING
+   offset_spec -> NUMBER
+               -> '+' NUMBER
+	       -> '-' NUMBER
 
-   This may all be followed by an "if EXPR", which we ignore.
+   This may all be followed by several keywords such as "if EXPR",
+   which we ignore.
 
-   FUNCTION may be an undebuggable function found in minimal symbol table.
+   A comma will terminate parsing.
+
+   The function may be an undebuggable function found in minimal symbol table.
 
    If the argument FUNFIRSTLINE is nonzero, we want the first line
    of real code inside a function when a function is specified, and it is
@@ -825,319 +1989,208 @@ keep_name_info (char *p, int on_boundary)
    if no file is validly specified.  Callers must check that.
    Also, the line number returned may be invalid.  */
 
-/* We allow single quotes in various places.  This is a hideous
-   kludge, which exists because the completer can't yet deal with the
-   lack of single quotes.  FIXME: write a linespec_completer which we
-   can use as appropriate instead of make_symbol_completion_list.  */
+/* Parse the linespec in ARGPTR.  */
 
-struct symtabs_and_lines
-decode_line_internal (struct linespec_state *self, char **argptr)
+static struct symtabs_and_lines
+parse_linespec (linespec_parser *parser, char **argptr)
 {
-  char *p;
-  char *q;
-
-  char *copy;
-  /* This says whether or not something in *ARGPTR is quoted with
-     completer_quotes (i.e. with single quotes).  */
-  int is_quoted;
-  /* Is *ARGPTR enclosed in double quotes?  */
-  int is_quote_enclosed;
-  int is_objc_method = 0;
-  char *saved_arg = *argptr;
-  /* If IS_QUOTED, the end of the quoted bit.  */
-  char *end_quote = NULL;
-  /* Is *ARGPTR enclosed in single quotes?  */
-  int is_squote_enclosed = 0;
-  /* The "first half" of the linespec.  */
-  char *first_half;
-
-  /* If we are parsing `function:label', this holds the symbols
-     matching the function name.  */
-  VEC (symbolp) *function_symbols = NULL;
-  /* If FUNCTION_SYMBOLS is not NULL, then this is the exception that
-     was thrown when trying to parse a filename.  */
+  linespec_token token;
+  struct symtabs_and_lines values;
   volatile struct gdb_exception file_exception;
+  struct cleanup *cleanup;
 
-  struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
-
-  /* Defaults have defaults.  */
-
-  initialize_defaults (&self->default_symtab, &self->default_line);
-  
-  /* See if arg is *PC.  */
-
-  if (**argptr == '*')
-    {
-      do_cleanups (cleanup);
-      return decode_indirect (self, argptr);
-    }
-
-  is_quoted = (strchr (get_gdb_completer_quote_characters (),
-		       **argptr) != NULL);
-
-  if (is_quoted)
-    {
-      end_quote = skip_quoted (*argptr);
-      if (*end_quote == '\0')
-	is_squote_enclosed = 1;
-    }
-
-  /* Check to see if it's a multipart linespec (with colons or
-     periods).  */
-
-  /* Locate the end of the first half of the linespec.
-     After the call, for instance, if the argptr string is "foo.c:123"
-     p will point at "123".  If there is only one part, like "foo", p
-     will point to "".  If this is a C++ name, like "A::B::foo", p will
-     point to "::B::foo".  Argptr is not changed by this call.  */
-
-  first_half = p = locate_first_half (argptr, &is_quote_enclosed);
-
-  /* First things first: if ARGPTR starts with a filename, get its
-     symtab and strip the filename from ARGPTR.  */
-  TRY_CATCH (file_exception, RETURN_MASK_ERROR)
-    {
-      self->file_symtabs = symtabs_from_filename (argptr, p, is_quote_enclosed,
-						  &self->user_filename);
-    }
-
-  if (VEC_empty (symtab_p, self->file_symtabs))
-    {
-      /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB.  */
-      VEC_safe_push (symtab_p, self->file_symtabs, NULL);
-    }
-
-  if (file_exception.reason >= 0)
+  /* A special case to start.  It has become quite popular for
+     IDEs to work around bugs in the previous parser by quoting
+     the entire linespec, so we attempt to deal with this nicely.  */
+  parser->is_quote_enclosed = 0;
+  if (!is_ada_operator (*argptr)
+      && strchr (linespec_quote_characters, **argptr) != NULL)
     {
-      /* Check for single quotes on the non-filename part.  */
-      is_quoted = (**argptr
-		   && strchr (get_gdb_completer_quote_characters (),
-			      **argptr) != NULL);
-      if (is_quoted)
-	end_quote = skip_quoted (*argptr);
+      const char *end;
 
-      /* Locate the next "half" of the linespec.  */
-      first_half = p = locate_first_half (argptr, &is_quote_enclosed);
+      end = skip_quote_char (*argptr + 1, **argptr);
+      if (end != NULL && is_closing_quote_enclosed (end))
+	{
+	  /* Here's the special case.  Skip ARGPTR past the initial
+	     quote.  */
+	  ++(*argptr);
+	  parser->is_quote_enclosed = 1;
+	}
     }
 
-  /* Check if this is an Objective-C method (anything that starts with
-     a '+' or '-' and a '[').  */
-  if (is_objc_method_format (p))
-    is_objc_method = 1;
+  parser->lexer.saved_arg = *argptr;
+  parser->lexer.stream = argptr;
+  file_exception.reason = 0;
 
-  /* Check if the symbol could be an Objective-C selector.  */
-
-  {
-    struct symtabs_and_lines values;
+  /* Initialize the default symtab and line offset.  */
+  initialize_defaults (&PARSER_STATE (parser)->default_symtab,
+		       &PARSER_STATE (parser)->default_line);
 
-    values = decode_objc (self, argptr);
-    if (values.sals != NULL)
-      {
-	do_cleanups (cleanup);
-	return values;
-      }
-  }
+  /* Objective-C shortcut.  */
+  values = decode_objc (PARSER_STATE (parser), PARSER_RESULT (parser), argptr);
+  if (values.sals != NULL)
+    return values;
 
-  /* Does it look like there actually were two parts?  */
+  /* Start parsing.  */
 
-  if (p[0] == ':' || p[0] == '.')
+  /* Get the first token.  */
+  token = linespec_lexer_lex_one (parser);
+
+  /* It must be either LSTOKEN_STRING or LSTOKEN_NUMBER.  */
+  if (token.type == LSTOKEN_STRING && *LS_TOKEN_STOKEN (token).ptr == '*')
     {
-      /* Is it a C++ or Java compound data structure?
-	 The check on p[1] == ':' is capturing the case of "::",
-	 since p[0]==':' was checked above.
-	 Note that the call to decode_compound does everything
-	 for us, including the lookup on the symbol table, so we
-	 can return now.  */
-	
-      if (p[0] == '.' || p[1] == ':')
-	{
-	  struct symtabs_and_lines values;
-	  volatile struct gdb_exception ex;
-	  char *saved_argptr = *argptr;
+      char *expr, *copy;
 
-	  if (is_quote_enclosed)
-	    ++saved_arg;
+      /* User specified an expression, *EXPR.  */
+      copy = expr = copy_token_string (token);
+      cleanup = make_cleanup (xfree, expr);
+      PARSER_RESULT (parser)->expr_pc = linespec_expression_to_pc (&copy);
+      discard_cleanups (cleanup);
+      PARSER_RESULT (parser)->expression = expr;
 
-	  /* Initialize it just to avoid a GCC false warning.  */
-	  memset (&values, 0, sizeof (values));
+      /* This is a little hacky/tricky.  If linespec_expression_to_pc
+	 did not evaluate the entire token, then we must find the
+	 string COPY inside the original token buffer.  */
+      if (*copy != '\0')
+	{
+	  PARSER_STREAM (parser) = strstr (parser->lexer.saved_arg, copy);
+	  gdb_assert (PARSER_STREAM (parser) != NULL);
+	}
 
-	  TRY_CATCH (ex, RETURN_MASK_ERROR)
-	    {
-	      values = decode_compound (self, argptr, saved_arg, p);
-	    }
-	  if ((is_quoted || is_squote_enclosed) && **argptr == '\'')
-	    *argptr = *argptr + 1;
+      /* Consume the token.  */
+      linespec_lexer_consume_token (parser);
 
-	  if (ex.reason >= 0)
-	    {
-	      do_cleanups (cleanup);
-	      return values;
-	    }
+      goto convert_to_sals;
+    }
+  else if (token.type == LSTOKEN_STRING && *LS_TOKEN_STOKEN (token).ptr == '$')
+    {
+      char *var;
 
-	  if (ex.error != NOT_FOUND_ERROR)
-	    throw_exception (ex);
+      /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB.  */
+      VEC_safe_push (symtab_p, PARSER_RESULT (parser)->file_symtabs, NULL);
 
-	  *argptr = saved_argptr;
-	}
-      else
-	{
-	  /* If there was an exception looking up a specified filename earlier,
-	     then check whether we were really given `function:label'.   */
-	  if (file_exception.reason < 0)
-	    {
-	      function_symbols = find_function_symbols (argptr, p,
-							is_quote_enclosed,
-							&self->user_function);
+      /* User specified a convenience variable or history value.  */
+      var = copy_token_string (token);
+      cleanup = make_cleanup (xfree, var);
+      PARSER_RESULT (parser)->line_offset
+	= linespec_parse_variable (PARSER_STATE (parser), var);
 
-	      /* If we did not find a function, re-throw the original
-		 exception.  */
-	      if (!function_symbols)
-		throw_exception (file_exception);
+      /* If a line_offset wasn't found (VAR is the name of a user
+	 variable/function), then skip to normal symbol processing.  */
+      if (PARSER_RESULT (parser)->line_offset.sign != LINE_OFFSET_UNKNOWN)
+	{
+	  discard_cleanups (cleanup);
 
-	      make_cleanup (VEC_cleanup (symbolp), &function_symbols);
-	    }
+	  /* Consume this token.  */
+	  linespec_lexer_consume_token (parser);
 
-	  /* Check for single quotes on the non-filename part.  */
-	  if (!is_quoted)
-	    {
-	      is_quoted = (**argptr
-			   && strchr (get_gdb_completer_quote_characters (),
-				      **argptr) != NULL);
-	      if (is_quoted)
-		end_quote = skip_quoted (*argptr);
-	    }
+	  goto convert_to_sals;
 	}
-    }
 
-  /* self->file_symtabs holds the  specified file symtabs, or 0 if no file
-     specified.
-     If we are parsing `function:symbol', then FUNCTION_SYMBOLS holds the
-     functions before the `:'.
-     arg no longer contains the file name.  */
+      do_cleanups (cleanup);
+    }
+  else if (token.type != LSTOKEN_STRING && token.type != LSTOKEN_NUMBER)
+    unexpected_linespec_error (parser);
 
-  /* If the filename was quoted, we must re-check the quotation.  */
+  /* Shortcut: If the next token is not LSTOKEN_COLON, we know that
+     this token cannot represent a filename.  */
+  token = linespec_lexer_peek_token (parser);
 
-  if (end_quote == first_half && *end_quote!= '\0')
+  if (token.type == LSTOKEN_COLON)
     {
-      is_quoted = (**argptr
-		   && strchr (get_gdb_completer_quote_characters (),
-			      **argptr) != NULL);
-      if (is_quoted)
-	end_quote = skip_quoted (*argptr);
-    }
+      char *user_filename;
 
-  /* Check whether arg is all digits (and sign).  */
+      /* Get the current token again and extract the filename.  */
+      token = linespec_lexer_lex_one (parser);
+      user_filename = copy_token_string (token);
 
-  q = *argptr;
-  if (*q == '-' || *q == '+')
-    q++;
-  while (*q >= '0' && *q <= '9')
-    q++;
+      /* Check if the input is a filename.  */
+      TRY_CATCH (file_exception, RETURN_MASK_ERROR)
+	{
+	  PARSER_RESULT (parser)->file_symtabs
+	    = symtabs_from_filename (user_filename);
+	}
 
-  if (q != *argptr && (*q == 0 || *q == ' ' || *q == '\t' || *q == ',')
-      && function_symbols == NULL)
-    {
-      struct symtabs_and_lines values;
+      if (file_exception.reason >= 0)
+	{
+	  /* Symtabs were found for the file.  Record the filename.  */
+	  PARSER_RESULT (parser)->source_filename = user_filename;
 
-      /* We found a token consisting of all digits -- at least one digit.  */
-      values = decode_all_digits (self, argptr, q);
-      do_cleanups (cleanup);
-      return values;
-    }
+	  /* Get the next token.  */
+	  token = linespec_lexer_consume_token (parser);
 
-  /* Arg token is not digits => try it as a variable name
-     Find the next token (everything up to end or next whitespace).  */
+	  /* This is LSTOKEN_COLON; consume it.  */
+	  linespec_lexer_consume_token (parser);
+	}
+      else
+	{
+	  /* No symtabs found -- discard user_filename.  */
+	  xfree (user_filename);
 
-  if (**argptr == '$')		/* May be a convenience variable.  */
-    /* One or two $ chars possible.  */
-    p = skip_quoted (*argptr + (((*argptr)[1] == '$') ? 2 : 1));
-  else if (is_quoted || is_squote_enclosed)
-    {
-      p = end_quote;
-      if (p[-1] != '\'')
-	error (_("Unmatched single quote."));
+	  /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB.  */
+	  VEC_safe_push (symtab_p, PARSER_RESULT (parser)->file_symtabs, NULL);
+	}
     }
-  else if (is_objc_method)
+  /* If the next token is not EOI, KEYWORD, or COMMA, issue an error.  */
+  else if (token.type != LSTOKEN_EOI && token.type != LSTOKEN_KEYWORD
+	   && token.type != LSTOKEN_COMMA)
     {
-      /* allow word separators in method names for Obj-C.  */
-      p = skip_quoted_chars (*argptr, NULL, "");
+      /* TOKEN is the _next_ token, not the one currently in the parser.
+	 Consuming the token will give the correct error message.  */
+      linespec_lexer_consume_token (parser);
+      unexpected_linespec_error (parser);
     }
   else
     {
-      p = skip_quoted (*argptr);
-    }
-
-  /* Keep any important naming information.  */
-  p = keep_name_info (p, p == saved_arg || is_linespec_boundary (p[-1]));
-
-  copy = (char *) alloca (p - *argptr + 1);
-  memcpy (copy, *argptr, p - *argptr);
-  copy[p - *argptr] = '\0';
-  if (p != *argptr
-      && copy[0]
-      && copy[0] == copy[p - *argptr - 1]
-      && strchr (get_gdb_completer_quote_characters (), copy[0]) != NULL)
-    {
-      copy[p - *argptr - 1] = '\0';
-      copy++;
+      /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB.  */
+      VEC_safe_push (symtab_p, PARSER_RESULT (parser)->file_symtabs, NULL);
     }
-  else if (is_quoted || is_squote_enclosed)
-    copy[p - *argptr - 1] = '\0';
-  
-  *argptr = skip_spaces (p);
 
-  /* If it starts with $: may be a legitimate variable or routine name
-     (e.g. HP-UX millicode routines such as $$dyncall), or it may
-     be history value, or it may be a convenience variable.  */
+  /* Parse the rest of the linespec.  */
+  linespec_parse_basic (parser);
 
-  if (*copy == '$' && function_symbols == NULL)
+  if (PARSER_RESULT (parser)->function_symbols == NULL
+      && PARSER_RESULT (parser)->labels.label_symbols == NULL
+      && PARSER_RESULT (parser)->line_offset.sign == LINE_OFFSET_UNKNOWN
+      && PARSER_RESULT (parser)->minimal_symbols == NULL)
     {
-      struct symtabs_and_lines values;
-
-      values = decode_dollar (self, copy);
-      do_cleanups (cleanup);
-      return values;
-    }
+      /* The linespec didn't parse.  Re-throw the file exception if
+	 there was one.  */
+      if (file_exception.reason < 0)
+	throw_exception (file_exception);
 
-  /* Try the token as a label, but only if no file was specified,
-     because we can only really find labels in the current scope.  */
-
-  if (VEC_length (symtab_p, self->file_symtabs) == 1
-      && VEC_index (symtab_p, self->file_symtabs, 0) == NULL)
-    {
-      struct symtabs_and_lines label_result;
-      if (decode_label (self, function_symbols, copy, &label_result))
-	{
-	  do_cleanups (cleanup);
-	  return label_result;
-	}
+      /* Otherwise, the symbol is not found.  */
+      symbol_not_found_error (PARSER_RESULT (parser)->function_name,
+			      PARSER_RESULT (parser)->source_filename);
     }
 
-  if (function_symbols)
-    throw_exception (file_exception);
+ convert_to_sals:
 
-  /* Look up that token as a variable.
-     If file specified, use that file's per-file block to start with.  */
+  /* Get the last token and record how much of the input was parsed,
+     if necessary.  */
+  token = linespec_lexer_lex_one (parser);
+  if (token.type != LSTOKEN_EOI && token.type != LSTOKEN_KEYWORD)
+    PARSER_STREAM (parser) = LS_TOKEN_STOKEN (token).ptr;
 
-  {
-    struct symtabs_and_lines values;
+  /* Convert the data in PARSER_RESULT to SALs.  */
+  values = convert_linespec_to_sals (PARSER_STATE (parser),
+				     PARSER_RESULT (parser));
 
-    values = decode_variable (self, copy);
-    do_cleanups (cleanup);
-    return values;
-  }
+  return values;
 }
 
+
 /* A constructor for linespec_state.  */
 
 static void
 linespec_state_constructor (struct linespec_state *self,
-			    int flags,
+			    int flags, const struct language_defn *language,
 			    struct symtab *default_symtab,
 			    int default_line,
 			    struct linespec_result *canonical)
 {
   memset (self, 0, sizeof (*self));
+  self->language = language;
   self->funfirstline = (flags & DECODE_LINE_FUNFIRSTLINE) ? 1 : 0;
   self->list_mode = (flags & DECODE_LINE_LIST_MODE) ? 1 : 0;
   self->default_symtab = default_symtab;
@@ -1148,19 +2201,64 @@ linespec_state_constructor (struct linespec_state *self,
 				      xfree, xcalloc, xfree);
 }
 
+/* Initialize a new linespec parser.  */
+
+static void
+linespec_parser_new (linespec_parser *parser,
+		     int flags, const struct language_defn *language,
+		     struct symtab *default_symtab,
+		     int default_line,
+		     struct linespec_result *canonical)
+{
+  parser->lexer.current.type = LSTOKEN_CONSUMED;
+  memset (PARSER_RESULT (parser), 0, sizeof (struct linespec));
+  PARSER_RESULT (parser)->line_offset.sign = LINE_OFFSET_UNKNOWN;
+  linespec_state_constructor (PARSER_STATE (parser), flags, language,
+			      default_symtab, default_line, canonical);
+}
+
 /* A destructor for linespec_state.  */
 
 static void
-linespec_state_destructor (void *arg)
+linespec_state_destructor (struct linespec_state *self)
 {
-  struct linespec_state *self = arg;
-
-  xfree (self->user_filename);
-  xfree (self->user_function);
-  VEC_free (symtab_p, self->file_symtabs);
   htab_delete (self->addr_set);
 }
 
+/* Delete a linespec parser.  */
+
+static void
+linespec_parser_delete (void *arg)
+{
+  linespec_parser *parser = (linespec_parser *) arg;
+
+  if (PARSER_RESULT (parser)->expression)
+    xfree (PARSER_RESULT (parser)->expression);
+  if (PARSER_RESULT (parser)->source_filename)
+    xfree (PARSER_RESULT (parser)->source_filename);
+  if (PARSER_RESULT (parser)->label_name)
+    xfree (PARSER_RESULT (parser)->label_name);
+  if (PARSER_RESULT (parser)->function_name)
+    xfree (PARSER_RESULT (parser)->function_name);
+
+  if (PARSER_RESULT (parser)->file_symtabs != NULL)
+    VEC_free (symtab_p, PARSER_RESULT (parser)->file_symtabs);
+
+  if (PARSER_RESULT (parser)->function_symbols != NULL)
+    VEC_free (symbolp, PARSER_RESULT (parser)->function_symbols);
+
+  if (PARSER_RESULT (parser)->minimal_symbols != NULL)
+    VEC_free (minsym_and_objfile_d, PARSER_RESULT (parser)->minimal_symbols);
+
+  if (PARSER_RESULT (parser)->labels.label_symbols != NULL)
+    VEC_free (symbolp, PARSER_RESULT (parser)->labels.label_symbols);
+
+  if (PARSER_RESULT (parser)->labels.function_symbols != NULL)
+    VEC_free (symbolp, PARSER_RESULT (parser)->labels.function_symbols);
+
+  linespec_state_destructor (PARSER_STATE (parser));
+}
+
 /* See linespec.h.  */
 
 void
@@ -1171,10 +2269,11 @@ decode_line_full (char **argptr, int flags,
 		  const char *filter)
 {
   struct symtabs_and_lines result;
-  struct linespec_state state;
   struct cleanup *cleanups;
   char *arg_start = *argptr;
   VEC (const_char_ptr) *filters = NULL;
+  linespec_parser parser;
+  struct linespec_state *state;
 
   gdb_assert (canonical != NULL);
   /* The filter only makes sense for 'all'.  */
@@ -1185,12 +2284,13 @@ decode_line_full (char **argptr, int flags,
 	      || select_mode == multiple_symbols_cancel);
   gdb_assert ((flags & DECODE_LINE_LIST_MODE) == 0);
 
-  linespec_state_constructor (&state, flags,
-			      default_symtab, default_line, canonical);
-  cleanups = make_cleanup (linespec_state_destructor, &state);
+  linespec_parser_new (&parser, flags, current_language, default_symtab,
+		       default_line, canonical);
+  cleanups = make_cleanup (linespec_parser_delete, &parser);
   save_current_program_space ();
 
-  result = decode_line_internal (&state, argptr);
+  result = parse_linespec (&parser, argptr);
+  state = PARSER_STATE (&parser);
 
   gdb_assert (result.nelts == 1 || canonical->pre_expanded);
   gdb_assert (canonical->addr_string != NULL);
@@ -1201,15 +2301,15 @@ decode_line_full (char **argptr, int flags,
     {
       int i;
 
-      if (state.canonical_names == NULL)
-	state.canonical_names = xcalloc (result.nelts, sizeof (char *));
-      make_cleanup (xfree, state.canonical_names);
+      if (state->canonical_names == NULL)
+	state->canonical_names = xcalloc (result.nelts, sizeof (char *));
+      make_cleanup (xfree, state->canonical_names);
       for (i = 0; i < result.nelts; ++i)
 	{
-	  if (state.canonical_names[i] == NULL)
-	    state.canonical_names[i] = savestring (arg_start,
-						   *argptr - arg_start);
-	  make_cleanup (xfree, state.canonical_names[i]);
+	  if (state->canonical_names[i] == NULL)
+	    state->canonical_names[i] = savestring (arg_start,
+						    *argptr - arg_start);
+	  make_cleanup (xfree, state->canonical_names[i]);
 	}
     }
 
@@ -1227,36 +2327,84 @@ decode_line_full (char **argptr, int flags,
 	{
 	  make_cleanup (VEC_cleanup (const_char_ptr), &filters);
 	  VEC_safe_push (const_char_ptr, filters, filter);
-	  filter_results (&state, &result, filters);
+	  filter_results (state, &result, filters);
 	}
       else
-	convert_results_to_lsals (&state, &result);
+	convert_results_to_lsals (state, &result);
     }
   else
-    decode_line_2 (&state, &result, select_mode);
+    decode_line_2 (state, &result, select_mode);
 
   do_cleanups (cleanups);
 }
 
+/* See linespec.h.  */
+
 struct symtabs_and_lines
 decode_line_1 (char **argptr, int flags,
 	       struct symtab *default_symtab,
 	       int default_line)
 {
   struct symtabs_and_lines result;
-  struct linespec_state state;
+  linespec_parser parser;
   struct cleanup *cleanups;
 
-  linespec_state_constructor (&state, flags,
-			      default_symtab, default_line, NULL);
-  cleanups = make_cleanup (linespec_state_destructor, &state);
+  linespec_parser_new (&parser, flags, current_language, default_symtab,
+		       default_line, NULL);
+  cleanups = make_cleanup (linespec_parser_delete, &parser);
   save_current_program_space ();
 
-  result = decode_line_internal (&state, argptr);
+  result = parse_linespec (&parser, argptr);
+
   do_cleanups (cleanups);
   return result;
 }
 
+/* See linespec.h.  */
+
+struct symtabs_and_lines
+decode_line_with_current_source (char *string, int flags)
+{
+  struct symtabs_and_lines sals;
+  struct symtab_and_line cursal;
+
+  if (string == 0)
+    error (_("Empty line specification."));
+
+  /* We use whatever is set as the current source line.  We do not try
+     and get a default source symtab+line or it will recursively call us!  */
+  cursal = get_current_source_symtab_and_line ();
+
+  sals = decode_line_1 (&string, flags,
+			cursal.symtab, cursal.line);
+
+  if (*string)
+    error (_("Junk at end of line specification: %s"), string);
+  return sals;
+}
+
+/* See linespec.h.  */
+
+struct symtabs_and_lines
+decode_line_with_last_displayed (char *string, int flags)
+{
+  struct symtabs_and_lines sals;
+
+  if (string == 0)
+    error (_("Empty line specification."));
+
+  if (last_displayed_sal_is_valid ())
+    sals = decode_line_1 (&string, flags,
+			  get_last_displayed_symtab (),
+			  get_last_displayed_line ());
+  else
+    sals = decode_line_1 (&string, flags, (struct symtab *) NULL, 0);
+
+  if (*string)
+    error (_("Junk at end of line specification: %s"), string);
+  return sals;
+}
+
 

 
 /* First, some functions to initialize stuff at the beggining of the
@@ -1280,160 +2428,20 @@ initialize_defaults (struct symtab **default_symtab, int *default_line)
 
 

 
-/* Decode arg of the form *PC.  */
+/* Evaluate the expression pointed to by EXP_PTR into a CORE_ADDR,
+   advancing EXP_PTR past any parsed text.  */
 
-static struct symtabs_and_lines
-decode_indirect (struct linespec_state *self, char **argptr)
+static CORE_ADDR
+linespec_expression_to_pc (char **exp_ptr)
 {
-  struct symtabs_and_lines values;
-  CORE_ADDR pc;
-  char *initial = *argptr;
-  
   if (current_program_space->executing_startup)
     /* The error message doesn't really matter, because this case
        should only hit during breakpoint reset.  */
     throw_error (NOT_FOUND_ERROR, _("cannot evaluate expressions while "
 				    "program space is in startup"));
 
-  (*argptr)++;
-  pc = value_as_address (parse_to_comma_and_eval (argptr));
-
-  values.sals = (struct symtab_and_line *)
-    xmalloc (sizeof (struct symtab_and_line));
-
-  values.nelts = 1;
-  values.sals[0] = find_pc_line (pc, 0);
-  values.sals[0].pc = pc;
-  values.sals[0].section = find_pc_overlay (pc);
-  values.sals[0].explicit_pc = 1;
-
-  if (self->canonical)
-    self->canonical->addr_string = savestring (initial, *argptr - initial);
-
-  return values;
-}
-
-

-
-/* Locate the first half of the linespec, ending in a colon, period,
-   or whitespace.  (More or less.)  Also, check to see if *ARGPTR is
-   enclosed in double quotes; if so, set is_quote_enclosed, advance
-   ARGPTR past that and zero out the trailing double quote.
-   If ARGPTR is just a simple name like "main", p will point to ""
-   at the end.  */
-
-static char *
-locate_first_half (char **argptr, int *is_quote_enclosed)
-{
-  char *ii;
-  char *p, *p1;
-  int has_comma;
-
-  /* Maybe we were called with a line range FILENAME:LINENUM,FILENAME:LINENUM
-     and we must isolate the first half.  Outer layers will call again later
-     for the second half.
-
-     Don't count commas that appear in argument lists of overloaded
-     functions, or in quoted strings.  It's stupid to go to this much
-     trouble when the rest of the function is such an obvious roach hotel.  */
-  ii = find_toplevel_char (*argptr, ',');
-  has_comma = (ii != 0);
-
-  /* Temporarily zap out second half to not confuse the code below.
-     This is undone below.  Do not change ii!!  */
-  if (has_comma)
-    {
-      *ii = '\0';
-    }
-
-  /* Maybe arg is FILE : LINENUM or FILE : FUNCTION.  May also be
-     CLASS::MEMBER, or NAMESPACE::NAME.  Look for ':', but ignore
-     inside of <>.  */
-
-  p = *argptr;
-  if (p[0] == '"')
-    {
-      *is_quote_enclosed = 1;
-      (*argptr)++;
-      p++;
-    }
-  else
-    {
-      *is_quote_enclosed = 0;
-      if (strchr (get_gdb_completer_quote_characters (), *p))
-	{
-	  ++(*argptr);
-	  ++p;
-	}
-    }
-
-
-  /* Check for a drive letter in the filename.  This is done on all hosts
-     to capture cross-compilation environments.  On Unixen, directory
-     separators are illegal in filenames, so if the user enters "e:/foo.c",
-     he is referring to a directory named "e:" and a source file named
-     "foo.c", and we still want to keep these two pieces together.  */
-  if (isalpha (p[0]) && p[1] == ':' && IS_DIR_SEPARATOR (p[2]))
-    p += 3;
-
-  for (; *p; p++)
-    {
-      if (p[0] == '<')
-	{
-	  char *temp_end = find_template_name_end (p);
-
-	  if (!temp_end)
-	    error (_("malformed template specification in command"));
-	  p = temp_end;
-	}
-
-      if (p[0] == '(')
-	p = find_method_overload_end (p);
-
-      /* Check for a colon and a plus or minus and a [ (which
-         indicates an Objective-C method).  */
-      if (is_objc_method_format (p))
-	{
-	  break;
-	}
-      /* Check for the end of the first half of the linespec.  End of
-         line, a tab, a colon or a space.  But if enclosed in double
-	 quotes we do not break on enclosed spaces.  */
-      if (!*p
-	  || p[0] == '\t'
-	  || (p[0] == ':')
-	  || ((p[0] == ' ') && !*is_quote_enclosed))
-	break;
-      if (p[0] == '.' && strchr (p, ':') == NULL)
-	{
-	  /* Java qualified method.  Find the *last* '.', since the
-	     others are package qualifiers.  Stop at any open parenthesis
-	     which might provide overload information.  */
-	  for (p1 = p; *p1 && *p1 != '('; p1++)
-	    {
-	      if (*p1 == '.')
-		p = p1;
-	    }
-	  break;
-	}
-    }
-  p = skip_spaces (p);
-
-  /* If the closing double quote was left at the end, remove it.  */
-  if (*is_quote_enclosed)
-    {
-      char *closing_quote = strchr (p - 1, '"');
-
-      if (closing_quote && closing_quote[1] == '\0')
-	*closing_quote = '\0';
-    }
-
-  /* Now that we've safely parsed the first half, put back ',' so
-     outer layers can see it.  */
-  if (has_comma)
-    *ii = ',';
-
-  return p;
+  (*exp_ptr)++;
+  return value_as_address (parse_to_comma_and_eval (exp_ptr));
 }
 
 

@@ -1446,28 +2454,35 @@ locate_first_half (char **argptr, int *is_quote_enclosed)
    the existing C++ code to let the user choose one.  */
 
 static struct symtabs_and_lines
-decode_objc (struct linespec_state *self, char **argptr)
+decode_objc (struct linespec_state *self, linespec_p ls, char **argptr)
 {
   struct collect_info info;
   VEC (const_char_ptr) *symbol_names = NULL;
+  struct symtabs_and_lines values;
   char *new_argptr;
   struct cleanup *cleanup = make_cleanup (VEC_cleanup (const_char_ptr),
 					  &symbol_names);
 
   info.state = self;
-  info.result.sals = NULL;
-  info.result.nelts = 0;
+  info.file_symtabs = NULL;
+  VEC_safe_push (symtab_p, info.file_symtabs, NULL);
+  make_cleanup (VEC_cleanup (symtab_p), &info.file_symtabs);
+  info.result.symbols = NULL;
+  info.result.minimal_symbols = NULL;
+  values.nelts = 0;
+  values.sals = NULL;
 
   new_argptr = find_imps (*argptr, &symbol_names); 
   if (VEC_empty (const_char_ptr, symbol_names))
     {
       do_cleanups (cleanup);
-      return info.result;
+      return values;
     }
 
   add_all_symbol_names_from_pspace (&info, NULL, symbol_names);
 
-  if (info.result.nelts > 0)
+  if (!VEC_empty (symbolp, info.result.symbols)
+      || !VEC_empty (minsym_and_objfile_d, info.result.minimal_symbols))
     {
       char *saved_arg;
 
@@ -1475,12 +2490,16 @@ decode_objc (struct linespec_state *self, char **argptr)
       memcpy (saved_arg, *argptr, new_argptr - *argptr);
       saved_arg[new_argptr - *argptr] = '\0';
 
+      ls->function_symbols = info.result.symbols;
+      ls->minimal_symbols = info.result.minimal_symbols;
+      values = convert_linespec_to_sals (self, ls);
+
       if (self->canonical)
 	{
 	  self->canonical->pre_expanded = 1;
-	  if (self->user_filename)
+	  if (ls->source_filename)
 	    self->canonical->addr_string
-	      = xstrprintf ("%s:%s", self->user_filename, saved_arg);
+	      = xstrprintf ("%s:%s", ls->source_filename, saved_arg);
 	  else
 	    self->canonical->addr_string = xstrdup (saved_arg);
 	}
@@ -1489,241 +2508,8 @@ decode_objc (struct linespec_state *self, char **argptr)
   *argptr = new_argptr;
 
   do_cleanups (cleanup);
-  return info.result;
-}
-
-/* This handles C++ and Java compound data structures.  P should point
-   at the first component separator, i.e. double-colon or period.  As
-   an example, on entrance to this function we could have ARGPTR
-   pointing to "AAA::inA::fun" and P pointing to "::inA::fun".  */
-
-static struct symtabs_and_lines
-decode_compound (struct linespec_state *self,
-		 char **argptr, char *the_real_saved_arg, char *p)
-{
-  struct symtabs_and_lines values;
-  char *p2;
-  char *saved_arg2 = *argptr;
-  char *temp_end;
-  struct symbol *sym;
-  char *copy;
-  VEC (symbolp) *sym_classes;
-  char *saved_arg, *class_name;
-  struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
-
-  /* If the user specified any completer quote characters in the input,
-     strip them.  They are superfluous.  */
-  saved_arg = alloca (strlen (the_real_saved_arg) + 1);
-  {
-    char *dst = saved_arg;
-    char *src = the_real_saved_arg;
-    char *quotes = get_gdb_completer_quote_characters ();
-    while (*src != '\0')
-      {
-	if (strchr (quotes, *src) == NULL)
-	  *dst++ = *src;
-	++src;
-      }
-    *dst = '\0';
-  }
-
-  /* First check for "global" namespace specification, of the form
-     "::foo".  If found, skip over the colons and jump to normal
-     symbol processing.  I.e. the whole line specification starts with
-     "::" (note the condition that *argptr == p).  */
-  if (p[0] == ':' 
-      && ((*argptr == p) || (p[-1] == ' ') || (p[-1] == '\t')))
-    saved_arg2 += 2;
-
-  /* Given our example "AAA::inA::fun", we have two cases to consider:
-
-     1) AAA::inA is the name of a class.  In that case, presumably it
-        has a method called "fun"; we then look up that method using
-        find_method.
-
-     2) AAA::inA isn't the name of a class.  In that case, either the
-        user made a typo, AAA::inA is the name of a namespace, or it is
-        the name of a minimal symbol.
-	In this case we just delegate to decode_variable.
-
-     Thus, our first task is to find everything before the last set of
-     double-colons and figure out if it's the name of a class.  So we
-     first loop through all of the double-colons.  */
-
-  p2 = p;		/* Save for restart.  */
-
-  /* This is very messy.  Following the example above we have now the
-     following pointers:
-     p -> "::inA::fun"
-     argptr -> "AAA::inA::fun
-     saved_arg -> "AAA::inA::fun
-     saved_arg2 -> "AAA::inA::fun
-     p2 -> "::inA::fun".  */
-
-  /* In the loop below, with these strings, we'll make 2 passes, each
-     is marked in comments.  */
-
-  while (1)
-    {
-      static char *break_characters = " \t(";
-
-      /* Move pointer up to next possible class/namespace token.  */
-
-      p = p2 + 1;	/* Restart with old value +1.  */
-
-      /* PASS1: at this point p2->"::inA::fun", so p->":inA::fun",
-	 i.e. if there is a double-colon, p will now point to the
-	 second colon.  */
-      /* PASS2: p2->"::fun", p->":fun" */
 
-      /* Move pointer ahead to next double-colon.  */
-      while (*p
-	     && strchr (break_characters, *p) == NULL
-	     && strchr (get_gdb_completer_quote_characters (), *p) == NULL)
-	{
-	  if (current_language->la_language == language_cplus)
-	    p += cp_validate_operator (p);
-
-	  if (p[0] == '<')
-	    {
-	      temp_end = find_template_name_end (p);
-	      if (!temp_end)
-		error (_("malformed template specification in command"));
-	      p = temp_end;
-	    }
-	  /* Note that, since, at the start of this loop, p would be
-	     pointing to the second colon in a double-colon, we only
-	     satisfy the condition below if there is another
-	     double-colon to the right (after).  I.e. there is another
-	     component that can be a class or a namespace.  I.e, if at
-	     the beginning of this loop (PASS1), we had
-	     p->":inA::fun", we'll trigger this when p has been
-	     advanced to point to "::fun".  */
-	  /* PASS2: we will not trigger this.  */
-	  else if ((p[0] == ':') && (p[1] == ':'))
-	    break;	/* Found double-colon.  */
-	  else
-	    {
-	      /* PASS2: We'll keep getting here, until P points to one of the
-		 break characters, at which point we exit this loop.  */
-	      if (*p)
-		{
-		  if (p[1] == '('
-		      && strncmp (&p[1], CP_ANONYMOUS_NAMESPACE_STR,
-				  CP_ANONYMOUS_NAMESPACE_LEN) == 0)
-		    p += CP_ANONYMOUS_NAMESPACE_LEN;
-		  else if (strchr (break_characters, *p) == NULL)
-		    ++p;
-		}
-	    }
-	}
-
-      if (*p != ':')
-	break;		/* Out of the while (1).  This would happen
-			   for instance if we have looked up
-			   unsuccessfully all the components of the
-			   string, and p->""(PASS2).  */
-
-      /* We get here if p points to one of the break characters or "" (i.e.,
-	 string ended).  */
-      /* Save restart for next time around.  */
-      p2 = p;
-      /* Restore argptr as it was on entry to this function.  */
-      *argptr = saved_arg2;
-      /* PASS1: at this point p->"::fun" argptr->"AAA::inA::fun",
-	 p2->"::fun".  */
-
-      /* All ready for next pass through the loop.  */
-    }			/* while (1) */
-
-
-  /* Start of lookup in the symbol tables.  */
-
-  /* Lookup in the symbol table the substring between argptr and
-     p.  Note, this call changes the value of argptr.  */
-  /* Before the call, argptr->"AAA::inA::fun",
-     p->"", p2->"::fun".  After the call: argptr->"fun", p, p2
-     unchanged.  */
-  sym_classes = lookup_prefix_sym (argptr, p2, self->file_symtabs,
-				   &class_name);
-  make_cleanup (VEC_cleanup (symbolp), &sym_classes);
-  make_cleanup (xfree, class_name);
-
-  /* If a class has been found, then we're in case 1 above.  So we
-     look up "fun" as a method of those classes.  */
-  if (!VEC_empty (symbolp, sym_classes))
-    {
-      /* Arg token is not digits => try it as a function name.
-	 Find the next token (everything up to end or next
-	 blank).  */
-      if (**argptr
-	  && strchr (get_gdb_completer_quote_characters (),
-		     **argptr) != NULL)
-	{
-	  p = skip_quoted (*argptr);
-	  *argptr = *argptr + 1;
-	}
-      else
-	{
-	  /* At this point argptr->"fun".  */
-	  char *a;
-
-	  p = *argptr;
-	  while (*p && *p != ' ' && *p != '\t' && *p != ',' && *p != ':'
-		 && *p != '(')
-	    p++;
-	  /* At this point p->"".  String ended.  */
-	  /* Nope, C++ operators could have spaces in them
-	     ("foo::operator <" or "foo::operator delete []").
-	     I apologize, this is a bit hacky...  */
-	  if (current_language->la_language == language_cplus
-	      && *p == ' ' && p - 8 - *argptr + 1 > 0)
-	    {
-	      /* The above loop has already swallowed "operator".  */
-	      p += cp_validate_operator (p - 8) - 8;
-	    }
-
-	  /* Keep any important naming information.  */
-	  p = keep_name_info (p, 1);
-	}
-
-      /* Allocate our own copy of the substring between argptr and
-	 p.  */
-      copy = (char *) alloca (p - *argptr + 1);
-      memcpy (copy, *argptr, p - *argptr);
-      copy[p - *argptr] = '\0';
-      if (p != *argptr
-	  && copy[p - *argptr - 1]
-	  && strchr (get_gdb_completer_quote_characters (),
-		     copy[p - *argptr - 1]) != NULL)
-	copy[p - *argptr - 1] = '\0';
-
-      /* At this point copy->"fun", p->"".  */
-
-      /* No line number may be specified.  */
-      *argptr = skip_spaces (p);
-      /* At this point arptr->"".  */
-
-      /* Look for copy as a method of sym_class.  */
-      /* At this point copy->"fun", sym_class is "AAA:inA",
-	 saved_arg->"AAA::inA::fun".  This concludes the scanning of
-	 the string for possible components matches.  If we find it
-	 here, we return.  If not, and we are at the and of the string,
-	 we'll lookup the whole string in the symbol tables.  */
-
-      values = find_method (self, saved_arg, copy, class_name, sym_classes);
-
-      do_cleanups (cleanup);
-      return values;
-    } /* End if symbol found.  */
-
-
-  /* We couldn't find a class, so we're in case 2 above.  We check the
-     entire name as a symbol instead.  The simplest way to do this is
-     to just throw an exception and let our caller fall through to
-     decode_variable.  */
-
-  throw_error (NOT_FOUND_ERROR, _("see caller, this text doesn't matter"));
+  return values;
 }
 
 /* An instance of this type is used when collecting prefix symbols for
@@ -1750,14 +2536,14 @@ collect_one_symbol (struct symbol *sym, void *d)
   struct type *t;
 
   if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
-    return 1;
+    return 1; /* Continue iterating.  */
 
   t = SYMBOL_TYPE (sym);
   CHECK_TYPEDEF (t);
   if (TYPE_CODE (t) != TYPE_CODE_STRUCT
       && TYPE_CODE (t) != TYPE_CODE_UNION
       && TYPE_CODE (t) != TYPE_CODE_NAMESPACE)
-    return 1;
+    return 1; /* Continue iterating.  */
 
   slot = htab_find_slot (collector->unique_syms, sym, INSERT);
   if (!*slot)
@@ -1766,49 +2552,23 @@ collect_one_symbol (struct symbol *sym, void *d)
       VEC_safe_push (symbolp, collector->symbols, sym);
     }
 
-  return 1;
+  return 1; /* Continue iterating.  */
 }
 
-/* Return the symbol corresponding to the substring of *ARGPTR ending
-   at P, allowing whitespace.  Also, advance *ARGPTR past the symbol
-   name in question, the compound object separator ("::" or "."), and
-   whitespace.  Note that *ARGPTR is changed whether or not the
-   this call finds anything (i.e we return NULL).  As an
-   example, say ARGPTR is "AAA::inA::fun" and P is "::inA::fun".  */
+/* Return any symbols corresponding to CLASS_NAME in FILE_SYMTABS.  */
 
 static VEC (symbolp) *
-lookup_prefix_sym (char **argptr, char *p, VEC (symtab_p) *file_symtabs,
-		   char **class_name)
+lookup_prefix_sym (struct linespec_state *state, VEC (symtab_p) *file_symtabs,
+		   const char *class_name)
 {
-  char *p1;
-  char *copy;
   int ix;
   struct symtab *elt;
   struct decode_compound_collector collector;
   struct cleanup *outer;
   struct cleanup *cleanup;
-  struct block *search_block;
-
-  /* Extract the class name.  */
-  p1 = p;
-  while (p != *argptr && p[-1] == ' ')
-    --p;
-  copy = (char *) xmalloc (p - *argptr + 1);
-  memcpy (copy, *argptr, p - *argptr);
-  copy[p - *argptr] = 0;
-  *class_name = copy;
-  outer = make_cleanup (xfree, copy);
-
-  /* Discard the class name from the argptr.  */
-  p = p1 + (p1[0] == ':' ? 2 : 1);
-  p = skip_spaces (p);
-  *argptr = p;
-
-  /* At this point p1->"::inA::fun", p->"inA::fun" copy->"AAA",
-     argptr->"inA::fun".  */
 
   collector.symbols = NULL;
-  make_cleanup (VEC_cleanup (symbolp), &collector.symbols);
+  outer = make_cleanup (VEC_cleanup (symbolp), &collector.symbols);
 
   collector.unique_syms = htab_create_alloc (1, htab_hash_pointer,
 					     htab_eq_pointer, NULL,
@@ -1819,12 +2579,12 @@ lookup_prefix_sym (char **argptr, char *p, VEC (symtab_p) *file_symtabs,
     {
       if (elt == NULL)
 	{
-	  iterate_over_all_matching_symtabs (copy, STRUCT_DOMAIN,
+	  iterate_over_all_matching_symtabs (state, class_name, STRUCT_DOMAIN,
 					     collect_one_symbol, &collector,
-					     NULL);
-	  iterate_over_all_matching_symtabs (copy, VAR_DOMAIN,
+					     NULL, 0);
+	  iterate_over_all_matching_symtabs (state, class_name, VAR_DOMAIN,
 					     collect_one_symbol, &collector,
-					     NULL);
+					     NULL, 0);
 	}
       else
 	{
@@ -1835,9 +2595,9 @@ lookup_prefix_sym (char **argptr, char *p, VEC (symtab_p) *file_symtabs,
 	  gdb_assert (!SYMTAB_PSPACE (elt)->executing_startup);
 	  set_current_program_space (SYMTAB_PSPACE (elt));
 	  search_block = get_search_block (elt);
-	  LA_ITERATE_OVER_SYMBOLS (search_block, copy, STRUCT_DOMAIN,
+	  LA_ITERATE_OVER_SYMBOLS (search_block, class_name, STRUCT_DOMAIN,
 				   collect_one_symbol, &collector);
-	  LA_ITERATE_OVER_SYMBOLS (search_block, copy, VAR_DOMAIN,
+	  LA_ITERATE_OVER_SYMBOLS (search_block, class_name, VAR_DOMAIN,
 				   collect_one_symbol, &collector);
 	}
     }
@@ -1847,27 +2607,55 @@ lookup_prefix_sym (char **argptr, char *p, VEC (symtab_p) *file_symtabs,
   return collector.symbols;
 }
 
-/* A qsort comparison function for symbols.  The resulting order does
-   not actually matter; we just need to be able to sort them so that
-   symbols with the same program space end up next to each other.  */
+/* A qsort comparison function for symbols.  The resulting order does
+   not actually matter; we just need to be able to sort them so that
+   symbols with the same program space end up next to each other.  */
+
+static int
+compare_symbols (const void *a, const void *b)
+{
+  struct symbol * const *sa = a;
+  struct symbol * const *sb = b;
+  uintptr_t uia, uib;
+
+  uia = (uintptr_t) SYMTAB_PSPACE (SYMBOL_SYMTAB (*sa));
+  uib = (uintptr_t) SYMTAB_PSPACE (SYMBOL_SYMTAB (*sb));
+
+  if (uia < uib)
+    return -1;
+  if (uia > uib)
+    return 1;
+
+  uia = (uintptr_t) *sa;
+  uib = (uintptr_t) *sb;
+
+  if (uia < uib)
+    return -1;
+  if (uia > uib)
+    return 1;
+
+  return 0;
+}
+
+/* Like compare_symbols but for minimal symbols.  */
 
 static int
-compare_symbols (const void *a, const void *b)
+compare_msymbols (const void *a, const void *b)
 {
-  struct symbol * const *sa = a;
-  struct symbol * const *sb = b;
+  const struct minsym_and_objfile *sa = a;
+  const struct minsym_and_objfile *sb = b;
   uintptr_t uia, uib;
 
-  uia = (uintptr_t) SYMTAB_PSPACE (SYMBOL_SYMTAB (*sa));
-  uib = (uintptr_t) SYMTAB_PSPACE (SYMBOL_SYMTAB (*sb));
+  uia = (uintptr_t) sa->objfile->pspace;
+  uib = (uintptr_t) sa->objfile->pspace;
 
   if (uia < uib)
     return -1;
   if (uia > uib)
     return 1;
 
-  uia = (uintptr_t) *sa;
-  uib = (uintptr_t) *sb;
+  uia = (uintptr_t) sa->minsym;
+  uib = (uintptr_t) sb->minsym;
 
   if (uia < uib)
     return -1;
@@ -1924,14 +2712,16 @@ find_superclass_methods (VEC (typep) *superclasses,
   do_cleanups (cleanup);
 }
 
-/* This finds the method COPY in the class whose type is given by one
-   of the symbols in SYM_CLASSES.  */
+/* This finds the method METHOD_NAME in the class CLASS_NAME whose type is
+   given by one of the symbols in SYM_CLASSES.  Matches are returned
+   in SYMBOLS (for debug symbols) and MINSYMS (for minimal symbols).  */
 
-static struct symtabs_and_lines
-find_method (struct linespec_state *self, char *saved_arg,
-	     char *copy, const char *class_name, VEC (symbolp) *sym_classes)
+static void
+find_method (struct linespec_state *self, VEC (symtab_p) *file_symtabs,
+	     const char *class_name, const char *method_name,
+	     VEC (symbolp) *sym_classes, VEC (symbolp) **symbols,
+	     VEC (minsym_and_objfile_d) **minsyms)
 {
-  char *canon;
   struct symbol *sym;
   struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
   int ix;
@@ -1939,16 +2729,6 @@ find_method (struct linespec_state *self, char *saved_arg,
   VEC (typep) *superclass_vec;
   VEC (const_char_ptr) *result_names;
   struct collect_info info;
-  char *name_iter;
-
-  /* NAME is typed by the user: it needs to be canonicalized before
-     searching the symbol tables.  */
-  canon = cp_canonicalize_string_no_typedefs (copy);
-  if (canon != NULL)
-    {
-      copy = canon;
-      make_cleanup (xfree, copy);
-    }
 
   /* Sort symbols so that symbols with the same program space are next
      to each other.  */
@@ -1958,11 +2738,12 @@ find_method (struct linespec_state *self, char *saved_arg,
 	 compare_symbols);
 
   info.state = self;
-  info.result.sals = NULL;
-  info.result.nelts = 0;
+  info.file_symtabs = file_symtabs;
+  info.result.symbols = NULL;
+  info.result.minimal_symbols = NULL;
 
   /* Iterate over all the types, looking for the names of existing
-     methods matching COPY.  If we cannot find a direct method in a
+     methods matching METHOD_NAME.  If we cannot find a direct method in a
      given program space, then we consider inherited methods; this is
      not ideal (ideal would be to respect C++ hiding rules), but it
      seems good enough and is what GDB has historically done.  We only
@@ -1986,7 +2767,7 @@ find_method (struct linespec_state *self, char *saved_arg,
       pspace = SYMTAB_PSPACE (SYMBOL_SYMTAB (sym));
       set_current_program_space (pspace);
       t = check_typedef (SYMBOL_TYPE (sym));
-      find_methods (t, copy, &result_names, &superclass_vec);
+      find_methods (t, method_name, &result_names, &superclass_vec);
 
       /* Handle all items from a single program space at once; and be
 	 sure not to miss the last batch.  */
@@ -1998,7 +2779,8 @@ find_method (struct linespec_state *self, char *saved_arg,
 	  /* If we did not find a direct implementation anywhere in
 	     this program space, consider superclasses.  */
 	  if (VEC_length (const_char_ptr, result_names) == last_result_len)
-	    find_superclass_methods (superclass_vec, copy, &result_names);
+	    find_superclass_methods (superclass_vec, method_name,
+				     &result_names);
 
 	  /* We have a list of candidate symbol names, so now we
 	     iterate over the symbol tables looking for all
@@ -2010,31 +2792,18 @@ find_method (struct linespec_state *self, char *saved_arg,
 	}
     }
 
-  if (info.result.nelts > 0)
+  if (!VEC_empty (symbolp, info.result.symbols)
+      || !VEC_empty (minsym_and_objfile_d, info.result.minimal_symbols))
     {
-      if (self->canonical)
-	{
-	  self->canonical->pre_expanded = 1;
-	  if (self->user_filename)
-	    self->canonical->addr_string
-	      = xstrprintf ("%s:%s", self->user_filename, saved_arg);
-	  else
-	    self->canonical->addr_string = xstrdup (saved_arg);
-	}
-
+      *symbols = info.result.symbols;
+      *minsyms = info.result.minimal_symbols;
       do_cleanups (cleanup);
-
-      return info.result;
+      return;
     }
 
-  if (copy[0] == '~')
-    cplusplus_error (saved_arg,
-		     "the class `%s' does not have destructor defined\n",
-		     class_name);
-  else
-    cplusplus_error (saved_arg,
-		     "the class %s does not have any method named %s\n",
-		     class_name, copy);
+  /* Throw an NOT_FOUND_ERROR.  This will be caught by the caller
+     and other attempts to locate the symbol will be made.  */
+  throw_error (NOT_FOUND_ERROR, _("see caller, this text doesn't matter"));
 }
 
 

@@ -2096,487 +2865,193 @@ collect_symtabs_from_filename (const char *file)
   return collector.symtabs;
 }
 
-/* Return all the symtabs associated to the filename given by the
-   substring of *ARGPTR ending at P, and advance ARGPTR past that
-   filename.  */
+/* Return all the symtabs associated to the FILENAME.  */
 
 static VEC (symtab_p) *
-symtabs_from_filename (char **argptr, char *p, int is_quote_enclosed,
-		       char **user_filename)
-{
-  char *p1;
-  char *copy;
-  struct cleanup *outer;
-  VEC (symtab_p) *result;
-  
-  p1 = p;
-  while (p != *argptr && p[-1] == ' ')
-    --p;
-  if ((*p == '"') && is_quote_enclosed)
-    --p;
-  copy = xmalloc (p - *argptr + 1);
-  outer = make_cleanup (xfree, copy);
-  memcpy (copy, *argptr, p - *argptr);
-  /* It may have the ending quote right after the file name.  */
-  if ((is_quote_enclosed && copy[p - *argptr - 1] == '"')
-      || copy[p - *argptr - 1] == '\'')
-    copy[p - *argptr - 1] = 0;
-  else
-    copy[p - *argptr] = 0;
-
-  result = collect_symtabs_from_filename (copy);
-
-  if (VEC_empty (symtab_p, result))
-    {
-      if (!have_full_symbols () && !have_partial_symbols ())
-	throw_error (NOT_FOUND_ERROR,
-		     _("No symbol table is loaded.  "
-		       "Use the \"file\" command."));
-      throw_error (NOT_FOUND_ERROR, _("No source file named %s."), copy);
-    }
-
-  /* Discard the file name from the arg.  */
-  if (*p1 == '\0')
-    *argptr = p1;
-  else
-    *argptr = skip_spaces (p1 + 1);
-
-  discard_cleanups (outer);
-  *user_filename = copy;
-  return result;
-}
-
-/* A callback used by iterate_over_all_matching_symtabs that collects
-   symbols for find_function_symbols.  */
-
-static int
-collect_function_symbols (struct symbol *sym, void *arg)
-{
-  VEC (symbolp) **syms = arg;
-
-  if (SYMBOL_CLASS (sym) == LOC_BLOCK)
-    VEC_safe_push (symbolp, *syms, sym);
-
-  return 1;
-}
-
-/* Look up a function symbol in *ARGPTR.  If found, advance *ARGPTR
-   and return the symbol.  If not found, return NULL.  */
-
-static VEC (symbolp) *
-find_function_symbols (char **argptr, char *p, int is_quote_enclosed,
-		       char **user_function)
-{
-  char *p1;
-  char *copy;
-  VEC (symbolp) *result = NULL;
-
-  p1 = p;
-  while (p != *argptr && p[-1] == ' ')
-    --p;
-  if ((*p == '"') && is_quote_enclosed)
-    --p;
-  copy = (char *) xmalloc (p - *argptr + 1);
-  *user_function = copy;
-  memcpy (copy, *argptr, p - *argptr);
-  /* It may have the ending quote right after the file name.  */
-  if ((is_quote_enclosed && copy[p - *argptr - 1] == '"')
-      || copy[p - *argptr - 1] == '\'')
-    copy[p - *argptr - 1] = 0;
-  else
-    copy[p - *argptr] = 0;
-
-  iterate_over_all_matching_symtabs (copy, VAR_DOMAIN,
-				     collect_function_symbols, &result, NULL);
-
-  if (VEC_empty (symbolp, result))
-    VEC_free (symbolp, result);
-  else
-    {
-      /* Discard the file name from the arg.  */
-      *argptr = skip_spaces (p1 + 1);
-    }
-
-  return result;
-}
-
-

-
-/* A helper for decode_all_digits that handles the 'list_mode' case.  */
-
-static void
-decode_digits_list_mode (struct linespec_state *self,
-			 struct symtabs_and_lines *values,
-			 struct symtab_and_line val)
-{
-  int ix;
-  struct symtab *elt;
-
-  gdb_assert (self->list_mode);
-
-  for (ix = 0; VEC_iterate (symtab_p, self->file_symtabs, ix, elt); ++ix)
-    {
-      /* The logic above should ensure this.  */
-      gdb_assert (elt != NULL);
-
-      set_current_program_space (SYMTAB_PSPACE (elt));
-
-      /* Simplistic search just for the list command.  */
-      val.symtab = find_line_symtab (elt, val.line, NULL, NULL);
-      if (val.symtab == NULL)
-	val.symtab = elt;
-      val.pspace = SYMTAB_PSPACE (elt);
-      val.pc = 0;
-      val.explicit_line = 1;
-
-      add_sal_to_sals (self, values, &val, NULL);
-    }
-}
-
-/* A helper for decode_all_digits that iterates over the symtabs,
-   adding lines to the VEC.  */
-
-static void
-decode_digits_ordinary (struct linespec_state *self,
-			int line,
-			struct symtabs_and_lines *sals,
-			struct linetable_entry **best_entry)
-{
-  int ix;
-  struct symtab *elt;
-
-  for (ix = 0; VEC_iterate (symtab_p, self->file_symtabs, ix, elt); ++ix)
-    {
-      int i;
-      VEC (CORE_ADDR) *pcs;
-      CORE_ADDR pc;
-
-      /* The logic above should ensure this.  */
-      gdb_assert (elt != NULL);
-
-      set_current_program_space (SYMTAB_PSPACE (elt));
-
-      pcs = find_pcs_for_symtab_line (elt, line, best_entry);
-      for (i = 0; VEC_iterate (CORE_ADDR, pcs, i, pc); ++i)
-	{
-	  struct symtab_and_line sal;
-
-	  init_sal (&sal);
-	  sal.pspace = SYMTAB_PSPACE (elt);
-	  sal.symtab = elt;
-	  sal.line = line;
-	  sal.pc = pc;
-	  add_sal_to_sals_basic (sals, &sal);
-	}
-
-      VEC_free (CORE_ADDR, pcs);
-    }
-}
-
-/* This decodes a line where the argument is all digits (possibly
-   preceded by a sign).  Q should point to the end of those digits;
-   the other arguments are as usual.  */
-
-static struct symtabs_and_lines
-decode_all_digits (struct linespec_state *self,
-		   char **argptr,
-		   char *q)
+symtabs_from_filename (const char *filename)
 {
-  struct symtabs_and_lines values;
-  struct symtab_and_line val;
-  int use_default = 0;
-  char *saved_arg = *argptr;
-
-  enum sign
-    {
-      none, plus, minus
-    }
-  sign = none;
-
-  init_sal (&val);
-  values.sals = NULL;
-  values.nelts = 0;
-
-  /* This is where we need to make sure that we have good defaults.
-     We must guarantee that this section of code is never executed
-     when we are called with just a function name, since
-     set_default_source_symtab_and_line uses
-     select_source_symtab that calls us with such an argument.  */
-
-  if (VEC_length (symtab_p, self->file_symtabs) == 1
-      && VEC_index (symtab_p, self->file_symtabs, 0) == NULL)
-    {
-      set_current_program_space (self->program_space);
-
-      /* Make sure we have at least a default source file.  */
-      set_default_source_symtab_and_line ();
-      initialize_defaults (&self->default_symtab, &self->default_line);
-      VEC_pop (symtab_p, self->file_symtabs);
-      VEC_free (symtab_p, self->file_symtabs);
-      self->file_symtabs
-	= collect_symtabs_from_filename (self->default_symtab->filename);
-      use_default = 1;
-    }
-
-  if (**argptr == '+')
-    sign = plus, (*argptr)++;
-  else if (**argptr == '-')
-    sign = minus, (*argptr)++;
-  val.line = atoi (*argptr);
-  switch (sign)
-    {
-    case plus:
-      if (q == *argptr)
-	val.line = 5;
-      if (use_default)
-	val.line = self->default_line + val.line;
-      break;
-    case minus:
-      if (q == *argptr)
-	val.line = 15;
-      if (use_default)
-	val.line = self->default_line - val.line;
-      else
-	val.line = 1;
-      break;
-    case none:
-      break;		/* No need to adjust val.line.  */
-    }
-
-  *argptr = skip_spaces (q);
-
-  if (self->list_mode)
-    decode_digits_list_mode (self, &values, val);
-  else
-    {
-      struct linetable_entry *best_entry = NULL;
-      int *filter;
-      struct block **blocks;
-      struct cleanup *cleanup;
-      struct symtabs_and_lines intermediate_results;
-      int i, j;
-
-      intermediate_results.sals = NULL;
-      intermediate_results.nelts = 0;
-
-      decode_digits_ordinary (self, val.line, &intermediate_results,
-			      &best_entry);
-      if (intermediate_results.nelts == 0 && best_entry != NULL)
-	decode_digits_ordinary (self, best_entry->line, &intermediate_results,
-				&best_entry);
-
-      cleanup = make_cleanup (xfree, intermediate_results.sals);
-
-      /* For optimized code, compiler can scatter one source line
-	 accross disjoint ranges of PC values, even when no duplicate
-	 functions or inline functions are involved.  For example,
-	 'for (;;)' inside non-template non-inline non-ctor-or-dtor
-	 function can result in two PC ranges.  In this case, we don't
-	 want to set breakpoint on first PC of each range.  To filter
-	 such cases, we use containing blocks -- for each PC found
-	 above we see if there are other PCs that are in the same
-	 block.  If yes, the other PCs are filtered out.  */
-
-      filter = xmalloc (intermediate_results.nelts * sizeof (int));
-      make_cleanup (xfree, filter);
-      blocks = xmalloc (intermediate_results.nelts * sizeof (struct block *));
-      make_cleanup (xfree, blocks);
-
-      for (i = 0; i < intermediate_results.nelts; ++i)
-	{
-	  set_current_program_space (intermediate_results.sals[i].pspace);
-
-	  filter[i] = 1;
-	  blocks[i] = block_for_pc_sect (intermediate_results.sals[i].pc,
-					 intermediate_results.sals[i].section);
-	}
-
-      for (i = 0; i < intermediate_results.nelts; ++i)
-	{
-	  if (blocks[i] != NULL)
-	    for (j = i + 1; j < intermediate_results.nelts; ++j)
-	      {
-		if (blocks[j] == blocks[i])
-		  {
-		    filter[j] = 0;
-		    break;
-		  }
-	      }
-	}
-
-      for (i = 0; i < intermediate_results.nelts; ++i)
-	if (filter[i])
-	  {
-	    struct symbol *sym = (blocks[i]
-				  ? block_containing_function (blocks[i])
-				  : NULL);
-
-	    if (self->funfirstline)
-	      skip_prologue_sal (&intermediate_results.sals[i]);
-	    /* Make sure the line matches the request, not what was
-	       found.  */
-	    intermediate_results.sals[i].line = val.line;
-	    add_sal_to_sals (self, &values, &intermediate_results.sals[i],
-			     sym ? SYMBOL_NATURAL_NAME (sym) : NULL);
-	  }
-
-      do_cleanups (cleanup);
-    }
-
-  if (values.nelts == 0)
-    {
-      if (self->user_filename)
-	throw_error (NOT_FOUND_ERROR, _("No line %d in file \"%s\"."),
-		     val.line, self->user_filename);
-      else
-	throw_error (NOT_FOUND_ERROR, _("No line %d in the current file."),
-		     val.line);
-    }
+  VEC (symtab_p) *result;
+  
+  result = collect_symtabs_from_filename (filename);
 
-  if (self->canonical)
+  if (VEC_empty (symtab_p, result))
     {
-      char *copy = savestring (saved_arg, q - saved_arg);
-
-      self->canonical->pre_expanded = 1;
-      gdb_assert (self->user_filename || use_default);
-      self->canonical->addr_string
-	= xstrprintf ("%s:%s", (self->user_filename
-				? self->user_filename
-				: self->default_symtab->filename),
-		      copy);
-      xfree (copy);
+      if (!have_full_symbols () && !have_partial_symbols ())
+	throw_error (NOT_FOUND_ERROR,
+		     _("No symbol table is loaded.  "
+		       "Use the \"file\" command."));
+      throw_error (NOT_FOUND_ERROR, _("No source file named %s."), filename);
     }
 
-  return values;
+  return result;
 }
 
-

-
-/* Decode a linespec starting with a dollar sign.  */
+/* Look up a function symbol named NAME in symtabs FILE_SYMTABS.  Matching
+   debug symbols are returned in SYMBOLS.  Matching minimal symbols are
+   returned in MINSYMS.  */
 
-static struct symtabs_and_lines
-decode_dollar (struct linespec_state *self, char *copy)
+static void
+find_function_symbols (struct linespec_state *state,
+		       VEC (symtab_p) *file_symtabs, const char *name,
+		       VEC (symbolp) **symbols,
+		       VEC (minsym_and_objfile_d) **minsyms)
 {
-  LONGEST valx;
-  int index = 0;
-  struct symtabs_and_lines values;
-  struct symtab_and_line val;
-  char *p;
-  struct symbol *sym;
-  struct minimal_symbol *msymbol;
-  int ix;
-  struct symtab *elt;
+  struct collect_info info;
+  VEC (const_char_ptr) *symbol_names = NULL;
+  struct cleanup *cleanup = make_cleanup (VEC_cleanup (const_char_ptr),
+					  &symbol_names);
 
-  p = (copy[1] == '$') ? copy + 2 : copy + 1;
-  while (*p >= '0' && *p <= '9')
-    p++;
-  if (!*p)		/* Reached end of token without hitting non-digit.  */
-    {
-      /* We have a value history reference.  */
-      struct value *val_history;
+  info.state = state;
+  info.result.symbols = NULL;
+  info.result.minimal_symbols = NULL;
+  info.file_symtabs = file_symtabs;
 
-      sscanf ((copy[1] == '$') ? copy + 2 : copy + 1, "%d", &index);
-      val_history = access_value_history ((copy[1] == '$') ? -index : index);
-      if (TYPE_CODE (value_type (val_history)) != TYPE_CODE_INT)
-	error (_("History values used in line "
-		 "specs must have integer values."));
-      valx = value_as_long (val_history);
+  /* Try NAME as an Objective-C selector.  */
+  find_imps ((char *) name, &symbol_names);
+  if (!VEC_empty (const_char_ptr, symbol_names))
+    add_all_symbol_names_from_pspace (&info, NULL, symbol_names);
+  else
+    add_matching_symbols_to_info (name, &info, NULL);
+
+  do_cleanups (cleanup);
+
+  if (VEC_empty (symbolp, info.result.symbols))
+    {
+      VEC_free (symbolp, info.result.symbols);
+      *symbols = NULL;
     }
   else
+    *symbols = info.result.symbols;
+
+  if (VEC_empty (minsym_and_objfile_d, info.result.minimal_symbols))
     {
-      /* Not all digits -- may be user variable/function or a
-	 convenience variable.  */
+      VEC_free (minsym_and_objfile_d, info.result.minimal_symbols);
+      *minsyms = NULL;
+    }
+  else
+    *minsyms = info.result.minimal_symbols;
+}
 
-      volatile struct gdb_exception exc;
+/* Find all symbols named NAME in FILE_SYMTABS, returning debug symbols
+   in SYMBOLS and minimal symbols in MINSYMS.  */
 
-      /* Avoid "may be used uninitialized" warning.  */
-      values.sals = NULL;
-      values.nelts = 0;
+void
+find_linespec_symbols (struct linespec_state *state,
+		       VEC (symtab_p) *file_symtabs,
+		       const char *name,
+		       VEC (symbolp) **symbols,
+		       VEC (minsym_and_objfile_d) **minsyms)
+{
+  char *klass, *method, *canon;
+  const char *lookup_name, *last, *p, *scope_op;
+  struct cleanup *cleanup;
+  VEC (symbolp) *classes;
+  volatile struct gdb_exception except;
 
-      TRY_CATCH (exc, RETURN_MASK_ERROR)
-	{
-	  values = decode_variable (self, copy);
-	}
+  cleanup = demangle_for_lookup (name, state->language->la_language,
+				 &lookup_name);
+  if (state->language->la_language == language_ada)
+    {
+      /* In Ada, the symbol lookups are performed using the encoded
+         name rather than the demangled name.  */
+      lookup_name = ada_name_for_lookup (name);
+      make_cleanup (xfree, (void *) lookup_name);
+    }
 
-      if (exc.reason == 0)
-	return values;
+  canon = cp_canonicalize_string_no_typedefs (lookup_name);
+  if (canon != NULL)
+    {
+      lookup_name = canon;
+      cleanup = make_cleanup (xfree, canon);
+    }
 
-      if (exc.error != NOT_FOUND_ERROR)
-	throw_exception (exc);
+  /* See if we can find a scope operator and break this symbol
+     name into namespaces${SCOPE_OPERATOR}class_name and method_name.  */
+  scope_op = "::";
+  p = find_toplevel_string (lookup_name, scope_op);
+  if (p == NULL)
+    {
+      /* No C++ scope operator.  Try Java.  */
+      scope_op = ".";
+      p = find_toplevel_string (lookup_name, scope_op);
+    }
 
-      /* Not a user variable or function -- must be convenience variable.  */
-      if (!get_internalvar_integer (lookup_internalvar (copy + 1), &valx))
-	error (_("Convenience variables used in line "
-		 "specs must have integer values."));
+  last = NULL;
+  while (p != NULL)
+    {
+      last = p;
+      p = find_toplevel_string (p + strlen (scope_op), scope_op);
     }
 
-  init_sal (&val);
+  /* If no scope operator was found, lookup the name as a symbol.  */
+  if (last == NULL)
+    {
+      find_function_symbols (state, file_symtabs, lookup_name,
+			     symbols, minsyms);
+      do_cleanups (cleanup);
+      return;
+    }
 
-  values.sals = NULL;
-  values.nelts = 0;
+  /* NAME points to the class name.
+     LAST points to the method name.  */
+  klass = xmalloc ((last - lookup_name + 1) * sizeof (char));
+  make_cleanup (xfree, klass);
+  strncpy (klass, lookup_name, last - lookup_name);
+  klass[last - lookup_name] = '\0';
+
+  /* Skip past the scope operator.  */
+  last += strlen (scope_op);
+  method = xmalloc ((strlen (last) + 1) * sizeof (char));
+  make_cleanup (xfree, method);
+  strcpy (method, last);
 
-  for (ix = 0; VEC_iterate (symtab_p, self->file_symtabs, ix, elt); ++ix)
+  /* Find a list of classes named KLASS.  */
+  classes = lookup_prefix_sym (state, file_symtabs, klass);
+  make_cleanup (VEC_cleanup (symbolp), &classes);
+  if (!VEC_empty (symbolp, classes))
     {
-      if (elt == NULL)
+      /* Now locate a list of suitable methods named METHOD.  */
+      TRY_CATCH (except, RETURN_MASK_ERROR)
 	{
-	  elt = self->default_symtab;
-	  set_current_program_space (self->program_space);
+	  find_method (state, file_symtabs, klass, method, classes,
+		       symbols, minsyms);
 	}
-      else
-	set_current_program_space (SYMTAB_PSPACE (elt));
-
-      /* Either history value or convenience value from above, in valx.  */
-      val.symtab = elt;
-      val.line = valx;
-      val.pc = 0;
-      val.pspace = elt ? SYMTAB_PSPACE (elt) : current_program_space;
 
-      add_sal_to_sals (self, &values, &val, NULL);
-    }
-
-  if (self->canonical)
-    {
-      self->canonical->pre_expanded = 1;
-      if (self->user_filename)
-	self->canonical->addr_string = xstrprintf ("%s:%s",
-						   self->user_filename, copy);
-      else
-	self->canonical->addr_string = xstrdup (copy);
+      /* If successful, we're done.  If NOT_FOUND_ERROR
+	 was not thrown, rethrow the exception that we did get.
+	 Otherwise, fall back to looking up the entire name as a symbol.
+	 This can happen with namespace::function.  */
+      if (except.reason >= 0)
+	{
+	  do_cleanups (cleanup);
+	  return;
+	}
+      else if (except.error != NOT_FOUND_ERROR)
+	throw_exception (except);
     }
 
-  return values;
+  /* We couldn't find a class, so we check the entire name as a symbol
+     instead.  */
+   find_function_symbols (state, file_symtabs, lookup_name, symbols, minsyms);
+   do_cleanups (cleanup);
 }
 
-

-
-/* A helper for decode_line_1 that tries to find a label.  The label
-   is searched for in the current block.
-   FUNCTION_SYMBOLS is a list of the enclosing functions; or NULL if none
-   specified.
-   COPY is the name of the label to find.
-   CANONICAL is the same as the "canonical" argument to decode_line_1.
-   RESULT is a pointer to a symtabs_and_lines structure which will be
-   filled in on success.
-   This function returns 1 if a label was found, 0 otherwise.  */
+/* Return all labels named NAME in FUNCTION_SYMBOLS.  Return the
+   actual function symbol in which the label was found in LABEL_FUNC_RET.  */
 
-static int
-decode_label (struct linespec_state *self,
-	      VEC (symbolp) *function_symbols, char *copy,
-	      struct symtabs_and_lines *result)
+static VEC (symbolp) *
+find_label_symbols (struct linespec_state *self,
+		    VEC (symbolp) *function_symbols,
+		    VEC (symbolp) **label_funcs_ret, const char *name)
 {
-  struct symbol *fn_sym;
   int ix;
+  struct block *block;
+  struct symbol *sym;
+  struct symbol *fn_sym;
+  VEC (symbolp) *result = NULL;
 
   if (function_symbols == NULL)
     {
-      struct block *block;
-      struct symbol *sym;
-      struct symtab_and_line sal;
-      struct symtabs_and_lines values;
-
-      values.nelts = 0;
-      values.sals = NULL;
-
       set_current_program_space (self->program_space);
       block = get_search_block (NULL);
 
@@ -2585,69 +3060,171 @@ decode_label (struct linespec_state *self,
 	   block = BLOCK_SUPERBLOCK (block))
 	;
       if (!block)
-	return 0;
+	return NULL;
       fn_sym = BLOCK_FUNCTION (block);
 
-      sym = lookup_symbol (copy, block, LABEL_DOMAIN, 0);
+      sym = lookup_symbol (name, block, LABEL_DOMAIN, 0);
 
-      if (sym == NULL)
-	return 0;
-
-      symbol_to_sal (&sal, self->funfirstline, sym);
-      add_sal_to_sals (self, &values, &sal,
-		       SYMBOL_NATURAL_NAME (fn_sym));
-
-      if (self->canonical)
+      if (sym != NULL)
 	{
-	  self->canonical->special_display = 1;
-	  self->canonical->addr_string
-	    = xstrprintf ("%s:%s", SYMBOL_NATURAL_NAME (fn_sym),
-			  copy);
+	  VEC_safe_push (symbolp, result, sym);
+	  VEC_safe_push (symbolp, *label_funcs_ret, fn_sym);
+	}
+    }
+  else
+    {
+      for (ix = 0;
+	   VEC_iterate (symbolp, function_symbols, ix, fn_sym); ++ix)
+	{
+	  set_current_program_space (SYMTAB_PSPACE (SYMBOL_SYMTAB (fn_sym)));
+	  block = SYMBOL_BLOCK_VALUE (fn_sym);
+	  sym = lookup_symbol (name, block, LABEL_DOMAIN, 0);
+
+	  if (sym != NULL)
+	    {
+	      VEC_safe_push (symbolp, result, sym);
+	      VEC_safe_push (symbolp, *label_funcs_ret, fn_sym);
+	    }
 	}
+    }
 
-      *result = values;
+  return result;
+}
 
-      return 1;
+

+
+/* A helper for create_sals_line_offset that handles the 'list_mode' case.  */
+
+static void
+decode_digits_list_mode (struct linespec_state *self,
+			 linespec_p ls,
+			 struct symtabs_and_lines *values,
+			 struct symtab_and_line val)
+{
+  int ix;
+  struct symtab *elt;
+
+  gdb_assert (self->list_mode);
+
+  for (ix = 0; VEC_iterate (symtab_p, ls->file_symtabs, ix, elt);
+       ++ix)
+    {
+      /* The logic above should ensure this.  */
+      gdb_assert (elt != NULL);
+
+      set_current_program_space (SYMTAB_PSPACE (elt));
+
+      /* Simplistic search just for the list command.  */
+      val.symtab = find_line_symtab (elt, val.line, NULL, NULL);
+      if (val.symtab == NULL)
+	val.symtab = elt;
+      val.pspace = SYMTAB_PSPACE (elt);
+      val.pc = 0;
+      val.explicit_line = 1;
+
+      add_sal_to_sals (self, values, &val, NULL);
     }
+}
+
+/* A helper for create_sals_line_offset that iterates over the symtabs,
+   adding lines to the VEC.  */
 
-  result->sals = NULL;
-  result->nelts = 0;
+static void
+decode_digits_ordinary (struct linespec_state *self,
+			linespec_p ls,
+			int line,
+			struct symtabs_and_lines *sals,
+			struct linetable_entry **best_entry)
+{
+  int ix;
+  struct symtab *elt;
 
-  for (ix = 0; VEC_iterate (symbolp, function_symbols, ix, fn_sym); ++ix)
+  for (ix = 0; VEC_iterate (symtab_p, ls->file_symtabs, ix, elt); ++ix)
     {
-      struct block *block;
-      struct symbol *sym;
+      int i;
+      VEC (CORE_ADDR) *pcs;
+      CORE_ADDR pc;
+
+      /* The logic above should ensure this.  */
+      gdb_assert (elt != NULL);
 
-      set_current_program_space (SYMTAB_PSPACE (SYMBOL_SYMTAB (fn_sym)));
-      block = SYMBOL_BLOCK_VALUE (fn_sym);
-      sym = lookup_symbol (copy, block, LABEL_DOMAIN, 0);
+      set_current_program_space (SYMTAB_PSPACE (elt));
 
-      if (sym != NULL)
+      pcs = find_pcs_for_symtab_line (elt, line, best_entry);
+      for (i = 0; VEC_iterate (CORE_ADDR, pcs, i, pc); ++i)
 	{
 	  struct symtab_and_line sal;
-	  char *symname;
-
-	  symbol_to_sal (&sal, self->funfirstline, sym);
-	  symname = xstrprintf ("%s:%s",
-				SYMBOL_NATURAL_NAME (fn_sym),
-				SYMBOL_NATURAL_NAME (sym));
-	  add_sal_to_sals (self, result, &sal, symname);
-	  xfree (symname);
+
+	  init_sal (&sal);
+	  sal.pspace = SYMTAB_PSPACE (elt);
+	  sal.symtab = elt;
+	  sal.line = line;
+	  sal.pc = pc;
+	  add_sal_to_sals_basic (sals, &sal);
 	}
+
+      VEC_free (CORE_ADDR, pcs);
     }
+}
 
-  if (self->canonical && result->nelts > 0)
+

+
+/* Return the line offset represented by VARIABLE.  */
+
+static struct line_offset
+linespec_parse_variable (struct linespec_state *self, const char *variable)
+{
+  int index = 0;
+  const char *p;
+  struct line_offset offset = {0, LINE_OFFSET_NONE};
+
+  p = (variable[1] == '$') ? variable + 2 : variable + 1;
+  if (*p == '$')
+    ++p;
+  while (*p >= '0' && *p <= '9')
+    ++p;
+  if (!*p)		/* Reached end of token without hitting non-digit.  */
     {
-      self->canonical->pre_expanded = 1;
-      self->canonical->special_display = 1;
+      /* We have a value history reference.  */
+      struct value *val_history;
 
-      gdb_assert (self->user_function);
-      self->canonical->addr_string
-	= xstrprintf ("%s:%s", self->user_function, copy);
+      sscanf ((variable[1] == '$') ? variable + 2 : variable + 1, "%d", &index);
+      val_history
+	= access_value_history ((variable[1] == '$') ? -index : index);
+      if (TYPE_CODE (value_type (val_history)) != TYPE_CODE_INT)
+	error (_("History values used in line "
+		 "specs must have integer values."));
+      offset.offset = value_as_long (val_history);
+    }
+  else
+    {
+      /* Not all digits -- may be user variable/function or a
+	 convenience variable.  */
+      LONGEST valx;
+      struct internalvar *ivar;
+
+      /* Try it as a convenience variable.  If it is not a convenience
+	 variable, return and allow normal symbol lookup to occur.  */
+      ivar = lookup_only_internalvar (variable + 1);
+      if (ivar == NULL)
+	/* No internal variable with that name.  Mark the offset
+	   as unknown to allow the name to be looked up as a symbol.  */
+	offset.sign = LINE_OFFSET_UNKNOWN;
+      else
+	{
+	  /* We found a valid variable name.  If it is not an integer,
+	     throw an error.  */
+	  if (!get_internalvar_integer (ivar, &valx))
+	    error (_("Convenience variables used in line "
+		     "specs must have integer values."));
+	  else
+	    offset.offset = valx;
+	}
     }
 
-  return result->nelts > 0;
+  return offset;
 }
+

 
 /* A callback used to possibly add a symbol to the results.  */
 
@@ -2655,20 +3232,16 @@ static int
 collect_symbols (struct symbol *sym, void *data)
 {
   struct collect_info *info = data;
-  struct symtab_and_line sal;
 
-  if (symbol_to_sal (&sal, info->state->funfirstline, sym)
-      && maybe_add_address (info->state->addr_set,
-			    SYMTAB_PSPACE (SYMBOL_SYMTAB (sym)),
-			    sal.pc))
-    add_sal_to_sals (info->state, &info->result, &sal,
-		     SYMBOL_NATURAL_NAME (sym));
-
-  return 1;
+  /* In list mode, add all matching symbols, regardless of class.
+     This allows the user to type "list a_global_variable".  */
+  if (SYMBOL_CLASS (sym) == LOC_BLOCK || info->state->list_mode)
+    VEC_safe_push (symbolp, info->result.symbols, sym);
+  return 1; /* Continue iterating.  */
 }
 
-/* We've found a minimal symbol MSYMBOL to associate with our
-   linespec; add it to the result symtabs_and_lines.  */
+/* We've found a minimal symbol MSYMBOL in OBJFILE to associate with our
+   linespec; return the SAL in RESULT.  */
 
 static void
 minsym_found (struct linespec_state *self, struct objfile *objfile,
@@ -2696,17 +3269,6 @@ minsym_found (struct linespec_state *self, struct objfile *objfile,
     add_sal_to_sals (self, result, &sal, SYMBOL_NATURAL_NAME (msymbol));
 }
 
-/* A helper struct which just holds a minimal symbol and the object
-   file from which it came.  */
-
-typedef struct minsym_and_objfile
-{
-  struct minimal_symbol *minsym;
-  struct objfile *objfile;
-} minsym_and_objfile_d;
-
-DEF_VEC_O (minsym_and_objfile_d);
-
 /* A helper struct to pass some data through
    iterate_over_minimal_symbols.  */
 
@@ -2859,8 +3421,8 @@ search_minsyms_for_name (struct collect_info *info, const char *name,
 	    if (classify_mtype (MSYMBOL_TYPE (item->minsym)) != classification)
 	      break;
 
-	    minsym_found (info->state, item->objfile, item->minsym,
-			  &info->result);
+	    VEC_safe_push (minsym_and_objfile_d,
+			   info->result.minimal_symbols, item);
 	  }
       }
 
@@ -2880,15 +3442,13 @@ add_matching_symbols_to_info (const char *name,
   int ix;
   struct symtab *elt;
 
-  for (ix = 0; VEC_iterate (symtab_p, info->state->file_symtabs, ix, elt); ++ix)
+  for (ix = 0; VEC_iterate (symtab_p, info->file_symtabs, ix, elt); ++ix)
     {
-      struct symbol *sym;
-
       if (elt == NULL)
 	{
-	  iterate_over_all_matching_symtabs (name, VAR_DOMAIN,
+	  iterate_over_all_matching_symtabs (info->state, name, VAR_DOMAIN,
 					     collect_symbols, info,
-					     pspace);
+					     pspace, 1);
 	  search_minsyms_for_name (info, name, pspace);
 	}
       else if (pspace == NULL || pspace == SYMTAB_PSPACE (elt))
@@ -2904,67 +3464,6 @@ add_matching_symbols_to_info (const char *name,
     }
 }
 
-/* Decode a linespec that's a variable.  If FILE_SYMTAB is non-NULL,
-   look in that symtab's static variables first.  */ 
-
-static struct symtabs_and_lines
-decode_variable (struct linespec_state *self, char *copy)
-{
-  struct collect_info info;
-  const char *lookup_name;
-  char *canon;
-  struct cleanup *cleanup;
-
-  info.state = self;
-  info.result.sals = NULL;
-  info.result.nelts = 0;
-
-  cleanup = demangle_for_lookup (copy, current_language->la_language,
-				 &lookup_name);
-  if (current_language->la_language == language_ada)
-    {
-      /* In Ada, the symbol lookups are performed using the encoded
-         name rather than the demangled name.  */
-      lookup_name = ada_name_for_lookup (copy);
-      make_cleanup (xfree, (void *) lookup_name);
-    }
-
-  canon = cp_canonicalize_string_no_typedefs (lookup_name);
-  if (canon != NULL)
-    {
-      make_cleanup (xfree, canon);
-      lookup_name = canon;
-    }
-
-  add_matching_symbols_to_info (lookup_name, &info, NULL);
-
-  if (info.result.nelts > 0)
-    {
-      if (self->canonical)
-	{
-	  self->canonical->pre_expanded = 1;
-	  if (self->user_filename)
-	    self->canonical->addr_string
-	      = xstrprintf ("%s:%s", self->user_filename, copy);
-	  else
-	    self->canonical->addr_string = xstrdup (copy);
-	}
-      return info.result;
-    }
-
-  if (!have_full_symbols ()
-      && !have_partial_symbols ()
-      && !have_minimal_symbols ())
-    throw_error (NOT_FOUND_ERROR,
-		 _("No symbol table is loaded.  Use the \"file\" command."));
-  if (self->user_filename)
-    throw_error (NOT_FOUND_ERROR, _("Function \"%s\" not defined in \"%s\"."),
-		 copy, self->user_filename);
-  else
-    throw_error (NOT_FOUND_ERROR, _("Function \"%s\" not defined."), copy);
-}
-
-
 

 
 /* Now come some functions that are called from multiple places within
diff --git a/gdb/linespec.h b/gdb/linespec.h
index ed8174f..0310bb4 100644
--- a/gdb/linespec.h
+++ b/gdb/linespec.h
@@ -93,6 +93,8 @@ extern void destroy_linespec_result (struct linespec_result *);
 extern struct cleanup *
         make_cleanup_destroy_linespec_result (struct linespec_result *);
 
+/* Decode a linespec using the provided default symtab and line.  */
+
 extern struct symtabs_and_lines
 	decode_line_1 (char **argptr, int flags,
 		       struct symtab *default_symtab, int default_line);
@@ -139,4 +141,15 @@ extern void decode_line_full (char **argptr, int flags,
 			      const char *select_mode,
 			      const char *filter);
 
+/* Given a string, return the line specified by it, using the current
+   source symtab and line as defaults.
+   This is for commands like "list" and "breakpoint".  */
+
+extern struct symtabs_and_lines decode_line_with_current_source (char *, int);
+
+/* Given a string, return the line specified by it, using the last displayed
+   codepoint's values as defaults, or nothing if they aren't valid.  */
+
+extern struct symtabs_and_lines decode_line_with_last_displayed (char *, int);
+
 #endif /* defined (LINESPEC_H) */
diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
index 373d1ca..d2a529a 100644
--- a/gdb/linux-nat.c
+++ b/gdb/linux-nat.c
@@ -36,6 +36,7 @@
 #include "gdbcmd.h"
 #include "regcache.h"
 #include "regset.h"
+#include "inf-child.h"
 #include "inf-ptrace.h"
 #include "auxv.h"
 #include <sys/param.h>		/* for MAXPATHLEN */
@@ -58,7 +59,13 @@
 #include <sys/vfs.h>
 #include "solib.h"
 #include "linux-osdata.h"
-#include "cli/cli-utils.h"
+#include "linux-tdep.h"
+#include "symfile.h"
+#include "agent.h"
+#include "tracepoint.h"
+#include "exceptions.h"
+#include "linux-ptrace.h"
+#include "buffer.h"
 
 #ifndef SPUFS_MAGIC
 #define SPUFS_MAGIC 0x23c9b64e
@@ -174,12 +181,15 @@ static struct target_ops *linux_ops;
 static struct target_ops linux_ops_saved;
 
 /* The method to call, if any, when a new thread is attached.  */
-static void (*linux_nat_new_thread) (ptid_t);
+static void (*linux_nat_new_thread) (struct lwp_info *);
+
+/* Hook to call prior to resuming a thread.  */
+static void (*linux_nat_prepare_to_resume) (struct lwp_info *);
 
 /* The method to call, if any, when the siginfo object needs to be
    converted between the layout returned by ptrace, and the layout in
    the architecture of the inferior.  */
-static int (*linux_nat_siginfo_fixup) (struct siginfo *,
+static int (*linux_nat_siginfo_fixup) (siginfo_t *,
 				       gdb_byte *,
 				       int);
 
@@ -285,6 +295,7 @@ static void restore_child_signals_mask (sigset_t *prev_mask);
 struct lwp_info;
 static struct lwp_info *add_lwp (ptid_t ptid);
 static void purge_lwp_list (int pid);
+static void delete_lwp (ptid_t ptid);
 static struct lwp_info *find_lwp_pid (ptid_t ptid);
 
 

@@ -572,6 +583,7 @@ linux_child_post_attach (int pid)
 {
   linux_enable_event_reporting (pid_to_ptid (pid));
   linux_enable_tracesysgood (pid_to_ptid (pid));
+  linux_ptrace_init_warnings ();
 }
 
 static void
@@ -579,6 +591,32 @@ linux_child_post_startup_inferior (ptid_t ptid)
 {
   linux_enable_event_reporting (ptid);
   linux_enable_tracesysgood (ptid);
+  linux_ptrace_init_warnings ();
+}
+
+/* Return the number of known LWPs in the tgid given by PID.  */
+
+static int
+num_lwps (int pid)
+{
+  int count = 0;
+  struct lwp_info *lp;
+
+  for (lp = lwp_list; lp; lp = lp->next)
+    if (ptid_get_pid (lp->ptid) == pid)
+      count++;
+
+  return count;
+}
+
+/* Call delete_lwp with prototype compatible for make_cleanup.  */
+
+static void
+delete_lwp_cleanup (void *lp_voidp)
+{
+  struct lwp_info *lp = lp_voidp;
+
+  delete_lwp (lp->ptid);
 }
 
 static int
@@ -627,6 +665,8 @@ holding the child stopped.  Try \"set detach-on-fork\" or \
       /* Detach new forked process?  */
       if (detach_fork)
 	{
+	  struct cleanup *old_chain;
+
 	  /* Before detaching from the child, remove all breakpoints
 	     from it.  If we forked, then this has already been taken
 	     care of by infrun.c.  If we vforked however, any
@@ -649,7 +689,28 @@ holding the child stopped.  Try \"set detach-on-fork\" or \
 				child_pid);
 	    }
 
+	  old_chain = save_inferior_ptid ();
+	  inferior_ptid = ptid_build (child_pid, child_pid, 0);
+
+	  child_lp = add_lwp (inferior_ptid);
+	  child_lp->stopped = 1;
+	  child_lp->last_resume_kind = resume_stop;
+	  make_cleanup (delete_lwp_cleanup, child_lp);
+
+	  /* CHILD_LP has new PID, therefore linux_nat_new_thread is not called for it.
+	     See i386_inferior_data_get for the Linux kernel specifics.
+	     Ensure linux_nat_prepare_to_resume will reset the hardware debug
+	     registers.  It is done by the linux_nat_new_thread call, which is
+	     being skipped in add_lwp above for the first lwp of a pid.  */
+	  gdb_assert (num_lwps (GET_PID (child_lp->ptid)) == 1);
+	  if (linux_nat_new_thread != NULL)
+	    linux_nat_new_thread (child_lp);
+
+	  if (linux_nat_prepare_to_resume != NULL)
+	    linux_nat_prepare_to_resume (child_lp);
 	  ptrace (PTRACE_DETACH, child_pid, 0, 0);
+
+	  do_cleanups (old_chain);
 	}
       else
 	{
@@ -671,6 +732,7 @@ holding the child stopped.  Try \"set detach-on-fork\" or \
 	  child_lp = add_lwp (inferior_ptid);
 	  child_lp->stopped = 1;
 	  child_lp->last_resume_kind = resume_stop;
+	  child_inf->symfile_flags = SYMFILE_NO_READ;
 
 	  /* If this is a vfork child, then the address-space is
 	     shared with the parent.  */
@@ -876,6 +938,7 @@ holding the child stopped.  Try \"set detach-on-fork\" or \
 	  child_inf->aspace = new_address_space ();
 	  child_inf->pspace = add_program_space (child_inf->aspace);
 	  child_inf->removable = 1;
+	  child_inf->symfile_flags = SYMFILE_NO_READ;
 	  set_current_program_space (child_inf->pspace);
 	  clone_program_space (child_inf->pspace, parent_pspace);
 
@@ -1032,7 +1095,7 @@ linux_nat_pass_signals (int numsigs, unsigned char *pass_signals)
 
   for (signo = 1; signo < NSIG; signo++)
     {
-      int target_signo = target_signal_from_host (signo);
+      int target_signo = gdb_signal_from_host (signo);
       if (target_signo < numsigs && pass_signals[target_signo])
         sigaddset (&pass_mask, signo);
     }
@@ -1072,6 +1135,15 @@ status_to_str (int status)
   return buf;
 }
 
+/* Destroy and free LP.  */
+
+static void
+lwp_free (struct lwp_info *lp)
+{
+  xfree (lp->arch_private);
+  xfree (lp);
+}
+
 /* Remove all LWPs belong to PID from the lwp list.  */
 
 static void
@@ -1092,28 +1164,13 @@ purge_lwp_list (int pid)
 	  else
 	    lpprev->next = lp->next;
 
-	  xfree (lp);
+	  lwp_free (lp);
 	}
       else
 	lpprev = lp;
     }
 }
 
-/* Return the number of known LWPs in the tgid given by PID.  */
-
-static int
-num_lwps (int pid)
-{
-  int count = 0;
-  struct lwp_info *lp;
-
-  for (lp = lwp_list; lp; lp = lp->next)
-    if (ptid_get_pid (lp->ptid) == pid)
-      count++;
-
-  return count;
-}
-
 /* Add the LWP specified by PID to the list.  Return a pointer to the
    structure describing the new LWP.  The LWP should already be stopped
    (with an exception for the very first LWP).  */
@@ -1138,8 +1195,16 @@ add_lwp (ptid_t ptid)
   lp->next = lwp_list;
   lwp_list = lp;
 
+  /* Let the arch specific bits know about this new thread.  Current
+     clients of this callback take the opportunity to install
+     watchpoints in the new thread.  Don't do this for the first
+     thread though.  If we're spawning a child ("run"), the thread
+     executes the shell wrapper first, and we shouldn't touch it until
+     it execs the program we want to debug.  For "attach", it'd be
+     okay to call the callback, but it's not necessary, because
+     watchpoints can't yet have been inserted into the inferior.  */
   if (num_lwps (GET_PID (ptid)) > 1 && linux_nat_new_thread != NULL)
-    linux_nat_new_thread (ptid);
+    linux_nat_new_thread (lp);
 
   return lp;
 }
@@ -1165,7 +1230,7 @@ delete_lwp (ptid_t ptid)
   else
     lwp_list = lp->next;
 
-  xfree (lp);
+  lwp_free (lp);
 }
 
 /* Return a pointer to the structure describing the LWP corresponding
@@ -1215,6 +1280,46 @@ iterate_over_lwps (ptid_t filter,
   return NULL;
 }
 
+/* Iterate like iterate_over_lwps does except when forking-off a child call
+   CALLBACK with CALLBACK_DATA specifically only for that new child PID.  */
+
+void
+linux_nat_iterate_watchpoint_lwps
+  (linux_nat_iterate_watchpoint_lwps_ftype callback, void *callback_data)
+{
+  int inferior_pid = ptid_get_pid (inferior_ptid);
+  struct inferior *inf = current_inferior ();
+
+  if (inf->pid == inferior_pid)
+    {
+      /* Iterate all the threads of the current inferior.  Without specifying
+	 INFERIOR_PID it would iterate all threads of all inferiors, which is
+	 inappropriate for watchpoints.  */
+
+      iterate_over_lwps (pid_to_ptid (inferior_pid), callback, callback_data);
+    }
+  else
+    {
+      /* Detaching a new child PID temporarily present in INFERIOR_PID.  */
+
+      struct lwp_info *child_lp;
+      struct cleanup *old_chain;
+      pid_t child_pid = GET_PID (inferior_ptid);
+      ptid_t child_ptid = ptid_build (child_pid, child_pid, 0);
+
+      gdb_assert (!is_lwp (inferior_ptid));
+      gdb_assert (find_lwp_pid (child_ptid) == NULL);
+      child_lp = add_lwp (child_ptid);
+      child_lp->stopped = 1;
+      child_lp->last_resume_kind = resume_stop;
+      old_chain = make_cleanup (delete_lwp_cleanup, child_lp);
+
+      callback (child_lp, callback_data);
+
+      do_cleanups (old_chain);
+    }
+}
+
 /* Update our internal state when changing from one checkpoint to
    another indicated by NEW_PTID.  We can only switch single-threaded
    applications, so we only create one new LWP, and the previous list
@@ -1259,37 +1364,6 @@ exit_lwp (struct lwp_info *lp)
   delete_lwp (lp->ptid);
 }
 
-/* Detect `T (stopped)' in `/proc/PID/status'.
-   Other states including `T (tracing stop)' are reported as false.  */
-
-static int
-pid_is_stopped (pid_t pid)
-{
-  FILE *status_file;
-  char buf[100];
-  int retval = 0;
-
-  snprintf (buf, sizeof (buf), "/proc/%d/status", (int) pid);
-  status_file = fopen (buf, "r");
-  if (status_file != NULL)
-    {
-      int have_state = 0;
-
-      while (fgets (buf, sizeof (buf), status_file))
-	{
-	  if (strncmp (buf, "State:", 6) == 0)
-	    {
-	      have_state = 1;
-	      break;
-	    }
-	}
-      if (have_state && strstr (buf, "T (stopped)") != NULL)
-	retval = 1;
-      fclose (status_file);
-    }
-  return retval;
-}
-
 /* Wait for the LWP specified by LP, which we have just attached to.
    Returns a wait status for that LWP, to cache.  */
 
@@ -1300,7 +1374,7 @@ linux_nat_post_attach_wait (ptid_t ptid, int first, int *cloned,
   pid_t new_pid, pid = GET_LWP (ptid);
   int status;
 
-  if (pid_is_stopped (pid))
+  if (linux_proc_pid_is_stopped (pid))
     {
       if (debug_linux_nat)
 	fprintf_unfiltered (gdb_stdlog,
@@ -1544,11 +1618,33 @@ linux_nat_attach (struct target_ops *ops, char *args, int from_tty)
   struct lwp_info *lp;
   int status;
   ptid_t ptid;
+  volatile struct gdb_exception ex;
 
   /* Make sure we report all signals during attach.  */
   linux_nat_pass_signals (0, NULL);
 
-  linux_ops->to_attach (ops, args, from_tty);
+  TRY_CATCH (ex, RETURN_MASK_ERROR)
+    {
+      linux_ops->to_attach (ops, args, from_tty);
+    }
+  if (ex.reason < 0)
+    {
+      pid_t pid = parse_pid_to_attach (args);
+      struct buffer buffer;
+      char *message, *buffer_s;
+
+      message = xstrdup (ex.message);
+      make_cleanup (xfree, message);
+
+      buffer_init (&buffer);
+      linux_ptrace_attach_warnings (pid, &buffer);
+
+      buffer_grow_str0 (&buffer, "");
+      buffer_s = buffer_finish (&buffer);
+      make_cleanup (xfree, buffer_s);
+
+      throw_error (ex.error, "%s%s", buffer_s, message);
+    }
 
   /* The ptrace base target adds the main thread with (pid,0,0)
      format.  Decorate it with lwp info.  */
@@ -1576,16 +1672,16 @@ linux_nat_attach (struct target_ops *ops, char *args, int from_tty)
 	}
       else if (WIFSIGNALED (status))
 	{
-	  enum target_signal signo;
+	  enum gdb_signal signo;
 
 	  target_terminal_ours ();
 	  target_mourn_inferior ();
 
-	  signo = target_signal_from_host (WTERMSIG (status));
+	  signo = gdb_signal_from_host (WTERMSIG (status));
 	  error (_("Unable to attach: program terminated with signal "
 		   "%s, %s."),
-		 target_signal_to_name (signo),
-		 target_signal_to_string (signo));
+		 gdb_signal_to_name (signo),
+		 gdb_signal_to_string (signo));
 	}
 
       internal_error (__FILE__, __LINE__,
@@ -1612,7 +1708,7 @@ linux_nat_attach (struct target_ops *ops, char *args, int from_tty)
 static int
 get_pending_status (struct lwp_info *lp, int *status)
 {
-  enum target_signal signo = TARGET_SIGNAL_0;
+  enum gdb_signal signo = GDB_SIGNAL_0;
 
   /* If we paused threads momentarily, we may have stored pending
      events in lp->status or lp->waitstatus (see stop_wait_callback),
@@ -1625,7 +1721,7 @@ get_pending_status (struct lwp_info *lp, int *status)
      stop_signal make sense as a real signal to pass to the inferior.
      Some catchpoint related events, like
      TARGET_WAITKIND_(V)FORK|EXEC|SYSCALL, have their stop_signal set
-     to TARGET_SIGNAL_SIGTRAP when the catchpoint triggers.  But,
+     to GDB_SIGNAL_SIGTRAP when the catchpoint triggers.  But,
      those traps are debug API (ptrace in our case) related and
      induced; the inferior wouldn't see them if it wasn't being
      traced.  Hence, we should never pass them to the inferior, even
@@ -1636,9 +1732,9 @@ get_pending_status (struct lwp_info *lp, int *status)
      this is really a corner case.  */
 
   if (lp->waitstatus.kind != TARGET_WAITKIND_IGNORE)
-    signo = TARGET_SIGNAL_0; /* a pending ptrace event, not a real signal.  */
+    signo = GDB_SIGNAL_0; /* a pending ptrace event, not a real signal.  */
   else if (lp->status)
-    signo = target_signal_from_host (WSTOPSIG (lp->status));
+    signo = gdb_signal_from_host (WSTOPSIG (lp->status));
   else if (non_stop && !is_executing (lp->ptid))
     {
       struct thread_info *tp = find_thread_ptid (lp->ptid);
@@ -1662,7 +1758,7 @@ get_pending_status (struct lwp_info *lp, int *status)
 
   *status = 0;
 
-  if (signo == TARGET_SIGNAL_0)
+  if (signo == GDB_SIGNAL_0)
     {
       if (debug_linux_nat)
 	fprintf_unfiltered (gdb_stdlog,
@@ -1676,17 +1772,17 @@ get_pending_status (struct lwp_info *lp, int *status)
 			    "GPT: lwp %s had signal %s, "
 			    "but it is in no pass state\n",
 			    target_pid_to_str (lp->ptid),
-			    target_signal_to_string (signo));
+			    gdb_signal_to_string (signo));
     }
   else
     {
-      *status = W_STOPCODE (target_signal_to_host (signo));
+      *status = W_STOPCODE (gdb_signal_to_host (signo));
 
       if (debug_linux_nat)
 	fprintf_unfiltered (gdb_stdlog,
 			    "GPT: lwp %s has pending signal %s\n",
 			    target_pid_to_str (lp->ptid),
-			    target_signal_to_string (signo));
+			    gdb_signal_to_string (signo));
     }
 
   return 0;
@@ -1723,6 +1819,8 @@ detach_callback (struct lwp_info *lp, void *data)
       /* Pass on any pending signal for this LWP.  */
       get_pending_status (lp, &status);
 
+      if (linux_nat_prepare_to_resume != NULL)
+	linux_nat_prepare_to_resume (lp);
       errno = 0;
       if (ptrace (PTRACE_DETACH, GET_LWP (lp->ptid), 0,
 		  WSTOPSIG (status)) < 0)
@@ -1750,8 +1848,8 @@ linux_nat_detach (struct target_ops *ops, char *args, int from_tty)
 
   pid = GET_PID (inferior_ptid);
 
-  if (target_can_async_p ())
-    linux_nat_async (NULL, 0);
+  /* Don't unregister from the event loop, as there may be other
+     inferiors running. */
 
   /* Stop all threads before detaching.  ptrace requires that the
      thread is stopped to sucessfully detach.  */
@@ -1783,6 +1881,8 @@ linux_nat_detach (struct target_ops *ops, char *args, int from_tty)
 			    target_pid_to_str (main_lwp->ptid));
     }
 
+  if (linux_nat_prepare_to_resume != NULL)
+    linux_nat_prepare_to_resume (main_lwp);
   delete_lwp (main_lwp->ptid);
 
   if (forks_exist_p ())
@@ -1792,9 +1892,6 @@ linux_nat_detach (struct target_ops *ops, char *args, int from_tty)
 	 the current fork, and context-switch to the first
 	 available.  */
       linux_fork_detach (args, from_tty);
-
-      if (non_stop && target_can_async_p ())
- 	target_async (inferior_event_handler, 0);
     }
   else
     linux_ops->to_detach (ops, args, from_tty);
@@ -1803,7 +1900,7 @@ linux_nat_detach (struct target_ops *ops, char *args, int from_tty)
 /* Resume LP.  */
 
 static void
-resume_lwp (struct lwp_info *lp, int step)
+resume_lwp (struct lwp_info *lp, int step, enum gdb_signal signo)
 {
   if (lp->stopped)
     {
@@ -1821,15 +1918,20 @@ resume_lwp (struct lwp_info *lp, int step)
 	{
 	  if (debug_linux_nat)
 	    fprintf_unfiltered (gdb_stdlog,
-				"RC:  PTRACE_CONT %s, 0, 0 (resuming sibling)\n",
-				target_pid_to_str (lp->ptid));
+				"RC: Resuming sibling %s, %s, %s\n",
+				target_pid_to_str (lp->ptid),
+				(signo != GDB_SIGNAL_0
+				 ? strsignal (gdb_signal_to_host (signo))
+				 : "0"),
+				step ? "step" : "resume");
 
+	  if (linux_nat_prepare_to_resume != NULL)
+	    linux_nat_prepare_to_resume (lp);
 	  linux_ops->to_resume (linux_ops,
 				pid_to_ptid (GET_LWP (lp->ptid)),
-				step, TARGET_SIGNAL_0);
+				step, signo);
 	  lp->stopped = 0;
 	  lp->step = step;
-	  memset (&lp->siginfo, 0, sizeof (lp->siginfo));
 	  lp->stopped_by_watchpoint = 0;
 	}
       else
@@ -1849,10 +1951,27 @@ resume_lwp (struct lwp_info *lp, int step)
     }
 }
 
+/* Resume LWP, with the last stop signal, if it is in pass state.  */
+
 static int
-resume_callback (struct lwp_info *lp, void *data)
+linux_nat_resume_callback (struct lwp_info *lp, void *data)
 {
-  resume_lwp (lp, 0);
+  enum gdb_signal signo = GDB_SIGNAL_0;
+
+  if (lp->stopped)
+    {
+      struct thread_info *thread;
+
+      thread = find_thread_ptid (lp->ptid);
+      if (thread != NULL)
+	{
+	  if (signal_pass_state (thread->suspend.stop_signal))
+	    signo = thread->suspend.stop_signal;
+	  thread->suspend.stop_signal = GDB_SIGNAL_0;
+	}
+    }
+
+  resume_lwp (lp, 0, signo);
   return 0;
 }
 
@@ -1874,7 +1993,7 @@ resume_set_callback (struct lwp_info *lp, void *data)
 
 static void
 linux_nat_resume (struct target_ops *ops,
-		  ptid_t ptid, int step, enum target_signal signo)
+		  ptid_t ptid, int step, enum gdb_signal signo)
 {
   sigset_t prev_mask;
   struct lwp_info *lp;
@@ -1885,8 +2004,8 @@ linux_nat_resume (struct target_ops *ops,
 			"LLR: Preparing to %s %s, %s, inferior_ptid %s\n",
 			step ? "step" : "resume",
 			target_pid_to_str (ptid),
-			(signo != TARGET_SIGNAL_0
-			 ? strsignal (target_signal_to_host (signo)) : "0"),
+			(signo != GDB_SIGNAL_0
+			 ? strsignal (gdb_signal_to_host (signo)) : "0"),
 			target_pid_to_str (inferior_ptid));
 
   block_child_signals (&prev_mask);
@@ -1931,8 +2050,8 @@ linux_nat_resume (struct target_ops *ops,
 
 	  /* FIXME: What should we do if we are supposed to continue
 	     this thread with a signal?  */
-	  gdb_assert (signo == TARGET_SIGNAL_0);
-	  signo = target_signal_from_host (WSTOPSIG (lp->status));
+	  gdb_assert (signo == GDB_SIGNAL_0);
+	  signo = gdb_signal_from_host (WSTOPSIG (lp->status));
 	  lp->status = 0;
 	}
     }
@@ -1941,7 +2060,7 @@ linux_nat_resume (struct target_ops *ops,
     {
       /* FIXME: What should we do if we are supposed to continue
 	 this thread with a signal?  */
-      gdb_assert (signo == TARGET_SIGNAL_0);
+      gdb_assert (signo == GDB_SIGNAL_0);
 
       if (debug_linux_nat)
 	fprintf_unfiltered (gdb_stdlog,
@@ -1959,17 +2078,18 @@ linux_nat_resume (struct target_ops *ops,
     }
 
   /* Mark LWP as not stopped to prevent it from being continued by
-     resume_callback.  */
+     linux_nat_resume_callback.  */
   lp->stopped = 0;
 
   if (resume_many)
-    iterate_over_lwps (ptid, resume_callback, NULL);
+    iterate_over_lwps (ptid, linux_nat_resume_callback, NULL);
 
   /* Convert to something the lower layer understands.  */
   ptid = pid_to_ptid (GET_LWP (lp->ptid));
 
+  if (linux_nat_prepare_to_resume != NULL)
+    linux_nat_prepare_to_resume (lp);
   linux_ops->to_resume (linux_ops, ptid, step, signo);
-  memset (&lp->siginfo, 0, sizeof (lp->siginfo));
   lp->stopped_by_watchpoint = 0;
 
   if (debug_linux_nat)
@@ -1977,8 +2097,8 @@ linux_nat_resume (struct target_ops *ops,
 			"LLR: %s %s, %s (resume event thread)\n",
 			step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
 			target_pid_to_str (ptid),
-			(signo != TARGET_SIGNAL_0
-			 ? strsignal (target_signal_to_host (signo)) : "0"));
+			(signo != GDB_SIGNAL_0
+			 ? strsignal (gdb_signal_to_host (signo)) : "0"));
 
   restore_child_signals_mask (&prev_mask);
   if (target_can_async_p ())
@@ -2137,8 +2257,10 @@ linux_handle_syscall_trap (struct lwp_info *lp, int stopping)
   /* Note that gdbarch_get_syscall_number may access registers, hence
      fill a regcache.  */
   registers_changed ();
+  if (linux_nat_prepare_to_resume != NULL)
+    linux_nat_prepare_to_resume (lp);
   linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)),
-			lp->step, TARGET_SIGNAL_0);
+			lp->step, GDB_SIGNAL_0);
   return 1;
 }
 
@@ -2257,7 +2379,7 @@ linux_handle_extended_wait (struct lwp_info *lp, int status,
 		 RT signal, it can only be queued once.  We need to be
 		 careful to not resume the LWP if we wanted it to
 		 stop.  In that case, we'll leave the SIGSTOP pending.
-		 It will later be reported as TARGET_SIGNAL_0.  */
+		 It will later be reported as GDB_SIGNAL_0.  */
 	      tp = find_thread_ptid (new_lp->ptid);
 	      if (tp != NULL && tp->stop_requested)
 		new_lp->last_resume_kind = resume_stop;
@@ -2324,8 +2446,10 @@ linux_handle_extended_wait (struct lwp_info *lp, int status,
 		    fprintf_unfiltered (gdb_stdlog,
 					"LHEW: resuming new LWP %ld\n",
 					GET_LWP (new_lp->ptid));
+		  if (linux_nat_prepare_to_resume != NULL)
+		    linux_nat_prepare_to_resume (new_lp);
 		  linux_ops->to_resume (linux_ops, pid_to_ptid (new_pid),
-					0, TARGET_SIGNAL_0);
+					0, GDB_SIGNAL_0);
 		  new_lp->stopped = 0;
 		}
 	    }
@@ -2333,8 +2457,10 @@ linux_handle_extended_wait (struct lwp_info *lp, int status,
 	  if (debug_linux_nat)
 	    fprintf_unfiltered (gdb_stdlog,
 				"LHEW: resuming parent LWP %d\n", pid);
+	  if (linux_nat_prepare_to_resume != NULL)
+	    linux_nat_prepare_to_resume (lp);
 	  linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)),
-				0, TARGET_SIGNAL_0);
+				0, GDB_SIGNAL_0);
 
 	  return 1;
 	}
@@ -2383,37 +2509,6 @@ linux_handle_extended_wait (struct lwp_info *lp, int status,
 		  _("unknown ptrace event %d"), event);
 }
 
-/* Return non-zero if LWP is a zombie.  */
-
-static int
-linux_lwp_is_zombie (long lwp)
-{
-  char buffer[MAXPATHLEN];
-  FILE *procfile;
-  int retval;
-  int have_state;
-
-  xsnprintf (buffer, sizeof (buffer), "/proc/%ld/status", lwp);
-  procfile = fopen (buffer, "r");
-  if (procfile == NULL)
-    {
-      warning (_("unable to open /proc file '%s'"), buffer);
-      return 0;
-    }
-
-  have_state = 0;
-  while (fgets (buffer, sizeof (buffer), procfile) != NULL)
-    if (strncmp (buffer, "State:", 6) == 0)
-      {
-	have_state = 1;
-	break;
-      }
-  retval = (have_state
-	    && strcmp (buffer, "State:\tZ (zombie)\n") == 0);
-  fclose (procfile);
-  return retval;
-}
-
 /* Wait for LP to stop.  Returns the wait status, or 0 if the LWP has
    exited.  */
 
@@ -2467,10 +2562,10 @@ wait_lwp (struct lwp_info *lp)
 
 	 This is racy, what if the tgl becomes a zombie right after we check?
 	 Therefore always use WNOHANG with sigsuspend - it is equivalent to
-	 waiting waitpid but the linux_lwp_is_zombie is safe this way.  */
+	 waiting waitpid but linux_proc_pid_is_zombie is safe this way.  */
 
       if (GET_PID (lp->ptid) == GET_LWP (lp->ptid)
-	  && linux_lwp_is_zombie (GET_LWP (lp->ptid)))
+	  && linux_proc_pid_is_zombie (GET_LWP (lp->ptid)))
 	{
 	  thread_dead = 1;
 	  if (debug_linux_nat)
@@ -2548,22 +2643,6 @@ wait_lwp (struct lwp_info *lp)
   return status;
 }
 
-/* Save the most recent siginfo for LP.  This is currently only called
-   for SIGTRAP; some ports use the si_addr field for
-   target_stopped_data_address.  In the future, it may also be used to
-   restore the siginfo of requeued signals.  */
-
-static void
-save_siginfo (struct lwp_info *lp)
-{
-  errno = 0;
-  ptrace (PTRACE_GETSIGINFO, GET_LWP (lp->ptid),
-	  (PTRACE_TYPE_ARG3) 0, &lp->siginfo);
-
-  if (errno != 0)
-    memset (&lp->siginfo, 0, sizeof (lp->siginfo));
-}
-
 /* Send a SIGSTOP to LP.  */
 
 static int
@@ -2596,6 +2675,14 @@ stop_callback (struct lwp_info *lp, void *data)
   return 0;
 }
 
+/* Request a stop on LWP.  */
+
+void
+linux_stop_lwp (struct lwp_info *lwp)
+{
+  stop_callback (lwp, NULL);
+}
+
 /* Return non-zero if LWP PID has a pending SIGINT.  */
 
 static int
@@ -2796,110 +2883,36 @@ stop_wait_callback (struct lwp_info *lp, void *data)
 
       if (WSTOPSIG (status) != SIGSTOP)
 	{
-	  if (linux_nat_status_is_event (status))
-	    {
-	      /* If a LWP other than the LWP that we're reporting an
-	         event for has hit a GDB breakpoint (as opposed to
-	         some random trap signal), then just arrange for it to
-	         hit it again later.  We don't keep the SIGTRAP status
-	         and don't forward the SIGTRAP signal to the LWP.  We
-	         will handle the current event, eventually we will
-	         resume all LWPs, and this one will get its breakpoint
-	         trap again.
-
-	         If we do not do this, then we run the risk that the
-	         user will delete or disable the breakpoint, but the
-	         thread will have already tripped on it.  */
-
-	      /* Save the trap's siginfo in case we need it later.  */
-	      save_siginfo (lp);
-
-	      save_sigtrap (lp);
-
-	      /* Now resume this LWP and get the SIGSTOP event.  */
-	      errno = 0;
-	      ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
-	      if (debug_linux_nat)
-		{
-		  fprintf_unfiltered (gdb_stdlog,
-				      "PTRACE_CONT %s, 0, 0 (%s)\n",
-				      target_pid_to_str (lp->ptid),
-				      errno ? safe_strerror (errno) : "OK");
-
-		  fprintf_unfiltered (gdb_stdlog,
-				      "SWC: Candidate SIGTRAP event in %s\n",
-				      target_pid_to_str (lp->ptid));
-		}
-	      /* Hold this event/waitstatus while we check to see if
-		 there are any more (we still want to get that SIGSTOP).  */
-	      stop_wait_callback (lp, NULL);
-
-	      /* Hold the SIGTRAP for handling by linux_nat_wait.  If
-		 there's another event, throw it back into the
-		 queue.  */
-	      if (lp->status)
-		{
-		  if (debug_linux_nat)
-		    fprintf_unfiltered (gdb_stdlog,
-					"SWC: kill %s, %s\n",
-					target_pid_to_str (lp->ptid),
-					status_to_str ((int) status));
-		  kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (lp->status));
-		}
+	  /* The thread was stopped with a signal other than SIGSTOP.  */
 
-	      /* Save the sigtrap event.  */
-	      lp->status = status;
-	      return 0;
-	    }
-	  else
-	    {
-	      /* The thread was stopped with a signal other than
-	         SIGSTOP, and didn't accidentally trip a breakpoint.  */
+	  save_sigtrap (lp);
 
-	      if (debug_linux_nat)
-		{
-		  fprintf_unfiltered (gdb_stdlog,
-				      "SWC: Pending event %s in %s\n",
-				      status_to_str ((int) status),
-				      target_pid_to_str (lp->ptid));
-		}
-	      /* Now resume this LWP and get the SIGSTOP event.  */
-	      errno = 0;
-	      ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0, 0);
-	      if (debug_linux_nat)
-		fprintf_unfiltered (gdb_stdlog,
-				    "SWC: PTRACE_CONT %s, 0, 0 (%s)\n",
-				    target_pid_to_str (lp->ptid),
-				    errno ? safe_strerror (errno) : "OK");
-
-	      /* Hold this event/waitstatus while we check to see if
-	         there are any more (we still want to get that SIGSTOP).  */
-	      stop_wait_callback (lp, NULL);
-
-	      /* If the lp->status field is still empty, use it to
-		 hold this event.  If not, then this event must be
-		 returned to the event queue of the LWP.  */
-	      if (lp->status)
-		{
-		  if (debug_linux_nat)
-		    {
-		      fprintf_unfiltered (gdb_stdlog,
-					  "SWC: kill %s, %s\n",
-					  target_pid_to_str (lp->ptid),
-					  status_to_str ((int) status));
-		    }
-		  kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (status));
-		}
-	      else
-		lp->status = status;
-	      return 0;
-	    }
+	  if (debug_linux_nat)
+	    fprintf_unfiltered (gdb_stdlog,
+				"SWC: Pending event %s in %s\n",
+				status_to_str ((int) status),
+				target_pid_to_str (lp->ptid));
+
+	  /* Save the sigtrap event.  */
+	  lp->status = status;
+	  gdb_assert (!lp->stopped);
+	  gdb_assert (lp->signalled);
+	  lp->stopped = 1;
 	}
       else
 	{
 	  /* We caught the SIGSTOP that we intended to catch, so
 	     there's no SIGSTOP pending.  */
+
+	  if (debug_linux_nat)
+	    fprintf_unfiltered (gdb_stdlog,
+				"SWC: Delayed SIGSTOP caught for %s.\n",
+				target_pid_to_str (lp->ptid));
+
 	  lp->stopped = 1;
+
+	  /* Reset SIGNALLED only after the stop_wait_callback call
+	     above as it does gdb_assert on SIGNALLED.  */
 	  lp->signalled = 0;
 	}
     }
@@ -3153,7 +3166,7 @@ stop_and_resume_callback (struct lwp_info *lp, void *data)
 		fprintf_unfiltered (gdb_stdlog,
 				    "SARC: re-resuming LWP %ld\n",
 				    GET_LWP (lp->ptid));
-	      resume_lwp (lp, lp->step);
+	      resume_lwp (lp, lp->step, GDB_SIGNAL_0);
 	    }
 	  else
 	    {
@@ -3249,12 +3262,7 @@ linux_nat_filter_event (int lwpid, int status, int *new_pending_p)
     }
 
   if (linux_nat_status_is_event (status))
-    {
-      /* Save the trap's siginfo in case we need it later.  */
-      save_siginfo (lp);
-
-      save_sigtrap (lp);
-    }
+    save_sigtrap (lp);
 
   /* Check if the thread has exited.  */
   if ((WIFEXITED (status) || WIFSIGNALED (status))
@@ -3332,8 +3340,10 @@ linux_nat_filter_event (int lwpid, int status, int *new_pending_p)
 
 	  registers_changed ();
 
+	  if (linux_nat_prepare_to_resume != NULL)
+	    linux_nat_prepare_to_resume (lp);
 	  linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)),
-			    lp->step, TARGET_SIGNAL_0);
+			    lp->step, GDB_SIGNAL_0);
 	  if (debug_linux_nat)
 	    fprintf_unfiltered (gdb_stdlog,
 				"LLW: %s %s, 0, 0 (discard SIGSTOP)\n",
@@ -3363,8 +3373,10 @@ linux_nat_filter_event (int lwpid, int status, int *new_pending_p)
       lp->ignore_sigint = 0;
 
       registers_changed ();
+      if (linux_nat_prepare_to_resume != NULL)
+	linux_nat_prepare_to_resume (lp);
       linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)),
-			    lp->step, TARGET_SIGNAL_0);
+			    lp->step, GDB_SIGNAL_0);
       if (debug_linux_nat)
 	fprintf_unfiltered (gdb_stdlog,
 			    "LLW: %s %s, 0, 0 (discard SIGINT)\n",
@@ -3405,7 +3417,7 @@ check_zombie_leaders (void)
 	  /* Check if there are other threads in the group, as we may
 	     have raced with the inferior simply exiting.  */
 	  && num_lwps (inf->pid) > 1
-	  && linux_lwp_is_zombie (inf->pid))
+	  && linux_proc_pid_is_zombie (inf->pid))
 	{
 	  if (debug_linux_nat)
 	    fprintf_unfiltered (gdb_stdlog,
@@ -3523,52 +3535,6 @@ retry:
 	lp = NULL;
     }
 
-  if (lp && lp->signalled && lp->last_resume_kind != resume_stop)
-    {
-      /* A pending SIGSTOP may interfere with the normal stream of
-         events.  In a typical case where interference is a problem,
-         we have a SIGSTOP signal pending for LWP A while
-         single-stepping it, encounter an event in LWP B, and take the
-         pending SIGSTOP while trying to stop LWP A.  After processing
-         the event in LWP B, LWP A is continued, and we'll never see
-         the SIGTRAP associated with the last time we were
-         single-stepping LWP A.  */
-
-      /* Resume the thread.  It should halt immediately returning the
-         pending SIGSTOP.  */
-      registers_changed ();
-      linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)),
-			    lp->step, TARGET_SIGNAL_0);
-      if (debug_linux_nat)
-	fprintf_unfiltered (gdb_stdlog,
-			    "LLW: %s %s, 0, 0 (expect SIGSTOP)\n",
-			    lp->step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
-			    target_pid_to_str (lp->ptid));
-      lp->stopped = 0;
-      gdb_assert (lp->resumed);
-
-      /* Catch the pending SIGSTOP.  */
-      status = lp->status;
-      lp->status = 0;
-
-      stop_wait_callback (lp, NULL);
-
-      /* If the lp->status field isn't empty, we caught another signal
-	 while flushing the SIGSTOP.  Return it back to the event
-	 queue of the LWP, as we already have an event to handle.  */
-      if (lp->status)
-	{
-	  if (debug_linux_nat)
-	    fprintf_unfiltered (gdb_stdlog,
-				"LLW: kill %s, %s\n",
-				target_pid_to_str (lp->ptid),
-				status_to_str (lp->status));
-	  kill_lwp (GET_LWP (lp->ptid), WSTOPSIG (lp->status));
-	}
-
-      lp->status = status;
-    }
-
   if (!target_can_async_p ())
     {
       /* Causes SIGINT to be passed on to the attached process.  */
@@ -3773,7 +3739,7 @@ retry:
 
   if (WIFSTOPPED (status))
     {
-      enum target_signal signo = target_signal_from_host (WSTOPSIG (status));
+      enum gdb_signal signo = gdb_signal_from_host (WSTOPSIG (status));
 
       /* When using hardware single-step, we need to report every signal.
 	 Otherwise, signals in pass_mask may be short-circuited.  */
@@ -3786,6 +3752,8 @@ retry:
 	     newly attached threads may cause an unwanted delay in
 	     getting them running.  */
 	  registers_changed ();
+	  if (linux_nat_prepare_to_resume != NULL)
+	    linux_nat_prepare_to_resume (lp);
 	  linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)),
 				lp->step, signo);
 	  if (debug_linux_nat)
@@ -3794,8 +3762,8 @@ retry:
 				lp->step ?
 				"PTRACE_SINGLESTEP" : "PTRACE_CONT",
 				target_pid_to_str (lp->ptid),
-				(signo != TARGET_SIGNAL_0
-				 ? strsignal (target_signal_to_host (signo))
+				(signo != GDB_SIGNAL_0
+				 ? strsignal (gdb_signal_to_host (signo))
 				 : "0"));
 	  lp->stopped = 0;
 	  goto retry;
@@ -3806,7 +3774,7 @@ retry:
 	  /* Only do the below in all-stop, as we currently use SIGINT
 	     to implement target_stop (see linux_nat_stop) in
 	     non-stop.  */
-	  if (signo == TARGET_SIGNAL_INT && signal_pass_state (signo) == 0)
+	  if (signo == GDB_SIGNAL_INT && signal_pass_state (signo) == 0)
 	    {
 	      /* If ^C/BREAK is typed at the tty/console, SIGINT gets
 		 forwarded to the entire process group, that is, all LWPs
@@ -3895,14 +3863,14 @@ retry:
       /* A thread that has been requested to stop by GDB with
 	 target_stop, and it stopped cleanly, so report as SIG0.  The
 	 use of SIGSTOP is an implementation detail.  */
-      ourstatus->value.sig = TARGET_SIGNAL_0;
+      ourstatus->value.sig = GDB_SIGNAL_0;
     }
 
   if (ourstatus->kind == TARGET_WAITKIND_EXITED
       || ourstatus->kind == TARGET_WAITKIND_SIGNALLED)
     lp->core = -1;
   else
-    lp->core = linux_nat_core_of_thread_1 (lp->ptid);
+    lp->core = linux_common_core_of_thread (lp->ptid);
 
   return lp->ptid;
 }
@@ -3942,10 +3910,11 @@ resume_stopped_resumed_lwps (struct lwp_info *lp, void *data)
 			    lp->step);
 
       registers_changed ();
+      if (linux_nat_prepare_to_resume != NULL)
+	linux_nat_prepare_to_resume (lp);
       linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)),
-			    lp->step, TARGET_SIGNAL_0);
+			    lp->step, GDB_SIGNAL_0);
       lp->stopped = 0;
-      memset (&lp->siginfo, 0, sizeof (lp->siginfo));
       lp->stopped_by_watchpoint = 0;
     }
 
@@ -4138,7 +4107,7 @@ linux_nat_mourn_inferior (struct target_ops *ops)
    layout of the inferiors' architecture.  */
 
 static void
-siginfo_fixup (struct siginfo *siginfo, gdb_byte *inf_siginfo, int direction)
+siginfo_fixup (siginfo_t *siginfo, gdb_byte *inf_siginfo, int direction)
 {
   int done = 0;
 
@@ -4150,9 +4119,9 @@ siginfo_fixup (struct siginfo *siginfo, gdb_byte *inf_siginfo, int direction)
   if (!done)
     {
       if (direction == 1)
-	memcpy (siginfo, inf_siginfo, sizeof (struct siginfo));
+	memcpy (siginfo, inf_siginfo, sizeof (siginfo_t));
       else
-	memcpy (inf_siginfo, siginfo, sizeof (struct siginfo));
+	memcpy (inf_siginfo, siginfo, sizeof (siginfo_t));
     }
 }
 
@@ -4162,8 +4131,8 @@ linux_xfer_siginfo (struct target_ops *ops, enum target_object object,
 		    const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
 {
   int pid;
-  struct siginfo siginfo;
-  gdb_byte inf_siginfo[sizeof (struct siginfo)];
+  siginfo_t siginfo;
+  gdb_byte inf_siginfo[sizeof (siginfo_t)];
 
   gdb_assert (object == TARGET_OBJECT_SIGNAL_INFO);
   gdb_assert (readbuf || writebuf);
@@ -4344,744 +4313,59 @@ linux_child_pid_to_exec_file (int pid)
     return name1;
 }
 
-/* Service function for corefiles and info proc.  */
-
-static int
-read_mapping (FILE *mapfile,
-	      long long *addr,
-	      long long *endaddr,
-	      char *permissions,
-	      long long *offset,
-	      char *device, long long *inode, char *filename)
-{
-  int ret = fscanf (mapfile, "%llx-%llx %s %llx %s %llx",
-		    addr, endaddr, permissions, offset, device, inode);
-
-  filename[0] = '\0';
-  if (ret > 0 && ret != EOF)
-    {
-      /* Eat everything up to EOL for the filename.  This will prevent
-         weird filenames (such as one with embedded whitespace) from
-         confusing this code.  It also makes this code more robust in
-         respect to annotations the kernel may add after the filename.
-
-         Note the filename is used for informational purposes
-         only.  */
-      ret += fscanf (mapfile, "%[^\n]\n", filename);
-    }
-
-  return (ret != 0 && ret != EOF);
-}
-
-/* Fills the "to_find_memory_regions" target vector.  Lists the memory
-   regions in the inferior for a corefile.  */
-
-static int
-linux_nat_find_memory_regions (find_memory_region_ftype func, void *obfd)
-{
-  int pid = PIDGET (inferior_ptid);
-  char mapsfilename[MAXPATHLEN];
-  FILE *mapsfile;
-  long long addr, endaddr, size, offset, inode;
-  char permissions[8], device[8], filename[MAXPATHLEN];
-  int read, write, exec;
-  struct cleanup *cleanup;
-
-  /* Compose the filename for the /proc memory map, and open it.  */
-  sprintf (mapsfilename, "/proc/%d/maps", pid);
-  if ((mapsfile = fopen (mapsfilename, "r")) == NULL)
-    error (_("Could not open %s."), mapsfilename);
-  cleanup = make_cleanup_fclose (mapsfile);
-
-  if (info_verbose)
-    fprintf_filtered (gdb_stdout,
-		      "Reading memory regions from %s\n", mapsfilename);
-
-  /* Now iterate until end-of-file.  */
-  while (read_mapping (mapsfile, &addr, &endaddr, &permissions[0],
-		       &offset, &device[0], &inode, &filename[0]))
-    {
-      size = endaddr - addr;
-
-      /* Get the segment's permissions.  */
-      read = (strchr (permissions, 'r') != 0);
-      write = (strchr (permissions, 'w') != 0);
-      exec = (strchr (permissions, 'x') != 0);
-
-      if (info_verbose)
-	{
-	  fprintf_filtered (gdb_stdout,
-			    "Save segment, %s bytes at %s (%c%c%c)",
-			    plongest (size), paddress (target_gdbarch, addr),
-			    read ? 'r' : ' ',
-			    write ? 'w' : ' ', exec ? 'x' : ' ');
-	  if (filename[0])
-	    fprintf_filtered (gdb_stdout, " for %s", filename);
-	  fprintf_filtered (gdb_stdout, "\n");
-	}
-
-      /* Invoke the callback function to create the corefile
-	 segment.  */
-      func (addr, size, read, write, exec, obfd);
-    }
-  do_cleanups (cleanup);
-  return 0;
-}
-
-static int
-find_signalled_thread (struct thread_info *info, void *data)
-{
-  if (info->suspend.stop_signal != TARGET_SIGNAL_0
-      && ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid))
-    return 1;
-
-  return 0;
-}
-
-static enum target_signal
-find_stop_signal (void)
-{
-  struct thread_info *info =
-    iterate_over_threads (find_signalled_thread, NULL);
-
-  if (info)
-    return info->suspend.stop_signal;
-  else
-    return TARGET_SIGNAL_0;
-}
-
 /* Records the thread's register state for the corefile note
    section.  */
 
 static char *
-linux_nat_do_thread_registers (bfd *obfd, ptid_t ptid,
-			       char *note_data, int *note_size,
-			       enum target_signal stop_signal)
+linux_nat_collect_thread_registers (const struct regcache *regcache,
+				    ptid_t ptid, bfd *obfd,
+				    char *note_data, int *note_size,
+				    enum gdb_signal stop_signal)
 {
-  unsigned long lwp = ptid_get_lwp (ptid);
-  struct gdbarch *gdbarch = target_gdbarch;
-  struct regcache *regcache = get_thread_arch_regcache (ptid, gdbarch);
+  struct gdbarch *gdbarch = get_regcache_arch (regcache);
   const struct regset *regset;
   int core_regset_p;
-  struct cleanup *old_chain;
-  struct core_regset_section *sect_list;
-  char *gdb_regset;
-
-  old_chain = save_inferior_ptid ();
-  inferior_ptid = ptid;
-  target_fetch_registers (regcache, -1);
-  do_cleanups (old_chain);
+  gdb_gregset_t gregs;
+  gdb_fpregset_t fpregs;
 
   core_regset_p = gdbarch_regset_from_core_section_p (gdbarch);
-  sect_list = gdbarch_core_regset_sections (gdbarch);
-
-  /* The loop below uses the new struct core_regset_section, which stores
-     the supported section names and sizes for the core file.  Note that
-     note PRSTATUS needs to be treated specially.  But the other notes are
-     structurally the same, so they can benefit from the new struct.  */
-  if (core_regset_p && sect_list != NULL)
-    while (sect_list->sect_name != NULL)
-      {
-	regset = gdbarch_regset_from_core_section (gdbarch,
-						   sect_list->sect_name,
-						   sect_list->size);
-	gdb_assert (regset && regset->collect_regset);
-	gdb_regset = xmalloc (sect_list->size);
-	regset->collect_regset (regset, regcache, -1,
-				gdb_regset, sect_list->size);
-
-	if (strcmp (sect_list->sect_name, ".reg") == 0)
-	  note_data = (char *) elfcore_write_prstatus
-				(obfd, note_data, note_size,
-				 lwp, target_signal_to_host (stop_signal),
-				 gdb_regset);
-	else
-	  note_data = (char *) elfcore_write_register_note
-				(obfd, note_data, note_size,
-				 sect_list->sect_name, gdb_regset,
-				 sect_list->size);
-	xfree (gdb_regset);
-	sect_list++;
-      }
 
-  /* For architectures that does not have the struct core_regset_section
-     implemented, we use the old method.  When all the architectures have
-     the new support, the code below should be deleted.  */
+  if (core_regset_p
+      && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg",
+						     sizeof (gregs)))
+	 != NULL && regset->collect_regset != NULL)
+    regset->collect_regset (regset, regcache, -1, &gregs, sizeof (gregs));
   else
-    {
-      gdb_gregset_t gregs;
-      gdb_fpregset_t fpregs;
+    fill_gregset (regcache, &gregs, -1);
 
-      if (core_regset_p
-	  && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg",
-							 sizeof (gregs)))
-	  != NULL && regset->collect_regset != NULL)
-	regset->collect_regset (regset, regcache, -1,
-				&gregs, sizeof (gregs));
-      else
-	fill_gregset (regcache, &gregs, -1);
+  note_data = (char *) elfcore_write_prstatus
+			 (obfd, note_data, note_size, ptid_get_lwp (ptid),
+			  gdb_signal_to_host (stop_signal), &gregs);
 
-      note_data = (char *) elfcore_write_prstatus
-	(obfd, note_data, note_size, lwp, target_signal_to_host (stop_signal),
-	 &gregs);
-
-      if (core_regset_p
-          && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg2",
-							 sizeof (fpregs)))
+  if (core_regset_p
+      && (regset = gdbarch_regset_from_core_section (gdbarch, ".reg2",
+						     sizeof (fpregs)))
 	  != NULL && regset->collect_regset != NULL)
-	regset->collect_regset (regset, regcache, -1,
-				&fpregs, sizeof (fpregs));
-      else
-	fill_fpregset (regcache, &fpregs, -1);
+    regset->collect_regset (regset, regcache, -1, &fpregs, sizeof (fpregs));
+  else
+    fill_fpregset (regcache, &fpregs, -1);
 
-      note_data = (char *) elfcore_write_prfpreg (obfd,
-						  note_data,
-						  note_size,
-						  &fpregs, sizeof (fpregs));
-    }
+  note_data = (char *) elfcore_write_prfpreg (obfd, note_data, note_size,
+					      &fpregs, sizeof (fpregs));
 
   return note_data;
 }
 
-struct linux_nat_corefile_thread_data
-{
-  bfd *obfd;
-  char *note_data;
-  int *note_size;
-  int num_notes;
-  enum target_signal stop_signal;
-};
-
-/* Called by gdbthread.c once per thread.  Records the thread's
-   register state for the corefile note section.  */
-
-static int
-linux_nat_corefile_thread_callback (struct lwp_info *ti, void *data)
-{
-  struct linux_nat_corefile_thread_data *args = data;
-
-  args->note_data = linux_nat_do_thread_registers (args->obfd,
-						   ti->ptid,
-						   args->note_data,
-						   args->note_size,
-						   args->stop_signal);
-  args->num_notes++;
-
-  return 0;
-}
-
-/* Enumerate spufs IDs for process PID.  */
-
-static void
-iterate_over_spus (int pid, void (*callback) (void *, int), void *data)
-{
-  char path[128];
-  DIR *dir;
-  struct dirent *entry;
-
-  xsnprintf (path, sizeof path, "/proc/%d/fd", pid);
-  dir = opendir (path);
-  if (!dir)
-    return;
-
-  rewinddir (dir);
-  while ((entry = readdir (dir)) != NULL)
-    {
-      struct stat st;
-      struct statfs stfs;
-      int fd;
-
-      fd = atoi (entry->d_name);
-      if (!fd)
-	continue;
-
-      xsnprintf (path, sizeof path, "/proc/%d/fd/%d", pid, fd);
-      if (stat (path, &st) != 0)
-	continue;
-      if (!S_ISDIR (st.st_mode))
-	continue;
-
-      if (statfs (path, &stfs) != 0)
-	continue;
-      if (stfs.f_type != SPUFS_MAGIC)
-	continue;
-
-      callback (data, fd);
-    }
-
-  closedir (dir);
-}
-
-/* Generate corefile notes for SPU contexts.  */
-
-struct linux_spu_corefile_data
-{
-  bfd *obfd;
-  char *note_data;
-  int *note_size;
-};
-
-static void
-linux_spu_corefile_callback (void *data, int fd)
-{
-  struct linux_spu_corefile_data *args = data;
-  int i;
-
-  static const char *spu_files[] =
-    {
-      "object-id",
-      "mem",
-      "regs",
-      "fpcr",
-      "lslr",
-      "decr",
-      "decr_status",
-      "signal1",
-      "signal1_type",
-      "signal2",
-      "signal2_type",
-      "event_mask",
-      "event_status",
-      "mbox_info",
-      "ibox_info",
-      "wbox_info",
-      "dma_info",
-      "proxydma_info",
-   };
-
-  for (i = 0; i < sizeof (spu_files) / sizeof (spu_files[0]); i++)
-    {
-      char annex[32], note_name[32];
-      gdb_byte *spu_data;
-      LONGEST spu_len;
-
-      xsnprintf (annex, sizeof annex, "%d/%s", fd, spu_files[i]);
-      spu_len = target_read_alloc (&current_target, TARGET_OBJECT_SPU,
-				   annex, &spu_data);
-      if (spu_len > 0)
-	{
-	  xsnprintf (note_name, sizeof note_name, "SPU/%s", annex);
-	  args->note_data = elfcore_write_note (args->obfd, args->note_data,
-						args->note_size, note_name,
-						NT_SPU, spu_data, spu_len);
-	  xfree (spu_data);
-	}
-    }
-}
-
-static char *
-linux_spu_make_corefile_notes (bfd *obfd, char *note_data, int *note_size)
-{
-  struct linux_spu_corefile_data args;
-
-  args.obfd = obfd;
-  args.note_data = note_data;
-  args.note_size = note_size;
-
-  iterate_over_spus (PIDGET (inferior_ptid),
-		     linux_spu_corefile_callback, &args);
-
-  return args.note_data;
-}
-
-/* Fills the "to_make_corefile_note" target vector.  Builds the note
-   section for a corefile, and returns it in a malloc buffer.  */
+/* Fills the "to_make_corefile_note" target vector.  Builds the note
+   section for a corefile, and returns it in a malloc buffer.  */
 
 static char *
 linux_nat_make_corefile_notes (bfd *obfd, int *note_size)
 {
-  struct linux_nat_corefile_thread_data thread_args;
-  /* The variable size must be >= sizeof (prpsinfo_t.pr_fname).  */
-  char fname[16] = { '\0' };
-  /* The variable size must be >= sizeof (prpsinfo_t.pr_psargs).  */
-  char psargs[80] = { '\0' };
-  char *note_data = NULL;
-  ptid_t filter = pid_to_ptid (ptid_get_pid (inferior_ptid));
-  gdb_byte *auxv;
-  int auxv_len;
-
-  if (get_exec_file (0))
-    {
-      strncpy (fname, lbasename (get_exec_file (0)), sizeof (fname));
-      strncpy (psargs, get_exec_file (0), sizeof (psargs));
-      if (get_inferior_args ())
-	{
-	  char *string_end;
-	  char *psargs_end = psargs + sizeof (psargs);
-
-	  /* linux_elfcore_write_prpsinfo () handles zero unterminated
-	     strings fine.  */
-	  string_end = memchr (psargs, 0, sizeof (psargs));
-	  if (string_end != NULL)
-	    {
-	      *string_end++ = ' ';
-	      strncpy (string_end, get_inferior_args (),
-		       psargs_end - string_end);
-	    }
-	}
-      note_data = (char *) elfcore_write_prpsinfo (obfd,
-						   note_data,
-						   note_size, fname, psargs);
-    }
-
-  /* Dump information for threads.  */
-  thread_args.obfd = obfd;
-  thread_args.note_data = note_data;
-  thread_args.note_size = note_size;
-  thread_args.num_notes = 0;
-  thread_args.stop_signal = find_stop_signal ();
-  iterate_over_lwps (filter, linux_nat_corefile_thread_callback, &thread_args);
-  gdb_assert (thread_args.num_notes != 0);
-  note_data = thread_args.note_data;
-
-  auxv_len = target_read_alloc (&current_target, TARGET_OBJECT_AUXV,
-				NULL, &auxv);
-  if (auxv_len > 0)
-    {
-      note_data = elfcore_write_note (obfd, note_data, note_size,
-				      "CORE", NT_AUXV, auxv, auxv_len);
-      xfree (auxv);
-    }
-
-  note_data = linux_spu_make_corefile_notes (obfd, note_data, note_size);
-
-  make_cleanup (xfree, note_data);
-  return note_data;
-}
-
-/* Implement the "info proc" command.  */
-
-enum info_proc_what
-  {
-    /* Display the default cmdline, cwd and exe outputs.  */
-    IP_MINIMAL,
-
-    /* Display `info proc mappings'.  */
-    IP_MAPPINGS,
-
-    /* Display `info proc status'.  */
-    IP_STATUS,
-
-    /* Display `info proc stat'.  */
-    IP_STAT,
-
-    /* Display `info proc cmdline'.  */
-    IP_CMDLINE,
-
-    /* Display `info proc exe'.  */
-    IP_EXE,
-
-    /* Display `info proc cwd'.  */
-    IP_CWD,
-
-    /* Display all of the above.  */
-    IP_ALL
-  };
-
-static void
-linux_nat_info_proc_cmd_1 (char *args, enum info_proc_what what, int from_tty)
-{
-  /* A long is used for pid instead of an int to avoid a loss of precision
-     compiler warning from the output of strtoul.  */
-  long pid = PIDGET (inferior_ptid);
-  FILE *procfile;
-  char buffer[MAXPATHLEN];
-  char fname1[MAXPATHLEN], fname2[MAXPATHLEN];
-  int cmdline_f = (what == IP_MINIMAL || what == IP_CMDLINE || what == IP_ALL);
-  int cwd_f = (what == IP_MINIMAL || what == IP_CWD || what == IP_ALL);
-  int exe_f = (what == IP_MINIMAL || what == IP_EXE || what == IP_ALL);
-  int mappings_f = (what == IP_MAPPINGS || what == IP_ALL);
-  int status_f = (what == IP_STATUS || what == IP_ALL);
-  int stat_f = (what == IP_STAT || what == IP_ALL);
-  struct stat dummy;
-
-  if (args && isdigit (args[0]))
-    pid = strtoul (args, &args, 10);
-
-  args = skip_spaces (args);
-  if (args && args[0])
-    error (_("Too many parameters: %s"), args);
-
-  if (pid == 0)
-    error (_("No current process: you must name one."));
-
-  sprintf (fname1, "/proc/%ld", pid);
-  if (stat (fname1, &dummy) != 0)
-    error (_("No /proc directory: '%s'"), fname1);
-
-  printf_filtered (_("process %ld\n"), pid);
-  if (cmdline_f)
-    {
-      sprintf (fname1, "/proc/%ld/cmdline", pid);
-      if ((procfile = fopen (fname1, "r")) != NULL)
-	{
-	  struct cleanup *cleanup = make_cleanup_fclose (procfile);
-
-          if (fgets (buffer, sizeof (buffer), procfile))
-            printf_filtered ("cmdline = '%s'\n", buffer);
-          else
-            warning (_("unable to read '%s'"), fname1);
-	  do_cleanups (cleanup);
-	}
-      else
-	warning (_("unable to open /proc file '%s'"), fname1);
-    }
-  if (cwd_f)
-    {
-      sprintf (fname1, "/proc/%ld/cwd", pid);
-      memset (fname2, 0, sizeof (fname2));
-      if (readlink (fname1, fname2, sizeof (fname2)) > 0)
-	printf_filtered ("cwd = '%s'\n", fname2);
-      else
-	warning (_("unable to read link '%s'"), fname1);
-    }
-  if (exe_f)
-    {
-      sprintf (fname1, "/proc/%ld/exe", pid);
-      memset (fname2, 0, sizeof (fname2));
-      if (readlink (fname1, fname2, sizeof (fname2)) > 0)
-	printf_filtered ("exe = '%s'\n", fname2);
-      else
-	warning (_("unable to read link '%s'"), fname1);
-    }
-  if (mappings_f)
-    {
-      sprintf (fname1, "/proc/%ld/maps", pid);
-      if ((procfile = fopen (fname1, "r")) != NULL)
-	{
-	  long long addr, endaddr, size, offset, inode;
-	  char permissions[8], device[8], filename[MAXPATHLEN];
-	  struct cleanup *cleanup;
-
-	  cleanup = make_cleanup_fclose (procfile);
-	  printf_filtered (_("Mapped address spaces:\n\n"));
-	  if (gdbarch_addr_bit (target_gdbarch) == 32)
-	    {
-	      printf_filtered ("\t%10s %10s %10s %10s %7s\n",
-			   "Start Addr",
-			   "  End Addr",
-			   "      Size", "    Offset", "objfile");
-            }
-	  else
-            {
-	      printf_filtered ("  %18s %18s %10s %10s %7s\n",
-			   "Start Addr",
-			   "  End Addr",
-			   "      Size", "    Offset", "objfile");
-	    }
-
-	  while (read_mapping (procfile, &addr, &endaddr, &permissions[0],
-			       &offset, &device[0], &inode, &filename[0]))
-	    {
-	      size = endaddr - addr;
-
-	      /* FIXME: carlton/2003-08-27: Maybe the printf_filtered
-		 calls here (and possibly above) should be abstracted
-		 out into their own functions?  Andrew suggests using
-		 a generic local_address_string instead to print out
-		 the addresses; that makes sense to me, too.  */
-
-	      if (gdbarch_addr_bit (target_gdbarch) == 32)
-	        {
-	          printf_filtered ("\t%#10lx %#10lx %#10x %#10x %7s\n",
-			       (unsigned long) addr,	/* FIXME: pr_addr */
-			       (unsigned long) endaddr,
-			       (int) size,
-			       (unsigned int) offset,
-			       filename[0] ? filename : "");
-		}
-	      else
-	        {
-	          printf_filtered ("  %#18lx %#18lx %#10x %#10x %7s\n",
-			       (unsigned long) addr,	/* FIXME: pr_addr */
-			       (unsigned long) endaddr,
-			       (int) size,
-			       (unsigned int) offset,
-			       filename[0] ? filename : "");
-	        }
-	    }
-
-	  do_cleanups (cleanup);
-	}
-      else
-	warning (_("unable to open /proc file '%s'"), fname1);
-    }
-  if (status_f)
-    {
-      sprintf (fname1, "/proc/%ld/status", pid);
-      if ((procfile = fopen (fname1, "r")) != NULL)
-	{
-	  struct cleanup *cleanup = make_cleanup_fclose (procfile);
-
-	  while (fgets (buffer, sizeof (buffer), procfile) != NULL)
-	    puts_filtered (buffer);
-	  do_cleanups (cleanup);
-	}
-      else
-	warning (_("unable to open /proc file '%s'"), fname1);
-    }
-  if (stat_f)
-    {
-      sprintf (fname1, "/proc/%ld/stat", pid);
-      if ((procfile = fopen (fname1, "r")) != NULL)
-	{
-	  int itmp;
-	  char ctmp;
-	  long ltmp;
-	  struct cleanup *cleanup = make_cleanup_fclose (procfile);
-
-	  if (fscanf (procfile, "%d ", &itmp) > 0)
-	    printf_filtered (_("Process: %d\n"), itmp);
-	  if (fscanf (procfile, "(%[^)]) ", &buffer[0]) > 0)
-	    printf_filtered (_("Exec file: %s\n"), buffer);
-	  if (fscanf (procfile, "%c ", &ctmp) > 0)
-	    printf_filtered (_("State: %c\n"), ctmp);
-	  if (fscanf (procfile, "%d ", &itmp) > 0)
-	    printf_filtered (_("Parent process: %d\n"), itmp);
-	  if (fscanf (procfile, "%d ", &itmp) > 0)
-	    printf_filtered (_("Process group: %d\n"), itmp);
-	  if (fscanf (procfile, "%d ", &itmp) > 0)
-	    printf_filtered (_("Session id: %d\n"), itmp);
-	  if (fscanf (procfile, "%d ", &itmp) > 0)
-	    printf_filtered (_("TTY: %d\n"), itmp);
-	  if (fscanf (procfile, "%d ", &itmp) > 0)
-	    printf_filtered (_("TTY owner process group: %d\n"), itmp);
-	  if (fscanf (procfile, "%lu ", &ltmp) > 0)
-	    printf_filtered (_("Flags: 0x%lx\n"), ltmp);
-	  if (fscanf (procfile, "%lu ", &ltmp) > 0)
-	    printf_filtered (_("Minor faults (no memory page): %lu\n"),
-			     (unsigned long) ltmp);
-	  if (fscanf (procfile, "%lu ", &ltmp) > 0)
-	    printf_filtered (_("Minor faults, children: %lu\n"),
-			     (unsigned long) ltmp);
-	  if (fscanf (procfile, "%lu ", &ltmp) > 0)
-	    printf_filtered (_("Major faults (memory page faults): %lu\n"),
-			     (unsigned long) ltmp);
-	  if (fscanf (procfile, "%lu ", &ltmp) > 0)
-	    printf_filtered (_("Major faults, children: %lu\n"),
-			     (unsigned long) ltmp);
-	  if (fscanf (procfile, "%ld ", &ltmp) > 0)
-	    printf_filtered (_("utime: %ld\n"), ltmp);
-	  if (fscanf (procfile, "%ld ", &ltmp) > 0)
-	    printf_filtered (_("stime: %ld\n"), ltmp);
-	  if (fscanf (procfile, "%ld ", &ltmp) > 0)
-	    printf_filtered (_("utime, children: %ld\n"), ltmp);
-	  if (fscanf (procfile, "%ld ", &ltmp) > 0)
-	    printf_filtered (_("stime, children: %ld\n"), ltmp);
-	  if (fscanf (procfile, "%ld ", &ltmp) > 0)
-	    printf_filtered (_("jiffies remaining in current "
-			       "time slice: %ld\n"), ltmp);
-	  if (fscanf (procfile, "%ld ", &ltmp) > 0)
-	    printf_filtered (_("'nice' value: %ld\n"), ltmp);
-	  if (fscanf (procfile, "%lu ", &ltmp) > 0)
-	    printf_filtered (_("jiffies until next timeout: %lu\n"),
-			     (unsigned long) ltmp);
-	  if (fscanf (procfile, "%lu ", &ltmp) > 0)
-	    printf_filtered (_("jiffies until next SIGALRM: %lu\n"),
-			     (unsigned long) ltmp);
-	  if (fscanf (procfile, "%ld ", &ltmp) > 0)
-	    printf_filtered (_("start time (jiffies since "
-			       "system boot): %ld\n"), ltmp);
-	  if (fscanf (procfile, "%lu ", &ltmp) > 0)
-	    printf_filtered (_("Virtual memory size: %lu\n"),
-			     (unsigned long) ltmp);
-	  if (fscanf (procfile, "%lu ", &ltmp) > 0)
-	    printf_filtered (_("Resident set size: %lu\n"),
-			     (unsigned long) ltmp);
-	  if (fscanf (procfile, "%lu ", &ltmp) > 0)
-	    printf_filtered (_("rlim: %lu\n"), (unsigned long) ltmp);
-	  if (fscanf (procfile, "%lu ", &ltmp) > 0)
-	    printf_filtered (_("Start of text: 0x%lx\n"), ltmp);
-	  if (fscanf (procfile, "%lu ", &ltmp) > 0)
-	    printf_filtered (_("End of text: 0x%lx\n"), ltmp);
-	  if (fscanf (procfile, "%lu ", &ltmp) > 0)
-	    printf_filtered (_("Start of stack: 0x%lx\n"), ltmp);
-#if 0	/* Don't know how architecture-dependent the rest is...
-	   Anyway the signal bitmap info is available from "status".  */
-	  if (fscanf (procfile, "%lu ", &ltmp) > 0)	/* FIXME arch?  */
-	    printf_filtered (_("Kernel stack pointer: 0x%lx\n"), ltmp);
-	  if (fscanf (procfile, "%lu ", &ltmp) > 0)	/* FIXME arch?  */
-	    printf_filtered (_("Kernel instr pointer: 0x%lx\n"), ltmp);
-	  if (fscanf (procfile, "%ld ", &ltmp) > 0)
-	    printf_filtered (_("Pending signals bitmap: 0x%lx\n"), ltmp);
-	  if (fscanf (procfile, "%ld ", &ltmp) > 0)
-	    printf_filtered (_("Blocked signals bitmap: 0x%lx\n"), ltmp);
-	  if (fscanf (procfile, "%ld ", &ltmp) > 0)
-	    printf_filtered (_("Ignored signals bitmap: 0x%lx\n"), ltmp);
-	  if (fscanf (procfile, "%ld ", &ltmp) > 0)
-	    printf_filtered (_("Catched signals bitmap: 0x%lx\n"), ltmp);
-	  if (fscanf (procfile, "%lu ", &ltmp) > 0)	/* FIXME arch?  */
-	    printf_filtered (_("wchan (system call): 0x%lx\n"), ltmp);
-#endif
-	  do_cleanups (cleanup);
-	}
-      else
-	warning (_("unable to open /proc file '%s'"), fname1);
-    }
-}
-
-/* Implement `info proc' when given without any futher parameters.  */
-
-static void
-linux_nat_info_proc_cmd (char *args, int from_tty)
-{
-  linux_nat_info_proc_cmd_1 (args, IP_MINIMAL, from_tty);
-}
-
-/* Implement `info proc mappings'.  */
-
-static void
-linux_nat_info_proc_cmd_mappings (char *args, int from_tty)
-{
-  linux_nat_info_proc_cmd_1 (args, IP_MAPPINGS, from_tty);
-}
-
-/* Implement `info proc stat'.  */
-
-static void
-linux_nat_info_proc_cmd_stat (char *args, int from_tty)
-{
-  linux_nat_info_proc_cmd_1 (args, IP_STAT, from_tty);
-}
-
-/* Implement `info proc status'.  */
-
-static void
-linux_nat_info_proc_cmd_status (char *args, int from_tty)
-{
-  linux_nat_info_proc_cmd_1 (args, IP_STATUS, from_tty);
-}
-
-/* Implement `info proc cwd'.  */
-
-static void
-linux_nat_info_proc_cmd_cwd (char *args, int from_tty)
-{
-  linux_nat_info_proc_cmd_1 (args, IP_CWD, from_tty);
-}
-
-/* Implement `info proc cmdline'.  */
-
-static void
-linux_nat_info_proc_cmd_cmdline (char *args, int from_tty)
-{
-  linux_nat_info_proc_cmd_1 (args, IP_CMDLINE, from_tty);
-}
-
-/* Implement `info proc exe'.  */
-
-static void
-linux_nat_info_proc_cmd_exe (char *args, int from_tty)
-{
-  linux_nat_info_proc_cmd_1 (args, IP_EXE, from_tty);
-}
-
-/* Implement `info proc all'.  */
-
-static void
-linux_nat_info_proc_cmd_all (char *args, int from_tty)
-{
-  linux_nat_info_proc_cmd_1 (args, IP_ALL, from_tty);
+  /* FIXME: uweigand/2011-10-06: Once all GNU/Linux architectures have been
+     converted to gdbarch_core_regset_sections, this function can go away.  */
+  return linux_make_corefile_notes (target_gdbarch, obfd, note_size,
+				    linux_nat_collect_thread_registers);
 }
 
 /* Implement the to_xfer_partial interface for memory reads using the /proc
@@ -5359,6 +4643,73 @@ linux_xfer_partial (struct target_ops *ops, enum target_object object,
 			     offset, len);
 }
 
+static void
+cleanup_target_stop (void *arg)
+{
+  ptid_t *ptid = (ptid_t *) arg;
+
+  gdb_assert (arg != NULL);
+
+  /* Unpause all */
+  target_resume (*ptid, 0, GDB_SIGNAL_0);
+}
+
+static VEC(static_tracepoint_marker_p) *
+linux_child_static_tracepoint_markers_by_strid (const char *strid)
+{
+  char s[IPA_CMD_BUF_SIZE];
+  struct cleanup *old_chain;
+  int pid = ptid_get_pid (inferior_ptid);
+  VEC(static_tracepoint_marker_p) *markers = NULL;
+  struct static_tracepoint_marker *marker = NULL;
+  char *p = s;
+  ptid_t ptid = ptid_build (pid, 0, 0);
+
+  /* Pause all */
+  target_stop (ptid);
+
+  memcpy (s, "qTfSTM", sizeof ("qTfSTM"));
+  s[sizeof ("qTfSTM")] = 0;
+
+  agent_run_command (pid, s, strlen (s) + 1);
+
+  old_chain = make_cleanup (free_current_marker, &marker);
+  make_cleanup (cleanup_target_stop, &ptid);
+
+  while (*p++ == 'm')
+    {
+      if (marker == NULL)
+	marker = XCNEW (struct static_tracepoint_marker);
+
+      do
+	{
+	  parse_static_tracepoint_marker_definition (p, &p, marker);
+
+	  if (strid == NULL || strcmp (strid, marker->str_id) == 0)
+	    {
+	      VEC_safe_push (static_tracepoint_marker_p,
+			     markers, marker);
+	      marker = NULL;
+	    }
+	  else
+	    {
+	      release_static_tracepoint_marker (marker);
+	      memset (marker, 0, sizeof (*marker));
+	    }
+	}
+      while (*p++ == ',');	/* comma-separated list */
+
+      memcpy (s, "qTsSTM", sizeof ("qTsSTM"));
+      s[sizeof ("qTsSTM")] = 0;
+      agent_run_command (pid, s, strlen (s) + 1);
+      p = s;
+    }
+
+  do_cleanups (old_chain);
+
+  return markers;
+}
+
 /* Create a prototype generic GNU/Linux target.  The client can override
    it with local methods.  */
 
@@ -5376,11 +4727,13 @@ linux_target_install_ops (struct target_ops *t)
   t->to_post_startup_inferior = linux_child_post_startup_inferior;
   t->to_post_attach = linux_child_post_attach;
   t->to_follow_fork = linux_child_follow_fork;
-  t->to_find_memory_regions = linux_nat_find_memory_regions;
   t->to_make_corefile_notes = linux_nat_make_corefile_notes;
 
   super_xfer_partial = t->to_xfer_partial;
   t->to_xfer_partial = linux_xfer_partial;
+
+  t->to_static_tracepoint_markers_by_strid
+    = linux_child_static_tracepoint_markers_by_strid;
 }
 
 struct target_ops *
@@ -5603,7 +4956,7 @@ linux_nat_async (void (*callback) (enum inferior_event_type event_type,
   return;
 }
 
-/* Stop an LWP, and push a TARGET_SIGNAL_0 stop status if no other
+/* Stop an LWP, and push a GDB_SIGNAL_0 stop status if no other
    event came out.  */
 
 static int
@@ -5665,8 +5018,8 @@ static void
 linux_nat_close (int quitting)
 {
   /* Unregister from the event loop.  */
-  if (target_is_async_p ())
-    target_async (NULL, 0);
+  if (linux_nat_is_async_p ())
+    linux_nat_async (NULL, 0);
 
   if (linux_ops->to_close)
     linux_ops->to_close (quitting);
@@ -5679,7 +5032,7 @@ linux_nat_close (int quitting)
    lwpid is a "main" process id or not (it assumes so).  We reverse
    look up the "main" process id from the lwp here.  */
 
-struct address_space *
+static struct address_space *
 linux_nat_thread_address_space (struct target_ops *t, ptid_t ptid)
 {
   struct lwp_info *lwp;
@@ -5705,74 +5058,9 @@ linux_nat_thread_address_space (struct target_ops *t, ptid_t ptid)
   return inf->aspace;
 }
 
-int
-linux_nat_core_of_thread_1 (ptid_t ptid)
-{
-  struct cleanup *back_to;
-  char *filename;
-  FILE *f;
-  char *content = NULL;
-  char *p;
-  char *ts = 0;
-  int content_read = 0;
-  int i;
-  int core;
-
-  filename = xstrprintf ("/proc/%d/task/%ld/stat",
-			 GET_PID (ptid), GET_LWP (ptid));
-  back_to = make_cleanup (xfree, filename);
-
-  f = fopen (filename, "r");
-  if (!f)
-    {
-      do_cleanups (back_to);
-      return -1;
-    }
-
-  make_cleanup_fclose (f);
-
-  for (;;)
-    {
-      int n;
-
-      content = xrealloc (content, content_read + 1024);
-      n = fread (content + content_read, 1, 1024, f);
-      content_read += n;
-      if (n < 1024)
-	{
-	  content[content_read] = '\0';
-	  break;
-	}
-    }
-
-  make_cleanup (xfree, content);
-
-  p = strchr (content, '(');
-
-  /* Skip ")".  */
-  if (p != NULL)
-    p = strchr (p, ')');
-  if (p != NULL)
-    p++;
-
-  /* If the first field after program name has index 0, then core number is
-     the field with index 36.  There's no constant for that anywhere.  */
-  if (p != NULL)
-    p = strtok_r (p, " ", &ts);
-  for (i = 0; p != NULL && i != 36; ++i)
-    p = strtok_r (NULL, " ", &ts);
-
-  if (p == NULL || sscanf (p, "%d", &core) == 0)
-    core = -1;
-
-  do_cleanups (back_to);
-
-  return core;
-}
-
 /* Return the cached value of the processor core for thread PTID.  */
 
-int
+static int
 linux_nat_core_of_thread (struct target_ops *ops, ptid_t ptid)
 {
   struct lwp_info *info = find_lwp_pid (ptid);
@@ -5839,7 +5127,8 @@ linux_nat_add_target (struct target_ops *t)
 
 /* Register a method to call whenever a new thread is attached.  */
 void
-linux_nat_set_new_thread (struct target_ops *t, void (*new_thread) (ptid_t))
+linux_nat_set_new_thread (struct target_ops *t,
+			  void (*new_thread) (struct lwp_info *))
 {
   /* Save the pointer.  We only support a single registered instance
      of the GNU/Linux native target, so we do not need to map this to
@@ -5852,7 +5141,7 @@ linux_nat_set_new_thread (struct target_ops *t, void (*new_thread) (ptid_t))
    inferior.  */
 void
 linux_nat_set_siginfo_fixup (struct target_ops *t,
-			     int (*siginfo_fixup) (struct siginfo *,
+			     int (*siginfo_fixup) (siginfo_t *,
 						   gdb_byte *,
 						   int))
 {
@@ -5860,15 +5149,35 @@ linux_nat_set_siginfo_fixup (struct target_ops *t,
   linux_nat_siginfo_fixup = siginfo_fixup;
 }
 
-/* Return the saved siginfo associated with PTID.  */
-struct siginfo *
-linux_nat_get_siginfo (ptid_t ptid)
+/* Register a method to call prior to resuming a thread.  */
+
+void
+linux_nat_set_prepare_to_resume (struct target_ops *t,
+				 void (*prepare_to_resume) (struct lwp_info *))
 {
-  struct lwp_info *lp = find_lwp_pid (ptid);
+  /* Save the pointer.  */
+  linux_nat_prepare_to_resume = prepare_to_resume;
+}
 
-  gdb_assert (lp != NULL);
+/* See linux-nat.h.  */
+
+int
+linux_nat_get_siginfo (ptid_t ptid, siginfo_t *siginfo)
+{
+  int pid;
 
-  return &lp->siginfo;
+  pid = GET_LWP (ptid);
+  if (pid == 0)
+    pid = GET_PID (ptid);
+
+  errno = 0;
+  ptrace (PTRACE_GETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, siginfo);
+  if (errno != 0)
+    {
+      memset (siginfo, 0, sizeof (*siginfo));
+      return 0;
+    }
+  return 1;
 }
 
 /* Provide a prototype to silence -Wmissing-prototypes.  */
@@ -5877,43 +5186,6 @@ extern initialize_file_ftype _initialize_linux_nat;
 void
 _initialize_linux_nat (void)
 {
-  static struct cmd_list_element *info_proc_cmdlist;
-
-  add_prefix_cmd ("proc", class_info, linux_nat_info_proc_cmd,
-		  _("\
-Show /proc process information about any running process.\n\
-Specify any process id, or use the program being debugged by default."),
-		  &info_proc_cmdlist, "info proc ",
-		  1/*allow-unknown*/, &infolist);
-
-  add_cmd ("mappings", class_info, linux_nat_info_proc_cmd_mappings, _("\
-List of mapped memory regions."),
-	   &info_proc_cmdlist);
-
-  add_cmd ("stat", class_info, linux_nat_info_proc_cmd_stat, _("\
-List process info from /proc/PID/stat."),
-	   &info_proc_cmdlist);
-
-  add_cmd ("status", class_info, linux_nat_info_proc_cmd_status, _("\
-List process info from /proc/PID/status."),
-	   &info_proc_cmdlist);
-
-  add_cmd ("cwd", class_info, linux_nat_info_proc_cmd_cwd, _("\
-List current working directory of the process."),
-	   &info_proc_cmdlist);
-
-  add_cmd ("cmdline", class_info, linux_nat_info_proc_cmd_cmdline, _("\
-List command line arguments of the process."),
-	   &info_proc_cmdlist);
-
-  add_cmd ("exe", class_info, linux_nat_info_proc_cmd_exe, _("\
-List absolute filename for executable of the process."),
-	   &info_proc_cmdlist);
-
-  add_cmd ("all", class_info, linux_nat_info_proc_cmd_all, _("\
-List all available /proc info."),
-	   &info_proc_cmdlist);
-
   add_setshow_zinteger_cmd ("lin-lwp", class_maintenance,
 			    &debug_linux_nat, _("\
 Set debugging of GNU/Linux lwp module."), _("\
diff --git a/gdb/linux-nat.h b/gdb/linux-nat.h
index 2d4503e..50998b8 100644
--- a/gdb/linux-nat.h
+++ b/gdb/linux-nat.h
@@ -21,6 +21,8 @@
 
 #include <signal.h>
 
+struct arch_lwp_info;
+
 /* Ways to "resume" a thread.  */
 
 enum resume_kind
@@ -74,10 +76,6 @@ struct lwp_info
   /* Non-zero if we were stepping this LWP.  */
   int step;
 
-  /* Non-zero si_signo if this LWP stopped with a trap.  si_addr may
-     be the address of a hardware watchpoint.  */
-  struct siginfo siginfo;
-
   /* STOPPED_BY_WATCHPOINT is non-zero if this LWP stopped with a data
      watchpoint trap.  */
   int stopped_by_watchpoint;
@@ -108,6 +106,9 @@ struct lwp_info
   /* The processor core this LWP was last seen on.  */
   int core;
 
+  /* Arch-specific additions.  */
+  struct arch_lwp_info *arch_private;
+
   /* Next LWP in list.  */
   struct lwp_info *next;
 };
@@ -145,12 +146,20 @@ extern void linux_enable_event_reporting (ptid_t ptid);
 
 extern int lin_lwp_attach_lwp (ptid_t ptid);
 
+extern void linux_stop_lwp (struct lwp_info *lwp);
+
 /* Iterator function for lin-lwp's lwp list.  */
 struct lwp_info *iterate_over_lwps (ptid_t filter,
 				    int (*callback) (struct lwp_info *,
 						     void *), 
 				    void *data);
 
+typedef int (*linux_nat_iterate_watchpoint_lwps_ftype) (struct lwp_info *lwp,
+							void *arg);
+
+extern void linux_nat_iterate_watchpoint_lwps
+  (linux_nat_iterate_watchpoint_lwps_ftype callback, void *callback_data);
+
 /* Create a prototype generic GNU/Linux target.  The client can
    override it with local methods.  */
 struct target_ops * linux_target (void);
@@ -165,25 +174,29 @@ linux_trad_target (CORE_ADDR (*register_u_offset)(struct gdbarch *, int, int));
 void linux_nat_add_target (struct target_ops *);
 
 /* Register a method to call whenever a new thread is attached.  */
-void linux_nat_set_new_thread (struct target_ops *, void (*) (ptid_t));
+void linux_nat_set_new_thread (struct target_ops *, void (*) (struct lwp_info *));
 
 /* Register a method that converts a siginfo object between the layout
    that ptrace returns, and the layout in the architecture of the
    inferior.  */
 void linux_nat_set_siginfo_fixup (struct target_ops *,
-				  int (*) (struct siginfo *,
+				  int (*) (siginfo_t *,
 					   gdb_byte *,
 					   int));
 
+/* Register a method to call prior to resuming a thread.  */
+
+void linux_nat_set_prepare_to_resume (struct target_ops *,
+				      void (*) (struct lwp_info *));
+
 /* Update linux-nat internal state when changing from one fork
    to another.  */
 void linux_nat_switch_fork (ptid_t new_ptid);
 
-/* Return the saved siginfo associated with PTID.  */
-struct siginfo *linux_nat_get_siginfo (ptid_t ptid);
-
-/* Compute and return the processor core of a given thread.  */
-int linux_nat_core_of_thread_1 (ptid_t ptid);
+/* Store the saved siginfo associated with PTID in *SIGINFO.
+   Return 1 if it was retrieved successfully, 0 otherwise (*SIGINFO is
+   uninitialized in such case).  */
+int linux_nat_get_siginfo (ptid_t ptid, siginfo_t *siginfo);
 
 /* Set alternative SIGTRAP-like events recognizer.  */
 void linux_nat_set_status_is_event (struct target_ops *t,
diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c
index 5209dc1..b6f2efb 100644
--- a/gdb/linux-tdep.c
+++ b/gdb/linux-tdep.c
@@ -22,8 +22,16 @@
 #include "linux-tdep.h"
 #include "auxv.h"
 #include "target.h"
+#include "gdbthread.h"
+#include "gdbcore.h"
+#include "regcache.h"
+#include "regset.h"
 #include "elf/common.h"
+#include "elf-bfd.h"            /* for elfcore_write_* */
 #include "inferior.h"
+#include "cli/cli-utils.h"
+
+#include <ctype.h>
 
 static struct gdbarch_data *linux_gdbarch_data_handle;
 
@@ -165,8 +173,8 @@ linux_get_siginfo_type (struct gdbarch *gdbarch)
   return siginfo_type;
 }
 
-int
-linux_has_shared_address_space (void)
+static int
+linux_has_shared_address_space (struct gdbarch *gdbarch)
 {
   /* Determine whether we are running on uClinux or normal Linux
      kernel.  */
@@ -196,6 +204,651 @@ linux_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid)
   return normal_pid_to_str (ptid);
 }
 
+/* Service function for corefiles and info proc.  */
+
+static void
+read_mapping (const char *line,
+	      ULONGEST *addr, ULONGEST *endaddr,
+	      const char **permissions, size_t *permissions_len,
+	      ULONGEST *offset,
+              const char **device, size_t *device_len,
+	      ULONGEST *inode,
+	      const char **filename)
+{
+  const char *p = line;
+
+  *addr = strtoulst (p, &p, 16);
+  if (*p == '-')
+    p++;
+  *endaddr = strtoulst (p, &p, 16);
+
+  while (*p && isspace (*p))
+    p++;
+  *permissions = p;
+  while (*p && !isspace (*p))
+    p++;
+  *permissions_len = p - *permissions;
+
+  *offset = strtoulst (p, &p, 16);
+
+  while (*p && isspace (*p))
+    p++;
+  *device = p;
+  while (*p && !isspace (*p))
+    p++;
+  *device_len = p - *device;
+
+  *inode = strtoulst (p, &p, 10);
+
+  while (*p && isspace (*p))
+    p++;
+  *filename = p;
+}
+
+/* Implement the "info proc" command.  */
+
+static void
+linux_info_proc (struct gdbarch *gdbarch, char *args,
+		 enum info_proc_what what)
+{
+  /* A long is used for pid instead of an int to avoid a loss of precision
+     compiler warning from the output of strtoul.  */
+  long pid;
+  int cmdline_f = (what == IP_MINIMAL || what == IP_CMDLINE || what == IP_ALL);
+  int cwd_f = (what == IP_MINIMAL || what == IP_CWD || what == IP_ALL);
+  int exe_f = (what == IP_MINIMAL || what == IP_EXE || what == IP_ALL);
+  int mappings_f = (what == IP_MAPPINGS || what == IP_ALL);
+  int status_f = (what == IP_STATUS || what == IP_ALL);
+  int stat_f = (what == IP_STAT || what == IP_ALL);
+  char filename[100];
+  gdb_byte *data;
+  int target_errno;
+
+  if (args && isdigit (args[0]))
+    pid = strtoul (args, &args, 10);
+  else
+    {
+      if (!target_has_execution)
+	error (_("No current process: you must name one."));
+      if (current_inferior ()->fake_pid_p)
+	error (_("Can't determine the current process's PID: you must name one."));
+
+      pid = current_inferior ()->pid;
+    }
+
+  args = skip_spaces (args);
+  if (args && args[0])
+    error (_("Too many parameters: %s"), args);
+
+  printf_filtered (_("process %ld\n"), pid);
+  if (cmdline_f)
+    {
+      xsnprintf (filename, sizeof filename, "/proc/%ld/cmdline", pid);
+      data = target_fileio_read_stralloc (filename);
+      if (data)
+	{
+	  struct cleanup *cleanup = make_cleanup (xfree, data);
+          printf_filtered ("cmdline = '%s'\n", data);
+	  do_cleanups (cleanup);
+	}
+      else
+	warning (_("unable to open /proc file '%s'"), filename);
+    }
+  if (cwd_f)
+    {
+      xsnprintf (filename, sizeof filename, "/proc/%ld/cwd", pid);
+      data = target_fileio_readlink (filename, &target_errno);
+      if (data)
+	{
+	  struct cleanup *cleanup = make_cleanup (xfree, data);
+          printf_filtered ("cwd = '%s'\n", data);
+	  do_cleanups (cleanup);
+	}
+      else
+	warning (_("unable to read link '%s'"), filename);
+    }
+  if (exe_f)
+    {
+      xsnprintf (filename, sizeof filename, "/proc/%ld/exe", pid);
+      data = target_fileio_readlink (filename, &target_errno);
+      if (data)
+	{
+	  struct cleanup *cleanup = make_cleanup (xfree, data);
+          printf_filtered ("exe = '%s'\n", data);
+	  do_cleanups (cleanup);
+	}
+      else
+	warning (_("unable to read link '%s'"), filename);
+    }
+  if (mappings_f)
+    {
+      xsnprintf (filename, sizeof filename, "/proc/%ld/maps", pid);
+      data = target_fileio_read_stralloc (filename);
+      if (data)
+	{
+	  struct cleanup *cleanup = make_cleanup (xfree, data);
+	  char *line;
+
+	  printf_filtered (_("Mapped address spaces:\n\n"));
+	  if (gdbarch_addr_bit (gdbarch) == 32)
+	    {
+	      printf_filtered ("\t%10s %10s %10s %10s %s\n",
+			   "Start Addr",
+			   "  End Addr",
+			   "      Size", "    Offset", "objfile");
+            }
+	  else
+            {
+	      printf_filtered ("  %18s %18s %10s %10s %s\n",
+			   "Start Addr",
+			   "  End Addr",
+			   "      Size", "    Offset", "objfile");
+	    }
+
+	  for (line = strtok (data, "\n"); line; line = strtok (NULL, "\n"))
+	    {
+	      ULONGEST addr, endaddr, offset, inode;
+	      const char *permissions, *device, *filename;
+	      size_t permissions_len, device_len;
+
+	      read_mapping (line, &addr, &endaddr,
+			    &permissions, &permissions_len,
+			    &offset, &device, &device_len,
+			    &inode, &filename);
+
+	      if (gdbarch_addr_bit (gdbarch) == 32)
+	        {
+	          printf_filtered ("\t%10s %10s %10s %10s %s\n",
+				   paddress (gdbarch, addr),
+				   paddress (gdbarch, endaddr),
+				   hex_string (endaddr - addr),
+				   hex_string (offset),
+				   *filename? filename : "");
+		}
+	      else
+	        {
+	          printf_filtered ("  %18s %18s %10s %10s %s\n",
+				   paddress (gdbarch, addr),
+				   paddress (gdbarch, endaddr),
+				   hex_string (endaddr - addr),
+				   hex_string (offset),
+				   *filename? filename : "");
+	        }
+	    }
+
+	  do_cleanups (cleanup);
+	}
+      else
+	warning (_("unable to open /proc file '%s'"), filename);
+    }
+  if (status_f)
+    {
+      xsnprintf (filename, sizeof filename, "/proc/%ld/status", pid);
+      data = target_fileio_read_stralloc (filename);
+      if (data)
+	{
+	  struct cleanup *cleanup = make_cleanup (xfree, data);
+          puts_filtered (data);
+	  do_cleanups (cleanup);
+	}
+      else
+	warning (_("unable to open /proc file '%s'"), filename);
+    }
+  if (stat_f)
+    {
+      xsnprintf (filename, sizeof filename, "/proc/%ld/stat", pid);
+      data = target_fileio_read_stralloc (filename);
+      if (data)
+	{
+	  struct cleanup *cleanup = make_cleanup (xfree, data);
+	  const char *p = data;
+
+	  printf_filtered (_("Process: %s\n"),
+			   pulongest (strtoulst (p, &p, 10)));
+
+	  while (*p && isspace (*p))
+	    p++;
+	  if (*p == '(')
+	    {
+	      const char *ep = strchr (p, ')');
+	      if (ep != NULL)
+		{
+		  printf_filtered ("Exec file: %.*s\n",
+				   (int) (ep - p - 1), p + 1);
+		  p = ep + 1;
+		}
+	    }
+
+	  while (*p && isspace (*p))
+	    p++;
+	  if (*p)
+	    printf_filtered (_("State: %c\n"), *p++);
+
+	  if (*p)
+	    printf_filtered (_("Parent process: %s\n"),
+			     pulongest (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("Process group: %s\n"),
+			     pulongest (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("Session id: %s\n"),
+			     pulongest (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("TTY: %s\n"),
+			     pulongest (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("TTY owner process group: %s\n"),
+			     pulongest (strtoulst (p, &p, 10)));
+
+	  if (*p)
+	    printf_filtered (_("Flags: %s\n"),
+			     hex_string (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("Minor faults (no memory page): %s\n"),
+			     pulongest (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("Minor faults, children: %s\n"),
+			     pulongest (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("Major faults (memory page faults): %s\n"),
+			     pulongest (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("Major faults, children: %s\n"),
+			     pulongest (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("utime: %s\n"),
+			     pulongest (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("stime: %s\n"),
+			     pulongest (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("utime, children: %s\n"),
+			     pulongest (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("stime, children: %s\n"),
+			     pulongest (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("jiffies remaining in current "
+			       "time slice: %s\n"),
+			     pulongest (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("'nice' value: %s\n"),
+			     pulongest (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("jiffies until next timeout: %s\n"),
+			     pulongest (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("jiffies until next SIGALRM: %s\n"),
+			     pulongest (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("start time (jiffies since "
+			       "system boot): %s\n"),
+			     pulongest (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("Virtual memory size: %s\n"),
+			     pulongest (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("Resident set size: %s\n"),
+			     pulongest (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("rlim: %s\n"),
+			     pulongest (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("Start of text: %s\n"),
+			     hex_string (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("End of text: %s\n"),
+			     hex_string (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("Start of stack: %s\n"),
+			     hex_string (strtoulst (p, &p, 10)));
+#if 0	/* Don't know how architecture-dependent the rest is...
+	   Anyway the signal bitmap info is available from "status".  */
+	  if (*p)
+	    printf_filtered (_("Kernel stack pointer: %s\n"),
+			     hex_string (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("Kernel instr pointer: %s\n"),
+			     hex_string (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("Pending signals bitmap: %s\n"),
+			     hex_string (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("Blocked signals bitmap: %s\n"),
+			     hex_string (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("Ignored signals bitmap: %s\n"),
+			     hex_string (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("Catched signals bitmap: %s\n"),
+			     hex_string (strtoulst (p, &p, 10)));
+	  if (*p)
+	    printf_filtered (_("wchan (system call): %s\n"),
+			     hex_string (strtoulst (p, &p, 10)));
+#endif
+	  do_cleanups (cleanup);
+	}
+      else
+	warning (_("unable to open /proc file '%s'"), filename);
+    }
+}
+
+/* List memory regions in the inferior for a corefile.  */
+
+static int
+linux_find_memory_regions (struct gdbarch *gdbarch,
+			   find_memory_region_ftype func, void *obfd)
+{
+  char filename[100];
+  gdb_byte *data;
+
+  /* We need to know the real target PID to access /proc.  */
+  if (current_inferior ()->fake_pid_p)
+    return 1;
+
+  xsnprintf (filename, sizeof filename,
+	     "/proc/%d/maps", current_inferior ()->pid);
+  data = target_fileio_read_stralloc (filename);
+  if (data)
+    {
+      struct cleanup *cleanup = make_cleanup (xfree, data);
+      char *line;
+
+      for (line = strtok (data, "\n"); line; line = strtok (NULL, "\n"))
+	{
+	  ULONGEST addr, endaddr, offset, inode;
+	  const char *permissions, *device, *filename;
+	  size_t permissions_len, device_len;
+	  int read, write, exec;
+
+	  read_mapping (line, &addr, &endaddr, &permissions, &permissions_len,
+			&offset, &device, &device_len, &inode, &filename);
+
+	  /* Decode permissions.  */
+	  read = (memchr (permissions, 'r', permissions_len) != 0);
+	  write = (memchr (permissions, 'w', permissions_len) != 0);
+	  exec = (memchr (permissions, 'x', permissions_len) != 0);
+
+	  /* Invoke the callback function to create the corefile segment.  */
+	  func (addr, endaddr - addr, read, write, exec, obfd);
+	}
+
+      do_cleanups (cleanup);
+      return 0;
+    }
+
+  return 1;
+}
+
+/* Determine which signal stopped execution.  */
+
+static int
+find_signalled_thread (struct thread_info *info, void *data)
+{
+  if (info->suspend.stop_signal != GDB_SIGNAL_0
+      && ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid))
+    return 1;
+
+  return 0;
+}
+
+static enum gdb_signal
+find_stop_signal (void)
+{
+  struct thread_info *info =
+    iterate_over_threads (find_signalled_thread, NULL);
+
+  if (info)
+    return info->suspend.stop_signal;
+  else
+    return GDB_SIGNAL_0;
+}
+
+/* Generate corefile notes for SPU contexts.  */
+
+static char *
+linux_spu_make_corefile_notes (bfd *obfd, char *note_data, int *note_size)
+{
+  static const char *spu_files[] =
+    {
+      "object-id",
+      "mem",
+      "regs",
+      "fpcr",
+      "lslr",
+      "decr",
+      "decr_status",
+      "signal1",
+      "signal1_type",
+      "signal2",
+      "signal2_type",
+      "event_mask",
+      "event_status",
+      "mbox_info",
+      "ibox_info",
+      "wbox_info",
+      "dma_info",
+      "proxydma_info",
+   };
+
+  enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
+  gdb_byte *spu_ids;
+  LONGEST i, j, size;
+
+  /* Determine list of SPU ids.  */
+  size = target_read_alloc (&current_target, TARGET_OBJECT_SPU,
+			    NULL, &spu_ids);
+
+  /* Generate corefile notes for each SPU file.  */
+  for (i = 0; i < size; i += 4)
+    {
+      int fd = extract_unsigned_integer (spu_ids + i, 4, byte_order);
+
+      for (j = 0; j < sizeof (spu_files) / sizeof (spu_files[0]); j++)
+	{
+	  char annex[32], note_name[32];
+	  gdb_byte *spu_data;
+	  LONGEST spu_len;
+
+	  xsnprintf (annex, sizeof annex, "%d/%s", fd, spu_files[j]);
+	  spu_len = target_read_alloc (&current_target, TARGET_OBJECT_SPU,
+				       annex, &spu_data);
+	  if (spu_len > 0)
+	    {
+	      xsnprintf (note_name, sizeof note_name, "SPU/%s", annex);
+	      note_data = elfcore_write_note (obfd, note_data, note_size,
+					      note_name, NT_SPU,
+					      spu_data, spu_len);
+	      xfree (spu_data);
+
+	      if (!note_data)
+		{
+		  xfree (spu_ids);
+		  return NULL;
+		}
+	    }
+	}
+    }
+
+  if (size > 0)
+    xfree (spu_ids);
+
+  return note_data;
+}
+
+/* Records the thread's register state for the corefile note
+   section.  */
+
+static char *
+linux_collect_thread_registers (const struct regcache *regcache,
+				ptid_t ptid, bfd *obfd,
+				char *note_data, int *note_size,
+				enum gdb_signal stop_signal)
+{
+  struct gdbarch *gdbarch = get_regcache_arch (regcache);
+  struct core_regset_section *sect_list;
+  unsigned long lwp;
+
+  sect_list = gdbarch_core_regset_sections (gdbarch);
+  gdb_assert (sect_list);
+
+  /* For remote targets the LWP may not be available, so use the TID.  */
+  lwp = ptid_get_lwp (ptid);
+  if (!lwp)
+    lwp = ptid_get_tid (ptid);
+
+  while (sect_list->sect_name != NULL)
+    {
+      const struct regset *regset;
+      char *buf;
+
+      regset = gdbarch_regset_from_core_section (gdbarch,
+						 sect_list->sect_name,
+						 sect_list->size);
+      gdb_assert (regset && regset->collect_regset);
+
+      buf = xmalloc (sect_list->size);
+      regset->collect_regset (regset, regcache, -1, buf, sect_list->size);
+
+      /* PRSTATUS still needs to be treated specially.  */
+      if (strcmp (sect_list->sect_name, ".reg") == 0)
+	note_data = (char *) elfcore_write_prstatus
+			       (obfd, note_data, note_size, lwp,
+				gdb_signal_to_host (stop_signal), buf);
+      else
+	note_data = (char *) elfcore_write_register_note
+			       (obfd, note_data, note_size,
+				sect_list->sect_name, buf, sect_list->size);
+      xfree (buf);
+      sect_list++;
+
+      if (!note_data)
+	return NULL;
+    }
+
+  return note_data;
+}
+
+struct linux_corefile_thread_data
+{
+  struct gdbarch *gdbarch;
+  int pid;
+  bfd *obfd;
+  char *note_data;
+  int *note_size;
+  int num_notes;
+  enum gdb_signal stop_signal;
+  linux_collect_thread_registers_ftype collect;
+};
+
+/* Called by gdbthread.c once per thread.  Records the thread's
+   register state for the corefile note section.  */
+
+static int
+linux_corefile_thread_callback (struct thread_info *info, void *data)
+{
+  struct linux_corefile_thread_data *args = data;
+
+  if (ptid_get_pid (info->ptid) == args->pid)
+    {
+      struct cleanup *old_chain;
+      struct regcache *regcache;
+      regcache = get_thread_arch_regcache (info->ptid, args->gdbarch);
+
+      old_chain = save_inferior_ptid ();
+      inferior_ptid = info->ptid;
+      target_fetch_registers (regcache, -1);
+      do_cleanups (old_chain);
+
+      args->note_data = args->collect (regcache, info->ptid, args->obfd,
+				       args->note_data, args->note_size,
+				       args->stop_signal);
+      args->num_notes++;
+    }
+
+  return !args->note_data;
+}
+
+/* Fills the "to_make_corefile_note" target vector.  Builds the note
+   section for a corefile, and returns it in a malloc buffer.  */
+
+char *
+linux_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size,
+			   linux_collect_thread_registers_ftype collect)
+{
+  struct linux_corefile_thread_data thread_args;
+  char *note_data = NULL;
+  gdb_byte *auxv;
+  int auxv_len;
+
+  /* Process information.  */
+  if (get_exec_file (0))
+    {
+      const char *fname = lbasename (get_exec_file (0));
+      char *psargs = xstrdup (fname);
+
+      if (get_inferior_args ())
+        psargs = reconcat (psargs, psargs, " ", get_inferior_args (),
+			   (char *) NULL);
+
+      note_data = elfcore_write_prpsinfo (obfd, note_data, note_size,
+                                          fname, psargs);
+      xfree (psargs);
+
+      if (!note_data)
+	return NULL;
+    }
+
+  /* Thread register information.  */
+  thread_args.gdbarch = gdbarch;
+  thread_args.pid = ptid_get_pid (inferior_ptid);
+  thread_args.obfd = obfd;
+  thread_args.note_data = note_data;
+  thread_args.note_size = note_size;
+  thread_args.num_notes = 0;
+  thread_args.stop_signal = find_stop_signal ();
+  thread_args.collect = collect;
+  iterate_over_threads (linux_corefile_thread_callback, &thread_args);
+  note_data = thread_args.note_data;
+  if (!note_data)
+    return NULL;
+
+  /* Auxillary vector.  */
+  auxv_len = target_read_alloc (&current_target, TARGET_OBJECT_AUXV,
+				NULL, &auxv);
+  if (auxv_len > 0)
+    {
+      note_data = elfcore_write_note (obfd, note_data, note_size,
+				      "CORE", NT_AUXV, auxv, auxv_len);
+      xfree (auxv);
+
+      if (!note_data)
+	return NULL;
+    }
+
+  /* SPU information.  */
+  note_data = linux_spu_make_corefile_notes (obfd, note_data, note_size);
+  if (!note_data)
+    return NULL;
+
+  make_cleanup (xfree, note_data);
+  return note_data;
+}
+
+static char *
+linux_make_corefile_notes_1 (struct gdbarch *gdbarch, bfd *obfd, int *note_size)
+{
+  /* FIXME: uweigand/2011-10-06: Once all GNU/Linux architectures have been
+     converted to gdbarch_core_regset_sections, we no longer need to fall back
+     to the target method at this point.  */
+
+  if (!gdbarch_core_regset_sections (gdbarch))
+    return target_make_corefile_notes (obfd, note_size);
+  else
+    return linux_make_corefile_notes (gdbarch, obfd, note_size,
+				      linux_collect_thread_registers);
+}
+
 /* To be called from the various GDB_OSABI_LINUX handlers for the
    various GNU/Linux architectures and machine types.  */
 
@@ -203,8 +856,16 @@ void
 linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
   set_gdbarch_core_pid_to_str (gdbarch, linux_core_pid_to_str);
+  set_gdbarch_info_proc (gdbarch, linux_info_proc);
+  set_gdbarch_find_memory_regions (gdbarch, linux_find_memory_regions);
+  set_gdbarch_make_corefile_notes (gdbarch, linux_make_corefile_notes_1);
+  set_gdbarch_has_shared_address_space (gdbarch,
+					linux_has_shared_address_space);
 }
 
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_linux_tdep;
+
 void
 _initialize_linux_tdep (void)
 {
diff --git a/gdb/linux-tdep.h b/gdb/linux-tdep.h
index 4e9f560..b211b53 100644
--- a/gdb/linux-tdep.h
+++ b/gdb/linux-tdep.h
@@ -20,6 +20,18 @@
 #ifndef LINUX_TDEP_H
 #define LINUX_TDEP_H
 
+#include "bfd.h"
+
+struct regcache;
+
+typedef char *(*linux_collect_thread_registers_ftype) (const struct regcache *,
+						       ptid_t,
+						       bfd *, char *, int *,
+						       enum gdb_signal);
+
+char *linux_make_corefile_notes (struct gdbarch *, bfd *, int *,
+                                 linux_collect_thread_registers_ftype);
+
 struct type *linux_get_siginfo_type (struct gdbarch *);
 
 extern void linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch);
diff --git a/gdb/linux-thread-db.c b/gdb/linux-thread-db.c
index b64ac2e..bdf14df 100644
--- a/gdb/linux-thread-db.c
+++ b/gdb/linux-thread-db.c
@@ -40,12 +40,11 @@
 #include "observer.h"
 #include "linux-nat.h"
 #include "linux-procfs.h"
+#include "linux-osdata.h"
+#include "auto-load.h"
 
 #include <signal.h>
-
-#ifdef HAVE_GNU_LIBC_VERSION_H
-#include <gnu/libc-version.h>
-#endif
+#include <ctype.h>
 
 /* GNU/Linux libthread_db support.
 
@@ -75,6 +74,21 @@
 
 static char *libthread_db_search_path;
 
+/* Set to non-zero if thread_db auto-loading is enabled
+   by the "set auto-load libthread-db" command.  */
+static int auto_load_thread_db = 1;
+
+/* "show" command for the auto_load_thread_db configuration variable.  */
+
+static void
+show_auto_load_thread_db (struct ui_file *file, int from_tty,
+			  struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file, _("Auto-loading of inferior specific libthread_db "
+			    "is %s.\n"),
+		    value);
+}
+
 static void
 set_libthread_db_search_path (char *ignored, int from_tty,
 			      struct cmd_list_element *c)
@@ -119,6 +133,10 @@ struct thread_db_info
   /* Handle from dlopen for libthread_db.so.  */
   void *handle;
 
+  /* Absolute pathname from gdb_realpath to disk file used for dlopen-ing
+     HANDLE.  It may be NULL for system library.  */
+  char *filename;
+
   /* Structure that identifies the child process for the
      <proc_service.h> interface.  */
   struct ps_prochandle proc_handle;
@@ -248,6 +266,8 @@ delete_thread_db_info (int pid)
   if (info->handle != NULL)
     dlclose (info->handle);
 
+  xfree (info->filename);
+
   if (info_prev)
     info_prev->next = info->next;
   else
@@ -552,15 +572,42 @@ enable_thread_event (int event, CORE_ADDR *bp)
   return TD_OK;
 }
 
+/* Verify inferior's '\0'-terminated symbol VER_SYMBOL starts with "%d.%d" and
+   return 1 if this version is lower (and not equal) to
+   VER_MAJOR_MIN.VER_MINOR_MIN.  Return 0 in all other cases.  */
+
+static int
+inferior_has_bug (const char *ver_symbol, int ver_major_min, int ver_minor_min)
+{
+  struct minimal_symbol *version_msym;
+  CORE_ADDR version_addr;
+  char *version;
+  int err, got, retval = 0;
+
+  version_msym = lookup_minimal_symbol (ver_symbol, NULL, NULL);
+  if (version_msym == NULL)
+    return 0;
+
+  version_addr = SYMBOL_VALUE_ADDRESS (version_msym);
+  got = target_read_string (version_addr, &version, 32, &err);
+  if (err == 0 && memchr (version, 0, got) == &version[got -1])
+    {
+      int major, minor;
+
+      retval = (sscanf (version, "%d.%d", &major, &minor) == 2
+		&& (major < ver_major_min
+		    || (major == ver_major_min && minor < ver_minor_min)));
+    }
+  xfree (version);
+
+  return retval;
+}
+
 static void
 enable_thread_event_reporting (void)
 {
   td_thr_events_t events;
   td_err_e err;
-#ifdef HAVE_GNU_LIBC_VERSION_H
-  const char *libc_version;
-  int libc_major, libc_minor;
-#endif
   struct thread_db_info *info;
 
   info = get_thread_db_info (GET_PID (inferior_ptid));
@@ -577,14 +624,13 @@ enable_thread_event_reporting (void)
   td_event_emptyset (&events);
   td_event_addset (&events, TD_CREATE);
 
-#ifdef HAVE_GNU_LIBC_VERSION_H
-  /* The event reporting facility is broken for TD_DEATH events in
-     glibc 2.1.3, so don't enable it if we have glibc but a lower
-     version.  */
-  libc_version = gnu_get_libc_version ();
-  if (sscanf (libc_version, "%d.%d", &libc_major, &libc_minor) == 2
-      && (libc_major > 2 || (libc_major == 2 && libc_minor > 1)))
-#endif
+  /* There is a bug fixed between linuxthreads 2.1.3 and 2.2 by
+       commit 2e4581e4fba917f1779cd0a010a45698586c190a
+       * manager.c (pthread_exited): Correctly report event as TD_REAP
+       instead of TD_DEATH.  Fix comments.
+     where event reporting facility is broken for TD_DEATH events,
+     so don't enable it if we have glibc but a lower version.  */
+  if (!inferior_has_bug ("__linuxthreads_version", 2, 2))
     td_event_addset (&events, TD_DEATH);
 
   err = info->td_ta_set_event_p (info->thread_agent, &events);
@@ -619,9 +665,13 @@ enable_thread_event_reporting (void)
     }
 }
 
-/* Same as thread_db_find_new_threads_1, but silently ignore errors.  */
+/* Similar as thread_db_find_new_threads_1, but try to silently ignore errors
+   if appropriate.
 
-static void
+   Return 1 if the caller should abort libthread_db initialization.  Return 0
+   otherwise.  */
+
+static int
 thread_db_find_new_threads_silently (ptid_t ptid)
 {
   volatile struct gdb_exception except;
@@ -631,11 +681,37 @@ thread_db_find_new_threads_silently (ptid_t ptid)
       thread_db_find_new_threads_2 (ptid, 1);
     }
 
-  if (except.reason < 0 && libthread_db_debug)
+  if (except.reason < 0)
     {
-      exception_fprintf (gdb_stderr, except,
-			 "Warning: thread_db_find_new_threads_silently: ");
+      if (libthread_db_debug)
+	exception_fprintf (gdb_stderr, except,
+			   "Warning: thread_db_find_new_threads_silently: ");
+
+      /* There is a bug fixed between nptl 2.6.1 and 2.7 by
+	   commit 7d9d8bd18906fdd17364f372b160d7ab896ce909
+	 where calls to td_thr_get_info fail with TD_ERR for statically linked
+	 executables if td_thr_get_info is called before glibc has initialized
+	 itself.
+	 
+	 If the nptl bug is NOT present in the inferior and still thread_db
+	 reports an error return 1.  It means the inferior has corrupted thread
+	 list and GDB should fall back only to LWPs.
+
+	 If the nptl bug is present in the inferior return 0 to silently ignore
+	 such errors, and let gdb enumerate threads again later.  In such case
+	 GDB cannot properly display LWPs if the inferior thread list is
+	 corrupted.  For core files it does not apply, no 'later enumeration'
+	 is possible.  */
+
+      if (!target_has_execution || !inferior_has_bug ("nptl_version", 2, 7))
+	{
+	  exception_fprintf (gdb_stderr, except,
+			     _("Warning: couldn't activate thread debugging "
+			       "using libthread_db: "));
+	  return 1;
+	}
     }
+  return 0;
 }
 
 /* Lookup a library in which given symbol resides.
@@ -738,6 +814,14 @@ try_thread_db_load_1 (struct thread_db_info *info)
   info->td_thr_event_enable_p = dlsym (info->handle, "td_thr_event_enable");
   info->td_thr_tls_get_addr_p = dlsym (info->handle, "td_thr_tls_get_addr");
 
+  if (thread_db_find_new_threads_silently (inferior_ptid) != 0)
+    {
+      /* Even if libthread_db initializes, if the thread list is
+         corrupted, we'd not manage to list any threads.  Better reject this
+         thread_db, and fall back to at least listing LWPs.  */
+      return 0;
+    }
+
   printf_unfiltered (_("[Thread debugging using libthread_db enabled]\n"));
 
   if (libthread_db_debug || *libthread_db_search_path)
@@ -761,12 +845,6 @@ try_thread_db_load_1 (struct thread_db_info *info)
   if (target_has_execution)
     enable_thread_event_reporting ();
 
-  /* There appears to be a bug in glibc-2.3.6: calls to td_thr_get_info fail
-     with TD_ERR for statically linked executables if td_thr_get_info is
-     called before glibc has initialized itself.  Silently ignore such
-     errors, and let gdb enumerate threads again later.  */
-  thread_db_find_new_threads_silently (inferior_ptid);
-
   return 1;
 }
 
@@ -807,6 +885,10 @@ try_thread_db_load (const char *library)
 
   info = add_thread_db_info (handle);
 
+  /* Do not save system library name, that one is always trusted.  */
+  if (strchr (library, '/') != NULL)
+    info->filename = gdb_realpath (library);
+
   if (try_thread_db_load_1 (info))
     return 1;
 
@@ -841,7 +923,13 @@ try_thread_db_load_from_pdir_1 (struct objfile *obj)
   /* This should at minimum hit the first character.  */
   gdb_assert (cp != NULL);
   strcpy (cp + 1, LIBTHREAD_DB_SO);
-  result = try_thread_db_load (path);
+
+  if (!file_is_auto_load_safe (path, _("auto-load: Loading libthread-db "
+				       "library \"%s\" from $pdir.\n"),
+			       path))
+    result = 0;
+  else
+    result = try_thread_db_load (path);
 
   do_cleanups (cleanup);
   return result;
@@ -856,6 +944,9 @@ try_thread_db_load_from_pdir (void)
 {
   struct objfile *obj;
 
+  if (!auto_load_thread_db)
+    return 0;
+
   ALL_OBJFILES (obj)
     if (libpthread_name_p (obj->name))
       {
@@ -895,13 +986,23 @@ try_thread_db_load_from_dir (const char *dir, size_t dir_len)
   char *path;
   int result;
 
+  if (!auto_load_thread_db)
+    return 0;
+
   path = xmalloc (dir_len + 1 + strlen (LIBTHREAD_DB_SO) + 1);
   cleanup = make_cleanup (xfree, path);
 
   memcpy (path, dir, dir_len);
   path[dir_len] = '/';
   strcpy (path + dir_len + 1, LIBTHREAD_DB_SO);
-  result = try_thread_db_load (path);
+
+  if (!file_is_auto_load_safe (path, _("auto-load: Loading libthread-db "
+				       "library \"%s\" from explicit "
+				       "directory.\n"),
+			       path))
+    result = 0;
+  else
+    result = try_thread_db_load (path);
 
   do_cleanups (cleanup);
   return result;
@@ -1054,9 +1155,9 @@ check_thread_signals (void)
 	{
 	  if (sigismember (&mask, i))
 	    {
-	      if (signal_stop_update (target_signal_from_host (i), 0))
+	      if (signal_stop_update (gdb_signal_from_host (i), 0))
 		sigaddset (&thread_stop_set, i);
-	      if (signal_print_update (target_signal_from_host (i), 0))
+	      if (signal_print_update (gdb_signal_from_host (i), 0))
 		sigaddset (&thread_print_set, i);
 	      thread_signals = 1;
 	    }
@@ -1085,6 +1186,12 @@ thread_db_new_objfile (struct objfile *objfile)
      correctly.  */
 
   if (objfile != NULL
+      /* libpthread with separate debug info has its debug info file already
+	 loaded (and notified without successful thread_db initialization)
+	 the time observer_notify_new_objfile is called for the library itself.
+	 Static executables have their separate debug info loaded already
+	 before the inferior has started.  */
+      && objfile->separate_debug_objfile_backlink == NULL
       /* Only check for thread_db if we loaded libpthread,
 	 or if this is the main symbol file.
 	 We need to check OBJF_MAINLINE to handle the case of debugging
@@ -1116,7 +1223,7 @@ attach_thread (ptid_t ptid, const td_thrhandle_t *th_p,
 	       const td_thrinfo_t *ti_p)
 {
   struct private_thread_info *private;
-  struct thread_info *tp = NULL;
+  struct thread_info *tp;
   td_err_e err;
   struct thread_db_info *info;
 
@@ -1130,11 +1237,9 @@ attach_thread (ptid_t ptid, const td_thrhandle_t *th_p,
      thread ID.  In the first case we don't need to do anything; in
      the second case we should discard information about the dead
      thread and attach to the new one.  */
-  if (in_thread_list (ptid))
+  tp = find_thread_ptid (ptid);
+  if (tp != NULL)
     {
-      tp = find_thread_ptid (ptid);
-      gdb_assert (tp != NULL);
-
       /* If tp->private is NULL, then GDB is already attached to this
 	 thread, but we do not know anything about it.  We can learn
 	 about it here.  This can only happen if we have some other
@@ -1403,7 +1508,7 @@ thread_db_wait (struct target_ops *ops,
     thread_db_find_new_threads_1 (ptid);
 
   if (ourstatus->kind == TARGET_WAITKIND_STOPPED
-      && ourstatus->value.sig == TARGET_SIGNAL_TRAP)
+      && ourstatus->value.sig == GDB_SIGNAL_TRAP)
     /* Check for a thread event.  */
     check_event (ptid);
 
@@ -1567,7 +1672,7 @@ find_new_threads_once (struct thread_db_info *info, int iteration,
 static void
 thread_db_find_new_threads_2 (ptid_t ptid, int until_no_new)
 {
-  td_err_e err;
+  td_err_e err = TD_OK;
   struct thread_db_info *info;
   int pid = ptid_get_pid (ptid);
   int i, loop;
@@ -1583,17 +1688,18 @@ thread_db_find_new_threads_2 (ptid_t ptid, int until_no_new)
 	 The 4 is a heuristic: there is an inherent race here, and I have
 	 seen that 2 iterations in a row are not always sufficient to
 	 "capture" all threads.  */
-      for (i = 0, loop = 0; loop < 4; ++i, ++loop)
-	if (find_new_threads_once (info, i, NULL) != 0)
-	  /* Found some new threads.  Restart the loop from beginning.	*/
-	  loop = -1;
+      for (i = 0, loop = 0; loop < 4 && err == TD_OK; ++i, ++loop)
+	if (find_new_threads_once (info, i, &err) != 0)
+	  {
+	    /* Found some new threads.  Restart the loop from beginning.  */
+	    loop = -1;
+	  }
     }
   else
-    {
-      find_new_threads_once (info, 0, &err);
-      if (err != TD_OK)
-	error (_("Cannot find new threads: %s"), thread_db_err_str (err));
-    }
+    find_new_threads_once (info, 0, &err);
+
+  if (err != TD_OK)
+    error (_("Cannot find new threads: %s"), thread_db_err_str (err));
 }
 
 static void
@@ -1605,7 +1711,7 @@ thread_db_find_new_threads_1 (ptid_t ptid)
 static int
 update_thread_core (struct lwp_info *info, void *closure)
 {
-  info->core = linux_nat_core_of_thread_1 (info->ptid);
+  info->core = linux_common_core_of_thread (info->ptid);
   return 0;
 }
 
@@ -1783,7 +1889,7 @@ thread_db_get_ada_task_ptid (long lwp, long thread)
 
 static void
 thread_db_resume (struct target_ops *ops,
-		  ptid_t ptid, int step, enum target_signal signo)
+		  ptid_t ptid, int step, enum gdb_signal signo)
 {
   struct target_ops *beneath = find_target_beneath (ops);
   struct thread_db_info *info;
@@ -1802,6 +1908,150 @@ thread_db_resume (struct target_ops *ops,
   beneath->to_resume (beneath, ptid, step, signo);
 }
 
+/* qsort helper function for info_auto_load_libthread_db, sort the
+   thread_db_info pointers primarily by their FILENAME and secondarily by their
+   PID, both in ascending order.  */
+
+static int
+info_auto_load_libthread_db_compare (const void *ap, const void *bp)
+{
+  struct thread_db_info *a = *(struct thread_db_info **) ap;
+  struct thread_db_info *b = *(struct thread_db_info **) bp;
+  int retval;
+
+  retval = strcmp (a->filename, b->filename);
+  if (retval)
+    return retval;
+
+  return (a->pid > b->pid) - (a->pid - b->pid);
+}
+
+/* Implement 'info auto-load libthread-db'.  */
+
+static void
+info_auto_load_libthread_db (char *args, int from_tty)
+{
+  struct ui_out *uiout = current_uiout;
+  const char *cs = args ? args : "";
+  struct thread_db_info *info, **array;
+  unsigned info_count, unique_filenames;
+  size_t max_filename_len, max_pids_len, pids_len;
+  struct cleanup *back_to;
+  char *pids;
+  int i;
+
+  while (isspace (*cs))
+    cs++;
+  if (*cs)
+    error (_("'info auto-load libthread-db' does not accept any parameters"));
+
+  info_count = 0;
+  for (info = thread_db_list; info; info = info->next)
+    if (info->filename != NULL)
+      info_count++;
+
+  array = xmalloc (sizeof (*array) * info_count);
+  back_to = make_cleanup (xfree, array);
+
+  info_count = 0;
+  for (info = thread_db_list; info; info = info->next)
+    if (info->filename != NULL)
+      array[info_count++] = info;
+
+  /* Sort ARRAY by filenames and PIDs.  */
+
+  qsort (array, info_count, sizeof (*array),
+	 info_auto_load_libthread_db_compare);
+
+  /* Calculate the number of unique filenames (rows) and the maximum string
+     length of PIDs list for the unique filenames (columns).  */
+
+  unique_filenames = 0;
+  max_filename_len = 0;
+  max_pids_len = 0;
+  pids_len = 0;
+  for (i = 0; i < info_count; i++)
+    {
+      int pid = array[i]->pid;
+      size_t this_pid_len;
+
+      for (this_pid_len = 0; pid != 0; pid /= 10)
+	this_pid_len++;
+
+      if (i == 0 || strcmp (array[i - 1]->filename, array[i]->filename) != 0)
+	{
+	  unique_filenames++;
+	  max_filename_len = max (max_filename_len,
+				  strlen (array[i]->filename));
+
+	  if (i > 0)
+	    {
+	      pids_len -= strlen (", ");
+	      max_pids_len = max (max_pids_len, pids_len);
+	    }
+	  pids_len = 0;
+	}
+      pids_len += this_pid_len + strlen (", ");
+    }
+  if (i)
+    {
+      pids_len -= strlen (", ");
+      max_pids_len = max (max_pids_len, pids_len);
+    }
+
+  /* Table header shifted right by preceding "libthread-db:  " would not match
+     its columns.  */
+  if (info_count > 0 && args == auto_load_info_scripts_pattern_nl)
+    ui_out_text (uiout, "\n");
+
+  make_cleanup_ui_out_table_begin_end (uiout, 2, unique_filenames,
+				       "LinuxThreadDbTable");
+
+  ui_out_table_header (uiout, max_filename_len, ui_left, "filename",
+		       "Filename");
+  ui_out_table_header (uiout, pids_len, ui_left, "PIDs", "Pids");
+  ui_out_table_body (uiout);
+
+  pids = xmalloc (max_pids_len + 1);
+  make_cleanup (xfree, pids);
+
+  /* Note I is incremented inside the cycle, not at its end.  */
+  for (i = 0; i < info_count;)
+    {
+      struct cleanup *chain = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
+      char *pids_end;
+
+      info = array[i];
+      ui_out_field_string (uiout, "filename", info->filename);
+      pids_end = pids;
+
+      while (i < info_count && strcmp (info->filename, array[i]->filename) == 0)
+	{
+	  if (pids_end != pids)
+	    {
+	      *pids_end++ = ',';
+	      *pids_end++ = ' ';
+	    }
+	  pids_end += xsnprintf (pids_end, &pids[max_pids_len + 1] - pids_end,
+				 "%u", array[i]->pid);
+	  gdb_assert (pids_end < &pids[max_pids_len + 1]);
+
+	  i++;
+	}
+      *pids_end = '\0';
+
+      ui_out_field_string (uiout, "pids", pids);
+
+      ui_out_text (uiout, "\n");
+      do_cleanups (chain);
+    }
+
+  do_cleanups (back_to);
+
+  if (info_count == 0)
+    ui_out_message (uiout, 0, _("No auto-loaded libthread-db.\n"));
+}
+
 static void
 init_thread_db_ops (void)
 {
@@ -1863,6 +2113,23 @@ When non-zero, libthread-db debugging is enabled."),
 			    show_libthread_db_debug,
 			    &setdebuglist, &showdebuglist);
 
+  add_setshow_boolean_cmd ("libthread-db", class_support,
+			   &auto_load_thread_db, _("\
+Enable or disable auto-loading of inferior specific libthread_db."), _("\
+Show whether auto-loading inferior specific libthread_db is enabled."), _("\
+If enabled, libthread_db will be searched in 'set libthread-db-search-path'\n\
+locations to load libthread_db compatible with the inferior.\n\
+Standard system libthread_db still gets loaded even with this option off.\n\
+This options has security implications for untrusted inferiors."),
+			   NULL, show_auto_load_thread_db,
+			   auto_load_set_cmdlist_get (),
+			   auto_load_show_cmdlist_get ());
+
+  add_cmd ("libthread-db", class_info, info_auto_load_libthread_db,
+	   _("Print the list of loaded inferior specific libthread_db.\n\
+Usage: info auto-load libthread-db"),
+	   auto_load_info_cmdlist_get ());
+
   /* Add ourselves to objfile event chain.  */
   observer_attach_new_objfile (thread_db_new_objfile);
 
diff --git a/gdb/lm32-tdep.c b/gdb/lm32-tdep.c
index 06584af..57d73b5 100644
--- a/gdb/lm32-tdep.c
+++ b/gdb/lm32-tdep.c
@@ -188,7 +188,6 @@ static CORE_ADDR
 lm32_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
   CORE_ADDR func_addr, limit_pc;
-  struct symtab_and_line sal;
   struct lm32_frame_cache frame_info;
   struct trad_frame_saved_reg saved_regs[SIM_LM32_NUM_REGS];
 
@@ -263,8 +262,6 @@ lm32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
       struct type *arg_type = check_typedef (value_type (arg));
       gdb_byte *contents;
       int len;
-      int j;
-      int reg;
       ULONGEST val;
 
       /* Promote small integer types to int.  */
@@ -315,7 +312,6 @@ lm32_extract_return_value (struct type *type, struct regcache *regcache,
 {
   struct gdbarch *gdbarch = get_regcache_arch (regcache);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  int offset;
   ULONGEST l;
   CORE_ADDR return_buffer;
 
@@ -374,7 +370,7 @@ lm32_store_return_value (struct type *type, struct regcache *regcache,
 
 /* Determine whether a functions return value is in a register or memory.  */
 static enum return_value_convention
-lm32_return_value (struct gdbarch *gdbarch, struct type *func_type,
+lm32_return_value (struct gdbarch *gdbarch, struct value *function,
 		   struct type *valtype, struct regcache *regcache,
 		   gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -422,17 +418,11 @@ lm32_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
 static struct lm32_frame_cache *
 lm32_frame_cache (struct frame_info *this_frame, void **this_prologue_cache)
 {
-  CORE_ADDR prologue_pc;
   CORE_ADDR current_pc;
   ULONGEST prev_sp;
   ULONGEST this_base;
   struct lm32_frame_cache *info;
-  int prefixed;
-  unsigned long instruction;
-  int op;
-  int offsets[32];
   int i;
-  long immediate;
 
   if ((*this_prologue_cache))
     return (*this_prologue_cache);
@@ -590,6 +580,9 @@ lm32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   return gdbarch;
 }
 
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_lm32_tdep;
+
 void
 _initialize_lm32_tdep (void)
 {
diff --git a/gdb/m2-exp.c b/gdb/m2-exp.c
index 1e3f97a..3b7fd5f 100644
--- a/gdb/m2-exp.c
+++ b/gdb/m2-exp.c
@@ -219,6 +219,12 @@
 #define yygindex m2_yygindex
 #define yytable	 m2_yytable
 #define yycheck	 m2_yycheck
+#define yyss	m2_yyss
+#define yysslim	m2_yysslim
+#define yyssp	m2_yyssp
+#define yystacksize m2_yystacksize
+#define yyvs	m2_yyvs
+#define yyvsp	m2_yyvsp
 
 #ifndef YYDEBUG
 #define	YYDEBUG 1		/* Default to yydebug support */
@@ -232,21 +238,11 @@ static int yylex (void);
 
 void yyerror (char *);
 
-#if 0
-static char *make_qualname (char *, char *);
-#endif
-
 static int parse_number (int);
 
 /* The sign of the number being parsed.  */
 static int number_sign = 1;
 
-/* The block that the module specified by the qualifer on an identifer is
-   contained in, */
-#if 0
-static struct block *modblock=0;
-#endif
-
 
 
 /* Enabling traces.  */
@@ -263,7 +259,7 @@ static struct block *modblock=0;
 #endif
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 138 "m2-exp.y"
+#line 134 "m2-exp.y"
 typedef union YYSTYPE {
     LONGEST lval;
     ULONGEST ulval;
@@ -280,7 +276,7 @@ typedef union YYSTYPE {
     int *ivec;
   } YYSTYPE;
 /* Line 191 of yacc.c.  */
-#line 284 "m2-exp.c"
+#line 280 "m2-exp.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -292,7 +288,7 @@ typedef union YYSTYPE {
 
 
 /* Line 214 of yacc.c.  */
-#line 296 "m2-exp.c"
+#line 292 "m2-exp.c"
 
 #if ! defined (yyoverflow) || YYERROR_VERBOSE
 
@@ -507,15 +503,15 @@ static const yysigned_char yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short yyrline[] =
 {
-       0,   207,   207,   208,   211,   220,   225,   224,   231,   235,
-     239,   240,   243,   247,   251,   255,   259,   265,   271,   275,
-     281,   285,   289,   293,   297,   302,   306,   312,   316,   322,
-     328,   331,   335,   339,   343,   345,   355,   351,   362,   369,
-     366,   376,   379,   383,   388,   393,   398,   404,   410,   418,
-     422,   426,   430,   434,   438,   442,   446,   450,   452,   456,
-     460,   464,   468,   472,   476,   480,   487,   493,   499,   506,
-     515,   523,   530,   533,   540,   547,   551,   560,   572,   580,
-     584,   600,   645
+       0,   203,   203,   204,   207,   216,   221,   220,   227,   231,
+     235,   236,   239,   243,   247,   251,   255,   261,   267,   271,
+     277,   281,   285,   289,   293,   298,   302,   308,   312,   318,
+     324,   327,   331,   335,   339,   341,   351,   347,   358,   365,
+     362,   372,   375,   379,   384,   389,   394,   400,   406,   414,
+     418,   422,   426,   430,   434,   438,   442,   446,   448,   452,
+     456,   460,   464,   468,   472,   476,   483,   489,   495,   502,
+     511,   519,   526,   529,   536,   543,   547,   556,   568,   576,
+     580,   603,   648
 };
 #endif
 
@@ -1479,7 +1475,7 @@ yyreduce:
   switch (yyn)
     {
         case 4:
-#line 212 "m2-exp.y"
+#line 208 "m2-exp.y"
     { write_exp_elt_opcode(OP_TYPE);
 		  write_exp_elt_type(yyvsp[0].tval);
 		  write_exp_elt_opcode(OP_TYPE);
@@ -1487,327 +1483,327 @@ yyreduce:
     break;
 
   case 5:
-#line 221 "m2-exp.y"
+#line 217 "m2-exp.y"
     { write_exp_elt_opcode (UNOP_IND); }
     break;
 
   case 6:
-#line 225 "m2-exp.y"
+#line 221 "m2-exp.y"
     { number_sign = -1; }
     break;
 
   case 7:
-#line 227 "m2-exp.y"
+#line 223 "m2-exp.y"
     { number_sign = 1;
 			  write_exp_elt_opcode (UNOP_NEG); }
     break;
 
   case 8:
-#line 232 "m2-exp.y"
+#line 228 "m2-exp.y"
     { write_exp_elt_opcode(UNOP_PLUS); }
     break;
 
   case 9:
-#line 236 "m2-exp.y"
+#line 232 "m2-exp.y"
     { write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
     break;
 
   case 12:
-#line 244 "m2-exp.y"
+#line 240 "m2-exp.y"
     { write_exp_elt_opcode (UNOP_CAP); }
     break;
 
   case 13:
-#line 248 "m2-exp.y"
+#line 244 "m2-exp.y"
     { write_exp_elt_opcode (UNOP_ORD); }
     break;
 
   case 14:
-#line 252 "m2-exp.y"
+#line 248 "m2-exp.y"
     { write_exp_elt_opcode (UNOP_ABS); }
     break;
 
   case 15:
-#line 256 "m2-exp.y"
+#line 252 "m2-exp.y"
     { write_exp_elt_opcode (UNOP_HIGH); }
     break;
 
   case 16:
-#line 260 "m2-exp.y"
+#line 256 "m2-exp.y"
     { write_exp_elt_opcode (UNOP_MIN);
 			  write_exp_elt_type (yyvsp[-1].tval);
 			  write_exp_elt_opcode (UNOP_MIN); }
     break;
 
   case 17:
-#line 266 "m2-exp.y"
+#line 262 "m2-exp.y"
     { write_exp_elt_opcode (UNOP_MAX);
 			  write_exp_elt_type (yyvsp[-1].tval);
 			  write_exp_elt_opcode (UNOP_MAX); }
     break;
 
   case 18:
-#line 272 "m2-exp.y"
+#line 268 "m2-exp.y"
     { write_exp_elt_opcode (UNOP_FLOAT); }
     break;
 
   case 19:
-#line 276 "m2-exp.y"
+#line 272 "m2-exp.y"
     { write_exp_elt_opcode (BINOP_VAL);
 			  write_exp_elt_type (yyvsp[-3].tval);
 			  write_exp_elt_opcode (BINOP_VAL); }
     break;
 
   case 20:
-#line 282 "m2-exp.y"
+#line 278 "m2-exp.y"
     { write_exp_elt_opcode (UNOP_CHR); }
     break;
 
   case 21:
-#line 286 "m2-exp.y"
+#line 282 "m2-exp.y"
     { write_exp_elt_opcode (UNOP_ODD); }
     break;
 
   case 22:
-#line 290 "m2-exp.y"
+#line 286 "m2-exp.y"
     { write_exp_elt_opcode (UNOP_TRUNC); }
     break;
 
   case 23:
-#line 294 "m2-exp.y"
+#line 290 "m2-exp.y"
     { write_exp_elt_opcode (UNOP_SIZEOF); }
     break;
 
   case 24:
-#line 298 "m2-exp.y"
+#line 294 "m2-exp.y"
     { write_exp_elt_opcode (UNOP_SIZEOF); }
     break;
 
   case 25:
-#line 303 "m2-exp.y"
+#line 299 "m2-exp.y"
     { write_exp_elt_opcode(UNOP_PREINCREMENT); }
     break;
 
   case 26:
-#line 307 "m2-exp.y"
+#line 303 "m2-exp.y"
     { write_exp_elt_opcode(BINOP_ASSIGN_MODIFY);
 			  write_exp_elt_opcode(BINOP_ADD);
 			  write_exp_elt_opcode(BINOP_ASSIGN_MODIFY); }
     break;
 
   case 27:
-#line 313 "m2-exp.y"
+#line 309 "m2-exp.y"
     { write_exp_elt_opcode(UNOP_PREDECREMENT);}
     break;
 
   case 28:
-#line 317 "m2-exp.y"
+#line 313 "m2-exp.y"
     { write_exp_elt_opcode(BINOP_ASSIGN_MODIFY);
 			  write_exp_elt_opcode(BINOP_SUB);
 			  write_exp_elt_opcode(BINOP_ASSIGN_MODIFY); }
     break;
 
   case 29:
-#line 323 "m2-exp.y"
+#line 319 "m2-exp.y"
     { write_exp_elt_opcode (STRUCTOP_STRUCT);
 			  write_exp_string (yyvsp[0].sval);
 			  write_exp_elt_opcode (STRUCTOP_STRUCT); }
     break;
 
   case 31:
-#line 332 "m2-exp.y"
+#line 328 "m2-exp.y"
     { error (_("Sets are not implemented."));}
     break;
 
   case 32:
-#line 336 "m2-exp.y"
+#line 332 "m2-exp.y"
     { error (_("Sets are not implemented."));}
     break;
 
   case 33:
-#line 340 "m2-exp.y"
+#line 336 "m2-exp.y"
     { error (_("Sets are not implemented."));}
     break;
 
   case 34:
-#line 344 "m2-exp.y"
+#line 340 "m2-exp.y"
     { error (_("Sets are not implemented."));}
     break;
 
   case 35:
-#line 346 "m2-exp.y"
+#line 342 "m2-exp.y"
     { error (_("Sets are not implemented."));}
     break;
 
   case 36:
-#line 355 "m2-exp.y"
+#line 351 "m2-exp.y"
     { start_arglist(); }
     break;
 
   case 37:
-#line 357 "m2-exp.y"
+#line 353 "m2-exp.y"
     { write_exp_elt_opcode (MULTI_SUBSCRIPT);
 			  write_exp_elt_longcst ((LONGEST) end_arglist());
 			  write_exp_elt_opcode (MULTI_SUBSCRIPT); }
     break;
 
   case 38:
-#line 363 "m2-exp.y"
+#line 359 "m2-exp.y"
     { write_exp_elt_opcode (BINOP_SUBSCRIPT); }
     break;
 
   case 39:
-#line 369 "m2-exp.y"
+#line 365 "m2-exp.y"
     { start_arglist (); }
     break;
 
   case 40:
-#line 371 "m2-exp.y"
+#line 367 "m2-exp.y"
     { write_exp_elt_opcode (OP_FUNCALL);
 			  write_exp_elt_longcst ((LONGEST) end_arglist ());
 			  write_exp_elt_opcode (OP_FUNCALL); }
     break;
 
   case 42:
-#line 380 "m2-exp.y"
+#line 376 "m2-exp.y"
     { arglist_len = 1; }
     break;
 
   case 43:
-#line 384 "m2-exp.y"
+#line 380 "m2-exp.y"
     { arglist_len++; }
     break;
 
   case 44:
-#line 389 "m2-exp.y"
+#line 385 "m2-exp.y"
     { arglist_len = 1; }
     break;
 
   case 45:
-#line 394 "m2-exp.y"
+#line 390 "m2-exp.y"
     { arglist_len++; }
     break;
 
   case 46:
-#line 399 "m2-exp.y"
+#line 395 "m2-exp.y"
     { write_exp_elt_opcode (UNOP_MEMVAL);
 			  write_exp_elt_type (yyvsp[-2].tval);
 			  write_exp_elt_opcode (UNOP_MEMVAL); }
     break;
 
   case 47:
-#line 405 "m2-exp.y"
+#line 401 "m2-exp.y"
     { write_exp_elt_opcode (UNOP_CAST);
 			  write_exp_elt_type (yyvsp[-3].tval);
 			  write_exp_elt_opcode (UNOP_CAST); }
     break;
 
   case 48:
-#line 411 "m2-exp.y"
+#line 407 "m2-exp.y"
     { }
     break;
 
   case 49:
-#line 419 "m2-exp.y"
+#line 415 "m2-exp.y"
     { write_exp_elt_opcode (BINOP_REPEAT); }
     break;
 
   case 50:
-#line 423 "m2-exp.y"
+#line 419 "m2-exp.y"
     { write_exp_elt_opcode (BINOP_MUL); }
     break;
 
   case 51:
-#line 427 "m2-exp.y"
+#line 423 "m2-exp.y"
     { write_exp_elt_opcode (BINOP_DIV); }
     break;
 
   case 52:
-#line 431 "m2-exp.y"
+#line 427 "m2-exp.y"
     { write_exp_elt_opcode (BINOP_INTDIV); }
     break;
 
   case 53:
-#line 435 "m2-exp.y"
+#line 431 "m2-exp.y"
     { write_exp_elt_opcode (BINOP_REM); }
     break;
 
   case 54:
-#line 439 "m2-exp.y"
+#line 435 "m2-exp.y"
     { write_exp_elt_opcode (BINOP_ADD); }
     break;
 
   case 55:
-#line 443 "m2-exp.y"
+#line 439 "m2-exp.y"
     { write_exp_elt_opcode (BINOP_SUB); }
     break;
 
   case 56:
-#line 447 "m2-exp.y"
+#line 443 "m2-exp.y"
     { write_exp_elt_opcode (BINOP_EQUAL); }
     break;
 
   case 57:
-#line 451 "m2-exp.y"
+#line 447 "m2-exp.y"
     { write_exp_elt_opcode (BINOP_NOTEQUAL); }
     break;
 
   case 58:
-#line 453 "m2-exp.y"
+#line 449 "m2-exp.y"
     { write_exp_elt_opcode (BINOP_NOTEQUAL); }
     break;
 
   case 59:
-#line 457 "m2-exp.y"
+#line 453 "m2-exp.y"
     { write_exp_elt_opcode (BINOP_LEQ); }
     break;
 
   case 60:
-#line 461 "m2-exp.y"
+#line 457 "m2-exp.y"
     { write_exp_elt_opcode (BINOP_GEQ); }
     break;
 
   case 61:
-#line 465 "m2-exp.y"
+#line 461 "m2-exp.y"
     { write_exp_elt_opcode (BINOP_LESS); }
     break;
 
   case 62:
-#line 469 "m2-exp.y"
+#line 465 "m2-exp.y"
     { write_exp_elt_opcode (BINOP_GTR); }
     break;
 
   case 63:
-#line 473 "m2-exp.y"
+#line 469 "m2-exp.y"
     { write_exp_elt_opcode (BINOP_LOGICAL_AND); }
     break;
 
   case 64:
-#line 477 "m2-exp.y"
+#line 473 "m2-exp.y"
     { write_exp_elt_opcode (BINOP_LOGICAL_OR); }
     break;
 
   case 65:
-#line 481 "m2-exp.y"
+#line 477 "m2-exp.y"
     { write_exp_elt_opcode (BINOP_ASSIGN); }
     break;
 
   case 66:
-#line 488 "m2-exp.y"
+#line 484 "m2-exp.y"
     { write_exp_elt_opcode (OP_BOOL);
 			  write_exp_elt_longcst ((LONGEST) yyvsp[0].ulval);
 			  write_exp_elt_opcode (OP_BOOL); }
     break;
 
   case 67:
-#line 494 "m2-exp.y"
+#line 490 "m2-exp.y"
     { write_exp_elt_opcode (OP_BOOL);
 			  write_exp_elt_longcst ((LONGEST) yyvsp[0].ulval);
 			  write_exp_elt_opcode (OP_BOOL); }
     break;
 
   case 68:
-#line 500 "m2-exp.y"
+#line 496 "m2-exp.y"
     { write_exp_elt_opcode (OP_LONG);
 			  write_exp_elt_type (parse_m2_type->builtin_int);
 			  write_exp_elt_longcst ((LONGEST) yyvsp[0].lval);
@@ -1815,7 +1811,7 @@ yyreduce:
     break;
 
   case 69:
-#line 507 "m2-exp.y"
+#line 503 "m2-exp.y"
     {
 			  write_exp_elt_opcode (OP_LONG);
 			  write_exp_elt_type (parse_m2_type->builtin_card);
@@ -1825,7 +1821,7 @@ yyreduce:
     break;
 
   case 70:
-#line 516 "m2-exp.y"
+#line 512 "m2-exp.y"
     { write_exp_elt_opcode (OP_LONG);
 			  write_exp_elt_type (parse_m2_type->builtin_char);
 			  write_exp_elt_longcst ((LONGEST) yyvsp[0].ulval);
@@ -1833,7 +1829,7 @@ yyreduce:
     break;
 
   case 71:
-#line 524 "m2-exp.y"
+#line 520 "m2-exp.y"
     { write_exp_elt_opcode (OP_DOUBLE);
 			  write_exp_elt_type (parse_m2_type->builtin_real);
 			  write_exp_elt_dblcst (yyvsp[0].dval);
@@ -1841,7 +1837,7 @@ yyreduce:
     break;
 
   case 73:
-#line 534 "m2-exp.y"
+#line 530 "m2-exp.y"
     { write_exp_elt_opcode (OP_LONG);
 			  write_exp_elt_type (parse_type->builtin_int);
 			  write_exp_elt_longcst ((LONGEST) TYPE_LENGTH (yyvsp[-1].tval));
@@ -1849,19 +1845,19 @@ yyreduce:
     break;
 
   case 74:
-#line 541 "m2-exp.y"
+#line 537 "m2-exp.y"
     { write_exp_elt_opcode (OP_M2_STRING);
 			  write_exp_string (yyvsp[0].sval);
 			  write_exp_elt_opcode (OP_M2_STRING); }
     break;
 
   case 75:
-#line 548 "m2-exp.y"
+#line 544 "m2-exp.y"
     { yyval.bval = SYMBOL_BLOCK_VALUE(yyvsp[0].sym); }
     break;
 
   case 76:
-#line 552 "m2-exp.y"
+#line 548 "m2-exp.y"
     { struct symbol *sym
 			    = lookup_symbol (copy_name (yyvsp[0].sval), expression_context_block,
 					     VAR_DOMAIN, 0);
@@ -1869,7 +1865,7 @@ yyreduce:
     break;
 
   case 77:
-#line 561 "m2-exp.y"
+#line 557 "m2-exp.y"
     { struct symbol *tem
 			    = lookup_symbol (copy_name (yyvsp[0].sval), yyvsp[-2].bval,
 					     VAR_DOMAIN, 0);
@@ -1881,7 +1877,7 @@ yyreduce:
     break;
 
   case 78:
-#line 573 "m2-exp.y"
+#line 569 "m2-exp.y"
     { write_exp_elt_opcode(OP_VAR_VALUE);
 			  write_exp_elt_block (NULL);
 			  write_exp_elt_sym (yyvsp[0].sym);
@@ -1889,13 +1885,20 @@ yyreduce:
     break;
 
   case 80:
-#line 585 "m2-exp.y"
+#line 581 "m2-exp.y"
     { struct symbol *sym;
 			  sym = lookup_symbol (copy_name (yyvsp[0].sval), yyvsp[-2].bval,
 					       VAR_DOMAIN, 0);
 			  if (sym == 0)
 			    error (_("No symbol \"%s\" in specified context."),
 				   copy_name (yyvsp[0].sval));
+			  if (symbol_read_needs_frame (sym))
+			    {
+			      if (innermost_block == 0
+				  || contained_in (block_found,
+						   innermost_block))
+				innermost_block = block_found;
+			    }
 
 			  write_exp_elt_opcode (OP_VAR_VALUE);
 			  /* block_found is set by lookup_symbol.  */
@@ -1905,7 +1908,7 @@ yyreduce:
     break;
 
   case 81:
-#line 601 "m2-exp.y"
+#line 604 "m2-exp.y"
     { struct symbol *sym;
 			  int is_a_field_of_this;
 
@@ -1950,7 +1953,7 @@ yyreduce:
     break;
 
   case 82:
-#line 646 "m2-exp.y"
+#line 649 "m2-exp.y"
     { yyval.tval = lookup_typename (parse_language, parse_gdbarch,
 						copy_name (yyvsp[0].sval),
 						expression_context_block, 0); }
@@ -1960,7 +1963,7 @@ yyreduce:
     }
 
 /* Line 1000 of yacc.c.  */
-#line 1964 "m2-exp.c"
+#line 1967 "m2-exp.c"
 

   yyvsp -= yylen;
   yyssp -= yylen;
@@ -2185,7 +2188,7 @@ yyreturn:
 }
 
 
-#line 652 "m2-exp.y"
+#line 655 "m2-exp.y"
 
 
 /* Take care of parsing a number (anything that starts with a digit).
@@ -2195,8 +2198,7 @@ yyreturn:
 /*** Needs some error checking for the float case ***/
 
 static int
-parse_number (olen)
-     int olen;
+parse_number (int olen)
 {
   char *p = lexptr;
   LONGEST n = 0;
@@ -2606,23 +2608,8 @@ yylex (void)
  }
 }
 
-#if 0		/* Unused */
-static char *
-make_qualname(mod,ident)
-   char *mod, *ident;
-{
-   char *new = xmalloc(strlen(mod)+strlen(ident)+2);
-
-   strcpy(new,mod);
-   strcat(new,".");
-   strcat(new,ident);
-   return new;
-}
-#endif  /* 0 */
-
 void
-yyerror (msg)
-     char *msg;
+yyerror (char *msg)
 {
   if (prev_lexptr)
     lexptr = prev_lexptr;
diff --git a/gdb/m2-exp.y b/gdb/m2-exp.y
index 1e3e3cb..19f9c24 100644
--- a/gdb/m2-exp.y
+++ b/gdb/m2-exp.y
@@ -100,6 +100,12 @@
 #define yygindex m2_yygindex
 #define yytable	 m2_yytable
 #define yycheck	 m2_yycheck
+#define yyss	m2_yyss
+#define yysslim	m2_yysslim
+#define yyssp	m2_yyssp
+#define yystacksize m2_yystacksize
+#define yyvs	m2_yyvs
+#define yyvsp	m2_yyvsp
 
 #ifndef YYDEBUG
 #define	YYDEBUG 1		/* Default to yydebug support */
@@ -113,21 +119,11 @@ static int yylex (void);
 
 void yyerror (char *);
 
-#if 0
-static char *make_qualname (char *, char *);
-#endif
-
 static int parse_number (int);
 
 /* The sign of the number being parsed.  */
 static int number_sign = 1;
 
-/* The block that the module specified by the qualifer on an identifer is
-   contained in, */
-#if 0
-static struct block *modblock=0;
-#endif
-
 %}
 
 /* Although the yacc "value" of an expression is not used,
@@ -588,6 +584,13 @@ variable:	block COLONCOLON NAME
 			  if (sym == 0)
 			    error (_("No symbol \"%s\" in specified context."),
 				   copy_name ($3));
+			  if (symbol_read_needs_frame (sym))
+			    {
+			      if (innermost_block == 0
+				  || contained_in (block_found,
+						   innermost_block))
+				innermost_block = block_found;
+			    }
 
 			  write_exp_elt_opcode (OP_VAR_VALUE);
 			  /* block_found is set by lookup_symbol.  */
@@ -658,8 +661,7 @@ type
 /*** Needs some error checking for the float case ***/
 
 static int
-parse_number (olen)
-     int olen;
+parse_number (int olen)
 {
   char *p = lexptr;
   LONGEST n = 0;
@@ -1069,23 +1071,8 @@ yylex (void)
  }
 }
 
-#if 0		/* Unused */
-static char *
-make_qualname(mod,ident)
-   char *mod, *ident;
-{
-   char *new = malloc(strlen(mod)+strlen(ident)+2);
-
-   strcpy(new,mod);
-   strcat(new,".");
-   strcat(new,ident);
-   return new;
-}
-#endif  /* 0 */
-
 void
-yyerror (msg)
-     char *msg;
+yyerror (char *msg)
 {
   if (prev_lexptr)
     lexptr = prev_lexptr;
diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c
index e91ea32..8faa6c1 100644
--- a/gdb/m2-lang.c
+++ b/gdb/m2-lang.c
@@ -385,6 +385,7 @@ const struct language_defn m2_language_defn =
   m2_print_typedef,		/* Print a typedef using appropriate syntax */
   m2_val_print,			/* Print a value using appropriate syntax */
   c_value_print,		/* Print a top-level value */
+  default_read_var_value,	/* la_read_var_value */
   NULL,				/* Language specific skip_trampoline */
   NULL,		                /* name_of_this */
   basic_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
@@ -401,7 +402,7 @@ const struct language_defn m2_language_defn =
   default_print_array_index,
   default_pass_by_reference,
   default_get_string,
-  strcmp_iw_ordered,
+  NULL,				/* la_get_symbol_name_cmp */
   iterate_over_symbols,
   LANG_MAGIC
 };
diff --git a/gdb/m2-lang.h b/gdb/m2-lang.h
index 2803e63..fc6de34 100644
--- a/gdb/m2-lang.h
+++ b/gdb/m2-lang.h
@@ -32,10 +32,10 @@ extern void m2_print_typedef (struct type *, struct symbol *,
 extern int m2_is_long_set (struct type *type);
 extern int m2_is_unbounded_array (struct type *type);
 
-extern int m2_val_print (struct type *, const gdb_byte *, int, CORE_ADDR,
-			 struct ui_file *, int,
-			 const struct value *,
-			 const struct value_print_options *);
+extern void m2_val_print (struct type *, const gdb_byte *, int, CORE_ADDR,
+			  struct ui_file *, int,
+			  const struct value *,
+			  const struct value_print_options *);
 
 extern int get_long_set_bounds (struct type *type, LONGEST *low,
 				LONGEST *high);
diff --git a/gdb/m2-typeprint.c b/gdb/m2-typeprint.c
index 9735d7f..fb3d49c 100644
--- a/gdb/m2-typeprint.c
+++ b/gdb/m2-typeprint.c
@@ -607,10 +607,11 @@ m2_enum (struct type *type, struct ui_file *stream, int show, int level)
 	    fprintf_filtered (stream, ", ");
 	  wrap_here ("    ");
 	  fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
-	  if (lastval != TYPE_FIELD_BITPOS (type, i))
+	  if (lastval != TYPE_FIELD_ENUMVAL (type, i))
 	    {
-	      fprintf_filtered (stream, " = %d", TYPE_FIELD_BITPOS (type, i));
-	      lastval = TYPE_FIELD_BITPOS (type, i);
+	      fprintf_filtered (stream, " = %s",
+				plongest (TYPE_FIELD_ENUMVAL (type, i)));
+	      lastval = TYPE_FIELD_ENUMVAL (type, i);
 	    }
 	  lastval++;
 	}
diff --git a/gdb/m2-valprint.c b/gdb/m2-valprint.c
index 4378b00..e92679f 100644
--- a/gdb/m2-valprint.c
+++ b/gdb/m2-valprint.c
@@ -43,27 +43,6 @@ m2_print_array_contents (struct type *type, const gdb_byte *valaddr,
 			 int len);
 
 
-/* Print function pointer with inferior address ADDRESS onto stdio
-   stream STREAM.  */
-
-static void
-print_function_pointer_address (struct gdbarch *gdbarch, CORE_ADDR address,
-				struct ui_file *stream, int addressprint)
-{
-  CORE_ADDR func_addr = gdbarch_convert_from_func_ptr_addr (gdbarch, address,
-							    &current_target);
-
-  /* If the function pointer is represented by a description, print the
-     address of the description.  */
-  if (addressprint && func_addr != address)
-    {
-      fputs_filtered ("@", stream);
-      fputs_filtered (paddress (gdbarch, address), stream);
-      fputs_filtered (": ", stream);
-    }
-  print_address_demangle (gdbarch, func_addr, stream, demangle);
-}
-
 /* get_long_set_bounds - assigns the bounds of the long set to low and
                          high.  */
 
@@ -216,18 +195,21 @@ print_unpacked_pointer (struct type *type,
 {
   struct gdbarch *gdbarch = get_type_arch (type);
   struct type *elttype = check_typedef (TYPE_TARGET_TYPE (type));
+  int want_space = 0;
 
   if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
     {
       /* Try to print what function it points to.  */
-      print_function_pointer_address (gdbarch, addr, stream,
-				      options->addressprint);
+      print_function_pointer_address (options, gdbarch, addr, stream);
       /* Return value is irrelevant except for string pointers.  */
       return 0;
     }
 
   if (options->addressprint && options->format != 's')
-    fputs_filtered (paddress (gdbarch, address), stream);
+    {
+      fputs_filtered (paddress (gdbarch, address), stream);
+      want_space = 1;
+    }
 
   /* For a pointer to char or unsigned char, also print the string
      pointed to, unless pointer is null.  */
@@ -236,8 +218,12 @@ print_unpacked_pointer (struct type *type,
       && TYPE_CODE (elttype) == TYPE_CODE_INT
       && (options->format == 0 || options->format == 's')
       && addr != 0)
-    return val_print_string (TYPE_TARGET_TYPE (type), NULL, addr, -1,
-			     stream, options);
+    {
+      if (want_space)
+	fputs_filtered (" ", stream);
+      return val_print_string (TYPE_TARGET_TYPE (type), NULL, addr, -1,
+			       stream, options);
+    }
   
   return 0;
 }
@@ -309,12 +295,22 @@ m2_print_array_contents (struct type *type, const gdb_byte *valaddr,
     }
 }
 
+/* Decorations for Modula 2.  */
+
+static const struct generic_val_print_decorations m2_decorations =
+{
+  "",
+  " + ",
+  " * I",
+  "TRUE",
+  "FALSE",
+  "void"
+};
 
 /* See val_print for a description of the various parameters of this
-   function; they are identical.  The semantics of the return value is
-   also identical to val_print.  */
+   function; they are identical.  */
 
-int
+void
 m2_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
 	      CORE_ADDR address, struct ui_file *stream, int recurse,
 	      const struct value *original_value,
@@ -325,7 +321,6 @@ m2_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
   unsigned len;
   struct type *elttype;
   unsigned eltlen;
-  LONGEST val;
   CORE_ADDR addr;
 
   CHECK_TYPEDEF (type);
@@ -394,36 +389,6 @@ m2_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
 	}
       break;
 
-    case TYPE_CODE_REF:
-      elttype = check_typedef (TYPE_TARGET_TYPE (type));
-      if (options->addressprint)
-	{
-	  CORE_ADDR addr
-	    = extract_typed_address (valaddr + embedded_offset, type);
-
-	  fprintf_filtered (stream, "@");
-	  fputs_filtered (paddress (gdbarch, addr), stream);
-	  if (options->deref_ref)
-	    fputs_filtered (": ", stream);
-	}
-      /* De-reference the reference.  */
-      if (options->deref_ref)
-	{
-	  if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF)
-	    {
-	      struct value *deref_val =
-		value_at
-		(TYPE_TARGET_TYPE (type),
-		 unpack_pointer (type, valaddr + embedded_offset));
-
-	      common_val_print (deref_val, stream, recurse, options,
-				current_language);
-	    }
-	  else
-	    fputs_filtered ("???", stream);
-	}
-      break;
-
     case TYPE_CODE_UNION:
       if (recurse && !options->unionprint)
 	{
@@ -444,134 +409,6 @@ m2_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
 			       options, NULL, 0);
       break;
 
-    case TYPE_CODE_ENUM:
-      if (options->format)
-	{
-	  val_print_scalar_formatted (type, valaddr, embedded_offset,
-				      original_value, options, 0, stream);
-	  break;
-	}
-      len = TYPE_NFIELDS (type);
-      val = unpack_long (type, valaddr + embedded_offset);
-      for (i = 0; i < len; i++)
-	{
-	  QUIT;
-	  if (val == TYPE_FIELD_BITPOS (type, i))
-	    {
-	      break;
-	    }
-	}
-      if (i < len)
-	{
-	  fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
-	}
-      else
-	{
-	  print_longest (stream, 'd', 0, val);
-	}
-      break;
-
-    case TYPE_CODE_FUNC:
-      if (options->format)
-	{
-	  val_print_scalar_formatted (type, valaddr, embedded_offset,
-				      original_value, options, 0, stream);
-	  break;
-	}
-      /* FIXME, we should consider, at least for ANSI C language, eliminating
-         the distinction made between FUNCs and POINTERs to FUNCs.  */
-      fprintf_filtered (stream, "{");
-      type_print (type, "", stream, -1);
-      fprintf_filtered (stream, "} ");
-      /* Try to print what function it points to, and its address.  */
-      print_address_demangle (gdbarch, address, stream, demangle);
-      break;
-
-    case TYPE_CODE_BOOL:
-      if (options->format || options->output_format)
-	{
-	  struct value_print_options opts = *options;
-
-	  opts.format = (options->format ? options->format
-			 : options->output_format);
-	  val_print_scalar_formatted (type, valaddr, embedded_offset,
-				      original_value, &opts, 0, stream);
-	}
-      else
-	{
-	  val = unpack_long (type, valaddr + embedded_offset);
-	  if (val == 0)
-	    fputs_filtered ("FALSE", stream);
-	  else if (val == 1)
-	    fputs_filtered ("TRUE", stream);
-	  else
-	    fprintf_filtered (stream, "%ld)", (long int) val);
-	}
-      break;
-
-    case TYPE_CODE_RANGE:
-      if (TYPE_LENGTH (type) == TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
-	{
-	  m2_val_print (TYPE_TARGET_TYPE (type), valaddr, embedded_offset,
-			address, stream, recurse, original_value, options);
-	  break;
-	}
-      /* FIXME: create_range_type does not set the unsigned bit in a
-         range type (I think it probably should copy it from the target
-         type), so we won't print values which are too large to
-         fit in a signed integer correctly.  */
-      /* FIXME: Doesn't handle ranges of enums correctly.  (Can't just
-         print with the target type, though, because the size of our type
-         and the target type might differ).  */
-      /* FALLTHROUGH */
-
-    case TYPE_CODE_INT:
-      if (options->format || options->output_format)
-	{
-	  struct value_print_options opts = *options;
-
-	  opts.format = (options->format ? options->format
-			 : options->output_format);
-	  val_print_scalar_formatted (type, valaddr, embedded_offset,
-				      original_value, &opts, 0, stream);
-	}
-      else
-	val_print_type_code_int (type, valaddr + embedded_offset, stream);
-      break;
-
-    case TYPE_CODE_CHAR:
-      if (options->format || options->output_format)
-	{
-	  struct value_print_options opts = *options;
-
-	  opts.format = (options->format ? options->format
-			 : options->output_format);
-	  val_print_scalar_formatted (type, valaddr, embedded_offset,
-				      original_value, &opts, 0, stream);
-	}
-      else
-	{
-	  val = unpack_long (type, valaddr + embedded_offset);
-	  if (TYPE_UNSIGNED (type))
-	    fprintf_filtered (stream, "%u", (unsigned int) val);
-	  else
-	    fprintf_filtered (stream, "%d", (int) val);
-	  fputs_filtered (" ", stream);
-	  LA_PRINT_CHAR ((unsigned char) val, type, stream);
-	}
-      break;
-
-    case TYPE_CODE_FLT:
-      if (options->format)
-	val_print_scalar_formatted (type, valaddr, embedded_offset,
-				    original_value, options, 0, stream);
-      else
-	print_floating (valaddr + embedded_offset, type, stream);
-      break;
-
-    case TYPE_CODE_METHOD:
-      break;
-
     case TYPE_CODE_BITSTRING:
     case TYPE_CODE_SET:
       elttype = TYPE_INDEX_TYPE (type);
@@ -646,24 +483,38 @@ m2_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
 	}
       break;
 
-    case TYPE_CODE_VOID:
-      fprintf_filtered (stream, "void");
-      break;
+    case TYPE_CODE_RANGE:
+      if (TYPE_LENGTH (type) == TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
+	{
+	  m2_val_print (TYPE_TARGET_TYPE (type), valaddr, embedded_offset,
+			address, stream, recurse, original_value, options);
+	  break;
+	}
+      /* FIXME: create_range_type does not set the unsigned bit in a
+         range type (I think it probably should copy it from the target
+         type), so we won't print values which are too large to
+         fit in a signed integer correctly.  */
+      /* FIXME: Doesn't handle ranges of enums correctly.  (Can't just
+         print with the target type, though, because the size of our type
+         and the target type might differ).  */
+      /* FALLTHROUGH */
 
+    case TYPE_CODE_REF:
+    case TYPE_CODE_ENUM:
+    case TYPE_CODE_FUNC:
+    case TYPE_CODE_INT:
+    case TYPE_CODE_FLT:
+    case TYPE_CODE_METHOD:
+    case TYPE_CODE_VOID:
     case TYPE_CODE_ERROR:
-      fprintf_filtered (stream, "%s", TYPE_ERROR_NAME (type));
-      break;
-
     case TYPE_CODE_UNDEF:
-      /* This happens (without TYPE_FLAG_STUB set) on systems which don't use
-         dbx xrefs (NO_DBX_XREFS in gcc) if a file has a "struct foo *bar"
-         and no complete type for struct foo in that file.  */
-      fprintf_filtered (stream, _("<incomplete type>"));
-      break;
-
+    case TYPE_CODE_BOOL:
+    case TYPE_CODE_CHAR:
     default:
-      error (_("Invalid m2 type code %d in symbol table."), TYPE_CODE (type));
+      generic_val_print (type, valaddr, embedded_offset, address,
+			 stream, recurse, original_value, options,
+			 &m2_decorations);
+      break;
     }
   gdb_flush (stream);
-  return (0);
 }
diff --git a/gdb/m32c-tdep.c b/gdb/m32c-tdep.c
index 17bfd6a..b680fa0 100644
--- a/gdb/m32c-tdep.c
+++ b/gdb/m32c-tdep.c
@@ -1834,7 +1834,7 @@ m32c_analyze_prologue (struct gdbarch *arch,
 static CORE_ADDR
 m32c_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR ip)
 {
-  char *name;
+  const char *name;
   CORE_ADDR func_addr, func_end, sal_end;
   struct m32c_prologue p;
 
@@ -2206,7 +2206,7 @@ m32c_return_by_passed_buf (struct type *type)
 
 static enum return_value_convention
 m32c_return_value (struct gdbarch *gdbarch,
-		   struct type *func_type,
+		   struct value *function,
 		   struct type *valtype,
 		   struct regcache *regcache,
 		   gdb_byte *readbuf,
@@ -2353,7 +2353,7 @@ m32c_skip_trampoline_code (struct frame_info *frame, CORE_ADDR stop_pc)
      someone loaded a new executable, and I'm not quite sure of the
      best way to do that.  find_pc_partial_function does do some
      caching, so we'll see how this goes.  */
-  char *name;
+  const char *name;
   CORE_ADDR start, end;
 
   if (find_pc_partial_function (stop_pc, &name, &start, &end))
@@ -2452,7 +2452,7 @@ m32c_m16c_address_to_pointer (struct gdbarch *gdbarch,
 
   if (target_code == TYPE_CODE_FUNC || target_code == TYPE_CODE_METHOD)
     {
-      char *func_name;
+      const char *func_name;
       char *tramp_name;
       struct minimal_symbol *tramp_msym;
 
@@ -2539,7 +2539,7 @@ m32c_m16c_pointer_to_address (struct gdbarch *gdbarch,
 
       if (ptr_msym)
         {
-          char *ptr_msym_name = SYMBOL_LINKAGE_NAME (ptr_msym);
+          const char *ptr_msym_name = SYMBOL_LINKAGE_NAME (ptr_msym);
           int len = strlen (ptr_msym_name);
 
           if (len > 4
@@ -2586,8 +2586,8 @@ m32c_virtual_frame_pointer (struct gdbarch *gdbarch, CORE_ADDR pc,
 			    int *frame_regnum,
 			    LONGEST *frame_offset)
 {
-  char *name;
-  CORE_ADDR func_addr, func_end, sal_end;
+  const char *name;
+  CORE_ADDR func_addr, func_end;
   struct m32c_prologue p;
 
   struct regcache *regcache = get_current_regcache ();
diff --git a/gdb/m32r-linux-tdep.c b/gdb/m32r-linux-tdep.c
index de5ec4b..dce1a88 100644
--- a/gdb/m32r-linux-tdep.c
+++ b/gdb/m32r-linux-tdep.c
@@ -173,7 +173,7 @@ m32r_linux_rt_sigtramp_start (CORE_ADDR pc, struct frame_info *this_frame)
 }
 
 static int
-m32r_linux_pc_in_sigtramp (CORE_ADDR pc, char *name,
+m32r_linux_pc_in_sigtramp (CORE_ADDR pc, const char *name,
 			   struct frame_info *this_frame)
 {
   /* If we have NAME, we can optimize the search.  The trampolines are
@@ -293,7 +293,7 @@ m32r_linux_sigtramp_frame_sniffer (const struct frame_unwind *self,
 				   void **this_cache)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
-  char *name;
+  const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
   if (m32r_linux_pc_in_sigtramp (pc, name, this_frame))
diff --git a/gdb/m32r-rom.c b/gdb/m32r-rom.c
index b079b94..76e4bf1 100644
--- a/gdb/m32r-rom.c
+++ b/gdb/m32r-rom.c
@@ -122,8 +122,7 @@ static void
 m32r_load (char *filename, int from_tty)
 {
   bfd *abfd;
-  asection *s;
-  unsigned int i, data_count = 0;
+  unsigned int data_count = 0;
   struct timeval start_time, end_time;
 
   if (filename == NULL || filename[0] == 0)
@@ -238,8 +237,12 @@ m32r_supply_register (struct regcache *regcache, char *regname,
       monitor_supply_register (regcache, regno, val);
       if (regno == PSW_REGNUM)
 	{
+#if (defined SM_REGNUM || defined BSM_REGNUM || defined IE_REGNUM \
+     || defined BIE_REGNUM || defined COND_REGNUM  || defined CBR_REGNUM \
+     || defined BPC_REGNUM || defined BCARRY_REGNUM)
 	  unsigned long psw = strtoul (val, NULL, 16);
 	  char *zero = "00000000", *one = "00000001";
+#endif
 
 #ifdef SM_REGNUM
 	  /* Stack mode bit */
@@ -533,7 +536,6 @@ m32r_upload_command (char *args, int from_tty)
 	  {
 	    bfd_size_type section_size = bfd_section_size (abfd, s);
 	    bfd_vma section_base = bfd_section_lma (abfd, s);
-	    unsigned int buffer;
 
 	    data_count += section_size;
 
diff --git a/gdb/m32r-tdep.c b/gdb/m32r-tdep.c
index 72872bd..150b9de 100644
--- a/gdb/m32r-tdep.c
+++ b/gdb/m32r-tdep.c
@@ -85,7 +85,7 @@ m32r_memory_insert_breakpoint (struct gdbarch *gdbarch,
   CORE_ADDR addr = bp_tgt->placed_address;
   int val;
   gdb_byte buf[4];
-  gdb_byte *contents_cache = bp_tgt->shadow_contents;
+  gdb_byte contents_cache[4];
   gdb_byte bp_entry[] = { 0x10, 0xf1 };	/* dpt */
 
   /* Save the memory contents.  */
@@ -93,6 +93,7 @@ m32r_memory_insert_breakpoint (struct gdbarch *gdbarch,
   if (val != 0)
     return val;			/* return error */
 
+  memcpy (bp_tgt->shadow_contents, contents_cache, 4);
   bp_tgt->placed_size = bp_tgt->shadow_len = 4;
 
   /* Determine appropriate breakpoint contents and size for this address.  */
@@ -536,7 +537,7 @@ m32r_frame_unwind_cache (struct frame_info *this_frame,
   CORE_ADDR pc, scan_limit;
   ULONGEST prev_sp;
   ULONGEST this_base;
-  unsigned long op, op2;
+  unsigned long op;
   int i;
   struct m32r_unwind_cache *info;
 
@@ -696,7 +697,6 @@ m32r_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
   gdb_byte *val;
   gdb_byte valbuf[MAX_REGISTER_SIZE];
   int len;
-  int odd_sized_struct;
 
   /* First force sp to a 4-byte alignment.  */
   sp = sp & ~3;
@@ -808,7 +808,7 @@ m32r_extract_return_value (struct type *type, struct regcache *regcache,
 }
 
 static enum return_value_convention
-m32r_return_value (struct gdbarch *gdbarch, struct type *func_type,
+m32r_return_value (struct gdbarch *gdbarch, struct value *function,
 		   struct type *valtype, struct regcache *regcache,
 		   gdb_byte *readbuf, const gdb_byte *writebuf)
 {
diff --git a/gdb/m68hc11-tdep.c b/gdb/m68hc11-tdep.c
index 1215de8..79629ef 100644
--- a/gdb/m68hc11-tdep.c
+++ b/gdb/m68hc11-tdep.c
@@ -1323,7 +1323,7 @@ m68hc11_extract_return_value (struct type *type, struct regcache *regcache,
 }
 
 static enum return_value_convention
-m68hc11_return_value (struct gdbarch *gdbarch, struct type *func_type,
+m68hc11_return_value (struct gdbarch *gdbarch, struct value *function,
 		      struct type *valtype, struct regcache *regcache,
 		      gdb_byte *readbuf, const gdb_byte *writebuf)
 {
diff --git a/gdb/m68k-tdep.c b/gdb/m68k-tdep.c
index ee72026..b1e2cd4 100644
--- a/gdb/m68k-tdep.c
+++ b/gdb/m68k-tdep.c
@@ -403,7 +403,7 @@ m68k_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
    from WRITEBUF into REGCACHE.  */
 
 static enum return_value_convention
-m68k_return_value (struct gdbarch *gdbarch, struct type *func_type,
+m68k_return_value (struct gdbarch *gdbarch, struct value *function,
 		   struct type *type, struct regcache *regcache,
 		   gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -438,7 +438,7 @@ m68k_return_value (struct gdbarch *gdbarch, struct type *func_type,
 }
 
 static enum return_value_convention
-m68k_svr4_return_value (struct gdbarch *gdbarch, struct type *func_type,
+m68k_svr4_return_value (struct gdbarch *gdbarch, struct value *function,
 			struct type *type, struct regcache *regcache,
 			gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -477,7 +477,7 @@ m68k_svr4_return_value (struct gdbarch *gdbarch, struct type *func_type,
   if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
     {
       type = check_typedef (TYPE_FIELD_TYPE (type, 0));
-      return m68k_svr4_return_value (gdbarch, func_type, type, regcache,
+      return m68k_svr4_return_value (gdbarch, function, type, regcache,
 				     readbuf, writebuf);
     }
 
@@ -854,7 +854,6 @@ m68k_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
 {
   struct m68k_frame_cache cache;
   CORE_ADDR pc;
-  int op;
 
   cache.locals = -1;
   pc = m68k_analyze_prologue (gdbarch, start_pc, (CORE_ADDR) -1, &cache);
@@ -1051,6 +1050,16 @@ m68k_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
 }
 

 
+/* This is the implementation of gdbarch method
+   return_in_first_hidden_param_p.  */
+
+static int
+m68k_return_in_first_hidden_param_p (struct gdbarch *gdbarch,
+				     struct type *type)
+{
+  return 0;
+}
+
 /* System V Release 4 (SVR4).  */
 
 void
@@ -1236,6 +1245,8 @@ m68k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   /* Function call & return.  */
   set_gdbarch_push_dummy_call (gdbarch, m68k_push_dummy_call);
   set_gdbarch_return_value (gdbarch, m68k_return_value);
+  set_gdbarch_return_in_first_hidden_param_p (gdbarch,
+					      m68k_return_in_first_hidden_param_p);
 
 
   /* Disassembler.  */
diff --git a/gdb/m68klinux-nat.c b/gdb/m68klinux-nat.c
index 60e4373..3be7c14 100644
--- a/gdb/m68klinux-nat.c
+++ b/gdb/m68klinux-nat.c
@@ -51,6 +51,13 @@
 
 /* Prototypes for supply_gregset etc.  */
 #include "gregset.h"
+
+/* Defines ps_err_e, struct ps_prochandle.  */
+#include "gdb_proc_service.h"
+
+#ifndef PTRACE_GET_THREAD_AREA
+#define PTRACE_GET_THREAD_AREA 25
+#endif
 

 /* This table must line up with gdbarch_register_name in "m68k-tdep.c".  */
 static const int regmap[] =
@@ -69,20 +76,20 @@ static const int regmap[] =
 #define NUM_GREGS (18)
 #define MAX_NUM_REGS (NUM_GREGS + 11)
 
-int
+static int
 getregs_supplies (int regno)
 {
   return 0 <= regno && regno < NUM_GREGS;
 }
 
-int
+static int
 getfpregs_supplies (int regno)
 {
   return M68K_FP0_REGNUM <= regno && regno <= M68K_FPI_REGNUM;
 }
 
 /* Does the current host support the GETREGS request?  */
-int have_ptrace_getregs =
+static int have_ptrace_getregs =
 #ifdef HAVE_PTRACE_GETREGS
   1
 #else
@@ -100,7 +107,7 @@ static void
 fetch_register (struct regcache *regcache, int regno)
 {
   struct gdbarch *gdbarch = get_regcache_arch (regcache);
-  long regaddr;
+  long regaddr, val;
   int i;
   char buf[MAX_REGISTER_SIZE];
   int tid;
@@ -115,7 +122,8 @@ fetch_register (struct regcache *regcache, int regno)
   for (i = 0; i < register_size (gdbarch, regno); i += sizeof (long))
     {
       errno = 0;
-      *(long *) &buf[i] = ptrace (PTRACE_PEEKUSER, tid, regaddr, 0);
+      val = ptrace (PTRACE_PEEKUSER, tid, regaddr, 0);
+      memcpy (&buf[i], &val, sizeof (long));
       regaddr += sizeof (long);
       if (errno != 0)
 	error (_("Couldn't read register %s (#%d): %s."), 
@@ -153,7 +161,7 @@ static void
 store_register (const struct regcache *regcache, int regno)
 {
   struct gdbarch *gdbarch = get_regcache_arch (regcache);
-  long regaddr;
+  long regaddr, val;
   int i;
   int tid;
   char buf[MAX_REGISTER_SIZE];
@@ -173,7 +181,8 @@ store_register (const struct regcache *regcache, int regno)
   for (i = 0; i < register_size (gdbarch, regno); i += sizeof (long))
     {
       errno = 0;
-      ptrace (PTRACE_POKEUSER, tid, regaddr, *(long *) &buf[i]);
+      memcpy (&val, &buf[i], sizeof (long));
+      ptrace (PTRACE_POKEUSER, tid, regaddr, val);
       regaddr += sizeof (long);
       if (errno != 0)
 	error (_("Couldn't write register %s (#%d): %s."),
@@ -556,6 +565,24 @@ fetch_core_registers (struct regcache *regcache,
 }
 

 
+/* Fetch the thread-local storage pointer for libthread_db.  */
+
+ps_err_e
+ps_get_thread_area (const struct ps_prochandle *ph, 
+		    lwpid_t lwpid, int idx, void **base)
+{
+  if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, NULL, base) < 0)
+    return PS_ERR;
+
+  /* IDX is the bias from the thread pointer to the beginning of the
+     thread descriptor.  It has to be subtracted due to implementation
+     quirks in libthread_db.  */
+  *base = (char *) *base - idx;
+
+  return PS_OK;
+}
+

+
 /* Register that we are able to handle GNU/Linux ELF core file
    formats.  */
 
diff --git a/gdb/m68klinux-tdep.c b/gdb/m68klinux-tdep.c
index cf53bae..d6dc3ee 100644
--- a/gdb/m68klinux-tdep.c
+++ b/gdb/m68klinux-tdep.c
@@ -68,7 +68,6 @@ m68k_linux_pc_in_sigtramp (struct frame_info *this_frame)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  CORE_ADDR sp;
   gdb_byte buf[12];
   unsigned long insn0, insn1, insn2;
   CORE_ADDR pc = get_frame_pc (this_frame);
@@ -372,6 +371,8 @@ m68k_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   /* Enable TLS support.  */
   set_gdbarch_fetch_tls_load_module_address (gdbarch,
                                              svr4_fetch_objfile_link_map);
+
+  set_gdbarch_get_siginfo_type (gdbarch, linux_get_siginfo_type);
 }
 
 /* Provide a prototype to silence -Wmissing-prototypes.  */
diff --git a/gdb/m88k-tdep.c b/gdb/m88k-tdep.c
index 1fda594..c4c3266 100644
--- a/gdb/m88k-tdep.c
+++ b/gdb/m88k-tdep.c
@@ -383,7 +383,7 @@ m88k_dummy_id (struct gdbarch *arch, struct frame_info *this_frame)
    from WRITEBUF into REGCACHE.  */
 
 static enum return_value_convention
-m88k_return_value (struct gdbarch *gdbarch, struct type *func_type,
+m88k_return_value (struct gdbarch *gdbarch, struct value *function,
 		   struct type *type, struct regcache *regcache,
 		   gdb_byte *readbuf, const gdb_byte *writebuf)
 {
diff --git a/gdb/machoread.c b/gdb/machoread.c
index 9fa97e1..22530ab 100644
--- a/gdb/machoread.c
+++ b/gdb/machoread.c
@@ -126,11 +126,11 @@ macho_symtab_add_minsym (struct objfile *objfile, const asymbol *sym)
          interested in will have a section.  */
       /* Relocate all non-absolute and non-TLS symbols by the
          section offset.  */
-      if (sym->section != &bfd_abs_section
+      if (sym->section != bfd_abs_section_ptr
           && !(sym->section->flags & SEC_THREAD_LOCAL))
         symaddr += offset;
 
-      if (sym->section == &bfd_abs_section)
+      if (sym->section == bfd_abs_section_ptr)
         ms_type = mst_abs;
       else if (sym->section->flags & SEC_CODE)
         {
@@ -180,7 +180,7 @@ macho_symtab_read (struct objfile *objfile,
   const asymbol *dir_so = NULL;
   const asymbol *file_so = NULL;
   asymbol **oso_file = NULL;
-  unsigned int nbr_syms;
+  unsigned int nbr_syms = 0;
 
   /* Current state while reading stabs.  */
   enum
@@ -563,7 +563,7 @@ macho_add_oso_symfile (oso_el *oso, bfd *abfd,
           res = macho_resolve_oso_sym_with_minsym (main_objfile, sym);
           if (res != 0)
             {
-              sym->section = &bfd_com_section;
+              sym->section = bfd_com_section_ptr;
               sym->value = res;
             }
         }
@@ -1032,9 +1032,13 @@ static const struct sym_fns macho_sym_fns = {
   default_symfile_segments,	/* Get segment information from a file.  */
   NULL,
   macho_symfile_relocate,	/* Relocate a debug section.  */
+  NULL,				/* sym_get_probes */
   &psym_functions
 };
 
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_machoread;
+
 void
 _initialize_machoread ()
 {
diff --git a/gdb/macrocmd.c b/gdb/macrocmd.c
index 367f211..a327cad 100644
--- a/gdb/macrocmd.c
+++ b/gdb/macrocmd.c
@@ -26,6 +26,7 @@
 #include "command.h"
 #include "gdbcmd.h"
 #include "gdb_string.h"
+#include "linespec.h"
 
 

 /* The `macro' prefix command.  */
@@ -282,7 +283,8 @@ info_macros_command (char *args, int from_tty)
     ms = default_macro_scope ();
   else
     {
-      struct symtabs_and_lines sals = decode_line_spec (args, 0);
+      struct symtabs_and_lines sals =
+	decode_line_with_current_source (args, 0);
 
       if (sals.nelts)
         ms = sal_macro_scope (sals.sals[0]);
diff --git a/gdb/macroexp.c b/gdb/macroexp.c
index d5e4e40..fa34311 100644
--- a/gdb/macroexp.c
+++ b/gdb/macroexp.c
@@ -113,6 +113,17 @@ free_buffer (struct macro_buffer *b)
     xfree (b->text);
 }
 
+/* Like free_buffer, but return the text as an xstrdup()d string.
+   This only exists to try to make the API relatively clean.  */
+
+static char *
+free_buffer_return_text (struct macro_buffer *b)
+{
+  gdb_assert (! b->shared);
+  gdb_assert (b->size);
+  /* Nothing to do.  */
+  return b->text;
+}
 
 /* A cleanup function for macro buffers.  */
 static void
@@ -639,7 +650,7 @@ append_tokens_without_splicing (struct macro_buffer *dest,
    stringify; it is LEN bytes long.  */
 
 static void
-stringify (struct macro_buffer *dest, char *arg, int len)
+stringify (struct macro_buffer *dest, const char *arg, int len)
 {
   /* Trim initial whitespace from ARG.  */
   while (len > 0 && macro_is_whitespace (*arg))
@@ -682,6 +693,22 @@ stringify (struct macro_buffer *dest, char *arg, int len)
   dest->last_token = dest->len;
 }
 
+/* See macroexp.h.  */
+
+char *
+macro_stringify (const char *str)
+{
+  struct macro_buffer buffer;
+  int len = strlen (str);
+  char *result;
+
+  init_buffer (&buffer, len);
+  stringify (&buffer, str, len);
+  appendc (&buffer, '\0');
+
+  return free_buffer_return_text (&buffer);
+}
+
 

 /* Expanding macros!  */
 
diff --git a/gdb/macroexp.h b/gdb/macroexp.h
index 289619e..dba03f6 100644
--- a/gdb/macroexp.h
+++ b/gdb/macroexp.h
@@ -91,4 +91,9 @@ int macro_is_identifier_nondigit (int c);
 int macro_is_digit (int c);
 
 
+/* Stringify STR according to C rules and return an xmalloc'd pointer
+   to the result.  */
+
+char *macro_stringify (const char *str);
+
 #endif /* MACROEXP_H */
diff --git a/gdb/macrotab.c b/gdb/macrotab.c
index 7428839..e65e5dc 100644
--- a/gdb/macrotab.c
+++ b/gdb/macrotab.c
@@ -28,6 +28,7 @@
 #include "gdb_assert.h"
 #include "bcache.h"
 #include "complaints.h"
+#include "macroexp.h"
 
 

 /* The macro table structure.  */
@@ -565,6 +566,7 @@ new_macro_definition (struct macro_table *t,
   d->table = t;
   d->kind = kind;
   d->replacement = macro_bcache_str (t, replacement);
+  d->argc = argc;
 
   if (kind == macro_function_like)
     {
@@ -579,7 +581,6 @@ new_macro_definition (struct macro_table *t,
 
       /* Now bcache the array of argument pointers itself.  */
       d->argv = macro_bcache (t, cached_argv, cached_argv_size);
-      d->argc = argc;
     }
 
   /* We don't bcache the entire definition structure because it's got
@@ -742,10 +743,12 @@ check_for_redefinition (struct macro_source_file *source, int line,
     return 0;
 }
 
+/* A helper function to define a new object-like macro.  */
 
-void
-macro_define_object (struct macro_source_file *source, int line,
-                     const char *name, const char *replacement)
+static void
+macro_define_object_internal (struct macro_source_file *source, int line,
+			      const char *name, const char *replacement,
+			      enum macro_special_kind kind)
 {
   struct macro_table *t = source->table;
   struct macro_key *k = NULL;
@@ -771,10 +774,28 @@ macro_define_object (struct macro_source_file *source, int line,
     return;
 
   k = new_macro_key (t, name, source, line);
-  d = new_macro_definition (t, macro_object_like, 0, 0, replacement);
+  d = new_macro_definition (t, macro_object_like, kind, 0, replacement);
   splay_tree_insert (t->definitions, (splay_tree_key) k, (splay_tree_value) d);
 }
 
+void
+macro_define_object (struct macro_source_file *source, int line,
+		     const char *name, const char *replacement)
+{
+  macro_define_object_internal (source, line, name, replacement,
+				macro_ordinary);
+}
+
+/* See macrotab.h.  */
+
+void
+macro_define_special (struct macro_table *table)
+{
+  macro_define_object_internal (table->main_source, -1, "__FILE__", "",
+				macro_FILE);
+  macro_define_object_internal (table->main_source, -1, "__LINE__", "",
+				macro_LINE);
+}
 
 void
 macro_define_function (struct macro_source_file *source, int line,
@@ -859,6 +880,36 @@ macro_undef (struct macro_source_file *source, int line,
     }
 }
 
+/* A helper function that rewrites the definition of a special macro,
+   when needed.  */
+
+static struct macro_definition *
+fixup_definition (const char *filename, int line, struct macro_definition *def)
+{
+  static char *saved_expansion;
+
+  if (saved_expansion)
+    {
+      xfree (saved_expansion);
+      saved_expansion = NULL;
+    }
+
+  if (def->kind == macro_object_like)
+    {
+      if (def->argc == macro_FILE)
+	{
+	  saved_expansion = macro_stringify (filename);
+	  def->replacement = saved_expansion;
+	}
+      else if (def->argc == macro_LINE)
+	{
+	  saved_expansion = xstrprintf ("%d", line);
+	  def->replacement = saved_expansion;
+	}
+    }
+
+  return def;
+}
 
 struct macro_definition *
 macro_lookup_definition (struct macro_source_file *source,
@@ -867,7 +918,8 @@ macro_lookup_definition (struct macro_source_file *source,
   splay_tree_node n = find_definition (name, source, line);
 
   if (n)
-    return (struct macro_definition *) n->value;
+    return fixup_definition (source->filename, line,
+			     (struct macro_definition *) n->value);
   else
     return 0;
 }
@@ -910,7 +962,9 @@ foreach_macro (splay_tree_node node, void *arg)
 {
   struct macro_for_each_data *datum = (struct macro_for_each_data *) arg;
   struct macro_key *key = (struct macro_key *) node->key;
-  struct macro_definition *def = (struct macro_definition *) node->value;
+  struct macro_definition *def
+    = fixup_definition (key->start_file->filename, key->start_line,
+			(struct macro_definition *) node->value);
 
   (*datum->fn) (key->name, def, key->start_file, key->start_line,
 		datum->user_data);
@@ -936,7 +990,9 @@ foreach_macro_in_scope (splay_tree_node node, void *info)
 {
   struct macro_for_each_data *datum = (struct macro_for_each_data *) info;
   struct macro_key *key = (struct macro_key *) node->key;
-  struct macro_definition *def = (struct macro_definition *) node->value;
+  struct macro_definition *def
+    = fixup_definition (datum->file->filename, datum->line,
+			(struct macro_definition *) node->value);
 
   /* See if this macro is defined before the passed-in line, and
      extends past that line.  */
diff --git a/gdb/macrotab.h b/gdb/macrotab.h
index 8316cc3..92f1656 100644
--- a/gdb/macrotab.h
+++ b/gdb/macrotab.h
@@ -212,6 +212,10 @@ struct macro_source_file *macro_include (struct macro_source_file *source,
                                          int line,
                                          const char *included);
 
+/* Define any special macros, like __FILE__ or __LINE__.  This should
+   be called once, on the main source file.  */
+
+void macro_define_special (struct macro_table *table);
 
 /* Find any source file structure for a file named NAME, either
    included into SOURCE, or SOURCE itself.  Return zero if we have
@@ -261,6 +265,17 @@ enum macro_kind
   macro_function_like
 };
 
+/* Different kinds of special macros.  */
+
+enum macro_special_kind
+{
+  /* Ordinary.  */
+  macro_ordinary,
+  /* The special macro __FILE__.  */
+  macro_FILE,
+  /* The special macro __LINE__.  */
+  macro_LINE
+};
 
 /* A preprocessor symbol definition.  */
 struct macro_definition
@@ -273,12 +288,17 @@ struct macro_definition
 
   /* If `kind' is `macro_function_like', the number of arguments it
      takes, and their names.  The names, and the array of pointers to
-     them, are in the table's bcache, if it has one.  */
-  int argc : 31;
+     them, are in the table's bcache, if it has one.  If `kind' is
+     `macro_object_like', then this is actually a `macro_special_kind'
+     describing the macro.  */
+  int argc : 30;
   const char * const *argv;
 
-  /* The replacement string (body) of the macro.  This is in the
-     table's bcache, if it has one.  */
+  /* The replacement string (body) of the macro.  For ordinary macros,
+     this is in the table's bcache, if it has one.  For special macros
+     like __FILE__, this value is only valid until the next use of any
+     special macro definition; that is, it is reset each time any
+     special macro is looked up or iterated over.  */
   const char *replacement;
 };
 
diff --git a/gdb/main.c b/gdb/main.c
index 8b45c25..d075694 100644
--- a/gdb/main.c
+++ b/gdb/main.c
@@ -41,6 +41,7 @@
 #include "cli/cli-cmds.h"
 #include "python/python.h"
 #include "objfiles.h"
+#include "auto-load.h"
 
 /* The selected interpreter.  This will be used as a set command
    variable, so it should always be malloc'ed - since
@@ -84,19 +85,12 @@ int batch_silent = 0;
 int return_child_result = 0;
 int return_child_result_value = -1;
 
-/* Whether to enable writing into executable and core files.  */
-extern int write_files;
 
 /* GDB as it has been invoked from the command line (i.e. argv[0]).  */
 static char *gdb_program_name;
 
 static void print_gdb_help (struct ui_file *);
 
-/* These two are used to set the external editor commands when gdb is
-   farming out files to be edited by another program.  */
-
-extern char *external_editor_command;
-
 /* Relocate a file or directory.  PROGNAME is the name by which gdb
    was invoked (i.e., argv[0]).  INITIAL is the default value for the
    file or directory.  FLAG is true if the value is relocatable, false
@@ -237,7 +231,7 @@ captured_command_loop (void *data)
      are not that well behaved.  do_cleanups should either be replaced
      with a do_cleanups call (to cover the problem) or an assertion
      check to detect bad FUNCs code.  */
-  do_cleanups (ALL_CLEANUPS);
+  do_cleanups (all_cleanups ());
   /* If the command_loop returned, normally (rather than threw an
      error) we try to quit.  If the quit is aborted, catch_errors()
      which called this catch the signal and restart the command
@@ -246,6 +240,31 @@ captured_command_loop (void *data)
   return 1;
 }
 
+/* Arguments of --command option and its counterpart.  */
+typedef struct cmdarg {
+  /* Type of this option.  */
+  enum {
+    /* Option type -x.  */
+    CMDARG_FILE,
+
+    /* Option type -ex.  */
+    CMDARG_COMMAND,
+
+    /* Option type -ix.  */
+    CMDARG_INIT_FILE,
+    
+    /* Option type -iex.  */
+    CMDARG_INIT_COMMAND
+  } type;
+
+  /* Value of this option - filename or the GDB command itself.  String memory
+     is not owned by this structure despite it is 'const'.  */
+  char *string;
+} cmdarg_s;
+
+/* Define type VEC (cmdarg_s).  */
+DEF_VEC_O (cmdarg_s);
+
 static int
 captured_main (void *data)
 {
@@ -270,17 +289,8 @@ captured_main (void *data)
   static int print_version;
 
   /* Pointers to all arguments of --command option.  */
-  struct cmdarg {
-    enum {
-      CMDARG_FILE,
-      CMDARG_COMMAND
-    } type;
-    char *string;
-  } *cmdarg;
-  /* Allocated size of cmdarg.  */
-  int cmdsize;
-  /* Number of elements of cmdarg used.  */
-  int ncmd;
+  VEC (cmdarg_s) *cmdarg_vec = NULL;
+  struct cmdarg *cmdarg_p;
 
   /* Indices of all arguments of --directory option.  */
   char **dirarg;
@@ -316,9 +326,7 @@ captured_main (void *data)
   bindtextdomain (PACKAGE, LOCALEDIR);
   textdomain (PACKAGE);
 
-  cmdsize = 1;
-  cmdarg = (struct cmdarg *) xmalloc (cmdsize * sizeof (*cmdarg));
-  ncmd = 0;
+  make_cleanup (VEC_cleanup (cmdarg_s), &cmdarg_vec);
   dirsize = 1;
   dirarg = (char **) xmalloc (dirsize * sizeof (*dirarg));
   ndir = 0;
@@ -393,7 +401,9 @@ captured_main (void *data)
       OPT_STATISTICS,
       OPT_TUI,
       OPT_NOWINDOWS,
-      OPT_WINDOWS
+      OPT_WINDOWS,
+      OPT_IX,
+      OPT_IEX
     };
     static struct option long_options[] =
     {
@@ -433,6 +443,10 @@ captured_main (void *data)
       {"version", no_argument, &print_version, 1},
       {"x", required_argument, 0, 'x'},
       {"ex", required_argument, 0, 'X'},
+      {"init-command", required_argument, 0, OPT_IX},
+      {"init-eval-command", required_argument, 0, OPT_IEX},
+      {"ix", required_argument, 0, OPT_IX},
+      {"iex", required_argument, 0, OPT_IEX},
 #ifdef GDBTK
       {"tclcommand", required_argument, 0, 'z'},
       {"enable-external-editor", no_argument, 0, 'y'},
@@ -541,24 +555,32 @@ captured_main (void *data)
 	    pidarg = optarg;
 	    break;
 	  case 'x':
-	    cmdarg[ncmd].type = CMDARG_FILE;
-	    cmdarg[ncmd++].string = optarg;
-	    if (ncmd >= cmdsize)
-	      {
-		cmdsize *= 2;
-		cmdarg = xrealloc ((char *) cmdarg,
-				   cmdsize * sizeof (*cmdarg));
-	      }
+	    {
+	      struct cmdarg cmdarg = { CMDARG_FILE, optarg };
+
+	      VEC_safe_push (cmdarg_s, cmdarg_vec, &cmdarg);
+	    }
 	    break;
 	  case 'X':
-	    cmdarg[ncmd].type = CMDARG_COMMAND;
-	    cmdarg[ncmd++].string = optarg;
-	    if (ncmd >= cmdsize)
-	      {
-		cmdsize *= 2;
-		cmdarg = xrealloc ((char *) cmdarg,
-				   cmdsize * sizeof (*cmdarg));
-	      }
+	    {
+	      struct cmdarg cmdarg = { CMDARG_COMMAND, optarg };
+
+	      VEC_safe_push (cmdarg_s, cmdarg_vec, &cmdarg);
+	    }
+	    break;
+	  case OPT_IX:
+	    {
+	      struct cmdarg cmdarg = { CMDARG_INIT_FILE, optarg };
+
+	      VEC_safe_push (cmdarg_s, cmdarg_vec, &cmdarg);
+	    }
+	    break;
+	  case OPT_IEX:
+	    {
+	      struct cmdarg cmdarg = { CMDARG_INIT_COMMAND, optarg };
+
+	      VEC_safe_push (cmdarg_s, cmdarg_vec, &cmdarg);
+	    }
 	    break;
 	  case 'B':
 	    batch_flag = batch_silent = 1;
@@ -588,6 +610,10 @@ captured_main (void *data)
 	    break;
 	  case 'w':
 	    {
+	      /* Set the external editor commands when gdb is farming out files
+		 to be edited by another program.  */
+	      extern char *external_editor_command;
+
 	      external_editor_command = xstrdup (optarg);
 	      break;
 	    }
@@ -822,6 +848,20 @@ captured_main (void *data)
   if (home_gdbinit && !inhibit_gdbinit)
     catch_command_errors (source_script, home_gdbinit, 0, RETURN_MASK_ALL);
 
+  /* Process '-ix' and '-iex' options early.  */
+  for (i = 0; VEC_iterate (cmdarg_s, cmdarg_vec, i, cmdarg_p); i++)
+    switch (cmdarg_p->type)
+    {
+      case CMDARG_INIT_FILE:
+        catch_command_errors (source_script, cmdarg_p->string,
+			      !batch_flag, RETURN_MASK_ALL);
+	break;
+      case CMDARG_INIT_COMMAND:
+        catch_command_errors (execute_command, cmdarg_p->string,
+			      !batch_flag, RETURN_MASK_ALL);
+	break;
+    }
+
   /* Now perform all the actions indicated by the arguments.  */
   if (cdarg != NULL)
     {
@@ -835,8 +875,8 @@ captured_main (void *data)
   /* Skip auto-loading section-specified scripts until we've sourced
      local_gdbinit (which is often used to augment the source search
      path).  */
-  save_auto_load = gdbpy_global_auto_load;
-  gdbpy_global_auto_load = 0;
+  save_auto_load = global_auto_load;
+  global_auto_load = 0;
 
   if (execarg != NULL
       && symarg != NULL
@@ -898,27 +938,44 @@ captured_main (void *data)
 
   /* Read the .gdbinit file in the current directory, *if* it isn't
      the same as the $HOME/.gdbinit file (it should exist, also).  */
-  if (local_gdbinit && !inhibit_gdbinit)
-    catch_command_errors (source_script, local_gdbinit, 0, RETURN_MASK_ALL);
+  if (local_gdbinit)
+    {
+      auto_load_local_gdbinit_pathname = gdb_realpath (local_gdbinit);
+
+      if (!inhibit_gdbinit && auto_load_local_gdbinit
+	  && file_is_auto_load_safe (local_gdbinit,
+				     _("auto-load: Loading .gdbinit "
+				       "file \"%s\".\n"),
+				     local_gdbinit))
+	{
+	  auto_load_local_gdbinit_loaded = 1;
+
+	  catch_command_errors (source_script, local_gdbinit, 0,
+				RETURN_MASK_ALL);
+	}
+    }
 
   /* Now that all .gdbinit's have been read and all -d options have been
      processed, we can read any scripts mentioned in SYMARG.
      We wait until now because it is common to add to the source search
      path in local_gdbinit.  */
-  gdbpy_global_auto_load = save_auto_load;
+  global_auto_load = save_auto_load;
   ALL_OBJFILES (objfile)
     load_auto_scripts_for_objfile (objfile);
 
-  for (i = 0; i < ncmd; i++)
+  /* Process '-x' and '-ex' options.  */
+  for (i = 0; VEC_iterate (cmdarg_s, cmdarg_vec, i, cmdarg_p); i++)
+    switch (cmdarg_p->type)
     {
-      if (cmdarg[i].type == CMDARG_FILE)
-        catch_command_errors (source_script, cmdarg[i].string,
+      case CMDARG_FILE:
+        catch_command_errors (source_script, cmdarg_p->string,
 			      !batch_flag, RETURN_MASK_ALL);
-      else  /* cmdarg[i].type == CMDARG_COMMAND */
-        catch_command_errors (execute_command, cmdarg[i].string,
+	break;
+      case CMDARG_COMMAND:
+        catch_command_errors (execute_command, cmdarg_p->string,
 			      !batch_flag, RETURN_MASK_ALL);
+	break;
     }
-  xfree (cmdarg);
 
   /* Read in the old history after all the command files have been
      read.  */
@@ -989,6 +1046,8 @@ Options:\n\n\
                      Execute a single GDB command.\n\
                      May be used multiple times and in conjunction\n\
                      with --command.\n\
+  --init-command=FILE, -ix Like -x but execute it before loading inferior.\n\
+  --init-eval-command=COMMAND, -iex Like -ex but before loading inferior.\n\
   --core=COREFILE    Analyze the core dump COREFILE.\n\
   --pid=PID          Attach to running process PID.\n\
 "), stream);
@@ -1024,6 +1083,10 @@ Options:\n\n\
 "), stream);
 #endif
   fputs_unfiltered (_("\
+  --use-deprecated-index-sections\n\
+                     Do not reject deprecated .gdb_index sections.\n\
+"), stream);
+  fputs_unfiltered (_("\
   --version          Print version information and then exit.\n\
   -w                 Use a window interface.\n\
   --write            Set writing into executable and core files.\n\
@@ -1042,7 +1105,7 @@ At startup, GDB reads the following init files and executes their commands:\n\
 "), home_gdbinit);
   if (local_gdbinit)
     fprintf_unfiltered (stream, _("\
-   * local init file: ./%s\n\
+   * local init file (see also 'set auto-load local-gdbinit'): ./%s\n\
 "), local_gdbinit);
   fputs_unfiltered (_("\n\
 For more information, type \"help\" from within GDB, or consult the\n\
diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c
index c95c09b..d1b9177 100644
--- a/gdb/mdebugread.c
+++ b/gdb/mdebugread.c
@@ -1047,7 +1047,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
 		if (tsym.st != stMember)
 		  break;
 
-		SET_FIELD_BITPOS (*f, tsym.value);
+		SET_FIELD_ENUMVAL (*f, tsym.value);
 		FIELD_TYPE (*f) = t;
 		FIELD_NAME (*f) = debug_info->ss + cur_fdr->issBase + tsym.iss;
 		FIELD_BITSIZE (*f) = 0;
@@ -1184,7 +1184,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
 
 	      if (nparams > 0)
 		{
-		  struct dict_iterator iter;
+		  struct block_iterator iter;
 
 		  TYPE_NFIELDS (ftype) = nparams;
 		  TYPE_FIELDS (ftype) = (struct field *)
@@ -2359,7 +2359,7 @@ parse_partial_symbols (struct objfile *objfile)
   int past_first_source_file = 0;
 
   /* List of current psymtab's include files.  */
-  char **psymtab_include_list;
+  const char **psymtab_include_list;
   int includes_allocated;
   int includes_used;
   EXTR *extern_tab;
@@ -2389,8 +2389,8 @@ parse_partial_symbols (struct objfile *objfile)
 
   includes_allocated = 30;
   includes_used = 0;
-  psymtab_include_list = (char **) alloca (includes_allocated *
-					   sizeof (char *));
+  psymtab_include_list = (const char **) alloca (includes_allocated *
+						 sizeof (const char *));
   next_symbol_text_func = mdebug_next_symbol_text;
 
   dependencies_allocated = 30;
@@ -2754,7 +2754,7 @@ parse_partial_symbols (struct objfile *objfile)
 	  for (cur_sdx = 2; cur_sdx < fh->csym; cur_sdx++)
 	    {
 	      int type_code;
-	      char *namestring;
+	      const char *namestring;
 
 	      (*swap_sym_in) (cur_bfd,
 			      (((char *) debug_info->external_sym)
@@ -3090,13 +3090,13 @@ parse_partial_symbols (struct objfile *objfile)
 		      psymtab_include_list[includes_used++] = namestring;
 		      if (includes_used >= includes_allocated)
 			{
-			  char **orig = psymtab_include_list;
+			  const char **orig = psymtab_include_list;
 
-			  psymtab_include_list = (char **)
+			  psymtab_include_list = (const char **)
 			    alloca ((includes_allocated *= 2) *
-				    sizeof (char *));
+				    sizeof (const char *));
 			  memcpy (psymtab_include_list, orig,
-				  includes_used * sizeof (char *));
+				  includes_used * sizeof (const char *));
 			}
 		      continue;
 		    }
@@ -4607,7 +4607,7 @@ static struct symbol *
 mylookup_symbol (char *name, struct block *block,
 		 domain_enum domain, enum address_class class)
 {
-  struct dict_iterator iter;
+  struct block_iterator iter;
   int inc;
   struct symbol *sym;
 
@@ -4713,7 +4713,7 @@ sort_blocks (struct symtab *s)
 {
   struct blockvector *bv = BLOCKVECTOR (s);
 
-  if (BLOCKVECTOR_NBLOCKS (bv) <= 2)
+  if (BLOCKVECTOR_NBLOCKS (bv) <= FIRST_LOCAL_BLOCK)
     {
       /* Cosmetic */
       if (BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) == 0)
@@ -4728,7 +4728,7 @@ sort_blocks (struct symtab *s)
    * are very different.  It would be nice to find a reliable test
    * to detect -O3 images in advance.
    */
-  if (BLOCKVECTOR_NBLOCKS (bv) > 3)
+  if (BLOCKVECTOR_NBLOCKS (bv) > FIRST_LOCAL_BLOCK + 1)
     qsort (&BLOCKVECTOR_BLOCK (bv, FIRST_LOCAL_BLOCK),
 	   BLOCKVECTOR_NBLOCKS (bv) - FIRST_LOCAL_BLOCK,
 	   sizeof (struct block *),
diff --git a/gdb/mem-break.c b/gdb/mem-break.c
index 7d0e3f1..bd34fb2 100644
--- a/gdb/mem-break.c
+++ b/gdb/mem-break.c
@@ -29,6 +29,7 @@
 #include "breakpoint.h"
 #include "inferior.h"
 #include "target.h"
+#include "gdb_string.h"
 
 
 /* Insert a breakpoint on targets that don't have any better
@@ -46,6 +47,7 @@ default_memory_insert_breakpoint (struct gdbarch *gdbarch,
 {
   int val;
   const unsigned char *bp;
+  gdb_byte *readbuf;
 
   /* Determine appropriate breakpoint contents and size for this address.  */
   bp = gdbarch_breakpoint_from_pc
@@ -53,15 +55,18 @@ default_memory_insert_breakpoint (struct gdbarch *gdbarch,
   if (bp == NULL)
     error (_("Software breakpoints not implemented for this target."));
 
-  /* Save the memory contents.  */
+  /* Save the memory contents in the shadow_contents buffer and then
+     write the breakpoint instruction.  */
   bp_tgt->shadow_len = bp_tgt->placed_size;
-  val = target_read_memory (bp_tgt->placed_address, bp_tgt->shadow_contents,
+  readbuf = alloca (bp_tgt->placed_size);
+  val = target_read_memory (bp_tgt->placed_address, readbuf,
 			    bp_tgt->placed_size);
-
-  /* Write the breakpoint.  */
   if (val == 0)
-    val = target_write_raw_memory (bp_tgt->placed_address, bp,
-				   bp_tgt->placed_size);
+    {
+      memcpy (bp_tgt->shadow_contents, readbuf, bp_tgt->placed_size);
+      val = target_write_raw_memory (bp_tgt->placed_address, bp,
+				     bp_tgt->placed_size);
+    }
 
   return val;
 }
diff --git a/gdb/mep-tdep.c b/gdb/mep-tdep.c
index a8cfdb2..960500c 100644
--- a/gdb/mep-tdep.c
+++ b/gdb/mep-tdep.c
@@ -1911,7 +1911,7 @@ mep_analyze_prologue (struct gdbarch *gdbarch,
 static CORE_ADDR
 mep_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
-  char *name;
+  const char *name;
   CORE_ADDR func_addr, func_end;
   struct mep_prologue p;
 
@@ -2194,7 +2194,7 @@ Try using the 'return' command with no argument."));
 }
 
 static enum return_value_convention
-mep_return_value (struct gdbarch *gdbarch, struct type *func_type,
+mep_return_value (struct gdbarch *gdbarch, struct value *function,
 		  struct type *type, struct regcache *regcache,
 		  gdb_byte *readbuf, const gdb_byte *writebuf)
 {
diff --git a/gdb/mi/mi-cmd-break.c b/gdb/mi/mi-cmd-break.c
index e04d34d..5a64bf1 100644
--- a/gdb/mi/mi-cmd-break.c
+++ b/gdb/mi/mi-cmd-break.c
@@ -43,7 +43,7 @@ static int mi_breakpoint_observers_installed;
 
 static int mi_can_breakpoint_notify;
 
-/* Output a single breakpoint, when allowed. */
+/* Output a single breakpoint, when allowed.  */
 
 static void
 breakpoint_notify (struct breakpoint *b)
@@ -98,13 +98,13 @@ mi_cmd_break_insert (char *command, char **argv, int argc)
 
   /* Parse arguments. It could be -r or -h or -t, <location> or ``--''
      to denote the end of the option list. */
-  int optind = 0;
-  char *optarg;
+  int oind = 0;
+  char *oarg;
 
   while (1)
     {
       int opt = mi_getopt ("-break-insert", argc, argv,
-			   opts, &optind, &optarg);
+			   opts, &oind, &oarg);
       if (opt < 0)
 	break;
       switch ((enum opt) opt)
@@ -116,13 +116,13 @@ mi_cmd_break_insert (char *command, char **argv, int argc)
 	  hardware = 1;
 	  break;
 	case CONDITION_OPT:
-	  condition = optarg;
+	  condition = oarg;
 	  break;
 	case IGNORE_COUNT_OPT:
-	  ignore_count = atol (optarg);
+	  ignore_count = atol (oarg);
 	  break;
 	case THREAD_OPT:
-	  thread = atol (optarg);
+	  thread = atol (oarg);
 	  break;
 	case PENDING_OPT:
 	  pending = 1;
@@ -136,13 +136,13 @@ mi_cmd_break_insert (char *command, char **argv, int argc)
 	}
     }
 
-  if (optind >= argc)
+  if (oind >= argc)
     error (_("-break-insert: Missing <location>"));
-  if (optind < argc - 1)
+  if (oind < argc - 1)
     error (_("-break-insert: Garbage following <location>"));
-  address = argv[optind];
+  address = argv[oind];
 
-  /* Now we have what we need, let's insert the breakpoint! */
+  /* Now we have what we need, let's insert the breakpoint!  */
   if (! mi_breakpoint_observers_installed)
     {
       observer_attach_breakpoint_created (breakpoint_notify);
@@ -164,6 +164,7 @@ mi_cmd_break_insert (char *command, char **argv, int argc)
 		 : (hardware ? bp_hardware_breakpoint : bp_breakpoint));
 
   create_breakpoint (get_current_arch (), address, condition, thread,
+		     NULL,
 		     0 /* condition and thread are valid.  */,
 		     temp_p, type_wanted,
 		     ignore_count,
@@ -209,7 +210,7 @@ mi_cmd_break_passcount (char *command, char **argv, int argc)
    first argument: 
    -break-watch <expr> --> insert a regular wp.  
    -break-watch -r <expr> --> insert a read watchpoint.
-   -break-watch -a <expr> --> insert an access wp. */
+   -break-watch -a <expr> --> insert an access wp.  */
 
 void
 mi_cmd_break_watch (char *command, char **argv, int argc)
@@ -228,13 +229,13 @@ mi_cmd_break_watch (char *command, char **argv, int argc)
   };
 
   /* Parse arguments. */
-  int optind = 0;
-  char *optarg;
+  int oind = 0;
+  char *oarg;
 
   while (1)
     {
       int opt = mi_getopt ("-break-watch", argc, argv,
-			   opts, &optind, &optarg);
+			   opts, &oind, &oarg);
 
       if (opt < 0)
 	break;
@@ -248,13 +249,13 @@ mi_cmd_break_watch (char *command, char **argv, int argc)
 	  break;
 	}
     }
-  if (optind >= argc)
+  if (oind >= argc)
     error (_("-break-watch: Missing <expression>"));
-  if (optind < argc - 1)
+  if (oind < argc - 1)
     error (_("-break-watch: Garbage following <expression>"));
-  expr = argv[optind];
+  expr = argv[oind];
 
-  /* Now we have what we need, let's insert the watchpoint! */
+  /* Now we have what we need, let's insert the watchpoint!  */
   switch (type)
     {
     case REG_WP:
diff --git a/gdb/mi/mi-cmd-disas.c b/gdb/mi/mi-cmd-disas.c
index 6de7c5f..b6afb08 100644
--- a/gdb/mi/mi-cmd-disas.c
+++ b/gdb/mi/mi-cmd-disas.c
@@ -27,8 +27,7 @@
 #include "ui-out.h"
 #include "disasm.h"
 
-/* The arguments to be passed on the command line and parsed here are:
-
+/* The arguments to be passed on the command line and parsed here are
    either:
 
    START-ADDRESS: address to start the disassembly at.
@@ -50,6 +49,7 @@
          2 -- disassembly and opcodes.
          3 -- disassembly, source and opcodes.
 */
+
 void
 mi_cmd_disassemble (char *command, char **argv, int argc)
 {
@@ -75,60 +75,61 @@ mi_cmd_disassemble (char *command, char **argv, int argc)
   CORE_ADDR high = 0;
   struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
 
-  /* Options processing stuff. */
-  int optind = 0;
-  char *optarg;
+  /* Options processing stuff.  */
+  int oind = 0;
+  char *oarg;
   enum opt
   {
     FILE_OPT, LINE_OPT, NUM_OPT, START_OPT, END_OPT
   };
-  static const struct mi_opt opts[] = {
-    {"f", FILE_OPT, 1},
-    {"l", LINE_OPT, 1},
-    {"n", NUM_OPT, 1},
-    {"s", START_OPT, 1},
-    {"e", END_OPT, 1},
-    { 0, 0, 0 }
-  };
+  static const struct mi_opt opts[] =
+    {
+      {"f", FILE_OPT, 1},
+      {"l", LINE_OPT, 1},
+      {"n", NUM_OPT, 1},
+      {"s", START_OPT, 1},
+      {"e", END_OPT, 1},
+      { 0, 0, 0 }
+    };
 
   /* Get the options with their arguments. Keep track of what we
-     encountered. */
+     encountered.  */
   while (1)
     {
       int opt = mi_getopt ("-data-disassemble", argc, argv, opts,
-			   &optind, &optarg);
+			   &oind, &oarg);
       if (opt < 0)
 	break;
       switch ((enum opt) opt)
 	{
 	case FILE_OPT:
-	  file_string = xstrdup (optarg);
+	  file_string = xstrdup (oarg);
 	  file_seen = 1;
 	  make_cleanup (xfree, file_string);
 	  break;
 	case LINE_OPT:
-	  line_num = atoi (optarg);
+	  line_num = atoi (oarg);
 	  line_seen = 1;
 	  break;
 	case NUM_OPT:
-	  how_many = atoi (optarg);
+	  how_many = atoi (oarg);
 	  num_seen = 1;
 	  break;
 	case START_OPT:
-	  low = parse_and_eval_address (optarg);
+	  low = parse_and_eval_address (oarg);
 	  start_seen = 1;
 	  break;
 	case END_OPT:
-	  high = parse_and_eval_address (optarg);
+	  high = parse_and_eval_address (oarg);
 	  end_seen = 1;
 	  break;
 	}
     }
-  argv += optind;
-  argc -= optind;
+  argv += oind;
+  argc -= oind;
 
   /* Allow only filename + linenum (with how_many which is not
-     required) OR start_addr + and_addr */
+     required) OR start_addr + end_addr.  */
 
   if (!((line_seen && file_seen && num_seen && !start_seen && !end_seen)
 	|| (line_seen && file_seen && !num_seen && !start_seen && !end_seen)
@@ -144,7 +145,7 @@ mi_cmd_disassemble (char *command, char **argv, int argc)
   if (mode < 0 || mode > 3)
     error (_("-data-disassemble: Mode argument must be 0, 1, 2, or 3."));
 
-  /* Convert the mode into a set of disassembly flags */
+  /* Convert the mode into a set of disassembly flags.  */
 
   disasm_flags = 0;
   if (mode & 0x1)
@@ -153,7 +154,7 @@ mi_cmd_disassemble (char *command, char **argv, int argc)
     disasm_flags |= DISASSEMBLY_RAW_INSN;
 
   /* We must get the function beginning and end where line_num is
-     contained. */
+     contained.  */
 
   if (line_seen && file_seen)
     {
diff --git a/gdb/mi/mi-cmd-env.c b/gdb/mi/mi-cmd-env.c
index 65307a6..ebf4974 100644
--- a/gdb/mi/mi-cmd-env.c
+++ b/gdb/mi/mi-cmd-env.c
@@ -1,5 +1,4 @@
 /* MI Command Set - environment commands.
-
    Copyright (C) 2002-2004, 2007-2012 Free Software Foundation, Inc.
 
    Contributed by Red Hat Inc.
@@ -36,6 +35,7 @@
 #include "gdb_stat.h"
 
 static void env_mod_path (char *dirname, char **which_path);
+
 extern void _initialize_mi_cmd_env (void);
 
 static const char path_var_name[] = "PATH";
@@ -44,6 +44,7 @@ static char *orig_path = NULL;
 /* The following is copied from mi-main.c so for m1 and below we can
    perform old behavior and use cli commands.  If ARGS is non-null,
    append it to the CMD.  */
+
 static void
 env_execute_cli_command (const char *cmd, const char *args)
 {
@@ -63,15 +64,15 @@ env_execute_cli_command (const char *cmd, const char *args)
     }
 }
 
-
 /* Print working directory.  */
+
 void
 mi_cmd_env_pwd (char *command, char **argv, int argc)
 {
   struct ui_out *uiout = current_uiout;
 
   if (argc > 0)
-    error (_("-environment-pwd: No arguments required"));
+    error (_("-environment-pwd: No arguments allowed"));
           
   if (mi_version (uiout) < 2)
     {
@@ -89,6 +90,7 @@ mi_cmd_env_pwd (char *command, char **argv, int argc)
 }
 
 /* Change working directory.  */
+
 void
 mi_cmd_env_cd (char *command, char **argv, int argc)
 {
@@ -110,6 +112,7 @@ env_mod_path (char *dirname, char **which_path)
 }
 
 /* Add one or more directories to start of executable search path.  */
+
 void
 mi_cmd_env_path (char *command, char **argv, int argc)
 {
@@ -117,9 +120,9 @@ mi_cmd_env_path (char *command, char **argv, int argc)
   char *exec_path;
   char *env;
   int reset = 0;
-  int optind = 0;
+  int oind = 0;
   int i;
-  char *optarg;
+  char *oarg;
   enum opt
     {
       RESET_OPT
@@ -143,7 +146,7 @@ mi_cmd_env_path (char *command, char **argv, int argc)
   while (1)
     {
       int opt = mi_getopt ("-environment-path", argc, argv, opts,
-                           &optind, &optarg);
+                           &oind, &oarg);
 
       if (opt < 0)
         break;
@@ -154,8 +157,8 @@ mi_cmd_env_path (char *command, char **argv, int argc)
           break;
         }
     }
-  argv += optind;
-  argc -= optind;
+  argv += oind;
+  argc -= oind;
 
 
   if (reset)
@@ -184,14 +187,15 @@ mi_cmd_env_path (char *command, char **argv, int argc)
 }
 
 /* Add zero or more directories to the front of the source path.  */
+
 void
 mi_cmd_env_dir (char *command, char **argv, int argc)
 {
   struct ui_out *uiout = current_uiout;
   int i;
-  int optind = 0;
+  int oind = 0;
   int reset = 0;
-  char *optarg;
+  char *oarg;
   enum opt
     {
       RESET_OPT
@@ -215,7 +219,7 @@ mi_cmd_env_dir (char *command, char **argv, int argc)
   while (1)
     {
       int opt = mi_getopt ("-environment-directory", argc, argv, opts,
-                           &optind, &optarg);
+                           &oind, &oarg);
 
       if (opt < 0)
         break;
@@ -226,8 +230,8 @@ mi_cmd_env_dir (char *command, char **argv, int argc)
           break;
         }
     }
-  argv += optind;
-  argc -= optind;
+  argv += oind;
+  argc -= oind;
 
   if (reset)
     {
@@ -244,13 +248,15 @@ mi_cmd_env_dir (char *command, char **argv, int argc)
 }
 
 /* Set the inferior terminal device name.  */
+
 void
 mi_cmd_inferior_tty_set (char *command, char **argv, int argc)
 {
   set_inferior_io_terminal (argv[0]);
 }
 
-/* Print the inferior terminal device name  */
+/* Print the inferior terminal device name.  */
+
 void
 mi_cmd_inferior_tty_show (char *command, char **argv, int argc)
 {
@@ -273,7 +279,7 @@ _initialize_mi_cmd_env (void)
   /* We want original execution path to reset to, if desired later.
      At this point, current inferior is not created, so cannot use
      current_inferior ()->environment.  Also, there's no obvious
-     place where this code can be moved suchs that it surely run
+     place where this code can be moved such that it surely run
      before any code possibly mangles original PATH.  */
   environment = make_environ ();
   init_environ (environment);
diff --git a/gdb/mi/mi-cmd-file.c b/gdb/mi/mi-cmd-file.c
index c4d1461..0b2b725 100644
--- a/gdb/mi/mi-cmd-file.c
+++ b/gdb/mi/mi-cmd-file.c
@@ -1,4 +1,4 @@
-/* MI Command Set - breakpoint and watchpoint commands.
+/* MI Command Set - file commands.
    Copyright (C) 2000-2002, 2007-2012 Free Software Foundation, Inc.
    Contributed by Cygnus Solutions (a Red Hat company).
 
@@ -27,7 +27,7 @@
 #include "psymtab.h"
 
 /* Return to the client the absolute path and line number of the 
-   current file being executed. */
+   current file being executed.  */
 
 void
 mi_cmd_file_list_exec_source_file (char *command, char **argv, int argc)
@@ -38,20 +38,20 @@ mi_cmd_file_list_exec_source_file (char *command, char **argv, int argc)
   if (!mi_valid_noargs ("-file-list-exec-source-file", argc, argv))
     error (_("-file-list-exec-source-file: Usage: No args"));
 
-  /* Set the default file and line, also get them */
+  /* Set the default file and line, also get them.  */
   set_default_source_symtab_and_line ();
   st = get_current_source_symtab_and_line ();
 
-  /* We should always get a symtab. 
-     Apparently, filename does not need to be tested for NULL.
-     The documentation in symtab.h suggests it will always be correct */
+  /* We should always get a symtab.  Apparently, filename does not
+     need to be tested for NULL.  The documentation in symtab.h
+     suggests it will always be correct.  */
   if (!st.symtab)
     error (_("-file-list-exec-source-file: No symtab"));
 
-  /* Extract the fullname if it is not known yet */
+  /* Extract the fullname if it is not known yet.  */
   symtab_to_fullname (st.symtab);
 
-  /* Print to the user the line, filename and fullname */
+  /* Print to the user the line, filename and fullname.  */
   ui_out_field_int (uiout, "line", st.line);
   ui_out_field_string (uiout, "file", st.symtab->filename);
 
@@ -63,6 +63,7 @@ mi_cmd_file_list_exec_source_file (char *command, char **argv, int argc)
 }
 
 /* A callback for map_partial_symbol_filenames.  */
+
 static void
 print_partial_file_name (const char *filename, const char *fullname,
 			 void *ignore)
@@ -89,17 +90,17 @@ mi_cmd_file_list_exec_source_files (char *command, char **argv, int argc)
   if (!mi_valid_noargs ("-file-list-exec-source-files", argc, argv))
     error (_("-file-list-exec-source-files: Usage: No args"));
 
-  /* Print the table header */
+  /* Print the table header.  */
   ui_out_begin (uiout, ui_out_type_list, "files");
 
-  /* Look at all of the symtabs */
+  /* Look at all of the symtabs.  */
   ALL_SYMTABS (objfile, s)
   {
     ui_out_begin (uiout, ui_out_type_tuple, NULL);
 
     ui_out_field_string (uiout, "file", s->filename);
 
-    /* Extract the fullname if it is not known yet */
+    /* Extract the fullname if it is not known yet.  */
     symtab_to_fullname (s);
 
     if (s->fullname)
diff --git a/gdb/mi/mi-cmd-info.c b/gdb/mi/mi-cmd-info.c
new file mode 100644
index 0000000..ffda52f
--- /dev/null
+++ b/gdb/mi/mi-cmd-info.c
@@ -0,0 +1,38 @@
+/* MI Command Set - information commands.
+   Copyright (C) 2011-2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "osdata.h"
+#include "mi-cmds.h"
+
+void
+mi_cmd_info_os (char *command, char **argv, int argc)
+{
+  switch (argc)
+    {
+    case 0:
+      info_osdata_command ("", 0);
+      break;
+    case 1:
+      info_osdata_command (argv[0], 0);
+      break;
+    default:
+      error (_("Usage: -info-os [INFOTYPE]"));
+      break;
+    }
+}
diff --git a/gdb/mi/mi-cmd-stack.c b/gdb/mi/mi-cmd-stack.c
index c0c17bc..fe3e0bf 100644
--- a/gdb/mi/mi-cmd-stack.c
+++ b/gdb/mi/mi-cmd-stack.c
@@ -39,11 +39,12 @@ static void list_args_or_locals (enum what_to_list what,
 				 enum print_values values,
 				 struct frame_info *fi);
 
-/* Print a list of the stack frames. Args can be none, in which case
+/* Print a list of the stack frames.  Args can be none, in which case
    we want to print the whole backtrace, or a pair of numbers
    specifying the frame numbers at which to start and stop the
-   display. If the two numbers are equal, a single frame will be
-   displayed. */
+   display.  If the two numbers are equal, a single frame will be
+   displayed.  */
+
 void
 mi_cmd_stack_list_frames (char *command, char **argv, int argc)
 {
@@ -64,14 +65,14 @@ mi_cmd_stack_list_frames (char *command, char **argv, int argc)
   else
     {
       /* Called with no arguments, it means we want the whole
-         backtrace. */
+         backtrace.  */
       frame_low = -1;
       frame_high = -1;
     }
 
   /* Let's position fi on the frame at which to start the
      display. Could be the innermost frame if the whole stack needs
-     displaying, or if frame_low is 0. */
+     displaying, or if frame_low is 0.  */
   for (i = 0, fi = get_current_frame ();
        fi && i < frame_low;
        i++, fi = get_prev_frame (fi));
@@ -81,15 +82,15 @@ mi_cmd_stack_list_frames (char *command, char **argv, int argc)
 
   cleanup_stack = make_cleanup_ui_out_list_begin_end (current_uiout, "stack");
 
-  /* Now let;s print the frames up to frame_high, or until there are
-     frames in the stack. */
+  /* Now let's print the frames up to frame_high, or until there are
+     frames in the stack.  */
   for (;
        fi && (i <= frame_high || frame_high == -1);
        i++, fi = get_prev_frame (fi))
     {
       QUIT;
       /* Print the location and the address always, even for level 0.
-         args == 0: don't print the arguments. */
+         If args is 0, don't print the arguments.  */
       print_frame_info (fi, 1, LOC_AND_ADDRESS, 0 /* args */ );
     }
 
@@ -110,7 +111,7 @@ mi_cmd_stack_info_depth (char *command, char **argv, int argc)
     frame_high = atoi (argv[0]);
   else
     /* Called with no arguments, it means we want the real depth of
-       the stack. */
+       the stack.  */
     frame_high = -1;
 
   for (i = 0, fi = get_current_frame ();
@@ -141,7 +142,8 @@ parse_print_values (char *name)
 
 /* Print a list of the locals for the current frame.  With argument of
    0, print only the names, with argument of 1 print also the
-   values. */
+   values.  */
+
 void
 mi_cmd_stack_list_locals (char *command, char **argv, int argc)
 {
@@ -157,7 +159,8 @@ mi_cmd_stack_list_locals (char *command, char **argv, int argc)
 
 /* Print a list of the arguments for the current frame.  With argument
    of 0, print only the names, with argument of 1 print also the
-   values. */
+   values.  */
+
 void
 mi_cmd_stack_list_args (char *command, char **argv, int argc)
 {
@@ -181,7 +184,7 @@ mi_cmd_stack_list_args (char *command, char **argv, int argc)
   else
     {
       /* Called with no arguments, it means we want args for the whole
-         backtrace. */
+         backtrace.  */
       frame_low = -1;
       frame_high = -1;
     }
@@ -190,7 +193,7 @@ mi_cmd_stack_list_args (char *command, char **argv, int argc)
 
   /* Let's position fi on the frame at which to start the
      display. Could be the innermost frame if the whole stack needs
-     displaying, or if frame_low is 0. */
+     displaying, or if frame_low is 0.  */
   for (i = 0, fi = get_current_frame ();
        fi && i < frame_low;
        i++, fi = get_prev_frame (fi));
@@ -202,7 +205,7 @@ mi_cmd_stack_list_args (char *command, char **argv, int argc)
     = make_cleanup_ui_out_list_begin_end (uiout, "stack-args");
 
   /* Now let's print the frames up to frame_high, or until there are
-     frames in the stack. */
+     frames in the stack.  */
   for (;
        fi && (i <= frame_high || frame_high == -1);
        i++, fi = get_prev_frame (fi))
@@ -223,6 +226,7 @@ mi_cmd_stack_list_args (char *command, char **argv, int argc)
    current frame.  ARGC must be 1 and ARGV[0] specify if only the names,
    or both names and values of the variables must be printed.  See 
    parse_print_value for possible values.  */
+
 void
 mi_cmd_stack_list_variables (char *command, char **argv, int argc)
 {
@@ -236,19 +240,23 @@ mi_cmd_stack_list_variables (char *command, char **argv, int argc)
   list_args_or_locals (all, parse_print_values (argv[0]), frame);
 }
 
-/* Print single local or argument.  ARG must be already read in.  For WHAT and
-   VALUES see list_args_or_locals.
+/* Print single local or argument.  ARG must be already read in.  For
+   WHAT and VALUES see list_args_or_locals.
 
-   Errors are printed as if they would be the parameter value.  Use zeroed ARG
-   iff it should not be printed accoring to VALUES.  */
+   Errors are printed as if they would be the parameter value.  Use
+   zeroed ARG iff it should not be printed according to VALUES.  */
 
 static void
 list_arg_or_local (const struct frame_arg *arg, enum what_to_list what,
 		   enum print_values values)
 {
+  struct cleanup *old_chain;
   struct cleanup *cleanup_tuple = NULL;
   struct ui_out *uiout = current_uiout;
-  struct ui_stream *stb = ui_out_stream_new (uiout);
+  struct ui_file *stb;
+
+  stb = mem_fileopen ();
+  old_chain = make_cleanup_ui_file_delete (stb);
 
   gdb_assert (!arg->val || !arg->error);
   gdb_assert ((values == PRINT_NO_VALUES && arg->val == NULL
@@ -263,9 +271,9 @@ list_arg_or_local (const struct frame_arg *arg, enum what_to_list what,
   if (values != PRINT_NO_VALUES || what == all)
     cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
 
-  fputs_filtered (SYMBOL_PRINT_NAME (arg->sym), stb->stream);
+  fputs_filtered (SYMBOL_PRINT_NAME (arg->sym), stb);
   if (arg->entry_kind == print_entry_values_only)
-    fputs_filtered ("@entry", stb->stream);
+    fputs_filtered ("@entry", stb);
   ui_out_field_stream (uiout, "name", stb);
 
   if (what == all && SYMBOL_IS_ARGUMENT (arg->sym))
@@ -274,7 +282,7 @@ list_arg_or_local (const struct frame_arg *arg, enum what_to_list what,
   if (values == PRINT_SIMPLE_VALUES)
     {
       check_typedef (arg->sym->type);
-      type_print (arg->sym->type, "", stb->stream, -1);
+      type_print (arg->sym->type, "", stb, -1);
       ui_out_field_stream (uiout, "type", stb);
     }
 
@@ -294,40 +302,38 @@ list_arg_or_local (const struct frame_arg *arg, enum what_to_list what,
 
 	      get_raw_print_options (&opts);
 	      opts.deref_ref = 1;
-	      common_val_print (arg->val, stb->stream, 0, &opts,
+	      common_val_print (arg->val, stb, 0, &opts,
 				language_def (SYMBOL_LANGUAGE (arg->sym)));
 	    }
 	}
       if (except.message)
-	fprintf_filtered (stb->stream, _("<error reading variable: %s>"),
+	fprintf_filtered (stb, _("<error reading variable: %s>"),
 			  except.message);
       ui_out_field_stream (uiout, "value", stb);
     }
 
-  ui_out_stream_delete (stb);
   if (values != PRINT_NO_VALUES || what == all)
     do_cleanups (cleanup_tuple);
+  do_cleanups (old_chain);
 }
 
 /* Print a list of the locals or the arguments for the currently
    selected frame.  If the argument passed is 0, printonly the names
    of the variables, if an argument of 1 is passed, print the values
-   as well. */
+   as well.  */
+
 static void
 list_args_or_locals (enum what_to_list what, enum print_values values,
 		     struct frame_info *fi)
 {
   struct block *block;
   struct symbol *sym;
-  struct dict_iterator iter;
+  struct block_iterator iter;
   struct cleanup *cleanup_list;
-  struct ui_stream *stb;
   struct type *type;
   char *name_of_result;
   struct ui_out *uiout = current_uiout;
 
-  stb = ui_out_stream_new (uiout);
-
   block = get_frame_block (fi, 0);
 
   switch (what)
@@ -389,11 +395,12 @@ list_args_or_locals (enum what_to_list what, enum print_values values,
 	      struct frame_arg arg, entryarg;
 
 	      if (SYMBOL_IS_ARGUMENT (sym))
-		sym2 = lookup_symbol (SYMBOL_NATURAL_NAME (sym),
+		sym2 = lookup_symbol (SYMBOL_LINKAGE_NAME (sym),
 				      block, VAR_DOMAIN,
 				      (int *) NULL);
 	      else
 		sym2 = sym;
+	      gdb_assert (sym2 != NULL);
 
 	      memset (&arg, 0, sizeof (arg));
 	      arg.sym = sym2;
@@ -424,13 +431,13 @@ list_args_or_locals (enum what_to_list what, enum print_values values,
 	      xfree (entryarg.error);
 	    }
 	}
+
       if (BLOCK_FUNCTION (block))
 	break;
       else
 	block = BLOCK_SUPERBLOCK (block);
     }
   do_cleanups (cleanup_list);
-  ui_out_stream_delete (stb);
 }
 
 void
@@ -446,7 +453,7 @@ void
 mi_cmd_stack_info_frame (char *command, char **argv, int argc)
 {
   if (argc > 0)
-    error (_("-stack-info-frame: No arguments required"));
+    error (_("-stack-info-frame: No arguments allowed"));
 
   print_frame_info (get_selected_frame (NULL), 1, LOC_AND_ADDRESS, 0);
 }
diff --git a/gdb/mi/mi-cmd-target.c b/gdb/mi/mi-cmd-target.c
index edeedaf..e6e04a7 100644
--- a/gdb/mi/mi-cmd-target.c
+++ b/gdb/mi/mi-cmd-target.c
@@ -26,21 +26,21 @@
 void
 mi_cmd_target_file_get (char *command, char **argv, int argc)
 {
-  int optind = 0;
-  char *optarg;
+  int oind = 0;
+  char *oarg;
   const char *remote_file, *local_file;
   static const struct mi_opt opts[] =
-  {
-    { 0, 0, 0 }
-  };
+    {
+      { 0, 0, 0 }
+    };
   static const char prefix[] = "-target-file-get";
 
-  if (mi_getopt (prefix, argc, argv, opts, &optind, &optarg) != -1
-      || optind != argc - 2)
+  if (mi_getopt (prefix, argc, argv, opts, &oind, &oarg) != -1
+      || oind != argc - 2)
     error (_("-target-file-get: Usage: REMOTE_FILE LOCAL_FILE"));
 
-  remote_file = argv[optind];
-  local_file = argv[optind + 1];
+  remote_file = argv[oind];
+  local_file = argv[oind + 1];
 
   remote_file_get (remote_file, local_file, 0);
 }
@@ -50,21 +50,21 @@ mi_cmd_target_file_get (char *command, char **argv, int argc)
 void
 mi_cmd_target_file_put (char *command, char **argv, int argc)
 {
-  int optind = 0;
-  char *optarg;
+  int oind = 0;
+  char *oarg;
   const char *remote_file, *local_file;
   static const struct mi_opt opts[] =
-  {
-    { 0, 0, 0 }
-  };
+    {
+      { 0, 0, 0 }
+    };
   static const char prefix[] = "-target-file-put";
 
-  if (mi_getopt (prefix, argc, argv, opts, &optind, &optarg) != -1
-      || optind != argc - 2)
+  if (mi_getopt (prefix, argc, argv, opts, &oind, &oarg) != -1
+      || oind != argc - 2)
     error (_("-target-file-put: Usage: LOCAL_FILE REMOTE_FILE"));
 
-  local_file = argv[optind];
-  remote_file = argv[optind + 1];
+  local_file = argv[oind];
+  remote_file = argv[oind + 1];
 
   remote_file_put (local_file, remote_file, 0);
 }
@@ -74,20 +74,20 @@ mi_cmd_target_file_put (char *command, char **argv, int argc)
 void
 mi_cmd_target_file_delete (char *command, char **argv, int argc)
 {
-  int optind = 0;
-  char *optarg;
+  int oind = 0;
+  char *oarg;
   const char *remote_file;
   static const struct mi_opt opts[] =
-  {
-    { 0, 0, 0 }
-  };
+    {
+      { 0, 0, 0 }
+    };
   static const char prefix[] = "-target-file-delete";
 
-  if (mi_getopt (prefix, argc, argv, opts, &optind, &optarg) != -1
-      || optind != argc - 1)
+  if (mi_getopt (prefix, argc, argv, opts, &oind, &oarg) != -1
+      || oind != argc - 1)
     error (_("-target-file-delete: Usage: REMOTE_FILE"));
 
-  remote_file = argv[optind];
+  remote_file = argv[oind];
 
   remote_file_delete (remote_file, 0);
 }
diff --git a/gdb/mi/mi-cmd-var.c b/gdb/mi/mi-cmd-var.c
index 1bc7144..0603679 100644
--- a/gdb/mi/mi-cmd-var.c
+++ b/gdb/mi/mi-cmd-var.c
@@ -1,5 +1,4 @@
 /* MI Command Set - varobj commands.
-
    Copyright (C) 2000, 2002, 2004-2005, 2007-2012 Free Software
    Foundation, Inc.
 
@@ -38,8 +37,8 @@ const char mi_all_values[] = "--all-values";
 extern int varobjdebug;		/* defined in varobj.c.  */
 
 static void varobj_update_one (struct varobj *var,
-			      enum print_values print_values,
-			      int explicit);
+			       enum print_values print_values,
+			       int explicit);
 
 static int mi_print_value_p (struct varobj *var,
 			     enum print_values print_values);
@@ -47,6 +46,7 @@ static int mi_print_value_p (struct varobj *var,
 /* Print variable object VAR.  The PRINT_VALUES parameter controls
    if the value should be printed.  The PRINT_EXPRESSION parameter
    controls if the expression should be printed.  */
+
 static void 
 print_varobj (struct varobj *var, enum print_values print_values,
 	      int print_expression)
@@ -109,15 +109,11 @@ mi_cmd_var_create (char *command, char **argv, int argc)
   enum varobj_type var_type;
 
   if (argc != 3)
-    {
-      /* mi_error_message = xstrprintf ("-var-create: Usage:
-         ...."); return MI_CMD_ERROR; */
-      error (_("-var-create: Usage: NAME FRAME EXPRESSION."));
-    }
+    error (_("-var-create: Usage: NAME FRAME EXPRESSION."));
 
   name = xstrdup (argv[0]);
-  /* Add cleanup for name. Must be free_current_contents as
-     name can be reallocated */
+  /* Add cleanup for name. Must be free_current_contents as name can
+     be reallocated.  */
   old_cleanups = make_cleanup (free_current_contents, &name);
 
   frame = xstrdup (argv[1]);
@@ -175,12 +171,12 @@ mi_cmd_var_delete (char *command, char **argv, int argc)
     error (_("-var-delete: Usage: [-c] EXPRESSION."));
 
   name = xstrdup (argv[0]);
-  /* Add cleanup for name. Must be free_current_contents as
-     name can be reallocated */
+  /* Add cleanup for name. Must be free_current_contents as name can
+     be reallocated.  */
   old_cleanups = make_cleanup (free_current_contents, &name);
 
   /* If we have one single argument it cannot be '-c' or any string
-     starting with '-'. */
+     starting with '-'.  */
   if (argc == 1)
     {
       if (strcmp (name, "-c") == 0)
@@ -191,7 +187,7 @@ mi_cmd_var_delete (char *command, char **argv, int argc)
     }
 
   /* If we have 2 arguments they must be '-c' followed by a string
-     which would be the variable name. */
+     which would be the variable name.  */
   if (argc == 2)
     {
       if (strcmp (name, "-c") != 0)
@@ -203,7 +199,7 @@ mi_cmd_var_delete (char *command, char **argv, int argc)
     }
 
   /* If we didn't error out, now NAME contains the name of the
-     variable. */
+     variable.  */
 
   var = varobj_get_handle (name);
 
@@ -252,18 +248,18 @@ mi_cmd_var_set_format (char *command, char **argv, int argc)
   if (argc != 2)
     error (_("-var-set-format: Usage: NAME FORMAT."));
 
-  /* Get varobj handle, if a valid var obj name was specified */
+  /* Get varobj handle, if a valid var obj name was specified.  */
   var = varobj_get_handle (argv[0]);
 
   format = mi_parse_format (argv[1]);
   
-  /* Set the format of VAR to given format */
+  /* Set the format of VAR to the given format.  */
   varobj_set_display_format (var, format);
 
-  /* Report the new current format */
+  /* Report the new current format.  */
   ui_out_field_string (uiout, "format", varobj_format_string[(int) format]);
  
-  /* Report the value in the new format */
+  /* Report the value in the new format.  */
   val = varobj_get_value (var);
   ui_out_field_string (uiout, "value", val);
   xfree (val);
@@ -305,12 +301,11 @@ mi_cmd_var_set_frozen (char *command, char **argv, int argc)
 
   varobj_set_frozen (var, frozen);
 
-  /* We don't automatically return the new value, or what varobjs got new
-     values during unfreezing.  If this information is required, client
-     should call -var-update explicitly.  */
+  /* We don't automatically return the new value, or what varobjs got
+     new values during unfreezing.  If this information is required,
+     client should call -var-update explicitly.  */
 }
 
-
 void
 mi_cmd_var_show_format (char *command, char **argv, int argc)
 {
@@ -321,12 +316,12 @@ mi_cmd_var_show_format (char *command, char **argv, int argc)
   if (argc != 1)
     error (_("-var-show-format: Usage: NAME."));
 
-  /* Get varobj handle, if a valid var obj name was specified */
+  /* Get varobj handle, if a valid var obj name was specified.  */
   var = varobj_get_handle (argv[0]);
 
   format = varobj_get_display_format (var);
 
-  /* Report the current format */
+  /* Report the current format.  */
   ui_out_field_string (uiout, "format", varobj_format_string[(int) format]);
 }
 
@@ -339,7 +334,7 @@ mi_cmd_var_info_num_children (char *command, char **argv, int argc)
   if (argc != 1)
     error (_("-var-info-num-children: Usage: NAME."));
 
-  /* Get varobj handle, if a valid var obj name was specified */
+  /* Get varobj handle, if a valid var obj name was specified.  */
   var = varobj_get_handle (argv[0]);
 
   ui_out_field_int (uiout, "numchild", varobj_get_num_children (var));
@@ -413,7 +408,7 @@ mi_cmd_var_list_children (char *command, char **argv, int argc)
     error (_("-var-list-children: Usage: "
 	     "[PRINT_VALUES] NAME [FROM TO]"));
 
-  /* Get varobj handle, if a valid var obj name was specified */
+  /* Get varobj handle, if a valid var obj name was specified.  */
   if (argc == 1 || argc == 3)
     var = varobj_get_handle (argv[0]);
   else
@@ -479,7 +474,7 @@ mi_cmd_var_info_type (char *command, char **argv, int argc)
   if (argc != 1)
     error (_("-var-info-type: Usage: NAME."));
 
-  /* Get varobj handle, if a valid var obj name was specified */
+  /* Get varobj handle, if a valid var obj name was specified.  */
   var = varobj_get_handle (argv[0]);
 
   ui_out_field_string (uiout, "type", varobj_get_type (var));
@@ -513,7 +508,7 @@ mi_cmd_var_info_expression (char *command, char **argv, int argc)
   if (argc != 1)
     error (_("-var-info-expression: Usage: NAME."));
 
-  /* Get varobj handle, if a valid var obj name was specified */
+  /* Get varobj handle, if a valid var obj name was specified.  */
   var = varobj_get_handle (argv[0]);
 
   lang = varobj_get_language (var);
@@ -554,50 +549,50 @@ mi_cmd_var_evaluate_expression (char *command, char **argv, int argc)
 
   enum varobj_display_formats format;
   int formatFound;
-  int optind;
-  char *optarg;
+  int oind;
+  char *oarg;
     
   enum opt
-    {
-      OP_FORMAT
-    };
-  static const struct mi_opt opts[] =
   {
-    {"f", OP_FORMAT, 1},
-    { 0, 0, 0 }
+    OP_FORMAT
   };
+  static const struct mi_opt opts[] =
+    {
+      {"f", OP_FORMAT, 1},
+      { 0, 0, 0 }
+    };
 
-  /* Parse arguments */
+  /* Parse arguments.  */
   format = FORMAT_NATURAL;
   formatFound = 0;
-  optind = 0;
+  oind = 0;
   while (1)
     {
       int opt = mi_getopt ("-var-evaluate-expression", argc, argv,
-			   opts, &optind, &optarg);
+			   opts, &oind, &oarg);
 
       if (opt < 0)
 	break;
       switch ((enum opt) opt)
-      {
+	{
 	case OP_FORMAT:
 	  if (formatFound)
 	    error (_("Cannot specify format more than once"));
    
-	  format = mi_parse_format (optarg);
+	  format = mi_parse_format (oarg);
 	  formatFound = 1;
 	  break;
-      }
+	}
     }
 
-  if (optind >= argc)
+  if (oind >= argc)
     error (_("Usage: [-f FORMAT] NAME"));
    
-  if (optind < argc - 1)
+  if (oind < argc - 1)
     error (_("Garbage at end of command"));
  
-     /* Get varobj handle, if a valid var obj name was specified */
-  var = varobj_get_handle (argv[optind]);
+  /* Get varobj handle, if a valid var obj name was specified.  */
+  var = varobj_get_handle (argv[oind]);
    
   if (formatFound)
     {
@@ -625,7 +620,7 @@ mi_cmd_var_assign (char *command, char **argv, int argc)
   if (argc != 2)
     error (_("-var-assign: Usage: NAME EXPRESSION."));
 
-  /* Get varobj handle, if a valid var obj name was specified */
+  /* Get varobj handle, if a valid var obj name was specified.  */
   var = varobj_get_handle (argv[0]);
 
   if (!varobj_editable_p (var))
@@ -672,9 +667,9 @@ mi_cmd_var_update_iter (struct varobj *var, void *data_pointer)
 	thread_stopped = 1;
     }
 
-  if (thread_stopped)
-    if (!data->only_floating || varobj_floating_p (var))
-      varobj_update_one (var, data->print_values, 0 /* implicit */);
+  if (thread_stopped
+      && (!data->only_floating || varobj_floating_p (var)))
+    varobj_update_one (var, data->print_values, 0 /* implicit */);
 }
 
 void
@@ -691,7 +686,7 @@ mi_cmd_var_update (char *command, char **argv, int argc)
   if (argc == 1)
     name = argv[0];
   else
-    name = (argv[1]);
+    name = argv[1];
 
   if (argc == 2)
     print_values = mi_parse_values_option (argv[0]);
@@ -703,25 +698,25 @@ mi_cmd_var_update (char *command, char **argv, int argc)
   else
     cleanup = make_cleanup_ui_out_list_begin_end (uiout, "changelist");
 
-  /* Check if the parameter is a "*" which means that we want
-     to update all variables */
+  /* Check if the parameter is a "*", which means that we want to
+     update all variables.  */
 
   if ((*name == '*' || *name == '@') && (*(name + 1) == '\0'))
     {
       struct mi_cmd_var_update data;
 
-      data.only_floating = *name == '@';
+      data.only_floating = (*name == '@');
       data.print_values = print_values;
 
-      /* varobj_update_one automatically updates all the children of VAROBJ.
-	 Therefore update each VAROBJ only once by iterating only the root
-	 VAROBJs.  */
+      /* varobj_update_one automatically updates all the children of
+	 VAROBJ.  Therefore update each VAROBJ only once by iterating
+	 only the root VAROBJs.  */
 
       all_root_varobjs (mi_cmd_var_update_iter, &data);
     }
   else
     {
-      /* Get varobj handle, if a valid var obj name was specified */
+      /* Get varobj handle, if a valid var obj name was specified.  */
       struct varobj *var = varobj_get_handle (name);
 
       varobj_update_one (var, print_values, 1 /* explicit */);
@@ -835,6 +830,7 @@ mi_cmd_enable_pretty_printing (char *command, char **argv, int argc)
 {
   if (argc != 0)
     error (_("-enable-pretty-printing: no arguments allowed"));
+
   varobj_enable_pretty_printing ();
 }
 
diff --git a/gdb/mi/mi-cmds.c b/gdb/mi/mi-cmds.c
index 81648a7..79fbba1 100644
--- a/gdb/mi/mi-cmds.c
+++ b/gdb/mi/mi-cmds.c
@@ -1,5 +1,4 @@
 /* MI Command Set for GDB, the GNU debugger.
-
    Copyright (C) 2000-2001, 2003, 2007-2012 Free Software Foundation,
    Inc.
 
@@ -26,11 +25,11 @@
 #include "gdb_string.h"
 
 extern void _initialize_mi_cmds (void);
+
 struct mi_cmd;
 static struct mi_cmd **lookup_table (const char *command);
 static void build_table (struct mi_cmd *commands);
 
-
 struct mi_cmd mi_cmds[] =
 {
   { "ada-task-info", { NULL, 0 }, mi_cmd_ada_task_info },
@@ -90,6 +89,7 @@ struct mi_cmd mi_cmds[] =
   { "gdb-version", { "show version", 0 }, 0 },
   { "inferior-tty-set", { NULL, 0 }, mi_cmd_inferior_tty_set},
   { "inferior-tty-show", { NULL, 0 }, mi_cmd_inferior_tty_show},
+  { "info-os", { NULL, 0 }, mi_cmd_info_os},
   { "interpreter-exec", { NULL, 0 }, mi_cmd_interpreter_exec},
   { "list-features", { NULL, 0 }, mi_cmd_list_features},
   { "list-target-features", { NULL, 0 }, mi_cmd_list_target_features},
@@ -140,24 +140,25 @@ struct mi_cmd mi_cmds[] =
   { NULL, }
 };
 
-/* Pointer to the mi command table (built at run time) */
+/* Pointer to the mi command table (built at run time). */
 
 static struct mi_cmd **mi_table;
 
-/* A prime large enough to accomodate the entire command table */
+/* A prime large enough to accomodate the entire command table.  */
 enum
   {
     MI_TABLE_SIZE = 227
   };
 
-/* Exported function used to obtain info from the table */
+/* Exported function used to obtain info from the table.  */
 struct mi_cmd *
 mi_lookup (const char *command)
 {
   return *lookup_table (command);
 }
 
-/* stat collecting */
+/* Used for collecting hash hit/miss statistics.  */
+
 struct mi_cmd_stats
 {
   int hit;
@@ -166,20 +167,21 @@ struct mi_cmd_stats
 };
 struct mi_cmd_stats stats;
 
-/* our lookup function */
+/* Look up a command.  */
+
 static struct mi_cmd **
 lookup_table (const char *command)
 {
   const char *chp;
   unsigned int index = 0;
 
-  /* compute our hash */
+  /* Compute our hash.  */
   for (chp = command; *chp; chp++)
     {
-      /* some what arbitrary */
+      /* We use a somewhat arbitrary formula.  */
       index = ((index << 6) + (unsigned int) *chp) % MI_TABLE_SIZE;
     }
-  /* look it up */
+
   while (1)
     {
       struct mi_cmd **entry = &mi_table[index];
@@ -218,6 +220,7 @@ build_table (struct mi_cmd *commands)
 			_("command `%s' appears to be duplicated"),
 			command->name);
       *entry = command;
+      /* FIXME lose these prints */
       if (0)
 	{
 	  fprintf_unfiltered (gdb_stdlog, "%-30s %2d\n",
diff --git a/gdb/mi/mi-cmds.h b/gdb/mi/mi-cmds.h
index 309a3ce..4d0fc9d 100644
--- a/gdb/mi/mi-cmds.h
+++ b/gdb/mi/mi-cmds.h
@@ -35,7 +35,8 @@ extern const char mi_all_values[];
 
 typedef void (mi_cmd_argv_ftype) (char *command, char **argv, int argc);
 
-/* Function implementing each command */
+/* Declarations of the functions implementing each command.  */
+
 extern mi_cmd_argv_ftype mi_cmd_ada_task_info;
 extern mi_cmd_argv_ftype mi_cmd_add_inferior;
 extern mi_cmd_argv_ftype mi_cmd_break_insert;
@@ -72,6 +73,7 @@ extern mi_cmd_argv_ftype mi_cmd_file_list_exec_source_files;
 extern mi_cmd_argv_ftype mi_cmd_gdb_exit;
 extern mi_cmd_argv_ftype mi_cmd_inferior_tty_set;
 extern mi_cmd_argv_ftype mi_cmd_inferior_tty_show;
+extern mi_cmd_argv_ftype mi_cmd_info_os;
 extern mi_cmd_argv_ftype mi_cmd_interpreter_exec;
 extern mi_cmd_argv_ftype mi_cmd_list_features;
 extern mi_cmd_argv_ftype mi_cmd_list_target_features;
@@ -117,7 +119,7 @@ extern mi_cmd_argv_ftype mi_cmd_var_update;
 extern mi_cmd_argv_ftype mi_cmd_enable_pretty_printing;
 extern mi_cmd_argv_ftype mi_cmd_var_set_update_range;
 
-/* Description of a single command. */
+/* Description of a single command.  */
 
 struct mi_cli
 {
@@ -129,7 +131,7 @@ struct mi_cli
 
 struct mi_cmd
 {
-  /* official name of the command.  */
+  /* Official name of the command.  */
   const char *name;
   /* The corresponding CLI command that can be used to implement this
      MI command (if cli.lhs is non NULL).  */
@@ -138,7 +140,7 @@ struct mi_cmd
   mi_cmd_argv_ftype *argv_func;
 };
 
-/* Lookup a command in the mi comand table */
+/* Lookup a command in the MI command table.  */
 
 extern struct mi_cmd *mi_lookup (const char *command);
 
diff --git a/gdb/mi/mi-common.c b/gdb/mi/mi-common.c
index 1eaa990..1a3851e 100644
--- a/gdb/mi/mi-common.c
+++ b/gdb/mi/mi-common.c
@@ -43,7 +43,8 @@ static const char * const async_reason_string_lookup[] =
   NULL
 };
 
-static_assert (ARRAY_SIZE (async_reason_string_lookup) == EXEC_ASYNC_LAST + 1);
+gdb_static_assert (ARRAY_SIZE (async_reason_string_lookup)
+		   == EXEC_ASYNC_LAST + 1);
 
 const char *
 async_reason_lookup (enum async_reply_reason reason)
diff --git a/gdb/mi/mi-console.c b/gdb/mi/mi-console.c
index 6b4601b..b04e65c 100644
--- a/gdb/mi/mi-console.c
+++ b/gdb/mi/mi-console.c
@@ -19,12 +19,15 @@
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
+/* An MI console is a kind of ui_file stream that sends output to
+   stdout, but encapsulated and prefixed with a distinctive string;
+   for instance, error output is normally identified by a leading
+   "&".  */
+
 #include "defs.h"
 #include "mi-console.h"
 #include "gdb_string.h"
 
-/* MI-console: send output to std-out but correcty encapsulated */
-
 static ui_file_fputs_ftype mi_console_file_fputs;
 static ui_file_flush_ftype mi_console_file_flush;
 static ui_file_delete_ftype mi_console_file_delete;
@@ -38,11 +41,15 @@ struct mi_console_file
     char quote;
   };
 
-int mi_console_file_magic;
+/* Use the address of this otherwise-unused global as a magic number
+   identifying this class of ui_file objects.  */
+static int mi_console_file_magic;
+
+/* Create a console that wraps the given output stream RAW with the
+   string PREFIX and quoting it with QUOTE.  */
 
 struct ui_file *
-mi_console_file_new (struct ui_file *raw,
-		     const char *prefix, char quote)
+mi_console_file_new (struct ui_file *raw, const char *prefix, char quote)
 {
   struct ui_file *ui_file = ui_file_new ();
   struct mi_console_file *mi_console = XMALLOC (struct mi_console_file);
@@ -55,6 +62,7 @@ mi_console_file_new (struct ui_file *raw,
   set_ui_file_fputs (ui_file, mi_console_file_fputs);
   set_ui_file_flush (ui_file, mi_console_file_flush);
   set_ui_file_data (ui_file, mi_console, mi_console_file_delete);
+
   return ui_file;
 }
 
@@ -66,36 +74,36 @@ mi_console_file_delete (struct ui_file *file)
   if (mi_console->magic != &mi_console_file_magic)
     internal_error (__FILE__, __LINE__,
 		    _("mi_console_file_delete: bad magic number"));
+
   xfree (mi_console);
 }
 
 static void
-mi_console_file_fputs (const char *buf,
-		       struct ui_file *file)
+mi_console_file_fputs (const char *buf, struct ui_file *file)
 {
   struct mi_console_file *mi_console = ui_file_data (file);
 
   if (mi_console->magic != &mi_console_file_magic)
     internal_error (__FILE__, __LINE__,
 		    "mi_console_file_fputs: bad magic number");
-  /* Append the text to our internal buffer */
+
+  /* Append the text to our internal buffer.  */
   fputs_unfiltered (buf, mi_console->buffer);
-  /* Flush when an embedded \n */
+  /* Flush when an embedded newline is present anywhere in the buffer.  */
   if (strchr (buf, '\n') != NULL)
     gdb_flush (file);
 }
 
-/* Transform a byte sequence into a console output packet. */
+/* Transform a byte sequence into a console output packet.  */
+
 static void
-mi_console_raw_packet (void *data,
-		       const char *buf,
-		       long length_buf)
+mi_console_raw_packet (void *data, const char *buf, long length_buf)
 {
   struct mi_console_file *mi_console = data;
 
   if (mi_console->magic != &mi_console_file_magic)
     internal_error (__FILE__, __LINE__,
-		    _("mi_console_file_transform: bad magic number"));
+		    _("mi_console_raw_packet: bad magic number"));
 
   if (length_buf > 0)
     {
@@ -124,6 +132,24 @@ mi_console_file_flush (struct ui_file *file)
   if (mi_console->magic != &mi_console_file_magic)
     internal_error (__FILE__, __LINE__,
 		    _("mi_console_file_flush: bad magic number"));
+
   ui_file_put (mi_console->buffer, mi_console_raw_packet, mi_console);
   ui_file_rewind (mi_console->buffer);
+
+}
+
+/* Change the underlying stream of the console directly; this is
+   useful as a minimum-impact way to reflect external changes like
+   logging enable/disable.  */
+
+void
+mi_console_set_raw (struct ui_file *file, struct ui_file *raw)
+{
+  struct mi_console_file *mi_console = ui_file_data (file);
+
+  if (mi_console->magic != &mi_console_file_magic)
+    internal_error (__FILE__, __LINE__,
+		    _("mi_console_file_set_raw: bad magic number"));
+
+  mi_console->raw = raw;
 }
diff --git a/gdb/mi/mi-console.h b/gdb/mi/mi-console.h
index 9727eb6..7e9009f 100644
--- a/gdb/mi/mi-console.h
+++ b/gdb/mi/mi-console.h
@@ -24,4 +24,7 @@ extern struct ui_file *mi_console_file_new (struct ui_file *raw,
 					    const char *prefix,
 					    char quote);
 
+extern void mi_console_set_raw (struct ui_file *console,
+				struct ui_file *raw);
+
 #endif
diff --git a/gdb/mi/mi-getopt.c b/gdb/mi/mi-getopt.c
index 2e288a2..3a7c6a3 100644
--- a/gdb/mi/mi-getopt.c
+++ b/gdb/mi/mi-getopt.c
@@ -25,49 +25,49 @@ int
 mi_getopt (const char *prefix,
 	   int argc, char **argv,
 	   const struct mi_opt *opts,
-	   int *optind, char **optarg)
+	   int *oind, char **oarg)
 {
   char *arg;
   const struct mi_opt *opt;
 
-  /* We assume that argv/argc are ok. */
-  if (*optind > argc || *optind < 0)
+  /* We assume that argv/argc are ok.  */
+  if (*oind > argc || *oind < 0)
     internal_error (__FILE__, __LINE__,
-		    _("mi_getopt_long: optind out of bounds"));
-  if (*optind == argc)
+		    _("mi_getopt_long: oind out of bounds"));
+  if (*oind == argc)
     return -1;
-  arg = argv[*optind];
+  arg = argv[*oind];
   /* ``--''? */
   if (strcmp (arg, "--") == 0)
     {
-      *optind += 1;
-      *optarg = NULL;
+      *oind += 1;
+      *oarg = NULL;
       return -1;
     }
-  /* End of option list. */
+  /* End of option list.  */
   if (arg[0] != '-')
     {
-      *optarg = NULL;
+      *oarg = NULL;
       return -1;
     }
-  /* Look the option up. */
+  /* Look the option up.  */
   for (opt = opts; opt->name != NULL; opt++)
     {
       if (strcmp (opt->name, arg + 1) != 0)
 	continue;
       if (opt->arg_p)
 	{
-	  /* A non-simple optarg option. */
-	  if (argc < *optind + 2)
+	  /* A non-simple oarg option.  */
+	  if (argc < *oind + 2)
 	    error (_("%s: Option %s requires an argument"), prefix, arg);
-	  *optarg = argv[(*optind) + 1];
-	  *optind = (*optind) + 2;
+	  *oarg = argv[(*oind) + 1];
+	  *oind = (*oind) + 2;
 	  return opt->index;
 	}
       else
 	{
-	  *optarg = NULL;
-	  *optind = (*optind) + 1;
+	  *oarg = NULL;
+	  *oind = (*oind) + 1;
 	  return opt->index;
 	}
     }
@@ -77,14 +77,14 @@ mi_getopt (const char *prefix,
 int 
 mi_valid_noargs (const char *prefix, int argc, char **argv) 
 {
-  int optind = 0;
-  char *optarg;
+  int oind = 0;
+  char *oarg;
   static const struct mi_opt opts[] =
-  {
-    { 0, 0, 0 }
-  };
+    {
+      { 0, 0, 0 }
+    };
 
-  if (mi_getopt (prefix, argc, argv, opts, &optind, &optarg) == -1)
+  if (mi_getopt (prefix, argc, argv, opts, &oind, &oarg) == -1)
     return 1;
   else
     return 0;
diff --git a/gdb/mi/mi-getopt.h b/gdb/mi/mi-getopt.h
index ea09b44..bfb305d 100644
--- a/gdb/mi/mi-getopt.h
+++ b/gdb/mi/mi-getopt.h
@@ -20,6 +20,16 @@
 #ifndef MI_GETOPT_H
 #define MI_GETOPT_H
 
+/* The option list.  Terminated by NAME==NULL.  ARG_P that the option
+   requires an argument.  INDEX is returned to identify the option.  */
+
+struct mi_opt
+  {
+    const char *name;
+    int index;
+    int arg_p;
+  };
+
 /* Like getopt() but with simpler semantics.
 
    An option has the form ``-<name>''. The special option ``--''
@@ -37,30 +47,16 @@
    to specify the non-option argument.  OPTARG is set to NULL.
 
    mi_getopt() calls ``error("%s: Unknown option %c", prefix,
-   option)'' if an unknown option is encountered. */
+   option)'' if an unknown option is encountered.  */
 
-struct mi_opt;
 extern int mi_getopt (const char *prefix, int argc, char **argv,
 		      const struct mi_opt *opt, int *optind, char **optarg);
 
-/* The option list.  Terminated by NAME==NULL.  ARG_P that the option
-   requires an argument.  INDEX is returned to identify th option. */
-
-struct mi_opt
-  {
-    const char *name;
-    int index;
-    int arg_p;
-  };
-
-struct mi_opt;
-
-/* mi_valid_noargs
-   
-   Determines if ARGC/ARGV are a valid set of parameters to satisfy 
-   an MI function that is not supposed to recieve any arguments.
+/* mi_valid_noargs determines if ARGC/ARGV are a valid set of
+   parameters to satisfy an MI function that is not supposed to
+   recieve any arguments.
    
-   An MI function that should not recieve arguments can still be 
+   An MI function that should not receive arguments can still be 
    passed parameters after the special option '--' such as below.
 
    Example: The MI function -exec-run takes no args.
diff --git a/gdb/mi/mi-interp.c b/gdb/mi/mi-interp.c
index c9cd24d..b487136 100644
--- a/gdb/mi/mi-interp.c
+++ b/gdb/mi/mi-interp.c
@@ -36,15 +36,19 @@
 #include "solist.h"
 #include "gdb.h"
 
-/* These are the interpreter setup, etc. functions for the MI interpreter */
+/* These are the interpreter setup, etc. functions for the MI
+   interpreter.  */
+
 static void mi_execute_command_wrapper (char *cmd);
+static void mi_execute_command_input_handler (char *cmd);
 static void mi_command_loop (int mi_version);
 
 /* These are hooks that we put in place while doing interpreter_exec
-   so we can report interesting things that happened "behind the mi's
-   back" in this command */
+   so we can report interesting things that happened "behind the MI's
+   back" in this command.  */
+
 static int mi_interp_query_hook (const char *ctlstr, va_list ap)
-     ATTRIBUTE_PRINTF (1, 0);
+  ATTRIBUTE_PRINTF (1, 0);
 
 static void mi3_command_loop (void);
 static void mi2_command_loop (void);
@@ -77,14 +81,15 @@ mi_interpreter_init (struct interp *interp, int top_level)
   const char *name;
   int mi_version;
 
-  /* HACK: We need to force stdout/stderr to point at the console.  This avoids
-     any potential side effects caused by legacy code that is still
-     using the TUI / fputs_unfiltered_hook.  So we set up output channels for
-     this now, and swap them in when we are run. */
+  /* Assign the output channel created at startup to its own global,
+     so that we can create a console channel that encapsulates and
+     prefixes all gdb_output-type bits coming from the rest of the
+     debugger.  */
 
-  raw_stdout = stdio_fileopen (stdout);
+  raw_stdout = gdb_stdout;
 
-  /* Create MI channels */
+  /* Create MI console channels, each with a different prefix so they
+     can be distinguished.  */
   mi->out = mi_console_file_new (raw_stdout, "~", '"');
   mi->err = mi_console_file_new (raw_stdout, "&", '"');
   mi->log = mi->err;
@@ -124,9 +129,10 @@ mi_interpreter_init (struct interp *interp, int top_level)
       observer_attach_breakpoint_deleted (mi_breakpoint_deleted);
       observer_attach_breakpoint_modified (mi_breakpoint_modified);
 
-      /* The initial inferior is created before this function is called, so we
-	 need to report it explicitly.  Use iteration in case future version
-	 of GDB creates more than one inferior up-front.  */
+      /* The initial inferior is created before this function is
+	 called, so we need to report it explicitly.  Use iteration in
+	 case future version of GDB creates more than one inferior
+	 up-front.  */
       iterate_over_inferiors (report_initial_inferior, mi);
     }
 
@@ -138,13 +144,14 @@ mi_interpreter_resume (void *data)
 {
   struct mi_interp *mi = data;
 
-  /* As per hack note in mi_interpreter_init, swap in the output channels... */
+  /* As per hack note in mi_interpreter_init, swap in the output
+     channels... */
   gdb_setup_readline ();
 
   /* These overwrite some of the initialization done in
      _intialize_event_loop.  */
   call_readline = gdb_readline2;
-  input_handler = mi_execute_command_wrapper;
+  input_handler = mi_execute_command_input_handler;
   add_file_handler (input_fd, stdin_event_handler, 0);
   async_command_editing_p = 0;
   /* FIXME: This is a total hack for now.  PB's use of the MI
@@ -156,12 +163,12 @@ mi_interpreter_resume (void *data)
   sync_execution = 0;
 
   gdb_stdout = mi->out;
-  /* Route error and log output through the MI */
+  /* Route error and log output through the MI.  */
   gdb_stderr = mi->err;
   gdb_stdlog = mi->log;
-  /* Route target output through the MI. */
+  /* Route target output through the MI.  */
   gdb_stdtarg = mi->targ;
-  /* Route target error through the MI as well. */
+  /* Route target error through the MI as well.  */
   gdb_stdtargerr = mi->targ;
 
   /* Replace all the hooks that we know about.  There really needs to
@@ -170,7 +177,7 @@ mi_interpreter_resume (void *data)
 
   deprecated_show_load_progress = mi_load_progress;
 
-  /* If we're _the_ interpreter, take control. */
+  /* If we're _the_ interpreter, take control.  */
   if (current_interp_named_p (INTERP_MI1))
     deprecated_command_loop_hook = mi1_command_loop;
   else if (current_interp_named_p (INTERP_MI2))
@@ -200,7 +207,8 @@ mi_interpreter_exec (void *data, const char *command)
   return exception_none;
 }
 
-/* Never display the default gdb prompt in mi case.  */
+/* Never display the default GDB prompt in MI case.  */
+
 static int
 mi_interpreter_prompt_p (void *data)
 {
@@ -229,13 +237,14 @@ mi_cmd_interpreter_exec (char *command, char **argv, int argc)
 	     "does not support command execution"),
 	      argv[0]);
 
-  /* Insert the MI out hooks, making sure to also call the interpreter's hooks
-     if it has any. */
-  /* KRS: We shouldn't need this... Events should be installed and they should
-     just ALWAYS fire something out down the MI channel... */
+  /* Insert the MI out hooks, making sure to also call the
+     interpreter's hooks if it has any.  */
+  /* KRS: We shouldn't need this... Events should be installed and
+     they should just ALWAYS fire something out down the MI
+     channel.  */
   mi_insert_notify_hooks ();
 
-  /* Now run the code... */
+  /* Now run the code.  */
 
   old_chain = make_cleanup (null_cleanup, 0);
   for (i = 1; i < argc; i++)
@@ -257,14 +266,12 @@ mi_cmd_interpreter_exec (char *command, char **argv, int argc)
   do_cleanups (old_chain);
 }
 
-/*
- * mi_insert_notify_hooks - This inserts a number of hooks that are
- * meant to produce async-notify ("=") MI messages while running
- * commands in another interpreter using mi_interpreter_exec.  The
- * canonical use for this is to allow access to the gdb CLI
- * interpreter from within the MI, while still producing MI style
- * output when actions in the CLI command change gdb's state.
-*/
+/* This inserts a number of hooks that are meant to produce
+   async-notify ("=") MI messages while running commands in another
+   interpreter using mi_interpreter_exec.  The canonical use for this
+   is to allow access to the gdb CLI interpreter from within the MI,
+   while still producing MI style output when actions in the CLI
+   command change GDB's state.  */
 
 static void
 mi_insert_notify_hooks (void)
@@ -290,6 +297,17 @@ mi_execute_command_wrapper (char *cmd)
   mi_execute_command (cmd, stdin == instream);
 }
 
+/* mi_execute_command_wrapper wrapper suitable for INPUT_HANDLER.  */
+
+static void
+mi_execute_command_input_handler (char *cmd)
+{
+  mi_execute_command_wrapper (cmd);
+
+  fputs_unfiltered ("(gdb) \n", raw_stdout);
+  gdb_flush (raw_stdout);
+}
+
 static void
 mi1_command_loop (void)
 {
@@ -312,11 +330,13 @@ static void
 mi_command_loop (int mi_version)
 {
   /* Turn off 8 bit strings in quoted output.  Any character with the
-     high bit set is printed using C's octal format. */
+     high bit set is printed using C's octal format.  */
   sevenbit_strings = 1;
-  /* Tell the world that we're alive */
+
+  /* Tell the world that we're alive.  */
   fputs_unfiltered ("(gdb) \n", raw_stdout);
   gdb_flush (raw_stdout);
+
   start_event_loop ();
 }
 
@@ -420,11 +440,11 @@ mi_on_normal_stop (struct bpstats *bs, int print_frame)
 
       if (current_uiout != mi_uiout)
 	{
-	  /* The normal_stop function has printed frame information into 
-	     CLI uiout, or some other non-MI uiout.  There's no way we
-	     can extract proper fields from random uiout object, so we print
-	     the frame again.  In practice, this can only happen when running
-	     a CLI command in MI.  */
+	  /* The normal_stop function has printed frame information
+	     into CLI uiout, or some other non-MI uiout.  There's no
+	     way we can extract proper fields from random uiout
+	     object, so we print the frame again.  In practice, this
+	     can only happen when running a CLI command in MI.  */
 	  struct ui_out *saved_uiout = current_uiout;
 	  struct target_waitstatus last;
 	  ptid_t last_ptid;
@@ -483,15 +503,17 @@ mi_about_to_proceed (void)
 
 /* When non-zero, no MI notifications will be emitted in
    response to breakpoint change observers.  */
+
 int mi_suppress_breakpoint_notifications = 0;
 
 /* Emit notification about a created breakpoint.  */
+
 static void
 mi_breakpoint_created (struct breakpoint *b)
 {
   struct mi_interp *mi = top_level_interpreter_data ();
   struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
-  struct gdb_exception e;
+  volatile struct gdb_exception e;
 
   if (mi_suppress_breakpoint_notifications)
     return;
@@ -503,12 +525,12 @@ mi_breakpoint_created (struct breakpoint *b)
   fprintf_unfiltered (mi->event_channel,
 		      "breakpoint-created");
   /* We want the output from gdb_breakpoint_query to go to
-     mi->event_channel.  One approach would be to just
-     call gdb_breakpoint_query, and then use mi_out_put to
-     send the current content of mi_outout into mi->event_channel.
-     However, that will break if anything is output to mi_uiout
-     prior the calling the breakpoint_created notifications.
-     So, we use ui_out_redirect.  */
+     mi->event_channel.  One approach would be to just call
+     gdb_breakpoint_query, and then use mi_out_put to send the current
+     content of mi_outout into mi->event_channel.  However, that will
+     break if anything is output to mi_uiout prior to calling the
+     breakpoint_created notifications.  So, we use
+     ui_out_redirect.  */
   ui_out_redirect (mi_uiout, mi->event_channel);
   TRY_CATCH (e, RETURN_MASK_ERROR)
     gdb_breakpoint_query (mi_uiout, b->number, NULL);
@@ -518,6 +540,7 @@ mi_breakpoint_created (struct breakpoint *b)
 }
 
 /* Emit notification about deleted breakpoint.  */
+
 static void
 mi_breakpoint_deleted (struct breakpoint *b)
 {
@@ -538,12 +561,13 @@ mi_breakpoint_deleted (struct breakpoint *b)
 }
 
 /* Emit notification about modified breakpoint.  */
+
 static void
 mi_breakpoint_modified (struct breakpoint *b)
 {
   struct mi_interp *mi = top_level_interpreter_data ();
   struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
-  struct gdb_exception e;
+  volatile struct gdb_exception e;
 
   if (mi_suppress_breakpoint_notifications)
     return;
@@ -555,12 +579,12 @@ mi_breakpoint_modified (struct breakpoint *b)
   fprintf_unfiltered (mi->event_channel,
 		      "breakpoint-modified");
   /* We want the output from gdb_breakpoint_query to go to
-     mi->event_channel.  One approach would be to just
-     call gdb_breakpoint_query, and then use mi_out_put to
-     send the current content of mi_outout into mi->event_channel.
-     However, that will break if anything is output to mi_uiout
-     prior the calling the breakpoint_created notifications.
-     So, we use ui_out_redirect.  */
+     mi->event_channel.  One approach would be to just call
+     gdb_breakpoint_query, and then use mi_out_put to send the current
+     content of mi_outout into mi->event_channel.  However, that will
+     break if anything is output to mi_uiout prior to calling the
+     breakpoint_created notifications.  So, we use
+     ui_out_redirect.  */
   ui_out_redirect (mi_uiout, mi->event_channel);
   TRY_CATCH (e, RETURN_MASK_ERROR)
     gdb_breakpoint_query (mi_uiout, b->number, NULL);
@@ -569,7 +593,6 @@ mi_breakpoint_modified (struct breakpoint *b)
   gdb_flush (mi->event_channel);
 }
 
-
 static int
 mi_output_running_pid (struct thread_info *info, void *arg)
 {
@@ -732,20 +755,69 @@ mi_ui_out (struct interp *interp)
   return mi->uiout;
 }
 
+/* Save the original value of raw_stdout here when logging, so we can
+   restore correctly when done.  */
+
+static struct ui_file *saved_raw_stdout;
+
+/* Do MI-specific logging actions; save raw_stdout, and change all
+   the consoles to use the supplied ui-file(s).  */
+
+static int
+mi_set_logging (struct interp *interp, int start_log,
+		struct ui_file *out, struct ui_file *logfile)
+{
+  struct mi_interp *mi = interp_data (interp);
+
+  if (!mi)
+    return 0;
+
+  if (start_log)
+    {
+      /* The tee created already is based on gdb_stdout, which for MI
+	 is a console and so we end up in an infinite loop of console
+	 writing to ui_file writing to console etc.  So discard the
+	 existing tee (it hasn't been used yet, and MI won't ever use
+	 it), and create one based on raw_stdout instead.  */
+      if (logfile)
+	{
+	  ui_file_delete (out);
+	  out = tee_file_new (raw_stdout, 0, logfile, 0);
+	}
+
+      saved_raw_stdout = raw_stdout;
+      raw_stdout = out;
+    }
+  else
+    {
+      raw_stdout = saved_raw_stdout;
+      saved_raw_stdout = NULL;
+    }
+  
+  mi_console_set_raw (mi->out, raw_stdout);
+  mi_console_set_raw (mi->err, raw_stdout);
+  mi_console_set_raw (mi->log, raw_stdout);
+  mi_console_set_raw (mi->targ, raw_stdout);
+  mi_console_set_raw (mi->event_channel, raw_stdout);
+
+  return 1;
+}
+
 extern initialize_file_ftype _initialize_mi_interp; /* -Wmissing-prototypes */
 
 void
 _initialize_mi_interp (void)
 {
   static const struct interp_procs procs =
-  {
-    mi_interpreter_init,	/* init_proc */
-    mi_interpreter_resume,	/* resume_proc */
-    mi_interpreter_suspend,	/* suspend_proc */
-    mi_interpreter_exec,	/* exec_proc */
-    mi_interpreter_prompt_p,	/* prompt_proc_p */
-    mi_ui_out 			/* ui_out_proc */
-  };
+    {
+      mi_interpreter_init,	/* init_proc */
+      mi_interpreter_resume,	/* resume_proc */
+      mi_interpreter_suspend,	/* suspend_proc */
+      mi_interpreter_exec,	/* exec_proc */
+      mi_interpreter_prompt_p,	/* prompt_proc_p */
+      mi_ui_out, 		/* ui_out_proc */
+      mi_set_logging		/* set_logging_proc */
+    };
 
   /* The various interpreter levels.  */
   interp_add (interp_new (INTERP_MI1, &procs));
diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c
index b170f01..dfb4892 100644
--- a/gdb/mi/mi-main.c
+++ b/gdb/mi/mi-main.c
@@ -19,8 +19,6 @@
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-/* Work in progress.  */
-
 #include "defs.h"
 #include "arch-utils.h"
 #include "target.h"
@@ -71,18 +69,19 @@ enum
   };
 
 int mi_debug_p;
+
 struct ui_file *raw_stdout;
 
-/* This is used to pass the current command timestamp
-   down to continuation routines.  */
+/* This is used to pass the current command timestamp down to
+   continuation routines.  */
 static struct mi_timestamp *current_command_ts;
 
 static int do_timings = 0;
 
 char *current_token;
-/* Few commands would like to know if options like --thread-group
-   were explicitly specified.  This variable keeps the current
-   parsed command including all option, and make it possible.  */
+/* Few commands would like to know if options like --thread-group were
+   explicitly specified.  This variable keeps the current parsed
+   command including all option, and make it possible.  */
 static struct mi_parse *current_context;
 
 int running_result_record_printed = 1;
@@ -178,7 +177,7 @@ void
 mi_cmd_exec_return (char *command, char **argv, int argc)
 {
   /* This command doesn't really execute the target, it just pops the
-     specified number of frames. */
+     specified number of frames.  */
   if (argc)
     /* Call return_command with from_tty argument equal to 0 so as to
        avoid being queried.  */
@@ -211,10 +210,9 @@ proceed_thread (struct thread_info *thread, int pid)
 
   switch_to_thread (thread->ptid);
   clear_proceed_status ();
-  proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
+  proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 0);
 }
 
-
 static int
 proceed_thread_callback (struct thread_info *thread, void *arg)
 {
@@ -229,9 +227,10 @@ exec_continue (char **argv, int argc)
 {
   if (non_stop)
     {
-      /* In non-stop mode, 'resume' always resumes a single thread.  Therefore,
-	 to resume all threads of the current inferior, or all threads in all
-	 inferiors, we need to iterate over threads.
+      /* In non-stop mode, 'resume' always resumes a single thread.
+	 Therefore, to resume all threads of the current inferior, or
+	 all threads in all inferiors, we need to iterate over
+	 threads.
 
 	 See comment on infcmd.c:proceed_thread_callback for rationale.  */
       if (current_context->all || current_context->thread_group != -1)
@@ -265,9 +264,10 @@ exec_continue (char **argv, int argc)
 	}
       else
 	{
-	  /* In all-stop mode, -exec-continue traditionally resumed either
-	     all threads, or one thread, depending on the 'scheduler-locking'
-	     variable.  Let's continue to do the same.  */
+	  /* In all-stop mode, -exec-continue traditionally resumed
+	     either all threads, or one thread, depending on the
+	     'scheduler-locking' variable.  Let's continue to do the
+	     same.  */
 	  continue_1 (1);
 	}
       do_cleanups (back_to);
@@ -322,11 +322,12 @@ interrupt_thread_callback (struct thread_info *thread, void *arg)
   return 0;
 }
 
-/* Interrupt the execution of the target.  Note how we must play around
-   with the token variables, in order to display the current token in
-   the result of the interrupt command, and the previous execution
-   token when the target finally stops.  See comments in
+/* Interrupt the execution of the target.  Note how we must play
+   around with the token variables, in order to display the current
+   token in the result of the interrupt command, and the previous
+   execution token when the target finally stops.  See comments in
    mi_cmd_execute.  */
+
 void
 mi_cmd_exec_interrupt (char *command, char **argv, int argc)
 {
@@ -507,6 +508,8 @@ mi_cmd_thread_info (char *command, char **argv, int argc)
   print_thread_info (current_uiout, argv[0], -1);
 }
 
+DEF_VEC_I(int);
+
 struct collect_cores_data
 {
   int pid;
@@ -609,8 +612,9 @@ print_one_inferior (struct inferior *inferior, void *xdata)
   return 0;
 }
 
-/* Output a field named 'cores' with a list as the value.  The elements of
-   the list are obtained by splitting 'cores' on comma.  */
+/* Output a field named 'cores' with a list as the value.  The
+   elements of the list are obtained by splitting 'cores' on
+   comma.  */
 
 static void
 output_cores (struct ui_out *uiout, const char *field_name, const char *xcores)
@@ -797,23 +801,23 @@ mi_cmd_list_thread_groups (char *command, char **argv, int argc)
   VEC (int) *ids = 0;
 
   enum opt
-    {
-      AVAILABLE_OPT, RECURSE_OPT
-    };
-  static const struct mi_opt opts[] =
   {
-    {"-available", AVAILABLE_OPT, 0},
-    {"-recurse", RECURSE_OPT, 1},
-    { 0, 0, 0 }
+    AVAILABLE_OPT, RECURSE_OPT
   };
+  static const struct mi_opt opts[] =
+    {
+      {"-available", AVAILABLE_OPT, 0},
+      {"-recurse", RECURSE_OPT, 1},
+      { 0, 0, 0 }
+    };
 
-  int optind = 0;
-  char *optarg;
+  int oind = 0;
+  char *oarg;
 
   while (1)
     {
       int opt = mi_getopt ("-list-thread-groups", argc, argv, opts,
-			   &optind, &optarg);
+			   &oind, &oarg);
 
       if (opt < 0)
 	break;
@@ -823,9 +827,9 @@ mi_cmd_list_thread_groups (char *command, char **argv, int argc)
 	  available = 1;
 	  break;
 	case RECURSE_OPT:
-	  if (strcmp (optarg, "0") == 0)
+	  if (strcmp (oarg, "0") == 0)
 	    ;
-	  else if (strcmp (optarg, "1") == 0)
+	  else if (strcmp (oarg, "1") == 0)
 	    recurse = 1;
 	  else
 	    error (_("only '0' and '1' are valid values "
@@ -834,18 +838,18 @@ mi_cmd_list_thread_groups (char *command, char **argv, int argc)
 	}
     }
 
-  for (; optind < argc; ++optind)
+  for (; oind < argc; ++oind)
     {
       char *end;
       int inf;
 
-      if (*(argv[optind]) != 'i')
-	error (_("invalid syntax of group id '%s'"), argv[optind]);
+      if (*(argv[oind]) != 'i')
+	error (_("invalid syntax of group id '%s'"), argv[oind]);
 
-      inf = strtoul (argv[optind] + 1, &end, 0);
+      inf = strtoul (argv[oind] + 1, &end, 0);
 
       if (*end != '\0')
-	error (_("invalid syntax of group id '%s'"), argv[optind]);
+	error (_("invalid syntax of group id '%s'"), argv[oind]);
       VEC_safe_push (int, ids, inf);
     }
   if (VEC_length (int, ids) > 1)
@@ -861,7 +865,7 @@ mi_cmd_list_thread_groups (char *command, char **argv, int argc)
     }
   else if (VEC_length (int, ids) == 1)
     {
-      /* Local thread groups, single id. */
+      /* Local thread groups, single id.  */
       int id = *VEC_address (int, ids);
       struct inferior *inf = find_inferior_id (id);
 
@@ -899,10 +903,11 @@ mi_cmd_data_list_register_names (char *command, char **argv, int argc)
   struct cleanup *cleanup;
 
   /* Note that the test for a valid register must include checking the
-     gdbarch_register_name because gdbarch_num_regs may be allocated for
-     the union of the register sets within a family of related processors.
-     In this case, some entries of gdbarch_register_name will change depending
-     upon the particular processor being debugged.  */
+     gdbarch_register_name because gdbarch_num_regs may be allocated
+     for the union of the register sets within a family of related
+     processors.  In this case, some entries of gdbarch_register_name
+     will change depending upon the particular processor being
+     debugged.  */
 
   gdbarch = get_current_arch ();
   numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
@@ -952,27 +957,30 @@ mi_cmd_data_list_changed_registers (char *command, char **argv, int argc)
   int i;
   struct cleanup *cleanup;
 
-  /* The last time we visited this function, the current frame's register
-     contents were saved in THIS_REGS.  Move THIS_REGS over to PREV_REGS,
-     and refresh THIS_REGS with the now-current register contents.  */
+  /* The last time we visited this function, the current frame's
+     register contents were saved in THIS_REGS.  Move THIS_REGS over
+     to PREV_REGS, and refresh THIS_REGS with the now-current register
+     contents.  */
 
   prev_regs = this_regs;
   this_regs = frame_save_as_regcache (get_selected_frame (NULL));
   cleanup = make_cleanup_regcache_xfree (prev_regs);
 
   /* Note that the test for a valid register must include checking the
-     gdbarch_register_name because gdbarch_num_regs may be allocated for
-     the union of the register sets within a family of related processors.
-     In this  case, some entries of gdbarch_register_name will change depending
-     upon the particular processor being debugged.  */
+     gdbarch_register_name because gdbarch_num_regs may be allocated
+     for the union of the register sets within a family of related
+     processors.  In this case, some entries of gdbarch_register_name
+     will change depending upon the particular processor being
+     debugged.  */
 
   gdbarch = get_regcache_arch (this_regs);
   numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
 
   make_cleanup_ui_out_list_begin_end (uiout, "changed-registers");
 
-  if (argc == 0)		/* No args, just do all the regs.  */
+  if (argc == 0)
     {
+      /* No args, just do all the regs.  */
       for (regnum = 0;
 	   regnum < numregs;
 	   regnum++)
@@ -1042,11 +1050,13 @@ register_changed_p (int regnum, struct regcache *prev_regs,
 
 /* Return a list of register number and value pairs.  The valid
    arguments expected are: a letter indicating the format in which to
-   display the registers contents.  This can be one of: x (hexadecimal), d
-   (decimal), N (natural), t (binary), o (octal), r (raw).  After the
-   format argumetn there can be a sequence of numbers, indicating which
-   registers to fetch the content of.  If the format is the only argument,
-   a list of all the registers with their values is returned.  */
+   display the registers contents.  This can be one of: x
+   (hexadecimal), d (decimal), N (natural), t (binary), o (octal), r
+   (raw).  After the format argument there can be a sequence of
+   numbers, indicating which registers to fetch the content of.  If
+   the format is the only argument, a list of all the registers with
+   their values is returned.  */
+
 void
 mi_cmd_data_list_register_values (char *command, char **argv, int argc)
 {
@@ -1058,10 +1068,11 @@ mi_cmd_data_list_register_values (char *command, char **argv, int argc)
   struct cleanup *list_cleanup, *tuple_cleanup;
 
   /* Note that the test for a valid register must include checking the
-     gdbarch_register_name because gdbarch_num_regs may be allocated for
-     the union of the register sets within a family of related processors.
-     In this case, some entries of gdbarch_register_name will change depending
-     upon the particular processor being debugged.  */
+     gdbarch_register_name because gdbarch_num_regs may be allocated
+     for the union of the register sets within a family of related
+     processors.  In this case, some entries of gdbarch_register_name
+     will change depending upon the particular processor being
+     debugged.  */
 
   if (argc == 0)
     error (_("-data-list-register-values: Usage: "
@@ -1075,8 +1086,9 @@ mi_cmd_data_list_register_values (char *command, char **argv, int argc)
 
   list_cleanup = make_cleanup_ui_out_list_begin_end (uiout, "register-values");
 
-  if (argc == 1)	    /* No args, beside the format: do all the regs.  */
+  if (argc == 1)
     {
+      /* No args, beside the format: do all the regs.  */
       for (regnum = 0;
 	   regnum < numregs;
 	   regnum++)
@@ -1113,18 +1125,14 @@ mi_cmd_data_list_register_values (char *command, char **argv, int argc)
 }
 
 /* Output one register's contents in the desired format.  */
+
 static void
 get_register (struct frame_info *frame, int regnum, int format)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
   struct ui_out *uiout = current_uiout;
-  CORE_ADDR addr;
-  enum lval_type lval;
-  struct ui_stream *stb;
   struct value *val;
 
-  stb = ui_out_stream_new (uiout);
-
   if (format == 'N')
     format = 0;
 
@@ -1150,20 +1158,24 @@ get_register (struct frame_info *frame, int regnum, int format)
 	  ptr += 2;
 	}
       ui_out_field_string (uiout, "value", buf);
-      /*fputs_filtered (buf, gdb_stdout); */
     }
   else
     {
       struct value_print_options opts;
+      struct ui_file *stb;
+      struct cleanup *old_chain;
+
+      stb = mem_fileopen ();
+      old_chain = make_cleanup_ui_file_delete (stb);
 
       get_formatted_print_options (&opts, format);
       opts.deref_ref = 1;
       val_print (value_type (val),
 		 value_contents_for_printing (val),
 		 value_embedded_offset (val), 0,
-		 stb->stream, 0, val, &opts, current_language);
+		 stb, 0, val, &opts, current_language);
       ui_out_field_stream (uiout, "value", stb);
-      ui_out_stream_delete (stb);
+      do_cleanups (old_chain);
     }
 }
 
@@ -1180,10 +1192,11 @@ mi_cmd_data_write_register_values (char *command, char **argv, int argc)
   char format;
 
   /* Note that the test for a valid register must include checking the
-     gdbarch_register_name because gdbarch_num_regs may be allocated for
-     the union of the register sets within a family of related processors.
-     In this case, some entries of gdbarch_register_name will change depending
-     upon the particular processor being debugged.  */
+     gdbarch_register_name because gdbarch_num_regs may be allocated
+     for the union of the register sets within a family of related
+     processors.  In this case, some entries of gdbarch_register_name
+     will change depending upon the particular processor being
+     debugged.  */
 
   regcache = get_current_regcache ();
   gdbarch = get_regcache_arch (regcache);
@@ -1229,43 +1242,41 @@ mi_cmd_data_write_register_values (char *command, char **argv, int argc)
 /* Evaluate the value of the argument.  The argument is an
    expression. If the expression contains spaces it needs to be
    included in double quotes.  */
+
 void
 mi_cmd_data_evaluate_expression (char *command, char **argv, int argc)
 {
   struct expression *expr;
-  struct cleanup *old_chain = NULL;
+  struct cleanup *old_chain;
   struct value *val;
-  struct ui_stream *stb = NULL;
+  struct ui_file *stb;
   struct value_print_options opts;
   struct ui_out *uiout = current_uiout;
 
-  stb = ui_out_stream_new (uiout);
+  stb = mem_fileopen ();
+  old_chain = make_cleanup_ui_file_delete (stb);
 
   if (argc != 1)
-    {
-      ui_out_stream_delete (stb);
-      error (_("-data-evaluate-expression: "
-	       "Usage: -data-evaluate-expression expression"));
-    }
+    error (_("-data-evaluate-expression: "
+	     "Usage: -data-evaluate-expression expression"));
 
   expr = parse_expression (argv[0]);
 
-  old_chain = make_cleanup (free_current_contents, &expr);
+  make_cleanup (free_current_contents, &expr);
 
   val = evaluate_expression (expr);
 
   /* Print the result of the expression evaluation.  */
   get_user_print_options (&opts);
   opts.deref_ref = 0;
-  common_val_print (val, stb->stream, 0, &opts, current_language);
+  common_val_print (val, stb, 0, &opts, current_language);
 
   ui_out_field_stream (uiout, "value", stb);
-  ui_out_stream_delete (stb);
 
   do_cleanups (old_chain);
 }
 
-/* DATA-MEMORY-READ:
+/* This is the -data-read-memory command.
 
    ADDR: start address of data to be dumped.
    WORD-FORMAT: a char indicating format for the ``word''.  See 
@@ -1282,7 +1293,7 @@ mi_cmd_data_evaluate_expression (char *command, char **argv, int argc)
    {addr="...",rowN={wordN="..." ,... [,ascii="..."]}, ...}
 
    Returns: 
-   The number of bytes read is SIZE*ROW*COL. */
+   The number of bytes read is SIZE*ROW*COL.  */
 
 void
 mi_cmd_data_read_memory (char *command, char **argv, int argc)
@@ -1291,9 +1302,7 @@ mi_cmd_data_read_memory (char *command, char **argv, int argc)
   struct ui_out *uiout = current_uiout;
   struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
   CORE_ADDR addr;
-  long total_bytes;
-  long nr_cols;
-  long nr_rows;
+  long total_bytes, nr_cols, nr_rows;
   char word_format;
   struct type *word_type;
   long word_size;
@@ -1302,34 +1311,34 @@ mi_cmd_data_read_memory (char *command, char **argv, int argc)
   gdb_byte *mbuf;
   int nr_bytes;
   long offset = 0;
-  int optind = 0;
-  char *optarg;
+  int oind = 0;
+  char *oarg;
   enum opt
-    {
-      OFFSET_OPT
-    };
-  static const struct mi_opt opts[] =
   {
-    {"o", OFFSET_OPT, 1},
-    { 0, 0, 0 }
+    OFFSET_OPT
   };
+  static const struct mi_opt opts[] =
+    {
+      {"o", OFFSET_OPT, 1},
+      { 0, 0, 0 }
+    };
 
   while (1)
     {
       int opt = mi_getopt ("-data-read-memory", argc, argv, opts,
-			   &optind, &optarg);
+			   &oind, &oarg);
 
       if (opt < 0)
 	break;
       switch ((enum opt) opt)
 	{
 	case OFFSET_OPT:
-	  offset = atol (optarg);
+	  offset = atol (oarg);
 	  break;
 	}
     }
-  argv += optind;
-  argc -= optind;
+  argv += oind;
+  argc -= oind;
 
   if (argc < 5 || argc > 6)
     error (_("-data-read-memory: Usage: "
@@ -1340,7 +1349,7 @@ mi_cmd_data_read_memory (char *command, char **argv, int argc)
   /* Start address of the memory dump.  */
   addr = parse_and_eval_address (argv[0]) + offset;
   /* The format character to use when displaying a memory word.  See
-     the ``x'' command. */
+     the ``x'' command.  */
   word_format = argv[1][0];
   /* The size of the memory word.  */
   word_size = atol (argv[2]);
@@ -1408,12 +1417,15 @@ mi_cmd_data_read_memory (char *command, char **argv, int argc)
 
   /* Build the result as a two dimentional table.  */
   {
-    struct ui_stream *stream = ui_out_stream_new (uiout);
-    struct cleanup *cleanup_list_memory;
+    struct ui_file *stream;
+    struct cleanup *cleanup_stream;
     int row;
     int row_byte;
 
-    cleanup_list_memory = make_cleanup_ui_out_list_begin_end (uiout, "memory");
+    stream = mem_fileopen ();
+    cleanup_stream = make_cleanup_ui_file_delete (stream);
+
+    make_cleanup_ui_out_list_begin_end (uiout, "memory");
     for (row = 0, row_byte = 0;
 	 row < nr_rows;
 	 row++, row_byte += nr_cols * word_size)
@@ -1440,9 +1452,9 @@ mi_cmd_data_read_memory (char *command, char **argv, int argc)
 	      }
 	    else
 	      {
-		ui_file_rewind (stream->stream);
+		ui_file_rewind (stream);
 		print_scalar_formatted (mbuf + col_byte, word_type, &opts,
-					word_asize, stream->stream);
+					word_asize, stream);
 		ui_out_field_stream (uiout, NULL, stream);
 	      }
 	  }
@@ -1451,27 +1463,22 @@ mi_cmd_data_read_memory (char *command, char **argv, int argc)
 	  {
 	    int byte;
 
-	    ui_file_rewind (stream->stream);
+	    ui_file_rewind (stream);
 	    for (byte = row_byte;
 		 byte < row_byte + word_size * nr_cols; byte++)
 	      {
 		if (byte >= nr_bytes)
-		  {
-		    fputc_unfiltered ('X', stream->stream);
-		  }
+		  fputc_unfiltered ('X', stream);
 		else if (mbuf[byte] < 32 || mbuf[byte] > 126)
-		  {
-		    fputc_unfiltered (aschar, stream->stream);
-		  }
+		  fputc_unfiltered (aschar, stream);
 		else
-		  fputc_unfiltered (mbuf[byte], stream->stream);
+		  fputc_unfiltered (mbuf[byte], stream);
 	      }
 	    ui_out_field_stream (uiout, "ascii", stream);
 	  }
 	do_cleanups (cleanup_tuple);
       }
-    ui_out_stream_delete (stream);
-    do_cleanups (cleanup_list_memory);
+    do_cleanups (cleanup_stream);
   }
   do_cleanups (cleanups);
 }
@@ -1488,33 +1495,33 @@ mi_cmd_data_read_memory_bytes (char *command, char **argv, int argc)
   int ix;
   VEC(memory_read_result_s) *result;
   long offset = 0;
-  int optind = 0;
-  char *optarg;
+  int oind = 0;
+  char *oarg;
   enum opt
-    {
-      OFFSET_OPT
-    };
-  static const struct mi_opt opts[] =
   {
-    {"o", OFFSET_OPT, 1},
-    { 0, 0, 0 }
+    OFFSET_OPT
   };
+  static const struct mi_opt opts[] =
+    {
+      {"o", OFFSET_OPT, 1},
+      { 0, 0, 0 }
+    };
 
   while (1)
     {
       int opt = mi_getopt ("-data-read-memory-bytes", argc, argv, opts,
-			   &optind, &optarg);
+			   &oind, &oarg);
       if (opt < 0)
 	break;
       switch ((enum opt) opt)
 	{
 	case OFFSET_OPT:
-	  offset = atol (optarg);
+	  offset = atol (oarg);
 	  break;
 	}
     }
-  argv += optind;
-  argc -= optind;
+  argv += oind;
+  argc -= oind;
 
   if (argc != 2)
     error (_("Usage: [ -o OFFSET ] ADDR LENGTH."));
@@ -1558,8 +1565,7 @@ mi_cmd_data_read_memory_bytes (char *command, char **argv, int argc)
   do_cleanups (cleanups);
 }
 
-
-/* DATA-MEMORY-WRITE:
+/* Implementation of the -data-write_memory command.
 
    COLUMN_OFFSET: optional argument. Must be preceded by '-o'. The
    offset from the beginning of the memory grid row where the cell to
@@ -1575,6 +1581,7 @@ mi_cmd_data_read_memory_bytes (char *command, char **argv, int argc)
    Writes VALUE into ADDR + (COLUMN_OFFSET * WORD_SIZE).
 
    Prints nothing.  */
+
 void
 mi_cmd_data_write_memory (char *command, char **argv, int argc)
 {
@@ -1589,34 +1596,34 @@ mi_cmd_data_write_memory (char *command, char **argv, int argc)
   void *buffer;
   struct cleanup *old_chain;
   long offset = 0;
-  int optind = 0;
-  char *optarg;
+  int oind = 0;
+  char *oarg;
   enum opt
-    {
-      OFFSET_OPT
-    };
-  static const struct mi_opt opts[] =
   {
-    {"o", OFFSET_OPT, 1},
-    { 0, 0, 0 }
+    OFFSET_OPT
   };
+  static const struct mi_opt opts[] =
+    {
+      {"o", OFFSET_OPT, 1},
+      { 0, 0, 0 }
+    };
 
   while (1)
     {
       int opt = mi_getopt ("-data-write-memory", argc, argv, opts,
-			   &optind, &optarg);
+			   &oind, &oarg);
 
       if (opt < 0)
 	break;
       switch ((enum opt) opt)
 	{
 	case OFFSET_OPT:
-	  offset = atol (optarg);
+	  offset = atol (oarg);
 	  break;
 	}
     }
-  argv += optind;
-  argc -= optind;
+  argv += oind;
+  argc -= oind;
 
   if (argc != 4)
     error (_("-data-write-memory: Usage: "
@@ -1628,7 +1635,7 @@ mi_cmd_data_write_memory (char *command, char **argv, int argc)
   /* The format character to use when displaying a memory word.  See
      the ``x'' command.  */
   word_format = argv[1][0];
-  /* The size of the memory word. */
+  /* The size of the memory word.  */
   word_size = atol (argv[2]);
 
   /* Calculate the real address of the write destination.  */
@@ -1646,10 +1653,11 @@ mi_cmd_data_write_memory (char *command, char **argv, int argc)
   do_cleanups (old_chain);
 }
 
-/* DATA-MEMORY-WRITE-RAW:
+/* Implementation of the -data-write-memory-bytes command.
 
    ADDR: start address
-   DATA: string of bytes to write at that address. */
+   DATA: string of bytes to write at that address.  */
+
 void
 mi_cmd_data_write_memory_bytes (char *command, char **argv, int argc)
 {
@@ -1673,7 +1681,7 @@ mi_cmd_data_write_memory_bytes (char *command, char **argv, int argc)
     {
       int x;
       sscanf (cdata + i * 2, "%02x", &x);
-      data[i] = (gdb_byte)x;
+      data[i] = (gdb_byte) x;
     }
 
   r = target_write_memory (addr, data, len);
@@ -1683,7 +1691,6 @@ mi_cmd_data_write_memory_bytes (char *command, char **argv, int argc)
   do_cleanups (back_to);
 }
 
-
 void
 mi_cmd_enable_timings (char *command, char **argv, int argc)
 {
@@ -1768,8 +1775,8 @@ mi_cmd_add_inferior (char *command, char **argv, int argc)
   ui_out_field_fmt (current_uiout, "inferior", "i%d", inf->num);
 }
 
-/* Callback used to find the first inferior other than the
-   current one. */
+/* Callback used to find the first inferior other than the current
+   one.  */
    
 static int
 get_other_inferior (struct inferior *inf, void *arg)
@@ -1825,7 +1832,7 @@ mi_cmd_remove_inferior (char *command, char **argv, int argc)
 
    args->action will tell mi_execute_command what action
    to perfrom after the given command has executed (display/suppress
-   prompt, display error). */
+   prompt, display error).  */
 
 static void
 captured_mi_execute_command (struct ui_out *uiout, struct mi_parse *context)
@@ -1849,15 +1856,14 @@ captured_mi_execute_command (struct ui_out *uiout, struct mi_parse *context)
 	fprintf_unfiltered (raw_stdout, " token=`%s' command=`%s' args=`%s'\n",
 			    context->token, context->command, context->args);
 
-
       mi_cmd_execute (context);
 
       /* Print the result if there were no errors.
 
 	 Remember that on the way out of executing a command, you have
-	 to directly use the mi_interp's uiout, since the command could 
-	 have reset the interpreter, in which case the current uiout 
-	 will most likely crash in the mi_out_* routines.  */
+	 to directly use the mi_interp's uiout, since the command
+	 could have reset the interpreter, in which case the current
+	 uiout will most likely crash in the mi_out_* routines.  */
       if (!running_result_record_printed)
 	{
 	  fputs_unfiltered (context->token, raw_stdout);
@@ -1871,9 +1877,9 @@ captured_mi_execute_command (struct ui_out *uiout, struct mi_parse *context)
 	  fputs_unfiltered ("\n", raw_stdout);
 	}
       else
-	    /* The command does not want anything to be printed.  In that
-	       case, the command probably should not have written anything
-	       to uiout, but in case it has written something, discard it.  */
+	/* The command does not want anything to be printed.  In that
+	   case, the command probably should not have written anything
+	   to uiout, but in case it has written something, discard it.  */
 	mi_out_rewind (uiout);
       break;
 
@@ -1911,12 +1917,9 @@ captured_mi_execute_command (struct ui_out *uiout, struct mi_parse *context)
 	  }
 	break;
       }
-
     }
 
   do_cleanups (cleanup);
-
-  return;
 }
 
 /* Print a gdb exception to the MI output stream.  */
@@ -2025,11 +2028,6 @@ mi_execute_command (char *cmd, int from_tty)
 
       mi_parse_free (command);
     }
-
-  fputs_unfiltered ("(gdb) \n", raw_stdout);
-  gdb_flush (raw_stdout);
-  /* Print any buffered hook code.  */
-  /* ..... */
 }
 
 static void
@@ -2061,9 +2059,10 @@ mi_cmd_execute (struct mi_parse *parse)
 
       set_current_inferior (inf);
       /* This behaviour means that if --thread-group option identifies
-	 an inferior with multiple threads, then a random one will be picked.
-	 This is not a problem -- frontend should always provide --thread if
-	 it wishes to operate on a specific thread.  */
+	 an inferior with multiple threads, then a random one will be
+	 picked.  This is not a problem -- frontend should always
+	 provide --thread if it wishes to operate on a specific
+	 thread.  */
       if (inf->pid != 0)
 	tp = any_live_thread_of_process (inf->pid);
       switch_to_thread (tp ? tp->ptid : null_ptid);
@@ -2154,7 +2153,7 @@ mi_execute_cli_command (const char *cmd, int args_p, const char *args)
 	fprintf_unfiltered (gdb_stdout, "cli=%s run=%s\n",
 			    cmd, run);
       old_cleanups = make_cleanup (xfree, run);
-      execute_command ( /*ui */ run, 0 /*from_tty */ );
+      execute_command (run, 0 /* from_tty */ );
       do_cleanups (old_cleanups);
       return;
     }
@@ -2172,7 +2171,7 @@ mi_execute_async_cli_command (char *cli_command, char **argv, int argc)
     run = xstrprintf ("%s %s", cli_command, argc ? *argv : "");
   old_cleanups = make_cleanup (xfree, run);  
 
-  execute_command ( /*ui */ run, 0 /*from_tty */ );
+  execute_command (run, 0 /* from_tty */ );
 
   /* Do this before doing any printing.  It would appear that some
      print code leaves garbage around in the buffer.  */
@@ -2273,61 +2272,61 @@ mi_load_progress (const char *section_name,
 
 static void 
 timestamp (struct mi_timestamp *tv)
-  {
-    gettimeofday (&tv->wallclock, NULL);
+{
+  gettimeofday (&tv->wallclock, NULL);
 #ifdef HAVE_GETRUSAGE
-    getrusage (RUSAGE_SELF, &rusage);
-    tv->utime.tv_sec = rusage.ru_utime.tv_sec;
-    tv->utime.tv_usec = rusage.ru_utime.tv_usec;
-    tv->stime.tv_sec = rusage.ru_stime.tv_sec;
-    tv->stime.tv_usec = rusage.ru_stime.tv_usec;
+  getrusage (RUSAGE_SELF, &rusage);
+  tv->utime.tv_sec = rusage.ru_utime.tv_sec;
+  tv->utime.tv_usec = rusage.ru_utime.tv_usec;
+  tv->stime.tv_sec = rusage.ru_stime.tv_sec;
+  tv->stime.tv_usec = rusage.ru_stime.tv_usec;
 #else
-    {
-      long usec = get_run_time ();
+  {
+    long usec = get_run_time ();
 
-      tv->utime.tv_sec = usec/1000000L;
-      tv->utime.tv_usec = usec - 1000000L*tv->utime.tv_sec;
-      tv->stime.tv_sec = 0;
-      tv->stime.tv_usec = 0;
-    }
-#endif
+    tv->utime.tv_sec = usec/1000000L;
+    tv->utime.tv_usec = usec - 1000000L*tv->utime.tv_sec;
+    tv->stime.tv_sec = 0;
+    tv->stime.tv_usec = 0;
   }
+#endif
+}
 
 static void 
 print_diff_now (struct mi_timestamp *start)
-  {
-    struct mi_timestamp now;
+{
+  struct mi_timestamp now;
 
-    timestamp (&now);
-    print_diff (start, &now);
-  }
+  timestamp (&now);
+  print_diff (start, &now);
+}
 
 void
 mi_print_timing_maybe (void)
 {
-  /* If the command is -enable-timing then do_timings may be
-     true whilst current_command_ts is not initialized.  */
+  /* If the command is -enable-timing then do_timings may be true
+     whilst current_command_ts is not initialized.  */
   if (do_timings && current_command_ts)
     print_diff_now (current_command_ts);
 }
 
 static long 
 timeval_diff (struct timeval start, struct timeval end)
-  {
-    return ((end.tv_sec - start.tv_sec) * 1000000L)
-      + (end.tv_usec - start.tv_usec);
-  }
+{
+  return ((end.tv_sec - start.tv_sec) * 1000000L)
+    + (end.tv_usec - start.tv_usec);
+}
 
 static void 
 print_diff (struct mi_timestamp *start, struct mi_timestamp *end)
-  {
-    fprintf_unfiltered
-      (raw_stdout,
-       ",time={wallclock=\"%0.5f\",user=\"%0.5f\",system=\"%0.5f\"}", 
-       timeval_diff (start->wallclock, end->wallclock) / 1000000.0, 
-       timeval_diff (start->utime, end->utime) / 1000000.0, 
-       timeval_diff (start->stime, end->stime) / 1000000.0);
-  }
+{
+  fprintf_unfiltered
+    (raw_stdout,
+     ",time={wallclock=\"%0.5f\",user=\"%0.5f\",system=\"%0.5f\"}", 
+     timeval_diff (start->wallclock, end->wallclock) / 1000000.0, 
+     timeval_diff (start->utime, end->utime) / 1000000.0, 
+     timeval_diff (start->stime, end->stime) / 1000000.0);
+}
 
 void
 mi_cmd_trace_define_variable (char *command, char **argv, int argc)
@@ -2371,7 +2370,7 @@ void
 mi_cmd_trace_list_variables (char *command, char **argv, int argc)
 {
   if (argc != 0)
-    error (_("-trace-list-variables: no arguments are allowed"));
+    error (_("-trace-list-variables: no arguments allowed"));
 
   tvariables_info_1 ();
 }
@@ -2437,7 +2436,8 @@ mi_cmd_trace_find (char *command, char **argv, int argc)
       if (argc != 2)
 	error (_("Line is required"));
 
-      sals = decode_line_spec (argv[1], DECODE_LINE_FUNFIRSTLINE);
+      sals = decode_line_with_current_source (argv[1],
+					      DECODE_LINE_FUNFIRSTLINE);
       back_to = make_cleanup (xfree, sals.sals);
 
       sal = sals.sals[0];
@@ -2456,9 +2456,7 @@ mi_cmd_trace_find (char *command, char **argv, int argc)
     error (_("Invalid mode '%s'"), mode);
 
   if (has_stack_frames () || get_traceframe_number () >= 0)
-    {
-      print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC);
-    }
+    print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC);
 }
 
 void
@@ -2486,7 +2484,6 @@ mi_cmd_trace_save (char *command, char **argv, int argc)
   trace_save (filename, target_saves);
 }
 
-
 void
 mi_cmd_trace_start (char *command, char **argv, int argc)
 {
@@ -2506,7 +2503,7 @@ mi_cmd_trace_stop (char *command, char **argv, int argc)
   trace_status_mi (1);
 }
 
-/* Implement the "-ada-task-info" GDB/MI command.  */
+/* Implement the "-ada-task-info" command.  */
 
 void
 mi_cmd_ada_task_info (char *command, char **argv, int argc)
diff --git a/gdb/mi/mi-out.c b/gdb/mi/mi-out.c
index f8f6225..b39e05a 100644
--- a/gdb/mi/mi-out.c
+++ b/gdb/mi/mi-out.c
@@ -100,7 +100,7 @@ static void mi_open (struct ui_out *uiout, const char *name,
 		     enum ui_out_type type);
 static void mi_close (struct ui_out *uiout, enum ui_out_type type);
 
-/* Mark beginning of a table */
+/* Mark beginning of a table.  */
 
 void
 mi_table_begin (struct ui_out *uiout,
@@ -109,14 +109,12 @@ mi_table_begin (struct ui_out *uiout,
 		const char *tblid)
 {
   mi_open (uiout, tblid, ui_out_type_tuple);
-  mi_field_int (uiout, -1/*fldno*/, -1/*width*/, -1/*alin*/,
-		"nr_rows", nr_rows);
-  mi_field_int (uiout, -1/*fldno*/, -1/*width*/, -1/*alin*/,
-		"nr_cols", nr_cols);
+  mi_field_int (uiout, -1, -1, -1, "nr_rows", nr_rows);
+  mi_field_int (uiout, -1, -1, -1, "nr_cols", nr_cols);
   mi_open (uiout, "hdr", ui_out_type_list);
 }
 
-/* Mark beginning of a table body */
+/* Mark beginning of a table body.  */
 
 void
 mi_table_body (struct ui_out *uiout)
@@ -130,7 +128,7 @@ mi_table_body (struct ui_out *uiout)
   mi_open (uiout, "body", ui_out_type_list);
 }
 
-/* Mark end of a table */
+/* Mark end of a table.  */
 
 void
 mi_table_end (struct ui_out *uiout)
@@ -142,17 +140,17 @@ mi_table_end (struct ui_out *uiout)
   mi_close (uiout, ui_out_type_tuple);
 }
 
-/* Specify table header */
+/* Specify table header.  */
 
 void
 mi_table_header (struct ui_out *uiout, int width, enum ui_align alignment,
-		 const char *col_name,
-		 const char *colhdr)
+		 const char *col_name, const char *colhdr)
 {
   mi_out_data *data = ui_out_data (uiout);
 
   if (data->suppress_output)
     return;
+
   mi_open (uiout, NULL, ui_out_type_tuple);
   mi_field_int (uiout, 0, 0, 0, "width", width);
   mi_field_int (uiout, 0, 0, 0, "alignment", alignment);
@@ -161,38 +159,36 @@ mi_table_header (struct ui_out *uiout, int width, enum ui_align alignment,
   mi_close (uiout, ui_out_type_tuple);
 }
 
-/* Mark beginning of a list */
+/* Mark beginning of a list.  */
 
 void
-mi_begin (struct ui_out *uiout,
-	  enum ui_out_type type,
-	  int level,
+mi_begin (struct ui_out *uiout, enum ui_out_type type, int level,
 	  const char *id)
 {
   mi_out_data *data = ui_out_data (uiout);
 
   if (data->suppress_output)
     return;
+
   mi_open (uiout, id, type);
 }
 
-/* Mark end of a list */
+/* Mark end of a list.  */
 
 void
-mi_end (struct ui_out *uiout,
-	enum ui_out_type type,
-	int level)
+mi_end (struct ui_out *uiout, enum ui_out_type type, int level)
 {
   mi_out_data *data = ui_out_data (uiout);
 
   if (data->suppress_output)
     return;
+
   mi_close (uiout, type);
 }
 
-/* output an int field */
+/* Output an int field.  */
 
-void
+static void
 mi_field_int (struct ui_out *uiout, int fldno, int width,
               enum ui_align alignment, const char *fldname, int value)
 {
@@ -206,7 +202,7 @@ mi_field_int (struct ui_out *uiout, int fldno, int width,
   mi_field_string (uiout, fldno, width, alignment, fldname, buffer);
 }
 
-/* used to ommit a field */
+/* Used to omit a field.  */
 
 void
 mi_field_skip (struct ui_out *uiout, int fldno, int width,
@@ -214,21 +210,18 @@ mi_field_skip (struct ui_out *uiout, int fldno, int width,
 {
 }
 
-/* other specific mi_field_* end up here so alignment and field
-   separators are both handled by mi_field_string */
+/* Other specific mi_field_* end up here so alignment and field
+   separators are both handled by mi_field_string. */
 
 void
-mi_field_string (struct ui_out *uiout,
-		 int fldno,
-		 int width,
-		 enum ui_align align,
-		 const char *fldname,
-		 const char *string)
+mi_field_string (struct ui_out *uiout, int fldno, int width,
+		 enum ui_align align, const char *fldname, const char *string)
 {
   mi_out_data *data = ui_out_data (uiout);
 
   if (data->suppress_output)
     return;
+
   field_separator (uiout);
   if (fldname)
     fprintf_unfiltered (data->buffer, "%s=", fldname);
@@ -238,19 +231,18 @@ mi_field_string (struct ui_out *uiout,
   fprintf_unfiltered (data->buffer, "\"");
 }
 
-/* This is the only field function that does not align */
+/* This is the only field function that does not align.  */
 
 void
-mi_field_fmt (struct ui_out *uiout, int fldno,
-	      int width, enum ui_align align,
-	      const char *fldname,
-	      const char *format,
-	      va_list args)
+mi_field_fmt (struct ui_out *uiout, int fldno, int width,
+	      enum ui_align align, const char *fldname,
+	      const char *format, va_list args)
 {
   mi_out_data *data = ui_out_data (uiout);
 
   if (data->suppress_output)
     return;
+
   field_separator (uiout);
   if (fldname)
     fprintf_unfiltered (data->buffer, "%s=\"", fldname);
@@ -272,8 +264,7 @@ mi_text (struct ui_out *uiout, const char *string)
 
 void
 mi_message (struct ui_out *uiout, int verbosity,
-	    const char *format,
-	    va_list args)
+	    const char *format, va_list args)
 {
 }
 
@@ -326,9 +317,7 @@ field_separator (struct ui_out *uiout)
 }
 
 static void
-mi_open (struct ui_out *uiout,
-	 const char *name,
-	 enum ui_out_type type)
+mi_open (struct ui_out *uiout, const char *name, enum ui_out_type type)
 {
   mi_out_data *data = ui_out_data (uiout);
 
@@ -350,8 +339,7 @@ mi_open (struct ui_out *uiout,
 }
 
 static void
-mi_close (struct ui_out *uiout,
-	  enum ui_out_type type)
+mi_close (struct ui_out *uiout, enum ui_out_type type)
 {
   mi_out_data *data = ui_out_data (uiout);
 
@@ -369,7 +357,7 @@ mi_close (struct ui_out *uiout,
   data->suppress_field_separator = 0;
 }
 
-/* add a string to the buffer */
+/* Add a string to the buffer.  */
 
 void
 mi_out_buffered (struct ui_out *uiout, char *string)
@@ -379,7 +367,7 @@ mi_out_buffered (struct ui_out *uiout, char *string)
   fprintf_unfiltered (data->buffer, "%s", string);
 }
 
-/* clear the buffer */
+/* Clear the buffer.  */
 
 void
 mi_out_rewind (struct ui_out *uiout)
@@ -389,7 +377,7 @@ mi_out_rewind (struct ui_out *uiout)
   ui_file_rewind (data->buffer);
 }
 
-/* dump the buffer onto the specified stream */
+/* Dump the buffer onto the specified stream.  */
 
 static void
 do_write (void *data, const char *buffer, long length_buffer)
@@ -398,8 +386,7 @@ do_write (void *data, const char *buffer, long length_buffer)
 }
 
 void
-mi_out_put (struct ui_out *uiout,
-	    struct ui_file *stream)
+mi_out_put (struct ui_out *uiout, struct ui_file *stream)
 {
   mi_out_data *data = ui_out_data (uiout);
 
@@ -407,7 +394,7 @@ mi_out_put (struct ui_out *uiout,
   ui_file_rewind (data->buffer);
 }
 
-/* Current MI version.  */
+/* Return the current MI version.  */
 
 int
 mi_version (struct ui_out *uiout)
@@ -417,7 +404,7 @@ mi_version (struct ui_out *uiout)
   return data->mi_version;
 }
 
-/* initalize private members at startup */
+/* Initialize private members at startup.  */
 
 struct ui_out *
 mi_out_new (int mi_version)
@@ -433,10 +420,3 @@ mi_out_new (int mi_version)
   data->buffer = mem_fileopen ();
   return ui_out_new (&mi_ui_out_impl, data, flags);
 }
-
-/* standard gdb initialization hook */
-void
-_initialize_mi_out (void)
-{
-  /* nothing happens here */
-}
diff --git a/gdb/mi/mi-parse.c b/gdb/mi/mi-parse.c
index 2fbfc38..02700c4 100644
--- a/gdb/mi/mi-parse.c
+++ b/gdb/mi/mi-parse.c
@@ -113,7 +113,7 @@ mi_parse_argv (char *args, struct mi_parse *parse)
     {
       char *arg;
 
-      /* skip leading white space */
+      /* Skip leading white space.  */
       while (isspace (*chp))
 	chp++;
       /* Three possibilities: EOF, quoted string, or other text. */
@@ -125,11 +125,11 @@ mi_parse_argv (char *args, struct mi_parse *parse)
 	  return;
 	case '"':
 	  {
-	    /* A quoted string. */
+	    /* A quoted string.  */
 	    int len;
 	    char *start = chp + 1;
 
-	    /* Determine the buffer size. */
+	    /* Determine the buffer size.  */
 	    chp = start;
 	    len = 0;
 	    while (*chp != '\0' && *chp != '"')
@@ -139,7 +139,7 @@ mi_parse_argv (char *args, struct mi_parse *parse)
 		    chp++;
 		    if (mi_parse_escape (&chp) <= 0)
 		      {
-			/* Do not allow split lines or "\000" */
+			/* Do not allow split lines or "\000".  */
 			freeargv (argv);
 			return;
 		      }
@@ -148,21 +148,20 @@ mi_parse_argv (char *args, struct mi_parse *parse)
 		  chp++;
 		len++;
 	      }
-	    /* Insist on a closing quote. */
+	    /* Insist on a closing quote.  */
 	    if (*chp != '"')
 	      {
 		freeargv (argv);
 		return;
 	      }
-	    /* Insist on trailing white space. */
+	    /* Insist on trailing white space.  */
 	    if (chp[1] != '\0' && !isspace (chp[1]))
 	      {
 		freeargv (argv);
 		return;
 	      }
-	    /* create the buffer. */
+	    /* Create the buffer and copy characters in.  */
 	    arg = xmalloc ((len + 1) * sizeof (char));
-	    /* And copy the characters in. */
 	    chp = start;
 	    len = 0;
 	    while (*chp != '\0' && *chp != '"')
@@ -177,13 +176,13 @@ mi_parse_argv (char *args, struct mi_parse *parse)
 		len++;
 	      }
 	    arg[len] = '\0';
-	    chp++;		/* that closing quote. */
+	    chp++;		/* That closing quote.  */
 	    break;
 	  }
 	default:
 	  {
-	    /* An unquoted string.  Accumulate all non blank
-	       characters into a buffer. */
+	    /* An unquoted string.  Accumulate all non-blank
+	       characters into a buffer.  */
 	    int len;
 	    char *start = chp;
 
@@ -198,14 +197,13 @@ mi_parse_argv (char *args, struct mi_parse *parse)
 	    break;
 	  }
 	}
-      /* Append arg to argv. */
+      /* Append arg to argv.  */
       argv = xrealloc (argv, (argc + 2) * sizeof (char *));
       argv[argc++] = arg;
       argv[argc] = NULL;
     }
 }
 
-
 void
 mi_parse_free (struct mi_parse *parse)
 {
@@ -245,18 +243,18 @@ mi_parse (char *cmd, char **token)
 
   cleanup = make_cleanup (mi_parse_cleanup, parse);
 
-  /* Before starting, skip leading white space. */
+  /* Before starting, skip leading white space.  */
   while (isspace (*cmd))
     cmd++;
 
-  /* Find/skip any token and then extract it. */
+  /* Find/skip any token and then extract it.  */
   for (chp = cmd; *chp >= '0' && *chp <= '9'; chp++)
     ;
   *token = xmalloc (chp - cmd + 1);
   memcpy (*token, cmd, (chp - cmd));
   (*token)[chp - cmd] = '\0';
 
-  /* This wasn't a real MI command.  Return it as a CLI_COMMAND. */
+  /* This wasn't a real MI command.  Return it as a CLI_COMMAND.  */
   if (*chp != '-')
     {
       while (isspace (*chp))
@@ -269,7 +267,7 @@ mi_parse (char *cmd, char **token)
       return parse;
     }
 
-  /* Extract the command. */
+  /* Extract the command.  */
   {
     char *tmp = chp + 1;	/* discard ``-'' */
 
@@ -280,20 +278,20 @@ mi_parse (char *cmd, char **token)
     parse->command[chp - tmp] = '\0';
   }
 
-  /* Find the command in the MI table. */
+  /* Find the command in the MI table.  */
   parse->cmd = mi_lookup (parse->command);
   if (parse->cmd == NULL)
     error (_("Undefined MI command: %s"), parse->command);
 
-  /* Skip white space following the command. */
+  /* Skip white space following the command.  */
   while (isspace (*chp))
     chp++;
 
   /* Parse the --thread and --frame options, if present.  At present,
-     some important commands, like '-break-*' are implemented by forwarding
-     to the CLI layer directly.  We want to parse --thread and --frame
-     here, so as not to leave those option in the string that will be passed
-     to CLI.  */
+     some important commands, like '-break-*' are implemented by
+     forwarding to the CLI layer directly.  We want to parse --thread
+     and --frame here, so as not to leave those option in the string
+     that will be passed to CLI.  */
   for (;;)
     {
       const char *option;
@@ -350,7 +348,7 @@ mi_parse (char *cmd, char **token)
     }
 
   /* For new argv commands, attempt to return the parsed argument
-     list. */
+     list.  */
   if (parse->cmd->argv_func != NULL)
     {
       mi_parse_argv (chp, parse);
@@ -366,7 +364,7 @@ mi_parse (char *cmd, char **token)
 
   discard_cleanups (cleanup);
 
-  /* Fully parsed. */
+  /* Fully parsed, flag as an MI command.  */
   parse->op = MI_COMMAND;
   return parse;
 }
diff --git a/gdb/mi/mi-parse.h b/gdb/mi/mi-parse.h
index 59e57de..9b8e858 100644
--- a/gdb/mi/mi-parse.h
+++ b/gdb/mi/mi-parse.h
@@ -62,7 +62,7 @@ struct mi_parse
 
 extern struct mi_parse *mi_parse (char *cmd, char **token);
 
-/* Free a command returned by mi_parse_command. */
+/* Free a command returned by mi_parse_command.  */
 
 extern void mi_parse_free (struct mi_parse *cmd);
 
diff --git a/gdb/mi/mi-symbol-cmds.c b/gdb/mi/mi-symbol-cmds.c
index 7feb024..2fdea91 100644
--- a/gdb/mi/mi-symbol-cmds.c
+++ b/gdb/mi/mi-symbol-cmds.c
@@ -22,11 +22,9 @@
 #include "objfiles.h"
 #include "ui-out.h"
 
-/* SYMBOL-LIST-LINES:
-
-   Print the list of all pc addresses and lines of code for
-   the provided (full or base) source file name.  The entries
-   are sorted in ascending PC order. */
+/* Print the list of all pc addresses and lines of code for the
+   provided (full or base) source file name.  The entries are sorted
+   in ascending PC order.  */
 
 void
 mi_cmd_symbol_list_lines (char *command, char **argv, int argc)
@@ -47,9 +45,9 @@ mi_cmd_symbol_list_lines (char *command, char **argv, int argc)
   if (s == NULL)
     error (_("-symbol-list-lines: Unknown source file name."));
 
-  /* Now, dump the associated line table.  The pc addresses are already
-     sorted by increasing values in the symbol table, so no need to
-     perform any other sorting. */
+  /* Now, dump the associated line table.  The pc addresses are
+     already sorted by increasing values in the symbol table, so no
+     need to perform any other sorting.  */
 
   gdbarch = get_objfile_arch (s->objfile);
   cleanup_stack = make_cleanup_ui_out_list_begin_end (uiout, "lines");
diff --git a/gdb/microblaze-linux-tdep.c b/gdb/microblaze-linux-tdep.c
index 14c68da..6935ba5 100644
--- a/gdb/microblaze-linux-tdep.c
+++ b/gdb/microblaze-linux-tdep.c
@@ -137,6 +137,9 @@ microblaze_linux_init_abi (struct gdbarch_info info,
 				&microblaze_linux_sighandler_tramp_frame);
 }
 
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_microblaze_linux_tdep;
+
 void
 _initialize_microblaze_linux_tdep (void)
 {
diff --git a/gdb/microblaze-rom.c b/gdb/microblaze-rom.c
index 014e421..c713b21 100644
--- a/gdb/microblaze-rom.c
+++ b/gdb/microblaze-rom.c
@@ -25,6 +25,8 @@
 #include "serial.h"
 #include "regcache.h"
 
+void _initialize_picobug_rom (void);
+
 static char *picobug_inits[] =
 {"\r", NULL};
 
@@ -174,7 +176,7 @@ init_picobug_cmds (void)
 }
 
 void
-_initialize_picobug_rom ()
+_initialize_picobug_rom (void)
 {
   int i;
 
diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c
index d9f54ac..ca59213 100644
--- a/gdb/microblaze-tdep.c
+++ b/gdb/microblaze-tdep.c
@@ -81,7 +81,7 @@ static const char *microblaze_register_names[] =
 

 static int microblaze_debug_flag = 0;
 
-void
+static void
 microblaze_debug (const char *fmt, ...)
 { 
   if (microblaze_debug_flag)
@@ -120,7 +120,7 @@ microblaze_register_type (struct gdbarch *gdbarch, int regnum)
 

 /* Fetch the instruction at PC.  */
 
-unsigned long
+static unsigned long
 microblaze_fetch_instruction (CORE_ADDR pc)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
@@ -173,7 +173,6 @@ static struct microblaze_frame_cache *
 microblaze_alloc_frame_cache (void)
 {
   struct microblaze_frame_cache *cache;
-  int i;
 
   cache = FRAME_OBSTACK_ZALLOC (struct microblaze_frame_cache);
 
@@ -228,10 +227,10 @@ microblaze_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
 			     CORE_ADDR current_pc,
 			     struct microblaze_frame_cache *cache)
 {
-  char *name;
+  const char *name;
   CORE_ADDR func_addr, func_end, addr, stop, prologue_end_addr = 0;
   unsigned long insn;
-  int rn, rd, ra, rb, imm;
+  int rd, ra, rb, imm;
   enum microblaze_instr op;
   int flags = 0;
   int save_hidden_pointer_found = 0;
@@ -426,7 +425,7 @@ microblaze_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
 /* Return PC of first real instruction of the function starting at
    START_PC.  */
 
-CORE_ADDR
+static CORE_ADDR
 microblaze_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
 {
   struct symtab_and_line sal;
@@ -456,12 +455,12 @@ microblaze_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
 
 /* Normal frames.  */
 
-struct microblaze_frame_cache *
+static struct microblaze_frame_cache *
 microblaze_frame_cache (struct frame_info *next_frame, void **this_cache)
 {
   struct microblaze_frame_cache *cache;
   struct gdbarch *gdbarch = get_frame_arch (next_frame);
-  CORE_ADDR func, pc, fp;
+  CORE_ADDR func;
   int rn;
 
   if (*this_cache)
@@ -562,6 +561,7 @@ microblaze_extract_return_value (struct type *type, struct regcache *regcache,
 	memcpy(valbuf, buf + MICROBLAZE_REGISTER_SIZE - 1, 1);
 	return;
       case 2:	/* return last 2 bytes in register.  */
+	regcache_cooked_read (regcache, MICROBLAZE_RETVAL_REGNUM, buf);
 	memcpy(valbuf, buf + MICROBLAZE_REGISTER_SIZE - 2, 2);
 	return;
       case 4:	/* for sizes 4 or 8, copy the required length.  */
@@ -611,7 +611,7 @@ microblaze_store_return_value (struct type *type, struct regcache *regcache,
 }
 
 static enum return_value_convention
-microblaze_return_value (struct gdbarch *gdbarch, struct type *func_type,
+microblaze_return_value (struct gdbarch *gdbarch, struct value *function,
 			 struct type *type, struct regcache *regcache,
 			 gdb_byte *readbuf, const gdb_byte *writebuf)
 {
diff --git a/gdb/mingw-hdep.c b/gdb/mingw-hdep.c
index 331708f..ed06c56 100644
--- a/gdb/mingw-hdep.c
+++ b/gdb/mingw-hdep.c
@@ -251,6 +251,9 @@ gdb_call_async_signal_handler (struct async_signal_handler *handler,
   SetEvent (sigint_event);
 }
 
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_mingw_hdep;
+
 void
 _initialize_mingw_hdep (void)
 {
diff --git a/gdb/minsyms.c b/gdb/minsyms.c
index 2aec632..1070fff 100644
--- a/gdb/minsyms.c
+++ b/gdb/minsyms.c
@@ -76,7 +76,7 @@ static int msym_bunch_index;
 
 static int msym_count;
 
-/* Compute a hash code based using the same criteria as `strcmp_iw'.  */
+/* See minsyms.h.  */
 
 unsigned int
 msymbol_hash_iw (const char *string)
@@ -96,7 +96,7 @@ msymbol_hash_iw (const char *string)
   return hash;
 }
 
-/* Compute a hash code for a string.  */
+/* See minsyms.h.  */
 
 unsigned int
 msymbol_hash (const char *string)
@@ -109,7 +109,7 @@ msymbol_hash (const char *string)
 }
 
 /* Add the minimal symbol SYM to an objfile's minsym hash table, TABLE.  */
-void
+static void
 add_minsym_to_hash_table (struct minimal_symbol *sym,
 			  struct minimal_symbol **table)
 {
@@ -139,8 +139,8 @@ add_minsym_to_demangled_hash_table (struct minimal_symbol *sym,
     }
 }
 
+/* See minsyms.h.  */
 
-/* Return OBJFILE where minimal symbol SYM is defined.  */
 struct objfile *
 msymbol_objfile (struct minimal_symbol *sym)
 {
@@ -308,13 +308,7 @@ lookup_minimal_symbol (const char *name, const char *sfile,
   return NULL;
 }
 
-/* Iterate over all the minimal symbols in the objfile OBJF which
-   match NAME.  Both the ordinary and demangled names of each symbol
-   are considered.  The caller is responsible for canonicalizing NAME,
-   should that need to be done.
-   
-   For each matching symbol, CALLBACK is called with the symbol and
-   USER_DATA as arguments.  */
+/* See minsyms.h.  */
 
 void
 iterate_over_minimal_symbols (struct objfile *objf, const char *name,
@@ -348,12 +342,7 @@ iterate_over_minimal_symbols (struct objfile *objf, const char *name,
     }
 }
 
-/* Look through all the current minimal symbol tables and find the
-   first minimal symbol that matches NAME and has text type.  If OBJF
-   is non-NULL, limit the search to that objfile.  Returns a pointer
-   to the minimal symbol that matches, or NULL if no match is found.
-
-   This function only searches the mangled (linkage) names.  */
+/* See minsyms.h.  */
 
 struct minimal_symbol *
 lookup_minimal_symbol_text (const char *name, struct objfile *objf)
@@ -405,10 +394,7 @@ lookup_minimal_symbol_text (const char *name, struct objfile *objf)
   return NULL;
 }
 
-/* Look through all the current minimal symbol tables and find the
-   first minimal symbol that matches NAME and PC.  If OBJF is non-NULL,
-   limit the search to that objfile.  Returns a pointer to the minimal
-   symbol that matches, or NULL if no match is found.  */
+/* See minsyms.h.  */
 
 struct minimal_symbol *
 lookup_minimal_symbol_by_pc_name (CORE_ADDR pc, const char *name,
@@ -440,13 +426,7 @@ lookup_minimal_symbol_by_pc_name (CORE_ADDR pc, const char *name,
   return NULL;
 }
 
-/* Look through all the current minimal symbol tables and find the
-   first minimal symbol that matches NAME and is a solib trampoline.
-   If OBJF is non-NULL, limit the search to that objfile.  Returns a
-   pointer to the minimal symbol that matches, or NULL if no match is
-   found.
-
-   This function only searches the mangled (linkage) names.  */
+/* See minsyms.h.  */
 
 struct minimal_symbol *
 lookup_minimal_symbol_solib_trampoline (const char *name,
@@ -732,8 +712,7 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc, struct obj_section *section)
   return lookup_minimal_symbol_by_pc_section_1 (pc, section, 0);
 }
 
-/* Backward compatibility: search through the minimal symbol table 
-   for a matching PC (no section given).  */
+/* See minsyms.h.  */
 
 struct minimal_symbol *
 lookup_minimal_symbol_by_pc (CORE_ADDR pc)
@@ -804,10 +783,7 @@ static const struct gnu_ifunc_fns stub_gnu_ifunc_fns =
 
 const struct gnu_ifunc_fns *gnu_ifunc_fns_p = &stub_gnu_ifunc_fns;
 
-/* Find the minimal symbol named NAME, and return both the minsym
-   struct and its objfile.  This only checks the linkage name.  Sets
-   *OBJFILE_P and returns the minimal symbol, if it is found.  If it
-   is not found, returns NULL.  */
+/* See minsyms.h.  */
 
 struct minimal_symbol *
 lookup_minimal_symbol_and_objfile (const char *name,
@@ -851,18 +827,21 @@ get_symbol_leading_char (bfd *abfd)
   return 0;
 }
 
-/* Prepare to start collecting minimal symbols.  Note that presetting
-   msym_bunch_index to BUNCH_SIZE causes the first call to save a minimal
-   symbol to allocate the memory for the first bunch.  */
+/* See minsyms.h.  */
 
 void
 init_minimal_symbol_collection (void)
 {
   msym_count = 0;
   msym_bunch = NULL;
+  /* Note that presetting msym_bunch_index to BUNCH_SIZE causes the
+     first call to save a minimal symbol to allocate the memory for
+     the first bunch.  */
   msym_bunch_index = BUNCH_SIZE;
 }
 
+/* See minsyms.h.  */
+
 void
 prim_record_minimal_symbol (const char *name, CORE_ADDR address,
 			    enum minimal_symbol_type ms_type,
@@ -894,8 +873,7 @@ prim_record_minimal_symbol (const char *name, CORE_ADDR address,
 				       section, NULL, objfile);
 }
 
-/* Record a minimal symbol in the msym bunches.  Returns the symbol
-   newly created.  */
+/* See minsyms.h.  */
 
 struct minimal_symbol *
 prim_record_minimal_symbol_full (const char *name, int name_len, int copy_name,
@@ -972,8 +950,7 @@ prim_record_minimal_symbol_full (const char *name, int name_len, int copy_name,
   return msymbol;
 }
 
-/* Record a minimal symbol in the msym bunches.  Returns the symbol
-   newly created.  */
+/* See minsyms.h.  */
 
 struct minimal_symbol *
 prim_record_minimal_symbol_and_info (const char *name, CORE_ADDR address,
@@ -1011,8 +988,8 @@ compare_minimal_symbols (const void *fn1p, const void *fn2p)
   else
     /* addrs are equal: sort by name */
     {
-      char *name1 = SYMBOL_LINKAGE_NAME (fn1);
-      char *name2 = SYMBOL_LINKAGE_NAME (fn2);
+      const char *name1 = SYMBOL_LINKAGE_NAME (fn1);
+      const char *name2 = SYMBOL_LINKAGE_NAME (fn2);
 
       if (name1 && name2)	/* both have names */
 	return strcmp (name1, name2);
@@ -1046,6 +1023,8 @@ do_discard_minimal_symbols_cleanup (void *arg)
     }
 }
 
+/* See minsyms.h.  */
+
 struct cleanup *
 make_cleanup_discard_minimal_symbols (void)
 {
@@ -1188,6 +1167,13 @@ install_minimal_symbols (struct objfile *objfile)
 
   if (msym_count > 0)
     {
+      if (symtab_create_debug)
+	{
+	  fprintf_unfiltered (gdb_stdlog,
+			      "Installing %d minimal symbols of objfile %s.\n",
+			      msym_count, objfile->name);
+	}
+
       /* Allocate enough space in the obstack, into which we will gather the
          bunches of new and existing minimal symbols, sort them, and then
          compact out the duplicate entries.  Once we have a final table,
@@ -1289,6 +1275,27 @@ install_minimal_symbols (struct objfile *objfile)
     }
 }
 
+/* See minsyms.h.  */
+
+void
+terminate_minimal_symbol_table (struct objfile *objfile)
+{
+  if (! objfile->msymbols)
+    objfile->msymbols = ((struct minimal_symbol *)
+                         obstack_alloc (&objfile->objfile_obstack,
+                                        sizeof (objfile->msymbols[0])));
+
+  {
+    struct minimal_symbol *m
+      = &objfile->msymbols[objfile->minimal_symbol_count];
+
+    memset (m, 0, sizeof (*m));
+    /* Don't rely on these enumeration values being 0's.  */
+    MSYMBOL_TYPE (m) = mst_unknown;
+    SYMBOL_SET_LANGUAGE (m, language_unknown);
+  }
+}
+
 /* Sort all the minimal symbols in OBJFILE.  */
 
 void
@@ -1299,9 +1306,7 @@ msymbols_sort (struct objfile *objfile)
   build_minimal_symbol_hash_tables (objfile);
 }
 
-/* Check if PC is in a shared library trampoline code stub.
-   Return minimal symbol for the trampoline entry or NULL if PC is not
-   in a trampoline code stub.  */
+/* See minsyms.h.  */
 
 struct minimal_symbol *
 lookup_solib_trampoline_symbol_by_pc (CORE_ADDR pc)
diff --git a/gdb/minsyms.h b/gdb/minsyms.h
new file mode 100644
index 0000000..8f0472f
--- /dev/null
+++ b/gdb/minsyms.h
@@ -0,0 +1,251 @@
+/* Minimal symbol table definitions for GDB.
+
+   Copyright (C) 2011-2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef MINSYMS_H
+#define MINSYMS_H
+
+/* This header declares most of the API for dealing with minimal
+   symbols and minimal symbol tables.  A few things are declared
+   elsewhere; see below.
+
+   A minimal symbol is a symbol for which there is no direct debug
+   information.  For example, for an ELF binary, minimal symbols are
+   created from the ELF symbol table.
+
+   For the definition of the minimal symbol structure, see struct
+   minimal_symbol in symtab.h.
+
+   Minimal symbols are stored in tables attached to an objfile; see
+   objfiles.h for details.  Code should generally treat these tables
+   as opaque and use functions provided by minsyms.c to inspect them.
+*/
+
+/* Prepare to start collecting minimal symbols.  This should be called
+   by a symbol reader to initialize the minimal symbol module.
+   Currently, minimal symbol table creation is not reentrant; it
+   relies on global (static) variables in minsyms.c.  */
+
+void init_minimal_symbol_collection (void);
+
+/* Return a cleanup which is used to clean up the global state left
+   over by minimal symbol creation.  After calling
+   init_minimal_symbol_collection, a symbol reader should call this
+   function.  Then, after all minimal symbols have been read,
+   regardless of whether they are installed or not, the cleanup
+   returned by this function should be run.  */
+
+struct cleanup *make_cleanup_discard_minimal_symbols (void);
+
+/* Record a new minimal symbol.  This is the "full" entry point;
+   simpler convenience entry points are also provided below.
+   
+   This returns a new minimal symbol.  It is ok to modify the returned
+   minimal symbol (though generally not necessary).  It is not ok,
+   though, to stash the pointer anywhere; as minimal symbols may be
+   moved after creation.  The memory for the returned minimal symbol
+   is still owned by the minsyms.c code, and should not be freed.
+   
+   Arguments are:
+
+   NAME - the symbol's name
+   NAME_LEN - the length of the name
+   COPY_NAME - if true, the minsym code must make a copy of NAME.  If
+   false, then NAME must be NUL-terminated, and must have a lifetime
+   that is at least as long as OBJFILE's lifetime.
+   ADDRESS - the address of the symbol
+   MS_TYPE - the type of the symbol
+   SECTION - the symbol's section
+   BFD_SECTION - the symbol's BFD section; used to find the
+   appropriate obj_section for the minimal symbol.  This can be NULL.
+   OBJFILE - the objfile associated with the minimal symbol.  */
+
+struct minimal_symbol *prim_record_minimal_symbol_full
+    (const char *name,
+     int name_len,
+     int copy_name,
+     CORE_ADDR address,
+     enum minimal_symbol_type ms_type,
+     int section,
+     asection *bfd_section,
+     struct objfile *objfile);
+
+/* Like prim_record_minimal_symbol_full, but:
+   - uses strlen to compute NAME_LEN,
+   - passes COPY_NAME = 0,
+   - passes SECTION = 0,
+   - and passes BFD_SECTION = NULL.
+   
+   This variant does not return the new symbol.  */
+
+void prim_record_minimal_symbol (const char *, CORE_ADDR,
+				 enum minimal_symbol_type,
+				 struct objfile *);
+
+/* Like prim_record_minimal_symbol_full, but:
+   - uses strlen to compute NAME_LEN,
+   - passes COPY_NAME = 0.  */
+
+struct minimal_symbol *prim_record_minimal_symbol_and_info
+    (const char *,
+     CORE_ADDR,
+     enum minimal_symbol_type,
+     int section,
+     asection *bfd_section,
+     struct objfile *);
+
+/* Install the minimal symbols that have been collected into the given
+   objfile.  After this is called, the cleanup returned by
+   make_cleanup_discard_minimal_symbols should be run in order to
+   clean up global state.  */
+
+void install_minimal_symbols (struct objfile *);
+
+/* Create the terminating entry of OBJFILE's minimal symbol table.
+   If OBJFILE->msymbols is zero, allocate a single entry from
+   OBJFILE->objfile_obstack; otherwise, just initialize
+   OBJFILE->msymbols[OBJFILE->minimal_symbol_count].  */
+
+void terminate_minimal_symbol_table (struct objfile *objfile);
+
+/* Sort all the minimal symbols in OBJFILE.  This should be only be
+   called after relocating symbols; it ensures that the minimal
+   symbols are properly sorted by address.  */
+
+void msymbols_sort (struct objfile *objfile);
+
+

+
+/* Compute a hash code for the string argument.  */
+
+unsigned int msymbol_hash (const char *);
+
+/* Like msymbol_hash, but compute a hash code that is compatible with
+   strcmp_iw.  */
+
+unsigned int msymbol_hash_iw (const char *);
+
+/* Compute the next hash value from previous HASH and the character C.  This
+   is only a GDB in-memory computed value with no external files compatibility
+   requirements.  */
+
+#define SYMBOL_HASH_NEXT(hash, c)			\
+  ((hash) * 67 + tolower ((unsigned char) (c)) - 113)
+
+

+
+/* Return the objfile that holds the minimal symbol SYM.  Every
+   minimal symbols is held by some objfile; this will never return
+   NULL.  */
+
+struct objfile *msymbol_objfile (struct minimal_symbol *sym);
+
+

+
+/* Look through all the current minimal symbol tables and find the
+   first minimal symbol that matches NAME.  If OBJF is non-NULL, limit
+   the search to that objfile.  If SFILE is non-NULL, the only file-scope
+   symbols considered will be from that source file (global symbols are
+   still preferred).  Returns a pointer to the minimal symbol that
+   matches, or NULL if no match is found.  */
+
+struct minimal_symbol *lookup_minimal_symbol (const char *,
+					      const char *,
+					      struct objfile *);
+
+/* Find the minimal symbol named NAME, and return both the minsym
+   struct and its objfile.  This only checks the linkage name.  Sets
+   *OBJFILE_P and returns the minimal symbol, if it is found.  If it
+   is not found, returns NULL.  */
+
+struct minimal_symbol *lookup_minimal_symbol_and_objfile (const char *,
+							  struct objfile **);
+
+/* Look through all the current minimal symbol tables and find the
+   first minimal symbol that matches NAME and has text type.  If OBJF
+   is non-NULL, limit the search to that objfile.  Returns a pointer
+   to the minimal symbol that matches, or NULL if no match is found.
+
+   This function only searches the mangled (linkage) names.  */
+
+struct minimal_symbol *lookup_minimal_symbol_text (const char *,
+						   struct objfile *);
+
+/* Look through all the current minimal symbol tables and find the
+   first minimal symbol that matches NAME and is a solib trampoline.
+   If OBJF is non-NULL, limit the search to that objfile.  Returns a
+   pointer to the minimal symbol that matches, or NULL if no match is
+   found.
+
+   This function only searches the mangled (linkage) names.  */
+
+struct minimal_symbol *lookup_minimal_symbol_solib_trampoline
+    (const char *,
+     struct objfile *);
+
+/* Look through all the current minimal symbol tables and find the
+   first minimal symbol that matches NAME and PC.  If OBJF is non-NULL,
+   limit the search to that objfile.  Returns a pointer to the minimal
+   symbol that matches, or NULL if no match is found.  */
+
+struct minimal_symbol *lookup_minimal_symbol_by_pc_name
+    (CORE_ADDR, const char *, struct objfile *);
+
+/* Search through the minimal symbol table for each objfile and find
+   the symbol whose address is the largest address that is still less
+   than or equal to PC, and which matches SECTION.
+
+   If SECTION is NULL, this uses the result of find_pc_section
+   instead.
+
+   Returns a pointer to the minimal symbol if such a symbol is found,
+   or NULL if PC is not in a suitable range.  */
+
+struct minimal_symbol *lookup_minimal_symbol_by_pc_section
+    (CORE_ADDR,
+     struct obj_section *);
+
+/* Backward compatibility: search through the minimal symbol table 
+   for a matching PC (no section given).
+   
+   This is a wrapper that calls lookup_minimal_symbol_by_pc_section
+   with a NULL section argument.  */
+
+struct minimal_symbol *lookup_minimal_symbol_by_pc (CORE_ADDR);
+
+/* Check if PC is in a shared library trampoline code stub.
+   Return minimal symbol for the trampoline entry or NULL if PC is not
+   in a trampoline code stub.  */
+
+struct minimal_symbol *lookup_solib_trampoline_symbol_by_pc (CORE_ADDR);
+
+/* Iterate over all the minimal symbols in the objfile OBJF which
+   match NAME.  Both the ordinary and demangled names of each symbol
+   are considered.  The caller is responsible for canonicalizing NAME,
+   should that need to be done.
+
+   For each matching symbol, CALLBACK is called with the symbol and
+   USER_DATA as arguments.  */
+
+void iterate_over_minimal_symbols (struct objfile *objf,
+				   const char *name,
+				   void (*callback) (struct minimal_symbol *,
+						     void *),
+				   void *user_data);
+
+#endif /* MINSYMS_H */
diff --git a/gdb/mips-linux-nat.c b/gdb/mips-linux-nat.c
index edacbb7..b9f7f1d 100644
--- a/gdb/mips-linux-nat.c
+++ b/gdb/mips-linux-nat.c
@@ -36,7 +36,9 @@
 #include <sys/ptrace.h>
 
 #include "features/mips-linux.c"
+#include "features/mips-dsp-linux.c"
 #include "features/mips64-linux.c"
+#include "features/mips64-dsp-linux.c"
 
 #ifndef PTRACE_GET_THREAD_AREA
 #define PTRACE_GET_THREAD_AREA 25
@@ -94,6 +96,12 @@ mips_linux_register_addr (struct gdbarch *gdbarch, int regno, int store)
     regaddr = FPC_CSR;
   else if (regno == mips_regnum (gdbarch)->fp_implementation_revision)
     regaddr = store? (CORE_ADDR) -1 : FPC_EIR;
+  else if (mips_regnum (gdbarch)->dspacc != -1
+	   && regno >= mips_regnum (gdbarch)->dspacc
+	   && regno < mips_regnum (gdbarch)->dspacc + 6)
+    regaddr = DSP_BASE + (regno - mips_regnum (gdbarch)->dspacc);
+  else if (regno == mips_regnum (gdbarch)->dspctl)
+    regaddr = DSP_CONTROL;
   else if (mips_linux_restart_reg_p (gdbarch) && regno == MIPS_RESTART_REGNUM)
     regaddr = 0;
   else
@@ -129,6 +137,12 @@ mips64_linux_register_addr (struct gdbarch *gdbarch, int regno, int store)
     regaddr = MIPS64_FPC_CSR;
   else if (regno == mips_regnum (gdbarch)->fp_implementation_revision)
     regaddr = store? (CORE_ADDR) -1 : MIPS64_FPC_EIR;
+  else if (mips_regnum (gdbarch)->dspacc != -1
+	   && regno >= mips_regnum (gdbarch)->dspacc
+	   && regno < mips_regnum (gdbarch)->dspacc + 6)
+    regaddr = DSP_BASE + (regno - mips_regnum (gdbarch)->dspacc);
+  else if (regno == mips_regnum (gdbarch)->dspctl)
+    regaddr = DSP_CONTROL;
   else if (mips_linux_restart_reg_p (gdbarch) && regno == MIPS_RESTART_REGNUM)
     regaddr = 0;
   else
@@ -201,10 +215,13 @@ fill_fpregset (const struct regcache *regcache,
    using PTRACE_GETREGS et al.  */
 
 static void
-mips64_linux_regsets_fetch_registers (struct regcache *regcache, int regno)
+mips64_linux_regsets_fetch_registers (struct target_ops *ops,
+				      struct regcache *regcache, int regno)
 {
   struct gdbarch *gdbarch = get_regcache_arch (regcache);
-  int is_fp;
+  int is_fp, is_dsp;
+  int have_dsp;
+  int regi;
   int tid;
 
   if (regno >= mips_regnum (gdbarch)->fp0
@@ -217,11 +234,23 @@ mips64_linux_regsets_fetch_registers (struct regcache *regcache, int regno)
   else
     is_fp = 0;
 
+  /* DSP registers are optional and not a part of any set.  */
+  have_dsp = mips_regnum (gdbarch)->dspctl != -1;
+  if (!have_dsp)
+    is_dsp = 0;
+  else if (regno >= mips_regnum (gdbarch)->dspacc
+      && regno < mips_regnum (gdbarch)->dspacc + 6)
+    is_dsp = 1;
+  else if (regno == mips_regnum (gdbarch)->dspctl)
+    is_dsp = 1;
+  else
+    is_dsp = 0;
+
   tid = ptid_get_lwp (inferior_ptid);
   if (tid == 0)
     tid = ptid_get_pid (inferior_ptid);
 
-  if (regno == -1 || !is_fp)
+  if (regno == -1 || (!is_fp && !is_dsp))
     {
       mips64_elf_gregset_t regs;
 
@@ -257,17 +286,30 @@ mips64_linux_regsets_fetch_registers (struct regcache *regcache, int regno)
       mips64_supply_fpregset (regcache,
 			      (const mips64_elf_fpregset_t *) &fp_regs);
     }
+
+  if (is_dsp)
+    super_fetch_registers (ops, regcache, regno);
+  else if (regno == -1 && have_dsp)
+    {
+      for (regi = mips_regnum (gdbarch)->dspacc;
+	   regi < mips_regnum (gdbarch)->dspacc + 6;
+	   regi++)
+	super_fetch_registers (ops, regcache, regi);
+      super_fetch_registers (ops, regcache, mips_regnum (gdbarch)->dspctl);
+    }
 }
 
 /* Store REGNO (or all registers if REGNO == -1) to the target
    using PTRACE_SETREGS et al.  */
 
 static void
-mips64_linux_regsets_store_registers (const struct regcache *regcache,
-				      int regno)
+mips64_linux_regsets_store_registers (struct target_ops *ops,
+				      struct regcache *regcache, int regno)
 {
   struct gdbarch *gdbarch = get_regcache_arch (regcache);
-  int is_fp;
+  int is_fp, is_dsp;
+  int have_dsp;
+  int regi;
   int tid;
 
   if (regno >= mips_regnum (gdbarch)->fp0
@@ -280,11 +322,23 @@ mips64_linux_regsets_store_registers (const struct regcache *regcache,
   else
     is_fp = 0;
 
+  /* DSP registers are optional and not a part of any set.  */
+  have_dsp = mips_regnum (gdbarch)->dspctl != -1;
+  if (!have_dsp)
+    is_dsp = 0;
+  if (regno >= mips_regnum (gdbarch)->dspacc
+      && regno < mips_regnum (gdbarch)->dspacc + 6)
+    is_dsp = 1;
+  else if (regno == mips_regnum (gdbarch)->dspctl)
+    is_dsp = 1;
+  else
+    is_dsp = 0;
+
   tid = ptid_get_lwp (inferior_ptid);
   if (tid == 0)
     tid = ptid_get_pid (inferior_ptid);
 
-  if (regno == -1 || !is_fp)
+  if (regno == -1 || (!is_fp && !is_dsp))
     {
       mips64_elf_gregset_t regs;
 
@@ -311,6 +365,17 @@ mips64_linux_regsets_store_registers (const struct regcache *regcache,
 		  (PTRACE_TYPE_ARG3) &fp_regs) == -1)
 	perror_with_name (_("Couldn't set FP registers"));
     }
+
+  if (is_dsp)
+    super_store_registers (ops, regcache, regno);
+  else if (regno == -1 && have_dsp)
+    {
+      for (regi = mips_regnum (gdbarch)->dspacc;
+	   regi < mips_regnum (gdbarch)->dspacc + 6;
+	   regi++)
+	super_store_registers (ops, regcache, regi);
+      super_store_registers (ops, regcache, mips_regnum (gdbarch)->dspctl);
+    }
 }
 
 /* Fetch REGNO (or all registers if REGNO == -1) from the target
@@ -322,7 +387,7 @@ mips64_linux_fetch_registers (struct target_ops *ops,
 {
   /* Unless we already know that PTRACE_GETREGS does not work, try it.  */
   if (have_ptrace_regsets)
-    mips64_linux_regsets_fetch_registers (regcache, regnum);
+    mips64_linux_regsets_fetch_registers (ops, regcache, regnum);
 
   /* If we know, or just found out, that PTRACE_GETREGS does not work, fall
      back to PTRACE_PEEKUSER.  */
@@ -339,7 +404,7 @@ mips64_linux_store_registers (struct target_ops *ops,
 {
   /* Unless we already know that PTRACE_GETREGS does not work, try it.  */
   if (have_ptrace_regsets)
-    mips64_linux_regsets_store_registers (regcache, regnum);
+    mips64_linux_regsets_store_registers (ops, regcache, regnum);
 
   /* If we know, or just found out, that PTRACE_GETREGS does not work, fall
      back to PTRACE_PEEKUSER.  */
@@ -362,12 +427,37 @@ mips_linux_register_u_offset (struct gdbarch *gdbarch, int regno, int store_p)
 static const struct target_desc *
 mips_linux_read_description (struct target_ops *ops)
 {
+  static int have_dsp = -1;
+
+  if (have_dsp < 0)
+    {
+      int tid;
+
+      tid = ptid_get_lwp (inferior_ptid);
+      if (tid == 0)
+	tid = ptid_get_pid (inferior_ptid);
+
+      ptrace (PTRACE_PEEKUSER, tid, DSP_CONTROL, 0);
+      switch (errno)
+	{
+	case 0:
+	  have_dsp = 1;
+	  break;
+	case EIO:
+	  have_dsp = 0;
+	  break;
+	default:
+	  perror_with_name (_("Couldn't check DSP support"));
+	  break;
+	}
+    }
+
   /* Report that target registers are a size we know for sure
      that we can get from ptrace.  */
   if (_MIPS_SIM == _ABIO32)
-    return tdesc_mips_linux;
+    return have_dsp ? tdesc_mips_dsp_linux : tdesc_mips_linux;
   else
-    return tdesc_mips64_linux;
+    return have_dsp ? tdesc_mips64_dsp_linux : tdesc_mips64_linux;
 }
 
 #ifndef PTRACE_GET_WATCH_REGS
@@ -885,14 +975,14 @@ write_watchpoint_regs (void)
  register values for the new thread.  */
 
 static void
-mips_linux_new_thread (ptid_t ptid)
+mips_linux_new_thread (struct lwp_info *lp)
 {
   int tid;
 
   if (!mips_linux_read_watch_registers (0))
     return;
 
-  tid = ptid_get_lwp (ptid);
+  tid = ptid_get_lwp (lp->ptid);
   if (ptrace (PTRACE_SET_WATCH_REGS, tid, &watch_mirror) == -1)
     perror_with_name (_("Couldn't write debug register"));
 }
@@ -1088,5 +1178,7 @@ triggers a breakpoint or watchpoint."),
 
   /* Initialize the standard target descriptions.  */
   initialize_tdesc_mips_linux ();
+  initialize_tdesc_mips_dsp_linux ();
   initialize_tdesc_mips64_linux ();
+  initialize_tdesc_mips64_dsp_linux ();
 }
diff --git a/gdb/mips-linux-tdep.c b/gdb/mips-linux-tdep.c
index c339ec0..272e8d9 100644
--- a/gdb/mips-linux-tdep.c
+++ b/gdb/mips-linux-tdep.c
@@ -40,6 +40,7 @@
 #include "glibc-tdep.h"
 #include "linux-tdep.h"
 #include "xml-syscall.h"
+#include "gdb_signals.h"
 
 static struct target_so_ops mips_svr4_so_ops;
 
@@ -119,13 +120,8 @@ mips_supply_gregset (struct regcache *regcache,
   supply_32bit_reg (regcache, mips_regnum (gdbarch)->cause,
 		    regp + EF_CP0_CAUSE);
 
-  /* Fill inaccessible registers with zero.  */
+  /* Fill the inaccessible zero register with zero.  */
   regcache_raw_supply (regcache, MIPS_ZERO_REGNUM, zerobuf);
-  regcache_raw_supply (regcache, MIPS_UNUSED_REGNUM, zerobuf);
-  for (regi = MIPS_FIRST_EMBED_REGNUM;
-       regi <= MIPS_LAST_EMBED_REGNUM;
-       regi++)
-    regcache_raw_supply (regcache, regi, zerobuf);
 }
 
 static void
@@ -251,7 +247,7 @@ mips_fill_fpregset (const struct regcache *regcache,
 		    mips_elf_fpregset_t *fpregsetp, int regno)
 {
   struct gdbarch *gdbarch = get_regcache_arch (regcache);
-  char *from, *to;
+  char *to;
 
   if ((regno >= gdbarch_fp0_regnum (gdbarch))
       && (regno < gdbarch_fp0_regnum (gdbarch) + 32))
@@ -374,13 +370,8 @@ mips64_supply_gregset (struct regcache *regcache,
   supply_64bit_reg (regcache, mips_regnum (gdbarch)->cause,
 		    (const gdb_byte *) (regp + MIPS64_EF_CP0_CAUSE));
 
-  /* Fill inaccessible registers with zero.  */
+  /* Fill the inaccessible zero register with zero.  */
   regcache_raw_supply (regcache, MIPS_ZERO_REGNUM, zerobuf);
-  regcache_raw_supply (regcache, MIPS_UNUSED_REGNUM, zerobuf);
-  for (regi = MIPS_FIRST_EMBED_REGNUM;
-       regi <= MIPS_LAST_EMBED_REGNUM;
-       regi++)
-    regcache_raw_supply (regcache, regi, zerobuf);
 }
 
 static void
@@ -591,7 +582,7 @@ mips64_fill_fpregset_wrapper (const struct regset *regset,
   mips64_fill_fpregset (regcache, (mips64_elf_fpregset_t *)gregs, regnum);
 }
 
-const struct regset *
+static const struct regset *
 mips_linux_regset_from_core_section (struct gdbarch *gdbarch,
 			             const char *sect_name, size_t sect_size)
 {
@@ -879,6 +870,8 @@ static const struct tramp_frame mips_linux_n64_rt_sigframe = {
      sigset_t sf_mask;
    };
 
+   Pre-2.6.12 sigcontext:
+
    struct sigcontext {
         unsigned int       sc_regmask;          [Unused]
         unsigned int       sc_status;
@@ -900,6 +893,30 @@ static const struct tramp_frame mips_linux_n64_rt_sigframe = {
         unsigned long      sc_sigset[4];        [kernel's sigset_t]
    };
 
+   Post-2.6.12 sigcontext (SmartMIPS/DSP support added):
+
+   struct sigcontext {
+        unsigned int       sc_regmask;          [Unused]
+        unsigned int       sc_status;           [Unused]
+        unsigned long long sc_pc;
+        unsigned long long sc_regs[32];
+        unsigned long long sc_fpregs[32];
+        unsigned int       sc_acx;
+        unsigned int       sc_fpc_csr;
+        unsigned int       sc_fpc_eir;          [Unused]
+        unsigned int       sc_used_math;
+        unsigned int       sc_dsp;
+	[Alignment hole of four bytes]
+        unsigned long long sc_mdhi;
+        unsigned long long sc_mdlo;
+        unsigned long      sc_hi1;
+        unsigned long      sc_lo1;
+        unsigned long      sc_hi2;
+        unsigned long      sc_lo2;
+        unsigned long      sc_hi3;
+        unsigned long      sc_lo3;
+   };
+
    The RT signal frames look like this:
 
    struct rt_sigframe {
@@ -932,10 +949,17 @@ static const struct tramp_frame mips_linux_n64_rt_sigframe = {
 #define SIGCONTEXT_REGS     (2 * 8)
 #define SIGCONTEXT_FPREGS   (34 * 8)
 #define SIGCONTEXT_FPCSR    (66 * 8 + 4)
+#define SIGCONTEXT_DSPCTL   (68 * 8 + 0)
 #define SIGCONTEXT_HI       (69 * 8)
 #define SIGCONTEXT_LO       (70 * 8)
 #define SIGCONTEXT_CAUSE    (71 * 8 + 0)
 #define SIGCONTEXT_BADVADDR (71 * 8 + 4)
+#define SIGCONTEXT_HI1      (71 * 8 + 0)
+#define SIGCONTEXT_LO1      (71 * 8 + 4)
+#define SIGCONTEXT_HI2      (72 * 8 + 0)
+#define SIGCONTEXT_LO2      (72 * 8 + 4)
+#define SIGCONTEXT_HI3      (73 * 8 + 0)
+#define SIGCONTEXT_LO3      (73 * 8 + 4)
 
 #define SIGCONTEXT_REG_SIZE 8
 
@@ -946,7 +970,7 @@ mips_linux_o32_sigframe_init (const struct tramp_frame *self,
 			      CORE_ADDR func)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  int ireg, reg_position;
+  int ireg;
   CORE_ADDR frame_sp = get_frame_sp (this_frame);
   CORE_ADDR sigcontext_base;
   const struct mips_regnum *regs = mips_regnum (gdbarch);
@@ -1010,18 +1034,49 @@ mips_linux_o32_sigframe_init (const struct tramp_frame *self,
 			   regs->fp_control_status
 			   + gdbarch_num_regs (gdbarch),
 			   sigcontext_base + SIGCONTEXT_FPCSR);
+
+  if (regs->dspctl != -1)
+    trad_frame_set_reg_addr (this_cache,
+			     regs->dspctl + gdbarch_num_regs (gdbarch),
+			     sigcontext_base + SIGCONTEXT_DSPCTL);
+
   trad_frame_set_reg_addr (this_cache,
 			   regs->hi + gdbarch_num_regs (gdbarch),
 			   regs_base + SIGCONTEXT_HI);
   trad_frame_set_reg_addr (this_cache,
 			   regs->lo + gdbarch_num_regs (gdbarch),
 			   regs_base + SIGCONTEXT_LO);
-  trad_frame_set_reg_addr (this_cache,
-			   regs->cause + gdbarch_num_regs (gdbarch),
-			   sigcontext_base + SIGCONTEXT_CAUSE);
-  trad_frame_set_reg_addr (this_cache,
-			   regs->badvaddr + gdbarch_num_regs (gdbarch),
-			   sigcontext_base + SIGCONTEXT_BADVADDR);
+
+  if (regs->dspacc != -1)
+    {
+      trad_frame_set_reg_addr (this_cache,
+			       regs->dspacc + 0 + gdbarch_num_regs (gdbarch),
+			       sigcontext_base + SIGCONTEXT_HI1);
+      trad_frame_set_reg_addr (this_cache,
+			       regs->dspacc + 1 + gdbarch_num_regs (gdbarch),
+			       sigcontext_base + SIGCONTEXT_LO1);
+      trad_frame_set_reg_addr (this_cache,
+			       regs->dspacc + 2 + gdbarch_num_regs (gdbarch),
+			       sigcontext_base + SIGCONTEXT_HI2);
+      trad_frame_set_reg_addr (this_cache,
+			       regs->dspacc + 3 + gdbarch_num_regs (gdbarch),
+			       sigcontext_base + SIGCONTEXT_LO2);
+      trad_frame_set_reg_addr (this_cache,
+			       regs->dspacc + 4 + gdbarch_num_regs (gdbarch),
+			       sigcontext_base + SIGCONTEXT_HI3);
+      trad_frame_set_reg_addr (this_cache,
+			       regs->dspacc + 5 + gdbarch_num_regs (gdbarch),
+			       sigcontext_base + SIGCONTEXT_LO3);
+    }
+  else
+    {
+      trad_frame_set_reg_addr (this_cache,
+			       regs->cause + gdbarch_num_regs (gdbarch),
+			       sigcontext_base + SIGCONTEXT_CAUSE);
+      trad_frame_set_reg_addr (this_cache,
+			       regs->badvaddr + gdbarch_num_regs (gdbarch),
+			       sigcontext_base + SIGCONTEXT_BADVADDR);
+    }
 
   /* Choice of the bottom of the sigframe is somewhat arbitrary.  */
   trad_frame_set_id (this_cache, frame_id_build (frame_sp, func));
@@ -1099,9 +1154,16 @@ mips_linux_o32_sigframe_init (const struct tramp_frame *self,
 #define N64_SIGCONTEXT_REGS     (0 * 8)
 #define N64_SIGCONTEXT_FPREGS   (32 * 8)
 #define N64_SIGCONTEXT_HI       (64 * 8)
+#define N64_SIGCONTEXT_HI1      (65 * 8)
+#define N64_SIGCONTEXT_HI2      (66 * 8)
+#define N64_SIGCONTEXT_HI3      (67 * 8)
 #define N64_SIGCONTEXT_LO       (68 * 8)
+#define N64_SIGCONTEXT_LO1      (69 * 8)
+#define N64_SIGCONTEXT_LO2      (70 * 8)
+#define N64_SIGCONTEXT_LO3      (71 * 8)
 #define N64_SIGCONTEXT_PC       (72 * 8)
-#define N64_SIGCONTEXT_FPCSR    (73 * 8)
+#define N64_SIGCONTEXT_FPCSR    (73 * 8 + 0)
+#define N64_SIGCONTEXT_DSPCTL   (74 * 8 + 0)
 
 #define N64_SIGCONTEXT_REG_SIZE 8
 
@@ -1112,7 +1174,7 @@ mips_linux_n32n64_sigframe_init (const struct tramp_frame *self,
 				 CORE_ADDR func)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  int ireg, reg_position;
+  int ireg;
   CORE_ADDR frame_sp = get_frame_sp (this_frame);
   CORE_ADDR sigcontext_base;
   const struct mips_regnum *regs = mips_regnum (gdbarch);
@@ -1150,6 +1212,7 @@ mips_linux_n32n64_sigframe_init (const struct tramp_frame *self,
 			   regs->fp_control_status
 			   + gdbarch_num_regs (gdbarch),
 			   sigcontext_base + N64_SIGCONTEXT_FPCSR);
+
   trad_frame_set_reg_addr (this_cache,
 			   regs->hi + gdbarch_num_regs (gdbarch),
 			   sigcontext_base + N64_SIGCONTEXT_HI);
@@ -1157,15 +1220,44 @@ mips_linux_n32n64_sigframe_init (const struct tramp_frame *self,
 			   regs->lo + gdbarch_num_regs (gdbarch),
 			   sigcontext_base + N64_SIGCONTEXT_LO);
 
+  if (regs->dspacc != -1)
+    {
+      trad_frame_set_reg_addr (this_cache,
+			       regs->dspacc + 0 + gdbarch_num_regs (gdbarch),
+			       sigcontext_base + N64_SIGCONTEXT_HI1);
+      trad_frame_set_reg_addr (this_cache,
+			       regs->dspacc + 1 + gdbarch_num_regs (gdbarch),
+			       sigcontext_base + N64_SIGCONTEXT_LO1);
+      trad_frame_set_reg_addr (this_cache,
+			       regs->dspacc + 2 + gdbarch_num_regs (gdbarch),
+			       sigcontext_base + N64_SIGCONTEXT_HI2);
+      trad_frame_set_reg_addr (this_cache,
+			       regs->dspacc + 3 + gdbarch_num_regs (gdbarch),
+			       sigcontext_base + N64_SIGCONTEXT_LO2);
+      trad_frame_set_reg_addr (this_cache,
+			       regs->dspacc + 4 + gdbarch_num_regs (gdbarch),
+			       sigcontext_base + N64_SIGCONTEXT_HI3);
+      trad_frame_set_reg_addr (this_cache,
+			       regs->dspacc + 5 + gdbarch_num_regs (gdbarch),
+			       sigcontext_base + N64_SIGCONTEXT_LO3);
+    }
+  if (regs->dspctl != -1)
+    trad_frame_set_reg_addr (this_cache,
+			     regs->dspctl + gdbarch_num_regs (gdbarch),
+			     sigcontext_base + N64_SIGCONTEXT_DSPCTL);
+
   /* Choice of the bottom of the sigframe is somewhat arbitrary.  */
   trad_frame_set_id (this_cache, frame_id_build (frame_sp, func));
 }
 
+/* Implement the "write_pc" gdbarch method.  */
+
 static void
 mips_linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
 {
   struct gdbarch *gdbarch = get_regcache_arch (regcache);
-  regcache_cooked_write_unsigned (regcache, gdbarch_pc_regnum (gdbarch), pc);
+
+  mips_write_pc (regcache, pc);
 
   /* Clear the syscall restart flag.  */
   if (mips_linux_restart_reg_p (gdbarch))
@@ -1239,6 +1331,96 @@ mips_linux_get_syscall_number (struct gdbarch *gdbarch,
   return ret;
 }
 
+/* Translate signals based on MIPS signal values.  
+   Adapted from gdb/common/signals.c.  */
+
+static enum gdb_signal
+mips_gdb_signal_from_target (struct gdbarch *gdbarch, int signo)
+{
+  switch (signo) 
+    {
+    case 0:
+      return GDB_SIGNAL_0;
+    case MIPS_SIGHUP:
+      return GDB_SIGNAL_HUP;
+    case MIPS_SIGINT:
+      return GDB_SIGNAL_INT;
+    case MIPS_SIGQUIT:
+      return GDB_SIGNAL_QUIT;
+    case MIPS_SIGILL:
+      return GDB_SIGNAL_ILL;
+    case MIPS_SIGTRAP:
+      return GDB_SIGNAL_TRAP;
+    case MIPS_SIGABRT:
+      return GDB_SIGNAL_ABRT;
+    case MIPS_SIGEMT:
+      return GDB_SIGNAL_EMT;
+    case MIPS_SIGFPE:
+      return GDB_SIGNAL_FPE;
+    case MIPS_SIGKILL:
+      return GDB_SIGNAL_KILL;
+    case MIPS_SIGBUS:
+      return GDB_SIGNAL_BUS;
+    case MIPS_SIGSEGV:
+      return GDB_SIGNAL_SEGV;
+    case MIPS_SIGSYS:
+      return GDB_SIGNAL_SYS;
+    case MIPS_SIGPIPE:
+      return GDB_SIGNAL_PIPE;
+    case MIPS_SIGALRM:
+      return GDB_SIGNAL_ALRM;
+    case MIPS_SIGTERM:
+      return GDB_SIGNAL_TERM;
+    case MIPS_SIGUSR1:
+      return GDB_SIGNAL_USR1;
+    case MIPS_SIGUSR2:
+      return GDB_SIGNAL_USR2;
+    case MIPS_SIGCHLD:
+      return GDB_SIGNAL_CHLD;
+    case MIPS_SIGPWR:
+      return GDB_SIGNAL_PWR;
+    case MIPS_SIGWINCH:
+      return GDB_SIGNAL_WINCH;
+    case MIPS_SIGURG:
+      return GDB_SIGNAL_URG;
+    case MIPS_SIGPOLL:
+      return GDB_SIGNAL_POLL;
+    case MIPS_SIGSTOP:
+      return GDB_SIGNAL_STOP;
+    case MIPS_SIGTSTP:
+      return GDB_SIGNAL_TSTP;
+    case MIPS_SIGCONT:
+      return GDB_SIGNAL_CONT;
+    case MIPS_SIGTTIN:
+      return GDB_SIGNAL_TTIN;
+    case MIPS_SIGTTOU:
+      return GDB_SIGNAL_TTOU;
+    case MIPS_SIGVTALRM:
+      return GDB_SIGNAL_VTALRM;
+    case MIPS_SIGPROF:
+      return GDB_SIGNAL_PROF;
+    case MIPS_SIGXCPU:
+      return GDB_SIGNAL_XCPU;
+    case MIPS_SIGXFSZ:
+      return GDB_SIGNAL_XFSZ;
+  }
+
+  if (signo >= MIPS_SIGRTMIN && signo <= MIPS_SIGRTMAX)
+    {
+      /* GDB_SIGNAL_REALTIME values are not contiguous, map parts of
+         the MIPS block to the respective GDB_SIGNAL_REALTIME blocks.  */
+      signo -= MIPS_SIGRTMIN;
+      if (signo == 0)
+	return GDB_SIGNAL_REALTIME_32;
+      else if (signo < 32)
+	return ((enum gdb_signal) (signo - 1 + (int) GDB_SIGNAL_REALTIME_33));
+      else
+	return ((enum gdb_signal) (signo - 32 + (int) GDB_SIGNAL_REALTIME_64));
+    }
+
+  return GDB_SIGNAL_UNKNOWN;
+}
+
 /* Initialize one of the GNU/Linux OS ABIs.  */
 
 static void
@@ -1323,6 +1505,9 @@ mips_linux_init_abi (struct gdbarch_info info,
   set_gdbarch_regset_from_core_section (gdbarch,
 					mips_linux_regset_from_core_section);
 
+  set_gdbarch_gdb_signal_from_target (gdbarch,
+				      mips_gdb_signal_from_target);
+
   tdep->syscall_next_pc = mips_linux_syscall_next_pc;
 
   if (tdesc_data)
@@ -1334,6 +1519,7 @@ mips_linux_init_abi (struct gdbarch_info info,
 	 described or not).  */
       gdb_assert (gdbarch_num_regs (gdbarch) <= MIPS_RESTART_REGNUM);
       set_gdbarch_num_regs (gdbarch, MIPS_RESTART_REGNUM + 1);
+      set_gdbarch_num_pseudo_regs (gdbarch, MIPS_RESTART_REGNUM + 1);
 
       /* If it's present, then assign it to the reserved number.  */
       feature = tdesc_find_feature (info.target_desc,
diff --git a/gdb/mips-linux-tdep.h b/gdb/mips-linux-tdep.h
index fcf7983..0a1a161 100644
--- a/gdb/mips-linux-tdep.h
+++ b/gdb/mips-linux-tdep.h
@@ -36,6 +36,8 @@ typedef mips_elf_fpreg_t mips_elf_fpregset_t[ELF_NFPREG];
 #define MMLO		68
 #define FPC_CSR		69
 #define FPC_EIR		70
+#define DSP_BASE	71
+#define DSP_CONTROL	77
 
 #define EF_REG0			6
 #define EF_REG31		37
@@ -97,9 +99,51 @@ void mips64_fill_fpregset (const struct regcache *,
 enum {
   /* The Linux kernel stores an error code from any interrupted
      syscall in a "register" (in $0's save slot).  */
-  MIPS_RESTART_REGNUM = MIPS_LAST_EMBED_REGNUM + 1
+  MIPS_RESTART_REGNUM = 79
 };
 
 /* Return 1 if MIPS_RESTART_REGNUM is usable.  */
 
 int mips_linux_restart_reg_p (struct gdbarch *gdbarch);
+
+/* MIPS Signals -- adapted from linux/arch/mips/include/asm/signal.h.  */
+
+enum mips_signals 
+  {
+    MIPS_SIGHUP    =  1,	/* Hangup (POSIX).  */
+    MIPS_SIGINT    =  2,	/* Interrupt (ANSI).  */
+    MIPS_SIGQUIT   =  3,	/* Quit (POSIX).  */
+    MIPS_SIGILL    =  4,	/* Illegal instruction (ANSI).  */
+    MIPS_SIGTRAP   =  5,	/* Trace trap (POSIX).  */
+    MIPS_SIGIOT    =  6,	/* IOT trap (4.2 BSD).  */
+    MIPS_SIGABRT   =  MIPS_SIGIOT, /* Abort (ANSI).  */
+    MIPS_SIGEMT    =  7,
+    MIPS_SIGFPE    =  8,	/* Floating-point exception (ANSI).  */
+    MIPS_SIGKILL   =  9,	/* Kill, unblockable (POSIX).  */
+    MIPS_SIGBUS    = 10,	/* BUS error (4.2 BSD).  */
+    MIPS_SIGSEGV   = 11,	/* Segmentation violation (ANSI).  */
+    MIPS_SIGSYS    = 12,
+    MIPS_SIGPIPE   = 13,	/* Broken pipe (POSIX).  */
+    MIPS_SIGALRM   = 14,	/* Alarm clock (POSIX).  */
+    MIPS_SIGTERM   = 15,	/* Termination (ANSI).  */
+    MIPS_SIGUSR1   = 16,	/* User-defined signal 1 (POSIX).  */
+    MIPS_SIGUSR2   = 17,	/* User-defined signal 2 (POSIX).  */
+    MIPS_SIGCHLD   = 18,	/* Child status has changed (POSIX).  */
+    MIPS_SIGCLD    = MIPS_SIGCHLD, /* Same as SIGCHLD (System V).  */
+    MIPS_SIGPWR    = 19,	/* Power failure restart (System V).  */
+    MIPS_SIGWINCH  = 20,	/* Window size change (4.3 BSD, Sun).  */
+    MIPS_SIGURG    = 21,	/* Urgent condition on socket (4.2 BSD).  */
+    MIPS_SIGIO     = 22,	/* I/O now possible (4.2 BSD).  */
+    MIPS_SIGPOLL   = MIPS_SIGIO, /* Pollable event occurred (System V).  */
+    MIPS_SIGSTOP   = 23,	/* Stop, unblockable (POSIX).  */
+    MIPS_SIGTSTP   = 24,	/* Keyboard stop (POSIX).  */
+    MIPS_SIGCONT   = 25,	/* Continue (POSIX).  */
+    MIPS_SIGTTIN   = 26,	/* Background read from tty (POSIX).  */
+    MIPS_SIGTTOU   = 27,	/* Background write to tty (POSIX).  */
+    MIPS_SIGVTALRM = 28,	/* Virtual alarm clock (4.2 BSD).  */
+    MIPS_SIGPROF   = 29,	/* Profiling alarm clock (4.2 BSD).  */
+    MIPS_SIGXCPU   = 30,	/* CPU limit exceeded (4.2 BSD).  */
+    MIPS_SIGXFSZ   = 31,	/* File size limit exceeded (4.2 BSD).  */
+    MIPS_SIGRTMIN  = 32,	/* Minimum RT signal.  */
+    MIPS_SIGRTMAX  = 128 - 1	/* Maximum RT signal.  */
+  };
diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c
index ff06ccf..0439989 100644
--- a/gdb/mips-tdep.c
+++ b/gdb/mips-tdep.c
@@ -62,6 +62,12 @@ static const struct objfile_data *mips_pdr_data;
 
 static struct type *mips_register_type (struct gdbarch *gdbarch, int regnum);
 
+static int mips32_instruction_has_delay_slot (struct gdbarch *, CORE_ADDR);
+static int micromips_instruction_has_delay_slot (struct gdbarch *, CORE_ADDR,
+						 int);
+static int mips16_instruction_has_delay_slot (struct gdbarch *, CORE_ADDR,
+					      int);
+
 /* A useful bit in the CP0 status register (MIPS_PS_REGNUM).  */
 /* This bit is set if we are emulating 32-bit FPRs on a 64-bit chip.  */
 #define ST0_FR (1 << 26)
@@ -82,7 +88,7 @@ enum
 
 static const char *mips_abi_string;
 
-static const char *mips_abi_strings[] = {
+static const char *const mips_abi_strings[] = {
   "auto",
   "n32",
   "o32",
@@ -93,6 +99,20 @@ static const char *mips_abi_strings[] = {
   NULL
 };
 
+/* For backwards compatibility we default to MIPS16.  This flag is
+   overridden as soon as unambiguous ELF file flags tell us the
+   compressed ISA encoding used.  */
+static const char mips_compression_mips16[] = "mips16";
+static const char mips_compression_micromips[] = "micromips";
+static const char *const mips_compression_strings[] =
+{
+  mips_compression_mips16,
+  mips_compression_micromips,
+  NULL
+};
+
+static const char *mips_compression_string = mips_compression_mips16;
+
 /* The standard register names, and all the valid aliases for them.  */
 struct register_alias
 {
@@ -179,6 +199,18 @@ mips_fpa0_regnum (struct gdbarch *gdbarch)
   return mips_regnum (gdbarch)->fp0 + 12;
 }
 
+/* Return 1 if REGNUM refers to a floating-point general register, raw
+   or cooked.  Otherwise return 0.  */
+
+static int
+mips_float_register_p (struct gdbarch *gdbarch, int regnum)
+{
+  int rawnum = regnum % gdbarch_num_regs (gdbarch);
+
+  return (rawnum >= mips_regnum (gdbarch)->fp0
+	  && rawnum < mips_regnum (gdbarch)->fp0 + 32);
+}
+
 #define MIPS_EABI(gdbarch) (gdbarch_tdep (gdbarch)->mips_abi \
 		     == MIPS_ABI_EABI32 \
 		   || gdbarch_tdep (gdbarch)->mips_abi == MIPS_ABI_EABI64)
@@ -191,27 +223,6 @@ mips_fpa0_regnum (struct gdbarch *gdbarch)
 
 #define MIPS_FPU_TYPE(gdbarch) (gdbarch_tdep (gdbarch)->mips_fpu_type)
 
-/* MIPS16 function addresses are odd (bit 0 is set).  Here are some
-   functions to test, set, or clear bit 0 of addresses.  */
-
-static CORE_ADDR
-is_mips16_addr (CORE_ADDR addr)
-{
-  return ((addr) & 1);
-}
-
-static CORE_ADDR
-unmake_mips16_addr (CORE_ADDR addr)
-{
-  return ((addr) & ~(CORE_ADDR) 1);
-}
-
-static CORE_ADDR
-make_mips16_addr (CORE_ADDR addr)
-{
-  return ((addr) | (CORE_ADDR) 1);
-}
-
 /* Return the MIPS ABI associated with GDBARCH.  */
 enum mips_abi
 mips_abi (struct gdbarch *gdbarch)
@@ -255,31 +266,127 @@ mips_abi_regsize (struct gdbarch *gdbarch)
     }
 }
 
+/* MIPS16/microMIPS function addresses are odd (bit 0 is set).  Here
+   are some functions to handle addresses associated with compressed
+   code including but not limited to testing, setting, or clearing
+   bit 0 of such addresses.  */
+
+/* Return one iff compressed code is the MIPS16 instruction set.  */
+
+static int
+is_mips16_isa (struct gdbarch *gdbarch)
+{
+  return gdbarch_tdep (gdbarch)->mips_isa == ISA_MIPS16;
+}
+
+/* Return one iff compressed code is the microMIPS instruction set.  */
+
+static int
+is_micromips_isa (struct gdbarch *gdbarch)
+{
+  return gdbarch_tdep (gdbarch)->mips_isa == ISA_MICROMIPS;
+}
+
+/* Return one iff ADDR denotes compressed code.  */
+
+static int
+is_compact_addr (CORE_ADDR addr)
+{
+  return ((addr) & 1);
+}
+
+/* Return one iff ADDR denotes standard ISA code.  */
+
+static int
+is_mips_addr (CORE_ADDR addr)
+{
+  return !is_compact_addr (addr);
+}
+
+/* Return one iff ADDR denotes MIPS16 code.  */
+
+static int
+is_mips16_addr (struct gdbarch *gdbarch, CORE_ADDR addr)
+{
+  return is_compact_addr (addr) && is_mips16_isa (gdbarch);
+}
+
+/* Return one iff ADDR denotes microMIPS code.  */
+
+static int
+is_micromips_addr (struct gdbarch *gdbarch, CORE_ADDR addr)
+{
+  return is_compact_addr (addr) && is_micromips_isa (gdbarch);
+}
+
+/* Strip the ISA (compression) bit off from ADDR.  */
+
+static CORE_ADDR
+unmake_compact_addr (CORE_ADDR addr)
+{
+  return ((addr) & ~(CORE_ADDR) 1);
+}
+
+/* Add the ISA (compression) bit to ADDR.  */
+
+static CORE_ADDR
+make_compact_addr (CORE_ADDR addr)
+{
+  return ((addr) | (CORE_ADDR) 1);
+}
+
 /* Functions for setting and testing a bit in a minimal symbol that
-   marks it as 16-bit function.  The MSB of the minimal symbol's
-   "info" field is used for this purpose.
+   marks it as MIPS16 or microMIPS function.  The MSB of the minimal
+   symbol's "info" field is used for this purpose.
 
-   gdbarch_elf_make_msymbol_special tests whether an ELF symbol is "special",
-   i.e. refers to a 16-bit function, and sets a "special" bit in a
-   minimal symbol to mark it as a 16-bit function
+   gdbarch_elf_make_msymbol_special tests whether an ELF symbol is
+   "special", i.e. refers to a MIPS16 or microMIPS function, and sets
+   one of the "special" bits in a minimal symbol to mark it accordingly.
+   The test checks an ELF-private flag that is valid for true function
+   symbols only; in particular synthetic symbols such as for PLT stubs
+   have no ELF-private part at all.
 
-   MSYMBOL_IS_SPECIAL   tests the "special" bit in a minimal symbol  */
+   msymbol_is_mips16 and msymbol_is_micromips test the "special" bit
+   in a minimal symbol.  */
 
 static void
 mips_elf_make_msymbol_special (asymbol * sym, struct minimal_symbol *msym)
 {
-  if (((elf_symbol_type *) (sym))->internal_elf_sym.st_other == STO_MIPS16)
-    {
-      MSYMBOL_TARGET_FLAG_1 (msym) = 1;
-    }
+  elf_symbol_type *elfsym = (elf_symbol_type *) sym;
+
+  if ((sym->flags & BSF_SYNTHETIC) != 0)
+    return;
+
+  if (ELF_ST_IS_MICROMIPS (elfsym->internal_elf_sym.st_other))
+    MSYMBOL_TARGET_FLAG_2 (msym) = 1;
+  else if (ELF_ST_IS_MIPS16 (elfsym->internal_elf_sym.st_other))
+    MSYMBOL_TARGET_FLAG_1 (msym) = 1;
+}
+
+/* Return one iff MSYM refers to standard ISA code.  */
+
+static int
+msymbol_is_mips (struct minimal_symbol *msym)
+{
+  return !(MSYMBOL_TARGET_FLAG_1 (msym) | MSYMBOL_TARGET_FLAG_2 (msym));
 }
 
+/* Return one iff MSYM refers to MIPS16 code.  */
+
 static int
-msymbol_is_special (struct minimal_symbol *msym)
+msymbol_is_mips16 (struct minimal_symbol *msym)
 {
   return MSYMBOL_TARGET_FLAG_1 (msym);
 }
 
+/* Return one iff MSYM refers to microMIPS code.  */
+
+static int
+msymbol_is_micromips (struct minimal_symbol *msym)
+{
+  return MSYMBOL_TARGET_FLAG_2 (msym);
+}
+
 /* XFER a value from the big/little/left end of the register.
    Depending on the size of the value it might occupy the entire
    register or just part of it.  Make an allowance for this, aligning
@@ -390,9 +497,7 @@ static const char *mips_generic_reg_names[NUM_MIPS_PROCESSOR_REGS] = {
   "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
   "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
   "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
-  "fsr", "fir", "" /*"fp" */ , "",
-  "", "", "", "", "", "", "", "",
-  "", "", "", "", "", "", "", "",
+  "fsr", "fir",
 };
 
 /* Names of IDT R3041 registers.  */
@@ -418,7 +523,7 @@ static const char *mips_tx39_reg_names[NUM_MIPS_PROCESSOR_REGS] = {
   "", "", "", "", "", "", "", "",
   "", "", "", "",
   "", "", "", "", "", "", "", "",
-  "", "", "config", "cache", "debug", "depc", "epc", ""
+  "", "", "config", "cache", "debug", "depc", "epc",
 };
 
 /* Names of IRIX registers.  */
@@ -430,6 +535,16 @@ static const char *mips_irix_reg_names[NUM_MIPS_PROCESSOR_REGS] = {
   "pc", "cause", "bad", "hi", "lo", "fsr", "fir"
 };
 
+/* Names of registers with Linux kernels.  */
+static const char *mips_linux_reg_names[NUM_MIPS_PROCESSOR_REGS] = {
+  "sr", "lo", "hi", "bad", "cause", "pc",
+  "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
+  "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
+  "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
+  "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
+  "fsr", "fir"
+};
+
 
 /* Return the name of the register corresponding to REGNO.  */
 static const char *
@@ -484,7 +599,9 @@ mips_register_name (struct gdbarch *gdbarch, int regno)
   else if (32 <= rawnum && rawnum < gdbarch_num_regs (gdbarch))
     {
       gdb_assert (rawnum - 32 < NUM_MIPS_PROCESSOR_REGS);
-      return tdep->mips_processor_reg_names[rawnum - 32];
+      if (tdep->mips_processor_reg_names[rawnum - 32])
+	return tdep->mips_processor_reg_names[rawnum - 32];
+      return "";
     }
   else
     internal_error (__FILE__, __LINE__,
@@ -663,8 +780,8 @@ mips_ax_pseudo_register_push_stack (struct gdbarch *gdbarch,
   return 0;
 }
 
-/* Table to translate MIPS16 register field to actual register number.  */
-static int mips16_to_32_reg[8] = { 16, 17, 2, 3, 4, 5, 6, 7 };
+/* Table to translate 3-bit register field to actual register number.  */
+static const signed char mips_reg3_to_reg[8] = { 16, 17, 2, 3, 4, 5, 6, 7 };
 
 /* Heuristic_proc_start may hunt through the text section for a long
    time across a 2400 baud serial line.  Allows the user to limit this
@@ -706,10 +823,7 @@ mips_convert_register_float_case_p (struct gdbarch *gdbarch, int regnum,
 {
   return (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG
 	  && register_size (gdbarch, regnum) == 4
-	  && (regnum % gdbarch_num_regs (gdbarch))
-		>= mips_regnum (gdbarch)->fp0
-	  && (regnum % gdbarch_num_regs (gdbarch))
-		< mips_regnum (gdbarch)->fp0 + 32
+	  && mips_float_register_p (gdbarch, regnum)
 	  && TYPE_CODE (type) == TYPE_CODE_FLT && TYPE_LENGTH (type) == 8);
 }
 
@@ -731,8 +845,8 @@ static int
 mips_convert_register_p (struct gdbarch *gdbarch,
 			 int regnum, struct type *type)
 {
-  return mips_convert_register_float_case_p (gdbarch, regnum, type)
-      || mips_convert_register_gpreg_case_p (gdbarch, regnum, type);
+  return (mips_convert_register_float_case_p (gdbarch, regnum, type)
+	  || mips_convert_register_gpreg_case_p (gdbarch, regnum, type));
 }
 
 static int
@@ -832,9 +946,7 @@ static struct type *
 mips_register_type (struct gdbarch *gdbarch, int regnum)
 {
   gdb_assert (regnum >= 0 && regnum < 2 * gdbarch_num_regs (gdbarch));
-  if ((regnum % gdbarch_num_regs (gdbarch)) >= mips_regnum (gdbarch)->fp0
-      && (regnum % gdbarch_num_regs (gdbarch))
-	 < mips_regnum (gdbarch)->fp0 + 32)
+  if (mips_float_register_p (gdbarch, regnum))
     {
       /* The floating-point registers raw, or cooked, always match
          mips_isa_regsize(), and also map 1:1, byte for byte.  */
@@ -854,11 +966,17 @@ mips_register_type (struct gdbarch *gdbarch, int regnum)
     }
   else
     {
+      int rawnum = regnum - gdbarch_num_regs (gdbarch);
+
       /* The cooked or ABI registers.  These are sized according to
 	 the ABI (with a few complications).  */
-      if (regnum >= (gdbarch_num_regs (gdbarch)
-		     + mips_regnum (gdbarch)->fp_control_status)
-	  && regnum <= gdbarch_num_regs (gdbarch) + MIPS_LAST_EMBED_REGNUM)
+      if (rawnum == mips_regnum (gdbarch)->fp_control_status
+	  || rawnum == mips_regnum (gdbarch)->fp_implementation_revision)
+	return builtin_type (gdbarch)->builtin_int32;
+      else if (gdbarch_osabi (gdbarch) != GDB_OSABI_IRIX
+	       && gdbarch_osabi (gdbarch) != GDB_OSABI_LINUX
+	       && rawnum >= MIPS_FIRST_EMBED_REGNUM
+	       && rawnum <= MIPS_LAST_EMBED_REGNUM)
 	/* The pseudo/cooked view of the embedded registers is always
 	   32-bit.  The raw view is handled below.  */
 	return builtin_type (gdbarch)->builtin_int32;
@@ -886,7 +1004,6 @@ static struct type *
 mips_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
 {
   const int num_regs = gdbarch_num_regs (gdbarch);
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
   int rawnum = regnum % num_regs;
   struct type *rawtype;
 
@@ -897,37 +1014,49 @@ mips_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
   if (TYPE_LENGTH (rawtype) == 0)
     return rawtype;
 
-  if (rawnum >= MIPS_EMBED_FP0_REGNUM && rawnum < MIPS_EMBED_FP0_REGNUM + 32)
+  if (mips_float_register_p (gdbarch, rawnum))
     /* Present the floating point registers however the hardware did;
        do not try to convert between FPU layouts.  */
     return rawtype;
 
-  if (rawnum >= MIPS_EMBED_FP0_REGNUM + 32 && rawnum <= MIPS_LAST_EMBED_REGNUM)
-    {
-      /* The pseudo/cooked view of embedded registers is always
-	 32-bit, even if the target transfers 64-bit values for them.
-	 New targets relying on XML descriptions should only transfer
-	 the necessary 32 bits, but older versions of GDB expected 64,
-	 so allow the target to provide 64 bits without interfering
-	 with the displayed type.  */
-      return builtin_type (gdbarch)->builtin_int32;
-    }
-
   /* Use pointer types for registers if we can.  For n32 we can not,
      since we do not have a 64-bit pointer type.  */
   if (mips_abi_regsize (gdbarch)
       == TYPE_LENGTH (builtin_type (gdbarch)->builtin_data_ptr))
     {
-      if (rawnum == MIPS_SP_REGNUM || rawnum == MIPS_EMBED_BADVADDR_REGNUM)
+      if (rawnum == MIPS_SP_REGNUM
+	  || rawnum == mips_regnum (gdbarch)->badvaddr)
 	return builtin_type (gdbarch)->builtin_data_ptr;
-      else if (rawnum == MIPS_EMBED_PC_REGNUM)
+      else if (rawnum == mips_regnum (gdbarch)->pc)
 	return builtin_type (gdbarch)->builtin_func_ptr;
     }
 
   if (mips_abi_regsize (gdbarch) == 4 && TYPE_LENGTH (rawtype) == 8
-      && rawnum >= MIPS_ZERO_REGNUM && rawnum <= MIPS_EMBED_PC_REGNUM)
+      && ((rawnum >= MIPS_ZERO_REGNUM && rawnum <= MIPS_PS_REGNUM)
+	  || rawnum == mips_regnum (gdbarch)->lo
+	  || rawnum == mips_regnum (gdbarch)->hi
+	  || rawnum == mips_regnum (gdbarch)->badvaddr
+	  || rawnum == mips_regnum (gdbarch)->cause
+	  || rawnum == mips_regnum (gdbarch)->pc
+	  || (mips_regnum (gdbarch)->dspacc != -1
+	      && rawnum >= mips_regnum (gdbarch)->dspacc
+	      && rawnum < mips_regnum (gdbarch)->dspacc + 6)))
     return builtin_type (gdbarch)->builtin_int32;
 
+  if (gdbarch_osabi (gdbarch) != GDB_OSABI_IRIX
+      && gdbarch_osabi (gdbarch) != GDB_OSABI_LINUX
+      && rawnum >= MIPS_EMBED_FP0_REGNUM + 32
+      && rawnum <= MIPS_LAST_EMBED_REGNUM)
+    {
+      /* The pseudo/cooked view of embedded registers is always
+	 32-bit, even if the target transfers 64-bit values for them.
+	 New targets relying on XML descriptions should only transfer
+	 the necessary 32 bits, but older versions of GDB expected 64,
+	 so allow the target to provide 64 bits without interfering
+	 with the displayed type.  */
+      return builtin_type (gdbarch)->builtin_int32;
+    }
+
   /* For all other registers, pass through the hardware type.  */
   return rawtype;
 }
@@ -980,22 +1109,133 @@ show_mask_address (struct ui_file *file, int from_tty,
     }
 }
 
+/* Tell if the program counter value in MEMADDR is in a standard ISA
+   function.  */
+
+int
+mips_pc_is_mips (CORE_ADDR memaddr)
+{
+  struct minimal_symbol *sym;
+
+  /* Flags indicating that this is a MIPS16 or microMIPS function is
+     stored by elfread.c in the high bit of the info field.  Use this
+     to decide if the function is standard MIPS.  Otherwise if bit 0
+     of the address is clear, then this is a standard MIPS function.  */
+  sym = lookup_minimal_symbol_by_pc (memaddr);
+  if (sym)
+    return msymbol_is_mips (sym);
+  else
+    return is_mips_addr (memaddr);
+}
+
 /* Tell if the program counter value in MEMADDR is in a MIPS16 function.  */
 
 int
-mips_pc_is_mips16 (CORE_ADDR memaddr)
+mips_pc_is_mips16 (struct gdbarch *gdbarch, CORE_ADDR memaddr)
 {
   struct minimal_symbol *sym;
 
   /* A flag indicating that this is a MIPS16 function is stored by
      elfread.c in the high bit of the info field.  Use this to decide
-     if the function is MIPS16 or normal MIPS.  Otherwise if bit 0 of
-     the address is set, assume this is a MIPS16 address.  */
+     if the function is MIPS16.  Otherwise if bit 0 of the address is
+     set, then ELF file flags will tell if this is a MIPS16 function.  */
+  sym = lookup_minimal_symbol_by_pc (memaddr);
+  if (sym)
+    return msymbol_is_mips16 (sym);
+  else
+    return is_mips16_addr (gdbarch, memaddr);
+}
+
+/* Tell if the program counter value in MEMADDR is in a microMIPS function.  */
+
+int
+mips_pc_is_micromips (struct gdbarch *gdbarch, CORE_ADDR memaddr)
+{
+  struct minimal_symbol *sym;
+
+  /* A flag indicating that this is a microMIPS function is stored by
+     elfread.c in the high bit of the info field.  Use this to decide
+     if the function is microMIPS.  Otherwise if bit 0 of the address
+     is set, then ELF file flags will tell if this is a microMIPS
+     function.  */
+  sym = lookup_minimal_symbol_by_pc (memaddr);
+  if (sym)
+    return msymbol_is_micromips (sym);
+  else
+    return is_micromips_addr (gdbarch, memaddr);
+}
+
+/* Tell the ISA type of the function the program counter value in MEMADDR
+   is in.  */
+
+static enum mips_isa
+mips_pc_isa (struct gdbarch *gdbarch, CORE_ADDR memaddr)
+{
+  struct minimal_symbol *sym;
+
+  /* A flag indicating that this is a MIPS16 or a microMIPS function
+     is stored by elfread.c in the high bit of the info field.  Use
+     this to decide if the function is MIPS16 or microMIPS or normal
+     MIPS.  Otherwise if bit 0 of the address is set, then ELF file
+     flags will tell if this is a MIPS16 or a microMIPS function.  */
   sym = lookup_minimal_symbol_by_pc (memaddr);
   if (sym)
-    return msymbol_is_special (sym);
+    {
+      if (msymbol_is_micromips (sym))
+	return ISA_MICROMIPS;
+      else if (msymbol_is_mips16 (sym))
+	return ISA_MIPS16;
+      else
+	return ISA_MIPS;
+    }
   else
-    return is_mips16_addr (memaddr);
+    {
+      if (is_mips_addr (memaddr))
+	return ISA_MIPS;
+      else if (is_micromips_addr (gdbarch, memaddr))
+	return ISA_MICROMIPS;
+      else
+	return ISA_MIPS16;
+    }
+}
+
+/* Various MIPS16 thunk (aka stub or trampoline) names.  */
+
+static const char mips_str_mips16_call_stub[] = "__mips16_call_stub_";
+static const char mips_str_mips16_ret_stub[] = "__mips16_ret_";
+static const char mips_str_call_fp_stub[] = "__call_stub_fp_";
+static const char mips_str_call_stub[] = "__call_stub_";
+static const char mips_str_fn_stub[] = "__fn_stub_";
+
+/* This is used as a PIC thunk prefix.  */
+
+static const char mips_str_pic[] = ".pic.";
+
+/* Return non-zero if the PC is inside a call thunk (aka stub or
+   trampoline) that should be treated as a temporary frame.  */
+
+static int
+mips_in_frame_stub (CORE_ADDR pc)
+{
+  CORE_ADDR start_addr;
+  const char *name;
+
+  /* Find the starting address of the function containing the PC.  */
+  if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
+    return 0;
+
+  /* If the PC is in __mips16_call_stub_*, this is a call/return stub.  */
+  if (strncmp (name, mips_str_mips16_call_stub,
+	       strlen (mips_str_mips16_call_stub)) == 0)
+    return 1;
+  /* If the PC is in __call_stub_*, this is a call/return or a call stub.  */
+  if (strncmp (name, mips_str_call_stub, strlen (mips_str_call_stub)) == 0)
+    return 1;
+  /* If the PC is in __fn_stub_*, this is a call stub.  */
+  if (strncmp (name, mips_str_fn_stub, strlen (mips_str_fn_stub)) == 0)
+    return 1;
+
+  return 0;			/* Not a stub.  */
 }
 
 /* MIPS believes that the PC has a sign extended value.  Perhaps the
@@ -1004,23 +1244,42 @@ mips_pc_is_mips16 (CORE_ADDR memaddr)
 static CORE_ADDR
 mips_read_pc (struct regcache *regcache)
 {
+  int regnum = gdbarch_pc_regnum (get_regcache_arch (regcache));
   ULONGEST pc;
-  int regnum = mips_regnum (get_regcache_arch (regcache))->pc;
+
   regcache_cooked_read_signed (regcache, regnum, &pc);
-  if (is_mips16_addr (pc))
-    pc = unmake_mips16_addr (pc);
+  if (is_compact_addr (pc))
+    pc = unmake_compact_addr (pc);
   return pc;
 }
 
 static CORE_ADDR
 mips_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
 {
-  ULONGEST pc;
+  CORE_ADDR pc;
 
-  pc = frame_unwind_register_signed
-	 (next_frame, gdbarch_num_regs (gdbarch) + mips_regnum (gdbarch)->pc);
-  if (is_mips16_addr (pc))
-    pc = unmake_mips16_addr (pc);
+  pc = frame_unwind_register_signed (next_frame, gdbarch_pc_regnum (gdbarch));
+  if (is_compact_addr (pc))
+    pc = unmake_compact_addr (pc);
+  /* macro/2012-04-20: This hack skips over MIPS16 call thunks as
+     intermediate frames.  In this case we can get the caller's address
+     from $ra, or if $ra contains an address within a thunk as well, then
+     it must be in the return path of __mips16_call_stub_{s,d}{f,c}_{0..10}
+     and thus the caller's address is in $s2.  */
+  if (frame_relative_level (next_frame) >= 0 && mips_in_frame_stub (pc))
+    {
+      pc = frame_unwind_register_signed
+	     (next_frame, gdbarch_num_regs (gdbarch) + MIPS_RA_REGNUM);
+      if (is_compact_addr (pc))
+	pc = unmake_compact_addr (pc);
+      if (mips_in_frame_stub (pc))
+	{
+	  pc = frame_unwind_register_signed
+		 (next_frame, gdbarch_num_regs (gdbarch) + MIPS_S2_REGNUM);
+	  if (is_compact_addr (pc))
+	    pc = unmake_compact_addr (pc);
+	}
+    }
   return pc;
 }
 
@@ -1046,37 +1305,54 @@ mips_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
 	    get_frame_pc (this_frame));
 }
 
-static void
+/* Implement the "write_pc" gdbarch method.  */
+
+void
 mips_write_pc (struct regcache *regcache, CORE_ADDR pc)
 {
-  int regnum = mips_regnum (get_regcache_arch (regcache))->pc;
-  if (mips_pc_is_mips16 (pc))
-    regcache_cooked_write_unsigned (regcache, regnum, make_mips16_addr (pc));
-  else
+  int regnum = gdbarch_pc_regnum (get_regcache_arch (regcache));
+
+  if (mips_pc_is_mips (pc))
     regcache_cooked_write_unsigned (regcache, regnum, pc);
+  else
+    regcache_cooked_write_unsigned (regcache, regnum, make_compact_addr (pc));
 }
 
-/* Fetch and return instruction from the specified location.  If the PC
-   is odd, assume it's a MIPS16 instruction; otherwise MIPS32.  */
+/* Fetch and return instruction from the specified location.  Handle
+   MIPS16/microMIPS as appropriate.  */
 
 static ULONGEST
-mips_fetch_instruction (struct gdbarch *gdbarch, CORE_ADDR addr)
+mips_fetch_instruction (struct gdbarch *gdbarch,
+			enum mips_isa isa, CORE_ADDR addr, int *statusp)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   gdb_byte buf[MIPS_INSN32_SIZE];
   int instlen;
   int status;
 
-  if (mips_pc_is_mips16 (addr))
+  switch (isa)
     {
+    case ISA_MICROMIPS:
+    case ISA_MIPS16:
       instlen = MIPS_INSN16_SIZE;
-      addr = unmake_mips16_addr (addr);
+      addr = unmake_compact_addr (addr);
+      break;
+    case ISA_MIPS:
+      instlen = MIPS_INSN32_SIZE;
+      break;
+    default:
+      internal_error (__FILE__, __LINE__, _("invalid ISA"));
+      break;
     }
-  else
-    instlen = MIPS_INSN32_SIZE;
   status = target_read_memory (addr, buf, instlen);
+  if (statusp != NULL)
+    *statusp = status;
   if (status)
-    memory_error (status, addr);
+    {
+      if (statusp == NULL)
+	memory_error (status, addr);
+      return 0;
+    }
   return extract_unsigned_integer (buf, instlen, byte_order);
 }
 
@@ -1097,12 +1373,99 @@ mips_fetch_instruction (struct gdbarch *gdbarch, CORE_ADDR addr)
 #define rtype_shamt(x) ((x >> 6) & 0x1f)
 #define rtype_funct(x) (x & 0x3f)
 
+/* MicroMIPS instruction fields.  */
+#define micromips_op(x) ((x) >> 10)
+
+/* 16-bit/32-bit-high-part instruction formats, B and S refer to the lowest
+   bit and the size respectively of the field extracted.  */
+#define b0s4_imm(x) ((x) & 0xf)
+#define b0s5_imm(x) ((x) & 0x1f)
+#define b0s5_reg(x) ((x) & 0x1f)
+#define b0s7_imm(x) ((x) & 0x7f)
+#define b0s10_imm(x) ((x) & 0x3ff)
+#define b1s4_imm(x) (((x) >> 1) & 0xf)
+#define b1s9_imm(x) (((x) >> 1) & 0x1ff)
+#define b2s3_cc(x) (((x) >> 2) & 0x7)
+#define b4s2_regl(x) (((x) >> 4) & 0x3)
+#define b5s5_op(x) (((x) >> 5) & 0x1f)
+#define b5s5_reg(x) (((x) >> 5) & 0x1f)
+#define b6s4_op(x) (((x) >> 6) & 0xf)
+#define b7s3_reg(x) (((x) >> 7) & 0x7)
+
+/* 32-bit instruction formats, B and S refer to the lowest bit and the size
+   respectively of the field extracted.  */
+#define b0s6_op(x) ((x) & 0x3f)
+#define b0s11_op(x) ((x) & 0x7ff)
+#define b0s12_imm(x) ((x) & 0xfff)
+#define b0s16_imm(x) ((x) & 0xffff)
+#define b0s26_imm(x) ((x) & 0x3ffffff)
+#define b6s10_ext(x) (((x) >> 6) & 0x3ff)
+#define b11s5_reg(x) (((x) >> 11) & 0x1f)
+#define b12s4_op(x) (((x) >> 12) & 0xf)
+
+/* Return the size in bytes of the instruction INSN encoded in the ISA
+   instruction set.  */
+
+static int
+mips_insn_size (enum mips_isa isa, ULONGEST insn)
+{
+  switch (isa)
+    {
+    case ISA_MICROMIPS:
+      if (micromips_op (insn) == 0x1f)
+        return 3 * MIPS_INSN16_SIZE;
+      else if (((micromips_op (insn) & 0x4) == 0x4)
+	       || ((micromips_op (insn) & 0x7) == 0x0))
+        return 2 * MIPS_INSN16_SIZE;
+      else
+        return MIPS_INSN16_SIZE;
+    case ISA_MIPS16:
+      if ((insn & 0xf800) == 0xf000)
+	return 2 * MIPS_INSN16_SIZE;
+      else
+	return MIPS_INSN16_SIZE;
+    case ISA_MIPS:
+	return MIPS_INSN32_SIZE;
+    }
+  internal_error (__FILE__, __LINE__, _("invalid ISA"));
+}
+
 static LONGEST
 mips32_relative_offset (ULONGEST inst)
 {
   return ((itype_immediate (inst) ^ 0x8000) - 0x8000) << 2;
 }
 
+/* Determine the address of the next instruction executed after the INST
+   floating condition branch instruction at PC.  COUNT specifies the
+   number of the floating condition bits tested by the branch.  */
+
+static CORE_ADDR
+mips32_bc1_pc (struct gdbarch *gdbarch, struct frame_info *frame,
+	       ULONGEST inst, CORE_ADDR pc, int count)
+{
+  int fcsr = mips_regnum (gdbarch)->fp_control_status;
+  int cnum = (itype_rt (inst) >> 2) & (count - 1);
+  int tf = itype_rt (inst) & 1;
+  int mask = (1 << count) - 1;
+  ULONGEST fcs;
+  int cond;
+
+  if (fcsr == -1)
+    /* No way to handle; it'll most likely trap anyway.  */
+    return pc;
+
+  fcs = get_frame_register_unsigned (frame, fcsr);
+  cond = ((fcs >> 24) & 0xfe) | ((fcs >> 23) & 0x01);
+
+  if (((cond >> cnum) & mask) != mask * !tf)
+    pc += mips32_relative_offset (inst);
+  else
+    pc += 4;
+
+  return pc;
+}
+
 /* Determine where to set a single step breakpoint while considering
    branch prediction.  */
 static CORE_ADDR
@@ -1111,7 +1474,7 @@ mips32_next_pc (struct frame_info *frame, CORE_ADDR pc)
   struct gdbarch *gdbarch = get_frame_arch (frame);
   unsigned long inst;
   int op;
-  inst = mips_fetch_instruction (gdbarch, pc);
+  inst = mips_fetch_instruction (gdbarch, ISA_MIPS, pc, NULL);
   if ((inst & 0xe0000000) != 0)		/* Not a special, jump or branch
 					   instruction.  */
     {
@@ -1135,19 +1498,24 @@ mips32_next_pc (struct frame_info *frame, CORE_ADDR pc)
 	}
       else if (itype_op (inst) == 17 && itype_rs (inst) == 8)
 	/* BC1F, BC1FL, BC1T, BC1TL: 010001 01000 */
+	pc = mips32_bc1_pc (gdbarch, frame, inst, pc + 4, 1);
+      else if (itype_op (inst) == 17 && itype_rs (inst) == 9
+	       && (itype_rt (inst) & 2) == 0)
+	/* BC1ANY2F, BC1ANY2T: 010001 01001 xxx0x */
+	pc = mips32_bc1_pc (gdbarch, frame, inst, pc + 4, 2);
+      else if (itype_op (inst) == 17 && itype_rs (inst) == 10
+	       && (itype_rt (inst) & 2) == 0)
+	/* BC1ANY4F, BC1ANY4T: 010001 01010 xxx0x */
+	pc = mips32_bc1_pc (gdbarch, frame, inst, pc + 4, 4);
+      else if (itype_op (inst) == 29)
+	/* JALX: 011101 */
+	/* The new PC will be alternate mode.  */
 	{
-	  int tf = itype_rt (inst) & 0x01;
-	  int cnum = itype_rt (inst) >> 2;
-	  int fcrcs =
-	    get_frame_register_signed (frame,
-				       mips_regnum (get_frame_arch (frame))->
-						fp_control_status);
-	  int cond = ((fcrcs >> 24) & 0xfe) | ((fcrcs >> 23) & 0x01);
-
-	  if (((cond >> cnum) & 0x01) == tf)
-	    pc += mips32_relative_offset (inst) + 4;
-	  else
-	    pc += 8;
+	  unsigned long reg;
+
+	  reg = jtype_target (inst) << 2;
+	  /* Add 1 to indicate 16-bit mode -- invert ISA mode.  */
+	  pc = ((pc + 4) & ~(CORE_ADDR) 0x0fffffff) + reg + 1;
 	}
       else
 	pc += 4;		/* Not a branch, next instruction is easy.  */
@@ -1207,6 +1575,25 @@ mips32_next_pc (struct frame_info *frame, CORE_ADDR pc)
 		else
 		  pc += 8;	/* after the delay slot */
 		break;
+	      case 0x1c:	/* BPOSGE32 */
+	      case 0x1e:	/* BPOSGE64 */
+		pc += 4;
+		if (itype_rs (inst) == 0)
+		  {
+		    unsigned int pos = (op & 2) ? 64 : 32;
+		    int dspctl = mips_regnum (gdbarch)->dspctl;
+
+		    if (dspctl == -1)
+		      /* No way to handle; it'll most likely trap anyway.  */
+		      break;
+
+		    if ((get_frame_register_unsigned (frame,
+						      dspctl) & 0x7f) >= pos)
+		      pc += mips32_relative_offset (inst);
+		    else
+		      pc += 4;
+		  }
+		break;
 		/* All of the other instructions in the REGIMM category */
 	      default:
 		pc += 4;
@@ -1222,14 +1609,6 @@ mips32_next_pc (struct frame_info *frame, CORE_ADDR pc)
 	    pc = reg + ((pc + 4) & ~(CORE_ADDR) 0x0fffffff);
 	  }
 	  break;
-	  /* FIXME case JALX : */
-	  {
-	    unsigned long reg;
-	    reg = jtype_target (inst) << 2;
-	    pc = reg + ((pc + 4) & ~(CORE_ADDR) 0x0fffffff) + 1;  /* yes, +1 */
-	    /* Add 1 to indicate 16 bit mode - Invert ISA mode */
-	  }
-	  break;		/* The new PC will be alternate mode */
 	case 4:		/* BEQ, BEQL */
 	equal_branch:
 	  if (get_frame_register_signed (frame, itype_rs (inst)) ==
@@ -1265,36 +1644,306 @@ mips32_next_pc (struct frame_info *frame, CORE_ADDR pc)
   return pc;
 }				/* mips32_next_pc */
 
-/* Decoding the next place to set a breakpoint is irregular for the
-   mips 16 variant, but fortunately, there fewer instructions.  We have
-   to cope ith extensions for 16 bit instructions and a pair of actual
-   32 bit instructions.  We dont want to set a single step instruction
-   on the extend instruction either.  */
+/* Extract the 7-bit signed immediate offset from the microMIPS instruction
+   INSN.  */
 
-/* Lots of mips16 instruction formats */
-/* Predicting jumps requires itype,ritype,i8type
-   and their extensions      extItype,extritype,extI8type.  */
-enum mips16_inst_fmts
+static LONGEST
+micromips_relative_offset7 (ULONGEST insn)
 {
-  itype,			/* 0  immediate 5,10 */
-  ritype,			/* 1   5,3,8 */
-  rrtype,			/* 2   5,3,3,5 */
-  rritype,			/* 3   5,3,3,5 */
-  rrrtype,			/* 4   5,3,3,3,2 */
-  rriatype,			/* 5   5,3,3,1,4 */
-  shifttype,			/* 6   5,3,3,3,2 */
-  i8type,			/* 7   5,3,8 */
-  i8movtype,			/* 8   5,3,3,5 */
-  i8mov32rtype,			/* 9   5,3,5,3 */
-  i64type,			/* 10  5,3,8 */
-  ri64type,			/* 11  5,3,3,5 */
-  jalxtype,			/* 12  5,1,5,5,16 - a 32 bit instruction */
-  exiItype,			/* 13  5,6,5,5,1,1,1,1,1,1,5 */
-  extRitype,			/* 14  5,6,5,5,3,1,1,1,5 */
-  extRRItype,			/* 15  5,5,5,5,3,3,5 */
-  extRRIAtype,			/* 16  5,7,4,5,3,3,1,4 */
-  EXTshifttype,			/* 17  5,5,1,1,1,1,1,1,5,3,3,1,1,1,2 */
-  extI8type,			/* 18  5,6,5,5,3,1,1,1,5 */
+  return ((b0s7_imm (insn) ^ 0x40) - 0x40) << 1;
+}
+
+/* Extract the 10-bit signed immediate offset from the microMIPS instruction
+   INSN.  */
+
+static LONGEST
+micromips_relative_offset10 (ULONGEST insn)
+{
+  return ((b0s10_imm (insn) ^ 0x200) - 0x200) << 1;
+}
+
+/* Extract the 16-bit signed immediate offset from the microMIPS instruction
+   INSN.  */
+
+static LONGEST
+micromips_relative_offset16 (ULONGEST insn)
+{
+  return ((b0s16_imm (insn) ^ 0x8000) - 0x8000) << 1;
+}
+
+/* Return the size in bytes of the microMIPS instruction at the address PC.  */
+
+static int
+micromips_pc_insn_size (struct gdbarch *gdbarch, CORE_ADDR pc)
+{
+  ULONGEST insn;
+
+  insn = mips_fetch_instruction (gdbarch, ISA_MICROMIPS, pc, NULL);
+  return mips_insn_size (ISA_MICROMIPS, insn);
+}
+
+/* Calculate the address of the next microMIPS instruction to execute
+   after the INSN coprocessor 1 conditional branch instruction at the
+   address PC.  COUNT denotes the number of coprocessor condition bits
+   examined by the branch.  */
+
+static CORE_ADDR
+micromips_bc1_pc (struct gdbarch *gdbarch, struct frame_info *frame,
+		  ULONGEST insn, CORE_ADDR pc, int count)
+{
+  int fcsr = mips_regnum (gdbarch)->fp_control_status;
+  int cnum = b2s3_cc (insn >> 16) & (count - 1);
+  int tf = b5s5_op (insn >> 16) & 1;
+  int mask = (1 << count) - 1;
+  ULONGEST fcs;
+  int cond;
+
+  if (fcsr == -1)
+    /* No way to handle; it'll most likely trap anyway.  */
+    return pc;
+
+  fcs = get_frame_register_unsigned (frame, fcsr);
+  cond = ((fcs >> 24) & 0xfe) | ((fcs >> 23) & 0x01);
+
+  if (((cond >> cnum) & mask) != mask * !tf)
+    pc += micromips_relative_offset16 (insn);
+  else
+    pc += micromips_pc_insn_size (gdbarch, pc);
+
+  return pc;
+}
+
+/* Calculate the address of the next microMIPS instruction to execute
+   after the instruction at the address PC.  */
+
+static CORE_ADDR
+micromips_next_pc (struct frame_info *frame, CORE_ADDR pc)
+{
+  struct gdbarch *gdbarch = get_frame_arch (frame);
+  ULONGEST insn;
+
+  insn = mips_fetch_instruction (gdbarch, ISA_MICROMIPS, pc, NULL);
+  pc += MIPS_INSN16_SIZE;
+  switch (mips_insn_size (ISA_MICROMIPS, insn))
+    {
+    /* 48-bit instructions.  */
+    case 3 * MIPS_INSN16_SIZE: /* POOL48A: bits 011111 */
+      /* No branch or jump instructions in this category.  */
+      pc += 2 * MIPS_INSN16_SIZE;
+      break;
+
+    /* 32-bit instructions.  */
+    case 2 * MIPS_INSN16_SIZE:
+      insn <<= 16;
+      insn |= mips_fetch_instruction (gdbarch, ISA_MICROMIPS, pc, NULL);
+      pc += MIPS_INSN16_SIZE;
+      switch (micromips_op (insn >> 16))
+	{
+	case 0x00: /* POOL32A: bits 000000 */
+	  if (b0s6_op (insn) == 0x3c
+				/* POOL32Axf: bits 000000 ... 111100 */
+	      && (b6s10_ext (insn) & 0x2bf) == 0x3c)
+				/* JALR, JALR.HB: 000000 000x111100 111100 */
+				/* JALRS, JALRS.HB: 000000 010x111100 111100 */
+	    pc = get_frame_register_signed (frame, b0s5_reg (insn >> 16));
+	  break;
+
+	case 0x10: /* POOL32I: bits 010000 */
+	  switch (b5s5_op (insn >> 16))
+	    {
+	    case 0x00: /* BLTZ: bits 010000 00000 */
+	    case 0x01: /* BLTZAL: bits 010000 00001 */
+	    case 0x11: /* BLTZALS: bits 010000 10001 */
+	      if (get_frame_register_signed (frame,
+					     b0s5_reg (insn >> 16)) < 0)
+		pc += micromips_relative_offset16 (insn);
+	      else
+		pc += micromips_pc_insn_size (gdbarch, pc);
+	      break;
+
+	    case 0x02: /* BGEZ: bits 010000 00010 */
+	    case 0x03: /* BGEZAL: bits 010000 00011 */
+	    case 0x13: /* BGEZALS: bits 010000 10011 */
+	      if (get_frame_register_signed (frame,
+					     b0s5_reg (insn >> 16)) >= 0)
+		pc += micromips_relative_offset16 (insn);
+	      else
+		pc += micromips_pc_insn_size (gdbarch, pc);
+	      break;
+
+	    case 0x04: /* BLEZ: bits 010000 00100 */
+	      if (get_frame_register_signed (frame,
+					     b0s5_reg (insn >> 16)) <= 0)
+		pc += micromips_relative_offset16 (insn);
+	      else
+		pc += micromips_pc_insn_size (gdbarch, pc);
+	      break;
+
+	    case 0x05: /* BNEZC: bits 010000 00101 */
+	      if (get_frame_register_signed (frame,
+					     b0s5_reg (insn >> 16)) != 0)
+		pc += micromips_relative_offset16 (insn);
+	      break;
+
+	    case 0x06: /* BGTZ: bits 010000 00110 */
+	      if (get_frame_register_signed (frame,
+					     b0s5_reg (insn >> 16)) > 0)
+		pc += micromips_relative_offset16 (insn);
+	      else
+		pc += micromips_pc_insn_size (gdbarch, pc);
+	      break;
+
+	    case 0x07: /* BEQZC: bits 010000 00111 */
+	      if (get_frame_register_signed (frame,
+					     b0s5_reg (insn >> 16)) == 0)
+		pc += micromips_relative_offset16 (insn);
+	      break;
+
+	    case 0x14: /* BC2F: bits 010000 10100 xxx00 */
+	    case 0x15: /* BC2T: bits 010000 10101 xxx00 */
+	      if (((insn >> 16) & 0x3) == 0x0)
+		/* BC2F, BC2T: don't know how to handle these.  */
+		break;
+	      break;
+
+	    case 0x1a: /* BPOSGE64: bits 010000 11010 */
+	    case 0x1b: /* BPOSGE32: bits 010000 11011 */
+	      {
+		unsigned int pos = (b5s5_op (insn >> 16) & 1) ? 32 : 64;
+		int dspctl = mips_regnum (gdbarch)->dspctl;
+
+		if (dspctl == -1)
+		  /* No way to handle; it'll most likely trap anyway.  */
+		  break;
+
+		if ((get_frame_register_unsigned (frame,
+						  dspctl) & 0x7f) >= pos)
+		  pc += micromips_relative_offset16 (insn);
+		else
+		  pc += micromips_pc_insn_size (gdbarch, pc);
+	      }
+	      break;
+
+	    case 0x1c: /* BC1F: bits 010000 11100 xxx00 */
+		       /* BC1ANY2F: bits 010000 11100 xxx01 */
+	    case 0x1d: /* BC1T: bits 010000 11101 xxx00 */
+		       /* BC1ANY2T: bits 010000 11101 xxx01 */
+	      if (((insn >> 16) & 0x2) == 0x0)
+		pc = micromips_bc1_pc (gdbarch, frame, insn, pc,
+				       ((insn >> 16) & 0x1) + 1);
+	      break;
+
+	    case 0x1e: /* BC1ANY4F: bits 010000 11110 xxx01 */
+	    case 0x1f: /* BC1ANY4T: bits 010000 11111 xxx01 */
+	      if (((insn >> 16) & 0x3) == 0x1)
+		pc = micromips_bc1_pc (gdbarch, frame, insn, pc, 4);
+	      break;
+	    }
+	  break;
+
+	case 0x1d: /* JALS: bits 011101 */
+	case 0x35: /* J: bits 110101 */
+	case 0x3d: /* JAL: bits 111101 */
+	    pc = ((pc | 0x7fffffe) ^ 0x7fffffe) | (b0s26_imm (insn) << 1);
+	  break;
+
+	case 0x25: /* BEQ: bits 100101 */
+	    if (get_frame_register_signed (frame, b0s5_reg (insn >> 16))
+		== get_frame_register_signed (frame, b5s5_reg (insn >> 16)))
+	      pc += micromips_relative_offset16 (insn);
+	    else
+	      pc += micromips_pc_insn_size (gdbarch, pc);
+	  break;
+
+	case 0x2d: /* BNE: bits 101101 */
+	    if (get_frame_register_signed (frame, b0s5_reg (insn >> 16))
+		!= get_frame_register_signed (frame, b5s5_reg (insn >> 16)))
+	      pc += micromips_relative_offset16 (insn);
+	    else
+	      pc += micromips_pc_insn_size (gdbarch, pc);
+	  break;
+
+	case 0x3c: /* JALX: bits 111100 */
+	    pc = ((pc | 0xfffffff) ^ 0xfffffff) | (b0s26_imm (insn) << 2);
+	  break;
+	}
+      break;
+
+    /* 16-bit instructions.  */
+    case MIPS_INSN16_SIZE:
+      switch (micromips_op (insn))
+	{
+	case 0x11: /* POOL16C: bits 010001 */
+	  if ((b5s5_op (insn) & 0x1c) == 0xc)
+	    /* JR16, JRC, JALR16, JALRS16: 010001 011xx */
+	    pc = get_frame_register_signed (frame, b0s5_reg (insn));
+	  else if (b5s5_op (insn) == 0x18)
+	    /* JRADDIUSP: bits 010001 11000 */
+	    pc = get_frame_register_signed (frame, MIPS_RA_REGNUM);
+	  break;
+
+	case 0x23: /* BEQZ16: bits 100011 */
+	  {
+	    int rs = mips_reg3_to_reg[b7s3_reg (insn)];
+
+	    if (get_frame_register_signed (frame, rs) == 0)
+	      pc += micromips_relative_offset7 (insn);
+	    else
+	      pc += micromips_pc_insn_size (gdbarch, pc);
+	  }
+	  break;
+
+	case 0x2b: /* BNEZ16: bits 101011 */
+	  {
+	    int rs = mips_reg3_to_reg[b7s3_reg (insn)];
+
+	    if (get_frame_register_signed (frame, rs) != 0)
+	      pc += micromips_relative_offset7 (insn);
+	    else
+	      pc += micromips_pc_insn_size (gdbarch, pc);
+	  }
+	  break;
+
+	case 0x33: /* B16: bits 110011 */
+	  pc += micromips_relative_offset10 (insn);
+	  break;
+	}
+      break;
+    }
+
+  return pc;
+}
+
+/* Decoding the next place to set a breakpoint is irregular for the
+   mips 16 variant, but fortunately, there fewer instructions.  We have
+   to cope ith extensions for 16 bit instructions and a pair of actual
+   32 bit instructions.  We dont want to set a single step instruction
+   on the extend instruction either.  */
+
+/* Lots of mips16 instruction formats */
+/* Predicting jumps requires itype,ritype,i8type
+   and their extensions      extItype,extritype,extI8type.  */
+enum mips16_inst_fmts
+{
+  itype,			/* 0  immediate 5,10 */
+  ritype,			/* 1   5,3,8 */
+  rrtype,			/* 2   5,3,3,5 */
+  rritype,			/* 3   5,3,3,5 */
+  rrrtype,			/* 4   5,3,3,3,2 */
+  rriatype,			/* 5   5,3,3,1,4 */
+  shifttype,			/* 6   5,3,3,3,2 */
+  i8type,			/* 7   5,3,8 */
+  i8movtype,			/* 8   5,3,3,5 */
+  i8mov32rtype,			/* 9   5,3,5,3 */
+  i64type,			/* 10  5,3,8 */
+  ri64type,			/* 11  5,3,3,5 */
+  jalxtype,			/* 12  5,1,5,5,16 - a 32 bit instruction */
+  exiItype,			/* 13  5,6,5,5,1,1,1,1,1,1,5 */
+  extRitype,			/* 14  5,6,5,5,3,1,1,1,5 */
+  extRRItype,			/* 15  5,5,5,5,3,3,5 */
+  extRRIAtype,			/* 16  5,7,4,5,3,3,1,4 */
+  EXTshifttype,			/* 17  5,5,1,1,1,1,1,1,5,3,3,1,1,1,2 */
+  extI8type,			/* 18  5,6,5,5,3,1,1,1,5 */
   extI64type,			/* 19  5,6,5,5,3,1,1,1,5 */
   extRi64type,			/* 20  5,6,5,5,3,3,5 */
   extshift64type		/* 21  5,5,1,1,1,1,1,1,5,1,1,1,3,5 */
@@ -1399,8 +2048,8 @@ unpack_mips16 (struct gdbarch *gdbarch, CORE_ADDR pc,
 	unsigned int nexthalf;
 	value = ((inst & 0x1f) << 5) | ((inst >> 5) & 0x1f);
 	value = value << 16;
-	nexthalf = mips_fetch_instruction (gdbarch, pc + 2);  /* low bit
-								 still set.  */
+	nexthalf = mips_fetch_instruction (gdbarch, ISA_MIPS16, pc + 2, NULL);
+						/* Low bit still set.  */
 	value |= nexthalf;
 	offset = value;
 	regx = -1;
@@ -1432,7 +2081,6 @@ extended_mips16_next_pc (struct frame_info *frame, CORE_ADDR pc,
     {
     case 2:			/* Branch */
       {
-	CORE_ADDR offset;
 	struct upk_mips16 upk;
 	unpack_mips16 (gdbarch, pc, extension, insn, itype, &upk);
 	pc += (upk.offset << 1) + 2;
@@ -1455,7 +2103,7 @@ extended_mips16_next_pc (struct frame_info *frame, CORE_ADDR pc,
 	struct upk_mips16 upk;
 	int reg;
 	unpack_mips16 (gdbarch, pc, extension, insn, ritype, &upk);
-	reg = get_frame_register_signed (frame, mips16_to_32_reg[upk.regx]);
+	reg = get_frame_register_signed (frame, mips_reg3_to_reg[upk.regx]);
 	if (reg == 0)
 	  pc += (upk.offset << 1) + 2;
 	else
@@ -1467,7 +2115,7 @@ extended_mips16_next_pc (struct frame_info *frame, CORE_ADDR pc,
 	struct upk_mips16 upk;
 	int reg;
 	unpack_mips16 (gdbarch, pc, extension, insn, ritype, &upk);
-	reg = get_frame_register_signed (frame, mips16_to_32_reg[upk.regx]);
+	reg = get_frame_register_signed (frame, mips_reg3_to_reg[upk.regx]);
 	if (reg != 0)
 	  pc += (upk.offset << 1) + 2;
 	else
@@ -1500,7 +2148,7 @@ extended_mips16_next_pc (struct frame_info *frame, CORE_ADDR pc,
 	    upk.regx = (insn >> 8) & 0x07;
 	    upk.regy = (insn >> 5) & 0x07;
 	    if ((upk.regy & 1) == 0)
-	      reg = mips16_to_32_reg[upk.regx];
+	      reg = mips_reg3_to_reg[upk.regx];
 	    else
 	      reg = 31;		/* Function return instruction.  */
 	    pc = get_frame_register_signed (frame, reg);
@@ -1540,12 +2188,16 @@ mips16_next_pc (struct frame_info *frame, CORE_ADDR pc)
    target monitor or stub is not developed enough to do a single_step.
    It works by decoding the current instruction and predicting where a
    branch will go.  This isnt hard because all the data is available.
-   The MIPS32 and MIPS16 variants are quite different.  */
+   The MIPS32, MIPS16 and microMIPS variants are quite different.  */
 static CORE_ADDR
 mips_next_pc (struct frame_info *frame, CORE_ADDR pc)
 {
-  if (mips_pc_is_mips16 (pc))
+  struct gdbarch *gdbarch = get_frame_arch (frame);
+
+  if (mips_pc_is_mips16 (gdbarch, pc))
     return mips16_next_pc (frame, pc);
+  else if (mips_pc_is_micromips (gdbarch, pc))
+    return micromips_next_pc (frame, pc);
   else
     return mips32_next_pc (frame, pc);
 }
@@ -1662,7 +2314,8 @@ mips16_scan_prologue (struct gdbarch *gdbarch,
       prev_inst = inst;
 
       /* Fetch and decode the instruction.  */
-      inst = (unsigned short) mips_fetch_instruction (gdbarch, cur_pc);
+      inst = (unsigned short) mips_fetch_instruction (gdbarch, ISA_MIPS16,
+						      cur_pc, NULL);
 
       /* Normally we ignore extend instructions.  However, if it is
          not followed by a valid prologue instruction, then this
@@ -1693,13 +2346,13 @@ mips16_scan_prologue (struct gdbarch *gdbarch,
       else if ((inst & 0xf800) == 0xd000)	/* sw reg,n($sp) */
 	{
 	  offset = mips16_get_imm (prev_inst, inst, 8, 4, 0);
-	  reg = mips16_to_32_reg[(inst & 0x700) >> 8];
+	  reg = mips_reg3_to_reg[(inst & 0x700) >> 8];
 	  set_reg_offset (gdbarch, this_cache, reg, sp + offset);
 	}
       else if ((inst & 0xff00) == 0xf900)	/* sd reg,n($sp) */
 	{
 	  offset = mips16_get_imm (prev_inst, inst, 5, 8, 0);
-	  reg = mips16_to_32_reg[(inst & 0xe0) >> 5];
+	  reg = mips_reg3_to_reg[(inst & 0xe0) >> 5];
 	  set_reg_offset (gdbarch, this_cache, reg, sp + offset);
 	}
       else if ((inst & 0xff00) == 0x6200)	/* sw $ra,n($sp) */
@@ -1727,13 +2380,13 @@ mips16_scan_prologue (struct gdbarch *gdbarch,
       else if ((inst & 0xFF00) == 0xd900)	/* sw reg,offset($s1) */
 	{
 	  offset = mips16_get_imm (prev_inst, inst, 5, 4, 0);
-	  reg = mips16_to_32_reg[(inst & 0xe0) >> 5];
+	  reg = mips_reg3_to_reg[(inst & 0xe0) >> 5];
 	  set_reg_offset (gdbarch, this_cache, reg, frame_addr + offset);
 	}
       else if ((inst & 0xFF00) == 0x7900)	/* sd reg,offset($s1) */
 	{
 	  offset = mips16_get_imm (prev_inst, inst, 5, 8, 0);
-	  reg = mips16_to_32_reg[(inst & 0xe0) >> 5];
+	  reg = mips_reg3_to_reg[(inst & 0xe0) >> 5];
 	  set_reg_offset (gdbarch, this_cache, reg, frame_addr + offset);
 	}
       else if ((inst & 0xf81f) == 0xe809
@@ -1986,8 +2639,9 @@ static int
 mips_insn16_frame_sniffer (const struct frame_unwind *self,
 			   struct frame_info *this_frame, void **this_cache)
 {
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
   CORE_ADDR pc = get_frame_pc (this_frame);
-  if (mips_pc_is_mips16 (pc))
+  if (mips_pc_is_mips16 (gdbarch, pc))
     return 1;
   return 0;
 }
@@ -1996,35 +2650,468 @@ static const struct frame_unwind mips_insn16_frame_unwind =
 {
   NORMAL_FRAME,
   default_frame_unwind_stop_reason,
-  mips_insn16_frame_this_id,
-  mips_insn16_frame_prev_register,
+  mips_insn16_frame_this_id,
+  mips_insn16_frame_prev_register,
+  NULL,
+  mips_insn16_frame_sniffer
+};
+
+static CORE_ADDR
+mips_insn16_frame_base_address (struct frame_info *this_frame,
+				void **this_cache)
+{
+  struct mips_frame_cache *info = mips_insn16_frame_cache (this_frame,
+							   this_cache);
+  return info->base;
+}
+
+static const struct frame_base mips_insn16_frame_base =
+{
+  &mips_insn16_frame_unwind,
+  mips_insn16_frame_base_address,
+  mips_insn16_frame_base_address,
+  mips_insn16_frame_base_address
+};
+
+static const struct frame_base *
+mips_insn16_frame_base_sniffer (struct frame_info *this_frame)
+{
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
+  CORE_ADDR pc = get_frame_pc (this_frame);
+  if (mips_pc_is_mips16 (gdbarch, pc))
+    return &mips_insn16_frame_base;
+  else
+    return NULL;
+}
+
+/* Decode a 9-bit signed immediate argument of ADDIUSP -- -2 is mapped
+   to -258, -1 -- to -257, 0 -- to 256, 1 -- to 257 and other values are
+   interpreted directly, and then multiplied by 4.  */
+
+static int
+micromips_decode_imm9 (int imm)
+{
+  imm = (imm ^ 0x100) - 0x100;
+  if (imm > -3 && imm < 2)
+    imm ^= 0x100;
+  return imm << 2;
+}
+
+/* Analyze the function prologue from START_PC to LIMIT_PC.  Return
+   the address of the first instruction past the prologue.  */
+
+static CORE_ADDR
+micromips_scan_prologue (struct gdbarch *gdbarch,
+			 CORE_ADDR start_pc, CORE_ADDR limit_pc,
+			 struct frame_info *this_frame,
+			 struct mips_frame_cache *this_cache)
+{
+  CORE_ADDR end_prologue_addr = 0;
+  int prev_non_prologue_insn = 0;
+  int frame_reg = MIPS_SP_REGNUM;
+  int this_non_prologue_insn;
+  int non_prologue_insns = 0;
+  long frame_offset = 0;	/* Size of stack frame.  */
+  long frame_adjust = 0;	/* Offset of FP from SP.  */
+  CORE_ADDR frame_addr = 0;	/* Value of $30, used as frame pointer.  */
+  CORE_ADDR prev_pc;
+  CORE_ADDR cur_pc;
+  ULONGEST insn;		/* current instruction */
+  CORE_ADDR sp;
+  long offset;
+  long sp_adj;
+  long v1_off = 0;		/* The assumption is LUI will replace it.  */
+  int reglist;
+  int breg;
+  int dreg;
+  int sreg;
+  int treg;
+  int loc;
+  int op;
+  int s;
+  int i;
+
+  /* Can be called when there's no process, and hence when there's no
+     THIS_FRAME.  */
+  if (this_frame != NULL)
+    sp = get_frame_register_signed (this_frame,
+				    gdbarch_num_regs (gdbarch)
+				    + MIPS_SP_REGNUM);
+  else
+    sp = 0;
+
+  if (limit_pc > start_pc + 200)
+    limit_pc = start_pc + 200;
+  prev_pc = start_pc;
+
+  /* Permit at most one non-prologue non-control-transfer instruction
+     in the middle which may have been reordered by the compiler for
+     optimisation.  */
+  for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += loc)
+    {
+      this_non_prologue_insn = 0;
+      sp_adj = 0;
+      loc = 0;
+      insn = mips_fetch_instruction (gdbarch, ISA_MICROMIPS, cur_pc, NULL);
+      loc += MIPS_INSN16_SIZE;
+      switch (mips_insn_size (ISA_MICROMIPS, insn))
+	{
+	/* 48-bit instructions.  */
+	case 3 * MIPS_INSN16_SIZE:
+	  /* No prologue instructions in this category.  */
+	  this_non_prologue_insn = 1;
+	  loc += 2 * MIPS_INSN16_SIZE;
+	  break;
+
+	/* 32-bit instructions.  */
+	case 2 * MIPS_INSN16_SIZE:
+	  insn <<= 16;
+	  insn |= mips_fetch_instruction (gdbarch,
+					  ISA_MICROMIPS, cur_pc + loc, NULL);
+	  loc += MIPS_INSN16_SIZE;
+	  switch (micromips_op (insn >> 16))
+	    {
+	    /* Record $sp/$fp adjustment.  */
+	    /* Discard (D)ADDU $gp,$jp used for PIC code.  */
+	    case 0x0: /* POOL32A: bits 000000 */
+	    case 0x16: /* POOL32S: bits 010110 */
+	      op = b0s11_op (insn);
+	      sreg = b0s5_reg (insn >> 16);
+	      treg = b5s5_reg (insn >> 16);
+	      dreg = b11s5_reg (insn);
+	      if (op == 0x1d0
+				/* SUBU: bits 000000 00111010000 */
+				/* DSUBU: bits 010110 00111010000 */
+		  && dreg == MIPS_SP_REGNUM && sreg == MIPS_SP_REGNUM
+		  && treg == 3)
+				/* (D)SUBU $sp, $v1 */
+		    sp_adj = v1_off;
+	      else if (op != 0x150
+				/* ADDU: bits 000000 00101010000 */
+				/* DADDU: bits 010110 00101010000 */
+		       || dreg != 28 || sreg != 28 || treg != MIPS_T9_REGNUM)
+		this_non_prologue_insn = 1;
+	      break;
+
+	    case 0x8: /* POOL32B: bits 001000 */
+	      op = b12s4_op (insn);
+	      breg = b0s5_reg (insn >> 16);
+	      reglist = sreg = b5s5_reg (insn >> 16);
+	      offset = (b0s12_imm (insn) ^ 0x800) - 0x800;
+	      if ((op == 0x9 || op == 0xc)
+				/* SWP: bits 001000 1001 */
+				/* SDP: bits 001000 1100 */
+		  && breg == MIPS_SP_REGNUM && sreg < MIPS_RA_REGNUM)
+				/* S[DW]P reg,offset($sp) */
+		{
+		  s = 4 << ((b12s4_op (insn) & 0x4) == 0x4);
+		  set_reg_offset (gdbarch, this_cache,
+				  sreg, sp + offset);
+		  set_reg_offset (gdbarch, this_cache,
+				  sreg + 1, sp + offset + s);
+		}
+	      else if ((op == 0xd || op == 0xf)
+				/* SWM: bits 001000 1101 */
+				/* SDM: bits 001000 1111 */
+		       && breg == MIPS_SP_REGNUM
+				/* SWM reglist,offset($sp) */
+		       && ((reglist >= 1 && reglist <= 9)
+			   || (reglist >= 16 && reglist <= 25)))
+		{
+		  int sreglist = min(reglist & 0xf, 8);
+
+		  s = 4 << ((b12s4_op (insn) & 0x2) == 0x2);
+		  for (i = 0; i < sreglist; i++)
+		    set_reg_offset (gdbarch, this_cache, 16 + i, sp + s * i);
+		  if ((reglist & 0xf) > 8)
+		    set_reg_offset (gdbarch, this_cache, 30, sp + s * i++);
+		  if ((reglist & 0x10) == 0x10)
+		    set_reg_offset (gdbarch, this_cache,
+				    MIPS_RA_REGNUM, sp + s * i++);
+		}
+	      else
+		this_non_prologue_insn = 1;
+	      break;
+
+	    /* Record $sp/$fp adjustment.  */
+	    /* Discard (D)ADDIU $gp used for PIC code.  */
+	    case 0xc: /* ADDIU: bits 001100 */
+	    case 0x17: /* DADDIU: bits 010111 */
+	      sreg = b0s5_reg (insn >> 16);
+	      dreg = b5s5_reg (insn >> 16);
+	      offset = (b0s16_imm (insn) ^ 0x8000) - 0x8000;
+	      if (sreg == MIPS_SP_REGNUM && dreg == MIPS_SP_REGNUM)
+				/* (D)ADDIU $sp, imm */
+		sp_adj = offset;
+	      else if (sreg == MIPS_SP_REGNUM && dreg == 30)
+				/* (D)ADDIU $fp, $sp, imm */
+		{
+		  frame_addr = sp + offset;
+		  frame_adjust = offset;
+		  frame_reg = 30;
+		}
+	      else if (sreg != 28 || dreg != 28)
+				/* (D)ADDIU $gp, imm */
+		this_non_prologue_insn = 1;
+	      break;
+
+	    /* LUI $v1 is used for larger $sp adjustments.  */
+	    /* Discard LUI $gp is used for PIC code.  */
+	    case 0x10: /* POOL32I: bits 010000 */
+	      if (b5s5_op (insn >> 16) == 0xd
+				/* LUI: bits 010000 001101 */
+		  && b0s5_reg (insn >> 16) == 3)
+				/* LUI $v1, imm */
+		v1_off = ((b0s16_imm (insn) << 16) ^ 0x80000000) - 0x80000000;
+	      else if (b5s5_op (insn >> 16) != 0xd
+				/* LUI: bits 010000 001101 */
+		       || b0s5_reg (insn >> 16) != 28)
+				/* LUI $gp, imm */
+		this_non_prologue_insn = 1;
+	      break;
+
+	    /* ORI $v1 is used for larger $sp adjustments.  */
+	    case 0x14: /* ORI: bits 010100 */
+	      sreg = b0s5_reg (insn >> 16);
+	      dreg = b5s5_reg (insn >> 16);
+	      if (sreg == 3 && dreg == 3)
+				/* ORI $v1, imm */
+		v1_off |= b0s16_imm (insn);
+	      else
+		this_non_prologue_insn = 1;
+	      break;
+
+	    case 0x26: /* SWC1: bits 100110 */
+	    case 0x2e: /* SDC1: bits 101110 */
+	      breg = b0s5_reg (insn >> 16);
+	      if (breg != MIPS_SP_REGNUM)
+				/* S[DW]C1 reg,offset($sp) */
+		this_non_prologue_insn = 1;
+	      break;
+
+	    case 0x36: /* SD: bits 110110 */
+	    case 0x3e: /* SW: bits 111110 */
+	      breg = b0s5_reg (insn >> 16);
+	      sreg = b5s5_reg (insn >> 16);
+	      offset = (b0s16_imm (insn) ^ 0x8000) - 0x8000;
+	      if (breg == MIPS_SP_REGNUM)
+				/* S[DW] reg,offset($sp) */
+		set_reg_offset (gdbarch, this_cache, sreg, sp + offset);
+	      else
+		this_non_prologue_insn = 1;
+	      break;
+
+	    default:
+	      this_non_prologue_insn = 1;
+	      break;
+	    }
+	  break;
+
+	/* 16-bit instructions.  */
+	case MIPS_INSN16_SIZE:
+	  switch (micromips_op (insn))
+	    {
+	    case 0x3: /* MOVE: bits 000011 */
+	      sreg = b0s5_reg (insn);
+	      dreg = b5s5_reg (insn);
+	      if (sreg == MIPS_SP_REGNUM && dreg == 30)
+				/* MOVE  $fp, $sp */
+		{
+		  frame_addr = sp;
+		  frame_reg = 30;
+		}
+	      else if ((sreg & 0x1c) != 0x4)
+				/* MOVE  reg, $a0-$a3 */
+		this_non_prologue_insn = 1;
+	      break;
+
+	    case 0x11: /* POOL16C: bits 010001 */
+	      if (b6s4_op (insn) == 0x5)
+				/* SWM: bits 010001 0101 */
+		{
+		  offset = ((b0s4_imm (insn) << 2) ^ 0x20) - 0x20;
+		  reglist = b4s2_regl (insn);
+		  for (i = 0; i <= reglist; i++)
+		    set_reg_offset (gdbarch, this_cache, 16 + i, sp + 4 * i);
+		  set_reg_offset (gdbarch, this_cache,
+				  MIPS_RA_REGNUM, sp + 4 * i++);
+		}
+	      else
+		this_non_prologue_insn = 1;
+	      break;
+
+	    case 0x13: /* POOL16D: bits 010011 */
+	      if ((insn & 0x1) == 0x1)
+				/* ADDIUSP: bits 010011 1 */
+		sp_adj = micromips_decode_imm9 (b1s9_imm (insn));
+	      else if (b5s5_reg (insn) == MIPS_SP_REGNUM)
+				/* ADDIUS5: bits 010011 0 */
+				/* ADDIUS5 $sp, imm */
+		sp_adj = (b1s4_imm (insn) ^ 8) - 8;
+	      else
+		this_non_prologue_insn = 1;
+	      break;
+
+	    case 0x32: /* SWSP: bits 110010 */
+	      offset = b0s5_imm (insn) << 2;
+	      sreg = b5s5_reg (insn);
+	      set_reg_offset (gdbarch, this_cache, sreg, sp + offset);
+	      break;
+
+	    default:
+	      this_non_prologue_insn = 1;
+	      break;
+	    }
+	  break;
+	}
+      if (sp_adj < 0)
+	frame_offset -= sp_adj;
+
+      non_prologue_insns += this_non_prologue_insn;
+      /* Enough non-prologue insns seen or positive stack adjustment? */
+      if (end_prologue_addr == 0 && (non_prologue_insns > 1 || sp_adj > 0))
+	{
+	  end_prologue_addr = prev_non_prologue_insn ? prev_pc : cur_pc;
+	  break;
+	}
+      prev_non_prologue_insn = this_non_prologue_insn;
+      prev_pc = cur_pc;
+    }
+
+  if (this_cache != NULL)
+    {
+      this_cache->base =
+	(get_frame_register_signed (this_frame,
+				    gdbarch_num_regs (gdbarch) + frame_reg)
+	 + frame_offset - frame_adjust);
+      /* FIXME: brobecker/2004-10-10: Just as in the mips32 case, we should
+	 be able to get rid of the assignment below, evetually. But it's
+	 still needed for now.  */
+      this_cache->saved_regs[gdbarch_num_regs (gdbarch)
+			     + mips_regnum (gdbarch)->pc]
+	= this_cache->saved_regs[gdbarch_num_regs (gdbarch) + MIPS_RA_REGNUM];
+    }
+
+  /* If we didn't reach the end of the prologue when scanning the function
+     instructions, then set end_prologue_addr to the address of the
+     instruction immediately after the last one we scanned.  Unless the
+     last one looked like a non-prologue instruction (and we looked ahead),
+     in which case use its address instead.  */
+  if (end_prologue_addr == 0)
+    end_prologue_addr = prev_non_prologue_insn ? prev_pc : cur_pc;
+
+  return end_prologue_addr;
+}
+
+/* Heuristic unwinder for procedures using microMIPS instructions.
+   Procedures that use the 32-bit instruction set are handled by the
+   mips_insn32 unwinder.  Likewise MIPS16 and the mips_insn16 unwinder. */
+
+static struct mips_frame_cache *
+mips_micro_frame_cache (struct frame_info *this_frame, void **this_cache)
+{
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
+  struct mips_frame_cache *cache;
+
+  if ((*this_cache) != NULL)
+    return (*this_cache);
+
+  cache = FRAME_OBSTACK_ZALLOC (struct mips_frame_cache);
+  (*this_cache) = cache;
+  cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
+
+  /* Analyze the function prologue.  */
+  {
+    const CORE_ADDR pc = get_frame_address_in_block (this_frame);
+    CORE_ADDR start_addr;
+
+    find_pc_partial_function (pc, NULL, &start_addr, NULL);
+    if (start_addr == 0)
+      start_addr = heuristic_proc_start (get_frame_arch (this_frame), pc);
+    /* We can't analyze the prologue if we couldn't find the begining
+       of the function.  */
+    if (start_addr == 0)
+      return cache;
+
+    micromips_scan_prologue (gdbarch, start_addr, pc, this_frame, *this_cache);
+  }
+
+  /* gdbarch_sp_regnum contains the value and not the address.  */
+  trad_frame_set_value (cache->saved_regs,
+			gdbarch_num_regs (gdbarch) + MIPS_SP_REGNUM,
+			cache->base);
+
+  return (*this_cache);
+}
+
+static void
+mips_micro_frame_this_id (struct frame_info *this_frame, void **this_cache,
+			  struct frame_id *this_id)
+{
+  struct mips_frame_cache *info = mips_micro_frame_cache (this_frame,
+							  this_cache);
+  /* This marks the outermost frame.  */
+  if (info->base == 0)
+    return;
+  (*this_id) = frame_id_build (info->base, get_frame_func (this_frame));
+}
+
+static struct value *
+mips_micro_frame_prev_register (struct frame_info *this_frame,
+				void **this_cache, int regnum)
+{
+  struct mips_frame_cache *info = mips_micro_frame_cache (this_frame,
+							  this_cache);
+  return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
+}
+
+static int
+mips_micro_frame_sniffer (const struct frame_unwind *self,
+			  struct frame_info *this_frame, void **this_cache)
+{
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
+  CORE_ADDR pc = get_frame_pc (this_frame);
+
+  if (mips_pc_is_micromips (gdbarch, pc))
+    return 1;
+  return 0;
+}
+
+static const struct frame_unwind mips_micro_frame_unwind =
+{
+  NORMAL_FRAME,
+  default_frame_unwind_stop_reason,
+  mips_micro_frame_this_id,
+  mips_micro_frame_prev_register,
   NULL,
-  mips_insn16_frame_sniffer
+  mips_micro_frame_sniffer
 };
 
 static CORE_ADDR
-mips_insn16_frame_base_address (struct frame_info *this_frame,
-				void **this_cache)
+mips_micro_frame_base_address (struct frame_info *this_frame,
+			       void **this_cache)
 {
-  struct mips_frame_cache *info = mips_insn16_frame_cache (this_frame,
-							   this_cache);
+  struct mips_frame_cache *info = mips_micro_frame_cache (this_frame,
+							  this_cache);
   return info->base;
 }
 
-static const struct frame_base mips_insn16_frame_base =
+static const struct frame_base mips_micro_frame_base =
 {
-  &mips_insn16_frame_unwind,
-  mips_insn16_frame_base_address,
-  mips_insn16_frame_base_address,
-  mips_insn16_frame_base_address
+  &mips_micro_frame_unwind,
+  mips_micro_frame_base_address,
+  mips_micro_frame_base_address,
+  mips_micro_frame_base_address
 };
 
 static const struct frame_base *
-mips_insn16_frame_base_sniffer (struct frame_info *this_frame)
+mips_micro_frame_base_sniffer (struct frame_info *this_frame)
 {
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
   CORE_ADDR pc = get_frame_pc (this_frame);
-  if (mips_pc_is_mips16 (pc))
-    return &mips_insn16_frame_base;
+
+  if (mips_pc_is_micromips (gdbarch, pc))
+    return &mips_micro_frame_base;
   else
     return NULL;
 }
@@ -2093,7 +3180,8 @@ restart:
       int reg;
 
       /* Fetch the instruction.  */
-      inst = (unsigned long) mips_fetch_instruction (gdbarch, cur_pc);
+      inst = (unsigned long) mips_fetch_instruction (gdbarch, ISA_MIPS,
+						     cur_pc, NULL);
 
       /* Save some code by pre-extracting some useful fields.  */
       high_word = (inst >> 16) & 0xffff;
@@ -2196,43 +3284,43 @@ restart:
                || inst == 0x0399e021 /* addu $gp,$gp,$t9 */
                || inst == 0x033ce021 /* addu $gp,$t9,$gp */
               )
-       {
-         /* These instructions are part of the prologue, but we don't
-            need to do anything special to handle them.  */
-       }
+	{
+	  /* These instructions are part of the prologue, but we don't
+	     need to do anything special to handle them.  */
+	}
       /* The instructions below load $at or $t0 with an immediate
          value in preparation for a stack adjustment via
          subu $sp,$sp,[$at,$t0].  These instructions could also
          initialize a local variable, so we accept them only before
          a stack adjustment instruction was seen.  */
       else if (!seen_sp_adjust
-               && (high_word == 0x3c01 /* lui $at,n */
-                   || high_word == 0x3c08 /* lui $t0,n */
-                   || high_word == 0x3421 /* ori $at,$at,n */
-                   || high_word == 0x3508 /* ori $t0,$t0,n */
-                   || high_word == 0x3401 /* ori $at,$zero,n */
-                   || high_word == 0x3408 /* ori $t0,$zero,n */
-                  ))
-       {
-	 if (end_prologue_addr == 0)
-	   load_immediate_bytes += MIPS_INSN32_SIZE;		/* FIXME!  */
-       }
+	       && (high_word == 0x3c01 /* lui $at,n */
+		   || high_word == 0x3c08 /* lui $t0,n */
+		   || high_word == 0x3421 /* ori $at,$at,n */
+		   || high_word == 0x3508 /* ori $t0,$t0,n */
+		   || high_word == 0x3401 /* ori $at,$zero,n */
+		   || high_word == 0x3408 /* ori $t0,$zero,n */
+		  ))
+	{
+	  if (end_prologue_addr == 0)
+	    load_immediate_bytes += MIPS_INSN32_SIZE;		/* FIXME!  */
+	}
       else
-       {
-         /* This instruction is not an instruction typically found
-            in a prologue, so we must have reached the end of the
-            prologue.  */
-         /* FIXME: brobecker/2004-10-10: Can't we just break out of this
-            loop now?  Why would we need to continue scanning the function
-            instructions?  */
-         if (end_prologue_addr == 0)
-           end_prologue_addr = cur_pc;
-
-	 /* Check for branches and jumps.  For now, only jump to
-	    register are caught (i.e. returns).  */
-	 if ((itype_op (inst) & 0x07) == 0 && rtype_funct (inst) == 8)
-	   in_delay_slot = 1;
-       }
+	{
+	  /* This instruction is not an instruction typically found
+	     in a prologue, so we must have reached the end of the
+	     prologue.  */
+	  /* FIXME: brobecker/2004-10-10: Can't we just break out of this
+	     loop now?  Why would we need to continue scanning the function
+	     instructions?  */
+	  if (end_prologue_addr == 0)
+	    end_prologue_addr = cur_pc;
+
+	  /* Check for branches and jumps.  For now, only jump to
+	     register are caught (i.e. returns).  */
+	  if ((itype_op (inst) & 0x07) == 0 && rtype_funct (inst) == 8)
+	    in_delay_slot = 1;
+	}
 
       /* If the previous instruction was a jump, we must have reached
 	 the end of the prologue by now.  Stop scanning so that we do
@@ -2277,7 +3365,7 @@ restart:
 /* Heuristic unwinder for procedures using 32-bit instructions (covers
    both 32-bit and 64-bit MIPS ISAs).  Procedures using 16-bit
    instructions (a.k.a. MIPS16) are handled by the mips_insn16
-   unwinder.  */
+   unwinder.  Likewise microMIPS and the mips_micro unwinder. */
 
 static struct mips_frame_cache *
 mips_insn32_frame_cache (struct frame_info *this_frame, void **this_cache)
@@ -2342,7 +3430,7 @@ mips_insn32_frame_sniffer (const struct frame_unwind *self,
 			   struct frame_info *this_frame, void **this_cache)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
-  if (! mips_pc_is_mips16 (pc))
+  if (mips_pc_is_mips (pc))
     return 1;
   return 0;
 }
@@ -2378,7 +3466,7 @@ static const struct frame_base *
 mips_insn32_frame_base_sniffer (struct frame_info *this_frame)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
-  if (! mips_pc_is_mips16 (pc))
+  if (mips_pc_is_mips (pc))
     return &mips_insn32_frame_base;
   else
     return NULL;
@@ -2515,8 +3603,8 @@ mips_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR addr)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
 
-  if (is_mips16_addr (addr))
-    addr = unmake_mips16_addr (addr);
+  if (is_compact_addr (addr))
+    addr = unmake_compact_addr (addr);
 
   if (mips_mask_address_p (tdep) && (((ULONGEST) addr) >> 32 == 0xffffffffUL))
     /* This hack is a work-around for existing boards using PMON, the
@@ -2539,34 +3627,33 @@ mips_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR addr)
     return addr;
 }
 
-/* Instructions used during single-stepping of atomic sequences.  */
-#define LL_OPCODE 0x30
-#define LLD_OPCODE 0x34
-#define SC_OPCODE 0x38
-#define SCD_OPCODE 0x3c
 
 /* Checks for an atomic sequence of instructions beginning with a LL/LLD
    instruction and ending with a SC/SCD instruction.  If such a sequence
    is found, attempt to step through it.  A breakpoint is placed at the end of 
    the sequence.  */
 
+/* Instructions used during single-stepping of atomic sequences, standard
+   ISA version.  */
+#define LL_OPCODE 0x30
+#define LLD_OPCODE 0x34
+#define SC_OPCODE 0x38
+#define SCD_OPCODE 0x3c
+
 static int
-deal_with_atomic_sequence (struct gdbarch *gdbarch,
-			   struct address_space *aspace, CORE_ADDR pc)
+mips_deal_with_atomic_sequence (struct gdbarch *gdbarch,
+ 				struct address_space *aspace, CORE_ADDR pc)
 {
   CORE_ADDR breaks[2] = {-1, -1};
   CORE_ADDR loc = pc;
   CORE_ADDR branch_bp; /* Breakpoint at branch instruction's destination.  */
-  unsigned long insn;
+  ULONGEST insn;
   int insn_count;
   int index;
   int last_breakpoint = 0; /* Defaults to 0 (no breakpoints placed).  */  
   const int atomic_sequence_length = 16; /* Instruction sequence length.  */
 
-  if (pc & 0x01)
-    return 0;
-
-  insn = mips_fetch_instruction (gdbarch, loc);
+  insn = mips_fetch_instruction (gdbarch, ISA_MIPS, loc, NULL);
   /* Assume all atomic sequences start with a ll/lld instruction.  */
   if (itype_op (insn) != LL_OPCODE && itype_op (insn) != LLD_OPCODE)
     return 0;
@@ -2577,7 +3664,7 @@ deal_with_atomic_sequence (struct gdbarch *gdbarch,
     {
       int is_branch = 0;
       loc += MIPS_INSN32_SIZE;
-      insn = mips_fetch_instruction (gdbarch, loc);
+      insn = mips_fetch_instruction (gdbarch, ISA_MIPS, loc, NULL);
 
       /* Assume that there is at most one branch in the atomic
 	 sequence.  If a branch is found, put a breakpoint in its
@@ -2589,7 +3676,9 @@ deal_with_atomic_sequence (struct gdbarch *gdbarch,
 	    return 0; /* fallback to the standard single-step code.  */
 	  break;
 	case 1: /* REGIMM */
-	  is_branch = ((itype_rt (insn) & 0xc) == 0); /* B{LT,GE}Z* */
+	  is_branch = ((itype_rt (insn) & 0xc) == 0 /* B{LT,GE}Z* */
+		       || ((itype_rt (insn) & 0x1e) == 0
+			   && itype_rs (insn) == 0)); /* BPOSGE* */
 	  break;
 	case 2: /* J */
 	case 3: /* JAL */
@@ -2605,6 +3694,11 @@ deal_with_atomic_sequence (struct gdbarch *gdbarch,
 	  is_branch = 1;
 	  break;
 	case 17: /* COP1 */
+	  is_branch = ((itype_rs (insn) == 9 || itype_rs (insn) == 10)
+		       && (itype_rt (insn) & 0x2) == 0);
+	  if (is_branch) /* BC1ANY2F, BC1ANY2T, BC1ANY4F, BC1ANY4T */
+	    break;
+	/* Fall through.  */
 	case 18: /* COP2 */
 	case 19: /* COP3 */
 	  is_branch = (itype_rs (insn) == 8); /* BCzF, BCzFL, BCzT, BCzTL */
@@ -2645,6 +3739,177 @@ deal_with_atomic_sequence (struct gdbarch *gdbarch,
   return 1;
 }
 
+static int
+micromips_deal_with_atomic_sequence (struct gdbarch *gdbarch,
+				     struct address_space *aspace,
+				     CORE_ADDR pc)
+{
+  const int atomic_sequence_length = 16; /* Instruction sequence length.  */
+  int last_breakpoint = 0; /* Defaults to 0 (no breakpoints placed).  */
+  CORE_ADDR breaks[2] = {-1, -1};
+  CORE_ADDR branch_bp; /* Breakpoint at branch instruction's destination.  */
+  CORE_ADDR loc = pc;
+  int sc_found = 0;
+  ULONGEST insn;
+  int insn_count;
+  int index;
+
+  /* Assume all atomic sequences start with a ll/lld instruction.  */
+  insn = mips_fetch_instruction (gdbarch, ISA_MICROMIPS, loc, NULL);
+  if (micromips_op (insn) != 0x18)	/* POOL32C: bits 011000 */
+    return 0;
+  loc += MIPS_INSN16_SIZE;
+  insn <<= 16;
+  insn |= mips_fetch_instruction (gdbarch, ISA_MICROMIPS, loc, NULL);
+  if ((b12s4_op (insn) & 0xb) != 0x3)	/* LL, LLD: bits 011000 0x11 */
+    return 0;
+  loc += MIPS_INSN16_SIZE;
+
+  /* Assume all atomic sequences end with an sc/scd instruction.  Assume
+     that no atomic sequence is longer than "atomic_sequence_length"
+     instructions.  */
+  for (insn_count = 0;
+       !sc_found && insn_count < atomic_sequence_length;
+       ++insn_count)
+    {
+      int is_branch = 0;
+
+      insn = mips_fetch_instruction (gdbarch, ISA_MICROMIPS, loc, NULL);
+      loc += MIPS_INSN16_SIZE;
+
+      /* Assume that there is at most one conditional branch in the
+         atomic sequence.  If a branch is found, put a breakpoint in
+         its destination address.  */
+      switch (mips_insn_size (ISA_MICROMIPS, insn))
+	{
+	/* 48-bit instructions.  */
+	case 3 * MIPS_INSN16_SIZE: /* POOL48A: bits 011111 */
+	  loc += 2 * MIPS_INSN16_SIZE;
+	  break;
+
+	/* 32-bit instructions.  */
+	case 2 * MIPS_INSN16_SIZE:
+	  switch (micromips_op (insn))
+	    {
+	    case 0x10: /* POOL32I: bits 010000 */
+	      if ((b5s5_op (insn) & 0x18) != 0x0
+				/* BLTZ, BLTZAL, BGEZ, BGEZAL: 010000 000xx */
+				/* BLEZ, BNEZC, BGTZ, BEQZC: 010000 001xx */
+		  && (b5s5_op (insn) & 0x1d) != 0x11
+				/* BLTZALS, BGEZALS: bits 010000 100x1 */
+		  && ((b5s5_op (insn) & 0x1e) != 0x14
+		      || (insn & 0x3) != 0x0)
+				/* BC2F, BC2T: bits 010000 1010x xxx00 */
+		  && (b5s5_op (insn) & 0x1e) != 0x1a
+				/* BPOSGE64, BPOSGE32: bits 010000 1101x */
+		  && ((b5s5_op (insn) & 0x1e) != 0x1c
+		      || (insn & 0x3) != 0x0)
+				/* BC1F, BC1T: bits 010000 1110x xxx00 */
+		  && ((b5s5_op (insn) & 0x1c) != 0x1c
+		      || (insn & 0x3) != 0x1))
+				/* BC1ANY*: bits 010000 111xx xxx01 */
+		break;
+	      /* Fall through.  */
+
+	    case 0x25: /* BEQ: bits 100101 */
+	    case 0x2d: /* BNE: bits 101101 */
+	      insn <<= 16;
+	      insn |= mips_fetch_instruction (gdbarch,
+					      ISA_MICROMIPS, loc, NULL);
+	      branch_bp = (loc + MIPS_INSN16_SIZE
+			   + micromips_relative_offset16 (insn));
+	      is_branch = 1;
+	      break;
+
+	    case 0x00: /* POOL32A: bits 000000 */
+	      insn <<= 16;
+	      insn |= mips_fetch_instruction (gdbarch,
+					      ISA_MICROMIPS, loc, NULL);
+	      if (b0s6_op (insn) != 0x3c
+				/* POOL32Axf: bits 000000 ... 111100 */
+		  || (b6s10_ext (insn) & 0x2bf) != 0x3c)
+				/* JALR, JALR.HB: 000000 000x111100 111100 */
+				/* JALRS, JALRS.HB: 000000 010x111100 111100 */
+		break;
+	      /* Fall through.  */
+
+	    case 0x1d: /* JALS: bits 011101 */
+	    case 0x35: /* J: bits 110101 */
+	    case 0x3d: /* JAL: bits 111101 */
+	    case 0x3c: /* JALX: bits 111100 */
+	      return 0; /* Fall back to the standard single-step code. */
+
+	    case 0x18: /* POOL32C: bits 011000 */
+	      if ((b12s4_op (insn) & 0xb) == 0xb)
+				/* SC, SCD: bits 011000 1x11 */
+		sc_found = 1;
+	      break;
+	    }
+	  loc += MIPS_INSN16_SIZE;
+	  break;
+
+	/* 16-bit instructions.  */
+	case MIPS_INSN16_SIZE:
+	  switch (micromips_op (insn))
+	    {
+	    case 0x23: /* BEQZ16: bits 100011 */
+	    case 0x2b: /* BNEZ16: bits 101011 */
+	      branch_bp = loc + micromips_relative_offset7 (insn);
+	      is_branch = 1;
+	      break;
+
+	    case 0x11: /* POOL16C: bits 010001 */
+	      if ((b5s5_op (insn) & 0x1c) != 0xc
+				/* JR16, JRC, JALR16, JALRS16: 010001 011xx */
+	          && b5s5_op (insn) != 0x18)
+				/* JRADDIUSP: bits 010001 11000 */
+	        break;
+	      return 0; /* Fall back to the standard single-step code. */
+
+	    case 0x33: /* B16: bits 110011 */
+	      return 0; /* Fall back to the standard single-step code. */
+	    }
+	  break;
+	}
+      if (is_branch)
+	{
+	  if (last_breakpoint >= 1)
+	    return 0; /* More than one branch found, fallback to the
+			 standard single-step code.  */
+	  breaks[1] = branch_bp;
+	  last_breakpoint++;
+	}
+    }
+  if (!sc_found)
+    return 0;
+
+  /* Insert a breakpoint right after the end of the atomic sequence.  */
+  breaks[0] = loc;
+
+  /* Check for duplicated breakpoints.  Check also for a breakpoint
+     placed (branch instruction's destination) in the atomic sequence */
+  if (last_breakpoint && pc <= breaks[1] && breaks[1] <= breaks[0])
+    last_breakpoint = 0;
+
+  /* Effectively inserts the breakpoints.  */
+  for (index = 0; index <= last_breakpoint; index++)
+      insert_single_step_breakpoint (gdbarch, aspace, breaks[index]);
+
+  return 1;
+}
+
+static int
+deal_with_atomic_sequence (struct gdbarch *gdbarch,
+			   struct address_space *aspace, CORE_ADDR pc)
+{
+  if (mips_pc_is_mips (pc))
+    return mips_deal_with_atomic_sequence (gdbarch, aspace, pc);
+  else if (mips_pc_is_micromips (gdbarch, pc))
+    return micromips_deal_with_atomic_sequence (gdbarch, aspace, pc);
+  else
+    return 0;
+}
+
 /* mips_software_single_step() is called just before we want to resume
    the inferior, if we want to single-step it but there is no hardware
    or kernel single-step support (MIPS on GNU/Linux for example).  We find
@@ -2673,16 +3938,16 @@ mips_software_single_step (struct frame_info *frame)
 static int
 mips_about_to_return (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
-  if (mips_pc_is_mips16 (pc))
-    /* This mips16 case isn't necessarily reliable.  Sometimes the compiler
-       generates a "jr $ra"; other times it generates code to load
-       the return address from the stack to an accessible register (such
-       as $a3), then a "jr" using that register.  This second case
-       is almost impossible to distinguish from an indirect jump
-       used for switch statements, so we don't even try.  */
-    return mips_fetch_instruction (gdbarch, pc) == 0xe820;	/* jr $ra */
-  else
-    return mips_fetch_instruction (gdbarch, pc) == 0x3e00008;	/* jr $ra */
+  ULONGEST insn;
+  ULONGEST hint;
+
+  /* This used to check for MIPS16, but this piece of code is never
+     called for MIPS16 functions.  And likewise microMIPS ones.  */
+  gdb_assert (mips_pc_is_mips (pc));
+
+  insn = mips_fetch_instruction (gdbarch, ISA_MIPS, pc, NULL);
+  hint = 0x7c0;
+  return (insn & ~hint) == 0x3e00008;			/* jr(.hb) $ra */
 }
 
 
@@ -2708,7 +3973,7 @@ heuristic_proc_start (struct gdbarch *gdbarch, CORE_ADDR pc)
   if (heuristic_fence_post == UINT_MAX || fence < VM_MIN_ADDRESS)
     fence = VM_MIN_ADDRESS;
 
-  instlen = mips_pc_is_mips16 (pc) ? MIPS_INSN16_SIZE : MIPS_INSN32_SIZE;
+  instlen = mips_pc_is_mips (pc) ? MIPS_INSN32_SIZE : MIPS_INSN16_SIZE;
 
   inf = current_inferior ();
 
@@ -2753,7 +4018,7 @@ heuristic-fence-post' command.\n",
 
 	return 0;
       }
-    else if (mips_pc_is_mips16 (start_pc))
+    else if (mips_pc_is_mips16 (gdbarch, start_pc))
       {
 	unsigned short inst;
 
@@ -2765,12 +4030,13 @@ heuristic-fence-post' command.\n",
 	   addiu sp,-n
 	   daddiu sp,-n
 	   extend -n followed by 'addiu sp,+n' or 'daddiu sp,+n'.  */
-	inst = mips_fetch_instruction (gdbarch, start_pc);
+	inst = mips_fetch_instruction (gdbarch, ISA_MIPS16, start_pc, NULL);
 	if ((inst & 0xff80) == 0x6480)		/* save */
 	  {
 	    if (start_pc - instlen >= fence)
 	      {
-		inst = mips_fetch_instruction (gdbarch, start_pc - instlen);
+		inst = mips_fetch_instruction (gdbarch, ISA_MIPS16,
+					       start_pc - instlen, NULL);
 		if ((inst & 0xf800) == 0xf000)	/* extend */
 		  start_pc -= instlen;
 	      }
@@ -2788,6 +4054,67 @@ heuristic-fence-post' command.\n",
 	else
 	  seen_adjsp = 0;
       }
+    else if (mips_pc_is_micromips (gdbarch, start_pc))
+      {
+	ULONGEST insn;
+	int stop = 0;
+	long offset;
+	int dreg;
+	int sreg;
+
+	/* On microMIPS, any one of the following is likely to be the
+	   start of a function:
+	   ADDIUSP -imm
+	   (D)ADDIU $sp, -imm
+	   LUI $gp, imm  */
+	insn = mips_fetch_instruction (gdbarch, ISA_MICROMIPS, pc, NULL);
+	switch (micromips_op (insn))
+	  {
+	  case 0xc: /* ADDIU: bits 001100 */
+	  case 0x17: /* DADDIU: bits 010111 */
+	    sreg = b0s5_reg (insn);
+	    dreg = b5s5_reg (insn);
+	    insn <<= 16;
+	    insn |= mips_fetch_instruction (gdbarch, ISA_MICROMIPS,
+					    pc + MIPS_INSN16_SIZE, NULL);
+	    offset = (b0s16_imm (insn) ^ 0x8000) - 0x8000;
+	    if (sreg == MIPS_SP_REGNUM && dreg == MIPS_SP_REGNUM
+				/* (D)ADDIU $sp, imm */
+		&& offset < 0)
+	      stop = 1;
+	    break;
+
+	  case 0x10: /* POOL32I: bits 010000 */
+	    if (b5s5_op (insn) == 0xd
+				/* LUI: bits 010000 001101 */
+		&& b0s5_reg (insn >> 16) == 28)
+				/* LUI $gp, imm */
+	      stop = 1;
+	    break;
+
+	  case 0x13: /* POOL16D: bits 010011 */
+	    if ((insn & 0x1) == 0x1)
+				/* ADDIUSP: bits 010011 1 */
+	      {
+		offset = micromips_decode_imm9 (b1s9_imm (insn));
+		if (offset < 0)
+				/* ADDIUSP -imm */
+		  stop = 1;
+	      }
+	    else
+				/* ADDIUS5: bits 010011 0 */
+	      {
+		dreg = b5s5_reg (insn);
+		offset = (b1s4_imm (insn) ^ 8) - 8;
+		if (dreg == MIPS_SP_REGNUM && offset < 0)
+				/* ADDIUS5  $sp, -imm */
+		  stop = 1;
+	      }
+	    break;
+	  }
+	if (stop)
+	  break;
+      }
     else if (mips_about_to_return (gdbarch, start_pc))
       {
 	/* Skip return and its delay slot.  */
@@ -2861,6 +4188,45 @@ mips_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
   return align_down (addr, 16);
 }
 
+/* Implement the "push_dummy_code" gdbarch method.  */
+
+static CORE_ADDR
+mips_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp,
+		      CORE_ADDR funaddr, struct value **args,
+		      int nargs, struct type *value_type,
+		      CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
+		      struct regcache *regcache)
+{
+  static gdb_byte nop_insn[] = { 0, 0, 0, 0 };
+  CORE_ADDR nop_addr;
+  CORE_ADDR bp_slot;
+
+  /* Reserve enough room on the stack for our breakpoint instruction.  */
+  bp_slot = sp - sizeof (nop_insn);
+
+  /* Return to microMIPS mode if calling microMIPS code to avoid
+     triggering an address error exception on processors that only
+     support microMIPS execution.  */
+  *bp_addr = (mips_pc_is_micromips (gdbarch, funaddr)
+	      ? make_compact_addr (bp_slot) : bp_slot);
+
+  /* The breakpoint layer automatically adjusts the address of
+     breakpoints inserted in a branch delay slot.  With enough
+     bad luck, the 4 bytes located just before our breakpoint
+     instruction could look like a branch instruction, and thus
+     trigger the adjustement, and break the function call entirely.
+     So, we reserve those 4 bytes and write a nop instruction
+     to prevent that from happening.  */
+  nop_addr = bp_slot - sizeof (nop_insn);
+  write_memory (nop_addr, nop_insn, sizeof (nop_insn));
+  sp = mips_frame_align (gdbarch, nop_addr);
+
+  /* Inferior resumes at the function entry point.  */
+  *real_pc = funaddr;
+
+  return sp;
+}
+
 static CORE_ADDR
 mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
 			   struct regcache *regcache, CORE_ADDR bp_addr,
@@ -2872,7 +4238,6 @@ mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
   int argnum;
   int len = 0;
   int stack_offset = 0;
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   CORE_ADDR func_addr = find_function_addr (function, NULL);
   int regsize = mips_abi_regsize (gdbarch);
@@ -2945,14 +4310,14 @@ mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
 	{
 	  CORE_ADDR addr = extract_signed_integer (value_contents (arg),
 						   len, byte_order);
-	  if (mips_pc_is_mips16 (addr))
+	  if (mips_pc_is_mips (addr))
+	    val = value_contents (arg);
+	  else
 	    {
 	      store_signed_integer (valbuf, len, byte_order, 
-				    make_mips16_addr (addr));
+				    make_compact_addr (addr));
 	      val = valbuf;
 	    }
-	  else
-	    val = value_contents (arg);
 	}
       /* The EABI passes structures that do not fit in a register by
          reference.  */
@@ -3152,7 +4517,7 @@ mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
 /* Determine the return value convention being used.  */
 
 static enum return_value_convention
-mips_eabi_return_value (struct gdbarch *gdbarch, struct type *func_type,
+mips_eabi_return_value (struct gdbarch *gdbarch, struct value *function,
 			struct type *type, struct regcache *regcache,
 			gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -3280,7 +4645,6 @@ mips_n32n64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
   int argnum;
   int len = 0;
   int stack_offset = 0;
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   CORE_ADDR func_addr = find_function_addr (function, NULL);
 
@@ -3542,7 +4906,7 @@ mips_n32n64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
 }
 
 static enum return_value_convention
-mips_n32n64_return_value (struct gdbarch *gdbarch, struct type *func_type,
+mips_n32n64_return_value (struct gdbarch *gdbarch, struct value *function,
 			  struct type *type, struct regcache *regcache,
 			  gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -3582,13 +4946,13 @@ mips_n32n64_return_value (struct gdbarch *gdbarch, struct type *func_type,
       if (mips_debug)
 	fprintf_unfiltered (gdb_stderr, "Return float in $f0 and $f2\n");
       mips_xfer_register (gdbarch, regcache,
-			  gdbarch_num_regs (gdbarch)
-			  + mips_regnum (gdbarch)->fp0,
+			  (gdbarch_num_regs (gdbarch)
+			   + mips_regnum (gdbarch)->fp0),
 			  8, gdbarch_byte_order (gdbarch),
 			  readbuf, writebuf, 0);
       mips_xfer_register (gdbarch, regcache,
-			  gdbarch_num_regs (gdbarch)
-			  + mips_regnum (gdbarch)->fp0 + 2,
+			  (gdbarch_num_regs (gdbarch)
+			   + mips_regnum (gdbarch)->fp0 + 2),
 			  8, gdbarch_byte_order (gdbarch),
 			  readbuf ? readbuf + 8 : readbuf,
 			  writebuf ? writebuf + 8 : writebuf, 0);
@@ -3601,8 +4965,8 @@ mips_n32n64_return_value (struct gdbarch *gdbarch, struct type *func_type,
       if (mips_debug)
 	fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
       mips_xfer_register (gdbarch, regcache,
-			  gdbarch_num_regs (gdbarch)
-			  + mips_regnum (gdbarch)->fp0,
+			  (gdbarch_num_regs (gdbarch)
+			   + mips_regnum (gdbarch)->fp0),
 			  TYPE_LENGTH (type),
 			  gdbarch_byte_order (gdbarch),
 			  readbuf, writebuf, 0);
@@ -3710,6 +5074,20 @@ mips_n32n64_return_value (struct gdbarch *gdbarch, struct type *func_type,
     }
 }
 
+/* Which registers to use for passing floating-point values between
+   function calls, one of floating-point, general and both kinds of
+   registers.  O32 and O64 use different register kinds for standard
+   MIPS and MIPS16 code; to make the handling of cases where we may
+   not know what kind of code is being used (e.g. no debug information)
+   easier we sometimes use both kinds.  */
+
+enum mips_fval_reg
+{
+  mips_fval_fpr,
+  mips_fval_gpr,
+  mips_fval_both
+};
+
 /* O32 ABI stuff.  */
 
 static CORE_ADDR
@@ -3723,7 +5101,6 @@ mips_o32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
   int argnum;
   int len = 0;
   int stack_offset = 0;
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   CORE_ADDR func_addr = find_function_addr (function, NULL);
 
@@ -3800,8 +5177,8 @@ mips_o32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
       /* 32-bit ABIs always start floating point arguments in an
          even-numbered floating point register.  Round the FP register
          up before the check to see if there are any FP registers
-         left.  O32/O64 targets also pass the FP in the integer
-         registers so also round up normal registers.  */
+         left.  O32 targets also pass the FP in the integer registers
+         so also round up normal registers.  */
       if (fp_register_arg_p (gdbarch, typecode, arg_type))
 	{
 	  if ((float_argreg & 1))
@@ -3809,46 +5186,48 @@ mips_o32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
 	}
 
       /* Floating point arguments passed in registers have to be
-         treated specially.  On 32-bit architectures, doubles
-         are passed in register pairs; the even register gets
-         the low word, and the odd register gets the high word.
-         On O32/O64, the first two floating point arguments are
-         also copied to general registers, because MIPS16 functions
-         don't use float registers for arguments.  This duplication of
-         arguments in general registers can't hurt non-MIPS16 functions
-         because those registers are normally skipped.  */
+         treated specially.  On 32-bit architectures, doubles are
+         passed in register pairs; the even FP register gets the
+         low word, and the odd FP register gets the high word.
+         On O32, the first two floating point arguments are also
+         copied to general registers, following their memory order,
+         because MIPS16 functions don't use float registers for
+         arguments.  This duplication of arguments in general
+         registers can't hurt non-MIPS16 functions, because those
+         registers are normally skipped.  */
 
       if (fp_register_arg_p (gdbarch, typecode, arg_type)
 	  && float_argreg <= MIPS_LAST_FP_ARG_REGNUM (gdbarch))
 	{
 	  if (register_size (gdbarch, float_argreg) < 8 && len == 8)
 	    {
-	      int low_offset = gdbarch_byte_order (gdbarch)
-			       == BFD_ENDIAN_BIG ? 4 : 0;
+	      int freg_offset = gdbarch_byte_order (gdbarch)
+				== BFD_ENDIAN_BIG ? 1 : 0;
 	      unsigned long regval;
 
-	      /* Write the low word of the double to the even register(s).  */
-	      regval = extract_unsigned_integer (val + low_offset,
-						 4, byte_order);
+	      /* First word.  */
+	      regval = extract_unsigned_integer (val, 4, byte_order);
 	      if (mips_debug)
 		fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
-				    float_argreg, phex (regval, 4));
+				    float_argreg + freg_offset,
+				    phex (regval, 4));
 	      regcache_cooked_write_unsigned (regcache,
-					      float_argreg++, regval);
+					      float_argreg++ + freg_offset,
+					      regval);
 	      if (mips_debug)
 		fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
 				    argreg, phex (regval, 4));
 	      regcache_cooked_write_unsigned (regcache, argreg++, regval);
 
-	      /* Write the high word of the double to the odd register(s).  */
-	      regval = extract_unsigned_integer (val + 4 - low_offset,
-						 4, byte_order);
+	      /* Second word.  */
+	      regval = extract_unsigned_integer (val + 4, 4, byte_order);
 	      if (mips_debug)
 		fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
-				    float_argreg, phex (regval, 4));
+				    float_argreg - freg_offset,
+				    phex (regval, 4));
 	      regcache_cooked_write_unsigned (regcache,
-					      float_argreg++, regval);
-
+					      float_argreg++ - freg_offset,
+					      regval);
 	      if (mips_debug)
 		fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
 				    argreg, phex (regval, 4));
@@ -4023,12 +5402,16 @@ mips_o32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
 }
 
 static enum return_value_convention
-mips_o32_return_value (struct gdbarch *gdbarch, struct type *func_type,
+mips_o32_return_value (struct gdbarch *gdbarch, struct value *function,
 		       struct type *type, struct regcache *regcache,
 		       gdb_byte *readbuf, const gdb_byte *writebuf)
 {
+  CORE_ADDR func_addr = function ? find_function_addr (function, NULL) : 0;
+  int mips16 = mips_pc_is_mips16 (gdbarch, func_addr);
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  enum mips_fval_reg fval_reg;
 
+  fval_reg = readbuf ? mips16 ? mips_fval_gpr : mips_fval_fpr : mips_fval_both;
   if (TYPE_CODE (type) == TYPE_CODE_STRUCT
       || TYPE_CODE (type) == TYPE_CODE_UNION
       || TYPE_CODE (type) == TYPE_CODE_ARRAY)
@@ -4036,54 +5419,110 @@ mips_o32_return_value (struct gdbarch *gdbarch, struct type *func_type,
   else if (TYPE_CODE (type) == TYPE_CODE_FLT
 	   && TYPE_LENGTH (type) == 4 && tdep->mips_fpu_type != MIPS_FPU_NONE)
     {
-      /* A single-precision floating-point value.  It fits in the
-         least significant part of FP0.  */
+      /* A single-precision floating-point value.  If reading in or copying,
+         then we get it from/put it to FP0 for standard MIPS code or GPR2
+         for MIPS16 code.  If writing out only, then we put it to both FP0
+         and GPR2.  We do not support reading in with no function known, if
+         this safety check ever triggers, then we'll have to try harder.  */
+      gdb_assert (function || !readbuf);
       if (mips_debug)
-	fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
-      mips_xfer_register (gdbarch, regcache,
-			  gdbarch_num_regs (gdbarch)
-			    + mips_regnum (gdbarch)->fp0,
-			  TYPE_LENGTH (type),
-			  gdbarch_byte_order (gdbarch),
-			  readbuf, writebuf, 0);
+	switch (fval_reg)
+	  {
+	  case mips_fval_fpr:
+	    fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
+	    break;
+	  case mips_fval_gpr:
+	    fprintf_unfiltered (gdb_stderr, "Return float in $2\n");
+	    break;
+	  case mips_fval_both:
+	    fprintf_unfiltered (gdb_stderr, "Return float in $fp0 and $2\n");
+	    break;
+	  }
+      if (fval_reg != mips_fval_gpr)
+	mips_xfer_register (gdbarch, regcache,
+			    (gdbarch_num_regs (gdbarch)
+			     + mips_regnum (gdbarch)->fp0),
+			    TYPE_LENGTH (type),
+			    gdbarch_byte_order (gdbarch),
+			    readbuf, writebuf, 0);
+      if (fval_reg != mips_fval_fpr)
+	mips_xfer_register (gdbarch, regcache,
+			    gdbarch_num_regs (gdbarch) + 2,
+			    TYPE_LENGTH (type),
+			    gdbarch_byte_order (gdbarch),
+			    readbuf, writebuf, 0);
       return RETURN_VALUE_REGISTER_CONVENTION;
     }
   else if (TYPE_CODE (type) == TYPE_CODE_FLT
 	   && TYPE_LENGTH (type) == 8 && tdep->mips_fpu_type != MIPS_FPU_NONE)
     {
-      /* A double-precision floating-point value.  The most
-         significant part goes in FP1, and the least significant in
-         FP0.  */
+      /* A double-precision floating-point value.  If reading in or copying,
+         then we get it from/put it to FP1 and FP0 for standard MIPS code or
+         GPR2 and GPR3 for MIPS16 code.  If writing out only, then we put it
+         to both FP1/FP0 and GPR2/GPR3.  We do not support reading in with
+         no function known, if this safety check ever triggers, then we'll
+         have to try harder.  */
+      gdb_assert (function || !readbuf);
       if (mips_debug)
-	fprintf_unfiltered (gdb_stderr, "Return float in $fp1/$fp0\n");
-      switch (gdbarch_byte_order (gdbarch))
+	switch (fval_reg)
+	  {
+	  case mips_fval_fpr:
+	    fprintf_unfiltered (gdb_stderr, "Return float in $fp1/$fp0\n");
+	    break;
+	  case mips_fval_gpr:
+	    fprintf_unfiltered (gdb_stderr, "Return float in $2/$3\n");
+	    break;
+	  case mips_fval_both:
+	    fprintf_unfiltered (gdb_stderr,
+				"Return float in $fp1/$fp0 and $2/$3\n");
+	    break;
+	  }
+      if (fval_reg != mips_fval_gpr)
 	{
-	case BFD_ENDIAN_LITTLE:
-	  mips_xfer_register (gdbarch, regcache,
-			      gdbarch_num_regs (gdbarch)
-				+ mips_regnum (gdbarch)->fp0 +
-			      0, 4, gdbarch_byte_order (gdbarch),
-			      readbuf, writebuf, 0);
-	  mips_xfer_register (gdbarch, regcache,
-			      gdbarch_num_regs (gdbarch)
-				+ mips_regnum (gdbarch)->fp0 + 1,
-			      4, gdbarch_byte_order (gdbarch),
-			      readbuf, writebuf, 4);
-	  break;
-	case BFD_ENDIAN_BIG:
+	  /* The most significant part goes in FP1, and the least significant
+	     in FP0.  */
+	  switch (gdbarch_byte_order (gdbarch))
+	    {
+	    case BFD_ENDIAN_LITTLE:
+	      mips_xfer_register (gdbarch, regcache,
+				  (gdbarch_num_regs (gdbarch)
+				   + mips_regnum (gdbarch)->fp0 + 0),
+				  4, gdbarch_byte_order (gdbarch),
+				  readbuf, writebuf, 0);
+	      mips_xfer_register (gdbarch, regcache,
+				  (gdbarch_num_regs (gdbarch)
+				   + mips_regnum (gdbarch)->fp0 + 1),
+				  4, gdbarch_byte_order (gdbarch),
+				  readbuf, writebuf, 4);
+	      break;
+	    case BFD_ENDIAN_BIG:
+	      mips_xfer_register (gdbarch, regcache,
+				  (gdbarch_num_regs (gdbarch)
+				   + mips_regnum (gdbarch)->fp0 + 1),
+				  4, gdbarch_byte_order (gdbarch),
+				  readbuf, writebuf, 0);
+	      mips_xfer_register (gdbarch, regcache,
+				  (gdbarch_num_regs (gdbarch)
+				   + mips_regnum (gdbarch)->fp0 + 0),
+				  4, gdbarch_byte_order (gdbarch),
+				  readbuf, writebuf, 4);
+	      break;
+	    default:
+	      internal_error (__FILE__, __LINE__, _("bad switch"));
+	    }
+	}
+      if (fval_reg != mips_fval_fpr)
+	{
+	  /* The two 32-bit parts are always placed in GPR2 and GPR3
+	     following these registers' memory order.  */
 	  mips_xfer_register (gdbarch, regcache,
-			      gdbarch_num_regs (gdbarch)
-				+ mips_regnum (gdbarch)->fp0 + 1,
+			      gdbarch_num_regs (gdbarch) + 2,
 			      4, gdbarch_byte_order (gdbarch),
 			      readbuf, writebuf, 0);
 	  mips_xfer_register (gdbarch, regcache,
-			      gdbarch_num_regs (gdbarch)
-				+ mips_regnum (gdbarch)->fp0 + 0,
+			      gdbarch_num_regs (gdbarch) + 3,
 			      4, gdbarch_byte_order (gdbarch),
 			      readbuf, writebuf, 4);
-	  break;
-	default:
-	  internal_error (__FILE__, __LINE__, _("bad switch"));
 	}
       return RETURN_VALUE_REGISTER_CONVENTION;
     }
@@ -4191,7 +5630,6 @@ mips_o64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
   int argnum;
   int len = 0;
   int stack_offset = 0;
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   CORE_ADDR func_addr = find_function_addr (function, NULL);
 
@@ -4270,23 +5708,23 @@ mips_o64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
 	{
 	  CORE_ADDR addr = extract_signed_integer (value_contents (arg),
 						   len, byte_order);
-	  if (mips_pc_is_mips16 (addr))
+	  if (!mips_pc_is_mips (addr))
 	    {
 	      store_signed_integer (valbuf, len, byte_order, 
-				    make_mips16_addr (addr));
+				    make_compact_addr (addr));
 	      val = valbuf;
 	    }
 	}
 
       /* Floating point arguments passed in registers have to be
-         treated specially.  On 32-bit architectures, doubles
-         are passed in register pairs; the even register gets
-         the low word, and the odd register gets the high word.
-         On O32/O64, the first two floating point arguments are
-         also copied to general registers, because MIPS16 functions
-         don't use float registers for arguments.  This duplication of
-         arguments in general registers can't hurt non-MIPS16 functions
-         because those registers are normally skipped.  */
+         treated specially.  On 32-bit architectures, doubles are
+         passed in register pairs; the even FP register gets the
+         low word, and the odd FP register gets the high word.
+         On O64, the first two floating point arguments are also
+         copied to general registers, because MIPS16 functions
+         don't use float registers for arguments.  This duplication
+         of arguments in general registers can't hurt non-MIPS16
+         functions because those registers are normally skipped.  */
 
       if (fp_register_arg_p (gdbarch, typecode, arg_type)
 	  && float_argreg <= MIPS_LAST_FP_ARG_REGNUM (gdbarch))
@@ -4431,28 +5869,54 @@ mips_o64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
 }
 
 static enum return_value_convention
-mips_o64_return_value (struct gdbarch *gdbarch, struct type *func_type,
+mips_o64_return_value (struct gdbarch *gdbarch, struct value *function,
 		       struct type *type, struct regcache *regcache,
 		       gdb_byte *readbuf, const gdb_byte *writebuf)
 {
+  CORE_ADDR func_addr = function ? find_function_addr (function, NULL) : 0;
+  int mips16 = mips_pc_is_mips16 (gdbarch, func_addr);
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  enum mips_fval_reg fval_reg;
 
+  fval_reg = readbuf ? mips16 ? mips_fval_gpr : mips_fval_fpr : mips_fval_both;
   if (TYPE_CODE (type) == TYPE_CODE_STRUCT
       || TYPE_CODE (type) == TYPE_CODE_UNION
       || TYPE_CODE (type) == TYPE_CODE_ARRAY)
     return RETURN_VALUE_STRUCT_CONVENTION;
   else if (fp_register_arg_p (gdbarch, TYPE_CODE (type), type))
     {
-      /* A floating-point value.  It fits in the least significant
-         part of FP0.  */
+      /* A floating-point value.  If reading in or copying, then we get it
+         from/put it to FP0 for standard MIPS code or GPR2 for MIPS16 code.
+         If writing out only, then we put it to both FP0 and GPR2.  We do
+         not support reading in with no function known, if this safety
+         check ever triggers, then we'll have to try harder.  */
+      gdb_assert (function || !readbuf);
       if (mips_debug)
-	fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
-      mips_xfer_register (gdbarch, regcache,
-			  gdbarch_num_regs (gdbarch)
-			    + mips_regnum (gdbarch)->fp0,
-			  TYPE_LENGTH (type),
-			  gdbarch_byte_order (gdbarch),
-			  readbuf, writebuf, 0);
+	switch (fval_reg)
+	  {
+	  case mips_fval_fpr:
+	    fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
+	    break;
+	  case mips_fval_gpr:
+	    fprintf_unfiltered (gdb_stderr, "Return float in $2\n");
+	    break;
+	  case mips_fval_both:
+	    fprintf_unfiltered (gdb_stderr, "Return float in $fp0 and $2\n");
+	    break;
+	  }
+      if (fval_reg != mips_fval_gpr)
+	mips_xfer_register (gdbarch, regcache,
+			    (gdbarch_num_regs (gdbarch)
+			     + mips_regnum (gdbarch)->fp0),
+			    TYPE_LENGTH (type),
+			    gdbarch_byte_order (gdbarch),
+			    readbuf, writebuf, 0);
+      if (fval_reg != mips_fval_fpr)
+	mips_xfer_register (gdbarch, regcache,
+			    gdbarch_num_regs (gdbarch) + 2,
+			    TYPE_LENGTH (type),
+			    gdbarch_byte_order (gdbarch),
+			    readbuf, writebuf, 0);
       return RETURN_VALUE_REGISTER_CONVENTION;
     }
   else
@@ -4674,11 +6138,10 @@ mips_print_register (struct ui_file *file, struct frame_info *frame,
 		     int regnum)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
-  int offset;
   struct value_print_options opts;
   struct value *val;
 
-  if (TYPE_CODE (register_type (gdbarch, regnum)) == TYPE_CODE_FLT)
+  if (mips_float_register_p (gdbarch, regnum))
     {
       mips_print_fp_register (file, frame, regnum);
       return;
@@ -4747,8 +6210,7 @@ print_gp_register_row (struct ui_file *file, struct frame_info *frame,
     {
       if (*gdbarch_register_name (gdbarch, regnum) == '\0')
 	continue;		/* unused register */
-      if (TYPE_CODE (register_type (gdbarch, regnum)) ==
-	  TYPE_CODE_FLT)
+      if (mips_float_register_p (gdbarch, regnum))
 	break;			/* End the row: reached FP register.  */
       /* Large registers are handled separately.  */
       if (register_size (gdbarch, regnum) > mips_abi_regsize (gdbarch))
@@ -4787,8 +6249,7 @@ print_gp_register_row (struct ui_file *file, struct frame_info *frame,
     {
       if (*gdbarch_register_name (gdbarch, regnum) == '\0')
 	continue;		/* unused register */
-      if (TYPE_CODE (register_type (gdbarch, regnum)) ==
-	  TYPE_CODE_FLT)
+      if (mips_float_register_p (gdbarch, regnum))
 	break;			/* End row: reached FP register.  */
       if (register_size (gdbarch, regnum) > mips_abi_regsize (gdbarch))
 	break;			/* End row: large register.  */
@@ -4843,8 +6304,7 @@ mips_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
       while (regnum < gdbarch_num_regs (gdbarch)
 		      + gdbarch_num_pseudo_regs (gdbarch))
 	{
-	  if (TYPE_CODE (register_type (gdbarch, regnum)) ==
-	      TYPE_CODE_FLT)
+	  if (mips_float_register_p (gdbarch, regnum))
 	    {
 	      if (all)		/* True for "INFO ALL-REGISTERS" command.  */
 		regnum = print_fp_register_row (file, frame, regnum);
@@ -4857,42 +6317,32 @@ mips_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
     }
 }
 
-/* Is this a branch with a delay slot?  */
-
-static int
-is_delayed (unsigned long insn)
-{
-  int i;
-  for (i = 0; i < NUMOPCODES; ++i)
-    if (mips_opcodes[i].pinfo != INSN_MACRO
-	&& (insn & mips_opcodes[i].mask) == mips_opcodes[i].match)
-      break;
-  return (i < NUMOPCODES
-	  && (mips_opcodes[i].pinfo & (INSN_UNCOND_BRANCH_DELAY
-				       | INSN_COND_BRANCH_DELAY
-				       | INSN_COND_BRANCH_LIKELY)));
-}
-
 static int
 mips_single_step_through_delay (struct gdbarch *gdbarch,
 				struct frame_info *frame)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   CORE_ADDR pc = get_frame_pc (frame);
-  gdb_byte buf[MIPS_INSN32_SIZE];
-
-  /* There is no branch delay slot on MIPS16.  */
-  if (mips_pc_is_mips16 (pc))
-    return 0;
-
-  if (!breakpoint_here_p (get_frame_address_space (frame), pc + 4))
+  struct address_space *aspace;
+  enum mips_isa isa;
+  ULONGEST insn;
+  int status;
+  int size;
+
+  if ((mips_pc_is_mips (pc)
+       && !mips32_instruction_has_delay_slot (gdbarch, pc))
+      || (mips_pc_is_micromips (gdbarch, pc)
+	  && !micromips_instruction_has_delay_slot (gdbarch, pc, 0))
+      || (mips_pc_is_mips16 (gdbarch, pc)
+	  && !mips16_instruction_has_delay_slot (gdbarch, pc, 0)))
     return 0;
 
-  if (!safe_frame_unwind_memory (frame, pc, buf, sizeof buf))
-    /* If error reading memory, guess that it is not a delayed
-       branch.  */
-    return 0;
-  return is_delayed (extract_unsigned_integer (buf, sizeof buf, byte_order));
+  isa = mips_pc_isa (gdbarch, pc);
+  /* _has_delay_slot above will have validated the read.  */
+  insn = mips_fetch_instruction (gdbarch, isa, pc, NULL);
+  size = mips_insn_size (isa, insn);
+  aspace = get_frame_address_space (frame);
+  return breakpoint_here_p (aspace, pc + size) != no_breakpoint_here;
 }
 
 /* To skip prologues, I use this predicate.  Returns either PC itself
@@ -4931,8 +6381,10 @@ mips_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
   if (limit_pc == 0)
     limit_pc = pc + 100;          /* Magic.  */
 
-  if (mips_pc_is_mips16 (pc))
+  if (mips_pc_is_mips16 (gdbarch, pc))
     return mips16_scan_prologue (gdbarch, pc, limit_pc, NULL, NULL);
+  else if (mips_pc_is_micromips (gdbarch, pc))
+    return micromips_scan_prologue (gdbarch, pc, limit_pc, NULL, NULL);
   else
     return mips32_scan_prologue (gdbarch, pc, limit_pc, NULL, NULL);
 }
@@ -4959,7 +6411,7 @@ mips32_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
 	  unsigned long high_word;
 	  unsigned long inst;
 
-	  inst = mips_fetch_instruction (gdbarch, pc);
+	  inst = mips_fetch_instruction (gdbarch, ISA_MIPS, pc, NULL);
 	  high_word = (inst >> 16) & 0xffff;
 
 	  if (high_word != 0x27bd	/* addiu $sp,$sp,offset */
@@ -4975,6 +6427,107 @@ mips32_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
   return 0;
 }
 
+/* Check whether the PC is in a function epilogue (microMIPS version).
+   This is a helper function for mips_in_function_epilogue_p.  */
+
+static int
+micromips_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
+{
+  CORE_ADDR func_addr = 0;
+  CORE_ADDR func_end = 0;
+  CORE_ADDR addr;
+  ULONGEST insn;
+  long offset;
+  int dreg;
+  int sreg;
+  int loc;
+
+  if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end))
+    return 0;
+
+  /* The microMIPS epilogue is max. 12 bytes long.  */
+  addr = func_end - 12;
+
+  if (addr < func_addr + 2)
+    addr = func_addr + 2;
+  if (pc < addr)
+    return 0;
+
+  for (; pc < func_end; pc += loc)
+    {
+      loc = 0;
+      insn = mips_fetch_instruction (gdbarch, ISA_MICROMIPS, pc, NULL);
+      loc += MIPS_INSN16_SIZE;
+      switch (mips_insn_size (ISA_MICROMIPS, insn))
+	{
+	/* 48-bit instructions.  */
+	case 3 * MIPS_INSN16_SIZE:
+	  /* No epilogue instructions in this category.  */
+	  return 0;
+
+	/* 32-bit instructions.  */
+	case 2 * MIPS_INSN16_SIZE:
+	  insn <<= 16;
+	  insn |= mips_fetch_instruction (gdbarch,
+					  ISA_MICROMIPS, pc + loc, NULL);
+	  loc += MIPS_INSN16_SIZE;
+	  switch (micromips_op (insn >> 16))
+	    {
+	    case 0xc: /* ADDIU: bits 001100 */
+	    case 0x17: /* DADDIU: bits 010111 */
+	      sreg = b0s5_reg (insn >> 16);
+	      dreg = b5s5_reg (insn >> 16);
+	      offset = (b0s16_imm (insn) ^ 0x8000) - 0x8000;
+	      if (sreg == MIPS_SP_REGNUM && dreg == MIPS_SP_REGNUM
+			    /* (D)ADDIU $sp, imm */
+		  && offset >= 0)
+		break;
+	      return 0;
+
+	    default:
+	      return 0;
+	    }
+	  break;
+
+	/* 16-bit instructions.  */
+	case MIPS_INSN16_SIZE:
+	  switch (micromips_op (insn))
+	    {
+	    case 0x3: /* MOVE: bits 000011 */
+	      sreg = b0s5_reg (insn);
+	      dreg = b5s5_reg (insn);
+	      if (sreg == 0 && dreg == 0)
+				/* MOVE $zero, $zero aka NOP */
+		break;
+	      return 0;
+
+	    case 0x11: /* POOL16C: bits 010001 */
+	      if (b5s5_op (insn) == 0x18
+				/* JRADDIUSP: bits 010011 11000 */
+		  || (b5s5_op (insn) == 0xd
+				/* JRC: bits 010011 01101 */
+		      && b0s5_reg (insn) == MIPS_RA_REGNUM))
+				/* JRC $ra */
+		break;
+	      return 0;
+
+	    case 0x13: /* POOL16D: bits 010011 */
+	      offset = micromips_decode_imm9 (b1s9_imm (insn));
+	      if ((insn & 0x1) == 0x1
+				/* ADDIUSP: bits 010011 1 */
+		  && offset > 0)
+		break;
+	      return 0;
+
+	    default:
+	      return 0;
+	    }
+	}
+    }
+
+  return 1;
+}
+
 /* Check whether the PC is in a function epilogue (16-bit version).
    This is a helper function for mips_in_function_epilogue_p.  */
 static int
@@ -4996,7 +6549,7 @@ mips16_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
 	{
 	  unsigned short inst;
 
-	  inst = mips_fetch_instruction (gdbarch, pc);
+	  inst = mips_fetch_instruction (gdbarch, ISA_MIPS16, pc, NULL);
 
 	  if ((inst & 0xf800) == 0xf000)	/* extend */
 	    continue;
@@ -5020,8 +6573,10 @@ mips16_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
 static int
 mips_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
-  if (mips_pc_is_mips16 (pc))
+  if (mips_pc_is_mips16 (gdbarch, pc))
     return mips16_in_function_epilogue_p (gdbarch, pc);
+  else if (mips_pc_is_micromips (gdbarch, pc))
+    return micromips_in_function_epilogue_p (gdbarch, pc);
   else
     return mips32_in_function_epilogue_p (gdbarch, pc);
 }
@@ -5170,15 +6725,20 @@ reinit_frame_cache_sfunc (char *args, int from_tty,
 static int
 gdb_print_insn_mips (bfd_vma memaddr, struct disassemble_info *info)
 {
+  struct gdbarch *gdbarch = info->application_data;
+
   /* FIXME: cagney/2003-06-26: Is this even necessary?  The
      disassembler needs to be able to locally determine the ISA, and
      not rely on GDB.  Otherwize the stand-alone 'objdump -d' will not
      work.  */
-  if (mips_pc_is_mips16 (memaddr))
+  if (mips_pc_is_mips16 (gdbarch, memaddr))
     info->mach = bfd_mach_mips16;
+  else if (mips_pc_is_micromips (gdbarch, memaddr))
+    info->mach = bfd_mach_mips_micromips;
 
   /* Round down the instruction address to the appropriate boundary.  */
-  memaddr &= (info->mach == bfd_mach_mips16 ? ~1 : ~3);
+  memaddr &= (info->mach == bfd_mach_mips16
+	      || info->mach == bfd_mach_mips_micromips) ? ~1 : ~3;
 
   /* Set the disassembler options.  */
   if (!info->disassembler_options)
@@ -5229,15 +6789,33 @@ static const gdb_byte *
 mips_breakpoint_from_pc (struct gdbarch *gdbarch,
 			 CORE_ADDR *pcptr, int *lenptr)
 {
+  CORE_ADDR pc = *pcptr;
+
   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
     {
-      if (mips_pc_is_mips16 (*pcptr))
+      if (mips_pc_is_mips16 (gdbarch, pc))
 	{
 	  static gdb_byte mips16_big_breakpoint[] = { 0xe8, 0xa5 };
-	  *pcptr = unmake_mips16_addr (*pcptr);
+	  *pcptr = unmake_compact_addr (pc);
 	  *lenptr = sizeof (mips16_big_breakpoint);
 	  return mips16_big_breakpoint;
 	}
+      else if (mips_pc_is_micromips (gdbarch, pc))
+	{
+	  static gdb_byte micromips16_big_breakpoint[] = { 0x46, 0x85 };
+	  static gdb_byte micromips32_big_breakpoint[] = { 0, 0x5, 0, 0x7 };
+	  ULONGEST insn;
+	  int status;
+	  int size;
+
+	  insn = mips_fetch_instruction (gdbarch, ISA_MICROMIPS, pc, &status);
+	  size = status ? 2
+			: mips_insn_size (ISA_MICROMIPS, insn) == 2 ? 2 : 4;
+	  *pcptr = unmake_compact_addr (pc);
+	  *lenptr = size;
+	  return (size == 2) ? micromips16_big_breakpoint
+			     : micromips32_big_breakpoint;
+	}
       else
 	{
 	  /* The IDT board uses an unusual breakpoint value, and
@@ -5266,13 +6844,29 @@ mips_breakpoint_from_pc (struct gdbarch *gdbarch,
     }
   else
     {
-      if (mips_pc_is_mips16 (*pcptr))
+      if (mips_pc_is_mips16 (gdbarch, pc))
 	{
 	  static gdb_byte mips16_little_breakpoint[] = { 0xa5, 0xe8 };
-	  *pcptr = unmake_mips16_addr (*pcptr);
+	  *pcptr = unmake_compact_addr (pc);
 	  *lenptr = sizeof (mips16_little_breakpoint);
 	  return mips16_little_breakpoint;
 	}
+      else if (mips_pc_is_micromips (gdbarch, pc))
+	{
+	  static gdb_byte micromips16_little_breakpoint[] = { 0x85, 0x46 };
+	  static gdb_byte micromips32_little_breakpoint[] = { 0x5, 0, 0x7, 0 };
+	  ULONGEST insn;
+	  int status;
+	  int size;
+
+	  insn = mips_fetch_instruction (gdbarch, ISA_MICROMIPS, pc, &status);
+	  size = status ? 2
+			: mips_insn_size (ISA_MICROMIPS, insn) == 2 ? 2 : 4;
+	  *pcptr = unmake_compact_addr (pc);
+	  *lenptr = size;
+	  return (size == 2) ? micromips16_little_breakpoint
+			     : micromips32_little_breakpoint;
+	}
       else
 	{
 	  static gdb_byte little_breakpoint[] = { 0xd, 0, 0x5, 0 };
@@ -5293,104 +6887,684 @@ mips_breakpoint_from_pc (struct gdbarch *gdbarch,
     }
 }
 
-/* If PC is in a mips16 call or return stub, return the address of the target
-   PC, which is either the callee or the caller.  There are several
+/* Determine the remote breakpoint kind suitable for the PC.  The following
+   kinds are used:
+
+   * 2 -- 16-bit MIPS16 mode breakpoint,
+
+   * 3 -- 16-bit microMIPS mode breakpoint,
+
+   * 4 -- 32-bit standard MIPS mode breakpoint,
+
+   * 5 -- 32-bit microMIPS mode breakpoint.  */
+
+static void
+mips_remote_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr,
+				int *kindptr)
+{
+  CORE_ADDR pc = *pcptr;
+
+  if (mips_pc_is_mips16 (gdbarch, pc))
+    {
+      *pcptr = unmake_compact_addr (pc);
+      *kindptr = 2;
+    }
+  else if (mips_pc_is_micromips (gdbarch, pc))
+    {
+      ULONGEST insn;
+      int status;
+      int size;
+
+      insn = mips_fetch_instruction (gdbarch, ISA_MICROMIPS, pc, &status);
+      size = status ? 2 : mips_insn_size (ISA_MICROMIPS, insn) == 2 ? 2 : 4;
+      *pcptr = unmake_compact_addr (pc);
+      *kindptr = size | 1;
+    }
+  else
+    *kindptr = 4;
+}
+
+/* Return non-zero if the ADDR instruction has a branch delay slot
+   (i.e. it is a jump or branch instruction).  This function is based
+   on mips32_next_pc.  */
+
+static int
+mips32_instruction_has_delay_slot (struct gdbarch *gdbarch, CORE_ADDR addr)
+{
+  unsigned long inst;
+  int status;
+  int op;
+  int rs;
+  int rt;
+
+  inst = mips_fetch_instruction (gdbarch, ISA_MIPS, addr, &status);
+  if (status)
+    return 0;
+
+  op = itype_op (inst);
+  if ((inst & 0xe0000000) != 0)
+    {
+      rs = itype_rs (inst);
+      rt = itype_rt (inst);
+      return (op >> 2 == 5	/* BEQL, BNEL, BLEZL, BGTZL: bits 0101xx  */
+	      || op == 29	/* JALX: bits 011101  */
+	      || (op == 17
+		  && (rs == 8
+				/* BC1F, BC1FL, BC1T, BC1TL: 010001 01000  */
+		      || (rs == 9 && (rt & 0x2) == 0)
+				/* BC1ANY2F, BC1ANY2T: bits 010001 01001  */
+		      || (rs == 10 && (rt & 0x2) == 0))));
+				/* BC1ANY4F, BC1ANY4T: bits 010001 01010  */
+    }
+  else
+    switch (op & 0x07)		/* extract bits 28,27,26  */
+      {
+      case 0:			/* SPECIAL  */
+	op = rtype_funct (inst);
+	return (op == 8		/* JR  */
+		|| op == 9);	/* JALR  */
+	break;			/* end SPECIAL  */
+      case 1:			/* REGIMM  */
+	rs = itype_rs (inst);
+	rt = itype_rt (inst);	/* branch condition  */
+	return ((rt & 0xc) == 0
+				/* BLTZ, BLTZL, BGEZ, BGEZL: bits 000xx  */
+				/* BLTZAL, BLTZALL, BGEZAL, BGEZALL: 100xx  */
+		|| ((rt & 0x1e) == 0x1c && rs == 0));
+				/* BPOSGE32, BPOSGE64: bits 1110x  */
+	break;			/* end REGIMM  */
+      default:			/* J, JAL, BEQ, BNE, BLEZ, BGTZ  */
+	return 1;
+	break;
+      }
+}
+
+/* Return non-zero if the ADDR instruction, which must be a 32-bit
+   instruction if MUSTBE32 is set or can be any instruction otherwise,
+   has a branch delay slot (i.e. it is a non-compact jump instruction).  */
+
+static int
+micromips_instruction_has_delay_slot (struct gdbarch *gdbarch,
+				      CORE_ADDR addr, int mustbe32)
+{
+  ULONGEST insn;
+  int status;
+
+  insn = mips_fetch_instruction (gdbarch, ISA_MICROMIPS, addr, &status);
+  if (status)
+    return 0;
+
+  if (!mustbe32)		/* 16-bit instructions.  */
+    return (micromips_op (insn) == 0x11
+				/* POOL16C: bits 010001 */
+	    && (b5s5_op (insn) == 0xc
+				/* JR16: bits 010001 01100 */
+		|| (b5s5_op (insn) & 0x1e) == 0xe))
+				/* JALR16, JALRS16: bits 010001 0111x */
+	   || (micromips_op (insn) & 0x37) == 0x23
+				/* BEQZ16, BNEZ16: bits 10x011 */
+	   || micromips_op (insn) == 0x33;
+				/* B16: bits 110011 */
+
+				/* 32-bit instructions.  */
+  if (micromips_op (insn) == 0x0)
+				/* POOL32A: bits 000000 */
+    {
+      insn <<= 16;
+      insn |= mips_fetch_instruction (gdbarch, ISA_MICROMIPS, addr, &status);
+      if (status)
+	return 0;
+      return b0s6_op (insn) == 0x3c
+				/* POOL32Axf: bits 000000 ... 111100 */
+	     && (b6s10_ext (insn) & 0x2bf) == 0x3c;
+				/* JALR, JALR.HB: 000000 000x111100 111100 */
+				/* JALRS, JALRS.HB: 000000 010x111100 111100 */
+    }
+
+  return (micromips_op (insn) == 0x10
+				/* POOL32I: bits 010000 */
+	  && ((b5s5_op (insn) & 0x1c) == 0x0
+				/* BLTZ, BLTZAL, BGEZ, BGEZAL: 010000 000xx */
+	      || (b5s5_op (insn) & 0x1d) == 0x4
+				/* BLEZ, BGTZ: bits 010000 001x0 */
+	      || (b5s5_op (insn) & 0x1d) == 0x11
+				/* BLTZALS, BGEZALS: bits 010000 100x1 */
+	      || ((b5s5_op (insn) & 0x1e) == 0x14
+		  && (insn & 0x3) == 0x0)
+				/* BC2F, BC2T: bits 010000 1010x xxx00 */
+	      || (b5s5_op (insn) & 0x1e) == 0x1a
+				/* BPOSGE64, BPOSGE32: bits 010000 1101x */
+	      || ((b5s5_op (insn) & 0x1e) == 0x1c
+		  && (insn & 0x3) == 0x0)
+				/* BC1F, BC1T: bits 010000 1110x xxx00 */
+	      || ((b5s5_op (insn) & 0x1c) == 0x1c
+		  && (insn & 0x3) == 0x1)))
+				/* BC1ANY*: bits 010000 111xx xxx01 */
+	 || (micromips_op (insn) & 0x1f) == 0x1d
+				/* JALS, JAL: bits x11101 */
+	 || (micromips_op (insn) & 0x37) == 0x25
+				/* BEQ, BNE: bits 10x101 */
+	 || micromips_op (insn) == 0x35
+				/* J: bits 110101 */
+	 || micromips_op (insn) == 0x3c;
+				/* JALX: bits 111100 */
+}
+
+static int
+mips16_instruction_has_delay_slot (struct gdbarch *gdbarch, CORE_ADDR addr,
+				   int mustbe32)
+{
+  unsigned short inst;
+  int status;
+
+  inst = mips_fetch_instruction (gdbarch, ISA_MIPS16, addr, &status);
+  if (status)
+    return 0;
+
+  if (!mustbe32)
+    return (inst & 0xf89f) == 0xe800;	/* JR/JALR (16-bit instruction)  */
+  return (inst & 0xf800) == 0x1800;	/* JAL/JALX (32-bit instruction)  */
+}
+
+/* Calculate the starting address of the MIPS memory segment BPADDR is in.
+   This assumes KSSEG exists.  */
+
+static CORE_ADDR
+mips_segment_boundary (CORE_ADDR bpaddr)
+{
+  CORE_ADDR mask = CORE_ADDR_MAX;
+  int segsize;
+
+  if (sizeof (CORE_ADDR) == 8)
+    /* Get the topmost two bits of bpaddr in a 32-bit safe manner (avoid
+       a compiler warning produced where CORE_ADDR is a 32-bit type even
+       though in that case this is dead code).  */
+    switch (bpaddr >> ((sizeof (CORE_ADDR) << 3) - 2) & 3)
+      {
+      case 3:
+	if (bpaddr == (bfd_signed_vma) (int32_t) bpaddr)
+	  segsize = 29;			/* 32-bit compatibility segment  */
+	else
+	  segsize = 62;			/* xkseg  */
+	break;
+      case 2:				/* xkphys  */
+	segsize = 59;
+	break;
+      default:				/* xksseg (1), xkuseg/kuseg (0)  */
+	segsize = 62;
+	break;
+      }
+  else if (bpaddr & 0x80000000)		/* kernel segment  */
+    segsize = 29;
+  else
+    segsize = 31;			/* user segment  */
+  mask <<= segsize;
+  return bpaddr & mask;
+}
+
+/* Move the breakpoint at BPADDR out of any branch delay slot by shifting
+   it backwards if necessary.  Return the address of the new location.  */
+
+static CORE_ADDR
+mips_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
+{
+  CORE_ADDR prev_addr;
+  CORE_ADDR boundary;
+  CORE_ADDR func_addr;
+
+  /* If a breakpoint is set on the instruction in a branch delay slot,
+     GDB gets confused.  When the breakpoint is hit, the PC isn't on
+     the instruction in the branch delay slot, the PC will point to
+     the branch instruction.  Since the PC doesn't match any known
+     breakpoints, GDB reports a trap exception.
+
+     There are two possible fixes for this problem.
+
+     1) When the breakpoint gets hit, see if the BD bit is set in the
+     Cause register (which indicates the last exception occurred in a
+     branch delay slot).  If the BD bit is set, fix the PC to point to
+     the instruction in the branch delay slot.
+
+     2) When the user sets the breakpoint, don't allow him to set the
+     breakpoint on the instruction in the branch delay slot.  Instead
+     move the breakpoint to the branch instruction (which will have
+     the same result).
+
+     The problem with the first solution is that if the user then
+     single-steps the processor, the branch instruction will get
+     skipped (since GDB thinks the PC is on the instruction in the
+     branch delay slot).
+
+     So, we'll use the second solution.  To do this we need to know if
+     the instruction we're trying to set the breakpoint on is in the
+     branch delay slot.  */
+
+  boundary = mips_segment_boundary (bpaddr);
+
+  /* Make sure we don't scan back before the beginning of the current
+     function, since we may fetch constant data or insns that look like
+     a jump.  Of course we might do that anyway if the compiler has
+     moved constants inline. :-(  */
+  if (find_pc_partial_function (bpaddr, NULL, &func_addr, NULL)
+      && func_addr > boundary && func_addr <= bpaddr)
+    boundary = func_addr;
+
+  if (mips_pc_is_mips (bpaddr))
+    {
+      if (bpaddr == boundary)
+	return bpaddr;
+
+      /* If the previous instruction has a branch delay slot, we have
+         to move the breakpoint to the branch instruction. */
+      prev_addr = bpaddr - 4;
+      if (mips32_instruction_has_delay_slot (gdbarch, prev_addr))
+	bpaddr = prev_addr;
+    }
+  else
+    {
+      int (*instruction_has_delay_slot) (struct gdbarch *, CORE_ADDR, int);
+      CORE_ADDR addr, jmpaddr;
+      int i;
+
+      boundary = unmake_compact_addr (boundary);
+
+      /* The only MIPS16 instructions with delay slots are JAL, JALX,
+         JALR and JR.  An absolute JAL/JALX is always 4 bytes long,
+         so try for that first, then try the 2 byte JALR/JR.
+         The microMIPS ASE has a whole range of jumps and branches
+         with delay slots, some of which take 4 bytes and some take
+         2 bytes, so the idea is the same.
+         FIXME: We have to assume that bpaddr is not the second half
+         of an extended instruction.  */
+      instruction_has_delay_slot = (mips_pc_is_micromips (gdbarch, bpaddr)
+				     ? micromips_instruction_has_delay_slot
+				     : mips16_instruction_has_delay_slot);
+
+      jmpaddr = 0;
+      addr = bpaddr;
+      for (i = 1; i < 4; i++)
+	{
+	  if (unmake_compact_addr (addr) == boundary)
+	    break;
+	  addr -= MIPS_INSN16_SIZE;
+	  if (i == 1 && instruction_has_delay_slot (gdbarch, addr, 0))
+	    /* Looks like a JR/JALR at [target-1], but it could be
+	       the second word of a previous JAL/JALX, so record it
+	       and check back one more.  */
+	    jmpaddr = addr;
+	  else if (i > 1 && instruction_has_delay_slot (gdbarch, addr, 1))
+	    {
+	      if (i == 2)
+		/* Looks like a JAL/JALX at [target-2], but it could also
+		   be the second word of a previous JAL/JALX, record it,
+		   and check back one more.  */
+		jmpaddr = addr;
+	      else
+		/* Looks like a JAL/JALX at [target-3], so any previously
+		   recorded JAL/JALX or JR/JALR must be wrong, because:
+
+		   >-3: JAL
+		    -2: JAL-ext (can't be JAL/JALX)
+		    -1: bdslot (can't be JR/JALR)
+		     0: target insn
+
+		   Of course it could be another JAL-ext which looks
+		   like a JAL, but in that case we'd have broken out
+		   of this loop at [target-2]:
+
+		    -4: JAL
+		   >-3: JAL-ext
+		    -2: bdslot (can't be jmp)
+		    -1: JR/JALR
+		     0: target insn  */
+		jmpaddr = 0;
+	    }
+	  else
+	    {
+	      /* Not a jump instruction: if we're at [target-1] this
+	         could be the second word of a JAL/JALX, so continue;
+	         otherwise we're done.  */
+	      if (i > 1)
+		break;
+	    }
+	}
+
+      if (jmpaddr)
+	bpaddr = jmpaddr;
+    }
+
+  return bpaddr;
+}
+
+/* Return non-zero if SUFFIX is one of the numeric suffixes used for MIPS16
+   call stubs, one of 1, 2, 5, 6, 9, 10, or, if ZERO is non-zero, also 0.  */
+
+static int
+mips_is_stub_suffix (const char *suffix, int zero)
+{
+  switch (suffix[0])
+   {
+   case '0':
+     return zero && suffix[1] == '\0';
+   case '1':
+     return suffix[1] == '\0' || (suffix[1] == '0' && suffix[2] == '\0');
+   case '2':
+   case '5':
+   case '6':
+   case '9':
+     return suffix[1] == '\0';
+   default:
+     return 0;
+   }
+}
+
+/* Return non-zero if MODE is one of the mode infixes used for MIPS16
+   call stubs, one of sf, df, sc, or dc.  */
+
+static int
+mips_is_stub_mode (const char *mode)
+{
+  return ((mode[0] == 's' || mode[0] == 'd')
+	  && (mode[1] == 'f' || mode[1] == 'c'));
+}
+
+/* Code at PC is a compiler-generated stub.  Such a stub for a function
+   bar might have a name like __fn_stub_bar, and might look like this:
+
+      mfc1    $4, $f13
+      mfc1    $5, $f12
+      mfc1    $6, $f15
+      mfc1    $7, $f14
+
+   followed by (or interspersed with):
+
+      j       bar
+
+   or:
+
+      lui     $25, %hi(bar)
+      addiu   $25, $25, %lo(bar)
+      jr      $25
+
+   ($1 may be used in old code; for robustness we accept any register)
+   or, in PIC code:
+
+      lui     $28, %hi(_gp_disp)
+      addiu   $28, $28, %lo(_gp_disp)
+      addu    $28, $28, $25
+      lw      $25, %got(bar)
+      addiu   $25, $25, %lo(bar)
+      jr      $25
+
+   In the case of a __call_stub_bar stub, the sequence to set up
+   arguments might look like this:
+
+      mtc1    $4, $f13
+      mtc1    $5, $f12
+      mtc1    $6, $f15
+      mtc1    $7, $f14
+
+   followed by (or interspersed with) one of the jump sequences above.
+
+   In the case of a __call_stub_fp_bar stub, JAL or JALR is used instead
+   of J or JR, respectively, followed by:
+
+      mfc1    $2, $f0
+      mfc1    $3, $f1
+      jr      $18
+
+   We are at the beginning of the stub here, and scan down and extract
+   the target address from the jump immediate instruction or, if a jump
+   register instruction is used, from the register referred.  Return
+   the value of PC calculated or 0 if inconclusive.
+
+   The limit on the search is arbitrarily set to 20 instructions.  FIXME.  */
+
+static CORE_ADDR
+mips_get_mips16_fn_stub_pc (struct frame_info *frame, CORE_ADDR pc)
+{
+  struct gdbarch *gdbarch = get_frame_arch (frame);
+  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+  int addrreg = MIPS_ZERO_REGNUM;
+  CORE_ADDR start_pc = pc;
+  CORE_ADDR target_pc = 0;
+  CORE_ADDR addr = 0;
+  CORE_ADDR gp = 0;
+  int status = 0;
+  int i;
+
+  for (i = 0;
+       status == 0 && target_pc == 0 && i < 20;
+       i++, pc += MIPS_INSN32_SIZE)
+    {
+      ULONGEST inst = mips_fetch_instruction (gdbarch, ISA_MIPS, pc, NULL);
+      CORE_ADDR imm;
+      int rt;
+      int rs;
+      int rd;
+
+      switch (itype_op (inst))
+	{
+	case 0:		/* SPECIAL */
+	  switch (rtype_funct (inst))
+	    {
+	    case 8:		/* JR */
+	    case 9:		/* JALR */
+	      rs = rtype_rs (inst);
+	      if (rs == MIPS_GP_REGNUM)
+		target_pc = gp;				/* Hmm...  */
+	      else if (rs == addrreg)
+		target_pc = addr;
+	      break;
+
+	    case 0x21:		/* ADDU */
+	      rt = rtype_rt (inst);
+	      rs = rtype_rs (inst);
+	      rd = rtype_rd (inst);
+	      if (rd == MIPS_GP_REGNUM
+		  && ((rs == MIPS_GP_REGNUM && rt == MIPS_T9_REGNUM)
+		      || (rs == MIPS_T9_REGNUM && rt == MIPS_GP_REGNUM)))
+		gp += start_pc;
+	      break;
+	    }
+	  break;
+
+	case 2:		/* J */
+	case 3:		/* JAL */
+	  target_pc = jtype_target (inst) << 2;
+	  target_pc += ((pc + 4) & ~(CORE_ADDR) 0x0fffffff);
+	  break;
+
+	case 9:		/* ADDIU */
+	  rt = itype_rt (inst);
+	  rs = itype_rs (inst);
+	  if (rt == rs)
+	    {
+	      imm = (itype_immediate (inst) ^ 0x8000) - 0x8000;
+	      if (rt == MIPS_GP_REGNUM)
+		gp += imm;
+	      else if (rt == addrreg)
+		addr += imm;
+	    }
+	  break;
+
+	case 0xf:	/* LUI */
+	  rt = itype_rt (inst);
+	  imm = ((itype_immediate (inst) ^ 0x8000) - 0x8000) << 16;
+	  if (rt == MIPS_GP_REGNUM)
+	    gp = imm;
+	  else if (rt != MIPS_ZERO_REGNUM)
+	    {
+	      addrreg = rt;
+	      addr = imm;
+	    }
+	  break;
+
+	case 0x23:	/* LW */
+	  rt = itype_rt (inst);
+	  rs = itype_rs (inst);
+	  imm = (itype_immediate (inst) ^ 0x8000) - 0x8000;
+	  if (gp != 0 && rs == MIPS_GP_REGNUM)
+	    {
+	      gdb_byte buf[4];
+
+	      memset (buf, 0, sizeof (buf));
+	      status = target_read_memory (gp + imm, buf, sizeof (buf));
+	      addrreg = rt;
+	      addr = extract_signed_integer (buf, sizeof (buf), byte_order);
+	    }
+	  break;
+	}
+    }
+
+  return target_pc;
+}
+
+/* If PC is in a MIPS16 call or return stub, return the address of the
+   target PC, which is either the callee or the caller.  There are several
    cases which must be handled:
 
-   * If the PC is in __mips16_ret_{d,s}f, this is a return stub and the
-   target PC is in $31 ($ra).
+   * If the PC is in __mips16_ret_{d,s}{f,c}, this is a return stub
+     and the target PC is in $31 ($ra).
    * If the PC is in __mips16_call_stub_{1..10}, this is a call stub
-   and the target PC is in $2.
-   * If the PC at the start of __mips16_call_stub_{s,d}f_{0..10}, i.e.
-   before the jal instruction, this is effectively a call stub
-   and the target PC is in $2.  Otherwise this is effectively
-   a return stub and the target PC is in $18.
-
-   See the source code for the stubs in gcc/config/mips/mips16.S for
+     and the target PC is in $2.
+   * If the PC at the start of __mips16_call_stub_{s,d}{f,c}_{0..10},
+     i.e. before the JALR instruction, this is effectively a call stub
+     and the target PC is in $2.  Otherwise this is effectively
+     a return stub and the target PC is in $18.
+   * If the PC is at the start of __call_stub_fp_*, i.e. before the
+     JAL or JALR instruction, this is effectively a call stub and the
+     target PC is buried in the instruction stream.  Otherwise this
+     is effectively a return stub and the target PC is in $18.
+   * If the PC is in __call_stub_* or in __fn_stub_*, this is a call
+     stub and the target PC is buried in the instruction stream.
+
+   See the source code for the stubs in gcc/config/mips/mips16.S, or the
+   stub builder in gcc/config/mips/mips.c (mips16_build_call_stub) for the
    gory details.  */
 
 static CORE_ADDR
 mips_skip_mips16_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
-  char *name;
   CORE_ADDR start_addr;
+  const char *name;
+  size_t prefixlen;
 
   /* Find the starting address and name of the function containing the PC.  */
   if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
     return 0;
 
-  /* If the PC is in __mips16_ret_{d,s}f, this is a return stub and the
-     target PC is in $31 ($ra).  */
-  if (strcmp (name, "__mips16_ret_sf") == 0
-      || strcmp (name, "__mips16_ret_df") == 0)
-    return get_frame_register_signed (frame, MIPS_RA_REGNUM);
-
-  if (strncmp (name, "__mips16_call_stub_", 19) == 0)
+  /* If the PC is in __mips16_ret_{d,s}{f,c}, this is a return stub
+     and the target PC is in $31 ($ra).  */
+  prefixlen = strlen (mips_str_mips16_ret_stub);
+  if (strncmp (name, mips_str_mips16_ret_stub, prefixlen) == 0
+      && mips_is_stub_mode (name + prefixlen)
+      && name[prefixlen + 2] == '\0')
+    return get_frame_register_signed
+	     (frame, gdbarch_num_regs (gdbarch) + MIPS_RA_REGNUM);
+
+  /* If the PC is in __mips16_call_stub_*, this is one of the call
+     call/return stubs.  */
+  prefixlen = strlen (mips_str_mips16_call_stub);
+  if (strncmp (name, mips_str_mips16_call_stub, prefixlen) == 0)
     {
       /* If the PC is in __mips16_call_stub_{1..10}, this is a call stub
          and the target PC is in $2.  */
-      if (name[19] >= '0' && name[19] <= '9')
-	return get_frame_register_signed (frame, 2);
+      if (mips_is_stub_suffix (name + prefixlen, 0))
+	return get_frame_register_signed
+		 (frame, gdbarch_num_regs (gdbarch) + MIPS_V0_REGNUM);
 
-      /* If the PC at the start of __mips16_call_stub_{s,d}f_{0..10}, i.e.
-         before the jal instruction, this is effectively a call stub
+      /* If the PC at the start of __mips16_call_stub_{s,d}{f,c}_{0..10},
+         i.e. before the JALR instruction, this is effectively a call stub
          and the target PC is in $2.  Otherwise this is effectively
          a return stub and the target PC is in $18.  */
-      else if (name[19] == 's' || name[19] == 'd')
+      else if (mips_is_stub_mode (name + prefixlen)
+	       && name[prefixlen + 2] == '_'
+	       && mips_is_stub_suffix (name + prefixlen + 3, 0))
 	{
 	  if (pc == start_addr)
-	    {
-	      /* Check if the target of the stub is a compiler-generated
-	         stub.  Such a stub for a function bar might have a name
-	         like __fn_stub_bar, and might look like this:
-	         mfc1    $4,$f13
-	         mfc1    $5,$f12
-	         mfc1    $6,$f15
-	         mfc1    $7,$f14
-	         la      $1,bar   (becomes a lui/addiu pair)
-	         jr      $1
-	         So scan down to the lui/addi and extract the target
-	         address from those two instructions.  */
-
-	      CORE_ADDR target_pc = get_frame_register_signed (frame, 2);
-	      int i;
-
-	      /* See if the name of the target function is  __fn_stub_*.  */
-	      if (find_pc_partial_function (target_pc, &name, NULL, NULL) ==
-		  0)
-		return target_pc;
-	      if (strncmp (name, "__fn_stub_", 10) != 0
-		  && strcmp (name, "etext") != 0
-		  && strcmp (name, "_etext") != 0)
-		return target_pc;
-
-	      /* Scan through this _fn_stub_ code for the lui/addiu pair.
-	         The limit on the search is arbitrarily set to 20
-	         instructions.  FIXME.  */
-	      for (i = 0, pc = 0; i < 20; i++, target_pc += MIPS_INSN32_SIZE)
-		{
-		  ULONGEST inst = mips_fetch_instruction (gdbarch, target_pc);
-		  CORE_ADDR addr = inst;
-
-		  if ((inst & 0xffff0000) == 0x3c010000)	/* lui $at */
-		    pc = (((addr & 0xffff) ^ 0x8000) - 0x8000) << 16;
-								/* high word */
-		  else if ((inst & 0xffff0000) == 0x24210000)	/* addiu $at */
-		    return pc + ((addr & 0xffff) ^ 0x8000) - 0x8000;
-								/* low word */
-		}
-
-	      /* Couldn't find the lui/addui pair, so return stub address.  */
-	      return target_pc;
-	    }
+	    /* This is the 'call' part of a call stub.  The return
+	       address is in $2.  */
+	    return get_frame_register_signed
+		     (frame, gdbarch_num_regs (gdbarch) + MIPS_V0_REGNUM);
 	  else
 	    /* This is the 'return' part of a call stub.  The return
-	       address is in $r18.  */
-	    return get_frame_register_signed (frame, 18);
+	       address is in $18.  */
+	    return get_frame_register_signed
+		     (frame, gdbarch_num_regs (gdbarch) + MIPS_S2_REGNUM);
 	}
+      else
+	return 0;		/* Not a stub.  */
+    }
+
+  /* If the PC is in __call_stub_* or __fn_stub*, this is one of the
+     compiler-generated call or call/return stubs.  */
+  if (strncmp (name, mips_str_fn_stub, strlen (mips_str_fn_stub)) == 0
+      || strncmp (name, mips_str_call_stub, strlen (mips_str_call_stub)) == 0)
+    {
+      if (pc == start_addr)
+	/* This is the 'call' part of a call stub.  Call this helper
+	   to scan through this code for interesting instructions
+	   and determine the final PC.  */
+	return mips_get_mips16_fn_stub_pc (frame, pc);
+      else
+	/* This is the 'return' part of a call stub.  The return address
+	   is in $18.  */
+	return get_frame_register_signed
+		 (frame, gdbarch_num_regs (gdbarch) + MIPS_S2_REGNUM);
     }
-  return 0;			/* not a stub */
+
+  return 0;			/* Not a stub.  */
+}
+
+/* Return non-zero if the PC is inside a return thunk (aka stub or trampoline).
+   This implements the IN_SOLIB_RETURN_TRAMPOLINE macro.  */
+
+static int
+mips_in_return_stub (struct gdbarch *gdbarch, CORE_ADDR pc, const char *name)
+{
+  CORE_ADDR start_addr;
+  size_t prefixlen;
+
+  /* Find the starting address of the function containing the PC.  */
+  if (find_pc_partial_function (pc, NULL, &start_addr, NULL) == 0)
+    return 0;
+
+  /* If the PC is in __mips16_call_stub_{s,d}{f,c}_{0..10} but not at
+     the start, i.e. after the JALR instruction, this is effectively
+     a return stub.  */
+  prefixlen = strlen (mips_str_mips16_call_stub);
+  if (pc != start_addr
+      && strncmp (name, mips_str_mips16_call_stub, prefixlen) == 0
+      && mips_is_stub_mode (name + prefixlen)
+      && name[prefixlen + 2] == '_'
+      && mips_is_stub_suffix (name + prefixlen + 3, 1))
+    return 1;
+
+  /* If the PC is in __call_stub_fp_* but not at the start, i.e. after
+     the JAL or JALR instruction, this is effectively a return stub.  */
+  prefixlen = strlen (mips_str_call_fp_stub);
+  if (pc != start_addr
+      && strncmp (name, mips_str_call_fp_stub, prefixlen) == 0)
+    return 1;
+
+  /* Consume the .pic. prefix of any PIC stub, this function must return
+     true when the PC is in a PIC stub of a __mips16_ret_{d,s}{f,c} stub
+     or the call stub path will trigger in handle_inferior_event causing
+     it to go astray.  */
+  prefixlen = strlen (mips_str_pic);
+  if (strncmp (name, mips_str_pic, prefixlen) == 0)
+    name += prefixlen;
+
+  /* If the PC is in __mips16_ret_{d,s}{f,c}, this is a return stub.  */
+  prefixlen = strlen (mips_str_mips16_ret_stub);
+  if (strncmp (name, mips_str_mips16_ret_stub, prefixlen) == 0
+      && mips_is_stub_mode (name + prefixlen)
+      && name[prefixlen + 2] == '\0')
+    return 1;
+
+  return 0;			/* Not a stub.  */
 }
 
 /* If the current PC is the start of a non-PIC-to-PIC stub, return the
@@ -5442,8 +7616,8 @@ mips_skip_pic_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
 	  && (stub_words[1] & 0xfc000000U) == 0x08000000
 	  && (stub_words[2] & 0xffff0000U) == 0x27390000
 	  && stub_words[3] == 0x00000000)
-	return (((stub_words[0] & 0x0000ffff) << 16)
-		+ (stub_words[2] & 0x0000ffff));
+	return ((((stub_words[0] & 0x0000ffff) << 16)
+		 + (stub_words[2] & 0x0000ffff)) ^ 0x8000) - 0x8000;
     }
 
   /* Not a recognized stub.  */
@@ -5453,21 +7627,41 @@ mips_skip_pic_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
 static CORE_ADDR
 mips_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
 {
+  CORE_ADDR requested_pc = pc;
   CORE_ADDR target_pc;
+  CORE_ADDR new_pc;
 
-  target_pc = mips_skip_mips16_trampoline_code (frame, pc);
-  if (target_pc)
-    return target_pc;
+  do
+    {
+      target_pc = pc;
 
-  target_pc = find_solib_trampoline_target (frame, pc);
-  if (target_pc)
-    return target_pc;
+      new_pc = mips_skip_mips16_trampoline_code (frame, pc);
+      if (new_pc)
+	{
+	  pc = new_pc;
+	  if (is_compact_addr (pc))
+	    pc = unmake_compact_addr (pc);
+	}
 
-  target_pc = mips_skip_pic_trampoline_code (frame, pc);
-  if (target_pc)
-    return target_pc;
+      new_pc = find_solib_trampoline_target (frame, pc);
+      if (new_pc)
+	{
+	  pc = new_pc;
+	  if (is_compact_addr (pc))
+	    pc = unmake_compact_addr (pc);
+	}
 
-  return 0;
+      new_pc = mips_skip_pic_trampoline_code (frame, pc);
+      if (new_pc)
+	{
+	  pc = new_pc;
+	  if (is_compact_addr (pc))
+	    pc = unmake_compact_addr (pc);
+	}
+    }
+  while (pc != target_pc);
+
+  return pc != requested_pc ? pc : 0;
 }
 
 /* Convert a dbx stab register number (from `r' declaration) to a GDB
@@ -5485,6 +7679,8 @@ mips_stab_reg_to_regnum (struct gdbarch *gdbarch, int num)
     regnum = mips_regnum (gdbarch)->hi;
   else if (num == 71)
     regnum = mips_regnum (gdbarch)->lo;
+  else if (mips_regnum (gdbarch)->dspacc != -1 && num >= 72 && num < 78)
+    regnum = num + mips_regnum (gdbarch)->dspacc - 72;
   else
     /* This will hopefully (eventually) provoke a warning.  Should
        we be calling complaint() here?  */
@@ -5508,6 +7704,8 @@ mips_dwarf_dwarf2_ecoff_reg_to_regnum (struct gdbarch *gdbarch, int num)
     regnum = mips_regnum (gdbarch)->hi;
   else if (num == 65)
     regnum = mips_regnum (gdbarch)->lo;
+  else if (mips_regnum (gdbarch)->dspacc != -1 && num >= 66 && num < 72)
+    regnum = num + mips_regnum (gdbarch)->dspacc - 66;
   else
     /* This will hopefully (eventually) provoke a warning.  Should we
        be calling complaint() here?  */
@@ -5612,6 +7810,23 @@ global_mips_abi (void)
   internal_error (__FILE__, __LINE__, _("unknown ABI string"));
 }
 
+/* Return the default compressed instruction set, either of MIPS16
+   or microMIPS, selected when none could have been determined from
+   the ELF header of the binary being executed (or no binary has been
+   selected.  */
+
+static enum mips_isa
+global_mips_compression (void)
+{
+  int i;
+
+  for (i = 0; mips_compression_strings[i] != NULL; i++)
+    if (mips_compression_strings[i] == mips_compression_string)
+      return (enum mips_isa) i;
+
+  internal_error (__FILE__, __LINE__, _("unknown compressed ISA string"));
+}
+
 static void
 mips_register_g_packet_guesses (struct gdbarch *gdbarch)
 {
@@ -5647,6 +7862,64 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   enum mips_fpu_type fpu_type;
   struct tdesc_arch_data *tdesc_data = NULL;
   int elf_fpu_type = 0;
+  const char **reg_names;
+  struct mips_regnum mips_regnum, *regnum;
+  enum mips_isa mips_isa;
+  int dspacc;
+  int dspctl;
+
+  /* Fill in the OS dependent register numbers and names.  */
+  if (info.osabi == GDB_OSABI_IRIX)
+    {
+      mips_regnum.fp0 = 32;
+      mips_regnum.pc = 64;
+      mips_regnum.cause = 65;
+      mips_regnum.badvaddr = 66;
+      mips_regnum.hi = 67;
+      mips_regnum.lo = 68;
+      mips_regnum.fp_control_status = 69;
+      mips_regnum.fp_implementation_revision = 70;
+      mips_regnum.dspacc = dspacc = -1;
+      mips_regnum.dspctl = dspctl = -1;
+      num_regs = 71;
+      reg_names = mips_irix_reg_names;
+    }
+  else if (info.osabi == GDB_OSABI_LINUX)
+    {
+      mips_regnum.fp0 = 38;
+      mips_regnum.pc = 37;
+      mips_regnum.cause = 36;
+      mips_regnum.badvaddr = 35;
+      mips_regnum.hi = 34;
+      mips_regnum.lo = 33;
+      mips_regnum.fp_control_status = 70;
+      mips_regnum.fp_implementation_revision = 71;
+      mips_regnum.dspacc = -1;
+      mips_regnum.dspctl = -1;
+      dspacc = 72;
+      dspctl = 78;
+      num_regs = 79;
+      reg_names = mips_linux_reg_names;
+    }
+  else
+    {
+      mips_regnum.lo = MIPS_EMBED_LO_REGNUM;
+      mips_regnum.hi = MIPS_EMBED_HI_REGNUM;
+      mips_regnum.badvaddr = MIPS_EMBED_BADVADDR_REGNUM;
+      mips_regnum.cause = MIPS_EMBED_CAUSE_REGNUM;
+      mips_regnum.pc = MIPS_EMBED_PC_REGNUM;
+      mips_regnum.fp0 = MIPS_EMBED_FP0_REGNUM;
+      mips_regnum.fp_control_status = 70;
+      mips_regnum.fp_implementation_revision = 71;
+      mips_regnum.dspacc = dspacc = -1;
+      mips_regnum.dspctl = dspctl = -1;
+      num_regs = MIPS_LAST_EMBED_REGNUM + 1;
+      if (info.bfd_arch_info != NULL
+          && info.bfd_arch_info->mach == bfd_mach_mips3900)
+        reg_names = mips_tx39_reg_names;
+      else
+        reg_names = mips_generic_reg_names;
+    }
 
   /* Check any target description for validity.  */
   if (tdesc_has_registers (info.target_desc))
@@ -5681,11 +7954,11 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
 
       valid_p &= tdesc_numbered_register (feature, tdesc_data,
-					  MIPS_EMBED_LO_REGNUM, "lo");
+					  mips_regnum.lo, "lo");
       valid_p &= tdesc_numbered_register (feature, tdesc_data,
-					  MIPS_EMBED_HI_REGNUM, "hi");
+					  mips_regnum.hi, "hi");
       valid_p &= tdesc_numbered_register (feature, tdesc_data,
-					  MIPS_EMBED_PC_REGNUM, "pc");
+					  mips_regnum.pc, "pc");
 
       if (!valid_p)
 	{
@@ -5703,12 +7976,11 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
       valid_p = 1;
       valid_p &= tdesc_numbered_register (feature, tdesc_data,
-					  MIPS_EMBED_BADVADDR_REGNUM,
-					  "badvaddr");
+					  mips_regnum.badvaddr, "badvaddr");
       valid_p &= tdesc_numbered_register (feature, tdesc_data,
 					  MIPS_PS_REGNUM, "status");
       valid_p &= tdesc_numbered_register (feature, tdesc_data,
-					  MIPS_EMBED_CAUSE_REGNUM, "cause");
+					  mips_regnum.cause, "cause");
 
       if (!valid_p)
 	{
@@ -5729,13 +8001,15 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
       valid_p = 1;
       for (i = 0; i < 32; i++)
 	valid_p &= tdesc_numbered_register (feature, tdesc_data,
-					    i + MIPS_EMBED_FP0_REGNUM,
-					    mips_fprs[i]);
+					    i + mips_regnum.fp0, mips_fprs[i]);
 
       valid_p &= tdesc_numbered_register (feature, tdesc_data,
-					  MIPS_EMBED_FP0_REGNUM + 32, "fcsr");
-      valid_p &= tdesc_numbered_register (feature, tdesc_data,
-					  MIPS_EMBED_FP0_REGNUM + 33, "fir");
+					  mips_regnum.fp_control_status,
+					  "fcsr");
+      valid_p
+	&= tdesc_numbered_register (feature, tdesc_data,
+				    mips_regnum.fp_implementation_revision,
+				    "fir");
 
       if (!valid_p)
 	{
@@ -5743,8 +8017,45 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 	  return NULL;
 	}
 
+      if (dspacc >= 0)
+	{
+	  feature = tdesc_find_feature (info.target_desc,
+					"org.gnu.gdb.mips.dsp");
+	  /* The DSP registers are optional; it's OK if they are absent.  */
+	  if (feature != NULL)
+	    {
+	      i = 0;
+	      valid_p = 1;
+	      valid_p &= tdesc_numbered_register (feature, tdesc_data,
+						  dspacc + i++, "hi1");
+	      valid_p &= tdesc_numbered_register (feature, tdesc_data,
+						  dspacc + i++, "lo1");
+	      valid_p &= tdesc_numbered_register (feature, tdesc_data,
+						  dspacc + i++, "hi2");
+	      valid_p &= tdesc_numbered_register (feature, tdesc_data,
+						  dspacc + i++, "lo2");
+	      valid_p &= tdesc_numbered_register (feature, tdesc_data,
+						  dspacc + i++, "hi3");
+	      valid_p &= tdesc_numbered_register (feature, tdesc_data,
+						  dspacc + i++, "lo3");
+
+	      valid_p &= tdesc_numbered_register (feature, tdesc_data,
+						  dspctl, "dspctl");
+
+	      if (!valid_p)
+		{
+		  tdesc_data_cleanup (tdesc_data);
+		  return NULL;
+		}
+
+	      mips_regnum.dspacc = dspacc;
+	      mips_regnum.dspctl = dspctl;
+	    }
+	}
+
       /* It would be nice to detect an attempt to use a 64-bit ABI
 	 when only 32-bit registers are provided.  */
+      reg_names = NULL;
     }
 
   /* First of all, extract the elf_flags, if available.  */
@@ -5847,6 +8158,17 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
     fprintf_unfiltered (gdb_stdlog, "mips_gdbarch_init: mips_abi = %d\n",
 			mips_abi);
 
+  /* Determine the default compressed ISA.  */
+  if ((elf_flags & EF_MIPS_ARCH_ASE_MICROMIPS) != 0
+      && (elf_flags & EF_MIPS_ARCH_ASE_M16) == 0)
+    mips_isa = ISA_MICROMIPS;
+  else if ((elf_flags & EF_MIPS_ARCH_ASE_M16) != 0
+	   && (elf_flags & EF_MIPS_ARCH_ASE_MICROMIPS) == 0)
+    mips_isa = ISA_MIPS16;
+  else
+    mips_isa = global_mips_compression ();
+  mips_compression_string = mips_compression_strings[mips_isa];
+
   /* Also used when doing an architecture lookup.  */
   if (gdbarch_debug)
     fprintf_unfiltered (gdb_stdlog,
@@ -5952,6 +8274,7 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   tdep->mips64_transfers_32bit_regs_p = mips64_transfers_32bit_regs_p;
   tdep->found_abi = found_abi;
   tdep->mips_abi = mips_abi;
+  tdep->mips_isa = mips_isa;
   tdep->mips_fpu_type = fpu_type;
   tdep->register_size_valid_p = 0;
   tdep->register_size = 0;
@@ -5993,66 +8316,15 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_elf_make_msymbol_special (gdbarch,
 					mips_elf_make_msymbol_special);
 
-  /* Fill in the OS dependant register numbers and names.  */
-  {
-    const char **reg_names;
-    struct mips_regnum *regnum = GDBARCH_OBSTACK_ZALLOC (gdbarch,
-							 struct mips_regnum);
-    if (tdesc_has_registers (info.target_desc))
-      {
-	regnum->lo = MIPS_EMBED_LO_REGNUM;
-	regnum->hi = MIPS_EMBED_HI_REGNUM;
-	regnum->badvaddr = MIPS_EMBED_BADVADDR_REGNUM;
-	regnum->cause = MIPS_EMBED_CAUSE_REGNUM;
-	regnum->pc = MIPS_EMBED_PC_REGNUM;
-	regnum->fp0 = MIPS_EMBED_FP0_REGNUM;
-	regnum->fp_control_status = 70;
-	regnum->fp_implementation_revision = 71;
-	num_regs = MIPS_LAST_EMBED_REGNUM + 1;
-	reg_names = NULL;
-      }
-    else if (info.osabi == GDB_OSABI_IRIX)
-      {
-	regnum->fp0 = 32;
-	regnum->pc = 64;
-	regnum->cause = 65;
-	regnum->badvaddr = 66;
-	regnum->hi = 67;
-	regnum->lo = 68;
-	regnum->fp_control_status = 69;
-	regnum->fp_implementation_revision = 70;
-	num_regs = 71;
-	reg_names = mips_irix_reg_names;
-      }
-    else
-      {
-	regnum->lo = MIPS_EMBED_LO_REGNUM;
-	regnum->hi = MIPS_EMBED_HI_REGNUM;
-	regnum->badvaddr = MIPS_EMBED_BADVADDR_REGNUM;
-	regnum->cause = MIPS_EMBED_CAUSE_REGNUM;
-	regnum->pc = MIPS_EMBED_PC_REGNUM;
-	regnum->fp0 = MIPS_EMBED_FP0_REGNUM;
-	regnum->fp_control_status = 70;
-	regnum->fp_implementation_revision = 71;
-	num_regs = 90;
-	if (info.bfd_arch_info != NULL
-	    && info.bfd_arch_info->mach == bfd_mach_mips3900)
-	  reg_names = mips_tx39_reg_names;
-	else
-	  reg_names = mips_generic_reg_names;
-      }
-    /* FIXME: cagney/2003-11-15: For MIPS, hasn't gdbarch_pc_regnum been
-       replaced by gdbarch_read_pc?  */
-    set_gdbarch_pc_regnum (gdbarch, regnum->pc + num_regs);
-    set_gdbarch_sp_regnum (gdbarch, MIPS_SP_REGNUM + num_regs);
-    set_gdbarch_fp0_regnum (gdbarch, regnum->fp0);
-    set_gdbarch_num_regs (gdbarch, num_regs);
-    set_gdbarch_num_pseudo_regs (gdbarch, num_regs);
-    set_gdbarch_register_name (gdbarch, mips_register_name);
-    set_gdbarch_virtual_frame_pointer (gdbarch, mips_virtual_frame_pointer);
-    tdep->mips_processor_reg_names = reg_names;
-    tdep->regnum = regnum;
-  }
+  regnum = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct mips_regnum);
+  *regnum = mips_regnum;
+  set_gdbarch_fp0_regnum (gdbarch, regnum->fp0);
+  set_gdbarch_num_regs (gdbarch, num_regs);
+  set_gdbarch_num_pseudo_regs (gdbarch, num_regs);
+  set_gdbarch_register_name (gdbarch, mips_register_name);
+  set_gdbarch_virtual_frame_pointer (gdbarch, mips_virtual_frame_pointer);
+  tdep->mips_processor_reg_names = reg_names;
+  tdep->regnum = regnum;
 
   switch (mips_abi)
     {
@@ -6218,10 +8490,8 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
   /* MIPS version of CALL_DUMMY.  */
 
-  /* NOTE: cagney/2003-08-05: Eventually call dummy location will be
-     replaced by a command, and all targets will default to on stack
-     (regardless of the stack's execute status).  */
-  set_gdbarch_call_dummy_location (gdbarch, AT_SYMBOL);
+  set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
+  set_gdbarch_push_dummy_code (gdbarch, mips_push_dummy_code);
   set_gdbarch_frame_align (gdbarch, mips_frame_align);
 
   set_gdbarch_convert_register_p (gdbarch, mips_convert_register_p);
@@ -6230,6 +8500,10 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
   set_gdbarch_breakpoint_from_pc (gdbarch, mips_breakpoint_from_pc);
+  set_gdbarch_remote_breakpoint_from_pc (gdbarch,
+					 mips_remote_breakpoint_from_pc);
+  set_gdbarch_adjust_breakpoint_address (gdbarch,
+					 mips_adjust_breakpoint_address);
 
   set_gdbarch_skip_prologue (gdbarch, mips_skip_prologue);
 
@@ -6260,6 +8534,16 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
   set_gdbarch_skip_trampoline_code (gdbarch, mips_skip_trampoline_code);
 
+  /* NOTE drow/2012-04-25: We overload the core solib trampoline code
+     to support MIPS16.  This is a bad thing.  Make sure not to do it
+     if we have an OS ABI that actually supports shared libraries, since
+     shared library support is more important.  If we have an OS someday
+     that supports both shared libraries and MIPS16, we'll have to find
+     a better place for these.
+     macro/2012-04-25: But that applies to return trampolines only and
+     currently no MIPS OS ABI uses shared libraries that have them.  */
+  set_gdbarch_in_solib_return_trampoline (gdbarch, mips_in_return_stub);
+
   set_gdbarch_single_step_through_delay (gdbarch,
 					 mips_single_step_through_delay);
 
@@ -6272,14 +8556,22 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   info.tdep_info = (void *) tdesc_data;
   gdbarch_init_osabi (info, gdbarch);
 
+  /* The hook may have adjusted num_regs, fetch the final value and
+     set pc_regnum and sp_regnum now that it has been fixed.  */
+  num_regs = gdbarch_num_regs (gdbarch);
+  set_gdbarch_pc_regnum (gdbarch, regnum->pc + num_regs);
+  set_gdbarch_sp_regnum (gdbarch, MIPS_SP_REGNUM + num_regs);
+
   /* Unwind the frame.  */
   dwarf2_append_unwinders (gdbarch);
   frame_unwind_append_unwinder (gdbarch, &mips_stub_frame_unwind);
   frame_unwind_append_unwinder (gdbarch, &mips_insn16_frame_unwind);
+  frame_unwind_append_unwinder (gdbarch, &mips_micro_frame_unwind);
   frame_unwind_append_unwinder (gdbarch, &mips_insn32_frame_unwind);
   frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
   frame_base_append_sniffer (gdbarch, mips_stub_frame_base_sniffer);
   frame_base_append_sniffer (gdbarch, mips_insn16_frame_base_sniffer);
+  frame_base_append_sniffer (gdbarch, mips_micro_frame_base_sniffer);
   frame_base_append_sniffer (gdbarch, mips_insn32_frame_base_sniffer);
 
   if (tdesc_data)
@@ -6373,6 +8665,16 @@ show_mips_abi (struct ui_file *file,
     }
 }
 
+/* Print out which MIPS compressed ISA encoding is used.  */
+
+static void
+show_mips_compression (struct ui_file *file, int from_tty,
+		       struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file, _("The compressed ISA encoding used is %s.\n"),
+		    value);
+}
+
 static void
 mips_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
 {
@@ -6489,6 +8791,23 @@ This option can be set to one of:\n\
 			show_mips_abi,
 			&setmipscmdlist, &showmipscmdlist);
 
+  /* Allow the user to set the ISA to assume for compressed code if ELF
+     file flags don't tell or there is no program file selected.  This
+     setting is updated whenever unambiguous ELF file flags are interpreted,
+     and carried over to subsequent sessions.  */
+  add_setshow_enum_cmd ("compression", class_obscure, mips_compression_strings,
+			&mips_compression_string, _("\
+Set the compressed ISA encoding used by MIPS code."), _("\
+Show the compressed ISA encoding used by MIPS code."), _("\
+Select the compressed ISA encoding used in functions that have no symbol\n\
+information available.  The encoding can be set to either of:\n\
+  mips16\n\
+  micromips\n\
+and is updated automatically from ELF file flags if available."),
+			mips_abi_update,
+			show_mips_compression,
+			&setmipscmdlist, &showmipscmdlist);
+
   /* Let the user turn off floating point and set the fence post for
      heuristic_proc_start.  */
 
diff --git a/gdb/mips-tdep.h b/gdb/mips-tdep.h
index d91a1d2..2e85895 100644
--- a/gdb/mips-tdep.h
+++ b/gdb/mips-tdep.h
@@ -38,6 +38,14 @@ enum mips_abi
 /* Return the MIPS ABI associated with GDBARCH.  */
 enum mips_abi mips_abi (struct gdbarch *gdbarch);
 
+/* Base and compressed MIPS ISA variations.  */
+enum mips_isa
+  {
+    ISA_MIPS = -1,		/* mips_compression_string depends on it.  */
+    ISA_MIPS16,
+    ISA_MICROMIPS
+  };
+
 /* Return the MIPS ISA's register size.  Just a short cut to the BFD
    architecture's word size.  */
 extern int mips_isa_regsize (struct gdbarch *gdbarch);
@@ -53,6 +61,8 @@ struct mips_regnum
   int cause;		/* Describes last exception.  */
   int hi;		/* Multiply/divide temp.  */
   int lo;		/* ...  */
+  int dspacc;		/* SmartMIPS/DSP accumulators.  */
+  int dspctl;		/* DSP control.  */
 };
 extern const struct mips_regnum *mips_regnum (struct gdbarch *gdbarch);
 
@@ -75,6 +85,7 @@ struct gdbarch_tdep
   /* mips options */
   enum mips_abi mips_abi;
   enum mips_abi found_abi;
+  enum mips_isa mips_isa;
   enum mips_fpu_type mips_fpu_type;
   int mips_last_arg_regnum;
   int mips_last_fp_arg_regnum;
@@ -117,7 +128,9 @@ enum
   MIPS_AT_REGNUM = 1,
   MIPS_V0_REGNUM = 2,		/* Function integer return value.  */
   MIPS_A0_REGNUM = 4,		/* Loc of first arg during a subr call.  */
+  MIPS_S2_REGNUM = 18,		/* Contains return address in MIPS16 thunks. */
   MIPS_T9_REGNUM = 25,		/* Contains address of callee in PIC.  */
+  MIPS_GP_REGNUM = 28,
   MIPS_SP_REGNUM = 29,
   MIPS_RA_REGNUM = 31,
   MIPS_PS_REGNUM = 32,		/* Contains processor status.  */
@@ -148,13 +161,24 @@ enum
 /* Single step based on where the current instruction will take us.  */
 extern int mips_software_single_step (struct frame_info *frame);
 
+/* Tell if the program counter value in MEMADDR is in a standard
+   MIPS function.  */
+extern int mips_pc_is_mips (bfd_vma memaddr);
+
 /* Tell if the program counter value in MEMADDR is in a MIPS16
    function.  */
-extern int mips_pc_is_mips16 (bfd_vma memaddr);
+extern int mips_pc_is_mips16 (struct gdbarch *gdbarch, bfd_vma memaddr);
+
+/* Tell if the program counter value in MEMADDR is in a microMIPS
+   function.  */
+extern int mips_pc_is_micromips (struct gdbarch *gdbarch, bfd_vma memaddr);
 
 /* Return the currently configured (or set) saved register size.  */
 extern unsigned int mips_abi_regsize (struct gdbarch *gdbarch);
 
+/* Make PC the address of the next instruction to execute.  */
+extern void mips_write_pc (struct regcache *regcache, CORE_ADDR pc);
+
 /* Target descriptions which only indicate the size of general
    registers.  */
 extern struct target_desc *mips_tdesc_gp32;
diff --git a/gdb/mipsread.c b/gdb/mipsread.c
index 5790730..23ceece 100644
--- a/gdb/mipsread.c
+++ b/gdb/mipsread.c
@@ -401,6 +401,7 @@ static const struct sym_fns ecoff_sym_fns =
   default_symfile_segments,	/* Get segment information from a file.  */
   NULL,
   default_symfile_relocate,	/* Relocate a debug section.  */
+  NULL,				/* sym_probe_fns */
   &psym_functions
 };
 
diff --git a/gdb/mn10300-tdep.c b/gdb/mn10300-tdep.c
index effeaab..e292613 100644
--- a/gdb/mn10300-tdep.c
+++ b/gdb/mn10300-tdep.c
@@ -233,7 +233,7 @@ mn10300_extract_return_value (struct gdbarch *gdbarch, struct type *type,
    from WRITEBUF into REGCACHE.  */
 
 static enum return_value_convention
-mn10300_return_value (struct gdbarch *gdbarch, struct type *func_type,
+mn10300_return_value (struct gdbarch *gdbarch, struct value *function,
 		      struct type *type, struct regcache *regcache,
 		      gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -387,7 +387,7 @@ mn10300_analyze_prologue (struct gdbarch *gdbarch,
                           struct mn10300_prologue *result)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  CORE_ADDR pc, next_pc;
+  CORE_ADDR pc;
   int rn;
   pv_t regs[MN10300_MAX_NUM_REGS];
   struct pv_area *stack;
@@ -1061,7 +1061,7 @@ mn10300_analyze_prologue (struct gdbarch *gdbarch,
 static CORE_ADDR
 mn10300_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
-  char *name;
+  const char *name;
   CORE_ADDR func_addr, func_end;
   struct mn10300_prologue p;
 
diff --git a/gdb/monitor.c b/gdb/monitor.c
index 5bbf70a..b9f345e 100644
--- a/gdb/monitor.c
+++ b/gdb/monitor.c
@@ -934,7 +934,7 @@ monitor_supply_register (struct regcache *regcache, int regno, char *valstr)
 
 static void
 monitor_resume (struct target_ops *ops,
-		ptid_t ptid, int step, enum target_signal sig)
+		ptid_t ptid, int step, enum gdb_signal sig)
 {
   /* Some monitors require a different command when starting a program.  */
   monitor_debug ("MON resume\n");
@@ -1162,7 +1162,7 @@ monitor_wait (struct target_ops *ops,
 #endif
 
   status->kind = TARGET_WAITKIND_STOPPED;
-  status->value.sig = TARGET_SIGNAL_TRAP;
+  status->value.sig = GDB_SIGNAL_TRAP;
 
   discard_cleanups (old_chain);
 
diff --git a/gdb/moxie-tdep.c b/gdb/moxie-tdep.c
index 7231486..3e08d60 100644
--- a/gdb/moxie-tdep.c
+++ b/gdb/moxie-tdep.c
@@ -218,7 +218,7 @@ static CORE_ADDR
 moxie_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
   CORE_ADDR func_addr = 0, func_end = 0;
-  char *func_name;
+  const char *func_name;
 
   /* See if we can determine the end of the prologue via the symbol table.
      If so, then return either PC, or the PC after the prologue, whichever
@@ -341,7 +341,7 @@ moxie_extract_return_value (struct type *type, struct regcache *regcache,
 /* Implement the "return_value" gdbarch method.  */
 
 static enum return_value_convention
-moxie_return_value (struct gdbarch *gdbarch, struct type *func_type,
+moxie_return_value (struct gdbarch *gdbarch, struct value *function,
 		   struct type *valtype, struct regcache *regcache,
 		   gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -516,7 +516,7 @@ moxie_process_readu (CORE_ADDR addr, char *buf,
    memory that will be changed in current instruction to "record_arch_list".
    Return -1 if something wrong.  */
 
-int
+static int
 moxie_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
 		      CORE_ADDR addr)
 {
diff --git a/gdb/mt-tdep.c b/gdb/mt-tdep.c
index 4a51a60..ee4b6eb 100644
--- a/gdb/mt-tdep.c
+++ b/gdb/mt-tdep.c
@@ -335,7 +335,7 @@ mt_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
    values.  */
 
 static enum return_value_convention
-mt_return_value (struct gdbarch *gdbarch, struct type *func_type,
+mt_return_value (struct gdbarch *gdbarch, struct value *function,
 		 struct type *type, struct regcache *regcache,
 		 gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -408,7 +408,7 @@ mt_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   CORE_ADDR func_addr = 0, func_end = 0;
-  char *func_name;
+  const char *func_name;
   unsigned long instr;
 
   if (find_pc_partial_function (pc, &func_name, &func_addr, &func_end))
diff --git a/gdb/nbsd-tdep.c b/gdb/nbsd-tdep.c
index 4491f9c..b4e152d 100644
--- a/gdb/nbsd-tdep.c
+++ b/gdb/nbsd-tdep.c
@@ -40,7 +40,7 @@ nbsd_lp64_solib_svr4_fetch_link_map_offsets (void)
 }
 
 int
-nbsd_pc_in_sigtramp (CORE_ADDR pc, char *func_name)
+nbsd_pc_in_sigtramp (CORE_ADDR pc, const char *func_name)
 {
   /* Check for libc-provided signal trampoline.  All such trampolines
      have function names which begin with "__sigtramp".  */
diff --git a/gdb/nbsd-tdep.h b/gdb/nbsd-tdep.h
index 8c731f7..cd6ea3b 100644
--- a/gdb/nbsd-tdep.h
+++ b/gdb/nbsd-tdep.h
@@ -23,6 +23,6 @@
 struct link_map_offsets *nbsd_ilp32_solib_svr4_fetch_link_map_offsets (void);
 struct link_map_offsets *nbsd_lp64_solib_svr4_fetch_link_map_offsets (void);
 
-int nbsd_pc_in_sigtramp (CORE_ADDR, char *);
+int nbsd_pc_in_sigtramp (CORE_ADDR, const char *);
 
 #endif /* NBSD_TDEP_H */
diff --git a/gdb/nto-procfs.c b/gdb/nto-procfs.c
index bb36311..b58f318 100644
--- a/gdb/nto-procfs.c
+++ b/gdb/nto-procfs.c
@@ -312,7 +312,7 @@ update_thread_private_data (struct thread_info *new_thread,
 #endif /* _NTO_VERSION */
 }
 
-void
+static void
 procfs_find_new_threads (struct target_ops *ops)
 {
   procfs_status status;
@@ -732,7 +732,7 @@ procfs_wait (struct target_ops *ops,
   if (ptid_equal (inferior_ptid, null_ptid))
     {
       ourstatus->kind = TARGET_WAITKIND_STOPPED;
-      ourstatus->value.sig = TARGET_SIGNAL_0;
+      ourstatus->value.sig = GDB_SIGNAL_0;
       exit_signo = 0;
       return null_ptid;
     }
@@ -752,13 +752,13 @@ procfs_wait (struct target_ops *ops,
   if (status.flags & _DEBUG_FLAG_SSTEP)
     {
       ourstatus->kind = TARGET_WAITKIND_STOPPED;
-      ourstatus->value.sig = TARGET_SIGNAL_TRAP;
+      ourstatus->value.sig = GDB_SIGNAL_TRAP;
     }
   /* Was it a breakpoint?  */
   else if (status.flags & _DEBUG_FLAG_TRACE)
     {
       ourstatus->kind = TARGET_WAITKIND_STOPPED;
-      ourstatus->value.sig = TARGET_SIGNAL_TRAP;
+      ourstatus->value.sig = GDB_SIGNAL_TRAP;
     }
   else if (status.flags & _DEBUG_FLAG_ISTOP)
     {
@@ -767,7 +767,7 @@ procfs_wait (struct target_ops *ops,
 	case _DEBUG_WHY_SIGNALLED:
 	  ourstatus->kind = TARGET_WAITKIND_STOPPED;
 	  ourstatus->value.sig =
-	    target_signal_from_host (status.info.si_signo);
+	    gdb_signal_from_host (status.info.si_signo);
 	  exit_signo = 0;
 	  break;
 	case _DEBUG_WHY_FAULTED:
@@ -780,7 +780,7 @@ procfs_wait (struct target_ops *ops,
 	  else
 	    {
 	      ourstatus->value.sig =
-		target_signal_from_host (status.info.si_signo);
+		gdb_signal_from_host (status.info.si_signo);
 	      exit_signo = ourstatus->value.sig;
 	    }
 	  break;
@@ -809,7 +809,7 @@ procfs_wait (struct target_ops *ops,
 	case _DEBUG_WHY_REQUESTED:
 	  /* We are assuming a requested stop is due to a SIGINT.  */
 	  ourstatus->kind = TARGET_WAITKIND_STOPPED;
-	  ourstatus->value.sig = TARGET_SIGNAL_INT;
+	  ourstatus->value.sig = GDB_SIGNAL_INT;
 	  exit_signo = 0;
 	  break;
 	}
@@ -952,7 +952,7 @@ procfs_remove_hw_breakpoint (struct gdbarch *gdbarch,
 
 static void
 procfs_resume (struct target_ops *ops,
-	       ptid_t ptid, int step, enum target_signal signo)
+	       ptid_t ptid, int step, enum gdb_signal signo)
 {
   int signal_to_pass;
   procfs_status status;
@@ -982,12 +982,12 @@ procfs_resume (struct target_ops *ops,
 
   run.flags |= _DEBUG_RUN_ARM;
 
-  signal_to_pass = target_signal_to_host (signo);
+  signal_to_pass = gdb_signal_to_host (signo);
 
   if (signal_to_pass)
     {
       devctl (ctl_fd, DCMD_PROC_STATUS, &status, sizeof (status), 0);
-      signal_to_pass = target_signal_to_host (signo);
+      signal_to_pass = gdb_signal_to_host (signo);
       if (status.why & (_DEBUG_WHY_SIGNALLED | _DEBUG_WHY_FAULTED))
 	{
 	  if (signal_to_pass != status.info.si_signo)
@@ -1340,7 +1340,7 @@ procfs_pass_signals (int numsigs, unsigned char *pass_signals)
 
   for (signo = 1; signo < NSIG; signo++)
     {
-      int target_signo = target_signal_from_host (signo);
+      int target_signo = gdb_signal_from_host (signo);
       if (target_signo < numsigs && pass_signals[target_signo])
         sigdelset (&run.trace, signo);
     }
@@ -1353,7 +1353,7 @@ procfs_thread_info (pid_t pid, short tid)
   return NULL;
 }
 
-char *
+static char *
 procfs_pid_to_str (struct target_ops *ops, ptid_t ptid)
 {
   static char buf[1024];
diff --git a/gdb/nto-tdep.c b/gdb/nto-tdep.c
index e7a530e..5e0c910 100644
--- a/gdb/nto-tdep.c
+++ b/gdb/nto-tdep.c
@@ -376,9 +376,9 @@ nto_initialize_signals (void)
 {
   /* We use SIG45 for pulses, or something, so nostop, noprint
      and pass them.  */
-  signal_stop_update (target_signal_from_name ("SIG45"), 0);
-  signal_print_update (target_signal_from_name ("SIG45"), 0);
-  signal_pass_update (target_signal_from_name ("SIG45"), 1);
+  signal_stop_update (gdb_signal_from_name ("SIG45"), 0);
+  signal_print_update (gdb_signal_from_name ("SIG45"), 0);
+  signal_pass_update (gdb_signal_from_name ("SIG45"), 1);
 
   /* By default we don't want to stop on these two, but we do want to pass.  */
 #if defined(SIGSELECT)
diff --git a/gdb/objc-exp.c b/gdb/objc-exp.c
index 08948c1..797f83d 100644
--- a/gdb/objc-exp.c
+++ b/gdb/objc-exp.c
@@ -213,6 +213,12 @@
 #define yygindex	objc_yygindex
 #define yytable		objc_yytable
 #define yycheck		objc_yycheck
+#define yyss		objc_yyss
+#define yysslim		objc_yysslim
+#define yyssp		objc_yyssp
+#define yystacksize	objc_yystacksize
+#define yyvs		objc_yyvs
+#define yyvsp		objc_yyvsp
 
 #ifndef YYDEBUG
 #define	YYDEBUG	0		/* Default to no yydebug support.  */
@@ -240,7 +246,7 @@ void yyerror (char *);
 #endif
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 123 "objc-exp.y"
+#line 129 "objc-exp.y"
 typedef union YYSTYPE {
     LONGEST lval;
     struct {
@@ -266,7 +272,7 @@ typedef union YYSTYPE {
     int *ivec;
   } YYSTYPE;
 /* Line 191 of yacc.c.  */
-#line 270 "objc-exp.c"
+#line 276 "objc-exp.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -275,14 +281,14 @@ typedef union YYSTYPE {
 
 
 /* Copy the second part of user declarations.  */
-#line 148 "objc-exp.y"
+#line 154 "objc-exp.y"
 
 /* YYSTYPE gets defined by %union.  */
 static int parse_number (char *, int, int, YYSTYPE *);
 
 
 /* Line 214 of yacc.c.  */
-#line 286 "objc-exp.c"
+#line 292 "objc-exp.c"
 
 #if ! defined (yyoverflow) || YYERROR_VERBOSE
 
@@ -517,21 +523,21 @@ static const yysigned_char yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short yyrline[] =
 {
-       0,   227,   227,   228,   231,   238,   239,   244,   248,   252,
-     256,   260,   264,   268,   272,   276,   280,   284,   290,   297,
-     301,   308,   316,   320,   329,   328,   351,   350,   366,   365,
-     374,   376,   379,   380,   383,   385,   387,   394,   391,   401,
-     405,   408,   412,   416,   419,   426,   432,   438,   444,   448,
-     452,   456,   460,   464,   468,   472,   476,   480,   484,   488,
-     492,   496,   500,   504,   508,   512,   516,   520,   524,   528,
-     534,   541,   554,   561,   564,   568,   575,   583,   608,   616,
-     634,   644,   659,   672,   697,   698,   729,   785,   791,   792,
-     793,   795,   797,   801,   803,   805,   807,   809,   812,   814,
-     819,   826,   828,   832,   834,   838,   840,   852,   856,   858,
-     866,   868,   870,   872,   874,   876,   878,   880,   882,   884,
-     886,   888,   890,   892,   895,   898,   901,   904,   908,   910,
-     914,   916,   923,   924,   927,   928,   934,   940,   949,   954,
-     961,   962,   963,   964,   965,   968,   969
+       0,   233,   233,   234,   237,   244,   245,   250,   254,   258,
+     262,   266,   270,   274,   278,   282,   286,   290,   296,   303,
+     307,   314,   322,   326,   335,   334,   357,   356,   372,   371,
+     380,   382,   385,   386,   389,   391,   393,   400,   397,   407,
+     411,   414,   418,   422,   425,   432,   438,   444,   450,   454,
+     458,   462,   466,   470,   474,   478,   482,   486,   490,   494,
+     498,   502,   506,   510,   514,   518,   522,   526,   530,   534,
+     540,   547,   560,   567,   570,   574,   581,   589,   614,   622,
+     640,   650,   672,   685,   710,   711,   742,   798,   804,   805,
+     806,   808,   810,   814,   816,   818,   820,   822,   825,   827,
+     832,   839,   841,   845,   847,   851,   853,   865,   869,   871,
+     879,   881,   883,   885,   887,   889,   891,   893,   895,   897,
+     899,   901,   903,   905,   908,   911,   914,   917,   921,   923,
+     927,   929,   936,   937,   940,   941,   947,   953,   962,   967,
+     974,   975,   976,   977,   978,   981,   982
 };
 #endif
 
@@ -1501,76 +1507,76 @@ yyreduce:
   switch (yyn)
     {
         case 4:
-#line 232 "objc-exp.y"
+#line 238 "objc-exp.y"
     { write_exp_elt_opcode(OP_TYPE);
 			  write_exp_elt_type(yyvsp[0].tval);
 			  write_exp_elt_opcode(OP_TYPE);}
     break;
 
   case 6:
-#line 240 "objc-exp.y"
+#line 246 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_COMMA); }
     break;
 
   case 7:
-#line 245 "objc-exp.y"
+#line 251 "objc-exp.y"
     { write_exp_elt_opcode (UNOP_IND); }
     break;
 
   case 8:
-#line 249 "objc-exp.y"
+#line 255 "objc-exp.y"
     { write_exp_elt_opcode (UNOP_ADDR); }
     break;
 
   case 9:
-#line 253 "objc-exp.y"
+#line 259 "objc-exp.y"
     { write_exp_elt_opcode (UNOP_NEG); }
     break;
 
   case 10:
-#line 257 "objc-exp.y"
+#line 263 "objc-exp.y"
     { write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
     break;
 
   case 11:
-#line 261 "objc-exp.y"
+#line 267 "objc-exp.y"
     { write_exp_elt_opcode (UNOP_COMPLEMENT); }
     break;
 
   case 12:
-#line 265 "objc-exp.y"
+#line 271 "objc-exp.y"
     { write_exp_elt_opcode (UNOP_PREINCREMENT); }
     break;
 
   case 13:
-#line 269 "objc-exp.y"
+#line 275 "objc-exp.y"
     { write_exp_elt_opcode (UNOP_PREDECREMENT); }
     break;
 
   case 14:
-#line 273 "objc-exp.y"
+#line 279 "objc-exp.y"
     { write_exp_elt_opcode (UNOP_POSTINCREMENT); }
     break;
 
   case 15:
-#line 277 "objc-exp.y"
+#line 283 "objc-exp.y"
     { write_exp_elt_opcode (UNOP_POSTDECREMENT); }
     break;
 
   case 16:
-#line 281 "objc-exp.y"
+#line 287 "objc-exp.y"
     { write_exp_elt_opcode (UNOP_SIZEOF); }
     break;
 
   case 17:
-#line 285 "objc-exp.y"
+#line 291 "objc-exp.y"
     { write_exp_elt_opcode (STRUCTOP_PTR);
 			  write_exp_string (yyvsp[0].sval);
 			  write_exp_elt_opcode (STRUCTOP_PTR); }
     break;
 
   case 18:
-#line 291 "objc-exp.y"
+#line 297 "objc-exp.y"
     { /* exp->type::name becomes exp->*(&type::name) */
 			  /* Note: this doesn't work if name is a
 			     static member!  FIXME */
@@ -1579,19 +1585,19 @@ yyreduce:
     break;
 
   case 19:
-#line 298 "objc-exp.y"
+#line 304 "objc-exp.y"
     { write_exp_elt_opcode (STRUCTOP_MPTR); }
     break;
 
   case 20:
-#line 302 "objc-exp.y"
+#line 308 "objc-exp.y"
     { write_exp_elt_opcode (STRUCTOP_STRUCT);
 			  write_exp_string (yyvsp[0].sval);
 			  write_exp_elt_opcode (STRUCTOP_STRUCT); }
     break;
 
   case 21:
-#line 309 "objc-exp.y"
+#line 315 "objc-exp.y"
     { /* exp.type::name becomes exp.*(&type::name) */
 			  /* Note: this doesn't work if name is a
 			     static member!  FIXME */
@@ -1600,17 +1606,17 @@ yyreduce:
     break;
 
   case 22:
-#line 317 "objc-exp.y"
+#line 323 "objc-exp.y"
     { write_exp_elt_opcode (STRUCTOP_MEMBER); }
     break;
 
   case 23:
-#line 321 "objc-exp.y"
+#line 327 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_SUBSCRIPT); }
     break;
 
   case 24:
-#line 329 "objc-exp.y"
+#line 335 "objc-exp.y"
     {
 			  CORE_ADDR class;
 
@@ -1628,7 +1634,7 @@ yyreduce:
     break;
 
   case 25:
-#line 344 "objc-exp.y"
+#line 350 "objc-exp.y"
     { write_exp_elt_opcode (OP_OBJC_MSGCALL);
 			  end_msglist();
 			  write_exp_elt_opcode (OP_OBJC_MSGCALL); 
@@ -1636,7 +1642,7 @@ yyreduce:
     break;
 
   case 26:
-#line 351 "objc-exp.y"
+#line 357 "objc-exp.y"
     {
 			  write_exp_elt_opcode (OP_LONG);
 			  write_exp_elt_type (parse_type->builtin_int);
@@ -1647,7 +1653,7 @@ yyreduce:
     break;
 
   case 27:
-#line 359 "objc-exp.y"
+#line 365 "objc-exp.y"
     { write_exp_elt_opcode (OP_OBJC_MSGCALL);
 			  end_msglist();
 			  write_exp_elt_opcode (OP_OBJC_MSGCALL); 
@@ -1655,12 +1661,12 @@ yyreduce:
     break;
 
   case 28:
-#line 366 "objc-exp.y"
+#line 372 "objc-exp.y"
     { start_msglist(); }
     break;
 
   case 29:
-#line 368 "objc-exp.y"
+#line 374 "objc-exp.y"
     { write_exp_elt_opcode (OP_OBJC_MSGCALL);
 			  end_msglist();
 			  write_exp_elt_opcode (OP_OBJC_MSGCALL); 
@@ -1668,59 +1674,59 @@ yyreduce:
     break;
 
   case 30:
-#line 375 "objc-exp.y"
+#line 381 "objc-exp.y"
     { add_msglist(&yyvsp[0].sval, 0); }
     break;
 
   case 34:
-#line 384 "objc-exp.y"
+#line 390 "objc-exp.y"
     { add_msglist(&yyvsp[-2].sval, 1); }
     break;
 
   case 35:
-#line 386 "objc-exp.y"
+#line 392 "objc-exp.y"
     { add_msglist(0, 1);   }
     break;
 
   case 36:
-#line 388 "objc-exp.y"
+#line 394 "objc-exp.y"
     { add_msglist(0, 0);   }
     break;
 
   case 37:
-#line 394 "objc-exp.y"
+#line 400 "objc-exp.y"
     { start_arglist (); }
     break;
 
   case 38:
-#line 396 "objc-exp.y"
+#line 402 "objc-exp.y"
     { write_exp_elt_opcode (OP_FUNCALL);
 			  write_exp_elt_longcst ((LONGEST) end_arglist ());
 			  write_exp_elt_opcode (OP_FUNCALL); }
     break;
 
   case 39:
-#line 402 "objc-exp.y"
+#line 408 "objc-exp.y"
     { start_arglist (); }
     break;
 
   case 41:
-#line 409 "objc-exp.y"
+#line 415 "objc-exp.y"
     { arglist_len = 1; }
     break;
 
   case 42:
-#line 413 "objc-exp.y"
+#line 419 "objc-exp.y"
     { arglist_len++; }
     break;
 
   case 43:
-#line 417 "objc-exp.y"
+#line 423 "objc-exp.y"
     { yyval.lval = end_arglist () - 1; }
     break;
 
   case 44:
-#line 420 "objc-exp.y"
+#line 426 "objc-exp.y"
     { write_exp_elt_opcode (OP_ARRAY);
 			  write_exp_elt_longcst ((LONGEST) 0);
 			  write_exp_elt_longcst ((LONGEST) yyvsp[0].lval);
@@ -1728,138 +1734,138 @@ yyreduce:
     break;
 
   case 45:
-#line 427 "objc-exp.y"
+#line 433 "objc-exp.y"
     { write_exp_elt_opcode (UNOP_MEMVAL);
 			  write_exp_elt_type (yyvsp[-2].tval);
 			  write_exp_elt_opcode (UNOP_MEMVAL); }
     break;
 
   case 46:
-#line 433 "objc-exp.y"
+#line 439 "objc-exp.y"
     { write_exp_elt_opcode (UNOP_CAST);
 			  write_exp_elt_type (yyvsp[-2].tval);
 			  write_exp_elt_opcode (UNOP_CAST); }
     break;
 
   case 47:
-#line 439 "objc-exp.y"
+#line 445 "objc-exp.y"
     { }
     break;
 
   case 48:
-#line 445 "objc-exp.y"
+#line 451 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_REPEAT); }
     break;
 
   case 49:
-#line 449 "objc-exp.y"
+#line 455 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_MUL); }
     break;
 
   case 50:
-#line 453 "objc-exp.y"
+#line 459 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_DIV); }
     break;
 
   case 51:
-#line 457 "objc-exp.y"
+#line 463 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_REM); }
     break;
 
   case 52:
-#line 461 "objc-exp.y"
+#line 467 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_ADD); }
     break;
 
   case 53:
-#line 465 "objc-exp.y"
+#line 471 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_SUB); }
     break;
 
   case 54:
-#line 469 "objc-exp.y"
+#line 475 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_LSH); }
     break;
 
   case 55:
-#line 473 "objc-exp.y"
+#line 479 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_RSH); }
     break;
 
   case 56:
-#line 477 "objc-exp.y"
+#line 483 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_EQUAL); }
     break;
 
   case 57:
-#line 481 "objc-exp.y"
+#line 487 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_NOTEQUAL); }
     break;
 
   case 58:
-#line 485 "objc-exp.y"
+#line 491 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_LEQ); }
     break;
 
   case 59:
-#line 489 "objc-exp.y"
+#line 495 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_GEQ); }
     break;
 
   case 60:
-#line 493 "objc-exp.y"
+#line 499 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_LESS); }
     break;
 
   case 61:
-#line 497 "objc-exp.y"
+#line 503 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_GTR); }
     break;
 
   case 62:
-#line 501 "objc-exp.y"
+#line 507 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_BITWISE_AND); }
     break;
 
   case 63:
-#line 505 "objc-exp.y"
+#line 511 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_BITWISE_XOR); }
     break;
 
   case 64:
-#line 509 "objc-exp.y"
+#line 515 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_BITWISE_IOR); }
     break;
 
   case 65:
-#line 513 "objc-exp.y"
+#line 519 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_LOGICAL_AND); }
     break;
 
   case 66:
-#line 517 "objc-exp.y"
+#line 523 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_LOGICAL_OR); }
     break;
 
   case 67:
-#line 521 "objc-exp.y"
+#line 527 "objc-exp.y"
     { write_exp_elt_opcode (TERNOP_COND); }
     break;
 
   case 68:
-#line 525 "objc-exp.y"
+#line 531 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_ASSIGN); }
     break;
 
   case 69:
-#line 529 "objc-exp.y"
+#line 535 "objc-exp.y"
     { write_exp_elt_opcode (BINOP_ASSIGN_MODIFY);
 			  write_exp_elt_opcode (yyvsp[-1].opcode);
 			  write_exp_elt_opcode (BINOP_ASSIGN_MODIFY); }
     break;
 
   case 70:
-#line 535 "objc-exp.y"
+#line 541 "objc-exp.y"
     { write_exp_elt_opcode (OP_LONG);
 			  write_exp_elt_type (yyvsp[0].typed_val_int.type);
 			  write_exp_elt_longcst ((LONGEST)(yyvsp[0].typed_val_int.val));
@@ -1867,7 +1873,7 @@ yyreduce:
     break;
 
   case 71:
-#line 542 "objc-exp.y"
+#line 548 "objc-exp.y"
     { YYSTYPE val;
 			  parse_number (yyvsp[0].ssym.stoken.ptr,
 					yyvsp[0].ssym.stoken.length, 0, &val);
@@ -1880,7 +1886,7 @@ yyreduce:
     break;
 
   case 72:
-#line 555 "objc-exp.y"
+#line 561 "objc-exp.y"
     { write_exp_elt_opcode (OP_DOUBLE);
 			  write_exp_elt_type (yyvsp[0].typed_val_float.type);
 			  write_exp_elt_dblcst (yyvsp[0].typed_val_float.dval);
@@ -1888,7 +1894,7 @@ yyreduce:
     break;
 
   case 75:
-#line 569 "objc-exp.y"
+#line 575 "objc-exp.y"
     {
 			  write_exp_elt_opcode (OP_OBJC_SELECTOR);
 			  write_exp_string (yyvsp[0].sval);
@@ -1896,7 +1902,7 @@ yyreduce:
     break;
 
   case 76:
-#line 576 "objc-exp.y"
+#line 582 "objc-exp.y"
     { write_exp_elt_opcode (OP_LONG);
 			  write_exp_elt_type (parse_type->builtin_int);
 			  CHECK_TYPEDEF (yyvsp[-1].tval);
@@ -1905,7 +1911,7 @@ yyreduce:
     break;
 
   case 77:
-#line 584 "objc-exp.y"
+#line 590 "objc-exp.y"
     { /* C strings are converted into array
 			     constants with an explicit null byte
 			     added at the end.  Thus the array upper
@@ -1931,14 +1937,14 @@ yyreduce:
     break;
 
   case 78:
-#line 611 "objc-exp.y"
+#line 617 "objc-exp.y"
     { write_exp_elt_opcode (OP_OBJC_NSSTRING);
 			  write_exp_string (yyvsp[0].sval);
 			  write_exp_elt_opcode (OP_OBJC_NSSTRING); }
     break;
 
   case 79:
-#line 617 "objc-exp.y"
+#line 623 "objc-exp.y"
     {
 			  if (yyvsp[0].ssym.sym != 0)
 			      yyval.bval = SYMBOL_BLOCK_VALUE (yyvsp[0].ssym.sym);
@@ -1957,7 +1963,7 @@ yyreduce:
     break;
 
   case 80:
-#line 635 "objc-exp.y"
+#line 641 "objc-exp.y"
     { struct symbol *tem
 			    = lookup_symbol (copy_name (yyvsp[0].sval), yyvsp[-2].bval,
 					     VAR_DOMAIN, (int *) NULL);
@@ -1968,13 +1974,20 @@ yyreduce:
     break;
 
   case 81:
-#line 645 "objc-exp.y"
+#line 651 "objc-exp.y"
     { struct symbol *sym;
 			  sym = lookup_symbol (copy_name (yyvsp[0].sval), yyvsp[-2].bval,
 					       VAR_DOMAIN, (int *) NULL);
 			  if (sym == 0)
 			    error (_("No symbol \"%s\" in specified context."),
 				   copy_name (yyvsp[0].sval));
+			  if (symbol_read_needs_frame (sym))
+			    {
+			      if (innermost_block == 0
+				  || contained_in (block_found,
+						   innermost_block))
+				innermost_block = block_found;
+			    }
 
 			  write_exp_elt_opcode (OP_VAR_VALUE);
 			  /* block_found is set by lookup_symbol.  */
@@ -1984,7 +1997,7 @@ yyreduce:
     break;
 
   case 82:
-#line 660 "objc-exp.y"
+#line 673 "objc-exp.y"
     {
 			  struct type *type = yyvsp[-2].tval;
 			  if (TYPE_CODE (type) != TYPE_CODE_STRUCT
@@ -2000,7 +2013,7 @@ yyreduce:
     break;
 
   case 83:
-#line 673 "objc-exp.y"
+#line 686 "objc-exp.y"
     {
 			  struct type *type = yyvsp[-3].tval;
 			  struct stoken tmp_token;
@@ -2026,7 +2039,7 @@ yyreduce:
     break;
 
   case 85:
-#line 699 "objc-exp.y"
+#line 712 "objc-exp.y"
     {
 			  char *name = copy_name (yyvsp[0].sval);
 			  struct symbol *sym;
@@ -2058,7 +2071,7 @@ yyreduce:
     break;
 
   case 86:
-#line 730 "objc-exp.y"
+#line 743 "objc-exp.y"
     { struct symbol *sym = yyvsp[0].ssym.sym;
 
 			  if (sym)
@@ -2114,47 +2127,47 @@ yyreduce:
     break;
 
   case 90:
-#line 794 "objc-exp.y"
+#line 807 "objc-exp.y"
     { yyval.tval = follow_types (yyvsp[-1].tval); }
     break;
 
   case 91:
-#line 796 "objc-exp.y"
+#line 809 "objc-exp.y"
     { yyval.tval = follow_types (yyvsp[-2].tval); }
     break;
 
   case 92:
-#line 798 "objc-exp.y"
+#line 811 "objc-exp.y"
     { yyval.tval = follow_types (yyvsp[-2].tval); }
     break;
 
   case 93:
-#line 802 "objc-exp.y"
+#line 815 "objc-exp.y"
     { push_type (tp_pointer); yyval.voidval = 0; }
     break;
 
   case 94:
-#line 804 "objc-exp.y"
+#line 817 "objc-exp.y"
     { push_type (tp_pointer); yyval.voidval = yyvsp[0].voidval; }
     break;
 
   case 95:
-#line 806 "objc-exp.y"
+#line 819 "objc-exp.y"
     { push_type (tp_reference); yyval.voidval = 0; }
     break;
 
   case 96:
-#line 808 "objc-exp.y"
+#line 821 "objc-exp.y"
     { push_type (tp_reference); yyval.voidval = yyvsp[0].voidval; }
     break;
 
   case 98:
-#line 813 "objc-exp.y"
+#line 826 "objc-exp.y"
     { yyval.voidval = yyvsp[-1].voidval; }
     break;
 
   case 99:
-#line 815 "objc-exp.y"
+#line 828 "objc-exp.y"
     {
 			  push_type_int (yyvsp[0].lval);
 			  push_type (tp_array);
@@ -2162,7 +2175,7 @@ yyreduce:
     break;
 
   case 100:
-#line 820 "objc-exp.y"
+#line 833 "objc-exp.y"
     {
 			  push_type_int (yyvsp[0].lval);
 			  push_type (tp_array);
@@ -2171,42 +2184,42 @@ yyreduce:
     break;
 
   case 101:
-#line 827 "objc-exp.y"
+#line 840 "objc-exp.y"
     { push_type (tp_function); }
     break;
 
   case 102:
-#line 829 "objc-exp.y"
+#line 842 "objc-exp.y"
     { push_type (tp_function); }
     break;
 
   case 103:
-#line 833 "objc-exp.y"
+#line 846 "objc-exp.y"
     { yyval.lval = -1; }
     break;
 
   case 104:
-#line 835 "objc-exp.y"
+#line 848 "objc-exp.y"
     { yyval.lval = yyvsp[-1].typed_val_int.val; }
     break;
 
   case 105:
-#line 839 "objc-exp.y"
+#line 852 "objc-exp.y"
     { yyval.voidval = 0; }
     break;
 
   case 106:
-#line 841 "objc-exp.y"
+#line 854 "objc-exp.y"
     { xfree (yyvsp[-1].tvec); yyval.voidval = 0; }
     break;
 
   case 108:
-#line 857 "objc-exp.y"
+#line 870 "objc-exp.y"
     { yyval.tval = yyvsp[0].tsym.type; }
     break;
 
   case 109:
-#line 859 "objc-exp.y"
+#line 872 "objc-exp.y"
     {
 			  if (yyvsp[0].class.type == NULL)
 			    error (_("No symbol \"%s\" in current context."), 
@@ -2217,137 +2230,137 @@ yyreduce:
     break;
 
   case 110:
-#line 867 "objc-exp.y"
+#line 880 "objc-exp.y"
     { yyval.tval = parse_type->builtin_int; }
     break;
 
   case 111:
-#line 869 "objc-exp.y"
+#line 882 "objc-exp.y"
     { yyval.tval = parse_type->builtin_long; }
     break;
 
   case 112:
-#line 871 "objc-exp.y"
+#line 884 "objc-exp.y"
     { yyval.tval = parse_type->builtin_short; }
     break;
 
   case 113:
-#line 873 "objc-exp.y"
+#line 886 "objc-exp.y"
     { yyval.tval = parse_type->builtin_long; }
     break;
 
   case 114:
-#line 875 "objc-exp.y"
+#line 888 "objc-exp.y"
     { yyval.tval = parse_type->builtin_unsigned_long; }
     break;
 
   case 115:
-#line 877 "objc-exp.y"
+#line 890 "objc-exp.y"
     { yyval.tval = parse_type->builtin_long_long; }
     break;
 
   case 116:
-#line 879 "objc-exp.y"
+#line 892 "objc-exp.y"
     { yyval.tval = parse_type->builtin_long_long; }
     break;
 
   case 117:
-#line 881 "objc-exp.y"
+#line 894 "objc-exp.y"
     { yyval.tval = parse_type->builtin_unsigned_long_long; }
     break;
 
   case 118:
-#line 883 "objc-exp.y"
+#line 896 "objc-exp.y"
     { yyval.tval = parse_type->builtin_unsigned_long_long; }
     break;
 
   case 119:
-#line 885 "objc-exp.y"
+#line 898 "objc-exp.y"
     { yyval.tval = parse_type->builtin_short; }
     break;
 
   case 120:
-#line 887 "objc-exp.y"
+#line 900 "objc-exp.y"
     { yyval.tval = parse_type->builtin_unsigned_short; }
     break;
 
   case 121:
-#line 889 "objc-exp.y"
+#line 902 "objc-exp.y"
     { yyval.tval = parse_type->builtin_double; }
     break;
 
   case 122:
-#line 891 "objc-exp.y"
+#line 904 "objc-exp.y"
     { yyval.tval = parse_type->builtin_long_double; }
     break;
 
   case 123:
-#line 893 "objc-exp.y"
+#line 906 "objc-exp.y"
     { yyval.tval = lookup_struct (copy_name (yyvsp[0].sval),
 					      expression_context_block); }
     break;
 
   case 124:
-#line 896 "objc-exp.y"
+#line 909 "objc-exp.y"
     { yyval.tval = lookup_struct (copy_name (yyvsp[0].sval),
 					      expression_context_block); }
     break;
 
   case 125:
-#line 899 "objc-exp.y"
+#line 912 "objc-exp.y"
     { yyval.tval = lookup_union (copy_name (yyvsp[0].sval),
 					     expression_context_block); }
     break;
 
   case 126:
-#line 902 "objc-exp.y"
+#line 915 "objc-exp.y"
     { yyval.tval = lookup_enum (copy_name (yyvsp[0].sval),
 					    expression_context_block); }
     break;
 
   case 127:
-#line 905 "objc-exp.y"
+#line 918 "objc-exp.y"
     { yyval.tval = lookup_unsigned_typename (parse_language,
 							 parse_gdbarch,
 							 TYPE_NAME(yyvsp[0].tsym.type)); }
     break;
 
   case 128:
-#line 909 "objc-exp.y"
+#line 922 "objc-exp.y"
     { yyval.tval = parse_type->builtin_unsigned_int; }
     break;
 
   case 129:
-#line 911 "objc-exp.y"
+#line 924 "objc-exp.y"
     { yyval.tval = lookup_signed_typename (parse_language,
 						       parse_gdbarch,
 						       TYPE_NAME(yyvsp[0].tsym.type)); }
     break;
 
   case 130:
-#line 915 "objc-exp.y"
+#line 928 "objc-exp.y"
     { yyval.tval = parse_type->builtin_int; }
     break;
 
   case 131:
-#line 917 "objc-exp.y"
+#line 930 "objc-exp.y"
     { yyval.tval = lookup_template_type(copy_name(yyvsp[-3].sval), yyvsp[-1].tval,
 						    expression_context_block);
 			}
     break;
 
   case 132:
-#line 923 "objc-exp.y"
+#line 936 "objc-exp.y"
     { yyval.tval = yyvsp[0].tval; }
     break;
 
   case 133:
-#line 924 "objc-exp.y"
+#line 937 "objc-exp.y"
     { yyval.tval = yyvsp[0].tval; }
     break;
 
   case 135:
-#line 929 "objc-exp.y"
+#line 942 "objc-exp.y"
     {
 		  yyval.tsym.stoken.ptr = "int";
 		  yyval.tsym.stoken.length = 3;
@@ -2356,7 +2369,7 @@ yyreduce:
     break;
 
   case 136:
-#line 935 "objc-exp.y"
+#line 948 "objc-exp.y"
     {
 		  yyval.tsym.stoken.ptr = "long";
 		  yyval.tsym.stoken.length = 4;
@@ -2365,7 +2378,7 @@ yyreduce:
     break;
 
   case 137:
-#line 941 "objc-exp.y"
+#line 954 "objc-exp.y"
     {
 		  yyval.tsym.stoken.ptr = "short";
 		  yyval.tsym.stoken.length = 5;
@@ -2374,7 +2387,7 @@ yyreduce:
     break;
 
   case 138:
-#line 950 "objc-exp.y"
+#line 963 "objc-exp.y"
     { yyval.tvec = (struct type **) xmalloc (sizeof (struct type *) * 2);
 		  yyval.ivec[0] = 1;	/* Number of types in vector.  */
 		  yyval.tvec[1] = yyvsp[0].tval;
@@ -2382,7 +2395,7 @@ yyreduce:
     break;
 
   case 139:
-#line 955 "objc-exp.y"
+#line 968 "objc-exp.y"
     { int len = sizeof (struct type *) * (++(yyvsp[-2].ivec[0]) + 1);
 		  yyval.tvec = (struct type **) xrealloc ((char *) yyvsp[-2].tvec, len);
 		  yyval.tvec[yyval.ivec[0]] = yyvsp[0].tval;
@@ -2390,27 +2403,27 @@ yyreduce:
     break;
 
   case 140:
-#line 961 "objc-exp.y"
+#line 974 "objc-exp.y"
     { yyval.sval = yyvsp[0].ssym.stoken; }
     break;
 
   case 141:
-#line 962 "objc-exp.y"
+#line 975 "objc-exp.y"
     { yyval.sval = yyvsp[0].ssym.stoken; }
     break;
 
   case 142:
-#line 963 "objc-exp.y"
+#line 976 "objc-exp.y"
     { yyval.sval = yyvsp[0].tsym.stoken; }
     break;
 
   case 143:
-#line 964 "objc-exp.y"
+#line 977 "objc-exp.y"
     { yyval.sval = yyvsp[0].class.stoken; }
     break;
 
   case 144:
-#line 965 "objc-exp.y"
+#line 978 "objc-exp.y"
     { yyval.sval = yyvsp[0].ssym.stoken; }
     break;
 
@@ -2418,7 +2431,7 @@ yyreduce:
     }
 
 /* Line 1000 of yacc.c.  */
-#line 2422 "objc-exp.c"
+#line 2435 "objc-exp.c"
 

   yyvsp -= yylen;
   yyssp -= yylen;
@@ -2643,7 +2656,7 @@ yyreturn:
 }
 
 
-#line 979 "objc-exp.y"
+#line 992 "objc-exp.y"
 
 
 /* Take care of parsing a number (anything that starts with a digit).
@@ -2653,11 +2666,7 @@ yyreturn:
 /*** Needs some error checking for the float case.  ***/
 
 static int
-parse_number (p, len, parsed_float, putithere)
-     char *p;
-     int len;
-     int parsed_float;
-     YYSTYPE *putithere;
+parse_number (char *p, int len, int parsed_float, YYSTYPE *putithere)
 {
   /* FIXME: Shouldn't these be unsigned?  We don't deal with negative
      values here, and we do kind of silly things like cast to
@@ -3080,9 +3089,6 @@ yylex (void)
     case '^':
     case '~':
     case '!':
-#if 0
-    case '@':		/* Moved out below.  */
-#endif
     case '<':
     case '>':
     case '[':
@@ -3444,8 +3450,7 @@ yylex (void)
 }
 
 void
-yyerror (msg)
-     char *msg;
+yyerror (char *msg)
 {
   if (*lexptr == '\0')
     error(_("A %s near end of expression."),  (msg ? msg : "error"));
diff --git a/gdb/objc-exp.y b/gdb/objc-exp.y
index 346b404..6f51edf 100644
--- a/gdb/objc-exp.y
+++ b/gdb/objc-exp.y
@@ -102,6 +102,12 @@
 #define yygindex	objc_yygindex
 #define yytable		objc_yytable
 #define yycheck		objc_yycheck
+#define yyss		objc_yyss
+#define yysslim		objc_yysslim
+#define yyssp		objc_yyssp
+#define yystacksize	objc_yystacksize
+#define yyvs		objc_yyvs
+#define yyvsp		objc_yyvsp
 
 #ifndef YYDEBUG
 #define	YYDEBUG	0		/* Default to no yydebug support.  */
@@ -648,6 +654,13 @@ variable:	block COLONCOLON name
 			  if (sym == 0)
 			    error (_("No symbol \"%s\" in specified context."),
 				   copy_name ($3));
+			  if (symbol_read_needs_frame (sym))
+			    {
+			      if (innermost_block == 0
+				  || contained_in (block_found,
+						   innermost_block))
+				innermost_block = block_found;
+			    }
 
 			  write_exp_elt_opcode (OP_VAR_VALUE);
 			  /* block_found is set by lookup_symbol.  */
@@ -985,11 +998,7 @@ name_not_typename :	NAME
 /*** Needs some error checking for the float case.  ***/
 
 static int
-parse_number (p, len, parsed_float, putithere)
-     char *p;
-     int len;
-     int parsed_float;
-     YYSTYPE *putithere;
+parse_number (char *p, int len, int parsed_float, YYSTYPE *putithere)
 {
   /* FIXME: Shouldn't these be unsigned?  We don't deal with negative
      values here, and we do kind of silly things like cast to
@@ -1412,9 +1421,6 @@ yylex (void)
     case '^':
     case '~':
     case '!':
-#if 0
-    case '@':		/* Moved out below.  */
-#endif
     case '<':
     case '>':
     case '[':
@@ -1776,8 +1782,7 @@ yylex (void)
 }
 
 void
-yyerror (msg)
-     char *msg;
+yyerror (char *msg)
 {
   if (*lexptr == '\0')
     error(_("A %s near end of expression."),  (msg ? msg : "error"));
diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c
index 1c96309..15bf792 100644
--- a/gdb/objc-lang.c
+++ b/gdb/objc-lang.c
@@ -524,6 +524,7 @@ const struct language_defn objc_language_defn = {
   c_print_typedef,		/* Print a typedef using appropriate syntax */
   c_val_print,			/* Print a value using appropriate syntax */
   c_value_print,		/* Print a top-level value */
+  default_read_var_value,	/* la_read_var_value */
   objc_skip_trampoline, 	/* Language specific skip_trampoline */
   "self",		        /* name_of_this */
   basic_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
@@ -540,7 +541,7 @@ const struct language_defn objc_language_defn = {
   default_print_array_index,
   default_pass_by_reference,
   default_get_string,
-  strcmp_iw_ordered,
+  NULL,				/* la_get_symbol_name_cmp */
   iterate_over_symbols,
   LANG_MAGIC
 };
@@ -636,14 +637,14 @@ end_msglist(void)
 }
 
 /*
- * Function: specialcmp (char *a, char *b)
+ * Function: specialcmp (const char *a, const char *b)
  *
  * Special strcmp: treats ']' and ' ' as end-of-string.
  * Used for qsorting lists of objc methods (either by class or selector).
  */
 
 static int
-specialcmp (char *a, char *b)
+specialcmp (const char *a, const char *b)
 {
   while (*a && *a != ' ' && *a != ']' && *b && *b != ' ' && *b != ']')
     {
@@ -668,7 +669,7 @@ specialcmp (char *a, char *b)
 static int
 compare_selectors (const void *a, const void *b)
 {
-  char *aname, *bname;
+  const char *aname, *bname;
 
   aname = SYMBOL_PRINT_NAME (*(struct symbol **) a);
   bname = SYMBOL_PRINT_NAME (*(struct symbol **) b);
@@ -697,7 +698,7 @@ selectors_info (char *regexp, int from_tty)
 {
   struct objfile	*objfile;
   struct minimal_symbol *msymbol;
-  char                  *name;
+  const char            *name;
   char                  *val;
   int                    matches = 0;
   int                    maxlen  = 0;
@@ -762,8 +763,8 @@ selectors_info (char *regexp, int from_tty)
 	    }
 	  if (regexp == NULL || re_exec(++name) != 0)
 	    { 
-	      char *mystart = name;
-	      char *myend   = (char *) strchr (mystart, ']');
+	      const char *mystart = name;
+	      const char *myend   = strchr (mystart, ']');
 	      
 	      if (myend && (myend - mystart > maxlen))
 		maxlen = myend - mystart;	/* Get longest selector.  */
@@ -834,7 +835,7 @@ selectors_info (char *regexp, int from_tty)
 static int
 compare_classes (const void *a, const void *b)
 {
-  char *aname, *bname;
+  const char *aname, *bname;
 
   aname = SYMBOL_PRINT_NAME (*(struct symbol **) a);
   bname = SYMBOL_PRINT_NAME (*(struct symbol **) b);
@@ -859,7 +860,7 @@ classes_info (char *regexp, int from_tty)
 {
   struct objfile	*objfile;
   struct minimal_symbol *msymbol;
-  char                  *name;
+  const char            *name;
   char                  *val;
   int                    matches = 0;
   int                    maxlen  = 0;
@@ -901,8 +902,8 @@ classes_info (char *regexp, int from_tty)
 	if (regexp == NULL || re_exec(name+2) != 0)
 	  { 
 	    /* Compute length of classname part.  */
-	    char *mystart = name + 2;
-	    char *myend   = (char *) strchr(mystart, ' ');
+	    const char *mystart = name + 2;
+	    const char *myend   = strchr (mystart, ' ');
 	    
 	    if (myend && (myend - mystart > maxlen))
 	      maxlen = myend - mystart;
@@ -1119,7 +1120,7 @@ find_methods (char type, const char *class, const char *category,
 {
   struct objfile *objfile = NULL;
 
-  char *symname = NULL;
+  const char *symname = NULL;
 
   char ntype = '\0';
   char *nclass = NULL;
@@ -1766,6 +1767,9 @@ resolve_msgsend_super_stret (CORE_ADDR pc, CORE_ADDR *new_pc)
   return 0;
 }
 
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_objc_lang;
+
 void
 _initialize_objc_lang (void)
 {
diff --git a/gdb/objfiles.c b/gdb/objfiles.c
index afe4fb4..f5e5c75 100644
--- a/gdb/objfiles.c
+++ b/gdb/objfiles.c
@@ -105,13 +105,6 @@ get_objfile_pspace_data (struct program_space *pspace)
   return info;
 }
 
-/* Records whether any objfiles appeared or disappeared since we last updated
-   address to obj section map.  */
-
-/* Locate all mappable sections of a BFD file.
-   objfile_p_char is a char * to get it through
-   bfd_map_over_sections; we cast it back to its proper type.  */
-
 /* Called via bfd_map_over_sections to build up the section table that
    the objfile references.  The objfile contains pointers to the start
    of the table (objfile->sections) and to the first location after
@@ -119,19 +112,18 @@ get_objfile_pspace_data (struct program_space *pspace)
 
 static void
 add_to_objfile_sections (struct bfd *abfd, struct bfd_section *asect,
-			 void *objfile_p_char)
+			 void *objfilep)
 {
-  struct objfile *objfile = (struct objfile *) objfile_p_char;
+  struct objfile *objfile = (struct objfile *) objfilep;
   struct obj_section section;
   flagword aflag;
 
   aflag = bfd_get_section_flags (abfd, asect);
-
   if (!(aflag & SEC_ALLOC))
     return;
-
-  if (0 == bfd_section_size (abfd, asect))
+  if (bfd_section_size (abfd, asect) == 0)
     return;
+
   section.objfile = objfile;
   section.the_bfd_section = asect;
   section.ovly_mapped = 0;
@@ -142,11 +134,9 @@ add_to_objfile_sections (struct bfd *abfd, struct bfd_section *asect,
 }
 
 /* Builds a section table for OBJFILE.
-   Returns 0 if OK, 1 on error (in which case bfd_error contains the
-   error).
 
    Note that while we are building the table, which goes into the
-   psymbol obstack, we hijack the sections_end pointer to instead hold
+   objfile obstack, we hijack the sections_end pointer to instead hold
    a count of the number of sections.  When bfd_map_over_sections
    returns, this count is used to compute the pointer to the end of
    the sections table, which then overwrites the count.
@@ -154,10 +144,10 @@ add_to_objfile_sections (struct bfd *abfd, struct bfd_section *asect,
    Also note that the OFFSET and OVLY_MAPPED in each table entry
    are initialized to zero.
 
-   Also note that if anything else writes to the psymbol obstack while
+   Also note that if anything else writes to the objfile obstack while
    we are building the table, we're pretty much hosed.  */
 
-int
+void
 build_objfile_section_table (struct objfile *objfile)
 {
   objfile->sections_end = 0;
@@ -165,7 +155,6 @@ build_objfile_section_table (struct objfile *objfile)
 			 add_to_objfile_sections, (void *) objfile);
   objfile->sections = obstack_finish (&objfile->objfile_obstack);
   objfile->sections_end = objfile->sections + (size_t) objfile->sections_end;
-  return (0);
 }
 
 /* Given a pointer to an initialized bfd (ABFD) and some flag bits
@@ -216,12 +205,7 @@ allocate_objfile (bfd *abfd, int flags)
       objfile->mtime = bfd_get_mtime (abfd);
 
       /* Build section table.  */
-
-      if (build_objfile_section_table (objfile))
-	{
-	  error (_("Can't find the file sections in `%s': %s"),
-		 objfile->name, bfd_errmsg (bfd_get_error ()));
-	}
+      build_objfile_section_table (objfile);
     }
   else
     {
@@ -342,29 +326,6 @@ entry_point_address (void)
   return retval;
 }
 
-/* Create the terminating entry of OBJFILE's minimal symbol table.
-   If OBJFILE->msymbols is zero, allocate a single entry from
-   OBJFILE->objfile_obstack; otherwise, just initialize
-   OBJFILE->msymbols[OBJFILE->minimal_symbol_count].  */
-void
-terminate_minimal_symbol_table (struct objfile *objfile)
-{
-  if (! objfile->msymbols)
-    objfile->msymbols = ((struct minimal_symbol *)
-                         obstack_alloc (&objfile->objfile_obstack,
-                                        sizeof (objfile->msymbols[0])));
-
-  {
-    struct minimal_symbol *m
-      = &objfile->msymbols[objfile->minimal_symbol_count];
-
-    memset (m, 0, sizeof (*m));
-    /* Don't rely on these enumeration values being 0's.  */
-    MSYMBOL_TYPE (m) = mst_unknown;
-    SYMBOL_SET_LANGUAGE (m, language_unknown);
-  }
-}
-
 /* Iterator on PARENT and every separate debug objfile of PARENT.
    The usage pattern is:
      for (objfile = parent;
@@ -769,7 +730,9 @@ objfile_relocate1 (struct objfile *objfile,
 	  BLOCK_START (b) += ANOFFSET (delta, s->block_line_section);
 	  BLOCK_END (b) += ANOFFSET (delta, s->block_line_section);
 
-	  ALL_BLOCK_SYMBOLS (b, iter, sym)
+	  /* We only want to iterate over the local symbols, not any
+	     symbols in included symtabs.  */
+	  ALL_DICT_SYMBOLS (BLOCK_DICT (b), iter, sym)
 	    {
 	      relocate_one_symbol (sym, objfile, delta);
 	    }
@@ -834,6 +797,11 @@ objfile_relocate1 (struct objfile *objfile,
 				obj_section_addr (s));
     }
 
+  /* Relocating probes.  */
+  if (objfile->sf && objfile->sf->sym_probe_fns)
+    objfile->sf->sym_probe_fns->sym_relocate_probe (objfile,
+						    new_offsets, delta);
+
   /* Data changed.  */
   return 1;
 }
@@ -1115,7 +1083,7 @@ insert_section_p (const struct bfd *abfd,
 {
   const bfd_vma lma = bfd_section_lma (abfd, section);
 
-  if (lma != 0 && lma != bfd_section_vma (abfd, section)
+  if (overlay_debugging && lma != 0 && lma != bfd_section_vma (abfd, section)
       && (bfd_get_file_flags (abfd) & BFD_IN_MEMORY) == 0)
     /* This is an overlay section.  IN_MEMORY check is needed to avoid
        discarding sections from the "system supplied DSO" (aka vdso)
@@ -1557,6 +1525,31 @@ gdb_bfd_unref (struct bfd *abfd)
   xfree (name);
 }
 
+/* The default implementation for the "iterate_over_objfiles_in_search_order"
+   gdbarch method.  It is equivalent to use the ALL_OBJFILES macro,
+   searching the objfiles in the order they are stored internally,
+   ignoring CURRENT_OBJFILE.
+
+   On most platorms, it should be close enough to doing the best
+   we can without some knowledge specific to the architecture.  */
+
+void
+default_iterate_over_objfiles_in_search_order
+  (struct gdbarch *gdbarch,
+   iterate_over_objfiles_in_search_order_cb_ftype *cb,
+   void *cb_data, struct objfile *current_objfile)
+{
+  int stop = 0;
+  struct objfile *objfile;
+
+  ALL_OBJFILES (objfile)
+    {
+       stop = cb (objfile, cb_data);
+       if (stop)
+	 return;
+    }
+}
+
 /* Provide a prototype to silence -Wmissing-prototypes.  */
 extern initialize_file_ftype _initialize_objfiles;
 
diff --git a/gdb/objfiles.h b/gdb/objfiles.h
index aba1791..01c3aea 100644
--- a/gdb/objfiles.h
+++ b/gdb/objfiles.h
@@ -327,13 +327,13 @@ struct objfile
     unsigned num_data;
 
     /* Set of relocation offsets to apply to each section.
-       Currently on the objfile_obstack (which makes no sense, but I'm
-       not sure it's harming anything).
+       The table is indexed by the_bfd_section->index, thus it is generally
+       as large as the number of sections in the binary.
+       The table is stored on the objfile_obstack.
 
        These offsets indicate that all symbols (including partial and
        minimal symbols) which have been read have been relocated by this
-       much.  Symbols which are yet to be read need to be relocated by
-       it.  */
+       much.  Symbols which are yet to be read need to be relocated by it.  */
 
     struct section_offsets *section_offsets;
     int num_sections;
@@ -354,12 +354,11 @@ struct objfile
        among other things, is used to map pc addresses into sections.
        SECTIONS points to the first entry in the table, and
        SECTIONS_END points to the first location past the last entry
-       in the table.  Currently the table is stored on the
-       objfile_obstack (which makes no sense, but I'm not sure it's
-       harming anything).  */
+       in the table.  The table is stored on the objfile_obstack.
+       There is no particular order to the sections in this table, and it
+       only contains sections we care about (e.g. non-empty, SEC_ALLOC).  */
 
-    struct obj_section
-     *sections, *sections_end;
+    struct obj_section *sections, *sections_end;
 
     /* GDB allows to have debug symbols in separate object files.  This is
        used by .gnu_debuglink, ELF build id note and Mach-O OSO.
@@ -381,7 +380,7 @@ struct objfile
     struct objfile *separate_debug_objfile_link;
 
     /* Place to stash various statistics about this objfile.  */
-      OBJSTATS;
+    OBJSTATS;
 
     /* A linked list of symbols created when reading template types or
        function templates.  These symbols are not stored in any symbol
@@ -450,7 +449,7 @@ extern int entry_point_address_query (CORE_ADDR *entry_p);
 
 extern CORE_ADDR entry_point_address (void);
 
-extern int build_objfile_section_table (struct objfile *);
+extern void build_objfile_section_table (struct objfile *);
 
 extern void terminate_minimal_symbol_table (struct objfile *objfile);
 
@@ -526,6 +525,11 @@ extern void *objfile_data (struct objfile *objfile,
 extern struct bfd *gdb_bfd_ref (struct bfd *abfd);
 extern void gdb_bfd_unref (struct bfd *abfd);
 extern int gdb_bfd_close_or_warn (struct bfd *abfd);
+
+extern void default_iterate_over_objfiles_in_search_order
+  (struct gdbarch *gdbarch,
+   iterate_over_objfiles_in_search_order_cb_ftype *cb,
+   void *cb_data, struct objfile *current_objfile);
 

 
 /* Traverse all object files in the current program space.
@@ -557,6 +561,12 @@ extern int gdb_bfd_close_or_warn (struct bfd *abfd);
 #define	ALL_OBJFILE_SYMTABS(objfile, s) \
     for ((s) = (objfile) -> symtabs; (s) != NULL; (s) = (s) -> next)
 
+/* Traverse all primary symtabs in one objfile.  */
+
+#define ALL_OBJFILE_PRIMARY_SYMTABS(objfile, s) \
+  ALL_OBJFILE_SYMTABS ((objfile), (s)) \
+    if ((s)->primary)
+
 /* Traverse all minimal symbols in one objfile.  */
 
 #define	ALL_OBJFILE_MSYMBOLS(objfile, m) \
@@ -579,13 +589,11 @@ extern int gdb_bfd_close_or_warn (struct bfd *abfd);
 
 #define ALL_PRIMARY_SYMTABS(objfile, s) \
   ALL_OBJFILES (objfile)		\
-    ALL_OBJFILE_SYMTABS (objfile, s)	\
-      if ((s)->primary)
+    ALL_OBJFILE_PRIMARY_SYMTABS (objfile, s)
 
 #define ALL_PSPACE_PRIMARY_SYMTABS(pspace, objfile, s)	\
   ALL_PSPACE_OBJFILES (ss, objfile)			\
-    ALL_OBJFILE_SYMTABS (objfile, s)			\
-      if ((s)->primary)
+    ALL_OBJFILE_PRIMARY_SYMTABS (objfile, s)
 
 /* Traverse all minimal symbols in all objfiles in the current symbol
    space.  */
diff --git a/gdb/observer.c b/gdb/observer.c
index 4944480..276ca75 100644
--- a/gdb/observer.c
+++ b/gdb/observer.c
@@ -181,6 +181,11 @@ int observer_test_first_observer = 0;
 int observer_test_second_observer = 0;
 int observer_test_third_observer = 0;
 
+/* Provide prototypes to silence -Wmissing-prototypes.  */
+extern void observer_test_first_notification_function (int arg);
+extern void observer_test_second_notification_function (int arg);
+extern void observer_test_third_notification_function (int arg);
+
 void
 observer_test_first_notification_function (int arg)
 {
diff --git a/gdb/observer.sh b/gdb/observer.sh
index b5c49ac..c98afd0 100755
--- a/gdb/observer.sh
+++ b/gdb/observer.sh
@@ -136,8 +136,17 @@ static void
 observer_${event}_notification_stub (const void *data, const void *args_data)
 {
   observer_${event}_ftype *notify = (observer_${event}_ftype *) data;
+EOF
+
+	notify_args=`echo ${actual} | sed -e 's/\([a-z0-9_][a-z0-9_]*\)/args->\1/g'`
+
+	if test ! -z "${notify_args}"; then
+	    cat<<EOF >>${otmp}
   const struct ${event}_args *args = args_data;
-  notify (`echo ${actual} | sed -e 's/\([a-z0-9_][a-z0-9_]*\)/args->\1/g'`);
+EOF
+	fi
+	cat <<EOF >>${otmp}
+  notify (${notify_args});
 }
 
 struct observer *
diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c
index 6557a08..54075a4 100644
--- a/gdb/opencl-lang.c
+++ b/gdb/opencl-lang.c
@@ -68,7 +68,7 @@ enum opencl_primitive_types {
 
 static struct gdbarch_data *opencl_type_data;
 
-struct type **
+static struct type **
 builtin_opencl_type (struct gdbarch *gdbarch)
 {
   return gdbarch_data (gdbarch, opencl_type_data);
@@ -961,7 +961,7 @@ Cannot perform conditional operation on vectors with different sizes"));
   return evaluate_subexp_c (expect_type, exp, pos, noside);
 }
 
-void
+static void
 opencl_language_arch_info (struct gdbarch *gdbarch,
 			   struct language_arch_info *lai)
 {
@@ -1008,6 +1008,7 @@ const struct language_defn opencl_language_defn =
   c_print_typedef,		/* Print a typedef using appropriate syntax */
   c_val_print,			/* Print a value using appropriate syntax */
   c_value_print,		/* Print a top-level value */
+  default_read_var_value,	/* la_read_var_value */
   NULL,				/* Language specific skip_trampoline */
   NULL,                         /* name_of_this */
   basic_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
@@ -1024,7 +1025,7 @@ const struct language_defn opencl_language_defn =
   default_print_array_index,
   default_pass_by_reference,
   c_get_string,
-  strcmp_iw_ordered,
+  NULL,				/* la_get_symbol_name_cmp */
   iterate_over_symbols,
   LANG_MAGIC
 };
@@ -1116,6 +1117,9 @@ build_opencl_types (struct gdbarch *gdbarch)
   return types;
 }
 
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_opencl_language;
+
 void
 _initialize_opencl_language (void)
 {
diff --git a/gdb/osabi.c b/gdb/osabi.c
index aba9842..faffe30 100644
--- a/gdb/osabi.c
+++ b/gdb/osabi.c
@@ -72,6 +72,7 @@ static const char * const gdb_osabi_names[] =
   "DICOS",
   "Darwin",
   "Symbian",
+  "OpenVMS",
 
   "<invalid>"
 };
@@ -549,6 +550,10 @@ generic_elf_osabi_sniffer (bfd *abfd)
 			     generic_elf_osabi_sniff_abi_tag_sections,
 			     &osabi);
       break;
+
+    case ELFOSABI_OPENVMS:
+      osabi = GDB_OSABI_OPENVMS;
+      break;
     }
 
   if (osabi == GDB_OSABI_UNKNOWN)
diff --git a/gdb/osdata.c b/gdb/osdata.c
index 62ce412..8776022 100644
--- a/gdb/osdata.c
+++ b/gdb/osdata.c
@@ -288,7 +288,7 @@ get_osdata_column (struct osdata_item *item, const char *name)
   return NULL;
 }
 
-static void
+void
 info_osdata_command (char *type, int from_tty)
 {
   struct ui_out *uiout = current_uiout;
@@ -297,6 +297,7 @@ info_osdata_command (char *type, int from_tty)
   struct cleanup *old_chain;
   int ncols = 0;
   int nrows;
+  int col_to_skip = -1;
 
   osdata = get_osdata (type);
   old_chain = make_cleanup_osdata_free (osdata);
@@ -311,6 +312,28 @@ info_osdata_command (char *type, int from_tty)
       last = VEC_last (osdata_item_s, osdata->items);
       if (last->columns)
         ncols = VEC_length (osdata_column_s, last->columns);
+
+      /* As a special case, scan the listing of available data types
+	 for a column named "Title", and only include it with MI
+	 output; this column's normal use is for titles for interface
+	 elements like menus, and it clutters up CLI output.  */
+      if (!type && !ui_out_is_mi_like_p (uiout))
+	{
+	  struct osdata_column *col;
+	  int ix;
+
+	  for (ix = 0;
+	       VEC_iterate (osdata_column_s, last->columns, ix, col);
+	       ix++)
+	    {
+	      if (strcmp (col->name, "Title") == 0)
+		col_to_skip = ix;
+	    }
+	  /* Be sure to reduce the total column count, otherwise
+	     internal errors ensue.  */
+	  if (col_to_skip >= 0)
+	    --ncols;
+	}
     }
 
   make_cleanup_ui_out_table_begin_end (uiout, ncols, nrows,
@@ -335,7 +358,10 @@ info_osdata_command (char *type, int from_tty)
           ix++)
 	{
 	  char col_name[32];
-	  
+
+	  if (ix == col_to_skip)
+	    continue;
+
 	  snprintf (col_name, 32, "col%d", ix);
 	  ui_out_table_header (uiout, 10, ui_left,
 			       col_name, col->name);
@@ -355,13 +381,10 @@ info_osdata_command (char *type, int from_tty)
           ix_items++)
        {
          struct cleanup *old_chain;
-         struct ui_stream *stb;
          int ix_cols;
          struct osdata_column *col;
 
-         stb = ui_out_stream_new (uiout);
-         old_chain = make_cleanup_ui_out_stream_delete (stb);
-         make_cleanup_ui_out_tuple_begin_end (uiout, "item");
+         old_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "item");
 
          for (ix_cols = 0;
               VEC_iterate (osdata_column_s, item->columns,
@@ -369,7 +392,10 @@ info_osdata_command (char *type, int from_tty)
               ix_cols++)
 	   {
 	     char col_name[32];
-	     
+
+	     if (ix_cols == col_to_skip)
+	       continue;
+
 	     snprintf (col_name, 32, "col%d", ix_cols);
 	     ui_out_field_string (uiout, col_name, col->value);
 	   }
diff --git a/gdb/osdata.h b/gdb/osdata.h
index f63b0f3..4cfb3f8 100644
--- a/gdb/osdata.h
+++ b/gdb/osdata.h
@@ -49,5 +49,6 @@ void osdata_free (struct osdata *);
 struct cleanup *make_cleanup_osdata_free (struct osdata *data);
 struct osdata *get_osdata (const char *type);
 const char *get_osdata_column (struct osdata_item *item, const char *name);
+void info_osdata_command (char *type, int from_tty);
 
 #endif /* OSDATA_H */
diff --git a/gdb/p-exp.c b/gdb/p-exp.c
index 469fcde..974370e 100644
--- a/gdb/p-exp.c
+++ b/gdb/p-exp.c
@@ -195,6 +195,12 @@
 #define yygindex pascal_yygindex
 #define yytable	 pascal_yytable
 #define yycheck	 pascal_yycheck
+#define yyss	pascal_yyss
+#define yysslim	pascal_yysslim
+#define yyssp	pascal_yyssp
+#define yystacksize pascal_yystacksize
+#define yyvs	pascal_yyvs
+#define yyvsp	pascal_yyvsp
 
 #ifndef YYDEBUG
 #define	YYDEBUG 1		/* Default to yydebug support */
@@ -225,7 +231,7 @@ static char * uptok (char *, int);
 #endif
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 129 "p-exp.y"
+#line 135 "p-exp.y"
 typedef union YYSTYPE {
     LONGEST lval;
     struct {
@@ -250,7 +256,7 @@ typedef union YYSTYPE {
     int *ivec;
   } YYSTYPE;
 /* Line 191 of yacc.c.  */
-#line 254 "p-exp.c"
+#line 260 "p-exp.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -259,7 +265,7 @@ typedef union YYSTYPE {
 
 
 /* Copy the second part of user declarations.  */
-#line 153 "p-exp.y"
+#line 159 "p-exp.y"
 
 /* YYSTYPE gets defined by %union */
 static int parse_number (char *, int, int, YYSTYPE *);
@@ -273,7 +279,7 @@ static int search_field;
 
 
 /* Line 214 of yacc.c.  */
-#line 277 "p-exp.c"
+#line 283 "p-exp.c"
 
 #if ! defined (yyoverflow) || YYERROR_VERBOSE
 
@@ -479,14 +485,14 @@ static const yysigned_char yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short yyrline[] =
 {
-       0,   234,   234,   234,   243,   244,   247,   254,   255,   260,
-     266,   272,   276,   280,   284,   289,   293,   311,   329,   341,
-     339,   369,   366,   381,   382,   384,   388,   403,   409,   413,
-     413,   433,   437,   441,   445,   449,   453,   457,   463,   469,
-     475,   481,   487,   493,   497,   501,   505,   509,   516,   523,
-     531,   545,   553,   556,   571,   579,   582,   607,   634,   652,
-     662,   677,   692,   693,   724,   795,   806,   810,   812,   814,
-     817,   825,   826,   827,   828,   831,   832
+       0,   240,   240,   240,   249,   250,   253,   260,   261,   266,
+     272,   278,   282,   286,   290,   295,   299,   317,   335,   347,
+     345,   375,   372,   387,   388,   390,   394,   409,   415,   419,
+     419,   439,   443,   447,   451,   455,   459,   463,   469,   475,
+     481,   487,   493,   499,   503,   507,   511,   515,   522,   529,
+     537,   551,   559,   562,   577,   585,   588,   613,   640,   658,
+     668,   683,   698,   699,   730,   801,   812,   816,   818,   820,
+     823,   831,   832,   833,   834,   837,   838
 };
 #endif
 
@@ -1321,7 +1327,7 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 234 "p-exp.y"
+#line 240 "p-exp.y"
     { current_type = NULL;
 		  intvar = NULL;
 		  search_field = 0;
@@ -1330,12 +1336,12 @@ yyreduce:
     break;
 
   case 3:
-#line 239 "p-exp.y"
+#line 245 "p-exp.y"
     {}
     break;
 
   case 6:
-#line 248 "p-exp.y"
+#line 254 "p-exp.y"
     { write_exp_elt_opcode(OP_TYPE);
 			  write_exp_elt_type(yyvsp[0].tval);
 			  write_exp_elt_opcode(OP_TYPE);
@@ -1343,51 +1349,51 @@ yyreduce:
     break;
 
   case 8:
-#line 256 "p-exp.y"
+#line 262 "p-exp.y"
     { write_exp_elt_opcode (BINOP_COMMA); }
     break;
 
   case 9:
-#line 261 "p-exp.y"
+#line 267 "p-exp.y"
     { write_exp_elt_opcode (UNOP_IND);
 			  if (current_type)
 			    current_type = TYPE_TARGET_TYPE (current_type); }
     break;
 
   case 10:
-#line 267 "p-exp.y"
+#line 273 "p-exp.y"
     { write_exp_elt_opcode (UNOP_ADDR);
 			  if (current_type)
 			    current_type = TYPE_POINTER_TYPE (current_type); }
     break;
 
   case 11:
-#line 273 "p-exp.y"
+#line 279 "p-exp.y"
     { write_exp_elt_opcode (UNOP_NEG); }
     break;
 
   case 12:
-#line 277 "p-exp.y"
+#line 283 "p-exp.y"
     { write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
     break;
 
   case 13:
-#line 281 "p-exp.y"
+#line 287 "p-exp.y"
     { write_exp_elt_opcode (UNOP_PREINCREMENT); }
     break;
 
   case 14:
-#line 285 "p-exp.y"
+#line 291 "p-exp.y"
     { write_exp_elt_opcode (UNOP_PREDECREMENT); }
     break;
 
   case 15:
-#line 290 "p-exp.y"
+#line 296 "p-exp.y"
     { search_field = 1; }
     break;
 
   case 16:
-#line 294 "p-exp.y"
+#line 300 "p-exp.y"
     { write_exp_elt_opcode (STRUCTOP_STRUCT);
 			  write_exp_string (yyvsp[0].sval);
 			  write_exp_elt_opcode (STRUCTOP_STRUCT);
@@ -1405,7 +1411,7 @@ yyreduce:
     break;
 
   case 17:
-#line 312 "p-exp.y"
+#line 318 "p-exp.y"
     { mark_struct_expression ();
 			  write_exp_elt_opcode (STRUCTOP_STRUCT);
 			  write_exp_string (yyvsp[0].sval);
@@ -1424,7 +1430,7 @@ yyreduce:
     break;
 
   case 18:
-#line 330 "p-exp.y"
+#line 336 "p-exp.y"
     { struct stoken s;
 			  mark_struct_expression ();
 			  write_exp_elt_opcode (STRUCTOP_STRUCT);
@@ -1435,8 +1441,8 @@ yyreduce:
     break;
 
   case 19:
-#line 341 "p-exp.y"
-    { char *arrayname;
+#line 347 "p-exp.y"
+    { const char *arrayname;
 			  int arrayfieldindex;
 			  arrayfieldindex = is_pascal_string_type (
 				current_type, NULL, NULL,
@@ -1457,7 +1463,7 @@ yyreduce:
     break;
 
   case 20:
-#line 360 "p-exp.y"
+#line 366 "p-exp.y"
     { pop_current_type ();
 			  write_exp_elt_opcode (BINOP_SUBSCRIPT);
 			  if (current_type)
@@ -1465,13 +1471,13 @@ yyreduce:
     break;
 
   case 21:
-#line 369 "p-exp.y"
+#line 375 "p-exp.y"
     { push_current_type ();
 			  start_arglist (); }
     break;
 
   case 22:
-#line 372 "p-exp.y"
+#line 378 "p-exp.y"
     { write_exp_elt_opcode (OP_FUNCALL);
 			  write_exp_elt_longcst ((LONGEST) end_arglist ());
 			  write_exp_elt_opcode (OP_FUNCALL);
@@ -1482,17 +1488,17 @@ yyreduce:
     break;
 
   case 24:
-#line 383 "p-exp.y"
+#line 389 "p-exp.y"
     { arglist_len = 1; }
     break;
 
   case 25:
-#line 385 "p-exp.y"
+#line 391 "p-exp.y"
     { arglist_len++; }
     break;
 
   case 26:
-#line 389 "p-exp.y"
+#line 395 "p-exp.y"
     { if (current_type)
 			    {
 			      /* Allow automatic dereference of classes.  */
@@ -1508,17 +1514,17 @@ yyreduce:
     break;
 
   case 27:
-#line 404 "p-exp.y"
+#line 410 "p-exp.y"
     { }
     break;
 
   case 28:
-#line 410 "p-exp.y"
+#line 416 "p-exp.y"
     { write_exp_elt_opcode (BINOP_MUL); }
     break;
 
   case 29:
-#line 413 "p-exp.y"
+#line 419 "p-exp.y"
     {
 			  if (current_type && is_integral_type (current_type))
 			    leftdiv_is_integer = 1;
@@ -1526,7 +1532,7 @@ yyreduce:
     break;
 
   case 30:
-#line 418 "p-exp.y"
+#line 424 "p-exp.y"
     {
 			  if (leftdiv_is_integer && current_type
 			      && is_integral_type (current_type))
@@ -1543,99 +1549,99 @@ yyreduce:
     break;
 
   case 31:
-#line 434 "p-exp.y"
+#line 440 "p-exp.y"
     { write_exp_elt_opcode (BINOP_INTDIV); }
     break;
 
   case 32:
-#line 438 "p-exp.y"
+#line 444 "p-exp.y"
     { write_exp_elt_opcode (BINOP_REM); }
     break;
 
   case 33:
-#line 442 "p-exp.y"
+#line 448 "p-exp.y"
     { write_exp_elt_opcode (BINOP_ADD); }
     break;
 
   case 34:
-#line 446 "p-exp.y"
+#line 452 "p-exp.y"
     { write_exp_elt_opcode (BINOP_SUB); }
     break;
 
   case 35:
-#line 450 "p-exp.y"
+#line 456 "p-exp.y"
     { write_exp_elt_opcode (BINOP_LSH); }
     break;
 
   case 36:
-#line 454 "p-exp.y"
+#line 460 "p-exp.y"
     { write_exp_elt_opcode (BINOP_RSH); }
     break;
 
   case 37:
-#line 458 "p-exp.y"
+#line 464 "p-exp.y"
     { write_exp_elt_opcode (BINOP_EQUAL);
 			  current_type = parse_type->builtin_bool;
 			}
     break;
 
   case 38:
-#line 464 "p-exp.y"
+#line 470 "p-exp.y"
     { write_exp_elt_opcode (BINOP_NOTEQUAL);
 			  current_type = parse_type->builtin_bool;
 			}
     break;
 
   case 39:
-#line 470 "p-exp.y"
+#line 476 "p-exp.y"
     { write_exp_elt_opcode (BINOP_LEQ);
 			  current_type = parse_type->builtin_bool;
 			}
     break;
 
   case 40:
-#line 476 "p-exp.y"
+#line 482 "p-exp.y"
     { write_exp_elt_opcode (BINOP_GEQ);
 			  current_type = parse_type->builtin_bool;
 			}
     break;
 
   case 41:
-#line 482 "p-exp.y"
+#line 488 "p-exp.y"
     { write_exp_elt_opcode (BINOP_LESS);
 			  current_type = parse_type->builtin_bool;
 			}
     break;
 
   case 42:
-#line 488 "p-exp.y"
+#line 494 "p-exp.y"
     { write_exp_elt_opcode (BINOP_GTR);
 			  current_type = parse_type->builtin_bool;
 			}
     break;
 
   case 43:
-#line 494 "p-exp.y"
+#line 500 "p-exp.y"
     { write_exp_elt_opcode (BINOP_BITWISE_AND); }
     break;
 
   case 44:
-#line 498 "p-exp.y"
+#line 504 "p-exp.y"
     { write_exp_elt_opcode (BINOP_BITWISE_XOR); }
     break;
 
   case 45:
-#line 502 "p-exp.y"
+#line 508 "p-exp.y"
     { write_exp_elt_opcode (BINOP_BITWISE_IOR); }
     break;
 
   case 46:
-#line 506 "p-exp.y"
+#line 512 "p-exp.y"
     { write_exp_elt_opcode (BINOP_ASSIGN); }
     break;
 
   case 47:
-#line 510 "p-exp.y"
+#line 516 "p-exp.y"
     { write_exp_elt_opcode (OP_BOOL);
 			  write_exp_elt_longcst ((LONGEST) yyvsp[0].lval);
 			  current_type = parse_type->builtin_bool;
@@ -1643,7 +1649,7 @@ yyreduce:
     break;
 
   case 48:
-#line 517 "p-exp.y"
+#line 523 "p-exp.y"
     { write_exp_elt_opcode (OP_BOOL);
 			  write_exp_elt_longcst ((LONGEST) yyvsp[0].lval);
 			  current_type = parse_type->builtin_bool;
@@ -1651,7 +1657,7 @@ yyreduce:
     break;
 
   case 49:
-#line 524 "p-exp.y"
+#line 530 "p-exp.y"
     { write_exp_elt_opcode (OP_LONG);
 			  write_exp_elt_type (yyvsp[0].typed_val_int.type);
 			  current_type = yyvsp[0].typed_val_int.type;
@@ -1660,7 +1666,7 @@ yyreduce:
     break;
 
   case 50:
-#line 532 "p-exp.y"
+#line 538 "p-exp.y"
     { YYSTYPE val;
 			  parse_number (yyvsp[0].ssym.stoken.ptr,
 					yyvsp[0].ssym.stoken.length, 0, &val);
@@ -1674,7 +1680,7 @@ yyreduce:
     break;
 
   case 51:
-#line 546 "p-exp.y"
+#line 552 "p-exp.y"
     { write_exp_elt_opcode (OP_DOUBLE);
 			  write_exp_elt_type (yyvsp[0].typed_val_float.type);
 			  current_type = yyvsp[0].typed_val_float.type;
@@ -1683,7 +1689,7 @@ yyreduce:
     break;
 
   case 53:
-#line 559 "p-exp.y"
+#line 565 "p-exp.y"
     {  if (intvar) {
  			     struct value * val, * mark;
 
@@ -1697,7 +1703,7 @@ yyreduce:
     break;
 
   case 54:
-#line 572 "p-exp.y"
+#line 578 "p-exp.y"
     { write_exp_elt_opcode (OP_LONG);
 			  write_exp_elt_type (parse_type->builtin_int);
 			  CHECK_TYPEDEF (yyvsp[-1].tval);
@@ -1706,12 +1712,12 @@ yyreduce:
     break;
 
   case 55:
-#line 580 "p-exp.y"
+#line 586 "p-exp.y"
     { write_exp_elt_opcode (UNOP_SIZEOF); }
     break;
 
   case 56:
-#line 583 "p-exp.y"
+#line 589 "p-exp.y"
     { /* C strings are converted into array constants with
 			     an explicit null byte added at the end.  Thus
 			     the array upper bound is the string length.
@@ -1736,7 +1742,7 @@ yyreduce:
     break;
 
   case 57:
-#line 608 "p-exp.y"
+#line 614 "p-exp.y"
     {
 			  struct value * this_val;
 			  struct type * this_type;
@@ -1762,7 +1768,7 @@ yyreduce:
     break;
 
   case 58:
-#line 635 "p-exp.y"
+#line 641 "p-exp.y"
     {
 			  if (yyvsp[0].ssym.sym != 0)
 			      yyval.bval = SYMBOL_BLOCK_VALUE (yyvsp[0].ssym.sym);
@@ -1781,7 +1787,7 @@ yyreduce:
     break;
 
   case 59:
-#line 653 "p-exp.y"
+#line 659 "p-exp.y"
     { struct symbol *tem
 			    = lookup_symbol (copy_name (yyvsp[0].sval), yyvsp[-2].bval,
 					     VAR_DOMAIN, (int *) NULL);
@@ -1792,7 +1798,7 @@ yyreduce:
     break;
 
   case 60:
-#line 663 "p-exp.y"
+#line 669 "p-exp.y"
     { struct symbol *sym;
 			  sym = lookup_symbol (copy_name (yyvsp[0].sval), yyvsp[-2].bval,
 					       VAR_DOMAIN, (int *) NULL);
@@ -1808,7 +1814,7 @@ yyreduce:
     break;
 
   case 61:
-#line 678 "p-exp.y"
+#line 684 "p-exp.y"
     {
 			  struct type *type = yyvsp[-2].tval;
 			  if (TYPE_CODE (type) != TYPE_CODE_STRUCT
@@ -1824,7 +1830,7 @@ yyreduce:
     break;
 
   case 63:
-#line 694 "p-exp.y"
+#line 700 "p-exp.y"
     {
 			  char *name = copy_name (yyvsp[0].sval);
 			  struct symbol *sym;
@@ -1856,7 +1862,7 @@ yyreduce:
     break;
 
   case 64:
-#line 725 "p-exp.y"
+#line 731 "p-exp.y"
     { struct symbol *sym = yyvsp[0].ssym.sym;
 
 			  if (sym)
@@ -1927,44 +1933,44 @@ yyreduce:
     break;
 
   case 67:
-#line 811 "p-exp.y"
+#line 817 "p-exp.y"
     { yyval.tval = lookup_pointer_type (yyvsp[0].tval); }
     break;
 
   case 68:
-#line 813 "p-exp.y"
+#line 819 "p-exp.y"
     { yyval.tval = yyvsp[0].tsym.type; }
     break;
 
   case 69:
-#line 815 "p-exp.y"
+#line 821 "p-exp.y"
     { yyval.tval = lookup_struct (copy_name (yyvsp[0].sval),
 					      expression_context_block); }
     break;
 
   case 70:
-#line 818 "p-exp.y"
+#line 824 "p-exp.y"
     { yyval.tval = lookup_struct (copy_name (yyvsp[0].sval),
 					      expression_context_block); }
     break;
 
   case 71:
-#line 825 "p-exp.y"
+#line 831 "p-exp.y"
     { yyval.sval = yyvsp[0].ssym.stoken; }
     break;
 
   case 72:
-#line 826 "p-exp.y"
+#line 832 "p-exp.y"
     { yyval.sval = yyvsp[0].ssym.stoken; }
     break;
 
   case 73:
-#line 827 "p-exp.y"
+#line 833 "p-exp.y"
     { yyval.sval = yyvsp[0].tsym.stoken; }
     break;
 
   case 74:
-#line 828 "p-exp.y"
+#line 834 "p-exp.y"
     { yyval.sval = yyvsp[0].ssym.stoken; }
     break;
 
@@ -1972,7 +1978,7 @@ yyreduce:
     }
 
 /* Line 1000 of yacc.c.  */
-#line 1976 "p-exp.c"
+#line 1982 "p-exp.c"
 

   yyvsp -= yylen;
   yyssp -= yylen;
@@ -2197,7 +2203,7 @@ yyreturn:
 }
 
 
-#line 842 "p-exp.y"
+#line 848 "p-exp.y"
 
 
 /* Take care of parsing a number (anything that starts with a digit).
@@ -2452,9 +2458,8 @@ static const struct token tokentab2[] =
 
 /* Allocate uppercased var: */
 /* make an uppercased copy of tokstart.  */
-static char * uptok (tokstart, namelen)
-  char *tokstart;
-  int namelen;
+static char *
+uptok (char *tokstart, int namelen)
 {
   int i;
   char *uptokstart = (char *)xmalloc(namelen+1);
@@ -3091,8 +3096,7 @@ yylex (void)
 }
 
 void
-yyerror (msg)
-     char *msg;
+yyerror (char *msg)
 {
   if (prev_lexptr)
     lexptr = prev_lexptr;
diff --git a/gdb/p-exp.y b/gdb/p-exp.y
index 7b05d58..5d344a4 100644
--- a/gdb/p-exp.y
+++ b/gdb/p-exp.y
@@ -105,6 +105,12 @@
 #define yygindex pascal_yygindex
 #define yytable	 pascal_yytable
 #define yycheck	 pascal_yycheck
+#define yyss	pascal_yyss
+#define yysslim	pascal_yysslim
+#define yyssp	pascal_yyssp
+#define yystacksize pascal_yystacksize
+#define yyvs	pascal_yyvs
+#define yyvsp	pascal_yyvsp
 
 #ifndef YYDEBUG
 #define	YYDEBUG 1		/* Default to yydebug support */
@@ -338,7 +344,7 @@ exp	:	field_exp COMPLETE
 
 exp	:	exp '['
 			/* We need to save the current_type value.  */
-			{ char *arrayname;
+			{ const char *arrayname;
 			  int arrayfieldindex;
 			  arrayfieldindex = is_pascal_string_type (
 				current_type, NULL, NULL,
@@ -1093,9 +1099,8 @@ static const struct token tokentab2[] =
 
 /* Allocate uppercased var: */
 /* make an uppercased copy of tokstart.  */
-static char * uptok (tokstart, namelen)
-  char *tokstart;
-  int namelen;
+static char *
+uptok (char *tokstart, int namelen)
 {
   int i;
   char *uptokstart = (char *)malloc(namelen+1);
@@ -1732,8 +1737,7 @@ yylex (void)
 }
 
 void
-yyerror (msg)
-     char *msg;
+yyerror (char *msg)
 {
   if (prev_lexptr)
     lexptr = prev_lexptr;
diff --git a/gdb/p-lang.c b/gdb/p-lang.c
index cd56630..c59ba0b 100644
--- a/gdb/p-lang.c
+++ b/gdb/p-lang.c
@@ -99,7 +99,7 @@ int
 is_pascal_string_type (struct type *type,int *length_pos,
                        int *length_size, int *string_pos,
 		       struct type **char_type,
-		       char **arrayname)
+		       const char **arrayname)
 {
   if (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT)
     {
@@ -444,6 +444,7 @@ const struct language_defn pascal_language_defn =
   pascal_print_typedef,		/* Print a typedef using appropriate syntax */
   pascal_val_print,		/* Print a value using appropriate syntax */
   pascal_value_print,		/* Print a top-level value */
+  default_read_var_value,	/* la_read_var_value */
   NULL,				/* Language specific skip_trampoline */
   "this",		        /* name_of_this */
   basic_lookup_symbol_nonlocal,	/* lookup_symbol_nonlocal */
@@ -459,7 +460,7 @@ const struct language_defn pascal_language_defn =
   default_print_array_index,
   default_pass_by_reference,
   default_get_string,
-  strcmp_iw_ordered,
+  NULL,				/* la_get_symbol_name_cmp */
   iterate_over_symbols,
   LANG_MAGIC
 };
diff --git a/gdb/p-lang.h b/gdb/p-lang.h
index 308b7b5..b1e218c 100644
--- a/gdb/p-lang.h
+++ b/gdb/p-lang.h
@@ -35,13 +35,13 @@ extern void pascal_print_type (struct type *, const char *, struct ui_file *,
 extern void pascal_print_typedef (struct type *, struct symbol *,
 				  struct ui_file *);
 
-extern int pascal_val_print (struct type *, const gdb_byte *, int,
-			     CORE_ADDR, struct ui_file *, int,
-			     const struct value *,
-			     const struct value_print_options *);
+extern void pascal_val_print (struct type *, const gdb_byte *, int,
+			      CORE_ADDR, struct ui_file *, int,
+			      const struct value *,
+			      const struct value_print_options *);
 
-extern int pascal_value_print (struct value *, struct ui_file *,
-			       const struct value_print_options *);
+extern void pascal_value_print (struct value *, struct ui_file *,
+				const struct value_print_options *);
 
 extern void pascal_type_print_method_args (const char *, const char *,
 					   struct ui_file *);
@@ -50,7 +50,7 @@ extern void pascal_type_print_method_args (const char *, const char *,
 
 extern int
   is_pascal_string_type (struct type *, int *, int *, int *,
-			 struct type **, char **);
+			 struct type **, const char **);
 
 extern void pascal_printchar (int, struct type *, struct ui_file *);
 
diff --git a/gdb/p-typeprint.c b/gdb/p-typeprint.c
index dae56d3..a00f5b3 100644
--- a/gdb/p-typeprint.c
+++ b/gdb/p-typeprint.c
@@ -131,7 +131,7 @@ pascal_print_typedef (struct type *type, struct symbol *new_symbol,
 static void
 pascal_type_print_derivation_info (struct ui_file *stream, struct type *type)
 {
-  char *name;
+  const char *name;
   int i;
 
   for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
@@ -629,7 +629,7 @@ pascal_type_print_base (struct type *type, struct ui_file *stream, int show,
 	    {
 	      struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
 	      int j, len2 = TYPE_FN_FIELDLIST_LENGTH (type, i);
-	      char *method_name = TYPE_FN_FIELDLIST_NAME (type, i);
+	      const char *method_name = TYPE_FN_FIELDLIST_NAME (type, i);
 
 	      /* this is GNU C++ specific
 	         how can we know constructor/destructor?
@@ -750,11 +750,12 @@ pascal_type_print_base (struct type *type, struct ui_file *stream, int show,
 		fprintf_filtered (stream, ", ");
 	      wrap_here ("    ");
 	      fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
-	      if (lastval != TYPE_FIELD_BITPOS (type, i))
+	      if (lastval != TYPE_FIELD_ENUMVAL (type, i))
 		{
 		  fprintf_filtered (stream,
-				    " := %d", TYPE_FIELD_BITPOS (type, i));
-		  lastval = TYPE_FIELD_BITPOS (type, i);
+				    " := %s",
+				    plongest (TYPE_FIELD_ENUMVAL (type, i)));
+		  lastval = TYPE_FIELD_ENUMVAL (type, i);
 		}
 	      lastval++;
 	    }
diff --git a/gdb/p-valprint.c b/gdb/p-valprint.c
index c5bef8a..b8434ed 100644
--- a/gdb/p-valprint.c
+++ b/gdb/p-valprint.c
@@ -41,11 +41,22 @@
 #include "exceptions.h"
 

 
+/* Decorations for Pascal.  */
+
+static const struct generic_val_print_decorations p_decorations =
+{
+  "",
+  " + ",
+  " * I",
+  "true",
+  "false",
+  "void"
+};
+
 /* See val_print for a description of the various parameters of this
-   function; they are identical.  The semantics of the return value is
-   also identical to val_print.  */
+   function; they are identical.  */
 
-int
+void
 pascal_val_print (struct type *type, const gdb_byte *valaddr,
 		  int embedded_offset, CORE_ADDR address,
 		  struct ui_file *stream, int recurse,
@@ -61,8 +72,8 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
   unsigned eltlen;
   int length_pos, length_size, string_pos;
   struct type *char_type;
-  LONGEST val;
   CORE_ADDR addr;
+  int want_space = 0;
 
   CHECK_TYPEDEF (type);
   switch (TYPE_CODE (type))
@@ -146,7 +157,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
 	  /* Extract the address, assume that it is unsigned.  */
 	  addr = extract_unsigned_integer (valaddr + embedded_offset,
 					   TYPE_LENGTH (type), byte_order);
-	  print_address_demangle (gdbarch, addr, stream, demangle);
+	  print_address_demangle (options, gdbarch, addr, stream, demangle);
 	  break;
 	}
       check_typedef (TYPE_TARGET_TYPE (type));
@@ -158,14 +169,14 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
       if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
 	{
 	  /* Try to print what function it points to.  */
-	  print_address_demangle (gdbarch, addr, stream, demangle);
-	  /* Return value is irrelevant except for string pointers.  */
-	  return (0);
+	  print_address_demangle (options, gdbarch, addr, stream, demangle);
+	  return;
 	}
 
       if (options->addressprint && options->format != 's')
 	{
 	  fputs_filtered (paddress (gdbarch, addr), stream);
+	  want_space = 1;
 	}
 
       /* For a pointer to char or unsigned char, also print the string
@@ -178,6 +189,8 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
 	  && (options->format == 0 || options->format == 's')
 	  && addr != 0)
 	{
+	  if (want_space)
+	    fputs_filtered (" ", stream);
 	  /* No wide string yet.  */
 	  i = val_print_string (elttype, NULL, addr, -1, stream, options);
 	}
@@ -193,6 +206,8 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
 	  ULONGEST string_length;
 	  void *buffer;
 
+	  if (want_space)
+	    fputs_filtered (" ", stream);
 	  buffer = xmalloc (length_size);
 	  read_memory (addr + length_pos, buffer, length_size);
 	  string_length = extract_unsigned_integer (buffer, length_size,
@@ -210,12 +225,17 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
 	  struct minimal_symbol *msymbol =
 	    lookup_minimal_symbol_by_pc (vt_address);
 
-	  if ((msymbol != NULL)
+	  /* If 'symbol_print' is set, we did the work above.  */
+	  if (!options->symbol_print
+	      && (msymbol != NULL)
 	      && (vt_address == SYMBOL_VALUE_ADDRESS (msymbol)))
 	    {
-	      fputs_filtered (" <", stream);
+	      if (want_space)
+		fputs_filtered (" ", stream);
+	      fputs_filtered ("<", stream);
 	      fputs_filtered (SYMBOL_PRINT_NAME (msymbol), stream);
 	      fputs_filtered (">", stream);
+	      want_space = 1;
 	    }
 	  if (vt_address && options->vtblprint)
 	    {
@@ -225,6 +245,9 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
 	      struct block *block = (struct block *) NULL;
 	      int is_this_fld;
 
+	      if (want_space)
+		fputs_filtered (" ", stream);
+
 	      if (msymbol != NULL)
 		wsym = lookup_symbol (SYMBOL_LINKAGE_NAME (msymbol), block,
 				      VAR_DOMAIN, &is_this_fld);
@@ -248,50 +271,23 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
 	    }
 	}
 
-      /* Return number of characters printed, including the terminating
-	 '\0' if we reached the end.  val_print_string takes care including
-	 the terminating '\0' if necessary.  */
-      return i;
-
-      break;
+      return;
 
     case TYPE_CODE_REF:
-      elttype = check_typedef (TYPE_TARGET_TYPE (type));
-      if (options->addressprint)
-	{
-	  CORE_ADDR addr
-	    = extract_typed_address (valaddr + embedded_offset, type);
-
-	  fprintf_filtered (stream, "@");
-          fputs_filtered (paddress (gdbarch, addr), stream);
-	  if (options->deref_ref)
-	    fputs_filtered (": ", stream);
-	}
-      /* De-reference the reference.  */
-      if (options->deref_ref)
-	{
-	  if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF)
-	    {
-	      struct value *deref_val;
-
-	      deref_val = coerce_ref_if_computed (original_value);
-	      if (deref_val != NULL)
-		{
-		  /* More complicated computed references are not supported.  */
-		  gdb_assert (embedded_offset == 0);
-		}
-	      else
-		deref_val = value_at (TYPE_TARGET_TYPE (type),
-				      unpack_pointer (type,
-						      (valaddr
-						       + embedded_offset)));
-
-	      common_val_print (deref_val, stream, recurse + 1, options,
-				current_language);
-	    }
-	  else
-	    fputs_filtered ("???", stream);
-	}
+    case TYPE_CODE_ENUM:
+    case TYPE_CODE_FLAGS:
+    case TYPE_CODE_FUNC:
+    case TYPE_CODE_RANGE:
+    case TYPE_CODE_INT:
+    case TYPE_CODE_FLT:
+    case TYPE_CODE_VOID:
+    case TYPE_CODE_ERROR:
+    case TYPE_CODE_UNDEF:
+    case TYPE_CODE_BOOL:
+    case TYPE_CODE_CHAR:
+      generic_val_print (type, valaddr, embedded_offset, address,
+			 stream, recurse, original_value, options,
+			 &p_decorations);
       break;
 
     case TYPE_CODE_UNION:
@@ -309,7 +305,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
 	     -fvtable_thunks.  (Otherwise, look under TYPE_CODE_PTR.)  */
 	  /* Extract the address, assume that it is unsigned.  */
 	  print_address_demangle
-	    (gdbarch,
+	    (options, gdbarch,
 	     extract_unsigned_integer (valaddr + embedded_offset
 				       + TYPE_FIELD_BITPOS (type,
 							    VTBL_FNADDR_OFFSET) / 8,
@@ -338,142 +334,6 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
 	}
       break;
 
-    case TYPE_CODE_ENUM:
-      if (options->format)
-	{
-	  val_print_scalar_formatted (type, valaddr, embedded_offset,
-				      original_value, options, 0, stream);
-	  break;
-	}
-      len = TYPE_NFIELDS (type);
-      val = unpack_long (type, valaddr + embedded_offset);
-      for (i = 0; i < len; i++)
-	{
-	  QUIT;
-	  if (val == TYPE_FIELD_BITPOS (type, i))
-	    {
-	      break;
-	    }
-	}
-      if (i < len)
-	{
-	  fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
-	}
-      else
-	{
-	  print_longest (stream, 'd', 0, val);
-	}
-      break;
-
-    case TYPE_CODE_FLAGS:
-      if (options->format)
-	val_print_scalar_formatted (type, valaddr, embedded_offset,
-				    original_value, options, 0, stream);
-      else
-	val_print_type_code_flags (type, valaddr + embedded_offset, stream);
-      break;
-
-    case TYPE_CODE_FUNC:
-      if (options->format)
-	{
-	  val_print_scalar_formatted (type, valaddr, embedded_offset,
-				      original_value, options, 0, stream);
-	  break;
-	}
-      /* FIXME, we should consider, at least for ANSI C language, eliminating
-         the distinction made between FUNCs and POINTERs to FUNCs.  */
-      fprintf_filtered (stream, "{");
-      type_print (type, "", stream, -1);
-      fprintf_filtered (stream, "} ");
-      /* Try to print what function it points to, and its address.  */
-      print_address_demangle (gdbarch, address, stream, demangle);
-      break;
-
-    case TYPE_CODE_BOOL:
-      if (options->format || options->output_format)
-	{
-	  struct value_print_options opts = *options;
-
-	  opts.format = (options->format ? options->format
-			 : options->output_format);
-	  val_print_scalar_formatted (type, valaddr, embedded_offset,
-				      original_value, &opts, 0, stream);
-	}
-      else
-	{
-	  val = unpack_long (type, valaddr + embedded_offset);
-	  if (val == 0)
-	    fputs_filtered ("false", stream);
-	  else if (val == 1)
-	    fputs_filtered ("true", stream);
-	  else
-	    {
-	      fputs_filtered ("true (", stream);
-	      fprintf_filtered (stream, "%ld)", (long int) val);
-	    }
-	}
-      break;
-
-    case TYPE_CODE_RANGE:
-      /* FIXME: create_range_type does not set the unsigned bit in a
-         range type (I think it probably should copy it from the target
-         type), so we won't print values which are too large to
-         fit in a signed integer correctly.  */
-      /* FIXME: Doesn't handle ranges of enums correctly.  (Can't just
-         print with the target type, though, because the size of our type
-         and the target type might differ).  */
-      /* FALLTHROUGH */
-
-    case TYPE_CODE_INT:
-      if (options->format || options->output_format)
-	{
-	  struct value_print_options opts = *options;
-
-	  opts.format = (options->format ? options->format
-			 : options->output_format);
-	  val_print_scalar_formatted (type, valaddr, embedded_offset,
-				      original_value, &opts, 0, stream);
-	}
-      else
-	{
-	  val_print_type_code_int (type, valaddr + embedded_offset, stream);
-	}
-      break;
-
-    case TYPE_CODE_CHAR:
-      if (options->format || options->output_format)
-	{
-	  struct value_print_options opts = *options;
-
-	  opts.format = (options->format ? options->format
-			 : options->output_format);
-	  val_print_scalar_formatted (type, valaddr, embedded_offset,
-				      original_value, &opts, 0, stream);
-	}
-      else
-	{
-	  val = unpack_long (type, valaddr + embedded_offset);
-	  if (TYPE_UNSIGNED (type))
-	    fprintf_filtered (stream, "%u", (unsigned int) val);
-	  else
-	    fprintf_filtered (stream, "%d", (int) val);
-	  fputs_filtered (" ", stream);
-	  LA_PRINT_CHAR ((unsigned char) val, type, stream);
-	}
-      break;
-
-    case TYPE_CODE_FLT:
-      if (options->format)
-	{
-	  val_print_scalar_formatted (type, valaddr, embedded_offset,
-				      original_value, options, 0, stream);
-	}
-      else
-	{
-	  print_floating (valaddr + embedded_offset, type, stream);
-	}
-      break;
-
     case TYPE_CODE_BITSTRING:
     case TYPE_CODE_SET:
       elttype = TYPE_INDEX_TYPE (type);
@@ -556,30 +416,14 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
 	}
       break;
 
-    case TYPE_CODE_VOID:
-      fprintf_filtered (stream, "void");
-      break;
-
-    case TYPE_CODE_ERROR:
-      fprintf_filtered (stream, "%s", TYPE_ERROR_NAME (type));
-      break;
-
-    case TYPE_CODE_UNDEF:
-      /* This happens (without TYPE_FLAG_STUB set) on systems which don't use
-         dbx xrefs (NO_DBX_XREFS in gcc) if a file has a "struct foo *bar"
-         and no complete type for struct foo in that file.  */
-      fprintf_filtered (stream, "<incomplete type>");
-      break;
-
     default:
       error (_("Invalid pascal type code %d in symbol table."),
 	     TYPE_CODE (type));
     }
   gdb_flush (stream);
-  return (0);
 }
 

-int
+void
 pascal_value_print (struct value *val, struct ui_file *stream,
 		    const struct value_print_options *options)
 {
@@ -613,7 +457,7 @@ pascal_value_print (struct value *val, struct ui_file *stream,
 	  fprintf_filtered (stream, ") ");
 	}
     }
-  return common_val_print (val, stream, 0, &opts, current_language);
+  common_val_print (val, stream, 0, &opts, current_language);
 }
 
 
@@ -649,7 +493,7 @@ const char pascal_vtbl_ptr_name[] =
 int
 pascal_object_is_vtbl_ptr_type (struct type *type)
 {
-  char *typename = type_name_no_tag (type);
+  const char *typename = type_name_no_tag (type);
 
   return (typename != NULL
 	  && strcmp (typename, pascal_vtbl_ptr_name) == 0);
@@ -912,7 +756,7 @@ pascal_object_print_value (struct type *type, const gdb_byte *valaddr,
     {
       int boffset = 0;
       struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
-      char *basename = type_name_no_tag (baseclass);
+      const char *basename = type_name_no_tag (baseclass);
       const gdb_byte *base_valaddr = NULL;
       int thisoffset;
       volatile struct gdb_exception ex;
diff --git a/gdb/parse.c b/gdb/parse.c
index b0fa237..529c517 100644
--- a/gdb/parse.c
+++ b/gdb/parse.c
@@ -75,8 +75,7 @@ struct block *expression_context_block;
 CORE_ADDR expression_context_pc;
 struct block *innermost_block;
 int arglist_len;
-union type_stack_elt *type_stack;
-int type_stack_depth, type_stack_size;
+static struct type_stack type_stack;
 char *lexptr;
 char *prev_lexptr;
 int paren_depth;
@@ -90,16 +89,6 @@ int in_parse_field;
    '->'.  This is set when parsing and is only used when completing a
    field name.  It is -1 if no dereference operation was found.  */
 static int expout_last_struct = -1;
-
-/* A temporary buffer for identifiers, so we can null-terminate them.
-
-   We allocate this with xrealloc.  parse_exp_1 used to allocate with
-   alloca, using the size of the whole expression as a conservative
-   estimate of the space needed.  However, macro expansion can
-   introduce names longer than the original expression; there's no
-   practical way to know beforehand how large that might be.  */
-char *namecopy;
-size_t namecopy_size;
 

 static int expressiondebug = 0;
 static void
@@ -123,12 +112,11 @@ show_parserdebug (struct ui_file *file, int from_tty,
 
 static void free_funcalls (void *ignore);
 
-static int prefixify_expression (struct expression *);
-
 static int prefixify_subexp (struct expression *, struct expression *, int,
 			     int);
 
-static struct expression *parse_exp_in_context (char **, struct block *, int, 
+static struct expression *parse_exp_in_context (char **, CORE_ADDR,
+						struct block *, int, 
 						int, int *);
 
 void _initialize_parse (void);
@@ -192,6 +180,35 @@ free_funcalls (void *ignore)
 /* This page contains the functions for adding data to the struct expression
    being constructed.  */
 
+/* See definition in parser-defs.h.  */
+
+void
+initialize_expout (int initial_size, const struct language_defn *lang,
+		   struct gdbarch *gdbarch)
+{
+  expout_size = initial_size;
+  expout_ptr = 0;
+  expout = xmalloc (sizeof (struct expression)
+		    + EXP_ELEM_TO_BYTES (expout_size));
+  expout->language_defn = lang;
+  expout->gdbarch = gdbarch;
+}
+
+/* See definition in parser-defs.h.  */
+
+void
+reallocate_expout (void)
+{
+  /* Record the actual number of expression elements, and then
+     reallocate the expression memory so that we free up any
+     excess elements.  */
+
+  expout->nelts = expout_ptr;
+  expout = xrealloc ((char *) expout,
+		     sizeof (struct expression)
+		     + EXP_ELEM_TO_BYTES (expout_ptr));
+}
+
 /* Add one element to the end of the expression.  */
 
 /* To avoid a bug in the Sun 4 compiler, we pass things that can fit into
@@ -744,13 +761,28 @@ find_template_name_end (char *p)
 }
 

 
+/* Return a null-terminated temporary copy of the name of a string token.
+
+   Tokens that refer to names do so with explicit pointer and length,
+   so they can share the storage that lexptr is parsing.
+   When it is necessary to pass a name to a function that expects
+   a null-terminated string, the substring is copied out
+   into a separate block of storage.
 
-/* Return a null-terminated temporary copy of the name
-   of a string token.  */
+   N.B. A single buffer is reused on each call.  */
 
 char *
 copy_name (struct stoken token)
 {
+  /* A temporary buffer for identifiers, so we can null-terminate them.
+     We allocate this with xrealloc.  parse_exp_1 used to allocate with
+     alloca, using the size of the whole expression as a conservative
+     estimate of the space needed.  However, macro expansion can
+     introduce names longer than the original expression; there's no
+     practical way to know beforehand how large that might be.  */
+  static char *namecopy;
+  static size_t namecopy_size;
+
   /* Make sure there's enough space for the token.  */
   if (namecopy_size < token.length + 1)
     {
@@ -764,14 +796,10 @@ copy_name (struct stoken token)
   return namecopy;
 }
 

-/* Reverse an expression from suffix form (in which it is constructed)
-   to prefix form (in which we can conveniently print or execute it).
-   Ordinarily this always returns -1.  However, if EXPOUT_LAST_STRUCT
-   is not -1 (i.e., we are trying to complete a field name), it will
-   return the index of the subexpression which is the left-hand-side
-   of the struct operation at EXPOUT_LAST_STRUCT.  */
 
-static int
+/* See comments on parser-defs.h.  */
+
+int
 prefixify_expression (struct expression *expr)
 {
   int len = sizeof (struct expression) + EXP_ELEM_TO_BYTES (expr->nelts);
@@ -1069,9 +1097,9 @@ prefixify_subexp (struct expression *inexpr,
    If COMMA is nonzero, stop if a comma is reached.  */
 
 struct expression *
-parse_exp_1 (char **stringptr, struct block *block, int comma)
+parse_exp_1 (char **stringptr, CORE_ADDR pc, struct block *block, int comma)
 {
-  return parse_exp_in_context (stringptr, block, comma, 0, NULL);
+  return parse_exp_in_context (stringptr, pc, block, comma, 0, NULL);
 }
 
 /* As for parse_exp_1, except that if VOID_CONTEXT_P, then
@@ -1082,8 +1110,8 @@ parse_exp_1 (char **stringptr, struct block *block, int comma)
    is left untouched.  */
 
 static struct expression *
-parse_exp_in_context (char **stringptr, struct block *block, int comma, 
-		      int void_context_p, int *out_subexp)
+parse_exp_in_context (char **stringptr, CORE_ADDR pc, struct block *block,
+		      int comma, int void_context_p, int *out_subexp)
 {
   volatile struct gdb_exception except;
   struct cleanup *old_chain;
@@ -1094,7 +1122,7 @@ parse_exp_in_context (char **stringptr, struct block *block, int comma,
   prev_lexptr = NULL;
 
   paren_depth = 0;
-  type_stack_depth = 0;
+  type_stack.depth = 0;
   expout_last_struct = -1;
 
   comma_terminates = comma;
@@ -1110,8 +1138,10 @@ parse_exp_in_context (char **stringptr, struct block *block, int comma,
   /* If no context specified, try using the current frame, if any.  */
   if (!expression_context_block)
     expression_context_block = get_selected_block (&expression_context_pc);
-  else
+  else if (pc == 0)
     expression_context_pc = BLOCK_START (expression_context_block);
+  else
+    expression_context_pc = pc;
 
   /* Fall back to using the current source static context, if any.  */
 
@@ -1151,12 +1181,7 @@ parse_exp_in_context (char **stringptr, struct block *block, int comma,
   else
     lang = current_language;
 
-  expout_size = 10;
-  expout_ptr = 0;
-  expout = (struct expression *)
-    xmalloc (sizeof (struct expression) + EXP_ELEM_TO_BYTES (expout_size));
-  expout->language_defn = lang;
-  expout->gdbarch = get_current_arch ();
+  initialize_expout (10, lang, get_current_arch ());
 
   TRY_CATCH (except, RETURN_MASK_ALL)
     {
@@ -1174,14 +1199,7 @@ parse_exp_in_context (char **stringptr, struct block *block, int comma,
 
   discard_cleanups (old_chain);
 
-  /* Record the actual number of expression elements, and then
-     reallocate the expression memory so that we free up any
-     excess elements.  */
-
-  expout->nelts = expout_ptr;
-  expout = (struct expression *)
-    xrealloc ((char *) expout,
-	      sizeof (struct expression) + EXP_ELEM_TO_BYTES (expout_ptr));
+  reallocate_expout ();
 
   /* Convert expression from postfix form as generated by yacc
      parser, to a prefix form.  */
@@ -1211,7 +1229,7 @@ parse_expression (char *string)
 {
   struct expression *exp;
 
-  exp = parse_exp_1 (&string, 0, 0);
+  exp = parse_exp_1 (&string, 0, 0, 0);
   if (*string)
     error (_("Junk after end of expression."));
   return exp;
@@ -1236,7 +1254,7 @@ parse_field_expression (char *string, char **name)
   TRY_CATCH (except, RETURN_MASK_ERROR)
     {
       in_parse_field = 1;
-      exp = parse_exp_in_context (&string, 0, 0, 0, &subexp);
+      exp = parse_exp_in_context (&string, 0, 0, 0, 0, &subexp);
     }
   in_parse_field = 0;
   if (except.reason < 0 || ! exp)
@@ -1282,7 +1300,6 @@ int
 parse_float (const char *p, int len, DOUBLEST *d, const char **suffix)
 {
   char *copy;
-  char *s;
   int n, num;
 
   copy = xmalloc (len + 1);
@@ -1341,54 +1358,214 @@ parse_c_float (struct gdbarch *gdbarch, const char *p, int len,
 /* Stuff for maintaining a stack of types.  Currently just used by C, but
    probably useful for any language which declares its types "backwards".  */
 
+/* Ensure that there are HOWMUCH open slots on the type stack STACK.  */
+
 static void
-check_type_stack_depth (void)
+type_stack_reserve (struct type_stack *stack, int howmuch)
 {
-  if (type_stack_depth == type_stack_size)
+  if (stack->depth + howmuch >= stack->size)
     {
-      type_stack_size *= 2;
-      type_stack = (union type_stack_elt *)
-	xrealloc ((char *) type_stack, type_stack_size * sizeof (*type_stack));
+      stack->size *= 2;
+      if (stack->size < howmuch)
+	stack->size = howmuch;
+      stack->elements = xrealloc (stack->elements,
+				  stack->size * sizeof (union type_stack_elt));
     }
 }
 
+/* Ensure that there is a single open slot in the global type stack.  */
+
+static void
+check_type_stack_depth (void)
+{
+  type_stack_reserve (&type_stack, 1);
+}
+
+/* A helper function for insert_type and insert_type_address_space.
+   This does work of expanding the type stack and inserting the new
+   element, ELEMENT, into the stack at location SLOT.  */
+
+static void
+insert_into_type_stack (int slot, union type_stack_elt element)
+{
+  check_type_stack_depth ();
+
+  if (slot < type_stack.depth)
+    memmove (&type_stack.elements[slot + 1], &type_stack.elements[slot],
+	     (type_stack.depth - slot) * sizeof (union type_stack_elt));
+  type_stack.elements[slot] = element;
+  ++type_stack.depth;
+}
+
+/* Insert a new type, TP, at the bottom of the type stack.  If TP is
+   tp_pointer or tp_reference, it is inserted at the bottom.  If TP is
+   a qualifier, it is inserted at slot 1 (just above a previous
+   tp_pointer) if there is anything on the stack, or simply pushed if
+   the stack is empty.  Other values for TP are invalid.  */
+
+void
+insert_type (enum type_pieces tp)
+{
+  union type_stack_elt element;
+  int slot;
+
+  gdb_assert (tp == tp_pointer || tp == tp_reference
+	      || tp == tp_const || tp == tp_volatile);
+
+  /* If there is anything on the stack (we know it will be a
+     tp_pointer), insert the qualifier above it.  Otherwise, simply
+     push this on the top of the stack.  */
+  if (type_stack.depth && (tp == tp_const || tp == tp_volatile))
+    slot = 1;
+  else
+    slot = 0;
+
+  element.piece = tp;
+  insert_into_type_stack (slot, element);
+}
+
 void
 push_type (enum type_pieces tp)
 {
   check_type_stack_depth ();
-  type_stack[type_stack_depth++].piece = tp;
+  type_stack.elements[type_stack.depth++].piece = tp;
 }
 
 void
 push_type_int (int n)
 {
   check_type_stack_depth ();
-  type_stack[type_stack_depth++].int_val = n;
+  type_stack.elements[type_stack.depth++].int_val = n;
 }
 
+/* Insert a tp_space_identifier and the corresponding address space
+   value into the stack.  STRING is the name of an address space, as
+   recognized by address_space_name_to_int.  If the stack is empty,
+   the new elements are simply pushed.  If the stack is not empty,
+   this function assumes that the first item on the stack is a
+   tp_pointer, and the new values are inserted above the first
+   item.  */
+
 void
-push_type_address_space (char *string)
+insert_type_address_space (char *string)
 {
-  push_type_int (address_space_name_to_int (parse_gdbarch, string));
+  union type_stack_elt element;
+  int slot;
+
+  /* If there is anything on the stack (we know it will be a
+     tp_pointer), insert the address space qualifier above it.
+     Otherwise, simply push this on the top of the stack.  */
+  if (type_stack.depth)
+    slot = 1;
+  else
+    slot = 0;
+
+  element.piece = tp_space_identifier;
+  insert_into_type_stack (slot, element);
+  element.int_val = address_space_name_to_int (parse_gdbarch, string);
+  insert_into_type_stack (slot, element);
 }
 
 enum type_pieces
 pop_type (void)
 {
-  if (type_stack_depth)
-    return type_stack[--type_stack_depth].piece;
+  if (type_stack.depth)
+    return type_stack.elements[--type_stack.depth].piece;
   return tp_end;
 }
 
 int
 pop_type_int (void)
 {
-  if (type_stack_depth)
-    return type_stack[--type_stack_depth].int_val;
+  if (type_stack.depth)
+    return type_stack.elements[--type_stack.depth].int_val;
   /* "Can't happen".  */
   return 0;
 }
 
+/* Pop a type list element from the global type stack.  */
+
+static VEC (type_ptr) *
+pop_typelist (void)
+{
+  gdb_assert (type_stack.depth);
+  return type_stack.elements[--type_stack.depth].typelist_val;
+}
+
+/* Pop a type_stack element from the global type stack.  */
+
+static struct type_stack *
+pop_type_stack (void)
+{
+  gdb_assert (type_stack.depth);
+  return type_stack.elements[--type_stack.depth].stack_val;
+}
+
+/* Append the elements of the type stack FROM to the type stack TO.
+   Always returns TO.  */
+
+struct type_stack *
+append_type_stack (struct type_stack *to, struct type_stack *from)
+{
+  type_stack_reserve (to, from->depth);
+
+  memcpy (&to->elements[to->depth], &from->elements[0],
+	  from->depth * sizeof (union type_stack_elt));
+  to->depth += from->depth;
+
+  return to;
+}
+
+/* Push the type stack STACK as an element on the global type stack.  */
+
+void
+push_type_stack (struct type_stack *stack)
+{
+  check_type_stack_depth ();
+  type_stack.elements[type_stack.depth++].stack_val = stack;
+  push_type (tp_type_stack);
+}
+
+/* Copy the global type stack into a newly allocated type stack and
+   return it.  The global stack is cleared.  The returned type stack
+   must be freed with type_stack_cleanup.  */
+
+struct type_stack *
+get_type_stack (void)
+{
+  struct type_stack *result = XNEW (struct type_stack);
+
+  *result = type_stack;
+  type_stack.depth = 0;
+  type_stack.size = 0;
+  type_stack.elements = NULL;
+
+  return result;
+}
+
+/* A cleanup function that destroys a single type stack.  */
+
+void
+type_stack_cleanup (void *arg)
+{
+  struct type_stack *stack = arg;
+
+  xfree (stack->elements);
+  xfree (stack);
+}
+
+/* Push a function type with arguments onto the global type stack.
+   LIST holds the argument types.  If the final item in LIST is NULL,
+   then the function will be varargs.  */
+
+void
+push_typelist (VEC (type_ptr) *list)
+{
+  check_type_stack_depth ();
+  type_stack.elements[type_stack.depth++].typelist_val = list;
+  push_type (tp_function_with_arguments);
+}
+
 /* Pop the type stack and return the type which corresponds to FOLLOW_TYPE
    as modified by all the stuff on the stack.  */
 struct type *
@@ -1475,6 +1652,36 @@ follow_types (struct type *follow_type)
 	   done with it.  */
 	follow_type = lookup_function_type (follow_type);
 	break;
+
+      case tp_function_with_arguments:
+	{
+	  VEC (type_ptr) *args = pop_typelist ();
+
+	  follow_type
+	    = lookup_function_type_with_arguments (follow_type,
+						   VEC_length (type_ptr, args),
+						   VEC_address (type_ptr,
+								args));
+	  VEC_free (type_ptr, args);
+	}
+	break;
+
+      case tp_type_stack:
+	{
+	  struct type_stack *stack = pop_type_stack ();
+	  /* Sort of ugly, but not really much worse than the
+	     alternatives.  */
+	  struct type_stack save = type_stack;
+
+	  type_stack = *stack;
+	  follow_type = follow_types (follow_type);
+	  gdb_assert (type_stack.depth == 0);
+
+	  type_stack = save;
+	}
+	break;
+      default:
+	gdb_assert_not_reached ("unrecognized tp_ value in follow_types");
       }
   return follow_type;
 }
@@ -1642,10 +1849,9 @@ exp_uses_objfile (struct expression *exp, struct objfile *objfile)
 void
 _initialize_parse (void)
 {
-  type_stack_size = 80;
-  type_stack_depth = 0;
-  type_stack = (union type_stack_elt *)
-    xmalloc (type_stack_size * sizeof (*type_stack));
+  type_stack.size = 0;
+  type_stack.depth = 0;
+  type_stack.elements = NULL;
 
   add_setshow_zinteger_cmd ("expression", class_maintenance,
 			    &expressiondebug,
diff --git a/gdb/parser-defs.h b/gdb/parser-defs.h
index d14aea6..86f3bdf 100644
--- a/gdb/parser-defs.h
+++ b/gdb/parser-defs.h
@@ -25,6 +25,7 @@
 #define PARSER_DEFS_H 1
 
 #include "doublest.h"
+#include "vec.h"
 
 struct block;
 
@@ -107,6 +108,8 @@ struct objc_class_str
     int class;
   };
 
+typedef struct type *type_ptr;
+DEF_VEC_P (type_ptr);
 
 /* For parsing of complicated types.
    An array should be preceded in the list by the size of the array.  */
@@ -116,19 +119,57 @@ enum type_pieces
     tp_pointer, 
     tp_reference, 
     tp_array, 
-    tp_function, 
+    tp_function,
+    tp_function_with_arguments,
     tp_const, 
     tp_volatile, 
-    tp_space_identifier
+    tp_space_identifier,
+    tp_type_stack
   };
 /* The stack can contain either an enum type_pieces or an int.  */
 union type_stack_elt
   {
     enum type_pieces piece;
     int int_val;
+    struct type_stack *stack_val;
+    VEC (type_ptr) *typelist_val;
   };
-extern union type_stack_elt *type_stack;
-extern int type_stack_depth, type_stack_size;
+
+/* The type stack is an instance of this structure.  */
+
+struct type_stack
+{
+  /* Elements on the stack.  */
+  union type_stack_elt *elements;
+  /* Current stack depth.  */
+  int depth;
+  /* Allocated size of stack.  */
+  int size;
+};
+
+/* Helper function to initialize the expout, expout_size, expout_ptr
+   trio before it is used to store expression elements created during
+   the parsing of an expression.  INITIAL_SIZE is the initial size of
+   the expout array.  LANG is the language used to parse the expression.
+   And GDBARCH is the gdbarch to use during parsing.  */
+
+extern void initialize_expout (int, const struct language_defn *,
+			       struct gdbarch *);
+
+/* Helper function that frees any unsed space in the expout array.
+   It is generally used when the parser has just been parsed and
+   created.  */
+
+extern void reallocate_expout (void);
+
+/* Reverse an expression from suffix form (in which it is constructed)
+   to prefix form (in which we can conveniently print or execute it).
+   Ordinarily this always returns -1.  However, if EXPOUT_LAST_STRUCT
+   is not -1 (i.e., we are trying to complete a field name), it will
+   return the index of the subexpression which is the left-hand-side
+   of the struct operation at EXPOUT_LAST_STRUCT.  */
+
+extern int prefixify_expression (struct expression *expr);
 
 extern void write_exp_elt_opcode (enum exp_opcode);
 
@@ -168,16 +209,29 @@ extern int end_arglist (void);
 
 extern char *copy_name (struct stoken);
 
+extern void insert_type (enum type_pieces);
+
 extern void push_type (enum type_pieces);
 
 extern void push_type_int (int);
 
-extern void push_type_address_space (char *);
+extern void insert_type_address_space (char *);
 
 extern enum type_pieces pop_type (void);
 
 extern int pop_type_int (void);
 
+extern struct type_stack *get_type_stack (void);
+
+extern struct type_stack *append_type_stack (struct type_stack *to,
+					     struct type_stack *from);
+
+extern void push_type_stack (struct type_stack *stack);
+
+extern void type_stack_cleanup (void *arg);
+
+extern void push_typelist (VEC (type_ptr) *typelist);
+
 extern int length_of_subexp (struct expression *, int);
 
 extern int dump_subexp (struct expression *, struct ui_file *, int);
@@ -216,17 +270,6 @@ extern char *lexptr;
    Currently used only for error reporting.  */
 extern char *prev_lexptr;
 
-/* Tokens that refer to names do so with explicit pointer and length,
-   so they can share the storage that lexptr is parsing.
-
-   When it is necessary to pass a name to a function that expects
-   a null-terminated string, the substring is copied out
-   into a block of storage that namecopy points to.
-
-   namecopy is allocated once, guaranteed big enough, for each parsing.  */
-
-extern char *namecopy;
-
 /* Current depth in parentheses within the expression.  */
 
 extern int paren_depth;
diff --git a/gdb/po/gdb.pot b/gdb/po/gdb.pot
index f726b2f..b0693bd 100644
--- a/gdb/po/gdb.pot
+++ b/gdb/po/gdb.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-04-26 15:22+0000\n"
+"POT-Creation-Date: 2012-08-17 17:36+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -16,547 +16,547 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ada-exp.y:259
+#: ada-exp.y:265
 msgid "Invalid conversion"
 msgstr ""
 
-#: ada-exp.y:277
+#: ada-exp.y:283
 msgid "Type required for qualification"
 msgstr ""
 
-#: ada-exp.y:295
+#: ada-exp.y:301
 msgid "Cannot slice a type"
 msgstr ""
 
-#: ada-exp.y:363
+#: ada-exp.y:369
 msgid "Type required within braces in coercion"
 msgstr ""
 
-#: ada-exp.y:433 ada-exp.y:451
+#: ada-exp.y:439 ada-exp.y:457
 msgid "Right operand of 'in' must be type"
 msgstr ""
 
-#: ada-exp.y:564
+#: ada-exp.y:570
 msgid "Prefix must be type"
 msgstr ""
 
-#: ada-exp.y:615
+#: ada-exp.y:621
 msgid "NEW not implemented."
 msgstr ""
 
-#: ada-exp.y:781
+#: ada-exp.y:787
 #, possible-c-format
 msgid "Error in expression, near `%s'."
 msgstr ""
 
-#: ada-exp.y:809
+#: ada-exp.y:815
 #, possible-c-format
 msgid "Invalid operator symbol `%s'"
 msgstr ""
 
-#: ada-exp.y:874
+#: ada-exp.y:879
 msgid "Could not find renamed symbol"
 msgstr ""
 
-#: ada-exp.y:883
+#: ada-exp.y:887
 #, possible-c-format
 msgid "Could not find renamed variable: %s"
 msgstr ""
 
-#: ada-exp.y:956
+#: ada-exp.y:960
 #, possible-c-format
 msgid "Could not find %s"
 msgstr ""
 
-#: ada-exp.y:1005
+#: ada-exp.y:1010
 msgid "Internal error in encoding of renaming declaration"
 msgstr ""
 
-#: ada-exp.y:1036 c-exp.y:740 objc-exp.y:628 p-exp.y:646
+#: ada-exp.y:1041 c-exp.y:759 objc-exp.y:634 p-exp.y:652
 #, possible-c-format
 msgid "No file or function \"%s\"."
 msgstr ""
 
-#: ada-exp.y:1038 c-exp.y:754 m2-exp.y:565 objc-exp.y:639 p-exp.y:657
+#: ada-exp.y:1043 c-exp.y:773 m2-exp.y:561 objc-exp.y:645 p-exp.y:663
 #, possible-c-format
 msgid "No function \"%s\" in specified context."
 msgstr ""
 
-#: ada-exp.y:1043
+#: ada-exp.y:1048
 #, possible-c-format
 msgid "Function name \"%s\" ambiguous here"
 msgstr ""
 
-#: ada-exp.y:1332
+#: ada-exp.y:1336
 msgid "impossible value from ada_parse_renaming"
 msgstr ""
 
-#: ada-exp.y:1350
+#: ada-exp.y:1354
 #, possible-c-format
 msgid "Invalid attempt to select from type: \"%s\"."
 msgstr ""
 
-#: ada-exp.y:1382
+#: ada-exp.y:1386
 #, possible-c-format
 msgid "No definition of \"%s\" found."
 msgstr ""
 
-#: ada-exp.y:1395 c-exp.y:860 c-exp.y:912 cli/cli-cmds.c:915 f-exp.y:519
-#: linespec.c:2133 linespec.c:2959 objc-exp.y:721 objc-exp.y:775 p-exp.y:716
-#: p-exp.y:785 source.c:177 symtab.c:3030
+#: ada-exp.y:1399 c-exp.y:886 c-exp.y:938 cli/cli-cmds.c:919 f-exp.y:525
+#: go-exp.y:628 linespec.c:1371 linespec.c:2881 objc-exp.y:734 objc-exp.y:788
+#: p-exp.y:722 p-exp.y:791 source.c:177 symtab.c:3238
 msgid "No symbol table is loaded.  Use the \"file\" command."
 msgstr ""
 
-#: ada-exp.y:1397
+#: ada-exp.y:1401
 #, possible-c-format
 msgid "No definition of \"%s\" in current context."
 msgstr ""
 
-#: ada-exp.y:1399
+#: ada-exp.y:1403
 #, possible-c-format
 msgid "No definition of \"%s\" in specified context."
 msgstr ""
 
-#: ada-exp.y:1404
+#: ada-exp.y:1408
 #, possible-c-format
 msgid "Could not find renamed symbol \"%s\""
 msgstr ""
 
-#: ada-exp.y:1438
+#: ada-exp.y:1442
 msgid "Invalid use of type."
 msgstr ""
 
-#: ada-lang.c:511
+#: ada-lang.c:515
 #, possible-c-format
 msgid "Unable to find field %s in struct %s.  Aborting"
 msgstr ""
 
-#: ada-lang.c:632
+#: ada-lang.c:636
 msgid "object size is larger than varsize-limit"
 msgstr ""
 
-#: ada-lang.c:696
+#: ada-lang.c:700
 msgid "Unexpected type in ada_discrete_type_high_bound."
 msgstr ""
 
-#: ada-lang.c:716
+#: ada-lang.c:720
 msgid "Unexpected type in ada_discrete_type_low_bound."
 msgstr ""
 
-#: ada-lang.c:775
+#: ada-lang.c:819
 msgid "Invalid address for Ada main program name."
 msgstr ""
 
-#: ada-lang.c:855
+#: ada-lang.c:899
 #, possible-c-format
 msgid "invalid Ada operator name: %s"
 msgstr ""
 
-#: ada-lang.c:1517 ada-lang.c:1535 ada-lang.c:1549 ada-lang.c:1617
+#: ada-lang.c:1561 ada-lang.c:1579 ada-lang.c:1593 ada-lang.c:1661
 msgid "Bad GNAT array descriptor"
 msgstr ""
 
-#: ada-lang.c:1654
+#: ada-lang.c:1698
 msgid "Bad GNAT array descriptor bounds"
 msgstr ""
 
-#: ada-lang.c:1897
+#: ada-lang.c:1941
 msgid "Bounds unavailable for null array pointer."
 msgstr ""
 
-#: ada-lang.c:1986
+#: ada-lang.c:2030
 msgid "could not understand bit size information on packed array"
 msgstr ""
 
-#: ada-lang.c:2066
+#: ada-lang.c:2118
 msgid "could not find bounds information on packed array"
 msgstr ""
 
-#: ada-lang.c:2073
+#: ada-lang.c:2125
 msgid "could not understand bounds information on packed array"
 msgstr ""
 
-#: ada-lang.c:2107
+#: ada-lang.c:2159
 msgid "can't unpack array"
 msgstr ""
 
-#: ada-lang.c:2160
+#: ada-lang.c:2212
 msgid "attempt to do packed indexing of something other than a packed array"
 msgstr ""
 
-#: ada-lang.c:2170
+#: ada-lang.c:2222
 msgid "don't know bounds of array"
 msgstr ""
 
-#: ada-lang.c:2176
+#: ada-lang.c:2228
 #, possible-c-format
 msgid "packed array index %ld out of bounds"
 msgstr ""
 
-#: ada-lang.c:2455 ada-lang.c:8728 valops.c:1218
+#: ada-lang.c:2510 ada-lang.c:8838 valops.c:1222
 msgid "Left operand of assignment is not a modifiable lvalue."
 msgstr ""
 
-#: ada-lang.c:2552 ada-lang.c:2573
+#: ada-lang.c:2606 ada-lang.c:2627
 #, possible-c-format
 msgid "too many subscripts (%d expected)"
 msgstr ""
 
-#: ada-lang.c:2704
+#: ada-lang.c:2758
 #, possible-c-format
 msgid "invalid dimension number to '%s"
 msgstr ""
 
-#: ada-lang.c:2723
+#: ada-lang.c:2777
 msgid "attempt to take bound of something that is not an array"
 msgstr ""
 
-#: ada-lang.c:2843
+#: ada-lang.c:2897
 msgid "Could not find operator name for opcode"
 msgstr ""
 
-#: ada-lang.c:3033
+#: ada-lang.c:3087
 msgid "Unexpected operator during name resolution"
 msgstr ""
 
-#: ada-lang.c:3097
+#: ada-lang.c:3151
 #, possible-c-format
 msgid "No definition found for %s"
 msgstr ""
 
-#: ada-lang.c:3109 ada-lang.c:3161
+#: ada-lang.c:3163 ada-lang.c:3215
 #, possible-c-format
 msgid "Could not find a match for %s"
 msgstr ""
 
-#: ada-lang.c:3114 ada-lang.c:3394
+#: ada-lang.c:3168 ada-lang.c:3448
 #, possible-c-format
 msgid "Multiple matches for %s\n"
 msgstr ""
 
-#: ada-lang.c:3482
+#: ada-lang.c:3536
 msgid "Request to select 0 symbols!"
 msgstr ""
 
-#: ada-lang.c:3487 linespec.c:626
+#: ada-lang.c:3541 linespec.c:1278
 msgid ""
 "canceled because the command is ambiguous\n"
 "See set/show multiple-symbol."
 msgstr ""
 
-#: ada-lang.c:3497
+#: ada-lang.c:3551
 msgid "[0] cancel\n"
 msgstr ""
 
-#: ada-lang.c:3499
+#: ada-lang.c:3553
 msgid "[1] all\n"
 msgstr ""
 
-#: ada-lang.c:3514
+#: ada-lang.c:3568
 #, possible-c-format
 msgid "[%d] %s at <no source file available>:%d\n"
 msgstr ""
 
-#: ada-lang.c:3519 ada-lang.c:3533
+#: ada-lang.c:3573 ada-lang.c:3587
 #, possible-c-format
 msgid "[%d] %s at %s:%d\n"
 msgstr ""
 
-#: ada-lang.c:3543
+#: ada-lang.c:3597
 #, possible-c-format
 msgid "'(%s) (enumeral)\n"
 msgstr ""
 
-#: ada-lang.c:3548
+#: ada-lang.c:3602
 #, possible-c-format
 msgid "[%d] %s in %s (enumeral)\n"
 msgstr ""
 
-#: ada-lang.c:3549
+#: ada-lang.c:3603
 #, possible-c-format
 msgid "[%d] %s at %s:?\n"
 msgstr ""
 
-#: ada-lang.c:3555
+#: ada-lang.c:3609
 #, possible-c-format
 msgid "[%d] %s (enumeral)\n"
 msgstr ""
 
-#: ada-lang.c:3556
+#: ada-lang.c:3610
 #, possible-c-format
 msgid "[%d] %s at ?\n"
 msgstr ""
 
-#: ada-lang.c:3603 ada-lang.c:3617 linespec.c:649
+#: ada-lang.c:3657 ada-lang.c:3670 linespec.c:1306
 msgid "one or more choice numbers"
 msgstr ""
 
-#: ada-lang.c:3624
+#: ada-lang.c:3677
 msgid "Argument must be choice number"
 msgstr ""
 
-#: ada-lang.c:3628
+#: ada-lang.c:3681
 msgid "cancelled"
 msgstr ""
 
-#: ada-lang.c:3655
+#: ada-lang.c:3708
 #, possible-c-format
 msgid "Select no more than %d of the above"
 msgstr ""
 
 #. PNH: Do we ever get here?  See ada_search_struct_field,
 #. find_struct_field.
-#: ada-lang.c:6540
+#: ada-lang.c:6638
 msgid "Cannot assign this kind of variant record"
 msgstr ""
 
-#: ada-lang.c:6637 valops.c:2350
+#: ada-lang.c:6735 valops.c:2399
 #, possible-c-format
 msgid "There is no member named %s."
 msgstr ""
 
-#: ada-lang.c:6643
+#: ada-lang.c:6741
 msgid "Attempt to extract a component of a value that is not a record."
 msgstr ""
 
-#: ada-lang.c:6694
+#: ada-lang.c:6792
 msgid "Type (null) is not a structure or union type"
 msgstr ""
 
 #. XXX: type_sprint
-#: ada-lang.c:6698 ada-lang.c:6777 ada-lang.c:6784
+#: ada-lang.c:6796 ada-lang.c:6875 ada-lang.c:6882
 msgid "Type "
 msgstr ""
 
-#: ada-lang.c:6700
+#: ada-lang.c:6798
 msgid " is not a structure or union type"
 msgstr ""
 
-#: ada-lang.c:6779
+#: ada-lang.c:6877
 msgid " has no component named <null>"
 msgstr ""
 
-#: ada-lang.c:6786
+#: ada-lang.c:6884
 #, possible-c-format
 msgid " has no component named %s"
 msgstr ""
 
-#: ada-lang.c:7125
+#: ada-lang.c:7227
 msgid "unexpected null name on descriptive type"
 msgstr ""
 
-#: ada-lang.c:7479
+#: ada-lang.c:7582
 #, possible-c-format
 msgid "Invalid type size for `%s' detected: %d."
 msgstr ""
 
-#: ada-lang.c:7482
+#: ada-lang.c:7585
 #, possible-c-format
 msgid "Invalid type size for <unnamed> detected: %d."
 msgstr ""
 
-#: ada-lang.c:7493
+#: ada-lang.c:7596
 msgid "record type with dynamic size is larger than varsize-limit"
 msgstr ""
 
-#: ada-lang.c:7806
+#: ada-lang.c:7909
 msgid "array type with dynamic size is larger than varsize-limit"
 msgstr ""
 
-#: ada-lang.c:8162
+#: ada-lang.c:8272
 msgid "'POS only defined on discrete types"
 msgstr ""
 
-#: ada-lang.c:8174
+#: ada-lang.c:8284
 msgid "enumeration value is invalid: can't find 'POS"
 msgstr ""
 
-#: ada-lang.c:8192
+#: ada-lang.c:8302
 msgid "'VAL only defined on discrete types"
 msgstr ""
 
-#: ada-lang.c:8194
+#: ada-lang.c:8304
 msgid "'VAL requires integral argument"
 msgstr ""
 
-#: ada-lang.c:8201
+#: ada-lang.c:8311
 msgid "argument to 'VAL out of range"
 msgstr ""
 
-#: ada-lang.c:8538
+#: ada-lang.c:8648
 msgid "Incompatible types in assignment"
 msgstr ""
 
-#: ada-lang.c:8572
+#: ada-lang.c:8682
 #, possible-c-format
 msgid "second operand of %s must not be zero."
 msgstr ""
 
-#: ada-lang.c:8617
+#: ada-lang.c:8727
 msgid "Attempt to compare array with non-array"
 msgstr ""
 
-#: ada-lang.c:8746
+#: ada-lang.c:8856
 msgid "Left-hand side must be array or record."
 msgstr ""
 
-#: ada-lang.c:8771
+#: ada-lang.c:8881
 msgid "Misplaced 'others' clause"
 msgstr ""
 
-#: ada-lang.c:8776
+#: ada-lang.c:8886
 msgid "Internal error: bad aggregate clause"
 msgstr ""
 
-#: ada-lang.c:8798
+#: ada-lang.c:8908
 msgid "Extra components in aggregate ignored."
 msgstr ""
 
-#: ada-lang.c:8865
+#: ada-lang.c:8975
 msgid "Invalid record component association."
 msgstr ""
 
-#: ada-lang.c:8871
+#: ada-lang.c:8981
 #, possible-c-format
 msgid "Unknown component name: %s."
 msgstr ""
 
-#: ada-lang.c:8876
+#: ada-lang.c:8986
 msgid "Index in component association out of bounds."
 msgstr ""
 
-#: ada-lang.c:8952
+#: ada-lang.c:9062
 msgid "Internal error: miscounted aggregate components."
 msgstr ""
 
-#: ada-lang.c:9321
+#: ada-lang.c:9431
 msgid "Fixed-point values must be assigned to fixed-point variables"
 msgstr ""
 
-#: ada-lang.c:9338
+#: ada-lang.c:9448
 msgid "Operands of fixed-point addition must have the same type"
 msgstr ""
 
-#: ada-lang.c:9360
+#: ada-lang.c:9470
 msgid "Operands of fixed-point subtraction must have the same type"
 msgstr ""
 
 #. Only encountered when an unresolved symbol occurs in a
 #. context other than a function call, in which case, it is
 #. invalid.
-#: ada-lang.c:9462 ada-lang.c:9532
+#: ada-lang.c:9572 ada-lang.c:9641
 #, possible-c-format
 msgid "Unexpected unresolved symbol, %s, during evaluation"
 msgstr ""
 
-#: ada-lang.c:9581
+#: ada-lang.c:9690
 #, possible-c-format
 msgid "cannot subscript or call something of type `%s'"
 msgstr ""
 
-#: ada-lang.c:9600
+#: ada-lang.c:9726
 msgid "cannot subscript or call a record"
 msgstr ""
 
-#: ada-lang.c:9602
+#: ada-lang.c:9728
 #, possible-c-format
 msgid "wrong number of subscripts; expecting %d"
 msgstr ""
 
-#: ada-lang.c:9614 ada-lang.c:9628
+#: ada-lang.c:9740 ada-lang.c:9754
 msgid "element type of array unknown"
 msgstr ""
 
-#: ada-lang.c:9637
+#: ada-lang.c:9763
 msgid "Attempt to index or call something other than an array or function"
 msgstr ""
 
-#: ada-lang.c:9667
+#: ada-lang.c:9793
 msgid "cannot slice a packed array"
 msgstr ""
 
-#: ada-lang.c:9695 valops.c:3681
+#: ada-lang.c:9821 valops.c:3756
 msgid "cannot take slice of non-array"
 msgstr ""
 
-#: ada-lang.c:9734
+#: ada-lang.c:9860
 msgid "Membership test incompletely implemented; always returns true"
 msgstr ""
 
-#: ada-lang.c:9823
+#: ada-lang.c:9949
 #, possible-c-format
 msgid "Invalid operand to '%s"
 msgstr ""
 
 #. Should never happen.
-#: ada-lang.c:9848 ada-lang.c:9873 ada-lang.c:9903
+#: ada-lang.c:9974 ada-lang.c:9999 ada-lang.c:10029
 msgid "unexpected attribute encountered"
 msgstr ""
 
-#: ada-lang.c:9881
+#: ada-lang.c:10007
 msgid "the 'length attribute applies only to array types"
 msgstr ""
 
-#: ada-lang.c:9885
+#: ada-lang.c:10011
 msgid "unimplemented type attribute"
 msgstr ""
 
-#: ada-lang.c:9953
+#: ada-lang.c:10079
 msgid "'modulus must be applied to modular type"
 msgstr ""
 
-#: ada-lang.c:10049
+#: ada-lang.c:10175
 msgid "Attempt to dereference null array pointer."
 msgstr ""
 
-#: ada-lang.c:10077 eval.c:2639 eval.c:3049 valops.c:1786
+#: ada-lang.c:10203 eval.c:2662 eval.c:3072 valops.c:1780
 msgid "Attempt to take contents of a non-pointer value."
 msgstr ""
 
-#: ada-lang.c:10145 eval.c:2856
+#: ada-lang.c:10271 eval.c:2879
 msgid "Attempt to use a type name as an expression"
 msgstr ""
 
-#: ada-lang.c:10157
+#: ada-lang.c:10283
 #, possible-c-format
 msgid ""
 "Undefined name, ambiguous name, or renaming used in component association: %"
 "s."
 msgstr ""
 
-#: ada-lang.c:10160
+#: ada-lang.c:10286
 msgid "Aggregates only allowed on the right of an assignment"
 msgstr ""
 
-#: ada-lang.c:10163
+#: ada-lang.c:10289
 msgid "aggregate apparently mangled"
 msgstr ""
 
-#: ada-lang.c:10458
+#: ada-lang.c:10584
 msgid "Unknown lower bound, using 1."
 msgstr ""
 
-#: ada-lang.c:10477
+#: ada-lang.c:10603
 #, possible-c-format
 msgid "Unknown upper bound, using %ld."
 msgstr ""
 
-#: ada-lang.c:10683
+#: ada-lang.c:10778
 msgid ""
 "Your Ada runtime appears to be missing some debugging information.\n"
 "Cannot insert Ada exception catchpoint in this configuration."
 msgstr ""
 
-#: ada-lang.c:10693
+#: ada-lang.c:10788
 #, possible-c-format
 msgid "Symbol \"%s\" is not a function (class = %d)"
 msgstr ""
 
-#: ada-lang.c:10736
+#: ada-lang.c:10830
 msgid "Unable to insert catchpoint.  Is this an Ada main program?"
 msgstr ""
 
-#: ada-lang.c:10744
+#: ada-lang.c:10838
 msgid "Unable to insert catchpoint. Try to start the program first."
 msgstr ""
 
@@ -566,94 +566,102 @@ msgstr ""
 #. configurable run time mode, or that a-except as been optimized
 #. out by the linker...  In any case, at this point it is not worth
 #. supporting this feature.
-#: ada-lang.c:10753
+#: ada-lang.c:10847
 msgid "Cannot insert Ada exception catchpoints in this configuration."
 msgstr ""
 
-#: ada-lang.c:10912 ada-lang.c:11272 ada-lang.c:11316 ada-lang.c:11347
+#: ada-lang.c:11006 ada-lang.c:11367 ada-lang.c:11411 ada-lang.c:11442
 msgid "unexpected catchpoint type"
 msgstr ""
 
-#: ada-lang.c:10938
+#: ada-lang.c:11032
 #, possible-c-format
 msgid "failed to get exception name: %s"
 msgstr ""
 
-#: ada-lang.c:11052
+#: ada-lang.c:11147
 #, possible-c-format
 msgid "failed to reevaluate internal exception condition for catchpoint %d: %s"
 msgstr ""
 
-#: ada-lang.c:11143
+#: ada-lang.c:11238
 msgid "Error in testing exception condition:\n"
 msgstr ""
 
-#: ada-lang.c:11253 ada-lang.c:11297
+#: ada-lang.c:11348 ada-lang.c:11392
 #, possible-c-format
 msgid "`%s' Ada exception"
 msgstr ""
 
-#: ada-lang.c:11287 breakpoint.c:9806
+#: ada-lang.c:11382 breakpoint.c:11476
 msgid "Temporary catchpoint "
 msgstr ""
 
-#: ada-lang.c:11288 breakpoint.c:9807
+#: ada-lang.c:11383 breakpoint.c:11477
 msgid "Catchpoint "
 msgstr ""
 
-#: ada-lang.c:11304
+#: ada-lang.c:11399
 msgid "all Ada exceptions"
 msgstr ""
 
-#: ada-lang.c:11308
+#: ada-lang.c:11403
 msgid "unhandled Ada exceptions"
 msgstr ""
 
-#: ada-lang.c:11312
+#: ada-lang.c:11407
 msgid "failed Ada assertions"
 msgstr ""
 
-#: ada-lang.c:11573 breakpoint.c:645 breakpoint.c:658
+#: ada-lang.c:11679
+msgid "Condition missing after `if' keyword"
+msgstr ""
+
+#: ada-lang.c:11690 breakpoint.c:964 breakpoint.c:978
 msgid "Junk at end of expression"
 msgstr ""
 
-#: ada-lang.c:11620 ada-lang.c:11643
+#: ada-lang.c:11738 ada-lang.c:11761
 #, possible-c-format
 msgid "unexpected catchpoint kind (%d)"
 msgstr ""
 
-#: ada-lang.c:11806 breakpoint.c:7643 breakpoint.c:9554 breakpoint.c:9683
-#: breakpoint.c:9728 breakpoint.c:9872 breakpoint.c:13042 skip.c:191
+#: ada-lang.c:11949
+msgid "condition missing after `if' keyword"
+msgstr ""
+
+#: ada-lang.c:11956 breakpoint.c:9307 breakpoint.c:11209 breakpoint.c:11353
+#: breakpoint.c:11398 breakpoint.c:11542 breakpoint.c:15244 skip.c:188
 msgid "Junk at end of arguments."
 msgstr ""
 
 #. XXX: gdb_sprint_host_address, type_sprint
-#: ada-lang.c:12006
+#: ada-lang.c:12157
 msgid "Type @"
 msgstr ""
 
-#: ada-lang.c:12366
+#: ada-lang.c:12552
 msgid "\"set ada\" must be followed by the name of a setting.\n"
 msgstr ""
 
-#: ada-lang.c:12428
+#: ada-lang.c:12614
 msgid "Prefix command for changing Ada-specfic settings"
 msgstr ""
 
-#: ada-lang.c:12432
+#: ada-lang.c:12618
 msgid "Generic command for showing Ada-specific settings."
 msgstr ""
 
-#: ada-lang.c:12436
+#: ada-lang.c:12622
 msgid "Enable or disable an optimization trusting PAD types over XVS types"
 msgstr ""
 
-#: ada-lang.c:12437
+#: ada-lang.c:12623
 msgid ""
 "Show whether an optimization trusting PAD types over XVS types is activated"
 msgstr ""
 
-#: ada-lang.c:12439
+#: ada-lang.c:12625
 msgid ""
 "This is related to the encoding used by the GNAT compiler.  The debugger\n"
 "should normally trust the contents of PAD types, but certain older versions\n"
@@ -665,13 +673,13 @@ msgid ""
 "this option to \"off\" unless necessary."
 msgstr ""
 
-#: ada-lang.c:12449
+#: ada-lang.c:12635
 msgid ""
 "Catch Ada exceptions, when raised.\n"
 "With an argument, catch only exceptions with the given name."
 msgstr ""
 
-#: ada-lang.c:12456
+#: ada-lang.c:12642
 msgid ""
 "Catch failed Ada assertions, when raised.\n"
 "With an argument, catch only exceptions with the given name."
@@ -704,12 +712,12 @@ msgstr ""
 msgid "Invalid digit `%c' in based literal"
 msgstr ""
 
-#: ada-lex.l:601
+#: ada-lex.l:612
 #, possible-c-format
 msgid "ambiguous attribute name: `%s'"
 msgstr ""
 
-#: ada-lex.l:604
+#: ada-lex.l:615
 #, possible-c-format
 msgid "unrecognized attribute: `%s'"
 msgstr ""
@@ -790,49 +798,49 @@ msgstr ""
 msgid "Blocked in selective wait statement"
 msgstr ""
 
-#: ada-tasks.c:414
+#: ada-tasks.c:420
 msgid "Unknown task name format. Aborting"
 msgstr ""
 
-#: ada-tasks.c:488
+#: ada-tasks.c:494
 msgid "Cannot find Ada_Task_Control_Block type. Aborting"
 msgstr ""
 
-#: ada-tasks.c:501
+#: ada-tasks.c:507
 msgid "Cannot find Common_ATCB type. Aborting"
 msgstr ""
 
-#: ada-tasks.c:503
+#: ada-tasks.c:509
 msgid "Cannot find Private_Data type. Aborting"
 msgstr ""
 
-#: ada-tasks.c:505
+#: ada-tasks.c:511
 msgid "Cannot find Entry_Call_Record type. Aborting"
 msgstr ""
 
-#: ada-tasks.c:942
+#: ada-tasks.c:987
 msgid "Cannot inspect Ada tasks when program is not running"
 msgstr ""
 
-#: ada-tasks.c:970 ada-tasks.c:1120 ada-tasks.c:1284
+#: ada-tasks.c:1015 ada-tasks.c:1165 ada-tasks.c:1329
 msgid "Your application does not use any Ada tasks.\n"
 msgstr ""
 
-#: ada-tasks.c:1081
+#: ada-tasks.c:1126
 #, possible-c-format
 msgid "Accepting RV with %-4d"
 msgstr ""
 
-#: ada-tasks.c:1087
+#: ada-tasks.c:1132
 #, possible-c-format
 msgid "Waiting on RV with %-3d"
 msgstr ""
 
-#: ada-tasks.c:1097
+#: ada-tasks.c:1142
 msgid "<no name>"
 msgstr ""
 
-#: ada-tasks.c:1125 ada-tasks.c:1236
+#: ada-tasks.c:1170 ada-tasks.c:1281
 #, possible-c-format
 msgid ""
 "Task ID %d not known.  Use the \"info tasks\" command to\n"
@@ -840,126 +848,126 @@ msgid ""
 msgstr ""
 
 #. Print the Ada task ID.
-#: ada-tasks.c:1130
+#: ada-tasks.c:1175
 #, possible-c-format
 msgid "Ada Task: %s\n"
 msgstr ""
 
-#: ada-tasks.c:1135
+#: ada-tasks.c:1180
 #, possible-c-format
 msgid "Name: %s\n"
 msgstr ""
 
-#: ada-tasks.c:1137
+#: ada-tasks.c:1182
 msgid "<no name>\n"
 msgstr ""
 
 #. Print the TID and LWP.
-#: ada-tasks.c:1140
+#: ada-tasks.c:1185
 #, possible-c-format
 msgid "Thread: %#lx\n"
 msgstr ""
 
-#: ada-tasks.c:1141
+#: ada-tasks.c:1186
 #, possible-c-format
 msgid "LWP: %#lx\n"
 msgstr ""
 
-#: ada-tasks.c:1151
+#: ada-tasks.c:1196
 #, possible-c-format
 msgid "Parent: %d"
 msgstr ""
 
-#: ada-tasks.c:1157
+#: ada-tasks.c:1202
 msgid "No parent\n"
 msgstr ""
 
 #. Print the base priority.
-#: ada-tasks.c:1160
+#: ada-tasks.c:1205
 #, possible-c-format
 msgid "Base Priority: %d\n"
 msgstr ""
 
-#: ada-tasks.c:1169
+#: ada-tasks.c:1214
 #, possible-c-format
 msgid "State: Accepting rendezvous with %d"
 msgstr ""
 
-#: ada-tasks.c:1175
+#: ada-tasks.c:1220
 #, possible-c-format
 msgid "State: Waiting on task %d's entry"
 msgstr ""
 
-#: ada-tasks.c:1179
+#: ada-tasks.c:1224
 #, possible-c-format
 msgid "State: %s"
 msgstr ""
 
-#: ada-tasks.c:1220
+#: ada-tasks.c:1265
 msgid "[Current task is unknown]\n"
 msgstr ""
 
-#: ada-tasks.c:1222
+#: ada-tasks.c:1267
 #, possible-c-format
 msgid "[Current task is %d]\n"
 msgstr ""
 
-#: ada-tasks.c:1241
+#: ada-tasks.c:1286
 #, possible-c-format
 msgid "Cannot switch to task %d: Task is no longer running"
 msgstr ""
 
-#: ada-tasks.c:1261
+#: ada-tasks.c:1306
 #, possible-c-format
 msgid ""
 "Unable to compute thread ID for task %d.\n"
 "Cannot switch to this task."
 msgstr ""
 
-#: ada-tasks.c:1267
+#: ada-tasks.c:1312
 #, possible-c-format
 msgid "[Switching to task %d]\n"
 msgstr ""
 
-#: ada-tasks.c:1303
+#: ada-tasks.c:1348
 msgid ""
 "Task switching not supported when debugging from core files\n"
 "(use thread support instead)"
 msgstr ""
 
-#: ada-tasks.c:1401
+#: ada-tasks.c:1446
 msgid "Provide information about all known Ada tasks"
 msgstr ""
 
-#: ada-tasks.c:1403
+#: ada-tasks.c:1448
 msgid ""
 "Use this command to switch between Ada tasks.\n"
 "Without argument, this command simply prints the current task ID"
 msgstr ""
 
-#: ada-typeprint.c:338
+#: ada-typeprint.c:340
 msgid "<undecipherable array type>"
 msgstr ""
 
-#: ada-typeprint.c:655
+#: ada-typeprint.c:657
 msgid " <incomplete type> end record"
 msgstr ""
 
-#: ada-typeprint.c:816
+#: ada-typeprint.c:818
 #, possible-c-format
 msgid "<%d-byte integer>"
 msgstr ""
 
-#: ada-typeprint.c:838
+#: ada-typeprint.c:840
 #, possible-c-format
 msgid "<%d-byte float>"
 msgstr ""
 
-#: ada-typeprint.c:851
+#: ada-typeprint.c:853
 msgid "array (?) of ? (<mal-formed descriptor>)"
 msgstr ""
 
-#: ada-valprint.c:217 ada-valprint.c:523 valprint.c:1808
+#: ada-valprint.c:217 ada-valprint.c:523 valprint.c:2180
 #, possible-c-format
 msgid " <repeats %u times>"
 msgstr ""
@@ -968,14 +976,19 @@ msgstr ""
 msgid "internal error: unhandled type in ada_print_scalar"
 msgstr ""
 
-#: ada-valprint.c:455 typeprint.c:269
+#: ada-valprint.c:455 typeprint.c:260
 msgid "Invalid type code in symbol table."
 msgstr ""
 
-#: ada-valprint.c:1132
+#: ada-valprint.c:1120
 msgid "<optimized out or zero length>"
 msgstr ""
 
+#. Could not get the array bounds.  Pretend this is an empty array.
+#: ada-varobj.c:234 valprint.c:1600
+msgid "unable to get bounds of array, assuming null array"
+msgstr ""
+
 #: addrmap.c:168
 msgid "addrmap_create_fixed is not implemented yet for fixed addrmaps"
 msgstr ""
@@ -988,6 +1001,28 @@ msgstr ""
 msgid "addrmap_relocate is not implemented yet for mutable addrmaps"
 msgstr ""
 
+#: agent.c:42
+#, possible-c-format
+msgid "Debugger's willingness to use agent in inferior as a helper is %s.\n"
+msgstr ""
+
+#: agent.c:76
+msgid "Set debugger's willingness to use agent as a helper."
+msgstr ""
+
+#: agent.c:77
+msgid "Show debugger's willingness to use agent as a helper."
+msgstr ""
+
+#: agent.c:78
+msgid ""
+"If on, GDB will delegate some of the debugging operations to the\n"
+"agent, if the target supports it.  This will speed up those\n"
+"operations that are supported by the agent.\n"
+"If off, GDB will not use agent, even if such is supported by the\n"
+"target."
+msgstr ""
+
 #: aix-thread.c:236
 #, possible-c-format
 msgid "aix-thread: ptrace (%d, %d) returned %d (errno = %d %s)"
@@ -1033,101 +1068,103 @@ msgstr ""
 msgid "aix-thread resume: no tid for pthread %ld"
 msgstr ""
 
-#: aix-thread.c:1168
+#: aix-thread.c:1170
 #, possible-c-format
 msgid "aix-thread: fetch_registers: pthdb_pthread_context returned %s"
 msgstr ""
 
-#: aix-thread.c:1461
+#: aix-thread.c:1464
 #, possible-c-format
 msgid "aix-thread: store_registers: pthdb_pthread_context returned %s"
 msgstr ""
 
-#: aix-thread.c:1525
+#: aix-thread.c:1528
 #, possible-c-format
 msgid "aix-thread: store_registers: pthdb_pthread_setcontext returned %s"
 msgstr ""
 
-#: aix-thread.c:1732 dec-thread.c:671
+#: aix-thread.c:1735 dec-thread.c:671
 #, possible-c-format
 msgid "Thread %ld"
 msgstr ""
 
 #. i18n: Like "thread-identifier %d, [state] running, suspended"
-#: aix-thread.c:1762
+#: aix-thread.c:1765
 #, possible-c-format
 msgid "tid %d"
 msgstr ""
 
 #. i18n: Like "Thread-Id %d, [state] running, suspended"
-#: aix-thread.c:1773
+#: aix-thread.c:1776
 msgid ", suspended"
 msgstr ""
 
 #. i18n: Like "Thread-Id %d, [state] running, detached"
-#: aix-thread.c:1779
+#: aix-thread.c:1782
 msgid ", detached"
 msgstr ""
 
 #. i18n: Like "Thread-Id %d, [state] running, cancel pending"
-#: aix-thread.c:1784
+#: aix-thread.c:1787
 msgid ", cancel pending"
 msgstr ""
 
-#: aix-thread.c:1808 aix-thread.c:1809
+#: aix-thread.c:1811 aix-thread.c:1812
 msgid "AIX pthread support"
 msgstr ""
 
-#: aix-thread.c:1842
+#: aix-thread.c:1847
 msgid "Set debugging of AIX thread module."
 msgstr ""
 
-#: aix-thread.c:1843
+#: aix-thread.c:1848
 msgid "Show debugging of AIX thread module."
 msgstr ""
 
-#: aix-thread.c:1844 dec-thread.c:737
+#: aix-thread.c:1849 dec-thread.c:737
 msgid "Enables debugging output (used to debug GDB)."
 msgstr ""
 
-#: alphabsd-nat.c:96 alphabsd-nat.c:128 amd64bsd-nat.c:53 amd64bsd-nat.c:87
-#: amd64-linux-nat.c:165 amd64-linux-nat.c:220 hppabsd-nat.c:134
+#: alphabsd-nat.c:96 alphabsd-nat.c:128 amd64bsd-nat.c:54 amd64bsd-nat.c:88
+#: amd64-linux-nat.c:174 amd64-linux-nat.c:229 hppabsd-nat.c:134
 #: hppabsd-nat.c:164 hppanbsd-nat.c:172 hppanbsd-nat.c:202 i386bsd-nat.c:141
-#: i386bsd-nat.c:192 i386-linux-nat.c:266 i386-linux-nat.c:281
+#: i386bsd-nat.c:192 i386-linux-nat.c:258 i386-linux-nat.c:273
 #: m32r-linux-nat.c:115 m32r-linux-nat.c:164 m68kbsd-nat.c:121
-#: m68kbsd-nat.c:151 m68klinux-nat.c:263 m68klinux-nat.c:278 m88kbsd-nat.c:73
+#: m68kbsd-nat.c:151 m68klinux-nat.c:272 m68klinux-nat.c:287 m88kbsd-nat.c:73
 #: m88kbsd-nat.c:89 mips64obsd-nat.c:87 mips64obsd-nat.c:103
-#: mips-linux-nat.c:235 mips-linux-nat.c:292 mipsnbsd-nat.c:53
+#: mips-linux-nat.c:264 mips-linux-nat.c:346 mipsnbsd-nat.c:53
 #: mipsnbsd-nat.c:84 ppcnbsd-nat.c:92 ppcnbsd-nat.c:123 ppcobsd-nat.c:82
-#: ppcobsd-nat.c:118 s390-nat.c:247 s390-nat.c:264 shnbsd-nat.c:54
-#: shnbsd-nat.c:75 sparc-nat.c:172 sparc-nat.c:208 vaxbsd-nat.c:73
-#: vaxbsd-nat.c:89 xtensa-linux-nat.c:194 xtensa-linux-nat.c:213
+#: ppcobsd-nat.c:118 s390-nat.c:248 s390-nat.c:265 shnbsd-nat.c:54
+#: shnbsd-nat.c:75 sparc-nat.c:172 sparc-nat.c:208 tilegx-linux-nat.c:142
+#: tilegx-linux-nat.c:162 vaxbsd-nat.c:73 vaxbsd-nat.c:89
+#: xtensa-linux-nat.c:194 xtensa-linux-nat.c:213
 msgid "Couldn't get registers"
 msgstr ""
 
-#: alphabsd-nat.c:110 alphabsd-nat.c:147 amd64bsd-nat.c:66 amd64bsd-nat.c:105
-#: amd64-linux-nat.c:192 amd64-linux-nat.c:255 hppabsd-nat.c:145
+#: alphabsd-nat.c:110 alphabsd-nat.c:147 amd64bsd-nat.c:67 amd64bsd-nat.c:106
+#: amd64-linux-nat.c:201 amd64-linux-nat.c:264 hppabsd-nat.c:145
 #: hppabsd-nat.c:179 hppanbsd-nat.c:183 hppanbsd-nat.c:217 i386bsd-nat.c:165
-#: i386bsd-nat.c:172 i386bsd-nat.c:228 i386-linux-nat.c:330
-#: i386-linux-nat.c:344 m68kbsd-nat.c:132 m68kbsd-nat.c:166
-#: m68klinux-nat.c:360 m68klinux-nat.c:374 mipsnbsd-nat.c:67
-#: mipsnbsd-nat.c:103 ppcobsd-nat.c:99 ppcobsd-nat.c:139 s390-nat.c:284
-#: s390-nat.c:301 sparc-nat.c:184
+#: i386bsd-nat.c:172 i386bsd-nat.c:228 i386-linux-nat.c:322
+#: i386-linux-nat.c:336 m68kbsd-nat.c:132 m68kbsd-nat.c:166
+#: m68klinux-nat.c:369 m68klinux-nat.c:383 mipsnbsd-nat.c:67
+#: mipsnbsd-nat.c:103 ppcobsd-nat.c:99 ppcobsd-nat.c:139 s390-nat.c:285
+#: s390-nat.c:302 sparc-nat.c:184
 msgid "Couldn't get floating point status"
 msgstr ""
 
-#: alphabsd-nat.c:134 amd64bsd-nat.c:93 amd64-linux-nat.c:225
-#: hppabsd-nat.c:170 hppanbsd-nat.c:208 i386bsd-nat.c:198 i386-linux-nat.c:286
-#: m32r-linux-nat.c:169 m68kbsd-nat.c:157 m68klinux-nat.c:283 m88kbsd-nat.c:95
+#: alphabsd-nat.c:134 amd64bsd-nat.c:94 amd64-linux-nat.c:234
+#: hppabsd-nat.c:170 hppanbsd-nat.c:208 i386bsd-nat.c:198 i386-linux-nat.c:278
+#: m32r-linux-nat.c:169 m68kbsd-nat.c:157 m68klinux-nat.c:292 m88kbsd-nat.c:95
 #: mips64obsd-nat.c:109 mipsnbsd-nat.c:90 ppcnbsd-nat.c:130 ppcobsd-nat.c:129
-#: s390-nat.c:269 sparc-nat.c:213 vaxbsd-nat.c:95 xtensa-linux-nat.c:221
+#: s390-nat.c:270 sparc-nat.c:213 tilegx-linux-nat.c:167 vaxbsd-nat.c:95
+#: xtensa-linux-nat.c:221
 msgid "Couldn't write registers"
 msgstr ""
 
-#: alphabsd-nat.c:153 amd64bsd-nat.c:111 amd64-linux-nat.c:260
-#: hppabsd-nat.c:185 hppanbsd-nat.c:223 i386bsd-nat.c:234 i386-linux-nat.c:349
-#: m68kbsd-nat.c:172 m68klinux-nat.c:379 mipsnbsd-nat.c:109 ppcobsd-nat.c:146
-#: s390-nat.c:306
+#: alphabsd-nat.c:153 amd64bsd-nat.c:112 amd64-linux-nat.c:269
+#: hppabsd-nat.c:185 hppanbsd-nat.c:223 i386bsd-nat.c:234 i386-linux-nat.c:341
+#: m68kbsd-nat.c:172 m68klinux-nat.c:388 mipsnbsd-nat.c:109 ppcobsd-nat.c:146
+#: s390-nat.c:307
 msgid "Couldn't write floating point status"
 msgstr ""
 
@@ -1179,115 +1216,135 @@ msgid ""
 "(more likely) you have encountered a bug in GDB.\n"
 msgstr ""
 
-#: alpha-tdep.c:1883 mips-tdep.c:6523
+#: alpha-tdep.c:1883 mips-tdep.c:8842
 msgid "Set the distance searched for the start of a function."
 msgstr ""
 
-#: alpha-tdep.c:1884 mips-tdep.c:6524
+#: alpha-tdep.c:1884 mips-tdep.c:8843
 msgid "Show the distance searched for the start of a function."
 msgstr ""
 
-#: alpha-tdep.c:1885 mips-tdep.c:6525
+#: alpha-tdep.c:1885 mips-tdep.c:8844
 msgid ""
 "If you are debugging a stripped executable, GDB needs to search through the\n"
 "program for the start of a function.  This command sets the distance of the\n"
 "search.  The only need to set it is when debugging a stripped executable."
 msgstr ""
 
-#: amd64fbsd-nat.c:187
+#: amd64bsd-nat.c:142 i386bsd-nat.c:273
+msgid "Couldn't read debug registers"
+msgstr ""
+
+#: amd64bsd-nat.c:154 i386bsd-nat.c:285
+msgid "Couldn't get debug registers"
+msgstr ""
+
+#: amd64bsd-nat.c:165 i386bsd-nat.c:296
+msgid "Couldn't write debug registers"
+msgstr ""
+
+#: amd64fbsd-nat.c:203
 #, possible-c-format
 msgid ""
 "offsetof (struct sigcontext, sc_rip) yields %d instead of %d.\n"
 "Please report this to <bug-gdb at gnu.org>."
 msgstr ""
 
-#: amd64fbsd-nat.c:200
+#: amd64fbsd-nat.c:216
 #, possible-c-format
 msgid ""
 "offsetof (struct sigcontext, sc_rsp) yields %d instead of %d.\n"
 "Please report this to <bug-gdb at gnu.org>."
 msgstr ""
 
-#: amd64fbsd-nat.c:213
+#: amd64fbsd-nat.c:229
 #, possible-c-format
 msgid ""
 "offsetof (struct sigcontext, sc_rbp) yields %d instead of %d.\n"
 "Please report this to <bug-gdb at gnu.org>."
 msgstr ""
 
-#: amd64-linux-nat.c:185 amd64-linux-nat.c:244
+#: amd64-linux-nat.c:194 amd64-linux-nat.c:253
 msgid "Couldn't get extended state status"
 msgstr ""
 
-#: amd64-linux-nat.c:250 i386-linux-nat.c:415
+#: amd64-linux-nat.c:259 i386-linux-nat.c:407
 msgid "Couldn't write extended state status"
 msgstr ""
 
-#: amd64-linux-nat.c:283 i386-linux-nat.c:671
+#: amd64-linux-nat.c:290 i386-linux-nat.c:661
 msgid "Couldn't read debug register"
 msgstr ""
 
-#: amd64-linux-nat.c:303 i386-linux-nat.c:691 mips-linux-nat.c:879
-#: mips-linux-nat.c:897
+#: amd64-linux-nat.c:310 i386-linux-nat.c:681 mips-linux-nat.c:969
+#: mips-linux-nat.c:987
 msgid "Couldn't write debug register"
 msgstr ""
 
-#: amd64-linux-nat.c:720
+#: amd64-linux-nat.c:1016
 msgid "Couldn't get CS register"
 msgstr ""
 
-#: amd64-linux-tdep.c:1201 i386-linux-tdep.c:433
+#: amd64-linux-nat.c:1025
+msgid "Couldn't get DS register"
+msgstr ""
+
+#: amd64-linux-nat.c:1030
+msgid "Can't debug 64-bit process with 32-bit GDB"
+msgstr ""
+
+#: amd64-linux-tdep.c:1219 i386-linux-tdep.c:433
 #, possible-c-format
 msgid "Process record and replay target doesn't support syscall number %s\n"
 msgstr ""
 
-#: amd64-tdep.c:190 avr-tdep.c:1343 cris-tdep.c:1851 s390-tdep.c:193
+#: amd64-tdep.c:192 avr-tdep.c:1342 cris-tdep.c:1802 s390-tdep.c:199
 #, possible-c-format
 msgid "Unmapped DWARF Register #%d encountered."
 msgstr ""
 
 #. We shouldn't get here.
-#: amd64-tdep.c:1107
+#: amd64-tdep.c:1110
 msgid "unable to find free reg"
 msgstr ""
 
-#: arch-utils.c:214 m32c-tdep.c:2598 m32c-tdep.c:2619
+#: arch-utils.c:215 m32c-tdep.c:2598 m32c-tdep.c:2619
 msgid "No virtual frame pointer available"
 msgstr ""
 
-#: arch-utils.c:277
+#: arch-utils.c:278
 msgid "The target endianness is set automatically (currently big endian)\n"
 msgstr ""
 
-#: arch-utils.c:280
+#: arch-utils.c:281
 msgid "The target endianness is set automatically (currently little endian)\n"
 msgstr ""
 
-#: arch-utils.c:285
+#: arch-utils.c:286
 msgid "The target is assumed to be big endian\n"
 msgstr ""
 
-#: arch-utils.c:288
+#: arch-utils.c:289
 msgid "The target is assumed to be little endian\n"
 msgstr ""
 
-#: arch-utils.c:303
+#: arch-utils.c:304
 msgid "set_endian: architecture update failed"
 msgstr ""
 
-#: arch-utils.c:309
+#: arch-utils.c:310
 msgid "Little endian target not supported by GDB\n"
 msgstr ""
 
-#: arch-utils.c:317
+#: arch-utils.c:318
 msgid "Big endian target not supported by GDB\n"
 msgstr ""
 
-#: arch-utils.c:323
+#: arch-utils.c:324
 msgid "set_endian: bad value"
 msgstr ""
 
-#: arch-utils.c:382
+#: arch-utils.c:383
 #, possible-c-format
 msgid ""
 "Selected architecture %s is not compatible with reported target architecture "
@@ -1296,69 +1353,69 @@ msgstr ""
 
 #. We have no idea which one is better.  This is a bug, but not
 #. a critical problem; warn the user.
-#: arch-utils.c:406
+#: arch-utils.c:407
 #, possible-c-format
 msgid ""
 "Selected architecture %s is ambiguous with reported target architecture %s"
 msgstr ""
 
-#: arch-utils.c:437
+#: arch-utils.c:438
 #, possible-c-format
 msgid "The target architecture is set automatically (currently %s)\n"
 msgstr ""
 
-#: arch-utils.c:441
+#: arch-utils.c:442
 #, possible-c-format
 msgid "The target architecture is assumed to be %s\n"
 msgstr ""
 
-#: arch-utils.c:461
+#: arch-utils.c:462
 msgid "could not select an architecture automatically"
 msgstr ""
 
-#: arch-utils.c:468
+#: arch-utils.c:469
 msgid "set_architecture: bfd_scan_arch failed"
 msgstr ""
 
-#: arch-utils.c:472
+#: arch-utils.c:473
 #, possible-c-format
 msgid "Architecture `%s' not recognized.\n"
 msgstr ""
 
-#: arch-utils.c:557
+#: arch-utils.c:558
 msgid "Architecture of file not recognized."
 msgstr ""
 
-#: arch-utils.c:604
+#: arch-utils.c:605
 msgid "initialize_current_architecture: No arch"
 msgstr ""
 
-#: arch-utils.c:608
+#: arch-utils.c:609
 msgid "initialize_current_architecture: Arch not found"
 msgstr ""
 
-#: arch-utils.c:651
+#: arch-utils.c:652
 msgid ""
 "initialize_current_architecture: Selection of initial architecture failed"
 msgstr ""
 
-#: arch-utils.c:665
+#: arch-utils.c:666
 msgid "Set architecture of target."
 msgstr ""
 
-#: arch-utils.c:666
+#: arch-utils.c:667
 msgid "Show architecture of target."
 msgstr ""
 
-#: arch-utils.c:793
+#: arch-utils.c:794
 msgid "This architecture has no method to collect a return address."
 msgstr ""
 
-#: arch-utils.c:806
+#: arch-utils.c:817
 msgid "Set endianness of target."
 msgstr ""
 
-#: arch-utils.c:807
+#: arch-utils.c:818
 msgid "Show endianness of target."
 msgstr ""
 
@@ -1414,19 +1471,25 @@ msgstr ""
 msgid "Unable to store VFP registers."
 msgstr ""
 
-#: arm-linux-nat.c:979
+#: arm-linux-nat.c:985
 msgid "Unexpected error setting breakpoint address"
 msgstr ""
 
-#: arm-linux-nat.c:982
+#: arm-linux-nat.c:988
 msgid "Unexpected error setting breakpoint"
 msgstr ""
 
-#: arm-linux-nat.c:1024
+#: arm-linux-nat.c:1030
 msgid "Unexpected error clearing breakpoint"
 msgstr ""
 
-#: arm-linux-tdep.c:1103
+#: arm-linux-tdep.c:1129 i386-tdep.c:3512 i386-tdep.c:3601 i386-tdep.c:3618
+#: ppc-linux-tdep.c:1335 stap-probe.c:487
+#, possible-c-format
+msgid "Invalid register name `%s' on expression `%s'."
+msgstr ""
+
+#: arm-linux-tdep.c:1228
 msgid "arm_linux_init_abi: Floating point model not supported"
 msgstr ""
 
@@ -1467,185 +1530,185 @@ msgstr ""
 msgid "wrong size of FPA register set in core file"
 msgstr ""
 
-#: armnbsd-tdep.c:64 arm-tdep.c:10079
+#: armnbsd-tdep.c:64 arm-tdep.c:10125
 msgid "arm_gdbarch_init: bad byte order for float format"
 msgstr ""
 
 #. multiply
-#: arm-tdep.c:1574 arm-tdep.c:4608 arm-tdep.c:4629 arm-tdep.c:4744
+#: arm-tdep.c:1576 arm-tdep.c:4613 arm-tdep.c:4634 arm-tdep.c:4749
 msgid "Invalid update to pc in instruction"
 msgstr ""
 
-#: arm-tdep.c:1644
+#: arm-tdep.c:1646
 msgid "bad value in switch"
 msgstr ""
 
-#: arm-tdep.c:3007
+#: arm-tdep.c:3009
 #, possible-c-format
 msgid "Unexpected register %d"
 msgstr ""
 
 #. Should never happen.
-#: arm-tdep.c:3274
+#: arm-tdep.c:3279
 msgid "unknown type alignment"
 msgstr ""
 
-#: arm-tdep.c:3335 arm-tdep.c:3357
+#: arm-tdep.c:3340 arm-tdep.c:3362
 #, possible-c-format
 msgid "Invalid VFP CPRC type: %d."
 msgstr ""
 
-#: arm-tdep.c:3791
+#: arm-tdep.c:3796
 #, c-format
 msgid "Hardware FPU type %d\n"
 msgstr ""
 
-#: arm-tdep.c:3793
+#: arm-tdep.c:3798
 #, c-format
 msgid "Software FPU type %d\n"
 msgstr ""
 
 #. i18n: [floating point unit] mask
-#: arm-tdep.c:3795
+#: arm-tdep.c:3800
 msgid "mask: "
 msgstr ""
 
 #. i18n: [floating point unit] flags
-#: arm-tdep.c:3798
+#: arm-tdep.c:3803
 msgid "flags: "
 msgstr ""
 
-#: arm-tdep.c:4027
+#: arm-tdep.c:4032
 #, possible-c-format
 msgid "Bad REGNUM %d"
 msgstr ""
 
-#: arm-tdep.c:4828
+#: arm-tdep.c:4833
 msgid "Bad bit-field extraction\n"
 msgstr ""
 
-#: arm-tdep.c:4849 arm-tdep.c:4855
+#: arm-tdep.c:4854 arm-tdep.c:4860
 msgid "Infinite loop detected"
 msgstr ""
 
 #. Unpredictable behaviour.  Try to do something sensible (switch to ARM
 #. mode, align dest to 4 bytes).
-#: arm-tdep.c:5425
+#: arm-tdep.c:5430
 msgid "Single-stepping BX to non-word-aligned ARM instruction."
 msgstr ""
 
-#: arm-tdep.c:5487
+#: arm-tdep.c:5492
 msgid "Instruction wrote to PC in an unexpected way when single-stepping"
 msgstr ""
 
-#: arm-tdep.c:5493
+#: arm-tdep.c:5498
 msgid "Invalid argument to displaced_write_reg"
 msgstr ""
 
-#: arm-tdep.c:6454
+#: arm-tdep.c:6459
 msgid "copy_extra_ld_st: instruction decode error"
 msgstr ""
 
-#: arm-tdep.c:6768
+#: arm-tdep.c:6773
 msgid "Cannot single-step exception return"
 msgstr ""
 
-#: arm-tdep.c:6888
+#: arm-tdep.c:6893
 #, possible-c-format
 msgid "displaced: LDM: move loaded register r%d to r%d\n"
 msgstr ""
 
-#: arm-tdep.c:6893
+#: arm-tdep.c:6898
 #, possible-c-format
 msgid "displaced: LDM: register r%d already in the right place\n"
 msgstr ""
 
-#: arm-tdep.c:6913
+#: arm-tdep.c:6918
 #, possible-c-format
 msgid "displaced: LDM: restored clobbered register r%d\n"
 msgstr ""
 
-#: arm-tdep.c:6956 arm-tdep.c:7067
+#: arm-tdep.c:6961 arm-tdep.c:7072
 msgid "displaced: Unpredictable LDM or STM with base register r15"
 msgstr ""
 
-#: arm-tdep.c:7025 arm-tdep.c:7111
+#: arm-tdep.c:7030 arm-tdep.c:7116
 #, possible-c-format
 msgid ""
 "displaced: LDM r%d%s, {..., pc}: original reg list %.4x, modified list %.4x\n"
 msgstr ""
 
-#: arm-tdep.c:8070
+#: arm-tdep.c:8075
 #, possible-c-format
 msgid "displaced: POP {..., pc}: original reg list %.4x, modified list %.4x\n"
 msgstr ""
 
-#: arm-tdep.c:8187
+#: arm-tdep.c:8192
 msgid "thumb_process_displaced_16bit_insn: Instruction decode error"
 msgstr ""
 
-#: arm-tdep.c:8395
+#: arm-tdep.c:8400
 msgid "thumb_process_displaced_32bit_insn: Instruction decode error"
 msgstr ""
 
-#: arm-tdep.c:8479
+#: arm-tdep.c:8484
 msgid "arm_process_displaced_insn: Instruction decode error"
 msgstr ""
 
-#: arm-tdep.c:8756
+#: arm-tdep.c:8759
 msgid "arm_extract_return_value: Floating point model not supported"
 msgstr ""
 
-#: arm-tdep.c:8947
+#: arm-tdep.c:8950
 msgid "arm_store_return_value: Floating point model not supported"
 msgstr ""
 
-#: arm-tdep.c:9176
+#: arm-tdep.c:9180
 msgid "\"set arm\" must be followed by an apporpriate subcommand.\n"
 msgstr ""
 
-#: arm-tdep.c:9200 rs6000-tdep.c:4202 rs6000-tdep.c:4229
+#: arm-tdep.c:9204 rs6000-tdep.c:4210 rs6000-tdep.c:4237
 msgid "could not update architecture"
 msgstr ""
 
-#: arm-tdep.c:9217
+#: arm-tdep.c:9221
 #, possible-c-format
 msgid "Invalid fp model accepted: %s."
 msgstr ""
 
-#: arm-tdep.c:9231
+#: arm-tdep.c:9235
 #, possible-c-format
 msgid "The current ARM floating point model is \"auto\" (currently \"%s\").\n"
 msgstr ""
 
-#: arm-tdep.c:9235
+#: arm-tdep.c:9239
 #, possible-c-format
 msgid "The current ARM floating point model is \"%s\".\n"
 msgstr ""
 
-#: arm-tdep.c:9254
+#: arm-tdep.c:9258
 #, possible-c-format
 msgid "Invalid ABI accepted: %s."
 msgstr ""
 
-#: arm-tdep.c:9268
+#: arm-tdep.c:9272
 #, possible-c-format
 msgid "The current ARM ABI is \"auto\" (currently \"%s\").\n"
 msgstr ""
 
-#: arm-tdep.c:9272
+#: arm-tdep.c:9276
 #, possible-c-format
 msgid "The current ARM ABI is \"%s\".\n"
 msgstr ""
 
-#: arm-tdep.c:9283
+#: arm-tdep.c:9285
 #, possible-c-format
 msgid ""
 "The current execution mode assumed (when symbols are unavailable) is \"%s"
 "\".\n"
 msgstr ""
 
-#: arm-tdep.c:9295
+#: arm-tdep.c:9297
 #, possible-c-format
 msgid ""
 "The current execution mode assumed (even when symbols are available) is \"%s"
@@ -1653,57 +1716,57 @@ msgid ""
 msgstr ""
 
 #. Leave it as "auto".
-#: arm-tdep.c:9779
+#: arm-tdep.c:9823
 #, possible-c-format
 msgid "unknown ARM EABI version 0x%x"
 msgstr ""
 
-#: arm-tdep.c:10257
+#: arm-tdep.c:10303
 #, possible-c-format
 msgid "arm_dump_tdep: Lowest pc = 0x%lx"
 msgstr ""
 
-#: arm-tdep.c:10304 arm-tdep.c:10308
+#: arm-tdep.c:10352 arm-tdep.c:10356
 msgid "Various ARM-specific commands."
 msgstr ""
 
-#: arm-tdep.c:10339
+#: arm-tdep.c:10387
 msgid "The valid values are:\n"
 msgstr ""
 
-#: arm-tdep.c:10341
+#: arm-tdep.c:10389
 msgid "The default is \"std\"."
 msgstr ""
 
-#: arm-tdep.c:10347
+#: arm-tdep.c:10395
 msgid "Set the disassembly style."
 msgstr ""
 
-#: arm-tdep.c:10348
+#: arm-tdep.c:10396
 msgid "Show the disassembly style."
 msgstr ""
 
-#: arm-tdep.c:10356
+#: arm-tdep.c:10404
 msgid "Set usage of ARM 32-bit mode."
 msgstr ""
 
-#: arm-tdep.c:10357
+#: arm-tdep.c:10405
 msgid "Show usage of ARM 32-bit mode."
 msgstr ""
 
-#: arm-tdep.c:10358
+#: arm-tdep.c:10406
 msgid "When off, a 26-bit PC will be used."
 msgstr ""
 
-#: arm-tdep.c:10366
+#: arm-tdep.c:10414
 msgid "Set the floating point type."
 msgstr ""
 
-#: arm-tdep.c:10367
+#: arm-tdep.c:10415
 msgid "Show the floating point type."
 msgstr ""
 
-#: arm-tdep.c:10368
+#: arm-tdep.c:10416
 msgid ""
 "auto - Determine the FP typefrom the OS-ABI.\n"
 "softfpa - Software FP, mixed-endian doubles on little-endian ARMs.\n"
@@ -1712,42 +1775,358 @@ msgid ""
 "vfp - VFP co-processor."
 msgstr ""
 
-#: arm-tdep.c:10378
+#: arm-tdep.c:10426
 msgid "Set the ABI."
 msgstr ""
 
-#: arm-tdep.c:10379
+#: arm-tdep.c:10427
 msgid "Show the ABI."
 msgstr ""
 
-#: arm-tdep.c:10387
+#: arm-tdep.c:10435
 msgid "Set the mode assumed when symbols are unavailable."
 msgstr ""
 
-#: arm-tdep.c:10388
+#: arm-tdep.c:10436
 msgid "Show the mode assumed when symbols are unavailable."
 msgstr ""
 
-#: arm-tdep.c:10393
+#: arm-tdep.c:10441
 msgid "Set the mode assumed even when symbols are available."
 msgstr ""
 
-#: arm-tdep.c:10394
+#: arm-tdep.c:10442
 msgid "Show the mode assumed even when symbols are available."
 msgstr ""
 
-#: arm-tdep.c:10400
+#: arm-tdep.c:10448
 msgid "Set ARM debugging."
 msgstr ""
 
-#: arm-tdep.c:10401
+#: arm-tdep.c:10449
 msgid "Show ARM debugging."
 msgstr ""
 
-#: arm-tdep.c:10402
+#: arm-tdep.c:10450
 msgid "When on, arm-specific debugging is enabled."
 msgstr ""
 
+#. SPSR is going to be changed.
+#. We need to get SPSR value, which is yet to be done.
+#: arm-tdep.c:10824
+#, possible-c-format
+msgid "Process record does not support instruction  0x%0x at address %s.\n"
+msgstr ""
+
+#. Save SPSR also;how?
+#. SPSR is going to be changed.
+#. we need to get SPSR value, which is yet to be done
+#. SPSR is going to be changed.
+#. How to read SPSR value?
+#. Save SPSR also; how?
+#. We need to save SPSR value, which is not yet done.
+#: arm-tdep.c:10869 arm-tdep.c:10918 arm-tdep.c:11089 arm-tdep.c:11148
+#: arm-tdep.c:11801 arm-tdep.c:11834 arm-tdep.c:12143
+#, possible-c-format
+msgid "Process record does not support instruction 0x%0x at address %s.\n"
+msgstr ""
+
+#: arm-tdep.c:10999
+#, possible-c-format
+msgid "Process record does not support instruction x%0x at address %s.\n"
+msgstr ""
+
+#: arm-tdep.c:11829 arm-tdep.c:12247
+msgid "no syscall record support\n"
+msgstr ""
+
+#: arm-tdep.c:12356 arm-tdep.c:12444
+#, possible-c-format
+msgid "Process record: error reading memory at addr %s len = %d.\n"
+msgstr ""
+
+#: arm-tdep.c:12383
+#, possible-c-format
+msgid ""
+"Process record doesnt support thumb32 instruction 0x%0x at address %s.\n"
+msgstr ""
+
+#: auto-load.c:57
+#, possible-c-format
+msgid "Debugging output for files of 'set auto-load ...' is %s.\n"
+msgstr ""
+
+#: auto-load.c:75
+#, possible-c-format
+msgid "Auto-loading of canned sequences of commands scripts is %s.\n"
+msgstr ""
+
+#: auto-load.c:107
+#, possible-c-format
+msgid "Auto-loading of .gdbinit script from current directory is %s.\n"
+msgstr ""
+
+#: auto-load.c:136
+#, possible-c-format
+msgid "List of directories from which to load auto-loaded scripts is %s.\n"
+msgstr ""
+
+#: auto-load.c:167
+#, possible-c-format
+msgid "auto-load: Expanded $-variables to \"%s\".\n"
+msgstr ""
+
+#: auto-load.c:186
+#, possible-c-format
+msgid "auto-load: Updating directories of \"%s\".\n"
+msgstr ""
+
+#: auto-load.c:209
+#, possible-c-format
+msgid "auto-load: Using directory \"%s\".\n"
+msgstr ""
+
+#: auto-load.c:213
+#, possible-c-format
+msgid "auto-load: Resolved directory \"%s\" as \"%s\".\n"
+msgstr ""
+
+#: auto-load.c:228
+#, possible-c-format
+msgid "auto-load: And canonicalized as \"%s\".\n"
+msgstr ""
+
+#: auto-load.c:272
+msgid "Auto-load files are safe to load from any directory.\n"
+msgstr ""
+
+#: auto-load.c:275
+#, possible-c-format
+msgid "List of directories from which it is safe to auto-load files is %s.\n"
+msgstr ""
+
+#: auto-load.c:289
+msgid ""
+"Directory argument required.\n"
+"Use 'set auto-load safe-path /' for disabling the auto-load safe-path "
+"security."
+msgstr ""
+
+#: auto-load.c:311
+#, possible-c-format
+msgid "auto-load: Matching file \"%s\" to pattern \"%s\"\n"
+msgstr ""
+
+#: auto-load.c:329
+msgid "auto-load: Matched - empty pattern\n"
+msgstr ""
+
+#: auto-load.c:344
+#, possible-c-format
+msgid "auto-load: Not matched - pattern \"%s\".\n"
+msgstr ""
+
+#: auto-load.c:353
+#, possible-c-format
+msgid "auto-load: Matched - file \"%s\" to pattern \"%s\".\n"
+msgstr ""
+
+#: auto-load.c:407
+#, possible-c-format
+msgid "auto-load: Resolved file \"%s\" as \"%s\".\n"
+msgstr ""
+
+#: auto-load.c:422
+#, possible-c-format
+msgid "auto-load: File \"%s\" matches directory \"%s\".\n"
+msgstr ""
+
+#: auto-load.c:469
+#, possible-c-format
+msgid ""
+"File \"%s\" auto-loading has been declined by your `auto-load safe-path' set "
+"to \"%s\"."
+msgstr ""
+
+#: auto-load.c:490
+#, possible-c-format
+msgid ""
+"auto-load: Loading canned sequences of commands script \"%s\" for objfile \"%"
+"s\".\n"
+msgstr ""
+
+#: auto-load.c:721 auto-load.c:752
+#, possible-c-format
+msgid "auto-load: Attempted file \"%s\" %s.\n"
+msgstr ""
+
+#: auto-load.c:722 auto-load.c:755
+msgid "exists"
+msgstr ""
+
+#: auto-load.c:722 auto-load.c:755
+msgid "does not exist"
+msgstr ""
+
+#: auto-load.c:737
+#, possible-c-format
+msgid "auto-load: Searching 'set auto-load scripts-directory' path \"%s\".\n"
+msgstr ""
+
+#: auto-load.c:901 solib.c:886 solib.c:968 xcoffsolib.c:113
+#, possible-c-format
+msgid "Invalid regexp: %s"
+msgstr ""
+
+#: auto-load.c:978
+msgid "Local .gdbinit file was not found.\n"
+msgstr ""
+
+#: auto-load.c:980
+#, possible-c-format
+msgid "Local .gdbinit file \"%s\" has been loaded.\n"
+msgstr ""
+
+#: auto-load.c:983
+#, possible-c-format
+msgid "Local .gdbinit file \"%s\" has not been loaded.\n"
+msgstr ""
+
+#: auto-load.c:1020
+msgid ""
+"Valid is only global 'set auto-load no'; otherwise check the auto-load sub-"
+"commands."
+msgstr ""
+
+#: auto-load.c:1039
+msgid ""
+"Auto-loading specific settings.\n"
+"Configure various auto-load-specific variables such as\n"
+"automatic loading of Python scripts."
+msgstr ""
+
+#: auto-load.c:1066
+msgid ""
+"Show auto-loading specific settings.\n"
+"Show configuration of various auto-load-specific variables such as\n"
+"automatic loading of Python scripts."
+msgstr ""
+
+#: auto-load.c:1117
+msgid ""
+"Print current status of auto-loaded files.\n"
+"Print whether various files like Python scripts or .gdbinit files have been\n"
+"found and/or loaded."
+msgstr ""
+
+#: auto-load.c:1140
+msgid "Enable or disable auto-loading of canned sequences of commands scripts."
+msgstr ""
+
+#: auto-load.c:1141
+msgid ""
+"Show whether auto-loading of canned sequences of commands scripts is enabled."
+msgstr ""
+
+#: auto-load.c:1143
+msgid ""
+"If enabled, canned sequences of commands are loaded when the debugger reads\n"
+"an executable or shared library.\n"
+"This options has security implications for untrusted inferiors."
+msgstr ""
+
+#: auto-load.c:1152
+msgid ""
+"Print the list of automatically loaded sequences of commands.\n"
+"Usage: info auto-load gdb-scripts [REGEXP]"
+msgstr ""
+
+#: auto-load.c:1157
+msgid "Enable or disable auto-loading of .gdbinit script in current directory."
+msgstr ""
+
+#: auto-load.c:1158
+msgid ""
+"Show whether auto-loading .gdbinit script in current directory is enabled."
+msgstr ""
+
+#: auto-load.c:1160
+msgid ""
+"If enabled, canned sequences of commands are loaded when debugger starts\n"
+"from .gdbinit file in current directory.  Such files are deprecated,\n"
+"use a script associated with inferior executable file instead.\n"
+"This options has security implications for untrusted inferiors."
+msgstr ""
+
+#: auto-load.c:1170
+msgid ""
+"Print whether current directory .gdbinit file has been loaded.\n"
+"Usage: info auto-load local-gdbinit"
+msgstr ""
+
+#: auto-load.c:1176
+msgid "Set the list of directories from which to load auto-loaded scripts."
+msgstr ""
+
+#: auto-load.c:1177
+msgid "Show the list of directories from which to load auto-loaded scripts."
+msgstr ""
+
+#: auto-load.c:1178
+msgid ""
+"Automatically loaded Python scripts and GDB scripts are located in one of "
+"the\n"
+"directories listed by this option.  This option is ignored for the kinds of\n"
+"scripts having 'set auto-load ... off'.  Directories listed here need to be\n"
+"present also in the 'set auto-load safe-path' option."
+msgstr ""
+
+#: auto-load.c:1190
+msgid "Set the list of directories from which it is safe to auto-load files."
+msgstr ""
+
+#: auto-load.c:1191
+msgid "Show the list of directories from which it is safe to auto-load files."
+msgstr ""
+
+#: auto-load.c:1192
+msgid ""
+"Various files loaded automatically for the 'set auto-load ...' options must\n"
+"be located in one of the directories listed by this option.  Warning will "
+"be\n"
+"printed and file will not be used otherwise.\n"
+"Setting this parameter to an empty list resets it to its default value.\n"
+"Setting this parameter to '/' (without the quotes) allows any file\n"
+"for the 'set auto-load ...' options.  Each directory can be also shell\n"
+"wildcard pattern; '*' does not match directory separator.\n"
+"This option is ignored for the kinds of files having 'set auto-load ... "
+"off'.\n"
+"This options has security implications for untrusted inferiors."
+msgstr ""
+
+#: auto-load.c:1210
+msgid ""
+"Add entries to the list of directories from which it is safe to auto-load "
+"files.\n"
+"See the commands 'set auto-load safe-path' and 'show auto-load safe-path' "
+"to\n"
+"access the current full list setting."
+msgstr ""
+
+#: auto-load.c:1218
+msgid "Set auto-load verifications debugging."
+msgstr ""
+
+#: auto-load.c:1219
+msgid "Show auto-load verifications debugging."
+msgstr ""
+
+#: auto-load.c:1220
+msgid ""
+"When non-zero, debugging output for files of 'set auto-load ...'\n"
+"is displayed."
+msgstr ""
+
 #: auxv.c:419
 msgid "End of vector"
 msgstr ""
@@ -1792,19 +2171,19 @@ msgstr ""
 msgid "Program is not ELF"
 msgstr ""
 
-#: auxv.c:430 auxv.c:449
+#: auxv.c:430 auxv.c:453
 msgid "Real user ID"
 msgstr ""
 
-#: auxv.c:431 auxv.c:448
+#: auxv.c:431 auxv.c:452
 msgid "Effective user ID"
 msgstr ""
 
-#: auxv.c:432 auxv.c:451
+#: auxv.c:432 auxv.c:455
 msgid "Real group ID"
 msgstr ""
 
-#: auxv.c:433 auxv.c:450
+#: auxv.c:433 auxv.c:454
 msgid "Effective group ID"
 msgstr ""
 
@@ -1816,7 +2195,7 @@ msgstr ""
 msgid "String identifying platform"
 msgstr ""
 
-#: auxv.c:436 auxv.c:457
+#: auxv.c:436 auxv.c:461
 msgid "Machine-dependent CPU capability hints"
 msgstr ""
 
@@ -1860,79 +2239,95 @@ msgstr ""
 msgid "System-supplied DSO's ELF header"
 msgstr ""
 
-#: auxv.c:452
+#: auxv.c:448
+msgid "L1 Instruction cache information"
+msgstr ""
+
+#: auxv.c:449
+msgid "L1 Data cache information"
+msgstr ""
+
+#: auxv.c:450
+msgid "L2 cache information"
+msgstr ""
+
+#: auxv.c:451
+msgid "L3 cache information"
+msgstr ""
+
+#: auxv.c:456
 msgid "Dynamic linker's ELF header"
 msgstr ""
 
-#: auxv.c:453
+#: auxv.c:457
 msgid "Dynamic linker's section headers"
 msgstr ""
 
-#: auxv.c:454
+#: auxv.c:458
 msgid "String giving name of dynamic linker"
 msgstr ""
 
-#: auxv.c:455
+#: auxv.c:459
 msgid "Large pagesize"
 msgstr ""
 
-#: auxv.c:456
+#: auxv.c:460
 msgid "Platform name string"
 msgstr ""
 
-#: auxv.c:458
+#: auxv.c:462
 msgid "Should flush icache?"
 msgstr ""
 
-#: auxv.c:459
+#: auxv.c:463
 msgid "CPU name string"
 msgstr ""
 
-#: auxv.c:460
+#: auxv.c:464
 msgid "COFF entry point address"
 msgstr ""
 
-#: auxv.c:461
+#: auxv.c:465
 msgid "COFF executable file descriptor"
 msgstr ""
 
-#: auxv.c:463
+#: auxv.c:467
 msgid "Canonicalized file name given to execve"
 msgstr ""
 
-#: auxv.c:464
+#: auxv.c:468
 msgid "String for name of MMU module"
 msgstr ""
 
-#: auxv.c:465
+#: auxv.c:469
 msgid "Dynamic linker's data segment address"
 msgstr ""
 
-#: auxv.c:467
+#: auxv.c:471
 msgid "AF_SUN_ flags passed from the kernel"
 msgstr ""
 
-#: auxv.c:505
+#: auxv.c:509
 msgid "The program has no auxiliary information now."
 msgstr ""
 
-#: auxv.c:511
+#: auxv.c:515
 msgid "No auxiliary vector found, or failed reading it."
 msgstr ""
 
-#: auxv.c:513
+#: auxv.c:517
 msgid "Auxiliary vector is empty."
 msgstr ""
 
-#: auxv.c:524
+#: auxv.c:528
 msgid ""
 "Display the inferior's auxiliary vector.\n"
 "This is information provided by the operating system at program startup."
 msgstr ""
 
-#: avr-tdep.c:373 avr-tdep.c:391 i386-tdep.c:277 i386-tdep.c:2790
-#: i386-tdep.c:2894 i386-tdep.c:2977 s390-tdep.c:231 s390-tdep.c:250
-#: s390-tdep.c:313 s390-tdep.c:362 sparc64-tdep.c:339 spu-tdep.c:179
+#: avr-tdep.c:373 avr-tdep.c:391 i386-tdep.c:284 i386-tdep.c:2817
+#: i386-tdep.c:2921 i386-tdep.c:3004 s390-tdep.c:237 s390-tdep.c:256
+#: s390-tdep.c:319 s390-tdep.c:368 sparc64-tdep.c:339 spu-tdep.c:179
 #: spu-tdep.c:247 spu-tdep.c:308
 msgid "invalid regnum"
 msgstr ""
@@ -1942,259 +2337,289 @@ msgstr ""
 msgid "Num pushes too large: %d\n"
 msgstr ""
 
-#: avr-tdep.c:1485
+#: avr-tdep.c:1484
 msgid "ERR: info io_registers NOT supported by current target\n"
 msgstr ""
 
-#: avr-tdep.c:1493
+#: avr-tdep.c:1492
 msgid "Error fetching number of io registers\n"
 msgstr ""
 
-#: avr-tdep.c:1502
+#: avr-tdep.c:1501
 #, possible-c-format
 msgid ""
 "Target has %u io registers:\n"
 "\n"
 msgstr ""
 
-#: avr-tdep.c:1551
+#: avr-tdep.c:1550
 msgid "query remote avr target for io space register values"
 msgstr ""
 
-#: ax-gdb.c:549
+#: ax-gdb.c:552
 msgid "gen_fetch: strange size"
 msgstr ""
 
-#: ax-gdb.c:561
-msgid "gen_fetch: bad type code"
+#. Our caller requested us to dereference a pointer from an unsupported
+#. type.  Error out and give callers a chance to handle the failure
+#. gracefully.
+#: ax-gdb.c:562
+#, possible-c-format
+msgid "gen_fetch: Unsupported type code `%s'."
 msgstr ""
 
-#: ax-gdb.c:678
+#: ax-gdb.c:680
 msgid "gen_var_ref: LOC_CONST_BYTES symbols are not supported"
 msgstr ""
 
-#: ax-gdb.c:710
+#: ax-gdb.c:712
 #, possible-c-format
 msgid "Cannot compute value of typedef `%s'."
 msgstr ""
 
-#: ax-gdb.c:742
+#: ax-gdb.c:744
 #, possible-c-format
 msgid "Couldn't resolve symbol `%s'."
 msgstr ""
 
-#: ax-gdb.c:766
+#: ax-gdb.c:768
 #, possible-c-format
 msgid "Cannot find value of botched symbol `%s'."
 msgstr ""
 
-#: ax-gdb.c:802
+#: ax-gdb.c:804
 msgid "Value not scalar: cannot be an rvalue."
 msgstr ""
 
-#: ax-gdb.c:1047
+#: ax-gdb.c:1043
 msgid "Invalid type cast: intended type must be scalar."
 msgstr ""
 
-#: ax-gdb.c:1070
+#: ax-gdb.c:1066
 msgid "Casts to requested type are not yet implemented."
 msgstr ""
 
-#: ax-gdb.c:1138
+#: ax-gdb.c:1134
 msgid ""
 "First argument of `-' is a pointer, but second argument is neither\n"
 "an integer nor a pointer of the same type."
 msgstr ""
 
-#: ax-gdb.c:1191
+#: ax-gdb.c:1187
 #, possible-c-format
 msgid "Invalid combination of types in %s."
 msgstr ""
 
-#: ax-gdb.c:1208
+#: ax-gdb.c:1204
 msgid "Invalid type of operand to `!'."
 msgstr ""
 
-#: ax-gdb.c:1219
+#: ax-gdb.c:1215
 msgid "Invalid type of operand to `~'."
 msgstr ""
 
-#: ax-gdb.c:1237
+#: ax-gdb.c:1233
 msgid "gen_deref: expected a pointer"
 msgstr ""
 
-#: ax-gdb.c:1246 valops.c:926
+#: ax-gdb.c:1242 valops.c:930
 msgid "Attempt to dereference a generic pointer."
 msgstr ""
 
-#: ax-gdb.c:1267
+#: ax-gdb.c:1263
 msgid "Operand of `&' is an rvalue, which has no address."
 msgstr ""
 
-#: ax-gdb.c:1270
+#: ax-gdb.c:1266
 msgid "Operand of `&' is in a register, and has no address."
 msgstr ""
 
-#: ax-gdb.c:1342
+#: ax-gdb.c:1338
 msgid "gen_bitfield_ref: bitfield too wide"
 msgstr ""
 
-#: ax-gdb.c:1494 ax-gdb.c:1636
+#: ax-gdb.c:1490 ax-gdb.c:1632
 #, possible-c-format
 msgid "static field `%s' has been optimized out, cannot use"
 msgstr ""
 
-#: ax-gdb.c:1506
+#: ax-gdb.c:1502
 msgid "find_field: anonymous unions not supported"
 msgstr ""
 
-#: ax-gdb.c:1554
+#: ax-gdb.c:1550
 #, possible-c-format
 msgid "The left operand of `%s' is not a %s."
 msgstr ""
 
-#: ax-gdb.c:1560
+#: ax-gdb.c:1556
 msgid "Structure does not live in memory."
 msgstr ""
 
-#: ax-gdb.c:1566
+#: ax-gdb.c:1562
 #, possible-c-format
 msgid "Couldn't find member named `%s' in struct/union/class `%s'"
 msgstr ""
 
-#: ax-gdb.c:1624
+#: ax-gdb.c:1620
 msgid "non-aggregate type to gen_struct_elt_for_reference"
 msgstr ""
 
-#: ax-gdb.c:1642 valops.c:3298
+#: ax-gdb.c:1638 valops.c:3346
 msgid "pointers to bitfield members not allowed"
 msgstr ""
 
 #. FIXME we need a way to do "want_address" equivalent
-#: ax-gdb.c:1646 valops.c:3307
+#: ax-gdb.c:1642 valops.c:3355
 #, possible-c-format
 msgid "Cannot reference non-static field \"%s\""
 msgstr ""
 
-#: ax-gdb.c:1667 eval.c:1593 valops.c:3482
+#: ax-gdb.c:1663 eval.c:1622 valops.c:3530
 #, possible-c-format
 msgid "No symbol \"%s\" in namespace \"%s\"."
 msgstr ""
 
-#: ax-gdb.c:1697 ax-gdb.c:2015 ax-gdb.c:2197
+#: ax-gdb.c:1693 ax-gdb.c:2011 ax-gdb.c:2193
 #, possible-c-format
 msgid "`%s' has been optimized out, cannot use"
 msgstr ""
 
-#: ax-gdb.c:1721
+#: ax-gdb.c:1717
 msgid "non-aggregate type in gen_aggregate_elt_ref"
 msgstr ""
 
-#: ax-gdb.c:1748
+#: ax-gdb.c:1744
 msgid "Left operand of `@' must be an object in memory."
 msgstr ""
 
-#: ax-gdb.c:1756
+#: ax-gdb.c:1752
 msgid "Right operand of `@' must be a constant, in agent expressions."
 msgstr ""
 
-#: ax-gdb.c:1759
+#: ax-gdb.c:1755
 msgid "Right operand of `@' must be an integer."
 msgstr ""
 
-#: ax-gdb.c:1762
+#: ax-gdb.c:1758
 msgid "Right operand of `@' must be positive."
 msgstr ""
 
-#: ax-gdb.c:1941 ax-gdb.c:1977
+#: ax-gdb.c:1937 ax-gdb.c:1973
 #, possible-c-format
 msgid "$%s is not a trace state variable, may not assign to it"
 msgstr ""
 
-#: ax-gdb.c:1945 ax-gdb.c:1981
+#: ax-gdb.c:1941 ax-gdb.c:1977
 msgid "May only assign to trace state variables"
 msgstr ""
 
-#: ax-gdb.c:2030 tracepoint.c:1468
+#: ax-gdb.c:2026 tracepoint.c:1471
 #, possible-c-format
 msgid "Register $%s not available"
 msgstr ""
 
-#: ax-gdb.c:2034
+#: ax-gdb.c:2030
 #, possible-c-format
 msgid "'%s' is a user-register; GDB cannot yet trace user-register contents."
 msgstr ""
 
-#: ax-gdb.c:2060
+#: ax-gdb.c:2057
 #, possible-c-format
 msgid ""
 "$%s is not a trace state variable; GDB agent expressions cannot use "
 "convenience variables."
 msgstr ""
 
-#: ax-gdb.c:2139
+#: ax-gdb.c:2136
 msgid "Argument of unary `*' is not a pointer."
 msgstr ""
 
-#: ax-gdb.c:2175
+#: ax-gdb.c:2172
 msgid "gen_expr: unhandled struct case"
 msgstr ""
 
-#: ax-gdb.c:2192
+#: ax-gdb.c:2188
 #, possible-c-format
 msgid "no `%s' found"
 msgstr ""
 
-#: ax-gdb.c:2214 eval.c:806 eval.c:2949
+#: ax-gdb.c:2210 eval.c:836 eval.c:2972
 #, possible-c-format
 msgid "There is no field named %s"
 msgstr ""
 
-#: ax-gdb.c:2220
+#: ax-gdb.c:2216
 msgid "Attempt to use a type name as an expression."
 msgstr ""
 
-#: ax-gdb.c:2223
+#: ax-gdb.c:2219
 #, possible-c-format
 msgid "Unsupported operator %s (%d) in expression."
 msgstr ""
 
-#: ax-gdb.c:2299
+#: ax-gdb.c:2295
 msgid "cannot subscript requested type: cannot call user defined functions"
 msgstr ""
 
-#: ax-gdb.c:2312 eval.c:2247 eval.c:2302 eval.c:2332 jv-lang.c:989
+#: ax-gdb.c:2308 eval.c:2270 eval.c:2325 eval.c:2355 jv-lang.c:989
 #: m2-lang.c:265
 #, possible-c-format
 msgid "cannot subscript something of type `%s'"
 msgstr ""
 
-#: ax-gdb.c:2315 eval.c:2250 eval.c:2335 jv-lang.c:991 m2-lang.c:268
+#: ax-gdb.c:2311 eval.c:2273 eval.c:2358 jv-lang.c:991 m2-lang.c:268
 msgid "cannot subscript requested type"
 msgstr ""
 
-#: ax-gdb.c:2320 valarith.c:952
+#: ax-gdb.c:2316 valarith.c:952
 msgid "Argument to arithmetic operation not a number or boolean."
 msgstr ""
 
-#: ax-gdb.c:2375
+#: ax-gdb.c:2371
 msgid "gen_expr: op case sets don't match"
 msgstr ""
 
-#: ax-gdb.c:2527 ax-gdb.c:2579
+#: ax-gdb.c:2611 ax-gdb.c:2687
 msgid "GDB can't do agent expression translation with overlays."
 msgstr ""
 
-#: ax-gdb.c:2530 ax-gdb.c:2582
+#: ax-gdb.c:2614 ax-gdb.c:2690
 msgid "expression to translate"
 msgstr ""
 
-#: ax-gdb.c:2606
-msgid "Translate an expression into remote agent bytecode for tracing."
+#: ax-gdb.c:2697
+msgid "Must start with a format string."
 msgstr ""
 
-#: ax-gdb.c:2611
-msgid "Translate an expression into remote agent bytecode for evaluation."
+#: ax-gdb.c:2708 breakpoint.c:2215 printcmd.c:2027
+msgid "Bad format string, non-terminated '\"'."
+msgstr ""
+
+#: ax-gdb.c:2713 breakpoint.c:2220 printcmd.c:2032
+msgid "Invalid argument syntax"
+msgstr ""
+
+#: ax-gdb.c:2757
+msgid ""
+"Translate an expression into remote agent bytecode for tracing.\n"
+"Usage: maint agent [-at location,] EXPRESSION\n"
+"If -at is given, generate remote agent bytecode for this location.\n"
+"If not, generate remote agent bytecode for current frame pc address."
+msgstr ""
+
+#: ax-gdb.c:2765
+msgid ""
+"Translate an expression into remote agent bytecode for evaluation.\n"
+"Usage: maint agent-eval [-at location,] EXPRESSION\n"
+"If -at is given, generate remote agent bytecode for this location.\n"
+"If not, generate remote agent bytecode for current frame pc address."
+msgstr ""
+
+#: ax-gdb.c:2773
+msgid ""
+"Translate an expression into remote agent bytecode for evaluation and "
+"display the bytecodes."
 msgstr ""
 
 #: ax-general.c:128
@@ -2227,12 +2652,12 @@ msgstr ""
 msgid "GDB bug: ax-general.c (ax_const_d): floating point not supported yet"
 msgstr ""
 
-#: ax-general.c:295 ax-general.c:409
+#: ax-general.c:295 ax-general.c:446
 #, possible-c-format
 msgid "'%s' is a pseudo-register; GDB cannot yet trace its contents."
 msgstr ""
 
-#: ax-general.c:299 ax-general.c:413
+#: ax-general.c:299 ax-general.c:450
 #, possible-c-format
 msgid "Trace '%s' failed."
 msgstr ""
@@ -2246,39 +2671,49 @@ msgstr ""
 msgid "ax-general.c (ax_tsv): variable number is %d, out of range"
 msgstr ""
 
-#: ax-general.c:356
+#: ax-general.c:347
+#, possible-c-format
+msgid "ax-general.c (ax_string): string length is %d, out of allowed range"
+msgstr ""
+
+#: ax-general.c:380
 #, possible-c-format
 msgid "Scope: %s\n"
 msgstr ""
 
-#: ax-general.c:357
+#: ax-general.c:381
 msgid "Reg mask:"
 msgstr ""
 
-#: ax-general.c:359
+#: ax-general.c:383
 #, possible-c-format
 msgid " %02x"
 msgstr ""
 
-#: ax-general.c:360 darwin-nat.c:544 darwin-nat-info.c:294
+#: ax-general.c:384 darwin-nat.c:545 darwin-nat-info.c:294
 #: darwin-nat-info.c:587 darwin-nat-info.c:795
 msgid "\n"
 msgstr ""
 
-#: ax-general.c:366
+#: ax-general.c:390
 msgid "GDB bug: ax-general.c (ax_print): opcode map out of sync"
 msgstr ""
 
-#: ax-general.c:375
+#: ax-general.c:399
 #, possible-c-format
 msgid "%3d  <bad opcode %02x>\n"
 msgstr ""
 
-#: ax-general.c:381
+#: ax-general.c:405
 #, possible-c-format
 msgid "%3d  <incomplete opcode %s>\n"
 msgstr ""
 
+#: ax-general.c:427
+#, possible-c-format
+msgid " \"%s\", %d args"
+msgstr ""
+
 #. i18n: Like "Percentage of duplicates, by count: (not applicable)".
 #. i18n: "Average entry size: (not applicable)".
 #. i18n: "Average hash chain length: (not applicable)".
@@ -2399,495 +2834,582 @@ msgid ""
 msgstr ""
 
 #: bfin-tdep.c:701 bfin-tdep.c:721 xtensa-tdep.c:336 xtensa-tdep.c:641
-#: xtensa-tdep.c:740
+#: xtensa-tdep.c:739
 #, possible-c-format
 msgid "invalid register number %d"
 msgstr ""
 
-#: block.c:201
+#: block.c:216
 #, possible-c-format
 msgid ""
 "DW_OP_GNU_entry_value resolving cannot find DW_TAG_GNU_call_site %s in %s"
 msgstr ""
 
-#: breakpoint.c:309
+#: breakpoint.c:389
 #, possible-c-format
 msgid "Debugger's willingness to use watchpoint hardware is %s.\n"
 msgstr ""
 
-#: breakpoint.c:325
+#: breakpoint.c:405
 #, possible-c-format
 msgid "Debugger's behavior regarding pending breakpoints is %s.\n"
 msgstr ""
 
-#: breakpoint.c:341
+#: breakpoint.c:421
 #, possible-c-format
 msgid "Automatic usage of hardware breakpoints is %s.\n"
 msgstr ""
 
-#: breakpoint.c:367
+#: breakpoint.c:439
 #, possible-c-format
 msgid "Always inserted breakpoint mode is %s (currently %s).\n"
 msgstr ""
 
-#: breakpoint.c:372
+#: breakpoint.c:444
 #, possible-c-format
 msgid "Always inserted breakpoint mode is %s.\n"
 msgstr ""
 
-#: breakpoint.c:626
+#: breakpoint.c:798
+msgid ""
+"Target does not support breakpoint condition evaluation.\n"
+"Using host evaluation mode instead."
+msgstr ""
+
+#: breakpoint.c:854
+#, possible-c-format
+msgid "Breakpoint condition evaluation mode is %s (currently %s).\n"
+msgstr ""
+
+#: breakpoint.c:859
+#, possible-c-format
+msgid "Breakpoint condition evaluation mode is %s.\n"
+msgstr ""
+
+#: breakpoint.c:945
 #, possible-c-format
 msgid "Breakpoint %d now unconditional.\n"
 msgstr ""
 
-#: breakpoint.c:676
+#: breakpoint.c:1054
 msgid "breakpoint number"
 msgstr ""
 
-#: breakpoint.c:681
+#: breakpoint.c:1059
 #, possible-c-format
 msgid "Bad breakpoint argument: '%s'"
 msgstr ""
 
-#: breakpoint.c:692
+#: breakpoint.c:1070
 msgid ""
 "Cannot set a condition where a Python 'stop' method has been defined in the "
 "breakpoint."
 msgstr ""
 
-#: breakpoint.c:698 breakpoint.c:12125
+#: breakpoint.c:1080 breakpoint.c:14286
 #, possible-c-format
 msgid "No breakpoint number %d."
 msgstr ""
 
-#: breakpoint.c:715
+#: breakpoint.c:1097
 msgid "The 'while-stepping' command can only be used for tracepoints"
 msgstr ""
 
-#: breakpoint.c:725
+#: breakpoint.c:1107
 msgid "The 'collect' command can only be used for tracepoints"
 msgstr ""
 
-#: breakpoint.c:728
+#: breakpoint.c:1110
 msgid "The 'teval' command can only be used for tracepoints"
 msgstr ""
 
-#: breakpoint.c:769
+#: breakpoint.c:1151
 msgid "The 'while-stepping' command cannot be used for fast tracepoint"
 msgstr ""
 
-#: breakpoint.c:772
+#: breakpoint.c:1154
 msgid "The 'while-stepping' command cannot be used for static tracepoint"
 msgstr ""
 
-#: breakpoint.c:776
+#: breakpoint.c:1158
 msgid "The 'while-stepping' command can be used only once"
 msgstr ""
 
-#: breakpoint.c:791
+#: breakpoint.c:1173
 msgid "The 'while-stepping' command cannot be nested"
 msgstr ""
 
-#: breakpoint.c:924
+#: breakpoint.c:1306
 #, possible-c-format
 msgid "Type commands for breakpoint(s) %s, one per line."
 msgstr ""
 
-#: breakpoint.c:997
+#: breakpoint.c:1379
 msgid "No breakpoints specified."
 msgstr ""
 
-#: breakpoint.c:1117
+#: breakpoint.c:1503
 #, possible-c-format
 msgid "reading through apparently deleted breakpoint #%d?"
 msgstr ""
 
-#: breakpoint.c:1520
+#: breakpoint.c:1924
 msgid "Target does not support this type of hardware watchpoint."
 msgstr ""
 
-#: breakpoint.c:1523
+#: breakpoint.c:1927
 msgid "There are not enough available hardware resources for this watchpoint."
 msgstr ""
 
-#: breakpoint.c:1539
+#: breakpoint.c:1943
 msgid "Expression cannot be implemented with read/access watchpoint."
 msgstr ""
 
-#: breakpoint.c:1573
+#: breakpoint.c:1977
 #, possible-c-format
 msgid ""
 "Watchpoint %d deleted because the program has left the block\n"
 "in which its expression is valid.\n"
 msgstr ""
 
-#: breakpoint.c:1705
+#: breakpoint.c:2204
+msgid "No format string following the location"
+msgstr ""
+
+#: breakpoint.c:2456
 msgid ""
 "Note: automatically using hardware breakpoints for read-only addresses.\n"
 msgstr ""
 
-#: breakpoint.c:1714
+#: breakpoint.c:2465
 #, possible-c-format
 msgid "cannot set software breakpoint at readonly address %s"
 msgstr ""
 
-#: breakpoint.c:1739
+#: breakpoint.c:2490
 #, possible-c-format
 msgid "hardware breakpoint %d not supported in overlay!"
 msgstr ""
 
-#: breakpoint.c:1881
+#: breakpoint.c:2632
 #, possible-c-format
 msgid ""
 "Error inserting catchpoint %d: Your system does not support this type\n"
 "of catchpoint."
 msgstr ""
 
-#: breakpoint.c:1885
+#: breakpoint.c:2636
 #, possible-c-format
 msgid "Error inserting catchpoint %d."
 msgstr ""
 
-#: breakpoint.c:2597
+#: breakpoint.c:3511
 msgid "Cannot detach breakpoints of inferior_ptid"
 msgstr ""
 
-#: breakpoint.c:2717
+#: breakpoint.c:3631
 #, possible-c-format
 msgid "Could not remove hardware watchpoint %d."
 msgstr ""
 
-#: breakpoint.c:3424
+#: breakpoint.c:4343
 msgid "<unreadable>"
 msgstr ""
 
-#: breakpoint.c:3471
+#: breakpoint.c:4390
 msgid "print_bp_stop_message: unrecognized enum value"
 msgstr ""
 
-#. Did we stop because the user set the stop_on_solib_events
-#. variable?  (If so, we report this as a generic, "Stopped due
-#. to shlib event" message.)
-#: breakpoint.c:3520 breakpoint.c:11134
-msgid "Stopped due to shared library event\n"
+#: breakpoint.c:4409
+msgid "Stopped due to shared library event:\n"
+msgstr ""
+
+#: breakpoint.c:4412
+msgid "Stopped due to shared library event (no libraries added or removed)\n"
+msgstr ""
+
+#: breakpoint.c:4426
+msgid "  Inferior unloaded "
+msgstr ""
+
+#: breakpoint.c:4449
+msgid "  Inferior loaded "
 msgstr ""
 
 #. Error from catch_errors.
-#: breakpoint.c:3962
+#: breakpoint.c:4951
 #, possible-c-format
 msgid "Watchpoint %d deleted.\n"
 msgstr ""
 
-#: breakpoint.c:4077
+#: breakpoint.c:5070
 msgid "Watchpoint condition cannot be tested in the current scope"
 msgstr ""
 
-#: breakpoint.c:4448
+#: breakpoint.c:5464
 msgid "bpstat_what: tracepoint encountered"
 msgstr ""
 
-#: breakpoint.c:4461
+#: breakpoint.c:5482
 #, possible-c-format
 msgid "bpstat_what: unhandled bptype %d"
 msgstr ""
 
-#: breakpoint.c:4682
+#: breakpoint.c:5754
 #, possible-c-format
 msgid "bptypes table does not describe type #%d."
 msgstr ""
 
-#: breakpoint.c:4772
+#: breakpoint.c:5844
 msgid "print_one_breakpoint: bp_none encountered\n"
 msgstr ""
 
-#: breakpoint.c:5359
+#: breakpoint.c:6471
 msgid "Note: breakpoint "
 msgstr ""
 
 #. if (others == ???)
-#: breakpoint.c:5361
+#: breakpoint.c:6473
 msgid "Note: breakpoints "
 msgstr ""
 
-#: breakpoint.c:5381
-msgid "also set at pc "
+#: breakpoint.c:6493
+msgid "also set at pc "
+msgstr ""
+
+#: breakpoint.c:6673
+#, possible-c-format
+msgid "Breakpoint %d address previously adjusted from %s to %s."
+msgstr ""
+
+#: breakpoint.c:6676
+#, possible-c-format
+msgid "Breakpoint address adjusted from %s to %s."
+msgstr ""
+
+#: breakpoint.c:6781
+msgid "unknown breakpoint type"
+msgstr ""
+
+#: breakpoint.c:7372
+#, possible-c-format
+msgid "Temporarily disabling breakpoints for unloaded shared library \"%s\""
+msgstr ""
+
+#: breakpoint.c:7497
+#, possible-c-format
+msgid "Catchpoint %d (fork)"
 msgstr ""
 
-#: breakpoint.c:5561
+#: breakpoint.c:7610
 #, possible-c-format
-msgid "Breakpoint %d address previously adjusted from %s to %s."
+msgid "Catchpoint %d (vfork)"
 msgstr ""
 
-#: breakpoint.c:5564
+#: breakpoint.c:7787
 #, possible-c-format
-msgid "Breakpoint address adjusted from %s to %s."
+msgid "load of library matching %s"
 msgstr ""
 
-#: breakpoint.c:5664
-msgid "unknown breakpoint type"
+#: breakpoint.c:7789
+msgid "load of library"
 msgstr ""
 
-#: breakpoint.c:6166
+#: breakpoint.c:7794
 #, possible-c-format
-msgid "Temporarily disabling breakpoints for unloaded shared library \"%s\""
+msgid "unload of library matching %s"
+msgstr ""
+
+#: breakpoint.c:7796
+msgid "unload of library"
 msgstr ""
 
-#: breakpoint.c:6286
+#: breakpoint.c:7807
 #, possible-c-format
-msgid "Catchpoint %d (fork)"
+msgid "Catchpoint %d (%s)"
 msgstr ""
 
-#: breakpoint.c:6394
+#: breakpoint.c:7857 objc-lang.c:740 objc-lang.c:891 symtab.c:3501
+#: thread.c:1328
 #, possible-c-format
-msgid "Catchpoint %d (vfork)"
+msgid "Invalid regexp (%s): %s"
 msgstr ""
 
-#: breakpoint.c:6682
+#: breakpoint.c:8209
 #, possible-c-format
 msgid "Catchpoint %d (syscalls"
 msgstr ""
 
-#: breakpoint.c:6684
+#: breakpoint.c:8211
 #, possible-c-format
 msgid "Catchpoint %d (syscall"
 msgstr ""
 
-#: breakpoint.c:6701
+#: breakpoint.c:8228
 #, possible-c-format
 msgid "Catchpoint %d (any syscall)"
 msgstr ""
 
-#: breakpoint.c:6902
+#: breakpoint.c:8434
 #, possible-c-format
 msgid "Catchpoint %d (exec)"
 msgstr ""
 
-#: breakpoint.c:7265 breakpoint.c:12329
+#: breakpoint.c:8793 printcmd.c:2020
+msgid "Bad format string, missing '\"'."
+msgstr ""
+
+#: breakpoint.c:8800
+msgid "No function supplied for dprintf call"
+msgstr ""
+
+#: breakpoint.c:8818
+msgid "Target cannot run dprintf commands, falling back to GDB printf"
+msgstr ""
+
+#: breakpoint.c:8824
+msgid "Invalid dprintf style."
+msgstr ""
+
+#: breakpoint.c:8894 breakpoint.c:14498
 msgid "No hardware breakpoint support in the target."
 msgstr ""
 
-#: breakpoint.c:7267 breakpoint.c:8345 breakpoint.c:12331
+#: breakpoint.c:8896 breakpoint.c:10011 breakpoint.c:14500
 msgid "Hardware breakpoints used exceeds limit."
 msgstr ""
 
-#: breakpoint.c:7321 breakpoint.c:7330
+#: breakpoint.c:8951 breakpoint.c:8960
 #, possible-c-format
 msgid "Probed static tracepoint marker \"%s\"\n"
 msgstr ""
 
-#: breakpoint.c:7335
+#: breakpoint.c:8965
 msgid "Couldn't determine the static tracepoint marker to probe"
 msgstr ""
 
-#: breakpoint.c:7356
+#: breakpoint.c:8987
+#, possible-c-format
+msgid "Garbage '%s' follows condition"
+msgstr ""
+
+#: breakpoint.c:8997
+msgid "Format string required"
+msgstr ""
+
+#: breakpoint.c:9000
 #, possible-c-format
-msgid "Garbage %s follows condition"
+msgid "Garbage '%s' at end of command"
 msgstr ""
 
-#: breakpoint.c:7510
+#: breakpoint.c:9155
 msgid "No default breakpoint address now."
 msgstr ""
 
-#: breakpoint.c:7575
+#: breakpoint.c:9227
 #, possible-c-format
 msgid "May not have a fast tracepoint at 0x%s%s"
 msgstr ""
 
-#: breakpoint.c:7626
+#: breakpoint.c:9285
 msgid "Junk after thread keyword."
 msgstr ""
 
-#: breakpoint.c:7628 breakpoint.c:9108 thread.c:1239
+#: breakpoint.c:9287 breakpoint.c:10777 thread.c:1247
 #, possible-c-format
 msgid "Unknown thread %d."
 msgstr ""
 
-#: breakpoint.c:7638
+#: breakpoint.c:9297
 msgid "Junk after task keyword."
 msgstr ""
 
-#: breakpoint.c:7640
+#: breakpoint.c:9299
 #, possible-c-format
 msgid "Unknown task %d."
 msgstr ""
 
-#: breakpoint.c:7671
+#: breakpoint.c:9333
 #, possible-c-format
 msgid "No known static tracepoint marker named %s"
 msgstr ""
 
-#: breakpoint.c:7775
+#: breakpoint.c:9424
 #, possible-c-format
 msgid "Make %s pending on future shared library load? "
 msgstr ""
 
-#: breakpoint.c:7953
+#: breakpoint.c:9577
 msgid ""
 "Multiple breakpoints were set.\n"
 "Use the \"delete\" command to delete unwanted breakpoints."
 msgstr ""
 
-#: breakpoint.c:8008 linespec.c:2429
+#: breakpoint.c:9640 linespec.c:1833
 #, possible-c-format
 msgid "No line %d in file \"%s\"."
 msgstr ""
 
-#: breakpoint.c:8082
+#: breakpoint.c:9714
 msgid ""
 "Specify the type of breakpoint to set.\n"
 "Usage: stop in <function | address>\n"
 "       stop at <line>\n"
 msgstr ""
 
-#: breakpoint.c:8115
+#: breakpoint.c:9747
 msgid "Usage: stop in <function | address>\n"
 msgstr ""
 
-#: breakpoint.c:8147
+#: breakpoint.c:9779
 msgid "Usage: stop at <line>\n"
 msgstr ""
 
-#: breakpoint.c:8272
+#: breakpoint.c:9810
+msgid "May only run agent-printf on the target"
+msgstr ""
+
+#: breakpoint.c:9938
 #, possible-c-format
 msgid "Hardware assisted ranged breakpoint %d from %s to %s."
 msgstr ""
 
-#: breakpoint.c:8313 breakpoint.c:8393
+#: breakpoint.c:9979 breakpoint.c:10059
 msgid "Could not find location of the end of the range."
 msgstr ""
 
-#: breakpoint.c:8338
+#: breakpoint.c:10004
 msgid "This target does not support hardware ranged breakpoints."
 msgstr ""
 
-#: breakpoint.c:8349
+#: breakpoint.c:10015
 msgid "No address range specified."
 msgstr ""
 
-#: breakpoint.c:8359
+#: breakpoint.c:10025
 msgid "Too few arguments."
 msgstr ""
 
-#: breakpoint.c:8361
+#: breakpoint.c:10027
 msgid "Could not find location of the beginning of the range."
 msgstr ""
 
-#: breakpoint.c:8367 breakpoint.c:8398
+#: breakpoint.c:10033 breakpoint.c:10064
 msgid "Cannot create a ranged breakpoint with multiple locations."
 msgstr ""
 
-#: breakpoint.c:8406
+#: breakpoint.c:10072
 msgid "Invalid address range, end precedes start."
 msgstr ""
 
 #. Length overflowed.
-#: breakpoint.c:8411
+#: breakpoint.c:10077
 msgid "Address range too large."
 msgstr ""
 
-#: breakpoint.c:8798 breakpoint.c:8921 breakpoint.c:8977 breakpoint.c:9008
+#: breakpoint.c:10467 breakpoint.c:10590 breakpoint.c:10646 breakpoint.c:10677
 msgid "Invalid hardware watchpoint type."
 msgstr ""
 
-#: breakpoint.c:8829
+#: breakpoint.c:10498
 msgid "Invalid watchpoint type."
 msgstr ""
 
-#: breakpoint.c:8925
+#: breakpoint.c:10594
 msgid ""
 "\n"
 "Check the underlying instruction at PC for the memory\n"
 "address and value which triggered this watchpoint.\n"
 msgstr ""
 
-#: breakpoint.c:9096
+#: breakpoint.c:10765
 msgid "You can specify only one thread."
 msgstr ""
 
-#: breakpoint.c:9104
+#: breakpoint.c:10773
 #, possible-c-format
 msgid "Invalid thread ID specification %s."
 msgstr ""
 
-#: breakpoint.c:9118
+#: breakpoint.c:10787
 msgid "You can specify only one mask."
 msgstr ""
 
-#: breakpoint.c:9156
+#: breakpoint.c:10825
 #, possible-c-format
 msgid "Cannot watch constant value `%.*s'."
 msgstr ""
 
-#: breakpoint.c:9177
+#: breakpoint.c:10846
 msgid "This target does not support masked watchpoints."
 msgstr ""
 
-#: breakpoint.c:9179
+#: breakpoint.c:10848
 msgid "Invalid mask or memory region."
 msgstr ""
 
-#: breakpoint.c:9205
+#: breakpoint.c:10874
 msgid "Junk at end of command."
 msgstr ""
 
-#: breakpoint.c:9548
+#: breakpoint.c:11203
 msgid "Couldn't get information on specified line."
 msgstr ""
 
-#: breakpoint.c:9700
+#: breakpoint.c:11370
 msgid "unsupported or unknown fork kind; cannot catch it"
 msgstr ""
 
-#: breakpoint.c:9809
+#: breakpoint.c:11479
 msgid " (throw)"
 msgstr ""
 
-#: breakpoint.c:9810
+#: breakpoint.c:11480
 msgid " (catch)"
 msgstr ""
 
-#: breakpoint.c:9876
+#: breakpoint.c:11546
 msgid "Unsupported or unknown exception event; cannot catch it"
 msgstr ""
 
-#: breakpoint.c:9881
+#: breakpoint.c:11551
 msgid "Unsupported with this platform/compiler combination."
 msgstr ""
 
 #. Here we have to issue an error instead of a warning,
 #. because GDB cannot do anything useful if there's no
 #. syscall number to be caught.
-#: breakpoint.c:9977
+#: breakpoint.c:11647
 #, possible-c-format
 msgid "Unknown syscall name '%s'."
 msgstr ""
 
-#: breakpoint.c:10001
+#: breakpoint.c:11671
 msgid "The feature 'catch syscall' is not supported on this architecture yet."
 msgstr ""
 
-#: breakpoint.c:10032 breakpoint.c:10039
+#: breakpoint.c:11702 breakpoint.c:11709
 msgid "Catch requires an event name."
 msgstr ""
 
-#: breakpoint.c:10096
+#: breakpoint.c:11767
 msgid "No source file specified."
 msgstr ""
 
-#: breakpoint.c:10186
+#: breakpoint.c:11872
 #, possible-c-format
 msgid "No breakpoint at %s."
 msgstr ""
 
-#: breakpoint.c:10188
+#: breakpoint.c:11874
 msgid "No breakpoint at this line."
 msgstr ""
 
-#: breakpoint.c:10211
+#: breakpoint.c:11897
 msgid "Deleted breakpoint "
 msgstr ""
 
-#: breakpoint.c:10213
+#: breakpoint.c:11899
 msgid "Deleted breakpoints "
 msgstr ""
 
@@ -2899,195 +3421,195 @@ msgstr ""
 #. Note that at this point, old_loc->owner is still
 #. valid, as delete_breakpoint frees the breakpoint
 #. only after calling us.
-#: breakpoint.c:10558
+#: breakpoint.c:12334
 #, possible-c-format
 msgid "warning: Error removing breakpoint %d\n"
 msgstr ""
 
-#: breakpoint.c:10662
+#: breakpoint.c:12442
 msgid "allegedly permanent breakpoint is not actually inserted"
 msgstr ""
 
-#: breakpoint.c:10694
+#: breakpoint.c:12484
 msgid "another breakpoint was inserted on top of a permanent breakpoint"
 msgstr ""
 
-#: breakpoint.c:10774
+#: breakpoint.c:12575
 #, possible-c-format
 msgid " (%s) pending."
 msgstr ""
 
-#: breakpoint.c:11051
+#: breakpoint.c:12897
 msgid "Temporary breakpoint"
 msgstr ""
 
-#: breakpoint.c:11053
+#: breakpoint.c:12899
 msgid "Breakpoint"
 msgstr ""
 
-#: breakpoint.c:11054 breakpoint.c:11272 breakpoint.c:11276 breakpoint.c:11280
+#: breakpoint.c:12900 breakpoint.c:13234 breakpoint.c:13238 breakpoint.c:13242
 #, possible-c-format
 msgid " %d"
 msgstr ""
 
-#: breakpoint.c:11056
+#: breakpoint.c:12902
 msgid " at gnu-indirect-function resolver"
 msgstr ""
 
-#: breakpoint.c:11059
+#: breakpoint.c:12905
 #, possible-c-format
 msgid "Hardware assisted breakpoint %d"
 msgstr ""
 
-#: breakpoint.c:11080
+#: breakpoint.c:12908
+#, possible-c-format
+msgid "Dprintf %d"
+msgstr ""
+
+#: breakpoint.c:12929
 #, possible-c-format
 msgid "unhandled breakpoint type %d"
 msgstr ""
 
 #. Not sure how we will get here.
 #. GDB should not stop for these breakpoints.
-#: breakpoint.c:11143
+#: breakpoint.c:13037
 msgid "Thread Event Breakpoint: gdb should not stop!\n"
 msgstr ""
 
 #. By analogy with the thread event, GDB should not stop for these.
-#: breakpoint.c:11148
+#: breakpoint.c:13042
 msgid "Overlay Event Breakpoint: gdb should not stop!\n"
 msgstr ""
 
 #. These should never be enabled.
-#: breakpoint.c:11153
+#: breakpoint.c:13047
 msgid "Longjmp Master Breakpoint: gdb should not stop!\n"
 msgstr ""
 
 #. These should never be enabled.
-#: breakpoint.c:11158
+#: breakpoint.c:13052
 msgid "std::terminate Master Breakpoint: gdb should not stop!\n"
 msgstr ""
 
 #. These should never be enabled.
-#: breakpoint.c:11164
+#: breakpoint.c:13058
 msgid "Exception Master Breakpoint: gdb should not stop!\n"
 msgstr ""
 
-#: breakpoint.c:11271
+#: breakpoint.c:13187
+msgid "probe not found"
+msgstr ""
+
+#: breakpoint.c:13233
 msgid "Tracepoint"
 msgstr ""
 
-#: breakpoint.c:11275
+#: breakpoint.c:13237
 msgid "Fast tracepoint"
 msgstr ""
 
-#: breakpoint.c:11279
+#: breakpoint.c:13241
 msgid "Static tracepoint"
 msgstr ""
 
-#: breakpoint.c:11284 breakpoint.c:11303
+#: breakpoint.c:13246 breakpoint.c:13265
 #, possible-c-format
 msgid "unhandled tracepoint type %d"
 msgstr ""
 
-#: breakpoint.c:11497
+#: breakpoint.c:13430
+#, possible-c-format
+msgid "marker %s not found"
+msgstr ""
+
+#: breakpoint.c:13624
 msgid "Delete all breakpoints? "
 msgstr ""
 
-#: breakpoint.c:11604
+#: breakpoint.c:13730
 #, possible-c-format
 msgid "static tracepoint %d changed probed marker from %s to %s"
 msgstr ""
 
-#: breakpoint.c:11639
+#: breakpoint.c:13765
 #, possible-c-format
 msgid "marker for static tracepoint %d (%s) not found at previous line number"
 msgstr ""
 
-#: breakpoint.c:11737
+#: breakpoint.c:13863
 #, possible-c-format
 msgid "Could not reset ranged breakpoint %d: multiple locations found\n"
 msgstr ""
 
-#: breakpoint.c:11777
+#: breakpoint.c:13904
 #, possible-c-format
 msgid "failed to reevaluate condition for breakpoint %d: %s"
 msgstr ""
 
-#: breakpoint.c:11868
-#, possible-c-format
-msgid "marker %s not found"
-msgstr ""
-
-#: breakpoint.c:12100
+#: breakpoint.c:14261
 #, possible-c-format
 msgid "Ignore count ignored for tracepoint %d."
 msgstr ""
 
-#: breakpoint.c:12109
+#: breakpoint.c:14270
 #, possible-c-format
 msgid "Will stop next time breakpoint %d is reached."
 msgstr ""
 
-#: breakpoint.c:12113
+#: breakpoint.c:14274
 #, possible-c-format
 msgid "Will ignore next crossing of breakpoint %d."
 msgstr ""
 
-#: breakpoint.c:12116
+#: breakpoint.c:14277
 #, possible-c-format
 msgid "Will ignore next %d crossings of breakpoint %d."
 msgstr ""
 
-#: breakpoint.c:12137
+#: breakpoint.c:14298
 msgid "a breakpoint number"
 msgstr ""
 
-#: breakpoint.c:12141
+#: breakpoint.c:14302
 #, possible-c-format
 msgid "bad breakpoint number: '%s'"
 msgstr ""
 
-#: breakpoint.c:12143
+#: breakpoint.c:14304
 msgid "Second argument (specified ignore-count) is missing."
 msgstr ""
 
-#: breakpoint.c:12166
+#: breakpoint.c:14327
 msgid "one or more breakpoint numbers"
 msgstr ""
 
-#: breakpoint.c:12179
+#: breakpoint.c:14340
 #, possible-c-format
 msgid "bad breakpoint number at or near '%s'"
 msgstr ""
 
-#: breakpoint.c:12191
+#: breakpoint.c:14352
 #, possible-c-format
 msgid "No breakpoint number %d.\n"
 msgstr ""
 
-#: breakpoint.c:12211 breakpoint.c:12220
+#: breakpoint.c:14372 breakpoint.c:14381
 #, possible-c-format
 msgid "Bad breakpoint number '%s'"
 msgstr ""
 
-#: breakpoint.c:12225 breakpoint.c:12232
+#: breakpoint.c:14386 breakpoint.c:14393
 #, possible-c-format
 msgid "Bad breakpoint location number '%s'"
 msgstr ""
 
-#: breakpoint.c:12351
+#: breakpoint.c:14520
 #, possible-c-format
 msgid "Cannot enable watchpoint %d: "
 msgstr ""
 
-#: breakpoint.c:12518 symtab.c:4681
-msgid "Empty line specification."
-msgstr ""
-
-#: breakpoint.c:12526 symtab.c:4691
-#, possible-c-format
-msgid "Junk at end of line specification: %s"
-msgstr ""
-
-#: breakpoint.c:12608
+#: breakpoint.c:14791
 #, possible-c-format
 msgid "Could not insert single-step breakpoint at %s"
 msgstr ""
@@ -3096,76 +3618,76 @@ msgstr ""
 #. address.  Since there is no way to confirm that the address
 #. means the same thing as when the trace was started, warn the
 #. user.
-#: breakpoint.c:12861
+#: breakpoint.c:15062
 #, possible-c-format
 msgid "Uploaded tracepoint %d has no source location, using raw address"
 msgstr ""
 
-#: breakpoint.c:12870
+#: breakpoint.c:15071
 #, possible-c-format
 msgid "Uploaded tracepoint %d condition has no source form, ignoring it"
 msgstr ""
 
-#: breakpoint.c:12918
+#: breakpoint.c:15120
 #, possible-c-format
 msgid "Uploaded tracepoint %d actions have no source form, ignoring them"
 msgstr ""
 
-#: breakpoint.c:12992
+#: breakpoint.c:15194
 msgid "Delete all tracepoints? "
 msgstr ""
 
-#: breakpoint.c:13011
+#: breakpoint.c:15213
 #, possible-c-format
 msgid "Setting tracepoint %d's passcount to %d\n"
 msgstr ""
 
-#: breakpoint.c:13028
+#: breakpoint.c:15230
 msgid "passcount command requires an argument (count + optional TP num)"
 msgstr ""
 
-#: breakpoint.c:13126
+#: breakpoint.c:15328
 msgid "tracepoint number"
 msgstr ""
 
-#: breakpoint.c:13134
+#: breakpoint.c:15336
 #, possible-c-format
 msgid "bad tracepoint number at or near '%s'\n"
 msgstr ""
 
-#: breakpoint.c:13137
+#: breakpoint.c:15339
 msgid "Tracepoint argument missing and no previous tracepoint\n"
 msgstr ""
 
-#: breakpoint.c:13181
+#: breakpoint.c:15383
 msgid "Argument required (file name in which to save)"
 msgstr ""
 
-#: breakpoint.c:13207
+#: breakpoint.c:15409
 msgid "Nothing to save."
 msgstr ""
 
-#: breakpoint.c:13215
+#: breakpoint.c:15417
 #, possible-c-format
 msgid "Unable to open file '%s' for saving (%s)"
 msgstr ""
 
-#: breakpoint.c:13285
+#: breakpoint.c:15487
 #, possible-c-format
 msgid "Saved to file '%s'.\n"
 msgstr ""
 
-#: breakpoint.c:13383
+#: breakpoint.c:15590
 msgid "\"save\" must be followed by the name of a save subcommand.\n"
 msgstr ""
 
-#: breakpoint.c:13610
+#: breakpoint.c:15875
 msgid ""
 "Set ignore-count of breakpoint number N to COUNT.\n"
 "Usage is `ignore N COUNT'."
 msgstr ""
 
-#: breakpoint.c:13616
+#: breakpoint.c:15881
 msgid ""
 "Set commands to be executed when a breakpoint is hit.\n"
 "Give breakpoint number as argument after \"commands\".\n"
@@ -3176,14 +3698,14 @@ msgid ""
 "then no output is printed when it is hit, except what the commands print."
 msgstr ""
 
-#: breakpoint.c:13625
+#: breakpoint.c:15890
 msgid ""
 "Specify breakpoint number N to break only if COND is true.\n"
 "Usage is `condition N COND', where N is an integer and COND is an\n"
 "expression to be evaluated whenever breakpoint N is reached."
 msgstr ""
 
-#: breakpoint.c:13630
+#: breakpoint.c:15896
 msgid ""
 "Set a temporary breakpoint.\n"
 "Like \"break\" except the breakpoint is only temporary,\n"
@@ -3192,7 +3714,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: breakpoint.c:13639
+#: breakpoint.c:15905
 msgid ""
 "Set a hardware assisted breakpoint.\n"
 "Like \"break\" except the breakpoint requires hardware support,\n"
@@ -3200,7 +3722,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: breakpoint.c:13647
+#: breakpoint.c:15913
 msgid ""
 "Set a temporary hardware assisted breakpoint.\n"
 "Like \"hbreak\" except the breakpoint is only temporary,\n"
@@ -3208,7 +3730,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: breakpoint.c:13655 breakpoint.c:13663
+#: breakpoint.c:15921 breakpoint.c:15929
 msgid ""
 "Enable some breakpoints.\n"
 "Give breakpoint numbers (separated by spaces) as arguments.\n"
@@ -3217,7 +3739,7 @@ msgid ""
 "With a subcommand you can enable temporarily."
 msgstr ""
 
-#: breakpoint.c:13672
+#: breakpoint.c:15938
 msgid ""
 "Enable some breakpoints.\n"
 "Give breakpoint numbers (separated by spaces) as arguments.\n"
@@ -3225,19 +3747,26 @@ msgid ""
 "May be abbreviated to simply \"enable\".\n"
 msgstr ""
 
-#: breakpoint.c:13679 breakpoint.c:13694
+#: breakpoint.c:15945 breakpoint.c:15966
 msgid ""
 "Enable breakpoints for one hit.  Give breakpoint numbers.\n"
 "If a breakpoint is hit while enabled in this fashion, it becomes disabled."
 msgstr ""
 
-#: breakpoint.c:13684 breakpoint.c:13689
+#: breakpoint.c:15950 breakpoint.c:15961
 msgid ""
 "Enable breakpoints and delete when hit.  Give breakpoint numbers.\n"
 "If a breakpoint is hit while enabled in this fashion, it is deleted."
 msgstr ""
 
-#: breakpoint.c:13699 breakpoint.c:13708
+#: breakpoint.c:15955 breakpoint.c:15971
+msgid ""
+"Enable breakpoints for COUNT hits.  Give count and then breakpoint numbers.\n"
+"If a breakpoint is hit while enabled in this fashion,\n"
+"the count is decremented; when it reaches zero, the breakpoint is disabled."
+msgstr ""
+
+#: breakpoint.c:15977 breakpoint.c:15986
 msgid ""
 "Disable some breakpoints.\n"
 "Arguments are breakpoint numbers with spaces in between.\n"
@@ -3245,7 +3774,7 @@ msgid ""
 "A disabled breakpoint is not forgotten, but has no effect until re-enabled."
 msgstr ""
 
-#: breakpoint.c:13714
+#: breakpoint.c:15992
 msgid ""
 "Disable some breakpoints.\n"
 "Arguments are breakpoint numbers with spaces in between.\n"
@@ -3254,7 +3783,7 @@ msgid ""
 "This command may be abbreviated \"disable\"."
 msgstr ""
 
-#: breakpoint.c:13722
+#: breakpoint.c:16000
 msgid ""
 "Delete some breakpoints or auto-display expressions.\n"
 "Arguments are breakpoint numbers with spaces in between.\n"
@@ -3264,14 +3793,14 @@ msgid ""
 "The \"unset\" command is also an alias for \"delete\"."
 msgstr ""
 
-#: breakpoint.c:13733
+#: breakpoint.c:16011
 msgid ""
 "Delete some breakpoints.\n"
 "Arguments are breakpoint numbers with spaces in between.\n"
 "To delete all breakpoints, give no argument.\n"
 msgstr ""
 
-#: breakpoint.c:13738
+#: breakpoint.c:16016
 msgid ""
 "Delete some breakpoints or auto-display expressions.\n"
 "Arguments are breakpoint numbers with spaces in between.\n"
@@ -3279,7 +3808,7 @@ msgid ""
 "This command may be abbreviated \"delete\"."
 msgstr ""
 
-#: breakpoint.c:13745
+#: breakpoint.c:16023
 msgid ""
 "Clear breakpoint at specified line or function.\n"
 "Argument may be line number, function name, or \"*\" and an address.\n"
@@ -3294,23 +3823,23 @@ msgid ""
 "See also the \"delete\" command which clears breakpoints by number."
 msgstr ""
 
-#: breakpoint.c:13758
+#: breakpoint.c:16036
 msgid "Set breakpoint at specified line or function.\n"
 msgstr ""
 
-#: breakpoint.c:13773
+#: breakpoint.c:16051
 msgid "Break in function/address or break at a line in the current file."
 msgstr ""
 
-#: breakpoint.c:13777
+#: breakpoint.c:16055
 msgid "Break in function or address."
 msgstr ""
 
-#: breakpoint.c:13779
+#: breakpoint.c:16057
 msgid "Break at a line in the current file."
 msgstr ""
 
-#: breakpoint.c:13780 breakpoint.c:13816
+#: breakpoint.c:16058 breakpoint.c:16094
 msgid ""
 "Status of user-settable breakpoints, or breakpoint number NUMBER.\n"
 "The \"Type\" column indicates one of:\n"
@@ -3332,7 +3861,7 @@ msgid ""
 "breakpoint set."
 msgstr ""
 
-#: breakpoint.c:13797
+#: breakpoint.c:16075
 msgid ""
 "Status of specified breakpoints (all user-settable breakpoints if no "
 "argument).\n"
@@ -3355,7 +3884,7 @@ msgid ""
 "breakpoint set."
 msgstr ""
 
-#: breakpoint.c:13832
+#: breakpoint.c:16110
 msgid ""
 "Status of all breakpoints, or breakpoint number NUMBER.\n"
 "The \"Type\" column indicates one of:\n"
@@ -3381,42 +3910,52 @@ msgid ""
 "breakpoint set."
 msgstr ""
 
-#: breakpoint.c:13853
+#: breakpoint.c:16131
 msgid "Set catchpoints to catch events."
 msgstr ""
 
 #. allow-unknown
-#: breakpoint.c:13858
+#: breakpoint.c:16136
 msgid "Set temporary catchpoints to catch events."
 msgstr ""
 
 #. allow-unknown
 #. Add catch and tcatch sub-commands.
-#: breakpoint.c:13864
-msgid ""
-"Catch an exception, when caught.\n"
-"With an argument, catch only exceptions with the given name."
+#: breakpoint.c:16142
+msgid "Catch an exception, when caught."
 msgstr ""
 
-#: breakpoint.c:13871
-msgid ""
-"Catch an exception, when thrown.\n"
-"With an argument, catch only exceptions with the given name."
+#: breakpoint.c:16148
+msgid "Catch an exception, when thrown."
 msgstr ""
 
-#: breakpoint.c:13878
+#: breakpoint.c:16154
 msgid "Catch calls to fork."
 msgstr ""
 
-#: breakpoint.c:13883
+#: breakpoint.c:16159
 msgid "Catch calls to vfork."
 msgstr ""
 
-#: breakpoint.c:13888
+#: breakpoint.c:16164
 msgid "Catch calls to exec."
 msgstr ""
 
-#: breakpoint.c:13893
+#: breakpoint.c:16169
+msgid ""
+"Catch loads of shared libraries.\n"
+"Usage: catch load [REGEX]\n"
+"If REGEX is given, only stop for libraries matching the regular expression."
+msgstr ""
+
+#: breakpoint.c:16176
+msgid ""
+"Catch unloads of shared libraries.\n"
+"Usage: catch unload [REGEX]\n"
+"If REGEX is given, only stop for libraries matching the regular expression."
+msgstr ""
+
+#: breakpoint.c:16183
 msgid ""
 "Catch system calls by their names and/or numbers.\n"
 "Arguments say which system calls to catch.  If no arguments\n"
@@ -3425,7 +3964,7 @@ msgid ""
 "(if your system supports that), or system call numbers."
 msgstr ""
 
-#: breakpoint.c:13904
+#: breakpoint.c:16194
 msgid ""
 "Set a watchpoint for an expression.\n"
 "Usage: watch [-l|-location] EXPRESSION\n"
@@ -3435,7 +3974,7 @@ msgid ""
 "the memory to which it refers."
 msgstr ""
 
-#: breakpoint.c:13913
+#: breakpoint.c:16203
 msgid ""
 "Set a read watchpoint for an expression.\n"
 "Usage: rwatch [-l|-location] EXPRESSION\n"
@@ -3445,7 +3984,7 @@ msgid ""
 "the memory to which it refers."
 msgstr ""
 
-#: breakpoint.c:13922
+#: breakpoint.c:16212
 msgid ""
 "Set a watchpoint for an expression.\n"
 "Usage: awatch [-l|-location] EXPRESSION\n"
@@ -3455,19 +3994,19 @@ msgid ""
 "the memory to which it refers."
 msgstr ""
 
-#: breakpoint.c:13931
+#: breakpoint.c:16221
 msgid "Status of specified watchpoints (all watchpoints if no argument)."
 msgstr ""
 
-#: breakpoint.c:13937
+#: breakpoint.c:16227
 msgid "Set debugger's willingness to use watchpoint hardware."
 msgstr ""
 
-#: breakpoint.c:13938
+#: breakpoint.c:16228
 msgid "Show debugger's willingness to use watchpoint hardware."
 msgstr ""
 
-#: breakpoint.c:13939
+#: breakpoint.c:16229
 msgid ""
 "If zero, gdb will not use hardware for new watchpoints, even if\n"
 "such is available.  (However, any hardware watchpoints that were\n"
@@ -3476,25 +4015,25 @@ msgid ""
 msgstr ""
 
 #. Tracepoint manipulation commands.
-#: breakpoint.c:13952
+#: breakpoint.c:16242
 msgid ""
 "Set a tracepoint at specified line or function.\n"
 "\n"
 msgstr ""
 
-#: breakpoint.c:13955 breakpoint.c:13967
+#: breakpoint.c:16245 breakpoint.c:16257
 msgid ""
 "\n"
 "Do \"help tracepoints\" for info on other tracepoint commands."
 msgstr ""
 
-#: breakpoint.c:13964
+#: breakpoint.c:16254
 msgid ""
 "Set a fast tracepoint at specified line or function.\n"
 "\n"
 msgstr ""
 
-#: breakpoint.c:13971
+#: breakpoint.c:16261
 msgid ""
 "Set a static tracepoint at specified line, function or marker.\n"
 "\n"
@@ -3522,35 +4061,35 @@ msgid ""
 "Do \"help tracepoints\" for info on other tracepoint commands."
 msgstr ""
 
-#: breakpoint.c:13997
+#: breakpoint.c:16287
 msgid ""
 "Status of specified tracepoints (all tracepoints if no argument).\n"
 "Convenience variable \"$tpnum\" contains the number of the\n"
 "last tracepoint set."
 msgstr ""
 
-#: breakpoint.c:14004
+#: breakpoint.c:16294
 msgid ""
 "Delete specified tracepoints.\n"
 "Arguments are tracepoint numbers, separated by spaces.\n"
 "No argument means delete all tracepoints."
 msgstr ""
 
-#: breakpoint.c:14010
+#: breakpoint.c:16300
 msgid ""
 "Disable specified tracepoints.\n"
 "Arguments are tracepoint numbers, separated by spaces.\n"
 "No argument means disable all tracepoints."
 msgstr ""
 
-#: breakpoint.c:14017
+#: breakpoint.c:16307
 msgid ""
 "Enable specified tracepoints.\n"
 "Arguments are tracepoint numbers, separated by spaces.\n"
 "No argument means enable all tracepoints."
 msgstr ""
 
-#: breakpoint.c:14024
+#: breakpoint.c:16314
 msgid ""
 "Set the passcount for a tracepoint.\n"
 "The trace will end when the tracepoint has been passed 'count' times.\n"
@@ -3558,12 +4097,12 @@ msgid ""
 "if TPNUM is omitted, passcount refers to the last tracepoint defined."
 msgstr ""
 
-#: breakpoint.c:14031
+#: breakpoint.c:16321
 msgid "Save breakpoint definitions as a script."
 msgstr ""
 
 #. allow-unknown
-#: breakpoint.c:14035
+#: breakpoint.c:16325
 msgid ""
 "Save current breakpoint definitions as a script.\n"
 "This includes all types of breakpoints (breakpoints, watchpoints,\n"
@@ -3571,29 +4110,29 @@ msgid ""
 "session to restore them."
 msgstr ""
 
-#: breakpoint.c:14043
+#: breakpoint.c:16333
 msgid ""
 "Save current tracepoint definitions as a script.\n"
 "Use the 'source' command in another debug session to restore them."
 msgstr ""
 
 #. allow-unknown
-#: breakpoint.c:14052 breakpoint.c:14058
+#: breakpoint.c:16342 breakpoint.c:16348
 msgid ""
 "Breakpoint specific settings\n"
 "Configure various breakpoint-specific variables such as\n"
 "pending breakpoint behavior"
 msgstr ""
 
-#: breakpoint.c:14066
+#: breakpoint.c:16356
 msgid "Set debugger's behavior regarding pending breakpoints."
 msgstr ""
 
-#: breakpoint.c:14067
+#: breakpoint.c:16357
 msgid "Show debugger's behavior regarding pending breakpoints."
 msgstr ""
 
-#: breakpoint.c:14068
+#: breakpoint.c:16358
 msgid ""
 "If on, an unrecognized breakpoint location will cause gdb to create a\n"
 "pending breakpoint.  If off, an unrecognized breakpoint location results in\n"
@@ -3601,15 +4140,15 @@ msgid ""
 "user-query to see if a pending breakpoint should be created."
 msgstr ""
 
-#: breakpoint.c:14081
+#: breakpoint.c:16371
 msgid "Set automatic usage of hardware breakpoints."
 msgstr ""
 
-#: breakpoint.c:14082
+#: breakpoint.c:16372
 msgid "Show automatic usage of hardware breakpoints."
 msgstr ""
 
-#: breakpoint.c:14083
+#: breakpoint.c:16373
 msgid ""
 "If set, the debugger will automatically use hardware breakpoints for\n"
 "breakpoints set with \"break\" but falling in read-only memory.  If not "
@@ -3617,15 +4156,15 @@ msgid ""
 "a warning will be emitted for such breakpoints."
 msgstr ""
 
-#: breakpoint.c:14093
+#: breakpoint.c:16383
 msgid "Set mode for inserting breakpoints."
 msgstr ""
 
-#: breakpoint.c:14094
+#: breakpoint.c:16384
 msgid "Show mode for inserting breakpoints."
 msgstr ""
 
-#: breakpoint.c:14095
+#: breakpoint.c:16385
 msgid ""
 "When this mode is off, breakpoints are inserted in inferior when it is\n"
 "resumed, and removed when execution stops.  When this mode is on,\n"
@@ -3637,7 +4176,27 @@ msgid ""
 "inferior in all-stop mode, gdb behaves as if always-inserted mode is off."
 msgstr ""
 
-#: breakpoint.c:14109
+#: breakpoint.c:16401
+msgid "Set mode of breakpoint condition evaluation."
+msgstr ""
+
+#: breakpoint.c:16402
+msgid "Show mode of breakpoint condition evaluation."
+msgstr ""
+
+#: breakpoint.c:16403
+msgid ""
+"When this is set to \"host\", breakpoint conditions will be\n"
+"evaluated on the host's side by GDB.  When it is set to \"target\",\n"
+"breakpoint conditions will be downloaded to the target (if the target\n"
+"supports such feature) and conditions will be evaluated on the target's "
+"side.\n"
+"If this is set to \"auto\" (default), this will be automatically set to\n"
+"\"target\" if it supports condition evaluation, otherwise it will\n"
+"be set to \"gdb\""
+msgstr ""
+
+#: breakpoint.c:16416
 msgid ""
 "Set a breakpoint for an address range.\n"
 "break-range START-LOCATION, END-LOCATION\n"
@@ -3655,6 +4214,70 @@ msgid ""
 "range (including START-LOCATION and END-LOCATION)."
 msgstr ""
 
+#: breakpoint.c:16432
+msgid ""
+"Set a dynamic printf at specified line or function.\n"
+"dprintf location,format string,arg1,arg2,...\n"
+"location may be a line number, function name, or \"*\" and an address.\n"
+"If a line number is specified, break at start of code for that line.\n"
+"If a function is specified, break at start of code for that function.\n"
+msgstr ""
+
+#: breakpoint.c:16442
+msgid "Set the style of usage for dynamic printf."
+msgstr ""
+
+#: breakpoint.c:16443
+msgid "Show the style of usage for dynamic printf."
+msgstr ""
+
+#: breakpoint.c:16444
+msgid ""
+"This setting chooses how GDB will do a dynamic printf.\n"
+"If the value is \"gdb\", then the printing is done by GDB to its own\n"
+"console, as with the \"printf\" command.\n"
+"If the value is \"call\", the print is done by calling a function in your\n"
+"program; by default printf(), but you can choose a different function or\n"
+"output stream by setting dprintf-function and dprintf-channel."
+msgstr ""
+
+#: breakpoint.c:16456
+msgid "Set the function to use for dynamic printf"
+msgstr ""
+
+#: breakpoint.c:16457
+msgid "Show the function to use for dynamic printf"
+msgstr ""
+
+#: breakpoint.c:16464
+msgid "Set the channel to use for dynamic printf"
+msgstr ""
+
+#: breakpoint.c:16465
+msgid "Show the channel to use for dynamic printf"
+msgstr ""
+
+#: breakpoint.c:16471
+msgid "Set whether dprintf continues after GDB disconnects."
+msgstr ""
+
+#: breakpoint.c:16472
+msgid "Show whether dprintf continues after GDB disconnects."
+msgstr ""
+
+#: breakpoint.c:16473
+msgid ""
+"Use this to let dprintf commands continue to hit and produce output\n"
+"even if GDB disconnects or detaches from the target."
+msgstr ""
+
+#: breakpoint.c:16480
+msgid ""
+"agent-printf \"printf format string\", arg1, arg2, arg3, ..., argn\n"
+"(target agent only) This is useful for formatted output in user-defined "
+"commands."
+msgstr ""
+
 #: bsd-kvm.c:154
 #, possible-c-format
 msgid "\tUsing the kernel crash dump %s.\n"
@@ -3709,183 +4332,214 @@ msgstr ""
 msgid "Bad magic"
 msgstr ""
 
-#: buildsym.c:324
+#: buildsym.c:327
 #, possible-c-format
 msgid "block end address less than block start address in %s (patched it)"
 msgstr ""
 
-#: buildsym.c:331
+#: buildsym.c:334
 #, possible-c-format
 msgid "block end address %s less than block start address %s (patched it)"
 msgstr ""
 
-#: buildsym.c:364
+#: buildsym.c:367
 #, possible-c-format
 msgid "inner block not inside outer block in %s"
 msgstr ""
 
-#: buildsym.c:370
+#: buildsym.c:373
 #, possible-c-format
 msgid "inner block (%s-%s) not inside outer block (%s-%s)"
 msgstr ""
 
-#: buildsym.c:509
+#: buildsym.c:524
 #, possible-c-format
 msgid "block at %s out of order"
 msgstr ""
 
 #. We should always be able to find the objfile ...
-#: buildsym.c:683 buildsym.c:697 dbxread.c:3096 exec.c:442 exec.c:624
-#: language.c:513 language.c:911 mdebugread.c:3705 minsyms.c:159 monitor.c:325
-#: monitor.c:355 monitor.c:1321 printcmd.c:495 printcmd.c:831 printcmd.c:2677
-#: psymtab.c:702 psymtab.c:720 remote-mips.c:2700 target.c:960 target.c:1045
-#: target.c:1060 target.c:1087 utils.c:2049 utils.c:2987 utils.c:3030
-#: utils.c:3197 valprint.c:639
+#: buildsym.c:698 buildsym.c:712 dbxread.c:3097 exec.c:441 exec.c:623
+#: language.c:645 mdebugread.c:3705 minsyms.c:159 monitor.c:325 monitor.c:355
+#: monitor.c:1321 printcmd.c:489 printcmd.c:828 printcmd.c:2425 psymtab.c:716
+#: psymtab.c:734 remote-mips.c:2698 target.c:978 target.c:1062 target.c:1077
+#: target.c:1104 utils.c:1884 utils.c:2822 utils.c:2865 utils.c:3032
+#: valprint.c:986
 msgid "failed internal consistency check"
 msgstr ""
 
-#: buildsym.c:963
+#: buildsym.c:994
 msgid "Context stack not empty in end_symtab"
 msgstr ""
 
-#: c-exp.y:701
+#: buildsym.c:1347
+msgid "Context stack not empty in augment_type_symtab"
+msgstr ""
+
+#: buildsym.c:1351
+msgid "Blocks in a type symtab"
+msgstr ""
+
+#: buildsym.c:1353
+msgid "Macro in a type symtab"
+msgstr ""
+
+#: buildsym.c:1356
+msgid "Line numbers recorded in a type symtab"
+msgstr ""
+
+#: c-exp.y:720
 msgid "Undefined string concatenation."
 msgstr ""
 
-#: c-exp.y:764
+#: c-exp.y:783 go-exp.y:580
 #, possible-c-format
 msgid "@entry can be used only for function parameters, not for \"%s\""
 msgstr ""
 
-#: c-exp.y:779 m2-exp.y:589 objc-exp.y:649 p-exp.y:667
+#: c-exp.y:798 m2-exp.y:585 objc-exp.y:655 p-exp.y:673
 #, possible-c-format
 msgid "No symbol \"%s\" in specified context."
 msgstr ""
 
-#: c-exp.y:796 c-exp.y:812 objc-exp.y:664 objc-exp.y:678 p-exp.y:682
+#: c-exp.y:822 c-exp.y:838 objc-exp.y:677 objc-exp.y:691 p-exp.y:688
 #, possible-c-format
 msgid "`%s' is not defined as an aggregate type."
 msgstr ""
 
-#: c-exp.y:831
+#: c-exp.y:857
 #, possible-c-format
 msgid "No type \"%s\" within class or namespace \"%s\"."
 msgstr ""
 
-#: c-exp.y:862 c-exp.y:914 f-exp.y:521 m2-exp.y:638 objc-exp.y:724
-#: objc-exp.y:778 objc-exp.y:861 p-exp.y:719 p-exp.y:788 printcmd.c:1237
-#: valops.c:2697
+#: c-exp.y:888 c-exp.y:940 f-exp.y:527 go-exp.y:631 m2-exp.y:641
+#: objc-exp.y:737 objc-exp.y:791 objc-exp.y:874 p-exp.y:725 p-exp.y:794
+#: printcmd.c:1250 valops.c:2745
 #, possible-c-format
 msgid "No symbol \"%s\" in current context."
 msgstr ""
 
-#: c-exp.y:1545 objc-exp.y:1105 p-exp.y:963
+#: c-exp.y:1470
+msgid "parameter types following 'void'"
+msgstr ""
+
+#: c-exp.y:1475
+msgid "'void' invalid as parameter type"
+msgstr ""
+
+#: c-exp.y:1646 go-exp.y:829 objc-exp.y:1114 p-exp.y:969
 msgid "Numeric constant too large."
 msgstr ""
 
-#: c-exp.y:1645
+#: c-exp.y:1746
 msgid "\\x escape without a following hex digit"
 msgstr ""
 
-#: c-exp.y:1695
+#: c-exp.y:1796
 #, possible-c-format
 msgid "\\%c escape without a following hex digit"
 msgstr ""
 
-#: c-exp.y:1862 macroexp.c:397 objc-exp.y:1513 p-exp.y:1374
+#: c-exp.y:1963 go-exp.y:961 macroexp.c:408 objc-exp.y:1519 p-exp.y:1379
 msgid "Unterminated string in expression."
 msgstr ""
 
-#: c-exp.y:1864 linespec.c:1058 macroexp.c:343 objc-exp.y:1283 p-exp.y:1203
+#: c-exp.y:1965 go-exp.y:963 macroexp.c:354 objc-exp.y:1292 p-exp.y:1208
 msgid "Unmatched single quote."
 msgstr ""
 
-#: c-exp.y:2236 f-exp.y:1101 m2-exp.y:955 objc-exp.y:1399 p-exp.y:1301
+#: c-exp.y:2338 f-exp.y:1102 go-exp.y:1185 m2-exp.y:957 objc-exp.y:1408
+#: p-exp.y:1306
 #, possible-c-format
 msgid "Invalid number \"%s\"."
 msgstr ""
 
-#: c-exp.y:2293 objc-exp.y:1270 p-exp.y:1190
+#: c-exp.y:2395 go-exp.y:1237 objc-exp.y:1279 p-exp.y:1195
 msgid "Empty character constant."
 msgstr ""
 
-#: c-exp.y:2301 objc-exp.y:1288 p-exp.y:1209
+#: c-exp.y:2403 go-exp.y:1245 objc-exp.y:1297 p-exp.y:1214
 msgid "Invalid character constant."
 msgstr ""
 
 #. We must have come across a bad character (e.g. ';').
-#: c-exp.y:2310 f-exp.y:1135 m2-exp.y:964 objc-exp.y:1525 p-exp.y:1386
+#: c-exp.y:2412 f-exp.y:1136 go-exp.y:1254 m2-exp.y:966 objc-exp.y:1531
+#: p-exp.y:1391
 #, possible-c-format
 msgid "Invalid character '%c' in expression."
 msgstr ""
 
-#: c-exp.y:2690 f-exp.y:1226 m2-exp.y:1093 objc-exp.y:1785 p-exp.y:1741
+#: c-exp.y:2636
+msgid "not reached"
+msgstr ""
+
+#: c-exp.y:2801 f-exp.y:1226 go-exp.y:1622 m2-exp.y:1080 objc-exp.y:1790
+#: p-exp.y:1745
 #, possible-c-format
 msgid "A %s in expression, near `%s'."
 msgstr ""
 
-#: charset.c:217
+#: charset.c:218
 #, possible-c-format
 msgid "The host character set is \"auto; currently %s\".\n"
 msgstr ""
 
-#: charset.c:220
+#: charset.c:221
 #, possible-c-format
 msgid "The host character set is \"%s\".\n"
 msgstr ""
 
-#: charset.c:230
+#: charset.c:231
 #, possible-c-format
 msgid "The target character set is \"auto; currently %s\".\n"
 msgstr ""
 
-#: charset.c:234
+#: charset.c:235
 #, possible-c-format
 msgid "The target character set is \"%s\".\n"
 msgstr ""
 
-#: charset.c:247
+#: charset.c:248
 #, possible-c-format
 msgid "The target wide character set is \"auto; currently %s\".\n"
 msgstr ""
 
-#: charset.c:251
+#: charset.c:252
 #, possible-c-format
 msgid "The target wide character set is \"%s\".\n"
 msgstr ""
 
-#: charset.c:326 charset.c:332
+#: charset.c:327 charset.c:333
 #, possible-c-format
 msgid "Cannot convert between character sets `%s' and `%s'"
 msgstr ""
 
-#: charset.c:488 charset.c:595
+#: charset.c:489 charset.c:596
 msgid "Converting character sets"
 msgstr ""
 
-#: charset.c:524
+#: charset.c:525
 #, possible-c-format
 msgid "Could not convert character to `%s' character set"
 msgstr ""
 
-#: charset.c:555 charset.c:696
+#: charset.c:556 charset.c:697
 msgid "Internal error while converting character sets"
 msgstr ""
 
 #. No valid charset found, generate error here.
-#: charset.c:1002
+#: charset.c:998
 msgid "Unable to find a vaild charset for string conversions"
 msgstr ""
 
-#: charset.c:1045
+#: charset.c:1041
 msgid "Set the host and target character sets."
 msgstr ""
 
-#: charset.c:1046
+#: charset.c:1042
 msgid "Show the host and target character sets."
 msgstr ""
 
-#: charset.c:1047
+#: charset.c:1043
 msgid ""
 "The `host character set' is the one used by the system GDB is running on.\n"
 "The `target character set' is the one used by the program being debugged.\n"
@@ -3894,15 +4548,15 @@ msgid ""
 "To see a list of the character sets GDB supports, type `set charset <TAB>'."
 msgstr ""
 
-#: charset.c:1061
+#: charset.c:1057
 msgid "Set the host character set."
 msgstr ""
 
-#: charset.c:1062
+#: charset.c:1058
 msgid "Show the host character set."
 msgstr ""
 
-#: charset.c:1063
+#: charset.c:1059
 msgid ""
 "The `host character set' is the one used by the system GDB is running on.\n"
 "You may only use supersets of ASCII for your host character set; GDB does\n"
@@ -3911,15 +4565,15 @@ msgid ""
 "<TAB>'."
 msgstr ""
 
-#: charset.c:1073
+#: charset.c:1069
 msgid "Set the target character set."
 msgstr ""
 
-#: charset.c:1074
+#: charset.c:1070
 msgid "Show the target character set."
 msgstr ""
 
-#: charset.c:1075
+#: charset.c:1071
 msgid ""
 "The `target character set' is the one used by the program being debugged.\n"
 "GDB translates characters and strings between the host and target\n"
@@ -3928,15 +4582,15 @@ msgid ""
 "charset'<TAB>"
 msgstr ""
 
-#: charset.c:1086
+#: charset.c:1082
 msgid "Set the target wide character set."
 msgstr ""
 
-#: charset.c:1087
+#: charset.c:1083
 msgid "Show the target wide character set."
 msgstr ""
 
-#: charset.c:1088
+#: charset.c:1084
 msgid ""
 "The `target wide character set' is the one used by the program being "
 "debugged.\n"
@@ -3947,42 +4601,42 @@ msgid ""
 "`set target-wide-charset'<TAB>"
 msgstr ""
 
-#: c-lang.c:68 c-lang.c:616
+#: c-lang.c:68 c-lang.c:615
 msgid "unhandled c_string_type"
 msgstr ""
 
-#: c-lang.c:335
+#: c-lang.c:334
 #, possible-c-format
 msgid "Error reading string from inferior: %s"
 msgstr ""
 
-#: c-lang.c:369
+#: c-lang.c:368
 #, possible-c-format
 msgid "Trying to read string with inappropriate type `%s'."
 msgstr ""
 
-#: c-lang.c:373
+#: c-lang.c:372
 msgid "Trying to read string with inappropriate type."
 msgstr ""
 
-#: c-lang.c:474
+#: c-lang.c:473
 msgid "Malformed escape sequence"
 msgstr ""
 
-#: c-lang.c:501
+#: c-lang.c:500
 msgid "\\x used with no following hex digits."
 msgstr ""
 
-#: c-lang.c:523
+#: c-lang.c:522
 msgid "\\u used with no following hex digits"
 msgstr ""
 
-#: c-lang.c:675
+#: c-lang.c:674
 msgid "Could not convert character constant to target character set"
 msgstr ""
 
 #. To avoid memory corruption.
-#: c-lang.c:701 eval.c:1011
+#: c-lang.c:700 eval.c:1041
 msgid "Too many array elements"
 msgstr ""
 
@@ -3995,196 +4649,195 @@ msgstr ""
 msgid "\"info\" must be followed by the name of an info command.\n"
 msgstr ""
 
-#: cli/cli-cmds.c:336 cli/cli-script.c:1501 infcmd.c:1140 infcmd.c:1154
-#: infcmd.c:2289 symfile.c:1103 symfile.c:1268 symfile.c:2360
-#: tracepoint.c:2165 tracepoint.c:2171
+#: cli/cli-cmds.c:334 cli/cli-script.c:1520 infcmd.c:1165 infcmd.c:1179
+#: infcmd.c:2319 symfile.c:1086 symfile.c:1254 symfile.c:2401
+#: tracepoint.c:2200 tracepoint.c:2206
 msgid "Not confirmed."
 msgstr ""
 
-#: cli/cli-cmds.c:347
+#: cli/cli-cmds.c:345
 #, possible-c-format
 msgid "The \"pwd\" command does not take an argument: %s"
 msgstr ""
 
-#: cli/cli-cmds.c:349
+#: cli/cli-cmds.c:347
 #, possible-c-format
 msgid "Error finding name of working directory: %s"
 msgstr ""
 
-#: cli/cli-cmds.c:353
+#: cli/cli-cmds.c:351
 #, possible-c-format
 msgid ""
 "Working directory %s\n"
 " (canonically %s).\n"
 msgstr ""
 
-#: cli/cli-cmds.c:356
+#: cli/cli-cmds.c:354
 #, possible-c-format
 msgid "Working directory %s.\n"
 msgstr ""
 
-#: cli/cli-cmds.c:372
+#: cli/cli-cmds.c:370
 msgid "new working directory"
 msgstr ""
 
-#: cli/cli-cmds.c:468
+#: cli/cli-cmds.c:466
 #, possible-c-format
 msgid "Script filename extension recognition is \"%s\".\n"
 msgstr ""
 
-#: cli/cli-cmds.c:572
+#: cli/cli-cmds.c:575
 msgid "source command requires file name of file to source."
 msgstr ""
 
-#: cli/cli-cmds.c:757
+#: cli/cli-cmds.c:761
 msgid "Fork failed"
 msgstr ""
 
-#: cli/cli-cmds.c:783
+#: cli/cli-cmds.c:787
 msgid "No default source file yet."
 msgstr ""
 
-#: cli/cli-cmds.c:810 cli/cli-cmds.c:975
+#: cli/cli-cmds.c:814 cli/cli-cmds.c:979
 msgid "Junk at end of line specification."
 msgstr ""
 
 #. FIXME-32x64--assumes sal.pc fits in long.
-#: cli/cli-cmds.c:822 cli/cli-cmds.c:994
+#: cli/cli-cmds.c:826 cli/cli-cmds.c:998
 #, possible-c-format
 msgid "No source file for address %s."
 msgstr ""
 
-#: cli/cli-cmds.c:842 cli/cli-cmds.c:1015
+#: cli/cli-cmds.c:846 cli/cli-cmds.c:1019
 #, possible-c-format
 msgid "No line number known for %s."
 msgstr ""
 
-#: cli/cli-cmds.c:979
+#: cli/cli-cmds.c:983
 msgid "Specified start and end are in different files."
 msgstr ""
 
-#: cli/cli-cmds.c:981
+#: cli/cli-cmds.c:985
 msgid "Two empty args do not say what lines to list."
 msgstr ""
 
-#: cli/cli-cmds.c:1024 cli/cli-cmds.c:1030
+#: cli/cli-cmds.c:1028 cli/cli-cmds.c:1034
 msgid "No default source file yet.  Do \"help list\"."
 msgstr ""
 
-#. Assume g++ compiled code; old GDB 4.16 behaviour.
-#: cli/cli-cmds.c:1096 dwarf2loc.c:1862 python/py-symbol.c:295 stack.c:2050
-#: stack.c:2058 stack.c:2132 valops.c:1499
+#: cli/cli-cmds.c:1100 dwarf2loc.c:2023 python/py-symbol.c:378 stack.c:2012
+#: stack.c:2094 valops.c:1501
 msgid "No frame selected."
 msgstr ""
 
-#: cli/cli-cmds.c:1100
+#: cli/cli-cmds.c:1104
 msgid "No function contains program counter for selected frame."
 msgstr ""
 
-#: cli/cli-cmds.c:1144
+#: cli/cli-cmds.c:1148
 msgid "Missing modifier."
 msgstr ""
 
-#: cli/cli-cmds.c:1157
+#: cli/cli-cmds.c:1161
 msgid "Invalid disassembly modifier."
 msgstr ""
 
-#: cli/cli-cmds.c:1179
+#: cli/cli-cmds.c:1183
 msgid "No function contains specified address."
 msgstr ""
 
-#: cli/cli-cmds.c:1239
+#: cli/cli-cmds.c:1244
 msgid "Not a user command."
 msgstr ""
 
-#: cli/cli-cmds.c:1262
+#: cli/cli-cmds.c:1267
 msgid "REGEXP string is empty"
 msgstr ""
 
-#: cli/cli-cmds.c:1278
+#: cli/cli-cmds.c:1283
 #, possible-c-format
 msgid "Error in regular expression: %s"
 msgstr ""
 
-#: cli/cli-cmds.c:1340
+#: cli/cli-cmds.c:1345
 msgid "Usage: alias [-a] [--] ALIAS = COMMAND"
 msgstr ""
 
-#: cli/cli-cmds.c:1379
+#: cli/cli-cmds.c:1384
 #, possible-c-format
 msgid "Invalid command name: %s"
 msgstr ""
 
-#: cli/cli-cmds.c:1381
+#: cli/cli-cmds.c:1386
 #, possible-c-format
 msgid "Invalid command element name: %s"
 msgstr ""
 
-#: cli/cli-cmds.c:1395
+#: cli/cli-cmds.c:1400
 #, possible-c-format
 msgid "Invalid command to alias to: %s"
 msgstr ""
 
-#: cli/cli-cmds.c:1402
+#: cli/cli-cmds.c:1407
 #, possible-c-format
 msgid "Alias already exists: %s"
 msgstr ""
 
-#: cli/cli-cmds.c:1427
+#: cli/cli-cmds.c:1431
 msgid "Mismatched command length between ALIAS and COMMAND."
 msgstr ""
 
-#: cli/cli-cmds.c:1447
+#: cli/cli-cmds.c:1451
 msgid "ALIAS and COMMAND prefixes do not match."
 msgstr ""
 
-#: cli/cli-cmds.c:1467
+#: cli/cli-cmds.c:1471
 #, possible-c-format
 msgid "file: \"%s\", line number: %d\n"
 msgstr ""
 
-#: cli/cli-cmds.c:1553
+#: cli/cli-cmds.c:1557
 msgid "\"set debug\" must be followed by the name of a debug subcommand.\n"
 msgstr ""
 
-#: cli/cli-cmds.c:1601
+#: cli/cli-cmds.c:1605
 #, possible-c-format
 msgid "Verbose printing of informational messages is %s.\n"
 msgstr ""
 
-#: cli/cli-cmds.c:1604
+#: cli/cli-cmds.c:1608
 #, possible-c-format
 msgid "Verbosity is %s.\n"
 msgstr ""
 
-#: cli/cli-cmds.c:1611
+#: cli/cli-cmds.c:1615
 #, possible-c-format
 msgid "History expansion on command input is %s.\n"
 msgstr ""
 
-#: cli/cli-cmds.c:1619
+#: cli/cli-cmds.c:1623
 #, possible-c-format
 msgid "Baud rate for remote serial I/O is %s.\n"
 msgstr ""
 
-#: cli/cli-cmds.c:1627
+#: cli/cli-cmds.c:1631
 #, possible-c-format
 msgid "Debugging of remote protocol is %s.\n"
 msgstr ""
 
-#: cli/cli-cmds.c:1636
+#: cli/cli-cmds.c:1640
 #, possible-c-format
 msgid "Timeout limit to wait for target to respond is %s.\n"
 msgstr ""
 
-#: cli/cli-cmds.c:1645
+#: cli/cli-cmds.c:1649
 #, possible-c-format
 msgid "The max call depth for user-defined commands is %s.\n"
 msgstr ""
 
 #. Define the classes of commands.
 #. They will appear in the help list in alphabetical order.
-#: cli/cli-cmds.c:1659
+#: cli/cli-cmds.c:1663
 msgid ""
 "Maintenance commands.\n"
 "Some gdb commands are provided just for use by gdb maintainers.\n"
@@ -4192,42 +4845,42 @@ msgid ""
 "well documented as user commands."
 msgstr ""
 
-#: cli/cli-cmds.c:1665
+#: cli/cli-cmds.c:1669
 msgid "Obscure features."
 msgstr ""
 
-#: cli/cli-cmds.c:1667
+#: cli/cli-cmds.c:1671
 msgid "Aliases of other commands."
 msgstr ""
 
-#: cli/cli-cmds.c:1668
+#: cli/cli-cmds.c:1672
 msgid ""
 "User-defined commands.\n"
 "The commands in this class are those defined by the user.\n"
 "Use the \"define\" command to define a command."
 msgstr ""
 
-#: cli/cli-cmds.c:1672
+#: cli/cli-cmds.c:1676
 msgid "Support facilities."
 msgstr ""
 
-#: cli/cli-cmds.c:1674
+#: cli/cli-cmds.c:1678
 msgid "Status inquiries."
 msgstr ""
 
-#: cli/cli-cmds.c:1675
+#: cli/cli-cmds.c:1679
 msgid "Specifying and examining files."
 msgstr ""
 
-#: cli/cli-cmds.c:1678
+#: cli/cli-cmds.c:1682
 msgid "Making program stop at certain points."
 msgstr ""
 
-#: cli/cli-cmds.c:1679
+#: cli/cli-cmds.c:1683
 msgid "Examining data."
 msgstr ""
 
-#: cli/cli-cmds.c:1680
+#: cli/cli-cmds.c:1684
 msgid ""
 "Examining the stack.\n"
 "The stack is made up of stack frames.  Gdb assigns numbers to stack frames\n"
@@ -4239,23 +4892,23 @@ msgid ""
 "The commands below can be used to select other frames by number or address."
 msgstr ""
 
-#: cli/cli-cmds.c:1689
+#: cli/cli-cmds.c:1693
 msgid "Running the program."
 msgstr ""
 
 #. Define general commands.
-#: cli/cli-cmds.c:1693
+#: cli/cli-cmds.c:1697
 msgid "Print working directory.  This is used for your program as well."
 msgstr ""
 
-#: cli/cli-cmds.c:1696
+#: cli/cli-cmds.c:1700
 msgid ""
 "Set working directory to DIR for debugger and program being debugged.\n"
 "The change does not take effect for the program being debugged\n"
 "until the next time it is started."
 msgstr ""
 
-#: cli/cli-cmds.c:1702
+#: cli/cli-cmds.c:1706
 msgid ""
 "Print a constant string.  Give string as argument.\n"
 "C escape sequences may be used in the argument.\n"
@@ -4266,14 +4919,14 @@ msgid ""
 "to be printed or after trailing whitespace."
 msgstr ""
 
-#: cli/cli-cmds.c:1710
+#: cli/cli-cmds.c:1714
 msgid ""
 "Document a user-defined command.\n"
 "Give command name as argument.  Give documentation on following lines.\n"
 "End with a line of just \"end\"."
 msgstr ""
 
-#: cli/cli-cmds.c:1714
+#: cli/cli-cmds.c:1718
 msgid ""
 "Define a new command name.  Command name is argument.\n"
 "Definition appears on following lines, one command per line.\n"
@@ -4282,7 +4935,7 @@ msgid ""
 "Commands defined in this way may have up to ten arguments."
 msgstr ""
 
-#: cli/cli-cmds.c:1721
+#: cli/cli-cmds.c:1725
 #, possible-c-format
 msgid ""
 "Read commands from a file named FILE.\n"
@@ -4296,15 +4949,15 @@ msgid ""
 "when GDB is started."
 msgstr ""
 
-#: cli/cli-cmds.c:1736
+#: cli/cli-cmds.c:1740
 msgid "Set mode for script filename extension recognition."
 msgstr ""
 
-#: cli/cli-cmds.c:1737
+#: cli/cli-cmds.c:1741
 msgid "Show mode for script filename extension recognition."
 msgstr ""
 
-#: cli/cli-cmds.c:1738
+#: cli/cli-cmds.c:1742
 msgid ""
 "off  == no filename extension recognition (all sourced files are GDB "
 "scripts)\n"
@@ -4314,71 +4967,71 @@ msgid ""
 "supported"
 msgstr ""
 
-#: cli/cli-cmds.c:1748
+#: cli/cli-cmds.c:1752
 msgid "Exit gdb."
 msgstr ""
 
-#: cli/cli-cmds.c:1750
+#: cli/cli-cmds.c:1754
 msgid "Print list of commands."
 msgstr ""
 
-#: cli/cli-cmds.c:1755
+#: cli/cli-cmds.c:1759
 msgid "Set verbosity."
 msgstr ""
 
-#: cli/cli-cmds.c:1756
+#: cli/cli-cmds.c:1760
 msgid "Show verbosity."
 msgstr ""
 
-#: cli/cli-cmds.c:1763
+#: cli/cli-cmds.c:1767
 msgid "Generic command for setting command history parameters."
 msgstr ""
 
-#: cli/cli-cmds.c:1766
+#: cli/cli-cmds.c:1770
 msgid "Generic command for showing command history parameters."
 msgstr ""
 
-#: cli/cli-cmds.c:1769
+#: cli/cli-cmds.c:1773
 msgid "Set history expansion on command input."
 msgstr ""
 
-#: cli/cli-cmds.c:1770
+#: cli/cli-cmds.c:1774
 msgid "Show history expansion on command input."
 msgstr ""
 
-#: cli/cli-cmds.c:1771
+#: cli/cli-cmds.c:1775
 msgid "Without an argument, history expansion is enabled."
 msgstr ""
 
-#: cli/cli-cmds.c:1777
+#: cli/cli-cmds.c:1781
 msgid "Generic command for showing things about the program being debugged."
 msgstr ""
 
-#: cli/cli-cmds.c:1784
+#: cli/cli-cmds.c:1788
 msgid "List the completions for the rest of the line as a command."
 msgstr ""
 
-#: cli/cli-cmds.c:1786
+#: cli/cli-cmds.c:1790
 msgid "Generic command for showing things about the debugger."
 msgstr ""
 
 #. Another way to get at the same thing.
-#: cli/cli-cmds.c:1790
+#: cli/cli-cmds.c:1794
 msgid "Show all GDB settings."
 msgstr ""
 
-#: cli/cli-cmds.c:1792
+#: cli/cli-cmds.c:1796
 msgid ""
 "Show the history of commands you typed.\n"
 "You can supply a command number to start with, or a `+' to start after\n"
 "the previous command number shown."
 msgstr ""
 
-#: cli/cli-cmds.c:1799
+#: cli/cli-cmds.c:1803
 msgid "Show what version of GDB this is."
 msgstr ""
 
-#: cli/cli-cmds.c:1801
+#: cli/cli-cmds.c:1805
 msgid ""
 "Execute nested commands WHILE the conditional expression is non zero.\n"
 "The conditional expression must follow the word `while' and must in turn be\n"
@@ -4386,7 +5039,7 @@ msgid ""
 "and should be terminated by the word `end'."
 msgstr ""
 
-#: cli/cli-cmds.c:1807
+#: cli/cli-cmds.c:1811
 msgid ""
 "Execute nested commands once IF the conditional expression is non zero.\n"
 "The conditional expression must follow the word `if' and must in turn be\n"
@@ -4397,63 +5050,63 @@ msgstr ""
 
 #. If target is open when baud changes, it doesn't take effect until
 #. the next open (I think, not sure).
-#: cli/cli-cmds.c:1816
+#: cli/cli-cmds.c:1820
 msgid "Set baud rate for remote serial I/O."
 msgstr ""
 
-#: cli/cli-cmds.c:1817
+#: cli/cli-cmds.c:1821
 msgid "Show baud rate for remote serial I/O."
 msgstr ""
 
-#: cli/cli-cmds.c:1818
+#: cli/cli-cmds.c:1822
 msgid ""
 "This value is used to set the speed of the serial port when debugging\n"
 "using remote targets."
 msgstr ""
 
-#: cli/cli-cmds.c:1825
+#: cli/cli-cmds.c:1829
 msgid "Set debugging of remote protocol."
 msgstr ""
 
-#: cli/cli-cmds.c:1826
+#: cli/cli-cmds.c:1830
 msgid "Show debugging of remote protocol."
 msgstr ""
 
-#: cli/cli-cmds.c:1827
+#: cli/cli-cmds.c:1831
 msgid ""
 "When enabled, each packet sent or received with the remote target\n"
 "is displayed."
 msgstr ""
 
-#: cli/cli-cmds.c:1834
+#: cli/cli-cmds.c:1838
 msgid "Set timeout limit to wait for target to respond."
 msgstr ""
 
-#: cli/cli-cmds.c:1835
+#: cli/cli-cmds.c:1839
 msgid "Show timeout limit to wait for target to respond."
 msgstr ""
 
-#: cli/cli-cmds.c:1836
+#: cli/cli-cmds.c:1840
 msgid ""
 "This value is used to set the time limit for gdb to wait for a response\n"
 "from the target."
 msgstr ""
 
-#: cli/cli-cmds.c:1844
+#: cli/cli-cmds.c:1848
 msgid "Generic command for setting gdb debugging flags"
 msgstr ""
 
-#: cli/cli-cmds.c:1848
+#: cli/cli-cmds.c:1852
 msgid "Generic command for showing gdb debugging flags"
 msgstr ""
 
-#: cli/cli-cmds.c:1851
+#: cli/cli-cmds.c:1855
 msgid ""
 "Execute the rest of the line as a shell command.\n"
 "With no arguments, run an inferior shell."
 msgstr ""
 
-#: cli/cli-cmds.c:1856
+#: cli/cli-cmds.c:1860
 msgid ""
 "Edit specified file or function.\n"
 "With no argument, edits file containing most recent line listed.\n"
@@ -4465,7 +5118,7 @@ msgid ""
 "Uses EDITOR environment variable contents as editor (or ex as default)."
 msgstr ""
 
-#: cli/cli-cmds.c:1868
+#: cli/cli-cmds.c:1872
 msgid ""
 "List specified function or line.\n"
 "With no argument, lists ten more lines after or around previous listing.\n"
@@ -4482,7 +5135,7 @@ msgid ""
 "arg."
 msgstr ""
 
-#: cli/cli-cmds.c:1891
+#: cli/cli-cmds.c:1895
 msgid ""
 "Disassemble a specified section of memory.\n"
 "Default is the function surrounding the pc of the selected frame.\n"
@@ -4494,42 +5147,42 @@ msgid ""
 "  in the form of \"start,end\", or \"start,+length\"."
 msgstr ""
 
-#: cli/cli-cmds.c:1905
+#: cli/cli-cmds.c:1909
 msgid "Run the ``make'' program using the rest of the line as arguments."
 msgstr ""
 
-#: cli/cli-cmds.c:1908
+#: cli/cli-cmds.c:1912
 msgid ""
-"Show definitions of user defined commands.\n"
+"Show definitions of non-python user defined commands.\n"
 "Argument is the name of the user defined command.\n"
 "With no argument, show definitions of all user defined commands."
 msgstr ""
 
-#: cli/cli-cmds.c:1913
+#: cli/cli-cmds.c:1917
 msgid "Search for commands matching a REGEXP"
 msgstr ""
 
-#: cli/cli-cmds.c:1916
-msgid "Set the max call depth for user-defined commands."
+#: cli/cli-cmds.c:1920
+msgid "Set the max call depth for non-python user-defined commands."
 msgstr ""
 
-#: cli/cli-cmds.c:1917
-msgid "Show the max call depth for user-defined commands."
+#: cli/cli-cmds.c:1921
+msgid "Show the max call depth for non-python user-defined commands."
 msgstr ""
 
-#: cli/cli-cmds.c:1923
+#: cli/cli-cmds.c:1927
 msgid "Set tracing of GDB CLI commands."
 msgstr ""
 
-#: cli/cli-cmds.c:1924
+#: cli/cli-cmds.c:1928
 msgid "Show state of GDB CLI command tracing."
 msgstr ""
 
-#: cli/cli-cmds.c:1925
+#: cli/cli-cmds.c:1929
 msgid "When 'on', each command is displayed as it is executed."
 msgstr ""
 
-#: cli/cli-cmds.c:1931
+#: cli/cli-cmds.c:1935
 msgid ""
 "Define a new command that is an alias of an existing command.\n"
 "Usage: alias [-a] [--] ALIAS = COMMAND\n"
@@ -4545,22 +5198,22 @@ msgid ""
 "  alias -a set print elms = set print elements"
 msgstr ""
 
-#: cli/cli-decode.c:1330
+#: cli/cli-decode.c:1328
 #, possible-c-format
 msgid "Undefined %scommand: \"%s\".  Try \"help%s%.*s\"."
 msgstr ""
 
-#: cli/cli-decode.c:1363
+#: cli/cli-decode.c:1361
 #, possible-c-format
 msgid "Lack of needed %scommand"
 msgstr ""
 
-#: cli/cli-decode.c:1428
+#: cli/cli-decode.c:1426
 #, possible-c-format
 msgid "Ambiguous %scommand \"%s\": %s."
 msgstr ""
 
-#: cli/cli-decode.c:1812
+#: cli/cli-decode.c:1760
 msgid "Invalid command"
 msgstr ""
 
@@ -4768,37 +5421,37 @@ msgid ""
 "(file relative) will be restored to target memory."
 msgstr ""
 
-#: cli/cli-logging.c:45
+#: cli/cli-logging.c:46
 #, possible-c-format
 msgid "The current logfile is \"%s\".\n"
 msgstr ""
 
-#: cli/cli-logging.c:55
+#: cli/cli-logging.c:56
 #, possible-c-format
 msgid ""
 "Currently logging to %s.  Turn the logging off and on to make the new "
 "setting effective."
 msgstr ""
 
-#: cli/cli-logging.c:64
+#: cli/cli-logging.c:65
 #, possible-c-format
 msgid "Whether logging overwrites or appends to the log file is %s.\n"
 msgstr ""
 
-#: cli/cli-logging.c:110 cli/cli-logging.c:188 cli/cli-logging.c:198
+#: cli/cli-logging.c:111 cli/cli-logging.c:202 cli/cli-logging.c:212
 msgid "set logging"
 msgstr ""
 
-#: cli/cli-logging.c:133 cli/cli-logging.c:230 top.c:522
+#: cli/cli-logging.c:140 cli/cli-logging.c:251 top.c:536
 msgid "Current output protocol does not support redirection"
 msgstr ""
 
-#: cli/cli-logging.c:143
+#: cli/cli-logging.c:150
 #, possible-c-format
 msgid "The logging output mode is %s.\n"
 msgstr ""
 
-#: cli/cli-logging.c:262
+#: cli/cli-logging.c:284
 msgid ""
 "\"set logging\" lets you log output to a file.\n"
 "Usage: set logging on [FILENAME]\n"
@@ -4808,91 +5461,91 @@ msgid ""
 "       set logging redirect [on|off]\n"
 msgstr ""
 
-#: cli/cli-logging.c:274
+#: cli/cli-logging.c:296
 #, possible-c-format
 msgid "Currently logging to \"%s\".\n"
 msgstr ""
 
-#: cli/cli-logging.c:277
+#: cli/cli-logging.c:299
 #, possible-c-format
 msgid "Future logs will be written to %s.\n"
 msgstr ""
 
-#: cli/cli-logging.c:281
+#: cli/cli-logging.c:303
 msgid "Logs will overwrite the log file.\n"
 msgstr ""
 
-#: cli/cli-logging.c:283
+#: cli/cli-logging.c:305
 msgid "Logs will be appended to the log file.\n"
 msgstr ""
 
-#: cli/cli-logging.c:288
+#: cli/cli-logging.c:310
 msgid "Output is being sent only to the log file.\n"
 msgstr ""
 
-#: cli/cli-logging.c:290
+#: cli/cli-logging.c:312
 msgid "Output is being logged and displayed.\n"
 msgstr ""
 
-#: cli/cli-logging.c:295
+#: cli/cli-logging.c:317
 msgid "Output will be sent only to the log file.\n"
 msgstr ""
 
-#: cli/cli-logging.c:297
+#: cli/cli-logging.c:319
 msgid "Output will be logged and displayed.\n"
 msgstr ""
 
-#: cli/cli-logging.c:310
+#: cli/cli-logging.c:332
 msgid "Set logging options"
 msgstr ""
 
-#: cli/cli-logging.c:313
+#: cli/cli-logging.c:335
 msgid "Show logging options"
 msgstr ""
 
-#: cli/cli-logging.c:315
+#: cli/cli-logging.c:337
 msgid "Set whether logging overwrites or appends to the log file."
 msgstr ""
 
-#: cli/cli-logging.c:316
+#: cli/cli-logging.c:338
 msgid "Show whether logging overwrites or appends to the log file."
 msgstr ""
 
-#: cli/cli-logging.c:317
+#: cli/cli-logging.c:339
 msgid "If set, logging overrides the log file."
 msgstr ""
 
-#: cli/cli-logging.c:322
+#: cli/cli-logging.c:344
 msgid "Set the logging output mode."
 msgstr ""
 
-#: cli/cli-logging.c:323
+#: cli/cli-logging.c:345
 msgid "Show the logging output mode."
 msgstr ""
 
-#: cli/cli-logging.c:324
+#: cli/cli-logging.c:346
 msgid ""
 "If redirect is off, output will go to both the screen and the log file.\n"
 "If redirect is on, output will go only to the log file."
 msgstr ""
 
-#: cli/cli-logging.c:330
+#: cli/cli-logging.c:352
 msgid "Set the current logfile."
 msgstr ""
 
-#: cli/cli-logging.c:331
+#: cli/cli-logging.c:353
 msgid "Show the current logfile."
 msgstr ""
 
-#: cli/cli-logging.c:332
+#: cli/cli-logging.c:354
 msgid "The logfile is used when directing GDB's output."
 msgstr ""
 
-#: cli/cli-logging.c:338
+#: cli/cli-logging.c:360
 msgid "Enable logging."
 msgstr ""
 
-#: cli/cli-logging.c:340
+#: cli/cli-logging.c:362
 msgid "Disable logging."
 msgstr ""
 
@@ -4942,71 +5595,71 @@ msgstr ""
 msgid "Allocated body is smaller than this command type needs."
 msgstr ""
 
-#: cli/cli-script.c:1384
+#: cli/cli-script.c:1403
 msgid "name of command to define"
 msgstr ""
 
-#: cli/cli-script.c:1406
+#: cli/cli-script.c:1425
 #, possible-c-format
 msgid "\"%s\" is not a prefix command."
 msgstr ""
 
-#: cli/cli-script.c:1417
+#: cli/cli-script.c:1436
 #, possible-c-format
 msgid "Junk in argument list: \"%s\""
 msgstr ""
 
-#: cli/cli-script.c:1466
+#: cli/cli-script.c:1485
 #, possible-c-format
 msgid "Redefine command \"%s\"? "
 msgstr ""
 
-#: cli/cli-script.c:1468
+#: cli/cli-script.c:1487
 #, possible-c-format
 msgid "Really redefine built-in command \"%s\"? "
 msgstr ""
 
-#: cli/cli-script.c:1470
+#: cli/cli-script.c:1489
 #, possible-c-format
 msgid "Command \"%s\" not redefined."
 msgstr ""
 
-#: cli/cli-script.c:1497
+#: cli/cli-script.c:1516
 #, possible-c-format
 msgid "Your new `%s' command does not hook any existing command."
 msgstr ""
 
-#: cli/cli-script.c:1500
+#: cli/cli-script.c:1519
 msgid "Proceed? "
 msgstr ""
 
 #. Should never come here as hookc would be 0.
-#: cli/cli-script.c:1541 complaints.c:305 exceptions.c:143 exceptions.c:160
-#: exceptions.c:187 exceptions.c:239 hppa-tdep.c:3098 hppa-tdep.c:3111
-#: infcall.c:671 infcmd.c:1460 infrun.c:3306 language.c:797 language.c:823
-#: mi/mi-out.c:348 mi/mi-out.c:367 mips-tdep.c:254 mips-tdep.c:311
-#: mips-tdep.c:1411 mips-tdep.c:4086 mips-tdep.c:5073 mn10300-tdep.c:126
-#: reggroups.c:219 remote.c:6508 utils.c:987 utils.c:1006
+#: cli/cli-script.c:1560 complaints.c:305 exceptions.c:159 exceptions.c:176
+#: exceptions.c:203 exceptions.c:253 hppa-tdep.c:3092 hppa-tdep.c:3105
+#: infcall.c:670 infcmd.c:1485 infrun.c:3286 language.c:531 language.c:557
+#: mi/mi-out.c:337 mi/mi-out.c:355 mips-tdep.c:265 mips-tdep.c:418
+#: mips-tdep.c:2060 mips-tdep.c:5511 mips-tdep.c:6628 mn10300-tdep.c:126
+#: reggroups.c:219 remote.c:6678 utils.c:822 utils.c:841
 msgid "bad switch"
 msgstr ""
 
-#: cli/cli-script.c:1561
+#: cli/cli-script.c:1580
 #, possible-c-format
 msgid "Command \"%s\" is built-in."
 msgstr ""
 
-#: cli/cli-script.c:1615
+#: cli/cli-script.c:1634
 msgid "called with NULL file pointer!"
 msgstr ""
 
-#: cli/cli-script.c:1643
+#: cli/cli-script.c:1660
 #, possible-c-format
 msgid ""
 "%s:%d: Error in sourced command file:\n"
 "%s"
 msgstr ""
 
-#: cli/cli-script.c:1646
+#: cli/cli-script.c:1663
 msgid "bad reason"
 msgstr ""
 
@@ -5132,7 +5785,7 @@ msgid ""
 "`.eb' symbol without matching `.bb' symbol ignored starting at symnum %d"
 msgstr ""
 
-#: coffread.c:1097 xcoffread.c:189
+#: coffread.c:1097 xcoffread.c:190
 #, possible-c-format
 msgid "Mismatched .eb symbol ignored starting at symnum %d"
 msgstr ""
@@ -5147,11 +5800,11 @@ msgstr ""
 msgid "thumb symbol %s, class 0x%x\n"
 msgstr ""
 
-#: coffread.c:1315
+#: coffread.c:1314
 msgid "coff file name too long"
 msgstr ""
 
-#: coffread.c:1402
+#: coffread.c:1401
 #, possible-c-format
 msgid "Line number pointer %ld lower than start of line numbers"
 msgstr ""
@@ -5166,10 +5819,70 @@ msgstr ""
 msgid "Unexpected type for symbol %s"
 msgstr ""
 
+#: common/agent.c:138
+msgid "Error reading helper thread's id in lib"
+msgstr ""
+
+#: common/agent.c:174
+#, possible-c-format
+msgid "error opening sync socket: %s"
+msgstr ""
+
+#: common/agent.c:183
+msgid "string overflow allocating socket name"
+msgstr ""
+
+#: common/agent.c:191
+#, possible-c-format
+msgid ""
+"error connecting sync socket (%s): %s. Make sure the directory exists and "
+"that it is writable."
+msgstr ""
+
+#: common/agent.c:226
+msgid "unable to write"
+msgstr ""
+
+#: common/agent.c:312
+msgid "Error reading command response"
+msgstr ""
+
+#: common/agent.c:344
+msgid "Error reading capability of agent"
+msgstr ""
+
 #: common/common-utils.c:136
 msgid "vasprintf call failed"
 msgstr ""
 
+#. ??? TODO: handle other escape sequences.
+#: common/format.c:89
+#, possible-c-format
+msgid "Unrecognized escape character \\%c in format string."
+msgstr ""
+
+#: common/format.c:294
+msgid "`*' not supported for precision or width in printf"
+msgstr ""
+
+#: common/format.c:297
+msgid "Format specifier `n' not supported in printf"
+msgstr ""
+
+#: common/format.c:300
+msgid "Incomplete format specifier at end of format string"
+msgstr ""
+
+#: common/format.c:303
+#, possible-c-format
+msgid "Unrecognized format specifier '%c' in printf"
+msgstr ""
+
+#: common/format.c:307
+#, possible-c-format
+msgid "Inappropriate modifiers to format specifier '%c' in printf"
+msgstr ""
+
 #: common/gdb_assert.h:54
 #, possible-c-format
 msgid "%s: Assertion `%s' failed."
@@ -5180,9 +5893,50 @@ msgstr ""
 msgid "Assertion `%s' failed."
 msgstr ""
 
-#: common/signals.c:350
+#: common/linux-procfs.c:43 common/linux-procfs.c:89 linux-tdep.c:295
+#: linux-tdep.c:382 linux-tdep.c:395 linux-tdep.c:532
+#, possible-c-format
+msgid "unable to open /proc file '%s'"
+msgstr ""
+
+#: common/linux-ptrace.c:42
+#, possible-c-format
+msgid "warning: process %d is already traced by process %d\n"
+msgstr ""
+
+#: common/linux-ptrace.c:47
+#, possible-c-format
+msgid "warning: process %d is a zombie - the process has already terminated\n"
+msgstr ""
+
+#: common/linux-ptrace.c:81
+#, possible-c-format
+msgid "linux_ptrace_test_ret_to_nx: Cannot mmap: %s"
+msgstr ""
+
+#: common/linux-ptrace.c:93
+#, possible-c-format
+msgid "linux_ptrace_test_ret_to_nx: Cannot fork: %s"
+msgstr ""
+
+#: common/linux-ptrace.c:100
+#, possible-c-format
+msgid "linux_ptrace_test_ret_to_nx: Cannot PTRACE_TRACEME: %s"
+msgstr ""
+
+#: common/linux-ptrace.c:128
+#, possible-c-format
+msgid "linux_ptrace_test_ret_to_nx: Cannot PTRACE_KILL: %s"
+msgstr ""
+
+#: common/linux-ptrace.c:155
 msgid ""
-"GDB bug: target.c (target_signal_from_host): unrecognized real-time signal"
+"Cannot call inferior functions, you have broken Linux kernel i386 NX (non-"
+"executable pages) support!"
+msgstr ""
+
+#: common/signals.c:350
+msgid "GDB bug: target.c (gdb_signal_from_host): unrecognized real-time signal"
 msgstr ""
 
 #. The user might be trying to do "signal SIGSAK" where this system
@@ -5192,12 +5946,6 @@ msgstr ""
 msgid "Signal %s does not exist on this system."
 msgstr ""
 
-#: common/signals.c:668
-msgid ""
-"Only signals 1-15 are valid as numeric signals.\n"
-"Use \"info signals\" for a list of symbolic signals."
-msgstr ""
-
 #: complaints.c:320
 #, possible-c-format
 msgid "Max number of complaints about incorrect symbols is %s.\n"
@@ -5219,141 +5967,137 @@ msgstr ""
 msgid "Various kinds of warranty you do not have."
 msgstr ""
 
-#: corefile.c:76
-msgid "GDB can't read core files on this machine."
-msgstr ""
-
-#: corefile.c:190
+#: corefile.c:172
 msgid "core file may not match specified executable file."
 msgstr ""
 
-#: corefile.c:192
+#: corefile.c:174
 msgid "exec file is newer than core file."
 msgstr ""
 
-#: corefile.c:208
+#: corefile.c:190
 msgid ""
 "No executable file specified.\n"
 "Use the \"file\" or \"exec-file\" command."
 msgstr ""
 
-#: corefile.c:223
+#: corefile.c:205
 #, possible-c-format
 msgid "Cannot access memory at address %s"
 msgstr ""
 
-#: corefile.c:227
+#: corefile.c:209
 #, possible-c-format
 msgid "Error accessing memory address %s: %s."
 msgstr ""
 
-#: corefile.c:421
+#: corefile.c:413
 #, possible-c-format
 msgid "The current BFD target is \"%s\".\n"
 msgstr ""
 
-#: corefile.c:452
+#: corefile.c:444
 msgid ""
 "Use FILE as core dump for examining memory and registers.\n"
 "No arg means have no core file.  This command has been superseded by the\n"
 "`target core' and `detach' commands."
 msgstr ""
 
-#: corefile.c:460
+#: corefile.c:452
 msgid "Set the current BFD target."
 msgstr ""
 
-#: corefile.c:461
+#: corefile.c:453
 msgid "Show the current BFD target."
 msgstr ""
 
-#: corefile.c:462
+#: corefile.c:454
 msgid "Use `set gnutarget auto' to specify automatic detection."
 msgstr ""
 
-#: corelow.c:160
+#: corelow.c:154
 #, possible-c-format
 msgid "\"%s\": ambiguous core format, %d handlers match"
 msgstr ""
 
-#: corelow.c:165
+#: corelow.c:158
 #, possible-c-format
-msgid "\"%s\": no core file handler recognizes format, using default"
+msgid "\"%s\": no core file handler recognizes format"
 msgstr ""
 
-#: corelow.c:298
+#: corelow.c:296
 msgid "No core file specified.  (Use `detach' to stop debugging a core file.)"
 msgstr ""
 
-#: corelow.c:301
+#: corelow.c:299
 msgid "No core file specified."
 msgstr ""
 
-#: corelow.c:338
+#: corelow.c:336
 #, possible-c-format
 msgid "\"%s\" is not a core dump: %s"
 msgstr ""
 
-#: corelow.c:369 record.c:849
+#: corelow.c:367 record.c:849
 #, possible-c-format
 msgid "\"%s\": Can't find sections: %s"
 msgstr ""
 
-#: corelow.c:435
+#: corelow.c:438
 #, possible-c-format
 msgid "Core was generated by `%s'.\n"
 msgstr ""
 
-#: corelow.c:449
+#: corelow.c:455
 #, possible-c-format
 msgid "Program terminated with signal %d, %s.\n"
 msgstr ""
 
-#: corelow.c:465
+#: corelow.c:471
 msgid "Too many arguments"
 msgstr ""
 
-#: corelow.c:469
+#: corelow.c:475
 msgid "No core file now.\n"
 msgstr ""
 
-#: corelow.c:531
+#: corelow.c:537
 #, possible-c-format
 msgid "Couldn't find %s registers in core file."
 msgstr ""
 
-#: corelow.c:541
+#: corelow.c:547
 #, possible-c-format
 msgid "Couldn't read %s registers from `%s' section in core file."
 msgstr ""
 
-#: corelow.c:555
+#: corelow.c:561
 #, possible-c-format
 msgid "Couldn't recognize %s registers in core file."
 msgstr ""
 
-#: corelow.c:698
+#: corelow.c:704
 msgid "Couldn't read NT_AUXV note in core file."
 msgstr ""
 
-#: corelow.c:730
+#: corelow.c:736
 msgid "Couldn't read StackGhost cookie in core file."
 msgstr ""
 
-#: corelow.c:777
+#: corelow.c:783
 msgid "Couldn't read SPU section in core file."
 msgstr ""
 
-#: corelow.c:924
+#: corelow.c:932
 #, possible-c-format
 msgid "init_core_ops: core target already exists (\"%s\")."
 msgstr ""
 
-#: core-regset.c:76 m68klinux-nat.c:532
+#: core-regset.c:76 m68klinux-nat.c:541
 msgid "Wrong size gregset in core file."
 msgstr ""
 
-#: core-regset.c:86 m68klinux-nat.c:542
+#: core-regset.c:86 m68klinux-nat.c:551
 msgid "Wrong size fpregset in core file."
 msgstr ""
 
@@ -5381,70 +6125,79 @@ msgstr ""
 msgid "GDB does not support pointers to methods on this target"
 msgstr ""
 
-#: cp-abi.c:202
+#: cp-abi.c:178
+msgid "GDB cannot print the vtable on this target"
+msgstr ""
+
+#: cp-abi.c:212
 msgid "Too many C++ ABIs, please increase CP_ABI_MAX in cp-abi.c"
 msgstr ""
 
-#: cp-abi.c:220
+#: cp-abi.c:230
 #, possible-c-format
 msgid "Cannot find C++ ABI \"%s\" to set it as auto default."
 msgstr ""
 
-#: cp-abi.c:304
+#: cp-abi.c:314
 #, possible-c-format
 msgid "Could not find \"%s\" in ABI list"
 msgstr ""
 
-#: cp-abi.c:330
+#: cp-abi.c:340
 msgid ""
 "Set the ABI used for inspecting C++ objects.\n"
 "\"set cp-abi\" with no arguments will list the available ABIs."
 msgstr ""
 
-#: cp-abi.c:336
+#: cp-abi.c:346
 msgid "Show the ABI used for inspecting C++ objects."
 msgstr ""
 
-#: cp-name-parser.y:1570
+#: cp-name-parser.y:1596
 msgid "empty character constant"
 msgstr ""
 
-#: cp-name-parser.y:1577
+#: cp-name-parser.y:1603
 msgid "invalid character constant"
 msgstr ""
 
-#: cp-name-parser.y:1701
+#: cp-name-parser.y:1727
 msgid "invalid number"
 msgstr ""
 
 #. These can't occur in C++ names.
-#: cp-name-parser.y:1777
+#: cp-name-parser.y:1803
 msgid "unexpected string literal"
 msgstr ""
 
 #. We must have come across a bad character (e.g. ';').
-#: cp-name-parser.y:1784
+#: cp-name-parser.y:1810
 msgid "invalid character"
 msgstr ""
 
-#: cp-namespace.c:719
-msgid "cp_lookup_nested_type called on a non-aggregate type."
+#: cp-namespace.c:718
+msgid "cp_lookup_nested_symbol called on a non-aggregate type."
 msgstr ""
 
-#: cp-namespace.c:800
+#: cp-namespace.c:799
 msgid "The `maint namespace' command was removed.\n"
 msgstr ""
 
-#: cp-namespace.c:813
+#: cp-namespace.c:812
 msgid "Deprecated placeholder for removed functionality."
 msgstr ""
 
-#: cp-support.c:1387
+#: cp-support.c:521
+#, possible-c-format
+msgid "internal error: string \"%s\" failed to be canonicalized"
+msgstr ""
+
+#: cp-support.c:1377
 #, possible-c-format
 msgid "RTTI symbol not found for class '%s'"
 msgstr ""
 
-#: cp-support.c:1393
+#: cp-support.c:1383
 #, possible-c-format
 msgid "RTTI symbol for class '%s' is not a type"
 msgstr ""
@@ -5453,28 +6206,36 @@ msgstr ""
 #. symbols for namespaces with the same name as the struct.
 #. This warning is an indication of a bug in the lookup order
 #. or a bug in the way that the symbol tables are populated.
-#: cp-support.c:1408
+#: cp-support.c:1398
 #, possible-c-format
 msgid "RTTI symbol for class '%s' is a namespace"
 msgstr ""
 
-#: cp-support.c:1411
+#: cp-support.c:1401
 #, possible-c-format
 msgid "RTTI symbol for class '%s' has bad type"
 msgstr ""
 
-#: cp-support.c:1423
+#: cp-support.c:1413
 msgid "\"maintenance cplus\" must be followed by the name of a command.\n"
 msgstr ""
 
-#: cp-support.c:1564
+#: cp-support.c:1461
 msgid "C++ maintenance commands."
 msgstr ""
 
-#: cp-support.c:1575
+#: cp-support.c:1472
 msgid "Print the first class/namespace component of NAME."
 msgstr ""
 
+#: cp-support.c:1476
+msgid ""
+"Show the virtual function table for a C++ object.\n"
+"Usage: info vtbl EXPRESSION\n"
+"Evaluate EXPRESSION and display the virtual function table for the\n"
+"resulting object."
+msgstr ""
+
 #: cp-valprint.c:46
 #, possible-c-format
 msgid "Printing of C++ virtual function tables is %s.\n"
@@ -5490,37 +6251,37 @@ msgstr ""
 msgid "Printing of C++ static members is %s.\n"
 msgstr ""
 
-#: cp-valprint.c:313 jv-valprint.c:407 p-valprint.c:812 valprint.c:283
+#: cp-valprint.c:313 jv-valprint.c:412 p-valprint.c:656 valprint.c:286
 msgid "<synthetic pointer>"
 msgstr ""
 
-#: cp-valprint.c:352 mi/mi-cmd-stack.c:302 python/py-prettyprint.c:293
+#: cp-valprint.c:352 mi/mi-cmd-stack.c:310 python/py-prettyprint.c:293
 #: stack.c:286
 #, possible-c-format
 msgid "<error reading variable: %s>"
 msgstr ""
 
-#: cp-valprint.c:817
+#: cp-valprint.c:835
 msgid "Set printing of C++ static members."
 msgstr ""
 
-#: cp-valprint.c:818
+#: cp-valprint.c:836
 msgid "Show printing of C++ static members."
 msgstr ""
 
-#: cp-valprint.c:825
+#: cp-valprint.c:843
 msgid "Set printing of C++ virtual function tables."
 msgstr ""
 
-#: cp-valprint.c:826
+#: cp-valprint.c:844
 msgid "Show printing of C++ virtual function tables."
 msgstr ""
 
-#: cp-valprint.c:833
+#: cp-valprint.c:851
 msgid "Set printing of object's derived type based on vtable info."
 msgstr ""
 
-#: cp-valprint.c:834
+#: cp-valprint.c:852
 msgid "Show printing of object's derived type based on vtable info."
 msgstr ""
 
@@ -5530,86 +6291,86 @@ msgstr ""
 
 #. Invalid (unimplemented) register.  Should not happen as there are
 #. no unimplemented CRISv32 registers.
-#: cris-tdep.c:1697
+#: cris-tdep.c:1648
 #, possible-c-format
 msgid "crisv32_register_type: unknown regno %d"
 msgstr ""
 
-#: cris-tdep.c:1731
+#: cris-tdep.c:1682
 msgid "cris_store_return_value: type length too large."
 msgstr ""
 
-#: cris-tdep.c:1902
+#: cris-tdep.c:1853
 msgid "cris_extract_return_value: type length too large"
 msgstr ""
 
 #. Could not find a target.  Things are likely to go downhill
 #. from here.
-#: cris-tdep.c:2145
+#: cris-tdep.c:2096
 msgid "CRIS software single step could not find a step target."
 msgstr ""
 
-#: cris-tdep.c:3931 irix5-nat.c:239 mips-linux-tdep.c:624
+#: cris-tdep.c:3879 irix5-nat.c:239 mips-linux-tdep.c:615
 msgid "wrong size gregset struct in core file"
 msgstr ""
 
-#: cris-tdep.c:3971
+#: cris-tdep.c:3919
 msgid "Set the current CRIS version."
 msgstr ""
 
-#: cris-tdep.c:3972
+#: cris-tdep.c:3920
 msgid "Show the current CRIS version."
 msgstr ""
 
-#: cris-tdep.c:3973
+#: cris-tdep.c:3921
 msgid ""
 "Set to 10 for CRISv10 or 32 for CRISv32 if autodetection fails.\n"
 "Defaults to 10. "
 msgstr ""
 
-#: cris-tdep.c:3983
+#: cris-tdep.c:3931
 msgid "Set the current CRIS mode."
 msgstr ""
 
-#: cris-tdep.c:3984
+#: cris-tdep.c:3932
 msgid "Show the current CRIS mode."
 msgstr ""
 
-#: cris-tdep.c:3985
+#: cris-tdep.c:3933
 msgid ""
 "Set to CRIS_MODE_GURU when debugging in guru mode.\n"
 "Makes GDB use the NRP register instead of the ERP register in certain cases."
 msgstr ""
 
-#: cris-tdep.c:3994
+#: cris-tdep.c:3942
 msgid "Set the usage of Dwarf-2 CFI for CRIS."
 msgstr ""
 
-#: cris-tdep.c:3995
+#: cris-tdep.c:3943
 msgid "Show the usage of Dwarf-2 CFI for CRIS."
 msgstr ""
 
-#: cris-tdep.c:3996
+#: cris-tdep.c:3944
 msgid "Set this to \"off\" if using gcc-cris < R59."
 msgstr ""
 
-#: cris-tdep.c:4034 cris-tdep.c:4060
+#: cris-tdep.c:3982 cris-tdep.c:4008
 msgid "cris_gdbarch_update: failed to update architecture."
 msgstr ""
 
-#: cris-tdep.c:4119
+#: cris-tdep.c:4067
 msgid "cris_gdbarch_init: big endian byte order in info"
 msgstr ""
 
-#: cris-tdep.c:4124
+#: cris-tdep.c:4072
 msgid "cris_gdbarch_init: unknown byte order in info"
 msgstr ""
 
-#: cris-tdep.c:4154
+#: cris-tdep.c:4102
 msgid "cris_gdbarch_init: unsupported CRIS version"
 msgstr ""
 
-#: cris-tdep.c:4196
+#: cris-tdep.c:4144
 msgid "cris_gdbarch_init: unknown CRIS version"
 msgstr ""
 
@@ -5621,33 +6382,33 @@ msgstr ""
 msgid "type not handled in c_type_print_varspec_suffix()"
 msgstr ""
 
-#: c-typeprint.c:734 m2-typeprint.c:82
+#: c-typeprint.c:733 m2-typeprint.c:82
 msgid "<type unknown>"
 msgstr ""
 
-#: c-typeprint.c:762
+#: c-typeprint.c:761
 msgid "<unnamed typedef>"
 msgstr ""
 
-#: c-typeprint.c:822
+#: c-typeprint.c:821
 msgid "<incomplete type>\n"
 msgstr ""
 
-#: c-typeprint.c:825
+#: c-typeprint.c:824
 msgid "<no data fields>\n"
 msgstr ""
 
-#: c-typeprint.c:1053
+#: c-typeprint.c:1052
 #, possible-c-format
 msgid "<undefined type> %s;\n"
 msgstr ""
 
-#: c-typeprint.c:1102
+#: c-typeprint.c:1101
 #, possible-c-format
 msgid "<badly mangled name '%s'>"
 msgstr ""
 
-#: c-typeprint.c:1165
+#: c-typeprint.c:1164
 #, possible-c-format
 msgid " (Local at %s:%d)\n"
 msgstr ""
@@ -5668,356 +6429,341 @@ msgstr ""
 msgid "<invalid type code %d>"
 msgstr ""
 
-#: c-valprint.c:176
+#: c-valprint.c:161 valprint.c:357
 msgid "Could not determine the array high bound"
 msgstr ""
 
-#: c-valprint.c:226
+#: c-valprint.c:211
 #, possible-c-format
 msgid "%d vtable entries"
 msgstr ""
 
-#. This happens (without TYPE_FLAG_STUB set) on systems which
-#. don't use dbx xrefs (NO_DBX_XREFS in gcc) if a file has a
-#. "struct foo *bar" and no complete type for struct foo in that
-#. file.
-#. This happens (without TYPE_FLAG_STUB set) on systems which don't use
-#. dbx xrefs (NO_DBX_XREFS in gcc) if a file has a "struct foo *bar"
-#. and no complete type for struct foo in that file.
-#: c-valprint.c:605 m2-valprint.c:581 m2-valprint.c:661 valprint.c:362
-msgid "<incomplete type>"
-msgstr ""
-
-#: c-valprint.c:634
-#, possible-c-format
-msgid "Invalid C/C++ type code %d in symbol table."
-msgstr ""
-
-#: c-valprint.c:751
+#: c-valprint.c:544
 msgid " [incomplete object]"
 msgstr ""
 
-#: darwin-nat.c:186
+#: darwin-nat.c:187
 #, possible-c-format
 msgid "[%d inferior]: "
 msgstr ""
 
-#: darwin-nat.c:198
+#: darwin-nat.c:199
 msgid "[UNKNOWN]"
 msgstr ""
 
-#: darwin-nat.c:200
+#: darwin-nat.c:201
 #, possible-c-format
 msgid "Mach error at \"%s:%u\" in function \"%s\": %s (0x%lx)"
 msgstr ""
 
-#: darwin-nat.c:232
+#: darwin-nat.c:233
 #, c-format
 msgid "unknown (%d)"
 msgstr ""
 
-#: darwin-nat.c:257
+#: darwin-nat.c:258
 #, possible-c-format
 msgid "ptrace (%s, %d, 0x%x, %d): %d (%s)\n"
 msgstr ""
 
-#: darwin-nat.c:259
+#: darwin-nat.c:260
 msgid "no error"
 msgstr ""
 
-#: darwin-nat.c:325
+#: darwin-nat.c:326
 #, possible-c-format
 msgid " new_ix:%d/%d, old_ix:%d/%d, new_id:%x old_id:%x\n"
 msgstr ""
 
-#: darwin-nat.c:484
+#: darwin-nat.c:485
 msgid "message header:\n"
 msgstr ""
 
-#: darwin-nat.c:485
+#: darwin-nat.c:486
 #, possible-c-format
 msgid " bits: 0x%x\n"
 msgstr ""
 
-#: darwin-nat.c:486
+#: darwin-nat.c:487
 #, possible-c-format
 msgid " size: 0x%x\n"
 msgstr ""
 
-#: darwin-nat.c:487
+#: darwin-nat.c:488
 #, possible-c-format
 msgid " remote-port: 0x%x\n"
 msgstr ""
 
-#: darwin-nat.c:488
+#: darwin-nat.c:489
 #, possible-c-format
 msgid " local-port: 0x%x\n"
 msgstr ""
 
-#: darwin-nat.c:489
+#: darwin-nat.c:490
 #, possible-c-format
 msgid " reserved: 0x%x\n"
 msgstr ""
 
-#: darwin-nat.c:490
+#: darwin-nat.c:491
 #, possible-c-format
 msgid " id: 0x%x\n"
 msgstr ""
 
-#: darwin-nat.c:509
+#: darwin-nat.c:510
 #, possible-c-format
 msgid "body: descriptor_count=%u\n"
 msgstr ""
 
-#: darwin-nat.c:518
+#: darwin-nat.c:519
 #, possible-c-format
 msgid " descr %d: type=%u (port) name=0x%x, dispo=%d\n"
 msgstr ""
 
-#: darwin-nat.c:522
+#: darwin-nat.c:523
 #, possible-c-format
 msgid " descr %d: type=%u\n"
 msgstr ""
 
-#: darwin-nat.c:532
+#: darwin-nat.c:533
 #, possible-c-format
 msgid "NDR: mig=%02x if=%02x encod=%02x int=%02x char=%02x float=%02x\n"
 msgstr ""
 
-#: darwin-nat.c:540
+#: darwin-nat.c:541
 msgid "  data:"
 msgstr ""
 
-#: darwin-nat.c:682
+#: darwin-nat.c:683
 #, possible-c-format
 msgid "darwin_resume_thread: state=%d, thread=0x%x, step=%d nsignal=%d\n"
 msgstr ""
 
-#: darwin-nat.c:695
+#: darwin-nat.c:696
 #, possible-c-format
 msgid "ptrace THUP: res=%d\n"
 msgstr ""
 
-#: darwin-nat.c:702
+#: darwin-nat.c:703
 #, possible-c-format
 msgid "darwin_resume_thread: kill 0x%x %d: %d\n"
 msgstr ""
 
-#. Set single step.
-#: darwin-nat.c:708
+#: darwin-nat.c:711
 #, possible-c-format
 msgid "darwin_set_sstep (thread=%x, enable=%d)\n"
 msgstr ""
 
-#: darwin-nat.c:797
+#: darwin-nat.c:801
 #, possible-c-format
 msgid "darwin_resume: pid=%d, tid=0x%x, step=%d, signal=%d\n"
 msgstr ""
 
 #. Should not happen...
-#: darwin-nat.c:877
+#: darwin-nat.c:881
 #, possible-c-format
 msgid "darwin_wait: ill-formatted message (id=%x)\n"
 msgstr ""
 
-#: darwin-nat.c:890
+#: darwin-nat.c:894
 #, possible-c-format
 msgid "darwin_wait: thread=%x, got %s\n"
 msgstr ""
 
-#: darwin-nat.c:913
+#: darwin-nat.c:917
 #, possible-c-format
 msgid "  (signal %d: %s)\n"
 msgstr ""
 
-#: darwin-nat.c:958
+#: darwin-nat.c:962
 #, possible-c-format
 msgid "wait4: res=%d: %s\n"
 msgstr ""
 
-#: darwin-nat.c:974
+#: darwin-nat.c:978
 #, possible-c-format
 msgid "darwin_wait: pid=%d exit, status=%x\n"
 msgstr ""
 
-#: darwin-nat.c:984
+#: darwin-nat.c:988
 #, possible-c-format
 msgid "darwin_wait: pid=%d\n"
 msgstr ""
 
-#: darwin-nat.c:991
+#: darwin-nat.c:995
 #, possible-c-format
 msgid "Bad local-port: %x\n"
 msgstr ""
 
-#: darwin-nat.c:1041
+#: darwin-nat.c:1045
 #, possible-c-format
 msgid "darwin_wait: waiting for a message pid=%d thread=%lx\n"
 msgstr ""
 
-#: darwin-nat.c:1075
+#: darwin-nat.c:1079
 #, possible-c-format
 msgid "mach_msg: ret=%x\n"
 msgstr ""
 
-#: darwin-nat.c:1109
+#: darwin-nat.c:1113
 #, possible-c-format
 msgid "darwin_wait: mach_msg(pending) ret=%x\n"
 msgstr ""
 
-#: darwin-nat.c:1127
+#: darwin-nat.c:1131
 #, possible-c-format
 msgid "darwin_wait: thread %x hit a non-gdb breakpoint\n"
 msgstr ""
 
-#: darwin-nat.c:1131
+#: darwin-nat.c:1135
 msgid "darwin_wait: unhandled pending message\n"
 msgstr ""
 
-#: darwin-nat.c:1255
+#: darwin-nat.c:1259
 #, possible-c-format
 msgid "cannot kill: %s"
 msgstr ""
 
-#: darwin-nat.c:1321
+#: darwin-nat.c:1333
 #, possible-c-format
-msgid "Failed to kill inferior: ptrace returned %d [%s] (pid=%d)"
+msgid "Failed to kill inferior: kill (%d, 9) returned [%s]"
 msgstr ""
 
-#: darwin-nat.c:1370
+#: darwin-nat.c:1361
 #, possible-c-format
 msgid ""
 "Unable to find Mach task port for process-id %d: %s (0x%lx).\n"
 " (please check gdb is codesigned - see taskgated(8))"
 msgstr ""
 
-#: darwin-nat.c:1375
+#: darwin-nat.c:1366
 #, possible-c-format
 msgid "inferior task: 0x%x, pid: %d\n"
 msgstr ""
 
-#: darwin-nat.c:1486
+#: darwin-nat.c:1477
 #, possible-c-format
 msgid "unable to create a pipe: %s"
 msgstr ""
 
 #. Trying to masturbate?
-#: darwin-nat.c:1573 gnu-nat.c:2167 inf-ptrace.c:205 inf-ttrace.c:743
+#: darwin-nat.c:1564 gnu-nat.c:2167 inf-ptrace.c:205 inf-ttrace.c:743
 msgid "I refuse to debug myself!"
 msgstr ""
 
-#: darwin-nat.c:1580 inf-ptrace.c:220 inf-ttrace.c:750
+#: darwin-nat.c:1571 inf-ptrace.c:220 inf-ttrace.c:750 remote.c:4408
 #, possible-c-format
 msgid "Attaching to program: %s, %s\n"
 msgstr ""
 
-#: darwin-nat.c:1583 inf-ptrace.c:223 inf-ttrace.c:753 procfs.c:3303
+#: darwin-nat.c:1574 inf-ptrace.c:223 inf-ttrace.c:753 procfs.c:3102
+#: remote.c:4411
 #, possible-c-format
 msgid "Attaching to %s\n"
 msgstr ""
 
-#: darwin-nat.c:1590
+#: darwin-nat.c:1581
 #, possible-c-format
 msgid "Can't attach to process %d: %s (%d)"
 msgstr ""
 
-#: darwin-nat.c:1635 inf-ptrace.c:282 inf-ttrace.c:798 procfs.c:3329
+#: darwin-nat.c:1626 inf-ptrace.c:282 inf-ttrace.c:798 procfs.c:3128
+#: remote.c:4328
 #, possible-c-format
 msgid "Detaching from program: %s, %s\n"
 msgstr ""
 
-#: darwin-nat.c:1651
+#: darwin-nat.c:1642
 #, possible-c-format
 msgid "Unable to detach from process-id %d: %s (%d)"
 msgstr ""
 
-#: darwin-nat.c:1679
+#: darwin-nat.c:1670
 #, c-format
 msgid "Thread 0x%lx of process %u"
 msgstr ""
 
-#: darwin-nat.c:1712
+#: darwin-nat.c:1703
 #, possible-c-format
 msgid "darwin_read_write_inferior(task=%x, %s, len=%d)\n"
 msgstr ""
 
-#: darwin-nat.c:1721
+#: darwin-nat.c:1712
 #, possible-c-format
 msgid "darwin_read_write_inferior: mach_vm_read failed at %s: %s"
 msgstr ""
 
-#: darwin-nat.c:1753
+#: darwin-nat.c:1744
 #, possible-c-format
 msgid "darwin_read_write_inferior: mach_vm_region_recurse failed at %s: %s\n"
 msgstr ""
 
-#: darwin-nat.c:1761
+#: darwin-nat.c:1752
 #, possible-c-format
 msgid ""
 "darwin_read_write_inferior: mach_vm_region_recurse addr=%s, start=%s, len=%"
 "s\n"
 msgstr ""
 
-#: darwin-nat.c:1770
+#: darwin-nat.c:1761
 #, possible-c-format
 msgid "No memory at %s (vs %s+0x%x).  Nothing written"
 msgstr ""
 
-#: darwin-nat.c:1788
+#: darwin-nat.c:1779
 #, possible-c-format
 msgid "darwin_read_write_inf: mach_vm_protect max failed at %s: %s"
 msgstr ""
 
-#: darwin-nat.c:1803
+#: darwin-nat.c:1794
 #, possible-c-format
 msgid "darwin_read_write_inf: mach_vm_protect failed at %s (len=0x%lx): %s"
 msgstr ""
 
-#: darwin-nat.c:1817
+#: darwin-nat.c:1808
 #, possible-c-format
 msgid "darwin_read_write_inferior: mach_vm_write failed: %s"
 msgstr ""
 
-#: darwin-nat.c:1865
+#: darwin-nat.c:1856
 #, possible-c-format
 msgid "darwin_xfer_memory(%s, %d, %c)\n"
 msgstr ""
 
-#: darwin-nat.c:1883
+#: darwin-nat.c:1874
 #, possible-c-format
 msgid "darwin_xfer_partial(%s, %d, rbuf=%s, wbuf=%s) pid=%u\n"
 msgstr ""
 
-#: darwin-nat.c:2037
+#: darwin-nat.c:2031
 msgid "Darwin child process"
 msgstr ""
 
-#: darwin-nat.c:2039
+#: darwin-nat.c:2033
 msgid "Darwin child process (started by the \"run\" command)."
 msgstr ""
 
-#: darwin-nat.c:2063
+#: darwin-nat.c:2057
 #, possible-c-format
 msgid "GDB task: 0x%lx, pid: %d\n"
 msgstr ""
 
-#: darwin-nat.c:2067
+#: darwin-nat.c:2061
 msgid "Set if printing inferior communication debugging statements."
 msgstr ""
 
-#: darwin-nat.c:2068
+#: darwin-nat.c:2062
 msgid "Show if printing inferior communication debugging statements."
 msgstr ""
 
-#: darwin-nat.c:2074
+#: darwin-nat.c:2068
 msgid "Set if mach exceptions are caught."
 msgstr ""
 
-#: darwin-nat.c:2075
+#: darwin-nat.c:2069
 msgid "Show if mach exceptions are caught."
 msgstr ""
 
-#: darwin-nat.c:2076
+#: darwin-nat.c:2070
 msgid ""
 "When this mode is on, all low level exceptions are reported before being\n"
 "reported by the kernel."
@@ -6450,43 +7196,43 @@ msgstr ""
 msgid "Parameter is saved, host or none"
 msgstr ""
 
-#: darwin-nat-info.c:850
+#: darwin-nat-info.c:853
 msgid "Get list of tasks in system."
 msgstr ""
 
-#: darwin-nat-info.c:852
+#: darwin-nat-info.c:855
 msgid "Get list of ports in a task."
 msgstr ""
 
-#: darwin-nat-info.c:854
+#: darwin-nat-info.c:857
 msgid "Get info on a specific port."
 msgstr ""
 
-#: darwin-nat-info.c:856
+#: darwin-nat-info.c:859
 msgid "Get info on a specific task."
 msgstr ""
 
-#: darwin-nat-info.c:858
+#: darwin-nat-info.c:861
 msgid "Get list of threads in a task."
 msgstr ""
 
-#: darwin-nat-info.c:860
+#: darwin-nat-info.c:863
 msgid "Get info on a specific thread."
 msgstr ""
 
-#: darwin-nat-info.c:863
+#: darwin-nat-info.c:866
 msgid "Get information on all mach region for the task."
 msgstr ""
 
-#: darwin-nat-info.c:865
+#: darwin-nat-info.c:868
 msgid "Get information on all mach sub region for the task."
 msgstr ""
 
-#: darwin-nat-info.c:867
+#: darwin-nat-info.c:870
 msgid "Get information on mach region at given address."
 msgstr ""
 
-#: darwin-nat-info.c:870
+#: darwin-nat-info.c:873
 msgid "Disp mach exceptions."
 msgstr ""
 
@@ -6527,7 +7273,7 @@ msgstr ""
 msgid "bad string table offset in symbol %d"
 msgstr ""
 
-#: dbxread.c:1180 mdebugread.c:2250 xcoffread.c:2182
+#: dbxread.c:1180 mdebugread.c:2250 xcoffread.c:2192
 #, possible-c-format
 msgid "function `%s' appears to be defined outside of all compilation units"
 msgstr ""
@@ -6542,41 +7288,41 @@ msgstr ""
 msgid "N_BINCL %s not in entries for any file, at symtab pos %d"
 msgstr ""
 
-#: dbxread.c:2040 mdebugread.c:3376 xcoffread.c:2898
+#: dbxread.c:2040 mdebugread.c:3376 xcoffread.c:2911
 #, possible-c-format
 msgid "unknown symbol descriptor `%c'"
 msgstr ""
 
-#: dbxread.c:2609
+#: dbxread.c:2610
 msgid "First symbol in segment of executable not a source symbol"
 msgstr ""
 
-#: dbxread.c:2886
+#: dbxread.c:2887
 msgid ""
 "misplaced N_LBRAC entry; discarding local symbols which have no enclosing "
 "block"
 msgstr ""
 
-#: dbxread.c:2907
+#: dbxread.c:2908
 msgid "block start larger than block end"
 msgstr ""
 
-#: dbxread.c:3201
+#: dbxread.c:3202
 #, possible-c-format
 msgid "unmatched N_LBRAC before symtab pos %d"
 msgstr ""
 
-#: dbxread.c:3359 dbxread.c:3453 dbxread.c:3549
+#: dbxread.c:3360 dbxread.c:3454 dbxread.c:3550
 #, possible-c-format
 msgid "ridiculous string table size: %d bytes"
 msgstr ""
 
-#: dbxread.c:3525
+#: dbxread.c:3526
 #, possible-c-format
 msgid "stabsect_build_psymtabs:  Found stabs (%s), but not string section (%s)"
 msgstr ""
 
-#: dbxread.c:3536
+#: dbxread.c:3537
 #, possible-c-format
 msgid "Can't find %s section in symbol file"
 msgstr ""
@@ -6790,7 +7536,7 @@ msgstr ""
 msgid "Can't read elf symbols from %s: %s"
 msgstr ""
 
-#: dictionary.c:587
+#: dictionary.c:603
 msgid "dict_add_symbol: non-expandable dictionary"
 msgstr ""
 
@@ -6819,7 +7565,7 @@ msgstr ""
 msgid "File is not an object file\n"
 msgstr ""
 
-#: dsrec.c:129 dsrec.c:143 symfile.c:1958
+#: dsrec.c:129 dsrec.c:143 symfile.c:1999
 msgid "Canceled the download"
 msgstr ""
 
@@ -6828,11 +7574,11 @@ msgstr ""
 msgid "make_srec:  Bad address (%s), or bad flags (0x%x)."
 msgstr ""
 
-#: dummy-frame.c:312
+#: dummy-frame.c:351
 msgid "maintenance print dummy-frames"
 msgstr ""
 
-#: dummy-frame.c:325
+#: dummy-frame.c:364
 msgid "Print the contents of the internal dummy-frame stack."
 msgstr ""
 
@@ -6862,107 +7608,111 @@ msgstr ""
 msgid "no signed variant found for type, while evaluating DWARF expression"
 msgstr ""
 
-#: dwarf2expr.c:386
-msgid "read_uleb128: Corrupted DWARF expression."
+#: dwarf2expr.c:380
+msgid "DWARF expression error: ran off end of buffer reading uleb128 value"
+msgstr ""
+
+#: dwarf2expr.c:392
+msgid "DWARF expression error: ran off end of buffer reading sleb128 value"
 msgstr ""
 
-#: dwarf2expr.c:413
-msgid "read_sleb128: Corrupted DWARF expression."
+#: dwarf2expr.c:401
+msgid "DWARF expression error: ran off end of buffer reading leb128 value"
 msgstr ""
 
-#: dwarf2expr.c:441
+#: dwarf2expr.c:417
 #, possible-c-format
 msgid ""
 "DWARF-2 expression error: `%s' operations must be used either alone or in "
 "conjunction with DW_OP_piece or DW_OP_bit_piece."
 msgstr ""
 
-#: dwarf2expr.c:475
+#: dwarf2expr.c:451
 msgid "Could not find type for DW_OP_GNU_const_type"
 msgstr ""
 
-#: dwarf2expr.c:477
+#: dwarf2expr.c:453
 msgid "DW_OP_GNU_const_type has different sizes for type and data"
 msgstr ""
 
-#: dwarf2expr.c:661
+#: dwarf2expr.c:653
 #, possible-c-format
 msgid "DWARF-2 expression error: Loop detected (%d)."
 msgstr ""
 
-#: dwarf2expr.c:824
+#: dwarf2expr.c:828
 msgid ""
 "DWARF-2 expression error: DW_OP_reg operations must be used either alone or "
 "in conjunction with DW_OP_piece or DW_OP_bit_piece."
 msgstr ""
 
-#: dwarf2expr.c:848 dwarf2loc.c:2595
+#: dwarf2expr.c:852 dwarf2loc.c:2771
 msgid "DW_OP_implicit_value: too few bytes available."
 msgstr ""
 
-#: dwarf2expr.c:869
+#: dwarf2expr.c:872
 msgid ""
 "DWARF-2 expression error: DW_OP_GNU_implicit_pointer is not allowed in frame "
 "context"
 msgstr ""
 
-#: dwarf2expr.c:959
+#: dwarf2expr.c:962
 msgid "Not implemented: computing frame base using explicit value operator"
 msgstr ""
 
-#: dwarf2expr.c:989
+#: dwarf2expr.c:992
 #, possible-c-format
 msgid "Not enough elements for DW_OP_swap.  Need 2, have %d."
 msgstr ""
 
-#: dwarf2expr.c:1009
+#: dwarf2expr.c:1012
 #, possible-c-format
 msgid "Not enough elements for DW_OP_rot.  Need 3, have %d."
 msgstr ""
 
-#: dwarf2expr.c:1122
+#: dwarf2expr.c:1126
 msgid "Incompatible types on DWARF stack"
 msgstr ""
 
-#: dwarf2expr.c:1245
+#: dwarf2expr.c:1249
 msgid "Can't be reached."
 msgstr ""
 
-#: dwarf2expr.c:1331
+#: dwarf2expr.c:1335
 msgid ""
 "DWARF-2 expression error: DW_OP_GNU_uninit must always be the very last op."
 msgstr ""
 
-#: dwarf2expr.c:1357
+#: dwarf2expr.c:1369
 msgid "DW_OP_GNU_entry_value: too few bytes available."
 msgstr ""
 
-#: dwarf2expr.c:1382
+#: dwarf2expr.c:1396
 msgid ""
 "DWARF-2 expression error: DW_OP_GNU_entry_value is supported only for single "
 "DW_OP_reg* or for DW_OP_breg*(0)+DW_OP_deref*"
 msgstr ""
 
-#: dwarf2expr.c:1444
+#: dwarf2expr.c:1475
 msgid "DW_OP_GNU_reinterpret has wrong size"
 msgstr ""
 
-#: dwarf2expr.c:1453
+#: dwarf2expr.c:1484
 #, possible-c-format
 msgid "Unhandled dwarf expression opcode 0x%x"
 msgstr ""
 
-#: dwarf2expr.c:1479 dwarf2expr.c:1487 dwarf2expr.c:1495 dwarf2expr.c:1503
-#: dwarf2expr.c:1511
+#: dwarf2expr.c:1510 dwarf2expr.c:1518 dwarf2expr.c:1526 dwarf2expr.c:1534
+#: dwarf2expr.c:1542 dwarf2expr.c:1571
 #, possible-c-format
 msgid "%s is invalid in this context"
 msgstr ""
 
-#: dwarf2expr.c:1519
+#: dwarf2expr.c:1550
 msgid "Support for typed DWARF is not supported in this context"
 msgstr ""
 
-#: dwarf2expr.c:1531
+#: dwarf2expr.c:1563
 msgid "Support for DW_OP_GNU_entry_value is unimplemented"
 msgstr ""
 
@@ -6976,12 +7726,12 @@ msgstr ""
 #. This is actually invalid DWARF, but if we ever do run across
 #. it somehow, we might as well support it.  So, instead, report
 #. it as unimplemented.
-#: dwarf2-frame.c:392
+#: dwarf2-frame.c:393
 msgid ""
 "Not implemented: computing unwound register using explicit value operator"
 msgstr ""
 
-#: dwarf2-frame.c:524
+#: dwarf2-frame.c:525
 #, possible-c-format
 msgid "bad CFI data; mismatched DW_CFA_restore_state at %s"
 msgstr ""
@@ -6994,146 +7744,152 @@ msgstr ""
 msgid "Could not compute CFA; needed to translate this expression"
 msgstr ""
 
-#: dwarf2-frame.c:935 dwarf2loc.c:2331
+#: dwarf2-frame.c:935 dwarf2loc.c:2507
 #, possible-c-format
 msgid "Unable to access DWARF register number %d"
 msgstr ""
 
-#: dwarf2-frame.c:959 dwarf2-frame.c:1105
+#: dwarf2-frame.c:959 dwarf2-frame.c:1116
 msgid "Unknown CFA rule."
 msgstr ""
 
-#: dwarf2-frame.c:1160
+#: dwarf2-frame.c:1173
 #, possible-c-format
 msgid "incomplete CFI data; unspecified registers (e.g., %s) at %s"
 msgstr ""
 
-#: dwarf2-frame.c:1354
+#: dwarf2-frame.c:1368
 msgid "Unknown register rule."
 msgstr ""
 
-#: dwarf2-frame.c:1492
+#: dwarf2-frame.c:1506
 msgid "can't compute CFA for this frame"
 msgstr ""
 
-#: dwarf2-frame.c:1619
+#: dwarf2-frame.c:1509
+msgid ""
+"can't compute CFA for this frame: required registers or memory are "
+"unavailable"
+msgstr ""
+
+#: dwarf2-frame.c:1581
 msgid "Unsupported address size"
 msgstr ""
 
-#: dwarf2-frame.c:1636
+#: dwarf2-frame.c:1598
 msgid "Unsupported encoding: DW_EH_PE_indirect"
 msgstr ""
 
-#: dwarf2-frame.c:1669 dwarf2-frame.c:1717
+#: dwarf2-frame.c:1631 dwarf2-frame.c:1679
 msgid "Invalid or unsupported encoding"
 msgstr ""
 
-#: dwarf2-frame.c:1927
+#: dwarf2-frame.c:1893
 msgid "Found a CIE when not expecting it."
 msgstr ""
 
-#: dwarf2-frame.c:2096
+#: dwarf2-frame.c:2066
 msgid "Found an FDE when not expecting it."
 msgstr ""
 
-#: dwarf2-frame.c:2234
+#: dwarf2-frame.c:2207
 #, possible-c-format
 msgid "Corrupt data in %s:%s; align 4 workaround apparently succeeded"
 msgstr ""
 
-#: dwarf2-frame.c:2241
+#: dwarf2-frame.c:2214
 #, possible-c-format
 msgid "Corrupt data in %s:%s; align 8 workaround apparently succeeded"
 msgstr ""
 
-#: dwarf2-frame.c:2249
+#: dwarf2-frame.c:2222
 #, possible-c-format
 msgid "Corrupt data in %s:%s"
 msgstr ""
 
-#: dwarf2-frame.c:2340
+#: dwarf2-frame.c:2313
 #, possible-c-format
 msgid "skipping .eh_frame info of %s: %s"
 msgstr ""
 
-#: dwarf2-frame.c:2380
+#: dwarf2-frame.c:2353
 #, possible-c-format
 msgid "skipping .debug_frame info of %s: %s"
 msgstr ""
 
-#: dwarf2loc.c:90
+#: dwarf2loc.c:249
 msgid "dwarf2_find_location_expression: Corrupted DWARF expression."
 msgstr ""
 
-#: dwarf2loc.c:243
+#: dwarf2loc.c:379
 #, possible-c-format
 msgid "Could not find the frame base for \"%s\"."
 msgstr ""
 
-#: dwarf2loc.c:333
+#: dwarf2loc.c:470
 #, possible-c-format
 msgid "Entry values and tail call frames debugging is %s.\n"
 msgstr ""
 
-#: dwarf2loc.c:362
+#: dwarf2loc.c:499
 #, possible-c-format
 msgid "DW_AT_GNU_call_site_target is not specified at %s in %s"
 msgstr ""
 
-#: dwarf2loc.c:374
+#: dwarf2loc.c:511
 #, possible-c-format
 msgid ""
 "DW_AT_GNU_call_site_target DWARF block resolving requires known frame which "
 "is currently not available at %s in %s"
 msgstr ""
 
-#: dwarf2loc.c:405
+#: dwarf2loc.c:542
 #, possible-c-format
 msgid "Cannot find function \"%s\" for a call site target at %s in %s"
 msgstr ""
 
-#: dwarf2loc.c:418
+#: dwarf2loc.c:555
 msgid "invalid call site target kind"
 msgstr ""
 
-#: dwarf2loc.c:434
+#: dwarf2loc.c:571
 #, possible-c-format
 msgid ""
 "DW_TAG_GNU_call_site resolving failed to find function name for address %s"
 msgstr ""
 
-#: dwarf2loc.c:503
+#: dwarf2loc.c:640
 #, possible-c-format
 msgid ""
 "DW_OP_GNU_entry_value resolving has found function \"%s\" at %s can call "
 "itself via tail calls"
 msgstr ""
 
-#: dwarf2loc.c:669
+#: dwarf2loc.c:805
 #, possible-c-format
 msgid "Unable to find function for PC %s"
 msgstr ""
 
-#: dwarf2loc.c:768
+#: dwarf2loc.c:904
 #, possible-c-format
 msgid ""
 "There are no unambiguously determinable intermediate callers or callees "
 "between caller function \"%s\" at %s and callee function \"%s\" at %s"
 msgstr ""
 
-#: dwarf2loc.c:845
+#: dwarf2loc.c:999
 #, possible-c-format
 msgid ""
 "DW_OP_GNU_entry_value resolving callee gdbarch %s (of %s (%s)) does not "
 "match caller gdbarch %s"
 msgstr ""
 
-#: dwarf2loc.c:857
+#: dwarf2loc.c:1011
 #, possible-c-format
 msgid "DW_OP_GNU_entry_value resolving requires caller of %s (%s)"
 msgstr ""
 
-#: dwarf2loc.c:873
+#: dwarf2loc.c:1027
 #, possible-c-format
 msgid ""
 "DW_OP_GNU_entry_value resolving expects callee %s at %s but the called frame "
@@ -7142,694 +7898,824 @@ msgstr ""
 
 #. DW_TAG_GNU_call_site_parameter will be missing just if GCC could not
 #. determine its value.
-#: dwarf2loc.c:903
+#: dwarf2loc.c:1052
 #, possible-c-format
 msgid "Cannot find matching parameter at DW_TAG_GNU_call_site %s at %s"
 msgstr ""
 
-#: dwarf2loc.c:939 dwarf2loc.c:986
+#: dwarf2loc.c:1088 dwarf2loc.c:1135
 msgid "Cannot resolve DW_AT_GNU_call_site_data_value"
 msgstr ""
 
-#: dwarf2loc.c:1150
+#: dwarf2loc.c:1311
 msgid ""
 "DWARF-2 expression error: DW_OP_GNU_entry_value is supported only for single "
 "DW_OP_reg* or for DW_OP_fbreg(*)"
 msgstr ""
 
-#: dwarf2loc.c:1388
+#: dwarf2loc.c:1549
 msgid "Should not be able to create a lazy value with an enclosing type"
 msgstr ""
 
-#: dwarf2loc.c:1480 dwarf2loc.c:2044
+#: dwarf2loc.c:1641 dwarf2loc.c:2206
 #, possible-c-format
 msgid "Unable to access DWARF register number %s"
 msgstr ""
 
-#: dwarf2loc.c:1537 dwarf2loc.c:2137
+#: dwarf2loc.c:1698 dwarf2loc.c:2299
 msgid "invalid location type"
 msgstr ""
 
-#: dwarf2loc.c:1659
+#: dwarf2loc.c:1820
 msgid ""
 "Can't do read-modify-write to update bitfield; containing word has been "
 "optimized out"
 msgstr ""
 
-#: dwarf2loc.c:1664
+#: dwarf2loc.c:1825
 msgid ""
 "Can't do read-modify-write to update bitfield; containing word is unavailable"
 msgstr ""
 
-#: dwarf2loc.c:1679
+#: dwarf2loc.c:1840
 #, possible-c-format
 msgid "Unable to write to DWARF register number %s"
 msgstr ""
 
-#: dwarf2loc.c:1856
+#: dwarf2loc.c:2017
 msgid "Invalid use of DW_OP_GNU_implicit_pointer"
 msgstr ""
 
-#: dwarf2loc.c:1926
+#: dwarf2loc.c:2087
 msgid "access outside bounds of object referenced via synthetic pointer"
 msgstr ""
 
-#: dwarf2loc.c:2039
+#: dwarf2loc.c:2201
 msgid "cannot use offset on synthetic pointer to register"
 msgstr ""
 
-#: dwarf2loc.c:2312
+#: dwarf2loc.c:2488
 #, possible-c-format
 msgid "DWARF operator %s cannot be translated to an agent expression"
 msgstr ""
 
-#: dwarf2loc.c:2315
+#: dwarf2loc.c:2491
 #, possible-c-format
 msgid ""
 "Unknown DWARF operator 0x%02x cannot be translated to an agent expression"
 msgstr ""
 
-#: dwarf2loc.c:2597
+#: dwarf2loc.c:2773
 #, possible-c-format
 msgid "Cannot translate DW_OP_implicit_value of %d bytes"
 msgstr ""
 
-#: dwarf2loc.c:2681
+#: dwarf2loc.c:2856
 msgid "No block found for address"
 msgstr ""
 
-#: dwarf2loc.c:2686
+#: dwarf2loc.c:2861
 msgid "No function found for block"
 msgstr ""
 
-#. Note that dwarf_stack_op_name will never return
+#. Note that get_DW_OP_name will never return
 #. NULL here.
-#: dwarf2loc.c:2757
+#: dwarf2loc.c:2932
 #, possible-c-format
 msgid "Unsupported size %d in %s"
 msgstr ""
 
-#: dwarf2loc.c:2945
+#: dwarf2loc.c:3120
 msgid "Cannot translate empty pieces to agent expressions"
 msgstr ""
 
-#: dwarf2loc.c:2958
+#: dwarf2loc.c:3133
 msgid "Expression pieces exceed word size"
 msgstr ""
 
-#: dwarf2loc.c:3044
+#: dwarf2loc.c:3221
 msgid "invalid label"
 msgstr ""
 
-#: dwarf2loc.c:3125 dwarf2loc.c:3134
+#: dwarf2loc.c:3305 dwarf2loc.c:3314
 #, possible-c-format
 msgid "a variable in $%s"
 msgstr ""
 
-#: dwarf2loc.c:3155
+#: dwarf2loc.c:3335
 #, possible-c-format
 msgid "No block found for address for symbol \"%s\"."
 msgstr ""
 
-#: dwarf2loc.c:3161
+#: dwarf2loc.c:3341
 #, possible-c-format
 msgid "No function found for block for symbol \"%s\"."
 msgstr ""
 
-#: dwarf2loc.c:3174
+#: dwarf2loc.c:3354
 #, possible-c-format
 msgid "Unexpected opcode after DW_OP_breg%u for symbol \"%s\"."
 msgstr ""
 
-#: dwarf2loc.c:3192
+#: dwarf2loc.c:3372
 #, possible-c-format
 msgid "a variable at frame base reg $%s offset %s+%s"
 msgstr ""
 
-#: dwarf2loc.c:3204
+#: dwarf2loc.c:3384
 #, possible-c-format
 msgid "a variable at offset %s from base reg $%s"
 msgstr ""
 
-#: dwarf2loc.c:3235
+#: dwarf2loc.c:3415 dwarf2loc.c:3438
 #, possible-c-format
 msgid ""
 "a thread-local variable at offset 0x%s in the thread-local storage for `%s'"
 msgstr ""
 
-#: dwarf2loc.c:3246
+#: dwarf2loc.c:3449
 #, possible-c-format
 msgid "the constant %d"
 msgstr ""
 
-#: dwarf2loc.c:3278
+#: dwarf2loc.c:3483
 #, possible-c-format
 msgid "Unrecognized DWARF opcode 0x%02x at %ld"
 msgstr ""
 
-#: dwarf2loc.c:3617
+#: dwarf2loc.c:3845
 msgid ", and "
 msgstr ""
 
-#: dwarf2loc.c:3633
+#: dwarf2loc.c:3861
 msgid "a complex DWARF expression:\n"
 msgstr ""
 
-#: dwarf2loc.c:3655
+#: dwarf2loc.c:3883
 #, possible-c-format
 msgid "an empty %s-byte piece"
 msgstr ""
 
-#: dwarf2loc.c:3658
+#: dwarf2loc.c:3886
 #, possible-c-format
 msgid " [%s-byte piece]"
 msgstr ""
 
-#: dwarf2loc.c:3670
+#: dwarf2loc.c:3898
 #, possible-c-format
 msgid "an empty %s-bit piece"
 msgstr ""
 
-#: dwarf2loc.c:3674
+#: dwarf2loc.c:3902
 #, possible-c-format
 msgid " [%s-bit piece, offset %s bits]"
 msgstr ""
 
-#: dwarf2loc.c:3686
+#: dwarf2loc.c:3914
 #, possible-c-format
 msgid "Corrupted DWARF2 expression for \"%s\"."
 msgstr ""
 
-#: dwarf2loc.c:3823
+#: dwarf2loc.c:4050
 msgid "multi-location:\n"
 msgstr ""
 
-#: dwarf2loc.c:3829
+#: dwarf2loc.c:4077
 #, possible-c-format
-msgid "Corrupted DWARF expression for symbol \"%s\"."
+msgid "  Base address %s"
 msgstr ""
 
-#: dwarf2loc.c:3848
+#: dwarf2loc.c:4085
 #, possible-c-format
-msgid "  Base address %s"
+msgid "Corrupted DWARF expression for symbol \"%s\"."
 msgstr ""
 
 #. (It would improve readability to print only the minimum
 #. necessary digits of the second number of the range.)
-#: dwarf2loc.c:3866
+#: dwarf2loc.c:4100
 #, possible-c-format
 msgid "  Range %s-%s: "
 msgstr ""
 
-#: dwarf2loc.c:3914
+#: dwarf2loc.c:4151
 msgid "Set entry values and tail call frames debugging."
 msgstr ""
 
-#: dwarf2loc.c:3916
+#: dwarf2loc.c:4153
 msgid "Show entry values and tail call frames debugging."
 msgstr ""
 
-#: dwarf2loc.c:3918
+#: dwarf2loc.c:4155
 msgid ""
 "When non-zero, the process of determining parameter values from function "
 "entry point and tail call frames will be printed."
 msgstr ""
 
-#: dwarf2read.c:822
+#: dwarf2read.c:1080
 #, possible-c-format
 msgid "The upper bound on the age of cached dwarf2 compilation units is %s.\n"
 msgstr ""
 
-#: dwarf2read.c:834
+#: dwarf2read.c:1092
 msgid "statement list doesn't fit in .debug_line section"
 msgstr ""
 
-#: dwarf2read.c:841
+#: dwarf2read.c:1099
 msgid ".debug_line section has line data without a file"
 msgstr ""
 
-#: dwarf2read.c:848
+#: dwarf2read.c:1106
 msgid ".debug_line section has line program sequence without an end"
 msgstr ""
 
-#: dwarf2read.c:855
+#: dwarf2read.c:1113
 msgid "location expression too complex"
 msgstr ""
 
-#: dwarf2read.c:863
+#: dwarf2read.c:1121
 #, possible-c-format
 msgid "const value length mismatch for '%s', got %d, expected %d"
 msgstr ""
 
-#: dwarf2read.c:871
+#: dwarf2read.c:1129
 #, possible-c-format
-msgid "macro info runs off end of `%s' section"
+msgid "debug info runs off end of %s section [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:879
+#: dwarf2read.c:1139
 #, possible-c-format
 msgid ""
 "macro debug info contains a malformed macro definition:\n"
 "`%s'"
 msgstr ""
 
-#: dwarf2read.c:888
+#: dwarf2read.c:1148
 #, possible-c-format
 msgid "invalid attribute class or form for '%s' in '%s'"
 msgstr ""
 
-#: dwarf2read.c:1518
+#: dwarf2read.c:1791
 #, possible-c-format
 msgid ""
 "Support for zlib-compressed DWARF data (from '%s') is disabled in this copy "
 "of GDB"
 msgstr ""
 
-#: dwarf2read.c:1534 dwarf2read.c:1672
+#: dwarf2read.c:1807 dwarf2read.c:1951
 #, possible-c-format
 msgid "Dwarf Error: Can't read DWARF data from '%s'"
 msgstr ""
 
-#: dwarf2read.c:1541
+#: dwarf2read.c:1814
 #, possible-c-format
 msgid "Dwarf Error: Corrupt DWARF ZLIB header from '%s'"
 msgstr ""
 
-#: dwarf2read.c:1566
+#: dwarf2read.c:1839
 #, possible-c-format
 msgid "Dwarf Error: setting up DWARF uncompression in '%s': %d"
 msgstr ""
 
-#: dwarf2read.c:1572
+#: dwarf2read.c:1845
 #, possible-c-format
 msgid "Dwarf Error: zlib error uncompressing from '%s': %d"
 msgstr ""
 
-#: dwarf2read.c:1579
+#: dwarf2read.c:1852
 #, possible-c-format
 msgid "Dwarf Error: concluding DWARF uncompression in '%s': %d"
 msgstr ""
 
-#: dwarf2read.c:2621
+#: dwarf2read.c:2549
+#, possible-c-format
+msgid "Skipping obsolete .gdb_index section in %s."
+msgstr ""
+
+#: dwarf2read.c:2568
+#, possible-c-format
+msgid ""
+"Skipping deprecated .gdb_index section in %s.\n"
+"Do \"set use-deprecated-index-sections on\" before the file is read\n"
+"to use the section anyway."
+msgstr ""
+
+#: dwarf2read.c:3099
 #, possible-c-format
 msgid "  Number of unread CUs: %d\n"
 msgstr ""
 
-#: dwarf2read.c:2853
+#: dwarf2read.c:3449
 #, possible-c-format
 msgid "(Internal error: pc %s in read in CU, but not in symtab.)"
 msgstr ""
 
-#: dwarf2read.c:3016
+#: dwarf2read.c:3683
 msgid "read_comp_unit_head: dwarf from non elf file"
 msgstr ""
 
-#: dwarf2read.c:3043
+#: dwarf2read.c:3702
 #, possible-c-format
 msgid ""
 "Dwarf Error: wrong version in compilation unit header (is %d, should be 2, "
 "3, or 4) [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:3050
+#: dwarf2read.c:3709
 #, possible-c-format
 msgid ""
 "Dwarf Error: bad offset (0x%lx) in compilation unit header (offset 0x%lx + "
 "6) [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:3058
+#: dwarf2read.c:3718
 #, possible-c-format
 msgid ""
 "Dwarf Error: bad length (0x%lx) in compilation unit header (offset 0x%lx + "
 "0) [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:3261
-msgid "debug type entry runs off end of `.debug_types' section, ignored"
-msgstr ""
-
-#: dwarf2read.c:3299
+#: dwarf2read.c:4050
 #, possible-c-format
 msgid ""
 "debug type entry at offset 0x%x is duplicate to the entry at offset 0x%x, "
 "signature 0x%s"
 msgstr ""
 
-#: dwarf2read.c:3341
+#: dwarf2read.c:4113
 msgid "missing `.debug_types' section for DW_FORM_ref_sig8 die"
 msgstr ""
 
-#: dwarf2read.c:4013
+#: dwarf2read.c:4316
+#, possible-c-format
+msgid ""
+"Dwarf Error: compilation unit with DW_AT_GNU_dwo_name has children (offset 0x"
+"%x) [in module %s]"
+msgstr ""
+
+#: dwarf2read.c:4359
+#, possible-c-format
+msgid "Dwarf Error: missing dwo_id [in module %s]"
+msgstr ""
+
+#: dwarf2read.c:4377
+#, possible-c-format
+msgid ""
+"Dwarf Error: CU at offset 0x%x references unknown DWO with ID %s [in module %"
+"s]"
+msgstr ""
+
+#: dwarf2read.c:5438 dwarf2read.c:6837
+#, possible-c-format
+msgid ""
+"Dwarf Error: DW_TAG_imported_unit is not supported in type units [in module %"
+"s]"
+msgstr ""
+
+#: dwarf2read.c:5551
 #, possible-c-format
 msgid "unhandled containing DIE tag %d for DIE at %d"
 msgstr ""
 
-#: dwarf2read.c:4347 dwarf2read.c:9705
+#: dwarf2read.c:5890 dwarf2read.c:12326
 msgid "malformed enumerator DIE ignored"
 msgstr ""
 
-#: dwarf2read.c:4385
+#: dwarf2read.c:5928
 #, possible-c-format
 msgid "Dwarf Error: Could not find abbrev number %d [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:4436 dwarf2read.c:9921
+#: dwarf2read.c:5983 dwarf2read.c:12553
 msgid "ignoring absolute DW_AT_sibling"
 msgstr ""
 
-#: dwarf2read.c:4512 dwarf2read.c:10366
+#: dwarf2read.c:6061 dwarf2read.c:13035
 #, possible-c-format
 msgid "Dwarf Error: Cannot handle %s in DWARF reader [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:4558
+#: dwarf2read.c:6106
 #, possible-c-format
 msgid "bug: psymtab for %s is already read in."
 msgstr ""
 
-#: dwarf2read.c:4565 mdebugread.c:286
+#: dwarf2read.c:6113 mdebugread.c:286
 #, possible-c-format
 msgid "Reading in symbols for %s..."
 msgstr ""
 
-#: dwarf2read.c:4594 mdebugread.c:299 psymtab.c:102 symfile.c:1158
+#: dwarf2read.c:6142 mdebugread.c:299 psymtab.c:98 symfile.c:1141
 msgid "done.\n"
 msgstr ""
 
-#: dwarf2read.c:5005
+#: dwarf2read.c:6508
+#, possible-c-format
+msgid "Symtab %s has objects from two different Go packages: %s and %s"
+msgstr ""
+
+#: dwarf2read.c:6936
 #, possible-c-format
 msgid "Tag '%s' has unexpected children"
 msgstr ""
 
-#: dwarf2read.c:5195
+#: dwarf2read.c:7139
 msgid "template parameter missing DW_AT_type"
 msgstr ""
 
-#: dwarf2read.c:5211
+#: dwarf2read.c:7155
 msgid "template parameter missing DW_AT_const_value"
 msgstr ""
 
-#: dwarf2read.c:5406
+#: dwarf2read.c:7362
 #, possible-c-format
 msgid ""
 "Computed physname <%s> does not match demangled <%s> (from linkage <%s>) - "
 "DIE at 0x%x [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:5455 dwarf2read.c:5551
+#: dwarf2read.c:7412 dwarf2read.c:7508
 #, possible-c-format
 msgid "Tag '%s' has no DW_AT_import"
 msgstr ""
 
-#: dwarf2read.c:5542
+#: dwarf2read.c:7499
 #, possible-c-format
 msgid "child DW_TAG_imported_declaration expected - DIE at 0x%x [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:5563
+#: dwarf2read.c:7520
 #, possible-c-format
 msgid ""
 "child DW_TAG_imported_declaration has unknown imported name - DIE at 0x%x "
 "[in module %s]"
 msgstr ""
 
-#: dwarf2read.c:5751
+#: dwarf2read.c:7689
 msgid "CU refers to both DW_AT_GNU_macros and DW_AT_macro_info"
 msgstr ""
 
-#: dwarf2read.c:5841
+#: dwarf2read.c:8010
+#, possible-c-format
+msgid ""
+"Dwarf Error: debug entry at offset 0x%x is missing its dwo_id [in module %s]"
+msgstr ""
+
+#: dwarf2read.c:8030
+#, possible-c-format
+msgid ""
+"debug entry at offset 0x%x is duplicate to the entry at offset 0x%x, dwo_id "
+"0x%s [in module %s]"
+msgstr ""
+
+#: dwarf2read.c:8273
+#, possible-c-format
+msgid "Could not find DWO CU referenced by CU at offset 0x%x [in module %s]"
+msgstr ""
+
+#: dwarf2read.c:8311
 #, possible-c-format
-msgid "Dwarf Error: Missing children for type unit [in module %s]"
+msgid "Could not find DWO TU referenced by TU at offset 0x%x [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:5931
+#: dwarf2read.c:8432
 #, possible-c-format
 msgid "DIE 0x%x and its abstract origin 0x%x have different tags"
 msgstr ""
 
-#: dwarf2read.c:5974
+#: dwarf2read.c:8475
 #, possible-c-format
 msgid "Child DIE 0x%x and its abstract origin 0x%x have different tags"
 msgstr ""
 
-#: dwarf2read.c:5979
+#: dwarf2read.c:8480
 #, possible-c-format
 msgid "Child DIE 0x%x and its abstract origin 0x%x have different parents"
 msgstr ""
 
-#: dwarf2read.c:5992
+#: dwarf2read.c:8493
 #, possible-c-format
 msgid ""
 "Multiple children of DIE 0x%x refer to DIE 0x%x as their abstract origin"
 msgstr ""
 
-#: dwarf2read.c:6054
+#: dwarf2read.c:8557
 #, possible-c-format
 msgid "missing name for subprogram DIE at %d"
 msgstr ""
 
-#: dwarf2read.c:6064
+#: dwarf2read.c:8568
 #, possible-c-format
 msgid "cannot get low and high bounds for subprogram DIE at %d"
 msgstr ""
 
-#: dwarf2read.c:6279
+#: dwarf2read.c:8780
 #, possible-c-format
 msgid "missing DW_AT_low_pc for DW_TAG_GNU_call_site DIE 0x%x [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:6295
+#: dwarf2read.c:8796
 #, possible-c-format
 msgid "Duplicate PC %s for DW_TAG_GNU_call_site DIE 0x%x [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:6310
+#: dwarf2read.c:8811
 #, possible-c-format
 msgid ""
 "Tag %d is not DW_TAG_GNU_call_site_parameter in DW_TAG_GNU_call_site child "
 "DIE 0x%x [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:6368
+#: dwarf2read.c:8869
 #, possible-c-format
 msgid ""
 "Cannot find function owning DW_TAG_GNU_call_site DIE 0x%x [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:6406
+#: dwarf2read.c:8906
 #, possible-c-format
 msgid ""
 "DW_AT_GNU_call_site_target target DIE has invalid physname, for referencing "
 "DIE 0x%x [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:6419
+#: dwarf2read.c:8919
 #, possible-c-format
 msgid ""
 "DW_AT_GNU_call_site_target target DIE has invalid low pc, for referencing "
 "DIE 0x%x [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:6428
+#: dwarf2read.c:8928
 #, possible-c-format
 msgid ""
 "DW_TAG_GNU_call_site DW_AT_GNU_call_site_target is neither block nor "
 "reference, for DIE 0x%x [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:6457
+#: dwarf2read.c:8968
+#, possible-c-format
+msgid ""
+"DW_AT_abstract_origin offset is not in CU for DW_TAG_GNU_call_site child DIE "
+"0x%x [in module %s]"
+msgstr ""
+
+#: dwarf2read.c:8980
 #, possible-c-format
 msgid ""
 "No DW_FORM_block* DW_AT_location for DW_TAG_GNU_call_site child DIE 0x%x [in "
 "module %s]"
 msgstr ""
 
-#: dwarf2read.c:6470
+#: dwarf2read.c:8998
 #, possible-c-format
 msgid ""
 "Only single DW_OP_reg or DW_OP_fbreg is supported for DW_FORM_block* "
-"DW_AT_location for DW_TAG_GNU_call_site child DIE 0x%x [in module %s]"
+"DW_AT_location is supported for DW_TAG_GNU_call_site child DIE 0x%x [in "
+"module %s]"
 msgstr ""
 
-#: dwarf2read.c:6481
+#: dwarf2read.c:9011
 #, possible-c-format
 msgid ""
 "No DW_FORM_block* DW_AT_GNU_call_site_value for DW_TAG_GNU_call_site child "
 "DIE 0x%x [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:6499
+#: dwarf2read.c:9029
 #, possible-c-format
 msgid ""
 "No DW_FORM_block* DW_AT_GNU_call_site_data_value for DW_TAG_GNU_call_site "
 "child DIE 0x%x [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:6543
+#: dwarf2read.c:9073
 #, possible-c-format
 msgid "Offset %d out of bounds for DW_AT_ranges attribute"
 msgstr ""
 
-#: dwarf2read.c:6597 dwarf2read.c:6896
+#: dwarf2read.c:9127 dwarf2read.c:9443
 msgid "Invalid .debug_ranges data (no base address)"
 msgstr ""
 
-#: dwarf2read.c:6605 dwarf2read.c:6905
+#: dwarf2read.c:9135 dwarf2read.c:9452
 msgid "Invalid .debug_ranges data (inverted range)"
 msgstr ""
 
-#: dwarf2read.c:6864
+#: dwarf2read.c:9411
 #, possible-c-format
 msgid "Offset %lu out of bounds for DW_AT_ranges attribute"
 msgstr ""
 
-#: dwarf2read.c:7332
+#: dwarf2read.c:9893
 #, possible-c-format
 msgid "unsupported accessibility %d"
 msgstr ""
 
-#: dwarf2read.c:7344
+#: dwarf2read.c:9905
 msgid "unexpected virtuality in component of Ada type"
 msgstr ""
 
-#: dwarf2read.c:7369
+#: dwarf2read.c:9930
 msgid "unexpected member function in Ada type"
 msgstr ""
 
-#: dwarf2read.c:7452
+#: dwarf2read.c:10013
 #, possible-c-format
 msgid "member function type missing for '%s'"
 msgstr ""
 
-#: dwarf2read.c:7541
+#: dwarf2read.c:10102
 #, possible-c-format
 msgid ""
 "Member function \"%s\" (offset %d) is virtual but the vtable offset is not "
 "specified"
 msgstr ""
 
-#: dwarf2read.c:7561
+#: dwarf2read.c:10121
 msgid "unexpected member functions in Ada type"
 msgstr ""
 
-#: dwarf2read.c:7888
+#: dwarf2read.c:10464
 #, possible-c-format
 msgid "virtual function table pointer not found when defining class '%s'"
 msgstr ""
 
-#: dwarf2read.c:8234
+#: dwarf2read.c:10822
 msgid "DW_AT_byte_size for array type smaller than the total size of elements"
 msgstr ""
 
-#: dwarf2read.c:8454
+#: dwarf2read.c:11042
 #, possible-c-format
 msgid "DW_TAG_module has no name, offset 0x%x"
 msgstr ""
 
-#: dwarf2read.c:8561
+#: dwarf2read.c:11149
 #, possible-c-format
 msgid "invalid pointer size %d"
 msgstr ""
 
-#: dwarf2read.c:8933
+#: dwarf2read.c:11497
+#, possible-c-format
+msgid "Self-referential DW_TAG_typedef - DIE at 0x%x [in module %s]"
+msgstr ""
+
+#: dwarf2read.c:11534
 msgid "DW_AT_name missing from DW_TAG_base_type"
 msgstr ""
 
-#: dwarf2read.c:8986
+#: dwarf2read.c:11587
 #, possible-c-format
 msgid "unsupported DW_AT_encoding: '%s'"
 msgstr ""
 
-#: dwarf2read.c:9345
+#: dwarf2read.c:11662
+#, possible-c-format
+msgid "Missing DW_AT_lower_bound - DIE at 0x%x [in module %s]"
+msgstr ""
+
+#: dwarf2read.c:11893
 #, possible-c-format
 msgid "Dwarf Error: could not find abbrev number %d [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:9689
+#: dwarf2read.c:12310
 #, possible-c-format
 msgid ""
 "DW_TAG_typedef has childen - GCC PR debug/47510 bug - DIE at 0x%x [in module "
 "%s]"
 msgstr ""
 
-#: dwarf2read.c:9973
+#: dwarf2read.c:12619
 #, possible-c-format
 msgid "DW_AT_low_pc %s is zero for DIE at 0x%x [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:9984
+#: dwarf2read.c:12630
 #, possible-c-format
 msgid ""
 "DW_AT_low_pc %s is not < DW_AT_high_pc %s for DIE at 0x%x [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:10083
+#: dwarf2read.c:12684
+#, possible-c-format
+msgid ""
+"Dwarf Error: Type Unit at offset 0x%lx contains external reference to offset "
+"0x%lx [in module %s].\n"
+msgstr ""
+
+#: dwarf2read.c:12718
 #, possible-c-format
 msgid "could not find partial DIE 0x%x in cache [from module %s]\n"
 msgstr ""
 
-#: dwarf2read.c:10383
+#. For now flag a hard error.
+#. Later we can turn this into a complaint.
+#. For now flag a hard error.
+#. Later we can turn this into a complaint if warranted.
+#: dwarf2read.c:13009 dwarf2read.c:13021
+#, possible-c-format
+msgid "Dwarf Error: %s found in non-DWO CU [in module %s]"
+msgstr ""
+
+#: dwarf2read.c:13052
 #, possible-c-format
 msgid "Suspicious DW_AT_byte_size value treated as zero instead of %s"
 msgstr ""
 
-#: dwarf2read.c:10467
+#: dwarf2read.c:13137
 #, possible-c-format
 msgid "read_address: bad switch, signed [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:10486
+#: dwarf2read.c:13156
 #, possible-c-format
 msgid "read_address: bad switch, unsigned [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:10580
+#: dwarf2read.c:13250
 msgid "intermixed 32-bit and 64-bit DWARF sections"
 msgstr ""
 
-#: dwarf2read.c:10616
+#: dwarf2read.c:13286
 #, possible-c-format
 msgid "read_offset_1: bad switch [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:10654
+#: dwarf2read.c:13324
 #, possible-c-format
 msgid "DW_FORM_strp used without .debug_str section [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:10657
+#: dwarf2read.c:13327
 #, possible-c-format
 msgid "DW_FORM_strp pointing outside of .debug_str section [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:10992
-msgid "missing .debug_line section"
+#: dwarf2read.c:13416
+#, possible-c-format
+msgid "DW_FORM_addr_index used without .debug_addr section [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:11041
-msgid "invalid maximum_ops_per_instruction in `.debug_line' section"
+#: dwarf2read.c:13419
+#, possible-c-format
+msgid ""
+"DW_FORM_addr_index pointing outside of .debug_addr section [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:11092
-msgid "line number info header doesn't fit in `.debug_line' section"
+#: dwarf2read.c:13542
+#, possible-c-format
+msgid ""
+"DW_FORM_str_index used without .debug_str.dwo section in CU at offset 0x%lx "
+"[in module %s]"
+msgstr ""
+
+#: dwarf2read.c:13546
+#, possible-c-format
+msgid ""
+"DW_FORM_str_index used without .debug_str_offsets.dwo section in CU at "
+"offset 0x%lx [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:11139
+#: dwarf2read.c:13550
 #, possible-c-format
-msgid "misplaced first line number at 0x%lx for '%s'"
+msgid ""
+"DW_FORM_str_index pointing outside of .debug_str_offsets.dwo section in CU "
+"at offset 0x%lx [in module %s]"
+msgstr ""
+
+#: dwarf2read.c:13560
+#, possible-c-format
+msgid ""
+"Offset from DW_FORM_str_index pointing outside of .debug_str.dwo section in "
+"CU at offset 0x%lx [in module %s]"
+msgstr ""
+
+#: dwarf2read.c:13838
+msgid "missing .debug_line.dwo section"
+msgstr ""
+
+#: dwarf2read.c:13840
+msgid "missing .debug_line section"
+msgstr ""
+
+#: dwarf2read.c:13892
+msgid "invalid maximum_ops_per_instruction in `.debug_line' section"
+msgstr ""
+
+#: dwarf2read.c:13942
+msgid "line number info header doesn't fit in `.debug_line' section"
 msgstr ""
 
-#: dwarf2read.c:11358
+#: dwarf2read.c:14161
 #, possible-c-format
 msgid ".debug_line address at offset 0x%lx is 0 [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:11395 dwarf2read.c:11404
+#: dwarf2read.c:14198 dwarf2read.c:14207
 msgid "mangled .debug_line section"
 msgstr ""
 
-#: dwarf2read.c:11795
+#: dwarf2read.c:14621
 msgid "file index out of range"
 msgstr ""
 
@@ -7837,517 +8723,546 @@ msgstr ""
 #. trash data, but since we must specifically ignore things
 #. we don't recognize, there is nothing else we should do at
 #. this point.
-#: dwarf2read.c:12057
+#: dwarf2read.c:14882
 #, possible-c-format
 msgid "unsupported tag: '%s'"
 msgstr ""
 
-#: dwarf2read.c:12225
+#: dwarf2read.c:15052
 #, possible-c-format
 msgid "unsupported const value attribute form: '%s'"
 msgstr ""
 
-#: dwarf2read.c:12345
+#: dwarf2read.c:15172
 #, possible-c-format
 msgid ""
 "Dwarf Error: Problem turning containing type into gdb type [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:12377 dwarf2read.c:14432
+#: dwarf2read.c:15203 dwarf2read.c:16333
 #, possible-c-format
 msgid ""
 "Dwarf Error: Cannot find signatured DIE referenced from DIE at 0x%x [in "
 "module %s]"
 msgstr ""
 
-#: dwarf2read.c:12388
+#: dwarf2read.c:15221
 #, possible-c-format
 msgid "Dwarf Error: Bad type attribute %s [in module %s]"
 msgstr ""
 
 #. read_type_die already issued a complaint.
-#: dwarf2read.c:12412
+#: dwarf2read.c:15248
 #, possible-c-format
 msgid "<unknown type in %s, CU 0x%x, DIE 0x%x>"
 msgstr ""
 
-#: dwarf2read.c:12514
+#: dwarf2read.c:15350
 #, possible-c-format
 msgid "unexpected tag in read_type_die: '%s'"
 msgstr ""
 
-#: dwarf2read.c:12730
+#: dwarf2read.c:15566
 #, possible-c-format
 msgid "template param type '%s' defined within parent '%s'"
 msgstr ""
 
-#: dwarf2read.c:14179
+#: dwarf2read.c:16116
 #, possible-c-format
 msgid "unsupported die ref attribute form: '%s'"
 msgstr ""
 
-#: dwarf2read.c:14201
+#: dwarf2read.c:16138
 #, possible-c-format
 msgid "Attribute value is not a constant (%s)"
 msgstr ""
 
-#: dwarf2read.c:14265
+#: dwarf2read.c:16161
 #, possible-c-format
 msgid "Dwarf Error: Expected reference attribute [in module %s]"
 msgstr ""
 
-#: dwarf2read.c:14333
+#: dwarf2read.c:16229
 #, possible-c-format
 msgid ""
 "Dwarf Error: Cannot find DIE at 0x%x referenced from DIE at 0x%x [in module %"
 "s]"
 msgstr ""
 
-#: dwarf2read.c:14363
+#: dwarf2read.c:16260
 #, possible-c-format
 msgid "Dwarf Error: Cannot find DIE at 0x%x referenced in module %s"
 msgstr ""
 
-#: dwarf2read.c:14390
+#: dwarf2read.c:16287
 #, possible-c-format
 msgid ""
 "Dwarf Error: DIE at 0x%x referenced in module %s is neither DW_FORM_block* "
 "nor DW_FORM_exprloc"
 msgstr ""
 
-#: dwarf2read.c:14452
+#: dwarf2read.c:16355
 #, possible-c-format
 msgid ""
 "Dwarf Error: Cannot find signatured DIE at 0x%x referenced from DIE at 0x%x "
 "[in module %s]"
 msgstr ""
 
-#: dwarf2read.c:14798
+#: dwarf2read.c:16698
 #, possible-c-format
 msgid "unsupported stack op: '%s'"
 msgstr ""
 
-#: dwarf2read.c:14801
+#: dwarf2read.c:16701
 #, possible-c-format
 msgid "unsupported stack op: '%02x'"
 msgstr ""
 
-#: dwarf2read.c:14813
+#: dwarf2read.c:16713
 msgid "location description stack overflow"
 msgstr ""
 
-#: dwarf2read.c:14820
+#: dwarf2read.c:16720
 msgid "location description stack underflow"
 msgstr ""
 
-#: dwarf2read.c:14916
+#: dwarf2read.c:16805
 #, possible-c-format
 msgid "bad file number in macro information (%d)"
 msgstr ""
 
-#: dwarf2read.c:14971
+#: dwarf2read.c:16863
 #, possible-c-format
 msgid ""
 "macro definition contains spaces in formal argument list:\n"
 "`%s'"
 msgstr ""
 
-#: dwarf2read.c:15187
+#: dwarf2read.c:17086
 #, possible-c-format
 msgid "invalid form 0x%x in `%s'"
 msgstr ""
 
-#: dwarf2read.c:15216
+#: dwarf2read.c:17115
 #, possible-c-format
 msgid "unrecognized DW_MACFINO opcode 0x%x"
 msgstr ""
 
-#: dwarf2read.c:15260
+#: dwarf2read.c:17160
 #, possible-c-format
 msgid "unrecognized version `%d' in .debug_macro section"
 msgstr ""
 
-#: dwarf2read.c:15388
+#: dwarf2read.c:17289
 #, possible-c-format
 msgid "debug info with no main source gives macro %s on line %d: %s"
 msgstr ""
 
-#: dwarf2read.c:15390 dwarf2read.c:15399
+#: dwarf2read.c:17291 dwarf2read.c:17300
 msgid "definition"
 msgstr ""
 
-#: dwarf2read.c:15390 dwarf2read.c:15399
+#: dwarf2read.c:17291 dwarf2read.c:17300
 msgid "undefinition"
 msgstr ""
 
-#: dwarf2read.c:15397
+#: dwarf2read.c:17298
 #, possible-c-format
 msgid "debug info gives %s macro %s with %s line %d: %s"
 msgstr ""
 
-#: dwarf2read.c:15398 dwarf2read.c:15428
+#: dwarf2read.c:17299 dwarf2read.c:17329
 msgid "command-line"
 msgstr ""
 
-#: dwarf2read.c:15398
+#: dwarf2read.c:17299
 msgid "in-file"
 msgstr ""
 
-#: dwarf2read.c:15400 dwarf2read.c:15429
+#: dwarf2read.c:17301 dwarf2read.c:17330
 msgid "zero"
 msgstr ""
 
-#: dwarf2read.c:15400 dwarf2read.c:15429
+#: dwarf2read.c:17301 dwarf2read.c:17330
 msgid "non-zero"
 msgstr ""
 
-#: dwarf2read.c:15426
+#: dwarf2read.c:17327
 #, possible-c-format
 msgid "debug info gives source %d included from %s at %s line %d"
 msgstr ""
 
-#: dwarf2read.c:15428
+#: dwarf2read.c:17329
 msgid "file"
 msgstr ""
 
-#: dwarf2read.c:15447
+#: dwarf2read.c:17348
 msgid "macro debug info has an unmatched `close_file' directive"
 msgstr ""
 
-#: dwarf2read.c:15473
+#: dwarf2read.c:17374
 msgid "no terminating 0-type entry for macros in `.debug_macinfo' section"
 msgstr ""
 
-#: dwarf2read.c:15540
+#: dwarf2read.c:17396
+msgid "recursive DW_MACRO_GNU_transparent_include in .debug_macro section"
+msgstr ""
+
+#: dwarf2read.c:17490
 #, possible-c-format
 msgid "missing %s section"
 msgstr ""
 
-#: dwarf2read.c:15772
+#: dwarf2read.c:17746
 msgid "Location list used without specifying the CU base address."
 msgstr ""
 
-#: dwarf2read.c:15931
+#: dwarf2read.c:17903
 #, possible-c-format
 msgid ""
 "Dwarf Error: could not find partial DIE containing offset 0x%lx [in module %"
 "s]"
 msgstr ""
 
-#: dwarf2read.c:15943
+#: dwarf2read.c:17916
 #, possible-c-format
 msgid "invalid dwarf2 offset %u"
 msgstr ""
 
-#: dwarf2read.c:15959
-#, possible-c-format
-msgid "no compilation unit with offset %u."
-msgstr ""
-
-#: dwarf2read.c:16238
+#: dwarf2read.c:18199
 #, possible-c-format
 msgid "A problem internal to GDB: DIE 0x%x has type already set"
 msgstr ""
 
-#: dwarf2read.c:16896
+#: dwarf2read.c:18964
 msgid "Ada is not currently supported by the index"
 msgstr ""
 
-#: dwarf2read.c:16929
+#: dwarf2read.c:18988
 msgid "couldn't data write to file"
 msgstr ""
 
-#: dwarf2read.c:17012
+#: dwarf2read.c:19101
 msgid "Cannot use an index to create the index"
 msgstr ""
 
-#: dwarf2read.c:17015
+#: dwarf2read.c:19104
 msgid "Cannot make an index when the file has multiple .debug_types sections"
 msgstr ""
 
-#: dwarf2read.c:17026
+#: dwarf2read.c:19115
 #, possible-c-format
 msgid "Can't open `%s' for writing"
 msgstr ""
 
-#: dwarf2read.c:17184
+#: dwarf2read.c:19270
 msgid "usage: save gdb-index DIRECTORY"
 msgstr ""
 
-#: dwarf2read.c:17205
+#: dwarf2read.c:19291
 #, possible-c-format
 msgid "Error while writing index for `%s': "
 msgstr ""
 
-#: dwarf2read.c:17220
+#: dwarf2read.c:19306
 #, possible-c-format
 msgid "Whether to always disassemble DWARF expressions is %s.\n"
 msgstr ""
 
-#: dwarf2read.c:17230
+#: dwarf2read.c:19316
 #, possible-c-format
 msgid "Whether to check \"physname\" is %s.\n"
 msgstr ""
 
-#: dwarf2read.c:17244
+#: dwarf2read.c:19330
 msgid ""
 "Set DWARF 2 specific variables.\n"
 "Configure DWARF 2 variables such as the cache size"
 msgstr ""
 
 #. allow-unknown
-#: dwarf2read.c:17250
+#: dwarf2read.c:19336
 msgid ""
 "Show DWARF 2 specific variables\n"
 "Show DWARF 2 variables such as the cache size"
 msgstr ""
 
-#: dwarf2read.c:17257
+#: dwarf2read.c:19343
 msgid "Set the upper bound on the age of cached dwarf2 compilation units."
 msgstr ""
 
-#: dwarf2read.c:17258
+#: dwarf2read.c:19344
 msgid "Show the upper bound on the age of cached dwarf2 compilation units."
 msgstr ""
 
-#: dwarf2read.c:17259
+#: dwarf2read.c:19345
 msgid ""
 "A higher limit means that cached compilation units will be stored\n"
 "in memory longer, and more total memory will be used.  Zero disables\n"
 "caching, which can slow down startup."
 msgstr ""
 
-#: dwarf2read.c:17269
+#: dwarf2read.c:19355
 msgid "Set whether `info address' always disassembles DWARF expressions."
 msgstr ""
 
-#: dwarf2read.c:17270
+#: dwarf2read.c:19356
 msgid "Show whether `info address' always disassembles DWARF expressions."
 msgstr ""
 
-#: dwarf2read.c:17271
+#: dwarf2read.c:19357
 msgid ""
 "When enabled, DWARF expressions are always printed in an assembly-like\n"
 "syntax.  When disabled, expressions will be printed in a more\n"
 "conversational style, when possible."
 msgstr ""
 
-#: dwarf2read.c:17280
+#: dwarf2read.c:19366
+msgid "Set debugging of the dwarf2 reader."
+msgstr ""
+
+#: dwarf2read.c:19367
+msgid "Show debugging of the dwarf2 reader."
+msgstr ""
+
+#: dwarf2read.c:19368
+msgid ""
+"When enabled, debugging messages are printed during dwarf2 reading\n"
+"and symtab expansion."
+msgstr ""
+
+#: dwarf2read.c:19375
 msgid "Set debugging of the dwarf2 DIE reader."
 msgstr ""
 
-#: dwarf2read.c:17281
+#: dwarf2read.c:19376
 msgid "Show debugging of the dwarf2 DIE reader."
 msgstr ""
 
-#: dwarf2read.c:17282
+#: dwarf2read.c:19377
 msgid ""
 "When enabled (non-zero), DIEs are dumped after they are read in.\n"
 "The value is the maximum depth to print."
 msgstr ""
 
-#: dwarf2read.c:17289
+#: dwarf2read.c:19384
 msgid "Set cross-checking of \"physname\" code against demangler."
 msgstr ""
 
-#: dwarf2read.c:17290
+#: dwarf2read.c:19385
 msgid "Show cross-checking of \"physname\" code against demangler."
 msgstr ""
 
-#: dwarf2read.c:17291
+#: dwarf2read.c:19386
 msgid ""
 "When enabled, GDB's internal \"physname\" code is checked against\n"
 "the demangler."
 msgstr ""
 
-#: dwarf2read.c:17298
+#: dwarf2read.c:19393
+msgid "Set whether to use deprecated gdb_index sections."
+msgstr ""
+
+#: dwarf2read.c:19394
+msgid "Show whether to use deprecated gdb_index sections."
+msgstr ""
+
+#: dwarf2read.c:19395
+msgid ""
+"When enabled, deprecated .gdb_index sections are used anyway.\n"
+"Normally they are ignored either because of a missing feature or\n"
+"performance issue.\n"
+"Warning: This option must be enabled before gdb reads the file."
+msgstr ""
+
+#: dwarf2read.c:19405
 msgid ""
 "Save a gdb-index file.\n"
 "Usage: save gdb-index DIRECTORY"
 msgstr ""
 
-#: elfread.c:144
+#: elfread.c:151
 #, possible-c-format
-msgid "Loadable segment \"%s\" outside of ELF segments"
+msgid "Loadable section \"%s\" outside of ELF segments"
 msgstr ""
 
-#: elfread.c:478
+#: elfread.c:501
 #, possible-c-format
 msgid "elf/stab section information %s without a preceding file symbol"
 msgstr ""
 
-#: elfread.c:490
+#: elfread.c:513
 #, possible-c-format
 msgid "duplicated elf/stab section information for %s"
 msgstr ""
 
 #. This case indicates buggy inferior program, the resolved address
 #. should never change.
-#: elfread.c:770
+#: elfread.c:793
 #, possible-c-format
 msgid ""
 "gnu-indirect-function \"%s\" has changed its resolved function_address from %"
 "s to %s"
 msgstr ""
 
-#: elfread.c:1025
+#: elfread.c:1044
 #, possible-c-format
 msgid "handle_inferior_event: Invalid gnu-indirect-function breakpoint type %d"
 msgstr ""
 
-#: elfread.c:1087
+#: elfread.c:1118
 #, possible-c-format
 msgid "File \"%s\" has no build-id, file skipped"
 msgstr ""
 
-#: elfread.c:1090
+#: elfread.c:1121
 #, possible-c-format
 msgid "File \"%s\" has a different build-id, file skipped"
 msgstr ""
 
-#: elfread.c:1178
+#: elfread.c:1206
 #, possible-c-format
 msgid "\"%s\": separate debug info file has no debug info"
 msgstr ""
 
-#: elfread.c:1245 elfread.c:1256 elfread.c:1281 machoread.c:863
+#: elfread.c:1280 elfread.c:1291 elfread.c:1316 machoread.c:863
 #: machoread.c:882
 #, possible-c-format
 msgid "Can't read symbols from %s: %s"
 msgstr ""
 
-#: elfread.c:1540
+#: elfread.c:1578
 #, possible-c-format
 msgid "elf/stab section information questionable for %s"
 msgstr ""
 
-#: elfread.c:1560
+#: elfread.c:1598
 #, possible-c-format
 msgid "elf/stab section information missing for %s"
 msgstr ""
 
-#: eval.c:369 valops.c:2026
+#: eval.c:382
 #, possible-c-format
 msgid "there is no field named %s"
 msgstr ""
 
-#: eval.c:395
+#: eval.c:408
 msgid "too many initializers"
 msgstr ""
 
-#: eval.c:399
+#: eval.c:412
 msgid "don't know which variant you want to set"
 msgstr ""
 
-#: eval.c:470
+#: eval.c:483
 msgid "tuple range index out of range"
 msgstr ""
 
-#: eval.c:482
+#: eval.c:495
 msgid "tuple index out of range"
 msgstr ""
 
-#: eval.c:875
+#: eval.c:905
 #, possible-c-format
 msgid "Symbol \"%s\" does not have any specific entry value"
 msgstr ""
 
-#: eval.c:897
+#: eval.c:927
 #, possible-c-format
 msgid "Register $%s not available."
 msgstr ""
 
-#: eval.c:911
+#: eval.c:941
 #, possible-c-format
 msgid "Value of register %s not available."
 msgstr ""
 
-#: eval.c:1037
+#: eval.c:1067
 msgid "(power)set type with unknown size"
 msgstr ""
 
 #. different element modes.
-#: eval.c:1072
+#: eval.c:1102
 msgid "POWERSET tuple elements of different mode"
 msgstr ""
 
-#: eval.c:1076
+#: eval.c:1106
 msgid "incompatible POWERSET tuple elements"
 msgstr ""
 
-#: eval.c:1079
+#: eval.c:1109
 msgid "empty POWERSET tuple range"
 msgstr ""
 
-#: eval.c:1083
+#: eval.c:1113
 msgid "POWERSET tuple element out of range"
 msgstr ""
 
-#: eval.c:1260
+#: eval.c:1290
 msgid "no 'respondsTo:' or 'respondsToSelector:' method"
 msgstr ""
 
-#: eval.c:1269
+#: eval.c:1299
 msgid "no 'methodFor:' or 'methodForSelector:' method"
 msgstr ""
 
-#: eval.c:1288
+#: eval.c:1318
 msgid "Target does not respond to this message selector."
 msgstr ""
 
-#: eval.c:1374
+#: eval.c:1403
 msgid "method address has symbol information with non-function type; skipping"
 msgstr ""
 
-#: eval.c:1427
+#: eval.c:1456
 msgid "Expression of type other than \"method returning ...\" used as a method"
 msgstr ""
 
-#: eval.c:1493
+#: eval.c:1522
 msgid "Non-pointer-to-member value used in pointer-to-member construct"
 msgstr ""
 
 #. For the time being, we don't handle this.
-#: eval.c:1721
+#: eval.c:1750
 #, possible-c-format
 msgid "Call to overloaded function %s requires `this' pointer"
 msgstr ""
 
-#: eval.c:1816
+#: eval.c:1845
 msgid "Cannot evaluate function -- may be inlined"
 msgstr ""
 
-#: eval.c:1841
+#: eval.c:1870
 msgid ""
 "Expression of type other than \"Function returning ...\" used as function"
 msgstr ""
 
-#: eval.c:1919
+#: eval.c:1948
 msgid "Cannot perform substring on this type"
 msgstr ""
 
-#: eval.c:2054
+#: eval.c:2077
 msgid "non-pointer-to-member value used in pointer-to-member construct"
 msgstr ""
 
-#: eval.c:2226
+#: eval.c:2249
 msgid "':' operator used in invalid context"
 msgstr ""
 
-#: eval.c:2348
+#: eval.c:2371
 #, possible-c-format
 msgid "Too many subscripts for F77 (%d Max)"
 msgstr ""
 
-#: eval.c:2353
+#: eval.c:2376
 msgid "Wrong number of subscripts"
 msgstr ""
 
-#: eval.c:2547
+#: eval.c:2570
 msgid "Non-integral right operand for \"@\" operator."
 msgstr ""
 
-#: eval.c:2618
+#: eval.c:2641
 msgid "Attempt to dereference pointer to member without an object"
 msgstr ""
 
@@ -8359,23 +9274,23 @@ msgstr ""
 #. If there are any cases landing here which mean a user error,
 #. then they should be separate cases, with more descriptive
 #. error messages.
-#: eval.c:2868
+#: eval.c:2891
 msgid "GDB does not (yet) know how to evaluate that kind of expression"
 msgstr ""
 
-#: eval.c:2934
+#: eval.c:2957
 msgid "Attempt to take address of register or constant."
 msgstr ""
 
-#: eval.c:2967 valops.c:1645 valops.c:1660 valops.c:1694
+#: eval.c:2990 valops.c:1647 valops.c:1662 valops.c:1696
 msgid "Attempt to take address of value not located in memory."
 msgstr ""
 
-#: eval.c:3086
+#: eval.c:3109
 msgid "Internal error in eval_type."
 msgstr ""
 
-#: eval.c:3097
+#: eval.c:3120
 msgid "Can't get dimensions for a non-array type"
 msgstr ""
 
@@ -8409,11 +9324,11 @@ msgstr ""
 msgid "Erroneous arithmetic operation."
 msgstr ""
 
-#: exceptions.c:126 exceptions.c:184
+#: exceptions.c:142 exceptions.c:200
 msgid "bad state"
 msgstr ""
 
-#: exceptions.c:309
+#: exceptions.c:323
 msgid "Bad switch."
 msgstr ""
 
@@ -8426,65 +9341,69 @@ msgstr ""
 msgid "No executable file now.\n"
 msgstr ""
 
-#: exec.c:242
+#: exec.c:241
 #, possible-c-format
 msgid "\"%s\": could not open as an executable file: %s"
 msgstr ""
 
-#: exec.c:258
+#: exec.c:257
 #, possible-c-format
 msgid "\"%s\": not in executable format: %s"
 msgstr ""
 
-#: exec.c:274 exec.c:284
+#: exec.c:273 exec.c:283
 #, possible-c-format
 msgid "\"%s\": can't find the file sections: %s"
 msgstr ""
 
-#: exec.c:325
+#: exec.c:324
 msgid ""
 "A program is being debugged already.\n"
 "Are you sure you want to change the file? "
 msgstr ""
 
-#: exec.c:327
+#: exec.c:326
 msgid "File not changed."
 msgstr ""
 
-#: exec.c:343
+#: exec.c:342
 msgid "No executable file name was specified"
 msgstr ""
 
-#: exec.c:705 maint.c:361 maint.c:393
+#: exec.c:704 maint.c:361 maint.c:393
 #, possible-c-format
 msgid "file type %s.\n"
 msgstr ""
 
-#: exec.c:730
+#: exec.c:729
 #, possible-c-format
 msgid "Cannot find section for the entry point of %s."
 msgstr ""
 
-#: exec.c:736
+#: exec.c:735
 #, possible-c-format
 msgid "\tEntry point: %s\n"
 msgstr ""
 
-#: exec.c:771
+#: exec.c:766
+msgid "\t<no file loaded>\n"
+msgstr ""
+
+#: exec.c:773
 #, possible-c-format
 msgid "\tMapping info for file `%s'.\n"
 msgstr ""
 
-#: exec.c:804
+#: exec.c:806
 msgid "Must specify section name and its virtual address"
 msgstr ""
 
-#: exec.c:832
+#: exec.c:834
 #, possible-c-format
 msgid "Section %s not found"
 msgstr ""
 
-#: exec.c:919
+#: exec.c:921
 msgid ""
 "Use FILE as program to be debugged.\n"
 "It is read for its symbols, for getting the contents of pure memory,\n"
@@ -8494,7 +9413,7 @@ msgid ""
 "No arg means to have no executable file and no symbols."
 msgstr ""
 
-#: exec.c:929
+#: exec.c:931
 msgid ""
 "Use FILE as program for getting contents of pure memory.\n"
 "If FILE cannot be found as specified, your execution directory path\n"
@@ -8502,7 +9421,7 @@ msgid ""
 "No arg means have no executable file."
 msgstr ""
 
-#: exec.c:936
+#: exec.c:938
 msgid ""
 "Change the base address of section SECTION of the exec file to ADDR.\n"
 "This can be used if the exec file does not contain section addresses,\n"
@@ -8511,19 +9430,19 @@ msgid ""
 "``info files'' command lists all the sections and their addresses."
 msgstr ""
 
-#: exec.c:943
+#: exec.c:945
 msgid "Set writing into executable and core files."
 msgstr ""
 
-#: exec.c:944
+#: exec.c:946
 msgid "Show writing into executable and core files."
 msgstr ""
 
-#: exec.c:956
+#: exec.c:958
 msgid "Can't create a corefile"
 msgstr ""
 
-#: expprint.c:243
+#: expprint.c:241
 msgid "bad selector"
 msgstr ""
 
@@ -8532,11 +9451,11 @@ msgstr ""
 #. Not found; don't try to keep going because we don't know how
 #. to interpret further elements.  For example, this happens
 #. if opcode is OP_TYPE.
-#: expprint.c:504 expprint.c:580
+#: expprint.c:502 expprint.c:578
 msgid "Invalid expression"
 msgstr ""
 
-#: expprint.c:514
+#: expprint.c:512
 #, possible-c-format
 msgid "<language %s has no 'this'>"
 msgstr ""
@@ -8546,7 +9465,7 @@ msgstr ""
 msgid "Couldn't open %s."
 msgstr ""
 
-#: f-exp.y:760 m2-exp.y:726
+#: f-exp.y:762 m2-exp.y:728
 msgid "Overflow on numeric constant."
 msgstr ""
 
@@ -8611,15 +9530,15 @@ msgstr ""
 msgid "Overflow in address range computation, choose smaller range."
 msgstr ""
 
-#: findcmd.c:227
+#: findcmd.c:229
 msgid "Missing search pattern."
 msgstr ""
 
-#: findcmd.c:232
+#: findcmd.c:234
 msgid "Search space too small to contain pattern."
 msgstr ""
 
-#: findcmd.c:326
+#: findcmd.c:328
 msgid ""
 "Search memory for a sequence of bytes.\n"
 "Usage:\n"
@@ -8637,89 +9556,89 @@ msgid ""
 "Convenience variable \"$numfound\" is set to the number of matches."
 msgstr ""
 
-#: findvar.c:60 findvar.c:95
+#: findvar.c:61 findvar.c:96
 #, possible-c-format
 msgid "That operation is not available on integers of more than %d bytes."
 msgstr ""
 
-#: findvar.c:176
+#: findvar.c:177
 msgid "extract_typed_address: type is not a pointer or reference"
 msgstr ""
 
-#: findvar.c:249
+#: findvar.c:250
 msgid "store_typed_address: type is not a pointer or reference"
 msgstr ""
 
-#: findvar.c:479 findvar.c:492
+#: findvar.c:509 findvar.c:522
 #, possible-c-format
 msgid "Unknown argument list address for `%s'."
 msgstr ""
 
-#: findvar.c:508
+#: findvar.c:538
 #, possible-c-format
 msgid "Cannot look up value of a typedef `%s'."
 msgstr ""
 
-#: findvar.c:535 findvar.c:546
+#: findvar.c:565 findvar.c:576
 #, possible-c-format
 msgid "Value of register variable not available for `%s'."
 msgstr ""
 
-#: findvar.c:568
+#: findvar.c:607
 #, possible-c-format
 msgid "No global symbol \"%s\"."
 msgstr ""
 
-#: findvar.c:587
+#: findvar.c:626
 #, possible-c-format
 msgid "Cannot look up value of a botched symbol `%s'."
 msgstr ""
 
-#: f-lang.c:101
+#: f-lang.c:102
 msgid "unrecognized character type"
 msgstr ""
 
-#: f-lang.c:484
+#: f-lang.c:481
 msgid "Malformed function STAB found in add_common_block()"
 msgstr ""
 
-#: f-lang.c:532
+#: f-lang.c:529
 msgid "Attempt to add COMMON entry with no block open!"
 msgstr ""
 
-#: f-lang.c:725
+#: f-lang.c:722
 msgid "cannot get .bf node off empty list"
 msgstr ""
 
-#: fork-child.c:331
+#: fork-child.c:328
 msgid "setpgrp failed in child"
 msgstr ""
 
-#: fork-child.c:463
+#: fork-child.c:460
 #, possible-c-format
 msgid "During startup program terminated with signal %s, %s."
 msgstr ""
 
-#: fork-child.c:472
+#: fork-child.c:469
 #, possible-c-format
 msgid "During startup program exited with code %d."
 msgstr ""
 
-#: fork-child.c:475
+#: fork-child.c:472
 msgid "During startup program exited normally."
 msgstr ""
 
-#: fork-child.c:543
+#: fork-child.c:540
 msgid ""
 "Set a wrapper for running programs.\n"
 "The wrapper prepares the system and environment for the new program."
 msgstr ""
 
-#: fork-child.c:546
+#: fork-child.c:543
 msgid "Show the wrapper for running programs."
 msgstr ""
 
-#: fork-child.c:552
+#: fork-child.c:549
 msgid "Disable use of an execution wrapper."
 msgstr ""
 
@@ -8766,117 +9685,117 @@ msgstr ""
 msgid "Register %d is not available"
 msgstr ""
 
-#: frame.c:1048
+#: frame.c:1068
 msgid "Attempt to assign to a value that was optimized out."
 msgstr ""
 
-#: frame.c:1065
+#: frame.c:1085
 msgid "Attempt to assign to an unmodifiable value."
 msgstr ""
 
-#: frame.c:1122
+#: frame.c:1142
 #, possible-c-format
 msgid ""
 "Bad debug information detected: Attempt to read %d bytes from registers."
 msgstr ""
 
-#: frame.c:1288 ia64-tdep.c:1931 ia64-tdep.c:2308 libunwind-frame.c:334
+#: frame.c:1308 ia64-libunwind-tdep.c:335 ia64-tdep.c:1926 ia64-tdep.c:2301
 msgid "No registers."
 msgstr ""
 
-#: frame.c:1290 stack.c:1655 stack.c:2238 thread.c:1281
+#: frame.c:1310 stack.c:1661 stack.c:2200 thread.c:1289
 msgid "No stack."
 msgstr ""
 
-#: frame.c:1292
+#: frame.c:1312
 msgid "No memory."
 msgstr ""
 
-#: frame.c:1297
+#: frame.c:1317
 msgid "No selected thread."
 msgstr ""
 
-#: frame.c:1299 infcmd.c:1797
+#: frame.c:1319 infcmd.c:1827
 msgid "Invalid selected thread."
 msgstr ""
 
-#: frame.c:1301
+#: frame.c:1321
 msgid "Target is executing."
 msgstr ""
 
-#: frame.c:2328
+#: frame.c:2350
 msgid "Missing unwind SP method"
 msgstr ""
 
-#: frame.c:2432
+#: frame.c:2454
 msgid ""
 "Set backtrace specific variables.\n"
 "Configure backtrace variables such as the backtrace limit"
 msgstr ""
 
 #. allow-unknown
-#: frame.c:2437
+#: frame.c:2459
 msgid ""
 "Show backtrace specific variables\n"
 "Show backtrace variables such as the backtrace limit"
 msgstr ""
 
-#: frame.c:2444
+#: frame.c:2466
 msgid "Set whether backtraces should continue past \"main\"."
 msgstr ""
 
-#: frame.c:2445
+#: frame.c:2467
 msgid "Show whether backtraces should continue past \"main\"."
 msgstr ""
 
-#: frame.c:2446
+#: frame.c:2468
 msgid ""
 "Normally the caller of \"main\" is not of interest, so GDB will terminate\n"
 "the backtrace at \"main\".  Set this variable if you need to see the rest\n"
 "of the stack trace."
 msgstr ""
 
-#: frame.c:2456
+#: frame.c:2478
 msgid ""
 "Set whether backtraces should continue past the entry point of a program."
 msgstr ""
 
-#: frame.c:2458
+#: frame.c:2480
 msgid ""
 "Show whether backtraces should continue past the entry point of a program."
 msgstr ""
 
-#: frame.c:2460
+#: frame.c:2482
 msgid ""
 "Normally there are no callers beyond the entry point of a program, so GDB\n"
 "will terminate the backtrace there.  Set this variable if you need to see\n"
 "the rest of the stack trace."
 msgstr ""
 
-#: frame.c:2470
+#: frame.c:2492
 msgid "Set an upper bound on the number of backtrace levels."
 msgstr ""
 
-#: frame.c:2471
+#: frame.c:2493
 msgid "Show the upper bound on the number of backtrace levels."
 msgstr ""
 
-#: frame.c:2472
+#: frame.c:2494
 msgid ""
 "No more than the specified number of frames can be displayed or examined.\n"
 "Zero is unlimited."
 msgstr ""
 
 #. Debug this files internals.
-#: frame.c:2481
+#: frame.c:2503
 msgid "Set frame debugging."
 msgstr ""
 
-#: frame.c:2482
+#: frame.c:2504
 msgid "Show frame debugging."
 msgstr ""
 
-#: frame.c:2483
+#: frame.c:2505
 msgid "When non-zero, frame specific internal debugging is enabled."
 msgstr ""
 
@@ -8884,25 +9803,25 @@ msgstr ""
 msgid "frame_unwind_find_by_frame failed"
 msgstr ""
 
-#: frv-linux-tdep.c:210
+#: frv-linux-tdep.c:211
 msgid "Can't read realtime sigtramp frame."
 msgstr ""
 
-#: frv-linux-tdep.c:217
+#: frv-linux-tdep.c:218
 msgid "not a signal trampoline"
 msgstr ""
 
-#: frv-tdep.c:427
+#: frv-tdep.c:426
 #, possible-c-format
 msgid "Bad register number %d"
 msgstr ""
 
-#: frv-tdep.c:1145
+#: frv-tdep.c:1142
 #, possible-c-format
 msgid "Illegal return value length: %d"
 msgstr ""
 
-#: frv-tdep.c:1350
+#: frv-tdep.c:1347
 #, possible-c-format
 msgid "Don't know how to return a %d-byte value."
 msgstr ""
@@ -8921,12 +9840,7 @@ msgstr ""
 msgid "Type node corrupt! F77 arrays cannot have %d subscripts (%d Max)"
 msgstr ""
 
-#: f-valprint.c:514
-#, possible-c-format
-msgid "Invalid F77 type code %d in symbol table."
-msgstr ""
-
-#: f-valprint.c:527
+#: f-valprint.c:423
 msgid ""
 "All COMMON blocks visible at this level:\n"
 "\n"
@@ -8936,34 +9850,38 @@ msgstr ""
 #. block supposedly visible in this function.  Let us
 #. first make sure that it is visible and if so, let
 #. us display its contents.
-#: f-valprint.c:556 f-valprint.c:646
+#: f-valprint.c:452 f-valprint.c:555 stap-probe.c:1124
 msgid "No frame selected"
 msgstr ""
 
 #. Got no 'funname', code below will fail.
-#: f-valprint.c:596
+#: f-valprint.c:492
 msgid "No function found for frame."
 msgstr ""
 
-#: f-valprint.c:613
+#: f-valprint.c:511
 msgid "Contents of blank COMMON block:\n"
 msgstr ""
 
-#: f-valprint.c:615
+#: f-valprint.c:513
 #, possible-c-format
 msgid "Contents of F77 COMMON block '%s':\n"
 msgstr ""
 
-#: f-valprint.c:627
+#: f-valprint.c:523 infrun.c:6836 stack.c:1740 stack.c:1954
+msgid "Unable to restore previously selected frame."
+msgstr ""
+
+#: f-valprint.c:536
 #, possible-c-format
 msgid "Cannot locate the common block %s in function '%s'\n"
 msgstr ""
 
-#: f-valprint.c:644
+#: f-valprint.c:553
 msgid "Cannot deal with NULL common name!"
 msgstr ""
 
-#: f-valprint.c:696 f-valprint.c:699
+#: f-valprint.c:605 f-valprint.c:608
 msgid "Print out the values contained in a Fortran COMMON block."
 msgstr ""
 
@@ -8972,82 +9890,86 @@ msgstr ""
 msgid "Failed to open '%s' for output."
 msgstr ""
 
-#: gcore.c:84
+#: gcore.c:83
+msgid "Target does not support core file generation."
+msgstr ""
+
+#: gcore.c:91
 #, possible-c-format
 msgid "Failed to create 'note' section for corefile: %s"
 msgstr ""
 
-#: gcore.c:94
+#: gcore.c:100
 msgid "gcore: failed to get corefile memory sections from target."
 msgstr ""
 
-#: gcore.c:100
+#: gcore.c:104
 #, possible-c-format
 msgid "writing note section (%s)"
 msgstr ""
 
-#: gcore.c:170
+#: gcore.c:172
 msgid "Can't find default bfd machine type (need execfile)."
 msgstr ""
 
-#: gcore.c:184
+#: gcore.c:186
 msgid "Can't find bfd architecture for corefile (need execfile)."
 msgstr ""
 
-#: gcore.c:445
+#: gcore.c:447
 #, possible-c-format
 msgid "Couldn't make gcore segment: %s"
 msgstr ""
 
-#: gcore.c:539
+#: gcore.c:541
 #, possible-c-format
 msgid "Memory read failed for corefile section, %s bytes at %s."
 msgstr ""
 
-#: gcore.c:547
+#: gcore.c:549
 #, possible-c-format
 msgid "Failed to write corefile contents (%s)."
 msgstr ""
 
-#: gcore.c:580
+#: gcore.c:588
 msgid ""
 "Save a core file with the current state of the debugged process.\n"
 "Argument is optional filename.  Default filename is 'core.<process_id>'."
 msgstr ""
 
-#: gdbarch.c:67
+#: gdbarch.c:68
 #, possible-c-format
 msgid "Architecture debugging is %s.\n"
 msgstr ""
 
-#: gdbarch.c:722
+#: gdbarch.c:765
 #, possible-c-format
 msgid "verify_gdbarch: the following are invalid ...%s"
 msgstr ""
 
-#: gdbarch.c:4077
+#: gdbarch.c:4460
 msgid "gdbarch_architecture_names: multi-arch unknown"
 msgstr ""
 
-#: gdbarch.c:4103
+#: gdbarch.c:4486
 #, possible-c-format
 msgid "gdbarch: Attempt to register unknown architecture (%d)"
 msgstr ""
 
-#: gdbarch.c:4114
+#: gdbarch.c:4497
 #, possible-c-format
 msgid "gdbarch: Duplicate registration of architecture (%s)"
 msgstr ""
 
-#: gdbarch.c:4303
+#: gdbarch.c:4686
 msgid "Set architecture debugging."
 msgstr ""
 
-#: gdbarch.c:4304
+#: gdbarch.c:4687
 msgid "Show architecture debugging."
 msgstr ""
 
-#: gdbarch.c:4305
+#: gdbarch.c:4688
 msgid "When non-zero, architecture debugging is enabled."
 msgstr ""
 
@@ -9056,126 +9978,156 @@ msgstr ""
 msgid "Could not load %s: %s"
 msgstr ""
 
+#: gdbserver/ax.c:820 printcmd.c:2070
+msgid "Wrong number of arguments for specified format-string"
+msgstr ""
+
+#: gdbserver/ax.c:867
+msgid "long long not supported in agent printf"
+msgstr ""
+
+#: gdbserver/ax.c:898
+#, possible-c-format
+msgid "Format directive in '%s' not supported in agent printf"
+msgstr ""
+
+#: gdbserver/ax.c:1304
+msgid "Unterminated format string in printf bytecode"
+msgstr ""
+
+#: gdbserver/linux-low.c:1177 linux-nat.c:1827
+#, possible-c-format
+msgid "Can't detach %s: %s"
+msgstr ""
+
+#: gdbserver/linux-x86-low.c:1316
+msgid "Can't debug 64-bit process with 32-bit GDBserver"
+msgstr ""
+
+#: gdbserver/linux-x86-low.c:1319
+msgid "Can't debug x86-64 process with 32-bit GDBserver"
+msgstr ""
+
 #: gdbserver/thread-db.c:725
 #, possible-c-format
 msgid "libthread-db-search-path component too long, ignored: %s."
 msgstr ""
 
-#: gdbtypes.c:121
+#: gdbtypes.c:120
 #, possible-c-format
 msgid ""
 "Resolution of opaque struct/class/union types (if set before loading "
 "symbols) is %s.\n"
 msgstr ""
 
-#: gdbtypes.c:131
+#: gdbtypes.c:130
 #, possible-c-format
 msgid "Debugging of C++ overloading is %s.\n"
 msgstr ""
 
-#: gdbtypes.c:484
+#: gdbtypes.c:520
 #, possible-c-format
 msgid "Unknown address space specifier: \"%s\""
 msgstr ""
 
-#: gdbtypes.c:1130
+#: gdbtypes.c:1166
 #, possible-c-format
 msgid "Invalid anonymous type %s [in module %s], GCC PR debug/47510 bug?"
 msgstr ""
 
-#: gdbtypes.c:1160
+#: gdbtypes.c:1192
 #, possible-c-format
 msgid "No type named %s."
 msgstr ""
 
-#: gdbtypes.c:1205 objc-lang.c:96
+#: gdbtypes.c:1234 objc-lang.c:96
 #, possible-c-format
 msgid "No struct type named %s."
 msgstr ""
 
-#: gdbtypes.c:1209 gdbtypes.c:1285 objc-lang.c:103
+#: gdbtypes.c:1238 gdbtypes.c:1314 objc-lang.c:103
 #, possible-c-format
 msgid "This context has class, union or enum %s, not a struct."
 msgstr ""
 
-#: gdbtypes.c:1227
+#: gdbtypes.c:1256
 #, possible-c-format
 msgid "No union type named %s."
 msgstr ""
 
 #. If we get here, it's not a union.
-#: gdbtypes.c:1235
+#: gdbtypes.c:1264
 #, possible-c-format
 msgid "This context has class, struct or enum %s, not a union."
 msgstr ""
 
-#: gdbtypes.c:1251
+#: gdbtypes.c:1280
 #, possible-c-format
 msgid "No enum type named %s."
 msgstr ""
 
-#: gdbtypes.c:1255
+#: gdbtypes.c:1284
 #, possible-c-format
 msgid "This context has class, struct or union %s, not an enum."
 msgstr ""
 
-#: gdbtypes.c:1281
+#: gdbtypes.c:1310
 #, possible-c-format
 msgid "No template type named %s."
 msgstr ""
 
-#: gdbtypes.c:1323
+#: gdbtypes.c:1352
 #, possible-c-format
 msgid "Type %s is not a structure or union type."
 msgstr ""
 
-#: gdbtypes.c:1377
+#: gdbtypes.c:1406
 #, possible-c-format
 msgid "Type %s has no component named %s."
 msgstr ""
 
-#: gdbtypes.c:1439
+#: gdbtypes.c:1468
 msgid "stub type has NULL name"
 msgstr ""
 
-#: gdbtypes.c:1725
+#: gdbtypes.c:1760
 #, possible-c-format
 msgid "Internal: Cannot demangle mangled name `%s'."
 msgstr ""
 
-#: gdbtypes.c:2841
+#: gdbtypes.c:2876
 #, possible-c-format
 msgid ") length %d\n"
 msgstr ""
 
-#: gdbtypes.c:2981
+#: gdbtypes.c:3014
 msgid " <same as already seen type>\n"
 msgstr ""
 
-#: gdbtypes.c:3408
+#: gdbtypes.c:3450
 #, possible-c-format
 msgid "Unexpected type field location kind: %d"
 msgstr ""
 
-#: gdbtypes.c:4005
+#: gdbtypes.c:4048
 msgid "Set debugging of C++ overloading."
 msgstr ""
 
-#: gdbtypes.c:4006
+#: gdbtypes.c:4049
 msgid "Show debugging of C++ overloading."
 msgstr ""
 
-#: gdbtypes.c:4007
+#: gdbtypes.c:4050
 msgid "When enabled, ranking of the functions is displayed."
 msgstr ""
 
-#: gdbtypes.c:4016
+#: gdbtypes.c:4059
 msgid ""
 "Set resolution of opaque struct/class/union types (if set before loading "
 "symbols)."
 msgstr ""
 
-#: gdbtypes.c:4018
+#: gdbtypes.c:4061
 msgid ""
 "Show resolution of opaque struct/class/union types (if set before loading "
 "symbols)."
@@ -9183,13 +10135,13 @@ msgstr ""
 
 #. A helper macro that returns the name of a type or "unnamed type" if the type
 #. has no name.
-#: gdbtypes.h:1208
+#: gdbtypes.h:1258
 msgid "<unnamed type>"
 msgstr ""
 
 #. A helper macro that returns the name of an error type.  If the type
 #. has a name, it is used; otherwise, a default is used.
-#: gdbtypes.h:1213
+#: gdbtypes.h:1263
 msgid "<error type>"
 msgstr ""
 
@@ -9411,7 +10363,7 @@ msgstr ""
 msgid "%ld: %s."
 msgstr ""
 
-#: gnu-nat.c:3073 utils.c:1193
+#: gnu-nat.c:3073 utils.c:1028
 #, possible-c-format
 msgid "%s."
 msgstr ""
@@ -9638,36 +10590,50 @@ msgstr ""
 msgid "I'm confused:  virtual function table has bad type"
 msgstr ""
 
-#: gnu-v2-abi.c:375
+#: gnu-v2-abi.c:376
 msgid "Virtual baseclass pointer is not available"
 msgstr ""
 
-#: gnu-v2-abi.c:397
+#: gnu-v2-abi.c:398
 msgid "Baseclass offset not found"
 msgstr ""
 
-#: gnu-v3-abi.c:320
+#: gnu-v3-abi.c:321
 #, possible-c-format
 msgid "can't find linker symbol for virtual table for `%s' value"
 msgstr ""
 
-#: gnu-v3-abi.c:323
+#: gnu-v3-abi.c:324
 #, possible-c-format
 msgid "  found `%s' instead"
 msgstr ""
 
-#: gnu-v3-abi.c:393
+#: gnu-v3-abi.c:394
 msgid "Only classes can have virtual functions."
 msgstr ""
 
-#: gnu-v3-abi.c:443
+#: gnu-v3-abi.c:445
 msgid "Expected a negative vbase offset (old compiler?)"
 msgstr ""
 
-#: gnu-v3-abi.c:447
+#: gnu-v3-abi.c:449
 msgid "Misaligned vbase offset."
 msgstr ""
 
+#: gnu-v3-abi.c:870
+#, possible-c-format
+msgid "vtable for '%s' @ %s (subobject @ %s):\n"
+msgstr ""
+
+#: gnu-v3-abi.c:897 printcmd.c:1800 value.c:2254
+#, possible-c-format
+msgid "<error: %s>"
+msgstr ""
+
+#: gnu-v3-abi.c:942
+msgid "This object does not have a virtual function table\n"
+msgstr ""
+
 #: go32-nat.c:379
 msgid ""
 "You cannot attach to a running program on this platform.\n"
@@ -9684,7 +10650,7 @@ msgstr ""
 msgid "Invalid register no. %d in store_register."
 msgstr ""
 
-#: go32-nat.c:671 go32-nat.c:1000
+#: go32-nat.c:671 go32-nat.c:1024
 msgid "Cannot allocate redirection storage: not enough memory.\n"
 msgstr ""
 
@@ -9701,96 +10667,101 @@ msgstr ""
 msgid "Invalid register %d in go32_set_dr.\n"
 msgstr ""
 
-#: go32-nat.c:892
+#: go32-nat.c:823
+#, possible-c-format
+msgid "Invalid register %d in go32_get_dr.\n"
+msgstr ""
+
+#: go32-nat.c:915
 #, possible-c-format
 msgid "Cannot redirect standard handles for program: %s."
 msgstr ""
 
-#: go32-nat.c:926
+#: go32-nat.c:949
 #, possible-c-format
 msgid "Cannot redirect standard handles for debugger: %s."
 msgstr ""
 
-#: go32-nat.c:1690
+#: go32-nat.c:1714
 #, possible-c-format
 msgid "Invalid LDT entry 0x%03lx."
 msgstr ""
 
-#: go32-nat.c:1728
+#: go32-nat.c:1752
 #, possible-c-format
 msgid "Invalid LDT entry %#lx: outside valid limits [0..%#x]"
 msgstr ""
 
-#: go32-nat.c:1759
+#: go32-nat.c:1783
 #, possible-c-format
 msgid "Invalid GDT entry 0x%03lx: not an integral multiple of 8."
 msgstr ""
 
-#: go32-nat.c:1771
+#: go32-nat.c:1795
 #, possible-c-format
 msgid "Invalid GDT entry %#lx: outside valid limits [0..%#x]"
 msgstr ""
 
-#: go32-nat.c:1801
+#: go32-nat.c:1825
 #, possible-c-format
 msgid "Invalid (negative) IDT entry %ld."
 msgstr ""
 
-#: go32-nat.c:1813
+#: go32-nat.c:1837
 #, possible-c-format
 msgid "Invalid IDT entry %#lx: outside valid limits [0..%#x]"
 msgstr ""
 
-#: go32-nat.c:1972 go32-nat.c:2023
+#: go32-nat.c:1996 go32-nat.c:2047
 #, possible-c-format
 msgid "Entry %ld is outside valid limits [0..1023]."
 msgstr ""
 
-#: go32-nat.c:2051
+#: go32-nat.c:2075
 msgid "linear address"
 msgstr ""
 
-#: go32-nat.c:2082
+#: go32-nat.c:2106
 msgid "Print information specific to DJGPP (aka MS-DOS) debugging."
 msgstr ""
 
-#: go32-nat.c:2086
+#: go32-nat.c:2110
 msgid ""
 "Display information about the target system, including CPU, OS, DPMI, etc."
 msgstr ""
 
-#: go32-nat.c:2089
+#: go32-nat.c:2113
 msgid ""
 "Display entries in the LDT (Local Descriptor Table).\n"
 "Entry number (an expression) as an argument means display only that entry."
 msgstr ""
 
-#: go32-nat.c:2093
+#: go32-nat.c:2117
 msgid ""
 "Display entries in the GDT (Global Descriptor Table).\n"
 "Entry number (an expression) as an argument means display only that entry."
 msgstr ""
 
-#: go32-nat.c:2097
+#: go32-nat.c:2121
 msgid ""
 "Display entries in the IDT (Interrupt Descriptor Table).\n"
 "Entry number (an expression) as an argument means display only that entry."
 msgstr ""
 
-#: go32-nat.c:2101
+#: go32-nat.c:2125
 msgid ""
 "Display entries in the Page Directory.\n"
 "Entry number (an expression) as an argument means display only that entry."
 msgstr ""
 
-#: go32-nat.c:2105
+#: go32-nat.c:2129
 msgid ""
 "Display entries in Page Tables.\n"
 "Entry number (an expression) as an argument means display only entries\n"
 "from the Page Table pointed to by the specified Page Directory entry."
 msgstr ""
 
-#: go32-nat.c:2110
+#: go32-nat.c:2134
 msgid ""
 "Display a Page Table entry for a linear address.\n"
 "The address argument must be a linear address, after adding to\n"
@@ -9802,33 +10773,50 @@ msgid ""
 "the `info dos ldt' command."
 msgstr ""
 
-#: h8300-tdep.c:773 h8300-tdep.c:807
+#: go-exp.y:1395
+#, possible-c-format
+msgid "Unknown function in `unsafe' package: %s"
+msgstr ""
+
+#: go-valprint.c:59
+msgid "Unable to read string address"
+msgstr ""
+
+#: go-valprint.c:63
+msgid "Unable to read string length"
+msgstr ""
+
+#: go-valprint.c:74
+msgid "<invalid length: "
+msgstr ""
+
+#: h8300-tdep.c:772 h8300-tdep.c:806
 msgid "I don't know how this 8 byte value is returned."
 msgstr ""
 
 #. long long, double and long double
 #. are all defined as 4 byte types so
 #. far so this shouldn't happen.
-#: h8300-tdep.c:871
+#: h8300-tdep.c:870
 msgid "I don't know how to return an 8 byte value."
 msgstr ""
 
-#: h8300-tdep.c:956
+#: h8300-tdep.c:955
 #, possible-c-format
 msgid "h8300_register_name: illegal register number %d"
 msgstr ""
 
-#: h8300-tdep.c:974
+#: h8300-tdep.c:973
 #, possible-c-format
 msgid "h8300s_register_name: illegal register number %d"
 msgstr ""
 
-#: h8300-tdep.c:992
+#: h8300-tdep.c:991
 #, possible-c-format
 msgid "h8300sx_register_name: illegal register number %d"
 msgstr ""
 
-#: h8300-tdep.c:1128
+#: h8300-tdep.c:1127
 #, possible-c-format
 msgid "h8300_register_type: illegal register number %d"
 msgstr ""
@@ -9872,27 +10860,27 @@ msgstr ""
 msgid "Unable to find restore of %%rp before bv (%%rp)."
 msgstr ""
 
-#: hppa-hpux-tdep.c:870 hppa-hpux-tdep.c:968
+#: hppa-hpux-tdep.c:870 hppa-hpux-tdep.c:967
 msgid "Internal error creating objfile private data."
 msgstr ""
 
-#: hppa-hpux-tdep.c:1121
+#: hppa-hpux-tdep.c:1117
 msgid ""
 "Cannot find suitable address to place dummy breakpoint; nested calls may "
 "fail."
 msgstr ""
 
-#: hppa-hpux-tdep.c:1225
+#: hppa-hpux-tdep.c:1221
 msgid ""
 "Cannot call external function not referenced by application (no import "
 "stub).\n"
 msgstr ""
 
-#: hppa-hpux-tdep.c:1236 hppa-hpux-tdep.c:1262
+#: hppa-hpux-tdep.c:1232 hppa-hpux-tdep.c:1258
 msgid "Cannot make interspace call from here."
 msgstr ""
 
-#: hppa-hpux-tdep.c:1371
+#: hppa-hpux-tdep.c:1367
 msgid "Register set contents too small"
 msgstr ""
 
@@ -9901,19 +10889,19 @@ msgstr ""
 msgid "Invalid register number %d."
 msgstr ""
 
-#: hppa-linux-nat.c:234 i386-linux-nat.c:165 ia64-linux-nat.c:708
-#: inf-ptrace.c:691 m68klinux-nat.c:121
+#: hppa-linux-nat.c:234 i386-linux-nat.c:157 ia64-linux-nat.c:752
+#: inf-ptrace.c:749 m68klinux-nat.c:129
 #, possible-c-format
 msgid "Couldn't read register %s (#%d): %s."
 msgstr ""
 
-#: hppa-linux-nat.c:262 i386-linux-nat.c:194 ia64-linux-nat.c:767
-#: inf-ptrace.c:750 m68klinux-nat.c:179
+#: hppa-linux-nat.c:262 i386-linux-nat.c:186 ia64-linux-nat.c:811
+#: inf-ptrace.c:808 m68klinux-nat.c:188
 #, possible-c-format
 msgid "Couldn't write register %s (#%d): %s."
 msgstr ""
 
-#: hppa-linux-tdep.c:49 hppa-tdep.c:673
+#: hppa-linux-tdep.c:49 hppa-tdep.c:672
 #, possible-c-format
 msgid "Unmapped DWARF DBX Register #%d encountered."
 msgstr ""
@@ -9922,40 +10910,40 @@ msgstr ""
 msgid "Internal error reading unwind information."
 msgstr ""
 
-#: hppa-tdep.c:1912
+#: hppa-tdep.c:1906
 #, possible-c-format
 msgid "Cannot read instruction at %s."
 msgstr ""
 
-#: hppa-tdep.c:2410
+#: hppa-tdep.c:2404
 msgid "Requesting registers from null frame."
 msgstr ""
 
-#: hppa-tdep.c:2939
+#: hppa-tdep.c:2933
 #, possible-c-format
 msgid "Cannot resolve PLT stub at %s."
 msgstr ""
 
-#: hppa-tdep.c:3046
+#: hppa-tdep.c:3040
 #, possible-c-format
 msgid "Unsupported address size: %d"
 msgstr ""
 
-#: hppa-tdep.c:3155
+#: hppa-tdep.c:3149
 msgid "Print unwind table entry at given address."
 msgstr ""
 
 #. Debug this files internals.
-#: hppa-tdep.c:3159
+#: hppa-tdep.c:3153
 msgid ""
 "Set whether hppa target specific debugging information should be displayed."
 msgstr ""
 
-#: hppa-tdep.c:3161
+#: hppa-tdep.c:3155
 msgid "Show whether hppa target specific debugging information is displayed."
 msgstr ""
 
-#: hppa-tdep.c:3162
+#: hppa-tdep.c:3156
 msgid ""
 "This flag controls whether hppa target specific debugging information is\n"
 "displayed.  This information is particularly useful for debugging frame\n"
@@ -9966,70 +10954,58 @@ msgstr ""
 msgid "Couldn't write XMM registers"
 msgstr ""
 
-#: i386bsd-nat.c:273
-msgid "Couldn't get debug registers"
-msgstr ""
-
-#: i386bsd-nat.c:284
-msgid "Couldn't write debug registers"
-msgstr ""
-
-#: i386bsd-nat.c:316
-msgid "Couldn't read debug registers"
-msgstr ""
-
-#: i386bsd-nat.c:363
+#: i386bsd-nat.c:376
 #, possible-c-format
 msgid ""
 "offsetof (struct sigcontext, sc_pc) yields %d instead of %d.\n"
 "Please report this to <bug-gdb at gnu.org>."
 msgstr ""
 
-#: i386bsd-nat.c:376
+#: i386bsd-nat.c:389
 #, possible-c-format
 msgid ""
 "offsetof (struct sigcontext, sc_sp) yields %d instead of %d.\n"
 "Please report this to <bug-gdb at gnu.org>."
 msgstr ""
 
-#: i386bsd-nat.c:389
+#: i386bsd-nat.c:402
 #, possible-c-format
 msgid ""
 "offsetof (struct sigcontext, sc_fp) yields %d instead of %d.\n"
 "Please report this to <bug-gdb at gnu.org>."
 msgstr ""
 
-#: i386-darwin-nat.c:71 i386-darwin-nat.c:115
+#: i386-darwin-nat.c:72 i386-darwin-nat.c:116
 #, possible-c-format
-msgid "Error calling thread_get_state for GP registers for thread 0x%ulx"
+msgid "Error calling thread_get_state for GP registers for thread 0x%lx\n"
 msgstr ""
 
-#: i386-darwin-nat.c:91 i386-darwin-nat.c:140
+#: i386-darwin-nat.c:92 i386-darwin-nat.c:141
 #, possible-c-format
-msgid "Error calling thread_get_state for float registers for thread 0x%ulx"
+msgid "Error calling thread_get_state for float registers for thread 0x%lx\n"
 msgstr ""
 
-#: i386-darwin-nat.c:152
+#: i386-darwin-nat.c:153
 #, possible-c-format
 msgid "unknown register %d"
 msgstr ""
 
-#: i386-darwin-nat.c:303 i386-darwin-nat.c:369
+#: i386-darwin-nat.c:287 i386-darwin-nat.c:353
 #, possible-c-format
 msgid "Error reading debug registers thread 0x%x via thread_get_state\n"
 msgstr ""
 
-#: i386-darwin-nat.c:342
+#: i386-darwin-nat.c:326
 #, possible-c-format
 msgid "Error writing debug registers thread 0x%x via thread_get_state\n"
 msgstr ""
 
-#: i386-darwin-nat.c:543
+#: i386-darwin-nat.c:532
 #, possible-c-format
 msgid "darwin_set_sstep: error %x, thread=%x\n"
 msgstr ""
 
-#: i386-darwin-nat.c:583
+#: i386-darwin-nat.c:572
 #, possible-c-format
 msgid "darwin_set_sstep: unknown flavour: %d"
 msgstr ""
@@ -10073,60 +11049,60 @@ msgstr ""
 msgid "... also writing this register!  Suspicious..."
 msgstr ""
 
-#: i386-linux-nat.c:386 i386-linux-nat.c:409
+#: i386-linux-nat.c:378 i386-linux-nat.c:401
 msgid "Couldn't read extended state status"
 msgstr ""
 
-#: i386-linux-nat.c:442 i386-linux-nat.c:469
+#: i386-linux-nat.c:434 i386-linux-nat.c:461
 msgid "Couldn't read floating-point and SSE registers"
 msgstr ""
 
-#: i386-linux-nat.c:475
+#: i386-linux-nat.c:467
 msgid "Couldn't write floating-point and SSE registers"
 msgstr ""
 
-#: i386-linux-nat.c:578 m32r-linux-nat.c:217 m68klinux-nat.c:451
+#: i386-linux-nat.c:570 m32r-linux-nat.c:217 m68klinux-nat.c:460
 #, possible-c-format
 msgid "Got request for bad register number %d."
 msgstr ""
 
-#: i386-linux-nat.c:647 m32r-linux-nat.c:242 m68klinux-nat.c:499
+#: i386-linux-nat.c:639 m32r-linux-nat.c:242 m68klinux-nat.c:508
 #, possible-c-format
 msgid "Got request to store bad register number %d."
 msgstr ""
 
-#: i386-linux-tdep.c:605
+#: i386-linux-tdep.c:623
 msgid "Couldn't read `xcr0' bytes from `.reg-xstate' section in core file."
 msgstr ""
 
-#: i386-nat.c:311
+#: i386-nat.c:373
 msgid "The i386 doesn't support data-read watchpoints.\n"
 msgstr ""
 
-#: i386-nat.c:323
+#: i386-nat.c:385
 #, possible-c-format
 msgid "Invalid hardware breakpoint type %d in i386_length_and_rw_bits.\n"
 msgstr ""
 
-#: i386-nat.c:341
+#: i386-nat.c:403
 #, possible-c-format
 msgid "Invalid hardware breakpoint length %d in i386_length_and_rw_bits.\n"
 msgstr ""
 
-#: i386-nat.c:491
+#: i386-nat.c:553
 #, possible-c-format
 msgid "Invalid value %d of operation in i386_handle_nonaligned_watchpoint.\n"
 msgstr ""
 
-#: i386-nat.c:755
+#: i386-nat.c:842
 msgid "Set whether to show variables that mirror the x86 debug registers."
 msgstr ""
 
-#: i386-nat.c:756
+#: i386-nat.c:843
 msgid "Show whether to show variables that mirror the x86 debug registers."
 msgstr ""
 
-#: i386-nat.c:757 mips-linux-nat.c:1056
+#: i386-nat.c:844 mips-linux-nat.c:1146
 msgid ""
 "Use \"on\" to enable, \"off\" to disable.\n"
 "If enabled, the debug registers values are shown when GDB inserts\n"
@@ -10134,43 +11110,43 @@ msgid ""
 "triggers a breakpoint or watchpoint."
 msgstr ""
 
-#: i386-tdep.c:2442
+#: i386-tdep.c:2469
 msgid "Cannot find floating-point return value."
 msgstr ""
 
-#: i386-tdep.c:2473 m68k-tdep.c:311
+#: i386-tdep.c:2500 m68k-tdep.c:311
 #, possible-c-format
 msgid "Cannot extract return value of %d bytes long."
 msgstr ""
 
-#: i386-tdep.c:2495
+#: i386-tdep.c:2522
 msgid "Cannot set floating-point return value."
 msgstr ""
 
-#: i386-tdep.c:2538 m68k-tdep.c:353
+#: i386-tdep.c:2565 m68k-tdep.c:353
 #, possible-c-format
 msgid "Cannot store return value of %d bytes long."
 msgstr ""
 
-#: i386-tdep.c:3593 i386-tdep.c:3634 i386-tdep.c:3670 i386-tdep.c:3743
-#: i386-tdep.c:4012 i386-tdep.c:4110 i386-tdep.c:5813 i386-tdep.c:6289
-#: i386-tdep.c:6562
+#: i386-tdep.c:3947 i386-tdep.c:3988 i386-tdep.c:4024 i386-tdep.c:4097
+#: i386-tdep.c:4366 i386-tdep.c:4464 i386-tdep.c:6167 i386-tdep.c:6643
+#: i386-tdep.c:6916
 #, possible-c-format
 msgid "Process record: error reading memory at addr %s len = 1.\n"
 msgstr ""
 
-#: i386-tdep.c:3655 i386-tdep.c:3682
+#: i386-tdep.c:4009 i386-tdep.c:4036
 #, possible-c-format
 msgid "Process record: error reading memory at addr %s len = 4.\n"
 msgstr ""
 
-#: i386-tdep.c:3728 i386-tdep.c:3755
+#: i386-tdep.c:4082 i386-tdep.c:4109
 #, possible-c-format
 msgid "Process record: error reading memory at addr %s len = 2.\n"
 msgstr ""
 
-#: i386-tdep.c:3856 i386-tdep.c:4761 i386-tdep.c:5452 i386-tdep.c:6019
-#: i386-tdep.c:6076
+#: i386-tdep.c:4210 i386-tdep.c:5115 i386-tdep.c:5806 i386-tdep.c:6373
+#: i386-tdep.c:6430
 #, possible-c-format
 msgid ""
 "Process record ignores the memory change of instruction at address %s\n"
@@ -10178,130 +11154,136 @@ msgid ""
 "Do you want to stop the program?"
 msgstr ""
 
-#: i386-tdep.c:4782
+#: i386-tdep.c:5136
 #, possible-c-format
 msgid "Process record: error reading memory at addr 0x%s len = 8.\n"
 msgstr ""
 
-#: i386-tdep.c:4795
+#: i386-tdep.c:5149
 #, possible-c-format
 msgid "Process record: error reading memory at addr 0x%s len = 4.\n"
 msgstr ""
 
-#: i386-tdep.c:4808
+#: i386-tdep.c:5162
 #, possible-c-format
 msgid "Process record: error reading memory at addr 0x%s len = 2.\n"
 msgstr ""
 
-#: i386-tdep.c:5787
+#: i386-tdep.c:6141
 #, possible-c-format
 msgid "Process record: error reading memory at addr 0x%s len = 1.\n"
 msgstr ""
 
 #. XXX
 #. int3
-#: i386-tdep.c:5799
+#: i386-tdep.c:6153
 msgid "Process record does not support instruction int3.\n"
 msgstr ""
 
-#: i386-tdep.c:5822
+#: i386-tdep.c:6176
 #, possible-c-format
 msgid "Process record does not support instruction int 0x%02x.\n"
 msgstr ""
 
 #. XXX
 #. into
-#: i386-tdep.c:5836
+#: i386-tdep.c:6190
 msgid "Process record does not support instruction into.\n"
 msgstr ""
 
 #. bound
-#: i386-tdep.c:5847
+#: i386-tdep.c:6201
 msgid "Process record does not support instruction bound.\n"
 msgstr ""
 
 #. wrmsr
-#: i386-tdep.c:5883
+#: i386-tdep.c:6237
 msgid "Process record does not support instruction wrmsr.\n"
 msgstr ""
 
 #. rdmsr
-#: i386-tdep.c:5890
+#: i386-tdep.c:6244
 msgid "Process record does not support instruction rdmsr.\n"
 msgstr ""
 
-#: i386-tdep.c:5911
+#: i386-tdep.c:6265
 msgid "Process record does not support instruction sysenter.\n"
 msgstr ""
 
 #. sysexit
-#: i386-tdep.c:5923
+#: i386-tdep.c:6277
 msgid "Process record does not support instruction sysexit.\n"
 msgstr ""
 
-#: i386-tdep.c:5934
+#: i386-tdep.c:6288
 msgid "Process record does not support instruction syscall.\n"
 msgstr ""
 
 #. sysret
-#: i386-tdep.c:5946
+#: i386-tdep.c:6300
 msgid "Process record does not support instruction sysret.\n"
 msgstr ""
 
 #. hlt
-#: i386-tdep.c:5960
+#: i386-tdep.c:6314
 msgid "Process record does not support instruction hlt.\n"
 msgstr ""
 
-#: i386-tdep.c:7096
+#: i386-tdep.c:7450
 #, possible-c-format
 msgid "Process record does not support instruction 0x%02x at address %s.\n"
 msgstr ""
 
-#: i386-tdep.c:7164
+#: i386-tdep.c:7518
 #, possible-c-format
 msgid ""
 "; instruction is only %d bytes long, need at least %d bytes for the jump"
 msgstr ""
 
-#: i386-tdep.c:7560
+#: i386-tdep.c:7927
 msgid "Set the disassembly flavor."
 msgstr ""
 
-#: i386-tdep.c:7561
+#: i386-tdep.c:7928
 msgid "Show the disassembly flavor."
 msgstr ""
 
-#: i386-tdep.c:7562
+#: i386-tdep.c:7929
 msgid ""
 "The valid values are \"att\" and \"intel\", and the default value is \"att\"."
 msgstr ""
 
-#: i386-tdep.c:7571
+#: i386-tdep.c:7938
 msgid "Set the convention for returning small structs."
 msgstr ""
 
-#: i386-tdep.c:7572
+#: i386-tdep.c:7939
 msgid "Show the convention for returning small structs."
 msgstr ""
 
-#: i386-tdep.c:7573
+#: i386-tdep.c:7940
 msgid ""
 "Valid values are \"default\", \"pcc\" and \"reg\", and the default value\n"
 "is \"default\"."
 msgstr ""
 
-#: i387-tdep.c:322 m68k-tdep.c:216
+#: i387-tdep.c:126 i387-tdep.c:164 i387-tdep.c:312 i387-tdep.c:322
+#: i387-tdep.c:324 i387-tdep.c:326 i387-tdep.c:328 i387-tdep.c:330
+#: i387-tdep.c:334 tui/tui-stack.c:361 valprint.c:309
+msgid "<unavailable>"
+msgstr ""
+
+#: i387-tdep.c:374 m68k-tdep.c:216
 msgid ""
 "Cannot convert floating-point register value to non-floating-point type."
 msgstr ""
 
-#: i387-tdep.c:353 m68k-tdep.c:248
+#: i387-tdep.c:405 m68k-tdep.c:248
 msgid ""
 "Cannot convert non-floating-point type to floating-point register value."
 msgstr ""
 
-#: i387-tdep.c:1065 i387-tdep.c:1110
+#: i387-tdep.c:1105 i387-tdep.c:1150
 msgid "invalid i387 regclass"
 msgstr ""
 
@@ -10320,33 +11302,42 @@ msgstr ""
 msgid "failed to write register value for %s."
 msgstr ""
 
-#: ia64-tdep.c:535
+#: ia64-libunwind-tdep.c:223
+msgid "Can't get libunwind sp register."
+msgstr ""
+
+#: ia64-libunwind-tdep.c:510 ia64-libunwind-tdep.c:513
+#, possible-c-format
+msgid "[GDB failed to load %s: %s]\n"
+msgstr ""
+
+#: ia64-tdep.c:534
 msgid ""
 "Can't fetch instructions for slot numbers greater than 2.\n"
 "Using slot 0 instead"
 msgstr ""
 
-#: ia64-tdep.c:651 ia64-tdep.c:838
+#: ia64-tdep.c:650 ia64-tdep.c:837
 msgid "Can't insert breakpoint for slot numbers greater than 2."
 msgstr ""
 
-#: ia64-tdep.c:684 ia64-tdep.c:866
+#: ia64-tdep.c:683 ia64-tdep.c:865
 msgid "Can't insert breakpoint for non-existing slot X"
 msgstr ""
 
-#: ia64-tdep.c:722
+#: ia64-tdep.c:721
 #, possible-c-format
 msgid "Address %s already contains a breakpoint."
 msgstr ""
 
-#: ia64-tdep.c:775
+#: ia64-tdep.c:774
 #, possible-c-format
 msgid ""
 "Cannot remove breakpoint at address %s from non-existing X-type slot, memory "
 "has changed underneath"
 msgstr ""
 
-#: ia64-tdep.c:796
+#: ia64-tdep.c:795
 #, possible-c-format
 msgid ""
 "Cannot remove breakpoint at address %s, no break instruction at such address."
@@ -10385,11 +11376,11 @@ msgstr ""
 msgid "This target does not support function calls."
 msgstr ""
 
-#: infcall.c:675
+#: infcall.c:674
 msgid "Too few arguments in function call."
 msgstr ""
 
-#: infcall.c:852
+#: infcall.c:866
 #, possible-c-format
 msgid ""
 "%s\n"
@@ -10402,7 +11393,7 @@ msgstr ""
 #. We could discard the dummy frame here given that the program exited,
 #. but it will get garbage collected the next time the program is
 #. run anyway.
-#: infcall.c:880
+#: infcall.c:894
 #, possible-c-format
 msgid ""
 "The program being debugged exited while in a function called from GDB.\n"
@@ -10410,7 +11401,7 @@ msgid ""
 "(%s) will be abandoned."
 msgstr ""
 
-#: infcall.c:900
+#: infcall.c:914
 #, possible-c-format
 msgid ""
 "The program received a signal in another thread while\n"
@@ -10420,7 +11411,7 @@ msgid ""
 "When the function is done executing, GDB will silently stop."
 msgstr ""
 
-#: infcall.c:908
+#: infcall.c:922
 #, possible-c-format
 msgid ""
 "The program stopped in another thread while making a function call from "
@@ -10432,7 +11423,7 @@ msgstr ""
 
 #. FIXME: Insert a bunch of wrap_here; name can be very
 #. long if it's a C++ name with arguments and stuff.
-#: infcall.c:941
+#: infcall.c:955
 #, possible-c-format
 msgid ""
 "The program being debugged was signaled while in a function called from "
@@ -10445,7 +11436,7 @@ msgstr ""
 
 #. FIXME: Insert a bunch of wrap_here; name can be very
 #. long if it's a C++ name with arguments and stuff.
-#: infcall.c:959
+#: infcall.c:973
 #, possible-c-format
 msgid ""
 "The program being debugged was signaled while in a function called from "
@@ -10457,7 +11448,7 @@ msgid ""
 "When the function is done executing, GDB will silently stop."
 msgstr ""
 
-#: infcall.c:980
+#: infcall.c:994
 #, possible-c-format
 msgid ""
 "The program being debugged entered a std::terminate call, most likely\n"
@@ -10477,7 +11468,7 @@ msgstr ""
 #. someday this will be implemented (it would not be easy).
 #. FIXME: Insert a bunch of wrap_here; name can be very long if it's
 #. a C++ name with arguments and stuff.
-#: infcall.c:1007
+#: infcall.c:1021
 #, possible-c-format
 msgid ""
 "The program being debugged stopped while in a function called from GDB.\n"
@@ -10487,19 +11478,19 @@ msgid ""
 msgstr ""
 
 #. The above code errors out, so ...
-#: infcall.c:1016
+#: infcall.c:1030
 msgid "... should not be here"
 msgstr ""
 
-#: infcall.c:1079
+#: infcall.c:1093
 msgid "Set coercion of floats to doubles when calling functions."
 msgstr ""
 
-#: infcall.c:1080
+#: infcall.c:1094
 msgid "Show coercion of floats to doubles when calling functions"
 msgstr ""
 
-#: infcall.c:1081
+#: infcall.c:1095
 msgid ""
 "Variables of type float should generally be converted to doubles before\n"
 "calling an unprototyped function, and left alone when calling a prototyped\n"
@@ -10510,15 +11501,15 @@ msgid ""
 "The default is to perform the conversion.\n"
 msgstr ""
 
-#: infcall.c:1094
+#: infcall.c:1108
 msgid "Set unwinding of stack if a signal is received while in a call dummy."
 msgstr ""
 
-#: infcall.c:1095
+#: infcall.c:1109
 msgid "Show unwinding of stack if a signal is received while in a call dummy."
 msgstr ""
 
-#: infcall.c:1096
+#: infcall.c:1110
 msgid ""
 "The unwindonsignal lets the user determine what gdb should do if a signal\n"
 "is received while in a function called from gdb (call dummy).  If set, gdb\n"
@@ -10527,16 +11518,16 @@ msgid ""
 "The default is to stop in the frame where the signal was received."
 msgstr ""
 
-#: infcall.c:1106
+#: infcall.c:1120
 msgid "Set unwinding of stack if std::terminate is called while in call dummy."
 msgstr ""
 
-#: infcall.c:1107
+#: infcall.c:1121
 msgid ""
 "Show unwinding of stack if std::terminate() is called while in a call dummy."
 msgstr ""
 
-#: infcall.c:1109
+#: infcall.c:1123
 msgid ""
 "The unwind on terminating exception flag lets the user determine\n"
 "what gdb should do if a std::terminate() call is made from the\n"
@@ -10546,11 +11537,11 @@ msgid ""
 "The default is to unwind the frame."
 msgstr ""
 
-#: inf-child.c:79 windows-nat.c:1907
+#: inf-child.c:113 windows-nat.c:1929
 msgid "Use the \"run\" command to start a Unix child process."
 msgstr ""
 
-#: infcmd.c:128 infcmd.c:2287 infcmd.c:2675 linux-fork.c:658 remote-sim.c:888
+#: infcmd.c:128 infcmd.c:2317 infcmd.c:2705 linux-fork.c:658 remote-sim.c:891
 msgid "The program is not being run."
 msgstr ""
 
@@ -10559,274 +11550,274 @@ msgstr ""
 msgid "Terminal for future runs of program being debugged is \"%s\".\n"
 msgstr ""
 
-#: infcmd.c:343
+#: infcmd.c:368
 msgid "can't handle command-line argument containing whitespace"
 msgstr ""
 
-#: infcmd.c:442
+#: infcmd.c:467
 msgid ""
 "platform-specific solib_create_inferior_hook did not load initial shared "
 "libraries."
 msgstr ""
 
-#: infcmd.c:488
+#: infcmd.c:513
 msgid ""
 "The program being debugged has been started already.\n"
 "Start it from the beginning? "
 msgstr ""
 
-#: infcmd.c:490
+#: infcmd.c:515
 msgid "Program not restarted."
 msgstr ""
 
-#: infcmd.c:535
+#: infcmd.c:560
 msgid "The target does not support running in non-stop mode."
 msgstr ""
 
-#: infcmd.c:557 infcmd.c:730 infcmd.c:873 infcmd.c:1113 infcmd.c:1217
-#: infcmd.c:1366 infcmd.c:1402 infcmd.c:1699 infcmd.c:2519
+#: infcmd.c:582 infcmd.c:755 infcmd.c:898 infcmd.c:1138 infcmd.c:1242
+#: infcmd.c:1391 infcmd.c:1427 infcmd.c:1729 infcmd.c:2549
 msgid "Asynchronous execution not supported on this target."
 msgstr ""
 
-#: infcmd.c:640
+#: infcmd.c:665
 msgid "No symbol table loaded.  Use the \"file\" command."
 msgstr ""
 
-#: infcmd.c:672
+#: infcmd.c:697
 msgid "Cannot execute this command without a live selected thread."
 msgstr ""
 
-#: infcmd.c:683
+#: infcmd.c:708
 msgid "Cannot execute this command while looking at trace frames."
 msgstr ""
 
-#: infcmd.c:752
+#: infcmd.c:777
 msgid "`-a' is meaningless in all-stop mode."
 msgstr ""
 
-#: infcmd.c:755
+#: infcmd.c:780
 msgid "Can't resume all threads and specify proceed count simultaneously."
 msgstr ""
 
-#: infcmd.c:801
+#: infcmd.c:826
 msgid "Continuing.\n"
 msgstr ""
 
-#: infcmd.c:1044
+#: infcmd.c:1069
 msgid "Cannot find bounds of current function"
 msgstr ""
 
-#: infcmd.c:1047
+#: infcmd.c:1072
 #, possible-c-format
 msgid ""
 "Single stepping until exit from function %s,\n"
 "which has no line number information.\n"
 msgstr ""
 
-#: infcmd.c:1116
+#: infcmd.c:1141
 msgid "starting address"
 msgstr ""
 
-#: infcmd.c:1121
+#: infcmd.c:1146
 msgid "Unreasonable jump request"
 msgstr ""
 
-#: infcmd.c:1128
+#: infcmd.c:1153
 msgid "No source file has been specified."
 msgstr ""
 
-#: infcmd.c:1137
+#: infcmd.c:1162
 #, possible-c-format
 msgid "Line %d is not in `%s'.  Jump anyway? "
 msgstr ""
 
-#: infcmd.c:1151
+#: infcmd.c:1176
 msgid "WARNING!!!  Destination is in unmapped overlay!  Jump anyway? "
 msgstr ""
 
-#: infcmd.c:1164
+#: infcmd.c:1189
 msgid "Continuing at "
 msgstr ""
 
-#: infcmd.c:1187
+#: infcmd.c:1212
 msgid "Usage: go <location>\n"
 msgstr ""
 
-#: infcmd.c:1228
+#: infcmd.c:1253
 msgid "signal number"
 msgstr ""
 
-#: infcmd.c:1249
+#: infcmd.c:1274
 msgid "Continuing with no signal.\n"
 msgstr ""
 
-#: infcmd.c:1251
+#: infcmd.c:1276
 #, possible-c-format
 msgid "Continuing with signal %s.\n"
 msgstr ""
 
-#: infcmd.c:1313
+#: infcmd.c:1338
 msgid "Execution is not within a known function."
 msgstr ""
 
-#: infcmd.c:1393
+#: infcmd.c:1418
 msgid "a location"
 msgstr ""
 
-#: infcmd.c:1546
+#: infcmd.c:1571
 msgid "finish_command: function has no target type"
 msgstr ""
 
-#: infcmd.c:1595
+#: infcmd.c:1622
 msgid "Finish: couldn't find function."
 msgstr ""
 
-#: infcmd.c:1710
+#: infcmd.c:1740
 msgid "The \"finish\" command does not take any arguments."
 msgstr ""
 
 #. Finishing from an inline frame is completely different.  We don't
 #. try to show the "return value" - no way to locate it.  So we do
 #. not need a completion.
-#: infcmd.c:1712 infcmd.c:1721
+#: infcmd.c:1742 infcmd.c:1751
 msgid "No selected frame."
 msgstr ""
 
-#: infcmd.c:1714
+#: infcmd.c:1744
 msgid "\"finish\" not meaningful in the outermost frame."
 msgstr ""
 
-#: infcmd.c:1742 infcmd.c:1761
+#: infcmd.c:1772 infcmd.c:1791
 msgid "Run till exit from "
 msgstr ""
 
-#: infcmd.c:1759
+#: infcmd.c:1789
 msgid "Run back to call of "
 msgstr ""
 
-#: infcmd.c:1783
+#: infcmd.c:1813
 msgid "The program being debugged is not being run.\n"
 msgstr ""
 
-#: infcmd.c:1799 infrun.c:6500
+#: infcmd.c:1829 infrun.c:6549
 msgid "Selected thread is running."
 msgstr ""
 
-#: infcmd.c:1806
+#: infcmd.c:1836
 #, possible-c-format
 msgid "Program stopped at %s.\n"
 msgstr ""
 
-#: infcmd.c:1809
+#: infcmd.c:1839
 msgid "It stopped after being stepped.\n"
 msgstr ""
 
-#: infcmd.c:1818
+#: infcmd.c:1848
 msgid "It stopped at a breakpoint that has since been deleted.\n"
 msgstr ""
 
-#: infcmd.c:1822
+#: infcmd.c:1852
 #, possible-c-format
 msgid "It stopped at breakpoint %d.\n"
 msgstr ""
 
-#: infcmd.c:1828
+#: infcmd.c:1858
 #, possible-c-format
 msgid "It stopped with signal %s, %s.\n"
 msgstr ""
 
-#: infcmd.c:1835
+#: infcmd.c:1865
 msgid "Type \"info stack\" or \"info registers\" for more information.\n"
 msgstr ""
 
-#: infcmd.c:1880
+#: infcmd.c:1910
 msgid "environment variable and value"
 msgstr ""
 
-#: infcmd.c:1904
+#: infcmd.c:1934
 msgid "environment variable to set"
 msgstr ""
 
-#: infcmd.c:1926
+#: infcmd.c:1956
 #, possible-c-format
 msgid "Setting environment variable \"%s\" to null value.\n"
 msgstr ""
 
 #. If there is no argument, delete all environment variables.
 #. Ask for confirmation if reading from the terminal.
-#: infcmd.c:1943
+#: infcmd.c:1973
 msgid "Delete all environment variables? "
 msgstr ""
 
-#: infcmd.c:2121 infcmd.c:2272 infcmd.c:2796
+#: infcmd.c:2151 infcmd.c:2302 infcmd.c:2826
 msgid "The program has no registers now."
 msgstr ""
 
-#: infcmd.c:2149
+#: infcmd.c:2179
 msgid "Missing register name"
 msgstr ""
 
 #. Nothing matched.
-#: infcmd.c:2223
+#: infcmd.c:2253
 #, possible-c-format
 msgid "Invalid register `%.*s'"
 msgstr ""
 
-#: infcmd.c:2288
+#: infcmd.c:2318
 msgid "Kill the program being debugged? "
 msgstr ""
 
-#: infcmd.c:2302
+#: infcmd.c:2332
 #, possible-c-format
 msgid "In %s,\n"
 msgstr ""
 
-#: infcmd.c:2499 target.c:2522
+#: infcmd.c:2529 target.c:2547
 msgid "A program is being debugged already.  Kill it? "
 msgstr ""
 
-#: infcmd.c:2502
+#: infcmd.c:2532
 msgid "Not killed."
 msgstr ""
 
-#: infcmd.c:2510
+#: infcmd.c:2540
 msgid "Cannot attach to this target in non-stop mode"
 msgstr ""
 
-#: infcmd.c:2756
+#: infcmd.c:2786
 msgid "-a is meaningless in all-stop mode."
 msgstr ""
 
-#: infcmd.c:2804
+#: infcmd.c:2834
 msgid "\"unset\" must be followed by the name of an unset subcommand.\n"
 msgstr ""
 
-#: infcmd.c:2816
+#: infcmd.c:2924
 msgid "Set terminal for future runs of program being debugged."
 msgstr ""
 
-#: infcmd.c:2817
+#: infcmd.c:2925
 msgid "Show terminal for future runs of program being debugged."
 msgstr ""
 
-#: infcmd.c:2818
+#: infcmd.c:2926
 msgid "Usage: set inferior-tty /dev/pts/1"
 msgstr ""
 
-#: infcmd.c:2826
+#: infcmd.c:2934
 msgid "Set argument list to give program being debugged when it is started."
 msgstr ""
 
-#: infcmd.c:2827
+#: infcmd.c:2935
 msgid "Show argument list to give program being debugged when it is started."
 msgstr ""
 
-#: infcmd.c:2828
+#: infcmd.c:2936
 msgid ""
 "Follow this command with any number of args, to be passed to the program."
 msgstr ""
 
-#: infcmd.c:2834
+#: infcmd.c:2942
 msgid ""
 "The environment to give the program, or one variable's value.\n"
 "With an argument VAR, prints the value of environment variable VAR to\n"
@@ -10834,17 +11825,17 @@ msgid ""
 "environment to be given to the program."
 msgstr ""
 
-#: infcmd.c:2842
+#: infcmd.c:2950
 msgid "Complement to certain \"set\" commands."
 msgstr ""
 
-#: infcmd.c:2845
+#: infcmd.c:2953
 msgid ""
 "Cancel environment variable VAR for the program.\n"
 "This does not affect the program until the next \"run\" command."
 msgstr ""
 
-#: infcmd.c:2851
+#: infcmd.c:2959
 msgid ""
 "Set environment variable value to give the program.\n"
 "Arguments are VAR VALUE where VAR is variable name and VALUE is value.\n"
@@ -10852,7 +11843,7 @@ msgid ""
 "This does not affect the program until the next \"run\" command."
 msgstr ""
 
-#: infcmd.c:2859
+#: infcmd.c:2967
 msgid ""
 "Add directory DIR(s) to beginning of search path for object files.\n"
 "$cwd in the path means the current working directory.\n"
@@ -10861,7 +11852,7 @@ msgid ""
 "fully linked executable files and separately compiled object files as needed."
 msgstr ""
 
-#: infcmd.c:2868
+#: infcmd.c:2976
 msgid ""
 "Current search path for finding object files.\n"
 "$cwd in the path means the current working directory.\n"
@@ -10870,11 +11861,11 @@ msgid ""
 "fully linked executable files and separately compiled object files as needed."
 msgstr ""
 
-#: infcmd.c:2879
+#: infcmd.c:2987
 msgid "Kill execution of program being debugged."
 msgstr ""
 
-#: infcmd.c:2882
+#: infcmd.c:2990
 msgid ""
 "Attach to a process or file outside of GDB.\n"
 "This command attaches to another target, of the same type as your last\n"
@@ -10889,45 +11880,45 @@ msgid ""
 "to specify the program, and to load its symbol table."
 msgstr ""
 
-#: infcmd.c:2895
+#: infcmd.c:3003
 msgid ""
 "Detach a process or file previously attached.\n"
 "If a process, it is no longer traced, and it continues its execution.  If\n"
 "you were debugging a file, the file is closed and gdb no longer accesses it."
 msgstr ""
 
-#: infcmd.c:2901
+#: infcmd.c:3009
 msgid ""
 "Disconnect from a target.\n"
 "The target will wait for another debugger to connect.  Not available for\n"
 "all targets."
 msgstr ""
 
-#: infcmd.c:2906
+#: infcmd.c:3014
 msgid ""
 "Continue program giving it signal specified by the argument.\n"
 "An argument of \"0\" means continue program without giving it a signal."
 msgstr ""
 
-#: infcmd.c:2910
+#: infcmd.c:3018
 msgid ""
 "Step one instruction exactly.\n"
 "Argument N means do this N times (or till program stops for another reason)."
 msgstr ""
 
-#: infcmd.c:2916
+#: infcmd.c:3024
 msgid ""
 "Step one instruction, but proceed through subroutine calls.\n"
 "Argument N means do this N times (or till program stops for another reason)."
 msgstr ""
 
-#: infcmd.c:2922
+#: infcmd.c:3030
 msgid ""
 "Execute until selected stack frame returns.\n"
 "Upon return, the value returned is printed and put in the value history."
 msgstr ""
 
-#: infcmd.c:2927
+#: infcmd.c:3035
 msgid ""
 "Step program, proceeding through subroutine calls.\n"
 "Like the \"step\" command as long as subroutine calls do not happen;\n"
@@ -10935,34 +11926,34 @@ msgid ""
 "Argument N means do this N times (or till program stops for another reason)."
 msgstr ""
 
-#: infcmd.c:2937
+#: infcmd.c:3045
 msgid ""
 "Step program until it reaches a different source line.\n"
 "Argument N means do this N times (or till program stops for another reason)."
 msgstr ""
 
-#: infcmd.c:2943
+#: infcmd.c:3051
 msgid ""
 "Execute until the program reaches a source line greater than the current\n"
 "or a specified location (same args as break command) within the current "
 "frame."
 msgstr ""
 
-#: infcmd.c:2950
+#: infcmd.c:3058
 msgid ""
 "Continue the program up to the given location (same form as args for break "
 "command).\n"
 "Execution will also stop upon exit from the current stack frame."
 msgstr ""
 
-#: infcmd.c:2956
+#: infcmd.c:3064
 msgid ""
 "Continue program being debugged at specified line or address.\n"
 "Give as argument either LINENUM or *ADDR, where ADDR is an expression\n"
 "for an address to start at."
 msgstr ""
 
-#: infcmd.c:2964
+#: infcmd.c:3072
 msgid ""
 "Usage: go <location>\n"
 "Continue program being debugged, stopping at specified line or \n"
@@ -10972,7 +11963,7 @@ msgid ""
 "This command is a combination of tbreak and jump."
 msgstr ""
 
-#: infcmd.c:2977
+#: infcmd.c:3085
 msgid ""
 "Continue program being debugged, after signal or breakpoint.\n"
 "If proceeding from breakpoint, a number N may be used as an argument,\n"
@@ -10985,7 +11976,7 @@ msgid ""
 "Specifying -a and an ignore count simultaneously is an error."
 msgstr ""
 
-#: infcmd.c:2990
+#: infcmd.c:3098
 msgid ""
 "Start debugged program.  You may specify arguments to give it.\n"
 "Args may include \"*\", or \"[...]\"; they are expanded using \"sh\".\n"
@@ -10997,162 +11988,201 @@ msgid ""
 "use \"set args\" without arguments."
 msgstr ""
 
-#: infcmd.c:3003
+#: infcmd.c:3111
 msgid "Start debugged program with no arguments."
 msgstr ""
 
-#: infcmd.c:3005
+#: infcmd.c:3113
 msgid ""
 "Run the debugged program until the beginning of the main procedure.\n"
 "You may specify arguments to give to your program, just as with the\n"
 "\"run\" command."
 msgstr ""
 
-#: infcmd.c:3012
-msgid ""
-"Interrupt the execution of the debugged program.\n"
-"If non-stop mode is enabled, interrupt only the current thread,\n"
-"otherwise all the threads in the program are stopped.  To \n"
-"interrupt all running threads in non-stop mode, use the -a option."
+#: infcmd.c:3120
+msgid ""
+"Interrupt the execution of the debugged program.\n"
+"If non-stop mode is enabled, interrupt only the current thread,\n"
+"otherwise all the threads in the program are stopped.  To \n"
+"interrupt all running threads in non-stop mode, use the -a option."
+msgstr ""
+
+#: infcmd.c:3125 infcmd.c:3131
+msgid ""
+"List of integer registers and their contents, for selected stack frame.\n"
+"Register name as argument means describe only that register."
+msgstr ""
+
+#: infcmd.c:3134
+msgid ""
+"List of all registers and their contents, for selected stack frame.\n"
+"Register name as argument means describe only that register."
+msgstr ""
+
+#: infcmd.c:3139
+msgid "Execution status of the program."
+msgstr ""
+
+#: infcmd.c:3142
+msgid "Print the status of the floating point unit\n"
+msgstr ""
+
+#: infcmd.c:3145
+msgid "Print the status of the vector unit\n"
+msgstr ""
+
+#: infcmd.c:3148
+msgid ""
+"Show /proc process information about any running process.\n"
+"Specify any process id, or use the program being debugged by default."
+msgstr ""
+
+#. allow-unknown
+#: infcmd.c:3154
+msgid "List of mapped memory regions."
+msgstr ""
+
+#: infcmd.c:3158
+msgid "List process info from /proc/PID/stat."
 msgstr ""
 
-#: infcmd.c:3017 infcmd.c:3023
-msgid ""
-"List of integer registers and their contents, for selected stack frame.\n"
-"Register name as argument means describe only that register."
+#: infcmd.c:3162
+msgid "List process info from /proc/PID/status."
 msgstr ""
 
-#: infcmd.c:3026
-msgid ""
-"List of all registers and their contents, for selected stack frame.\n"
-"Register name as argument means describe only that register."
+#: infcmd.c:3166
+msgid "List current working directory of the process."
 msgstr ""
 
-#: infcmd.c:3031
-msgid "Execution status of the program."
+#: infcmd.c:3170
+msgid "List command line arguments of the process."
 msgstr ""
 
-#: infcmd.c:3034
-msgid "Print the status of the floating point unit\n"
+#: infcmd.c:3174
+msgid "List absolute filename for executable of the process."
 msgstr ""
 
-#: infcmd.c:3037
-msgid "Print the status of the vector unit\n"
+#: infcmd.c:3178
+msgid "List all available /proc info."
 msgstr ""
 
-#: inferior.c:154
+#: inferior.c:155
 #, possible-c-format
 msgid "[New inferior %d]\n"
 msgstr ""
 
-#: inferior.c:241 inferior.c:297
+#: inferior.c:223 inferior.c:280
 #, possible-c-format
 msgid "[Inferior %d exited]\n"
 msgstr ""
 
-#: inferior.c:324
+#: inferior.c:307
 #, possible-c-format
 msgid "[Inferior %d detached]\n"
 msgstr ""
 
-#: inferior.c:598
+#: inferior.c:520
+msgid "<null>"
+msgstr ""
+
+#: inferior.c:590
 msgid ""
 "\n"
 "\tis vfork child of inferior "
 msgstr ""
 
-#: inferior.c:603
+#: inferior.c:595
 msgid ""
 "\n"
 "\tis vfork parent of inferior "
 msgstr ""
 
-#: inferior.c:622
+#: inferior.c:614
 msgid "Requires argument (inferior id(s) to detach)"
 msgstr ""
 
-#: inferior.c:631 inferior.c:667 inferior.c:698 inferior.c:771 inferior.c:915
+#: inferior.c:623 inferior.c:659 inferior.c:690 inferior.c:763 inferior.c:907
 #, possible-c-format
 msgid "Inferior ID %d not known."
 msgstr ""
 
-#: inferior.c:640 inferior.c:676
+#: inferior.c:632 inferior.c:668
 #, possible-c-format
 msgid "Inferior ID %d has no threads."
 msgstr ""
 
-#: inferior.c:658
+#: inferior.c:650
 msgid "Requires argument (inferior id(s) to kill)"
 msgstr ""
 
-#: inferior.c:700
+#: inferior.c:692
 #, possible-c-format
 msgid "[Switching to inferior %d [%s] (%s)]\n"
 msgstr ""
 
-#: inferior.c:705
+#: inferior.c:697
 msgid "<noexec>"
 msgstr ""
 
-#: inferior.c:715 mi/mi-main.c:372
+#: inferior.c:707 mi/mi-main.c:373
 msgid "Inferior has no threads."
 msgstr ""
 
-#: inferior.c:720
+#: inferior.c:712
 #, possible-c-format
 msgid "[Switching to thread %d (%s)] "
 msgstr ""
 
-#: inferior.c:761
+#: inferior.c:753
 msgid "Requires an argument (inferior id(s) to remove)"
 msgstr ""
 
-#: inferior.c:777
+#: inferior.c:769
 #, possible-c-format
 msgid "Can not remove current symbol inferior %d."
 msgstr ""
 
-#: inferior.c:783
+#: inferior.c:775
 #, possible-c-format
 msgid "Can not remove active inferior %d."
 msgstr ""
 
-#: inferior.c:833 inferior.c:896
+#: inferior.c:825 inferior.c:888
 msgid "No argument to -copies"
 msgstr ""
 
-#: inferior.c:840
+#: inferior.c:832
 msgid "No argument to -exec"
 msgstr ""
 
-#: inferior.c:845 inferior.c:919
+#: inferior.c:837 inferior.c:911
 msgid "Invalid argument"
 msgstr ""
 
-#: inferior.c:855
+#: inferior.c:847
 #, possible-c-format
 msgid "Added inferior %d\n"
 msgstr ""
 
-#: inferior.c:900
+#: inferior.c:892
 msgid "Invalid copies number"
 msgstr ""
 
-#: inferior.c:946
+#: inferior.c:938
 #, possible-c-format
 msgid "Added inferior %d.\n"
 msgstr ""
 
-#: inferior.c:961
+#: inferior.c:953
 #, possible-c-format
 msgid "Printing of inferior events is %s.\n"
 msgstr ""
 
-#: inferior.c:1079
+#: inferior.c:1073
 msgid "IDs of specified inferiors (all inferiors if no argument)."
 msgstr ""
 
-#: inferior.c:1081
+#: inferior.c:1075
 msgid ""
 "Add a new inferior.\n"
 "Usage: add-inferior [-copies <N>] [-exec <FILENAME>]\n"
@@ -11161,13 +12191,13 @@ msgid ""
 "as main program."
 msgstr ""
 
-#: inferior.c:1088
+#: inferior.c:1083
 msgid ""
 "Remove inferior ID (or list of IDs).\n"
 "Usage: remove-inferiors ID..."
 msgstr ""
 
-#: inferior.c:1092
+#: inferior.c:1087
 msgid ""
 "Clone inferior ID.\n"
 "Usage: clone-inferior [-copies <N>] [ID]\n"
@@ -11177,29 +12207,29 @@ msgid ""
 "that is cloned."
 msgstr ""
 
-#: inferior.c:1100
+#: inferior.c:1095
 msgid "Detach from inferior ID (or list of IDS)."
 msgstr ""
 
-#: inferior.c:1104
+#: inferior.c:1099
 msgid "Kill inferior ID (or list of IDs)."
 msgstr ""
 
-#: inferior.c:1108
+#: inferior.c:1103
 msgid ""
 "Use this command to switch between inferiors.\n"
 "The new inferior ID must be currently known."
 msgstr ""
 
-#: inferior.c:1114
+#: inferior.c:1109
 msgid "Set printing of inferior events (e.g., inferior start and exit)."
 msgstr ""
 
-#: inferior.c:1115
+#: inferior.c:1110
 msgid "Show printing of inferior events (e.g., inferior start and exit)."
 msgstr ""
 
-#: inf-loop.c:137
+#: inf-loop.c:135
 msgid "Event type not recognized.\n"
 msgstr ""
 
@@ -11253,70 +12283,70 @@ msgstr ""
 msgid "This system does not support detaching from a process"
 msgstr ""
 
-#: inf-ptrace.c:406 rs6000-nat.c:548
+#: inf-ptrace.c:406 rs6000-nat.c:549
 #, possible-c-format
 msgid "Child process unexpectedly missing: %s.\n"
 msgstr ""
 
-#: inf-ptrace.c:610 inf-ttrace.c:1243
+#: inf-ptrace.c:630 inf-ttrace.c:1243
 #, possible-c-format
 msgid "\tUsing the running image of %s %s.\n"
 msgstr ""
 
-#: infrun.c:117
+#: infrun.c:119
 #, possible-c-format
 msgid "Mode of the step operation is %s.\n"
 msgstr ""
 
-#: infrun.c:138
+#: infrun.c:140
 #, possible-c-format
 msgid "Displace stepping debugging is %s.\n"
 msgstr ""
 
-#: infrun.c:146
+#: infrun.c:148
 #, possible-c-format
 msgid "Inferior debugging is %s.\n"
 msgstr ""
 
-#: infrun.c:160
+#: infrun.c:162
 #, possible-c-format
 msgid "Disabling randomization of debuggee's virtual address space is %s.\n"
 msgstr ""
 
-#: infrun.c:164
+#: infrun.c:166
 msgid ""
 "Disabling randomization of debuggee's virtual address space is unsupported "
 "on\n"
 "this platform.\n"
 msgstr ""
 
-#: infrun.c:174
+#: infrun.c:176
 msgid ""
 "Disabling randomization of debuggee's virtual address space is unsupported "
 "on\n"
 "this platform."
 msgstr ""
 
-#: infrun.c:249 infrun.c:7038 target.c:4273 target.c:4321
+#: infrun.c:251 infrun.c:7021 target.c:4644 target.c:4692
 msgid "Cannot change this setting while the inferior is running."
 msgstr ""
 
-#: infrun.c:275 infrun.c:305
+#: infrun.c:277 infrun.c:307
 #, possible-c-format
 msgid "Observer mode is now %s.\n"
 msgstr ""
 
-#: infrun.c:283
+#: infrun.c:285
 #, possible-c-format
 msgid "Observer mode is %s.\n"
 msgstr ""
 
-#: infrun.c:357
+#: infrun.c:368
 #, possible-c-format
 msgid "Stopping for shared library events is %s.\n"
 msgstr ""
 
-#: infrun.c:404
+#: infrun.c:415
 #, possible-c-format
 msgid "Debugger response to a program call of fork or vfork is \"%s\".\n"
 msgstr ""
@@ -11327,180 +12357,188 @@ msgstr ""
 #. forked.  In that case, the resume command
 #. issued is most likely not applicable to the
 #. child, so just warn, and refuse to resume.
-#: infrun.c:545
+#: infrun.c:556
 msgid "Not resuming: switched threads before following fork child.\n"
 msgstr ""
 
-#: infrun.c:793
+#: infrun.c:805
 #, possible-c-format
 msgid "Follow exec mode is \"%s\".\n"
 msgstr ""
 
 #. What is this a.out's name?
-#: infrun.c:845
+#: infrun.c:857
 #, possible-c-format
 msgid "%s is executing new program: %s\n"
 msgstr ""
 
-#: infrun.c:1204
+#: infrun.c:1205
 #, possible-c-format
 msgid ""
 "Debugger's willingness to use displaced stepping to step over breakpoints is "
 "%s (currently %s).\n"
 msgstr ""
 
-#: infrun.c:1209
+#: infrun.c:1210
 #, possible-c-format
 msgid ""
 "Debugger's willingness to use displaced stepping to step over breakpoints is "
 "%s.\n"
 msgstr ""
 
-#: infrun.c:1594
+#: infrun.c:1350
+#, possible-c-format
+msgid ""
+"Error accessing memory address %s (%s) for displaced-stepping scratch space."
+msgstr ""
+
+#: infrun.c:1600
 #, possible-c-format
 msgid "Mode for locking scheduler during execution is \"%s\".\n"
 msgstr ""
 
-#: infrun.c:1605
+#: infrun.c:1611
 #, possible-c-format
 msgid "Target '%s' cannot support this command."
 msgstr ""
 
-#: infrun.c:1735
+#: infrun.c:1741
 msgid ""
 "The program is stopped at a permanent breakpoint, but GDB does not know\n"
 "how to step past a permanent breakpoint on this architecture.  Try using\n"
 "a command like `return' or `jump' to continue execution."
 msgstr ""
 
-#: infrun.c:2654
+#: infrun.c:2653
 msgid "Program exited while detaching"
 msgstr ""
 
-#: infrun.c:2839
+#: infrun.c:2823
 msgid "completed.\n"
 msgstr ""
 
-#: infrun.c:3031
+#: infrun.c:3015
 msgid "Cannot execute this command while the selected thread is running."
 msgstr ""
 
-#: infrun.c:3966
+#: infrun.c:3925
 msgid "Cannot step over breakpoint hit in wrong thread"
 msgstr ""
 
-#: infrun.c:5882 linux-fork.c:374 linux-fork.c:406
+#: infrun.c:5920 linux-fork.c:374 linux-fork.c:406
 #, possible-c-format
 msgid "[Switching to %s]\n"
 msgstr ""
 
-#: infrun.c:5893
+#: infrun.c:5931
 msgid "No unwaited-for children left.\n"
 msgstr ""
 
-#: infrun.c:5901
+#: infrun.c:5939
 msgid ""
 "Cannot remove breakpoints because program is no longer writable.\n"
 "Further execution is probably impossible.\n"
 msgstr ""
 
-#: infrun.c:6001
+#: infrun.c:6039
 msgid "Unknown value."
 msgstr ""
 
-#: infrun.c:6172
+#: infrun.c:6211
 msgid "Signal        Stop\tPrint\tPass to program\tDescription\n"
 msgstr ""
 
-#: infrun.c:6209
+#: infrun.c:6248
 msgid "signal to handle"
 msgstr ""
 
 #. Not a number and not a recognized flag word => complain.
-#: infrun.c:6312
+#: infrun.c:6351
 #, possible-c-format
 msgid "Unrecognized or ambiguous flag word: \"%s\"."
 msgstr ""
 
-#: infrun.c:6327
+#: infrun.c:6366
 #, possible-c-format
 msgid ""
 "%s is used by the debugger.\n"
 "Are you sure you want to change it? "
 msgstr ""
 
-#: infrun.c:6335
+#: infrun.c:6374
 msgid "Not confirmed, unchanged.\n"
 msgstr ""
 
-#: infrun.c:6382
+#: infrun.c:6422
 msgid "xdb command"
 msgstr ""
 
-#: infrun.c:6433
+#: infrun.c:6473
 msgid "Invalid signal handling flag.\n"
 msgstr ""
 
-#: infrun.c:6480
+#: infrun.c:6486
+msgid ""
+"Only signals 1-15 are valid as numeric signals.\n"
+"Use \"info signals\" for a list of symbolic signals."
+msgstr ""
+
+#: infrun.c:6529
 msgid ""
 "\n"
 "Use the \"handle\" command to change these tables.\n"
 msgstr ""
 
-#: infrun.c:6492
+#: infrun.c:6541
 msgid "No thread selected."
 msgstr ""
 
-#: infrun.c:6496
+#: infrun.c:6545
 msgid "The current thread has terminated"
 msgstr ""
 
-#: infrun.c:6531
+#: infrun.c:6580
 msgid "Unable to read siginfo"
 msgstr ""
 
-#: infrun.c:6552
+#: infrun.c:6601
 msgid "Unable to write siginfo"
 msgstr ""
 
-#: infrun.c:6780
-msgid "Unable to restore previously selected frame."
-msgstr ""
-
-#: infrun.c:7005
+#: infrun.c:6988
 msgid "Target does not support this operation."
 msgstr ""
 
-#: infrun.c:7015
+#: infrun.c:6998
 msgid "Forward.\n"
 msgstr ""
 
-#: infrun.c:7018
+#: infrun.c:7001
 msgid "Reverse.\n"
 msgstr ""
 
-#: infrun.c:7022
+#: infrun.c:7005
 #, possible-c-format
 msgid "bogus execution_direction value: %d"
 msgstr ""
 
-#: infrun.c:7049
+#: infrun.c:7032
 #, possible-c-format
 msgid "Controlling the inferior in non-stop mode is %s.\n"
 msgstr ""
 
-#: infrun.c:7057
+#: infrun.c:7040
 #, possible-c-format
 msgid "Resuming the execution of threads of all processes is %s.\n"
 msgstr ""
 
-#: infrun.c:7067 infrun.c:7089
+#: infrun.c:7059 infrun.c:7081
 msgid ""
 "What debugger does when program gets various signals.\n"
 "Specify a signal as argument to print info on that signal only."
 msgstr ""
 
-#: infrun.c:7072
+#: infrun.c:7064
 msgid ""
 "Specify how to handle a signal.\n"
 "Args are signals and actions to apply to those signals.\n"
@@ -11518,7 +12556,7 @@ msgid ""
 "Pass and Stop may be combined."
 msgstr ""
 
-#: infrun.c:7092
+#: infrun.c:7084
 msgid ""
 "Specify how to handle a signal.\n"
 "Args are signals and actions to apply to those signals.\n"
@@ -11537,46 +12575,46 @@ msgid ""
 "Pass and Stop may be combined."
 msgstr ""
 
-#: infrun.c:7112
+#: infrun.c:7104
 msgid ""
 "There is no `stop' command, but you can set a hook on `stop'.\n"
 "This allows you to set a list of commands to be run each time execution\n"
 "of the program stops."
 msgstr ""
 
-#: infrun.c:7117
+#: infrun.c:7109
 msgid "Set inferior debugging."
 msgstr ""
 
-#: infrun.c:7118
+#: infrun.c:7110
 msgid "Show inferior debugging."
 msgstr ""
 
-#: infrun.c:7119
+#: infrun.c:7111
 msgid "When non-zero, inferior specific debugging is enabled."
 msgstr ""
 
-#: infrun.c:7126
+#: infrun.c:7118
 msgid "Set displaced stepping debugging."
 msgstr ""
 
-#: infrun.c:7127
+#: infrun.c:7119
 msgid "Show displaced stepping debugging."
 msgstr ""
 
-#: infrun.c:7128
+#: infrun.c:7120
 msgid "When non-zero, displaced stepping specific debugging is enabled."
 msgstr ""
 
-#: infrun.c:7135
+#: infrun.c:7127
 msgid "Set whether gdb controls the inferior in non-stop mode."
 msgstr ""
 
-#: infrun.c:7136
+#: infrun.c:7128
 msgid "Show whether gdb controls the inferior in non-stop mode."
 msgstr ""
 
-#: infrun.c:7137
+#: infrun.c:7129
 msgid ""
 "When debugging a multi-threaded program and this setting is\n"
 "off (the default, also called all-stop mode), when one thread stops\n"
@@ -11591,30 +12629,30 @@ msgid ""
 "leave it stopped or free to run as needed."
 msgstr ""
 
-#: infrun.c:7209
+#: infrun.c:7201
 msgid "Set stopping for shared library events."
 msgstr ""
 
-#: infrun.c:7210
+#: infrun.c:7202
 msgid "Show stopping for shared library events."
 msgstr ""
 
-#: infrun.c:7211
+#: infrun.c:7203
 msgid ""
 "If nonzero, gdb will give control to the user when the dynamic linker\n"
 "notifies gdb of shared library events.  The most common event of interest\n"
 "to the user would be loading/unloading of a new library."
 msgstr ""
 
-#: infrun.c:7221
+#: infrun.c:7213
 msgid "Set debugger response to a program call of fork or vfork."
 msgstr ""
 
-#: infrun.c:7222
+#: infrun.c:7214
 msgid "Show debugger response to a program call of fork or vfork."
 msgstr ""
 
-#: infrun.c:7223
+#: infrun.c:7215
 msgid ""
 "A fork or vfork creates a new process.  follow-fork-mode can be:\n"
 "  parent  - the original process is debugged after a fork\n"
@@ -11623,15 +12661,15 @@ msgid ""
 "By default, the debugger will follow the parent process."
 msgstr ""
 
-#: infrun.c:7235
+#: infrun.c:7227
 msgid "Set debugger response to a program call of exec."
 msgstr ""
 
-#: infrun.c:7236
+#: infrun.c:7228
 msgid "Show debugger response to a program call of exec."
 msgstr ""
 
-#: infrun.c:7237
+#: infrun.c:7229
 msgid ""
 "An exec call replaces the program image of a process.\n"
 "\n"
@@ -11650,15 +12688,15 @@ msgid ""
 "By default, the debugger will use the same inferior."
 msgstr ""
 
-#: infrun.c:7258
+#: infrun.c:7250
 msgid "Set mode for locking scheduler during execution."
 msgstr ""
 
-#: infrun.c:7259
+#: infrun.c:7251
 msgid "Show mode for locking scheduler during execution."
 msgstr ""
 
-#: infrun.c:7260
+#: infrun.c:7252
 msgid ""
 "off  == no locking (threads may preempt at any time)\n"
 "on   == full locking (no thread except the current thread may run)\n"
@@ -11667,15 +12705,15 @@ msgid ""
 "\tOther threads may run while stepping over a function call ('next')."
 msgstr ""
 
-#: infrun.c:7270
+#: infrun.c:7262
 msgid "Set mode for resuming threads of all processes."
 msgstr ""
 
-#: infrun.c:7271
+#: infrun.c:7263
 msgid "Show mode for resuming threads of all processes."
 msgstr ""
 
-#: infrun.c:7272
+#: infrun.c:7264
 msgid ""
 "When on, execution commands (such as 'continue' or 'next') resume all\n"
 "threads of all processes.  When off (which is the default), execution\n"
@@ -11684,30 +12722,30 @@ msgid ""
 "mode (see help set scheduler-locking)."
 msgstr ""
 
-#: infrun.c:7282
+#: infrun.c:7274
 msgid "Set mode of the step operation."
 msgstr ""
 
-#: infrun.c:7283
+#: infrun.c:7275
 msgid "Show mode of the step operation."
 msgstr ""
 
-#: infrun.c:7284
+#: infrun.c:7276
 msgid ""
 "When set, doing a step over a function without debug line information\n"
 "will stop at the first instruction of that function. Otherwise, the\n"
 "function is skipped and the step command stops at a different source line."
 msgstr ""
 
-#: infrun.c:7294
+#: infrun.c:7285
 msgid "Set debugger's willingness to use displaced stepping."
 msgstr ""
 
-#: infrun.c:7295
+#: infrun.c:7286
 msgid "Show debugger's willingness to use displaced stepping."
 msgstr ""
 
-#: infrun.c:7296
+#: infrun.c:7287
 msgid ""
 "If on, gdb will use displaced stepping to step over breakpoints if it is\n"
 "supported by the target architecture.  If off, gdb will not use displaced\n"
@@ -11719,57 +12757,57 @@ msgid ""
 "use it in all-stop mode (see help set non-stop)."
 msgstr ""
 
-#: infrun.c:7308
+#: infrun.c:7299
 msgid ""
 "Set direction of execution.\n"
 "Options are 'forward' or 'reverse'."
 msgstr ""
 
-#: infrun.c:7310
+#: infrun.c:7301
 msgid "Show direction of execution (forward/reverse)."
 msgstr ""
 
-#: infrun.c:7311
+#: infrun.c:7302
 msgid "Tells gdb whether to execute forward or backward."
 msgstr ""
 
 #. Set/show detach-on-fork: user-settable mode.
-#: infrun.c:7317
+#: infrun.c:7308
 msgid "Set whether gdb will detach the child of a fork."
 msgstr ""
 
-#: infrun.c:7318
+#: infrun.c:7309
 msgid "Show whether gdb will detach the child of a fork."
 msgstr ""
 
-#: infrun.c:7319
+#: infrun.c:7310
 msgid "Tells gdb whether to detach the child of a fork."
 msgstr ""
 
-#: infrun.c:7326
+#: infrun.c:7317
 msgid "Set disabling of debuggee's virtual address space randomization."
 msgstr ""
 
-#: infrun.c:7327
+#: infrun.c:7318
 msgid "Show disabling of debuggee's virtual address space randomization."
 msgstr ""
 
-#: infrun.c:7328
+#: infrun.c:7319
 msgid ""
 "When this mode is on (which is the default), randomization of the virtual\n"
 "address space is disabled.  Standalone programs run with the randomization\n"
 "enabled by default on some platforms."
 msgstr ""
 
-#: infrun.c:7352
+#: infrun.c:7343
 msgid "Set whether gdb controls the inferior in observer mode."
 msgstr ""
 
-#: infrun.c:7353
+#: infrun.c:7344
 msgid "Show whether gdb controls the inferior in observer mode."
 msgstr ""
 
-#: infrun.c:7354
+#: infrun.c:7345
 msgid ""
 "In observer mode, GDB can get data from the inferior, but not\n"
 "affect its execution.  Registers and memory may not be changed,\n"
@@ -11795,7 +12833,7 @@ msgstr ""
 msgid "TT_PROC_GET_NEXT_LWP_STATE ttrace call failed"
 msgstr ""
 
-#: inf-ttrace.c:1095 linux-nat.c:1254 procfs.c:3909 procfs.c:4047
+#: inf-ttrace.c:1095 linux-nat.c:1359 procfs.c:3708 procfs.c:3846
 #, possible-c-format
 msgid "[%s exited]\n"
 msgstr ""
@@ -11805,40 +12843,40 @@ msgstr ""
 msgid "[%s has been terminated]\n"
 msgstr ""
 
-#: interps.c:157
+#: interps.c:155
 #, possible-c-format
 msgid "Could not suspend interpreter \"%s\"."
 msgstr ""
 
-#: interps.c:202
+#: interps.c:200
 #, possible-c-format
 msgid "Failed to initialize new interp \"%s\" %s"
 msgstr ""
 
-#: interps.c:392
+#: interps.c:415
 msgid "interpreter-exec command"
 msgstr ""
 
-#: interps.c:402
+#: interps.c:425
 msgid "usage: interpreter-exec <interpreter> [ <command> ... ]"
 msgstr ""
 
-#: interps.c:408
+#: interps.c:431
 #, possible-c-format
 msgid "Could not find interpreter \"%s\"."
 msgstr ""
 
-#: interps.c:415
+#: interps.c:438
 #, possible-c-format
 msgid "Could not switch to interpreter \"%s\"."
 msgstr ""
 
-#: interps.c:426
+#: interps.c:449
 #, possible-c-format
 msgid "error in command: \"%s\"."
 msgstr ""
 
-#: interps.c:507
+#: interps.c:515
 msgid ""
 "Execute a command in an interpreter.  It takes two arguments:\n"
 "The first argument is the name of the interpreter to use.\n"
@@ -11855,98 +12893,99 @@ msgstr ""
 msgid "JIT debugging is %s.\n"
 msgstr ""
 
-#: jit.c:154
+#: jit.c:172
 #, possible-c-format
 msgid "Opening shared object %s.\n"
 msgstr ""
 
-#: jit.c:161
+#: jit.c:179
 #, possible-c-format
 msgid "Could not locate initialization function: %s."
 msgstr ""
 
-#: jit.c:165
+#: jit.c:183
 msgid "Reader not GPL compatible."
 msgstr ""
 
-#: jit.c:169
+#: jit.c:187
 msgid "Reader version does not match GDB version."
 msgstr ""
 
-#: jit.c:189
+#: jit.c:206
 msgid "No reader name provided."
 msgstr ""
 
-#: jit.c:192
+#: jit.c:209
 msgid "JIT reader already loaded.  Run jit-reader-unload first."
 msgstr ""
 
-#: jit.c:207
+#: jit.c:224
 msgid "No JIT reader loaded."
 msgstr ""
 
-#: jit.c:305
-msgid "Unable to read JIT descriptor from remote memory!"
+#: jit.c:352
+msgid "Unable to read JIT descriptor from remote memory\n"
 msgstr ""
 
-#: jit.c:339
+#: jit.c:397
 msgid "Unable to read JIT code entry from remote memory!"
 msgstr ""
 
-#: jit.c:799
+#: jit.c:861
 msgid "Error opening JITed symbol file, ignoring it.\n"
 msgstr ""
 
-#: jit.c:807
+#: jit.c:869
 msgid "JITed symbol file is not an object file, ignoring it.\n"
 msgstr ""
 
-#: jit.c:816
+#: jit.c:878
 #, possible-c-format
 msgid ""
 "JITed object file architecture %s is not compatible with target architecture "
 "%s."
 msgstr ""
 
-#: jit.c:966
+#: jit.c:1033
 #, possible-c-format
 msgid "Could not recognize DWARF regnum %d"
 msgstr ""
 
-#: jit.c:1069
+#: jit.c:1135
 msgid "Successfully unwound frame using JIT reader.\n"
 msgstr ""
 
-#: jit.c:1074
+#: jit.c:1140
 msgid "Could not unwind frame using JIT reader.\n"
 msgstr ""
 
-#: jit.c:1217
-msgid "Unsupported JIT protocol version in descriptor!"
+#: jit.c:1265
+#, possible-c-format
+msgid "Unsupported JIT protocol version %ld in descriptor (expected 1)\n"
 msgstr ""
 
-#: jit.c:1327
+#: jit.c:1351
 #, possible-c-format
 msgid "Unable to find JITed code entry at address: %s\n"
 msgstr ""
 
-#: jit.c:1335
+#: jit.c:1359
 msgid "Unknown action_flag value in JIT descriptor!"
 msgstr ""
 
-#: jit.c:1371
+#: jit.c:1405
 msgid "Set JIT debugging."
 msgstr ""
 
-#: jit.c:1372
+#: jit.c:1406
 msgid "Show JIT debugging."
 msgstr ""
 
-#: jit.c:1373
+#: jit.c:1407
 msgid "When non-zero, JIT debugging is enabled."
 msgstr ""
 
-#: jit.c:1388
+#: jit.c:1420
 msgid ""
 "Load FILE as debug info reader and unwinder for JIT compiled code.\n"
 "Usage: jit-reader-load FILE\n"
@@ -11954,13 +12993,13 @@ msgid ""
 "JIT compiled code.  The file is loaded from "
 msgstr ""
 
-#: jit.c:1392
+#: jit.c:1424
 msgid ""
 ",\n"
 "relocated relative to the GDB executable if required."
 msgstr ""
 
-#: jit.c:1394
+#: jit.c:1426
 msgid ""
 "Unload the currently loaded JIT debug info reader.\n"
 "Usage: jit-reader-unload FILE\n"
@@ -11968,78 +13007,78 @@ msgid ""
 "Do \"help jit-reader-load\" for info on loading debug info readers."
 msgstr ""
 
-#: jv-exp.y:395
+#: jv-exp.y:401
 msgid "FIXME - ClassInstanceCreationExpression"
 msgstr ""
 
-#: jv-exp.y:414 jv-exp.y:417
+#: jv-exp.y:420 jv-exp.y:423
 msgid "FIXME - ArrayCreationExpression"
 msgstr ""
 
-#: jv-exp.y:463 jv-exp.y:465
+#: jv-exp.y:469 jv-exp.y:471
 msgid "Form of method invocation not implemented"
 msgstr ""
 
-#: jv-exp.y:554
+#: jv-exp.y:560
 msgid "Invalid cast expression"
 msgstr ""
 
-#: jv-exp.y:794
+#: jv-exp.y:800
 msgid "Numeric constant too large"
 msgstr ""
 
-#: jv-exp.y:904
+#: jv-exp.y:910
 msgid "Empty character constant"
 msgstr ""
 
-#: jv-exp.y:917
+#: jv-exp.y:923
 msgid "Unmatched single quote"
 msgstr ""
 
-#: jv-exp.y:922
+#: jv-exp.y:928
 msgid "Invalid character constant"
 msgstr ""
 
-#: jv-exp.y:1007
+#: jv-exp.y:1013
 #, possible-c-format
 msgid "Invalid number \"%s\""
 msgstr ""
 
-#: jv-exp.y:1079
+#: jv-exp.y:1085
 msgid "Unterminated string in expression"
 msgstr ""
 
 #. We must have come across a bad character (e.g. ';').
-#: jv-exp.y:1091
+#: jv-exp.y:1097
 #, possible-c-format
 msgid "Invalid character '%c' in expression"
 msgstr ""
 
-#: jv-exp.y:1202
+#: jv-exp.y:1208
 #, possible-c-format
 msgid "%s: near `%s'"
 msgstr ""
 
-#: jv-exp.y:1204
+#: jv-exp.y:1210
 #, possible-c-format
 msgid "error in expression, near `%s'"
 msgstr ""
 
-#: jv-exp.y:1213
+#: jv-exp.y:1219
 #, possible-c-format
 msgid "No class named `%s'"
 msgstr ""
 
-#: jv-exp.y:1351
+#: jv-exp.y:1357
 #, possible-c-format
 msgid "unknown type `%.*s'"
 msgstr ""
 
-#: jv-exp.y:1394
+#: jv-exp.y:1400
 msgid "No symbol table is loaded.  Use the \"file\" command"
 msgstr ""
 
-#: jv-exp.y:1396
+#: jv-exp.y:1402
 #, possible-c-format
 msgid "No symbol \"%s\" in current context"
 msgstr ""
@@ -12144,11 +13183,7 @@ msgstr ""
 msgid "Case sensitivity:  %s\n"
 msgstr ""
 
-#: language.c:613 typeprint.c:65
-msgid "Language not supported."
-msgstr ""
-
-#: language.c:940
+#: language.c:674
 msgid ""
 "Set the current source language.\n"
 "The currently understood settings are:\n"
@@ -12156,147 +13191,175 @@ msgid ""
 "local or auto    Automatic setting based on source file\n"
 msgstr ""
 
-#: language.c:968
+#: language.c:702
 msgid "Show the current source language."
 msgstr ""
 
-#: language.c:1066
+#: language.c:800
 msgid "Getting a string is unsupported in this language."
 msgstr ""
 
-#: language.c:1080
+#: language.c:814
 msgid "Attempted to parse an expression with unknown language"
 msgstr ""
 
-#: language.c:1087
+#: language.c:821
 msgid "internal error - unimplemented function unk_lang_emit_char called."
 msgstr ""
 
-#: language.c:1094
+#: language.c:828
 msgid "internal error - unimplemented function unk_lang_printchar called."
 msgstr ""
 
-#: language.c:1104
+#: language.c:838
 msgid "internal error - unimplemented function unk_lang_printstr called."
 msgstr ""
 
-#: language.c:1112
+#: language.c:846
 msgid "internal error - unimplemented function unk_lang_print_type called."
 msgstr ""
 
-#: language.c:1123
+#: language.c:857
 msgid "internal error - unimplemented function unk_lang_val_print called."
 msgstr ""
 
-#: language.c:1131
+#: language.c:865
 msgid "internal error - unimplemented function unk_lang_value_print called."
 msgstr ""
 
-#: language.c:1390
+#: language.c:1127
 msgid "Set the status of the type/range checker."
 msgstr ""
 
-#: language.c:1396
+#: language.c:1133
 msgid "Show the status of the type/range checker."
 msgstr ""
 
-#: language.c:1402
+#: language.c:1139
 msgid "Set type checking.  (on/warn/off/auto)"
 msgstr ""
 
-#: language.c:1403
+#: language.c:1140
 msgid "Show type checking.  (on/warn/off/auto)"
 msgstr ""
 
-#: language.c:1410
+#: language.c:1147
 msgid "Set range checking.  (on/warn/off/auto)"
 msgstr ""
 
-#: language.c:1411
+#: language.c:1148
 msgid "Show range checking.  (on/warn/off/auto)"
 msgstr ""
 
-#: language.c:1417
+#: language.c:1154
 msgid "Set case sensitivity in name search.  (on/off/auto)"
 msgstr ""
 
-#: language.c:1418
+#: language.c:1155
 msgid "Show case sensitivity in name search.  (on/off/auto)"
 msgstr ""
 
-#: language.c:1419
+#: language.c:1156
 msgid "For Fortran the default is off; for other languages the default is on."
 msgstr ""
 
-#: libunwind-frame.c:211
-msgid "Can't get libunwind sp register."
+#: linespec.c:587
+msgid "unmatched quote"
 msgstr ""
 
-#: linespec.c:637
+#: linespec.c:1294
 msgid ""
 "[0] cancel\n"
 "[1] all\n"
 msgstr ""
 
-#: linespec.c:659
+#: linespec.c:1316
 msgid "canceled"
 msgstr ""
 
-#: linespec.c:675
+#: linespec.c:1332
 #, possible-c-format
 msgid "No choice number %d.\n"
 msgstr ""
 
-#: linespec.c:687
+#: linespec.c:1344
 #, possible-c-format
 msgid "duplicate request for %d ignored.\n"
 msgstr ""
 
-#. The error message doesn't really matter, because this case
-#. should only hit during breakpoint reset.
-#: linespec.c:1295
-msgid "cannot evaluate expressions while program space is in startup"
+#: linespec.c:1381
+#, possible-c-format
+msgid ""
+"Undefined convenience variable or function \"%s\" not defined in \"%s\"."
 msgstr ""
 
-#: linespec.c:1386 linespec.c:1591
-msgid "malformed template specification in command"
+#: linespec.c:1385
+#, possible-c-format
+msgid "Undefined convenience variable or function \"%s\" not defined."
 msgstr ""
 
-#. End if symbol found.
-#. We couldn't find a class, so we're in case 2 above.  We check the
-#. entire name as a symbol instead.  The simplest way to do this is
-#. to just throw an exception and let our caller fall through to
-#. decode_variable.
-#: linespec.c:1726
-msgid "see caller, this text doesn't matter"
+#: linespec.c:1392
+#, possible-c-format
+msgid "Function \"%s\" not defined in \"%s\"."
 msgstr ""
 
-#: linespec.c:2135
+#: linespec.c:1396
 #, possible-c-format
-msgid "No source file named %s."
+msgid "Function \"%s\" not defined."
 msgstr ""
 
-#: linespec.c:2432
+#: linespec.c:1423
 #, possible-c-format
-msgid "No line %d in the current file."
+msgid "malformed linespec error: unexpected %s, \"%s\""
 msgstr ""
 
-#: linespec.c:2481
-msgid "History values used in line specs must have integer values."
+#: linespec.c:1428
+#, possible-c-format
+msgid "malformed linespec error: unexpected %s"
 msgstr ""
 
-#: linespec.c:2509
-msgid "Convenience variables used in line specs must have integer values."
+#: linespec.c:1587
+#, possible-c-format
+msgid "No label \"%s\" defined in function \"%s\"."
 msgstr ""
 
-#: linespec.c:2961
+#: linespec.c:1836
 #, possible-c-format
-msgid "Function \"%s\" not defined in \"%s\"."
+msgid "No line %d in the current file."
+msgstr ""
+
+#: linespec.c:2372 linespec.c:2394
+msgid "Empty line specification."
 msgstr ""
 
-#: linespec.c:2964
+#: linespec.c:2382 linespec.c:2404
 #, possible-c-format
-msgid "Function \"%s\" not defined."
+msgid "Junk at end of line specification: %s"
+msgstr ""
+
+#. The error message doesn't really matter, because this case
+#. should only hit during breakpoint reset.
+#: linespec.c:2440
+msgid "cannot evaluate expressions while program space is in startup"
+msgstr ""
+
+#. Throw an NOT_FOUND_ERROR.  This will be caught by the caller
+#. and other attempts to locate the symbol will be made.
+#: linespec.c:2806
+msgid "see caller, this text doesn't matter"
+msgstr ""
+
+#: linespec.c:2883
+#, possible-c-format
+msgid "No source file named %s."
+msgstr ""
+
+#: linespec.c:3195
+msgid "History values used in line specs must have integer values."
+msgstr ""
+
+#: linespec.c:3218
+msgid "Convenience variables used in line specs must have integer values."
 msgstr ""
 
 #: linux-fork.c:394 linux-fork.c:539
@@ -12443,43 +13506,43 @@ msgstr ""
 msgid "IDs of currently known checkpoints."
 msgstr ""
 
-#: linux-nat.c:199
+#: linux-nat.c:209
 #, possible-c-format
 msgid "Debugging of GNU/Linux lwp module is %s.\n"
 msgstr ""
 
-#: linux-nat.c:405
+#: linux-nat.c:416
 #, possible-c-format
 msgid "linux_test_for_tracefork: waitpid: unexpected result %d."
 msgstr ""
 
-#: linux-nat.c:407
+#: linux-nat.c:418
 #, possible-c-format
 msgid "linux_test_for_tracefork: waitpid: unexpected status %d."
 msgstr ""
 
-#: linux-nat.c:416 linux-nat.c:468
+#: linux-nat.c:427 linux-nat.c:479
 msgid "linux_test_for_tracefork: failed to kill child"
 msgstr ""
 
-#: linux-nat.c:423
+#: linux-nat.c:434
 msgid "linux_test_for_tracefork: failed to wait for killed child"
 msgstr ""
 
-#: linux-nat.c:426
+#: linux-nat.c:437
 #, possible-c-format
 msgid "linux_test_for_tracefork: unexpected wait status 0x%x from killed child"
 msgstr ""
 
-#: linux-nat.c:440
+#: linux-nat.c:451
 msgid "linux_test_for_tracefork: failed to resume child"
 msgstr ""
 
-#: linux-nat.c:457
+#: linux-nat.c:468
 msgid "linux_test_for_tracefork: failed to kill second child"
 msgstr ""
 
-#: linux-nat.c:463
+#: linux-nat.c:474
 #, possible-c-format
 msgid ""
 "linux_test_for_tracefork: unexpected result from waitpid (%d, status 0x%x)"
@@ -12490,24 +13553,24 @@ msgstr ""
 #. the parent stays blocked.  If we're telling the parent to run
 #. in the foreground, the user will not be able to ctrl-c to get
 #. back the terminal, effectively hanging the debug session.
-#: linux-nat.c:613
+#: linux-nat.c:651
 msgid ""
 "Can not resume the parent process over vfork in the foreground while\n"
 "holding the child stopped.  Try \"set detach-on-fork\" or \"set schedule-"
 "multiple\".\n"
 msgstr ""
 
-#: linux-nat.c:810
+#: linux-nat.c:872
 #, possible-c-format
 msgid "Attaching after process %d vfork to child process %d.\n"
 msgstr ""
 
-#: linux-nat.c:815
+#: linux-nat.c:877
 #, possible-c-format
 msgid "Attaching after process %d fork to child process %d.\n"
 msgstr ""
 
-#: linux-nat.c:1336
+#: linux-nat.c:1410
 #, possible-c-format
 msgid "%s is a cloned process"
 msgstr ""
@@ -12517,615 +13580,600 @@ msgstr ""
 #. creation is interrupted; as of Linux kernel 2.6.19, a
 #. bug may place threads in the thread list and then fail
 #. to create them.
-#: linux-nat.c:1439
+#: linux-nat.c:1513
 #, possible-c-format
 msgid "Can't attach %s: %s"
 msgstr ""
 
-#: linux-nat.c:1519
+#: linux-nat.c:1593
 #, possible-c-format
 msgid "Error disabling address space randomization: %s"
 msgstr ""
 
-#: linux-nat.c:1535
+#: linux-nat.c:1609
 #, possible-c-format
 msgid "Error restoring address space randomization: %s"
 msgstr ""
 
-#: linux-nat.c:1572
+#: linux-nat.c:1668
 msgid "Unable to attach: program exited normally."
 msgstr ""
 
-#: linux-nat.c:1574
+#: linux-nat.c:1670
 #, possible-c-format
 msgid "Unable to attach: program exited with code %d."
 msgstr ""
 
-#: linux-nat.c:1585
+#: linux-nat.c:1681
 #, possible-c-format
 msgid "Unable to attach: program terminated with signal %s, %s."
 msgstr ""
 
-#: linux-nat.c:1592
+#: linux-nat.c:1688
 #, possible-c-format
 msgid "unexpected status %d for PID %ld"
 msgstr ""
 
-#: linux-nat.c:1729
-#, possible-c-format
-msgid "Can't detach %s: %s"
-msgstr ""
-
-#: linux-nat.c:2175
+#: linux-nat.c:2297
 msgid "waiting for new child"
 msgstr ""
 
-#: linux-nat.c:2178
+#: linux-nat.c:2300
 #, possible-c-format
 msgid "wait returned unexpected PID %d"
 msgstr ""
 
-#: linux-nat.c:2181
+#: linux-nat.c:2303
 #, possible-c-format
 msgid "wait returned unexpected status 0x%x"
 msgstr ""
 
-#: linux-nat.c:2383
+#: linux-nat.c:2509
 #, possible-c-format
 msgid "unknown ptrace event %d"
 msgstr ""
 
-#: linux-nat.c:2400 linux-nat.c:4827 linux-nat.c:4907 linux-nat.c:4921
-#: linux-nat.c:5019
+#: linux-nat.c:4521 linux-nat.c:4534
 #, possible-c-format
-msgid "unable to open /proc file '%s'"
+msgid "Could not parse signal set: %s"
 msgstr ""
 
-#: linux-nat.c:4393
+#: linux-nat.c:4568
 #, possible-c-format
-msgid "Could not open %s."
+msgid "Could not open %s"
 msgstr ""
 
-#: linux-nat.c:4803
-#, possible-c-format
-msgid "Too many parameters: %s"
+#: linux-nat.c:5190
+msgid "Set debugging of GNU/Linux lwp module."
 msgstr ""
 
-#: linux-nat.c:4806 procfs.c:5435
-msgid "No current process: you must name one."
+#: linux-nat.c:5191
+msgid "Show debugging of GNU/Linux lwp module."
 msgstr ""
 
-#: linux-nat.c:4810
-#, possible-c-format
-msgid "No /proc directory: '%s'"
+#: linux-nat.c:5192
+msgid "Enables printf debugging output."
 msgstr ""
 
-#: linux-nat.c:4812
-#, possible-c-format
-msgid "process %ld\n"
+#: linux-record.c:245
+msgid ""
+"The next instruction is syscall exit.  It will make the program exit.  Do "
+"you want to stop the program?"
 msgstr ""
 
-#: linux-nat.c:4823
-#, possible-c-format
-msgid "unable to read '%s'"
+#: linux-record.c:492
+msgid ""
+"Process record and replay target doesn't support ioctl request "
+"TIOCSERGSTRUCT\n"
 msgstr ""
 
-#: linux-nat.c:4836 linux-nat.c:4845
+#: linux-record.c:498
 #, possible-c-format
-msgid "unable to read link '%s'"
+msgid "Process record and replay target doesn't support ioctl request 0x%s.\n"
 msgstr ""
 
-#. No output for summary mode.
-#: linux-nat.c:4857 procfs.c:5370
+#: linux-record.c:677
 msgid ""
-"Mapped address spaces:\n"
-"\n"
+"The next instruction is syscall reboot.  It will restart the computer.  Do "
+"you want to stop the program?"
 msgstr ""
 
-#: linux-nat.c:4934
+#: linux-record.c:708
 #, possible-c-format
-msgid "Process: %d\n"
+msgid ""
+"The next instruction is syscall munmap.\n"
+"It will free the memory addr = 0x%s len = %u.\n"
+"It will make record target cannot record some memory change.\n"
+"Do you want to stop the program?"
 msgstr ""
 
-#: linux-nat.c:4936
+#: linux-record.c:1053
 #, possible-c-format
-msgid "Exec file: %s\n"
+msgid "Process record and replay target doesn't support socketcall call 0x%s\n"
 msgstr ""
 
-#: linux-nat.c:4938
+#. XXX RECORD_SEMCTL still not supported.
+#: linux-record.c:1216
 #, possible-c-format
-msgid "State: %c\n"
+msgid "Process record and replay target doesn't support ipc number %s\n"
 msgstr ""
 
-#: linux-nat.c:4940
-#, possible-c-format
-msgid "Parent process: %d\n"
+#: linux-record.c:1910
+msgid ""
+"The next instruction is syscall exit_group.  It will make the program exit.  "
+"Do you want to stop the program?"
 msgstr ""
 
-#: linux-nat.c:4942
+#: linux-record.c:2245
 #, possible-c-format
-msgid "Process group: %d\n"
+msgid "Process record and replay target doesn't support syscall number %d\n"
 msgstr ""
 
-#: linux-nat.c:4944
-#, possible-c-format
-msgid "Session id: %d\n"
+#: linux-tdep.c:272 procfs.c:5241
+msgid "No current process: you must name one."
 msgstr ""
 
-#: linux-nat.c:4946
-#, possible-c-format
-msgid "TTY: %d\n"
+#: linux-tdep.c:274
+msgid "Can't determine the current process's PID: you must name one."
 msgstr ""
 
-#: linux-nat.c:4948
+#: linux-tdep.c:281
 #, possible-c-format
-msgid "TTY owner process group: %d\n"
+msgid "Too many parameters: %s"
 msgstr ""
 
-#: linux-nat.c:4950
+#: linux-tdep.c:283
 #, possible-c-format
-msgid "Flags: 0x%lx\n"
+msgid "process %ld\n"
 msgstr ""
 
-#: linux-nat.c:4952
+#: linux-tdep.c:308 linux-tdep.c:321
 #, possible-c-format
-msgid "Minor faults (no memory page): %lu\n"
+msgid "unable to read link '%s'"
 msgstr ""
 
-#: linux-nat.c:4955
-#, possible-c-format
-msgid "Minor faults, children: %lu\n"
+#. No output for summary mode.
+#: linux-tdep.c:332 procfs.c:5169
+msgid ""
+"Mapped address spaces:\n"
+"\n"
 msgstr ""
 
-#: linux-nat.c:4958
+#: linux-tdep.c:406
 #, possible-c-format
-msgid "Major faults (memory page faults): %lu\n"
+msgid "Process: %s\n"
 msgstr ""
 
-#: linux-nat.c:4961
+#: linux-tdep.c:425
 #, possible-c-format
-msgid "Major faults, children: %lu\n"
+msgid "State: %c\n"
 msgstr ""
 
-#: linux-nat.c:4964
+#: linux-tdep.c:428
 #, possible-c-format
-msgid "utime: %ld\n"
+msgid "Parent process: %s\n"
 msgstr ""
 
-#: linux-nat.c:4966
+#: linux-tdep.c:431
 #, possible-c-format
-msgid "stime: %ld\n"
+msgid "Process group: %s\n"
 msgstr ""
 
-#: linux-nat.c:4968
+#: linux-tdep.c:434
 #, possible-c-format
-msgid "utime, children: %ld\n"
+msgid "Session id: %s\n"
 msgstr ""
 
-#: linux-nat.c:4970
+#: linux-tdep.c:437
 #, possible-c-format
-msgid "stime, children: %ld\n"
+msgid "TTY: %s\n"
 msgstr ""
 
-#: linux-nat.c:4972
+#: linux-tdep.c:440
 #, possible-c-format
-msgid "jiffies remaining in current time slice: %ld\n"
+msgid "TTY owner process group: %s\n"
 msgstr ""
 
-#: linux-nat.c:4975
+#: linux-tdep.c:444
 #, possible-c-format
-msgid "'nice' value: %ld\n"
+msgid "Flags: %s\n"
 msgstr ""
 
-#: linux-nat.c:4977
+#: linux-tdep.c:447
 #, possible-c-format
-msgid "jiffies until next timeout: %lu\n"
+msgid "Minor faults (no memory page): %s\n"
 msgstr ""
 
-#: linux-nat.c:4980
+#: linux-tdep.c:450
 #, possible-c-format
-msgid "jiffies until next SIGALRM: %lu\n"
+msgid "Minor faults, children: %s\n"
 msgstr ""
 
-#: linux-nat.c:4983
+#: linux-tdep.c:453
 #, possible-c-format
-msgid "start time (jiffies since system boot): %ld\n"
+msgid "Major faults (memory page faults): %s\n"
 msgstr ""
 
-#: linux-nat.c:4986
+#: linux-tdep.c:456
 #, possible-c-format
-msgid "Virtual memory size: %lu\n"
+msgid "Major faults, children: %s\n"
 msgstr ""
 
-#: linux-nat.c:4989
+#: linux-tdep.c:459
 #, possible-c-format
-msgid "Resident set size: %lu\n"
+msgid "utime: %s\n"
 msgstr ""
 
-#: linux-nat.c:4992
+#: linux-tdep.c:462
 #, possible-c-format
-msgid "rlim: %lu\n"
+msgid "stime: %s\n"
 msgstr ""
 
-#: linux-nat.c:4994
+#: linux-tdep.c:465
 #, possible-c-format
-msgid "Start of text: 0x%lx\n"
+msgid "utime, children: %s\n"
 msgstr ""
 
-#: linux-nat.c:4996
+#: linux-tdep.c:468
 #, possible-c-format
-msgid "End of text: 0x%lx\n"
+msgid "stime, children: %s\n"
 msgstr ""
 
-#: linux-nat.c:4998
+#: linux-tdep.c:471
 #, possible-c-format
-msgid "Start of stack: 0x%lx\n"
+msgid "jiffies remaining in current time slice: %s\n"
 msgstr ""
 
-#. FIXME arch?
-#: linux-nat.c:5002
+#: linux-tdep.c:475
 #, possible-c-format
-msgid "Kernel stack pointer: 0x%lx\n"
+msgid "'nice' value: %s\n"
 msgstr ""
 
-#. FIXME arch?
-#: linux-nat.c:5004
+#: linux-tdep.c:478
 #, possible-c-format
-msgid "Kernel instr pointer: 0x%lx\n"
+msgid "jiffies until next timeout: %s\n"
 msgstr ""
 
-#: linux-nat.c:5006
+#: linux-tdep.c:481
 #, possible-c-format
-msgid "Pending signals bitmap: 0x%lx\n"
+msgid "jiffies until next SIGALRM: %s\n"
 msgstr ""
 
-#: linux-nat.c:5008
+#: linux-tdep.c:484
 #, possible-c-format
-msgid "Blocked signals bitmap: 0x%lx\n"
+msgid "start time (jiffies since system boot): %s\n"
 msgstr ""
 
-#: linux-nat.c:5010
+#: linux-tdep.c:488
 #, possible-c-format
-msgid "Ignored signals bitmap: 0x%lx\n"
+msgid "Virtual memory size: %s\n"
 msgstr ""
 
-#: linux-nat.c:5012
+#: linux-tdep.c:491
 #, possible-c-format
-msgid "Catched signals bitmap: 0x%lx\n"
+msgid "Resident set size: %s\n"
 msgstr ""
 
-#. FIXME arch?
-#: linux-nat.c:5014
+#: linux-tdep.c:494
 #, possible-c-format
-msgid "wchan (system call): 0x%lx\n"
+msgid "rlim: %s\n"
 msgstr ""
 
-#: linux-nat.c:5237 linux-nat.c:5250
+#: linux-tdep.c:497
 #, possible-c-format
-msgid "Could not parse signal set: %s"
+msgid "Start of text: %s\n"
 msgstr ""
 
-#: linux-nat.c:5284
+#: linux-tdep.c:500
 #, possible-c-format
-msgid "Could not open %s"
-msgstr ""
-
-#: linux-nat.c:5883
-msgid ""
-"Show /proc process information about any running process.\n"
-"Specify any process id, or use the program being debugged by default."
-msgstr ""
-
-#. allow-unknown
-#: linux-nat.c:5889
-msgid "List of mapped memory regions."
-msgstr ""
-
-#: linux-nat.c:5893
-msgid "List process info from /proc/PID/stat."
-msgstr ""
-
-#: linux-nat.c:5897
-msgid "List process info from /proc/PID/status."
-msgstr ""
-
-#: linux-nat.c:5901
-msgid "List current working directory of the process."
-msgstr ""
-
-#: linux-nat.c:5905
-msgid "List command line arguments of the process."
-msgstr ""
-
-#: linux-nat.c:5909
-msgid "List absolute filename for executable of the process."
-msgstr ""
-
-#: linux-nat.c:5913
-msgid "List all available /proc info."
-msgstr ""
-
-#: linux-nat.c:5918
-msgid "Set debugging of GNU/Linux lwp module."
-msgstr ""
-
-#: linux-nat.c:5919
-msgid "Show debugging of GNU/Linux lwp module."
-msgstr ""
-
-#: linux-nat.c:5920
-msgid "Enables printf debugging output."
+msgid "End of text: %s\n"
 msgstr ""
 
-#: linux-record.c:245
-msgid ""
-"The next instruction is syscall exit.  It will make the program exit.  Do "
-"you want to stop the program?"
+#: linux-tdep.c:503
+#, possible-c-format
+msgid "Start of stack: %s\n"
 msgstr ""
 
-#: linux-record.c:492
-msgid ""
-"Process record and replay target doesn't support ioctl request "
-"TIOCSERGSTRUCT\n"
+#: linux-tdep.c:508
+#, possible-c-format
+msgid "Kernel stack pointer: %s\n"
 msgstr ""
 
-#: linux-record.c:498
+#: linux-tdep.c:511
 #, possible-c-format
-msgid "Process record and replay target doesn't support ioctl request 0x%s.\n"
+msgid "Kernel instr pointer: %s\n"
 msgstr ""
 
-#: linux-record.c:677
-msgid ""
-"The next instruction is syscall reboot.  It will restart the computer.  Do "
-"you want to stop the program?"
+#: linux-tdep.c:514
+#, possible-c-format
+msgid "Pending signals bitmap: %s\n"
 msgstr ""
 
-#: linux-record.c:708
+#: linux-tdep.c:517
 #, possible-c-format
-msgid ""
-"The next instruction is syscall munmap.\n"
-"It will free the memory addr = 0x%s len = %u.\n"
-"It will make record target cannot record some memory change.\n"
-"Do you want to stop the program?"
+msgid "Blocked signals bitmap: %s\n"
 msgstr ""
 
-#: linux-record.c:1053
+#: linux-tdep.c:520
 #, possible-c-format
-msgid "Process record and replay target doesn't support socketcall call 0x%s\n"
+msgid "Ignored signals bitmap: %s\n"
 msgstr ""
 
-#. XXX RECORD_SEMCTL still not supported.
-#: linux-record.c:1216
+#: linux-tdep.c:523
 #, possible-c-format
-msgid "Process record and replay target doesn't support ipc number %s\n"
+msgid "Catched signals bitmap: %s\n"
 msgstr ""
 
-#: linux-record.c:1910
-msgid ""
-"The next instruction is syscall exit_group.  It will make the program exit.  "
-"Do you want to stop the program?"
+#: linux-tdep.c:526
+#, possible-c-format
+msgid "wchan (system call): %s\n"
 msgstr ""
 
-#: linux-record.c:2245
+#: linux-thread-db.c:87
 #, possible-c-format
-msgid "Process record and replay target doesn't support syscall number %d\n"
+msgid "Auto-loading of inferior specific libthread_db is %s.\n"
 msgstr ""
 
-#: linux-thread-db.c:97
+#: linux-thread-db.c:111
 #, possible-c-format
 msgid "libthread-db debugging is %s.\n"
 msgstr ""
 
-#: linux-thread-db.c:398
+#: linux-thread-db.c:418
 #, possible-c-format
 msgid "thread_get_info_callback: cannot get thread info: %s"
 msgstr ""
 
-#: linux-thread-db.c:447
+#: linux-thread-db.c:467
 #, possible-c-format
 msgid "Cannot find user-level thread for LWP %ld: %s"
 msgstr ""
 
-#: linux-thread-db.c:506 linux-thread-db.c:1334
+#: linux-thread-db.c:526 linux-thread-db.c:1439
 #, possible-c-format
 msgid "Cannot get thread info: %s"
 msgstr ""
 
-#: linux-thread-db.c:519
+#: linux-thread-db.c:539
 #, possible-c-format
 msgid "Symbol \"%s\" not found in libthread_db: %s"
 msgstr ""
 
-#: linux-thread-db.c:593
+#: linux-thread-db.c:639
 #, possible-c-format
 msgid "Unable to set global thread event mask: %s"
 msgstr ""
 
-#: linux-thread-db.c:607
+#: linux-thread-db.c:653
 #, possible-c-format
 msgid "Unable to get location for thread creation breakpoint: %s"
 msgstr ""
 
-#: linux-thread-db.c:616
+#: linux-thread-db.c:662
 #, possible-c-format
 msgid "Unable to get location for thread death breakpoint: %s"
 msgstr ""
 
-#: linux-thread-db.c:676
+#: linux-thread-db.c:709
+msgid "Warning: couldn't activate thread debugging using libthread_db: "
+msgstr ""
+
+#: linux-thread-db.c:752
 #, possible-c-format
 msgid "Cannot initialize libthread_db: %s"
 msgstr ""
 
-#: linux-thread-db.c:693
+#: linux-thread-db.c:769
 #, possible-c-format
 msgid "td_ta_new failed: %s\n"
 msgstr ""
 
-#: linux-thread-db.c:707
+#: linux-thread-db.c:783
 #, possible-c-format
 msgid "td_ta_new failed: %s"
 msgstr ""
 
-#: linux-thread-db.c:741 sol-thread.c:674
+#: linux-thread-db.c:825 sol-thread.c:672
 msgid "[Thread debugging using libthread_db enabled]\n"
 msgstr ""
 
-#: linux-thread-db.c:751
+#: linux-thread-db.c:835
 #, possible-c-format
 msgid "Using host libthread_db library \"%s\".\n"
 msgstr ""
 
-#: linux-thread-db.c:783
+#: linux-thread-db.c:861
 #, possible-c-format
 msgid "Trying host libthread_db library: %s.\n"
 msgstr ""
 
-#: linux-thread-db.c:789
+#: linux-thread-db.c:867
 #, possible-c-format
 msgid "dlopen failed: %s.\n"
 msgstr ""
 
-#: linux-thread-db.c:803
+#: linux-thread-db.c:881
 #, possible-c-format
 msgid "Host %s resolved to: %s.\n"
 msgstr ""
 
-#: linux-thread-db.c:831
+#: linux-thread-db.c:913
 #, possible-c-format
 msgid "Expected absolute pathname for libpthread in the inferior, but got %s."
 msgstr ""
 
-#: linux-thread-db.c:966
+#: linux-thread-db.c:927
+#, possible-c-format
+msgid "auto-load: Loading libthread-db library \"%s\" from $pdir.\n"
+msgstr ""
+
+#: linux-thread-db.c:999
+#, possible-c-format
+msgid ""
+"auto-load: Loading libthread-db library \"%s\" from explicit directory.\n"
+msgstr ""
+
+#: linux-thread-db.c:1067
 #, possible-c-format
 msgid "thread_db_load_search returning %d\n"
 msgstr ""
 
-#: linux-thread-db.c:1013
+#: linux-thread-db.c:1114
 msgid ""
 "Unable to find libthread_db matching inferior's thread library, thread "
 "debugging will not be available."
 msgstr ""
 
-#: linux-thread-db.c:1210
+#: linux-thread-db.c:1315
 #, possible-c-format
 msgid "Cannot enable thread event reporting for %s: %s"
 msgstr ""
 
-#: linux-thread-db.c:1328
+#: linux-thread-db.c:1433
 #, possible-c-format
 msgid "Cannot get thread event message: %s"
 msgstr ""
 
-#: linux-thread-db.c:1350
+#: linux-thread-db.c:1455
 msgid "Spurious thread death event."
 msgstr ""
 
-#: linux-thread-db.c:1357
+#: linux-thread-db.c:1462
 msgid "Spurious thread event."
 msgstr ""
 
-#: linux-thread-db.c:1462
+#: linux-thread-db.c:1567
 #, possible-c-format
 msgid "find_new_threads_callback: cannot get thread info: %s"
 msgstr ""
 
-#: linux-thread-db.c:1484
+#: linux-thread-db.c:1589
 #, possible-c-format
 msgid "Cannot enable thread event reporting for LWP %d: %s"
 msgstr ""
 
-#: linux-thread-db.c:1553
+#: linux-thread-db.c:1658
 #, possible-c-format
 msgid "Found %d new threads in iteration %d.\n"
 msgstr ""
 
-#: linux-thread-db.c:1595
+#: linux-thread-db.c:1702
 #, possible-c-format
 msgid "Cannot find new threads: %s"
 msgstr ""
 
-#: linux-thread-db.c:1711
+#: linux-thread-db.c:1817
 msgid "No TLS library support"
 msgstr ""
 
-#: linux-thread-db.c:1731
+#: linux-thread-db.c:1837
 msgid "TLS not allocated yet"
 msgstr ""
 
-#: linux-thread-db.c:1752
+#: linux-thread-db.c:1858
 msgid "TLS not supported on this target"
 msgstr ""
 
-#: linux-thread-db.c:1846
+#: linux-thread-db.c:1946
+msgid "'info auto-load libthread-db' does not accept any parameters"
+msgstr ""
+
+#: linux-thread-db.c:2052
+msgid "No auto-loaded libthread-db.\n"
+msgstr ""
+
+#: linux-thread-db.c:2096
 msgid "Set search path for libthread_db."
 msgstr ""
 
-#: linux-thread-db.c:1847
+#: linux-thread-db.c:2097
 msgid "Show the current search path or libthread_db."
 msgstr ""
 
-#: linux-thread-db.c:1848
+#: linux-thread-db.c:2098
 msgid ""
 "This path is used to search for libthread_db to be loaded into gdb itself.\n"
 "Its value is a colon (':') separate list of directories to search.\n"
 "Setting the search path to an empty list resets it to its default value."
 msgstr ""
 
-#: linux-thread-db.c:1858
+#: linux-thread-db.c:2108
 msgid "Set libthread-db debugging."
 msgstr ""
 
-#: linux-thread-db.c:1859
+#: linux-thread-db.c:2109
 msgid "Show libthread-db debugging."
 msgstr ""
 
-#: linux-thread-db.c:1860
+#: linux-thread-db.c:2110
 msgid "When non-zero, libthread-db debugging is enabled."
 msgstr ""
 
-#: lm32-tdep.c:372
+#: linux-thread-db.c:2117
+msgid "Enable or disable auto-loading of inferior specific libthread_db."
+msgstr ""
+
+#: linux-thread-db.c:2118
+msgid "Show whether auto-loading inferior specific libthread_db is enabled."
+msgstr ""
+
+#: linux-thread-db.c:2119
+msgid ""
+"If enabled, libthread_db will be searched in 'set libthread-db-search-path'\n"
+"locations to load libthread_db compatible with the inferior.\n"
+"Standard system libthread_db still gets loaded even with this option off.\n"
+"This options has security implications for untrusted inferiors."
+msgstr ""
+
+#: linux-thread-db.c:2129
+msgid ""
+"Print the list of loaded inferior specific libthread_db.\n"
+"Usage: info auto-load libthread-db"
+msgstr ""
+
+#: lm32-tdep.c:368
 msgid "lm32_store_return_value: type length too large."
 msgstr ""
 
-#: m2-exp.y:332 m2-exp.y:336 m2-exp.y:340 m2-exp.y:344 m2-exp.y:346
+#: m2-exp.y:328 m2-exp.y:332 m2-exp.y:336 m2-exp.y:340 m2-exp.y:342
 msgid "Sets are not implemented."
 msgstr ""
 
-#: m2-exp.y:636
+#: m2-exp.y:639
 msgid "No symbol table is loaded.  Use the \"symbol-file\" command."
 msgstr ""
 
-#: m2-exp.y:695
+#: m2-exp.y:697
 msgid "Floating point numbers must be base 10."
 msgstr ""
 
-#: m2-exp.y:697
+#: m2-exp.y:699
 #, possible-c-format
 msgid "Invalid digit '%c' in number."
 msgstr ""
 
-#: m2-exp.y:705
+#: m2-exp.y:707
 #, possible-c-format
 msgid "Invalid digit '%c' in octal number."
 msgstr ""
 
-#: m2-exp.y:746
+#: m2-exp.y:748
 msgid "Overflow on numeric constant -- number too large."
 msgstr ""
 
-#: m2-exp.y:908
+#: m2-exp.y:910
 msgid "Unterminated string or character constant."
 msgstr ""
 
-#: m2-exp.y:1041
+#: m2-exp.y:1043
 msgid "internal:  Undefined class in m2lex()"
 msgstr ""
 
-#: m2-exp.y:1045
+#: m2-exp.y:1047
 msgid "internal:  Unforseen case in m2lex()"
 msgstr ""
 
-#: m2-exp.y:1048
+#: m2-exp.y:1050
 msgid "unhandled token in m2lex()"
 msgstr ""
 
@@ -13162,7 +14210,7 @@ msgstr ""
 msgid "long_set failed to find discrete bounds for its subtype"
 msgstr ""
 
-#: m2-typeprint.c:419 m2-valprint.c:86
+#: m2-typeprint.c:419 m2-valprint.c:65
 msgid "expecting long_set"
 msgstr ""
 
@@ -13176,21 +14224,24 @@ msgstr ""
 msgid "CASE <variant> OF\n"
 msgstr ""
 
-#: m2-valprint.c:117
+#: m2-valprint.c:96
 msgid "<unknown bounds of set>"
 msgstr ""
 
-#: m2-valprint.c:131
+#: m2-valprint.c:110
 msgid "bit test is out of range"
 msgstr ""
 
-#: m2-valprint.c:602
-msgid "<error value>"
+#. This happens (without TYPE_FLAG_STUB set) on systems which
+#. don't use dbx xrefs (NO_DBX_XREFS in gcc) if a file has a
+#. "struct foo *bar" and no complete type for struct foo in that
+#. file.
+#: m2-valprint.c:418 valprint.c:634 valprint.c:717
+msgid "<incomplete type>"
 msgstr ""
 
-#: m2-valprint.c:665
-#, possible-c-format
-msgid "Invalid m2 type code %d in symbol table."
+#: m2-valprint.c:439
+msgid "<error value>"
 msgstr ""
 
 #: m32c-tdep.c:2250
@@ -13222,85 +14273,85 @@ msgid ""
 "but will most likely not be useful otherwise.\n"
 msgstr ""
 
-#: m32r-rom.c:134
+#: m32r-rom.c:133
 #, possible-c-format
 msgid "Unable to open file %s."
 msgstr ""
 
-#: m32r-rom.c:136
+#: m32r-rom.c:135
 msgid "File is not an object file."
 msgstr ""
 
-#: m32r-rom.c:439
+#: m32r-rom.c:442
 msgid "No ethernet connection!"
 msgstr ""
 
 #. empty
-#: m32r-rom.c:450
+#: m32r-rom.c:453
 msgid "Please use 'set board-address' to set the M32R-EVA board's IP address."
 msgstr ""
 
-#: m32r-rom.c:462
+#: m32r-rom.c:465
 msgid "Couldn't initialize WINSOCK."
 msgstr ""
 
 #. failed?
-#: m32r-rom.c:482
+#: m32r-rom.c:485
 msgid "Need to know gdb host computer's IP address (use 'set server-address')"
 msgstr ""
 
-#: m32r-rom.c:495
+#: m32r-rom.c:498
 msgid "Need to know default download path (use 'set download-path')"
 msgstr ""
 
-#: m32r-rom.c:517
+#: m32r-rom.c:520
 #, possible-c-format
 msgid ""
 "Upload file not found: %s.srec\n"
 "Check IP addresses and download path."
 msgstr ""
 
-#: m32r-rom.c:600
+#: m32r-rom.c:602
 msgid "Set the default path for downloadable SREC files."
 msgstr ""
 
-#: m32r-rom.c:601
+#: m32r-rom.c:603
 msgid "Show the default path for downloadable SREC files."
 msgstr ""
 
-#: m32r-rom.c:602
+#: m32r-rom.c:604
 msgid "Determines the default path for downloadable SREC files."
 msgstr ""
 
-#: m32r-rom.c:609
+#: m32r-rom.c:611
 msgid "Set IP address for M32R-EVA target board."
 msgstr ""
 
-#: m32r-rom.c:610
+#: m32r-rom.c:612
 msgid "Show IP address for M32R-EVA target board."
 msgstr ""
 
-#: m32r-rom.c:611
+#: m32r-rom.c:613
 msgid "Determine the IP address for M32R-EVA target board."
 msgstr ""
 
-#: m32r-rom.c:618
+#: m32r-rom.c:620
 msgid "Set IP address for download server (GDB's host computer)."
 msgstr ""
 
-#: m32r-rom.c:619
+#: m32r-rom.c:621
 msgid "Show IP address for download server (GDB's host computer)."
 msgstr ""
 
-#: m32r-rom.c:620
+#: m32r-rom.c:622
 msgid "Determine the IP address for download server (GDB's host computer)."
 msgstr ""
 
-#: m32r-rom.c:628
+#: m32r-rom.c:630
 msgid "Upload the srec file via the monitor's Ethernet upload capability."
 msgstr ""
 
-#: m32r-rom.c:631
+#: m32r-rom.c:633
 msgid "test upload command."
 msgstr ""
 
@@ -13314,7 +14365,7 @@ msgstr ""
 msgid "return of value > 4 is not supported."
 msgstr ""
 
-#: m68hc11-tdep.c:1321 sh64-tdep.c:1277 sh-tdep.c:1322
+#: m68hc11-tdep.c:1321 sh64-tdep.c:1276 sh-tdep.c:1327
 msgid "bad size for return value"
 msgstr ""
 
@@ -13323,7 +14374,7 @@ msgstr ""
 msgid "m68k_register_name: illegal register number %d"
 msgstr ""
 
-#: m68k-tdep.c:1029
+#: m68k-tdep.c:1028
 msgid "m68k_get_longjmp_target: not implemented"
 msgstr ""
 
@@ -13380,7 +14431,7 @@ msgstr ""
 msgid "Loading debugging symbols from oso: %s\n"
 msgstr ""
 
-#: machoread.c:467 symfile.c:1690 symfile.c:1740
+#: machoread.c:467 symfile.c:1732 symfile.c:1781
 #, possible-c-format
 msgid "`%s': can't read symbols: %s."
 msgstr ""
@@ -13430,7 +14481,7 @@ msgstr ""
 msgid "Could not find specified archive member for OSO name \"%s\""
 msgstr ""
 
-#: machoread.c:764 symfile.c:1682 symfile.c:1728
+#: machoread.c:764 symfile.c:1724 symfile.c:1769
 #, possible-c-format
 msgid "`%s': can't open to read symbols: %s."
 msgstr ""
@@ -13464,73 +14515,73 @@ msgstr ""
 msgid "Relocate section '%s' of %s\n"
 msgstr ""
 
-#: machoread.c:1045
+#: machoread.c:1049
 msgid "Set if printing Mach-O symbols processing."
 msgstr ""
 
-#: machoread.c:1046
+#: machoread.c:1050
 msgid "Show if printing Mach-O symbols processing."
 msgstr ""
 
-#: macrocmd.c:71
+#: macrocmd.c:72
 msgid ""
 "You must follow the `macro expand' command with the expression you\n"
 "want to expand."
 msgstr ""
 
-#: macrocmd.c:105
+#: macrocmd.c:106
 msgid ""
 "You must follow the `macro expand-once' command with the expression\n"
 "you want to expand."
 msgstr ""
 
-#: macrocmd.c:227
+#: macrocmd.c:228
 #, possible-c-format
 msgid ""
 "Unrecognized option '%s' to info macro command.  Try \"help info macro\"."
 msgstr ""
 
-#: macrocmd.c:237
+#: macrocmd.c:238
 msgid ""
 "You must follow the `info macro' command with the name of the macro\n"
 "whose definition you want to see."
 msgstr ""
 
-#: macrocmd.c:370
+#: macrocmd.c:372
 msgid "usage: macro define NAME[(ARGUMENT-LIST)] [REPLACEMENT-LIST]"
 msgstr ""
 
-#: macrocmd.c:380 macrocmd.c:455
+#: macrocmd.c:382 macrocmd.c:457
 msgid "Invalid macro name."
 msgstr ""
 
-#: macrocmd.c:408
+#: macrocmd.c:410
 msgid "Macro is missing an argument."
 msgstr ""
 
-#: macrocmd.c:414
+#: macrocmd.c:416
 msgid "Two macro arguments with identical names."
 msgstr ""
 
-#: macrocmd.c:424
+#: macrocmd.c:426
 msgid "',' or ')' expected at end of macro arguments."
 msgstr ""
 
-#: macrocmd.c:450
+#: macrocmd.c:452
 msgid "usage: macro undef NAME"
 msgstr ""
 
-#: macrocmd.c:498
+#: macrocmd.c:500
 msgid "Prefix for commands dealing with C preprocessor macros."
 msgstr ""
 
-#: macrocmd.c:501
+#: macrocmd.c:503
 msgid ""
 "Fully expand any C/C++ preprocessor macro invocations in EXPRESSION.\n"
 "Show the expanded expression."
 msgstr ""
 
-#: macrocmd.c:506
+#: macrocmd.c:508
 msgid ""
 "Expand C/C++ preprocessor macro invocations appearing directly in "
 "EXPRESSION.\n"
@@ -13545,7 +14596,7 @@ msgid ""
 "expression work together to yield a pre-processed expression."
 msgstr ""
 
-#: macrocmd.c:521
+#: macrocmd.c:523
 msgid ""
 "Show the definition of MACRO, and it's source location.\n"
 "Usage: info macro [-a|-all] [--] MACRO\n"
@@ -13555,14 +14606,14 @@ msgid ""
 "  --           Specify the end of arguments and the beginning of the MACRO."
 msgstr ""
 
-#: macrocmd.c:531
+#: macrocmd.c:533
 msgid ""
 "Show the definitions of all macros at LINESPEC, or the current source "
 "location.\n"
 "Usage: info macros [LINESPEC]"
 msgstr ""
 
-#: macrocmd.c:536
+#: macrocmd.c:538
 msgid ""
 "Define a new C/C++ preprocessor macro.\n"
 "The GDB command `macro define DEFINITION' is equivalent to placing a\n"
@@ -13573,62 +14624,62 @@ msgid ""
 "  (gdb) macro define MIN(x,y) ((x) < (y) ? (x) : (y))"
 msgstr ""
 
-#: macrocmd.c:546
+#: macrocmd.c:548
 msgid ""
 "Remove the definition of the C/C++ preprocessor macro with the given name."
 msgstr ""
 
-#: macrocmd.c:551
+#: macrocmd.c:553
 msgid "List all the macros defined using the `macro define' command."
 msgstr ""
 
-#: macroexp.c:235
+#: macroexp.c:246
 msgid "Unterminated comment in macro expansion."
 msgstr ""
 
-#: macroexp.c:347
+#: macroexp.c:358
 msgid "A character constant must contain at least one character."
 msgstr ""
 
-#: macroexp.c:404
+#: macroexp.c:415
 msgid "Newline characters may not appear in string constants."
 msgstr ""
 
-#: macroexp.c:635
+#: macroexp.c:646
 msgid "unable to avoid splicing tokens during macro expansion"
 msgstr ""
 
-#: macroexp.c:811
+#: macroexp.c:838
 #, possible-c-format
 msgid "Malformed argument list for macro `%s'."
 msgstr ""
 
-#: macroexp.c:982
+#: macroexp.c:1009
 msgid "Stringification operator requires an argument."
 msgstr ""
 
-#: macroexp.c:987
+#: macroexp.c:1014
 msgid "Argument to stringification operator must name a macro parameter."
 msgstr ""
 
-#: macroexp.c:1001
+#: macroexp.c:1028
 msgid "Stray splicing operator"
 msgstr ""
 
-#: macroexp.c:1033
+#: macroexp.c:1060
 msgid "Splicing operator at end of macro"
 msgstr ""
 
-#: macroexp.c:1242
+#: macroexp.c:1269
 #, possible-c-format
 msgid "Wrong number of arguments to macro `%s' (expected %d, got %d)."
 msgstr ""
 
-#: macroexp.c:1276
+#: macroexp.c:1303
 msgid "bad macro definition kind"
 msgstr ""
 
-#: macroexp.c:1408
+#: macroexp.c:1435
 msgid "Expand-once not implemented yet."
 msgstr ""
 
@@ -13639,86 +14690,91 @@ msgid ""
 "is not covered in the compilation unit's macro information"
 msgstr ""
 
-#: macrotab.c:473
+#: macrotab.c:474
 #, possible-c-format
 msgid "both `%s' and `%s' allegedly #included at %s:%d"
 msgstr ""
 
-#: macrotab.c:733
+#: macrotab.c:734
 #, possible-c-format
 msgid "macro `%s' redefined at %s:%d; original definition at %s:%d"
 msgstr ""
 
-#: macrotab.c:836
+#: macrotab.c:857
 #, possible-c-format
 msgid "macro '%s' is #undefined twice, at %s:%d and %s:%d"
 msgstr ""
 
-#: macrotab.c:856
+#: macrotab.c:877
 #, possible-c-format
 msgid "no definition for macro `%s' in scope to #undef at %s:%d"
 msgstr ""
 
-#: main.c:345
+#: main.c:353
 #, possible-c-format
 msgid "%s: warning: error finding working directory: %s\n"
 msgstr ""
 
-#: main.c:504
+#: main.c:518
 #, possible-c-format
 msgid "%s: TUI mode is not supported\n"
 msgstr ""
 
-#: main.c:579
+#: main.c:601
 #, possible-c-format
 msgid "%s: unable to load tclcommand file \"%s\""
 msgstr ""
 
-#: main.c:627
+#: main.c:653
 #, possible-c-format
 msgid "warning: could not set baud rate to `%s'.\n"
 msgstr ""
 
-#: main.c:644
+#: main.c:670
 #, possible-c-format
 msgid "warning: could not set timeout limit to `%s'.\n"
 msgstr ""
 
-#: main.c:653
+#: main.c:679
 #, possible-c-format
 msgid "Use `%s --help' for a complete list of options.\n"
 msgstr ""
 
-#: main.c:684
+#: main.c:710
 #, possible-c-format
 msgid "%s: `--args' specified but no program specified\n"
 msgstr ""
 
-#: main.c:721
+#: main.c:747
 #, possible-c-format
 msgid "Excess command line arguments ignored. (%s%s)\n"
 msgstr ""
 
-#: main.c:777
+#: main.c:803
 #, possible-c-format
 msgid "Interpreter `%s' unrecognized"
 msgstr ""
 
-#: main.c:808
+#: main.c:834
 msgid ""
 "\n"
 "warning: "
 msgstr ""
 
-#: main.c:864
+#: main.c:904
 msgid "Can't attach to process and specify a core file at the same time."
 msgstr ""
 
-#: main.c:897
+#: main.c:937
 msgid "warning: "
 msgstr ""
 
-#: main.c:971
+#: main.c:947
+#, possible-c-format
+msgid "auto-load: Loading .gdbinit file \"%s\".\n"
+msgstr ""
+
+#: main.c:1028
 msgid ""
 "This is the GNU debugger.  Usage:\n"
 "\n"
@@ -13729,12 +14785,12 @@ msgid ""
 "\n"
 msgstr ""
 
-#: main.c:977
+#: main.c:1034
 msgid ""
 "  --args             Arguments after executable-file are passed to inferior\n"
 msgstr ""
 
-#: main.c:980
+#: main.c:1037
 msgid ""
 "  -b BAUDRATE        Set serial port baud rate used for remote debugging.\n"
 "  --batch            Exit after processing options.\n"
@@ -13747,11 +14803,13 @@ msgid ""
 "                     Execute a single GDB command.\n"
 "                     May be used multiple times and in conjunction\n"
 "                     with --command.\n"
+"  --init-command=FILE, -ix Like -x but execute it before loading inferior.\n"
+"  --init-eval-command=COMMAND, -iex Like -ex but before loading inferior.\n"
 "  --core=COREFILE    Analyze the core dump COREFILE.\n"
 "  --pid=PID          Attach to running process PID.\n"
 msgstr ""
 
-#: main.c:995
+#: main.c:1054
 msgid ""
 "  --dbx              DBX compatibility mode.\n"
 "  --directory=DIR    Search for source files in DIR.\n"
@@ -13761,27 +14819,27 @@ msgid ""
 "  --help             Print this message.\n"
 msgstr ""
 
-#: main.c:1003
+#: main.c:1062
 msgid ""
 "  --interpreter=INTERP\n"
 "                     Select a specific interpreter / user interface\n"
 msgstr ""
 
-#: main.c:1007
+#: main.c:1066
 msgid ""
 "  -l TIMEOUT         Set timeout in seconds for remote debugging.\n"
 "  --nw\t\t     Do not use a window interface.\n"
 "  --nx               Do not read "
 msgstr ""
 
-#: main.c:1012
+#: main.c:1071
 msgid ""
 " file.\n"
 "  --quiet            Do not print version number on startup.\n"
 "  --readnow          Fully read symbol files on first access.\n"
 msgstr ""
 
-#: main.c:1016
+#: main.c:1075
 msgid ""
 "  --se=FILE          Use FILE as symbol file and executable file.\n"
 "  --symbols=SYMFILE  Read symbols from SYMFILE.\n"
@@ -13789,11 +14847,17 @@ msgid ""
 "debugged.\n"
 msgstr ""
 
-#: main.c:1022
+#: main.c:1081
 msgid "  --tui              Use a terminal user interface.\n"
 msgstr ""
 
-#: main.c:1026
+#: main.c:1085
+msgid ""
+"  --use-deprecated-index-sections\n"
+"                     Do not reject deprecated .gdb_index sections.\n"
+msgstr ""
+
+#: main.c:1089
 msgid ""
 "  --version          Print version information and then exit.\n"
 "  -w                 Use a window interface.\n"
@@ -13801,35 +14865,35 @@ msgid ""
 "  --xdb              XDB compatibility mode.\n"
 msgstr ""
 
-#: main.c:1032
+#: main.c:1095
 msgid ""
 "\n"
 "At startup, GDB reads the following init files and executes their commands:\n"
 msgstr ""
 
-#: main.c:1036
+#: main.c:1099
 #, possible-c-format
 msgid "   * system-wide init file: %s\n"
 msgstr ""
 
-#: main.c:1040
+#: main.c:1103
 #, possible-c-format
 msgid "   * user-specific init file: %s\n"
 msgstr ""
 
-#: main.c:1044
+#: main.c:1107
 #, possible-c-format
-msgid "   * local init file: ./%s\n"
+msgid "   * local init file (see also 'set auto-load local-gdbinit'): ./%s\n"
 msgstr ""
 
-#: main.c:1047
+#: main.c:1110
 msgid ""
 "\n"
 "For more information, type \"help\" from within GDB, or consult the\n"
 "GDB manual (available as on-line info or a printed manual).\n"
 msgstr ""
 
-#: main.c:1052
+#: main.c:1115
 #, possible-c-format
 msgid "Report bugs to \"%s\".\n"
 msgstr ""
@@ -14447,7 +15511,7 @@ msgid ""
 "memory addresses will be allowed."
 msgstr ""
 
-#: mem-break.c:54 microblaze-linux-tdep.c:53 ppc-linux-tdep.c:210
+#: mem-break.c:56 microblaze-linux-tdep.c:53 ppc-linux-tdep.c:222
 msgid "Software breakpoints not implemented for this target."
 msgstr ""
 
@@ -14500,89 +15564,89 @@ msgstr ""
 msgid "-break-insert: Garbage following <location>"
 msgstr ""
 
-#: mi/mi-cmd-break.c:191
+#: mi/mi-cmd-break.c:192
 msgid "Usage: tracepoint-number passcount"
 msgstr ""
 
-#: mi/mi-cmd-break.c:204
+#: mi/mi-cmd-break.c:205
 #, possible-c-format
 msgid "Could not find tracepoint %d"
 msgstr ""
 
-#: mi/mi-cmd-break.c:252
+#: mi/mi-cmd-break.c:253
 msgid "-break-watch: Missing <expression>"
 msgstr ""
 
-#: mi/mi-cmd-break.c:254
+#: mi/mi-cmd-break.c:255
 msgid "-break-watch: Garbage following <expression>"
 msgstr ""
 
-#: mi/mi-cmd-break.c:270
+#: mi/mi-cmd-break.c:271
 msgid "-break-watch: Unknown watchpoint type."
 msgstr ""
 
-#: mi/mi-cmd-break.c:301
+#: mi/mi-cmd-break.c:302
 #, possible-c-format
 msgid "USAGE: %s <BKPT> [<COMMAND> [<COMMAND>...]]"
 msgstr ""
 
-#: mi/mi-cmd-break.c:305
+#: mi/mi-cmd-break.c:306
 #, possible-c-format
 msgid "breakpoint number argument \"%s\" is not a number."
 msgstr ""
 
-#: mi/mi-cmd-break.c:308
+#: mi/mi-cmd-break.c:309
 #, possible-c-format
 msgid "junk at the end of breakpoint number argument \"%s\"."
 msgstr ""
 
-#: mi/mi-cmd-break.c:313
+#: mi/mi-cmd-break.c:314
 #, possible-c-format
 msgid "breakpoint %d not found."
 msgstr ""
 
-#: mi/mi-cmd-disas.c:136
+#: mi/mi-cmd-disas.c:137
 msgid ""
 "-data-disassemble: Usage: ( [-f filename -l linenum [-n howmany]] | [-s "
 "startaddr -e endaddr]) [--] mode."
 msgstr ""
 
-#: mi/mi-cmd-disas.c:140
+#: mi/mi-cmd-disas.c:141
 msgid ""
 "-data-disassemble: Usage: [-f filename -l linenum [-n howmany]] [-s "
 "startaddr -e endaddr] [--] mode."
 msgstr ""
 
-#: mi/mi-cmd-disas.c:145
+#: mi/mi-cmd-disas.c:146
 msgid "-data-disassemble: Mode argument must be 0, 1, 2, or 3."
 msgstr ""
 
-#: mi/mi-cmd-disas.c:162
+#: mi/mi-cmd-disas.c:163
 msgid "-data-disassemble: Invalid filename."
 msgstr ""
 
-#: mi/mi-cmd-disas.c:164
+#: mi/mi-cmd-disas.c:165
 msgid "-data-disassemble: Invalid line number"
 msgstr ""
 
-#: mi/mi-cmd-disas.c:166
+#: mi/mi-cmd-disas.c:167
 msgid "-data-disassemble: No function contains specified address"
 msgstr ""
 
-#: mi/mi-cmd-env.c:74
-msgid "-environment-pwd: No arguments required"
+#: mi/mi-cmd-env.c:75
+msgid "-environment-pwd: No arguments allowed"
 msgstr ""
 
-#: mi/mi-cmd-env.c:85
+#: mi/mi-cmd-env.c:86
 #, possible-c-format
 msgid "-environment-pwd: error finding name of working directory: %s"
 msgstr ""
 
-#: mi/mi-cmd-env.c:96
+#: mi/mi-cmd-env.c:98
 msgid "-environment-cd: Usage DIRECTORY"
 msgstr ""
 
-#: mi/mi-cmd-env.c:260
+#: mi/mi-cmd-env.c:266
 msgid "-inferior-tty-show: Usage: No args"
 msgstr ""
 
@@ -14594,51 +15658,55 @@ msgstr ""
 msgid "-file-list-exec-source-file: No symtab"
 msgstr ""
 
-#: mi/mi-cmd-file.c:90
+#: mi/mi-cmd-file.c:91
 msgid "-file-list-exec-source-files: Usage: No args"
 msgstr ""
 
-#: mi/mi-cmd-stack.c:57
+#: mi/mi-cmd-info.c:35
+msgid "Usage: -info-os [INFOTYPE]"
+msgstr ""
+
+#: mi/mi-cmd-stack.c:58
 msgid "-stack-list-frames: Usage: [FRAME_LOW FRAME_HIGH]"
 msgstr ""
 
-#: mi/mi-cmd-stack.c:80
+#: mi/mi-cmd-stack.c:81
 msgid "-stack-list-frames: Not enough frames in stack."
 msgstr ""
 
-#: mi/mi-cmd-stack.c:107
+#: mi/mi-cmd-stack.c:108
 msgid "-stack-info-depth: Usage: [MAX_DEPTH]"
 msgstr ""
 
-#: mi/mi-cmd-stack.c:137
+#: mi/mi-cmd-stack.c:138
 #, possible-c-format
 msgid ""
 "Unknown value for PRINT_VALUES: must be: 0 or \"%s\", 1 or \"%s\", 2 or \"%s"
 "\""
 msgstr ""
 
-#: mi/mi-cmd-stack.c:151
+#: mi/mi-cmd-stack.c:153
 msgid "-stack-list-locals: Usage: PRINT_VALUES"
 msgstr ""
 
-#: mi/mi-cmd-stack.c:173
+#: mi/mi-cmd-stack.c:176
 msgid "-stack-list-arguments: Usage: PRINT_VALUES [FRAME_LOW FRAME_HIGH]"
 msgstr ""
 
-#: mi/mi-cmd-stack.c:199
+#: mi/mi-cmd-stack.c:202
 msgid "-stack-list-arguments: Not enough frames in stack."
 msgstr ""
 
-#: mi/mi-cmd-stack.c:232
+#: mi/mi-cmd-stack.c:236
 msgid "Usage: PRINT_VALUES"
 msgstr ""
 
-#: mi/mi-cmd-stack.c:440
+#: mi/mi-cmd-stack.c:447
 msgid "-stack-select-frame: Usage: FRAME_SPEC"
 msgstr ""
 
-#: mi/mi-cmd-stack.c:449
-msgid "-stack-info-frame: No arguments required"
+#: mi/mi-cmd-stack.c:456
+msgid "-stack-info-frame: No arguments allowed"
 msgstr ""
 
 #: mi/mi-cmd-target.c:40
@@ -14653,152 +15721,154 @@ msgstr ""
 msgid "-target-file-delete: Usage: REMOTE_FILE"
 msgstr ""
 
-#. mi_error_message = xstrprintf ("-var-create: Usage:
-#. ...."); return MI_CMD_ERROR;
-#: mi/mi-cmd-var.c:115
+#: mi/mi-cmd-var.c:112
 msgid "-var-create: Usage: NAME FRAME EXPRESSION."
 msgstr ""
 
-#: mi/mi-cmd-var.c:135
+#: mi/mi-cmd-var.c:131
 msgid "-var-create: name of object must begin with a letter"
 msgstr ""
 
-#: mi/mi-cmd-var.c:155
+#: mi/mi-cmd-var.c:151
 msgid "-var-create: unable to create variable object"
 msgstr ""
 
-#: mi/mi-cmd-var.c:175
+#: mi/mi-cmd-var.c:171
 msgid "-var-delete: Usage: [-c] EXPRESSION."
 msgstr ""
 
-#: mi/mi-cmd-var.c:187
+#: mi/mi-cmd-var.c:183
 msgid "-var-delete: Missing required argument after '-c': variable object name"
 msgstr ""
 
-#: mi/mi-cmd-var.c:190
+#: mi/mi-cmd-var.c:186
 msgid "-var-delete: Illegal variable object name"
 msgstr ""
 
-#: mi/mi-cmd-var.c:198
+#: mi/mi-cmd-var.c:194
 msgid "-var-delete: Invalid option."
 msgstr ""
 
-#: mi/mi-cmd-var.c:240
+#: mi/mi-cmd-var.c:236
 msgid ""
 "Must specify the format as: \"natural\", \"binary\", \"decimal\", "
 "\"hexadecimal\", or \"octal\""
 msgstr ""
 
-#: mi/mi-cmd-var.c:253
+#: mi/mi-cmd-var.c:249
 msgid "-var-set-format: Usage: NAME FORMAT."
 msgstr ""
 
-#: mi/mi-cmd-var.c:278
+#: mi/mi-cmd-var.c:274
 msgid "Usage: NAME VISUALIZER_FUNCTION."
 msgstr ""
 
-#: mi/mi-cmd-var.c:283 varobj.c:734
+#: mi/mi-cmd-var.c:279 varobj.c:806
 msgid "Variable object not found"
 msgstr ""
 
-#: mi/mi-cmd-var.c:295
+#: mi/mi-cmd-var.c:291
 msgid "-var-set-format: Usage: NAME FROZEN_FLAG."
 msgstr ""
 
-#: mi/mi-cmd-var.c:304
+#: mi/mi-cmd-var.c:300
 msgid "Invalid flag value"
 msgstr ""
 
-#: mi/mi-cmd-var.c:322
+#: mi/mi-cmd-var.c:317
 msgid "-var-show-format: Usage: NAME."
 msgstr ""
 
-#: mi/mi-cmd-var.c:340
+#: mi/mi-cmd-var.c:335
 msgid "-var-info-num-children: Usage: NAME."
 msgstr ""
 
-#: mi/mi-cmd-var.c:363
+#: mi/mi-cmd-var.c:358
 #, possible-c-format
 msgid ""
 "Unknown value for PRINT_VALUES\n"
 "Must be: 0 or \"%s\", 1 or \"%s\", 2 or \"%s\""
 msgstr ""
 
-#: mi/mi-cmd-var.c:413
+#: mi/mi-cmd-var.c:408
 msgid "-var-list-children: Usage: [PRINT_VALUES] NAME [FROM TO]"
 msgstr ""
 
-#: mi/mi-cmd-var.c:480
+#: mi/mi-cmd-var.c:475
 msgid "-var-info-type: Usage: NAME."
 msgstr ""
 
-#: mi/mi-cmd-var.c:496
+#: mi/mi-cmd-var.c:491
 msgid "Usage: NAME."
 msgstr ""
 
-#: mi/mi-cmd-var.c:514
+#: mi/mi-cmd-var.c:509
 msgid "-var-info-expression: Usage: NAME."
 msgstr ""
 
-#: mi/mi-cmd-var.c:534
+#: mi/mi-cmd-var.c:529
 msgid "-var-show-attributes: Usage: NAME."
 msgstr ""
 
-#: mi/mi-cmd-var.c:585
+#: mi/mi-cmd-var.c:580
 msgid "Cannot specify format more than once"
 msgstr ""
 
-#: mi/mi-cmd-var.c:594
+#: mi/mi-cmd-var.c:589
 msgid "Usage: [-f FORMAT] NAME"
 msgstr ""
 
-#: mi/mi-cmd-var.c:597
+#: mi/mi-cmd-var.c:592
 msgid "Garbage at end of command"
 msgstr ""
 
-#: mi/mi-cmd-var.c:626
+#: mi/mi-cmd-var.c:621
 msgid "-var-assign: Usage: NAME EXPRESSION."
 msgstr ""
 
-#: mi/mi-cmd-var.c:632
+#: mi/mi-cmd-var.c:627
 msgid "-var-assign: Variable object is not editable"
 msgstr ""
 
-#: mi/mi-cmd-var.c:637
+#: mi/mi-cmd-var.c:632
 msgid "-var-assign: Could not assign expression to variable object"
 msgstr ""
 
-#: mi/mi-cmd-var.c:689
+#: mi/mi-cmd-var.c:684
 msgid "-var-update: Usage: [PRINT_VALUES] NAME."
 msgstr ""
 
-#: mi/mi-cmd-var.c:837
+#: mi/mi-cmd-var.c:832
 msgid "-enable-pretty-printing: no arguments allowed"
 msgstr ""
 
-#: mi/mi-cmd-var.c:848
+#: mi/mi-cmd-var.c:844
 msgid "-var-set-update-range: Usage: VAROBJ FROM TO"
 msgstr ""
 
-#: mi/mi-cmds.c:218
+#: mi/mi-cmds.c:220
 #, possible-c-format
 msgid "command `%s' appears to be duplicated"
 msgstr ""
 
-#: mi/mi-console.c:68
+#: mi/mi-console.c:76
 msgid "mi_console_file_delete: bad magic number"
 msgstr ""
 
-#: mi/mi-console.c:98
-msgid "mi_console_file_transform: bad magic number"
+#: mi/mi-console.c:106
+msgid "mi_console_raw_packet: bad magic number"
 msgstr ""
 
-#: mi/mi-console.c:126
+#: mi/mi-console.c:134
 msgid "mi_console_file_flush: bad magic number"
 msgstr ""
 
+#: mi/mi-console.c:152
+msgid "mi_console_file_set_raw: bad magic number"
+msgstr ""
+
 #: mi/mi-getopt.c:36
-msgid "mi_getopt_long: optind out of bounds"
+msgid "mi_getopt_long: oind out of bounds"
 msgstr ""
 
 #: mi/mi-getopt.c:62
@@ -14811,16 +15881,16 @@ msgstr ""
 msgid "%s: Unknown option ``%s''"
 msgstr ""
 
-#: mi/mi-interp.c:219
+#: mi/mi-interp.c:227
 msgid "-interpreter-exec: Usage: -interpreter-exec interp command"
 msgstr ""
 
-#: mi/mi-interp.c:224
+#: mi/mi-interp.c:232
 #, possible-c-format
 msgid "-interpreter-exec: could not find interpreter \"%s\""
 msgstr ""
 
-#: mi/mi-interp.c:228
+#: mi/mi-interp.c:236
 #, possible-c-format
 msgid ""
 "-interpreter-exec: interpreter \"%s\" does not support command execution"
@@ -14835,240 +15905,240 @@ msgstr ""
 msgid "Target %s does not support this command."
 msgstr ""
 
-#: mi/mi-main.c:421
+#: mi/mi-main.c:422
 msgid "Usage: -target-detach [pid | thread-group]"
 msgstr ""
 
-#: mi/mi-main.c:436
+#: mi/mi-main.c:437
 #, possible-c-format
 msgid "Invalid syntax of thread-group id '%s'"
 msgstr ""
 
-#: mi/mi-main.c:440
+#: mi/mi-main.c:441
 #, possible-c-format
 msgid "Non-existent thread-group id '%d'"
 msgstr ""
 
-#: mi/mi-main.c:450
+#: mi/mi-main.c:451
 #, possible-c-format
 msgid "Invalid identifier '%s'"
 msgstr ""
 
-#: mi/mi-main.c:457
+#: mi/mi-main.c:458
 msgid "Thread group is empty"
 msgstr ""
 
-#: mi/mi-main.c:472
+#: mi/mi-main.c:473
 msgid "-thread-select: USAGE: threadnum."
 msgstr ""
 
-#: mi/mi-main.c:490
+#: mi/mi-main.c:491
 msgid "-thread-list-ids: No arguments required."
 msgstr ""
 
-#: mi/mi-main.c:505 mi/mi-main.c:2515
+#: mi/mi-main.c:506 mi/mi-main.c:2512
 msgid "Invalid MI command"
 msgstr ""
 
-#: mi/mi-main.c:831
+#: mi/mi-main.c:835
 msgid "only '0' and '1' are valid values for the '--recurse' option"
 msgstr ""
 
-#: mi/mi-main.c:843 mi/mi-main.c:848
+#: mi/mi-main.c:847 mi/mi-main.c:852
 #, possible-c-format
 msgid "invalid syntax of group id '%s'"
 msgstr ""
 
-#: mi/mi-main.c:869
+#: mi/mi-main.c:873
 #, possible-c-format
 msgid "Non-existent thread group id '%d'"
 msgstr ""
 
-#: mi/mi-main.c:932 mi/mi-main.c:1010 mi/mi-main.c:1110 mi/mi-main.c:1225
+#: mi/mi-main.c:937 mi/mi-main.c:1018 mi/mi-main.c:1122 mi/mi-main.c:1238
 msgid "bad register number"
 msgstr ""
 
-#: mi/mi-main.c:985 mi/mi-main.c:1004
+#: mi/mi-main.c:993 mi/mi-main.c:1012
 msgid "-data-list-changed-registers: Unable to read register contents."
 msgstr ""
 
-#: mi/mi-main.c:1067
+#: mi/mi-main.c:1078
 msgid ""
 "-data-list-register-values: Usage: -data-list-register-values <format> "
 "[<regnum1>...<regnumN>]"
 msgstr ""
 
-#: mi/mi-main.c:1134
+#: mi/mi-main.c:1142
 msgid "Optimized out"
 msgstr ""
 
-#: mi/mi-main.c:1193
+#: mi/mi-main.c:1206
 msgid ""
 "-data-write-register-values: Usage: -data-write-register-values <format> "
 "[<regnum1> <value1>...<regnumN> <valueN>]"
 msgstr ""
 
-#: mi/mi-main.c:1199
+#: mi/mi-main.c:1212
 msgid "-data-write-register-values: No registers."
 msgstr ""
 
-#: mi/mi-main.c:1202
+#: mi/mi-main.c:1215
 msgid "-data-write-register-values: No regs and values specified."
 msgstr ""
 
-#: mi/mi-main.c:1205
+#: mi/mi-main.c:1218
 msgid "-data-write-register-values: Regs and vals are not in pairs."
 msgstr ""
 
-#: mi/mi-main.c:1247
+#: mi/mi-main.c:1260
 msgid "-data-evaluate-expression: Usage: -data-evaluate-expression expression"
 msgstr ""
 
-#: mi/mi-main.c:1335
+#: mi/mi-main.c:1344
 msgid ""
 "-data-read-memory: Usage: ADDR WORD-FORMAT WORD-SIZE NR-ROWS NR-COLS "
 "[ASCHAR]."
 msgstr ""
 
-#: mi/mi-main.c:1372
+#: mi/mi-main.c:1381
 msgid "-data-read-memory: invalid number of rows."
 msgstr ""
 
-#: mi/mi-main.c:1377
+#: mi/mi-main.c:1386
 msgid "-data-read-memory: invalid number of columns."
 msgstr ""
 
-#: mi/mi-main.c:1396 mi/mi-main.c:1530
+#: mi/mi-main.c:1405 mi/mi-main.c:1537
 msgid "Unable to read memory."
 msgstr ""
 
-#: mi/mi-main.c:1520
+#: mi/mi-main.c:1527
 msgid "Usage: [ -o OFFSET ] ADDR LENGTH."
 msgstr ""
 
-#: mi/mi-main.c:1622
+#: mi/mi-main.c:1629
 msgid ""
 "-data-write-memory: Usage: [-o COLUMN_OFFSET] ADDR FORMAT WORD-SIZE VALUE."
 msgstr ""
 
-#: mi/mi-main.c:1663
+#: mi/mi-main.c:1671
 msgid "Usage: ADDR DATA."
 msgstr ""
 
-#: mi/mi-main.c:1681
+#: mi/mi-main.c:1689
 msgid "Could not write memory"
 msgstr ""
 
-#: mi/mi-main.c:1707
+#: mi/mi-main.c:1714
 #, possible-c-format
 msgid "-enable-timings: Usage: %s {yes|no}"
 msgstr ""
 
-#: mi/mi-main.c:1734
+#: mi/mi-main.c:1741
 msgid "-list-features should be passed no arguments"
 msgstr ""
 
-#: mi/mi-main.c:1755
+#: mi/mi-main.c:1762
 msgid "-list-target-features should be passed no arguments"
 msgstr ""
 
-#: mi/mi-main.c:1764
+#: mi/mi-main.c:1771
 msgid "-add-inferior should be passed no arguments"
 msgstr ""
 
-#: mi/mi-main.c:1790
+#: mi/mi-main.c:1797
 msgid "-remove-inferior should be passed a single argument"
 msgstr ""
 
-#: mi/mi-main.c:1793
+#: mi/mi-main.c:1800
 msgid "the thread group id is syntactically invalid"
 msgstr ""
 
-#: mi/mi-main.c:1797
+#: mi/mi-main.c:1804
 msgid "the specified thread group does not exist"
 msgstr ""
 
-#: mi/mi-main.c:1800
+#: mi/mi-main.c:1807
 msgid "cannot remove an active inferior"
 msgstr ""
 
-#: mi/mi-main.c:1809
+#: mi/mi-main.c:1816
 msgid "Cannot remove last inferior"
 msgstr ""
 
-#: mi/mi-main.c:2043
+#: mi/mi-main.c:2041
 msgid "Cannot specify --thread-group together with --all"
 msgstr ""
 
-#: mi/mi-main.c:2046
+#: mi/mi-main.c:2044
 msgid "Cannot specify --thread together with --all"
 msgstr ""
 
-#: mi/mi-main.c:2049
+#: mi/mi-main.c:2047
 msgid "Cannot specify --thread together with --thread-group"
 msgstr ""
 
-#: mi/mi-main.c:2052
+#: mi/mi-main.c:2050
 msgid "Cannot specify --frame without --thread"
 msgstr ""
 
-#: mi/mi-main.c:2060
+#: mi/mi-main.c:2058
 msgid "Invalid thread group for the --thread-group option"
 msgstr ""
 
-#: mi/mi-main.c:2078
+#: mi/mi-main.c:2077
 #, possible-c-format
 msgid "Invalid thread id: %d"
 msgstr ""
 
-#: mi/mi-main.c:2081
+#: mi/mi-main.c:2080
 #, possible-c-format
 msgid "Thread id: %d has terminated"
 msgstr ""
 
-#: mi/mi-main.c:2096
+#: mi/mi-main.c:2095
 #, possible-c-format
 msgid "Invalid frame id: %d"
 msgstr ""
 
-#: mi/mi-main.c:2342
+#: mi/mi-main.c:2341
 msgid "Usage: -trace-define-variable VARIABLE [VALUE]"
 msgstr ""
 
-#: mi/mi-main.c:2356
+#: mi/mi-main.c:2355
 msgid "Invalid name of trace variable"
 msgstr ""
 
-#: mi/mi-main.c:2374
-msgid "-trace-list-variables: no arguments are allowed"
+#: mi/mi-main.c:2373
+msgid "-trace-list-variables: no arguments allowed"
 msgstr ""
 
-#: mi/mi-main.c:2385
+#: mi/mi-main.c:2384
 msgid "trace selection mode is required"
 msgstr ""
 
-#: mi/mi-main.c:2396 tracepoint.c:2335 tracepoint.c:2393 tracepoint.c:2411
-#: tracepoint.c:2450 tracepoint.c:2514 tracepoint.c:2547
+#: mi/mi-main.c:2395 tracepoint.c:2370 tracepoint.c:2428 tracepoint.c:2446
+#: tracepoint.c:2485 tracepoint.c:2549 tracepoint.c:2582
 msgid "May not look at trace frames while trace is running."
 msgstr ""
 
-#: mi/mi-main.c:2401
+#: mi/mi-main.c:2400
 msgid "frame number is required"
 msgstr ""
 
-#: mi/mi-main.c:2407
+#: mi/mi-main.c:2406
 msgid "tracepoint number is required"
 msgstr ""
 
-#: mi/mi-main.c:2413
+#: mi/mi-main.c:2412
 msgid "PC is required"
 msgstr ""
 
-#: mi/mi-main.c:2419 mi/mi-main.c:2426
+#: mi/mi-main.c:2418 mi/mi-main.c:2425
 msgid "Start and end PC are required"
 msgstr ""
 
-#: mi/mi-main.c:2438
+#: mi/mi-main.c:2437
 msgid "Line is required"
 msgstr ""
 
@@ -15081,51 +16151,51 @@ msgstr ""
 msgid "Invalid mode '%s'"
 msgstr ""
 
-#: mi/mi-main.c:2471
+#: mi/mi-main.c:2469
 msgid "Usage: -trace-save [-r] filename"
 msgstr ""
 
-#: mi/mi-main.c:2479
+#: mi/mi-main.c:2477
 #, possible-c-format
 msgid "Invalid option: %s"
 msgstr ""
 
-#: mi/mi-parse.c:286
+#: mi/mi-parse.c:284
 #, possible-c-format
 msgid "Undefined MI command: %s"
 msgstr ""
 
-#: mi/mi-parse.c:320
+#: mi/mi-parse.c:318
 msgid "Duplicate '--thread-group' option"
 msgstr ""
 
-#: mi/mi-parse.c:323
+#: mi/mi-parse.c:321
 msgid "Invalid thread group id"
 msgstr ""
 
-#: mi/mi-parse.c:331
+#: mi/mi-parse.c:329
 msgid "Duplicate '--thread' option"
 msgstr ""
 
-#: mi/mi-parse.c:339
+#: mi/mi-parse.c:337
 msgid "Duplicate '--frame' option"
 msgstr ""
 
-#: mi/mi-parse.c:347
+#: mi/mi-parse.c:345
 #, possible-c-format
 msgid "Invalid value for the '%s' option"
 msgstr ""
 
-#: mi/mi-parse.c:358
+#: mi/mi-parse.c:356
 #, possible-c-format
 msgid "Problem parsing arguments: %s %s"
 msgstr ""
 
-#: mi/mi-symbol-cmds.c:42
+#: mi/mi-symbol-cmds.c:40
 msgid "-symbol-list-lines: Usage: SOURCE_FILENAME"
 msgstr ""
 
-#: mi/mi-symbol-cmds.c:48
+#: mi/mi-symbol-cmds.c:46
 msgid "-symbol-list-lines: Unknown source file name."
 msgstr ""
 
@@ -15153,61 +16223,65 @@ msgstr ""
 msgid "When non-zero, microblaze specific debugging is enabled."
 msgstr ""
 
-#: minsyms.c:759
+#: minsyms.c:738
 #, possible-c-format
 msgid ""
 "GDB cannot resolve STT_GNU_IFUNC symbol at address %s without the ELF "
 "support compiled in."
 msgstr ""
 
-#: minsyms.c:770
+#: minsyms.c:749
 #, possible-c-format
 msgid ""
 "GDB cannot resolve STT_GNU_IFUNC symbol \"%s\" without the ELF support "
 "compiled in."
 msgstr ""
 
-#: minsyms.c:781
+#: minsyms.c:760
 msgid "elf_gnu_ifunc_resolver_stop cannot be reached."
 msgstr ""
 
-#: minsyms.c:790
+#: minsyms.c:769
 msgid "elf_gnu_ifunc_resolver_return_stop cannot be reached."
 msgstr ""
 
-#: mips-linux-nat.c:76 mips-linux-nat.c:111
+#: mips-linux-nat.c:78 mips-linux-nat.c:119
 #, possible-c-format
 msgid "Bogon register number %d."
 msgstr ""
 
-#: mips-linux-nat.c:254 mips-linux-nat.c:306 ppcnbsd-nat.c:104
+#: mips-linux-nat.c:283 mips-linux-nat.c:360 ppcnbsd-nat.c:104
 #: ppcnbsd-nat.c:139
 msgid "Couldn't get FP registers"
 msgstr ""
 
-#: mips-linux-nat.c:297 shnbsd-nat.c:83
+#: mips-linux-nat.c:351 shnbsd-nat.c:83
 msgid "Couldn't set registers"
 msgstr ""
 
-#: mips-linux-nat.c:312 ppcnbsd-nat.c:146
+#: mips-linux-nat.c:366 ppcnbsd-nat.c:146
 msgid "Couldn't set FP registers"
 msgstr ""
 
-#: mips-linux-nat.c:480 mips-linux-nat.c:497 mips-linux-nat.c:514
-#: mips-linux-nat.c:531 mips-linux-nat.c:552 mips-linux-nat.c:569
-#: mips-linux-nat.c:588
+#: mips-linux-nat.c:450
+msgid "Couldn't check DSP support"
+msgstr ""
+
+#: mips-linux-nat.c:570 mips-linux-nat.c:587 mips-linux-nat.c:604
+#: mips-linux-nat.c:621 mips-linux-nat.c:642 mips-linux-nat.c:659
+#: mips-linux-nat.c:678
 msgid "Unrecognized watch register style"
 msgstr ""
 
-#: mips-linux-nat.c:1054
+#: mips-linux-nat.c:1144
 msgid "Set whether to show variables that mirror the mips debug registers."
 msgstr ""
 
-#: mips-linux-nat.c:1055
+#: mips-linux-nat.c:1145
 msgid "Show whether to show variables that mirror the mips debug registers."
 msgstr ""
 
-#: mips-linux-tdep.c:647
+#: mips-linux-tdep.c:638
 msgid "wrong size fpregset struct in core file"
 msgstr ""
 
@@ -15216,99 +16290,112 @@ msgstr ""
 msgid "Error reading symbol table: %s"
 msgstr ""
 
-#: mips-tdep.c:491
+#: mips-tdep.c:608
 #, possible-c-format
 msgid "mips_register_name: bad register number %d"
 msgstr ""
 
-#: mips-tdep.c:592 mips-tdep.c:621 mips-tdep.c:661
+#: mips-tdep.c:709 mips-tdep.c:738 mips-tdep.c:778
 msgid "bad register size"
 msgstr ""
 
-#: mips-tdep.c:693
+#: mips-tdep.c:810
 msgid "32-bit compatibility mode not supported"
 msgstr ""
 
-#: mips-tdep.c:776
+#: mips-tdep.c:890
 msgid "mips_register_to_value: unrecognized case"
 msgstr ""
 
-#: mips-tdep.c:824
+#: mips-tdep.c:938
 msgid "mips_value_to_register: unrecognized case"
 msgstr ""
 
-#: mips-tdep.c:952
+#: mips-tdep.c:1081
 msgid "mips_mask_address_p: bad switch"
 msgstr ""
 
-#: mips-tdep.c:978
+#: mips-tdep.c:1107
 msgid "show_mask_address: bad switch"
 msgstr ""
 
-#: mips-tdep.c:1830
+#: mips-tdep.c:1344 mips-tdep.c:1430
+msgid "invalid ISA"
+msgstr ""
+
+#: mips-tdep.c:2483
 msgid "Invalid number of argument registers encoded in SAVE."
 msgstr ""
 
-#: mips-tdep.c:1835
+#: mips-tdep.c:2488
 msgid "Invalid number of static registers encoded in SAVE."
 msgstr ""
 
-#: mips-tdep.c:2727
+#: mips-tdep.c:3992
 #, possible-c-format
 msgid "GDB can't find the start of the function at %s."
 msgstr ""
 
-#: mips-tdep.c:4525 mips-tdep.c:4562 mips-tdep.c:4798 sh64-tdep.c:2054
+#: mips-tdep.c:5989 mips-tdep.c:6026 mips-tdep.c:6259 sh64-tdep.c:1934
 #, possible-c-format
 msgid "can't read register %d (%s)"
 msgstr ""
 
-#: mips-tdep.c:4571
+#: mips-tdep.c:6035
 msgid "mips_read_fp_register_double: bad access to odd-numbered FP register"
 msgstr ""
 
-#: mips-tdep.c:4834 sh64-tdep.c:2214 sh64-tdep.c:2272
+#: mips-tdep.c:6295 sh64-tdep.c:2094 sh64-tdep.c:2152
 msgid "Not a valid register for the current processor type"
 msgstr ""
 
-#: mips-tdep.c:5104 mips-tdep.c:5118 mips-tdep.c:5132
+#: mips-tdep.c:6659 mips-tdep.c:6673 mips-tdep.c:6687
 msgid "set mipsfpu failed"
 msgstr ""
 
-#: mips-tdep.c:5586
+#: mips-tdep.c:7784
 #, possible-c-format
 msgid "unsupported ABI %s."
 msgstr ""
 
-#: mips-tdep.c:5600
+#: mips-tdep.c:7798
 msgid "unrecognized .gcc_compiled_longXX"
 msgstr ""
 
-#: mips-tdep.c:5612
+#: mips-tdep.c:7810
 msgid "unknown ABI string"
 msgstr ""
 
-#: mips-tdep.c:6124 mips-tdep.c:6173
+#: mips-tdep.c:7827
+msgid "unknown compressed ISA string"
+msgstr ""
+
+#: mips-tdep.c:8396 mips-tdep.c:8445
 msgid "unknown ABI in switch"
 msgstr ""
 
-#: mips-tdep.c:6452
+#: mips-tdep.c:8674
+#, possible-c-format
+msgid "The compressed ISA encoding used is %s.\n"
+msgstr ""
+
+#: mips-tdep.c:8754
 msgid "mips_abi_strings out of sync"
 msgstr ""
 
-#: mips-tdep.c:6468 mips-tdep.c:6472
+#: mips-tdep.c:8770 mips-tdep.c:8774
 msgid "Various MIPS specific commands."
 msgstr ""
 
-#: mips-tdep.c:6477
+#: mips-tdep.c:8779
 msgid "Set the MIPS ABI used by this program."
 msgstr ""
 
-#: mips-tdep.c:6478
+#: mips-tdep.c:8780
 msgid "Show the MIPS ABI used by this program."
 msgstr ""
 
-#: mips-tdep.c:6479
+#: mips-tdep.c:8781
 msgid ""
 "This option can be set to one of:\n"
 "  auto  - the default ABI associated with the current binary\n"
@@ -15320,70 +16407,87 @@ msgid ""
 "  eabi64"
 msgstr ""
 
-#: mips-tdep.c:6496
+#: mips-tdep.c:8799
+msgid "Set the compressed ISA encoding used by MIPS code."
+msgstr ""
+
+#: mips-tdep.c:8800
+msgid "Show the compressed ISA encoding used by MIPS code."
+msgstr ""
+
+#: mips-tdep.c:8801
+msgid ""
+"Select the compressed ISA encoding used in functions that have no symbol\n"
+"information available.  The encoding can be set to either of:\n"
+"  mips16\n"
+"  micromips\n"
+"and is updated automatically from ELF file flags if available."
+msgstr ""
+
+#: mips-tdep.c:8815
 msgid "Set use of MIPS floating-point coprocessor."
 msgstr ""
 
-#: mips-tdep.c:6499
+#: mips-tdep.c:8818
 msgid "Select single-precision MIPS floating-point coprocessor."
 msgstr ""
 
-#: mips-tdep.c:6502
+#: mips-tdep.c:8821
 msgid "Select double-precision MIPS floating-point coprocessor."
 msgstr ""
 
-#: mips-tdep.c:6508
+#: mips-tdep.c:8827
 msgid "Select no MIPS floating-point coprocessor."
 msgstr ""
 
-#: mips-tdep.c:6513
+#: mips-tdep.c:8832
 msgid "Select MIPS floating-point coprocessor automatically."
 msgstr ""
 
-#: mips-tdep.c:6516
+#: mips-tdep.c:8835
 msgid "Show current use of MIPS floating-point coprocessor target."
 msgstr ""
 
-#: mips-tdep.c:6537
+#: mips-tdep.c:8856
 msgid "Set zeroing of upper 32 bits of 64-bit addresses."
 msgstr ""
 
-#: mips-tdep.c:6538
+#: mips-tdep.c:8857
 msgid "Show zeroing of upper 32 bits of 64-bit addresses."
 msgstr ""
 
-#: mips-tdep.c:6539
+#: mips-tdep.c:8858
 msgid ""
 "Use \"on\" to enable the masking, \"off\" to disable it and \"auto\" to\n"
 "allow GDB to determine the correct value."
 msgstr ""
 
-#: mips-tdep.c:6548
+#: mips-tdep.c:8867
 msgid ""
 "Set compatibility with 64-bit MIPS target that transfers 32-bit quantities."
 msgstr ""
 
-#: mips-tdep.c:6550
+#: mips-tdep.c:8869
 msgid ""
 "Show compatibility with 64-bit MIPS target that transfers 32-bit quantities."
 msgstr ""
 
-#: mips-tdep.c:6552
+#: mips-tdep.c:8871
 msgid ""
 "Use \"on\" to enable backward compatibility with older MIPS 64 GDB+target\n"
 "that would transfer 32 bits for some registers (e.g. SR, FSR) and\n"
 "64 bits for others.  Use \"off\" to disable compatibility mode"
 msgstr ""
 
-#: mips-tdep.c:6564
+#: mips-tdep.c:8883
 msgid "Set mips debugging."
 msgstr ""
 
-#: mips-tdep.c:6565
+#: mips-tdep.c:8884
 msgid "Show mips debugging."
 msgstr ""
 
-#: mips-tdep.c:6566
+#: mips-tdep.c:8885
 msgid "When non-zero, mips specific debugging is enabled."
 msgstr ""
 
@@ -15464,7 +16568,7 @@ msgstr ""
 msgid "monitor_supply_register (%d):  bad value from monitor: %s."
 msgstr ""
 
-#: monitor.c:1033 nto-procfs.c:693 remote.c:4866 remote-mips.c:2274
+#: monitor.c:1033 nto-procfs.c:693 remote.c:5036 remote-mips.c:2272
 msgid ""
 "Interrupted while waiting for the program.\n"
 "Give up (and stop debugging it)? "
@@ -15566,7 +16670,7 @@ msgstr ""
 msgid "Invalid target CPU."
 msgstr ""
 
-#: nto-procfs.c:625 procfs.c:3293
+#: nto-procfs.c:625 procfs.c:3092
 msgid "Attaching GDB to itself is not a good idea..."
 msgstr ""
 
@@ -15615,25 +16719,25 @@ msgid ""
 "for different positive values."
 msgstr ""
 
-#: objc-exp.y:335
+#: objc-exp.y:341
 #, possible-c-format
 msgid "%s is not an ObjC Class"
 msgstr ""
 
-#: objc-exp.y:682
+#: objc-exp.y:695
 #, possible-c-format
 msgid "invalid destructor `%s::~%s'"
 msgstr ""
 
-#: objc-exp.y:1437
+#: objc-exp.y:1443
 msgid "Missing '(' in @selector(...)"
 msgstr ""
 
-#: objc-exp.y:1452
+#: objc-exp.y:1458
 msgid "Missing ')' in @selector(...)"
 msgstr ""
 
-#: objc-exp.y:1783
+#: objc-exp.y:1788
 #, possible-c-format
 msgid "A %s near end of expression."
 msgstr ""
@@ -15650,106 +16754,96 @@ msgstr ""
 msgid "NSString: internal error -- no way to create new NSString"
 msgstr ""
 
-#: objc-lang.c:629
+#: objc-lang.c:630
 #, possible-c-format
 msgid "Can't find selector \"%s\""
 msgstr ""
 
-#: objc-lang.c:676
+#: objc-lang.c:677
 msgid "internal: compare_selectors(1)"
 msgstr ""
 
-#: objc-lang.c:681
+#: objc-lang.c:682
 msgid "internal: compare_selectors(2)"
 msgstr ""
 
-#: objc-lang.c:726 objc-lang.c:877
+#: objc-lang.c:727 objc-lang.c:878
 #, possible-c-format
 msgid "Regexp is too long: %s"
 msgstr ""
 
-#: objc-lang.c:739 objc-lang.c:890 symtab.c:3283 thread.c:1320
-#, possible-c-format
-msgid "Invalid regexp (%s): %s"
-msgstr ""
-
-#: objc-lang.c:759
+#: objc-lang.c:760
 #, possible-c-format
 msgid "Bad method name '%s'"
 msgstr ""
 
-#: objc-lang.c:776
+#: objc-lang.c:777
 #, possible-c-format
 msgid ""
 "Selectors matching \"%s\":\n"
 "\n"
 msgstr ""
 
-#: objc-lang.c:823
+#: objc-lang.c:824
 #, possible-c-format
 msgid "No selectors matching \"%s\"\n"
 msgstr ""
 
-#: objc-lang.c:842
+#: objc-lang.c:843
 msgid "internal: compare_classes(1)"
 msgstr ""
 
-#: objc-lang.c:914
+#: objc-lang.c:915
 #, possible-c-format
 msgid ""
 "Classes matching \"%s\":\n"
 "\n"
 msgstr ""
 
-#: objc-lang.c:953
+#: objc-lang.c:954
 #, possible-c-format
 msgid "No classes matching \"%s\"\n"
 msgstr ""
 
-#: objc-lang.c:1354
+#: objc-lang.c:1355
 msgid "Unable to locate _NSPrintForDebugger in child process"
 msgstr ""
 
-#: objc-lang.c:1360
+#: objc-lang.c:1361
 msgid "object returns null description"
 msgstr ""
 
-#: objc-lang.c:1371
+#: objc-lang.c:1372
 msgid "<object returns empty description>"
 msgstr ""
 
 #. INFO SELECTORS command.
-#: objc-lang.c:1528
+#: objc-lang.c:1529
 msgid "All Objective-C selectors, or those matching REGEXP."
 msgstr ""
 
 #. INFO CLASSES   command.
-#: objc-lang.c:1530
+#: objc-lang.c:1531
 msgid "All Objective-C classes, or those matching REGEXP."
 msgstr ""
 
-#: objc-lang.c:1532
+#: objc-lang.c:1533
 msgid "Ask an Objective-C object to print itself."
 msgstr ""
 
-#: objfiles.c:222 solib.c:481 symfile.c:2540
-#, possible-c-format
-msgid "Can't find the file sections in `%s': %s"
-msgstr ""
-
-#: objfiles.c:340
+#: objfiles.c:324
 msgid "Entry point address is not known."
 msgstr ""
 
-#: objfiles.c:429
+#: objfiles.c:390
 msgid "put_objfile_before: before objfile not in list"
 msgstr ""
 
-#: objfiles.c:481
+#: objfiles.c:442
 msgid "unlink_objfile: objfile already unlinked"
 msgstr ""
 
-#: objfiles.c:1217
+#: objfiles.c:1185
 #, possible-c-format
 msgid ""
 "unexpected overlap between:\n"
@@ -15758,20 +16852,20 @@ msgid ""
 "Will ignore section B"
 msgstr ""
 
-#: objfiles.c:1502
+#: objfiles.c:1470
 #, possible-c-format
 msgid "cannot close \"%s\": %s"
 msgstr ""
 
-#: objfiles.h:641
+#: objfiles.h:649
 msgid "sect_index_data not initialized"
 msgstr ""
 
-#: objfiles.h:647
+#: objfiles.h:655
 msgid "sect_index_rodata not initialized"
 msgstr ""
 
-#: objfiles.h:653
+#: objfiles.h:661
 msgid "sect_index_text not initialized"
 msgstr ""
 
@@ -15786,15 +16880,15 @@ msgstr ""
 msgid "Failed to detach observer"
 msgstr ""
 
-#: observer.c:208
+#: observer.c:213
 msgid "Set observer debugging."
 msgstr ""
 
-#: observer.c:209
+#: observer.c:214
 msgid "Show observer debugging."
 msgstr ""
 
-#: observer.c:210
+#: observer.c:215
 msgid "When non-zero, observer debugging is enabled."
 msgstr ""
 
@@ -15805,7 +16899,7 @@ msgstr ""
 
 #: opencl-lang.c:185 opencl-lang.c:214 opencl-lang.c:447 opencl-lang.c:564
 #: opencl-lang.c:657 opencl-lang.c:876 valarith.c:1410 valarith.c:1766
-#: valarith.c:1802 valops.c:554 valops.c:897
+#: valarith.c:1802 valops.c:558 valops.c:901
 msgid "Could not determine the vector bounds"
 msgstr ""
 
@@ -15844,72 +16938,72 @@ msgstr ""
 msgid "Cannot perform conditional operation on vectors with different sizes"
 msgstr ""
 
-#: osabi.c:139
+#: osabi.c:140
 #, possible-c-format
 msgid ""
 "gdbarch_register_osabi: An attempt to register a handler for OS ABI \"%s\" "
 "for architecture %s was made.  The handler will not be registered"
 msgstr ""
 
-#: osabi.c:157
+#: osabi.c:158
 #, possible-c-format
 msgid ""
 "gdbarch_register_osabi: A handler for OS ABI \"%s\" has already been "
 "registered for architecture %s"
 msgstr ""
 
-#: osabi.c:251
+#: osabi.c:252
 #, possible-c-format
 msgid ""
 "gdbarch_lookup_osabi: invalid OS ABI (%d) from sniffer for architecture %s "
 "flavour %d"
 msgstr ""
 
-#: osabi.c:270
+#: osabi.c:271
 #, possible-c-format
 msgid ""
 "gdbarch_lookup_osabi: multiple %sspecific OS ABI match for architecture %s "
 "flavour %d: first match \"%s\", second match \"%s\""
 msgstr ""
 
-#: osabi.c:461
+#: osabi.c:462
 #, possible-c-format
 msgid "generic_elf_osabi_sniff_abi_tag_sections: unknown OS number %d"
 msgstr ""
 
-#: osabi.c:597
+#: osabi.c:602
 #, possible-c-format
 msgid "Invalid OS ABI \"%s\" passed to command handler."
 msgstr ""
 
-#: osabi.c:605
+#: osabi.c:610
 msgid "Updating OS ABI failed."
 msgstr ""
 
-#: osabi.c:614
+#: osabi.c:619
 #, possible-c-format
 msgid "The current OS ABI is \"auto\" (currently \"%s\").\n"
 msgstr ""
 
-#: osabi.c:618
+#: osabi.c:623
 #, possible-c-format
 msgid "The current OS ABI is \"%s\".\n"
 msgstr ""
 
-#: osabi.c:622
+#: osabi.c:627
 #, possible-c-format
 msgid "The default OS ABI is \"%s\".\n"
 msgstr ""
 
-#: osabi.c:634
+#: osabi.c:639
 msgid "_initialize_gdb_osabi: gdb_osabi_names[] is inconsistent"
 msgstr ""
 
-#: osabi.c:644
+#: osabi.c:649
 msgid "Set OS ABI of target."
 msgstr ""
 
-#: osabi.c:645
+#: osabi.c:650
 msgid "Show OS ABI of target."
 msgstr ""
 
@@ -15937,145 +17031,145 @@ msgstr ""
 msgid "Can not fetch data now."
 msgstr ""
 
-#: osdata.c:307
+#: osdata.c:308
 msgid "Available types of OS data not reported."
 msgstr ""
 
-#: osdata.c:392
+#: osdata.c:418
 msgid "Show OS data ARG."
 msgstr ""
 
-#: parse.c:109
+#: parse.c:98
 #, possible-c-format
 msgid "Expression debugging is %s.\n"
 msgstr ""
 
-#: parse.c:120
+#: parse.c:109
 #, possible-c-format
 msgid "Parser debugging is %s.\n"
 msgstr ""
 
-#: parse.c:832
+#: parse.c:860
 msgid "?error in operator_length_standard"
 msgstr ""
 
-#: parse.c:1103
+#: parse.c:1131
 msgid "expression to compute"
 msgstr ""
 
-#: parse.c:1216
+#: parse.c:1234
 msgid "Junk after end of expression."
 msgstr ""
 
-#: parse.c:1652
+#: parse.c:1858
 msgid "Set expression debugging."
 msgstr ""
 
-#: parse.c:1653
+#: parse.c:1859
 msgid "Show expression debugging."
 msgstr ""
 
-#: parse.c:1654
+#: parse.c:1860
 msgid ""
 "When non-zero, the internal representation of expressions will be printed."
 msgstr ""
 
-#: parse.c:1661
+#: parse.c:1867
 msgid "Set parser debugging."
 msgstr ""
 
-#: parse.c:1662
+#: parse.c:1868
 msgid "Show parser debugging."
 msgstr ""
 
-#: parse.c:1663
+#: parse.c:1869
 msgid "When non-zero, expression parser tracing will be enabled."
 msgstr ""
 
-#: ppc-linux-nat.c:425 ppc-linux-nat.c:893
+#: ppc-linux-nat.c:425 ppc-linux-nat.c:895
 msgid "Unable to fetch VSX register"
 msgstr ""
 
-#: ppc-linux-nat.c:454 ppc-linux-nat.c:923
+#: ppc-linux-nat.c:454 ppc-linux-nat.c:925
 msgid "Unable to fetch AltiVec register"
 msgstr ""
 
 #. Anything else needs to be reported.
-#: ppc-linux-nat.c:492 ppc-linux-nat.c:2428
+#: ppc-linux-nat.c:492 ppc-linux-nat.c:2437
 msgid "Unable to fetch SPE registers"
 msgstr ""
 
-#: ppc-linux-nat.c:627
+#: ppc-linux-nat.c:629
 #, possible-c-format
 msgid "fetch_register: unexpected byte order: %d"
 msgstr ""
 
-#: ppc-linux-nat.c:685 ppc-linux-nat.c:2441
+#: ppc-linux-nat.c:687 ppc-linux-nat.c:2450
 msgid "Unable to fetch VSX registers"
 msgstr ""
 
-#: ppc-linux-nat.c:704 ppc-linux-nat.c:2454
+#: ppc-linux-nat.c:706 ppc-linux-nat.c:2463
 msgid "Unable to fetch AltiVec registers"
 msgstr ""
 
-#: ppc-linux-nat.c:731 ppc-linux-nat.c:1205
+#: ppc-linux-nat.c:733 ppc-linux-nat.c:1209
 msgid "Couldn't get general-purpose registers."
 msgstr ""
 
-#: ppc-linux-nat.c:783 ppc-linux-nat.c:1267
+#: ppc-linux-nat.c:785 ppc-linux-nat.c:1271
 msgid "Couldn't get floating-point registers."
 msgstr ""
 
-#: ppc-linux-nat.c:901
+#: ppc-linux-nat.c:903
 msgid "Unable to store VSX register"
 msgstr ""
 
-#: ppc-linux-nat.c:937
+#: ppc-linux-nat.c:939
 msgid "Unable to store AltiVec register"
 msgstr ""
 
 #. Anything else needs to be reported.
-#: ppc-linux-nat.c:964
+#: ppc-linux-nat.c:966
 msgid "Unable to set SPE registers"
 msgstr ""
 
-#: ppc-linux-nat.c:1151
+#: ppc-linux-nat.c:1155
 msgid "Couldn't get VSX registers"
 msgstr ""
 
-#: ppc-linux-nat.c:1157
+#: ppc-linux-nat.c:1161
 msgid "Couldn't write VSX registers"
 msgstr ""
 
-#: ppc-linux-nat.c:1174
+#: ppc-linux-nat.c:1178
 msgid "Couldn't get AltiVec registers"
 msgstr ""
 
-#: ppc-linux-nat.c:1180
+#: ppc-linux-nat.c:1184
 msgid "Couldn't write AltiVec registers"
 msgstr ""
 
-#: ppc-linux-nat.c:1217
+#: ppc-linux-nat.c:1221
 msgid "Couldn't set general-purpose registers."
 msgstr ""
 
-#: ppc-linux-nat.c:1279
+#: ppc-linux-nat.c:1283
 msgid "Couldn't set floating-point registers."
 msgstr ""
 
-#: ppc-linux-nat.c:1585
+#: ppc-linux-nat.c:1593
 msgid "Unexpected error setting breakpoint or watchpoint"
 msgstr ""
 
-#: ppc-linux-nat.c:1632
+#: ppc-linux-nat.c:1640
 msgid "Unexpected error deleting breakpoint or watchpoint"
 msgstr ""
 
-#: ppc-linux-nat.c:2290
+#: ppc-linux-nat.c:2299
 msgid "The given mask covers kernel address space and cannot be used.\n"
 msgstr ""
 
-#: ppc-linux-tdep.c:1067
+#: ppc-linux-tdep.c:1158
 msgid "Cannot find AT_ENTRY auxiliary vector entry."
 msgstr ""
 
@@ -16084,306 +17178,261 @@ msgstr ""
 msgid "Unknown decimal float size."
 msgstr ""
 
-#: printcmd.c:110
+#: printcmd.c:104
 #, possible-c-format
 msgid "The largest offset that will be printed in <symbol+1234> form is %s.\n"
 msgstr ""
 
-#: printcmd.c:122
+#: printcmd.c:116
 #, possible-c-format
 msgid "Printing of source filename and line number with <symbol> is %s.\n"
 msgstr ""
 
-#: printcmd.c:447 printcmd.c:523
+#: printcmd.c:441 printcmd.c:517
 #, possible-c-format
 msgid "Undefined output size \"%c\"."
 msgstr ""
 
-#: printcmd.c:545
+#: printcmd.c:539
 #, possible-c-format
 msgid "Undefined output format \"%c\"."
 msgstr ""
 
-#: printcmd.c:858
+#: printcmd.c:855
 #, possible-c-format
 msgid "Unable to display strings with size '%c', using 'b' instead."
 msgstr ""
 
-#: printcmd.c:926
+#: printcmd.c:923
 #, possible-c-format
 msgid "Size letters are meaningless in \"%s\" command."
 msgstr ""
 
-#: printcmd.c:928
+#: printcmd.c:925
 #, possible-c-format
 msgid "Item count other than 1 is meaningless in \"%s\" command."
 msgstr ""
 
-#: printcmd.c:931
+#: printcmd.c:928
 #, possible-c-format
 msgid "Format letter \"%c\" is meaningless in \"%s\" command."
 msgstr ""
 
-#: printcmd.c:1098
+#: printcmd.c:1093
+msgid "Expression is not an assignment (and might have no effect)"
+msgstr ""
+
+#: printcmd.c:1111
 msgid "address"
 msgstr ""
 
-#: printcmd.c:1120
+#: printcmd.c:1133
 msgid "mapped"
 msgstr ""
 
-#: printcmd.c:1120
+#: printcmd.c:1133
 msgid "unmapped"
 msgstr ""
 
-#: printcmd.c:1141
+#: printcmd.c:1154
 #, possible-c-format
 msgid "%s in load address range of %s overlay section %s of %s\n"
 msgstr ""
 
-#: printcmd.c:1145
+#: printcmd.c:1158
 #, possible-c-format
 msgid "%s in load address range of section %s of %s\n"
 msgstr ""
 
-#: printcmd.c:1150
+#: printcmd.c:1163
 #, possible-c-format
 msgid "%s in %s overlay section %s of %s\n"
 msgstr ""
 
-#: printcmd.c:1153
+#: printcmd.c:1166
 #, possible-c-format
 msgid "%s in section %s of %s\n"
 msgstr ""
 
-#: printcmd.c:1158
+#: printcmd.c:1171
 #, possible-c-format
 msgid "%s in load address range of %s overlay section %s\n"
 msgstr ""
 
-#: printcmd.c:1162
+#: printcmd.c:1175
 #, possible-c-format
 msgid "%s in load address range of section %s\n"
 msgstr ""
 
-#: printcmd.c:1166
+#: printcmd.c:1179
 #, possible-c-format
 msgid "%s in %s overlay section %s\n"
 msgstr ""
 
-#: printcmd.c:1169
+#: printcmd.c:1182
 #, possible-c-format
 msgid "%s in section %s\n"
 msgstr ""
 
-#: printcmd.c:1176
+#: printcmd.c:1189
 #, possible-c-format
 msgid "No symbol matches %s.\n"
 msgstr ""
 
-#: printcmd.c:1193
+#: printcmd.c:1206
 msgid "Argument required."
 msgstr ""
 
-#: printcmd.c:1290
+#: printcmd.c:1303
 #, possible-c-format
 msgid "an argument in register %s"
 msgstr ""
 
-#: printcmd.c:1293
+#: printcmd.c:1306
 #, possible-c-format
 msgid "a variable in register %s"
 msgstr ""
 
-#: printcmd.c:1298 printcmd.c:1368
+#: printcmd.c:1311 printcmd.c:1381
 msgid "static storage at address "
 msgstr ""
 
-#: printcmd.c:1304 printcmd.c:1341 printcmd.c:1373
+#: printcmd.c:1317 printcmd.c:1354 printcmd.c:1386
 msgid ""
 ",\n"
 " -- loaded at "
 msgstr ""
 
-#: printcmd.c:1306 printcmd.c:1343 printcmd.c:1375
+#: printcmd.c:1319 printcmd.c:1356 printcmd.c:1388
 #, possible-c-format
 msgid " in overlay section %s"
 msgstr ""
 
-#: printcmd.c:1314
+#: printcmd.c:1327
 #, possible-c-format
 msgid "address of an argument in register %s"
 msgstr ""
 
-#: printcmd.c:1319
+#: printcmd.c:1332
 #, possible-c-format
 msgid "an argument at offset %ld"
 msgstr ""
 
-#: printcmd.c:1323
+#: printcmd.c:1336
 #, possible-c-format
 msgid "a local variable at frame offset %ld"
 msgstr ""
 
-#: printcmd.c:1327
+#: printcmd.c:1340
 #, possible-c-format
 msgid "a reference argument at offset %ld"
 msgstr ""
 
-#: printcmd.c:1331
+#: printcmd.c:1344
 msgid "a typedef"
 msgstr ""
 
-#: printcmd.c:1335
+#: printcmd.c:1348
 msgid "a function at address "
 msgstr ""
 
-#: printcmd.c:1362
+#: printcmd.c:1375
 #, possible-c-format
 msgid ""
 "a thread-local variable at offset %s in the thread-local storage for `%s'"
 msgstr ""
 
-#: printcmd.c:1384
+#: printcmd.c:1397
 msgid "optimized out"
 msgstr ""
 
-#: printcmd.c:1388
+#: printcmd.c:1401
 msgid "of unknown (botched) type"
 msgstr ""
 
-#: printcmd.c:1442
+#: printcmd.c:1455
 msgid "starting display address"
 msgstr ""
 
-#: printcmd.c:1601
+#: printcmd.c:1613
 msgid "one or more display numbers"
 msgstr ""
 
-#: printcmd.c:1611
+#: printcmd.c:1623
 #, possible-c-format
 msgid "bad display number at or near '%s'"
 msgstr ""
 
-#: printcmd.c:1620 printcmd.c:1827
+#: printcmd.c:1632 printcmd.c:1836
 #, possible-c-format
 msgid "No display number %d.\n"
 msgstr ""
 
-#: printcmd.c:1645
+#: printcmd.c:1654
 msgid "Delete all auto-display expressions? "
 msgstr ""
 
-#: printcmd.c:1696
+#: printcmd.c:1705
 #, possible-c-format
 msgid "Unable to display \"%s\": %s"
 msgstr ""
 
-#: printcmd.c:1759
+#: printcmd.c:1768
 #, possible-c-format
 msgid "<error: %s>\n"
 msgstr ""
 
-#: printcmd.c:1791 value.c:2118
-#, possible-c-format
-msgid "<error: %s>"
-msgstr ""
-
-#: printcmd.c:1837
+#: printcmd.c:1846
 #, possible-c-format
 msgid "Disabling display %d to avoid infinite recursion.\n"
 msgstr ""
 
-#: printcmd.c:1850
+#: printcmd.c:1859
 msgid "There are no auto-display expressions now.\n"
 msgstr ""
 
-#: printcmd.c:1852
+#: printcmd.c:1861
 msgid ""
 "Auto-display expressions now in effect:\n"
 "Num Enb Expression\n"
 msgstr ""
 
-#: printcmd.c:1865
+#: printcmd.c:1874
 msgid " (cannot be evaluated in the current context)"
 msgstr ""
 
-#: printcmd.c:2003
+#: printcmd.c:2014
 msgid "format-control string and values to print"
 msgstr ""
 
-#: printcmd.c:2009
-msgid "Bad format string, missing '\"'."
-msgstr ""
-
-#: printcmd.c:2022
-msgid "Bad format string, non-terminated '\"'."
-msgstr ""
-
-#. ??? TODO: handle other escape sequences.
-#: printcmd.c:2056
-#, possible-c-format
-msgid "Unrecognized escape character \\%c in format string."
-msgstr ""
-
-#: printcmd.c:2072
-msgid "Invalid argument syntax"
-msgstr ""
-
-#: printcmd.c:2262
-msgid "`*' not supported for precision or width in printf"
-msgstr ""
-
-#: printcmd.c:2265
-msgid "Format specifier `n' not supported in printf"
-msgstr ""
-
-#: printcmd.c:2268
-msgid "Incomplete format specifier at end of format string"
-msgstr ""
-
-#: printcmd.c:2271
-#, possible-c-format
-msgid "Unrecognized format specifier '%c' in printf"
-msgstr ""
-
-#: printcmd.c:2275
-#, possible-c-format
-msgid "Inappropriate modifiers to format specifier '%c' in printf"
-msgstr ""
-
-#: printcmd.c:2334
-msgid "Wrong number of arguments for specified format-string"
-msgstr ""
-
-#: printcmd.c:2430
+#: printcmd.c:2167
 #, possible-c-format
 msgid "expected wchar_t argument for %%lc"
 msgstr ""
 
-#: printcmd.c:2460 printcmd.c:2477 value.c:2152
+#: printcmd.c:2197 printcmd.c:2214 value.c:2288
 msgid "Invalid floating value found in program."
 msgstr ""
 
-#: printcmd.c:2484
+#: printcmd.c:2221
 msgid "long double not supported in printf"
 msgstr ""
 
-#: printcmd.c:2495
+#: printcmd.c:2232
 msgid "long long not supported in printf"
 msgstr ""
 
-#: printcmd.c:2730
+#: printcmd.c:2472
 msgid "Describe where symbol SYM is stored."
 msgstr ""
 
-#: printcmd.c:2732
+#: printcmd.c:2474
 msgid ""
 "Describe what symbol is at location ADDR.\n"
 "Only for symbols with fixed locations (global or static scope)."
 msgstr ""
 
-#: printcmd.c:2736
+#: printcmd.c:2478
 msgid ""
 "Examine memory: x/FMT ADDRESS.\n"
 "ADDRESS is an expression for the memory address to examine.\n"
@@ -16399,15 +17448,15 @@ msgid ""
 "with this command or \"print\"."
 msgstr ""
 
-#: printcmd.c:2751
+#: printcmd.c:2493
 msgid "Print line number and file of definition of variable."
 msgstr ""
 
-#: printcmd.c:2754
+#: printcmd.c:2496
 msgid "Expressions to display when program stops, with code numbers."
 msgstr ""
 
-#: printcmd.c:2757
+#: printcmd.c:2499
 msgid ""
 "Cancel some expressions to be displayed when program stops.\n"
 "Arguments are the code numbers of the expressions to stop displaying.\n"
@@ -16416,7 +17465,7 @@ msgid ""
 "Do \"info display\" to see current list of code numbers."
 msgstr ""
 
-#: printcmd.c:2765
+#: printcmd.c:2507
 msgid ""
 "Print value of expression EXP each time the program stops.\n"
 "/FMT may be used before EXP as in the \"print\" command.\n"
@@ -16428,7 +17477,7 @@ msgid ""
 "Use \"undisplay\" to cancel display requests previously made."
 msgstr ""
 
-#: printcmd.c:2774
+#: printcmd.c:2516
 msgid ""
 "Enable some expressions to be displayed when program stops.\n"
 "Arguments are the code numbers of the expressions to resume displaying.\n"
@@ -16436,7 +17485,7 @@ msgid ""
 "Do \"info display\" to see current list of code numbers."
 msgstr ""
 
-#: printcmd.c:2780
+#: printcmd.c:2522
 msgid ""
 "Disable some expressions to be displayed when program stops.\n"
 "Arguments are the code numbers of the expressions to stop displaying.\n"
@@ -16444,7 +17493,7 @@ msgid ""
 "Do \"info display\" to see current list of code numbers."
 msgstr ""
 
-#: printcmd.c:2786
+#: printcmd.c:2528
 msgid ""
 "Cancel some expressions to be displayed when program stops.\n"
 "Arguments are the code numbers of the expressions to stop displaying.\n"
@@ -16452,19 +17501,19 @@ msgid ""
 "Do \"info display\" to see current list of code numbers."
 msgstr ""
 
-#: printcmd.c:2792
+#: printcmd.c:2534
 msgid ""
 "printf \"printf format string\", arg1, arg2, arg3, ..., argn\n"
 "This is useful for formatted output in user-defined commands."
 msgstr ""
 
-#: printcmd.c:2796
+#: printcmd.c:2538
 msgid ""
 "Like \"print\" but don't put in value history and don't print newline.\n"
 "This is useful in user-defined commands."
 msgstr ""
 
-#: printcmd.c:2800 printcmd.c:2812
+#: printcmd.c:2542 printcmd.c:2554
 msgid ""
 "Evaluate expression EXP and assign result to variable VAR, using assignment\n"
 "syntax appropriate for the current language (VAR = EXP or VAR := EXP for\n"
@@ -16478,7 +17527,7 @@ msgid ""
 msgstr ""
 
 #. "call" is the same as "set", but handy for dbx users to call fns.
-#: printcmd.c:2823
+#: printcmd.c:2565
 msgid ""
 "Call a function in the program.\n"
 "The argument is the function name and arguments, in the notation of the\n"
@@ -16486,7 +17535,7 @@ msgid ""
 "history, if it is not void."
 msgstr ""
 
-#: printcmd.c:2830
+#: printcmd.c:2572
 msgid ""
 "Evaluate expression EXP and assign result to variable VAR, using assignment\n"
 "syntax appropriate for the current language (VAR = EXP or VAR := EXP for\n"
@@ -16496,7 +17545,7 @@ msgid ""
 "This may usually be abbreviated to simply \"set\"."
 msgstr ""
 
-#: printcmd.c:2839
+#: printcmd.c:2581
 msgid ""
 "Print value of expression EXP.\n"
 "Variables accessible are those of the lexical environment of the selected\n"
@@ -16522,275 +17571,346 @@ msgid ""
 "but no count or size letter (see \"x\" command)."
 msgstr ""
 
-#: printcmd.c:2864
+#: printcmd.c:2606
 msgid ""
 "Same as \"print\" command, except that if you are running in the epoch\n"
 "environment, the value is printed in its own window."
 msgstr ""
 
-#: printcmd.c:2870
+#: printcmd.c:2612
 msgid "Set the largest offset that will be printed in <symbol+1234> form."
 msgstr ""
 
-#: printcmd.c:2871
+#: printcmd.c:2613
 msgid "Show the largest offset that will be printed in <symbol+1234> form."
 msgstr ""
 
-#: printcmd.c:2877
+#: printcmd.c:2619
 msgid "Set printing of source filename and line number with <symbol>."
 msgstr ""
 
-#: printcmd.c:2878
+#: printcmd.c:2620
 msgid "Show printing of source filename and line number with <symbol>."
 msgstr ""
 
-#: printcmd.c:2884
+#: printcmd.c:2626
 msgid ""
 "Convert \"printf format string\", arg1, arg2, arg3, ..., argn to\n"
 "a command line, and call it."
 msgstr ""
 
-#: proc-api.c:783
+#: probe.c:64
+#, possible-c-format
+msgid "argument to `%s' missing"
+msgstr ""
+
+#: probe.c:102
+msgid "no probe name specified"
+msgstr ""
+
+#: probe.c:104
+msgid "invalid provider name"
+msgstr ""
+
+#: probe.c:106
+msgid "invalid objfile name"
+msgstr ""
+
+#: probe.c:157
+#, possible-c-format
+msgid "No probe matching objfile=`%s', provider=`%s', name=`%s'"
+msgstr ""
+
+#: probe.c:158 probe.c:159
+msgid "<any>"
+msgstr ""
+
+#: probe.c:290
+msgid "Invalid provider regexp"
+msgstr ""
+
+#: probe.c:291
+msgid "Invalid probe regexp"
+msgstr ""
+
+#: probe.c:292
+msgid "Invalid object file regexp"
+msgstr ""
+
+#: probe.c:592
+msgid "Provider"
+msgstr ""
+
+#: probe.c:593
+msgid "Name"
+msgstr ""
+
+#: probe.c:594
+msgid "Where"
+msgstr ""
+
+#: probe.c:610
+msgid "Object"
+msgstr ""
+
+#: probe.c:648
+msgid "No probes matched.\n"
+msgstr ""
+
+#: probe.c:757
+msgid ""
+"Show available static probes.\n"
+"Usage: info probes [all|TYPE [ARGS]]\n"
+"TYPE specifies the type of the probe, and can be one of the following:\n"
+"  - stap\n"
+"If you specify TYPE, there may be additional arguments needed by the\n"
+"subcommand.\n"
+"If you do not specify any argument, or specify `all', then the command\n"
+"will show information about all types of probes."
+msgstr ""
+
+#: probe.c:782
+msgid "Show information about all type of probes."
+msgstr ""
+
+#: proc-api.c:786
 msgid "Set tracing for /proc api calls."
 msgstr ""
 
-#: proc-api.c:784
+#: proc-api.c:787
 msgid "Show tracing for /proc api calls."
 msgstr ""
 
-#: proc-api.c:790
+#: proc-api.c:793
 msgid "Set filename for /proc tracefile."
 msgstr ""
 
-#: proc-api.c:791
+#: proc-api.c:794
 msgid "Show filename for /proc tracefile."
 msgstr ""
 
-#: procfs.c:489
+#: procfs.c:493
 #, possible-c-format
 msgid "procfs: couldn't find pid %d (kernel thread %d) in procinfo list."
 msgstr ""
 
-#: procfs.c:493
+#: procfs.c:497
 #, possible-c-format
 msgid "procfs: couldn't find pid %d in procinfo list."
 msgstr ""
 
-#: procfs.c:890
+#: procfs.c:894
 #, possible-c-format
 msgid "load_syscalls: Can't open /proc/%d/sysent"
 msgstr ""
 
-#: procfs.c:897 procfs.c:911
+#: procfs.c:901 procfs.c:915
 #, possible-c-format
 msgid "load_syscalls: Error reading /proc/%d/sysent"
 msgstr ""
 
-#: procfs.c:902
+#: procfs.c:906
 #, possible-c-format
 msgid "load_syscalls: /proc/%d/sysent contains no syscalls!"
 msgstr ""
 
-#: procfs.c:1442
+#: procfs.c:1392
 #, possible-c-format
 msgid "procfs: modify_flag failed to turn %s %s"
 msgstr ""
 
-#: procfs.c:1719
+#: procfs.c:1636
 msgid "procfs: set_traced_signals failed"
 msgstr ""
 
-#: procfs.c:2811
+#: procfs.c:2610
 #, possible-c-format
 msgid "procfs_find_LDT_entry: could not find procinfo for %d:%ld."
 msgstr ""
 
-#: procfs.c:2818
+#: procfs.c:2617
 #, possible-c-format
 msgid "procfs_find_LDT_entry: could not read gregs for %d:%ld."
 msgstr ""
 
-#: procfs.c:3300
+#: procfs.c:3099
 #, possible-c-format
 msgid "Attaching to program `%s', %s\n"
 msgstr ""
 
-#: procfs.c:3350
+#: procfs.c:3149
 msgid "procfs: out of memory in 'attach'"
 msgstr ""
 
-#: procfs.c:3439
+#: procfs.c:3238
 msgid "Was stopped when attached, make it runnable again? "
 msgstr ""
 
-#: procfs.c:3482
+#: procfs.c:3281
 #, possible-c-format
 msgid "procfs: fetch_registers failed to find procinfo for %s"
 msgstr ""
 
-#: procfs.c:3531
+#: procfs.c:3330
 #, possible-c-format
 msgid "procfs: store_registers: failed to find procinfo for %s"
 msgstr ""
 
-#: procfs.c:3638
+#: procfs.c:3437
 msgid "Unable to remove __dbx_link breakpoint."
 msgstr ""
 
-#: procfs.c:3693
+#: procfs.c:3492
 #, possible-c-format
 msgid "Failed to create a bfd: %s."
 msgstr ""
 
-#: procfs.c:3714
+#: procfs.c:3513
 msgid "Failed to insert dbx_link breakpoint."
 msgstr ""
 
 #. /proc file not found; presumably child has terminated.
 #. "wait" for the child's exit.
 #. wrong child?
-#: procfs.c:3853
+#: procfs.c:3652
 #, possible-c-format
 msgid "procfs: couldn't stop process %d: wait returned %d."
 msgstr ""
 
-#: procfs.c:3961
+#: procfs.c:3760
 msgid "procfs: trapped on entry to "
 msgstr ""
 
-#: procfs.c:3971 procfs.c:4074
+#: procfs.c:3770 procfs.c:3873
 #, possible-c-format
 msgid "%ld syscall arguments:\n"
 msgstr ""
 
-#: procfs.c:4064
+#: procfs.c:3863
 msgid "procfs: trapped on exit from "
 msgstr ""
 
-#: procfs.c:4093
+#: procfs.c:3892
 #, possible-c-format
 msgid "Retry #%d:\n"
 msgstr ""
 
-#: procfs.c:4169 procfs.c:4177
+#: procfs.c:3968 procfs.c:3976
 msgid "child stopped for unknown reason:\n"
 msgstr ""
 
-#: procfs.c:4171 procfs.c:4179
+#: procfs.c:3970 procfs.c:3978
 msgid "... giving up..."
 msgstr ""
 
-#: procfs.c:4202
+#: procfs.c:4001
 msgid "procfs: ...giving up..."
 msgstr ""
 
-#: procfs.c:4457
+#: procfs.c:4256
 msgid ""
 "resume: target already running.  Pretend to resume, and hope for the best!"
 msgstr ""
 
-#: procfs.c:4493
+#: procfs.c:4292
 #, possible-c-format
 msgid "\tUsing the running image of %s %s via /proc.\n"
 msgstr ""
 
-#: procfs.c:4629
+#: procfs.c:4428
 msgid "procfs: out of memory in 'init_inferior'"
 msgstr ""
 
-#: procfs.c:4738
+#: procfs.c:4537
 msgid "procfs: create_procinfo failed in child."
 msgstr ""
 
 #. Not found.  This must be an error rather than merely passing
 #. the file to execlp(), because execlp() would try all the
 #. exec()s, causing GDB to get confused.
-#: procfs.c:4909
+#: procfs.c:4708
 #, possible-c-format
 msgid "procfs:%d -- Can't find shell %s in PATH"
 msgstr ""
 
-#: procfs.c:5456
+#: procfs.c:5215 target.c:3168
+msgid "Not supported on this target."
+msgstr ""
+
+#: procfs.c:5262
 #, possible-c-format
 msgid "process %d flags:\n"
 msgstr ""
 
-#: procfs.c:5466
+#: procfs.c:5272
 #, possible-c-format
 msgid "thread %d flags:\n"
 msgstr ""
 
-#: procfs.c:5526
+#: procfs.c:5332
 msgid "you must be debugging a process to use this command."
 msgstr ""
 
-#: procfs.c:5529
+#: procfs.c:5335
 msgid "system call to trace"
 msgstr ""
 
-#: procfs.c:5570
-msgid ""
-"Show /proc process information about any running process.\n"
-"Specify process id, or use the program being debugged by default.\n"
-"Specify keyword 'mappings' for detailed info on memory mappings."
-msgstr ""
-
-#: procfs.c:5575
+#: procfs.c:5380
 msgid "Give a trace of entries into the syscall."
 msgstr ""
 
-#: procfs.c:5577
+#: procfs.c:5382
 msgid "Give a trace of exits from the syscall."
 msgstr ""
 
-#: procfs.c:5579
+#: procfs.c:5384
 msgid "Cancel a trace of entries into the syscall."
 msgstr ""
 
-#: procfs.c:5581
+#: procfs.c:5386
 msgid "Cancel a trace of exits from the syscall."
 msgstr ""
 
-#: procfs.c:5777
+#: procfs.c:5583
 msgid "gcore not implemented for this host."
 msgstr ""
 
-#: progspace.c:397
+#: progspace.c:398
 #, possible-c-format
 msgid "program space ID %d not known."
 msgstr ""
 
-#: progspace.c:613
+#: progspace.c:627
 msgid "Info about currently known program spaces."
 msgstr ""
 
-#: psymtab.c:88 symfile.c:1120
+#: psymtab.c:84 symfile.c:1103
 #, possible-c-format
 msgid "Reading symbols from %s..."
 msgstr ""
 
-#: psymtab.c:98 symfile.c:1149
+#: psymtab.c:94 symfile.c:1132
 msgid "(no debugging symbols found)..."
 msgstr ""
 
 #. Might want to error() here (in case symtab is corrupt and
 #. will cause a core dump), but maybe we can successfully
 #. continue, so let's not.
-#: psymtab.c:394
+#: psymtab.c:401
 #, possible-c-format
 msgid "(Internal error: pc %s in read in psymtab, but not in symtab.)\n"
 msgstr ""
 
-#: psymtab.c:842
+#: psymtab.c:859
 msgid "select_source_symtab: readin pst found and no symtabs."
 msgstr ""
 
-#: psymtab.c:1040
+#: psymtab.c:1071
 #, possible-c-format
 msgid "  Number of psym tables (not yet expanded): %d\n"
 msgstr ""
 
-#: psymtab.c:1722
+#: psymtab.c:1831
 msgid "print-psymbols takes an output file name and optional symbol file name"
 msgstr ""
 
@@ -16802,75 +17922,105 @@ msgstr ""
 msgid "type not handled in pascal_type_print_varspec_suffix()"
 msgstr ""
 
-#: p-valprint.c:575
+#: p-valprint.c:420
 #, possible-c-format
 msgid "Invalid pascal type code %d in symbol table."
 msgstr ""
 
-#: p-valprint.c:624
+#: p-valprint.c:468
 #, possible-c-format
 msgid "Printing of pascal static members is %s.\n"
 msgstr ""
 
-#: p-valprint.c:1075
+#: p-valprint.c:919
 msgid "Set printing of pascal static members."
 msgstr ""
 
-#: p-valprint.c:1076
+#: p-valprint.c:920
 msgid "Show printing of pascal static members."
 msgstr ""
 
-#: python/py-auto-load.c:260
+#: python/py-auto-load.c:61
+#, possible-c-format
+msgid "Auto-loading of Python scripts is %s.\n"
+msgstr ""
+
+#: python/py-auto-load.c:79
+#, possible-c-format
+msgid ""
+"auto-load: Loading Python script \"%s\" by extension for objfile \"%s\".\n"
+msgstr ""
+
+#: python/py-auto-load.c:124
 #, possible-c-format
 msgid "Invalid entry in %s section"
 msgstr ""
 
-#: python/py-auto-load.c:275
+#: python/py-auto-load.c:139
 #, possible-c-format
 msgid "Non-null-terminated path in %s: %s"
 msgstr ""
 
-#: python/py-auto-load.c:282
+#: python/py-auto-load.c:146
 #, possible-c-format
 msgid "Empty path in %s"
 msgstr ""
 
-#: python/py-auto-load.c:304
+#: python/py-auto-load.c:160
+#, possible-c-format
+msgid ""
+"auto-load: Loading Python script \"%s\" from section \"%s\" of objfile \"%s"
+"\".\n"
+msgstr ""
+
+#: python/py-auto-load.c:173
 #, possible-c-format
 msgid ""
 "Missing auto-load scripts referenced in section %s\n"
 "of file %s\n"
-"Use `info auto-load-scripts [REGEXP]' to list them."
+"Use `info auto-load python [REGEXP]' to list them."
 msgstr ""
 
-#: python/py-auto-load.c:345
+#: python/py-auto-load.c:220
 #, possible-c-format
 msgid "Couldn't read %s section of %s"
 msgstr ""
 
-#: python/py-auto-load.c:549 solib.c:882 solib.c:964 xcoffsolib.c:113
-#, possible-c-format
-msgid "Invalid regexp: %s"
+#: python/py-auto-load.c:253
+msgid "Set the debugger's behaviour regarding auto-loaded Python scripts."
+msgstr ""
+
+#: python/py-auto-load.c:254
+msgid "Show the debugger's behaviour regarding auto-loaded Python scripts."
 msgstr ""
 
-#: python/py-auto-load.c:613
-msgid "Set the debugger's behaviour regarding auto-loaded scripts."
+#: python/py-auto-load.c:255
+msgid ""
+"If enabled, auto-loaded Python scripts are loaded when the debugger reads\n"
+"an executable or shared library.\n"
+"This options has security implications for untrusted inferiors."
 msgstr ""
 
-#: python/py-auto-load.c:614
-msgid "Show the debugger's behaviour regarding auto-loaded scripts."
+#: python/py-auto-load.c:264
+msgid ""
+"Set the debugger's behaviour regarding auto-loaded Python scripts, "
+"deprecated."
 msgstr ""
 
-#: python/py-auto-load.c:615
+#: python/py-auto-load.c:267
 msgid ""
-"If enabled, auto-loaded scripts are loaded when the debugger reads\n"
-"an executable or shared library."
+"Show the debugger's behaviour regarding auto-loaded Python scripts, "
+"deprecated."
 msgstr ""
 
-#: python/py-auto-load.c:624
+#: python/py-auto-load.c:282
 msgid ""
-"Print the list of automatically loaded scripts.\n"
-"Usage: info auto-load-scripts [REGEXP]"
+"Print the list of automatically loaded Python scripts.\n"
+"Usage: info auto-load python-scripts [REGEXP]"
+msgstr ""
+
+#: python/py-auto-load.c:286
+msgid "Print the list of automatically loaded Python scripts, deprecated."
 msgstr ""
 
 #. Require a valid block.  All access to block_object->block should be
@@ -16889,83 +18039,83 @@ msgstr ""
 msgid "Symbol is null."
 msgstr ""
 
-#: python/py-block.c:391 python/py-frame.c:239
+#: python/py-block.c:391 python/py-frame.c:237
 msgid "Cannot locate object file for block."
 msgstr ""
 
-#: python/py-breakpoint.c:124
+#: python/py-breakpoint.c:125
 msgid "Cannot delete `enabled' attribute."
 msgstr ""
 
-#: python/py-breakpoint.c:131
+#: python/py-breakpoint.c:132
 msgid "The value of `enabled' must be a boolean."
 msgstr ""
 
-#: python/py-breakpoint.c:163
+#: python/py-breakpoint.c:164
 msgid "Cannot delete `silent' attribute."
 msgstr ""
 
-#: python/py-breakpoint.c:169
+#: python/py-breakpoint.c:170
 msgid "The value of `silent' must be a boolean."
 msgstr ""
 
-#: python/py-breakpoint.c:194
+#: python/py-breakpoint.c:195
 msgid "Cannot delete `thread' attribute."
 msgstr ""
 
-#: python/py-breakpoint.c:205
+#: python/py-breakpoint.c:206
 msgid "Invalid thread ID."
 msgstr ""
 
-#: python/py-breakpoint.c:214
+#: python/py-breakpoint.c:215
 msgid "The value of `thread' must be an integer or None."
 msgstr ""
 
-#: python/py-breakpoint.c:237
+#: python/py-breakpoint.c:238
 msgid "Cannot delete `task' attribute."
 msgstr ""
 
-#: python/py-breakpoint.c:254
+#: python/py-breakpoint.c:255
 msgid "Invalid task ID."
 msgstr ""
 
-#: python/py-breakpoint.c:263
+#: python/py-breakpoint.c:264
 msgid "The value of `task' must be an integer or None."
 msgstr ""
 
-#: python/py-breakpoint.c:308
+#: python/py-breakpoint.c:309
 msgid "Cannot delete `ignore_count' attribute."
 msgstr ""
 
-#: python/py-breakpoint.c:314
+#: python/py-breakpoint.c:315
 msgid "The value of `ignore_count' must be an integer."
 msgstr ""
 
-#: python/py-breakpoint.c:344
+#: python/py-breakpoint.c:345
 msgid "Cannot delete `hit_count' attribute."
 msgstr ""
 
-#: python/py-breakpoint.c:357
+#: python/py-breakpoint.c:358
 msgid "The value of `hit_count' must be zero."
 msgstr ""
 
-#: python/py-breakpoint.c:439
+#: python/py-breakpoint.c:440
 msgid "Cannot delete `condition' attribute."
 msgstr ""
 
-#: python/py-breakpoint.c:642
+#: python/py-breakpoint.c:643
 msgid "Cannot understand watchpoint access type."
 msgstr ""
 
-#: python/py-breakpoint.c:646
+#: python/py-breakpoint.c:647
 msgid "Do not understand breakpoint type to set."
 msgstr ""
 
-#: python/py-breakpoint.c:826
+#: python/py-breakpoint.c:827
 msgid "Error while creating breakpoint from GDB."
 msgstr ""
 
-#: python/py-breakpoint.c:921
+#: python/py-breakpoint.c:922
 msgid ""
 "Cannot set 'stop' method.  There is an existing GDB condition attached to "
 "the breakpoint."
@@ -17004,53 +18154,53 @@ msgstr ""
 msgid "Could not convert argument to Python string."
 msgstr ""
 
-#: python/py-cmd.c:331
+#: python/py-cmd.c:330
 msgid "No command name found."
 msgstr ""
 
-#: python/py-cmd.c:363
+#: python/py-cmd.c:362
 #, possible-c-format
 msgid "Could not find command prefix %s."
 msgstr ""
 
-#: python/py-cmd.c:377
+#: python/py-cmd.c:376
 #, possible-c-format
 msgid "'%s' is not a prefix command."
 msgstr ""
 
-#: python/py-cmd.c:425
+#: python/py-cmd.c:424
 msgid "Command object already initialized."
 msgstr ""
 
-#: python/py-cmd.c:441 python/py-param.c:669
+#: python/py-cmd.c:440 python/py-param.c:669
 msgid "Invalid command class argument."
 msgstr ""
 
-#: python/py-cmd.c:448
+#: python/py-cmd.c:447
 msgid "Invalid completion type argument."
 msgstr ""
 
-#: python/py-cmd.c:505 python/py-param.c:314
+#: python/py-cmd.c:504 python/py-param.c:314
 msgid "This command is not documented."
 msgstr ""
 
-#: python/py-finishbreakpoint.c:190
+#: python/py-finishbreakpoint.c:193
 msgid "\"FinishBreakpoint\" not meaningful in the outermost frame."
 msgstr ""
 
-#: python/py-finishbreakpoint.c:196
+#: python/py-finishbreakpoint.c:199
 msgid "\"FinishBreakpoint\" cannot be set on a dummy frame."
 msgstr ""
 
-#: python/py-finishbreakpoint.c:204 python/py-finishbreakpoint.c:305
+#: python/py-finishbreakpoint.c:207 python/py-finishbreakpoint.c:311
 msgid "Invalid ID for the `frame' object."
 msgstr ""
 
-#: python/py-finishbreakpoint.c:219
+#: python/py-finishbreakpoint.c:222
 msgid "No thread currently selected."
 msgstr ""
 
-#: python/py-finishbreakpoint.c:229
+#: python/py-finishbreakpoint.c:232
 msgid "The value of `internal' must be a boolean."
 msgstr ""
 
@@ -17060,24 +18210,24 @@ msgstr ""
 msgid "Frame is invalid."
 msgstr ""
 
-#: python/py-frame.c:292
+#: python/py-frame.c:290
 msgid "Could not allocate frame object."
 msgstr ""
 
-#: python/py-frame.c:441 python/py-type.c:859
+#: python/py-frame.c:439 python/py-type.c:872
 msgid "Second argument must be block."
 msgstr ""
 
-#: python/py-frame.c:459
+#: python/py-frame.c:457
 #, possible-c-format
 msgid "Variable '%s' not found."
 msgstr ""
 
-#: python/py-frame.c:470
+#: python/py-frame.c:468
 msgid "Argument must be a symbol or string."
 msgstr ""
 
-#: python/py-frame.c:559
+#: python/py-frame.c:557
 msgid "Invalid frame stop reason."
 msgstr ""
 
@@ -17102,8 +18252,8 @@ msgstr ""
 msgid "Error occurred in Python convenience function."
 msgstr ""
 
-#: python/py-function.c:152 python/py-prettyprint.c:642 python/python.c:252
-#: python/python.c:274
+#: python/py-function.c:152 python/py-prettyprint.c:642 python/python.c:251
+#: python/python.c:273
 msgid "Error while executing Python code."
 msgstr ""
 
@@ -17116,28 +18266,28 @@ msgstr ""
 msgid "Inferior no longer exists."
 msgstr ""
 
-#: python/py-inferior.c:449
+#: python/py-inferior.c:444
 msgid "Could not allocate memory buffer object."
 msgstr ""
 
-#: python/py-inferior.c:526
+#: python/py-inferior.c:520
 #, possible-c-format
 msgid "Memory buffer for address %s, which is %s bytes long."
 msgstr ""
 
-#: python/py-inferior.c:540
+#: python/py-inferior.c:534
 msgid "The memory buffer supports only one segment."
 msgstr ""
 
-#: python/py-inferior.c:607
+#: python/py-inferior.c:601
 msgid "Search range is empty."
 msgstr ""
 
-#: python/py-inferior.c:615
+#: python/py-inferior.c:609
 msgid "The search range is too large."
 msgstr ""
 
-#: python/py-inferior.c:626
+#: python/py-inferior.c:620
 msgid "The pattern is not a Python buffer."
 msgstr ""
 
@@ -17238,7 +18388,7 @@ msgstr ""
 msgid "Only PARAM_ENUM accepts a fourth argument."
 msgstr ""
 
-#: python/py-prettyprint.c:291 valprint.c:394
+#: python/py-prettyprint.c:291 valprint.c:749
 msgid "<error reading variable>"
 msgstr ""
 
@@ -17252,57 +18402,65 @@ msgstr ""
 msgid "Symbol is invalid."
 msgstr ""
 
+#: python/py-symbol.c:271
+msgid "invalid frame"
+msgstr ""
+
+#: python/py-symbol.c:275
+msgid "symbol requires a frame to compute its value"
+msgstr ""
+
 #. Require a valid symbol table.  All access to symtab_object->symtab
 #. should be gated by this call.
-#: python/py-symtab.c:50
+#: python/py-symtab.c:51
 msgid "Symbol Table is invalid."
 msgstr ""
 
 #. Require a valid symbol table and line object.  All access to
 #. sal_object->sal should be gated by this call.
-#: python/py-symtab.c:80
+#: python/py-symtab.c:81
 msgid "Symbol Table and Line is invalid."
 msgstr ""
 
-#: python/py-type.c:470
+#: python/py-type.c:483
 msgid "Array bound must be an integer"
 msgstr ""
 
-#: python/py-type.c:486
+#: python/py-type.c:499
 msgid "Array length must not be negative"
 msgstr ""
 
-#: python/py-type.c:532
+#: python/py-type.c:545
 msgid "This type does not have a range."
 msgstr ""
 
-#: python/py-type.c:605
+#: python/py-type.c:618
 msgid "Type does not have a target."
 msgstr ""
 
-#: python/py-type.c:786
+#: python/py-type.c:799
 msgid "Null type name."
 msgstr ""
 
-#: python/py-type.c:813
+#: python/py-type.c:826
 msgid "Type is not a template."
 msgstr ""
 
-#: python/py-type.c:826 python/py-type.c:880
+#: python/py-type.c:839 python/py-type.c:893
 #, possible-c-format
 msgid "No argument %d in template."
 msgstr ""
 
-#: python/py-type.c:891
+#: python/py-type.c:904
 msgid "Template argument is optimized out"
 msgstr ""
 
-#: python/py-type.c:1044
+#: python/py-type.c:1061
 #, possible-c-format
 msgid "Unsupported field kind %d by check_types_equal"
 msgstr ""
 
-#: python/py-type.c:1482
+#: python/py-type.c:1495
 msgid "'block' argument must be a Block."
 msgstr ""
 
@@ -17314,51 +18472,57 @@ msgstr ""
 msgid "Overflow converting to address."
 msgstr ""
 
-#: python/py-value.c:132
+#: python/py-value.c:133
 msgid "Value object creation takes only 1 argument"
 msgstr ""
 
-#: python/py-value.c:140
+#: python/py-value.c:141
 msgid "Could not allocate memory to create Value object."
 msgstr ""
 
-#: python/py-value.c:391
+#: python/py-value.c:224
+msgid ""
+"Trying to get the referenced value from a value which is neither a pointer "
+"nor a reference."
+msgstr ""
+
+#: python/py-value.c:447
 msgid "Argument must be a type."
 msgstr ""
 
-#: python/py-value.c:443 python/py-value.c:982 python/py-value.c:1019
+#: python/py-value.c:504 python/py-value.c:1071 python/py-value.c:1113
 msgid "Invalid operation on gdb.Value."
 msgstr ""
 
-#: python/py-value.c:487
+#: python/py-value.c:550
 msgid "Cannot subscript requested type."
 msgstr ""
 
-#: python/py-value.c:504
+#: python/py-value.c:571
 msgid "Setting of struct elements is not currently supported."
 msgstr ""
 
-#: python/py-value.c:529
+#: python/py-value.c:597
 msgid "Value is not callable (not TYPE_CODE_FUNC)."
 msgstr ""
 
-#: python/py-value.c:536
+#: python/py-value.c:604
 msgid "Inferior arguments must be provided in a tuple."
 msgstr ""
 
-#: python/py-value.c:1060
+#: python/py-value.c:1156
 msgid "Cannot convert value to int."
 msgstr ""
 
-#: python/py-value.c:1083
+#: python/py-value.c:1179
 msgid "Cannot convert value to long."
 msgstr ""
 
-#: python/py-value.c:1106
+#: python/py-value.c:1202
 msgid "Cannot convert value to float."
 msgstr ""
 
-#: python/py-value.c:1242
+#: python/py-value.c:1339
 #, possible-c-format
 msgid "Could not convert Python object: %s."
 msgstr ""
@@ -17367,7 +18531,7 @@ msgstr ""
 #. exception if it is invalid.
 #. Require that BREAKPOINT be a valid breakpoint ID; throw a Python
 #. exception if it is invalid.  This macro is for use in setter functions.
-#: python/python-internal.h:146 python/python-internal.h:156
+#: python/python-internal.h:147 python/python-internal.h:157
 #, possible-c-format
 msgid "Breakpoint %d is invalid."
 msgstr ""
@@ -17376,60 +18540,55 @@ msgstr ""
 msgid "internal error: Unhandled Python exception"
 msgstr ""
 
-#: python/python.c:195
+#: python/python.c:192
 #, possible-c-format
 msgid "Error while opening file: %s"
 msgstr ""
 
-#: python/python.c:244
+#: python/python.c:243
 msgid "Invalid \"python\" block structure."
 msgstr ""
 
-#: python/python.c:348
+#: python/python.c:347
 msgid "Programmer error: unhandled type."
 msgstr ""
 
-#: python/python.c:376
+#: python/python.c:375
 #, possible-c-format
 msgid "Could not find parameter `%s'."
 msgstr ""
 
-#: python/python.c:380
+#: python/python.c:379
 #, possible-c-format
 msgid "`%s' is not a parameter."
 msgstr ""
 
-#: python/python.c:711
+#: python/python.c:739
 msgid "Posted event is not callable"
 msgstr ""
 
-#: python/python.c:792
+#: python/python.c:820
 msgid "Return from prompt_hook must be either a Python string, or None"
 msgstr ""
 
-#: python/python.c:931
+#: python/python.c:964
 msgid "Error occurred computing Python errormessage.\n"
 msgstr ""
 
-#: python/python.c:1064 python/python.c:1078 python/python.c:1085
+#: python/python.c:1098 python/python.c:1112 python/python.c:1119
 msgid "Python scripting is not supported in this copy of GDB."
 msgstr ""
 
-#: python/python.c:1092
+#: python/python.c:1126
 msgid "gdbpy_should_stop called when Python scripting is  not supported."
 msgstr ""
 
-#: python/python.c:1100
+#: python/python.c:1134
 msgid ""
 "gdbpy_breakpoint_has_py_cond called when Python scripting is not supported."
 msgstr ""
 
-#: python/python.c:1152
-#, possible-c-format
-msgid "The mode of Python stack printing on error is \"%s\".\n"
-msgstr ""
-
-#: python/python.c:1195
+#: python/python.c:1177
 msgid ""
 "Evaluate a Python command.\n"
 "\n"
@@ -17442,7 +18601,7 @@ msgid ""
 "the end of the command."
 msgstr ""
 
-#: python/python.c:1206
+#: python/python.c:1188
 msgid ""
 "Evaluate a Python command.\n"
 "\n"
@@ -17450,35 +18609,19 @@ msgid ""
 "This command is only a placeholder."
 msgstr ""
 
-#: python/python.c:1215 python/python.c:1219
-msgid "Prefix command for python maintenance settings."
-msgstr ""
-
-#: python/python.c:1224
-msgid "Enable or disable printing of Python stack dump on error."
-msgstr ""
-
-#: python/python.c:1225
-msgid "Show whether Python stack will be printed on error."
-msgstr ""
-
-#: python/python.c:1226
-msgid "Enables or disables printing of Python stack traces."
-msgstr ""
-
-#: python/python.c:1244 python/python.c:1249
+#: python/python.c:1198 python/python.c:1203
 msgid "Prefix command for python preference settings."
 msgstr ""
 
-#: python/python.c:1254
+#: python/python.c:1208
 msgid "Set mode for Python stack dump on error."
 msgstr ""
 
-#: python/python.c:1255
+#: python/python.c:1209
 msgid "Show the mode of Python stack printing on error."
 msgstr ""
 
-#: python/python.c:1256
+#: python/python.c:1210
 msgid ""
 "none  == no stack or message will be printed.\n"
 "full == a message and a stack will be printed.\n"
@@ -17497,23 +18640,23 @@ msgstr ""
 msgid "Support for Ravenscar task/thread switching is disabled\n"
 msgstr ""
 
-#: ravenscar-thread.c:440
+#: ravenscar-thread.c:443
 msgid "Prefix command for changing Ravenscar-specific settings"
 msgstr ""
 
-#: ravenscar-thread.c:444
+#: ravenscar-thread.c:447
 msgid "Prefix command for showing Ravenscar-specific settings"
 msgstr ""
 
-#: ravenscar-thread.c:448
+#: ravenscar-thread.c:451
 msgid "Enable or disable support for GNAT Ravenscar tasks"
 msgstr ""
 
-#: ravenscar-thread.c:449
+#: ravenscar-thread.c:452
 msgid "Show whether support for GNAT Ravenscar tasks is enabled"
 msgstr ""
 
-#: ravenscar-thread.c:451
+#: ravenscar-thread.c:454
 msgid ""
 "Enable or disable support for task/thread switching with the GNAT\n"
 "Ravenscar run-time library for bareboard configuration."
@@ -17533,7 +18676,7 @@ msgstr ""
 msgid "Process record: inferior program stopped."
 msgstr ""
 
-#: record.c:637 record.c:1573 record.c:1582 record.c:1588
+#: record.c:637 record.c:1577 record.c:1586 record.c:1592
 msgid "Process record: failed to record execution log."
 msgstr ""
 
@@ -17588,253 +18731,253 @@ msgstr ""
 msgid "Could not find 'to_stopped_data_address' method on the target stack."
 msgstr ""
 
-#: record.c:911
+#: record.c:913
 msgid ""
 "Process record target already running.  Use \"record stop\" to stop record "
 "target first."
 msgstr ""
 
-#: record.c:964
+#: record.c:966
 msgid "Could not find 'to_xfer_partial' method on the target stack."
 msgstr ""
 
-#: record.c:1615
+#: record.c:1619
 msgid ""
 "Because GDB is in replay mode, changing the value of a register will make "
 "the execution log unusable from this point onward.  Change all registers?"
 msgstr ""
 
-#: record.c:1621
+#: record.c:1625
 #, possible-c-format
 msgid ""
 "Because GDB is in replay mode, changing the value of a register will make "
 "the execution log unusable from this point onward.  Change register %s?"
 msgstr ""
 
-#: record.c:1643 record.c:1676
+#: record.c:1647 record.c:1680
 msgid "Process record canceled the operation."
 msgstr ""
 
 #. Let user choose if he wants to write memory or not.
-#: record.c:1672
+#: record.c:1676
 #, possible-c-format
 msgid ""
 "Because GDB is in replay mode, writing to memory will make the execution log "
 "unusable from this point onward.  Write memory at address %s?"
 msgstr ""
 
-#: record.c:1807 reverse.c:271
+#: record.c:1902 reverse.c:270
 #, possible-c-format
 msgid "Unbalanced quotes: %s"
 msgstr ""
 
-#: record.c:1956 record.c:2043 target.c:524
+#: record.c:2051 record.c:2138 target.c:525
 msgid "You can't do that without a process to debug."
 msgstr ""
 
-#: record.c:2116
+#: record.c:2211
 #, possible-c-format
 msgid "Debugging of process record target is %s.\n"
 msgstr ""
 
-#: record.c:2138
+#: record.c:2233
 msgid ""
 "Delete the log from this point forward and begin to record the running "
 "message at current PC?"
 msgstr ""
 
-#: record.c:2144
+#: record.c:2239
 msgid "Already at end of record list.\n"
 msgstr ""
 
-#: record.c:2148 record.c:2163
+#: record.c:2243 record.c:2258
 msgid "Process record is not started.\n"
 msgstr ""
 
-#: record.c:2159
+#: record.c:2254
 msgid "Process record is stopped and all execution logs are deleted.\n"
 msgstr ""
 
-#: record.c:2188
+#: record.c:2283
 msgid "\"set record\" must be followed by an apporpriate subcommand.\n"
 msgstr ""
 
-#: record.c:2209
+#: record.c:2304
 msgid "Replay mode:\n"
 msgstr ""
 
-#: record.c:2211
+#: record.c:2306
 msgid "Record mode:\n"
 msgstr ""
 
 #. Display instruction number for first instruction in the log.
-#: record.c:2223
+#: record.c:2318
 #, possible-c-format
 msgid "Lowest recorded instruction number is %s.\n"
 msgstr ""
 
-#: record.c:2228
+#: record.c:2323
 #, possible-c-format
 msgid "Current instruction number is %s.\n"
 msgstr ""
 
 #. Display instruction number for last instruction in the log.
-#: record.c:2232
+#: record.c:2327
 #, possible-c-format
 msgid "Highest recorded instruction number is %s.\n"
 msgstr ""
 
 #. Display log count.
-#: record.c:2236
+#: record.c:2331
 #, possible-c-format
 msgid "Log contains %d instructions.\n"
 msgstr ""
 
-#: record.c:2241
+#: record.c:2336
 msgid "No instructions have been logged.\n"
 msgstr ""
 
-#: record.c:2246
+#: record.c:2341
 msgid "target record is not active.\n"
 msgstr ""
 
 #. Display max log size.
-#: record.c:2250
+#: record.c:2345
 #, possible-c-format
 msgid "Max logged instructions is %d.\n"
 msgstr ""
 
-#: record.c:2306
+#: record.c:2401
 #, possible-c-format
 msgid "Failed to read %d bytes from core file %s ('%s')."
 msgstr ""
 
-#: record.c:2378
+#: record.c:2473
 #, possible-c-format
 msgid "Version mis-match or file format error in core file %s."
 msgstr ""
 
-#: record.c:2483
+#: record.c:2578
 #, possible-c-format
 msgid "Bad entry type in core file %s."
 msgstr ""
 
-#: record.c:2504
+#: record.c:2599
 #, possible-c-format
 msgid "Auto increase record/replay buffer limit to %d."
 msgstr ""
 
 #. Succeeded.
-#: record.c:2509
+#: record.c:2604
 #, possible-c-format
 msgid "Restored records from core file %s.\n"
 msgstr ""
 
-#: record.c:2525
+#: record.c:2620
 #, possible-c-format
 msgid "Failed to write %d bytes to core file %s ('%s')."
 msgstr ""
 
-#: record.c:2570
+#: record.c:2665
 msgid ""
 "This command can only be used with target 'record'.\n"
 "Use 'target record' first.\n"
 msgstr ""
 
-#: record.c:2637
+#: record.c:2732
 #, possible-c-format
 msgid "Failed to create 'precord' section for corefile %s: %s"
 msgstr ""
 
 #. Succeeded.
-#: record.c:2766
+#: record.c:2861
 #, possible-c-format
 msgid "Saved core file %s with execution log.\n"
 msgstr ""
 
-#: record.c:2811
+#: record.c:2906
 msgid "Command requires an argument (insn number to go to)."
 msgstr ""
 
-#: record.c:2845
+#: record.c:2940
 #, possible-c-format
 msgid "Target insn '%s' not found."
 msgstr ""
 
-#: record.c:2847
+#: record.c:2942
 #, possible-c-format
 msgid "Already at insn '%s'."
 msgstr ""
 
-#: record.c:2850
+#: record.c:2945
 #, possible-c-format
 msgid "Go forward to insn number %s\n"
 msgstr ""
 
-#: record.c:2856
+#: record.c:2951
 #, possible-c-format
 msgid "Go backward to insn number %s\n"
 msgstr ""
 
-#: record.c:2881
+#: record.c:2979
 msgid "Set debugging of record/replay feature."
 msgstr ""
 
-#: record.c:2882
+#: record.c:2980
 msgid "Show debugging of record/replay feature."
 msgstr ""
 
-#: record.c:2883
+#: record.c:2981
 msgid "When enabled, debugging output for record/replay feature is displayed."
 msgstr ""
 
-#: record.c:2889
+#: record.c:2987
 msgid "Abbreviated form of \"target record\" command."
 msgstr ""
 
-#: record.c:2895
+#: record.c:2993
 msgid "Set record options"
 msgstr ""
 
-#: record.c:2899
+#: record.c:2997
 msgid "Show record options"
 msgstr ""
 
-#: record.c:2903
+#: record.c:3001
 msgid "Info record options"
 msgstr ""
 
-#: record.c:2908
+#: record.c:3006
 msgid ""
 "Save the execution log to a file.\n"
 "Argument is optional filename.\n"
 "Default filename is 'gdb_record.<process_id>'."
 msgstr ""
 
-#: record.c:2915
+#: record.c:3013
 msgid ""
 "Restore the execution log from a file.\n"
 "Argument is filename.  File must be created with 'record save'."
 msgstr ""
 
-#: record.c:2921
+#: record.c:3019
 msgid "Delete the rest of execution log and start recording it anew."
 msgstr ""
 
-#: record.c:2927
+#: record.c:3025
 msgid "Stop the record/replay target."
 msgstr ""
 
-#: record.c:2933
+#: record.c:3031
 msgid "Set whether record/replay stops when record/replay buffer becomes full."
 msgstr ""
 
-#: record.c:2934
+#: record.c:3032
 msgid ""
 "Show whether record/replay stops when record/replay buffer becomes full."
 msgstr ""
 
-#: record.c:2936
+#: record.c:3034
 msgid ""
 "Default is ON.\n"
 "When ON, if the record/replay buffer becomes full, ask user what to do.\n"
@@ -17842,37 +18985,37 @@ msgid ""
 "delete the oldest recorded instruction to make room for each new one."
 msgstr ""
 
-#: record.c:2944
+#: record.c:3042
 msgid "Set record/replay buffer limit."
 msgstr ""
 
-#: record.c:2945
+#: record.c:3043
 msgid "Show record/replay buffer limit."
 msgstr ""
 
-#: record.c:2945
+#: record.c:3043
 msgid ""
 "Set the maximum number of instructions to be stored in the\n"
 "record/replay buffer.  Zero means unlimited.  Default is 200000."
 msgstr ""
 
-#: record.c:2951
+#: record.c:3049
 msgid ""
 "Restore the program to its state at instruction number N.\n"
 "Argument is instruction number, as shown by 'info record'."
 msgstr ""
 
-#: record.c:2957
+#: record.c:3055
 msgid ""
 "Set whether query if PREC cannot record memory change of next instruction."
 msgstr ""
 
-#: record.c:2959
+#: record.c:3057
 msgid ""
 "Show whether query if PREC cannot record memory change of next instruction."
 msgstr ""
 
-#: record.c:2961
+#: record.c:3059
 msgid ""
 "Default is OFF.\n"
 "When ON, query if PREC cannot record memory change of next instruction."
@@ -17945,125 +19088,125 @@ msgstr ""
 
 #. malformed packet error
 #. general case:
-#: remote.c:429
+#: remote.c:439
 msgid "remote.c: error in outgoing packet."
 msgstr ""
 
-#: remote.c:431
+#: remote.c:441
 #, possible-c-format
 msgid "remote.c: error in outgoing packet at field #%ld."
 msgstr ""
 
-#: remote.c:434
+#: remote.c:444
 #, possible-c-format
 msgid "trace API error 0x%s."
 msgstr ""
 
-#: remote.c:436
+#: remote.c:446
 #, possible-c-format
 msgid "Target returns error code '%s'."
 msgstr ""
 
-#: remote.c:465
+#: remote.c:475
 #, possible-c-format
 msgid "invalid qRelocInsn packet: %s"
 msgstr ""
 
-#: remote.c:499
+#: remote.c:509
 msgid "warning: relocating instruction: "
 msgstr ""
 
-#: remote.c:765
+#: remote.c:775
 msgid ""
 "Send the ASCII ETX character (Ctrl-c) to the remote target to interrupt the "
 "execution of the program.\n"
 msgstr ""
 
-#: remote.c:770
+#: remote.c:780
 msgid ""
 "send a break signal to the remote target to interrupt the execution of the "
 "program.\n"
 msgstr ""
 
-#: remote.c:774
+#: remote.c:784
 msgid ""
 "Send a break signal and 'g' a.k.a. Magic SysRq g to the remote target to "
 "interrupt the execution of Linux kernel.\n"
 msgstr ""
 
-#: remote.c:779 remote.c:3152
+#: remote.c:789 remote.c:3222
 #, possible-c-format
 msgid "Invalid value for interrupt_sequence_mode: %s."
 msgstr ""
 
-#: remote.c:923
+#: remote.c:933
 msgid "Argument required (integer, `fixed' or `limited')."
 msgstr ""
 
-#: remote.c:936
+#: remote.c:946
 #, possible-c-format
 msgid "Invalid %s (bad syntax)."
 msgstr ""
 
-#: remote.c:943
+#: remote.c:953
 #, possible-c-format
 msgid "Invalid %s (too large)."
 msgstr ""
 
-#: remote.c:949
+#: remote.c:959
 #, possible-c-format
 msgid ""
 "The target may not be able to correctly handle a %s\n"
 "of %ld bytes. Change the packet size? "
 msgstr ""
 
-#: remote.c:952
+#: remote.c:962
 msgid "Packet size not changed."
 msgstr ""
 
-#: remote.c:962
+#: remote.c:972
 #, possible-c-format
 msgid "The %s is %ld. "
 msgstr ""
 
-#: remote.c:964
+#: remote.c:974
 #, possible-c-format
 msgid "Packets are fixed at %ld bytes.\n"
 msgstr ""
 
-#: remote.c:967
+#: remote.c:977
 #, possible-c-format
 msgid "Packets are limited to %ld bytes.\n"
 msgstr ""
 
-#: remote.c:1091
+#: remote.c:1101
 #, possible-c-format
 msgid "Support for the `%s' packet is auto-detected, currently %s.\n"
 msgstr ""
 
-#: remote.c:1097
+#: remote.c:1107
 #, possible-c-format
 msgid "Support for the `%s' packet is currently %s.\n"
 msgstr ""
 
-#: remote.c:1192
+#: remote.c:1202
 msgid "packet_ok: attempt to use a disabled packet"
 msgstr ""
 
 #. If the stub previously indicated that the packet was
 #. supported then there is a protocol error..
-#: remote.c:1206
+#: remote.c:1216
 #, possible-c-format
 msgid "Protocol error: %s (%s) conflicting enabled responses."
 msgstr ""
 
 #. The user set it wrong.
-#: remote.c:1210
+#: remote.c:1220
 #, possible-c-format
 msgid "Enabled packet %s (%s) not recognized by stub"
 msgstr ""
 
-#: remote.c:1299 remote.c:1320
+#: remote.c:1315 remote.c:1336
 #, possible-c-format
 msgid "Could not find config for %s"
 msgstr ""
@@ -18075,39 +19218,39 @@ msgstr ""
 #. Error of some sort.
 #. We're out of sync with the target now.  Did it continue or
 #. not?  Not is more likely, so report a stop.
-#: remote.c:1437 remote.c:2831 remote.c:2871 remote.c:2988 remote.c:3902
-#: remote.c:5480 remote.c:5579 remote.c:6799
+#: remote.c:1454 remote.c:2915 remote.c:2941 remote.c:3058 remote.c:4032
+#: remote.c:5650 remote.c:5749 remote.c:6969
 #, possible-c-format
 msgid "Remote failure reply: %s"
 msgstr ""
 
-#: remote.c:1916
+#: remote.c:2000
 #, possible-c-format
 msgid "invalid remote ptid: %s"
 msgstr ""
 
-#: remote.c:2247
+#: remote.c:2331
 msgid "Incomplete response to threadinfo request."
 msgstr ""
 
 #. This is an answer to a different request.
-#: remote.c:2250
+#: remote.c:2334
 msgid "ERROR RMT Thread info mismatch."
 msgstr ""
 
-#: remote.c:2264
+#: remote.c:2348
 msgid "ERROR RMT: threadinfo tag mismatch."
 msgstr ""
 
-#: remote.c:2272
+#: remote.c:2356
 msgid "ERROR RMT: length of threadid is not 16."
 msgstr ""
 
-#: remote.c:2287
+#: remote.c:2371
 msgid "ERROR RMT: 'exists' length too long."
 msgstr ""
 
-#: remote.c:2311
+#: remote.c:2395
 msgid "ERROR RMT: unknown thread info tag."
 msgstr ""
 
@@ -18119,740 +19262,731 @@ msgstr ""
 #. exit
 #. wait for packet, then exit
 #.
-#: remote.c:2415
+#: remote.c:2499
 msgid "HMM: threadlist did not echo arg thread, dropping it."
 msgstr ""
 
-#: remote.c:2422
+#: remote.c:2506
 msgid "RMT ERROR : failed to get remote thread list."
 msgstr ""
 
-#: remote.c:2430
+#: remote.c:2514
 msgid "RMT ERROR: threadlist response longer than requested."
 msgstr ""
 
-#: remote.c:2467
+#: remote.c:2551
 msgid "Remote fetch threadlist -infinite loop-."
 msgstr ""
 
 #. paranoia
-#: remote.c:2632
+#: remote.c:2716
 msgid "Command can only be used when connected to the remote target."
 msgstr ""
 
-#: remote.c:2649
+#: remote.c:2733
 msgid "threads"
 msgstr ""
 
-#: remote.c:2748
+#: remote.c:2832
 msgid "remote_threads_extra_info"
 msgstr ""
 
-#: remote.c:3023 remote.c:3050
+#: remote.c:3093 remote.c:3120
 #, possible-c-format
 msgid "Target reported unsupported offsets: %s"
 msgstr ""
 
-#: remote.c:3048
+#: remote.c:3118
 #, possible-c-format
 msgid "Malformed response to offset query, %s"
 msgstr ""
 
-#: remote.c:3096
+#: remote.c:3166
 msgid "Can not handle qOffsets TextSeg response with this symbol file"
 msgstr ""
 
-#: remote.c:3232
+#: remote.c:3345
 msgid "Non-stop mode requested, but remote does not support non-stop"
 msgstr ""
 
-#: remote.c:3239
+#: remote.c:3352
 #, possible-c-format
 msgid "Remote refused setting non-stop mode with: %s"
 msgstr ""
 
-#: remote.c:3255
+#: remote.c:3368
 #, possible-c-format
 msgid "Remote refused setting all-stop mode with: %s"
 msgstr ""
 
-#: remote.c:3267 remote.c:3374
+#: remote.c:3384 remote.c:3476
 msgid "The target is not running (try extended-remote?)"
 msgstr ""
 
-#: remote.c:3390
+#: remote.c:3492
 msgid "remote didn't report the current thread in non-stop mode"
 msgstr ""
 
-#: remote.c:3417
+#: remote.c:3519
 msgid "Trace is already running on the target.\n"
 msgstr ""
 
-#: remote.c:3548
+#: remote.c:3650
 msgid ""
 "The remote protocol may be unreliable over UDP.\n"
 "Some events may be lost, rendering further debugging impossible."
 msgstr ""
 
-#: remote.c:3584
+#: remote.c:3686
 #, possible-c-format
 msgid "Remote refused setting permissions with: %s"
 msgstr ""
 
-#: remote.c:3621
+#: remote.c:3723
 #, possible-c-format
 msgid "Remote qSupported response supplied an unexpected value for \"%s\"."
 msgstr ""
 
-#: remote.c:3645
+#: remote.c:3747
 #, possible-c-format
 msgid "Remote target reported \"%s\" without a size."
 msgstr ""
 
-#: remote.c:3654
+#: remote.c:3756
 #, possible-c-format
 msgid "Remote target reported \"%s\" with a bad size: \"%s\"."
 msgstr ""
 
-#: remote.c:3661
+#: remote.c:3763
 #, possible-c-format
 msgid "limiting remote suggested packet size (%d bytes) to %d"
 msgstr ""
 
-#: remote.c:3932
+#: remote.c:4062
 msgid "empty item in \"qSupported\" response"
 msgstr ""
 
-#: remote.c:3963
+#: remote.c:4093
 #, possible-c-format
 msgid "unrecognized item \"%s\" in \"qSupported\" response"
 msgstr ""
 
-#: remote.c:4011
+#: remote.c:4141
 msgid ""
 "To open a remote debug connection, you need to specify what\n"
 "serial device is attached to the remote system\n"
 "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."
 msgstr ""
 
-#: remote.c:4026
+#: remote.c:4156
 msgid "Already connected to a remote target.  Disconnect? "
 msgstr ""
 
-#: remote.c:4029
+#: remote.c:4159
 msgid "Still connected."
 msgstr ""
 
-#: remote.c:4183 remote-mips.c:1744
+#: remote.c:4318 remote-mips.c:1743
 msgid "Argument given to \"detach\" when remotely debugging."
 msgstr ""
 
-#: remote.c:4186
+#: remote.c:4321
 msgid "No process to detach from."
 msgstr ""
 
-#: remote.c:4200
+#: remote.c:4345
 msgid "Remote doesn't know how to detach"
 msgstr ""
 
-#: remote.c:4202
+#: remote.c:4347
 msgid "Can't detach process."
 msgstr ""
 
-#: remote.c:4207
-#, possible-c-format
-msgid "Detached from remote %s.\n"
-msgstr ""
-
-#: remote.c:4212
-msgid "Detached from remote process.\n"
-msgstr ""
-
-#: remote.c:4214
+#: remote.c:4350
 msgid "Ending remote debugging.\n"
 msgstr ""
 
-#: remote.c:4240
+#: remote.c:4374
 msgid "Argument given to \"disconnect\" when remotely debugging."
 msgstr ""
 
-#: remote.c:4267 remote.c:4292
+#: remote.c:4401 remote.c:4436
 msgid "This target does not support attaching to a process"
 msgstr ""
 
-#: remote.c:4277
-#, possible-c-format
-msgid "Attached to %s\n"
-msgstr ""
-
-#: remote.c:4287
+#: remote.c:4431
 #, possible-c-format
 msgid "Attaching to %s failed with: %s"
 msgstr ""
 
-#: remote.c:4294
+#: remote.c:4438
 #, possible-c-format
 msgid "Attaching to %s failed"
 msgstr ""
 
-#: remote.c:4377
+#: remote.c:4521
 #, possible-c-format
 msgid "Reply contains invalid hex digit %d"
 msgstr ""
 
-#: remote.c:4593
+#: remote.c:4763
 #, possible-c-format
 msgid "Unexpected vCont reply in non-stop mode: %s"
 msgstr ""
 
-#: remote.c:4633
+#: remote.c:4803
 #, possible-c-format
 msgid " - Can't pass signal %d to target in reverse: ignored."
 msgstr ""
 
-#: remote.c:4638
+#: remote.c:4808
 msgid "Remote reverse-step not supported."
 msgstr ""
 
-#: remote.c:4641
+#: remote.c:4811
 msgid "Remote reverse-continue not supported."
 msgstr ""
 
-#: remote.c:4779
+#: remote.c:4949
 msgid "Remote server does not support stopping threads"
 msgstr ""
 
-#: remote.c:4812
+#: remote.c:4982
 #, possible-c-format
 msgid "Stopping %s failed: %s"
 msgstr ""
 
-#: remote.c:5169
+#: remote.c:5339
 #, possible-c-format
 msgid ""
 "Malformed packet(a) (missing colon): %s\n"
 "Packet: '%s'\n"
 msgstr ""
 
-#: remote.c:5225
+#: remote.c:5395
 #, possible-c-format
 msgid ""
 "Malformed packet(b) (missing colon): %s\n"
 "Packet: '%s'\n"
 msgstr ""
 
-#: remote.c:5231
+#: remote.c:5401
 #, possible-c-format
 msgid ""
 "Remote sent bad register number %s: %s\n"
 "Packet: '%s'\n"
 msgstr ""
 
-#: remote.c:5243
+#: remote.c:5413
 #, possible-c-format
 msgid "Remote reply is too short: %s"
 msgstr ""
 
-#: remote.c:5249
+#: remote.c:5419
 #, possible-c-format
 msgid ""
 "Remote register badly formatted: %s\n"
 "here: %s"
 msgstr ""
 
-#: remote.c:5311 remote.c:5314
+#: remote.c:5481 remote.c:5484
 #, possible-c-format
 msgid "unknown stop reply packet: %s"
 msgstr ""
 
-#: remote.c:5321
+#: remote.c:5491
 #, possible-c-format
 msgid "No process or thread specified in stop reply: %s"
 msgstr ""
 
-#: remote.c:5486 remote.c:5628
+#: remote.c:5656 remote.c:5798
 #, possible-c-format
 msgid "Invalid remote reply: %s"
 msgstr ""
 
-#: remote.c:5715
+#: remote.c:5885
 #, possible-c-format
 msgid "Could not fetch register \"%s\"; remote failure reply '%s'"
 msgstr ""
 
-#: remote.c:5734
+#: remote.c:5904
 msgid "fetch_register_using_p: early buf termination"
 msgstr ""
 
-#: remote.c:5772
+#: remote.c:5942
 #, possible-c-format
 msgid "Remote 'g' packet reply is of odd length: %s"
 msgstr ""
 
-#: remote.c:5791
+#: remote.c:5961
 #, possible-c-format
 msgid "Remote 'g' packet reply is too long: %s"
 msgstr ""
 
-#: remote.c:5834 remote.c:5852
+#: remote.c:6004 remote.c:6022
 msgid "unexpected end of 'g' packet reply"
 msgstr ""
 
-#: remote.c:5893
+#: remote.c:6063
 msgid "could not set remote traceframe"
 msgstr ""
 
-#: remote.c:6001
+#: remote.c:6171
 #, possible-c-format
 msgid "Could not write register \"%s\"; remote failure reply '%s'"
 msgstr ""
 
-#: remote.c:6006
+#: remote.c:6176
 msgid "Bad result from packet_ok"
 msgstr ""
 
-#: remote.c:6047
+#: remote.c:6217
 #, possible-c-format
 msgid "Could not write registers; remote failure reply '%s'"
 msgstr ""
 
-#: remote.c:6227
+#: remote.c:6397
 msgid "Received too much data from remote target; ignoring overflow."
 msgstr ""
 
-#: remote.c:6244
+#: remote.c:6414
 msgid "Unmatched escape character in target response."
 msgstr ""
 
-#: remote.c:6343
+#: remote.c:6513
 msgid "remote_write_bytes_aux: bad packet format"
 msgstr ""
 
-#: remote.c:6390
+#: remote.c:6560
 msgid "minimum packet size too small to write data"
 msgstr ""
 
-#: remote.c:6506
+#: remote.c:6676
 msgid "remote_write_bytes: bad internal state"
 msgstr ""
 
-#: remote.c:6656
+#: remote.c:6826
 msgid "Too long remote packet."
 msgstr ""
 
-#: remote.c:6659 remote.c:8572
+#: remote.c:6829 remote.c:8838
 msgid "Communication problem with target."
 msgstr ""
 
-#: remote.c:6698
+#: remote.c:6868
 msgid "Remote target does not support flash erase"
 msgstr ""
 
-#: remote.c:6700
+#: remote.c:6870
 msgid "Error erasing flash with vFlashErase packet"
 msgstr ""
 
-#: remote.c:6740
+#: remote.c:6910
 msgid "Remote target does not support vFlashDone"
 msgstr ""
 
-#: remote.c:6742
+#: remote.c:6912
 msgid "Error finishing flash operation"
 msgstr ""
 
-#: remote.c:6773 remote-m32r-sdi.c:725 remote-m32r-sdi.c:731
-#: remote-m32r-sdi.c:747
+#: remote.c:6943 remote-m32r-sdi.c:722 remote-m32r-sdi.c:728
+#: remote-m32r-sdi.c:744
 msgid "Remote connection closed"
 msgstr ""
 
-#: remote.c:6777
+#: remote.c:6947
 msgid "Remote communication error.  Target disconnected."
 msgstr ""
 
-#: remote.c:6866
+#: remote.c:7036
 msgid "Cannot execute this command while the target is running."
 msgstr ""
 
-#: remote.c:6906
+#: remote.c:7076
 msgid "putpkt: write failed"
 msgstr ""
 
-#: remote.c:7192
+#: remote.c:7362
 #, possible-c-format
 msgid "Invalid run length encoding: %s\n"
 msgstr ""
 
-#: remote.c:7298
+#: remote.c:7468
 msgid "Watchdog timeout has expired.  Target detached."
 msgstr ""
 
 #. We have tried hard enough, and just can't receive the
 #. packet/notification.  Give up.
-#: remote.c:7319
+#: remote.c:7489
 msgid "Ignoring packet error, continuing...\n"
 msgstr ""
 
-#: remote.c:7455
+#: remote.c:7625
 msgid "Can't kill process"
 msgstr ""
 
-#: remote.c:7563
+#: remote.c:7734
 msgid "Target does not support QDisableRandomization."
 msgstr ""
 
-#: remote.c:7565
+#: remote.c:7736
 #, possible-c-format
 msgid "Bogus QDisableRandomization reply from target: %s"
 msgstr ""
 
-#: remote.c:7583
+#: remote.c:7754
 msgid "Remote file name too long for run packet"
 msgstr ""
 
-#: remote.c:7598
+#: remote.c:7769
 msgid "Argument list too long for run packet"
 msgstr ""
 
-#: remote.c:7621
+#: remote.c:7792
 msgid ""
 "Running the default executable on the remote target failed; try \"set remote "
 "exec-file\"?"
 msgstr ""
 
-#: remote.c:7624
+#: remote.c:7795
 #, possible-c-format
 msgid "Running \"%s\" on the remote target failed"
 msgstr ""
 
-#: remote.c:7654
+#: remote.c:7825
 msgid "Remote target does not support \"set remote exec-file\""
 msgstr ""
 
-#: remote.c:7656
+#: remote.c:7827
 msgid "Remote target does not support \"set args\" or run <ARGS>"
 msgstr ""
 
-#: remote.c:7788
+#: remote.c:8030
 #, possible-c-format
 msgid "hw_bp_to_z: bad watchpoint type %d"
 msgstr ""
 
-#: remote.c:7822
+#: remote.c:8065
 msgid "remote_insert_watchpoint: reached end of function"
 msgstr ""
 
-#: remote.c:7854
+#: remote.c:8107
 msgid "remote_remove_watchpoint: reached end of function"
 msgstr ""
 
-#: remote.c:7962
+#: remote.c:8222
 msgid "remote_insert_hw_breakpoint: reached end of function"
 msgstr ""
 
-#: remote.c:7997
+#: remote.c:8258
 msgid "remote_remove_hw_breakpoint: reached end of function"
 msgstr ""
 
-#: remote.c:8054
+#: remote.c:8315
 msgid "remote target does not support this operation"
 msgstr ""
 
-#: remote.c:8082
+#: remote.c:8343
 msgid "command cannot be used without an exec file"
 msgstr ""
 
-#: remote.c:8107
+#: remote.c:8368
 #, possible-c-format
 msgid "target memory fault, section %s, range %s -- %s"
 msgstr ""
 
-#: remote.c:8125
+#: remote.c:8386
 msgid ""
 "One or more sections of the remote executable does not match\n"
 "the loaded file\n"
 msgstr ""
 
-#: remote.c:8128
+#: remote.c:8389
 #, possible-c-format
 msgid "No loaded section named '%s'.\n"
 msgstr ""
 
-#: remote.c:8228
+#: remote.c:8489
 #, possible-c-format
 msgid "Unknown remote qXfer reply: %s"
 msgstr ""
 
-#: remote.c:8234
+#: remote.c:8495
 msgid "Remote qXfer reply contained no data."
 msgstr ""
 
-#: remote.c:8423
+#: remote.c:8689
 msgid "remote query is only available after target open"
 msgstr ""
 
-#: remote.c:8514
+#: remote.c:8780
 msgid "Pattern is too large to transmit to remote target."
 msgstr ""
 
-#: remote.c:8536 remote.c:8541
+#: remote.c:8802 remote.c:8807
 #, possible-c-format
 msgid "Unknown qSearch:memory reply: %s"
 msgstr ""
 
-#: remote.c:8554
+#: remote.c:8820
 msgid "remote rcmd is only available after target open"
 msgstr ""
 
-#: remote.c:8566
+#: remote.c:8832
 #, possible-c-format
 msgid "\"monitor\" command ``%s'' is too long."
 msgstr ""
 
-#: remote.c:8584 remote.c:9827 remote.c:10110 remote.c:10200 remote.c:10300
-#: remote.c:10347 remote.c:10424 remote.c:10486 remote.c:10514
+#: remote.c:8859 remote.c:10162 remote.c:10449 remote.c:10543 remote.c:10645
+#: remote.c:10695 remote.c:10772 remote.c:10834 remote.c:10862
 msgid "Target does not support this command."
 msgstr ""
 
-#: remote.c:8595
+#: remote.c:8870
 msgid "Protocol error with Rcmd"
 msgstr ""
 
-#: remote.c:8631 remote.c:9530 remote.c:9618 remote.c:9669
+#: remote.c:8906 remote.c:9845 remote.c:9933 remote.c:9984
 msgid "command can only be used with remote target"
 msgstr ""
 
-#: remote.c:8634
+#: remote.c:8909
 msgid "remote-packet command requires packet text as argument"
 msgstr ""
 
-#: remote.c:8675
+#: remote.c:8950
 msgid "Remote threadset test\n"
 msgstr ""
 
-#: remote.c:8781
+#: remote.c:9056
 msgid "Fetch and print the remote list of thread identifiers, one pkt only"
 msgstr ""
 
-#: remote.c:8784
+#: remote.c:9059
 msgid "Fetch and display info about one thread"
 msgstr ""
 
-#: remote.c:8786
+#: remote.c:9061
 msgid "Test setting to a different thread"
 msgstr ""
 
-#: remote.c:8788
+#: remote.c:9063
 msgid "Iterate through updating all remote thread info"
 msgstr ""
 
-#: remote.c:8790
+#: remote.c:9065
 msgid " Remote thread alive test "
 msgstr ""
 
-#: remote.c:8875
+#: remote.c:9152
 msgid "Remote target doesn't support qGetTLSAddr packet"
 msgstr ""
 
-#: remote.c:8878
+#: remote.c:9155
 msgid "Remote target failed to process qGetTLSAddr request"
 msgstr ""
 
-#: remote.c:8882
+#: remote.c:9159
 msgid "TLS not supported or disabled on this target"
 msgstr ""
 
-#: remote.c:8919
+#: remote.c:9196
 msgid "Remote target doesn't support qGetTIBAddr packet"
 msgstr ""
 
-#: remote.c:8921
+#: remote.c:9198
 msgid "Remote target failed to process qGetTIBAddr request"
 msgstr ""
 
-#: remote.c:8924
+#: remote.c:9201
 msgid "qGetTIBAddr not supported or disabled on this target"
 msgstr ""
 
-#: remote.c:8972
+#: remote.c:9249
 #, possible-c-format
 msgid "Duplicate g packet description added for size %d"
 msgstr ""
 
-#: remote.c:9039 remote.c:9060 remote.c:9082
+#: remote.c:9316 remote.c:9337 remote.c:9359
 msgid "Packet too long for target."
 msgstr ""
 
-#: remote.c:9314
+#: remote.c:9591
 #, possible-c-format
 msgid "Read returned %d, but %d bytes."
 msgstr ""
 
-#: remote.c:9413
+#: remote.c:9665
+#, possible-c-format
+msgid "Readlink returned %d, but %d bytes."
+msgstr ""
+
+#: remote.c:9728
 #, possible-c-format
 msgid "Unknown remote I/O error %d"
 msgstr ""
 
-#: remote.c:9415
+#: remote.c:9730
 #, possible-c-format
 msgid "Remote I/O error: %s"
 msgstr ""
 
-#: remote.c:9564
+#: remote.c:9879
 #, possible-c-format
 msgid "Error reading %s."
 msgstr ""
 
-#: remote.c:9587
+#: remote.c:9902
 #, possible-c-format
 msgid "Remote write of %d bytes returned 0!"
 msgstr ""
 
-#: remote.c:9604
+#: remote.c:9919
 #, possible-c-format
 msgid "Successfully sent file \"%s\".\n"
 msgstr ""
 
-#: remote.c:9659
+#: remote.c:9974
 #, possible-c-format
 msgid "Successfully fetched file \"%s\".\n"
 msgstr ""
 
-#: remote.c:9676
+#: remote.c:9991
 #, possible-c-format
 msgid "Successfully deleted file \"%s\".\n"
 msgstr ""
 
-#: remote.c:9686
+#: remote.c:10001
 msgid "file to put"
 msgstr ""
 
-#: remote.c:9691
+#: remote.c:10006
 msgid "Invalid parameters to remote put"
 msgstr ""
 
-#: remote.c:9705
+#: remote.c:10020
 msgid "file to get"
 msgstr ""
 
-#: remote.c:9710
+#: remote.c:10025
 msgid "Invalid parameters to remote get"
 msgstr ""
 
-#: remote.c:9724
+#: remote.c:10039
 msgid "file to delete"
 msgstr ""
 
-#: remote.c:9729
+#: remote.c:10044
 msgid "Invalid parameters to remote delete"
 msgstr ""
 
-#: remote.c:9872 remote.c:9887 remote.c:10046 remote.c:10057
+#: remote.c:10207 remote.c:10222 remote.c:10384 remote.c:10395
 msgid "Target does not support source download."
 msgstr ""
 
-#: remote.c:9939
+#: remote.c:10276
 msgid "Fast tracepoint not valid during download"
 msgstr ""
 
 #. Fast tracepoints are functionally identical to regular
 #. tracepoints, so don't take lack of support as a reason to
 #. give up on the trace run.
-#: remote.c:9946
+#: remote.c:10283
 #, possible-c-format
 msgid ""
 "Target does not support fast tracepoints, downloading %d as regular "
 "tracepoint"
 msgstr ""
 
-#: remote.c:9960
+#: remote.c:10297
 msgid "Static tracepoint not valid during download"
 msgstr ""
 
 #. Fast tracepoints are functionally identical to regular
 #. tracepoints, so don't take lack of support as a reason
 #. to give up on the trace run.
-#: remote.c:9966
+#: remote.c:10303
 msgid "Target does not support static tracepoints"
 msgstr ""
 
-#: remote.c:9986
+#: remote.c:10324
 #, possible-c-format
 msgid "Target does not support conditional tracepoints, ignoring tp %d cond"
 msgstr ""
 
-#: remote.c:9995
+#: remote.c:10333
 msgid "Target does not support tracepoints."
 msgstr ""
 
-#: remote.c:10012 remote.c:10029
+#: remote.c:10350 remote.c:10367
 msgid "Error on target while setting tracepoints."
 msgstr ""
 
-#: remote.c:10104
+#: remote.c:10443
 msgid "Trace state variable name too long for tsv definition packet"
 msgstr ""
 
-#: remote.c:10112
+#: remote.c:10451
 msgid "Error on target while downloading trace state variable."
 msgstr ""
 
-#: remote.c:10126
+#: remote.c:10466
 msgid ""
 "Target does not support enabling tracepoints while a trace run is ongoing."
 msgstr ""
 
-#: remote.c:10128
+#: remote.c:10468
 msgid "Error on target while enabling tracepoint."
 msgstr ""
 
-#: remote.c:10142
+#: remote.c:10483
 msgid ""
 "Target does not support disabling tracepoints while a trace run is ongoing."
 msgstr ""
 
-#: remote.c:10144
+#: remote.c:10485
 msgid "Error on target while disabling tracepoint."
 msgstr ""
 
-#: remote.c:10180
+#: remote.c:10522
 msgid "Too many sections for read-only sections definition packet."
 msgstr ""
 
-#: remote.c:10202 remote.c:10302 remote.c:10372 remote.c:10375 remote.c:10426
-#: remote.c:10488 remote.c:10516 remote.c:10605
+#: remote.c:10545 remote.c:10647 remote.c:10720 remote.c:10723 remote.c:10774
+#: remote.c:10836 remote.c:10864 remote.c:10961
 #, possible-c-format
 msgid "Bogus reply from target: %s"
 msgstr ""
 
-#: remote.c:10242
+#: remote.c:10585
 #, possible-c-format
 msgid "Bogus trace status reply from target: %s"
 msgstr ""
 
-#: remote.c:10341
+#: remote.c:10689
 #, possible-c-format
 msgid "Unknown trace find type %d"
 msgstr ""
 
-#: remote.c:10356
+#: remote.c:10704
 msgid "Unable to parse trace frame number"
 msgstr ""
 
-#: remote.c:10366
+#: remote.c:10714
 msgid "Unable to parse tracepoint number"
 msgstr ""
 
-#: remote.c:10418
+#: remote.c:10766
 msgid "Remote file name too long for trace save packet"
 msgstr ""
 
-#: remote.c:10491
+#: remote.c:10839
 msgid "Target does not support disconnected tracing."
 msgstr ""
 
 #. set/show remote ...
 #. allow-unknown
-#: remote.c:10944 remote.c:10950
+#: remote.c:11341 remote.c:11347
 msgid ""
 "Remote protocol specific variables\n"
 "Configure various remote-protocol specific variables such as\n"
@@ -18860,13 +19994,13 @@ msgid ""
 msgstr ""
 
 #. allow-unknown
-#: remote.c:10957
+#: remote.c:11354
 msgid ""
 "Compare section data on target to the exec file.\n"
 "Argument is a single section name (default: all loaded sections)."
 msgstr ""
 
-#: remote.c:10962
+#: remote.c:11359
 msgid ""
 "Send an arbitrary packet to a remote target.\n"
 "   maintenance packet TEXT\n"
@@ -18876,57 +20010,57 @@ msgid ""
 "terminating `#' character and checksum."
 msgstr ""
 
-#: remote.c:10971
+#: remote.c:11368
 msgid "Set whether to send break if interrupted."
 msgstr ""
 
-#: remote.c:10972
+#: remote.c:11369
 msgid "Show whether to send break if interrupted."
 msgstr ""
 
-#: remote.c:10973
+#: remote.c:11370
 msgid "If set, a break, instead of a cntrl-c, is sent to the remote target."
 msgstr ""
 
-#: remote.c:10986
+#: remote.c:11383
 msgid "Set interrupt sequence to remote target."
 msgstr ""
 
-#: remote.c:10987
+#: remote.c:11384
 msgid "Show interrupt sequence to remote target."
 msgstr ""
 
-#: remote.c:10988
+#: remote.c:11385
 msgid ""
 "Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C"
 "\"."
 msgstr ""
 
-#: remote.c:10995
+#: remote.c:11392
 msgid ""
 "Set whether interrupt-sequence is sent to remote target when gdb connects to."
 msgstr ""
 
-#: remote.c:10996
+#: remote.c:11393
 msgid ""
 "\t\tShow whether interrupt-sequence is sent to remote target when gdb "
 "connects to."
 msgstr ""
 
-#: remote.c:10997
+#: remote.c:11394
 msgid "\t\tIf set, interrupt sequence is sent to remote target."
 msgstr ""
 
 #. Install commands for configuring memory read/write packets.
-#: remote.c:11004
+#: remote.c:11401
 msgid "Set the maximum number of bytes per memory write packet (deprecated)."
 msgstr ""
 
-#: remote.c:11007
+#: remote.c:11404
 msgid "Show the maximum number of bytes per memory write packet (deprecated)."
 msgstr ""
 
-#: remote.c:11011
+#: remote.c:11408
 msgid ""
 "Set the maximum number of bytes per memory-write packet.\n"
 "Specify the number of bytes in a packet or 0 (zero) for the\n"
@@ -18935,7 +20069,7 @@ msgid ""
 "further restriction and ``limit'' to enable that restriction."
 msgstr ""
 
-#: remote.c:11019
+#: remote.c:11416
 msgid ""
 "Set the maximum number of bytes per memory-read packet.\n"
 "Specify the number of bytes in a packet or 0 (zero) for the\n"
@@ -18944,87 +20078,87 @@ msgid ""
 "further restriction and ``limit'' to enable that restriction."
 msgstr ""
 
-#: remote.c:11028
+#: remote.c:11425
 msgid "Show the maximum number of bytes per memory-write packet."
 msgstr ""
 
-#: remote.c:11032
+#: remote.c:11429
 msgid "Show the maximum number of bytes per memory-read packet."
 msgstr ""
 
-#: remote.c:11036
+#: remote.c:11433
 msgid "Set the maximum number of target hardware watchpoints."
 msgstr ""
 
-#: remote.c:11037
+#: remote.c:11434
 msgid "Show the maximum number of target hardware watchpoints."
 msgstr ""
 
-#: remote.c:11038 remote.c:11047 remote.c:11056
+#: remote.c:11435 remote.c:11444 remote.c:11453
 msgid "Specify a negative limit for unlimited."
 msgstr ""
 
-#: remote.c:11045
+#: remote.c:11442
 msgid "Set the maximum length (in bytes) of a target hardware watchpoint."
 msgstr ""
 
-#: remote.c:11046
+#: remote.c:11443
 msgid "Show the maximum length (in bytes) of a target hardware watchpoint."
 msgstr ""
 
-#: remote.c:11054
+#: remote.c:11451
 msgid "Set the maximum number of target hardware breakpoints."
 msgstr ""
 
-#: remote.c:11055
+#: remote.c:11452
 msgid "Show the maximum number of target hardware breakpoints."
 msgstr ""
 
-#: remote.c:11064
+#: remote.c:11461
 msgid "Set the maximum size of the address (in bits) in a memory packet."
 msgstr ""
 
-#: remote.c:11065
+#: remote.c:11462
 msgid "Show the maximum size of the address (in bits) in a memory packet."
 msgstr ""
 
-#: remote.c:11223
+#: remote.c:11641
 msgid "Set use of remote protocol `Z' packets"
 msgstr ""
 
-#: remote.c:11224
+#: remote.c:11642
 msgid "Show use of remote protocol `Z' packets "
 msgstr ""
 
-#: remote.c:11225
+#: remote.c:11643
 msgid ""
 "When set, GDB will attempt to use the remote breakpoint and watchpoint\n"
 "packets."
 msgstr ""
 
-#: remote.c:11234
+#: remote.c:11652
 msgid ""
 "Manipulate files on the remote system\n"
 "Transfer files to and from the remote target system."
 msgstr ""
 
-#: remote.c:11241
+#: remote.c:11659
 msgid "Copy a local file to the remote system."
 msgstr ""
 
-#: remote.c:11245
+#: remote.c:11663
 msgid "Copy a remote file to the local system."
 msgstr ""
 
-#: remote.c:11249
+#: remote.c:11667
 msgid "Delete a remote file."
 msgstr ""
 
-#: remote.c:11254
+#: remote.c:11672
 msgid "Set the remote pathname for \"run\""
 msgstr ""
 
-#: remote.c:11255
+#: remote.c:11673
 msgid "Show the remote pathname for \"run\""
 msgstr ""
 
@@ -19045,70 +20179,70 @@ msgstr ""
 msgid "Show if the host system(3) call is allowed for the target."
 msgstr ""
 
-#: remote-m32r-sdi.c:330
+#: remote-m32r-sdi.c:328
 msgid "Cannot pass arguments to remote STDEBUG process"
 msgstr ""
 
-#: remote-m32r-sdi.c:333 remote-mips.c:2330
+#: remote-m32r-sdi.c:331 remote-mips.c:2328
 msgid "No executable file specified"
 msgstr ""
 
-#: remote-m32r-sdi.c:392
+#: remote-m32r-sdi.c:390
 msgid "Connection refused."
 msgstr ""
 
-#: remote-m32r-sdi.c:395 remote-m32r-sdi.c:398
+#: remote-m32r-sdi.c:393 remote-m32r-sdi.c:396
 msgid "Cannot connect to SDI target."
 msgstr ""
 
-#: remote-m32r-sdi.c:1189
+#: remote-m32r-sdi.c:1186
 msgid "Too many breakpoints"
 msgstr ""
 
-#: remote-m32r-sdi.c:1258
+#: remote-m32r-sdi.c:1254
 #, possible-c-format
 msgid "Unknown option `%s'"
 msgstr ""
 
-#: remote-m32r-sdi.c:1273 symfile.c:2085
+#: remote-m32r-sdi.c:1269 symfile.c:2126
 #, possible-c-format
 msgid "\"%s\" is not an object file: %s"
 msgstr ""
 
-#: remote-m32r-sdi.c:1324
+#: remote-m32r-sdi.c:1320
 #, possible-c-format
 msgid "Error while downloading %s section."
 msgstr ""
 
-#: remote-m32r-sdi.c:1443
+#: remote-m32r-sdi.c:1439
 msgid "Too many watchpoints"
 msgstr ""
 
-#: remote-m32r-sdi.c:1685
+#: remote-m32r-sdi.c:1681
 msgid "Reset SDI connection."
 msgstr ""
 
-#: remote-m32r-sdi.c:1688
+#: remote-m32r-sdi.c:1684
 msgid "Show status of SDI connection."
 msgstr ""
 
-#: remote-m32r-sdi.c:1691
+#: remote-m32r-sdi.c:1687
 msgid "Debug M32R/Chaos."
 msgstr ""
 
-#: remote-m32r-sdi.c:1694
+#: remote-m32r-sdi.c:1690
 msgid "Use debug DMA mem access."
 msgstr ""
 
-#: remote-m32r-sdi.c:1696
+#: remote-m32r-sdi.c:1692
 msgid "Use mon code mem access."
 msgstr ""
 
-#: remote-m32r-sdi.c:1699
+#: remote-m32r-sdi.c:1695
 msgid "Set breakpoints by IB break."
 msgstr ""
 
-#: remote-m32r-sdi.c:1701
+#: remote-m32r-sdi.c:1697
 msgid "Set breakpoints by dbt."
 msgstr ""
 
@@ -19182,7 +20316,7 @@ msgstr ""
 msgid "Failed to initialize."
 msgstr ""
 
-#: remote-mips.c:1547
+#: remote-mips.c:1546
 msgid ""
 "To open a MIPS remote debugging connection, you need to specify what\n"
 "serial device is attached to the target board (e.g., /dev/ttya).\n"
@@ -19194,84 +20328,84 @@ msgid ""
 "seen from the board via TFTP, specify that name as the third parameter.\n"
 msgstr ""
 
-#: remote-mips.c:1601
+#: remote-mips.c:1600
 msgid "Unable to open UDP port"
 msgstr ""
 
-#: remote-mips.c:1851
+#: remote-mips.c:1849
 #, possible-c-format
 msgid "Remote failure: %s"
 msgstr ""
 
-#: remote-mips.c:2049
+#: remote-mips.c:2047
 #, possible-c-format
 msgid "Can't read register %d: %s"
 msgstr ""
 
-#: remote-mips.c:2088
+#: remote-mips.c:2086
 #, possible-c-format
 msgid "Can't write register %d: %s"
 msgstr ""
 
-#: remote-mips.c:2323
+#: remote-mips.c:2321
 msgid "Can't pass arguments to remote MIPS board; arguments ignored."
 msgstr ""
 
-#: remote-mips.c:2582
+#: remote-mips.c:2580
 #, possible-c-format
 msgid "mips_common_breakpoint: Attempt to clear bogus breakpoint at %s"
 msgstr ""
 
-#: remote-mips.c:2597 remote-mips.c:2650 remote-mips.c:2722
+#: remote-mips.c:2595 remote-mips.c:2648 remote-mips.c:2720
 #, possible-c-format
 msgid "mips_common_breakpoint: Bad response from remote board: %s"
 msgstr ""
 
-#: remote-mips.c:2761
+#: remote-mips.c:2759
 msgid "Timeout during download."
 msgstr ""
 
-#: remote-mips.c:2771
+#: remote-mips.c:2769
 #, possible-c-format
 msgid "Download got unexpected ack char: 0x%x, retrying."
 msgstr ""
 
-#: remote-mips.c:3520
+#: remote-mips.c:3518
 msgid "mips_load:  Couldn't get into monitor mode."
 msgstr ""
 
-#: remote-mips.c:3678
+#: remote-mips.c:3676
 msgid "Set timeout in seconds for remote MIPS serial I/O."
 msgstr ""
 
-#: remote-mips.c:3679
+#: remote-mips.c:3677
 msgid "Show timeout in seconds for remote MIPS serial I/O."
 msgstr ""
 
-#: remote-mips.c:3686
+#: remote-mips.c:3684
 msgid "Set retransmit timeout in seconds for remote MIPS serial I/O."
 msgstr ""
 
-#: remote-mips.c:3687
+#: remote-mips.c:3685
 msgid "Show retransmit timeout in seconds for remote MIPS serial I/O."
 msgstr ""
 
-#: remote-mips.c:3688
+#: remote-mips.c:3686
 msgid ""
 "This is the number of seconds to wait for an acknowledgement to a packet\n"
 "before resending the packet."
 msgstr ""
 
-#: remote-mips.c:3696
+#: remote-mips.c:3694
 msgid "Set the maximum number of characters to ignore when scanning for a SYN."
 msgstr ""
 
-#: remote-mips.c:3697
+#: remote-mips.c:3695
 msgid ""
 "Show the maximum number of characters to ignore when scanning for a SYN."
 msgstr ""
 
-#: remote-mips.c:3698
+#: remote-mips.c:3696
 msgid ""
 "This is the maximum number of characters GDB will ignore when trying to\n"
 "synchronize with the remote system.  A value of -1 means that there is no\n"
@@ -19279,44 +20413,44 @@ msgid ""
 "ignored.)"
 msgstr ""
 
-#: remote-mips.c:3708
+#: remote-mips.c:3706
 msgid "Set the prompt that GDB expects from the monitor."
 msgstr ""
 
-#: remote-mips.c:3709
+#: remote-mips.c:3707
 msgid "Show the prompt that GDB expects from the monitor."
 msgstr ""
 
-#: remote-mips.c:3716
+#: remote-mips.c:3714
 msgid "Set printing of monitor warnings."
 msgstr ""
 
-#: remote-mips.c:3717
+#: remote-mips.c:3715
 msgid "Show printing of monitor warnings."
 msgstr ""
 
-#: remote-mips.c:3718
+#: remote-mips.c:3716
 msgid ""
 "When enabled, monitor warnings about hardware breakpoints will be displayed."
 msgstr ""
 
-#: remote-mips.c:3725
+#: remote-mips.c:3723
 msgid "Send a packet to PMON (must be in debug mode)."
 msgstr ""
 
-#: remote-mips.c:3727
+#: remote-mips.c:3725
 msgid ""
 "Set zeroing of upper 32 bits of 64-bit addresses when talking to PMON "
 "targets."
 msgstr ""
 
-#: remote-mips.c:3728
+#: remote-mips.c:3726
 msgid ""
 "Show zeroing of upper 32 bits of 64-bit addresses when talking to PMON "
 "targets."
 msgstr ""
 
-#: remote-mips.c:3729
+#: remote-mips.c:3727
 msgid "Use \"on\" to enable the masking and \"off\" to disable it."
 msgstr ""
 
@@ -19362,25 +20496,29 @@ msgstr ""
 msgid "No executable file specified."
 msgstr ""
 
-#: remote-sim.c:619 remote-sim.c:1085
+#: remote-sim.c:619 remote-sim.c:1088
 msgid "No program loaded."
 msgstr ""
 
-#: remote-sim.c:728
+#: remote-sim.c:647
+msgid "Unable to create sim inferior."
+msgstr ""
+
+#: remote-sim.c:731
 msgid "unable to create simulator instance"
 msgstr ""
 
-#: remote-sim.c:855
+#: remote-sim.c:858
 #, possible-c-format
 msgid "gdbsim_resume: pid %d, step %d, signal %d\n"
 msgstr ""
 
-#: remote-sim.c:934
+#: remote-sim.c:937
 #, possible-c-format
 msgid "Can't stop pid %d.  No inferior found."
 msgstr ""
 
-#: remote-sim.c:991
+#: remote-sim.c:994
 #, possible-c-format
 msgid "Unable to wait for pid %d.  Inferior not found."
 msgstr ""
@@ -19393,11 +20531,11 @@ msgstr ""
 #. Consistent with that model, access to the simulator, via sim
 #. commands, is restricted to the period when the channel to the
 #. simulator is open.
-#: remote-sim.c:1188
+#: remote-sim.c:1191
 msgid "Not connected to the simulator target"
 msgstr ""
 
-#: remote-sim.c:1310
+#: remote-sim.c:1325
 msgid "Send a command to the simulator."
 msgstr ""
 
@@ -19415,42 +20553,42 @@ msgstr ""
 msgid "Saved bookmark %d at %s\n"
 msgstr ""
 
-#: reverse.c:225
+#: reverse.c:224
 msgid "No bookmarks."
 msgstr ""
 
-#: reverse.c:231
+#: reverse.c:230
 msgid "Delete all bookmarks? "
 msgstr ""
 
 #. Not found.
-#: reverse.c:243
+#: reverse.c:242
 #, possible-c-format
 msgid "No bookmark #%d."
 msgstr ""
 
-#: reverse.c:256 thread.c:1316
+#: reverse.c:255 thread.c:1324
 msgid "Command requires an argument."
 msgstr ""
 
 #. Not found.
-#: reverse.c:289
+#: reverse.c:288
 #, possible-c-format
 msgid "goto-bookmark: no bookmark found for '%s'."
 msgstr ""
 
-#: reverse.c:325
+#: reverse.c:324
 msgid "No bookmarks.\n"
 msgstr ""
 
-#: reverse.c:348
+#: reverse.c:347
 msgid ""
 "Step program backward until it reaches the beginning of another source "
 "line.\n"
 "Argument N means do this N times (or till program stops for another reason)."
 msgstr ""
 
-#: reverse.c:354
+#: reverse.c:353
 msgid ""
 "Step program backward, proceeding through subroutine calls.\n"
 "Like the \"reverse-step\" command as long as subroutine calls do not "
@@ -19459,19 +20597,19 @@ msgid ""
 "Argument N means do this N times (or till program stops for another reason)."
 msgstr ""
 
-#: reverse.c:362
+#: reverse.c:361
 msgid ""
 "Step backward exactly one instruction.\n"
 "Argument N means do this N times (or till program stops for another reason)."
 msgstr ""
 
-#: reverse.c:368
+#: reverse.c:367
 msgid ""
 "Step backward one instruction, but proceed through called subroutines.\n"
 "Argument N means do this N times (or till program stops for another reason)."
 msgstr ""
 
-#: reverse.c:374
+#: reverse.c:373
 msgid ""
 "Continue program being debugged but run it in reverse.\n"
 "If proceeding from breakpoint, a number N may be used as an argument,\n"
@@ -19479,18 +20617,18 @@ msgid ""
 "the breakpoint won't break until the Nth time it is reached)."
 msgstr ""
 
-#: reverse.c:381
+#: reverse.c:380
 msgid "Execute backward until just before selected stack frame is called."
 msgstr ""
 
-#: reverse.c:384
+#: reverse.c:383
 msgid ""
 "Set a bookmark in the program's execution history.\n"
 "A bookmark represents a point in the execution history \n"
 "that can be returned to at a later point in the debug session."
 msgstr ""
 
-#: reverse.c:388
+#: reverse.c:387
 msgid ""
 "Status of user-settable bookmarks.\n"
 "Bookmarks are user-settable markers representing a point in the \n"
@@ -19498,14 +20636,14 @@ msgid ""
 "session."
 msgstr ""
 
-#: reverse.c:393
+#: reverse.c:392
 msgid ""
 "Delete a bookmark from the bookmark list.\n"
 "Argument is a bookmark number or numbers,\n"
 " or no argument to delete all bookmarks.\n"
 msgstr ""
 
-#: reverse.c:398
+#: reverse.c:397
 msgid ""
 "Go to an earlier-bookmarked point in the program's execution history.\n"
 "Argument is the bookmark number of a bookmark saved earlier by using \n"
@@ -19514,35 +20652,40 @@ msgid ""
 "  end   (end of recording)\n"
 msgstr ""
 
+#: rl78-tdep.c:916
+#, possible-c-format
+msgid "Undefined dwarf2 register mapping of reg %d"
+msgstr ""
+
 #. FIXME: this happens 3 times at the start of each 64-bit program.
-#: rs6000-nat.c:261
+#: rs6000-nat.c:262
 msgid "ptrace read"
 msgstr ""
 
-#: rs6000-nat.c:329
+#: rs6000-nat.c:330
 msgid "ptrace write"
 msgstr ""
 
-#: rs6000-nat.c:612
+#: rs6000-nat.c:613
 msgid "pt_continue"
 msgstr ""
 
-#: rs6000-nat.c:756 solib.c:390
+#: rs6000-nat.c:757 solib.c:388
 #, possible-c-format
 msgid "Could not open `%s' as an executable file: %s"
 msgstr ""
 
-#: rs6000-nat.c:776
+#: rs6000-nat.c:777
 #, possible-c-format
 msgid "\"%s\": member \"%s\" missing."
 msgstr ""
 
-#: rs6000-nat.c:783
+#: rs6000-nat.c:784
 #, possible-c-format
 msgid "\"%s\": member \"%s\" not in executable format: %s."
 msgstr ""
 
-#: rs6000-nat.c:794
+#: rs6000-nat.c:795
 #, possible-c-format
 msgid "\"%s\": not in executable format: %s."
 msgstr ""
@@ -19550,17 +20693,17 @@ msgstr ""
 #. The kernel sets ld_info to -1, if the process is still using the
 #. object, and the object is removed.  Keep the symbol info for the
 #. removed object and issue a warning.
-#: rs6000-nat.c:838
+#: rs6000-nat.c:839
 #, possible-c-format
 msgid "%s (fd=%d) has disappeared, keeping its symbols"
 msgstr ""
 
-#: rs6000-nat.c:867
+#: rs6000-nat.c:868
 #, possible-c-format
 msgid "Unable to stat %s, keeping its symbols"
 msgstr ""
 
-#: rs6000-nat.c:916
+#: rs6000-nat.c:917
 #, possible-c-format
 msgid ""
 "Symbol file %s\n"
@@ -19571,76 +20714,76 @@ msgid ""
 "symbols to the proper address)."
 msgstr ""
 
-#: rs6000-nat.c:950
+#: rs6000-nat.c:951
 msgid "vmap_exec: vmap or table->sections == 0."
 msgstr ""
 
-#: rs6000-nat.c:1024
+#: rs6000-nat.c:1025
 msgid "rs6000_create_inferior: failed to select architecture"
 msgstr ""
 
-#: rs6000-nat.c:1071
+#: rs6000-nat.c:1072
 msgid "ptrace ldinfo"
 msgstr ""
 
-#: rs6000-nat.c:1213
+#: rs6000-nat.c:1214
 #, possible-c-format
 msgid "Unable to find TOC entry for pc %s."
 msgstr ""
 
-#: rs6000-tdep.c:2802
+#: rs6000-tdep.c:2811
 #, possible-c-format
 msgid "rs6000_pseudo_register_read: called on unexpected register '%s' (%d)"
 msgstr ""
 
-#: rs6000-tdep.c:2827
+#: rs6000-tdep.c:2836
 #, possible-c-format
 msgid "rs6000_pseudo_register_write: called on unexpected register '%s' (%d)"
 msgstr ""
 
-#: rs6000-tdep.c:4182
+#: rs6000-tdep.c:4190
 msgid "\"set powerpc\" must be followed by an appropriate subcommand.\n"
 msgstr ""
 
-#: rs6000-tdep.c:4223
+#: rs6000-tdep.c:4231
 #, possible-c-format
 msgid "Invalid vector ABI accepted: %s."
 msgstr ""
 
-#: rs6000-tdep.c:4239
+#: rs6000-tdep.c:4247
 #, possible-c-format
 msgid "Use of exact watchpoints is %s.\n"
 msgstr ""
 
-#: rs6000-tdep.c:4277 rs6000-tdep.c:4281
+#: rs6000-tdep.c:4285 rs6000-tdep.c:4289
 msgid "Various PowerPC-specific commands."
 msgstr ""
 
-#: rs6000-tdep.c:4287
+#: rs6000-tdep.c:4295
 msgid "Set whether to use a soft-float ABI."
 msgstr ""
 
-#: rs6000-tdep.c:4288
+#: rs6000-tdep.c:4296
 msgid "Show whether to use a soft-float ABI."
 msgstr ""
 
-#: rs6000-tdep.c:4295
+#: rs6000-tdep.c:4303
 msgid "Set the vector ABI."
 msgstr ""
 
-#: rs6000-tdep.c:4296
+#: rs6000-tdep.c:4304
 msgid "Show the vector ABI."
 msgstr ""
 
-#: rs6000-tdep.c:4302
+#: rs6000-tdep.c:4310
 msgid "Set whether to use just one debug register for watchpoints on scalars."
 msgstr ""
 
-#: rs6000-tdep.c:4304
+#: rs6000-tdep.c:4312
 msgid "Show whether to use just one debug register for watchpoints on scalars."
 msgstr ""
 
-#: rs6000-tdep.c:4306
+#: rs6000-tdep.c:4314
 msgid ""
 "If true, GDB will use only one debug register when watching a variable of\n"
 "scalar type, thus assuming that the variable is accessed through the "
@@ -19648,57 +20791,57 @@ msgid ""
 "of its first byte."
 msgstr ""
 
-#: s390-nat.c:325 s390-nat.c:347
+#: s390-nat.c:326 s390-nat.c:348
 msgid "Couldn't get register set"
 msgstr ""
 
-#: s390-nat.c:353
+#: s390-nat.c:354
 msgid "Couldn't set register set"
 msgstr ""
 
-#: s390-nat.c:458 s390-nat.c:499
+#: s390-nat.c:459 s390-nat.c:500
 msgid "Couldn't retrieve watchpoint status"
 msgstr ""
 
-#: s390-nat.c:468
+#: s390-nat.c:469
 msgid "Couldn't clear watchpoint status"
 msgstr ""
 
-#: s390-nat.c:515
+#: s390-nat.c:516
 msgid "Couldn't modify watchpoint status"
 msgstr ""
 
-#: s390-tdep.c:2644
+#: s390-tdep.c:2649
 msgid "Stack overflow"
 msgstr ""
 
-#: s390-tdep.c:2747
+#: s390-tdep.c:2752
 msgid "unknown argument type"
 msgstr ""
 
-#: s390-tdep.c:2857 s390-tdep.c:2890
+#: s390-tdep.c:2862 s390-tdep.c:2895
 msgid "invalid return type"
 msgstr ""
 
-#: s390-tdep.c:2861 spu-tdep.c:1491
+#: s390-tdep.c:2866 spu-tdep.c:1492
 msgid "Cannot set function return value."
 msgstr ""
 
-#: s390-tdep.c:2894 spu-tdep.c:1507
+#: s390-tdep.c:2899 spu-tdep.c:1508
 msgid "Function return value unknown."
 msgstr ""
 
-#: score-tdep.c:159 score-tdep.c:252 score-tdep.c:322 score-tdep.c:831
+#: score-tdep.c:159 score-tdep.c:251 score-tdep.c:321 score-tdep.c:830
 #, possible-c-format
 msgid "Error: target_read_memory in file:%s, line:%d!"
 msgstr ""
 
-#: score-tdep.c:440
+#: score-tdep.c:439
 #, possible-c-format
 msgid "Error: score_xfer_register in file:%s, line:%d!"
 msgstr ""
 
-#: score-tdep.c:819
+#: score-tdep.c:818
 #, possible-c-format
 msgid "Error: malloc size < 0 in file:%s, line:%d!"
 msgstr ""
@@ -19782,63 +20925,59 @@ msgstr ""
 msgid "Print DOS serial port status."
 msgstr ""
 
-#: serial.c:389
+#: serial.c:378
 msgid "serial_readchar: blocking read in async mode"
 msgstr ""
 
-#: serial.c:568
+#: serial.c:557
 msgid "serial: FD not valid"
 msgstr ""
 
-#: serial.c:701 serial.c:739
-msgid "connect"
-msgstr ""
-
-#: serial.c:774
+#: serial.c:640
 msgid ""
 "Connect the terminal directly up to the command monitor.\n"
 "Use <CR>~. or <CR>~^D to break out."
 msgstr ""
 
-#: serial.c:779
+#: serial.c:645
 msgid "Set default serial/parallel port configuration."
 msgstr ""
 
-#: serial.c:785
+#: serial.c:651
 msgid "Show default serial/parallel port configuration."
 msgstr ""
 
-#: serial.c:791
+#: serial.c:657
 msgid "Set filename for remote session recording."
 msgstr ""
 
-#: serial.c:792
+#: serial.c:658
 msgid "Show filename for remote session recording."
 msgstr ""
 
-#: serial.c:793
+#: serial.c:659
 msgid ""
 "This file is used to record the remote session for future playback\n"
 "by gdbserver."
 msgstr ""
 
-#: serial.c:801
+#: serial.c:667
 msgid "Set numerical base for remote session logging"
 msgstr ""
 
-#: serial.c:802
+#: serial.c:668
 msgid "Show numerical base for remote session logging"
 msgstr ""
 
-#: serial.c:809
+#: serial.c:675
 msgid "Set serial debugging."
 msgstr ""
 
-#: serial.c:810
+#: serial.c:676
 msgid "Show serial debugging."
 msgstr ""
 
-#: serial.c:811
+#: serial.c:677
 msgid "When non-zero, serial port debugging is enabled."
 msgstr ""
 
@@ -19934,45 +21073,45 @@ msgid ""
 "when debugging using remote targets."
 msgstr ""
 
-#: sh64-tdep.c:1591
+#: sh64-tdep.c:1471
 msgid "sh64_register_convert_to_virtual called with non DR register number"
 msgstr ""
 
-#: sh64-tdep.c:1616
+#: sh64-tdep.c:1496
 msgid "sh64_register_convert_to_raw called with non DR register number"
 msgstr ""
 
-#: sh64-tdep.c:2096
+#: sh64-tdep.c:1976
 #, possible-c-format
 msgid "Invalid pseudo register number %d\n"
 msgstr ""
 
-#: sh64-tdep.c:2191
+#: sh64-tdep.c:2071
 #, possible-c-format
 msgid "Invalid register number %d\n"
 msgstr ""
 
-#: sh64-tdep.c:2275
+#: sh64-tdep.c:2155
 msgid "Not a valid register for the current processor mode."
 msgstr ""
 
-#: sh-tdep.c:2276
+#: sh-tdep.c:1577
 msgid "sh_register_convert_to_raw called with non DR register number"
 msgstr ""
 
-#: sh-tdep.c:3097
+#: sh-tdep.c:2428
 msgid "Print all registers"
 msgstr ""
 
-#: sh-tdep.c:3106
+#: sh-tdep.c:2438
 msgid "Set calling convention used when calling target functions from GDB."
 msgstr ""
 
-#: sh-tdep.c:3108
+#: sh-tdep.c:2440
 msgid "Show calling convention used when calling target functions from GDB."
 msgstr ""
 
-#: sh-tdep.c:3110
+#: sh-tdep.c:2442
 msgid ""
 "gcc       - Use GCC calling convention (default).\n"
 "renesas   - Enforce Renesas calling convention."
@@ -20005,48 +21144,48 @@ msgstr ""
 msgid "No function found containing current program point %s."
 msgstr ""
 
-#: skip.c:176
+#: skip.c:173
 #, possible-c-format
 msgid "No function found named %s.\n"
 msgstr ""
 
-#: skip.c:178
+#: skip.c:175
 msgid "Ignore function pending future shared library load? "
 msgstr ""
 
-#: skip.c:189
+#: skip.c:186
 msgid "Specify just one function at a time."
 msgstr ""
 
-#: skip.c:204
+#: skip.c:201
 #, possible-c-format
 msgid "No function found containing program point %s."
 msgstr ""
 
-#: skip.c:237
+#: skip.c:234
 msgid "Not skipping any files or functions.\n"
 msgstr ""
 
-#: skip.c:241
+#: skip.c:238
 #, possible-c-format
 msgid "No skiplist entries found with number %s.\n"
 msgstr ""
 
-#: skip.c:284
+#: skip.c:281
 msgid "Skiplist entry should have either a filename or a function name."
 msgstr ""
 
-#: skip.c:347 skip.c:364 skip.c:393
+#: skip.c:344 skip.c:361 skip.c:390
 #, possible-c-format
 msgid "No skiplist entries found with number %s."
 msgstr ""
 
-#: skip.c:414
+#: skip.c:411
 #, possible-c-format
 msgid "Function %s at %s will be skipped when stepping.\n"
 msgstr ""
 
-#: skip.c:417
+#: skip.c:414
 #, possible-c-format
 msgid ""
 "Function %s will be skipped when stepping, pending shared library load.\n"
@@ -20123,22 +21262,27 @@ msgid ""
 "The search path for loading non-absolute shared library symbol files is %s.\n"
 msgstr ""
 
-#: solib.c:427
+#: solib.c:425
 #, possible-c-format
 msgid "`%s': not in executable format: %s"
 msgstr ""
 
-#: solib.c:434
+#: solib.c:432
 #, possible-c-format
 msgid ""
 "`%s': Shared library architecture %s is not compatible with target "
 "architecture %s."
 msgstr ""
 
-#: solib.c:476
+#: solib.c:474
 msgid "Shared library file name is too long."
 msgstr ""
 
+#: solib.c:479
+#, possible-c-format
+msgid "Can't find the file sections in `%s': %s"
+msgstr ""
+
 #: solib.c:619
 #, possible-c-format
 msgid "Error while reading shared library symbols for %s:\n"
@@ -20149,18 +21293,18 @@ msgstr ""
 msgid "Loaded symbols for %s\n"
 msgstr ""
 
-#: solib.c:810 solib.c:1261
+#: solib.c:814 solib.c:1265
 msgid "Error while mapping shared library sections:\n"
 msgstr ""
 
-#: solib.c:826
+#: solib.c:830
 #, possible-c-format
 msgid ""
 "Could not load shared library symbols for %s.\n"
 "Do you need \"set solib-search-path\" or \"set sysroot\"?"
 msgstr ""
 
-#: solib.c:831
+#: solib.c:835
 #, possible-c-format
 msgid ""
 "Could not load shared library symbols for %d libraries, e.g. %s.\n"
@@ -20168,49 +21312,49 @@ msgid ""
 "Do you need \"set solib-search-path\" or \"set sysroot\"?"
 msgstr ""
 
-#: solib.c:915
+#: solib.c:919
 #, possible-c-format
 msgid "Symbols already loaded for %s\n"
 msgstr ""
 
-#: solib.c:1044
+#: solib.c:1048
 msgid "No shared libraries matched.\n"
 msgstr ""
 
-#: solib.c:1047
+#: solib.c:1051
 msgid "No shared libraries loaded at this time.\n"
 msgstr ""
 
-#: solib.c:1053
+#: solib.c:1057
 msgid "(*): Shared library is missing debugging information.\n"
 msgstr ""
 
-#: solib.c:1333
+#: solib.c:1337
 #, possible-c-format
 msgid "Autoloading of shared library symbols is %s.\n"
 msgstr ""
 
-#: solib.c:1458 xcoffsolib.c:165
+#: solib.c:1462 xcoffsolib.c:167
 msgid "Load shared object library symbols for files matching REGEXP."
 msgstr ""
 
-#: solib.c:1460
+#: solib.c:1464
 msgid "Status of loaded shared object libraries."
 msgstr ""
 
-#: solib.c:1462
+#: solib.c:1466
 msgid "Unload all shared object library symbols."
 msgstr ""
 
-#: solib.c:1465 xcoffsolib.c:170
+#: solib.c:1469 xcoffsolib.c:172
 msgid "Set autoloading of shared library symbols."
 msgstr ""
 
-#: solib.c:1466 xcoffsolib.c:171
+#: solib.c:1470 xcoffsolib.c:173
 msgid "Show autoloading of shared library symbols."
 msgstr ""
 
-#: solib.c:1467 xcoffsolib.c:172
+#: solib.c:1471 xcoffsolib.c:174
 msgid ""
 "If \"on\", symbols from all shared object libraries will be loaded\n"
 "automatically when the inferior begins execution, when the dynamic linker\n"
@@ -20218,38 +21362,38 @@ msgid ""
 "inferior.  Otherwise, symbols must be loaded manually, using `sharedlibrary'."
 msgstr ""
 
-#: solib.c:1478
+#: solib.c:1482
 msgid "Set an alternate system root."
 msgstr ""
 
-#: solib.c:1479
+#: solib.c:1483
 msgid "Show the current system root."
 msgstr ""
 
-#: solib.c:1480
+#: solib.c:1484
 msgid ""
 "The system root is used to load absolute shared library symbol files.\n"
 "For other (relative) files, you can add directories using\n"
 "`set solib-search-path'."
 msgstr ""
 
-#: solib.c:1494
+#: solib.c:1498
 msgid ""
 "Set the search path for loading non-absolute shared library symbol files."
 msgstr ""
 
-#: solib.c:1496
+#: solib.c:1500
 msgid ""
 "Show the search path for loading non-absolute shared library symbol files."
 msgstr ""
 
-#: solib.c:1498
+#: solib.c:1502
 msgid ""
 "This takes precedence over the environment variables PATH and "
 "LD_LIBRARY_PATH."
 msgstr ""
 
-#: solib-darwin.c:456
+#: solib-darwin.c:514
 #, possible-c-format
 msgid "`%s': not a shared-library: %s"
 msgstr ""
@@ -20290,48 +21434,48 @@ msgstr ""
 msgid "Can't read pathname for link map entry: %s."
 msgstr ""
 
-#: solib-dsbt.c:780 solib-frv.c:480 solib-svr4.c:1680
+#: solib-dsbt.c:780 solib-frv.c:480 solib-svr4.c:1688
 msgid ""
 "Unable to find dynamic linker breakpoint function.\n"
 "GDB will be unable to debug shared library initializers\n"
 "and track explicitly loaded dynamic code."
 msgstr ""
 
-#: solib-dsbt.c:901 solib-frv.c:623
+#: solib-dsbt.c:900 solib-frv.c:623
 msgid "Could not find symbol _dl_debug_addr in dynamic linker"
 msgstr ""
 
-#: solib-dsbt.c:922 solib-frv.c:647
+#: solib-dsbt.c:921 solib-frv.c:647
 #, possible-c-format
 msgid ""
 "Unable to fetch contents of _dl_debug_addr (at address %s) from dynamic "
 "linker"
 msgstr ""
 
-#: solib-dsbt.c:948 solib-frv.c:673
+#: solib-dsbt.c:947 solib-frv.c:673
 #, possible-c-format
 msgid ""
 "Unable to fetch _dl_debug_addr->r_brk (at address %s) from dynamic linker"
 msgstr ""
 
-#: solib-dsbt.c:1110 solib-frv.c:863 solib-irix.c:408 solib-sunos.c:654
+#: solib-dsbt.c:1107 solib-frv.c:863 solib-irix.c:408 solib-sunos.c:654
 msgid "shared library handler failed to enable breakpoint"
 msgstr ""
 
-#: solib-dsbt.c:1164
+#: solib-dsbt.c:1161
 #, possible-c-format
 msgid "solib-dsbt debugging is %s.\n"
 msgstr ""
 
-#: solib-dsbt.c:1190
+#: solib-dsbt.c:1187
 msgid "Set internal debugging of shared library code for DSBT ELF."
 msgstr ""
 
-#: solib-dsbt.c:1191
+#: solib-dsbt.c:1188
 msgid "Show internal debugging of shared library code for DSBT ELF."
 msgstr ""
 
-#: solib-dsbt.c:1192
+#: solib-dsbt.c:1189
 msgid "When non-zero, DSBT solib specific internal debugging is enabled."
 msgstr ""
 
@@ -20367,15 +21511,15 @@ msgstr ""
 msgid "Unable to load the executable's loadmap."
 msgstr ""
 
-#: solib-frv.c:1189
+#: solib-frv.c:1187
 msgid "Set internal debugging of shared library code for FR-V."
 msgstr ""
 
-#: solib-frv.c:1190
+#: solib-frv.c:1188
 msgid "Show internal debugging of shared library code for FR-V."
 msgstr ""
 
-#: solib-frv.c:1191
+#: solib-frv.c:1189
 msgid "When non-zero, FR-V solib specific internal debugging is enabled."
 msgstr ""
 
@@ -20566,7 +21710,7 @@ msgstr ""
 msgid "Unable to find $PRIVATE$ in shared library!"
 msgstr ""
 
-#: solib-spu.c:364
+#: solib-spu.c:365
 #, possible-c-format
 msgid "Cannot read SPE executable at %s"
 msgstr ""
@@ -20618,7 +21762,7 @@ msgstr ""
 #. It can be printed repeatedly as there is no easy way to check
 #. the executable symbols/file has been already relocated to
 #. displacement.
-#: solib-svr4.c:2107
+#: solib-svr4.c:2115
 #, possible-c-format
 msgid ""
 "Using PIE (Position Independent Executable) displacement %s for \"%s\".\n"
@@ -20658,125 +21802,125 @@ msgstr ""
 msgid "Could not relocate shared library \"%s\": bad offsets"
 msgstr ""
 
-#: sol-thread.c:260
+#: sol-thread.c:258
 #, possible-c-format
 msgid "thread_to_lwp: td_ta_map_id2thr %s"
 msgstr ""
 
-#: sol-thread.c:266
+#: sol-thread.c:264
 #, possible-c-format
 msgid "thread_to_lwp: td_thr_get_info: %s"
 msgstr ""
 
-#: sol-thread.c:272
+#: sol-thread.c:270
 #, possible-c-format
 msgid "thread_to_lwp: thread state not active: %s"
 msgstr ""
 
-#: sol-thread.c:303
+#: sol-thread.c:301
 #, possible-c-format
 msgid "lwp_to_thread: td_ta_map_lwp2thr: %s."
 msgstr ""
 
-#: sol-thread.c:309
+#: sol-thread.c:307
 #, possible-c-format
 msgid "lwp_to_thread: td_thr_validate: %s."
 msgstr ""
 
-#: sol-thread.c:315
+#: sol-thread.c:313
 #, possible-c-format
 msgid "lwp_to_thread: td_thr_get_info: %s."
 msgstr ""
 
 #. Inactive thread.
-#: sol-thread.c:367 sol-thread.c:403
+#: sol-thread.c:365 sol-thread.c:401
 msgid "This version of Solaris can't start inactive threads."
 msgstr ""
 
-#: sol-thread.c:369 sol-thread.c:405
+#: sol-thread.c:367 sol-thread.c:403
 #, possible-c-format
 msgid "Specified thread %ld seems to have terminated"
 msgstr ""
 
-#: sol-thread.c:463
+#: sol-thread.c:461
 msgid "sol_thread_fetch_registers: thread == 0"
 msgstr ""
 
-#: sol-thread.c:467
+#: sol-thread.c:465
 #, possible-c-format
 msgid "sol_thread_fetch_registers: td_ta_map_id2thr: %s"
 msgstr ""
 
-#: sol-thread.c:474
+#: sol-thread.c:472
 #, possible-c-format
 msgid "sol_thread_fetch_registers: td_thr_getgregs %s"
 msgstr ""
 
-#: sol-thread.c:484
+#: sol-thread.c:482
 #, possible-c-format
 msgid "sol_thread_fetch_registers: td_thr_getfpregs %s"
 msgstr ""
 
-#: sol-thread.c:498
+#: sol-thread.c:496
 #, possible-c-format
 msgid "sol_thread_fetch_registers: td_thr_getxregsize %s"
 msgstr ""
 
-#: sol-thread.c:506
+#: sol-thread.c:504
 #, possible-c-format
 msgid "sol_thread_fetch_registers: td_thr_getxregs %s"
 msgstr ""
 
-#: sol-thread.c:540
+#: sol-thread.c:538
 #, possible-c-format
 msgid "sol_thread_store_registers: td_ta_map_id2thr %s"
 msgstr ""
 
-#: sol-thread.c:553
+#: sol-thread.c:551
 #, possible-c-format
 msgid "sol_thread_store_registers: td_thr_getgregs %s"
 msgstr ""
 
-#: sol-thread.c:557
+#: sol-thread.c:555
 #, possible-c-format
 msgid "sol_thread_store_registers: td_thr_getfpregs %s"
 msgstr ""
 
-#: sol-thread.c:567 sol-thread.c:597
+#: sol-thread.c:565 sol-thread.c:595
 #, possible-c-format
 msgid "sol_thread_store_registers: td_thr_getxregsize %s"
 msgstr ""
 
-#: sol-thread.c:575
+#: sol-thread.c:573
 #, possible-c-format
 msgid "sol_thread_store_registers: td_thr_getxregs %s"
 msgstr ""
 
-#: sol-thread.c:586
+#: sol-thread.c:584
 #, possible-c-format
 msgid "sol_thread_store_registers: td_thr_setgregs %s"
 msgstr ""
 
-#: sol-thread.c:590
+#: sol-thread.c:588
 #, possible-c-format
 msgid "sol_thread_store_registers: td_thr_setfpregs %s"
 msgstr ""
 
-#: sol-thread.c:661
+#: sol-thread.c:659
 #, possible-c-format
 msgid "sol_thread_new_objfile: td_init: %s"
 msgstr ""
 
-#: sol-thread.c:689
+#: sol-thread.c:687
 #, possible-c-format
 msgid "Cannot initialize thread debugging library: %s"
 msgstr ""
 
-#: sol-thread.c:1274
+#: sol-thread.c:1272
 msgid "info sol-thread: failed to get info for thread."
 msgstr ""
 
-#: sol-thread.c:1387
+#: sol-thread.c:1388
 msgid "Show info on Solaris user threads."
 msgstr ""
 
@@ -20798,126 +21942,126 @@ msgstr ""
 msgid "Number of source lines gdb will list by default is %s.\n"
 msgstr ""
 
-#: source.c:290
+#: source.c:291
 msgid "Can't find a default source file"
 msgstr ""
 
-#: source.c:400
+#: source.c:401
 msgid "Reinitialize source path to empty? "
 msgstr ""
 
-#: source.c:570
+#: source.c:549
 #, possible-c-format
 msgid "%s is not a directory."
 msgstr ""
 
-#: source.c:645
+#: source.c:613
 msgid "No current source file.\n"
 msgstr ""
 
-#: source.c:648
+#: source.c:616
 #, possible-c-format
 msgid "Current source file is %s\n"
 msgstr ""
 
-#: source.c:650
+#: source.c:618
 #, possible-c-format
 msgid "Compilation directory is %s\n"
 msgstr ""
 
-#: source.c:652
+#: source.c:620
 #, possible-c-format
 msgid "Located in %s\n"
 msgstr ""
 
-#: source.c:654
+#: source.c:622
 #, possible-c-format
 msgid "Contains %d line%s.\n"
 msgstr ""
 
-#: source.c:657
+#: source.c:625
 #, possible-c-format
 msgid "Source language is %s.\n"
 msgstr ""
 
-#: source.c:658
+#: source.c:626
 #, possible-c-format
 msgid "Compiled with %s debugging format.\n"
 msgstr ""
 
-#: source.c:659
+#: source.c:627
 #, possible-c-format
 msgid "%s preprocessor macro info.\n"
 msgstr ""
 
-#: source.c:1159
+#: source.c:1136
 msgid "Source file is more recent than executable."
 msgstr ""
 
-#: source.c:1341
+#: source.c:1318
 #, possible-c-format
 msgid "Line number %d out of range; %s has %d lines."
 msgstr ""
 
-#: source.c:1451
+#: source.c:1428
 msgid "No line number information available"
 msgstr ""
 
 #. Is there any case in which we get here, and have an address
 #. which the user would want to see?  If we have debugging symbols
 #. and no line numbers?
-#: source.c:1508
+#: source.c:1485
 #, possible-c-format
 msgid "Line number %d is out of range for \"%s\".\n"
 msgstr ""
 
-#: source.c:1544 source.c:1633
+#: source.c:1521 source.c:1610
 msgid "Expression not found"
 msgstr ""
 
-#: source.c:1601 source.c:1684
+#: source.c:1578 source.c:1661
 msgid "Expression not found\n"
 msgstr ""
 
-#: source.c:1794
+#: source.c:1771
 msgid "Too many arguments in command"
 msgstr ""
 
-#: source.c:1803
+#: source.c:1780
 #, possible-c-format
 msgid "Source path substitution rule matching `%s':\n"
 msgstr ""
 
-#: source.c:1805
+#: source.c:1782
 msgid "List of all source path substitution rules:\n"
 msgstr ""
 
-#: source.c:1829 source.c:1882
+#: source.c:1806 source.c:1859
 msgid "Incorrect usage, too many arguments in command"
 msgstr ""
 
-#: source.c:1839
+#: source.c:1816
 msgid "Delete all source path substitution rules? "
 msgstr ""
 
-#: source.c:1840
+#: source.c:1817
 msgid "Canceled"
 msgstr ""
 
-#: source.c:1862
+#: source.c:1839
 #, possible-c-format
 msgid "No substitution rule defined for `%s'"
 msgstr ""
 
-#: source.c:1879
+#: source.c:1856
 msgid "Incorrect usage, too few arguments in command"
 msgstr ""
 
-#: source.c:1885
+#: source.c:1862
 msgid "First argument must be at least one character long"
 msgstr ""
 
-#: source.c:1920
+#: source.c:1897
 msgid ""
 "Add directory DIR to beginning of search path for source files.\n"
 "Forget cached info on source file locations and line positions.\n"
@@ -20926,15 +22070,15 @@ msgid ""
 "With no argument, reset the search path to $cdir:$cwd, the default."
 msgstr ""
 
-#: source.c:1936
+#: source.c:1913
 msgid "Set the search path for finding source files."
 msgstr ""
 
-#: source.c:1938
+#: source.c:1915
 msgid "Show the search path for finding source files."
 msgstr ""
 
-#: source.c:1940
+#: source.c:1917
 msgid ""
 "$cwd in the path means the current working directory.\n"
 "$cdir in the path means the compilation directory of the source file.\n"
@@ -20943,18 +22087,18 @@ msgid ""
 "Setting the value to an empty string sets it to $cdir:$cwd, the default."
 msgstr ""
 
-#: source.c:1953
+#: source.c:1930
 msgid ""
 "Current search path for finding source files.\n"
 "$cwd in the path means the current working directory.\n"
 "$cdir in the path means the compilation directory of the source file."
 msgstr ""
 
-#: source.c:1961
+#: source.c:1938
 msgid "Information about the current source file."
 msgstr ""
 
-#: source.c:1963
+#: source.c:1940
 msgid ""
 "Core addresses of the code for a source line.\n"
 "Line can be specified as\n"
@@ -20969,28 +22113,28 @@ msgid ""
 "The address is also stored as the value of \"$_\"."
 msgstr ""
 
-#: source.c:1975
+#: source.c:1952
 msgid ""
 "Search for regular expression (see regex(3)) from last line listed.\n"
 "The matching line number is also stored as the value of \"$_\"."
 msgstr ""
 
-#: source.c:1980
+#: source.c:1957
 msgid ""
 "Search backward for regular expression (see regex(3)) from last line "
 "listed.\n"
 "The matching line number is also stored as the value of \"$_\"."
 msgstr ""
 
-#: source.c:1991
+#: source.c:1968
 msgid "Set number of source lines gdb will list by default."
 msgstr ""
 
-#: source.c:1992
+#: source.c:1969
 msgid "Show number of source lines gdb will list by default."
 msgstr ""
 
-#: source.c:1999
+#: source.c:1976
 msgid ""
 "Usage: set substitute-path FROM TO\n"
 "Add a substitution rule replacing FROM into TO in source file names.\n"
@@ -20998,7 +22142,7 @@ msgid ""
 "is replaced by the new one."
 msgstr ""
 
-#: source.c:2007
+#: source.c:1984
 msgid ""
 "Usage: unset substitute-path [FROM]\n"
 "Delete the rule for substituting FROM in source file names.  If FROM\n"
@@ -21006,7 +22150,7 @@ msgid ""
 "If the debugger cannot find a rule for FROM, it will display a warning."
 msgstr ""
 
-#: source.c:2015
+#: source.c:1992
 msgid ""
 "Usage: show substitute-path [FROM]\n"
 "Print the rule for substituting FROM in source file names. If FROM\n"
@@ -21025,201 +22169,201 @@ msgstr ""
 msgid "Couldn't get StackGhost cookie"
 msgstr ""
 
-#: spu-linux-nat.c:459
+#: spu-linux-nat.c:460
 #, possible-c-format
 msgid "Child process unexpectedly missing: %s"
 msgstr ""
 
-#: spu-tdep.c:1614 spu-tdep.c:1618
+#: spu-tdep.c:1615 spu-tdep.c:1619
 msgid "Could not determine address of single-step breakpoint."
 msgstr ""
 
-#: spu-tdep.c:2036 spu-tdep.c:2093 spu-tdep.c:2214 spu-tdep.c:2456
-#: spu-tdep.c:2535
+#: spu-tdep.c:2038 spu-tdep.c:2095 spu-tdep.c:2216 spu-tdep.c:2458
+#: spu-tdep.c:2537
 msgid "\"info spu\" is only supported on the SPU architecture."
 msgstr ""
 
-#: spu-tdep.c:2044
+#: spu-tdep.c:2046
 msgid "Could not read event_status."
 msgstr ""
 
-#: spu-tdep.c:2052
+#: spu-tdep.c:2054
 msgid "Could not read event_mask."
 msgstr ""
 
-#: spu-tdep.c:2067
+#: spu-tdep.c:2069
 #, possible-c-format
 msgid "Event Status 0x%s\n"
 msgstr ""
 
-#: spu-tdep.c:2068
+#: spu-tdep.c:2070
 #, possible-c-format
 msgid "Event Mask   0x%s\n"
 msgstr ""
 
-#: spu-tdep.c:2100
+#: spu-tdep.c:2102
 msgid "Could not read signal1."
 msgstr ""
 
-#: spu-tdep.c:2111
+#: spu-tdep.c:2113
 msgid "Could not read signal1_type."
 msgstr ""
 
-#: spu-tdep.c:2118
+#: spu-tdep.c:2120
 msgid "Could not read signal2."
 msgstr ""
 
-#: spu-tdep.c:2129
+#: spu-tdep.c:2131
 msgid "Could not read signal2_type."
 msgstr ""
 
-#: spu-tdep.c:2147
+#: spu-tdep.c:2149
 #, possible-c-format
 msgid "Signal 1 control word 0x%s "
 msgstr ""
 
-#: spu-tdep.c:2149
+#: spu-tdep.c:2151
 msgid "Signal 1 not pending "
 msgstr ""
 
-#: spu-tdep.c:2152 spu-tdep.c:2162
+#: spu-tdep.c:2154 spu-tdep.c:2164
 msgid "(Type Or)\n"
 msgstr ""
 
-#: spu-tdep.c:2154 spu-tdep.c:2164
+#: spu-tdep.c:2156 spu-tdep.c:2166
 msgid "(Type Overwrite)\n"
 msgstr ""
 
-#: spu-tdep.c:2157
+#: spu-tdep.c:2159
 #, possible-c-format
 msgid "Signal 2 control word 0x%s "
 msgstr ""
 
-#: spu-tdep.c:2159
+#: spu-tdep.c:2161
 msgid "Signal 2 not pending "
 msgstr ""
 
-#: spu-tdep.c:2224
+#: spu-tdep.c:2226
 msgid "Could not read mbox_info."
 msgstr ""
 
-#: spu-tdep.c:2233
+#: spu-tdep.c:2235
 msgid "Could not read ibox_info."
 msgstr ""
 
-#: spu-tdep.c:2242
+#: spu-tdep.c:2244
 msgid "Could not read wbox_info."
 msgstr ""
 
-#: spu-tdep.c:2464
+#: spu-tdep.c:2466
 msgid "Could not read dma_info."
 msgstr ""
 
-#: spu-tdep.c:2494 spu-tdep.c:2567
+#: spu-tdep.c:2496 spu-tdep.c:2569
 msgid "no query pending"
 msgstr ""
 
-#: spu-tdep.c:2499 spu-tdep.c:2568
+#: spu-tdep.c:2501 spu-tdep.c:2570
 msgid "'any' query pending"
 msgstr ""
 
-#: spu-tdep.c:2500 spu-tdep.c:2569
+#: spu-tdep.c:2502 spu-tdep.c:2571
 msgid "'all' query pending"
 msgstr ""
 
-#: spu-tdep.c:2501 spu-tdep.c:2570
+#: spu-tdep.c:2503 spu-tdep.c:2572
 msgid "undefined query type"
 msgstr ""
 
-#: spu-tdep.c:2504 spu-tdep.c:2573
+#: spu-tdep.c:2506 spu-tdep.c:2575
 #, possible-c-format
 msgid "Tag-Group Status  0x%s\n"
 msgstr ""
 
-#: spu-tdep.c:2506 spu-tdep.c:2575
+#: spu-tdep.c:2508 spu-tdep.c:2577
 #, possible-c-format
 msgid "Tag-Group Mask    0x%s (%s)\n"
 msgstr ""
 
-#: spu-tdep.c:2508
+#: spu-tdep.c:2510
 #, possible-c-format
 msgid "Stall-and-Notify  0x%s\n"
 msgstr ""
 
-#: spu-tdep.c:2510
+#: spu-tdep.c:2512
 #, possible-c-format
 msgid "Atomic Cmd Status 0x%s\n"
 msgstr ""
 
-#: spu-tdep.c:2543
+#: spu-tdep.c:2545
 msgid "Could not read proxydma_info."
 msgstr ""
 
-#: spu-tdep.c:2587
+#: spu-tdep.c:2589
 msgid "\"info spu\" must be followed by the name of an SPU facility.\n"
 msgstr ""
 
-#: spu-tdep.c:2611
+#: spu-tdep.c:2613
 #, possible-c-format
 msgid "Stopping for new SPE threads is %s.\n"
 msgstr ""
 
-#: spu-tdep.c:2619
+#: spu-tdep.c:2621
 #, possible-c-format
 msgid "Automatic software-cache flush is %s.\n"
 msgstr ""
 
-#: spu-tdep.c:2760 spu-tdep.c:2763 spu-tdep.c:2798
+#: spu-tdep.c:2762 spu-tdep.c:2765 spu-tdep.c:2800
 msgid "Various SPU specific commands."
 msgstr ""
 
-#: spu-tdep.c:2769
+#: spu-tdep.c:2771
 msgid "Set whether to stop for new SPE threads."
 msgstr ""
 
-#: spu-tdep.c:2771
+#: spu-tdep.c:2773
 msgid "Show whether to stop for new SPE threads."
 msgstr ""
 
-#: spu-tdep.c:2773
+#: spu-tdep.c:2775
 msgid ""
 "Use \"on\" to give control to the user when a new SPE thread\n"
 "enters its \"main\" function.\n"
 "Use \"off\" to disable stopping for new SPE threads."
 msgstr ""
 
-#: spu-tdep.c:2784
+#: spu-tdep.c:2786
 msgid "Set whether to automatically flush the software-managed cache."
 msgstr ""
 
-#: spu-tdep.c:2786
+#: spu-tdep.c:2788
 msgid "Show whether to automatically flush the software-managed cache."
 msgstr ""
 
-#: spu-tdep.c:2788
+#: spu-tdep.c:2790
 msgid ""
 "Use \"on\" to automatically flush the software-managed cache\n"
 "whenever SPE execution stops.\n"
 "Use \"off\" to never automatically flush the software-managed cache."
 msgstr ""
 
-#: spu-tdep.c:2803
+#: spu-tdep.c:2805
 msgid "Display SPU event facility status.\n"
 msgstr ""
 
-#: spu-tdep.c:2806
+#: spu-tdep.c:2808
 msgid "Display SPU signal notification facility status.\n"
 msgstr ""
 
-#: spu-tdep.c:2809
+#: spu-tdep.c:2811
 msgid "Display SPU mailbox facility status.\n"
 msgstr ""
 
-#: spu-tdep.c:2812
+#: spu-tdep.c:2814
 msgid "Display MFC DMA status.\n"
 msgstr ""
 
-#: spu-tdep.c:2815
+#: spu-tdep.c:2817
 msgid "Display MFC Proxy-DMA status.\n"
 msgstr ""
 
@@ -21282,22 +22426,22 @@ msgstr ""
 msgid "Unknown builtin type %d"
 msgstr ""
 
-#: stabsread.c:2247
+#: stabsread.c:2248
 #, possible-c-format
 msgid "Method has bad physname %s\n"
 msgstr ""
 
-#: stabsread.c:2446
+#: stabsread.c:2437
 #, possible-c-format
 msgid "const/volatile indicator missing, got '%c'"
 msgstr ""
 
-#: stabsread.c:2530
+#: stabsread.c:2521
 #, possible-c-format
 msgid "member function type missing, got '%c'"
 msgstr ""
 
-#: stabsread.c:2799
+#: stabsread.c:2798
 #, possible-c-format
 msgid "C++ abbreviated type name unknown at symtab pos %d"
 msgstr ""
@@ -21372,66 +22516,58 @@ msgstr ""
 msgid "Debugger's willingness to use disassemble-next-line is %s.\n"
 msgstr ""
 
-#: stack.c:1265 stack.c:1345
+#: stack.c:916
+msgid "Trying to set NULL pspace."
+msgstr ""
+
+#: stack.c:1271 stack.c:1351
 msgid "Too many args in frame specification"
 msgstr ""
 
-#: stack.c:1432
+#: stack.c:1438
 #, possible-c-format
 msgid "Stack level %d, frame at "
 msgstr ""
 
-#: stack.c:1437
+#: stack.c:1443
 msgid "Stack frame at "
 msgstr ""
 
-#: stack.c:1472
+#: stack.c:1478
 #, possible-c-format
 msgid " Outermost frame: %s\n"
 msgstr ""
 
-#: stack.c:1732
+#: stack.c:1751
 msgid "(More stack frames follow...)\n"
 msgstr ""
 
-#: stack.c:1742
+#: stack.c:1761
 #, possible-c-format
 msgid "Backtrace stopped: %s\n"
 msgstr ""
 
-#: stack.c:1947
+#: stack.c:1982
 msgid "PC unavailable, cannot determine locals.\n"
 msgstr ""
 
-#: stack.c:1968
-msgid "No locals.\n"
-msgstr ""
-
-#: stack.c:2004
-msgid "blockvector blotch"
-msgstr ""
-
 #: stack.c:2006
-msgid "blockvector botch"
-msgstr ""
-
-#: stack.c:2043
-msgid "No catches.\n"
+msgid "No locals.\n"
 msgstr ""
 
-#: stack.c:2106
+#: stack.c:2065
 msgid "PC unavailable, cannot determine args.\n"
 msgstr ""
 
-#: stack.c:2113
+#: stack.c:2072
 msgid "No symbol table info available.\n"
 msgstr ""
 
-#: stack.c:2126
+#: stack.c:2088
 msgid "No arguments.\n"
 msgstr ""
 
-#: stack.c:2255
+#: stack.c:2217
 msgid "Initial frame selected; you cannot go up."
 msgstr ""
 
@@ -21439,40 +22575,40 @@ msgstr ""
 #. "down" means to really go down (and let me know if that is
 #. impossible), but "down 9999" can be used to mean go all the
 #. way down without getting an error.
-#: stack.c:2292
+#: stack.c:2254
 msgid "Bottom (innermost) frame selected; you cannot go down."
 msgstr ""
 
-#: stack.c:2326
+#: stack.c:2289
 msgid "Can not force return from an inlined function."
 msgstr ""
 
-#: stack.c:2349
+#: stack.c:2312
 msgid ""
 "Return value type not available for selected stack frame.\n"
 "Please use an explicit cast of the value to return."
 msgstr ""
 
-#: stack.c:2390
+#: stack.c:2355
 #, possible-c-format
 msgid "%sMake selected stack frame return now? "
 msgstr ""
 
-#: stack.c:2393
+#: stack.c:2358
 #, possible-c-format
 msgid "%sMake %s return now? "
 msgstr ""
 
-#: stack.c:2396
+#: stack.c:2361
 msgid "Not confirmed"
 msgstr ""
 
-#: stack.c:2486
+#: stack.c:2450
 #, possible-c-format
 msgid "'%s' not within current stack frame.\n"
 msgstr ""
 
-#: stack.c:2540
+#: stack.c:2504
 msgid ""
 "Make selected stack frame return to its caller.\n"
 "Control remains in the debugger, but when you continue\n"
@@ -21480,31 +22616,31 @@ msgid ""
 "If an argument is given, it is an expression for the value to return."
 msgstr ""
 
-#: stack.c:2546
+#: stack.c:2510
 msgid ""
 "Select and print stack frame that called this one.\n"
 "An argument says how many frames up to go."
 msgstr ""
 
-#: stack.c:2549
+#: stack.c:2513
 msgid ""
 "Same as the `up' command, but does not print anything.\n"
 "This is useful in command scripts."
 msgstr ""
 
-#: stack.c:2553
+#: stack.c:2517
 msgid ""
 "Select and print stack frame called by this one.\n"
 "An argument says how many frames down to go."
 msgstr ""
 
-#: stack.c:2558
+#: stack.c:2522
 msgid ""
 "Same as the `down' command, but does not print anything.\n"
 "This is useful in command scripts."
 msgstr ""
 
-#: stack.c:2562
+#: stack.c:2526
 msgid ""
 "Select and print a stack frame.\n"
 "With no argument, print the selected stack frame.  (See also \"info frame"
@@ -21515,25 +22651,25 @@ msgid ""
 "a command file or a user-defined command."
 msgstr ""
 
-#: stack.c:2575
+#: stack.c:2539
 msgid "Print the current stack frame.\n"
 msgstr ""
 
-#: stack.c:2578
+#: stack.c:2542
 msgid ""
 "Select a stack frame without printing anything.\n"
 "An argument specifies the frame to select.\n"
 "It can be a stack frame number or the address of the frame.\n"
 msgstr ""
 
-#: stack.c:2583
+#: stack.c:2547
 msgid ""
 "Print backtrace of all stack frames, or innermost COUNT frames.\n"
 "With a negative argument, print outermost -COUNT frames.\n"
 "Use of the 'full' qualifier also prints the values of the local variables.\n"
 msgstr ""
 
-#: stack.c:2591
+#: stack.c:2555
 msgid ""
 "Print backtrace of all stack frames, or innermost COUNT frames\n"
 "and the values of the local variables.\n"
@@ -21541,55 +22677,51 @@ msgid ""
 "Usage: T <count>\n"
 msgstr ""
 
-#: stack.c:2600
+#: stack.c:2564
 msgid "Backtrace of the stack, or innermost COUNT frames."
 msgstr ""
 
-#: stack.c:2603
+#: stack.c:2567
 msgid "All about selected stack frame, or frame at ADDR."
 msgstr ""
 
-#: stack.c:2606
+#: stack.c:2570
 msgid "Local variables of current stack frame."
 msgstr ""
 
-#: stack.c:2608
+#: stack.c:2572
 msgid "Argument variables of current stack frame."
 msgstr ""
 
-#: stack.c:2611
+#: stack.c:2575
 msgid "Argument and local variables of current stack frame."
 msgstr ""
 
-#: stack.c:2614
+#: stack.c:2578
 msgid ""
 "Select the stack frame that contains <func>.\n"
 "Usage: func <name>\n"
 msgstr ""
 
-#: stack.c:2619
-msgid "Exceptions that can be caught in the current stack frame."
-msgstr ""
-
-#: stack.c:2623
+#: stack.c:2584
 msgid "Set printing of non-scalar frame arguments"
 msgstr ""
 
-#: stack.c:2624
+#: stack.c:2585
 msgid "Show printing of non-scalar frame arguments"
 msgstr ""
 
-#: stack.c:2628
+#: stack.c:2589
 msgid ""
 "Set whether to disassemble next source line or insn when execution stops."
 msgstr ""
 
-#: stack.c:2630
+#: stack.c:2591
 msgid ""
 "Show whether to disassemble next source line or insn when execution stops."
 msgstr ""
 
-#: stack.c:2632
+#: stack.c:2593
 msgid ""
 "If ON, GDB will display disassembly of the next source line, in addition\n"
 "to displaying the source line itself.  If the next source line cannot\n"
@@ -21602,15 +22734,15 @@ msgid ""
 "source line."
 msgstr ""
 
-#: stack.c:2649
+#: stack.c:2610
 msgid "Set printing of function arguments at function entry"
 msgstr ""
 
-#: stack.c:2651
+#: stack.c:2612
 msgid "Show printing of function arguments at function entry"
 msgstr ""
 
-#: stack.c:2653
+#: stack.c:2614
 msgid ""
 "GDB can sometimes determine the values of function arguments at entry,\n"
 "in addition to their current values.  This option tells GDB whether\n"
@@ -21618,6 +22750,147 @@ msgid ""
 "or both.  Note that one or both of these values may be <optimized out>."
 msgstr ""
 
+#: stap-probe.c:163
+#, possible-c-format
+msgid "SystemTap Probe expression debugging is %s.\n"
+msgstr ""
+
+#: stap-probe.c:308
+#, possible-c-format
+msgid "Invalid opcode in expression `%s' for SystemTapprobe"
+msgstr ""
+
+#: stap-probe.c:344
+msgid "Undefined bitness for probe."
+msgstr ""
+
+#: stap-probe.c:447
+#, possible-c-format
+msgid "Invalid register displacement syntax on expression `%s'."
+msgstr ""
+
+#: stap-probe.c:513
+#, possible-c-format
+msgid "Missing register name suffix `%s' on expression `%s'."
+msgstr ""
+
+#: stap-probe.c:523
+#, possible-c-format
+msgid "Missing indirection suffix `%s' on expression `%s'."
+msgstr ""
+
+#: stap-probe.c:620
+#, possible-c-format
+msgid "Invalid operator `%c' for register displacement on expression `%s'."
+msgstr ""
+
+#: stap-probe.c:654 stap-probe.c:684
+#, possible-c-format
+msgid "Invalid constant suffix on expression `%s'."
+msgstr ""
+
+#: stap-probe.c:662
+#, possible-c-format
+msgid "Unknown numeric token on expression `%s'."
+msgstr ""
+
+#: stap-probe.c:694
+#, possible-c-format
+msgid "Operator `%c' not recognized on expression `%s'."
+msgstr ""
+
+#: stap-probe.c:724
+#, possible-c-format
+msgid "Missign close-paren on expression `%s'."
+msgstr ""
+
+#: stap-probe.c:732
+#, possible-c-format
+msgid "Cannot parse expression `%s'."
+msgstr ""
+
+#: stap-probe.c:773
+#, possible-c-format
+msgid "Invalid operator `%c' on expression `%s'."
+msgstr ""
+
+#: stap-probe.c:958
+#, possible-c-format
+msgid "unrecognized bitness `%c' for probe `%s'"
+msgstr ""
+
+#: stap-probe.c:1136 stap-probe.c:1171
+#, possible-c-format
+msgid "No SystemTap probe at PC %s"
+msgstr ""
+
+#: stap-probe.c:1145
+#, possible-c-format
+msgid "Invalid probe argument %d -- probe has %u arguments available"
+msgstr ""
+
+#: stap-probe.c:1186
+#, possible-c-format
+msgid "Invalid probe argument %d -- probe has %d arguments available"
+msgstr ""
+
+#: stap-probe.c:1214
+msgid "Could not read the value of a SystemTap semaphore."
+msgstr ""
+
+#: stap-probe.c:1231
+msgid "Could not write the value of a SystemTap semaphore."
+msgstr ""
+
+#: stap-probe.c:1308
+#, possible-c-format
+msgid "corrupt probe name when reading `%s'"
+msgstr ""
+
+#: stap-probe.c:1347
+#, possible-c-format
+msgid "corrupt probe argument when reading `%s'"
+msgstr ""
+
+#: stap-probe.c:1387
+#, possible-c-format
+msgid "could not obtain base address for SystemTap section on objfile `%s'."
+msgstr ""
+
+#. If we are here, it means we have failed to parse every known
+#. probe.
+#: stap-probe.c:1445
+msgid "could not parse SystemTap probe(s) from inferior"
+msgstr ""
+
+#: stap-probe.c:1477
+msgid "Semaphore"
+msgstr ""
+
+#: stap-probe.c:1533
+msgid "Set SystemTap expression debugging."
+msgstr ""
+
+#: stap-probe.c:1534
+msgid "Show SystemTap expression debugging."
+msgstr ""
+
+#: stap-probe.c:1535
+msgid ""
+"When non-zero, the internal representation of SystemTap expressions will be "
+"printed."
+msgstr ""
+
+#: stap-probe.c:1569
+msgid ""
+"Show information about SystemTap static probes.\n"
+"Usage: info probes stap [PROVIDER [NAME [OBJECT]]]\n"
+"Each argument is a regular expression, used to select probes.\n"
+"PROVIDER matches probe provider names.\n"
+"NAME matches the probe names.\n"
+"OBJECT matches the executable or shared library name."
+msgstr ""
+
 #: std-regs.c:82
 msgid "Standard register ``$sp'' is not available for this target"
 msgstr ""
@@ -21626,112 +22899,107 @@ msgstr ""
 msgid "Standard register ``$ps'' is not available for this target"
 msgstr ""
 
-#: symfile.c:162
-#, possible-c-format
-msgid "Dynamic symbol table reloading multiple times in one run is %s.\n"
-msgstr ""
-
-#: symfile.c:614
+#: symfile.c:597
 #, possible-c-format
 msgid "no loadable sections found in added symbol-file %s"
 msgstr ""
 
-#: symfile.c:729
+#: symfile.c:712
 #, possible-c-format
 msgid "section %s not found in %s"
 msgstr ""
 
-#: symfile.c:1102
+#: symfile.c:1085
 #, possible-c-format
 msgid "Load new symbol table from \"%s\"? "
 msgstr ""
 
-#: symfile.c:1137
+#: symfile.c:1120
 msgid "expanding to full symbols..."
 msgstr ""
 
-#: symfile.c:1265
+#: symfile.c:1251
 #, possible-c-format
 msgid "Discard symbol table from `%s'? "
 msgstr ""
 
-#: symfile.c:1267
+#: symfile.c:1253
 msgid "Discard symbol table? "
 msgstr ""
 
-#: symfile.c:1278
+#: symfile.c:1264
 msgid "No symbol file now.\n"
 msgstr ""
 
-#: symfile.c:1322 symfile.c:1335
+#: symfile.c:1308 symfile.c:1321
 #, possible-c-format
 msgid "Problem reading \"%s\" for CRC: %s"
 msgstr ""
 
-#: symfile.c:1419
+#: symfile.c:1405
 #, possible-c-format
 msgid ""
 "the debug information found in \"%s\" does not match \"%s\" (CRC mismatch).\n"
 msgstr ""
 
-#: symfile.c:1435
+#: symfile.c:1421
 #, possible-c-format
 msgid ""
 "The directory where separate debug symbols are searched for is \"%s\".\n"
 msgstr ""
 
-#: symfile.c:1596 tracepoint.c:3127
+#: symfile.c:1638 tracepoint.c:3164
 #, possible-c-format
 msgid "unknown option `%s'"
 msgstr ""
 
-#: symfile.c:1607
+#: symfile.c:1649
 msgid "no symbol file name was specified"
 msgstr ""
 
-#: symfile.c:1795
+#: symfile.c:1836
 #, possible-c-format
 msgid "I'm sorry, Dave, I can't do that.  Symbol format `%s' unknown."
 msgstr ""
 
-#: symfile.c:1942
+#: symfile.c:1983
 #, possible-c-format
 msgid "Download verify read failed at %s"
 msgstr ""
 
-#: symfile.c:1945
+#: symfile.c:1986
 #, possible-c-format
 msgid "Download verify compare failed at %s"
 msgstr ""
 
-#: symfile.c:2047
+#: symfile.c:2088
 msgid "file to load"
 msgstr ""
 
-#: symfile.c:2064
+#: symfile.c:2105
 #, possible-c-format
 msgid "Invalid download offset:%s."
 msgstr ""
 
-#: symfile.c:2067
+#: symfile.c:2108
 msgid "Too many parameters."
 msgstr ""
 
-#: symfile.c:2098
+#: symfile.c:2139
 msgid "Load failed"
 msgstr ""
 
-#: symfile.c:2247
+#: symfile.c:2288
 msgid "add-symbol-file takes a file name and an address"
 msgstr ""
 
-#: symfile.c:2314
+#: symfile.c:2355
 msgid ""
 "USAGE: add-symbol-file <filename> <textaddress> [-readnow] [-s <secname> "
 "<addr>]*"
 msgstr ""
 
-#: symfile.c:2325
+#: symfile.c:2366
 #, possible-c-format
 msgid "The address where %s has been loaded is missing"
 msgstr ""
@@ -21741,125 +23009,125 @@ msgstr ""
 #. functions.  We have to split this up into separate print
 #. statements because hex_string returns a local static
 #. string.
-#: symfile.c:2333
+#: symfile.c:2374
 #, possible-c-format
 msgid "add symbol table from file \"%s\" at\n"
 msgstr ""
 
 #. FIXME, should use print_sys_errmsg but it's not filtered.
-#: symfile.c:2409
+#: symfile.c:2457
 #, possible-c-format
 msgid "`%s' has disappeared; keeping its symbols.\n"
 msgstr ""
 
-#: symfile.c:2421
+#: symfile.c:2469
 #, possible-c-format
 msgid "`%s' has changed; re-reading symbols.\n"
 msgstr ""
 
-#: symfile.c:2475
+#: symfile.c:2523
 #, possible-c-format
 msgid "Can't close BFD for %s: %s"
 msgstr ""
 
-#: symfile.c:2479
+#: symfile.c:2527
 #, possible-c-format
 msgid "Can't open %s to read symbols."
 msgstr ""
 
-#: symfile.c:2484
+#: symfile.c:2532
 #, possible-c-format
 msgid "Can't read symbols from %s: %s."
 msgstr ""
 
-#: symfile.c:2576
+#: symfile.c:2619
 msgid "(no debugging symbols found)\n"
 msgstr ""
 
-#: symfile.c:2646
+#: symfile.c:2701
 #, possible-c-format
 msgid "Mapping between filename extension and source language is \"%s\".\n"
 msgstr ""
 
-#: symfile.c:2660
+#: symfile.c:2715
 #, possible-c-format
 msgid "'%s': Filename extension must begin with '.'"
 msgstr ""
 
-#: symfile.c:2667 symfile.c:2679
+#: symfile.c:2722 symfile.c:2734
 #, possible-c-format
 msgid "'%s': two arguments required -- filename extension and language"
 msgstr ""
 
-#: symfile.c:2715
+#: symfile.c:2770
 msgid "Filename extensions and the languages they represent:"
 msgstr ""
 
-#: symfile.c:3196
+#: symfile.c:3271
 msgid "No sections are mapped.\n"
 msgstr ""
 
-#: symfile.c:3209 symfile.c:3254
+#: symfile.c:3284 symfile.c:3329
 msgid ""
 "Overlay debugging not enabled.  Use either the 'overlay auto' or\n"
 "the 'overlay manual' command."
 msgstr ""
 
-#: symfile.c:3214 symfile.c:3259
+#: symfile.c:3289 symfile.c:3334
 msgid "Argument required: name of an overlay section"
 msgstr ""
 
-#: symfile.c:3233
+#: symfile.c:3308
 #, possible-c-format
 msgid "Note: section %s unmapped by overlap\n"
 msgstr ""
 
-#: symfile.c:3240 symfile.c:3270
+#: symfile.c:3315 symfile.c:3345
 #, possible-c-format
 msgid "No overlay section called %s"
 msgstr ""
 
-#: symfile.c:3266
+#: symfile.c:3341
 #, possible-c-format
 msgid "Section %s is not mapped"
 msgstr ""
 
-#: symfile.c:3283
+#: symfile.c:3358
 msgid "Automatic overlay debugging enabled."
 msgstr ""
 
-#: symfile.c:3296
+#: symfile.c:3371
 msgid "Overlay debugging enabled."
 msgstr ""
 
-#: symfile.c:3309
+#: symfile.c:3384
 msgid "Overlay debugging disabled."
 msgstr ""
 
-#: symfile.c:3320
+#: symfile.c:3395
 msgid "This target does not know how to read its overlay state."
 msgstr ""
 
-#: symfile.c:3420
+#: symfile.c:3495
 msgid ""
 "Error reading inferior's overlay table: couldn't find `_novlys' variable\n"
 "in inferior.  Use `overlay manual' mode."
 msgstr ""
 
-#: symfile.c:3429 symfile.c:3515
+#: symfile.c:3504 symfile.c:3590
 msgid ""
 "Error reading inferior's overlay table: couldn't find `_ovly_table' array\n"
 "in inferior.  Use `overlay manual' mode."
 msgstr ""
 
-#: symfile.c:3734
+#: symfile.c:3811
 msgid ""
 "Load symbol table from executable file FILE.\n"
 "The `file' command can also load symbol tables, as well as setting the file\n"
 "to execute."
 msgstr ""
 
-#: symfile.c:3740
+#: symfile.c:3817
 msgid ""
 "Load symbols from FILE, assuming FILE has been dynamically loaded.\n"
 "Usage: add-symbol-file FILE ADDR [-s <SECT> <SECT_ADDR> -s <SECT> "
@@ -21870,118 +23138,110 @@ msgid ""
 "with the text.  SECT is a section name to be loaded at SECT_ADDR."
 msgstr ""
 
-#: symfile.c:3750
+#: symfile.c:3827
 msgid ""
 "Dynamically load FILE into the running program, and record its symbols\n"
 "for access from GDB.\n"
 "A load OFFSET may also be given."
 msgstr ""
 
-#: symfile.c:3757
-msgid "Set dynamic symbol table reloading multiple times in one run."
-msgstr ""
-
-#: symfile.c:3758
-msgid "Show dynamic symbol table reloading multiple times in one run."
-msgstr ""
-
-#: symfile.c:3765
+#: symfile.c:3834
 msgid "Commands for debugging overlays."
 msgstr ""
 
-#: symfile.c:3772
+#: symfile.c:3841
 msgid "Assert that an overlay section is mapped."
 msgstr ""
 
-#: symfile.c:3775
+#: symfile.c:3844
 msgid "Assert that an overlay section is unmapped."
 msgstr ""
 
-#: symfile.c:3778
+#: symfile.c:3847
 msgid "List mappings of overlay sections."
 msgstr ""
 
-#: symfile.c:3781
+#: symfile.c:3850
 msgid "Enable overlay debugging."
 msgstr ""
 
-#: symfile.c:3783
+#: symfile.c:3852
 msgid "Disable overlay debugging."
 msgstr ""
 
-#: symfile.c:3785
+#: symfile.c:3854
 msgid "Enable automatic overlay debugging."
 msgstr ""
 
-#: symfile.c:3787
+#: symfile.c:3856
 msgid "Read the overlay mapping state from the target."
 msgstr ""
 
-#: symfile.c:3792
+#: symfile.c:3861
 msgid "Set mapping between filename extension and source language."
 msgstr ""
 
-#: symfile.c:3793
+#: symfile.c:3862
 msgid "Show mapping between filename extension and source language."
 msgstr ""
 
-#: symfile.c:3794
+#: symfile.c:3863
 msgid "Usage: set extension-language .foo bar"
 msgstr ""
 
-#: symfile.c:3801
+#: symfile.c:3870
 msgid "All filename extensions associated with a source language."
 msgstr ""
 
-#: symfile.c:3804
+#: symfile.c:3873
 msgid "Set the directories where separate debug symbols are searched for."
 msgstr ""
 
-#: symfile.c:3805
+#: symfile.c:3874
 msgid "Show the directories where separate debug symbols are searched for."
 msgstr ""
 
-#: symfile.c:3806
+#: symfile.c:3875
 msgid ""
 "Separate debug symbols are first searched for in the same\n"
 "directory as the binary, then in the `"
 msgstr ""
 
-#: symfile.c:3808
+#: symfile.c:3877
 msgid ""
 "' subdirectory,\n"
 "and lastly at the path of the directory of the binary with\n"
 "each global debug-file-directory component prepended."
 msgstr ""
 
-#: symfile-mem.c:77
+#: symfile-mem.c:96
 msgid "add-symbol-file-from-memory not supported for this target"
 msgstr ""
 
-#: symfile-mem.c:82
+#: symfile-mem.c:101
 msgid "Failed to read a valid object file image from memory."
 msgstr ""
 
-#: symfile-mem.c:95
+#: symfile-mem.c:114
 #, possible-c-format
 msgid "Got object file from memory but can't read symbols: %s."
 msgstr ""
 
-#: symfile-mem.c:129
+#: symfile-mem.c:148
 msgid "add-symbol-file-from-memory requires an expression argument"
 msgstr ""
 
-#: symfile-mem.c:139
+#: symfile-mem.c:158
 msgid "Must use symbol-file or exec-file before add-symbol-file-from-memory."
 msgstr ""
 
-#: symfile-mem.c:194
+#: symfile-mem.c:213
 msgid ""
 "Could not load vsyscall page because no executable was specified\n"
 "try using the \"file\" command first."
 msgstr ""
 
-#: symfile-mem.c:222
+#: symfile-mem.c:241
 msgid ""
 "Load the symbols out of memory from a dynamically loaded object file.\n"
 "Give an expression for the address of the file's shared object file header."
@@ -22067,20 +23327,20 @@ msgstr ""
 msgid "internal error:  minimal symbol count %d != %d"
 msgstr ""
 
-#: symmisc.c:415
+#: symmisc.c:416
 msgid "Arguments missing: an output file name and an optional symbol file name"
 msgstr ""
 
-#: symmisc.c:635
+#: symmisc.c:639
 msgid "print-msymbols takes an output file name and optional symbol file name"
 msgstr ""
 
-#: symtab.c:1249
+#: symtab.c:1327
 #, possible-c-format
 msgid "Internal error: `%s' is not an aggregate"
 msgstr ""
 
-#: symtab.c:1501
+#: symtab.c:1635
 #, possible-c-format
 msgid ""
 "Internal: %s symbol `%s' found in %s psymtab but not in symtab.\n"
@@ -22089,7 +23349,7 @@ msgid ""
 msgstr ""
 
 #. FIXME; error is wrong in one case.
-#: symtab.c:1670
+#: symtab.c:1841
 #, possible-c-format
 msgid ""
 "Internal: global symbol `%s' found in %s psymtab but not in symtab.\n"
@@ -22097,79 +23357,79 @@ msgid ""
 "(if a template, try specifying an instantiation: %s<type>)."
 msgstr ""
 
-#: symtab.c:2844
+#: symtab.c:3016
 msgid "mismatched quoting on brackets, try 'operator\\[\\]'"
 msgstr ""
 
-#: symtab.c:2852
+#: symtab.c:3024
 msgid "nothing is allowed between '[' and ']'"
 msgstr ""
 
-#: symtab.c:2908
+#: symtab.c:3080
 msgid "`operator ()' must be specified without whitespace in `()'"
 msgstr ""
 
-#: symtab.c:2914
+#: symtab.c:3086
 msgid "`operator ?:' must be specified without whitespace in `?:'"
 msgstr ""
 
-#: symtab.c:2920
+#: symtab.c:3092
 msgid "`operator []' must be specified without whitespace in `[]'"
 msgstr ""
 
-#: symtab.c:2925
+#: symtab.c:3097
 #, possible-c-format
 msgid "`operator %s' not supported"
 msgstr ""
 
-#: symtab.c:4805 symtab.c:4808 symtab.c:4835
+#: symtab.c:4984 symtab.c:4987 symtab.c:5014
 msgid "All global and static variable names, or those matching REGEXP."
 msgstr ""
 
-#: symtab.c:4812
+#: symtab.c:4991
 msgid "All function names, or those matching REGEXP."
 msgstr ""
 
-#: symtab.c:4823
+#: symtab.c:5002
 msgid "All type names, or those matching REGEXP."
 msgstr ""
 
-#: symtab.c:4826
+#: symtab.c:5005
 msgid "Source files in the program."
 msgstr ""
 
-#: symtab.c:4829
+#: symtab.c:5008
 msgid "Set a breakpoint for all functions matching REGEXP."
 msgstr ""
 
-#: symtab.c:4834
+#: symtab.c:5013
 msgid "Source files in the program"
 msgstr ""
 
-#: symtab.c:4841
+#: symtab.c:5020
 msgid ""
 "Set the debugger behavior when more than one symbol are possible matches\n"
 "in an expression."
 msgstr ""
 
-#: symtab.c:4843
+#: symtab.c:5022
 msgid "Show how the debugger handles ambiguities in expressions."
 msgstr ""
 
-#: symtab.c:4844
+#: symtab.c:5023
 msgid ""
 "Valid values are \"ask\", \"all\", \"cancel\", and the default is \"all\"."
 msgstr ""
 
-#: symtab.c:4849
+#: symtab.c:5028
 msgid "Set whether a source file may have multiple base names."
 msgstr ""
 
-#: symtab.c:4850
+#: symtab.c:5029
 msgid "Show whether a source file may have multiple base names."
 msgstr ""
 
-#: symtab.c:4851
+#: symtab.c:5030
 msgid ""
 "(A \"base name\" is the name of a file with the directory part removed.\n"
 "Example: The base name of \"/home/user/hello.c\" is \"hello.c\".)\n"
@@ -22180,21 +23440,34 @@ msgid ""
 "one base name, and gdb will do file name comparisons more efficiently."
 msgstr ""
 
-#: symtab.h:747
+#: symtab.c:5042
+msgid "Set debugging of symbol table creation."
+msgstr ""
+
+#: symtab.c:5043
+msgid "Show debugging of symbol table creation."
+msgstr ""
+
+#: symtab.c:5043
+msgid ""
+"When enabled, debugging messages are printed when building symbol tables."
+msgstr ""
+
+#: symtab.h:741
 msgid "Section index is uninitialized"
 msgstr ""
 
-#: target.c:212
+#: target.c:213
 #, possible-c-format
 msgid "Target debugging is %s.\n"
 msgstr ""
 
-#: target.c:243
+#: target.c:244
 #, possible-c-format
 msgid "Cache use for stack accesses is %s.\n"
 msgstr ""
 
-#: target.c:426
+#: target.c:427
 msgid ""
 "Connect to a target machine or process.\n"
 "The first argument is the type or protocol of the target machine.\n"
@@ -22203,42 +23476,42 @@ msgid ""
 "`help target ' followed by the protocol name."
 msgstr ""
 
-#: target.c:488
+#: target.c:489
 msgid "could not find a target to create inferior"
 msgstr ""
 
-#: target.c:517
+#: target.c:518
 #, possible-c-format
 msgid "You can't do that when your target is `%s'"
 msgstr ""
 
-#: target.c:530
+#: target.c:531
 msgid "No saved terminal information.\n"
 msgstr ""
 
-#: target.c:1002
+#: target.c:1020
 msgid "Attempt to unpush the dummy target"
 msgstr ""
 
-#: target.c:1129
+#: target.c:1146
 msgid "TLS load module not found"
 msgstr ""
 
-#: target.c:1143
+#: target.c:1160
 msgid "Cannot find thread-local variables in this thread library."
 msgstr ""
 
-#: target.c:1148
+#: target.c:1165
 #, possible-c-format
 msgid "Cannot find shared library `%s' in dynamic linker's load module list"
 msgstr ""
 
-#: target.c:1151
+#: target.c:1168
 #, possible-c-format
 msgid "Cannot find executable file `%s' in dynamic linker's load module list"
 msgstr ""
 
-#: target.c:1156
+#: target.c:1173
 #, possible-c-format
 msgid ""
 "The inferior has not yet allocated storage for thread-local variables in\n"
@@ -22246,7 +23519,7 @@ msgid ""
 "for %s"
 msgstr ""
 
-#: target.c:1162
+#: target.c:1179
 #, possible-c-format
 msgid ""
 "The inferior has not yet allocated storage for thread-local variables in\n"
@@ -22254,90 +23527,90 @@ msgid ""
 "for %s"
 msgstr ""
 
-#: target.c:1170
+#: target.c:1187
 #, possible-c-format
 msgid ""
 "Cannot find thread-local storage for %s, shared library %s:\n"
 "%s"
 msgstr ""
 
-#: target.c:1175
+#: target.c:1192
 #, possible-c-format
 msgid ""
 "Cannot find thread-local storage for %s, executable file %s:\n"
 "%s"
 msgstr ""
 
-#: target.c:1189
+#: target.c:1206
 msgid "Cannot find thread-local variables on this target"
 msgstr ""
 
-#: target.c:1515
+#: target.c:1532
 msgid "Writing to flash memory forbidden in this context"
 msgstr ""
 
-#: target.c:1667
+#: target.c:1684
 #, possible-c-format
 msgid "Writing to memory is not allowed (addr %s, len %s)"
 msgstr ""
 
-#: target.c:1850
+#: target.c:1867
 msgid "Overlapping regions in memory map: ignoring"
 msgstr ""
 
-#: target.c:1900
+#: target.c:1917
 #, possible-c-format
 msgid "Mode for reading from readonly sections is %s.\n"
 msgstr ""
 
-#: target.c:2360
+#: target.c:2381
 #, possible-c-format
 msgid "target object %d, annex %s, contained unexpected null characters"
 msgstr ""
 
-#: target.c:2399
+#: target.c:2422
 msgid "May not insert breakpoints"
 msgstr ""
 
-#: target.c:2416
+#: target.c:2439
 msgid "May not remove breakpoints"
 msgstr ""
 
-#: target.c:2430
+#: target.c:2453
 #, possible-c-format
 msgid "Symbols from \"%s\".\n"
 msgstr ""
 
-#: target.c:2440
+#: target.c:2463
 msgid "\tWhile running this, GDB does not access memory from...\n"
 msgstr ""
 
-#: target.c:2525
+#: target.c:2550
 msgid "Program not killed."
 msgstr ""
 
-#: target.c:2567
+#: target.c:2592
 msgid "could not find a target to detach"
 msgstr ""
 
-#: target.c:2733
+#: target.c:2788
 msgid "could not find a target to follow fork"
 msgstr ""
 
-#: target.c:2759
+#: target.c:2814
 msgid "could not find a target to follow mourn inferior"
 msgstr ""
 
-#: target.c:2810
+#: target.c:2865
 msgid "Unable to allocate memory to perform the search."
 msgstr ""
 
-#: target.c:2818 target.c:2872
+#: target.c:2873 target.c:2927
 #, possible-c-format
 msgid "Unable to access target memory at %s, halting search."
 msgstr ""
 
-#: target.c:2961
+#: target.c:3016
 #, possible-c-format
 msgid ""
 "The \"%s\" target does not support \"run\".  Try \"help target\" or "
@@ -22347,194 +23620,199 @@ msgstr ""
 #. This function is only called if the target is running.  In that
 #. case there should have been a process_stratum target and it
 #. should either know how to create inferiors, or not...
-#: target.c:2969
+#: target.c:3024
 msgid "No targets found"
 msgstr ""
 
-#: target.c:3001
+#: target.c:3056
 #, possible-c-format
 msgid "Don't know how to %s.  Try \"help target\"."
 msgstr ""
 
-#: target.c:3156
+#: target.c:3243
 #, possible-c-format
 msgid "Can't determine the current address space of thread %s\n"
 msgstr ""
 
-#: target.c:3307 target.c:3315
+#: target.c:3538
+#, possible-c-format
+msgid "target file %s contained unexpected null characters"
+msgstr ""
+
+#: target.c:3678 target.c:3686
 msgid "Command not implemented for this target."
 msgstr ""
 
-#: target.c:3409
+#: target.c:3780
 msgid "could not find a target to attach"
 msgstr ""
 
-#: target.c:3458
+#: target.c:3829
 msgid "May not interrupt or stop the target, ignoring attempt"
 msgstr ""
 
-#: target.c:3577
+#: target.c:3948
 #, possible-c-format
 msgid "Writing to registers is not allowed (regno %d)"
 msgstr ""
 
-#: target.c:4240
+#: target.c:4611
 msgid "\"monitor\" command not supported by this target."
 msgstr ""
 
-#: target.c:4251
+#: target.c:4622
 msgid "The current target stack is:\n"
 msgstr ""
 
-#: target.c:4285
+#: target.c:4656
 #, possible-c-format
 msgid "Controlling the inferior in asynchronous mode is %s.\n"
 msgstr ""
 
-#: target.c:4354
+#: target.c:4725
 msgid "Set target debugging."
 msgstr ""
 
-#: target.c:4355
+#: target.c:4726
 msgid "Show target debugging."
 msgstr ""
 
-#: target.c:4356
+#: target.c:4727
 msgid ""
 "When non-zero, target debugging is enabled.  Higher numbers are more\n"
 "verbose.  Changes do not take effect until the next \"run\" or \"target\"\n"
 "command."
 msgstr ""
 
-#: target.c:4365
+#: target.c:4736
 msgid "Set mode for reading from readonly sections."
 msgstr ""
 
-#: target.c:4366
+#: target.c:4737
 msgid "Show mode for reading from readonly sections."
 msgstr ""
 
-#: target.c:4367
+#: target.c:4738
 msgid ""
 "When this mode is on, memory reads from readonly sections (such as .text)\n"
 "will be read from the object file instead of from the target.  This will\n"
 "result in significant performance improvement for remote targets."
 msgstr ""
 
-#: target.c:4376
+#: target.c:4747
 msgid "Send a command to the remote monitor (remote targets only)."
 msgstr ""
 
-#: target.c:4379
+#: target.c:4750
 msgid "Print the name of each layer of the internal target stack."
 msgstr ""
 
-#: target.c:4383
+#: target.c:4754
 msgid "Set whether gdb controls the inferior in asynchronous mode."
 msgstr ""
 
-#: target.c:4384
+#: target.c:4755
 msgid "Show whether gdb controls the inferior in asynchronous mode."
 msgstr ""
 
-#: target.c:4385
+#: target.c:4756
 msgid "Tells gdb whether to control the inferior in asynchronous mode."
 msgstr ""
 
-#: target.c:4393
+#: target.c:4764
 msgid "Set cache use for stack access."
 msgstr ""
 
-#: target.c:4394
+#: target.c:4765
 msgid "Show cache use for stack access."
 msgstr ""
 
-#: target.c:4395
+#: target.c:4766
 msgid ""
 "When on, use the data cache for all stack access, regardless of any\n"
 "configured memory regions.  This improves remote performance significantly.\n"
 "By default, caching for stack access is on."
 msgstr ""
 
-#: target.c:4404
+#: target.c:4775
 msgid "Set permission to write into registers."
 msgstr ""
 
-#: target.c:4405
+#: target.c:4776
 msgid "Show permission to write into registers."
 msgstr ""
 
-#: target.c:4406
+#: target.c:4777
 msgid ""
 "When this permission is on, GDB may write into the target's registers.\n"
 "Otherwise, any sort of write attempt will result in an error."
 msgstr ""
 
-#: target.c:4413
+#: target.c:4784
 msgid "Set permission to write into target memory."
 msgstr ""
 
-#: target.c:4414
+#: target.c:4785
 msgid "Show permission to write into target memory."
 msgstr ""
 
-#: target.c:4415
+#: target.c:4786
 msgid ""
 "When this permission is on, GDB may write into the target's memory.\n"
 "Otherwise, any sort of write attempt will result in an error."
 msgstr ""
 
-#: target.c:4422
+#: target.c:4793
 msgid "Set permission to insert breakpoints in the target."
 msgstr ""
 
-#: target.c:4423
+#: target.c:4794
 msgid "Show permission to insert breakpoints in the target."
 msgstr ""
 
-#: target.c:4424
+#: target.c:4795
 msgid ""
 "When this permission is on, GDB may insert breakpoints in the program.\n"
 "Otherwise, any sort of insertion attempt will result in an error."
 msgstr ""
 
-#: target.c:4431
+#: target.c:4802
 msgid "Set permission to insert tracepoints in the target."
 msgstr ""
 
-#: target.c:4432
+#: target.c:4803
 msgid "Show permission to insert tracepoints in the target."
 msgstr ""
 
-#: target.c:4433
+#: target.c:4804
 msgid ""
 "When this permission is on, GDB may insert tracepoints in the program.\n"
 "Otherwise, any sort of insertion attempt will result in an error."
 msgstr ""
 
-#: target.c:4440
+#: target.c:4811
 msgid "Set permission to insert fast tracepoints in the target."
 msgstr ""
 
-#: target.c:4441
+#: target.c:4812
 msgid "Show permission to insert fast tracepoints in the target."
 msgstr ""
 
-#: target.c:4442
+#: target.c:4813
 msgid ""
 "When this permission is on, GDB may insert fast tracepoints.\n"
 "Otherwise, any sort of insertion attempt will result in an error."
 msgstr ""
 
-#: target.c:4449
+#: target.c:4820
 msgid "Set permission to interrupt or signal the target."
 msgstr ""
 
-#: target.c:4450
+#: target.c:4821
 msgid "Show permission to interrupt or signal the target."
 msgstr ""
 
-#: target.c:4451
+#: target.c:4822
 msgid ""
 "When this permission is on, GDB may interrupt/stop the target's execution.\n"
 "Otherwise, any attempt to interrupt or stop will be ignored."
@@ -22576,54 +23854,54 @@ msgstr ""
 msgid "The target description will be read from the target.\n"
 msgstr ""
 
-#: target-descriptions.c:1560
+#: target-descriptions.c:1561
 msgid "There is no target description to print."
 msgstr ""
 
-#: target-descriptions.c:1563
+#: target-descriptions.c:1564
 msgid "The current target description did not come from an XML file."
 msgstr ""
 
-#: target-descriptions.c:1679
+#: target-descriptions.c:1712
 #, possible-c-format
 msgid "C output is not supported type \"%s\"."
 msgstr ""
 
-#: target-descriptions.c:1712
+#: target-descriptions.c:1745
 msgid "Set target description specific variables."
 msgstr ""
 
 #. allow-unknown
-#: target-descriptions.c:1716
+#: target-descriptions.c:1749
 msgid "Show target description specific variables."
 msgstr ""
 
 #. allow-unknown
-#: target-descriptions.c:1720
+#: target-descriptions.c:1753
 msgid "Unset target description specific variables."
 msgstr ""
 
-#: target-descriptions.c:1727
+#: target-descriptions.c:1760
 msgid "Set the file to read for an XML target description"
 msgstr ""
 
-#: target-descriptions.c:1728
+#: target-descriptions.c:1761
 msgid "Show the file to read for an XML target description"
 msgstr ""
 
-#: target-descriptions.c:1729
+#: target-descriptions.c:1762
 msgid ""
 "When set, GDB will read the target description from a local\n"
 "file instead of querying the remote target."
 msgstr ""
 
-#: target-descriptions.c:1736
+#: target-descriptions.c:1769
 msgid ""
 "Unset the file to read for an XML target description.  When unset,\n"
 "GDB will read the description from the target."
 msgstr ""
 
-#: target-descriptions.c:1741
+#: target-descriptions.c:1774
 msgid "Print the current target description as a C source file."
 msgstr ""
 
@@ -22654,81 +23932,81 @@ msgstr ""
 msgid "Couldn't restore frame #%d in current thread, at reparsed frame #0\n"
 msgstr ""
 
-#: thread.c:1179 thread.c:1218
+#: thread.c:1187 thread.c:1226
 msgid "Please specify a command following the thread ID list"
 msgstr ""
 
-#: thread.c:1194 thread.c:1246
+#: thread.c:1202 thread.c:1254
 #, possible-c-format
 msgid ""
 "\n"
 "Thread %d (%s):\n"
 msgstr ""
 
-#: thread.c:1213
+#: thread.c:1221
 msgid "Please specify a thread ID list"
 msgstr ""
 
-#: thread.c:1241
+#: thread.c:1249
 #, possible-c-format
 msgid "Thread %d has terminated."
 msgstr ""
 
-#: thread.c:1267 thread.c:1296
+#: thread.c:1275 thread.c:1304
 msgid "No thread selected"
 msgstr ""
 
-#: thread.c:1272
+#: thread.c:1280
 #, possible-c-format
 msgid "[Current thread is %d (%s) (exited)]\n"
 msgstr ""
 
-#: thread.c:1276
+#: thread.c:1284
 #, possible-c-format
 msgid "[Current thread is %d (%s)]\n"
 msgstr ""
 
-#: thread.c:1327
+#: thread.c:1335
 #, possible-c-format
 msgid "Thread %d has name '%s'\n"
 msgstr ""
 
-#: thread.c:1335
+#: thread.c:1343
 #, possible-c-format
 msgid "Thread %d has target name '%s'\n"
 msgstr ""
 
-#: thread.c:1343
+#: thread.c:1351
 #, possible-c-format
 msgid "Thread %d has target id '%s'\n"
 msgstr ""
 
-#: thread.c:1351
+#: thread.c:1359
 #, possible-c-format
 msgid "Thread %d has extra info '%s'\n"
 msgstr ""
 
-#: thread.c:1357
+#: thread.c:1365
 #, possible-c-format
 msgid "No threads match '%s'\n"
 msgstr ""
 
-#: thread.c:1367
+#: thread.c:1375
 #, possible-c-format
 msgid "Printing of thread events is %s.\n"
 msgstr ""
 
-#: thread.c:1382 windows-tdep.c:373
+#: thread.c:1390 windows-tdep.c:374
 #, possible-c-format
 msgid "Thread ID %d not known."
 msgstr ""
 
-#: thread.c:1385 windows-tdep.c:376
+#: thread.c:1393 windows-tdep.c:377
 #, possible-c-format
 msgid "Thread ID %d has terminated."
 msgstr ""
 
-#: thread.c:1451
+#: thread.c:1469
 msgid ""
 "Display currently known threads.\n"
 "Usage: info threads [ID]...\n"
@@ -22736,152 +24014,152 @@ msgid ""
 "If no arguments, all threads are displayed."
 msgstr ""
 
-#: thread.c:1456
+#: thread.c:1474
 msgid ""
 "Use this command to switch between threads.\n"
 "The new thread ID must be currently known."
 msgstr ""
 
-#: thread.c:1462
+#: thread.c:1480
 msgid "Apply a command to a list of threads."
 msgstr ""
 
-#: thread.c:1466
+#: thread.c:1484
 msgid "Apply a command to all threads."
 msgstr ""
 
-#: thread.c:1469
+#: thread.c:1487
 msgid ""
 "Set the current thread's name.\n"
 "Usage: thread name [NAME]\n"
 "If NAME is not given, then any existing name is removed."
 msgstr ""
 
-#: thread.c:1473
+#: thread.c:1491
 msgid ""
 "Find threads that match a regular expression.\n"
 "Usage: thread find REGEXP\n"
 "Will display thread ids whose name, target ID, or extra info matches REGEXP."
 msgstr ""
 
-#: thread.c:1483
+#: thread.c:1501
 msgid "Set printing of thread events (such as thread start and exit)."
 msgstr ""
 
-#: thread.c:1484
+#: thread.c:1502
 msgid "Show printing of thread events (such as thread start and exit)."
 msgstr ""
 
-#: tic6x-tdep.c:894
+#: tic6x-tdep.c:904
 #, possible-c-format
 msgid "unexpected length %d of type"
 msgstr ""
 
-#: tic6x-tdep.c:1152
+#: tic6x-tdep.c:1129
 #, possible-c-format
 msgid "unexpected type %d of arg %d"
 msgstr ""
 
-#: tic6x-tdep.c:1157
+#: tic6x-tdep.c:1134
 #, possible-c-format
 msgid "unexpected length %d of arg %d"
 msgstr ""
 
-#: top.c:108
+#: top.c:111
 #, possible-c-format
 msgid "Whether to confirm potentially dangerous operations is %s.\n"
 msgstr ""
 
-#: top.c:437
+#: top.c:480
 msgid "That is not a command, just a help topic."
 msgstr ""
 
-#: top.c:693
+#: top.c:707
 #, possible-c-format
 msgid "Saving of the history record on exit is %s.\n"
 msgstr ""
 
-#: top.c:702
+#: top.c:716
 #, possible-c-format
 msgid "The size of the command history is %s.\n"
 msgstr ""
 
-#: top.c:711
+#: top.c:725
 #, possible-c-format
 msgid "The filename in which to record the command history is \"%s\".\n"
 msgstr ""
 
-#: top.c:1139
+#: top.c:1153
 msgid ""
 "\n"
 "For bug reporting instructions, please see:\n"
 msgstr ""
 
-#: top.c:1219
+#: top.c:1233
 #, possible-c-format
 msgid "\tInferior %d [%s] will be detached.\n"
 msgstr ""
 
-#: top.c:1223
+#: top.c:1237
 #, possible-c-format
 msgid "\tInferior %d [%s] will be killed.\n"
 msgstr ""
 
-#: top.c:1252
+#: top.c:1266
 msgid ""
 "A debugging session is active.\n"
 "Do you still want to close the debugger?"
 msgstr ""
 
-#: top.c:1256
+#: top.c:1270
 msgid ""
 "A debugging session is active.\n"
 "\n"
 msgstr ""
 
-#: top.c:1258
+#: top.c:1272
 msgid ""
 "\n"
 "Quit anyway? "
 msgstr ""
 
-#: top.c:1438
+#: top.c:1452
 msgid "History size must be non-negative"
 msgstr ""
 
-#: top.c:1445
+#: top.c:1459
 msgid "\"set history\" must be followed by the name of a history subcommand.\n"
 msgstr ""
 
-#: top.c:1522
+#: top.c:1536
 #, possible-c-format
 msgid "Gdb's prompt is \"%s\".\n"
 msgstr ""
 
-#: top.c:1529
+#: top.c:1543
 #, possible-c-format
 msgid "Editing of command lines as they are typed is %s.\n"
 msgstr ""
 
-#: top.c:1538
+#: top.c:1552
 #, possible-c-format
 msgid "Annotation_level is %s.\n"
 msgstr ""
 
-#: top.c:1545
+#: top.c:1559
 #, possible-c-format
 msgid "Notification of completion for asynchronous execution commands is %s.\n"
 msgstr ""
 
-#: top.c:1579
+#: top.c:1602
 msgid "Set gdb's prompt"
 msgstr ""
 
-#: top.c:1580
+#: top.c:1603
 msgid "Show gdb's prompt"
 msgstr ""
 
-#: top.c:1585
+#: top.c:1608
 msgid ""
 "Don't repeat this command.\n"
 "Primarily used inside of user-defined commands that should not be repeated "
@@ -22889,667 +24167,683 @@ msgid ""
 "hitting return."
 msgstr ""
 
-#: top.c:1591
+#: top.c:1614
 msgid "Set editing of command lines as they are typed."
 msgstr ""
 
-#: top.c:1592
+#: top.c:1615
 msgid "Show editing of command lines as they are typed."
 msgstr ""
 
-#: top.c:1593
+#: top.c:1616
 msgid ""
 "Use \"on\" to enable the editing, and \"off\" to disable it.\n"
 "Without an argument, command line editing is enabled.  To edit, use\n"
 "EMACS-like or VI-like commands like control-P or ESC."
 msgstr ""
 
-#: top.c:1601
+#: top.c:1624
 msgid "Set saving of the history record on exit."
 msgstr ""
 
-#: top.c:1602
+#: top.c:1625
 msgid "Show saving of the history record on exit."
 msgstr ""
 
-#: top.c:1603
+#: top.c:1626
 msgid ""
 "Use \"on\" to enable the saving, and \"off\" to disable it.\n"
 "Without an argument, saving is enabled."
 msgstr ""
 
-#: top.c:1610
+#: top.c:1633
 msgid "Set the size of the command history,"
 msgstr ""
 
-#: top.c:1611
+#: top.c:1634
 msgid "Show the size of the command history,"
 msgstr ""
 
-#: top.c:1612
+#: top.c:1635
 msgid "ie. the number of previous commands to keep a record of."
 msgstr ""
 
-#: top.c:1618
+#: top.c:1641
 msgid "Set the filename in which to record the command history"
 msgstr ""
 
-#: top.c:1619
+#: top.c:1642
 msgid "Show the filename in which to record the command history"
 msgstr ""
 
-#: top.c:1620
+#: top.c:1643
 msgid "(the list of previous commands of which a record is kept)."
 msgstr ""
 
-#: top.c:1626
+#: top.c:1649
 msgid "Set whether to confirm potentially dangerous operations."
 msgstr ""
 
-#: top.c:1627
+#: top.c:1650
 msgid "Show whether to confirm potentially dangerous operations."
 msgstr ""
 
-#: top.c:1633
+#: top.c:1656
 msgid "Set annotation_level."
 msgstr ""
 
-#: top.c:1634
+#: top.c:1657
 msgid "Show annotation_level."
 msgstr ""
 
-#: top.c:1635
+#: top.c:1658
 msgid ""
 "0 == normal;     1 == fullname (for use when running under emacs)\n"
 "2 == output annotated suitably for use by programs that control GDB."
 msgstr ""
 
-#: top.c:1643
+#: top.c:1666
 msgid "Set notification of completion for asynchronous execution commands."
 msgstr ""
 
-#: top.c:1644
+#: top.c:1667
 msgid "Show notification of completion for asynchronous execution commands."
 msgstr ""
 
-#: top.c:1645
+#: top.c:1668
 msgid "Use \"on\" to enable the notification, and \"off\" to disable it."
 msgstr ""
 
-#: top.c:1652
+#: top.c:1675
 msgid "Set GDB's data directory."
 msgstr ""
 
-#: top.c:1653
+#: top.c:1676
 msgid "Show GDB's data directory."
 msgstr ""
 
-#: top.c:1654
+#: top.c:1677
 msgid "When set, GDB uses the specified path to search for data files."
 msgstr ""
 
-#: tracepoint.c:364
+#: tracepoint.c:365
 #, possible-c-format
 msgid "No trace variable named \"$%s\", not deleting"
 msgstr ""
 
-#: tracepoint.c:380
+#: tracepoint.c:381
 msgid "trace state variable name"
 msgstr ""
 
-#: tracepoint.c:387
+#: tracepoint.c:388
 msgid "No expression?"
 msgstr ""
 
-#: tracepoint.c:401
+#: tracepoint.c:402
 msgid "Syntax must be $NAME [ = EXPR ]"
 msgstr ""
 
-#: tracepoint.c:404
+#: tracepoint.c:405
 msgid "No name given"
 msgstr ""
 
-#: tracepoint.c:407
+#: tracepoint.c:408
 msgid "Must supply a non-empty variable name"
 msgstr ""
 
-#: tracepoint.c:414
+#: tracepoint.c:415
 #, possible-c-format
 msgid "Trace state variable $%s now has initial value %s.\n"
 msgstr ""
 
-#: tracepoint.c:425
+#: tracepoint.c:426
 #, possible-c-format
 msgid "Trace state variable $%s created, with initial value %s.\n"
 msgstr ""
 
-#: tracepoint.c:441
+#: tracepoint.c:442
 msgid "Delete all trace state variables? "
 msgstr ""
 
-#: tracepoint.c:455
+#: tracepoint.c:456
 #, possible-c-format
 msgid "Name \"%s\" not prefixed with '$', ignoring"
 msgstr ""
 
-#: tracepoint.c:474
+#: tracepoint.c:475
 msgid "No trace state variables.\n"
 msgstr ""
 
-#: tracepoint.c:566
+#: tracepoint.c:567
 msgid "This command cannot be used at the top level."
 msgstr ""
 
-#: tracepoint.c:572 tracepoint.c:578 tracepoint.c:584
+#: tracepoint.c:573 tracepoint.c:579 tracepoint.c:585
 msgid "This command can only be used in a tracepoint actions list."
 msgstr ""
 
-#: tracepoint.c:617
+#: tracepoint.c:618
 msgid "Target does not support \"/s\" option for string tracing."
 msgstr ""
 
-#: tracepoint.c:620
+#: tracepoint.c:621
 #, possible-c-format
 msgid "Undefined collection format \"%c\"."
 msgstr ""
 
-#: tracepoint.c:659
+#: tracepoint.c:660
 msgid "expression is malformed"
 msgstr ""
 
-#: tracepoint.c:665
+#: tracepoint.c:666
 msgid "expression has min height < 0"
 msgstr ""
 
-#: tracepoint.c:674 tracepoint.c:764 tracepoint.c:799
+#: tracepoint.c:675 tracepoint.c:766 tracepoint.c:802
 msgid "Expression is too complicated."
 msgstr ""
 
-#: tracepoint.c:705
+#: tracepoint.c:706
 #, possible-c-format
 msgid "`%s' is not a tracepoint action, or is ambiguous."
 msgstr ""
 
-#: tracepoint.c:743
+#: tracepoint.c:745
 #, possible-c-format
-msgid "constant `%s' (value %ld) will not be collected."
+msgid "constant `%s' (value %s) will not be collected."
 msgstr ""
 
-#: tracepoint.c:751
+#: tracepoint.c:753
 #, possible-c-format
 msgid "`%s' is optimized away and cannot be collected."
 msgstr ""
 
-#: tracepoint.c:819
+#: tracepoint.c:822
 #, possible-c-format
 msgid "while-stepping step count `%s' is malformed."
 msgstr ""
 
-#: tracepoint.c:826
+#: tracepoint.c:829
 #, possible-c-format
 msgid "`%s' is not a supported tracepoint action."
 msgstr ""
 
-#: tracepoint.c:925
+#: tracepoint.c:928
 #, possible-c-format
 msgid "Internal: register number %d too large for tracepoint"
 msgstr ""
 
-#: tracepoint.c:1168
+#: tracepoint.c:1171
 msgid "Can't collect locals; no symbol table info available.\n"
 msgstr ""
 
-#: tracepoint.c:1175
+#: tracepoint.c:1178
 msgid "No locals found in scope."
 msgstr ""
 
-#: tracepoint.c:1183
+#: tracepoint.c:1186
 msgid "Can't collect args; no symbol table info available."
 msgstr ""
 
-#: tracepoint.c:1189
+#: tracepoint.c:1192
 msgid "No args found in scope."
 msgstr ""
 
-#: tracepoint.c:1366 tracepoint.c:2763
+#: tracepoint.c:1369 tracepoint.c:2800
 #, possible-c-format
 msgid "Bad action list item: %s"
 msgstr ""
 
-#: tracepoint.c:1575
+#: tracepoint.c:1578
 #, possible-c-format
 msgid "Invalid tracepoint command '%s'"
 msgstr ""
 
-#: tracepoint.c:1692
+#: tracepoint.c:1696
 msgid "Pending tracepoints will not be resolved while GDB is disconnected\n"
 msgstr ""
 
-#: tracepoint.c:1713
+#: tracepoint.c:1717
 msgid "No tracepoints defined, not starting trace"
 msgstr ""
 
-#: tracepoint.c:1728
+#: tracepoint.c:1733
 #, possible-c-format
 msgid "May not insert %stracepoints, skipping tracepoint %d"
 msgstr ""
 
-#: tracepoint.c:1735
+#: tracepoint.c:1740
 msgid "No tracepoints enabled"
 msgstr ""
 
-#: tracepoint.c:1741
+#: tracepoint.c:1746
 msgid "No tracepoints enabled, not starting trace"
 msgstr ""
 
-#: tracepoint.c:1748
+#: tracepoint.c:1753
 msgid "No tracepoints that may be downloaded, not starting trace"
 msgstr ""
 
-#: tracepoint.c:1828
+#: tracepoint.c:1810
+msgid "Target does not support trace user/notes, info ignored"
+msgstr ""
+
+#: tracepoint.c:1837
 msgid "A trace is running already.  Start a new run? "
 msgstr ""
 
-#: tracepoint.c:1829
+#: tracepoint.c:1838
 msgid "New trace run not started."
 msgstr ""
 
-#: tracepoint.c:1844
+#: tracepoint.c:1853
 msgid "Trace is not running."
 msgstr ""
 
-#: tracepoint.c:1881
+#: tracepoint.c:1896 tracepoint.c:3218
+msgid "Target does not support trace notes, note ignored"
+msgstr ""
+
+#: tracepoint.c:1916
 msgid "Using a trace file.\n"
 msgstr ""
 
-#: tracepoint.c:1884
+#: tracepoint.c:1919
 msgid "Trace can not be run on this target.\n"
 msgstr ""
 
-#: tracepoint.c:1891
+#: tracepoint.c:1926
 msgid "Run/stop status is unknown.\n"
 msgstr ""
 
-#: tracepoint.c:1895
+#: tracepoint.c:1930
 msgid "Trace is running on the target.\n"
 msgstr ""
 
-#: tracepoint.c:1902
+#: tracepoint.c:1937
 msgid "No trace has been run on the target.\n"
 msgstr ""
 
-#: tracepoint.c:1906
+#: tracepoint.c:1941
 #, possible-c-format
 msgid "Trace stopped by a tstop command (%s).\n"
 msgstr ""
 
-#: tracepoint.c:1909
+#: tracepoint.c:1944
 msgid "Trace stopped by a tstop command.\n"
 msgstr ""
 
-#: tracepoint.c:1912
+#: tracepoint.c:1947
 msgid "Trace stopped because the buffer was full.\n"
 msgstr ""
 
-#: tracepoint.c:1915
+#: tracepoint.c:1950
 msgid "Trace stopped because of disconnection.\n"
 msgstr ""
 
-#: tracepoint.c:1918
+#: tracepoint.c:1953
 #, possible-c-format
 msgid "Trace stopped by tracepoint %d.\n"
 msgstr ""
 
-#: tracepoint.c:1923
+#: tracepoint.c:1958
 #, possible-c-format
 msgid "Trace stopped by an error (%s, tracepoint %d).\n"
 msgstr ""
 
-#: tracepoint.c:1927
+#: tracepoint.c:1962
 #, possible-c-format
 msgid "Trace stopped by an error (%s).\n"
 msgstr ""
 
-#: tracepoint.c:1931
+#: tracepoint.c:1966
 msgid "Trace stopped for an unknown reason.\n"
 msgstr ""
 
-#: tracepoint.c:1934
+#: tracepoint.c:1969
 #, possible-c-format
 msgid "Trace stopped for some other reason (%d).\n"
 msgstr ""
 
-#: tracepoint.c:1943
+#: tracepoint.c:1978
 #, possible-c-format
 msgid "Buffer contains %d trace frames (of %d created total).\n"
 msgstr ""
 
-#: tracepoint.c:1949
+#: tracepoint.c:1984
 #, possible-c-format
 msgid "Collected %d trace frames.\n"
 msgstr ""
 
-#: tracepoint.c:1957
+#: tracepoint.c:1992
 #, possible-c-format
 msgid "Trace buffer has %d bytes of %d bytes free"
 msgstr ""
 
-#: tracepoint.c:1960
+#: tracepoint.c:1995
 #, possible-c-format
 msgid " (%d%% full)"
 msgstr ""
 
-#: tracepoint.c:1964
+#: tracepoint.c:1999
 msgid ".\n"
 msgstr ""
 
-#: tracepoint.c:1967
+#: tracepoint.c:2002
 #, possible-c-format
 msgid "Trace buffer has %d bytes free.\n"
 msgstr ""
 
-#: tracepoint.c:1972
+#: tracepoint.c:2007
 msgid "Trace will continue if GDB disconnects.\n"
 msgstr ""
 
-#: tracepoint.c:1974
+#: tracepoint.c:2009
 msgid "Trace will stop if GDB disconnects.\n"
 msgstr ""
 
-#: tracepoint.c:1977
+#: tracepoint.c:2012
 msgid "Trace buffer is circular.\n"
 msgstr ""
 
-#: tracepoint.c:1980
+#: tracepoint.c:2015
 #, possible-c-format
 msgid "Trace user is %s.\n"
 msgstr ""
 
-#: tracepoint.c:1983
+#: tracepoint.c:2018
 #, possible-c-format
 msgid "Trace notes: %s.\n"
 msgstr ""
 
-#: tracepoint.c:1987
+#: tracepoint.c:2022
 #, possible-c-format
 msgid "Looking at trace frame %d, tracepoint %d.\n"
 msgstr ""
 
-#: tracepoint.c:1990
+#: tracepoint.c:2025
 msgid "Not looking at any trace frame.\n"
 msgstr ""
 
 #. Reporting a run time is more readable than two long numbers.
-#: tracepoint.c:2000
+#: tracepoint.c:2035
 #, possible-c-format
 msgid "Trace started at %ld.%06ld secs, stopped %ld.%06ld secs later.\n"
 msgstr ""
 
-#: tracepoint.c:2007
+#: tracepoint.c:2042
 #, possible-c-format
 msgid "Trace started at %ld.%06ld secs.\n"
 msgstr ""
 
-#: tracepoint.c:2012
+#: tracepoint.c:2047
 #, possible-c-format
 msgid "Trace stopped at %ld.%06ld secs.\n"
 msgstr ""
 
-#: tracepoint.c:2163
+#: tracepoint.c:2198
 msgid "Trace is running and will continue after detach; detach anyway? "
 msgstr ""
 
-#: tracepoint.c:2169
+#: tracepoint.c:2204
 msgid "Trace is running but will stop on detach; detach anyway? "
 msgstr ""
 
-#: tracepoint.c:2237
+#: tracepoint.c:2272
 msgid "Target failed to find requested trace frame."
 msgstr ""
 
-#: tracepoint.c:2275
+#: tracepoint.c:2310
 #, possible-c-format
 msgid "Found trace frame %d, tracepoint %d\n"
 msgstr ""
 
-#: tracepoint.c:2284
+#: tracepoint.c:2319
 msgid "No longer looking at any trace frame\n"
 msgstr ""
 
 #. This case may never occur, check.
-#: tracepoint.c:2286
+#: tracepoint.c:2321
 msgid "No trace frame found\n"
 msgstr ""
 
-#: tracepoint.c:2347
+#: tracepoint.c:2382
 msgid "not debugging trace buffer"
 msgstr ""
 
-#: tracepoint.c:2349
+#: tracepoint.c:2384
 msgid "already at start of trace buffer"
 msgstr ""
 
-#: tracepoint.c:2360
+#: tracepoint.c:2395
 #, possible-c-format
 msgid "invalid input (%d is less than zero)"
 msgstr ""
 
-#: tracepoint.c:2416
+#: tracepoint.c:2451
 msgid "No current tracepoint -- please supply an argument."
 msgstr ""
 
-#: tracepoint.c:2468
+#: tracepoint.c:2503
 msgid "No line number information available."
 msgstr ""
 
-#: tracepoint.c:2488
+#: tracepoint.c:2523
 msgid "Cannot find a good line."
 msgstr ""
 
 #. Is there any case in which we get here, and have an address
 #. which the user would want to see?  If we have debugging
 #. symbols and no line numbers?
-#: tracepoint.c:2495
+#: tracepoint.c:2530
 #, possible-c-format
 msgid "Line number %d is out of range for \"%s\"."
 msgstr ""
 
-#: tracepoint.c:2587
+#: tracepoint.c:2623
 msgid "requires an argument (function, line or *addr) to define a scope"
 msgstr ""
 
-#: tracepoint.c:2840
+#: tracepoint.c:2877
 msgid "No current trace frame."
 msgstr ""
 
-#: tracepoint.c:2847
+#: tracepoint.c:2884
 #, possible-c-format
 msgid "No known tracepoint matches 'current' tracepoint #%d."
 msgstr ""
 
-#: tracepoint.c:2903
+#: tracepoint.c:2940
 msgid "Buffer too small for source encoding"
 msgstr ""
 
-#: tracepoint.c:2908
+#: tracepoint.c:2945
 msgid "Source string too long for buffer"
 msgstr ""
 
-#: tracepoint.c:2943
+#: tracepoint.c:2980
 #, possible-c-format
 msgid "Target failed to save trace data to '%s'."
 msgstr ""
 
-#: tracepoint.c:2957
+#: tracepoint.c:2994
 #, possible-c-format
 msgid "Unable to open file '%s' for saving trace data (%s)"
 msgstr ""
 
-#: tracepoint.c:3090
+#: tracepoint.c:3127
 msgid "Failure to get requested trace buffer data"
 msgstr ""
 
-#: tracepoint.c:3117 tracepoint.c:3133
+#: tracepoint.c:3154 tracepoint.c:3170
 msgid "file in which to save trace data"
 msgstr ""
 
-#: tracepoint.c:3138
+#: tracepoint.c:3175
 #, possible-c-format
 msgid "Trace data saved to file '%s'.\n"
 msgstr ""
 
-#: tracepoint.c:3244
+#: tracepoint.c:3206
+msgid "Target does not support trace notes, user ignored"
+msgstr ""
+
+#: tracepoint.c:3230
+msgid "Target does not support trace notes, stop note ignored"
+msgstr ""
+
+#: tracepoint.c:3281
 msgid "could not change traceframe"
 msgstr ""
 
-#: tracepoint.c:3443
+#: tracepoint.c:3480
 #, possible-c-format
 msgid "Assuming tracepoint %d is same as target's tracepoint %d at %s.\n"
 msgstr ""
 
-#: tracepoint.c:3452
+#: tracepoint.c:3489
 #, possible-c-format
 msgid "Created tracepoint %d for target's tracepoint %d at %s.\n"
 msgstr ""
 
-#: tracepoint.c:3457
+#: tracepoint.c:3494
 #, possible-c-format
 msgid ""
 "Failed to create tracepoint for target's tracepoint %d at %s, skipping it.\n"
 msgstr ""
 
-#: tracepoint.c:3546
+#: tracepoint.c:3583
 #, possible-c-format
 msgid "Assuming trace state variable $%s is same as target's variable %d.\n"
 msgstr ""
 
-#: tracepoint.c:3554
+#: tracepoint.c:3591
 #, possible-c-format
 msgid "Created trace state variable $%s for target's variable %d.\n"
 msgstr ""
 
-#: tracepoint.c:3612
+#: tracepoint.c:3649
 msgid "Premature end of file while reading trace file"
 msgstr ""
 
-#: tracepoint.c:3633
+#: tracepoint.c:3670
 msgid "No trace file specified."
 msgstr ""
 
-#: tracepoint.c:3666
+#: tracepoint.c:3703
 msgid "File is not a valid trace file."
 msgstr ""
 
-#: tracepoint.c:3706
+#: tracepoint.c:3743
 msgid "Excessively long lines in trace file"
 msgstr ""
 
-#: tracepoint.c:3715
+#: tracepoint.c:3752
 msgid "No register block size recorded in trace file"
 msgstr ""
 
-#: tracepoint.c:3729
+#: tracepoint.c:3766
 msgid "No traceframes present in this file."
 msgstr ""
 
-#: tracepoint.c:3772
+#: tracepoint.c:3809
 #, possible-c-format
 msgid "Ignoring trace file definition \"%s\""
 msgstr ""
 
-#: tracepoint.c:3806
+#: tracepoint.c:3843
 #, possible-c-format
 msgid ""
 "Malformed trace status, at %s\n"
 "Status line: '%s'\n"
 msgstr ""
 
-#: tracepoint.c:4015
+#: tracepoint.c:4052
 #, possible-c-format
 msgid "Unrecognized char '%c' in tracepoint definition, skipping rest"
 msgstr ""
 
 #. Don't error out, the target might be sending us optional
 #. info that we don't care about.
-#: tracepoint.c:4069
+#: tracepoint.c:4106
 #, possible-c-format
 msgid "Unrecognized tracepoint piece '%c', ignoring"
 msgstr ""
 
-#: tracepoint.c:4199
+#: tracepoint.c:4236
 msgid "could not set tfile's traceframe"
 msgstr ""
 
-#: tracepoint.c:4274
+#: tracepoint.c:4311
 msgid "unknown tfind type"
 msgstr ""
 
-#: tracepoint.c:4362
+#: tracepoint.c:4399
 #, possible-c-format
 msgid "Unknown block type '%c' (0x%x) in trace frame"
 msgstr ""
 
-#: tracepoint.c:4450
+#: tracepoint.c:4485
 #, possible-c-format
 msgid "Tracepoint %d has multiple locations, cannot infer $pc"
 msgstr ""
 
-#: tracepoint.c:4458
+#: tracepoint.c:4493
 #, possible-c-format
 msgid "Tracepoint %d does while-stepping, cannot infer $pc"
 msgstr ""
 
-#: tracepoint.c:4482
+#: tracepoint.c:4517
 msgid "tfile_xfer_partial: trace file is read-only"
 msgstr ""
 
-#: tracepoint.c:4657
+#: tracepoint.c:4694
 #, possible-c-format
 msgid "Unhandled trace block type (%d) '%c ' while building trace frame info."
 msgstr ""
 
-#: tracepoint.c:4724
+#: tracepoint.c:4775
 #, possible-c-format
 msgid "bad marker definition: %s"
 msgstr ""
 
-#: tracepoint.c:4838
+#: tracepoint.c:4887
 msgid "Data: \""
 msgstr ""
 
-#: tracepoint.c:4852
+#: tracepoint.c:4901
 msgid "Probed by static tracepoints: "
 msgstr ""
 
-#: tracepoint.c:4962
+#: tracepoint.c:5017
 msgid ""
 "Can not parse XML trace frame info; XML support was disabled at compile time"
 msgstr ""
 
-#: tracepoint.c:5033
+#: tracepoint.c:5088
 msgid "trace frame info"
 msgstr ""
 
-#: tracepoint.c:5149
+#: tracepoint.c:5213
 msgid "List the variables local to a scope"
 msgstr ""
 
-#: tracepoint.c:5152
+#: tracepoint.c:5216
 msgid "Tracing of program execution without stopping the program."
 msgstr ""
 
-#: tracepoint.c:5156
+#: tracepoint.c:5220
 msgid "Print everything collected at the current tracepoint."
 msgstr ""
 
-#: tracepoint.c:5158
+#: tracepoint.c:5222
 msgid ""
 "Save the trace data to a file.\n"
 "Use the '-r' option to direct the target to save directly to the file,\n"
 "using its own filesystem."
 msgstr ""
 
-#: tracepoint.c:5163
+#: tracepoint.c:5227
 msgid ""
 "Define a trace state variable.\n"
 "Argument is a $-prefixed name, optionally followed\n"
@@ -23557,7 +24851,7 @@ msgid ""
 "at the start of tracing."
 msgstr ""
 
-#: tracepoint.c:5170
+#: tracepoint.c:5234
 msgid ""
 "Delete one or more trace state variables.\n"
 "Arguments are the names of the variables to delete.\n"
@@ -23565,33 +24859,33 @@ msgid ""
 msgstr ""
 
 #. FIXME add a trace variable completer.
-#: tracepoint.c:5176
+#: tracepoint.c:5240
 msgid "Status of trace state variables and their values.\n"
 msgstr ""
 
-#: tracepoint.c:5181
+#: tracepoint.c:5245
 msgid "List target static tracepoints markers.\n"
 msgstr ""
 
-#: tracepoint.c:5185
+#: tracepoint.c:5249
 msgid ""
 "Select a trace frame;\n"
 "No argument means forward by one frame; '-' means backward by one frame."
 msgstr ""
 
-#: tracepoint.c:5190
+#: tracepoint.c:5254
 msgid ""
 "Select a trace frame whose PC is outside the given range (exclusive).\n"
 "Usage: tfind outside addr1, addr2"
 msgstr ""
 
-#: tracepoint.c:5195
+#: tracepoint.c:5259
 msgid ""
 "Select a trace frame whose PC is in the given range (inclusive).\n"
 "Usage: tfind range addr1,addr2"
 msgstr ""
 
-#: tracepoint.c:5200
+#: tracepoint.c:5264
 msgid ""
 "Select a trace frame by source line.\n"
 "Argument can be a line number (with optional source file),\n"
@@ -23599,37 +24893,37 @@ msgid ""
 "Default argument is 'the next source line that was traced'."
 msgstr ""
 
-#: tracepoint.c:5207
+#: tracepoint.c:5271
 msgid ""
 "Select a trace frame by tracepoint number.\n"
 "Default is the tracepoint for the current trace frame."
 msgstr ""
 
-#: tracepoint.c:5212
+#: tracepoint.c:5276
 msgid ""
 "Select a trace frame by PC.\n"
 "Default is the current PC, or the PC of the current trace frame."
 msgstr ""
 
-#: tracepoint.c:5217
+#: tracepoint.c:5281
 msgid ""
 "Synonym for 'none'.\n"
 "De-select any trace frame and resume 'live' debugging."
 msgstr ""
 
-#: tracepoint.c:5223
+#: tracepoint.c:5287
 msgid "De-select any trace frame and resume 'live' debugging."
 msgstr ""
 
-#: tracepoint.c:5227
+#: tracepoint.c:5291
 msgid "Select the first trace frame in the trace buffer."
 msgstr ""
 
-#: tracepoint.c:5231
+#: tracepoint.c:5295
 msgid "Display the status of the current trace data collection."
 msgstr ""
 
-#: tracepoint.c:5233
+#: tracepoint.c:5297
 msgid ""
 "Stop trace data collection.\n"
 "Usage: tstop [ <notes> ... ]\n"
@@ -23637,7 +24931,7 @@ msgid ""
 "reported by tstatus (if the target supports trace notes)."
 msgstr ""
 
-#: tracepoint.c:5239
+#: tracepoint.c:5303
 msgid ""
 "Start trace data collection.\n"
 "Usage: tstart [ <notes> ... ]\n"
@@ -23645,7 +24939,7 @@ msgid ""
 "reported by tstatus (if the target supports trace notes)."
 msgstr ""
 
-#: tracepoint.c:5245
+#: tracepoint.c:5309
 msgid ""
 "Ends a list of commands or actions.\n"
 "Several GDB commands allow you to enter a list of commands or actions.\n"
@@ -23655,7 +24949,7 @@ msgid ""
 "Note: the \"end\" command cannot be used at the gdb prompt."
 msgstr ""
 
-#: tracepoint.c:5252
+#: tracepoint.c:5316
 msgid ""
 "Specify single-stepping behavior at a tracepoint.\n"
 "Argument is number of instructions to trace in single-step mode\n"
@@ -23666,7 +24960,7 @@ msgid ""
 "Note: this command can only be used in a tracepoint \"actions\" list."
 msgstr ""
 
-#: tracepoint.c:5263
+#: tracepoint.c:5327
 msgid ""
 "Specify one or more data items to be collected at a tracepoint.\n"
 "Accepts a comma-separated list of (one or more) expressions.  GDB will\n"
@@ -23679,7 +24973,7 @@ msgid ""
 "Note: this command can only be used in a tracepoint \"actions\" list."
 msgstr ""
 
-#: tracepoint.c:5274
+#: tracepoint.c:5338
 msgid ""
 "Specify one or more expressions to be evaluated at a tracepoint.\n"
 "Accepts a comma-separated list of (one or more) expressions.\n"
@@ -23687,7 +24981,7 @@ msgid ""
 "Note: this command can only be used in a tracepoint \"actions\" list."
 msgstr ""
 
-#: tracepoint.c:5280
+#: tracepoint.c:5344
 msgid ""
 "Specify the actions to be taken at a tracepoint.\n"
 "Tracepoint actions may include collecting of specified data,\n"
@@ -23695,65 +24989,65 @@ msgid ""
 "depending on target's capabilities."
 msgstr ""
 
-#: tracepoint.c:5288
+#: tracepoint.c:5352
 msgid "Set the list of expressions to collect by default"
 msgstr ""
 
-#: tracepoint.c:5289
+#: tracepoint.c:5353
 msgid "Show the list of expressions to collect by default"
 msgstr ""
 
-#: tracepoint.c:5295
+#: tracepoint.c:5359
 msgid "Set whether tracing continues after GDB disconnects."
 msgstr ""
 
-#: tracepoint.c:5296
+#: tracepoint.c:5360
 msgid "Show whether tracing continues after GDB disconnects."
 msgstr ""
 
-#: tracepoint.c:5297
+#: tracepoint.c:5361
 msgid ""
 "Use this to continue a tracing run even if GDB disconnects\n"
 "or detaches from the target.  You can reconnect later and look at\n"
 "trace data collected in the meantime."
 msgstr ""
 
-#: tracepoint.c:5307
+#: tracepoint.c:5371
 msgid "Set target's use of circular trace buffer."
 msgstr ""
 
-#: tracepoint.c:5308
+#: tracepoint.c:5372
 msgid "Show target's use of circular trace buffer."
 msgstr ""
 
-#: tracepoint.c:5309
+#: tracepoint.c:5373
 msgid ""
 "Use this to make the trace buffer into a circular buffer,\n"
 "which will discard traceframes (oldest first) instead of filling\n"
 "up and stopping the trace run."
 msgstr ""
 
-#: tracepoint.c:5319
+#: tracepoint.c:5383
 msgid "Set the user name to use for current and future trace runs"
 msgstr ""
 
-#: tracepoint.c:5320
+#: tracepoint.c:5384
 msgid "Show the user name to use for current and future trace runs"
 msgstr ""
 
-#: tracepoint.c:5326
+#: tracepoint.c:5390
 msgid "Set notes string to use for current and future trace runs"
 msgstr ""
 
-#: tracepoint.c:5327
+#: tracepoint.c:5391
 msgid "Show the notes string to use for current and future trace runs"
 msgstr ""
 
-#: tracepoint.c:5333
+#: tracepoint.c:5397
 msgid "Set notes string to use for future tstop commands"
 msgstr ""
 
-#: tracepoint.c:5334
+#: tracepoint.c:5398
 msgid "Show the notes string to use for future tstop commands"
 msgstr ""
 
@@ -23785,11 +25079,11 @@ msgstr ""
 msgid "tui_file_flush: bad magic number"
 msgstr ""
 
-#: tui/tui-hooks.c:80
+#: tui/tui-hooks.c:87
 msgid "(y or n) "
 msgstr ""
 
-#: tui/tui-hooks.c:113
+#: tui/tui-hooks.c:120
 msgid "Please answer y or n.\n"
 msgstr ""
 
@@ -23834,55 +25128,51 @@ msgid ""
 "%s"
 msgstr ""
 
-#: tui/tui-regs.c:624
+#: tui/tui-regs.c:611
 msgid "\"tui reg\" must be followed by the name of a tui reg command.\n"
 msgstr ""
 
-#: tui/tui-regs.c:640
+#: tui/tui-regs.c:627
 msgid "TUI commands to control the register window."
 msgstr ""
 
-#: tui/tui-regs.c:645
+#: tui/tui-regs.c:632
 msgid "Display only floating point registers."
 msgstr ""
 
-#: tui/tui-regs.c:648
+#: tui/tui-regs.c:635
 msgid "Display only general registers."
 msgstr ""
 
-#: tui/tui-regs.c:651
+#: tui/tui-regs.c:638
 msgid "Display only system registers."
 msgstr ""
 
-#: tui/tui-regs.c:654
+#: tui/tui-regs.c:641
 msgid "Display next register group."
 msgstr ""
 
-#: tui/tui-regs.c:660
+#: tui/tui-regs.c:647
 msgid "Display only floating point registers\n"
 msgstr ""
 
-#: tui/tui-regs.c:662
+#: tui/tui-regs.c:649
 msgid "Display only general registers\n"
 msgstr ""
 
-#: tui/tui-regs.c:664
+#: tui/tui-regs.c:651
 msgid "Display only special registers\n"
 msgstr ""
 
-#: tui/tui-regs.c:666
+#: tui/tui-regs.c:653
 msgid "Scroll the registers window forward\n"
 msgstr ""
 
-#: tui/tui-regs.c:668
+#: tui/tui-regs.c:655
 msgid "Scroll the register window backward\n"
 msgstr ""
 
-#: tui/tui-stack.c:360 valprint.c:306
-msgid "<unavailable>"
-msgstr ""
-
-#: tui/tui-stack.c:455
+#: tui/tui-stack.c:457
 msgid ""
 "Update the source window and locator to display the current execution "
 "point.\n"
@@ -24037,30 +25327,30 @@ msgid ""
 "bold-standout   use extra bright or bold with standout mode"
 msgstr ""
 
-#: tui/tui-win.c:929 tui/tui-win.c:1035 tui/tui-win.c:1597
+#: tui/tui-win.c:932 tui/tui-win.c:1038 tui/tui-win.c:1603
 msgid ""
 "Invalid window specified. \n"
 "The window name specified must be valid and visible.\n"
 msgstr ""
 
-#: tui/tui-win.c:940
+#: tui/tui-win.c:943
 #, possible-c-format
 msgid "Focus set to %s window.\n"
 msgstr ""
 
-#: tui/tui-win.c:945
+#: tui/tui-win.c:948
 #, possible-c-format
 msgid ""
 "Incorrect Number of Arguments.\n"
 "%s"
 msgstr ""
 
-#: tui/tui-win.c:1003
+#: tui/tui-win.c:1006
 msgid "Tab widths greater than 0 must be specified."
 msgstr ""
 
-#: tui/tui-win.c:1070 tui/tui-win.c:1076 tui/tui-win.c:1120 tui/tui-win.c:1124
-#: tui/tui-win.c:1128
+#: tui/tui-win.c:1073 tui/tui-win.c:1079 tui/tui-win.c:1123 tui/tui-win.c:1127
+#: tui/tui-win.c:1131
 #, possible-c-format
 msgid ""
 "Invalid window height specified.\n"
@@ -24071,11 +25361,15 @@ msgstr ""
 msgid "TUI mode not allowed"
 msgstr ""
 
-#: typeprint.c:265
+#: typeprint.c:65
+msgid "Language not supported."
+msgstr ""
+
+#: typeprint.c:256
 msgid "internal error: unhandled type in print_type_scalar"
 msgstr ""
 
-#: typeprint.c:314
+#: typeprint.c:305
 msgid ""
 "Print definition of type TYPE.\n"
 "Argument may be a type name defined by typedef, or \"struct STRUCT-TAG\"\n"
@@ -24084,7 +25378,7 @@ msgid ""
 "Contrary to \"whatis\", \"ptype\" always unrolls any typedefs."
 msgstr ""
 
-#: typeprint.c:322
+#: typeprint.c:313
 msgid ""
 "Print data type of expression EXP.\n"
 "Only one level of typedefs is unrolled.  See also \"ptype\"."
@@ -24188,55 +25482,55 @@ msgid ""
 "table_body."
 msgstr ""
 
-#: ui-out.c:1090
+#: ui-out.c:1004
 msgid ""
 "table_body missing; table fields must be specified after table_body and "
 "inside a list."
 msgstr ""
 
-#: ui-out.c:1107
+#: ui-out.c:1021
 msgid "ui-out internal error in handling headers."
 msgstr ""
 
-#: utils.c:148
+#: utils.c:142
 #, possible-c-format
 msgid "Printing of 8-bit characters in strings as \\nnn is %s.\n"
 msgstr ""
 
-#: utils.c:170
+#: utils.c:164
 #, possible-c-format
 msgid "State of pagination is %s.\n"
 msgstr ""
 
-#: utils.c:309
+#: utils.c:283
 msgid "Cannot restore redirection of the current output protocol"
 msgstr ""
 
-#: utils.c:628
+#: utils.c:475
 msgid "free_current_contents: NULL pointer"
 msgstr ""
 
-#: utils.c:705
+#: utils.c:540
 #, possible-c-format
 msgid "Startup time: %ld.%06ld (cpu), %ld.%06ld (wall)\n"
 msgstr ""
 
-#: utils.c:706
+#: utils.c:541
 #, possible-c-format
 msgid "Command execution time: %ld.%06ld (cpu), %ld.%06ld (wall)\n"
 msgstr ""
 
-#: utils.c:721
+#: utils.c:556
 #, possible-c-format
 msgid "Space used: %ld (%s%ld during startup)\n"
 msgstr ""
 
-#: utils.c:722
+#: utils.c:557
 #, possible-c-format
 msgid "Space used: %ld (%s%ld for this command)\n"
 msgstr ""
 
-#: utils.c:872
+#: utils.c:707
 #, possible-c-format
 msgid ""
 "%s\n"
@@ -24244,7 +25538,7 @@ msgid ""
 "time.\n"
 msgstr ""
 
-#: utils.c:980
+#: utils.c:815
 #, possible-c-format
 msgid ""
 "%s\n"
@@ -24254,70 +25548,70 @@ msgstr ""
 #. Default (yes/batch case) is to dump core.  This leaves a GDB
 #. `dropping' so that it is easier to see that something went
 #. wrong in GDB.
-#: utils.c:998
+#: utils.c:833
 #, possible-c-format
 msgid ""
 "%s\n"
 "Create a core file of GDB? "
 msgstr ""
 
-#: utils.c:1110
+#: utils.c:945
 #, possible-c-format
 msgid "Configure what GDB does when %s is detected."
 msgstr ""
 
-#: utils.c:1113
+#: utils.c:948
 #, possible-c-format
 msgid "Show what GDB does when %s is detected."
 msgstr ""
 
 #. allow-unknown
-#: utils.c:1130
+#: utils.c:965
 #, possible-c-format
 msgid "Set whether GDB should quit when an %s is detected"
 msgstr ""
 
-#: utils.c:1133
+#: utils.c:968
 #, possible-c-format
 msgid "Show whether GDB will quit when an %s is detected"
 msgstr ""
 
-#: utils.c:1150
+#: utils.c:985
 #, possible-c-format
 msgid "Set whether GDB should create a core file of GDB when %s is detected"
 msgstr ""
 
-#: utils.c:1153
+#: utils.c:988
 #, possible-c-format
 msgid "Show whether GDB will create a core file of GDB when %s is detected"
 msgstr ""
 
-#: utils.c:1247
+#: utils.c:1082
 #, possible-c-format
 msgid "virtual memory exhausted: can't allocate %ld bytes."
 msgstr ""
 
-#: utils.c:1252
+#: utils.c:1087
 msgid "virtual memory exhausted."
 msgstr ""
 
-#: utils.c:1398
+#: utils.c:1233
 #, possible-c-format
 msgid "(%s or %s) [answered %c; input not from terminal]\n"
 msgstr ""
 
-#: utils.c:1423
+#: utils.c:1258
 #, possible-c-format
 msgid "(%s or %s) "
 msgstr ""
 
 #. Invalid entries are not defaulted and require another selection.
-#: utils.c:1487
+#: utils.c:1322
 #, possible-c-format
 msgid "Please answer %s or %s.\n"
 msgstr ""
 
-#: utils.c:1664
+#: utils.c:1499
 #, possible-c-format
 msgid ""
 "The escape sequence `\\%c' is equivalent to plain `%c', which has no "
@@ -24325,93 +25619,93 @@ msgid ""
 "in the `%s' character set."
 msgstr ""
 
-#: utils.c:1769
+#: utils.c:1604
 #, possible-c-format
 msgid "Number of lines gdb thinks are in a page is %s.\n"
 msgstr ""
 
-#: utils.c:1780
+#: utils.c:1615
 #, possible-c-format
 msgid "Number of characters gdb thinks are in a line is %s.\n"
 msgstr ""
 
-#: utils.c:2813
+#: utils.c:2648
 #, possible-c-format
 msgid "Timestamping debugging messages is %s.\n"
 msgstr ""
 
-#: utils.c:2821
+#: utils.c:2656
 msgid "Set number of characters gdb thinks are in a line."
 msgstr ""
 
-#: utils.c:2822
+#: utils.c:2657
 msgid "Show number of characters gdb thinks are in a line."
 msgstr ""
 
-#: utils.c:2828
+#: utils.c:2663
 msgid "Set number of lines gdb thinks are in a page."
 msgstr ""
 
-#: utils.c:2829
+#: utils.c:2664
 msgid "Show number of lines gdb thinks are in a page."
 msgstr ""
 
-#: utils.c:2838
+#: utils.c:2673
 msgid "Set state of pagination."
 msgstr ""
 
-#: utils.c:2839
+#: utils.c:2674
 msgid "Show state of pagination."
 msgstr ""
 
-#: utils.c:2848
+#: utils.c:2683
 msgid "Enable pagination"
 msgstr ""
 
-#: utils.c:2850
+#: utils.c:2685
 msgid "Disable pagination"
 msgstr ""
 
-#: utils.c:2854
+#: utils.c:2689
 msgid "Set printing of 8-bit characters in strings as \\nnn."
 msgstr ""
 
-#: utils.c:2855
+#: utils.c:2690
 msgid "Show printing of 8-bit characters in strings as \\nnn."
 msgstr ""
 
-#: utils.c:2862
+#: utils.c:2697
 msgid "Set timestamping of debugging messages."
 msgstr ""
 
-#: utils.c:2863
+#: utils.c:2698
 msgid "Show timestamping of debugging messages."
 msgstr ""
 
-#: utils.c:2864
+#: utils.c:2699
 msgid ""
 "When set, debugging messages will be marked with seconds and microseconds."
 msgstr ""
 
-#: utils.c:3145
+#: utils.c:2980
 msgid "hex_string_custom: insufficient space to store result"
 msgstr ""
 
-#: utils.c:3240
+#: utils.c:3075
 #, possible-c-format
 msgid "invalid hex \"%s\""
 msgstr ""
 
-#: utils.c:3253
+#: utils.c:3088
 #, possible-c-format
 msgid "invalid decimal \"%s\""
 msgstr ""
 
-#: utils.c:3713
+#: utils.c:3567
 msgid "process-id to attach"
 msgstr ""
 
-#: utils.c:3719
+#: utils.c:3573
 #, possible-c-format
 msgid "Illegal process-id: %s."
 msgstr ""
@@ -24613,170 +25907,175 @@ msgstr ""
 msgid "No memory available to program: call to malloc failed"
 msgstr ""
 
-#: valops.c:411
+#: valops.c:415
 msgid "array element type size does not divide object size in cast"
 msgstr ""
 
-#: valops.c:526
+#: valops.c:530
 msgid "value truncated"
 msgstr ""
 
-#: valops.c:587
+#: valops.c:591
 msgid "Invalid cast."
 msgstr ""
 
-#: valops.c:638
+#: valops.c:642
 msgid "Invalid reinterpret_cast"
 msgstr ""
 
-#: valops.c:752
+#: valops.c:756
 msgid "Argument to dynamic_cast must be a pointer or reference type"
 msgstr ""
 
-#: valops.c:755
+#: valops.c:759
 msgid "Argument to dynamic_cast must be pointer to class or `void *'"
 msgstr ""
 
-#: valops.c:763
+#: valops.c:767
 msgid "Argument to dynamic_cast does not have pointer type"
 msgstr ""
 
-#: valops.c:768
+#: valops.c:772
 msgid "Argument to dynamic_cast does not have pointer to class type"
 msgstr ""
 
-#: valops.c:781
+#: valops.c:785
 msgid "Argument to dynamic_cast does not have class type"
 msgstr ""
 
-#: valops.c:794
+#: valops.c:798
 msgid "Ambiguous dynamic_cast"
 msgstr ""
 
-#: valops.c:799
+#: valops.c:803
 msgid "Couldn't determine value's most derived type for dynamic_cast"
 msgstr ""
 
-#: valops.c:851
+#: valops.c:855
 msgid "dynamic_cast failed"
 msgstr ""
 
-#: valops.c:909
+#: valops.c:913
 msgid "Not a numeric type."
 msgstr ""
 
-#: valops.c:998 valops.c:1352 value.c:826
+#: valops.c:1002 valops.c:1354 value.c:881
 msgid "value has been optimized out"
 msgstr ""
 
-#: valops.c:1117
+#: valops.c:1121
 msgid "Unexpected lazy value type."
 msgstr ""
 
-#: valops.c:1282 valops.c:1343
+#: valops.c:1286 valops.c:1345
 #, possible-c-format
 msgid "Can't handle bitfields which don't fit in a %d bit word."
 msgstr ""
 
-#: valops.c:1315
+#: valops.c:1317
 msgid "Value being assigned to is no longer active."
 msgstr ""
 
-#: valops.c:1355 value.c:833
+#: valops.c:1357 value.c:888
 msgid "value is not available"
 msgstr ""
 
-#: valops.c:1392
+#: valops.c:1394
 msgid "Left operand of assignment is not an lvalue."
 msgstr ""
 
-#: valops.c:1475
+#: valops.c:1477
 msgid "Only values in memory can be extended with '@'."
 msgstr ""
 
-#: valops.c:1477
+#: valops.c:1479
 #, possible-c-format
 msgid "Invalid number %d of repetitions."
 msgstr ""
 
-#: valops.c:1507
+#: valops.c:1509
 #, possible-c-format
 msgid "No frame is currently executing in block %s."
 msgstr ""
 
-#: valops.c:1510
+#: valops.c:1512
 msgid "No frame is currently executing in specified block"
 msgstr ""
 
-#: valops.c:1551
+#: valops.c:1553
 #, possible-c-format
 msgid "Address requested for identifier \"%s\" which is in register $%s"
 msgstr ""
 
-#: valops.c:1558
+#: valops.c:1560
 #, possible-c-format
 msgid "Can't take address of \"%s\" which isn't an lvalue."
 msgstr ""
 
-#: valops.c:1815
+#: valops.c:1809
 #, possible-c-format
 msgid "bad array bounds (%d, %d)"
 msgstr ""
 
-#: valops.c:1822
+#: valops.c:1816
 msgid "array elements must all be the same size"
 msgstr ""
 
-#: valops.c:1923
+#: valops.c:1917
 msgid "typecmp: no argument list"
 msgstr ""
 
-#: valops.c:2018
+#: valops.c:1996
+#, possible-c-format
+msgid "base class '%s' is ambiguous in type '%s'"
+msgstr ""
+
+#: valops.c:2036
 #, possible-c-format
 msgid "field %s is nonexistent or has been optimized out"
 msgstr ""
 
-#: valops.c:2115 valops.c:2240
+#: valops.c:2135 valops.c:2289
 msgid "virtual baseclass botch"
 msgstr ""
 
-#: valops.c:2186
+#: valops.c:2235
 #, possible-c-format
 msgid "cannot resolve overloaded method `%s': no arguments supplied"
 msgstr ""
 
-#: valops.c:2321
+#: valops.c:2370
 #, possible-c-format
 msgid "Attempt to extract a component of a value that is not a %s."
 msgstr ""
 
-#: valops.c:2344
+#: valops.c:2393
 #, possible-c-format
 msgid "Cannot take address of method %s."
 msgstr ""
 
-#: valops.c:2348
+#: valops.c:2397
 #, possible-c-format
 msgid "There is no member or method named %s."
 msgstr ""
 
-#: valops.c:2360
+#: valops.c:2409
 #, possible-c-format
 msgid ""
 "One of the arguments you tried to pass to %s could not be converted to what "
 "the function wants."
 msgstr ""
 
-#: valops.c:2377
+#: valops.c:2426
 #, possible-c-format
 msgid "Structure has no component named %s."
 msgstr ""
 
-#: valops.c:2485
+#: valops.c:2534
 msgid "Attempt to extract a component of a value that is not a struct or union"
 msgstr ""
 
-#: valops.c:2601
+#: valops.c:2650
 #, possible-c-format
 msgid "Couldn't find method %s%s%s"
 msgstr ""
@@ -24785,326 +26084,344 @@ msgstr ""
 #. FIXME: GDB does not support the general ambiguous case.
 #. All candidates should be collected and presented the
 #. user.
-#: valops.c:2711
+#: valops.c:2759
 msgid "Ambiguous overload resolution"
 msgstr ""
 
 #. Incomparable top contenders.
 #. This is an error incompatible candidates
 #. should not have been proposed.
-#: valops.c:2716
+#: valops.c:2764
 msgid "Internal error: incompatible overload candidates proposed"
 msgstr ""
 
-#: valops.c:2728
+#: valops.c:2776
 msgid "Internal error: unexpected overload comparison result"
 msgstr ""
 
-#: valops.c:2744
+#: valops.c:2792
 #, possible-c-format
 msgid "Cannot resolve method %s%s%s to any overloaded instance"
 msgstr ""
 
-#: valops.c:2749
+#: valops.c:2797
 #, possible-c-format
 msgid "Cannot resolve function %s to any overloaded instance"
 msgstr ""
 
-#: valops.c:2755
+#: valops.c:2803
 #, possible-c-format
 msgid ""
 "Using non-standard conversion to match method %s%s%s to supplied arguments"
 msgstr ""
 
-#: valops.c:2761
+#: valops.c:2809
 #, possible-c-format
 msgid ""
 "Using non-standard conversion to match function %s to supplied arguments"
 msgstr ""
 
-#: valops.c:3136
+#: valops.c:3184
 msgid "name of destructor must equal name of class"
 msgstr ""
 
-#: valops.c:3202
+#: valops.c:3250
 msgid "non-aggregate type in value_aggregate_elt"
 msgstr ""
 
-#: valops.c:3278
+#: valops.c:3326
 msgid "Internal error: non-aggregate type to value_struct_elt_for_reference"
 msgstr ""
 
-#: valops.c:3291
+#: valops.c:3339
 #, possible-c-format
 msgid "static field %s has been optimized out"
 msgstr ""
 
-#: valops.c:3353
+#: valops.c:3401
 msgid "no member function matches that type instantiation"
 msgstr ""
 
-#: valops.c:3379
+#: valops.c:3427
 #, possible-c-format
 msgid "non-unique member `%s' requires type instantiation"
 msgstr ""
 
-#: valops.c:3386
+#: valops.c:3434
 msgid "no matching member function"
 msgstr ""
 
-#: valops.c:3417
+#: valops.c:3465
 #, possible-c-format
 msgid "Cannot reference virtual member function \"%s\""
 msgstr ""
 
-#: valops.c:3602
+#: valops.c:3611
+msgid "Unexpected value type."
+msgstr ""
+
+#: valops.c:3677
 #, possible-c-format
 msgid ""
 "Couldn't retrieve complete object of RTTI type %s; object may be in register"
 "(s)."
 msgstr ""
 
-#: valops.c:3634
+#: valops.c:3709
 msgid "no `this' in current language"
 msgstr ""
 
-#: valops.c:3636
+#: valops.c:3711
 msgid "no frame selected"
 msgstr ""
 
-#: valops.c:3642
+#: valops.c:3717
 #, possible-c-format
 msgid "current stack frame does not contain a variable named `%s'"
 msgstr ""
 
-#: valops.c:3685
+#: valops.c:3760
 msgid "slice from bad array or bitstring"
 msgstr ""
 
-#: valops.c:3689
+#: valops.c:3764
 msgid "slice out of range"
 msgstr ""
 
-#: valops.c:3713
+#: valops.c:3788
 msgid "internal error accessing bitstring"
 msgstr ""
 
-#: valops.c:3807
+#: valops.c:3882
 msgid "cannot cast non-number to complex"
 msgstr ""
 
-#: valops.c:3814
+#: valops.c:3889
 msgid "Set overload resolution in evaluating C++ functions."
 msgstr ""
 
-#: valops.c:3815
+#: valops.c:3890
 msgid "Show overload resolution in evaluating C++ functions."
 msgstr ""
 
-#: valprint.c:122
+#: valprint.c:123
 #, possible-c-format
 msgid "Limit on string chars or array elements to print is %s.\n"
 msgstr ""
 
-#: valprint.c:136
+#: valprint.c:137
 #, possible-c-format
 msgid "Default input radix for entering numbers is %s.\n"
 msgstr ""
 
-#: valprint.c:146
+#: valprint.c:147
 #, possible-c-format
 msgid "Default output radix for printing of values is %s.\n"
 msgstr ""
 
-#: valprint.c:157
+#: valprint.c:158
 #, possible-c-format
 msgid "Printing of array indexes is %s.\n"
 msgstr ""
 
-#: valprint.c:168
+#: valprint.c:169
 #, possible-c-format
 msgid "Threshold for repeated print elements is %s.\n"
 msgstr ""
 
-#: valprint.c:179
+#: valprint.c:180
 #, possible-c-format
 msgid "Printing of char arrays to stop at first null char is %s.\n"
 msgstr ""
 
-#: valprint.c:190
+#: valprint.c:191
 #, possible-c-format
 msgid "Prettyprinting of structures is %s.\n"
 msgstr ""
 
-#: valprint.c:199
+#: valprint.c:200
 #, possible-c-format
 msgid "Prettyprinting of arrays is %s.\n"
 msgstr ""
 
-#: valprint.c:210
+#: valprint.c:211
 #, possible-c-format
 msgid "Printing of unions interior to structures is %s.\n"
 msgstr ""
 
-#: valprint.c:220
+#: valprint.c:221
 #, possible-c-format
 msgid "Printing of addresses is %s.\n"
 msgstr ""
 
-#: valprint.c:300
+#: valprint.c:229
+#, possible-c-format
+msgid "Printing of symbols when printing pointers is %s.\n"
+msgstr ""
+
+#: valprint.c:303
 msgid "<optimized out>"
 msgstr ""
 
-#: valprint.c:312
+#: valprint.c:315
 msgid "<invalid address>"
 msgstr ""
 
-#: valprint.c:409
+#: valprint.c:667
+#, possible-c-format
+msgid "Unhandled type code %d in symbol table."
+msgstr ""
+
+#: valprint.c:762
 msgid "<address of value unknown>"
 msgstr ""
 
-#: valprint.c:424
+#: valprint.c:777
 #, possible-c-format
 msgid "<internal function %s>"
 msgstr ""
 
-#: valprint.c:661
+#: valprint.c:1008
 msgid "Value out of range."
 msgstr ""
 
-#: valprint.c:904 valprint.c:954
+#: valprint.c:1251 valprint.c:1301
 msgid "Internal error in octal conversion;"
 msgstr ""
 
-#: valprint.c:1228
-msgid "unable to get bounds of array, assuming null array"
-msgstr ""
-
-#: valprint.c:2054
+#: valprint.c:2422
 #, possible-c-format
 msgid "Nonsense input radix ``decimal %u''; input radix unchanged."
 msgstr ""
 
-#: valprint.c:2060
+#: valprint.c:2428
 #, possible-c-format
 msgid "Input radix now set to decimal %u, hex %x, octal %o.\n"
 msgstr ""
 
-#: valprint.c:2096
+#: valprint.c:2464
 #, possible-c-format
 msgid "Unsupported output radix ``decimal %u''; output radix unchanged."
 msgstr ""
 
-#: valprint.c:2103
+#: valprint.c:2471
 #, possible-c-format
 msgid "Output radix now set to decimal %u, hex %x, octal %o.\n"
 msgstr ""
 
-#: valprint.c:2127
+#: valprint.c:2495
 #, possible-c-format
 msgid "Input and output radices now set to decimal %u, hex %x, octal %o.\n"
 msgstr ""
 
-#: valprint.c:2142
+#: valprint.c:2510
 #, possible-c-format
 msgid "Input and output radices set to decimal %u, hex %x, octal %o.\n"
 msgstr ""
 
-#: valprint.c:2148
+#: valprint.c:2516
 #, possible-c-format
 msgid "Input radix set to decimal %u, hex %x, octal %o.\n"
 msgstr ""
 
-#: valprint.c:2151
+#: valprint.c:2519
 #, possible-c-format
 msgid "Output radix set to decimal %u, hex %x, octal %o.\n"
 msgstr ""
 
-#: valprint.c:2177
+#: valprint.c:2545
 msgid "Generic command for setting how things print."
 msgstr ""
 
-#: valprint.c:2184
+#: valprint.c:2552
 msgid "Generic command for showing print settings."
 msgstr ""
 
-#: valprint.c:2190
+#: valprint.c:2558
 msgid "Set limit on string chars or array elements to print."
 msgstr ""
 
-#: valprint.c:2191
+#: valprint.c:2559
 msgid "Show limit on string chars or array elements to print."
 msgstr ""
 
-#: valprint.c:2192
+#: valprint.c:2560
 msgid "\"set print elements 0\" causes there to be no limit."
 msgstr ""
 
-#: valprint.c:2199
+#: valprint.c:2567
 msgid "Set printing of char arrays to stop at first null char."
 msgstr ""
 
-#: valprint.c:2200
+#: valprint.c:2568
 msgid "Show printing of char arrays to stop at first null char."
 msgstr ""
 
-#: valprint.c:2207
+#: valprint.c:2575
 msgid "Set threshold for repeated print elements."
 msgstr ""
 
-#: valprint.c:2208
+#: valprint.c:2576
 msgid "Show threshold for repeated print elements."
 msgstr ""
 
-#: valprint.c:2209
+#: valprint.c:2577
 msgid "\"set print repeats 0\" causes all elements to be individually printed."
 msgstr ""
 
-#: valprint.c:2216
+#: valprint.c:2584
 msgid "Set prettyprinting of structures."
 msgstr ""
 
-#: valprint.c:2217
+#: valprint.c:2585
 msgid "Show prettyprinting of structures."
 msgstr ""
 
-#: valprint.c:2224
+#: valprint.c:2592
 msgid "Set printing of unions interior to structures."
 msgstr ""
 
-#: valprint.c:2225
+#: valprint.c:2593
 msgid "Show printing of unions interior to structures."
 msgstr ""
 
-#: valprint.c:2232
+#: valprint.c:2600
 msgid "Set prettyprinting of arrays."
 msgstr ""
 
-#: valprint.c:2233
+#: valprint.c:2601
 msgid "Show prettyprinting of arrays."
 msgstr ""
 
-#: valprint.c:2240
+#: valprint.c:2608
 msgid "Set printing of addresses."
 msgstr ""
 
-#: valprint.c:2241
+#: valprint.c:2609
 msgid "Show printing of addresses."
 msgstr ""
 
-#: valprint.c:2248
+#: valprint.c:2616
+msgid "Set printing of symbol names when printing pointers."
+msgstr ""
+
+#: valprint.c:2617
+msgid "Show printing of symbol names when printing pointers."
+msgstr ""
+
+#: valprint.c:2624
 msgid "Set default input radix for entering numbers."
 msgstr ""
 
-#: valprint.c:2249
+#: valprint.c:2625
 msgid "Show default input radix for entering numbers."
 msgstr ""
 
-#: valprint.c:2256
+#: valprint.c:2632
 msgid "Set default output radix for printing of values."
 msgstr ""
 
-#: valprint.c:2257
+#: valprint.c:2633
 msgid "Show default output radix for printing of values."
 msgstr ""
 
@@ -25115,104 +26432,104 @@ msgstr ""
 #. add_show_from_set() commands aren't really appropriate.
 #. FIXME: i18n: With the new add_setshow_integer command, that is no
 #. longer true - show can display anything.
-#: valprint.c:2270
+#: valprint.c:2646
 msgid ""
 "Set default input and output number radices.\n"
 "Use 'set input-radix' or 'set output-radix' to independently set each.\n"
 "Without an argument, sets both radices back to the default value of 10."
 msgstr ""
 
-#: valprint.c:2275
+#: valprint.c:2651
 msgid ""
 "Show the default input and output number radices.\n"
 "Use 'show input-radix' or 'show output-radix' to independently show each."
 msgstr ""
 
-#: valprint.c:2281
+#: valprint.c:2657
 msgid "Set printing of array indexes."
 msgstr ""
 
-#: valprint.c:2282
+#: valprint.c:2658
 msgid "Show printing of array indexes"
 msgstr ""
 
-#: value.c:1439
+#: value.c:1518
 msgid "The history is empty."
 msgstr ""
 
-#: value.c:1441
+#: value.c:1520
 msgid "There is only one value in the history."
 msgstr ""
 
-#: value.c:1443
+#: value.c:1522
 #, possible-c-format
 msgid "History does not go back to $$%d."
 msgstr ""
 
-#: value.c:1446
+#: value.c:1525
 #, possible-c-format
 msgid "History has not yet reached $%d."
 msgstr ""
 
-#: value.c:1595
+#: value.c:1681
 msgid "Init-if-undefined requires an assignment expression."
 msgstr ""
 
-#: value.c:1600
+#: value.c:1686
 msgid "The first parameter to init-if-undefined should be a GDB variable."
 msgstr ""
 
-#: value.c:1739
+#: value.c:1870
 msgid "bad kind"
 msgstr ""
 
 #. We can never get a component of any other kind.
-#: value.c:1828
+#: value.c:1959
 msgid "set_internalvar_component"
 msgstr ""
 
-#: value.c:1839
+#: value.c:1970
 #, possible-c-format
 msgid "Cannot overwrite convenience function %s"
 msgstr ""
 
-#: value.c:2122
+#: value.c:2258
 msgid ""
 "No debugger convenience variables now defined.\n"
 "Convenience variables have names starting with \"$\";\n"
 "use \"set\" as in \"set $foo = 5\" to define them.\n"
 msgstr ""
 
-#: value.c:2316
+#: value.c:2452
 msgid "Value can't be converted to integer."
 msgstr ""
 
 #. FIXME: would like to include fieldval in the message, but
 #. we don't have a sprintf_longest.
-#: value.c:2846
+#: value.c:2994
 #, possible-c-format
 msgid "Value does not fit in %d bits."
 msgstr ""
 
-#: value.c:2897
+#: value.c:3045
 #, possible-c-format
 msgid "Unexpected type (%d) encountered for integer constant."
 msgstr ""
 
-#: value.c:2933
+#: value.c:3081
 #, possible-c-format
 msgid "Unexpected type (%d) encountered for unsigned integer constant."
 msgstr ""
 
-#: value.c:3025
+#: value.c:3173
 msgid "Unexpected type encountered for floating constant."
 msgstr ""
 
-#: value.c:3161
+#: value.c:3333
 msgid "Function return type unknown."
 msgstr ""
 
-#: value.c:3193
+#: value.c:3365
 msgid ""
 "Debugger convenience (\"$foo\") variables.\n"
 "These variables are created when you assign them values;\n"
@@ -25223,11 +26540,11 @@ msgid ""
 "\"$__\" holds the contents of the last address examined with \"x\"."
 msgstr ""
 
-#: value.c:3203
+#: value.c:3375
 msgid "Elements of value history around item number IDX (or last ten)."
 msgstr ""
 
-#: value.c:3207
+#: value.c:3379
 msgid ""
 "Initialize a convenience variable if necessary.\n"
 "init-if-undefined VARIABLE = EXPRESSION\n"
@@ -25236,71 +26553,76 @@ msgid ""
 "VARIABLE is already initialized."
 msgstr ""
 
-#: value.c:3214
+#: value.c:3386
 msgid "Placeholder command for showing help on convenience functions."
 msgstr ""
 
-#: varobj.c:52
+#. The names of varobjs representing anonymous structs or unions.
+#: varobj.c:47
+msgid "<anonymous struct>"
+msgstr ""
+
+#: varobj.c:48
+msgid "<anonymous union>"
+msgstr ""
+
+#: varobj.c:57
 #, possible-c-format
 msgid "Varobj debugging is %s.\n"
 msgstr ""
 
-#: varobj.c:642
+#: varobj.c:703
 msgid "Failed to find the specified frame"
 msgstr ""
 
-#: varobj.c:794
+#: varobj.c:866
 #, possible-c-format
 msgid "varobj_delete: assertion failed - mycount(=%d) <> 0"
 msgstr ""
 
-#: varobj.c:1030
+#: varobj.c:1110
 msgid "Null value returned for children"
 msgstr ""
 
-#: varobj.c:1036
-msgid "Returned value is not iterable"
-msgstr ""
-
-#: varobj.c:1043
+#: varobj.c:1120
 msgid "Could not get children iterator"
 msgstr ""
 
-#: varobj.c:1128
+#: varobj.c:1205
 msgid "Invalid item from the child list"
 msgstr ""
 
-#: varobj.c:1444
+#: varobj.c:1563
 msgid "Cannot instantiate printer for default visualizer"
 msgstr ""
 
-#: varobj.c:1744
+#: varobj.c:1912
 #, possible-c-format
 msgid "Could not evaluate visualizer expression: %s"
 msgstr ""
 
-#: varobj.c:1756
+#: varobj.c:1924
 msgid "Python support required"
 msgstr ""
 
-#: varobj.c:2067
+#: varobj.c:2296
 msgid "Duplicate variable object name"
 msgstr ""
 
-#: varobj.c:2150
+#: varobj.c:2379
 #, possible-c-format
 msgid "Assertion failed: Could not find varobj \"%s\" in root list"
 msgstr ""
 
-#: varobj.c:3725
+#: varobj.c:4176
 msgid "Set varobj debugging."
 msgstr ""
 
-#: varobj.c:3726
+#: varobj.c:4177
 msgid "Show varobj debugging."
 msgstr ""
 
-#: varobj.c:3727
+#: varobj.c:4178
 msgid "When non-zero, varobj debugging is enabled."
 msgstr ""
 
@@ -25308,31 +26630,31 @@ msgstr ""
 msgid "Unable to determine location of registers"
 msgstr ""
 
-#: windows-nat.c:299
+#: windows-nat.c:313
 #, possible-c-format
 msgid "SuspendThread failed. (winerr %d)"
 msgstr ""
 
-#: windows-nat.c:546
+#: windows-nat.c:568
 msgid "Can't get module info"
 msgstr ""
 
-#: windows-nat.c:556
+#: windows-nat.c:578
 #, possible-c-format
 msgid "Error getting dll name: %lu."
 msgstr ""
 
-#: windows-nat.c:559
+#: windows-nat.c:581
 #, possible-c-format
 msgid "Error converting dll name to POSIX: %d."
 msgstr ""
 
-#: windows-nat.c:564
+#: windows-nat.c:586
 #, possible-c-format
 msgid "Error getting dll name: %u."
 msgstr ""
 
-#: windows-nat.c:723
+#: windows-nat.c:745
 msgid "dll path too long"
 msgstr ""
 
@@ -25343,219 +26665,219 @@ msgstr ""
 #. 4 mysterious UNLOAD_DLL_DEBUG_EVENTs during the startup phase (these
 #. events are apparently caused by the WOW layer, the interface between
 #. 32bit and 64bit worlds).
-#: windows-nat.c:877
+#: windows-nat.c:899
 #, possible-c-format
 msgid "dll starting at %s not found."
 msgstr ""
 
-#: windows-nat.c:899
+#: windows-nat.c:921
 msgid "dll-symbols requires a file name"
 msgstr ""
 
-#: windows-nat.c:1277
+#: windows-nat.c:1299
 #, possible-c-format
 msgid "OpenProcess call failed, GetLastError = %lud"
 msgstr ""
 
-#: windows-nat.c:1402
+#: windows-nat.c:1424
 msgid "Could not interrupt program.  Press Ctrl-c in the program console."
 msgstr ""
 
-#: windows-nat.c:1510
+#: windows-nat.c:1532
 #, possible-c-format
 msgid "During startup program exited with code 0x%x."
 msgstr ""
 
-#: windows-nat.c:1813
+#: windows-nat.c:1835
 msgid "Can't attach to process."
 msgstr ""
 
-#: windows-nat.c:1845
+#: windows-nat.c:1867
 #, possible-c-format
 msgid "Can't detach process %lu (error %lu)"
 msgstr ""
 
-#: windows-nat.c:2030
+#: windows-nat.c:2052
 msgid "No executable specified, use `target exec'."
 msgstr ""
 
-#: windows-nat.c:2047 windows-nat.c:2052
+#: windows-nat.c:2069 windows-nat.c:2074
 #, possible-c-format
 msgid "Error starting executable: %d"
 msgstr ""
 
-#: windows-nat.c:2065
+#: windows-nat.c:2087
 #, possible-c-format
 msgid "Error starting executable via shell: %d"
 msgstr ""
 
-#: windows-nat.c:2186
+#: windows-nat.c:2208
 #, possible-c-format
 msgid "Warning: Failed to open TTY %s, error %#x."
 msgstr ""
 
-#: windows-nat.c:2238
+#: windows-nat.c:2260
 #, possible-c-format
 msgid "Error creating process %s, (error %d)."
 msgstr ""
 
-#: windows-nat.c:2524
+#: windows-nat.c:2550
 msgid "Load dll library symbols from FILE."
 msgstr ""
 
-#: windows-nat.c:2534
+#: windows-nat.c:2560
 msgid "Set use of shell to start subprocess."
 msgstr ""
 
-#: windows-nat.c:2535
+#: windows-nat.c:2561
 msgid "Show use of shell to start subprocess."
 msgstr ""
 
-#: windows-nat.c:2542
+#: windows-nat.c:2568
 msgid "Break when an exception is detected in the Cygwin DLL itself."
 msgstr ""
 
-#: windows-nat.c:2543
+#: windows-nat.c:2569
 msgid "Show whether gdb breaks on exceptions in the Cygwin DLL itself."
 msgstr ""
 
-#: windows-nat.c:2550
+#: windows-nat.c:2576
 msgid "Set creation of new console when creating child process."
 msgstr ""
 
-#: windows-nat.c:2551
+#: windows-nat.c:2577
 msgid "Show creation of new console when creating child process."
 msgstr ""
 
-#: windows-nat.c:2557
+#: windows-nat.c:2583
 msgid "Set creation of new group when creating child process."
 msgstr ""
 
-#: windows-nat.c:2558
+#: windows-nat.c:2584
 msgid "Show creation of new group when creating child process."
 msgstr ""
 
-#: windows-nat.c:2564
+#: windows-nat.c:2590
 msgid "Set whether to display execution in child process."
 msgstr ""
 
-#: windows-nat.c:2565
+#: windows-nat.c:2591
 msgid "Show whether to display execution in child process."
 msgstr ""
 
-#: windows-nat.c:2571
+#: windows-nat.c:2597
 msgid "Set whether to display kernel events in child process."
 msgstr ""
 
-#: windows-nat.c:2572
+#: windows-nat.c:2598
 msgid "Show whether to display kernel events in child process."
 msgstr ""
 
-#: windows-nat.c:2578
+#: windows-nat.c:2604
 msgid "Set whether to display memory accesses in child process."
 msgstr ""
 
-#: windows-nat.c:2579
+#: windows-nat.c:2605
 msgid "Show whether to display memory accesses in child process."
 msgstr ""
 
-#: windows-nat.c:2586
+#: windows-nat.c:2612
 msgid "Set whether to display kernel exceptions in child process."
 msgstr ""
 
-#: windows-nat.c:2587
+#: windows-nat.c:2613
 msgid "Show whether to display kernel exceptions in child process."
 msgstr ""
 
-#: windows-nat.c:2596
+#: windows-nat.c:2622
 msgid "Display selectors infos."
 msgstr ""
 
-#: windows-nat.c:2612
+#: windows-nat.c:2638
 #, possible-c-format
 msgid "Invalid register %d in cygwin_set_dr.\n"
 msgstr ""
 
-#: windows-nat.c:2677
+#: windows-nat.c:2724
 #, possible-c-format
 msgid "obsolete '%s' found. Rename to '%s'."
 msgstr ""
 
 #. This will probably fail on Windows 9x/Me.  Let the user know
 #. that we're missing some functionality.
-#: windows-nat.c:2804
+#: windows-nat.c:2855
 msgid ""
 "cannot automatically find executable file or library to read symbols.\n"
 "Use \"file\" or \"dll\" command to load executable/libraries directly."
 msgstr ""
 
-#: windows-tdep.c:246
+#: windows-tdep.c:247
 msgid "Unable to read tlb"
 msgstr ""
 
-#: windows-tdep.c:256
+#: windows-tdep.c:257
 msgid "Impossible to change the Thread Local Base"
 msgstr ""
 
-#: windows-tdep.c:320
+#: windows-tdep.c:321
 #, possible-c-format
 msgid "Unable to get thread local base for %s\n"
 msgstr ""
 
-#: windows-tdep.c:328
+#: windows-tdep.c:329
 #, possible-c-format
 msgid "Unable to read thread information block for %s at address %s\n"
 msgstr ""
 
-#: windows-tdep.c:335
+#: windows-tdep.c:336
 #, possible-c-format
 msgid "Thread Information Block %s at %s\n"
 msgstr ""
 
-#: windows-tdep.c:347
+#: windows-tdep.c:348
 #, possible-c-format
 msgid "%s is 0x%s\n"
 msgstr ""
 
-#: windows-tdep.c:349
+#: windows-tdep.c:350
 #, possible-c-format
 msgid "TIB[0x%s] is 0x%s\n"
 msgstr ""
 
-#: windows-tdep.c:405
+#: windows-tdep.c:451
 #, possible-c-format
 msgid "Show all non-zero elements of Thread Information Block is %s.\n"
 msgstr ""
 
-#: windows-tdep.c:422
+#: windows-tdep.c:468
 msgid "Print information specific to Win32 debugging."
 msgstr ""
 
-#: windows-tdep.c:433
+#: windows-tdep.c:491
 msgid "Display thread information block."
 msgstr ""
 
-#: windows-tdep.c:439
+#: windows-tdep.c:497
 msgid "Set whether to display all non-zero fields of thread information block."
 msgstr ""
 
-#: windows-tdep.c:440
+#: windows-tdep.c:498
 msgid ""
 "Show whether to display all non-zero fields of thread information block."
 msgstr ""
 
-#: windows-tdep.c:441
+#: windows-tdep.c:499
 msgid ""
 "Use \"on\" to enable, \"off\" to disable.\n"
 "If enabled, all non-zero fields of thread information block are displayed,\n"
 "even if their meaning is unknown."
 msgstr ""
 
-#: xcoffread.c:175
+#: xcoffread.c:176
 msgid "line numbers off, `.bf' symbol not found"
 msgstr ""
 
-#: xcoffread.c:182
+#: xcoffread.c:183
 #, possible-c-format
 msgid "Mismatched .ef symbol ignored starting at symnum %d"
 msgstr ""
@@ -25565,74 +26887,74 @@ msgstr ""
 #. This can happen with old versions of GCC.
 #. GCC 2.3.3-930426 does not exhibit this on a test case which
 #. a user said produced the message for him.
-#: xcoffread.c:516
+#: xcoffread.c:534
 msgid "Nested C_BINCL symbols"
 msgstr ""
 
-#: xcoffread.c:533
+#: xcoffread.c:551
 msgid "Mismatched C_BINCL/C_EINCL pair"
 msgstr ""
 
-#: xcoffread.c:823
+#: xcoffread.c:841
 msgid "Bad line table offset in C_EINCL directive"
 msgstr ""
 
-#: xcoffread.c:930 xcoffread.c:946
+#: xcoffread.c:960 xcoffread.c:976
 msgid "Unexpected symbol continuation"
 msgstr ""
 
-#: xcoffread.c:1393
+#: xcoffread.c:1414
 #, possible-c-format
 msgid "Unrecognized storage class %d."
 msgstr ""
 
-#: xcoffread.c:1578
+#: xcoffread.c:1599
 #, possible-c-format
 msgid "Unexpected storage class: %d"
 msgstr ""
 
-#: xcoffread.c:1666
+#: xcoffread.c:1687
 msgid "Invalid symbol offset"
 msgstr ""
 
-#: xcoffread.c:1950
+#: xcoffread.c:1971
 #, possible-c-format
 msgid "cannot seek to string table in %s: %s"
 msgstr ""
 
-#: xcoffread.c:1978
+#: xcoffread.c:1999
 #, possible-c-format
 msgid "cannot read string table from %s: %s"
 msgstr ""
 
-#: xcoffread.c:1981
+#: xcoffread.c:2002
 msgid "bad symbol file: string table does not end with null character"
 msgstr ""
 
-#: xcoffread.c:2365
+#: xcoffread.c:2375
 msgid "More than one XMC_TC0 symbol found."
 msgstr ""
 
-#: xcoffread.c:2518
+#: xcoffread.c:2531
 #, possible-c-format
 msgid "Storage class %d not recognized during scan"
 msgstr ""
 
-#: xcoffread.c:2993
+#: xcoffread.c:3006
 #, possible-c-format
 msgid "Error reading .debug section of `%s': %s"
 msgstr ""
 
-#: xcoffread.c:3008
+#: xcoffread.c:3021
 #, possible-c-format
 msgid "Error reading symbols from %s: %s"
 msgstr ""
 
-#: xcoffread.c:3021
+#: xcoffread.c:3034
 msgid "reading symbol table"
 msgstr ""
 
-#: xcoffsolib.c:167
+#: xcoffsolib.c:169
 msgid "Status of loaded shared object libraries"
 msgstr ""
 
@@ -25924,105 +27246,105 @@ msgstr ""
 msgid "cannot read register"
 msgstr ""
 
-#: xtensa-tdep.c:703
+#: xtensa-tdep.c:702
 #, possible-c-format
 msgid "cannot write register %s"
 msgstr ""
 
-#: xtensa-tdep.c:715 xtensa-tdep.c:723
+#: xtensa-tdep.c:714 xtensa-tdep.c:722
 msgid "cannot write register"
 msgstr ""
 
-#: xtensa-tdep.c:1435
+#: xtensa-tdep.c:1434
 msgid ""
 "\n"
 "Unrecognised function prologue. Stack trace cannot be resolved. This message "
 "will not be repeated in this session.\n"
 msgstr ""
 
-#: xtensa-tdep.c:1602
+#: xtensa-tdep.c:1601
 #, possible-c-format
 msgid "cannot extract return value of %d bytes long"
 msgstr ""
 
-#: xtensa-tdep.c:1657
+#: xtensa-tdep.c:1656
 #, possible-c-format
 msgid "unimplemented for this length: %d"
 msgstr ""
 
-#: xtensa-tdep.c:2462
+#: xtensa-tdep.c:2461
 msgid "Unable to read target memory ..."
 msgstr ""
 
-#: xtensa-tdep.c:2960
+#: xtensa-tdep.c:2958
 msgid "Unable to decode Xtensa Window Interrupt Handler's code."
 msgstr ""
 
-#: xtensa-tdep.c:2991
+#: xtensa-tdep.c:2989
 msgid "Unable to read Xtensa register EPC1"
 msgstr ""
 
-#: xtensa-tdep.c:3094
+#: xtensa-tdep.c:3092
 #, possible-c-format
 msgid ""
 "\n"
 "\tnum_aregs: Number of AR registers (%d) is not a power of two!"
 msgstr ""
 
-#: xtensa-tdep.c:3101
+#: xtensa-tdep.c:3099
 msgid ""
 "\n"
 "\tpc_regnum: No PC register"
 msgstr ""
 
-#: xtensa-tdep.c:3103
+#: xtensa-tdep.c:3101
 msgid ""
 "\n"
 "\tps_regnum: No PS register"
 msgstr ""
 
-#: xtensa-tdep.c:3108
+#: xtensa-tdep.c:3106
 msgid ""
 "\n"
 "\twb_regnum: No WB register"
 msgstr ""
 
-#: xtensa-tdep.c:3110
+#: xtensa-tdep.c:3108
 msgid ""
 "\n"
 "\tws_regnum: No WS register"
 msgstr ""
 
-#: xtensa-tdep.c:3112
+#: xtensa-tdep.c:3110
 msgid ""
 "\n"
 "\tar_base: No AR registers"
 msgstr ""
 
-#: xtensa-tdep.c:3116
+#: xtensa-tdep.c:3114
 msgid ""
 "\n"
 "\ta0_base: No Ax registers"
 msgstr ""
 
-#: xtensa-tdep.c:3122
+#: xtensa-tdep.c:3120
 #, possible-c-format
 msgid "the following are invalid: %s"
 msgstr ""
 
-#: xtensa-tdep.c:3299
+#: xtensa-tdep.c:3297
 msgid "xtensa_dump_tdep(): not implemented"
 msgstr ""
 
-#: xtensa-tdep.c:3316
+#: xtensa-tdep.c:3314
 msgid "Set Xtensa debugging."
 msgstr ""
 
-#: xtensa-tdep.c:3317
+#: xtensa-tdep.c:3315
 msgid "Show Xtensa debugging."
 msgstr ""
 
-#: xtensa-tdep.c:3317
+#: xtensa-tdep.c:3315
 msgid ""
 "When non-zero, Xtensa-specific debugging is enabled. Can be 1, 2, 3, or 4 "
 "indicating the level of debugging."
diff --git a/gdb/ppc-linux-nat.c b/gdb/ppc-linux-nat.c
index e42fa62..14f4ecb 100644
--- a/gdb/ppc-linux-nat.c
+++ b/gdb/ppc-linux-nat.c
@@ -593,9 +593,10 @@ fetch_register (struct regcache *regcache, int tid, int regno)
        bytes_transferred < register_size (gdbarch, regno);
        bytes_transferred += sizeof (long))
     {
+      long l;
+
       errno = 0;
-      *(long *) &buf[bytes_transferred]
-        = ptrace (PTRACE_PEEKUSER, tid, (PTRACE_TYPE_ARG3) regaddr, 0);
+      l = ptrace (PTRACE_PEEKUSER, tid, (PTRACE_TYPE_ARG3) regaddr, 0);
       regaddr += sizeof (long);
       if (errno != 0)
 	{
@@ -604,6 +605,7 @@ fetch_register (struct regcache *regcache, int tid, int regno)
 		   gdbarch_register_name (gdbarch, regno), regno);
 	  perror_with_name (message);
 	}
+      memcpy (&buf[bytes_transferred], &l, sizeof (l));
     }
 
   /* Now supply the register.  Keep in mind that the regcache's idea
@@ -1073,9 +1075,11 @@ store_register (const struct regcache *regcache, int tid, int regno)
 
   for (i = 0; i < bytes_to_transfer; i += sizeof (long))
     {
+      long l;
+
+      memcpy (&l, &buf[i], sizeof (l));
       errno = 0;
-      ptrace (PTRACE_POKEUSER, tid, (PTRACE_TYPE_ARG3) regaddr,
-	      *(long *) &buf[i]);
+      ptrace (PTRACE_POKEUSER, tid, (PTRACE_TYPE_ARG3) regaddr, l);
       regaddr += sizeof (long);
 
       if (errno == EIO 
@@ -1347,7 +1351,8 @@ store_ppc_registers (const struct regcache *regcache, int tid)
 }
 
 /* Fetch the AT_HWCAP entry from the aux vector.  */
-unsigned long ppc_linux_get_hwcap (void)
+static unsigned long
+ppc_linux_get_hwcap (void)
 {
   CORE_ADDR field;
 
@@ -1416,17 +1421,20 @@ have_ptrace_booke_interface (void)
       /* Check for kernel support for BOOKE debug registers.  */
       if (ptrace (PPC_PTRACE_GETHWDBGINFO, tid, 0, &booke_debug_info) >= 0)
 	{
-	  have_ptrace_booke_interface = 1;
-	  max_slots_number = booke_debug_info.num_instruction_bps
-	    + booke_debug_info.num_data_bps
-	    + booke_debug_info.num_condition_regs;
-	}
-      else
-	{
-	  /* Old school interface and no BOOKE debug registers support.  */
-	  have_ptrace_booke_interface = 0;
-	  memset (&booke_debug_info, 0, sizeof (struct ppc_debug_info));
+	  /* Check whether ptrace BOOKE interface is functional and
+	     provides any supported feature.  */
+	  if (booke_debug_info.features != 0)
+	    {
+	      have_ptrace_booke_interface = 1;
+	      max_slots_number = booke_debug_info.num_instruction_bps
+	        + booke_debug_info.num_data_bps
+	        + booke_debug_info.num_condition_regs;
+	      return have_ptrace_booke_interface;
+	    }
 	}
+      /* Old school interface and no BOOKE debug registers support.  */
+      have_ptrace_booke_interface = 0;
+      memset (&booke_debug_info, 0, sizeof (struct ppc_debug_info));
     }
 
   return have_ptrace_booke_interface;
@@ -1456,7 +1464,7 @@ ppc_linux_can_use_hw_breakpoint (int type, int cnt, int ot)
   if (type == bp_hardware_watchpoint || type == bp_read_watchpoint
       || type == bp_access_watchpoint || type == bp_watchpoint)
     {
-      if (cnt > total_hw_wp)
+      if (cnt + ot > total_hw_wp)
 	return -1;
     }
   else if (type == bp_hardware_breakpoint)
@@ -2151,9 +2159,9 @@ ppc_linux_remove_watchpoint (CORE_ADDR addr, int len, int rw,
 }
 
 static void
-ppc_linux_new_thread (ptid_t ptid)
+ppc_linux_new_thread (struct lwp_info *lp)
 {
-  int tid = TIDGET (ptid);
+  int tid = TIDGET (lp->ptid);
 
   if (have_ptrace_booke_interface ())
     {
@@ -2213,12 +2221,13 @@ ppc_linux_thread_exit (struct thread_info *tp, int silent)
 static int
 ppc_linux_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
 {
-  struct siginfo *siginfo_p;
+  siginfo_t siginfo;
 
-  siginfo_p = linux_nat_get_siginfo (inferior_ptid);
+  if (!linux_nat_get_siginfo (inferior_ptid, &siginfo))
+    return 0;
 
-  if (siginfo_p->si_signo != SIGTRAP
-      || (siginfo_p->si_code & 0xffff) != 0x0004 /* TRAP_HWBKPT */)
+  if (siginfo.si_signo != SIGTRAP
+      || (siginfo.si_code & 0xffff) != 0x0004 /* TRAP_HWBKPT */)
     return 0;
 
   if (have_ptrace_booke_interface ())
@@ -2227,7 +2236,7 @@ ppc_linux_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
       struct thread_points *t;
       struct hw_break_tuple *hw_breaks;
       /* The index (or slot) of the *point is passed in the si_errno field.  */
-      int slot = siginfo_p->si_errno;
+      int slot = siginfo.si_errno;
 
       t = booke_find_thread_points_by_tid (TIDGET (inferior_ptid), 0);
 
@@ -2244,7 +2253,7 @@ ppc_linux_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
 	}
     }
 
-  *addr_p = (CORE_ADDR) (uintptr_t) siginfo_p->si_addr;
+  *addr_p = (CORE_ADDR) (uintptr_t) siginfo.si_addr;
   return 1;
 }
 
diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c
index b6470fe..c7b70db 100644
--- a/gdb/ppc-linux-tdep.c
+++ b/gdb/ppc-linux-tdep.c
@@ -37,6 +37,7 @@
 #include "solist.h"
 #include "ppc-tdep.h"
 #include "ppc-linux-tdep.h"
+#include "glibc-tdep.h"
 #include "trad-frame.h"
 #include "frame-unwind.h"
 #include "tramp-frame.h"
@@ -49,6 +50,14 @@
 #include "xml-syscall.h"
 #include "linux-tdep.h"
 
+#include "stap-probe.h"
+#include "ax.h"
+#include "ax-gdb.h"
+#include "cli/cli-utils.h"
+#include "parser-defs.h"
+#include "user-regs.h"
+#include <ctype.h>
+
 #include "features/rs6000/powerpc-32l.c"
 #include "features/rs6000/powerpc-altivec32l.c"
 #include "features/rs6000/powerpc-cell32l.c"
@@ -65,6 +74,9 @@
 #include "features/rs6000/powerpc-isa205-vsx64l.c"
 #include "features/rs6000/powerpc-e500l.c"
 
+/* Shared library operations for PowerPC-Linux.  */
+static struct target_so_ops powerpc_so_ops;
+
 /* The syscall's XML filename for PPC and PPC64.  */
 #define XML_SYSCALL_FILENAME_PPC "syscalls/ppc-linux.xml"
 #define XML_SYSCALL_FILENAME_PPC64 "syscalls/ppc64-linux.xml"
@@ -229,7 +241,7 @@ ppc_linux_memory_remove_breakpoint (struct gdbarch *gdbarch,
    which were added later, do get returned in a register though.  */
 
 static enum return_value_convention
-ppc_linux_return_value (struct gdbarch *gdbarch, struct type *func_type,
+ppc_linux_return_value (struct gdbarch *gdbarch, struct value *function,
 			struct type *valtype, struct regcache *regcache,
 			gdb_byte *readbuf, const gdb_byte *writebuf)
 {  
@@ -239,7 +251,7 @@ ppc_linux_return_value (struct gdbarch *gdbarch, struct type *func_type,
 	   && TYPE_VECTOR (valtype)))
     return RETURN_VALUE_STRUCT_CONVENTION;
   else
-    return ppc_sysv_abi_return_value (gdbarch, func_type, valtype, regcache,
+    return ppc_sysv_abi_return_value (gdbarch, function, valtype, regcache,
 				      readbuf, writebuf);
 }
 
@@ -599,6 +611,85 @@ ppc64_standard_linkage3_target (struct frame_info *frame,
   return ppc64_desc_entry_point (gdbarch, desc);
 }
 
+/* PLT stub in executable.  */
+static struct insn_pattern powerpc32_plt_stub[] =
+  {
+    { 0xffff0000, 0x3d600000, 0 },	/* lis   r11, xxxx	 */
+    { 0xffff0000, 0x816b0000, 0 },	/* lwz   r11, xxxx(r11)  */
+    { 0xffffffff, 0x7d6903a6, 0 },	/* mtctr r11		 */
+    { 0xffffffff, 0x4e800420, 0 },	/* bctr			 */
+    {          0,          0, 0 }
+  };
+
+/* PLT stub in shared library.  */
+static struct insn_pattern powerpc32_plt_stub_so[] =
+  {
+    { 0xffff0000, 0x817e0000, 0 },	/* lwz   r11, xxxx(r30)  */
+    { 0xffffffff, 0x7d6903a6, 0 },	/* mtctr r11		 */
+    { 0xffffffff, 0x4e800420, 0 },	/* bctr			 */
+    { 0xffffffff, 0x60000000, 0 },	/* nop			 */
+    {          0,          0, 0 }
+  };
+#define POWERPC32_PLT_STUB_LEN 	ARRAY_SIZE (powerpc32_plt_stub)
+
+/* Check if PC is in PLT stub.  For non-secure PLT, stub is in .plt
+   section.  For secure PLT, stub is in .text and we need to check
+   instruction patterns.  */
+
+static int
+powerpc_linux_in_dynsym_resolve_code (CORE_ADDR pc)
+{
+  struct minimal_symbol *sym;
+
+  /* Check whether PC is in the dynamic linker.  This also checks
+     whether it is in the .plt section, used by non-PIC executables.  */
+  if (svr4_in_dynsym_resolve_code (pc))
+    return 1;
+
+  /* Check if we are in the resolver.  */
+  sym = lookup_minimal_symbol_by_pc (pc);
+  if ((strcmp (SYMBOL_LINKAGE_NAME (sym), "__glink") == 0)
+      || (strcmp (SYMBOL_LINKAGE_NAME (sym), "__glink_PLTresolve") == 0))
+    return 1;
+
+  return 0;
+}
+
+/* Follow PLT stub to actual routine.  */
+
+static CORE_ADDR
+ppc_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
+{
+  int insnbuf[POWERPC32_PLT_STUB_LEN];
+  struct gdbarch *gdbarch = get_frame_arch (frame);
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+  CORE_ADDR target = 0;
+
+  if (insns_match_pattern (pc, powerpc32_plt_stub, insnbuf))
+    {
+      /* Insn pattern is
+		lis   r11, xxxx
+		lwz   r11, xxxx(r11)
+	 Branch target is in r11.  */
+
+      target = (insn_d_field (insnbuf[0]) << 16) | insn_d_field (insnbuf[1]);
+      target = read_memory_unsigned_integer (target, 4, byte_order);
+    }
+
+  if (insns_match_pattern (pc, powerpc32_plt_stub_so, insnbuf))
+    {
+      /* Insn pattern is
+		lwz   r11, xxxx(r30)
+	 Branch target is in r11.  */
+
+      target = get_frame_register_unsigned (frame, tdep->ppc_gp0_regnum + 30)
+	       + insn_d_field (insnbuf[0]);
+      target = read_memory_unsigned_integer (target, 4, byte_order);
+    }
+
+  return target;
+}
 
 /* Given that we've begun executing a call trampoline at PC, return
    the entry point of the function the trampoline will go to.  */
@@ -1192,6 +1283,75 @@ ppc_linux_core_read_description (struct gdbarch *gdbarch,
     }
 }
 
+/* Implementation of `gdbarch_stap_is_single_operand', as defined in
+   gdbarch.h.  */
+
+static int
+ppc_stap_is_single_operand (struct gdbarch *gdbarch, const char *s)
+{
+  return (*s == 'i' /* Literal number.  */
+	  || (isdigit (*s) && s[1] == '('
+	      && isdigit (s[2])) /* Displacement.  */
+	  || (*s == '(' && isdigit (s[1])) /* Register indirection.  */
+	  || isdigit (*s)); /* Register value.  */
+}
+
+/* Implementation of `gdbarch_stap_parse_special_token', as defined in
+   gdbarch.h.  */
+
+static int
+ppc_stap_parse_special_token (struct gdbarch *gdbarch,
+			      struct stap_parse_info *p)
+{
+  if (isdigit (*p->arg))
+    {
+      /* This temporary pointer is needed because we have to do a lookahead.
+	  We could be dealing with a register displacement, and in such case
+	  we would not need to do anything.  */
+      const char *s = p->arg;
+      char *regname;
+      int len;
+      struct stoken str;
+
+      while (isdigit (*s))
+	++s;
+
+      if (*s == '(')
+	{
+	  /* It is a register displacement indeed.  Returning 0 means we are
+	     deferring the treatment of this case to the generic parser.  */
+	  return 0;
+	}
+
+      len = s - p->arg;
+      regname = alloca (len + 2);
+      regname[0] = 'r';
+
+      strncpy (regname + 1, p->arg, len);
+      ++len;
+      regname[len] = '\0';
+
+      if (user_reg_map_name_to_regnum (gdbarch, regname, len) == -1)
+	error (_("Invalid register name `%s' on expression `%s'."),
+	       regname, p->saved_arg);
+
+      write_exp_elt_opcode (OP_REGISTER);
+      str.ptr = regname;
+      str.length = len;
+      write_exp_string (str);
+      write_exp_elt_opcode (OP_REGISTER);
+
+      p->arg = s;
+    }
+  else
+    {
+      /* All the other tokens should be handled correctly by the generic
+	 parser.  */
+      return 0;
+    }
+
+  return 1;
+}
 
 /* Cell/B.E. active SPE context tracking support.  */
 
@@ -1509,6 +1669,15 @@ ppc_linux_init_abi (struct gdbarch_info info,
   /* Get the syscall number from the arch's register.  */
   set_gdbarch_get_syscall_number (gdbarch, ppc_linux_get_syscall_number);
 
+  /* SystemTap functions.  */
+  set_gdbarch_stap_integer_prefix (gdbarch, "i");
+  set_gdbarch_stap_register_indirection_prefix (gdbarch, "(");
+  set_gdbarch_stap_register_indirection_suffix (gdbarch, ")");
+  set_gdbarch_stap_gdb_register_prefix (gdbarch, "r");
+  set_gdbarch_stap_is_single_operand (gdbarch, ppc_stap_is_single_operand);
+  set_gdbarch_stap_parse_special_token (gdbarch,
+					ppc_stap_parse_special_token);
+
   if (tdep->wordsize == 4)
     {
       /* Until November 2001, gcc did not comply with the 32 bit SysV
@@ -1524,7 +1693,7 @@ ppc_linux_init_abi (struct gdbarch_info info,
                                             ppc_linux_memory_remove_breakpoint);
 
       /* Shared library handling.  */
-      set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
+      set_gdbarch_skip_trampoline_code (gdbarch, ppc_skip_trampoline_code);
       set_solib_svr4_fetch_link_map_offsets
         (gdbarch, svr4_ilp32_fetch_link_map_offsets);
 
@@ -1555,6 +1724,17 @@ ppc_linux_init_abi (struct gdbarch_info info,
       else
 	set_gdbarch_core_regset_sections (gdbarch,
 					  ppc_linux_fp_regset_sections);
+
+      if (powerpc_so_ops.in_dynsym_resolve_code == NULL)
+	{
+	  powerpc_so_ops = svr4_so_ops;
+	  /* Override dynamic resolve function.  */
+	  powerpc_so_ops.in_dynsym_resolve_code =
+	    powerpc_linux_in_dynsym_resolve_code;
+	}
+      set_solib_ops (gdbarch, &powerpc_so_ops);
+
+      set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver);
     }
   
   if (tdep->wordsize == 8)
@@ -1642,6 +1822,8 @@ ppc_linux_init_abi (struct gdbarch_info info,
       set_gdbarch_displaced_step_location (gdbarch,
 					   ppc_linux_displaced_step_location);
     }
+
+  set_gdbarch_get_siginfo_type (gdbarch, linux_get_siginfo_type);
 }
 
 /* Provide a prototype to silence -Wmissing-prototypes.  */
diff --git a/gdb/ppc-sysv-tdep.c b/gdb/ppc-sysv-tdep.c
index 20598d0..a221b70 100644
--- a/gdb/ppc-sysv-tdep.c
+++ b/gdb/ppc-sysv-tdep.c
@@ -1041,23 +1041,25 @@ do_ppc_sysv_return_value (struct gdbarch *gdbarch, struct type *func_type,
 }
 
 enum return_value_convention
-ppc_sysv_abi_return_value (struct gdbarch *gdbarch, struct type *func_type,
+ppc_sysv_abi_return_value (struct gdbarch *gdbarch, struct value *function,
 			   struct type *valtype, struct regcache *regcache,
 			   gdb_byte *readbuf, const gdb_byte *writebuf)
 {
-  return do_ppc_sysv_return_value (gdbarch, func_type, valtype, regcache,
-				   readbuf, writebuf, 0);
+  return do_ppc_sysv_return_value (gdbarch,
+				   function ? value_type (function) : NULL,
+				   valtype, regcache, readbuf, writebuf, 0);
 }
 
 enum return_value_convention
 ppc_sysv_abi_broken_return_value (struct gdbarch *gdbarch,
-				  struct type *func_type,
+				  struct value *function,
 				  struct type *valtype,
 				  struct regcache *regcache,
 				  gdb_byte *readbuf, const gdb_byte *writebuf)
 {
-  return do_ppc_sysv_return_value (gdbarch, func_type, valtype, regcache,
-				   readbuf, writebuf, 1);
+  return do_ppc_sysv_return_value (gdbarch,
+				   function ? value_type (function) : NULL,
+				   valtype, regcache, readbuf, writebuf, 1);
 }
 
 /* The helper function for 64-bit SYSV push_dummy_call.  Converts the
@@ -1077,7 +1079,6 @@ convert_code_addr_to_desc_addr (CORE_ADDR code_addr, CORE_ADDR *desc_addr)
   struct obj_section *dot_fn_section;
   struct minimal_symbol *dot_fn;
   struct minimal_symbol *fn;
-  CORE_ADDR toc;
   /* Find the minimal symbol that corresponds to CODE_ADDR (should
      have a name of the form ".FN").  */
   dot_fn = lookup_minimal_symbol_by_pc (code_addr);
@@ -1710,12 +1711,13 @@ ppc64_sysv_abi_push_dummy_call (struct gdbarch *gdbarch,
    location; when READBUF is non-NULL, fill the buffer from the
    corresponding register return-value location.  */
 enum return_value_convention
-ppc64_sysv_abi_return_value (struct gdbarch *gdbarch, struct type *func_type,
+ppc64_sysv_abi_return_value (struct gdbarch *gdbarch, struct value *function,
 			     struct type *valtype, struct regcache *regcache,
 			     gdb_byte *readbuf, const gdb_byte *writebuf)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+  struct type *func_type = function ? value_type (function) : NULL;
   int opencl_abi = func_type? ppc_sysv_use_opencl_abi (func_type) : 0;
 
   /* This function exists to support a calling convention that
diff --git a/gdb/ppc-tdep.h b/gdb/ppc-tdep.h
index ce43e79..7ab639d 100644
--- a/gdb/ppc-tdep.h
+++ b/gdb/ppc-tdep.h
@@ -28,13 +28,13 @@ struct type;
 
 /* From ppc-sysv-tdep.c ...  */
 enum return_value_convention ppc_sysv_abi_return_value (struct gdbarch *gdbarch,
-							struct type *func_type,
+							struct value *function,
 							struct type *valtype,
 							struct regcache *regcache,
 							gdb_byte *readbuf,
 							const gdb_byte *writebuf);
 enum return_value_convention ppc_sysv_abi_broken_return_value (struct gdbarch *gdbarch,
-							       struct type *func_type,
+							       struct value *function,
 							       struct type *valtype,
 							       struct regcache *regcache,
 							       gdb_byte *readbuf,
@@ -54,7 +54,7 @@ CORE_ADDR ppc64_sysv_abi_push_dummy_call (struct gdbarch *gdbarch,
 					  int struct_return,
 					  CORE_ADDR struct_addr);
 enum return_value_convention ppc64_sysv_abi_return_value (struct gdbarch *gdbarch,
-							  struct type *func_type,
+							  struct value *function,
 							  struct type *valtype,
 							  struct regcache *regcache,
 							  gdb_byte *readbuf,
diff --git a/gdb/ppcnbsd-tdep.c b/gdb/ppcnbsd-tdep.c
index c94774a..d18636f 100644
--- a/gdb/ppcnbsd-tdep.c
+++ b/gdb/ppcnbsd-tdep.c
@@ -76,7 +76,7 @@ ppcnbsd_regset_from_core_section (struct gdbarch *gdbarch,
    the moment use the broken convention.  Ulgh!  */
 
 static enum return_value_convention
-ppcnbsd_return_value (struct gdbarch *gdbarch, struct type *func_type,
+ppcnbsd_return_value (struct gdbarch *gdbarch, struct value *function,
 		      struct type *valtype, struct regcache *regcache,
 		      gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -92,7 +92,7 @@ ppcnbsd_return_value (struct gdbarch *gdbarch, struct type *func_type,
     return RETURN_VALUE_STRUCT_CONVENTION;
   else
 #endif
-    return ppc_sysv_abi_broken_return_value (gdbarch, func_type, valtype,
+    return ppc_sysv_abi_broken_return_value (gdbarch, function, valtype,
 					     regcache, readbuf, writebuf);
 }
 

diff --git a/gdb/ppcobsd-tdep.c b/gdb/ppcobsd-tdep.c
index 4704d7a..878571a 100644
--- a/gdb/ppcobsd-tdep.c
+++ b/gdb/ppcobsd-tdep.c
@@ -130,7 +130,7 @@ ppcobsd_sigtramp_frame_sniffer (const struct frame_unwind *self,
   CORE_ADDR pc = get_frame_pc (this_frame);
   CORE_ADDR start_pc = (pc & ~(ppcobsd_page_size - 1));
   const int *offset;
-  char *name;
+  const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
   if (name)
diff --git a/gdb/printcmd.c b/gdb/printcmd.c
index bee8a85..d5b5b63 100644
--- a/gdb/printcmd.c
+++ b/gdb/printcmd.c
@@ -49,18 +49,12 @@
 #include "charset.h"
 #include "arch-utils.h"
 #include "cli/cli-utils.h"
+#include "format.h"
 
 #ifdef TUI
 #include "tui/tui.h"		/* For tui_active et al.   */
 #endif
 
-#if defined(__MINGW32__) && !defined(PRINTF_HAS_LONG_LONG)
-# define USE_PRINTF_I64 1
-# define PRINTF_HAS_LONG_LONG
-#else
-# define USE_PRINTF_I64 0
-#endif
-
 struct format_data
   {
     int count;
@@ -568,9 +562,10 @@ set_next_address (struct gdbarch *gdbarch, CORE_ADDR addr)
    DO_DEMANGLE controls whether to print a symbol in its native "raw" form,
    or to interpret it as a possible C++ name and convert it back to source
    form.  However note that DO_DEMANGLE can be overridden by the specific
-   settings of the demangle and asm_demangle variables.  */
+   settings of the demangle and asm_demangle variables.  Returns
+   non-zero if anything was printed; zero otherwise.  */
 
-void
+int
 print_address_symbolic (struct gdbarch *gdbarch, CORE_ADDR addr,
 			struct ui_file *stream,
 			int do_demangle, char *leadin)
@@ -589,7 +584,7 @@ print_address_symbolic (struct gdbarch *gdbarch, CORE_ADDR addr,
 			      &filename, &line, &unmapped))
     {
       do_cleanups (cleanup_chain);
-      return;
+      return 0;
     }
 
   fputs_filtered (leadin, stream);
@@ -616,6 +611,7 @@ print_address_symbolic (struct gdbarch *gdbarch, CORE_ADDR addr,
     fputs_filtered (">", stream);
 
   do_cleanups (cleanup_chain);
+  return 1;
 }
 
 /* Given an address ADDR return all the elements needed to print the
@@ -638,7 +634,7 @@ build_address_symbolic (struct gdbarch *gdbarch,
   struct symbol *symbol;
   CORE_ADDR name_location = 0;
   struct obj_section *section = NULL;
-  char *name_temp = "";
+  const char *name_temp = "";
   
   /* Let's say it is mapped (not unmapped).  */
   *unmapped = 0;
@@ -683,6 +679,13 @@ build_address_symbolic (struct gdbarch *gdbarch,
 	name_temp = SYMBOL_LINKAGE_NAME (symbol);
     }
 
+  if (msymbol != NULL
+      && MSYMBOL_SIZE (msymbol) == 0
+      && MSYMBOL_TYPE (msymbol) != mst_text
+      && MSYMBOL_TYPE (msymbol) != mst_text_gnu_ifunc
+      && MSYMBOL_TYPE (msymbol) != mst_file_text)
+    msymbol = NULL;
+
   if (msymbol != NULL)
     {
       if (SYMBOL_VALUE_ADDRESS (msymbol) > name_location || symbol == NULL)
@@ -763,29 +766,23 @@ pc_prefix (CORE_ADDR addr)
 
 /* Print address ADDR symbolically on STREAM.  Parameter DEMANGLE
    controls whether to print the symbolic name "raw" or demangled.
-   Global setting "addressprint" controls whether to print hex address
-   or not.  */
+   Return non-zero if anything was printed; zero otherwise.  */
 
-void
-print_address_demangle (struct gdbarch *gdbarch, CORE_ADDR addr,
+int
+print_address_demangle (const struct value_print_options *opts,
+			struct gdbarch *gdbarch, CORE_ADDR addr,
 			struct ui_file *stream, int do_demangle)
 {
-  struct value_print_options opts;
-
-  get_user_print_options (&opts);
-  if (addr == 0)
-    {
-      fprintf_filtered (stream, "0");
-    }
-  else if (opts.addressprint)
+  if (opts->addressprint)
     {
       fputs_filtered (paddress (gdbarch, addr), stream);
       print_address_symbolic (gdbarch, addr, stream, do_demangle, " ");
     }
   else
     {
-      print_address_symbolic (gdbarch, addr, stream, do_demangle, "");
+      return print_address_symbolic (gdbarch, addr, stream, do_demangle, "");
     }
+  return 1;
 }
 

 
@@ -1080,6 +1077,22 @@ set_command (char *exp, int from_tty)
   struct cleanup *old_chain =
     make_cleanup (free_current_contents, &expr);
 
+  if (expr->nelts >= 1)
+    switch (expr->elts[0].opcode)
+      {
+      case UNOP_PREINCREMENT:
+      case UNOP_POSTINCREMENT:
+      case UNOP_PREDECREMENT:
+      case UNOP_POSTDECREMENT:
+      case BINOP_ASSIGN:
+      case BINOP_ASSIGN_MODIFY:
+      case BINOP_COMMA:
+	break;
+      default:
+	warning
+	  (_("Expression is not an assignment (and might have no effect)"));
+      }
+
   evaluate_expression (expr);
   do_cleanups (old_chain);
 }
@@ -1594,7 +1607,6 @@ map_display_numbers (char *args,
 		     void *data)
 {
   struct get_number_or_range_state state;
-  struct display *b, *tmp;
   int num;
 
   if (args == NULL)
@@ -1637,9 +1649,6 @@ do_delete_display (struct display *d, void *data)
 static void
 undisplay_command (char *args, int from_tty)
 {
-  int num;
-  struct get_number_or_range_state state;
-
   if (args == NULL)
     {
       if (query (_("Delete all auto-display expressions? ")))
@@ -1952,7 +1961,9 @@ clear_dangling_display_expressions (struct so_list *solib)
    struct symbol.  NAME is the name to print; if NULL then VAR's print
    name will be used.  STREAM is the ui_file on which to print the
    value.  INDENT specifies the number of indent levels to print
-   before printing the variable name.  */
+   before printing the variable name.
+
+   This function invalidates FRAME.  */
 
 void
 print_variable_and_value (const char *name, struct symbol *var,
@@ -1974,6 +1985,10 @@ print_variable_and_value (const char *name, struct symbol *var,
       get_user_print_options (&opts);
       opts.deref_ref = 1;
       common_val_print (val, stream, indent, &opts, current_language);
+
+      /* common_val_print invalidates FRAME when a pretty printer calls inferior
+	 function.  */
+      frame = NULL;
     }
   if (except.reason < 0)
     fprintf_filtered(stream, "<error reading variable %s (%s)>", name,
@@ -1986,13 +2001,9 @@ print_variable_and_value (const char *name, struct symbol *var,
 static void
 ui_printf (char *arg, struct ui_file *stream)
 {
-  char *f = NULL;
+  struct format_piece *fpieces;
   char *s = arg;
-  char *string = NULL;
   struct value **val_args;
-  char *substrings;
-  char *current_substring;
-  int nargs = 0;
   int allocated_args = 20;
   struct cleanup *old_cleanups;
 
@@ -2008,64 +2019,13 @@ ui_printf (char *arg, struct ui_file *stream)
   if (*s++ != '"')
     error (_("Bad format string, missing '\"'."));
 
-  /* Parse the format-control string and copy it into the string STRING,
-     processing some kinds of escape sequence.  */
-
-  f = string = (char *) alloca (strlen (s) + 1);
-
-  while (*s != '"')
-    {
-      int c = *s++;
-      switch (c)
-	{
-	case '\0':
-	  error (_("Bad format string, non-terminated '\"'."));
-
-	case '\\':
-	  switch (c = *s++)
-	    {
-	    case '\\':
-	      *f++ = '\\';
-	      break;
-	    case 'a':
-	      *f++ = '\a';
-	      break;
-	    case 'b':
-	      *f++ = '\b';
-	      break;
-	    case 'f':
-	      *f++ = '\f';
-	      break;
-	    case 'n':
-	      *f++ = '\n';
-	      break;
-	    case 'r':
-	      *f++ = '\r';
-	      break;
-	    case 't':
-	      *f++ = '\t';
-	      break;
-	    case 'v':
-	      *f++ = '\v';
-	      break;
-	    case '"':
-	      *f++ = '"';
-	      break;
-	    default:
-	      /* ??? TODO: handle other escape sequences.  */
-	      error (_("Unrecognized escape character \\%c in format string."),
-		     c);
-	    }
-	  break;
+  fpieces = parse_format_string (&s);
 
-	default:
-	  *f++ = c;
-	}
-    }
+  make_cleanup (free_format_pieces_cleanup, &fpieces);
 
-  /* Skip over " and following space and comma.  */
-  s++;
-  *f++ = '\0';
+  if (*s++ != '"')
+    error (_("Bad format string, non-terminated '\"'."));
+  
   s = skip_spaces (s);
 
   if (*s != ',' && *s != 0)
@@ -2075,240 +2035,16 @@ ui_printf (char *arg, struct ui_file *stream)
     s++;
   s = skip_spaces (s);
 
-  /* Need extra space for the '\0's.  Doubling the size is sufficient.  */
-  substrings = alloca (strlen (string) * 2);
-  current_substring = substrings;
-
   {
-    /* Now scan the string for %-specs and see what kinds of args they want.
-       argclass[I] classifies the %-specs so we can give printf_filtered
-       something of the right size.  */
-
-    enum argclass
-      {
-	int_arg, long_arg, long_long_arg, ptr_arg,
-	string_arg, wide_string_arg, wide_char_arg,
-	double_arg, long_double_arg, decfloat_arg
-      };
-    enum argclass *argclass;
-    enum argclass this_argclass;
-    char *last_arg;
+    int nargs = 0;
     int nargs_wanted;
-    int i;
+    int i, fr;
+    char *current_substring;
 
-    argclass = (enum argclass *) alloca (strlen (s) * sizeof *argclass);
     nargs_wanted = 0;
-    f = string;
-    last_arg = string;
-    while (*f)
-      if (*f++ == '%')
-	{
-	  int seen_hash = 0, seen_zero = 0, lcount = 0, seen_prec = 0;
-	  int seen_space = 0, seen_plus = 0;
-	  int seen_big_l = 0, seen_h = 0, seen_big_h = 0;
-	  int seen_big_d = 0, seen_double_big_d = 0;
-	  int bad = 0;
-
-	  /* Check the validity of the format specifier, and work
-	     out what argument it expects.  We only accept C89
-	     format strings, with the exception of long long (which
-	     we autoconf for).  */
-
-	  /* Skip over "%%".  */
-	  if (*f == '%')
-	    {
-	      f++;
-	      continue;
-	    }
-
-	  /* The first part of a format specifier is a set of flag
-	     characters.  */
-	  while (strchr ("0-+ #", *f))
-	    {
-	      if (*f == '#')
-		seen_hash = 1;
-	      else if (*f == '0')
-		seen_zero = 1;
-	      else if (*f == ' ')
-		seen_space = 1;
-	      else if (*f == '+')
-		seen_plus = 1;
-	      f++;
-	    }
-
-	  /* The next part of a format specifier is a width.  */
-	  while (strchr ("0123456789", *f))
-	    f++;
-
-	  /* The next part of a format specifier is a precision.  */
-	  if (*f == '.')
-	    {
-	      seen_prec = 1;
-	      f++;
-	      while (strchr ("0123456789", *f))
-		f++;
-	    }
-
-	  /* The next part of a format specifier is a length modifier.  */
-	  if (*f == 'h')
-	    {
-	      seen_h = 1;
-	      f++;
-	    }
-	  else if (*f == 'l')
-	    {
-	      f++;
-	      lcount++;
-	      if (*f == 'l')
-		{
-		  f++;
-		  lcount++;
-		}
-	    }
-	  else if (*f == 'L')
-	    {
-	      seen_big_l = 1;
-	      f++;
-	    }
-	  /* Decimal32 modifier.  */
-	  else if (*f == 'H')
-	    {
-	      seen_big_h = 1;
-	      f++;
-	    }
-	  /* Decimal64 and Decimal128 modifiers.  */
-	  else if (*f == 'D')
-	    {
-	      f++;
-
-	      /* Check for a Decimal128.  */
-	      if (*f == 'D')
-		{
-		  f++;
-		  seen_double_big_d = 1;
-		}
-	      else
-		seen_big_d = 1;
-	    }
-
-	  switch (*f)
-	    {
-	    case 'u':
-	      if (seen_hash)
-		bad = 1;
-	      /* FALLTHROUGH */
-
-	    case 'o':
-	    case 'x':
-	    case 'X':
-	      if (seen_space || seen_plus)
-		bad = 1;
-	      /* FALLTHROUGH */
-
-	    case 'd':
-	    case 'i':
-	      if (lcount == 0)
-		this_argclass = int_arg;
-	      else if (lcount == 1)
-		this_argclass = long_arg;
-	      else
-		this_argclass = long_long_arg;
-
-	      if (seen_big_l)
-		bad = 1;
-	      break;
-
-	    case 'c':
-	      this_argclass = lcount == 0 ? int_arg : wide_char_arg;
-	      if (lcount > 1 || seen_h || seen_big_l)
-		bad = 1;
-	      if (seen_prec || seen_zero || seen_space || seen_plus)
-		bad = 1;
-	      break;
-
-	    case 'p':
-	      this_argclass = ptr_arg;
-	      if (lcount || seen_h || seen_big_l)
-		bad = 1;
-	      if (seen_prec || seen_zero || seen_space || seen_plus)
-		bad = 1;
-	      break;
-
-	    case 's':
-	      this_argclass = lcount == 0 ? string_arg : wide_string_arg;
-	      if (lcount > 1 || seen_h || seen_big_l)
-		bad = 1;
-	      if (seen_zero || seen_space || seen_plus)
-		bad = 1;
-	      break;
-
-	    case 'e':
-	    case 'f':
-	    case 'g':
-	    case 'E':
-	    case 'G':
-	      if (seen_big_h || seen_big_d || seen_double_big_d)
-		this_argclass = decfloat_arg;
-	      else if (seen_big_l)
-		this_argclass = long_double_arg;
-	      else
-		this_argclass = double_arg;
-
-	      if (lcount || seen_h)
-		bad = 1;
-	      break;
-
-	    case '*':
-	      error (_("`*' not supported for precision or width in printf"));
-
-	    case 'n':
-	      error (_("Format specifier `n' not supported in printf"));
-
-	    case '\0':
-	      error (_("Incomplete format specifier at end of format string"));
-
-	    default:
-	      error (_("Unrecognized format specifier '%c' in printf"), *f);
-	    }
-
-	  if (bad)
-	    error (_("Inappropriate modifiers to "
-		     "format specifier '%c' in printf"),
-		   *f);
-
-	  f++;
-
-	  if (lcount > 1 && USE_PRINTF_I64)
-	    {
-	      /* Windows' printf does support long long, but not the usual way.
-		 Convert %lld to %I64d.  */
-	      int length_before_ll = f - last_arg - 1 - lcount;
-
-	      strncpy (current_substring, last_arg, length_before_ll);
-	      strcpy (current_substring + length_before_ll, "I64");
-	      current_substring[length_before_ll + 3] =
-		last_arg[length_before_ll + lcount];
-	      current_substring += length_before_ll + 4;
-	    }
-	  else if (this_argclass == wide_string_arg
-		   || this_argclass == wide_char_arg)
-	    {
-	      /* Convert %ls or %lc to %s.  */
-	      int length_before_ls = f - last_arg - 2;
-
-	      strncpy (current_substring, last_arg, length_before_ls);
-	      strcpy (current_substring + length_before_ls, "s");
-	      current_substring += length_before_ls + 2;
-	    }
-	  else
-	    {
-	      strncpy (current_substring, last_arg, f - last_arg);
-	      current_substring += f - last_arg;
-	    }
-	  *current_substring++ = '\0';
-	  last_arg = f;
-	  argclass[nargs_wanted++] = this_argclass;
-	}
+    for (fr = 0; fpieces[fr].string != NULL; fr++)
+      if (fpieces[fr].argclass != literal_piece)
+	++nargs_wanted;
 
     /* Now, parse all arguments and evaluate them.
        Store the VALUEs in VAL_ARGS.  */
@@ -2334,10 +2070,11 @@ ui_printf (char *arg, struct ui_file *stream)
       error (_("Wrong number of arguments for specified format-string"));
 
     /* Now actually print them.  */
-    current_substring = substrings;
-    for (i = 0; i < nargs; i++)
+    i = 0;
+    for (fr = 0; fpieces[fr].string != NULL; fr++)
       {
-	switch (argclass[i])
+	current_substring = fpieces[fr].string;
+	switch (fpieces[fr].argclass)
 	  {
 	  case string_arg:
 	    {
@@ -2672,20 +2409,25 @@ ui_printf (char *arg, struct ui_file *stream)
 
 	      break;
 	    }
+	  case literal_piece:
+	    /* Print a portion of the format string that has no
+	       directives.  Note that this will not include any
+	       ordinary %-specs, but it might include "%%".  That is
+	       why we use printf_filtered and not puts_filtered here.
+	       Also, we pass a dummy argument because some platforms
+	       have modified GCC to include -Wformat-security by
+	       default, which will warn here if there is no
+	       argument.  */
+	    fprintf_filtered (stream, current_substring, 0);
+	    break;
 	  default:
 	    internal_error (__FILE__, __LINE__,
 			    _("failed internal consistency check"));
 	  }
-	/* Skip to the next substring.  */
-	current_substring += strlen (current_substring) + 1;
+	/* Maybe advance to the next argument.  */
+	if (fpieces[fr].argclass != literal_piece)
+	  ++i;
       }
-    /* Print the portion of the format string after the last argument.
-       Note that this will not include any ordinary %-specs, but it
-       might include "%%".  That is why we use printf_filtered and not
-       puts_filtered here.  Also, we pass a dummy argument because
-       some platforms have modified GCC to include -Wformat-security
-       by default, which will warn here if there is no argument.  */
-    fprintf_filtered (stream, last_arg, 0);
   }
   do_cleanups (old_cleanups);
 }
diff --git a/gdb/probe.c b/gdb/probe.c
new file mode 100644
index 0000000..77f3b13
--- /dev/null
+++ b/gdb/probe.c
@@ -0,0 +1,785 @@
+/* Generic static probe support for GDB.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "probe.h"
+#include "command.h"
+#include "cli/cli-cmds.h"
+#include "cli/cli-utils.h"
+#include "objfiles.h"
+#include "symtab.h"
+#include "progspace.h"
+#include "filenames.h"
+#include "exceptions.h"
+#include "linespec.h"
+#include "gdb_regex.h"
+#include "frame.h"
+#include "arch-utils.h"
+#include <ctype.h>
+
+

+
+/* See definition in probe.h.  */
+
+struct symtabs_and_lines
+parse_probes (char **argptr, struct linespec_result *canonical)
+{
+  char *arg_start, *arg_end, *arg;
+  char *objfile_name = NULL, *provider = NULL, *name, *p;
+  struct cleanup *cleanup;
+  struct symtabs_and_lines result;
+  struct objfile *objfile;
+  struct program_space *pspace;
+  const struct probe_ops *probe_ops;
+  const char *cs;
+
+  result.sals = NULL;
+  result.nelts = 0;
+
+  arg_start = *argptr;
+
+  cs = *argptr;
+  probe_ops = probe_linespec_to_ops (&cs);
+  gdb_assert (probe_ops != NULL);
+
+  arg = (char *) cs;
+  arg = skip_spaces (arg);
+  if (!*arg)
+    error (_("argument to `%s' missing"), arg_start);
+
+  arg_end = skip_to_space (arg);
+
+  /* We make a copy here so we can write over parts with impunity.  */
+  arg = savestring (arg, arg_end - arg);
+  cleanup = make_cleanup (xfree, arg);
+
+  /* Extract each word from the argument, separated by ":"s.  */
+  p = strchr (arg, ':');
+  if (p == NULL)
+    {
+      /* This is `-p name'.  */
+      name = arg;
+    }
+  else
+    {
+      char *hold = p + 1;
+
+      *p = '\0';
+      p = strchr (hold, ':');
+      if (p == NULL)
+	{
+	  /* This is `-p provider:name'.  */
+	  provider = arg;
+	  name = hold;
+	}
+      else
+	{
+	  /* This is `-p objfile:provider:name'.  */
+	  *p = '\0';
+	  objfile_name = arg;
+	  provider = hold;
+	  name = p + 1;
+	}
+    }
+
+  if (*name == '\0')
+    error (_("no probe name specified"));
+  if (provider && *provider == '\0')
+    error (_("invalid provider name"));
+  if (objfile_name && *objfile_name == '\0')
+    error (_("invalid objfile name"));
+
+  ALL_PSPACES (pspace)
+    ALL_PSPACE_OBJFILES (pspace, objfile)
+      {
+	VEC (probe_p) *probes;
+	struct probe *probe;
+	int ix;
+
+	if (!objfile->sf || !objfile->sf->sym_probe_fns)
+	  continue;
+
+	if (objfile_name
+	    && FILENAME_CMP (objfile->name, objfile_name) != 0
+	    && FILENAME_CMP (lbasename (objfile->name), objfile_name) != 0)
+	  continue;
+
+	probes = objfile->sf->sym_probe_fns->sym_get_probes (objfile);
+
+	for (ix = 0; VEC_iterate (probe_p, probes, ix, probe); ix++)
+	  {
+	    struct symtab_and_line *sal;
+
+	    if (probe_ops != &probe_ops_any && probe->pops != probe_ops)
+	      continue;
+
+	    if (provider && strcmp (probe->provider, provider) != 0)
+	      continue;
+
+	    if (strcmp (probe->name, name) != 0)
+	      continue;
+
+	    ++result.nelts;
+	    result.sals = xrealloc (result.sals,
+				    result.nelts
+				    * sizeof (struct symtab_and_line));
+	    sal = &result.sals[result.nelts - 1];
+
+	    init_sal (sal);
+
+	    sal->pc = probe->address;
+	    sal->explicit_pc = 1;
+	    sal->section = find_pc_overlay (sal->pc);
+	    sal->pspace = pspace;
+	    sal->probe = probe;
+	  }
+      }
+
+  if (result.nelts == 0)
+    {
+      throw_error (NOT_FOUND_ERROR,
+		   _("No probe matching objfile=`%s', provider=`%s', name=`%s'"),
+		   objfile_name ? objfile_name : _("<any>"),
+		   provider ? provider : _("<any>"),
+		   name);
+    }
+
+  if (canonical)
+    {
+      canonical->special_display = 1;
+      canonical->pre_expanded = 1;
+      canonical->addr_string = savestring (*argptr, arg_end - *argptr);
+    }
+
+  *argptr = arg_end;
+  do_cleanups (cleanup);
+
+  return result;
+}
+
+/* See definition in probe.h.  */
+
+VEC (probe_p) *
+find_probes_in_objfile (struct objfile *objfile, const char *provider,
+			const char *name)
+{
+  VEC (probe_p) *probes, *result = NULL;
+  int ix;
+  struct probe *probe;
+
+  if (!objfile->sf || !objfile->sf->sym_probe_fns)
+    return NULL;
+
+  probes = objfile->sf->sym_probe_fns->sym_get_probes (objfile);
+  for (ix = 0; VEC_iterate (probe_p, probes, ix, probe); ix++)
+    {
+      if (strcmp (probe->provider, provider) != 0)
+	continue;
+
+      if (strcmp (probe->name, name) != 0)
+	continue;
+
+      VEC_safe_push (probe_p, result, probe);
+    }
+
+  return result;
+}
+
+/* See definition in probe.h.  */
+
+struct probe *
+find_probe_by_pc (CORE_ADDR pc, struct objfile **objfile_out)
+{
+  struct objfile *objfile;
+
+  ALL_OBJFILES (objfile)
+  {
+    VEC (probe_p) *probes;
+    int ix;
+    struct probe *probe;
+
+    if (!objfile->sf || !objfile->sf->sym_probe_fns)
+      continue;
+
+    /* If this proves too inefficient, we can replace with a hash.  */
+    probes = objfile->sf->sym_probe_fns->sym_get_probes (objfile);
+    for (ix = 0; VEC_iterate (probe_p, probes, ix, probe); ix++)
+      if (probe->address == pc)
+	{
+	  *objfile_out = objfile;
+	  return probe;
+	}
+  }
+
+  return NULL;
+}
+
+

+
+/* A utility structure.  A VEC of these is built when handling "info
+   probes".  */
+
+struct probe_and_objfile
+{
+  /* The probe.  */
+  struct probe *probe;
+
+  /* The probe's objfile.  */
+  struct objfile *objfile;
+};
+
+typedef struct probe_and_objfile probe_and_objfile_s;
+DEF_VEC_O (probe_and_objfile_s);
+
+/* A helper function for collect_probes that compiles a regexp and
+   throws an exception on error.  This installs a cleanup to free the
+   resulting pattern on success.  If RX is NULL, this does nothing.  */
+
+static void
+compile_rx_or_error (regex_t *pattern, const char *rx, const char *message)
+{
+  int code;
+
+  if (!rx)
+    return;
+
+  code = regcomp (pattern, rx, REG_NOSUB);
+  if (code == 0)
+    make_regfree_cleanup (pattern);
+  else
+    {
+      char *err = get_regcomp_error (code, pattern);
+
+      make_cleanup (xfree, err);
+      error (("%s: %s"), message, err);
+    }
+}
+
+/* Make a vector of probes matching OBJNAME, PROVIDER, and PROBE_NAME.
+   If POPS is not NULL, only probes of this certain probe_ops will match.
+   Each argument is a regexp, or NULL, which matches anything.  */
+
+static VEC (probe_and_objfile_s) *
+collect_probes (char *objname, char *provider, char *probe_name,
+		const struct probe_ops *pops)
+{
+  struct objfile *objfile;
+  VEC (probe_and_objfile_s) *result = NULL;
+  struct cleanup *cleanup, *cleanup_temps;
+  regex_t obj_pat, prov_pat, probe_pat;
+
+  cleanup = make_cleanup (VEC_cleanup (probe_and_objfile_s), &result);
+
+  cleanup_temps = make_cleanup (null_cleanup, NULL);
+  compile_rx_or_error (&prov_pat, provider, _("Invalid provider regexp"));
+  compile_rx_or_error (&probe_pat, probe_name, _("Invalid probe regexp"));
+  compile_rx_or_error (&obj_pat, objname, _("Invalid object file regexp"));
+
+  ALL_OBJFILES (objfile)
+    {
+      VEC (probe_p) *probes;
+      struct probe *probe;
+      int ix;
+
+      if (! objfile->sf || ! objfile->sf->sym_probe_fns)
+	continue;
+
+      if (objname)
+	{
+	  if (regexec (&obj_pat, objfile->name, 0, NULL, 0) != 0)
+	    continue;
+	}
+
+      probes = objfile->sf->sym_probe_fns->sym_get_probes (objfile);
+
+      for (ix = 0; VEC_iterate (probe_p, probes, ix, probe); ix++)
+	{
+	  probe_and_objfile_s entry;
+
+	  if (pops != NULL && probe->pops != pops)
+	    continue;
+
+	  if (provider
+	      && regexec (&prov_pat, probe->provider, 0, NULL, 0) != 0)
+	    continue;
+
+	  if (probe_name
+	      && regexec (&probe_pat, probe->name, 0, NULL, 0) != 0)
+	    continue;
+
+	  entry.probe = probe;
+	  entry.objfile = objfile;
+	  VEC_safe_push (probe_and_objfile_s, result, &entry);
+	}
+    }
+
+  do_cleanups (cleanup_temps);
+  discard_cleanups (cleanup);
+  return result;
+}
+
+/* A qsort comparison function for probe_and_objfile_s objects.  */
+
+static int
+compare_entries (const void *a, const void *b)
+{
+  const probe_and_objfile_s *ea = a;
+  const probe_and_objfile_s *eb = b;
+  int v;
+
+  v = strcmp (ea->probe->provider, eb->probe->provider);
+  if (v)
+    return v;
+
+  v = strcmp (ea->probe->name, eb->probe->name);
+  if (v)
+    return v;
+
+  if (ea->probe->address < eb->probe->address)
+    return -1;
+  if (ea->probe->address > eb->probe->address)
+    return 1;
+
+  return strcmp (ea->objfile->name, eb->objfile->name);
+}
+
+/* Helper function that generate entries in the ui_out table being
+   crafted by `info_probes_for_ops'.  */
+
+static void
+gen_ui_out_table_header_info (VEC (probe_and_objfile_s) *probes,
+			      const struct probe_ops *p)
+{
+  /* `headings' refers to the names of the columns when printing `info
+     probes'.  */
+  VEC (info_probe_column_s) *headings = NULL;
+  struct cleanup *c;
+  info_probe_column_s *column;
+  size_t headings_size;
+  int ix;
+
+  gdb_assert (p != NULL);
+
+  if (p->gen_info_probes_table_header == NULL
+      && p->gen_info_probes_table_values == NULL)
+    return;
+
+  gdb_assert (p->gen_info_probes_table_header != NULL
+	      && p->gen_info_probes_table_values != NULL);
+
+  c = make_cleanup (VEC_cleanup (info_probe_column_s), &headings);
+  p->gen_info_probes_table_header (&headings);
+
+  headings_size = VEC_length (info_probe_column_s, headings);
+
+  for (ix = 0;
+       VEC_iterate (info_probe_column_s, headings, ix, column);
+       ++ix)
+    {
+      probe_and_objfile_s *entry;
+      int jx;
+      size_t size_max = strlen (column->print_name);
+
+      for (jx = 0; VEC_iterate (probe_and_objfile_s, probes, jx, entry); ++jx)
+	{
+	  /* `probe_fields' refers to the values of each new field that this
+	     probe will display.  */
+	  VEC (const_char_ptr) *probe_fields = NULL;
+	  struct cleanup *c2;
+	  const char *val;
+	  int kx;
+
+	  if (entry->probe->pops != p)
+	    continue;
+
+	  c2 = make_cleanup (VEC_cleanup (const_char_ptr), &probe_fields);
+	  p->gen_info_probes_table_values (entry->probe, entry->objfile,
+					   &probe_fields);
+
+	  gdb_assert (VEC_length (const_char_ptr, probe_fields)
+		      == headings_size);
+
+	  for (kx = 0; VEC_iterate (const_char_ptr, probe_fields, kx, val);
+	       ++kx)
+	    {
+	      /* It is valid to have a NULL value here, which means that the
+		 backend does not have something to write and this particular
+		 field should be skipped.  */
+	      if (val == NULL)
+		continue;
+
+	      size_max = max (strlen (val), size_max);
+	    }
+	  do_cleanups (c2);
+	}
+
+      ui_out_table_header (current_uiout, size_max, ui_left,
+			   column->field_name, column->print_name);
+    }
+
+  do_cleanups (c);
+}
+
+/* Helper function to print extra information about a probe and an objfile
+   represented by ENTRY.  */
+
+static void
+print_ui_out_info (probe_and_objfile_s *entry)
+{
+  int ix;
+  int j = 0;
+  /* `values' refers to the actual values of each new field in the output
+     of `info probe'.  `headings' refers to the names of each new field.  */
+  VEC (const_char_ptr) *values = NULL;
+  VEC (info_probe_column_s) *headings = NULL;
+  info_probe_column_s *column;
+  struct cleanup *c;
+
+  gdb_assert (entry != NULL);
+  gdb_assert (entry->probe != NULL);
+  gdb_assert (entry->probe->pops != NULL);
+
+  if (entry->probe->pops->gen_info_probes_table_header == NULL
+      && entry->probe->pops->gen_info_probes_table_values == NULL)
+    return;
+
+  gdb_assert (entry->probe->pops->gen_info_probes_table_header != NULL
+	      && entry->probe->pops->gen_info_probes_table_values != NULL);
+
+  c = make_cleanup (VEC_cleanup (info_probe_column_s), &headings);
+  make_cleanup (VEC_cleanup (const_char_ptr), &values);
+
+  entry->probe->pops->gen_info_probes_table_header (&headings);
+  entry->probe->pops->gen_info_probes_table_values (entry->probe,
+						    entry->objfile, &values);
+
+  gdb_assert (VEC_length (info_probe_column_s, headings)
+	      == VEC_length (const_char_ptr, values));
+
+  for (ix = 0;
+       VEC_iterate (info_probe_column_s, headings, ix, column);
+       ++ix)
+    {
+      const char *val = VEC_index (const_char_ptr, values, j++);
+
+      if (val == NULL)
+	ui_out_field_skip (current_uiout, column->field_name);
+      else
+	ui_out_field_string (current_uiout, column->field_name, val);
+    }
+
+  do_cleanups (c);
+}
+
+/* Helper function that returns the number of extra fields which POPS will
+   need.  */
+
+static int
+get_number_extra_fields (const struct probe_ops *pops)
+{
+  VEC (info_probe_column_s) *headings = NULL;
+  struct cleanup *c;
+  int n;
+
+  if (pops->gen_info_probes_table_header == NULL)
+    return 0;
+
+  c = make_cleanup (VEC_cleanup (info_probe_column_s), &headings);
+  pops->gen_info_probes_table_header (&headings);
+
+  n = VEC_length (info_probe_column_s, headings);
+
+  do_cleanups (c);
+
+  return n;
+}
+
+/* See comment in probe.h.  */
+
+void
+info_probes_for_ops (char *arg, int from_tty, const struct probe_ops *pops)
+{
+  char *provider, *probe = NULL, *objname = NULL;
+  struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
+  VEC (probe_and_objfile_s) *items;
+  int i, any_found;
+  int ui_out_extra_fields = 0;
+  size_t size_addr;
+  size_t size_name = strlen ("Name");
+  size_t size_objname = strlen ("Object");
+  size_t size_provider = strlen ("Provider");
+  probe_and_objfile_s *entry;
+  struct gdbarch *gdbarch = get_current_arch ();
+
+  /* Do we have a `provider:probe:objfile' style of linespec?  */
+  provider = extract_arg (&arg);
+  if (provider)
+    {
+      make_cleanup (xfree, provider);
+
+      probe = extract_arg (&arg);
+      if (probe)
+	{
+	  make_cleanup (xfree, probe);
+
+	  objname = extract_arg (&arg);
+	  if (objname)
+	    make_cleanup (xfree, objname);
+	}
+    }
+
+  if (pops == NULL)
+    {
+      const struct probe_ops *po;
+      int ix;
+
+      /* If the probe_ops is NULL, it means the user has requested a "simple"
+	 `info probes', i.e., she wants to print all information about all
+	 probes.  For that, we have to identify how many extra fields we will
+	 need to add in the ui_out table.
+
+	 To do that, we iterate over all probe_ops, querying each one about
+	 its extra fields, and incrementing `ui_out_extra_fields' to reflect
+	 that number.  */
+
+      for (ix = 0; VEC_iterate (probe_ops_cp, all_probe_ops, ix, po); ++ix)
+	ui_out_extra_fields += get_number_extra_fields (po);
+    }
+  else
+    ui_out_extra_fields = get_number_extra_fields (pops);
+
+  items = collect_probes (objname, provider, probe, pops);
+  make_cleanup (VEC_cleanup (probe_and_objfile_s), &items);
+  make_cleanup_ui_out_table_begin_end (current_uiout,
+				       4 + ui_out_extra_fields,
+				       VEC_length (probe_and_objfile_s, items),
+				       "StaticProbes");
+
+  if (!VEC_empty (probe_and_objfile_s, items))
+    qsort (VEC_address (probe_and_objfile_s, items),
+	   VEC_length (probe_and_objfile_s, items),
+	   sizeof (probe_and_objfile_s), compare_entries);
+
+  /* What's the size of an address in our architecture?  */
+  size_addr = gdbarch_addr_bit (gdbarch) == 64 ? 18 : 10;
+
+  /* Determining the maximum size of each field (`provider', `name' and
+     `objname').  */
+  for (i = 0; VEC_iterate (probe_and_objfile_s, items, i, entry); ++i)
+    {
+      size_name = max (strlen (entry->probe->name), size_name);
+      size_provider = max (strlen (entry->probe->provider), size_provider);
+      size_objname = max (strlen (entry->objfile->name), size_objname);
+    }
+
+  ui_out_table_header (current_uiout, size_provider, ui_left, "provider",
+		       _("Provider"));
+  ui_out_table_header (current_uiout, size_name, ui_left, "name", _("Name"));
+  ui_out_table_header (current_uiout, size_addr, ui_left, "addr", _("Where"));
+
+  if (pops == NULL)
+    {
+      const struct probe_ops *po;
+      int ix;
+
+      /* We have to generate the table header for each new probe type that we
+	 will print.  */
+      for (ix = 0; VEC_iterate (probe_ops_cp, all_probe_ops, ix, po); ++ix)
+	gen_ui_out_table_header_info (items, po);
+    }
+  else
+    gen_ui_out_table_header_info (items, pops);
+
+  ui_out_table_header (current_uiout, size_objname, ui_left, "object",
+		       _("Object"));
+  ui_out_table_body (current_uiout);
+
+  for (i = 0; VEC_iterate (probe_and_objfile_s, items, i, entry); ++i)
+    {
+      struct cleanup *inner;
+
+      inner = make_cleanup_ui_out_tuple_begin_end (current_uiout, "probe");
+
+      ui_out_field_string (current_uiout, "provider", entry->probe->provider);
+      ui_out_field_string (current_uiout, "name", entry->probe->name);
+      ui_out_field_core_addr (current_uiout, "addr",
+			      get_objfile_arch (entry->objfile),
+			      entry->probe->address);
+
+      if (pops == NULL)
+	{
+	  const struct probe_ops *po;
+	  int ix;
+
+	  for (ix = 0; VEC_iterate (probe_ops_cp, all_probe_ops, ix, po);
+	       ++ix)
+	    if (entry->probe->pops == po)
+	      print_ui_out_info (entry);
+	}
+      else
+	print_ui_out_info (entry);
+
+      ui_out_field_string (current_uiout, "object", entry->objfile->name);
+      ui_out_text (current_uiout, "\n");
+
+      do_cleanups (inner);
+    }
+
+  any_found = !VEC_empty (probe_and_objfile_s, items);
+  do_cleanups (cleanup);
+
+  if (!any_found)
+    ui_out_message (current_uiout, 0, _("No probes matched.\n"));
+}
+
+/* Implementation of the `info probes' command.  */
+
+static void
+info_probes_command (char *arg, int from_tty)
+{
+  info_probes_for_ops (arg, from_tty, NULL);
+}
+
+/* See comments in probe.h.  */
+
+struct value *
+probe_safe_evaluate_at_pc (struct frame_info *frame, unsigned n)
+{
+  struct probe *probe;
+  struct objfile *objfile;
+  unsigned n_probes;
+
+  probe = find_probe_by_pc (get_frame_pc (frame), &objfile);
+  if (!probe)
+    return NULL;
+  gdb_assert (objfile->sf && objfile->sf->sym_probe_fns);
+
+  n_probes
+    = objfile->sf->sym_probe_fns->sym_get_probe_argument_count (objfile,
+								probe);
+  if (n >= n_probes)
+    return NULL;
+
+  return objfile->sf->sym_probe_fns->sym_evaluate_probe_argument (objfile,
+								  probe,
+								  n);
+}
+
+/* See comment in probe.h.  */
+
+const struct probe_ops *
+probe_linespec_to_ops (const char **linespecp)
+{
+  int ix;
+  const struct probe_ops *probe_ops;
+
+  for (ix = 0; VEC_iterate (probe_ops_cp, all_probe_ops, ix, probe_ops); ix++)
+    if (probe_ops->is_linespec (linespecp))
+      return probe_ops;
+
+  return NULL;
+}
+
+/* See comment in probe.h.  */
+
+int
+probe_is_linespec_by_keyword (const char **linespecp, const char *const *keywords)
+{
+  const char *s = *linespecp;
+  const char *const *csp;
+
+  for (csp = keywords; *csp; csp++)
+    {
+      const char *keyword = *csp;
+      size_t len = strlen (keyword);
+
+      if (strncmp (s, keyword, len) == 0 && isspace (s[len]))
+	{
+	  *linespecp += len + 1;
+	  return 1;
+	}
+    }
+
+  return 0;
+}
+
+/* Implementation of `is_linespec' method for `struct probe_ops'.  */
+
+static int
+probe_any_is_linespec (const char **linespecp)
+{
+  static const char *const keywords[] = { "-p", "-probe", NULL };
+
+  return probe_is_linespec_by_keyword (linespecp, keywords);
+}
+
+/* Dummy method used for `probe_ops_any'.  */
+
+static void
+probe_any_get_probes (VEC (probe_p) **probesp, struct objfile *objfile)
+{
+  /* No probes can be provided by this dummy backend.  */
+}
+
+/* Operations associated with a generic probe.  */
+
+const struct probe_ops probe_ops_any =
+{
+  probe_any_is_linespec,
+  probe_any_get_probes,
+};
+
+/* See comments in probe.h.  */
+
+struct cmd_list_element **
+info_probes_cmdlist_get (void)
+{
+  static struct cmd_list_element *info_probes_cmdlist;
+
+  if (info_probes_cmdlist == NULL)
+    add_prefix_cmd ("probes", class_info, info_probes_command,
+		    _("\
+Show available static probes.\n\
+Usage: info probes [all|TYPE [ARGS]]\n\
+TYPE specifies the type of the probe, and can be one of the following:\n\
+  - stap\n\
+If you specify TYPE, there may be additional arguments needed by the\n\
+subcommand.\n\
+If you do not specify any argument, or specify `all', then the command\n\
+will show information about all types of probes."),
+		    &info_probes_cmdlist, "info probes ",
+		    0/*allow-unknown*/, &infolist);
+
+  return &info_probes_cmdlist;
+}
+
+VEC (probe_ops_cp) *all_probe_ops;
+
+void _initialize_probe (void);
+
+void
+_initialize_probe (void)
+{
+  VEC_safe_push (probe_ops_cp, all_probe_ops, &probe_ops_any);
+
+  add_cmd ("all", class_info, info_probes_command,
+	   _("\
+Show information about all type of probes."),
+	   info_probes_cmdlist_get ());
+}
diff --git a/gdb/probe.h b/gdb/probe.h
new file mode 100644
index 0000000..8d44ca2
--- /dev/null
+++ b/gdb/probe.h
@@ -0,0 +1,221 @@
+/* Generic SDT probe support for GDB.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#if !defined (PROBE_H)
+#define PROBE_H 1
+
+#include "gdb_vecs.h"
+
+struct linespec_result;
+
+/* Structure useful for passing the header names in the method
+   `gen_ui_out_table_header'.  */
+
+struct info_probe_column
+  {
+    /* The internal name of the field.  This string cannot be capitalized nor
+       localized, e.g., "extra_field".  */
+
+    const char *field_name;
+
+    /* The field name to be printed in the `info probes' command.  This
+       string can be capitalized and localized, e.g., _("Extra Field").  */
+    const char *print_name;
+  };
+
+typedef struct info_probe_column info_probe_column_s;
+DEF_VEC_O (info_probe_column_s);
+
+/* Operations associated with a probe.  */
+
+struct probe_ops
+  {
+    /* Method responsible for verifying if LINESPECP is a valid linespec for
+       a probe breakpoint.  It should return 1 if it is, or zero if it is not.
+       It also should update LINESPECP in order to discard the breakpoint
+       option associated with this linespec.  For example, if the option is
+       `-probe', and the LINESPECP is `-probe abc', the function should
+       return 1 and set LINESPECP to `abc'.  */
+
+    int (*is_linespec) (const char **linespecp);
+
+    /* Function that should fill PROBES with known probes from OBJFILE.  */
+
+    void (*get_probes) (VEC (probe_p) **probes, struct objfile *objfile);
+
+    /* Function used to relocate addresses from PROBE according to some DELTA
+       provided.  */
+
+    void (*relocate) (struct probe *probe, CORE_ADDR delta);
+
+    /* Return the number of arguments of PROBE.  */
+
+    unsigned (*get_probe_argument_count) (struct probe *probe,
+					  struct objfile *objfile);
+
+    /* Evaluate the Nth argument from the PROBE, returning a value
+       corresponding to it.  The argument number is represented N.  */
+
+    struct value *(*evaluate_probe_argument) (struct probe *probe,
+					      struct objfile *objfile,
+					      unsigned n);
+
+    /* Compile the Nth argument of the PROBE to an agent expression.
+       The argument number is represented by N.  */
+
+    void (*compile_to_ax) (struct probe *probe, struct objfile *objfile,
+			   struct agent_expr *aexpr,
+			   struct axs_value *axs_value, unsigned n);
+
+    /* Set the semaphore associated with the PROBE.  This function only makes
+       sense if the probe has a concept of semaphore associated to a
+       probe.  */
+
+    void (*set_semaphore) (struct probe *probe, struct gdbarch *gdbarch);
+
+    /* Clear the semaphore associated with the PROBE.  This function only
+       makes sense if the probe has a concept of semaphore associated to
+       a probe.  */
+
+    void (*clear_semaphore) (struct probe *probe, struct gdbarch *gdbarch);
+
+    /* Function called to destroy PROBE's specific data.  This function
+       shall not free PROBE itself.  */
+
+    void (*destroy) (struct probe *probe);
+
+    /* Function responsible for providing the extra fields that will be
+       printed in the `info probes' command.  It should fill HEADS
+       with whatever extra fields it needs.  If the backend doesn't need
+       to print extra fields, it can set this method to NULL.  */
+
+    void (*gen_info_probes_table_header) (VEC (info_probe_column_s) **heads);
+
+    /* Function that will fill VALUES with the values of the extra fields
+       to be printed for PROBE  and OBJFILE.  If the backend implements
+       the `gen_ui_out_table_header' method, then it should implement
+       this method as well.  The backend should also guarantee that the
+       order and the number of values in the vector is exactly the same
+       as the order of the extra fields provided in the method
+       `gen_ui_out_table_header'.  If a certain field is to be skipped
+       when printing the information, you can push a NULL value in that
+       position in the vector.  */
+
+    void (*gen_info_probes_table_values) (struct probe *probe,
+					  struct objfile *objfile,
+					  VEC (const_char_ptr) **values);
+  };
+
+/* Definition of a vector of probe_ops.  */
+
+typedef const struct probe_ops *probe_ops_cp;
+DEF_VEC_P (probe_ops_cp);
+extern VEC (probe_ops_cp) *all_probe_ops;
+
+/* The probe_ops associated with the generic probe.  */
+
+extern const struct probe_ops probe_ops_any;
+
+/* Helper function that, given KEYWORDS, iterate over it trying to match
+   each keyword with LINESPECP.  If it succeeds, it updates the LINESPECP
+   pointer and returns 1.  Otherwise, nothing is done to LINESPECP and zero
+   is returned.  */
+
+extern int probe_is_linespec_by_keyword (const char **linespecp,
+					 const char *const *keywords);
+
+/* Return specific PROBE_OPS * matching *LINESPECP and possibly updating
+   *LINESPECP to skip its "-probe-type " prefix.  Return &probe_ops_any if
+   *LINESPECP matches "-probe ", that is any unspecific probe.  Return NULL if
+   *LINESPECP is not identified as any known probe type, *LINESPECP is not
+   modified in such case.  */
+
+extern const struct probe_ops *probe_linespec_to_ops (const char **linespecp);
+
+/* The probe itself.  The struct contains generic information about the
+   probe, and then some specific information which should be stored in
+   the `probe_info' field.  */
+
+struct probe
+  {
+    /* The operations associated with this probe.  */
+    const struct probe_ops *pops;
+
+    /* The name of the probe.  */
+    const char *name;
+
+    /* The provider of the probe.  It generally defaults to the name of
+       the objfile which contains the probe.  */
+    const char *provider;
+
+    /* The address where the probe is inserted.  */
+    CORE_ADDR address;
+  };
+
+/* A helper for linespec that decodes a probe specification.  It returns a
+   symtabs_and_lines object and updates *ARGPTR or throws an error.  The
+   argument PTYPE specifies the type of the probe(s) to be parsed.  */
+
+extern struct symtabs_and_lines parse_probes (char **argptr,
+					      struct linespec_result *canon);
+
+/* Helper function to register the proper probe_ops to a newly created probe.
+   This function is mainly called from `sym_get_probes'.  */
+
+extern void register_probe_ops (struct probe *probe);
+
+/* Given a PC, find an associated probe with type PTYPE.  If a probe is
+   found, set *OBJFILE_OUT to the probe's objfile, and return the
+   probe.  If no probe is found, return NULL.  */
+
+extern struct probe *find_probe_by_pc (CORE_ADDR pc,
+				       struct objfile **objfile_out);
+
+/* Search OBJFILE for a probe with the given PROVIDER, NAME and PTYPE.
+   Return a VEC of all probes that were found.  If no matching probe
+   is found, return NULL.  The caller must free the VEC.  */
+
+extern VEC (probe_p) *find_probes_in_objfile (struct objfile *objfile,
+					      const char *provider,
+					      const char *name);
+
+/* Generate a `info probes' command output for probe_ops represented by
+   POPS.  If POPS is NULL it considers any probes types.  It is a helper
+   function that can be used by the probe backends to print their
+   `info probe TYPE'.  */
+
+extern void info_probes_for_ops (char *arg, int from_tty,
+				 const struct probe_ops *pops);
+
+/* Return the `cmd_list_element' associated with the `info probes' command,
+   or create a new one if it doesn't exist.  Helper function that serves the
+   purpose of avoiding the case of a backend using the `cmd_list_element'
+   associated with `info probes', without having it registered yet.  */
+
+extern struct cmd_list_element **info_probes_cmdlist_get (void);
+
+/* A convenience function that finds a probe at the PC in FRAME and
+   evaluates argument N, with 0 <= N < number_of_args.  If there is no
+   probe at that location, or if the probe does not have enough arguments,
+   this returns NULL.  */
+
+extern struct value *probe_safe_evaluate_at_pc (struct frame_info *frame,
+						unsigned n);
+
+#endif /* !defined (PROBE_H) */
diff --git a/gdb/proc-api.c b/gdb/proc-api.c
index 19732a7..876d08c 100644
--- a/gdb/proc-api.c
+++ b/gdb/proc-api.c
@@ -775,6 +775,9 @@ proc_prettyfprint_status (long flags, int why, int what, int thread)
 }
 
 
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern void _initialize_proc_api (void);
+
 void
 _initialize_proc_api (void)
 {
diff --git a/gdb/proc-events.c b/gdb/proc-events.c
index fa56e34..216a65a 100644
--- a/gdb/proc-events.c
+++ b/gdb/proc-events.c
@@ -45,6 +45,8 @@
 #include <sys/fault.h>
 #endif
 
+#include "proc-utils.h"
+
 /* Much of the information used in the /proc interface, particularly
    for printing status information, is kept as tables of structures of
    the following form.  These tables can be used to map numeric values
@@ -105,7 +107,7 @@ struct trans
 #define MAX_SYSCALLS 262	/* Pretty arbitrary.  */
 static char *syscall_table[MAX_SYSCALLS];
 
-void
+static void
 init_syscall_table (void)
 {
 #ifdef SYS_BSD_getime
diff --git a/gdb/proc-flags.c b/gdb/proc-flags.c
index 35f1212..57eca90 100644
--- a/gdb/proc-flags.c
+++ b/gdb/proc-flags.c
@@ -35,6 +35,8 @@
 #include <sys/types.h>
 #include <sys/procfs.h>
 
+#include "proc-utils.h"
+
 /*  Much of the information used in the /proc interface, particularly for
     printing status information, is kept as tables of structures of the
     following form.  These tables can be used to map numeric values to
diff --git a/gdb/proc-service.c b/gdb/proc-service.c
index e317414..a1f90a8 100644
--- a/gdb/proc-service.c
+++ b/gdb/proc-service.c
@@ -201,14 +201,24 @@ ps_pglobal_lookup (gdb_ps_prochandle_t ph, const char *obj,
 		   const char *name, psaddr_t *sym_addr)
 {
   struct minimal_symbol *ms;
+  struct cleanup *old_chain = save_current_program_space ();
+  struct inferior *inf = find_inferior_pid (ptid_get_pid (ph->ptid));
+  ps_err_e result;
+
+  set_current_program_space (inf->pspace);
 
   /* FIXME: kettenis/2000-09-03: What should we do with OBJ?  */
   ms = lookup_minimal_symbol (name, NULL, NULL);
   if (ms == NULL)
-    return PS_NOSYM;
+    result = PS_NOSYM;
+  else
+    {
+      *sym_addr = core_addr_to_ps_addr (SYMBOL_VALUE_ADDRESS (ms));
+      result = PS_OK;
+    }
 
-  *sym_addr = core_addr_to_ps_addr (SYMBOL_VALUE_ADDRESS (ms));
-  return PS_OK;
+  do_cleanups (old_chain);
+  return result;
 }
 
 /* Read SIZE bytes from the target process PH at address ADDR and copy
diff --git a/gdb/proc-utils.h b/gdb/proc-utils.h
index b45d44b..a462d6e 100644
--- a/gdb/proc-utils.h
+++ b/gdb/proc-utils.h
@@ -29,7 +29,16 @@ extern void proc_prettyprint_syscalls (sysset_t *sysset, int verbose);
 
 extern void proc_prettyprint_syscall (int num, int verbose);
 
-extern void proc_prettyprint_flags (unsigned long flags, int verbose);
+extern void proc_prettyprint_signalset (sigset_t *sigset, int verbose);
+
+extern void proc_prettyprint_signal (int signo, int verbose);
+
+extern void proc_prettyprint_faultset (fltset_t *fltset, int verbose);
+
+extern void proc_prettyprint_fault (int faultno, int verbose);
+
+extern void proc_prettyprint_actionset (struct sigaction *actions,
+					int verbose);
 
 extern void proc_prettyfprint_signalset (FILE *file, sigset_t *sigset,
 					 int verbose);
@@ -55,6 +64,18 @@ extern void proc_prettyfprint_syscalls (FILE *file, sysset_t *sysset,
 extern void proc_prettyfprint_status (long, int, int, int);
 
 
+/* From proc-flags.c */
+
+/*
+ * Pretty-print the prstatus flags.
+ */
+
+extern void proc_prettyprint_flags (unsigned long flags, int verbose);
+
+extern void proc_prettyfprint_flags (FILE *file, unsigned long flags,
+				     int verbose);
+
+
 /* From proc-api.c */
 
 /*
diff --git a/gdb/procfs.c b/gdb/procfs.c
index 14d923d..774df2e 100644
--- a/gdb/procfs.c
+++ b/gdb/procfs.c
@@ -112,7 +112,7 @@
 static void procfs_attach (struct target_ops *, char *, int);
 static void procfs_detach (struct target_ops *, char *, int);
 static void procfs_resume (struct target_ops *,
-			   ptid_t, int, enum target_signal);
+			   ptid_t, int, enum gdb_signal);
 static void procfs_stop (ptid_t);
 static void procfs_files_info (struct target_ops *);
 static void procfs_fetch_registers (struct target_ops *,
@@ -138,8 +138,8 @@ static LONGEST procfs_xfer_partial (struct target_ops *ops,
 
 static int procfs_thread_alive (struct target_ops *ops, ptid_t);
 
-void procfs_find_new_threads (struct target_ops *ops);
-char *procfs_pid_to_str (struct target_ops *, ptid_t);
+static void procfs_find_new_threads (struct target_ops *ops);
+static char *procfs_pid_to_str (struct target_ops *, ptid_t);
 
 static int proc_find_memory_regions (int (*) (CORE_ADDR,
 					      unsigned long,
@@ -151,6 +151,9 @@ static char * procfs_make_note_section (bfd *, int *);
 
 static int procfs_can_use_hw_breakpoint (int, int, int);
 
+static void procfs_info_proc (struct target_ops *, char *,
+			      enum info_proc_what);
+
 #if defined (PR_MODEL_NATIVE) && (PR_MODEL_NATIVE == PR_MODEL_LP64)
 /* When GDB is built as 64-bit application on Solaris, the auxv data
    is presented in 64-bit format.  We need to provide a custom parser
@@ -211,6 +214,7 @@ procfs_target (void)
   t->to_has_thread_control = tc_schedlock;
   t->to_find_memory_regions = proc_find_memory_regions;
   t->to_make_corefile_notes = procfs_make_note_section;
+  t->to_info_proc = procfs_info_proc;
 
 #if defined(PR_MODEL_NATIVE) && (PR_MODEL_NATIVE == PR_MODEL_LP64)
   t->to_auxv_parse = procfs_auxv_parse;
@@ -262,7 +266,7 @@ typedef struct sigaction gdb_sigaction_t;
 #ifdef HAVE_PR_SIGINFO64_T
 typedef pr_siginfo64_t gdb_siginfo_t;
 #else
-typedef struct siginfo gdb_siginfo_t;
+typedef siginfo_t gdb_siginfo_t;
 #endif
 
 /* On mips-irix, praddset and prdelset are defined in such a way that
@@ -1015,63 +1019,24 @@ find_syscall (procinfo *pi, char *name)
    than have a bunch of #ifdefs all thru the gdb target vector
    functions, we do our best to hide them all in here.  */
 
-int proc_get_status (procinfo * pi);
-long proc_flags (procinfo * pi);
-int proc_why (procinfo * pi);
-int proc_what (procinfo * pi);
-int proc_set_run_on_last_close (procinfo * pi);
-int proc_unset_run_on_last_close (procinfo * pi);
-int proc_set_inherit_on_fork (procinfo * pi);
-int proc_unset_inherit_on_fork (procinfo * pi);
-int proc_set_async (procinfo * pi);
-int proc_unset_async (procinfo * pi);
-int proc_stop_process (procinfo * pi);
-int proc_trace_signal (procinfo * pi, int signo);
-int proc_ignore_signal (procinfo * pi, int signo);
-int proc_clear_current_fault (procinfo * pi);
-int proc_set_current_signal (procinfo * pi, int signo);
-int proc_clear_current_signal (procinfo * pi);
-int proc_set_gregs (procinfo * pi);
-int proc_set_fpregs (procinfo * pi);
-int proc_wait_for_stop (procinfo * pi);
-int proc_run_process (procinfo * pi, int step, int signo);
-int proc_kill (procinfo * pi, int signo);
-int proc_parent_pid (procinfo * pi);
-int proc_get_nthreads (procinfo * pi);
-int proc_get_current_thread (procinfo * pi);
-int proc_set_held_signals (procinfo * pi, gdb_sigset_t * sighold);
-int proc_set_traced_sysexit (procinfo * pi, sysset_t * sysset);
-int proc_set_traced_sysentry (procinfo * pi, sysset_t * sysset);
-int proc_set_traced_faults (procinfo * pi, fltset_t * fltset);
-int proc_set_traced_signals (procinfo * pi, gdb_sigset_t * sigset);
-
-int proc_update_threads (procinfo * pi);
-int proc_iterate_over_threads (procinfo * pi,
-			       int (*func) (procinfo *, procinfo *, void *),
-			       void *ptr);
-
-gdb_gregset_t *proc_get_gregs (procinfo * pi);
-gdb_fpregset_t *proc_get_fpregs (procinfo * pi);
-sysset_t *proc_get_traced_sysexit (procinfo * pi, sysset_t * save);
-sysset_t *proc_get_traced_sysentry (procinfo * pi, sysset_t * save);
-fltset_t *proc_get_traced_faults (procinfo * pi, fltset_t * save);
-gdb_sigset_t *proc_get_traced_signals (procinfo * pi, gdb_sigset_t * save);
-gdb_sigset_t *proc_get_held_signals (procinfo * pi, gdb_sigset_t * save);
-gdb_sigset_t *proc_get_pending_signals (procinfo * pi, gdb_sigset_t * save);
-gdb_sigaction_t *proc_get_signal_actions (procinfo * pi,
-					  gdb_sigaction_t *save);
-
-void proc_warn (procinfo * pi, char *func, int line);
-void proc_error (procinfo * pi, char *func, int line);
+static long proc_flags (procinfo * pi);
+static int proc_why (procinfo * pi);
+static int proc_what (procinfo * pi);
+static int proc_set_current_signal (procinfo * pi, int signo);
+static int proc_get_current_thread (procinfo * pi);
+static int proc_iterate_over_threads
+  (procinfo * pi,
+   int (*func) (procinfo *, procinfo *, void *),
+   void *ptr);
 
-void
+static void
 proc_warn (procinfo *pi, char *func, int line)
 {
   sprintf (errmsg, "procfs: %s line %d, %s", func, line, pi->pathname);
   print_sys_errmsg (errmsg, errno);
 }
 
-void
+static void
 proc_error (procinfo *pi, char *func, int line)
 {
   sprintf (errmsg, "procfs: %s line %d, %s", func, line, pi->pathname);
@@ -1084,7 +1049,7 @@ proc_error (procinfo *pi, char *func, int line)
    file descriptor is also only opened when it is needed.  Returns
    non-zero for success, zero for failure.  */
 
-int
+static int
 proc_get_status (procinfo *pi)
 {
   /* Status file descriptor is opened "lazily".  */
@@ -1178,7 +1143,7 @@ proc_get_status (procinfo *pi)
 
 /* Returns the process flags (pr_flags field).  */
 
-long
+static long
 proc_flags (procinfo *pi)
 {
   if (!pi->status_valid)
@@ -1201,7 +1166,7 @@ proc_flags (procinfo *pi)
 
 /* Returns the pr_why field (why the process stopped).  */
 
-int
+static int
 proc_why (procinfo *pi)
 {
   if (!pi->status_valid)
@@ -1217,7 +1182,7 @@ proc_why (procinfo *pi)
 
 /* Returns the pr_what field (details of why the process stopped).  */
 
-int
+static int
 proc_what (procinfo *pi)
 {
   if (!pi->status_valid)
@@ -1260,7 +1225,7 @@ proc_watchpoint_address (procinfo *pi, CORE_ADDR *addr)
 /* Returns the pr_nsysarg field (number of args to the current
    syscall).  */
 
-int
+static int
 proc_nsysarg (procinfo *pi)
 {
   if (!pi->status_valid)
@@ -1277,7 +1242,7 @@ proc_nsysarg (procinfo *pi)
 /* Returns the pr_sysarg field (pointer to the arguments of current
    syscall).  */
 
-long *
+static long *
 proc_sysargs (procinfo *pi)
 {
   if (!pi->status_valid)
@@ -1290,28 +1255,12 @@ proc_sysargs (procinfo *pi)
   return (long *) &pi->prstatus.pr_sysarg;
 #endif
 }
-
-/* Returns the pr_syscall field (id of current syscall if we are in
-   one).  */
-
-int
-proc_syscall (procinfo *pi)
-{
-  if (!pi->status_valid)
-    if (!proc_get_status (pi))
-      return 0;
-
-#ifdef NEW_PROC_API
-  return pi->prstatus.pr_lwp.pr_syscall;
-#else
-  return pi->prstatus.pr_syscall;
-#endif
-}
 #endif /* PIOCSSPCACT */
 
+#ifdef PROCFS_DONT_PIOCSSIG_CURSIG
 /* Returns the pr_cursig field (current signal).  */
 
-long
+static long
 proc_cursig (struct procinfo *pi)
 {
   if (!pi->status_valid)
@@ -1324,6 +1273,7 @@ proc_cursig (struct procinfo *pi)
   return pi->prstatus.pr_cursig;
 #endif
 }
+#endif /* PROCFS_DONT_PIOCSSIG_CURSIG */
 
 /* === I appologize for the messiness of this function.
    === This is an area where the different versions of
@@ -1458,7 +1408,7 @@ proc_modify_flag (procinfo *pi, long flag, long mode)
    become runnable when debugger closes all /proc fds.  Returns
    non-zero for success, zero for failure.  */
 
-int
+static int
 proc_set_run_on_last_close (procinfo *pi)
 {
   return proc_modify_flag (pi, PR_RLC, FLAG_SET);
@@ -1468,51 +1418,18 @@ proc_set_run_on_last_close (procinfo *pi)
    runnable when debugger closes its file handles.  Returns non-zero
    for success, zero for failure.  */
 
-int
+static int
 proc_unset_run_on_last_close (procinfo *pi)
 {
   return proc_modify_flag (pi, PR_RLC, FLAG_RESET);
 }
 
-#ifdef PR_KLC
-/* Set the kill_on_last_close flag.  Process with all threads will be
-   killed when debugger closes all /proc fds (or debugger exits or
-   dies).  Returns non-zero for success, zero for failure.  */
-
-int
-proc_set_kill_on_last_close (procinfo *pi)
-{
-  return proc_modify_flag (pi, PR_KLC, FLAG_SET);
-}
-
-/* Reset the kill_on_last_close flag.  Process will NOT be killed when
-   debugger closes its file handles (or exits or dies).  Returns
-   non-zero for success, zero for failure.  */
-
-int
-proc_unset_kill_on_last_close (procinfo *pi)
-{
-  return proc_modify_flag (pi, PR_KLC, FLAG_RESET);
-}
-#endif /* PR_KLC */
-
-/* Set inherit_on_fork flag.  If the process forks a child while we
-   are registered for events in the parent, then we will also recieve
-   events from the child.  Returns non-zero for success, zero for
-   failure.  */
-
-int
-proc_set_inherit_on_fork (procinfo *pi)
-{
-  return proc_modify_flag (pi, PR_FORK, FLAG_SET);
-}
-
 /* Reset inherit_on_fork flag.  If the process forks a child while we
    are registered for events in the parent, then we will NOT recieve
    events from the child.  Returns non-zero for success, zero for
    failure.  */
 
-int
+static int
 proc_unset_inherit_on_fork (procinfo *pi)
 {
   return proc_modify_flag (pi, PR_FORK, FLAG_RESET);
@@ -1523,7 +1440,7 @@ proc_unset_inherit_on_fork (procinfo *pi)
    (signal etc.), the remaining LWPs will continue to run.  Returns
    non-zero for success, zero for failure.  */
 
-int
+static int
 proc_set_async (procinfo *pi)
 {
   return proc_modify_flag (pi, PR_ASYNC, FLAG_SET);
@@ -1533,7 +1450,7 @@ proc_set_async (procinfo *pi)
    (signal etc.), then all other LWPs will stop as well.  Returns
    non-zero for success, zero for failure.  */
 
-int
+static int
 proc_unset_async (procinfo *pi)
 {
   return proc_modify_flag (pi, PR_ASYNC, FLAG_RESET);
@@ -1543,7 +1460,7 @@ proc_unset_async (procinfo *pi)
 /* Request the process/LWP to stop.  Does not wait.  Returns non-zero
    for success, zero for failure.  */
 
-int
+static int
 proc_stop_process (procinfo *pi)
 {
   int win;
@@ -1580,7 +1497,7 @@ proc_stop_process (procinfo *pi)
 /* Wait for the process or LWP to stop (block until it does).  Returns
    non-zero for success, zero for failure.  */
 
-int
+static int
 proc_wait_for_stop (procinfo *pi)
 {
   int win;
@@ -1636,7 +1553,7 @@ proc_wait_for_stop (procinfo *pi)
    any; if non-zero, set the current signal to this one.  Returns
    non-zero for success, zero for failure.  */
 
-int
+static int
 proc_run_process (procinfo *pi, int step, int signo)
 {
   int win;
@@ -1683,7 +1600,7 @@ proc_run_process (procinfo *pi, int step, int signo)
 /* Register to trace signals in the process or LWP.  Returns non-zero
    for success, zero for failure.  */
 
-int
+static int
 proc_set_traced_signals (procinfo *pi, gdb_sigset_t *sigset)
 {
   int win;
@@ -1723,7 +1640,7 @@ proc_set_traced_signals (procinfo *pi, gdb_sigset_t *sigset)
 /* Register to trace hardware faults in the process or LWP.  Returns
    non-zero for success, zero for failure.  */
 
-int
+static int
 proc_set_traced_faults (procinfo *pi, fltset_t *fltset)
 {
   int win;
@@ -1761,7 +1678,7 @@ proc_set_traced_faults (procinfo *pi, fltset_t *fltset)
 /* Register to trace entry to system calls in the process or LWP.
    Returns non-zero for success, zero for failure.  */
 
-int
+static int
 proc_set_traced_sysentry (procinfo *pi, sysset_t *sysset)
 {
   int win;
@@ -1806,7 +1723,7 @@ proc_set_traced_sysentry (procinfo *pi, sysset_t *sysset)
 /* Register to trace exit from system calls in the process or LWP.
    Returns non-zero for success, zero for failure.  */
 
-int
+static int
 proc_set_traced_sysexit (procinfo *pi, sysset_t *sysset)
 {
   int win;
@@ -1851,7 +1768,7 @@ proc_set_traced_sysexit (procinfo *pi, sysset_t *sysset)
 /* Specify the set of blocked / held signals in the process or LWP.
    Returns non-zero for success, zero for failure.  */
 
-int
+static int
 proc_set_held_signals (procinfo *pi, gdb_sigset_t *sighold)
 {
   int win;
@@ -1886,72 +1803,10 @@ proc_set_held_signals (procinfo *pi, gdb_sigset_t *sighold)
   return win;
 }
 
-/* Returns the set of signals that are pending in the process or LWP.
-   Will also copy the sigset if SAVE is non-zero.  */
-
-gdb_sigset_t *
-proc_get_pending_signals (procinfo *pi, gdb_sigset_t *save)
-{
-  gdb_sigset_t *ret = NULL;
-
-  /* We should never have to apply this operation to any procinfo
-     except the one for the main process.  If that ever changes for
-     any reason, then take out the following clause and replace it
-     with one that makes sure the ctl_fd is open.  */
-
-  if (pi->tid != 0)
-    pi = find_procinfo_or_die (pi->pid, 0);
-
-  if (!pi->status_valid)
-    if (!proc_get_status (pi))
-      return NULL;
-
-#ifdef NEW_PROC_API
-  ret = &pi->prstatus.pr_lwp.pr_lwppend;
-#else
-  ret = &pi->prstatus.pr_sigpend;
-#endif
-  if (save && ret)
-    memcpy (save, ret, sizeof (gdb_sigset_t));
-
-  return ret;
-}
-
-/* Returns the set of signal actions.  Will also copy the sigactionset
-   if SAVE is non-zero.  */
-
-gdb_sigaction_t *
-proc_get_signal_actions (procinfo *pi, gdb_sigaction_t *save)
-{
-  gdb_sigaction_t *ret = NULL;
-
-  /* We should never have to apply this operation to any procinfo
-     except the one for the main process.  If that ever changes for
-     any reason, then take out the following clause and replace it
-     with one that makes sure the ctl_fd is open.  */
-
-  if (pi->tid != 0)
-    pi = find_procinfo_or_die (pi->pid, 0);
-
-  if (!pi->status_valid)
-    if (!proc_get_status (pi))
-      return NULL;
-
-#ifdef NEW_PROC_API
-  ret = &pi->prstatus.pr_lwp.pr_action;
-#else
-  ret = &pi->prstatus.pr_action;
-#endif
-  if (save && ret)
-    memcpy (save, ret, sizeof (gdb_sigaction_t));
-
-  return ret;
-}
-
 /* Returns the set of signals that are held / blocked.  Will also copy
    the sigset if SAVE is non-zero.  */
 
-gdb_sigset_t *
+static gdb_sigset_t *
 proc_get_held_signals (procinfo *pi, gdb_sigset_t *save)
 {
   gdb_sigset_t *ret = NULL;
@@ -1991,7 +1846,7 @@ proc_get_held_signals (procinfo *pi, gdb_sigset_t *save)
 /* Returns the set of signals that are traced / debugged.  Will also
    copy the sigset if SAVE is non-zero.  */
 
-gdb_sigset_t *
+static gdb_sigset_t *
 proc_get_traced_signals (procinfo *pi, gdb_sigset_t *save)
 {
   gdb_sigset_t *ret = NULL;
@@ -2024,66 +1879,10 @@ proc_get_traced_signals (procinfo *pi, gdb_sigset_t *save)
   return ret;
 }
 
-/* Add SIGNO to the set of signals that are traced.  Returns non-zero
-   for success, zero for failure.  */
-
-int
-proc_trace_signal (procinfo *pi, int signo)
-{
-  gdb_sigset_t temp;
-
-  /* We should never have to apply this operation to any procinfo
-     except the one for the main process.  If that ever changes for
-     any reason, then take out the following clause and replace it
-     with one that makes sure the ctl_fd is open.  */
-
-  if (pi->tid != 0)
-    pi = find_procinfo_or_die (pi->pid, 0);
-
-  if (pi)
-    {
-      if (proc_get_traced_signals (pi, &temp))
-	{
-	  gdb_praddset (&temp, signo);
-	  return proc_set_traced_signals (pi, &temp);
-	}
-    }
-
-  return 0;	/* failure */
-}
-
-/* Remove SIGNO from the set of signals that are traced.  Returns
-   non-zero for success, zero for failure.  */
-
-int
-proc_ignore_signal (procinfo *pi, int signo)
-{
-  gdb_sigset_t temp;
-
-  /* We should never have to apply this operation to any procinfo
-     except the one for the main process.  If that ever changes for
-     any reason, then take out the following clause and replace it
-     with one that makes sure the ctl_fd is open.  */
-
-  if (pi->tid != 0)
-    pi = find_procinfo_or_die (pi->pid, 0);
-
-  if (pi)
-    {
-      if (proc_get_traced_signals (pi, &temp))
-	{
-	  gdb_prdelset (&temp, signo);
-	  return proc_set_traced_signals (pi, &temp);
-	}
-    }
-
-  return 0;	/* failure */
-}
-
 /* Returns the set of hardware faults that are traced /debugged.  Will
    also copy the faultset if SAVE is non-zero.  */
 
-fltset_t *
+static fltset_t *
 proc_get_traced_faults (procinfo *pi, fltset_t *save)
 {
   fltset_t *ret = NULL;
@@ -2119,7 +1918,7 @@ proc_get_traced_faults (procinfo *pi, fltset_t *save)
 /* Returns the set of syscalls that are traced /debugged on entry.
    Will also copy the syscall set if SAVE is non-zero.  */
 
-sysset_t *
+static sysset_t *
 proc_get_traced_sysentry (procinfo *pi, sysset_t *save)
 {
   sysset_t *ret = NULL;
@@ -2186,7 +1985,7 @@ proc_get_traced_sysentry (procinfo *pi, sysset_t *save)
 /* Returns the set of syscalls that are traced /debugged on exit.
    Will also copy the syscall set if SAVE is non-zero.  */
 
-sysset_t *
+static sysset_t *
 proc_get_traced_sysexit (procinfo *pi, sysset_t *save)
 {
   sysset_t * ret = NULL;
@@ -2254,7 +2053,7 @@ proc_get_traced_sysexit (procinfo *pi, sysset_t *save)
    not be sent to the process or LWP when it resumes.  Returns
    non-zero for success, zero for failure.  */
 
-int
+static int
 proc_clear_current_fault (procinfo *pi)
 {
   int win;
@@ -2288,7 +2087,7 @@ proc_clear_current_fault (procinfo *pi)
    trap back to the debugger.  Returns non-zero for success, zero for
    failure.  */
 
-int
+static int
 proc_set_current_signal (procinfo *pi, int signo)
 {
   int win;
@@ -2323,7 +2122,7 @@ proc_set_current_signal (procinfo *pi, int signo)
   get_last_target_status (&wait_ptid, &wait_status);
   if (ptid_equal (wait_ptid, inferior_ptid)
       && wait_status.kind == TARGET_WAITKIND_STOPPED
-      && wait_status.value.sig == target_signal_from_host (signo)
+      && wait_status.value.sig == gdb_signal_from_host (signo)
       && proc_get_status (pi)
 #ifdef NEW_PROC_API
       && pi->prstatus.pr_lwp.pr_info.si_signo == signo
@@ -2361,7 +2160,7 @@ proc_set_current_signal (procinfo *pi, int signo)
    process or LWP when it resumes.  Returns non-zero for success, zero
    for failure.  */
 
-int
+static int
 proc_clear_current_signal (procinfo *pi)
 {
   int win;
@@ -2404,7 +2203,7 @@ proc_clear_current_signal (procinfo *pi)
 /* Return the general-purpose registers for the process or LWP
    corresponding to PI.  Upon failure, return NULL.  */
 
-gdb_gregset_t *
+static gdb_gregset_t *
 proc_get_gregs (procinfo *pi)
 {
   if (!pi->status_valid || !pi->gregs_valid)
@@ -2428,7 +2227,7 @@ proc_get_gregs (procinfo *pi)
 /* Return the general-purpose registers for the process or LWP
    corresponding to PI.  Upon failure, return NULL.  */
 
-gdb_fpregset_t *
+static gdb_fpregset_t *
 proc_get_fpregs (procinfo *pi)
 {
 #ifdef NEW_PROC_API
@@ -2501,7 +2300,7 @@ proc_get_fpregs (procinfo *pi)
    corresponding to PI.  Return non-zero for success, zero for
    failure.  */
 
-int
+static int
 proc_set_gregs (procinfo *pi)
 {
   gdb_gregset_t *gregs;
@@ -2541,7 +2340,7 @@ proc_set_gregs (procinfo *pi)
    corresponding to PI.  Return non-zero for success, zero for
    failure.  */
 
-int
+static int
 proc_set_fpregs (procinfo *pi)
 {
   gdb_fpregset_t *fpregs;
@@ -2599,7 +2398,7 @@ proc_set_fpregs (procinfo *pi)
 /* Send a signal to the proc or lwp with the semantics of "kill()".
    Returns non-zero for success, zero for failure.  */
 
-int
+static int
 proc_kill (procinfo *pi, int signo)
 {
   int win;
@@ -2633,7 +2432,7 @@ proc_kill (procinfo *pi, int signo)
 /* Find the pid of the process that started this one.  Returns the
    parent process pid, or zero.  */
 
-int
+static int
 proc_parent_pid (procinfo *pi)
 {
   /* We should never have to apply this operation to any procinfo
@@ -2669,7 +2468,7 @@ procfs_address_to_host_pointer (CORE_ADDR addr)
 }
 #endif
 
-int
+static int
 proc_set_watchpoint (procinfo *pi, CORE_ADDR addr, int len, int wflags)
 {
 #if !defined (PCWATCH) && !defined (PIOCSWATCH)
@@ -2839,7 +2638,7 @@ procfs_find_LDT_entry (ptid_t ptid)
 
 #if defined (PIOCNTHR) && defined (PIOCTLIST)
 /* OSF version */
-int
+static int
 proc_get_nthreads (procinfo *pi)
 {
   int nthreads = 0;
@@ -2853,7 +2652,7 @@ proc_get_nthreads (procinfo *pi)
 #else
 #if defined (SYS_lwpcreate) || defined (SYS_lwp_create) /* FIXME: multiple */
 /* Solaris and Unixware version */
-int
+static int
 proc_get_nthreads (procinfo *pi)
 {
   if (!pi->status_valid)
@@ -2871,7 +2670,7 @@ proc_get_nthreads (procinfo *pi)
 
 #else
 /* Default version */
-int
+static int
 proc_get_nthreads (procinfo *pi)
 {
   return 0;
@@ -2888,7 +2687,7 @@ proc_get_nthreads (procinfo *pi)
 
 #if defined (SYS_lwpcreate) || defined (SYS_lwp_create) /* FIXME: multiple */
 /* Solaris and Unixware version */
-int
+static int
 proc_get_current_thread (procinfo *pi)
 {
   /* Note: this should be applied to the root procinfo for the
@@ -2913,7 +2712,7 @@ proc_get_current_thread (procinfo *pi)
 #else
 #if defined (PIOCNTHR) && defined (PIOCTLIST)
 /* OSF version */
-int
+static int
 proc_get_current_thread (procinfo *pi)
 {
 #if 0	/* FIXME: not ready for prime time?  */
@@ -2925,7 +2724,7 @@ proc_get_current_thread (procinfo *pi)
 
 #else
 /* Default version */
-int
+static int
 proc_get_current_thread (procinfo *pi)
 {
   return 0;
@@ -2939,7 +2738,7 @@ proc_get_current_thread (procinfo *pi)
    unfortunately requires a different method on every OS.  Returns
    non-zero for success, zero for failure.  */
 
-int
+static int
 proc_delete_dead_threads (procinfo *parent, procinfo *thread, void *ignore)
 {
   if (thread && parent)	/* sanity */
@@ -2953,7 +2752,7 @@ proc_delete_dead_threads (procinfo *parent, procinfo *thread, void *ignore)
 
 #if defined (PIOCLSTATUS)
 /* Solaris 2.5 (ioctl) version */
-int
+static int
 proc_update_threads (procinfo *pi)
 {
   gdb_prstatus_t *prstatus;
@@ -3002,7 +2801,7 @@ do_closedir_cleanup (void *dir)
   closedir (dir);
 }
 
-int
+static int
 proc_update_threads (procinfo *pi)
 {
   char pathname[MAX_PROC_NAME_SIZE + 16];
@@ -3050,7 +2849,7 @@ proc_update_threads (procinfo *pi)
 #else
 #ifdef PIOCTLIST
 /* OSF version */
-int
+static int
 proc_update_threads (procinfo *pi)
 {
   int nthreads, i;
@@ -3086,7 +2885,7 @@ proc_update_threads (procinfo *pi)
 }
 #else
 /* Default version */
-int
+static int
 proc_update_threads (procinfo *pi)
 {
   return 0;
@@ -3108,7 +2907,7 @@ proc_update_threads (procinfo *pi)
    function.  PTR is an opaque parameter for function.  Returns the
    first non-zero return value from the callee, or zero.  */
 
-int
+static int
 proc_iterate_over_threads (procinfo *pi,
 			   int (*func) (procinfo *, procinfo *, void *),
 			   void *ptr)
@@ -3987,7 +3786,7 @@ wait_again:
 		    else
 		      {
 			/* How to keep going without returning to wfi: */
-			target_resume (ptid, 0, TARGET_SIGNAL_0);
+			target_resume (ptid, 0, GDB_SIGNAL_0);
 			goto wait_again;
 		      }
 		  }
@@ -4013,7 +3812,7 @@ wait_again:
 		    /* This is an internal event and should be transparent
 		       to wfi, so resume the execution and wait again.	See
 		       comment in procfs_init_inferior() for more details.  */
-		    target_resume (ptid, 0, TARGET_SIGNAL_0);
+		    target_resume (ptid, 0, GDB_SIGNAL_0);
 		    goto wait_again;
 		  }
 #endif
@@ -4383,7 +4182,7 @@ make_signal_thread_runnable (procinfo *process, procinfo *pi, void *ptr)
 
 static void
 procfs_resume (struct target_ops *ops,
-	       ptid_t ptid, int step, enum target_signal signo)
+	       ptid_t ptid, int step, enum gdb_signal signo)
 {
   procinfo *pi, *thread;
   int native_signo;
@@ -4412,10 +4211,10 @@ procfs_resume (struct target_ops *ops,
 
   /* Convert signal to host numbering.  */
   if (signo == 0 ||
-      (signo == TARGET_SIGNAL_STOP && pi->ignore_next_sigstop))
+      (signo == GDB_SIGNAL_STOP && pi->ignore_next_sigstop))
     native_signo = 0;
   else
-    native_signo = target_signal_to_host (signo);
+    native_signo = gdb_signal_to_host (signo);
 
   pi->ignore_next_sigstop = 0;
 
@@ -4474,7 +4273,7 @@ procfs_pass_signals (int numsigs, unsigned char *pass_signals)
 
   for (signo = 0; signo < NSIG; signo++)
     {
-      int target_signo = target_signal_from_host (signo);
+      int target_signo = gdb_signal_from_host (signo);
       if (target_signo < numsigs && pass_signals[target_signo])
 	gdb_prdelset (&signals, signo);
     }
@@ -4958,7 +4757,7 @@ procfs_notice_thread (procinfo *pi, procinfo *thread, void *ptr)
 /* Query all the threads that the target knows about, and give them
    back to GDB to add to its list.  */
 
-void
+static void
 procfs_find_new_threads (struct target_ops *ops)
 {
   procinfo *pi;
@@ -5000,7 +4799,7 @@ procfs_thread_alive (struct target_ops *ops, ptid_t ptid)
 /* Convert PTID to a string.  Returns the string in a static
    buffer.  */
 
-char *
+static char *
 procfs_pid_to_str (struct target_ops *ops, ptid_t ptid)
 {
   static char buf[80];
@@ -5015,7 +4814,7 @@ procfs_pid_to_str (struct target_ops *ops, ptid_t ptid)
 
 /* Insert a watchpoint.  */
 
-int
+static int
 procfs_set_watchpoint (ptid_t ptid, CORE_ADDR addr, int len, int rwflag,
 		       int after)
 {
@@ -5390,7 +5189,8 @@ info_proc_mappings (procinfo *pi, int summary)
 /* Implement the "info proc" command.  */
 
 static void
-info_proc_cmd (char *args, int from_tty)
+procfs_info_proc (struct target_ops *ops, char *args,
+		  enum info_proc_what what)
 {
   struct cleanup *old_chain;
   procinfo *process  = NULL;
@@ -5401,6 +5201,20 @@ info_proc_cmd (char *args, int from_tty)
   int       tid      = 0;
   int       mappings = 0;
 
+  switch (what)
+    {
+    case IP_MINIMAL:
+      break;
+
+    case IP_MAPPINGS:
+    case IP_ALL:
+      mappings = 1;
+      break;
+
+    default:
+      error (_("Not supported on this target."));
+    }
+
   old_chain = make_cleanup (null_cleanup, 0);
   if (args)
     {
@@ -5419,14 +5233,6 @@ info_proc_cmd (char *args, int from_tty)
 	{
 	  tid = strtoul (argv[0] + 1, NULL, 10);
 	}
-      else if (strncmp (argv[0], "mappings", strlen (argv[0])) == 0)
-	{
-	  mappings = 1;
-	}
-      else
-	{
-	  /* [...] */
-	}
       argv++;
     }
   if (pid == 0)
@@ -5562,15 +5368,14 @@ proc_untrace_sysexit_cmd (char *args, int from_tty)
 }
 
 
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern void _initialize_procfs (void);
+
 void
 _initialize_procfs (void)
 {
   observer_attach_inferior_created (procfs_inferior_created);
 
-  add_info ("proc", info_proc_cmd, _("\
-Show /proc process information about any running process.\n\
-Specify process id, or use the program being debugged by default.\n\
-Specify keyword 'mappings' for detailed info on memory mappings."));
   add_com ("proc-trace-entry", no_class, proc_trace_sysentry_cmd,
 	   _("Give a trace of entries into the syscall."));
   add_com ("proc-trace-exit", no_class, proc_trace_sysexit_cmd,
@@ -5606,7 +5411,7 @@ procfs_first_available (void)
 static char *
 procfs_do_thread_registers (bfd *obfd, ptid_t ptid,
 			    char *note_data, int *note_size,
-			    enum target_signal stop_signal)
+			    enum gdb_signal stop_signal)
 {
   struct regcache *regcache = get_thread_regcache (ptid);
   gdb_gregset_t gregs;
@@ -5657,7 +5462,7 @@ struct procfs_corefile_thread_data {
   bfd *obfd;
   char *note_data;
   int *note_size;
-  enum target_signal stop_signal;
+  enum gdb_signal stop_signal;
 };
 
 static int
@@ -5680,14 +5485,14 @@ procfs_corefile_thread_callback (procinfo *pi, procinfo *thread, void *data)
 static int
 find_signalled_thread (struct thread_info *info, void *data)
 {
-  if (info->suspend.stop_signal != TARGET_SIGNAL_0
+  if (info->suspend.stop_signal != GDB_SIGNAL_0
       && ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid))
     return 1;
 
   return 0;
 }
 
-static enum target_signal
+static enum gdb_signal
 find_stop_signal (void)
 {
   struct thread_info *info =
@@ -5696,7 +5501,7 @@ find_stop_signal (void)
   if (info)
     return info->suspend.stop_signal;
   else
-    return TARGET_SIGNAL_0;
+    return GDB_SIGNAL_0;
 }
 
 static char *
@@ -5713,13 +5518,14 @@ procfs_make_note_section (bfd *obfd, int *note_size)
   struct procfs_corefile_thread_data thread_args;
   gdb_byte *auxv;
   int auxv_len;
-  enum target_signal stop_signal;
+  enum gdb_signal stop_signal;
 
   if (get_exec_file (0))
     {
       strncpy (fname, lbasename (get_exec_file (0)), sizeof (fname));
-      strncpy (psargs, get_exec_file (0),
-	       sizeof (psargs));
+      fname[sizeof (fname) - 1] = 0;
+      strncpy (psargs, get_exec_file (0), sizeof (psargs));
+      psargs[sizeof (psargs) - 1] = 0;
 
       inf_args = get_inferior_args ();
       if (inf_args && *inf_args &&
diff --git a/gdb/progspace.c b/gdb/progspace.c
index 7175fa6..1065c27 100644
--- a/gdb/progspace.c
+++ b/gdb/progspace.c
@@ -149,6 +149,7 @@ release_program_space (struct program_space *pspace)
     free_address_space (pspace->aspace);
   resize_section_table (&pspace->target_sections,
 			-resize_section_table (&pspace->target_sections, 0));
+  clear_program_space_solib_cache (pspace);
     /* Discard any data modules have associated with the PSPACE.  */
   program_space_free_data (pspace);
   xfree (pspace);
@@ -503,6 +504,19 @@ switch_to_program_space_and_thread (struct program_space *pspace)
 
 

 
+/* See progspace.h.  */
+
+void
+clear_program_space_solib_cache (struct program_space *pspace)
+{
+  VEC_free (so_list_ptr, pspace->added_solibs);
+
+  free_char_ptr_vec (pspace->deleted_solibs);
+  pspace->deleted_solibs = NULL;
+}
+
+

+
 /* Keep a registry of per-program_space data-pointers required by other GDB
    modules.  */
 
diff --git a/gdb/progspace.h b/gdb/progspace.h
index 9822f70..3db3938 100644
--- a/gdb/progspace.h
+++ b/gdb/progspace.h
@@ -23,6 +23,7 @@
 
 #include "target.h"
 #include "vec.h"
+#include "gdb_vecs.h"
 
 struct target_ops;
 struct bfd;
@@ -32,6 +33,9 @@ struct exec;
 struct address_space;
 struct program_space_data;
 
+typedef struct so_list *so_list_ptr;
+DEF_VEC_P (so_list_ptr);
+
 /* A program space represents a symbolic view of an address space.
    Roughly speaking, it holds all the data associated with a
    non-running-yet program (main executable, main symbols), and when
@@ -188,6 +192,14 @@ struct program_space
     /* Number of calls to solib_add.  */
     unsigned solib_add_generation;
 
+    /* When an solib is added, it is also added to this vector.  This
+       is so we can properly report solib changes to the user.  */
+    VEC (so_list_ptr) *added_solibs;
+
+    /* When an solib is removed, its name is added to this vector.
+       This is so we can properly report solib changes to the user.  */
+    VEC (char_ptr) *deleted_solibs;
+
     /* Per pspace data-pointers required by other GDB modules.  */
     void **data;
     unsigned num_data;
@@ -278,6 +290,11 @@ extern void update_address_spaces (void);
    anymore.  */
 extern void prune_program_spaces (void);
 
+/* Reset saved solib data at the start of an solib event.  This lets
+   us properly collect the data when calling solib_add, so it can then
+   later be printed.  */
+extern void clear_program_space_solib_cache (struct program_space *);
+
 /* Keep a registry of per-pspace data-pointers required by other GDB
    modules.  */
 
diff --git a/gdb/psympriv.h b/gdb/psympriv.h
index 7cf9260..16b9b83 100644
--- a/gdb/psympriv.h
+++ b/gdb/psympriv.h
@@ -54,6 +54,17 @@ struct partial_symbol
 #define PSYMBOL_DOMAIN(psymbol)	(psymbol)->domain
 #define PSYMBOL_CLASS(psymbol)		(psymbol)->aclass
 
+/* A convenience enum to give names to some constants used when
+   searching psymtabs.  This is internal to psymtab and should not be
+   used elsewhere.  */
+
+enum psymtab_search_status
+  {
+    PST_NOT_SEARCHED,
+    PST_SEARCHED_AND_FOUND,
+    PST_SEARCHED_AND_NOT_FOUND
+  };
+
 /* Each source file that has not been fully read in is represented by
    a partial_symtab.  This contains the information on where in the
    executable the debugging symbols for a specific file are, and a
@@ -71,7 +82,9 @@ struct partial_symtab
 
   struct partial_symtab *next;
 
-  /* Name of the source file which this partial_symtab defines.  */
+  /* Name of the source file which this partial_symtab defines,
+     or if the psymtab is anonymous then a descriptive name for
+     debugging purposes, or "".  It must not be NULL.  */
 
   const char *filename;
 
@@ -111,6 +124,35 @@ struct partial_symtab
 
   int number_of_dependencies;
 
+  /* If NULL, this is an ordinary partial symbol table.
+
+     If non-NULL, this holds a single includer of this partial symbol
+     table, and this partial symbol table is a shared one.
+
+     A shared psymtab is one that is referenced by multiple other
+     psymtabs, and which conceptually has its contents directly
+     included in those.
+
+     Shared psymtabs have special semantics.  When a search finds a
+     symbol in a shared table, we instead return one of the non-shared
+     tables that include this one.
+
+     A shared psymtabs can be referred to by other shared ones.
+
+     The psymtabs that refer to a shared psymtab will list the shared
+     psymtab in their 'dependencies' array.
+
+     In DWARF terms, a shared psymtab is a DW_TAG_partial_unit; but
+     of course using a name based on that would be too confusing, so
+     "shared" was chosen instead.
+     
+     Only a single user is needed because, when expanding a shared
+     psymtab, we only need to expand its "canonical" non-shared user.
+     The choice of which one should be canonical is left to the
+     debuginfo reader; it can be arbitrary.  */
+
+  struct partial_symtab *user;
+
   /* Global symbol list.  This list will be sorted after readin to
      improve access.  Binary search will be the usual method of
      finding a symbol within it.  globals_offset is an integer offset
@@ -142,6 +184,14 @@ struct partial_symtab
 
   unsigned char psymtabs_addrmap_supported;
 
+  /* True if the name of this partial symtab is not a source file name.  */
+
+  unsigned char anonymous;
+
+  /* A flag that is temporarily used when searching psymtabs.  */
+
+  ENUM_BITFIELD (psymtab_search_status) searched_flag : 2;
+
   /* Pointer to symtab eventually allocated for this source file, 0 if
      !readin or if we haven't looked for the symtab after it was readin.  */
 
@@ -164,13 +214,12 @@ extern void sort_pst_symbols (struct partial_symtab *);
 
 /* Add any kind of symbol to a psymbol_allocation_list.  */
 
-extern const
-struct partial_symbol *add_psymbol_to_list (const char *, int,
-					    int, domain_enum,
-					    enum address_class,
-					    struct psymbol_allocation_list *,
-					    long, CORE_ADDR,
-					    enum language, struct objfile *);
+extern void add_psymbol_to_list (const char *, int,
+				 int, domain_enum,
+				 enum address_class,
+				 struct psymbol_allocation_list *,
+				 long, CORE_ADDR,
+				 enum language, struct objfile *);
 
 extern void init_psymbol_list (struct objfile *, int);
 
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index d5cfa8b..5623e2d 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -45,10 +45,6 @@ struct psymbol_bcache
   struct bcache *bcache;
 };
 
-/* A fast way to get from a psymtab to its symtab (after the first time).  */
-#define PSYMTAB_TO_SYMTAB(pst)  \
-    ((pst) -> symtab != NULL ? (pst) -> symtab : psymtab_to_symtab (pst))
-
 static struct partial_symbol *match_partial_symbol (struct partial_symtab *,
 						    int,
 						    const char *, domain_enum,
@@ -139,6 +135,10 @@ partial_map_expand_apply (struct objfile *objfile,
 {
   struct symtab *last_made = objfile->symtabs;
 
+  /* Shared psymtabs should never be seen here.  Instead they should
+     be handled properly by the caller.  */
+  gdb_assert (pst->user == NULL);
+
   /* Don't visit already-expanded psymtabs.  */
   if (pst->readin)
     return 0;
@@ -164,10 +164,23 @@ partial_map_symtabs_matching_filename (struct objfile *objfile,
 {
   struct partial_symtab *pst;
   const char *name_basename = lbasename (name);
+  int name_len = strlen (name);
+  int is_abs = IS_ABSOLUTE_PATH (name);
 
   ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, pst)
   {
-    if (FILENAME_CMP (name, pst->filename) == 0)
+    /* We can skip shared psymtabs here, because any file name will be
+       attached to the unshared psymtab.  */
+    if (pst->user != NULL)
+      continue;
+
+    /* Anonymous psymtabs don't have a file name.  */
+    if (pst->anonymous)
+      continue;
+
+    if (FILENAME_CMP (name, pst->filename) == 0
+	|| (!is_abs && compare_filenames_for_search (pst->filename,
+						     name, name_len)))
       {
 	if (partial_map_expand_apply (objfile, name, full_path, real_path,
 				      pst, callback, data))
@@ -186,7 +199,9 @@ partial_map_symtabs_matching_filename (struct objfile *objfile,
       {
 	psymtab_to_fullname (pst);
 	if (pst->fullname != NULL
-	    && FILENAME_CMP (full_path, pst->fullname) == 0)
+	    && (FILENAME_CMP (full_path, pst->fullname) == 0
+		|| (!is_abs && compare_filenames_for_search (pst->fullname,
+							     name, name_len))))
 	  {
 	    if (partial_map_expand_apply (objfile, name, full_path, real_path,
 					  pst, callback, data))
@@ -203,7 +218,10 @@ partial_map_symtabs_matching_filename (struct objfile *objfile,
             rp = gdb_realpath (pst->fullname);
             make_cleanup (xfree, rp);
           }
-	if (rp != NULL && FILENAME_CMP (real_path, rp) == 0)
+	if (rp != NULL
+	    && (FILENAME_CMP (real_path, rp) == 0
+		|| (!is_abs && compare_filenames_for_search (real_path,
+							     name, name_len))))
 	  {
 	    if (partial_map_expand_apply (objfile, name, full_path, real_path,
 					  pst, callback, data))
@@ -212,17 +230,6 @@ partial_map_symtabs_matching_filename (struct objfile *objfile,
       }
   }
 
-  /* Now, search for a matching tail (only if name doesn't have any dirs).  */
-
-  if (name_basename == name)
-    ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, pst)
-    {
-      if (FILENAME_CMP (lbasename (pst->filename), name) == 0)
-	if (partial_map_expand_apply (objfile, name, full_path, real_path, pst,
-				      callback, data))
-	  return 1;
-    }
-
   return 0;
 }
 
@@ -394,7 +401,8 @@ find_pc_sect_symtab_from_partial (struct objfile *objfile,
 	warning (_("\
 (Internal error: pc %s in read in psymtab, but not in symtab.)\n"),
 		 paddress (get_objfile_arch (ps->objfile), pc));
-      return PSYMTAB_TO_SYMTAB (ps);
+      psymtab_to_symtab (ps);
+      return ps->symtab;
     }
   return NULL;
 }
@@ -506,13 +514,14 @@ lookup_symbol_aux_psymtabs (struct objfile *objfile,
 {
   struct partial_symtab *ps;
   const int psymtab_index = (block_index == GLOBAL_BLOCK ? 1 : 0);
+  struct symtab *stab_best = NULL;
 
   ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps)
   {
     if (!ps->readin && lookup_partial_symbol (ps, name, psymtab_index, domain))
       {
 	struct symbol *sym = NULL;
-	struct symtab *stab = PSYMTAB_TO_SYMTAB (ps);
+	struct symtab *stab = psymtab_to_symtab (ps);
 
 	/* Some caution must be observed with overloaded functions
 	   and methods, since the psymtab will not contain any overload
@@ -526,13 +535,18 @@ lookup_symbol_aux_psymtabs (struct objfile *objfile,
 	  }
 
 	if (sym && strcmp_iw (SYMBOL_SEARCH_NAME (sym), name) == 0)
-	  return stab;
+	  {
+	    if (!TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)))
+	      return stab;
+
+	    stab_best = stab;
+	  }
 
 	/* Keep looking through other psymtabs.  */
       }
   }
 
-  return NULL;
+  return stab_best;
 }
 
 /* Look in PST for a symbol in DOMAIN whose name matches NAME.  Search
@@ -761,13 +775,16 @@ lookup_partial_symbol (struct partial_symtab *pst, const char *name,
 }
 
 /* Get the symbol table that corresponds to a partial_symtab.
-   This is fast after the first time you do it.  In fact, there
-   is an even faster macro PSYMTAB_TO_SYMTAB that does the fast
-   case inline.  */
+   This is fast after the first time you do it.  */
 
 static struct symtab *
 psymtab_to_symtab (struct partial_symtab *pst)
 {
+  /* If it is a shared psymtab, find an unshared psymtab that includes
+     it.  Any such psymtab will do.  */
+  while (pst->user != NULL)
+    pst = pst->user;
+
   /* If it's been looked up before, return it.  */
   if (pst->symtab)
     return pst->symtab;
@@ -843,7 +860,7 @@ find_last_source_symtab_from_partial (struct objfile *ofp)
 			  "readin pst found and no symtabs."));
 	}
       else
-	return PSYMTAB_TO_SYMTAB (cs_pst);
+	return psymtab_to_symtab (cs_pst);
     }
   return NULL;
 }
@@ -960,8 +977,16 @@ dump_psymtab (struct objfile *objfile, struct partial_symtab *psymtab,
   struct gdbarch *gdbarch = get_objfile_arch (objfile);
   int i;
 
-  fprintf_filtered (outfile, "\nPartial symtab for source file %s ",
-		    psymtab->filename);
+  if (psymtab->anonymous)
+    {
+      fprintf_filtered (outfile, "\nAnonymous partial symtab (%s) ",
+			psymtab->filename);
+    }
+  else
+    {
+      fprintf_filtered (outfile, "\nPartial symtab for source file %s ",
+			psymtab->filename);
+    }
   fprintf_filtered (outfile, "(object ");
   gdb_print_host_address (psymtab, outfile);
   fprintf_filtered (outfile, ")\n\n");
@@ -1008,6 +1033,12 @@ dump_psymtab (struct objfile *objfile, struct partial_symtab *psymtab,
       fprintf_filtered (outfile, " %s\n",
 			psymtab->dependencies[i]->filename);
     }
+  if (psymtab->user != NULL)
+    {
+      fprintf_filtered (outfile, "  Shared partial symtab with user ");
+      gdb_print_host_address (psymtab->user, outfile);
+      fprintf_filtered (outfile, "\n");
+    }
   if (psymtab->n_global_syms > 0)
     {
       print_partial_symbols (gdbarch,
@@ -1105,8 +1136,12 @@ read_psymtabs_with_filename (struct objfile *objfile, const char *filename)
 
   ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, p)
     {
+      /* Anonymous psymtabs don't have a name of a source file.  */
+      if (p->anonymous)
+	continue;
+
       if (filename_cmp (filename, p->filename) == 0)
-	PSYMTAB_TO_SYMTAB (p);
+	psymtab_to_symtab (p);
     }
 }
 
@@ -1124,6 +1159,15 @@ map_symbol_filenames_psymtab (struct objfile *objfile,
       if (ps->readin)
 	continue;
 
+      /* We can skip shared psymtabs here, because any file name will be
+	 attached to the unshared psymtab.  */
+      if (ps->user != NULL)
+	continue;
+
+      /* Anonymous psymtabs don't have a file name.  */
+      if (ps->anonymous)
+	continue;
+
       QUIT;
       if (need_fullname)
 	fullname = psymtab_to_fullname (ps);
@@ -1133,10 +1177,6 @@ map_symbol_filenames_psymtab (struct objfile *objfile,
     }
 }
 
-int find_and_open_source (const char *filename,
-			  const char *dirname,
-			  char **fullname);
-
 /* Finds the fullname that a partial_symtab represents.
 
    If this functions finds the fullname, it will save it in ps->fullname
@@ -1152,6 +1192,8 @@ psymtab_to_fullname (struct partial_symtab *ps)
 
   if (!ps)
     return NULL;
+  if (ps->anonymous)
+    return NULL;
 
   /* Use cached copy if we have it.
      We rely on forget_cached_source_info being called appropriately
@@ -1194,11 +1236,11 @@ map_block (const char *name, domain_enum namespace, struct objfile *objfile,
 	   int (*callback) (struct block *, struct symbol *, void *),
 	   void *data, symbol_compare_ftype *match)
 {
-  struct dict_iterator iter;
+  struct block_iterator iter;
   struct symbol *sym;
 
-  for (sym = dict_iter_match_first (BLOCK_DICT (block), name, match, &iter);
-       sym != NULL; sym = dict_iter_match_next (name, match, &iter))
+  for (sym = block_iter_match_first (block, name, match, &iter);
+       sym != NULL; sym = block_iter_match_next (name, match, &iter))
     {
       if (symbol_matches_domain (SYMBOL_LANGUAGE (sym), 
 				 SYMBOL_DOMAIN (sym), namespace))
@@ -1233,7 +1275,7 @@ map_matching_symbols_psymtab (const char *name, domain_enum namespace,
 	  || match_partial_symbol (ps, global, name, namespace, match,
 				   ordered_compare))
 	{
-	  struct symtab *s = PSYMTAB_TO_SYMTAB (ps);
+	  struct symtab *s = psymtab_to_symtab (ps);
 	  struct block *block;
 
 	  if (s == NULL || !s->primary)
@@ -1248,71 +1290,130 @@ map_matching_symbols_psymtab (const char *name, domain_enum namespace,
     }
 }	    
 
+/* A helper for expand_symtabs_matching_via_partial that handles
+   searching included psymtabs.  This returns 1 if a symbol is found,
+   and zero otherwise.  It also updates the 'searched_flag' on the
+   various psymtabs that it searches.  */
+
+static int
+recursively_search_psymtabs (struct partial_symtab *ps,
+			     struct objfile *objfile,
+			     enum search_domain kind,
+			     int (*name_matcher) (const char *, void *),
+			     void *data)
+{
+  struct partial_symbol **psym;
+  struct partial_symbol **bound, **gbound, **sbound;
+  int keep_going = 1;
+  int result = PST_SEARCHED_AND_NOT_FOUND;
+  int i;
+
+  if (ps->searched_flag != PST_NOT_SEARCHED)
+    return ps->searched_flag == PST_SEARCHED_AND_FOUND;
+
+  /* Recurse into shared psymtabs first, because they may have already
+     been searched, and this could save some time.  */
+  for (i = 0; i < ps->number_of_dependencies; ++i)
+    {
+      int r;
+
+      /* Skip non-shared dependencies, these are handled elsewhere.  */
+      if (ps->dependencies[i]->user == NULL)
+	continue;
+
+      r = recursively_search_psymtabs (ps->dependencies[i],
+				       objfile, kind, name_matcher, data);
+      if (r != 0)
+	{
+	  ps->searched_flag = PST_SEARCHED_AND_FOUND;
+	  return 1;
+	}
+    }
+
+  gbound = (objfile->global_psymbols.list
+	    + ps->globals_offset + ps->n_global_syms);
+  sbound = (objfile->static_psymbols.list
+	    + ps->statics_offset + ps->n_static_syms);
+  bound = gbound;
+
+  /* Go through all of the symbols stored in a partial
+     symtab in one loop.  */
+  psym = objfile->global_psymbols.list + ps->globals_offset;
+  while (keep_going)
+    {
+      if (psym >= bound)
+	{
+	  if (bound == gbound && ps->n_static_syms != 0)
+	    {
+	      psym = objfile->static_psymbols.list + ps->statics_offset;
+	      bound = sbound;
+	    }
+	  else
+	    keep_going = 0;
+	  continue;
+	}
+      else
+	{
+	  QUIT;
+
+	  if ((kind == ALL_DOMAIN
+	       || (kind == VARIABLES_DOMAIN
+		   && SYMBOL_CLASS (*psym) != LOC_TYPEDEF
+		   && SYMBOL_CLASS (*psym) != LOC_BLOCK)
+	       || (kind == FUNCTIONS_DOMAIN
+		   && SYMBOL_CLASS (*psym) == LOC_BLOCK)
+	       || (kind == TYPES_DOMAIN
+		   && SYMBOL_CLASS (*psym) == LOC_TYPEDEF))
+	      && (*name_matcher) (SYMBOL_SEARCH_NAME (*psym), data))
+	    {
+	      /* Found a match, so notify our caller.  */
+	      result = PST_SEARCHED_AND_FOUND;
+	      keep_going = 0;
+	    }
+	}
+      psym++;
+    }
+
+  ps->searched_flag = result;
+  return result == PST_SEARCHED_AND_FOUND;
+}
+
 static void
 expand_symtabs_matching_via_partial
   (struct objfile *objfile,
    int (*file_matcher) (const char *, void *),
-   int (*name_matcher) (const struct language_defn *, const char *, void *),
+   int (*name_matcher) (const char *, void *),
    enum search_domain kind,
    void *data)
 {
   struct partial_symtab *ps;
 
+  /* Clear the search flags.  */
   ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps)
     {
-      struct partial_symbol **psym;
-      struct partial_symbol **bound, **gbound, **sbound;
-      int keep_going = 1;
+      ps->searched_flag = PST_NOT_SEARCHED;
+    }
 
+  ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps)
+    {
       if (ps->readin)
 	continue;
 
-      if (file_matcher && ! (*file_matcher) (ps->filename, data))
+      /* We skip shared psymtabs because file-matching doesn't apply
+	 to them; but we search them later in the loop.  */
+      if (ps->user != NULL)
 	continue;
 
-      gbound = objfile->global_psymbols.list
-	+ ps->globals_offset + ps->n_global_syms;
-      sbound = objfile->static_psymbols.list
-	+ ps->statics_offset + ps->n_static_syms;
-      bound = gbound;
-
-      /* Go through all of the symbols stored in a partial
-	 symtab in one loop.  */
-      psym = objfile->global_psymbols.list + ps->globals_offset;
-      while (keep_going)
+      if (file_matcher)
 	{
-	  if (psym >= bound)
-	    {
-	      if (bound == gbound && ps->n_static_syms != 0)
-		{
-		  psym = objfile->static_psymbols.list + ps->statics_offset;
-		  bound = sbound;
-		}
-	      else
-		keep_going = 0;
-	      continue;
-	    }
-	  else
-	    {
-	      QUIT;
-
-	      if ((kind == ALL_DOMAIN
-		   || (kind == VARIABLES_DOMAIN
-		       && SYMBOL_CLASS (*psym) != LOC_TYPEDEF
-		       && SYMBOL_CLASS (*psym) != LOC_BLOCK)
-		   || (kind == FUNCTIONS_DOMAIN
-		       && SYMBOL_CLASS (*psym) == LOC_BLOCK)
-		   || (kind == TYPES_DOMAIN
-		       && SYMBOL_CLASS (*psym) == LOC_TYPEDEF))
-		  && (*name_matcher) (current_language,
-				      SYMBOL_NATURAL_NAME (*psym), data))
-		{
-		  PSYMTAB_TO_SYMTAB (ps);
-		  keep_going = 0;
-		}
-	    }
-	  psym++;
+	  if (ps->anonymous)
+	    continue;
+	  if (! (*file_matcher) (ps->filename, data))
+	    continue;
 	}
+
+      if (recursively_search_psymtabs (ps, objfile, kind, name_matcher, data))
+	psymtab_to_symtab (ps);
     }
 }
 
@@ -1569,18 +1670,7 @@ append_psymbol_to_list (struct psymbol_allocation_list *list,
    Since one arg is a struct, we pass in a ptr and deref it (sigh).
    Return the partial symbol that has been added.  */
 
-/* NOTE: carlton/2003-09-11: The reason why we return the partial
-   symbol is so that callers can get access to the symbol's demangled
-   name, which they don't have any cheap way to determine otherwise.
-   (Currenly, dwarf2read.c is the only file who uses that information,
-   though it's possible that other readers might in the future.)
-   Elena wasn't thrilled about that, and I don't blame her, but we
-   couldn't come up with a better way to get that information.  If
-   it's needed in other situations, we could consider breaking up
-   SYMBOL_SET_NAMES to provide access to the demangled name lookup
-   cache.  */
-
-const struct partial_symbol *
+void
 add_psymbol_to_list (const char *name, int namelength, int copy_name,
 		     domain_enum domain,
 		     enum address_class class,
@@ -1600,11 +1690,10 @@ add_psymbol_to_list (const char *name, int namelength, int copy_name,
   /* Do not duplicate global partial symbols.  */
   if (list == &objfile->global_psymbols
       && !added)
-    return psym;
+    return;
 
   /* Save pointer to partial symbol in psymtab, growing symtab if needed.  */
   append_psymbol_to_list (list, psym, objfile);
-  return psym;
 }
 
 /* Initialize storage for partial symbols.  */
@@ -1674,6 +1763,26 @@ allocate_psymtab (const char *filename, struct objfile *objfile)
   psymtab->next = objfile->psymtabs;
   objfile->psymtabs = psymtab;
 
+  if (symtab_create_debug)
+    {
+      /* Be a bit clever with debugging messages, and don't print objfile
+	 every time, only when it changes.  */
+      static char *last_objfile_name = NULL;
+
+      if (last_objfile_name == NULL
+	  || strcmp (last_objfile_name, objfile->name) != 0)
+	{
+	  xfree (last_objfile_name);
+	  last_objfile_name = xstrdup (objfile->name);
+	  fprintf_unfiltered (gdb_stdlog,
+			      "Creating one or more psymtabs for objfile %s ...\n",
+			      last_objfile_name);
+	}
+      fprintf_unfiltered (gdb_stdlog,
+			  "Created psymtab %s for module %s.\n",
+			  host_address_to_string (psymtab), filename);
+    }
+
   return (psymtab);
 }
 
@@ -1874,7 +1983,7 @@ maintenance_check_symtabs (char *ignore, int from_tty)
   {
     struct gdbarch *gdbarch = get_objfile_arch (objfile);
 
-    s = PSYMTAB_TO_SYMTAB (ps);
+    s = psymtab_to_symtab (ps);
     if (s == NULL)
       continue;
     bv = BLOCKVECTOR (s);
@@ -1945,8 +2054,7 @@ maintenance_check_symtabs (char *ignore, int from_tty)
 

 
 void
-expand_partial_symbol_names (int (*fun) (const struct language_defn *,
-					 const char *, void *),
+expand_partial_symbol_names (int (*fun) (const char *, void *),
 			     void *data)
 {
   struct objfile *objfile;
diff --git a/gdb/psymtab.h b/gdb/psymtab.h
index 8fd91ee..4089d46 100644
--- a/gdb/psymtab.h
+++ b/gdb/psymtab.h
@@ -30,8 +30,7 @@ extern struct psymbol_bcache *psymbol_bcache_init (void);
 extern void psymbol_bcache_free (struct psymbol_bcache *);
 extern struct bcache *psymbol_bcache_get_bcache (struct psymbol_bcache *);
 
-void expand_partial_symbol_names (int (*fun) (const struct language_defn *,
-					      const char *, void *),
+void expand_partial_symbol_names (int (*fun) (const char *, void *),
 				  void *data);
 
 void map_partial_symbol_filenames (symbol_filename_ftype *fun, void *data,
diff --git a/gdb/python/lib/gdb/command/explore.py b/gdb/python/lib/gdb/command/explore.py
new file mode 100644
index 0000000..aad3671
--- /dev/null
+++ b/gdb/python/lib/gdb/command/explore.py
@@ -0,0 +1,755 @@
+# GDB 'explore' command.
+# Copyright (C) 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+"""Implementation of the GDB 'explore' command using the GDB Python API."""
+
+import gdb
+
+class Explorer(object):
+    """Internal class which invokes other explorers."""
+
+    # This map is filled by the Explorer.init_env() function
+    type_code_to_explorer_map = { }
+
+    _SCALAR_TYPE_LIST = (
+        gdb.TYPE_CODE_CHAR,
+        gdb.TYPE_CODE_INT,
+        gdb.TYPE_CODE_BOOL,
+        gdb.TYPE_CODE_FLT,
+        gdb.TYPE_CODE_VOID,
+        gdb.TYPE_CODE_ENUM,
+    )
+
+    @staticmethod
+    def guard_expr(expr):
+        length = len(expr)
+        guard = False
+
+        if expr[0] == '(' and expr[length-1] == ')':
+            pass
+        else:
+            i = 0
+            while i < length:
+                c = expr[i]
+                if (c == '_' or ('a' <= c and c <= 'z') or
+                    ('A' <= c and c <= 'Z') or ('0' <= c and c <= '9')):
+                    pass
+                else:
+                    guard = True
+                    break
+                i += 1
+
+        if guard:
+            return "(" + expr + ")"
+        else:
+            return expr
+
+    @staticmethod
+    def explore_expr(expr, value, is_child):
+        """Main function to explore an expression value.
+
+        Arguments:
+            expr: The expression string that is being explored.
+            value: The gdb.Value value of the expression.
+            is_child: Boolean value to indicate if the expression is a child.
+                      An expression is a child if it is derived from the main
+                      expression entered by the user.  For example, if the user
+                      entered an expression which evaluates to a struct, then
+                      when exploring the fields of the struct, is_child is set
+                      to True internally.
+
+        Returns:
+            No return value.
+        """
+        type_code = value.type.code
+        if type_code in Explorer.type_code_to_explorer_map:
+            explorer_class = Explorer.type_code_to_explorer_map[type_code]
+            while explorer_class.explore_expr(expr, value, is_child):
+                pass
+        else:
+            print ("Explorer for type '%s' not yet available.\n" %
+                   str(value.type))
+
+    @staticmethod
+    def explore_type(name, datatype, is_child):
+        """Main function to explore a data type.
+
+        Arguments:
+            name: The string representing the path to the data type being
+                  explored.
+            datatype: The gdb.Type value of the data type being explored.
+            is_child: Boolean value to indicate if the name is a child.
+                      A name is a child if it is derived from the main name
+                      entered by the user.  For example, if the user entered
+                      the name of struct type, then when exploring the fields
+                      of the struct, is_child is set to True internally.
+
+        Returns:
+            No return value.
+        """
+        type_code = datatype.code
+        if type_code in Explorer.type_code_to_explorer_map:
+            explorer_class = Explorer.type_code_to_explorer_map[type_code]
+            while explorer_class.explore_type(name, datatype, is_child):
+                pass
+        else:
+            print ("Explorer for type '%s' not yet available.\n" %
+                   str(datatype))
+
+    @staticmethod
+    def init_env():
+        """Initializes the Explorer environment.
+        This function should be invoked before starting any exploration.  If
+        invoked before an exploration, it need not be invoked for subsequent
+        explorations.
+        """
+        Explorer.type_code_to_explorer_map = {
+            gdb.TYPE_CODE_CHAR : ScalarExplorer,
+            gdb.TYPE_CODE_INT : ScalarExplorer,
+            gdb.TYPE_CODE_BOOL : ScalarExplorer,
+            gdb.TYPE_CODE_FLT : ScalarExplorer,
+            gdb.TYPE_CODE_VOID : ScalarExplorer,
+            gdb.TYPE_CODE_ENUM : ScalarExplorer,
+            gdb.TYPE_CODE_STRUCT : CompoundExplorer,
+            gdb.TYPE_CODE_UNION : CompoundExplorer,
+            gdb.TYPE_CODE_PTR : PointerExplorer,
+            gdb.TYPE_CODE_REF : ReferenceExplorer,
+            gdb.TYPE_CODE_TYPEDEF : TypedefExplorer,
+            gdb.TYPE_CODE_ARRAY : ArrayExplorer
+        }
+
+    @staticmethod
+    def is_scalar_type(type):
+        """Checks whether a type is a scalar type.
+        A type is a scalar type of its type is
+            gdb.TYPE_CODE_CHAR or
+            gdb.TYPE_CODE_INT or
+            gdb.TYPE_CODE_BOOL or
+            gdb.TYPE_CODE_FLT or
+            gdb.TYPE_CODE_VOID or
+            gdb.TYPE_CODE_ENUM.
+
+        Arguments:
+            type: The type to be checked.
+
+        Returns:
+            'True' if 'type' is a scalar type. 'False' otherwise.
+        """
+        return type.code in Explorer._SCALAR_TYPE_LIST
+
+    @staticmethod
+    def return_to_parent_value():
+        """A utility function which prints that the current exploration session
+        is returning to the parent value. Useful when exploring values.
+        """
+        print "\nReturning to parent value...\n"
+        
+    @staticmethod
+    def return_to_parent_value_prompt():
+        """A utility function which prompts the user to press the 'enter' key
+        so that the exploration session can shift back to the parent value.
+        Useful when exploring values.
+        """
+        raw_input("\nPress enter to return to parent value: ")
+        
+    @staticmethod
+    def return_to_enclosing_type():
+        """A utility function which prints that the current exploration session
+        is returning to the enclosing type.  Useful when exploring types.
+        """
+        print "\nReturning to enclosing type...\n"
+        
+    @staticmethod
+    def return_to_enclosing_type_prompt():
+        """A utility function which prompts the user to press the 'enter' key
+        so that the exploration session can shift back to the enclosing type.
+        Useful when exploring types.
+        """
+        raw_input("\nPress enter to return to enclosing type: ")
+
+
+class ScalarExplorer(object):
+    """Internal class used to explore scalar values."""
+
+    @staticmethod
+    def explore_expr(expr, value, is_child):
+        """Function to explore scalar values.
+        See Explorer.explore_expr and Explorer.is_scalar_type for more
+        information.
+        """
+        print ("'%s' is a scalar value of type '%s'." %
+               (expr, value.type))
+        print "%s = %s" % (expr, str(value))
+
+        if is_child:
+            Explorer.return_to_parent_value_prompt()
+            Explorer.return_to_parent_value()
+
+        return False
+
+    @staticmethod
+    def explore_type(name, datatype, is_child):
+        """Function to explore scalar types.
+        See Explorer.explore_type and Explorer.is_scalar_type for more
+        information.
+        """
+        if datatype.code == gdb.TYPE_CODE_ENUM:
+            if is_child:
+                print ("%s is of an enumerated type '%s'." %
+                       (name, str(datatype)))
+            else:
+                print "'%s' is an enumerated type." % name
+        else:
+            if is_child:
+                print ("%s is of a scalar type '%s'." %
+                       (name, str(datatype)))
+            else:
+                print "'%s' is a scalar type." % name
+
+        if is_child:
+            Explorer.return_to_enclosing_type_prompt()
+            Explorer.return_to_enclosing_type()
+
+        return False
+
+
+class PointerExplorer(object):
+    """Internal class used to explore pointer values."""
+
+    @staticmethod
+    def explore_expr(expr, value, is_child):
+        """Function to explore pointer values.
+        See Explorer.explore_expr for more information.
+        """
+        print ("'%s' is a pointer to a value of type '%s'" %
+               (expr, str(value.type.target())))
+        option  = raw_input("Continue exploring it as a pointer to a single "
+                            "value [y/n]: ")
+        if option == "y":
+            deref_value = None
+            try:
+                deref_value = value.dereference()
+                str(deref_value)
+            except gdb.MemoryError:
+                print ("'%s' a pointer pointing to an invalid memory "
+                       "location." % expr)
+                if is_child:
+                    Explorer.return_to_parent_value_prompt()
+                return False
+            Explorer.explore_expr("*%s" % Explorer.guard_expr(expr),
+                                  deref_value, is_child)
+            return False
+        
+        option  = raw_input("Continue exploring it as a pointer to an "
+                            "array [y/n]: ")
+        if option == "y":
+            while True:
+                index = 0
+                try:
+                    index = int(raw_input("Enter the index of the element you "
+                                          "want to explore in '%s': " % expr))
+                except ValueError:
+                    break
+                element_expr = "%s[%d]" % (Explorer.guard_expr(expr), index)
+                element = value[index]
+                try:
+                    str(element)
+                except gdb.MemoryError:
+                    print "Cannot read value at index %d." % index
+                    continue
+                Explorer.explore_expr(element_expr, element, True)
+            return False
+
+        if is_child:
+            Explorer.return_to_parent_value()
+        return False
+
+    @staticmethod
+    def explore_type(name, datatype, is_child):
+        """Function to explore pointer types.
+        See Explorer.explore_type for more information.
+        """
+        target_type = datatype.target()
+        print ("\n%s is a pointer to a value of type '%s'." %
+               (name, str(target_type)))
+
+        Explorer.explore_type("the pointee type of %s" % name,
+                              target_type,
+                              is_child)
+        return False
+
+
+class ReferenceExplorer(object):
+    """Internal class used to explore reference (TYPE_CODE_REF) values."""
+
+    @staticmethod
+    def explore_expr(expr, value, is_child):
+        """Function to explore array values.
+        See Explorer.explore_expr for more information.
+        """
+        referenced_value = value.referenced_value()
+        Explorer.explore_expr(expr, referenced_value, is_child)
+        return False
+
+    @staticmethod
+    def explore_type(name, datatype, is_child):
+        """Function to explore pointer types.
+        See Explorer.explore_type for more information.
+        """
+        target_type = datatype.target()
+        Explorer.explore_type(name, target_type, is_child)
+        return False
+
+
+class ArrayExplorer(object):
+    """Internal class used to explore arrays."""
+
+    @staticmethod
+    def explore_expr(expr, value, is_child):
+        """Function to explore array values.
+        See Explorer.explore_expr for more information.
+        """
+        target_type = value.type.target()
+        print ("'%s' is an array of '%s'." % (expr, str(target_type)))
+        index = 0
+        try:
+            index = int(raw_input("Enter the index of the element you want to "
+                                  "explore in '%s': " % expr))
+        except ValueError:
+            if is_child:
+                Explorer.return_to_parent_value()
+            return False
+
+        element = None
+        try:
+            element = value[index]
+            str(element)
+        except gdb.MemoryError:
+            print "Cannot read value at index %d." % index
+            raw_input("Press enter to continue... ")
+            return True
+            
+        Explorer.explore_expr("%s[%d]" % (Explorer.guard_expr(expr), index),
+                              element, True)
+        return True
+
+    @staticmethod
+    def explore_type(name, datatype, is_child):
+        """Function to explore array types.
+        See Explorer.explore_type for more information.
+        """
+        target_type = datatype.target()
+        print "%s is an array of '%s'." % (name, str(target_type))
+
+        Explorer.explore_type("the array element of %s" % name, target_type,
+                              is_child)
+        return False
+
+
+class CompoundExplorer(object):
+    """Internal class used to explore struct, classes and unions."""
+
+    @staticmethod
+    def _print_fields(print_list):
+        """Internal function which prints the fields of a struct/class/union.
+        """
+        max_field_name_length = 0
+        for pair in print_list:
+            if max_field_name_length < len(pair[0]):
+                max_field_name_length = len(pair[0])
+
+        format_str = "  {0:>%d} = {1}" % max_field_name_length
+        for pair in print_list:
+            print format_str.format(pair[0], pair[1])
+
+    @staticmethod
+    def _get_real_field_count(fields):
+        real_field_count = 0;
+        for field in fields:
+            if not field.artificial:
+                real_field_count = real_field_count + 1
+
+        return real_field_count
+
+    @staticmethod
+    def explore_expr(expr, value, is_child):
+        """Function to explore structs/classes and union values.
+        See Explorer.explore_expr for more information.
+        """
+        datatype = value.type
+        type_code = datatype.code
+        fields = datatype.fields()
+
+        if type_code == gdb.TYPE_CODE_STRUCT:
+            type_desc = "struct/class"
+        else:
+            type_desc = "union"
+
+        if CompoundExplorer._get_real_field_count(fields) == 0:
+            print ("The value of '%s' is a %s of type '%s' with no fields." %
+                   (expr, type_desc, str(value.type)))
+            if is_child:
+                Explorer.return_to_parent_value_prompt()
+            return False
+
+        print ("The value of '%s' is a %s of type '%s' with the following "
+              "fields:\n" % (expr, type_desc, str(value.type)))
+
+        has_explorable_fields = False
+        choice_to_compound_field_map = { }
+        current_choice = 0
+        print_list = [ ]
+        for field in fields:
+            if field.artificial:
+                continue
+            field_full_name = Explorer.guard_expr(expr) + "." + field.name
+            if field.is_base_class:
+                field_value = value.cast(field.type)
+            else:
+                field_value = value[field.name]
+            literal_value = ""
+            if type_code == gdb.TYPE_CODE_UNION:
+                literal_value = ("<Enter %d to explore this field of type "
+                                 "'%s'>" % (current_choice, str(field.type)))
+                has_explorable_fields = True
+            else:
+                if Explorer.is_scalar_type(field.type):
+                    literal_value = ("%s .. (Value of type '%s')" %
+                                     (str(field_value), str(field.type)))
+                else:
+                    if field.is_base_class:
+                        field_desc = "base class"
+                    else:
+                        field_desc = "field"
+                    literal_value = ("<Enter %d to explore this %s of type "
+                                     "'%s'>" %
+                                     (current_choice, field_desc,
+                                      str(field.type)))
+                    has_explorable_fields = True
+
+            choice_to_compound_field_map[str(current_choice)] = (
+                field_full_name, field_value)
+            current_choice = current_choice + 1
+
+            print_list.append((field.name, literal_value))
+
+        CompoundExplorer._print_fields(print_list)
+        print ""
+
+        if has_explorable_fields:
+            choice = raw_input("Enter the field number of choice: ")
+            if choice in choice_to_compound_field_map:
+                Explorer.explore_expr(choice_to_compound_field_map[choice][0],
+                                      choice_to_compound_field_map[choice][1],
+                                      True)
+                return True
+            else:
+                if is_child:
+                    Explorer.returning_to_parent_value_message()
+        else:
+            if is_child:
+                Explorer.return_to_parent_value_prompt()
+
+        return False
+
+    @staticmethod
+    def explore_type(name, datatype, is_child):
+        """Function to explore struct/class and union types.
+        See Explorer.explore_type for more information.
+        """
+        type_code = datatype.code
+        type_desc = ""
+        if type_code == gdb.TYPE_CODE_STRUCT:
+            type_desc = "struct/class"
+        else:
+            type_desc = "union"
+
+        fields = datatype.fields()
+        if CompoundExplorer._get_real_field_count(fields) == 0:
+            if is_child:
+                print ("%s is a %s of type '%s' with no fields." %
+                       (name, type_desc, str(datatype)))
+                Explorer.return_to_enclosing_type_prompt()
+            else:
+                print "'%s' is a %s with no fields." % (name, type_desc)
+            return False
+
+        if is_child:
+            print ("%s is a %s of type '%s' "
+                   "with the following fields:\n" %
+                   (name, type_desc, str(datatype)))
+        else:
+            print ("'%s' is a %s with the following "
+                   "fields:\n" %
+                   (name, type_desc))
+
+        has_explorable_fields = False
+        current_choice = 0
+        choice_to_compound_field_map = { }
+        print_list = [ ]
+        for field in fields:
+            if field.artificial:
+                continue
+            if field.is_base_class:
+                field_desc = "base class"
+            else:
+                field_desc = "field"
+            rhs = ("<Enter %d to explore this %s of type '%s'>" %
+                   (current_choice, field_desc, str(field.type)))
+            print_list.append((field.name, rhs))
+            choice_to_compound_field_map[str(current_choice)] = (
+                field.name, field.type, field_desc)
+            current_choice = current_choice + 1
+
+        CompoundExplorer._print_fields(print_list)
+        print ""
+
+        if len(choice_to_compound_field_map) > 0:
+            choice = raw_input("Enter the field number of choice: ")
+            if choice in choice_to_compound_field_map:
+                if is_child:
+                    new_name = ("%s '%s' of %s" % 
+                                (choice_to_compound_field_map[choice][2],
+                                 choice_to_compound_field_map[choice][0],
+                                 name))
+                else:
+                    new_name = ("%s '%s' of '%s'" % 
+                                (choice_to_compound_field_map[choice][2],
+                                 choice_to_compound_field_map[choice][0],
+                                 name))
+                Explorer.explore_type(new_name,
+                    choice_to_compound_field_map[choice][1], True)
+                return True
+            else:
+                if is_child:
+                    Explorer.return_to_enclosing_type()
+        else:
+            if is_child:
+                Explorer.return_to_enclosing_type_prompt()
+
+        return False
+           
+
+class TypedefExplorer(object):
+    """Internal class used to explore values whose type is a typedef."""
+
+    @staticmethod
+    def explore_expr(expr, value, is_child):
+        """Function to explore typedef values.
+        See Explorer.explore_expr for more information.
+        """
+        actual_type = value.type.strip_typedefs()
+        print ("The value of '%s' is of type '%s' "
+               "which is a typedef of type '%s'" %
+               (expr, str(value.type), str(actual_type)))
+
+        Explorer.explore_expr(expr, value.cast(actual_type), is_child)
+        return False
+
+    @staticmethod
+    def explore_type(name, datatype, is_child):
+        """Function to explore typedef types.
+        See Explorer.explore_type for more information.
+        """
+        actual_type = datatype.strip_typedefs()
+        if is_child:
+            print ("The type of %s is a typedef of type '%s'." %
+                   (name, str(actual_type)))
+        else:
+            print ("The type '%s' is a typedef of type '%s'." %
+                   (name, str(actual_type)))
+
+        Explorer.explore_type(name, actual_type, is_child)
+        return False
+
+
+class ExploreUtils(object):
+    """Internal class which provides utilities for the main command classes."""
+
+    @staticmethod
+    def check_args(name, arg_str):
+        """Utility to check if adequate number of arguments are passed to an
+        explore command.
+
+        Arguments:
+            name: The name of the explore command.
+            arg_str: The argument string passed to the explore command.
+
+        Returns:
+            True if adequate arguments are passed, false otherwise.
+
+        Raises:
+            gdb.GdbError if adequate arguments are not passed.
+        """
+        if len(arg_str) < 1:
+            raise gdb.GdbError("ERROR: '%s' requires an argument."
+                               % name)
+            return False
+        else:
+            return True
+
+    @staticmethod
+    def get_type_from_str(type_str):
+        """A utility function to deduce the gdb.Type value from a string
+        representing the type.
+
+        Arguments:
+            type_str: The type string from which the gdb.Type value should be
+                      deduced.
+
+        Returns:
+            The deduced gdb.Type value if possible, None otherwise.
+        """
+        try:
+            # Assume the current language to be C/C++ and make a try.
+            return gdb.parse_and_eval("(%s *)0" % type_str).type.target()
+        except RuntimeError:
+            # If assumption of current language to be C/C++ was wrong, then
+            # lookup the type using the API.
+            try:
+                return gdb.lookup_type(type_str)
+            except RuntimeError:
+                return None
+
+    @staticmethod
+    def get_value_from_str(value_str):
+        """A utility function to deduce the gdb.Value value from a string
+        representing the value.
+
+        Arguments:
+            value_str: The value string from which the gdb.Value value should
+                       be deduced.
+
+        Returns:
+            The deduced gdb.Value value if possible, None otherwise.
+        """
+        try:
+            return gdb.parse_and_eval(value_str)
+        except RuntimeError:
+            return None
+
+
+class ExploreCommand(gdb.Command):
+    """Explore a value or a type valid in the current context.
+
+       Usage:
+
+         explore ARG
+
+         - ARG is either a valid expression or a type name.
+         - At any stage of exploration, hit the return key (instead of a
+           choice, if any) to return to the enclosing type or value.
+    """
+
+    def __init__(self):
+        super(ExploreCommand, self).__init__(name = "explore",
+                                             command_class = gdb.COMMAND_DATA,
+                                             prefix = True)
+
+    def invoke(self, arg_str, from_tty):
+        if ExploreUtils.check_args("explore", arg_str) == False:
+            return
+
+        # Check if it is a value
+        value = ExploreUtils.get_value_from_str(arg_str)
+        if value is not None:
+            Explorer.explore_expr(arg_str, value, False)
+            return
+
+        # If it is not a value, check if it is a type
+        datatype = ExploreUtils.get_type_from_str(arg_str)
+        if datatype is not None:
+            Explorer.explore_type(arg_str, datatype, False)
+            return
+
+        # If it is neither a value nor a type, raise an error.
+        raise gdb.GdbError(
+            ("'%s' neither evaluates to a value nor is a type "
+             "in the current context." %
+             arg_str))
+
+
+class ExploreValueCommand(gdb.Command):
+    """Explore value of an expression valid in the current context.
+
+       Usage:
+
+         explore value ARG
+
+         - ARG is a valid expression.
+         - At any stage of exploration, hit the return key (instead of a
+           choice, if any) to return to the enclosing value.
+    """
+ 
+    def __init__(self):
+        super(ExploreValueCommand, self).__init__(
+            name = "explore value", command_class = gdb.COMMAND_DATA)
+
+    def invoke(self, arg_str, from_tty):
+        if ExploreUtils.check_args("explore value", arg_str) == False:
+            return
+
+        value = ExploreUtils.get_value_from_str(arg_str)
+        if value is None:
+            raise gdb.GdbError(
+                (" '%s' does not evaluate to a value in the current "
+                 "context." %
+                 arg_str))
+            return
+
+        Explorer.explore_expr(arg_str, value, False)
+
+
+class ExploreTypeCommand(gdb.Command):            
+    """Explore a type or the type of an expression valid in the current
+       context.
+
+       Usage:
+
+         explore type ARG
+
+         - ARG is a valid expression or a type name.
+         - At any stage of exploration, hit the return key (instead of a
+           choice, if any) to return to the enclosing type.
+    """
+
+    def __init__(self):
+        super(ExploreTypeCommand, self).__init__(
+            name = "explore type", command_class = gdb.COMMAND_DATA)
+
+    def invoke(self, arg_str, from_tty):
+        if ExploreUtils.check_args("explore type", arg_str) == False:
+            return
+
+        datatype = ExploreUtils.get_type_from_str(arg_str)
+        if datatype is not None:
+            Explorer.explore_type(arg_str, datatype, False)
+            return
+
+        value = ExploreUtils.get_value_from_str(arg_str)
+        if value is not None:
+            print "'%s' is of type '%s'." % (arg_str, str(value.type))
+            Explorer.explore_type(str(value.type), value.type, False)
+
+        raise gdb.GdbError(("'%s' is not a type or value in the current "
+                            "context." % arg_str))
+
+
+Explorer.init_env()
+
+ExploreCommand()
+ExploreValueCommand()
+ExploreTypeCommand()
diff --git a/gdb/python/lib/gdb/printing.py b/gdb/python/lib/gdb/printing.py
index 98cfd27..b4e798d 100644
--- a/gdb/python/lib/gdb/printing.py
+++ b/gdb/python/lib/gdb/printing.py
@@ -206,3 +206,53 @@ class RegexpCollectionPrettyPrinter(PrettyPrinter):
 
         # Cannot find a pretty printer.  Return None.
         return None
+
+# A helper class for printing enum types.  This class is instantiated
+# with a list of enumerators to print a particular Value.
+class _EnumInstance:
+    def __init__(self, enumerators, val):
+        self.enumerators = enumerators
+        self.val = val
+
+    def to_string(self):
+        flag_list = []
+        v = long(self.val)
+        any_found = False
+        for (e_name, e_value) in self.enumerators:
+            if v & e_value != 0:
+                flag_list.append(e_name)
+                v = v & ~e_value
+                any_found = True
+        if not any_found or v != 0:
+            # Leftover value.
+            flag_list.append('<unknown: 0x%x>' % v)
+        return "0x%x [%s]" % (self.val, " | ".join(flag_list))
+
+class FlagEnumerationPrinter(PrettyPrinter):
+    """A pretty-printer which can be used to print a flag-style enumeration.
+    A flag-style enumeration is one where the enumerators are or'd
+    together to create values.  The new printer will print these
+    symbolically using '|' notation.  The printer must be registered
+    manually.  This printer is most useful when an enum is flag-like,
+    but has some overlap.  GDB's built-in printing will not handle
+    this case, but this printer will attempt to."""
+
+    def __init__(self, enum_type):
+        super(FlagEnumerationPrinter, self).__init__(enum_type)
+        self.initialized = False
+
+    def __call__(self, val):
+        if not self.initialized:
+            self.initialized = True
+            flags = gdb.lookup_type(self.name)
+            self.enumerators = []
+            for field in flags.fields():
+                self.enumerators.append((field.name, field.enumval))
+            # Sorting the enumerators by value usually does the right
+            # thing.
+            self.enumerators.sort(key = lambda x: x.enumval)
+
+        if self.enabled:
+            return _EnumInstance(self.enumerators, val)
+        else:
+            return None
diff --git a/gdb/python/lib/gdb/types.py b/gdb/python/lib/gdb/types.py
index aca84f3..66c9528 100644
--- a/gdb/python/lib/gdb/types.py
+++ b/gdb/python/lib/gdb/types.py
@@ -86,8 +86,8 @@ def make_enum_dict(enum_type):
         raise TypeError("not an enum type")
     enum_dict = {}
     for field in enum_type.fields():
-        # The enum's value is stored in "bitpos".
-        enum_dict[field.name] = field.bitpos
+        # The enum's value is stored in "enumval".
+        enum_dict[field.name] = field.enumval
     return enum_dict
 
 
diff --git a/gdb/python/py-auto-load.c b/gdb/python/py-auto-load.c
index 3abb82a..8512129 100644
--- a/gdb/python/py-auto-load.c
+++ b/gdb/python/py-auto-load.c
@@ -18,213 +18,76 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
-#include "filenames.h"
 #include "gdb_string.h"
-#include "gdb_regex.h"
 #include "top.h"
 #include "exceptions.h"
-#include "command.h"
 #include "gdbcmd.h"
-#include "observer.h"
-#include "progspace.h"
 #include "objfiles.h"
 #include "python.h"
 #include "cli/cli-cmds.h"
-
-/* Internal-use flag to enable/disable auto-loading.
-   This is true if we should auto-load python code when an objfile is opened,
-   false otherwise.
-
-   Both auto_load_scripts && gdbpy_global_auto_load must be true to enable
-   auto-loading.
-
-   This flag exists to facilitate deferring auto-loading during start-up
-   until after ./.gdbinit has been read; it may augment the search directories
-   used to find the scripts.  */
-int gdbpy_global_auto_load = 1;
+#include "auto-load.h"
 
 #ifdef HAVE_PYTHON
 
 #include "python-internal.h"
 
-/* NOTE: It's trivial to also support auto-loading normal gdb scripts.
-   There has yet to be a need so it's not implemented.  */
-
 /* The suffix of per-objfile scripts to auto-load.
    E.g. When the program loads libfoo.so, look for libfoo-gdb.py.  */
 #define GDBPY_AUTO_FILE_NAME "-gdb.py"
 
-/* The section to look for scripts (in file formats that support sections).
+/* The section to look for Python auto-loaded scripts (in file formats that
+   support sections).
    Each entry in this section is a byte of value 1, and then the nul-terminated
    name of the script.  The script name may include a directory.
    The leading byte is to allow upward compatible extensions.  */
 #define GDBPY_AUTO_SECTION_NAME ".debug_gdb_scripts"
 
-/* For scripts specified in .debug_gdb_scripts, multiple objfiles may load
-   the same script.  There's no point in loading the script multiple times,
-   and there can be a lot of objfiles and scripts, so we keep track of scripts
-   loaded this way.  */
-
-struct auto_load_pspace_info
-{
-  /* For each program space we keep track of loaded scripts.  */
-  struct htab *loaded_scripts;
-
-  /* Non-zero if we've issued the warning about an auto-load script not being
-     found.  We only want to issue this warning once.  */
-  int script_not_found_warning_printed;
-};
+/* User-settable option to enable/disable auto-loading of Python scripts:
+   set auto-load python-scripts on|off
+   This is true if we should auto-load associated Python scripts when an
+   objfile is opened, false otherwise.  */
+static int auto_load_python_scripts = 1;
 
-/* Objects of this type are stored in the loaded script hash table.  */
+static void gdbpy_load_auto_script_for_objfile (struct objfile *objfile,
+						FILE *file,
+						const char *filename);
 
-struct loaded_script
-{
-  /* Name as provided by the objfile.  */
-  const char *name;
-  /* Full path name or NULL if script wasn't found (or was otherwise
-     inaccessible).  */
-  const char *full_path;
-};
-
-/* User-settable option to enable/disable auto-loading:
-   set auto-load-scripts on|off
-   This is true if we should auto-load associated scripts when an objfile
-   is opened, false otherwise.
-   At the moment, this only affects python scripts, but there's no reason
-   one couldn't also have other kinds of auto-loaded scripts, and there's
-   no reason to have them each controlled by a separate flag.
-   So we elide "python" from the name here and in the option.
-   The fact that it lives here is just an implementation detail.  */
-static int auto_load_scripts = 1;
-
-/* Per-program-space data key.  */
-static const struct program_space_data *auto_load_pspace_data;
+/* "show" command for the auto_load_python_scripts configuration variable.  */
 
 static void
-auto_load_pspace_data_cleanup (struct program_space *pspace, void *arg)
-{
-  struct auto_load_pspace_info *info;
-
-  info = program_space_data (pspace, auto_load_pspace_data);
-  if (info != NULL)
-    {
-      if (info->loaded_scripts)
-	htab_delete (info->loaded_scripts);
-      xfree (info);
-    }
-}
-
-/* Get the current autoload data.  If none is found yet, add it now.  This
-   function always returns a valid object.  */
-
-static struct auto_load_pspace_info *
-get_auto_load_pspace_data (struct program_space *pspace)
-{
-  struct auto_load_pspace_info *info;
-
-  info = program_space_data (pspace, auto_load_pspace_data);
-  if (info == NULL)
-    {
-      info = XZALLOC (struct auto_load_pspace_info);
-      set_program_space_data (pspace, auto_load_pspace_data, info);
-    }
-
-  return info;
-}
-
-/* Hash function for the loaded script hash.  */
-
-static hashval_t
-hash_loaded_script_entry (const void *data)
+show_auto_load_python_scripts (struct ui_file *file, int from_tty,
+			       struct cmd_list_element *c, const char *value)
 {
-  const struct loaded_script *e = data;
-
-  return htab_hash_string (e->name);
+  fprintf_filtered (file, _("Auto-loading of Python scripts is %s.\n"), value);
 }
 
-/* Equality function for the loaded script hash.  */
+/* Definition of script language for Python scripts.  */
 
-static int
-eq_loaded_script_entry (const void *a, const void *b)
-{
-  const struct loaded_script *ea = a;
-  const struct loaded_script *eb = b;
-
-  return strcmp (ea->name, eb->name) == 0;
-}
+static const struct script_language script_language_python
+  = { GDBPY_AUTO_FILE_NAME, gdbpy_load_auto_script_for_objfile };
 
-/* Initialize the table to track loaded scripts.
-   Each entry is hashed by the full path name.  */
+/* Wrapper of source_python_script_for_objfile for script_language_python.  */
 
 static void
-init_loaded_scripts_info (struct auto_load_pspace_info *pspace_info)
-{
-  /* Choose 31 as the starting size of the hash table, somewhat arbitrarily.
-     Space for each entry is obtained with one malloc so we can free them
-     easily.  */
-
-  pspace_info->loaded_scripts = htab_create (31,
-					     hash_loaded_script_entry,
-					     eq_loaded_script_entry,
-					     xfree);
-
-  pspace_info->script_not_found_warning_printed = FALSE;
-}
-
-/* Wrapper on get_auto_load_pspace_data to also allocate the hash table
-   for loading scripts.  */
-
-static struct auto_load_pspace_info *
-get_auto_load_pspace_data_for_loading (struct program_space *pspace)
-{
-  struct auto_load_pspace_info *info;
-
-  info = get_auto_load_pspace_data (pspace);
-  if (info->loaded_scripts == NULL)
-    init_loaded_scripts_info (info);
-
-  return info;
-}
-
-/* Add script NAME to hash table HTAB.
-   FULL_PATH is NULL if the script wasn't found.
-   The result is true if the script was already in the hash table.  */
-
-static int
-maybe_add_script (struct htab *htab, const char *name, const char *full_path)
+gdbpy_load_auto_script_for_objfile (struct objfile *objfile, FILE *file,
+				    const char *filename)
 {
-  struct loaded_script **slot, entry;
-  int in_hash_table;
-
-  entry.name = name;
-  entry.full_path = full_path;
-  slot = (struct loaded_script **) htab_find_slot (htab, &entry, INSERT);
-  in_hash_table = *slot != NULL;
+  int is_safe;
+  struct auto_load_pspace_info *pspace_info;
 
-  /* If this script is not in the hash table, add it.  */
+  is_safe = file_is_auto_load_safe (filename,
+				    _("auto-load: Loading Python script \"%s\" "
+				      "by extension for objfile \"%s\".\n"),
+				    filename, objfile->name);
 
-  if (! in_hash_table)
-    {
-      char *p;
-
-      /* Allocate all space in one chunk so it's easier to free.  */
-      *slot = xmalloc (sizeof (**slot)
-		       + strlen (name) + 1
-		       + (full_path != NULL ? (strlen (full_path) + 1) : 0));
-      p = ((char*) *slot) + sizeof (**slot);
-      strcpy (p, name);
-      (*slot)->name = p;
-      if (full_path != NULL)
-	{
-	  p += strlen (p) + 1;
-	  strcpy (p, full_path);
-	  (*slot)->full_path = p;
-	}
-      else
-	(*slot)->full_path = NULL;
-    }
+  /* Add this script to the hash table too so "info auto-load python-scripts"
+     can print it.  */
+  pspace_info = get_auto_load_pspace_data_for_loading (current_program_space);
+  maybe_add_script (pspace_info, is_safe, filename, filename,
+		    &script_language_python);
 
-  return in_hash_table;
+  if (is_safe)
+    source_python_script_for_objfile (objfile, file, filename);
 }
 
 /* Load scripts specified in OBJFILE.
@@ -254,6 +117,7 @@ source_section_scripts (struct objfile *objfile, const char *source_name,
       FILE *stream;
       char *full_path;
       int opened, in_hash_table;
+      struct cleanup *back_to;
 
       if (*p != 1)
 	{
@@ -286,6 +150,32 @@ source_section_scripts (struct objfile *objfile, const char *source_name,
       opened = find_and_open_script (file, 1 /*search_path*/,
 				     &stream, &full_path);
 
+      back_to = make_cleanup (null_cleanup, NULL);
+      if (opened)
+	{
+	  make_cleanup_fclose (stream);
+	  make_cleanup (xfree, full_path);
+
+	  if (!file_is_auto_load_safe (full_path,
+				       _("auto-load: Loading Python script "
+					 "\"%s\" from section \"%s\" of "
+					 "objfile \"%s\".\n"),
+				       full_path, GDBPY_AUTO_SECTION_NAME,
+				       objfile->name))
+	    opened = 0;
+	}
+      else
+	{
+	  full_path = NULL;
+
+	  /* We don't throw an error, the program is still debuggable.  */
+	  if (script_not_found_warning_print (pspace_info))
+	    warning (_("Missing auto-load scripts referenced in section %s\n\
+of file %s\n\
+Use `info auto-load python [REGEXP]' to list them."),
+		     GDBPY_AUTO_SECTION_NAME, objfile->name);
+	}
+
       /* If one script isn't found it's not uncommon for more to not be
 	 found either.  We don't want to print an error message for each
 	 script, too much noise.  Instead, we print the warning once and tell
@@ -293,29 +183,14 @@ source_section_scripts (struct objfile *objfile, const char *source_name,
 
 	 IWBN if complaints.c were more general-purpose.  */
 
-      in_hash_table = maybe_add_script (pspace_info->loaded_scripts, file,
-					opened ? full_path : NULL);
+      in_hash_table = maybe_add_script (pspace_info, opened, file, full_path,
+					&script_language_python);
 
-      if (! opened)
-	{
-	  /* We don't throw an error, the program is still debuggable.  */
-	  if (! pspace_info->script_not_found_warning_printed)
-	    {
-	      warning (_("Missing auto-load scripts referenced in section %s\n\
-of file %s\n\
-Use `info auto-load-scripts [REGEXP]' to list them."),
-		       GDBPY_AUTO_SECTION_NAME, objfile->name);
-	      pspace_info->script_not_found_warning_printed = TRUE;
-	    }
-	}
-      else
-	{
-	  /* If this file is not currently loaded, load it.  */
-	  if (! in_hash_table)
-	    source_python_script_for_objfile (objfile, full_path);
-	  fclose (stream);
-	  xfree (full_path);
-	}
+      /* If this file is not currently loaded, load it.  */
+      if (opened && !in_hash_table)
+	source_python_script_for_objfile (objfile, stream, full_path);
+
+      do_cleanups (back_to);
     }
 }
 
@@ -348,287 +223,75 @@ auto_load_section_scripts (struct objfile *objfile, const char *section_name)
   do_cleanups (cleanups);
 }
 
-/* Clear the table of loaded section scripts.  */
-
-static void
-clear_section_scripts (void)
-{
-  struct program_space *pspace = current_program_space;
-  struct auto_load_pspace_info *info;
-
-  info = program_space_data (pspace, auto_load_pspace_data);
-  if (info != NULL && info->loaded_scripts != NULL)
-    {
-      htab_delete (info->loaded_scripts);
-      info->loaded_scripts = NULL;
-      info->script_not_found_warning_printed = FALSE;
-    }
-}
-
-/* Look for the auto-load script associated with OBJFILE and load it.  */
-
-static void
-auto_load_objfile_script (struct objfile *objfile, const char *suffix)
-{
-  char *realname;
-  char *filename, *debugfile;
-  int len;
-  FILE *input;
-  struct cleanup *cleanups;
-
-  realname = gdb_realpath (objfile->name);
-  len = strlen (realname);
-  filename = xmalloc (len + strlen (suffix) + 1);
-  memcpy (filename, realname, len);
-  strcpy (filename + len, suffix);
-
-  cleanups = make_cleanup (xfree, filename);
-  make_cleanup (xfree, realname);
-
-  input = fopen (filename, "r");
-  debugfile = filename;
-
-  if (!input && debug_file_directory)
-    {
-      /* Also try the same file in the separate debug info directory.  */
-      debugfile = xmalloc (strlen (filename)
-			   + strlen (debug_file_directory) + 1);
-      strcpy (debugfile, debug_file_directory);
-      /* FILENAME is absolute, so we don't need a "/" here.  */
-      strcat (debugfile, filename);
-
-      make_cleanup (xfree, debugfile);
-      input = fopen (debugfile, "r");
-    }
-
-  if (!input && gdb_datadir)
-    {
-      /* Also try the same file in a subdirectory of gdb's data
-	 directory.  */
-      debugfile = xmalloc (strlen (gdb_datadir) + strlen (filename)
-			   + strlen ("/auto-load") + 1);
-      strcpy (debugfile, gdb_datadir);
-      strcat (debugfile, "/auto-load");
-      /* FILENAME is absolute, so we don't need a "/" here.  */
-      strcat (debugfile, filename);
-
-      make_cleanup (xfree, debugfile);
-      input = fopen (debugfile, "r");
-    }
-
-  if (input)
-    {
-      struct auto_load_pspace_info *pspace_info;
-
-      /* Add this script to the hash table too so "info auto-load-scripts"
-	 can print it.  */
-      pspace_info =
-	get_auto_load_pspace_data_for_loading (current_program_space);
-      maybe_add_script (pspace_info->loaded_scripts, debugfile, debugfile);
-
-      /* To preserve existing behaviour we don't check for whether the
-	 script was already in the table, and always load it.
-	 It's highly unlikely that we'd ever load it twice,
-	 and these scripts are required to be idempotent under multiple
-	 loads anyway.  */
-      source_python_script_for_objfile (objfile, debugfile);
-      fclose (input);
-    }
-
-  do_cleanups (cleanups);
-}
-
-/* This is a new_objfile observer callback to auto-load scripts.
-
-   Two flavors of auto-loaded scripts are supported.
-   1) based on the path to the objfile
-   2) from .debug_gdb_scripts section  */
-
-static void
-auto_load_new_objfile (struct objfile *objfile)
-{
-  if (!objfile)
-    {
-      /* OBJFILE is NULL when loading a new "main" symbol-file.  */
-      clear_section_scripts ();
-      return;
-    }
-
-  load_auto_scripts_for_objfile (objfile);
-}
-
-/* Load any auto-loaded scripts for OBJFILE.  */
+/* Load any Python auto-loaded scripts for OBJFILE.  */
 
 void
-load_auto_scripts_for_objfile (struct objfile *objfile)
+gdbpy_load_auto_scripts_for_objfile (struct objfile *objfile)
 {
-  if (auto_load_scripts && gdbpy_global_auto_load)
+  if (auto_load_python_scripts)
     {
-      auto_load_objfile_script (objfile, GDBPY_AUTO_FILE_NAME);
+      auto_load_objfile_script (objfile, &script_language_python);
       auto_load_section_scripts (objfile, GDBPY_AUTO_SECTION_NAME);
     }
 }
-

-/* Collect scripts to be printed in a vec.  */
-
-typedef struct loaded_script *loaded_script_ptr;
-DEF_VEC_P (loaded_script_ptr);
 
-/* Traversal function for htab_traverse.
-   Collect the entry if it matches the regexp.  */
-
-static int
-collect_matching_scripts (void **slot, void *info)
-{
-  struct loaded_script *script = *slot;
-  VEC (loaded_script_ptr) **scripts_ptr = info;
-
-  if (re_exec (script->name))
-    VEC_safe_push (loaded_script_ptr, *scripts_ptr, script);
-
-  return 1;
-}
-
-/* Print SCRIPT.  */
+/* Wrapper for "info auto-load python-scripts".  */
 
 static void
-print_script (struct loaded_script *script)
+info_auto_load_python_scripts (char *pattern, int from_tty)
 {
-  struct ui_out *uiout = current_uiout;
-  struct cleanup *chain;
-
-  chain = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
-
-  ui_out_field_string (uiout, "loaded", script->full_path ? "Yes" : "Missing");
-  ui_out_field_string (uiout, "script", script->name);
-  ui_out_text (uiout, "\n");
-
-  /* If the name isn't the full path, print it too.  */
-  if (script->full_path != NULL
-      && strcmp (script->name, script->full_path) != 0)
-    {
-      ui_out_text (uiout, "\tfull name: ");
-      ui_out_field_string (uiout, "full_path", script->full_path);
-      ui_out_text (uiout, "\n");
-    }
-
-  do_cleanups (chain);
-}
-
-/* Helper for info_auto_load_scripts to sort the scripts by name.  */
-
-static int
-sort_scripts_by_name (const void *ap, const void *bp)
-{
-  const struct loaded_script *a = *(const struct loaded_script **) ap;
-  const struct loaded_script *b = *(const struct loaded_script **) bp;
-
-  return FILENAME_CMP (a->name, b->name);
-}
-
-/* "info auto-load-scripts" command.  */
-
-static void
-info_auto_load_scripts (char *pattern, int from_tty)
-{
-  struct ui_out *uiout = current_uiout;
-  struct auto_load_pspace_info *pspace_info;
-  struct cleanup *script_chain;
-  VEC (loaded_script_ptr) *scripts;
-  int nr_scripts;
-
-  dont_repeat ();
-
-  pspace_info = get_auto_load_pspace_data (current_program_space);
-
-  if (pattern && *pattern)
-    {
-      char *re_err = re_comp (pattern);
-
-      if (re_err)
-	error (_("Invalid regexp: %s"), re_err);
-    }
-  else
-    {
-      re_comp ("");
-    }
-
-  /* We need to know the number of rows before we build the table.
-     Plus we want to sort the scripts by name.
-     So first traverse the hash table collecting the matching scripts.  */
-
-  scripts = VEC_alloc (loaded_script_ptr, 10);
-  script_chain = make_cleanup (VEC_cleanup (loaded_script_ptr), &scripts);
-
-  if (pspace_info != NULL && pspace_info->loaded_scripts != NULL)
-    {
-      immediate_quit++;
-      /* Pass a pointer to scripts as VEC_safe_push can realloc space.  */
-      htab_traverse_noresize (pspace_info->loaded_scripts,
-			      collect_matching_scripts, &scripts);
-      immediate_quit--;
-    }
-
-  nr_scripts = VEC_length (loaded_script_ptr, scripts);
-  make_cleanup_ui_out_table_begin_end (uiout, 2, nr_scripts,
-				       "AutoLoadedScriptsTable");
-
-  ui_out_table_header (uiout, 7, ui_left, "loaded", "Loaded");
-  ui_out_table_header (uiout, 70, ui_left, "script", "Script");
-  ui_out_table_body (uiout);
-
-  if (nr_scripts > 0)
-    {
-      int i;
-      loaded_script_ptr script;
-
-      qsort (VEC_address (loaded_script_ptr, scripts),
-	     VEC_length (loaded_script_ptr, scripts),
-	     sizeof (loaded_script_ptr), sort_scripts_by_name);
-      for (i = 0; VEC_iterate (loaded_script_ptr, scripts, i, script); ++i)
-	print_script (script);
-    }
-
-  do_cleanups (script_chain);
-
-  if (nr_scripts == 0)
-    {
-      if (pattern && *pattern)
-	ui_out_message (uiout, 0, "No auto-load scripts matching %s.\n",
-			pattern);
-      else
-	ui_out_message (uiout, 0, "No auto-load scripts.\n");
-    }
+  auto_load_info_scripts (pattern, from_tty, &script_language_python);
 }
 

 void
 gdbpy_initialize_auto_load (void)
 {
-  auto_load_pspace_data
-    = register_program_space_data_with_cleanup (auto_load_pspace_data_cleanup);
-
-  observer_attach_new_objfile (auto_load_new_objfile);
+  struct cmd_list_element *cmd;
+  char *cmd_name;
+
+  add_setshow_boolean_cmd ("python-scripts", class_support,
+			   &auto_load_python_scripts, _("\
+Set the debugger's behaviour regarding auto-loaded Python scripts."), _("\
+Show the debugger's behaviour regarding auto-loaded Python scripts."), _("\
+If enabled, auto-loaded Python scripts are loaded when the debugger reads\n\
+an executable or shared library.\n\
+This options has security implications for untrusted inferiors."),
+			   NULL, show_auto_load_python_scripts,
+			   auto_load_set_cmdlist_get (),
+			   auto_load_show_cmdlist_get ());
 
   add_setshow_boolean_cmd ("auto-load-scripts", class_support,
-			   &auto_load_scripts, _("\
-Set the debugger's behaviour regarding auto-loaded scripts."), _("\
-Show the debugger's behaviour regarding auto-loaded scripts."), _("\
-If enabled, auto-loaded scripts are loaded when the debugger reads\n\
-an executable or shared library."),
-			   NULL, NULL,
-			   &setlist,
-			   &showlist);
-
-  add_info ("auto-load-scripts",
-	    info_auto_load_scripts,
-	    _("Print the list of automatically loaded scripts.\n\
-Usage: info auto-load-scripts [REGEXP]"));
+			   &auto_load_python_scripts, _("\
+Set the debugger's behaviour regarding auto-loaded Python scripts, "
+								 "deprecated."),
+			   _("\
+Show the debugger's behaviour regarding auto-loaded Python scripts, "
+								 "deprecated."),
+			   NULL, NULL, show_auto_load_python_scripts,
+			   &setlist, &showlist);
+  cmd_name = "auto-load-scripts";
+  cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
+  deprecate_cmd (cmd, "set auto-load python-scripts");
+
+  /* It is needed because lookup_cmd updates the CMD_NAME pointer.  */
+  cmd_name = "auto-load-scripts";
+  cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
+  deprecate_cmd (cmd, "show auto-load python-scripts");
+
+  add_cmd ("python-scripts", class_info, info_auto_load_python_scripts,
+	   _("Print the list of automatically loaded Python scripts.\n\
+Usage: info auto-load python-scripts [REGEXP]"),
+	   auto_load_info_cmdlist_get ());
+
+  cmd = add_info ("auto-load-scripts", info_auto_load_python_scripts, _("\
+Print the list of automatically loaded Python scripts, deprecated."));
+  deprecate_cmd (cmd, "info auto-load python-scripts");
 }
 
 #else /* ! HAVE_PYTHON */
 
 void
-load_auto_scripts_for_objfile (struct objfile *objfile)
+gdbpy_load_auto_scripts_for_objfile (struct objfile *objfile)
 {
 }
 
diff --git a/gdb/python/py-block.c b/gdb/python/py-block.c
index ac48193..68d0a15 100644
--- a/gdb/python/py-block.c
+++ b/gdb/python/py-block.c
@@ -41,10 +41,10 @@ typedef struct blpy_block_object {
 
 typedef struct {
   PyObject_HEAD
-  /* The block dictionary of symbols.  */
-  struct dictionary *dict;
-  /* The iterator for that dictionary.  */
-  struct dict_iterator iter;
+  /* The block.  */
+  const struct block *block;
+  /* The iterator for that block.  */
+  struct block_iterator iter;
   /* Has the iterator been initialized flag.  */
   int initialized_p;
   /* Pointer back to the original source block object.  Needed to
@@ -94,7 +94,7 @@ blpy_iter (PyObject *self)
   if (block_iter_obj == NULL)
       return NULL;
 
-  block_iter_obj->dict = BLOCK_DICT (block);
+  block_iter_obj->block = block;
   block_iter_obj->initialized_p = 0;
   Py_INCREF (self);
   block_iter_obj->source = (block_object *) self;
@@ -311,11 +311,11 @@ blpy_block_syms_iternext (PyObject *self)
 
   if (!iter_obj->initialized_p)
     {
-      sym = dict_iterator_first (iter_obj->dict,  &(iter_obj->iter));
+      sym = block_iterator_first (iter_obj->block,  &(iter_obj->iter));
       iter_obj->initialized_p = 1;
     }
   else
-    sym = dict_iterator_next (&(iter_obj->iter));
+    sym = block_iterator_next (&(iter_obj->iter));
 
   if (sym == NULL)
     {
diff --git a/gdb/python/py-breakpoint.c b/gdb/python/py-breakpoint.c
index 0c84d03..89ace99 100644
--- a/gdb/python/py-breakpoint.c
+++ b/gdb/python/py-breakpoint.c
@@ -21,6 +21,7 @@
 #include "value.h"
 #include "exceptions.h"
 #include "python-internal.h"
+#include "python.h"
 #include "charset.h"
 #include "breakpoint.h"
 #include "gdbcmd.h"
@@ -621,7 +622,7 @@ bppy_init (PyObject *self, PyObject *args, PyObject *kwargs)
 	case bp_breakpoint:
 	  {
 	    create_breakpoint (python_gdbarch,
-			       copy, NULL, -1,
+			       copy, NULL, -1, NULL,
 			       0,
 			       0, bp_breakpoint,
 			       0,
diff --git a/gdb/python/py-cmd.c b/gdb/python/py-cmd.c
index aad1ab4..d8e375c 100644
--- a/gdb/python/py-cmd.c
+++ b/gdb/python/py-cmd.c
@@ -35,7 +35,7 @@ struct cmdpy_completer
   /* Python symbol name.  */
   char *name;
   /* Completion function.  */
-  char **(*completer) (struct cmd_list_element *, char *, char *);
+  completer_ftype *completer;
 };
 
 static struct cmdpy_completer completers[] =
@@ -206,12 +206,12 @@ cmdpy_function (struct cmd_list_element *command, char *args, int from_tty)
 
 /* Called by gdb for command completion.  */
 
-static char **
+static VEC (char_ptr) *
 cmdpy_completer (struct cmd_list_element *command, char *text, char *word)
 {
   cmdpy_object *obj = (cmdpy_object *) get_cmd_context (command);
   PyObject *textobj, *wordobj, *resultobj = NULL;
-  char **result = NULL;
+  VEC (char_ptr) *result = NULL;
   struct cleanup *cleanup;
 
   cleanup = ensure_python_env (get_current_arch (), current_language);
@@ -253,10 +253,10 @@ cmdpy_completer (struct cmd_list_element *command, char *text, char *word)
       if (len < 0)
 	goto done;
 
-      result = (char **) xmalloc ((len + 1) * sizeof (char *));
       for (i = out = 0; i < len; ++i)
 	{
 	  PyObject *elt = PySequence_GetItem (resultobj, i);
+	  char *item;
 
 	  if (elt == NULL || ! gdbpy_is_string (elt))
 	    {
@@ -264,16 +264,15 @@ cmdpy_completer (struct cmd_list_element *command, char *text, char *word)
 	      PyErr_Clear ();
 	      continue;
 	    }
-	  result[out] = python_string_to_host_string (elt);
-	  if (result[out] == NULL)
+	  item = python_string_to_host_string (elt);
+	  if (item == NULL)
 	    {
 	      /* Skip problem elements.  */
 	      PyErr_Clear ();
 	      continue;
 	    }
-	  ++out;
+	  VEC_safe_push (char_ptr, result, item);
 	}
-      result[out] = NULL;
     }
   else if (PyInt_Check (resultobj))
     {
@@ -436,7 +435,7 @@ cmdpy_init (PyObject *self, PyObject *args, PyObject *kw)
       && cmdtype != class_files && cmdtype != class_support
       && cmdtype != class_info && cmdtype != class_breakpoint
       && cmdtype != class_trace && cmdtype != class_obscure
-      && cmdtype != class_maintenance)
+      && cmdtype != class_maintenance && cmdtype != class_user)
     {
       PyErr_Format (PyExc_RuntimeError, _("Invalid command class argument."));
       return -1;
@@ -578,7 +577,8 @@ gdbpy_initialize_commands (void)
       || PyModule_AddIntConstant (gdb_module, "COMMAND_OBSCURE",
 				  class_obscure) < 0
       || PyModule_AddIntConstant (gdb_module, "COMMAND_MAINTENANCE",
-				  class_maintenance) < 0)
+				  class_maintenance) < 0
+      || PyModule_AddIntConstant (gdb_module, "COMMAND_USER", class_user) < 0)
     return;
 
   for (i = 0; i < N_COMPLETERS; ++i)
diff --git a/gdb/python/py-continueevent.c b/gdb/python/py-continueevent.c
index 4582fb5..2a1524e 100644
--- a/gdb/python/py-continueevent.c
+++ b/gdb/python/py-continueevent.c
@@ -21,7 +21,7 @@
 
 static PyTypeObject continue_event_object_type;
 
-PyObject *
+static PyObject *
 create_continue_event_object (void)
 {
   return create_thread_event_object (&continue_event_object_type);
diff --git a/gdb/python/py-event.c b/gdb/python/py-event.c
index 7d4ff14..4789761 100644
--- a/gdb/python/py-event.c
+++ b/gdb/python/py-event.c
@@ -132,6 +132,13 @@ evpy_emit_event (PyObject *event,
   return -1;
 }
 
+static PyGetSetDef event_object_getset[] =
+{
+  { "__dict__", gdb_py_generic_dict, NULL,
+    "The __dict__ for this event.", &event_object_type },
+  { NULL }
+};
+
 PyTypeObject event_object_type =
 {
   PyObject_HEAD_INIT (NULL)
@@ -164,7 +171,7 @@ PyTypeObject event_object_type =
   0,                                          /* tp_iternext */
   0,                                          /* tp_methods */
   0,                                          /* tp_members */
-  0,                                          /* tp_getset */
+  event_object_getset,			      /* tp_getset */
   0,                                          /* tp_base */
   0,                                          /* tp_dict */
   0,                                          /* tp_descr_get */
diff --git a/gdb/python/py-finishbreakpoint.c b/gdb/python/py-finishbreakpoint.c
index e083576..56ab775 100644
--- a/gdb/python/py-finishbreakpoint.c
+++ b/gdb/python/py-finishbreakpoint.c
@@ -29,6 +29,7 @@
 #include "language.h"
 #include "observer.h"
 #include "inferior.h"
+#include "block.h"
 
 static PyTypeObject finish_breakpoint_object_type;
 
@@ -45,9 +46,9 @@ struct finish_breakpoint_object
      May be NULL if no debug information was available or return type
      was VOID.  */
   PyObject *return_type;
-  /* gdb.Type object of the function finished by this breakpoint.  Will be
+  /* gdb.Value object of the function finished by this breakpoint.  Will be
      NULL if return_type is NULL.  */
-  PyObject *function_type;
+  PyObject *function_value;
   /* When stopped at this FinishBreakpoint, gdb.Value object returned by
      the function; Py_None if the value is not computable; NULL if GDB is
      not stopped at a FinishBreakpoint.  */
@@ -78,7 +79,7 @@ bpfinishpy_dealloc (PyObject *self)
   struct finish_breakpoint_object *self_bpfinish =
         (struct finish_breakpoint_object *) self;
 
-  Py_XDECREF (self_bpfinish->function_type);
+  Py_XDECREF (self_bpfinish->function_value);
   Py_XDECREF (self_bpfinish->return_type);
   Py_XDECREF (self_bpfinish->return_value);
 }
@@ -102,9 +103,11 @@ bpfinishpy_pre_stop_hook (struct breakpoint_object *bp_obj)
 
   TRY_CATCH (except, RETURN_MASK_ALL)
     {
-      struct value *ret =
-          get_return_value (type_object_to_type (self_finishbp->function_type),
-                            type_object_to_type (self_finishbp->return_type));
+      struct value *function =
+        value_object_to_value (self_finishbp->function_value);
+      struct type *value_type =
+        type_object_to_type (self_finishbp->return_type);
+      struct value *ret = get_return_value (function, value_type);
 
       if (ret)
         {
@@ -233,7 +236,7 @@ bpfinishpy_init (PyObject *self, PyObject *args, PyObject *kwargs)
 
   /* Find the function we will return from.  */
   self_bpfinish->return_type = NULL;
-  self_bpfinish->function_type = NULL;
+  self_bpfinish->function_value = NULL;
 
   TRY_CATCH (except, RETURN_MASK_ALL)
     {
@@ -248,25 +251,28 @@ bpfinishpy_init (PyObject *self, PyObject *args, PyObject *kwargs)
               /* Remember only non-void return types.  */
               if (TYPE_CODE (ret_type) != TYPE_CODE_VOID)
                 {
+                  struct value *func_value;
+
                   /* Ignore Python errors at this stage.  */
                   self_bpfinish->return_type = type_to_type_object (ret_type);
                   PyErr_Clear ();
-                  self_bpfinish->function_type =
-                      type_to_type_object (SYMBOL_TYPE (function));
+                  func_value = read_var_value (function, frame);
+                  self_bpfinish->function_value =
+                      value_to_value_object (func_value);
                   PyErr_Clear ();
                 }
             }
         }
     }
   if (except.reason < 0
-      || !self_bpfinish->return_type || !self_bpfinish->function_type)
+      || !self_bpfinish->return_type || !self_bpfinish->function_value)
     {
       /* Won't be able to compute return value.  */
       Py_XDECREF (self_bpfinish->return_type);
-      Py_XDECREF (self_bpfinish->function_type);
+      Py_XDECREF (self_bpfinish->function_value);
 
       self_bpfinish->return_type = NULL;
-      self_bpfinish->function_type = NULL;
+      self_bpfinish->function_value = NULL;
     }
 
   bppy_pending_object = &self_bpfinish->py_bp;
@@ -277,11 +283,11 @@ bpfinishpy_init (PyObject *self, PyObject *args, PyObject *kwargs)
     {
       /* Set a breakpoint on the return address.  */
       finish_pc = get_frame_pc (prev_frame);
-      sprintf (small_buf, "*%s", hex_string (finish_pc));
+      xsnprintf (small_buf, sizeof (small_buf), "*%s", hex_string (finish_pc));
       addr_str = small_buf;
 
       create_breakpoint (python_gdbarch,
-                         addr_str, NULL, thread,
+                         addr_str, NULL, thread, NULL,
                          0,
                          1 /*temp_flag*/,
                          bp_breakpoint,
@@ -313,7 +319,6 @@ bpfinishpy_init (PyObject *self, PyObject *args, PyObject *kwargs)
 static void
 bpfinishpy_out_of_scope (struct finish_breakpoint_object *bpfinish_obj)
 {
-  volatile struct gdb_exception except;
   breakpoint_object *bp_obj = (breakpoint_object *) bpfinish_obj;
   PyObject *py_obj = (PyObject *) bp_obj;
 
diff --git a/gdb/python/py-frame.c b/gdb/python/py-frame.c
index a8ce598..12a54e8 100644
--- a/gdb/python/py-frame.c
+++ b/gdb/python/py-frame.c
@@ -54,8 +54,6 @@ typedef struct {
 	error (_("Frame is invalid."));			\
     } while (0)
 
-static PyTypeObject frame_object_type;
-
 /* Returns the frame_info object corresponding to the given Python Frame
    object.  If the frame doesn't exist anymore (the frame id doesn't
    correspond to any frame in the inferior), returns NULL.  */
@@ -124,7 +122,7 @@ static PyObject *
 frapy_name (PyObject *self, PyObject *args)
 {
   struct frame_info *frame;
-  char *name;
+  const char *name;
   enum language lang;
   PyObject *result;
   volatile struct gdb_exception except;
@@ -663,7 +661,7 @@ Return the value of the variable in this frame." },
   {NULL}  /* Sentinel */
 };
 
-static PyTypeObject frame_object_type = {
+PyTypeObject frame_object_type = {
   PyObject_HEAD_INIT (NULL)
   0,				  /* ob_size */
   "gdb.Frame",			  /* tp_name */
diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c
index 339a221..2b229be 100644
--- a/gdb/python/py-inferior.c
+++ b/gdb/python/py-inferior.c
@@ -81,7 +81,7 @@ static void
 python_on_normal_stop (struct bpstats *bs, int print_frame)
 {
   struct cleanup *cleanup;
-  enum target_signal stop_signal;
+  enum gdb_signal stop_signal;
 
   if (!find_thread_ptid (inferior_ptid))
       return;
@@ -180,7 +180,6 @@ inferior_to_inferior_object (struct inferior *inferior)
 PyObject *
 find_inferior_object (int pid)
 {
-  struct inflist_entry *p;
   struct inferior *inf = find_inferior_pid (pid);
 
   if (inf)
@@ -257,7 +256,6 @@ delete_thread_object (struct thread_info *tp, int ignore)
 {
   struct cleanup *cleanup;
   inferior_object *inf_obj;
-  thread_object *thread_obj;
   struct threadlist_entry **entry, *tmp;
   
   cleanup = ensure_python_env (python_gdbarch, python_language);
@@ -394,7 +392,7 @@ gdbpy_inferiors (PyObject *unused, PyObject *unused2)
 
 /* Membuf and memory manipulation.  */
 
-/* Implementation of gdb.read_memory (address, length).
+/* Implementation of Inferior.read_memory (address, length).
    Returns a Python buffer object with LENGTH bytes of the inferior's
    memory at ADDRESS.  Both arguments are integers.  Returns NULL on error,
    with a python exception set.  */
@@ -405,8 +403,7 @@ infpy_read_memory (PyObject *self, PyObject *args, PyObject *kw)
   CORE_ADDR addr, length;
   void *buffer = NULL;
   membuf_object *membuf_obj;
-  PyObject *addr_obj, *length_obj;
-  struct cleanup *cleanups;
+  PyObject *addr_obj, *length_obj, *result;
   volatile struct gdb_exception except;
   static char *keywords[] = { "address", "length", NULL };
 
@@ -414,8 +411,6 @@ infpy_read_memory (PyObject *self, PyObject *args, PyObject *kw)
 				     &addr_obj, &length_obj))
     return NULL;
 
-  cleanups = make_cleanup (null_cleanup, NULL);
-
   TRY_CATCH (except, RETURN_MASK_ALL)
     {
       if (!get_addr_from_python (addr_obj, &addr)
@@ -426,42 +421,41 @@ infpy_read_memory (PyObject *self, PyObject *args, PyObject *kw)
 	}
 
       buffer = xmalloc (length);
-      make_cleanup (xfree, buffer);
 
       read_memory (addr, buffer, length);
     }
   if (except.reason < 0)
     {
-      do_cleanups (cleanups);
+      xfree (buffer);
       GDB_PY_HANDLE_EXCEPTION (except);
     }
 
   if (error)
     {
-      do_cleanups (cleanups);
+      xfree (buffer);
       return NULL;
     }
 
   membuf_obj = PyObject_New (membuf_object, &membuf_object_type);
   if (membuf_obj == NULL)
     {
+      xfree (buffer);
       PyErr_SetString (PyExc_MemoryError,
 		       _("Could not allocate memory buffer object."));
-      do_cleanups (cleanups);
       return NULL;
     }
 
-  discard_cleanups (cleanups);
-
   membuf_obj->buffer = buffer;
   membuf_obj->addr = addr;
   membuf_obj->length = length;
 
-  return PyBuffer_FromReadWriteObject ((PyObject *) membuf_obj, 0,
-				       Py_END_OF_BUFFER);
+  result = PyBuffer_FromReadWriteObject ((PyObject *) membuf_obj, 0,
+					 Py_END_OF_BUFFER);
+  Py_DECREF (membuf_obj);
+  return result;
 }
 
-/* Implementation of gdb.write_memory (address, buffer [, length]).
+/* Implementation of Inferior.write_memory (address, buffer [, length]).
    Writes the contents of BUFFER (a Python object supporting the read
    buffer protocol) at ADDRESS in the inferior's memory.  Write LENGTH
    bytes from BUFFER, or its entire contents if the argument is not
@@ -499,7 +493,7 @@ infpy_write_memory (PyObject *self, PyObject *args, PyObject *kw)
 	  error = 1;
 	  break;
 	}
-      write_memory (addr, buffer, length);
+      write_memory_with_notification (addr, buffer, length);
     }
   GDB_PY_HANDLE_EXCEPTION (except);
 
diff --git a/gdb/python/py-infthread.c b/gdb/python/py-infthread.c
index 3a37ef7..8821f20 100644
--- a/gdb/python/py-infthread.c
+++ b/gdb/python/py-infthread.c
@@ -162,7 +162,6 @@ static PyObject *
 thpy_switch (PyObject *self, PyObject *args)
 {
   thread_object *thread_obj = (thread_object *) self;
-  struct cleanup *cleanup;
   volatile struct gdb_exception except;
 
   THPY_REQUIRE_VALID (thread_obj);
diff --git a/gdb/python/py-lazy-string.c b/gdb/python/py-lazy-string.c
index 11048b3..3c90829 100644
--- a/gdb/python/py-lazy-string.c
+++ b/gdb/python/py-lazy-string.c
@@ -84,7 +84,7 @@ stpy_get_length (PyObject *self, void *closure)
   return PyLong_FromLong (self_string->length);
 }
 
-PyObject *
+static PyObject *
 stpy_get_type (PyObject *self, void *closure)
 {
   lazy_string_object *str_obj = (lazy_string_object *) self;
diff --git a/gdb/python/py-newobjfileevent.c b/gdb/python/py-newobjfileevent.c
index 1e26b04..d014be6 100644
--- a/gdb/python/py-newobjfileevent.c
+++ b/gdb/python/py-newobjfileevent.c
@@ -21,7 +21,7 @@
 
 static PyTypeObject new_objfile_event_object_type;
 
-PyObject *
+static PyObject *
 create_new_objfile_event_object (struct objfile *objfile)
 {
   PyObject *objfile_event;
diff --git a/gdb/python/py-signalevent.c b/gdb/python/py-signalevent.c
index 323d6f6..304b847 100644
--- a/gdb/python/py-signalevent.c
+++ b/gdb/python/py-signalevent.c
@@ -22,7 +22,7 @@
 static PyTypeObject signal_event_object_type;
 
 PyObject *
-create_signal_event_object (enum target_signal stop_signal)
+create_signal_event_object (enum gdb_signal stop_signal)
 {
   const char *signal_name;
   PyObject *signal_event_obj =
@@ -31,7 +31,7 @@ create_signal_event_object (enum target_signal stop_signal)
   if (!signal_event_obj)
     goto fail;
 
-  signal_name = target_signal_to_name (stop_signal);
+  signal_name = gdb_signal_to_name (stop_signal);
 
   if (evpy_add_attribute (signal_event_obj,
                           "stop_signal",
diff --git a/gdb/python/py-stopevent.c b/gdb/python/py-stopevent.c
index 1df4ae9..7e00948 100644
--- a/gdb/python/py-stopevent.c
+++ b/gdb/python/py-stopevent.c
@@ -42,7 +42,7 @@ create_stop_event_object (PyTypeObject *py_type)
    returns -1.  */
 
 int
-emit_stop_event (struct bpstats *bs, enum target_signal stop_signal)
+emit_stop_event (struct bpstats *bs, enum gdb_signal stop_signal)
 {
   PyObject *stop_event_obj = NULL; /* Appease GCC warning.  */
   PyObject *list = NULL;
@@ -84,8 +84,8 @@ emit_stop_event (struct bpstats *bs, enum target_signal stop_signal)
     }
 
   /* Check if the signal is "Signal 0" or "Trace/breakpoint trap".  */
-  if (stop_signal != TARGET_SIGNAL_0
-      && stop_signal != TARGET_SIGNAL_TRAP)
+  if (stop_signal != GDB_SIGNAL_0
+      && stop_signal != GDB_SIGNAL_TRAP)
     {
       stop_event_obj =
 	  create_signal_event_object (stop_signal);
diff --git a/gdb/python/py-stopevent.h b/gdb/python/py-stopevent.h
index df64286..69e688a 100644
--- a/gdb/python/py-stopevent.h
+++ b/gdb/python/py-stopevent.h
@@ -26,11 +26,11 @@ extern PyObject *create_stop_event_object (PyTypeObject *py_type);
 extern void stop_evpy_dealloc (PyObject *self);
 
 extern int emit_stop_event (struct bpstats *bs,
-                            enum target_signal stop_signal);
+                            enum gdb_signal stop_signal);
 
 extern PyObject *create_breakpoint_event_object (PyObject *breakpoint_list,
                                                  PyObject *first_bp);
 
-extern PyObject *create_signal_event_object (enum target_signal stop_signal);
+extern PyObject *create_signal_event_object (enum gdb_signal stop_signal);
 
 #endif /* GDB_PY_STOPEVENT_H */
diff --git a/gdb/python/py-symbol.c b/gdb/python/py-symbol.c
index 9d32a71..00a8477 100644
--- a/gdb/python/py-symbol.c
+++ b/gdb/python/py-symbol.c
@@ -183,6 +183,42 @@ sympy_is_variable (PyObject *self, void *closure)
 			      || class == LOC_OPTIMIZED_OUT));
 }
 
+/* Implementation of gdb.Symbol.needs_frame -> Boolean.
+   Returns true iff the symbol needs a frame for evaluation.  */
+
+static PyObject *
+sympy_needs_frame (PyObject *self, void *closure)
+{
+  struct symbol *symbol = NULL;
+  volatile struct gdb_exception except;
+  int result = 0;
+
+  SYMPY_REQUIRE_VALID (self, symbol);
+
+  TRY_CATCH (except, RETURN_MASK_ALL)
+    {
+      result = symbol_read_needs_frame (symbol);
+    }
+  GDB_PY_HANDLE_EXCEPTION (except);
+
+  if (result)
+    Py_RETURN_TRUE;
+  Py_RETURN_FALSE;
+}
+
+/* Implementation of gdb.Symbol.line -> int.
+   Returns the line number at which the symbol was defined.  */
+
+static PyObject *
+sympy_line (PyObject *self, void *closure)
+{
+  struct symbol *symbol = NULL;
+
+  SYMPY_REQUIRE_VALID (self, symbol);
+
+  return PyInt_FromLong (SYMBOL_LINE (symbol));
+}
+
 /* Implementation of gdb.Symbol.is_valid (self) -> Boolean.
    Returns True if this Symbol still exists in GDB.  */
 
@@ -198,6 +234,53 @@ sympy_is_valid (PyObject *self, PyObject *args)
   Py_RETURN_TRUE;
 }
 
+/* Implementation of gdb.Symbol.value (self[, frame]) -> gdb.Value.  Returns
+   the value of the symbol, or an error in various circumstances.  */
+
+static PyObject *
+sympy_value (PyObject *self, PyObject *args)
+{
+  struct symbol *symbol = NULL;
+  struct frame_info *frame_info = NULL;
+  PyObject *frame_obj = NULL;
+  struct value *value = NULL;
+  volatile struct gdb_exception except;
+
+  if (!PyArg_ParseTuple (args, "|O", &frame_obj))
+    return NULL;
+
+  if (frame_obj != NULL && !PyObject_TypeCheck (frame_obj, &frame_object_type))
+    {
+      PyErr_SetString (PyExc_TypeError, "argument is not a frame");
+      return NULL;
+    }
+
+  SYMPY_REQUIRE_VALID (self, symbol);
+  if (SYMBOL_CLASS (symbol) == LOC_TYPEDEF)
+    {
+      PyErr_SetString (PyExc_TypeError, "cannot get the value of a typedef");
+      return NULL;
+    }
+
+  TRY_CATCH (except, RETURN_MASK_ALL)
+    {
+      if (frame_obj != NULL)
+	{
+	  frame_info = frame_object_to_frame_info (frame_obj);
+	  if (frame_info == NULL)
+	    error (_("invalid frame"));
+	}
+      
+      if (symbol_read_needs_frame (symbol) && frame_info == NULL)
+	error (_("symbol requires a frame to compute its value"));
+
+      value = read_var_value (symbol, frame_info);
+    }
+  GDB_PY_HANDLE_EXCEPTION (except);
+
+  return value_to_value_object (value);
+}
+
 /* Given a symbol, and a symbol_object that has previously been
    allocated and initialized, populate the symbol_object with the
    struct symbol data.  Also, register the symbol_object life-cycle
@@ -460,6 +543,10 @@ to display demangled or mangled names.", NULL },
     "True if the symbol is a function or method." },
   { "is_variable", sympy_is_variable, NULL,
     "True if the symbol is a variable." },
+  { "needs_frame", sympy_needs_frame, NULL,
+    "True if the symbol requires a frame for evaluation." },
+  { "line", sympy_line, NULL,
+    "The source line number at which the symbol was defined." },
   { NULL }  /* Sentinel */
 };
 
@@ -467,6 +554,9 @@ static PyMethodDef symbol_object_methods[] = {
   { "is_valid", sympy_is_valid, METH_NOARGS,
     "is_valid () -> Boolean.\n\
 Return true if this symbol is valid, false if not." },
+  { "value", sympy_value, METH_VARARGS,
+    "value ([frame]) -> gdb.Value\n\
+Return the value of the symbol." },
   {NULL}  /* Sentinel */
 };
 
diff --git a/gdb/python/py-symtab.c b/gdb/python/py-symtab.c
index 09b760f..b6f45e6 100644
--- a/gdb/python/py-symtab.c
+++ b/gdb/python/py-symtab.c
@@ -23,6 +23,7 @@
 #include "source.h"
 #include "python-internal.h"
 #include "objfiles.h"
+#include "block.h"
 
 typedef struct stpy_symtab_object {
   PyObject_HEAD
@@ -153,6 +154,38 @@ stpy_is_valid (PyObject *self, PyObject *args)
   Py_RETURN_TRUE;
 }
 
+/* Return the GLOBAL_BLOCK of the underlying symtab.  */
+
+static PyObject *
+stpy_global_block (PyObject *self, PyObject *args)
+{
+  struct symtab *symtab = NULL;
+  struct block *block = NULL;
+  struct blockvector *blockvector;
+
+  STPY_REQUIRE_VALID (self, symtab);
+
+  blockvector = BLOCKVECTOR (symtab);
+  block = BLOCKVECTOR_BLOCK (blockvector, GLOBAL_BLOCK);
+  return block_to_block_object (block, symtab->objfile);
+}
+
+/* Return the STATIC_BLOCK of the underlying symtab.  */
+
+static PyObject *
+stpy_static_block (PyObject *self, PyObject *args)
+{
+  struct symtab *symtab = NULL;
+  struct block *block = NULL;
+  struct blockvector *blockvector;
+
+  STPY_REQUIRE_VALID (self, symtab);
+
+  blockvector = BLOCKVECTOR (symtab);
+  block = BLOCKVECTOR_BLOCK (blockvector, STATIC_BLOCK);
+  return block_to_block_object (block, symtab->objfile);
+}
+
 static PyObject *
 salpy_str (PyObject *self)
 {
@@ -204,6 +237,22 @@ salpy_get_pc (PyObject *self, void *closure)
   return gdb_py_long_from_ulongest (sal->pc);
 }
 
+/* Implementation of the get method for the 'last' attribute of
+   gdb.Symtab_and_line.  */
+
+static PyObject *
+salpy_get_last (PyObject *self, void *closure)
+{
+  struct symtab_and_line *sal = NULL;
+
+  SALPY_REQUIRE_VALID (self, sal);
+
+  if (sal->end > 0)
+    return gdb_py_long_from_ulongest (sal->end - 1);
+  else
+    Py_RETURN_NONE;
+}
+
 static PyObject *
 salpy_get_line (PyObject *self, void *closure)
 {
@@ -477,6 +526,12 @@ Return true if this symbol table is valid, false if not." },
   { "fullname", stpy_fullname, METH_NOARGS,
     "fullname () -> String.\n\
 Return the symtab's full source filename." },
+  { "global_block", stpy_global_block, METH_NOARGS,
+    "global_block () -> gdb.Block.\n\
+Return the global block of the symbol table." },
+  { "static_block", stpy_static_block, METH_NOARGS,
+    "static_block () -> gdb.Block.\n\
+Return the static block of the symbol table." },
   {NULL}  /* Sentinel */
 };
 
@@ -517,6 +572,8 @@ static PyTypeObject symtab_object_type = {
 static PyGetSetDef sal_object_getset[] = {
   { "symtab", salpy_get_symtab, NULL, "Symtab object.", NULL },
   { "pc", salpy_get_pc, NULL, "Return the symtab_and_line's pc.", NULL },
+  { "last", salpy_get_last, NULL,
+    "Return the symtab_and_line's last address.", NULL },
   { "line", salpy_get_line, NULL,
     "Return the symtab_and_line's line.", NULL },
   {NULL}  /* Sentinel */
diff --git a/gdb/python/py-type.c b/gdb/python/py-type.c
index dadb037..98030a6 100644
--- a/gdb/python/py-type.c
+++ b/gdb/python/py-type.c
@@ -167,11 +167,24 @@ convert_field (struct type *type, int field)
 
   if (!field_is_static (&TYPE_FIELD (type, field)))
     {
-      arg = PyLong_FromLong (TYPE_FIELD_BITPOS (type, field));
+      const char *attrstring;
+
+      if (TYPE_CODE (type) == TYPE_CODE_ENUM)
+	{
+	  arg = gdb_py_long_from_longest (TYPE_FIELD_ENUMVAL (type, field));
+	  attrstring = "enumval";
+	}
+      else
+	{
+	  arg = PyLong_FromLong (TYPE_FIELD_BITPOS (type, field));
+	  attrstring = "bitpos";
+	}
+
       if (!arg)
 	goto fail;
 
-      if (PyObject_SetAttrString (result, "bitpos", arg) < 0)
+      /* At least python-2.4 had the second parameter non-const.  */
+      if (PyObject_SetAttrString (result, (char *) attrstring, arg) < 0)
 	goto failarg;
     }
 
@@ -1018,6 +1031,10 @@ check_types_equal (struct type *type1, struct type *type2,
 	      if (FIELD_BITPOS (*field1) != FIELD_BITPOS (*field2))
 		return Py_NE;
 	      break;
+	    case FIELD_LOC_KIND_ENUMVAL:
+	      if (FIELD_ENUMVAL (*field1) != FIELD_ENUMVAL (*field2))
+		return Py_NE;
+	      break;
 	    case FIELD_LOC_KIND_PHYSADDR:
 	      if (FIELD_STATIC_PHYSADDR (*field1)
 		  != FIELD_STATIC_PHYSADDR (*field2))
@@ -1055,7 +1072,6 @@ check_types_equal (struct type *type1, struct type *type2,
   if (TYPE_TARGET_TYPE (type1) != NULL)
     {
       struct type_equality_entry entry;
-      int added;
 
       if (TYPE_TARGET_TYPE (type2) == NULL)
 	return Py_NE;
@@ -1255,7 +1271,6 @@ typy_getitem (PyObject *self, PyObject *key)
   struct type *type = ((type_object *) self)->type;
   char *field;
   int i;
-  volatile struct gdb_exception except;
 
   field = python_string_to_host_string (key);
   if (field == NULL)
@@ -1271,7 +1286,7 @@ typy_getitem (PyObject *self, PyObject *key)
   
   for (i = 0; i < TYPE_NFIELDS (type); i++)
     {
-      char *t_field_name = TYPE_FIELD_NAME (type, i);
+      const char *t_field_name = TYPE_FIELD_NAME (type, i);
 
       if (t_field_name && (strcmp_iw (t_field_name, field) == 0))
 	{
@@ -1317,7 +1332,6 @@ typy_has_key (PyObject *self, PyObject *args)
   struct type *type = ((type_object *) self)->type;
   const char *field;
   int i;
-  volatile struct gdb_exception except;
 
   if (!PyArg_ParseTuple (args, "s", &field))
     return NULL;
@@ -1332,7 +1346,7 @@ typy_has_key (PyObject *self, PyObject *args)
 
   for (i = 0; i < TYPE_NFIELDS (type); i++)
     {
-      char *t_field_name = TYPE_FIELD_NAME (type, i);
+      const char *t_field_name = TYPE_FIELD_NAME (type, i);
 
       if (t_field_name && (strcmp_iw (t_field_name, field) == 0))
 	Py_RETURN_TRUE;
@@ -1414,7 +1428,6 @@ typy_iterator_iternext (PyObject *self)
 {
   typy_iterator_object *iter_obj = (typy_iterator_object *) self;
   struct type *type = iter_obj->source->type;
-  int i;
   PyObject *result;
   
   if (iter_obj->field < TYPE_NFIELDS (type))
@@ -1681,6 +1694,13 @@ static PyTypeObject type_object_type =
   0,				  /* tp_new */
 };
 
+static PyGetSetDef field_object_getset[] =
+{
+  { "__dict__", gdb_py_generic_dict, NULL,
+    "The __dict__ for this field.", &field_object_type },
+  { NULL }
+};
+
 static PyTypeObject field_object_type =
 {
   PyObject_HEAD_INIT (NULL)
@@ -1713,7 +1733,7 @@ static PyTypeObject field_object_type =
   0,				  /* tp_iternext */
   0,				  /* tp_methods */
   0,				  /* tp_members */
-  0,				  /* tp_getset */
+  field_object_getset,		  /* tp_getset */
   0,				  /* tp_base */
   0,				  /* tp_dict */
   0,				  /* tp_descr_get */
diff --git a/gdb/python/py-utils.c b/gdb/python/py-utils.c
index 3579720..d5d0e43 100644
--- a/gdb/python/py-utils.c
+++ b/gdb/python/py-utils.c
@@ -139,7 +139,7 @@ unicode_to_target_string (PyObject *unicode_str)
    object converted to the target's charset.  If an error occurs
    during the conversion, NULL will be returned and a python exception
    will be set.  */
-PyObject *
+static PyObject *
 unicode_to_target_python_string (PyObject *unicode_str)
 {
   return unicode_to_encoded_python_string (unicode_str,
@@ -373,3 +373,23 @@ gdb_py_int_as_long (PyObject *obj, long *result)
   *result = PyInt_AsLong (obj);
   return ! (*result == -1 && PyErr_Occurred ());
 }
+
+

+
+/* Generic implementation of the __dict__ attribute for objects that
+   have a dictionary.  The CLOSURE argument should be the type object.
+   This only handles positive values for tp_dictoffset.  */
+
+PyObject *
+gdb_py_generic_dict (PyObject *self, void *closure)
+{
+  PyObject *result;
+  PyTypeObject *type_obj = closure;
+  char *raw_ptr;
+
+  raw_ptr = (char *) self + type_obj->tp_dictoffset;
+  result = * (PyObject **) raw_ptr;
+
+  Py_INCREF (result);
+  return result;
+}
diff --git a/gdb/python/py-value.c b/gdb/python/py-value.c
index 19423ea..6f67bdb 100644
--- a/gdb/python/py-value.c
+++ b/gdb/python/py-value.c
@@ -1,6 +1,6 @@
 /* Python interface to values.
 
-   Copyright (C) 2008-2012 Free Software Foundation, Inc.
+   Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -28,6 +28,7 @@
 #include "infcall.h"
 #include "expression.h"
 #include "cp-abi.h"
+#include "python.h"
 
 #ifdef HAVE_PYTHON
 
@@ -150,7 +151,7 @@ valpy_new (PyTypeObject *subtype, PyObject *args, PyObject *keywords)
     }
 
   value_obj->value = value;
-  value_incref (value);
+  release_value_or_incref (value);
   value_obj->address = NULL;
   value_obj->type = NULL;
   value_obj->dynamic_type = NULL;
@@ -174,23 +175,68 @@ preserve_python_values (struct objfile *objfile, htab_t copied_types)
 static PyObject *
 valpy_dereference (PyObject *self, PyObject *args)
 {
-  struct value *res_val = NULL;	  /* Initialize to appease gcc warning.  */
   volatile struct gdb_exception except;
+  PyObject *result = NULL;
 
   TRY_CATCH (except, RETURN_MASK_ALL)
     {
+      struct value *res_val;
+      struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
+
       res_val = value_ind (((value_object *) self)->value);
+      result = value_to_value_object (res_val);
+      do_cleanups (cleanup);
     }
   GDB_PY_HANDLE_EXCEPTION (except);
 
-  return value_to_value_object (res_val);
+  return result;
+}
+
+/* Given a value of a pointer type or a reference type, return the value
+   referenced. The difference between this function and valpy_dereference is
+   that the latter applies * unary operator to a value, which need not always
+   result in the value referenced. For example, for a value which is a reference
+   to an 'int' pointer ('int *'), valpy_dereference will result in a value of
+   type 'int' while valpy_referenced_value will result in a value of type
+   'int *'.  */
+
+static PyObject *
+valpy_referenced_value (PyObject *self, PyObject *args)
+{
+  volatile struct gdb_exception except;
+  PyObject *result = NULL;
+
+  TRY_CATCH (except, RETURN_MASK_ALL)
+    {
+      struct value *self_val, *res_val;
+      struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
+
+      self_val = ((value_object *) self)->value;
+      switch (TYPE_CODE (check_typedef (value_type (self_val))))
+        {
+        case TYPE_CODE_PTR:
+          res_val = value_ind (self_val);
+          break;
+        case TYPE_CODE_REF:
+          res_val = coerce_ref (self_val);
+          break;
+        default:
+          error(_("Trying to get the referenced value from a value which is "
+                  "neither a pointer nor a reference."));
+        }
+
+      result = value_to_value_object (res_val);
+      do_cleanups (cleanup);
+    }
+  GDB_PY_HANDLE_EXCEPTION (except);
+
+  return result;
 }
 
 /* Return "&value".  */
 static PyObject *
 valpy_get_address (PyObject *self, void *closure)
 {
-  struct value *res_val = NULL;	  /* Initialize to appease gcc warning.  */
   value_object *val_obj = (value_object *) self;
   volatile struct gdb_exception except;
 
@@ -198,15 +244,19 @@ valpy_get_address (PyObject *self, void *closure)
     {
       TRY_CATCH (except, RETURN_MASK_ALL)
 	{
+	  struct value *res_val;
+	  struct cleanup *cleanup
+	    = make_cleanup_value_free_to_mark (value_mark ());
+
 	  res_val = value_addr (val_obj->value);
+	  val_obj->address = value_to_value_object (res_val);
+	  do_cleanups (cleanup);
 	}
       if (except.reason < 0)
 	{
 	  val_obj->address = Py_None;
 	  Py_INCREF (Py_None);
 	}
-      else
-	val_obj->address = value_to_value_object (res_val);
     }
 
   Py_XINCREF (val_obj->address);
@@ -248,6 +298,7 @@ valpy_get_dynamic_type (PyObject *self, void *closure)
   TRY_CATCH (except, RETURN_MASK_ALL)
     {
       struct value *val = obj->value;
+      struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
 
       type = value_type (val);
       CHECK_TYPEDEF (type);
@@ -277,6 +328,8 @@ valpy_get_dynamic_type (PyObject *self, void *closure)
 	  /* Re-use object's static type.  */
 	  type = NULL;
 	}
+
+      do_cleanups (cleanup);
     }
   GDB_PY_HANDLE_EXCEPTION (except);
 
@@ -311,7 +364,7 @@ valpy_lazy_string (PyObject *self, PyObject *args, PyObject *kw)
   struct value *value = ((value_object *) self)->value;
   const char *user_encoding = NULL;
   static char *keywords[] = { "encoding", "length", NULL };
-  PyObject *str_obj;
+  PyObject *str_obj = NULL;
   volatile struct gdb_exception except;
 
   if (!PyArg_ParseTupleAndKeywords (args, kw, "|s" GDB_PY_LL_ARG, keywords,
@@ -320,16 +373,20 @@ valpy_lazy_string (PyObject *self, PyObject *args, PyObject *kw)
 
   TRY_CATCH (except, RETURN_MASK_ALL)
     {
+      struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
+
       if (TYPE_CODE (value_type (value)) == TYPE_CODE_PTR)
 	value = value_ind (value);
+
+      str_obj = gdbpy_create_lazy_string_object (value_address (value), length,
+						 user_encoding,
+						 value_type (value));
+
+      do_cleanups (cleanup);
     }
   GDB_PY_HANDLE_EXCEPTION (except);
 
-  str_obj = gdbpy_create_lazy_string_object (value_address (value), length,
-					     user_encoding,
-					     value_type (value));
-
-  return (PyObject *) str_obj;
+  return str_obj;
 }
 
 /* Implementation of gdb.Value.string ([encoding] [, errors]
@@ -376,9 +433,8 @@ valpy_string (PyObject *self, PyObject *args, PyObject *kw)
 static PyObject *
 valpy_do_cast (PyObject *self, PyObject *args, enum exp_opcode op)
 {
-  PyObject *type_obj;
+  PyObject *type_obj, *result = NULL;
   struct type *type;
-  struct value *res_val = NULL;	  /* Initialize to appease gcc warning.  */
   volatile struct gdb_exception except;
 
   if (! PyArg_ParseTuple (args, "O", &type_obj))
@@ -395,6 +451,8 @@ valpy_do_cast (PyObject *self, PyObject *args, enum exp_opcode op)
   TRY_CATCH (except, RETURN_MASK_ALL)
     {
       struct value *val = ((value_object *) self)->value;
+      struct value *res_val;
+      struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
 
       if (op == UNOP_DYNAMIC_CAST)
 	res_val = value_dynamic_cast (type, val);
@@ -405,10 +463,13 @@ valpy_do_cast (PyObject *self, PyObject *args, enum exp_opcode op)
 	  gdb_assert (op == UNOP_CAST);
 	  res_val = value_cast (type, val);
 	}
+
+      result = value_to_value_object (res_val);
+      do_cleanups (cleanup);
     }
   GDB_PY_HANDLE_EXCEPTION (except);
 
-  return value_to_value_object (res_val);
+  return result;
 }
 
 /* Implementation of the "cast" method.  */
@@ -451,8 +512,8 @@ valpy_getitem (PyObject *self, PyObject *key)
 {
   value_object *self_value = (value_object *) self;
   char *field = NULL;
-  struct value *res_val = NULL;
   volatile struct gdb_exception except;
+  PyObject *result = NULL;
 
   if (gdbpy_is_string (key))
     {  
@@ -464,6 +525,8 @@ valpy_getitem (PyObject *self, PyObject *key)
   TRY_CATCH (except, RETURN_MASK_ALL)
     {
       struct value *tmp = self_value->value;
+      struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
+      struct value *res_val = NULL;
 
       if (field)
 	res_val = value_struct_elt (&tmp, NULL, field, 0, NULL);
@@ -489,12 +552,16 @@ valpy_getitem (PyObject *self, PyObject *key)
 		res_val = value_subscript (tmp, value_as_long (idx));
 	    }
 	}
+
+      if (res_val)
+	result = value_to_value_object (res_val);
+      do_cleanups (cleanup);
     }
 
   xfree (field);
   GDB_PY_HANDLE_EXCEPTION (except);
 
-  return res_val ? value_to_value_object (res_val) : NULL;
+  return result;
 }
 
 static int
@@ -510,12 +577,13 @@ valpy_setitem (PyObject *self, PyObject *key, PyObject *value)
 static PyObject *
 valpy_call (PyObject *self, PyObject *args, PyObject *keywords)
 {
-  struct value *return_value = NULL;
   Py_ssize_t args_count;
   volatile struct gdb_exception except;
   struct value *function = ((value_object *) self)->value;
   struct value **vargs = NULL;
   struct type *ftype = NULL;
+  struct value *mark = value_mark ();
+  PyObject *result = NULL;
 
   TRY_CATCH (except, RETURN_MASK_ALL)
     {
@@ -558,11 +626,16 @@ valpy_call (PyObject *self, PyObject *args, PyObject *keywords)
 
   TRY_CATCH (except, RETURN_MASK_ALL)
     {
+      struct cleanup *cleanup = make_cleanup_value_free_to_mark (mark);
+      struct value *return_value;
+
       return_value = call_function_by_hand (function, args_count, vargs);
+      result = value_to_value_object (return_value);
+      do_cleanups (cleanup);
     }
   GDB_PY_HANDLE_EXCEPTION (except);
 
-  return value_to_value_object (return_value);
+  return result;
 }
 
 /* Called by the Python interpreter to obtain string representation
@@ -687,12 +760,14 @@ enum valpy_opcode
 static PyObject *
 valpy_binop (enum valpy_opcode opcode, PyObject *self, PyObject *other)
 {
-  struct value *res_val = NULL;	  /* Initialize to appease gcc warning.  */
   volatile struct gdb_exception except;
+  PyObject *result = NULL;
 
   TRY_CATCH (except, RETURN_MASK_ALL)
     {
       struct value *arg1, *arg2;
+      struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
+      struct value *res_val = NULL;
 
       /* If the gdb.Value object is the second operand, then it will be passed
 	 to us as the OTHER argument, and SELF will be an entirely different
@@ -778,10 +853,15 @@ valpy_binop (enum valpy_opcode opcode, PyObject *self, PyObject *other)
 	  res_val = value_binop (arg1, arg2, BINOP_BITWISE_XOR);
 	  break;
 	}
+
+      if (res_val)
+	result = value_to_value_object (res_val);
+
+      do_cleanups (cleanup);
     }
   GDB_PY_HANDLE_EXCEPTION (except);
 
-  return res_val ? value_to_value_object (res_val) : NULL;
+  return result;
 }
 
 static PyObject *
@@ -833,16 +913,22 @@ valpy_power (PyObject *self, PyObject *other, PyObject *unused)
 static PyObject *
 valpy_negative (PyObject *self)
 {
-  struct value *val = NULL;
   volatile struct gdb_exception except;
+  PyObject *result = NULL;
 
   TRY_CATCH (except, RETURN_MASK_ALL)
     {
+      /* Perhaps overkill, but consistency has some virtue.  */
+      struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
+      struct value *val;
+
       val = value_neg (((value_object *) self)->value);
+      result = value_to_value_object (val);
+      do_cleanups (cleanup);
     }
   GDB_PY_HANDLE_EXCEPTION (except);
 
-  return value_to_value_object (val);
+  return result;
 }
 
 static PyObject *
@@ -860,8 +946,12 @@ valpy_absolute (PyObject *self)
 
   TRY_CATCH (except, RETURN_MASK_ALL)
     {
+      struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ());
+
       if (value_less (value, value_zero (value_type (value), not_lval)))
 	isabs = 0;
+
+      do_cleanups (cleanup);
     }
   GDB_PY_HANDLE_EXCEPTION (except);
 
@@ -961,7 +1051,6 @@ static PyObject *
 valpy_richcompare (PyObject *self, PyObject *other, int op)
 {
   int result = 0;
-  struct value *value_other;
   volatile struct gdb_exception except;
 
   if (other == Py_None)
@@ -985,6 +1074,9 @@ valpy_richcompare (PyObject *self, PyObject *other, int op)
 
   TRY_CATCH (except, RETURN_MASK_ALL)
     {
+      struct value *value_other, *mark = value_mark ();
+      struct cleanup *cleanup;
+
       value_other = convert_value_from_python (other);
       if (value_other == NULL)
 	{
@@ -992,6 +1084,8 @@ valpy_richcompare (PyObject *self, PyObject *other, int op)
 	  break;
 	}
 
+      cleanup = make_cleanup_value_free_to_mark (mark);
+
       switch (op) {
         case Py_LT:
 	  result = value_less (((value_object *) self)->value, value_other);
@@ -1020,6 +1114,8 @@ valpy_richcompare (PyObject *self, PyObject *other, int op)
 	  result = -1;
 	  break;
       }
+
+      do_cleanups (cleanup);
     }
   GDB_PY_HANDLE_EXCEPTION (except);
 
@@ -1123,7 +1219,7 @@ value_to_value_object (struct value *val)
   if (val_obj != NULL)
     {
       val_obj->value = val;
-      value_incref (val);
+      release_value_or_incref (val);
       val_obj->address = NULL;
       val_obj->type = NULL;
       val_obj->dynamic_type = NULL;
@@ -1154,7 +1250,6 @@ struct value *
 convert_value_from_python (PyObject *obj)
 {
   struct value *value = NULL; /* -Wall */
-  struct cleanup *old;
   volatile struct gdb_exception except;
   int cmp;
 
@@ -1223,6 +1318,8 @@ convert_value_from_python (PyObject *obj)
 	  s = python_string_to_target_string (obj);
 	  if (s != NULL)
 	    {
+	      struct cleanup *old;
+
 	      old = make_cleanup (xfree, s);
 	      value = value_cstring (s, strlen (s), builtin_type_pychar);
 	      do_cleanups (old);
@@ -1324,6 +1421,8 @@ Cast the value to the supplied type, as if by the C++\n\
 reinterpret_cast operator."
   },
   { "dereference", valpy_dereference, METH_NOARGS, "Dereferences the value." },
+  { "referenced_value", valpy_referenced_value, METH_NOARGS,
+    "Return the value referenced by a TYPE_CODE_REF or TYPE_CODE_PTR value." },
   { "lazy_string", (PyCFunction) valpy_lazy_string,
     METH_VARARGS | METH_KEYWORDS,
     "lazy_string ([encoding]  [, length]) -> lazy_string\n\
diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
index 328e5d8..bae61c2 100644
--- a/gdb/python/python-internal.h
+++ b/gdb/python/python-internal.h
@@ -121,6 +121,7 @@ extern PyTypeObject event_object_type;
 extern PyTypeObject events_object_type;
 extern PyTypeObject stop_event_object_type;
 extern PyTypeObject breakpoint_object_type;
+extern PyTypeObject frame_object_type;
 
 typedef struct breakpoint_object
 {
@@ -289,8 +290,8 @@ extern const struct language_defn *python_language;
 
 void gdbpy_print_stack (void);
 
-void source_python_script_for_objfile (struct objfile *objfile,
-				       const char *file);
+void source_python_script_for_objfile (struct objfile *objfile, FILE *file,
+				       const char *filename);
 
 PyObject *python_string_to_unicode (PyObject *obj);
 char *unicode_to_target_string (PyObject *unicode_str);
@@ -341,4 +342,6 @@ PyObject *gdb_py_object_from_longest (LONGEST l);
 PyObject *gdb_py_object_from_ulongest (ULONGEST l);
 int gdb_py_int_as_long (PyObject *, long *);
 
+PyObject *gdb_py_generic_dict (PyObject *self, void *closure);
+
 #endif /* GDB_PYTHON_INTERNAL_H */
diff --git a/gdb/python/python.c b/gdb/python/python.c
index 6611c82..c66efe4 100644
--- a/gdb/python/python.c
+++ b/gdb/python/python.c
@@ -41,7 +41,7 @@ static const char python_excp_full[] = "full";
 static const char python_excp_message[] = "message";
 
 /* "set python print-stack" choices.  */
-static const char *python_excp_enums[] =
+static const char *const python_excp_enums[] =
   {
     python_excp_none,
     python_excp_full,
@@ -151,34 +151,31 @@ ensure_python_env (struct gdbarch *gdbarch,
   return make_cleanup (restore_python_env, env);
 }
 
-/* A wrapper around PyRun_SimpleFile.  FILENAME is the name of
-   the Python script to run.
-
-   One of the parameters of PyRun_SimpleFile is a FILE *.
-   The problem is that type FILE is extremely system and compiler
-   dependent.  So, unless the Python library has been compiled using
-   the same build environment as GDB, we run the risk of getting
-   a crash due to inconsistencies between the definition used by GDB,
-   and the definition used by Python.  A mismatch can very likely
-   lead to a crash.
-
-   There is also the situation where the Python library and GDB
-   are using two different versions of the C runtime library.
-   This is particularly visible on Windows, where few users would
-   build Python themselves (this is no trivial task on this platform),
-   and thus use binaries built by someone else instead. Python,
-   being built with VC, would use one version of the msvcr DLL
-   (Eg. msvcr100.dll), while MinGW uses msvcrt.dll.  A FILE *
-   from one runtime does not necessarily operate correctly in
+/* A wrapper around PyRun_SimpleFile.  FILE is the Python script to run
+   named FILENAME.
+
+   On Windows hosts few users would build Python themselves (this is no
+   trivial task on this platform), and thus use binaries built by
+   someone else instead.  There may happen situation where the Python
+   library and GDB are using two different versions of the C runtime
+   library.  Python, being built with VC, would use one version of the
+   msvcr DLL (Eg. msvcr100.dll), while MinGW uses msvcrt.dll.
+   A FILE * from one runtime does not necessarily operate correctly in
    the other runtime.
 
-   To work around this potential issue, we create the FILE object
-   using Python routines, thus making sure that it is compatible
-   with the Python library.  */
+   To work around this potential issue, we create on Windows hosts the
+   FILE object using Python routines, thus making sure that it is
+   compatible with the Python library.  */
 
 static void
-python_run_simple_file (const char *filename)
+python_run_simple_file (FILE *file, const char *filename)
 {
+#ifndef _WIN32
+
+  PyRun_SimpleFile (file, filename);
+
+#else /* _WIN32 */
+
   char *full_path;
   PyObject *python_file;
   struct cleanup *cleanup;
@@ -198,6 +195,8 @@ python_run_simple_file (const char *filename)
   make_cleanup_py_decref (python_file);
   PyRun_SimpleFile (PyFile_AsFile (python_file), filename);
   do_cleanups (cleanup);
+
+#endif /* _WIN32 */
 }
 
 /* Given a command_line, return a command string suitable for passing
@@ -504,7 +503,7 @@ gdbpy_decode_line (PyObject *self, PyObject *args)
 						  appease gcc.  */
   struct symtab_and_line sal;
   const char *arg = NULL;
-  char *copy = NULL;
+  char *copy_to_free = NULL, *copy = NULL;
   struct cleanup *cleanups;
   PyObject *result = NULL;
   PyObject *return_result = NULL;
@@ -516,14 +515,14 @@ gdbpy_decode_line (PyObject *self, PyObject *args)
 
   cleanups = make_cleanup (null_cleanup, NULL);
 
+  sals.sals = NULL;
   TRY_CATCH (except, RETURN_MASK_ALL)
     {
       if (arg)
 	{
 	  copy = xstrdup (arg);
-	  make_cleanup (xfree, copy);
+	  copy_to_free = copy;
 	  sals = decode_line_1 (&copy, 0, 0, 0);
-	  make_cleanup (xfree, sals.sals);
 	}
       else
 	{
@@ -533,6 +532,13 @@ gdbpy_decode_line (PyObject *self, PyObject *args)
 	  sals.nelts = 1;
 	}
     }
+
+  if (sals.sals != NULL && sals.sals != &sal)
+    {
+      make_cleanup (xfree, copy_to_free);
+      make_cleanup (xfree, sals.sals);
+    }
+
   if (except.reason < 0)
     {
       do_cleanups (cleanups);
@@ -550,7 +556,6 @@ gdbpy_decode_line (PyObject *self, PyObject *args)
       for (i = 0; i < sals.nelts; ++i)
 	{
 	  PyObject *obj;
-	  char *str;
 
 	  obj = symtab_and_line_to_sal_object (sals.sals[i]);
 	  if (! obj)
@@ -576,7 +581,16 @@ gdbpy_decode_line (PyObject *self, PyObject *args)
     }
 
   if (copy && strlen (copy) > 0)
-    unparsed = PyString_FromString (copy);
+    {
+      unparsed = PyString_FromString (copy);
+      if (unparsed == NULL)
+	{
+	  Py_DECREF (result);
+	  Py_DECREF (return_result);
+	  return_result = NULL;
+	  goto error;
+	}
+    }
   else
     {
       unparsed = Py_None;
@@ -586,13 +600,10 @@ gdbpy_decode_line (PyObject *self, PyObject *args)
   PyTuple_SetItem (return_result, 0, unparsed);
   PyTuple_SetItem (return_result, 1, result);
 
+ error:
   do_cleanups (cleanups);
 
   return return_result;
-
- error:
-  do_cleanups (cleanups);
-  return NULL;
 }
 
 /* Parse a string and evaluate it as an expression.  */
@@ -619,18 +630,36 @@ gdbpy_parse_and_eval (PyObject *self, PyObject *args)
   return value_to_value_object (result);
 }
 
+/* Implementation of gdb.find_pc_line function.
+   Returns the gdb.Symtab_and_line object corresponding to a PC value.  */
+
+static PyObject *
+gdbpy_find_pc_line (PyObject *self, PyObject *args)
+{
+  struct symtab_and_line sal;
+  CORE_ADDR pc;
+  gdb_py_ulongest pc_llu;
+
+  if (!PyArg_ParseTuple (args, GDB_PY_LLU_ARG, &pc_llu))
+    return NULL;
+
+  pc = (CORE_ADDR) pc_llu;
+  sal = find_pc_line (pc, 0);
+  return symtab_and_line_to_sal_object (sal);
+}
+
 /* Read a file as Python code.
-   FILE is the name of the file.
+   FILE is the file to run.  FILENAME is name of the file FILE.
    This does not throw any errors.  If an exception occurs python will print
    the traceback and clear the error indicator.  */
 
 void
-source_python_script (const char *file)
+source_python_script (FILE *file, const char *filename)
 {
   struct cleanup *cleanup;
 
   cleanup = ensure_python_env (get_current_arch (), current_language);
-  python_run_simple_file (file);
+  python_run_simple_file (file, filename);
   do_cleanups (cleanup);
 }
 
@@ -664,7 +693,6 @@ static void
 gdbpy_run_events (struct serial *scb, void *context)
 {
   struct cleanup *cleanup;
-  int r;
 
   cleanup = ensure_python_env (get_current_arch (), current_language);
 
@@ -834,26 +862,31 @@ gdbpy_write (PyObject *self, PyObject *args, PyObject *kw)
   const char *arg;
   static char *keywords[] = {"text", "stream", NULL };
   int stream_type = 0;
+  volatile struct gdb_exception except;
   
   if (! PyArg_ParseTupleAndKeywords (args, kw, "s|i", keywords, &arg,
 				     &stream_type))
     return NULL;
 
-  switch (stream_type)
+  TRY_CATCH (except, RETURN_MASK_ALL)
     {
-    case 1:
-      {
-	fprintf_filtered (gdb_stderr, "%s", arg);
-	break;
-      }
-    case 2:
-      {
-	fprintf_filtered (gdb_stdlog, "%s", arg);
-	break;
-      }
-    default:
-      fprintf_filtered (gdb_stdout, "%s", arg);
+      switch (stream_type)
+        {
+        case 1:
+          {
+	    fprintf_filtered (gdb_stderr, "%s", arg);
+	    break;
+          }
+        case 2:
+          {
+	    fprintf_filtered (gdb_stdlog, "%s", arg);
+	    break;
+          }
+        default:
+          fprintf_filtered (gdb_stdout, "%s", arg);
+        }
     }
+  GDB_PY_HANDLE_EXCEPTION (except);
      
   Py_RETURN_NONE;
 }
@@ -991,19 +1024,20 @@ gdbpy_progspaces (PyObject *unused1, PyObject *unused2)
    source_python_script_for_objfile; it is NULL at other times.  */
 static struct objfile *gdbpy_current_objfile;
 
-/* Set the current objfile to OBJFILE and then read FILE as Python code.
-   This does not throw any errors.  If an exception occurs python will print
-   the traceback and clear the error indicator.  */
+/* Set the current objfile to OBJFILE and then read FILE named FILENAME
+   as Python code.  This does not throw any errors.  If an exception
+   occurs python will print the traceback and clear the error indicator.  */
 
 void
-source_python_script_for_objfile (struct objfile *objfile, const char *file)
+source_python_script_for_objfile (struct objfile *objfile, FILE *file,
+                                  const char *filename)
 {
   struct cleanup *cleanups;
 
   cleanups = ensure_python_env (get_objfile_arch (objfile), current_language);
   gdbpy_current_objfile = objfile;
 
-  python_run_simple_file (file);
+  python_run_simple_file (file, filename);
 
   do_cleanups (cleanups);
   gdbpy_current_objfile = NULL;
@@ -1079,7 +1113,7 @@ eval_python_from_control_command (struct command_line *cmd)
 }
 
 void
-source_python_script (const char *file)
+source_python_script (FILE *file, const char *filename)
 {
   throw_error (UNSUPPORTED_ERROR,
 	       _("Python scripting is not supported in this copy of GDB."));
@@ -1104,58 +1138,6 @@ gdbpy_breakpoint_has_py_cond (struct breakpoint_object *bp_obj)
 #endif /* HAVE_PYTHON */
 
 

-/* Support for "mt set python print-stack on|off" is present in gdb 7.4
-   to not break Eclipse.
-   ref: https://bugs.eclipse.org/bugs/show_bug.cgi?id=367788.  */
-
-/* Lists for 'maint set python' commands.  */
-
-static struct cmd_list_element *maint_set_python_list;
-static struct cmd_list_element *maint_show_python_list;
-
-/* Function for use by 'maint set python' prefix command.  */
-
-static void
-maint_set_python (char *args, int from_tty)
-{
-  help_list (maint_set_python_list, "maintenance set python ",
-	     class_deprecated, gdb_stdout);
-}
-
-/* Function for use by 'maint show python' prefix command.  */
-
-static void
-maint_show_python (char *args, int from_tty)
-{
-  cmd_show_list (maint_show_python_list, from_tty, "");
-}
-
-/* True if we should print the stack when catching a Python error,
-   false otherwise.  */
-static int gdbpy_should_print_stack_deprecated = 0;
-
-static void
-set_maint_python_print_stack (char *args, int from_tty,
-			      struct cmd_list_element *e)
-{
-  if (gdbpy_should_print_stack_deprecated)
-    gdbpy_should_print_stack = python_excp_full;
-  else
-    gdbpy_should_print_stack = python_excp_none;
-}
-
-static void
-show_maint_python_print_stack (struct ui_file *file, int from_tty,
-			       struct cmd_list_element *c, const char *value)
-{
-  fprintf_filtered (file,
-		    _("The mode of Python stack printing on error is"
-		      " \"%s\".\n"),
-		    gdbpy_should_print_stack == python_excp_full
-		    ? "on" : "off");
-}
-
-

 
 /* Lists for 'set python' commands.  */
 
@@ -1211,34 +1193,6 @@ This command is only a placeholder.")
 #endif /* HAVE_PYTHON */
 	   );
 
-  add_prefix_cmd ("python", no_class, maint_show_python,
-		  _("Prefix command for python maintenance settings."),
-		  &maint_show_python_list, "maintenance show python ", 0,
-		  &maintenance_show_cmdlist);
-  add_prefix_cmd ("python", no_class, maint_set_python,
-		  _("Prefix command for python maintenance settings."),
-		  &maint_set_python_list, "maintenance set python ", 0,
-		  &maintenance_set_cmdlist);
-
-  add_setshow_boolean_cmd ("print-stack", class_maintenance,
-			   &gdbpy_should_print_stack_deprecated, _("\
-Enable or disable printing of Python stack dump on error."), _("\
-Show whether Python stack will be printed on error."), _("\
-Enables or disables printing of Python stack traces."),
-			   set_maint_python_print_stack,
-			   show_maint_python_print_stack,
-			   &maint_set_python_list,
-			   &maint_show_python_list);
-
-  /* Deprecate maint set/show python print-stack in favour of
-     non-maintenance alternatives.  */
-  cmd_name = "print-stack";
-  cmd = lookup_cmd (&cmd_name, maint_set_python_list, "", -1, 0);
-  deprecate_cmd (cmd, "set python print-stack");
-  cmd_name = "print-stack"; /* Reset name.  */
-  cmd = lookup_cmd (&cmd_name, maint_show_python_list, "", -1, 0);
-  deprecate_cmd (cmd, "show python print-stack");
-
   /* Add set/show python print-stack.  */
   add_prefix_cmd ("python", no_class, user_show_python,
 		  _("Prefix command for python preference settings."),
@@ -1446,6 +1400,9 @@ def GdbSetPythonDirectory (dir):\n\
 GdbSetPythonDirectory (gdb.PYTHONDIR)\n\
 # Default prompt hook does nothing.\n\
 prompt_hook = None\n\
+# Ensure that sys.argv is set to something.\n\
+# We do not use PySys_SetArgvEx because it did not appear until 2.6.6.\n\
+sys.argv = ['']\n\
 ");
 
   do_cleanups (cleanup);
@@ -1522,6 +1479,9 @@ gdb.Symtab_and_line objects (or None)."},
     "parse_and_eval (String) -> Value.\n\
 Parse String as an expression, evaluate it, and return the result as a Value."
   },
+  { "find_pc_line", gdbpy_find_pc_line, METH_VARARGS,
+    "find_pc_line (pc) -> Symtab_and_line.\n\
+Return the gdb.Symtab_and_line object corresponding to the pc value." },
 
   { "post_event", gdbpy_post_event, METH_VARARGS,
     "Post an event into gdb's event loop." },
diff --git a/gdb/python/python.h b/gdb/python/python.h
index 9e461f7..dd7066f 100644
--- a/gdb/python/python.h
+++ b/gdb/python/python.h
@@ -24,13 +24,11 @@
 
 struct breakpoint_object;
 
-extern int gdbpy_global_auto_load;
-
 extern void finish_python_initialization (void);
 
 void eval_python_from_control_command (struct command_line *);
 
-void source_python_script (const char *file);
+void source_python_script (FILE *file, const char *filename);
 
 int apply_val_pretty_printer (struct type *type, const gdb_byte *valaddr,
 			      int embedded_offset, CORE_ADDR address,
@@ -41,7 +39,7 @@ int apply_val_pretty_printer (struct type *type, const gdb_byte *valaddr,
 
 void preserve_python_values (struct objfile *objfile, htab_t copied_types);
 
-void load_auto_scripts_for_objfile (struct objfile *objfile);
+void gdbpy_load_auto_scripts_for_objfile (struct objfile *objfile);
 
 int gdbpy_should_stop (struct breakpoint_object *bp_obj);
 
diff --git a/gdb/ravenscar-sparc-thread.c b/gdb/ravenscar-sparc-thread.c
index 93af256..9132109 100644
--- a/gdb/ravenscar-sparc-thread.c
+++ b/gdb/ravenscar-sparc-thread.c
@@ -175,6 +175,9 @@ ravenscar_sparc_store_registers (struct regcache *regcache, int regnum)
                 buf_size);
 }
 
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern void _initialize_ravenscar_sparc (void);
+
 void
 _initialize_ravenscar_sparc (void)
 {
diff --git a/gdb/ravenscar-thread.c b/gdb/ravenscar-thread.c
index 63ecad5..3854381 100644
--- a/gdb/ravenscar-thread.c
+++ b/gdb/ravenscar-thread.c
@@ -72,7 +72,7 @@ static void ravenscar_store_registers (struct target_ops *ops,
 static void ravenscar_prepare_to_store (struct regcache *regcache);
 static void ravenscar_initialize  (char *name, int from_tty);
 static void ravenscar_resume (struct target_ops *ops, ptid_t ptid, int step,
-			      enum target_signal siggnal);
+			      enum gdb_signal siggnal);
 static void ravenscar_mourn_inferior (struct target_ops *ops);
 static void ravenscar_update_inferior_ptid (void);
 static int has_ravenscar_runtime (void);
@@ -187,7 +187,7 @@ ravenscar_close (int quitting)
 
 static void
 ravenscar_resume (struct target_ops *ops, ptid_t ptid, int step,
-		  enum target_signal siggnal)
+		  enum gdb_signal siggnal)
 {
   struct target_ops *beneath = find_target_beneath (ops);
 
@@ -421,6 +421,9 @@ Support for Ravenscar task/thread switching is enabled\n"));
 Support for Ravenscar task/thread switching is disabled\n"));
 }
 
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern void _initialize_ravenscar (void);
+
 /* Module startup initialization function, automagically called by
    init.c.  */
 
diff --git a/gdb/record.c b/gdb/record.c
index e396262..bb0fe52 100644
--- a/gdb/record.c
+++ b/gdb/record.c
@@ -100,7 +100,7 @@ struct record_reg_entry
 
 struct record_end_entry
 {
-  enum target_signal sigval;
+  enum gdb_signal sigval;
   ULONGEST insn_num;
 };
 
@@ -209,7 +209,7 @@ static struct target_ops record_core_ops;
 /* The beneath function pointers.  */
 static struct target_ops *record_beneath_to_resume_ops;
 static void (*record_beneath_to_resume) (struct target_ops *, ptid_t, int,
-                                         enum target_signal);
+                                         enum gdb_signal);
 static struct target_ops *record_beneath_to_wait_ops;
 static ptid_t (*record_beneath_to_wait) (struct target_ops *, ptid_t,
 					 struct target_waitstatus *,
@@ -531,7 +531,7 @@ record_arch_list_add_end (void)
 			"Process record: add end to arch list.\n");
 
   rec = record_end_alloc ();
-  rec->u.end.sigval = TARGET_SIGNAL_0;
+  rec->u.end.sigval = GDB_SIGNAL_0;
   rec->u.end.insn_num = ++record_insn_count;
 
   record_arch_list_add (rec);
@@ -581,7 +581,7 @@ record_arch_list_cleanups (void *ignore)
    record_arch_list, and add it to record_list.  */
 
 static int
-record_message (struct regcache *regcache, enum target_signal signal)
+record_message (struct regcache *regcache, enum gdb_signal signal)
 {
   int ret;
   struct gdbarch *gdbarch = get_regcache_arch (regcache);
@@ -621,7 +621,7 @@ record_message (struct regcache *regcache, enum target_signal signal)
       record_list->u.end.sigval = signal;
     }
 
-  if (signal == TARGET_SIGNAL_0
+  if (signal == GDB_SIGNAL_0
       || !gdbarch_process_record_signal_p (gdbarch))
     ret = gdbarch_process_record (gdbarch,
 				  regcache,
@@ -652,7 +652,7 @@ record_message (struct regcache *regcache, enum target_signal signal)
 
 struct record_message_args {
   struct regcache *regcache;
-  enum target_signal signal;
+  enum gdb_signal signal;
 };
 
 static int
@@ -665,7 +665,7 @@ record_message_wrapper (void *args)
 
 static int
 record_message_wrapper_safe (struct regcache *regcache,
-                             enum target_signal signal)
+                             enum gdb_signal signal)
 {
   struct record_message_args args;
 
@@ -786,7 +786,7 @@ record_exec_insn (struct regcache *regcache, struct gdbarch *gdbarch,
 
 static struct target_ops *tmp_to_resume_ops;
 static void (*tmp_to_resume) (struct target_ops *, ptid_t, int,
-			      enum target_signal);
+			      enum gdb_signal);
 static struct target_ops *tmp_to_wait_ops;
 static ptid_t (*tmp_to_wait) (struct target_ops *, ptid_t,
 			      struct target_waitstatus *,
@@ -896,6 +896,8 @@ record_open_1 (char *name, int from_tty)
   push_target (&record_ops);
 }
 
+static void record_init_record_breakpoints (void);
+
 /* "to_open" target method.  Open the process record target.  */
 
 static void
@@ -993,6 +995,8 @@ record_open (char *name, int from_tty)
   record_async_inferior_event_token
     = create_async_event_handler (record_async_inferior_event_handler,
 				  NULL);
+
+  record_init_record_breakpoints ();
 }
 
 /* "to_close" target method.  Close the process record target.  */
@@ -1056,7 +1060,7 @@ static enum exec_direction_kind record_execution_dir = EXEC_FORWARD;
 
 static void
 record_resume (struct target_ops *ops, ptid_t ptid, int step,
-               enum target_signal signal)
+               enum gdb_signal signal)
 {
   record_resume_step = step;
   record_resumed = 1;
@@ -1219,7 +1223,7 @@ record_wait_1 (struct target_ops *ops,
 
 	      /* Is this a SIGTRAP?  */
 	      if (status->kind == TARGET_WAITKIND_STOPPED
-		  && status->value.sig == TARGET_SIGNAL_TRAP)
+		  && status->value.sig == GDB_SIGNAL_TRAP)
 		{
 		  struct regcache *regcache;
 		  struct address_space *aspace;
@@ -1261,10 +1265,10 @@ record_wait_1 (struct target_ops *ops,
                       int step = 1;
 
 		      if (!record_message_wrapper_safe (regcache,
-                                                        TARGET_SIGNAL_0))
+                                                        GDB_SIGNAL_0))
   			{
                            status->kind = TARGET_WAITKIND_STOPPED;
-                           status->value.sig = TARGET_SIGNAL_0;
+                           status->value.sig = GDB_SIGNAL_0;
                            break;
   			}
 
@@ -1286,7 +1290,7 @@ record_wait_1 (struct target_ops *ops,
 					    "issuing one more step in the target beneath\n");
 		      record_beneath_to_resume (record_beneath_to_resume_ops,
 						ptid, step,
-						TARGET_SIGNAL_0);
+						GDB_SIGNAL_0);
 		      continue;
 		    }
 		}
@@ -1425,7 +1429,7 @@ record_wait_1 (struct target_ops *ops,
 		      continue_flag = 0;
 		    }
 		  /* Check target signal */
-		  if (record_list->u.end.sigval != TARGET_SIGNAL_0)
+		  if (record_list->u.end.sigval != GDB_SIGNAL_0)
 		    /* FIXME: better way to check */
 		    continue_flag = 0;
 		}
@@ -1449,12 +1453,12 @@ record_wait_1 (struct target_ops *ops,
 
 replay_out:
       if (record_get_sig)
-	status->value.sig = TARGET_SIGNAL_INT;
-      else if (record_list->u.end.sigval != TARGET_SIGNAL_0)
+	status->value.sig = GDB_SIGNAL_INT;
+      else if (record_list->u.end.sigval != GDB_SIGNAL_0)
 	/* FIXME: better way to check */
 	status->value.sig = record_list->u.end.sigval;
       else
-	status->value.sig = TARGET_SIGNAL_TRAP;
+	status->value.sig = GDB_SIGNAL_TRAP;
 
       discard_cleanups (old_cleanups);
     }
@@ -1718,24 +1722,97 @@ record_xfer_partial (struct target_ops *ops, enum target_object object,
                                          offset, len);
 }
 
-/* Behavior is conditional on RECORD_IS_REPLAY.
-   We will not actually insert or remove breakpoints when replaying,
-   nor when recording.  */
+/* This structure represents a breakpoint inserted while the record
+   target is active.  We use this to know when to install/remove
+   breakpoints in/from the target beneath.  For example, a breakpoint
+   may be inserted while recording, but removed when not replaying nor
+   recording.  In that case, the breakpoint had not been inserted on
+   the target beneath, so we should not try to remove it there.  */
+
+struct record_breakpoint
+{
+  /* The address and address space the breakpoint was set at.  */
+  struct address_space *address_space;
+  CORE_ADDR addr;
+
+  /* True when the breakpoint has been also installed in the target
+     beneath.  This will be false for breakpoints set during replay or
+     when recording.  */
+  int in_target_beneath;
+};
+
+typedef struct record_breakpoint *record_breakpoint_p;
+DEF_VEC_P(record_breakpoint_p);
+
+/* The list of breakpoints inserted while the record target is
+   active.  */
+VEC(record_breakpoint_p) *record_breakpoints = NULL;
+
+static void
+record_sync_record_breakpoints (struct bp_location *loc, void *data)
+{
+  if (loc->loc_type != bp_loc_software_breakpoint)
+      return;
+
+  if (loc->inserted)
+    {
+      struct record_breakpoint *bp = XNEW (struct record_breakpoint);
+
+      bp->addr = loc->target_info.placed_address;
+      bp->address_space = loc->target_info.placed_address_space;
+
+      bp->in_target_beneath = 1;
+
+      VEC_safe_push (record_breakpoint_p, record_breakpoints, bp);
+    }
+}
+
+/* Sync existing breakpoints to record_breakpoints.  */
+
+static void
+record_init_record_breakpoints (void)
+{
+  VEC_free (record_breakpoint_p, record_breakpoints);
+
+  iterate_over_bp_locations (record_sync_record_breakpoints);
+}
+
+/* Behavior is conditional on RECORD_IS_REPLAY.  We will not actually
+   insert or remove breakpoints in the real target when replaying, nor
+   when recording.  */
 
 static int
 record_insert_breakpoint (struct gdbarch *gdbarch,
 			  struct bp_target_info *bp_tgt)
 {
+  struct record_breakpoint *bp;
+  int in_target_beneath = 0;
+
   if (!RECORD_IS_REPLAY)
     {
-      struct cleanup *old_cleanups = record_gdb_operation_disable_set ();
-      int ret = record_beneath_to_insert_breakpoint (gdbarch, bp_tgt);
-
+      /* When recording, we currently always single-step, so we don't
+	 really need to install regular breakpoints in the inferior.
+	 However, we do have to insert software single-step
+	 breakpoints, in case the target can't hardware step.  To keep
+	 things single, we always insert.  */
+      struct cleanup *old_cleanups;
+      int ret;
+
+      old_cleanups = record_gdb_operation_disable_set ();
+      ret = record_beneath_to_insert_breakpoint (gdbarch, bp_tgt);
       do_cleanups (old_cleanups);
 
-      return ret;
+      if (ret != 0)
+	return ret;
+
+      in_target_beneath = 1;
     }
 
+  bp = XNEW (struct record_breakpoint);
+  bp->addr = bp_tgt->placed_address;
+  bp->address_space = bp_tgt->placed_address_space;
+  bp->in_target_beneath = in_target_beneath;
+  VEC_safe_push (record_breakpoint_p, record_breakpoints, bp);
   return 0;
 }
 
@@ -1745,17 +1822,35 @@ static int
 record_remove_breakpoint (struct gdbarch *gdbarch,
 			  struct bp_target_info *bp_tgt)
 {
-  if (!RECORD_IS_REPLAY)
+  struct record_breakpoint *bp;
+  int ix;
+
+  for (ix = 0;
+       VEC_iterate (record_breakpoint_p, record_breakpoints, ix, bp);
+       ++ix)
     {
-      struct cleanup *old_cleanups = record_gdb_operation_disable_set ();
-      int ret = record_beneath_to_remove_breakpoint (gdbarch, bp_tgt);
+      if (bp->addr == bp_tgt->placed_address
+	  && bp->address_space == bp_tgt->placed_address_space)
+	{
+	  if (bp->in_target_beneath)
+	    {
+	      struct cleanup *old_cleanups;
+	      int ret;
 
-      do_cleanups (old_cleanups);
+	      old_cleanups = record_gdb_operation_disable_set ();
+	      ret = record_beneath_to_remove_breakpoint (gdbarch, bp_tgt);
+	      do_cleanups (old_cleanups);
+
+	      if (ret != 0)
+		return ret;
+	    }
 
-      return ret;
+	  VEC_unordered_remove (record_breakpoint_p, record_breakpoints, ix);
+	  return 0;
+	}
     }
 
-  return 0;
+  gdb_assert_not_reached ("removing unknown breakpoint");
 }
 
 /* "to_can_execute_reverse" method for process record target.  */
@@ -1886,7 +1981,7 @@ init_record_ops (void)
 
 static void
 record_core_resume (struct target_ops *ops, ptid_t ptid, int step,
-                    enum target_signal signal)
+                    enum gdb_signal signal)
 {
   record_resume_step = step;
   record_resumed = 1;
@@ -2862,6 +2957,9 @@ cmd_record_goto (char *arg, int from_tty)
   print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC);
 }
 
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_record;
+
 void
 _initialize_record (void)
 {
diff --git a/gdb/regformats/i386/x32-avx-linux.dat b/gdb/regformats/i386/x32-avx-linux.dat
new file mode 100644
index 0000000..1203806
--- /dev/null
+++ b/gdb/regformats/i386/x32-avx-linux.dat
@@ -0,0 +1,78 @@
+# DO NOT EDIT: generated from i386/x32-avx-linux.xml
+name:x32_avx_linux
+xmltarget:x32-avx-linux.xml
+expedite:rbp,rsp,rip
+64:rax
+64:rbx
+64:rcx
+64:rdx
+64:rsi
+64:rdi
+64:rbp
+64:rsp
+64:r8
+64:r9
+64:r10
+64:r11
+64:r12
+64:r13
+64:r14
+64:r15
+64:rip
+32:eflags
+32:cs
+32:ss
+32:ds
+32:es
+32:fs
+32:gs
+80:st0
+80:st1
+80:st2
+80:st3
+80:st4
+80:st5
+80:st6
+80:st7
+32:fctrl
+32:fstat
+32:ftag
+32:fiseg
+32:fioff
+32:foseg
+32:fooff
+32:fop
+128:xmm0
+128:xmm1
+128:xmm2
+128:xmm3
+128:xmm4
+128:xmm5
+128:xmm6
+128:xmm7
+128:xmm8
+128:xmm9
+128:xmm10
+128:xmm11
+128:xmm12
+128:xmm13
+128:xmm14
+128:xmm15
+32:mxcsr
+64:orig_rax
+128:ymm0h
+128:ymm1h
+128:ymm2h
+128:ymm3h
+128:ymm4h
+128:ymm5h
+128:ymm6h
+128:ymm7h
+128:ymm8h
+128:ymm9h
+128:ymm10h
+128:ymm11h
+128:ymm12h
+128:ymm13h
+128:ymm14h
+128:ymm15h
diff --git a/gdb/regformats/i386/x32-avx.dat b/gdb/regformats/i386/x32-avx.dat
new file mode 100644
index 0000000..f13bf28
--- /dev/null
+++ b/gdb/regformats/i386/x32-avx.dat
@@ -0,0 +1,77 @@
+# DO NOT EDIT: generated from i386/x32-avx.xml
+name:x32_avx
+xmltarget:x32-avx.xml
+expedite:rbp,rsp,rip
+64:rax
+64:rbx
+64:rcx
+64:rdx
+64:rsi
+64:rdi
+64:rbp
+64:rsp
+64:r8
+64:r9
+64:r10
+64:r11
+64:r12
+64:r13
+64:r14
+64:r15
+64:rip
+32:eflags
+32:cs
+32:ss
+32:ds
+32:es
+32:fs
+32:gs
+80:st0
+80:st1
+80:st2
+80:st3
+80:st4
+80:st5
+80:st6
+80:st7
+32:fctrl
+32:fstat
+32:ftag
+32:fiseg
+32:fioff
+32:foseg
+32:fooff
+32:fop
+128:xmm0
+128:xmm1
+128:xmm2
+128:xmm3
+128:xmm4
+128:xmm5
+128:xmm6
+128:xmm7
+128:xmm8
+128:xmm9
+128:xmm10
+128:xmm11
+128:xmm12
+128:xmm13
+128:xmm14
+128:xmm15
+32:mxcsr
+128:ymm0h
+128:ymm1h
+128:ymm2h
+128:ymm3h
+128:ymm4h
+128:ymm5h
+128:ymm6h
+128:ymm7h
+128:ymm8h
+128:ymm9h
+128:ymm10h
+128:ymm11h
+128:ymm12h
+128:ymm13h
+128:ymm14h
+128:ymm15h
diff --git a/gdb/regformats/i386/x32-linux.dat b/gdb/regformats/i386/x32-linux.dat
new file mode 100644
index 0000000..6eda64a
--- /dev/null
+++ b/gdb/regformats/i386/x32-linux.dat
@@ -0,0 +1,62 @@
+# DO NOT EDIT: generated from i386/x32-linux.xml
+name:x32_linux
+xmltarget:x32-linux.xml
+expedite:rbp,rsp,rip
+64:rax
+64:rbx
+64:rcx
+64:rdx
+64:rsi
+64:rdi
+64:rbp
+64:rsp
+64:r8
+64:r9
+64:r10
+64:r11
+64:r12
+64:r13
+64:r14
+64:r15
+64:rip
+32:eflags
+32:cs
+32:ss
+32:ds
+32:es
+32:fs
+32:gs
+80:st0
+80:st1
+80:st2
+80:st3
+80:st4
+80:st5
+80:st6
+80:st7
+32:fctrl
+32:fstat
+32:ftag
+32:fiseg
+32:fioff
+32:foseg
+32:fooff
+32:fop
+128:xmm0
+128:xmm1
+128:xmm2
+128:xmm3
+128:xmm4
+128:xmm5
+128:xmm6
+128:xmm7
+128:xmm8
+128:xmm9
+128:xmm10
+128:xmm11
+128:xmm12
+128:xmm13
+128:xmm14
+128:xmm15
+32:mxcsr
+64:orig_rax
diff --git a/gdb/regformats/i386/x32.dat b/gdb/regformats/i386/x32.dat
new file mode 100644
index 0000000..6c63a8a
--- /dev/null
+++ b/gdb/regformats/i386/x32.dat
@@ -0,0 +1,61 @@
+# DO NOT EDIT: generated from i386/x32.xml
+name:x32
+xmltarget:x32.xml
+expedite:rbp,rsp,rip
+64:rax
+64:rbx
+64:rcx
+64:rdx
+64:rsi
+64:rdi
+64:rbp
+64:rsp
+64:r8
+64:r9
+64:r10
+64:r11
+64:r12
+64:r13
+64:r14
+64:r15
+64:rip
+32:eflags
+32:cs
+32:ss
+32:ds
+32:es
+32:fs
+32:gs
+80:st0
+80:st1
+80:st2
+80:st3
+80:st4
+80:st5
+80:st6
+80:st7
+32:fctrl
+32:fstat
+32:ftag
+32:fiseg
+32:fioff
+32:foseg
+32:fooff
+32:fop
+128:xmm0
+128:xmm1
+128:xmm2
+128:xmm3
+128:xmm4
+128:xmm5
+128:xmm6
+128:xmm7
+128:xmm8
+128:xmm9
+128:xmm10
+128:xmm11
+128:xmm12
+128:xmm13
+128:xmm14
+128:xmm15
+32:mxcsr
diff --git a/gdb/regformats/mips-dsp-linux.dat b/gdb/regformats/mips-dsp-linux.dat
new file mode 100644
index 0000000..34706e9
--- /dev/null
+++ b/gdb/regformats/mips-dsp-linux.dat
@@ -0,0 +1,84 @@
+# DO NOT EDIT: generated from mips-dsp-linux.xml
+name:mips_dsp_linux
+xmltarget:mips-dsp-linux.xml
+expedite:r29,pc
+32:r0
+32:r1
+32:r2
+32:r3
+32:r4
+32:r5
+32:r6
+32:r7
+32:r8
+32:r9
+32:r10
+32:r11
+32:r12
+32:r13
+32:r14
+32:r15
+32:r16
+32:r17
+32:r18
+32:r19
+32:r20
+32:r21
+32:r22
+32:r23
+32:r24
+32:r25
+32:r26
+32:r27
+32:r28
+32:r29
+32:r30
+32:r31
+32:status
+32:lo
+32:hi
+32:badvaddr
+32:cause
+32:pc
+32:f0
+32:f1
+32:f2
+32:f3
+32:f4
+32:f5
+32:f6
+32:f7
+32:f8
+32:f9
+32:f10
+32:f11
+32:f12
+32:f13
+32:f14
+32:f15
+32:f16
+32:f17
+32:f18
+32:f19
+32:f20
+32:f21
+32:f22
+32:f23
+32:f24
+32:f25
+32:f26
+32:f27
+32:f28
+32:f29
+32:f30
+32:f31
+32:fcsr
+32:fir
+32:hi1
+32:lo1
+32:hi2
+32:lo2
+32:hi3
+32:lo3
+32:dspctl
+32:restart
diff --git a/gdb/regformats/mips64-dsp-linux.dat b/gdb/regformats/mips64-dsp-linux.dat
new file mode 100644
index 0000000..ba93eb2
--- /dev/null
+++ b/gdb/regformats/mips64-dsp-linux.dat
@@ -0,0 +1,84 @@
+# DO NOT EDIT: generated from mips64-dsp-linux.xml
+name:mips64_dsp_linux
+xmltarget:mips64-dsp-linux.xml
+expedite:r29,pc
+64:r0
+64:r1
+64:r2
+64:r3
+64:r4
+64:r5
+64:r6
+64:r7
+64:r8
+64:r9
+64:r10
+64:r11
+64:r12
+64:r13
+64:r14
+64:r15
+64:r16
+64:r17
+64:r18
+64:r19
+64:r20
+64:r21
+64:r22
+64:r23
+64:r24
+64:r25
+64:r26
+64:r27
+64:r28
+64:r29
+64:r30
+64:r31
+64:status
+64:lo
+64:hi
+64:badvaddr
+64:cause
+64:pc
+64:f0
+64:f1
+64:f2
+64:f3
+64:f4
+64:f5
+64:f6
+64:f7
+64:f8
+64:f9
+64:f10
+64:f11
+64:f12
+64:f13
+64:f14
+64:f15
+64:f16
+64:f17
+64:f18
+64:f19
+64:f20
+64:f21
+64:f22
+64:f23
+64:f24
+64:f25
+64:f26
+64:f27
+64:f28
+64:f29
+64:f30
+64:f31
+64:fcsr
+64:fir
+64:hi1
+64:lo1
+64:hi2
+64:lo2
+64:hi3
+64:lo3
+32:dspctl
+64:restart
diff --git a/gdb/regformats/reg-tilegx.dat b/gdb/regformats/reg-tilegx.dat
new file mode 100644
index 0000000..fc971f9
--- /dev/null
+++ b/gdb/regformats/reg-tilegx.dat
@@ -0,0 +1,67 @@
+name:tile
+expedite:sp,lr,pc
+64:r0
+64:r1
+64:r2
+64:r3
+64:r4
+64:r5
+64:r6
+64:r7
+64:r8
+64:r9
+64:r10
+64:r11
+64:r12
+64:r13
+64:r14
+64:r15
+64:r16
+64:r17
+64:r18
+64:r19
+64:r20
+64:r21
+64:r22
+64:r23
+64:r24
+64:r25
+64:r26
+64:r27
+64:r28
+64:r29
+64:r30
+64:r31
+64:r32
+64:r33
+64:r34
+64:r35
+64:r36
+64:r37
+64:r38
+64:r39
+64:r40
+64:r41
+64:r42
+64:r43
+64:r44
+64:r45
+64:r46
+64:r47
+64:r48
+64:r49
+64:r50
+64:r51
+64:r52
+64:tp
+64:sp
+64:lr
+64:sn
+64:io0
+64:io1
+64:us0
+64:us1
+64:us2
+64:us3
+64:zero
+64:pc
diff --git a/gdb/remote-fileio.c b/gdb/remote-fileio.c
index ee43dd6..0e3d533 100644
--- a/gdb/remote-fileio.c
+++ b/gdb/remote-fileio.c
@@ -682,7 +682,7 @@ remote_fileio_func_read (char *buf)
   long target_fd, num;
   LONGEST lnum;
   CORE_ADDR ptrval;
-  int fd, ret, retlength;
+  int fd, ret;
   gdb_byte *buffer;
   size_t length;
   off_t old_offset, new_offset;
@@ -1133,7 +1133,7 @@ static void
 remote_fileio_func_fstat (char *buf)
 {
   CORE_ADDR ptrval;
-  int fd, ret, retlength;
+  int fd, ret;
   long target_fd;
   LONGEST lnum;
   struct stat st;
@@ -1212,7 +1212,7 @@ remote_fileio_func_gettimeofday (char *buf)
 {
   LONGEST lnum;
   CORE_ADDR ptrval;
-  int ret, retlength;
+  int ret;
   struct timeval tv;
   struct fio_timeval ftv;
 
@@ -1281,7 +1281,7 @@ static void
 remote_fileio_func_system (char *buf)
 {
   CORE_ADDR ptrval;
-  int ret, length, retlength;
+  int ret, length;
   char *cmdline = NULL;
 
   /* Parameter: Ptr to commandline / length incl. trailing zero */
diff --git a/gdb/remote-m32r-sdi.c b/gdb/remote-m32r-sdi.c
index ff4ba71..47f4405 100644
--- a/gdb/remote-m32r-sdi.c
+++ b/gdb/remote-m32r-sdi.c
@@ -181,8 +181,6 @@ get_ack (void)
 static int
 send_data (void *buf, int len)
 {
-  int ret;
-
   if (!sdi_desc)
     return -1;
 
@@ -452,7 +450,7 @@ m32r_close (int quitting)
 
 static void
 m32r_resume (struct target_ops *ops,
-	     ptid_t ptid, int step, enum target_signal sig)
+	     ptid_t ptid, int step, enum gdb_signal sig)
 {
   unsigned long pc_addr, bp_addr, ab_addr;
   int ib_breakpoints;
@@ -707,14 +705,13 @@ m32r_wait (struct target_ops *ops,
   int ib_breakpoints;
   long i;
   unsigned char buf[13];
-  unsigned long val;
   int ret, c;
 
   if (remote_debug)
     fprintf_unfiltered (gdb_stdlog, "m32r_wait()\n");
 
   status->kind = TARGET_WAITKIND_EXITED;
-  status->value.sig = TARGET_SIGNAL_0;
+  status->value.sig = GDB_SIGNAL_0;
 
   interrupted = 0;
   prev_sigint = signal (SIGINT, gdb_cntrl_c);
@@ -733,7 +730,7 @@ m32r_wait (struct target_ops *ops,
       if (c == '-')		/* error */
 	{
 	  status->kind = TARGET_WAITKIND_STOPPED;
-	  status->value.sig = TARGET_SIGNAL_HUP;
+	  status->value.sig = GDB_SIGNAL_HUP;
 	  return inferior_ptid;
 	}
       else if (c == '+')	/* stopped */
@@ -749,9 +746,9 @@ m32r_wait (struct target_ops *ops,
 
   status->kind = TARGET_WAITKIND_STOPPED;
   if (interrupted)
-    status->value.sig = TARGET_SIGNAL_INT;
+    status->value.sig = GDB_SIGNAL_INT;
   else
-    status->value.sig = TARGET_SIGNAL_TRAP;
+    status->value.sig = GDB_SIGNAL_TRAP;
 
   interrupted = 0;
   signal (SIGINT, prev_sigint);
@@ -885,7 +882,7 @@ m32r_detach (struct target_ops *ops, char *args, int from_tty)
   if (remote_debug)
     fprintf_unfiltered (gdb_stdlog, "m32r_detach(%d)\n", from_tty);
 
-  m32r_resume (ops, inferior_ptid, 0, TARGET_SIGNAL_0);
+  m32r_resume (ops, inferior_ptid, 0, GDB_SIGNAL_0);
 
   /* Calls m32r_close to do the real work.  */
   pop_target ();
@@ -1225,7 +1222,6 @@ m32r_load (char *args, int from_tty)
   int nostart;
   struct timeval start_time, end_time;
   unsigned long data_count;	/* Number of bytes transferred to memory.  */
-  int ret;
   static RETSIGTYPE (*prev_sigint) ();
 
   /* for direct tcp connections, we can do a fast binary download.  */
diff --git a/gdb/remote-mips.c b/gdb/remote-mips.c
index 01f780f..babbf19 100644
--- a/gdb/remote-mips.c
+++ b/gdb/remote-mips.c
@@ -1537,7 +1537,6 @@ common_open (struct target_ops *ops, char *name, int from_tty,
 	     enum mips_monitor_type new_monitor,
 	     const char *new_monitor_prompt)
 {
-  char *ptype;
   char *serial_port_name;
   char *remote_name = 0;
   char *local_name = 0;
@@ -1757,7 +1756,7 @@ mips_detach (struct target_ops *ops, char *args, int from_tty)
 
 static void
 mips_resume (struct target_ops *ops,
-	     ptid_t ptid, int step, enum target_signal siggnal)
+	     ptid_t ptid, int step, enum gdb_signal siggnal)
 {
   int err;
 
@@ -1771,7 +1770,7 @@ mips_resume (struct target_ops *ops,
 /* Return the signal corresponding to SIG, where SIG is the number which
    the MIPS protocol uses for the signal.  */
 
-static enum target_signal
+static enum gdb_signal
 mips_signal_from_protocol (int sig)
 {
   /* We allow a few more signals than the IDT board actually returns, on
@@ -1779,13 +1778,13 @@ mips_signal_from_protocol (int sig)
      for these signals is widely agreed upon.  */
   if (sig <= 0
       || sig > 31)
-    return TARGET_SIGNAL_UNKNOWN;
+    return GDB_SIGNAL_UNKNOWN;
 
-  /* Don't want to use target_signal_from_host because we are converting
+  /* Don't want to use gdb_signal_from_host because we are converting
      from MIPS signal numbers, not host ones.  Our internal numbers
      match the MIPS numbers for the signals the board can return, which
      are: SIGINT, SIGSEGV, SIGBUS, SIGILL, SIGFPE, SIGTRAP.  */
-  return (enum target_signal) sig;
+  return (enum gdb_signal) sig;
 }
 
 /* Set the register designated by REGNO to the value designated by VALUE.  */
@@ -1828,7 +1827,6 @@ mips_wait (struct target_ops *ops,
   ULONGEST rpc, rfp, rsp;
   char pc_string[17], fp_string[17], sp_string[17], flags[20];
   int nfields;
-  int i;
 
   interrupt_count = 0;
   hit_watchpoint = 0;
@@ -1839,7 +1837,7 @@ mips_wait (struct target_ops *ops,
   if (!mips_need_reply)
     {
       status->kind = TARGET_WAITKIND_STOPPED;
-      status->value.sig = TARGET_SIGNAL_TRAP;
+      status->value.sig = GDB_SIGNAL_TRAP;
       return inferior_ptid;
     }
 
@@ -1954,7 +1952,7 @@ mips_wait (struct target_ops *ops,
          is not a normal breakpoint.  */
       if (strcmp (target_shortname, "lsi") == 0)
 	{
-	  char *func_name;
+	  const char *func_name;
 	  CORE_ADDR func_start;
 	  CORE_ADDR pc = regcache_read_pc (get_current_regcache ());
 
@@ -2384,7 +2382,7 @@ mips_remove_breakpoint (struct gdbarch *gdbarch,
    is the number of hardware breakpoints already installed.  This
    implements the target_can_use_hardware_watchpoint macro.  */
 
-int
+static int
 mips_can_use_watchpoint (int type, int cnt, int othertype)
 {
   return cnt < MAX_LSI_BREAKPOINTS && strcmp (target_shortname, "lsi") == 0;
@@ -2418,7 +2416,7 @@ calculate_mask (CORE_ADDR addr, int len)
    for a write watchpoint, 1 for a read watchpoint, or 2 for a read/write
    watchpoint.  */
 
-int
+static int
 mips_insert_watchpoint (CORE_ADDR addr, int len, int type,
 			struct expression *cond)
 {
@@ -2430,7 +2428,7 @@ mips_insert_watchpoint (CORE_ADDR addr, int len, int type,
 
 /* Remove a watchpoint.  */
 
-int
+static int
 mips_remove_watchpoint (CORE_ADDR addr, int len, int type,
 			struct expression *cond)
 {
@@ -2443,7 +2441,7 @@ mips_remove_watchpoint (CORE_ADDR addr, int len, int type,
 /* Test to see if a watchpoint has been hit.  Return 1 if so; return 0,
    if not.  */
 
-int
+static int
 mips_stopped_by_watchpoint (void)
 {
   return hit_watchpoint;
diff --git a/gdb/remote-sim.c b/gdb/remote-sim.c
index 2a586e5..f5927f2 100644
--- a/gdb/remote-sim.c
+++ b/gdb/remote-sim.c
@@ -118,7 +118,7 @@ struct sim_inferior_data {
   ptid_t remote_sim_ptid;
 
   /* Signal with which to resume.  */
-  enum target_signal resume_siggnal;
+  enum gdb_signal resume_siggnal;
 
   /* Flag which indicates whether resume should step or not.  */
   int resume_step;
@@ -217,7 +217,7 @@ get_sim_inferior_data (struct inferior *inf, int sim_instance_needed)
       /* Initialize the other instance variables.  */
       sim_data->program_loaded = 0;
       sim_data->gdbsim_desc = sim_desc;
-      sim_data->resume_siggnal = TARGET_SIGNAL_0;
+      sim_data->resume_siggnal = GDB_SIGNAL_0;
       sim_data->resume_step = 0;
     }
   else if (sim_desc)
@@ -641,7 +641,10 @@ gdbsim_create_inferior (struct target_ops *target, char *exec_file, char *args,
     }
   else
     argv = NULL;
-  sim_create_inferior (sim_data->gdbsim_desc, exec_bfd, argv, env);
+
+  if (sim_create_inferior (sim_data->gdbsim_desc, exec_bfd, argv, env)
+      != SIM_RC_OK)
+    error (_("Unable to create sim inferior."));
 
   inferior_ptid = sim_data->remote_sim_ptid;
   inferior_appeared (current_inferior (), ptid_get_pid (inferior_ptid));
@@ -835,7 +838,7 @@ gdbsim_detach (struct target_ops *ops, char *args, int from_tty)
 
 struct resume_data
 {
-  enum target_signal siggnal;
+  enum gdb_signal siggnal;
   int step;
 };
 
@@ -864,7 +867,7 @@ gdbsim_resume_inferior (struct inferior *inf, void *arg)
 
 static void
 gdbsim_resume (struct target_ops *ops,
-	       ptid_t ptid, int step, enum target_signal siggnal)
+	       ptid_t ptid, int step, enum gdb_signal siggnal)
 {
   struct resume_data rd;
   struct sim_inferior_data *sim_data
@@ -1025,11 +1028,11 @@ gdbsim_wait (struct target_ops *ops,
     case sim_stopped:
       switch (sigrc)
 	{
-	case TARGET_SIGNAL_ABRT:
+	case GDB_SIGNAL_ABRT:
 	  quit ();
 	  break;
-	case TARGET_SIGNAL_INT:
-	case TARGET_SIGNAL_TRAP:
+	case GDB_SIGNAL_INT:
+	case GDB_SIGNAL_TRAP:
 	default:
 	  status->kind = TARGET_WAITKIND_STOPPED;
 	  status->value.sig = sigrc;
@@ -1195,16 +1198,28 @@ simulator_command (char *args, int from_tty)
   registers_changed ();
 }
 
-static char **
+static VEC (char_ptr) *
 sim_command_completer (struct cmd_list_element *ignore, char *text, char *word)
 {
   struct sim_inferior_data *sim_data;
+  char **tmp;
+  int i;
+  VEC (char_ptr) *result = NULL;
 
   sim_data = inferior_data (current_inferior (), sim_inferior_data_key);
   if (sim_data == NULL || sim_data->gdbsim_desc == NULL)
     return NULL;
 
-  return sim_complete_command (sim_data->gdbsim_desc, text, word);
+  tmp = sim_complete_command (sim_data->gdbsim_desc, text, word);
+  if (tmp == NULL)
+    return NULL;
+
+  /* Transform the array into a VEC, and then free the array.  */
+  for (i = 0; tmp[i] != NULL; i++)
+    VEC_safe_push (char_ptr, result, tmp[i]);
+  xfree (tmp);
+
+  return result;
 }
 
 /* Check to see if a thread is still alive.  */
@@ -1236,7 +1251,7 @@ gdbsim_pid_to_str (struct target_ops *ops, ptid_t ptid)
 
 /* Simulator memory may be accessed after the program has been loaded.  */
 
-int
+static int
 gdbsim_has_all_memory (struct target_ops *ops)
 {
   struct sim_inferior_data *sim_data
@@ -1248,7 +1263,7 @@ gdbsim_has_all_memory (struct target_ops *ops)
   return 1;
 }
 
-int
+static int
 gdbsim_has_memory (struct target_ops *ops)
 {
   struct sim_inferior_data *sim_data
diff --git a/gdb/remote.c b/gdb/remote.c
index 04b818f..1c9367d 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -65,13 +65,11 @@
 #include "tracepoint.h"
 #include "ax.h"
 #include "ax-gdb.h"
+#include "agent.h"
 
 /* Temp hacks for tracepoint encoding migration.  */
 static char *target_buf;
 static long target_buf_size;
-/*static*/ void
-encode_actions (struct breakpoint *t, struct bp_location *tloc,
-		char ***tdp_actions, char ***stepping_actions);
 
 /* The size to align memory write packets, when practical.  The protocol
    does not guarantee any alignment, and gdb will generate short
@@ -242,6 +240,10 @@ static int remote_read_description_p (struct target_ops *target);
 
 static void remote_console_output (char *msg);
 
+static int remote_supports_cond_breakpoints (void);
+
+static int remote_can_run_breakpoint_commands (void);
+
 /* The non-stop remote protocol provisions for one pending stop reply.
    This is where we keep it until it is acknowledged.  */
 
@@ -319,6 +321,14 @@ struct remote_state
   /* True if the stub reports support for conditional tracepoints.  */
   int cond_tracepoints;
 
+  /* True if the stub reports support for target-side breakpoint
+     conditions.  */
+  int cond_breakpoints;
+
+  /* True if the stub reports support for target-side breakpoint
+     commands.  */
+  int breakpoint_commands;
+
   /* True if the stub reports support for fast tracepoints.  */
   int fast_tracepoints;
 
@@ -363,7 +373,7 @@ free_private_thread_info (struct private_thread_info *info)
 static int
 remote_multi_process_p (struct remote_state *rs)
 {
-  return rs->extended && rs->multi_process_aware;
+  return rs->multi_process_aware;
 }
 
 /* This data could be associated with a target, but we do not always
@@ -479,7 +489,7 @@ remote_get_noisy_reply (char **buf_p,
 	    {
 	      adjusted_size = to - org_to;
 
-	      sprintf (buf, "qRelocInsn:%x", adjusted_size);
+	      xsnprintf (buf, *sizeof_buf, "qRelocInsn:%x", adjusted_size);
 	      putpkt (buf);
 	    }
 	  else if (ex.reason < 0 && ex.error == MEMORY_ERROR)
@@ -746,7 +756,7 @@ static int wait_forever_enabled_p = 1;
 const char interrupt_sequence_control_c[] = "Ctrl-C";
 const char interrupt_sequence_break[] = "BREAK";
 const char interrupt_sequence_break_g[] = "BREAK-g";
-static const char *interrupt_sequence_modes[] =
+static const char *const interrupt_sequence_modes[] =
   {
     interrupt_sequence_control_c,
     interrupt_sequence_break,
@@ -1242,6 +1252,7 @@ enum {
   PACKET_vFile_pwrite,
   PACKET_vFile_close,
   PACKET_vFile_unlink,
+  PACKET_vFile_readlink,
   PACKET_qXfer_auxv,
   PACKET_qXfer_features,
   PACKET_qXfer_libraries,
@@ -1253,10 +1264,12 @@ enum {
   PACKET_qXfer_threads,
   PACKET_qXfer_statictrace_read,
   PACKET_qXfer_traceframe_info,
+  PACKET_qXfer_uib,
   PACKET_qGetTIBAddr,
   PACKET_qGetTLSAddr,
   PACKET_qSupported,
   PACKET_QPassSignals,
+  PACKET_QProgramSignals,
   PACKET_qSearch_memory,
   PACKET_vAttach,
   PACKET_vRun,
@@ -1266,6 +1279,8 @@ enum {
   PACKET_qXfer_siginfo_write,
   PACKET_qAttached,
   PACKET_ConditionalTracepoints,
+  PACKET_ConditionalBreakpoints,
+  PACKET_BreakpointCommands,
   PACKET_FastTracepoints,
   PACKET_StaticTracepoints,
   PACKET_InstallInTrace,
@@ -1275,6 +1290,7 @@ enum {
   PACKET_QAllow,
   PACKET_qXfer_fdpic,
   PACKET_QDisableRandomization,
+  PACKET_QAgent,
   PACKET_MAX
 };
 
@@ -1414,14 +1430,15 @@ static int
 remote_query_attached (int pid)
 {
   struct remote_state *rs = get_remote_state ();
+  size_t size = get_remote_packet_size ();
 
   if (remote_protocol_packets[PACKET_qAttached].support == PACKET_DISABLE)
     return 0;
 
   if (remote_multi_process_p (rs))
-    sprintf (rs->buf, "qAttached:%x", pid);
+    xsnprintf (rs->buf, size, "qAttached:%x", pid);
   else
-    sprintf (rs->buf, "qAttached");
+    xsnprintf (rs->buf, size, "qAttached");
 
   putpkt (rs->buf);
   getpkt (&rs->buf, &rs->buf_size, 0);
@@ -1443,16 +1460,17 @@ remote_query_attached (int pid)
   return 0;
 }
 
-/* Add PID to GDB's inferior table.  Since we can be connected to a
-   remote system before before knowing about any inferior, mark the
-   target with execution when we find the first inferior.  If ATTACHED
-   is 1, then we had just attached to this inferior.  If it is 0, then
-   we just created this inferior.  If it is -1, then try querying the
-   remote stub to find out if it had attached to the inferior or
-   not.  */
+/* Add PID to GDB's inferior table.  If FAKE_PID_P is true, then PID
+   has been invented by GDB, instead of reported by the target.  Since
+   we can be connected to a remote system before before knowing about
+   any inferior, mark the target with execution when we find the first
+   inferior.  If ATTACHED is 1, then we had just attached to this
+   inferior.  If it is 0, then we just created this inferior.  If it
+   is -1, then try querying the remote stub to find out if it had
+   attached to the inferior or not.  */
 
 static struct inferior *
-remote_add_inferior (int pid, int attached)
+remote_add_inferior (int fake_pid_p, int pid, int attached)
 {
   struct inferior *inf;
 
@@ -1484,6 +1502,7 @@ remote_add_inferior (int pid, int attached)
     }
 
   inf->attach_flag = attached;
+  inf->fake_pid_p = fake_pid_p;
 
   return inf;
 }
@@ -1559,7 +1578,13 @@ remote_notice_new_inferior (ptid_t currthread, int running)
 	 may not know about it yet.  Add it before adding its child
 	 thread, so notifications are emitted in a sensible order.  */
       if (!in_inferior_list (ptid_get_pid (currthread)))
-	inf = remote_add_inferior (ptid_get_pid (currthread), -1);
+	{
+	  struct remote_state *rs = get_remote_state ();
+	  int fake_pid_p = !remote_multi_process_p (rs);
+
+	  inf = remote_add_inferior (fake_pid_p,
+				     ptid_get_pid (currthread), -1);
+	}
 
       /* This is really a new thread.  Add it.  */
       remote_add_thread (currthread, running);
@@ -1574,7 +1599,7 @@ remote_notice_new_inferior (ptid_t currthread, int running)
 
 /* Return the private thread data, creating it if necessary.  */
 
-struct private_thread_info *
+static struct private_thread_info *
 demand_private_info (ptid_t ptid)
 {
   struct thread_info *info = find_thread_ptid (ptid);
@@ -1657,6 +1682,65 @@ remote_pass_signals (int numsigs, unsigned char *pass_signals)
     }
 }
 
+/* The last QProgramSignals packet sent to the target.  We bypass
+   sending a new program signals list down to the target if the new
+   packet is exactly the same as the last we sent.  IOW, we only let
+   the target know about program signals list changes.  */
+
+static char *last_program_signals_packet;
+
+/* If 'QProgramSignals' is supported, tell the remote stub what
+   signals it should pass through to the inferior when detaching.  */
+
+static void
+remote_program_signals (int numsigs, unsigned char *signals)
+{
+  if (remote_protocol_packets[PACKET_QProgramSignals].support != PACKET_DISABLE)
+    {
+      char *packet, *p;
+      int count = 0, i;
+
+      gdb_assert (numsigs < 256);
+      for (i = 0; i < numsigs; i++)
+	{
+	  if (signals[i])
+	    count++;
+	}
+      packet = xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
+      strcpy (packet, "QProgramSignals:");
+      p = packet + strlen (packet);
+      for (i = 0; i < numsigs; i++)
+	{
+	  if (signal_pass_state (i))
+	    {
+	      if (i >= 16)
+		*p++ = tohex (i >> 4);
+	      *p++ = tohex (i & 15);
+	      if (count)
+		*p++ = ';';
+	      else
+		break;
+	      count--;
+	    }
+	}
+      *p = 0;
+      if (!last_program_signals_packet
+	  || strcmp (last_program_signals_packet, packet) != 0)
+	{
+	  struct remote_state *rs = get_remote_state ();
+	  char *buf = rs->buf;
+
+	  putpkt (packet);
+	  getpkt (&rs->buf, &rs->buf_size, 0);
+	  packet_ok (buf, &remote_protocol_packets[PACKET_QProgramSignals]);
+	  xfree (last_program_signals_packet);
+	  last_program_signals_packet = packet;
+	}
+      else
+	xfree (packet);
+    }
+}
+
 /* If PTID is MAGIC_NULL_PTID, don't set any thread.  If PTID is
    MINUS_ONE_PTID, set the thread to -1, so the stub returns the
    thread.  If GEN is set, set the general thread, if not, then set
@@ -1717,7 +1801,7 @@ set_general_process (void)
   struct remote_state *rs = get_remote_state ();
 
   /* If the remote can't handle multiple processes, don't bother.  */
-  if (!remote_multi_process_p (rs))
+  if (!rs->extended || !remote_multi_process_p (rs))
     return;
 
   /* We only need to change the remote current thread if it's pointing
@@ -2820,7 +2904,7 @@ remote_static_tracepoint_marker_at (CORE_ADDR addr,
   struct remote_state *rs = get_remote_state ();
   char *p = rs->buf;
 
-  sprintf (p, "qTSTMat:");
+  xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
   p += strlen (p);
   p += hexnumstr (p, addr);
   putpkt (rs->buf);
@@ -2839,20 +2923,6 @@ remote_static_tracepoint_marker_at (CORE_ADDR addr,
   return 0;
 }
 
-static void
-free_current_marker (void *arg)
-{
-  struct static_tracepoint_marker **marker_p = arg;
-
-  if (*marker_p != NULL)
-    {
-      release_static_tracepoint_marker (*marker_p);
-      xfree (*marker_p);
-    }
-  else
-    *marker_p = NULL;
-}
-
 static VEC(static_tracepoint_marker_p) *
 remote_static_tracepoint_markers_by_strid (const char *strid)
 {
@@ -3153,6 +3223,45 @@ send_interrupt_sequence (void)
 		    interrupt_sequence_mode);
 }
 
+/* Query the remote target for which is the current thread/process,
+   add it to our tables, and update INFERIOR_PTID.  The caller is
+   responsible for setting the state such that the remote end is ready
+   to return the current thread.  */
+
+static void
+add_current_inferior_and_thread (void)
+{
+  struct remote_state *rs = get_remote_state ();
+  int fake_pid_p = 0;
+  ptid_t ptid;
+
+  inferior_ptid = null_ptid;
+
+  /* Now, if we have thread information, update inferior_ptid.  */
+  ptid = remote_current_thread (inferior_ptid);
+  if (!ptid_equal (ptid, null_ptid))
+    {
+      if (!remote_multi_process_p (rs))
+	fake_pid_p = 1;
+
+      inferior_ptid = ptid;
+    }
+  else
+    {
+      /* Without this, some commands which require an active target
+	 (such as kill) won't work.  This variable serves (at least)
+	 double duty as both the pid of the target process (if it has
+	 such), and as a flag indicating that a target is active.  */
+      inferior_ptid = magic_null_ptid;
+      fake_pid_p = 1;
+    }
+
+  remote_add_inferior (fake_pid_p, ptid_get_pid (inferior_ptid), -1);
+
+  /* Add the main thread.  */
+  add_thread_silent (inferior_ptid);
+}
+
 static void
 remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
 {
@@ -3213,6 +3322,10 @@ remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
       getpkt (&rs->buf, &rs->buf_size, 0);
     }
 
+  /* Let the target know which signals it is allowed to pass down to
+     the program.  */
+  update_signals_program_target ();
+
   /* Next, if the target can specify a description, read it.  We do
      this before anything involving memory or registers.  */
   target_find_description ();
@@ -3261,6 +3374,10 @@ remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
 
   if (!non_stop)
     {
+      ptid_t ptid;
+      int fake_pid_p = 0;
+      struct inferior *inf;
+
       if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
 	{
 	  if (!extended_p)
@@ -3281,22 +3398,7 @@ remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
       /* Let the stub know that we want it to return the thread.  */
       set_continue_thread (minus_one_ptid);
 
-      /* Without this, some commands which require an active target
-	 (such as kill) won't work.  This variable serves (at least)
-	 double duty as both the pid of the target process (if it has
-	 such), and as a flag indicating that a target is active.
-	 These functions should be split out into seperate variables,
-	 especially since GDB will someday have a notion of debugging
-	 several processes.  */
-      inferior_ptid = magic_null_ptid;
-
-      /* Now, if we have thread information, update inferior_ptid.  */
-      inferior_ptid = remote_current_thread (inferior_ptid);
-
-      remote_add_inferior (ptid_get_pid (inferior_ptid), -1);
-
-      /* Always add the main thread.  */
-      add_thread_silent (inferior_ptid);
+      add_current_inferior_and_thread ();
 
       /* init_wait_for_inferior should be called before get_offsets in order
 	 to manage `inserted' flag in bp loc in a correct state.
@@ -3568,13 +3670,13 @@ remote_set_permissions (void)
 {
   struct remote_state *rs = get_remote_state ();
 
-  sprintf (rs->buf, "QAllow:"
-	   "WriteReg:%x;WriteMem:%x;"
-	   "InsertBreak:%x;InsertTrace:%x;"
-	   "InsertFastTrace:%x;Stop:%x",
-	   may_write_registers, may_write_memory,
-	   may_insert_breakpoints, may_insert_tracepoints,
-	   may_insert_fast_tracepoints, may_stop);
+  xsnprintf (rs->buf, get_remote_packet_size (), "QAllow:"
+	     "WriteReg:%x;WriteMem:%x;"
+	     "InsertBreak:%x;InsertTrace:%x;"
+	     "InsertFastTrace:%x;Stop:%x",
+	     may_write_registers, may_write_memory,
+	     may_insert_breakpoints, may_insert_tracepoints,
+	     may_insert_fast_tracepoints, may_stop);
   putpkt (rs->buf);
   getpkt (&rs->buf, &rs->buf_size, 0);
 
@@ -3696,6 +3798,26 @@ remote_cond_tracepoint_feature (const struct protocol_feature *feature,
 }
 
 static void
+remote_cond_breakpoint_feature (const struct protocol_feature *feature,
+				enum packet_support support,
+				const char *value)
+{
+  struct remote_state *rs = get_remote_state ();
+
+  rs->cond_breakpoints = (support == PACKET_ENABLE);
+}
+
+static void
+remote_breakpoint_commands_feature (const struct protocol_feature *feature,
+				    enum packet_support support,
+				    const char *value)
+{
+  struct remote_state *rs = get_remote_state ();
+
+  rs->breakpoint_commands = (support == PACKET_ENABLE);
+}
+
+static void
 remote_fast_tracepoint_feature (const struct protocol_feature *feature,
 				enum packet_support support,
 				const char *value)
@@ -3779,6 +3901,8 @@ static struct protocol_feature remote_protocol_features[] = {
     PACKET_qXfer_traceframe_info },
   { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
     PACKET_QPassSignals },
+  { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
+    PACKET_QProgramSignals },
   { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
     PACKET_QStartNoAckMode },
   { "multiprocess", PACKET_DISABLE, remote_multi_process_feature, -1 },
@@ -3789,6 +3913,10 @@ static struct protocol_feature remote_protocol_features[] = {
     PACKET_qXfer_siginfo_write },
   { "ConditionalTracepoints", PACKET_DISABLE, remote_cond_tracepoint_feature,
     PACKET_ConditionalTracepoints },
+  { "ConditionalBreakpoints", PACKET_DISABLE, remote_cond_breakpoint_feature,
+    PACKET_ConditionalBreakpoints },
+  { "BreakpointCommands", PACKET_DISABLE, remote_breakpoint_commands_feature,
+    PACKET_BreakpointCommands },
   { "FastTracepoints", PACKET_DISABLE, remote_fast_tracepoint_feature,
     PACKET_FastTracepoints },
   { "StaticTracepoints", PACKET_DISABLE, remote_static_tracepoint_feature,
@@ -3809,8 +3937,11 @@ static struct protocol_feature remote_protocol_features[] = {
     remote_enable_disable_tracepoint_feature, -1 },
   { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
     PACKET_qXfer_fdpic },
+  { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
+    PACKET_qXfer_uib },
   { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
     PACKET_QDisableRandomization },
+  { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
   { "tracenz", PACKET_DISABLE,
     remote_string_tracing_feature, -1 },
 };
@@ -3879,8 +4010,7 @@ remote_query_supported (void)
       char *q = NULL;
       struct cleanup *old_chain = make_cleanup (free_current_contents, &q);
 
-      if (rs->extended)
-	q = remote_query_supported_append (q, "multiprocess+");
+      q = remote_query_supported_append (q, "multiprocess+");
 
       if (remote_support_xml)
 	q = remote_query_supported_append (q, remote_support_xml);
@@ -4045,6 +4175,11 @@ remote_open_1 (char *name, int from_tty,
   xfree (last_pass_packet);
   last_pass_packet = NULL;
 
+  /* Make sure we send the program signals list the next time we
+     resume.  */
+  xfree (last_program_signals_packet);
+  last_program_signals_packet = NULL;
+
   remote_fileio_reset ();
   reopen_exec_file ();
   reread_symbols ();
@@ -4185,9 +4320,19 @@ remote_detach_1 (char *args, int from_tty, int extended)
   if (!target_has_execution)
     error (_("No process to detach from."));
 
+  if (from_tty)
+    {
+      char *exec_file = get_exec_file (0);
+      if (exec_file == NULL)
+	exec_file = "";
+      printf_unfiltered (_("Detaching from program: %s, %s\n"), exec_file,
+			 target_pid_to_str (pid_to_ptid (pid)));
+      gdb_flush (gdb_stdout);
+    }
+
   /* Tell the remote target to detach.  */
   if (remote_multi_process_p (rs))
-    sprintf (rs->buf, "D;%x", pid);
+    xsnprintf (rs->buf, get_remote_packet_size (), "D;%x", pid);
   else
     strcpy (rs->buf, "D");
 
@@ -4201,19 +4346,8 @@ remote_detach_1 (char *args, int from_tty, int extended)
   else
     error (_("Can't detach process."));
 
-  if (from_tty)
-    {
-      if (remote_multi_process_p (rs))
-	printf_filtered (_("Detached from remote %s.\n"),
-			 target_pid_to_str (pid_to_ptid (pid)));
-      else
-	{
-	  if (extended)
-	    puts_filtered (_("Detached from remote process.\n"));
-	  else
-	    puts_filtered (_("Ending remote debugging.\n"));
-	}
-    }
+  if (from_tty && !extended)
+    puts_filtered (_("Ending remote debugging.\n"));
 
   discard_pending_stop_replies (pid);
   target_mourn_inferior ();
@@ -4266,17 +4400,27 @@ extended_remote_attach_1 (struct target_ops *target, char *args, int from_tty)
   if (remote_protocol_packets[PACKET_vAttach].support == PACKET_DISABLE)
     error (_("This target does not support attaching to a process"));
 
-  sprintf (rs->buf, "vAttach;%x", pid);
+  if (from_tty)
+    {
+      char *exec_file = get_exec_file (0);
+
+      if (exec_file)
+	printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
+			   target_pid_to_str (pid_to_ptid (pid)));
+      else
+	printf_unfiltered (_("Attaching to %s\n"),
+			   target_pid_to_str (pid_to_ptid (pid)));
+
+      gdb_flush (gdb_stdout);
+    }
+
+  xsnprintf (rs->buf, get_remote_packet_size (), "vAttach;%x", pid);
   putpkt (rs->buf);
   getpkt (&rs->buf, &rs->buf_size, 0);
 
   if (packet_ok (rs->buf,
 		 &remote_protocol_packets[PACKET_vAttach]) == PACKET_OK)
     {
-      if (from_tty)
-	printf_unfiltered (_("Attached to %s\n"),
-			   target_pid_to_str (pid_to_ptid (pid)));
-
       if (!non_stop)
 	{
 	  /* Save the reply for later.  */
@@ -4294,7 +4438,7 @@ extended_remote_attach_1 (struct target_ops *target, char *args, int from_tty)
     error (_("Attaching to %s failed"),
 	   target_pid_to_str (pid_to_ptid (pid)));
 
-  set_current_inferior (remote_add_inferior (pid, 1));
+  set_current_inferior (remote_add_inferior (0, pid, 1));
 
   inferior_ptid = pid_to_ptid (pid);
 
@@ -4487,15 +4631,15 @@ remote_vcont_probe (struct remote_state *rs)
 
 static char *
 append_resumption (char *p, char *endp,
-		   ptid_t ptid, int step, enum target_signal siggnal)
+		   ptid_t ptid, int step, enum gdb_signal siggnal)
 {
   struct remote_state *rs = get_remote_state ();
 
-  if (step && siggnal != TARGET_SIGNAL_0)
+  if (step && siggnal != GDB_SIGNAL_0)
     p += xsnprintf (p, endp - p, ";S%02x", siggnal);
   else if (step)
     p += xsnprintf (p, endp - p, ";s");
-  else if (siggnal != TARGET_SIGNAL_0)
+  else if (siggnal != GDB_SIGNAL_0)
     p += xsnprintf (p, endp - p, ";C%02x", siggnal);
   else
     p += xsnprintf (p, endp - p, ";c");
@@ -4519,6 +4663,28 @@ append_resumption (char *p, char *endp,
   return p;
 }
 
+/* Append a vCont continue-with-signal action for threads that have a
+   non-zero stop signal.  */
+
+static char *
+append_pending_thread_resumptions (char *p, char *endp, ptid_t ptid)
+{
+  struct thread_info *thread;
+
+  ALL_THREADS (thread)
+    if (ptid_match (thread->ptid, ptid)
+	&& !ptid_equal (inferior_ptid, thread->ptid)
+	&& thread->suspend.stop_signal != GDB_SIGNAL_0
+	&& signal_pass_state (thread->suspend.stop_signal))
+      {
+	p = append_resumption (p, endp, thread->ptid,
+			       0, thread->suspend.stop_signal);
+	thread->suspend.stop_signal = GDB_SIGNAL_0;
+      }
+
+  return p;
+}
+
 /* Resume the remote inferior by using a "vCont" packet.  The thread
    to be resumed is PTID; STEP and SIGGNAL indicate whether the
    resumed thread should be single-stepped and/or signalled.  If PTID
@@ -4530,7 +4696,7 @@ append_resumption (char *p, char *endp,
    moment.  */
 
 static int
-remote_vcont_resume (ptid_t ptid, int step, enum target_signal siggnal)
+remote_vcont_resume (ptid_t ptid, int step, enum gdb_signal siggnal)
 {
   struct remote_state *rs = get_remote_state ();
   char *p;
@@ -4565,14 +4731,18 @@ remote_vcont_resume (ptid_t ptid, int step, enum target_signal siggnal)
 	 process), with preference for INFERIOR_PTID.  This assumes
 	 inferior_ptid belongs to the set of all threads we are about
 	 to resume.  */
-      if (step || siggnal != TARGET_SIGNAL_0)
+      if (step || siggnal != GDB_SIGNAL_0)
 	{
 	  /* Step inferior_ptid, with or without signal.  */
 	  p = append_resumption (p, endp, inferior_ptid, step, siggnal);
 	}
 
+      /* Also pass down any pending signaled resumption for other
+	 threads not the current.  */
+      p = append_pending_thread_resumptions (p, endp, ptid);
+
       /* And continue others without a signal.  */
-      append_resumption (p, endp, ptid, /*step=*/ 0, TARGET_SIGNAL_0);
+      append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
     }
   else
     {
@@ -4598,13 +4768,13 @@ remote_vcont_resume (ptid_t ptid, int step, enum target_signal siggnal)
 
 /* Tell the remote machine to resume.  */
 
-static enum target_signal last_sent_signal = TARGET_SIGNAL_0;
+static enum gdb_signal last_sent_signal = GDB_SIGNAL_0;
 
 static int last_sent_step;
 
 static void
 remote_resume (struct target_ops *ops,
-	       ptid_t ptid, int step, enum target_signal siggnal)
+	       ptid_t ptid, int step, enum gdb_signal siggnal)
 {
   struct remote_state *rs = get_remote_state ();
   char *buf;
@@ -4629,7 +4799,7 @@ remote_resume (struct target_ops *ops,
   if (execution_direction == EXEC_REVERSE)
     {
       /* We don't pass signals to the target in reverse exec mode.  */
-      if (info_verbose && siggnal != TARGET_SIGNAL_0)
+      if (info_verbose && siggnal != GDB_SIGNAL_0)
 	warning (_(" - Can't pass signal %d to target in reverse: ignored."),
 		 siggnal);
 
@@ -4642,7 +4812,7 @@ remote_resume (struct target_ops *ops,
 
       strcpy (buf, step ? "bs" : "bc");
     }
-  else if (siggnal != TARGET_SIGNAL_0)
+  else if (siggnal != GDB_SIGNAL_0)
     {
       buf[0] = step ? 'S' : 'C';
       buf[1] = tohex (((int) siggnal >> 4) & 0xf);
@@ -4709,7 +4879,7 @@ static void
 async_remote_interrupt (gdb_client_data arg)
 {
   if (remote_debug)
-    fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
+    fprintf_unfiltered (gdb_stdlog, "async_remote_interrupt called\n");
 
   target_stop (inferior_ptid);
 }
@@ -4720,7 +4890,7 @@ void
 async_remote_interrupt_twice (gdb_client_data arg)
 {
   if (remote_debug)
-    fprintf_unfiltered (gdb_stdlog, "remote_interrupt_twice called\n");
+    fprintf_unfiltered (gdb_stdlog, "async_remote_interrupt_twice called\n");
 
   interrupt_query ();
 }
@@ -5259,7 +5429,7 @@ Packet: '%s'\n"),
       else
 	{
 	  event->ws.kind = TARGET_WAITKIND_STOPPED;
-	  event->ws.value.sig = (enum target_signal)
+	  event->ws.value.sig = (enum gdb_signal)
 	    (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
 	}
       break;
@@ -5285,7 +5455,7 @@ Packet: '%s'\n"),
 	  {
 	    /* The remote process exited with a signal.  */
 	    event->ws.kind = TARGET_WAITKIND_SIGNALLED;
-	    event->ws.value.sig = (enum target_signal) value;
+	    event->ws.value.sig = (enum gdb_signal) value;
 	  }
 
 	/* If no process is specified, assume inferior_ptid.  */
@@ -5578,7 +5748,7 @@ remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
 	 not?  Not is more likely, so report a stop.  */
       warning (_("Remote failure reply: %s"), buf);
       status->kind = TARGET_WAITKIND_STOPPED;
-      status->value.sig = TARGET_SIGNAL_0;
+      status->value.sig = GDB_SIGNAL_0;
       break;
     case 'F':		/* File-I/O request.  */
       remote_fileio_request (buf, rs->ctrlc_pending_p);
@@ -5604,15 +5774,15 @@ remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
 
       break;
     case '\0':
-      if (last_sent_signal != TARGET_SIGNAL_0)
+      if (last_sent_signal != GDB_SIGNAL_0)
 	{
 	  /* Zero length reply means that we tried 'S' or 'C' and the
 	     remote system doesn't support it.  */
 	  target_terminal_ours_for_output ();
 	  printf_filtered
 	    ("Can't send signals to this remote system.  %s not sent.\n",
-	     target_signal_to_name (last_sent_signal));
-	  last_sent_signal = TARGET_SIGNAL_0;
+	     gdb_signal_to_name (last_sent_signal));
+	  last_sent_signal = GDB_SIGNAL_0;
 	  target_terminal_inferior ();
 
 	  strcpy ((char *) buf, last_sent_step ? "s" : "c");
@@ -5748,7 +5918,7 @@ send_g_packet (void)
   struct remote_state *rs = get_remote_state ();
   int buf_len;
 
-  sprintf (rs->buf, "g");
+  xsnprintf (rs->buf, get_remote_packet_size (), "g");
   remote_send (&rs->buf, &rs->buf_size);
 
   /* We can get out of synch in various cases.  If the first character
@@ -6325,7 +6495,7 @@ check_binary_download (CORE_ADDR addr)
 
 static int
 remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
-			const gdb_byte *myaddr, int len,
+			const gdb_byte *myaddr, ssize_t len,
 			char packet_format, int use_length)
 {
   struct remote_state *rs = get_remote_state ();
@@ -6486,7 +6656,7 @@ remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
    error.  Only transfer a single packet.  */
 
 static int
-remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, int len)
+remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, ssize_t len)
 {
   char *packet_format = 0;
 
@@ -7413,7 +7583,7 @@ remote_vkill (int pid, struct remote_state *rs)
     return -1;
 
   /* Tell the remote target to detach.  */
-  sprintf (rs->buf, "vKill;%x", pid);
+  xsnprintf (rs->buf, get_remote_packet_size (), "vKill;%x", pid);
   putpkt (rs->buf);
   getpkt (&rs->buf, &rs->buf_size, 0);
 
@@ -7434,7 +7604,7 @@ extended_remote_kill (struct target_ops *ops)
   struct remote_state *rs = get_remote_state ();
 
   res = remote_vkill (pid, rs);
-  if (res == -1 && !remote_multi_process_p (rs))
+  if (res == -1 && !(rs->extended && remote_multi_process_p (rs)))
     {
       /* Don't try 'k' on a multi-process aware stub -- it has no way
 	 to specify the pid.  */
@@ -7556,7 +7726,8 @@ extended_remote_disable_randomization (int val)
   struct remote_state *rs = get_remote_state ();
   char *reply;
 
-  sprintf (rs->buf, "QDisableRandomization:%x", val);
+  xsnprintf (rs->buf, get_remote_packet_size (), "QDisableRandomization:%x",
+	     val);
   putpkt (rs->buf);
   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
   if (*reply == '\0')
@@ -7668,14 +7839,7 @@ extended_remote_create_inferior_1 (char *exec_file, char *args,
       init_wait_for_inferior ();
     }
 
-  /* Now mark the inferior as running before we do anything else.  */
-  inferior_ptid = magic_null_ptid;
-
-  /* Now, if we have thread information, update inferior_ptid.  */
-  inferior_ptid = remote_current_thread (inferior_ptid);
-
-  remote_add_inferior (ptid_get_pid (inferior_ptid), 0);
-  add_thread_silent (inferior_ptid);
+  add_current_inferior_and_thread ();
 
   /* Get updated offsets, if the stub uses qOffsets.  */
   get_offsets ();
@@ -7690,6 +7854,75 @@ extended_remote_create_inferior (struct target_ops *ops,
 }
 

 
+/* Given a location's target info BP_TGT and the packet buffer BUF,  output
+   the list of conditions (in agent expression bytecode format), if any, the
+   target needs to evaluate.  The output is placed into the packet buffer
+   started from BUF and ended at BUF_END.  */
+
+static int
+remote_add_target_side_condition (struct gdbarch *gdbarch,
+				  struct bp_target_info *bp_tgt, char *buf,
+				  char *buf_end)
+{
+  struct agent_expr *aexpr = NULL;
+  int i, ix;
+  char *pkt;
+  char *buf_start = buf;
+
+  if (VEC_empty (agent_expr_p, bp_tgt->conditions))
+    return 0;
+
+  buf += strlen (buf);
+  xsnprintf (buf, buf_end - buf, "%s", ";");
+  buf++;
+
+  /* Send conditions to the target and free the vector.  */
+  for (ix = 0;
+       VEC_iterate (agent_expr_p, bp_tgt->conditions, ix, aexpr);
+       ix++)
+    {
+      xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
+      buf += strlen (buf);
+      for (i = 0; i < aexpr->len; ++i)
+	buf = pack_hex_byte (buf, aexpr->buf[i]);
+      *buf = '\0';
+    }
+
+  VEC_free (agent_expr_p, bp_tgt->conditions);
+  return 0;
+}
+
+static void
+remote_add_target_side_commands (struct gdbarch *gdbarch,
+				 struct bp_target_info *bp_tgt, char *buf)
+{
+  struct agent_expr *aexpr = NULL;
+  int i, ix;
+
+  if (VEC_empty (agent_expr_p, bp_tgt->tcommands))
+    return;
+
+  buf += strlen (buf);
+
+  sprintf (buf, ";cmds:%x,", bp_tgt->persist);
+  buf += strlen (buf);
+
+  /* Concatenate all the agent expressions that are commands into the
+     cmds parameter.  */
+  for (ix = 0;
+       VEC_iterate (agent_expr_p, bp_tgt->tcommands, ix, aexpr);
+       ix++)
+    {
+      sprintf (buf, "X%x,", aexpr->len);
+      buf += strlen (buf);
+      for (i = 0; i < aexpr->len; ++i)
+	buf = pack_hex_byte (buf, aexpr->buf[i]);
+      *buf = '\0';
+    }
+
+  VEC_free (agent_expr_p, bp_tgt->tcommands);
+}
+
 /* Insert a breakpoint.  On targets that have software breakpoint
    support, we ask the remote target to do the work; on targets
    which don't, we insert a traditional memory breakpoint.  */
@@ -7707,20 +7940,28 @@ remote_insert_breakpoint (struct gdbarch *gdbarch,
     {
       CORE_ADDR addr = bp_tgt->placed_address;
       struct remote_state *rs;
-      char *p;
+      char *p, *endbuf;
       int bpsize;
+      struct condition_list *cond = NULL;
 
       gdbarch_remote_breakpoint_from_pc (gdbarch, &addr, &bpsize);
 
       rs = get_remote_state ();
       p = rs->buf;
+      endbuf = rs->buf + get_remote_packet_size ();
 
       *(p++) = 'Z';
       *(p++) = '0';
       *(p++) = ',';
       addr = (ULONGEST) remote_address_masked (addr);
       p += hexnumstr (p, addr);
-      sprintf (p, ",%d", bpsize);
+      xsnprintf (p, endbuf - p, ",%d", bpsize);
+
+      if (remote_supports_cond_breakpoints ())
+	remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
+
+      if (remote_can_run_breakpoint_commands ())
+	remote_add_target_side_commands (gdbarch, bp_tgt, p);
 
       putpkt (rs->buf);
       getpkt (&rs->buf, &rs->buf_size, 0);
@@ -7751,6 +7992,7 @@ remote_remove_breakpoint (struct gdbarch *gdbarch,
   if (remote_protocol_packets[PACKET_Z0].support != PACKET_DISABLE)
     {
       char *p = rs->buf;
+      char *endbuf = rs->buf + get_remote_packet_size ();
 
       *(p++) = 'z';
       *(p++) = '0';
@@ -7758,7 +8000,7 @@ remote_remove_breakpoint (struct gdbarch *gdbarch,
 
       addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
       p += hexnumstr (p, addr);
-      sprintf (p, ",%d", bp_tgt->placed_size);
+      xsnprintf (p, endbuf - p, ",%d", bp_tgt->placed_size);
 
       putpkt (rs->buf);
       getpkt (&rs->buf, &rs->buf_size, 0);
@@ -7794,17 +8036,18 @@ remote_insert_watchpoint (CORE_ADDR addr, int len, int type,
 			  struct expression *cond)
 {
   struct remote_state *rs = get_remote_state ();
+  char *endbuf = rs->buf + get_remote_packet_size ();
   char *p;
   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
 
   if (remote_protocol_packets[PACKET_Z0 + packet].support == PACKET_DISABLE)
     return 1;
 
-  sprintf (rs->buf, "Z%x,", packet);
+  xsnprintf (rs->buf, endbuf - rs->buf, "Z%x,", packet);
   p = strchr (rs->buf, '\0');
   addr = remote_address_masked (addr);
   p += hexnumstr (p, (ULONGEST) addr);
-  sprintf (p, ",%x", len);
+  xsnprintf (p, endbuf - p, ",%x", len);
 
   putpkt (rs->buf);
   getpkt (&rs->buf, &rs->buf_size, 0);
@@ -7822,23 +8065,33 @@ remote_insert_watchpoint (CORE_ADDR addr, int len, int type,
 		  _("remote_insert_watchpoint: reached end of function"));
 }
 
+static int
+remote_watchpoint_addr_within_range (struct target_ops *target, CORE_ADDR addr,
+				     CORE_ADDR start, int length)
+{
+  CORE_ADDR diff = remote_address_masked (addr - start);
+
+  return diff < length;
+}
+
 
 static int
 remote_remove_watchpoint (CORE_ADDR addr, int len, int type,
 			  struct expression *cond)
 {
   struct remote_state *rs = get_remote_state ();
+  char *endbuf = rs->buf + get_remote_packet_size ();
   char *p;
   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
 
   if (remote_protocol_packets[PACKET_Z0 + packet].support == PACKET_DISABLE)
     return -1;
 
-  sprintf (rs->buf, "z%x,", packet);
+  xsnprintf (rs->buf, endbuf - rs->buf, "z%x,", packet);
   p = strchr (rs->buf, '\0');
   addr = remote_address_masked (addr);
   p += hexnumstr (p, (ULONGEST) addr);
-  sprintf (p, ",%x", len);
+  xsnprintf (p, endbuf - p, ",%x", len);
   putpkt (rs->buf);
   getpkt (&rs->buf, &rs->buf_size, 0);
 
@@ -7925,7 +8178,7 @@ remote_insert_hw_breakpoint (struct gdbarch *gdbarch,
 {
   CORE_ADDR addr;
   struct remote_state *rs;
-  char *p;
+  char *p, *endbuf;
 
   /* The length field should be set to the size of a breakpoint
      instruction, even though we aren't inserting one ourselves.  */
@@ -7938,6 +8191,7 @@ remote_insert_hw_breakpoint (struct gdbarch *gdbarch,
 
   rs = get_remote_state ();
   p = rs->buf;
+  endbuf = rs->buf + get_remote_packet_size ();
 
   *(p++) = 'Z';
   *(p++) = '1';
@@ -7945,7 +8199,13 @@ remote_insert_hw_breakpoint (struct gdbarch *gdbarch,
 
   addr = remote_address_masked (bp_tgt->placed_address);
   p += hexnumstr (p, (ULONGEST) addr);
-  sprintf (p, ",%x", bp_tgt->placed_size);
+  xsnprintf (p, endbuf - p, ",%x", bp_tgt->placed_size);
+
+  if (remote_supports_cond_breakpoints ())
+    remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
+
+  if (remote_can_run_breakpoint_commands ())
+    remote_add_target_side_commands (gdbarch, bp_tgt, p);
 
   putpkt (rs->buf);
   getpkt (&rs->buf, &rs->buf_size, 0);
@@ -7970,6 +8230,7 @@ remote_remove_hw_breakpoint (struct gdbarch *gdbarch,
   CORE_ADDR addr;
   struct remote_state *rs = get_remote_state ();
   char *p = rs->buf;
+  char *endbuf = rs->buf + get_remote_packet_size ();
 
   if (remote_protocol_packets[PACKET_Z1].support == PACKET_DISABLE)
     return -1;
@@ -7980,7 +8241,7 @@ remote_remove_hw_breakpoint (struct gdbarch *gdbarch,
 
   addr = remote_address_masked (bp_tgt->placed_address);
   p += hexnumstr (p, (ULONGEST) addr);
-  sprintf (p, ",%x", bp_tgt->placed_size);
+  xsnprintf (p, endbuf  - p, ",%x", bp_tgt->placed_size);
 
   putpkt (rs->buf);
   getpkt (&rs->buf, &rs->buf_size, 0);
@@ -8404,6 +8665,11 @@ remote_xfer_partial (struct target_ops *ops, enum target_object object,
     case TARGET_OBJECT_FDPIC:
       return remote_read_qxfer (ops, "fdpic", annex, readbuf, offset, len,
 				&remote_protocol_packets[PACKET_qXfer_fdpic]);
+
+    case TARGET_OBJECT_OPENVMS_UIB:
+      return remote_read_qxfer (ops, "uib", annex, readbuf, offset, len,
+				&remote_protocol_packets[PACKET_qXfer_uib]);
+
     default:
       return -1;
     }
@@ -8577,8 +8843,17 @@ remote_rcmd (char *command,
       char *buf;
 
       /* XXX - see also remote_get_noisy_reply().  */
+      QUIT;			/* Allow user to bail out with ^C.  */
       rs->buf[0] = '\0';
-      getpkt (&rs->buf, &rs->buf_size, 0);
+      if (getpkt_sane (&rs->buf, &rs->buf_size, 0) == -1)
+        { 
+          /* Timeout.  Continue to (try to) read responses.
+             This is better than stopping with an error, assuming the stub
+             is still executing the (long) monitor command.
+             If needed, the user can interrupt gdb using C-c, obtaining
+             an effect similar to stop on timeout.  */
+          continue;
+        }
       buf = rs->buf;
       if (buf[0] == '\0')
 	error (_("Target does not support this command."));
@@ -8801,7 +9076,9 @@ remote_pid_to_str (struct target_ops *ops, ptid_t ptid)
   static char buf[64];
   struct remote_state *rs = get_remote_state ();
 
-  if (ptid_is_pid (ptid))
+  if (ptid_equal (ptid, null_ptid))
+    return normal_pid_to_str (ptid);
+  else if (ptid_is_pid (ptid))
     {
       /* Printing an inferior target id.  */
 
@@ -8826,7 +9103,7 @@ remote_pid_to_str (struct target_ops *ops, ptid_t ptid)
     {
       if (ptid_equal (magic_null_ptid, ptid))
 	xsnprintf (buf, sizeof buf, "Thread <main>");
-      else if (remote_multi_process_p (rs))
+      else if (rs->extended && remote_multi_process_p (rs))
 	xsnprintf (buf, sizeof buf, "Thread %d.%ld",
 		   ptid_get_pid (ptid), ptid_get_tid (ptid));
       else
@@ -8887,7 +9164,7 @@ remote_get_thread_local_address (struct target_ops *ops,
 /* Provide thread local base, i.e. Thread Information Block address.
    Returns 1 if ptid is found and thread_local_base is non zero.  */
 
-int
+static int
 remote_get_tib_address (ptid_t ptid, CORE_ADDR *addr)
 {
   if (remote_protocol_packets[PACKET_qGetTIBAddr].support != PACKET_DISABLE)
@@ -9353,6 +9630,44 @@ remote_hostio_unlink (const char *filename, int *remote_errno)
 				     remote_errno, NULL, NULL);
 }
 
+/* Read value of symbolic link FILENAME on the remote target.  Return
+   a null-terminated string allocated via xmalloc, or NULL if an error
+   occurs (and set *REMOTE_ERRNO).  */
+
+static char *
+remote_hostio_readlink (const char *filename, int *remote_errno)
+{
+  struct remote_state *rs = get_remote_state ();
+  char *p = rs->buf;
+  char *attachment;
+  int left = get_remote_packet_size ();
+  int len, attachment_len;
+  int read_len;
+  char *ret;
+
+  remote_buffer_add_string (&p, &left, "vFile:readlink:");
+
+  remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
+			   strlen (filename));
+
+  len = remote_hostio_send_command (p - rs->buf, PACKET_vFile_readlink,
+				    remote_errno, &attachment,
+				    &attachment_len);
+
+  if (len < 0)
+    return NULL;
+
+  ret = xmalloc (len + 1);
+
+  read_len = remote_unescape_input (attachment, attachment_len,
+				    ret, len);
+  if (read_len != len)
+    error (_("Readlink returned %d, but %d bytes."), len, read_len);
+
+  ret[len] = '\0';
+  return ret;
+}
+
 static int
 remote_fileio_errno_to_host (int errnum)
 {
@@ -9767,10 +10082,14 @@ remote_supports_multi_process (void)
 {
   struct remote_state *rs = get_remote_state ();
 
-  return remote_multi_process_p (rs);
+  /* Only extended-remote handles being attached to multiple
+     processes, even though plain remote can use the multi-process
+     thread id extensions, so that GDB knows the target process's
+     PID.  */
+  return rs->extended && remote_multi_process_p (rs);
 }
 
-int
+static int
 remote_supports_cond_tracepoints (void)
 {
   struct remote_state *rs = get_remote_state ();
@@ -9778,7 +10097,15 @@ remote_supports_cond_tracepoints (void)
   return rs->cond_tracepoints;
 }
 
-int
+static int
+remote_supports_cond_breakpoints (void)
+{
+  struct remote_state *rs = get_remote_state ();
+
+  return rs->cond_breakpoints;
+}
+
+static int
 remote_supports_fast_tracepoints (void)
 {
   struct remote_state *rs = get_remote_state ();
@@ -9818,6 +10145,14 @@ remote_supports_string_tracing (void)
   return rs->string_tracing;
 }
 
+static int
+remote_can_run_breakpoint_commands (void)
+{
+  struct remote_state *rs = get_remote_state ();
+
+  return rs->breakpoint_commands;
+}
+
 static void
 remote_trace_init (void)
 {
@@ -9892,10 +10227,11 @@ remote_download_command_source (int num, ULONGEST addr,
 static void
 remote_download_tracepoint (struct bp_location *loc)
 {
+#define BUF_SIZE 2048
 
   CORE_ADDR tpaddr;
   char addrbuf[40];
-  char buf[2048];
+  char buf[BUF_SIZE];
   char **tdp_actions;
   char **stepping_actions;
   int ndx;
@@ -9914,10 +10250,10 @@ remote_download_tracepoint (struct bp_location *loc)
 
   tpaddr = loc->address;
   sprintf_vma (addrbuf, tpaddr);
-  sprintf (buf, "QTDP:%x:%s:%c:%lx:%x", b->number,
-	   addrbuf, /* address */
-	   (b->enable_state == bp_enabled ? 'E' : 'D'),
-	   t->step_count, t->pass_count);
+  xsnprintf (buf, BUF_SIZE, "QTDP:%x:%s:%c:%lx:%x", b->number,
+	     addrbuf, /* address */
+	     (b->enable_state == bp_enabled ? 'E' : 'D'),
+	     t->step_count, t->pass_count);
   /* Fast tracepoints are mostly handled by the target, but we can
      tell the target how big of an instruction block should be moved
      around.  */
@@ -9931,7 +10267,8 @@ remote_download_tracepoint (struct bp_location *loc)
 
 	  if (gdbarch_fast_tracepoint_valid_at (target_gdbarch,
 						tpaddr, &isize, NULL))
-	    sprintf (buf + strlen (buf), ":F%x", isize);
+	    xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x",
+		       isize);
 	  else
 	    /* If it passed validation at definition but fails now,
 	       something is very wrong.  */
@@ -9975,7 +10312,8 @@ remote_download_tracepoint (struct bp_location *loc)
 	{
 	  aexpr = gen_eval_for_expr (tpaddr, loc->cond);
 	  aexpr_chain = make_cleanup_free_agent_expr (aexpr);
-	  sprintf (buf + strlen (buf), ":X%x,", aexpr->len);
+	  xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":X%x,",
+		     aexpr->len);
 	  pkt = buf + strlen (buf);
 	  for (ndx = 0; ndx < aexpr->len; ++ndx)
 	    pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
@@ -10000,11 +10338,11 @@ remote_download_tracepoint (struct bp_location *loc)
       for (ndx = 0; tdp_actions[ndx]; ndx++)
 	{
 	  QUIT;	/* Allow user to bail out with ^C.  */
-	  sprintf (buf, "QTDP:-%x:%s:%s%c",
-		   b->number, addrbuf, /* address */
-		   tdp_actions[ndx],
-		   ((tdp_actions[ndx + 1] || stepping_actions)
-		    ? '-' : 0));
+	  xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
+		     b->number, addrbuf, /* address */
+		     tdp_actions[ndx],
+		     ((tdp_actions[ndx + 1] || stepping_actions)
+		      ? '-' : 0));
 	  putpkt (buf);
 	  remote_get_noisy_reply (&target_buf,
 				  &target_buf_size);
@@ -10017,11 +10355,11 @@ remote_download_tracepoint (struct bp_location *loc)
       for (ndx = 0; stepping_actions[ndx]; ndx++)
 	{
 	  QUIT;	/* Allow user to bail out with ^C.  */
-	  sprintf (buf, "QTDP:-%x:%s:%s%s%s",
-		   b->number, addrbuf, /* address */
-		   ((ndx == 0) ? "S" : ""),
-		   stepping_actions[ndx],
-		   (stepping_actions[ndx + 1] ? "-" : ""));
+	  xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
+		     b->number, addrbuf, /* address */
+		     ((ndx == 0) ? "S" : ""),
+		     stepping_actions[ndx],
+		     (stepping_actions[ndx + 1] ? "-" : ""));
 	  putpkt (buf);
 	  remote_get_noisy_reply (&target_buf,
 				  &target_buf_size);
@@ -10097,8 +10435,9 @@ remote_download_trace_state_variable (struct trace_state_variable *tsv)
   struct remote_state *rs = get_remote_state ();
   char *p;
 
-  sprintf (rs->buf, "QTDV:%x:%s:%x:",
-	   tsv->number, phex ((ULONGEST) tsv->initial_value, 8), tsv->builtin);
+  xsnprintf (rs->buf, get_remote_packet_size (), "QTDV:%x:%s:%x:",
+	     tsv->number, phex ((ULONGEST) tsv->initial_value, 8),
+	     tsv->builtin);
   p = rs->buf + strlen (rs->buf);
   if ((p - rs->buf) + strlen (tsv->name) * 2 >= get_remote_packet_size ())
     error (_("Trace state variable name too long for tsv definition packet"));
@@ -10119,7 +10458,8 @@ remote_enable_tracepoint (struct bp_location *location)
   char addr_buf[40];
 
   sprintf_vma (addr_buf, location->address);
-  sprintf (rs->buf, "QTEnable:%x:%s", location->owner->number, addr_buf);
+  xsnprintf (rs->buf, get_remote_packet_size (), "QTEnable:%x:%s",
+	     location->owner->number, addr_buf);
   putpkt (rs->buf);
   remote_get_noisy_reply (&rs->buf, &rs->buf_size);
   if (*rs->buf == '\0')
@@ -10135,7 +10475,8 @@ remote_disable_tracepoint (struct bp_location *location)
   char addr_buf[40];
 
   sprintf_vma (addr_buf, location->address);
-  sprintf (rs->buf, "QTDisable:%x:%s", location->owner->number, addr_buf);
+  xsnprintf (rs->buf, get_remote_packet_size (), "QTDisable:%x:%s",
+	     location->owner->number, addr_buf);
   putpkt (rs->buf);
   remote_get_noisy_reply (&rs->buf, &rs->buf_size);
   if (*rs->buf == '\0')
@@ -10148,6 +10489,7 @@ static void
 remote_trace_set_readonly_regions (void)
 {
   asection *s;
+  bfd *abfd = NULL;
   bfd_size_type size;
   bfd_vma vma;
   int anysecs = 0;
@@ -10168,7 +10510,7 @@ remote_trace_set_readonly_regions (void)
 	continue;
 
       anysecs = 1;
-      vma = bfd_get_section_vma (,s);
+      vma = bfd_get_section_vma (abfd, s);
       size = bfd_get_section_size (s);
       sprintf_vma (tmp1, vma);
       sprintf_vma (tmp2, vma + size);
@@ -10181,7 +10523,8 @@ remote_trace_set_readonly_regions (void)
 Too many sections for read-only sections definition packet."));
 	  break;
 	}
-      sprintf (target_buf + offset, ":%s,%s", tmp1, tmp2);
+      xsnprintf (target_buf + offset, target_buf_size - offset, ":%s,%s",
+		 tmp1, tmp2);
       offset += sec_length;
     }
   if (anysecs)
@@ -10246,7 +10589,7 @@ remote_get_trace_status (struct trace_status *ts)
   return ts->running;
 }
 
-void
+static void
 remote_get_tracepoint_status (struct breakpoint *bp,
 			      struct uploaded_tp *utp)
 {
@@ -10254,6 +10597,7 @@ remote_get_tracepoint_status (struct breakpoint *bp,
   char *reply;
   struct bp_location *loc;
   struct tracepoint *tp = (struct tracepoint *) bp;
+  size_t size = get_remote_packet_size ();
 
   if (tp)
     {
@@ -10265,8 +10609,8 @@ remote_get_tracepoint_status (struct breakpoint *bp,
 	     any status.  */
 	  if (tp->number_on_target == 0)
 	    continue;
-	  sprintf (rs->buf, "qTP:%x:%s", tp->number_on_target,
-		   phex_nz (loc->address, 0));
+	  xsnprintf (rs->buf, size, "qTP:%x:%s", tp->number_on_target,
+		     phex_nz (loc->address, 0));
 	  putpkt (rs->buf);
 	  reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
 	  if (reply && *reply)
@@ -10280,7 +10624,8 @@ remote_get_tracepoint_status (struct breakpoint *bp,
     {
       utp->hit_count = 0;
       utp->traceframe_usage = 0;
-      sprintf (rs->buf, "qTP:%x:%s", utp->number, phex_nz (utp->addr, 0));
+      xsnprintf (rs->buf, size, "qTP:%x:%s", utp->number,
+		 phex_nz (utp->addr, 0));
       putpkt (rs->buf);
       reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
       if (reply && *reply)
@@ -10308,6 +10653,7 @@ remote_trace_find (enum trace_find_type type, int num,
 		   int *tpp)
 {
   struct remote_state *rs = get_remote_state ();
+  char *endbuf = rs->buf + get_remote_packet_size ();
   char *p, *reply;
   int target_frameno = -1, target_tracept = -1;
 
@@ -10323,19 +10669,21 @@ remote_trace_find (enum trace_find_type type, int num,
   switch (type)
     {
     case tfind_number:
-      sprintf (p, "%x", num);
+      xsnprintf (p, endbuf - p, "%x", num);
       break;
     case tfind_pc:
-      sprintf (p, "pc:%s", phex_nz (addr1, 0));
+      xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
       break;
     case tfind_tp:
-      sprintf (p, "tdp:%x", num);
+      xsnprintf (p, endbuf - p, "tdp:%x", num);
       break;
     case tfind_range:
-      sprintf (p, "range:%s:%s", phex_nz (addr1, 0), phex_nz (addr2, 0));
+      xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
+		 phex_nz (addr2, 0));
       break;
     case tfind_outside:
-      sprintf (p, "outside:%s:%s", phex_nz (addr1, 0), phex_nz (addr2, 0));
+      xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
+		 phex_nz (addr2, 0));
       break;
     default:
       error (_("Unknown trace find type %d"), type);
@@ -10390,7 +10738,7 @@ remote_get_trace_state_variable_value (int tsvnum, LONGEST *val)
 
   set_remote_traceframe ();
 
-  sprintf (rs->buf, "qTV:%x", tsvnum);
+  xsnprintf (rs->buf, get_remote_packet_size (), "qTV:%x", tsvnum);
   putpkt (rs->buf);
   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
   if (reply && *reply)
@@ -10479,7 +10827,7 @@ remote_set_disconnected_tracing (int val)
     {
       char *reply;
 
-      sprintf (rs->buf, "QTDisconnected:%x", val);
+      xsnprintf (rs->buf, get_remote_packet_size (), "QTDisconnected:%x", val);
       putpkt (rs->buf);
       reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
       if (*reply == '\0')
@@ -10507,7 +10855,7 @@ remote_set_circular_trace_buffer (int val)
   struct remote_state *rs = get_remote_state ();
   char *reply;
 
-  sprintf (rs->buf, "QTBuffer:circular:%x", val);
+  xsnprintf (rs->buf, get_remote_packet_size (), "QTBuffer:circular:%x", val);
   putpkt (rs->buf);
   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
   if (*reply == '\0')
@@ -10547,7 +10895,15 @@ remote_get_min_fast_tracepoint_insn_len (void)
   struct remote_state *rs = get_remote_state ();
   char *reply;
 
-  sprintf (rs->buf, "qTMinFTPILen");
+  /* If we're not debugging a process yet, the IPA can't be
+     loaded.  */
+  if (!target_has_execution)
+    return 0;
+
+  /* Make sure the remote is pointing at the right process.  */
+  set_general_process ();
+
+  xsnprintf (rs->buf, get_remote_packet_size (), "qTMinFTPILen");
   putpkt (rs->buf);
   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
   if (*reply == '\0')
@@ -10607,6 +10963,34 @@ remote_set_trace_notes (char *user, char *notes, char *stop_notes)
   return 1;
 }
 
+static int
+remote_use_agent (int use)
+{
+  if (remote_protocol_packets[PACKET_QAgent].support != PACKET_DISABLE)
+    {
+      struct remote_state *rs = get_remote_state ();
+
+      /* If the stub supports QAgent.  */
+      xsnprintf (rs->buf, get_remote_packet_size (), "QAgent:%d", use);
+      putpkt (rs->buf);
+      getpkt (&rs->buf, &rs->buf_size, 0);
+
+      if (strcmp (rs->buf, "OK") == 0)
+	{
+	  use_agent = use;
+	  return 1;
+	}
+    }
+
+  return 0;
+}
+
+static int
+remote_can_use_agent (void)
+{
+  return (remote_protocol_packets[PACKET_QAgent].support != PACKET_DISABLE);
+}
+
 static void
 init_remote_ops (void)
 {
@@ -10631,6 +11015,8 @@ Specify the serial device it is connected to\n\
   remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
   remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
   remote_ops.to_stopped_data_address = remote_stopped_data_address;
+  remote_ops.to_watchpoint_addr_within_range =
+    remote_watchpoint_addr_within_range;
   remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
   remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
   remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
@@ -10642,6 +11028,7 @@ Specify the serial device it is connected to\n\
   remote_ops.to_load = generic_load;
   remote_ops.to_mourn_inferior = remote_mourn;
   remote_ops.to_pass_signals = remote_pass_signals;
+  remote_ops.to_program_signals = remote_program_signals;
   remote_ops.to_thread_alive = remote_thread_alive;
   remote_ops.to_find_new_threads = remote_threads_info;
   remote_ops.to_pid_to_str = remote_pid_to_str;
@@ -10675,8 +11062,16 @@ Specify the serial device it is connected to\n\
   remote_ops.to_supports_multi_process = remote_supports_multi_process;
   remote_ops.to_supports_disable_randomization
     = remote_supports_disable_randomization;
+  remote_ops.to_fileio_open = remote_hostio_open;
+  remote_ops.to_fileio_pwrite = remote_hostio_pwrite;
+  remote_ops.to_fileio_pread = remote_hostio_pread;
+  remote_ops.to_fileio_close = remote_hostio_close;
+  remote_ops.to_fileio_unlink = remote_hostio_unlink;
+  remote_ops.to_fileio_readlink = remote_hostio_readlink;
   remote_ops.to_supports_enable_disable_tracepoint = remote_supports_enable_disable_tracepoint;
   remote_ops.to_supports_string_tracing = remote_supports_string_tracing;
+  remote_ops.to_supports_evaluation_of_breakpoint_conditions = remote_supports_cond_breakpoints;
+  remote_ops.to_can_run_breakpoint_commands = remote_can_run_breakpoint_commands;
   remote_ops.to_trace_init = remote_trace_init;
   remote_ops.to_download_tracepoint = remote_download_tracepoint;
   remote_ops.to_can_download_tracepoint = remote_can_download_tracepoint;
@@ -10710,6 +11105,8 @@ Specify the serial device it is connected to\n\
   remote_ops.to_static_tracepoint_markers_by_strid
     = remote_static_tracepoint_markers_by_strid;
   remote_ops.to_traceframe_info = remote_traceframe_info;
+  remote_ops.to_use_agent = remote_use_agent;
+  remote_ops.to_can_use_agent = remote_can_use_agent;
 }
 
 /* Set up the extended remote vector by making a copy of the standard
@@ -11077,6 +11474,9 @@ Show the maximum size of the address (in bits) in a memory packet."), NULL,
   add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
 			 "QPassSignals", "pass-signals", 0);
 
+  add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
+			 "QProgramSignals", "program-signals", 0);
+
   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
 			 "qSymbol", "symbol-lookup", 0);
 
@@ -11138,6 +11538,9 @@ Show the maximum size of the address (in bits) in a memory packet."), NULL,
     (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
      "qXfer:trace-frame-info:read", "traceframe-info", 0);
 
+  add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
+			 "qXfer:uib:read", "unwind-info-block", 0);
+
   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
 			 "qGetTLSAddr", "get-thread-local-storage-address",
 			 0);
@@ -11173,6 +11576,9 @@ Show the maximum size of the address (in bits) in a memory packet."), NULL,
   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
 			 "vFile:unlink", "hostio-unlink", 0);
 
+  add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
+			 "vFile:readlink", "hostio-readlink", 0);
+
   add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
 			 "vAttach", "attach", 0);
 
@@ -11191,6 +11597,15 @@ Show the maximum size of the address (in bits) in a memory packet."), NULL,
   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
 			 "ConditionalTracepoints",
 			 "conditional-tracepoints", 0);
+
+  add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
+			 "ConditionalBreakpoints",
+			 "conditional-breakpoints", 0);
+
+  add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
+			 "BreakpointCommands",
+			 "breakpoint-commands", 0);
+
   add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
 			 "FastTracepoints", "fast-tracepoints", 0);
 
@@ -11215,6 +11630,9 @@ Show the maximum size of the address (in bits) in a memory packet."), NULL,
   add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
 			 "QDisableRandomization", "disable-randomization", 0);
 
+  add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
+			 "QAgent", "agent", 0);
+
   /* Keep the old ``set remote Z-packet ...'' working.  Each individual
      Z sub-packet has its own set and show commands, but users may
      have sets to this variable in their .gdbinit files (or in their
diff --git a/gdb/reverse.c b/gdb/reverse.c
index 042296e..07c7de4 100644
--- a/gdb/reverse.c
+++ b/gdb/reverse.c
@@ -216,7 +216,6 @@ delete_all_bookmarks (void)
 static void
 delete_bookmark_command (char *args, int from_tty)
 {
-  struct bookmark *b;
   int num;
   struct get_number_or_range_state state;
 
diff --git a/gdb/rl78-tdep.c b/gdb/rl78-tdep.c
new file mode 100644
index 0000000..acd36c2
--- /dev/null
+++ b/gdb/rl78-tdep.c
@@ -0,0 +1,1173 @@
+/* Target-dependent code for the Renesas RL78 for GDB, the GNU debugger.
+
+   Copyright (C) 2011-2012 Free Software Foundation, Inc.
+
+   Contributed by Red Hat, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "arch-utils.h"
+#include "prologue-value.h"
+#include "target.h"
+#include "regcache.h"
+#include "opcode/rl78.h"
+#include "dis-asm.h"
+#include "gdbtypes.h"
+#include "frame.h"
+#include "frame-unwind.h"
+#include "frame-base.h"
+#include "value.h"
+#include "gdbcore.h"
+#include "dwarf2-frame.h"
+#include "reggroups.h"
+
+#include "elf/rl78.h"
+#include "elf-bfd.h"
+
+/* Register Banks.  */
+
+enum
+{
+  RL78_BANK0 = 0,
+  RL78_BANK1 = 1,
+  RL78_BANK2 = 2,
+  RL78_BANK3 = 3,
+  RL78_NUMBANKS = 4,
+  RL78_REGS_PER_BANK = 8
+};
+
+/* Register Numbers.  */
+
+enum
+{
+  /* All general purpose registers are 8 bits wide.  */
+  RL78_RAW_BANK0_R0_REGNUM = 0,
+  RL78_RAW_BANK0_R1_REGNUM,
+  RL78_RAW_BANK0_R2_REGNUM,
+  RL78_RAW_BANK0_R3_REGNUM,
+  RL78_RAW_BANK0_R4_REGNUM,
+  RL78_RAW_BANK0_R5_REGNUM,
+  RL78_RAW_BANK0_R6_REGNUM,
+  RL78_RAW_BANK0_R7_REGNUM,
+
+  RL78_RAW_BANK1_R0_REGNUM,
+  RL78_RAW_BANK1_R1_REGNUM,
+  RL78_RAW_BANK1_R2_REGNUM,
+  RL78_RAW_BANK1_R3_REGNUM,
+  RL78_RAW_BANK1_R4_REGNUM,
+  RL78_RAW_BANK1_R5_REGNUM,
+  RL78_RAW_BANK1_R6_REGNUM,
+  RL78_RAW_BANK1_R7_REGNUM,
+
+  RL78_RAW_BANK2_R0_REGNUM,
+  RL78_RAW_BANK2_R1_REGNUM,
+  RL78_RAW_BANK2_R2_REGNUM,
+  RL78_RAW_BANK2_R3_REGNUM,
+  RL78_RAW_BANK2_R4_REGNUM,
+  RL78_RAW_BANK2_R5_REGNUM,
+  RL78_RAW_BANK2_R6_REGNUM,
+  RL78_RAW_BANK2_R7_REGNUM,
+
+  RL78_RAW_BANK3_R0_REGNUM,
+  RL78_RAW_BANK3_R1_REGNUM,
+  RL78_RAW_BANK3_R2_REGNUM,
+  RL78_RAW_BANK3_R3_REGNUM,
+  RL78_RAW_BANK3_R4_REGNUM,
+  RL78_RAW_BANK3_R5_REGNUM,
+  RL78_RAW_BANK3_R6_REGNUM,
+  RL78_RAW_BANK3_R7_REGNUM,
+
+  RL78_PSW_REGNUM,	/* 8 bits */
+  RL78_ES_REGNUM,	/* 8 bits */
+  RL78_CS_REGNUM,	/* 8 bits */
+  RL78_PC_REGNUM,	/* 20 bits; we'll use 32 bits for it.  */
+
+  /* Fixed address SFRs (some of those above are SFRs too.) */
+  RL78_SPL_REGNUM,	/* 8 bits; lower half of SP */
+  RL78_SPH_REGNUM,	/* 8 bits; upper half of SP */
+  RL78_PMC_REGNUM,	/* 8 bits */
+  RL78_MEM_REGNUM,	/* 8 bits ?? */
+
+  RL78_NUM_REGS,
+
+  /* Pseudo registers.  */
+  RL78_SP_REGNUM = RL78_NUM_REGS,
+
+  RL78_X_REGNUM,
+  RL78_A_REGNUM,
+  RL78_C_REGNUM,
+  RL78_B_REGNUM,
+  RL78_E_REGNUM,
+  RL78_D_REGNUM,
+  RL78_L_REGNUM,
+  RL78_H_REGNUM,
+
+  RL78_AX_REGNUM,
+  RL78_BC_REGNUM,
+  RL78_DE_REGNUM,
+  RL78_HL_REGNUM,
+
+  RL78_BANK0_R0_REGNUM,
+  RL78_BANK0_R1_REGNUM,
+  RL78_BANK0_R2_REGNUM,
+  RL78_BANK0_R3_REGNUM,
+  RL78_BANK0_R4_REGNUM,
+  RL78_BANK0_R5_REGNUM,
+  RL78_BANK0_R6_REGNUM,
+  RL78_BANK0_R7_REGNUM,
+
+  RL78_BANK1_R0_REGNUM,
+  RL78_BANK1_R1_REGNUM,
+  RL78_BANK1_R2_REGNUM,
+  RL78_BANK1_R3_REGNUM,
+  RL78_BANK1_R4_REGNUM,
+  RL78_BANK1_R5_REGNUM,
+  RL78_BANK1_R6_REGNUM,
+  RL78_BANK1_R7_REGNUM,
+
+  RL78_BANK2_R0_REGNUM,
+  RL78_BANK2_R1_REGNUM,
+  RL78_BANK2_R2_REGNUM,
+  RL78_BANK2_R3_REGNUM,
+  RL78_BANK2_R4_REGNUM,
+  RL78_BANK2_R5_REGNUM,
+  RL78_BANK2_R6_REGNUM,
+  RL78_BANK2_R7_REGNUM,
+
+  RL78_BANK3_R0_REGNUM,
+  RL78_BANK3_R1_REGNUM,
+  RL78_BANK3_R2_REGNUM,
+  RL78_BANK3_R3_REGNUM,
+  RL78_BANK3_R4_REGNUM,
+  RL78_BANK3_R5_REGNUM,
+  RL78_BANK3_R6_REGNUM,
+  RL78_BANK3_R7_REGNUM,
+
+  RL78_BANK0_RP0_REGNUM,
+  RL78_BANK0_RP1_REGNUM,
+  RL78_BANK0_RP2_REGNUM,
+  RL78_BANK0_RP3_REGNUM,
+
+  RL78_BANK1_RP0_REGNUM,
+  RL78_BANK1_RP1_REGNUM,
+  RL78_BANK1_RP2_REGNUM,
+  RL78_BANK1_RP3_REGNUM,
+
+  RL78_BANK2_RP0_REGNUM,
+  RL78_BANK2_RP1_REGNUM,
+  RL78_BANK2_RP2_REGNUM,
+  RL78_BANK2_RP3_REGNUM,
+
+  RL78_BANK3_RP0_REGNUM,
+  RL78_BANK3_RP1_REGNUM,
+  RL78_BANK3_RP2_REGNUM,
+  RL78_BANK3_RP3_REGNUM,
+
+  RL78_NUM_TOTAL_REGS,
+  RL78_NUM_PSEUDO_REGS = RL78_NUM_TOTAL_REGS - RL78_NUM_REGS
+};
+
+/* Architecture specific data.  */
+
+struct gdbarch_tdep
+{
+  /* The ELF header flags specify the multilib used.  */
+  int elf_flags;
+
+  struct type *rl78_void,
+              *rl78_uint8,
+	      *rl78_int8,
+	      *rl78_uint16,
+	      *rl78_int16,
+	      *rl78_uint32,
+	      *rl78_int32,
+	      *rl78_data_pointer,
+	      *rl78_code_pointer;
+};
+
+/* This structure holds the results of a prologue analysis.  */
+
+struct rl78_prologue
+{
+  /* The offset from the frame base to the stack pointer --- always
+     zero or negative.
+
+     Calling this a "size" is a bit misleading, but given that the
+     stack grows downwards, using offsets for everything keeps one
+     from going completely sign-crazy: you never change anything's
+     sign for an ADD instruction; always change the second operand's
+     sign for a SUB instruction; and everything takes care of
+     itself.  */
+  int frame_size;
+
+  /* Non-zero if this function has initialized the frame pointer from
+     the stack pointer, zero otherwise.  */
+  int has_frame_ptr;
+
+  /* If has_frame_ptr is non-zero, this is the offset from the frame
+     base to where the frame pointer points.  This is always zero or
+     negative.  */
+  int frame_ptr_offset;
+
+  /* The address of the first instruction at which the frame has been
+     set up and the arguments are where the debug info says they are
+     --- as best as we can tell.  */
+  CORE_ADDR prologue_end;
+
+  /* reg_offset[R] is the offset from the CFA at which register R is
+     saved, or 1 if register R has not been saved.  (Real values are
+     always zero or negative.)  */
+  int reg_offset[RL78_NUM_TOTAL_REGS];
+};
+
+/* Implement the "register_type" gdbarch method.  */
+
+static struct type *
+rl78_register_type (struct gdbarch *gdbarch, int reg_nr)
+{
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+
+  if (reg_nr == RL78_PC_REGNUM)
+    return tdep->rl78_code_pointer;
+  else if (reg_nr <= RL78_MEM_REGNUM
+           || (RL78_X_REGNUM <= reg_nr && reg_nr <= RL78_H_REGNUM)
+	   || (RL78_BANK0_R0_REGNUM <= reg_nr
+	       && reg_nr <= RL78_BANK3_R7_REGNUM))
+    return tdep->rl78_int8;
+  else
+    return tdep->rl78_data_pointer;
+}
+
+/* Implement the "register_name" gdbarch method.  */
+
+static const char *
+rl78_register_name (struct gdbarch *gdbarch, int regnr)
+{
+  static const char *const reg_names[] =
+  {
+    "",		/* bank0_r0 */
+    "",		/* bank0_r1 */
+    "",		/* bank0_r2 */
+    "",		/* bank0_r3 */
+    "",		/* bank0_r4 */
+    "",		/* bank0_r5 */
+    "",		/* bank0_r6 */
+    "",		/* bank0_r7 */
+
+    "",		/* bank1_r0 */
+    "",		/* bank1_r1 */
+    "",		/* bank1_r2 */
+    "",		/* bank1_r3 */
+    "",		/* bank1_r4 */
+    "",		/* bank1_r5 */
+    "",		/* bank1_r6 */
+    "",		/* bank1_r7 */
+
+    "",		/* bank2_r0 */
+    "",		/* bank2_r1 */
+    "",		/* bank2_r2 */
+    "",		/* bank2_r3 */
+    "",		/* bank2_r4 */
+    "",		/* bank2_r5 */
+    "",		/* bank2_r6 */
+    "",		/* bank2_r7 */
+
+    "",		/* bank3_r0 */
+    "",		/* bank3_r1 */
+    "",		/* bank3_r2 */
+    "",		/* bank3_r3 */
+    "",		/* bank3_r4 */
+    "",		/* bank3_r5 */
+    "",		/* bank3_r6 */
+    "",		/* bank3_r7 */
+
+    "psw",
+    "es",
+    "cs",
+    "pc",
+
+    "",		/* spl */
+    "",		/* sph */
+    "pmc",
+    "mem",
+
+    "sp",
+
+    "x",
+    "a",
+    "c",
+    "b",
+    "e",
+    "d",
+    "l",
+    "h",
+
+    "ax",
+    "bc",
+    "de",
+    "hl",
+
+    "bank0_r0",
+    "bank0_r1",
+    "bank0_r2",
+    "bank0_r3",
+    "bank0_r4",
+    "bank0_r5",
+    "bank0_r6",
+    "bank0_r7",
+
+    "bank1_r0",
+    "bank1_r1",
+    "bank1_r2",
+    "bank1_r3",
+    "bank1_r4",
+    "bank1_r5",
+    "bank1_r6",
+    "bank1_r7",
+
+    "bank2_r0",
+    "bank2_r1",
+    "bank2_r2",
+    "bank2_r3",
+    "bank2_r4",
+    "bank2_r5",
+    "bank2_r6",
+    "bank2_r7",
+
+    "bank3_r0",
+    "bank3_r1",
+    "bank3_r2",
+    "bank3_r3",
+    "bank3_r4",
+    "bank3_r5",
+    "bank3_r6",
+    "bank3_r7",
+
+    "bank0_rp0",
+    "bank0_rp1",
+    "bank0_rp2",
+    "bank0_rp3",
+
+    "bank1_rp0",
+    "bank1_rp1",
+    "bank1_rp2",
+    "bank1_rp3",
+
+    "bank2_rp0",
+    "bank2_rp1",
+    "bank2_rp2",
+    "bank2_rp3",
+
+    "bank3_rp0",
+    "bank3_rp1",
+    "bank3_rp2",
+    "bank3_rp3"
+  };
+
+  return reg_names[regnr];
+}
+
+/* Implement the "register_reggroup_p" gdbarch method.  */
+
+static int
+rl78_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
+			  struct reggroup *group)
+{
+  if (group == all_reggroup)
+    return 1;
+
+  /* All other registers are saved and restored.  */
+  if (group == save_reggroup || group == restore_reggroup)
+    {
+      if (regnum < RL78_NUM_REGS)
+	return 1;
+      else
+	return 0;
+    }
+
+  if ((RL78_BANK0_R0_REGNUM <= regnum && regnum <= RL78_BANK3_R7_REGNUM)
+      || regnum == RL78_ES_REGNUM
+      || regnum == RL78_CS_REGNUM
+      || regnum == RL78_SPL_REGNUM
+      || regnum == RL78_SPH_REGNUM
+      || regnum == RL78_PMC_REGNUM
+      || regnum == RL78_MEM_REGNUM
+      || (RL78_BANK0_RP0_REGNUM <= regnum && regnum <= RL78_BANK3_RP3_REGNUM))
+    return group == system_reggroup;
+
+  return group == general_reggroup;
+}
+
+/* Strip bits to form an instruction address.  (When fetching a
+   32-bit address from the stack, the high eight bits are garbage.
+   This function strips off those unused bits.)  */
+
+static CORE_ADDR
+rl78_make_instruction_address (CORE_ADDR addr)
+{
+  return addr & 0xffffff;
+}
+
+/* Set / clear bits necessary to make a data address.  */
+
+static CORE_ADDR
+rl78_make_data_address (CORE_ADDR addr)
+{
+  return (addr & 0xffff) | 0xf0000;
+}
+
+/* Implement the "pseudo_register_read" gdbarch method.  */
+
+static enum register_status
+rl78_pseudo_register_read (struct gdbarch *gdbarch,
+                           struct regcache *regcache,
+                           int reg, gdb_byte *buffer)
+{
+  enum register_status status;
+
+  if (RL78_BANK0_R0_REGNUM <= reg && reg <= RL78_BANK3_R7_REGNUM)
+    {
+      int raw_regnum = RL78_RAW_BANK0_R0_REGNUM
+                       + (reg - RL78_BANK0_R0_REGNUM);
+
+      status = regcache_raw_read (regcache, raw_regnum, buffer);
+    }
+  else if (RL78_BANK0_RP0_REGNUM <= reg && reg <= RL78_BANK3_RP3_REGNUM)
+    {
+      int raw_regnum = 2 * (reg - RL78_BANK0_RP0_REGNUM)
+                       + RL78_RAW_BANK0_R0_REGNUM;
+
+      status = regcache_raw_read (regcache, raw_regnum, buffer);
+      if (status == REG_VALID)
+	status = regcache_raw_read (regcache, raw_regnum + 1, buffer + 1);
+    }
+  else if (reg == RL78_SP_REGNUM)
+    {
+      status = regcache_raw_read (regcache, RL78_SPL_REGNUM, buffer);
+      if (status == REG_VALID)
+	status = regcache_raw_read (regcache, RL78_SPH_REGNUM, buffer + 1);
+    }
+  else if (RL78_X_REGNUM <= reg && reg <= RL78_H_REGNUM)
+    {
+      ULONGEST psw;
+
+      status = regcache_raw_read_unsigned (regcache, RL78_PSW_REGNUM, &psw);
+      if (status == REG_VALID)
+	{
+	  /* RSB0 is at bit 3; RSBS1 is at bit 5.  */
+	  int bank = ((psw >> 3) & 1) | ((psw >> 4) & 1);
+	  int raw_regnum = RL78_RAW_BANK0_R0_REGNUM + bank * RL78_REGS_PER_BANK
+	                   + (reg - RL78_X_REGNUM);
+	  status = regcache_raw_read (regcache, raw_regnum, buffer);
+	}
+    }
+  else if (RL78_AX_REGNUM <= reg && reg <= RL78_HL_REGNUM)
+    {
+      ULONGEST psw;
+
+      status = regcache_raw_read_unsigned (regcache, RL78_PSW_REGNUM, &psw);
+      if (status == REG_VALID)
+	{
+	  /* RSB0 is at bit 3; RSBS1 is at bit 5.  */
+	  int bank = ((psw >> 3) & 1) | ((psw >> 4) & 1);
+	  int raw_regnum = RL78_RAW_BANK0_R0_REGNUM + bank * RL78_REGS_PER_BANK
+	                   + 2 * (reg - RL78_AX_REGNUM);
+	  status = regcache_raw_read (regcache, raw_regnum, buffer);
+	  if (status == REG_VALID)
+	    status = regcache_raw_read (regcache, raw_regnum + 1,
+	                                buffer + 1);
+	}
+    }
+  else
+    gdb_assert_not_reached ("invalid pseudo register number");
+  return status;
+}
+
+/* Implement the "pseudo_register_write" gdbarch method.  */
+
+static void
+rl78_pseudo_register_write (struct gdbarch *gdbarch,
+                            struct regcache *regcache,
+                            int reg, const gdb_byte *buffer)
+{
+  if (RL78_BANK0_R0_REGNUM <= reg && reg <= RL78_BANK3_R7_REGNUM)
+    {
+      int raw_regnum = RL78_RAW_BANK0_R0_REGNUM
+                       + (reg - RL78_BANK0_R0_REGNUM);
+
+      regcache_raw_write (regcache, raw_regnum, buffer);
+    }
+  else if (RL78_BANK0_RP0_REGNUM <= reg && reg <= RL78_BANK3_RP3_REGNUM)
+    {
+      int raw_regnum = 2 * (reg - RL78_BANK0_RP0_REGNUM)
+                       + RL78_RAW_BANK0_R0_REGNUM;
+
+      regcache_raw_write (regcache, raw_regnum, buffer);
+      regcache_raw_write (regcache, raw_regnum + 1, buffer + 1);
+    }
+  else if (reg == RL78_SP_REGNUM)
+    {
+      regcache_raw_write (regcache, RL78_SPL_REGNUM, buffer);
+      regcache_raw_write (regcache, RL78_SPH_REGNUM, buffer + 1);
+    }
+  else if (RL78_X_REGNUM <= reg && reg <= RL78_H_REGNUM)
+    {
+      ULONGEST psw;
+      int bank;
+      int raw_regnum;
+
+      regcache_raw_read_unsigned (regcache, RL78_PSW_REGNUM, &psw);
+      bank = ((psw >> 3) & 1) | ((psw >> 4) & 1);
+      /* RSB0 is at bit 3; RSBS1 is at bit 5.  */
+      raw_regnum = RL78_RAW_BANK0_R0_REGNUM + bank * RL78_REGS_PER_BANK
+	           + (reg - RL78_X_REGNUM);
+      regcache_raw_write (regcache, raw_regnum, buffer);
+    }
+  else if (RL78_AX_REGNUM <= reg && reg <= RL78_HL_REGNUM)
+    {
+      ULONGEST psw;
+      int bank, raw_regnum;
+
+      regcache_raw_read_unsigned (regcache, RL78_PSW_REGNUM, &psw);
+      bank = ((psw >> 3) & 1) | ((psw >> 4) & 1);
+      /* RSB0 is at bit 3; RSBS1 is at bit 5.  */
+      raw_regnum = RL78_RAW_BANK0_R0_REGNUM + bank * RL78_REGS_PER_BANK
+		   + 2 * (reg - RL78_AX_REGNUM);
+      regcache_raw_write (regcache, raw_regnum, buffer);
+      regcache_raw_write (regcache, raw_regnum + 1, buffer + 1);
+    }
+  else
+    gdb_assert_not_reached ("invalid pseudo register number");
+}
+
+/* Implement the "breakpoint_from_pc" gdbarch method.  */
+
+static const gdb_byte *
+rl78_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr,
+                         int *lenptr)
+{
+  /* The documented BRK instruction is actually a two byte sequence,
+     {0x61, 0xcc}, but instructions may be as short as one byte.
+     Correspondence with Renesas revealed that the one byte sequence
+     0xff is used when a one byte breakpoint instruction is required.  */
+  static gdb_byte breakpoint[] = { 0xff };
+
+  *lenptr = sizeof breakpoint;
+  return breakpoint;
+}
+
+/* Define a "handle" struct for fetching the next opcode.  */
+
+struct rl78_get_opcode_byte_handle
+{
+  CORE_ADDR pc;
+};
+
+/* Fetch a byte on behalf of the opcode decoder.  HANDLE contains
+   the memory address of the next byte to fetch.  If successful,
+   the address in the handle is updated and the byte fetched is
+   returned as the value of the function.  If not successful, -1
+   is returned.  */
+
+static int
+rl78_get_opcode_byte (void *handle)
+{
+  struct rl78_get_opcode_byte_handle *opcdata = handle;
+  int status;
+  gdb_byte byte;
+
+  status = target_read_memory (opcdata->pc, &byte, 1);
+  if (status == 0)
+    {
+      opcdata->pc += 1;
+      return byte;
+    }
+  else
+    return -1;
+}
+
+/* Function for finding saved registers in a 'struct pv_area'; this
+   function is passed to pv_area_scan.
+
+   If VALUE is a saved register, ADDR says it was saved at a constant
+   offset from the frame base, and SIZE indicates that the whole
+   register was saved, record its offset.  */
+
+static void
+check_for_saved (void *result_untyped, pv_t addr, CORE_ADDR size,
+                 pv_t value)
+{
+  struct rl78_prologue *result = (struct rl78_prologue *) result_untyped;
+
+  if (value.kind == pvk_register
+      && value.k == 0
+      && pv_is_register (addr, RL78_SP_REGNUM)
+      && size == register_size (target_gdbarch, value.reg))
+    result->reg_offset[value.reg] = addr.k;
+}
+
+/* Analyze a prologue starting at START_PC, going no further than
+   LIMIT_PC.  Fill in RESULT as appropriate.  */
+
+static void
+rl78_analyze_prologue (CORE_ADDR start_pc,
+		       CORE_ADDR limit_pc, struct rl78_prologue *result)
+{
+  CORE_ADDR pc, next_pc;
+  int rn;
+  pv_t reg[RL78_NUM_TOTAL_REGS];
+  struct pv_area *stack;
+  struct cleanup *back_to;
+  CORE_ADDR after_last_frame_setup_insn = start_pc;
+  int bank = 0;
+
+  memset (result, 0, sizeof (*result));
+
+  for (rn = 0; rn < RL78_NUM_TOTAL_REGS; rn++)
+    {
+      reg[rn] = pv_register (rn, 0);
+      result->reg_offset[rn] = 1;
+    }
+
+  stack = make_pv_area (RL78_SP_REGNUM, gdbarch_addr_bit (target_gdbarch));
+  back_to = make_cleanup_free_pv_area (stack);
+
+  /* The call instruction has saved the return address on the stack.  */
+  reg[RL78_SP_REGNUM] = pv_add_constant (reg[RL78_SP_REGNUM], -4);
+  pv_area_store (stack, reg[RL78_SP_REGNUM], 4, reg[RL78_PC_REGNUM]);
+
+  pc = start_pc;
+  while (pc < limit_pc)
+    {
+      int bytes_read;
+      struct rl78_get_opcode_byte_handle opcode_handle;
+      RL78_Opcode_Decoded opc;
+
+      opcode_handle.pc = pc;
+      bytes_read = rl78_decode_opcode (pc, &opc, rl78_get_opcode_byte,
+				     &opcode_handle);
+      next_pc = pc + bytes_read;
+
+      if (opc.id == RLO_sel)
+	{
+	  bank = opc.op[1].addend;
+	}
+      else if (opc.id == RLO_mov
+               && opc.op[0].type == RL78_Operand_PreDec
+               && opc.op[0].reg == RL78_Reg_SP
+	       && opc.op[1].type == RL78_Operand_Register)
+	{
+	  int rsrc = (bank * RL78_REGS_PER_BANK) 
+	           + 2 * (opc.op[1].reg - RL78_Reg_AX);
+
+	  reg[RL78_SP_REGNUM] = pv_add_constant (reg[RL78_SP_REGNUM], -1);
+	  pv_area_store (stack, reg[RL78_SP_REGNUM], 1, reg[rsrc]);
+	  reg[RL78_SP_REGNUM] = pv_add_constant (reg[RL78_SP_REGNUM], -1);
+	  pv_area_store (stack, reg[RL78_SP_REGNUM], 1, reg[rsrc + 1]);
+	  after_last_frame_setup_insn = next_pc;
+	}
+      else if (opc.id == RLO_sub
+               && opc.op[0].type == RL78_Operand_Register
+	       && opc.op[0].reg == RL78_Reg_SP
+	       && opc.op[1].type == RL78_Operand_Immediate)
+	{
+	  int addend = opc.op[1].addend;
+
+	  reg[RL78_SP_REGNUM] = pv_add_constant (reg[RL78_SP_REGNUM],
+	                                         -addend);
+	  after_last_frame_setup_insn = next_pc;
+	}
+      else
+	{
+	  /* Terminate the prologue scan.  */
+	  break;
+	}
+
+      pc = next_pc;
+    }
+
+  /* Is the frame size (offset, really) a known constant?  */
+  if (pv_is_register (reg[RL78_SP_REGNUM], RL78_SP_REGNUM))
+    result->frame_size = reg[RL78_SP_REGNUM].k;
+
+  /* Record where all the registers were saved.  */
+  pv_area_scan (stack, check_for_saved, (void *) result);
+
+  result->prologue_end = after_last_frame_setup_insn;
+
+  do_cleanups (back_to);
+}
+
+/* Implement the "addr_bits_remove" gdbarch method.  */
+
+static CORE_ADDR
+rl78_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR addr)
+{
+  return addr & 0xffffff;
+}
+
+/* Implement the "address_to_pointer" gdbarch method.  */
+
+static void
+rl78_address_to_pointer (struct gdbarch *gdbarch,
+			 struct type *type, gdb_byte *buf, CORE_ADDR addr)
+{
+  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+
+  store_unsigned_integer (buf, TYPE_LENGTH (type), byte_order,
+                          addr & 0xffffff);
+}
+
+/* Implement the "pointer_to_address" gdbarch method.  */
+
+static CORE_ADDR
+rl78_pointer_to_address (struct gdbarch *gdbarch,
+                         struct type *type, const gdb_byte *buf)
+{
+  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+  CORE_ADDR addr
+    = extract_unsigned_integer (buf, TYPE_LENGTH (type), byte_order);
+
+  /* Is it a code address?  */
+  if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC
+      || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_METHOD
+      || TYPE_CODE_SPACE (TYPE_TARGET_TYPE (type))
+      || TYPE_LENGTH (type) == 4)
+    return rl78_make_instruction_address (addr);
+  else
+    return rl78_make_data_address (addr);
+}
+
+/* Implement the "skip_prologue" gdbarch method.  */
+
+static CORE_ADDR
+rl78_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
+{
+  const char *name;
+  CORE_ADDR func_addr, func_end;
+  struct rl78_prologue p;
+
+  /* Try to find the extent of the function that contains PC.  */
+  if (!find_pc_partial_function (pc, &name, &func_addr, &func_end))
+    return pc;
+
+  rl78_analyze_prologue (pc, func_end, &p);
+  return p.prologue_end;
+}
+
+/* Implement the "unwind_pc" gdbarch method.  */
+
+static CORE_ADDR
+rl78_unwind_pc (struct gdbarch *arch, struct frame_info *next_frame)
+{
+  return rl78_addr_bits_remove
+           (arch, frame_unwind_register_unsigned (next_frame,
+	                                          RL78_PC_REGNUM));
+}
+
+/* Implement the "unwind_sp" gdbarch method.  */
+
+static CORE_ADDR
+rl78_unwind_sp (struct gdbarch *arch, struct frame_info *next_frame)
+{
+  return frame_unwind_register_unsigned (next_frame, RL78_SP_REGNUM);
+}
+
+/* Given a frame described by THIS_FRAME, decode the prologue of its
+   associated function if there is not cache entry as specified by
+   THIS_PROLOGUE_CACHE.  Save the decoded prologue in the cache and
+   return that struct as the value of this function.  */
+
+static struct rl78_prologue *
+rl78_analyze_frame_prologue (struct frame_info *this_frame,
+			   void **this_prologue_cache)
+{
+  if (!*this_prologue_cache)
+    {
+      CORE_ADDR func_start, stop_addr;
+
+      *this_prologue_cache = FRAME_OBSTACK_ZALLOC (struct rl78_prologue);
+
+      func_start = get_frame_func (this_frame);
+      stop_addr = get_frame_pc (this_frame);
+
+      /* If we couldn't find any function containing the PC, then
+         just initialize the prologue cache, but don't do anything.  */
+      if (!func_start)
+	stop_addr = func_start;
+
+      rl78_analyze_prologue (func_start, stop_addr, *this_prologue_cache);
+    }
+
+  return *this_prologue_cache;
+}
+
+/* Given a frame and a prologue cache, return this frame's base.  */
+
+static CORE_ADDR
+rl78_frame_base (struct frame_info *this_frame, void **this_prologue_cache)
+{
+  struct rl78_prologue *p
+    = rl78_analyze_frame_prologue (this_frame, this_prologue_cache);
+  CORE_ADDR sp = get_frame_register_unsigned (this_frame, RL78_SP_REGNUM);
+
+  return rl78_make_data_address (sp - p->frame_size);
+}
+
+/* Implement the "frame_this_id" method for unwinding frames.  */
+
+static void
+rl78_this_id (struct frame_info *this_frame,
+	      void **this_prologue_cache, struct frame_id *this_id)
+{
+  *this_id = frame_id_build (rl78_frame_base (this_frame,
+                                              this_prologue_cache),
+			     get_frame_func (this_frame));
+}
+
+/* Implement the "frame_prev_register" method for unwinding frames.  */
+
+static struct value *
+rl78_prev_register (struct frame_info *this_frame,
+                    void **this_prologue_cache, int regnum)
+{
+  struct rl78_prologue *p
+    = rl78_analyze_frame_prologue (this_frame, this_prologue_cache);
+  CORE_ADDR frame_base = rl78_frame_base (this_frame, this_prologue_cache);
+
+  if (regnum == RL78_SP_REGNUM)
+    return frame_unwind_got_constant (this_frame, regnum, frame_base);
+
+  else if (regnum == RL78_SPL_REGNUM)
+    return frame_unwind_got_constant (this_frame, regnum,
+                                      (frame_base & 0xff));
+
+  else if (regnum == RL78_SPH_REGNUM)
+    return frame_unwind_got_constant (this_frame, regnum,
+                                      ((frame_base >> 8) & 0xff));
+
+  /* If prologue analysis says we saved this register somewhere,
+     return a description of the stack slot holding it.  */
+  else if (p->reg_offset[regnum] != 1)
+    {
+      struct value *rv =
+        frame_unwind_got_memory (this_frame, regnum,
+				 frame_base + p->reg_offset[regnum]);
+
+      if (regnum == RL78_PC_REGNUM)
+	{
+	  ULONGEST pc = rl78_make_instruction_address (value_as_long (rv));
+
+	  return frame_unwind_got_constant (this_frame, regnum, pc);
+	}
+      return rv;
+    }
+
+  /* Otherwise, presume we haven't changed the value of this
+     register, and get it from the next frame.  */
+  else
+    return frame_unwind_got_register (this_frame, regnum, regnum);
+}
+
+static const struct frame_unwind rl78_unwind =
+{
+  NORMAL_FRAME,
+  default_frame_unwind_stop_reason,
+  rl78_this_id,
+  rl78_prev_register,
+  NULL,
+  default_frame_sniffer
+};
+
+/* Implement the "dwarf_reg_to_regnum" gdbarch method.  */
+
+static int
+rl78_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
+{
+  if (0 <= reg && reg <= 31)
+    {
+      if ((reg & 1) == 0)
+        /* Map even registers to their 16-bit counterparts.  This
+	   is usually what is required from the DWARF info.  */
+	return (reg >> 1) + RL78_BANK0_RP0_REGNUM;
+      else
+	return reg;
+    }
+  else if (reg == 32)
+    return RL78_SP_REGNUM;
+  else if (reg == 33)
+    return RL78_PC_REGNUM;
+  else
+    internal_error (__FILE__, __LINE__,
+                    _("Undefined dwarf2 register mapping of reg %d"),
+		    reg);
+}
+
+/* Implement the `register_sim_regno' gdbarch method.  */
+
+static int
+rl78_register_sim_regno (struct gdbarch *gdbarch, int regnum)
+{
+  gdb_assert (regnum < RL78_NUM_REGS);
+
+  /* So long as regnum is in [0, RL78_NUM_REGS), it's valid.  We
+     just want to override the default here which disallows register
+     numbers which have no names.  */
+  return regnum;
+}
+
+/* Implement the "return_value" gdbarch method.  */
+
+static enum return_value_convention
+rl78_return_value (struct gdbarch *gdbarch,
+		   struct value *function,
+		   struct type *valtype,
+		   struct regcache *regcache,
+		   gdb_byte *readbuf, const gdb_byte *writebuf)
+{
+  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+  ULONGEST valtype_len = TYPE_LENGTH (valtype);
+
+  if (valtype_len > 8)
+    return RETURN_VALUE_STRUCT_CONVENTION;
+
+  if (readbuf)
+    {
+      ULONGEST u;
+      int argreg = RL78_RAW_BANK1_R0_REGNUM;
+      int offset = 0;
+
+      while (valtype_len > 0)
+	{
+	  regcache_cooked_read_unsigned (regcache, argreg, &u);
+	  store_unsigned_integer (readbuf + offset, 1, byte_order, u);
+	  valtype_len -= 1;
+	  offset += 1;
+	  argreg++;
+	}
+    }
+
+  if (writebuf)
+    {
+      ULONGEST u;
+      int argreg = RL78_RAW_BANK1_R0_REGNUM;
+      int offset = 0;
+
+      while (valtype_len > 0)
+	{
+	  u = extract_unsigned_integer (writebuf + offset, 1, byte_order);
+	  regcache_cooked_write_unsigned (regcache, argreg, u);
+	  valtype_len -= 1;
+	  offset += 1;
+	  argreg++;
+	}
+    }
+
+  return RETURN_VALUE_REGISTER_CONVENTION;
+}
+
+
+/* Implement the "frame_align" gdbarch method.  */
+
+static CORE_ADDR
+rl78_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
+{
+  return rl78_make_data_address (align_down (sp, 2));
+}
+
+
+/* Implement the "dummy_id" gdbarch method.  */
+
+static struct frame_id
+rl78_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
+{
+  return
+    frame_id_build (rl78_make_data_address
+                      (get_frame_register_unsigned
+		        (this_frame, RL78_SP_REGNUM)),
+		    get_frame_pc (this_frame));
+}
+
+
+/* Implement the "push_dummy_call" gdbarch method.  */
+
+static CORE_ADDR
+rl78_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+		      struct regcache *regcache, CORE_ADDR bp_addr,
+		      int nargs, struct value **args, CORE_ADDR sp,
+		      int struct_return, CORE_ADDR struct_addr)
+{
+  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+  gdb_byte buf[4];
+  int i;
+
+  /* Push arguments in reverse order.  */
+  for (i = nargs - 1; i >= 0; i--)
+    {
+      struct type *value_type = value_enclosing_type (args[i]);
+      int len = TYPE_LENGTH (value_type);
+      int container_len = (len + 1) & ~1;
+
+      sp -= container_len;
+      write_memory (rl78_make_data_address (sp),
+                    value_contents_all (args[i]), len);
+    }
+
+  /* Store struct value address.  */
+  if (struct_return)
+    {
+      store_unsigned_integer (buf, 2, byte_order, struct_addr);
+      sp -= 2;
+      write_memory (rl78_make_data_address (sp), buf, 2);
+    }
+
+  /* Store return address.  */
+  sp -= 4;
+  store_unsigned_integer (buf, 4, byte_order, bp_addr);
+  write_memory (rl78_make_data_address (sp), buf, 4);
+
+  /* Finally, update the stack pointer...  */
+  regcache_cooked_write_unsigned (regcache, RL78_SP_REGNUM, sp);
+
+  /* DWARF2/GCC uses the stack address *before* the function call as a
+     frame's CFA.  */
+  return rl78_make_data_address (sp + 4);
+}
+
+/* Allocate and initialize a gdbarch object.  */
+
+static struct gdbarch *
+rl78_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
+{
+  struct gdbarch *gdbarch;
+  struct gdbarch_tdep *tdep;
+  int elf_flags;
+
+  /* Extract the elf_flags if available.  */
+  if (info.abfd != NULL
+      && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
+    elf_flags = elf_elfheader (info.abfd)->e_flags;
+  else
+    elf_flags = 0;
+
+
+  /* Try to find the architecture in the list of already defined
+     architectures.  */
+  for (arches = gdbarch_list_lookup_by_info (arches, &info);
+       arches != NULL;
+       arches = gdbarch_list_lookup_by_info (arches->next, &info))
+    {
+      if (gdbarch_tdep (arches->gdbarch)->elf_flags != elf_flags)
+	continue;
+
+      return arches->gdbarch;
+    }
+
+  /* None found, create a new architecture from the information
+     provided.  */
+  tdep = (struct gdbarch_tdep *) xmalloc (sizeof (struct gdbarch_tdep));
+  gdbarch = gdbarch_alloc (&info, tdep);
+  tdep->elf_flags = elf_flags;
+
+  /* Initialize types.  */
+  tdep->rl78_void = arch_type (gdbarch, TYPE_CODE_VOID, 1, "void");
+  tdep->rl78_uint8 = arch_integer_type (gdbarch, 8, 1, "uint8_t");
+  tdep->rl78_int8 = arch_integer_type (gdbarch, 8, 0, "int8_t");
+  tdep->rl78_uint16 = arch_integer_type (gdbarch, 16, 1, "uint16_t");
+  tdep->rl78_int16 = arch_integer_type (gdbarch, 16, 0, "int16_t");
+  tdep->rl78_uint32 = arch_integer_type (gdbarch, 32, 1, "uint32_t");
+  tdep->rl78_int32 = arch_integer_type (gdbarch, 32, 0, "int32_t");
+
+  tdep->rl78_data_pointer
+    = arch_type (gdbarch, TYPE_CODE_PTR, 16 / TARGET_CHAR_BIT,
+                 xstrdup ("rl78_data_addr_t"));
+  TYPE_TARGET_TYPE (tdep->rl78_data_pointer) = tdep->rl78_void;
+  TYPE_UNSIGNED (tdep->rl78_data_pointer) = 1;
+
+  tdep->rl78_code_pointer
+    = arch_type (gdbarch, TYPE_CODE_PTR, 32 / TARGET_CHAR_BIT,
+                 xstrdup ("rl78_code_addr_t"));
+  TYPE_TARGET_TYPE (tdep->rl78_code_pointer) = tdep->rl78_void;
+  TYPE_UNSIGNED (tdep->rl78_code_pointer) = 1;
+
+  /* Registers.  */
+  set_gdbarch_num_regs (gdbarch, RL78_NUM_REGS);
+  set_gdbarch_num_pseudo_regs (gdbarch, RL78_NUM_PSEUDO_REGS);
+  set_gdbarch_register_name (gdbarch, rl78_register_name);
+  set_gdbarch_register_type (gdbarch, rl78_register_type);
+  set_gdbarch_pc_regnum (gdbarch, RL78_PC_REGNUM);
+  set_gdbarch_sp_regnum (gdbarch, RL78_SP_REGNUM);
+  set_gdbarch_pseudo_register_read (gdbarch, rl78_pseudo_register_read);
+  set_gdbarch_pseudo_register_write (gdbarch, rl78_pseudo_register_write);
+  set_gdbarch_dwarf2_reg_to_regnum (gdbarch, rl78_dwarf_reg_to_regnum);
+  set_gdbarch_register_reggroup_p (gdbarch, rl78_register_reggroup_p);
+  set_gdbarch_register_sim_regno (gdbarch, rl78_register_sim_regno);
+
+  /* Data types.  */
+  set_gdbarch_char_signed (gdbarch, 0);
+  set_gdbarch_short_bit (gdbarch, 16);
+  set_gdbarch_int_bit (gdbarch, 16);
+  set_gdbarch_long_bit (gdbarch, 32);
+  set_gdbarch_long_long_bit (gdbarch, 64);
+  set_gdbarch_ptr_bit (gdbarch, 16);
+  set_gdbarch_addr_bit (gdbarch, 32);
+  set_gdbarch_float_bit (gdbarch, 32);
+  set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
+  set_gdbarch_double_bit (gdbarch, 32);
+  set_gdbarch_long_double_bit (gdbarch, 64);
+  set_gdbarch_double_format (gdbarch, floatformats_ieee_single);
+  set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
+  set_gdbarch_pointer_to_address (gdbarch, rl78_pointer_to_address);
+  set_gdbarch_address_to_pointer (gdbarch, rl78_address_to_pointer);
+  set_gdbarch_addr_bits_remove (gdbarch, rl78_addr_bits_remove);
+
+  /* Breakpoints.  */
+  set_gdbarch_breakpoint_from_pc (gdbarch, rl78_breakpoint_from_pc);
+  set_gdbarch_decr_pc_after_break (gdbarch, 1);
+
+  /* Disassembly.  */
+  set_gdbarch_print_insn (gdbarch, print_insn_rl78);
+
+  /* Frames, prologues, etc.  */
+  set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
+  set_gdbarch_skip_prologue (gdbarch, rl78_skip_prologue);
+  set_gdbarch_unwind_pc (gdbarch, rl78_unwind_pc);
+  set_gdbarch_unwind_sp (gdbarch, rl78_unwind_sp);
+  set_gdbarch_frame_align (gdbarch, rl78_frame_align);
+  frame_unwind_append_unwinder (gdbarch, &rl78_unwind);
+
+  /* Dummy frames, return values.  */
+  set_gdbarch_dummy_id (gdbarch, rl78_dummy_id);
+  set_gdbarch_push_dummy_call (gdbarch, rl78_push_dummy_call);
+  set_gdbarch_return_value (gdbarch, rl78_return_value);
+
+  /* Virtual tables.  */
+  set_gdbarch_vbit_in_delta (gdbarch, 1);
+
+  return gdbarch;
+}
+
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_rl78_tdep;
+
+/* Register the above initialization routine.  */
+
+void
+_initialize_rl78_tdep (void)
+{
+  register_gdbarch_init (bfd_arch_rl78, rl78_gdbarch_init);
+}
diff --git a/gdb/rs6000-aix-tdep.c b/gdb/rs6000-aix-tdep.c
index 706e2e5..59cfa73 100644
--- a/gdb/rs6000-aix-tdep.c
+++ b/gdb/rs6000-aix-tdep.c
@@ -424,13 +424,12 @@ ran_out_of_registers_for_arguments:
 }
 
 static enum return_value_convention
-rs6000_return_value (struct gdbarch *gdbarch, struct type *func_type,
+rs6000_return_value (struct gdbarch *gdbarch, struct value *function,
 		     struct type *valtype, struct regcache *regcache,
 		     gdb_byte *readbuf, const gdb_byte *writebuf)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  gdb_byte buf[8];
 
   /* The calling convention this function implements assumes the
      processor has floating-point registers.  We shouldn't be using it
@@ -583,7 +582,7 @@ rs6000_convert_from_func_ptr_addr (struct gdbarch *gdbarch,
     {
       CORE_ADDR pc = 0;
       struct obj_section *pc_section;
-      struct gdb_exception e;
+      volatile struct gdb_exception e;
 
       TRY_CATCH (e, RETURN_MASK_ERROR)
         {
diff --git a/gdb/rs6000-nat.c b/gdb/rs6000-nat.c
index 31ef64a..0a2000a 100644
--- a/gdb/rs6000-nat.c
+++ b/gdb/rs6000-nat.c
@@ -31,6 +31,7 @@
 #include "gdb-stabs.h"
 #include "regcache.h"
 #include "arch-utils.h"
+#include "inf-child.h"
 #include "inf-ptrace.h"
 #include "ppc-tdep.h"
 #include "rs6000-tdep.h"
@@ -550,7 +551,7 @@ rs6000_wait (struct target_ops *ops,
 
 	  /* Claim it exited with unknown signal.  */
 	  ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
-	  ourstatus->value.sig = TARGET_SIGNAL_UNKNOWN;
+	  ourstatus->value.sig = GDB_SIGNAL_UNKNOWN;
 	  return inferior_ptid;
 	}
 
@@ -1214,6 +1215,8 @@ find_toc_address (CORE_ADDR pc)
 }
 

 
+void _initialize_rs6000_nat (void);
+
 void
 _initialize_rs6000_nat (void)
 {
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
index 62ec07f..1797cc5 100644
--- a/gdb/rs6000-tdep.c
+++ b/gdb/rs6000-tdep.c
@@ -108,7 +108,7 @@ static struct cmd_list_element *showpowerpccmdlist = NULL;
 static enum auto_boolean powerpc_soft_float_global = AUTO_BOOLEAN_AUTO;
 
 /* The vector ABI to use.  Keep this in sync with powerpc_vector_abi.  */
-static const char *powerpc_vector_strings[] =
+static const char *const powerpc_vector_strings[] =
 {
   "auto",
   "generic",
@@ -1822,6 +1822,15 @@ skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR lim_pc,
 
 	  /* Set up frame pointer */
 	}
+      else if (op == 0x603d0000)       /* oril r29, r1, 0x0 */
+	{
+	  fdata->frameless = 0;
+	  framep = 1;
+	  fdata->alloca_reg = (tdep->ppc_gp0_regnum + 29);
+	  continue;
+
+	  /* Another way to set up the frame pointer.  */
+	}
       else if (op == 0x603f0000	/* oril r31, r1, 0x0 */
 	       || op == 0x7c3f0b78)
 	{			/* mr r31, r1 */
@@ -2189,7 +2198,7 @@ rs6000_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
 
 static int
 rs6000_in_solib_return_trampoline (struct gdbarch *gdbarch,
-				   CORE_ADDR pc, char *name)
+				   CORE_ADDR pc, const char *name)
 {
   return name && !strncmp (name, "@FIX", 4);
 }
@@ -3543,7 +3552,6 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   enum bfd_architecture arch;
   unsigned long mach;
   bfd abfd;
-  asection *sect;
   enum auto_boolean soft_float_flag = powerpc_soft_float_global;
   int soft_float;
   enum powerpc_vector_abi vector_abi = powerpc_vector_abi_global;
diff --git a/gdb/rx-tdep.c b/gdb/rx-tdep.c
index 9bd73cd..8637c0c 100644
--- a/gdb/rx-tdep.c
+++ b/gdb/rx-tdep.c
@@ -353,7 +353,7 @@ rx_analyze_prologue (CORE_ADDR start_pc,
 static CORE_ADDR
 rx_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
-  char *name;
+  const char *name;
   CORE_ADDR func_addr, func_end;
   struct rx_prologue p;
 
@@ -702,7 +702,7 @@ rx_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
 /* Implement the "return_value" gdbarch method.  */
 static enum return_value_convention
 rx_return_value (struct gdbarch *gdbarch,
-		 struct type *func_type,
+		 struct value *function,
 		 struct type *valtype,
 		 struct regcache *regcache,
 		 gdb_byte *readbuf, const gdb_byte *writebuf)
@@ -756,7 +756,7 @@ rx_return_value (struct gdbarch *gdbarch,
 }
 
 /* Implement the "breakpoint_from_pc" gdbarch method.  */
-const gdb_byte *
+static const gdb_byte *
 rx_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
 {
   static gdb_byte breakpoint[] = { 0x00 };
@@ -859,7 +859,11 @@ rx_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   return gdbarch;
 }
 
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_rx_tdep;
+
 /* Register the above initialization routine.  */
+
 void
 _initialize_rx_tdep (void)
 {
diff --git a/gdb/s390-nat.c b/gdb/s390-nat.c
index 8fb693e..bad1b43 100644
--- a/gdb/s390-nat.c
+++ b/gdb/s390-nat.c
@@ -26,6 +26,7 @@
 #include "target.h"
 #include "linux-nat.h"
 #include "auxv.h"
+#include "gregset.h"
 
 #include "s390-tdep.h"
 #include "elf/common.h"
@@ -472,7 +473,7 @@ s390_stopped_by_watchpoint (void)
 }
 
 static void
-s390_fix_watch_points (ptid_t ptid)
+s390_fix_watch_points (struct lwp_info *lp)
 {
   int tid;
 
@@ -482,9 +483,9 @@ s390_fix_watch_points (ptid_t ptid)
   CORE_ADDR watch_lo_addr = (CORE_ADDR)-1, watch_hi_addr = 0;
   struct watch_area *area;
 
-  tid = TIDGET (ptid);
+  tid = TIDGET (lp->ptid);
   if (tid == 0)
-    tid = PIDGET (ptid);
+    tid = PIDGET (lp->ptid);
 
   for (area = watch_base; area; area = area->next)
     {
@@ -532,7 +533,7 @@ s390_insert_watchpoint (CORE_ADDR addr, int len, int type,
   watch_base = area;
 
   ALL_LWPS (lp)
-    s390_fix_watch_points (lp->ptid);
+    s390_fix_watch_points (lp);
   return 0;
 }
 
@@ -560,7 +561,7 @@ s390_remove_watchpoint (CORE_ADDR addr, int len, int type,
   xfree (area);
 
   ALL_LWPS (lp)
-    s390_fix_watch_points (lp->ptid);
+    s390_fix_watch_points (lp);
   return 0;
 }
 
diff --git a/gdb/s390-tdep.c b/gdb/s390-tdep.c
index ac0c526..620eaea 100644
--- a/gdb/s390-tdep.c
+++ b/gdb/s390-tdep.c
@@ -45,6 +45,13 @@
 #include "linux-tdep.h"
 #include "s390-tdep.h"
 
+#include "stap-probe.h"
+#include "ax.h"
+#include "ax-gdb.h"
+#include "user-regs.h"
+#include "cli/cli-utils.h"
+#include <ctype.h>
+
 #include "features/s390-linux32.c"
 #include "features/s390-linux32v1.c"
 #include "features/s390-linux32v2.c"
@@ -55,7 +62,6 @@
 #include "features/s390x-linux64v1.c"
 #include "features/s390x-linux64v2.c"
 
-
 /* The tdep structure.  */
 
 struct gdbarch_tdep
@@ -1160,7 +1166,6 @@ s390_load (struct s390_prologue_data *data,
 	   
 {
   pv_t addr = s390_addr (data, d2, x2, b2);
-  pv_t offset;
 
   /* If it's a load from an in-line constant pool, then we can
      simulate that, under the assumption that the code isn't
@@ -2812,7 +2817,7 @@ s390_return_value_convention (struct gdbarch *gdbarch, struct type *type)
 }
 
 static enum return_value_convention
-s390_return_value (struct gdbarch *gdbarch, struct type *func_type,
+s390_return_value (struct gdbarch *gdbarch, struct value *function,
 		   struct type *type, struct regcache *regcache,
 		   gdb_byte *out, const gdb_byte *in)
 {
@@ -2953,6 +2958,18 @@ s390_address_class_name_to_type_flags (struct gdbarch *gdbarch,
     return 0;
 }
 
+/* Implementation of `gdbarch_stap_is_single_operand', as defined in
+   gdbarch.h.  */
+
+static int
+s390_stap_is_single_operand (struct gdbarch *gdbarch, const char *s)
+{
+  return ((isdigit (*s) && s[1] == '(' && s[2] == '%') /* Displacement
+							  or indirection.  */
+	  || *s == '%' /* Register access.  */
+	  || isdigit (*s)); /* Literal number.  */
+}
+
 /* Set up gdbarch struct.  */
 
 static struct gdbarch *
@@ -3283,6 +3300,12 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
   set_gdbarch_get_siginfo_type (gdbarch, linux_get_siginfo_type);
 
+  /* SystemTap functions.  */
+  set_gdbarch_stap_register_prefix (gdbarch, "%");
+  set_gdbarch_stap_register_indirection_prefix (gdbarch, "(");
+  set_gdbarch_stap_register_indirection_suffix (gdbarch, ")");
+  set_gdbarch_stap_is_single_operand (gdbarch, s390_stap_is_single_operand);
+
   return gdbarch;
 }
 
diff --git a/gdb/score-tdep.c b/gdb/score-tdep.c
index 90ef610..fb25806 100644
--- a/gdb/score-tdep.c
+++ b/gdb/score-tdep.c
@@ -221,7 +221,6 @@ score3_adjust_pc_and_fetch_inst (CORE_ADDR *pcptr, int *lenptr,
 
 #define EXTRACT_LEN 2
   CORE_ADDR adjust_pc = *pcptr & ~0x1;
-  int inst_len;
   gdb_byte buf[5][EXTRACT_LEN] =
     {
       {'\0', '\0'},
@@ -450,7 +449,7 @@ score_xfer_register (struct regcache *regcache, int regnum, int length,
 }
 
 static enum return_value_convention
-score_return_value (struct gdbarch *gdbarch, struct type *func_type,
+score_return_value (struct gdbarch *gdbarch, struct value *function,
                     struct type *type, struct regcache *regcache,
                     gdb_byte * readbuf, const gdb_byte * writebuf)
 {
diff --git a/gdb/ser-base.c b/gdb/ser-base.c
index b4399d0..2f12dfc 100644
--- a/gdb/ser-base.c
+++ b/gdb/ser-base.c
@@ -123,6 +123,29 @@ reschedule (struct serial *scb)
     }
 }
 
+/* Run the SCB's async handle, and reschedule, if the handler doesn't
+   close SCB.  */
+
+static void
+run_async_handler_and_reschedule (struct serial *scb)
+{
+  int is_open;
+
+  /* Take a reference, so a serial_close call within the handler
+     doesn't make SCB a dangling pointer.  */
+  serial_ref (scb);
+
+  /* Run the handler.  */
+  scb->async_handler (scb, scb->async_context);
+
+  is_open = serial_is_open (scb);
+  serial_unref (scb);
+
+  /* Get ready for more, if not already closed.  */
+  if (is_open)
+    reschedule (scb);
+}
+
 /* FD_EVENT: This is scheduled when the input FIFO is empty (and there
    is no pending error).  As soon as data arrives, it is read into the
    input FIFO and the client notified.  The client should then drain
@@ -158,8 +181,7 @@ fd_event (int error, void *context)
 	  scb->bufcnt = SERIAL_ERROR;
 	}
     }
-  scb->async_handler (scb, scb->async_context);
-  reschedule (scb);
+  run_async_handler_and_reschedule (scb);
 }
 
 /* PUSH_EVENT: The input FIFO is non-empty (or there is a pending
@@ -173,9 +195,7 @@ push_event (void *context)
   struct serial *scb = context;
 
   scb->async_state = NOTHING_SCHEDULED; /* Timers are one-off */
-  scb->async_handler (scb, scb->async_context);
-  /* re-schedule */
-  reschedule (scb);
+  run_async_handler_and_reschedule (scb);
 }
 
 /* Wait for input on scb, with timeout seconds.  Returns 0 on success,
diff --git a/gdb/ser-mingw.c b/gdb/ser-mingw.c
index d862868..cf7c8b7 100644
--- a/gdb/ser-mingw.c
+++ b/gdb/ser-mingw.c
@@ -428,7 +428,7 @@ typedef DWORD WINAPI (*thread_fn_type)(void *);
 
 /* Create a new select thread for SCB executing THREAD_FN.  The STATE
    will be filled in by this function before return.  */
-void
+static void
 create_select_thread (thread_fn_type thread_fn,
 		      struct serial *scb,
 		      struct ser_console_state *state)
diff --git a/gdb/ser-pipe.c b/gdb/ser-pipe.c
index 4616a7e..4f20cad 100644
--- a/gdb/ser-pipe.c
+++ b/gdb/ser-pipe.c
@@ -30,7 +30,6 @@
 #include <sys/time.h>
 #include <fcntl.h>
 #include "gdb_string.h"
-#include "gdb_wait.h"
 
 #include <signal.h>
 
@@ -162,14 +161,30 @@ pipe_close (struct serial *scb)
 
   if (state != NULL)
     {
-      int status;
-      kill (state->pid, SIGTERM);
-#ifdef HAVE_WAITPID
+      int wait_result, status;
+
+      /* Don't kill the task right away, give it a chance to shut down cleanly.
+	 But don't wait forever though.  */
+#define PIPE_CLOSE_TIMEOUT 5
+
       /* Assume the program will exit after SIGTERM.  Might be
 	 useful to print any remaining stderr output from
 	 scb->error_fd while waiting.  */
-      waitpid (state->pid, &status, 0);
+#define SIGTERM_TIMEOUT INT_MAX
+
+      wait_result = -1;
+#ifdef HAVE_WAITPID
+      wait_result = wait_to_die_with_timeout (state->pid, &status,
+					      PIPE_CLOSE_TIMEOUT);
 #endif
+      if (wait_result == -1)
+	{
+	  kill (state->pid, SIGTERM);
+#ifdef HAVE_WAITPID
+	  wait_to_die_with_timeout (state->pid, &status, SIGTERM_TIMEOUT);
+#endif
+	}
+
       if (scb->error_fd != -1)
 	close (scb->error_fd);
       scb->error_fd = -1;
diff --git a/gdb/serial.c b/gdb/serial.c
index 868858a..df18b2f 100644
--- a/gdb/serial.c
+++ b/gdb/serial.c
@@ -33,10 +33,6 @@ static int global_serial_debug_p;
 
 static struct serial_ops *serial_ops_list = NULL;
 
-/* This is the last serial stream opened.  Used by connect command.  */
-
-static struct serial *last_serial_opened = NULL;
-
 /* Pointer to list of scb's.  */
 
 static struct serial *scb_base;
@@ -53,7 +49,7 @@ static void serial_logchar (struct ui_file *stream,
 static const char logbase_hex[] = "hex";
 static const char logbase_octal[] = "octal";
 static const char logbase_ascii[] = "ascii";
-static const char *logbase_enums[] =
+static const char *const logbase_enums[] =
 {logbase_hex, logbase_octal, logbase_ascii, NULL};
 static const char *serial_logbase = logbase_ascii;
 

@@ -165,6 +161,21 @@ serial_add_interface (struct serial_ops *optable)
   serial_ops_list = optable;
 }
 
+/* Return the open serial device for FD, if found, or NULL if FD is
+   not already opened.  */
+
+struct serial *
+serial_for_fd (int fd)
+{
+  struct serial *scb;
+
+  for (scb = scb_base; scb; scb = scb->next)
+    if (scb->fd == fd)
+      return scb;
+
+  return NULL;
+}
+
 /* Open up a device or a network socket, depending upon the syntax of NAME.  */
 
 struct serial *
@@ -174,13 +185,6 @@ serial_open (const char *name)
   struct serial_ops *ops;
   const char *open_name = name;
 
-  for (scb = scb_base; scb; scb = scb->next)
-    if (scb->name && strcmp (scb->name, name) == 0)
-      {
-	scb->refcnt++;
-	return scb;
-      }
-
   if (strcmp (name, "pc") == 0)
     ops = serial_interface_lookup ("pc");
   else if (strncmp (name, "lpt", 3) == 0)
@@ -211,6 +215,7 @@ serial_open (const char *name)
   scb->bufcnt = 0;
   scb->bufp = scb->buf;
   scb->error_fd = -1;
+  scb->refcnt = 1;
 
   /* `...->open (...)' would get expanded by the open(2) syscall macro.  */
   if ((*scb->ops->open) (scb, open_name))
@@ -221,15 +226,12 @@ serial_open (const char *name)
 
   scb->name = xstrdup (name);
   scb->next = scb_base;
-  scb->refcnt = 1;
   scb->debug_p = 0;
   scb->async_state = 0;
   scb->async_handler = NULL;
   scb->async_context = NULL;
   scb_base = scb;
 
-  last_serial_opened = scb;
-
   if (serial_logfile != NULL)
     {
       serial_logfp = gdb_fopen (serial_logfile, "w");
@@ -240,21 +242,6 @@ serial_open (const char *name)
   return scb;
 }
 
-/* Return the open serial device for FD, if found, or NULL if FD
-   is not already opened.  */
-
-struct serial *
-serial_for_fd (int fd)
-{
-  struct serial *scb;
-
-  for (scb = scb_base; scb; scb = scb->next)
-    if (scb->fd == fd)
-      return scb;
-
-  return NULL;
-}
-
 /* Open a new serial stream using a file handle, using serial
    interface ops OPS.  */
 
@@ -263,13 +250,6 @@ serial_fdopen_ops (const int fd, struct serial_ops *ops)
 {
   struct serial *scb;
 
-  scb = serial_for_fd (fd);
-  if (scb)
-    {
-      scb->refcnt++;
-      return scb;
-    }
-
   if (!ops)
     {
       ops = serial_interface_lookup ("terminal");
@@ -287,10 +267,10 @@ serial_fdopen_ops (const int fd, struct serial_ops *ops)
   scb->bufcnt = 0;
   scb->bufp = scb->buf;
   scb->error_fd = -1;
+  scb->refcnt = 1;
 
   scb->name = NULL;
   scb->next = scb_base;
-  scb->refcnt = 1;
   scb->debug_p = 0;
   scb->async_state = 0;
   scb->async_handler = NULL;
@@ -302,8 +282,6 @@ serial_fdopen_ops (const int fd, struct serial_ops *ops)
   else
     scb->fd = fd;
 
-  last_serial_opened = scb;
-
   return scb;
 }
 
@@ -318,8 +296,6 @@ do_serial_close (struct serial *scb, int really_close)
 {
   struct serial *tmp_scb;
 
-  last_serial_opened = NULL;
-
   if (serial_logfp)
     {
       fputs_unfiltered ("\nEnd of log\n", serial_logfp);
@@ -330,16 +306,6 @@ do_serial_close (struct serial *scb, int really_close)
       serial_logfp = NULL;
     }
 
-/* This is bogus.  It's not our fault if you pass us a bad scb...!  Rob, you
-   should fix your code instead.  */
-
-  if (!scb)
-    return;
-
-  scb->refcnt--;
-  if (scb->refcnt > 0)
-    return;
-
   /* ensure that the FD has been taken out of async mode.  */
   if (scb->async_handler != NULL)
     serial_async (scb, NULL, NULL);
@@ -350,6 +316,9 @@ do_serial_close (struct serial *scb, int really_close)
   if (scb->name)
     xfree (scb->name);
 
+  /* For serial_is_open.  */
+  scb->bufp = NULL;
+
   if (scb_base == scb)
     scb_base = scb_base->next;
   else
@@ -362,7 +331,7 @@ do_serial_close (struct serial *scb, int really_close)
 	break;
       }
 
-  xfree (scb);
+  serial_unref (scb);
 }
 
 void
@@ -378,6 +347,26 @@ serial_un_fdopen (struct serial *scb)
 }
 
 int
+serial_is_open (struct serial *scb)
+{
+  return scb->bufp != NULL;
+}
+
+void
+serial_ref (struct serial *scb)
+{
+  scb->refcnt++;
+}
+
+void
+serial_unref (struct serial *scb)
+{
+  --scb->refcnt;
+  if (scb->refcnt == 0)
+    xfree (scb);
+}
+
+int
 serial_readchar (struct serial *scb, int timeout)
 {
   int ch;
@@ -624,129 +613,6 @@ serial_pipe (struct serial *scbs[2])
   return 0;
 }
 
-#if 0
-/* The connect command is #if 0 because I hadn't thought of an elegant
-   way to wait for I/O on two `struct serial *'s simultaneously.  Two
-   solutions came to mind:
-
-   1) Fork, and have have one fork handle the to user direction,
-   and have the other hand the to target direction.  This
-   obviously won't cut it for MSDOS.
-
-   2) Use something like select.  This assumes that stdin and
-   the target side can both be waited on via the same
-   mechanism.  This may not be true for DOS, if GDB is
-   talking to the target via a TCP socket.
-   -grossman, 8 Jun 93 */
-
-/* Connect the user directly to the remote system.  This command acts just like
-   the 'cu' or 'tip' command.  Use <CR>~. or <CR>~^D to break out.  */
-
-static struct serial *tty_desc;	/* Controlling terminal */
-
-static void
-cleanup_tty (serial_ttystate ttystate)
-{
-  printf_unfiltered ("\r\n[Exiting connect mode]\r\n");
-  serial_set_tty_state (tty_desc, ttystate);
-  xfree (ttystate);
-  serial_close (tty_desc);
-}
-
-static void
-connect_command (char *args, int fromtty)
-{
-  int c;
-  char cur_esc = 0;
-  serial_ttystate ttystate;
-  struct serial *port_desc;		/* TTY port */
-
-  dont_repeat ();
-
-  if (args)
-    fprintf_unfiltered (gdb_stderr,
-			"This command takes no args.  "
-			"They have been ignored.\n");
-
-  printf_unfiltered ("[Entering connect mode.  Use ~. or ~^D to escape]\n");
-
-  tty_desc = serial_fdopen (0);
-  port_desc = last_serial_opened;
-
-  ttystate = serial_get_tty_state (tty_desc);
-
-  serial_raw (tty_desc);
-  serial_raw (port_desc);
-
-  make_cleanup (cleanup_tty, ttystate);
-
-  while (1)
-    {
-      int mask;
-
-      mask = serial_wait_2 (tty_desc, port_desc, -1);
-
-      if (mask & 2)
-	{			/* tty input */
-	  char cx;
-
-	  while (1)
-	    {
-	      c = serial_readchar (tty_desc, 0);
-
-	      if (c == SERIAL_TIMEOUT)
-		break;
-
-	      if (c < 0)
-		perror_with_name (_("connect"));
-
-	      cx = c;
-	      serial_write (port_desc, &cx, 1);
-
-	      switch (cur_esc)
-		{
-		case 0:
-		  if (c == '\r')
-		    cur_esc = c;
-		  break;
-		case '\r':
-		  if (c == '~')
-		    cur_esc = c;
-		  else
-		    cur_esc = 0;
-		  break;
-		case '~':
-		  if (c == '.' || c == '\004')
-		    return;
-		  else
-		    cur_esc = 0;
-		}
-	    }
-	}
-
-      if (mask & 1)
-	{			/* Port input */
-	  char cx;
-
-	  while (1)
-	    {
-	      c = serial_readchar (port_desc, 0);
-
-	      if (c == SERIAL_TIMEOUT)
-		break;
-
-	      if (c < 0)
-		perror_with_name (_("connect"));
-
-	      cx = c;
-
-	      serial_write (tty_desc, &cx, 1);
-	    }
-	}
-    }
-}
-#endif /* 0 */
-
 /* Serial set/show framework.  */
 
 static struct cmd_list_element *serial_set_cmdlist;
diff --git a/gdb/serial.h b/gdb/serial.h
index 02a3b2d..b164062 100644
--- a/gdb/serial.h
+++ b/gdb/serial.h
@@ -37,13 +37,18 @@ typedef void *serial_ttystate;
 struct serial;
 
 /* Try to open NAME.  Returns a new `struct serial *' on success, NULL
-   on failure.  Note that some open calls can block and, if possible, 
-   should be  written to be non-blocking, with calls to ui_look_hook 
-   so they can be cancelled.  An async interface for open could be
-   added to GDB if necessary.  */
+   on failure.  The new serial object has a reference count of 1.
+   Note that some open calls can block and, if possible, should be
+   written to be non-blocking, with calls to ui_look_hook so they can
+   be cancelled.  An async interface for open could be added to GDB if
+   necessary.  */
 
 extern struct serial *serial_open (const char *name);
 
+/* Returns true if SCB is open.  */
+
+extern int serial_is_open (struct serial *scb);
+
 /* Find an already opened serial stream using a file handle.  */
 
 extern struct serial *serial_for_fd (int fd);
@@ -52,10 +57,18 @@ extern struct serial *serial_for_fd (int fd);
 
 extern struct serial *serial_fdopen (const int fd);
 
-/* Push out all buffers, close the device and destroy SCB.  */
+/* Push out all buffers, close the device and unref SCB.  */
 
 extern void serial_close (struct serial *scb);
 
+/* Increment reference count of SCB.  */
+
+extern void serial_ref (struct serial *scb);
+
+/* Decrement reference count of SCB.  */
+
+extern void serial_unref (struct serial *scb);
+
 /* Create a pipe, and put the read end in files[0], and the write end
    in filde[1].  Returns 0 for success, negative value for error (in
    which case errno contains the error).  */
@@ -213,6 +226,10 @@ extern int serial_debug_p (struct serial *scb);
 
 struct serial
   {
+    /* serial objects are ref counted (but not the underlying
+       connection, just the object's lifetime in memory).  */
+    int refcnt;
+
     int fd;			/* File descriptor */
     /* File descriptor for a separate error stream that should be
        immediately forwarded to gdb_stderr.  This may be -1.
@@ -233,7 +250,6 @@ struct serial
 				   more seconds.  */
     char *name;			/* The name of the device or host */
     struct serial *next;	/* Pointer to the next `struct serial *' */
-    int refcnt;			/* Number of pointers to this block */
     int debug_p;		/* Trace this serial devices operation.  */
     int async_state;		/* Async internal state.  */
     void *async_context;	/* Async event thread's context */
diff --git a/gdb/sh-linux-tdep.c b/gdb/sh-linux-tdep.c
index 5bf15e3..f4445c3 100644
--- a/gdb/sh-linux-tdep.c
+++ b/gdb/sh-linux-tdep.c
@@ -23,6 +23,9 @@
 #include "solib-svr4.h"
 #include "symtab.h"
 
+#include "trad-frame.h"
+#include "tramp-frame.h"
+
 #include "glibc-tdep.h"
 #include "sh-tdep.h"
 #include "linux-tdep.h"
@@ -70,6 +73,113 @@ static const struct sh_corefile_regmap fpregs_table[] =
   {-1 /* Terminator.  */, 0}
 };
 
+/* SH signal handler frame support.  */
+
+static void
+sh_linux_sigtramp_cache (struct frame_info *this_frame,
+			 struct trad_frame_cache *this_cache,
+			 CORE_ADDR func, int regs_offset)
+{
+  int i;
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
+  CORE_ADDR base = get_frame_register_unsigned (this_frame,
+						gdbarch_sp_regnum (gdbarch));
+  CORE_ADDR regs = base + regs_offset;
+
+  for (i = 0; i < 18; i++)
+    trad_frame_set_reg_addr (this_cache, i, regs + i * 4);
+
+  trad_frame_set_reg_addr (this_cache, SR_REGNUM, regs + 18 * 4);
+  trad_frame_set_reg_addr (this_cache, GBR_REGNUM, regs + 19 * 4);
+  trad_frame_set_reg_addr (this_cache, MACH_REGNUM, regs + 20 * 4);
+  trad_frame_set_reg_addr (this_cache, MACL_REGNUM, regs + 21 * 4);
+
+  /* Restore FP state if we have an FPU.  */
+  if (gdbarch_fp0_regnum (gdbarch) != -1)
+    {
+      CORE_ADDR fpregs = regs + 22 * 4;
+      for (i = FR0_REGNUM; i <= FP_LAST_REGNUM; i++)
+	trad_frame_set_reg_addr (this_cache, i, fpregs + i * 4);
+      trad_frame_set_reg_addr (this_cache, FPSCR_REGNUM, fpregs + 32 * 4);
+      trad_frame_set_reg_addr (this_cache, FPUL_REGNUM, fpregs + 33 * 4);
+    }
+
+  /* Save a frame ID.  */
+  trad_frame_set_id (this_cache, frame_id_build (base, func));
+}
+
+/* Implement struct tramp_frame "init" callbacks for signal
+   trampolines on 32-bit SH.  */
+
+static void
+sh_linux_sigreturn_init (const struct tramp_frame *self,
+			 struct frame_info *this_frame,
+			 struct trad_frame_cache *this_cache,
+			 CORE_ADDR func)
+{
+  /* SH 32-bit sigframe: sigcontext at start of sigframe,
+     registers start after a single 'oldmask' word.  */
+  sh_linux_sigtramp_cache (this_frame, this_cache, func, 4);
+}
+
+static void
+sh_linux_rt_sigreturn_init (const struct tramp_frame *self,
+			    struct frame_info *this_frame,
+			    struct trad_frame_cache *this_cache,
+			    CORE_ADDR func)
+{
+  /* SH 32-bit rt_sigframe: starts with a siginfo (128 bytes), then
+     we can find sigcontext embedded within a ucontext (offset 20 bytes).
+     Then registers start after a single 'oldmask' word.  */
+  sh_linux_sigtramp_cache (this_frame, this_cache, func,
+			   128 /* sizeof (struct siginfo)  */
+			   + 20 /* offsetof (struct ucontext, uc_mcontext) */
+			   + 4 /* oldmask word at start of sigcontext */);
+}
+
+/* Instruction patterns.  */
+#define SH_MOVW     0x9305
+#define SH_TRAP     0xc300
+#define SH_OR_R0_R0 0x200b       
+
+/* SH sigreturn syscall numbers.  */
+#define SH_NR_SIGRETURN 0x0077
+#define SH_NR_RT_SIGRETURN 0x00ad
+
+static struct tramp_frame sh_linux_sigreturn_tramp_frame = {
+  SIGTRAMP_FRAME,
+  2,
+  {
+    { SH_MOVW, 0xffff },
+    { SH_TRAP, 0xff00 }, /* #imm argument part filtered out.  */
+    { SH_OR_R0_R0, 0xffff },
+    { SH_OR_R0_R0, 0xffff },
+    { SH_OR_R0_R0, 0xffff },
+    { SH_OR_R0_R0, 0xffff },
+    { SH_OR_R0_R0, 0xffff },
+    { SH_NR_SIGRETURN, 0xffff },
+    { TRAMP_SENTINEL_INSN }
+  },
+  sh_linux_sigreturn_init
+};
+
+static struct tramp_frame sh_linux_rt_sigreturn_tramp_frame = {
+  SIGTRAMP_FRAME,
+  2,
+  {
+    { SH_MOVW, 0xffff },
+    { SH_TRAP, 0xff00 }, /* #imm argument part filtered out.  */
+    { SH_OR_R0_R0, 0xffff },
+    { SH_OR_R0_R0, 0xffff },
+    { SH_OR_R0_R0, 0xffff },
+    { SH_OR_R0_R0, 0xffff },
+    { SH_OR_R0_R0, 0xffff },
+    { SH_NR_RT_SIGRETURN, 0xffff },
+    { TRAMP_SENTINEL_INSN }
+  },
+  sh_linux_rt_sigreturn_init
+};
+
 static void
 sh_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
@@ -84,13 +194,17 @@ sh_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   set_gdbarch_fetch_tls_load_module_address (gdbarch,
                                              svr4_fetch_objfile_link_map);
 
-  /* Core files are supported for 32-bit SH only, at present.  */
+  /* Core files and signal handler frame unwinding are supported for
+     32-bit SH only, at present.  */
   if (info.bfd_arch_info->mach != bfd_mach_sh5)
     {
       struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
 
       tdep->core_gregmap = (struct sh_corefile_regmap *)gregs_table;
       tdep->core_fpregmap = (struct sh_corefile_regmap *)fpregs_table;
+
+      tramp_frame_prepend_unwinder (gdbarch, &sh_linux_sigreturn_tramp_frame);
+      tramp_frame_prepend_unwinder (gdbarch, &sh_linux_rt_sigreturn_tramp_frame);
     }
 }
 
diff --git a/gdb/sh-tdep.c b/gdb/sh-tdep.c
index 519a8b4..a8e31b1 100644
--- a/gdb/sh-tdep.c
+++ b/gdb/sh-tdep.c
@@ -41,8 +41,10 @@
 #include "osabi.h"
 #include "reggroups.h"
 #include "regset.h"
+#include "objfiles.h"
 
 #include "sh-tdep.h"
+#include "sh64-tdep.h"
 
 #include "elf-bfd.h"
 #include "solib-svr4.h"
@@ -59,7 +61,7 @@ static struct cmd_list_element *showshcmdlist = NULL;
 
 static const char sh_cc_gcc[] = "gcc";
 static const char sh_cc_renesas[] = "renesas";
-static const char *sh_cc_enum[] = {
+static const char *const sh_cc_enum[] = {
   sh_cc_gcc,
   sh_cc_renesas, 
   NULL
@@ -67,8 +69,6 @@ static const char *sh_cc_enum[] = {
 
 static const char *sh_active_calling_convention = sh_cc_gcc;
 
-static void (*sh_show_regs) (struct frame_info *);
-
 #define SH_NUM_REGS 67
 
 struct sh_frame_cache
@@ -89,9 +89,24 @@ struct sh_frame_cache
 static int
 sh_is_renesas_calling_convention (struct type *func_type)
 {
-  return ((func_type
-	   && TYPE_CALLING_CONVENTION (func_type) == DW_CC_GNU_renesas_sh)
-	  || sh_active_calling_convention == sh_cc_renesas);
+  int val = 0;
+
+  if (func_type)
+    {
+      func_type = check_typedef (func_type);
+
+      if (TYPE_CODE (func_type) == TYPE_CODE_PTR)
+        func_type = check_typedef (TYPE_TARGET_TYPE (func_type));
+
+      if (TYPE_CODE (func_type) == TYPE_CODE_FUNC
+          && TYPE_CALLING_CONVENTION (func_type) == DW_CC_GNU_renesas_sh)
+        val = 1;
+    }
+
+  if (sh_active_calling_convention == sh_cc_renesas)
+    val = 1;
+
+  return val;
 }
 
 static const char *
@@ -518,22 +533,18 @@ sh_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
 
 static CORE_ADDR
 sh_analyze_prologue (struct gdbarch *gdbarch,
-		     CORE_ADDR pc, CORE_ADDR current_pc,
+		     CORE_ADDR pc, CORE_ADDR limit_pc,
 		     struct sh_frame_cache *cache, ULONGEST fpscr)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   ULONGEST inst;
-  CORE_ADDR opc;
   int offset;
   int sav_offset = 0;
   int r3_val = 0;
   int reg, sav_reg = -1;
 
-  if (pc >= current_pc)
-    return current_pc;
-
   cache->uses_fp = 0;
-  for (opc = pc + (2 * 28); pc < opc; pc += 2)
+  for (; pc < limit_pc; pc += 2)
     {
       inst = read_memory_unsigned_integer (pc, 2, byte_order);
       /* See where the registers will be saved to.  */
@@ -598,7 +609,8 @@ sh_analyze_prologue (struct gdbarch *gdbarch,
 		}
 	    }
 	}
-      else if (IS_MOVI20 (inst))
+      else if (IS_MOVI20 (inst)
+	       && (pc + 2 < limit_pc))
         {
 	  if (sav_reg < 0)
 	    {
@@ -640,14 +652,17 @@ sh_analyze_prologue (struct gdbarch *gdbarch,
 	}
       else if (IS_MOV_SP_FP (inst))
 	{
+	  pc += 2;
+	  /* Don't go any further than six more instructions.  */
+	  limit_pc = min (limit_pc, pc + (2 * 6));
+
 	  cache->uses_fp = 1;
 	  /* At this point, only allow argument register moves to other
 	     registers or argument register moves to @(X,fp) which are
 	     moving the register arguments onto the stack area allocated
 	     by a former add somenumber to SP call.  Don't allow moving
 	     to an fp indirect address above fp + cache->sp_offset.  */
-	  pc += 2;
-	  for (opc = pc + 12; pc < opc; pc += 2)
+	  for (; pc < limit_pc; pc += 2)
 	    {
 	      inst = read_memory_integer (pc, 2, byte_order);
 	      if (IS_MOV_ARG_TO_IND_R14 (inst))
@@ -679,9 +694,12 @@ sh_analyze_prologue (struct gdbarch *gdbarch,
 	     jsr, which will be very confusing.  Most likely the next
 	     instruction is going to be IS_MOV_SP_FP in the delay slot.  If
 	     so, note that before returning the current pc.  */
-	  inst = read_memory_integer (pc + 2, 2, byte_order);
-	  if (IS_MOV_SP_FP (inst))
-	    cache->uses_fp = 1;
+	  if (pc + 2 < limit_pc)
+	    {
+	      inst = read_memory_integer (pc + 2, 2, byte_order);
+	      if (IS_MOV_SP_FP (inst))
+		cache->uses_fp = 1;
+	    }
 	  break;
 	}
 #if 0		/* This used to just stop when it found an instruction
@@ -697,55 +715,42 @@ sh_analyze_prologue (struct gdbarch *gdbarch,
 }
 
 /* Skip any prologue before the guts of a function.  */
-
-/* Skip the prologue using the debug information.  If this fails we'll
-   fall back on the 'guess' method below.  */
 static CORE_ADDR
-after_prologue (CORE_ADDR pc)
+sh_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
-  struct symtab_and_line sal;
-  CORE_ADDR func_addr, func_end;
-
-  /* If we can not find the symbol in the partial symbol table, then
-     there is no hope we can determine the function's start address
-     with this code.  */
-  if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end))
-    return 0;
-
-  /* Get the line associated with FUNC_ADDR.  */
-  sal = find_pc_line (func_addr, 0);
-
-  /* There are only two cases to consider.  First, the end of the source line
-     is within the function bounds.  In that case we return the end of the
-     source line.  Second is the end of the source line extends beyond the
-     bounds of the current function.  We need to use the slow code to
-     examine instructions in that case.  */
-  if (sal.end < func_end)
-    return sal.end;
-  else
-    return 0;
-}
-
-static CORE_ADDR
-sh_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
-{
-  CORE_ADDR pc;
+  CORE_ADDR post_prologue_pc, func_addr, func_end_addr, limit_pc;
   struct sh_frame_cache cache;
 
   /* See if we can determine the end of the prologue via the symbol table.
      If so, then return either PC, or the PC after the prologue, whichever
      is greater.  */
-  pc = after_prologue (start_pc);
+  if (find_pc_partial_function (pc, NULL, &func_addr, &func_end_addr))
+    {
+      post_prologue_pc = skip_prologue_using_sal (gdbarch, func_addr);
+      if (post_prologue_pc != 0)
+        return max (pc, post_prologue_pc);
+    }
 
-  /* If after_prologue returned a useful address, then use it.  Else
-     fall back on the instruction skipping code.  */
-  if (pc)
-    return max (pc, start_pc);
+  /* Can't determine prologue from the symbol table, need to examine
+     instructions.  */
+
+  /* Find an upper limit on the function prologue using the debug
+     information.  If the debug information could not be used to provide
+     that bound, then use an arbitrary large number as the upper bound.  */
+  limit_pc = skip_prologue_using_sal (gdbarch, pc);
+  if (limit_pc == 0)
+    /* Don't go any further than 28 instructions.  */
+    limit_pc = pc + (2 * 28);
+
+  /* Do not allow limit_pc to be past the function end, if we know
+     where that end is...  */
+  if (func_end_addr != 0)
+    limit_pc = min (limit_pc, func_end_addr);
 
   cache.sp_offset = -4;
-  pc = sh_analyze_prologue (gdbarch, start_pc, (CORE_ADDR) -1, &cache, 0);
-  if (!cache.uses_fp)
-    return start_pc;
+  post_prologue_pc = sh_analyze_prologue (gdbarch, pc, limit_pc, &cache, 0);
+  if (cache.uses_fp)
+    pc = post_prologue_pc;
 
   return pc;
 }
@@ -1391,10 +1396,12 @@ sh_store_return_value_fpu (struct type *type, struct regcache *regcache,
 }
 
 static enum return_value_convention
-sh_return_value_nofpu (struct gdbarch *gdbarch, struct type *func_type,
+sh_return_value_nofpu (struct gdbarch *gdbarch, struct value *function,
 		       struct type *type, struct regcache *regcache,
 		       gdb_byte *readbuf, const gdb_byte *writebuf)
 {
+  struct type *func_type = function ? value_type (function) : NULL;
+
   if (sh_use_struct_convention_nofpu (
   	sh_is_renesas_calling_convention (func_type), type))
     return RETURN_VALUE_STRUCT_CONVENTION;
@@ -1406,10 +1413,12 @@ sh_return_value_nofpu (struct gdbarch *gdbarch, struct type *func_type,
 }
 
 static enum return_value_convention
-sh_return_value_fpu (struct gdbarch *gdbarch, struct type *func_type,
+sh_return_value_fpu (struct gdbarch *gdbarch, struct value *function,
 		     struct type *type, struct regcache *regcache,
 		     gdb_byte *readbuf, const gdb_byte *writebuf)
 {
+  struct type *func_type = function ? value_type (function) : NULL;
+
   if (sh_use_struct_convention (
 	sh_is_renesas_calling_convention (func_type), type))
     return RETURN_VALUE_STRUCT_CONVENTION;
@@ -1420,714 +1429,6 @@ sh_return_value_fpu (struct gdbarch *gdbarch, struct type *func_type,
   return RETURN_VALUE_REGISTER_CONVENTION;
 }
 
-/* Print the registers in a form similar to the E7000.  */
-
-static void
-sh_generic_show_regs (struct frame_info *frame)
-{
-  printf_filtered
-    ("      PC %s       SR %08lx       PR %08lx     MACH %08lx\n",
-     phex (get_frame_register_unsigned (frame,
-					gdbarch_pc_regnum
-					   (get_frame_arch (frame))), 4),
-     (long) get_frame_register_unsigned (frame, SR_REGNUM),
-     (long) get_frame_register_unsigned (frame, PR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACH_REGNUM));
-
-  printf_filtered
-    ("     GBR %08lx      VBR %08lx                       MACL %08lx\n",
-     (long) get_frame_register_unsigned (frame, GBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, VBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACL_REGNUM));
-
-  printf_filtered
-    ("R0-R7    %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 0),
-     (long) get_frame_register_unsigned (frame, 1),
-     (long) get_frame_register_unsigned (frame, 2),
-     (long) get_frame_register_unsigned (frame, 3),
-     (long) get_frame_register_unsigned (frame, 4),
-     (long) get_frame_register_unsigned (frame, 5),
-     (long) get_frame_register_unsigned (frame, 6),
-     (long) get_frame_register_unsigned (frame, 7));
-  printf_filtered
-    ("R8-R15   %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 8),
-     (long) get_frame_register_unsigned (frame, 9),
-     (long) get_frame_register_unsigned (frame, 10),
-     (long) get_frame_register_unsigned (frame, 11),
-     (long) get_frame_register_unsigned (frame, 12),
-     (long) get_frame_register_unsigned (frame, 13),
-     (long) get_frame_register_unsigned (frame, 14),
-     (long) get_frame_register_unsigned (frame, 15));
-}
-
-static void
-sh3_show_regs (struct frame_info *frame)
-{
-  printf_filtered
-    ("      PC %s       SR %08lx       PR %08lx     MACH %08lx\n",
-     phex (get_frame_register_unsigned (frame,
-					gdbarch_pc_regnum
-					  (get_frame_arch (frame))), 4),
-     (long) get_frame_register_unsigned (frame, SR_REGNUM),
-     (long) get_frame_register_unsigned (frame, PR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACH_REGNUM));
-
-  printf_filtered
-    ("     GBR %08lx      VBR %08lx                       MACL %08lx\n",
-     (long) get_frame_register_unsigned (frame, GBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, VBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACL_REGNUM));
-  printf_filtered
-    ("     SSR %08lx      SPC %08lx\n",
-     (long) get_frame_register_unsigned (frame, SSR_REGNUM),
-     (long) get_frame_register_unsigned (frame, SPC_REGNUM));
-
-  printf_filtered
-    ("R0-R7    %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 0),
-     (long) get_frame_register_unsigned (frame, 1),
-     (long) get_frame_register_unsigned (frame, 2),
-     (long) get_frame_register_unsigned (frame, 3),
-     (long) get_frame_register_unsigned (frame, 4),
-     (long) get_frame_register_unsigned (frame, 5),
-     (long) get_frame_register_unsigned (frame, 6),
-     (long) get_frame_register_unsigned (frame, 7));
-  printf_filtered
-    ("R8-R15   %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 8),
-     (long) get_frame_register_unsigned (frame, 9),
-     (long) get_frame_register_unsigned (frame, 10),
-     (long) get_frame_register_unsigned (frame, 11),
-     (long) get_frame_register_unsigned (frame, 12),
-     (long) get_frame_register_unsigned (frame, 13),
-     (long) get_frame_register_unsigned (frame, 14),
-     (long) get_frame_register_unsigned (frame, 15));
-}
-
-static void
-sh2e_show_regs (struct frame_info *frame)
-{
-  struct gdbarch *gdbarch = get_frame_arch (frame);
-  printf_filtered
-    ("      PC %s       SR %08lx       PR %08lx     MACH %08lx\n",
-     phex (get_frame_register_unsigned (frame,
-					gdbarch_pc_regnum (gdbarch)), 4),
-     (long) get_frame_register_unsigned (frame, SR_REGNUM),
-     (long) get_frame_register_unsigned (frame, PR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACH_REGNUM));
-
-  printf_filtered
-    ("     GBR %08lx      VBR %08lx                       MACL %08lx\n",
-     (long) get_frame_register_unsigned (frame, GBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, VBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACL_REGNUM));
-  printf_filtered
-    ("     SSR %08lx      SPC %08lx     FPUL %08lx    FPSCR %08lx\n",
-     (long) get_frame_register_unsigned (frame, SSR_REGNUM),
-     (long) get_frame_register_unsigned (frame, SPC_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPUL_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPSCR_REGNUM));
-
-  printf_filtered
-    ("R0-R7    %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 0),
-     (long) get_frame_register_unsigned (frame, 1),
-     (long) get_frame_register_unsigned (frame, 2),
-     (long) get_frame_register_unsigned (frame, 3),
-     (long) get_frame_register_unsigned (frame, 4),
-     (long) get_frame_register_unsigned (frame, 5),
-     (long) get_frame_register_unsigned (frame, 6),
-     (long) get_frame_register_unsigned (frame, 7));
-  printf_filtered
-    ("R8-R15   %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 8),
-     (long) get_frame_register_unsigned (frame, 9),
-     (long) get_frame_register_unsigned (frame, 10),
-     (long) get_frame_register_unsigned (frame, 11),
-     (long) get_frame_register_unsigned (frame, 12),
-     (long) get_frame_register_unsigned (frame, 13),
-     (long) get_frame_register_unsigned (frame, 14),
-     (long) get_frame_register_unsigned (frame, 15));
-
-  printf_filtered
-    ("FP0-FP7  %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 0),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 1),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 2),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 3),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 4),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 5),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 6),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 7));
-  printf_filtered
-    ("FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 8),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 9),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 10),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 11),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 12),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 13),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 14),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 15));
-}
-
-static void
-sh2a_show_regs (struct frame_info *frame)
-{
-  struct gdbarch *gdbarch = get_frame_arch (frame);
-  int pr = get_frame_register_unsigned (frame, FPSCR_REGNUM) & 0x80000;
-
-  printf_filtered
-    ("      PC %s       SR %08lx       PR %08lx     MACH %08lx\n",
-     phex (get_frame_register_unsigned (frame,
-					gdbarch_pc_regnum (gdbarch)), 4),
-     (long) get_frame_register_unsigned (frame, SR_REGNUM),
-     (long) get_frame_register_unsigned (frame, PR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACH_REGNUM));
-
-  printf_filtered
-    ("     GBR %08lx      VBR %08lx      TBR %08lx     MACL %08lx\n",
-     (long) get_frame_register_unsigned (frame, GBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, VBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, TBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACL_REGNUM));
-  printf_filtered
-    ("     SSR %08lx      SPC %08lx     FPUL %08lx    FPSCR %08lx\n",
-     (long) get_frame_register_unsigned (frame, SSR_REGNUM),
-     (long) get_frame_register_unsigned (frame, SPC_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPUL_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPSCR_REGNUM));
-
-  printf_filtered
-    ("R0-R7    %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 0),
-     (long) get_frame_register_unsigned (frame, 1),
-     (long) get_frame_register_unsigned (frame, 2),
-     (long) get_frame_register_unsigned (frame, 3),
-     (long) get_frame_register_unsigned (frame, 4),
-     (long) get_frame_register_unsigned (frame, 5),
-     (long) get_frame_register_unsigned (frame, 6),
-     (long) get_frame_register_unsigned (frame, 7));
-  printf_filtered
-    ("R8-R15   %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 8),
-     (long) get_frame_register_unsigned (frame, 9),
-     (long) get_frame_register_unsigned (frame, 10),
-     (long) get_frame_register_unsigned (frame, 11),
-     (long) get_frame_register_unsigned (frame, 12),
-     (long) get_frame_register_unsigned (frame, 13),
-     (long) get_frame_register_unsigned (frame, 14),
-     (long) get_frame_register_unsigned (frame, 15));
-
-  printf_filtered
-    (pr ? "DR0-DR6  %08lx%08lx  %08lx%08lx  %08lx%08lx  %08lx%08lx\n"
-	: "FP0-FP7  %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 0),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 1),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 2),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 3),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 4),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 5),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 6),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 7));
-  printf_filtered
-    (pr ? "DR8-DR14 %08lx%08lx  %08lx%08lx  %08lx%08lx  %08lx%08lx\n"
-	: "FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 8),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 9),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 10),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 11),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 12),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 13),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 14),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 15));
-  printf_filtered
-    ("BANK=%-3d\n", (int) get_frame_register_unsigned (frame, BANK_REGNUM));
-  printf_filtered
-    ("R0b-R7b  %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 0),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 1),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 2),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 3),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 4),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 5),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 6),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 7));
-  printf_filtered
-    ("R8b-R14b %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 8),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 9),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 10),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 11),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 12),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 13),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 14));
-  printf_filtered
-    ("MACHb=%08lx IVNb=%08lx PRb=%08lx GBRb=%08lx MACLb=%08lx\n",
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 15),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 16),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 17),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 18),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 19));
-}
-
-static void
-sh2a_nofpu_show_regs (struct frame_info *frame)
-{
-  int pr = get_frame_register_unsigned (frame, FPSCR_REGNUM) & 0x80000;
-
-  printf_filtered
-    ("      PC %s       SR %08lx       PR %08lx     MACH %08lx\n",
-     phex (get_frame_register_unsigned (frame,
-					gdbarch_pc_regnum
-					  (get_frame_arch (frame))), 4),
-     (long) get_frame_register_unsigned (frame, SR_REGNUM),
-     (long) get_frame_register_unsigned (frame, PR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACH_REGNUM));
-
-  printf_filtered
-    ("     GBR %08lx      VBR %08lx      TBR %08lx     MACL %08lx\n",
-     (long) get_frame_register_unsigned (frame, GBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, VBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, TBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACL_REGNUM));
-  printf_filtered
-    ("     SSR %08lx      SPC %08lx     FPUL %08lx    FPSCR %08lx\n",
-     (long) get_frame_register_unsigned (frame, SSR_REGNUM),
-     (long) get_frame_register_unsigned (frame, SPC_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPUL_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPSCR_REGNUM));
-
-  printf_filtered
-    ("R0-R7    %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 0),
-     (long) get_frame_register_unsigned (frame, 1),
-     (long) get_frame_register_unsigned (frame, 2),
-     (long) get_frame_register_unsigned (frame, 3),
-     (long) get_frame_register_unsigned (frame, 4),
-     (long) get_frame_register_unsigned (frame, 5),
-     (long) get_frame_register_unsigned (frame, 6),
-     (long) get_frame_register_unsigned (frame, 7));
-  printf_filtered
-    ("R8-R15   %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 8),
-     (long) get_frame_register_unsigned (frame, 9),
-     (long) get_frame_register_unsigned (frame, 10),
-     (long) get_frame_register_unsigned (frame, 11),
-     (long) get_frame_register_unsigned (frame, 12),
-     (long) get_frame_register_unsigned (frame, 13),
-     (long) get_frame_register_unsigned (frame, 14),
-     (long) get_frame_register_unsigned (frame, 15));
-
-  printf_filtered
-    ("BANK=%-3d\n", (int) get_frame_register_unsigned (frame, BANK_REGNUM));
-  printf_filtered
-    ("R0b-R7b  %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 0),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 1),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 2),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 3),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 4),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 5),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 6),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 7));
-  printf_filtered
-    ("R8b-R14b %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 8),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 9),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 10),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 11),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 12),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 13),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 14));
-  printf_filtered
-    ("MACHb=%08lx IVNb=%08lx PRb=%08lx GBRb=%08lx MACLb=%08lx\n",
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 15),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 16),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 17),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 18),
-     (long) get_frame_register_unsigned (frame, R0_BANK0_REGNUM + 19));
-}
-
-static void
-sh3e_show_regs (struct frame_info *frame)
-{
-  struct gdbarch *gdbarch = get_frame_arch (frame);
-  printf_filtered
-    ("      PC %s       SR %08lx       PR %08lx     MACH %08lx\n",
-     phex (get_frame_register_unsigned (frame,
-					gdbarch_pc_regnum (gdbarch)), 4),
-     (long) get_frame_register_unsigned (frame, SR_REGNUM),
-     (long) get_frame_register_unsigned (frame, PR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACH_REGNUM));
-
-  printf_filtered
-    ("     GBR %08lx      VBR %08lx                       MACL %08lx\n",
-     (long) get_frame_register_unsigned (frame, GBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, VBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACL_REGNUM));
-  printf_filtered
-    ("     SSR %08lx      SPC %08lx     FPUL %08lx    FPSCR %08lx\n",
-     (long) get_frame_register_unsigned (frame, SSR_REGNUM),
-     (long) get_frame_register_unsigned (frame, SPC_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPUL_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPSCR_REGNUM));
-
-  printf_filtered
-    ("R0-R7    %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 0),
-     (long) get_frame_register_unsigned (frame, 1),
-     (long) get_frame_register_unsigned (frame, 2),
-     (long) get_frame_register_unsigned (frame, 3),
-     (long) get_frame_register_unsigned (frame, 4),
-     (long) get_frame_register_unsigned (frame, 5),
-     (long) get_frame_register_unsigned (frame, 6),
-     (long) get_frame_register_unsigned (frame, 7));
-  printf_filtered
-    ("R8-R15   %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 8),
-     (long) get_frame_register_unsigned (frame, 9),
-     (long) get_frame_register_unsigned (frame, 10),
-     (long) get_frame_register_unsigned (frame, 11),
-     (long) get_frame_register_unsigned (frame, 12),
-     (long) get_frame_register_unsigned (frame, 13),
-     (long) get_frame_register_unsigned (frame, 14),
-     (long) get_frame_register_unsigned (frame, 15));
-
-  printf_filtered
-    ("FP0-FP7  %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 0),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 1),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 2),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 3),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 4),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 5),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 6),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 7));
-  printf_filtered
-    ("FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 8),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 9),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 10),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 11),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 12),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 13),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 14),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 15));
-}
-
-static void
-sh3_dsp_show_regs (struct frame_info *frame)
-{
-  printf_filtered
-    ("      PC %s       SR %08lx       PR %08lx     MACH %08lx\n",
-     phex (get_frame_register_unsigned (frame,
-					gdbarch_pc_regnum
-					  (get_frame_arch (frame))), 4),
-     (long) get_frame_register_unsigned (frame, SR_REGNUM),
-     (long) get_frame_register_unsigned (frame, PR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACH_REGNUM));
-
-  printf_filtered
-    ("     GBR %08lx      VBR %08lx                       MACL %08lx\n",
-     (long) get_frame_register_unsigned (frame, GBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, VBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACL_REGNUM));
-
-  printf_filtered
-    ("     SSR %08lx      SPC %08lx      DSR %08lx\n",
-     (long) get_frame_register_unsigned (frame, SSR_REGNUM),
-     (long) get_frame_register_unsigned (frame, SPC_REGNUM),
-     (long) get_frame_register_unsigned (frame, DSR_REGNUM));
-
-  printf_filtered
-    ("R0-R7    %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 0),
-     (long) get_frame_register_unsigned (frame, 1),
-     (long) get_frame_register_unsigned (frame, 2),
-     (long) get_frame_register_unsigned (frame, 3),
-     (long) get_frame_register_unsigned (frame, 4),
-     (long) get_frame_register_unsigned (frame, 5),
-     (long) get_frame_register_unsigned (frame, 6),
-     (long) get_frame_register_unsigned (frame, 7));
-  printf_filtered
-    ("R8-R15   %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 8),
-     (long) get_frame_register_unsigned (frame, 9),
-     (long) get_frame_register_unsigned (frame, 10),
-     (long) get_frame_register_unsigned (frame, 11),
-     (long) get_frame_register_unsigned (frame, 12),
-     (long) get_frame_register_unsigned (frame, 13),
-     (long) get_frame_register_unsigned (frame, 14),
-     (long) get_frame_register_unsigned (frame, 15));
-
-  printf_filtered
-    ("A0G=%02lx A0=%08lx M0=%08lx X0=%08lx Y0=%08lx RS=%08lx MOD=%08lx\n",
-     (long) get_frame_register_unsigned (frame, A0G_REGNUM) & 0xff,
-     (long) get_frame_register_unsigned (frame, A0_REGNUM),
-     (long) get_frame_register_unsigned (frame, M0_REGNUM),
-     (long) get_frame_register_unsigned (frame, X0_REGNUM),
-     (long) get_frame_register_unsigned (frame, Y0_REGNUM),
-     (long) get_frame_register_unsigned (frame, RS_REGNUM),
-     (long) get_frame_register_unsigned (frame, MOD_REGNUM));
-  printf_filtered
-    ("A1G=%02lx A1=%08lx M1=%08lx X1=%08lx Y1=%08lx RE=%08lx\n",
-     (long) get_frame_register_unsigned (frame, A1G_REGNUM) & 0xff,
-     (long) get_frame_register_unsigned (frame, A1_REGNUM),
-     (long) get_frame_register_unsigned (frame, M1_REGNUM),
-     (long) get_frame_register_unsigned (frame, X1_REGNUM),
-     (long) get_frame_register_unsigned (frame, Y1_REGNUM),
-     (long) get_frame_register_unsigned (frame, RE_REGNUM));
-}
-
-static void
-sh4_show_regs (struct frame_info *frame)
-{
-  struct gdbarch *gdbarch = get_frame_arch (frame);
-  int pr = get_frame_register_unsigned (frame, FPSCR_REGNUM) & 0x80000;
-
-  printf_filtered
-    ("      PC %s       SR %08lx       PR %08lx     MACH %08lx\n",
-     phex (get_frame_register_unsigned (frame,
-					gdbarch_pc_regnum (gdbarch)), 4),
-     (long) get_frame_register_unsigned (frame, SR_REGNUM),
-     (long) get_frame_register_unsigned (frame, PR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACH_REGNUM));
-
-  printf_filtered
-    ("     GBR %08lx      VBR %08lx                       MACL %08lx\n",
-     (long) get_frame_register_unsigned (frame, GBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, VBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACL_REGNUM));
-  printf_filtered
-    ("     SSR %08lx      SPC %08lx     FPUL %08lx    FPSCR %08lx\n",
-     (long) get_frame_register_unsigned (frame, SSR_REGNUM),
-     (long) get_frame_register_unsigned (frame, SPC_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPUL_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPSCR_REGNUM));
-
-  printf_filtered
-    ("R0-R7    %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 0),
-     (long) get_frame_register_unsigned (frame, 1),
-     (long) get_frame_register_unsigned (frame, 2),
-     (long) get_frame_register_unsigned (frame, 3),
-     (long) get_frame_register_unsigned (frame, 4),
-     (long) get_frame_register_unsigned (frame, 5),
-     (long) get_frame_register_unsigned (frame, 6),
-     (long) get_frame_register_unsigned (frame, 7));
-  printf_filtered
-    ("R8-R15   %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 8),
-     (long) get_frame_register_unsigned (frame, 9),
-     (long) get_frame_register_unsigned (frame, 10),
-     (long) get_frame_register_unsigned (frame, 11),
-     (long) get_frame_register_unsigned (frame, 12),
-     (long) get_frame_register_unsigned (frame, 13),
-     (long) get_frame_register_unsigned (frame, 14),
-     (long) get_frame_register_unsigned (frame, 15));
-
-  printf_filtered
-    (pr ? "DR0-DR6  %08lx%08lx  %08lx%08lx  %08lx%08lx  %08lx%08lx\n"
-	: "FP0-FP7  %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 0),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 1),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 2),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 3),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 4),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 5),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 6),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 7));
-  printf_filtered
-    (pr ? "DR8-DR14 %08lx%08lx  %08lx%08lx  %08lx%08lx  %08lx%08lx\n"
-	: "FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 8),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 9),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 10),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 11),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 12),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 13),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 14),
-     (long) get_frame_register_unsigned
-	      (frame, gdbarch_fp0_regnum (gdbarch) + 15));
-}
-
-static void
-sh4_nofpu_show_regs (struct frame_info *frame)
-{
-  printf_filtered
-    ("      PC %s       SR %08lx       PR %08lx     MACH %08lx\n",
-     phex (get_frame_register_unsigned (frame,
-					gdbarch_pc_regnum
-					  (get_frame_arch (frame))), 4),
-     (long) get_frame_register_unsigned (frame, SR_REGNUM),
-     (long) get_frame_register_unsigned (frame, PR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACH_REGNUM));
-
-  printf_filtered
-    ("     GBR %08lx      VBR %08lx                       MACL %08lx\n",
-     (long) get_frame_register_unsigned (frame, GBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, VBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACL_REGNUM));
-  printf_filtered
-    ("     SSR %08lx      SPC %08lx     FPUL %08lx    FPSCR %08lx\n",
-     (long) get_frame_register_unsigned (frame, SSR_REGNUM),
-     (long) get_frame_register_unsigned (frame, SPC_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPUL_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPSCR_REGNUM));
-
-  printf_filtered
-    ("R0-R7    %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 0),
-     (long) get_frame_register_unsigned (frame, 1),
-     (long) get_frame_register_unsigned (frame, 2),
-     (long) get_frame_register_unsigned (frame, 3),
-     (long) get_frame_register_unsigned (frame, 4),
-     (long) get_frame_register_unsigned (frame, 5),
-     (long) get_frame_register_unsigned (frame, 6),
-     (long) get_frame_register_unsigned (frame, 7));
-  printf_filtered
-    ("R8-R15   %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 8),
-     (long) get_frame_register_unsigned (frame, 9),
-     (long) get_frame_register_unsigned (frame, 10),
-     (long) get_frame_register_unsigned (frame, 11),
-     (long) get_frame_register_unsigned (frame, 12),
-     (long) get_frame_register_unsigned (frame, 13),
-     (long) get_frame_register_unsigned (frame, 14),
-     (long) get_frame_register_unsigned (frame, 15));
-}
-
-static void
-sh_dsp_show_regs (struct frame_info *frame)
-{
-  printf_filtered
-    ("      PC %s       SR %08lx       PR %08lx     MACH %08lx\n",
-     phex (get_frame_register_unsigned (frame,
-					gdbarch_pc_regnum
-					  (get_frame_arch (frame))), 4),
-     (long) get_frame_register_unsigned (frame, SR_REGNUM),
-     (long) get_frame_register_unsigned (frame, PR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACH_REGNUM));
-
-  printf_filtered
-    ("     GBR %08lx      VBR %08lx      DSR %08lx     MACL %08lx\n",
-     (long) get_frame_register_unsigned (frame, GBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, VBR_REGNUM),
-     (long) get_frame_register_unsigned (frame, DSR_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACL_REGNUM));
-
-  printf_filtered
-    ("R0-R7    %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 0),
-     (long) get_frame_register_unsigned (frame, 1),
-     (long) get_frame_register_unsigned (frame, 2),
-     (long) get_frame_register_unsigned (frame, 3),
-     (long) get_frame_register_unsigned (frame, 4),
-     (long) get_frame_register_unsigned (frame, 5),
-     (long) get_frame_register_unsigned (frame, 6),
-     (long) get_frame_register_unsigned (frame, 7));
-  printf_filtered
-    ("R8-R15   %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-     (long) get_frame_register_unsigned (frame, 8),
-     (long) get_frame_register_unsigned (frame, 9),
-     (long) get_frame_register_unsigned (frame, 10),
-     (long) get_frame_register_unsigned (frame, 11),
-     (long) get_frame_register_unsigned (frame, 12),
-     (long) get_frame_register_unsigned (frame, 13),
-     (long) get_frame_register_unsigned (frame, 14),
-     (long) get_frame_register_unsigned (frame, 15));
-
-  printf_filtered
-    ("A0G=%02lx A0=%08lx M0=%08lx X0=%08lx Y0=%08lx RS=%08lx MOD=%08lx\n",
-     (long) get_frame_register_unsigned (frame, A0G_REGNUM) & 0xff,
-     (long) get_frame_register_unsigned (frame, A0_REGNUM),
-     (long) get_frame_register_unsigned (frame, M0_REGNUM),
-     (long) get_frame_register_unsigned (frame, X0_REGNUM),
-     (long) get_frame_register_unsigned (frame, Y0_REGNUM),
-     (long) get_frame_register_unsigned (frame, RS_REGNUM),
-     (long) get_frame_register_unsigned (frame, MOD_REGNUM));
-  printf_filtered ("A1G=%02lx A1=%08lx M1=%08lx X1=%08lx Y1=%08lx RE=%08lx\n",
-     (long) get_frame_register_unsigned (frame, A1G_REGNUM) & 0xff,
-     (long) get_frame_register_unsigned (frame, A1_REGNUM),
-     (long) get_frame_register_unsigned (frame, M1_REGNUM),
-     (long) get_frame_register_unsigned (frame, X1_REGNUM),
-     (long) get_frame_register_unsigned (frame, Y1_REGNUM),
-     (long) get_frame_register_unsigned (frame, RE_REGNUM));
-}
-
-static void
-sh_show_regs_command (char *args, int from_tty)
-{
-  if (sh_show_regs)
-    (*sh_show_regs) (get_current_frame ());
-}
-
 static struct type *
 sh_sh2a_register_type (struct gdbarch *gdbarch, int reg_nr)
 {
@@ -2563,7 +1864,16 @@ sh_frame_cache (struct frame_info *this_frame, void **this_cache)
   if (cache->pc != 0)
     {
       ULONGEST fpscr;
-      fpscr = get_frame_register_unsigned (this_frame, FPSCR_REGNUM);
+
+      /* Check for the existence of the FPSCR register.	 If it exists,
+	 fetch its value for use in prologue analysis.	Passing a zero
+	 value is the best choice for architecture variants upon which
+	 there's no FPSCR register.  */
+      if (gdbarch_register_reggroup_p (gdbarch, FPSCR_REGNUM, all_reggroup))
+	fpscr = get_frame_register_unsigned (this_frame, FPSCR_REGNUM);
+      else
+	fpscr = 0;
+
       sh_analyze_prologue (gdbarch, cache->pc, current_pc, cache, fpscr);
     }
 
@@ -2677,6 +1987,57 @@ static const struct frame_base sh_frame_base = {
   sh_frame_base_address
 };
 
+static struct sh_frame_cache *
+sh_make_stub_cache (struct frame_info *this_frame)
+{
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
+  struct sh_frame_cache *cache;
+
+  cache = sh_alloc_frame_cache ();
+
+  cache->saved_sp
+    = get_frame_register_unsigned (this_frame, gdbarch_sp_regnum (gdbarch));
+
+  return cache;
+}
+
+static void
+sh_stub_this_id (struct frame_info *this_frame, void **this_cache,
+                 struct frame_id *this_id)
+{
+  struct sh_frame_cache *cache;
+
+  if (*this_cache == NULL)
+    *this_cache = sh_make_stub_cache (this_frame);
+  cache = *this_cache;
+
+  *this_id = frame_id_build (cache->saved_sp, get_frame_pc (this_frame));
+}
+
+static int
+sh_stub_unwind_sniffer (const struct frame_unwind *self,
+                        struct frame_info *this_frame,
+                        void **this_prologue_cache)
+{
+  CORE_ADDR addr_in_block;
+
+  addr_in_block = get_frame_address_in_block (this_frame);
+  if (in_plt_section (addr_in_block, NULL))
+    return 1;
+
+  return 0;
+}
+
+static const struct frame_unwind sh_stub_unwind =
+{
+  NORMAL_FRAME,
+  default_frame_unwind_stop_reason,
+  sh_stub_this_id,
+  sh_frame_prev_register,
+  NULL,
+  sh_stub_unwind_sniffer
+};
+
 /* The epilogue is defined here as the area at the end of a function,
    either on the `ret' instruction itself or after an instruction which
    destroys the function's stack frame.  */
@@ -2848,6 +2209,17 @@ sh_regset_from_core_section (struct gdbarch *gdbarch, const char *sect_name,
 
   return NULL;
 }
+
+/* This is the implementation of gdbarch method
+   return_in_first_hidden_param_p.  */
+
+static int
+sh_return_in_first_hidden_param_p (struct gdbarch *gdbarch,
+				     struct type *type)
+{
+  return 0;
+}
+
 

 
 static struct gdbarch *
@@ -2856,56 +2228,9 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   struct gdbarch *gdbarch;
   struct gdbarch_tdep *tdep;
 
-  sh_show_regs = sh_generic_show_regs;
-  switch (info.bfd_arch_info->mach)
-    {
-    case bfd_mach_sh2e:
-      sh_show_regs = sh2e_show_regs;
-      break;
-    case bfd_mach_sh2a:
-      sh_show_regs = sh2a_show_regs;
-      break;
-    case bfd_mach_sh2a_nofpu:
-      sh_show_regs = sh2a_nofpu_show_regs;
-      break;
-    case bfd_mach_sh_dsp:
-      sh_show_regs = sh_dsp_show_regs;
-      break;
-
-    case bfd_mach_sh3:
-    case bfd_mach_sh3_nommu:
-    case bfd_mach_sh2a_nofpu_or_sh3_nommu:
-      sh_show_regs = sh3_show_regs;
-      break;
-
-    case bfd_mach_sh3e:
-    case bfd_mach_sh2a_or_sh3e:
-      sh_show_regs = sh3e_show_regs;
-      break;
-
-    case bfd_mach_sh3_dsp:
-    case bfd_mach_sh4al_dsp:
-      sh_show_regs = sh3_dsp_show_regs;
-      break;
-
-    case bfd_mach_sh4:
-    case bfd_mach_sh4a:
-    case bfd_mach_sh2a_or_sh4:
-      sh_show_regs = sh4_show_regs;
-      break;
-
-    case bfd_mach_sh4_nofpu:
-    case bfd_mach_sh4_nommu_nofpu:
-    case bfd_mach_sh4a_nofpu:
-    case bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu:
-      sh_show_regs = sh4_nofpu_show_regs;
-      break;
-
-    case bfd_mach_sh5:
-      sh_show_regs = sh64_show_regs;
-      /* SH5 is handled entirely in sh64-tdep.c.  */
-      return sh64_gdbarch_init (info, arches);
-    }
+  /* SH5 is handled entirely in sh64-tdep.c.  */
+  if (info.bfd_arch_info->mach == bfd_mach_sh5)
+    return sh64_gdbarch_init (info, arches);
 
   /* If there is already a candidate, use it.  */
   arches = gdbarch_list_lookup_by_info (arches, &info);
@@ -2946,6 +2271,8 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
 
   set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call_nofpu);
+  set_gdbarch_return_in_first_hidden_param_p (gdbarch,
+					      sh_return_in_first_hidden_param_p);
 
   set_gdbarch_believe_pcc_promotion (gdbarch, 1);
 
@@ -3066,6 +2393,7 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   gdbarch_init_osabi (info, gdbarch);
 
   dwarf2_append_unwinders (gdbarch);
+  frame_unwind_append_unwinder (gdbarch, &sh_stub_unwind);
   frame_unwind_append_unwinder (gdbarch, &sh_frame_unwind);
 
   return gdbarch;
@@ -3094,8 +2422,12 @@ _initialize_sh_tdep (void)
 
   gdbarch_register (bfd_arch_sh, sh_gdbarch_init, NULL);
 
-  add_com ("regs", class_vars, sh_show_regs_command, _("Print all registers"));
-  
+  /* We can't use an alias here because 'info registers' has not yet been
+     registered.  */
+  c = add_com ("regs", class_vars, all_registers_info,
+               _("Print all registers"));
+  deprecate_cmd (c, "info all-registers");
+
   add_prefix_cmd ("sh", no_class, set_sh_command, "SH specific commands.",
                   &setshcmdlist, "set sh ", 0, &setlist);
   add_prefix_cmd ("sh", no_class, show_sh_command, "SH specific commands.",
diff --git a/gdb/sh-tdep.h b/gdb/sh-tdep.h
index feec59a..2ffcfb9 100644
--- a/gdb/sh-tdep.h
+++ b/gdb/sh-tdep.h
@@ -82,9 +82,6 @@ enum
     FV_LAST_REGNUM = 79
   };
 
-extern gdbarch_init_ftype sh64_gdbarch_init;
-extern void sh64_show_regs (struct frame_info *);
-
 /* This structure describes a register in a core-file.  */
 struct sh_corefile_regmap
 {
diff --git a/gdb/sh64-tdep.c b/gdb/sh64-tdep.c
index 96ac0b9..4e6f262 100644
--- a/gdb/sh64-tdep.c
+++ b/gdb/sh64-tdep.c
@@ -46,6 +46,7 @@
 /* Register numbers shared with the simulator.  */
 #include "gdb/sim-sh.h"
 #include "language.h"
+#include "sh64-tdep.h"
 
 /* Information that is dependent on the processor variant.  */
 enum sh_abi
@@ -857,7 +858,6 @@ sh64_analyze_prologue (struct gdbarch *gdbarch,
 		       CORE_ADDR func_pc,
 		       CORE_ADDR current_pc)
 {
-  int reg_nr;
   int pc;
   int opc;
   int insn;
@@ -1069,7 +1069,6 @@ sh64_push_dummy_call (struct gdbarch *gdbarch,
   CORE_ADDR regval;
   char *val;
   char valbuf[8];
-  char valbuf_tmp[8];
   int len;
   int argreg_size;
   int fp_args[12];
@@ -1327,7 +1326,7 @@ sh64_store_return_value (struct type *type, struct regcache *regcache,
 }
 
 static enum return_value_convention
-sh64_return_value (struct gdbarch *gdbarch, struct type *func_type,
+sh64_return_value (struct gdbarch *gdbarch, struct value *function,
 		   struct type *type, struct regcache *regcache,
 		   gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -1340,125 +1339,6 @@ sh64_return_value (struct gdbarch *gdbarch, struct type *func_type,
   return RETURN_VALUE_REGISTER_CONVENTION;
 }
 
-static void
-sh64_show_media_regs (struct frame_info *frame)
-{
-  struct gdbarch *gdbarch = get_frame_arch (frame);
-  int i;
-
-  printf_filtered
-    ("PC=%s SR=%s\n",
-     phex (get_frame_register_unsigned (frame,
-					gdbarch_pc_regnum (gdbarch)), 8),
-     phex (get_frame_register_unsigned (frame, SR_REGNUM), 8));
-
-  printf_filtered
-    ("SSR=%s SPC=%s\n",
-     phex (get_frame_register_unsigned (frame, SSR_REGNUM), 8),
-     phex (get_frame_register_unsigned (frame, SPC_REGNUM), 8));
-  printf_filtered
-    ("FPSCR=%s\n ",
-     phex (get_frame_register_unsigned (frame, FPSCR_REGNUM), 8));
-
-  for (i = 0; i < 64; i = i + 4)
-    printf_filtered
-      ("\nR%d-R%d  %s %s %s %s\n",
-       i, i + 3,
-      phex (get_frame_register_unsigned (frame, i + 0), 8),
-      phex (get_frame_register_unsigned (frame, i + 1), 8),
-      phex (get_frame_register_unsigned (frame, i + 2), 8),
-      phex (get_frame_register_unsigned (frame, i + 3), 8));
-
-  printf_filtered ("\n");
-  
-  for (i = 0; i < 64; i = i + 8)
-    printf_filtered
-      ("FR%d-FR%d  %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-       i, i + 7,
-       (long) get_frame_register_unsigned
-	        (frame, gdbarch_fp0_regnum (gdbarch) + i + 0),
-       (long) get_frame_register_unsigned
-	        (frame, gdbarch_fp0_regnum (gdbarch) + i + 1),
-       (long) get_frame_register_unsigned
-	        (frame, gdbarch_fp0_regnum (gdbarch) + i + 2),
-       (long) get_frame_register_unsigned
-	        (frame, gdbarch_fp0_regnum (gdbarch) + i + 3),
-       (long) get_frame_register_unsigned
-	        (frame, gdbarch_fp0_regnum (gdbarch) + i + 4),
-       (long) get_frame_register_unsigned
-	        (frame, gdbarch_fp0_regnum (gdbarch) + i + 5),
-       (long) get_frame_register_unsigned
-	        (frame, gdbarch_fp0_regnum (gdbarch) + i + 6),
-       (long) get_frame_register_unsigned
-	        (frame, gdbarch_fp0_regnum (gdbarch) + i + 7));
-}
-
-static void
-sh64_show_compact_regs (struct frame_info *frame)
-{
-  struct gdbarch *gdbarch = get_frame_arch (frame);
-  int i;
-
-  printf_filtered
-    ("PC=%s\n",
-     phex (get_frame_register_unsigned (frame, PC_C_REGNUM), 8));
-
-  printf_filtered
-    ("GBR=%08lx MACH=%08lx MACL=%08lx PR=%08lx T=%08lx\n",
-     (long) get_frame_register_unsigned (frame, GBR_C_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACH_C_REGNUM),
-     (long) get_frame_register_unsigned (frame, MACL_C_REGNUM),
-     (long) get_frame_register_unsigned (frame, PR_C_REGNUM),
-     (long) get_frame_register_unsigned (frame, T_C_REGNUM));
-  printf_filtered
-    ("FPSCR=%08lx FPUL=%08lx\n",
-     (long) get_frame_register_unsigned (frame, FPSCR_C_REGNUM),
-     (long) get_frame_register_unsigned (frame, FPUL_C_REGNUM));
-
-  for (i = 0; i < 16; i = i + 4)
-    printf_filtered
-      ("\nR%d-R%d  %08lx %08lx %08lx %08lx\n",
-       i, i + 3,
-       (long) get_frame_register_unsigned (frame, i + 0),
-       (long) get_frame_register_unsigned (frame, i + 1),
-       (long) get_frame_register_unsigned (frame, i + 2),
-       (long) get_frame_register_unsigned (frame, i + 3));
-
-  printf_filtered ("\n");
-  
-  for (i = 0; i < 16; i = i + 8)
-    printf_filtered
-      ("FR%d-FR%d  %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
-       i, i + 7,
-       (long) get_frame_register_unsigned
-		(frame, gdbarch_fp0_regnum (gdbarch) + i + 0),
-       (long) get_frame_register_unsigned
-		(frame, gdbarch_fp0_regnum (gdbarch) + i + 1),
-       (long) get_frame_register_unsigned
-		(frame, gdbarch_fp0_regnum (gdbarch) + i + 2),
-       (long) get_frame_register_unsigned
-		(frame, gdbarch_fp0_regnum (gdbarch) + i + 3),
-       (long) get_frame_register_unsigned
-		(frame, gdbarch_fp0_regnum (gdbarch) + i + 4),
-       (long) get_frame_register_unsigned
-		(frame, gdbarch_fp0_regnum (gdbarch) + i + 5),
-       (long) get_frame_register_unsigned
-		(frame, gdbarch_fp0_regnum (gdbarch) + i + 6),
-       (long) get_frame_register_unsigned
-		(frame, gdbarch_fp0_regnum (gdbarch) + i + 7));
-}
-
-/* FIXME!!! This only shows the registers for shmedia, excluding the
-   pseudo registers.  */
-void
-sh64_show_regs (struct frame_info *frame)
-{
-  if (pc_is_isa32 (get_frame_pc (frame)))
-    sh64_show_media_regs (frame);
-  else
-    sh64_show_compact_regs (frame);
-}
-
 /* *INDENT-OFF* */
 /*
     SH MEDIA MODE (ISA 32)
diff --git a/gdb/sh64-tdep.h b/gdb/sh64-tdep.h
new file mode 100644
index 0000000..b0d4e0c
--- /dev/null
+++ b/gdb/sh64-tdep.h
@@ -0,0 +1,24 @@
+/* Target-dependent definitions for Renesas Super-H, for GDB.
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef SH64_TDEP_H
+#define SH64_TDEP_H
+
+extern gdbarch_init_ftype sh64_gdbarch_init;
+
+#endif /* SH64_TDEP_H */
diff --git a/gdb/skip.c b/gdb/skip.c
index 637f4e0..8e19652 100644
--- a/gdb/skip.c
+++ b/gdb/skip.c
@@ -67,7 +67,7 @@ static void skip_file_command (char *arg, int from_tty);
 static void skip_info (char *arg, int from_tty);
 
 static void add_skiplist_entry (struct skiplist_entry *e);
-static void skip_function_pc (CORE_ADDR pc, char *name,
+static void skip_function_pc (CORE_ADDR pc, const char *name,
 			      struct gdbarch *arch,
 			      int pending);
 
@@ -133,7 +133,7 @@ static void
 skip_function_command (char *arg, int from_tty)
 {
   CORE_ADDR func_pc;
-  char *name = NULL;
+  const char *name = NULL;
 
   /* Default to the current function if no argument is given.  */
   if (arg == 0)
@@ -155,9 +155,6 @@ skip_function_command (char *arg, int from_tty)
       /* Decode arg.  We set funfirstline=1 so decode_line_1 will give us the
 	 first line of the function specified, if it can, and so that we'll
 	 reject variable names and the like.  */
-
-      int i;
-      int pending = 0;
       char *orig_arg = arg; /* decode_line_1 modifies the arg pointer.  */
       volatile struct gdb_exception decode_exception;
       struct symtabs_and_lines sals = { 0 };
@@ -397,7 +394,7 @@ skip_delete_command (char *arg, int from_tty)
    function name and add it to the list.  */
 
 static void
-skip_function_pc (CORE_ADDR pc, char *name, struct gdbarch *arch,
+skip_function_pc (CORE_ADDR pc, const char *name, struct gdbarch *arch,
 		  int pending)
 {
   struct skiplist_entry *e = XZALLOC (struct skiplist_entry);
@@ -524,7 +521,7 @@ skip_re_set (void)
 	      CORE_ADDR pc = sal.pc;
 	      CORE_ADDR func_start = 0;
 	      struct gdbarch *arch = get_sal_arch (sal);
-              char *func_name;
+              const char *func_name;
 
 	      if (find_pc_partial_function (pc, &func_name, &func_start, 0))
 		{
@@ -542,6 +539,9 @@ skip_re_set (void)
     }
 }
 
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_step_skip;
+
 void
 _initialize_step_skip (void)
 {
diff --git a/gdb/sol-thread.c b/gdb/sol-thread.c
index 3e5d9db..3577b5a 100644
--- a/gdb/sol-thread.c
+++ b/gdb/sol-thread.c
@@ -69,8 +69,6 @@
 
 struct target_ops sol_thread_ops;
 
-extern char *procfs_pid_to_str (struct target_ops *ops, ptid_t ptid);
-
 /* Prototypes for supply_gregset etc.  */
 #include "gregset.h"
 
@@ -347,7 +345,7 @@ sol_thread_detach (struct target_ops *ops, char *args, int from_tty)
 
 static void
 sol_thread_resume (struct target_ops *ops,
-		   ptid_t ptid, int step, enum target_signal signo)
+		   ptid_t ptid, int step, enum gdb_signal signo)
 {
   struct cleanup *old_chain;
   struct target_ops *beneath = find_target_beneath (ops);
@@ -1134,7 +1132,7 @@ ps_lgetLDT (gdb_ps_prochandle_t ph, lwpid_t lwpid,
 
 /* Convert PTID to printable form.  */
 
-char *
+static char *
 solaris_pid_to_str (struct target_ops *ops, ptid_t ptid)
 {
   static char buf[100];
@@ -1342,6 +1340,9 @@ init_sol_thread_ops (void)
   sol_thread_ops.to_magic = OPS_MAGIC;
 }
 
+/* Silence -Wmissing-prototypes.  */
+extern void _initialize_sol_thread (void);
+
 void
 _initialize_sol_thread (void)
 {
diff --git a/gdb/solib-darwin.c b/gdb/solib-darwin.c
index ddfd48b..d52fb46 100644
--- a/gdb/solib-darwin.c
+++ b/gdb/solib-darwin.c
@@ -41,6 +41,7 @@
 #include "auxv.h"
 #include "exceptions.h"
 #include "mach-o.h"
+#include "mach-o/external.h"
 
 struct gdb_dyld_image_info
 {
@@ -70,25 +71,59 @@ struct gdb_dyld_all_image_infos
 #define DYLD_VERSION_MIN 1
 #define DYLD_VERSION_MAX 12
 
-/* Address of structure dyld_all_image_infos in inferior.  */
-static CORE_ADDR dyld_all_image_addr;
+/* Per PSPACE specific data.  */
+struct darwin_info
+{
+  /* Address of structure dyld_all_image_infos in inferior.  */
+  CORE_ADDR all_image_addr;
+
+  /* Gdb copy of dyld_all_info_infos.  */
+  struct gdb_dyld_all_image_infos all_image;
+};
+
+/* Per-program-space data key.  */
+static const struct program_space_data *solib_darwin_pspace_data;
+
+static void
+darwin_pspace_data_cleanup (struct program_space *pspace, void *arg)
+{
+  struct darwin_info *info;
+
+  info = program_space_data (pspace, solib_darwin_pspace_data);
+  xfree (info);
+}
+
+/* Get the current darwin data.  If none is found yet, add it now.  This
+   function always returns a valid object.  */
+
+static struct darwin_info *
+get_darwin_info (void)
+{
+  struct darwin_info *info;
 
-/* Gdb copy of dyld_all_info_infos.  */
-static struct gdb_dyld_all_image_infos dyld_all_image;
+  info = program_space_data (current_program_space, solib_darwin_pspace_data);
+  if (info != NULL)
+    return info;
+
+  info = XZALLOC (struct darwin_info);
+  set_program_space_data (current_program_space,
+			  solib_darwin_pspace_data, info);
+  return info;
+}
 
 /* Return non-zero if the version in dyld_all_image is known.  */
 
 static int
-darwin_dyld_version_ok (void)
+darwin_dyld_version_ok (const struct darwin_info *info)
 {
-  return dyld_all_image.version >= DYLD_VERSION_MIN
-    && dyld_all_image.version <= DYLD_VERSION_MAX;
+  return info->all_image.version >= DYLD_VERSION_MIN
+    && info->all_image.version <= DYLD_VERSION_MAX;
 }
 
 /* Read dyld_all_image from inferior.  */
 
 static void
-darwin_load_image_infos (void)
+darwin_load_image_infos (struct darwin_info *info)
 {
   gdb_byte buf[24];
   enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
@@ -96,27 +131,27 @@ darwin_load_image_infos (void)
   int len;
 
   /* If the structure address is not known, don't continue.  */
-  if (dyld_all_image_addr == 0)
+  if (info->all_image_addr == 0)
     return;
 
   /* The structure has 4 fields: version (4 bytes), count (4 bytes),
      info (pointer) and notifier (pointer).  */
   len = 4 + 4 + 2 * ptr_type->length;
   gdb_assert (len <= sizeof (buf));
-  memset (&dyld_all_image, 0, sizeof (dyld_all_image));
+  memset (&info->all_image, 0, sizeof (info->all_image));
 
   /* Read structure raw bytes from target.  */
-  if (target_read_memory (dyld_all_image_addr, buf, len))
+  if (target_read_memory (info->all_image_addr, buf, len))
     return;
 
   /* Extract the fields.  */
-  dyld_all_image.version = extract_unsigned_integer (buf, 4, byte_order);
-  if (!darwin_dyld_version_ok ())
+  info->all_image.version = extract_unsigned_integer (buf, 4, byte_order);
+  if (!darwin_dyld_version_ok (info))
     return;
 
-  dyld_all_image.count = extract_unsigned_integer (buf + 4, 4, byte_order);
-  dyld_all_image.info = extract_typed_address (buf + 8, ptr_type);
-  dyld_all_image.notifier = extract_typed_address
+  info->all_image.count = extract_unsigned_integer (buf + 4, 4, byte_order);
+  info->all_image.info = extract_typed_address (buf + 8, ptr_type);
+  info->all_image.notifier = extract_typed_address
     (buf + 8 + ptr_type->length, ptr_type);
 }
 
@@ -210,29 +245,34 @@ static struct so_list *
 darwin_current_sos (void)
 {
   struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
+  enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
   int ptr_len = TYPE_LENGTH (ptr_type);
   unsigned int image_info_size;
-  CORE_ADDR lm;
   struct so_list *head = NULL;
   struct so_list *tail = NULL;
   int i;
+  struct darwin_info *info = get_darwin_info ();
 
   /* Be sure image infos are loaded.  */
-  darwin_load_image_infos ();
+  darwin_load_image_infos (info);
 
-  if (!darwin_dyld_version_ok ())
+  if (!darwin_dyld_version_ok (info))
     return NULL;
 
   image_info_size = ptr_len * 3;
 
   /* Read infos for each solib.
-     This first entry is ignored as this is the executable itself.  */
-  for (i = 1; i < dyld_all_image.count; i++)
+     The first entry was rumored to be the executable itself, but this is not
+     true when a large number of shared libraries are used (table expanded ?).
+     We now check all entries, but discard executable images.  */
+  for (i = 0; i < info->all_image.count; i++)
     {
-      CORE_ADDR info = dyld_all_image.info + i * image_info_size;
+      CORE_ADDR iinfo = info->all_image.info + i * image_info_size;
       char buf[image_info_size];
       CORE_ADDR load_addr;
       CORE_ADDR path_addr;
+      struct mach_o_header_external hdr;
+      unsigned long hdr_val;
       char *file_path;
       int errcode;
       struct darwin_so_list *dnew;
@@ -240,12 +280,26 @@ darwin_current_sos (void)
       struct cleanup *old_chain;
 
       /* Read image info from inferior.  */
-      if (target_read_memory (info, buf, image_info_size))
+      if (target_read_memory (iinfo, buf, image_info_size))
 	break;
 
       load_addr = extract_typed_address (buf, ptr_type);
       path_addr = extract_typed_address (buf + ptr_len, ptr_type);
 
+      /* Read Mach-O header from memory.  */
+      if (target_read_memory (load_addr, (char *) &hdr, sizeof (hdr) - 4))
+	break;
+      /* Discard wrong magic numbers.  Shouldn't happen.  */
+      hdr_val = extract_unsigned_integer
+        (hdr.magic, sizeof (hdr.magic), byte_order);
+      if (hdr_val != BFD_MACH_O_MH_MAGIC && hdr_val != BFD_MACH_O_MH_MAGIC_64)
+        continue;
+      /* Discard executable.  Should happen only once.  */
+      hdr_val = extract_unsigned_integer
+        (hdr.filetype, sizeof (hdr.filetype), byte_order);
+      if (hdr_val == BFD_MACH_O_MH_EXECUTE)
+        continue;
+
       target_read_string (path_addr, &file_path,
 			  SO_NAME_MAX_PATH_SIZE - 1, &errcode);
       if (errcode)
@@ -279,7 +333,7 @@ darwin_current_sos (void)
 /* Return 1 if PC lies in the dynamic symbol resolution code of the
    run time loader.  */
 
-int
+static int
 darwin_in_dynsym_resolve_code (CORE_ADDR pc)
 {
   return 0;
@@ -297,7 +351,7 @@ darwin_special_symbol_handling (void)
    current PC is at the entry of the dynamic linker.  */
 
 static void
-darwin_solib_get_all_image_info_addr_at_init (void)
+darwin_solib_get_all_image_info_addr_at_init (struct darwin_info *info)
 {
   gdb_byte *interp_name;
   CORE_ADDR load_addr = 0;
@@ -338,22 +392,22 @@ darwin_solib_get_all_image_info_addr_at_init (void)
                - bfd_get_start_address (dyld_bfd));
 
   /* Now try to set a breakpoint in the dynamic linker.  */
-  dyld_all_image_addr =
+  info->all_image_addr =
     lookup_symbol_from_bfd (dyld_bfd, "_dyld_all_image_infos");
 
   bfd_close (dyld_bfd);
 
-  if (dyld_all_image_addr == 0)
+  if (info->all_image_addr == 0)
     return;
 
-  dyld_all_image_addr += load_addr;
+  info->all_image_addr += load_addr;
 }
 
 /* Extract dyld_all_image_addr reading it from 
    TARGET_OBJECT_DARWIN_DYLD_INFO.  */
 
 static void
-darwin_solib_read_all_image_info_addr (void)
+darwin_solib_read_all_image_info_addr (struct darwin_info *info)
 {
   gdb_byte buf[8 + 8 + 4];
   LONGEST len;
@@ -364,7 +418,7 @@ darwin_solib_read_all_image_info_addr (void)
   if (len != sizeof (buf))
     return;
 
-  dyld_all_image_addr = extract_unsigned_integer (buf, 8, byte_order);
+  info->all_image_addr = extract_unsigned_integer (buf, 8, byte_order);
 }
 
 /* Shared library startup support.  See documentation in solib-svr4.c.  */
@@ -372,27 +426,31 @@ darwin_solib_read_all_image_info_addr (void)
 static void
 darwin_solib_create_inferior_hook (int from_tty)
 {
-  dyld_all_image_addr = 0;
+  struct darwin_info *info = get_darwin_info ();
 
-  darwin_solib_read_all_image_info_addr ();
+  info->all_image_addr = 0;
 
-  if (dyld_all_image_addr == 0)
-    darwin_solib_get_all_image_info_addr_at_init ();
+  darwin_solib_read_all_image_info_addr (info);
 
-  if (dyld_all_image_addr == 0)
+  if (info->all_image_addr == 0)
+    darwin_solib_get_all_image_info_addr_at_init (info);
+
+  if (info->all_image_addr == 0)
     return;
 
-  darwin_load_image_infos ();
+  darwin_load_image_infos (info);
 
-  if (darwin_dyld_version_ok ())
-    create_solib_event_breakpoint (target_gdbarch, dyld_all_image.notifier);
+  if (darwin_dyld_version_ok (info))
+    create_solib_event_breakpoint (target_gdbarch, info->all_image.notifier);
 }
 
 static void
 darwin_clear_solib (void)
 {
-  dyld_all_image_addr = 0;
-  dyld_all_image.version = 0;
+  struct darwin_info *info = get_darwin_info ();
+
+  info->all_image_addr = 0;
+  info->all_image.version = 0;
 }
 
 static void
@@ -456,14 +514,26 @@ darwin_bfd_open (char *pathname)
       error (_("`%s': not a shared-library: %s"),
 	     found_pathname, bfd_errmsg (bfd_get_error ()));
     }
+
+  /* Make sure that the filename is malloc'ed.  The current filename
+     for fat-binaries BFDs is a name that was generated by BFD, usually
+     a static string containing the name of the architecture.  */
+  res->filename = xstrdup (pathname);
+
   return res;
 }
 
 struct target_so_ops darwin_so_ops;
 
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_darwin_solib;
+
 void
 _initialize_darwin_solib (void)
 {
+  solib_darwin_pspace_data
+    = register_program_space_data_with_cleanup (darwin_pspace_data_cleanup);
+
   darwin_so_ops.relocate_section_addresses = darwin_relocate_section_addresses;
   darwin_so_ops.free_so = darwin_free_so;
   darwin_so_ops.clear_solib = darwin_clear_solib;
diff --git a/gdb/solib-dsbt.c b/gdb/solib-dsbt.c
index 7bbd49e..2500c1f 100644
--- a/gdb/solib-dsbt.c
+++ b/gdb/solib-dsbt.c
@@ -232,7 +232,7 @@ decode_loadmap (gdb_byte *buf)
   struct int_elf32_dsbt_loadmap *int_ldmbuf;
 
   int version, seg, nsegs;
-  int ext_ldmbuf_size, int_ldmbuf_size;
+  int int_ldmbuf_size;
 
   ext_ldmbuf = (struct ext_elf32_dsbt_loadmap *) buf;
 
@@ -841,8 +841,7 @@ enable_break2 (void)
       unsigned int interp_sect_size;
       gdb_byte *buf;
       bfd *tmp_bfd = NULL;
-      int status;
-      CORE_ADDR addr, interp_loadmap_addr;
+      CORE_ADDR addr;
       gdb_byte addr_buf[TIC6X_PTR_SIZE];
       struct int_elf32_dsbt_loadmap *ldm;
       volatile struct gdb_exception ex;
@@ -1029,8 +1028,6 @@ dsbt_special_symbol_handling (void)
 static void
 dsbt_relocate_main_executable (void)
 {
-  int status;
-  CORE_ADDR exec_addr, interp_addr;
   struct int_elf32_dsbt_loadmap *ldm;
   struct cleanup *old_chain;
   struct section_offsets *new_offsets;
diff --git a/gdb/solib-frv.c b/gdb/solib-frv.c
index f29822e..2f2c8b0 100644
--- a/gdb/solib-frv.c
+++ b/gdb/solib-frv.c
@@ -961,7 +961,7 @@ frv_fdpic_find_global_pointer (CORE_ADDR addr)
 
 /* Forward declarations for frv_fdpic_find_canonical_descriptor().  */
 static CORE_ADDR find_canonical_descriptor_in_load_object
-  (CORE_ADDR, CORE_ADDR, char *, bfd *, struct lm_info *);
+  (CORE_ADDR, CORE_ADDR, const char *, bfd *, struct lm_info *);
 
 /* Given a function entry point, attempt to find the canonical descriptor
    associated with that entry point.  Return 0 if no canonical descriptor
@@ -970,13 +970,11 @@ static CORE_ADDR find_canonical_descriptor_in_load_object
 CORE_ADDR
 frv_fdpic_find_canonical_descriptor (CORE_ADDR entry_point)
 {
-  char *name;
+  const char *name;
   CORE_ADDR addr;
   CORE_ADDR got_value;
   struct int_elf32_fdpic_loadmap *ldm = 0;
   struct symbol *sym;
-  int status;
-  CORE_ADDR exec_loadmap_addr;
 
   /* Fetch the corresponding global pointer for the entry point.  */
   got_value = frv_fdpic_find_global_pointer (entry_point);
@@ -1019,7 +1017,7 @@ frv_fdpic_find_canonical_descriptor (CORE_ADDR entry_point)
 
 static CORE_ADDR
 find_canonical_descriptor_in_load_object
-  (CORE_ADDR entry_point, CORE_ADDR got_value, char *name, bfd *abfd,
+  (CORE_ADDR entry_point, CORE_ADDR got_value, const char *name, bfd *abfd,
    struct lm_info *lm)
 {
   enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
diff --git a/gdb/solib-ia64-hpux.c b/gdb/solib-ia64-hpux.c
index 8a45d75..f349c4c 100644
--- a/gdb/solib-ia64-hpux.c
+++ b/gdb/solib-ia64-hpux.c
@@ -164,7 +164,7 @@ ia64_hpux_at_dld_breakpoint_1_p (ptid_t ptid)
 int
 ia64_hpux_at_dld_breakpoint_p (ptid_t ptid)
 {
-  struct gdb_exception e;
+  volatile struct gdb_exception e;
   ptid_t saved_ptid = inferior_ptid;
   int result = 0;
 
@@ -278,7 +278,7 @@ ia64_hpux_handle_dld_breakpoint_1 (ptid_t ptid)
 void
 ia64_hpux_handle_dld_breakpoint (ptid_t ptid)
 {
-  struct gdb_exception e;
+  volatile struct gdb_exception e;
   ptid_t saved_ptid = inferior_ptid;
 
   inferior_ptid = ptid;
diff --git a/gdb/solib-irix.c b/gdb/solib-irix.c
index 4c0a2e4..1cec282 100644
--- a/gdb/solib-irix.c
+++ b/gdb/solib-irix.c
@@ -419,14 +419,14 @@ irix_solib_create_inferior_hook (int from_tty)
   clear_proceed_status ();
 
   inf->control.stop_soon = STOP_QUIETLY;
-  tp->suspend.stop_signal = TARGET_SIGNAL_0;
+  tp->suspend.stop_signal = GDB_SIGNAL_0;
 
   do
     {
       target_resume (pid_to_ptid (-1), 0, tp->suspend.stop_signal);
       wait_for_inferior ();
     }
-  while (tp->suspend.stop_signal != TARGET_SIGNAL_TRAP);
+  while (tp->suspend.stop_signal != GDB_SIGNAL_TRAP);
 
   /* We are now either at the "mapping complete" breakpoint (or somewhere
      else, a condition we aren't prepared to deal with anyway), so adjust
diff --git a/gdb/solib-osf.c b/gdb/solib-osf.c
index 809114c..e2bb38d 100644
--- a/gdb/solib-osf.c
+++ b/gdb/solib-osf.c
@@ -342,13 +342,13 @@ osf_solib_create_inferior_hook (int from_tty)
   tp = inferior_thread ();
   clear_proceed_status ();
   inf->control.stop_soon = STOP_QUIETLY;
-  tp->suspend.stop_signal = TARGET_SIGNAL_0;
+  tp->suspend.stop_signal = GDB_SIGNAL_0;
   do
     {
       target_resume (minus_one_ptid, 0, tp->suspend.stop_signal);
       wait_for_inferior ();
     }
-  while (tp->suspend.stop_signal != TARGET_SIGNAL_TRAP);
+  while (tp->suspend.stop_signal != GDB_SIGNAL_TRAP);
 
   /*  solib_add will call reinit_frame_cache.
      But we are stopped in the runtime loader and we do not have symbols
diff --git a/gdb/solib-pa64.c b/gdb/solib-pa64.c
index c3a0b31..2b8d061 100644
--- a/gdb/solib-pa64.c
+++ b/gdb/solib-pa64.c
@@ -383,8 +383,8 @@ manpage for methods to privately map shared library text."));
 	 routine.  */
       load_addr = regcache_read_pc (get_current_regcache ())
 		  - tmp_bfd->start_address;
-      sym_addr = bfd_lookup_symbol_from_symtab (tmp_bfd, cmp_name,
-						"__dld_break");
+      sym_addr = gdb_bfd_lookup_symbol_from_symtab (tmp_bfd, cmp_name,
+						    "__dld_break");
       sym_addr = load_addr + sym_addr + 4;
       
       /* Create the shared library breakpoint.  */
diff --git a/gdb/solib-spu.c b/gdb/solib-spu.c
index a477212..b5454e7 100644
--- a/gdb/solib-spu.c
+++ b/gdb/solib-spu.c
@@ -19,6 +19,7 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
+#include "solib-spu.h"
 #include "gdbcore.h"
 #include "gdb_string.h"
 #include "gdb_assert.h"
@@ -87,7 +88,7 @@ spu_skip_standalone_loader (void)
 
       inferior_thread ()->control.in_infcall = 1; /* Suppress MI messages.  */
 
-      target_resume (inferior_ptid, 1, TARGET_SIGNAL_0);
+      target_resume (inferior_ptid, 1, GDB_SIGNAL_0);
       target_wait (minus_one_ptid, &ws, 0);
       set_executing (minus_one_ptid, 0);
 
@@ -541,6 +542,9 @@ spu_solib_loaded (struct so_list *so)
     }
 }
 
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_spu_solib;
+
 void
 _initialize_spu_solib (void)
 {
diff --git a/gdb/solib-sunos.c b/gdb/solib-sunos.c
index 172a492..b17ef8a 100644
--- a/gdb/solib-sunos.c
+++ b/gdb/solib-sunos.c
@@ -670,13 +670,13 @@ sunos_solib_create_inferior_hook (int from_tty)
   clear_proceed_status ();
 
   inf->control.stop_soon = STOP_QUIETLY;
-  tp->suspend.stop_signal = TARGET_SIGNAL_0;
+  tp->suspend.stop_signal = GDB_SIGNAL_0;
   do
     {
       target_resume (pid_to_ptid (-1), 0, tp->suspend.stop_signal);
       wait_for_inferior ();
     }
-  while (tp->suspend.stop_signal != TARGET_SIGNAL_TRAP);
+  while (tp->suspend.stop_signal != GDB_SIGNAL_TRAP);
   inf->control.stop_soon = NO_STOP_QUIETLY;
 
   /* We are now either at the "mapping complete" breakpoint (or somewhere
diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
index 69d3cb5..307e483 100644
--- a/gdb/solib-svr4.c
+++ b/gdb/solib-svr4.c
@@ -1260,6 +1260,14 @@ svr4_current_sos (void)
   int ignore_first;
   struct svr4_library_list library_list;
 
+  /* Fall back to manual examination of the target if the packet is not
+     supported or gdbserver failed to find DT_DEBUG.  gdb.server/solib-list.exp
+     tests a case where gdbserver cannot find the shared libraries list while
+     GDB itself is able to find it via SYMFILE_OBJFILE.
+
+     Unfortunately statically linked inferiors will also fall back through this
+     suboptimal code path.  */
+
   if (svr4_current_sos_via_xfer_libraries (&library_list))
     {
       if (library_list.main_lm)
@@ -1699,7 +1707,7 @@ enable_break (struct svr4_info *info, int from_tty)
 	}
     }
 
-  if (!current_inferior ()->attach_flag)
+  if (interp_name != NULL && !current_inferior ()->attach_flag)
     {
       for (bkpt_namep = bkpt_names; *bkpt_namep != NULL; bkpt_namep++)
 	{
@@ -2249,13 +2257,13 @@ svr4_solib_create_inferior_hook (int from_tty)
 
   clear_proceed_status ();
   inf->control.stop_soon = STOP_QUIETLY;
-  tp->suspend.stop_signal = TARGET_SIGNAL_0;
+  tp->suspend.stop_signal = GDB_SIGNAL_0;
   do
     {
       target_resume (pid_to_ptid (-1), 0, tp->suspend.stop_signal);
       wait_for_inferior ();
     }
-  while (tp->suspend.stop_signal != TARGET_SIGNAL_TRAP);
+  while (tp->suspend.stop_signal != GDB_SIGNAL_TRAP);
   inf->control.stop_soon = NO_STOP_QUIETLY;
 #endif /* defined(_SCO_DS) */
 }
diff --git a/gdb/solib.c b/gdb/solib.c
index f591785..90439ba 100644
--- a/gdb/solib.c
+++ b/gdb/solib.c
@@ -380,8 +380,6 @@ solib_bfd_fopen (char *pathname, int fd)
 
       if (abfd)
 	bfd_set_cacheable (abfd, 1);
-      else if (fd != -1)
-	close (fd);
     }
 
   if (!abfd)
@@ -592,6 +590,8 @@ solib_read_symbols (struct so_list *so, int flags)
     {
       volatile struct gdb_exception e;
 
+      flags |= current_inferior ()->symfile_flags;
+
       TRY_CATCH (e, RETURN_MASK_ERROR)
 	{
 	  struct section_addr_info *sap;
@@ -758,6 +758,9 @@ update_solib_list (int from_tty, struct target_ops *target)
 	     unloaded before we remove it from GDB's tables.  */
 	  observer_notify_solib_unloaded (gdb);
 
+	  VEC_safe_push (char_ptr, current_program_space->deleted_solibs,
+			 xstrdup (gdb->so_name));
+
 	  *gdb_link = gdb->next;
 
 	  /* Unless the user loaded it explicitly, free SO's objfile.  */
@@ -793,6 +796,7 @@ update_solib_list (int from_tty, struct target_ops *target)
 	  volatile struct gdb_exception e;
 
 	  i->pspace = current_program_space;
+	  VEC_safe_push (so_list_ptr, current_program_space->added_solibs, i);
 
 	  TRY_CATCH (e, RETURN_MASK_ERROR)
 	    {
diff --git a/gdb/solib.h b/gdb/solib.h
index 2c7f4d9..7a2ff84 100644
--- a/gdb/solib.h
+++ b/gdb/solib.h
@@ -86,9 +86,9 @@ extern CORE_ADDR gdb_bfd_lookup_symbol (bfd *abfd,
 
 /* Look up symbol from symbol table.  */
 
-extern CORE_ADDR bfd_lookup_symbol_from_symtab (bfd *abfd,
-						int (*match_sym) (asymbol *,
-								  void *),
-						void *data);
+extern CORE_ADDR gdb_bfd_lookup_symbol_from_symtab (bfd *abfd,
+						    int (*match_sym) (asymbol *,
+								      void *),
+						    void *data);
 
 #endif /* SOLIB_H */
diff --git a/gdb/somread.c b/gdb/somread.c
index e621cba..19a15e2 100644
--- a/gdb/somread.c
+++ b/gdb/somread.c
@@ -427,6 +427,7 @@ static const struct sym_fns som_sym_fns =
   default_symfile_segments,	/* Get segment information from a file.  */
   NULL,
   default_symfile_relocate,	/* Relocate a debug section.  */
+  NULL,				/* sym_get_probes */
   &psym_functions
 };
 
diff --git a/gdb/source.c b/gdb/source.c
index 909f252..0ff0782 100644
--- a/gdb/source.c
+++ b/gdb/source.c
@@ -243,7 +243,8 @@ select_source_symtab (struct symtab *s)
      if one exists.  */
   if (lookup_symbol (main_name (), 0, VAR_DOMAIN, 0))
     {
-      sals = decode_line_spec (main_name (), DECODE_LINE_FUNFIRSTLINE);
+      sals = decode_line_with_current_source (main_name (),
+					      DECODE_LINE_FUNFIRSTLINE);
       sal = sals.sals[0];
       xfree (sals.sals);
       current_source_pspace = sal.pspace;
@@ -440,62 +441,40 @@ add_path (char *dirname, char **which_path, int parse_separators)
 {
   char *old = *which_path;
   int prefix = 0;
-  char **argv = NULL;
-  char *arg;
-  int argv_index = 0;
+  VEC (char_ptr) *dir_vec = NULL;
+  struct cleanup *back_to;
+  int ix;
+  char *name;
 
   if (dirname == 0)
     return;
 
   if (parse_separators)
     {
+      char **argv, **argvp;
+
       /* This will properly parse the space and tab separators
-	 and any quotes that may exist.  DIRNAME_SEPARATOR will
-	 be dealt with later.  */
+	 and any quotes that may exist.  */
       argv = gdb_buildargv (dirname);
-      make_cleanup_freeargv (argv);
 
-      arg = argv[0];
+      for (argvp = argv; *argvp; argvp++)
+	dirnames_to_char_ptr_vec_append (&dir_vec, *argvp);
+
+      freeargv (argv);
     }
   else
-    {
-      arg = xstrdup (dirname);
-      make_cleanup (xfree, arg);
-    }
+    VEC_safe_push (char_ptr, dir_vec, xstrdup (dirname));
+  back_to = make_cleanup_free_char_ptr_vec (dir_vec);
 
-  do
+  for (ix = 0; VEC_iterate (char_ptr, dir_vec, ix, name); ++ix)
     {
-      char *name = arg;
       char *p;
       struct stat st;
 
-      {
-	char *separator = NULL;
-
-	/* Spaces and tabs will have been removed by buildargv().
-	   The directories will there be split into a list but
-	   each entry may still contain DIRNAME_SEPARATOR.  */
-	if (parse_separators)
-	  separator = strchr (name, DIRNAME_SEPARATOR);
-
-	if (separator == 0)
-	  p = arg = name + strlen (name);
-	else
-	  {
-	    p = separator;
-	    arg = p + 1;
-	    while (*arg == DIRNAME_SEPARATOR)
-	      ++arg;
-	  }
-
-	/* If there are no more directories in this argument then start
-	   on the next argument next time round the loop (if any).  */
-	if (*arg == '\0')
-	  arg = parse_separators ? argv[++argv_index] : NULL;
-      }
-
-      /* name is the start of the directory.
-	 p is the separator (or null) following the end.  */
+      /* Spaces and tabs will have been removed by buildargv().
+         NAME is the start of the directory.
+	 P is the '\0' following the end.  */
+      p = name + strlen (name);
 
       while (!(IS_DIR_SEPARATOR (*name) && p <= name + 1)	/* "/" */
 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
@@ -573,65 +552,54 @@ add_path (char *dirname, char **which_path, int parse_separators)
     append:
       {
 	unsigned int len = strlen (name);
+	char tinybuf[2];
 
 	p = *which_path;
-	while (1)
+	/* FIXME: we should use realpath() or its work-alike
+	   before comparing.  Then all the code above which
+	   removes excess slashes and dots could simply go away.  */
+	if (!filename_cmp (p, name))
 	  {
-	    /* FIXME: we should use realpath() or its work-alike
-	       before comparing.  Then all the code above which
-	       removes excess slashes and dots could simply go away.  */
-	    if (!filename_ncmp (p, name, len)
-		&& (p[len] == '\0' || p[len] == DIRNAME_SEPARATOR))
-	      {
-		/* Found it in the search path, remove old copy.  */
-		if (p > *which_path)
-		  p--;		/* Back over leading separator.  */
-		if (prefix > p - *which_path)
-		  goto skip_dup;	/* Same dir twice in one cmd.  */
-		strcpy (p, &p[len + 1]);	/* Copy from next \0 or  : */
-	      }
-	    p = strchr (p, DIRNAME_SEPARATOR);
-	    if (p != 0)
-	      ++p;
-	    else
-	      break;
+	    /* Found it in the search path, remove old copy.  */
+	    if (p > *which_path)
+	      p--;		/* Back over leading separator.  */
+	    if (prefix > p - *which_path)
+	      goto skip_dup;	/* Same dir twice in one cmd.  */
+	    memmove (p, &p[len + 1], strlen (&p[len + 1]) + 1);	/* Copy from next \0 or  : */
 	  }
-	if (p == 0)
-	  {
-	    char tinybuf[2];
 
-	    tinybuf[0] = DIRNAME_SEPARATOR;
-	    tinybuf[1] = '\0';
+	tinybuf[0] = DIRNAME_SEPARATOR;
+	tinybuf[1] = '\0';
 
-	    /* If we have already tacked on a name(s) in this command,
-	       be sure they stay on the front as we tack on some
-	       more.  */
-	    if (prefix)
-	      {
-		char *temp, c;
-
-		c = old[prefix];
-		old[prefix] = '\0';
-		temp = concat (old, tinybuf, name, (char *)NULL);
-		old[prefix] = c;
-		*which_path = concat (temp, "", &old[prefix], (char *) NULL);
-		prefix = strlen (temp);
-		xfree (temp);
-	      }
-	    else
-	      {
-		*which_path = concat (name, (old[0] ? tinybuf : old),
-				      old, (char *)NULL);
-		prefix = strlen (name);
-	      }
-	    xfree (old);
-	    old = *which_path;
+	/* If we have already tacked on a name(s) in this command,
+	   be sure they stay on the front as we tack on some
+	   more.  */
+	if (prefix)
+	  {
+	    char *temp, c;
+
+	    c = old[prefix];
+	    old[prefix] = '\0';
+	    temp = concat (old, tinybuf, name, (char *)NULL);
+	    old[prefix] = c;
+	    *which_path = concat (temp, "", &old[prefix], (char *) NULL);
+	    prefix = strlen (temp);
+	    xfree (temp);
+	  }
+	else
+	  {
+	    *which_path = concat (name, (old[0] ? tinybuf : old),
+				  old, (char *)NULL);
+	    prefix = strlen (name);
 	  }
+	xfree (old);
+	old = *which_path;
       }
     skip_dup:
       ;
     }
-  while (arg != NULL);
+
+  do_cleanups (back_to);
 }
 
 
@@ -712,10 +680,11 @@ openp (const char *path, int opts, const char *string,
 {
   int fd;
   char *filename;
-  const char *p;
-  const char *p1;
-  int len;
   int alloclen;
+  VEC (char_ptr) *dir_vec;
+  struct cleanup *back_to;
+  int ix;
+  char *dir;
 
   /* The open syscall MODE parameter is not specified.  */
   gdb_assert ((mode & O_CREAT) == 0);
@@ -778,16 +747,15 @@ openp (const char *path, int opts, const char *string,
   alloclen = strlen (path) + strlen (string) + 2;
   filename = alloca (alloclen);
   fd = -1;
-  for (p = path; p; p = p1 ? p1 + 1 : 0)
+
+  dir_vec = dirnames_to_char_ptr_vec (path);
+  back_to = make_cleanup_free_char_ptr_vec (dir_vec);
+
+  for (ix = 0; VEC_iterate (char_ptr, dir_vec, ix, dir); ++ix)
     {
-      p1 = strchr (p, DIRNAME_SEPARATOR);
-      if (p1)
-	len = p1 - p;
-      else
-	len = strlen (p);
+      size_t len = strlen (dir);
 
-      if (len == 4 && p[0] == '$' && p[1] == 'c'
-	  && p[2] == 'w' && p[3] == 'd')
+      if (strcmp (dir, "$cwd") == 0)
 	{
 	  /* Name is $cwd -- insert current directory name instead.  */
 	  int newlen;
@@ -802,11 +770,29 @@ openp (const char *path, int opts, const char *string,
 	    }
 	  strcpy (filename, current_directory);
 	}
+      else if (strchr(dir, '~'))
+	{
+	 /* See whether we need to expand the tilde.  */
+	  int newlen;
+	  char *tilde_expanded;
+
+	  tilde_expanded  = tilde_expand (dir);
+
+	  /* First, realloc the filename buffer if too short.  */
+	  len = strlen (tilde_expanded);
+	  newlen = len + strlen (string) + 2;
+	  if (newlen > alloclen)
+	    {
+	      alloclen = newlen;
+	      filename = alloca (alloclen);
+	    }
+	  strcpy (filename, tilde_expanded);
+	  xfree (tilde_expanded);
+	}
       else
 	{
 	  /* Normal file name in path -- just use it.  */
-	  strncpy (filename, p, len);
-	  filename[len] = 0;
+	  strcpy (filename, dir);
 
 	  /* Don't search $cdir.  It's also a magic path like $cwd, but we
 	     don't have enough information to expand it.  The user *could*
@@ -815,7 +801,7 @@ openp (const char *path, int opts, const char *string,
 	     contexts.  If the user really has '$cdir' one can use './$cdir'.
 	     We can get $cdir when loading scripts.  When loading source files
 	     $cdir must have already been expanded to the correct value.  */
-	  if (strcmp (filename, "$cdir") == 0)
+	  if (strcmp (dir, "$cdir") == 0)
 	    continue;
 	}
 
@@ -834,6 +820,8 @@ openp (const char *path, int opts, const char *string,
 	}
     }
 
+  do_cleanups (back_to);
+
 done:
   if (filename_opened)
     {
@@ -971,26 +959,6 @@ rewrite_source_path (const char *path)
   return new_path;
 }
 
-/* This function is capable of finding the absolute path to a
-   source file, and opening it, provided you give it a FILENAME.  Both the
-   DIRNAME and FULLNAME are only added suggestions on where to find the file.
-
-   FILENAME should be the filename to open.
-   DIRNAME is the compilation directory of a particular source file.
-           Only some debug formats provide this info.
-   FULLNAME can be the last known absolute path to the file in question.
-     Space for the path must have been malloc'd.  If a path substitution
-     is applied we free the old value and set a new one.
-
-   On Success 
-     A valid file descriptor is returned (the return value is positive).
-     FULLNAME is set to the absolute path to the file just opened.
-     The caller is responsible for freeing FULLNAME.
-
-   On Failure
-     An invalid file descriptor is returned (the return value is negative).
-     FULLNAME is set to NULL.  */
-
 int
 find_and_open_source (const char *filename,
 		      const char *dirname,
@@ -1017,7 +985,16 @@ find_and_open_source (const char *filename,
 
       result = open (*fullname, OPEN_MODE);
       if (result >= 0)
-	return result;
+	{
+	  /* Call xfullpath here to be consistent with openp
+	     which we use below.  */
+	  char *lpath = xfullpath (*fullname);
+
+	  xfree (*fullname);
+	  *fullname = lpath;
+	  return result;
+	}
+
       /* Didn't work -- free old one, try again.  */
       xfree (*fullname);
       *fullname = NULL;
@@ -1429,7 +1406,7 @@ line_info (char *arg, int from_tty)
     }
   else
     {
-      sals = decode_line_spec_1 (arg, DECODE_LINE_LIST_MODE);
+      sals = decode_line_with_last_displayed (arg, DECODE_LINE_LIST_MODE);
 
       dont_repeat ();
     }
diff --git a/gdb/source.h b/gdb/source.h
index 3ee8e53..bf9a688 100644
--- a/gdb/source.h
+++ b/gdb/source.h
@@ -21,6 +21,29 @@
 
 struct symtab;
 
+/* This function is capable of finding the absolute path to a
+   source file, and opening it, provided you give it a FILENAME.  Both the
+   DIRNAME and FULLNAME are only added suggestions on where to find the file.
+
+   FILENAME should be the filename to open.
+   DIRNAME is the compilation directory of a particular source file.
+	   Only some debug formats provide this info.
+   FULLNAME can be the last known absolute path to the file in question.
+     Space for the path must have been malloc'd.  If a path substitution
+     is applied we free the old value and set a new one.
+
+   On Success
+     A valid file descriptor is returned (the return value is positive).
+     FULLNAME is set to the absolute path to the file just opened.
+     The caller is responsible for freeing FULLNAME.
+
+   On Failure
+     An invalid file descriptor is returned (the return value is negative).
+     FULLNAME is set to NULL.  */
+extern int find_and_open_source (const char *filename,
+				 const char *dirname,
+				 char **fullname);
+
 /* Open a source file given a symtab S.  Returns a file descriptor or
    negative number for error.  */
 extern int open_source_file (struct symtab *s);
diff --git a/gdb/sparc-linux-nat.c b/gdb/sparc-linux-nat.c
index b18ceed..d56a6bd 100644
--- a/gdb/sparc-linux-nat.c
+++ b/gdb/sparc-linux-nat.c
@@ -53,7 +53,7 @@ fill_fpregset (const struct regcache *regcache,
   sparc32_collect_fpregset (regcache, regnum, fpregs);
 }
 
-void _initialialize_sparc_linux_nat (void);
+void _initialize_sparc_linux_nat (void);
 
 void
 _initialize_sparc_linux_nat (void)
diff --git a/gdb/sparc-nat.c b/gdb/sparc-nat.c
index a80ee8e..cf36abd 100644
--- a/gdb/sparc-nat.c
+++ b/gdb/sparc-nat.c
@@ -255,7 +255,7 @@ sparc_store_inferior_registers (struct target_ops *ops,
 

 /* Fetch StackGhost Per-Process XOR cookie.  */
 
-LONGEST
+static LONGEST
 sparc_xfer_wcookie (struct target_ops *ops, enum target_object object,
 		    const char *annex, gdb_byte *readbuf,
 		    const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
diff --git a/gdb/sparc-sol2-tdep.c b/gdb/sparc-sol2-tdep.c
index 33361ce..d2fc4d6 100644
--- a/gdb/sparc-sol2-tdep.c
+++ b/gdb/sparc-sol2-tdep.c
@@ -66,7 +66,7 @@ const struct sparc_gregset sparc32_sol2_gregset =
    ignore this.  */
 
 int
-sparc_sol2_pc_in_sigtramp (CORE_ADDR pc, char *name)
+sparc_sol2_pc_in_sigtramp (CORE_ADDR pc, const char *name)
 {
   return (name && (strcmp (name, "sigacthandler") == 0
 		   || strcmp (name, "ucbsigvechandler") == 0
@@ -152,7 +152,7 @@ sparc32_sol2_sigtramp_frame_sniffer (const struct frame_unwind *self,
 				     void **this_cache)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
-  char *name;
+  const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
   if (sparc_sol2_pc_in_sigtramp (pc, name))
@@ -173,8 +173,8 @@ static const struct frame_unwind sparc32_sol2_sigtramp_frame_unwind =
 
 /* Unglobalize NAME.  */
 
-char *
-sparc_sol2_static_transform_name (char *name)
+const const char *
+sparc_sol2_static_transform_name (const char *name)
 {
   /* The Sun compilers (Sun ONE Studio, Forte Developer, Sun WorkShop,
      SunPRO) convert file static variables into global values, a
diff --git a/gdb/sparc-tdep.c b/gdb/sparc-tdep.c
index 24d54b7..6da2297 100644
--- a/gdb/sparc-tdep.c
+++ b/gdb/sparc-tdep.c
@@ -85,6 +85,7 @@ struct regset;
 /* Sign extension macros.  */
 #define X_DISP22(i) ((X_IMM22 (i) ^ 0x200000) - 0x200000)
 #define X_DISP19(i) ((((i) & 0x7ffff) ^ 0x40000) - 0x40000)
+#define X_DISP10(i) ((((((i) >> 11) && 0x300) | (((i) >> 5) & 0xff)) ^ 0x200) - 0x200)
 #define X_SIMM13(i) ((((i) & 0x1fff) ^ 0x1000) - 0x1000)
 
 /* Fetch the instruction at PC.  Instructions are always big-endian
@@ -601,7 +602,6 @@ static struct sparc_frame_cache *
 sparc_alloc_frame_cache (void)
 {
   struct sparc_frame_cache *cache;
-  int i;
 
   cache = FRAME_OBSTACK_ZALLOC (struct sparc_frame_cache);
 
@@ -1353,7 +1353,7 @@ sparc32_store_return_value (struct type *type, struct regcache *regcache,
 }
 
 static enum return_value_convention
-sparc32_return_value (struct gdbarch *gdbarch, struct type *func_type,
+sparc32_return_value (struct gdbarch *gdbarch, struct value *function,
 		      struct type *type, struct regcache *regcache,
 		      gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -1451,14 +1451,24 @@ sparc_analyze_control_transfer (struct frame_info *frame,
 {
   unsigned long insn = sparc_fetch_instruction (pc);
   int conditional_p = X_COND (insn) & 0x7;
-  int branch_p = 0;
+  int branch_p = 0, fused_p = 0;
   long offset = 0;			/* Must be signed for sign-extend.  */
 
-  if (X_OP (insn) == 0 && X_OP2 (insn) == 3 && (insn & 0x1000000) == 0)
+  if (X_OP (insn) == 0 && X_OP2 (insn) == 3)
     {
-      /* Branch on Integer Register with Prediction (BPr).  */
-      branch_p = 1;
-      conditional_p = 1;
+      if ((insn & 0x10000000) == 0)
+	{
+	  /* Branch on Integer Register with Prediction (BPr).  */
+	  branch_p = 1;
+	  conditional_p = 1;
+	}
+      else
+	{
+	  /* Compare and Branch  */
+	  branch_p = 1;
+	  fused_p = 1;
+	  offset = 4 * X_DISP10 (insn);
+	}
     }
   else if (X_OP (insn) == 0 && X_OP2 (insn) == 6)
     {
@@ -1495,7 +1505,16 @@ sparc_analyze_control_transfer (struct frame_info *frame,
 
   if (branch_p)
     {
-      if (conditional_p)
+      if (fused_p)
+	{
+	  /* Fused compare-and-branch instructions are non-delayed,
+	     and do not have an annuling capability.  So we need to
+	     always set a breakpoint on both the NPC and the branch
+	     target address.  */
+	  gdb_assert (offset != 0);
+	  return pc + offset;
+	}
+      else if (conditional_p)
 	{
 	  /* For conditional branches, return nPC + 4 iff the annul
 	     bit is 1.  */
diff --git a/gdb/sparc-tdep.h b/gdb/sparc-tdep.h
index 3a91301..db94994 100644
--- a/gdb/sparc-tdep.h
+++ b/gdb/sparc-tdep.h
@@ -215,9 +215,9 @@ extern void sparc32_collect_fpregset (const struct regcache *regcache,
 /* Register offsets for Solaris 2.  */
 extern const struct sparc_gregset sparc32_sol2_gregset;
 
-extern int sparc_sol2_pc_in_sigtramp (CORE_ADDR pc, char *name);
+extern int sparc_sol2_pc_in_sigtramp (CORE_ADDR pc, const char *name);
 
-extern char *sparc_sol2_static_transform_name (char *name);
+extern const char *sparc_sol2_static_transform_name (const char *name);
 
 extern void sparc32_sol2_init_abi (struct gdbarch_info info,
 				   struct gdbarch *gdbarch);
diff --git a/gdb/sparc64-sol2-tdep.c b/gdb/sparc64-sol2-tdep.c
index 00c4d97..35431b0 100644
--- a/gdb/sparc64-sol2-tdep.c
+++ b/gdb/sparc64-sol2-tdep.c
@@ -130,7 +130,7 @@ sparc64_sol2_sigtramp_frame_sniffer (const struct frame_unwind *self,
 				     void **this_cache)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
-  char *name;
+  const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
   if (sparc_sol2_pc_in_sigtramp (pc, name))
diff --git a/gdb/sparc64-tdep.c b/gdb/sparc64-tdep.c
index 327eefe..28c9ca4 100644
--- a/gdb/sparc64-tdep.c
+++ b/gdb/sparc64-tdep.c
@@ -785,7 +785,8 @@ sparc64_store_arguments (struct regcache *regcache, int nargs,
       struct type *type = value_type (args[i]);
       int len = TYPE_LENGTH (type);
 
-      if (sparc64_structure_or_union_p (type))
+      if (sparc64_structure_or_union_p (type)
+	  || (sparc64_complex_floating_p (type) && len == 32))
 	{
 	  /* Structure or Union arguments.  */
 	  if (len <= 16)
@@ -816,10 +817,9 @@ sparc64_store_arguments (struct regcache *regcache, int nargs,
 	      num_elements++;
 	    }
 	}
-      else if (sparc64_floating_p (type))
+      else if (sparc64_floating_p (type) || sparc64_complex_floating_p (type))
 	{
 	  /* Floating arguments.  */
-
 	  if (len == 16)
 	    {
 	      /* The psABI says that "Each quad-precision parameter
@@ -887,7 +887,8 @@ sparc64_store_arguments (struct regcache *regcache, int nargs,
       int regnum = -1;
       gdb_byte buf[16];
 
-      if (sparc64_structure_or_union_p (type))
+      if (sparc64_structure_or_union_p (type)
+	  || (sparc64_complex_floating_p (type) && len == 32))
 	{
 	  /* Structure or Union arguments.  */
 	  gdb_assert (len <= 16);
@@ -927,7 +928,7 @@ sparc64_store_arguments (struct regcache *regcache, int nargs,
 	      /* The psABI says "Each single-precision parameter value
                  will be assigned to one extended word in the
                  parameter array, and right-justified within that
-                 word; the left half (even floatregister) is
+                 word; the left half (even float register) is
                  undefined."  Even though the psABI says that "the
                  left half is undefined", set it to zero here.  */
 	      memset (buf, 0, 4);
@@ -960,7 +961,7 @@ sparc64_store_arguments (struct regcache *regcache, int nargs,
 	    }
 	  else if (regnum >= SPARC64_Q0_REGNUM && regnum <= SPARC64_Q8_REGNUM)
 	    {
-	      gdb_assert (element < 6);
+	      gdb_assert (element < 5);
 	      regnum = SPARC_O0_REGNUM + element;
 	      regcache_cooked_write (regcache, regnum, valbuf);
 	      regcache_cooked_write (regcache, regnum + 1, valbuf + 8);
@@ -1034,7 +1035,7 @@ sparc64_extract_return_value (struct type *type, struct regcache *regcache,
 	sparc64_extract_floating_fields (regcache, type, buf, 0);
       memcpy (valbuf, buf, len);
     }
-  else if (sparc64_floating_p (type))
+  else if (sparc64_floating_p (type) || sparc64_complex_floating_p (type))
     {
       /* Floating return values.  */
       for (i = 0; i < len / 4; i++)
@@ -1118,7 +1119,7 @@ sparc64_store_return_value (struct type *type, struct regcache *regcache,
 }
 
 static enum return_value_convention
-sparc64_return_value (struct gdbarch *gdbarch, struct type *func_type,
+sparc64_return_value (struct gdbarch *gdbarch, struct value *function,
 		      struct type *type, struct regcache *regcache,
 		      gdb_byte *readbuf, const gdb_byte *writebuf)
 {
diff --git a/gdb/sparc64fbsd-tdep.c b/gdb/sparc64fbsd-tdep.c
index a083553..f58e73b 100644
--- a/gdb/sparc64fbsd-tdep.c
+++ b/gdb/sparc64fbsd-tdep.c
@@ -84,7 +84,7 @@ sparc64fbsd_collect_fpregset (const struct regset *regset,
 /* Signal trampolines.  */
 
 static int
-sparc64fbsd_pc_in_sigtramp (CORE_ADDR pc, char *name)
+sparc64fbsd_pc_in_sigtramp (CORE_ADDR pc, const char *name)
 {
   return (name && strcmp (name, "__sigtramp") == 0);
 }
@@ -189,7 +189,7 @@ sparc64fbsd_sigtramp_frame_sniffer (const struct frame_unwind *self,
 				    void **this_cache)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
-  char *name;
+  const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
   if (sparc64fbsd_pc_in_sigtramp (pc, name))
diff --git a/gdb/sparc64nbsd-tdep.c b/gdb/sparc64nbsd-tdep.c
index e80bad8..273fb26 100644
--- a/gdb/sparc64nbsd-tdep.c
+++ b/gdb/sparc64nbsd-tdep.c
@@ -79,7 +79,7 @@ static const CORE_ADDR sparc64nbsd_sigtramp_start = 0xffffffffffffdee4ULL;
 static const CORE_ADDR sparc64nbsd_sigtramp_end = 0xffffffffffffe000ULL;
 
 static int
-sparc64nbsd_pc_in_sigtramp (CORE_ADDR pc, char *name)
+sparc64nbsd_pc_in_sigtramp (CORE_ADDR pc, const char *name)
 {
   if (pc >= sparc64nbsd_sigtramp_start && pc < sparc64nbsd_sigtramp_end)
     return 1;
@@ -214,7 +214,7 @@ sparc64nbsd_sigtramp_frame_sniffer (const struct frame_unwind *self,
 				    void **this_cache)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
-  char *name;
+  const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
   if (sparc64nbsd_pc_in_sigtramp (pc, name))
diff --git a/gdb/sparc64obsd-tdep.c b/gdb/sparc64obsd-tdep.c
index e5baa08..6148eab 100644
--- a/gdb/sparc64obsd-tdep.c
+++ b/gdb/sparc64obsd-tdep.c
@@ -93,7 +93,7 @@ static const int sparc64obsd_sigreturn_offset[] = {
 };
 
 static int
-sparc64obsd_pc_in_sigtramp (CORE_ADDR pc, char *name)
+sparc64obsd_pc_in_sigtramp (CORE_ADDR pc, const char *name)
 {
   CORE_ADDR start_pc = (pc & ~(sparc64obsd_page_size - 1));
   unsigned long insn;
@@ -182,7 +182,7 @@ sparc64obsd_sigtramp_frame_sniffer (const struct frame_unwind *self,
 				    void **this_cache)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
-  char *name;
+  const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
   if (sparc64obsd_pc_in_sigtramp (pc, name))
@@ -259,7 +259,7 @@ sparc64obsd_trapframe_sniffer (const struct frame_unwind *self,
 {
   CORE_ADDR pc;
   ULONGEST pstate;
-  char *name;
+  const char *name;
 
   /* Check whether we are in privileged mode, and bail out if we're not.  */
   pstate = get_frame_register_unsigned (this_frame, SPARC64_PSTATE_REGNUM);
diff --git a/gdb/sparcnbsd-tdep.c b/gdb/sparcnbsd-tdep.c
index bb68453..9afbbcf 100644
--- a/gdb/sparcnbsd-tdep.c
+++ b/gdb/sparcnbsd-tdep.c
@@ -87,7 +87,7 @@ static const CORE_ADDR sparc32nbsd_sigtramp_start = 0xeffffef0;
 static const CORE_ADDR sparc32nbsd_sigtramp_end = 0xeffffff0;
 
 static int
-sparc32nbsd_pc_in_sigtramp (CORE_ADDR pc, char *name)
+sparc32nbsd_pc_in_sigtramp (CORE_ADDR pc, const char *name)
 {
   if (pc >= sparc32nbsd_sigtramp_start && pc < sparc32nbsd_sigtramp_end)
     return 1;
@@ -238,7 +238,7 @@ sparc32nbsd_sigcontext_frame_sniffer (const struct frame_unwind *self,
 				      void **this_cache)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
-  char *name;
+  const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
   if (sparc32nbsd_pc_in_sigtramp (pc, name))
diff --git a/gdb/sparcobsd-tdep.c b/gdb/sparcobsd-tdep.c
index 2380363..a8824cd 100644
--- a/gdb/sparcobsd-tdep.c
+++ b/gdb/sparcobsd-tdep.c
@@ -47,7 +47,7 @@
 static const int sparc32obsd_page_size = 4096;
 
 static int
-sparc32obsd_pc_in_sigtramp (CORE_ADDR pc, char *name)
+sparc32obsd_pc_in_sigtramp (CORE_ADDR pc, const char *name)
 {
   CORE_ADDR start_pc = (pc & ~(sparc32obsd_page_size - 1));
   unsigned long insn;
@@ -127,7 +127,7 @@ sparc32obsd_sigtramp_frame_sniffer (const struct frame_unwind *self,
 				    void **this_cache)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
-  char *name;
+  const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
   if (sparc32obsd_pc_in_sigtramp (pc, name))
diff --git a/gdb/spu-linux-nat.c b/gdb/spu-linux-nat.c
index 7ddfc7a..2dfec8c 100644
--- a/gdb/spu-linux-nat.c
+++ b/gdb/spu-linux-nat.c
@@ -23,6 +23,7 @@
 #include "gdb_string.h"
 #include "target.h"
 #include "inferior.h"
+#include "inf-child.h"
 #include "inf-ptrace.h"
 #include "regcache.h"
 #include "symfile.h"
@@ -461,7 +462,7 @@ spu_child_wait (struct target_ops *ops,
 
       /* Claim it exited with unknown signal.  */
       ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
-      ourstatus->value.sig = TARGET_SIGNAL_UNKNOWN;
+      ourstatus->value.sig = GDB_SIGNAL_UNKNOWN;
       return inferior_ptid;
     }
 
diff --git a/gdb/spu-multiarch.c b/gdb/spu-multiarch.c
index 73a5936..8d4ef57 100644
--- a/gdb/spu-multiarch.c
+++ b/gdb/spu-multiarch.c
@@ -61,7 +61,6 @@ parse_spufs_run (ptid_t ptid, int *fd, CORE_ADDR *addr)
   struct gdbarch_tdep *tdep;
   struct regcache *regcache;
   char buf[4];
-  CORE_ADDR pc;
   ULONGEST regval;
 
   /* If we're not on PPU, there's nothing to detect.  */
@@ -401,6 +400,9 @@ init_spu_ops (void)
   spu_ops.to_magic = OPS_MAGIC;
 }
 
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_spu_multiarch;
+
 void
 _initialize_spu_multiarch (void)
 {
diff --git a/gdb/spu-tdep.c b/gdb/spu-tdep.c
index 78ba007..f05a26b 100644
--- a/gdb/spu-tdep.c
+++ b/gdb/spu-tdep.c
@@ -849,7 +849,7 @@ spu_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
   CORE_ADDR scan_pc, func_start, func_end, epilogue_start, epilogue_end;
   bfd_byte buf[4];
   unsigned int insn;
-  int rt, ra, rb, rc, immed;
+  int rt, ra, rb, immed;
 
   /* Find the search limits based on function boundaries and hard limit.
      We assume the epilogue can be up to 64 instructions long.  */
@@ -1450,10 +1450,11 @@ spu_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
 /* Function return value access.  */
 
 static enum return_value_convention
-spu_return_value (struct gdbarch *gdbarch, struct type *func_type,
+spu_return_value (struct gdbarch *gdbarch, struct value *function,
 		  struct type *type, struct regcache *regcache,
 		  gdb_byte *out, const gdb_byte *in)
 {
+  struct type *func_type = function ? value_type (function) : NULL;
   enum return_value_convention rvc;
   int opencl_vector = 0;
 
@@ -1942,6 +1943,7 @@ spu_catch_start (struct objfile *objfile)
   xsnprintf (buf, sizeof buf, "*%s", core_addr_to_string (pc));
   create_breakpoint (get_objfile_arch (objfile), buf /* arg */,
 		     NULL /* cond_string */, -1 /* thread */,
+		     NULL /* extra_string */,
 		     0 /* parse_condition_and_thread */, 1 /* tempflag */,
 		     bp_breakpoint /* type_wanted */,
 		     0 /* ignore_count */,
@@ -2030,7 +2032,7 @@ info_spu_event_command (char *args, int from_tty)
   gdb_byte buf[100];
   char annex[32];
   LONGEST len;
-  int rc, id;
+  int id;
 
   if (gdbarch_bfd_arch_info (get_frame_arch (frame))->arch != bfd_arch_spu)
     error (_("\"info spu\" is only supported on the SPU architecture."));
@@ -2087,7 +2089,7 @@ info_spu_signal_command (char *args, int from_tty)
   char annex[32];
   gdb_byte buf[100];
   LONGEST len;
-  int rc, id;
+  int id;
 
   if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu)
     error (_("\"info spu\" is only supported on the SPU architecture."));
@@ -2208,7 +2210,7 @@ info_spu_mailbox_command (char *args, int from_tty)
   char annex[32];
   gdb_byte buf[1024];
   LONGEST len;
-  int i, id;
+  int id;
 
   if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu)
     error (_("\"info spu\" is only supported on the SPU architecture."));
@@ -2356,7 +2358,7 @@ info_spu_dma_cmdlist (gdb_byte *buf, int nr, enum bfd_endian byte_order)
       ULONGEST mfc_cq_dw1;
       ULONGEST mfc_cq_dw2;
       int mfc_cmd_opcode, mfc_cmd_tag, rclass_id, tclass_id;
-      int lsa, size, list_lsa, list_size, mfc_lsa, mfc_size;
+      int list_lsa, list_size, mfc_lsa, mfc_size;
       ULONGEST mfc_ea;
       int list_valid_p, noop_valid_p, qw_valid_p, ea_valid_p, cmd_error_p;
 
@@ -2450,7 +2452,7 @@ info_spu_dma_command (char *args, int from_tty)
   char annex[32];
   gdb_byte buf[1024];
   LONGEST len;
-  int i, id;
+  int id;
 
   if (gdbarch_bfd_arch_info (get_frame_arch (frame))->arch != bfd_arch_spu)
     error (_("\"info spu\" is only supported on the SPU architecture."));
@@ -2529,7 +2531,7 @@ info_spu_proxydma_command (char *args, int from_tty)
   char annex[32];
   gdb_byte buf[1024];
   LONGEST len;
-  int i, id;
+  int id;
 
   if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu)
     error (_("\"info spu\" is only supported on the SPU architecture."));
diff --git a/gdb/stabsread.c b/gdb/stabsread.c
index 865bac8..eb09c9d 100644
--- a/gdb/stabsread.c
+++ b/gdb/stabsread.c
@@ -98,7 +98,7 @@ static void
 patch_block_stabs (struct pending *, struct pending_stabs *,
 		   struct objfile *);
 
-static void fix_common_block (struct symbol *, int);
+static void fix_common_block (struct symbol *, CORE_ADDR);
 
 static int read_type_number (char **, int *);
 
@@ -1173,7 +1173,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
 					NULL, objfile);
 	  if (msym != NULL)
 	    {
-	      char *new_name = gdbarch_static_transform_name
+	      const char *new_name = gdbarch_static_transform_name
 		(gdbarch, SYMBOL_LINKAGE_NAME (sym));
 
 	      SYMBOL_SET_LINKAGE_NAME (sym, new_name);
@@ -1367,7 +1367,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
 					NULL, objfile);
 	  if (msym != NULL)
 	    {
-	      char *new_name = gdbarch_static_transform_name
+	      const char *new_name = gdbarch_static_transform_name
 		(gdbarch, SYMBOL_LINKAGE_NAME (sym));
 
 	      SYMBOL_SET_LINKAGE_NAME (sym, new_name);
@@ -2232,10 +2232,11 @@ rs6000_builtin_type (int typenum, struct objfile *objfile)
 

 /* This page contains subroutines of read_type.  */
 
-/* Replace *OLD_NAME with the method name portion of PHYSNAME.  */
+/* Wrapper around method_name_from_physname to flag a complaint
+   if there is an error.  */
 
-static void
-update_method_name_from_physname (char **old_name, const char *physname)
+static char *
+stabs_method_name_from_physname (const char *physname)
 {
   char *method_name;
 
@@ -2245,16 +2246,10 @@ update_method_name_from_physname (char **old_name, const char *physname)
     {
       complaint (&symfile_complaints,
 		 _("Method has bad physname %s\n"), physname);
-      return;
+      return NULL;
     }
 
-  if (strcmp (*old_name, method_name) != 0)
-    {
-      xfree (*old_name);
-      *old_name = method_name;
-    }
-  else
-    xfree (method_name);
+  return method_name;
 }
 
 /* Read member function stabs info for C++ classes.  The form of each member
@@ -2278,10 +2273,6 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
 {
   int nfn_fields = 0;
   int length = 0;
-  /* Total number of member functions defined in this class.  If the class
-     defines two `f' functions, and one `g' function, then this will have
-     the value 3.  */
-  int total_length = 0;
   int i;
   struct next_fnfield
     {
@@ -2681,7 +2672,6 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
 	      destr_fnlist->next = fip->fnlist;
 	      fip->fnlist = destr_fnlist;
 	      nfn_fields++;
-	      total_length += has_destructor;
 	      length -= has_destructor;
 	    }
 	  else if (is_v3)
@@ -2692,14 +2682,24 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
 		 - in -gstabs instead of -gstabs+
 		 - or for static methods, which are output as a function type
 		   instead of a method type.  */
+	      char *new_method_name =
+		stabs_method_name_from_physname (sublist->fn_field.physname);
 
-	      update_method_name_from_physname (&new_fnlist->fn_fieldlist.name,
-						sublist->fn_field.physname);
+	      if (new_method_name != NULL
+		  && strcmp (new_method_name,
+			     new_fnlist->fn_fieldlist.name) != 0)
+		{
+		  new_fnlist->fn_fieldlist.name = new_method_name;
+		  xfree (main_fn_name);
+		}
+	      else
+		xfree (new_method_name);
 	    }
 	  else if (has_destructor && new_fnlist->fn_fieldlist.name[0] != '~')
 	    {
 	      new_fnlist->fn_fieldlist.name =
-		concat ("~", main_fn_name, (char *)NULL);
+		obconcat (&objfile->objfile_obstack,
+			  "~", main_fn_name, (char *)NULL);
 	      xfree (main_fn_name);
 	    }
 	  else if (!has_stub)
@@ -2716,6 +2716,7 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
 		new_fnlist->fn_fieldlist.name
 		  = obsavestring (dem_opname, strlen (dem_opname),
 				  &objfile->objfile_obstack);
+	      xfree (main_fn_name);
 	    }
 
 	  new_fnlist->fn_fieldlist.fn_fields = (struct fn_field *)
@@ -2732,7 +2733,6 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
 	  new_fnlist->next = fip->fnlist;
 	  fip->fnlist = new_fnlist;
 	  nfn_fields++;
-	  total_length += length;
 	}
     }
 
@@ -2744,7 +2744,6 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
       memset (TYPE_FN_FIELDLISTS (type), 0,
 	      sizeof (struct fn_fieldlist) * nfn_fields);
       TYPE_NFN_FIELDS (type) = nfn_fields;
-      TYPE_NFN_FIELDS_TOTAL (type) = total_length;
     }
 
   return 1;
@@ -2760,7 +2759,7 @@ read_cpp_abbrev (struct field_info *fip, char **pp, struct type *type,
 		 struct objfile *objfile)
 {
   char *p;
-  char *name;
+  const char *name;
   char cpp_abbrev;
   struct type *context;
 
@@ -2831,8 +2830,8 @@ read_cpp_abbrev (struct field_info *fip, char **pp, struct type *type,
       {
 	int nbits;
 
-	FIELD_BITPOS (fip->list->field) = read_huge_number (pp, ';', &nbits,
-                                                            0);
+	SET_FIELD_BITPOS (fip->list->field,
+			  read_huge_number (pp, ';', &nbits, 0));
 	if (nbits != 0)
 	  return 0;
       }
@@ -2908,7 +2907,8 @@ read_one_struct_field (struct field_info *fip, char **pp, char *p,
   {
     int nbits;
 
-    FIELD_BITPOS (fip->list->field) = read_huge_number (pp, ',', &nbits, 0);
+    SET_FIELD_BITPOS (fip->list->field,
+		      read_huge_number (pp, ',', &nbits, 0));
     if (nbits != 0)
       {
 	stabs_general_complaint ("bad structure-type format");
@@ -3188,7 +3188,7 @@ read_baseclasses (struct field_info *fip, char **pp, struct type *type,
 	   corresponding to this baseclass.  Always zero in the absence of
 	   multiple inheritance.  */
 
-	FIELD_BITPOS (new->field) = read_huge_number (pp, ',', &nbits, 0);
+	SET_FIELD_BITPOS (new->field, read_huge_number (pp, ',', &nbits, 0));
 	if (nbits != 0)
 	  return 0;
       }
@@ -3273,7 +3273,7 @@ read_tilde_fields (struct field_info *fip, char **pp, struct type *type,
 		   i >= TYPE_N_BASECLASSES (t);
 		   --i)
 		{
-		  char *name = TYPE_FIELD_NAME (t, i);
+		  const char *name = TYPE_FIELD_NAME (t, i);
 
 		  if (!strncmp (name, vptr_name, sizeof (vptr_name) - 2)
 		      && is_cplus_marker (name[sizeof (vptr_name) - 2]))
@@ -3413,8 +3413,8 @@ attach_fields_to_type (struct field_info *fip, struct type *type,
 static void 
 complain_about_struct_wipeout (struct type *type)
 {
-  char *name = "";
-  char *kind = "";
+  const char *name = "";
+  const char *kind = "";
 
   if (TYPE_TAG_NAME (type))
     {
@@ -3731,7 +3731,7 @@ read_enum_type (char **pp, struct type *type,
 
 	  SYMBOL_TYPE (xsym) = type;
 	  TYPE_FIELD_NAME (type, n) = SYMBOL_LINKAGE_NAME (xsym);
-	  TYPE_FIELD_BITPOS (type, n) = SYMBOL_VALUE (xsym);
+	  SET_FIELD_ENUMVAL (TYPE_FIELD (type, n), SYMBOL_VALUE (xsym));
 	  TYPE_FIELD_BITSIZE (type, n) = 0;
 	}
       if (syms == osyms)
@@ -4398,7 +4398,7 @@ common_block_end (struct objfile *objfile)
    the common block name).  */
 
 static void
-fix_common_block (struct symbol *sym, int valu)
+fix_common_block (struct symbol *sym, CORE_ADDR valu)
 {
   struct pending *next = (struct pending *) SYMBOL_TYPE (sym);
 
@@ -4552,7 +4552,7 @@ cleanup_undefined_types_1 (void)
 		struct pending *ppt;
 		int i;
 		/* Name of the type, without "struct" or "union".  */
-		char *typename = TYPE_TAG_NAME (*type);
+		const char *typename = TYPE_TAG_NAME (*type);
 
 		if (typename == NULL)
 		  {
@@ -4598,7 +4598,7 @@ cleanup_undefined_types_1 (void)
    this unit.  */
 
 void
-cleanup_undefined_types (struct objfile *objfile)
+cleanup_undefined_stabs_types (struct objfile *objfile)
 {
   cleanup_undefined_types_1 ();
   cleanup_undefined_types_noname (objfile);
diff --git a/gdb/stabsread.h b/gdb/stabsread.h
index 071552e..e4332bc 100644
--- a/gdb/stabsread.h
+++ b/gdb/stabsread.h
@@ -129,7 +129,7 @@ EXTERN int n_this_object_header_files;
 
 EXTERN int n_allocated_this_object_header_files;
 
-extern void cleanup_undefined_types (struct objfile *);
+extern void cleanup_undefined_stabs_types (struct objfile *);
 
 extern long read_number (char **, int);
 
@@ -162,7 +162,7 @@ struct stab_section_list
    they are only used by some stabs readers.  */
 
 extern struct partial_symtab *end_psymtab (struct partial_symtab *pst,
-					   char **include_list,
+					   const char **include_list,
 					   int num_includes,
 					   int capping_symbol_offset,
 					   CORE_ADDR capping_text,
diff --git a/gdb/stack.c b/gdb/stack.c
index b15b5fc..35d379d 100644
--- a/gdb/stack.c
+++ b/gdb/stack.c
@@ -59,7 +59,7 @@ void (*deprecated_selected_frame_level_changed_hook) (int);
 /* The possible choices of "set print frame-arguments", and the value
    of this setting.  */
 
-static const char *print_frame_arguments_choices[] =
+static const char *const print_frame_arguments_choices[] =
   {"all", "scalars", "none", NULL};
 static const char *print_frame_arguments = "scalars";
 
@@ -73,7 +73,7 @@ const char print_entry_values_if_needed[] = "if-needed";
 const char print_entry_values_both[] = "both";
 const char print_entry_values_compact[] = "compact";
 const char print_entry_values_default[] = "default";
-static const char *print_entry_values_choices[] =
+static const char *const print_entry_values_choices[] =
 {
   print_entry_values_no,
   print_entry_values_only,
@@ -210,10 +210,10 @@ print_frame_arg (const struct frame_arg *arg)
   struct ui_out *uiout = current_uiout;
   volatile struct gdb_exception except;
   struct cleanup *old_chain;
-  struct ui_stream *stb;
+  struct ui_file *stb;
 
-  stb = ui_out_stream_new (uiout);
-  old_chain = make_cleanup_ui_out_stream_delete (stb);
+  stb = mem_fileopen ();
+  old_chain = make_cleanup_ui_file_delete (stb);
 
   gdb_assert (!arg->val || !arg->error);
   gdb_assert (arg->entry_kind == print_entry_values_no
@@ -224,21 +224,21 @@ print_frame_arg (const struct frame_arg *arg)
   annotate_arg_begin ();
 
   make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
-  fprintf_symbol_filtered (stb->stream, SYMBOL_PRINT_NAME (arg->sym),
+  fprintf_symbol_filtered (stb, SYMBOL_PRINT_NAME (arg->sym),
 			   SYMBOL_LANGUAGE (arg->sym), DMGL_PARAMS | DMGL_ANSI);
   if (arg->entry_kind == print_entry_values_compact)
     {
       /* It is OK to provide invalid MI-like stream as with
 	 PRINT_ENTRY_VALUE_COMPACT we never use MI.  */
-      fputs_filtered ("=", stb->stream);
+      fputs_filtered ("=", stb);
 
-      fprintf_symbol_filtered (stb->stream, SYMBOL_PRINT_NAME (arg->sym),
+      fprintf_symbol_filtered (stb, SYMBOL_PRINT_NAME (arg->sym),
 			       SYMBOL_LANGUAGE (arg->sym),
 			       DMGL_PARAMS | DMGL_ANSI);
     }
   if (arg->entry_kind == print_entry_values_only
       || arg->entry_kind == print_entry_values_compact)
-    fputs_filtered ("@entry", stb->stream);
+    fputs_filtered ("@entry", stb);
   ui_out_field_stream (uiout, "name", stb);
   annotate_arg_name_end ();
   ui_out_text (uiout, "=");
@@ -279,17 +279,17 @@ print_frame_arg (const struct frame_arg *arg)
 	      /* True in "summary" mode, false otherwise.  */
 	      opts.summary = !strcmp (print_frame_arguments, "scalars");
 
-	      common_val_print (arg->val, stb->stream, 2, &opts, language);
+	      common_val_print (arg->val, stb, 2, &opts, language);
 	    }
 	}
       if (except.message)
-	fprintf_filtered (stb->stream, _("<error reading variable: %s>"),
+	fprintf_filtered (stb, _("<error reading variable: %s>"),
 			  except.message);
     }
 
   ui_out_field_stream (uiout, "value", stb);
 
-  /* Aleo invoke ui_out_tuple_end.  */
+  /* Also invoke ui_out_tuple_end.  */
   do_cleanups (old_chain);
 
   annotate_arg_end ();
@@ -499,20 +499,20 @@ print_frame_args (struct symbol *func, struct frame_info *frame,
   long highest_offset = -1;
   /* Number of ints of arguments that we have printed so far.  */
   int args_printed = 0;
-  struct cleanup *old_chain, *list_chain;
-  struct ui_stream *stb;
+  struct cleanup *old_chain;
+  struct ui_file *stb;
   /* True if we should print arguments, false otherwise.  */
   int print_args = strcmp (print_frame_arguments, "none");
   /* True in "summary" mode, false otherwise.  */
   int summary = !strcmp (print_frame_arguments, "scalars");
 
-  stb = ui_out_stream_new (uiout);
-  old_chain = make_cleanup_ui_out_stream_delete (stb);
+  stb = mem_fileopen ();
+  old_chain = make_cleanup_ui_file_delete (stb);
 
   if (func)
     {
       struct block *b = SYMBOL_BLOCK_VALUE (func);
-      struct dict_iterator iter;
+      struct block_iterator iter;
       struct symbol *sym;
 
       ALL_BLOCK_SYMBOLS (b, iter, sym)
@@ -909,6 +909,12 @@ set_last_displayed_sal (int valid, struct program_space *pspace,
   last_displayed_addr = addr;
   last_displayed_symtab = symtab;
   last_displayed_line = line;
+  if (valid && pspace == NULL)
+    {
+      clear_last_displayed_sal ();
+      internal_error (__FILE__, __LINE__,
+		      _("Trying to set NULL pspace."));
+    }
 }
 
 /* Forget the last sal we displayed.  */
@@ -999,7 +1005,7 @@ get_last_displayed_sal (struct symtab_and_line *sal)
    corresponding to FRAME.  */
 
 void
-find_frame_funname (struct frame_info *frame, char **funname,
+find_frame_funname (struct frame_info *frame, const char **funname,
 		    enum language *funlang, struct symbol **funcp)
 {
   struct symbol *func;
@@ -1095,9 +1101,9 @@ print_frame (struct frame_info *frame, int print_level,
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
   struct ui_out *uiout = current_uiout;
-  char *funname = NULL;
+  const char *funname = NULL;
   enum language funlang = language_unknown;
-  struct ui_stream *stb;
+  struct ui_file *stb;
   struct cleanup *old_chain, *list_chain;
   struct value_print_options opts;
   struct symbol *func;
@@ -1106,8 +1112,8 @@ print_frame (struct frame_info *frame, int print_level,
 
   pc_p = get_frame_pc_if_available (frame, &pc);
 
-  stb = ui_out_stream_new (uiout);
-  old_chain = make_cleanup_ui_out_stream_delete (stb);
+  stb = mem_fileopen ();
+  old_chain = make_cleanup_ui_file_delete (stb);
 
   find_frame_funname (frame, &funname, &funlang, &func);
 
@@ -1137,7 +1143,7 @@ print_frame (struct frame_info *frame, int print_level,
 	ui_out_text (uiout, " in ");
       }
   annotate_frame_function_name ();
-  fprintf_symbol_filtered (stb->stream, funname ? funname : "??",
+  fprintf_symbol_filtered (stb, funname ? funname : "??",
 			   funlang, DMGL_ANSI);
   ui_out_field_stream (uiout, "func", stb);
   ui_out_wrap_hint (uiout, "   ");
@@ -1363,7 +1369,7 @@ frame_info (char *addr_exp, int from_tty)
   struct symtab *s;
   struct frame_info *calling_frame_info;
   int numregs;
-  char *funname = 0;
+  const char *funname = 0;
   enum language funlang = language_unknown;
   const char *pc_regname;
   int selected_frame_p;
@@ -1721,7 +1727,20 @@ backtrace_command_1 (char *count_exp, int show_locals, int from_tty)
          the frame->prev field gets set to NULL in that case).  */
       print_frame_info (fi, 1, LOCATION, 1);
       if (show_locals)
-	print_frame_local_vars (fi, 1, gdb_stdout);
+	{
+	  struct frame_id frame_id = get_frame_id (fi);
+
+	  print_frame_local_vars (fi, 1, gdb_stdout);
+
+	  /* print_frame_local_vars invalidates FI.  */
+	  fi = frame_find_by_id (frame_id);
+	  if (fi == NULL)
+	    {
+	      trailing = NULL;
+	      warning (_("Unable to restore previously selected frame."));
+	      break;
+	    }
+	}
 
       /* Save the last frame to check for error conditions.  */
       trailing = fi;
@@ -1815,7 +1834,7 @@ iterate_over_block_locals (struct block *b,
 			   iterate_over_block_arg_local_vars_cb cb,
 			   void *cb_data)
 {
-  struct dict_iterator iter;
+  struct block_iterator iter;
   struct symbol *sym;
 
   ALL_BLOCK_SYMBOLS (b, iter, sym)
@@ -1852,7 +1871,7 @@ static int
 print_block_frame_labels (struct gdbarch *gdbarch, struct block *b,
 			  int *have_default, struct ui_file *stream)
 {
-  struct dict_iterator iter;
+  struct block_iterator iter;
   struct symbol *sym;
   int values_printed = 0;
 
@@ -1913,7 +1932,7 @@ iterate_over_block_local_vars (struct block *block,
 
 struct print_variable_and_value_data
 {
-  struct frame_info *frame;
+  struct frame_id frame_id;
   int num_tabs;
   struct ui_file *stream;
   int values_printed;
@@ -1927,12 +1946,28 @@ do_print_variable_and_value (const char *print_name,
 			     void *cb_data)
 {
   struct print_variable_and_value_data *p = cb_data;
+  struct frame_info *frame;
+
+  frame = frame_find_by_id (p->frame_id);
+  if (frame == NULL)
+    {
+      warning (_("Unable to restore previously selected frame."));
+      return;
+    }
+
+  print_variable_and_value (print_name, sym, frame, p->stream, p->num_tabs);
+
+  /* print_variable_and_value invalidates FRAME.  */
+  frame = NULL;
 
-  print_variable_and_value (print_name, sym,
-			    p->frame, p->stream, p->num_tabs);
   p->values_printed = 1;
 }
 
+/* Print all variables from the innermost up to the function block of FRAME.
+   Print them with values to STREAM indented by NUM_TABS.
+
+   This function will invalidate FRAME.  */
+
 static void
 print_frame_local_vars (struct frame_info *frame, int num_tabs,
 			struct ui_file *stream)
@@ -1955,7 +1990,7 @@ print_frame_local_vars (struct frame_info *frame, int num_tabs,
       return;
     }
 
-  cb_data.frame = frame;
+  cb_data.frame_id = get_frame_id (frame);
   cb_data.num_tabs = 4 * num_tabs;
   cb_data.stream = stream;
   cb_data.values_printed = 0;
@@ -1964,86 +1999,13 @@ print_frame_local_vars (struct frame_info *frame, int num_tabs,
 				 do_print_variable_and_value,
 				 &cb_data);
 
+  /* do_print_variable_and_value invalidates FRAME.  */
+  frame = NULL;
+
   if (!cb_data.values_printed)
     fprintf_filtered (stream, _("No locals.\n"));
 }
 
-/* Same, but print labels.  */
-
-static void
-print_frame_label_vars (struct frame_info *frame, int this_level_only,
-			struct ui_file *stream)
-{
-#if 1
-  fprintf_filtered (stream, "print_frame_label_vars disabled.\n");
-#else
-  struct blockvector *bl;
-  struct block *block = get_frame_block (frame, 0);
-  struct gdbarch *gdbarch = get_frame_arch (frame);
-  int values_printed = 0;
-  int index, have_default = 0;
-  char *blocks_printed;
-  CORE_ADDR pc = get_frame_pc (frame);
-
-  if (block == 0)
-    {
-      fprintf_filtered (stream, "No symbol table info available.\n");
-      return;
-    }
-
-  bl = blockvector_for_pc (BLOCK_END (block) - 4, &index);
-  blocks_printed = alloca (BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
-  memset (blocks_printed, 0, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
-
-  while (block != 0)
-    {
-      CORE_ADDR end = BLOCK_END (block) - 4;
-      int last_index;
-
-      if (bl != blockvector_for_pc (end, &index))
-	error (_("blockvector blotch"));
-      if (BLOCKVECTOR_BLOCK (bl, index) != block)
-	error (_("blockvector botch"));
-      last_index = BLOCKVECTOR_NBLOCKS (bl);
-      index += 1;
-
-      /* Don't print out blocks that have gone by.  */
-      while (index < last_index
-	     && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < pc)
-	index++;
-
-      while (index < last_index
-	     && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < end)
-	{
-	  if (blocks_printed[index] == 0)
-	    {
-	      if (print_block_frame_labels (gdbarch,
-					    BLOCKVECTOR_BLOCK (bl, index),
-					    &have_default, stream))
-		values_printed = 1;
-	      blocks_printed[index] = 1;
-	    }
-	  index++;
-	}
-      if (have_default)
-	return;
-      if (values_printed && this_level_only)
-	return;
-
-      /* After handling the function's top-level block, stop.  Don't
-         continue to its superblock, the block of per-file symbols.
-         Also do not continue to the containing function of an inlined
-         function.  */
-      if (BLOCK_FUNCTION (block))
-	break;
-      block = BLOCK_SUPERBLOCK (block);
-    }
-
-  if (!values_printed && !this_level_only)
-    fprintf_filtered (stream, _("No catches.\n"));
-#endif
-}
-
 void
 locals_info (char *args, int from_tty)
 {
@@ -2051,14 +2013,6 @@ locals_info (char *args, int from_tty)
 			  0, gdb_stdout);
 }
 
-static void
-catch_info (char *ignore, int from_tty)
-{
-  /* Assume g++ compiled code; old GDB 4.16 behaviour.  */
-  print_frame_label_vars (get_selected_frame (_("No frame selected.")),
-                          0, gdb_stdout);
-}
-
 /* Iterate over all the argument variables in block B.
 
    Returns 1 if any argument was walked; 0 otherwise.  */
@@ -2068,7 +2022,7 @@ iterate_over_block_arg_vars (struct block *b,
 			     iterate_over_block_arg_local_vars_cb cb,
 			     void *cb_data)
 {
-  struct dict_iterator iter;
+  struct block_iterator iter;
   struct symbol *sym, *sym2;
 
   ALL_BLOCK_SYMBOLS (b, iter, sym)
@@ -2094,6 +2048,11 @@ iterate_over_block_arg_vars (struct block *b,
     }
 }
 
+/* Print all argument variables of the function of FRAME.
+   Print them with values to STREAM.
+
+   This function will invalidate FRAME.  */
+
 static void
 print_frame_arg_vars (struct frame_info *frame, struct ui_file *stream)
 {
@@ -2114,7 +2073,7 @@ print_frame_arg_vars (struct frame_info *frame, struct ui_file *stream)
       return;
     }
 
-  cb_data.frame = frame;
+  cb_data.frame_id = get_frame_id (frame);
   cb_data.num_tabs = 0;
   cb_data.stream = gdb_stdout;
   cb_data.values_printed = 0;
@@ -2122,6 +2081,9 @@ print_frame_arg_vars (struct frame_info *frame, struct ui_file *stream)
   iterate_over_block_arg_vars (SYMBOL_BLOCK_VALUE (func),
 			       do_print_variable_and_value, &cb_data);
 
+  /* do_print_variable_and_value invalidates FRAME.  */
+  frame = NULL;
+
   if (!cb_data.values_printed)
     fprintf_filtered (stream, _("No arguments.\n"));
 }
@@ -2316,6 +2278,7 @@ return_command (char *retval_exp, int from_tty)
   struct gdbarch *gdbarch;
   struct symbol *thisfun;
   struct value *return_value = NULL;
+  struct value *function = NULL;
   const char *query_prefix = "";
 
   thisframe = get_selected_frame ("No selected frame.");
@@ -2360,6 +2323,9 @@ return_command (char *retval_exp, int from_tty)
       if (value_lazy (return_value))
 	value_fetch_lazy (return_value);
 
+      if (thisfun != NULL)
+	function = read_var_value (thisfun, thisframe);
+
       if (TYPE_CODE (return_type) == TYPE_CODE_VOID)
 	/* If the return-type is "void", don't try to find the
            return-value's location.  However, do still evaluate the
@@ -2368,8 +2334,7 @@ return_command (char *retval_exp, int from_tty)
            occur.  */
 	return_value = NULL;
       else if (thisfun != NULL
-	       && using_struct_return (gdbarch,
-				       SYMBOL_TYPE (thisfun), return_type))
+	       && using_struct_return (gdbarch, function, return_type))
 	{
 	  query_prefix = "The location at which to store the "
 	    "function's return value is unknown.\n"
@@ -2404,12 +2369,11 @@ return_command (char *retval_exp, int from_tty)
     {
       struct type *return_type = value_type (return_value);
       struct gdbarch *gdbarch = get_regcache_arch (get_current_regcache ());
-      struct type *func_type = thisfun == NULL ? NULL : SYMBOL_TYPE (thisfun);
 
-      gdb_assert (gdbarch_return_value (gdbarch, func_type, return_type, NULL,
+      gdb_assert (gdbarch_return_value (gdbarch, function, return_type, NULL,
 					NULL, NULL)
 		  == RETURN_VALUE_REGISTER_CONVENTION);
-      gdbarch_return_value (gdbarch, func_type, return_type,
+      gdbarch_return_value (gdbarch, function, return_type,
 			    get_current_regcache (), NULL /*read*/,
 			    value_contents (return_value) /*write*/);
     }
@@ -2449,7 +2413,7 @@ func_command (char *arg, int from_tty)
     return;
 
   frame = parse_frame_specification ("0");
-  sals = decode_line_spec (arg, DECODE_LINE_FUNFIRSTLINE);
+  sals = decode_line_with_current_source (arg, DECODE_LINE_FUNFIRSTLINE);
   cleanups = make_cleanup (xfree, sals.sals);
   func_bounds = (struct function_bounds *) xmalloc (
 			      sizeof (struct function_bounds) * sals.nelts);
@@ -2615,9 +2579,6 @@ Usage: T <count>\n"));
 Select the stack frame that contains <func>.\n\
 Usage: func <name>\n"));
 
-  add_info ("catch", catch_info,
-	    _("Exceptions that can be caught in the current stack frame."));
-
   add_setshow_enum_cmd ("frame-arguments", class_stack,
 			print_frame_arguments_choices, &print_frame_arguments,
 			_("Set printing of non-scalar frame arguments"),
diff --git a/gdb/stack.h b/gdb/stack.h
index 172d7c2..50b2477 100644
--- a/gdb/stack.h
+++ b/gdb/stack.h
@@ -22,7 +22,7 @@
 
 void select_frame_command (char *level_exp, int from_tty);
 
-void find_frame_funname (struct frame_info *frame, char **funname,
+void find_frame_funname (struct frame_info *frame, const char **funname,
 			 enum language *funlang, struct symbol **funcp);
 
 typedef void (*iterate_over_block_arg_local_vars_cb) (const char *print_name,
diff --git a/gdb/stamp-h1 b/gdb/stamp-h1
deleted file mode 100644
index 4547fe1..0000000
--- a/gdb/stamp-h1
+++ /dev/null
@@ -1 +0,0 @@
-timestamp for config.h
diff --git a/gdb/stap-probe.c b/gdb/stap-probe.c
new file mode 100644
index 0000000..506e6c3
--- /dev/null
+++ b/gdb/stap-probe.c
@@ -0,0 +1,1578 @@
+/* SystemTap probe support for GDB.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "stap-probe.h"
+#include "probe.h"
+#include "vec.h"
+#include "ui-out.h"
+#include "objfiles.h"
+#include "arch-utils.h"
+#include "command.h"
+#include "gdbcmd.h"
+#include "filenames.h"
+#include "value.h"
+#include "exceptions.h"
+#include "ax.h"
+#include "ax-gdb.h"
+#include "complaints.h"
+#include "cli/cli-utils.h"
+#include "linespec.h"
+#include "user-regs.h"
+#include "parser-defs.h"
+#include "language.h"
+#include "elf-bfd.h"
+
+#include <ctype.h>
+
+/* The name of the SystemTap section where we will find information about
+   the probes.  */
+
+#define STAP_BASE_SECTION_NAME ".stapsdt.base"
+
+/* Forward declaration. */
+
+static const struct probe_ops stap_probe_ops;
+
+/* Should we display debug information for the probe's argument expression
+   parsing?  */
+
+static int stap_expression_debug = 0;
+
+/* The various possibilities of bitness defined for a probe's argument.
+
+   The relationship is:
+
+   - STAP_ARG_BITNESS_UNDEFINED:  The user hasn't specified the bitness.
+   - STAP_ARG_BITNESS_32BIT_UNSIGNED:  argument string starts with `4@'.
+   - STAP_ARG_BITNESS_32BIT_SIGNED:  argument string starts with `-4@'.
+   - STAP_ARG_BITNESS_64BIT_UNSIGNED:  argument string starts with `8@'.
+   - STAP_ARG_BITNESS_64BIT_SIGNED:  argument string starts with `-8@'.  */
+
+enum stap_arg_bitness
+{
+  STAP_ARG_BITNESS_UNDEFINED,
+  STAP_ARG_BITNESS_32BIT_UNSIGNED,
+  STAP_ARG_BITNESS_32BIT_SIGNED,
+  STAP_ARG_BITNESS_64BIT_UNSIGNED,
+  STAP_ARG_BITNESS_64BIT_SIGNED,
+};
+
+/* The following structure represents a single argument for the probe.  */
+
+struct stap_probe_arg
+{
+  /* The bitness of this argument.  */
+  enum stap_arg_bitness bitness;
+
+  /* The corresponding `struct type *' to the bitness.  */
+  struct type *atype;
+
+  /* The argument converted to an internal GDB expression.  */
+  struct expression *aexpr;
+};
+
+typedef struct stap_probe_arg stap_probe_arg_s;
+DEF_VEC_O (stap_probe_arg_s);
+
+struct stap_probe
+{
+  /* Generic information about the probe.  This shall be the first element
+     of this struct, in order to maintain binary compatibility with the
+     `struct probe' and be able to fully abstract it.  */
+  struct probe p;
+
+  /* If the probe has a semaphore associated, then this is the value of
+     it.  */
+  CORE_ADDR sem_addr;
+
+  unsigned int args_parsed : 1;
+  union
+    {
+      const char *text;
+
+      /* Information about each argument.  This is an array of `stap_probe_arg',
+	 with each entry representing one argument.  */
+      VEC (stap_probe_arg_s) *vec;
+    }
+  args_u;
+};
+
+/* When parsing the arguments, we have to establish different precedences
+   for the various kinds of asm operators.  This enumeration represents those
+   precedences.
+
+   This logic behind this is available at
+   <http://sourceware.org/binutils/docs/as/Infix-Ops.html#Infix-Ops>, or using
+   the command "info '(as)Infix Ops'".  */
+
+enum stap_operand_prec
+{
+  /* Lowest precedence, used for non-recognized operands or for the beginning
+     of the parsing process.  */
+  STAP_OPERAND_PREC_NONE = 0,
+
+  /* Precedence of logical OR.  */
+  STAP_OPERAND_PREC_LOGICAL_OR,
+
+  /* Precedence of logical AND.  */
+  STAP_OPERAND_PREC_LOGICAL_AND,
+
+  /* Precedence of additive (plus, minus) and comparative (equal, less,
+     greater-than, etc) operands.  */
+  STAP_OPERAND_PREC_ADD_CMP,
+
+  /* Precedence of bitwise operands (bitwise OR, XOR, bitwise AND,
+     logical NOT).  */
+  STAP_OPERAND_PREC_BITWISE,
+
+  /* Precedence of multiplicative operands (multiplication, division,
+     remainder, left shift and right shift).  */
+  STAP_OPERAND_PREC_MUL
+};
+
+static void stap_parse_argument_1 (struct stap_parse_info *p, int has_lhs,
+				   enum stap_operand_prec prec);
+
+static void stap_parse_argument_conditionally (struct stap_parse_info *p);
+
+/* Returns 1 if *S is an operator, zero otherwise.  */
+
+static int stap_is_operator (const char *op);
+
+static void
+show_stapexpressiondebug (struct ui_file *file, int from_tty,
+			  struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file, _("SystemTap Probe expression debugging is %s.\n"),
+		    value);
+}
+
+/* Returns the operator precedence level of OP, or STAP_OPERAND_PREC_NONE
+   if the operator code was not recognized.  */
+
+static enum stap_operand_prec
+stap_get_operator_prec (enum exp_opcode op)
+{
+  switch (op)
+    {
+    case BINOP_LOGICAL_OR:
+      return STAP_OPERAND_PREC_LOGICAL_OR;
+
+    case BINOP_LOGICAL_AND:
+      return STAP_OPERAND_PREC_LOGICAL_AND;
+
+    case BINOP_ADD:
+    case BINOP_SUB:
+    case BINOP_EQUAL:
+    case BINOP_NOTEQUAL:
+    case BINOP_LESS:
+    case BINOP_LEQ:
+    case BINOP_GTR:
+    case BINOP_GEQ:
+      return STAP_OPERAND_PREC_ADD_CMP;
+
+    case BINOP_BITWISE_IOR:
+    case BINOP_BITWISE_AND:
+    case BINOP_BITWISE_XOR:
+    case UNOP_LOGICAL_NOT:
+      return STAP_OPERAND_PREC_BITWISE;
+
+    case BINOP_MUL:
+    case BINOP_DIV:
+    case BINOP_REM:
+    case BINOP_LSH:
+    case BINOP_RSH:
+      return STAP_OPERAND_PREC_MUL;
+
+    default:
+      return STAP_OPERAND_PREC_NONE;
+    }
+}
+
+/* Given S, read the operator in it and fills the OP pointer with its code.
+   Return 1 on success, zero if the operator was not recognized.  */
+
+static enum exp_opcode
+stap_get_opcode (const char **s)
+{
+  const char c = **s;
+  enum exp_opcode op;
+
+  *s += 1;
+
+  switch (c)
+    {
+    case '*':
+      op = BINOP_MUL;
+      break;
+
+    case '/':
+      op = BINOP_DIV;
+      break;
+
+    case '%':
+      op = BINOP_REM;
+    break;
+
+    case '<':
+      op = BINOP_LESS;
+      if (**s == '<')
+	{
+	  *s += 1;
+	  op = BINOP_LSH;
+	}
+      else if (**s == '=')
+	{
+	  *s += 1;
+	  op = BINOP_LEQ;
+	}
+      else if (**s == '>')
+	{
+	  *s += 1;
+	  op = BINOP_NOTEQUAL;
+	}
+    break;
+
+    case '>':
+      op = BINOP_GTR;
+      if (**s == '>')
+	{
+	  *s += 1;
+	  op = BINOP_RSH;
+	}
+      else if (**s == '=')
+	{
+	  *s += 1;
+	  op = BINOP_GEQ;
+	}
+    break;
+
+    case '|':
+      op = BINOP_BITWISE_IOR;
+      if (**s == '|')
+	{
+	  *s += 1;
+	  op = BINOP_LOGICAL_OR;
+	}
+    break;
+
+    case '&':
+      op = BINOP_BITWISE_AND;
+      if (**s == '&')
+	{
+	  *s += 1;
+	  op = BINOP_LOGICAL_AND;
+	}
+    break;
+
+    case '^':
+      op = BINOP_BITWISE_XOR;
+      break;
+
+    case '!':
+      op = UNOP_LOGICAL_NOT;
+      break;
+
+    case '+':
+      op = BINOP_ADD;
+      break;
+
+    case '-':
+      op = BINOP_SUB;
+      break;
+
+    case '=':
+      gdb_assert (**s == '=');
+      op = BINOP_EQUAL;
+      break;
+
+    default:
+      internal_error (__FILE__, __LINE__,
+		      _("Invalid opcode in expression `%s' for SystemTap"
+			"probe"), *s);
+    }
+
+  return op;
+}
+
+/* Given the bitness of the argument, represented by B, return the
+   corresponding `struct type *'.  */
+
+static struct type *
+stap_get_expected_argument_type (struct gdbarch *gdbarch,
+				 enum stap_arg_bitness b)
+{
+  switch (b)
+    {
+    case STAP_ARG_BITNESS_UNDEFINED:
+      if (gdbarch_addr_bit (gdbarch) == 32)
+	return builtin_type (gdbarch)->builtin_uint32;
+      else
+	return builtin_type (gdbarch)->builtin_uint64;
+
+    case STAP_ARG_BITNESS_32BIT_SIGNED:
+      return builtin_type (gdbarch)->builtin_int32;
+
+    case STAP_ARG_BITNESS_32BIT_UNSIGNED:
+      return builtin_type (gdbarch)->builtin_uint32;
+
+    case STAP_ARG_BITNESS_64BIT_SIGNED:
+      return builtin_type (gdbarch)->builtin_int64;
+
+    case STAP_ARG_BITNESS_64BIT_UNSIGNED:
+      return builtin_type (gdbarch)->builtin_uint64;
+
+    default:
+      internal_error (__FILE__, __LINE__,
+		      _("Undefined bitness for probe."));
+      break;
+    }
+}
+
+/* Function responsible for parsing a register operand according to
+   SystemTap parlance.  Assuming:
+
+   RP  = register prefix
+   RS  = register suffix
+   RIP = register indirection prefix
+   RIS = register indirection suffix
+   
+   Then a register operand can be:
+   
+   [RIP] [RP] REGISTER [RS] [RIS]
+
+   This function takes care of a register's indirection, displacement and
+   direct access.  It also takes into consideration the fact that some
+   registers are named differently inside and outside GDB, e.g., PPC's
+   general-purpose registers are represented by integers in the assembly
+   language (e.g., `15' is the 15th general-purpose register), but inside
+   GDB they have a prefix (the letter `r') appended.  */
+
+static void
+stap_parse_register_operand (struct stap_parse_info *p)
+{
+  /* Simple flag to indicate whether we have seen a minus signal before
+     certain number.  */
+  int got_minus = 0;
+
+  /* Flags to indicate whether this register access is being displaced and/or
+     indirected.  */
+  int disp_p = 0, indirect_p = 0;
+  struct gdbarch *gdbarch = p->gdbarch;
+
+  /* Needed to generate the register name as a part of an expression.  */
+  struct stoken str;
+
+  /* Variables used to extract the register name from the probe's
+     argument.  */
+  const char *start;
+  char *regname;
+  int len;
+
+  /* Prefixes for the parser.  */
+  const char *reg_prefix = gdbarch_stap_register_prefix (gdbarch);
+  const char *reg_ind_prefix
+    = gdbarch_stap_register_indirection_prefix (gdbarch);
+  const char *gdb_reg_prefix = gdbarch_stap_gdb_register_prefix (gdbarch);
+  int reg_prefix_len = reg_prefix ? strlen (reg_prefix) : 0;
+  int reg_ind_prefix_len = reg_ind_prefix ? strlen (reg_ind_prefix) : 0;
+  int gdb_reg_prefix_len = gdb_reg_prefix ? strlen (gdb_reg_prefix) : 0;
+
+  /* Suffixes for the parser.  */
+  const char *reg_suffix = gdbarch_stap_register_suffix (gdbarch);
+  const char *reg_ind_suffix
+    = gdbarch_stap_register_indirection_suffix (gdbarch);
+  const char *gdb_reg_suffix = gdbarch_stap_gdb_register_suffix (gdbarch);
+  int reg_suffix_len = reg_suffix ? strlen (reg_suffix) : 0;
+  int reg_ind_suffix_len = reg_ind_suffix ? strlen (reg_ind_suffix) : 0;
+  int gdb_reg_suffix_len = gdb_reg_suffix ? strlen (gdb_reg_suffix) : 0;
+
+  /* Checking for a displacement argument.  */
+  if (*p->arg == '+')
+    {
+      /* If it's a plus sign, we don't need to do anything, just advance the
+	 pointer.  */
+      ++p->arg;
+    }
+
+  if (*p->arg == '-')
+    {
+      got_minus = 1;
+      ++p->arg;
+    }
+
+  if (isdigit (*p->arg))
+    {
+      /* The value of the displacement.  */
+      long displacement;
+
+      disp_p = 1;
+      displacement = strtol (p->arg, (char **) &p->arg, 10);
+
+      /* Generating the expression for the displacement.  */
+      write_exp_elt_opcode (OP_LONG);
+      write_exp_elt_type (builtin_type (gdbarch)->builtin_long);
+      write_exp_elt_longcst (displacement);
+      write_exp_elt_opcode (OP_LONG);
+      if (got_minus)
+	write_exp_elt_opcode (UNOP_NEG);
+    }
+
+  /* Getting rid of register indirection prefix.  */
+  if (reg_ind_prefix
+      && strncmp (p->arg, reg_ind_prefix, reg_ind_prefix_len) == 0)
+    {
+      indirect_p = 1;
+      p->arg += reg_ind_prefix_len;
+    }
+
+  if (disp_p && !indirect_p)
+    error (_("Invalid register displacement syntax on expression `%s'."),
+	   p->saved_arg);
+
+  /* Getting rid of register prefix.  */
+  if (reg_prefix && strncmp (p->arg, reg_prefix, reg_prefix_len) == 0)
+    p->arg += reg_prefix_len;
+
+  /* Now we should have only the register name.  Let's extract it and get
+     the associated number.  */
+  start = p->arg;
+
+  /* We assume the register name is composed by letters and numbers.  */
+  while (isalnum (*p->arg))
+    ++p->arg;
+
+  len = p->arg - start;
+
+  regname = alloca (len + gdb_reg_prefix_len + gdb_reg_suffix_len + 1);
+  regname[0] = '\0';
+
+  /* We only add the GDB's register prefix/suffix if we are dealing with
+     a numeric register.  */
+  if (gdb_reg_prefix && isdigit (*start))
+    {
+      strncpy (regname, gdb_reg_prefix, gdb_reg_prefix_len);
+      strncpy (regname + gdb_reg_prefix_len, start, len);
+
+      if (gdb_reg_suffix)
+	strncpy (regname + gdb_reg_prefix_len + len,
+		 gdb_reg_suffix, gdb_reg_suffix_len);
+
+      len += gdb_reg_prefix_len + gdb_reg_suffix_len;
+    }
+  else
+    strncpy (regname, start, len);
+
+  regname[len] = '\0';
+
+  /* Is this a valid register name?  */
+  if (user_reg_map_name_to_regnum (gdbarch, regname, len) == -1)
+    error (_("Invalid register name `%s' on expression `%s'."),
+	   regname, p->saved_arg);
+
+  write_exp_elt_opcode (OP_REGISTER);
+  str.ptr = regname;
+  str.length = len;
+  write_exp_string (str);
+  write_exp_elt_opcode (OP_REGISTER);
+
+  if (indirect_p)
+    {
+      if (disp_p)
+	write_exp_elt_opcode (BINOP_ADD);
+
+      /* Casting to the expected type.  */
+      write_exp_elt_opcode (UNOP_CAST);
+      write_exp_elt_type (lookup_pointer_type (p->arg_type));
+      write_exp_elt_opcode (UNOP_CAST);
+
+      write_exp_elt_opcode (UNOP_IND);
+    }
+
+  /* Getting rid of the register name suffix.  */
+  if (reg_suffix)
+    {
+      if (strncmp (p->arg, reg_suffix, reg_suffix_len) != 0)
+	error (_("Missing register name suffix `%s' on expression `%s'."),
+	       reg_suffix, p->saved_arg);
+
+      p->arg += reg_suffix_len;
+    }
+
+  /* Getting rid of the register indirection suffix.  */
+  if (indirect_p && reg_ind_suffix)
+    {
+      if (strncmp (p->arg, reg_ind_suffix, reg_ind_suffix_len) != 0)
+	error (_("Missing indirection suffix `%s' on expression `%s'."),
+	       reg_ind_suffix, p->saved_arg);
+
+      p->arg += reg_ind_suffix_len;
+    }
+}
+
+/* This function is responsible for parsing a single operand.
+
+   A single operand can be:
+
+      - an unary operation (e.g., `-5', `~2', or even with subexpressions
+        like `-(2 + 1)')
+      - a register displacement, which will be treated as a register
+        operand (e.g., `-4(%eax)' on x86)
+      - a numeric constant, or
+      - a register operand (see function `stap_parse_register_operand')
+
+   The function also calls special-handling functions to deal with
+   unrecognized operands, allowing arch-specific parsers to be
+   created.  */
+
+static void
+stap_parse_single_operand (struct stap_parse_info *p)
+{
+  struct gdbarch *gdbarch = p->gdbarch;
+
+  /* Prefixes for the parser.  */
+  const char *const_prefix = gdbarch_stap_integer_prefix (gdbarch);
+  const char *reg_prefix = gdbarch_stap_register_prefix (gdbarch);
+  const char *reg_ind_prefix
+    = gdbarch_stap_register_indirection_prefix (gdbarch);
+  int const_prefix_len = const_prefix ? strlen (const_prefix) : 0;
+  int reg_prefix_len = reg_prefix ? strlen (reg_prefix) : 0;
+  int reg_ind_prefix_len = reg_ind_prefix ? strlen (reg_ind_prefix) : 0;
+
+  /* Suffixes for the parser.  */
+  const char *const_suffix = gdbarch_stap_integer_suffix (gdbarch);
+  int const_suffix_len = const_suffix ? strlen (const_suffix) : 0;
+
+  /* We first try to parse this token as a "special token".  */
+  if (gdbarch_stap_parse_special_token_p (gdbarch))
+    {
+      int ret = gdbarch_stap_parse_special_token (gdbarch, p);
+
+      if (ret)
+	{
+	  /* If the return value of the above function is not zero,
+	     it means it successfully parsed the special token.
+
+	     If it is NULL, we try to parse it using our method.  */
+	  return;
+	}
+    }
+
+  if (*p->arg == '-' || *p->arg == '~' || *p->arg == '+')
+    {
+      char c = *p->arg;
+      int number;
+
+      /* We use this variable to do a lookahead.  */
+      const char *tmp = p->arg;
+
+      ++tmp;
+
+      /* This is an unary operation.  Here is a list of allowed tokens
+	 here:
+
+	 - numeric literal;
+	 - number (from register displacement)
+	 - subexpression (beginning with `(')
+
+	 We handle the register displacement here, and the other cases
+	 recursively.  */
+      if (p->inside_paren_p)
+	tmp = skip_spaces_const (tmp);
+
+      if (isdigit (*tmp))
+	number = strtol (tmp, (char **) &tmp, 10);
+
+      if (!reg_ind_prefix
+	  || strncmp (tmp, reg_ind_prefix, reg_ind_prefix_len) != 0)
+	{
+	  /* This is not a displacement.  We skip the operator, and deal
+	     with it later.  */
+	  ++p->arg;
+	  stap_parse_argument_conditionally (p);
+	  if (c == '-')
+	    write_exp_elt_opcode (UNOP_NEG);
+	  else if (c == '~')
+	    write_exp_elt_opcode (UNOP_COMPLEMENT);
+	}
+      else
+	{
+	  /* If we are here, it means it is a displacement.  The only
+	     operations allowed here are `-' and `+'.  */
+	  if (c == '~')
+	    error (_("Invalid operator `%c' for register displacement "
+		     "on expression `%s'."), c, p->saved_arg);
+
+	  stap_parse_register_operand (p);
+	}
+    }
+  else if (isdigit (*p->arg))
+    {
+      /* A temporary variable, needed for lookahead.  */
+      const char *tmp = p->arg;
+      long number;
+
+      /* We can be dealing with a numeric constant (if `const_prefix' is
+	 NULL), or with a register displacement.  */
+      number = strtol (tmp, (char **) &tmp, 10);
+
+      if (p->inside_paren_p)
+	tmp = skip_spaces_const (tmp);
+      if (!const_prefix && reg_ind_prefix
+	  && strncmp (tmp, reg_ind_prefix, reg_ind_prefix_len) != 0)
+	{
+	  /* We are dealing with a numeric constant.  */
+	  write_exp_elt_opcode (OP_LONG);
+	  write_exp_elt_type (builtin_type (gdbarch)->builtin_long);
+	  write_exp_elt_longcst (number);
+	  write_exp_elt_opcode (OP_LONG);
+
+	  p->arg = tmp;
+
+	  if (const_suffix)
+	    {
+	      if (strncmp (p->arg, const_suffix, const_suffix_len) == 0)
+		p->arg += const_suffix_len;
+	      else
+		error (_("Invalid constant suffix on expression `%s'."),
+		       p->saved_arg);
+	    }
+	}
+      else if (reg_ind_prefix
+	       && strncmp (tmp, reg_ind_prefix, reg_ind_prefix_len) == 0)
+	stap_parse_register_operand (p);
+      else
+	error (_("Unknown numeric token on expression `%s'."),
+	       p->saved_arg);
+    }
+  else if (const_prefix
+	   && strncmp (p->arg, const_prefix, const_prefix_len) == 0)
+    {
+      /* We are dealing with a numeric constant.  */
+      long number;
+
+      p->arg += const_prefix_len;
+      number = strtol (p->arg, (char **) &p->arg, 10);
+
+      write_exp_elt_opcode (OP_LONG);
+      write_exp_elt_type (builtin_type (gdbarch)->builtin_long);
+      write_exp_elt_longcst (number);
+      write_exp_elt_opcode (OP_LONG);
+
+      if (const_suffix)
+	{
+	  if (strncmp (p->arg, const_suffix, const_suffix_len) == 0)
+	    p->arg += const_suffix_len;
+	  else
+	    error (_("Invalid constant suffix on expression `%s'."),
+		   p->saved_arg);
+	}
+    }
+  else if ((reg_prefix
+	    && strncmp (p->arg, reg_prefix, reg_prefix_len) == 0)
+	   || (reg_ind_prefix
+	       && strncmp (p->arg, reg_ind_prefix, reg_ind_prefix_len) == 0))
+    stap_parse_register_operand (p);
+  else
+    error (_("Operator `%c' not recognized on expression `%s'."),
+	   *p->arg, p->saved_arg);
+}
+
+/* This function parses an argument conditionally, based on single or
+   non-single operands.  A non-single operand would be a parenthesized
+   expression (e.g., `(2 + 1)'), and a single operand is anything that
+   starts with `-', `~', `+' (i.e., unary operators), a digit, or
+   something recognized by `gdbarch_stap_is_single_operand'.  */
+
+static void
+stap_parse_argument_conditionally (struct stap_parse_info *p)
+{
+  if (*p->arg == '-' || *p->arg == '~' || *p->arg == '+' /* Unary.  */
+      || isdigit (*p->arg)
+      || gdbarch_stap_is_single_operand (p->gdbarch, p->arg))
+    stap_parse_single_operand (p);
+  else if (*p->arg == '(')
+    {
+      /* We are dealing with a parenthesized operand.  It means we
+	 have to parse it as it was a separate expression, without
+	 left-side or precedence.  */
+      ++p->arg;
+      p->arg = skip_spaces_const (p->arg);
+      ++p->inside_paren_p;
+
+      stap_parse_argument_1 (p, 0, STAP_OPERAND_PREC_NONE);
+
+      --p->inside_paren_p;
+      if (*p->arg != ')')
+	error (_("Missign close-paren on expression `%s'."),
+	       p->saved_arg);
+
+      ++p->arg;
+      if (p->inside_paren_p)
+	p->arg = skip_spaces_const (p->arg);
+    }
+  else
+    error (_("Cannot parse expression `%s'."), p->saved_arg);
+}
+
+/* Helper function for `stap_parse_argument'.  Please, see its comments to
+   better understand what this function does.  */
+
+static void
+stap_parse_argument_1 (struct stap_parse_info *p, int has_lhs,
+		       enum stap_operand_prec prec)
+{
+  /* This is an operator-precedence parser.
+
+     We work with left- and right-sides of expressions, and
+     parse them depending on the precedence of the operators
+     we find.  */
+
+  if (p->inside_paren_p)
+    p->arg = skip_spaces_const (p->arg);
+
+  if (!has_lhs)
+    {
+      /* We were called without a left-side, either because this is the
+	 first call, or because we were called to parse a parenthesized
+	 expression.  It doesn't really matter; we have to parse the
+	 left-side in order to continue the process.  */
+      stap_parse_argument_conditionally (p);
+    }
+
+  /* Start to parse the right-side, and to "join" left and right sides
+     depending on the operation specified.
+
+     This loop shall continue until we run out of characters in the input,
+     or until we find a close-parenthesis, which means that we've reached
+     the end of a sub-expression.  */
+  while (p->arg && *p->arg && *p->arg != ')' && !isspace (*p->arg))
+    {
+      const char *tmp_exp_buf;
+      enum exp_opcode opcode;
+      enum stap_operand_prec cur_prec;
+
+      if (!stap_is_operator (p->arg))
+	error (_("Invalid operator `%c' on expression `%s'."), *p->arg,
+	       p->saved_arg);
+
+      /* We have to save the current value of the expression buffer because
+	 the `stap_get_opcode' modifies it in order to get the current
+	 operator.  If this operator's precedence is lower than PREC, we
+	 should return and not advance the expression buffer pointer.  */
+      tmp_exp_buf = p->arg;
+      opcode = stap_get_opcode (&tmp_exp_buf);
+
+      cur_prec = stap_get_operator_prec (opcode);
+      if (cur_prec < prec)
+	{
+	  /* If the precedence of the operator that we are seeing now is
+	     lower than the precedence of the first operator seen before
+	     this parsing process began, it means we should stop parsing
+	     and return.  */
+	  break;
+	}
+
+      p->arg = tmp_exp_buf;
+      if (p->inside_paren_p)
+	p->arg = skip_spaces_const (p->arg);
+
+      /* Parse the right-side of the expression.  */
+      stap_parse_argument_conditionally (p);
+
+      /* While we still have operators, try to parse another
+	 right-side, but using the current right-side as a left-side.  */
+      while (*p->arg && stap_is_operator (p->arg))
+	{
+	  enum exp_opcode lookahead_opcode;
+	  enum stap_operand_prec lookahead_prec;
+
+	  /* Saving the current expression buffer position.  The explanation
+	     is the same as above.  */
+	  tmp_exp_buf = p->arg;
+	  lookahead_opcode = stap_get_opcode (&tmp_exp_buf);
+	  lookahead_prec = stap_get_operator_prec (lookahead_opcode);
+
+	  if (lookahead_prec <= prec)
+	    {
+	      /* If we are dealing with an operator whose precedence is lower
+		 than the first one, just abandon the attempt.  */
+	      break;
+	    }
+
+	  /* Parse the right-side of the expression, but since we already
+	     have a left-side at this point, set `has_lhs' to 1.  */
+	  stap_parse_argument_1 (p, 1, lookahead_prec);
+	}
+
+      write_exp_elt_opcode (opcode);
+    }
+}
+
+/* Parse a probe's argument.
+
+   Assuming that:
+
+   LP = literal integer prefix
+   LS = literal integer suffix
+
+   RP = register prefix
+   RS = register suffix
+
+   RIP = register indirection prefix
+   RIS = register indirection suffix
+
+   This routine assumes that arguments' tokens are of the form:
+
+   - [LP] NUMBER [LS]
+   - [RP] REGISTER [RS]
+   - [RIP] [RP] REGISTER [RS] [RIS]
+   - If we find a number without LP, we try to parse it as a literal integer
+   constant (if LP == NULL), or as a register displacement.
+   - We count parenthesis, and only skip whitespaces if we are inside them.
+   - If we find an operator, we skip it.
+
+   This function can also call a special function that will try to match
+   unknown tokens.  It will return 1 if the argument has been parsed
+   successfully, or zero otherwise.  */
+
+static struct expression *
+stap_parse_argument (const char **arg, struct type *atype,
+		     struct gdbarch *gdbarch)
+{
+  struct stap_parse_info p;
+  struct cleanup *back_to;
+
+  /* We need to initialize the expression buffer, in order to begin
+     our parsing efforts.  The language here does not matter, since we
+     are using our own parser.  */
+  initialize_expout (10, current_language, gdbarch);
+  back_to = make_cleanup (free_current_contents, &expout);
+
+  p.saved_arg = *arg;
+  p.arg = *arg;
+  p.arg_type = atype;
+  p.gdbarch = gdbarch;
+  p.inside_paren_p = 0;
+
+  stap_parse_argument_1 (&p, 0, STAP_OPERAND_PREC_NONE);
+
+  discard_cleanups (back_to);
+
+  gdb_assert (p.inside_paren_p == 0);
+
+  /* Casting the final expression to the appropriate type.  */
+  write_exp_elt_opcode (UNOP_CAST);
+  write_exp_elt_type (atype);
+  write_exp_elt_opcode (UNOP_CAST);
+
+  reallocate_expout ();
+
+  p.arg = skip_spaces_const (p.arg);
+  *arg = p.arg;
+
+  return expout;
+}
+
+/* Function which parses an argument string from PROBE, correctly splitting
+   the arguments and storing their information in properly ways.
+
+   Consider the following argument string (x86 syntax):
+
+   `4@%eax 4@$10'
+
+   We have two arguments, `%eax' and `$10', both with 32-bit unsigned bitness.
+   This function basically handles them, properly filling some structures with
+   this information.  */
+
+static void
+stap_parse_probe_arguments (struct stap_probe *probe, struct objfile *objfile)
+{
+  const char *cur;
+  struct gdbarch *gdbarch = get_objfile_arch (objfile);
+
+  gdb_assert (!probe->args_parsed);
+  cur = probe->args_u.text;
+  probe->args_parsed = 1;
+  probe->args_u.vec = NULL;
+
+  if (!cur || !*cur || *cur == ':')
+    return;
+
+  while (*cur)
+    {
+      struct stap_probe_arg arg;
+      enum stap_arg_bitness b;
+      int got_minus = 0;
+      struct expression *expr;
+
+      memset (&arg, 0, sizeof (arg));
+
+      /* We expect to find something like:
+
+	 N at OP
+
+	 Where `N' can be [+,-][4,8].  This is not mandatory, so
+	 we check it here.  If we don't find it, go to the next
+	 state.  */
+      if ((*cur == '-' && cur[1] && cur[2] != '@')
+	  && cur[1] != '@')
+	arg.bitness = STAP_ARG_BITNESS_UNDEFINED;
+      else
+	{
+	  if (*cur == '-')
+	    {
+	      /* Discard the `-'.  */
+	      ++cur;
+	      got_minus = 1;
+	    }
+
+	  if (*cur == '4')
+	    b = (got_minus ? STAP_ARG_BITNESS_32BIT_SIGNED
+		 : STAP_ARG_BITNESS_32BIT_UNSIGNED);
+	  else if (*cur == '8')
+	    b = (got_minus ? STAP_ARG_BITNESS_64BIT_SIGNED
+		 : STAP_ARG_BITNESS_64BIT_UNSIGNED);
+	  else
+	    {
+	      /* We have an error, because we don't expect anything
+		 except 4 and 8.  */
+	      complaint (&symfile_complaints,
+			 _("unrecognized bitness `%c' for probe `%s'"),
+			 *cur, probe->p.name);
+	      return;
+	    }
+
+	  arg.bitness = b;
+	  arg.atype = stap_get_expected_argument_type (gdbarch, b);
+
+	  /* Discard the number and the `@' sign.  */
+	  cur += 2;
+	}
+
+      expr = stap_parse_argument (&cur, arg.atype, gdbarch);
+
+      if (stap_expression_debug)
+	dump_raw_expression (expr, gdb_stdlog,
+			     "before conversion to prefix form");
+
+      prefixify_expression (expr);
+
+      if (stap_expression_debug)
+	dump_prefix_expression (expr, gdb_stdlog);
+
+      arg.aexpr = expr;
+
+      /* Start it over again.  */
+      cur = skip_spaces_const (cur);
+
+      VEC_safe_push (stap_probe_arg_s, probe->args_u.vec, &arg);
+    }
+}
+
+/* Given PROBE, returns the number of arguments present in that probe's
+   argument string.  */
+
+static unsigned
+stap_get_probe_argument_count (struct probe *probe_generic,
+			       struct objfile *objfile)
+{
+  struct stap_probe *probe = (struct stap_probe *) probe_generic;
+
+  gdb_assert (probe_generic->pops == &stap_probe_ops);
+
+  if (!probe->args_parsed)
+    stap_parse_probe_arguments (probe, objfile);
+
+  gdb_assert (probe->args_parsed);
+  return VEC_length (stap_probe_arg_s, probe->args_u.vec);
+}
+
+/* Return 1 if OP is a valid operator inside a probe argument, or zero
+   otherwise.  */
+
+static int
+stap_is_operator (const char *op)
+{
+  int ret = 1;
+
+  switch (*op)
+    {
+    case '*':
+    case '/':
+    case '%':
+    case '^':
+    case '!':
+    case '+':
+    case '-':
+    case '<':
+    case '>':
+    case '|':
+    case '&':
+      break;
+
+    case '=':
+      if (op[1] != '=')
+	ret = 0;
+      break;
+
+    default:
+      /* We didn't find any operator.  */
+      ret = 0;
+    }
+
+  return ret;
+}
+
+static struct stap_probe_arg *
+stap_get_arg (struct stap_probe *probe, struct objfile *objfile, unsigned n)
+{
+  if (!probe->args_parsed)
+    stap_parse_probe_arguments (probe, objfile);
+
+  return VEC_index (stap_probe_arg_s, probe->args_u.vec, n);
+}
+
+/* Evaluate the probe's argument N (indexed from 0), returning a value
+   corresponding to it.  Assertion is thrown if N does not exist.  */
+
+static struct value *
+stap_evaluate_probe_argument (struct probe *probe_generic,
+			      struct objfile *objfile, unsigned n)
+{
+  struct stap_probe *stap_probe = (struct stap_probe *) probe_generic;
+  struct stap_probe_arg *arg;
+  int pos = 0;
+
+  gdb_assert (probe_generic->pops == &stap_probe_ops);
+
+  arg = stap_get_arg (stap_probe, objfile, n);
+  return evaluate_subexp_standard (arg->atype, arg->aexpr, &pos, EVAL_NORMAL);
+}
+
+/* Compile the probe's argument N (indexed from 0) to agent expression.
+   Assertion is thrown if N does not exist.  */
+
+static void
+stap_compile_to_ax (struct probe *probe_generic, struct objfile *objfile,
+		    struct agent_expr *expr, struct axs_value *value,
+		    unsigned n)
+{
+  struct stap_probe *stap_probe = (struct stap_probe *) probe_generic;
+  struct stap_probe_arg *arg;
+  union exp_element *pc;
+
+  gdb_assert (probe_generic->pops == &stap_probe_ops);
+
+  arg = stap_get_arg (stap_probe, objfile, n);
+
+  pc = arg->aexpr->elts;
+  gen_expr (arg->aexpr, &pc, expr, value);
+
+  require_rvalue (expr, value);
+  value->type = arg->atype;
+}
+
+/* Destroy (free) the data related to PROBE.  PROBE memory itself is not feed
+   as it is allocated from OBJFILE_OBSTACK.  */
+
+static void
+stap_probe_destroy (struct probe *probe_generic)
+{
+  struct stap_probe *probe = (struct stap_probe *) probe_generic;
+
+  gdb_assert (probe_generic->pops == &stap_probe_ops);
+
+  if (probe->args_parsed)
+    {
+      struct stap_probe_arg *arg;
+      int ix;
+
+      for (ix = 0; VEC_iterate (stap_probe_arg_s, probe->args_u.vec, ix, arg);
+	   ++ix)
+	xfree (arg->aexpr);
+      VEC_free (stap_probe_arg_s, probe->args_u.vec);
+    }
+}
+
+

+
+/* This is called to compute the value of one of the $_probe_arg*
+   convenience variables.  */
+
+static struct value *
+compute_probe_arg (struct gdbarch *arch, struct internalvar *ivar,
+		   void *data)
+{
+  struct frame_info *frame = get_selected_frame (_("No frame selected"));
+  CORE_ADDR pc = get_frame_pc (frame);
+  int sel = (int) (uintptr_t) data;
+  struct objfile *objfile;
+  struct probe *pc_probe;
+  unsigned n_args;
+
+  /* SEL == -1 means "_probe_argc".  */
+  gdb_assert (sel >= -1);
+
+  pc_probe = find_probe_by_pc (pc, &objfile);
+  if (pc_probe == NULL)
+    error (_("No SystemTap probe at PC %s"), core_addr_to_string (pc));
+
+  n_args
+    = objfile->sf->sym_probe_fns->sym_get_probe_argument_count (objfile,
+								pc_probe);
+  if (sel == -1)
+    return value_from_longest (builtin_type (arch)->builtin_int, n_args);
+
+  if (sel >= n_args)
+    error (_("Invalid probe argument %d -- probe has %u arguments available"),
+	   sel, n_args);
+
+  return objfile->sf->sym_probe_fns->sym_evaluate_probe_argument (objfile,
+								  pc_probe,
+								  sel);
+}
+
+/* This is called to compile one of the $_probe_arg* convenience
+   variables into an agent expression.  */
+
+static void
+compile_probe_arg (struct internalvar *ivar, struct agent_expr *expr,
+		   struct axs_value *value, void *data)
+{
+  CORE_ADDR pc = expr->scope;
+  int sel = (int) (uintptr_t) data;
+  struct objfile *objfile;
+  struct probe *pc_probe;
+  int n_probes;
+
+  /* SEL == -1 means "_probe_argc".  */
+  gdb_assert (sel >= -1);
+
+  pc_probe = find_probe_by_pc (pc, &objfile);
+  if (pc_probe == NULL)
+    error (_("No SystemTap probe at PC %s"), core_addr_to_string (pc));
+
+  n_probes
+    = objfile->sf->sym_probe_fns->sym_get_probe_argument_count (objfile,
+								pc_probe);
+  if (sel == -1)
+    {
+      value->kind = axs_rvalue;
+      value->type = builtin_type (expr->gdbarch)->builtin_int;
+      ax_const_l (expr, n_probes);
+      return;
+    }
+
+  gdb_assert (sel >= 0);
+  if (sel >= n_probes)
+    error (_("Invalid probe argument %d -- probe has %d arguments available"),
+	   sel, n_probes);
+
+  objfile->sf->sym_probe_fns->sym_compile_to_ax (objfile, pc_probe,
+						 expr, value, sel);
+}
+
+

+
+/* Set or clear a SystemTap semaphore.  ADDRESS is the semaphore's
+   address.  SET is zero if the semaphore should be cleared, or one
+   if it should be set.  This is a helper function for `stap_semaphore_down'
+   and `stap_semaphore_up'.  */
+
+static void
+stap_modify_semaphore (CORE_ADDR address, int set, struct gdbarch *gdbarch)
+{
+  gdb_byte bytes[sizeof (LONGEST)];
+  /* The ABI specifies "unsigned short".  */
+  struct type *type = builtin_type (gdbarch)->builtin_unsigned_short;
+  ULONGEST value;
+
+  if (address == 0)
+    return;
+
+  /* Swallow errors.  */
+  if (target_read_memory (address, bytes, TYPE_LENGTH (type)) != 0)
+    {
+      warning (_("Could not read the value of a SystemTap semaphore."));
+      return;
+    }
+
+  value = extract_unsigned_integer (bytes, TYPE_LENGTH (type),
+				    gdbarch_byte_order (gdbarch));
+  /* Note that we explicitly don't worry about overflow or
+     underflow.  */
+  if (set)
+    ++value;
+  else
+    --value;
+
+  store_unsigned_integer (bytes, TYPE_LENGTH (type),
+			  gdbarch_byte_order (gdbarch), value);
+
+  if (target_write_memory (address, bytes, TYPE_LENGTH (type)) != 0)
+    warning (_("Could not write the value of a SystemTap semaphore."));
+}
+
+/* Set a SystemTap semaphore.  SEM is the semaphore's address.  Semaphores
+   act as reference counters, so calls to this function must be paired with
+   calls to `stap_semaphore_down'.
+
+   This function and `stap_semaphore_down' race with another tool changing
+   the probes, but that is too rare to care.  */
+
+static void
+stap_set_semaphore (struct probe *probe_generic, struct gdbarch *gdbarch)
+{
+  struct stap_probe *probe = (struct stap_probe *) probe_generic;
+
+  gdb_assert (probe_generic->pops == &stap_probe_ops);
+
+  stap_modify_semaphore (probe->sem_addr, 1, gdbarch);
+}
+
+/* Clear a SystemTap semaphore.  SEM is the semaphore's address.  */
+
+static void
+stap_clear_semaphore (struct probe *probe_generic, struct gdbarch *gdbarch)
+{
+  struct stap_probe *probe = (struct stap_probe *) probe_generic;
+
+  gdb_assert (probe_generic->pops == &stap_probe_ops);
+
+  stap_modify_semaphore (probe->sem_addr, 0, gdbarch);
+}
+
+/* Implementation of `$_probe_arg*' set of variables.  */
+
+static const struct internalvar_funcs probe_funcs =
+{
+  compute_probe_arg,
+  compile_probe_arg,
+  NULL
+};
+
+/* Helper function that parses the information contained in a
+   SystemTap's probe.  Basically, the information consists in:
+
+   - Probe's PC address;
+   - Link-time section address of `.stapsdt.base' section;
+   - Link-time address of the semaphore variable, or ZERO if the
+     probe doesn't have an associated semaphore;
+   - Probe's provider name;
+   - Probe's name;
+   - Probe's argument format
+   
+   This function returns 1 if the handling was successful, and zero
+   otherwise.  */
+
+static void
+handle_stap_probe (struct objfile *objfile, struct sdt_note *el,
+		   VEC (probe_p) **probesp, CORE_ADDR base)
+{
+  bfd *abfd = objfile->obfd;
+  int size = bfd_get_arch_size (abfd) / 8;
+  struct gdbarch *gdbarch = get_objfile_arch (objfile);
+  struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
+  CORE_ADDR base_ref;
+  const char *probe_args = NULL;
+  struct stap_probe *ret;
+
+  ret = obstack_alloc (&objfile->objfile_obstack, sizeof (*ret));
+  ret->p.pops = &stap_probe_ops;
+
+  /* Provider and the name of the probe.  */
+  ret->p.provider = &el->data[3 * size];
+  ret->p.name = memchr (ret->p.provider, '\0',
+			(char *) el->data + el->size - ret->p.provider);
+  /* Making sure there is a name.  */
+  if (!ret->p.name)
+    {
+      complaint (&symfile_complaints, _("corrupt probe name when "
+					"reading `%s'"), objfile->name);
+
+      /* There is no way to use a probe without a name or a provider, so
+	 returning zero here makes sense.  */
+      return;
+    }
+  else
+    ++ret->p.name;
+
+  /* Retrieving the probe's address.  */
+  ret->p.address = extract_typed_address (&el->data[0], ptr_type);
+
+  /* Link-time sh_addr of `.stapsdt.base' section.  */
+  base_ref = extract_typed_address (&el->data[size], ptr_type);
+
+  /* Semaphore address.  */
+  ret->sem_addr = extract_typed_address (&el->data[2 * size], ptr_type);
+
+  ret->p.address += (ANOFFSET (objfile->section_offsets,
+			       SECT_OFF_TEXT (objfile))
+		     + base - base_ref);
+  if (ret->sem_addr)
+    ret->sem_addr += (ANOFFSET (objfile->section_offsets,
+				SECT_OFF_DATA (objfile))
+		      + base - base_ref);
+
+  /* Arguments.  We can only extract the argument format if there is a valid
+     name for this probe.  */
+  probe_args = memchr (ret->p.name, '\0',
+		       (char *) el->data + el->size - ret->p.name);
+
+  if (probe_args != NULL)
+    ++probe_args;
+
+  if (probe_args == NULL || (memchr (probe_args, '\0',
+				     (char *) el->data + el->size - ret->p.name)
+			     != el->data + el->size - 1))
+    {
+      complaint (&symfile_complaints, _("corrupt probe argument when "
+					"reading `%s'"), objfile->name);
+      /* If the argument string is NULL, it means some problem happened with
+	 it.  So we return 0.  */
+      return;
+    }
+
+  ret->args_parsed = 0;
+  ret->args_u.text = (void *) probe_args;
+
+  /* Successfully created probe.  */
+  VEC_safe_push (probe_p, *probesp, (struct probe *) ret);
+}
+
+/* Helper function which tries to find the base address of the SystemTap
+   base section named STAP_BASE_SECTION_NAME.  */
+
+static void
+get_stap_base_address_1 (bfd *abfd, asection *sect, void *obj)
+{
+  asection **ret = obj;
+
+  if ((sect->flags & (SEC_DATA | SEC_ALLOC | SEC_HAS_CONTENTS))
+      && sect->name && !strcmp (sect->name, STAP_BASE_SECTION_NAME))
+    *ret = sect;
+}
+
+/* Helper function which iterates over every section in the BFD file,
+   trying to find the base address of the SystemTap base section.
+   Returns 1 if found (setting BASE to the proper value), zero otherwise.  */
+
+static int
+get_stap_base_address (bfd *obfd, bfd_vma *base)
+{
+  asection *ret = NULL;
+
+  bfd_map_over_sections (obfd, get_stap_base_address_1, (void *) &ret);
+
+  if (!ret)
+    {
+      complaint (&symfile_complaints, _("could not obtain base address for "
+					"SystemTap section on objfile `%s'."),
+		 obfd->filename);
+      return 0;
+    }
+
+  if (base)
+    *base = ret->vma;
+
+  return 1;
+}
+
+/* Helper function for `elf_get_probes', which gathers information about all
+   SystemTap probes from OBJFILE.  */
+
+static void
+stap_get_probes (VEC (probe_p) **probesp, struct objfile *objfile)
+{
+  /* If we are here, then this is the first time we are parsing the
+     SystemTap probe's information.  We basically have to count how many
+     probes the objfile has, and then fill in the necessary information
+     for each one.  */
+  bfd *obfd = objfile->obfd;
+  bfd_vma base;
+  struct sdt_note *iter;
+  unsigned save_probesp_len = VEC_length (probe_p, *probesp);
+
+  if (objfile->separate_debug_objfile_backlink != NULL)
+    {
+      /* This is a .debug file, not the objfile itself.  */
+      return;
+    }
+
+  if (!elf_tdata (obfd)->sdt_note_head)
+    {
+      /* There isn't any probe here.  */
+      return;
+    }
+
+  if (!get_stap_base_address (obfd, &base))
+    {
+      /* There was an error finding the base address for the section.
+	 Just return NULL.  */
+      return;
+    }
+
+  /* Parsing each probe's information.  */
+  for (iter = elf_tdata (obfd)->sdt_note_head; iter; iter = iter->next)
+    {
+      /* We first have to handle all the information about the
+	 probe which is present in the section.  */
+      handle_stap_probe (objfile, iter, probesp, base);
+    }
+
+  if (save_probesp_len == VEC_length (probe_p, *probesp))
+    {
+      /* If we are here, it means we have failed to parse every known
+	 probe.  */
+      complaint (&symfile_complaints, _("could not parse SystemTap probe(s) "
+					"from inferior"));
+      return;
+    }
+}
+
+static void
+stap_relocate (struct probe *probe_generic, CORE_ADDR delta)
+{
+  struct stap_probe *probe = (struct stap_probe *) probe_generic;
+
+  gdb_assert (probe_generic->pops == &stap_probe_ops);
+
+  probe->p.address += delta;
+  if (probe->sem_addr)
+    probe->sem_addr += delta;
+}
+
+static int
+stap_probe_is_linespec (const char **linespecp)
+{
+  static const char *const keywords[] = { "-pstap", "-probe-stap", NULL };
+
+  return probe_is_linespec_by_keyword (linespecp, keywords);
+}
+
+static void
+stap_gen_info_probes_table_header (VEC (info_probe_column_s) **heads)
+{
+  info_probe_column_s stap_probe_column;
+
+  stap_probe_column.field_name = "semaphore";
+  stap_probe_column.print_name = _("Semaphore");
+
+  VEC_safe_push (info_probe_column_s, *heads, &stap_probe_column);
+}
+
+static void
+stap_gen_info_probes_table_values (struct probe *probe_generic,
+				   struct objfile *objfile,
+				   VEC (const_char_ptr) **ret)
+{
+  struct stap_probe *probe = (struct stap_probe *) probe_generic;
+  struct gdbarch *gdbarch = get_objfile_arch (objfile);
+  const char *val = NULL;
+
+  gdb_assert (probe_generic->pops == &stap_probe_ops);
+
+  if (probe->sem_addr)
+    val = print_core_address (gdbarch, probe->sem_addr);
+
+  VEC_safe_push (const_char_ptr, *ret, val);
+}
+
+/* SystemTap probe_ops.  */
+
+static const struct probe_ops stap_probe_ops =
+{
+  stap_probe_is_linespec,
+  stap_get_probes,
+  stap_relocate,
+  stap_get_probe_argument_count,
+  stap_evaluate_probe_argument,
+  stap_compile_to_ax,
+  stap_set_semaphore,
+  stap_clear_semaphore,
+  stap_probe_destroy,
+  stap_gen_info_probes_table_header,
+  stap_gen_info_probes_table_values,
+};
+
+/* Implementation of the `info probes stap' command.  */
+
+static void
+info_probes_stap_command (char *arg, int from_tty)
+{
+  info_probes_for_ops (arg, from_tty, &stap_probe_ops);
+}
+
+void _initialize_stap_probe (void);
+
+void
+_initialize_stap_probe (void)
+{
+  VEC_safe_push (probe_ops_cp, all_probe_ops, &stap_probe_ops);
+
+  add_setshow_zinteger_cmd ("stap-expression", class_maintenance,
+			    &stap_expression_debug,
+			    _("Set SystemTap expression debugging."),
+			    _("Show SystemTap expression debugging."),
+			    _("When non-zero, the internal representation "
+			      "of SystemTap expressions will be printed."),
+			    NULL,
+			    show_stapexpressiondebug,
+			    &setdebuglist, &showdebuglist);
+
+  create_internalvar_type_lazy ("_probe_argc", &probe_funcs,
+				(void *) (uintptr_t) -1);
+  create_internalvar_type_lazy ("_probe_arg0", &probe_funcs,
+				(void *) (uintptr_t) 0);
+  create_internalvar_type_lazy ("_probe_arg1", &probe_funcs,
+				(void *) (uintptr_t) 1);
+  create_internalvar_type_lazy ("_probe_arg2", &probe_funcs,
+				(void *) (uintptr_t) 2);
+  create_internalvar_type_lazy ("_probe_arg3", &probe_funcs,
+				(void *) (uintptr_t) 3);
+  create_internalvar_type_lazy ("_probe_arg4", &probe_funcs,
+				(void *) (uintptr_t) 4);
+  create_internalvar_type_lazy ("_probe_arg5", &probe_funcs,
+				(void *) (uintptr_t) 5);
+  create_internalvar_type_lazy ("_probe_arg6", &probe_funcs,
+				(void *) (uintptr_t) 6);
+  create_internalvar_type_lazy ("_probe_arg7", &probe_funcs,
+				(void *) (uintptr_t) 7);
+  create_internalvar_type_lazy ("_probe_arg8", &probe_funcs,
+				(void *) (uintptr_t) 8);
+  create_internalvar_type_lazy ("_probe_arg9", &probe_funcs,
+				(void *) (uintptr_t) 9);
+  create_internalvar_type_lazy ("_probe_arg10", &probe_funcs,
+				(void *) (uintptr_t) 10);
+  create_internalvar_type_lazy ("_probe_arg11", &probe_funcs,
+				(void *) (uintptr_t) 11);
+
+  add_cmd ("stap", class_info, info_probes_stap_command,
+	   _("\
+Show information about SystemTap static probes.\n\
+Usage: info probes stap [PROVIDER [NAME [OBJECT]]]\n\
+Each argument is a regular expression, used to select probes.\n\
+PROVIDER matches probe provider names.\n\
+NAME matches the probe names.\n\
+OBJECT matches the executable or shared library name."),
+	   info_probes_cmdlist_get ());
+
+}
diff --git a/gdb/stap-probe.h b/gdb/stap-probe.h
new file mode 100644
index 0000000..e30d56a
--- /dev/null
+++ b/gdb/stap-probe.h
@@ -0,0 +1,50 @@
+/* SystemTap probe support for GDB.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#if !defined (STAP_PROBE_H)
+#define STAP_PROBE_H 1
+
+/* Structure which holds information about the parsing process of one probe's
+   argument.  */
+
+struct stap_parse_info
+{
+  /* The probe's argument in a string format.  */
+  const char *arg;
+
+  /* A pointer to the full chain of arguments.  This is useful for printing
+     error messages.  The parser functions should not modify this argument
+     directly; instead, they should use the ARG pointer above.  */
+  const char *saved_arg;
+
+  /* The expected argument type (bitness), as defined in the probe's
+     argument.  For instance, if the argument begins with `-8@', it means
+     the bitness is 64-bit signed.  In this case, ARG_TYPE would represent
+     the type `int64_t'.  */
+  struct type *arg_type;
+
+  /* A pointer to the current gdbarch.  */
+  struct gdbarch *gdbarch;
+
+  /* Greater than zero if we are inside a parenthesized expression.  Useful
+     for knowing when to skip spaces or not.  */
+  int inside_paren_p;
+};
+
+#endif /* !defined (STAP_PROBE_H) */
diff --git a/gdb/stubs/ChangeLog b/gdb/stubs/ChangeLog
new file mode 100644
index 0000000..05e86ab
--- /dev/null
+++ b/gdb/stubs/ChangeLog
@@ -0,0 +1,17 @@
+2012-06-05  Joel Brobecker  <brobecker at adacore.com>
+
+	* ia64vms-stub.c: Adjust copyright header to follow convention
+	expected by gnulib's update-copyright script.
+
+2012-03-08  Tristan Gingold  <gingold at adacore.com>
+
+	* sparc-stub.c: Move from ..
+	* sh-stub.c: Likewise.
+	* m68k-stub.c: Likewise.
+	* m32r-stub.c: Likewise.
+	* i386-stub.c: Likewise.
+
+2012-03-05  Tristan Gingold  <gingold at adacore.com>
+
+	* buildvms.com: New file.
+	* ia64vms-stub.c: New file.
diff --git a/gdb/stubs/buildvms.com b/gdb/stubs/buildvms.com
new file mode 100644
index 0000000..f13b3b5
--- /dev/null
+++ b/gdb/stubs/buildvms.com
@@ -0,0 +1,11 @@
+$! Command to build the gdb stub
+$cc /debug/noopt /pointer=64 gdbstub +sys$library:sys$lib_c.tlb/lib
+$ link/notraceback/sysexe/map=gdbstub.map/full/share=gdbstub.exe gdbstub,sys$inp
+ut/opt
+$deck
+cluster=gdbzero
+collect=gdbzero, XFER_PSECT
+$eod
+$ search /nowarnings gdbstub.map "DECC$"
+$! Example of use.
+$ DEFINE /nolog LIB$DEBUG sys$login:gdbstub.exe
diff --git a/gdb/i386-stub.c b/gdb/stubs/i386-stub.c
similarity index 100%
rename from gdb/i386-stub.c
rename to gdb/stubs/i386-stub.c
diff --git a/gdb/stubs/ia64vms-stub.c b/gdb/stubs/ia64vms-stub.c
new file mode 100644
index 0000000..b02c6a4
--- /dev/null
+++ b/gdb/stubs/ia64vms-stub.c
@@ -0,0 +1,2602 @@
+/* GDB stub for Itanium OpenVMS
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   Contributed by Tristan Gingold, AdaCore.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* On VMS, the debugger (in our case the stub) is loaded in the process and
+   executed (via SYS$IMGSTA) before the main entry point of the executable.
+   In UNIX parlance, this is like using LD_PRELOAD and debug via installing
+   SIGTRAP, SIGSEGV... handlers.
+
+   This is currently a partial implementation.  In particular, modifying
+   registers is currently not implemented, as well as inferior procedure
+   calls.
+
+   This is written in very low-level C, in order not to use the C runtime,
+   because it may have weird consequences on the program being debugged.
+*/
+
+#if __INITIAL_POINTER_SIZE != 64
+#error "Must be compiled with 64 bit pointers"
+#endif
+
+#define __NEW_STARLET 1
+#include <descrip.h>
+#include <iledef.h>
+#include <efndef.h>
+#include <in.h>
+#include <inet.h>
+#include <iodef.h>
+#include <ssdef.h>
+#include <starlet.h>
+#include <stsdef.h>
+#include <tcpip$inetdef.h>
+
+#include <lib$routines.h>
+#include <ots$routines.h>
+#include <str$routines.h>
+#include <libdef.h>
+#include <clidef.h>
+#include <iosbdef.h>
+#include <dvidef.h>
+#include <lnmdef.h>
+#include <builtins.h>
+#include <prtdef.h>
+#include <psldef.h>
+#include <ssdef.h>
+#include <chfdef.h>
+
+#include <lib_c/imcbdef.h>
+#include <lib_c/ldrimgdef.h>
+#include <lib_c/intstkdef.h>
+#include <lib_c/psrdef.h>
+#include <lib_c/ifddef.h>
+#include <lib_c/eihddef.h>
+
+#include <stdarg.h>
+#include <pthread_debug.h>
+
+#define VMS_PAGE_SIZE 0x2000
+#define VMS_PAGE_MASK (VMS_PAGE_SIZE - 1)
+
+/* Declared in lib$ots.  */
+extern void ots$fill (void *addr, size_t len, unsigned char b);
+extern void ots$move (void *dst, size_t len, const void *src);
+extern int ots$strcmp_eql (const void *str1, size_t str1len,
+                           const void *str2, size_t str2len);
+
+/* Stub port number.  */
+static unsigned int serv_port = 1234;
+
+/* DBGEXT structure.  Not declared in any header.  */
+struct dbgext_control_block
+{
+  unsigned short dbgext$w_function_code;
+#define DBGEXT$K_NEXT_TASK	      3
+#define DBGEXT$K_STOP_ALL_OTHER_TASKS 31
+#define DBGEXT$K_GET_REGS 33
+  unsigned short dbgext$w_facility_id;
+#define CMA$_FACILITY 64
+  unsigned int dbgext$l_status;
+  unsigned int dbgext$l_flags;
+  unsigned int dbgext$l_print_routine;
+  unsigned int dbgext$l_evnt_code;
+  unsigned int dbgext$l_evnt_name;
+  unsigned int dbgext$l_evnt_entry;
+  unsigned int dbgext$l_task_value;
+  unsigned int dbgext$l_task_number;
+  unsigned int dbgext$l_ada_flags;
+  unsigned int dbgext$l_stop_value;
+#define dbgext$l_priority   dbgext$l_stop_value;
+#define dbgext$l_symb_addr  dbgext$l_stop_value;
+#define dbgext$l_time_slice dbgext$l_stop_value;
+  unsigned int dbgext$l_active_registers;
+};
+
+#pragma pointer_size save
+#pragma pointer_size 32
+
+/* Pthread handler.  */
+static int (*dbgext_func) (struct dbgext_control_block *blk);
+
+#pragma pointer_size restore
+
+/* Set to 1 if thread-aware.  */
+static int has_threads;
+
+/* Current thread.  */
+static pthread_t selected_thread;
+static pthreadDebugId_t selected_id;
+
+/* Internal debugging flags.  */
+struct debug_flag
+{
+  /* Name of the flag (as a string descriptor).  */
+  const struct dsc$descriptor_s name;
+  /* Value.  */
+  int val;
+};
+
+/* Macro to define a debugging flag.  */
+#define DEBUG_FLAG_ENTRY(str) \
+  { { sizeof (str) - 1, DSC$K_DTYPE_T, DSC$K_CLASS_S, str }, 0}
+
+static struct debug_flag debug_flags[] =
+{
+  /* Disp packets exchanged with gdb.  */
+  DEBUG_FLAG_ENTRY("packets"),
+#define trace_pkt (debug_flags[0].val)
+  /* Display entry point informations.  */
+  DEBUG_FLAG_ENTRY("entry"),
+#define trace_entry (debug_flags[1].val)
+  /* Be verbose about exceptions.  */
+  DEBUG_FLAG_ENTRY("excp"),
+#define trace_excp (debug_flags[2].val)
+  /* Be verbose about unwinding.  */
+  DEBUG_FLAG_ENTRY("unwind"),
+#define trace_unwind (debug_flags[3].val)
+  /* Display image at startup.  */
+  DEBUG_FLAG_ENTRY("images"),
+#define trace_images (debug_flags[4].val)
+  /* Display pthread_debug info.  */
+  DEBUG_FLAG_ENTRY("pthreaddbg")
+#define trace_pthreaddbg (debug_flags[5].val)
+};
+
+#define NBR_DEBUG_FLAGS (sizeof (debug_flags) / sizeof (debug_flags[0]))
+
+/* Connect inet device I/O channel.  */
+static unsigned short conn_channel;
+
+/* Widely used hex digit to ascii.  */
+static const char hex[] = "0123456789abcdef";
+
+/* Socket characteristics.  Apparently, there are no declaration for it in
+   standard headers.  */
+struct sockchar
+{
+  unsigned short prot;
+  unsigned char type;
+  unsigned char af;
+};
+
+/* Chain of images loaded.  */
+extern IMCB* ctl$gl_imglstptr;
+
+/* IA64 integer register representation.  */
+union ia64_ireg
+{
+  unsigned __int64 v;
+  unsigned char b[8];
+};
+
+/* IA64 register numbers, as defined by ia64-tdep.h.  */
+#define IA64_GR0_REGNUM		0
+#define IA64_GR32_REGNUM	(IA64_GR0_REGNUM + 32)
+
+/* Floating point registers; 128 82-bit wide registers.  */
+#define IA64_FR0_REGNUM		128
+
+/* Predicate registers; There are 64 of these one bit registers.  It'd
+   be more convenient (implementation-wise) to use a single 64 bit
+   word with all of these register in them.  Note that there's also a
+   IA64_PR_REGNUM below which contains all the bits and is used for
+   communicating the actual values to the target.  */
+#define IA64_PR0_REGNUM		256
+
+/* Branch registers: 8 64-bit registers for holding branch targets.  */
+#define IA64_BR0_REGNUM		320
+
+/* Virtual frame pointer; this matches IA64_FRAME_POINTER_REGNUM in
+   gcc/config/ia64/ia64.h.  */
+#define IA64_VFP_REGNUM		328
+
+/* Virtual return address pointer; this matches
+   IA64_RETURN_ADDRESS_POINTER_REGNUM in gcc/config/ia64/ia64.h.  */
+#define IA64_VRAP_REGNUM	329
+
+/* Predicate registers: There are 64 of these 1-bit registers.  We
+   define a single register which is used to communicate these values
+   to/from the target.  We will somehow contrive to make it appear
+   that IA64_PR0_REGNUM thru IA64_PR63_REGNUM hold the actual values.  */
+#define IA64_PR_REGNUM		330
+
+/* Instruction pointer: 64 bits wide.  */
+#define IA64_IP_REGNUM		331
+
+/* Process Status Register.  */
+#define IA64_PSR_REGNUM		332
+
+/* Current Frame Marker (raw form may be the cr.ifs).  */
+#define IA64_CFM_REGNUM		333
+
+/* Application registers; 128 64-bit wide registers possible, but some
+   of them are reserved.  */
+#define IA64_AR0_REGNUM		334
+#define IA64_KR0_REGNUM		(IA64_AR0_REGNUM + 0)
+#define IA64_KR7_REGNUM		(IA64_KR0_REGNUM + 7)
+
+#define IA64_RSC_REGNUM		(IA64_AR0_REGNUM + 16)
+#define IA64_BSP_REGNUM		(IA64_AR0_REGNUM + 17)
+#define IA64_BSPSTORE_REGNUM	(IA64_AR0_REGNUM + 18)
+#define IA64_RNAT_REGNUM	(IA64_AR0_REGNUM + 19)
+#define IA64_FCR_REGNUM		(IA64_AR0_REGNUM + 21)
+#define IA64_EFLAG_REGNUM	(IA64_AR0_REGNUM + 24)
+#define IA64_CSD_REGNUM		(IA64_AR0_REGNUM + 25)
+#define IA64_SSD_REGNUM		(IA64_AR0_REGNUM + 26)
+#define IA64_CFLG_REGNUM	(IA64_AR0_REGNUM + 27)
+#define IA64_FSR_REGNUM		(IA64_AR0_REGNUM + 28)
+#define IA64_FIR_REGNUM		(IA64_AR0_REGNUM + 29)
+#define IA64_FDR_REGNUM		(IA64_AR0_REGNUM + 30)
+#define IA64_CCV_REGNUM		(IA64_AR0_REGNUM + 32)
+#define IA64_UNAT_REGNUM	(IA64_AR0_REGNUM + 36)
+#define IA64_FPSR_REGNUM	(IA64_AR0_REGNUM + 40)
+#define IA64_ITC_REGNUM		(IA64_AR0_REGNUM + 44)
+#define IA64_PFS_REGNUM		(IA64_AR0_REGNUM + 64)
+#define IA64_LC_REGNUM		(IA64_AR0_REGNUM + 65)
+#define IA64_EC_REGNUM		(IA64_AR0_REGNUM + 66)
+
+/* NAT (Not A Thing) Bits for the general registers; there are 128 of
+   these.  */
+#define IA64_NAT0_REGNUM	462
+
+/* Process registers when a condition is caught.  */
+struct ia64_all_regs
+{
+  union ia64_ireg gr[32];
+  union ia64_ireg br[8];
+  union ia64_ireg ip;
+  union ia64_ireg psr;
+  union ia64_ireg bsp;
+  union ia64_ireg cfm;
+  union ia64_ireg pfs;
+  union ia64_ireg pr;
+};
+
+static struct ia64_all_regs excp_regs;
+static struct ia64_all_regs sel_regs;
+static pthread_t sel_regs_pthread;
+
+/* IO channel for the terminal.  */
+static unsigned short term_chan;
+
+/* Output buffer and length.  */
+static char term_buf[128];
+static int term_buf_len;
+
+/* Buffer for communication with gdb.  */
+static unsigned char gdb_buf[sizeof (struct ia64_all_regs) * 2 + 64];
+static unsigned int gdb_blen;
+
+/* Previous primary handler.  */
+static void *prevhnd;
+
+/* Entry point address and bundle.  */
+static unsigned __int64 entry_pc;
+static unsigned char entry_saved[16];
+
+/* Write on the terminal.  */
+
+static void
+term_raw_write (const char *str, unsigned int len)
+{
+  unsigned short status;
+  struct _iosb iosb;
+
+  status = sys$qiow (EFN$C_ENF,           /* Event flag.  */
+                     term_chan,           /* I/O channel.  */
+                     IO$_WRITEVBLK,       /* I/O function code.  */
+                     &iosb,               /* I/O status block.  */
+                     0,                   /* Ast service routine.  */
+                     0,                   /* Ast parameter.  */
+                     (char *)str,         /* P1 - buffer address.  */
+                     len,                 /* P2 - buffer length.  */
+                     0, 0, 0, 0);
+
+  if (status & STS$M_SUCCESS)
+    status = iosb.iosb$w_status;
+  if (!(status & STS$M_SUCCESS))
+    LIB$SIGNAL (status);
+}
+
+/* Flush ther term buffer.  */
+
+static void
+term_flush (void)
+{
+  if (term_buf_len != 0)
+    {
+      term_raw_write (term_buf, term_buf_len);
+      term_buf_len = 0;
+    }
+}
+
+/* Write a single character, without translation.  */
+
+static void
+term_raw_putchar (char c)
+{
+  if (term_buf_len == sizeof (term_buf))
+    term_flush ();
+  term_buf[term_buf_len++] = c;
+}
+
+/* Write character C.  Translate '\n' to '\n\r'.  */
+
+static void
+term_putc (char c)
+{
+  if (c < 32)
+    switch (c)
+      {
+      case '\r':
+      case '\n':
+	break;
+      default:
+	c = '.';
+	break;
+      }
+  term_raw_putchar (c);
+  if (c == '\n')
+    {
+      term_raw_putchar ('\r');
+      term_flush ();
+    }
+}
+
+/* Write a C string.  */
+
+static void
+term_puts (const char *str)
+{
+  while (*str)
+    term_putc (*str++);
+}
+
+/* Write LEN bytes from STR.  */
+
+static void
+term_write (const char *str, unsigned int len)
+{
+  for (; len > 0; len--)
+    term_putc (*str++);
+}
+
+/* Write using FAO formatting.  */
+
+static void
+term_fao (const char *str, unsigned int str_len, ...)
+{
+  int cnt;
+  va_list vargs;
+  int i;
+  __int64 *args;
+  int status;
+  struct dsc$descriptor_s dstr =
+    { str_len, DSC$K_DTYPE_T, DSC$K_CLASS_S, (__char_ptr32)str };
+  char buf[128];
+  $DESCRIPTOR (buf_desc, buf);
+
+  va_start (vargs, str_len);
+  va_count (cnt);
+  args = (__int64 *) __ALLOCA (cnt * sizeof (__int64));
+  cnt -= 2;
+  for (i = 0; i < cnt; i++)
+    args[i] = va_arg (vargs, __int64);
+
+  status = sys$faol_64 (&dstr, &buf_desc.dsc$w_length, &buf_desc, args);
+  if (status & 1)
+    {
+      /* FAO !/ already insert a line feed.  */
+      for (i = 0; i < buf_desc.dsc$w_length; i++)
+	{
+	  term_raw_putchar (buf[i]);
+	  if (buf[i] == '\n')
+	    term_flush ();
+	}
+    }
+      
+  va_end (vargs);
+}
+
+#define TERM_FAO(STR, ...) term_fao (STR, sizeof (STR) - 1, __VA_ARGS__)
+
+/* New line.  */
+
+static void
+term_putnl (void)
+{
+  term_putc ('\n');
+}
+
+/* Initialize terminal.  */
+
+static void
+term_init (void)
+{
+  unsigned int status,i;
+  unsigned short len;
+  char resstring[LNM$C_NAMLENGTH];
+  static const $DESCRIPTOR (tabdesc, "LNM$FILE_DEV");
+  static const $DESCRIPTOR (logdesc, "SYS$OUTPUT");
+  $DESCRIPTOR (term_desc, resstring);
+  ILE3 item_lst[2];
+
+  item_lst[0].ile3$w_length = LNM$C_NAMLENGTH;
+  item_lst[0].ile3$w_code = LNM$_STRING;
+  item_lst[0].ile3$ps_bufaddr = resstring;
+  item_lst[0].ile3$ps_retlen_addr = &len;
+  item_lst[1].ile3$w_length = 0;
+  item_lst[1].ile3$w_code = 0;
+
+  /* Translate the logical name.  */
+  status = SYS$TRNLNM (0,          	  /* Attr of the logical name.  */
+                       (void *) &tabdesc, /* Logical name table.  */
+                       (void *) &logdesc, /* Logical name.  */
+                       0,          /* Access mode.  */
+                       item_lst);  /* Item list.  */
+  if (!(status & STS$M_SUCCESS))
+    LIB$SIGNAL (status);
+
+  term_desc.dsc$w_length = len;
+
+  /* Examine 4-byte header.  Skip escape sequence.  */
+  if (resstring[0] == 0x1B)
+    {
+      term_desc.dsc$w_length -= 4;
+      term_desc.dsc$a_pointer += 4;
+    }
+
+  /* Assign a channel.  */
+  status = sys$assign (&term_desc,   /* Device name.  */
+                       &term_chan,   /* I/O channel.  */
+                       0,            /* Access mode.  */
+                       0);
+  if (!(status & STS$M_SUCCESS))
+    LIB$SIGNAL (status);
+}
+
+/* Convert from native endianness to network endianness (and vice-versa).  */
+
+static unsigned int
+wordswap (unsigned int v)
+{
+  return ((v & 0xff) << 8) | ((v >> 8) & 0xff);
+}
+
+/* Initialize the socket connection, and wait for a client.  */
+
+static void
+sock_init (void)
+{
+  struct _iosb iosb;
+  unsigned int status;
+
+  /* Listen channel and characteristics.  */
+  unsigned short listen_channel;
+  struct sockchar listen_sockchar;
+
+  /* Client address.  */
+  unsigned short cli_addrlen;
+  struct sockaddr_in cli_addr;
+  ILE3 cli_itemlst;
+
+  /* Our address.  */
+  struct sockaddr_in serv_addr;
+  ILE2 serv_itemlst;
+
+  /* Reuseaddr option value (on).  */
+  int optval = 1;
+  ILE2 sockopt_itemlst;
+  ILE2 reuseaddr_itemlst;
+
+  /* TCP/IP network pseudodevice.  */
+  static const $DESCRIPTOR (inet_device, "TCPIP$DEVICE:");
+
+  /* Initialize socket characteristics.  */
+  listen_sockchar.prot = TCPIP$C_TCP;
+  listen_sockchar.type = TCPIP$C_STREAM;
+  listen_sockchar.af   = TCPIP$C_AF_INET;
+
+  /* Assign I/O channels to network device.  */
+  status = sys$assign ((void *) &inet_device, &listen_channel, 0, 0);
+  if (status & STS$M_SUCCESS)
+    status = sys$assign ((void *) &inet_device, &conn_channel, 0, 0);
+  if (!(status & STS$M_SUCCESS))
+    {
+      term_puts ("Failed to assign I/O channel(s)\n");
+      LIB$SIGNAL (status);
+    }
+
+  /* Create a listen socket.  */
+  status = sys$qiow (EFN$C_ENF,           /* Event flag.  */
+                     listen_channel,      /* I/O channel.  */
+                     IO$_SETMODE,         /* I/O function code.  */
+                     &iosb,               /* I/O status block.  */
+                     0,                   /* Ast service routine.  */
+                     0,                   /* Ast parameter.  */
+                     &listen_sockchar,    /* P1 - socket characteristics.  */
+                     0, 0, 0, 0, 0);
+  if (status & STS$M_SUCCESS)
+    status = iosb.iosb$w_status;
+  if (!(status & STS$M_SUCCESS))
+    {
+      term_puts ("Failed to create socket\n");
+      LIB$SIGNAL (status);
+    }
+
+  /* Set reuse address option.  */
+  /* Initialize reuseaddr's item-list element.  */
+  reuseaddr_itemlst.ile2$w_length   = sizeof (optval);
+  reuseaddr_itemlst.ile2$w_code     = TCPIP$C_REUSEADDR;
+  reuseaddr_itemlst.ile2$ps_bufaddr = &optval;
+
+  /* Initialize setsockopt's item-list descriptor.  */
+  sockopt_itemlst.ile2$w_length   = sizeof (reuseaddr_itemlst);
+  sockopt_itemlst.ile2$w_code     = TCPIP$C_SOCKOPT;
+  sockopt_itemlst.ile2$ps_bufaddr = &reuseaddr_itemlst;
+
+  status = sys$qiow (EFN$C_ENF,       /* Event flag.  */
+                     listen_channel,  /* I/O channel.  */
+                     IO$_SETMODE,     /* I/O function code.  */
+                     &iosb,           /* I/O status block.  */
+                     0,               /* Ast service routine.  */
+                     0,               /* Ast parameter.  */
+                     0,               /* P1.  */
+                     0,               /* P2.  */
+                     0,               /* P3.  */
+                     0,               /* P4.  */
+                     (__int64) &sockopt_itemlst, /* P5 - socket options.  */
+                     0);
+  if (status & STS$M_SUCCESS)
+    status = iosb.iosb$w_status;
+  if (!(status & STS$M_SUCCESS))
+    {
+      term_puts ("Failed to set socket option\n");
+      LIB$SIGNAL (status);
+    }
+
+  /* Bind server's ip address and port number to listen socket.  */
+  /* Initialize server's socket address structure.  */
+  ots$fill (&serv_addr, sizeof (serv_addr), 0);
+  serv_addr.sin_family = TCPIP$C_AF_INET;
+  serv_addr.sin_port = wordswap (serv_port);
+  serv_addr.sin_addr.s_addr = TCPIP$C_INADDR_ANY;
+
+  /* Initialize server's item-list descriptor.  */
+  serv_itemlst.ile2$w_length   = sizeof (serv_addr);
+  serv_itemlst.ile2$w_code     = TCPIP$C_SOCK_NAME;
+  serv_itemlst.ile2$ps_bufaddr = &serv_addr;
+
+  status = sys$qiow (EFN$C_ENF,           /* Event flag.  */
+                     listen_channel,      /* I/O channel.  */
+                     IO$_SETMODE,         /* I/O function code.  */
+                     &iosb,               /* I/O status block.  */
+                     0,                   /* Ast service routine.  */
+                     0,                   /* Ast parameter.  */
+                     0,                   /* P1.  */
+                     0,                   /* P2.  */
+                     (__int64) &serv_itemlst, /* P3 - local socket name.  */
+                     0, 0, 0);
+  if (status & STS$M_SUCCESS)
+    status = iosb.iosb$w_status;
+  if (!(status & STS$M_SUCCESS))
+    {
+      term_puts ("Failed to bind socket\n");
+      LIB$SIGNAL (status);
+    }
+
+  /* Set socket as a listen socket.  */
+  status = sys$qiow (EFN$C_ENF,           /* Event flag.  */
+                     listen_channel,      /* I/O channel.  */
+                     IO$_SETMODE,         /* I/O function code.  */
+                     &iosb,               /* I/O status block.  */
+                     0,                   /* Ast service routine.  */
+                     0,                   /* Ast parameter.  */
+                     0,                   /* P1.  */
+                     0,                   /* P2.  */
+                     0,                   /* P3.  */
+                     1,                   /* P4 - connection backlog.  */
+                     0, 0);
+  if (status & STS$M_SUCCESS)
+    status = iosb.iosb$w_status;
+  if (!(status & STS$M_SUCCESS))
+    {
+      term_puts ("Failed to set socket passive\n");
+      LIB$SIGNAL (status);
+    }
+
+  /* Accept connection from a client.  */
+  TERM_FAO ("Waiting for a client connection on port: !ZW!/",
+	    wordswap (serv_addr.sin_port));
+
+  status = sys$qiow (EFN$C_ENF,              /* Event flag.  */
+                     listen_channel,         /* I/O channel.  */
+                     IO$_ACCESS|IO$M_ACCEPT, /* I/O function code.  */
+                     &iosb,                  /* I/O status block.  */
+                     0,                      /* Ast service routine.  */
+                     0,                      /* Ast parameter.  */
+                     0,                      /* P1.  */
+                     0,                      /* P2.  */
+                     0,                      /* P3.  */
+                     (__int64) &conn_channel, /* P4 - I/O channel for conn.  */
+                     0, 0);
+
+  if (status & STS$M_SUCCESS)
+    status = iosb.iosb$w_status;
+  if (!(status & STS$M_SUCCESS))
+    {
+      term_puts ("Failed to accept client connection\n");
+      LIB$SIGNAL (status);
+    }
+
+  /* Log client connection request.  */
+  cli_itemlst.ile3$w_length = sizeof (cli_addr);
+  cli_itemlst.ile3$w_code = TCPIP$C_SOCK_NAME;
+  cli_itemlst.ile3$ps_bufaddr = &cli_addr;
+  cli_itemlst.ile3$ps_retlen_addr = &cli_addrlen;
+  ots$fill (&cli_addr, sizeof(cli_addr), 0);
+  status = sys$qiow (EFN$C_ENF,           /* Event flag.  */
+                     conn_channel,        /* I/O channel.  */
+                     IO$_SENSEMODE,       /* I/O function code.  */
+                     &iosb,               /* I/O status block.  */
+                     0,                   /* Ast service routine.  */
+                     0,                   /* Ast parameter.  */
+                     0,                   /* P1.  */
+                     0,                   /* P2.  */
+                     0,                   /* P3.  */
+                     (__int64) &cli_itemlst,  /* P4 - peer socket name.  */
+                     0, 0);
+  if (status & STS$M_SUCCESS)
+    status = iosb.iosb$w_status;
+  if (!(status & STS$M_SUCCESS))
+    {
+      term_puts ("Failed to get client name\n");
+      LIB$SIGNAL (status);
+    }
+
+  TERM_FAO ("Accepted connection from host: !UB.!UB,!UB.!UB, port: !UW!/",
+	    (cli_addr.sin_addr.s_addr >> 0) & 0xff,
+	    (cli_addr.sin_addr.s_addr >> 8) & 0xff,
+	    (cli_addr.sin_addr.s_addr >> 16) & 0xff,
+	    (cli_addr.sin_addr.s_addr >> 24) & 0xff,
+	    wordswap (cli_addr.sin_port));
+}
+
+/* Close the socket.  */
+
+static void
+sock_close (void)
+{
+  struct _iosb iosb;
+  unsigned int status;
+
+  /* Close socket.  */
+  status = sys$qiow (EFN$C_ENF,           /* Event flag.  */
+                     conn_channel,        /* I/O channel.  */
+                     IO$_DEACCESS,        /* I/O function code.  */
+                     &iosb,               /* I/O status block.  */
+                     0,                   /* Ast service routine.  */
+                     0,                   /* Ast parameter.  */
+                     0, 0, 0, 0, 0, 0);
+
+  if (status & STS$M_SUCCESS)
+    status = iosb.iosb$w_status;
+  if (!(status & STS$M_SUCCESS))
+    {
+      term_puts ("Failed to close socket\n");
+      LIB$SIGNAL (status);
+    }
+
+  /* Deassign I/O channel to network device.  */
+  status = sys$dassgn (conn_channel);
+
+  if (!(status & STS$M_SUCCESS))
+    {
+      term_puts ("Failed to deassign I/O channel\n");
+      LIB$SIGNAL (status);
+    }
+}
+
+/* Mark a page as R/W.  Return old rights.  */
+
+static unsigned int
+page_set_rw (unsigned __int64 startva, unsigned __int64 len,
+             unsigned int *oldprot)
+{
+  unsigned int status;
+  unsigned __int64 retva;
+  unsigned __int64 retlen;
+
+  status = SYS$SETPRT_64 ((void *)startva, len, PSL$C_USER, PRT$C_UW,
+                          (void *)&retva, &retlen, oldprot);
+  return status;
+}
+
+/* Restore page rights.  */
+
+static void
+page_restore_rw (unsigned __int64 startva, unsigned __int64 len,
+                unsigned int prot)
+{
+  unsigned int status;
+  unsigned __int64 retva;
+  unsigned __int64 retlen;
+  unsigned int oldprot;
+
+  status = SYS$SETPRT_64 ((void *)startva, len, PSL$C_USER, prot,
+                          (void *)&retva, &retlen, &oldprot);
+  if (!(status & STS$M_SUCCESS))
+    LIB$SIGNAL (status);
+}
+
+/* Get the TEB (thread environment block).  */
+
+static pthread_t
+get_teb (void)
+{
+  return (pthread_t)__getReg (_IA64_REG_TP);
+}
+
+/* Enable thread scheduling if VAL is true.  */
+
+static unsigned int
+set_thread_scheduling (int val)
+{
+  struct dbgext_control_block blk;
+  unsigned int status;
+
+  if (!dbgext_func)
+    return 0;
+
+  blk.dbgext$w_function_code = DBGEXT$K_STOP_ALL_OTHER_TASKS;
+  blk.dbgext$w_facility_id = CMA$_FACILITY;
+  blk.dbgext$l_stop_value = val;
+
+  status = dbgext_func (&blk);
+  if (!(status & STS$M_SUCCESS))
+    {
+      TERM_FAO ("set_thread_scheduling error, val=!SL, status=!XL!/",
+		val, blk.dbgext$l_status);
+      lib$signal (status);
+    }
+
+  return blk.dbgext$l_stop_value;
+}
+
+/* Get next thead (after THR).  Start with 0.  */
+
+static unsigned int
+thread_next (unsigned int thr)
+{
+  struct dbgext_control_block blk;
+  unsigned int status;
+
+  if (!dbgext_func)
+    return 0;
+
+  blk.dbgext$w_function_code = DBGEXT$K_NEXT_TASK;
+  blk.dbgext$w_facility_id = CMA$_FACILITY;
+  blk.dbgext$l_ada_flags = 0;
+  blk.dbgext$l_task_value = thr;
+
+  status = dbgext_func (&blk);
+  if (!(status & STS$M_SUCCESS))
+    lib$signal (status);
+
+  return blk.dbgext$l_task_value;
+}
+
+/* Pthread Debug callbacks.  */
+
+static int
+read_callback (pthreadDebugClient_t context,
+	       pthreadDebugTargetAddr_t addr,
+	       pthreadDebugAddr_t buf,
+	       size_t size)
+{
+  if (trace_pthreaddbg)
+    TERM_FAO ("read_callback (!XH, !XH, !SL)!/", addr, buf, size);
+  ots$move (buf, size, addr);
+  return 0;
+}
+
+static int
+write_callback (pthreadDebugClient_t context,
+		pthreadDebugTargetAddr_t addr,
+		pthreadDebugLongConstAddr_t buf,
+		size_t size)
+{
+  if (trace_pthreaddbg)
+    TERM_FAO ("write_callback (!XH, !XH, !SL)!/", addr, buf, size);
+  ots$move (addr, size, buf);
+  return 0;
+}
+
+static int
+suspend_callback (pthreadDebugClient_t context)
+{
+  /* Always suspended.  */
+  return 0;
+}
+
+static int
+resume_callback (pthreadDebugClient_t context)
+{
+  /* So no need to resume.  */
+  return 0;
+}
+
+static int
+kthdinfo_callback (pthreadDebugClient_t context,
+		   pthreadDebugKId_t kid,
+		   pthreadDebugKThreadInfo_p thread_info)
+{
+  if (trace_pthreaddbg)
+    term_puts ("kthinfo_callback");
+  return ENOSYS;
+}
+
+static int
+hold_callback (pthreadDebugClient_t context,
+	       pthreadDebugKId_t kid)
+{
+  if (trace_pthreaddbg)
+    term_puts ("hold_callback");
+  return ENOSYS;
+}
+
+static int
+unhold_callback (pthreadDebugClient_t context,
+		 pthreadDebugKId_t kid)
+{
+  if (trace_pthreaddbg)
+    term_puts ("unhold_callback");
+  return ENOSYS;
+}
+
+static int
+getfreg_callback (pthreadDebugClient_t context,
+		  pthreadDebugFregs_t *reg,
+		  pthreadDebugKId_t kid)
+{
+  if (trace_pthreaddbg)
+    term_puts ("getfreg_callback");
+  return ENOSYS;
+}
+
+static int
+setfreg_callback (pthreadDebugClient_t context,
+		  const pthreadDebugFregs_t *reg,
+		  pthreadDebugKId_t kid)
+{
+  if (trace_pthreaddbg)
+    term_puts ("setfreg_callback");
+  return ENOSYS;
+}
+
+static int
+getreg_callback (pthreadDebugClient_t context,
+		 pthreadDebugRegs_t *reg,
+		 pthreadDebugKId_t kid)
+{
+  if (trace_pthreaddbg)
+    term_puts ("getreg_callback");
+  return ENOSYS;
+}
+
+static int
+setreg_callback (pthreadDebugClient_t context,
+		 const pthreadDebugRegs_t *reg,
+		 pthreadDebugKId_t kid)
+{
+  if (trace_pthreaddbg)
+    term_puts ("setreg_callback");
+  return ENOSYS;
+}
+
+static int
+output_callback (pthreadDebugClient_t context, 
+		 pthreadDebugConstString_t line)
+{
+  term_puts (line);
+  term_putnl ();
+  return 0;
+}
+
+static int
+error_callback (pthreadDebugClient_t context, 
+		 pthreadDebugConstString_t line)
+{
+  term_puts (line);
+  term_putnl ();
+  return 0;
+}
+
+static pthreadDebugAddr_t
+malloc_callback (pthreadDebugClient_t caller_context, size_t size)
+{
+  unsigned int status;
+  unsigned int res;
+  int len;
+
+  len = size + 16;
+  status = lib$get_vm (&len, &res, 0);
+  if (!(status & STS$M_SUCCESS))
+    LIB$SIGNAL (status);
+  if (trace_pthreaddbg)
+    TERM_FAO ("malloc_callback (!UL) -> !XA!/", size, res);
+  *(unsigned int *)res = len;
+  return (char *)res + 16;
+}
+
+static void
+free_callback (pthreadDebugClient_t caller_context, pthreadDebugAddr_t address)
+{
+  unsigned int status;
+  unsigned int res;
+  int len;
+
+  res = (unsigned int)address - 16;
+  len = *(unsigned int *)res;
+  if (trace_pthreaddbg)
+    TERM_FAO ("free_callback (!XA)!/", address);
+  status = lib$free_vm (&len, &res, 0);
+  if (!(status & STS$M_SUCCESS))
+    LIB$SIGNAL (status);
+}
+
+static int
+speckthd_callback (pthreadDebugClient_t caller_context,
+		   pthreadDebugSpecialType_t type,
+		   pthreadDebugKId_t *kernel_tid)
+{
+  return ENOTSUP;
+}
+
+static pthreadDebugCallbacks_t pthread_debug_callbacks = {
+  PTHREAD_DEBUG_VERSION,
+  read_callback,
+  write_callback,
+  suspend_callback,
+  resume_callback,
+  kthdinfo_callback,
+  hold_callback,
+  unhold_callback,
+  getfreg_callback,
+  setfreg_callback,
+  getreg_callback,
+  setreg_callback,
+  output_callback,
+  error_callback,
+  malloc_callback,
+  free_callback,
+  speckthd_callback
+};
+
+/* Name of the pthread shared library.  */
+static const $DESCRIPTOR (pthread_rtl_desc, "PTHREAD$RTL");
+
+/* List of symbols to extract from pthread debug library.  */
+struct pthread_debug_entry
+{
+  const unsigned int namelen;
+  const __char_ptr32 name;
+  __void_ptr32 func;
+};
+
+#define DEBUG_ENTRY(str) { sizeof(str) - 1, str, 0 }
+
+static struct pthread_debug_entry pthread_debug_entries[] = {
+  DEBUG_ENTRY("pthreadDebugContextInit"),
+  DEBUG_ENTRY("pthreadDebugThdSeqInit"),
+  DEBUG_ENTRY("pthreadDebugThdSeqNext"),
+  DEBUG_ENTRY("pthreadDebugThdSeqDestroy"),
+  DEBUG_ENTRY("pthreadDebugThdGetInfo"),
+  DEBUG_ENTRY("pthreadDebugThdGetInfoAddr"),
+  DEBUG_ENTRY("pthreadDebugThdGetReg"),
+  DEBUG_ENTRY("pthreadDebugCmd")
+};
+
+/* Pthread debug context.  */
+static pthreadDebugContext_t debug_context;
+
+/* Wrapper around pthread debug entry points.  */
+
+static int
+pthread_debug_thd_seq_init (pthreadDebugId_t *id)
+{
+  return ((int (*)())pthread_debug_entries[1].func)
+    (debug_context, id);
+}
+
+static int
+pthread_debug_thd_seq_next (pthreadDebugId_t *id)
+{
+  return ((int (*)())pthread_debug_entries[2].func)
+    (debug_context, id);
+}
+
+static int
+pthread_debug_thd_seq_destroy (void)
+{
+  return ((int (*)())pthread_debug_entries[3].func)
+    (debug_context);
+}
+
+static int
+pthread_debug_thd_get_info (pthreadDebugId_t id,
+			    pthreadDebugThreadInfo_t *info)
+{
+  return ((int (*)())pthread_debug_entries[4].func)
+    (debug_context, id, info);
+}
+
+static int
+pthread_debug_thd_get_info_addr (pthread_t thr,
+				 pthreadDebugThreadInfo_t *info)
+{
+  return ((int (*)())pthread_debug_entries[5].func)
+    (debug_context, thr, info);
+}
+
+static int
+pthread_debug_thd_get_reg (pthreadDebugId_t thr,
+			   pthreadDebugRegs_t *regs)
+{
+  return ((int (*)())pthread_debug_entries[6].func)
+    (debug_context, thr, regs);
+}
+
+static int
+stub_pthread_debug_cmd (const char *cmd)
+{
+  return ((int (*)())pthread_debug_entries[7].func)
+    (debug_context, cmd);
+}
+
+/* Show all the threads.  */
+
+static void
+threads_show (void)
+{
+  pthreadDebugId_t id;
+  pthreadDebugThreadInfo_t info;
+  int res;
+
+  res = pthread_debug_thd_seq_init (&id);
+  if (res != 0)
+    {
+      TERM_FAO ("seq init failed, res=!SL!/", res);
+      return;
+    }
+  while (1)
+    {
+      if (pthread_debug_thd_get_info (id, &info) != 0)
+	{
+	  TERM_FAO ("thd_get_info !SL failed!/", id);
+	  break;
+	}
+      if (pthread_debug_thd_seq_next (&id) != 0)
+	break;
+    }
+  pthread_debug_thd_seq_destroy ();
+}
+
+/* Initialize pthread support.  */
+
+static void
+threads_init (void)
+{
+  static const $DESCRIPTOR (dbgext_desc, "PTHREAD$DBGEXT");
+  static const $DESCRIPTOR (pthread_debug_desc, "PTHREAD$DBGSHR");
+  static const $DESCRIPTOR (dbgsymtable_desc, "PTHREAD_DBG_SYMTABLE");
+  int pthread_dbgext;
+  int status;
+  void *dbg_symtable;
+  int i;
+  void *caller_context = 0;
+
+  status = lib$find_image_symbol
+    ((void *) &pthread_rtl_desc, (void *) &dbgext_desc,
+     (int *) &dbgext_func);
+  if (!(status & STS$M_SUCCESS))
+    LIB$SIGNAL (status);
+  
+  status = lib$find_image_symbol
+    ((void *) &pthread_rtl_desc, (void *) &dbgsymtable_desc,
+     (int *) &dbg_symtable);
+  if (!(status & STS$M_SUCCESS))
+    LIB$SIGNAL (status);
+
+  /* Find entry points in pthread_debug.  */
+  for (i = 0;
+       i < sizeof (pthread_debug_entries) / sizeof (pthread_debug_entries[0]);
+       i++)
+    {
+      struct dsc$descriptor_s sym =
+	{ pthread_debug_entries[i].namelen,
+	  DSC$K_DTYPE_T, DSC$K_CLASS_S,
+	  pthread_debug_entries[i].name };
+      status = lib$find_image_symbol
+	((void *) &pthread_debug_desc, (void *) &sym,
+	 (int *) &pthread_debug_entries[i].func);
+      if (!(status & STS$M_SUCCESS))
+	lib$signal (status);
+    }
+
+  if (trace_pthreaddbg)
+    TERM_FAO ("debug symtable: !XH!/", dbg_symtable);
+  status = ((int (*)()) pthread_debug_entries[0].func)
+    (&caller_context, &pthread_debug_callbacks, dbg_symtable, &debug_context);
+  if (status != 0)
+    TERM_FAO ("cannot initialize pthread_debug: !UL!/", status);
+  TERM_FAO ("pthread debug done!/", 0);
+}
+
+/* Convert an hexadecimal character to a nibble.  Return -1 in case of
+   error.  */
+
+static int
+hex2nibble (unsigned char h)
+{
+  if (h >= '0' && h <= '9')
+    return h - '0';
+  if (h >= 'A' && h <= 'F')
+    return h - 'A' + 10;
+  if (h >= 'a' && h <= 'f')
+    return h - 'a' + 10;
+  return -1;
+}
+
+/* Convert an hexadecimal 2 character string to a byte.  Return -1 in case
+   of error.  */
+
+static int
+hex2byte (const unsigned char *p)
+{
+  int h, l;
+
+  h = hex2nibble (p[0]);
+  l = hex2nibble (p[1]);
+  if (h == -1 || l == -1)
+    return -1;
+  return (h << 4) | l;
+}
+
+/* Convert a byte V to a 2 character strings P.  */
+
+static void
+byte2hex (unsigned char *p, unsigned char v)
+{
+  p[0] = hex[v >> 4];
+  p[1] = hex[v & 0xf];
+}
+
+/* Convert a quadword V to a 16 character strings P.  */
+
+static void
+quad2hex (unsigned char *p, unsigned __int64 v)
+{
+  int i;
+  for (i = 0; i < 16; i++)
+    {
+      p[i] = hex[v >> 60];
+      v <<= 4;
+    }
+}
+
+static void
+long2pkt (unsigned int v)
+{
+  int i;
+
+  for (i = 0; i < 8; i++)
+    {
+      gdb_buf[gdb_blen + i] = hex[(v >> 28) & 0x0f];
+      v <<= 4;
+    }
+  gdb_blen += 8;
+}
+
+/* Generate an error packet.  */
+
+static void
+packet_error (unsigned int err)
+{
+  gdb_buf[1] = 'E';
+  byte2hex (gdb_buf + 2, err);
+  gdb_blen = 4;
+}
+
+/* Generate an OK packet.  */
+
+static void
+packet_ok (void)
+{
+  gdb_buf[1] = 'O';
+  gdb_buf[2] = 'K';
+  gdb_blen = 3;
+}
+
+/* Append a register to the packet.  */
+
+static void
+ireg2pkt (const unsigned char *p)
+{
+  int i;
+
+  for (i = 0; i < 8; i++)
+    {
+      byte2hex (gdb_buf + gdb_blen, p[i]);
+      gdb_blen += 2;
+    }
+}
+
+/* Append a C string (ASCIZ) to the packet.  */
+
+static void
+str2pkt (const char *str)
+{
+  while (*str)
+    gdb_buf[gdb_blen++] = *str++;
+}
+
+/* Extract a number fro the packet.  */
+
+static unsigned __int64
+pkt2val (const unsigned char *pkt, unsigned int *pos)
+{
+  unsigned __int64 res = 0;
+  unsigned int i;
+
+  while (1)
+    {
+      int r = hex2nibble (pkt[*pos]);
+
+      if (r < 0)
+        return res;
+      res = (res << 4) | r;
+      (*pos)++;
+    }
+}
+
+/* Append LEN bytes from B to the current gdb packet (encode in binary).  */
+
+static void
+mem2bin (const unsigned char *b, unsigned int len)
+{
+  unsigned int i;
+  for (i = 0; i < len; i++)
+    switch (b[i])
+      {
+      case '#':
+      case '$':
+      case '}':
+      case '*':
+      case 0:
+        gdb_buf[gdb_blen++] = '}';
+        gdb_buf[gdb_blen++] = b[i] ^ 0x20;
+        break;
+      default:
+        gdb_buf[gdb_blen++] = b[i];
+        break;
+      }
+}
+
+/* Append LEN bytes from B to the current gdb packet (encode in hex).  */
+
+static void
+mem2hex (const unsigned char *b, unsigned int len)
+{
+  unsigned int i;
+  for (i = 0; i < len; i++)
+    {
+      byte2hex (gdb_buf + gdb_blen, b[i]);
+      gdb_blen += 2;
+    }
+}
+
+/* Handle the 'q' packet.  */
+
+static void
+handle_q_packet (const unsigned char *pkt, unsigned int pktlen)
+{
+  /* For qfThreadInfo and qsThreadInfo.  */
+  static unsigned int first_thread;
+  static unsigned int last_thread;
+
+  static const char xfer_uib[] = "qXfer:uib:read:";
+#define XFER_UIB_LEN (sizeof (xfer_uib) - 1)
+  static const char qfthreadinfo[] = "qfThreadInfo";
+#define QFTHREADINFO_LEN (sizeof (qfthreadinfo) - 1)
+  static const char qsthreadinfo[] = "qsThreadInfo";
+#define QSTHREADINFO_LEN (sizeof (qsthreadinfo) - 1)
+  static const char qthreadextrainfo[] = "qThreadExtraInfo,";
+#define QTHREADEXTRAINFO_LEN (sizeof (qthreadextrainfo) - 1)
+  static const char qsupported[] = "qSupported:";
+#define QSUPPORTED_LEN (sizeof (qsupported) - 1)
+
+  if (pktlen == 2 && pkt[1] == 'C')
+    {
+      /* Current thread.  */
+      gdb_buf[0] = '$';
+      gdb_buf[1] = 'Q';
+      gdb_buf[2] = 'C';
+      gdb_blen = 3;
+      if (has_threads)
+	long2pkt ((unsigned long) get_teb ());
+      return;
+    }
+  else if (pktlen > XFER_UIB_LEN
+      && ots$strcmp_eql (pkt, XFER_UIB_LEN, xfer_uib, XFER_UIB_LEN))
+    {
+      /* Get unwind information block.  */
+      unsigned __int64 pc;
+      unsigned int pos = XFER_UIB_LEN;
+      unsigned int off;
+      unsigned int len;
+      union
+      {
+	unsigned char bytes[32];
+	struct
+	{
+	  unsigned __int64 code_start_va;
+	  unsigned __int64 code_end_va;
+	  unsigned __int64 uib_start_va;
+	  unsigned __int64 gp_value;
+	} data;
+      } uei;
+      int res;
+      int i;
+
+      packet_error (0);
+
+      pc = pkt2val (pkt, &pos);
+      if (pkt[pos] != ':')
+        return;
+      pos++;
+      off = pkt2val (pkt, &pos);
+      if (pkt[pos] != ',' || off != 0)
+        return;
+      pos++;
+      len = pkt2val (pkt, &pos);
+      if (pkt[pos] != '#' || len != 0x20)
+        return;
+
+      res = SYS$GET_UNWIND_ENTRY_INFO (pc, &uei.data, 0);
+      if (res == SS$_NODATA || res != SS$_NORMAL)
+        ots$fill (uei.bytes, sizeof (uei.bytes), 0);
+
+      if (trace_unwind)
+	{
+	  TERM_FAO ("Unwind request for !XH, status=!XL, uib=!XQ, GP=!XQ!/",
+		    pc, res, uei.data.uib_start_va, uei.data.gp_value);
+	}
+
+      gdb_buf[0] = '$';
+      gdb_buf[1] = 'l';
+      gdb_blen = 2;
+      mem2bin (uei.bytes, sizeof (uei.bytes));
+    }
+  else if (pktlen == QFTHREADINFO_LEN
+	   && ots$strcmp_eql (pkt, QFTHREADINFO_LEN,
+			      qfthreadinfo, QFTHREADINFO_LEN))
+    {
+      /* Get first thread(s).  */
+      gdb_buf[0] = '$';
+      gdb_buf[1] = 'm';
+      gdb_blen = 2;
+
+      if (!has_threads)
+	{
+	  gdb_buf[1] = 'l';
+	  return;
+	}
+      first_thread = thread_next (0);
+      last_thread = first_thread;
+      long2pkt (first_thread);
+    }
+  else if (pktlen == QSTHREADINFO_LEN
+	   && ots$strcmp_eql (pkt, QSTHREADINFO_LEN,
+			      qsthreadinfo, QSTHREADINFO_LEN))
+    {
+      /* Get subsequent threads.  */
+      gdb_buf[0] = '$';
+      gdb_buf[1] = 'm';
+      gdb_blen = 2;
+      while (dbgext_func)
+	{
+	  unsigned int res;
+	  res = thread_next (last_thread);
+	  if (res == first_thread)
+	    break;
+	  if (gdb_blen > 2)
+	    gdb_buf[gdb_blen++] = ',';
+	  long2pkt (res);
+	  last_thread = res;
+	  if (gdb_blen > sizeof (gdb_buf) - 16)
+	    break;
+	}
+
+      if (gdb_blen == 2)
+	gdb_buf[1] = 'l';
+    }
+  else if (pktlen > QTHREADEXTRAINFO_LEN
+	   && ots$strcmp_eql (pkt, QTHREADEXTRAINFO_LEN,
+			      qthreadextrainfo, QTHREADEXTRAINFO_LEN))
+    {
+      /* Get extra info about a thread.  */
+      pthread_t thr;
+      unsigned int pos = QTHREADEXTRAINFO_LEN;
+      pthreadDebugThreadInfo_t info;
+      int res;
+
+      packet_error (0);
+      if (!has_threads)
+	return;
+
+      thr = (pthread_t) pkt2val (pkt, &pos);
+      if (pkt[pos] != '#')
+        return;
+      res = pthread_debug_thd_get_info_addr (thr, &info);
+      if (res != 0)
+	{
+	  TERM_FAO ("qThreadExtraInfo (!XH) failed: !SL!/", thr, res);
+	  return;
+	}
+      gdb_buf[0] = '$';
+      gdb_blen = 1;
+      mem2hex ((const unsigned char *)"VMS-thread", 11);
+    }
+  else if (pktlen > QSUPPORTED_LEN
+	   && ots$strcmp_eql (pkt, QSUPPORTED_LEN,
+			      qsupported, QSUPPORTED_LEN))
+    {
+      /* Get supported features.  */
+      pthread_t thr;
+      unsigned int pos = QSUPPORTED_LEN;
+      pthreadDebugThreadInfo_t info;
+      int res;
+      
+      /* Ignore gdb features.  */
+      gdb_buf[0] = '$';
+      gdb_blen = 1;
+
+      str2pkt ("qXfer:uib:read+");
+      return;
+    }
+  else
+    {
+      if (trace_pkt)
+	{
+	  term_puts ("unknown <: ");
+	  term_write ((char *)pkt, pktlen);
+	  term_putnl ();
+	}
+      return;
+    }
+}
+
+/* Handle the 'v' packet.  */
+
+static int
+handle_v_packet (const unsigned char *pkt, unsigned int pktlen)
+{
+  static const char vcontq[] = "vCont?";
+#define VCONTQ_LEN (sizeof (vcontq) - 1)
+
+  if (pktlen == VCONTQ_LEN
+      && ots$strcmp_eql (pkt, VCONTQ_LEN, vcontq, VCONTQ_LEN))
+    {
+      gdb_buf[0] = '$';
+      gdb_blen = 1;
+
+      str2pkt ("vCont;c;s");
+      return 0;
+    }
+  else
+    {
+      if (trace_pkt)
+	{
+	  term_puts ("unknown <: ");
+	  term_write ((char *)pkt, pktlen);
+	  term_putnl ();
+	}
+      return 0;
+    }
+}
+
+/* Get regs for the selected thread.  */
+
+static struct ia64_all_regs *
+get_selected_regs (void)
+{
+  pthreadDebugRegs_t regs;
+  int res;
+
+  if (selected_thread == 0 || selected_thread == get_teb ())
+    return &excp_regs;
+
+  if (selected_thread == sel_regs_pthread)
+    return &sel_regs;
+
+  /* Read registers.  */
+  res = pthread_debug_thd_get_reg (selected_id, &regs);
+  if (res != 0)
+    {
+      /* FIXME: return NULL ?  */
+      return &excp_regs;
+    }
+  sel_regs_pthread = selected_thread;
+  sel_regs.gr[1].v = regs.gp;
+  sel_regs.gr[4].v = regs.r4;
+  sel_regs.gr[5].v = regs.r5;
+  sel_regs.gr[6].v = regs.r6;
+  sel_regs.gr[7].v = regs.r7;
+  sel_regs.gr[12].v = regs.sp;
+  sel_regs.br[0].v = regs.rp;
+  sel_regs.br[1].v = regs.b1;
+  sel_regs.br[2].v = regs.b2;
+  sel_regs.br[3].v = regs.b3;
+  sel_regs.br[4].v = regs.b4;
+  sel_regs.br[5].v = regs.b5;
+  sel_regs.ip.v = regs.ip;
+  sel_regs.bsp.v = regs.bspstore; /* FIXME: it is correct ?  */
+  sel_regs.pfs.v = regs.pfs;
+  sel_regs.pr.v = regs.pr;
+  return &sel_regs;
+}
+
+/* Create a status packet.  */
+
+static void
+packet_status (void)
+{
+  gdb_blen = 0;
+  if (has_threads)
+    {
+      str2pkt ("$T05thread:");
+      long2pkt ((unsigned long) get_teb ());
+      gdb_buf[gdb_blen++] = ';';
+    }
+  else
+    str2pkt ("$S05");
+}
+
+/* Return 1 to continue.  */
+
+static int
+handle_packet (unsigned char *pkt, unsigned int len)
+{
+  unsigned int pos;
+
+  /* By default, reply unsupported.  */
+  gdb_buf[0] = '$';
+  gdb_blen = 1;
+
+  pos = 1;
+  switch (pkt[0])
+    {
+    case '?':
+      if (len == 1)
+        {
+	  packet_status ();
+          return 0;
+        }
+      break;
+    case 'c':
+      if (len == 1)
+        {
+          /* Clear psr.ss.  */
+          excp_regs.psr.v &= ~(unsigned __int64)PSR$M_SS;
+          return 1;
+        }
+      else
+        packet_error (0);
+      break;
+    case 'g':
+      if (len == 1)
+        {
+          unsigned int i;
+	  struct ia64_all_regs *regs = get_selected_regs ();
+          unsigned char *p = regs->gr[0].b;
+
+          for (i = 0; i < 8 * 32; i++)
+            byte2hex (gdb_buf + 1 + 2 * i, p[i]);
+          gdb_blen += 2 * 8 * 32;
+          return 0;
+        }
+      break;
+    case 'H':
+      if (pkt[1] == 'g')
+	{
+	  int res;
+	  unsigned __int64 val;
+	  pthreadDebugThreadInfo_t info;
+	  
+	  pos++;
+	  val = pkt2val (pkt, &pos);
+	  if (pos != len)
+	    {
+	      packet_error (0);
+	      return 0;
+	    }
+	  if (val == 0)
+	    {
+	      /* Default one.  */
+	      selected_thread = get_teb ();
+	      selected_id = 0;
+	    }
+	  else if (!has_threads)
+	    {
+	      packet_error (0);
+	      return 0;
+	    }
+	  else
+	    {
+	      res = pthread_debug_thd_get_info_addr ((pthread_t) val, &info);
+	      if (res != 0)
+		{
+		  TERM_FAO ("qThreadExtraInfo (!XH) failed: !SL!/", val, res);
+		  packet_error (0);
+		  return 0;
+		}
+	      selected_thread = info.teb;
+	      selected_id = info.sequence;
+	    }
+	  packet_ok ();
+	  break;
+	}
+      else if (pkt[1] == 'c'
+	       && ((pkt[2] == '-' && pkt[3] == '1' && len == 4)
+		   || (pkt[2] == '0' && len == 3)))
+	{
+	  /* Silently accept 'Hc0' and 'Hc-1'.  */
+	  packet_ok ();
+	  break;
+	}
+      else
+	{
+	  packet_error (0);
+	  return 0;
+	}
+    case 'k':
+      SYS$EXIT (SS$_NORMAL);
+      break;
+    case 'm':
+      {
+        unsigned __int64 addr;
+	unsigned __int64 paddr;
+        unsigned int l;
+        unsigned int i;
+
+        addr = pkt2val (pkt, &pos);
+        if (pkt[pos] != ',')
+          {
+            packet_error (0);
+            return 0;
+          }
+        pos++;
+        l = pkt2val (pkt, &pos);
+        if (pkt[pos] != '#')
+          {
+            packet_error (0);
+            return 0;
+          }
+
+	/* Check access.  */
+	i = l + (addr & VMS_PAGE_MASK);
+	paddr = addr & ~VMS_PAGE_MASK;
+	while (1)
+	  {
+	    if (__prober (paddr, 0) != 1)
+	      {
+		packet_error (2);
+		return 0;
+	      }
+	    if (i < VMS_PAGE_SIZE)
+	      break;
+	    i -= VMS_PAGE_SIZE;
+	    paddr += VMS_PAGE_SIZE;
+	  }
+
+	/* Transfer.  */
+	for (i = 0; i < l; i++)
+	  byte2hex (gdb_buf + 1 + 2 * i, ((unsigned char *)addr)[i]);
+	gdb_blen += 2 * l;
+      }
+      break;
+    case 'M':
+      {
+        unsigned __int64 addr;
+        unsigned __int64 paddr;
+        unsigned int l;
+        unsigned int i;
+        unsigned int oldprot;
+
+        addr = pkt2val (pkt, &pos);
+        if (pkt[pos] != ',')
+          {
+            packet_error (0);
+            return 0;
+          }
+        pos++;
+        l = pkt2val (pkt, &pos);
+        if (pkt[pos] != ':')
+          {
+            packet_error (0);
+            return 0;
+          }
+        pos++;
+        page_set_rw (addr, l, &oldprot);
+
+	/* Check access.  */
+	i = l + (addr & VMS_PAGE_MASK);
+	paddr = addr & ~VMS_PAGE_MASK;
+	while (1)
+	  {
+	    if (__probew (paddr, 0) != 1)
+	      {
+		page_restore_rw (addr, l, oldprot);
+		return 0;
+	      }
+	    if (i < VMS_PAGE_SIZE)
+	      break;
+	    i -= VMS_PAGE_SIZE;
+	    paddr += VMS_PAGE_SIZE;
+	  }
+
+	/* Write.  */
+        for (i = 0; i < l; i++)
+          {
+            int v = hex2byte (pkt + pos);
+            pos += 2;
+            ((unsigned char *)addr)[i] = v;
+          }
+
+	/* Sync caches.  */
+        for (i = 0; i < l; i += 15)
+          __fc (addr + i);
+        __fc (addr + l);
+
+        page_restore_rw (addr, l, oldprot);
+        packet_ok ();
+      }
+      break;
+    case 'p':
+      {
+        unsigned int num = 0;
+        unsigned int i;
+	struct ia64_all_regs *regs = get_selected_regs ();
+
+        num = pkt2val (pkt, &pos);
+        if (pos != len)
+          {
+            packet_error (0);
+            return 0;
+          }
+
+        switch (num)
+          {
+          case IA64_IP_REGNUM:
+            ireg2pkt (regs->ip.b);
+            break;
+          case IA64_BR0_REGNUM:
+            ireg2pkt (regs->br[0].b);
+            break;
+          case IA64_PSR_REGNUM:
+            ireg2pkt (regs->psr.b);
+            break;
+          case IA64_BSP_REGNUM:
+            ireg2pkt (regs->bsp.b);
+            break;
+          case IA64_CFM_REGNUM:
+            ireg2pkt (regs->cfm.b);
+            break;
+          case IA64_PFS_REGNUM:
+            ireg2pkt (regs->pfs.b);
+            break;
+          case IA64_PR_REGNUM:
+            ireg2pkt (regs->pr.b);
+            break;
+          default:
+            TERM_FAO ("gdbserv: unhandled reg !UW!/", num);
+            packet_error (0);
+            return 0;
+          }
+      }
+      break;
+    case 'q':
+      handle_q_packet (pkt, len);
+      break;
+    case 's':
+      if (len == 1)
+        {
+          /* Set psr.ss.  */
+          excp_regs.psr.v |= (unsigned __int64)PSR$M_SS;
+          return 1;
+        }
+      else
+        packet_error (0);
+      break;
+    case 'T':
+      /* Thread status.  */
+      if (!has_threads)
+	{
+	  packet_ok ();
+	  break;
+	}
+      else
+	{
+	  int res;
+	  unsigned __int64 val;
+	  unsigned int fthr, thr;
+	  
+	  val = pkt2val (pkt, &pos);
+	  /* Default is error (but only after parsing is complete).  */
+	  packet_error (0);
+	  if (pos != len)
+	    break;
+
+	  /* Follow the list.  This makes a O(n2) algorithm, but we don't really
+	     have the choice.  Note that pthread_debug_thd_get_info_addr
+	     doesn't look reliable.  */
+	  fthr = thread_next (0);
+	  thr = fthr;
+	  do
+	    {
+	      if (val == thr)
+		{
+		  packet_ok ();
+		  break;
+		}
+	      thr = thread_next (thr);
+	    }
+	  while (thr != fthr);
+	}
+      break;
+    case 'v':
+      return handle_v_packet (pkt, len);
+      break;
+    case 'V':
+      if (len > 3 && pkt[1] == 'M' && pkt[2] == 'S' && pkt[3] == ' ')
+	{
+	  /* Temporary extension.  */
+	  if (has_threads)
+	    {
+	      pkt[len] = 0;
+	      stub_pthread_debug_cmd ((char *)pkt + 4);
+	      packet_ok ();
+	    }
+	  else
+	    packet_error (0);
+	}
+      break;
+    default:
+      if (trace_pkt)
+	{
+	  term_puts ("unknown <: ");
+	  term_write ((char *)pkt, len);
+	  term_putnl ();
+	}
+      break;
+    }
+  return 0;
+}
+
+/* Raw write to gdb.  */
+
+static void
+sock_write (const unsigned char *buf, int len)
+{
+  struct _iosb iosb;
+  unsigned int status;
+
+  /* Write data to connection.  */
+  status = sys$qiow (EFN$C_ENF,           /* Event flag.  */
+                     conn_channel,        /* I/O channel.  */
+                     IO$_WRITEVBLK,       /* I/O function code.  */
+                     &iosb,               /* I/O status block.  */
+                     0,                   /* Ast service routine.  */
+                     0,                   /* Ast parameter.  */
+                     (char *)buf,         /* P1 - buffer address.  */
+                     len,                 /* P2 - buffer length.  */
+                     0, 0, 0, 0);
+  if (status & STS$M_SUCCESS)
+    status = iosb.iosb$w_status;
+  if (!(status & STS$M_SUCCESS))
+    {
+      term_puts ("Failed to write data to gdb\n");
+      LIB$SIGNAL (status);
+    }
+}
+
+/* Compute the cheksum and send the packet.  */
+
+static void
+send_pkt (void)
+{
+  unsigned char chksum = 0;
+  unsigned int i;
+
+  for (i = 1; i < gdb_blen; i++)
+    chksum += gdb_buf[i];
+
+  gdb_buf[gdb_blen] = '#';
+  byte2hex (gdb_buf + gdb_blen + 1, chksum);
+
+  sock_write (gdb_buf, gdb_blen + 3);
+
+  if (trace_pkt > 1)
+    {
+      term_puts (">: ");
+      term_write ((char *)gdb_buf, gdb_blen + 3);
+      term_putnl ();
+    }
+}
+
+/* Read and handle one command.  Return 1 is execution must resume.  */
+
+static int
+one_command (void)
+{
+  struct _iosb iosb;
+  unsigned int status;
+  unsigned int off;
+  unsigned int dollar_off = 0;
+  unsigned int sharp_off = 0;
+  unsigned int cmd_off;
+  unsigned int cmd_len;
+
+  /* Wait for a packet.  */
+  while (1)
+    {
+      off = 0;
+      while (1)
+        {
+          /* Read data from connection.  */
+          status = sys$qiow (EFN$C_ENF,           /* Event flag.  */
+                             conn_channel,        /* I/O channel.  */
+                             IO$_READVBLK,        /* I/O function code.  */
+                             &iosb,               /* I/O status block.  */
+                             0,                   /* Ast service routine.  */
+                             0,                   /* Ast parameter.  */
+                             gdb_buf + off,       /* P1 - buffer address.  */
+                             sizeof (gdb_buf) - off, /* P2 - buffer leng.  */
+                             0, 0, 0, 0);
+          if (status & STS$M_SUCCESS)
+            status = iosb.iosb$w_status;
+          if (!(status & STS$M_SUCCESS))
+            {
+              term_puts ("Failed to read data from connection\n" );
+              LIB$SIGNAL (status);
+            }
+
+#ifdef RAW_DUMP
+          term_puts ("{: ");
+          term_write ((char *)gdb_buf + off, iosb.iosb$w_bcnt);
+          term_putnl ();
+#endif
+
+          gdb_blen = off + iosb.iosb$w_bcnt;
+
+          if (off == 0)
+            {
+              /* Search for '$'.  */
+              for (dollar_off = 0; dollar_off < gdb_blen; dollar_off++)
+                if (gdb_buf[dollar_off] == '$')
+                  break;
+              if (dollar_off >= gdb_blen)
+                {
+                  /* Not found, discard the data.  */
+                  off = 0;
+                  continue;
+                }
+              /* Search for '#'.  */
+              for (sharp_off = dollar_off + 1;
+		   sharp_off < gdb_blen;
+		   sharp_off++)
+                if (gdb_buf[sharp_off] == '#')
+                  break;
+            }
+          else if (sharp_off >= off)
+            {
+              /* Search for '#'.  */
+              for (; sharp_off < gdb_blen; sharp_off++)
+                if (gdb_buf[sharp_off] == '#')
+                  break;
+            }
+
+          /* Got packet with checksum.  */
+          if (sharp_off + 2 <= gdb_blen)
+            break;
+
+          off = gdb_blen;
+          if (gdb_blen == sizeof (gdb_buf))
+            {
+              /* Packet too large, discard.  */
+              off = 0;
+            }
+        }
+
+      /* Validate and acknowledge a packet.  */
+      {
+        unsigned char chksum = 0;
+        unsigned int i;
+        int v;
+
+        for (i = dollar_off + 1; i < sharp_off; i++)
+          chksum += gdb_buf[i];
+        v = hex2byte (gdb_buf + sharp_off + 1);
+        if (v != chksum)
+          {
+            term_puts ("Discard bad checksum packet\n");
+            continue;
+          }
+        else
+          {
+            sock_write ((const unsigned char *)"+", 1);
+            break;
+          }
+      }
+    }
+
+  if (trace_pkt > 1)
+    {
+      term_puts ("<: ");
+      term_write ((char *)gdb_buf + dollar_off, sharp_off - dollar_off + 1);
+      term_putnl ();
+    }
+
+  cmd_off = dollar_off + 1;
+  cmd_len = sharp_off - dollar_off - 1;
+
+  if (handle_packet (gdb_buf + dollar_off + 1, sharp_off - dollar_off - 1) == 1)
+    return 1;
+
+  send_pkt ();
+  return 0;
+}
+
+/* Display the condition given by SIG64.  */
+
+static void
+display_excp (struct chf64$signal_array *sig64, struct chf$mech_array *mech)
+{
+  unsigned int status;
+  char msg[160];
+  unsigned short msglen;
+  $DESCRIPTOR (msg_desc, msg);
+  unsigned char outadr[4];
+
+  status = SYS$GETMSG (sig64->chf64$q_sig_name, &msglen, &msg_desc, 0, outadr);
+  if (status & STS$M_SUCCESS)
+    {
+      char msg2[160];
+      unsigned short msg2len;
+      struct dsc$descriptor_s msg2_desc =
+        { sizeof (msg2), DSC$K_DTYPE_T, DSC$K_CLASS_S, msg2};
+      msg_desc.dsc$w_length = msglen;
+      status = SYS$FAOL_64 (&msg_desc, &msg2len, &msg2_desc,
+                            &sig64->chf64$q_sig_arg1);
+      if (status & STS$M_SUCCESS)
+        term_write (msg2, msg2len);
+    }
+  else
+    term_puts ("no message");
+  term_putnl ();
+
+  if (trace_excp > 1)
+    {
+      TERM_FAO (" Frame: !XH, Depth: !4SL, Esf: !XH!/",
+		mech->chf$q_mch_frame, mech->chf$q_mch_depth,
+		mech->chf$q_mch_esf_addr);
+    }
+}
+
+/* Get all registers from current thread.  */
+
+static void
+read_all_registers (struct chf$mech_array *mech)
+{
+  struct _intstk *intstk =
+    (struct _intstk *)mech->chf$q_mch_esf_addr;
+  struct chf64$signal_array *sig64 =
+    (struct chf64$signal_array *)mech->chf$ph_mch_sig64_addr;
+  unsigned int cnt = sig64->chf64$w_sig_arg_count;
+  unsigned __int64 pc = (&sig64->chf64$q_sig_name)[cnt - 2];
+
+  excp_regs.ip.v = pc;
+  excp_regs.psr.v = intstk->intstk$q_ipsr;
+  /* GDB and linux expects bsp to point after the current register frame.
+     Adjust.  */
+  {
+    unsigned __int64 bsp = intstk->intstk$q_bsp;
+    unsigned int sof = intstk->intstk$q_ifs & 0x7f;
+    unsigned int delta = ((bsp >> 3) & 0x3f) + sof;
+    excp_regs.bsp.v = bsp + ((sof + delta / 0x3f) << 3);
+  }
+  excp_regs.cfm.v = intstk->intstk$q_ifs & 0x3fffffffff;
+  excp_regs.pfs.v = intstk->intstk$q_pfs;
+  excp_regs.pr.v = intstk->intstk$q_preds;
+  excp_regs.gr[0].v = 0;
+  excp_regs.gr[1].v = intstk->intstk$q_gp;
+  excp_regs.gr[2].v = intstk->intstk$q_r2;
+  excp_regs.gr[3].v = intstk->intstk$q_r3;
+  excp_regs.gr[4].v = intstk->intstk$q_r4;
+  excp_regs.gr[5].v = intstk->intstk$q_r5;
+  excp_regs.gr[6].v = intstk->intstk$q_r6;
+  excp_regs.gr[7].v = intstk->intstk$q_r7;
+  excp_regs.gr[8].v = intstk->intstk$q_r8;
+  excp_regs.gr[9].v = intstk->intstk$q_r9;
+  excp_regs.gr[10].v = intstk->intstk$q_r10;
+  excp_regs.gr[11].v = intstk->intstk$q_r11;
+  excp_regs.gr[12].v = (unsigned __int64)intstk + intstk->intstk$l_stkalign;
+  excp_regs.gr[13].v = intstk->intstk$q_r13;
+  excp_regs.gr[14].v = intstk->intstk$q_r14;
+  excp_regs.gr[15].v = intstk->intstk$q_r15;
+  excp_regs.gr[16].v = intstk->intstk$q_r16;
+  excp_regs.gr[17].v = intstk->intstk$q_r17;
+  excp_regs.gr[18].v = intstk->intstk$q_r18;
+  excp_regs.gr[19].v = intstk->intstk$q_r19;
+  excp_regs.gr[20].v = intstk->intstk$q_r20;
+  excp_regs.gr[21].v = intstk->intstk$q_r21;
+  excp_regs.gr[22].v = intstk->intstk$q_r22;
+  excp_regs.gr[23].v = intstk->intstk$q_r23;
+  excp_regs.gr[24].v = intstk->intstk$q_r24;
+  excp_regs.gr[25].v = intstk->intstk$q_r25;
+  excp_regs.gr[26].v = intstk->intstk$q_r26;
+  excp_regs.gr[27].v = intstk->intstk$q_r27;
+  excp_regs.gr[28].v = intstk->intstk$q_r28;
+  excp_regs.gr[29].v = intstk->intstk$q_r29;
+  excp_regs.gr[30].v = intstk->intstk$q_r30;
+  excp_regs.gr[31].v = intstk->intstk$q_r31;
+  excp_regs.br[0].v = intstk->intstk$q_b0;
+  excp_regs.br[1].v = intstk->intstk$q_b1;
+  excp_regs.br[2].v = intstk->intstk$q_b2;
+  excp_regs.br[3].v = intstk->intstk$q_b3;
+  excp_regs.br[4].v = intstk->intstk$q_b4;
+  excp_regs.br[5].v = intstk->intstk$q_b5;
+  excp_regs.br[6].v = intstk->intstk$q_b6;
+  excp_regs.br[7].v = intstk->intstk$q_b7;
+}
+
+/* Write all registers to current thread.  FIXME: not yet complete.  */
+
+static void
+write_all_registers (struct chf$mech_array *mech)
+{
+  struct _intstk *intstk =
+    (struct _intstk *)mech->chf$q_mch_esf_addr;
+
+  intstk->intstk$q_ipsr = excp_regs.psr.v;
+}
+
+/* Do debugging.  Report status to gdb and execute commands.  */
+
+static void
+do_debug (struct chf$mech_array *mech)
+{
+  struct _intstk *intstk =
+    (struct _intstk *)mech->chf$q_mch_esf_addr;
+  unsigned int old_ast;
+  unsigned int old_sch;
+  unsigned int status;
+
+  /* Disable ast.  */
+  status = sys$setast (0);
+  switch (status)
+    {
+    case SS$_WASCLR:
+      old_ast = 0;
+      break;
+    case SS$_WASSET:
+      old_ast = 1;
+      break;
+    default:
+      /* Should never happen!  */
+      lib$signal (status);
+    }
+
+  /* Disable thread scheduling.  */
+  if (has_threads)
+    old_sch = set_thread_scheduling (0);
+
+  read_all_registers (mech);
+
+  /* Send stop reply packet.  */
+  packet_status ();
+  send_pkt ();
+
+  while (one_command () == 0)
+    ;
+
+  write_all_registers (mech);
+
+  /* Re-enable scheduling.  */
+  if (has_threads)
+    set_thread_scheduling (old_sch);
+
+  /* Re-enable AST.  */
+  status = sys$setast (old_ast);
+  if (!(status & STS$M_SUCCESS))
+    LIB$SIGNAL (status);
+}
+
+/* The condition handler.  That's the core of the stub.  */
+
+static int
+excp_handler (struct chf$signal_array *sig,
+              struct chf$mech_array *mech)
+{
+  struct chf64$signal_array *sig64 =
+    (struct chf64$signal_array *)mech->chf$ph_mch_sig64_addr;
+  unsigned int code = sig->chf$l_sig_name & STS$M_COND_ID;
+  unsigned int cnt = sig64->chf64$w_sig_arg_count;
+  unsigned __int64 pc;
+  unsigned int ret;
+  /* Self protection.  FIXME: Should be per thread ?  */
+  static int in_handler = 0;
+
+  /* Completly ignore some conditions (signaled indirectly by this stub).  */
+  switch (code)
+    {
+    case LIB$_KEYNOTFOU & STS$M_COND_ID:
+      return SS$_RESIGNAL_64;
+    default:
+      break;
+    }
+
+  /* Protect against recursion.  */
+  in_handler++;
+  if (in_handler > 1)
+    {
+      if (in_handler == 2)
+	TERM_FAO ("gdbstub: exception in handler (pc=!XH)!!!/",
+		  (&sig64->chf64$q_sig_name)[cnt - 2]);
+      sys$exit (sig->chf$l_sig_name);
+    }
+
+  pc = (&sig64->chf64$q_sig_name)[cnt - 2];
+  if (trace_excp)
+    TERM_FAO ("excp_handler: code: !XL, pc=!XH!/", code, pc);
+
+  /* If break on the entry point, restore the bundle.  */
+  if (code == (SS$_BREAK & STS$M_COND_ID)
+      && pc == entry_pc
+      && entry_pc != 0)
+    {
+      static unsigned int entry_prot;
+
+      if (trace_entry)
+        term_puts ("initial entry breakpoint\n");
+      page_set_rw (entry_pc, 16, &entry_prot);
+
+      ots$move ((void *)entry_pc, 16, entry_saved);
+      __fc (entry_pc);
+      page_restore_rw (entry_pc, 16, entry_prot);
+    }
+
+  switch (code)
+    {
+    case SS$_ACCVIO & STS$M_COND_ID:
+      if (trace_excp <= 1)
+        display_excp (sig64, mech);
+      /* Fall through.  */
+    case SS$_BREAK  & STS$M_COND_ID:
+    case SS$_OPCDEC & STS$M_COND_ID:
+    case SS$_TBIT   & STS$M_COND_ID:
+    case SS$_DEBUG  & STS$M_COND_ID:
+      if (trace_excp > 1)
+        {
+	  int i;
+	  struct _intstk *intstk =
+	    (struct _intstk *)mech->chf$q_mch_esf_addr;
+
+          display_excp (sig64, mech);
+
+          TERM_FAO (" intstk: !XH!/", intstk);
+          for (i = 0; i < cnt + 1; i++)
+	    TERM_FAO ("   !XH!/", ((unsigned __int64 *)sig64)[i]);
+        }
+      do_debug (mech);
+      ret = SS$_CONTINUE_64;
+      break;
+
+    default:
+      display_excp (sig64, mech);
+      ret = SS$_RESIGNAL_64;
+      break;
+    }
+
+  in_handler--;
+  /* Discard selected thread registers.  */
+  sel_regs_pthread = 0;
+  return ret;
+}
+
+/* Setup internal trace flags according to GDBSTUB$TRACE logical.  */
+
+static void
+trace_init (void)
+{
+  unsigned int status, i, start;
+  unsigned short len;
+  char resstring[LNM$C_NAMLENGTH];
+  static const $DESCRIPTOR (tabdesc, "LNM$DCL_LOGICAL");
+  static const $DESCRIPTOR (logdesc, "GDBSTUB$TRACE");
+  $DESCRIPTOR (sub_desc, resstring);
+  ILE3 item_lst[2];
+
+  item_lst[0].ile3$w_length = LNM$C_NAMLENGTH;
+  item_lst[0].ile3$w_code = LNM$_STRING;
+  item_lst[0].ile3$ps_bufaddr = resstring;
+  item_lst[0].ile3$ps_retlen_addr = &len;
+  item_lst[1].ile3$w_length = 0;
+  item_lst[1].ile3$w_code = 0;
+
+  /* Translate the logical name.  */
+  status = SYS$TRNLNM (0,   		/* Attributes of the logical name.  */
+                       (void *)&tabdesc,       /* Logical name table.  */
+                       (void *)&logdesc,       /* Logical name.  */
+                       0,              	       /* Access mode.  */
+                       &item_lst);             /* Item list.  */
+  if (status == SS$_NOLOGNAM)
+    return;
+  if (!(status & STS$M_SUCCESS))
+    LIB$SIGNAL (status);
+
+  start = 0;
+  for (i = 0; i <= len; i++)
+    {
+      if ((i == len || resstring[i] == ',' || resstring[i] == ';')
+	  && i != start)
+        {
+	  int j;
+
+          sub_desc.dsc$a_pointer = resstring + start;
+          sub_desc.dsc$w_length = i - start;
+
+	  for (j = 0; j < NBR_DEBUG_FLAGS; j++)
+	    if (str$case_blind_compare (&sub_desc, 
+					(void *)&debug_flags[j].name) == 0)
+	      {
+		debug_flags[j].val++;
+		break;
+	      }
+	  if (j == NBR_DEBUG_FLAGS)
+	    TERM_FAO ("GDBSTUB$TRACE: unknown directive !AS!/", &sub_desc);
+
+          start = i + 1;
+        }
+    }
+
+  TERM_FAO ("GDBSTUB$TRACE=!AD ->", len, resstring);
+  for (i = 0; i < NBR_DEBUG_FLAGS; i++)
+    if (debug_flags[i].val > 0)
+      TERM_FAO (" !AS=!ZL", &debug_flags[i].name, debug_flags[i].val);
+  term_putnl ();
+}
+
+
+/* Entry point.  */
+
+static int
+stub_start (unsigned __int64 *progxfer, void *cli_util,
+            EIHD *imghdr, IFD *imgfile,
+            unsigned int linkflag, unsigned int cliflag)
+{
+  static int initialized;
+  int i;
+  int cnt;
+  int is_attached;
+  IMCB *imcb;
+  if (initialized)
+    term_puts ("gdbstub: re-entry\n");
+  else
+    initialized = 1;
+
+  /* When attached (through SS$_DEBUG condition), the number of arguments
+     is 4 and PROGXFER is the PC at interruption.  */
+  va_count (cnt);
+  is_attached = cnt == 4;
+
+  term_init ();
+
+  /* Hello banner.  */
+  term_puts ("Hello from gdb stub\n");
+
+  trace_init ();
+
+  if (trace_entry && !is_attached)
+    {
+      TERM_FAO ("xfer: !XH, imghdr: !XH, ifd: !XH!/",
+		progxfer, imghdr, imgfile);
+      for (i = -2; i < 8; i++)
+	TERM_FAO ("  at !2SW: !XH!/", i, progxfer[i]);
+    }
+
+  /* Search for entry point.  */
+  if (!is_attached)
+    {
+      entry_pc = 0;
+      for (i = 0; progxfer[i]; i++)
+	entry_pc = progxfer[i];
+
+      if (trace_entry)
+	{
+	  if (entry_pc == 0)
+	    {
+	      term_puts ("No entry point\n");
+	      return 0;
+	    }
+	  else
+	    TERM_FAO ("Entry: !XH!/",entry_pc);
+	}
+    }
+  else
+    entry_pc = progxfer[0];
+
+  has_threads = 0;
+  for (imcb = ctl$gl_imglstptr->imcb$l_flink;
+       imcb != ctl$gl_imglstptr;
+       imcb = imcb->imcb$l_flink)
+    {
+      if (ots$strcmp_eql (pthread_rtl_desc.dsc$a_pointer,
+			  pthread_rtl_desc.dsc$w_length,
+			  imcb->imcb$t_log_image_name + 1,
+			  imcb->imcb$t_log_image_name[0]))
+	has_threads = 1;
+			  
+      if (trace_images)
+	{
+	  unsigned int j;
+	  LDRIMG *ldrimg = imcb->imcb$l_ldrimg;
+	  LDRISD *ldrisd;
+
+	  TERM_FAO ("!XA-!XA ",
+		    imcb->imcb$l_starting_address,
+		    imcb->imcb$l_end_address);
+
+	  switch (imcb->imcb$b_act_code)
+	    {
+	    case IMCB$K_MAIN_PROGRAM:
+	      term_puts ("prog");
+	      break;
+	    case IMCB$K_MERGED_IMAGE:
+	      term_puts ("mrge");
+	      break;
+	    case IMCB$K_GLOBAL_IMAGE_SECTION:
+	      term_puts ("glob");
+	      break;
+	    default:
+	      term_puts ("????");
+	    }
+	  TERM_FAO (" !AD !40AC!/",
+		    1, "KESU" + (imcb->imcb$b_access_mode & 3),
+		    imcb->imcb$t_log_image_name);
+
+	  if ((long) ldrimg < 0 || trace_images < 2)
+	    continue;
+	  ldrisd = ldrimg->ldrimg$l_segments;
+	  for (j = 0; j < ldrimg->ldrimg$l_segcount; j++)
+	    {
+	      unsigned int flags = ldrisd[j].ldrisd$i_flags;
+	      term_puts ("   ");
+	      term_putc (flags & 0x04 ? 'R' : '-');
+	      term_putc (flags & 0x02 ? 'W' : '-');
+	      term_putc (flags & 0x01 ? 'X' : '-');
+	      term_puts (flags & 0x01000000 ? " Prot" : "     ");
+	      term_puts (flags & 0x04000000 ? " Shrt" : "     ");
+	      term_puts (flags & 0x08000000 ? " Shrd" : "     ");
+	      TERM_FAO (" !XA-!XA!/",
+			ldrisd[j].ldrisd$p_base,
+			(unsigned __int64) ldrisd[j].ldrisd$p_base 
+			+ ldrisd[j].ldrisd$i_len - 1);
+	    }
+	  ldrisd = ldrimg->ldrimg$l_dyn_seg;
+	  if (ldrisd)
+	    TERM_FAO ("   dynamic            !XA-!XA!/",
+		      ldrisd->ldrisd$p_base,
+		      (unsigned __int64) ldrisd->ldrisd$p_base 
+		      + ldrisd->ldrisd$i_len - 1);
+	}
+    }
+
+  if (has_threads)
+    threads_init ();
+
+  /* Wait for connection.  */
+  sock_init ();
+
+  /* Set primary exception vector.  */
+  {
+    unsigned int status;
+    status = sys$setexv (0, excp_handler, PSL$C_USER, (__void_ptr32) &prevhnd);
+    if (!(status & STS$M_SUCCESS))
+      LIB$SIGNAL (status);
+  }
+
+  if (is_attached)
+    {
+      return excp_handler ((struct chf$signal_array *) progxfer[2],
+			   (struct chf$mech_array *) progxfer[3]);
+    }
+
+  /* Change first instruction to set a breakpoint.  */
+  {
+    /*
+      01 08 00 40 00 00 	[MII]       break.m 0x80001
+      00 00 00 02 00 00 	            nop.i 0x0
+      00 00 04 00       	            nop.i 0x0;;
+    */
+    static const unsigned char initbp[16] =
+      { 0x01, 0x08, 0x00, 0x40, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+	0x00, 0x00, 0x04, 0x00 };
+    unsigned int entry_prot;
+    unsigned int status;
+    
+    status = page_set_rw (entry_pc, 16, &entry_prot);
+
+    if (!(status & STS$M_SUCCESS))
+      {
+	if ((status & STS$M_COND_ID) == (SS$_NOT_PROCESS_VA & STS$M_COND_ID))
+	  {
+	    /* Cannot write here.  This can happen when pthreads are
+	       used.  */
+	    entry_pc = 0;
+	    term_puts ("gdbstub: cannot set breakpoint on entry\n");
+	  }
+	else
+	  LIB$SIGNAL (status);
+      }
+    
+    if (entry_pc != 0)
+      {
+	ots$move (entry_saved, 16, (void *)entry_pc);
+	ots$move ((void *)entry_pc, 16, (void *)initbp);
+	__fc (entry_pc);
+	page_restore_rw (entry_pc, 16, entry_prot);
+      }
+  }
+
+  /* If it wasn't possible to set a breakpoint on the entry point,
+     accept gdb commands now.  Note that registers are not updated.  */
+  if (entry_pc == 0)
+    {
+      while (one_command () == 0)
+        ;
+    }
+
+  /* We will see!  */
+  return SS$_CONTINUE;
+}
+
+/* Declare the entry point of this relocatable module.  */
+
+struct xfer_vector
+{
+  __int64 impure_start;
+  __int64 impure_end;
+  int (*entry) ();
+};
+
+#pragma __extern_model save
+#pragma __extern_model strict_refdef "XFER_PSECT"
+struct xfer_vector xfer_vector = {0, 0, stub_start};
+#pragma __extern_model restore
diff --git a/gdb/m32r-stub.c b/gdb/stubs/m32r-stub.c
similarity index 100%
rename from gdb/m32r-stub.c
rename to gdb/stubs/m32r-stub.c
diff --git a/gdb/m68k-stub.c b/gdb/stubs/m68k-stub.c
similarity index 100%
rename from gdb/m68k-stub.c
rename to gdb/stubs/m68k-stub.c
diff --git a/gdb/sh-stub.c b/gdb/stubs/sh-stub.c
similarity index 100%
rename from gdb/sh-stub.c
rename to gdb/stubs/sh-stub.c
diff --git a/gdb/sparc-stub.c b/gdb/stubs/sparc-stub.c
similarity index 100%
rename from gdb/sparc-stub.c
rename to gdb/stubs/sparc-stub.c
diff --git a/gdb/symfile-mem.c b/gdb/symfile-mem.c
index 91125e1..e80fd25 100644
--- a/gdb/symfile-mem.c
+++ b/gdb/symfile-mem.c
@@ -55,6 +55,25 @@
 #include "auxv.h"
 #include "elf/common.h"
 
+/* Verify parameters of target_read_memory_bfd and target_read_memory are
+   compatible.  */
+
+gdb_static_assert (sizeof (CORE_ADDR) == sizeof (bfd_vma));
+gdb_static_assert (sizeof (gdb_byte) == sizeof (bfd_byte));
+gdb_static_assert (sizeof (ssize_t) <= sizeof (bfd_size_type));
+
+/* Provide bfd/ compatible prototype for target_read_memory.  Casting would not
+   be enough as LEN width may differ.  */
+
+static int
+target_read_memory_bfd (bfd_vma memaddr, bfd_byte *myaddr, bfd_size_type len)
+{
+  /* MYADDR must be already allocated for the LEN size so it has to fit in
+     ssize_t.  */
+  gdb_assert ((ssize_t) len == len);
+
+  return target_read_memory (memaddr, myaddr, len);
+}
 
 /* Read inferior memory at ADDR to find the header of a loaded object file
    and read its in-core symbols out of inferior memory.  TEMPL is a bfd
@@ -77,7 +96,7 @@ symbol_file_add_from_memory (struct bfd *templ, CORE_ADDR addr, char *name,
     error (_("add-symbol-file-from-memory not supported for this target"));
 
   nbfd = bfd_elf_bfd_from_remote_memory (templ, addr, &loadbase,
-					 target_read_memory);
+					 target_read_memory_bfd);
   if (nbfd == NULL)
     error (_("Failed to read a valid object file image from memory."));
 
diff --git a/gdb/symfile.c b/gdb/symfile.c
index 45cd175..01252e2 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -147,23 +147,6 @@ DEF_VEC_P (sym_fns_ptr);
 
 static VEC (sym_fns_ptr) *symtab_fns = NULL;
 
-/* Flag for whether user will be reloading symbols multiple times.
-   Defaults to ON for VxWorks, otherwise OFF.  */
-
-#ifdef SYMBOL_RELOADING_DEFAULT
-int symbol_reloading = SYMBOL_RELOADING_DEFAULT;
-#else
-int symbol_reloading = 0;
-#endif
-static void
-show_symbol_reloading (struct ui_file *file, int from_tty,
-		       struct cmd_list_element *c, const char *value)
-{
-  fprintf_filtered (file, _("Dynamic symbol table reloading "
-			    "multiple times in one run is %s.\n"),
-		    value);
-}
-
 /* If non-zero, shared library symbols will be added automatically
    when the inferior is created, new libraries are loaded, or when
    attaching to the inferior.  This is almost always what users will
@@ -561,7 +544,7 @@ addrs_section_compar (const void *ap, const void *bp)
 {
   const struct other_sections *a = *((struct other_sections **) ap);
   const struct other_sections *b = *((struct other_sections **) bp);
-  int retval, a_idx, b_idx;
+  int retval;
 
   retval = strcmp (addr_section_name (a->name), addr_section_name (b->name));
   if (retval)
@@ -1246,14 +1229,17 @@ symbol_file_add_main (char *args, int from_tty)
 static void
 symbol_file_add_main_1 (char *args, int from_tty, int flags)
 {
-  const int add_flags = SYMFILE_MAINLINE | (from_tty ? SYMFILE_VERBOSE : 0);
+  const int add_flags = (current_inferior ()->symfile_flags
+			 | SYMFILE_MAINLINE | (from_tty ? SYMFILE_VERBOSE : 0));
+
   symbol_file_add (args, add_flags, NULL, flags);
 
   /* Getting new symbols may change our opinion about
      what is frameless.  */
   reinit_frame_cache ();
 
-  set_initial_language ();
+  if ((flags & SYMFILE_NO_READ) == 0)
+    set_initial_language ();
 }
 
 void
@@ -1441,118 +1427,174 @@ show_debug_file_directory (struct ui_file *file, int from_tty,
 #define DEBUG_SUBDIRECTORY ".debug"
 #endif
 
-char *
-find_separate_debug_file_by_debuglink (struct objfile *objfile)
+/* Find a separate debuginfo file for OBJFILE, using DIR as the directory
+   where the original file resides (may not be the same as
+   dirname(objfile->name) due to symlinks), and DEBUGLINK as the file we are
+   looking for.  Returns the name of the debuginfo, of NULL.  */
+
+static char *
+find_separate_debug_file (const char *dir,
+			  const char *canon_dir,
+			  const char *debuglink,
+			  unsigned long crc32, struct objfile *objfile)
 {
-  char *basename, *debugdir;
-  char *dir = NULL;
-  char *debugfile = NULL;
-  char *canon_name = NULL;
-  unsigned long crc32;
+  char *debugdir;
+  char *debugfile;
   int i;
+  VEC (char_ptr) *debugdir_vec;
+  struct cleanup *back_to;
+  int ix;
 
-  basename = get_debug_link_info (objfile, &crc32);
-
-  if (basename == NULL)
-    /* There's no separate debug info, hence there's no way we could
-       load it => no warning.  */
-    goto cleanup_return_debugfile;
-
-  dir = xstrdup (objfile->name);
-
-  /* Strip off the final filename part, leaving the directory name,
-     followed by a slash.  The directory can be relative or absolute.  */
-  for (i = strlen(dir) - 1; i >= 0; i--)
-    {
-      if (IS_DIR_SEPARATOR (dir[i]))
-	break;
-    }
-  /* If I is -1 then no directory is present there and DIR will be "".  */
-  dir[i+1] = '\0';
-
-  /* Set I to max (strlen (canon_name), strlen (dir)).  */
-  canon_name = lrealpath (dir);
+  /* Set I to max (strlen (canon_dir), strlen (dir)).  */
   i = strlen (dir);
-  if (canon_name && strlen (canon_name) > i)
-    i = strlen (canon_name);
+  if (canon_dir != NULL && strlen (canon_dir) > i)
+    i = strlen (canon_dir);
 
   debugfile = xmalloc (strlen (debug_file_directory) + 1
 		       + i
 		       + strlen (DEBUG_SUBDIRECTORY)
 		       + strlen ("/")
-		       + strlen (basename)
+		       + strlen (debuglink)
 		       + 1);
 
   /* First try in the same directory as the original file.  */
   strcpy (debugfile, dir);
-  strcat (debugfile, basename);
+  strcat (debugfile, debuglink);
 
   if (separate_debug_file_exists (debugfile, crc32, objfile))
-    goto cleanup_return_debugfile;
+    return debugfile;
 
   /* Then try in the subdirectory named DEBUG_SUBDIRECTORY.  */
   strcpy (debugfile, dir);
   strcat (debugfile, DEBUG_SUBDIRECTORY);
   strcat (debugfile, "/");
-  strcat (debugfile, basename);
+  strcat (debugfile, debuglink);
 
   if (separate_debug_file_exists (debugfile, crc32, objfile))
-    goto cleanup_return_debugfile;
+    return debugfile;
 
   /* Then try in the global debugfile directories.
- 
+
      Keep backward compatibility so that DEBUG_FILE_DIRECTORY being "" will
      cause "/..." lookups.  */
 
-  debugdir = debug_file_directory;
-  do
-    {
-      char *debugdir_end;
-
-      while (*debugdir == DIRNAME_SEPARATOR)
-	debugdir++;
-
-      debugdir_end = strchr (debugdir, DIRNAME_SEPARATOR);
-      if (debugdir_end == NULL)
-	debugdir_end = &debugdir[strlen (debugdir)];
+  debugdir_vec = dirnames_to_char_ptr_vec (debug_file_directory);
+  back_to = make_cleanup_free_char_ptr_vec (debugdir_vec);
 
-      memcpy (debugfile, debugdir, debugdir_end - debugdir);
-      debugfile[debugdir_end - debugdir] = 0;
+  for (ix = 0; VEC_iterate (char_ptr, debugdir_vec, ix, debugdir); ++ix)
+    {
+      strcpy (debugfile, debugdir);
       strcat (debugfile, "/");
       strcat (debugfile, dir);
-      strcat (debugfile, basename);
+      strcat (debugfile, debuglink);
 
       if (separate_debug_file_exists (debugfile, crc32, objfile))
-	goto cleanup_return_debugfile;
+	return debugfile;
 
       /* If the file is in the sysroot, try using its base path in the
 	 global debugfile directory.  */
-      if (canon_name
-	  && filename_ncmp (canon_name, gdb_sysroot,
+      if (canon_dir != NULL
+	  && filename_ncmp (canon_dir, gdb_sysroot,
 			    strlen (gdb_sysroot)) == 0
-	  && IS_DIR_SEPARATOR (canon_name[strlen (gdb_sysroot)]))
+	  && IS_DIR_SEPARATOR (canon_dir[strlen (gdb_sysroot)]))
 	{
-	  memcpy (debugfile, debugdir, debugdir_end - debugdir);
-	  debugfile[debugdir_end - debugdir] = 0;
-	  strcat (debugfile, canon_name + strlen (gdb_sysroot));
+	  strcpy (debugfile, debugdir);
+	  strcat (debugfile, canon_dir + strlen (gdb_sysroot));
 	  strcat (debugfile, "/");
-	  strcat (debugfile, basename);
+	  strcat (debugfile, debuglink);
 
 	  if (separate_debug_file_exists (debugfile, crc32, objfile))
-	    goto cleanup_return_debugfile;
+	    return debugfile;
 	}
-
-      debugdir = debugdir_end;
     }
-  while (*debugdir != 0);
-  
+
+  do_cleanups (back_to);
   xfree (debugfile);
-  debugfile = NULL;
+  return NULL;
+}
+
+/* Modify PATH to contain only "directory/" part of PATH.
+   If there were no directory separators in PATH, PATH will be empty
+   string on return.  */
+
+static void
+terminate_after_last_dir_separator (char *path)
+{
+  int i;
+
+  /* Strip off the final filename part, leaving the directory name,
+     followed by a slash.  The directory can be relative or absolute.  */
+  for (i = strlen(path) - 1; i >= 0; i--)
+    if (IS_DIR_SEPARATOR (path[i]))
+      break;
+
+  /* If I is -1 then no directory is present there and DIR will be "".  */
+  path[i + 1] = '\0';
+}
+
+/* Find separate debuginfo for OBJFILE (using .gnu_debuglink section).
+   Returns pathname, or NULL.  */
+
+char *
+find_separate_debug_file_by_debuglink (struct objfile *objfile)
+{
+  char *debuglink;
+  char *dir, *canon_dir;
+  char *debugfile;
+  unsigned long crc32;
+  struct cleanup *cleanups;
+
+  debuglink = get_debug_link_info (objfile, &crc32);
+
+  if (debuglink == NULL)
+    {
+      /* There's no separate debug info, hence there's no way we could
+	 load it => no warning.  */
+      return NULL;
+    }
+
+  cleanups = make_cleanup (xfree, debuglink);
+  dir = xstrdup (objfile->name);
+  make_cleanup (xfree, dir);
+  terminate_after_last_dir_separator (dir);
+  canon_dir = lrealpath (dir);
+
+  debugfile = find_separate_debug_file (dir, canon_dir, debuglink,
+					crc32, objfile);
+  xfree (canon_dir);
+
+  if (debugfile == NULL)
+    {
+#ifdef HAVE_LSTAT
+      /* For PR gdb/9538, try again with realpath (if different from the
+	 original).  */
+
+      struct stat st_buf;
+
+      if (lstat (objfile->name, &st_buf) == 0 && S_ISLNK(st_buf.st_mode))
+	{
+	  char *symlink_dir;
+
+	  symlink_dir = lrealpath (objfile->name);
+	  if (symlink_dir != NULL)
+	    {
+	      make_cleanup (xfree, symlink_dir);
+	      terminate_after_last_dir_separator (symlink_dir);
+	      if (strcmp (dir, symlink_dir) != 0)
+		{
+		  /* Different directory, so try using it.  */
+		  debugfile = find_separate_debug_file (symlink_dir,
+							symlink_dir,
+							debuglink,
+							crc32,
+							objfile);
+		}
+	    }
+	}
+#endif  /* HAVE_LSTAT  */
+    }
 
-cleanup_return_debugfile:
-  xfree (canon_name);
-  xfree (basename);
-  xfree (dir);
+  do_cleanups (cleanups);
   return debugfile;
 }
 
@@ -1631,7 +1673,7 @@ set_initial_language (void)
   else
     {
       const char *filename;
-      
+
       filename = find_main_filename ();
       if (filename != NULL)
 	lang = deduce_language_from_filename (filename);
@@ -1723,7 +1765,6 @@ symfile_bfd_open (char *name)
   sym_bfd = bfd_fopen (name, gnutarget, FOPEN_RB, desc);
   if (!sym_bfd)
     {
-      close (desc);
       make_cleanup (xfree, name);
       error (_("`%s': can't open to read symbols: %s."), name,
 	     bfd_errmsg (bfd_get_error ()));
@@ -2369,15 +2410,22 @@ add_symbol_file_command (char *args, int from_tty)
 }
 

 
+typedef struct objfile *objfilep;
+
+DEF_VEC_P (objfilep);
+
 /* Re-read symbols if a symbol-file has changed.  */
 void
 reread_symbols (void)
 {
   struct objfile *objfile;
   long new_modtime;
-  int reread_one = 0;
   struct stat new_statbuf;
   int res;
+  VEC (objfilep) *new_objfiles = NULL;
+  struct cleanup *all_cleanups;
+
+  all_cleanups = make_cleanup (VEC_cleanup (objfilep), &new_objfiles);
 
   /* With the addition of shared libraries, this should be modified,
      the load time should be saved in the partial symbol tables, since
@@ -2532,14 +2580,9 @@ reread_symbols (void)
 
 	  /* obstack_init also initializes the obstack so it is
 	     empty.  We could use obstack_specify_allocation but
-	     gdb_obstack.h specifies the alloc/dealloc
-	     functions.  */
+	     gdb_obstack.h specifies the alloc/dealloc functions.  */
 	  obstack_init (&objfile->objfile_obstack);
-	  if (build_objfile_section_table (objfile))
-	    {
-	      error (_("Can't find the file sections in `%s': %s"),
-		     objfile->name, bfd_errmsg (bfd_get_error ()));
-	    }
+	  build_objfile_section_table (objfile);
 	  terminate_minimal_symbol_table (objfile);
 
 	  /* We use the same section offsets as from last time.  I'm not
@@ -2592,21 +2635,33 @@ reread_symbols (void)
 	     and now, we *want* this to be out of date, so don't call stat
 	     again now.  */
 	  objfile->mtime = new_modtime;
-	  reread_one = 1;
 	  init_entry_point_info (objfile);
+
+	  VEC_safe_push (objfilep, new_objfiles, objfile);
 	}
     }
 
-  if (reread_one)
+  if (new_objfiles)
     {
+      int ix;
+
       /* Notify objfiles that we've modified objfile sections.  */
       objfiles_changed ();
 
       clear_symtab_users (0);
+
+      /* clear_objfile_data for each objfile was called before freeing it and
+	 observer_notify_new_objfile (NULL) has been called by
+	 clear_symtab_users above.  Notify the new files now.  */
+      for (ix = 0; VEC_iterate (objfilep, new_objfiles, ix, objfile); ix++)
+	observer_notify_new_objfile (objfile);
+
       /* At least one objfile has changed, so we can consider that
          the executable we're debugging has changed too.  */
       observer_notify_executable_changed ();
     }
+
+  do_cleanups (all_cleanups);
 }
 

 
@@ -2818,6 +2873,26 @@ allocate_symtab (const char *filename, struct objfile *objfile)
   symtab->next = objfile->symtabs;
   objfile->symtabs = symtab;
 
+  if (symtab_create_debug)
+    {
+      /* Be a bit clever with debugging messages, and don't print objfile
+	 every time, only when it changes.  */
+      static char *last_objfile_name = NULL;
+
+      if (last_objfile_name == NULL
+	  || strcmp (last_objfile_name, objfile->name) != 0)
+	{
+	  xfree (last_objfile_name);
+	  last_objfile_name = xstrdup (objfile->name);
+	  fprintf_unfiltered (gdb_stdlog,
+			      "Creating one or more symtabs for objfile %s ...\n",
+			      last_objfile_name);
+	}
+      fprintf_unfiltered (gdb_stdlog,
+			  "Created symtab 0x%lx for module %s.\n",
+			  (long) symtab, filename);
+    }
+
   return (symtab);
 }
 

@@ -2923,7 +2998,7 @@ section_is_overlay (struct obj_section *section)
     {
       bfd *abfd = section->objfile->obfd;
       asection *bfd_section = section->the_bfd_section;
-  
+
       if (bfd_section_lma (abfd, bfd_section) != 0
 	  && bfd_section_lma (abfd, bfd_section)
 	     != bfd_section_vma (abfd, bfd_section))
@@ -3570,7 +3645,9 @@ bfd_byte *
 default_symfile_relocate (struct objfile *objfile, asection *sectp,
                           bfd_byte *buf)
 {
-  bfd *abfd = objfile->obfd;
+  /* Use sectp->owner instead of objfile->obfd.  sectp may point to a
+     DWO file.  */
+  bfd *abfd = sectp->owner;
 
   /* We're only interested in sections with relocation
      information.  */
@@ -3753,14 +3830,6 @@ for access from GDB.\n\
 A load OFFSET may also be given."), &cmdlist);
   set_cmd_completer (c, filename_completer);
 
-  add_setshow_boolean_cmd ("symbol-reloading", class_support,
-			   &symbol_reloading, _("\
-Set dynamic symbol table reloading multiple times in one run."), _("\
-Show dynamic symbol table reloading multiple times in one run."), NULL,
-			   NULL,
-			   show_symbol_reloading,
-			   &setlist, &showlist);
-
   add_prefix_cmd ("overlay", class_support, overlay_command,
 		  _("Commands for debugging overlays."), &overlaylist,
 		  "overlay ", 0, &cmdlist);
diff --git a/gdb/symfile.h b/gdb/symfile.h
index 604fe16..aca7359 100644
--- a/gdb/symfile.h
+++ b/gdb/symfile.h
@@ -22,6 +22,7 @@
 
 /* This file requires that you first include "bfd.h".  */
 #include "symtab.h"
+#include "gdb_vecs.h"
 
 /* Opaque declarations.  */
 struct target_section;
@@ -29,6 +30,11 @@ struct objfile;
 struct obj_section;
 struct obstack;
 struct block;
+struct probe;
+struct value;
+struct frame_info;
+struct agent_expr;
+struct axs_value;
 
 /* Comparison function for symbol look ups.  */
 
@@ -153,7 +159,7 @@ struct quick_symbol_functions
   /* Expand and iterate over each "partial" symbol table in OBJFILE
      where the source file is named NAME.
 
-     If there is no '/' in the name, a match after a '/' in the symbol
+     If NAME is not absolute, a match after a '/' in the symbol
      table's file name will also work.  FULL_PATH is the absolute file
      name, and REAL_PATH is the same, run through gdb_realpath.
 
@@ -176,7 +182,9 @@ struct quick_symbol_functions
      indicates what sort of symbol to search for.
 
      Returns the newly-expanded symbol table in which the symbol is
-     defined, or NULL if no such symbol table exists.  */
+     defined, or NULL if no such symbol table exists.  If OBJFILE
+     contains !TYPE_OPAQUE symbol prefer its symtab.  If it contains
+     only TYPE_OPAQUE symbol(s), return at least that symtab.  */
   struct symtab *(*lookup_symbol) (struct objfile *objfile,
 				   int kind, const char *name,
 				   domain_enum domain);
@@ -258,13 +266,10 @@ struct quick_symbol_functions
      file is skipped.  If FILE_MATCHER is NULL such file is not skipped.
 
      Otherwise, if KIND does not match this symbol is skipped.
-     
+
      If even KIND matches, then NAME_MATCHER is called for each symbol
-     defined in the file.  The current language, the symbol name and
-     DATA are passed to NAME_MATCHER.  The symbol "natural" name should
-     be passed to NAME_MATCHER for all languages except Ada, where
-     the encoded name is passed instead (see la_symbol_name_compare in
-     struct language_defn for more details on this).
+     defined in the file.  The symbol "search" name and DATA are passed
+     to NAME_MATCHER.
 
      If NAME_MATCHER returns zero, then this symbol is skipped.
 
@@ -275,7 +280,7 @@ struct quick_symbol_functions
   void (*expand_symtabs_matching)
     (struct objfile *objfile,
      int (*file_matcher) (const char *, void *),
-     int (*name_matcher) (const struct language_defn *, const char *, void *),
+     int (*name_matcher) (const char *, void *),
      enum search_domain kind,
      void *data);
 
@@ -300,6 +305,52 @@ struct quick_symbol_functions
 				int need_fullname);
 };
 
+/* Structure of functions used for probe support.  If one of these functions
+   is provided, all must be.  */
+
+struct sym_probe_fns
+{
+  /* If non-NULL, return an array of probe objects.
+
+     The returned value does not have to be freed and it has lifetime of the
+     OBJFILE.  */
+  VEC (probe_p) *(*sym_get_probes) (struct objfile *);
+
+  /* Return the number of arguments available to PROBE.  PROBE will
+     have come from a call to this objfile's sym_get_probes method.
+     If you provide an implementation of sym_get_probes, you must
+     implement this method as well.  */
+  unsigned (*sym_get_probe_argument_count) (struct objfile *objfile,
+					    struct probe *probe);
+
+  /* Evaluate the Nth argument available to PROBE.  PROBE will have
+     come from a call to this objfile's sym_get_probes method.  N will
+     be between 0 and the number of arguments available to this probe.
+     FRAME is the frame in which the evaluation is done; the frame's
+     PC will match the address of the probe.  If you provide an
+     implementation of sym_get_probes, you must implement this method
+     as well.  */
+  struct value *(*sym_evaluate_probe_argument) (struct objfile *objfile,
+						struct probe *probe,
+						unsigned n);
+
+  /* Compile the Nth probe argument to an agent expression.  PROBE
+     will have come from a call to this objfile's sym_get_probes
+     method.  N will be between 0 and the number of arguments
+     available to this probe.  EXPR and VALUE are the agent expression
+     that is being updated.  */
+  void (*sym_compile_to_ax) (struct objfile *objfile,
+			     struct probe *probe,
+			     struct agent_expr *expr,
+			     struct axs_value *value,
+			     unsigned n);
+
+  /* Relocate the probe section of OBJFILE.  */
+  void (*sym_relocate_probe) (struct objfile *objfile,
+			      struct section_offsets *new_offsets,
+			      struct section_offsets *delta);
+};
+
 /* Structure to keep track of symbol reading functions for various
    object file types.  */
 
@@ -370,6 +421,10 @@ struct sym_fns
 
   bfd_byte *(*sym_relocate) (struct objfile *, asection *sectp, bfd_byte *buf);
 
+  /* If non-NULL, this objfile has probe support, and all the probe
+     functions referred to here will be non-NULL.  */
+  const struct sym_probe_fns *sym_probe_fns;
+
   /* The "quick" (aka partial) symbol functions for this symbol
      reader.  */
   const struct quick_symbol_functions *qf;
@@ -592,6 +647,7 @@ struct dwarf2_debug_sections {
   struct dwarf2_section_names str;
   struct dwarf2_section_names ranges;
   struct dwarf2_section_names types;
+  struct dwarf2_section_names addr;
   struct dwarf2_section_names frame;
   struct dwarf2_section_names eh_frame;
   struct dwarf2_section_names gdb_index;
diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index daa0b43..d5a737b 100644
--- a/gdb/symmisc.c
+++ b/gdb/symmisc.c
@@ -353,8 +353,9 @@ dump_symtab_1 (struct objfile *objfile, struct symtab *symtab,
 	    }
 	  fprintf_filtered (outfile, "\n");
 	  /* Now print each symbol in this block (in no particular order, if
-	     we're using a hashtable).  */
-	  ALL_BLOCK_SYMBOLS (b, iter, sym)
+	     we're using a hashtable).  Note that we only want this
+	     block, not any blocks from included symtabs.  */
+	  ALL_DICT_SYMBOLS (BLOCK_DICT (b), iter, sym)
 	    {
 	      struct print_symbol_args s;
 
@@ -509,9 +510,9 @@ print_symbol (void *args)
       switch (SYMBOL_CLASS (symbol))
 	{
 	case LOC_CONST:
-	  fprintf_filtered (outfile, "const %ld (0x%lx)",
-			    SYMBOL_VALUE (symbol),
-			    SYMBOL_VALUE (symbol));
+	  fprintf_filtered (outfile, "const %s (%s)",
+			    plongest (SYMBOL_VALUE (symbol)),
+			    hex_string (SYMBOL_VALUE (symbol)));
 	  break;
 
 	case LOC_CONST_BYTES:
@@ -539,28 +540,31 @@ print_symbol (void *args)
 
 	case LOC_REGISTER:
 	  if (SYMBOL_IS_ARGUMENT (symbol))
-	    fprintf_filtered (outfile, "parameter register %ld",
-			      SYMBOL_VALUE (symbol));
+	    fprintf_filtered (outfile, "parameter register %s",
+			      plongest (SYMBOL_VALUE (symbol)));
 	  else
-	    fprintf_filtered (outfile, "register %ld", SYMBOL_VALUE (symbol));
+	    fprintf_filtered (outfile, "register %s",
+			      plongest (SYMBOL_VALUE (symbol)));
 	  break;
 
 	case LOC_ARG:
-	  fprintf_filtered (outfile, "arg at offset 0x%lx",
-			    SYMBOL_VALUE (symbol));
+	  fprintf_filtered (outfile, "arg at offset %s",
+			    hex_string (SYMBOL_VALUE (symbol)));
 	  break;
 
 	case LOC_REF_ARG:
-	  fprintf_filtered (outfile, "reference arg at 0x%lx", SYMBOL_VALUE (symbol));
+	  fprintf_filtered (outfile, "reference arg at %s",
+			    hex_string (SYMBOL_VALUE (symbol)));
 	  break;
 
 	case LOC_REGPARM_ADDR:
-	  fprintf_filtered (outfile, "address parameter register %ld", SYMBOL_VALUE (symbol));
+	  fprintf_filtered (outfile, "address parameter register %s",
+			    plongest (SYMBOL_VALUE (symbol)));
 	  break;
 
 	case LOC_LOCAL:
-	  fprintf_filtered (outfile, "local at offset 0x%lx",
-			    SYMBOL_VALUE (symbol));
+	  fprintf_filtered (outfile, "local at offset %s",
+			    hex_string (SYMBOL_VALUE (symbol)));
 	  break;
 
 	case LOC_TYPEDEF:
diff --git a/gdb/symtab.c b/gdb/symtab.c
index ab6a1aa..183e115 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -33,12 +33,12 @@
 #include "language.h"
 #include "demangle.h"
 #include "inferior.h"
-#include "linespec.h"
 #include "source.h"
 #include "filenames.h"		/* for FILENAME_CMP */
 #include "objc-lang.h"
 #include "d-lang.h"
 #include "ada-lang.h"
+#include "go-lang.h"
 #include "p-lang.h"
 #include "addrmap.h"
 
@@ -65,8 +65,6 @@
 
 /* Prototypes for local functions */
 
-static void completion_list_add_name (char *, char *, int, char *, char *);
-
 static void rbreak_command (char *, int);
 
 static void types_info (char *, int);
@@ -77,8 +75,6 @@ static void variables_info (char *, int);
 
 static void sources_info (char *, int);
 
-static void output_source_filename (const char *, int *);
-
 static int find_line_common (struct linetable *, int, int *, int);
 
 static struct symbol *lookup_symbol_aux (const char *name,
@@ -110,6 +106,9 @@ void _initialize_symtab (void);
 
 /* */
 
+/* When non-zero, print debugging messages related to symtab creation.  */
+int symtab_create_debug = 0;
+
 /* Non-zero if a file may be known by two different basenames.
    This is the uncommon case, and significantly slows down gdb.
    Default set to "off" to not slow down the common case.  */
@@ -122,7 +121,7 @@ int basenames_may_differ = 0;
 const char multiple_symbols_ask[] = "ask";
 const char multiple_symbols_all[] = "all";
 const char multiple_symbols_cancel[] = "cancel";
-static const char *multiple_symbols_modes[] =
+static const char *const multiple_symbols_modes[] =
 {
   multiple_symbols_ask,
   multiple_symbols_all,
@@ -145,6 +144,34 @@ multiple_symbols_select_mode (void)
 
 const struct block *block_found;
 
+/* See whether FILENAME matches SEARCH_NAME using the rule that we
+   advertise to the user.  (The manual's description of linespecs
+   describes what we advertise).  SEARCH_LEN is the length of
+   SEARCH_NAME.  We assume that SEARCH_NAME is a relative path.
+   Returns true if they match, false otherwise.  */
+
+int
+compare_filenames_for_search (const char *filename, const char *search_name,
+			      int search_len)
+{
+  int len = strlen (filename);
+
+  if (len < search_len)
+    return 0;
+
+  /* The tail of FILENAME must match.  */
+  if (FILENAME_CMP (filename + len - search_len, search_name) != 0)
+    return 0;
+
+  /* Either the names must completely match, or the character
+     preceding the trailing SEARCH_NAME segment of FILENAME must be a
+     directory separator.  */
+  return (len == search_len
+	  || IS_DIR_SEPARATOR (filename[len - search_len - 1])
+	  || (HAS_DRIVE_SPEC (filename)
+	      && STRIP_DRIVE_SPEC (filename) == &filename[len - search_len]));
+}
+
 /* Check for a symtab of a specific name by searching some symtabs.
    This is a helper function for callbacks of iterate_over_symtabs.
 
@@ -167,17 +194,25 @@ iterate_over_some_symtabs (const char *name,
 			   struct symtab *after_last)
 {
   struct symtab *s = NULL;
-  struct cleanup *cleanup;
   const char* base_name = lbasename (name);
+  int name_len = strlen (name);
+  int is_abs = IS_ABSOLUTE_PATH (name);
 
   for (s = first; s != NULL && s != after_last; s = s->next)
     {
+      /* Exact match is always ok.  */
       if (FILENAME_CMP (name, s->filename) == 0)
 	{
 	  if (callback (s, data))
 	    return 1;
 	}
 
+      if (!is_abs && compare_filenames_for_search (s->filename, name, name_len))
+	{
+	  if (callback (s, data))
+	    return 1;
+	}
+
     /* Before we invoke realpath, which can get expensive when many
        files are involved, do a quick comparison of the basenames.  */
     if (! basenames_may_differ
@@ -196,6 +231,13 @@ iterate_over_some_symtabs (const char *name,
 	    if (callback (s, data))
 	      return 1;
           }
+
+	if (fp != NULL && !is_abs && compare_filenames_for_search (fp, name,
+								   name_len))
+	  {
+	    if (callback (s, data))
+	      return 1;
+	  }
       }
 
     if (real_path != NULL)
@@ -212,24 +254,16 @@ iterate_over_some_symtabs (const char *name,
 		if (callback (s, data))
 		  return 1;
 	      }
+
+	    if (!is_abs && compare_filenames_for_search (rp, name, name_len))
+	      {
+		if (callback (s, data))
+		  return 1;
+	      }
           }
       }
     }
 
-  /* Now, search for a matching tail (only if name doesn't have any dirs).  */
-
-  if (lbasename (name) == name)
-    {
-      for (s = first; s != NULL && s != after_last; s = s->next)
-	{
-	  if (FILENAME_CMP (lbasename (s->filename), name) == 0)
-	    {
-	      if (callback (s, data))
-		return 1;
-	    }
-	}
-    }
-
   return 0;
 }
 
@@ -329,9 +363,9 @@ gdb_mangle_name (struct type *type, int method_id, int signature_id)
   char *mangled_name;
   struct fn_field *f = TYPE_FN_FIELDLIST1 (type, method_id);
   struct fn_field *method = &f[signature_id];
-  char *field_name = TYPE_FN_FIELDLIST_NAME (type, method_id);
+  const char *field_name = TYPE_FN_FIELDLIST_NAME (type, method_id);
   const char *physname = TYPE_FN_FIELD_PHYSNAME (f, signature_id);
-  char *newname = type_name_no_tag (type);
+  const char *newname = type_name_no_tag (type);
 
   /* Does the form of physname indicate that it is the full mangled name
      of a constructor (not just the args)?  */
@@ -422,6 +456,7 @@ symbol_init_cplus_specific (struct general_symbol_info *gsymbol,
    correctly allocated.  For C++ symbols a cplus_specific struct is
    allocated so OBJFILE must not be NULL.  If this is a non C++ symbol
    OBJFILE can be NULL.  */
+
 void
 symbol_set_demangled_name (struct general_symbol_info *gsymbol,
                            char *name,
@@ -439,7 +474,8 @@ symbol_set_demangled_name (struct general_symbol_info *gsymbol,
 }
 
 /* Return the demangled name of GSYMBOL.  */
-char *
+
+const char *
 symbol_get_demangled_name (const struct general_symbol_info *gsymbol)
 {
   if (gsymbol->language == language_cplus)
@@ -456,12 +492,14 @@ symbol_get_demangled_name (const struct general_symbol_info *gsymbol)
 

 /* Initialize the language dependent portion of a symbol
    depending upon the language for the symbol.  */
+
 void
 symbol_set_language (struct general_symbol_info *gsymbol,
                      enum language language)
 {
   gsymbol->language = language;
   if (gsymbol->language == language_d
+      || gsymbol->language == language_go
       || gsymbol->language == language_java
       || gsymbol->language == language_objc
       || gsymbol->language == language_fortran)
@@ -487,6 +525,7 @@ struct demangled_name_entry
 };
 
 /* Hash function for the demangled name hash.  */
+
 static hashval_t
 hash_demangled_name_entry (const void *data)
 {
@@ -496,6 +535,7 @@ hash_demangled_name_entry (const void *data)
 }
 
 /* Equality function for the demangled name hash.  */
+
 static int
 eq_demangled_name_entry (const void *a, const void *b)
 {
@@ -580,6 +620,22 @@ symbol_find_demangled_name (struct general_symbol_info *gsymbol,
 	  return demangled;
 	}
     }
+  /* FIXME(dje): Continually adding languages here is clumsy.
+     Better to just call la_demangle if !auto, and if auto then call
+     a utility routine that tries successive languages in turn and reports
+     which one it finds.  I realize the la_demangle options may be different
+     for different languages but there's already a FIXME for that.  */
+  if (gsymbol->language == language_go
+      || gsymbol->language == language_auto)
+    {
+      demangled = go_demangle (mangled, 0);
+      if (demangled != NULL)
+	{
+	  gsymbol->language = language_go;
+	  return demangled;
+	}
+    }
+
   /* We could support `gsymbol->language == language_fortran' here to provide
      module namespaces also for inferiors with only minimal symbol table (ELF
      symbols).  Just the mangling standard is not standardized across compilers
@@ -644,12 +700,14 @@ symbol_set_names (struct general_symbol_info *gsymbol,
          name with the symbol, we don't need to use the same trick
          as Java.  */
       if (!copy_name)
-	gsymbol->name = (char *) linkage_name;
+	gsymbol->name = linkage_name;
       else
 	{
-	  gsymbol->name = obstack_alloc (&objfile->objfile_obstack, len + 1);
-	  memcpy (gsymbol->name, linkage_name, len);
-	  gsymbol->name[len] = '\0';
+	  char *name = obstack_alloc (&objfile->objfile_obstack, len + 1);
+
+	  memcpy (name, linkage_name, len);
+	  name[len] = '\0';
+	  gsymbol->name = name;
 	}
       symbol_set_demangled_name (gsymbol, NULL, NULL);
 
@@ -700,7 +758,11 @@ symbol_set_names (struct general_symbol_info *gsymbol,
 			  &entry, INSERT));
 
   /* If this name is not in the hash table, add it.  */
-  if (*slot == NULL)
+  if (*slot == NULL
+      /* A C version of the symbol may have already snuck into the table.
+	 This happens to, e.g., main.init (__go_init_main).  Cope.  */
+      || (gsymbol->language == language_go
+	  && (*slot)->demangled[0] == '\0'))
     {
       char *demangled_name = symbol_find_demangled_name (gsymbol,
 							 linkage_name_copy);
@@ -755,13 +817,14 @@ symbol_set_names (struct general_symbol_info *gsymbol,
 /* Return the source code name of a symbol.  In languages where
    demangling is necessary, this is the demangled name.  */
 
-char *
+const char *
 symbol_natural_name (const struct general_symbol_info *gsymbol)
 {
   switch (gsymbol->language)
     {
     case language_cplus:
     case language_d:
+    case language_go:
     case language_java:
     case language_objc:
     case language_fortran:
@@ -782,36 +845,39 @@ symbol_natural_name (const struct general_symbol_info *gsymbol)
 
 /* Return the demangled name for a symbol based on the language for
    that symbol.  If no demangled name exists, return NULL.  */
-char *
+
+const char *
 symbol_demangled_name (const struct general_symbol_info *gsymbol)
 {
+  const char *dem_name = NULL;
+
   switch (gsymbol->language)
     {
     case language_cplus:
     case language_d:
+    case language_go:
     case language_java:
     case language_objc:
     case language_fortran:
-      if (symbol_get_demangled_name (gsymbol) != NULL)
-	return symbol_get_demangled_name (gsymbol);
+      dem_name = symbol_get_demangled_name (gsymbol);
       break;
     case language_ada:
-      if (symbol_get_demangled_name (gsymbol) != NULL)
-	return symbol_get_demangled_name (gsymbol);
-      else
-	return ada_decode_symbol (gsymbol);
+      dem_name = symbol_get_demangled_name (gsymbol);
+      if (dem_name == NULL)
+	dem_name = ada_decode_symbol (gsymbol);
       break;
     default:
       break;
     }
-  return NULL;
+  return dem_name;
 }
 
 /* Return the search name of a symbol---generally the demangled or
    linkage name of the symbol, depending on how it will be searched for.
    If there is no distinct demangled name, then returns the same value
    (same pointer) as SYMBOL_LINKAGE_NAME.  */
-char *
+
+const char *
 symbol_search_name (const struct general_symbol_info *gsymbol)
 {
   if (gsymbol->language == language_ada)
@@ -821,6 +887,7 @@ symbol_search_name (const struct general_symbol_info *gsymbol)
 }
 
 /* Initialize the structure fields to zero values.  */
+
 void
 init_sal (struct symtab_and_line *sal)
 {
@@ -832,6 +899,7 @@ init_sal (struct symtab_and_line *sal)
   sal->end = 0;
   sal->explicit_pc = 0;
   sal->explicit_line = 0;
+  sal->probe = NULL;
 }
 

 
@@ -1078,7 +1146,7 @@ demangle_for_lookup (const char *name, enum language lang,
 
   modified_name = name;
 
-  /* If we are using C++, D, or Java, demangle the name before doing a
+  /* If we are using C++, D, Go, or Java, demangle the name before doing a
      lookup, so we can always binary search.  */
   if (lang == language_cplus)
     {
@@ -1119,6 +1187,15 @@ demangle_for_lookup (const char *name, enum language lang,
 	  make_cleanup (xfree, demangled_name);
 	}
     }
+  else if (lang == language_go)
+    {
+      demangled_name = go_demangle (name, 0);
+      if (demangled_name)
+	{
+	  modified_name = demangled_name;
+	  make_cleanup (xfree, demangled_name);
+	}
+    }
 
   *result_name = modified_name;
   return cleanup;
@@ -1133,11 +1210,11 @@ demangle_for_lookup (const char *name, enum language lang,
    BLOCK_FOUND is set to the block in which NAME is found (in the case of
    a field of `this', value_of_this sets BLOCK_FOUND to the proper value.)  */
 
-/* This function has a bunch of loops in it and it would seem to be
-   attractive to put in some QUIT's (though I'm not really sure
-   whether it can run long enough to be really important).  But there
+/* This function (or rather its subordinates) have a bunch of loops and
+   it would seem to be attractive to put in some QUIT's (though I'm not really
+   sure whether it can run long enough to be really important).  But there
    are a few calls for which it would appear to be bad news to quit
-   out of here: find_proc_desc in alpha-tdep.c and mips-tdep.c.  (Note
+   out of here: e.g., find_proc_desc in alpha-mdebug-tdep.c.  (Note
    that there is C++ code below which can error(), but that probably
    doesn't affect these calls since they are looking for a known
    variable and thus can probably assume it will never hit the C++
@@ -1187,7 +1264,10 @@ lookup_language_this (const struct language_defn *lang,
 
       sym = lookup_block_symbol (block, lang->la_name_of_this, VAR_DOMAIN);
       if (sym != NULL)
-	return sym;
+	{
+	  block_found = block;
+	  return sym;
+	}
       if (BLOCK_FUNCTION (block))
 	break;
       block = BLOCK_SUPERBLOCK (block);
@@ -1197,9 +1277,7 @@ lookup_language_this (const struct language_defn *lang,
 }
 
 /* Behave like lookup_symbol except that NAME is the natural name
-   of the symbol that we're looking for and, if LINKAGE_NAME is
-   non-NULL, ensure that the symbol's linkage name matches as
-   well.  */
+   (e.g., demangled name) of the symbol that we're looking for.  */
 
 static struct symbol *
 lookup_symbol_aux (const char *name, const struct block *block,
@@ -1399,17 +1477,17 @@ lookup_global_symbol_from_objfile (const struct objfile *main_objfile,
        objfile = objfile_separate_debug_iterate (main_objfile, objfile))
     {
       /* Go through symtabs.  */
-      ALL_OBJFILE_SYMTABS (objfile, s)
-        {
-          bv = BLOCKVECTOR (s);
-          block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
-          sym = lookup_block_symbol (block, name, domain);
-          if (sym)
-            {
-              block_found = block;
-              return fixup_symbol_section (sym, (struct objfile *)objfile);
-            }
-        }
+      ALL_OBJFILE_PRIMARY_SYMTABS (objfile, s)
+	{
+	  bv = BLOCKVECTOR (s);
+	  block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
+	  sym = lookup_block_symbol (block, name, domain);
+	  if (sym)
+	    {
+	      block_found = block;
+	      return fixup_symbol_section (sym, (struct objfile *)objfile);
+	    }
+	}
 
       sym = lookup_symbol_aux_quick ((struct objfile *) objfile, GLOBAL_BLOCK,
 				     name, domain);
@@ -1420,42 +1498,98 @@ lookup_global_symbol_from_objfile (const struct objfile *main_objfile,
   return NULL;
 }
 
-/* Check to see if the symbol is defined in one of the symtabs.
-   BLOCK_INDEX should be either GLOBAL_BLOCK or STATIC_BLOCK,
+/* Check to see if the symbol is defined in one of the OBJFILE's
+   symtabs.  BLOCK_INDEX should be either GLOBAL_BLOCK or STATIC_BLOCK,
    depending on whether or not we want to search global symbols or
    static symbols.  */
 
 static struct symbol *
+lookup_symbol_aux_objfile (struct objfile *objfile, int block_index,
+			   const char *name, const domain_enum domain)
+{
+  struct symbol *sym = NULL;
+  struct blockvector *bv;
+  const struct block *block;
+  struct symtab *s;
+
+  if (objfile->sf)
+    objfile->sf->qf->pre_expand_symtabs_matching (objfile, block_index,
+						  name, domain);
+
+  ALL_OBJFILE_PRIMARY_SYMTABS (objfile, s)
+    {
+      bv = BLOCKVECTOR (s);
+      block = BLOCKVECTOR_BLOCK (bv, block_index);
+      sym = lookup_block_symbol (block, name, domain);
+      if (sym)
+	{
+	  block_found = block;
+	  return fixup_symbol_section (sym, objfile);
+	}
+    }
+
+  return NULL;
+}
+
+/* Same as lookup_symbol_aux_objfile, except that it searches all
+   objfiles.  Return the first match found.  */
+
+static struct symbol *
 lookup_symbol_aux_symtabs (int block_index, const char *name,
 			   const domain_enum domain)
 {
   struct symbol *sym;
   struct objfile *objfile;
-  struct blockvector *bv;
-  const struct block *block;
-  struct symtab *s;
 
   ALL_OBJFILES (objfile)
   {
-    if (objfile->sf)
-      objfile->sf->qf->pre_expand_symtabs_matching (objfile,
-						    block_index,
-						    name, domain);
+    sym = lookup_symbol_aux_objfile (objfile, block_index, name, domain);
+    if (sym)
+      return sym;
+  }
+
+  return NULL;
+}
+
+/* Wrapper around lookup_symbol_aux_objfile for search_symbols.
+   Look up LINKAGE_NAME in DOMAIN in the global and static blocks of OBJFILE
+   and all related objfiles.  */
 
-    ALL_OBJFILE_SYMTABS (objfile, s)
-      if (s->primary)
+static struct symbol *
+lookup_symbol_in_objfile_from_linkage_name (struct objfile *objfile,
+					    const char *linkage_name,
+					    domain_enum domain)
+{
+  enum language lang = current_language->la_language;
+  const char *modified_name;
+  struct cleanup *cleanup = demangle_for_lookup (linkage_name, lang,
+						 &modified_name);
+  struct objfile *main_objfile, *cur_objfile;
+
+  if (objfile->separate_debug_objfile_backlink)
+    main_objfile = objfile->separate_debug_objfile_backlink;
+  else
+    main_objfile = objfile;
+
+  for (cur_objfile = main_objfile;
+       cur_objfile;
+       cur_objfile = objfile_separate_debug_iterate (main_objfile, cur_objfile))
+    {
+      struct symbol *sym;
+
+      sym = lookup_symbol_aux_objfile (cur_objfile, GLOBAL_BLOCK,
+				       modified_name, domain);
+      if (sym == NULL)
+	sym = lookup_symbol_aux_objfile (cur_objfile, STATIC_BLOCK,
+					 modified_name, domain);
+      if (sym != NULL)
 	{
-	  bv = BLOCKVECTOR (s);
-	  block = BLOCKVECTOR_BLOCK (bv, block_index);
-	  sym = lookup_block_symbol (block, name, domain);
-	  if (sym)
-	    {
-	      block_found = block;
-	      return fixup_symbol_section (sym, objfile);
-	    }
+	  do_cleanups (cleanup);
+	  return sym;
 	}
-  }
+    }
 
+  do_cleanups (cleanup);
   return NULL;
 }
 
@@ -1570,6 +1704,46 @@ lookup_symbol_static (const char *name,
     return NULL;
 }
 
+/* Private data to be used with lookup_symbol_global_iterator_cb.  */
+
+struct global_sym_lookup_data
+{
+  /* The name of the symbol we are searching for.  */
+  const char *name;
+
+  /* The domain to use for our search.  */
+  domain_enum domain;
+
+  /* The field where the callback should store the symbol if found.
+     It should be initialized to NULL before the search is started.  */
+  struct symbol *result;
+};
+
+/* A callback function for gdbarch_iterate_over_objfiles_in_search_order.
+   It searches by name for a symbol in the GLOBAL_BLOCK of the given
+   OBJFILE.  The arguments for the search are passed via CB_DATA,
+   which in reality is a pointer to struct global_sym_lookup_data.  */
+
+static int
+lookup_symbol_global_iterator_cb (struct objfile *objfile,
+				  void *cb_data)
+{
+  struct global_sym_lookup_data *data =
+    (struct global_sym_lookup_data *) cb_data;
+
+  gdb_assert (data->result == NULL);
+
+  data->result = lookup_symbol_aux_objfile (objfile, GLOBAL_BLOCK,
+					    data->name, data->domain);
+  if (data->result == NULL)
+    data->result = lookup_symbol_aux_quick (objfile, GLOBAL_BLOCK,
+					    data->name, data->domain);
+
+  /* If we found a match, tell the iterator to stop.  Otherwise,
+     keep going.  */
+  return (data->result != NULL);
+}
+
 /* Lookup a symbol in all files' global blocks (searching psymtabs if
    necessary).  */
 
@@ -1580,6 +1754,7 @@ lookup_symbol_global (const char *name,
 {
   struct symbol *sym = NULL;
   struct objfile *objfile = NULL;
+  struct global_sym_lookup_data lookup_data;
 
   /* Call library-specific lookup procedure.  */
   objfile = lookup_objfile_from_block (block);
@@ -1588,18 +1763,14 @@ lookup_symbol_global (const char *name,
   if (sym != NULL)
     return sym;
 
-  sym = lookup_symbol_aux_symtabs (GLOBAL_BLOCK, name, domain);
-  if (sym != NULL)
-    return sym;
+  memset (&lookup_data, 0, sizeof (lookup_data));
+  lookup_data.name = name;
+  lookup_data.domain = domain;
+  gdbarch_iterate_over_objfiles_in_search_order
+    (objfile != NULL ? get_objfile_arch (objfile) : target_gdbarch,
+     lookup_symbol_global_iterator_cb, &lookup_data, objfile);
 
-  ALL_OBJFILES (objfile)
-  {
-    sym = lookup_symbol_aux_quick (objfile, GLOBAL_BLOCK, name, domain);
-    if (sym)
-      return sym;
-  }
-
-  return NULL;
+  return lookup_data.result;
 }
 
 int
@@ -1707,17 +1878,16 @@ basic_lookup_transparent_type (const char *name)
 						    GLOBAL_BLOCK,
 						    name, STRUCT_DOMAIN);
 
-    ALL_OBJFILE_SYMTABS (objfile, s)
-      if (s->primary)
-	{
-	  bv = BLOCKVECTOR (s);
-	  block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
-	  sym = lookup_block_symbol (block, name, STRUCT_DOMAIN);
-	  if (sym && !TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)))
-	    {
-	      return SYMBOL_TYPE (sym);
-	    }
-	}
+    ALL_OBJFILE_PRIMARY_SYMTABS (objfile, s)
+      {
+	bv = BLOCKVECTOR (s);
+	block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
+	sym = lookup_block_symbol (block, name, STRUCT_DOMAIN);
+	if (sym && !TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)))
+	  {
+	    return SYMBOL_TYPE (sym);
+	  }
+      }
   }
 
   ALL_OBJFILES (objfile)
@@ -1740,7 +1910,7 @@ basic_lookup_transparent_type (const char *name)
       objfile->sf->qf->pre_expand_symtabs_matching (objfile, STATIC_BLOCK,
 						    name, STRUCT_DOMAIN);
 
-    ALL_OBJFILE_SYMTABS (objfile, s)
+    ALL_OBJFILE_PRIMARY_SYMTABS (objfile, s)
       {
 	bv = BLOCKVECTOR (s);
 	block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
@@ -1762,7 +1932,6 @@ basic_lookup_transparent_type (const char *name)
   return (struct type *) 0;
 }
 
-
 /* Find the name of the file containing main().  */
 /* FIXME:  What about languages without main() or specially linked
    executables that have no main() ?   */
@@ -1801,14 +1970,14 @@ struct symbol *
 lookup_block_symbol (const struct block *block, const char *name,
 		     const domain_enum domain)
 {
-  struct dict_iterator iter;
+  struct block_iterator iter;
   struct symbol *sym;
 
   if (!BLOCK_FUNCTION (block))
     {
-      for (sym = dict_iter_name_first (BLOCK_DICT (block), name, &iter);
+      for (sym = block_iter_name_first (block, name, &iter);
 	   sym != NULL;
-	   sym = dict_iter_name_next (name, &iter))
+	   sym = block_iter_name_next (name, &iter))
 	{
 	  if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
 				     SYMBOL_DOMAIN (sym), domain))
@@ -1826,9 +1995,9 @@ lookup_block_symbol (const struct block *block, const char *name,
 
       struct symbol *sym_found = NULL;
 
-      for (sym = dict_iter_name_first (BLOCK_DICT (block), name, &iter);
+      for (sym = block_iter_name_first (block, name, &iter);
 	   sym != NULL;
-	   sym = dict_iter_name_next (name, &iter))
+	   sym = block_iter_name_next (name, &iter))
 	{
 	  if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
 				     SYMBOL_DOMAIN (sym), domain))
@@ -1858,17 +2027,17 @@ lookup_block_symbol (const struct block *block, const char *name,
 void
 iterate_over_symbols (const struct block *block, const char *name,
 		      const domain_enum domain,
-		      int (*callback) (struct symbol *, void *),
+		      symbol_found_callback_ftype *callback,
 		      void *data)
 {
   while (block)
     {
-      struct dict_iterator iter;
+      struct block_iterator iter;
       struct symbol *sym;
 
-      for (sym = dict_iter_name_first (BLOCK_DICT (block), name, &iter);
+      for (sym = block_iter_name_first (block, name, &iter);
 	   sym != NULL;
-	   sym = dict_iter_name_next (name, &iter))
+	   sym = block_iter_name_next (name, &iter))
 	{
 	  if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
 				     SYMBOL_DOMAIN (sym), domain))
@@ -1958,7 +2127,7 @@ find_pc_sect_symtab (CORE_ADDR pc, struct obj_section *section)
 	  }
 	if (section != 0)
 	  {
-	    struct dict_iterator iter;
+	    struct block_iterator iter;
 	    struct symbol *sym = NULL;
 
 	    ALL_BLOCK_SYMBOLS (b, iter, sym)
@@ -2554,7 +2723,8 @@ find_pc_line_pc_range (CORE_ADDR pc, CORE_ADDR *startptr, CORE_ADDR *endptr)
    address for that function that has an entry in SYMTAB's line info
    table.  If such an entry cannot be found, return FUNC_ADDR
    unaltered.  */
-CORE_ADDR
+
+static CORE_ADDR
 skip_prologue_using_lineinfo (CORE_ADDR func_addr, struct symtab *symtab)
 {
   CORE_ADDR func_start, func_end;
@@ -2625,6 +2795,7 @@ find_function_start_sal (struct symbol *sym, int funfirstline)
    If the PC was explicitly specified, the SAL is not changed.
    If the line number was explicitly specified, at most the SAL's PC
    is updated.  If SAL is already past the prologue, then do nothing.  */
+
 void
 skip_prologue_sal (struct symtab_and_line *sal)
 {
@@ -2729,7 +2900,7 @@ skip_prologue_sal (struct symtab_and_line *sal)
 	 to `__main' in `main' between the prologue and before user
 	 code.  */
       if (gdbarch_skip_main_prologue_p (gdbarch)
-	  && name && strcmp (name, "main") == 0)
+	  && name && strcmp_iw (name, "main") == 0)
 	{
 	  pc = gdbarch_skip_main_prologue (gdbarch, pc);
 	  /* Recalculate the line number (might not be N+1).  */
@@ -2797,6 +2968,7 @@ skip_prologue_sal (struct symtab_and_line *sal)
    some legitimate operator text, return a pointer to the
    beginning of the substring of the operator text.
    Otherwise, return "".  */
+
 static char *
 operator_chars (char *p, char **end)
 {
@@ -2931,55 +3103,93 @@ operator_chars (char *p, char **end)
 }
 

 
-/* If FILE is not already in the table of files, return zero;
+/* Cache to watch for file names already seen by filename_seen.  */
+
+struct filename_seen_cache
+{
+  /* Table of files seen so far.  */
+  htab_t tab;
+  /* Initial size of the table.  It automagically grows from here.  */
+#define INITIAL_FILENAME_SEEN_CACHE_SIZE 100
+};
+
+/* filename_seen_cache constructor.  */
+
+static struct filename_seen_cache *
+create_filename_seen_cache (void)
+{
+  struct filename_seen_cache *cache;
+
+  cache = XNEW (struct filename_seen_cache);
+  cache->tab = htab_create_alloc (INITIAL_FILENAME_SEEN_CACHE_SIZE,
+				  filename_hash, filename_eq,
+				  NULL, xcalloc, xfree);
+
+  return cache;
+}
+
+/* Empty the cache, but do not delete it.  */
+
+static void
+clear_filename_seen_cache (struct filename_seen_cache *cache)
+{
+  htab_empty (cache->tab);
+}
+
+/* filename_seen_cache destructor.
+   This takes a void * argument as it is generally used as a cleanup.  */
+
+static void
+delete_filename_seen_cache (void *ptr)
+{
+  struct filename_seen_cache *cache = ptr;
+
+  htab_delete (cache->tab);
+  xfree (cache);
+}
+
+/* If FILE is not already in the table of files in CACHE, return zero;
    otherwise return non-zero.  Optionally add FILE to the table if ADD
-   is non-zero.  If *FIRST is non-zero, forget the old table
-   contents.  */
+   is non-zero.
+
+   NOTE: We don't manage space for FILE, we assume FILE lives as long
+   as the caller needs.  */
+
 static int
-filename_seen (const char *file, int add, int *first)
+filename_seen (struct filename_seen_cache *cache, const char *file, int add)
 {
-  /* Table of files seen so far.  */
-  static const char **tab = NULL;
-  /* Allocated size of tab in elements.
-     Start with one 256-byte block (when using GNU malloc.c).
-     24 is the malloc overhead when range checking is in effect.  */
-  static int tab_alloc_size = (256 - 24) / sizeof (char *);
-  /* Current size of tab in elements.  */
-  static int tab_cur_size;
-  const char **p;
-
-  if (*first)
-    {
-      if (tab == NULL)
-	tab = (const char **) xmalloc (tab_alloc_size * sizeof (*tab));
-      tab_cur_size = 0;
-    }
+  void **slot;
 
   /* Is FILE in tab?  */
-  for (p = tab; p < tab + tab_cur_size; p++)
-    if (filename_cmp (*p, file) == 0)
-      return 1;
+  slot = htab_find_slot (cache->tab, file, add ? INSERT : NO_INSERT);
+  if (*slot != NULL)
+    return 1;
 
   /* No; maybe add it to tab.  */
   if (add)
-    {
-      if (tab_cur_size == tab_alloc_size)
-	{
-	  tab_alloc_size *= 2;
-	  tab = (const char **) xrealloc ((char *) tab,
-					  tab_alloc_size * sizeof (*tab));
-	}
-      tab[tab_cur_size++] = file;
-    }
+    *slot = (char *) file;
 
   return 0;
 }
 
+/* Data structure to maintain printing state for output_source_filename.  */
+
+struct output_source_filename_data
+{
+  /* Cache of what we've seen so far.  */
+  struct filename_seen_cache *filename_seen_cache;
+
+  /* Flag of whether we're printing the first one.  */
+  int first;
+};
+
 /* Slave routine for sources_info.  Force line breaks at ,'s.
-   NAME is the name to print and *FIRST is nonzero if this is the first
-   name printed.  Set *FIRST to zero.  */
+   NAME is the name to print.
+   DATA contains the state for printing and watching for duplicates.  */
+
 static void
-output_source_filename (const char *name, int *first)
+output_source_filename (const char *name,
+			struct output_source_filename_data *data)
 {
   /* Since a single source file can result in several partial symbol
      tables, we need to avoid printing it more than once.  Note: if
@@ -2991,26 +3201,23 @@ output_source_filename (const char *name, int *first)
      symtabs; it doesn't hurt to check.  */
 
   /* Was NAME already seen?  */
-  if (filename_seen (name, 1, first))
+  if (filename_seen (data->filename_seen_cache, name, 1))
     {
       /* Yes; don't print it again.  */
       return;
     }
+
   /* No; print it and reset *FIRST.  */
-  if (*first)
-    {
-      *first = 0;
-    }
-  else
-    {
-      printf_filtered (", ");
-    }
+  if (! data->first)
+    printf_filtered (", ");
+  data->first = 0;
 
   wrap_here ("");
   fputs_filtered (name, gdb_stdout);
 }
 
 /* A callback for map_partial_symbol_filenames.  */
+
 static void
 output_partial_symbol_filename (const char *filename, const char *fullname,
 				void *data)
@@ -3023,31 +3230,39 @@ sources_info (char *ignore, int from_tty)
 {
   struct symtab *s;
   struct objfile *objfile;
-  int first;
+  struct output_source_filename_data data;
+  struct cleanup *cleanups;
 
   if (!have_full_symbols () && !have_partial_symbols ())
     {
       error (_("No symbol table is loaded.  Use the \"file\" command."));
     }
 
+  data.filename_seen_cache = create_filename_seen_cache ();
+  cleanups = make_cleanup (delete_filename_seen_cache,
+			   data.filename_seen_cache);
+
   printf_filtered ("Source files for which symbols have been read in:\n\n");
 
-  first = 1;
+  data.first = 1;
   ALL_SYMTABS (objfile, s)
   {
     const char *fullname = symtab_to_fullname (s);
 
-    output_source_filename (fullname ? fullname : s->filename, &first);
+    output_source_filename (fullname ? fullname : s->filename, &data);
   }
   printf_filtered ("\n\n");
 
   printf_filtered ("Source files for which symbols "
 		   "will be read in on demand:\n\n");
 
-  first = 1;
-  map_partial_symbol_filenames (output_partial_symbol_filename, &first,
+  clear_filename_seen_cache (data.filename_seen_cache);
+  data.first = 1;
+  map_partial_symbol_filenames (output_partial_symbol_filename, &data,
 				1 /*need_fullname*/);
   printf_filtered ("\n");
+
+  do_cleanups (cleanups);
 }
 
 static int
@@ -3069,6 +3284,7 @@ file_matches (const char *file, char *files[], int nfiles)
 }
 
 /* Free any memory associated with a search.  */
+
 void
 free_search_symbols (struct symbol_search *symbols)
 {
@@ -3096,6 +3312,7 @@ make_cleanup_free_search_symbols (struct symbol_search *symbols)
 
 /* Helper function for sort_search_symbols and qsort.  Can only
    sort symbols, not minimal symbols.  */
+
 static int
 compare_search_syms (const void *sa, const void *sb)
 {
@@ -3109,6 +3326,7 @@ compare_search_syms (const void *sa, const void *sb)
 /* Sort the ``nfound'' symbols in the list after prevtail.  Leave
    prevtail where it is, but update its next pointer to point to
    the first of the sorted symbols.  */
+
 static struct symbol_search *
 sort_search_symbols (struct symbol_search *prevtail, int nfound)
 {
@@ -3154,6 +3372,7 @@ struct search_symbols_data
 };
 
 /* A callback for expand_symtabs_matching.  */
+
 static int
 search_symbols_file_matches (const char *filename, void *user_data)
 {
@@ -3163,9 +3382,9 @@ search_symbols_file_matches (const char *filename, void *user_data)
 }
 
 /* A callback for expand_symtabs_matching.  */
+
 static int
-search_symbols_name_matches (const struct language_defn *language,
-			     const char *symname, void *user_data)
+search_symbols_name_matches (const char *symname, void *user_data)
 {
   struct search_symbols_data *data = user_data;
 
@@ -3196,11 +3415,10 @@ search_symbols (char *regexp, enum search_domain kind,
   struct blockvector *bv;
   struct block *b;
   int i = 0;
-  struct dict_iterator iter;
+  struct block_iterator iter;
   struct symbol *sym;
   struct objfile *objfile;
   struct minimal_symbol *msymbol;
-  char *val;
   int found_misc = 0;
   static const enum minimal_symbol_type types[]
     = {mst_data, mst_text, mst_abs};
@@ -3296,7 +3514,9 @@ search_symbols (char *regexp, enum search_domain kind,
   {
     if (objfile->sf)
       objfile->sf->qf->expand_symtabs_matching (objfile,
-						search_symbols_file_matches,
+						(nfiles == 0
+						 ? NULL
+						 : search_symbols_file_matches),
 						search_symbols_name_matches,
 						kind,
 						&datum);
@@ -3311,10 +3531,14 @@ search_symbols (char *regexp, enum search_domain kind,
      The symbol will then be found during the scan of symtabs below.
 
      For functions, find_pc_symtab should succeed if we have debug info
-     for the function, for variables we have to call lookup_symbol
-     to determine if the variable has debug info.
+     for the function, for variables we have to call
+     lookup_symbol_in_objfile_from_linkage_name to determine if the variable
+     has debug info.
      If the lookup fails, set found_misc so that we will rescan to print
-     any matching symbols without debug info.  */
+     any matching symbols without debug info.
+     We only search the objfile the msymbol came from, we no longer search
+     all objfiles.  In large programs (1000s of shared libs) searching all
+     objfiles is not worth the pain.  */
 
   if (nfiles == 0 && (kind == VARIABLES_DOMAIN || kind == FUNCTIONS_DOMAIN))
     {
@@ -3322,30 +3546,27 @@ search_symbols (char *regexp, enum search_domain kind,
       {
         QUIT;
 
-	if (MSYMBOL_TYPE (msymbol) == ourtype ||
-	    MSYMBOL_TYPE (msymbol) == ourtype2 ||
-	    MSYMBOL_TYPE (msymbol) == ourtype3 ||
-	    MSYMBOL_TYPE (msymbol) == ourtype4)
+	if (msymbol->created_by_gdb)
+	  continue;
+
+	if (MSYMBOL_TYPE (msymbol) == ourtype
+	    || MSYMBOL_TYPE (msymbol) == ourtype2
+	    || MSYMBOL_TYPE (msymbol) == ourtype3
+	    || MSYMBOL_TYPE (msymbol) == ourtype4)
 	  {
 	    if (!datum.preg_p
 		|| regexec (&datum.preg, SYMBOL_NATURAL_NAME (msymbol), 0,
 			    NULL, 0) == 0)
 	      {
-		if (0 == find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol)))
-		  {
-		    /* FIXME: carlton/2003-02-04: Given that the
-		       semantics of lookup_symbol keeps on changing
-		       slightly, it would be a nice idea if we had a
-		       function lookup_symbol_minsym that found the
-		       symbol associated to a given minimal symbol (if
-		       any).  */
-		    if (kind == FUNCTIONS_DOMAIN
-			|| lookup_symbol (SYMBOL_LINKAGE_NAME (msymbol),
-					  (struct block *) NULL,
-					  VAR_DOMAIN, 0)
-			== NULL)
-		      found_misc = 1;
-		  }
+		/* Note: An important side-effect of these lookup functions
+		   is to expand the symbol table if msymbol is found, for the
+		   benefit of the next loop on ALL_PRIMARY_SYMTABS.  */
+		if (kind == FUNCTIONS_DOMAIN
+		    ? find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol)) == NULL
+		    : (lookup_symbol_in_objfile_from_linkage_name
+		       (objfile, SYMBOL_LINKAGE_NAME (msymbol), VAR_DOMAIN)
+		       == NULL))
+		  found_misc = 1;
 	      }
 	  }
       }
@@ -3354,97 +3575,100 @@ search_symbols (char *regexp, enum search_domain kind,
   ALL_PRIMARY_SYMTABS (objfile, s)
   {
     bv = BLOCKVECTOR (s);
-      for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
-	{
-	  struct symbol_search *prevtail = tail;
-	  int nfound = 0;
+    for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
+      {
+	struct symbol_search *prevtail = tail;
+	int nfound = 0;
 
-	  b = BLOCKVECTOR_BLOCK (bv, i);
-	  ALL_BLOCK_SYMBOLS (b, iter, sym)
-	    {
-	      struct symtab *real_symtab = SYMBOL_SYMTAB (sym);
-
-	      QUIT;
-
-	      if (file_matches (real_symtab->filename, files, nfiles)
-		  && ((!datum.preg_p
-		       || regexec (&datum.preg, SYMBOL_NATURAL_NAME (sym), 0,
-				   NULL, 0) == 0)
-		      && ((kind == VARIABLES_DOMAIN
-			   && SYMBOL_CLASS (sym) != LOC_TYPEDEF
-			   && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
-			   && SYMBOL_CLASS (sym) != LOC_BLOCK
-			   /* LOC_CONST can be used for more than just enums,
-			      e.g., c++ static const members.
-			      We only want to skip enums here.  */
-			   && !(SYMBOL_CLASS (sym) == LOC_CONST
-				&& TYPE_CODE (SYMBOL_TYPE (sym))
-				== TYPE_CODE_ENUM))
-			  || (kind == FUNCTIONS_DOMAIN 
-			      && SYMBOL_CLASS (sym) == LOC_BLOCK)
-			  || (kind == TYPES_DOMAIN
-			      && SYMBOL_CLASS (sym) == LOC_TYPEDEF))))
-		{
-		  /* match */
-		  psr = (struct symbol_search *)
-		    xmalloc (sizeof (struct symbol_search));
-		  psr->block = i;
-		  psr->symtab = real_symtab;
-		  psr->symbol = sym;
-		  psr->msymbol = NULL;
-		  psr->next = NULL;
-		  if (tail == NULL)
-		    sr = psr;
-		  else
-		    tail->next = psr;
-		  tail = psr;
-		  nfound ++;
-		}
-	    }
-	  if (nfound > 0)
-	    {
-	      if (prevtail == NULL)
-		{
-		  struct symbol_search dummy;
+	b = BLOCKVECTOR_BLOCK (bv, i);
+	ALL_BLOCK_SYMBOLS (b, iter, sym)
+	  {
+	    struct symtab *real_symtab = SYMBOL_SYMTAB (sym);
+
+	    QUIT;
+
+	    if (file_matches (real_symtab->filename, files, nfiles)
+		&& ((!datum.preg_p
+		     || regexec (&datum.preg, SYMBOL_NATURAL_NAME (sym), 0,
+				 NULL, 0) == 0)
+		    && ((kind == VARIABLES_DOMAIN
+			 && SYMBOL_CLASS (sym) != LOC_TYPEDEF
+			 && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
+			 && SYMBOL_CLASS (sym) != LOC_BLOCK
+			 /* LOC_CONST can be used for more than just enums,
+			    e.g., c++ static const members.
+			    We only want to skip enums here.  */
+			 && !(SYMBOL_CLASS (sym) == LOC_CONST
+			      && TYPE_CODE (SYMBOL_TYPE (sym))
+			      == TYPE_CODE_ENUM))
+			|| (kind == FUNCTIONS_DOMAIN 
+			    && SYMBOL_CLASS (sym) == LOC_BLOCK)
+			|| (kind == TYPES_DOMAIN
+			    && SYMBOL_CLASS (sym) == LOC_TYPEDEF))))
+	      {
+		/* match */
+		psr = (struct symbol_search *)
+		  xmalloc (sizeof (struct symbol_search));
+		psr->block = i;
+		psr->symtab = real_symtab;
+		psr->symbol = sym;
+		psr->msymbol = NULL;
+		psr->next = NULL;
+		if (tail == NULL)
+		  sr = psr;
+		else
+		  tail->next = psr;
+		tail = psr;
+		nfound ++;
+	      }
+	  }
+	if (nfound > 0)
+	  {
+	    if (prevtail == NULL)
+	      {
+		struct symbol_search dummy;
 
-		  dummy.next = sr;
-		  tail = sort_search_symbols (&dummy, nfound);
-		  sr = dummy.next;
+		dummy.next = sr;
+		tail = sort_search_symbols (&dummy, nfound);
+		sr = dummy.next;
 
-		  make_cleanup_free_search_symbols (sr);
-		}
-	      else
-		tail = sort_search_symbols (prevtail, nfound);
-	    }
-	}
+		make_cleanup_free_search_symbols (sr);
+	      }
+	    else
+	      tail = sort_search_symbols (prevtail, nfound);
+	  }
+      }
   }
 
   /* If there are no eyes, avoid all contact.  I mean, if there are
      no debug symbols, then print directly from the msymbol_vector.  */
 
-  if (found_misc || kind != FUNCTIONS_DOMAIN)
+  if (found_misc || (nfiles == 0 && kind != FUNCTIONS_DOMAIN))
     {
       ALL_MSYMBOLS (objfile, msymbol)
       {
         QUIT;
 
-	if (MSYMBOL_TYPE (msymbol) == ourtype ||
-	    MSYMBOL_TYPE (msymbol) == ourtype2 ||
-	    MSYMBOL_TYPE (msymbol) == ourtype3 ||
-	    MSYMBOL_TYPE (msymbol) == ourtype4)
+	if (msymbol->created_by_gdb)
+	  continue;
+
+	if (MSYMBOL_TYPE (msymbol) == ourtype
+	    || MSYMBOL_TYPE (msymbol) == ourtype2
+	    || MSYMBOL_TYPE (msymbol) == ourtype3
+	    || MSYMBOL_TYPE (msymbol) == ourtype4)
 	  {
 	    if (!datum.preg_p
 		|| regexec (&datum.preg, SYMBOL_NATURAL_NAME (msymbol), 0,
 			    NULL, 0) == 0)
 	      {
-		/* Functions:  Look up by address.  */
-		if (kind != FUNCTIONS_DOMAIN ||
-		    (0 == find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol))))
+		/* For functions we can do a quick check of whether the
+		   symbol might be found via find_pc_symtab.  */
+		if (kind != FUNCTIONS_DOMAIN
+		    || find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol)) == NULL)
 		  {
-		    /* Variables/Absolutes:  Look up by name.  */
-		    if (lookup_symbol (SYMBOL_LINKAGE_NAME (msymbol),
-				       (struct block *) NULL, VAR_DOMAIN, 0)
-			 == NULL)
+		    if (lookup_symbol_in_objfile_from_linkage_name
+			(objfile, SYMBOL_LINKAGE_NAME (msymbol), VAR_DOMAIN)
+			== NULL)
 		      {
 			/* match */
 			psr = (struct symbol_search *)
@@ -3498,9 +3722,9 @@ print_symbol_info (enum search_domain kind,
       && SYMBOL_DOMAIN (sym) != STRUCT_DOMAIN)
     typedef_print (SYMBOL_TYPE (sym), sym, gdb_stdout);
   /* variable, func, or typedef-that-is-c++-class.  */
-  else if (kind < TYPES_DOMAIN ||
-	   (kind == TYPES_DOMAIN &&
-	    SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN))
+  else if (kind < TYPES_DOMAIN
+	   || (kind == TYPES_DOMAIN
+	       && SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN))
     {
       type_print (SYMBOL_TYPE (sym),
 		  (SYMBOL_CLASS (sym) == LOC_TYPEDEF
@@ -3742,17 +3966,14 @@ compare_symbol_name (const char *name, const char *sym_text, int sym_text_len)
 /* Free any memory associated with a completion list.  */
 
 static void
-free_completion_list (char ***list_ptr)
+free_completion_list (VEC (char_ptr) **list_ptr)
 {
-  int i = 0;
-  char **list = *list_ptr;
+  int i;
+  char *p;
 
-  while (list[i] != NULL)
-    {
-      xfree (list[i]);
-      i++;
-    }
-  xfree (list);
+  for (i = 0; VEC_iterate (char_ptr, *list_ptr, i, p); ++i)
+    xfree (p);
+  VEC_free (char_ptr, *list_ptr);
 }
 
 /* Callback for make_cleanup.  */
@@ -3765,9 +3986,7 @@ do_free_completion_list (void *list)
 
 /* Helper routine for make_symbol_completion_list.  */
 
-static int return_val_size;
-static int return_val_index;
-static char **return_val;
+static VEC (char_ptr) *return_val;
 
 #define COMPLETION_LIST_ADD_SYMBOL(symbol, sym_text, len, text, word) \
       completion_list_add_name \
@@ -3778,8 +3997,9 @@ static char **return_val;
    characters.  If so, add it to the current completion list.  */
 
 static void
-completion_list_add_name (char *symname, char *sym_text, int sym_text_len,
-			  char *text, char *word)
+completion_list_add_name (const char *symname,
+			  const char *sym_text, int sym_text_len,
+			  const char *text, const char *word)
 {
   int newsize;
 
@@ -3813,13 +4033,7 @@ completion_list_add_name (char *symname, char *sym_text, int sym_text_len,
 	strcat (new, symname);
       }
 
-    if (return_val_index + 3 > return_val_size)
-      {
-	newsize = (return_val_size *= 2) * sizeof (char *);
-	return_val = (char **) xrealloc ((char *) return_val, newsize);
-      }
-    return_val[return_val_index++] = new;
-    return_val[return_val_index] = NULL;
+    VEC_safe_push (char_ptr, return_val, new);
   }
 }
 
@@ -3827,13 +4041,14 @@ completion_list_add_name (char *symname, char *sym_text, int sym_text_len,
    again and feed all the selectors into the mill.  */
 
 static void
-completion_list_objc_symbol (struct minimal_symbol *msymbol, char *sym_text,
-			     int sym_text_len, char *text, char *word)
+completion_list_objc_symbol (struct minimal_symbol *msymbol,
+			     const char *sym_text, int sym_text_len,
+			     const char *text, const char *word)
 {
   static char *tmp = NULL;
   static unsigned int tmplen = 0;
 
-  char *method, *category, *selector;
+  const char *method, *category, *selector;
   char *tmp2 = NULL;
 
   method = SYMBOL_NATURAL_NAME (msymbol);
@@ -3959,6 +4174,7 @@ struct add_name_data
 
 /* A callback used with macro_for_each and macro_for_each_in_scope.
    This adds a macro's name to the current completion list.  */
+
 static void
 add_macro_name (const char *name, const struct macro_definition *ignore,
 		struct macro_source_file *ignore2, int ignore3,
@@ -3972,16 +4188,16 @@ add_macro_name (const char *name, const struct macro_definition *ignore,
 }
 
 /* A callback for expand_partial_symbol_names.  */
+
 static int
-expand_partial_symbol_name (const struct language_defn *language,
-			    const char *name, void *user_data)
+expand_partial_symbol_name (const char *name, void *user_data)
 {
   struct add_name_data *datum = (struct add_name_data *) user_data;
 
   return compare_symbol_name (name, datum->sym_text, datum->sym_text_len);
 }
 
-char **
+VEC (char_ptr) *
 default_make_symbol_completion_list_break_on (char *text, char *word,
 					      const char *break_on)
 {
@@ -3995,7 +4211,7 @@ default_make_symbol_completion_list_break_on (char *text, char *word,
   struct objfile *objfile;
   struct block *b;
   const struct block *surrounding_static_block, *surrounding_global_block;
-  struct dict_iterator iter;
+  struct block_iterator iter;
   /* The symbol we are completing on.  Points in same buffer as text.  */
   char *sym_text;
   /* Length of sym_text.  */
@@ -4036,9 +4252,7 @@ default_make_symbol_completion_list_break_on (char *text, char *word,
       /* A double-quoted string is never a symbol, nor does it make sense
          to complete it any other way.  */
       {
-	return_val = (char **) xmalloc (sizeof (char *));
-	return_val[0] = NULL;
-	return return_val;
+	return NULL;
       }
     else
       {
@@ -4074,10 +4288,7 @@ default_make_symbol_completion_list_break_on (char *text, char *word,
     }
   gdb_assert (sym_text[sym_text_len] == '\0' || sym_text[sym_text_len] == '(');
 
-  return_val_size = 100;
-  return_val_index = 0;
-  return_val = (char **) xmalloc ((return_val_size + 1) * sizeof (char *));
-  return_val[0] = NULL;
+  return_val = NULL;
   back_to = make_cleanup (do_free_completion_list, &return_val);
 
   datum.sym_text = sym_text;
@@ -4192,17 +4403,17 @@ default_make_symbol_completion_list_break_on (char *text, char *word,
   return (return_val);
 }
 
-char **
+VEC (char_ptr) *
 default_make_symbol_completion_list (char *text, char *word)
 {
   return default_make_symbol_completion_list_break_on (text, word, "");
 }
 
-/* Return a NULL terminated array of all symbols (regardless of class)
-   which begin by matching TEXT.  If the answer is no symbols, then
-   the return value is an array which contains only a NULL pointer.  */
+/* Return a vector of all symbols (regardless of class) which begin by
+   matching TEXT.  If the answer is no symbols, then the return value
+   is NULL.  */
 
-char **
+VEC (char_ptr) *
 make_symbol_completion_list (char *text, char *word)
 {
   return current_language->la_make_symbol_completion_list (text, word);
@@ -4211,7 +4422,7 @@ make_symbol_completion_list (char *text, char *word)
 /* Like make_symbol_completion_list, but suitable for use as a
    completion function.  */
 
-char **
+VEC (char_ptr) *
 make_symbol_completion_list_fn (struct cmd_list_element *ignore,
 				char *text, char *word)
 {
@@ -4221,13 +4432,13 @@ make_symbol_completion_list_fn (struct cmd_list_element *ignore,
 /* Like make_symbol_completion_list, but returns a list of symbols
    defined in a source file FILE.  */
 
-char **
+VEC (char_ptr) *
 make_file_symbol_completion_list (char *text, char *word, char *srcfile)
 {
   struct symbol *sym;
   struct symtab *s;
   struct block *b;
-  struct dict_iterator iter;
+  struct block_iterator iter;
   /* The symbol we are completing on.  Points in same buffer as text.  */
   char *sym_text;
   /* Length of sym_text.  */
@@ -4267,9 +4478,7 @@ make_file_symbol_completion_list (char *text, char *word, char *srcfile)
       /* A double-quoted string is never a symbol, nor does it make sense
          to complete it any other way.  */
       {
-	return_val = (char **) xmalloc (sizeof (char *));
-	return_val[0] = NULL;
-	return return_val;
+	return NULL;
       }
     else
       {
@@ -4280,10 +4489,7 @@ make_file_symbol_completion_list (char *text, char *word, char *srcfile)
 
   sym_text_len = strlen (sym_text);
 
-  return_val_size = 10;
-  return_val_index = 0;
-  return_val = (char **) xmalloc ((return_val_size + 1) * sizeof (char *));
-  return_val[0] = NULL;
+  return_val = NULL;
 
   /* Find the symtab for SRCFILE (this loads it if it was not yet read
      in).  */
@@ -4326,18 +4532,11 @@ make_file_symbol_completion_list (char *text, char *word, char *srcfile)
 
 static void
 add_filename_to_list (const char *fname, char *text, char *word,
-		      char ***list, int *list_used, int *list_alloced)
+		      VEC (char_ptr) **list)
 {
   char *new;
   size_t fnlen = strlen (fname);
 
-  if (*list_used + 1 >= *list_alloced)
-    {
-      *list_alloced *= 2;
-      *list = (char **) xrealloc ((char *) *list,
-				  *list_alloced * sizeof (char *));
-    }
-
   if (word == text)
     {
       /* Return exactly fname.  */
@@ -4358,8 +4557,7 @@ add_filename_to_list (const char *fname, char *text, char *word,
       new[text - word] = '\0';
       strcat (new, fname);
     }
-  (*list)[*list_used] = new;
-  (*list)[++*list_used] = NULL;
+  VEC_safe_push (char_ptr, *list, new);
 }
 
 static int
@@ -4383,16 +4581,15 @@ not_interesting_fname (const char *fname)
    map_partial_symbol_filenames.  */
 struct add_partial_filename_data
 {
-  int *first;
+  struct filename_seen_cache *filename_seen_cache;
   char *text;
   char *word;
   int text_len;
-  char ***list;
-  int *list_used;
-  int *list_alloced;
+  VEC (char_ptr) **list;
 };
 
 /* A callback for map_partial_symbol_filenames.  */
+
 static void
 maybe_add_partial_symtab_filename (const char *filename, const char *fullname,
 				   void *user_data)
@@ -4401,63 +4598,60 @@ maybe_add_partial_symtab_filename (const char *filename, const char *fullname,
 
   if (not_interesting_fname (filename))
     return;
-  if (!filename_seen (filename, 1, data->first)
+  if (!filename_seen (data->filename_seen_cache, filename, 1)
       && filename_ncmp (filename, data->text, data->text_len) == 0)
     {
       /* This file matches for a completion; add it to the
 	 current list of matches.  */
-      add_filename_to_list (filename, data->text, data->word,
-			    data->list, data->list_used, data->list_alloced);
+      add_filename_to_list (filename, data->text, data->word, data->list);
     }
   else
     {
       const char *base_name = lbasename (filename);
 
       if (base_name != filename
-	  && !filename_seen (base_name, 1, data->first)
+	  && !filename_seen (data->filename_seen_cache, base_name, 1)
 	  && filename_ncmp (base_name, data->text, data->text_len) == 0)
-	add_filename_to_list (base_name, data->text, data->word,
-			      data->list, data->list_used, data->list_alloced);
+	add_filename_to_list (base_name, data->text, data->word, data->list);
     }
 }
 
-/* Return a NULL terminated array of all source files whose names
-   begin with matching TEXT.  The file names are looked up in the
-   symbol tables of this program.  If the answer is no matchess, then
-   the return value is an array which contains only a NULL pointer.  */
+/* Return a vector of all source files whose names begin with matching
+   TEXT.  The file names are looked up in the symbol tables of this
+   program.  If the answer is no matchess, then the return value is
+   NULL.  */
 
-char **
+VEC (char_ptr) *
 make_source_files_completion_list (char *text, char *word)
 {
   struct symtab *s;
   struct objfile *objfile;
-  int first = 1;
-  int list_alloced = 1;
-  int list_used = 0;
   size_t text_len = strlen (text);
-  char **list = (char **) xmalloc (list_alloced * sizeof (char *));
+  VEC (char_ptr) *list = NULL;
   const char *base_name;
   struct add_partial_filename_data datum;
-  struct cleanup *back_to;
-
-  list[0] = NULL;
+  struct filename_seen_cache *filename_seen_cache;
+  struct cleanup *back_to, *cache_cleanup;
 
   if (!have_full_symbols () && !have_partial_symbols ())
     return list;
 
   back_to = make_cleanup (do_free_completion_list, &list);
 
+  filename_seen_cache = create_filename_seen_cache ();
+  cache_cleanup = make_cleanup (delete_filename_seen_cache,
+				filename_seen_cache);
+
   ALL_SYMTABS (objfile, s)
     {
       if (not_interesting_fname (s->filename))
 	continue;
-      if (!filename_seen (s->filename, 1, &first)
+      if (!filename_seen (filename_seen_cache, s->filename, 1)
 	  && filename_ncmp (s->filename, text, text_len) == 0)
 	{
 	  /* This file matches for a completion; add it to the current
 	     list of matches.  */
-	  add_filename_to_list (s->filename, text, word,
-				&list, &list_used, &list_alloced);
+	  add_filename_to_list (s->filename, text, word, &list);
 	}
       else
 	{
@@ -4467,22 +4661,21 @@ make_source_files_completion_list (char *text, char *word)
 	     command do when they parse file names.  */
 	  base_name = lbasename (s->filename);
 	  if (base_name != s->filename
-	      && !filename_seen (base_name, 1, &first)
+	      && !filename_seen (filename_seen_cache, base_name, 1)
 	      && filename_ncmp (base_name, text, text_len) == 0)
-	    add_filename_to_list (base_name, text, word,
-				  &list, &list_used, &list_alloced);
+	    add_filename_to_list (base_name, text, word, &list);
 	}
     }
 
-  datum.first = &first;
+  datum.filename_seen_cache = filename_seen_cache;
   datum.text = text;
   datum.word = word;
   datum.text_len = text_len;
   datum.list = &list;
-  datum.list_used = &list_used;
-  datum.list_alloced = &list_alloced;
   map_partial_symbol_filenames (maybe_add_partial_symtab_filename, &datum,
 				0 /*need_fullname*/);
+
+  do_cleanups (cache_cleanup);
   discard_cleanups (back_to);
 
   return list;
@@ -4671,27 +4864,6 @@ skip_prologue_using_sal (struct gdbarch *gdbarch, CORE_ADDR func_addr)
     return prologue_sal.pc;
 }
 

-struct symtabs_and_lines
-decode_line_spec (char *string, int flags)
-{
-  struct symtabs_and_lines sals;
-  struct symtab_and_line cursal;
-
-  if (string == 0)
-    error (_("Empty line specification."));
-
-  /* We use whatever is set as the current source line.  We do not try
-     and get a default  or it will recursively call us!  */
-  cursal = get_current_source_symtab_and_line ();
-
-  sals = decode_line_1 (&string, flags,
-			cursal.symtab, cursal.line);
-
-  if (*string)
-    error (_("Junk at end of line specification: %s"), string);
-  return sals;
-}
-
 /* Track MAIN */
 static char *name_of_main;
 enum language language_of_main = language_unknown;
@@ -4743,6 +4915,13 @@ find_main_name (void)
       return;
     }
 
+  new_main_name = go_main_name ();
+  if (new_main_name != NULL)
+    {
+      set_main_name (new_main_name);
+      return;
+    }
+
   new_main_name = pascal_main_name ();
   if (new_main_name != NULL)
     {
@@ -4859,5 +5038,13 @@ one base name, and gdb will do file name comparisons more efficiently."),
 			   NULL, NULL,
 			   &setlist, &showlist);
 
+  add_setshow_boolean_cmd ("symtab-create", no_class, &symtab_create_debug,
+			   _("Set debugging of symbol table creation."),
+			   _("Show debugging of symbol table creation."), _("\
+When enabled, debugging messages are printed when building symbol tables."),
+			    NULL,
+			    NULL,
+			    &setdebuglist, &showdebuglist);
+
   observer_attach_executable_changed (symtab_observer_executable_changed);
 }
diff --git a/gdb/symtab.h b/gdb/symtab.h
index 9a26656..76120a3 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -22,6 +22,7 @@
 #define SYMTAB_H 1
 
 #include "vec.h"
+#include "gdb_vecs.h"
 
 /* Opaque declarations.  */
 struct ui_file;
@@ -35,6 +36,7 @@ struct axs_value;
 struct agent_expr;
 struct program_space;
 struct language_defn;
+struct probe;
 
 /* Some of the structures in this file are space critical.
    The space-critical structures are:
@@ -81,7 +83,7 @@ struct language_defn;
 
 struct cplus_specific
 {
-  char *demangled_name;
+  const char *demangled_name;
 };
 
 /* Define a structure for the information that is common to all symbol types,
@@ -99,7 +101,7 @@ struct general_symbol_info
      the mangled name and demangled name, this is the mangled
      name.  */
 
-  char *name;
+  const char *name;
 
   /* Value of the symbol.  Which member of this union to use, and what
      it means, depends on what kind of symbol this is and its
@@ -109,10 +111,7 @@ struct general_symbol_info
 
   union
   {
-    /* The fact that this is a long not a LONGEST mainly limits the
-       range of a LOC_CONST.  Since LOC_CONST_BYTES exists, I'm not
-       sure that is a big deal.  */
-    long ivalue;
+    LONGEST ivalue;
 
     struct block *block;
 
@@ -135,7 +134,7 @@ struct general_symbol_info
        currently used by Ada, Java, and Objective C.  */
     struct mangled_lang
     {
-      char *demangled_name;
+      const char *demangled_name;
     }
     mangled_lang;
 
@@ -166,7 +165,8 @@ struct general_symbol_info
 extern void symbol_set_demangled_name (struct general_symbol_info *, char *,
                                        struct objfile *);
 
-extern char *symbol_get_demangled_name (const struct general_symbol_info *);
+extern const char *symbol_get_demangled_name
+  (const struct general_symbol_info *);
 
 extern CORE_ADDR symbol_overlayed_address (CORE_ADDR, struct obj_section *);
 
@@ -225,7 +225,8 @@ extern void symbol_set_names (struct general_symbol_info *symbol,
 
 #define SYMBOL_NATURAL_NAME(symbol) \
   (symbol_natural_name (&(symbol)->ginfo))
-extern char *symbol_natural_name (const struct general_symbol_info *symbol);
+extern const char *symbol_natural_name
+  (const struct general_symbol_info *symbol);
 
 /* Return SYMBOL's name from the point of view of the linker.  In
    languages like C++ where symbols may be mangled for ease of
@@ -238,7 +239,8 @@ extern char *symbol_natural_name (const struct general_symbol_info *symbol);
    that symbol.  If no demangled name exists, return NULL.  */
 #define SYMBOL_DEMANGLED_NAME(symbol) \
   (symbol_demangled_name (&(symbol)->ginfo))
-extern char *symbol_demangled_name (const struct general_symbol_info *symbol);
+extern const char *symbol_demangled_name
+  (const struct general_symbol_info *symbol);
 
 /* Macro that returns a version of the name of a symbol that is
    suitable for output.  In C++ this is the "demangled" form of the
@@ -254,21 +256,6 @@ extern char *symbol_demangled_name (const struct general_symbol_info *symbol);
   (demangle ? SYMBOL_NATURAL_NAME (symbol) : SYMBOL_LINKAGE_NAME (symbol))
 extern int demangle;
 
-/* Macro that tests a symbol for a match against a specified name string.
-   First test the unencoded name, then looks for and test a C++ encoded
-   name if it exists.  Note that whitespace is ignored while attempting to
-   match a C++ encoded name, so that "foo::bar(int,long)" is the same as
-   "foo :: bar (int, long)".
-   Evaluates to zero if the match fails, or nonzero if it succeeds.  */
-
-/* Macro that tests a symbol for a match against a specified name
-   string.  It tests against SYMBOL_NATURAL_NAME, and it ignores
-   whitespace and trailing parentheses.  (See strcmp_iw for details
-   about its behavior.)  */
-
-#define SYMBOL_MATCHES_NATURAL_NAME(symbol, name)			\
-  (strcmp_iw (SYMBOL_NATURAL_NAME (symbol), (name)) == 0)
-
 /* Macro that returns the name to be used when sorting and searching symbols.
    In  C++, Chill, and Java, we search for the demangled form of a name,
    and so sort symbols accordingly.  In Ada, however, we search by mangled
@@ -276,10 +263,11 @@ extern int demangle;
    returns the same value (same pointer) as SYMBOL_LINKAGE_NAME.  */
 #define SYMBOL_SEARCH_NAME(symbol)					 \
    (symbol_search_name (&(symbol)->ginfo))
-extern char *symbol_search_name (const struct general_symbol_info *);
+extern const char *symbol_search_name (const struct general_symbol_info *);
 
-/* Analogous to SYMBOL_MATCHES_NATURAL_NAME, but uses the search
-   name.  */
+/* Return non-zero if NAME matches the "search" name of SYMBOL.
+   Whitespace and trailing parentheses are ignored.
+   See strcmp_iw for details about its behavior.  */
 #define SYMBOL_MATCHES_SEARCH_NAME(symbol, name)			\
   (strcmp_iw (SYMBOL_SEARCH_NAME (symbol), (name)) == 0)
 
@@ -346,12 +334,16 @@ struct minimal_symbol
   unsigned long size;
 
   /* Which source file is this symbol in?  Only relevant for mst_file_*.  */
-  char *filename;
+  const char *filename;
 
   /* Classification type for this minimal symbol.  */
 
   ENUM_BITFIELD(minimal_symbol_type) type : 8;
 
+  /* Non-zero if this symbol was created by gdb.
+     Such symbols do not appear in the output of "info var|fun".  */
+  unsigned int created_by_gdb : 1;
+
   /* Two flag bits provided for the use of the target.  */
   unsigned int target_flag_1 : 1;
   unsigned int target_flag_2 : 1;
@@ -372,6 +364,8 @@ struct minimal_symbol
 #define MSYMBOL_SIZE(msymbol)		(msymbol)->size
 #define MSYMBOL_TYPE(msymbol)		(msymbol)->type
 
+#include "minsyms.h"
+
 

 
 /* Represent one symbol name; a variable, constant, function or typedef.  */
@@ -844,6 +838,23 @@ struct symtab
   /* struct call_site entries for this compilation unit or NULL.  */
 
   htab_t call_site_htab;
+
+  /* If non-NULL, then this points to a NULL-terminated vector of
+     included symbol tables.  When searching the static or global
+     block of this symbol table, the corresponding block of all
+     included symbol tables will also be searched.  Note that this
+     list must be flattened -- the symbol reader is responsible for
+     ensuring that this vector contains the transitive closure of all
+     included symbol tables.  */
+
+  struct symtab **includes;
+
+  /* If this is an included symbol table, this points to one includer
+     of the table.  This user is considered the canonical symbol table
+     containing this one.  An included symbol table may itself be
+     included by another.  */
+
+  struct symtab *user;
 };
 
 #define BLOCKVECTOR(symtab)	(symtab)->blockvector
@@ -964,14 +975,14 @@ extern struct symbol *find_pc_function (CORE_ADDR);
 
 extern struct symbol *find_pc_sect_function (CORE_ADDR, struct obj_section *);
 
-extern int find_pc_partial_function_gnu_ifunc (CORE_ADDR pc, char **name,
+extern int find_pc_partial_function_gnu_ifunc (CORE_ADDR pc, const char **name,
 					       CORE_ADDR *address,
 					       CORE_ADDR *endaddr,
 					       int *is_gnu_ifunc_p);
 
 /* lookup function from address, return name, start addr and end addr.  */
 
-extern int find_pc_partial_function (CORE_ADDR, char **, CORE_ADDR *,
+extern int find_pc_partial_function (CORE_ADDR, const char **, CORE_ADDR *,
 				     CORE_ADDR *);
 
 extern void clear_pc_function_cache (void);
@@ -1007,62 +1018,6 @@ extern struct type *basic_lookup_transparent_type (const char *);
 #define GCC2_COMPILED_FLAG_SYMBOL "gcc2_compiled."
 #endif
 
-/* Functions for dealing with the minimal symbol table, really a misc
-   address<->symbol mapping for things we don't have debug symbols for.  */
-
-extern void prim_record_minimal_symbol (const char *, CORE_ADDR,
-					enum minimal_symbol_type,
-					struct objfile *);
-
-extern struct minimal_symbol *prim_record_minimal_symbol_full
-  (const char *, int, int, CORE_ADDR,
-   enum minimal_symbol_type,
-   int section, asection * bfd_section, struct objfile *);
-
-extern struct minimal_symbol *prim_record_minimal_symbol_and_info
-  (const char *, CORE_ADDR,
-   enum minimal_symbol_type,
-   int section, asection * bfd_section, struct objfile *);
-
-extern unsigned int msymbol_hash_iw (const char *);
-
-extern unsigned int msymbol_hash (const char *);
-
-/* Compute the next hash value from previous HASH and the character C.  This
-   is only a GDB in-memory computed value with no external files compatibility
-   requirements.  */
-
-#define SYMBOL_HASH_NEXT(hash, c) \
-  ((hash) * 67 + tolower ((unsigned char) (c)) - 113)
-
-extern struct objfile * msymbol_objfile (struct minimal_symbol *sym);
-
-extern void
-add_minsym_to_hash_table (struct minimal_symbol *sym,
-			  struct minimal_symbol **table);
-
-extern struct minimal_symbol *lookup_minimal_symbol (const char *,
-						     const char *,
-						     struct objfile *);
-
-extern struct minimal_symbol *lookup_minimal_symbol_text (const char *,
-							  struct objfile *);
-
-struct minimal_symbol *lookup_minimal_symbol_solib_trampoline (const char *,
-							       struct objfile
-							       *);
-
-extern struct minimal_symbol *lookup_minimal_symbol_by_pc_name
-				(CORE_ADDR, const char *, struct objfile *);
-
-extern struct minimal_symbol *lookup_minimal_symbol_by_pc (CORE_ADDR);
-
-extern void iterate_over_minimal_symbols (struct objfile *objf,
-					  const char *name,
-					  void (*callback) (struct minimal_symbol *,
-							    void *),
-					  void *user_data);
-
 extern int in_gnu_ifunc_stub (CORE_ADDR pc);
 
 /* Functions for resolving STT_GNU_IFUNC symbols which are implemented only
@@ -1092,28 +1047,8 @@ struct gnu_ifunc_fns
 
 extern const struct gnu_ifunc_fns *gnu_ifunc_fns_p;
 
-extern struct minimal_symbol *
-    lookup_minimal_symbol_and_objfile (const char *,
-				       struct objfile **);
-
-extern struct minimal_symbol
-  *lookup_minimal_symbol_by_pc_section (CORE_ADDR, struct obj_section *);
-
-extern struct minimal_symbol
-  *lookup_solib_trampoline_symbol_by_pc (CORE_ADDR);
-
 extern CORE_ADDR find_solib_trampoline_target (struct frame_info *, CORE_ADDR);
 
-extern void init_minimal_symbol_collection (void);
-
-extern struct cleanup *make_cleanup_discard_minimal_symbols (void);
-
-extern void install_minimal_symbols (struct objfile *);
-
-/* Sort all the minimal symbols in OBJFILE.  */
-
-extern void msymbols_sort (struct objfile *objfile);
-
 struct symtab_and_line
 {
   /* The program space of this sal.  */
@@ -1130,6 +1065,9 @@ struct symtab_and_line
   CORE_ADDR end;
   int explicit_pc;
   int explicit_line;
+
+  /* The probe associated with this symtab_and_line.  */
+  struct probe *probe;
 };
 
 extern void init_sal (struct symtab_and_line *sal);
@@ -1175,13 +1113,6 @@ extern int find_line_pc_range (struct symtab_and_line, CORE_ADDR *,
 
 extern void resolve_sal_pc (struct symtab_and_line *);
 
-/* Given a string, return the line specified by it.  For commands like "list"
-   and "breakpoint".  */
-
-extern struct symtabs_and_lines decode_line_spec (char *, int);
-
-extern struct symtabs_and_lines decode_line_spec_1 (char *, int);
-
 /* Symmisc.c */
 
 void maintenance_print_symbols (char *, int);
@@ -1217,16 +1148,17 @@ extern void forget_cached_source_info (void);
 
 extern void select_source_symtab (struct symtab *);
 
-extern char **default_make_symbol_completion_list_break_on
+extern VEC (char_ptr) *default_make_symbol_completion_list_break_on
   (char *text, char *word, const char *break_on);
-extern char **default_make_symbol_completion_list (char *, char *);
-extern char **make_symbol_completion_list (char *, char *);
-extern char **make_symbol_completion_list_fn (struct cmd_list_element *,
-					      char *, char *);
+extern VEC (char_ptr) *default_make_symbol_completion_list (char *, char *);
+extern VEC (char_ptr) *make_symbol_completion_list (char *, char *);
+extern VEC (char_ptr) *make_symbol_completion_list_fn (struct cmd_list_element *,
+						       char *, char *);
 
-extern char **make_file_symbol_completion_list (char *, char *, char *);
+extern VEC (char_ptr) *make_file_symbol_completion_list (char *,
+							 char *, char *);
 
-extern char **make_source_files_completion_list (char *, char *);
+extern VEC (char_ptr) *make_source_files_completion_list (char *, char *);
 
 /* symtab.c */
 
@@ -1311,8 +1243,14 @@ void fixup_section (struct general_symbol_info *ginfo,
 
 struct objfile *lookup_objfile_from_block (const struct block *block);
 
+extern int symtab_create_debug;
+
 extern int basenames_may_differ;
 
+int compare_filenames_for_search (const char *filename,
+				  const char *search_name,
+				  int search_len);
+
 int iterate_over_some_symtabs (const char *name,
 			       const char *full_path,
 			       const char *real_path,
@@ -1332,9 +1270,18 @@ DEF_VEC_I (CORE_ADDR);
 VEC (CORE_ADDR) *find_pcs_for_symtab_line (struct symtab *symtab, int line,
 					   struct linetable_entry **best_entry);
 
+/* Callback for LA_ITERATE_OVER_SYMBOLS.  The callback will be called
+   once per matching symbol SYM, with DATA being the argument of the
+   same name that was passed to LA_ITERATE_OVER_SYMBOLS.  The callback
+   should return nonzero to indicate that LA_ITERATE_OVER_SYMBOLS
+   should continue iterating, or zero to indicate that the iteration
+   should end.  */
+
+typedef int (symbol_found_callback_ftype) (struct symbol *sym, void *data);
+
 void iterate_over_symbols (const struct block *block, const char *name,
 			   const domain_enum domain,
-			   int (*callback) (struct symbol *, void *),
+			   symbol_found_callback_ftype *callback,
 			   void *data);
 
 struct cleanup *demangle_for_lookup (const char *name, enum language lang,
diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c
index cbcca76..16aaa64 100644
--- a/gdb/target-descriptions.c
+++ b/gdb/target-descriptions.c
@@ -657,9 +657,9 @@ tdesc_gdb_type (struct gdbarch *gdbarch, struct tdesc_type *tdesc_type)
 		bitsize = f->end - f->start + 1;
 		total_size = tdesc_type->u.u.size * TARGET_CHAR_BIT;
 		if (gdbarch_bits_big_endian (gdbarch))
-		  FIELD_BITPOS (fld[0]) = total_size - f->start - bitsize;
+		  SET_FIELD_BITPOS (fld[0], total_size - f->start - bitsize);
 		else
-		  FIELD_BITPOS (fld[0]) = f->start;
+		  SET_FIELD_BITPOS (fld[0], f->start);
 		FIELD_BITSIZE (fld[0]) = bitsize;
 	      }
 	    else
@@ -1550,6 +1550,7 @@ maint_print_c_tdesc_cmd (char *args, int from_tty)
   struct tdesc_type_field *f;
   struct tdesc_type_flag *flag;
   int ix, ix2, ix3;
+  int printed_field_type = 0;
 
   /* Use the global target-supplied description, not the current
      architecture's.  This lets a GDB for one architecture generate C
@@ -1588,7 +1589,39 @@ maint_print_c_tdesc_cmd (char *args, int from_tty)
   printf_unfiltered
     ("  struct target_desc *result = allocate_target_description ();\n");
   printf_unfiltered ("  struct tdesc_feature *feature;\n");
-  printf_unfiltered ("  struct tdesc_type *field_type, *type;\n");
+
+  /* Now we do some "filtering" in order to know which variables to
+     declare.  This is needed because otherwise we would declare unused
+     variables `field_type' and `type'.  */
+  for (ix = 0;
+       VEC_iterate (tdesc_feature_p, tdesc->features, ix, feature);
+       ix++)
+    {
+      int printed_desc_type = 0;
+
+      for (ix2 = 0;
+	   VEC_iterate (tdesc_type_p, feature->types, ix2, type);
+	   ix2++)
+	{
+	  if (!printed_field_type)
+	    {
+	      printf_unfiltered ("  struct tdesc_type *field_type;\n");
+	      printed_field_type = 1;
+	    }
+
+	  if (type->kind == TDESC_TYPE_UNION
+	      && VEC_length (tdesc_type_field, type->u.u.fields) > 0)
+	    {
+	      printf_unfiltered ("  struct tdesc_type *type;\n");
+	      printed_desc_type = 1;
+	      break;
+	    }
+	}
+
+      if (printed_desc_type)
+	break;
+    }
+
   printf_unfiltered ("\n");
 
   if (tdesc_architecture (tdesc) != NULL)
diff --git a/gdb/target.c b/gdb/target.c
index 9aaa0ea..bb8eae8 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -29,7 +29,6 @@
 #include "bfd.h"
 #include "symfile.h"
 #include "objfiles.h"
-#include "gdb_wait.h"
 #include "dcache.h"
 #include <signal.h>
 #include "regcache.h"
@@ -42,6 +41,8 @@
 #include "exec.h"
 #include "inline-frame.h"
 #include "tracepoint.h"
+#include "gdb/fileio.h"
+#include "agent.h"
 
 static void target_info (char *, int);
 
@@ -637,6 +638,7 @@ update_current_target (void)
       /* Do not inherit to_mourn_inferior.  */
       INHERIT (to_can_run, t);
       /* Do not inherit to_pass_signals.  */
+      /* Do not inherit to_program_signals.  */
       /* Do not inherit to_thread_alive.  */
       /* Do not inherit to_find_new_threads.  */
       /* Do not inherit to_pid_to_str.  */
@@ -697,7 +699,11 @@ update_current_target (void)
       INHERIT (to_static_tracepoint_marker_at, t);
       INHERIT (to_static_tracepoint_markers_by_strid, t);
       INHERIT (to_traceframe_info, t);
+      INHERIT (to_use_agent, t);
+      INHERIT (to_can_use_agent, t);
       INHERIT (to_magic, t);
+      INHERIT (to_supports_evaluation_of_breakpoint_conditions, t);
+      INHERIT (to_can_run_breakpoint_commands, t);
       /* Do not inherit to_memory_map.  */
       /* Do not inherit to_flash_erase.  */
       /* Do not inherit to_flash_done.  */
@@ -924,6 +930,18 @@ update_current_target (void)
   de_fault (to_traceframe_info,
 	    (struct traceframe_info * (*) (void))
 	    tcomplain);
+  de_fault (to_supports_evaluation_of_breakpoint_conditions,
+	    (int (*) (void))
+	    return_zero);
+  de_fault (to_can_run_breakpoint_commands,
+	    (int (*) (void))
+	    return_zero);
+  de_fault (to_use_agent,
+	    (int (*) (int))
+	    tcomplain);
+  de_fault (to_can_use_agent,
+	    (int (*) (void))
+	    return_zero);
   de_fault (to_execution_direction, default_execution_direction);
 
 #undef de_fault
@@ -1010,16 +1028,10 @@ unpush_target (struct target_ops *t)
 	break;
     }
 
+  /* If we don't find target_ops, quit.  Only open targets should be
+     closed.  */
   if ((*cur) == NULL)
-    return 0;			/* Didn't find target_ops, quit now.  */
-
-  /* NOTE: cagney/2003-12-06: In '94 the close call was made
-     unconditional by moving it to before the above check that the
-     target was in the target stack (something about "Change the way
-     pushing and popping of targets work to support target overlays
-     and inheritance").  This doesn't make much sense - only open
-     targets should be closed.  */
-  target_close (t, 0);
+    return 0;			
 
   /* Unchain the target.  */
   tmp = (*cur);
@@ -1028,6 +1040,11 @@ unpush_target (struct target_ops *t)
 
   update_current_target ();
 
+  /* Finally close the target.  Note we do this after unchaining, so
+     any target method calls from within the target_close
+     implementation don't end up in T anymore.  */
+  target_close (t, 0);
+
   return 1;
 }
 
@@ -1743,7 +1760,7 @@ target_xfer_partial (struct target_ops *ops,
    it makes no progress, and then return how much was transferred).  */
 
 int
-target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
+target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
 {
   /* Dispatch to the topmost target, not the flattened current_target.
      Memory accesses check target->to_has_(all_)memory, and the
@@ -1759,7 +1776,7 @@ target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
    the target's stack.  This may trigger different cache behavior.  */
 
 int
-target_read_stack (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
+target_read_stack (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
 {
   /* Dispatch to the topmost target, not the flattened current_target.
      Memory accesses check target->to_has_(all_)memory, and the
@@ -1778,7 +1795,7 @@ target_read_stack (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
    Callers that can deal with partial writes should call target_write.  */
 
 int
-target_write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, int len)
+target_write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, ssize_t len)
 {
   /* Dispatch to the topmost target, not the flattened current_target.
      Memory accesses check target->to_has_(all_)memory, and the
@@ -1797,7 +1814,7 @@ target_write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, int len)
    should call target_write.  */
 
 int
-target_write_raw_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, int len)
+target_write_raw_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, ssize_t len)
 {
   /* Dispatch to the topmost target, not the flattened current_target.
      Memory accesses check target->to_has_(all_)memory, and the
@@ -2345,7 +2362,7 @@ target_read_stralloc (struct target_ops *ops, enum target_object object,
 		      const char *annex)
 {
   gdb_byte *buffer;
-  LONGEST transferred;
+  LONGEST i, transferred;
 
   transferred = target_read_alloc_1 (ops, object, annex, &buffer, 1);
 
@@ -2356,10 +2373,16 @@ target_read_stralloc (struct target_ops *ops, enum target_object object,
     return xstrdup ("");
 
   buffer[transferred] = 0;
-  if (strlen (buffer) < transferred)
-    warning (_("target object %d, annex %s, "
-	       "contained unexpected null characters"),
-	     (int) object, annex ? annex : "(none)");
+
+  /* Check for embedded NUL bytes; but allow trailing NULs.  */
+  for (i = strlen (buffer); i < transferred; i++)
+    if (buffer[i] != 0)
+      {
+	warning (_("target object %d, annex %s, "
+		   "contained unexpected null characters"),
+		 (int) object, annex ? annex : "(none)");
+	break;
+      }
 
   return (char *) buffer;
 }
@@ -2482,6 +2505,8 @@ target_pre_inferior (int from_tty)
 
       target_clear_description ();
     }
+
+  agent_capability_invalidate ();
 }
 
 /* Callback for iterate_over_inferiors.  Gets rid of the given
@@ -2649,7 +2674,7 @@ target_thread_name (struct thread_info *info)
 }
 
 void
-target_resume (ptid_t ptid, int step, enum target_signal signal)
+target_resume (ptid_t ptid, int step, enum gdb_signal signal)
 {
   struct target_ops *t;
 
@@ -2664,7 +2689,7 @@ target_resume (ptid_t ptid, int step, enum target_signal signal)
 	    fprintf_unfiltered (gdb_stdlog, "target_resume (%d, %s, %s)\n",
 				PIDGET (ptid),
 				step ? "step" : "continue",
-				target_signal_to_name (signal));
+				gdb_signal_to_name (signal));
 
 	  registers_changed_ptid (ptid);
 	  set_executing (ptid, 1);
@@ -2696,7 +2721,7 @@ target_pass_signals (int numsigs, unsigned char *pass_signals)
 	      for (i = 0; i < numsigs; i++)
 		if (pass_signals[i])
 		  fprintf_unfiltered (gdb_stdlog, " %s",
-				      target_signal_to_name (i));
+				      gdb_signal_to_name (i));
 
 	      fprintf_unfiltered (gdb_stdlog, " })\n");
 	    }
@@ -2707,6 +2732,36 @@ target_pass_signals (int numsigs, unsigned char *pass_signals)
     }
 }
 
+void
+target_program_signals (int numsigs, unsigned char *program_signals)
+{
+  struct target_ops *t;
+
+  for (t = current_target.beneath; t != NULL; t = t->beneath)
+    {
+      if (t->to_program_signals != NULL)
+	{
+	  if (targetdebug)
+	    {
+	      int i;
+
+	      fprintf_unfiltered (gdb_stdlog, "target_program_signals (%d, {",
+				  numsigs);
+
+	      for (i = 0; i < numsigs; i++)
+		if (program_signals[i])
+		  fprintf_unfiltered (gdb_stdlog, " %s",
+				      gdb_signal_to_name (i));
+
+	      fprintf_unfiltered (gdb_stdlog, " })\n");
+	    }
+
+	  (*t->to_program_signals) (numsigs, program_signals);
+	  return;
+	}
+    }
+}
+
 /* Look through the list of possible targets for a target that can
    follow forks.  */
 
@@ -3081,6 +3136,38 @@ target_supports_non_stop (void)
   return 0;
 }
 
+/* Implement the "info proc" command.  */
+
+void
+target_info_proc (char *args, enum info_proc_what what)
+{
+  struct target_ops *t;
+
+  /* If we're already connected to something that can get us OS
+     related data, use it.  Otherwise, try using the native
+     target.  */
+  if (current_target.to_stratum >= process_stratum)
+    t = current_target.beneath;
+  else
+    t = find_default_run_target (NULL);
+
+  for (; t != NULL; t = t->beneath)
+    {
+      if (t->to_info_proc != NULL)
+	{
+	  t->to_info_proc (t, args, what);
+
+	  if (targetdebug)
+	    fprintf_unfiltered (gdb_stdlog,
+				"target_info_proc (\"%s\", %d)\n", args, what);
+
+	  return;
+	}
+    }
+
+  error (_("Not supported on this target."));
+}
+
 static int
 find_default_supports_disable_randomization (void)
 {
@@ -3160,6 +3247,304 @@ target_thread_address_space (ptid_t ptid)
   return inf->aspace;
 }
 
+
+/* Target file operations.  */
+
+static struct target_ops *
+default_fileio_target (void)
+{
+  /* If we're already connected to something that can perform
+     file I/O, use it. Otherwise, try using the native target.  */
+  if (current_target.to_stratum >= process_stratum)
+    return current_target.beneath;
+  else
+    return find_default_run_target ("file I/O");
+}
+
+/* Open FILENAME on the target, using FLAGS and MODE.  Return a
+   target file descriptor, or -1 if an error occurs (and set
+   *TARGET_ERRNO).  */
+int
+target_fileio_open (const char *filename, int flags, int mode,
+		    int *target_errno)
+{
+  struct target_ops *t;
+
+  for (t = default_fileio_target (); t != NULL; t = t->beneath)
+    {
+      if (t->to_fileio_open != NULL)
+	{
+	  int fd = t->to_fileio_open (filename, flags, mode, target_errno);
+
+	  if (targetdebug)
+	    fprintf_unfiltered (gdb_stdlog,
+				"target_fileio_open (%s,0x%x,0%o) = %d (%d)\n",
+				filename, flags, mode,
+				fd, fd != -1 ? 0 : *target_errno);
+	  return fd;
+	}
+    }
+
+  *target_errno = FILEIO_ENOSYS;
+  return -1;
+}
+
+/* Write up to LEN bytes from WRITE_BUF to FD on the target.
+   Return the number of bytes written, or -1 if an error occurs
+   (and set *TARGET_ERRNO).  */
+int
+target_fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
+		      ULONGEST offset, int *target_errno)
+{
+  struct target_ops *t;
+
+  for (t = default_fileio_target (); t != NULL; t = t->beneath)
+    {
+      if (t->to_fileio_pwrite != NULL)
+	{
+	  int ret = t->to_fileio_pwrite (fd, write_buf, len, offset,
+					 target_errno);
+
+	  if (targetdebug)
+	    fprintf_unfiltered (gdb_stdlog,
+				"target_fileio_pwrite (%d,...,%d,%s) "
+				"= %d (%d)\n",
+				fd, len, pulongest (offset),
+				ret, ret != -1 ? 0 : *target_errno);
+	  return ret;
+	}
+    }
+
+  *target_errno = FILEIO_ENOSYS;
+  return -1;
+}
+
+/* Read up to LEN bytes FD on the target into READ_BUF.
+   Return the number of bytes read, or -1 if an error occurs
+   (and set *TARGET_ERRNO).  */
+int
+target_fileio_pread (int fd, gdb_byte *read_buf, int len,
+		     ULONGEST offset, int *target_errno)
+{
+  struct target_ops *t;
+
+  for (t = default_fileio_target (); t != NULL; t = t->beneath)
+    {
+      if (t->to_fileio_pread != NULL)
+	{
+	  int ret = t->to_fileio_pread (fd, read_buf, len, offset,
+					target_errno);
+
+	  if (targetdebug)
+	    fprintf_unfiltered (gdb_stdlog,
+				"target_fileio_pread (%d,...,%d,%s) "
+				"= %d (%d)\n",
+				fd, len, pulongest (offset),
+				ret, ret != -1 ? 0 : *target_errno);
+	  return ret;
+	}
+    }
+
+  *target_errno = FILEIO_ENOSYS;
+  return -1;
+}
+
+/* Close FD on the target.  Return 0, or -1 if an error occurs
+   (and set *TARGET_ERRNO).  */
+int
+target_fileio_close (int fd, int *target_errno)
+{
+  struct target_ops *t;
+
+  for (t = default_fileio_target (); t != NULL; t = t->beneath)
+    {
+      if (t->to_fileio_close != NULL)
+	{
+	  int ret = t->to_fileio_close (fd, target_errno);
+
+	  if (targetdebug)
+	    fprintf_unfiltered (gdb_stdlog,
+				"target_fileio_close (%d) = %d (%d)\n",
+				fd, ret, ret != -1 ? 0 : *target_errno);
+	  return ret;
+	}
+    }
+
+  *target_errno = FILEIO_ENOSYS;
+  return -1;
+}
+
+/* Unlink FILENAME on the target.  Return 0, or -1 if an error
+   occurs (and set *TARGET_ERRNO).  */
+int
+target_fileio_unlink (const char *filename, int *target_errno)
+{
+  struct target_ops *t;
+
+  for (t = default_fileio_target (); t != NULL; t = t->beneath)
+    {
+      if (t->to_fileio_unlink != NULL)
+	{
+	  int ret = t->to_fileio_unlink (filename, target_errno);
+
+	  if (targetdebug)
+	    fprintf_unfiltered (gdb_stdlog,
+				"target_fileio_unlink (%s) = %d (%d)\n",
+				filename, ret, ret != -1 ? 0 : *target_errno);
+	  return ret;
+	}
+    }
+
+  *target_errno = FILEIO_ENOSYS;
+  return -1;
+}
+
+/* Read value of symbolic link FILENAME on the target.  Return a
+   null-terminated string allocated via xmalloc, or NULL if an error
+   occurs (and set *TARGET_ERRNO).  */
+char *
+target_fileio_readlink (const char *filename, int *target_errno)
+{
+  struct target_ops *t;
+
+  for (t = default_fileio_target (); t != NULL; t = t->beneath)
+    {
+      if (t->to_fileio_readlink != NULL)
+	{
+	  char *ret = t->to_fileio_readlink (filename, target_errno);
+
+	  if (targetdebug)
+	    fprintf_unfiltered (gdb_stdlog,
+				"target_fileio_readlink (%s) = %s (%d)\n",
+				filename, ret? ret : "(nil)",
+				ret? 0 : *target_errno);
+	  return ret;
+	}
+    }
+
+  *target_errno = FILEIO_ENOSYS;
+  return NULL;
+}
+
+static void
+target_fileio_close_cleanup (void *opaque)
+{
+  int fd = *(int *) opaque;
+  int target_errno;
+
+  target_fileio_close (fd, &target_errno);
+}
+
+/* Read target file FILENAME.  Store the result in *BUF_P and
+   return the size of the transferred data.  PADDING additional bytes are
+   available in *BUF_P.  This is a helper function for
+   target_fileio_read_alloc; see the declaration of that function for more
+   information.  */
+
+static LONGEST
+target_fileio_read_alloc_1 (const char *filename,
+			    gdb_byte **buf_p, int padding)
+{
+  struct cleanup *close_cleanup;
+  size_t buf_alloc, buf_pos;
+  gdb_byte *buf;
+  LONGEST n;
+  int fd;
+  int target_errno;
+
+  fd = target_fileio_open (filename, FILEIO_O_RDONLY, 0700, &target_errno);
+  if (fd == -1)
+    return -1;
+
+  close_cleanup = make_cleanup (target_fileio_close_cleanup, &fd);
+
+  /* Start by reading up to 4K at a time.  The target will throttle
+     this number down if necessary.  */
+  buf_alloc = 4096;
+  buf = xmalloc (buf_alloc);
+  buf_pos = 0;
+  while (1)
+    {
+      n = target_fileio_pread (fd, &buf[buf_pos],
+			       buf_alloc - buf_pos - padding, buf_pos,
+			       &target_errno);
+      if (n < 0)
+	{
+	  /* An error occurred.  */
+	  do_cleanups (close_cleanup);
+	  xfree (buf);
+	  return -1;
+	}
+      else if (n == 0)
+	{
+	  /* Read all there was.  */
+	  do_cleanups (close_cleanup);
+	  if (buf_pos == 0)
+	    xfree (buf);
+	  else
+	    *buf_p = buf;
+	  return buf_pos;
+	}
+
+      buf_pos += n;
+
+      /* If the buffer is filling up, expand it.  */
+      if (buf_alloc < buf_pos * 2)
+	{
+	  buf_alloc *= 2;
+	  buf = xrealloc (buf, buf_alloc);
+	}
+
+      QUIT;
+    }
+}
+
+/* Read target file FILENAME.  Store the result in *BUF_P and return
+   the size of the transferred data.  See the declaration in "target.h"
+   function for more information about the return value.  */
+
+LONGEST
+target_fileio_read_alloc (const char *filename, gdb_byte **buf_p)
+{
+  return target_fileio_read_alloc_1 (filename, buf_p, 0);
+}
+
+/* Read target file FILENAME.  The result is NUL-terminated and
+   returned as a string, allocated using xmalloc.  If an error occurs
+   or the transfer is unsupported, NULL is returned.  Empty objects
+   are returned as allocated but empty strings.  A warning is issued
+   if the result contains any embedded NUL bytes.  */
+
+char *
+target_fileio_read_stralloc (const char *filename)
+{
+  gdb_byte *buffer;
+  LONGEST i, transferred;
+
+  transferred = target_fileio_read_alloc_1 (filename, &buffer, 1);
+
+  if (transferred < 0)
+    return NULL;
+
+  if (transferred == 0)
+    return xstrdup ("");
+
+  buffer[transferred] = 0;
+
+  /* Check for embedded NUL bytes; but allow trailing NULs.  */
+  for (i = strlen (buffer); i < transferred; i++)
+    if (buffer[i] != 0)
+      {
+	warning (_("target file %s "
+		   "contained unexpected null characters"),
+		 filename);
+	break;
+      }
+
+  return (char *) buffer;
+}
+
+
 static int
 default_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
 {
@@ -3243,13 +3628,22 @@ generic_mourn_inferior (void)
   ptid = inferior_ptid;
   inferior_ptid = null_ptid;
 
+  /* Mark breakpoints uninserted in case something tries to delete a
+     breakpoint while we delete the inferior's threads (which would
+     fail, since the inferior is long gone).  */
+  mark_breakpoints_out ();
+
   if (!ptid_equal (ptid, null_ptid))
     {
       int pid = ptid_get_pid (ptid);
       exit_inferior (pid);
     }
 
+  /* Note this wipes step-resume breakpoints, so needs to be done
+     after exit_inferior, which ends up referencing the step-resume
+     breakpoints through clear_thread_inferior_resources.  */
   breakpoint_init_inferior (inf_exited);
+
   registers_changed ();
 
   reopen_exec_file ();
@@ -3259,29 +3653,6 @@ generic_mourn_inferior (void)
     deprecated_detach_hook ();
 }
 

-/* Helper function for child_wait and the derivatives of child_wait.
-   HOSTSTATUS is the waitstatus from wait() or the equivalent; store our
-   translation of that in OURSTATUS.  */
-void
-store_waitstatus (struct target_waitstatus *ourstatus, int hoststatus)
-{
-  if (WIFEXITED (hoststatus))
-    {
-      ourstatus->kind = TARGET_WAITKIND_EXITED;
-      ourstatus->value.integer = WEXITSTATUS (hoststatus);
-    }
-  else if (!WIFSTOPPED (hoststatus))
-    {
-      ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
-      ourstatus->value.sig = target_signal_from_host (WTERMSIG (hoststatus));
-    }
-  else
-    {
-      ourstatus->kind = TARGET_WAITKIND_STOPPED;
-      ourstatus->value.sig = target_signal_from_host (WSTOPSIG (hoststatus));
-    }
-}
-

 /* Convert a normal process ID to a string.  Returns the string in a
    static buffer.  */
 
@@ -3485,10 +3856,10 @@ target_waitstatus_to_string (const struct target_waitstatus *ws)
 			 kind_str, ws->value.integer);
     case TARGET_WAITKIND_STOPPED:
       return xstrprintf ("%sstopped, signal = %s",
-			 kind_str, target_signal_to_name (ws->value.sig));
+			 kind_str, gdb_signal_to_name (ws->value.sig));
     case TARGET_WAITKIND_SIGNALLED:
       return xstrprintf ("%ssignalled, signal = %s",
-			 kind_str, target_signal_to_name (ws->value.sig));
+			 kind_str, gdb_signal_to_name (ws->value.sig));
     case TARGET_WAITKIND_LOADED:
       return xstrprintf ("%sloaded", kind_str);
     case TARGET_WAITKIND_FORKED:
@@ -4264,8 +4635,8 @@ int target_async_permitted = 0;
 static int target_async_permitted_1 = 0;
 
 static void
-set_maintenance_target_async_permitted (char *args, int from_tty,
-					struct cmd_list_element *c)
+set_target_async_command (char *args, int from_tty,
+			  struct cmd_list_element *c)
 {
   if (have_live_inferiors ())
     {
@@ -4277,9 +4648,9 @@ set_maintenance_target_async_permitted (char *args, int from_tty,
 }
 
 static void
-show_maintenance_target_async_permitted (struct ui_file *file, int from_tty,
-					 struct cmd_list_element *c,
-					 const char *value)
+show_target_async_command (struct ui_file *file, int from_tty,
+			   struct cmd_list_element *c,
+			   const char *value)
 {
   fprintf_filtered (file,
 		    _("Controlling the inferior in "
@@ -4384,8 +4755,8 @@ result in significant performance improvement for remote targets."),
 Set whether gdb controls the inferior in asynchronous mode."), _("\
 Show whether gdb controls the inferior in asynchronous mode."), _("\
 Tells gdb whether to control the inferior in asynchronous mode."),
-			   set_maintenance_target_async_permitted,
-			   show_maintenance_target_async_permitted,
+			   set_target_async_command,
+			   show_target_async_command,
 			   &setlist,
 			   &showlist);
 
diff --git a/gdb/target.h b/gdb/target.h
index 7d0bed1..54c58d6 100644
--- a/gdb/target.h
+++ b/gdb/target.h
@@ -164,7 +164,7 @@ struct target_waitstatus
     union
       {
 	int integer;
-	enum target_signal sig;
+	enum gdb_signal sig;
 	ptid_t related_pid;
 	char *execd_pathname;
 	int syscall_number;
@@ -280,7 +280,9 @@ enum target_object
   /* Load maps for FDPIC systems.  */
   TARGET_OBJECT_FDPIC,
   /* Darwin dynamic linker info data.  */
-  TARGET_OBJECT_DARWIN_DYLD_INFO
+  TARGET_OBJECT_DARWIN_DYLD_INFO,
+  /* OpenVMS Unwind Information Block.  */
+  TARGET_OBJECT_OPENVMS_UIB
   /* Possible future objects: TARGET_OBJECT_FILE, ...  */
 };
 
@@ -417,7 +419,7 @@ struct target_ops
     void (*to_post_attach) (int);
     void (*to_detach) (struct target_ops *ops, char *, int);
     void (*to_disconnect) (struct target_ops *, char *, int);
-    void (*to_resume) (struct target_ops *, ptid_t, int, enum target_signal);
+    void (*to_resume) (struct target_ops *, ptid_t, int, enum gdb_signal);
     ptid_t (*to_wait) (struct target_ops *,
 		       ptid_t, struct target_waitstatus *, int);
     void (*to_fetch_registers) (struct target_ops *, struct regcache *, int);
@@ -509,6 +511,10 @@ struct target_ops
        target_* macro.  */
     void (*to_pass_signals) (int, unsigned char *);
 
+    /* Documentation of this routine is provided with the
+       corresponding target_* function.  */
+    void (*to_program_signals) (int, unsigned char *);
+
     int (*to_thread_alive) (struct target_ops *, ptid_t ptid);
     void (*to_find_new_threads) (struct target_ops *);
     char *(*to_pid_to_str) (struct target_ops *, ptid_t);
@@ -662,6 +668,14 @@ struct target_ops
     /* Does this target support the tracenz bytecode for string collection?  */
     int (*to_supports_string_tracing) (void);
 
+    /* Does this target support evaluation of breakpoint conditions on its
+       end?  */
+    int (*to_supports_evaluation_of_breakpoint_conditions) (void);
+
+    /* Does this target support evaluation of breakpoint commands on its
+       end?  */
+    int (*to_can_run_breakpoint_commands) (void);
+
     /* Determine current architecture of thread PTID.
 
        The target is supposed to determine the architecture of the code where
@@ -681,6 +695,43 @@ struct target_ops
     struct address_space *(*to_thread_address_space) (struct target_ops *,
 						      ptid_t);
 
+    /* Target file operations.  */
+
+    /* Open FILENAME on the target, using FLAGS and MODE.  Return a
+       target file descriptor, or -1 if an error occurs (and set
+       *TARGET_ERRNO).  */
+    int (*to_fileio_open) (const char *filename, int flags, int mode,
+			   int *target_errno);
+
+    /* Write up to LEN bytes from WRITE_BUF to FD on the target.
+       Return the number of bytes written, or -1 if an error occurs
+       (and set *TARGET_ERRNO).  */
+    int (*to_fileio_pwrite) (int fd, const gdb_byte *write_buf, int len,
+			     ULONGEST offset, int *target_errno);
+
+    /* Read up to LEN bytes FD on the target into READ_BUF.
+       Return the number of bytes read, or -1 if an error occurs
+       (and set *TARGET_ERRNO).  */
+    int (*to_fileio_pread) (int fd, gdb_byte *read_buf, int len,
+			    ULONGEST offset, int *target_errno);
+
+    /* Close FD on the target.  Return 0, or -1 if an error occurs
+       (and set *TARGET_ERRNO).  */
+    int (*to_fileio_close) (int fd, int *target_errno);
+
+    /* Unlink FILENAME on the target.  Return 0, or -1 if an error
+       occurs (and set *TARGET_ERRNO).  */
+    int (*to_fileio_unlink) (const char *filename, int *target_errno);
+
+    /* Read value of symbolic link FILENAME on the target.  Return a
+       null-terminated string allocated via xmalloc, or NULL if an error
+       occurs (and set *TARGET_ERRNO).  */
+    char *(*to_fileio_readlink) (const char *filename, int *target_errno);
+
+
+    /* Implement the "info proc" command.  */
+    void (*to_info_proc) (struct target_ops *, char *, enum info_proc_what);
+
     /* Tracepoint-related operations.  */
 
     /* Prepare the target for a tracing run.  */
@@ -795,6 +846,13 @@ struct target_ops
        re-fetching when necessary.  */
     struct traceframe_info *(*to_traceframe_info) (void);
 
+    /* Ask the target to use or not to use agent according to USE.  Return 1
+       successful, 0 otherwise.  */
+    int (*to_use_agent) (int use);
+
+    /* Is the target able to use agent in current state?  */
+    int (*to_can_use_agent) (void);
+
     int to_magic;
     /* Need sub-structure for target machine related rather than comm related?
      */
@@ -820,10 +878,10 @@ extern struct target_ops current_target;
    longer going to be calling.  QUITTING indicates that GDB is exiting
    and should not get hung on an error (otherwise it is important to
    perform clean termination, even if it takes a while).  This routine
-   is automatically always called when popping the target off the
-   target stack (to_beneath is undefined).  Closing file descriptors
-   and freeing all memory allocated memory are typical things it
-   should do.  */
+   is automatically always called after popping the target off the
+   target stack - the target's own methods are no longer available
+   through the target vector.  Closing file descriptors and freeing all
+   memory allocated memory are typical things it should do.  */
 
 void target_close (struct target_ops *targ, int quitting);
 
@@ -866,12 +924,18 @@ extern void target_detach (char *, int);
 
 extern void target_disconnect (char *, int);
 
-/* Resume execution of the target process PTID.  STEP says whether to
-   single-step or to run free; SIGGNAL is the signal to be given to
-   the target, or TARGET_SIGNAL_0 for no signal.  The caller may not
-   pass TARGET_SIGNAL_DEFAULT.  */
+/* Resume execution of the target process PTID (or a group of
+   threads).  STEP says whether to single-step or to run free; SIGGNAL
+   is the signal to be given to the target, or GDB_SIGNAL_0 for no
+   signal.  The caller may not pass GDB_SIGNAL_DEFAULT.  A specific
+   PTID means `step/resume only this process id'.  A wildcard PTID
+   (all threads, or all threads of process) means `step/resume
+   INFERIOR_PTID, and let other threads (for which the wildcard PTID
+   matches) resume with their 'thread->suspend.stop_signal' signal
+   (usually GDB_SIGNAL_0) if it is in "pass" state, or with no signal
+   if in "no pass" state.  */
 
-extern void target_resume (ptid_t ptid, int step, enum target_signal signal);
+extern void target_resume (ptid_t ptid, int step, enum gdb_signal signal);
 
 /* Wait for process pid to do something.  PTID = -1 to wait for any
    pid to do something.  Return pid of child, or -1 in case of error;
@@ -908,6 +972,10 @@ extern void target_store_registers (struct regcache *regcache, int regs);
 
 struct address_space *target_thread_address_space (ptid_t);
 
+/* Implement the "info proc" command.  */
+
+void target_info_proc (char *, enum info_proc_what);
+
 /* Returns true if this target can debug multiple processes
    simultaneously.  */
 
@@ -927,20 +995,33 @@ int target_supports_disable_randomization (void);
 #define target_supports_string_tracing() \
   (*current_target.to_supports_string_tracing) ()
 
+/* Returns true if this target can handle breakpoint conditions
+   on its end.  */
+
+#define target_supports_evaluation_of_breakpoint_conditions() \
+  (*current_target.to_supports_evaluation_of_breakpoint_conditions) ()
+
+/* Returns true if this target can handle breakpoint commands
+   on its end.  */
+
+#define target_can_run_breakpoint_commands() \
+  (*current_target.to_can_run_breakpoint_commands) ()
+
 /* Invalidate all target dcaches.  */
 extern void target_dcache_invalidate (void);
 
 extern int target_read_string (CORE_ADDR, char **, int, int *);
 
-extern int target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len);
+extern int target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr,
+			       ssize_t len);
 
-extern int target_read_stack (CORE_ADDR memaddr, gdb_byte *myaddr, int len);
+extern int target_read_stack (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len);
 
 extern int target_write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr,
-				int len);
+				ssize_t len);
 
 extern int target_write_raw_memory (CORE_ADDR memaddr, const gdb_byte *myaddr,
-				    int len);
+				    ssize_t len);
 
 /* Fetches the target's memory map.  If one is found it is sorted
    and returned, after some consistency checking.  Otherwise, NULL
@@ -1190,7 +1271,7 @@ void target_mourn_inferior (void);
 /* Set list of signals to be handled in the target.
 
    PASS_SIGNALS is an array of size NSIG, indexed by target signal number
-   (enum target_signal).  For every signal whose entry in this array is
+   (enum gdb_signal).  For every signal whose entry in this array is
    non-zero, the target is allowed -but not required- to skip reporting
    arrival of the signal to the GDB core by returning from target_wait,
    and to pass the signal directly to the inferior instead.
@@ -1201,6 +1282,22 @@ void target_mourn_inferior (void);
 
 extern void target_pass_signals (int nsig, unsigned char *pass_signals);
 
+/* Set list of signals the target may pass to the inferior.  This
+   directly maps to the "handle SIGNAL pass/nopass" setting.
+
+   PROGRAM_SIGNALS is an array of size NSIG, indexed by target signal
+   number (enum gdb_signal).  For every signal whose entry in this
+   array is non-zero, the target is allowed to pass the signal to the
+   inferior.  Signals not present in the array shall be silently
+   discarded.  This does not influence whether to pass signals to the
+   inferior as a result of a target_resume call.  This is useful in
+   scenarios where the target needs to decide whether to pass or not a
+   signal to the inferior without GDB core involvement, such as for
+   example, when detaching (as threads may have been suspended with
+   pending signals not reported to GDB).  */
+
+extern void target_program_signals (int nsig, unsigned char *program_signals);
+
 /* Check to see if a thread is still alive.  */
 
 extern int target_thread_alive (ptid_t ptid);
@@ -1442,6 +1539,8 @@ extern int target_ranged_break_num_registers (void);
 #define target_stopped_data_address(target, addr_p) \
     (*target.to_stopped_data_address) (target, addr_p)
 
+/* Return non-zero if ADDR is within the range of a watchpoint spanning
+   LENGTH bytes beginning at START.  */
 #define target_watchpoint_addr_within_range(target, addr, start, length) \
   (*target.to_watchpoint_addr_within_range) (target, addr, start, length)
 
@@ -1489,6 +1588,59 @@ extern int target_search_memory (CORE_ADDR start_addr,
                                  ULONGEST pattern_len,
                                  CORE_ADDR *found_addrp);
 
+/* Target file operations.  */
+
+/* Open FILENAME on the target, using FLAGS and MODE.  Return a
+   target file descriptor, or -1 if an error occurs (and set
+   *TARGET_ERRNO).  */
+extern int target_fileio_open (const char *filename, int flags, int mode,
+			       int *target_errno);
+
+/* Write up to LEN bytes from WRITE_BUF to FD on the target.
+   Return the number of bytes written, or -1 if an error occurs
+   (and set *TARGET_ERRNO).  */
+extern int target_fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
+				 ULONGEST offset, int *target_errno);
+
+/* Read up to LEN bytes FD on the target into READ_BUF.
+   Return the number of bytes read, or -1 if an error occurs
+   (and set *TARGET_ERRNO).  */
+extern int target_fileio_pread (int fd, gdb_byte *read_buf, int len,
+				ULONGEST offset, int *target_errno);
+
+/* Close FD on the target.  Return 0, or -1 if an error occurs
+   (and set *TARGET_ERRNO).  */
+extern int target_fileio_close (int fd, int *target_errno);
+
+/* Unlink FILENAME on the target.  Return 0, or -1 if an error
+   occurs (and set *TARGET_ERRNO).  */
+extern int target_fileio_unlink (const char *filename, int *target_errno);
+
+/* Read value of symbolic link FILENAME on the target.  Return a
+   null-terminated string allocated via xmalloc, or NULL if an error
+   occurs (and set *TARGET_ERRNO).  */
+extern char *target_fileio_readlink (const char *filename, int *target_errno);
+
+/* Read target file FILENAME.  The return value will be -1 if the transfer
+   fails or is not supported; 0 if the object is empty; or the length
+   of the object otherwise.  If a positive value is returned, a
+   sufficiently large buffer will be allocated using xmalloc and
+   returned in *BUF_P containing the contents of the object.
+
+   This method should be used for objects sufficiently small to store
+   in a single xmalloc'd buffer, when no fixed bound on the object's
+   size is known in advance.  */
+extern LONGEST target_fileio_read_alloc (const char *filename,
+					 gdb_byte **buf_p);
+
+/* Read target file FILENAME.  The result is NUL-terminated and
+   returned as a string, allocated using xmalloc.  If an error occurs
+   or the transfer is unsupported, NULL is returned.  Empty objects
+   are returned as allocated but empty strings.  A warning is issued
+   if the result contains any embedded NUL bytes.  */
+extern char *target_fileio_read_stralloc (const char *filename);
+
+
 /* Tracepoint-related operations.  */
 
 #define target_trace_init() \
@@ -1569,6 +1721,12 @@ extern int target_search_memory (CORE_ADDR start_addr,
 #define target_traceframe_info() \
   (*current_target.to_traceframe_info) ()
 
+#define target_use_agent(use) \
+  (*current_target.to_use_agent) (use)
+
+#define target_can_use_agent() \
+  (*current_target.to_can_use_agent) ()
+
 /* Command logging facility.  */
 
 #define target_log_command(p)						\
@@ -1716,20 +1874,6 @@ extern int baud_rate;
 extern int remote_timeout;
 
 

-/* Functions for helping to write a native target.  */
-
-/* This is for native targets which use a unix/POSIX-style waitstatus.  */
-extern void store_waitstatus (struct target_waitstatus *, int);
-
-/* These are in common/signals.c, but they're only used by gdb.  */
-extern enum target_signal default_target_signal_from_host (struct gdbarch *,
-							   int);
-extern int default_target_signal_to_host (struct gdbarch *, 
-					  enum target_signal);
-
-/* Convert from a number used in a GDB command to an enum target_signal.  */
-extern enum target_signal target_signal_from_command (int);
-/* End of files in common/signals.c.  */
 
 /* Set the show memory breakpoints mode to show, and installs a cleanup
    to restore it back to the current value.  */
diff --git a/gdb/testsuite/.gdbinit b/gdb/testsuite/.gdbinit
deleted file mode 100644
index 62bcb74..0000000
--- a/gdb/testsuite/.gdbinit
+++ /dev/null
@@ -1 +0,0 @@
-set height 400
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 4f9c0f3..82a9903 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,8 +1,2734 @@
-2012-01-06  Joel Brobecker  <brobecker at adacore.com>
+2012-08-16  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.python/py-mi.exp: Add test for printer whose children
+	are a list.
+	* gdb.python/py-prettyprint.c (struct children_as_list): New.
+	(main): New variable children_as_list.
+	* gdb.python/py-prettyprint.py (class pp_children_as_list):
+	New.
+	(register_pretty_printers): Register new printer.
+
+2012-08-14  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.base/attach-twice.exp: Remove excessive ps exec.
+
+2012-08-07  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.base/valgrind-infcall.exp (continue #$continue_count): Use
+	global variable loop, not a 'break'.  Add loop count limit to 100.
+	Add new fail case for terminated vgdb.
+
+2012-08-07  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Do not false FAIL with old GCCs.
+	* gdb.base/watchpoint.exp (self-delete local watch) <$no_hw>: XFAIL for
+	GCC < 4.5 in $no_hw mode.
+
+2012-08-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.base/list.exp (test_only_end): New function.
+	Call it.
+
+2012-08-03  Edjunior Machado  <emachado at linux.vnet.ibm.com>
+
+	* gdb.base/valgrind-infcall.exp: Expect leading `.' on ppc64's
+	symbols. Abort if vgdb remote connection is closed.
+
+2012-08-02  Doug Evans  <dje at google.com>
+
+	* gdb.base/info-fun.exp: Fix failures on m68k, ppc64, s390x.
+
+2012-08-02  Sergio Durigan Junior  <sergiodj at redhat.com>
+
+	* gdb.base/pc-fp.exp: Adjust testcase to match different outputs from
+	s390x, PowerPC 64 and m68k-linux.
+
+2012-08-02  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* gdb.base/annota1.exp: Accept no frames-invalid notification
+	when starting up the program.
+	* gdb.python/py-value.exp (test_value_numeric_ops): Pointers may
+	show a symbolic value as well.
+	* gdb.server/server-exec-info.exp: Skip test when skipping
+	gdbserver test and/or when skipping shared library tests.
+	* gdb.threads/linux-dp.exp: Unset "seen" when done with it to
+	avoid name conflicts with other tests.
+
+2012-08-02  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* gdb.dwarf2/dw2-icc-opaque.S: Remove .align directives.
+	Fix wrong output on big-endian systems.
+	* gdb.dwarf2/dw2-icc-opaque.exp: Expect @mode32 attribute on
+	4-byte pointer types on 64-bit s390x.
+
+2012-08-02  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* gdb.base/watchpoint.c (func2): Initialize local_a.  Add
+	marker comment at the beginning (after intialization).
+	* gdb.base/watchpoint.exp (test_complex_watchpoint): Set func2
+	breakpoint on marker comment instead of function begin.
+	(test_wide_location_1): Do not expect HW watchpoints on 32-bit
+	PowerPC.
+	(test_wide_location_2): Do not expect HW watchpoints on 32-bit
+	or 64-bit PowerPC.
+	(do_tests): Consistently set can-use-hw-watchpoints to 0 if
+	gdb,no_hardware_watchpoints flag is set.
+	(initialize): Remove now redundant can-use-hw-watchpoints change.
+
+2012-08-01  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* gdb.base/catch-load.exp: Fix argument to gdb_load_shlibs.
+	* gdb.base/ctxobj.exp: Call gdb_load_shlibs.
+	* gdb.base/print-file-var.exp: Likewise.
+	* gdb.server/solib-list.exp: Skip on remote targets.
+
+2012-08-01  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* gdb.base/watchpoint.exp (test_wide_location_1): Expect software
+	watchpoints on ARM.  When expecting software watchpoints, tolerate
+	(remote) targets that report unsupported hardware watchpoint only
+	at continue time.
+	(test_wide_location_2): Likewise.
+
+2012-08-01  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.base/valgrind-infcall.exp: Relax the UNSUPPORTED check for more
+	valgrind versions.
+
+2012-07-31  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.base/valgrind-infcall.c: New file.
+	* gdb.base/valgrind-infcall.exp: New file.
+
+2012-07-30  Keith Seitz  <keiths at redhat.com>
+
+	* gdb.linespec/ls-errs.exp: Check some quote-enclosed
+	linespecs.
+
+2012-07-30  Doug Evans  <dje at google.com>
+
+	* gdb.dwarf2/fission-reread.S: Use .data instead of .bss.
+	* gdb.dwarf2/pr13961.S: Ditto.
+
+	* gdb.dwarf2/dw4-sig-types.exp: Fix typo.
+
+2012-07-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix testsuite regression after --use-deprecated-index-sections removal.
+	* gdb.base/annota1.exp (run until main breakpoint): Update the expect
+	string.
+	* gdb.base/async-shell.exp (gdbindex_warning_re): Likewise.
+
+2012-07-25  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix testsuite regression after --use-deprecated-index-sections removal.
+	* lib/mi-support.exp (gdbindex_warning_re): Update the expect string.
+
+2012-07-16  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.base/store.exp (check_set): Import gdb_prompt.
+	(continue to wack_${t}): Make it to conditional gdb_test_multiple.
+	(${prefix}; next ${t}): Hide its name, handle it conditionally now.
+
+2012-07-16  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	PR 11914
+	* gdb.python/py-prettyprint.c (eval_func, eval_sub): New.
+	(main): Call eval_sub.
+	* gdb.python/py-prettyprint.exp:
+	(python execfile ('py-prettyprint.py')): Move it earlier.
+	New breakpoint for eval-break.
+	(continue to breakpoint: eval-break, info locals): New test.
+	(python execfile ('py-prettyprint.py')): Move it from here.
+	* gdb.python/py-prettyprint.py (class pp_eval_type): New.
+	(register_pretty_printers): Register pp_eval_type.
+
+2012-07-15  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix a testcase regression by me.
+	* gdb.dwarf2/fission-reread.S: Fix two DW_FORM_data8 to be
+	DW_FORM_data4.
+
+2012-07-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	    Doug Evans  <dje at google.com>
+
+	* gdb.dwarf2/dw2-minsym-in-cu.S: New file.
+	* gdb.dwarf2/dw2-minsym-in-cu.exp: New file.
+
+2012-07-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix gdbserver run regression.
+	* gdb.trace/disconnected-tracing.exp (executabel): Fix typo.
+
+2012-07-12  Tom Tromey  <tromey at redhat.com>
+
+	* lib/gdb.exp (standard_testfile): Don't declare objdir.
+	(clean_restart): Likewise.
+	(core_find): Use standard_output_file.
+
+2012-07-12  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.dwarf2/dup-psym.exp: Use prepare_for_testing_full.
+	* gdb.dwarf2/dw2-anonymous-func.exp: Use
+	prepare_for_testing_full.
+	* gdb.dwarf2/dw2-basic.exp: Use prepare_for_testing_full.
+	* gdb.dwarf2/dw2-compressed.exp: Use prepare_for_testing_full.
+	* gdb.dwarf2/dw2-const.exp: Use prepare_for_testing_full.
+	* gdb.dwarf2/dw2-cu-size.exp: Use prepare_for_testing_full.
+	* gdb.dwarf2/dw2-intercu.exp: Use prepare_for_testing_full.
+	* gdb.dwarf2/dw2-intermix.exp: Use prepare_for_testing_full.
+	* gdb.dwarf2/dw2-linkage-name-trust.exp: Use
+	prepare_for_testing_full.
+	* gdb.dwarf2/dw2-producer.exp: Use prepare_for_testing_full.
+	* gdb.dwarf2/dw2-ref-missing-frame.exp: Use
+	prepare_for_testing_full.
+	* gdb.dwarf2/dw2-restore.exp: Use prepare_for_testing_full.
+	* gdb.dwarf2/dw2-strp.exp: Use prepare_for_testing_full.
+	* gdb.dwarf2/mac-fileno.exp: Use prepare_for_testing_full.
+
+2012-07-12  Tom Tromey  <tromey at redhat.com>
+
+	* lib/gdb.exp (build_executable_from_specs): New proc, from
+	build_executable.
+	(build_executable): Use it.
+	(prepare_for_testing_full): New proc.
+
+2012-07-11  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.reverse/break-precsave.exp: Use standard_output_file.
+	* gdb.reverse/consecutive-precsave.exp: Use standard_output_file.
+	* gdb.reverse/finish-precsave.exp: Use standard_output_file.
+	* gdb.reverse/i386-precsave.exp: Use standard_output_file.
+	* gdb.reverse/machinestate-precsave.exp: Use standard_output_file.
+	* gdb.reverse/sigall-precsave.exp: Use standard_output_file.
+	* gdb.reverse/solib-precsave.exp: Use standard_output_file.
+	* gdb.reverse/step-precsave.exp: Use standard_output_file.
+	* gdb.reverse/until-precsave.exp: Use standard_output_file.
+	* gdb.reverse/watch-precsave.exp: Use standard_output_file.
+
+2012-07-10  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.mi/dw2-ref-missing-frame.exp: Use standard_testfile,
+	standard_output_file.
+	* gdb.mi/gdb2549.exp: Use standard_testfile.
+	* gdb.mi/gdb669.exp: Use standard_testfile.
+	* gdb.mi/gdb701.exp: Use standard_testfile.
+	* gdb.mi/gdb792.exp: Use standard_testfile.
+	* gdb.mi/mi-async.exp: Use standard_testfile.
+	* gdb.mi/mi-basics.exp: Use standard_testfile.
+	* gdb.mi/mi-break.exp: Use standard_testfile.
+	* gdb.mi/mi-cli.exp: Use standard_testfile.
+	* gdb.mi/mi-console.exp: Use standard_testfile.
+	* gdb.mi/mi-disassemble.exp: Use standard_testfile.
+	* gdb.mi/mi-eval.exp: Use standard_testfile.
+	* gdb.mi/mi-file-transfer.exp: Use standard_testfile.
+	* gdb.mi/mi-file.exp: Use standard_testfile.
+	* gdb.mi/mi-inheritance-syntax-error.exp: Use standard_testfile.
+	* gdb.mi/mi-logging.exp: Use standard_testfile.
+	* gdb.mi/mi-nonstop-exit.exp: Use standard_testfile.
+	* gdb.mi/mi-nonstop.exp: Use standard_testfile.
+	* gdb.mi/mi-ns-stale-regcache.exp: Use standard_testfile.
+	* gdb.mi/mi-nsintrall.exp: Use standard_testfile.
+	* gdb.mi/mi-nsmoribund.exp: Use standard_testfile.
+	* gdb.mi/mi-nsthrexec.exp: Use standard_testfile.
+	* gdb.mi/mi-pending.exp: Use standard_testfile,
+	standard_output_file.
+	* gdb.mi/mi-pthreads.exp: Use standard_testfile.
+	* gdb.mi/mi-read-memory.exp: Use standard_testfile.
+	* gdb.mi/mi-regs.exp: Use standard_testfile.
+	* gdb.mi/mi-return.exp: Use standard_testfile.
+	* gdb.mi/mi-reverse.exp: Use standard_testfile.
+	* gdb.mi/mi-simplerun.exp: Use standard_testfile.
+	* gdb.mi/mi-solib.exp: Use standard_testfile,
+	standard_output_file.
+	* gdb.mi/mi-stack.exp: Use standard_testfile.
+	* gdb.mi/mi-stepi.exp: Use standard_testfile.
+	* gdb.mi/mi-stepn.exp: Use standard_testfile.
+	* gdb.mi/mi-syn-frame.exp: Use standard_testfile.
+	* gdb.mi/mi-until.exp: Use standard_testfile.
+	* gdb.mi/mi-var-block.exp: Use standard_testfile.
+	* gdb.mi/mi-var-child-f.exp: Use standard_testfile.
+	* gdb.mi/mi-var-child.exp: Use standard_testfile.
+	* gdb.mi/mi-var-cmd.exp: Use standard_testfile.
+	* gdb.mi/mi-var-cp.exp: Use standard_testfile.
+	* gdb.mi/mi-var-display.exp: Use standard_testfile.
+	* gdb.mi/mi-var-invalidate.exp: Use standard_testfile,
+	standard_output_file.
+	* gdb.mi/mi-var-rtti.exp: Use standard_testfile.
+	* gdb.mi/mi-watch-nonstop.exp: Use standard_testfile.
+	* gdb.mi/mi-watch.exp: Use standard_testfile.
+	* gdb.mi/mi2-amd64-entry-value.exp: Use standard_testfile.
+	* gdb.mi/mi2-basics.exp: Use standard_testfile.
+	* gdb.mi/mi2-break.exp: Use standard_testfile.
+	* gdb.mi/mi2-cli.exp: Use standard_testfile.
+	* gdb.mi/mi2-console.exp: Use standard_testfile.
+	* gdb.mi/mi2-disassemble.exp: Use standard_testfile.
+	* gdb.mi/mi2-eval.exp: Use standard_testfile.
+	* gdb.mi/mi2-file.exp: Use standard_testfile.
+	* gdb.mi/mi2-pthreads.exp: Use standard_testfile.
+	* gdb.mi/mi2-read-memory.exp: Use standard_testfile.
+	* gdb.mi/mi2-regs.exp: Use standard_testfile.
+	* gdb.mi/mi2-return.exp: Use standard_testfile.
+	* gdb.mi/mi2-simplerun.exp: Use standard_testfile.
+	* gdb.mi/mi2-stack.exp: Use standard_testfile.
+	* gdb.mi/mi2-stepi.exp: Use standard_testfile.
+	* gdb.mi/mi2-syn-frame.exp: Use standard_testfile.
+	* gdb.mi/mi2-until.exp: Use standard_testfile.
+	* gdb.mi/mi2-var-block.exp: Use standard_testfile.
+	* gdb.mi/mi2-var-child.exp: Use standard_testfile.
+	* gdb.mi/mi2-var-cmd.exp: Use standard_testfile.
+	* gdb.mi/mi2-var-display.exp: Use standard_testfile.
+	* gdb.mi/mi2-watch.exp: Use standard_testfile.
+
+2012-07-10  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.cp/abstract-origin.exp: Use standard_testfile.
+	* gdb.cp/ambiguous.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/annota2.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/annota3.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/anon-ns.exp: Use standard_testfile.
+	* gdb.cp/anon-struct.exp: Use standard_testfile.
+	* gdb.cp/anon-union.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/arg-reference.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/bool.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/breakpoint.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/bs15503.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/call-c.exp: Use standard_testfile, clean_restart,
+	standard_output_file.
+	* gdb.cp/casts.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/class2.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/classes.exp: Use standard_testfile, prepare_for_testing.
+	(test_static_members): Update.
+	* gdb.cp/cmpd-minsyms.exp: Use standard_testfile.
+	* gdb.cp/converts.exp: Use standard_testfile.
+	* gdb.cp/cp-relocate.exp: Use standard_testfile.
+	* gdb.cp/cpcompletion.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/cpexprs.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/cplabel.exp: Use standard_testfile.
+	* gdb.cp/cplusfuncs.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/ctti.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/derivation.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/destrprint.exp: Use standard_testfile.
+	* gdb.cp/dispcxx.exp: Use standard_testfile.
+	* gdb.cp/exception.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/expand-psymtabs-cxx.exp: Use standard_testfile.
+	* gdb.cp/extern-c.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/formatted-ref.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/fpointer.exp: Use standard_testfile.
+	* gdb.cp/gdb1355.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/gdb2384.exp: Use standard_testfile, clean_restart,
+	standard_output_file.
+	* gdb.cp/gdb2495.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/hang.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/infcall-dlopen.exp: Use standard_testfile,
+	standard_output_file.
+	* gdb.cp/inherit.exp: Use standard_testfile, prepare_for_testing.
+	(do_tests): Update.
+	* gdb.cp/koenig.exp: Use standard_testfile.
+	* gdb.cp/local.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/m-data.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/m-static.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/mb-ctor.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/mb-inline.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/mb-templates.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/member-ptr.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/meth-typedefs.exp: Use standard_testfile.
+	* gdb.cp/method.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/method2.exp: Use standard_testfile.
+	* gdb.cp/minsym-fallback.exp: Use standard_testfile,
+	standard_output_file.
+	* gdb.cp/misc.exp: Use standard_testfile, prepare_for_testing.
+	(do_tests): Update.
+	* gdb.cp/namespace-enum.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/namespace-nested-import.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/namespace.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/nextoverthrow.exp: Use standard_testfile.
+	* gdb.cp/no-dmgl-verbose.exp: Use standard_testfile.
+	* gdb.cp/nsdecl.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/nsimport.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/nsnested.exp: Use standard_testfile.
+	* gdb.cp/nsnoimports.exp: Use standard_testfile.
+	* gdb.cp/nsrecurs.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/nsstress.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/nsusing.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/operator.exp: Use standard_testfile.
+	* gdb.cp/oranking.exp: Use standard_testfile.
+	* gdb.cp/overload-const.exp: Use standard_testfile.
+	* gdb.cp/overload.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/ovldbreak.exp: Use standard_testfile.
+	* gdb.cp/ovsrch.exp: Use standard_testfile.
+	* gdb.cp/paren-type.exp: Use standard_testfile.
+	* gdb.cp/pass-by-ref.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/pr-1023.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/pr-1210.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/pr-574.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/pr10687.exp: Use standard_testfile, clean_restart.
+	* gdb.cp/pr10728.exp: Use standard_testfile,
+	standard_output_file.
+	* gdb.cp/pr12028.exp: Use standard_testfile.
+	* gdb.cp/pr9067.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/pr9167.exp: Use standard_testfile.
+	* gdb.cp/pr9631.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/printmethod.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/psmang.exp: Use standard_testfile, clean_restart.
+	* gdb.cp/psymtab-parameter.exp: Use standard_testfile.
+	* gdb.cp/ptype-cv-cp.exp: Use standard_testfile.
+	* gdb.cp/re-set-overloaded.exp: Use standard_testfile,
+	standard_output_file.
+	* gdb.cp/readnow-language.exp: Use standard_testfile.
+	* gdb.cp/ref-params.exp: Use standard_testfile, build_executable.
+	(gdb_start_again): Use clean_restart.
+	* gdb.cp/ref-types.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/rtti.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/shadow.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/smartp.exp: Use standard_testfile.
+	* gdb.cp/static-method.exp: Use standard_testfile.
+	* gdb.cp/static-print-quit.exp: Use standard_testfile.
+	* gdb.cp/temargs.exp: Use standard_testfile.
+	* gdb.cp/templates.exp: Use standard_testfile,
+	prepare_for_testing.
+	(do_tests): Update.
+	* gdb.cp/try_catch.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/typedef-operator.exp: Use standard_testfile.
+	* gdb.cp/userdef.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.cp/virtbase.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.cp/virtfunc.exp: Use standard_testfile,
+	prepare_for_testing.
+	(do_tests): Update.
+	* gdb.cp/virtfunc2.exp: Use standard_testfile,
+	prepare_for_testing.
+
+2012-07-10  Tom Tromey  <tromey at redhat.com>
+
+	* lib/gdb.exp (standard_testfile): Unset output variables from
+	earlier invocations.
+
+2012-07-10  Yao Qi  <yao at codesourcery.com>
+
+	* gdb.mi/gdb2549.exp: Remove -DFAKEARGV from compilation flags.
+	* gdb.mi/mi-async.exp, gdb.mi/mi-basics.exp: Likewise.
+	* gdb.mi/mi-break.exp, gdb.mi/mi-cli.exp: Likewise.
+	* gdb.mi/mi-console.exp, gdb.mi/mi-disassemble.exp: Likewise.
+	* gdb.mi/mi-eval.exp, gdb.mi/mi-file.exp: Likewise.
+	* gdb.mi/mi-read-memory.exp, gdb.mi/mi-regs.exp: Likewise.
+	* gdb.mi/mi-return.exp, gdb.mi/mi-reverse.exp: Likewise.
+	* gdb.mi/mi-simplerun.exp, gdb.mi/mi-stack.exp: Likewise.
+	* gdb.mi/mi-stepi.exp, gdb.mi/mi-syn-frame.exp: Likewise.
+	* gdb.mi/mi-until.exp, gdb.mi/mi-var-block.exp: Likewise.
+	* gdb.mi/mi-var-child.exp, gdb.mi/mi-var-cmd.exp: Likewise.
+	* gdb.mi/mi-var-display.exp: Likewise.
+	* gdb.mi/mi-var-invalidate.exp: Likewise.
+	* gdb.mi/mi-watch.exp, gdb.mi/mi2-basics.exp: Likewise.
+	* gdb.mi/mi2-break.exp, gdb.mi/mi2-cli.exp: Likewise.
+	* gdb.mi/mi2-console.exp: Likewise.
+	* gdb.mi/mi2-disassemble.exp: Likewise.
+	* gdb.mi/mi2-eval.exp, gdb.mi/mi2-file.exp: Likewise.
+	* gdb.mi/mi2-read-memory.exp: Likewise.
+	* gdb.mi/mi2-regs.exp, gdb.mi/mi2-return.exp: Likewise.
+	* gdb.mi/mi2-simplerun.exp: Likewise.
+	* gdb.mi/mi2-stack.exp, gdb.mi/mi2-stepi.exp: Likewise.
+	* gdb.mi/mi2-syn-frame.exp: Likewise.
+	* gdb.mi/mi2-until.exp, gdb.mi/mi2-var-block.exp: Likewise.
+	* gdb.mi/mi2-var-child.exp, gdb.mi/mi2-var-cmd.exp: Likewise.
+	* gdb.mi/mi2-var-display.exp, gdb.mi/mi2-watch.exp: Likewise.
+
+2012-07-09  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.base/whatis.exp: Add error checks for improper 'void' uses.
+	* gdb.base/callfuncs.exp: Add cast-based test.
+	* gdb.base/callfuncs.c (voidfunc): New function.
+
+2012-07-08  Doug Evans  <dje at google.com>
+
+	* gdb.dwarf2/dw4-sig-type-unused.S: Fix typo.
+
+2012-07-07  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix XFAIL compatibility with old i386 systems.
+	* gdb.base/stale-infcall.exp (test system longjmp tracking support):
+	Check also 'Cannot insert breakpoint 0'.
+
+2012-07-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	PR 14321
+	* gdb.base/find.exp
+	(find int64_search_buf, +64/8*100, int64_search_buf): New test.
+
+2012-07-06  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.base/whatis.exp: Add test.
+
+2012-07-06  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.base/whatis.exp: Add regression test.
+
+2012-07-06  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.base/whatis.exp: Add tests.
+
+2012-07-04  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	PR 12649
+	* gdb.base/dprintf.exp (Set dprintf style to agent): Add missing
+	gdb_test_multiple $gdb_prompt terminator.
+
+2012-07-04  Pedro Alves  <palves at redhat.com>
+
+	* gdb.mi/mi-reverse.exp: Use supports_reverse and
+	supports_process_record.
+
+2012-07-04  Pedro Alves  <palves at redhat.com>
+
+	* gdb.ada/packed_tagged/comp_bug.adb: Convert to unix text line
+	endings.
+	* gdb.mi/mi-reverse.exp: Convert to unix text line endings.
+
+2012-07-03  Stan Shebs  <stan at codesourcery.com>
+
+	* gdb.base/info-os.c (main): Retry resource acquisition until an
+	available one is found.
+	* gdb.base/info-os.exp: Collect resource keys from the program
+	and use them in matching.
+
+2012-07-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.threads/gcore-thread.exp: Remove variable libthread_db_seen.
+	Wrap the test into loop for corefile and core0file.
+
+2012-07-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.dwarf2/fission-reread.S: Remove .section attributes.
+	Change CU pointer size to 4 bytes, adjust .8byte to .4byte.  Remove
+	.note.GNU-stack.
+
+	* gdb.dwarf2/fission-reread.S: Change # comments to /* */ comments.
+
+2012-07-02  Sergio Durigan Junior  <sergiodj at redhat.com>
+
+	* gdb.base/help.exp (help b, help br, help bre, help brea, help
+	break): Include help message for the new `-probe' and `-probe-stap'
+	options.
+
+2012-07-02  Stan Shebs  <stan at codesourcery.com>
+
+	* gdb.base/dprintf.exp: Add agent style tests.
+
+2012-07-02  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.base/stale-infcall.c (infcall): New label test-next.
+	(main): New labels test-pass and test-fail.
+	* gdb.base/stale-infcall.exp: Continue to test-next.  Put breakpoint
+	$test_fail_bpnum to test-fail.
+	(test system longjmp tracking support): New test.
+	Delete $test_fail_bpnum.
+	* lib/gdb.exp (gdb_continue_to_breakpoint): Accept also Temporary
+	breakpoint.
+
+2012-06-30  Doug Evans  <dje at google.com>
+
+	* gdb.dwarf2/fission-reread.S: New file.
+	* gdb.dwarf2/fission-reread.exp: New file.
+
+2012-06-28  Stan Shebs  <stan at codesourcery.com>
+
+	* gdb.mi/mi-logging.exp: New file.
+
+2012-06-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	    Pedro Alves  <palves at redhat.com>
+
+	* gdb.threads/siginfo-threads.exp: New file.
+	* gdb.threads/siginfo-threads.c: New file.
+	* gdb.threads/sigstep-threads.exp: New file.
+	* gdb.threads/sigstep-threads.c: New file.
+
+2012-06-28  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.go/package.exp: Partially revert earlier patch; use
+	gdb_compile again.  Use standard_output_file.
+
+2012-06-27  Doug Evans  <dje at google.com>
+
+	* gdb.dwarf2/fission-base.c: New file.
+	* gdb.dwarf2/fission-base.S: New file.
+	* gdb.dwarf2/fission-base.exp: New file.
+
+2012-06-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.dwarf2/callframecfa.exp: Replace $testname by $testfile.
+
+2012-06-27  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.base/macscp1.c (macscp_expr): Add breakpoint comment.
+	* gdb.base/macscp.exp (maybe_kfail): Add test for macro scope.
+
+2012-06-27  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.dwarf2/pr10770.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-var-zero-addr.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-param-error.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-op-call.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-inline-param.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.dwarf2/dw2-inline-break.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-ifort-parameter.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-cp-infcall-ref-static.exp: Use
+	standard_testfile.
+	* gdb.dwarf2/dw2-case-insensitive.exp: Use standard_testfile.
+	* gdb.dwarf2/dw4-sig-types.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-objfile-overlap.exp: Use standard_testfile.
+	* gdb.dwarf2/callframecfa.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.dwarf2/dup-psym.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-ada-ffffffff.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-anonymous-func.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-bad-parameter-type.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-basic.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-compressed.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-const.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-cu-size.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-double-set-die-type.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-empty-namespace.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-empty-pc-range.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-filename.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-icc-opaque.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-inheritance.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-intercu.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-intermix.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-linkage-name-trust.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-modula2-self-type.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-namespaceless-anonymous.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-op-stack-value.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-producer.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-ranges.exp: Use standard_testfile,
+	standard_output_file.
+	* gdb.dwarf2/dw2-ref-missing-frame.exp: Use standard_testfile,
+	standard_output_file.
+	* gdb.dwarf2/dw2-restore.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-simple-locdesc.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-skip-prologue.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-stack-boundary.exp: Use standard_testfile.
+	* gdb.dwarf2/dw2-strp.exp: Use standard_testfile.
+	* gdb.dwarf2/dw4-sig-type-unused.exp: Use standard_testfile.
+	* gdb.dwarf2/implptr-64bit.exp: Use standard_testfile.
+	* gdb.dwarf2/implptr-optimized-out.exp: Use standard_testfile.
+	* gdb.dwarf2/implptr.exp: Use standard_testfile.
+	* gdb.dwarf2/mac-fileno.exp: Use standard_testfile.
+	* gdb.dwarf2/member-ptr-forwardref.exp: Use standard_testfile.
+	* gdb.dwarf2/pieces.exp: Use standard_testfile.
+	* gdb.dwarf2/pr11465.exp: Use standard_testfile.
+	* gdb.dwarf2/pr13961.exp: Use standard_testfile.
+	* gdb.dwarf2/valop.exp: Use standard_testfile,
+	prepare_for_testing.
+
+2012-06-27  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.python/python.exp: Fix regexps in pagination tests.
+
+2012-06-26  Siva Chandra Reddy  <sivachandra at google.com>
+
+	* gdb.python/py-symtab.exp: Add tests to test the new attribute
+	'last' of gdb.Symtab_and_line.
+	* gdb.python/py-symbol.c: Move break point comment to enable
+	testing of gdb.Symtab_and_line.last.
+
+2012-06-26  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.threads/step.c: Remove.
+	* gdb.threads/step.exp: Remove.
+	* gdb.threads/step2.exp: Remove.
+
+2012-06-26  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.threads/watchpoint-fork.exp (test): Use
+	standard_output_file.  Don't declare objdir.
+	* gdb.threads/attach-into-signal.exp: Use standard_testfile,
+	standard_output_file.
+	* gdb.threads/attach-stopped.exp: Use standard_testfile.
+	* gdb.threads/bp_in_thread.exp: Use standard_testfile,
+	clean_restart.  Remove incdir.
+	* gdb.threads/corethreads.exp: Use standard_testfile.
+	* gdb.threads/execl.exp: Use standard_testfile,
+	standard_output_file, clean_restart.
+	* gdb.threads/fork-child-threads.exp: Use standard_testfile,
+	clean_restart.
+	* gdb.threads/fork-thread-pending.exp: Use standard_testfile,
+	clean_restart.
+	* gdb.threads/gcore-thread.exp: Use standard_testfile.  Remove
+	incdir.
+	* gdb.threads/hand-call-in-threads.exp: Use standard_testfile,
+	clean_restart.  Remove incdir.
+	* gdb.threads/ia64-sigill.exp: Use standard_testfile.
+	* gdb.threads/interrupted-hand-call.exp: Use standard_testfile,
+	clean_restart.  Remove incdir.
+	* gdb.threads/killed.exp: Use standard_testfile, clean_restart.
+	Remove incdir.
+	* gdb.threads/leader-exit.exp: Use standard_testfile.
+	* gdb.threads/linux-dp.exp: Use standard_testfile, clean_restart.
+	* gdb.threads/local-watch-wrong-thread.exp: Use standard_testfile,
+	clean_restart.
+	* gdb.threads/manythreads.exp: Use standard_testfile,
+	clean_restart.  Remove incdir.
+	* gdb.threads/multi-create.exp: Use standard_testfile,
+	clean_restart.
+	* gdb.threads/no-unwaited-for-left.exp: Use standard_testfile.
+	* gdb.threads/non-ldr-exc-1.exp: Use standard_testfile.
+	* gdb.threads/non-ldr-exc-2.exp: Use standard_testfile.
+	* gdb.threads/non-ldr-exc-3.exp: Use standard_testfile.
+	* gdb.threads/non-ldr-exc-4.exp: Use standard_testfile.
+	* gdb.threads/pending-step.exp: Use standard_testfile,
+	clean_restart.  Remove incdir.
+	* gdb.threads/print-threads.exp: Use standard_testfile,
+	clean_restart.  Remove incdir.
+	* gdb.threads/pthread_cond_wait.exp: Use standard_testfile,
+	clean_restart.  Remove incdir.
+	* gdb.threads/pthreads.exp: Use standard_testfile, clean_restart.
+	Remove incdir.
+	* gdb.threads/schedlock.exp: Use standard_testfile.  Remove
+	incdir.
+	* gdb.threads/sigthread.exp: Use standard_testfile,
+	clean_restart.
+	* gdb.threads/staticthreads.exp: Use standard_testfile,
+	clean_restart.  Remove incdir.
+	* gdb.threads/switch-threads.exp: Use standard_testfile,
+	clean_restart.  Remove incdir.
+	* gdb.threads/thread-execl.exp: Use standard_testfile,
+	clean_restart.  Remove incdir.
+	* gdb.threads/thread-find.exp: Use standard_testfile,
+	clean_restart.
+	* gdb.threads/thread-specific.exp: Use standard_testfile,
+	clean_restart.  Remove incdir.
+	* gdb.threads/thread-unwindonsignal.exp: Use standard_testfile,
+	clean_restart.  Remove incdir.
+	* gdb.threads/thread_check.exp: Use standard_testfile,
+	clean_restart.  Remove incdir.
+	* gdb.threads/thread_events.exp: Use standard_testfile.  Remove
+	incdir.
+	* gdb.threads/threadapply.exp: Use standard_testfile,
+	clean_restart.  Remove incdir.
+	* gdb.threads/threxit-hop-specific.exp: Use standard_testfile,
+	clean_restart.  Remove incdir.
+	* gdb.threads/tls-nodebug.exp: Use standard_testfile,
+	clean_restart.
+	* gdb.threads/tls-shared.exp: Use standard_testfile,
+	clean_restart, standard_output_file.
+	* gdb.threads/tls-var.exp: Use standard_testfile,
+	standard_output_file.
+	* gdb.threads/tls.exp: Use standard_testfile, clean_restart.
+	Remove incdir.
+	* gdb.threads/watchthreads-reorder.exp: Use standard_testfile.
+	* gdb.threads/watchthreads.exp: Use standard_testfile.  Remove
+	incdir.
+	* gdb.threads/watchthreads2.exp: Use standard_testfile,
+	clean_restart.  Remove incdir.
+
+2012-06-26  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.trace/actions.exp: Use standard_testfile.
+	* gdb.trace/ax.exp: Use standard_testfile.
+	* gdb.trace/backtrace.exp: Use standard_testfile.
+	* gdb.trace/change-loc.exp: Use standard_testfile.
+	* gdb.trace/circ.exp: Use standard_testfile, prepare_for_testing.
+	* gdb.trace/collection.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.trace/deltrace.exp: Use standard_testfile.
+	* gdb.trace/disconnected-tracing.exp: Use standard_testfile.
+	* gdb.trace/ftrace.exp: Use standard_testfile.
+	* gdb.trace/infotrace.exp: Use standard_testfile.
+	* gdb.trace/packetlen.exp: Use standard_testfile.
+	* gdb.trace/passc-dyn.exp: Use standard_testfile.
+	* gdb.trace/passcount.exp: Use standard_testfile.
+	* gdb.trace/pending.exp: Use standard_testfile.
+	* gdb.trace/report.exp: Use standard_testfile.
+	* gdb.trace/save-trace.exp: Use standard_testfile.
+	* gdb.trace/stap-trace.exp: Use standard_testfile.
+	* gdb.trace/status-stop.exp: Use standard_testfile.
+	* gdb.trace/strace.exp: Use standard_testfile.
+	* gdb.trace/tfile.exp: Use standard_testfile.
+	* gdb.trace/tfind.exp: Use standard_testfile.
+	* gdb.trace/trace-break.exp: Use standard_testfile.
+	* gdb.trace/trace-mt.exp: Use standard_testfile.
+	* gdb.trace/tracecmd.exp: Use standard_testfile.
+	* gdb.trace/tspeed.exp: Use standard_testfile.
+	* gdb.trace/tstatus.exp: Use standard_testfile.
+	* gdb.trace/tsv.exp: Use standard_testfile.
+	* gdb.trace/unavailable.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.trace/while-dyn.exp: Use standard_testfile.
+	* gdb.trace/while-stepping.exp: Use standard_testfile.
+
+2012-06-26  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.reverse/break-precsave.exp: Use standard_testfile.
+	* gdb.reverse/break-reverse.exp: Use standard_testfile.
+	* gdb.reverse/consecutive-precsave.exp: Use standard_testfile.
+	* gdb.reverse/consecutive-reverse.exp: Use standard_testfile.
+	* gdb.reverse/finish-precsave.exp: Use standard_testfile.
+	* gdb.reverse/finish-reverse-bkpt.exp: Use standard_testfile.
+	* gdb.reverse/finish-reverse.exp: Use standard_testfile.
+	* gdb.reverse/i386-precsave.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.reverse/i386-reverse.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.reverse/i386-sse-reverse.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.reverse/i387-env-reverse.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.reverse/i387-stack-reverse.exp: Use standard_testfile,
+	prepare_for_testing
+	* gdb.reverse/machinestate-precsave.exp: Use standard_testfile.
+	* gdb.reverse/machinestate.exp: Use standard_testfile.
+	* gdb.reverse/next-reverse-bkpt-over-sr.exp: Use standard_testfile.
+	* gdb.reverse/sigall-precsave.exp: Use standard_testfile,
+	build_executable.
+	* gdb.reverse/sigall-reverse.exp: Use standard_testfile,
+	build_executable.
+	* gdb.reverse/solib-precsave.exp: Use standard_testfile,
+	standard_output_file.
+	* gdb.reverse/solib-reverse.exp: Use standard_testfile,
+	standard_output_file.
+	* gdb.reverse/step-precsave.exp: Use standard_testfile.
+	* gdb.reverse/step-reverse.exp: Use standard_testfile.
+	* gdb.reverse/until-precsave.exp: Use standard_testfile.
+	* gdb.reverse/until-reverse.exp: Use standard_testfile.
+	* gdb.reverse/watch-precsave.exp: Use standard_testfile.
+	* gdb.reverse/watch-reverse.exp: Use standard_testfile.
+
+2012-06-26  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.stabs/weird.exp: Remove directory-checking code.  Use
+	standard_output_file.
+	* gdb.stabs/exclfwd.exp: Use standard_testfile,
+	prepare_for_testing.  Remove directory-checking code.
+
+2012-06-25  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.multi/watchpoint-multi.exp: Use standard_testfile.
+	* gdb.multi/bkpt-multi-exec.exp: Use standard_output_file.  Use
+	build_executable, not prepare_for_testing.
+	* gdb.multi/base.exp: Use standard_output_file.  Use
+	build_executable,  not prepare_for_testing.
+
+2012-06-25  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.fortran/subarray.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.fortran/multi-dim.exp: Use standard_testfile.
+	* gdb.fortran/module.exp: Use standard_testfile.
+	* gdb.fortran/logical.exp: Use standard_testfile.
+	* gdb.fortran/library-module.exp: Use standard_testfile,
+	standard_output_file.
+	* gdb.fortran/derived-type.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.fortran/complex.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.fortran/charset.exp: Use standard_testfile.
+	* gdb.fortran/array-element.exp: Use standard_testfile,
+	prepare_for_testing.
+
+2012-06-25  Keith Seitz  <keiths at redhat.com>
+
+	* gdb.mi/mi-break.exp (test_rbreak_creation_and_listing):
+	Change rbreak-related tests to KFAIL and add bugzilla numbers.
+
+2012-06-25  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.pascal/integers.exp: Use standard_testfile, clean_restart.
+	* gdb.pascal/hello.exp: Use standard_testfile, clean_restart.
+	* gdb.pascal/gdb11492.exp: Use standard_testfile, clean_restart.
+	* gdb.pascal/floats.exp: Use standard_testfile, clean_restart.
+
+2012-06-25  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.linespec/ls-errs.exp: Use standard_testfile.
+	* gdb.linespec/ls-dollar.exp: Use standard_testfile.
+	* gdb.linespec/linespec.exp: Use standard_testfile.
+
+2012-06-25  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.modula2/unbounded-array.exp: Use standard_testfile,
+	prepare_for_testing.
+
+2012-06-25  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.opt/clobbered-registers-O2.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.opt/inline-break.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.opt/inline-bt.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.opt/inline-cmds.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.opt/inline-locals.exp: Use standard_testfile,
+	prepare_for_testing.
+
+2012-06-25  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.asm/asm-source.exp: Use standard_output_file,
+	standard_testfile.  Construct .o files in proper subdir.
+
+2012-06-25  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.server/ext-attach.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.server/ext-run.exp: Use standard_testfile,
+	build_executable.
+	* gdb.server/file-transfer.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.server/server-exec-info.exp: Use standard_testfile.
+	* gdb.server/server-mon.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.server/server-run.exp: Use standard_testfile,
+	build_executable.
+	* gdb.server/solib-list.exp: Use standard_testfile,
+	standard_output_file.
+
+2012-06-25  Tom Tromey  <tromey at redhat.com>
+
+	* lib/gdb.exp (standard_output_file): Use "file join".
+	* gdb.go/chan.exp: Use standard_testfile.
+	* gdb.go/handcall.exp: Use standard_testfile.
+	* gdb.go/hello.exp: Use standard_testfile.
+	* gdb.integers/chan.exp: Use standard_testfile.
+	* gdb.go/methods.exp: Use standard_testfile.
+	* gdb.go/package.exp: Use standard_testfile.
+	* gdb.go/strings.exp: Use standard_testfile.
+	* gdb.go/types.exp: Use standard_testfile.
+	* gdb.go/unsafe.exp: Use standard_testfile.
+
+2012-06-25  Greta Yorsh  <greta.yorsh at arm.com>
+
+	* gdb.arch/arm-disp-step.S: Fix use of .global directives.
+
+2012-06-24  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix regression by the previous commit.
+	* gdb.python/lib-types.exp: Add c++ to the compilation flags.
+
+2012-06-22  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.python/lib-types.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.python/py-block.exp: Use standard_testfile.
+	* gdb.python/py-breakpoint.exp: Use standard_testfile.
+	* gdb.python/py-events.exp: Use standard_testfile,
+	standard_output_file.
+	* gdb.python/py-evsignal.exp: Use standard_testfile.
+	* gdb.python/py-evethreads.exp: Use standard_testfile.
+	* gdb.python/py-explore-cc.exp: Use standard_testfile.
+	* gdb.python/py-explore.exp: Use standard_testfile.
+	* gdb.python/py-finish-breakpoint.exp: Use standard_testfile,
+	standard_output_file.
+	* gdb.python/py-finish-breakpoint2.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.python/py-frame-inline.exp: Use standard_testfile.
+	* gdb.python/py-frame.exp: Use standard_testfile.
+	* gdb.python/py-inferior.exp: Use standard_testfile.
+	* gdb.python/py-infthread.exp: Use standard_testfile.
+	* gdb.python/py-mi.exp: Use standard_testfile.
+	* gdb.python/py-objfile-script.exp: Use standard_testfile,
+	build_executable.
+	* gdb.python/py-objfile.exp: Use standard_testfile.
+	* gdb.python/py-pp-maint.exp: Use standard_testfile,
+	prepare_for_testing.
+	* gdb.python/py-prettyprint.exp: Use standard_testfile.
+	* gdb.python/py-progspace.exp: Use standard_testfile,
+	build_executable.
+	* gdb.python/py-prompt.exp: Use standard_testfile,
+	build_executable.
+	* gdb.python/py-section-script.exp: Use standard_testfile,
+	build_executable.
+	* gdb.python/py-shared.exp: Use standard_testfile,
+	standard_output_file, clean_restart.
+	* gdb.python/py-symbol.exp: Use standard_output_file,
+	prepare_for_testing.
+	* gdb.python/py-symtab.exp: Use standard_output_file,
+	prepare_for_testing
+	* gdb.python/py-template.exp: Use standard_testfile.
+	* gdb.python/py-type.exp: Use standard_testfile.
+	* gdb.python/py-value-cc.exp: Use standard_testfile.
+	* gdb.python/py-value.exp: Use standard_testfile.
+	* gdb.python/python.exp: Use standard_testfile, build_executable.
+
+2012-06-22  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.objc/basicclass.exp: Use standard_testfile.
+	(do_objc_tests): Don't declare objdir.
+	* gdb.objc/nondebug.exp: Use standard_testfile.
+	(do_objc_tests): Don't declare objdir.
+	* gdb.objc/objcdecode.exp: Use standard_testfile.
+	(do_objc_tests): Don't declare objdir.
+
+2012-06-22  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.java/jmain.exp: Use standard_testfile.
+	* gdb.java/jmisc.exp: Use standard_testfile.
+	* gdb.java/jnpe.exp: Use standard_testfile.
+	* gdb.java/jprint.exp: Use standard_testfile.
+
+2012-06-22  Tom Tromey  <tromey at redhat.com>
+
+	* lib/gdb.exp (default_gdb_init): Set gdb_test_file_name.
+	(standard_output_file, standard_testfile): New procs.
+	(build_executable, clean_restart): Use standard_output_file.
+
+2012-06-22  Yao Qi  <yao at codesourcery.com>
+
+	* boards/native-gdbserver.exp: New proc ${board}_exec.
+	* boards/native-stdio-gdbserver.exp: Likewise.
+
+2012-06-21  Tom Tromey  <tromey at redhat.com>
+
+	* lib/gdb.exp (skip_altivec_tests, skip_vsx_tests)
+	(build_executable): Update.
+	(get_compiler_info): Remove 'binfile' argument.
+	* gdb.ada/arrayidx.exp: Update.
+	* gdb.ada/null_array.exp: Update.
+	* gdb.arch/altivec-abi.exp: Update.
+	* gdb.arch/altivec-regs.exp: Update.
+	* gdb.arch/amd64-byte.exp: Update.
+	* gdb.arch/amd64-dword.exp: Update.
+	* gdb.arch/amd64-word.exp: Update.
+	* gdb.arch/i386-avx.exp: Update.
+	* gdb.arch/i386-byte.exp: Update.
+	* gdb.arch/i386-sse.exp: Update.
+	* gdb.arch/i386-word.exp: Update.
+	* gdb.arch/ppc-dfp.exp: Update.
+	* gdb.arch/ppc-fp.exp: Update.
+	* gdb.arch/vsx-regs.exp: Update.
+	* gdb.base/all-bin.exp: Update.
+	* gdb.base/annota1.exp: Update.
+	* gdb.base/async.exp: Update.
+	* gdb.base/attach.exp: Update.
+	* gdb.base/break-interp.exp: Update.
+	* gdb.base/call-ar-st.exp: Update.
+	* gdb.base/call-rt-st.exp: Update.
+	* gdb.base/call-sc.exp: Update.
+	* gdb.base/callfuncs.exp: Update.
+	* gdb.base/catch-load.exp: Update.
+	* gdb.base/completion.exp: Update.
+	* gdb.base/complex.exp: Update.
+	* gdb.base/condbreak.exp: Update.
+	* gdb.base/consecutive.exp: Update.
+	* gdb.base/constvars.exp: Update.
+	* gdb.base/corefile.exp: Update.
+	* gdb.base/eval-skip.exp: Update.
+	* gdb.base/expand-psymtabs.exp: Update.
+	* gdb.base/exprs.exp: Update.
+	* gdb.base/fileio.exp: Update.
+	* gdb.base/fixsection.exp: Update.
+	* gdb.base/funcargs.exp: Update.
+	* gdb.base/gdb11530.exp: Update.
+	* gdb.base/gdb1555.exp: Update.
+	* gdb.base/gnu-ifunc.exp: Update.
+	* gdb.base/gnu_vector.exp: Update.
+	* gdb.base/info-macros.exp: Update.
+	* gdb.base/jit-simple.exp: Update.
+	* gdb.base/jit-so.exp: Update.
+	* gdb.base/jit.exp: Update.
+	* gdb.base/langs.exp: Update.
+	* gdb.base/list.exp: Update.
+	* gdb.base/logical.exp: Update.
+	* gdb.base/long_long.exp: Update.
+	* gdb.base/longjmp.exp: Update.
+	* gdb.base/macscp.exp: Update.
+	* gdb.base/mips_pro.exp: Update.
+	* gdb.base/miscexprs.exp: Update.
+	* gdb.base/morestack.exp: Update.
+	* gdb.base/nodebug.exp: Update.
+	* gdb.base/opaque.exp: Update.
+	* gdb.base/pc-fp.exp: Update.
+	* gdb.base/pending.exp: Update.
+	* gdb.base/permissions.exp: Update.
+	* gdb.base/pointers.exp: Update.
+	* gdb.base/prelink.exp: Update.
+	* gdb.base/printcmds.exp: Update.
+	* gdb.base/psymtab.exp: Update.
+	* gdb.base/ptype.exp: Update.
+	* gdb.base/relational.exp: Update.
+	* gdb.base/scope.exp: Update.
+	* gdb.base/setvar.exp: Update.
+	* gdb.base/shlib-call.exp: Update.
+	* gdb.base/shreloc.exp: Update.
+	* gdb.base/signals.exp: Update.
+	* gdb.base/sizeof.exp: Update.
+	* gdb.base/so-impl-ld.exp: Update.
+	* gdb.base/so-indr-cl.exp: Update.
+	* gdb.base/solib-disc.exp: Update.
+	* gdb.base/solib-display.exp: Update.
+	* gdb.base/solib-nodir.exp: Update.
+	* gdb.base/solib-overlap.exp: Update.
+	* gdb.base/solib-symbol.exp: Update.
+	* gdb.base/solib-weak.exp: Update.
+	* gdb.base/solib.exp: Update.
+	* gdb.base/store.exp: Update.
+	* gdb.base/structs.exp: Update.
+	* gdb.base/structs2.exp: Update.
+	* gdb.base/type-opaque.exp: Update.
+	* gdb.base/unload.exp: Update.
+	* gdb.base/varargs.exp: Update.
+	* gdb.base/volatile.exp: Update.
+	* gdb.base/watch_thread_num.exp: Update.
+	* gdb.base/watchpoint-solib.exp: Update.
+	* gdb.base/watchpoint.exp: Update.
+	* gdb.base/watchpoints.exp: Update.
+	* gdb.base/whatis.exp: Update.
+	* gdb.cell/arch.exp: Update.
+	* gdb.cell/break.exp: Update.
+	* gdb.cell/bt.exp: Update.
+	* gdb.cell/core.exp: Update.
+	* gdb.cell/data.exp: Update.
+	* gdb.cell/ea-cache.exp: Update.
+	* gdb.cell/f-regs.exp: Update.
+	* gdb.cell/fork.exp: Update.
+	* gdb.cell/gcore.exp: Update.
+	* gdb.cell/mem-access.exp: Update.
+	* gdb.cell/ptype.exp: Update.
+	* gdb.cell/registers.exp: Update.
+	* gdb.cell/sizeof.exp: Update.
+	* gdb.cell/solib-symbol.exp: Update.
+	* gdb.cell/solib.exp: Update.
+	* gdb.cp/ambiguous.exp: Update.
+	* gdb.cp/breakpoint.exp: Update.
+	* gdb.cp/bs15503.exp: Update.
+	* gdb.cp/casts.exp: Update.
+	* gdb.cp/class2.exp: Update.
+	* gdb.cp/cpexprs.exp: Update.
+	* gdb.cp/cplusfuncs.exp: Update.
+	* gdb.cp/ctti.exp: Update.
+	* gdb.cp/dispcxx.exp: Update.
+	* gdb.cp/gdb1355.exp: Update.
+	* gdb.cp/gdb2384.exp: Update.
+	* gdb.cp/gdb2495.exp: Update.
+	* gdb.cp/infcall-dlopen.exp: Update.
+	* gdb.cp/local.exp: Update.
+	* gdb.cp/m-data.exp: Update.
+	* gdb.cp/m-static.exp: Update.
+	* gdb.cp/mb-ctor.exp: Update.
+	* gdb.cp/mb-inline.exp: Update.
+	* gdb.cp/mb-templates.exp: Update.
+	* gdb.cp/member-ptr.exp: Update.
+	* gdb.cp/method.exp: Update.
+	* gdb.cp/namespace.exp: Update.
+	* gdb.cp/nextoverthrow.exp: Update.
+	* gdb.cp/nsdecl.exp: Update.
+	* gdb.cp/nsrecurs.exp: Update.
+	* gdb.cp/nsstress.exp: Update.
+	* gdb.cp/nsusing.exp: Update.
+	* gdb.cp/pr-1023.exp: Update.
+	* gdb.cp/pr-1210.exp: Update.
+	* gdb.cp/pr-574.exp: Update.
+	* gdb.cp/pr9631.exp: Update.
+	* gdb.cp/printmethod.exp: Update.
+	* gdb.cp/psmang.exp: Update.
+	* gdb.cp/re-set-overloaded.exp: Update.
+	* gdb.cp/rtti.exp: Update.
+	* gdb.cp/shadow.exp: Update.
+	* gdb.cp/templates.exp: Update.
+	* gdb.cp/try_catch.exp: Update.
+	* gdb.dwarf2/dw2-ranges.exp: Update.
+	* gdb.dwarf2/pr10770.exp: Update.
+	* gdb.fortran/library-module.exp: Update.
+	* gdb.hp/gdb.aCC/optimize.exp: Update.
+	* gdb.hp/gdb.aCC/watch-cmd.exp: Update.
+	* gdb.hp/gdb.base-hp/callfwmall.exp: Update.
+	* gdb.hp/gdb.base-hp/hwwatchbus.exp: Update.
+	* gdb.hp/gdb.base-hp/pxdb.exp: Update.
+	* gdb.hp/gdb.base-hp/sized-enum.exp: Update.
+	* gdb.hp/gdb.base-hp/so-thresh.exp: Update.
+	* gdb.hp/gdb.compat/xdb1.exp: Update.
+	* gdb.hp/gdb.compat/xdb2.exp: Update.
+	* gdb.hp/gdb.compat/xdb3.exp: Update.
+	* gdb.hp/gdb.defects/bs14602.exp: Update.
+	* gdb.hp/gdb.defects/solib-d.exp: Update.
+	* gdb.hp/gdb.objdbg/objdbg01.exp: Update.
+	* gdb.hp/gdb.objdbg/objdbg02.exp: Update.
+	* gdb.hp/gdb.objdbg/objdbg03.exp: Update.
+	* gdb.hp/gdb.objdbg/objdbg04.exp: Update.
+	* gdb.mi/gdb792.exp: Update.
+	* gdb.mi/mi-pending.exp: Update.
+	* gdb.mi/mi-solib.exp: Update.
+	* gdb.mi/mi-var-cp.exp: Update.
+	* gdb.opt/clobbered-registers-O2.exp: Update.
+	* gdb.opt/inline-bt.exp: Update.
+	* gdb.opt/inline-cmds.exp: Update.
+	* gdb.opt/inline-locals.exp: Update.
+	* gdb.python/py-events.exp: Update.
+	* gdb.python/py-finish-breakpoint.exp: Update.
+	* gdb.python/py-type.exp: Update.
+	* gdb.reverse/solib-precsave.exp: Update.
+	* gdb.reverse/solib-reverse.exp: Update.
+	* gdb.server/solib-list.exp: Update.
+	* gdb.stabs/weird.exp: Update.
+	* gdb.threads/attach-into-signal.exp: Update.
+	* gdb.threads/attach-stopped.exp: Update.
+	* gdb.threads/tls-shared.exp: Update.
+	* gdb.trace/change-loc.exp: Update.
+	* gdb.trace/strace.exp: Update.
+
+2012-06-19  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.base/whatis.exp: Add tests.
+
+2012-06-19  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.cp/m-static.cc (keepalive): New function.
+	(gnu_obj_1::method): Use it.
+
+2012-06-18  Doug Evans  <dje at google.com>
+
+	* gdb.base/info-fun.exp: New file.
+	* gdb.base/info-fun.c: New file.
+	* gdb.base/info-fun-solib.c: New file.
+
+2012-06-18  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Remove stale dummy frames.
+	* gdb.base/call-signal-resume.exp (maintenance print dummy-frames)
+	(maintenance info breakpoints): New tests.
+	* gdb.base/stale-infcall.c: New file.
+	* gdb.base/stale-infcall.exp: New file.
+
+2012-06-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.arch/amd64-entry-value-param.S: New file.
+	* gdb.arch/amd64-entry-value-param.c: New file.
+	* gdb.arch/amd64-entry-value-param.exp: New file.
+
+2012-06-15  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.cp/namespace.exp: Add "show lang" test.
+
+2012-06-15  Iain Sandoe <iain at codesourcery.com>
+
+	* gdb.base/list.exp (test_listsize): Remove $use_gdb_stub special
+	case. (top level): Use gdb_file_cmd instead of gdb_load.
+
+2012-06-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	PR tdep/14222
+	* gdb.arch/i386-sse-stack-align.S: New file.
+	* gdb.arch/i386-sse-stack-align.c: New file.
+	* gdb.arch/i386-sse-stack-align.exp: New file.
+
+2012-06-13  Keith Seitz  <keiths at redhat.com>
+
+	PR breakpoints/13798 and mi/11541
+	* gdb.linespec/ls-errs.exp: Add a few more tests for
+	filenames with spaces and colons.
+
+2012-06-13  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	PR c++/14177 - Fix parsing TYPENAME:: in parentheses.
+	* gdb.cp/cpexprs.cc (class CV, CV::i, ATTRIBUTE_USED, CV_f): New.
+	(test_function): Call CV_f.
+	* gdb.cp/cpexprs.exp (p 'CV::m(int)', p CV::m(int))
+	(p 'CV::m(int) const', p CV::m(int) const, p 'CV::m(int) volatile')
+	(p CV::m(int) volatile, p 'CV::m(int) const volatile')
+	(p CV::m(int) const volatile, p CV_f(int), p CV_f(CV::t))
+	(p CV_f(CV::i)): New tests.
+
+2012-06-13  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.base/condbreak.exp: Add tests for "condition" completion.
+
+2012-06-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix regression by the "ambiguous linespec" series.
+	* gdb.base/break.exp (list marker1, break lineno, delete $bpnum): New
+	tests.
+
+2012-06-11  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* lib/future.exp: Set $use_gdb_compile even if only find_go_linker is
+	missing.
+
+2012-06-11  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.base/longjmp.c (hidden_longjmp): Move expected catch
+	location...
+	(main): ...here.
+
+2012-06-07  Yao Qi  <yao at codesourcery.com>
+
+	* gdb.trace/strace.exp: Shorten some too-long lines.
+
+2012-06-06  Pedro Alves  <palves at redhat.com>
+
+	* gdb.threads/clone-new-thread-event.c: New file.
+	* gdb.threads/clone-new-thread-event.exp: New file.
+
+2012-06-06  Yao Qi  <yao at codesourcery.com>
+
+	* gdb.base/dprintf.c (main): Add extra parameter when calling
+	printf and fprintf.
+	(bar): New function.  It is a dead function, but to ensure
+	'malloc' is linked explicitly.
+
+2012-06-06  Yao Qi  <yao at codesourcery.com>
+
+	* gdb.base/info-proc.exp: Return if target doesn't support
+	'info proc'.
+
+2012-06-05  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.base/freebpcmd.exp (set lines): Check valid range of I.
+	(run program with breakpoint commands): XFAIl if it is not.
+
+2012-06-05  Joel Brobecker  <brobecker at adacore.com>
+
+	* gdb.base/ctxobj-f.c (GET_VERSION): Introduce local variable
+	and add comment.
+	* gdb.base/ctxobj-m.c (main): Rewrite, and add comment.
+	* gdb.base/ctxobj.exp: Insert breakpoint in ctxobj-f.c using
+	"STOP" marker.  Adjust testing strategy to make it work on
+	all targets.
+
+	* gdb.base/print-file-var-main.c (main): Rewrite using local
+	variables and adjust get_version_2's return value check.
+	Add small comment.
+	* gdb.base/print-file-var.exp: Insert breakpoint using "STOP"
+	marker.  Adjust testing strategy to make it work on all targets.
+
+2012-06-05  Joel Brobecker  <brobecker at adacore.com>
+
+	* gdb.ada/bad-task-bp-keyword: New testcase.
+
+2012-06-03  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.base/code_elim.exp (add-symbol-file ${testfile1} 0x100000):
+	Simplify it to ...
+	(symbol-file ${testfile1}): ... here.
+	(test eliminated var my_global_symbol)
+	(test eliminated var my_static_symbol)
+	(test eliminated var my_global_func, get address of main): Wrap them to
+	'single psymtabs' and 'single symtabs'
+	(get address of my_global_symbol, get address of my_static_symbol)
+	(get address of my_global_func, get address of main): Wrap them to
+	'order1' and 'order2'.
+
+	* gdb.base/code_elim.exp
+	(add-symbol-file ${testfile1} 0x100000)
+	(add-symbol-file ${testfile2} 0x200000): Wrap them to 'order1' and
+	'order2'.
+	(order1: add-symbol-file ${testfile1} 0x100000)
+	(order1: add-symbol-file ${testfile2} 0x200000)
+	(order2: add-symbol-file ${testfile2} 0x200000)
+	(order2: add-symbol-file ${testfile1} 0x100000): Add -s .data and -s
+	.bss as appropriate.
+
+2012-05-28  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.server/solib-list-lib.c: New file.
+	* gdb.server/solib-list-main.c: New file.
+	* gdb.server/solib-list.exp: New file.
+
+2012-05-25  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* gdb.trace/unavailable.exp (gdb_collect_globals_test): Update
+	for 'set print symbol' change.
+
+2012-05-24  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.dwarf2/dw2-icc-opaque.S: Add debug_info_seg3 and
+	.debug_abbrev_seg3.
+
+2012-05-24  John Steele Scott  <toojays at toojays.net>
+
+	PR symtab/13277: Resolving opaque structures in ICC generated binaries.
+	* gdb.dwarf2/dw2-icc-opaque.S: New file.
+	* gdb.dwarf2/dw2-icc-opaque.exp: New file.
+
+2012-05-23  Stan Shebs  <stan at codesourcery.com>
+
+	* gdb.mi/mi-info-os.exp: New file.
+
+2012-05-23  Keith Seitz  <keiths at redhat.com>
+
+	* gdb.trace/stap-trace.exp: If compile_stap_bin fails,
+	return -1 to suppress the rest of the tests.
+	(compile_stap_bin): Return boolean success value.
+
+2012-05-21  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.cp/inherit.exp (test_print_mi_members): Expect errors.
+	Remove kfails.
+	(test_print_mi_member_types): Likewise.
+
+2012-05-21  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.base/callfuncs.exp (do_function_calls): Update for 'set
+	print symbol' change.
+
+2012-05-18  Thiago Jung Bauermann  <thiago.bauermann at linaro.org>
+
+	* gdb.python/py-prompt.exp: Quit if the target is remote.
+
+2012-05-18  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix ERROR: internal buffer is full.
+	* gdb.base/info-os.exp (expect_multiline): New function.
+	(get process list, get process groups, get threads)
+	(get file descriptors, get internet-domain sockets)
+	(get shared-memory regions, get semaphores, get message queues): Use
+	it for these tests.
+
+2012-05-18  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.mi/mi-var-cmd.exp: Update.
+	* gdb.objc/basicclass.exp (do_objc_tests): Update.
+	* gdb.cp/virtbase.exp: Update.
+	* gdb.cp/classes.exp (test_static_members): Update.
+	* gdb.cp/casts.exp: Update.
+	* gdb.base/pointers.exp: Update.
+	* gdb.base/funcargs.exp (pointer_args): Update.
+	(structs_by_reference): Update.
+	* gdb.base/find.exp: Update.
+	* gdb.base/call-strs.exp: Send "set print symbol off".
+	* gdb.base/call-ar-st.exp: Update.
+	* gdb.ada/fun_addr.exp: Update.
+	* gdb.base/printcmds.exp (test_print_symbol): New proc.
+	Call it.
+	(test_print_repeats_10, test_print_strings)
+	(test_print_char_arrays): Update.
+
+2012-05-18  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.base/charset.exp (string_display): Update.
+
+2012-05-18  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.mi/mi2-var-display.exp: Update.
+	* gdb.mi/mi-var-display.exp: Update.
+	* gdb.mi/mi-var-child.exp: Update.
+	* gdb.cp/expand-psymtabs-cxx.exp: Update.
+	* gdb.cp/cp-relocate.exp (get_func_address): Update.
+
+2012-05-17  Doug Evans  <dje at google.com>
+
+	* info-macros.exp: Pass "debug" to prepare_for_testing.
+
+	* Makefile.in (clean): Remove Fission .dwo and .dwp files.
+	* gdb.ada/Makefile.in (clean): Ditto.
+	* gdb.arch/Makefile.in (clean): Ditto.
+	* gdb.asm/Makefile.in (clean): Ditto.
+	* gdb.base/Makefile.in (clean): Ditto.
+	* gdb.cell/Makefile.in (clean): Ditto.
+	* gdb.cp/Makefile.in (clean): Ditto.
+	* gdb.disasm/Makefile.in (clean): Ditto.
+	* gdb.dwarf2/Makefile.in (clean): Ditto.
+	* gdb.fortran/Makefile.in (clean): Ditto.
+	* gdb.go/Makefile.in (clean): Ditto.
+	* gdb.hp/Makefile.in (clean): Ditto.
+	* gdb.hp/gdb.aCC/Makefile.in (clean): Ditto.
+	* gdb.hp/gdb.base-hp/Makefile.in (clean): Ditto.
+	* gdb.hp/gdb.compat/Makefile.in (clean): Ditto.
+	* gdb.hp/gdb.defects/Makefile.in (clean): Ditto.
+	* gdb.hp/gdb.objdbg/Makefile.in (clean): Ditto.
+	* gdb.java/Makefile.in (clean): Ditto.
+	* gdb.linespec/Makefile.in (clean): Ditto.
+	* gdb.mi/Makefile.in (clean): Ditto.
+	* gdb.modula2/Makefile.in (clean): Ditto.
+	* gdb.multi/Makefile.in (clean): Ditto.
+	* gdb.objc/Makefile.in (clean): Ditto.
+	* gdb.opencl/Makefile.in (clean): Ditto.
+	* gdb.opt/Makefile.in (clean): Ditto.
+	* gdb.pascal/Makefile.in (clean): Ditto.
+	* gdb.python/Makefile.in (clean): Ditto.
+	* gdb.reverse/Makefile.in (clean): Ditto.
+	* gdb.server/Makefile.in (clean): Ditto.
+	* gdb.stabs/Makefile.in (clean): Ditto.
+	* gdb.threads/Makefile.in (clean): Ditto.
+	* gdb.trace/Makefile.in (clean): Ditto.
+	* gdb.xml/Makefile.in (clean): Ditto.
+
+2012-05-16  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.base/macscp1.c (macscp_expr): Add comment.
+	* gdb.base/macscp.exp: Test __FILE__ and __LINE__.
+
+2012-05-16  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* gdb.base/return-nodebug.exp: Also test float and double types.
+
+2012-05-15  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	PR testsuite/12649
+	* gdb.base/dprintf.exp: Replace gdb_run_cmd by runto main.
+
+	* gdb.base/dprintf.exp: Remove now redundant breakpoint for main.
+
+2012-05-14  Sergio Durigan Junior  <sergiodj at redhat.com>
+
+	* gdb.base/stap-probe.exp (stap_test): Remove calls to
+	`rerun_to_main'.
+	(stap_test_no_debuginfo): Likewise.
+
+2012-05-14  Stan Shebs  <stan at codesourcery.com>
+
+	* gdb.base/dprintf.c: New file.
+	* gdb.base/dprintf.exp: New file.
+
+2012-05-14  Hui Zhu  <hui_zhu at mentor.com>
+
+	* gdb.trace/Makefile.in (PROGS): Add disconnected-tracing.
+	* gdb.trace/disconnected-tracing.c: New file.
+	* gdb.trace/disconnected-tracing.exp: New file.
+
+2012-05-13  Siva Chandra Reddy  <sivachandra at google.com>
+
+	* gdb.python/python.c: Add a new breakpoint comment.
+	* gdb.python/python.exp: Add tests to test gdb.find_pc_line.
+
+2011-12-26  Kwok Cheung Yeung  <kcy at codesourcery.com>
+
+	* gdb.base/info-os.exp: New file.
+	* gdb.base/info-os.c: New file.
+
+2012-05-10  Joel Brobecker  <brobecker at adacore.com>
+
+	* gdb.base/print-file-var-lib1.c, gdb.base/print-file-var-lib2.c,
+	gdb.base/print-file-var-main.c, gdb.base/print-file-var.exp:
+	New files.
+
+2012-05-10  Joel Brobecker  <brobecker at adacore.com>
+
+	* gdb.base/ctxobj-f.c, gdb.base/ctxobj-m.c, gdb.base/ctxobj-v.c,
+	gdb.base/ctxobj.exp: New files.
+
+2012-05-09  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.trace/strace.exp: Add 'quiet' to compiler flags.
+
+2012-05-09  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* lib/gdb.exp (gdb_test_multiple): Correct formatting.
+
+2012-05-08  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* gdb.mi/mi-var-display.exp: Check for the existence of $fp
+	before using it.
+
+2012-05-04  Tristan Gingold  <gingold at adacore.com>
+
+	* gdb.base/set-noassign.exp: New test.
+
+2012-05-03  Siva Chandra Reddy  <sivachandra at google.com>
+
+	* gdb.python/py-symbol.exp: Add tests to test the new methods
+	gdb.Symtab.global_block() and gdb.Symtab.static_block().
+	* gdb.python/py-symbol.c: Add new struct to help test
+	gdb.Symtab.static_block().
+
+2012-05-03  Doug Evans  <dje at google.com>
+
+	* gdb.dwarf2/pr13961.S: Add file and source location, but leave
+	commented out.
+
+2012-05-03  Yao Qi  <yao at codesourcery.com>
+
+	* gdb.base/catch-syscall.exp: Skip it before compilation if target
+	doesn't support.
+	* gdb.base/foll-exec.exp, gdb.base/foll-fork.exp: Likewise.
+	* gdb.base/foll-vfork.exp, gdb.multi/bkpt-multi-exec.exp: Likewise.
+
+2012-05-03  Yao Qi  <yao at codesourcery.com>
+
+	* gdb.mi/mi-solib.exp: Setup kfail for gdb/13860.
+
+2012-04-30  Doug Evans  <dje at google.com>
+
+	PR testsuite/13961
+	* gdb.dwarf2/pr13961.S: New file.
+	* gdb.dwarf2/pr13961.exp: New file.
+
+2012-04-29  Yao Qi  <yao at codesourcery.com>
+
+	* gdb.dwarf2/dw2-ifort-parameter.exp: Use proc `dwarf2_support'.
+
+2012-04-28  Doug Evans  <dje at google.com>
+
+	* gdb.dwarf2/dw2-intercu.S (.Ltype_int2_in_cu2): Renamed from
+	.Ltype_int_in_cu2.  Use name "int2" instead of "int".
+	All uses updated.
+	* gdb.dwarf2/dw2-intercu.exp: Add "ptype int2" ahead of
+	"ptype func_cu1" to expand cu2 before cu1.
+
+2012-04-27  Sergio Durigan Junior  <sergiodj at redhat.com>
+	    Tom Tromey  <tromey at redhat.com>
+
+	* gdb.base/default.exp: Add `$_probe_arg*' convenience
+	variables.
+	* gdb.base/stap-probe.c: New file.
+	* gdb.base/stap-probe.exp: New file.
+	* gdb.trace/stap-trace.c: New file.
+	* gdb.trace/stap-trace.exp: New file.
+	* gdb.cp/nextoverthrow.exp: Add check for SystemTap probe in
+	libgcc's unwinder.
+
+2012-04-26  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* gdb.arch/mips16-thunks-inmain.c: New file.
+	* gdb.arch/mips16-thunks-main.c: New file.
+	* gdb.arch/mips16-thunks-sin.c: New file.
+	* gdb.arch/mips16-thunks-sinfrob.c: New file.
+	* gdb.arch/mips16-thunks-sinfrob16.c: New file.
+	* gdb.arch/mips16-thunks-sinmain.c: New file.
+	* gdb.arch/mips16-thunks-sinmips16.c: New file.
+	* gdb.arch/mips16-thunks.exp: New file.
+
+2012-04-25  Doug Evans  <dje at google.com>
+
+	* configure.ac: Create gdb.go/Makefile.
+	* configure: Regenerate.
+	* gdb.base/default.exp: Add "go" to "set language" testing.
+	* gdb.go/Makefile.in: New file.
+	* gdb.go/basic-types.exp: New file.
+	* gdb.go/chan.exp: New file.
+	* gdb.go/chan.go: New file.
+	* gdb.go/handcall.exp: New file.
+	* gdb.go/handcall.go: New file.
+	* gdb.go/hello.exp: New file.
+	* gdb.go/hello.go: New file.
+	* gdb.go/integers.exp: New file.
+	* gdb.go/integers.go: New file.
+	* gdb.go/methods.exp: New file.
+	* gdb.go/methods.go: New file.
+	* gdb.go/package.exp: New file.
+	* gdb.go/package1.go: New file.
+	* gdb.go/package2.go: New file.
+	* gdb.go/print.exp: New file.
+	* gdb.go/strings.exp: New file.
+	* gdb.go/strings.go: New file.
+	* gdb.go/types.exp: New file.
+	* gdb.go/types.go: New file.
+	* gdb.go/unsafe.exp: New file.
+	* gdb.go/unsafe.go: New file.
+	* lib/future.exp: Add Go support.
+	(gdb_find_go, gdb_find_go_linker): New procs.
+	(gdb_default_target_compile): Add Go support.
+	* lib/gdb.exp (skip_go_tests): New proc.
+	* lib/go.exp: New file.
+
+2012-04-25  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.threads/linux-dp.exp: Unset 'seen' before 'array set'.
+
+2012-04-18  Siddhesh Poyarekar  <siddhesh at redhat.com>
+	    Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	PR symtab/7259:
+	* gdb.base/enumval.c: New test case.
+	* gdb.base/enumval.exp: New test case.
+	* gdb.python/py-type.exp (test_enums): Use field.enumval instead of
+	field.bitpos.
+
+2012-04-17  Pedro Alves  <palves at redhat.com>
+
+	* Makefile.in (site.exp): Make site.exp source
+	$srcdir/lib/append_gdb_boards_dir.exp.
+	* lib/append_gdb_boards_dir.exp: New file.
+
+2012-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	New option "set auto-load safe-path".
+	* gdb.python/py-objfile-script.exp (set auto-load safe-path): New.
+	* gdb.python/py-section-script.exp (set auto-load safe-path): New.
+
+2012-04-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	auto-load: Implementation.
+	* gdb.base/help.exp (test set height): Increase the height.
+	* gdb.python/py-objfile-script.exp (info auto-load-scripts): Change
+	to ...
+	(info auto-load python-scripts): ... here.
+	* gdb.python/py-section-script.exp (info auto-load-scripts *): Change
+	to ...
+	(info auto-load python-scripts *): ... here.
+
+2012-04-16  Yao Qi  <yao at codesourcery.com>
+
+	* lib/trace-support.exp (get_in_proc_agent): New.
+	* gdb.trace/change-loc.exp: Call get_in_proc_agent to get the location
+	of in process trace agent.
+	* gdb.trace/ftrace.exp: Likewise.
+	* gdb.trace/pending.exp: Likewise.
+	* gdb.trace/trace-break.exp: Likewise.
+	* gdb.trace/trace-mt.exp
+	* gdb.trace/tspeed.exp: Likewise.
+	* gdb.trace/tstatus.exp
+	* gdb.trace/strace.exp: Likewise.
+
+2012-04-16  Thomas Schwinge  <thomas at codesourcery.com>
+
+	* gdb.asm/sh.inc (gdbasm_startup): Only set up the stack pointer if the
+	symbol _stack is defined.  Get rid of a hard-coded constant for _stack.
+
+	* gdb.asm/sh.inc (gdbasm_end) <.size>: Refer to the function's name.
+
+2012-04-14  Anton Gorenkov <xgsa at yandex.ru>
+
+	PR mi/13393
+	* gdb.mi/mi-var-rtti.cc: New file.
+	* gdb.mi/mi-var-rtti.exp: New file.
+	* lib/mi-support.exp (mi_varobj_update_with_child_type_change): New
+	function.
+	(mi_varobj_update_with_type_change): updated to avoid code duplication.
+
+2012-04-11  Siva Chandra Reddy  <sivachandra at google.com>
+
+	* gdb.python/Makefile.in: Add py-explore and py-explore-cc to
+	EXECUTABLES.
+	* gdb.python/py-explore.c: C program used for testing the new
+	'explore' command on C constructs.
+	* gdb.python/py-explore.cc: C++ program used for testing the new
+	'explore' command on C++ constructs.
+	* gdb-python/py-explore.exp: Tests for the new 'explore'
+	command on C constructs.
+	* gdb-python/py-explore-cc.exp: Tests for the new 'explore'
+	command on C++ constructs.
+
+2012-04-07  Mark Kettenis  <kettenis at gnu.org>
+
+	* gdb.base/funcargs.exp (complex_args): Fix typo.
+
+2012-04-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.trace/change-loc.exp (tracepoint_change_loc_1)
+	(tracepoint_change_loc_2): Accept both orders of pending set_tracepoint.
+
+2012-04-05  Keith Seitz  <keiths at redhat.com>
+
+	* gdb.base/advance.exp: Update error message for
+	"advance malformed" test.
+	* gdb.base/break.exp: Likewise for "breakpoint with
+	trailing garbage" test.
+	* gdb.base/hbreak2.exp: Likewise for "hardware breakpoint
+	with trailing garbage" test.
+	* gdb.base/sepdebug.exp: Likewise for "breakpoint with
+	trailng garbage" test.
+	* gdb.base/until.exp: Likewise for "malformed until" test.
+	* gdb.cp/ovldbreak.exp: Create the breakpoint table
+	for "breakpoint info (after setting on all)".
+	* gdb.cp/userdef.exp: Remove quoting for "break A2::operator+"
+	tests.
+	* gdb.cp/cplabel.cc: New file.
+	* gdb.cp/cplabel.exp: New test.
+	* gdb.linespec/ls-errs.c: New file.
+	* gdb.linespec/ls-errs.exp: New test.
+
+2012-04-03  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.trace/unavailable.exp
+	(collect globals: print object on: print derived_partial)
+	(collect globals: print object on: print derived_whole)
+	(collect globals: print object off: print derived_partial)
+	(collect globals: print object off: print derived_whole): Update
+	expected output.
+
+2012-03-30  Keith Seitz  <keiths at redhat.com>
+
+	* gdb.python: Add test for linespecs with commas.
+
+2012-03-28  Keith Seitz  <keiths at redhat.com>
+
+	* gdb.linespec/ls-dollar.cc: New file.
+	* gdb.linespec/ls-dollar.exp: New test.
+
+2012-03-28  Keith Seitz  <keiths at redhat.com>
+
+	* gdb.cp/namespace.exp: Add breakpoint tests for functions
+	starting with the global namespace.
+
+2012-03-23  Doug Evans  <dje at google.com>
+
+	* lib/gdb.exp (BUILD_DATA_DIRECTORY): New global.
+
+2012-03-22  Siva Chandra Reddy  <sivachandra at google.com>
+
+	* gdb.python/py-value.cc: Add test case for testing the
+	methodology exposing C++ values to Python.
+	* gdb.python/py-value-cc.exp: Add tests testing the methodology
+	exposing C++ values to Python.
+	* gdb.python/Makefile.in: Add py-value-cc to EXECUTABLES.
+
+2012-03-19  Jan Kratochvil  <jan.kratochvil at redhat.com>
+	    Siddhesh Poyarekar  <siddhesh at redhat.com>
+
+	* gdb.base/auxv.c (func2): setrlimit to infinity to enable core dumps.
+	* gdb.base/auxv.exp: Try to compile it with -DUSE_RLIMIT first.
+	(generate native core dump): Make the test unsupported if core cannot
+	be generated.
+
+2012-03-19  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.gdb/selftest.exp (do_steps_and_nexts): New entry
+	for cmdarg_vec = NULL.  Remove entries for cmdsize = 1, cmdarg = and
+	ncmd = 0.  New entry for VEC_cleanup cmdarg_s.
+
+2012-03-19  Siddhesh Poyarekar  <siddhesh at redhat.com>
+
+	* gdb.base/cond-eval-mode.exp: Fix the anticipated warning string.
+
+2012-03-17  Doug Evans  <dje at google.com>
+
+	* dg-extract-results.sh: Handle KFAILs.
+
+2012-03-16  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	PR symtab/13777
+	* gdb.dwarf2/dw2-skip-prologue.S (DW_AT_producer): Set it to 4.5.0.
+
+2012-03-16  Joel Brobecker  <brobecker at adacore.com>
+
+	* gdb.ada/set_pckd_arr_elt: New testcase.
+
+2012-03-16  Gary Benson  <gbenson at redhat.com>
+
+	PR breakpoints/10738
+	* gdb.opt/inline-break.exp: New file.
+	* gdb.opt/inline-break.c: Likewise.
+	* gdb.dwarf2/dw2-inline-break.exp: Likewise.
+	* gdb.dwarf2/dw2-inline-break.S: Likewise.
+	* gdb.base/annota1.exp: Cope with old .gdb_index warnings.
+	* gdb.base/async-shell.exp: Likewise.
+	* lib/mi-support.exp (library_loaded_re): Likewise.
+
+2012-03-15  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.cp/virtfunc2.exp: Update expected output.
+	* gdb.cp/pr9631.exp: Update expected output.
+	* gdb.cp/member-ptr.exp: Update expected output.
+	* gdb.cp/inherit.exp (test_print_mvi_classes): Update expected
+	output.
+	* gdb.cp/casts.exp: Update expected output.
+
+2012-03-15  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.cp/virtfunc.exp (make_one_vtable_result): New proc.
+	(test_info_vtbl): Likewise.
+	(do_tests): Call test_info_vtbl.
+	* gdb.cp/virtfunc.cc (va): New global.
+
+2012-03-15  Thomas Schwinge  <thomas at codesourcery.com>
+
+	* gdb.dwarf2/dw2-ada-ffffffff.S: Use .4byte instead of .long for
+	describing DWARF data structures.
+	* gdb.dwarf2/dw2-bad-parameter-type.S: Likewise.
+	* gdb.dwarf2/dw2-double-set-die-type.S: Likewise.
+	* gdb.dwarf2/dw2-empty-pc-range.S: Likewise.
+	* gdb.dwarf2/dw2-entry-value.S: Likewise.
+	* gdb.dwarf2/dw2-modula2-self-type.S: Likewise.
+	* gdb.dwarf2/dw2-param-error.S: Likewise.
+	* gdb.dwarf2/dw2-skip-prologue.S: Likewise.
+	* gdb.dwarf2/dw2-stack-boundary.S: Likewise.
+	* gdb.dwarf2/dw4-sig-type-unused.S: Likewise.
+	* gdb.dwarf2/implptr-optimized-out.S: Likewise.
+	* gdb.dwarf2/member-ptr-forwardref.S: Likewise.
+	* gdb.dwarf2/pr11465.S: Likewise.
+
+2012-03-14  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.mi/mi2-prompt.exp: New file.
+
+2012-03-13  Joel Brobecker  <brobecker at adacore.com>
+
+	* gdb.base/enum_cond.c, gdb.base/enum_cond.exp: New testcase.
+
+2012-03-13  Joel Brobecker  <brobecker at adacore.com>
+
+	* gdb.ada/bp_range_type: New testcase.
+
+2012-03-13  Doug Evans  <dje at google.com>
+
+	* gdb.base/default.exp: Delete tests for symbol-reloading.
+	* gdb.base/help.exp: Ditto.
+	* gdb.base/setshow.exp: Ditto.
+	* gdb.base/gdb_history: Delete references to symbol-reloading.
+
+2012-03-06  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.base/attach-twice.c: New files.
+	* gdb.base/attach-twice.exp: New files.
+
+2012-03-08  Keith Seitz  <keiths at redhat.com>
+
+	* lib/gdb.exp (gdb_get_line_number): Throw an
+	error instead of returning -1.
+	* gdb.base/break.exp: Remove unused variable
+	bp_location5.
+	* gdb.base/hbreak2.exp: Likewise.
+	* gdb.base/sepdebug.exp: Likewise.
+
+2012-03-08  Yao Qi  <yao at codesourcery.com>
+	    Pedro Alves  <palves at redhat.com>
+
+	Fix PR server/13392.
+	* gdb.trace/change-loc.exp (tracepoint_change_loc_1): Remove kfail.
+	(tracepoint_change_loc_2): Remove kfail.  Return if failed to
+	download tracepoints.
+	* gdb.trace/pending.exp (pending_tracepoint_works): Likewise.
+	(pending_tracepoint_resolved_during_trace): Likewise.
+	(pending_tracepoint_installed_during_trace): Likewise.
+	(pending_tracepoint_with_action_resolved): Likewise.
+
+2012-03-08  Keith Seitz  <keiths at redhat.com>
+
+	* gdb.ada/array_bounds.exp: Get breakpoint for line
+	with "START", not "STOP".
+	* gdb.python/py-infthread.exp: Do not continue to
+	line marked "Break here.", which is undefined.
+
+2012-03-08  Luis Machado  <lgustavo at codesourcery.com>
+
+	Revert:
+
+	2012-03-03  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Implement testsuite workaround for PR breakpoints/13781.
+	* gdb.cp/mb-templates.exp: New loop with variable $workaround.
+	(set breakpoint condition-evaluation host): New conditional command.
+
+2012-03-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix CU relative vs. absolute DIE offsets.
+	* gdb.dwarf2/dw2-op-call.S: New compilation unit preceding the existing
+	one.
+
+2012-03-08  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix false FAIL on distros with relro linkage as default.
+	* gdb.reverse/solib-precsave.exp: Try to compile the test using
+	-Wl,-z,norelro first.
+
+2012-03-06  Joel Brobecker  <brobecker at adacore.com>
+
+	* gdb.ada/bp_on_var: New testcase.
+
+2012-03-06  Joel Brobecker  <brobecker at adacore.com>
+
+	* gdb.ada/bp_enum_homonym: New testcase.
+
+2012-03-06  Yao Qi  <yao at codesourcery.com>
+
+	* gdb.trace/ftrace.exp (test_fast_tracepoints): Run test on target
+	x86_64-*-* and i?86-*-*.
+	Set up KFAIL for gdb/13808.
+
+2012-03-05  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.ada/operator_bp.exp: Clear debug-file-directory.
+	* gdb.ada/mi_task_arg.exp: Clear debug-file-directory.
+
+2012-03-05  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.java/jprint.java (jprint.main): Keep 'x' live.
+
+2012-03-04  Yao Qi  <yao at codesourcery.com>
+
+	* gdb.base/disp-step-syscall.exp (disp_step_cross_syscall): Catch error
+	messages for KFAIL.
+
+2012-03-03  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.ada/arrayidx.exp: Call get_compiler_info.  New variable old_gcc.
+	(print one_two_three, indexes off, print few_reps, indexes off)
+	(print many_reps, indexes off, print empty, indexes off)
+	(print one_two_three, print few_reps, print many_reps, print empty):
+	Call setup_xfail if $gcc_old.
+
+2012-03-03  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Implement testsuite workaround for PR breakpoints/13781.
+	* gdb.cp/mb-templates.exp: New loop with variable $workaround.
+	(set breakpoint condition-evaluation host): New conditional command.
+
+2012-03-03  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Code cleanup.
+	* gdb.cp/mb-templates.exp: New variables executable.  Use it for
+	binfile.  use clean_restart.  Replace gdb_expect by gdb_test_multiple.
+	Replace GDB restart by kill and delete_breakpoints.  Replace breakpoint
+	number 1 by $bpnum.  Four times.
+
+2012-03-03  Yao Qi  <yao at codesourcery.com>
+
+	* gdb.trace/strace.exp: run strace_info_marker in linux native gdb.
+
+2012-03-03  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Setup KFAIL for PR server/13796.
+	* gdb.base/disp-step-syscall.exp (single step over vfork): Setup KFAIL.
+
+2012-03-02  Joel Brobecker  <brobecker at adacore.com>
+
+	* gdb.ada/operator_bp: New testcase.
+
+2012-03-02  Joel Brobecker  <brobecker at adacore.com>
+
+	* gdb.ada/info_locals_renaming: New testcase.
+
+2012-03-02  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.base/nextoverexit.c: New file.
+	* gdb.base/nextoverexit.exp: New file.
+
+2012-03-02  Edjunior Machado  <emachado at linux.vnet.ibm.com>
+
+	* gdb.arch/altivec-abi.exp (altivec_abi_tests): Remove obsolete
+	parameter.
+
+2012-03-01  Maciej W. Rozycki  <macro at mips.com>
+
+	* gdb.xml/tdesc-regs.exp: Add "mips-dsp.xml" to the list of MIPS
+	core registers.
+
+2012-03-01  Maciej W. Rozycki  <macro at mips.com>
+            Maciej W. Rozycki  <macro at codesourcery.com>
+            Daniel Jacobowitz  <dan at codesourcery.com>
+
+	* gdb.base/hbreak2.exp: New test for "hbreak" and "thbreak".
+
+2012-03-01  Pedro Alves  <palves at redhat.com>
+
+	PR gdb/13767
+
+	* gdb.trace/unavailable.exp (gdb_unavailable_floats): New.
+	(gdb_collect_globals_test): Call it.
+
+2012-03-01  Keith Seitz  <keiths at redhat.com>
+
+	* gdb.cp/method2.exp: Output of overload menu is now
+	alphabetized.  Update tests for "break A::method".
+	* gdb.cp/ovldbreak.exp: Use gdb_get_line_number instead
+	of hard-coding them.
+	Overload menu is alphabetized: rewrite to accommodate.
+	Unset variables LINE and TYPES which are used in other tests.
+	Compute the output of "info break".
+	Update the breakpoint table after all breakpoints are deleted.
+	(continue_to_bp_overloaded): Rename ACTUALS to ARGUMENT and
+	compute ACTUALS and the method body based on parameters.
+	Update expected output accordingly.
+	* gdb.cp/ovldbreak.cc (foo::overload1arg): Reformat and add
+	unique comments to allow the use of gdb_get_line_number.
+
+2012-03-01  Keith Seitz  <keiths at redhat.com>
+
+	* gdb.cp/method2.exp: Use prepare_for_testing and cleanup
+	some Tcl syntax.
+	* gdb.cp/ovldbreak.exp: Likewise.
+
+2012-03-01  Keith Seitz  <keiths at redhat.com>
+
+	* gdb.base/help.exp (help show user): Update expected result
+	for new doc string changes (add "non-python").
+
+2012-03-01  Scott J. Goldman <scottjg at vmware.com>
+
+	* gdb.python/py-cmd.exp: Add test to verify that python commands can
+	be put in the user-defined category and that the commands appear in
+	"help user-defined".
+
+2012-02-29  Joel Brobecker  <brobecker at adacore.com>
+
+	* gdb.ada/tagged_not_init: New testcase.
+
+2012-02-29  Joel Brobecker  <brobecker at adacore.com>
+
+	* gdb.ada/arrayidx.exp: Adjust expected output for p_one_two_three.
+	* gdb.ada/enum_idx_packed: New testcase.
+
+2012-02-29  Joel Brobecker  <brobecker at adacore.com>
+
+	* gdb.ada/aliased_array: New testcase.
+
+2012-02-29  Joel Brobecker  <brobecker at adacore.com>
+
+	* gdb.ada/whatis_array_val: New testcase.
+
+2012-02-29  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix disp-step-syscall.exp: fork: single step over fork.
+	* gdb.base/disp-step-syscall.exp (syscall_insn): Anchor it by
+	whitespaces.
+	(single step over $syscall): Remove its check.
+	(single step over $syscall final pc): New check.
+
+2012-02-29  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Support processors without SSSE3.
+	* gdb.reverse/i386-sse-reverse.c (sse_test): Move pabsb, pabsw and
+	pabsd into ...
+	(ssse3_test): ... a new function.
+	(main): Call ssse3_test.
+	* gdb.reverse/i386-sse-reverse.exp: New variable end_ssse3_test.
+	Update expected values everywhere.
+	(reverse-step to pabsd, verify xmm0 after reverse pabsd)
+	(verify xmm1 after reverse pabsd, verify xmm2 after reverse pabsd)
+	(reverse-step to pabsw, verify xmm0 after reverse pabsw)
+	(verify xmm1 after reverse pabsw, verify xmm2 after reverse pabsw)
+	(reverse-step to pabsb, verify xmm0 after reverse pabsb)
+	(verify xmm1 after reverse pabsb, verify xmm2 after reverse pabsb):
+	Move these tests lower.
+	(set breakpoint at end of ssse3_test, continue to end of ssse3_test)
+	(verify xmm0 at end of ssse3_test, verify xmm1 at end of ssse3_test)
+	(verify xmm2 at end of ssse3_test, continue to end of ssse3_test #2):
+	New tests.
+
+2012-02-29  Yao Qi  <yao at codesourcery.com>
+	    Pedro Alves  <palves at redhat.com>
+
+	* gdb.trace/trace-mt.c: New.
+	* gdb.trace/trace-mt.exp: New.
+
+2012-02-28  Thomas Schwinge  <thomas at codesourcery.com>
+
+	* gdb.base/annota1.exp: Use gdb_get_line_number for retrieving line
+	numbers instead of hardcoding them.
+	* gdb.base/annota1.c: Provide suitable markers.
+	* gdb.base/annota3.exp: Use gdb_get_line_number for retrieving line
+	numbers instead of hardcoding them.
+	* gdb.base/annota3.c: Provide suitable markers.
+
+	* gdb.base/annota1.c [__sh__]: Remove any special-casing.
+	* gdb.base/annota3.c: Likewise.
+	* gdb.base/sigall.c: Likewise.
+	* gdb.base/signals.c: Likewise.
+	* gdb.reverse/sigall-reverse.c: Likewise.
+
+2012-02-27  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* gdb.cp/breakpoint.exp (test_breakpoint): Fix the runto_main
+	failure return path.
+
+2012-02-27  Luis Machado  <lgustavo at codesourcery.com>
+
+	* gdb.base/save-bp.exp: Account for new condition evaluator output.
+
+2012-02-24  Luis Machado  <lgustavo at codesourcery.com>
+
+	* gdb.base/cond-eval-mode.exp: New file.
+
+2012-02-24  Pedro Alves  <palves at redhat.com>
+
+	* gdb.base/break-interp.exp (test_ld): Use with_test_prefix.
+	(top level): Use with_test_prefix.
+
+2012-02-24  Pedro Alves  <palves at redhat.com>
+
+	* gdb.threads/attach-into-signal.exp (corefunc): Use
+	with_test_prefix.
+
+2012-02-24  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix false FAILs on old CPUs without SSE.
+	* gdb.reverse/i386-sse-reverse.exp (continue to end of sse_test):
+	Return untested for Illegal instruction.
+
+2012-02-24  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix false FAILs with glibc debug infos installed.
+	* gdb.reverse/solib-precsave.exp (set debug-file-directory): New test.
+	* gdb.reverse/solib-reverse.exp (set debug-file-directory): New test.
+
+2012-02-22  Sterling Augustine  <saugustine at google.com>
+
+	* gdb.base/watchpoint.exp (test_constant_watchpoint): Add test for
+	constant with cast.
+
+2012-02-21  Pedro Alves  <palves at redhat.com>
+
+	* gdb.threads/watchpoint-fork.exp (test): Use with_test_prefix.
+
+2012-02-21  Pedro Alves  <palves at redhat.com>
+
+	* gdb.base/return-nodebug.exp (do_test): Use with_test_prefix.
+
+2012-02-21  Pedro Alves  <palves at redhat.com>
+
+	* gdb.trace/unavailable.exp (gdb_collect_globals_test): Use
+	with_test_prefix.
+
+2012-02-21  Pedro Alves  <palves at redhat.com>
+
+	* gdb.arch/altivec-abi.exp (altivec_abi_tests): Don't do
+	with_test_prefix here.
+	(top level): Do it here instead.  Remove `:' from the
+	with_test_prefix string.
+	* gdb.base/attach-pie-misread.exp: Remove the leading space the
+	the suffix `:' from the with_test_prefix prefix string.
+	* gdb.base/break-interp.exp: Ditto.
+	* gdb.base/catch-load.exp: Ditto.
+	* gdb.base/disp-step-syscall.exp: Ditto.
+	* gdb.base/jit-so.exp: Ditto.
+	* gdb.base/jit.exp: Ditto.
+	* gdb.base/sepdebug.exp: Ditto.
+	* gdb.base/solib-display.exp: Ditto.
+	* gdb.base/solib-overlap.exp: Ditto.
+	* gdb.base/watch-cond-infcall.exp: Ditto.
+	* gdb.base/watchpoint.exp: Ditto.
+	* gdb.dwarf2/dw2-noloc.exp: Ditto.
+	* gdb.mi/mi-watch.exp: Ditto.
+	* gdb.mi/mi2-watch.exp: Ditto.
+	* gdb.threads/non-ldr-exc-1.exp: Ditto.
+	* gdb.threads/non-ldr-exc-2.exp: Ditto.
+	* gdb.threads/non-ldr-exc-3.exp: Ditto.
+	* gdb.threads/non-ldr-exc-4.exp: Ditto.
+	* gdb.threads/watchpoint-fork.exp: Ditto.
+	* gdb.threads/watchthreads-reorder.exp: Ditto.
+	* gdb.trace/change-loc.exp: Ditto.
+	* gdb.trace/pending.exp: Ditto.
+	* gdb.trace/status-stop.exp: Ditto.
+	* gdb.trace/strace.exp: Ditto.
+	* gdb.trace/trace-break.exp: Ditto.
+	* gdb.trace/unavailable.exp: Ditto.
+	* lib/gdb.exp (with_test_prefix): Always prefix with space and
+	suffix with colon.  Adjust leading comments.
+
+2012-02-21  Pedro Alves  <palves at redhat.com>
+	    Tom Tromey  <tromey at redhat.com>
+
+	* lib/gdb.exp: Add description of test prefixes.
+	(with_test_prefix): New procedure.
+	* gdb.arch/altivec-abi.exp: Use with_test_prefix.
+	* gdb.base/attach-pie-misread.exp: Use with_test_prefix.
+	* gdb.base/break-interp.exp: Use with_test_prefix.  Use append
+	instead of lappend to append to pf_prefix.
+	* gdb.base/catch-load.exp: Use with_test_prefix.
+	* gdb.base/disp-step-syscall.exp: Use with_test_prefix.
+	* gdb.base/jit-so.exp: Use with_test_prefix.
+	* gdb.base/jit.exp: Use with_test_prefix.
+	* gdb.base/return-nodebug.exp (do_test): Use append instead of
+	lappend to append to pf_prefix.
+	* gdb.base/sepdebug.exp: Use with_test_prefix.
+	* gdb.base/solib-display.exp: Use with_test_prefix.
+	* gdb.base/solib-overlap.exp: Use with_test_prefix.
+	* gdb.base/watch-cond-infcall.exp: Use with_test_prefix.
+	* gdb.base/watchpoint.exp: Use with_test_prefix.
+	* gdb.dwarf2/dw2-noloc.exp: Use with_test_prefix.
+	* gdb.mi/mi-watch.exp: Use with_test_prefix.
+	* gdb.mi/mi2-watch.exp: Use with_test_prefix.
+	* gdb.threads/non-ldr-exc-1.exp: Use with_test_prefix.
+	* gdb.threads/non-ldr-exc-2.exp: Use with_test_prefix.
+	* gdb.threads/non-ldr-exc-3.exp: Use with_test_prefix.
+	* gdb.threads/non-ldr-exc-4.exp: Use with_test_prefix.
+	* gdb.threads/watchpoint-fork.exp: Use with_test_prefix.  Use
+	append instead of lappend to append to pf_prefix.
+	* gdb.threads/watchthreads-reorder.exp: Use with_test_prefix.
+	* gdb.trace/change-loc.exp: Use with_test_prefix.
+	* gdb.trace/pending.exp: Use with_test_prefix.
+	* gdb.trace/status-stop.exp: Use with_test_prefix.
+	* gdb.trace/strace.exp: Use with_test_prefix.
+	* gdb.trace/trace-break.exp: Use with_test_prefix.
+	* gdb.trace/unavailable.exp: Use with_test_prefix.  Use append
+	instead of lappend to append to pf_prefix.
+
+2012-02-20  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix racy FAILs.
+	* gdb.base/inferior-died.c (main): Add return of 0.
+	* gdb.base/inferior-died.exp (continue): Fix expectation of
+	asynchronous events.
+	(p 1): New test.
+
+2012-02-20  Pedro Alves  <palves at redhat.com>
+
+	* gdb.threads/attach-into-signal.exp (corefunc): Don't enable
+	lin-lwp output.  Set SIGALRM to stop.  Adjust tests to not rely on
+	gdb's internal debug output.  For the non-threaded case, look for
+	"Program received signal SIGLARM", for the threaded case, peek at
+	the thread's siginfo.
+
+2012-02-20  Pedro Alves  <palves at redhat.com>
+
+	General cleanup, make output test messages unique, and build
+	different executable files for the non-threaded and threaded
+	cases.
+
+	* gdb.threads/attach-into-signal.exp (binfile, escapedbinfile):
+	Delete.
+	(executable_nothr, executable_thr): New globals.
+	(top level): Adjust to delete both executables.
+	(corefunc): New parameter $executable.  Set $pf_prefix instead of
+	hand writing a prefix in tests.  Issue a clean_restart and enable
+	lin-lwp debug output here.
+	(top level): Adjust.  Use build_executable.  Don't start gdb here,
+	and don't enable lin-lwp debug output here.
+	* gdb.threads/Makefile.in (EXECUTABLES): Adjust.
+
+2012-02-20  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix racy FAILs.
+	* gdb.base/catch-load.exp (one_catch_load_test): Remove duplicate
+	"continue" command.
+
+2012-02-19  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix for gdbserver non-extended mode.
+	* gdb.base/break-inline.exp (start): Replace "start" by gdb_breakpoint
+	and gdb_run_cmd.
+
+2012-02-17  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.python/py-events.py (exit_handler): Add test for 'dir'.
+	* gdb.python/py-events.exp: Check 'dir' output.
+	* gdb.python/py-type.exp (test_fields): Add test for 'dir'.
+
+2012-02-17  Yao Qi  <yao at codesourcery.com>
+
+	* gdb.trace/strace.exp (strace_info_marker): Test `info threads'.
+
+2012-02-16  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.base/inferior-died.c: Don't include stdio.h.
+
+2012-02-16  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.base/inferior-died.c: New file.
+	* gdb.base/inferior-died.exp: New file.
+
+2012-02-15  Aleksandar Ristovski  <aristovski at qnx.com>
+
+	* gdb.base/break-inline.exp: New file.
+	* gdb.base/break-inline.c: New file.
+
+2012-02-15  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.base/pc-fp.exp: Add "info register" tests.
+
+2012-02-15  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.base/regs.exp: Remove.
+
+2012-02-15  Pedro Alves  <palves at redhat.com>
+
+	* gdb.trace/backtrace.exp: Issue UNSUPPORTED instead of PASS when
+	the target doesn't support tracepoints.
+	* gdb.trace/circ.exp: Ditto.
+	* gdb.trace/collection.exp: Ditto.
+	* gdb.trace/packetlen.exp: Ditto.
+	* gdb.trace/passc-dyn.exp: Ditto.
+	* gdb.trace/report.exp: Ditto.
+	* gdb.trace/tfind.exp: Ditto.
+	* gdb.trace/tspeed.exp: Ditto.
+	* gdb.trace/tsv.exp: Ditto.
+	* gdb.trace/unavailable.exp: Ditto.
+	* gdb.trace/while-dyn.exp: Ditto.
+
+2012-02-15  Pedro Alves  <palves at redhat.com>
+
+	* gdb.trace/circ.exp (trace_buffer_normal): Rewrite using
+	gdb_test_multiple, and call unsupported instead of fail, if the
+	remote side does not support the request.
+
+2012-02-15  Pedro Alves  <palves at redhat.com>
+
+	* gdb.server/ext-attach.exp: Make sure gdb is disconnected.
+	* gdb.server/ext-run.exp: Make sure gdb is disconnected.
+	* gdb.server/file-transfer.exp: Make sure gdb is disconnected.
+	* gdb.server/server-mon.exp: Make sure gdb is disconnected.
+	* gdb.server/server-run.exp: Make sure gdb is disconnected.
+	* lib/gdbserver-support.exp (gdbserver_start_extended): Only
+	prepend "extended-" to $gdbserver_protocol if $gdbserver_protocol
+	doesn't start with "extended-" already.
+
+2012-02-15  Pedro Alves  <palves at redhat.com>
+
+	Support extended-remote.  Avoid cascading timeouts.
+
+	* gdb.base/attach.exp (do_attach_tests): Add expected output for
+	the extended-remote target.  If attaching with no file fails, load
+	the file manually.
+	* gdb.server/ext-attach.exp: Adjust expected attach/detach output.
+
+2012-02-14  Stan Shebs  <stan at codesourcery.com>
+
+	* gdb.base/ena-dis-br.exp: Add enable count test.
+
+2012-02-13  Pedro Alves  <palves at redhat.com>
+
+	* config/mips-idt.exp: Delete.
+	* gdb.base/a2-run.exp: Remove mips-idt xfails.
+	* gdb.base/bitfields.exp: Remove mips-idt restarts.
+	* gdb.base/break.exp: Remove mips-idt references.
+	* gdb.base/chng-syms.exp: Ditto.
+	* gdb.base/default.exp: Ditto.
+	* gdb.base/funcargs.exp (funcargs_reload): Delete.
+	(top level): Don't call it.
+	* gdb.base/opaque.exp: Remove mips-idt restarts.
+	* gdb.base/ptype.exp: Remove mips-idt xfails.
+	* gdb.base/scope.exp: Remove mips-idt restarts.
+	* gdb.base/sepdebug.exp: Remove mips-idt references.
+	* gdb.base/watchpoint.exp (maybe_clean_restart)
+	(maybe_reinitialize): Delete.
+	(test_disabling_watchpoints, test_disabling_watchpoints)
+	(test_watchpoint_triggered_in_syscall)
+	(test_watchpoint_and_breakpoint, test_inaccessible_watchpoint):
+	Don't call them.
+
+2012-02-12  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.server/server-exec-info.exp: New file.
+
+2012-02-10  Pedro Alves  <palves at redhat.com>
+
+	* gdb.base/break-interp.exp (test_attach_gdb): Assume $file is
+	always non-empty.
+	(test_attach): Always pass $exec to test_attach_gdb.
+
+2012-02-08  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.python/py-symbol.exp: Use lookup_global_symbol for tests
+	before inferior is started.
+
+2012-02-07  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.python/py-symbol.exp: Test Symbol.needs_frame and
+	Symbol.value.
+	* gdb.python/py-symbol.c (qq): Set default value.
+
+2012-02-07  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.python/py-symbol.c (qq): New global.
+	* gdb.python/py-symbol.exp: Add test for frame-less
+	lookup_symbol.
+	* gdb.python/py-symtab.exp: Fix line number.
+
+2012-02-03  Joel Brobecker  <brobecker at adacore.com>
+
+	* gdb.ada/mi_task_arg: New testcase.
+
+2012-02-02  Pedro Alves  <palves at redhat.com>
+
+	* gdb.reverse/until-precsave.exp: Also put "record save" under the
+	extended timeout.
+
+2012-02-02  Pedro Alves  <palves at redhat.com>
+
+	* gdb.gdb/complaints.exp: Skip if gdb,noinferiorio is set.
+	* gdb.gdb/selftest.exp (test_with_self): Handle gdb,noinferiorio.
+
+2012-02-02  Pedro Alves  <palves at redhat.com>
+
+	* gdb.base/term.exp: Rewrite.
+	* gdb.base/term.c: New.
+
+2012-02-02  Pedro Alves  <palves at redhat.com>
+
+	* gdb.base/default.exp (run "r" abbreviation, run): Add
+	extended-remote expected output.
+
+2012-02-02  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.cp/dispcxx.exp: New file.
+	* gdb.cp/dispcxx.cc: New file.
+
+2012-02-01  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.base/jit-simple.exp: New file.
+	* gdb.base/jit-simple.c: New file.
+
+2012-01-30  Yao Qi  <yao at codesourcery.com>
+
+	* gdb.base/skip.exp: Make test result unique.
+
+2012-01-30  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.base/valgrind-db-attach.exp (attach to debugger): Fix
+	compatibility with valgrind-3.7.0.
+
+2012-01-27  Pedro Alves  <palves at redhat.com>
+
+	* gdb.base/watchpoint.exp (no_hw): New global.
+	(maybe_clean_restart, maybe_reinitialize): If no_hw is set,
+	disable hw watchpoints.
+	(test_wide_location_1, test_wide_location_2): If no_hw is set,
+	don't expect hw watchpoints.
+	(no_hw_watchpoints): Always clean restart.
+	(do_tests): New procedure, factored out from the top level.
+	(top level): Run tests twice.  Once with hw watchpoints enabled,
+	another time with hw watchpoints disabled.
+
+2012-01-27  Pedro Alves  <palves at redhat.com>
+
+	* gdb.base/watchpoint.exp (test_no_hw_watchpoints): New, factored
+	out from the top level.
+	(top level): Call it instead.
+
+2012-01-27  Pedro Alves  <palves at redhat.com>
+
+	* gdb.base/watchpoint.exp (top level): Re-enable hardware
+	watchpoints sooner.
+
+2012-01-27  Pedro Alves  <palves at redhat.com>
+
+	* gdb.base/watchpoint.exp (top level): Delete watch ival3.
+
+2012-01-27  Pedro Alves  <palves at redhat.com>
+
+	* gdb.base/watchpoint.exp (test_watchpoint_in_big_blob): Expect
+	"You may have requested too many hardware
+	breakpoints/watchpoints".
+
+2012-01-27  Pedro Alves  <palves at redhat.com>
+
+	* gdb.base/watchpoint.exp (maybe_clean_restart)
+	(maybe_reinitialize): New.
+	(test_disabling_watchpoints): Call maybe_reinitialize.  Don't
+	expect "hit N times".
+	(test_disabling_watchpoints, test_complex_watchpoint)
+	(test_watchpoint_and_breakpoint, test_inaccessible_watchpoint):
+	Call maybe_clean_restart.
+	(top level): Use clean_restart.  Remove "mips-idt-*"
+	reinitialization.
+
+2012-01-27  Pedro Alves  <palves at redhat.com>
+
+	* gdb.base/watchpoint.exp: Always run test_complex_watchpoint.
+
+2012-01-27  Pedro Alves  <palves at redhat.com>
+
+	* gdb.base/watchpoint.exp: Clean restart after tests that don't
+	require `initialize' anymore.  Remove unnecessary `initialize'
+	calls.
+
+2012-01-27  Pedro Alves  <palves at redhat.com>
+
+	* gdb.base/watchpoint.exp (wp_set): Delete.
+	(initialize, test_simple_watchpoint, top level): Remove dead code.
+
+2012-01-27  Pedro Alves  <palves at redhat.com>
+
+	* gdb.base/watchpoint.exp (test_inaccessible_watchpoint): Fix
+	typo.
+
+2012-01-27  Pedro Alves  <palves at redhat.com>
+
+	* config/extended-gdbserver.exp: New file.
+	* lib/gdbserver-support.exp (gdbserver_start_extended): Extend
+	comment.
+	(gdbserver_start_multi, mi_gdbserver_start_multi): New.
+	* boards/native-extended-gdbserver.exp: New file.
+
+2012-01-26  Pedro Alves  <palves at redhat.com>
+
+	* gdb.base/watchpoint.exp: Replace send_gdb/gdb_expect by gdb_test
+	and gdb_test_multiple.
+
+2012-01-26  Pedro Alves  <palves at redhat.com>
+
+	Make test messages unique, and more identifiable.
+	* gdb.multi/watchpoint-multi.exp: Change test messages.
+
+2012-01-25  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.base/solib-disc.exp: Fix regexps.
+
+2012-01-24  Tom Tromey  <tromey at redhat.com>
+
+	* lib/mi-support.exp (mi_expect_stop): Add special case for
+	solib-event.
+	* gdb.base/catch-load-so.c: New file.
+	* gdb.base/catch-load.exp: New file.
+	* gdb.base/catch-load.c: New file.
+	* gdb.base/break-interp.exp (reach_1): Update regexp.
+
+2012-01-24  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix fuzzy results.
+	* gdb.mi/var-cmd.c (do_locals_tests): Initialize variables lsimple,
+	lpsimple and func.
+
+2012-01-24  Gary Benson  <gbenson at redhat.com>
+
+	Delete #if 0'd out code.
+	* gdb.base/default.exp (info catch): Remove.
+	* gdb.base/gdb_history (info catch): Likewise.
+	* gdb.base/help.exp (info catch): Likewise.
+
+2012-01-24  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix watchpoints to be specific for each inferior.
+	* gdb.multi/watchpoint-multi.c: New file.
+	* gdb.multi/watchpoint-multi.exp: New file.
+
+2012-01-24  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix watchpoints across inferior fork.
+	* gdb.threads/watchpoint-fork-child.c: New file.
+	* gdb.threads/watchpoint-fork-mt.c: New file.
+	* gdb.threads/watchpoint-fork-parent.c: New file.
+	* gdb.threads/watchpoint-fork-st.c: New file.
+	* gdb.threads/watchpoint-fork.exp: New file.
+	* gdb.threads/watchpoint-fork.h: New file.
+
+2012-01-23  Pedro Alves  <palves at redhat.com>
+
+	* gdb.base/call-signal-resume.exp: Allow output after "return".
+
+2012-01-20  Pedro Alves  <palves at redhat.com>
+
+	* gdb.python/py-finish-breakpoint.py: Fix typo.
+
+2012-01-20  Ulrich Weigand  <ulrich.weigand at linaro.org>
+
+	* gdb.base/info-proc.exp: Also run on remote targets.  Main
+	"info proc" command is now always present; whether target supports
+	actual info proc operation is detected when attempting to issue
+	the command.
+
+2012-01-19  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* .gdbinit: Remove.
+
+2012-01-19  Pedro Alves  <palves at redhat.com>
+
+	* gdb.java/jprint.exp: Don't rely on inferior output, but instead
+	look at the funtions' returns.
+	* gdb.java/jprint.java (jvclass.addprint, jprint.print(int))
+	(jprint.print(int, int)): Change return type to int.  Adjust.
+
+2012-01-18  Paul Pluzhnikov  <ppluzhnikov at google.com>
+
+	PR gdb/9538
+	* gdb.base/sepdebug.exp: New test.
+
+2012-01-18  Pedro Alves  <palves at redhat.com>
+
+	* gdb.ada/mi_task_info.exp (-ada-task-info with no argument):
+	Allow output before ^done.
+
+2012-01-16  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.linespec/linespec.exp: Change some tests to use $decimal.
+	Add tests for relative directory.
+
+2012-01-16  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.base/printcmds.c (enum flag_enum): New.
+	(three): New global.
+	* gdb.base/printcmds.exp (test_print_enums): Add test for flag
+	enum printing.
+	* gdb.python/py-pp-maint.py (build_pretty_printer): Instantiate
+	FlagEnumerationPrinter.
+	* gdb.python/py-pp-maint.exp: Add tests for FlagEnumerationPrinter.
+	* gdb.python/py-pp-maint.c (enum flag_enum): New.
+	(fval): New global.
+
+2012-01-16  Pedro Alves  <palves at redhat.com>
+
+	* lib/gdb.exp (banned_procedures): New variable.
+	(banned_variables_traced): Rename to ...
+	(banned_traced): ... this.
+	(gdb_init): Also trace banned procedures.
+	(gdb_finish): Also untrace banned procedures.
+
+2012-01-16  Pedro Alves  <palves at redhat.com>
+
+	Remove all calls to strace.
+
+2012-01-14  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.dwarf2/dw2-namespaceless-anonymous.S: New file.
+	* gdb.dwarf2/dw2-namespaceless-anonymous.exp: New file.
+
+2012-01-13  Paul Pluzhnikov  <ppluzhnikov at google.com>
+
+	* gdb.base/attach-pie-misread.exp: Pass -pie only to the linker.
+	* gdb.base/pie-execl.exp: Likewise.
+
+2012-01-12  Keith Seitz  <keiths at redhat.com>
+
+	PR mi/10586
+	* gdb.mi/var-cmd.c (struct anonymous): New structure.
+	(do_anonymous_type_tests): New function.
+	(main): Call do_anonymous_type_tests.
+	* gdb.mi/mi2-var-child.exp: Add anonymous type tests.
+	(verify_everything): New procedure.
+	* gdb.mi/mi-var-cp.cc (class A): New class.
+	(anonymous_structs_and_unions): New function.
+	(main): Call anonymous_structs_and_unions.
+	* gdb.mi/mi-var-cp.exp: Add anonymous type tests.
+	(verify_everything): New procedure.
+
+2012-01-12  Keith Seitz  <keiths at redhat.com>
+
+	* lib/mi-support.exp: Expand comments about PATH_EXPR.
+	(varobj_tree::get_path_expr): Assume that all varobjs are
+	compound unless they are known simple types.
+	Adjust path expressions based on parent type, path parent type,
+	and tree language.
+	(varobj_tree::walk_tree): Add LANGUAGE parameter and save it into
+	the root varobj.
+	(mi_walk_varobj_tree): Add LANGUAGE parameter.
+
+2012-01-11  Pedro Alves  <palves at redhat.com>
+
+	* gdb.base/default.exp (core-file): Don't expect "GDB can't read
+	core files on this machine" anymore.
+
+2012-01-11  Paul Hilfinger  <hilfingr at adacore.com>
+
+	* gdb.base/watchpoint.c (recurser): Initialize local_x.
+	(main): Repeat recurser call.
+	* gdb.base/watchpoint.exp: Check that 'watch recurser::local_x' is
+	equivalent to 'local_x'.
+
+2012-01-11  Paul Hilfinger  <hilfingr at adacore.com>
+    	    Joel Brobecker <brobecker at adacore.com>
+
+	* gdb.base/recpar.c, gdb.base/recpar.exp: New files.
+
+2012-01-05  Pedro Alves  <alves.ped at gmail.com>
+
+	* gdb.mi/mi-stepn.c, gdb.mi/mi-stepn.exp: New files.
+	* gdb.python/py-events.c (first): Add bits for new "step N" test.
+	* gdb.python/py-events.exp: Test that "step N" tripping on a
+	breakpoint emits a breakpoint event.
+
+2012-01-03  Joel Brobecker  <brobecker at adacore.com>
 
 	* gdb.base/auxv.exp: Reformat the copyright notice.
 
-2012-01-06  Joel Brobecker  <brobecker at adacore.com>
+2012-01-03  Yao Qi  <yao at codesourcery.com>
+
+	* gdb.trace/strace.exp (strace_trace_on_same_addr): New.
+	(strace_trace_on_diff_addr): New.
+	* gdb.trace/strace.c: (main): Add two local variables.
+
+2011-01-02  Ulrich Weigand  <uweigand at de.ibm.com>
+
+	* gdb.cell/fork.exp: Delete breakpoints after reaching main.
+	* gdb.cell/gcore.exp: Likewise.
+	* gdb.cell/solib-symbol.exp: Use "info symbol" instead of "break"
+	to verify the correct instance of main is selected.
+
+2012-01-02  Joel Brobecker  <brobecker at adacore.com>
 
 	* dg-extract-results.sh, gdb.arch/gcore.c, gdb.arch/gdb1558.c,
 	gdb.arch/i386-gnu-cfi.c, gdb.base/complex.c, gdb.base/cvexpr.c,
@@ -16,18 +2742,13 @@
 	gdb.mi/mi2-var-child.exp, gdb.mi/var-cmd.c,
 	gdb.threads/thread_check.c: Reformat copyright header.
 
-2012-01-04  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	Fix compatibility with gcc-4.7.
-	* gdb.python/py-frame-inline.c (f): Use inline for __always_inline__.
-
-2012-01-04  Edjunior Machado  <emachado at linux.vnet.ibm.com>
+2011-12-30  Edjunior Machado  <emachado at linux.vnet.ibm.com>
 
 	* gdb.python/py-finish-breakpoint.exp: Add `.' prefix for ppc64.
 	* gdb.python/py-finish-breakpoint2.exp: Skip testcase if python support
 	is not enabled.
 
-2012-01-04  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2011-12-27  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
 	* gdb.python/py-finish-breakpoint.c (test_exec_exit): Change the
 	parameter to self_exec, adjust the function.
@@ -36,21 +2757,44 @@
 	(set var do_exit = 0): Remove test.
 	(newline at end of file): Add one.
 
-2011-01-04  Joel Brobecker  <brobecker at adacore.com>
+2011-12-27  Joel Brobecker  <brobecker at adacore.com>
 
 	* gdb.base/dmsym.c, gdb.base/dmsym_main.c, gdb.base/dmsym.exp:
 	New files.
 
-2012-01-02  Ulrich Weigand  <uweigand at de.ibm.com>
+2011-12-26  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
-	* gdb.cell/fork.exp: Delete breakpoints after reaching main.
-	* gdb.cell/gcore.exp: Likewise.
-	* gdb.cell/solib-symbol.exp: Use "info symbol" instead of "break"
-	to verify the correct instance of main is selected.
+	Fix racy FAILs.
+	* gdb.threads/fork-thread-pending.c (barrier): New variable.
+	(thread_function, thread_forker): Call pthread_barrier_wait for it.
+	(main): Call pthread_barrier_init for it.
+
+2011-12-26  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Fix double send_gdb leading to racy FAILs.
+	* gdb.base/break.exp (set silent break bp_location1): Replace
+	3x send_gdb and gdb_expect by gdb_test.
+	* gdb.base/fileio.exp: Replace 2x send_gdb by gdb_exit and sleep.
+	* gdb.base/foll-vfork.exp (vfork_and_exec_child_follow_to_main_bp)
+	(vfork_and_exec_child_follow_through_step): Use gdb_test_no_output
+	instead of send_gdb.  Twice.
+	* gdb.base/sepdebug.exp (set silent break bp_location1): Replace
+	3x send_gdb and gdb_expect by gdb_test.
+	* gdb.mi/mi-nsmoribund.exp: Replace 3x send_gdb by mi_gdb_test.
+
+2011-12-23  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.linespec/linespec.exp: Compile using {c++}.
+
+2011-12-23  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.cp/templates.exp (test_template_typedef): Import gdb_prompt.
+	(print destructor of template typedef): Extend it for gcc/51668 XFAIL.
+	(verify GCC PR debug/51668): New test.
 
 2011-12-23  Kevin Pouget  <kevin.pouget at st.com>
 
-	Introduce gdb.FinishBreakpoint in Python
+	Introduce gdb.FinishBreakpoint in Python.
 	* Makefile.in (EXECUTABLES): Add py-finish-breakpoint and
 	py-finish-breakpoint2
 	(MISCALLANEOUS): Add py-events-shlib.so and py-events-shlib-nodebug.so
@@ -63,23 +2807,218 @@
 	* gdb.python/py-finish-breakpoint2.exp: New file.
 	* gdb.python/py-finish-breakpoint2.py: New file.
 
+2011-12-23  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	Partial fix of compatibility with gcc-4.7.
+	* gdb.cp/templates.exp (ptype T5<int>, ptype t5i): Turn all PASS cases
+	into XFAIL "new without size_t".  Permit size_t for the KFAIL case.
+	Add comment to add a PASS case in the future.
+
+	Fix compatibility with gcc-4.7.
+	* gdb.python/py-frame-inline.c (f): Use inline for __always_inline__.
+
 2011-12-21  Ulrich Weigand  <ulrich.weigand at linaro.org>
 
 	PR tdep/12797
 	* gdb.base/callfuncs.exp: Remove KFAIL.
 
+2011-12-21  Joel Brobecker  <brobecker at adacore.com>
+
+	* gdb.ada/task_bp: New testcase.
+
 2011-12-19  Jan Kratochvil  <jan.kratochvil at redhat.com>
 
 	* gdb.base/reread.exp: If srcfile2 fails to build retry it with
 	-DNO_SECTIONS.
 	* gdb.base/reread2.c <!NO_SECTIONS>: New sections block.
 
+2011-12-19  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.cp/ptype-cv-cp.exp (ptype v_volatile_const_my_int): Make
+	PR gcc/45997 XFAIL conditional for gcc <= 4.5.
+	* gdb.python/py-type.exp (python print ttype.template_argument(2)):
+	Change PR gcc/41736 to the more specific PR gcc/46955.  Make it
+	conditional for gcc <= 4.5.
+
+2011-12-19  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.cp/ptype-cv-cp.exp (ptype v_volatile_const_my_int): Replace KFAIL
+	by XFAIL.
+	* gdb.cp/static-method.exp (info addr A::func())
+	(list static-method.cc:xxx::(anonymous namespace)::A::func)
+	(list 'static-method.cc:xxx::(anonymous namespace)::A::func')
+	(list 'static-method.cc':'xxx::(anonymous namespace)::A::func')
+	(list static-method.cc:'xxx::(anonymous namespace)::A::func'): Likewise.
+	* gdb.cp/temargs.exp (test value of F in k2_m, test type of F in k3_m)
+	(test value of F in k3_m): Likewise.
+	* gdb.python/py-type.exp (python print ttype.template_argument(2)):
+	Likewise.
+
+2011-12-19  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* gdb.threads/attach-stopped.exp (continue (*: attach2 continue))
+	(*: attach2 stop interrupt, *: attach2, exit leaves process sleeping):
+	Remove.
+	* gdb.threads/attachstop-mt.c: Remove.
+	* gdb.threads/attachstop-mt.exp: Remove.
+
+2011-12-17  Mark Kettenis  <kettenis at gnu.org>
+
+	* gdb.arch/amd64-i386-address.exp: Skip on *-*-openbsd*.
+
+2011-12-16  Doug Evans  <dje at google.com>
+
+	* boards/native-stdio-gdbserver.exp: New file.
+	* boards/native-gdbserver.exp: New file.
+
+	* lib/gdbserver-support.exp (gdb_target_cmd): Recognize stdio
+	gdbserver output.
+	(gdbserver_default_get_remote_address): New function.
+	(gdbserver_start): Call gdb,get_remote_address to compute argument
+	to "target remote" command.
+
 2011-12-16  Phil Muldoon  <pmuldoon at redhat.com>
 
 	* gdb.python/py-function.exp: Change "on" to "full" for
 	python print-stack.  Add set/show python print-stack
 	off|full|message tests.
 
+2011-12-15  Yao Qi  <yao at codesourcery.com>
+
+	* gdb.trace/strace.c: New
+	* gdb.trace/strace.exp: New.
+
+2011-12-14  Tom Tromey  <tromey at redhat.com>
+
+	* gdb.dwarf2/dw2-inline-param.exp: Log the objcopy command.
+
+2011-12-14  Doug Evans  <dje at google.com>
+
+	* lib/gdb.exp (gdb_start_cmd): Fix error return value.
+
+2011-12-14  Pedro Alves  <pedro at codesourcery.com>
+
+	PR threads/10729
+
+	* gdb.mi/watch-nonstop.c: New file.
+ 	* gdb.mi/mi-watch-nonstop.exp: New file.
+
+2011-12-13  Pedro Alves  <pedro at codesourcery.com>
+	    Doug Evans  <dje at google.com>
+
+	* lib/gdb.exp (gdb_run_cmd, runto_main, gdb_compile)
+	(clean_restart): Remove references to the gdb_stub target board
+	variable.
+	(gdb_step_for_stub): Delete.
+
+	* gdb.base/annota1.exp: Remove all references to [target_info
+	exists gdb_stub], gdb_step_for_stub and usestubs.
+	* gdb.base/annota3.exp: Ditto.
+	* gdb.base/async.exp: Ditto.
+	* gdb.base/break.exp: Ditto.
+	* gdb.base/code-expr.exp: Ditto.
+	* gdb.base/commands.exp: Ditto.
+	* gdb.base/completion.exp: Ditto.
+	* gdb.base/condbreak.exp: Ditto.
+	* gdb.base/consecutive.exp: Ditto.
+	* gdb.base/cvexpr.exp: Ditto.
+	* gdb.base/define.exp: Ditto.
+	* gdb.base/display.exp: Ditto.
+	* gdb.base/ena-dis-br.exp: Ditto.
+	* gdb.base/environ.exp: Ditto.
+	* gdb.base/gnu-ifunc.exp: Ditto.
+	* gdb.base/maint.exp: Ditto.
+	* gdb.base/pending.exp: Ditto.
+	* gdb.base/sect-cmd.exp: Ditto.
+	* gdb.base/sepdebug.exp: Ditto.
+	* gdb.base/unload.exp: Ditto.
+	* gdb.base/watchpoint-solib.exp: Ditto.
+	* gdb.cp/annota2.exp: Ditto.
+	* gdb.cp/annota3.exp: Ditto.
+	* gdb.dwarf2/dw2-inline-param.exp: Ditto.
+	* gdb.hp/gdb.compat/xdb1.exp: Ditto.
+	* gdb.mi/mi-pending.exp: Ditto.
+	* gdb.trace/circ.exp: Ditto.
+	* gdb.cp/ovldbreak.exp: Ditto.  Adjust expected line numbers.
+	* gdb.base/list.exp: Ditto.
+
+	* gdb.base/all-types.c: Remove all calls to set_debug_traps and
+	breakpoint function and all references to the usestubs macro.
+	* gdb.base/exprs.c: Ditto.
+	* gdb.base/freebpcmd.c: Ditto.
+	* gdb.base/bitfields.c: Ditto.
+	* gdb.base/bitfields2.c: Ditto.
+	* gdb.base/break.c: Ditto.
+	* gdb.base/call-sc.c: Ditto.
+	* gdb.base/call-signals.c: Ditto.
+	* gdb.base/callfuncs.c: Ditto.
+	* gdb.base/charset.c: Ditto.
+	* gdb.base/consecutive.c: Ditto.
+	* gdb.base/constvars.c: Ditto.
+	* gdb.base/funcargs.c: Ditto.
+	* gdb.base/int-type.c: Ditto.
+	* gdb.base/interrupt.c: Ditto.
+	* gdb.base/langs0.c: Ditto.
+	* gdb.base/list0.c: Ditto.
+	* gdb.base/mips_pro.c: Ditto.
+	* gdb.base/miscexprs.c: Ditto.
+	* gdb.base/nodebug.c: Ditto.
+	* gdb.base/opaque0.c: Ditto.
+	* gdb.base/pointers.c: Ditto.
+	* gdb.base/printcmds.c: Ditto.
+	* gdb.base/ptype.c: Ditto.
+	* gdb.base/recurse.c: Ditto.
+	* gdb.base/reread1.c: Ditto.
+	* gdb.base/reread2.c: Ditto.
+	* gdb.base/restore.c: Ditto.
+	* gdb.base/return.c: Ditto.
+	* gdb.base/run.c: Ditto.
+	* gdb.base/scope0.c: Ditto.
+	* gdb.base/sepdebug.c: Ditto.
+	* gdb.base/setshow.c: Ditto.
+	* gdb.base/setvar.c: Ditto.
+	* gdb.base/sigall.c: Ditto.
+	* gdb.base/signals.c: Ditto.
+	* gdb.base/structs.c: Ditto.
+	* gdb.base/structs2.c: Ditto.
+	* gdb.base/testenv.c: Ditto.
+	* gdb.base/twice.c: Ditto.
+	* gdb.base/unwindonsignal.c: Ditto.
+	* gdb.base/watchpoint.c: Ditto.
+	* gdb.base/watchpoints.c: Ditto.
+	* gdb.base/whatis.c: Ditto.
+	* gdb.cp/classes.cc: Ditto.
+	* gdb.cp/cplusfuncs.cc: Ditto.
+	* gdb.cp/derivation.cc: Ditto.
+	* gdb.cp/formatted-ref.cc: Ditto.
+	* gdb.cp/misc.cc: Ditto.
+	* gdb.cp/overload.cc: Ditto.
+	* gdb.cp/ovldbreak.cc: Ditto.
+	* gdb.cp/ref-params.cc: Ditto.
+	* gdb.cp/ref-types.cc: Ditto.
+	* gdb.cp/templates.cc: Ditto.
+	* gdb.cp/virtfunc.cc: Ditto.
+	* gdb.hp/gdb.aCC/run.c: Ditto.
+	* gdb.hp/gdb.base-hp/callfwmall.c: Ditto.
+	* gdb.hp/gdb.compat/xdb0.c: Ditto.
+	* gdb.reverse/consecutive-reverse.c: Ditto.
+	* gdb.reverse/sigall-reverse.c: Ditto.
+	* gdb.reverse/until-reverse.c: Ditto.
+	* gdb.reverse/watch-reverse.c: Ditto.
+	* gdb.trace/actions.c: Ditto.
+	* gdb.trace/circ.c: Ditto.
+	* gdb.trace/collection.c: Ditto.
+
+2011-12-13  Pedro Alves  <pedro at codesourcery.com>
+
+	* gdb.base/watchpoint.c (struct foo2, foo2, struct foo4, foo4)
+	(func6, func7): New.
+	(main): Call func6 and func7.
+	* gdb.base/watchpoint.exp (test_wide_location_1)
+	(test_wide_location_2): New.
+	(top level): Re-enable hardware watchpoints if necessary.  Call
+	test_wide_location_1 and test_wide_location_2.
+
 2011-12-11  Yao Qi  <yao at codesourcery.com>
 
 	* gdb.trace/status-stop.exp: Skip it if target doesn't support trace.
diff --git a/gdb/testsuite/Makefile.in b/gdb/testsuite/Makefile.in
index b06c382..fab124e 100644
--- a/gdb/testsuite/Makefile.in
+++ b/gdb/testsuite/Makefile.in
@@ -120,6 +120,7 @@ $(abs_builddir)/site.exp site.exp: ./config.status Makefile
 	@echo "set build_triplet ${build_canonical}" >> ./tmp0
 	@echo "set srcdir ${srcdir}" >> ./tmp0
 	@echo "set tool gdb" >> ./tmp0
+	@echo 'source $${srcdir}/lib/append_gdb_boards_dir.exp' >> ./tmp0
 	@echo "## All variables above are generated by configure. Do Not Edit ##" >> ./tmp0
 		@cat ./tmp0 > site.exp
 	@cat site.bak | sed \
@@ -214,6 +215,7 @@ subdirs:
 clean mostlyclean:
 	-rm -f *~ core *.o a.out xgdb *.x *.grt bigcore.corefile .gdb_history
 	-rm -f core.* *.tf *.cl *.py tracecommandsscript copy1.txt zzz-gdbscript
+	-rm -f *.dwo *.dwp
 	if [ x"${ALL_SUBDIRS}" != x ] ; then \
 	    for dir in ${ALL_SUBDIRS}; \
 	    do \
diff --git a/gdb/testsuite/boards/native-extended-gdbserver.exp b/gdb/testsuite/boards/native-extended-gdbserver.exp
new file mode 100644
index 0000000..e7d3838
--- /dev/null
+++ b/gdb/testsuite/boards/native-extended-gdbserver.exp
@@ -0,0 +1,150 @@
+# Copyright 2011-2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# This file is a dejagnu "board file" and is used to run the testsuite
+# natively with gdbserver, in extended-remote mode.
+#
+# To use this file:
+# bash$ touch ${my_dejagnu_dir}/my-dejagnu.exp
+# bash$ export DEJAGNU=${my_dejagnu_dir}/my-dejagnu.exp
+# bash$ mkdir ${my_dejagnu_dir}/boards
+# bash$ cp ${src_dir}/gdb/testsuite/boards/native-extended-gdbserver.exp \
+#   ${my_dejagnu_dir}/boards
+# bash$ cd ${build_dir}/gdb
+# bash$ make check RUNTESTFLAGS="--target_board=native-extended-gdbserver"
+
+load_generic_config "extended-gdbserver"
+
+# By default, dejagnu makes the board remote unless the board name
+# matches localhost.  Force it to be NOT remote.
+global board
+global board_info
+set board_info($board,isremote) 0
+
+process_multilib_options ""
+
+# The default compiler for this target.
+set_board_info compiler "[find_gcc]"
+
+# Can't do input (or output) in the current gdbserver.
+set_board_info gdb,noinferiorio 1
+
+# gdbserver does not intercept target file operations and perform them
+# on the host.
+set_board_info gdb,nofileio 1
+
+set_board_info sockethost "localhost:"
+
+# We will be using the extended GDB remote protocol.
+set_board_info gdb_protocol "extended-remote"
+
+# Test the copy of gdbserver in the build directory.
+set_board_info gdb_server_prog "../gdbserver/gdbserver"
+
+send_user "configuring for gdbserver local testing (extended-remote)\n";
+
+# We must load this explicitly here, and rename the procedures we want
+# to override.  If we didn't do this, given that mi-support.exp is
+# loaded later in the test files, the procedures loaded then would
+# override our definitions.
+load_lib mi-support.exp
+
+# Overriden in order to start a "gdbserver --multi" instance whenever
+# GDB is started.  Note nothing is needed for gdb_exit, since
+# gdbserver is started with --once, causing it to exit once GDB
+# disconnects.
+proc gdb_start { } {
+    # Spawn GDB.
+    default_gdb_start
+
+    # And then GDBserver, ready for extended-remote mode.
+    gdbserver_start_multi
+
+    return 0
+}
+
+# Likewise, for MI.
+#
+if { [info procs extended_gdbserver_mi_gdb_start] == "" } {
+    rename mi_gdb_start extended_gdbserver_mi_gdb_start
+}
+proc mi_gdb_start { args } {
+    # Spawn GDB.
+    set res [extended_gdbserver_mi_gdb_start $args]
+    if { $res } {
+	return $res
+    }
+
+    # And then GDBserver, ready for extended-remote mode.
+    mi_gdbserver_start_multi
+    return 0
+}
+
+# Overriden in order to set the remote exec-file whenever a file is
+# loaded to gdb.
+#
+proc gdb_load { arg } {
+    global gdb_prompt
+
+    if { $arg != "" } {
+	if [gdb_file_cmd $arg] then { return -1 }
+    }
+
+    send_gdb "set remote exec-file $arg\n"
+    gdb_expect {
+	-re "$gdb_prompt $" {}
+	timeout {
+	    perror "couldn't set the remote exec-file (timed out)."
+	    return -1
+	}
+    }
+
+    return 0
+}
+
+# Likewise, for MI.
+#
+if { [info procs extended_gdbserver_mi_gdb_load] == "" } {
+    rename mi_gdb_load extended_gdbserver_mi_gdb_load
+}
+proc mi_gdb_load { arg } {
+    global mi_gdb_prompt
+
+    set res [extended_gdbserver_mi_gdb_load $arg]
+    if { $res } then { return -1 }
+
+    send_gdb "100-gdb-set remote exec-file $arg\n"
+    gdb_expect 10 {
+	-re ".*100-gdb-set remote exec-file $arg\r\n100\\\^done\r\n$mi_gdb_prompt$" {
+	    verbose "set the remote exec-file to $arg."
+	}
+	timeout {
+	    perror "couldn't set the remote exec-file (timed out)."
+	}
+    }
+
+    return 0
+}
+
+proc ${board}_download { board host dest } {
+    return $host
+}
+
+proc ${board}_file { dest op args } {
+    if { $op == "delete" } {
+	return 0
+    }
+    return [eval [list standard_file $dest $op] $args]
+}
diff --git a/gdb/testsuite/boards/native-gdbserver.exp b/gdb/testsuite/boards/native-gdbserver.exp
new file mode 100644
index 0000000..89702df
--- /dev/null
+++ b/gdb/testsuite/boards/native-gdbserver.exp
@@ -0,0 +1,88 @@
+# Copyright 2011-2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# This file is a dejagnu "board file" and is used to run the testsuite
+# natively with gdbserver.
+#
+# To use this file:
+# bash$ touch ${my_dejagnu_dir}/my-dejagnu.exp
+# bash$ export DEJAGNU=${my_dejagnu_dir}/my-dejagnu.exp
+# bash$ mkdir ${my_dejagnu_dir}/boards
+# bash$ cp ${src_dir}/gdb/testsuite/boards/native-gdbserver.exp \
+#   ${my_dejagnu_dir}/boards
+# bash$ cd ${build_dir}/gdb
+# bash$ make check RUNTESTFLAGS="--target_board=native-gdbserver"
+
+load_generic_config "gdbserver"
+process_multilib_options ""
+
+# The default compiler for this target.
+set_board_info compiler "[find_gcc]"
+
+# This gdbserver can only run a process once per session.
+set_board_info gdb,do_reload_on_run 1
+
+# There's no support for argument-passing (yet).
+set_board_info noargs 1
+
+# Can't do input (or output) in the current gdbserver.
+set_board_info gdb,noinferiorio 1
+
+# gdbserver does not intercept target file operations and perform them
+# on the host.
+set_board_info gdb,nofileio 1
+
+set_board_info sockethost "localhost:"
+set_board_info use_gdb_stub 1
+
+# We will be using the standard GDB remote protocol.
+set_board_info gdb_protocol "remote"
+# Test the copy of gdbserver in the build directory.
+set_board_info gdb_server_prog "../gdbserver/gdbserver"
+
+proc ${board}_spawn { board cmd } {
+    global board_info
+
+    set baseboard [lindex [split $board "/"] 0]
+
+    set board_info($baseboard,isremote) 0
+    set result [remote_spawn $board $cmd]
+    set board_info($baseboard,isremote) 1
+
+    return $result
+}
+
+proc ${board}_exec { hostname program args } {
+    global board_info
+
+    set baseboard [lindex [split $hostname "/"] 0]
+
+    set board_info($baseboard,isremote) 0
+    set result [remote_exec $hostname $program $args]
+    set board_info($baseboard,isremote) 1
+
+    return $result
+}
+
+proc ${board}_download { board host dest } {
+    return $host
+}
+
+proc ${board}_file { dest op args } {
+    if { $op == "delete" } {
+	return 0
+    }
+    return [eval [list standard_file $dest $op] $args]
+}
diff --git a/gdb/testsuite/boards/native-stdio-gdbserver.exp b/gdb/testsuite/boards/native-stdio-gdbserver.exp
new file mode 100644
index 0000000..9804289
--- /dev/null
+++ b/gdb/testsuite/boards/native-stdio-gdbserver.exp
@@ -0,0 +1,150 @@
+# Copyright 2011-2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# This file is a dejagnu "board file" and is used to run the testsuite
+# natively with gdbserver using stdio for comms.
+#
+# To use this file:
+# bash$ touch ${my_dejagnu_dir}/my-dejagnu.exp
+# bash$ export DEJAGNU=${my_dejagnu_dir}/my-dejagnu.exp
+# bash$ mkdir ${my_dejagnu_dir}/boards
+# bash$ cp ${src_dir}/gdb/testsuite/boards/native-stdio-gdbserver.exp \
+#   ${my_dejagnu_dir}/boards
+# bash$ cd ${build_dir}/gdb
+# bash$ make check RUNTESTFLAGS="--target_board=native-stdio-gdbserver"
+
+load_generic_config "gdbserver"
+process_multilib_options ""
+
+# The default compiler for this target.
+set_board_info compiler "[find_gcc]"
+
+# This gdbserver can only run a process once per session.
+set_board_info gdb,do_reload_on_run 1
+
+# There's no support for argument-passing (yet).
+set_board_info noargs 1
+
+# Can't do input (or output) in the current gdbserver.
+set_board_info gdb,noinferiorio 1
+
+# gdbserver does not intercept target file operations and perform them
+# on the host.
+set_board_info gdb,nofileio 1
+
+# Hack into sockethost to pass our peculiar remote connection string.
+set_board_info sockethost "stdio"
+set_board_info gdb,socketport ""
+set_board_info gdb,get_remote_address ${board}_get_remote_address
+set_board_info use_gdb_stub 1
+
+# We will be using the standard GDB remote protocol.
+set_board_info gdb_protocol "remote"
+# Test the copy of gdbserver in the build directory.
+set_board_info gdb_server_prog "../gdbserver/gdbserver"
+
+# The argument to pass to "target remote".
+# We build this once we know how the testsuite will start gdbserver.
+set stdio_gdbserver_template "| @GDBSERVER_PROG@ @ARGS@ stdio @PROG_AND_ARGS@"
+
+# Used to pass a value between ${board}_spawn and ${board}_get_remote_address.
+set stdio_gdbserver_command "--unset--"
+
+proc ${board}_get_remote_address { host port } {
+    global stdio_gdbserver_command
+    return $stdio_gdbserver_command
+}
+
+proc ${board}_build_remote_cmd { cmd } {
+    global stdio_gdbserver_template
+
+    # First parse $cmd, picking out the various pieces.
+    set gdbserver_prog [lindex $cmd 0]
+    set args ""
+    set len [llength $cmd]
+
+    for { set i 1 } { $i < $len } { incr i } {
+	set elm [lindex $cmd $i]
+	switch $elm {
+	    --multi {
+		set args "$args $elm"
+	    }
+	    --once {
+		set args "$args $elm"
+	    }
+	    default {
+		break
+	    }
+	}
+    }
+
+    set prog_and_args [lrange $cmd $i end]
+
+    set buf $stdio_gdbserver_template
+
+    regsub {@GDBSERVER_PROG@} $buf $gdbserver_prog buf
+    regsub {@ARGS@} $buf $args buf
+    regsub {@PROG_AND_ARGS@} $buf $prog_and_args buf
+
+    return $buf
+}
+
+proc ${board}_spawn { board cmd } {
+    global board_info
+
+    verbose -log "${board}_spawn: $board $cmd"
+
+    # Convert the command to start gdbserver to something to pass to
+    # "target remote | ..." and save it for later retrieval by
+    # ${board}_get_remote_address.
+    global stdio_gdbserver_command
+    set stdio_gdbserver_command [${board}_build_remote_cmd $cmd]
+    verbose -log "gdbserver_command: $stdio_gdbserver_command"
+
+    set baseboard [lindex [split $board "/"] 0]
+
+    # We don't spawn gdbserver here, that is done by the subsequent
+    # "target remote | ..." command.
+    set board_info($baseboard,isremote) 0
+    # Pretend as if we've started gdbserver, provide the test harness
+    # with what it's waiting for.
+    set result [remote_spawn $board "echo Listening on stdio"]
+    set board_info($baseboard,isremote) 1
+
+    return $result
+}
+
+proc ${board}_exec { hostname program args } {
+    global board_info
+
+    set baseboard [lindex [split $hostname "/"] 0]
+
+    set board_info($baseboard,isremote) 0
+    set result [remote_exec $hostname $program $args]
+    set board_info($baseboard,isremote) 1
+
+    return $result
+}
+
+proc ${board}_download { board host dest } {
+    return $host
+}
+
+proc ${board}_file { dest op args } {
+    if { $op == "delete" } {
+	return 0
+    }
+    return [eval [list standard_file $dest $op] $args]
+}
diff --git a/gdb/testsuite/config/extended-gdbserver.exp b/gdb/testsuite/config/extended-gdbserver.exp
new file mode 100644
index 0000000..7166b66
--- /dev/null
+++ b/gdb/testsuite/config/extended-gdbserver.exp
@@ -0,0 +1,27 @@
+# Copyright 2000, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
+# Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+#
+# This module is used for testing GDB using GDBserver in
+# extended-remote mode.
+#
+
+# The guts live in gdbserver-support.exp.
+load_lib gdbserver-support.exp
+
+proc gdb_reconnect { } {
+    return [gdbserver_reconnect]
+}
diff --git a/gdb/testsuite/configure b/gdb/testsuite/configure
index fb70b3d..0c8c344 100755
--- a/gdb/testsuite/configure
+++ b/gdb/testsuite/configure
@@ -3448,7 +3448,7 @@ done
 
 
 
-ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cell/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.server/Makefile gdb.java/Makefile gdb.hp/Makefile gdb.hp/gdb.objdbg/Makefile gdb.hp/gdb.base-hp/Makefile gdb.hp/gdb.aCC/Makefile gdb.hp/gdb.compat/Makefile gdb.hp/gdb.defects/Makefile gdb.linespec/Makefile gdb.mi/Makefile gdb.modula2/Makefile gdb.multi/Makefile gdb.objc/Makefile gdb.opencl/Makefile gdb.opt/Makefile gdb.pascal/Makefile gdb.python/Makefile gdb.reverse/Makefile gdb.stabs/Makefile gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile"
+ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cell/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.go/Makefile gdb.server/Makefile gdb.java/Makefile gdb.hp/Makefile gdb.hp/gdb.objdbg/Makefile gdb.hp/gdb.base-hp/Makefile gdb.hp/gdb.aCC/Makefile gdb.hp/gdb.compat/Makefile gdb.hp/gdb.defects/Makefile gdb.linespec/Makefile gdb.mi/Makefile gdb.modula2/Makefile gdb.multi/Makefile gdb.objc/Makefile gdb.opencl/Makefile gdb.opt/Makefile gdb.pascal/Makefile gdb.python/Makefile gdb.reverse/Makefile gdb.stabs/Makefile gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -4158,6 +4158,7 @@ do
     "gdb.disasm/Makefile") CONFIG_FILES="$CONFIG_FILES gdb.disasm/Makefile" ;;
     "gdb.dwarf2/Makefile") CONFIG_FILES="$CONFIG_FILES gdb.dwarf2/Makefile" ;;
     "gdb.fortran/Makefile") CONFIG_FILES="$CONFIG_FILES gdb.fortran/Makefile" ;;
+    "gdb.go/Makefile") CONFIG_FILES="$CONFIG_FILES gdb.go/Makefile" ;;
     "gdb.server/Makefile") CONFIG_FILES="$CONFIG_FILES gdb.server/Makefile" ;;
     "gdb.java/Makefile") CONFIG_FILES="$CONFIG_FILES gdb.java/Makefile" ;;
     "gdb.hp/Makefile") CONFIG_FILES="$CONFIG_FILES gdb.hp/Makefile" ;;
diff --git a/gdb/testsuite/configure.ac b/gdb/testsuite/configure.ac
index 5735805..d9ab9f7 100644
--- a/gdb/testsuite/configure.ac
+++ b/gdb/testsuite/configure.ac
@@ -91,7 +91,7 @@ AC_OUTPUT([Makefile \
   gdb.ada/Makefile \
   gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile \
   gdb.cell/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile \
-  gdb.fortran/Makefile gdb.server/Makefile gdb.java/Makefile \
+  gdb.fortran/Makefile gdb.go/Makefile gdb.server/Makefile gdb.java/Makefile \
   gdb.hp/Makefile gdb.hp/gdb.objdbg/Makefile gdb.hp/gdb.base-hp/Makefile \
   gdb.hp/gdb.aCC/Makefile gdb.hp/gdb.compat/Makefile \
   gdb.hp/gdb.defects/Makefile gdb.linespec/Makefile \
diff --git a/gdb/testsuite/dg-extract-results.sh b/gdb/testsuite/dg-extract-results.sh
index ca2faa4..7795082 100755
--- a/gdb/testsuite/dg-extract-results.sh
+++ b/gdb/testsuite/dg-extract-results.sh
@@ -345,7 +345,7 @@ EOF
 BEGIN {
   variant="$VAR"
   tool="$TOOL"
-  passcnt=0; failcnt=0; untstcnt=0; xpasscnt=0; xfailcnt=0; unsupcnt=0; unrescnt=0;
+  passcnt=0; failcnt=0; untstcnt=0; xpasscnt=0; xfailcnt=0; kfailcnt=0; unsupcnt=0; unrescnt=0;
   curvar=""; insummary=0
 }
 /^Running target /		{ curvar = \$3; next }
@@ -354,6 +354,7 @@ BEGIN {
 /^# of unexpected successes/	{ if (insummary == 1) xpasscnt += \$5; next; }
 /^# of unexpected failures/	{ if (insummary == 1) failcnt += \$5; next; }
 /^# of expected failures/	{ if (insummary == 1) xfailcnt += \$5; next; }
+/^# of known failures/		{ if (insummary == 1) kfailcnt += \$5; next; }
 /^# of untested testcases/	{ if (insummary == 1) untstcnt += \$5; next; }
 /^# of unresolved testcases/	{ if (insummary == 1) unrescnt += \$5; next; }
 /^# of unsupported tests/	{ if (insummary == 1) unsupcnt += \$5; next; }
@@ -368,6 +369,7 @@ END {
   if (failcnt != 0) printf ("# of unexpected failures\t%d\n", failcnt)
   if (xpasscnt != 0) printf ("# of unexpected successes\t%d\n", xpasscnt)
   if (xfailcnt != 0) printf ("# of expected failures\t\t%d\n", xfailcnt)
+  if (kfailcnt != 0) printf ("# of known failures\t\t%d\n", kfailcnt)
   if (untstcnt != 0) printf ("# of untested testcases\t\t%d\n", untstcnt)
   if (unrescnt != 0) printf ("# of unresolved testcases\t%d\n", unrescnt)
   if (unsupcnt != 0) printf ("# of unsupported tests\t\t%d\n", unsupcnt)
@@ -391,12 +393,13 @@ TOTAL_AWK=${TMP}/total.awk
 cat << EOF > $TOTAL_AWK
 BEGIN {
   tool="$TOOL"
-  passcnt=0; failcnt=0; untstcnt=0; xpasscnt=0; xfailcnt=0; unsupcnt=0; unrescnt=0
+  passcnt=0; failcnt=0; untstcnt=0; xpasscnt=0; xfailcnt=0; kfailcnt=0; unsupcnt=0; unrescnt=0
 }
 /^# of expected passes/		{ passcnt += \$5 }
 /^# of unexpected failures/	{ failcnt += \$5 }
 /^# of unexpected successes/	{ xpasscnt += \$5 }
 /^# of expected failures/	{ xfailcnt += \$5 }
+/^# of known failures/		{ kfailcnt += \$5 }
 /^# of untested testcases/	{ untstcnt += \$5 }
 /^# of unresolved testcases/	{ unrescnt += \$5 }
 /^# of unsupported tests/	{ unsupcnt += \$5 }
@@ -406,6 +409,7 @@ END {
   if (failcnt != 0) printf ("# of unexpected failures\t%d\n", failcnt)
   if (xpasscnt != 0) printf ("# of unexpected successes\t%d\n", xpasscnt)
   if (xfailcnt != 0) printf ("# of expected failures\t\t%d\n", xfailcnt)
+  if (kfailcnt != 0) printf ("# of known failures\t\t%d\n", kfailcnt)
   if (untstcnt != 0) printf ("# of untested testcases\t\t%d\n", untstcnt)
   if (unrescnt != 0) printf ("# of unresolved testcases\t%d\n", unrescnt)
   if (unsupcnt != 0) printf ("# of unsupported tests\t\t%d\n", unsupcnt)
diff --git a/gdb/testsuite/gdb.ada/Makefile.in b/gdb/testsuite/gdb.ada/Makefile.in
index 9b8a417..d9a3c79 100644
--- a/gdb/testsuite/gdb.ada/Makefile.in
+++ b/gdb/testsuite/gdb.ada/Makefile.in
@@ -54,6 +54,8 @@ clean mostlyclean:
 	-find . -name 'b~*.ad[sb]' -print | xargs rm -f
 	-rm -f *~ a.out xgdb *.x *.ci *.tmp
 	-rm -f *~ *.o a.out xgdb *.x *.ci *.tmp
+	-find . -name '*.dwo' -print | xargs rm -f
+	-find . -name '*.dwp' -print | xargs rm -f
 	-rm -f core core.coremaker coremaker.core corefile $(EXECUTABLES)
 	-rm -f $(MISCELLANEOUS) twice-tmp.c
 
diff --git a/gdb/testsuite/gdb.ada/aliased_array.exp b/gdb/testsuite/gdb.ada/aliased_array.exp
new file mode 100644
index 0000000..9fe30df
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/aliased_array.exp
@@ -0,0 +1,36 @@
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib "ada.exp"
+
+if { [skip_ada_tests] } { return -1 }
+
+set testdir "aliased_array"
+set testfile "${testdir}/foo"
+set srcfile ${srcdir}/${subdir}/${testfile}.adb
+set binfile ${objdir}/${subdir}/${testfile}
+
+file mkdir ${objdir}/${subdir}/${testdir}
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable {debug}] != ""} {
+    return -1
+}
+
+clean_restart ${testfile}
+
+set bp_location [gdb_get_line_number "STOP" ${testdir}/foo.adb]
+runto "foo.adb:$bp_location"
+
+gdb_test "print bt" " = \\(1, 2, 3\\)"
+
diff --git a/gdb/testsuite/gdb.ada/aliased_array/foo.adb b/gdb/testsuite/gdb.ada/aliased_array/foo.adb
new file mode 100644
index 0000000..28acc87
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/aliased_array/foo.adb
@@ -0,0 +1,22 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+with Pck; use Pck;
+procedure Foo is
+   BT : aliased Bounded := New_Bounded (Low => 1, High => 3);
+begin
+   Do_Nothing (BT'Address); -- STOP
+end Foo;
+
diff --git a/gdb/testsuite/gdb.ada/aliased_array/pck.adb b/gdb/testsuite/gdb.ada/aliased_array/pck.adb
new file mode 100644
index 0000000..29de743
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/aliased_array/pck.adb
@@ -0,0 +1,30 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+package body Pck is
+   function New_Bounded (Low, High : Integer) return Bounded is
+      Result : Bounded (Low .. High);
+   begin
+      for J in Low .. High loop
+         Result (J) := J;
+      end loop;
+      return Result;
+   end New_Bounded;
+
+   procedure Do_Nothing (A : System.Address) is
+   begin
+      null;
+   end Do_Nothing;
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/aliased_array/pck.ads b/gdb/testsuite/gdb.ada/aliased_array/pck.ads
new file mode 100644
index 0000000..bfff520
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/aliased_array/pck.ads
@@ -0,0 +1,21 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+with System;
+package Pck is
+   type Bounded is array (Integer range <>) of Integer;
+   function New_Bounded (Low, High : Integer) return Bounded;
+   procedure Do_Nothing (A : System.Address);
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/array_bounds.exp b/gdb/testsuite/gdb.ada/array_bounds.exp
index b47ef3a..493c7c3 100644
--- a/gdb/testsuite/gdb.ada/array_bounds.exp
+++ b/gdb/testsuite/gdb.ada/array_bounds.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "array_bounds"
@@ -31,7 +27,7 @@ if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" }
 
 clean_restart ${testfile}
 
-set bp_location [gdb_get_line_number "STOP" ${testdir}/bar.adb]
+set bp_location [gdb_get_line_number "START" ${testdir}/bar.adb]
 if ![runto "bar.adb:$bp_location" ] then {
   perror "Couldn't run ${testfile}"
   return
diff --git a/gdb/testsuite/gdb.ada/array_return.exp b/gdb/testsuite/gdb.ada/array_return.exp
index f5f1d68..c72f8cf 100644
--- a/gdb/testsuite/gdb.ada/array_return.exp
+++ b/gdb/testsuite/gdb.ada/array_return.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 if { [skip_ada_tests] } { return -1 }
diff --git a/gdb/testsuite/gdb.ada/array_subscript_addr.exp b/gdb/testsuite/gdb.ada/array_subscript_addr.exp
index cfad5a0..aa10b27 100644
--- a/gdb/testsuite/gdb.ada/array_subscript_addr.exp
+++ b/gdb/testsuite/gdb.ada/array_subscript_addr.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "array_subscript_addr"
diff --git a/gdb/testsuite/gdb.ada/arrayidx.exp b/gdb/testsuite/gdb.ada/arrayidx.exp
index 0373cc3..5de1145 100644
--- a/gdb/testsuite/gdb.ada/arrayidx.exp
+++ b/gdb/testsuite/gdb.ada/arrayidx.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 if { [skip_ada_tests] } { return -1 }
@@ -31,6 +27,12 @@ if {[gdb_compile_ada "${srcfile}" "${binfile}" executable {debug}] != ""} {
     return -1
 }
 
+if [get_compiler_info] {
+    return -1;
+}
+set old_gcc [expr [test_compiler_info {gcc-[0-3]-*}] \
+	     || [test_compiler_info {gcc-4-[0-6]-*}]]
+
 clean_restart ${testfile}
 
 set bp_location [gdb_get_line_number "START" ${testdir}/p.adb]
@@ -40,6 +42,9 @@ runto "p.adb:$bp_location"
 
 gdb_test_no_output "set print array-indexes off"
 
+if $old_gcc {
+    setup_xfail "*-*-*"
+}
 gdb_test "print one_two_three" \
          "= \\(1, 2, 3\\)" \
          "print one_two_three, indexes off"
@@ -57,17 +62,26 @@ gdb_test "print u_one_two_three" \
          "print u_one_two_three, indexes off"
 
 gdb_test "print p_one_two_three" \
-         "= \\(0 => false, true, true\\)" \
+         "= \\(false, true, true\\)" \
          "print p_one_two_three, indexes off"
 
+if $old_gcc {
+    setup_xfail "*-*-*"
+}
 gdb_test "print few_reps" \
          "= \\(1, 2, 3, 3, 3, 3, 3, 4, 5\\)" \
          "print few_reps, indexes off"
 
+if $old_gcc {
+    setup_xfail "*-*-*"
+}
 gdb_test "print many_reps" \
          "= \\(1, 2, 3 <repeats 12 times>, 4, 5\\)" \
          "print many_reps, indexes off"
 
+if $old_gcc {
+    setup_xfail "*-*-*"
+}
 gdb_test "print empty" \
          "= \\(\\)" \
          "print empty, indexes off"
@@ -76,6 +90,9 @@ gdb_test "print empty" \
 
 gdb_test_no_output "set print array-indexes on"
 
+if $old_gcc {
+    setup_xfail "*-*-*"
+}
 gdb_test "print one_two_three" \
          "= \\(1 => 1, 2 => 2, 3 => 3\\)" \
          "print one_two_three"
@@ -93,17 +110,26 @@ gdb_test "print u_one_two_three" \
          "print u_one_two_three"
 
 gdb_test "print p_one_two_three" \
-         "= \\(0 => false, 1 => true, 2 => true\\)" \
+         "= \\(one => false, two => true, three => true\\)" \
          "print p_one_two_three"
 
+if $old_gcc {
+    setup_xfail "*-*-*"
+}
 gdb_test "print few_reps" \
          "= \\(1 => 1, 2 => 2, 3 => 3, 4 => 3, 5 => 3, 6 => 3, 7 => 3, 8 => 4, 9 => 5\\)" \
          "print few_reps"
 
+if $old_gcc {
+    setup_xfail "*-*-*"
+}
 gdb_test "print many_reps" \
          "= \\(1 => 1, 2 => 2, 3 => 3 <repeats 12 times>, 15 => 4, 16 => 5\\)" \
          "print many_reps"
 
+if $old_gcc {
+    setup_xfail "*-*-*"
+}
 gdb_test "print empty" \
          "= \\(\\)" \
          "print empty"
diff --git a/gdb/testsuite/gdb.ada/arrayparam.exp b/gdb/testsuite/gdb.ada/arrayparam.exp
index 5c6ae00..d1549df 100644
--- a/gdb/testsuite/gdb.ada/arrayparam.exp
+++ b/gdb/testsuite/gdb.ada/arrayparam.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "arrayparam"
diff --git a/gdb/testsuite/gdb.ada/arrayptr.exp b/gdb/testsuite/gdb.ada/arrayptr.exp
index d80ee8e..192feb1 100644
--- a/gdb/testsuite/gdb.ada/arrayptr.exp
+++ b/gdb/testsuite/gdb.ada/arrayptr.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "arrayptr"
diff --git a/gdb/testsuite/gdb.ada/assign_1.exp b/gdb/testsuite/gdb.ada/assign_1.exp
index 1aa49e8..c27e6d0 100644
--- a/gdb/testsuite/gdb.ada/assign_1.exp
+++ b/gdb/testsuite/gdb.ada/assign_1.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 gdb_exit
diff --git a/gdb/testsuite/gdb.ada/atomic_enum.exp b/gdb/testsuite/gdb.ada/atomic_enum.exp
index 2acbfca..e0ac214 100644
--- a/gdb/testsuite/gdb.ada/atomic_enum.exp
+++ b/gdb/testsuite/gdb.ada/atomic_enum.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "atomic_enum"
diff --git a/gdb/testsuite/gdb.ada/bad-task-bp-keyword.exp b/gdb/testsuite/gdb.ada/bad-task-bp-keyword.exp
new file mode 100644
index 0000000..2d2c891
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/bad-task-bp-keyword.exp
@@ -0,0 +1,52 @@
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib "ada.exp"
+
+set testdir "bad-task-bp-keyword"
+set testfile "${testdir}/foo"
+set srcfile ${srcdir}/${subdir}/${testfile}.adb
+set binfile ${objdir}/${subdir}/${testfile}
+
+file mkdir ${objdir}/${subdir}/${testdir}
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } {
+  return -1
+}
+
+clean_restart ${testfile}
+
+# Star the program in order to have some tasks running...
+set bp_location [gdb_get_line_number "STOP_HERE" ${testdir}/foo.adb]
+runto "foo.adb:$bp_location"
+
+# Try inserting a breakpoint on task 2, but using the wrong capitalization
+# on the 'task' keyword ("TASK" instead of "task").  The debugger should
+# report an error.  Try various weird combinations too.
+
+gdb_test "break *break_me'address TASK 2" \
+         "Garbage 'TASK 2' at end of command"
+
+set test "break *break_me'address TASK Task TaSK 2"
+gdb_test_multiple "$test" $test {
+    -re "Garbage 'TASK Task TaSK 2' at end of command\[\r\n\]+$gdb_prompt $" {
+        pass $test
+        }
+    -re "Garbage 'TaSK 2' at end of command\[\r\n\]+$gdb_prompt $" {
+        kfail gdb/14111 "$test"
+        }
+}
+
+gdb_test "break *break_me'address TASK if" \
+         "Garbage 'TASK if' at end of command"
diff --git a/gdb/testsuite/gdb.ada/tasks/foo.adb b/gdb/testsuite/gdb.ada/bad-task-bp-keyword/foo.adb
similarity index 100%
copy from gdb/testsuite/gdb.ada/tasks/foo.adb
copy to gdb/testsuite/gdb.ada/bad-task-bp-keyword/foo.adb
diff --git a/gdb/testsuite/gdb.ada/boolean_expr.exp b/gdb/testsuite/gdb.ada/boolean_expr.exp
index e79c5c1..52a6823 100644
--- a/gdb/testsuite/gdb.ada/boolean_expr.exp
+++ b/gdb/testsuite/gdb.ada/boolean_expr.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 gdb_exit
diff --git a/gdb/testsuite/gdb.ada/bp_enum_homonym.exp b/gdb/testsuite/gdb.ada/bp_enum_homonym.exp
new file mode 100644
index 0000000..5d6aa92
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/bp_enum_homonym.exp
@@ -0,0 +1,52 @@
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib "ada.exp"
+
+set testdir "bp_enum_homonym"
+set testfile "${testdir}/p"
+set srcfile ${srcdir}/${subdir}/${testfile}.adb
+set binfile ${objdir}/${subdir}/${testfile}
+
+file mkdir ${objdir}/${subdir}/${testdir}
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } {
+  return -1
+}
+
+clean_restart ${testfile}
+
+# Force GDB to convert the psymtab of pck.adb into a symtab.
+gdb_test "list pck.adb:1" \
+         "$decimal\[ \t\]+--  Copyright.*"
+
+# Break on subprogram "Archive". There is an enumeral that's an
+# homonym, so verify that GDB doesn't provide the choice between
+# the subprogram and the enumeral for the location of the breakpoint.
+# Instead, it should insert the breakpoint on the function alone.
+
+gdb_test "break archive" \
+         "Breakpoint $decimal at $hex: file .*pck.adb, line $decimal\\."
+
+# Run the program. Make sure the program runs until it hits
+# the breakpoint and that the debugger does not unexpectedly ask
+# the user to choose between several locations for the breakpoint
+# (while the inferior is starting up, new DSOs being mapped causes
+# the breakpoint location to be reevaluated).
+
+gdb_run_cmd
+gdb_test "" \
+         "Breakpoint $decimal, pck\\.archive \\(\\).*" \
+         "run to pck.archive breakpoint"
+
diff --git a/gdb/testsuite/gdb.ada/bp_enum_homonym/p.adb b/gdb/testsuite/gdb.ada/bp_enum_homonym/p.adb
new file mode 100644
index 0000000..e6c4a8a
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/bp_enum_homonym/p.adb
@@ -0,0 +1,26 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+with Pck; use Pck;
+
+procedure P is
+   A : Action;
+begin
+   A := Get_Action;
+   if A = Archive then
+      Archive;
+   end if;
+end P;
+
diff --git a/gdb/testsuite/gdb.ada/bp_enum_homonym/pck.adb b/gdb/testsuite/gdb.ada/bp_enum_homonym/pck.adb
new file mode 100644
index 0000000..6a05e0c
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/bp_enum_homonym/pck.adb
@@ -0,0 +1,28 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+package body Pck is
+
+   procedure Archive is
+   begin
+      null;
+   end Archive;
+
+   function Get_Action return Action is
+   begin
+      return Archive;
+   end Get_Action;
+
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/bp_enum_homonym/pck.ads b/gdb/testsuite/gdb.ada/bp_enum_homonym/pck.ads
new file mode 100644
index 0000000..2a0c606
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/bp_enum_homonym/pck.ads
@@ -0,0 +1,23 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+package Pck is
+
+   procedure Archive;
+
+   type Action is (Archive, Extract);
+   function Get_Action return Action;
+
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/bp_on_var.exp b/gdb/testsuite/gdb.ada/bp_on_var.exp
new file mode 100644
index 0000000..73b5cd7
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/bp_on_var.exp
@@ -0,0 +1,48 @@
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib "ada.exp"
+
+set testdir "bp_on_var"
+set testfile "${testdir}/foo"
+set srcfile ${srcdir}/${subdir}/${testfile}.adb
+set binfile ${objdir}/${subdir}/${testfile}
+
+file mkdir ${objdir}/${subdir}/${testdir}
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } {
+  return -1
+}
+
+# Test inserting breakpoint on pck.my_global_variable.
+
+clean_restart ${testfile}
+
+# We are going to insert breakpoints using locations that are invalid.
+# Set "breakpoint pending" to "off" in order to avoid having to deal
+# with GDB asking whether to insert a pending breakpoint or not.
+gdb_test_no_output "set breakpoint pending off"
+
+gdb_test "break pck.my_global_variable" \
+         "Function \"pck\\.my_global_variable\" not defined\\."
+
+
+# Test inserting breakpoint on pck.my_hidden_variable.
+
+clean_restart ${testfile}
+
+gdb_test_no_output "set breakpoint pending off"
+
+gdb_test "break pck.my_hidden_variable" \
+         "Function \"pck\\.my_hidden_variable\" not defined\\."
diff --git a/gdb/testsuite/gdb.ada/bp_on_var/foo.adb b/gdb/testsuite/gdb.ada/bp_on_var/foo.adb
new file mode 100644
index 0000000..56b75fc
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/bp_on_var/foo.adb
@@ -0,0 +1,20 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+with Pck; use Pck;
+procedure Foo is
+begin
+   Do_Something (My_Global_Variable);
+end Foo;
diff --git a/gdb/testsuite/gdb.ada/bp_on_var/pck.adb b/gdb/testsuite/gdb.ada/bp_on_var/pck.adb
new file mode 100644
index 0000000..04ecd6f
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/bp_on_var/pck.adb
@@ -0,0 +1,27 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+package body Pck is
+   My_Hidden_Variable : Integer := 0;
+   procedure Do_Something (I : in out Integer) is
+   begin
+      if My_Hidden_Variable > 10 then
+         My_Hidden_Variable := 0;
+      end if;
+      I := I + My_Hidden_Variable;
+      My_Hidden_Variable := My_Hidden_Variable + 1;
+   end Do_Something;
+end Pck;
+
diff --git a/gdb/testsuite/gdb.ada/bp_on_var/pck.ads b/gdb/testsuite/gdb.ada/bp_on_var/pck.ads
new file mode 100644
index 0000000..af77fd5
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/bp_on_var/pck.ads
@@ -0,0 +1,20 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+package Pck is
+   My_Global_Variable : Integer := 11;
+   procedure Do_Something (I : in out Integer);
+end Pck;
+
diff --git a/gdb/testsuite/gdb.ada/bp_range_type.exp b/gdb/testsuite/gdb.ada/bp_range_type.exp
new file mode 100644
index 0000000..f65e0c7
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/bp_range_type.exp
@@ -0,0 +1,41 @@
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib "ada.exp"
+
+set testdir "bp_range_type"
+set testfile "${testdir}/foo"
+set srcfile ${srcdir}/${subdir}/${testfile}.adb
+set binfile ${objdir}/${subdir}/${testfile}
+
+file mkdir ${objdir}/${subdir}/${testdir}
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } {
+  return -1
+}
+
+clean_restart ${testfile}
+
+set bp_location [gdb_get_line_number "STOP" ${testdir}/foo.adb]
+
+gdb_test "break foo.adb:$bp_location if small_value > 20" \
+         "Breakpoint $decimal at $hex: file .*foo.adb, line $decimal\\."
+
+gdb_run_cmd
+gdb_test "" \
+         "Breakpoint $decimal, foo \\(\\).*" \
+         "run to breakpoint"
+
+# Verify that we stopped at the correct iteration.
+gdb_test "print small_value" " = 25"
diff --git a/gdb/testsuite/gdb.ada/bp_range_type/foo.adb b/gdb/testsuite/gdb.ada/bp_range_type/foo.adb
new file mode 100644
index 0000000..53b9c4c
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/bp_range_type/foo.adb
@@ -0,0 +1,26 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+with Pck; use Pck;
+
+procedure Foo is
+   type Small is range 0 .. 1000;
+   Small_Value : Small := 10;
+begin
+   for J in 1 .. 10 loop
+      Small_Value := Small_Value + Small (J);
+      Do_Nothing (Small_Value'Address);  -- STOP
+   end loop;
+end Foo;
diff --git a/gdb/testsuite/gdb.ada/bp_range_type/pck.adb b/gdb/testsuite/gdb.ada/bp_range_type/pck.adb
new file mode 100644
index 0000000..1f7d45c
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/bp_range_type/pck.adb
@@ -0,0 +1,21 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+package body Pck is
+   procedure Do_Nothing (A : System.Address) is
+   begin
+      null;
+   end Do_Nothing;
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/bp_range_type/pck.ads b/gdb/testsuite/gdb.ada/bp_range_type/pck.ads
new file mode 100644
index 0000000..c20c0d8
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/bp_range_type/pck.ads
@@ -0,0 +1,19 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+with System;
+package Pck is
+   procedure Do_Nothing (A : System.Address);
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/call_pn.exp b/gdb/testsuite/gdb.ada/call_pn.exp
index 9243e86..1b99252 100644
--- a/gdb/testsuite/gdb.ada/call_pn.exp
+++ b/gdb/testsuite/gdb.ada/call_pn.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "call_pn"
diff --git a/gdb/testsuite/gdb.ada/catch_ex.exp b/gdb/testsuite/gdb.ada/catch_ex.exp
index 0336903..f132355 100644
--- a/gdb/testsuite/gdb.ada/catch_ex.exp
+++ b/gdb/testsuite/gdb.ada/catch_ex.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "catch_ex"
diff --git a/gdb/testsuite/gdb.ada/char_param.exp b/gdb/testsuite/gdb.ada/char_param.exp
index 53ac32d..e437721 100644
--- a/gdb/testsuite/gdb.ada/char_param.exp
+++ b/gdb/testsuite/gdb.ada/char_param.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "char_param"
diff --git a/gdb/testsuite/gdb.ada/complete.exp b/gdb/testsuite/gdb.ada/complete.exp
index 1b65efa..4a0f2b4 100644
--- a/gdb/testsuite/gdb.ada/complete.exp
+++ b/gdb/testsuite/gdb.ada/complete.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "complete"
diff --git a/gdb/testsuite/gdb.ada/cond_lang.exp b/gdb/testsuite/gdb.ada/cond_lang.exp
index 6f5f1e8..b2aed95 100644
--- a/gdb/testsuite/gdb.ada/cond_lang.exp
+++ b/gdb/testsuite/gdb.ada/cond_lang.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "cond_lang"
diff --git a/gdb/testsuite/gdb.ada/dyn_loc.exp b/gdb/testsuite/gdb.ada/dyn_loc.exp
index bc40dad..1f7b9c2 100644
--- a/gdb/testsuite/gdb.ada/dyn_loc.exp
+++ b/gdb/testsuite/gdb.ada/dyn_loc.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "dyn_loc"
diff --git a/gdb/testsuite/gdb.ada/enum_idx_packed.exp b/gdb/testsuite/gdb.ada/enum_idx_packed.exp
new file mode 100644
index 0000000..61284bb
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/enum_idx_packed.exp
@@ -0,0 +1,38 @@
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib "ada.exp"
+
+if { [skip_ada_tests] } { return -1 }
+
+set testdir "enum_idx_packed"
+set testfile "${testdir}/foo"
+set srcfile ${srcdir}/${subdir}/${testfile}.adb
+set binfile ${objdir}/${subdir}/${testfile}
+
+file mkdir ${objdir}/${subdir}/${testdir}
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable {debug}] != ""} {
+    return -1
+}
+
+clean_restart ${testfile}
+
+set bp_location [gdb_get_line_number "STOP" ${testdir}/foo.adb]
+runto "foo.adb:$bp_location"
+
+gdb_test "print full" " = \\(false, true, false, true, false\\)"
+
+gdb_test "print full'first" " = black"
+
diff --git a/gdb/testsuite/gdb.ada/enum_idx_packed/foo.adb b/gdb/testsuite/gdb.ada/enum_idx_packed/foo.adb
new file mode 100644
index 0000000..a8a0b91
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/enum_idx_packed/foo.adb
@@ -0,0 +1,24 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+with Pck; use Pck;
+
+procedure Foo is
+   Full : Full_Table := (False, True, False, True, False);
+begin
+   Do_Nothing (Full'Address);  -- STOP
+end Foo;
+
+
diff --git a/gdb/testsuite/gdb.ada/enum_idx_packed/pck.adb b/gdb/testsuite/gdb.ada/enum_idx_packed/pck.adb
new file mode 100644
index 0000000..1f7d45c
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/enum_idx_packed/pck.adb
@@ -0,0 +1,21 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+package body Pck is
+   procedure Do_Nothing (A : System.Address) is
+   begin
+      null;
+   end Do_Nothing;
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/enum_idx_packed/pck.ads b/gdb/testsuite/gdb.ada/enum_idx_packed/pck.ads
new file mode 100644
index 0000000..cba9eda
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/enum_idx_packed/pck.ads
@@ -0,0 +1,23 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+with System;
+package Pck is
+   type Color is (Black, Red, Green, Blue, White);
+   type Full_Table is array (Color) of Boolean;
+   pragma Pack (Full_Table);
+
+   procedure Do_Nothing (A : System.Address);
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/exec_changed.exp b/gdb/testsuite/gdb.ada/exec_changed.exp
index 7597877..4a3792b 100644
--- a/gdb/testsuite/gdb.ada/exec_changed.exp
+++ b/gdb/testsuite/gdb.ada/exec_changed.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 if { [skip_ada_tests] } { return -1 }
diff --git a/gdb/testsuite/gdb.ada/exprs.exp b/gdb/testsuite/gdb.ada/exprs.exp
index ef9a56b..764cd57 100644
--- a/gdb/testsuite/gdb.ada/exprs.exp
+++ b/gdb/testsuite/gdb.ada/exprs.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "exprs"
diff --git a/gdb/testsuite/gdb.ada/fixed_cmp.exp b/gdb/testsuite/gdb.ada/fixed_cmp.exp
index 2c85526..1d0f960 100644
--- a/gdb/testsuite/gdb.ada/fixed_cmp.exp
+++ b/gdb/testsuite/gdb.ada/fixed_cmp.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "fixed_cmp"
diff --git a/gdb/testsuite/gdb.ada/fixed_points.exp b/gdb/testsuite/gdb.ada/fixed_points.exp
index e5bf2e1..d86a00b 100644
--- a/gdb/testsuite/gdb.ada/fixed_points.exp
+++ b/gdb/testsuite/gdb.ada/fixed_points.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 if { [skip_ada_tests] } { return -1 }
diff --git a/gdb/testsuite/gdb.ada/formatted_ref.exp b/gdb/testsuite/gdb.ada/formatted_ref.exp
index a7ad067..8341dca 100644
--- a/gdb/testsuite/gdb.ada/formatted_ref.exp
+++ b/gdb/testsuite/gdb.ada/formatted_ref.exp
@@ -24,10 +24,6 @@
 # work properly: condition expression using a reference object as one of its
 # operand.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "formatted_ref"
diff --git a/gdb/testsuite/gdb.ada/frame_args.exp b/gdb/testsuite/gdb.ada/frame_args.exp
index c83f63a..98c1a44 100644
--- a/gdb/testsuite/gdb.ada/frame_args.exp
+++ b/gdb/testsuite/gdb.ada/frame_args.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "frame_args"
diff --git a/gdb/testsuite/gdb.ada/fun_addr.exp b/gdb/testsuite/gdb.ada/fun_addr.exp
index 1c76a1e..9924995 100644
--- a/gdb/testsuite/gdb.ada/fun_addr.exp
+++ b/gdb/testsuite/gdb.ada/fun_addr.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "fun_addr"
@@ -35,7 +31,7 @@ clean_restart ${testfile}
 # the inferior is *not* running (no frame).
 
 gdb_test "print foo'address" \
-         "= .* 0x\[0-9a-zA-Z\]+" \
+         "= .* 0x\[0-9a-zA-Z\]+ <foo>" \
          "print foo'address"
 
 
diff --git a/gdb/testsuite/gdb.ada/fun_in_declare.exp b/gdb/testsuite/gdb.ada/fun_in_declare.exp
index 09f15bc..b73c74a 100644
--- a/gdb/testsuite/gdb.ada/fun_in_declare.exp
+++ b/gdb/testsuite/gdb.ada/fun_in_declare.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "fun_in_declare"
diff --git a/gdb/testsuite/gdb.ada/funcall_param.exp b/gdb/testsuite/gdb.ada/funcall_param.exp
index 8321eb6..ac0da83 100644
--- a/gdb/testsuite/gdb.ada/funcall_param.exp
+++ b/gdb/testsuite/gdb.ada/funcall_param.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "funcall_param"
diff --git a/gdb/testsuite/gdb.ada/homonym.exp b/gdb/testsuite/gdb.ada/homonym.exp
index d535ca2..a81135a 100644
--- a/gdb/testsuite/gdb.ada/homonym.exp
+++ b/gdb/testsuite/gdb.ada/homonym.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "homonym"
diff --git a/gdb/testsuite/gdb.ada/info_locals_renaming.exp b/gdb/testsuite/gdb.ada/info_locals_renaming.exp
new file mode 100644
index 0000000..a8c6469
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/info_locals_renaming.exp
@@ -0,0 +1,36 @@
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib "ada.exp"
+
+if { [skip_ada_tests] } { return -1 }
+
+set testdir "info_locals_renaming"
+set testfile "${testdir}/foo"
+set srcfile ${srcdir}/${subdir}/${testfile}.adb
+set binfile ${objdir}/${subdir}/${testfile}
+
+file mkdir ${objdir}/${subdir}/${testdir}
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable {debug}] != ""} {
+    return -1
+}
+
+clean_restart ${testfile}
+
+set bp_location [gdb_get_line_number "STOP" ${testdir}/foo.adb]
+runto "foo.adb:$bp_location"
+
+gdb_test "info locals" "gv = 1"
+
diff --git a/gdb/testsuite/gdb.ada/info_locals_renaming/foo.adb b/gdb/testsuite/gdb.ada/info_locals_renaming/foo.adb
new file mode 100644
index 0000000..8f29709
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/info_locals_renaming/foo.adb
@@ -0,0 +1,22 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+with Pck; use Pck;
+
+procedure Foo is
+   GV : Integer renames Pck.Global_Variable;
+begin
+   Increment (GV); -- STOP
+end Foo;
diff --git a/gdb/testsuite/gdb.ada/info_locals_renaming/pck.adb b/gdb/testsuite/gdb.ada/info_locals_renaming/pck.adb
new file mode 100644
index 0000000..e69386d
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/info_locals_renaming/pck.adb
@@ -0,0 +1,21 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+package body Pck is
+   procedure Increment (I : in out Integer) is
+   begin
+      I := I + 1;
+   end Increment;
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/info_locals_renaming/pck.ads b/gdb/testsuite/gdb.ada/info_locals_renaming/pck.ads
new file mode 100644
index 0000000..c795c4b
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/info_locals_renaming/pck.ads
@@ -0,0 +1,20 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+package Pck is
+   Global_Variable : Integer := 1;
+
+   procedure Increment (I : in out Integer);
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/int_deref.exp b/gdb/testsuite/gdb.ada/int_deref.exp
index d8d2f20..51705bc 100644
--- a/gdb/testsuite/gdb.ada/int_deref.exp
+++ b/gdb/testsuite/gdb.ada/int_deref.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "int_deref"
diff --git a/gdb/testsuite/gdb.ada/interface.exp b/gdb/testsuite/gdb.ada/interface.exp
index fd34838..ae21a53 100644
--- a/gdb/testsuite/gdb.ada/interface.exp
+++ b/gdb/testsuite/gdb.ada/interface.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "interface"
diff --git a/gdb/testsuite/gdb.ada/lang_switch.exp b/gdb/testsuite/gdb.ada/lang_switch.exp
index e3beec5..9e14687 100644
--- a/gdb/testsuite/gdb.ada/lang_switch.exp
+++ b/gdb/testsuite/gdb.ada/lang_switch.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "lang_switch"
diff --git a/gdb/testsuite/gdb.ada/mi_task_arg.exp b/gdb/testsuite/gdb.ada/mi_task_arg.exp
new file mode 100644
index 0000000..0b2013c
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/mi_task_arg.exp
@@ -0,0 +1,54 @@
+# Copyright 2011-2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib "ada.exp"
+
+set testdir "mi_task_arg"
+set testfile "${testdir}/task_switch"
+set srcfile ${srcdir}/${subdir}/${testfile}.adb
+set binfile ${objdir}/${subdir}/${testfile}
+
+file mkdir ${objdir}/${subdir}/${testdir}
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnata ]] != "" } {
+  return -1
+}
+
+load_lib mi-support.exp
+set MIFLAGS "-i=mi"
+
+gdb_exit
+if [mi_gdb_start] {
+    continue
+}
+
+mi_delete_breakpoints
+mi_gdb_reinitialize_dir $srcdir/$subdir
+mi_gdb_load ${binfile}
+
+# This test won't work properly if system debuginfo is installed.
+mi_gdb_test "-gdb-set debug-file-directory \"\"" ".*"
+
+if ![mi_runto "task_switch.break_me"] then {
+   fail "Cannot run to main, testcase aborted"
+   return 0
+}
+
+# Verify that "-stack-list-arguments" does not cause the debugger to
+# crash when printing the arguments of frame 1 (due to the internally-
+# generated argument "_task").
+mi_gdb_test "-stack-list-arguments 1" \
+            "\\^done,stack-args=\\\[frame=\{level=\"0\",args=\\\[\\\]\},frame=\{level=\"1\",args=\\\[\{name=\"<_task>\",value=\"$hex\"\}\\\]\},frame=\{level=\"2\",args=\\\[\\\]\}.*" \
+            "-stack-list-arguments 1"
+
diff --git a/gdb/testsuite/gdb.ada/mi_task_info/task_switch.adb b/gdb/testsuite/gdb.ada/mi_task_arg/task_switch.adb
similarity index 100%
copy from gdb/testsuite/gdb.ada/mi_task_info/task_switch.adb
copy to gdb/testsuite/gdb.ada/mi_task_arg/task_switch.adb
diff --git a/gdb/testsuite/gdb.ada/mi_task_info.exp b/gdb/testsuite/gdb.ada/mi_task_info.exp
index 42a1f9d..22e3375 100644
--- a/gdb/testsuite/gdb.ada/mi_task_info.exp
+++ b/gdb/testsuite/gdb.ada/mi_task_info.exp
@@ -57,7 +57,7 @@ set task_3 \
 
 # Get the full list of tasks...
 mi_gdb_test "-ada-task-info" \
-  "\\^done,tasks={nr_rows=\"3\",nr_cols=\"8\",$ada_task_info_hdr,body=\\\[$task_1,$task_2,$task_3\\\]}" \
+  ".*\\^done,tasks={nr_rows=\"3\",nr_cols=\"8\",$ada_task_info_hdr,body=\\\[$task_1,$task_2,$task_3\\\]}" \
   "-ada-task-info with no argument"
 
 # Now, only get the info about task 3.
diff --git a/gdb/testsuite/gdb.ada/mod_from_name.exp b/gdb/testsuite/gdb.ada/mod_from_name.exp
index 38a9bb9..fe97245 100644
--- a/gdb/testsuite/gdb.ada/mod_from_name.exp
+++ b/gdb/testsuite/gdb.ada/mod_from_name.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "mod_from_name"
diff --git a/gdb/testsuite/gdb.ada/nested.exp b/gdb/testsuite/gdb.ada/nested.exp
index be8dece..079577b 100644
--- a/gdb/testsuite/gdb.ada/nested.exp
+++ b/gdb/testsuite/gdb.ada/nested.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "nested"
diff --git a/gdb/testsuite/gdb.ada/null_array.exp b/gdb/testsuite/gdb.ada/null_array.exp
index d449e3c..4a05418 100644
--- a/gdb/testsuite/gdb.ada/null_array.exp
+++ b/gdb/testsuite/gdb.ada/null_array.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "null_array"
@@ -34,7 +30,7 @@ clean_restart ${testfile}
 set bp_location [gdb_get_line_number "START" ${testdir}/foo.adb]
 runto "foo.adb:$bp_location"
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.ada/null_record.exp b/gdb/testsuite/gdb.ada/null_record.exp
index ab0ef3a..97508b2 100644
--- a/gdb/testsuite/gdb.ada/null_record.exp
+++ b/gdb/testsuite/gdb.ada/null_record.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 if { [skip_ada_tests] } { return -1 }
diff --git a/gdb/testsuite/gdb.ada/operator_bp.exp b/gdb/testsuite/gdb.ada/operator_bp.exp
new file mode 100644
index 0000000..18cf46d
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/operator_bp.exp
@@ -0,0 +1,91 @@
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib "ada.exp"
+
+if { [skip_ada_tests] } { return -1 }
+
+set testdir "operator_bp"
+set testfile "${testdir}/ops_test"
+set srcfile ${srcdir}/${subdir}/${testfile}.adb
+set binfile ${objdir}/${subdir}/${testfile}
+
+file mkdir ${objdir}/${subdir}/${testdir}
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable {debug}] != ""} {
+    return -1
+}
+
+clean_restart ${testfile}
+
+# This test won't work properly if system debuginfo is installed.
+gdb_test_no_output "set debug-file-directory"
+
+set bp_location [gdb_get_line_number "BEGIN" ${testdir}/ops_test.adb]
+runto "ops_test.adb:$bp_location"
+
+# Set breakpoints for all operators, using just the operator name in quotes.
+
+foreach op { "+" "-" } {
+    set op_re [string_to_regexp $op]
+    gdb_test "break \"$op\"" \
+             "Breakpoint $decimal at $hex: \"$op_re\"\. \\(2 locations\\)"
+}
+
+foreach op { "*" "/" "mod" "rem" "**" "<" "<=" ">" ">=" "=" "and" "or" "xor" "&" "abs" "not"} {
+    set op_re [string_to_regexp $op]
+    gdb_test "break \"$op\"" \
+             "Breakpoint $decimal at $hex: file .*ops.adb, line $decimal."
+}
+
+# Make sure we stop correctly in each operator function.
+
+foreach op { "+" "-" "*" "/" "mod" "rem" "**" "<" "<=" ">" ">=" "=" "and" "or" "xor" "&" "abs" "not"} {
+    set op_re [string_to_regexp $op]
+    gdb_test "continue" \
+             "Breakpoint $decimal, ops\\.\"$op_re\" .*"\
+             "continue to \"$op\""
+}
+
+# Perform the same test, but using the qualified name of the operator,
+# instead of the just the operator name (as in 'break ops."+"').
+
+clean_restart ${testfile}
+
+runto "ops_test.adb:$bp_location"
+
+# Set breakpoints for all operators, using just the operator name in quotes.
+
+foreach op { "+" "-" } {
+    set op_re [string_to_regexp $op]
+    gdb_test "break ops.\"$op\"" \
+             "Breakpoint $decimal at $hex: ops\\.\"$op_re\"\. \\(2 locations\\)"
+}
+
+foreach op { "*" "/" "mod" "rem" "**" "<" "<=" ">" ">=" "=" "and" "or" "xor" "&" "abs" "not"} {
+    set op_re [string_to_regexp $op]
+    gdb_test "break ops.\"$op\"" \
+             "Breakpoint $decimal at $hex: file .*ops.adb, line $decimal."
+}
+
+# Make sure we stop correctly in each operator function.
+
+foreach op { "+" "-" "*" "/" "mod" "rem" "**" "<" "<=" ">" ">=" "=" "and" "or" "xor" "&" "abs" "not"} {
+    set op_re [string_to_regexp $op]
+    gdb_test "continue" \
+             "Breakpoint $decimal, ops\\.\"$op_re\" .*"\
+             "continue to ops.\"$op\""
+}
+
+
diff --git a/gdb/testsuite/gdb.ada/operator_bp/ops.adb b/gdb/testsuite/gdb.ada/operator_bp/ops.adb
new file mode 100644
index 0000000..e7d94dc
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/operator_bp/ops.adb
@@ -0,0 +1,140 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+package body Ops is
+
+   function Make (X: Natural) return Int is
+   begin
+      return Int (X);
+   end Make;
+
+   function "+" (I1, I2 : Int) return Int is
+   begin
+      return Int (IntRep (I1) + IntRep (I2));
+   end;
+
+   function "-" (I1, I2 : Int) return Int is
+   begin
+      return Int (IntRep (I1) - IntRep (I2));
+   end;
+
+   function "*" (I1, I2 : Int) return Int is
+   begin
+      return Int (IntRep (I1) * IntRep (I2));
+   end;
+
+   function "/" (I1, I2 : Int) return Int is
+   begin
+      return Int (IntRep (I1) / IntRep (I2));
+   end;
+
+   function "mod" (I1, I2 : Int) return Int is
+   begin
+      return Int (IntRep (I1) mod IntRep (I2));
+   end;
+
+   function "rem" (I1, I2 : Int) return Int is
+   begin
+      return Int (IntRep (I1) rem IntRep (I2));
+   end;
+
+   function "**" (I1, I2 : Int) return Int is
+      Result : IntRep := 1;
+   begin
+      for J in 1 .. IntRep (I2) loop
+         Result := IntRep (I1) * Result;
+      end loop;
+      return Int (Result);
+   end;
+
+   function "<" (I1, I2 : Int) return Boolean is
+   begin
+      return IntRep (I1) < IntRep (I2);
+   end;
+
+   function "<=" (I1, I2 : Int) return Boolean is
+   begin
+      return IntRep (I1) <= IntRep (I2);
+   end;
+
+   function ">" (I1, I2 : Int) return Boolean is
+   begin
+      return IntRep (I1) > IntRep (I2);
+   end;
+
+   function ">=" (I1, I2 : Int) return Boolean is
+   begin
+      return IntRep (I1) >= IntRep (I2);
+   end;
+
+   function "=" (I1, I2 : Int) return Boolean is
+   begin
+      return IntRep (I1) = IntRep (I2);
+   end;
+
+   function "and" (I1, I2 : Int) return Int is
+   begin
+      return Int (IntRep (I1) and IntRep (I2));
+   end;
+
+   function "or" (I1, I2 : Int) return Int is
+   begin
+      return Int (IntRep (I1) or IntRep (I2));
+   end;
+
+   function "xor" (I1, I2 : Int) return Int is
+   begin
+      return Int (IntRep (I1) xor IntRep (I2));
+   end;
+
+   function "&" (I1, I2 : Int) return Int is
+   begin
+      return Int (IntRep (I1) and IntRep (I2));
+   end;
+
+   function "abs" (I1 : Int) return Int is
+   begin
+      return Int (abs IntRep (I1));
+   end;
+
+   function "not" (I1 : Int) return Int is
+   begin
+      return Int (not IntRep (I1));
+   end;
+
+   function "+" (I1 : Int) return Int is
+   begin
+      return Int (IntRep (I1));
+   end;
+
+   function "-" (I1 : Int) return Int is
+   begin
+      return Int (-IntRep (I1));
+   end;
+
+   procedure Dummy (I1 : Int) is
+   begin
+      null;
+   end Dummy;
+
+   procedure Dummy (B1 : Boolean) is
+   begin
+      null;
+   end Dummy;
+
+end Ops;
+
+
+
diff --git a/gdb/testsuite/gdb.ada/operator_bp/ops.ads b/gdb/testsuite/gdb.ada/operator_bp/ops.ads
new file mode 100644
index 0000000..8724cb3
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/operator_bp/ops.ads
@@ -0,0 +1,52 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+package Ops is
+   type Int is private;
+
+   function Make (X: Natural) return Int;
+
+   function "+" (I1, I2 : Int) return Int;
+   function "-" (I1, I2 : Int) return Int;
+   function "*" (I1, I2 : Int) return Int;
+   function "/" (I1, I2 : Int) return Int;
+   function "mod" (I1, I2 : Int) return Int;
+   function "rem" (I1, I2 : Int) return Int;
+   function "**" (I1, I2 : Int) return Int;
+   function "<" (I1, I2 : Int) return Boolean;
+   function "<=" (I1, I2 : Int) return Boolean;
+   function ">" (I1, I2 : Int) return Boolean;
+   function ">=" (I1, I2 : Int) return Boolean;
+   function "=" (I1, I2 : Int) return Boolean;
+   function "and" (I1, I2 : Int) return Int;
+   function "or" (I1, I2 : Int) return Int;
+   function "xor" (I1, I2 : Int) return Int;
+   function "&" (I1, I2 : Int) return Int;
+   function "abs" (I1 : Int) return Int;
+   function "not" (I1 : Int) return Int;
+   function "+" (I1 : Int) return Int;
+   function "-" (I1 : Int) return Int;
+
+   procedure Dummy (B1 : Boolean);
+   procedure Dummy (I1 : Int);
+
+private
+
+   type IntRep is mod 2**31;
+   type Int is new IntRep;
+
+end Ops;
+
+
diff --git a/gdb/testsuite/gdb.ada/operator_bp/ops_test.adb b/gdb/testsuite/gdb.ada/operator_bp/ops_test.adb
new file mode 100644
index 0000000..481c04a
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/operator_bp/ops_test.adb
@@ -0,0 +1,40 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+with Ops; use Ops;
+procedure Ops_Test is
+
+begin
+   Dummy (Make (31) + Make (11)); -- BEGIN
+   Dummy (Make (31) - Make (11));
+   Dummy (Make (31) * Make (11));
+   Dummy (Make (31) / Make (11));
+   Dummy (Make (31) mod Make (11));
+   Dummy (Make (31) rem Make (11));
+   Dummy (Make (31) ** Make (11));
+   Dummy (Make (31) < Make (11));
+   Dummy (Make (31) <= Make (11));
+   Dummy (Make (31) > Make (11));
+   Dummy (Make (31) >= Make (11));
+   Dummy (Make (31) = Make (11));
+   Dummy (Make (31) and Make (11));
+   Dummy (Make (31) or Make (11));
+   Dummy (Make (31) xor Make (11));
+   Dummy (Make (31) & Make (11));
+   Dummy (abs (Make (42)));
+   Dummy (not Make (11));
+   Dummy (+ Make (11));
+   Dummy (- Make (11));
+end Ops_Test;
diff --git a/gdb/testsuite/gdb.ada/packed_array.exp b/gdb/testsuite/gdb.ada/packed_array.exp
index 80dd44f..678639c 100644
--- a/gdb/testsuite/gdb.ada/packed_array.exp
+++ b/gdb/testsuite/gdb.ada/packed_array.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 if { [skip_ada_tests] } { return -1 }
diff --git a/gdb/testsuite/gdb.ada/packed_tagged.exp b/gdb/testsuite/gdb.ada/packed_tagged.exp
index e671d73..3cf8a28 100644
--- a/gdb/testsuite/gdb.ada/packed_tagged.exp
+++ b/gdb/testsuite/gdb.ada/packed_tagged.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "packed_tagged"
diff --git a/gdb/testsuite/gdb.ada/packed_tagged/comp_bug.adb b/gdb/testsuite/gdb.ada/packed_tagged/comp_bug.adb
index 64bcbfb..5899b09 100644
--- a/gdb/testsuite/gdb.ada/packed_tagged/comp_bug.adb
+++ b/gdb/testsuite/gdb.ada/packed_tagged/comp_bug.adb
@@ -1,40 +1,40 @@
---  Copyright 2008-2012 Free Software Foundation, Inc.
---
---  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 3 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, see <http://www.gnu.org/licenses/>.
-
-procedure Comp_Bug is
-
-   type Number_T (Exists : Boolean := False) is
-      record
-         case Exists is
-            when True =>
-               Value : Natural range 0 .. 255;
-            when False =>
-               null;
-         end case;
-      end record;
-   pragma Pack (Number_T);
-
-   X : Number_T;
-   --  brobecker/2007-09-06: At the time when this issue (G904-017) was
-   --  reported, the problem only reproduced if the variable was declared
-   --  inside a function (in other words, stored on stack).  Although
-   --  the issue probably still existed when I tried moving this variable
-   --  to a package spec, the symptoms inside GDB disappeared.
-begin
-   X := (Exists => True, Value => 10);
-   if X.Exists then -- STOP
-      X.Value := X.Value + 1;
-   end if;
-end Comp_Bug;
+--  Copyright 2008-2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+procedure Comp_Bug is
+
+   type Number_T (Exists : Boolean := False) is
+      record
+         case Exists is
+            when True =>
+               Value : Natural range 0 .. 255;
+            when False =>
+               null;
+         end case;
+      end record;
+   pragma Pack (Number_T);
+
+   X : Number_T;
+   --  brobecker/2007-09-06: At the time when this issue (G904-017) was
+   --  reported, the problem only reproduced if the variable was declared
+   --  inside a function (in other words, stored on stack).  Although
+   --  the issue probably still existed when I tried moving this variable
+   --  to a package spec, the symptoms inside GDB disappeared.
+begin
+   X := (Exists => True, Value => 10);
+   if X.Exists then -- STOP
+      X.Value := X.Value + 1;
+   end if;
+end Comp_Bug;
diff --git a/gdb/testsuite/gdb.ada/print_chars.exp b/gdb/testsuite/gdb.ada/print_chars.exp
index e51356c..35dfcc6 100644
--- a/gdb/testsuite/gdb.ada/print_chars.exp
+++ b/gdb/testsuite/gdb.ada/print_chars.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "print_chars"
diff --git a/gdb/testsuite/gdb.ada/print_pc.exp b/gdb/testsuite/gdb.ada/print_pc.exp
index aff00e8..371dd51 100644
--- a/gdb/testsuite/gdb.ada/print_pc.exp
+++ b/gdb/testsuite/gdb.ada/print_pc.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "start"
diff --git a/gdb/testsuite/gdb.ada/ptype_arith_binop.exp b/gdb/testsuite/gdb.ada/ptype_arith_binop.exp
index 944d90b..75d3812 100644
--- a/gdb/testsuite/gdb.ada/ptype_arith_binop.exp
+++ b/gdb/testsuite/gdb.ada/ptype_arith_binop.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 gdb_exit
 gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
diff --git a/gdb/testsuite/gdb.ada/ptype_field.exp b/gdb/testsuite/gdb.ada/ptype_field.exp
index 2fb63e6..03f8d8f 100644
--- a/gdb/testsuite/gdb.ada/ptype_field.exp
+++ b/gdb/testsuite/gdb.ada/ptype_field.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "ptype_field"
diff --git a/gdb/testsuite/gdb.ada/ptype_tagged_param.exp b/gdb/testsuite/gdb.ada/ptype_tagged_param.exp
index c56d82f..d710729 100644
--- a/gdb/testsuite/gdb.ada/ptype_tagged_param.exp
+++ b/gdb/testsuite/gdb.ada/ptype_tagged_param.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "ptype_tagged_param"
diff --git a/gdb/testsuite/gdb.ada/rec_return.exp b/gdb/testsuite/gdb.ada/rec_return.exp
index e291d11..06fe4e6 100644
--- a/gdb/testsuite/gdb.ada/rec_return.exp
+++ b/gdb/testsuite/gdb.ada/rec_return.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "rec_return"
diff --git a/gdb/testsuite/gdb.ada/ref_param.exp b/gdb/testsuite/gdb.ada/ref_param.exp
index 8f86083..82fcc61 100644
--- a/gdb/testsuite/gdb.ada/ref_param.exp
+++ b/gdb/testsuite/gdb.ada/ref_param.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "ref_param"
diff --git a/gdb/testsuite/gdb.ada/ref_tick_size.exp b/gdb/testsuite/gdb.ada/ref_tick_size.exp
index 7d157ce..8036723 100644
--- a/gdb/testsuite/gdb.ada/ref_tick_size.exp
+++ b/gdb/testsuite/gdb.ada/ref_tick_size.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "ref_tick_size"
diff --git a/gdb/testsuite/gdb.ada/set_pckd_arr_elt.exp b/gdb/testsuite/gdb.ada/set_pckd_arr_elt.exp
new file mode 100644
index 0000000..7f6f1d3
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/set_pckd_arr_elt.exp
@@ -0,0 +1,47 @@
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib "ada.exp"
+
+if { [skip_ada_tests] } { return -1 }
+
+set testdir "set_pckd_arr_elt"
+set testfile "${testdir}/foo"
+set srcfile ${srcdir}/${subdir}/${testfile}.adb
+set binfile ${objdir}/${subdir}/${testfile}
+
+file mkdir ${objdir}/${subdir}/${testdir}
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable {debug}] != ""} {
+    return -1
+}
+
+clean_restart ${testfile}
+
+set bp_location [gdb_get_line_number "STOP" ${testdir}/foo.adb]
+runto "foo.adb:$bp_location"
+
+gdb_test "print sa(3) := 9" " = 9"
+
+# To verify that the assignment was made correctly, we use the fact
+# that the program passes this very same element as an argument to
+# one of the functions.  So we insert a breakpoint on that function,
+# and verify that the argument value is correct.
+
+gdb_breakpoint "update_small"
+
+gdb_test "continue" \
+        "Breakpoint .*, pck\\.update_small \\(s=9\\) at .*pck.adb:.*" \
+        "continue to update_small"
+
diff --git a/gdb/testsuite/gdb.ada/set_pckd_arr_elt/foo.adb b/gdb/testsuite/gdb.ada/set_pckd_arr_elt/foo.adb
new file mode 100644
index 0000000..7f4f45d
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/set_pckd_arr_elt/foo.adb
@@ -0,0 +1,22 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+with Pck; use Pck;
+
+procedure Foo is
+   SA : Simple_Array := (1, 2, 3, 4);
+begin
+   Update_Small (SA (3));  -- STOP
+end Foo;
diff --git a/gdb/testsuite/gdb.ada/set_pckd_arr_elt/pck.adb b/gdb/testsuite/gdb.ada/set_pckd_arr_elt/pck.adb
new file mode 100644
index 0000000..a2bec81
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/set_pckd_arr_elt/pck.adb
@@ -0,0 +1,21 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+package body Pck is
+   procedure Update_Small (S : in out Small) is
+   begin
+      null;
+   end Update_Small;
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/set_pckd_arr_elt/pck.ads b/gdb/testsuite/gdb.ada/set_pckd_arr_elt/pck.ads
new file mode 100644
index 0000000..6be95e2
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/set_pckd_arr_elt/pck.ads
@@ -0,0 +1,22 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+package Pck is
+   type Small is new Integer range 0 .. 2 ** 6 - 1;
+   type Simple_Array is array (1 .. 4) of Small;
+   pragma Pack (Simple_Array);
+
+   procedure Update_Small (S : in out Small);
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/start.exp b/gdb/testsuite/gdb.ada/start.exp
index c36db3f..6ba180d 100644
--- a/gdb/testsuite/gdb.ada/start.exp
+++ b/gdb/testsuite/gdb.ada/start.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 if { [skip_ada_tests] } { return -1 }
diff --git a/gdb/testsuite/gdb.ada/str_ref_cmp.exp b/gdb/testsuite/gdb.ada/str_ref_cmp.exp
index 850be59..b0db6aa 100644
--- a/gdb/testsuite/gdb.ada/str_ref_cmp.exp
+++ b/gdb/testsuite/gdb.ada/str_ref_cmp.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "str_ref_cmp"
diff --git a/gdb/testsuite/gdb.ada/sym_print_name.exp b/gdb/testsuite/gdb.ada/sym_print_name.exp
index 9e868a4..7a8765a 100644
--- a/gdb/testsuite/gdb.ada/sym_print_name.exp
+++ b/gdb/testsuite/gdb.ada/sym_print_name.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "sym_print_name"
diff --git a/gdb/testsuite/gdb.ada/taft_type.exp b/gdb/testsuite/gdb.ada/taft_type.exp
index 8102c1e..b934ccc 100644
--- a/gdb/testsuite/gdb.ada/taft_type.exp
+++ b/gdb/testsuite/gdb.ada/taft_type.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "taft_type"
diff --git a/gdb/testsuite/gdb.ada/tagged.exp b/gdb/testsuite/gdb.ada/tagged.exp
index 780667d..6cc316e 100644
--- a/gdb/testsuite/gdb.ada/tagged.exp
+++ b/gdb/testsuite/gdb.ada/tagged.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "tagged"
diff --git a/gdb/testsuite/gdb.ada/tagged_not_init.exp b/gdb/testsuite/gdb.ada/tagged_not_init.exp
new file mode 100644
index 0000000..013d76a
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/tagged_not_init.exp
@@ -0,0 +1,36 @@
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib "ada.exp"
+
+if { [skip_ada_tests] } { return -1 }
+
+set testdir "tagged_not_init"
+set testfile "${testdir}/foo"
+set srcfile ${srcdir}/${subdir}/${testfile}.adb
+set binfile ${objdir}/${subdir}/${testfile}
+
+file mkdir ${objdir}/${subdir}/${testdir}
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable {debug}] != ""} {
+    return -1
+}
+
+clean_restart ${testfile}
+
+set bp_location [gdb_get_line_number "STOP" ${testdir}/foo.adb]
+runto "foo.adb:$bp_location"
+
+gdb_test "print obj" " = \\(x => -?$decimal\\)"
+
diff --git a/gdb/testsuite/gdb.ada/tagged_not_init/foo.adb b/gdb/testsuite/gdb.ada/tagged_not_init/foo.adb
new file mode 100644
index 0000000..aa345a2
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/tagged_not_init/foo.adb
@@ -0,0 +1,24 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+with Pck; use Pck;
+
+procedure Foo is
+   I : Integer := Ident (10);  -- STOP
+   Obj : Base;
+begin
+   Obj.X := I;
+   Do_Nothing (Obj.X'Address);
+end Foo;
diff --git a/gdb/testsuite/gdb.ada/tagged_not_init/pck.adb b/gdb/testsuite/gdb.ada/tagged_not_init/pck.adb
new file mode 100644
index 0000000..5d6e760
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/tagged_not_init/pck.adb
@@ -0,0 +1,26 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+package body Pck is
+   function Ident (I : Integer) return Integer is
+   begin
+      return I;
+   end Ident;
+
+   procedure Do_Nothing (A : System.Address) is
+   begin
+      null;
+   end Do_Nothing;
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/tagged_not_init/pck.ads b/gdb/testsuite/gdb.ada/tagged_not_init/pck.ads
new file mode 100644
index 0000000..19d9295
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/tagged_not_init/pck.ads
@@ -0,0 +1,31 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+with System;
+
+package Pck is
+   type Base is tagged record
+      X : Integer := 42;
+   end record;
+
+   type Extension is new Base with
+      record
+         Y : Float := 42.0;
+      end record;
+
+   function Ident (I : Integer) return Integer;
+
+   procedure Do_Nothing (A : System.Address);
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/task_bp.exp b/gdb/testsuite/gdb.ada/task_bp.exp
new file mode 100644
index 0000000..11bdfac
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/task_bp.exp
@@ -0,0 +1,68 @@
+# Copyright 2011-2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib "ada.exp"
+
+set testdir "task_bp"
+set testfile "${testdir}/foo"
+set srcfile ${srcdir}/${subdir}/${testfile}.adb
+set binfile ${objdir}/${subdir}/${testfile}
+
+file mkdir ${objdir}/${subdir}/${testdir}
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } {
+  return -1
+}
+
+# Insert a breakpoint at LOC, and run the program expecting us to
+# reach that breakpoint.
+#
+# LOC is expected to be a linespec referencing the body of task
+# Pck.Dummy_Task (the purpose is to test all the variations of
+# these equivalent linespecs).
+#
+# MSG is just a string that's used to qualify the name of the tests
+# that are executed inside that procedure.  The purpose to be able
+# to call that function multiple times with the same linespec, in
+# order to test one given linespec under multiple conditions.
+
+proc test_bp { loc msg } {
+   gdb_test "break $loc" \
+     "Breakpoint \[0-9\]+ at 0x\[0-9a-fA-F\]+: file .*pck.adb, line \[0-9\]+\." \
+     "break $loc - $msg"
+
+   gdb_run_cmd
+   gdb_test "" \
+     "Breakpoint \[0-9\]+, pck\\.dummy_task (.*)" \
+     "run to $loc - $msg"
+}
+
+set all_linespecs { "pck.dummy_task" "dummy_task"
+                    "pck.adb:pck.dummy_task" "pck.adb:dummy_task"}
+
+# First, test the linespecs when the associated symtab hasn't been
+# expanded yet.
+
+foreach linespec $all_linespecs {
+    clean_restart ${testfile}
+    test_bp $linespec "from psymtab"
+}
+
+# Now, do the same, but with the associated symtab already expanded.
+
+foreach linespec $all_linespecs {
+    clean_restart ${testfile}
+    gdb_test "list pck.adb:1" ".*" "expanding symtab for $linespec"
+    test_bp $linespec "from full symtab"
+}
diff --git a/gdb/testsuite/gdb.ada/task_bp/foo.adb b/gdb/testsuite/gdb.ada/task_bp/foo.adb
new file mode 100644
index 0000000..968465e
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/task_bp/foo.adb
@@ -0,0 +1,20 @@
+--  Copyright 2011-2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+with Pck; use Pck;
+procedure Foo is
+begin
+   Dummy_Task.Start;
+end Foo;
diff --git a/gdb/testsuite/gdb.ada/task_bp/pck.adb b/gdb/testsuite/gdb.ada/task_bp/pck.adb
new file mode 100644
index 0000000..c17d67b
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/task_bp/pck.adb
@@ -0,0 +1,21 @@
+--  Copyright 2011-2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+package body Pck is
+   task body Dummy_Task is
+   begin
+      accept Start;
+   end Dummy_Task;
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/task_bp/pck.ads b/gdb/testsuite/gdb.ada/task_bp/pck.ads
new file mode 100644
index 0000000..f0e3ff1
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/task_bp/pck.ads
@@ -0,0 +1,20 @@
+--  Copyright 2011-2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+package Pck is
+   task Dummy_Task is
+      entry Start;
+   end Dummy_Task;
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/tasks.exp b/gdb/testsuite/gdb.ada/tasks.exp
index 59b6396..46a77ff 100644
--- a/gdb/testsuite/gdb.ada/tasks.exp
+++ b/gdb/testsuite/gdb.ada/tasks.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "tasks"
diff --git a/gdb/testsuite/gdb.ada/tick_last_segv.exp b/gdb/testsuite/gdb.ada/tick_last_segv.exp
index 3d1f07c..ce6782f 100644
--- a/gdb/testsuite/gdb.ada/tick_last_segv.exp
+++ b/gdb/testsuite/gdb.ada/tick_last_segv.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "tick_last_segv"
diff --git a/gdb/testsuite/gdb.ada/type_coercion.exp b/gdb/testsuite/gdb.ada/type_coercion.exp
index 3e57d8b..32b4136 100644
--- a/gdb/testsuite/gdb.ada/type_coercion.exp
+++ b/gdb/testsuite/gdb.ada/type_coercion.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "type_coercion"
diff --git a/gdb/testsuite/gdb.ada/uninitialized_vars.exp b/gdb/testsuite/gdb.ada/uninitialized_vars.exp
index 54a1805..0ce240e 100644
--- a/gdb/testsuite/gdb.ada/uninitialized_vars.exp
+++ b/gdb/testsuite/gdb.ada/uninitialized_vars.exp
@@ -16,10 +16,6 @@
 # Check that GDB is able to print unconstrained variables and discriminated
 # records before their initialization.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "uninitialized_vars"
diff --git a/gdb/testsuite/gdb.ada/variant_record_packed_array.exp b/gdb/testsuite/gdb.ada/variant_record_packed_array.exp
index 2e5f93d..34bd3de 100644
--- a/gdb/testsuite/gdb.ada/variant_record_packed_array.exp
+++ b/gdb/testsuite/gdb.ada/variant_record_packed_array.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 set testdir "variant_record_packed_array"
diff --git a/gdb/testsuite/gdb.ada/watch_arg.exp b/gdb/testsuite/gdb.ada/watch_arg.exp
index 7961117..1cb9eca 100644
--- a/gdb/testsuite/gdb.ada/watch_arg.exp
+++ b/gdb/testsuite/gdb.ada/watch_arg.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "ada.exp"
 
 if { [skip_ada_tests] } { return -1 }
diff --git a/gdb/testsuite/gdb.ada/whatis_array_val.exp b/gdb/testsuite/gdb.ada/whatis_array_val.exp
new file mode 100644
index 0000000..e937f0a
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/whatis_array_val.exp
@@ -0,0 +1,44 @@
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib "ada.exp"
+
+set testdir "whatis_array_val"
+set testfile "${testdir}/foo"
+set srcfile ${srcdir}/${subdir}/${testfile}.adb
+set binfile ${objdir}/${subdir}/${testfile}
+
+file mkdir ${objdir}/${subdir}/${testdir}
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } {
+  return -1
+}
+
+clean_restart ${testfile}
+
+set bp_location [gdb_get_line_number "STOP" ${testdir}/foo.adb]
+if ![runto "foo.adb:$bp_location" ] then {
+  perror "Couldn't run ${testfile}"
+  return
+} 
+
+gdb_test "whatis full" \
+         "type = foo\\.full_table"
+
+gdb_test "print full" \
+         " = \\(144, 233, 377, 610, 987\\)"
+
+gdb_test "whatis $" \
+         "type = foo\\.full_table"
+
diff --git a/gdb/testsuite/gdb.ada/whatis_array_val/foo.adb b/gdb/testsuite/gdb.ada/whatis_array_val/foo.adb
new file mode 100644
index 0000000..8fd6d76
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/whatis_array_val/foo.adb
@@ -0,0 +1,25 @@
+--  Copyright 2012 Free Software Foundation, Inc.
+--
+--  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 3 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, see <http://www.gnu.org/licenses/>.
+
+with Pck; use Pck;
+
+procedure Foo is
+   type Color is (Black, Red, Green, Blue, White);
+   type Full_Table is array (Color) of Integer;
+   Full : Full_Table := (144, 233, 377, 610, 987);
+begin
+   Do_Nothing (Full'Address); -- STOP
+end Foo;
+
diff --git a/gdb/testsuite/gdb.ada/watch_arg/pck.adb b/gdb/testsuite/gdb.ada/whatis_array_val/pck.adb
similarity index 100%
copy from gdb/testsuite/gdb.ada/watch_arg/pck.adb
copy to gdb/testsuite/gdb.ada/whatis_array_val/pck.adb
diff --git a/gdb/testsuite/gdb.ada/homonym/pck.ads b/gdb/testsuite/gdb.ada/whatis_array_val/pck.ads
similarity index 100%
copy from gdb/testsuite/gdb.ada/homonym/pck.ads
copy to gdb/testsuite/gdb.ada/whatis_array_val/pck.ads
diff --git a/gdb/testsuite/gdb.arch/Makefile.in b/gdb/testsuite/gdb.arch/Makefile.in
index 619f78d..e5f8934 100644
--- a/gdb/testsuite/gdb.arch/Makefile.in
+++ b/gdb/testsuite/gdb.arch/Makefile.in
@@ -11,6 +11,7 @@ all info install-info dvi install uninstall installcheck check:
 clean mostlyclean:
 	-rm -f *~ *.o a.out *.x *.ci *.tmp gcore.test system-gcore
 	-rm -f core core.coremaker coremaker.core corefile $(EXECUTABLES)
+	-rm -f *.dwo *.dwp
 
 distclean maintainer-clean realclean: clean
 	-rm -f *~ core
diff --git a/gdb/testsuite/gdb.arch/alpha-step.exp b/gdb/testsuite/gdb.arch/alpha-step.exp
index 53631ef..3008b11 100644
--- a/gdb/testsuite/gdb.arch/alpha-step.exp
+++ b/gdb/testsuite/gdb.arch/alpha-step.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 if ![istarget "alpha*-*-*"] then {
     verbose "Skipping alpha step tests."
diff --git a/gdb/testsuite/gdb.arch/altivec-abi.exp b/gdb/testsuite/gdb.arch/altivec-abi.exp
index 994b23c..a958250 100644
--- a/gdb/testsuite/gdb.arch/altivec-abi.exp
+++ b/gdb/testsuite/gdb.arch/altivec-abi.exp
@@ -18,10 +18,6 @@
 # Tests for Powerpc AltiVec ABI
 
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # This file uses altivec-abi.c for input.
 #
@@ -35,7 +31,7 @@ set testfile "altivec-abi"
 set binfile ${objdir}/${subdir}/${testfile}
 set srcfile ${testfile}.c
 
-if [get_compiler_info $binfile] {
+if [get_compiler_info] {
     warning "get_compiler failed"
     return -1
 }
@@ -151,10 +147,9 @@ proc altivec_abi_tests { extra_flags force_abi } {
 }
 
 if [test_compiler_info gcc*] {
-    set saved_prefix $pf_prefix
-
-    set pf_prefix "${saved_prefix} default ABI, auto:"
-    altivec_abi_tests "additional_flags=-maltivec" "auto"
+    with_test_prefix "default ABI, auto" {
+	altivec_abi_tests  "additional_flags=-maltivec" "auto"
+    }
 
     # On GNU/Linux, we can mix -mabi=no-altivec and -mabi=altivec.
     # So test some combinations.
@@ -163,21 +158,25 @@ if [test_compiler_info gcc*] {
 	# was broken, so skip those tests there.
 	if { ![is_lp64_target] || ![test_compiler_info "gcc-4-\[12\]-*"] } {
 	    set binfile ${objdir}/${subdir}/${testfile}-ge-ge
-	    set pf_prefix "${saved_prefix} generic ABI, forced:"
-	    altivec_abi_tests "additional_flags=-maltivec additional_flags=-mabi=no-altivec" "generic"
+	    with_test_prefix "generic ABI, forced" {
+		altivec_abi_tests "additional_flags=-maltivec additional_flags=-mabi=no-altivec" "generic"
+	    }
 
 	    set binfile ${objdir}/${subdir}/${testfile}-ge-auto
-	    set pf_prefix "${saved_prefix} generic ABI, auto:"
-	    altivec_abi_tests "additional_flags=-maltivec additional_flags=-mabi=no-altivec" "auto"
+	    with_test_prefix "generic ABI, auto" {
+		altivec_abi_tests "additional_flags=-maltivec additional_flags=-mabi=no-altivec" "auto"
+	    }
 	}
 
 	set binfile ${objdir}/${subdir}/${testfile}-av-av
-	set pf_prefix "${saved_prefix} AltiVec ABI, forced:"
-	altivec_abi_tests "additional_flags=-maltivec additional_flags=-mabi=altivec" "altivec"
+	with_test_prefix "AltiVec ABI, forced" {
+	    altivec_abi_tests "additional_flags=-maltivec additional_flags=-mabi=altivec" "altivec"
+	}
 
 	set binfile ${objdir}/${subdir}/${testfile}-av-auto
-	set pf_prefix "${saved_prefix} AltiVec ABI, auto:"
-	altivec_abi_tests "additional_flags=-maltivec additional_flags=-mabi=altivec" "auto"
+	with_test_prefix "AltiVec ABI, auto" {
+	    altivec_abi_tests "additional_flags=-maltivec additional_flags=-mabi=altivec" "auto"
+	}
     }
 } elseif [test_compiler_info xlc*] {
     altivec_abi_tests "additional_flags=-qaltivec" "auto"
diff --git a/gdb/testsuite/gdb.arch/altivec-regs.exp b/gdb/testsuite/gdb.arch/altivec-regs.exp
index 53cba8e..0a708d8 100644
--- a/gdb/testsuite/gdb.arch/altivec-regs.exp
+++ b/gdb/testsuite/gdb.arch/altivec-regs.exp
@@ -17,10 +17,6 @@
 
 # Tests for Powerpc AltiVec register setting and fetching
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # Test the use of registers, especially AltiVec registers, for Powerpc.
 # This file uses altivec-regs.c for input.
@@ -37,7 +33,7 @@ set binfile ${objdir}/${subdir}/${testfile}
 set srcfile ${testfile}.c
 
 set compile_flags {debug nowarnings}
-if [get_compiler_info $binfile] {
+if [get_compiler_info] {
     warning "get_compiler failed"
     return -1
 }
diff --git a/gdb/testsuite/gdb.arch/amd64-byte.exp b/gdb/testsuite/gdb.arch/amd64-byte.exp
index c966f63..023a602 100644
--- a/gdb/testsuite/gdb.arch/amd64-byte.exp
+++ b/gdb/testsuite/gdb.arch/amd64-byte.exp
@@ -18,10 +18,6 @@
 
 # This file is part of the gdb testsuite.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 if { ![istarget x86_64-*-* ] || ![is_lp64_target] } {
     verbose "Skipping amd64 byte register tests."
@@ -32,7 +28,7 @@ set testfile "amd64-byte"
 set srcfile amd64-pseudo.c
 set binfile ${objdir}/${subdir}/${testfile}
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.arch/amd64-disp-step.exp b/gdb/testsuite/gdb.arch/amd64-disp-step.exp
index a890f35..e7bb167 100644
--- a/gdb/testsuite/gdb.arch/amd64-disp-step.exp
+++ b/gdb/testsuite/gdb.arch/amd64-disp-step.exp
@@ -17,10 +17,6 @@
 
 # Test amd64 displaced stepping.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 if { ![istarget x86_64-*-* ] || ![is_lp64_target] } {
     verbose "Skipping x86_64 displaced stepping tests."
diff --git a/gdb/testsuite/gdb.arch/amd64-dword.exp b/gdb/testsuite/gdb.arch/amd64-dword.exp
index d2ac584..a1f615c 100644
--- a/gdb/testsuite/gdb.arch/amd64-dword.exp
+++ b/gdb/testsuite/gdb.arch/amd64-dword.exp
@@ -18,10 +18,6 @@
 
 # This file is part of the gdb testsuite.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 if { ![istarget x86_64-*-* ] || ![is_lp64_target] } {
     verbose "Skipping amd64 dword register tests."
@@ -32,7 +28,7 @@ set testfile "amd64-dword"
 set srcfile amd64-pseudo.c
 set binfile ${objdir}/${subdir}/${testfile}
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.arch/amd64-entry-value-param.S b/gdb/testsuite/gdb.arch/amd64-entry-value-param.S
new file mode 100644
index 0000000..117d651
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/amd64-entry-value-param.S
@@ -0,0 +1,611 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* This file is compiled from gdb.arch/amd64-entry-value-param.c
+   using -g -dA -S -O2.  */
+
+	.file	"amd64-entry-value-param.c"
+	.text
+.Ltext0:
+	.p2align 4,,15
+	.type	foo.isra.0.constprop.2, @function
+foo.isra.0.constprop.2:
+.LFB4:
+	.file 1 "gdb.arch/amd64-entry-value-param.c"
+	/* gdb.arch/amd64-entry-value-param.c:21 */
+	.loc 1 21 0
+	.cfi_startproc
+.LVL0:
+/* BLOCK 2 freq:10000 seq:0 */
+/* PRED: ENTRY [100.0%]  (fallthru) */
+	/* gdb.arch/amd64-entry-value-param.c:26 */
+	.loc 1 26 0
+	movl	vv(%rip), %eax
+	addl	$1, %eax
+	movl	%eax, vv(%rip)
+	/* gdb.arch/amd64-entry-value-param.c:27 */
+	.loc 1 27 0
+	leal	3(%rdi), %eax
+/* SUCC: EXIT [100.0%]  */
+	/* gdb.arch/amd64-entry-value-param.c:28 */
+	.loc 1 28 0
+	ret
+	.cfi_endproc
+.LFE4:
+	.size	foo.isra.0.constprop.2, .-foo.isra.0.constprop.2
+	.p2align 4,,15
+	.type	bar.constprop.1, @function
+bar.constprop.1:
+.LFB5:
+	/* gdb.arch/amd64-entry-value-param.c:31 */
+	.loc 1 31 0
+	.cfi_startproc
+/* BLOCK 2 freq:10000 seq:0 */
+/* PRED: ENTRY [100.0%]  (fallthru) */
+.LVL1:
+	pushq	%rbx
+.LCFI0:
+	.cfi_def_cfa_offset 16
+	.cfi_offset 3, -16
+	/* gdb.arch/amd64-entry-value-param.c:33 */
+	.loc 1 33 0
+	movl	$10, %edi
+	call	foo.isra.0.constprop.2
+.LVL2:
+	movl	$10, %edi
+	movl	%eax, %ebx
+	call	foo.isra.0.constprop.2
+.LVL3:
+	movl	$16, %edi
+	addl	%eax, %ebx
+	call	foo.isra.0.constprop.2
+.LVL4:
+	leal	10(%rbx,%rax), %eax
+	/* gdb.arch/amd64-entry-value-param.c:34 */
+	.loc 1 34 0
+	popq	%rbx
+.LCFI1:
+	.cfi_def_cfa_offset 8
+/* SUCC: EXIT [100.0%]  */
+	ret
+	.cfi_endproc
+.LFE5:
+	.size	bar.constprop.1, .-bar.constprop.1
+	.section	.text.startup,"ax", at progbits
+	.p2align 4,,15
+	.globl	main
+	.type	main, @function
+main:
+.LFB2:
+	/* gdb.arch/amd64-entry-value-param.c:38 */
+	.loc 1 38 0
+	.cfi_startproc
+/* BLOCK 2 freq:10000 seq:0 */
+/* PRED: ENTRY [100.0%]  (fallthru) */
+	/* gdb.arch/amd64-entry-value-param.c:39 */
+	.loc 1 39 0
+	jmp	bar.constprop.1
+/* SUCC: EXIT [100.0%]  (ab,sibcall) */
+.LVL5:
+	.cfi_endproc
+.LFE2:
+	.size	main, .-main
+	.comm	vv,4,4
+	.text
+.Letext0:
+	.section	.debug_info,"", at progbits
+.Ldebug_info0:
+	.4byte	0x1b7	/* Length of Compilation Unit Info */
+	.2byte	0x2	/* DWARF version number */
+	.4byte	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
+	.byte	0x8	/* Pointer Size (in bytes) */
+	.uleb128 0x1	/* (DIE (0xb) DW_TAG_compile_unit) */
+	.4byte	.LASF0	/* DW_AT_producer: "GNU C 4.7.1 20120612 (prerelease)" */
+	.byte	0x1	/* DW_AT_language */
+	.4byte	.LASF1	/* DW_AT_name: "gdb.arch/amd64-entry-value-param.c" */
+	.4byte	.LASF2	/* DW_AT_comp_dir: "" */
+	.4byte	.Ldebug_ranges0+0	/* DW_AT_ranges */
+	.quad	0	/* DW_AT_low_pc */
+	.quad	0	/* DW_AT_entry_pc */
+	.4byte	.Ldebug_line0	/* DW_AT_stmt_list */
+	.uleb128 0x2	/* (DIE (0x31) DW_TAG_subprogram) */
+	.ascii "foo\0"	/* DW_AT_name */
+	.byte	0x1	/* DW_AT_decl_file (gdb.arch/amd64-entry-value-param.c) */
+	.byte	0x15	/* DW_AT_decl_line */
+	.byte	0x1	/* DW_AT_prototyped */
+	.4byte	0x79	/* DW_AT_type */
+	.byte	0	/* DW_AT_inline */
+	.4byte	0x79	/* DW_AT_sibling */
+	.uleb128 0x3	/* (DIE (0x42) DW_TAG_formal_parameter) */
+	.ascii "x\0"	/* DW_AT_name */
+	.byte	0x1	/* DW_AT_decl_file (gdb.arch/amd64-entry-value-param.c) */
+	.byte	0x15	/* DW_AT_decl_line */
+	.4byte	0x79	/* DW_AT_type */
+	.uleb128 0x3	/* (DIE (0x4b) DW_TAG_formal_parameter) */
+	.ascii "y\0"	/* DW_AT_name */
+	.byte	0x1	/* DW_AT_decl_file (gdb.arch/amd64-entry-value-param.c) */
+	.byte	0x15	/* DW_AT_decl_line */
+	.4byte	0x79	/* DW_AT_type */
+	.uleb128 0x3	/* (DIE (0x54) DW_TAG_formal_parameter) */
+	.ascii "z\0"	/* DW_AT_name */
+	.byte	0x1	/* DW_AT_decl_file (gdb.arch/amd64-entry-value-param.c) */
+	.byte	0x15	/* DW_AT_decl_line */
+	.4byte	0x79	/* DW_AT_type */
+	.uleb128 0x4	/* (DIE (0x5d) DW_TAG_variable) */
+	.ascii "a\0"	/* DW_AT_name */
+	.byte	0x1	/* DW_AT_decl_file (gdb.arch/amd64-entry-value-param.c) */
+	.byte	0x17	/* DW_AT_decl_line */
+	.4byte	0x79	/* DW_AT_type */
+	.uleb128 0x4	/* (DIE (0x66) DW_TAG_variable) */
+	.ascii "b\0"	/* DW_AT_name */
+	.byte	0x1	/* DW_AT_decl_file (gdb.arch/amd64-entry-value-param.c) */
+	.byte	0x18	/* DW_AT_decl_line */
+	.4byte	0x79	/* DW_AT_type */
+	.uleb128 0x4	/* (DIE (0x6f) DW_TAG_variable) */
+	.ascii "c\0"	/* DW_AT_name */
+	.byte	0x1	/* DW_AT_decl_file (gdb.arch/amd64-entry-value-param.c) */
+	.byte	0x19	/* DW_AT_decl_line */
+	.4byte	0x79	/* DW_AT_type */
+	.byte	0	/* end of children of DIE 0x31 */
+	.uleb128 0x5	/* (DIE (0x79) DW_TAG_base_type) */
+	.byte	0x4	/* DW_AT_byte_size */
+	.byte	0x5	/* DW_AT_encoding */
+	.ascii "int\0"	/* DW_AT_name */
+	.uleb128 0x2	/* (DIE (0x80) DW_TAG_subprogram) */
+	.ascii "bar\0"	/* DW_AT_name */
+	.byte	0x1	/* DW_AT_decl_file (gdb.arch/amd64-entry-value-param.c) */
+	.byte	0x1f	/* DW_AT_decl_line */
+	.byte	0x1	/* DW_AT_prototyped */
+	.4byte	0x79	/* DW_AT_type */
+	.byte	0x1	/* DW_AT_inline */
+	.4byte	0x9b	/* DW_AT_sibling */
+	.uleb128 0x3	/* (DIE (0x91) DW_TAG_formal_parameter) */
+	.ascii "x\0"	/* DW_AT_name */
+	.byte	0x1	/* DW_AT_decl_file (gdb.arch/amd64-entry-value-param.c) */
+	.byte	0x1f	/* DW_AT_decl_line */
+	.4byte	0x79	/* DW_AT_type */
+	.byte	0	/* end of children of DIE 0x80 */
+	.uleb128 0x6	/* (DIE (0x9b) DW_TAG_subprogram) */
+	.4byte	0x31	/* DW_AT_abstract_origin */
+	.quad	.LFB4	/* DW_AT_low_pc */
+	.quad	.LFE4	/* DW_AT_high_pc */
+	.byte	0x2	/* DW_AT_frame_base */
+	.byte	0x77	/* DW_OP_breg7 */
+	.sleb128 8
+	.byte	0x1	/* DW_AT_GNU_all_call_sites */
+	.4byte	0xf1	/* DW_AT_sibling */
+	.uleb128 0x7	/* (DIE (0xb8) DW_TAG_formal_parameter) */
+	.4byte	0x42	/* DW_AT_abstract_origin */
+	.byte	0x1	/* DW_AT_location */
+	.byte	0x55	/* DW_OP_reg5 */
+	.uleb128 0x7	/* (DIE (0xbf) DW_TAG_formal_parameter) */
+	.4byte	0x4b	/* DW_AT_abstract_origin */
+	.byte	0x6	/* DW_AT_location */
+	.byte	0xfa	/* DW_OP_GNU_parameter_ref */
+	.4byte	0x4b
+	.byte	0x9f	/* DW_OP_stack_value */
+	.uleb128 0x8	/* (DIE (0xcb) DW_TAG_variable) */
+	.4byte	0x5d	/* DW_AT_abstract_origin */
+	.byte	0x5	/* DW_AT_location */
+	.byte	0x75	/* DW_OP_breg5 */
+	.sleb128 0
+	.byte	0x31	/* DW_OP_lit1 */
+	.byte	0x24	/* DW_OP_shl */
+	.byte	0x9f	/* DW_OP_stack_value */
+	.uleb128 0x8	/* (DIE (0xd6) DW_TAG_variable) */
+	.4byte	0x66	/* DW_AT_abstract_origin */
+	.byte	0x8	/* DW_AT_location */
+	.byte	0xfa	/* DW_OP_GNU_parameter_ref */
+	.4byte	0x4b
+	.byte	0x31	/* DW_OP_lit1 */
+	.byte	0x24	/* DW_OP_shl */
+	.byte	0x9f	/* DW_OP_stack_value */
+	.uleb128 0x9	/* (DIE (0xe4) DW_TAG_variable) */
+	.4byte	0x6f	/* DW_AT_abstract_origin */
+	.byte	0x6	/* DW_AT_const_value */
+	.uleb128 0xa	/* (DIE (0xea) DW_TAG_formal_parameter) */
+	.4byte	0x54	/* DW_AT_abstract_origin */
+	.byte	0x3	/* DW_AT_const_value */
+	.byte	0	/* end of children of DIE 0x9b */
+	.uleb128 0xb	/* (DIE (0xf1) DW_TAG_subprogram) */
+	.4byte	0x80	/* DW_AT_abstract_origin */
+	.quad	.LFB5	/* DW_AT_low_pc */
+	.quad	.LFE5	/* DW_AT_high_pc */
+	.4byte	.LLST0	/* DW_AT_frame_base */
+	.byte	0x1	/* DW_AT_GNU_all_call_sites */
+	.4byte	0x16c	/* DW_AT_sibling */
+	.uleb128 0xa	/* (DIE (0x10f) DW_TAG_formal_parameter) */
+	.4byte	0x91	/* DW_AT_abstract_origin */
+	.byte	0xa	/* DW_AT_const_value */
+	.uleb128 0xc	/* (DIE (0x115) DW_TAG_GNU_call_site) */
+	.quad	.LVL2	/* DW_AT_low_pc */
+	.4byte	0x9b	/* DW_AT_abstract_origin */
+	.4byte	0x133	/* DW_AT_sibling */
+	.uleb128 0xd	/* (DIE (0x126) DW_TAG_GNU_call_site_parameter) */
+	.byte	0x1	/* DW_AT_location */
+	.byte	0x55	/* DW_OP_reg5 */
+	.byte	0x1	/* DW_AT_GNU_call_site_value */
+	.byte	0x3a	/* DW_OP_lit10 */
+	.uleb128 0xe	/* (DIE (0x12b) DW_TAG_GNU_call_site_parameter) */
+	.4byte	0x4b	/* DW_AT_abstract_origin */
+	.byte	0x1	/* DW_AT_GNU_call_site_value */
+	.byte	0x32	/* DW_OP_lit2 */
+	.byte	0	/* end of children of DIE 0x115 */
+	.uleb128 0xc	/* (DIE (0x133) DW_TAG_GNU_call_site) */
+	.quad	.LVL3	/* DW_AT_low_pc */
+	.4byte	0x9b	/* DW_AT_abstract_origin */
+	.4byte	0x151	/* DW_AT_sibling */
+	.uleb128 0xd	/* (DIE (0x144) DW_TAG_GNU_call_site_parameter) */
+	.byte	0x1	/* DW_AT_location */
+	.byte	0x55	/* DW_OP_reg5 */
+	.byte	0x1	/* DW_AT_GNU_call_site_value */
+	.byte	0x3a	/* DW_OP_lit10 */
+	.uleb128 0xe	/* (DIE (0x149) DW_TAG_GNU_call_site_parameter) */
+	.4byte	0x4b	/* DW_AT_abstract_origin */
+	.byte	0x1	/* DW_AT_GNU_call_site_value */
+	.byte	0x34	/* DW_OP_lit4 */
+	.byte	0	/* end of children of DIE 0x133 */
+	.uleb128 0xf	/* (DIE (0x151) DW_TAG_GNU_call_site) */
+	.quad	.LVL4	/* DW_AT_low_pc */
+	.4byte	0x9b	/* DW_AT_abstract_origin */
+	.uleb128 0xd	/* (DIE (0x15e) DW_TAG_GNU_call_site_parameter) */
+	.byte	0x1	/* DW_AT_location */
+	.byte	0x55	/* DW_OP_reg5 */
+	.byte	0x1	/* DW_AT_GNU_call_site_value */
+	.byte	0x40	/* DW_OP_lit16 */
+	.uleb128 0xe	/* (DIE (0x163) DW_TAG_GNU_call_site_parameter) */
+	.4byte	0x4b	/* DW_AT_abstract_origin */
+	.byte	0x1	/* DW_AT_GNU_call_site_value */
+	.byte	0x3a	/* DW_OP_lit10 */
+	.byte	0	/* end of children of DIE 0x151 */
+	.byte	0	/* end of children of DIE 0xf1 */
+	.uleb128 0x10	/* (DIE (0x16c) DW_TAG_subprogram) */
+	.byte	0x1	/* DW_AT_external */
+	.4byte	.LASF3	/* DW_AT_name: "main" */
+	.byte	0x1	/* DW_AT_decl_file (gdb.arch/amd64-entry-value-param.c) */
+	.byte	0x25	/* DW_AT_decl_line */
+	.byte	0x1	/* DW_AT_prototyped */
+	.4byte	0x79	/* DW_AT_type */
+	.quad	.LFB2	/* DW_AT_low_pc */
+	.quad	.LFE2	/* DW_AT_high_pc */
+	.byte	0x2	/* DW_AT_frame_base */
+	.byte	0x77	/* DW_OP_breg7 */
+	.sleb128 8
+	.byte	0x1	/* DW_AT_GNU_all_call_sites */
+	.4byte	0x1a0	/* DW_AT_sibling */
+	.uleb128 0x11	/* (DIE (0x191) DW_TAG_GNU_call_site) */
+	.quad	.LVL5	/* DW_AT_low_pc */
+	.byte	0x1	/* DW_AT_GNU_tail_call */
+	.4byte	0xf1	/* DW_AT_abstract_origin */
+	.byte	0	/* end of children of DIE 0x16c */
+	.uleb128 0x12	/* (DIE (0x1a0) DW_TAG_variable) */
+	.ascii "vv\0"	/* DW_AT_name */
+	.byte	0x1	/* DW_AT_decl_file (gdb.arch/amd64-entry-value-param.c) */
+	.byte	0x12	/* DW_AT_decl_line */
+	.4byte	0x1b5	/* DW_AT_type */
+	.byte	0x1	/* DW_AT_external */
+	.byte	0x9	/* DW_AT_location */
+	.byte	0x3	/* DW_OP_addr */
+	.quad	vv
+	.uleb128 0x13	/* (DIE (0x1b5) DW_TAG_volatile_type) */
+	.4byte	0x79	/* DW_AT_type */
+	.byte	0	/* end of children of DIE 0xb */
+	.section	.debug_abbrev,"", at progbits
+.Ldebug_abbrev0:
+	.uleb128 0x1	/* (abbrev code) */
+	.uleb128 0x11	/* (TAG: DW_TAG_compile_unit) */
+	.byte	0x1	/* DW_children_yes */
+	.uleb128 0x25	/* (DW_AT_producer) */
+	.uleb128 0xe	/* (DW_FORM_strp) */
+	.uleb128 0x13	/* (DW_AT_language) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3	/* (DW_AT_name) */
+	.uleb128 0xe	/* (DW_FORM_strp) */
+	.uleb128 0x1b	/* (DW_AT_comp_dir) */
+	.uleb128 0xe	/* (DW_FORM_strp) */
+	.uleb128 0x55	/* (DW_AT_ranges) */
+	.uleb128 0x6	/* (DW_FORM_data4) */
+	.uleb128 0x11	/* (DW_AT_low_pc) */
+	.uleb128 0x1	/* (DW_FORM_addr) */
+	.uleb128 0x52	/* (DW_AT_entry_pc) */
+	.uleb128 0x1	/* (DW_FORM_addr) */
+	.uleb128 0x10	/* (DW_AT_stmt_list) */
+	.uleb128 0x6	/* (DW_FORM_data4) */
+	.byte	0
+	.byte	0
+	.uleb128 0x2	/* (abbrev code) */
+	.uleb128 0x2e	/* (TAG: DW_TAG_subprogram) */
+	.byte	0x1	/* DW_children_yes */
+	.uleb128 0x3	/* (DW_AT_name) */
+	.uleb128 0x8	/* (DW_FORM_string) */
+	.uleb128 0x3a	/* (DW_AT_decl_file) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3b	/* (DW_AT_decl_line) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x27	/* (DW_AT_prototyped) */
+	.uleb128 0xc	/* (DW_FORM_flag) */
+	.uleb128 0x49	/* (DW_AT_type) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.uleb128 0x20	/* (DW_AT_inline) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x1	/* (DW_AT_sibling) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.byte	0
+	.byte	0
+	.uleb128 0x3	/* (abbrev code) */
+	.uleb128 0x5	/* (TAG: DW_TAG_formal_parameter) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0x3	/* (DW_AT_name) */
+	.uleb128 0x8	/* (DW_FORM_string) */
+	.uleb128 0x3a	/* (DW_AT_decl_file) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3b	/* (DW_AT_decl_line) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x49	/* (DW_AT_type) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.byte	0
+	.byte	0
+	.uleb128 0x4	/* (abbrev code) */
+	.uleb128 0x34	/* (TAG: DW_TAG_variable) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0x3	/* (DW_AT_name) */
+	.uleb128 0x8	/* (DW_FORM_string) */
+	.uleb128 0x3a	/* (DW_AT_decl_file) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3b	/* (DW_AT_decl_line) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x49	/* (DW_AT_type) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.byte	0
+	.byte	0
+	.uleb128 0x5	/* (abbrev code) */
+	.uleb128 0x24	/* (TAG: DW_TAG_base_type) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0xb	/* (DW_AT_byte_size) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3e	/* (DW_AT_encoding) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3	/* (DW_AT_name) */
+	.uleb128 0x8	/* (DW_FORM_string) */
+	.byte	0
+	.byte	0
+	.uleb128 0x6	/* (abbrev code) */
+	.uleb128 0x2e	/* (TAG: DW_TAG_subprogram) */
+	.byte	0x1	/* DW_children_yes */
+	.uleb128 0x31	/* (DW_AT_abstract_origin) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.uleb128 0x11	/* (DW_AT_low_pc) */
+	.uleb128 0x1	/* (DW_FORM_addr) */
+	.uleb128 0x12	/* (DW_AT_high_pc) */
+	.uleb128 0x1	/* (DW_FORM_addr) */
+	.uleb128 0x40	/* (DW_AT_frame_base) */
+	.uleb128 0xa	/* (DW_FORM_block1) */
+	.uleb128 0x2117	/* (DW_AT_GNU_all_call_sites) */
+	.uleb128 0xc	/* (DW_FORM_flag) */
+	.uleb128 0x1	/* (DW_AT_sibling) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.byte	0
+	.byte	0
+	.uleb128 0x7	/* (abbrev code) */
+	.uleb128 0x5	/* (TAG: DW_TAG_formal_parameter) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0x31	/* (DW_AT_abstract_origin) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.uleb128 0x2	/* (DW_AT_location) */
+	.uleb128 0xa	/* (DW_FORM_block1) */
+	.byte	0
+	.byte	0
+	.uleb128 0x8	/* (abbrev code) */
+	.uleb128 0x34	/* (TAG: DW_TAG_variable) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0x31	/* (DW_AT_abstract_origin) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.uleb128 0x2	/* (DW_AT_location) */
+	.uleb128 0xa	/* (DW_FORM_block1) */
+	.byte	0
+	.byte	0
+	.uleb128 0x9	/* (abbrev code) */
+	.uleb128 0x34	/* (TAG: DW_TAG_variable) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0x31	/* (DW_AT_abstract_origin) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.uleb128 0x1c	/* (DW_AT_const_value) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.byte	0
+	.byte	0
+	.uleb128 0xa	/* (abbrev code) */
+	.uleb128 0x5	/* (TAG: DW_TAG_formal_parameter) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0x31	/* (DW_AT_abstract_origin) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.uleb128 0x1c	/* (DW_AT_const_value) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.byte	0
+	.byte	0
+	.uleb128 0xb	/* (abbrev code) */
+	.uleb128 0x2e	/* (TAG: DW_TAG_subprogram) */
+	.byte	0x1	/* DW_children_yes */
+	.uleb128 0x31	/* (DW_AT_abstract_origin) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.uleb128 0x11	/* (DW_AT_low_pc) */
+	.uleb128 0x1	/* (DW_FORM_addr) */
+	.uleb128 0x12	/* (DW_AT_high_pc) */
+	.uleb128 0x1	/* (DW_FORM_addr) */
+	.uleb128 0x40	/* (DW_AT_frame_base) */
+	.uleb128 0x6	/* (DW_FORM_data4) */
+	.uleb128 0x2117	/* (DW_AT_GNU_all_call_sites) */
+	.uleb128 0xc	/* (DW_FORM_flag) */
+	.uleb128 0x1	/* (DW_AT_sibling) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.byte	0
+	.byte	0
+	.uleb128 0xc	/* (abbrev code) */
+	.uleb128 0x4109	/* (TAG: DW_TAG_GNU_call_site) */
+	.byte	0x1	/* DW_children_yes */
+	.uleb128 0x11	/* (DW_AT_low_pc) */
+	.uleb128 0x1	/* (DW_FORM_addr) */
+	.uleb128 0x31	/* (DW_AT_abstract_origin) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.uleb128 0x1	/* (DW_AT_sibling) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.byte	0
+	.byte	0
+	.uleb128 0xd	/* (abbrev code) */
+	.uleb128 0x410a	/* (TAG: DW_TAG_GNU_call_site_parameter) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0x2	/* (DW_AT_location) */
+	.uleb128 0xa	/* (DW_FORM_block1) */
+	.uleb128 0x2111	/* (DW_AT_GNU_call_site_value) */
+	.uleb128 0xa	/* (DW_FORM_block1) */
+	.byte	0
+	.byte	0
+	.uleb128 0xe	/* (abbrev code) */
+	.uleb128 0x410a	/* (TAG: DW_TAG_GNU_call_site_parameter) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0x31	/* (DW_AT_abstract_origin) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.uleb128 0x2111	/* (DW_AT_GNU_call_site_value) */
+	.uleb128 0xa	/* (DW_FORM_block1) */
+	.byte	0
+	.byte	0
+	.uleb128 0xf	/* (abbrev code) */
+	.uleb128 0x4109	/* (TAG: DW_TAG_GNU_call_site) */
+	.byte	0x1	/* DW_children_yes */
+	.uleb128 0x11	/* (DW_AT_low_pc) */
+	.uleb128 0x1	/* (DW_FORM_addr) */
+	.uleb128 0x31	/* (DW_AT_abstract_origin) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.byte	0
+	.byte	0
+	.uleb128 0x10	/* (abbrev code) */
+	.uleb128 0x2e	/* (TAG: DW_TAG_subprogram) */
+	.byte	0x1	/* DW_children_yes */
+	.uleb128 0x3f	/* (DW_AT_external) */
+	.uleb128 0xc	/* (DW_FORM_flag) */
+	.uleb128 0x3	/* (DW_AT_name) */
+	.uleb128 0xe	/* (DW_FORM_strp) */
+	.uleb128 0x3a	/* (DW_AT_decl_file) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3b	/* (DW_AT_decl_line) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x27	/* (DW_AT_prototyped) */
+	.uleb128 0xc	/* (DW_FORM_flag) */
+	.uleb128 0x49	/* (DW_AT_type) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.uleb128 0x11	/* (DW_AT_low_pc) */
+	.uleb128 0x1	/* (DW_FORM_addr) */
+	.uleb128 0x12	/* (DW_AT_high_pc) */
+	.uleb128 0x1	/* (DW_FORM_addr) */
+	.uleb128 0x40	/* (DW_AT_frame_base) */
+	.uleb128 0xa	/* (DW_FORM_block1) */
+	.uleb128 0x2117	/* (DW_AT_GNU_all_call_sites) */
+	.uleb128 0xc	/* (DW_FORM_flag) */
+	.uleb128 0x1	/* (DW_AT_sibling) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.byte	0
+	.byte	0
+	.uleb128 0x11	/* (abbrev code) */
+	.uleb128 0x4109	/* (TAG: DW_TAG_GNU_call_site) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0x11	/* (DW_AT_low_pc) */
+	.uleb128 0x1	/* (DW_FORM_addr) */
+	.uleb128 0x2115	/* (DW_AT_GNU_tail_call) */
+	.uleb128 0xc	/* (DW_FORM_flag) */
+	.uleb128 0x31	/* (DW_AT_abstract_origin) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.byte	0
+	.byte	0
+	.uleb128 0x12	/* (abbrev code) */
+	.uleb128 0x34	/* (TAG: DW_TAG_variable) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0x3	/* (DW_AT_name) */
+	.uleb128 0x8	/* (DW_FORM_string) */
+	.uleb128 0x3a	/* (DW_AT_decl_file) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3b	/* (DW_AT_decl_line) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x49	/* (DW_AT_type) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.uleb128 0x3f	/* (DW_AT_external) */
+	.uleb128 0xc	/* (DW_FORM_flag) */
+	.uleb128 0x2	/* (DW_AT_location) */
+	.uleb128 0xa	/* (DW_FORM_block1) */
+	.byte	0
+	.byte	0
+	.uleb128 0x13	/* (abbrev code) */
+	.uleb128 0x35	/* (TAG: DW_TAG_volatile_type) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0x49	/* (DW_AT_type) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.byte	0
+	.byte	0
+	.byte	0
+	.section	.debug_loc,"", at progbits
+.Ldebug_loc0:
+.LLST0:
+	.quad	.LFB5	/* Location list begin address (*.LLST0) */
+	.quad	.LCFI0	/* Location list end address (*.LLST0) */
+	.2byte	0x2	/* Location expression size */
+	.byte	0x77	/* DW_OP_breg7 */
+	.sleb128 8
+	.quad	.LCFI0	/* Location list begin address (*.LLST0) */
+	.quad	.LCFI1	/* Location list end address (*.LLST0) */
+	.2byte	0x2	/* Location expression size */
+	.byte	0x77	/* DW_OP_breg7 */
+	.sleb128 16
+	.quad	.LCFI1	/* Location list begin address (*.LLST0) */
+	.quad	.LFE5	/* Location list end address (*.LLST0) */
+	.2byte	0x2	/* Location expression size */
+	.byte	0x77	/* DW_OP_breg7 */
+	.sleb128 8
+	.quad	0	/* Location list terminator begin (*.LLST0) */
+	.quad	0	/* Location list terminator end (*.LLST0) */
+	.section	.debug_aranges,"", at progbits
+	.4byte	0x3c	/* Length of Address Ranges Info */
+	.2byte	0x2	/* DWARF Version */
+	.4byte	.Ldebug_info0	/* Offset of Compilation Unit Info */
+	.byte	0x8	/* Size of Address */
+	.byte	0	/* Size of Segment Descriptor */
+	.2byte	0	/* Pad to 16 byte boundary */
+	.2byte	0
+	.quad	.Ltext0	/* Address */
+	.quad	.Letext0-.Ltext0	/* Length */
+	.quad	.LFB2	/* Address */
+	.quad	.LFE2-.LFB2	/* Length */
+	.quad	0
+	.quad	0
+	.section	.debug_ranges,"", at progbits
+.Ldebug_ranges0:
+	.quad	.Ltext0	/* Offset 0 */
+	.quad	.Letext0
+	.quad	.LFB2	/* Offset 0x10 */
+	.quad	.LFE2
+	.quad	0
+	.quad	0
+	.section	.debug_line,"", at progbits
+.Ldebug_line0:
+	.section	.debug_str,"MS", at progbits,1
+.LASF1:
+	.string	"gdb.arch/amd64-entry-value-param.c"
+.LASF3:
+	.string	"main"
+.LASF2:
+	.string	""
+.LASF0:
+	.string	"GNU C 4.7.1 20120612 (prerelease)"
+	.ident	"GCC: (GNU) 4.7.1 20120612 (prerelease)"
+	.section	.note.GNU-stack,"", at progbits
diff --git a/gdb/testsuite/gdb.arch/amd64-entry-value-param.c b/gdb/testsuite/gdb.arch/amd64-entry-value-param.c
new file mode 100644
index 0000000..a7a0a3f
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/amd64-entry-value-param.c
@@ -0,0 +1,40 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+volatile int vv;
+
+static __attribute__((noinline)) int
+foo (int x, int y, int z)
+{
+  int a = x * 2;
+  int b = y * 2;
+  int c = z * 2;
+  vv++; /* break-here */
+  return x + z;
+}
+
+static __attribute__((noinline)) int
+bar (int x)
+{
+  return foo (x, 2, 3) + foo (x, 4, 3) + foo (x + 6, x, 3) + x;
+}
+
+int
+main (void)
+{
+  return bar (10);
+}
diff --git a/gdb/testsuite/gdb.arch/amd64-entry-value-param.exp b/gdb/testsuite/gdb.arch/amd64-entry-value-param.exp
new file mode 100644
index 0000000..9d80dc6
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/amd64-entry-value-param.exp
@@ -0,0 +1,51 @@
+# Copyright (C) 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+set testfile amd64-entry-value-param
+set srcfile ${testfile}.S
+set csrcfile ${testfile}.c
+set opts {}
+
+if [info exists COMPILE] {
+    # make check RUNTESTFLAGS="gdb.arch/amd64-entry-value-param.exp COMPILE=1"
+    set srcfile ${csrcfile}
+    lappend opts debug optimize=-O2
+} elseif { ![istarget x86_64-*-* ] || ![is_lp64_target] } {
+    verbose "Skipping amd64-entry-value-param."
+    return
+}
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} $opts] } {
+    return -1
+}
+
+if ![runto_main] {
+    return -1
+}
+
+set srcfile $csrcfile
+gdb_breakpoint [gdb_get_line_number "break-here"]
+
+gdb_continue_to_breakpoint "break-here" ".* break-here .*"
+gdb_test "p y" " = 2"
+gdb_test "p b" " = 4"
+
+gdb_continue_to_breakpoint "break-here" ".* break-here .*"
+gdb_test "p y" " = 4"
+gdb_test "p b" " = 8"
+
+gdb_continue_to_breakpoint "break-here" ".* break-here .*"
+gdb_test "p y" " = 10"
+gdb_test "p b" " = 20"
diff --git a/gdb/testsuite/gdb.arch/amd64-i386-address.exp b/gdb/testsuite/gdb.arch/amd64-i386-address.exp
index f2eac3f..dc82d7f 100644
--- a/gdb/testsuite/gdb.arch/amd64-i386-address.exp
+++ b/gdb/testsuite/gdb.arch/amd64-i386-address.exp
@@ -18,7 +18,8 @@
 # Test UNsigned extension of the 32-bit inferior address on a 64-bit host.
 # On native 32-bit host the test always PASSed.
 
-if {(![istarget "x86_64-*-*"] && ![istarget "i?86-*-*"]) || ![is_lp64_target] } then {
+if { (![istarget "x86_64-*-*"] && ![istarget "i?86-*-*"]) || ![is_lp64_target]
+     || [istarget "*-*-openbsd*"] } then {
     verbose "Skipping amd64->i386 adress test."
     return
 }
diff --git a/gdb/testsuite/gdb.arch/amd64-word.exp b/gdb/testsuite/gdb.arch/amd64-word.exp
index 47d5ba0..6207518 100644
--- a/gdb/testsuite/gdb.arch/amd64-word.exp
+++ b/gdb/testsuite/gdb.arch/amd64-word.exp
@@ -18,10 +18,6 @@
 
 # This file is part of the gdb testsuite.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 if { ![istarget x86_64-*-* ] || ![is_lp64_target] } {
     verbose "Skipping amd64 word register tests."
@@ -32,7 +28,7 @@ set testfile "amd64-word"
 set srcfile amd64-pseudo.c
 set binfile ${objdir}/${subdir}/${testfile}
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.arch/arm-disp-step.S b/gdb/testsuite/gdb.arch/arm-disp-step.S
index 423edc0..09d1663 100644
--- a/gdb/testsuite/gdb.arch/arm-disp-step.S
+++ b/gdb/testsuite/gdb.arch/arm-disp-step.S
@@ -110,7 +110,7 @@ test_ret:
 	.type test_branch, %function
 test_branch:
 	b	L_branch
-	.global
+	.global L_branch
 L_branch:
 	bx lr
 	.size test_branch, .-test_branch
@@ -124,7 +124,7 @@ L_branch:
 test_ldr_pc:
 	ldr	r1, [pc, #0]
 
-	.global
+	.global test_ldr_pc_ret
 test_ldr_pc_ret:
 	bx lr
 	.size test_ldr_pc, .-test_ldr_pc
@@ -137,10 +137,10 @@ test_ldm_stm_pc:
 	ldmia	sp!, {r0, r1}
 	ldr	r0, .L1
 	stmdb	sp!, {r0}
-	.global
+	.global test_ldm_pc
 test_ldm_pc:
 	ldmia	sp!, {pc}
-	.global
+	.global test_ldm_stm_pc_ret
 test_ldm_stm_pc_ret:
 	bx lr
 	.align	2
diff --git a/gdb/testsuite/gdb.arch/arm-disp-step.exp b/gdb/testsuite/gdb.arch/arm-disp-step.exp
index 5e04f05..d09885d 100644
--- a/gdb/testsuite/gdb.arch/arm-disp-step.exp
+++ b/gdb/testsuite/gdb.arch/arm-disp-step.exp
@@ -17,10 +17,6 @@
 
 # Test arm displaced stepping.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 if {![istarget "arm*-*-*"]} then {
     verbose "Skipping arm displaced stepping tests."
     return
diff --git a/gdb/testsuite/gdb.arch/e500-abi.exp b/gdb/testsuite/gdb.arch/e500-abi.exp
index 72f90af..d2b13ab 100644
--- a/gdb/testsuite/gdb.arch/e500-abi.exp
+++ b/gdb/testsuite/gdb.arch/e500-abi.exp
@@ -17,10 +17,6 @@
 # Tests for Powerpc e500 ABI
 
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # This file uses e500-abi.c for input.
 #
diff --git a/gdb/testsuite/gdb.arch/e500-prologue.exp b/gdb/testsuite/gdb.arch/e500-prologue.exp
index 7210756..a5e673d 100644
--- a/gdb/testsuite/gdb.arch/e500-prologue.exp
+++ b/gdb/testsuite/gdb.arch/e500-prologue.exp
@@ -15,10 +15,6 @@
 #
 # This file is part of the gdb testsuite.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 # Test PowerPC E500 prologue analyzer.
 
 
diff --git a/gdb/testsuite/gdb.arch/e500-regs.exp b/gdb/testsuite/gdb.arch/e500-regs.exp
index 5a0212d..02c085c 100644
--- a/gdb/testsuite/gdb.arch/e500-regs.exp
+++ b/gdb/testsuite/gdb.arch/e500-regs.exp
@@ -16,10 +16,6 @@
 
 # Tests for Powerpc E500 register setting and fetching
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # Test the use of registers, especially E500 registers, for Powerpc.
 # This file uses e500-regs.c for input.
diff --git a/gdb/testsuite/gdb.arch/gdb1291.exp b/gdb/testsuite/gdb.arch/gdb1291.exp
index 99a5b30..2142bfb 100644
--- a/gdb/testsuite/gdb.arch/gdb1291.exp
+++ b/gdb/testsuite/gdb.arch/gdb1291.exp
@@ -21,10 +21,6 @@
 # Tests for PR:1291.  Ensure that backtrace works properly for stack
 # frames greater than 256 bytes.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 # Test SH backtraces with >256 byte frame stack. (PR:1291)
 
 
diff --git a/gdb/testsuite/gdb.arch/gdb1431.exp b/gdb/testsuite/gdb.arch/gdb1431.exp
index 4fa41b5..7446cce 100644
--- a/gdb/testsuite/gdb.arch/gdb1431.exp
+++ b/gdb/testsuite/gdb.arch/gdb1431.exp
@@ -23,10 +23,6 @@
 # command, which actually is behaving as currently defined.  What apparently
 # was expected was the behavior of the newer "advance" command.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 # Observe that the until command doesn't go all the way to sub2.
 
 
diff --git a/gdb/testsuite/gdb.arch/gdb1558.exp b/gdb/testsuite/gdb.arch/gdb1558.exp
index 67f4332..87b9f67 100644
--- a/gdb/testsuite/gdb.arch/gdb1558.exp
+++ b/gdb/testsuite/gdb.arch/gdb1558.exp
@@ -21,10 +21,6 @@
 # Tests for PR:1558.  Hits breakpoint at main after function called
 # from main.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 if ![istarget "sh-*-*"] then {
     verbose "Skipping SH breakpoint test."
diff --git a/gdb/testsuite/gdb.arch/i386-avx.exp b/gdb/testsuite/gdb.arch/i386-avx.exp
index e66af42..52a6e4a 100644
--- a/gdb/testsuite/gdb.arch/i386-avx.exp
+++ b/gdb/testsuite/gdb.arch/i386-avx.exp
@@ -18,10 +18,6 @@
 
 # This file is part of the gdb testsuite.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 if { ![istarget i?86-*-*] && ![istarget x86_64-*-* ] } {
     verbose "Skipping x86 AVX tests."
@@ -32,7 +28,7 @@ set testfile "i386-avx"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.arch/i386-bp_permanent.exp b/gdb/testsuite/gdb.arch/i386-bp_permanent.exp
index 50c81fa..026f956 100644
--- a/gdb/testsuite/gdb.arch/i386-bp_permanent.exp
+++ b/gdb/testsuite/gdb.arch/i386-bp_permanent.exp
@@ -16,10 +16,6 @@
 
 # This file is part of the gdb testsuite.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 # Test stepping over permanent breakpoints on i386.
 
 if {(![istarget "x86_64-*-*"] && ![istarget "i?86-*-*"]) || ![is_ilp32_target] } then {
diff --git a/gdb/testsuite/gdb.arch/i386-byte.exp b/gdb/testsuite/gdb.arch/i386-byte.exp
index d13fad8..38e8c4d 100644
--- a/gdb/testsuite/gdb.arch/i386-byte.exp
+++ b/gdb/testsuite/gdb.arch/i386-byte.exp
@@ -18,10 +18,6 @@
 
 # This file is part of the gdb testsuite.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 if {(![istarget "x86_64-*-*"] && ![istarget "i?86-*-*"]) || ![is_ilp32_target] } then {
     verbose "Skipping i386 byte register tests."
@@ -32,7 +28,7 @@ set testfile "i386-byte"
 set srcfile i386-pseudo.c
 set binfile ${objdir}/${subdir}/${testfile}
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.arch/i386-disp-step.exp b/gdb/testsuite/gdb.arch/i386-disp-step.exp
index b4e3db4..8a51be5 100644
--- a/gdb/testsuite/gdb.arch/i386-disp-step.exp
+++ b/gdb/testsuite/gdb.arch/i386-disp-step.exp
@@ -17,10 +17,6 @@
 
 # Test i386 displaced stepping.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 if {(![istarget "x86_64-*-*"] && ![istarget "i?86-*-*"]) || ![is_ilp32_target] } then {
     verbose "Skipping x86 displaced stepping tests."
diff --git a/gdb/testsuite/gdb.arch/i386-gnu-cfi.exp b/gdb/testsuite/gdb.arch/i386-gnu-cfi.exp
index 7f48514..d7b41cc 100644
--- a/gdb/testsuite/gdb.arch/i386-gnu-cfi.exp
+++ b/gdb/testsuite/gdb.arch/i386-gnu-cfi.exp
@@ -20,10 +20,6 @@
 
 # Unwinding of DW_CFA_GNU_negative_offset_extended test program.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 # Test i386 unwinder.
 
 
diff --git a/gdb/testsuite/gdb.arch/i386-permbkpt.exp b/gdb/testsuite/gdb.arch/i386-permbkpt.exp
index 414abb7..df3b373 100644
--- a/gdb/testsuite/gdb.arch/i386-permbkpt.exp
+++ b/gdb/testsuite/gdb.arch/i386-permbkpt.exp
@@ -16,10 +16,6 @@
 
 # This file is part of the gdb testsuite.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 # Test inserting breakpoints over permanent breakpoints on i386 and amd64.
 
 if { ![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"] } then {
diff --git a/gdb/testsuite/gdb.arch/i386-prologue.exp b/gdb/testsuite/gdb.arch/i386-prologue.exp
index 21a701e..2e724aa 100644
--- a/gdb/testsuite/gdb.arch/i386-prologue.exp
+++ b/gdb/testsuite/gdb.arch/i386-prologue.exp
@@ -18,10 +18,6 @@
 
 # This file is part of the gdb testsuite.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 # Test i386 prologue analyzer.
 
 
diff --git a/gdb/testsuite/gdb.arch/i386-size-overlap.exp b/gdb/testsuite/gdb.arch/i386-size-overlap.exp
index 59d359f..23cbabc 100644
--- a/gdb/testsuite/gdb.arch/i386-size-overlap.exp
+++ b/gdb/testsuite/gdb.arch/i386-size-overlap.exp
@@ -15,10 +15,6 @@
 
 # This file is part of the gdb testsuite.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 # Test that GDB can handle overlapping sizes of symbols.
 
 if {(![istarget "x86_64-*-*"] && ![istarget "i?86-*-*"]) || ![is_ilp32_target] } then {
diff --git a/gdb/testsuite/gdb.arch/i386-size.exp b/gdb/testsuite/gdb.arch/i386-size.exp
index c46cd09..241d939 100644
--- a/gdb/testsuite/gdb.arch/i386-size.exp
+++ b/gdb/testsuite/gdb.arch/i386-size.exp
@@ -18,10 +18,6 @@
 
 # This file is part of the gdb testsuite.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 # Test that GDB can see the sizes of symbols.
 
 if {(![istarget "x86_64-*-*"] && ![istarget "i?86-*-*"]) || ![is_ilp32_target] } then {
diff --git a/gdb/testsuite/gdb.arch/i386-sse-stack-align.S b/gdb/testsuite/gdb.arch/i386-sse-stack-align.S
new file mode 100644
index 0000000..18cffdc
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/i386-sse-stack-align.S
@@ -0,0 +1,214 @@
+/* Copyright 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/*
+   gcc -S -o gdb.arch/i386-sse-stack-align.{S,c} -Wall -m32 -msse
+ */
+
+	.file	"i386-sse-stack-align.c"
+	.text
+	.type	foo, @function
+foo:
+.LFB0:
+	.cfi_startproc
+	pushl	%ebp
+	.cfi_def_cfa_offset 8
+	.cfi_offset 5, -8
+	movl	%esp, %ebp
+	.cfi_def_cfa_register 5
+	subl	$40, %esp
+	movaps	%xmm0, -24(%ebp)
+	movaps	%xmm1, -40(%ebp)
+	movaps	-24(%ebp), %xmm0
+	movaps	-40(%ebp), %xmm1
+	mulps	%xmm1, %xmm0
+	addps	-24(%ebp), %xmm0
+	leave
+	.cfi_restore 5
+	.cfi_def_cfa 4, 4
+	ret
+	.cfi_endproc
+.LFE0:
+	.size	foo, .-foo
+	.type	f, @function
+f:
+.LFB1:
+	.cfi_startproc
+	pushl	%ebp
+	.cfi_def_cfa_offset 8
+	.cfi_offset 5, -8
+	movl	%esp, %ebp
+	.cfi_def_cfa_register 5
+	subl	$40, %esp
+	movaps	.LC0, %xmm0
+	movaps	%xmm0, -24(%ebp)
+	movaps	-24(%ebp), %xmm1
+	movaps	-24(%ebp), %xmm0
+	call	foo
+	movaps	%xmm0, -40(%ebp)
+	leal	-40(%ebp), %eax
+	movss	(%eax), %xmm0
+	cvttss2si	%xmm0, %eax
+	leave
+	.cfi_restore 5
+	.cfi_def_cfa 4, 4
+	ret
+	.cfi_endproc
+.LFE1:
+	.size	f, .-f
+	.type	g0, @function
+g0:
+.LFB2:
+	.cfi_startproc
+	pushl	%ebp
+	.cfi_def_cfa_offset 8
+	.cfi_offset 5, -8
+	movl	%esp, %ebp
+	.cfi_def_cfa_register 5
+	subl	$8, %esp
+	call	f
+	leave
+	.cfi_restore 5
+	.cfi_def_cfa 4, 4
+	ret
+	.cfi_endproc
+.LFE2:
+	.size	g0, .-g0
+	.type	g1, @function
+g1:
+.LFB3:
+	.cfi_startproc
+	pushl	%ebp
+	.cfi_def_cfa_offset 8
+	.cfi_offset 5, -8
+	movl	%esp, %ebp
+	.cfi_def_cfa_register 5
+	subl	$8, %esp
+	call	f
+	leave
+	.cfi_restore 5
+	.cfi_def_cfa 4, 4
+	ret
+	.cfi_endproc
+.LFE3:
+	.size	g1, .-g1
+	.type	g2, @function
+g2:
+.LFB4:
+	.cfi_startproc
+	pushl	%ebp
+	.cfi_def_cfa_offset 8
+	.cfi_offset 5, -8
+	movl	%esp, %ebp
+	.cfi_def_cfa_register 5
+	subl	$8, %esp
+	call	f
+	leave
+	.cfi_restore 5
+	.cfi_def_cfa 4, 4
+	ret
+	.cfi_endproc
+.LFE4:
+	.size	g2, .-g2
+	.type	g3, @function
+g3:
+.LFB5:
+	.cfi_startproc
+	pushl	%ebp
+	.cfi_def_cfa_offset 8
+	.cfi_offset 5, -8
+	movl	%esp, %ebp
+	.cfi_def_cfa_register 5
+	subl	$8, %esp
+	call	f
+	leave
+	.cfi_restore 5
+	.cfi_def_cfa 4, 4
+	ret
+	.cfi_endproc
+.LFE5:
+	.size	g3, .-g3
+	.type	g4, @function
+g4:
+.LFB6:
+	.cfi_startproc
+	pushl	%ebp
+	.cfi_def_cfa_offset 8
+	.cfi_offset 5, -8
+	movl	%esp, %ebp
+	.cfi_def_cfa_register 5
+	subl	$8, %esp
+	call	f
+	leave
+	.cfi_restore 5
+	.cfi_def_cfa 4, 4
+	ret
+	.cfi_endproc
+.LFE6:
+	.size	g4, .-g4
+	.globl	main
+	.type	main, @function
+main:
+.LFB7:
+	.cfi_startproc
+	pushl	%ebp
+	.cfi_def_cfa_offset 8
+	.cfi_offset 5, -8
+	movl	%esp, %ebp
+	.cfi_def_cfa_register 5
+	pushl	%ebx
+	andl	$-16, %esp
+	subl	$16, %esp
+	.cfi_offset 3, -12
+	call	g0
+	movl	%eax, %ebx
+	movl	$1, (%esp)
+	call	g1
+	addl	%eax, %ebx
+	movl	$2, 4(%esp)
+	movl	$1, (%esp)
+	call	g2
+	addl	%eax, %ebx
+	movl	$3, 8(%esp)
+	movl	$2, 4(%esp)
+	movl	$1, (%esp)
+	call	g3
+	addl	%eax, %ebx
+	movl	$4, 12(%esp)
+	movl	$3, 8(%esp)
+	movl	$2, 4(%esp)
+	movl	$1, (%esp)
+	call	g4
+	addl	%ebx, %eax
+	movl	-4(%ebp), %ebx
+	leave
+	.cfi_restore 5
+	.cfi_def_cfa 4, 4
+	.cfi_restore 3
+	ret
+	.cfi_endproc
+.LFE7:
+	.size	main, .-main
+	.section	.rodata
+	.align 16
+.LC0:
+	.long	1065353216
+	.long	1073741824
+	.long	1077936128
+	.long	1082130432
+	.ident	"GCC: (GNU) 4.6.4 20120612 (prerelease)"
+	.section	.note.GNU-stack,"", at progbits
diff --git a/gdb/testsuite/gdb.arch/i386-sse-stack-align.c b/gdb/testsuite/gdb.arch/i386-sse-stack-align.c
new file mode 100644
index 0000000..b9daa9b
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/i386-sse-stack-align.c
@@ -0,0 +1,70 @@
+/* Copyright 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+typedef float V __attribute__((vector_size(16)));
+
+static V
+foo (V a, V b)
+{
+  return a + b * a;
+}
+
+static __attribute__((noinline, noclone)) int
+f (void)
+{
+  volatile V a = { 1, 2, 3, 4 };
+  volatile V b;
+
+  b = foo (a, a);
+  return b[0];
+}
+
+static __attribute__((noinline, noclone)) int
+g0 (void)
+{
+  return f ();
+}
+
+static __attribute__((noinline, noclone)) int
+g1 (int p1)
+{
+  return f ();
+}
+
+static __attribute__((noinline, noclone)) int
+g2 (int p1, int p2)
+{
+  return f ();
+}
+
+static __attribute__((noinline, noclone)) int
+g3 (int p1, int p2, int p3)
+{
+  return f ();
+}
+
+static __attribute__((noinline, noclone)) int
+g4 (int p1, int p2, int p3, int p4)
+{
+  return f ();
+}
+
+int
+main (void)
+{
+  return g0 () + g1 (1) + g2 (1, 2) + g3 (1, 2, 3) + g4 (1, 2, 3, 4);
+}
diff --git a/gdb/testsuite/gdb.arch/i386-sse-stack-align.exp b/gdb/testsuite/gdb.arch/i386-sse-stack-align.exp
new file mode 100644
index 0000000..5a04c74
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/i386-sse-stack-align.exp
@@ -0,0 +1,60 @@
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+if ![is_x86_like_target] {
+    verbose "Skipping x86 SSE stack alignment tests."
+    return
+}
+
+set testfile "i386-sse-stack-align"
+set srcfile ${testfile}.S
+set csrcfile ${testfile}.c
+set executable ${testfile}
+set binfile ${objdir}/${subdir}/${executable}
+set opts {}
+
+if [info exists COMPILE] {
+    set srcfile ${csrcfile}
+    lappend opts debug optimize=-O2 additional_flags=-msse
+}
+
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable $opts] != "" } {
+    unsupported "cannot compile ${srcfile}"
+    return -1
+}
+
+clean_restart $executable
+
+if ![runto_main] then {
+    return -1
+}
+
+set args ""
+foreach i {0 1 2 3 4} {
+    set test "print g$i ($args)"
+    gdb_test_multiple $test $test {
+	-re " = 2\r\n$gdb_prompt $" {
+	    pass $test
+	}
+	-re "Program received signal SIGSEGV, Segmentation fault\\..*\r\n$gdb_prompt $" {
+	    fail $test
+	}
+    }
+
+    if {$args != ""} {
+	set args "$args, "
+    }
+    set args "$args[expr $i + 1]"
+}
diff --git a/gdb/testsuite/gdb.arch/i386-sse.exp b/gdb/testsuite/gdb.arch/i386-sse.exp
index 1a4e408..896faf3 100644
--- a/gdb/testsuite/gdb.arch/i386-sse.exp
+++ b/gdb/testsuite/gdb.arch/i386-sse.exp
@@ -18,10 +18,6 @@
 
 # This file is part of the gdb testsuite.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 if { ![istarget i?86-*-*] && ![istarget x86_64-*-* ] } {
     verbose "Skipping x86 SSE tests."
@@ -32,7 +28,7 @@ set testfile "i386-sse"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.arch/i386-unwind.exp b/gdb/testsuite/gdb.arch/i386-unwind.exp
index a8be6f7..4ae5943 100644
--- a/gdb/testsuite/gdb.arch/i386-unwind.exp
+++ b/gdb/testsuite/gdb.arch/i386-unwind.exp
@@ -18,10 +18,6 @@
 
 # This file is part of the gdb testsuite.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 # Test i386 unwinder.
 
 
diff --git a/gdb/testsuite/gdb.arch/i386-word.exp b/gdb/testsuite/gdb.arch/i386-word.exp
index 701e428..fb402fb 100644
--- a/gdb/testsuite/gdb.arch/i386-word.exp
+++ b/gdb/testsuite/gdb.arch/i386-word.exp
@@ -18,10 +18,6 @@
 
 # This file is part of the gdb testsuite.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 if {(![istarget "x86_64-*-*"] && ![istarget "i?86-*-*"]) || ![is_ilp32_target] } then {
     verbose "Skipping i386 word register tests."
@@ -32,7 +28,7 @@ set testfile "i386-word"
 set srcfile i386-pseudo.c
 set binfile ${objdir}/${subdir}/${testfile}
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.arch/mips16-thunks-inmain.c b/gdb/testsuite/gdb.arch/mips16-thunks-inmain.c
new file mode 100644
index 0000000..86ff4bc
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/mips16-thunks-inmain.c
@@ -0,0 +1,22 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+int
+inmain (void)
+{
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.arch/mips16-thunks-main.c b/gdb/testsuite/gdb.arch/mips16-thunks-main.c
new file mode 100644
index 0000000..37239b1
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/mips16-thunks-main.c
@@ -0,0 +1,24 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+int inmain (void);
+
+int
+main (void)
+{
+  return inmain ();
+}
diff --git a/gdb/testsuite/gdb.arch/mips16-thunks-sin.c b/gdb/testsuite/gdb.arch/mips16-thunks-sin.c
new file mode 100644
index 0000000..3e2d1bd
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/mips16-thunks-sin.c
@@ -0,0 +1,55 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <math.h>
+
+double sinfrob (double d);
+double sinfrob16 (double d);
+
+double sinblah (double d);
+double sinblah16 (double d);
+
+double sinmips16 (double d);
+long lsinmips16 (double d);
+
+extern long i;
+
+double
+sinhelper (double d)
+{
+  i++;
+  d = sin (d);
+  d = sinfrob16 (d);
+  d = sinfrob (d);
+  d = sinmips16 (d);
+  i++;
+  return d;
+}
+
+long
+lsinhelper (double d)
+{
+  long l;
+
+  i++;
+  d = sin (d);
+  d = sinblah (d);
+  d = sinblah16 (d);
+  l = lsinmips16 (d);
+  i++;
+  return l;
+}
diff --git a/gdb/testsuite/gdb.arch/mips16-thunks-sinfrob.c b/gdb/testsuite/gdb.arch/mips16-thunks-sinfrob.c
new file mode 100644
index 0000000..cad50c5
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/mips16-thunks-sinfrob.c
@@ -0,0 +1,38 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <math.h>
+
+extern long i;
+
+double
+sinfrob (double d)
+{
+  i++;
+  d = sin (d);
+  i++;
+  return d;
+}
+
+double
+sinblah (double d)
+{
+  i++;
+  d = sin (d);
+  i++;
+  return d;
+}
diff --git a/gdb/testsuite/gdb.arch/mips16-thunks-sinfrob16.c b/gdb/testsuite/gdb.arch/mips16-thunks-sinfrob16.c
new file mode 100644
index 0000000..1c7773b
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/mips16-thunks-sinfrob16.c
@@ -0,0 +1,38 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <math.h>
+
+extern long i;
+
+double
+sinfrob16 (double d)
+{
+  i++;
+  d = sin (d);
+  i++;
+  return d;
+}
+
+double
+sinblah16 (double d)
+{
+  i++;
+  d = sin (d);
+  i++;
+  return d;
+}
diff --git a/gdb/testsuite/gdb.arch/mips16-thunks-sinmain.c b/gdb/testsuite/gdb.arch/mips16-thunks-sinmain.c
new file mode 100644
index 0000000..2cbc471
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/mips16-thunks-sinmain.c
@@ -0,0 +1,51 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+double sinfrob (double d);
+double sinfrob16 (double d);
+
+double sinblah (double d);
+double sinblah16 (double d);
+
+double sinhelper (double);
+long lsinhelper (double);
+
+double (*sinfunc) (double) = sinfrob;
+double (*sinfunc16) (double) = sinfrob16;
+
+double f = 1.0;
+long i = 1;
+
+int
+main (void)
+{
+  double d = f;
+  long l = i;
+
+  d = sinfrob16 (d);
+  d = sinfrob (d);
+  d = sinhelper (d);
+
+  sinfunc = sinblah;
+  sinfunc16 = sinblah16;
+
+  d = sinblah (d);
+  d = sinblah16 (d);
+  l = lsinhelper (d);
+
+  return l + i;
+}
diff --git a/gdb/testsuite/gdb.arch/mips16-thunks-sinmips16.c b/gdb/testsuite/gdb.arch/mips16-thunks-sinmips16.c
new file mode 100644
index 0000000..5d223f6
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/mips16-thunks-sinmips16.c
@@ -0,0 +1,62 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <math.h>
+
+double sinfrob (double d);
+double sinfrob16 (double d);
+
+double sinblah (double d);
+double sinblah16 (double d);
+
+extern double (*sinfunc) (double);
+extern double (*sinfunc16) (double);
+
+extern long i;
+
+double
+sinmips16 (double d)
+{
+  i++;
+  d = sin (d);
+  d = sinfrob16 (d);
+  d = sinfrob (d);
+  d = sinfunc16 (d);
+  d = sinfunc (d);
+  i++;
+  return d;
+}
+
+long
+lsinmips16 (double d)
+{
+  union
+    {
+      double d;
+      long l[2];
+    }
+  u;
+
+  i++;
+  d = sin (d);
+  d = sinblah (d);
+  d = sinblah16 (d);
+  d = sinfunc (d);
+  u.d = sinfunc16 (d);
+  i++;
+  return u.l[0] == 0 && u.l[1] == 0;
+}
diff --git a/gdb/testsuite/gdb.arch/mips16-thunks.exp b/gdb/testsuite/gdb.arch/mips16-thunks.exp
new file mode 100644
index 0000000..79c079a
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/mips16-thunks.exp
@@ -0,0 +1,543 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Contributed by Mentor Graphics, written by Maciej W. Rozycki.
+
+# Test MIPS16 thunk support.
+
+# This should work on any targets that support MIPS16 execution, including
+# Linux and bare-iron ones, but not all of them do, for example MIPS16
+# support has been added to Linux relatively late in the game.  Also besides
+# environment support, the target processor has to support the MIPS16 ASE.
+# Finally as of this writing MIPS16 support has only been implemented in the
+# toolchain for a subset of ABIs, so we need to check that a MIPS16
+# executable can be built and run at all before we attempt the actual test.
+
+if { ![istarget "mips*-*-*"] } then {
+    verbose "Skipping MIPS16 thunk support tests."
+    return
+}
+
+# A helper to set caller's SRCFILE and OBJFILE based on FILENAME and SUFFIX.
+proc set_src_and_obj { filename { suffix "" } } {
+    upvar srcfile srcfile
+    upvar objfile objfile
+    global srcdir
+    global objdir
+    global subdir
+
+    if ![string equal "$suffix" ""] then {
+	set suffix "-$suffix"
+    }
+    set srcfile ${srcdir}/${subdir}/${filename}.c
+    set objfile ${objdir}/${subdir}/${filename}${suffix}.o
+}
+
+# First check if a trivial MIPS16 program can be built and debugged.  This
+# verifies environment and processor support, any failure here must be
+# classed as the lack of support.
+set testname mips16-thunks-main
+
+set_src_and_obj mips16-thunks-inmain
+set options [list debug nowarnings additional_flags=-mips16]
+set objfiles ${objfile}
+gdb_compile ${srcfile} ${objfile} object ${options}
+
+set_src_and_obj mips16-thunks-main
+set options [list debug nowarnings additional_flags=-mips16]
+lappend objfiles ${objfile}
+gdb_compile ${srcfile} ${objfile} object ${options}
+
+set binfile ${objdir}/${subdir}/${testname}
+set options [list debug nowarnings]
+if { [gdb_compile ${objfiles} ${binfile} executable ${options}] != "" } then {
+    unsupported "No MIPS16 support in the toolchain."
+    return
+}
+clean_restart ${testname}
+gdb_breakpoint inmain
+gdb_run_cmd
+gdb_test_multiple "" "check for MIPS16 support in the processor" {
+    -re "Breakpoint 1.*inmain .*$gdb_prompt $" {
+	gdb_test_multiple "finish" \
+	    "check for MIPS16 support in the processor" {
+	    -re "Value returned is \\\$\[0-9\]+ = 0\[^0-9\].*$gdb_prompt $" {
+		verbose "MIPS16 support check successful."
+	    }
+	    -re "$gdb_prompt $" {
+		unsupported "No MIPS16 support in the processor."
+		return
+	    }
+	    default {
+		unsupported "No MIPS16 support in the processor."
+		return
+	    }
+	}
+    }
+    -re "$gdb_prompt $" {
+	unsupported "No MIPS16 support in the processor."
+	return
+    }
+    default {
+	unsupported "No MIPS16 support in the processor."
+	return
+    }
+}
+
+# Check if MIPS16 PIC code can be built and debugged.  We want to check
+# PIC and MIPS16 thunks are handled correctly together if possible, but
+# on targets that do not support PIC code, e.g. bare iron, we still want
+# to test the rest of functionality.
+set testname mips16-thunks-pic
+set picflag ""
+
+set_src_and_obj mips16-thunks-inmain pic
+set options [list \
+    debug nowarnings additional_flags=-mips16 additional_flags=-fPIC]
+set objfiles ${objfile}
+gdb_compile ${srcfile} ${objfile} object ${options}
+
+set_src_and_obj mips16-thunks-main pic
+set options [list \
+    debug nowarnings additional_flags=-mips16 additional_flags=-fPIC]
+lappend objfiles ${objfile}
+gdb_compile ${srcfile} ${objfile} object ${options}
+
+set binfile ${objdir}/${subdir}/${testname}
+set options [list debug nowarnings additional_flags=-fPIC]
+if { [gdb_compile ${objfiles} ${binfile} executable ${options}] == "" } then {
+    clean_restart ${testname}
+    gdb_breakpoint inmain
+    gdb_run_cmd
+    gdb_test_multiple "" "check for PIC support" {
+	-re "Breakpoint 1.*inmain .*$gdb_prompt $" {
+	    note "PIC support present, will make additional PIC thunk checks."
+	    set picflag additional_flags=-fPIC
+	}
+	-re "$gdb_prompt $" {
+	    note "No PIC support, skipping additional PIC thunk checks."
+	}
+	default {
+	    note "No PIC support, skipping additional PIC thunk checks."
+	}
+    }
+} else {
+    note "No PIC support, skipping additional PIC thunk checks."
+}
+
+# OK, build the twisted executable.  This program contains the following
+# MIPS16 thunks:
+# - __call_stub_fp_sin,
+# - __call_stub_fp_sinblah,
+# - __call_stub_fp_sinfrob,
+# - __call_stub_fp_sinhelper,
+# - __call_stub_lsinhelper,
+# - __fn_stub_lsinmips16,
+# - __fn_stub_sinblah16,
+# - __fn_stub_sinfrob16,
+# - __fn_stub_sinmips16,
+# - __mips16_call_stub_df_2,
+# - __mips16_ret_df.
+# Additionally, if PIC code is supported, it contains the following PIC thunks:
+# - .pic.__mips16_call_stub_df_2,
+# - .pic.__mips16_ret_df,
+# - .pic.sinblah,
+# - .pic.sinblah16,
+# - .pic.sinfrob,
+# - .pic.sinfrob16.
+set testname mips16-thunks-sin
+
+set_src_and_obj mips16-thunks-sinmain
+set options [list debug nowarnings additional_flags=-mips16]
+set objfiles ${objfile}
+gdb_compile ${srcfile} ${objfile} object ${options}
+
+set_src_and_obj mips16-thunks-sin
+set options [list debug nowarnings additional_flags=-mno-mips16]
+lappend objfiles ${objfile}
+gdb_compile ${srcfile} ${objfile} object ${options}
+
+set_src_and_obj mips16-thunks-sinmips16
+set options [list debug nowarnings additional_flags=-mips16]
+lappend objfiles ${objfile}
+gdb_compile ${srcfile} ${objfile} object ${options}
+
+set_src_and_obj mips16-thunks-sinfrob
+set options [list \
+    debug nowarnings additional_flags=-mno-mips16 ${picflag}]
+lappend objfiles ${objfile}
+gdb_compile ${srcfile} ${objfile} object ${options}
+
+set_src_and_obj mips16-thunks-sinfrob16
+set options [list \
+    debug nowarnings additional_flags=-mips16 ${picflag}]
+lappend objfiles ${objfile}
+gdb_compile ${srcfile} ${objfile} object ${options}
+
+set binfile ${objdir}/${subdir}/${testname}
+set options [list debug nowarnings]
+gdb_compile ${objfiles} ${binfile} executable ${options}
+clean_restart ${testname}
+if ![runto_main] then {
+    fail "running test program, MIPS16 thunk tests aborted"
+    return
+}
+
+# Build some useful regular expressions out of a list of functions FUNCS
+# to be used to match against backtraces.
+proc build_frames_re { funcs } {
+    upvar anyframe anyframe
+    upvar frames frames
+    upvar frame frame
+    upvar func func
+
+    set fid 0
+    set argsandsource " +\\\(.*\\\) +at +\[^\r\n\]+\r\n"
+    set addrin "(?:\[^ \]+ +in +)?"
+    set anyframe "#${fid} +${addrin}(\[^ \]+)${argsandsource}"
+    set frame "#${fid} +${addrin}${func}${argsandsource}"
+    set frames "$frame"
+    foreach f [lrange $funcs 1 end] {
+	incr fid
+	append frames "#${fid} +${addrin}${f}${argsandsource}"
+    }
+}
+
+# Single-step through the function that is at the head of function list
+# FUNCS until a different function (frame) is reached.  Before each step
+# check the backtrace against FUNCS.  ID is used for reporting, to tell
+# apart different calls to this procedure for the same function.  If
+# successful, then return the name of the function we have stopped in.
+proc step_through { id funcs } {
+    global gdb_prompt
+
+    set func [lindex $funcs 0]
+    build_frames_re "$funcs"
+
+    set msg "single-stepping through \"${func}\" ($id)"
+
+    # Arbitrarily limit the maximium number of steps made to avoid looping
+    # indefinitely in the case something goes wrong, increase as (if)
+    # necessary.
+    set count 8
+    while { $count > 0 } {
+	if { [gdb_test_multiple "backtrace" "$msg (backtrace)" {
+	    -re "${frames}$gdb_prompt $" {
+		if { [gdb_test_multiple "step" "$msg (step)" {
+		    -re "$gdb_prompt $" {
+			if { [gdb_test_multiple "frame" "$msg (frame)" {
+			    -re "${frame}.*$gdb_prompt $" {
+			    }
+			    -re "${anyframe}.*$gdb_prompt $" {
+				pass "$msg"
+				return $expect_out(1,string)
+			    }
+			}] != 0 } then {
+			    return ""
+			}
+		    }
+		}] != 0 } then {
+		    return ""
+		}
+	    }
+	}] != 0 } then {
+	    return ""
+	}
+	incr count -1
+    }
+    fail "$msg (too many steps)"
+    return ""
+}
+
+# Finish the current function that must be one that is at the head of
+# function list FUNCS.  Before that check the backtrace against FUNCS.
+# ID is used for reporting, to tell apart different calls to this
+# procedure for the same function.  If successful, then return the name
+# of the function we have stopped in.
+proc finish_through { id funcs } {
+    global gdb_prompt
+
+    set func [lindex $funcs 0]
+    build_frames_re "$funcs"
+
+    set msg "finishing \"${func}\" ($id)"
+
+    gdb_test_multiple "backtrace" "$msg (backtrace)" {
+	-re "${frames}$gdb_prompt $" {
+	    gdb_test_multiple "finish" "$msg (finish)" {
+		-re "Run till exit from ${frame}.*$gdb_prompt $" {
+		    gdb_test_multiple "frame" "$msg (frame)" {
+			-re "${anyframe}.*$gdb_prompt $" {
+			    pass "$msg"
+			    return $expect_out(1,string)
+			}
+		    }
+		}
+	    }
+	}
+    }
+    return ""
+}
+
+# Report PASS if VAL is equal to EXP, otherwise report FAIL, using MSG.
+proc pass_if_eq { val exp msg } {
+    if [string equal "$val" "$exp"] then {
+	pass "$msg"
+    } else {
+	fail "$msg"
+    }
+}
+
+# Check if FUNC is equal to WANT.  If not, then assume that we have stepped
+# into a library call.  In this case finish it, then step out of the caller.
+# ID is used for reporting, to tell apart different calls to this procedure
+# for the same function.  If successful, then return the name of the
+# function we have stopped in.
+proc finish_if_ne { id func want funcs } {
+    if ![string equal "$func" "$want"] then {
+	set call "$func"
+	set want [lindex $funcs 0]
+	set func [finish_through "$id" [linsert $funcs 0 "$func"]]
+	pass_if_eq "$func" "$want" "\"${call}\" finishing to \"${want}\" ($id)"
+	set func [step_through "$id" $funcs]
+    }
+    return "$func"
+}
+
+# Now single-step through the program, making sure all thunks are correctly
+# stepped over and omitted from backtraces.
+
+set id 1
+set func [step_through $id [list main]]
+pass_if_eq "$func" sinfrob16 "stepping from \"main\" into \"sinfrob16\" ($id)"
+
+incr id
+set func [step_through $id [list sinfrob16 main]]
+set func [finish_if_ne $id "$func" main [list sinfrob16 main]]
+pass_if_eq "$func" main "stepping from \"sinfrob16\" back to \"main\" ($id)"
+
+incr id
+set func [step_through $id [list main]]
+pass_if_eq "$func" sinfrob "stepping from \"main\" into \"sinfrob\" ($id)"
+
+incr id
+set func [step_through $id [list sinfrob main]]
+set func [finish_if_ne $id "$func" main [list sinfrob main]]
+pass_if_eq "$func" main "stepping from \"sinfrob\" back to \"main\" ($id)"
+
+# 5
+incr id
+set func [step_through $id [list main]]
+pass_if_eq "$func" sinhelper "stepping from \"main\" into \"sinhelper\" ($id)"
+
+incr id
+set func [step_through $id [list sinhelper main]]
+set func [finish_if_ne $id "$func" sinfrob16 [list sinhelper main]]
+pass_if_eq "$func" sinfrob16 \
+    "stepping from \"sinhelper\" into \"sinfrob16\" ($id)"
+
+incr id
+set func [step_through $id [list sinfrob16 sinhelper main]]
+set func [finish_if_ne $id "$func" sinhelper [list sinfrob16 sinhelper main]]
+pass_if_eq "$func" sinhelper \
+    "stepping from \"sinfrob16\" back to \"sinhelper\" ($id)"
+
+incr id
+set func [step_through $id [list sinhelper main]]
+pass_if_eq "$func" sinfrob "stepping from \"sinhelper\" into \"sinfrob\" ($id)"
+
+incr id
+set func [step_through $id [list sinfrob sinhelper main]]
+set func [finish_if_ne $id "$func" sinhelper [list sinfrob sinhelper main]]
+pass_if_eq "$func" sinhelper \
+    "stepping from \"sinfrob\" back to \"sinhelper\" ($id)"
+
+# 10
+incr id
+set func [step_through $id [list sinhelper main]]
+pass_if_eq "$func" sinmips16 \
+    "stepping from \"sinhelper\" into \"sinmips16\" ($id)"
+
+incr id
+set func [step_through $id [list sinmips16 sinhelper main]]
+set func [finish_if_ne $id "$func" sinfrob16 [list sinmips16 sinhelper main]]
+pass_if_eq "$func" sinfrob16 \
+    "stepping from \"sinmips16\" into \"sinfrob16\" ($id)"
+
+incr id
+set func [step_through $id [list sinfrob16 sinmips16 sinhelper main]]
+set func [finish_if_ne $id "$func" sinmips16 \
+	      [list sinfrob16 sinmips16 sinhelper main]]
+pass_if_eq "$func" sinmips16 \
+    "stepping from \"sinfrob16\" back to \"sinmips16\" ($id)"
+
+incr id
+set func [step_through $id [list sinmips16 sinhelper main]]
+pass_if_eq "$func" sinfrob "stepping from \"sinmips16\" into \"sinfrob\" ($id)"
+
+incr id
+set func [step_through $id [list sinfrob sinmips16 sinhelper main]]
+set func [finish_if_ne $id "$func" sinhelper \
+	      [list sinfrob sinmips16 sinhelper main]]
+pass_if_eq "$func" sinmips16 \
+    "stepping from \"sinfrob\" back to \"sinmips16\" ($id)"
+
+# 15
+incr id
+set func [step_through $id [list sinmips16 sinhelper main]]
+pass_if_eq "$func" sinfrob16 \
+    "stepping from \"sinmips16\" into \"sinfrob16\" (indirectly) ($id)"
+
+incr id
+set func [step_through $id [list sinfrob16 sinmips16 sinhelper main]]
+set func [finish_if_ne $id "$func" sinmips16 \
+	      [list sinfrob16 sinmips16 sinhelper main]]
+pass_if_eq "$func" sinmips16 \
+    "stepping from \"sinfrob16\" back to \"sinmips16\" (indirectly) ($id)"
+
+incr id
+set func [step_through $id [list sinmips16 sinhelper main]]
+pass_if_eq "$func" sinfrob \
+    "stepping from \"sinmips16\" into \"sinfrob\" (indirectly) ($id)"
+
+incr id
+set func [step_through $id [list sinfrob sinmips16 sinhelper main]]
+set func [finish_if_ne $id "$func" sinhelper \
+	      [list sinfrob sinmips16 sinhelper main]]
+pass_if_eq "$func" sinmips16 \
+    "stepping from \"sinfrob\" back to \"sinmips16\" (indirectly) ($id)"
+
+incr id
+set func [step_through $id [list sinmips16 sinhelper main]]
+pass_if_eq "$func" sinhelper \
+    "stepping from \"sinmips16\" back to \"sinhelper\" ($id)"
+
+# 20
+incr id
+set func [step_through $id [list sinhelper main]]
+pass_if_eq "$func" main "stepping from \"sinhelper\" back to \"main\" ($id)"
+
+incr id
+set func [step_through $id [list main]]
+pass_if_eq "$func" sinblah "stepping from \"main\" into \"sinblah\" ($id)"
+
+incr id
+set func [step_through $id [list sinblah main]]
+set func [finish_if_ne $id "$func" main [list sinblah main]]
+pass_if_eq "$func" main "stepping from \"sinblah\" back to \"main\" ($id)"
+
+incr id
+set func [step_through $id [list main]]
+pass_if_eq "$func" sinblah16 "stepping from \"main\" into \"sinblah16\" ($id)"
+
+incr id
+set func [step_through $id [list sinblah16 main]]
+set func [finish_if_ne $id "$func" main [list sinblah16 main]]
+pass_if_eq "$func" main "stepping from \"sinblah16\" back to \"main\" ($id)"
+
+# 25
+incr id
+set func [step_through $id [list main]]
+pass_if_eq "$func" lsinhelper \
+    "stepping from \"main\" into \"lsinhelper\" ($id)"
+
+incr id
+set func [step_through $id [list lsinhelper main]]
+set func [finish_if_ne $id "$func" sinblah [list lsinhelper main]]
+pass_if_eq "$func" sinblah \
+    "stepping from \"lsinhelper\" into \"sinblah\" ($id)"
+
+incr id
+set func [step_through $id [list sinblah lsinhelper main]]
+set func [finish_if_ne $id "$func" lsinhelper [list sinblah lsinhelper main]]
+pass_if_eq "$func" lsinhelper \
+    "stepping from \"sinblah\" back to \"lsinhelper\" ($id)"
+
+incr id
+set func [step_through $id [list lsinhelper main]]
+pass_if_eq "$func" sinblah16 \
+    "stepping from \"lsinhelper\" into \"sinblah16\" ($id)"
+
+incr id
+set func [step_through $id [list sinblah16 lsinhelper main]]
+set func [finish_if_ne $id "$func" lsinhelper [list sinblah16 lsinhelper main]]
+pass_if_eq "$func" lsinhelper \
+    "stepping from \"sinblah16\" back to \"lsinhelper\" ($id)"
+
+# 30
+incr id
+set func [step_through $id [list lsinhelper main]]
+pass_if_eq "$func" lsinmips16 \
+    "stepping from \"lsinhelper\" into \"lsinmips16\" ($id)"
+
+incr id
+set func [step_through $id [list lsinmips16 lsinhelper main]]
+set func [finish_if_ne $id "$func" sinblah [list lsinmips16 lsinhelper main]]
+pass_if_eq "$func" sinblah \
+    "stepping from \"lsinmips16\" into \"sinblah\" ($id)"
+
+incr id
+set func [step_through $id [list sinblah lsinmips16 lsinhelper main]]
+set func [finish_if_ne $id "$func" lsinmips16 \
+	      [list sinblah lsinmips16 lsinhelper main]]
+pass_if_eq "$func" lsinmips16 \
+    "stepping from \"sinblah\" back to \"lsinmips16\" ($id)"
+
+incr id
+set func [step_through $id [list lsinmips16 lsinhelper main]]
+pass_if_eq "$func" sinblah16 \
+    "stepping from \"lsinmips16\" into \"sinblah16\" ($id)"
+
+incr id
+set func [step_through $id [list sinblah16 lsinmips16 lsinhelper main]]
+set func [finish_if_ne $id "$func" lsinhelper \
+	      [list sinblah16 lsinmips16 lsinhelper main]]
+pass_if_eq "$func" lsinmips16 \
+    "stepping from \"sinblah16\" back to \"lsinmips16\" ($id)"
+
+# 35
+incr id
+set func [step_through $id [list lsinmips16 lsinhelper main]]
+pass_if_eq "$func" sinblah \
+    "stepping from \"lsinmips16\" into \"sinblah\" (indirectly) ($id)"
+
+incr id
+set func [step_through $id [list sinblah lsinmips16 lsinhelper main]]
+set func [finish_if_ne $id "$func" lsinmips16 \
+	      [list sinblah lsinmips16 lsinhelper main]]
+pass_if_eq "$func" lsinmips16 \
+    "stepping from \"sinblah\" back to \"lsinmips16\" (indirectly) ($id)"
+
+incr id
+set func [step_through $id [list lsinmips16 lsinhelper main]]
+pass_if_eq "$func" sinblah16 \
+    "stepping from \"lsinmips16\" into \"sinblah16\" (indirectly) ($id)"
+
+incr id
+set func [step_through $id [list sinblah16 lsinmips16 lsinhelper main]]
+set func [finish_if_ne $id "$func" lsinhelper \
+	      [list sinblah16 lsinmips16 lsinhelper main]]
+pass_if_eq "$func" lsinmips16 \
+    "stepping from \"sinblah16\" back to \"lsinmips16\" (indirectly) ($id)"
+
+incr id
+set func [step_through $id [list lsinmips16 lsinhelper main]]
+pass_if_eq "$func" lsinhelper \
+    "stepping from \"lsinmips16\" back to \"lsinhelper\" ($id)"
+
+# 40
+incr id
+set func [step_through $id [list lsinhelper main]]
+pass_if_eq "$func" main "stepping from \"lsinhelper\" back to \"main\" ($id)"
diff --git a/gdb/testsuite/gdb.arch/pa-nullify.exp b/gdb/testsuite/gdb.arch/pa-nullify.exp
index 77e7ca7..e3223d9 100644
--- a/gdb/testsuite/gdb.arch/pa-nullify.exp
+++ b/gdb/testsuite/gdb.arch/pa-nullify.exp
@@ -15,10 +15,6 @@
 #
 # This file is part of the gdb testsuite.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 # Test handling of nullified instructions for the pa target.
 
diff --git a/gdb/testsuite/gdb.arch/powerpc-aix-prologue.exp b/gdb/testsuite/gdb.arch/powerpc-aix-prologue.exp
index 241dd4f..860e68e 100644
--- a/gdb/testsuite/gdb.arch/powerpc-aix-prologue.exp
+++ b/gdb/testsuite/gdb.arch/powerpc-aix-prologue.exp
@@ -15,10 +15,6 @@
 #
 # This file is part of the gdb testsuite.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 # Test rs6000 prologue analyzer.
 
 
diff --git a/gdb/testsuite/gdb.arch/powerpc-d128-regs.exp b/gdb/testsuite/gdb.arch/powerpc-d128-regs.exp
index 18d7801..5e952d8 100644
--- a/gdb/testsuite/gdb.arch/powerpc-d128-regs.exp
+++ b/gdb/testsuite/gdb.arch/powerpc-d128-regs.exp
@@ -20,10 +20,6 @@
 
 # Testcase for ppc decimal128 pseudo-registers.
 
-if $tracelevel then {
-        strace $tracelevel
-}
-
 if ![istarget "powerpc64-*"] then {
     verbose "Skipping powerpc Decimal128 pseudo-registers testcase."
     return
diff --git a/gdb/testsuite/gdb.arch/ppc-dfp.exp b/gdb/testsuite/gdb.arch/ppc-dfp.exp
index a44a5ac..47ddc8b 100644
--- a/gdb/testsuite/gdb.arch/ppc-dfp.exp
+++ b/gdb/testsuite/gdb.arch/ppc-dfp.exp
@@ -16,10 +16,6 @@
 
 # Tests for Powerpc Decimal Floating Point registers setting and fetching
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if ![istarget "powerpc*"] then {
     verbose "Skipping powerpc decimal floating point register tests."
     return
@@ -29,7 +25,7 @@ set testfile "ppc-dfp"
 set binfile ${objdir}/${subdir}/${testfile}
 set srcfile ${testfile}.c
 
-if [get_compiler_info $binfile] {
+if [get_compiler_info] {
     warning "get_compiler failed"
     return -1
 }
diff --git a/gdb/testsuite/gdb.arch/ppc-fp.exp b/gdb/testsuite/gdb.arch/ppc-fp.exp
index 41a4865..3d9aef6 100644
--- a/gdb/testsuite/gdb.arch/ppc-fp.exp
+++ b/gdb/testsuite/gdb.arch/ppc-fp.exp
@@ -16,10 +16,6 @@
 
 # Tests for Powerpc floating point register setting and fetching
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if ![istarget "powerpc*"] then {
     verbose "Skipping powerpc floating point register tests."
     return
@@ -29,7 +25,7 @@ set testfile "ppc-fp"
 set binfile ${objdir}/${subdir}/${testfile}
 set srcfile ${testfile}.c
 
-if [get_compiler_info $binfile] {
+if [get_compiler_info] {
     warning "get_compiler failed"
     return -1
 }
diff --git a/gdb/testsuite/gdb.arch/ppc64-atomic-inst.exp b/gdb/testsuite/gdb.arch/ppc64-atomic-inst.exp
index b96b136..53998d3 100644
--- a/gdb/testsuite/gdb.arch/ppc64-atomic-inst.exp
+++ b/gdb/testsuite/gdb.arch/ppc64-atomic-inst.exp
@@ -16,10 +16,6 @@
 #
 # This file is part of the gdb testsuite.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 # Test single stepping through atomic sequences beginning with
 # a lwarx/ldarx instruction and ending with a stwcx/stdcx
 # instruction.
diff --git a/gdb/testsuite/gdb.arch/system-gcore.exp b/gdb/testsuite/gdb.arch/system-gcore.exp
index c5e6724..ab97f69 100644
--- a/gdb/testsuite/gdb.arch/system-gcore.exp
+++ b/gdb/testsuite/gdb.arch/system-gcore.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 if { ![istarget i?86-*-linux*] && ![istarget x86_64-*-linux* ] } {
     verbose "Skipping system register gcore tests."
diff --git a/gdb/testsuite/gdb.arch/vsx-regs.exp b/gdb/testsuite/gdb.arch/vsx-regs.exp
index 7a0bf57..d015787 100644
--- a/gdb/testsuite/gdb.arch/vsx-regs.exp
+++ b/gdb/testsuite/gdb.arch/vsx-regs.exp
@@ -14,10 +14,6 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # Test the use of VSX registers, for Powerpc.
 #
@@ -33,7 +29,7 @@ set binfile ${objdir}/${subdir}/${testfile}
 set srcfile ${testfile}.c
 
 set compile_flags {debug nowarnings quiet}
-if [get_compiler_info $binfile] {
+if [get_compiler_info] {
     warning "get_compiler failed"
     return -1
 }
diff --git a/gdb/testsuite/gdb.asm/Makefile.in b/gdb/testsuite/gdb.asm/Makefile.in
index 3e2162d..f3e6e8b 100644
--- a/gdb/testsuite/gdb.asm/Makefile.in
+++ b/gdb/testsuite/gdb.asm/Makefile.in
@@ -9,6 +9,7 @@ all info install-info dvi install uninstall installcheck check:
 
 clean mostlyclean:
 	-rm -f *~ *.o a.out *.x *.ci *.tmp
+	-rm -f *.dwo *.dwp
 	-rm -f core core.coremaker coremaker.core corefile $(EXECUTABLES)
 	-rm -f $(MISCELLANEOUS)
 
diff --git a/gdb/testsuite/gdb.asm/asm-source.exp b/gdb/testsuite/gdb.asm/asm-source.exp
index 18f9a7b..db2ae2b 100644
--- a/gdb/testsuite/gdb.asm/asm-source.exp
+++ b/gdb/testsuite/gdb.asm/asm-source.exp
@@ -15,10 +15,6 @@
 #
 # This file was written by Kendra.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # Test debugging assembly level programs.
 # This file uses asmsrc[12].s for input.
@@ -31,12 +27,14 @@ set asm-flags ""
 set link-flags "-e _start"
 set debug-flags ""
 
+set obj_include -I[standard_output_file {}]
+
 switch -glob -- [istarget] {
     "alpha*-*-*" {
         set asm-arch alpha
 	# ??? Won't work with ecoff systems like Tru64, but then we also
 	# don't have any other -g flag that creates mdebug output.
-        set asm-flags "-no-mdebug -I${srcdir}/${subdir} -I${objdir}/${subdir}"
+        set asm-flags "-no-mdebug -I${srcdir}/${subdir} $obj_include"
 	set debug-flags "-gdwarf-2"
     }
     "arm*-*-*" {
@@ -76,7 +74,7 @@ switch -glob -- [istarget] {
     }
     "m6811-*-*" {
         set asm-arch m68hc11
-        set asm-flags "-mshort-double -m68hc11 --no-warn -I${srcdir}/${subdir} -I${objdir}/${subdir}"
+        set asm-flags "-mshort-double -m68hc11 --no-warn -I${srcdir}/${subdir} $obj_include"
 	set debug-flags "-gdwarf-2"
 	# This asm test is specific and uses the linker directly.
 	# We must not use the target board linker script defined for other
@@ -87,7 +85,7 @@ switch -glob -- [istarget] {
     }
     "m6812-*-*" {
         set asm-arch m68hc11
-        set asm-flags "-mshort-double -m68hc12 --no-warn -I${srcdir}/${subdir} -I${objdir}/${subdir}"
+        set asm-flags "-mshort-double -m68hc12 --no-warn -I${srcdir}/${subdir} $obj_include"
 	set debug-flags "-gdwarf-2"
 	# This asm test is specific and uses the linker directly.
 	# We must not use the target board linker script defined for other
@@ -102,11 +100,11 @@ switch -glob -- [istarget] {
     "powerpc*-*" {
         if { [is_lp64_target] } {
             set asm-arch powerpc64
-            set asm-flags "-a64 -I${srcdir}/${subdir} -I${objdir}/${subdir}"
+            set asm-flags "-a64 -I${srcdir}/${subdir} $obj_include"
             append link-flags " -m elf64ppc"
         } else {
             set asm-arch powerpc
-            set asm-flags "-a32 -I${srcdir}/${subdir} -I${objdir}/${subdir}"
+            set asm-flags "-a32 -I${srcdir}/${subdir} $obj_include"
             append link-flags " -m elf32ppc"
         }
     }
@@ -119,12 +117,12 @@ switch -glob -- [istarget] {
     }
     "sparc64-*-*" {
         set asm-arch sparc64
-        set asm-flags "-xarch=v9 -I${srcdir}/${subdir} -I${objdir}/${subdir}"
+        set asm-flags "-xarch=v9 -I${srcdir}/${subdir} $obj_include"
 	set debug-flags "-gdwarf-2"
     }
     "spu*-*-*" {
        set asm-arch spu
-       set asm-flags "-I${srcdir}/${subdir} -I${objdir}/${subdir} --no-warn"
+       set asm-flags "-I${srcdir}/${subdir} $obj_include --no-warn"
        set debug-flags "-gdwarf-2"
     }
     "xstormy16-*-*" {
@@ -200,10 +198,7 @@ if [board_info $dest exists multilib_flags] {
 	 }
 }
 
-set testfile "asm-source"
-set binfile ${objdir}/${subdir}/${testfile}
-set srcfile1 asmsrc1.s
-set srcfile2 asmsrc2.s
+standard_testfile asmsrc1.s asmsrc2.s
 
 remote_exec build "rm -f ${subdir}/arch.inc"
 remote_download host ${srcdir}/${subdir}/${asm-arch}.inc ${subdir}/arch.inc
@@ -211,7 +206,7 @@ remote_exec build "rm -f ${subdir}/note.inc"
 remote_download host ${srcdir}/${subdir}/${asm-note}.inc ${subdir}/note.inc
 
 if { [string equal ${asm-flags} ""] } {
-    set asm-flags "-I${srcdir}/${subdir} -I${objdir}/${subdir}"
+    set asm-flags "-I${srcdir}/${subdir} $obj_include"
 }
 
 if { [string equal ${debug-flags} ""] } {
@@ -243,11 +238,14 @@ regsub "--" "-gstabs\[+\]" "${debug-flags}" "-gstabs" debug-flags
 # The GNU assembler does not support level options like "-g2" or "-g3".
 regsub "--" "-g\[0-9\]" "${debug-flags}" "" debug-flags
 
-if {[target_assemble ${srcdir}/${subdir}/${srcfile1} asmsrc1.o "${asm-flags} ${debug-flags}"] != ""} then {
+set asm1obj [standard_output_file asmrc1.o]
+set asm2obj [standard_output_file asmrc2.o]
+
+if {[target_assemble ${srcdir}/${subdir}/${srcfile} $asm1obj "${asm-flags} ${debug-flags}"] != ""} then {
      untested asm-source.exp
      return -1
 }
-if {[target_assemble ${srcdir}/${subdir}/${srcfile2} asmsrc2.o "${asm-flags} ${debug-flags}"] != ""} then {
+if {[target_assemble ${srcdir}/${subdir}/${srcfile2} $asm2obj "${asm-flags} ${debug-flags}"] != ""} then {
      untested asm-source.exp
      return -1
 }
@@ -258,7 +256,7 @@ if {[target_assemble ${srcdir}/${subdir}/${srcfile2} asmsrc2.o "${asm-flags} ${d
 # code here that provides its own startup code.  Using target_link
 # also avoids a lot of problems on many systems, most notably on
 # *-*-*bsd* and *-*-solaris2*.
-if {[target_link "asmsrc1.o asmsrc2.o" "${binfile}" ${link-flags}] != "" } then {
+if {[target_link [list $asm1obj $asm2obj] "${binfile}" ${link-flags}] != "" } then {
      untested asm-source.exp
      return -1
 }
@@ -268,8 +266,6 @@ if { [istarget "m6811-*-*"] || [istarget "m6812-*-*"] } {
     set_board_info ldscript $old_ldscript
 }
 
-remote_exec build "mv asmsrc1.o asmsrc2.o ${objdir}/${subdir}"
-
 # Collect some line numbers.
 set line_main       [expr [gdb_get_line_number "main start" "asmsrc1.s"] + 1]
 set line_call_foo2  [expr [gdb_get_line_number "call foo2"  "asmsrc1.s"] + 1]
diff --git a/gdb/testsuite/gdb.asm/sh.inc b/gdb/testsuite/gdb.asm/sh.inc
index 9ea1b67..a4a5fc5 100644
--- a/gdb/testsuite/gdb.asm/sh.inc
+++ b/gdb/testsuite/gdb.asm/sh.inc
@@ -31,7 +31,7 @@
 	comment "subroutine end"
 	.purgem gdbasm_end
 	.macro gdbasm_end name
-	.size   \name, .-_foo1
+	.size   \name, . - \name
 	.align	1
 	.endm
 
@@ -65,13 +65,19 @@
 
 	comment "crt0 startup"
 	.macro gdbasm_startup
-	mov.l	.stackaddr,r15
+	comment "If there is a _stack symbol, use it for setting up the stack"
+	comment "pointer.  In hosted mode (when there is no _stack symbol),"
+	comment "the operating system will have initialized it already."
+	mov.l	.stackaddr, r0
+	tst	r0, r0
+	bt	.afterstackaddr
+	mov	r0, r15
 	bra	.afterstackaddr
 	nop
-	nop
 	.align 2
 .stackaddr:
-	.long	196608		! 0x30000
+	.weak	_stack
+	.long	_stack
 	.align	1
 .afterstackaddr:
 	.endm
diff --git a/gdb/testsuite/gdb.base/Makefile b/gdb/testsuite/gdb.base/Makefile
deleted file mode 100644
index 1df8599..0000000
--- a/gdb/testsuite/gdb.base/Makefile
+++ /dev/null
@@ -1,67 +0,0 @@
-
-srcdir = .
-
-EXECUTABLES = a2-run advance all-types annota1 annota1-watch_thread_num \
-	annota3 anon args arrayidx async attach attach-pie-misread \
-	attach2 auxv bang\! bfp-test bigcore bitfields bitfields2 \
-	break break-always break-entry break-interp-test breako2 \
-	breakpoint-shadow break-on-linker-gcd-function \
-	call-ar-st call-rt-st call-sc-t* call-signals \
-	call-strs callexit callfuncs callfwmall charset checkpoint \
-	chng-syms code_elim1 code_elim2 commands compiler complex \
-	condbreak consecutive constvars coremaker cursal cvexpr \
-	dbx-test del disasm-end-cu display dump dup-sect dup-sect.debug \
-	dup-sect.stripped ending-run execd-prog expand-psymtabs exprs \
-	fileio find finish fixsection float foll-exec foll-fork foll-vfork \
-	frame-args freebpcmd fullname funcargs gcore \
-	gcore-buffer-overflow-012* \
-	gdb1090 gdb11530 gdb11531 gdb1250 gdb1555-main gdb1821 gdbvars \
-	hashline1 hashline2 hashline3 hbreak hook-stop-continue \
-	hook-stop-frame huge included infnan info-target int-type \
-	interrupt jit-main jump label langs lineinc list longjmp long_long \
-	macscp mips_pro miscexprs moribund-step multi-forks nodebug \
-	nofield nostdlib opaque overlays pc-fp pending permission \
-	pie-execl1 pie-execl2 pointers pointers2 pr11022 prelinkt \
-	prelinkt.debug prelinkt.stripped printcmds prologue psymtab \
-	ptr-typedef ptype randomize recurse relational relativedebug \
-	reread reread1 restore return return-nodebug-* return2 run \
-	savedregs scope section_command sep sepdebug sepdebug.stripped \
-	sepdebug2 sepdebug2.debug sepdebug2.stripped sepsymtab \
-	sepsymtab.debug sepsymtab.stripped setshow setvar shmain shreloc \
-	sigall sigaltstack sigbpt sigchld siginfo siginfo-addr \
-	siginfo-infcall siginfo-obj signals signull sigrepeat sigstep \
-	sizeof skip skip-solib solib solib-corrupted solib-display-main
-	solib-nodir solib-overlap-main-0x40000000 solib-symbol-main solib-weak \
-	solib-weak-lib2 solib_sl so-impl-ld so-indr-cl \
-	stack-checking start step-break step-bt step-line step-resume-infcall \
-	step-test store structs-t* structs2 structs3 \
-	symbol-without-target_section term tui-layout twice-tmp \
-	type-opaque-main ui-redirect unload until unwindonsignal \
-	valgrind-db-attach value-double-free varargs vforked-prog \
-	volatile watch-cond watch-cond-infcall watch-non-mem watch-read \
-	watch-vfork watch_thread_num watchpoint watchpoint-cond-gone \
-	watchpoint-hw watchpoint-hw-hit-once watchpoint-solib watchpoints \
-	wchar whatis whatis-exp catch-syscall \
-	pr10179 gnu_vector
-
-MISCELLANEOUS = coremmap.data ../foobar.baz fixsectshr.sl \
-	pendshr.sl shreloc1.sl shreloc2.sl twice-tmp.c \
-	shr1.sl shr2.sl solib_sl.sl solib1.sl solib2.sl \
-	unloadshr.sl unloadshr2.sl watchpoint-solib-shr.sl \
-	weaklib1.sl weaklib2.sl hashline1.c hashline2.c hashline3.c \
-	auxv.gcore bigcore.corefile *.core *.debug *.stripped \
-	gcore-buffer-overflow.test gcore.test shreloc.txt tmp-fullname.c
-
-all info install-info dvi install uninstall installcheck check:
-	@echo "Nothing to be done for $@..."
-
-clean mostlyclean:
-	-rm -f *~ *.o a.out xgdb *.x *.ci *.tmp
-	-rm -f core core.coremaker coremaker.core corefile $(EXECUTABLES)
-	-rm -f $(MISCELLANEOUS)
-
-distclean maintainer-clean realclean: clean
-	-rm -f *~ core
-	-rm -f Makefile config.status config.log
-	-rm -f *-init.exp gdb.log gdb.sum
-	-rm -fr *.log summary detail *.plog *.sum *.psum site.*
diff --git a/gdb/testsuite/gdb.base/Makefile.in b/gdb/testsuite/gdb.base/Makefile.in
index 7ceb121..ca4c9a0 100644
--- a/gdb/testsuite/gdb.base/Makefile.in
+++ b/gdb/testsuite/gdb.base/Makefile.in
@@ -30,7 +30,7 @@ EXECUTABLES = a2-run advance all-types annota1 annota1-watch_thread_num \
 	sepsymtab.debug sepsymtab.stripped setshow setvar shmain shreloc \
 	sigall sigaltstack sigbpt sigchld siginfo siginfo-addr \
 	siginfo-infcall siginfo-obj signals signull sigrepeat sigstep \
-	sizeof skip skip-solib solib solib-corrupted solib-display-main
+	sizeof skip skip-solib solib solib-corrupted solib-display-main \
 	solib-nodir solib-overlap-main-0x40000000 solib-symbol-main solib-weak \
 	solib-weak-lib2 solib_sl so-impl-ld so-indr-cl \
 	stack-checking start step-break step-bt step-line step-resume-infcall \
@@ -57,6 +57,7 @@ all info install-info dvi install uninstall installcheck check:
 
 clean mostlyclean:
 	-rm -f *~ *.o a.out xgdb *.x *.ci *.tmp
+	-rm -f *.dwo *.dwp
 	-rm -f core core.coremaker coremaker.core corefile $(EXECUTABLES)
 	-rm -f $(MISCELLANEOUS)
 
diff --git a/gdb/testsuite/gdb.base/a2-run.exp b/gdb/testsuite/gdb.base/a2-run.exp
index c069851..e2119d4 100644
--- a/gdb/testsuite/gdb.base/a2-run.exp
+++ b/gdb/testsuite/gdb.base/a2-run.exp
@@ -21,10 +21,6 @@ if [gdb_skip_stdio_test "a2run.exp"] {
     return
 }
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # test running programs
 #
@@ -111,7 +107,7 @@ if [istarget "*-*-vxworks*"] then {
     verbose "Timeout is now $timeout seconds" 2
     gdb_expect -re "$gdb_prompt $" {}
 } else {
-	setup_xfail "mips-idt-*" "arm-*-coff"
+	setup_xfail "arm-*-coff"
 	gdb_run_cmd 5
 	gdb_expect {
 	    -re ".*120.*$gdb_prompt $"\
@@ -122,7 +118,6 @@ if [istarget "*-*-vxworks*"] then {
 }
 
 # Run again with same arguments.
-setup_xfail "mips-idt-*"
 gdb_run_cmd
 
 if [istarget "*-*-vxworks*"] then {
@@ -189,7 +184,6 @@ if [istarget "*-*-vxworks*"] then {
 }
 
 # Use "set args" command to specify an argument and run again.
-setup_xfail "mips-idt-*"
 if [istarget "*-*-vxworks*"] then {
     gdb_test_no_output "set args vxmain \"6\""
 } else {
diff --git a/gdb/testsuite/gdb.base/advance.exp b/gdb/testsuite/gdb.base/advance.exp
index c4fc63f..617a7fb 100644
--- a/gdb/testsuite/gdb.base/advance.exp
+++ b/gdb/testsuite/gdb.base/advance.exp
@@ -15,10 +15,6 @@
 
 # advance.exp -- Expect script to test 'advance' in gdb
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 set testfile advance
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
@@ -49,7 +45,8 @@ gdb_test "advance [gdb_get_line_number "advance this location"]" \
 # Verify that a malformed "advance" is gracefully caught.
 #
 gdb_test "advance [gdb_get_line_number "advance malformed"] then stop" \
-	"Junk at end of arguments." "malformed advance"
+    "malformed linespec error: unexpected string, \"then stop\"" \
+    "malformed advance"
 
 # Verify that "advance <funcname>" works.
 #
diff --git a/gdb/testsuite/gdb.base/all-bin.exp b/gdb/testsuite/gdb.base/all-bin.exp
index 94ec1d1..a3e9ca7 100644
--- a/gdb/testsuite/gdb.base/all-bin.exp
+++ b/gdb/testsuite/gdb.base/all-bin.exp
@@ -23,10 +23,6 @@
 
 
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
 #
 # test running programs
 #
@@ -40,7 +36,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
     return -1
     }
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/all-types.c b/gdb/testsuite/gdb.base/all-types.c
index 2f3a31f..570fd43 100644
--- a/gdb/testsuite/gdb.base/all-types.c
+++ b/gdb/testsuite/gdb.base/all-types.c
@@ -28,10 +28,6 @@ double		v_double;
 int main ()
 {
     extern void dummy();
-#ifdef usestubs
-    set_debug_traps();
-    breakpoint();
-#endif
     dummy();
     return 0;
     
diff --git a/gdb/testsuite/gdb.base/annota1.c b/gdb/testsuite/gdb.base/annota1.c
index 6a13ee9..239ea16 100644
--- a/gdb/testsuite/gdb.base/annota1.c
+++ b/gdb/testsuite/gdb.base/annota1.c
@@ -1,10 +1,6 @@
 #include <stdio.h>
 #include <signal.h>
 
-#ifdef __sh__
-#define signal(a,b)	/* Signals not supported on this target - make them go away */
-#endif
-
 
 #ifdef PROTOTYPES
 void
@@ -29,7 +25,7 @@ int
 main ()
 #endif
 {
-  int my_array[3] = { 1, 2, 3 };
+  int my_array[3] = { 1, 2, 3 };  /* break main */
   
   value = 7;
   
@@ -43,9 +39,9 @@ main ()
   {
     int i;
     for (i = 0; i < 5; i++)
-      value++;
+      value++;  /* increment value */
   }
 
-  return 0;
+  return 0;  /* after loop */
 }
 
diff --git a/gdb/testsuite/gdb.base/annota1.exp b/gdb/testsuite/gdb.base/annota1.exp
index 5ff2546..98b4650 100644
--- a/gdb/testsuite/gdb.base/annota1.exp
+++ b/gdb/testsuite/gdb.base/annota1.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Elena Zannoni (ezannoni at cygnus.com)
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 # are we on a target board? If so, don't run these tests.
 # note: this is necessary because we cannot use runto_main (which would
@@ -49,15 +45,6 @@ gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
 
-if [target_info exists gdb_stub] {
-    gdb_step_for_stub;
-}
-
-#
-# the line at which break main will put the breakpoint
-#
-set main_line 32
-
 # The commands we test here produce many lines of output; disable "press 
 # <return> to continue" prompts.
 gdb_test_no_output "set height 0"
@@ -65,8 +52,11 @@ gdb_test_no_output "set height 0"
 #
 # break at main
 #
+
+set main_line [gdb_get_line_number "break main"]
+
 gdb_test "break main" \
-    "Breakpoint.*at.* file .*$srcfile, line.*" \
+    "Breakpoint.*at.* file .*$srcfile, line $main_line\\." \
     "breakpoint main"
 
 
@@ -143,7 +133,7 @@ gdb_test_multiple "info break" "breakpoint info" {
 #exp_internal 1
 set binexp [string_to_regexp $binfile]
 gdb_test_multiple "run" "run until main breakpoint" {
-    -re "\r\n\032\032post-prompt\r\nStarting program: $binexp \(\(\r\n\r\n\032\032frames-invalid\)|\(\r\n\r\n\032\032breakpoints-invalid\)\)+\r\n\r\n\032\032starting\(\(\r\n\r\n\032\032frames-invalid\)|\(\r\n\r\n\032\032breakpoints-invalid\)\)*\r\n\r\n\032\032breakpoint 1\r\n\r\nBreakpoint 1, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nmain\r\n\032\032frame-args\r\n \\(\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n.*annota1.c\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n$main_line\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*$srcfile:$main_line:.*:beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped.*$gdb_prompt$" {
+    -re "\r\n\032\032post-prompt\r\nStarting program: $binexp \(\r\nwarning: Skipping \[^\r\n\]+ .gdb_index section in \[^\r\n\]+\r\nDo \"set use-deprecated-index-sections on\" before the file is read\r\nto use the section anyway\\.\)?\(\(\r\n\r\n\032\032frames-invalid\)|\(\r\n\r\n\032\032breakpoints-invalid\)\)*\r\n\r\n\032\032starting\(\(\r\n\r\n\032\032frames-invalid\)|\(\r\n\r\n\032\032breakpoints-invalid\)\)*\r\n\r\n\032\032breakpoint 1\r\n\r\nBreakpoint 1, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nmain\r\n\032\032frame-args\r\n \\(\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n.*annota1.c\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n$main_line\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*$srcfile:$main_line:.*:beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped.*$gdb_prompt$" {
 	pass "run until main breakpoint" 
     }
 }
@@ -310,13 +300,13 @@ gdb_test_multiple "delete 3" "delete bp 3" {
 # break at main, after value is initialized. This is in preparation
 # to test the annotate output for the display command.
 #
-gdb_test_multiple "break main" "break at 28" {
+gdb_test_multiple "break main" "break at main" {
     -re "post-prompt.*\032\032breakpoints-invalid.*Breakpoint 4 at $hex: file ${escapedsrcfile}, line $main_line.*$gdb_prompt$" {
-	pass "break at 28"
+	pass "break at main"
     }
     -re "post-prompt.*\032\032breakpoints-invalid.*Breakpoint 4 at $hex: file .*${srcfile}, line $main_line.*$gdb_prompt$" {
 	setup_xfail "*-*-*" 1270
-	fail "break at 28"
+	fail "break at main"
     }
 }
 
@@ -359,9 +349,12 @@ gdb_expect {
 # Test that breakpoints-invalid is issued once and only once for
 # breakpoint ignore count changes, after annotation stopped.
 #
-gdb_test_multiple "break 46" "break at 46" {
-    -re "Breakpoint 5 at $hex: file .*$srcfile, line 46.*$gdb_prompt$" {
-	pass "break at 46"
+
+set value_inc_line [gdb_get_line_number "increment value"]
+
+gdb_test_multiple "break $value_inc_line" "break at value++" {
+    -re "Breakpoint 5 at $hex: file .*$srcfile, line $value_inc_line.*$gdb_prompt$" {
+	pass "break at value++"
     }
 }
 
@@ -372,7 +365,7 @@ gdb_test_multiple "ignore 5 4" "ignore 5 4" {
 }
 
 gdb_test_multiple "continue" "annotate ignore count change" {
-    -re ".*$srcfile:46:.*\032\032stopped\r\n\r\n\032\032breakpoints-invalid\r\n$gdb_prompt$" {
+    -re ".*$srcfile:$value_inc_line:.*\032\032stopped\r\n\r\n\032\032breakpoints-invalid\r\n$gdb_prompt$" {
 	pass "annotate ignore count change"
     }
 }
@@ -385,8 +378,10 @@ gdb_test_multiple "next" "next to exit loop" {
     }
 }
 
+set after_loop_line [gdb_get_line_number "after loop"]
+
 gdb_test_multiple "next" "breakpoint ignore count" {
-    -re ".*$srcfile:49:.*$gdb_prompt$" {
+    -re ".*$srcfile:$after_loop_line:.*$gdb_prompt$" {
 	pass "breakpoint ignore count"
     }
 }
@@ -452,7 +447,7 @@ proc thread_test {} {
     set binfile ${objdir}/${subdir}/${testfile}-watch_thread_num
     set gdb_prompt $old_gdb_prompt
 
-    if { ![get_compiler_info ${binfile}] && [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] == "" } {
+    if { ![get_compiler_info] && [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] == "" } {
 
 	gdb_exit
 	gdb_start
diff --git a/gdb/testsuite/gdb.base/annota3.c b/gdb/testsuite/gdb.base/annota3.c
index 6a13ee9..239ea16 100644
--- a/gdb/testsuite/gdb.base/annota3.c
+++ b/gdb/testsuite/gdb.base/annota3.c
@@ -1,10 +1,6 @@
 #include <stdio.h>
 #include <signal.h>
 
-#ifdef __sh__
-#define signal(a,b)	/* Signals not supported on this target - make them go away */
-#endif
-
 
 #ifdef PROTOTYPES
 void
@@ -29,7 +25,7 @@ int
 main ()
 #endif
 {
-  int my_array[3] = { 1, 2, 3 };
+  int my_array[3] = { 1, 2, 3 };  /* break main */
   
   value = 7;
   
@@ -43,9 +39,9 @@ main ()
   {
     int i;
     for (i = 0; i < 5; i++)
-      value++;
+      value++;  /* increment value */
   }
 
-  return 0;
+  return 0;  /* after loop */
 }
 
diff --git a/gdb/testsuite/gdb.base/annota3.exp b/gdb/testsuite/gdb.base/annota3.exp
index 915faca..246ff0b 100644
--- a/gdb/testsuite/gdb.base/annota3.exp
+++ b/gdb/testsuite/gdb.base/annota3.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Elena Zannoni (ezannoni at cygnus.com)
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 # are we on a target board? If so, don't run these tests.
 # note: this is necessary because we cannot use runto_main (which would
@@ -49,15 +45,6 @@ gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
 
-if [target_info exists gdb_stub] {
-    gdb_step_for_stub;
-}
-
-#
-# the line at which break main will put the breakpoint
-#
-set main_line 32
-
 # The commands we test here produce many lines of output; disable "press 
 # <return> to continue" prompts.
 gdb_test_no_output "set height 0"
@@ -65,8 +52,11 @@ gdb_test_no_output "set height 0"
 #
 # break at main
 #
+
+set main_line [gdb_get_line_number "break main"]
+
 gdb_test "break main" \
-    "Breakpoint.*at.* file .*$srcfile, line.*" \
+    "Breakpoint.*at.* file .*$srcfile, line $main_line\\." \
     "breakpoint main"
 
 
@@ -114,11 +104,10 @@ gdb_test_multiple "end" "end if construct" {
 # info break:
 #
 send_gdb "info break\n" 
-gdb_expect_list "breakpoint info" "$gdb_prompt$" {
+gdb_expect_list "breakpoint info" "$gdb_prompt$" [concat {
     "\r\n\032\032post-prompt\r\n"
-    "Num     Type           Disp Enb Address    +What\r\n"
-    "1       breakpoint     keep y   0x\[0-9a-zA-Z\]+ +in main at .*annota3.c:32\r\n"
-}
+    "Num     Type           Disp Enb Address    +What\r\n" } [list \
+    "1       breakpoint     keep y   0x\[0-9a-zA-Z\]+ +in main at .*annota3.c:$main_line\r\n"]]
 
 
 #
@@ -126,18 +115,18 @@ gdb_expect_list "breakpoint info" "$gdb_prompt$" {
 #
 #exp_internal 1
 send_gdb "run\n"
-gdb_expect_list "run until main breakpoint" "$gdb_prompt$" {
+gdb_expect_list "run until main breakpoint" "$gdb_prompt$" [concat {
     "\r\n\032\032post-prompt\r\n"
     "Starting program: .*annota3(|\.exe) \r\n"
     "\r\n\032\032starting\r\n"
     "\r\n\032\032breakpoint 1\r\n"
     "\r\n"
     "Breakpoint 1, "
-    "\r\n\032\032frame-begin 0 0x\[0-9a-z\]+\r\n"
-    "main \\(\\) at .*annota3.c:32\r\n"
-    "\r\n\032\032source.*annota3.c:32:.*:beg:0x\[0-9a-z\]+\r\n"
+    "\r\n\032\032frame-begin 0 0x\[0-9a-z\]+\r\n" } [list \
+    "main \\(\\) at .*annota3.c:$main_line\r\n"] [list \
+    "\r\n\032\032source.*annota3.c:$main_line:.*:beg:0x\[0-9a-z\]+\r\n"] {
     "\r\n\032\032stopped\r\n"
-}
+}]
 #exp_internal 0
 #exit 0
 
@@ -278,10 +267,9 @@ gdb_expect_list "delete bp 3" "$gdb_prompt$" {
 # to test the annotate output for the display command.
 #
 send_gdb "break main\n"
-gdb_expect_list "break at 28" "$gdb_prompt$" {
-    "\r\n\032\032post-prompt\r\n"
-    "Breakpoint 4 at 0x\[0-9a-z\]+: file .*annota3.c, line 32.\r\n"
-}
+gdb_expect_list "break at main" "$gdb_prompt$" [concat {
+    "\r\n\032\032post-prompt\r\n" } [list \
+    "Breakpoint 4 at 0x\[0-9a-z\]+: file .*annota3.c, line $main_line.\r\n"]]
 
 #
 # display the value
@@ -317,11 +305,13 @@ gdb_expect {
 # NOTE: breakpoints-invalid annotations have been removed from
 # level 3 but keep these tests for continuity and comparison
 # with annota1.exp.
-send_gdb "break 46\n"
-gdb_expect_list  "break at 46" "$gdb_prompt$" {
-    "\r\n\032\032post-prompt\r\n"
-    "Breakpoint 5 at 0x\[0-9a-z\]+: file .*annota3.c, line 46.\r\n"
-}
+
+set value_inc_line [gdb_get_line_number "increment value"]
+
+send_gdb "break $value_inc_line\n"
+gdb_expect_list  "break at value++" "$gdb_prompt$" [concat {
+    "\r\n\032\032post-prompt\r\n" } [list \
+    "Breakpoint 5 at 0x\[0-9a-z\]+: file .*annota3.c, line $value_inc_line.\r\n"]]
 
 send_gdb "ignore 5 4\n"
 gdb_expect_list "ignore 5 4" "$gdb_prompt$" {
@@ -331,17 +321,17 @@ gdb_expect_list "ignore 5 4" "$gdb_prompt$" {
 }
 
 send_gdb "continue\n"
-gdb_expect_list "annotate ignore count change" "$gdb_prompt$" {
+gdb_expect_list "annotate ignore count change" "$gdb_prompt$" [concat {
     "\r\n\032\032post-prompt\r\n"
     "\r\n\032\032breakpoint 5\r\n"
     "\r\n"
     "Breakpoint 5, "
-    "\r\n\032\032frame-begin 0 0x\[0-9a-z\]+\r\n"
-    "main \\(\\) at .*annota3.c:46\r\n"
-    "\r\n\032\032source .*annota3.c:46:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"
+    "\r\n\032\032frame-begin 0 0x\[0-9a-z\]+\r\n" } [list \
+    "main \\(\\) at .*annota3.c:$value_inc_line\r\n"] [list \
+    "\r\n\032\032source .*annota3.c:$value_inc_line:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"] {
     "1: value = 11\r\n"
     "\r\n\032\032stopped\r\n"
-}
+}]
 
 # check that ignore command is working, or the above can provide
 # misleading assurance ...
@@ -355,14 +345,16 @@ gdb_expect_list "next to exit loop" "$gdb_prompt$"  {
     "\r\n\032\032stopped\r\n"
 }
 
+set after_loop_line [gdb_get_line_number "after loop"]
+
 send_gdb "next\n"
-gdb_expect_list "breakpoint ignore count" "$gdb_prompt$" {
+gdb_expect_list "breakpoint ignore count" "$gdb_prompt$" [concat {
     "\r\n\032\032post-prompt\r\n"
-    "\r\n\032\032starting\r\n"
-    "\r\n\032\032source.*annota3.c:49:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"
+    "\r\n\032\032starting\r\n" } [list \
+    "\r\n\032\032source.*annota3.c:$after_loop_line:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"] {
     "1: value = 12\r\n"
     "\r\n\032\032stopped\r\n"
-}
+}]
 
 # Get the inferior's PID for later.
 
diff --git a/gdb/testsuite/gdb.base/args.exp b/gdb/testsuite/gdb.base/args.exp
index d9473a5..4b812de 100644
--- a/gdb/testsuite/gdb.base/args.exp
+++ b/gdb/testsuite/gdb.base/args.exp
@@ -15,10 +15,6 @@
 
 # This is a test for the gdb invocation option --args.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 global GDBFLAGS
 
diff --git a/gdb/testsuite/gdb.base/arithmet.exp b/gdb/testsuite/gdb.base/arithmet.exp
index 6037e0d..b8a3856 100644
--- a/gdb/testsuite/gdb.base/arithmet.exp
+++ b/gdb/testsuite/gdb.base/arithmet.exp
@@ -22,10 +22,6 @@
 # with integer type variables
 # 
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
 #
 # test running programs
 #
diff --git a/gdb/testsuite/gdb.base/arrayidx.exp b/gdb/testsuite/gdb.base/arrayidx.exp
index ed8e17a..cba0024 100644
--- a/gdb/testsuite/gdb.base/arrayidx.exp
+++ b/gdb/testsuite/gdb.base/arrayidx.exp
@@ -17,10 +17,6 @@
 # gdb can correctly print arrays with indexes for each element of the
 # array.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 set testfile "arrayidx"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
diff --git a/gdb/testsuite/gdb.base/assign.exp b/gdb/testsuite/gdb.base/assign.exp
index db639eb..8fb87d9 100644
--- a/gdb/testsuite/gdb.base/assign.exp
+++ b/gdb/testsuite/gdb.base/assign.exp
@@ -21,10 +21,6 @@
 # with mixed types and with int type variables
 # 
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
 #
 # test running programs
 #
diff --git a/gdb/testsuite/gdb.base/async-shell.exp b/gdb/testsuite/gdb.base/async-shell.exp
index 4949cf9..d682382 100644
--- a/gdb/testsuite/gdb.base/async-shell.exp
+++ b/gdb/testsuite/gdb.base/async-shell.exp
@@ -29,9 +29,11 @@ if { [prepare_for_testing ${testfile}.exp ${testfile}] } {
     return -1
 }
 
+set gdbindex_warning_re "warning: Skipping \[^\r\n\]+ \\.gdb_index section \[^\r\n\]*\r\nDo \"set use-deprecated-index-sections on\" before the file is read\r\nto use the section anyway\\."
+
 gdb_test_no_output "set target-async on "
 gdb_test_no_output "set non-stop on"
-gdb_test "run &" "Starting program: \[^\r\n\]*"
+gdb_test "run &" "Starting program: \[^\r\n\]*(\r\n$gdbindex_warning_re)?"
 
 # `sleep 5' here would workaround the bug, do not sleep here.
 # "shell" could eat waitpid event from the asynchronous inferior process.
diff --git a/gdb/testsuite/gdb.base/async.exp b/gdb/testsuite/gdb.base/async.exp
index 22dc1a9..505f54a 100644
--- a/gdb/testsuite/gdb.base/async.exp
+++ b/gdb/testsuite/gdb.base/async.exp
@@ -14,10 +14,6 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # test running programs
 #
@@ -31,7 +27,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
     return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
@@ -55,9 +51,6 @@ gdb_exit
 gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
-if [target_info exists gdb_stub] {
-    gdb_step_for_stub;
-}
 
 #
 # set it up at a breakpoint so we can play with it
diff --git a/gdb/testsuite/gdb.base/attach-pie-misread.exp b/gdb/testsuite/gdb.base/attach-pie-misread.exp
index 7a68c33..e7ff231 100644
--- a/gdb/testsuite/gdb.base/attach-pie-misread.exp
+++ b/gdb/testsuite/gdb.base/attach-pie-misread.exp
@@ -27,7 +27,7 @@ set genfile ${objdir}/${subdir}/${test}-gen.h
 set executable ${test}
 set binfile ${objdir}/${subdir}/${executable}
 
-if {[build_executable_own_libs ${test}.exp $executable $srcfile [list "additional_flags=-fPIE -pie"]] == ""} {
+if {[build_executable_own_libs ${test}.exp $executable $srcfile [list additional_flags=-fPIE ldflags=-pie]] == ""} {
     return -1
 }
 
@@ -97,7 +97,7 @@ if {$result == 0} {
     fail $test
 }
 
-set prelink_args [build_executable_own_libs ${test}.exp $executable $srcfile [list "additional_flags=-fPIE -pie -DGEN=\"$genfile\""]]
+set prelink_args [build_executable_own_libs ${test}.exp $executable $srcfile [list "additional_flags=-fPIE -DGEN=\"$genfile\"" "ldflags=-pie"]]
 if {$prelink_args == ""} {
     return -1
 }
@@ -152,9 +152,7 @@ gdb_expect {
 }
 
 # Due to alignments it was reproducible with 1 on x86_64 but 2 on i686.
-foreach align_mult {1 2} {
-    set old_ldprefix $pf_prefix
-    lappend pf_prefix "shift-by-$align_mult:"
+foreach align_mult {1 2} { with_test_prefix "shift-by-$align_mult" {
 
     # FIXME: We believe there is enough room under FIRST_OFFSET.
     set shifted_offset [format 0x%x [expr "$first_offset - $align_mult * $align_max"]]
@@ -198,8 +196,6 @@ foreach align_mult {1 2} {
     }
 
     gdb_test "detach" "Detaching from program: .*"
-
-    set pf_prefix $old_ldprefix
-}
+}}
 
 remote_exec host "kill -9 $pid"
diff --git a/gdb/testsuite/gdb.base/attach-twice.c b/gdb/testsuite/gdb.base/attach-twice.c
new file mode 100644
index 0000000..cff2215
--- /dev/null
+++ b/gdb/testsuite/gdb.base/attach-twice.c
@@ -0,0 +1,42 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2011-2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/ptrace.h>
+#include <errno.h>
+
+int
+main (void)
+{
+  long l;
+
+  switch (fork ())
+  {
+    case -1:
+      perror ("fork");
+      exit (1);
+    case 0:
+      errno = 0;
+      ptrace (PTRACE_ATTACH, getppid (), NULL, NULL);
+      if (errno != 0)
+	perror ("PTRACE_ATTACH");
+      break;
+  }
+  sleep (600);
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.base/attach-twice.exp b/gdb/testsuite/gdb.base/attach-twice.exp
new file mode 100644
index 0000000..d4e1a6c
--- /dev/null
+++ b/gdb/testsuite/gdb.base/attach-twice.exp
@@ -0,0 +1,51 @@
+# Copyright (C) 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Manipulation with PID on target is not supported.
+if [is_remote target] then {
+    return 0
+}
+
+set testfile attach-twice
+set executable ${testfile}
+set binfile ${objdir}/${subdir}/${executable}
+
+if { [prepare_for_testing ${testfile}.exp $executable] } {
+    return -1
+}
+
+set testpid [eval exec $binfile &]
+exec sleep 2
+
+set parentpid 0
+
+set test "attach"
+gdb_test_multiple "attach $testpid" $test {
+    -re "Attaching to program: \[^\r\n\]*, process $testpid\r\n.*warning: process $testpid is already traced by process (\[0-9\]+)\r\n.*ptrace: Operation not permitted\\.\r\n$gdb_prompt $" {
+	set parentpid $expect_out(1,string)
+	pass $test
+    }
+    -re "Attaching to program: \[^\r\n\]*, process $testpid\r\n.*ptrace: Operation not permitted\\.\r\n$gdb_prompt $" {
+	fail $test
+    }
+    -re "\r\n$gdb_prompt $" {
+	xfail $test
+    }
+}
+
+if {$parentpid != 0} {
+  eval exec kill -9 $parentpid
+}
+eval exec kill -9 $testpid
diff --git a/gdb/testsuite/gdb.base/attach.exp b/gdb/testsuite/gdb.base/attach.exp
index f28a537..c3e12a0 100644
--- a/gdb/testsuite/gdb.base/attach.exp
+++ b/gdb/testsuite/gdb.base/attach.exp
@@ -14,10 +14,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 # On HP-UX 11.0, this test is causing a process running the program
 # "attach" to be left around spinning.  Until we figure out why, I am
@@ -62,7 +58,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" executable {d
     return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
@@ -164,6 +160,10 @@ proc do_attach_tests {} {
 	    # Response expected on Cygwin
 	    pass "$test"
 	}
+	-re "Attaching to.*, process $boguspid.*failed.*$gdb_prompt $" {
+	    # Response expected on the extended-remote target.
+	    pass "$test"
+	}
     }
     
     # Verify that we can attach to the process by first giving its
@@ -228,7 +228,8 @@ proc do_attach_tests {} {
     # Verify that we can attach to the process just by giving the
     # process ID.
    
-    set test "set file, before attach2"
+    set test "attach2, with no file"
+    set found_exec_file 0
     gdb_test_multiple "attach $testpid" "$test" {
 	-re "Attaching to process $testpid.*Load new symbol table from \"$escapedbinfile\.exe\".*y or n. $" {
 	    # On Cygwin, the DLL's symbol tables are loaded prior to the
@@ -237,9 +238,25 @@ proc do_attach_tests {} {
 	    # executable.
 	    gdb_test "y" "Reading symbols from $escapedbinfile\.\.\.*done." \
 		"$test (reset file)"
+
+	    set found_exec_file 1
 	}
 	-re "Attaching to process $testpid.*Reading symbols from $escapedbinfile.*main.*at .*$gdb_prompt $" {
 	    pass "$test"
+	    set found_exec_file 1
+	}
+    }
+
+    if {$found_exec_file == 0} {
+	set test "load file manually, after attach2"
+	gdb_test_multiple "file $binfile" "$test" {
+	    -re "A program is being debugged already..*Are you sure you want to change the file.*y or n. $" {
+		gdb_test "y" "Reading symbols from $escapedbinfile\.\.\.*done." \
+		    "$test (re-read)"
+	    }
+	    -re "Reading symbols from $escapedbinfile\.\.\.*done.*$gdb_prompt $" {
+		pass "$test"
+	    }
 	}
     }
 
diff --git a/gdb/testsuite/gdb.base/auxv.c b/gdb/testsuite/gdb.base/auxv.c
index ed5f2b6..c87d0f7 100644
--- a/gdb/testsuite/gdb.base/auxv.c
+++ b/gdb/testsuite/gdb.base/auxv.c
@@ -35,6 +35,13 @@
 #define ABORT {char *invalid = 0; *invalid = 0xFF;}
 #endif
 
+#ifdef USE_RLIMIT
+# include <sys/resource.h>
+# ifndef RLIM_INFINITY
+#  define RLIM_INFINITY -1
+# endif
+#endif /* USE_RLIMIT */
+
 /* Don't make these automatic vars or we will have to walk back up the
    stack to access them. */
 
@@ -53,6 +60,14 @@ func2 (int x)
   int i;
   static int y;
 
+#ifdef USE_RLIMIT
+  {
+    struct rlimit rlim = { RLIM_INFINITY, RLIM_INFINITY };
+
+    setrlimit (RLIMIT_CORE, &rlim);
+  }
+#endif
+
   /* Make sure that coremaker_local doesn't get optimized away. */
   for (i = 0; i < 5; i++)
     coremaker_local[i] = i;
diff --git a/gdb/testsuite/gdb.base/auxv.exp b/gdb/testsuite/gdb.base/auxv.exp
index e0f4cb4..16f12c7 100644
--- a/gdb/testsuite/gdb.base/auxv.exp
+++ b/gdb/testsuite/gdb.base/auxv.exp
@@ -24,10 +24,6 @@ if { ! [istarget "*-*-linux*"] && ! [istarget "*-*-solaris*"] } {
     return
 }
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile "auxv"
 set srcfile ${testfile}.c
@@ -35,7 +31,10 @@ set binfile ${objdir}/${subdir}/${testfile}
 set corefile ${objdir}/${subdir}/${testfile}.corefile
 set gcorefile ${objdir}/${subdir}/${testfile}.gcore
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable \
+		  {debug additional_flags=-DUSE_RLIMIT}] != ""
+     && [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable \
+		  {debug}] != "" } {
     untested "couldn't compile ${srcdir}/${subdir}/${srcfile}"
     return -1
 }
@@ -159,7 +158,7 @@ if {$core_works} {
     } else {
 	set core_works 0
 	warning "can't generate a core file - core tests suppressed - check ulimit -c"
-	fail $test
+	unsupported $test
     }
 } else {
     unsupported $test
diff --git a/gdb/testsuite/gdb.base/bang.exp b/gdb/testsuite/gdb.base/bang.exp
index 1d7365a..77b10d6 100644
--- a/gdb/testsuite/gdb.base/bang.exp
+++ b/gdb/testsuite/gdb.base/bang.exp
@@ -16,10 +16,6 @@
 # This is a test that verifies that GDB is able to "run" when the name
 # of the executable file contains a '!'.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 set testfile "args"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/bang!
diff --git a/gdb/testsuite/gdb.base/bfp-test.exp b/gdb/testsuite/gdb.base/bfp-test.exp
index 72c9643..26ac7ff 100644
--- a/gdb/testsuite/gdb.base/bfp-test.exp
+++ b/gdb/testsuite/gdb.base/bfp-test.exp
@@ -16,10 +16,6 @@
 # This file is part of the gdb testsuite.  It is intended to test that
 # gdb could correctly handle floating point constant with a suffix.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 set testfile "bfp-test"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
diff --git a/gdb/testsuite/gdb.base/bigcore.exp b/gdb/testsuite/gdb.base/bigcore.exp
index a2ef54a..2e05da5 100644
--- a/gdb/testsuite/gdb.base/bigcore.exp
+++ b/gdb/testsuite/gdb.base/bigcore.exp
@@ -17,10 +17,6 @@
 # This file is based on corefile.exp which was written by Fred
 # Fish. (fnf at cygnus.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 # Are we on a target board?  As of 2004-02-12, GDB didn't have a
 # mechanism that would let it efficiently access a remote corefile.
diff --git a/gdb/testsuite/gdb.base/bitfields.c b/gdb/testsuite/gdb.base/bitfields.c
index 3b5e42c..ed1634c 100644
--- a/gdb/testsuite/gdb.base/bitfields.c
+++ b/gdb/testsuite/gdb.base/bitfields.c
@@ -78,10 +78,6 @@ int main ()
   /* For each member, set that member to 1, allow gdb to verify that the
      member (and only that member) is 1, and then reset it back to 0. */
 
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
   flags.uc = 1;
   break1 ();
   flags.uc = 0;
diff --git a/gdb/testsuite/gdb.base/bitfields.exp b/gdb/testsuite/gdb.base/bitfields.exp
index 6734ea1..f5777d6 100644
--- a/gdb/testsuite/gdb.base/bitfields.exp
+++ b/gdb/testsuite/gdb.base/bitfields.exp
@@ -16,10 +16,6 @@
 
 # This file was written by Fred Fish. (fnf at cygnus.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile "bitfields"
 set srcfile ${testfile}.c
@@ -257,29 +253,7 @@ gdb_load ${binfile}
 gdb_test_no_output "set print sevenbit-strings"
 
 bitfield_uniqueness
-if [istarget "mips-idt-*"] then {
-    # Restart because IDT/SIM runs out of file descriptors.
-    gdb_exit
-    gdb_start
-    gdb_reinitialize_dir $srcdir/$subdir
-    gdb_load ${binfile}
-}
 bitfield_containment
-if [istarget "mips-idt-*"] then {
-    # Restart because IDT/SIM runs out of file descriptors.
-    gdb_exit
-    gdb_start
-    gdb_reinitialize_dir $srcdir/$subdir
-    gdb_load ${binfile}
-}
 bitfield_unsignedness
-if [istarget "mips-idt-*"] then {
-    # Restart because IDT/SIM runs out of file descriptors.
-    gdb_exit
-    gdb_start
-    gdb_reinitialize_dir $srcdir/$subdir
-    gdb_load ${binfile}
-}
 bitfield_signedness
-
 bitfield_at_offset
diff --git a/gdb/testsuite/gdb.base/bitfields2.c b/gdb/testsuite/gdb.base/bitfields2.c
index 1958ef0..edb3b9f 100644
--- a/gdb/testsuite/gdb.base/bitfields2.c
+++ b/gdb/testsuite/gdb.base/bitfields2.c
@@ -162,10 +162,7 @@ void tester ()
 int main () 
 {
   int i;
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
+
   for (i = 0; i < 5; i += 1)
     tester ();
   return 0;
diff --git a/gdb/testsuite/gdb.base/bitfields2.exp b/gdb/testsuite/gdb.base/bitfields2.exp
index 3da53b9..137090b 100644
--- a/gdb/testsuite/gdb.base/bitfields2.exp
+++ b/gdb/testsuite/gdb.base/bitfields2.exp
@@ -23,10 +23,6 @@
 # in bitfields.c, which considers only bit-fields that are <= 9 bits long.
 #
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile "bitfields2"
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/bitops.exp b/gdb/testsuite/gdb.base/bitops.exp
index dab4fd0..bfb3a12 100644
--- a/gdb/testsuite/gdb.base/bitops.exp
+++ b/gdb/testsuite/gdb.base/bitops.exp
@@ -23,10 +23,6 @@
 # 
 
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 #
 # test running programs
 #
diff --git a/gdb/testsuite/gdb.base/break-inline.c b/gdb/testsuite/gdb.base/break-inline.c
new file mode 100644
index 0000000..bf80ae0
--- /dev/null
+++ b/gdb/testsuite/gdb.base/break-inline.c
@@ -0,0 +1,32 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+static int g;
+
+static inline void
+foo (void)
+{
+  g = 42;
+}
+
+int
+main (int argc, char *argv[])
+{
+  foo ();
+  return g;
+}
+
diff --git a/gdb/testsuite/gdb.base/break-inline.exp b/gdb/testsuite/gdb.base/break-inline.exp
new file mode 100644
index 0000000..34c47c6
--- /dev/null
+++ b/gdb/testsuite/gdb.base/break-inline.exp
@@ -0,0 +1,27 @@
+#   Copyright (C) 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+
+if { [prepare_for_testing break-inline.exp "break-inline" {} {debug nowarnings optimize=-O2}] } {
+    return -1
+}
+
+gdb_breakpoint "main" "temporary"
+gdb_run_cmd
+gdb_test "" "Temporary breakpoint.*foo\\(\\).*"
+
+# Now test 'break' with no arguments.
+gdb_test "break" "Breakpoint.*"
+
diff --git a/gdb/testsuite/gdb.base/break-interp.exp b/gdb/testsuite/gdb.base/break-interp.exp
index 5882cfe..4012e66 100644
--- a/gdb/testsuite/gdb.base/break-interp.exp
+++ b/gdb/testsuite/gdb.base/break-interp.exp
@@ -30,7 +30,7 @@ set binfile_lib ${objdir}/${subdir}/${test}.so
 set srcfile "${test}-main.c"
 set srcfile_lib "${test}-lib.c"
 
-if [get_compiler_info ${binfile_lib}] {
+if [get_compiler_info] {
     return -1
 }
 
@@ -155,7 +155,7 @@ proc reach_1 {func command displacement} {
 		pass $test
 	    }
 	}
-	-re "Stopped due to shared library event\r\n$gdb_prompt $" {
+	-re "Stopped due to (spurious )?shared library event.*\r\n$gdb_prompt $" {
 	    if {$func == "_dl_debug_state"} {
 		if {$debug_state_count == 0} {
 		    # First stop does not yet relocate the _start function
@@ -185,16 +185,12 @@ proc reach_1 {func command displacement} {
 # displacement of 0 bytes to be present, "NONZERO" for displacement of non-0
 # bytes to be present and "PRESENT" if both "ZERO" and "NONZERO" are valid.
 proc reach {func command displacement} {
-    global pf_prefix
-    set old_ldprefix $pf_prefix
-    lappend pf_prefix "reach-$func:"
-
-    reach_1 $func $command $displacement
-
-    set pf_prefix $old_ldprefix
+    with_test_prefix "reach-$func" {
+	reach_1 $func $command $displacement
+    }
 }
 
-proc test_core {file displacement} {
+proc test_core {file displacement} { with_test_prefix "core" {
     global srcdir subdir gdb_prompt expect_out
 
     set corefile [core_find $file {} "segv"]
@@ -202,10 +198,6 @@ proc test_core {file displacement} {
 	return
     }
 
-    global pf_prefix
-    set old_ldprefix $pf_prefix
-    lappend pf_prefix "core:"
-
     gdb_exit
     gdb_start
     # Clear it to never find any separate debug infos in $debug_root.
@@ -245,26 +237,18 @@ proc test_core {file displacement} {
     }
 
     gdb_test "bt" "#\[0-9\]+ +\[^\r\n\]*\\mlibfunc\\M\[^\r\n\]*\r\n#\[0-9\]+ +\[^\r\n\]*\\mmain\\M.*" "core main bt"
+}}
 
-    set pf_prefix $old_ldprefix
-}
-
-proc test_attach_gdb {file pid displacement prefix} {
+proc test_attach_gdb {file pid displacement prefix} { with_test_prefix "$prefix" {
     global gdb_prompt expect_out
 
-    global pf_prefix
-    set old_ldprefix $pf_prefix
-    lappend pf_prefix "$prefix:"
-
     gdb_exit
     gdb_start
 
     # Print the "PIE (Position Independent Executable) displacement" message.
     gdb_test_no_output "set verbose on"
 
-    if {$file != ""} {
-	gdb_test "file $file" "Reading symbols from .*done\\." "file"
-    }
+    gdb_test "file $file" "Reading symbols from .*done\\." "file"
 
     set test "attach"
     gdb_test_multiple "attach $pid" $test {
@@ -302,12 +286,11 @@ proc test_attach_gdb {file pid displacement prefix} {
 
     gdb_test "bt" "#\[0-9\]+ +\[^\r\n\]*\\mlibfunc\\M\[^\r\n\]*\r\n#\[0-9\]+ +\[^\r\n\]*\\mmain\\M.*" "attach main bt"
     gdb_exit
-
-    set pf_prefix $old_ldprefix
-}
+}}
 
 proc test_attach {file displacement {relink_args ""}} {
     global board_info
+    global exec
 
     gdb_exit
 
@@ -336,10 +319,10 @@ proc test_attach {file displacement {relink_args ""}} {
     }
 
     if {$relink_args == ""} {
-	test_attach_gdb "" $pid $displacement "attach"
+	test_attach_gdb $exec $pid $displacement "attach"
     } else {
 	# These could be rather passed as arguments.
-	global exec interp_saved interp
+	global interp_saved interp
 
 	foreach relink {YES NO} {
 	    # Formerly this test was testing only prelinking of $EXEC.  As the
@@ -428,98 +411,95 @@ proc test_ld {file ifmain trynosym displacement} {
 	return
     }
 
-    global pf_prefix
-    set old_ldprefix $pf_prefix
-    lappend pf_prefix "symbol-less:"
-
-    # Test also `exec-file'-command loaded $FILE - therefore without symbols.
-    # SYMBOL_OBJFILE is not available and only EXEC_BFD must be used.
-
-    gdb_exit
-    gdb_start
-    # Clear it to never find any separate debug infos in $debug_root.
-    gdb_test_no_output "set debug-file-directory"
-    gdb_reinitialize_dir $srcdir/$subdir
-
-    # Print the "PIE (Position Independent Executable) displacement" message.
-    gdb_test_no_output "set verbose on"
-
-    # Test no (error) message has been printed by `exec-file'.
-    set escapedfile [string_to_regexp $file]
-    gdb_test "exec-file $file" "exec-file $escapedfile" "load"
-
-    if $ifmain {
-	reach "_dl_debug_state" run $displacement
-
-	# Use two separate gdb_test_multiple statements to avoid timeouts due
-	# to slow processing of wildcard capturing long output
-	set test "info files"
-	set entrynohex ""
-	gdb_test_multiple $test $test {
-	    -re "\r\n\[\t \]*Entry point:\[\t \]*0x(\[0-9a-f\]+)\r\n" {
-		set entrynohex $expect_out(1,string)
-		gdb_test_multiple "" $test {
-		    -re "\r\n$gdb_prompt $" {
-			pass $test
+    with_test_prefix "symbol-less" {
+	# Test also `exec-file'-command loaded $FILE - therefore
+	# without symbols.  SYMBOL_OBJFILE is not available and only
+	# EXEC_BFD must be used.
+
+	gdb_exit
+	gdb_start
+	# Clear it to never find any separate debug infos in $debug_root.
+	gdb_test_no_output "set debug-file-directory"
+	gdb_reinitialize_dir $srcdir/$subdir
+
+	# Print the "PIE (Position Independent Executable)
+	# displacement" message.
+	gdb_test_no_output "set verbose on"
+
+	# Test no (error) message has been printed by `exec-file'.
+	set escapedfile [string_to_regexp $file]
+	gdb_test "exec-file $file" "exec-file $escapedfile" "load"
+
+	if $ifmain {
+	    reach "_dl_debug_state" run $displacement
+
+	    # Use two separate gdb_test_multiple statements to avoid timeouts due
+	    # to slow processing of wildcard capturing long output
+	    set test "info files"
+	    set entrynohex ""
+	    gdb_test_multiple $test $test {
+		-re "\r\n\[\t \]*Entry point:\[\t \]*0x(\[0-9a-f\]+)\r\n" {
+		    set entrynohex $expect_out(1,string)
+		    gdb_test_multiple "" $test {
+			-re "\r\n$gdb_prompt $" {
+			    pass $test
+			}
 		    }
 		}
 	    }
-	}
 
-	# `info sym' cannot be tested for .opd as the binary may not have
-	# symbols.
-	if {[istarget powerpc64-*] && [is_lp64_target]} {
-	    set test "convert entry point"
-	    gdb_test_multiple "p *(void(*)(void) *) 0x$entrynohex" $test {
-		-re " =( \\(\[^0-9\]*\\))? 0x(\[0-9a-f\]+)( < \[^\r\n\]*)?\r\n$gdb_prompt $" {
-		    set entrynohex $expect_out(2,string)
-		    pass $test
+	    # `info sym' cannot be tested for .opd as the binary may not have
+	    # symbols.
+	    if {[istarget powerpc64-*] && [is_lp64_target]} {
+		set test "convert entry point"
+		gdb_test_multiple "p *(void(*)(void) *) 0x$entrynohex" $test {
+		    -re " =( \\(\[^0-9\]*\\))? 0x(\[0-9a-f\]+)( < \[^\r\n\]*)?\r\n$gdb_prompt $" {
+			set entrynohex $expect_out(2,string)
+			pass $test
+		    }
 		}
 	    }
-	}
-	if {$entrynohex != ""} {
-	    gdb_test "break *0x$entrynohex" "" "break at entry point"
-	    gdb_test "continue" "\r\nBreakpoint \[0-9\]+, 0x0*$entrynohex in .*" "entry point reached"
-	}
-    } else {
-	# There is no symbol to break at ld.so.  Moreover it can exit with an
-	# error code.
-
-	set test "ld.so exit"
-	set test_displacement "seen displacement message as $displacement"
-	gdb_test_multiple "run" $test {
-	    -re "Using PIE \\(Position Independent Executable\\) displacement (0x\[0-9a-f\]+) " {
-		# Missing "$gdb_prompt $" is intentional.
-		if {$expect_out(1,string) == "0x0"} {
-		    set case "ZERO"
-		} else {
-		    set case "NONZERO"
+	    if {$entrynohex != ""} {
+		gdb_test "break *0x$entrynohex" "" "break at entry point"
+		gdb_test "continue" "\r\nBreakpoint \[0-9\]+, 0x0*$entrynohex in .*" "entry point reached"
+	    }
+	} else {
+	    # There is no symbol to break at ld.so.  Moreover it can
+	    # exit with an error code.
+
+	    set test "ld.so exit"
+	    set test_displacement "seen displacement message as $displacement"
+	    gdb_test_multiple "run" $test {
+		-re "Using PIE \\(Position Independent Executable\\) displacement (0x\[0-9a-f\]+) " {
+		    # Missing "$gdb_prompt $" is intentional.
+		    if {$expect_out(1,string) == "0x0"} {
+			set case "ZERO"
+		    } else {
+			set case "NONZERO"
+		    }
+		    if {$displacement == $case || $displacement == "PRESENT"} {
+			pass $test_displacement
+			set displacement "FOUND-$displacement"
+		    } else {
+			fail $test_displacement
+		    }
+		    exp_continue
 		}
-		if {$displacement == $case || $displacement == "PRESENT"} {
-		    pass $test_displacement
-		    set displacement "FOUND-$displacement"
-		} else {
-		    fail $test_displacement
+		-re "$inferior_exited_re (normally|with code \[0-9\]+).\r\n$gdb_prompt $" {
+		    # Do not check the binary filename as it may be truncated.
+		    pass $test
 		}
-		exp_continue
 	    }
-	    -re "$inferior_exited_re (normally|with code \[0-9\]+).\r\n$gdb_prompt $" {
-		# Do not check the binary filename as it may be truncated.
-		pass $test
+	    if ![regexp {^(NONE|FOUND-.*)$} $displacement] {
+		fail $test_displacement
 	    }
 	}
-	if ![regexp {^(NONE|FOUND-.*)$} $displacement] {
-	    fail $test_displacement
-	}
     }
-
-    set pf_prefix $old_ldprefix
 }
 
 # Create separate binaries for each testcase - to make the possible reported
 # problem reproducible after the whole test run finishes.
 
-set old_ldprefix $pf_prefix
 foreach ldprelink {NO YES} {
     foreach ldsepdebug {NO IN SEP} {
 	# Skip running the ldsepdebug test if we do not have system separate
@@ -544,160 +524,155 @@ foreach ldprelink {NO YES} {
 	# possibly unprelinked ld.so to test all the combinations for GDB.
 	set interp_saved ${interp}-saved
 
-	set pf_prefix $old_ldprefix
-	lappend pf_prefix "$ldname:"
-
-	if {$ldsepdebug == "NO"} {
-	    file_copy $interp_system $interp
-	    # Never call strip-debug before unprelink:
-	    # prelink: ...: Section .note.gnu.build-id created after prelinking
-	    if ![prelinkNO $interp] {
-		continue
-	    }
-	    strip_debug $interp
-	} elseif {$ldsepdebug == "IN" && $interp_system_debug == ""} {
-	    file_copy $interp_system $interp
-	} elseif {$ldsepdebug == "IN" && $interp_system_debug != ""} {
+	with_test_prefix "$ldname" {
+	    if {$ldsepdebug == "NO"} {
+		file_copy $interp_system $interp
+		# Never call strip-debug before unprelink:
+		# prelink: ...: Section .note.gnu.build-id created after prelinking
+		if ![prelinkNO $interp] {
+		    continue
+		}
+		strip_debug $interp
+	    } elseif {$ldsepdebug == "IN" && $interp_system_debug == ""} {
+		file_copy $interp_system $interp
+	    } elseif {$ldsepdebug == "IN" && $interp_system_debug != ""} {
 	    file_copy $interp_system $interp
-	    file_copy $interp_system_debug "${interp}.debug"
-	    # eu-unstrip: DWARF data in '...' not adjusted for prelinking bias; consider prelink -u
-	    if {![prelinkNO $interp] || ![prelinkNO "${interp}.debug"]} {
-		continue
+		file_copy $interp_system_debug "${interp}.debug"
+		# eu-unstrip: DWARF data in '...' not adjusted for prelinking bias; consider prelink -u
+		if {![prelinkNO $interp] || ![prelinkNO "${interp}.debug"]} {
+		    continue
+		}
+		set test "eu-unstrip unprelinked:[file tail $interp_system] + [file tail $interp_system_debug] to [file tail $interp]"
+		set command "exec eu-unstrip -o $interp $interp ${interp}.debug"
+		verbose -log "command is $command"
+		if [catch $command] {
+		    setup_xfail *-*-*
+		    fail $test
+		    continue
+		} else {
+		    pass $test
+		}
+	    } elseif {$ldsepdebug == "SEP" && $interp_system_debug == ""} {
+		file_copy $interp_system $interp
+		# eu-unstrip: DWARF data in '...' not adjusted for prelinking bias; consider prelink -u
+		if ![prelinkNO $interp] {
+		    continue
+		}
+		gdb_gnu_strip_debug $interp
+	    } elseif {$ldsepdebug == "SEP" && $interp_system_debug != ""} {
+		file_copy $interp_system $interp
+		file_copy $interp_system_debug "${interp}.debug"
 	    }
-	    set test "eu-unstrip unprelinked:[file tail $interp_system] + [file tail $interp_system_debug] to [file tail $interp]"
-	    set command "exec eu-unstrip -o $interp $interp ${interp}.debug"
-	    verbose -log "command is $command"
-	    if [catch $command] {
-		setup_xfail *-*-*
-		fail $test
-		continue
+
+	    if {$ldsepdebug == "SEP"} {
+		if ![prelinkNO "${interp}.debug"] {
+		    continue
+		}
 	    } else {
-		pass $test
+		file delete "${interp}.debug"
 	    }
-	} elseif {$ldsepdebug == "SEP" && $interp_system_debug == ""} {
-	    file_copy $interp_system $interp
-	    # eu-unstrip: DWARF data in '...' not adjusted for prelinking bias; consider prelink -u
-	    if ![prelinkNO $interp] {
+
+	    if ![prelink$ldprelink $interp] {
 		continue
 	    }
-	    gdb_gnu_strip_debug $interp
-	} elseif {$ldsepdebug == "SEP" && $interp_system_debug != ""} {
-	    file_copy $interp_system $interp
-	    file_copy $interp_system_debug "${interp}.debug"
-	}
+	    if {$ldprelink == "NO"} {
+		set displacement "NONZERO"
+	    } else {
+		# x86* kernel loads prelinked PIE binary at its
+		# prelinked address but ppc* kernel loads it at a
+		# random address.  prelink normally skips PIE binaries
+		# during the system scan.
+		set displacement "PRESENT"
+	    }
+	    test_ld $interp 0 [expr {$ldsepdebug == "NO"}] $displacement
 
-	if {$ldsepdebug == "SEP"} {
-	    if ![prelinkNO "${interp}.debug"] {
+	    if ![file_copy $interp $interp_saved] {
 		continue
 	    }
-	} else {
-	    file delete "${interp}.debug"
-	}
 
-	if ![prelink$ldprelink $interp] {
-	    continue
-	}
-	if {$ldprelink == "NO"} {
-	    set displacement "NONZERO"
-	} else {
-	    # x86* kernel loads prelinked PIE binary at its prelinked address
-	    # but ppc* kernel loads it at a random address.  prelink normally
-	    # skips PIE binaries during the system scan.
-	    set displacement "PRESENT"
-	}
-	test_ld $interp 0 [expr {$ldsepdebug == "NO"}] $displacement
-
-	if ![file_copy $interp $interp_saved] {
-	    continue
-	}
-	set old_binprefix $pf_prefix
-	foreach binprelink {NO YES} {
-	    foreach binsepdebug {NO IN SEP} {
-		# "ATTACH" is like "YES" but it is modified during run.
-		# It cannot be used for problem reproducibility after the
-		# testcase ends.
-		foreach binpie {NO YES ATTACH} {
-		    # This combination is not possible, non-PIE (fixed address)
-		    # binary cannot be prelinked to any (other) address.
-		    if {$binprelink == "YES" && $binpie == "NO"} {
-			continue
-		    }
-
-		    set binname "BINprelink${binprelink}debug${binsepdebug}pie${binpie}"
-		    set exec $binprefix-$binname
+	    foreach binprelink {NO YES} {
+		foreach binsepdebug {NO IN SEP} {
+		    # "ATTACH" is like "YES" but it is modified during
+		    # run.  It cannot be used for problem
+		    # reproducibility after the testcase ends.
+		    foreach binpie {NO YES ATTACH} {
+			# This combination is not possible, non-PIE (fixed address)
+			# binary cannot be prelinked to any (other) address.
+			if {$binprelink == "YES" && $binpie == "NO"} {
+			    continue
+			}
 
-		    set pf_prefix $old_binprefix
-		    lappend pf_prefix "$binname:"
+			set binname "BINprelink${binprelink}debug${binsepdebug}pie${binpie}"
+			set exec $binprefix-$binname
 
-		    set opts "ldflags=-Wl,$binfile_lib,-rpath,[file dirname $binfile_lib]"
-		    if {$binsepdebug != "NO"} {
-			lappend opts {debug}
-		    }
-		    if {$binpie != "NO"} {
-			lappend opts {additional_flags=-fPIE -pie}
-		    }
+			with_test_prefix "$binname" {
+			    set opts "ldflags=-Wl,$binfile_lib,-rpath,[file dirname $binfile_lib]"
+			    if {$binsepdebug != "NO"} {
+				lappend opts {debug}
+			    }
+			    if {$binpie != "NO"} {
+				lappend opts {additional_flags=-fPIE -pie}
+			    }
 
-		    set dir ${exec}.d
-		    set relink_args [build_executable_own_libs ${test}.exp [file tail $exec] $srcfile $opts $interp $dir]
-		    if {$relink_args == ""} {
-			continue;
-		    }
+			    set dir ${exec}.d
+			    set relink_args [build_executable_own_libs ${test}.exp [file tail $exec] $srcfile $opts $interp $dir]
+			    if {$relink_args == ""} {
+				continue;
+			    }
 
-		    if {$binsepdebug == "SEP"} {
-			gdb_gnu_strip_debug $exec
-		    }
+			    if {$binsepdebug == "SEP"} {
+				gdb_gnu_strip_debug $exec
+			    }
 
-		    if {$binpie == "NO"} {
-			set displacement "NONE"
-		    } elseif {$binprelink == "NO"} {
-			set displacement "NONZERO"
-		    } else {
-			# x86* kernel loads prelinked PIE binary at its
-			# prelinked address but ppc* kernel loads it at
-			# a random address.  prelink normally skips PIE
-			# binaries during the system scan.
-			set displacement "PRESENT"
-		    }
+			    if {$binpie == "NO"} {
+				set displacement "NONE"
+			    } elseif {$binprelink == "NO"} {
+				set displacement "NONZERO"
+			    } else {
+				# x86* kernel loads prelinked PIE binary at its prelinked
+				# address but ppc* kernel loads it at a random address.
+				# prelink normally skips PIE binaries during the system scan.
+				set displacement "PRESENT"
+			    }
 
-		    if {[prelink$binprelink $relink_args [file tail $exec]]
-		        && [file_copy $interp_saved $interp]} {
-			if {$binpie != "ATTACH"} {
-			    test_ld $exec 1 [expr {$binsepdebug == "NO"}] $displacement
-			} else {
-			    # If the file has been randomly prelinked it must
-			    # be "NONZERO".  We could see "ZERO" only if it was
-			    # unprelinked and it is now running at the same
-			    # address - which is 0 but executable can never run
-			    # at address 0.
-
-			    set displacement "NONZERO"
-			    test_attach $exec $displacement $relink_args
-
-			    # ATTACH means that executables and libraries have
-			    # been modified after they have been run.  They
-			    # cannot be reused for problem reproducibility after
-			    # the testcase ends in the ATTACH case.  Therefore
-			    # they are rather deleted not to confuse after the
-			    # run finishes.
-			    set exec_debug [system_debug_get $exec]
-			    if {$exec_debug != ""} {
-				# `file delete [glob "${exec_debug}*"]' does not work.
-				foreach f [glob "${exec_debug}*"] {
-				    file delete $f
+			    if {[prelink$binprelink $relink_args [file tail $exec]]
+				&& [file_copy $interp_saved $interp]} {
+				if {$binpie != "ATTACH"} {
+				    test_ld $exec 1 [expr {$binsepdebug == "NO"}] $displacement
+				} else {
+				    # If the file has been randomly prelinked it must be
+				    # "NONZERO".  We could see "ZERO" only if it was unprelinked
+				    # and it is now running at the same address - which is 0 but
+				    # executable can never run at address 0.
+
+				    set displacement "NONZERO"
+				    test_attach $exec $displacement $relink_args
+
+				    # ATTACH means that executables and libraries have been
+				    # modified after they have been run.  They cannot be reused
+				    # for problem reproducibility after the testcase ends in
+				    # the ATTACH case.  Therefore they are rather deleted not
+				    # to confuse after the run finishes.
+				    set exec_debug [system_debug_get $exec]
+				    if {$exec_debug != ""} {
+					# `file delete [glob "${exec_debug}*"]' does not work.
+					foreach f [glob "${exec_debug}*"] {
+					    file delete $f
+					}
+				    }
+				    file delete -force $dir
+				    # `file delete [glob "${exec}*"]' does not work.
+				    foreach f [glob "${exec}*"] {
+					file delete $f
+				    }
 				}
 			    }
-			    file delete -force $dir
-			    # `file delete [glob "${exec}*"]' does not work.
-			    foreach f [glob "${exec}*"] {
-				file delete $f
-			    }
 			}
 		    }
 		}
 	    }
-	}
 
-	file delete $interp_saved
+	    file delete $interp_saved
+	}
     }
 }
-set pf_prefix $old_ldprefix
diff --git a/gdb/testsuite/gdb.base/break-on-linker-gcd-function.exp b/gdb/testsuite/gdb.base/break-on-linker-gcd-function.exp
index 4f13999..8df6d59 100644
--- a/gdb/testsuite/gdb.base/break-on-linker-gcd-function.exp
+++ b/gdb/testsuite/gdb.base/break-on-linker-gcd-function.exp
@@ -20,10 +20,6 @@
 
 # This file is part of the gdb testsuite
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # test running programs
 #
@@ -33,7 +29,7 @@ set testfile "break-on-linker-gcd-function"
 set srcfile ${testfile}.cc
 set binfile ${objdir}/${subdir}/${testfile}
 
-if [get_compiler_info ${binfile} "c++"] {
+if [get_compiler_info "c++"] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.base/break.c b/gdb/testsuite/gdb.base/break.c
index f22cbb0..ae98eeb 100644
--- a/gdb/testsuite/gdb.base/break.c
+++ b/gdb/testsuite/gdb.base/break.c
@@ -86,10 +86,6 @@ int argc;
 char *argv[], **envp;
 #endif
 {
-#ifdef usestubs
-    set_debug_traps();  /* set breakpoint 5 here */
-    breakpoint();
-#endif
     if (argc == 12345) {  /* an unlikely value < 2^16, in case uninited */ /* set breakpoint 6 here */
 	fprintf (stderr, "usage:  factorial <number>\n");
 	return 1;
diff --git a/gdb/testsuite/gdb.base/break.exp b/gdb/testsuite/gdb.base/break.exp
index b28b85d..14e9345 100644
--- a/gdb/testsuite/gdb.base/break.exp
+++ b/gdb/testsuite/gdb.base/break.exp
@@ -115,17 +115,9 @@ gdb_test "break multi_line_while_conditional" \
     "Breakpoint.*at.* file .*$srcfile, line $bp_location4\\." \
     "breakpoint at start of multi line while conditional"
 
-set bp_location5 [gdb_get_line_number "set breakpoint 5 here"]
 set bp_location6 [gdb_get_line_number "set breakpoint 6 here"]
 
-#
-# check to see what breakpoints are set
-#
-if [target_info exists gdb_stub] {
-    set main_line $bp_location5
-} else {
-    set main_line $bp_location6
-}
+set main_line $bp_location6
 
 if {$hp_aCC_compiler} {
     set proto "\\(int\\)"
@@ -362,9 +354,6 @@ gdb_test "disable \$1foo" \
 # handle arguments.
 # Huh? There doesn't *appear* to be anything that passes arguments
 # below.
-if [istarget "mips-idt-*"] then {
-    return
-}
 
 #
 # run until the breakpoint at main is hit. For non-stubs-using targets.
@@ -382,6 +371,13 @@ gdb_expect {
     }
 }
 
+# Test the 'list' commands sets current file for the 'break LINENO' command.
+set bp_marker1 [gdb_get_line_number "set breakpoint 16 here" ${srcfile1}]
+gdb_test "list marker1" ".*"
+gdb_test "break $bp_marker1" "Breakpoint \[0-9\]+ at 0x\[0-9a-f\]+: file .*${srcfile1}, line ${bp_marker1}\\." \
+         "break lineno"
+gdb_test_no_output {delete $bpnum}
+
 #
 # run until the breakpoint at a line number
 #
@@ -582,14 +578,7 @@ gdb_test_multiple "break $bp_location1" \
 	}
     }
 
-send_gdb "commands $expect_out(1,string)\n"
-send_gdb "silent\n"
-send_gdb "end\n"
-gdb_expect {
-  -re ".*$gdb_prompt $"\
-          {pass "set silent break bp_location1"}
-  timeout {fail "(timeout) set silent break bp_location1"}
-}
+gdb_test "commands $expect_out(1,string)\nsilent\nend" ">end" "set silent break bp_location1"
 
 gdb_test "info break $expect_out(1,string)" \
     "\[0-9\]*\[ \t\]*breakpoint.*:$bp_location1\r\n\[ \t\]*silent.*" \
@@ -618,7 +607,7 @@ gdb_test "break $bp_location12 thread foo" \
 # trailing garbage.
 #
 gdb_test "break $bp_location12 foo" \
-    "Junk at end of arguments.*" \
+    "malformed linespec error: unexpected string, \"foo\".*" \
     "breakpoint with trailing garbage disallowed"
 
 # Verify that GDB responds gracefully to a "clear" command that has
diff --git a/gdb/testsuite/gdb.base/call-ar-st.exp b/gdb/testsuite/gdb.base/call-ar-st.exp
index d0a0e86..0643210 100644
--- a/gdb/testsuite/gdb.base/call-ar-st.exp
+++ b/gdb/testsuite/gdb.base/call-ar-st.exp
@@ -16,10 +16,6 @@
 # This file was written by Elena Zannoni (ezannoni at cygnus.com)
 
 
-if $tracelevel then {
-        strace $tracelevel
-}
-
 
 set testfile "call-ar-st"
 set srcfile ${testfile}.c
@@ -39,7 +35,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
@@ -165,7 +161,7 @@ if {![gdb_skip_float_test "continuing to breakpoint 1220"] && \
 
 #step
 gdb_test "step" \
-    "print_all_arrays \\(array_i=, array_c=.ZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZa., array_f=, array_d=\\) at .*call-ar-st.c:306\[ \t\r\n\]+306.*print_int_array\\(array_i\\);.*" \
+    "print_all_arrays \\(array_i=<integer_array.*>, array_c=<char_array.*> .ZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZa., array_f=<float_array.*>, array_d=<double_array.*>\\) at .*call-ar-st.c:306\[ \t\r\n\]+306.*print_int_array\\(array_i\\);.*" \
     "step inside print_all_arrays"
 
 #step -over
diff --git a/gdb/testsuite/gdb.base/call-rt-st.exp b/gdb/testsuite/gdb.base/call-rt-st.exp
index 078369a..6db6cfd 100644
--- a/gdb/testsuite/gdb.base/call-rt-st.exp
+++ b/gdb/testsuite/gdb.base/call-rt-st.exp
@@ -20,10 +20,6 @@
 
 
 
-if $tracelevel then {
-        strace $tracelevel
-}
-
 
 set testfile "call-rt-st"
 set srcfile ${testfile}.c
@@ -45,7 +41,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.base/call-sc.c b/gdb/testsuite/gdb.base/call-sc.c
index d00866d..b4af7b1 100644
--- a/gdb/testsuite/gdb.base/call-sc.c
+++ b/gdb/testsuite/gdb.base/call-sc.c
@@ -58,10 +58,6 @@ zed ()
 
 int main()
 {
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
   int i;
 
   Fun(foo);	
diff --git a/gdb/testsuite/gdb.base/call-sc.exp b/gdb/testsuite/gdb.base/call-sc.exp
index fda75f2..1b2a495 100644
--- a/gdb/testsuite/gdb.base/call-sc.exp
+++ b/gdb/testsuite/gdb.base/call-sc.exp
@@ -18,10 +18,6 @@
 # Test "return", "finish", and "call" of functions that a scalar (int,
 # float, enum) and/or take a single scalar parameter.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 # Some targets can't call functions, so don't even bother with this
 # test.
@@ -39,7 +35,7 @@ set binfile ${objdir}/${subdir}/${testfile}
 # Create and source the file that provides information about the
 # compiler used to compile the test case.
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.base/call-signal-resume.exp b/gdb/testsuite/gdb.base/call-signal-resume.exp
index 9c67941..2baa3f6 100644
--- a/gdb/testsuite/gdb.base/call-signal-resume.exp
+++ b/gdb/testsuite/gdb.base/call-signal-resume.exp
@@ -20,10 +20,6 @@
 # 2) Inferior is stopped at a signal.  Upon resumption it should continue
 #    with that signal, regardless of whatever the hand-called function did.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if [target_info exists gdb,noinferiorio] {
     verbose "Skipping call-signal-resume.exp because of no fileio capabilities."
     continue
@@ -103,7 +99,19 @@ if { "$frame_number" == "" } {
 # Pop the dummy frame.
 gdb_test "frame $frame_number" ".*"
 gdb_test_no_output "set confirm off"
-gdb_test_no_output "return"
+gdb_test "return" ""
+
+# Verify there are no remains of the dummy frame.
+gdb_test_no_output "maintenance print dummy-frames"
+set test "maintenance info breakpoints"
+gdb_test_multiple $test $test {
+    -re " call dummy .*\r\n$gdb_prompt $" {
+	fail $test
+    }
+    -re "\r\n$gdb_prompt $" {
+	pass $test
+    }
+}
 
 # Resume execution, the program should continue without any signal.
 
@@ -136,7 +144,7 @@ if { "$frame_number" == "" } {
 # Pop the dummy frame.
 gdb_test "frame $frame_number" ".*"
 gdb_test_no_output "set confirm off"
-gdb_test_no_output "return"
+gdb_test "return" ""
 
 # Continue again, this time we should get to the signal handler.
 
diff --git a/gdb/testsuite/gdb.base/call-signals.c b/gdb/testsuite/gdb.base/call-signals.c
index 1a13565..42ae8d7 100644
--- a/gdb/testsuite/gdb.base/call-signals.c
+++ b/gdb/testsuite/gdb.base/call-signals.c
@@ -58,11 +58,6 @@ null_hand_call ()
 int
 main ()
 {
-#ifdef usestubs
-  set_debug_traps ();
-  breakpoint ();
-#endif
-
 #ifdef SIG_SETMASK
   /* Ensure all the signals aren't blocked.
      The environment in which the testsuite is run may have blocked some
diff --git a/gdb/testsuite/gdb.base/call-strs.exp b/gdb/testsuite/gdb.base/call-strs.exp
index 6d96fcf..7c5c46e 100644
--- a/gdb/testsuite/gdb.base/call-strs.exp
+++ b/gdb/testsuite/gdb.base/call-strs.exp
@@ -22,10 +22,6 @@
 
 #debug strarg
 
-if $tracelevel then {
-        strace $tracelevel
-}
-
 
 set testfile "call-strs"
 set srcfile ${testfile}.c
@@ -60,6 +56,7 @@ gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
 gdb_test_no_output "set print sevenbit-strings"
 gdb_test_no_output "set print address off"
+gdb_test_no_output "set print symbol off"
 gdb_test_no_output "set width 0"
 
 if ![runto_main] then {
diff --git a/gdb/testsuite/gdb.base/callexit.exp b/gdb/testsuite/gdb.base/callexit.exp
index 50c50ea..c4d1ec5 100644
--- a/gdb/testsuite/gdb.base/callexit.exp
+++ b/gdb/testsuite/gdb.base/callexit.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile "callexit"
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/callfuncs.c b/gdb/testsuite/gdb.base/callfuncs.c
index 125dd39..7fb5061 100644
--- a/gdb/testsuite/gdb.base/callfuncs.c
+++ b/gdb/testsuite/gdb.base/callfuncs.c
@@ -641,15 +641,18 @@ struct struct_with_fnptr function_struct = { doubleit };
 
 struct struct_with_fnptr *function_struct_ptr = &function_struct;
 
+int *
+voidfunc (void)
+{
+  static int twentythree = 23;
+  return &twentythree;
+}
+
 /* Gotta have a main to be able to generate a linked, runnable
    executable, and also provide a useful place to set a breakpoint. */
 
 int main ()
 {
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
   malloc(1);
   t_double_values(double_val1, double_val2);
   t_structs_c(struct_val1);
diff --git a/gdb/testsuite/gdb.base/callfuncs.exp b/gdb/testsuite/gdb.base/callfuncs.exp
index 765be20..daaad1a 100644
--- a/gdb/testsuite/gdb.base/callfuncs.exp
+++ b/gdb/testsuite/gdb.base/callfuncs.exp
@@ -16,10 +16,6 @@
 # This file was written by Fred Fish. (fnf at cygnus.com)
 # and modified by Bob Manson. (manson at cygnus.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 set testfile "callfuncs"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
@@ -37,7 +33,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable $com
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
@@ -261,7 +257,7 @@ proc do_function_calls {} {
 	    "call inferior func with struct - returns long double _Complex"
     }
 
-    gdb_test "p t_structs_a(struct_val1)" "= (.unsigned char .. )?\"foo\"" \
+    gdb_test "p t_structs_a(struct_val1)" "= (.unsigned char .. )?<buf.*> \"foo\"" \
     	"call inferior func with struct - returns char *"
 }
 
@@ -543,3 +539,6 @@ if {![target_info exists gdb,nosignals] && ![istarget "*-*-uclinux*"]} {
 # handling vs. local labels `.L'... as `Lcallfunc' starts with `L'.
 
 gdb_test "print callfunc (Lcallfunc, 5)" " = 12"
+
+# Regression test for function pointer cast.
+gdb_test "print *((int *(*) (void)) voidfunc)()" " = 23"
diff --git a/gdb/testsuite/gdb.base/catch-load-so.c b/gdb/testsuite/gdb.base/catch-load-so.c
new file mode 100644
index 0000000..9676479
--- /dev/null
+++ b/gdb/testsuite/gdb.base/catch-load-so.c
@@ -0,0 +1,22 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+int
+f(void)
+{
+  return 23;
+}
diff --git a/gdb/testsuite/gdb.base/catch-load.c b/gdb/testsuite/gdb.base/catch-load.c
new file mode 100644
index 0000000..170f581
--- /dev/null
+++ b/gdb/testsuite/gdb.base/catch-load.c
@@ -0,0 +1,35 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <dlfcn.h>
+#include <stdio.h>
+
+/* This is updated by the .exp file.  */
+char *libname = "catch-load-so.so";
+
+int
+main ()
+{
+  void *h;
+
+  h = dlopen (libname, RTLD_LAZY);
+
+  dlclose (h);
+
+  h = NULL;			/* final breakpoint here */
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.base/catch-load.exp b/gdb/testsuite/gdb.base/catch-load.exp
new file mode 100644
index 0000000..97fe7d1
--- /dev/null
+++ b/gdb/testsuite/gdb.base/catch-load.exp
@@ -0,0 +1,113 @@
+# Copyright 2012 Free Software Foundation, Inc.
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+#
+
+if {[skip_shlib_tests]} {
+    untested catch-load.exp
+    return -1
+}
+
+if {[get_compiler_info]} {
+    warning "Could not get compiler info"
+    untested catch-load.exp
+    return -1
+}
+
+set testfile catch-load
+set srcfile ${testfile}.c
+set binfile ${objdir}/${subdir}/${testfile}
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug shlib_load}] != "" } {
+    untested catch-load.exp
+    return -1
+}
+
+set testfile2 catch-load-so
+set srcfile2 ${testfile2}.c
+set binfile2 ${objdir}/${subdir}/${testfile2}.so
+set binfile2_dlopen [shlib_target_file ${testfile2}.so]
+if { [gdb_compile_shlib "${srcdir}/${subdir}/${srcfile2}" ${binfile2} {debug}] != "" } {
+    untested catch-load.exp
+    return -1
+}
+
+# Run one set of tests.
+# SCENARIO is the name of the test scenario, it is just used in test
+# names.
+# KIND is passed to the "catch" command.
+# MATCH is a boolean saying whether we expect the catchpoint to be hit.
+proc one_catch_load_test {scenario kind match sostop} { with_test_prefix "${scenario}" {
+    global verbose testfile testfile2 binfile2 binfile2_dlopen
+    global srcfile
+    global decimal gdb_prompt
+
+    clean_restart $testfile
+    gdb_load_shlibs $binfile2
+
+    if {![runto_main]} {
+	fail "can't run to main"
+	return
+    }
+
+    gdb_breakpoint [gdb_get_line_number "final breakpoint here"]
+    gdb_test_no_output "set var libname = \"$binfile2_dlopen\""
+    gdb_test_no_output "set stop-on-solib-events $sostop"
+    gdb_test "catch $kind" "Catchpoint $decimal \\(.*\\)"
+
+    gdb_test_multiple "continue" "continue" {
+	-re "Catchpoint $decimal\r\n.*loaded .*/$testfile2.*\r\n.*$gdb_prompt $" {
+	    if {$match} {
+		pass "continue"
+	    } else {
+		fail "continue"
+	    }
+	}
+
+	-re "Stopped due to shared library event.*\r\n$gdb_prompt $" {
+	    if {$sostop} {
+		pass "continue"
+	    } else {
+		fail "continue"
+	    }
+	}
+
+	-re "Breakpoint $decimal, .*\r\n$gdb_prompt $" {
+	    if {!$match} {
+		pass "continue"
+	    } else {
+		fail "continue"
+	    }
+	}
+
+	-re ".*$gdb_prompt $" {
+	    fail "continue"
+	}
+    }
+}}
+
+one_catch_load_test "plain load" "load" 1 0
+one_catch_load_test "plain load with stop-on-solib-events" "load" 1 1
+one_catch_load_test "rx load" "load $testfile2" 1 0
+one_catch_load_test "rx load with stop-on-solib-events" "load $testfile2" 1 1
+one_catch_load_test "non-matching load" "load zardoz" 0 0
+one_catch_load_test "non-matching load with stop-on-solib-events" \
+    "load zardoz" 0 1
+
+one_catch_load_test "plain unload" "unload" 1 0
+one_catch_load_test "plain unload with stop-on-solib-events" "unload" 1 1
+one_catch_load_test "rx unload" "unload $testfile2" 1 0
+one_catch_load_test "rx unload with stop-on-solib-events" \
+    "unload $testfile2" 1 1
+one_catch_load_test "non-matching unload" "unload zardoz" 0 0
+one_catch_load_test "non-matching unload with stop-on-solib-events" \
+    "unload zardoz" 0 1
diff --git a/gdb/testsuite/gdb.base/catch-syscall.exp b/gdb/testsuite/gdb.base/catch-syscall.exp
index 1a7a605..9054cfe 100644
--- a/gdb/testsuite/gdb.base/catch-syscall.exp
+++ b/gdb/testsuite/gdb.base/catch-syscall.exp
@@ -24,6 +24,20 @@ if { [is_remote target] || ![isnative] } then {
     continue
 }
 
+# Until "catch syscall" is implemented on other targets...
+if {![istarget "hppa*-hp-hpux*"] && ![istarget "*-linux*"]} then {
+    continue
+}
+
+# This shall be updated whenever 'catch syscall' is implemented
+# on some architecture.
+#if { ![istarget "i\[34567\]86-*-linux*"]
+if { ![istarget "x86_64-*-linux*"] && ![istarget "i\[34567\]86-*-linux*"]
+     && ![istarget "powerpc-*-linux*"] && ![istarget "powerpc64-*-linux*"]
+     && ![istarget "sparc-*-linux*"] && ![istarget "sparc64-*-linux*"]
+     && ![istarget "mips*-linux*"] } {
+     continue
+}
 
 global srcfile
 set testfile "catch-syscall"
@@ -44,21 +58,6 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
      return -1
 }
 
-# Until "catch syscall" is implemented on other targets...
-if {![istarget "hppa*-hp-hpux*"] && ![istarget "*-linux*"]} then {
-    continue
-}
-
-# This shall be updated whenever 'catch syscall' is implemented
-# on some architecture.
-#if { ![istarget "i\[34567\]86-*-linux*"]
-if { ![istarget "x86_64-*-linux*"] && ![istarget "i\[34567\]86-*-linux*"]
-     && ![istarget "powerpc-*-linux*"] && ![istarget "powerpc64-*-linux*"]
-     && ![istarget "sparc-*-linux*"] && ![istarget "sparc64-*-linux*"]
-     && ![istarget "mips*-linux*"] } {
-     continue
-}
-
 # Internal procedure used to check if, after issuing a 'catch syscall'
 # command (without arguments), the 'info breakpoints' command displays
 # that '"any syscall"' is to be caught.
diff --git a/gdb/testsuite/gdb.base/charset.c b/gdb/testsuite/gdb.base/charset.c
index ea9b731..21290df 100644
--- a/gdb/testsuite/gdb.base/charset.c
+++ b/gdb/testsuite/gdb.base/charset.c
@@ -123,10 +123,6 @@ extern void malloc_stub (void);
 
 int main ()
 {
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
 
   malloc_stub ();
 
diff --git a/gdb/testsuite/gdb.base/charset.exp b/gdb/testsuite/gdb.base/charset.exp
index 651633b..27e36d6 100644
--- a/gdb/testsuite/gdb.base/charset.exp
+++ b/gdb/testsuite/gdb.base/charset.exp
@@ -20,10 +20,6 @@
 
 # Test GDB's character set support.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile "charset"
 set srcfile ${testfile}.c
@@ -608,7 +604,7 @@ gdb_test "print 'a' == 'a' || 'b' == 'b'" \
 
 proc string_display { var_name set_prefix x_size x_type} {
   gdb_test_no_output "set ${var_name} = ${set_prefix}\"Test String\\0with zeroes\"" "Assign ${var_name} with prefix ${set_prefix}"
-  gdb_test "x /2${x_size}s ${var_name}" ".* ${x_type}\"Test String\"\[\r\n\]+.* ${x_type}\"with zeroes\"" "Display String ${var_name} with x/${x_size}s"
+  gdb_test "x /2${x_size}s ${var_name}" ".*\t${x_type}\"Test String\"\[\r\n\]+.*\t${x_type}\"with zeroes\"" "Display String ${var_name} with x/${x_size}s"
 }
 
 if {$ucs2_ok} {
diff --git a/gdb/testsuite/gdb.base/checkpoint.exp b/gdb/testsuite/gdb.base/checkpoint.exp
index 2aec424..fabe39d 100644
--- a/gdb/testsuite/gdb.base/checkpoint.exp
+++ b/gdb/testsuite/gdb.base/checkpoint.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
 if { [is_remote target] || ![isnative] } then {
     continue
 }
diff --git a/gdb/testsuite/gdb.base/chng-syms.exp b/gdb/testsuite/gdb.base/chng-syms.exp
index dac3008..9c20a44 100644
--- a/gdb/testsuite/gdb.base/chng-syms.exp
+++ b/gdb/testsuite/gdb.base/chng-syms.exp
@@ -18,17 +18,6 @@
 # Test that GDB cleans up properly after errors that result when a 
 # breakpoint is reset. 
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
-
-# IDT/SIM apparently doesn't have enough file descriptors to allow the
-# problem checked by this test to occur.
-if [istarget "mips-idt-*"] {
-    return 0;
-}
-
 set testfile "chng-syms"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
diff --git a/gdb/testsuite/gdb.base/code-expr.exp b/gdb/testsuite/gdb.base/code-expr.exp
index 0cf4a73..fe95305 100644
--- a/gdb/testsuite/gdb.base/code-expr.exp
+++ b/gdb/testsuite/gdb.base/code-expr.exp
@@ -18,10 +18,6 @@
 # This file is part of the gdb testsuite
 # Tests for type expressions using the new "@code" and "@data" modifiers.
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 #
 # test running programs
 #
@@ -40,10 +36,6 @@ gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
 
-if [target_info exists gdb_stub] {
-    gdb_step_for_stub;
-}
-
 gdb_test_no_output "set print sevenbit-strings"
 gdb_test_no_output "set print address off"
 gdb_test_no_output "set width 0"
diff --git a/gdb/testsuite/gdb.base/code_elim.exp b/gdb/testsuite/gdb.base/code_elim.exp
index 7369a9c..9779534 100644
--- a/gdb/testsuite/gdb.base/code_elim.exp
+++ b/gdb/testsuite/gdb.base/code_elim.exp
@@ -16,10 +16,6 @@
 # code_elim.exp -- tests that GDB can handle executables where some data/code
 #                  has been eliminated by the linker.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 set testfile1 code_elim1
 set testfile2 code_elim2
 set srcfile1 ${testfile1}.c
@@ -99,16 +95,16 @@ proc test_eliminated_var { var } {
 gdb_exit
 gdb_start
 
-gdb_test "add-symbol-file ${binfile1} 0x100000" \
+gdb_test "symbol-file ${binfile1}" \
 	"Reading symbols from .*${testfile1}\\.\\.\\.done\\.(|\r\nUsing host libthread_db library .*libthread_db.so.*\\.)" \
-	"add-symbol-file ${testfile1} 0x100000" \
-	"add symbol table from file \".*${testfile1}\" at\[ \t\r\n\]+\.text_addr = 0x100000\[\r\n\]+\\(y or n\\) " \
-	"y"
+	"symbol-file ${testfile1}"
 
-test_eliminated_var my_global_symbol
-test_eliminated_var my_static_symbol
-test_eliminated_var my_global_func
-not_null_var_address main
+with_test_prefix "single psymtabs" {
+    test_eliminated_var my_global_symbol
+    test_eliminated_var my_static_symbol
+    test_eliminated_var my_global_func
+    not_null_var_address main
+}
 
 # Same thing for symtabs
 
@@ -119,10 +115,12 @@ set GDBFLAGS "$GDBFLAGS --readnow $binfile1"
 gdb_start
 set GDBFLAGS $saved_gdbflags
 
-test_eliminated_var my_global_symbol
-test_eliminated_var my_static_symbol
-test_eliminated_var my_global_func
-not_null_var_address main
+with_test_prefix "single symtabs" {
+    test_eliminated_var my_global_symbol
+    test_eliminated_var my_static_symbol
+    test_eliminated_var my_global_func
+    not_null_var_address main
+}
 
 # binfile2 contains the symbols that have been eliminated in binfile1. Check
 # the eliminated symbols does not hide these valid ones.
@@ -130,43 +128,45 @@ not_null_var_address main
 gdb_exit
 gdb_start
 
-gdb_test "add-symbol-file ${binfile1} 0x100000" \
-	"Reading symbols from .*${testfile1}\\.\\.\\.done\\." \
-	"add-symbol-file ${testfile1} 0x100000" \
-	"add symbol table from file \".*${testfile1}\" at\[ \t\r\n\]+\.text_addr = 0x100000\[\r\n\]+\\(y or n\\) " \
-	"y"
-
-gdb_test "add-symbol-file ${binfile2} 0x200000" \
-	"Reading symbols from .*${testfile2}\\.\\.\\.done\\." \
-	"add-symbol-file ${testfile2} 0x200000" \
-	"add symbol table from file \".*${testfile2}\" at\[ \t\r\n\]+\.text_addr = 0x200000\[\r\n\]+\\(y or n\\) " \
-	"y"
-
-not_null_var_address my_global_symbol
-not_null_var_address my_static_symbol
-not_null_var_address my_global_func
-not_null_var_address main
+with_test_prefix "order1" {
+    gdb_test "add-symbol-file ${binfile1} 0x100000 -s .bss 0x120000" \
+	    "Reading symbols from .*${testfile1}\\.\\.\\.done\\." \
+	    "add-symbol-file ${testfile1} 0x100000" \
+	    "add symbol table from file \".*${testfile1}\" at.*\\(y or n\\) " \
+	    "y"
+
+    gdb_test "add-symbol-file ${binfile2} 0x200000 -s .data 0x210000 -s .bss 0x220000" \
+	    "Reading symbols from .*${testfile2}\\.\\.\\.done\\." \
+	    "add-symbol-file ${testfile2} 0x200000" \
+	    "add symbol table from file \".*${testfile2}\" at.*\\(y or n\\) " \
+	    "y"
+
+    not_null_var_address my_global_symbol
+    not_null_var_address my_static_symbol
+    not_null_var_address my_global_func
+    not_null_var_address main
+}
 
 # Same thing, but loading binfile2 before binfile1.
 
 gdb_exit
 gdb_start
 
-gdb_test "add-symbol-file ${binfile2} 0x200000" \
-	"Reading symbols from .*${testfile2}\\.\\.\\.done\\." \
-	"add-symbol-file ${testfile2} 0x200000" \
-	"add symbol table from file \".*${testfile2}\" at\[ \t\r\n\]+\.text_addr = 0x200000\[\r\n\]+\\(y or n\\) " \
-	"y"
-
-gdb_test "add-symbol-file ${binfile1} 0x100000" \
-	"Reading symbols from .*${testfile1}\\.\\.\\.done\\." \
-	"add-symbol-file ${testfile1} 0x100000" \
-	"add symbol table from file \".*${testfile1}\" at\[ \t\r\n\]+\.text_addr = 0x100000\[\r\n\]+\\(y or n\\) " \
-	"y"
-
-not_null_var_address my_global_symbol
-not_null_var_address my_static_symbol
-not_null_var_address my_global_func
-not_null_var_address main
-
-
+with_test_prefix "order2" {
+    gdb_test "add-symbol-file ${binfile2} 0x200000 -s .data 0x210000 -s .bss 0x220000" \
+	    "Reading symbols from .*${testfile2}\\.\\.\\.done\\." \
+	    "add-symbol-file ${testfile2} 0x200000" \
+	    "add symbol table from file \".*${testfile2}\" at.*\\(y or n\\) " \
+	    "y"
+
+    gdb_test "add-symbol-file ${binfile1} 0x100000 -s .bss 0x120000" \
+	    "Reading symbols from .*${testfile1}\\.\\.\\.done\\." \
+	    "add-symbol-file ${testfile1} 0x100000" \
+	    "add symbol table from file \".*${testfile1}\" at.*\\(y or n\\) " \
+	    "y"
+
+    not_null_var_address my_global_symbol
+    not_null_var_address my_static_symbol
+    not_null_var_address my_global_func
+    not_null_var_address main
+}
diff --git a/gdb/testsuite/gdb.base/commands.exp b/gdb/testsuite/gdb.base/commands.exp
index b44402e..e26dac0 100644
--- a/gdb/testsuite/gdb.base/commands.exp
+++ b/gdb/testsuite/gdb.base/commands.exp
@@ -14,10 +14,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # test special commands (if, while, etc)
 #
@@ -318,7 +314,7 @@ proc watchpoint_command_test {} {
 	    # scope.
 	    fail $test
 	}
- 	-re "Continuing.*\[Ww\]atchpoint $wp_id deleted because the program has left the block in.*which its expression is valid.*run.c:(57|82).*$gdb_prompt $" {
+	-re "Continuing.*\[Ww\]atchpoint $wp_id deleted because the program has left the block in.*which its expression is valid.*run.c:(53|77).*$gdb_prompt $" {
 	    pass $test
 	}
    }
diff --git a/gdb/testsuite/gdb.base/completion.exp b/gdb/testsuite/gdb.base/completion.exp
index db24d90..9b9459c 100644
--- a/gdb/testsuite/gdb.base/completion.exp
+++ b/gdb/testsuite/gdb.base/completion.exp
@@ -46,12 +46,6 @@
 #
 
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
-
-global usestubs
 
 #
 # test running programs
@@ -77,7 +71,7 @@ if  { [gdb_compile "${binfile}0.o ${binfile}1.o" "${binfile}" executable {debug
      return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.base/complex.exp b/gdb/testsuite/gdb.base/complex.exp
index 1de9a93..2ce60f1 100644
--- a/gdb/testsuite/gdb.base/complex.exp
+++ b/gdb/testsuite/gdb.base/complex.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile complex
 set srcfile ${testfile}.c
@@ -32,7 +28,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable $opt
 
 # Start with a fresh gdb.
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/cond-eval-mode.exp b/gdb/testsuite/gdb.base/cond-eval-mode.exp
new file mode 100644
index 0000000..965c497
--- /dev/null
+++ b/gdb/testsuite/gdb.base/cond-eval-mode.exp
@@ -0,0 +1,44 @@
+#   Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Test 'set breakpoint condition-evaluation' settings
+
+if { [prepare_for_testing break.exp "break" {break.c break1.c}] } {
+    return -1
+}
+
+runto main
+
+set test_host "set breakpoint condition-evaluation host"
+set test_auto "set breakpoint condition-evaluation auto"
+set test_target "set breakpoint condition-evaluation target"
+
+gdb_test_no_output $test_host
+gdb_test_no_output $test_auto
+
+# If target-side condition evaluation is not supported, this warning will be
+# displayed.
+set warning "warning: Target does not support breakpoint condition evaluation.\r\nUsing host evaluation mode instead.\r\n"
+
+gdb_test_multiple $test_target $test_target {
+    -re "$warning$gdb_prompt $" {
+	unsupported $test_target
+	return -1
+    }
+
+    -re "^$test_target\r\n$gdb_prompt $" {
+	pass $test_target
+    }
+}
diff --git a/gdb/testsuite/gdb.base/cond-expr.exp b/gdb/testsuite/gdb.base/cond-expr.exp
index e9d61ba..9b51034 100644
--- a/gdb/testsuite/gdb.base/cond-expr.exp
+++ b/gdb/testsuite/gdb.base/cond-expr.exp
@@ -27,10 +27,6 @@
 #
 
 
-if $tracelevel then {
-        strace $tracelevel
-}
-
 # Check to see if we have an executable to test.  If not, then either we
 # haven't tried to compile one, or the compilation failed for some reason.
 # In either case, just notify the user and skip the tests in this file.
diff --git a/gdb/testsuite/gdb.base/condbreak.exp b/gdb/testsuite/gdb.base/condbreak.exp
index 7f09094..e8e0d84 100644
--- a/gdb/testsuite/gdb.base/condbreak.exp
+++ b/gdb/testsuite/gdb.base/condbreak.exp
@@ -17,12 +17,6 @@
 # Purpose is to test conditional breakpoints.
 # Modeled after "break.exp".
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
-global usestubs
-
 #
 # test running programs
 #
@@ -47,7 +41,7 @@ if  { [gdb_compile "${binfile}0.o ${binfile}1.o" "${binfile}" executable {debug
      return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
@@ -57,10 +51,6 @@ gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
 
 
-if [target_info exists gdb_stub] {
-    gdb_step_for_stub;
-}
-
 set bp_location1  [gdb_get_line_number "set breakpoint 1 here"]
 set bp_location6  [gdb_get_line_number "set breakpoint 6 here"]
 set bp_location8  [gdb_get_line_number "set breakpoint 8 here" $srcfile1]
@@ -271,3 +261,8 @@ gdb_test_multiple "continue" $test {
 	xfail $test
     }
 }
+
+gdb_test "complete cond 1" "cond 1"
+gdb_test "set variable \$var = 1"
+gdb_test "complete cond \$v" "cond \\\$var"
+gdb_test "complete cond 1 values\[0\].a" "cond 1 values.0..a_field"
diff --git a/gdb/testsuite/gdb.base/consecutive.c b/gdb/testsuite/gdb.base/consecutive.c
index bfea429..7d0cea9 100644
--- a/gdb/testsuite/gdb.base/consecutive.c
+++ b/gdb/testsuite/gdb.base/consecutive.c
@@ -12,9 +12,5 @@ int foo ()
 
 main()
 {
-#ifdef usestubs
-    set_debug_traps ();
-    breakpoint ();
-#endif
   foo ();
 }
diff --git a/gdb/testsuite/gdb.base/consecutive.exp b/gdb/testsuite/gdb.base/consecutive.exp
index 973189b..5036274 100644
--- a/gdb/testsuite/gdb.base/consecutive.exp
+++ b/gdb/testsuite/gdb.base/consecutive.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Michael Snyder. (msnyder at redhat.com)
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # Test breakpoints at consecutive instruction addresses.
 #
@@ -33,7 +29,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
     return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
@@ -42,10 +38,6 @@ gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
 
-if [target_info exists gdb_stub] {
-    gdb_step_for_stub;
-}
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint"
     continue
diff --git a/gdb/testsuite/gdb.base/constvars.c b/gdb/testsuite/gdb.base/constvars.c
index 289b8e7..4228822 100644
--- a/gdb/testsuite/gdb.base/constvars.c
+++ b/gdb/testsuite/gdb.base/constvars.c
@@ -191,10 +191,6 @@ main (void)
   const char           & radiation = laconic;
   volatile signed char & remuneration = lemonade;
   */
-#ifdef usestubs
-  set_debug_traps ();
-  breakpoint ();
-#endif
   marker1 ();
     
 
diff --git a/gdb/testsuite/gdb.base/constvars.exp b/gdb/testsuite/gdb.base/constvars.exp
index e5d64bd..eb8f024 100644
--- a/gdb/testsuite/gdb.base/constvars.exp
+++ b/gdb/testsuite/gdb.base/constvars.exp
@@ -23,10 +23,6 @@
 #           const pointers to const vars
 # with mixed types
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # test running programs
 #
@@ -37,7 +33,7 @@ set binfile ${objdir}/${subdir}/${testfile}
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.base/corefile.exp b/gdb/testsuite/gdb.base/corefile.exp
index a91efd1..b9fc7dc 100644
--- a/gdb/testsuite/gdb.base/corefile.exp
+++ b/gdb/testsuite/gdb.base/corefile.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Fred Fish. (fnf at cygnus.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 # are we on a target board
 if ![isnative] then {
@@ -35,7 +31,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.base/ctxobj-f.c b/gdb/testsuite/gdb.base/ctxobj-f.c
new file mode 100644
index 0000000..56d1aba
--- /dev/null
+++ b/gdb/testsuite/gdb.base/ctxobj-f.c
@@ -0,0 +1,32 @@
+/* This testcase is part of GDB, the GNU debugger.
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+extern int this_version_num;
+
+#ifndef GET_VERSION
+#error GET_VERSION macro is undefined
+#endif
+
+int
+GET_VERSION (void)
+{
+  int v = this_version_num;
+
+  if (v > 999)
+    v = 999;
+
+  return v;  /* STOP */
+}
diff --git a/gdb/testsuite/gdb.base/ctxobj-m.c b/gdb/testsuite/gdb.base/ctxobj-m.c
new file mode 100644
index 0000000..9771001
--- /dev/null
+++ b/gdb/testsuite/gdb.base/ctxobj-m.c
@@ -0,0 +1,37 @@
+/* This testcase is part of GDB, the GNU debugger.
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+extern int get_version_1 (void);
+extern int get_version_2 (void);
+
+int
+main (void)
+{
+  int v1 = get_version_1 ();
+  int v2 = get_version_2 ();
+
+  if (v1 != 104)
+    return 1;
+
+  /* The value returned by get_version_2 depends on the target.
+     On GNU/Linux, for instance, it should return 104.  But on
+     x86-windows, for instance, it will return 203.  */
+  if (v2 != 104 && v2 != 203)
+    return 2;
+
+  return 0;
+}
+
diff --git a/gdb/testsuite/gdb.base/ctxobj-v.c b/gdb/testsuite/gdb.base/ctxobj-v.c
new file mode 100644
index 0000000..6d3a8d0
--- /dev/null
+++ b/gdb/testsuite/gdb.base/ctxobj-v.c
@@ -0,0 +1,21 @@
+/* This testcase is part of GDB, the GNU debugger.
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef VERSION
+#error VERSION macro is not defined.
+#endif
+
+int this_version_num = VERSION;
diff --git a/gdb/testsuite/gdb.base/ctxobj.exp b/gdb/testsuite/gdb.base/ctxobj.exp
new file mode 100644
index 0000000..b41ed38
--- /dev/null
+++ b/gdb/testsuite/gdb.base/ctxobj.exp
@@ -0,0 +1,110 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+set executable ctxobj-m
+
+# The sources used to build two shared libraries (SO).  We use the exact
+# same sources to build both SOs, but differentiate them through the use
+# of macros defined when calling the compiler.
+#
+# We need two source files per SO, because we need to test the situation
+# where we are trying to print the value of a global variable defined
+# in that SO while the variable's associated symtab has not been created
+# yet.
+set libsrc [list "${srcdir}/${subdir}/ctxobj-v.c" \
+                 "${srcdir}/${subdir}/ctxobj-f.c"]
+
+set libobj1 "${objdir}/${subdir}/libctxobj1.so"
+set libobj2 "${objdir}/${subdir}/libctxobj2.so"
+
+set libobj1_opts { debug additional_flags=-fPIC
+                   additional_flags=-DVERSION=104
+                   additional_flags=-DGET_VERSION=get_version_1 }
+set libobj2_opts { debug additional_flags=-fPIC
+                   additional_flags=-DVERSION=203
+                   additional_flags=-DGET_VERSION=get_version_2 }
+
+if { [gdb_compile_shlib $libsrc $libobj1 $libobj1_opts ] != "" } {
+    return -1
+}
+if { [gdb_compile_shlib $libsrc $libobj2 $libobj2_opts ] != "" } {
+    return -1
+}
+if { [gdb_compile "${srcdir}/${subdir}/${executable}.c" \
+                  "${objdir}/${subdir}/${executable}" \
+                  executable \
+                  [list debug shlib=${libobj1} shlib=${libobj2}]]
+     != ""} {
+    return -1
+}
+
+clean_restart $executable
+gdb_load_shlibs $libobj1 $libobj2
+
+if ![runto_main] {
+    untested "could not run to main"
+    return -1
+}
+
+set bp_location [gdb_get_line_number "STOP" "ctxobj-f.c"]
+gdb_test "break ctxobj-f.c:$bp_location" \
+         "Breakpoint \[0-9\]+ at 0x\[0-9a-fA-F\]+: .*" \
+         "break in get_version functions"
+
+gdb_test "continue" \
+         "Breakpoint $decimal, get_version_1 \\(\\).*" \
+         "continue to get_version_1"
+
+# Try printing "this_version_num".  There are two global variables
+# with that name, and some systems such as GNU/Linux merge them
+# into one single entity, while some other systems such as Windows
+# keep them separate.  In the first situation, we have to verify
+# that GDB does not randomly select the wrong instance.  And in
+# the second case, we have to verify that GDB prints the value
+# of the instance from the current debugging context (the shared
+# library currently being debugged).
+#
+# We perform two tests: The first print test verifies that we are
+# doing things right when the partial symtab hasn't been expanded.
+# And the second print test will do the same, but after the partial
+# symtab has been expanded.
+#
+# To avoid adding target-specific code in this testcase, the program
+# sets a local variable named 'v' with the value of the global
+# variable 'this_version_number'.  This allows us to compare the value
+# that GDB thinks 'this_version_num' has, against the actual value
+# seen by the program itself.
+
+gdb_test "print this_version_num == v" \
+         " = 1" \
+        "print libctxobj1's this_version_num from partial symtab"
+
+gdb_test "print this_version_num == v" \
+         " = 1" \
+        "print libctxobj1's this_version_num from symtab"
+
+# Do the same, but from get_version_2.
+
+gdb_test "continue" \
+         "Breakpoint $decimal, get_version_2 \\(\\).*" \
+         "continue to get_version_2"
+
+gdb_test "print this_version_num == v" \
+         " = 1" \
+        "print libctxobj2's this_version_num from partial symtab"
+
+gdb_test "print this_version_num == v" \
+         " = 1" \
+        "print libctxobj2's this_version_num from symtab"
diff --git a/gdb/testsuite/gdb.base/cursal.exp b/gdb/testsuite/gdb.base/cursal.exp
index 808f6be..ce77363 100644
--- a/gdb/testsuite/gdb.base/cursal.exp
+++ b/gdb/testsuite/gdb.base/cursal.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 set testfile "cursal"
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/cvexpr.exp b/gdb/testsuite/gdb.base/cvexpr.exp
index eebbf6f..d836d4a 100644
--- a/gdb/testsuite/gdb.base/cvexpr.exp
+++ b/gdb/testsuite/gdb.base/cvexpr.exp
@@ -18,10 +18,6 @@
 # This file is part of the gdb testsuite
 # Tests for type expressions using const and volatile keywords.
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 #
 # test running programs
 #
@@ -40,10 +36,6 @@ gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
 
-if [target_info exists gdb_stub] {
-    gdb_step_for_stub;
-}
-
 gdb_test_no_output "set print sevenbit-strings"
 gdb_test_no_output "set print address off"
 gdb_test_no_output "set width 0"
diff --git a/gdb/testsuite/gdb.base/dbx.exp b/gdb/testsuite/gdb.base/dbx.exp
index cfd6330..843d637 100644
--- a/gdb/testsuite/gdb.base/dbx.exp
+++ b/gdb/testsuite/gdb.base/dbx.exp
@@ -14,10 +14,6 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 
-if $tracelevel then {
-        strace $tracelevel
-}
-
 set testfile1 "average"
 set testfile2 "sum"
 set testfile "dbx-test"
diff --git a/gdb/testsuite/gdb.base/default.exp b/gdb/testsuite/gdb.base/default.exp
index 74d2d2d..73fbe98 100644
--- a/gdb/testsuite/gdb.base/default.exp
+++ b/gdb/testsuite/gdb.base/default.exp
@@ -39,7 +39,6 @@ gdb_test "append binary memory" "Missing filename\."
 gdb_test "append binary value"  "Missing filename\." 
 
 if !$use_gdb_stub {
-    setup_xfail "mips-idt-*"
     gdb_test_multiple "attach" "attach" {
 	-re "Argument required .(process-id|program) to attach.*$gdb_prompt $"\
 	    { pass "attach" }
@@ -61,7 +60,6 @@ if !$use_gdb_stub {
     }
 
     
-    setup_xfail "mips-idt-*"
     gdb_test "backtrace" "No stack."
 
     # ba and bac are no longer unique command prefixes. So these tests
@@ -69,18 +67,14 @@ if !$use_gdb_stub {
     # GDB needs to be fixed to map unique alias here for ba bac.
     #
     foreach i "bt ba bac" {
-	setup_xfail "mips-idt-*"
 	gdb_test $i "No stack." "backtrace \"$i\" abbreviation"
     }
 } else {
     warning "Skipping backtrace and break tests because of GDB stub."
 }
 
-# This works on the MIPS IDT board, but confuses future tests.
-if ![istarget "mips-idt-*"] then {
-    gdb_test "continue" "The program is not being run." "continue"
-    gdb_test "c" "The program is not being run." "continue \"c\" abbreviation"
-}
+gdb_test "continue" "The program is not being run." "continue"
+gdb_test "c" "The program is not being run." "continue \"c\" abbreviation"
 
 #test call
 gdb_test "call" "The history is empty..*" "call"
@@ -102,7 +96,7 @@ gdb_test "commands" "Argument required .one or more breakpoint numbers...*" "com
 gdb_test "condition" "Argument required .breakpoint number.*" "condition"
 
 #test core-file
-gdb_test "core-file" "No core file now.|GDB can't read core files on this machine." "core-file"
+gdb_test "core-file" "No core file now." "core-file"
 #test delete "d" abbreviation
 gdb_test_no_output "d" "delete \"d\" abbreviation"
 #test delete
@@ -282,8 +276,6 @@ gdb_test "info args" "No frame selected." "info args"
 gdb_test "info bogus-gdb-command" "Undefined info command: \"bogus-gdb-command\".  Try \"help info\".*" "info bogus-gdb-command"
 #test info breakpoints
 gdb_test "info breakpoints" "No breakpoints or watchpoints." "info breakpoints"
-#test info catch
-gdb_test "info catch" "No frame selected." "info catch"
 #test info copying
 # FIXME -- doesn't work worth a shit
 #send_gdb "info copying"
@@ -443,6 +435,8 @@ You must specify a function name to run, and arguments if any"\
 	    { pass "run \"r\" abbreviation" }
 	-re "Don't know how to run.  Try \"help target\"..*$gdb_prompt $"\
 	    { pass "run \"r\" abbreviation" }
+	-re "Starting program:  .*Running the default executable on the remote target failed; try \"set remote exec-file\"?.*$gdb_prompt $"\
+	    { pass "run \"r\" abbreviation" }
     }
 }
 
@@ -470,6 +464,8 @@ You must specify a function name to run, and arguments if any"
 	    { pass "run" }
 	-re "Don't know how to run.  Try \"help target\"..*$gdb_prompt $"\
 	    { pass "run" }
+	-re "Starting program:  .*Running the default executable on the remote target failed; try \"set remote exec-file\"?.*$gdb_prompt $"\
+	    { pass "run" }
     }
 }
 
@@ -532,7 +528,7 @@ gdb_test "set history size" "Argument required .integer to set it to.*" "set his
 #test set history
 gdb_test "set history" "\"set history\" must be followed by the name of a history subcommand.(\[^\r\n\]*\[\r\n\])+List of set history subcommands:(\[^\r\n\]*\[\r\n\])+set history expansion -- Set history expansion on command input(\[^\r\n\]*\[\r\n\])+set history filename -- Set the filename in which to record the command history(\[^\r\n\]*\[\r\n\])+set history save -- Set saving of the history record on exit(\[^\r\n\]*\[\r\n\])+set history size -- Set the size of the command history(\[^\r\n\]*\[\r\n\])+Type \"help set history\" followed by set history subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set history"
 #test set language
-gdb_test "set language" "Requires an argument. Valid arguments are auto, local, unknown, ada, c, c.., asm, minimal, d, fortran, objective-c, java, modula-2, opencl, pascal." "set language"
+gdb_test "set language" "Requires an argument. Valid arguments are auto, local, unknown, ada, c, c.., asm, minimal, d, fortran, objective-c, go, java, modula-2, opencl, pascal." "set language"
 #test set listsize
 gdb_test "set listsize" "Argument required .integer to set it to.*" "set listsize"
 #test set print "p" abbreviation
@@ -564,8 +560,6 @@ gdb_test_no_output "set print vtbl" "set print vtbl"
 # FIXME -- need a test for "set prompt"
 #test set radix
 gdb_test "set radix" "Input and output radices now set to decimal 10, hex a, octal 12.*" "set radix"
-#test set symbol-reloading
-gdb_test_no_output "set symbol-reloading" "set symbol-reloading"
 #test set variable
 gdb_test "set variable" "Argument required .expression to compute.*" "set variable"
 #test set verbose
@@ -610,6 +604,19 @@ gdb_test_list_exact "show convenience" "show convenience" \
 	{$_sdata = void} \
 	{$_siginfo = void} \
 	{$_thread = 0} \
+	{$_probe_argc = <error: No frame selected>} \
+	{$_probe_arg0 = <error: No frame selected>} \
+	{$_probe_arg1 = <error: No frame selected>} \
+	{$_probe_arg2 = <error: No frame selected>} \
+	{$_probe_arg3 = <error: No frame selected>} \
+	{$_probe_arg4 = <error: No frame selected>} \
+	{$_probe_arg5 = <error: No frame selected>} \
+	{$_probe_arg6 = <error: No frame selected>} \
+	{$_probe_arg7 = <error: No frame selected>} \
+	{$_probe_arg8 = <error: No frame selected>} \
+	{$_probe_arg9 = <error: No frame selected>} \
+	{$_probe_arg10 = <error: No frame selected>} \
+	{$_probe_arg11 = <error: No frame selected>} \
     }
 
 #test show directories
@@ -667,8 +674,6 @@ gdb_test "show print vtbl" "Printing of C\[+\]+ virtual function tables is on."
 gdb_test "show prompt" "Gdb's prompt is \"$gdb_prompt \".*" "show prompt"
 #test show radix
 gdb_test "show radix" "Input and output radices set to decimal 10, hex a, octal 12." "show radix"
-#test show symbol-reloading
-gdb_test "show symbol-reloading" "Dynamic symbol table reloading multiple times in one run is on." "show symbol-reloading"
 #test show user
 gdb_test_no_output "show user" "show user"
 #test show values
diff --git a/gdb/testsuite/gdb.base/define.exp b/gdb/testsuite/gdb.base/define.exp
index ae259b3..889eca8 100644
--- a/gdb/testsuite/gdb.base/define.exp
+++ b/gdb/testsuite/gdb.base/define.exp
@@ -16,12 +16,6 @@
 
 # This file was written by Elena Zannoni. (ezannoni at cygnus.com)
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
-global usestubs
-
 
 #
 # test running programs
diff --git a/gdb/testsuite/gdb.base/del.exp b/gdb/testsuite/gdb.base/del.exp
index ddeb78c..1a37330 100644
--- a/gdb/testsuite/gdb.base/del.exp
+++ b/gdb/testsuite/gdb.base/del.exp
@@ -16,10 +16,6 @@
 # The intent of this testcase is to verify that various aliases and
 # shortcuts of the "delete" command never stop working.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 set testfile del
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/detach.exp b/gdb/testsuite/gdb.base/detach.exp
index 9bfb828..11fe3f4 100644
--- a/gdb/testsuite/gdb.base/detach.exp
+++ b/gdb/testsuite/gdb.base/detach.exp
@@ -16,10 +16,6 @@
 # Test running a program from the GDB prompt and then detaching it.
 # NOTE: This test could be much more thorough.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 # Only GNU/Linux is known to support this.
 if { ! [istarget "*-*-linux*"] } {
diff --git a/gdb/testsuite/gdb.base/dfp-exprs.exp b/gdb/testsuite/gdb.base/dfp-exprs.exp
index b27e727..58f7156 100644
--- a/gdb/testsuite/gdb.base/dfp-exprs.exp
+++ b/gdb/testsuite/gdb.base/dfp-exprs.exp
@@ -18,10 +18,6 @@
 # This file is part of the gdb testsuite.  It contains test for evaluating
 # simple decimal floating point (DFP) expression.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 proc test_dfp_literals_accepted {} {
 
     # Test various dfp values, covering 32-bit, 64-bit and 128-bit ones
diff --git a/gdb/testsuite/gdb.base/dfp-test.exp b/gdb/testsuite/gdb.base/dfp-test.exp
index d0628e0..a59065a 100644
--- a/gdb/testsuite/gdb.base/dfp-test.exp
+++ b/gdb/testsuite/gdb.base/dfp-test.exp
@@ -18,10 +18,6 @@
 # This file is part of the gdb testsuite.  It is intended to test that
 # gdb could correctly handle decimal floating point introduced in IEEE 754R.
 
-if $tracelevel then {
-  strace $tracelevel
-}
-
 set testfile "dfp-test"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
diff --git a/gdb/testsuite/gdb.base/disp-step-syscall.exp b/gdb/testsuite/gdb.base/disp-step-syscall.exp
index 1f23399..915cb97 100644
--- a/gdb/testsuite/gdb.base/disp-step-syscall.exp
+++ b/gdb/testsuite/gdb.base/disp-step-syscall.exp
@@ -25,15 +25,14 @@ set syscall_insn ""
 # Define the syscall instruction for each target.
 
 if { [istarget "i\[34567\]86-*-linux*"] || [istarget "x86_64-*-linux*"] } {
-    set syscall_insn "(int|syscall|sysenter)"
+    set syscall_insn "\[ \t\](int|syscall|sysenter)\[ \t\]"
 } else {
     return -1
 }
 
-proc disp_step_cross_syscall { syscall } {
+proc disp_step_cross_syscall { syscall } { with_test_prefix "$syscall" {
     global syscall_insn
     global gdb_prompt
-    global pf_prefix
 
     set testfile "disp-step-$syscall"
 
@@ -47,9 +46,6 @@ proc disp_step_cross_syscall { syscall } {
 	return
     }
 
-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "$syscall:"
-
     # Delete the breakpoint on main.
     gdb_test_no_output "delete break 1"
 
@@ -94,7 +90,6 @@ proc disp_step_cross_syscall { syscall } {
 
     if {$see_syscall_insn == 0} then {
 	fail "find syscall insn in $syscall"
-	set pf_prefix $old_pf_prefix
 	return -1
     }
 
@@ -123,16 +118,40 @@ proc disp_step_cross_syscall { syscall } {
     gdb_test_no_output "set displaced-stepping on"
 
     # Check the address of next instruction of syscall.
-    gdb_test "stepi" ".*$syscall_insn_next_addr.*" "single step over $syscall"
+    if {$syscall == "vfork" && [is_remote target]} {
+	setup_kfail server/13796 "*-*-*"
+    }
+    set test "single step over $syscall"
+    gdb_test_multiple "stepi" $test {
+	-re "Program terminated with signal SIGILL,.*\r\n$gdb_prompt $" {
+	    fail $test
+	    return
+	}
+	-re "\\\[Inferior .* exited normally\\\].*\r\n$gdb_prompt $" {
+	    fail $test
+	    return
+	}
+	-re "\r\n$gdb_prompt $" {
+	    pass $test
+	}
+    }
+
+    set syscall_insn_next_addr_found [get_hexadecimal_valueof "\$pc" "0"]
+
+    set test "single step over $syscall final pc"
+    if {$syscall_insn_next_addr != 0
+	&& $syscall_insn_next_addr == $syscall_insn_next_addr_found} {
+      pass $test
+    } else {
+      fail $test
+    }
 
     # Delete breakpoint syscall insns to avoid interference to other syscalls.
     gdb_test_no_output "delete $syscall_insn_bp" "delete break $syscall insn"
 
     gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, marker \\(\\) at.*" \
 	"continue to marker ($syscall)"
-
-    set pf_prefix $old_pf_prefix
-}
+}}
 
 disp_step_cross_syscall "fork"
 disp_step_cross_syscall "vfork"
diff --git a/gdb/testsuite/gdb.base/display.exp b/gdb/testsuite/gdb.base/display.exp
index 2d6ce0f..4136cc1 100644
--- a/gdb/testsuite/gdb.base/display.exp
+++ b/gdb/testsuite/gdb.base/display.exp
@@ -16,10 +16,6 @@
 # display.exp   Test display commands
 #               Also do some printing stuff for coverage's sake.
 #
-if $tracelevel then {
-	strace $tracelevel
-}
-
 set testfile display
 set srcfile  ${testfile}.c
 set binfile  ${objdir}/${subdir}/${testfile}
@@ -30,9 +26,6 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
     untested display.exp
     return -1
 }
-if [target_info exists gdb_stub] {
-    gdb_step_for_stub;
-}
 
 # Preserve the old timeout, and set a new one that should be
 # sufficient to avoid timing out during this test.
diff --git a/gdb/testsuite/gdb.base/dprintf.c b/gdb/testsuite/gdb.base/dprintf.c
new file mode 100644
index 0000000..f695ff1
--- /dev/null
+++ b/gdb/testsuite/gdb.base/dprintf.c
@@ -0,0 +1,58 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <stdio.h>
+
+static int g;
+
+void
+foo (int arg)
+{
+  g += arg;
+  g *= 2; /* set dprintf 1 here */
+  g /= 2.5; /* set breakpoint 1 here */
+}
+
+int
+main (int argc, char *argv[])
+{
+  int loc = 1234;
+
+  /* Ensure these functions are available.  */
+  printf ("kickoff %d\n", loc);
+  fprintf (stderr, "also to stderr %d\n", loc);
+
+  foo (loc++);
+  foo (loc++);
+  foo (loc++);
+  return g;
+}
+
+#include <stdlib.h>
+/* Make sure function 'malloc' is linked into program.  One some bare-metal
+   port, if we don't use 'malloc', it will not be linked in program.  'malloc'
+   is needed, otherwise we'll see such error message
+
+   evaluation of this expression requires the program to have a function
+   "malloc".  */
+void
+bar (void)
+{
+  void *p = malloc (16);
+
+  free (p);
+}
diff --git a/gdb/testsuite/gdb.base/dprintf.exp b/gdb/testsuite/gdb.base/dprintf.exp
new file mode 100644
index 0000000..bd0615b
--- /dev/null
+++ b/gdb/testsuite/gdb.base/dprintf.exp
@@ -0,0 +1,114 @@
+#   Copyright (C) 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+
+if { [prepare_for_testing dprintf.exp "dprintf" {} {debug}] } {
+    return -1
+}
+
+set srcfile dprintf.c
+
+set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
+set dp_location1 [gdb_get_line_number "set dprintf 1 here"]
+
+if ![runto main] {
+    return -1
+}
+
+gdb_test "dprintf" "Format string required"
+
+gdb_test "dprintf foo" "Format string required"
+
+gdb_test "dprintf 29" "Format string required"
+
+delete_breakpoints
+
+gdb_breakpoint "main"
+
+gdb_test "dprintf foo,\"At foo entry\\n\"" \
+  "Dprintf .*"
+
+gdb_test "dprintf $dp_location1,\"arg=%d, g=%d\\n\", arg, g" \
+  "Dprintf .*"
+
+gdb_test "break $bp_location1" \
+  "Breakpoint .*"
+
+gdb_run_cmd
+
+gdb_test "" "Breakpoint"
+
+gdb_test "continue" "At foo entry.*arg=1234, g=1234.*" "1st dprintf, gdb"
+
+gdb_test "continue" "At foo entry.*arg=1235, g=2222.*" "2nd dprintf, gdb"
+
+# The "call" style depends on having I/O functions available, so test.
+
+if ![target_info exists gdb,noinferiorio] {
+
+    # Now switch styles and rerun; in the absence of redirection the
+    # output should be the same.
+
+    gdb_test_no_output "set dprintf-style call" "Set dprintf style to call"
+
+    gdb_run_cmd
+
+    gdb_test "" "Breakpoint"
+
+    gdb_test "continue" "At foo entry.*arg=1234, g=1234.*" "1st dprintf, call"
+
+    gdb_test "continue" "At foo entry.*arg=1235, g=2222.*" "2nd dprintf, call"
+
+    gdb_test_no_output "set dprintf-function fprintf" "Set dprintf function"
+    gdb_test_no_output "set dprintf-channel stderr" "Set dprintf channel"
+
+    gdb_run_cmd
+
+    gdb_test "" "Breakpoint"
+
+    gdb_test "continue" "At foo entry.*arg=1234, g=1234.*" \
+	"1st dprintf, fprintf"
+
+    gdb_test "continue" "At foo entry.*arg=1235, g=2222.*" \
+	"2nd dprintf, fprintf"
+}
+
+set target_can_dprintf 1
+set msg "Set dprintf style to agent"
+gdb_test_multiple "set dprintf-style agent" $msg {
+    -re "warning: Target cannot run dprintf commands.*\r\n$gdb_prompt $" {
+	set target_can_dprintf 0
+	pass "$msg - cannot do"
+    }
+    -re ".*$gdb_prompt $" {
+	pass "$msg - can do"
+    }
+}
+
+if $target_can_dprintf {
+
+    gdb_run_cmd
+
+    gdb_test "" "Breakpoint"
+
+    gdb_test "continue" "Breakpoint \[0-9\]+, foo .*" "1st dprintf, agent"
+
+    gdb_test "continue" "Breakpoint \[0-9\]+, foo .*" "2nd dprintf, agent"
+
+}
+
+gdb_test "set dprintf-style foobar" "Undefined item: \"foobar\"." \
+    "Set dprintf style to an unrecognized type"
+
diff --git a/gdb/testsuite/gdb.base/dump.exp b/gdb/testsuite/gdb.base/dump.exp
index a59c71b..44cccbf 100644
--- a/gdb/testsuite/gdb.base/dump.exp
+++ b/gdb/testsuite/gdb.base/dump.exp
@@ -16,10 +16,6 @@
 # This file was written by Michael Snyder (msnyder at redhat.com)
 # This is a test for the gdb command "dump".
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile "dump"
 
diff --git a/gdb/testsuite/gdb.base/echo.exp b/gdb/testsuite/gdb.base/echo.exp
index e50ef98..f704396 100644
--- a/gdb/testsuite/gdb.base/echo.exp
+++ b/gdb/testsuite/gdb.base/echo.exp
@@ -19,10 +19,6 @@
 # Crank up gdb.
 gdb_start
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # test the echo command
 #
diff --git a/gdb/testsuite/gdb.base/ena-dis-br.exp b/gdb/testsuite/gdb.base/ena-dis-br.exp
index 530120d..2cf3e9a 100644
--- a/gdb/testsuite/gdb.base/ena-dis-br.exp
+++ b/gdb/testsuite/gdb.base/ena-dis-br.exp
@@ -16,12 +16,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
-global usestubs
-
 #
 # test running programs
 #
@@ -52,6 +46,7 @@ gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
 
 set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
+set bp_location7 [gdb_get_line_number "set breakpoint 7 here"]
 set bp_location8 [gdb_get_line_number "set breakpoint 8 here" $srcfile1]
 set bp_location9 [gdb_get_line_number "set breakpoint 9 here" $srcfile1]
 set bp_location11 [gdb_get_line_number "set breakpoint 11 here"]
@@ -168,6 +163,31 @@ gdb_test "info break $bp" \
     "\[0-9\]*\[ \t\]+breakpoint\[ \t\]+keep\[ \t\]+n.*" \
     "info break marker4"
 
+if ![runto_main] then {
+    fail "enable/disable break tests suppressed"
+}
+
+# Test enable count by stopping at a location until it is disabled
+# and passes through.
+
+set bp [break_at $bp_location7 "line $bp_location7"]
+
+set bp2 [break_at marker1 " line ($bp_location15|$bp_location16)"]
+
+gdb_test_no_output "enable count 2 $bp" "disable break with count"
+
+gdb_test "continue" \
+    ".*factorial .*:$bp_location7.*" \
+    "continue from enable count, first time"
+
+gdb_test "continue" \
+    ".*factorial .*:$bp_location7.*" \
+    "continue from enable count, second time"
+
+gdb_test "continue" \
+    ".*marker1 .*:($bp_location15|$bp_location16).*" \
+    "continue through enable count, now disabled"
+
 # Verify that we can set a breakpoint with an ignore count N, which
 # should cause the next N triggers of the bp to be ignored.  (This is
 # a flavor of enablement/disablement, after all.)
diff --git a/gdb/testsuite/gdb.base/enum_cond.c b/gdb/testsuite/gdb.base/enum_cond.c
new file mode 100644
index 0000000..5c152a4
--- /dev/null
+++ b/gdb/testsuite/gdb.base/enum_cond.c
@@ -0,0 +1,48 @@
+/* This testcase is part of GDB, the GNU debugger.
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+enum EE
+{
+  VALUE = 1
+};
+
+struct x
+{
+  unsigned char before;
+  enum EE e;
+  unsigned char after;
+};
+
+
+int
+call_me (struct x param)
+{
+  return param.e;
+}
+
+int
+main (void)
+{
+  struct x val;
+
+  val.before = 0xff;
+  val.e = VALUE;
+  val.after = 0xff;
+
+  call_me (val);
+  return 0;
+}
+
diff --git a/gdb/testsuite/gdb.base/enum_cond.exp b/gdb/testsuite/gdb.base/enum_cond.exp
new file mode 100644
index 0000000..5c041d9
--- /dev/null
+++ b/gdb/testsuite/gdb.base/enum_cond.exp
@@ -0,0 +1,44 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# This file is part of the gdb testsuite.  It is intended to test that
+# gdb can correctly print arrays with indexes for each element of the
+# array.
+
+set testfile "enum_cond"
+set srcfile ${testfile}.c
+set binfile ${objdir}/${subdir}/${testfile}
+
+set opts [list debug additional_flags=-fshort-enums]
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable $opts] != "" } {
+    untested "Could not compile ${srcfile}"
+    return -1
+}
+
+clean_restart $testfile
+
+if ![runto_main] then {
+    perror "could not run to main"
+    continue
+}
+
+gdb_test "break call_me if param.e == 1" \
+         "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal\\."
+
+# Continue.  We should hit our breakpoint...
+gdb_test "continue" \
+         "Breakpoint $decimal, call_me \\(param=\\.\\.\\.\\) at .*" \
+         "continue to conditional breakpoint in call_me"
+
diff --git a/gdb/testsuite/gdb.base/enumval.c b/gdb/testsuite/gdb.base/enumval.c
new file mode 100644
index 0000000..a71b953
--- /dev/null
+++ b/gdb/testsuite/gdb.base/enumval.c
@@ -0,0 +1,30 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+enum e { I, J = 0xffffffffU, K = 0xf000000000000000ULL } e = J, f = K;
+
+void
+dummy()
+{
+}
+
+int
+main(void)
+{
+  dummy();
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.base/enumval.exp b/gdb/testsuite/gdb.base/enumval.exp
new file mode 100644
index 0000000..fa41096
--- /dev/null
+++ b/gdb/testsuite/gdb.base/enumval.exp
@@ -0,0 +1,31 @@
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+set testfile "enumval"
+set srcfile ${testfile}.c
+set binfile ${objdir}/${subdir}/${testfile}
+
+if { [prepare_for_testing enumval.exp "enumval" "" {debug}] } {
+    return -1
+}
+
+# Check the real contents.
+gdb_test "print e" "= J"
+gdb_test "print f" "= K"
+
+gdb_test "print J" "= J"
+gdb_test "print K" "= K"
diff --git a/gdb/testsuite/gdb.base/environ.exp b/gdb/testsuite/gdb.base/environ.exp
index 97c2256..2466c81 100644
--- a/gdb/testsuite/gdb.base/environ.exp
+++ b/gdb/testsuite/gdb.base/environ.exp
@@ -13,12 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
-global usestubs
-
 #
 # test running programs
 #
diff --git a/gdb/testsuite/gdb.base/eval-skip.exp b/gdb/testsuite/gdb.base/eval-skip.exp
index 8b70339..57fa0f6 100644
--- a/gdb/testsuite/gdb.base/eval-skip.exp
+++ b/gdb/testsuite/gdb.base/eval-skip.exp
@@ -28,10 +28,6 @@
 #
 
 
-if $tracelevel then {
-        strace $tracelevel
-}
-
 # Check to see if we have an executable to test.  If not, then either we
 # haven't tried to compile one, or the compilation failed for some reason.
 # In either case, just notify the user and skip the tests in this file.
@@ -45,7 +41,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
      return -1
     }
 
-if [get_compiler_info $binfile] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/exe-lock.exp b/gdb/testsuite/gdb.base/exe-lock.exp
index c6413f1..150b58e 100644
--- a/gdb/testsuite/gdb.base/exe-lock.exp
+++ b/gdb/testsuite/gdb.base/exe-lock.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 # The intent of this testcase is to verify that GDB does not keep
 # a filesystem lock on the executable file once the executable
 # is no longer running.
diff --git a/gdb/testsuite/gdb.base/expand-psymtabs.exp b/gdb/testsuite/gdb.base/expand-psymtabs.exp
index 93ea864..6632736 100644
--- a/gdb/testsuite/gdb.base/expand-psymtabs.exp
+++ b/gdb/testsuite/gdb.base/expand-psymtabs.exp
@@ -16,10 +16,6 @@
 #
 # This file is part of the gdb testsuite.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 # It's possible to have a program that contains two compilation units
 # for the same source file name, that have code at different lines.
 # For example, in this test, we compile expand-psymtabs.c twice with
@@ -40,7 +36,7 @@ set binfile_1 ${objdir}/${subdir}/${testfile}_1.o
 set binfile_2 ${objdir}/${subdir}/${testfile}_2.o
 
 # What compiler are we using?
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/exprs.c b/gdb/testsuite/gdb.base/exprs.c
index 34d2780..90c0f25 100644
--- a/gdb/testsuite/gdb.base/exprs.c
+++ b/gdb/testsuite/gdb.base/exprs.c
@@ -8,10 +8,6 @@ main (argc, argv, envp)
 #endif
 {
     extern void dummy();
-#ifdef usestubs
-    set_debug_traps();
-    breakpoint();
-#endif
     dummy();
     return 0;
     
diff --git a/gdb/testsuite/gdb.base/exprs.exp b/gdb/testsuite/gdb.base/exprs.exp
index 67c89f0..9599028 100644
--- a/gdb/testsuite/gdb.base/exprs.exp
+++ b/gdb/testsuite/gdb.base/exprs.exp
@@ -16,10 +16,6 @@
 
 # This file was written by Rob Savoye. (rob at cygnus.com)
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 #
 # test running programs
 #
@@ -32,7 +28,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
      return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.base/fileio.exp b/gdb/testsuite/gdb.base/fileio.exp
index 310c438..a001559 100644
--- a/gdb/testsuite/gdb.base/fileio.exp
+++ b/gdb/testsuite/gdb.base/fileio.exp
@@ -20,10 +20,6 @@ if [target_info exists gdb,nofileio] {
     continue
 }
 
-if $tracelevel then {
-        strace $tracelevel
-}
-
 
 set testfile "fileio"
 set srcfile ${testfile}.c
@@ -37,7 +33,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
@@ -246,8 +242,9 @@ gdb_test continue \
 "Continuing\\..*time 2:.*OK$stop_msg" \
 "Time(2) returns feasible values"
 
-send_gdb "quit\n"
-send_gdb "y\n"
+gdb_exit
+# Wait till GDB really exits.
+sleep 1
 
 remote_exec build {sh -xc test\ -r\ dir2.fileio.test\ &&\ chmod\ -f\ +w\ dir2.fileio.test}
 remote_exec build {sh -xc rm\ -rf\ *.fileio.test}
diff --git a/gdb/testsuite/gdb.base/find.exp b/gdb/testsuite/gdb.base/find.exp
index 2f33973..5e41d97 100644
--- a/gdb/testsuite/gdb.base/find.exp
+++ b/gdb/testsuite/gdb.base/find.exp
@@ -15,10 +15,6 @@
 
 # This tests the find command.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 set testfile "find"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
@@ -87,7 +83,7 @@ gdb_test "find /1 &int8_search_buf\[0\], +sizeof(int8_search_buf), 'a', 'a', 'a'
     "max-count"
 
 gdb_test "print \$_" \
-    "${history_prefix}.*${hex_number}" \
+    "${history_prefix}.*${hex_number} <int8_search_buf\\+10>" \
     "\$_"
 
 gdb_test "print \$numfound" \
@@ -186,3 +182,6 @@ if [isnative] {
     "${hex_number}${one_pattern_found}" \
     "find pattern straddling chunk boundary"
 }
+
+# Check GDB buffer overflow.
+gdb_test "find int64_search_buf, +64/8*100, int64_search_buf" " <int64_search_buf>\r\n1 pattern found\\."
diff --git a/gdb/testsuite/gdb.base/finish.exp b/gdb/testsuite/gdb.base/finish.exp
index dc96af5..c782ffc 100644
--- a/gdb/testsuite/gdb.base/finish.exp
+++ b/gdb/testsuite/gdb.base/finish.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Michael Snyder (msnyder at redhat.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 # re-use the program from the "return2" test.
 if { [prepare_for_testing finish.exp finish return2.c] } {
diff --git a/gdb/testsuite/gdb.base/fixsection.exp b/gdb/testsuite/gdb.base/fixsection.exp
index 59f51c5..ad991a2 100644
--- a/gdb/testsuite/gdb.base/fixsection.exp
+++ b/gdb/testsuite/gdb.base/fixsection.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 if {[skip_shlib_tests]} {
     return 0
@@ -33,7 +29,7 @@ set lib_sl ${objdir}/${subdir}/${libfile}.sl
 set lib_opts [list debug nowarnings]
 set exec_opts [list debug nowarnings shlib=$lib_sl]
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/float.exp b/gdb/testsuite/gdb.base/float.exp
index 4e75088..448102b 100644
--- a/gdb/testsuite/gdb.base/float.exp
+++ b/gdb/testsuite/gdb.base/float.exp
@@ -18,10 +18,6 @@
 
 # This file is part of the gdb testsuite.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 #
 # Test floating-point related functionality.
 #
diff --git a/gdb/testsuite/gdb.base/foll-exec.exp b/gdb/testsuite/gdb.base/foll-exec.exp
index 41e5732..5ab3ebc 100644
--- a/gdb/testsuite/gdb.base/foll-exec.exp
+++ b/gdb/testsuite/gdb.base/foll-exec.exp
@@ -17,6 +17,11 @@ if { [is_remote target] || ![isnative] } then {
     continue
 }
 
+# Until "catch exec" is implemented on other targets...
+#
+if {![istarget "hppa*-hp-hpux*"] && ![istarget "*-linux*"]} then {
+    continue
+}
 
 set testfile "foll-exec"
 set testfile2 "execd-prog"
@@ -36,13 +41,6 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
      return -1
 }
 
-
-# Until "catch exec" is implemented on other targets...
-#
-if {![istarget "hppa*-hp-hpux*"] && ![istarget "*-linux*"]} then {
-    continue
-}
-
 proc zap_session {} {
    global gdb_prompt
    global binfile
diff --git a/gdb/testsuite/gdb.base/foll-fork.exp b/gdb/testsuite/gdb.base/foll-fork.exp
index 8299a79..c399c4d 100644
--- a/gdb/testsuite/gdb.base/foll-fork.exp
+++ b/gdb/testsuite/gdb.base/foll-fork.exp
@@ -17,6 +17,12 @@ if { [is_remote target] || ![isnative] } then {
     continue
 }
 
+# Until "set follow-fork-mode" and "catch fork" are implemented on
+# other targets...
+#
+if {![istarget "hppa*-hp-hpux*"] && ![istarget "*-linux*"]} then {
+    continue
+}
 
 global srcfile
 set testfile "foll-fork"
@@ -28,15 +34,6 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
      return -1
 }
 
-
-
-# Until "set follow-fork-mode" and "catch fork" are implemented on
-# other targets...
-#
-if {![istarget "hppa*-hp-hpux*"] && ![istarget "*-linux*"]} then {
-    continue
-}
-
 proc check_fork_catchpoints {} {
   global gdb_prompt
 
diff --git a/gdb/testsuite/gdb.base/foll-vfork.exp b/gdb/testsuite/gdb.base/foll-vfork.exp
index 9bbce18..7a3c04e 100644
--- a/gdb/testsuite/gdb.base/foll-vfork.exp
+++ b/gdb/testsuite/gdb.base/foll-vfork.exp
@@ -17,6 +17,20 @@ if { [is_remote target] || ![isnative] } then {
     continue
 }
 
+# Until "set follow-fork-mode" and "catch vfork" are implemented on
+# other targets...
+#
+if {![istarget "hppa*-hp-hpux*"] && ![istarget "*-linux*"]} then {
+    continue
+}
+
+# Test to see if we are on an HP-UX 10.20 and if so,
+# do not run these tests as catching vfork is disabled for
+# 10.20.
+
+if [istarget "hppa*-hp-hpux10.20"] then {
+    return 0
+}
 
 # NOTE drow/2002-12-06: I don't know what the referenced kernel problem
 # is, but it appears to be fixed in recent HP/UX versions.
@@ -44,22 +58,6 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" executable {d
      return -1
 }
 
-
-# Until "set follow-fork-mode" and "catch vfork" are implemented on
-# other targets...
-#
-if {![istarget "hppa*-hp-hpux*"] && ![istarget "*-linux*"]} then {
-    continue
-}
-
-# Test to see if we are on an HP-UX 10.20 and if so,
-# do not run these tests as catching vfork is disabled for
-# 10.20.
-
-if [istarget "hppa*-hp-hpux10.20"] then {
-    return 0
-}
-
 # A few of these tests require a little more time than the standard
 # timeout allows.
 set oldtimeout $timeout
@@ -165,7 +163,7 @@ proc vfork_and_exec_child_follow_to_main_bp {} {
    send_gdb "kill\n"
    gdb_expect {
       -re ".*Kill the program being debugged.*y or n. $" {
-         send_gdb "y\n"
+         gdb_test_no_output "y" ""
          send_gdb "file $binfile\n"
          gdb_expect {
             -re ".*Load new symbol table from.*y or n. $" {
@@ -223,7 +221,7 @@ proc vfork_and_exec_child_follow_through_step {} {
    send_gdb "kill\n"
    gdb_expect {
       -re ".*Kill the program being debugged.*y or n. $" {
-         send_gdb "y\n"
+         gdb_test_no_output "y" ""
          send_gdb "file $binfile\n"
          gdb_expect {
             -re ".*Load new symbol table from.*y or n. $" {
diff --git a/gdb/testsuite/gdb.base/frame-args.exp b/gdb/testsuite/gdb.base/frame-args.exp
index d349f93..14e5872 100644
--- a/gdb/testsuite/gdb.base/frame-args.exp
+++ b/gdb/testsuite/gdb.base/frame-args.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 set testfile "frame-args"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
diff --git a/gdb/testsuite/gdb.base/freebpcmd.c b/gdb/testsuite/gdb.base/freebpcmd.c
index 9155f4a..7ca2156 100644
--- a/gdb/testsuite/gdb.base/freebpcmd.c
+++ b/gdb/testsuite/gdb.base/freebpcmd.c
@@ -23,11 +23,6 @@ main (int argc, char **argv)
 {
   int i;
 
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
-
   for (i = 0; i < 100; i++)
     printf (">>> %d\n", i); /* euphonium */
 
diff --git a/gdb/testsuite/gdb.base/freebpcmd.exp b/gdb/testsuite/gdb.base/freebpcmd.exp
index dd0ab4c..f969480 100644
--- a/gdb/testsuite/gdb.base/freebpcmd.exp
+++ b/gdb/testsuite/gdb.base/freebpcmd.exp
@@ -64,7 +64,10 @@ gdb_test "break ${srcfile}:[gdb_get_line_number "euphonium"]" ".*" \
 # The goal of all this is to make sure that there's plenty of memory
 # churn, and different amounts of it each time the inferior stops;
 # this seems to make GDB crash more reliably.
-set lines {{if (i%2) == 0}
+set lines {{if i<0 || i > 100}
+	   {echo Invalid i value\n}
+	   {else}
+	   {if (i%2) == 0}
            {echo "even "}
            {print i}
            {else}
@@ -81,6 +84,7 @@ set lines {{if (i%2) == 0}
            {if i != 40}
            {c}
            {end}
+	   {end}
            {end}}
 
 send_gdb "commands\n"
@@ -114,6 +118,9 @@ gdb_test_multiple "" "run program with breakpoint commands" {
     -re "warning: Invalid control type in command structure" {
         kfail "gdb/1489" "run program with breakpoint commands"
     }
+    -re "Invalid i value\r\n$gdb_prompt $" {
+	xfail "run program with breakpoint commands (i value not readable)"
+    }
     -re "$gdb_prompt $" {
         pass "run program with breakpoint commands"
     }
diff --git a/gdb/testsuite/gdb.base/funcargs.c b/gdb/testsuite/gdb.base/funcargs.c
index 6d16b62..b34f3fb 100644
--- a/gdb/testsuite/gdb.base/funcargs.c
+++ b/gdb/testsuite/gdb.base/funcargs.c
@@ -837,10 +837,6 @@ int main ()
   void (*pointer_to_call0a) (char, short, int, long) = (void (*)(char, short, int, long))call0a;
   double (*pointer_to_call_with_trampolines) (double) = call_with_trampolines;
 
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
   /* Test calling with basic integer types */
   call0a (c, s, i, l);
   call0b (s, i, l, c);
diff --git a/gdb/testsuite/gdb.base/funcargs.exp b/gdb/testsuite/gdb.base/funcargs.exp
index f1236cf..5f1a81c 100644
--- a/gdb/testsuite/gdb.base/funcargs.exp
+++ b/gdb/testsuite/gdb.base/funcargs.exp
@@ -16,10 +16,6 @@
 
 # This file was written by Fred Fish. (fnf at cygnus.com)
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 set testfile "funcargs"
 set srcfile ${testfile}.c
@@ -37,7 +33,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable $com
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
@@ -269,7 +265,7 @@ proc complex_args {} {
 	timeout { fail "(timeout) run to callca" ; gdb_suppress_tests; }
     }
     gdb_test "cont" ".* callcb \\(d1=3 \\+ 4 \\* I, d2=3 \\+ 4 \\* I, d3=3 \\+ 4 \\* I\\) .*" "continue to callcb"
-    gdb_test "cont" ".* callcc \\(ld1=5 \\+ 6 \\* I, ld2=5 \\+ 6 \\* I, ld3=5 \\+ 6 \\* I\\) .*" "continue to callcb"
+    gdb_test "cont" ".* callcc \\(ld1=5 \\+ 6 \\* I, ld2=5 \\+ 6 \\* I, ld3=5 \\+ 6 \\* I\\) .*" "continue to callcc"
     gdb_test "cont" ".* callcd \\(fc1=1 \\+ 2 \\* I, dc1=3 \\+ 4 \\* I, ldc1=5 \\+ 6 \\* I\\) .*" "continue to callcd"
     gdb_test "cont" ".* callce \\(dc1=3 \\+ 4 \\* I, ldc1=5 \\+ 6 \\* I, fc1=1 \\+ 2 \\* I\\) .*" "continue to callce"
     gdb_test "cont" ".* callcf \\(ldc1=5 \\+ 6 \\* I, fc1=1 \\+ 2 \\* I, dc1=3 \\+ 4 \\* I\\) .*" "continue to callcf"
@@ -336,7 +332,7 @@ proc pointer_args {} {
 
     gdb_run_cmd
     gdb_expect {
-	 -re ".* call3a \\(cp=$hex \"a.*\", sp=$hex, ip=$hex, lp=$hex\\) .*$gdb_prompt $" { pass "run to call3a" }
+	 -re ".* call3a \\(cp=$hex <c> \"a.*\", sp=$hex <s>, ip=$hex <i>, lp=$hex <l>\\) .*$gdb_prompt $" { pass "run to call3a" }
 	 -re "$gdb_prompt $" { fail "run to call3a" ; gdb_suppress_tests; }
 	 timeout { fail "(timeout) run to call3a" ; gdb_suppress_tests; }
     }
@@ -348,7 +344,7 @@ proc pointer_args {} {
 
     # Continue; should stop at call3b and print actual arguments.
     # Try dereferencing the arguments.
-    if [gdb_test "cont" ".* call3b \\(ucp=$hex \"b.*\", usp=$hex, uip=$hex, ulp=$hex\\) .*" "continue to call3b"] {
+    if [gdb_test "cont" ".* call3b \\(ucp=$hex <uc> \"b.*\", usp=$hex <us>, uip=$hex <ui>, ulp=$hex <ul>\\) .*" "continue to call3b"] {
 	gdb_suppress_tests;
     }
 
@@ -359,7 +355,7 @@ proc pointer_args {} {
 
     # Continue; should stop at call3c and print actual arguments.
     # Try dereferencing the arguments.
-    if [gdb_test "cont" ".* call3c \\(fp=$hex, dp=$hex\\) .*" "continue to call3c"] {
+    if [gdb_test "cont" ".* call3c \\(fp=$hex <f>, dp=$hex <d>\\) .*" "continue to call3c"] {
 	gdb_suppress_tests;
     }
 
@@ -392,7 +388,7 @@ proc structs_by_reference {} {
 
     gdb_run_cmd
     gdb_expect {
-	 -re ".* call4a \\(stp=$hex\\) .*$gdb_prompt $" {
+	 -re ".* call4a \\(stp=$hex <st>\\) .*$gdb_prompt $" {
 	    pass "run to call4a"
 	}
 	 -re "$gdb_prompt $" { fail "run to call4a" ; gdb_suppress_tests; }
@@ -403,7 +399,7 @@ proc structs_by_reference {} {
 
     # Continue; should stop at call4b and print actual arguments.
 
-    gdb_test "cont" ".* call4b \\(unp=$hex\\) .*" "continue to call4b"
+    gdb_test "cont" ".* call4b \\(unp=$hex <un>\\) .*" "continue to call4b"
 
     # Try dereferencing the arguments.
     if { $target_sizeof_long == $target_sizeof_int } {
@@ -969,21 +965,6 @@ proc recursive_structs_by_value {} {
     gdb_stop_suppressing_tests;
 }
 
-proc funcargs_reload { } {
-    global objdir
-    global subdir
-    global binfile
-    global srcdir
-
-    if [istarget "mips-idt-*"] {
-	# Restart because IDT/SIM runs out of file descriptors.
-	gdb_exit
-	gdb_start
-	gdb_reinitialize_dir $srcdir/$subdir
-	gdb_load ${binfile}
-    }
-}
-
 #
 # Test for accessing local stack variables in functions which call alloca
 #
@@ -1238,46 +1219,31 @@ gdb_test_multiple "show endian" "getting target endian" {
 gdb_test_no_output "set print frame-arguments all"
 
 integral_args
-funcargs_reload
 unsigned_integral_args
-funcargs_reload
 if {![target_info exists gdb,skip_float_tests]} {
   float_and_integral_args
 }
 
 # Test _Complex type here if supported.
 if [support_complex_tests] {
-    funcargs_reload
     complex_args
 
-    funcargs_reload
     complex_integral_args
 
     if {![target_info exists gdb,skip_float_tests]} {
-	funcargs_reload
 	complex_float_integral_args
     }
 }
 
-funcargs_reload
 pointer_args
-funcargs_reload
 structs_by_reference
-funcargs_reload
 structs_by_value
-funcargs_reload
 discard_and_shuffle
-funcargs_reload
 shuffle_round_robin
-funcargs_reload
 recursive_structs_by_value
-funcargs_reload
 localvars_after_alloca
-funcargs_reload
 call_after_alloca
-funcargs_reload
 localvars_in_indirect_call
-funcargs_reload
 test_stepping_over_trampolines
 
 set timeout $prev_timeout
diff --git a/gdb/testsuite/gdb.base/gcore-buffer-overflow.exp b/gdb/testsuite/gdb.base/gcore-buffer-overflow.exp
index a8c565a..7736bb8 100644
--- a/gdb/testsuite/gdb.base/gcore-buffer-overflow.exp
+++ b/gdb/testsuite/gdb.base/gcore-buffer-overflow.exp
@@ -15,10 +15,6 @@
 
 # Test GDB's internal buffers safety for the GCORE command.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile "gcore-buffer-overflow"
 set srcfile  ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/gcore.exp b/gdb/testsuite/gdb.base/gcore.exp
index 8b220d6..faa8fa7 100644
--- a/gdb/testsuite/gdb.base/gcore.exp
+++ b/gdb/testsuite/gdb.base/gcore.exp
@@ -16,10 +16,6 @@
 # This file was written by Michael Snyder (msnyder at redhat.com)
 # This is a test for the gdb command "generate-core-file".
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile "gcore"
 set srcfile  ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/gdb1056.exp b/gdb/testsuite/gdb.base/gdb1056.exp
index fce0d87..5c46ed6 100644
--- a/gdb/testsuite/gdb.base/gdb1056.exp
+++ b/gdb/testsuite/gdb.base/gdb1056.exp
@@ -16,10 +16,6 @@
 # Test for PR gdb/1056.
 # 2003-10-18  Michael Chastain <mec at shout.net>
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 # test SIGFPE (such as division by 0) inside gdb itself
 
 
diff --git a/gdb/testsuite/gdb.base/gdb1090.exp b/gdb/testsuite/gdb.base/gdb1090.exp
index 59b36b9..f9a2b26 100644
--- a/gdb/testsuite/gdb.base/gdb1090.exp
+++ b/gdb/testsuite/gdb.base/gdb1090.exp
@@ -18,10 +18,6 @@
 
 # This file is part of the gdb testsuite.
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 #
 # test running programs
 #
diff --git a/gdb/testsuite/gdb.base/gdb11530.exp b/gdb/testsuite/gdb.base/gdb11530.exp
index 705b4f4..65ce00c 100644
--- a/gdb/testsuite/gdb.base/gdb11530.exp
+++ b/gdb/testsuite/gdb.base/gdb11530.exp
@@ -18,17 +18,13 @@
 # Test GDB bug report 11530.
 # This is a problem related unnamed unions.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 set testfile "gdb11530"
 set binfile ${testfile}${EXEEXT}
 
 # Unnamed union is a GNU extension, thus we restrict the test
 # to gcc compiler.
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.base/gdb11531.exp b/gdb/testsuite/gdb.base/gdb11531.exp
index ab3a77b..4f5b89c 100644
--- a/gdb/testsuite/gdb.base/gdb11531.exp
+++ b/gdb/testsuite/gdb.base/gdb11531.exp
@@ -19,10 +19,6 @@
 # This is a problem related to CANNOT_STEP_HW_WATCHPOINTS macro.
 # It affects Solaris native targets.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile "gdb11531"
 
diff --git a/gdb/testsuite/gdb.base/gdb1250.exp b/gdb/testsuite/gdb.base/gdb1250.exp
index 0d36b6e..ef1e067 100644
--- a/gdb/testsuite/gdb.base/gdb1250.exp
+++ b/gdb/testsuite/gdb.base/gdb1250.exp
@@ -18,10 +18,6 @@
 
 # This file is part of the gdb testsuite.
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 #
 # test running programs
 #
diff --git a/gdb/testsuite/gdb.base/gdb1555.exp b/gdb/testsuite/gdb.base/gdb1555.exp
index be3aa75..151a95d 100644
--- a/gdb/testsuite/gdb.base/gdb1555.exp
+++ b/gdb/testsuite/gdb.base/gdb1555.exp
@@ -17,10 +17,6 @@
 # a shared library (PR gdb/1555, was PR shlib/1280, shlib/1237).
 # Tested on ppc-yellowdog-linux (Yellow Dog Linux 3.0 3.2.2-2a)
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if {[skip_shlib_tests]} {
     return 0
 }
@@ -37,7 +33,7 @@ set execsrc "${srcdir}/${subdir}/${srcfile}"
 remote_exec build "rm -f ${binfile}"
 
 # get the value of gcc_compiled
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/gdb_history b/gdb/testsuite/gdb.base/gdb_history
index cc22f69..aa1f21f 100644
--- a/gdb/testsuite/gdb.base/gdb_history
+++ b/gdb/testsuite/gdb.base/gdb_history
@@ -85,7 +85,6 @@ info all-registers
 info args
 info bogus-gdb-command
 info breakpoints
-info catch
 info copying
 info display
 info f
@@ -177,7 +176,6 @@ set print sevenbit-strings
 set print union
 set print vtbl
 set radix
-set symbol-reloading
 set variable
 set verbose
 set width
@@ -221,7 +219,6 @@ show print union
 show print vtbl
 show prompt
 show radix
-show symbol-reloading
 show user
 show values
 show verbose
diff --git a/gdb/testsuite/gdb.base/gdbvars.exp b/gdb/testsuite/gdb.base/gdbvars.exp
index 72935d8..0499f6c 100644
--- a/gdb/testsuite/gdb.base/gdbvars.exp
+++ b/gdb/testsuite/gdb.base/gdbvars.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Fred Fish. (fnf at cygnus.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile "gdbvars"
 set srcfile  ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/gnu-ifunc.exp b/gdb/testsuite/gdb.base/gnu-ifunc.exp
index a92c354..a8b967a 100644
--- a/gdb/testsuite/gdb.base/gnu-ifunc.exp
+++ b/gdb/testsuite/gdb.base/gnu-ifunc.exp
@@ -48,7 +48,7 @@ set lib_o ${objdir}/${subdir}/${libfile}.o
 set lib_opts {}
 set exec_opts [list debug shlib=$lib_so]
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
@@ -127,20 +127,17 @@ gdb_test "info sym $expect_out(1,string)" "gnu_ifunc in section .*" "info sym <g
 # Test statically linked ifunc resolving during inferior start.
 # https://bugzilla.redhat.com/show_bug.cgi?id=624967
 
-if ![target_info exists gdb_stub] {
+# Compile $staticbinfile separately as it may exit on error (ld/12595).
 
-    # Compile $staticbinfile separately as it may exit on error (ld/12595).
-
-    if { [gdb_compile ${srcdir}/${subdir}/$libsrc $lib_o object {}] != ""
-	 || [gdb_compile "${srcdir}/${subdir}/$srcfile $lib_o" $staticbinfile executable {debug}] != "" } {
-	untested "Could not compile static executable $staticbinfile."
-	return -1
-    }
+if { [gdb_compile ${srcdir}/${subdir}/$libsrc $lib_o object {}] != ""
+     || [gdb_compile "${srcdir}/${subdir}/$srcfile $lib_o" $staticbinfile executable {debug}] != "" } {
+    untested "Could not compile static executable $staticbinfile."
+    return -1
+}
 
-    clean_restart $staticexecutable
+clean_restart $staticexecutable
 
-    gdb_breakpoint "gnu_ifunc"
-    gdb_breakpoint "main"
-    gdb_run_cmd
-    gdb_test "" "Breakpoint \[0-9\]*, main .*" "static gnu_ifunc"
-}
+gdb_breakpoint "gnu_ifunc"
+gdb_breakpoint "main"
+gdb_run_cmd
+gdb_test "" "Breakpoint \[0-9\]*, main .*" "static gnu_ifunc"
diff --git a/gdb/testsuite/gdb.base/gnu_vector.exp b/gdb/testsuite/gdb.base/gnu_vector.exp
index d052b58..a1443a5 100644
--- a/gdb/testsuite/gdb.base/gnu_vector.exp
+++ b/gdb/testsuite/gdb.base/gnu_vector.exp
@@ -18,15 +18,11 @@
 # Tests GDBs support for GNU vectors.
 # http://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 set testfile "gnu_vector"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/hashline1.exp b/gdb/testsuite/gdb.base/hashline1.exp
index 36ca8b2..d07f604 100644
--- a/gdb/testsuite/gdb.base/hashline1.exp
+++ b/gdb/testsuite/gdb.base/hashline1.exp
@@ -18,10 +18,6 @@
 # Test loading of line number information with absolute path in #line,
 # PR symtab/9465.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 # srcfile is in objdir because we need to machine generate it in order
 # to get the correct path in the #line directive.
 
diff --git a/gdb/testsuite/gdb.base/hashline2.exp b/gdb/testsuite/gdb.base/hashline2.exp
index 1042fd4..2edde40 100644
--- a/gdb/testsuite/gdb.base/hashline2.exp
+++ b/gdb/testsuite/gdb.base/hashline2.exp
@@ -18,10 +18,6 @@
 # Test loading of line number information with an absolute path with extra
 # /'s in #line, PR symtab/9465.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 # srcfile is in objdir because we need to machine generate it in order
 # to get the correct path in the #line directive.
 
diff --git a/gdb/testsuite/gdb.base/hashline3.exp b/gdb/testsuite/gdb.base/hashline3.exp
index 99e2a23..e471e51 100644
--- a/gdb/testsuite/gdb.base/hashline3.exp
+++ b/gdb/testsuite/gdb.base/hashline3.exp
@@ -18,10 +18,6 @@
 # Test loading of line number information with relative path in #line,
 # PR symtab/9465.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 # srcfile is in objdir because we need to machine generate it in order
 # to get the correct path in the #line directive.
 
diff --git a/gdb/testsuite/gdb.base/hbreak2.exp b/gdb/testsuite/gdb.base/hbreak2.exp
new file mode 100644
index 0000000..a11d8b6
--- /dev/null
+++ b/gdb/testsuite/gdb.base/hbreak2.exp
@@ -0,0 +1,603 @@
+#   Copyright 1988, 1990-1992, 1994-2000, 2002-2003, 2007-2012 Free
+#   Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Based on break.exp by Rob Savoye. (rob at cygnus.com)
+# Hardware breakpoint support by Maciej W. Rozycki and Daniel Jacobowitz.
+# Only one hardware breakpoint is set at a time as targets may limit
+# the number available.
+
+
+if { [prepare_for_testing hbreak2.exp "hbreak2" {break.c break1.c} {debug nowarnings}] } {
+    return -1
+}
+set srcfile break.c
+set srcfile1 break1.c
+
+if ![runto_main] then { fail "break tests suppressed" }
+delete_breakpoints
+
+#
+# Test whether the target supports hardware breakpoints at all.
+#
+gdb_test_multiple "hbreak main" "hardware breakpoint support" {
+    -re "No hardware breakpoint support in the target.*$gdb_prompt $" {
+	unsupported "hardware breakpoints"
+	return
+    }
+    -re "Hardware breakpoints used exceeds limit.*$gdb_prompt $" {
+	unsupported "hardware breakpoints"
+	return
+    }
+    -re "Hardware assisted breakpoint.*at.* file .*$srcfile, line.*$gdb_prompt $" {
+	pass "hardware breakpoint support"
+    }
+}
+gdb_run_cmd
+gdb_test_multiple "" "hardware breakpoint insertion" {
+    -re "Warning:\[\r\n\]+Cannot insert hardware breakpoint \[0-9\]+\.\[\r\n\]+Could not insert hardware breakpoints:\[\r\n\]+You may have requested too many hardware breakpoints/watchpoints\.\[\r\n\]+.*$gdb_prompt $" {
+	unsupported "hardware breakpoint insertion"
+	return
+    }
+    -re "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:.*\[\r\n\]+.*\[\t \]+if .argc.* \{.*$gdb_prompt $" {
+	pass "hardware breakpoint insertion"
+    }
+}
+delete_breakpoints
+
+#
+# Test simple hardware breakpoint setting commands.
+#
+
+#
+# Test break at function.
+#
+gdb_test "hbreak main" \
+    "Hardware assisted breakpoint.*at.* file .*$srcfile, line.*" \
+    "hardware breakpoint function"
+delete_breakpoints
+
+#
+# Test break at quoted function.
+#
+gdb_test "hbreak \"marker2\"" \
+    "Hardware assisted breakpoint.*at.* file .*$srcfile1, line.*" \
+    "hardware breakpoint quoted function"
+delete_breakpoints
+
+#
+# Test break at function in file.
+#
+gdb_test "hbreak $srcfile:factorial" \
+    "Hardware assisted breakpoint.*at.* file .*$srcfile, line.*" \
+    "hardware breakpoint function in file"
+delete_breakpoints
+
+set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
+
+#
+# Test break at line number.
+#
+# Note that the default source file is the last one whose source text
+# was printed.  For native debugging, before we've executed the
+# program, this is the file containing main, but for remote debugging,
+# it's wherever the processor was stopped when we connected to the
+# board.  So, to be sure, we do a list command.
+#
+gdb_test "list main" \
+    ".*main \\(argc, argv, envp\\).*" \
+    "use `list' to establish default source file"
+gdb_test "hbreak $bp_location1" \
+    "Hardware assisted breakpoint.*at.* file .*$srcfile, line $bp_location1\\." \
+    "hardware breakpoint line number"
+delete_breakpoints
+
+set bp_location2 [gdb_get_line_number "set breakpoint 2 here"]
+
+#
+# Test break at line number in file.
+#
+gdb_test "hbreak $srcfile:$bp_location2" \
+    "Hardware assisted breakpoint.*at.* file .*$srcfile, line $bp_location2\\." \
+    "hardware breakpoint line number in file"
+delete_breakpoints
+
+set bp_location3 [gdb_get_line_number "set breakpoint 3 here"]
+set bp_location4 [gdb_get_line_number "set breakpoint 4 here"]
+
+#
+# Test putting a break at the start of a multi-line if conditional.
+# Verify the breakpoint was put at the start of the conditional.
+#
+gdb_test "hbreak multi_line_if_conditional" \
+    "Hardware assisted breakpoint.*at.* file .*$srcfile, line $bp_location3\\." \
+    "hardware breakpoint at start of multi line if conditional"
+delete_breakpoints
+
+gdb_test "hbreak multi_line_while_conditional" \
+    "Hardware assisted breakpoint.*at.* file .*$srcfile, line $bp_location4\\." \
+    "hardware breakpoint at start of multi line while conditional"
+
+set bp_location6 [gdb_get_line_number "set breakpoint 6 here"]
+
+set main_line $bp_location6
+
+if {$hp_aCC_compiler} {
+    set proto "\\(int\\)"
+} else {
+    set proto ""
+}
+
+set bp_location7 [gdb_get_line_number "set breakpoint 7 here"]
+set bp_location8 [gdb_get_line_number "set breakpoint 8 here" $srcfile1]
+set bp_location9 [gdb_get_line_number "set breakpoint 9 here" $srcfile1]
+
+gdb_test "info break" \
+    "Num     Type\[ \]+Disp Enb Address\[ \]+What.*
+\[0-9\]+\[\t \]+hw breakpoint  keep y.* in multi_line_while_conditional at .*$srcfile:$bp_location4" \
+    "hardware breakpoint info"
+delete_breakpoints
+
+#
+# Run until the breakpoint at main is hit.  For non-stubs-using targets.
+#
+gdb_test "hbreak main" \
+    "Hardware assisted breakpoint.*at.* file .*$srcfile, line.*" \
+    "hardware breakpoint function (2)"
+gdb_run_cmd
+gdb_test "" \
+    "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*" \
+    "run until function breakpoint"
+delete_breakpoints
+
+#
+# Run until the breakpoint at a line number.
+#
+gdb_test "hbreak $bp_location1" \
+    "Hardware assisted breakpoint.*at.* file .*$srcfile, line $bp_location1\\." \
+    "hardware breakpoint line number (2)"
+gdb_test "continue" \
+    "Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:$bp_location1.*$bp_location1\[\t \]+printf.*factorial.*" \
+    "run until breakpoint set at a line number"
+delete_breakpoints
+
+#
+# Run until the breakpoint set in a function in a file.
+#
+gdb_test "hbreak $srcfile:factorial" \
+    "Hardware assisted breakpoint.*at.* file .*$srcfile, line.*" \
+    "hardware breakpoint function in file (2)"
+for {set i 6} {$i >= 1} {incr i -1} {
+    gdb_test "continue" \
+	"Continuing\\..*Breakpoint \[0-9\]+, factorial \\(value=$i\\) at .*$srcfile:$bp_location7.*$bp_location7\[\t \]+.*if .value > 1. \{.*" \
+	"run until file:function($i) breakpoint"
+}
+delete_breakpoints
+
+#
+# Run until the breakpoint set at a quoted function.
+#
+gdb_test "hbreak \"marker2\"" \
+    "Hardware assisted breakpoint.*at.* file .*$srcfile1, line.*" \
+    "hardware breakpoint quoted function (2)"
+gdb_test "continue" \
+    "Continuing\\..*Breakpoint \[0-9\]+, (0x\[0-9a-f\]+ in )?marker2 \\(a=43\\) at .*$srcfile1:($bp_location8|$bp_location9).*" \
+    "run until quoted breakpoint"
+delete_breakpoints
+#
+# Run until the file:function breakpoint at a line number in a file.
+#
+gdb_test "hbreak $srcfile:$bp_location2" \
+    "Hardware assisted breakpoint.*at.* file .*$srcfile, line $bp_location2\\." \
+    "hardware breakpoint line number in file (2)"
+gdb_test "continue" \
+    "Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:$bp_location2.*$bp_location2\[\t \]+argc = \\(argc == 12345\\);.*" \
+    "run until file:linenum breakpoint"
+delete_breakpoints
+
+# Test break at offset +1.
+set bp_location10 [gdb_get_line_number "set breakpoint 10 here"]
+
+gdb_test "hbreak +1" \
+    "Hardware assisted breakpoint.*at.* file .*$srcfile, line $bp_location10\\." \
+    "hardware breakpoint offset +1"
+
+# Check to see if breakpoint is hit when stepped onto.
+
+gdb_test "step" \
+    ".*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:$bp_location10.*$bp_location10\[\t \]+return argc;.*breakpoint 10 here.*" \
+    "step onto hardware breakpoint"
+delete_breakpoints
+
+# Check to see if breakpoint can be set on ending brace of function.
+set bp_location10a [gdb_get_line_number "set breakpoint 10a here"]
+
+gdb_test "hbreak $bp_location10a" \
+    "Hardware assisted breakpoint.*at.* file .*$srcfile, line $bp_location10a\\." \
+    "setting hardware breakpoint at }"
+
+gdb_test "continue" \
+    ".*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:$bp_location10a.*$bp_location10a\[\t \]+}.*breakpoint 10a here.*" \
+    "continue to hardware breakpoint at }"
+
+#
+# Delete all breakpoints so we can start over, course this can be a test too.
+#
+delete_breakpoints
+
+#
+# Test temporary breakpoint at function.
+#
+
+gdb_test "thbreak main" \
+    "Hardware assisted breakpoint.*at.* file .*$srcfile, line.*" \
+    "temporary hardware breakpoint function"
+delete_breakpoints
+
+#
+# Test break at function in file.
+#
+
+gdb_test "thbreak $srcfile:factorial" \
+    "Hardware assisted breakpoint.*at.* file .*$srcfile, line.*" \
+    "temporary hardware breakpoint function in file"
+delete_breakpoints
+
+#
+# Test break at line number.
+#
+gdb_test "thbreak $bp_location1" \
+    "Hardware assisted breakpoint.*at.* file .*$srcfile, line $bp_location1.*" \
+    "temporary hardware breakpoint line number #1"
+delete_breakpoints
+
+gdb_test "thbreak $bp_location6" \
+    "Hardware assisted breakpoint.*at.* file .*$srcfile, line $bp_location6.*" \
+    "temporary hardware breakpoint line number #2"
+delete_breakpoints
+
+#
+# Test break at line number in file.
+#
+gdb_test "thbreak $srcfile:$bp_location2" \
+    "Hardware assisted breakpoint.*at.* file .*$srcfile, line $bp_location2.*" \
+    "temporary hardware breakpoint line number in file #1"
+delete_breakpoints
+
+set bp_location11 [gdb_get_line_number "set breakpoint 11 here"]
+gdb_test "thbreak $srcfile:$bp_location11" \
+    "Hardware assisted breakpoint.*at.* file .*$srcfile, line $bp_location11.*" \
+    "temporary hardware breakpoint line number in file #2"
+
+#
+# Check to see what breakpoints are set (temporary this time).
+#
+gdb_test "info break" \
+    "Num     Type.*Disp Enb Address.*What.*\[\r\n\]
+\[0-9\]+\[\t \]+hw breakpoint  del.*y.*in main at .*$srcfile:$bp_location11.*" \
+    "temporary hardware breakpoint info"
+
+
+#***********
+
+if ![runto_main] then { fail "break tests suppressed" }
+
+# Verify that GDB responds gracefully when asked to set a breakpoint
+# on a nonexistent source line.
+#
+gdb_test_no_output "set breakpoint pending off"
+gdb_test "hbreak 999" \
+    "No line 999 in the current file." \
+    "hardware break on non-existent source line"
+
+# Run to the desired default location.  If not positioned here, the
+# tests below don't work.
+#
+gdb_test "until $bp_location1" "main .* at .*:$bp_location1.*" \
+    "until bp_location1"
+
+
+# Verify that GDB allows one to just say "hbreak", which is treated
+# as the "default" breakpoint.
+#
+gdb_test "hbreak" "Hardware assisted breakpoint \[0-9\]*.*" \
+    "hardware break on default location"
+
+# Verify that a "silent" breakpoint can be set, and that GDB is indeed
+# "silent" about its triggering.
+#
+if ![runto_main] then { fail "break tests suppressed" }
+
+gdb_test_multiple "hbreak $bp_location1" \
+    "set to-be-silent hardware break bp_location1" {
+	-re "Hardware assisted breakpoint (\[0-9\]*) at .*, line $bp_location1.*$gdb_prompt $" {
+	    pass "set to-be-silent hardware break bp_location1"
+	}
+    }
+
+gdb_test "commands $expect_out(1,string)\nsilent\nend" ">end" "set silent break bp_location1"
+
+gdb_test "info break $expect_out(1,string)" \
+    "\[0-9\]*\[ \t\]*hw breakpoint.*:$bp_location1\r\n\[ \t\]*silent.*" \
+    "info silent hardware break bp_location1"
+
+gdb_test "continue" "Continuing." \
+    "hit silent hardware break bp_location1"
+
+gdb_test "bt" "#0  main .* at .*:$bp_location1.*" \
+    "stopped for silent hardware break bp_location1"
+
+# Verify that GDB can at least parse a breakpoint with the
+# "thread" keyword.  (We won't attempt to test here that a
+# thread-specific breakpoint really triggers appropriately.
+# The gdb.threads subdirectory contains tests for that.)
+#
+set bp_location12 [gdb_get_line_number "set breakpoint 12 here"]
+gdb_test "hbreak $bp_location12 thread 999" "Unknown thread 999.*" \
+    "thread-specific hardware breakpoint on non-existent thread disallowed"
+
+gdb_test "hbreak $bp_location12 thread foo" \
+    "Junk after thread keyword.*" \
+    "thread-specific hardware breakpoint on bogus thread ID disallowed"
+
+# Verify that GDB responds gracefully to a breakpoint command with
+# trailing garbage.
+#
+gdb_test "hbreak $bp_location12 foo" \
+    "malformed linespec error: unexpected string, \"foo\".*" \
+    "hardware breakpoint with trailing garbage disallowed"
+
+# Verify that GDB responds gracefully to a "clear" command that has
+# no matching breakpoint.  (First, get us off the current source line,
+# which we know has a breakpoint.)
+#
+gdb_test "next" "marker1.*" "step over hardware breakpoint"
+
+gdb_test "clear 81" "No breakpoint at 81.*" \
+    "clear line has no breakpoint disallowed"
+
+gdb_test "clear" "No breakpoint at this line.*" \
+    "clear current line has no breakpoint disallowed"
+delete_breakpoints
+
+# Verify that a breakpoint can be set via a convenience variable.
+#
+gdb_test_no_output "set \$foo=$bp_location11" \
+    "set convenience variable \$foo to bp_location11"
+
+gdb_test "hbreak \$foo" \
+    "Hardware assisted breakpoint (\[0-9\]*) at .*, line $bp_location11.*" \
+    "set hardware breakpoint via convenience variable"
+delete_breakpoints
+
+# Verify that GDB responds gracefully to an attempt to set a
+# breakpoint via a convenience variable whose type is not integer.
+#
+gdb_test_no_output "set \$foo=81.5" \
+    "set convenience variable \$foo to 81.5"
+
+gdb_test "hbreak \$foo" \
+    "Convenience variables used in line specs must have integer values.*" \
+    "set hardware breakpoint via non-integer convenience variable disallowed"
+
+# Verify that we can set and trigger a breakpoint in a user-called function.
+#
+gdb_test "hbreak marker2" \
+    "Hardware assisted breakpoint (\[0-9\]*) at .*, line ($bp_location8|$bp_location9).*" \
+    "set hardware breakpoint on to-be-called function"
+
+gdb_test "print marker2(99)" \
+    "The program being debugged stopped while in a function called from GDB.\r\nEvaluation of the expression containing the function\r\n.marker2$proto. will be abandoned.\r\nWhen the function is done executing, GDB will silently stop.*" \
+    "hit hardware breakpoint on called function"
+
+# As long as we're stopped (breakpointed) in a called function,
+# verify that we can successfully backtrace & such from here.
+#
+# In this and the following test, the _sr4export check apparently is needed
+# for hppa*-*-hpux.
+#
+gdb_test_multiple "bt" "backtrace while in called function" {
+    -re "#0\[ \t\]*($hex in )?marker2.*:($bp_location8|$bp_location9)\r\n#1.*_sr4export.*$gdb_prompt $" {
+	pass "backtrace while in called function"
+    }
+    -re "#0\[ \t\]*($hex in )?marker2.*:($bp_location8|$bp_location9)\r\n#1.*function called from gdb.*$gdb_prompt $" {
+	pass "backtrace while in called function"
+    }
+}
+
+# Return from the called function.  For remote targets, it's important to do
+# this before runto_main, which otherwise may silently stop on the dummy
+# breakpoint inserted by GDB at the program's entry point.
+#
+gdb_test_multiple "finish" "finish from called function" {
+    -re "Run till exit from .*marker2.* at .*($bp_location8|$bp_location9)\r\n.* in _sr4export.*$gdb_prompt $" {
+	pass "finish from called function"
+    }
+    -re "Run till exit from .*marker2.* at .*($bp_location8|$bp_location9)\r\n.*function called from gdb.*$gdb_prompt $" {
+	pass "finish from called function"
+    }
+    -re "Run till exit from .*marker2.* at .*($bp_location8|$bp_location9)\r\n.*Value returned.*$gdb_prompt $" {
+	pass "finish from called function"
+    }
+}
+
+#********
+
+
+#
+# Test "next" over recursive function call.
+#
+
+proc test_next_with_recursion {} {
+    global gdb_prompt
+    global decimal
+    global binfile
+
+    delete_breakpoints
+
+    # Can't set a hardware breakpoint without a live target, so do it now
+    # before it's killed below.
+    gdb_test "hbreak factorial" \
+	"Hardware assisted breakpoint $decimal at .*" \
+	"hardware break at factorial"
+
+    gdb_test "kill" "" "kill program" \
+	"Kill the program being debugged.*y or n. $" "y"
+
+    # Run until we call factorial with 6
+
+    gdb_run_cmd
+    if [gdb_test "" \
+	"Break.* factorial .value=6. .*" \
+	"run to factorial(6)"] then { gdb_suppress_tests }
+
+    # Continue until we call factorial recursively with 5.
+
+    if [gdb_test "continue" \
+	"Continuing.*Break.* factorial .value=5. .*" \
+	"continue to factorial(5)"] then { gdb_suppress_tests }
+
+    # Do a backtrace just to confirm how many levels deep we are.
+
+    if [gdb_test "backtrace" \
+	"#0\[ \t\]+ factorial .value=5..*" \
+	"backtrace from factorial(5)"] then { gdb_suppress_tests }
+
+    # Now a "next" should position us at the recursive call, which
+    # we will be performing with 4.
+
+    if [gdb_test "next" \
+	".* factorial .value - 1.;.*" \
+	"next to recursive call"] then { gdb_suppress_tests }
+
+    # Disable the breakpoint at the entry to factorial by deleting them all.
+    # The "next" should run until we return to the next line from this
+    # recursive call to factorial with 4.
+    # Buggy versions of gdb will stop instead at the innermost frame on
+    # the line where we are trying to "next" to.
+
+    delete_breakpoints
+
+    if [istarget "mips*tx39-*"] {
+	set timeout 60
+    }
+    # We used to set timeout here for all other targets as well.  This
+    # is almost certainly wrong.  The proper timeout depends on the
+    # target system in use, and how we communicate with it, so there
+    # is no single value appropriate for all targets.  The timeout
+    # should be established by the Dejagnu config file(s) for the
+    # board, and respected by the test suite.
+    #
+    # For example, if I'm running GDB over an SSH tunnel talking to a
+    # portmaster in California talking to an ancient 68k board running
+    # a crummy ROM monitor (a situation I can only wish were
+    # hypothetical), then I need a large timeout.  But that's not the
+    # kind of knowledge that belongs in this file.
+
+    gdb_test next "\[0-9\]*\[\t \]+return \\(value\\);.*" \
+	"next over recursive call"
+
+    # OK, we should be back in the same stack frame we started from.
+    # Do a backtrace just to confirm.
+
+    set result [gdb_test "backtrace" \
+	"#0\[ \t\]+ factorial .value=120.*\r\n#1\[ \t\]+ \[0-9a-fx\]+ in factorial .value=6..*" \
+	"backtrace from factorial(5.1)"]
+    if { $result != 0 } { gdb_suppress_tests }
+
+    if [target_info exists gdb,noresults] { gdb_suppress_tests }
+    gdb_continue_to_end "recursive next test"
+    gdb_stop_suppressing_tests;
+}
+
+test_next_with_recursion
+
+
+#********
+
+# Build a new file with optimization enabled so that we can try breakpoints
+# on targets with optimized prologues.
+
+if { [prepare_for_testing hbreak2.exp "hbreak2o2" {break.c break1.c} {debug nowarnings optimize=-O2}] } {
+    return -1
+}
+
+if ![runto_main] then { fail "break tests suppressed" }
+delete_breakpoints
+
+#
+# Test break at function.
+#
+gdb_test "hbreak main" \
+    "Hardware assisted breakpoint.*at.* file .*, line.*" \
+    "hardware breakpoint function, optimized file"
+
+#
+# Run until the breakpoint at main is hit.  For non-stubs-using targets.
+#
+gdb_run_cmd
+gdb_test_multiple "" "run until hardware function breakpoint, optimized file" {
+    -re "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*$gdb_prompt $" {
+	pass "run until hardware function breakpoint, optimized file"
+    }
+    -re "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$gdb_prompt $" {
+	pass "run until hardware function breakpoint, optimized file (code motion)"
+    }
+}
+delete_breakpoints
+
+#
+# Test break at function.
+#
+gdb_test "hbreak marker4" \
+    "Hardware assisted breakpoint.*at.* file .*$srcfile1, line.*" \
+    "hardware breakpoint small function, optimized file"
+
+#
+# Run until the breakpoint at a small function.
+#
+
+#
+# Add a second pass pattern.  The behavior differs here between stabs
+# and dwarf for one-line functions.  Stabs preserves two line symbols
+# (one before the prologue and one after) with the same line number,
+# but dwarf regards these as duplicates and discards one of them.
+# Therefore the address after the prologue (where the breakpoint is)
+# has no exactly matching line symbol, and GDB reports the breakpoint
+# as if it were in the middle of a line rather than at the beginning.
+
+set bp_location13 [gdb_get_line_number "set breakpoint 13 here" $srcfile1]
+set bp_location14 [gdb_get_line_number "set breakpoint 14 here" $srcfile1]
+
+gdb_test_multiple "continue" \
+    "run until hardware breakpoint set at small function, optimized file" {
+	-re "Breakpoint $decimal, marker4 \\(d=(d at entry=)?177601976\\) at .*$srcfile1:$bp_location13\[\r\n\]+$bp_location13\[\t \]+void marker4.*" {
+	    pass "run until hardware breakpoint set at small function, optimized file"
+	}
+	-re "Breakpoint $decimal, $hex in marker4 \\(d=(d at entry=)?177601976\\) at .*$srcfile1:$bp_location13\[\r\n\]+$bp_location13\[\t \]+void marker4.*" {
+	    pass "run until hardware breakpoint set at small function, optimized file"
+	}
+	-re "Breakpoint $decimal, marker4 \\(d=(d at entry=)?177601976\\) at .*$srcfile1:$bp_location14\[\r\n\]+$bp_location14\[\t \]+void marker4.*" {
+	    # marker4() is defined at line 46 when compiled with -DPROTOTYPES
+	    pass "run until hardware breakpoint set at small function, optimized file (line bp_location14)"
+	}
+	-re "Breakpoint $decimal, factorial \\(.*\\) .*\{\r\n$gdb_prompt" {
+	    # GCC 4.3 emits bad line number information - see gcc/36748.
+	    if { [test_compiler_info "gcc-4-3-*"] } {
+		setup_xfail *-*-*
+	    }
+	    fail "run until hardware breakpoint set at small function, optimized file"
+	}
+}
diff --git a/gdb/testsuite/gdb.base/help.exp b/gdb/testsuite/gdb.base/help.exp
index 819643d..c9b9c88 100644
--- a/gdb/testsuite/gdb.base/help.exp
+++ b/gdb/testsuite/gdb.base/help.exp
@@ -24,7 +24,7 @@
 gdb_start
 
 # force the height of the debugger to be pretty large so no pagers get used
-gdb_test_no_output "set height 400" "test set height"
+gdb_test_no_output "set height 500" "test set height"
 
 # use a larger expect input buffer for long help outputs.
 # test help add-symbol-file
@@ -44,15 +44,15 @@ gdb_test "help append binary value" "Append the value of an expression to a raw
 # test help attach
 gdb_test "help attach" "Attach to a process or file outside of GDB\.\[\r\n\]+This command attaches to another target, of the same type as your last\[\r\n\]+\"target\" command \\(\"info files\" will show your target stack\\)\.\[\r\n\]+The command may take as argument a process id or a device file\.\[\r\n\]+For a process id, you must have permission to send the process a signal,\[\r\n\]+and it must have the same effective uid as the debugger\.\[\r\n\]+When using \"attach\" with a process id, the debugger finds the\[\r\n\]+program running in the process, looking first in the current working\[\r\n\]+directory, or \\(if not found there\\) using the source file search path\[\r\n\]+\\(see the \"directory\" command\\)\.  You can also use the \"file\" command\[\r\n\]+to specify the program, and to load its symbol table\." "help attach"
 # test help breakpoint "b" abbreviation
-gdb_test "help b" "Set breakpoint at specified line or function\.\[\r\n\]+break \\\[LOCATION\] \\\[thread THREADNUM\] \\\[if CONDITION\]\[\r\n\]+LOCATION may be a line number, function name, or \"\[*\]\" and an address\.\[\r\n\]+If a line number is specified, break at start of code for that line\.\[\r\n\]+If a function is specified, break at start of code for that function\.\[\r\n\]+If an address is specified, break at that exact address\.\[\r\n\]+With no LOCATION, uses current execution address of the selected\[\r\n\]+stack frame\.  This is useful for breaking on return to a stack frame\.\[\r\n\]+THREADNUM is the number from \"info threads\"\.\[\r\n\]+CONDITION is a boolean expression\.\[\r\n\]+Multiple breakpoints at one place are permitted, and useful if their\[\r\n\]+conditions are different\.\[\r\n\]+Do \"help breakpoints\" for info on other commands dealing with breakpoints\." "help breakpoint \"b\" abbreviation"
+gdb_test "help b" "Set breakpoint at specified line or function\.\[\r\n\]+break \\\[PROBE_MODIFIER\] \\\[LOCATION\] \\\[thread THREADNUM\] \\\[if CONDITION\]\[\r\n\]+PROBE_MODIFIER shall be present if the command is to be placed in a\[\r\n\]+probe point\.  Accepted values are \\`-probe\\' \\(for a generic, automatically\[\r\n\]+guessed probe type\\) or \\`-probe-stap\\' \\(for a SystemTap probe\\)\.\[\r\n\]+LOCATION may be a line number, function name, or \"\[*\]\" and an address\.\[\r\n\]+If a line number is specified, break at start of code for that line\.\[\r\n\]+If a function is specified, break at start of code for that function\.\[\r\n\]+If an address is specified, break at that exact address\.\[\r\n\]+With no LOCATION, uses current execution address of the selected\[\r\n\]+stack frame\.  This is useful for breaking on return to a stack frame\.\[\r\n\]+THREADNUM is the number from \"info threads\"\.\[\r\n\]+CONDITION is a boolean expression\.\[\r\n\]+Multiple breakpoints at one place are permitted, and useful if their\[\r\n\]+conditions are different\.\[\r\n\]+Do \"help breakpoints\" for info on other commands dealing with breakpoints\." "help breakpoint \"b\" abbreviation"
 # test help breakpoint "br" abbreviation
-gdb_test "help br" "Set breakpoint at specified line or function\.\[\r\n\]+break \\\[LOCATION\] \\\[thread THREADNUM\] \\\[if CONDITION\]\[\r\n\]+LOCATION may be a line number, function name, or \"\[*\]\" and an address\.\[\r\n\]+If a line number is specified, break at start of code for that line\.\[\r\n\]+If a function is specified, break at start of code for that function\.\[\r\n\]+If an address is specified, break at that exact address\.\[\r\n\]+With no LOCATION, uses current execution address of the selected\[\r\n\]+stack frame\.  This is useful for breaking on return to a stack frame\.\[\r\n\]+THREADNUM is the number from \"info threads\"\.\[\r\n\]+CONDITION is a boolean expression\.\[\r\n\]+Multiple breakpoints at one place are permitted, and useful if their\[\r\n\]+conditions are different\.\[\r\n\]+Do \"help breakpoints\" for info on other commands dealing with breakpoints\." "help breakpoint \"br\" abbreviation"
+gdb_test "help br" "Set breakpoint at specified line or function\.\[\r\n\]+break \\\[PROBE_MODIFIER\] \\\[LOCATION\] \\\[thread THREADNUM\] \\\[if CONDITION\]\[\r\n\]+PROBE_MODIFIER shall be present if the command is to be placed in a\[\r\n\]+probe point\.  Accepted values are \\`-probe\\' \\(for a generic, automatically\[\r\n\]+guessed probe type\\) or \\`-probe-stap\\' \\(for a SystemTap probe\\)\.\[\r\n\]+LOCATION may be a line number, function name, or \"\[*\]\" and an address\.\[\r\n\]+If a line number is specified, break at start of code for that line\.\[\r\n\]+If a function is specified, break at start of code for that function\.\[\r\n\]+If an address is specified, break at that exact address\.\[\r\n\]+With no LOCATION, uses current execution address of the selected\[\r\n\]+stack frame\.  This is useful for breaking on return to a stack frame\.\[\r\n\]+THREADNUM is the number from \"info threads\"\.\[\r\n\]+CONDITION is a boolean expression\.\[\r\n\]+Multiple breakpoints at one place are permitted, and useful if their\[\r\n\]+conditions are different\.\[\r\n\]+Do \"help breakpoints\" for info on other commands dealing with breakpoints\." "help breakpoint \"br\" abbreviation"
 # test help breakpoint "bre" abbreviation
-gdb_test "help bre" "Set breakpoint at specified line or function\.\[\r\n\]+break \\\[LOCATION\] \\\[thread THREADNUM\] \\\[if CONDITION\]\[\r\n\]+LOCATION may be a line number, function name, or \"\[*\]\" and an address\.\[\r\n\]+If a line number is specified, break at start of code for that line\.\[\r\n\]+If a function is specified, break at start of code for that function\.\[\r\n\]+If an address is specified, break at that exact address\.\[\r\n\]+With no LOCATION, uses current execution address of the selected\[\r\n\]+stack frame\.  This is useful for breaking on return to a stack frame\.\[\r\n\]+THREADNUM is the number from \"info threads\"\.\[\r\n\]+CONDITION is a boolean expression\.\[\r\n\]+Multiple breakpoints at one place are permitted, and useful if their\[\r\n\]+conditions are different\.\[\r\n\]+Do \"help breakpoints\" for info on other commands dealing with breakpoints\." "help breakpoint \"bre\" abbreviation"
+gdb_test "help bre" "Set breakpoint at specified line or function\.\[\r\n\]+break \\\[PROBE_MODIFIER\] \\\[LOCATION\] \\\[thread THREADNUM\] \\\[if CONDITION\]\[\r\n\]+PROBE_MODIFIER shall be present if the command is to be placed in a\[\r\n\]+probe point\.  Accepted values are \\`-probe\\' \\(for a generic, automatically\[\r\n\]+guessed probe type\\) or \\`-probe-stap\\' \\(for a SystemTap probe\\)\.\[\r\n\]+LOCATION may be a line number, function name, or \"\[*\]\" and an address\.\[\r\n\]+If a line number is specified, break at start of code for that line\.\[\r\n\]+If a function is specified, break at start of code for that function\.\[\r\n\]+If an address is specified, break at that exact address\.\[\r\n\]+With no LOCATION, uses current execution address of the selected\[\r\n\]+stack frame\.  This is useful for breaking on return to a stack frame\.\[\r\n\]+THREADNUM is the number from \"info threads\"\.\[\r\n\]+CONDITION is a boolean expression\.\[\r\n\]+Multiple breakpoints at one place are permitted, and useful if their\[\r\n\]+conditions are different\.\[\r\n\]+Do \"help breakpoints\" for info on other commands dealing with breakpoints\." "help breakpoint \"bre\" abbreviation"
 # test help breakpoint "brea" abbreviation
-gdb_test "help brea" "Set breakpoint at specified line or function\.\[\r\n\]+break \\\[LOCATION\] \\\[thread THREADNUM\] \\\[if CONDITION\]\[\r\n\]+LOCATION may be a line number, function name, or \"\[*\]\" and an address\.\[\r\n\]+If a line number is specified, break at start of code for that line\.\[\r\n\]+If a function is specified, break at start of code for that function\.\[\r\n\]+If an address is specified, break at that exact address\.\[\r\n\]+With no LOCATION, uses current execution address of the selected\[\r\n\]+stack frame\.  This is useful for breaking on return to a stack frame\.\[\r\n\]+THREADNUM is the number from \"info threads\"\.\[\r\n\]+CONDITION is a boolean expression\.\[\r\n\]+Multiple breakpoints at one place are permitted, and useful if their\[\r\n\]+conditions are different\.\[\r\n\]+Do \"help breakpoints\" for info on other commands dealing with breakpoints\." "help breakpoint \"brea\" abbreviation"
+gdb_test "help brea" "Set breakpoint at specified line or function\.\[\r\n\]+break \\\[PROBE_MODIFIER\] \\\[LOCATION\] \\\[thread THREADNUM\] \\\[if CONDITION\]\[\r\n\]+PROBE_MODIFIER shall be present if the command is to be placed in a\[\r\n\]+probe point\.  Accepted values are \\`-probe\\' \\(for a generic, automatically\[\r\n\]+guessed probe type\\) or \\`-probe-stap\\' \\(for a SystemTap probe\\)\.\[\r\n\]+LOCATION may be a line number, function name, or \"\[*\]\" and an address\.\[\r\n\]+If a line number is specified, break at start of code for that line\.\[\r\n\]+If a function is specified, break at start of code for that function\.\[\r\n\]+If an address is specified, break at that exact address\.\[\r\n\]+With no LOCATION, uses current execution address of the selected\[\r\n\]+stack frame\.  This is useful for breaking on return to a stack frame\.\[\r\n\]+THREADNUM is the number from \"info threads\"\.\[\r\n\]+CONDITION is a boolean expression\.\[\r\n\]+Multiple breakpoints at one place are permitted, and useful if their\[\r\n\]+conditions are different\.\[\r\n\]+Do \"help breakpoints\" for info on other commands dealing with breakpoints\." "help breakpoint \"brea\" abbreviation"
 # test help breakpoint "break" abbreviation
-gdb_test "help break" "Set breakpoint at specified line or function\.\[\r\n\]+break \\\[LOCATION\] \\\[thread THREADNUM\] \\\[if CONDITION\]\[\r\n\]+LOCATION may be a line number, function name, or \"\[*\]\" and an address\.\[\r\n\]+If a line number is specified, break at start of code for that line\.\[\r\n\]+If a function is specified, break at start of code for that function\.\[\r\n\]+If an address is specified, break at that exact address\.\[\r\n\]+With no LOCATION, uses current execution address of the selected\[\r\n\]+stack frame\.  This is useful for breaking on return to a stack frame\.\[\r\n\]+THREADNUM is the number from \"info threads\"\.\[\r\n\]+CONDITION is a boolean expression\.\[\r\n\]+Multiple breakpoints at one place are permitted, and useful if their\[\r\n\]+conditions are different\.\[\r\n\]+Do \"help breakpoints\" for info on other commands dealing with breakpoints\." "help breakpoint \"break\" abbreviation"
+gdb_test "help break" "Set breakpoint at specified line or function\.\[\r\n\]+break \\\[PROBE_MODIFIER\] \\\[LOCATION\] \\\[thread THREADNUM\] \\\[if CONDITION\]\[\r\n\]+PROBE_MODIFIER shall be present if the command is to be placed in a\[\r\n\]+probe point\.  Accepted values are \\`-probe\\' \\(for a generic, automatically\[\r\n\]+guessed probe type\\) or \\`-probe-stap\\' \\(for a SystemTap probe\\)\.\[\r\n\]+LOCATION may be a line number, function name, or \"\[*\]\" and an address\.\[\r\n\]+If a line number is specified, break at start of code for that line\.\[\r\n\]+If a function is specified, break at start of code for that function\.\[\r\n\]+If an address is specified, break at that exact address\.\[\r\n\]+With no LOCATION, uses current execution address of the selected\[\r\n\]+stack frame\.  This is useful for breaking on return to a stack frame\.\[\r\n\]+THREADNUM is the number from \"info threads\"\.\[\r\n\]+CONDITION is a boolean expression\.\[\r\n\]+Multiple breakpoints at one place are permitted, and useful if their\[\r\n\]+conditions are different\.\[\r\n\]+Do \"help breakpoints\" for info on other commands dealing with breakpoints\." "help breakpoint \"break\" abbreviation"
 # test help breakpoints
 test_class_help "breakpoints" {"Making program stop at certain points\.\[\r\n\]+"}
 # test help backtrace "bt" abbreviation
@@ -240,8 +240,6 @@ gdb_test "help info args" "Argument variables of current stack frame\." "help in
 gdb_test "help info breakpoints" \
     "Status of specified breakpoints .all user-settable breakpoints if no argument.*\[\r\n\]+breakpoint set\." \
     "help info breakpoints"
-# test help info catch
-gdb_test "help info catch" "Exceptions that can be caught in the current stack frame\." "help info catch"
 # test help info copying
 gdb_test "help info copying" "Conditions for redistributing copies of GDB\." "help info copying"
 # test help info display
@@ -460,8 +458,6 @@ gdb_test "help set print vtbl" "Set printing of C\[+\]+ virtual function tables\
 gdb_test "help set prompt" "Set gdb's prompt" "help set prompt"
 # test help set radix
 gdb_test "help set radix" "Set default input and output number radices\.\[\r\n\]+Use \'set input-radix\' or \'set output-radix\' to independently set each\.\[\r\n\]+Without an argument, sets both radices back to the default value of 10\." "help set radix"
-# test help set symbol-reloading
-gdb_test "help set symbol-reloading" "Set dynamic symbol table reloading multiple times in one run\." "help set symbol-reloading"
 # test help set variable
 gdb_test "help set variable" "Evaluate expression EXP and assign result to variable VAR, using assignment\[\r\n\]+syntax appropriate for the current language \\(VAR = EXP or VAR := EXP for\[\r\n\]+example\\)\.  VAR may be a debugger \"convenience\" variable \\(names starting\[\r\n\]+with \\\$\\), a register \\(a few standard names starting with \\\$\\), or an actual\[\r\n\]+variable in the program being debugged\.  EXP is any valid expression\.\[\r\n\]+This may usually be abbreviated to simply \"set\"\." "help set variable"
 # test help set verbose
@@ -573,10 +569,8 @@ gdb_test "help show print vtbl" "Show printing of C\[+\]+ virtual function table
 gdb_test "help show prompt" "Show gdb's prompt" "help show prompt"
 # test help show radix
 gdb_test "help show radix" "Show the default input and output number radices\.\[\r\n\]+Use \'show input-radix\' or \'show output-radix\' to independently show each\." "help show radix"
-# test help show symbol-reloading
-gdb_test "help show symbol-reloading" "Show dynamic symbol table reloading multiple times in one run\." "help show symbol-reloading"
 # test help show user
-gdb_test "help show user" "Show definitions of user defined commands\.\[\r\n\]+Argument is the name of the user defined command\.\[\r\n\]+With no argument, show definitions of all user defined commands\." "help show user"
+gdb_test "help show user" "Show definitions of non-python user defined commands\.\[\r\n\]+Argument is the name of the user defined command\.\[\r\n\]+With no argument, show definitions of all user defined commands\." "help show user"
 # test help show values
 gdb_test "help show values" "Elements of value history around item number IDX \\(or last ten\\)\." "help show values"
 # test help show verbose
diff --git a/gdb/testsuite/gdb.base/huge.exp b/gdb/testsuite/gdb.base/huge.exp
index 7196116..78ae6cd 100644
--- a/gdb/testsuite/gdb.base/huge.exp
+++ b/gdb/testsuite/gdb.base/huge.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Michael Snyder (msnyder at redhat.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 # Define if you want to skip this test
 # (could be very time-consuming on remote targets with slow connection).
diff --git a/gdb/testsuite/gdb.base/ifelse.exp b/gdb/testsuite/gdb.base/ifelse.exp
index d452c5d..cb9f508 100644
--- a/gdb/testsuite/gdb.base/ifelse.exp
+++ b/gdb/testsuite/gdb.base/ifelse.exp
@@ -16,10 +16,6 @@
 # This test checks that the if .. else .. end construct works and may
 # contain empty bodies without crashing.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 gdb_exit
 gdb_start
 
diff --git a/gdb/testsuite/gdb.base/inferior-died.c b/gdb/testsuite/gdb.base/inferior-died.c
new file mode 100644
index 0000000..ce9dcea
--- /dev/null
+++ b/gdb/testsuite/gdb.base/inferior-died.c
@@ -0,0 +1,37 @@
+/* Test for fork-related gdb bug
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <stdlib.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+void function(void)
+{
+  exit (0);			/* Break here */
+}
+
+int main()
+{
+  pid_t child = fork ();
+
+  if (child == 0)
+    function ();
+  else
+    waitpid (child, NULL, 0);
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.base/inferior-died.exp b/gdb/testsuite/gdb.base/inferior-died.exp
new file mode 100644
index 0000000..976a14f
--- /dev/null
+++ b/gdb/testsuite/gdb.base/inferior-died.exp
@@ -0,0 +1,71 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+if { [is_remote target] || ![isnative] } then {
+    unsupported "inferior-died.exp"
+    continue
+}
+
+# Until "set follow-fork-mode" and "catch fork" are implemented on
+# other targets...
+#
+if {![istarget "hppa*-hp-hpux*"] && ![istarget "*-*-linux*"]} then {
+    unsupported "inferior-died.exp"
+    continue
+}
+
+if { ![support_displaced_stepping] } {
+    unsupported "inferior-died.exp"
+    return -1
+}
+
+set testfile "inferior-died"
+set srcfile ${testfile}.c
+set binfile ${objdir}/${subdir}/${testfile}
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${testfile}.c] } {
+    return -1
+}
+
+gdb_test_no_output "set detach-on-fork off"
+gdb_test_no_output "set target-async on"
+gdb_test_no_output "set non-stop on"
+
+if ![runto_main] {
+    return
+}
+
+set line [gdb_get_line_number "Break here"]
+gdb_breakpoint $srcfile:$line
+
+gdb_continue_to_breakpoint "breakpoint"
+
+gdb_test "inferior 2" "Switching to inferior 2.*"
+
+# The inferior 1 exit may come unexpectedly in any moment.
+set test "continue"
+set seen 0
+gdb_test_multiple $test $test {
+    -re "($gdb_prompt |\\\[Inferior \[^\r\n\]* exited normally\\\])" {
+	incr seen
+	if {$seen < 3} {
+	    exp_continue
+	}
+	pass $test
+    }
+}
+
+# Internal error may show up after all the messages above.
+gdb_test "p 1" " = 1"
diff --git a/gdb/testsuite/gdb.base/info-fun-solib.c b/gdb/testsuite/gdb.base/info-fun-solib.c
new file mode 100644
index 0000000..8359406
--- /dev/null
+++ b/gdb/testsuite/gdb.base/info-fun-solib.c
@@ -0,0 +1,20 @@
+/* Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+int
+foo (void)
+{
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.base/info-fun.c b/gdb/testsuite/gdb.base/info-fun.c
new file mode 100644
index 0000000..711f6eb
--- /dev/null
+++ b/gdb/testsuite/gdb.base/info-fun.c
@@ -0,0 +1,22 @@
+/* Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+extern int foo (void);
+
+int
+main ()
+{
+  return foo ();
+}
diff --git a/gdb/testsuite/gdb.base/info-fun.exp b/gdb/testsuite/gdb.base/info-fun.exp
new file mode 100644
index 0000000..2b43652
--- /dev/null
+++ b/gdb/testsuite/gdb.base/info-fun.exp
@@ -0,0 +1,84 @@
+# Copyright 2012 Free Software Foundation, Inc.
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+if { [skip_shlib_tests] || [is_remote target] } {
+    return 0
+}
+
+# Library file.
+set libname "info-fun-solib"
+set srcfile_lib ${srcdir}/${subdir}/${libname}.c
+set binfile_lib ${objdir}/${subdir}/${libname}.so
+set lib_flags {}
+# Binary file.
+set testfile "info-fun"
+set srcfile ${srcdir}/${subdir}/${testfile}.c
+set executable ${testfile}
+set binfile ${objdir}/${subdir}/${executable}
+set bin_flags [list debug shlib=${binfile_lib}]
+
+if [get_compiler_info] {
+    return -1
+}
+
+# SEP must be last for the possible `unsupported' error path.
+foreach libsepdebug {NO IN SEP} { with_test_prefix "$libsepdebug" {
+
+    set sep_lib_flags $lib_flags
+    if {$libsepdebug != "NO"} {
+	lappend sep_lib_flags {debug}
+    }
+    if { [gdb_compile_shlib ${srcfile_lib} ${binfile_lib} $sep_lib_flags] != ""
+	 || [gdb_compile ${srcfile} ${binfile} executable $bin_flags] != "" } {
+      untested "Could not compile $binfile_lib or $binfile."
+      return -1
+    }
+
+    if {$libsepdebug == "SEP"} {
+	if {[gdb_gnu_strip_debug $binfile_lib] != 0} {
+	    unsupported "Could not split debug of $binfile_lib."
+	    return
+	} else {
+	    pass "split solib"
+	}
+    }
+
+    clean_restart $executable
+
+    if ![runto_main] then {
+      fail "Can't run to main"
+      return 0
+    }
+
+    set match_str {All functions matching regular expression "foo":[\r\n]*}
+    if { "$libsepdebug" != "NO"  } {
+	append match_str {File .*/info-fun-solib[.]c:[\r\n]*}
+	append match_str {int foo\(void\);[\r\n]*}
+    }
+    append match_str {Non-debugging symbols:[\r\n]*}
+    # Note: Targets like {m68k,ppc64,s390x}-linux also have, e.g.,
+    # 00000011.plt_call.foo+0 (m68k).
+    set plt_foo_match "($hex \[^\r\n\]*plt\[^\r\n\]*foo\[^\r\n\]*\[\r\n\]*)?"
+    append match_str $plt_foo_match
+    # This text we want to match precisely.
+    append match_str "$hex *foo(@plt)?\[\r\n\]*"
+    # Watch for again to not have to worry about the order of appearance.
+    append match_str $plt_foo_match
+    if { "$libsepdebug" == "NO"  } {
+	# Note: The ".?" is for targets like m68k-linux that have ".foo" here.
+	append match_str "$hex *.?foo\[\r\n\]*"
+    }
+
+    gdb_test "info fun foo" "$match_str"
+}}
diff --git a/gdb/testsuite/gdb.base/info-macros.exp b/gdb/testsuite/gdb.base/info-macros.exp
index d175e9f..c87f104 100644
--- a/gdb/testsuite/gdb.base/info-macros.exp
+++ b/gdb/testsuite/gdb.base/info-macros.exp
@@ -16,14 +16,15 @@
 set testfile "info-macros"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
-get_compiler_info ${binfile}
-if [test_compiler_info gcc*] {
-    lappend options additional_flags=-g3
-} else {
+
+get_compiler_info
+if ![test_compiler_info gcc*] {
   untested ${testfile}.exp
   return -1
 }
 
+set options "debug additional_flags=-g3"
+
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} $options] } {
     untested ${testfile}.exp
     return -1
diff --git a/gdb/testsuite/gdb.base/info-os.c b/gdb/testsuite/gdb.base/info-os.c
new file mode 100644
index 0000000..1590a9b
--- /dev/null
+++ b/gdb/testsuite/gdb.base/info-os.c
@@ -0,0 +1,147 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2011, 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <sys/shm.h>
+#include <sys/sem.h>
+#include <sys/msg.h>
+#include <stdio.h>
+#include <pthread.h>
+#include <arpa/inet.h>
+#include <sys/socket.h>
+
+static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+
+void *
+thread_proc (void *args)
+{
+  pthread_mutex_lock (&mutex);
+  pthread_mutex_unlock (&mutex);
+}
+
+int
+main (void)
+{
+  const int flags = IPC_CREAT | 0666;
+  key_t shmkey = 3925, semkey = 7428, msgkey = 5294;
+  int shmid, semid, msqid;
+  FILE *fd;
+  pthread_t thread;
+  struct sockaddr_in sock_addr;
+  int sock;
+  unsigned short port;
+  socklen_t size;
+  int status, try, retries = 1000;
+
+  for (try = 0; try < retries; ++try)
+    {
+      shmid = shmget (shmkey, 4096, flags | IPC_EXCL);
+      if (shmid >= 0)
+	break;
+
+      ++shmkey;
+    }
+
+  if (shmid < 0)
+    {
+      printf ("Cannot create shared-memory region after %d tries.\n", retries);
+      return 1;
+    }
+
+  for (try = 0; try < retries; ++try)
+    {
+      semid = semget (semkey, 1, flags | IPC_EXCL);
+      if (semid >= 0)
+	break;
+
+      ++semkey;
+    }
+
+  if (semid < 0)
+    {
+      printf ("Cannot create semaphore after %d tries.\n", retries);
+      return 1;
+    }
+
+  for (try = 0; try < retries; ++try)
+    {
+      msqid = msgget (msgkey, flags | IPC_EXCL);
+      if (msqid >= 0)
+	break;
+
+      ++msgkey;
+    }
+
+  if (msqid < 0)
+    {
+      printf ("Cannot create message queue after %d tries.\n", retries);
+      return 1;
+    }
+
+  fd = fopen ("/dev/null", "r");
+
+  /* Lock the mutex to prevent the new thread from finishing immediately.  */
+  pthread_mutex_lock (&mutex);
+  pthread_create (&thread, NULL, thread_proc, 0);
+ 
+  sock = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP);
+  if (sock < 0)
+    {
+      printf ("Cannot create socket.\n");
+      return 1;
+    }
+ 
+  sock_addr.sin_family = AF_INET;
+  sock_addr.sin_port = 0; /* Bind to a free port.  */
+  sock_addr.sin_addr.s_addr = htonl (INADDR_ANY);
+
+  status = bind (sock, (struct sockaddr *) &sock_addr, sizeof (sock_addr));
+  if (status < 0)
+    {
+      printf ("Cannot bind socket.\n");
+      return 1;
+    }
+
+  /* Find the assigned port number of the socket.  */
+  size = sizeof (sock_addr);
+  status = getsockname (sock, (struct sockaddr *) &sock_addr, &size);
+  if (status < 0)
+    {
+      printf ("Cannot find name of socket.\n");
+      return 1;
+    }
+  port = ntohs (sock_addr.sin_port);
+
+  status = listen (sock, 1);
+  if (status < 0)
+    {
+      printf ("Cannot listen on socket.\n");
+      return 1;
+    }
+
+  /* Set breakpoint here.  */
+
+  shmctl (shmid, IPC_RMID, NULL);
+  semctl (semid, 0, IPC_RMID, NULL);
+  msgctl (msqid, IPC_RMID, NULL);
+  fclose (fd);
+  close (sock);
+
+  pthread_mutex_unlock (&mutex);
+  pthread_join (thread, NULL);
+
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.base/info-os.exp b/gdb/testsuite/gdb.base/info-os.exp
new file mode 100644
index 0000000..541f03b
--- /dev/null
+++ b/gdb/testsuite/gdb.base/info-os.exp
@@ -0,0 +1,179 @@
+# Copyright 2011, 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+set testfile "info-os"
+set srcfile ${testfile}.c
+
+# This test is Linux-only.
+if ![istarget *-*-linux*] then {
+    unsupported "info-os.exp"
+    return -1
+}
+
+# Support for XML-output is needed to run this test.
+if [gdb_skip_xml_test] then {
+    unsupported "info-os.exp"
+    return -1
+}
+
+# Compile test program.
+if { [prepare_for_testing ${testfile}.exp $testfile $srcfile {debug additional_flags=-lpthread}] } {
+    fail "cannot compile test program"
+    return -1
+}
+
+if ![runto_main] then {
+    fail "cannot run to main"
+    return -1;
+}
+
+# Get PID of test program.
+set inferior_pid -1
+set test "get inferior process ID"
+gdb_test_multiple "call getpid()" $test {
+    -re ".* = ($decimal).*$gdb_prompt $" {
+	set inferior_pid $expect_out(1,string)
+	pass $test
+    }
+}
+
+gdb_breakpoint ${srcfile}:[gdb_get_line_number "Set breakpoint here"]
+gdb_continue_to_breakpoint "Set breakpoint here"
+
+# Get keys and IDs of the IPC object instances.
+set shmkey -1
+set test "get shared memory key"
+gdb_test_multiple "print shmkey" $test {
+    -re ".* = ($decimal).*$gdb_prompt $" {
+	set shmkey $expect_out(1,string)
+	pass $test
+    }
+}
+set shmid -1
+set test "get shared memory ID"
+gdb_test_multiple "print shmid" $test {
+    -re ".* = ($decimal).*$gdb_prompt $" {
+	set shmid $expect_out(1,string)
+	pass $test
+    }
+}
+
+set semkey -1
+set test "get semaphore key"
+gdb_test_multiple "print semkey" $test {
+    -re ".* = ($decimal).*$gdb_prompt $" {
+	set semkey $expect_out(1,string)
+	pass $test
+    }
+}
+
+set semid -1
+set test "get semaphore ID"
+gdb_test_multiple "print semid" $test {
+    -re ".* = ($decimal).*$gdb_prompt $" {
+	set semid $expect_out(1,string)
+	pass $test
+    }
+}
+
+set msgkey -1
+set test "get message queue key"
+gdb_test_multiple "print msgkey" $test {
+    -re ".* = ($decimal).*$gdb_prompt $" {
+	set msgkey $expect_out(1,string)
+	pass $test
+    }
+}
+
+set msqid -1
+set test "get message queue ID"
+gdb_test_multiple "print msqid" $test {
+    -re ".* = ($decimal).*$gdb_prompt $" {
+	set msqid $expect_out(1,string)
+	pass $test
+    }
+}
+
+# Get port number of test socket.
+set port -1
+set test "get socket port number"
+gdb_test_multiple "print port" $test {
+    -re ".* = ($decimal).*$gdb_prompt $" {
+	set port $expect_out(1,string)
+	pass $test
+    }
+}
+
+# Act like gdb_test but prevent: +ERROR: internal buffer is full.
+
+proc expect_multiline { command expect test } {
+    global gdb_prompt
+
+    # Do not duplicate FAILs from gdb_test_multiple.
+    set pass 0
+    set fail 0
+    gdb_test_multiple $command $test {
+	-re "^$expect *\r\n" {
+	    pass $test
+	    set pass 1
+	    exp_continue
+	}
+	-re "^$gdb_prompt $" {
+	    if !$pass {
+		set fail 1
+	    }
+	    # Exit the loop.
+	}
+	-re "\r\n" {
+	    # Drop the buffer.
+	    exp_continue
+	}
+    }
+    if $fail {
+	fail $test
+    }
+}
+
+# Test output of the 'info os' commands against the expected results.
+
+#                                     pid            user  command      cores
+expect_multiline "info os processes" "$inferior_pid +\\S+ +\\S*info-os +\[0-9,\]+" "get process list"
+
+#                                      pgid           leader   pid            command line
+expect_multiline "info os procgroups" "$inferior_pid +info-os +$inferior_pid +\\S*info-os" "get process groups"
+
+#                                   pid            command  tid   core
+expect_multiline "info os threads" "$inferior_pid +info-os +\\d+ +\\d+" "get threads"
+
+#                                 pid            command  fd    name
+expect_multiline "info os files" "$inferior_pid +info-os +\\d+ +/dev/null" "get file descriptors"
+
+#                                   local address  l-port remote addr r-port state  user family protocol
+expect_multiline "info os sockets" "0\\.0\\.0\\.0 +$port +0\\.0\\.0\\.0 +0 +LISTEN +\\S+ +INET +STREAM" "get internet-domain sockets"
+
+#                               key   shmid   perm size creator command last op  command  num attached  user  group  creator user  creator group  last shmat() time  last shmdt() time  last shmctl() time
+expect_multiline "info os shm" "$shmkey +$shmid +666 +4096 +info-os .*" "get shared-memory regions"
+
+#                                      key   semid   perm num semaphores  user  group  creator user  creator group  last semop() time  last semctl() time
+expect_multiline "info os semaphores" "$semkey +$semid +666 +1 .*" "get semaphores"
+
+#                               key   msqid   perm  num used bytes  num messages  last msgsnd() command  last msgrcv() command  user  group  creator user  creator group  last msgsnd() time  last msgrcv() time  last msgctl() time
+expect_multiline "info os msg" "$msgkey +$msqid +666 .*" "get message queues"
+
+
+# The SysV IPC primitives linger on after the creating process is killed
+# unless they are destroyed explicitly, so allow the test program to tidy
+# up after itself.
+send_gdb "continue\n"
diff --git a/gdb/testsuite/gdb.base/info-proc.exp b/gdb/testsuite/gdb.base/info-proc.exp
index 4280abd..1cefb6d 100644
--- a/gdb/testsuite/gdb.base/info-proc.exp
+++ b/gdb/testsuite/gdb.base/info-proc.exp
@@ -16,15 +16,6 @@
 # This file was written by Michael Snyder (msnyder at redhat.com)
 # This is a test for the gdb command "info proc"
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
-if { [is_remote target] } then {
-  continue
-}
-
-
 set ws "\[ \t\]+"
 
 set testfile "break"
@@ -54,20 +45,19 @@ gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
 
-# Does this gdb support info proc?
-gdb_test_multiple "help info proc" "help info proc" {
-    -re "Undefined info command: .proc..  Try .help info.*$gdb_prompt $" {
+gdb_test "help info proc" "Show /proc process information about .*"
+
+gdb_test_multiple "info proc" "info proc without a process" {
+    -re "No current process.*$gdb_prompt $" {
+	pass "info proc without a process"
+    }
+    -re "Not supported on this target.*$gdb_prompt $" {
 	# info proc command not supported -- nothing to test here.
 	unsupported "gdb does not support info proc on this target"
 	return -1;
     }
-    -re "Show /proc process information about .*$gdb_prompt $" {
-	pass "help info proc"
-    }
 }
 
-gdb_test "info proc" "No current process.*" "info proc without a process"
-
 if { ! [ runto_main ] } then {
     untested info-proc.exp
     return -1
diff --git a/gdb/testsuite/gdb.base/info-target.exp b/gdb/testsuite/gdb.base/info-target.exp
index 5817535..84ac7e6 100644
--- a/gdb/testsuite/gdb.base/info-target.exp
+++ b/gdb/testsuite/gdb.base/info-target.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 set testfile info-target
 if { [prepare_for_testing ${testfile}.exp $testfile start.c] } {
diff --git a/gdb/testsuite/gdb.base/int-type.c b/gdb/testsuite/gdb.base/int-type.c
index 548ca9c..da7eec0 100644
--- a/gdb/testsuite/gdb.base/int-type.c
+++ b/gdb/testsuite/gdb.base/int-type.c
@@ -9,11 +9,6 @@ int w;
 int main ()
 {
    
-#ifdef usestubs
-    set_debug_traps();
-    breakpoint();
-#endif
-
     x = 14;
     y = 3;
     z = 2;
diff --git a/gdb/testsuite/gdb.base/interp.exp b/gdb/testsuite/gdb.base/interp.exp
index 6a7f7c8..621cbd0 100644
--- a/gdb/testsuite/gdb.base/interp.exp
+++ b/gdb/testsuite/gdb.base/interp.exp
@@ -15,10 +15,6 @@
 
 # interp.exp   Test interpreter-exec command
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 set testfile "interp"
 
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${testfile}.c {debug}] } {
diff --git a/gdb/testsuite/gdb.base/interrupt.c b/gdb/testsuite/gdb.base/interrupt.c
index 80b9060..d7bb271 100644
--- a/gdb/testsuite/gdb.base/interrupt.c
+++ b/gdb/testsuite/gdb.base/interrupt.c
@@ -17,10 +17,6 @@ main ()
 {
   char x;
   int nbytes;
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
 #ifdef SIGNALS
   signal (SIGINT, sigint_handler);
 #endif
diff --git a/gdb/testsuite/gdb.base/interrupt.exp b/gdb/testsuite/gdb.base/interrupt.exp
index 6b3e0f5..06846ec 100644
--- a/gdb/testsuite/gdb.base/interrupt.exp
+++ b/gdb/testsuite/gdb.base/interrupt.exp
@@ -23,10 +23,6 @@ if [target_info exists gdb,noinferiorio] {
     return
 }
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile interrupt
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/jit-simple.c b/gdb/testsuite/gdb.base/jit-simple.c
new file mode 100644
index 0000000..3893c3d
--- /dev/null
+++ b/gdb/testsuite/gdb.base/jit-simple.c
@@ -0,0 +1,37 @@
+/* Simple program using the JIT API.  */
+
+#include <stdint.h>
+
+struct jit_code_entry
+{
+  struct jit_code_entry *next_entry;
+  struct jit_code_entry *prev_entry;
+  const char *symfile_addr;
+  uint64_t symfile_size;
+};
+
+struct jit_descriptor
+{
+  uint32_t version;
+  /* This type should be jit_actions_t, but we use uint32_t
+     to be explicit about the bitwidth.  */
+  uint32_t action_flag;
+  struct jit_code_entry *relevant_entry;
+  struct jit_code_entry *first_entry;
+};
+
+#ifdef SPACER
+/* This exists to change the address of __jit_debug_descriptor.  */
+int spacer = 4;
+#endif
+
+struct jit_descriptor __jit_debug_descriptor = { 1, 0, 0, 0 };
+
+void __jit_debug_register_code()
+{
+}
+
+int main()
+{
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.base/jit-simple.exp b/gdb/testsuite/gdb.base/jit-simple.exp
new file mode 100644
index 0000000..95752b5
--- /dev/null
+++ b/gdb/testsuite/gdb.base/jit-simple.exp
@@ -0,0 +1,81 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+if {[skip_shlib_tests]} {
+    untested jit-simple.exp
+    return -1
+}
+
+if {[get_compiler_info]} {
+    warning "Could not get compiler info"
+    untested jit-simple.exp
+    return 1
+}
+
+#
+# test running programs
+#
+
+set testfile jit-simple
+set srcfile ${testfile}.c
+set binfile ${objdir}/${subdir}/${testfile}
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+    untested jit-simple.exp
+    return -1
+}
+
+# A helper for jit_test_reread that invokes gdb_run_cmd.
+proc jit_run {msg} {
+    global decimal gdb_prompt
+
+    gdb_run_cmd
+    gdb_expect {
+	-re "Inferior .* exited.*$gdb_prompt $" {
+	    pass $msg
+	}
+	-re ".*$gdb_prompt $" {
+	    fail $msg
+	}
+    }
+}
+
+# Test re-running an inferior with a JIT descriptor, where the JIT
+# descriptor changes address between runs.
+# http://sourceware.org/bugzilla/show_bug.cgi?id=13431
+proc jit_test_reread {} {
+    global testfile binfile subdir srcfile srcdir
+
+    clean_restart $testfile
+
+    # jit_run "initial run"
+    runto_main
+
+    gdb_test "print &__jit_debug_descriptor" "= .*" "blah 1"
+
+    gdb_rename_execfile $binfile ${binfile}x
+
+    if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DSPACER}] != "" } {
+	fail "recompile $srcfile"
+    } else {
+	pass "recompile $srcfile"
+
+	# jit_run "second run"
+
+	runto_main
+	gdb_test "print &__jit_debug_descriptor" "= .*" "blah 1"
+    }
+}
+
+jit_test_reread
diff --git a/gdb/testsuite/gdb.base/jit-so.exp b/gdb/testsuite/gdb.base/jit-so.exp
index 8807a65..36f18ad 100644
--- a/gdb/testsuite/gdb.base/jit-so.exp
+++ b/gdb/testsuite/gdb.base/jit-so.exp
@@ -16,16 +16,12 @@
 # The same tests as in jit.exp, but loading JITer itself from a shared
 # library.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 if {[skip_shlib_tests]} {
     untested jit-so.exp
     return -1
 }
 
-if {[get_compiler_info not-used]} {
+if {[get_compiler_info]} {
     warning "Could not get compiler info"
     untested jit-so.exp
     return 1
@@ -67,11 +63,8 @@ if { [gdb_compile_shlib ${solib_srcfile} ${solib_binfile} {}] != "" } {
 
 set solib_binfile_target [gdb_download ${solib_binfile}]
 
-proc one_jit_test {count match_str} {
-    global verbose testfile srcfile2 binfile2 binfile2_dlopen solib_binfile_target solib_binfile_test_msg pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "one_jit_test-$count:"
+proc one_jit_test {count match_str} { with_test_prefix "one_jit_test-$count" {
+    global verbose testfile srcfile2 binfile2 binfile2_dlopen solib_binfile_target solib_binfile_test_msg
 
     clean_restart $testfile
     gdb_load_shlibs $binfile2
@@ -118,8 +111,7 @@ proc one_jit_test {count match_str} {
     # All jit librares must have been unregistered
     gdb_test "info function jit_function" \
 	"All functions matching regular expression \"jit_function\":"
-    set pf_prefix $old_pf_prefix
-}
+}}
 
 one_jit_test 1 "${hex}  jit_function_0000"
 one_jit_test 2 "${hex}  jit_function_0000\[\r\n\]+${hex}  jit_function_0001"
diff --git a/gdb/testsuite/gdb.base/jit.exp b/gdb/testsuite/gdb.base/jit.exp
index eba8116..3034e6a 100644
--- a/gdb/testsuite/gdb.base/jit.exp
+++ b/gdb/testsuite/gdb.base/jit.exp
@@ -13,16 +13,12 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 if {[skip_shlib_tests]} {
     untested jit.exp
     return -1
 }
 
-if {[get_compiler_info not-used]} {
+if {[get_compiler_info]} {
     warning "Could not get compiler info"
     untested jit.exp
     return 1
@@ -55,11 +51,8 @@ if { [gdb_compile_shlib ${solib_srcfile} ${solib_binfile} {-fPIC}] != "" } {
 
 set solib_binfile_target [gdb_download ${solib_binfile}]
 
-proc one_jit_test {count match_str} {
-    global verbose testfile solib_binfile_target solib_binfile_test_msg pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "one_jit_test-$count:"
+proc one_jit_test {count match_str} { with_test_prefix "one_jit_test-$count" {
+    global verbose testfile solib_binfile_target solib_binfile_test_msg
 
     clean_restart $testfile
 
@@ -97,9 +90,8 @@ proc one_jit_test {count match_str} {
     gdb_continue_to_breakpoint "break here 2"
     # All jit librares must have been unregistered
     gdb_test "info function jit_function" \
-	"All functions matching regular expression \"jit_function\":" 
-    set pf_prefix $old_pf_prefix
-}
+	"All functions matching regular expression \"jit_function\":"
+}}
 
 one_jit_test 1 "${hex}  jit_function_0000"
 one_jit_test 2 "${hex}  jit_function_0000\[\r\n\]+${hex}  jit_function_0001"
diff --git a/gdb/testsuite/gdb.base/jump.exp b/gdb/testsuite/gdb.base/jump.exp
index 3ccc334..a7b2177 100644
--- a/gdb/testsuite/gdb.base/jump.exp
+++ b/gdb/testsuite/gdb.base/jump.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
 
 clear_xfail "*-*-*"
 
@@ -96,7 +92,7 @@ gdb_test "jump" "Argument required .starting address.*" \
 # trailing junk.
 #
 gdb_test "jump 21 100" \
-    "Junk at end of line specification: 100.*" \
+    "malformed linespec error: unexpected number, \"100\"" \
     "jump with trailing argument junk"
 
 
diff --git a/gdb/testsuite/gdb.base/label.exp b/gdb/testsuite/gdb.base/label.exp
index fa55c11..c511cb9 100644
--- a/gdb/testsuite/gdb.base/label.exp
+++ b/gdb/testsuite/gdb.base/label.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 if [is_remote target] then {
     return 0
diff --git a/gdb/testsuite/gdb.base/langs.exp b/gdb/testsuite/gdb.base/langs.exp
index 7c24980..7a96ce3 100644
--- a/gdb/testsuite/gdb.base/langs.exp
+++ b/gdb/testsuite/gdb.base/langs.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile langs
 set binfile ${objdir}/${subdir}/${testfile}
@@ -54,7 +50,7 @@ set timeout 10
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.base/langs0.c b/gdb/testsuite/gdb.base/langs0.c
index 1477a32..cc6efdd 100644
--- a/gdb/testsuite/gdb.base/langs0.c
+++ b/gdb/testsuite/gdb.base/langs0.c
@@ -22,10 +22,6 @@ langs0__2do ()
 int
 main ()
 {
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
   if (langs0__2do () == 5003)
     /* Success.  */
     return 0;
diff --git a/gdb/testsuite/gdb.base/lineinc.exp b/gdb/testsuite/gdb.base/lineinc.exp
index 0edbfe0..79f9091 100644
--- a/gdb/testsuite/gdb.base/lineinc.exp
+++ b/gdb/testsuite/gdb.base/lineinc.exp
@@ -77,10 +77,6 @@
 # sorted in ascending order; GDB would get an internal error trying to
 # read the above debugging info.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 set testfile "lineinc"
 set binfile ${objdir}/${subdir}/${testfile}
diff --git a/gdb/testsuite/gdb.base/list.exp b/gdb/testsuite/gdb.base/list.exp
index 72a4af2..6b5b207 100644
--- a/gdb/testsuite/gdb.base/list.exp
+++ b/gdb/testsuite/gdb.base/list.exp
@@ -16,10 +16,6 @@
 
 # This file was written by Fred Fish. (fnf at cygnus.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile "list"
 set binfile ${objdir}/${subdir}/${testfile}
@@ -47,7 +43,7 @@ if  { [gdb_compile "${binfile}0.o ${binfile}1.o" ${binfile} executable {debug}]
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
@@ -81,7 +77,7 @@ proc set_listsize { arg } {
 #
 
 proc test_listsize {} {
-    global gdb_prompt use_gdb_stub
+    global gdb_prompt
     global hp_cc_compiler
     global hp_aCC_compiler
 
@@ -90,16 +86,8 @@ proc test_listsize {} {
     gdb_test "show listsize" "Number of source lines gdb will list by default is 10.*" "show default list size"
     
     # Show the default lines
-    # Note that remote targets that have debugging info for _start available will
-    # list the lines there instead of main, so we skip this test for remote targets.
-    # The second case is for optimized code, it is still correct.
-    
-    if $use_gdb_stub {
-	runto_main;
-	unsupported "list default lines around main";
-    } else {
-	gdb_test "list" "(1\[ \t\]+#include \"list0.h\".*10\[ \t\]+x = 0;|2.*11\[ \t\]+foo .x\[+)\]+;)" "list default lines around main"
-    }
+
+    gdb_test "list" "(1\[ \t\]+#include \"list0.h\".*7\[ \t\]+x = 0;\r\n.*10\[ \t\]+foo .x\[+)\]+;)" "list default lines around main"
 
     # Ensure we can limit printouts to one line
 
@@ -179,7 +167,7 @@ proc test_list_filename_and_number {} {
 
     send_gdb "list list0.c:1\n"
     gdb_expect {
-	-re "1\[ \t\]+#include \"list0.h\".*10\[ \t]+x = 0;\r\n$gdb_prompt $" {
+	-re "1\[ \t\]+#include \"list0.h\".*10\[ \t\]+foo .x\[+)\]+;\r\n$gdb_prompt $" {
 	    incr testcnt 
 	}
 	-re ".*$gdb_prompt $" { fail "list list0.c:1" ; gdb_suppress_tests }
@@ -223,7 +211,7 @@ proc test_list_function {} {
     # gcc appears to generate incorrect debugging information for code
     # in include files, which breaks this test.
     # SunPRO cc is the second case below, it's also correct.
-    gdb_test "list main" "(5\[ \t\]+int x;.*14\[ \t\]+foo \[(\]+.*\[)\]+;|1\[ \t\]+#include .*10\[ \t\]+x = 0;)" "list function in source file 1"
+    gdb_test "list main" "(5\[ \t\]+int x;.*8\[ \t\]+foo \[(\]+.*\[)\]+;|1\[ \t\]+#include .*7\[ \t\]+x = 0;)" "list function in source file 1"
 
     # Ultrix gdb takes the second case below; it's also correct.
     # SunPRO cc is the third case.
@@ -335,14 +323,14 @@ proc test_list_backwards {} {
 
     send_gdb "list -\n"
     gdb_expect {
-	-re "8\[ \t\]+breakpoint\[(\]\[)\];.*17\[ \t\]+foo \[(\]+.*\[)\]+;\r\n$gdb_prompt $" { incr testcnt }
+	-re "8\[ \t\]+foo \[(\]+.*\[)\]+;.*17\[ \t\]+foo \[(\]+.*\[)\]+;\r\n$gdb_prompt $" { incr testcnt }
 	-re ".*$gdb_prompt $" { fail "list 8-17" ; gdb_suppress_tests }
 	timeout { fail "list 8-17 (timeout)" ; gdb_suppress_tests }
     }
 
     send_gdb "list -\n"
     gdb_expect {
-	-re "1\[ \t\]+#include .*7\[ \t\]+set_debug_traps\[(\]\[)\]+;\r\n$gdb_prompt $" { incr testcnt }
+	-re "1\[ \t\]+#include .*7\[ \t\]+x = 0;\r\n$gdb_prompt $" { incr testcnt }
 	-re ".*$gdb_prompt $" { fail "list 1-7" ; gdb_suppress_tests }
 	timeout { fail "list 1-7 (timeout)" ; gdb_suppress_tests }
     }
@@ -387,7 +375,7 @@ proc test_list_filename_and_function {} {
     # SunPRO cc is the second case below, it's also correct.
     send_gdb "list list0.c:main\n"
     gdb_expect {
-	-re "1\[ \t\]+#include .*10\[ \t\]+x = 0;\r\n$gdb_prompt $" {
+	-re "1\[ \t\]+#include .*10\[ \t\]+foo \[(\]+.*\[)\]+;\r\n$gdb_prompt $" {
 	    incr testcnt
 	}
 	-re "5\[ \t\]+int x;.*14\[ \t\]+foo \[(\]+.*\[)\]+;\r\n$gdb_prompt $" {
@@ -517,16 +505,18 @@ proc test_forward_search {} {
 	verbose "Timeout is now $timeout seconds" 2
 }
 
+proc test_only_end {} {
+    gdb_test_no_output "set listsize 2"
+    gdb_test "list 1" "list 1\r\n1\[ \t\]\[^\r\n\]*\r\n2\[ \t\]\[^\r\n\]*"
+    gdb_test "list ,5" "list ,5\r\n4\[ \t\]\[^\r\n\]*\r\n5\[ \t\]\[^\r\n\]*"
+}
+
 # Start with a fresh gdb.
 
 gdb_exit
 gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
-if [target_info exists gdb_stub] {
-    gdb_step_for_stub;
-}
+gdb_file_cmd ${binfile}
 
 gdb_test_no_output "set width 0"
 
@@ -542,6 +532,7 @@ if [ set_listsize 10 ] then {
     test_list_range
     test_list_filename_and_function
     test_forward_search
+    test_only_end
 }
 
 remote_exec build "rm -f list0.h"
diff --git a/gdb/testsuite/gdb.base/list0.c b/gdb/testsuite/gdb.base/list0.c
index b50fdd4..85fc6b5 100644
--- a/gdb/testsuite/gdb.base/list0.c
+++ b/gdb/testsuite/gdb.base/list0.c
@@ -3,10 +3,7 @@
 int main ()
 {
     int x;
-#ifdef usestubs
-    set_debug_traps();
-    breakpoint();
-#endif
+
     x = 0;
     foo (x++);
     foo (x++);
@@ -33,6 +30,9 @@ int main ()
     foo (x++);
     foo (x++);
     foo (x++);
+    foo (x++);
+    foo (x++);
+    foo (x++);
     return 0;
 }
 
diff --git a/gdb/testsuite/gdb.base/logical.exp b/gdb/testsuite/gdb.base/logical.exp
index 1c5bcf3..495f529 100644
--- a/gdb/testsuite/gdb.base/logical.exp
+++ b/gdb/testsuite/gdb.base/logical.exp
@@ -21,10 +21,6 @@
 # precedence with integer type variables
 
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # test running programs
 #
@@ -38,7 +34,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
     return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.base/long_long.exp b/gdb/testsuite/gdb.base/long_long.exp
index fd33bfd..880a078 100644
--- a/gdb/testsuite/gdb.base/long_long.exp
+++ b/gdb/testsuite/gdb.base/long_long.exp
@@ -18,10 +18,6 @@
 # long_long.exp   Test printing of 64-bit things in 32-bit gdb.
 #                 Also test differnet kinds of formats.
 #
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if [target_info exists no_long_long] {
     return 0
 }
@@ -32,7 +28,7 @@ set binfile ${objdir}/${subdir}/${testfile}
 
 # What compiler are we using?
 #
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/longjmp.c b/gdb/testsuite/gdb.base/longjmp.c
index e9e0e56..b203a8d 100644
--- a/gdb/testsuite/gdb.base/longjmp.c
+++ b/gdb/testsuite/gdb.base/longjmp.c
@@ -33,7 +33,7 @@ call_longjmp (jmp_buf *buf)
 void
 hidden_longjmp (void)
 {
-  if (setjmp (env) == 0) /* longjmp caught */
+  if (setjmp (env) == 0)
     {
       call_longjmp (&env);
     }
@@ -75,6 +75,8 @@ main ()
   /* Pattern 3 - setjmp/longjmp inside stepped-over function.  */
   hidden_longjmp (); /* patt3 */
 
+  i = 77; /* longjmp caught */
+
   i = 3; /* patt_end3.  */
 
   return 0;
diff --git a/gdb/testsuite/gdb.base/longjmp.exp b/gdb/testsuite/gdb.base/longjmp.exp
index 9b314ce..fbc2d64 100644
--- a/gdb/testsuite/gdb.base/longjmp.exp
+++ b/gdb/testsuite/gdb.base/longjmp.exp
@@ -17,10 +17,6 @@
 # Test support for stepping over longjmp.
 #
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 set testfile "longjmp"
 set srcfile ${testfile}.c
@@ -31,7 +27,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
      return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/macscp.exp b/gdb/testsuite/gdb.base/macscp.exp
index aed9b8d..1f995d5 100644
--- a/gdb/testsuite/gdb.base/macscp.exp
+++ b/gdb/testsuite/gdb.base/macscp.exp
@@ -14,10 +14,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 set srcfile macscp1.c
 set testfile "macscp"
@@ -26,7 +22,7 @@ set binfile ${objdir}/${subdir}/${testfile}
 
 set options { debug additional_flags=-DFROM_COMMANDLINE=ARG}
 
-get_compiler_info ${binfile}
+get_compiler_info
 if [test_compiler_info gcc*] {
     lappend options additional_flags=-g3
 }
@@ -231,6 +227,10 @@ list_and_check_macro macscp3_2 WHERE {macscp3.h macscp1.c {before macscp3_2}}
 gdb_test "info macro FROM_COMMANDLINE" \
 	 "Defined at \[^\r\n\]*:0\r\n-DFROM_COMMANDLINE=ARG"
 
+gdb_test "info macro __FILE__" "#define __FILE__ \".*macscp3.h\"" \
+    "info macro __FILE__ before running"
+gdb_test "info macro __LINE__" "#define __LINE__ 26" \
+    "info macro __LINE__ before running"
 
 # Although GDB's macro table structures distinguish between multiple
 # #inclusions of the same file, GDB's other structures don't.  So the
@@ -440,6 +440,17 @@ gdb_test "break [gdb_get_line_number "set breakpoint here"]" \
     "Breakpoint.*at.* file .*, line.*" \
     "breakpoint macscp_expr"
 
+gdb_test "cond \$bpnum foo == MACRO_TO_EXPAND" \
+  "No symbol \"MACRO_TO_EXPAND\" in current context\." \
+  "macro MACRO_TO_EXPAND not in scope at breakpoint"
+
+# Note that we choose the condition so that this breakpoint never
+# stops.
+set l2 [gdb_get_line_number "set second breakpoint here"]
+gdb_test "break $l2  if foo != MACRO_TO_EXPAND" \
+  "Breakpoint.*at.*" \
+  "breakpoint macscp_expr using MACRO_TO_EXPAND"
+
 gdb_test "continue" "foo = 0;.*" "continue to macsp_expr"
 
 gdb_test "print address.addr" \
@@ -450,7 +461,7 @@ gdb_test "print MACRO_TO_EXPAND" \
     "No symbol \"MACRO_TO_EXPAND\" in current context\." \
     "print expression with macro before define."
 
-gdb_test "next" "foo = 1;" "next to definition 1"
+gdb_test "next" "foo = 1;.*here.*/" "next to definition 1"
 
 gdb_test "print MACRO_TO_EXPAND" \
     " = 0" \
@@ -470,7 +481,7 @@ gdb_test "print MACRO_TO_EXPAND" \
     " = 0" \
     "print expression with macro after removing override"
 
-gdb_test "next" "foo = 2;" "next to definition 2"
+gdb_test "next" "foo = 2;.*" "next to definition 2"
 
 gdb_test "print MACRO_TO_EXPAND" \
     "No symbol \"MACRO_TO_EXPAND\" in current context\." \
@@ -677,3 +688,7 @@ gdb_test_no_output "macro define si_addr fields.fault.si_addr" \
 gdb_test "macro expand siginfo.si_addr" \
   "expands to: siginfo.fields.fault.si_addr" \
   "macro expand siginfo.si_addr"
+
+gdb_test "print __FILE__" " = \".*macscp1.c\""
+gdb_test "print __LINE__" \
+    " = [gdb_get_line_number {stopping point for line test}]"
diff --git a/gdb/testsuite/gdb.base/macscp1.c b/gdb/testsuite/gdb.base/macscp1.c
index e754b26..09a4c0d 100644
--- a/gdb/testsuite/gdb.base/macscp1.c
+++ b/gdb/testsuite/gdb.base/macscp1.c
@@ -89,9 +89,9 @@ macscp_expr (void)
 
   foo = 0;  /* set breakpoint here */
 #define MACRO_TO_EXPAND foo
-  foo = 1;
+  foo = 1;			/* set second breakpoint here */
 #undef MACRO_TO_EXPAND
-  foo = 2;
+  foo = 2;			/* stopping point for line test */
 }
 
 #define TWENTY_THREE 23
diff --git a/gdb/testsuite/gdb.base/maint.exp b/gdb/testsuite/gdb.base/maint.exp
index a475f3a..1c99150 100644
--- a/gdb/testsuite/gdb.base/maint.exp
+++ b/gdb/testsuite/gdb.base/maint.exp
@@ -47,12 +47,6 @@
 
 
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
-global usestubs
-
 set testfile "break"
 set srcfile ${testfile}.c
 set srcfile1 ${testfile}1.c
diff --git a/gdb/testsuite/gdb.base/memattr.exp b/gdb/testsuite/gdb.base/memattr.exp
index 42a20e8..4065808 100644
--- a/gdb/testsuite/gdb.base/memattr.exp
+++ b/gdb/testsuite/gdb.base/memattr.exp
@@ -17,10 +17,6 @@
 
 # Test the memory attribute commands.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 set testfile "memattr"
 set srcfile  ${testfile}.c
 
diff --git a/gdb/testsuite/gdb.base/mips_pro.c b/gdb/testsuite/gdb.base/mips_pro.c
index b659d82..c28f99e 100644
--- a/gdb/testsuite/gdb.base/mips_pro.c
+++ b/gdb/testsuite/gdb.base/mips_pro.c
@@ -49,9 +49,5 @@ main (argc, argv)
      char **argv;
 #endif
 {
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
   return top (-1) + top (1);
 }
diff --git a/gdb/testsuite/gdb.base/mips_pro.exp b/gdb/testsuite/gdb.base/mips_pro.exp
index e12ecae..a7b8290 100644
--- a/gdb/testsuite/gdb.base/mips_pro.exp
+++ b/gdb/testsuite/gdb.base/mips_pro.exp
@@ -14,10 +14,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile mips_pro
 set srcfile ${testfile}.c
@@ -25,7 +21,7 @@ set binfile ${objdir}/${subdir}/${testfile}
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.base/miscexprs.c b/gdb/testsuite/gdb.base/miscexprs.c
index fe88fb2..a9930c1 100644
--- a/gdb/testsuite/gdb.base/miscexprs.c
+++ b/gdb/testsuite/gdb.base/miscexprs.c
@@ -39,11 +39,6 @@ main ()
   sbig.s[90] = 255;
   lbig.l[333] = 999999999;
     
-#ifdef usestubs
-  set_debug_traps ();
-  breakpoint ();
-#endif
-
   marker1 ();
   return 0;
 }
diff --git a/gdb/testsuite/gdb.base/miscexprs.exp b/gdb/testsuite/gdb.base/miscexprs.exp
index 5eec2f6..cc27cc5 100644
--- a/gdb/testsuite/gdb.base/miscexprs.exp
+++ b/gdb/testsuite/gdb.base/miscexprs.exp
@@ -22,10 +22,6 @@
 # with elementary types
 # 
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 # By default, the datastructures are allocated on the stack.  For targets
 # with very small stack, that will not work.  In that case, just set
 # storage to `-DSTORAGE=static' which changes the datastructures to be
@@ -50,7 +46,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [lis
     return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.base/morestack.exp b/gdb/testsuite/gdb.base/morestack.exp
index 460e67c..c008abd 100644
--- a/gdb/testsuite/gdb.base/morestack.exp
+++ b/gdb/testsuite/gdb.base/morestack.exp
@@ -13,7 +13,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if [get_compiler_info "ignored"] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/multi-forks.exp b/gdb/testsuite/gdb.base/multi-forks.exp
index fa98cf3..4b08b66 100644
--- a/gdb/testsuite/gdb.base/multi-forks.exp
+++ b/gdb/testsuite/gdb.base/multi-forks.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
 if { [is_remote target] || ![isnative] } then {
     continue
 }
diff --git a/gdb/testsuite/gdb.base/nextoverexit.c b/gdb/testsuite/gdb.base/nextoverexit.c
new file mode 100644
index 0000000..125d68f
--- /dev/null
+++ b/gdb/testsuite/gdb.base/nextoverexit.c
@@ -0,0 +1,23 @@
+/* Copyright 2012 Free Software Foundation, Inc.
+
+ 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 3 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, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <stdlib.h> 
+
+int
+main (void)
+{
+  exit (0);
+}
diff --git a/gdb/testsuite/gdb.base/nextoverexit.exp b/gdb/testsuite/gdb.base/nextoverexit.exp
new file mode 100644
index 0000000..fecbd58
--- /dev/null
+++ b/gdb/testsuite/gdb.base/nextoverexit.exp
@@ -0,0 +1,33 @@
+# Copyright 2012 Free Software Foundation, Inc.
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+set testfile "nextoverexit"
+set executable $testfile
+set srcfile $testfile.c
+set binfile $objdir/$subdir/$testfile
+
+if {[prepare_for_testing $testfile.exp $testfile $testfile.c]} {
+    return -1
+}
+
+if {![runto_main]} {
+    return -1
+}
+
+# Make sure we do not see any warnings.
+gdb_test_multiple "next" "next over exit" {
+    -re "$inferior_exited_re normally.\[\r\n\]+$gdb_prompt $" {
+	pass "next over exit"
+    }
+}
diff --git a/gdb/testsuite/gdb.base/nodebug.c b/gdb/testsuite/gdb.base/nodebug.c
index 3e0a4ce..4857882 100644
--- a/gdb/testsuite/gdb.base/nodebug.c
+++ b/gdb/testsuite/gdb.base/nodebug.c
@@ -52,10 +52,6 @@ main (argc, argv)
      char **argv;
 #endif
 {
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
   return top (argc);
 }
 
diff --git a/gdb/testsuite/gdb.base/nodebug.exp b/gdb/testsuite/gdb.base/nodebug.exp
index 477c01b..a5b0f38 100644
--- a/gdb/testsuite/gdb.base/nodebug.exp
+++ b/gdb/testsuite/gdb.base/nodebug.exp
@@ -16,16 +16,12 @@
 
 # Test that things still (sort of) work when compiled without -g.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile nodebug
 set srcfile $srcdir/$subdir/$testfile.c
 set binfile $objdir/$subdir/$testfile
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.base/nofield.exp b/gdb/testsuite/gdb.base/nofield.exp
index 8602de9..4c44f8e 100644
--- a/gdb/testsuite/gdb.base/nofield.exp
+++ b/gdb/testsuite/gdb.base/nofield.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 set testfile "nofield"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
diff --git a/gdb/testsuite/gdb.base/opaque.exp b/gdb/testsuite/gdb.base/opaque.exp
index 484f1a6..a330d40 100644
--- a/gdb/testsuite/gdb.base/opaque.exp
+++ b/gdb/testsuite/gdb.base/opaque.exp
@@ -16,10 +16,6 @@
 
 # This file was written by Fred Fish. (fnf at cygnus.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile "opaque"
 set binfile ${objdir}/${subdir}/opaque
@@ -46,7 +42,7 @@ if  { [gdb_compile "${binfile}0.o ${binfile}1.o" ${binfile} executable {debug}]
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
@@ -138,11 +134,6 @@ gdb_test "ptype struct foo" \
 # have learned during the static tests.
 #
 
-if [istarget "mips-idt-*"] then {
-    # Restart because IDT/SIM runs out of file descriptors.
-    gdb_exit
-    gdb_start
-}
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
 
@@ -193,11 +184,6 @@ gdb_test "ptype struct foo" \
 # Now reload the symbols again so we forget about anything we might
 # have learned reading the symbols during the previous tests.
 
-if [istarget "mips-idt-*"] then {
-    # Restart because IDT/SIM runs out of file descriptors.
-    gdb_exit
-    gdb_start
-}
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
 
diff --git a/gdb/testsuite/gdb.base/opaque0.c b/gdb/testsuite/gdb.base/opaque0.c
index 5ec4a2a..bf90eca 100644
--- a/gdb/testsuite/gdb.base/opaque0.c
+++ b/gdb/testsuite/gdb.base/opaque0.c
@@ -13,10 +13,6 @@ extern void putfoo (struct foo *foop);
 
 int main ()
 {
-#ifdef usestubs
-    set_debug_traps();
-    breakpoint();
-#endif
     foop = getfoo ();
     putfoo (foop);
     return 0;
diff --git a/gdb/testsuite/gdb.base/overlays.exp b/gdb/testsuite/gdb.base/overlays.exp
index d1405ac..a017661 100644
--- a/gdb/testsuite/gdb.base/overlays.exp
+++ b/gdb/testsuite/gdb.base/overlays.exp
@@ -16,10 +16,6 @@
 #
 # This file was written by Michael Snyder (msnyder at cygnus.com)
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # test running programs
 #
diff --git a/gdb/testsuite/gdb.base/page.exp b/gdb/testsuite/gdb.base/page.exp
index 5e72126..0629807 100644
--- a/gdb/testsuite/gdb.base/page.exp
+++ b/gdb/testsuite/gdb.base/page.exp
@@ -16,10 +16,6 @@
 
 # This file was written by Fred Fish. (fnf at cygnus.com)
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 gdb_exit
 gdb_start
 
diff --git a/gdb/testsuite/gdb.base/pc-fp.exp b/gdb/testsuite/gdb.base/pc-fp.exp
index 3a88431..beb5087 100644
--- a/gdb/testsuite/gdb.base/pc-fp.exp
+++ b/gdb/testsuite/gdb.base/pc-fp.exp
@@ -20,10 +20,6 @@
 # aliases.  If the ISA doesn't provide any equivalent registers, then
 # GDB will provide registers that map onto the frame's PC and FP.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # test running programs
 #
@@ -37,7 +33,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
     return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
@@ -64,11 +60,10 @@ set valueof_fp [get_hexadecimal_valueof "\$fp" "0"]
 gdb_test "display/i \$pc" "1: x/i +\\\$pc( +|\r\n)=> ${valueof_pc}.*"
 gdb_test "display/w \$fp" "2: x/xw +\\\$fp +${valueof_fp}.*"
 
-# FIXME: cagney/2002-09-04: Should also check that ``info registers
-# $pc'' et.al.'' come back with the same value as the above displays
-# and a print --- assuming that is that people agree to such behavour.
-# Need to re-write default_print_registers_info() for it to work (and
-# such a rewrite is on the reggroups branch).
+gdb_test "info register \$pc" "${valueof_pc}.*"
+gdb_test "info register \$fp" "${valueof_fp}.*"
 
-# gdb_test "info registers \$pc" "${valueof_pc}"
-# gdb_test "info registers \$fp" "${valueof_fp}"
+# Regression test for
+# http://sourceware.org/bugzilla/show_bug.cgi?id=12659
+gdb_test "info register pc fp" \
+    "pc(:)?( |\t)+${valueof_pc}(( |\t)+${valueof_pc} <.*>)?\[\r\n\]+fp(:)?( |\t)+${valueof_fp}(( |\t)+${valueof_fp})?\[\r\n\]+"
diff --git a/gdb/testsuite/gdb.base/pending.exp b/gdb/testsuite/gdb.base/pending.exp
index 1ce593f..79c4576 100644
--- a/gdb/testsuite/gdb.base/pending.exp
+++ b/gdb/testsuite/gdb.base/pending.exp
@@ -15,10 +15,6 @@
 
 # This file was created by Jeff Johnston. (jjohnstn at redhat.com)
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # test running programs
 #
@@ -37,7 +33,7 @@ set lib_sl  $objdir/$subdir/$libfile.sl
 set lib_opts  debug
 set exec_opts [list debug shlib=$lib_sl]
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
@@ -84,9 +80,6 @@ gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
 gdb_load_shlibs $lib_sl
 
-if [target_info exists gdb_stub] {
-    gdb_step_for_stub;
-}
 #
 # Test setting, querying, and modifying pending breakpoints
 #
diff --git a/gdb/testsuite/gdb.base/permissions.exp b/gdb/testsuite/gdb.base/permissions.exp
index e173b77..9930674 100644
--- a/gdb/testsuite/gdb.base/permissions.exp
+++ b/gdb/testsuite/gdb.base/permissions.exp
@@ -27,7 +27,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
      return -1
     }
 
-if [get_compiler_info $binfile] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/pie-execl.exp b/gdb/testsuite/gdb.base/pie-execl.exp
index 6ac2acf..8b6da71 100644
--- a/gdb/testsuite/gdb.base/pie-execl.exp
+++ b/gdb/testsuite/gdb.base/pie-execl.exp
@@ -37,7 +37,7 @@ set binfile2_test_msg OBJDIR/${subdir}/${executable2}
 # Use conditional compilation according to `BIN' as GDB remembers the source
 # file name of the breakpoint.
 
-set opts [list debug {additional_flags=-fPIE -pie}]
+set opts [list debug additional_flags=-fPIE ldflags=-pie]
 if {[build_executable ${testfile}.exp $executable1 $srcfile [concat $opts {additional_flags=-DBIN=1}]] == ""
     || [build_executable ${testfile}.exp $executable2 $srcfile [concat $opts {additional_flags=-DBIN=2}]] == ""} {
     return -1
diff --git a/gdb/testsuite/gdb.base/pointers.c b/gdb/testsuite/gdb.base/pointers.c
index 4ee5e78..96f2b52 100644
--- a/gdb/testsuite/gdb.base/pointers.c
+++ b/gdb/testsuite/gdb.base/pointers.c
@@ -91,10 +91,6 @@ int main ()
   void dummy();
   int more_code();
   
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
   dummy();
 
   more_code ();
diff --git a/gdb/testsuite/gdb.base/pointers.exp b/gdb/testsuite/gdb.base/pointers.exp
index d5868c4..5b1a0bf 100644
--- a/gdb/testsuite/gdb.base/pointers.exp
+++ b/gdb/testsuite/gdb.base/pointers.exp
@@ -21,10 +21,6 @@
 # with integer type variables and pointers to integers
 # 
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
 #
 # test running programs
 #
@@ -38,7 +34,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
      return -1
     }
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
@@ -285,4 +281,4 @@ gdb_test "ptype ppppppC" "type = char \\*\\*\\*\\*\\*\\*" "ptype ppppppC"
 # Regression test for a crash.
 
 gdb_test "p instance.array_variable + 0" \
-  " = \\(long (int )?\\*\\) 0x\[0-9a-f\]*"
+  " = \\(long (int )?\\*\\) 0x\[0-9a-f\]* <instance>"
diff --git a/gdb/testsuite/gdb.base/pr11022.exp b/gdb/testsuite/gdb.base/pr11022.exp
index 8078eac..c11857d 100644
--- a/gdb/testsuite/gdb.base/pr11022.exp
+++ b/gdb/testsuite/gdb.base/pr11022.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if {[skip_hw_watchpoint_tests]} {
     return 0
 }
diff --git a/gdb/testsuite/gdb.base/prelink.exp b/gdb/testsuite/gdb.base/prelink.exp
index dbb9bbc..4ea9e1e 100644
--- a/gdb/testsuite/gdb.base/prelink.exp
+++ b/gdb/testsuite/gdb.base/prelink.exp
@@ -18,16 +18,12 @@
 
 # This file was written by Alexandre Oliva <aoliva at redhat.com>
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
 
 if { ![isnative] || [is_remote host] || [skip_shlib_tests]} {
     return
 }
 
-if [get_compiler_info "ignored"] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/print-file-var-lib1.c b/gdb/testsuite/gdb.base/print-file-var-lib1.c
new file mode 100644
index 0000000..dc9d03d
--- /dev/null
+++ b/gdb/testsuite/gdb.base/print-file-var-lib1.c
@@ -0,0 +1,23 @@
+/* This testcase is part of GDB, the GNU debugger.
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+int this_version_id = 104;
+
+int
+get_version_1 (void)
+{
+  return this_version_id;
+}
diff --git a/gdb/testsuite/gdb.base/print-file-var-lib2.c b/gdb/testsuite/gdb.base/print-file-var-lib2.c
new file mode 100644
index 0000000..1803cb2
--- /dev/null
+++ b/gdb/testsuite/gdb.base/print-file-var-lib2.c
@@ -0,0 +1,23 @@
+/* This testcase is part of GDB, the GNU debugger.
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+int this_version_id = 203;
+
+int
+get_version_2 (void)
+{
+  return this_version_id;
+}
diff --git a/gdb/testsuite/gdb.base/print-file-var-main.c b/gdb/testsuite/gdb.base/print-file-var-main.c
new file mode 100644
index 0000000..04e45e3
--- /dev/null
+++ b/gdb/testsuite/gdb.base/print-file-var-main.c
@@ -0,0 +1,34 @@
+/* This testcase is part of GDB, the GNU debugger.
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+extern int get_version_1 (void);
+extern int get_version_2 (void);
+
+int
+main (void)
+{
+  int v1 = get_version_1 ();
+  int v2 = get_version_2 ();
+
+  if (v1 != 104)  /* STOP */
+    return 1;
+  /* The value returned by get_version_2 depends on the target system.  */
+  if (v2 != 104 || v2 != 203)
+    return 2;
+
+  return 0;
+}
+
diff --git a/gdb/testsuite/gdb.base/print-file-var.exp b/gdb/testsuite/gdb.base/print-file-var.exp
new file mode 100644
index 0000000..994abc4
--- /dev/null
+++ b/gdb/testsuite/gdb.base/print-file-var.exp
@@ -0,0 +1,87 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+set executable print-file-var-main
+
+set lib1 "print-file-var-lib1"
+set lib2 "print-file-var-lib2"
+
+set libobj1 "${objdir}/${subdir}/${lib1}.so"
+set libobj2 "${objdir}/${subdir}/${lib2}.so"
+
+set lib_opts { debug additional_flags=-fPIC }
+
+if { [gdb_compile_shlib ${srcdir}/${subdir}/${lib1}.c \
+                        ${libobj1} \
+                        ${lib_opts} ] != "" } {
+    return -1
+}
+if { [gdb_compile_shlib ${srcdir}/${subdir}/${lib2}.c \
+                        ${libobj2} \
+                        ${lib_opts} ] != "" } {
+    return -1
+}
+if { [gdb_compile "${srcdir}/${subdir}/${executable}.c" \
+                  "${objdir}/${subdir}/${executable}" \
+                  executable \
+                  [list debug shlib=${libobj1} shlib=${libobj2}]]
+     != ""} {
+    return -1
+}
+
+clean_restart $executable
+gdb_load_shlibs $libobj1 $libobj2
+
+if ![runto_main] {
+    untested "could not run to main"
+    return -1
+}
+
+# Try printing "this_version_num" qualified with the name of the file
+# where the variables are defined.  There are two global variables
+# with that name, and some systems such as GNU/Linux merge them
+# into one single entity, while some other systems such as Windows
+# keep them separate.  In the first situation, we have to verify
+# that GDB does not randomly select the wrong instance, even when
+# a specific filename is used to qualified the lookup.  And in the
+# second case, we have to verify that GDB does select the instance
+# defined in the given filename.
+#
+# To avoid adding target-specific code in this testcase, the program
+# sets two local variable named 'v1' and 'v2' with the value of
+# our global variables.  This allows us to compare the value that
+# GDB returns for each query against the actual value seen by
+# the program itself.
+
+# Get past the initialization of variables 'v1' and 'v2'.
+
+set bp_location \
+    [gdb_get_line_number "STOP" "${executable}.c"]
+gdb_test "break $executable.c:$bp_location" \
+         "Breakpoint \[0-9\]+ at 0x\[0-9a-fA-F\]+: .*" \
+         "breapoint past v1 & v2 initialization"
+
+gdb_test "continue" \
+         "Breakpoint \[0-9\]+, main \\(\\) at.*" \
+         "continue to STOP marker"
+
+# Now check the value of this_version_id in both print-file-var-lib1.c
+# and print-file-var-lib2.c.
+
+gdb_test "print 'print-file-var-lib1.c'::this_version_id == v1" \
+         " = 1"
+
+gdb_test "print 'print-file-var-lib2.c'::this_version_id == v2" \
+         " = 1"
diff --git a/gdb/testsuite/gdb.base/printcmds.c b/gdb/testsuite/gdb.base/printcmds.c
index b3841ae..743734b 100644
--- a/gdb/testsuite/gdb.base/printcmds.c
+++ b/gdb/testsuite/gdb.base/printcmds.c
@@ -96,6 +96,10 @@ enum some_volatile_enum { enumvolval1, enumvolval2 };
    name.  See PR11827.  */
 volatile enum some_volatile_enum some_volatile_enum = enumvolval1;
 
+enum flag_enum { ONE = 1, TWO = 2 };
+
+enum flag_enum three = ONE | TWO;
+
 /* A structure with an embedded array at an offset > 0.  The array has
    all elements with the same repeating value, which must not be the
    same as the value of the preceding fields in the structure for the
@@ -122,10 +126,6 @@ struct some_struct
 
 int main ()
 {
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
   malloc(1);
 
   /* Prevent AIX linker from removing variables.  */
diff --git a/gdb/testsuite/gdb.base/printcmds.exp b/gdb/testsuite/gdb.base/printcmds.exp
index d647ca8..993162e 100644
--- a/gdb/testsuite/gdb.base/printcmds.exp
+++ b/gdb/testsuite/gdb.base/printcmds.exp
@@ -21,10 +21,6 @@
 
 # This file was written by Fred Fish. (fnf at cygnus.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 set testfile "printcmds"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
@@ -33,7 +29,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
      return -1
 }
 
-get_compiler_info ${binfile}
+get_compiler_info
 
 proc test_integer_literals_accepted {} {
     global gdb_prompt
@@ -426,7 +422,7 @@ proc test_print_all_chars {} {
 # repeat count, set to the default of 10.
 
 proc test_print_repeats_10 {} {
-    global gdb_prompt
+    global gdb_prompt decimal
 
     for { set x 1; } { $x <= 16 } { incr x; } {
 	gdb_test_no_output "set print elements $x"
@@ -468,7 +464,7 @@ proc test_print_repeats_10 {} {
 	    if { $aval < 16 } {
 		set xstr "${xstr}\[.\]\[.\]\[.\]"
 	    }
-	    set string " = \[(\]unsigned char \[*\]\[)\] ${a}${xstr}";
+	    set string " = \[(\]unsigned char \[*\]\[)\] <ctable2(\\+$decimal)?> ${a}${xstr}";
 	    gdb_test "$command" "$string" "$command with print elements set to $x";
 	}
     }
@@ -487,7 +483,7 @@ proc test_print_repeats_embedded_array {} {
 }
 
 proc test_print_strings {} {
-    global gdb_prompt
+    global gdb_prompt decimal
 
     # We accept "(unsigned char *) " before the string.  char vs. unsigned char
     # is already tested elsewhere.
@@ -513,71 +509,71 @@ proc test_print_strings {} {
     gdb_test_no_output "set print elements 8"
 
     gdb_test "p &ctable1\[0\]" \
-	" = \\(unsigned char \\*\\) \"\""
+	" = \\(unsigned char \\*\\) <ctable1> \"\""
     gdb_test "p &ctable1\[1\]" \
-	" = \\(unsigned char \\*\\) \"\\\\001\\\\002\\\\003\\\\004\\\\005\\\\006\\\\a\\\\b\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\001\\\\002\\\\003\\\\004\\\\005\\\\006\\\\a\\\\b\"..."
     gdb_test "p &ctable1\[1*8\]" \
-	" = \\(unsigned char \\*\\) \"\\\\b\\\\t\\\\n\\\\v\\\\f\\\\r\\\\016\\\\017\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\b\\\\t\\\\n\\\\v\\\\f\\\\r\\\\016\\\\017\"..."
     gdb_test "p &ctable1\[2*8\]" \
-	" = \\(unsigned char \\*\\) \"\\\\020\\\\021\\\\022\\\\023\\\\024\\\\025\\\\026\\\\027\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\020\\\\021\\\\022\\\\023\\\\024\\\\025\\\\026\\\\027\"..."
     gdb_test "p &ctable1\[3*8\]" \
-	" = \\(unsigned char \\*\\) \"\\\\030\\\\031\\\\032\\\\033\\\\034\\\\035\\\\036\\\\037\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\030\\\\031\\\\032\\\\033\\\\034\\\\035\\\\036\\\\037\"..."
     gdb_test "p &ctable1\[4*8\]" \
-	" = \\(unsigned char \\*\\) \" !\\\\\"#\\\$%&'\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \" !\\\\\"#\\\$%&'\"..."
     gdb_test "p &ctable1\[5*8\]" \
-	" = \\(unsigned char \\*\\) \"\\(\\)\\*\\+,-./\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\(\\)\\*\\+,-./\"..."
     gdb_test "p &ctable1\[6*8\]" \
-	" = \\(unsigned char \\*\\) \"01234567\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"01234567\"..."
     gdb_test "p &ctable1\[7*8\]" \
-	" = \\(unsigned char \\*\\) \"89:;<=>\\?\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"89:;<=>\\?\"..."
     gdb_test "p &ctable1\[8*8\]" \
-	" = \\(unsigned char \\*\\) \"@ABCDEFG\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"@ABCDEFG\"..."
     gdb_test "p &ctable1\[9*8\]" \
-	" = \\(unsigned char \\*\\) \"HIJKLMNO\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"HIJKLMNO\"..."
     gdb_test "p &ctable1\[10*8\]" \
-	" = \\(unsigned char \\*\\) \"PQRSTUVW\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"PQRSTUVW\"..."
     gdb_test "p &ctable1\[11*8\]" \
-	" = \\(unsigned char \\*\\) \"XYZ\\\[\\\\\\\\\\\]\\^_\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"XYZ\\\[\\\\\\\\\\\]\\^_\"..."
     gdb_test "p &ctable1\[12*8\]" \
-	" = \\(unsigned char \\*\\) \"`abcdefg\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"`abcdefg\"..."
     gdb_test "p &ctable1\[13*8\]" \
-	" = \\(unsigned char \\*\\) \"hijklmno\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"hijklmno\"..."
     gdb_test "p &ctable1\[14*8\]" \
-	" = \\(unsigned char \\*\\) \"pqrstuvw\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"pqrstuvw\"..."
     gdb_test "p &ctable1\[15*8\]" \
-	" = \\(unsigned char \\*\\) \"xyz\[{|}\]+\\~\\\\177\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"xyz\[{|}\]+\\~\\\\177\"..."
     gdb_test "p &ctable1\[16*8\]" \
-	" = \\(unsigned char \\*\\) \"\\\\200\\\\201\\\\202\\\\203\\\\204\\\\205\\\\206\\\\207\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\200\\\\201\\\\202\\\\203\\\\204\\\\205\\\\206\\\\207\"..."
     gdb_test "p &ctable1\[17*8\]" \
-	" = \\(unsigned char \\*\\) \"\\\\210\\\\211\\\\212\\\\213\\\\214\\\\215\\\\216\\\\217\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\210\\\\211\\\\212\\\\213\\\\214\\\\215\\\\216\\\\217\"..."
     gdb_test "p &ctable1\[18*8\]" \
-	" = \\(unsigned char \\*\\) \"\\\\220\\\\221\\\\222\\\\223\\\\224\\\\225\\\\226\\\\227\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\220\\\\221\\\\222\\\\223\\\\224\\\\225\\\\226\\\\227\"..."
     gdb_test "p &ctable1\[19*8\]" \
-	" = \\(unsigned char \\*\\) \"\\\\230\\\\231\\\\232\\\\233\\\\234\\\\235\\\\236\\\\237\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\230\\\\231\\\\232\\\\233\\\\234\\\\235\\\\236\\\\237\"..."
     gdb_test "p &ctable1\[20*8\]" \
-	" = \\(unsigned char \\*\\) \"\\\\240\\\\241\\\\242\\\\243\\\\244\\\\245\\\\246\\\\247\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\240\\\\241\\\\242\\\\243\\\\244\\\\245\\\\246\\\\247\"..."
     gdb_test "p &ctable1\[21*8\]" \
-	" = \\(unsigned char \\*\\) \"\\\\250\\\\251\\\\252\\\\253\\\\254\\\\255\\\\256\\\\257\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\250\\\\251\\\\252\\\\253\\\\254\\\\255\\\\256\\\\257\"..."
     gdb_test "p &ctable1\[22*8\]" \
-	" = \\(unsigned char \\*\\) \"\\\\260\\\\261\\\\262\\\\263\\\\264\\\\265\\\\266\\\\267\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\260\\\\261\\\\262\\\\263\\\\264\\\\265\\\\266\\\\267\"..."
     gdb_test "p &ctable1\[23*8\]" \
-	" = \\(unsigned char \\*\\) \"\\\\270\\\\271\\\\272\\\\273\\\\274\\\\275\\\\276\\\\277\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\270\\\\271\\\\272\\\\273\\\\274\\\\275\\\\276\\\\277\"..."
     gdb_test "p &ctable1\[24*8\]" \
-	" = \\(unsigned char \\*\\) \"\\\\300\\\\301\\\\302\\\\303\\\\304\\\\305\\\\306\\\\307\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\300\\\\301\\\\302\\\\303\\\\304\\\\305\\\\306\\\\307\"..."
     gdb_test "p &ctable1\[25*8\]" \
-	" = \\(unsigned char \\*\\) \"\\\\310\\\\311\\\\312\\\\313\\\\314\\\\315\\\\316\\\\317\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\310\\\\311\\\\312\\\\313\\\\314\\\\315\\\\316\\\\317\"..."
     gdb_test "p &ctable1\[26*8\]" \
-	" = \\(unsigned char \\*\\) \"\\\\320\\\\321\\\\322\\\\323\\\\324\\\\325\\\\326\\\\327\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\320\\\\321\\\\322\\\\323\\\\324\\\\325\\\\326\\\\327\"..."
     gdb_test "p &ctable1\[27*8\]" \
-	" = \\(unsigned char \\*\\) \"\\\\330\\\\331\\\\332\\\\333\\\\334\\\\335\\\\336\\\\337\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\330\\\\331\\\\332\\\\333\\\\334\\\\335\\\\336\\\\337\"..."
     gdb_test "p &ctable1\[28*8\]" \
-	" = \\(unsigned char \\*\\) \"\\\\340\\\\341\\\\342\\\\343\\\\344\\\\345\\\\346\\\\347\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\340\\\\341\\\\342\\\\343\\\\344\\\\345\\\\346\\\\347\"..."
     gdb_test "p &ctable1\[29*8\]" \
-	" = \\(unsigned char \\*\\) \"\\\\350\\\\351\\\\352\\\\353\\\\354\\\\355\\\\356\\\\357\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\350\\\\351\\\\352\\\\353\\\\354\\\\355\\\\356\\\\357\"..."
     gdb_test "p &ctable1\[30*8\]" \
-	" = \\(unsigned char \\*\\) \"\\\\360\\\\361\\\\362\\\\363\\\\364\\\\365\\\\366\\\\367\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\360\\\\361\\\\362\\\\363\\\\364\\\\365\\\\366\\\\367\"..."
     gdb_test "p &ctable1\[31*8\]" \
-	" = \\(unsigned char \\*\\) \"\\\\370\\\\371\\\\372\\\\373\\\\374\\\\375\\\\376\\\\377\"..."
+	" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\370\\\\371\\\\372\\\\373\\\\374\\\\375\\\\376\\\\377\"..."
 }
 
 proc test_print_int_arrays {} {
@@ -628,7 +624,7 @@ proc test_artificial_arrays {} {
 
 proc test_print_char_arrays {} {
     global gdb_prompt
-    global hex
+    global hex decimal
 
     gdb_test_no_output "set print elements 24"
     gdb_test_no_output "set print address on"
@@ -636,17 +632,17 @@ proc test_print_char_arrays {} {
     gdb_test "p arrays" \
 	" = {array1 = \"abc\", array2 = \"d\", array3 = \"e\", array4 = \"fg\", array5 = \"hij\"}"
 
-    gdb_test "p parrays"		" = \\(struct some_arrays \\*\\) $hex"
+    gdb_test "p parrays"		" = \\(struct some_arrays \\*\\) $hex <arrays>"
     gdb_test "p parrays->array1"	" = \"abc\""
-    gdb_test "p &parrays->array1"	" = \\(unsigned char \\(\\*\\)\\\[4\\\]\\) $hex"
+    gdb_test "p &parrays->array1"	" = \\(unsigned char \\(\\*\\)\\\[4\\\]\\) $hex <arrays>"
     gdb_test "p parrays->array2"	" = \"d\""
-    gdb_test "p &parrays->array2"	" = \\(unsigned char \\(\\*\\)\\\[1\\\]\\) $hex"
+    gdb_test "p &parrays->array2"	" = \\(unsigned char \\(\\*\\)\\\[1\\\]\\) $hex <arrays\\+$decimal>"
     gdb_test "p parrays->array3"	" = \"e\""
-    gdb_test "p &parrays->array3"	" = \\(unsigned char \\(\\*\\)\\\[1\\\]\\) $hex"
+    gdb_test "p &parrays->array3"	" = \\(unsigned char \\(\\*\\)\\\[1\\\]\\) $hex <arrays\\+$decimal>"
     gdb_test "p parrays->array4"	" = \"fg\""
-    gdb_test "p &parrays->array4"	" = \\(unsigned char \\(\\*\\)\\\[2\\\]\\) $hex"
+    gdb_test "p &parrays->array4"	" = \\(unsigned char \\(\\*\\)\\\[2\\\]\\) $hex <arrays\\+$decimal>"
     gdb_test "p parrays->array5"	" = \"hij\""
-    gdb_test "p &parrays->array5"	" = \\(unsigned char \\(\\*\\)\\\[4\\\]\\) $hex"
+    gdb_test "p &parrays->array5"	" = \\(unsigned char \\(\\*\\)\\\[4\\\]\\) $hex <arrays\\+$decimal>"
 
     gdb_test_no_output "set print address off"
 }
@@ -701,6 +697,8 @@ proc test_print_array_constants {} {
 proc test_print_enums {} {
     # Regression test for PR11827.
     gdb_test "print some_volatile_enum" "enumvolval1"
+
+    gdb_test "print three" " = \\\(ONE \\| TWO\\\)"
 }
 
 proc test_printf {} {
@@ -775,6 +773,16 @@ proc test_printf_with_dfp {} {
     gdb_test "printf \"%DDf\\n\",1.2E6144dl" "1.200000000000000000000000000000000E\\+6144"
 }
 
+proc test_print_symbol {} {
+    gdb_test_no_output "set print symbol on"
+
+    gdb_test "print &three" " = .* <three>"
+    gdb_test "print parrays" " = .* <arrays>"
+
+    # In case somebody adds tests after this.
+    gdb_test_no_output "set print symbol off"
+}
+
 # Escape a left curly brace to prevent it from being interpreted as 
 # the beginning of a bound
 proc gdb_test_escape_braces { args } {
@@ -842,3 +850,4 @@ test_print_array_constants
 test_print_enums
 test_printf
 test_printf_with_dfp
+test_print_symbol
diff --git a/gdb/testsuite/gdb.base/psymtab.exp b/gdb/testsuite/gdb.base/psymtab.exp
index 2606dd2..fc0992b 100644
--- a/gdb/testsuite/gdb.base/psymtab.exp
+++ b/gdb/testsuite/gdb.base/psymtab.exp
@@ -19,10 +19,6 @@
 # are working properly.  If multiple tests are added, make sure that
 # you exit and restart GDB between tests.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # test running programs
 #
@@ -50,7 +46,7 @@ if  { [gdb_compile "${testfile}1.o ${testfile}2.o" ${binfile} executable {debug}
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.base/ptr-typedef.exp b/gdb/testsuite/gdb.base/ptr-typedef.exp
index c69dcf4..674ce45 100644
--- a/gdb/testsuite/gdb.base/ptr-typedef.exp
+++ b/gdb/testsuite/gdb.base/ptr-typedef.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 set testfile ptr-typedef
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
diff --git a/gdb/testsuite/gdb.base/ptype.c b/gdb/testsuite/gdb.base/ptype.c
index b154ab4..4148da7 100644
--- a/gdb/testsuite/gdb.base/ptype.c
+++ b/gdb/testsuite/gdb.base/ptype.c
@@ -290,10 +290,6 @@ int main ()
      sure it is linked in to this program.  */
   v_char_pointer = (char *) malloc (1);
 
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
   /* Some linkers (e.g. on AIX) remove unreferenced variables,
      so make sure to reference them. */
   primary = blue;
diff --git a/gdb/testsuite/gdb.base/ptype.exp b/gdb/testsuite/gdb.base/ptype.exp
index ff71186..c7bede2 100644
--- a/gdb/testsuite/gdb.base/ptype.exp
+++ b/gdb/testsuite/gdb.base/ptype.exp
@@ -16,10 +16,6 @@
 
 # This file was written by Rob Savoye. (rob at cygnus.com)
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
 #
 # test running programs
 #
@@ -44,7 +40,7 @@ if  { [gdb_compile "${binfile}0.o ${binfile}1.o" "${binfile}" executable {debug}
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
@@ -173,7 +169,7 @@ gdb_test "ptype red" "type = enum \{red, green, blue\}.*" "ptype unnamed enumera
 # acts like whatis for basic types.  If it is thought to be necessary to
 # test both whatis and ptype for all the types, the tests should be
 # merged into whatis.exp, or else maintenance will be a royal pain -kingdon
-#setup_xfail "mips-idt-*" "mips-sgi-*"
+#setup_xfail "mips-sgi-*"
 #send "ptype v_char\n"
 #gdb_expect {
 #    -re "type = char.*$gdb_prompt $"	{ pass "ptype char" }
@@ -277,7 +273,7 @@ gdb_test "ptype v_int" "type = int.*" "ptype int"
 #
 # test ptype command with arrays
 #
-#setup_xfail "mips-idt-*" "mips-sgi-*"
+#setup_xfail "mips-sgi-*"
 #send "ptype v_char_array\n"
 #gdb_expect {
 #    -re "type = char .2..*$gdb_prompt $"	{ pass "ptype char array" }
@@ -378,7 +374,7 @@ gdb_test "ptype t_char_array" "type = (|unsigned )char \\\[0?\\\]"
 ##
 ## test ptype command with pointers
 ##
-#setup_xfail "mips-idt-*" "mips-sgi-*"
+#setup_xfail "mips-sgi-*"
 #send "ptype v_char_pointer\n"
 #gdb_expect {
 #    -re "type = char \*.*$gdb_prompt $"	{ pass "ptype char pointer" }
diff --git a/gdb/testsuite/gdb.base/radix.exp b/gdb/testsuite/gdb.base/radix.exp
index 39ac713..758232d 100644
--- a/gdb/testsuite/gdb.base/radix.exp
+++ b/gdb/testsuite/gdb.base/radix.exp
@@ -17,10 +17,6 @@
 # This file was written by Fred Fish. (fnf at cygnus.com)
 # And rewritten by Michael Chastain (mec.gnu at mindspring.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 # Start with a fresh gdb.
 
diff --git a/gdb/testsuite/gdb.base/readline.exp b/gdb/testsuite/gdb.base/readline.exp
index e7538a4..2445aec 100644
--- a/gdb/testsuite/gdb.base/readline.exp
+++ b/gdb/testsuite/gdb.base/readline.exp
@@ -142,10 +142,6 @@ proc operate_and_get_next {name args} {
 }
 
 
-if $tracelevel {
-  strace $tracelevel
-}
-
 gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
 
diff --git a/gdb/testsuite/gdb.base/recpar.c b/gdb/testsuite/gdb.base/recpar.c
new file mode 100644
index 0000000..e6c3e23
--- /dev/null
+++ b/gdb/testsuite/gdb.base/recpar.c
@@ -0,0 +1,42 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+int
+foo (int n)
+{
+  int val = n;
+
+  {
+    char val = n ? 'y' : 'n'; /* Hides upper-level `val'.  */
+
+    if (val == 'y') /* BREAK */
+      return n + foo (n - 1);
+  }
+
+  return 0;
+}
+
+int
+main (void)
+{
+  int res = foo (5);
+
+  if (res != 15) /* Dummy use of variable res.  */
+    return 1;
+
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.base/recpar.exp b/gdb/testsuite/gdb.base/recpar.exp
new file mode 100644
index 0000000..6dd466b
--- /dev/null
+++ b/gdb/testsuite/gdb.base/recpar.exp
@@ -0,0 +1,42 @@
+# Copyright (C) 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+set testfile recpar
+set srcfile ${testfile}.c
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
+    return -1
+}
+
+if ![runto_main] {
+    untested ${testfile}.exp
+    return -1
+}
+
+gdb_test "break $srcfile:[gdb_get_line_number BREAK $srcfile] if n == 3" \
+         "Breakpoint $decimal at $hex: file .*recpar\\.c, line $decimal\\."
+
+gdb_test "continue" \
+         "Breakpoint .* foo \\(n=3\\) at .*$srcfile:$decimal.*"
+
+gdb_test "backtrace" \
+         "#0 +foo \\(n=3\\).*\r\n#1.* foo \\(n=4\\).*\r\n#2.* foo \\(n=5\\).*#3.* main \\(\\).*"
+
+gdb_test "frame 2" \
+         "#2 .* foo \\(n=5\\) .*"
+
+# In the currently selected frame, n=5, and thus foo::val should be 5
+# as well.
+gdb_test "print foo::val" \
+         " = 5"
diff --git a/gdb/testsuite/gdb.base/recurse.c b/gdb/testsuite/gdb.base/recurse.c
index 7981778..cb7b022 100644
--- a/gdb/testsuite/gdb.base/recurse.c
+++ b/gdb/testsuite/gdb.base/recurse.c
@@ -22,10 +22,6 @@ recurse (a)
 
 int main()
 {
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
   recurse (10);
   return 0;
 }
diff --git a/gdb/testsuite/gdb.base/recurse.exp b/gdb/testsuite/gdb.base/recurse.exp
index 0dadc78..cbc9871 100644
--- a/gdb/testsuite/gdb.base/recurse.exp
+++ b/gdb/testsuite/gdb.base/recurse.exp
@@ -16,10 +16,6 @@
 
 # This file was written by Jeff Law. (law at cs.utah.edu)
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 set testfile "recurse"
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/regs.exp b/gdb/testsuite/gdb.base/regs.exp
deleted file mode 100644
index 3f046bc..0000000
--- a/gdb/testsuite/gdb.base/regs.exp
+++ /dev/null
@@ -1,82 +0,0 @@
-# Tests of register displays for GDB.
-#   Copyright 1994-1995, 2007-2012 Free Software Foundation, Inc.
-
-# 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 3 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, see <http://www.gnu.org/licenses/>.
-
-# This file was written by Stan Shebs. (shebs at cygnus.com)
-
-# This does not (yet) have an associated executable, since the IDT board
-# will display registers even without a program being loaded.
-# A more comprehensive register test would actually test reading
-# and writing of registers in a real program, although some care
-# would be required in the writing of the tests.
-
-if $tracelevel then {
-	strace $tracelevel
-	}
-
-# These tests exercise IDT-specific MIPS registers for several
-# different processor models.
-
-# This should detect the actual processor in use and change
-# the expected results appropriately.  FIXME
-
-proc idt_register_tests { } {
-	# Test the generic IDT chip.
-	gdb_test "info registers" ".*"
-	gdb_test "info register zero" "zero(r0): 0x0;"
-	# FIXME access each generic register individually
-	# Test the 3041.
-	gdb_test "set processor r3041" ".*"
-	gdb_test "info registers" ".*"
-	gdb_test "info register bus"  "bus.*0x.*"
-	gdb_test "info register ccfg" "ccfg.*0x.*"
-	gdb_test "info register port" "port.*0x.*"
-	gdb_test "info register cmp"  "cmp.*0x.*"
-	gdb_test "info register elo"  "elo: invalid register"
-	gdb_test "info register ehi"  "ehi: invalid register"
-	gdb_test "info register cfg"  "cfg: invalid register"
-	gdb_test "info register ctxt" "ctxt: invalid register"
-	# Test the 3051.
-	gdb_test "set processor r3051" ".*"
-	gdb_test "info registers" ".*"
-	gdb_test "info register bus"  "bus: invalid register"
-	gdb_test "info register ccfg" "ccfg: invalid register"
-	gdb_test "info register port" "port: invalid register"
-	gdb_test "info register cmp"  "cmp: invalid register"
-	gdb_test "info register elo"  "elo.*0x.*"
-	gdb_test "info register ehi"  "ehi.*0x.*"
-	gdb_test "info register cfg"  "cfg: invalid register"
-	gdb_test "info register ctxt" "ctxt: invalid register"
-	# Test the 3071.
-	gdb_test "set processor r3071" ".*"
-	gdb_test "info registers" ".*"
-	gdb_test "info register bus"  "bus: invalid register"
-	gdb_test "info register ccfg" "ccfg: invalid register"
-	gdb_test "info register port" "port: invalid register"
-	gdb_test "info register cmp"  "cmp: invalid register"
-	gdb_test "info register elo"  "elo.*0x.*"
-	gdb_test "info register ehi"  "ehi.*0x.*"
-	gdb_test "info register cfg"  "cfg.*0x.*"
-	gdb_test "info register ctxt" "ctxt.*0x.*"
-}
-
-if [istarget "mips*-idt-*"] then {
-    gdb_exit
-    gdb_start
-    gdb_reinitialize_dir $srcdir/$subdir
-    idt_register_tests
-} else {
-    verbose "regs.exp tests ignored for this target"
-}
diff --git a/gdb/testsuite/gdb.base/relational.exp b/gdb/testsuite/gdb.base/relational.exp
index 26b77d7..356d313 100644
--- a/gdb/testsuite/gdb.base/relational.exp
+++ b/gdb/testsuite/gdb.base/relational.exp
@@ -21,10 +21,6 @@
 # with integer type variables
 # 
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
 #
 # test running programs
 #
@@ -33,7 +29,7 @@ if { [prepare_for_testing relational.exp relational int-type.c {debug nowarnings
     return -1
 }
 
-if [get_compiler_info not-used] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.base/relativedebug.exp b/gdb/testsuite/gdb.base/relativedebug.exp
index b37689e..4d570c0 100644
--- a/gdb/testsuite/gdb.base/relativedebug.exp
+++ b/gdb/testsuite/gdb.base/relativedebug.exp
@@ -18,10 +18,6 @@ if [target_info exists gdb,nosignals] {
     continue
 }
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 set testfile relativedebug
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
diff --git a/gdb/testsuite/gdb.base/relocate.exp b/gdb/testsuite/gdb.base/relocate.exp
index 5cb07ce..960597e 100644
--- a/gdb/testsuite/gdb.base/relocate.exp
+++ b/gdb/testsuite/gdb.base/relocate.exp
@@ -16,10 +16,6 @@
 # relocate.exp -- Expect script to test loading symbols from unrelocated
 #		  object files.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 set testfile relocate
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}.o
diff --git a/gdb/testsuite/gdb.base/remote.exp b/gdb/testsuite/gdb.base/remote.exp
index c9fe998..8f50787 100644
--- a/gdb/testsuite/gdb.base/remote.exp
+++ b/gdb/testsuite/gdb.base/remote.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 
 # test only on a remote target board
diff --git a/gdb/testsuite/gdb.base/remotetimeout.exp b/gdb/testsuite/gdb.base/remotetimeout.exp
index 9549dbd..d51f39b 100644
--- a/gdb/testsuite/gdb.base/remotetimeout.exp
+++ b/gdb/testsuite/gdb.base/remotetimeout.exp
@@ -18,10 +18,6 @@
 
 # This is a test for the gdb invocation option -l.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 global GDBFLAGS
 
diff --git a/gdb/testsuite/gdb.base/reread.exp b/gdb/testsuite/gdb.base/reread.exp
index 9b6bd11..2a0929f 100644
--- a/gdb/testsuite/gdb.base/reread.exp
+++ b/gdb/testsuite/gdb.base/reread.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 set prototypes 1
 
 # build the first test case
diff --git a/gdb/testsuite/gdb.base/reread1.c b/gdb/testsuite/gdb.base/reread1.c
index ae98010..5d1166a 100644
--- a/gdb/testsuite/gdb.base/reread1.c
+++ b/gdb/testsuite/gdb.base/reread1.c
@@ -16,10 +16,6 @@ void foo()
 
 int main()
 {
-#ifdef usestubs
-  set_debug_traps ();
-  breakpoint ();
-#endif
   foo();
   bar();
   return 0;
diff --git a/gdb/testsuite/gdb.base/reread2.c b/gdb/testsuite/gdb.base/reread2.c
index 6b630f7..f45f29e 100644
--- a/gdb/testsuite/gdb.base/reread2.c
+++ b/gdb/testsuite/gdb.base/reread2.c
@@ -12,10 +12,6 @@ void foo()
 
 int main()
 {
-#ifdef usestubs
-  set_debug_traps ();
-  breakpoint ();
-#endif
   foo();
   return 0;
 }
diff --git a/gdb/testsuite/gdb.base/restore.c b/gdb/testsuite/gdb.base/restore.c
index 2d45092..bf0bddc 100644
--- a/gdb/testsuite/gdb.base/restore.c
+++ b/gdb/testsuite/gdb.base/restore.c
@@ -270,10 +270,6 @@ driver (void)
 int main ()
 {
   register int local;
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
   driver ();
   printf("exiting\n");
   return 0;
diff --git a/gdb/testsuite/gdb.base/restore.exp b/gdb/testsuite/gdb.base/restore.exp
index 68ba2fe..e9b950c 100644
--- a/gdb/testsuite/gdb.base/restore.exp
+++ b/gdb/testsuite/gdb.base/restore.exp
@@ -21,10 +21,6 @@
 # This file was written by Jim Blandy <jimb at cygnus.com>, with
 # fragments borrowed from return.exp.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 set testfile "restore"
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/return-nodebug.exp b/gdb/testsuite/gdb.base/return-nodebug.exp
index 1058088..1802862 100644
--- a/gdb/testsuite/gdb.base/return-nodebug.exp
+++ b/gdb/testsuite/gdb.base/return-nodebug.exp
@@ -16,35 +16,32 @@
 proc do_test {type} {
     set typenospace [string map {{ } -} $type]
 
-    global pf_prefix
-    set old_prefix $pf_prefix
-    lappend pf_prefix "$typenospace:"
-
-    if {[runto "func"]} {
-	# Verify that we do not crash when using "return" from a function with
-	# no debugging info.  Such function has no `struct symbol'.  It may
-	# still have an associated `struct minimal_symbol'.
-
-    	gdb_test "return -1" \
-		 "Return value type not available for selected stack frame\\.\r\nPlease use an explicit cast of the value to return\\." \
-		 "return from function with no debug info without a cast"
-
-	# Cast of the result to the proper width must be done explicitely.
-	gdb_test "return ($type) -1" "#0 .* main \\(.*"			\
-		 "return from function with no debug info with a cast"	\
-		 "Make selected stack frame return now\\? \\(y or n\\) " "y"
-
-	gdb_test "advance marker" "marker \\(.*" \
-		 "advance to marker"
-
-	# And if it returned the full width of the result.
-	gdb_test "print /d t" " = -1" "full width of the returned result"
+    with_test_prefix "$typenospace" {
+	if {[runto "func"]} {
+	    # Verify that we do not crash when using "return" from a
+	    # function with no debugging info.  Such function has no
+	    # `struct symbol'.  It may still have an associated
+	    # `struct minimal_symbol'.
+
+	    gdb_test "return -1" \
+		"Return value type not available for selected stack frame\\.\r\nPlease use an explicit cast of the value to return\\." \
+		"return from function with no debug info without a cast"
+
+	    # Cast of the result to the proper width must be done explicitely.
+	    gdb_test "return ($type) -1" "#0 .* main \\(.*" \
+		"return from function with no debug info with a cast" \
+		"Make selected stack frame return now\\? \\(y or n\\) " "y"
+
+	    gdb_test "advance marker" "marker \\(.*" \
+		"advance to marker"
+
+	    # And if it returned the full width of the result.
+	    gdb_test "print /d t" " = -1" "full width of the returned result"
+	}
     }
-
-    set pf_prefix $old_prefix
 }
 
-foreach type {{signed char} {short} {int} {long} {long long}} {
+foreach type {{signed char} {short} {int} {long} {long long} {float} {double}} {
     set typeesc [string map {{ } {\ }} $type]
     set typenospace [string map {{ } -} $type]
 
diff --git a/gdb/testsuite/gdb.base/return.c b/gdb/testsuite/gdb.base/return.c
index d11a4b5..04b48d2 100644
--- a/gdb/testsuite/gdb.base/return.c
+++ b/gdb/testsuite/gdb.base/return.c
@@ -23,10 +23,6 @@ double tmp3;
 
 int main ()
 {
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
   func1 ();
   printf("in main after func1\n");
   tmp2 = func2 ();
diff --git a/gdb/testsuite/gdb.base/return2.exp b/gdb/testsuite/gdb.base/return2.exp
index 22a0f57..8c7ea15 100644
--- a/gdb/testsuite/gdb.base/return2.exp
+++ b/gdb/testsuite/gdb.base/return2.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Michael Snyder (msnyder at redhat.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile "return2"
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/run.c b/gdb/testsuite/gdb.base/run.c
index 25b8a4a..c1c3a1b 100644
--- a/gdb/testsuite/gdb.base/run.c
+++ b/gdb/testsuite/gdb.base/run.c
@@ -49,10 +49,6 @@ int argc;
 char *argv[], **envp;
 #endif
 {
-#ifdef usestubs
-    set_debug_traps();
-    breakpoint();
-#endif
 #ifdef FAKEARGV
     printf ("%d\n", factorial (1));
 #else    
diff --git a/gdb/testsuite/gdb.base/save-bp.exp b/gdb/testsuite/gdb.base/save-bp.exp
index 439a20e..7d63dc3 100644
--- a/gdb/testsuite/gdb.base/save-bp.exp
+++ b/gdb/testsuite/gdb.base/save-bp.exp
@@ -66,4 +66,4 @@ gdb_test "source bps"
 # Now, verify that all breakpoints have been created correctly...
 set bp_row_start "\[0-9\]+ +breakpoint +keep +y +0x\[0-9a-f\]+ +in"
 gdb_test "info break" \
-  " *Num +Type +Disp +Enb +Address +What\r\n$bp_row_start break_me at .*$srcfile:\[0-9\]+\r\n$bp_row_start main at .*$srcfile:$loc_bp2\r\n$bp_row_start main at .*$srcfile:$loc_bp3 +thread 1\r\n\[ \t]+stop only in thread 1\r\n$bp_row_start main at .*$srcfile:$loc_bp4\r\n\[ \t\]+stop only if i == 1\r\n$bp_row_start main at .*$srcfile:$loc_bp5\r\n\[ \t\]+silent"
+  " *Num +Type +Disp +Enb +Address +What\r\n$bp_row_start break_me at .*$srcfile:\[0-9\]+\r\n$bp_row_start main at .*$srcfile:$loc_bp2\r\n$bp_row_start main at .*$srcfile:$loc_bp3 +thread 1\r\n\[ \t]+stop only in thread 1\r\n$bp_row_start main at .*$srcfile:$loc_bp4\r\n\[ \t\]+stop only if i == 1( \\((host|target) evals\\))?\r\n$bp_row_start main at .*$srcfile:$loc_bp5\r\n\[ \t\]+silent"
diff --git a/gdb/testsuite/gdb.base/savedregs.exp b/gdb/testsuite/gdb.base/savedregs.exp
index 8837e1f..394afc9 100644
--- a/gdb/testsuite/gdb.base/savedregs.exp
+++ b/gdb/testsuite/gdb.base/savedregs.exp
@@ -29,10 +29,6 @@ if [target_info exists gdb,nosignals] {
     continue
 }
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 set testfile savedregs
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/scope.exp b/gdb/testsuite/gdb.base/scope.exp
index 7059226..273eaae 100644
--- a/gdb/testsuite/gdb.base/scope.exp
+++ b/gdb/testsuite/gdb.base/scope.exp
@@ -16,10 +16,6 @@
 
 # This file was written by Fred Fish. (fnf at cygnus.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile "scope"
 set binfile ${objdir}/${subdir}/${testfile}
@@ -42,7 +38,7 @@ if  { [gdb_compile "${binfile}0.o ${binfile}1.o" ${binfile} executable {debug}]
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
@@ -556,37 +552,9 @@ gdb_test "print 'scope0.c'::filelocal" "= 1" \
     "print 'scope0.c'::filelocal before run"
 
 if [runto_main] then { test_at_main }
-if [istarget "mips-idt-*"] then {
-    # Restart because IDT/SIM runs out of file descriptors.
-    gdb_exit
-    gdb_start
-    gdb_reinitialize_dir $srcdir/$subdir
-    gdb_load ${binfile}
-}
 if [runto foo] then { test_at_foo }
-if [istarget "mips-idt-*"] then {
-    # Restart because IDT/SIM runs out of file descriptors.
-    gdb_exit
-    gdb_start
-    gdb_reinitialize_dir $srcdir/$subdir
-    gdb_load ${binfile}
-}
 if [runto bar] then { test_at_bar }
-if [istarget "mips-idt-*"] then {
-    # Restart because IDT/SIM runs out of file descriptors.
-    gdb_exit
-    gdb_start
-    gdb_reinitialize_dir $srcdir/$subdir
-    gdb_load ${binfile}
-}
 if [runto localscopes] then { test_at_localscopes }
-if [istarget "mips-idt-*"] then {
-    # Restart because IDT/SIM runs out of file descriptors.
-    gdb_exit
-    gdb_start
-    gdb_reinitialize_dir $srcdir/$subdir
-    gdb_load ${binfile}
-}
 if [runto autovars] then { test_at_autovars }
 
 if [istarget "*-*-vxworks*"] {
diff --git a/gdb/testsuite/gdb.base/scope0.c b/gdb/testsuite/gdb.base/scope0.c
index 180a431..775f8dc 100644
--- a/gdb/testsuite/gdb.base/scope0.c
+++ b/gdb/testsuite/gdb.base/scope0.c
@@ -20,10 +20,6 @@ void marker4 ();
 
 int main ()
 {
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
   init0 ();
   foo ();
   autovars (5, 6);
diff --git a/gdb/testsuite/gdb.base/sect-cmd.exp b/gdb/testsuite/gdb.base/sect-cmd.exp
index a4fca41..8aeabe8 100644
--- a/gdb/testsuite/gdb.base/sect-cmd.exp
+++ b/gdb/testsuite/gdb.base/sect-cmd.exp
@@ -13,12 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
-global usestubs
-
 #
 # test running programs
 #
diff --git a/gdb/testsuite/gdb.base/sep.exp b/gdb/testsuite/gdb.base/sep.exp
index 7b8d203..eb0ad2b 100644
--- a/gdb/testsuite/gdb.base/sep.exp
+++ b/gdb/testsuite/gdb.base/sep.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 set testfile "sep"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
diff --git a/gdb/testsuite/gdb.base/sepdebug.c b/gdb/testsuite/gdb.base/sepdebug.c
index ebec8cc..55e9ec9 100644
--- a/gdb/testsuite/gdb.base/sepdebug.c
+++ b/gdb/testsuite/gdb.base/sepdebug.c
@@ -84,10 +84,6 @@ int argc;
 char *argv[], **envp;
 #endif
 {
-#ifdef usestubs
-    set_debug_traps();  /* set breakpoint 5 here */
-    breakpoint();
-#endif
     if (argc == 12345) {  /* an unlikely value < 2^16, in case uninited */ /* set breakpoint 6 here */
 	fprintf (stderr, "usage:  factorial <number>\n");
 	return 1;
diff --git a/gdb/testsuite/gdb.base/sepdebug.exp b/gdb/testsuite/gdb.base/sepdebug.exp
index 752ff0c..e6973fb 100644
--- a/gdb/testsuite/gdb.base/sepdebug.exp
+++ b/gdb/testsuite/gdb.base/sepdebug.exp
@@ -26,10 +26,6 @@
 # ".debug-id/ab/cdef.debug" file.
 
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # test running programs
 #
@@ -45,7 +41,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
 
 # Note: the procedure gdb_gnu_strip_debug will produce an executable called
 # ${binfile}, which is just like the executable ($binfile) but without
-# the debuginfo. Instead $binfile has a .gnudebuglink section which contains
+# the debuginfo. Instead $binfile has a .gnu_debuglink section which contains
 # the name of a debuginfo only file. This file will be stored in the
 # gdb.base/ subdirectory.
 
@@ -55,17 +51,31 @@ if [gdb_gnu_strip_debug $binfile] {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+#
+# PR gdb/9538.  Verify that symlinked executable still finds the separate
+# debuginfo.
+#
+set old_subdir ${subdir}
+set subdir ${subdir}/pr9538
+
+# Cleanup any stale state.
+remote_exec build "rm -rf ${subdir}"
+
+remote_exec build "mkdir ${subdir}"
+remote_exec build "ln -s ${binfile} ${subdir}"
+clean_restart ${testfile}${EXEEXT}
 if { $gdb_file_cmd_debug_info != "debug" } then {
     fail "No debug information found."
 }
 
-if [target_info exists gdb_stub] {
-    gdb_step_for_stub;
+# Restore subdir
+set subdir ${old_subdir}
+
+clean_restart ${testfile}${EXEEXT}
+if { $gdb_file_cmd_debug_info != "debug" } then {
+    fail "No debug information found."
 }
+
 #
 # test simple breakpoint setting commands
 #
@@ -140,17 +150,9 @@ gdb_test "break multi_line_while_conditional" \
     "Breakpoint.*at.* file .*$srcfile, line $bp_location4\\." \
     "breakpoint at start of multi line while conditional"
 
-set bp_location5 [gdb_get_line_number "set breakpoint 5 here"]
 set bp_location6 [gdb_get_line_number "set breakpoint 6 here"]
 
-#
-# check to see what breakpoints are set
-#
-if [target_info exists gdb_stub] {
-    set main_line $bp_location5
-} else {
-    set main_line $bp_location6
-}
+set main_line $bp_location6
 
 set bp_location7 [gdb_get_line_number "set breakpoint 7 here"]
 set bp_location8 [gdb_get_line_number "set breakpoint 8 here"]
@@ -172,9 +174,6 @@ gdb_test "info break" \
 # handle arguments.
 # Huh? There doesn't *appear* to be anything that passes arguments
 # below.
-if [istarget "mips-idt-*"] then {
-    return
-}
 
 #
 # run until the breakpoint at main is hit. For non-stubs-using targets.
@@ -379,14 +378,7 @@ gdb_test_multiple "break $bp_location1" \
 	}
 }
 
-send_gdb "commands $expect_out(1,string)\n"
-send_gdb "silent\n"
-send_gdb "end\n"
-gdb_expect {
-  -re ".*$gdb_prompt $"\
-          {pass "set silent break bp_location1"}
-  timeout {fail "(timeout) set silent break bp_location1"}
-}
+gdb_test "commands $expect_out(1,string)\nsilent\nend" ">end" "set silent break bp_location1"
 
 gdb_test "info break $expect_out(1,string)" \
     "\[0-9\]*\[ \t\]*breakpoint.*:$bp_location1\r\n\[ \t\]*silent.*" \
@@ -416,7 +408,7 @@ gdb_test "break $bp_location12 thread foo" \
 #
 
 gdb_test "break $bp_location12 foo" \
-    "Junk at end of arguments.*" \
+    "malformed linespec error: unexpected string, \"foo\".*" \
     "breakpoint with trailing garbage disallowed"
 
 # Verify that GDB responds gracefully to a "clear" command that has
@@ -657,14 +649,10 @@ test_next_with_recursion
 
 #********
 
-proc test_different_dir {type test_different_dir xfail} {
+proc test_different_dir {type test_different_dir xfail} { with_test_prefix "$type" {
     global srcdir subdir objdir binfile srcfile timeout gdb_prompt
-    global pf_prefix
     global bp_location6 decimal hex
 
-    set old_pf_prefix $pf_prefix
-    append pf_prefix " $type:"
-
     gdb_exit
     gdb_start
     gdb_reinitialize_dir $srcdir/$subdir
@@ -672,10 +660,6 @@ proc test_different_dir {type test_different_dir xfail} {
 	"set separate debug location"
     gdb_load ${binfile}
 
-    if [target_info exists gdb_stub] {
-	gdb_step_for_stub;
-    }
-
     #
     # test break at function
     #
@@ -758,9 +742,8 @@ proc test_different_dir {type test_different_dir xfail} {
 	gdb_test_no_output "set args main"
     }
 
-    set pf_prefix $old_pf_prefix
 # proc test_different_dir
-}
+}}
 
 
 # now move the .debug file to a different location so that we can test
diff --git a/gdb/testsuite/gdb.base/sepsymtab.exp b/gdb/testsuite/gdb.base/sepsymtab.exp
index 80bd438..2104739 100644
--- a/gdb/testsuite/gdb.base/sepsymtab.exp
+++ b/gdb/testsuite/gdb.base/sepsymtab.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # test running programs
 #
diff --git a/gdb/testsuite/gdb.base/set-lang-auto.exp b/gdb/testsuite/gdb.base/set-lang-auto.exp
index 90f2645..79b97bb 100644
--- a/gdb/testsuite/gdb.base/set-lang-auto.exp
+++ b/gdb/testsuite/gdb.base/set-lang-auto.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 set testfile start
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/set-noassign.exp b/gdb/testsuite/gdb.base/set-noassign.exp
new file mode 100644
index 0000000..5eba870
--- /dev/null
+++ b/gdb/testsuite/gdb.base/set-noassign.exp
@@ -0,0 +1,32 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+
+if { [prepare_for_testing set-noassign.exp "set-noassign" start.c {debug nowarnings}] } {
+    return -1
+}
+
+if ![runto_main] then {
+    fail "Can't run to main"
+    return 0
+}
+
+# Verify that set command without assignment emits a warning.
+#
+gdb_test "set language ada" ".*" "set language ada"
+
+gdb_test "set x=3" \
+	"warning: Expression is not an assignment \\(and might have no effect\\)" \
+	"warning for set without assignment"
diff --git a/gdb/testsuite/gdb.base/setshow.c b/gdb/testsuite/gdb.base/setshow.c
index fbaba0f..a30ef82 100644
--- a/gdb/testsuite/gdb.base/setshow.c
+++ b/gdb/testsuite/gdb.base/setshow.c
@@ -14,10 +14,6 @@ main(argc, argv)
 #endif
 {
   int i = 1;
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
 
   if (argc <= 0 || argc > 8)
     return -1;
diff --git a/gdb/testsuite/gdb.base/setshow.exp b/gdb/testsuite/gdb.base/setshow.exp
index 029de07..b218314 100644
--- a/gdb/testsuite/gdb.base/setshow.exp
+++ b/gdb/testsuite/gdb.base/setshow.exp
@@ -16,10 +16,6 @@
 
 # This file was written by Michael Snyder (msnyder at cygnus.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile "setshow"
 set srcfile ${testfile}.c
@@ -246,10 +242,6 @@ gdb_test_no_output "set write on" "set write on"
 #test show write on
 # This is only supported on targets which use exec.o.
 gdb_test "show write" "Writing into executable and core files is on..*" "show write (on)" 
-#test set symbol-reloading on
-gdb_test_no_output "set symbol-reloading on" "set symbol-reloading on" 
-#test show symbol-reloading on
-gdb_test "show symbol-reloading" "Dynamic symbol table reloading multiple times in one run is on..*" "show symbol-reloading (on)" 
 #test show user
 gdb_test_no_output "show user" "show user" 
 #test set verbose on
diff --git a/gdb/testsuite/gdb.base/setvar.c b/gdb/testsuite/gdb.base/setvar.c
index 969de0d..83509cd 100644
--- a/gdb/testsuite/gdb.base/setvar.c
+++ b/gdb/testsuite/gdb.base/setvar.c
@@ -10,10 +10,6 @@ main (argc, argv, envp)
 #endif
 {
     extern void dummy();
-#ifdef usestubs
-    set_debug_traps();
-    breakpoint();
-#endif
     dummy();
     return 0;
 }
diff --git a/gdb/testsuite/gdb.base/setvar.exp b/gdb/testsuite/gdb.base/setvar.exp
index 5594d39..870d043 100644
--- a/gdb/testsuite/gdb.base/setvar.exp
+++ b/gdb/testsuite/gdb.base/setvar.exp
@@ -21,10 +21,6 @@
 
 # This file was written by Rob Savoye. (rob at cygnus.com)
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
 #
 # test running programs
 #
@@ -39,7 +35,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.base/shlib-call.exp b/gdb/testsuite/gdb.base/shlib-call.exp
index c8a5745..5c82d66 100644
--- a/gdb/testsuite/gdb.base/shlib-call.exp
+++ b/gdb/testsuite/gdb.base/shlib-call.exp
@@ -28,10 +28,6 @@
 #prop lib shr1.sl
 #prop lib shr2.sl
 
-if $tracelevel then {
-        strace $tracelevel
-}
-
 
 if {[skip_shlib_tests]} {
     return 0
@@ -50,7 +46,7 @@ set binfile  ${objdir}/${subdir}/${testfile}
 set lib_opts "debug"
 set exec_opts [list debug shlib=${lib1} shlib=${lib2}]
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/shreloc.exp b/gdb/testsuite/gdb.base/shreloc.exp
index 93f3c3d..206d9d8 100644
--- a/gdb/testsuite/gdb.base/shreloc.exp
+++ b/gdb/testsuite/gdb.base/shreloc.exp
@@ -23,10 +23,6 @@ if {[skip_shlib_tests]} {
     return 0
 }
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # This file uses shreloc.c, shreloc1.c and shreloc2.c
 #
@@ -43,7 +39,7 @@ set binfile $objdir/$subdir/$testfile
 set lib1_sl $objdir/$subdir/$libfile1.sl
 set lib2_sl $objdir/$subdir/$libfile2.sl
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/sigall.c b/gdb/testsuite/gdb.base/sigall.c
index 28ae192..110029d 100644
--- a/gdb/testsuite/gdb.base/sigall.c
+++ b/gdb/testsuite/gdb.base/sigall.c
@@ -1,9 +1,6 @@
 #include <signal.h>
 #include <unistd.h>
 
-#ifdef __sh__
-#define signal(a,b)	/* Signals not supported on this target - make them go away */
-#endif
 
 /* Signal handlers, we set breakpoints in them to make sure that the
    signals really get delivered.  */
@@ -1577,10 +1574,6 @@ return 0;
 int
 main ()
 {
-#ifdef usestubs
-  set_debug_traps ();
-  breakpoint ();
-#endif
 
 #ifdef SIG_SETMASK
   /* Ensure all the signals aren't blocked.
diff --git a/gdb/testsuite/gdb.base/sigall.exp b/gdb/testsuite/gdb.base/sigall.exp
index e8d33d8..1f2bab7 100644
--- a/gdb/testsuite/gdb.base/sigall.exp
+++ b/gdb/testsuite/gdb.base/sigall.exp
@@ -18,10 +18,6 @@ if [target_info exists gdb,nosignals] {
     continue
 }
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 gdb_exit
 gdb_start
diff --git a/gdb/testsuite/gdb.base/sigaltstack.exp b/gdb/testsuite/gdb.base/sigaltstack.exp
index 75e4d98..854f151 100644
--- a/gdb/testsuite/gdb.base/sigaltstack.exp
+++ b/gdb/testsuite/gdb.base/sigaltstack.exp
@@ -27,10 +27,6 @@ if [target_info exists gdb,nosignals] {
     continue
 }
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 set testfile sigaltstack
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/sigbpt.exp b/gdb/testsuite/gdb.base/sigbpt.exp
index d79941e..ebe0a17 100644
--- a/gdb/testsuite/gdb.base/sigbpt.exp
+++ b/gdb/testsuite/gdb.base/sigbpt.exp
@@ -33,10 +33,6 @@ if [target_info exists gdb,nosignals] {
     continue
 }
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 set testfile "sigbpt"
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/siginfo-addr.exp b/gdb/testsuite/gdb.base/siginfo-addr.exp
index a56d136..d68d310 100644
--- a/gdb/testsuite/gdb.base/siginfo-addr.exp
+++ b/gdb/testsuite/gdb.base/siginfo-addr.exp
@@ -30,10 +30,6 @@ if [gdb_skip_stdio_test "siginfo-addr.exp"] {
     continue
 }
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 set testfile siginfo-addr
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/siginfo-obj.exp b/gdb/testsuite/gdb.base/siginfo-obj.exp
index 3747400..9ca649d 100644
--- a/gdb/testsuite/gdb.base/siginfo-obj.exp
+++ b/gdb/testsuite/gdb.base/siginfo-obj.exp
@@ -33,10 +33,6 @@ if { ! [istarget "i?86-*-linux*"]
     return
 }
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 set testfile siginfo-obj
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/siginfo.exp b/gdb/testsuite/gdb.base/siginfo.exp
index bb4f0a4..f9bdf32 100644
--- a/gdb/testsuite/gdb.base/siginfo.exp
+++ b/gdb/testsuite/gdb.base/siginfo.exp
@@ -28,10 +28,6 @@ if [target_info exists gdb,nosignals] {
     continue
 }
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 set testfile siginfo
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/signals.c b/gdb/testsuite/gdb.base/signals.c
index f1ebcfc..51e97c4 100644
--- a/gdb/testsuite/gdb.base/signals.c
+++ b/gdb/testsuite/gdb.base/signals.c
@@ -3,10 +3,6 @@
 #include <signal.h>
 #include <unistd.h>
 
-#ifdef __sh__
-#define signal(a,b)	/* Signals not supported on this target - make them go away */
-#define alarm(a)	/* Ditto for alarm() */
-#endif
 
 static int count = 0;
 
@@ -38,10 +34,6 @@ func2 ()
 int
 main ()
 {
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
 #ifdef SIGALRM
   signal (SIGALRM, handler);
 #endif
diff --git a/gdb/testsuite/gdb.base/signals.exp b/gdb/testsuite/gdb.base/signals.exp
index a9e60ee..1683fbc 100644
--- a/gdb/testsuite/gdb.base/signals.exp
+++ b/gdb/testsuite/gdb.base/signals.exp
@@ -19,10 +19,6 @@ if [target_info exists gdb,nosignals] {
     continue
 }
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile signals
 set srcfile ${testfile}.c
@@ -34,7 +30,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
@@ -48,8 +44,8 @@ gdb_exit
 gdb_start
 
 # This will need to be updated as the exact list of signals changes,
-# but I want to test that TARGET_SIGNAL_0, TARGET_SIGNAL_DEFAULT, and
-# TARGET_SIGNAL_UNKNOWN are skipped.
+# but I want to test that GDB_SIGNAL_0, GDB_SIGNAL_DEFAULT, and
+# GDB_SIGNAL_UNKNOWN are skipped.
 
 proc test_handle_all_print {} {
     global timeout
diff --git a/gdb/testsuite/gdb.base/signull.exp b/gdb/testsuite/gdb.base/signull.exp
index c76e153..9a59fb4 100644
--- a/gdb/testsuite/gdb.base/signull.exp
+++ b/gdb/testsuite/gdb.base/signull.exp
@@ -32,10 +32,6 @@ if [target_info exists gdb,nosignals] {
     continue
 }
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 set testfile "signull"
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/sigrepeat.exp b/gdb/testsuite/gdb.base/sigrepeat.exp
index 77c51b3..546d194 100644
--- a/gdb/testsuite/gdb.base/sigrepeat.exp
+++ b/gdb/testsuite/gdb.base/sigrepeat.exp
@@ -24,10 +24,6 @@ if [target_info exists gdb,nosignals] {
     continue
 }
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 set testfile sigrepeat
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/sigstep.exp b/gdb/testsuite/gdb.base/sigstep.exp
index 3768c88..fb290cd 100644
--- a/gdb/testsuite/gdb.base/sigstep.exp
+++ b/gdb/testsuite/gdb.base/sigstep.exp
@@ -26,10 +26,6 @@ if [target_info exists gdb,nosignals] {
     continue
 }
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 set testfile sigstep
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/sizeof.exp b/gdb/testsuite/gdb.base/sizeof.exp
index dcd0f65..0c64e01 100644
--- a/gdb/testsuite/gdb.base/sizeof.exp
+++ b/gdb/testsuite/gdb.base/sizeof.exp
@@ -20,10 +20,6 @@ if [target_info exists gdb,noinferiorio] {
     continue
 }
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 #
 # test running programs
 #
@@ -36,7 +32,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
      return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.base/skip.exp b/gdb/testsuite/gdb.base/skip.exp
index 061341c..5cb1424 100644
--- a/gdb/testsuite/gdb.base/skip.exp
+++ b/gdb/testsuite/gdb.base/skip.exp
@@ -27,9 +27,9 @@ set srcfile1 skip1.c
 #
 # Right after we start gdb, there's no default file or function to skip.
 #
-gdb_test "skip file" "No default file now."
+gdb_test "skip file" "No default file now." "skip file (no default file)"
 gdb_test "skip function" "No default function now."
-gdb_test "skip" "No default function now."
+gdb_test "skip" "No default function now." "skip (no default function)"
 
 if ![runto_main] { fail "skip tests suppressed" }
 
@@ -41,8 +41,8 @@ gdb_test "info skip" "Not skipping any files or functions\." "info skip empty"
 #
 # Create a skiplist entry for the current file and function.
 #
-gdb_test "skip file" "File .*$srcfile will be skipped when stepping\."
-gdb_test "skip" "Function main at .* will be skipped when stepping\."
+gdb_test "skip file" "File .*$srcfile will be skipped when stepping\." "skip file ($srcfile)"
+gdb_test "skip" "Function main at .* will be skipped when stepping\." "skip (main)"
 
 #
 # Create a skiplist entry for a specified file and function.
@@ -82,7 +82,7 @@ gdb_test "info skip" \
 #
 
 if ![runto_main] { fail "skip tests suppressed" }
-gdb_test "step"
+gdb_test "step" ".*" "step in the main"
 gdb_test "bt" "\\s*\\#0\\s+main.*" "step after all ignored"
 
 #
@@ -96,12 +96,13 @@ gdb_test "info skip" \
   "Num\\s+Type\\s+Enb\\s+Address\\s+What\\s*
 2\\s+function\\s+y\\s+0x\[0-9a-f\]+ main at .*$srcfile:\[0-9\]+\\s*
 3\\s+file\\s+y\\s+.*$srcfile1\\s*
-4\\s+function\\s+y\\s+0x\[0-9a-f\]+ baz at .*$srcfile1:\[0-9\]+\\s*"
+4\\s+function\\s+y\\s+0x\[0-9a-f\]+ baz at .*$srcfile1:\[0-9\]+\\s*" \
+    "info skip (delete 1)"
 
 if ![runto_main] { fail "skip tests suppressed" }
 gdb_test "step" "foo \\(\\) at.*" "step after deleting 1 (1)"
-gdb_test "step"; # Return from foo()
-gdb_test "step" "main \\(\\) at.*" "step after deleting 1 (2)"
+gdb_test "step" ".*" "step after deleting 1 (2)" ; # Return from foo()
+gdb_test "step" "main \\(\\) at.*" "step after deleting 1 (3)"
 
 #
 # Now disable the skiplist entry for  skip1.c.  We should now
@@ -114,10 +115,10 @@ gdb_test "info skip 3" ".*\\n3\\s+file\\s+n.*" \
 
 if ![runto_main] { fail "skip tests suppressed" }
 gdb_test "step" "bar \\(\\) at.*" "step after disabling 3 (1)"
-gdb_test "step"; # Return from foo()
-gdb_test "step" "foo \\(\\) at.*" "step after disabling 3 (2)"
-gdb_test "step"; # Return from bar()
-gdb_test "step" "main \\(\\) at.*" "step after disabling 3 (3)"
+gdb_test "step" ".*" "step after disabling 3 (2)"; # Return from foo()
+gdb_test "step" "foo \\(\\) at.*" "step after disabling 3 (3)"
+gdb_test "step" ".*" "step after disabling 3 (4)"; # Return from bar()
+gdb_test "step" "main \\(\\) at.*" "step after disabling 3 (5)"
 
 #
 # Enable skiplist entry 3 and make sure we step over it like before.
@@ -127,9 +128,9 @@ gdb_test "skip enable 3"
 gdb_test "info skip 3" ".*\\n3\\s+file\\s+y.*" \
   "info skip shows entry as enabled"
 if ![runto_main] { fail "skip tests suppressed" }
-gdb_test "step" "foo \\(\\) at.*" "step after deleting 1 (1)"
-gdb_test "step"; # Return from foo()
-gdb_test "step" "main \\(\\) at.*" "step after deleting 1 (2)"
+gdb_test "step" "foo \\(\\) at.*" "step after enable 3 (1)"
+gdb_test "step" ".*" "step after enable 3 (2)"; # Return from foo()
+gdb_test "step" "main \\(\\) at.*" "step after enable 3 (3)"
 
 gdb_test "skip disable"
 gdb_test "info skip" \
diff --git a/gdb/testsuite/gdb.base/so-impl-ld.exp b/gdb/testsuite/gdb.base/so-impl-ld.exp
index d837508..f12df92 100644
--- a/gdb/testsuite/gdb.base/so-impl-ld.exp
+++ b/gdb/testsuite/gdb.base/so-impl-ld.exp
@@ -14,10 +14,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
 
 if {[skip_shlib_tests]} {
     return 0
@@ -33,11 +29,11 @@ set lib_sl  $objdir/$subdir/$libfile.sl
 set lib_opts  debug
 set exec_opts [list debug shlib=$lib_sl]
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/so-indr-cl.exp b/gdb/testsuite/gdb.base/so-indr-cl.exp
index daf8ece..e4620a2 100644
--- a/gdb/testsuite/gdb.base/so-indr-cl.exp
+++ b/gdb/testsuite/gdb.base/so-indr-cl.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
 
 # are we on a target board
 if ![isnative] then {
@@ -36,7 +32,7 @@ set testfile "so-indr-cl"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/solib-disc.exp b/gdb/testsuite/gdb.base/solib-disc.exp
index e0d4875..d9fb4b3 100644
--- a/gdb/testsuite/gdb.base/solib-disc.exp
+++ b/gdb/testsuite/gdb.base/solib-disc.exp
@@ -38,7 +38,7 @@ set lib_syms [shlib_symbol_file ${libname}]
 
 remote_exec build "rm -f ${binfile}"
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
@@ -62,7 +62,7 @@ if ![runto_main] then {
 
 gdb_test_no_output "set stop-on-solib-events 1"
 
-gdb_test "continue" "Stopped due to shared library event" "continue to load"
+gdb_test "continue" "Stopped due to shared library event.*" "continue to load"
 
 set msg "save \$pc after load"
 set saved_pc ""
@@ -84,7 +84,7 @@ if { [gdb_reconnect] == 0 } {
 gdb_test "print/x \$pc" "\\\$$decimal = $saved_pc" "check \$pc after load"
 
 
-gdb_test "continue" "Stopped due to shared library event" "continue to unload"
+gdb_test "continue" "Stopped due to shared library event.*" "continue to unload"
 
 set msg "save \$pc after unload"
 set saved_pc ""
diff --git a/gdb/testsuite/gdb.base/solib-display.exp b/gdb/testsuite/gdb.base/solib-display.exp
index c1a653d..17ded75 100644
--- a/gdb/testsuite/gdb.base/solib-display.exp
+++ b/gdb/testsuite/gdb.base/solib-display.exp
@@ -44,16 +44,12 @@ set executable ${testfile}
 set binfile ${objdir}/${subdir}/${executable}
 set bin_flags [list debug shlib=${binfile_lib}]
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
-set save_pf_prefix $pf_prefix
 # SEP must be last for the possible `unsupported' error path.
-foreach libsepdebug {NO IN SEP} {
-
-    set pf_prefix $save_pf_prefix
-    lappend pf_prefix "$libsepdebug:"
+foreach libsepdebug {NO IN SEP} { with_test_prefix "$libsepdebug" {
 
     set sep_lib_flags $lib_flags
     if {$libsepdebug != "NO"} {
@@ -135,5 +131,4 @@ foreach libsepdebug {NO IN SEP} {
     gdb_test "break [gdb_get_line_number "break here" ${testfile}.c]" \
 	    ".*Breakpoint.* at .*" 
     gdb_test "continue" "6: a_static = 46\\r\\n5: a_local = 45\\r\\n4: main_global = 44\\r\\n.*"
-}
-set pf_prefix $save_pf_prefix
+}}
diff --git a/gdb/testsuite/gdb.base/solib-nodir.exp b/gdb/testsuite/gdb.base/solib-nodir.exp
index f79ceea..7f456a6 100644
--- a/gdb/testsuite/gdb.base/solib-nodir.exp
+++ b/gdb/testsuite/gdb.base/solib-nodir.exp
@@ -31,7 +31,7 @@ set objfile ${objdir}/${subdir}/${executable}.o
 set binfile ${objdir}/${subdir}/${executable}
 
 # build the first test case
-if { [get_compiler_info unused]
+if { [get_compiler_info]
      || [gdb_compile_shlib "${srcdir}/${subdir}/${srclibfile}" "${binlibfile}" [list debug ldflags=-Wl,-soname,${binlibfilebase}]] != ""
      || [gdb_gnu_strip_debug $binlibfile]
      || [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != ""
diff --git a/gdb/testsuite/gdb.base/solib-overlap.exp b/gdb/testsuite/gdb.base/solib-overlap.exp
index b83a99c..13f07a2 100644
--- a/gdb/testsuite/gdb.base/solib-overlap.exp
+++ b/gdb/testsuite/gdb.base/solib-overlap.exp
@@ -36,7 +36,7 @@ if [is_remote target] {
     return 0
 }
 
-if [get_compiler_info binfile-unused] {
+if [get_compiler_info] {
     return -1;
 }
 
@@ -52,12 +52,9 @@ set srcfile ${srcdir}/${subdir}/${testfile}.c
 # false PASS.
 # Prelink first lib1 at 0x40000000 and lib2 at 0x41000000.
 # During second pass try lib1 at 0x50000000 and lib2 at 0x51000000.
-foreach prelink_lib1 {0x40000000 0x50000000} {
+foreach prelink_lib1 {0x40000000 0x50000000} { with_test_prefix "$prelink_lib1" {
     set prelink_lib2 [format "0x%x" [expr $prelink_lib1 + 0x01000000]]
 
-    set old_prefix $pf_prefix
-    lappend pf_prefix "$prelink_lib1:"
-
     # Library file.
     set binfile_lib1 ${objdir}/${subdir}/${libname}1-${prelink_lib1}.so
     set binfile_lib1_test_msg OBJDIR/${subdir}/${libname}1-${prelink_lib1}.so
@@ -137,6 +134,4 @@ foreach prelink_lib1 {0x40000000 0x50000000} {
     sleep 5
 
     remote_exec build "kill -9 ${testpid}"
-
-    set pf_prefix $old_prefix
-}
+}}
diff --git a/gdb/testsuite/gdb.base/solib-symbol.exp b/gdb/testsuite/gdb.base/solib-symbol.exp
index 3c03317..1adb16f 100644
--- a/gdb/testsuite/gdb.base/solib-symbol.exp
+++ b/gdb/testsuite/gdb.base/solib-symbol.exp
@@ -30,7 +30,7 @@ set srcfile ${srcdir}/${subdir}/${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
 set bin_flags [list debug shlib=${binfile_lib}]
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/solib-weak.exp b/gdb/testsuite/gdb.base/solib-weak.exp
index 4ad8d32..cf1aac7 100644
--- a/gdb/testsuite/gdb.base/solib-weak.exp
+++ b/gdb/testsuite/gdb.base/solib-weak.exp
@@ -30,7 +30,7 @@ if {([istarget arm*-*-symbianelf*]
 }
 
 # This test uses GCC-specific syntax.
-if [get_compiler_info not-used] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/solib.exp b/gdb/testsuite/gdb.base/solib.exp
index a73dea6..7d2b4ed 100644
--- a/gdb/testsuite/gdb.base/solib.exp
+++ b/gdb/testsuite/gdb.base/solib.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
 
 # are we on a target board
 if ![isnative] then {
@@ -43,7 +39,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
      return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/source.exp b/gdb/testsuite/gdb.base/source.exp
index c8e8056..9e598d9 100644
--- a/gdb/testsuite/gdb.base/source.exp
+++ b/gdb/testsuite/gdb.base/source.exp
@@ -18,10 +18,6 @@
 # Test GDB's "source" command - reads in a GDB script.
 
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile "structs"
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/stack-checking.exp b/gdb/testsuite/gdb.base/stack-checking.exp
index b09ba44..df82bc8 100644
--- a/gdb/testsuite/gdb.base/stack-checking.exp
+++ b/gdb/testsuite/gdb.base/stack-checking.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 set testfile "stack-checking"
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/stale-infcall.c b/gdb/testsuite/gdb.base/stale-infcall.c
new file mode 100644
index 0000000..e4f97fa
--- /dev/null
+++ b/gdb/testsuite/gdb.base/stale-infcall.c
@@ -0,0 +1,66 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <setjmp.h>
+#include <string.h>
+#include <stdlib.h>
+
+#define BUFSIZE 0x1000
+
+static jmp_buf jmp;
+
+void
+infcall (void)
+{
+  longjmp (jmp, 1); /* test-next */
+}
+
+static void
+run1 (void)
+{
+  char buf[BUFSIZE / 2];
+  int dummy = 0;
+
+  dummy++; /* break-run1 */
+}
+
+static char buf_zero[BUFSIZE];
+
+static void
+run2 (void)
+{
+  char buf[BUFSIZE];
+
+  memset (buf, 0, sizeof (buf));
+
+  if (memcmp (buf, buf_zero, sizeof (buf)) != 0) /* break-run2 */
+    abort (); /* break-fail */
+}
+
+int
+main ()
+{
+  if (setjmp (jmp) == 0) /* test-pass */
+    infcall ();
+
+  if (setjmp (jmp) == 0) /* test-fail */
+    run1 ();
+  else
+    run2 ();
+
+  return 0; /* break-exit */
+}
diff --git a/gdb/testsuite/gdb.base/stale-infcall.exp b/gdb/testsuite/gdb.base/stale-infcall.exp
new file mode 100644
index 0000000..0aa8c2a
--- /dev/null
+++ b/gdb/testsuite/gdb.base/stale-infcall.exp
@@ -0,0 +1,75 @@
+# Copyright (C) 2012 Free Software Foundation # Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+set testfile stale-infcall
+set srcfile ${testfile}.c
+if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
+    return -1
+}
+
+if ![runto_main] {
+    return -1
+}
+
+gdb_breakpoint [gdb_get_line_number "test-next"] temporary
+gdb_continue_to_breakpoint "test-next" ".* test-next .*"
+gdb_breakpoint [gdb_get_line_number "test-fail"]
+gdb_test_no_output {set $test_fail_bpnum=$bpnum}
+
+set test "test system longjmp tracking support"
+gdb_test_multiple "next" $test {
+    -re " test-pass .*\r\n$gdb_prompt $" {
+	pass $test
+    }
+    -re "( test-fail .*|\r\nCannot insert breakpoint 0\\.\r\n.*)\r\n$gdb_prompt $" {
+	xfail $test
+	untested "System lacks support for tracking longjmps"
+	return -1
+    }
+}
+gdb_test_no_output {delete $test_fail_bpnum}
+
+gdb_breakpoint [gdb_get_line_number "break-run1"]
+gdb_breakpoint [gdb_get_line_number "break-run2"]
+gdb_breakpoint [gdb_get_line_number "break-exit"]
+gdb_breakpoint [gdb_get_line_number "break-fail"]
+
+gdb_continue_to_breakpoint "break-run1" ".* break-run1 .*"
+
+gdb_test "print infcall ()" " break-run2 .*The program being debugged stopped while in a function called from GDB\\..*When the function is done executing, GDB will silently stop\\."
+
+set test "stack corrupted"
+gdb_test_multiple "continue" $test {
+    -re " break-exit .*\r\n$gdb_prompt $" {
+	pass $test
+    }
+    -re " break-fail .*\r\n$gdb_prompt $" {
+	fail $test
+    }
+}
+
+gdb_test "bt" "#0 \[^\r\n\]* main \[^\r\n\]*"
+
+# Verify there are no remains of the dummy frame.
+gdb_test_no_output "maintenance print dummy-frames"
+set test "maintenance info breakpoints"
+gdb_test_multiple $test $test {
+    -re " call dummy .*\r\n$gdb_prompt $" {
+	fail $test
+    }
+    -re "\r\n$gdb_prompt $" {
+	pass $test
+    }
+}
diff --git a/gdb/testsuite/gdb.base/stap-probe.c b/gdb/testsuite/gdb.base/stap-probe.c
new file mode 100644
index 0000000..1c7b05f
--- /dev/null
+++ b/gdb/testsuite/gdb.base/stap-probe.c
@@ -0,0 +1,108 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#if USE_PROBES
+
+#define _SDT_HAS_SEMAPHORES
+__extension__ unsigned short test_user_semaphore __attribute__ ((unused)) __attribute__ ((section (".probes")));
+#define TEST test_user_semaphore
+
+__extension__ unsigned short test_two_semaphore __attribute__ ((unused)) __attribute__ ((section (".probes")));
+#define TEST2 test_two_semaphore
+
+__extension__ unsigned short test_m4_semaphore __attribute__ ((unused)) __attribute__ ((section (".probes")));
+
+__extension__ unsigned short test_pstr_semaphore __attribute__ ((unused)) __attribute__ ((section (".probes")));
+
+__extension__ unsigned short test_ps_semaphore __attribute__ ((unused)) __attribute__ ((section (".probes")));
+#else
+
+#define TEST 1
+#define TEST2 1
+
+#endif
+
+#include <sys/sdt.h>
+
+/* We only support SystemTap and only the v3 form.  */
+#if _SDT_NOTE_TYPE != 3
+#error "not using SystemTap v3 probes"
+#endif
+
+struct funcs
+{
+  int val;
+
+  const char *(*ps) (int);
+};
+
+static void
+m1 (void)
+{
+  if (TEST2)
+    STAP_PROBE (test, two);
+}
+
+static void
+m2 (void)
+{
+  if (TEST2)
+    STAP_PROBE (test, two);
+}
+
+static int
+f (int x)
+{
+  if (TEST)
+    STAP_PROBE1 (test, user, x);
+  return x+5;
+}
+
+static const char *
+pstr (int val)
+{
+  const char *a = "This is a test message.";
+  const char *b = "This is another test message.";
+
+  STAP_PROBE3 (test, ps, a, b, val);
+
+  return val == 0 ? a : b;
+}
+
+static void
+m4 (const struct funcs *fs, int v)
+{
+  STAP_PROBE3 (test, m4, fs->val, fs->ps (v), v);
+}
+
+int
+main()
+{
+  struct funcs fs;
+
+  fs.val = 42;
+  fs.ps = pstr;
+
+  f (f (23));
+  m1 ();
+  m2 ();
+
+  m4 (&fs, 0);
+  m4 (&fs, 1);
+
+  return 0; /* last break here */
+}
diff --git a/gdb/testsuite/gdb.base/stap-probe.exp b/gdb/testsuite/gdb.base/stap-probe.exp
new file mode 100644
index 0000000..5c173b3
--- /dev/null
+++ b/gdb/testsuite/gdb.base/stap-probe.exp
@@ -0,0 +1,179 @@
+# Copyright (C) 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+set testfile stap-probe
+
+# Run the tests.  We run the tests two different ways: once with a
+# plain probe, and once with a probe that has an associated semaphore.
+# This returns -1 on failure to compile or start, 0 otherwise.
+proc stap_test {exec_name {arg ""}} {
+    global testfile hex
+
+    if {[prepare_for_testing ${testfile}.exp ${exec_name} ${testfile}.c \
+	   [concat $arg debug]]} {
+	return -1
+    }
+
+    if ![runto_main] {
+	return -1
+    }
+
+    gdb_test "print \$_probe_argc" "No SystemTap probe at PC $hex" \
+	"check argument not at probe point"
+
+    gdb_test "info probes stap" \
+	"test *user *$hex .*" \
+	"info probes stap"
+    
+    if {[runto "-pstap test:user"]} {
+	pass "run to -pstap test:user"
+    } else {
+	fail "run to -pstap test:user"
+    }
+
+    # Test probe arguments.
+    gdb_test "print \$_probe_argc" " = 1" \
+    "print \$_probe_argc for probe user"
+    gdb_test "print \$_probe_arg0 == x" " = 1" \
+    "check \$_probe_arg0 for probe user"
+    gdb_test "print \$_probe_arg1" \
+    	"Invalid probe argument 1 -- probe has 1 arguments available" \
+    	"check \$_probe_arg1 for probe user"
+
+    # Set a breakpoint with multiple probe locations.
+    gdb_test "break -pstap test:two" \
+	"Breakpoint \[0-9\]+ at $hex.*2 locations.*" \
+	"set multi-location probe breakpoint (probe two)"
+
+    # Reinit GDB, set a breakpoint on probe m4.
+    delete_breakpoints
+    if {[runto "-pstap test:m4"]} {
+      pass "run to -pstap test:m4"
+    } else {
+      fail "run to -pstap test:m4"
+    }
+
+    # Testing probe arguments.
+    gdb_test "print \$_probe_argc" " = 3" \
+    "print \$_probe_argc for probe m4"
+    gdb_test "print \$_probe_arg0" " = 42" \
+    "check \$_probe_arg0 for probe m4"
+    gdb_test "print (const char *) \$_probe_arg1" \
+    " = $hex .This is a test message.*" \
+    "check \$_probe_arg1 for probe m4"
+    gdb_test "print \$_probe_arg2 == v" " = 1" \
+    "check \$_probe_arg2 for probe m4"
+
+    # Reinit GDB, set a breakpoint on probe ps.
+    delete_breakpoints
+    if {[runto "-pstap test:ps"]} {
+      pass "run to -pstap test:m4"
+    } else {
+      fail "run to -pstap test:m4"
+    }
+
+    gdb_test "print \$_probe_argc" " = 3" \
+    "print \$_probe_argc for probe ps"
+    gdb_test "print (const char *) \$_probe_arg1" \
+    " = $hex .This is another test message.*" \
+    "print \$_probe_arg1 for probe ps"
+
+    return 0
+}
+
+proc stap_test_no_debuginfo {exec_name {arg ""}} {
+    global testfile hex
+
+    if {[prepare_for_testing ${testfile}.exp ${exec_name} ${testfile}.c \
+	   {$arg nodebug optimize=-O2}]} {
+	return -1
+    }
+
+    if {[runto "-pstap test:user"]} {
+	pass "run to -pstap test:user"
+    } else {
+	fail "run to -pstap test:user"
+    }
+
+    # Test probe arguments.
+    gdb_test "print \$_probe_argc" " = 1" \
+    "print \$_probe_argc for probe user"
+    gdb_test "print \$_probe_arg0 == 23" " = 1" \
+    "check \$_probe_arg0 for probe user"
+    gdb_test "print \$_probe_arg1" \
+    	"Invalid probe argument 1 -- probe has 1 arguments available" \
+    	"check \$_probe_arg1 for probe user"
+
+    # Set a breakpoint with multiple probe locations.
+    # In this scenario, we may expect more than 2 locations because of
+    # the optimizations (inlining, loop unrolling, etc).
+    gdb_test "break -pstap test:two" \
+	"Breakpoint .* at $hex.*\[0-9\]+ locations.*" \
+	"set multi-location probe breakpoint (probe two)"
+
+    # Reinit GDB, set a breakpoint on probe m4.
+    delete_breakpoints
+    if {[runto "-pstap test:m4"]} {
+      pass "run to -pstap test:m4"
+    } else {
+      fail "run to -pstap test:m4"
+    }
+
+    # Testing probe arguments.
+    gdb_test "print \$_probe_argc" " = 3" \
+    "print \$_probe_argc for probe m4"
+    gdb_test "print \$_probe_arg0" " = 42" \
+    "check \$_probe_arg0 for probe m4"
+    gdb_test "print (const char *) \$_probe_arg1" \
+    " = $hex .This is a test message.*" \
+    "check \$_probe_arg1 for probe m4"
+    gdb_test "print \$_probe_arg2 == 0" " = 1" \
+    "check \$_probe_arg2 for probe m4"
+
+    # Reinit GDB, set a breakpoint on probe ps.
+    delete_breakpoints
+    if {[runto "-pstap test:ps"]} {
+      pass "run to -pstap test:m4"
+    } else {
+      fail "run to -pstap test:m4"
+    }
+
+    gdb_test "print \$_probe_argc" " = 3" \
+    "print \$_probe_argc for probe ps"
+    gdb_test "print (const char *) \$_probe_arg1" \
+    " = $hex .This is another test message.*" \
+    "print \$_probe_arg1 for probe ps"
+
+    return 0
+}
+
+with_test_prefix "without semaphore, not optimized" {
+    if {[stap_test "stap-probe-nosem-noopt"] == -1} {
+	untested stap-probe.exp
+	  return -1
+    }
+}
+
+with_test_prefix "with semaphore, not optimized" {
+    stap_test "stap-probe-sem-noopt" "-DUSE_PROBES"
+}
+
+with_test_prefix "without semaphore, optimized" {
+    stap_test_no_debuginfo "stap-probe-nosem-opt"
+}
+
+with_test_prefix "with semaphore, optimized" {
+    stap_test_no_debuginfo "stap-probe-sem-opt" "-DUSE_PROBES"
+}
diff --git a/gdb/testsuite/gdb.base/start.exp b/gdb/testsuite/gdb.base/start.exp
index 8781d58..4d5a957 100644
--- a/gdb/testsuite/gdb.base/start.exp
+++ b/gdb/testsuite/gdb.base/start.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 set testfile start
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/step-break.exp b/gdb/testsuite/gdb.base/step-break.exp
index b24ad8e..c572f80 100644
--- a/gdb/testsuite/gdb.base/step-break.exp
+++ b/gdb/testsuite/gdb.base/step-break.exp
@@ -15,10 +15,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 set testfile step-break
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
diff --git a/gdb/testsuite/gdb.base/step-bt.exp b/gdb/testsuite/gdb.base/step-bt.exp
index d849f03..8e5e248 100644
--- a/gdb/testsuite/gdb.base/step-bt.exp
+++ b/gdb/testsuite/gdb.base/step-bt.exp
@@ -16,10 +16,6 @@
 # The intent of this testcase is to assure that backtrace works while
 # single-stepping the instructions that prepare to call a function.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 set testfile step-bt
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/step-line.c b/gdb/testsuite/gdb.base/step-line.c
index 25c207a..01a2119 100644
--- a/gdb/testsuite/gdb.base/step-line.c
+++ b/gdb/testsuite/gdb.base/step-line.c
@@ -1,5 +1,5 @@
 /* Test step/next in presence of #line directives.
-   Copyright 2001, 2007-2012
+   Copyright (C) 2001, 2007, 2012
    Free Software Foundation, Inc.
 
    This file is part of GDB.
diff --git a/gdb/testsuite/gdb.base/step-line.exp b/gdb/testsuite/gdb.base/step-line.exp
index 1e55201..1966f4e 100644
--- a/gdb/testsuite/gdb.base/step-line.exp
+++ b/gdb/testsuite/gdb.base/step-line.exp
@@ -20,10 +20,6 @@
 # step-line.exp -- Expect script to test stepping in files with
 # #line directives.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 set testfile step-line
 set srcfile ${testfile}.c
 set linefile ${testfile}.inp
diff --git a/gdb/testsuite/gdb.base/step-line.inp b/gdb/testsuite/gdb.base/step-line.inp
index 4f70887..2508da1 100644
--- a/gdb/testsuite/gdb.base/step-line.inp
+++ b/gdb/testsuite/gdb.base/step-line.inp
@@ -1,5 +1,5 @@
 # Test step/next in presence of #line directives
-# Copyright 2001, 2007-2012
+# Copyright (C) 2001, 2007, 2012
 # Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
diff --git a/gdb/testsuite/gdb.base/step-test.exp b/gdb/testsuite/gdb.base/step-test.exp
index abb4a0a..e02174a 100644
--- a/gdb/testsuite/gdb.base/step-test.exp
+++ b/gdb/testsuite/gdb.base/step-test.exp
@@ -17,10 +17,6 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 # step-test.exp -- Expect script to test stepping in gdb
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 set testfile step-test
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
diff --git a/gdb/testsuite/gdb.base/store.exp b/gdb/testsuite/gdb.base/store.exp
index ebb198a..913c705 100644
--- a/gdb/testsuite/gdb.base/store.exp
+++ b/gdb/testsuite/gdb.base/store.exp
@@ -15,10 +15,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 #
 # test running programs
 #
@@ -31,7 +27,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
     return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
@@ -52,12 +48,23 @@ if ![runto_main] then {
 #
 
 proc check_set { t l r new add } {
+    global gdb_prompt
+
     set prefix "var ${t} l"
     gdb_test "tbreak wack_${t}"
-    gdb_test "continue" "register ${t} l = u, r = v;" \
-	"continue to wack_${t}"
-    gdb_test "next" "l = add_${t} .l, r.;" \
-	"${prefix}; next ${t}"
+
+    set test "continue to wack_${t}"
+    gdb_test_multiple "continue" $test {
+	-re "register ${t} l = u, r = v;\r\n$gdb_prompt $" {
+	    # See GCC PR debug/53948.
+	    send_gdb "next\n"
+	    exp_continue
+	}
+	-re "l = add_${t} .l, r.;\r\n$gdb_prompt $" {
+	    pass $test
+	}
+    }
+
     gdb_test "print l" " = ${l}" \
 	"${prefix}; print old l, expecting ${l}"
     gdb_test "print r" " = ${r}" \
diff --git a/gdb/testsuite/gdb.base/structs.c b/gdb/testsuite/gdb.base/structs.c
index fc97bb1..62b227a 100644
--- a/gdb/testsuite/gdb.base/structs.c
+++ b/gdb/testsuite/gdb.base/structs.c
@@ -400,10 +400,6 @@ static struct { char c; } chartest[256];
 
 int main()
 {
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
   int i;
 
   for (i = 0; i < 256; i++)
diff --git a/gdb/testsuite/gdb.base/structs.exp b/gdb/testsuite/gdb.base/structs.exp
index c24db83..d98b7f3 100644
--- a/gdb/testsuite/gdb.base/structs.exp
+++ b/gdb/testsuite/gdb.base/structs.exp
@@ -16,10 +16,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 # Some targets can't call functions, so don't even bother with this
 # test.
@@ -40,7 +36,7 @@ set anychar_re {-?[0-9]{1,3} '(.|\\([0-7]{3}|[a-z]|\\|'))'}
 # Create and source the file that provides information about the
 # compiler used to compile the test case.
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.base/structs2.c b/gdb/testsuite/gdb.base/structs2.c
index f1eeab1..7c8be03 100644
--- a/gdb/testsuite/gdb.base/structs2.c
+++ b/gdb/testsuite/gdb.base/structs2.c
@@ -10,10 +10,6 @@ int bkpt;
 int
 main ()
 {
-#ifdef usestubs
-  set_debug_traps ();
-  breakpoint ();
-#endif
 
   bkpt = 0;
   param_reg (120, 130, 32000, 33000);
diff --git a/gdb/testsuite/gdb.base/structs2.exp b/gdb/testsuite/gdb.base/structs2.exp
index fb377bf..9005fbd 100644
--- a/gdb/testsuite/gdb.base/structs2.exp
+++ b/gdb/testsuite/gdb.base/structs2.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 set prototypes 1
 set testfile "structs2"
 set srcfile ${testfile}.c
@@ -24,7 +20,7 @@ set binfile ${objdir}/${subdir}/${testfile}
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.base/subst.exp b/gdb/testsuite/gdb.base/subst.exp
index 525be9a..b604b67 100644
--- a/gdb/testsuite/gdb.base/subst.exp
+++ b/gdb/testsuite/gdb.base/subst.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 gdb_exit
 gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
diff --git a/gdb/testsuite/gdb.base/term.c b/gdb/testsuite/gdb.base/term.c
new file mode 100644
index 0000000..91d66ed
--- /dev/null
+++ b/gdb/testsuite/gdb.base/term.c
@@ -0,0 +1,21 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+int main ()
+{
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.base/term.exp b/gdb/testsuite/gdb.base/term.exp
index fbadc08..68a1f1b 100644
--- a/gdb/testsuite/gdb.base/term.exp
+++ b/gdb/testsuite/gdb.base/term.exp
@@ -14,54 +14,33 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# This file was written by Rob Savoye. (rob at cygnus.com)
-
-if $tracelevel then {
-    strace $tracelevel
-}
-
 # Don't try this for remote targets.
 if [is_remote target] then {
     continue
 }
 
-if [target_info exists noargs] then {
-    verbose "Skipping term.exp because of noargs."
-    return
+if { [prepare_for_testing term.exp term term.c] } {
+    return -1
 }
 
-gdb_start
-
-#
-# test running programs
-#
+# Once before running the program.
+gdb_test "info terminal" \
+    "No saved terminal information.*" \
+    "test info terminal"
 
-if { [prepare_for_testing term.exp term run.c] } {
-    return -1
+if ![runto_main] then {
+    fail "Can't run to main"
+    return 0
 }
 
-gdb_test_no_output "set print sevenbit-strings"
-gdb_test_no_output "set print address off"
-gdb_test_no_output "set width 0"
+# Once while the program is running and stopped.
+gdb_test "info terminal" \
+    "Inferior's terminal status .currently saved by GDB.:.*" \
+    "info terminal at breakpoint"
 
-gdb_test "info terminal" "No saved terminal information.*" "test info terminal"
-gdb_run_cmd 5
-gdb_expect {
-    -re ".*120.*$inferior_exited_re normally.*$gdb_prompt $" {
-	gdb_test "info terminal" "No saved terminal information.*" "test info terminal #2"
-    }
-    default {
-	fail "term.exp, factorial didn't run to completion for info terminal"
-    }
-}
+gdb_continue_to_end
 
-# In mid-execution
-gdb_breakpoint main
-gdb_run_cmd 5
-gdb_expect {
-    -re ".*Breakpoint \[0-9\]+,.*main.*if .argc != 2.*$gdb_prompt $" {
-	gdb_test "info terminal" "Inferior's terminal status .currently saved by GDB.:.*" "info terminal at breakpoint"
-    }
-    -re ".*$gdb_prompt $"	{ fail "info terminal at breakpoint" }
-    timeout		{ fail "(timeout) info terminal at breakpoint" }
-}
+# One last time after the program having exited.
+gdb_test "info terminal" \
+    "No saved terminal information.*" \
+    "test info terminal #2"
diff --git a/gdb/testsuite/gdb.base/testenv.c b/gdb/testsuite/gdb.base/testenv.c
index 468df74..94deff1 100755
--- a/gdb/testsuite/gdb.base/testenv.c
+++ b/gdb/testsuite/gdb.base/testenv.c
@@ -27,10 +27,6 @@ int main (int argc, char **argv, char **envp)
 
 {
     int i, j;
-#ifdef usestubs
-    set_debug_traps();
-    breakpoint();
-#endif
 
     j = 0;
     for (i = 0; envp[i]; i++)
diff --git a/gdb/testsuite/gdb.base/testenv.exp b/gdb/testsuite/gdb.base/testenv.exp
index ff337fe..55e3088 100644
--- a/gdb/testsuite/gdb.base/testenv.exp
+++ b/gdb/testsuite/gdb.base/testenv.exp
@@ -18,10 +18,6 @@
 # Check if environment variables are correctly passed to inferiors
 #
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 # There's no support for passing environment variables in the remote protocol.
 if { [is_remote target] } {
     return 0
diff --git a/gdb/testsuite/gdb.base/trace-commands.exp b/gdb/testsuite/gdb.base/trace-commands.exp
index 02f610a..b21db17 100644
--- a/gdb/testsuite/gdb.base/trace-commands.exp
+++ b/gdb/testsuite/gdb.base/trace-commands.exp
@@ -16,10 +16,6 @@
 # Test that the source command's verbose mode works, the 'set trace-commands'
 # command works, and that the nest depth is correct in various circumstances.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 gdb_exit
 gdb_start
 
diff --git a/gdb/testsuite/gdb.base/twice.c b/gdb/testsuite/gdb.base/twice.c
index 09eb2dd..a0182bb 100644
--- a/gdb/testsuite/gdb.base/twice.c
+++ b/gdb/testsuite/gdb.base/twice.c
@@ -11,10 +11,6 @@ int main ()
 
 {
     int y ;
-#ifdef usestubs
-    set_debug_traps();
-    breakpoint();
-#endif    
     y = nothing () ;
     printf ("hello\n") ;
     return 0;
diff --git a/gdb/testsuite/gdb.base/twice.exp b/gdb/testsuite/gdb.base/twice.exp
index dd92bad..41f9bdc 100644
--- a/gdb/testsuite/gdb.base/twice.exp
+++ b/gdb/testsuite/gdb.base/twice.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile twice-tmp
 set srcfile ${testfile}.c
diff --git a/gdb/testsuite/gdb.base/type-opaque.exp b/gdb/testsuite/gdb.base/type-opaque.exp
index 5e1e14a..f91c24b 100644
--- a/gdb/testsuite/gdb.base/type-opaque.exp
+++ b/gdb/testsuite/gdb.base/type-opaque.exp
@@ -15,10 +15,6 @@
 
 # Test resolving of an opaque type from the loaded shared library.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 set testfile type-opaque-main
 set libfile type-opaque-lib
 set srcfile ${testfile}.c
@@ -31,7 +27,7 @@ set execsrc "${srcdir}/${subdir}/${srcfile}"
 remote_exec build "rm -f ${binfile}"
 
 # get the value of gcc_compiled
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/unload.exp b/gdb/testsuite/gdb.base/unload.exp
index ca55def..944e4e3 100644
--- a/gdb/testsuite/gdb.base/unload.exp
+++ b/gdb/testsuite/gdb.base/unload.exp
@@ -15,10 +15,6 @@
 
 # This file was created by Jeff Johnston. (jjohnstn at redhat.com)
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # test running programs
 #
@@ -46,7 +42,7 @@ set lib_dlopen2 [shlib_target_file ${libname2}]
 set lib_syms [shlib_symbol_file ${libname}]
 set lib_syms2 [shlib_symbol_file ${libname2}]
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
@@ -68,10 +64,6 @@ gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
 gdb_load_shlibs $lib_sl $lib_sl2
 
-if [target_info exists gdb_stub] {
-    gdb_step_for_stub;
-}
-
 #
 # Test setting a breakpoint in a dynamically loaded library which is
 # manually loaded and unloaded
diff --git a/gdb/testsuite/gdb.base/until.exp b/gdb/testsuite/gdb.base/until.exp
index cbaccaf..bdee21d 100644
--- a/gdb/testsuite/gdb.base/until.exp
+++ b/gdb/testsuite/gdb.base/until.exp
@@ -15,10 +15,6 @@
 
 # until.exp -- Expect script to test 'until' in gdb
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 set srcfile break.c
 if { [prepare_for_testing until.exp "until" {break.c break1.c} {debug nowarnings}] } {
     return -1
@@ -44,7 +40,8 @@ gdb_test "until $bp_location1" \
 # Verify that a malformed "advance" is gracefully caught.
 #
 gdb_test "until 80 then stop" \
-	"Junk at end of arguments." "malformed until"
+    "malformed linespec error: unexpected string, \"then stop\"." \
+    "malformed until"
 
 # Rerun up to factorial, outer invocation
 if { ![runto factorial] } then { gdb_suppress_tests; }
diff --git a/gdb/testsuite/gdb.base/unwindonsignal.c b/gdb/testsuite/gdb.base/unwindonsignal.c
index 079d8c2..cd6c1ce 100644
--- a/gdb/testsuite/gdb.base/unwindonsignal.c
+++ b/gdb/testsuite/gdb.base/unwindonsignal.c
@@ -42,10 +42,6 @@ stop_here ()
 int
 main ()
 {
-#ifdef usestubs
-  set_debug_traps ();
-  breakpoint ();
-#endif
 
 #ifdef SIG_SETMASK
   /* Ensure all the signals aren't blocked.
diff --git a/gdb/testsuite/gdb.base/unwindonsignal.exp b/gdb/testsuite/gdb.base/unwindonsignal.exp
index ab7d4f0..3e22679 100644
--- a/gdb/testsuite/gdb.base/unwindonsignal.exp
+++ b/gdb/testsuite/gdb.base/unwindonsignal.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if [target_info exists gdb,noinferiorio] {
     verbose "Skipping unwindonsignal.exp because of no fileio capabilities."
     continue
diff --git a/gdb/testsuite/gdb.base/valgrind-db-attach.exp b/gdb/testsuite/gdb.base/valgrind-db-attach.exp
index 69fea45..b14401f 100644
--- a/gdb/testsuite/gdb.base/valgrind-db-attach.exp
+++ b/gdb/testsuite/gdb.base/valgrind-db-attach.exp
@@ -72,7 +72,7 @@ set double_free [gdb_get_line_number "double-free"]
 
 set test "attach to debugger"
 gdb_test_multiple "" $test {
-    -re "Invalid free\\(\\) / delete / delete\\\[\\\]\r\n.*: main \\(${srcfile}:$double_free\\)\r\n.*---- Attach to debugger \\? --- \[^\r\n\]* ---- " {
+    -re "Invalid free\\(\\).*: main \\(${srcfile}:$double_free\\)\r\n.*---- Attach to debugger \\? --- \[^\r\n\]* ---- " {
 	send_gdb "y\r"
     }
     -re "---- Attach to debugger \\? --- \[^\r\n\]* ---- " {
diff --git a/gdb/testsuite/gdb.base/valgrind-infcall.c b/gdb/testsuite/gdb.base/valgrind-infcall.c
new file mode 100644
index 0000000..c119b7e
--- /dev/null
+++ b/gdb/testsuite/gdb.base/valgrind-infcall.c
@@ -0,0 +1,40 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+
+static volatile int infcall_var;
+
+static int
+gdb_test_infcall (void)
+{
+  return ++infcall_var;
+}
+
+int
+main (void)
+{
+  void *p;
+
+  gdb_test_infcall ();
+  p = malloc (1);
+  if (p == NULL)
+    return 1;
+  free (p);
+  free (p);	/* double-free */
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.base/valgrind-infcall.exp b/gdb/testsuite/gdb.base/valgrind-infcall.exp
new file mode 100644
index 0000000..84d6819
--- /dev/null
+++ b/gdb/testsuite/gdb.base/valgrind-infcall.exp
@@ -0,0 +1,125 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+if [is_remote target] {
+    # The test always runs locally.
+    return 0
+}
+
+set test valgrind-infcall
+set srcfile $test.c
+set executable $test
+set binfile ${objdir}/${subdir}/${executable}
+if {[build_executable $test.exp $executable $srcfile {debug}] == -1} {
+    return -1
+}
+
+set test "spawn valgrind"
+set cmd "valgrind --vgdb-error=0 $binfile"
+set res [remote_spawn host $cmd];
+if { $res < 0 || $res == "" } {
+    verbose -log "Spawning $cmd failed."
+    unsupported $test
+    return -1
+}
+pass $test
+# Declare GDB now as running.
+set gdb_spawn_id -1
+
+# GDB started by vgdb stops already after the startup is executed, like with
+# non-extended gdbserver.  It is also not correct to run/attach the inferior.
+set use_gdb_stub 1
+
+set test "valgrind started"
+# The trailing '.' differs for different memcheck versions.
+gdb_test_multiple "" $test {
+    -re "Memcheck, a memory error detector\\.?\r\n" {
+	pass $test
+    }
+    -re "valgrind: failed to start tool 'memcheck' for platform '.*': No such file or directory" {
+	unsupported $test
+	return -1
+    }
+    -re "valgrind: wrong ELF executable class" {
+	unsupported $test
+	return -1
+    }
+    -re "command not found" {
+	# The spawn succeeded, but then valgrind was not found - e.g. if
+	# we spawned SSH to a remote system.
+	unsupported $test
+	return -1
+    }
+    -re "valgrind: Bad option.*--vgdb-error=0" {
+	# valgrind is not >= 3.7.0.
+	unsupported $test
+	return -1
+    }
+}
+
+set test "vgdb prompt"
+# The trailing '.' differs for different memcheck versions.
+gdb_test_multiple "" $test {
+    -re "  (target remote | \[^\r\n\]*/vgdb \[^\r\n\]*)\r\n" {
+	set vgdbcmd $expect_out(1,string)
+	pass $test
+    }
+}
+
+# Do not kill valgrind.
+unset gdb_spawn_id
+set board [host_info name]
+unset_board_info fileid
+
+clean_restart $executable
+
+gdb_test "$vgdbcmd" " in \\.?_start .*" "target remote for vgdb"
+
+gdb_test "monitor v.set gdb_output" "valgrind output will go to gdb.*"
+
+set continue_count 1
+set loop 1
+while {$loop && $continue_count < 100} {
+    set test "continue #$continue_count"
+    gdb_test_multiple "continue" "" {
+	-re "Invalid free\\(\\).*: main .*\r\n$gdb_prompt $" {
+	    pass $test
+	    # In Ubuntu 10.04.4 environments 'break' does not work here.
+	    set loop 0
+	}
+	-re "Remote connection closed.*\r\n$gdb_prompt $" {
+	    fail "$test (remote connection closed)"
+	    return -1
+	}
+	-re "The program is not being run\\.\r\n$gdb_prompt $" {
+	    fail "$test (valgrind vgdb has terminated)"
+	    return -1
+	}
+	-re "\r\n$gdb_prompt $" {
+	    pass "$test (false warning)"
+	}
+    }
+    set continue_count [expr $continue_count + 1]
+}
+
+set test "p gdb_test_infcall ()"
+gdb_test_multiple $test $test {
+    -re "unhandled instruction bytes.*\r\n$gdb_prompt $" {
+	fail $test
+    }
+    -re "Continuing \\.\\.\\..*\r\n\\\$1 = 2\r\n$gdb_prompt $" {
+	pass $test
+    }
+}
diff --git a/gdb/testsuite/gdb.base/varargs.exp b/gdb/testsuite/gdb.base/varargs.exp
index 16a517e..955c17d 100644
--- a/gdb/testsuite/gdb.base/varargs.exp
+++ b/gdb/testsuite/gdb.base/varargs.exp
@@ -28,17 +28,13 @@
 #quit
 
 
-if $tracelevel then {
-        strace $tracelevel
-}
-
 
 set prototypes 0
 set testfile "varargs"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/volatile.exp b/gdb/testsuite/gdb.base/volatile.exp
index b876f0f..ade9d66 100644
--- a/gdb/testsuite/gdb.base/volatile.exp
+++ b/gdb/testsuite/gdb.base/volatile.exp
@@ -30,10 +30,6 @@
 #           ... etc.  (you get the idea)
 # Mostly with char and unsigned char.                    
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 #
 # test running programs
 #
@@ -46,7 +42,7 @@ if { [prepare_for_testing volatile.exp volatile constvars.c] } {
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info not-used] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.base/watch-cond-infcall.exp b/gdb/testsuite/gdb.base/watch-cond-infcall.exp
index 8b81453..1c83da5 100644
--- a/gdb/testsuite/gdb.base/watch-cond-infcall.exp
+++ b/gdb/testsuite/gdb.base/watch-cond-infcall.exp
@@ -25,12 +25,8 @@ if { [build_executable ${testfile}.exp ${testfile} ${testfile}.c {debug}] } {
     return -1
 }
 
-proc test_watchpoint { hw teststr } {
+proc test_watchpoint { hw } {
     global testfile
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "$teststr:"
 
     clean_restart ${testfile}
 
@@ -50,12 +46,10 @@ proc test_watchpoint { hw teststr } {
     gdb_test "continue" \
 	"atchpoint \[0-9\]+: var\r\n\r\nOld value = 0\r\nNew value = 1\r\n.*watchpoint-stop.*" \
 	"continue"
-
-    set pf_prefix $old_pf_prefix
 }
 
 if { ![target_info exists gdb,no_hardware_watchpoints] } {
-    test_watchpoint 1 "hw"
+    with_test_prefix "hw" { test_watchpoint 1 }
 }
 
-test_watchpoint 0 "sw"
+with_test_prefix "sw" { test_watchpoint 0 }
diff --git a/gdb/testsuite/gdb.base/watch_thread_num.exp b/gdb/testsuite/gdb.base/watch_thread_num.exp
index dbf3758..487c2fd 100644
--- a/gdb/testsuite/gdb.base/watch_thread_num.exp
+++ b/gdb/testsuite/gdb.base/watch_thread_num.exp
@@ -19,10 +19,6 @@
 #                        watch commands.
 #
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 # This test verifies that a watchpoint is detected in the proper thread
 # so the test is only meaningful on a system with hardware watchpoints.
 if {[skip_hw_watchpoint_tests]} {
@@ -35,7 +31,7 @@ set binfile ${objdir}/${subdir}/${testfile}
 
 # What compiler are we using?
 #
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/watchpoint-solib.exp b/gdb/testsuite/gdb.base/watchpoint-solib.exp
index 2db4852..b3dfea7 100644
--- a/gdb/testsuite/gdb.base/watchpoint-solib.exp
+++ b/gdb/testsuite/gdb.base/watchpoint-solib.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # test running programs
 #
@@ -37,7 +33,7 @@ set lib_sl  $objdir/$subdir/$libname
 set lib_dlopen [shlib_target_file ${libname}]
 set lib_syms [shlib_symbol_file ${libname}]
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
@@ -58,10 +54,6 @@ gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
 gdb_load_shlibs $lib_sl
 
-if [target_info exists gdb_stub] {
-    gdb_step_for_stub;
-}
-
 runto_main
 
 # Disable hardware watchpoints if necessary.
diff --git a/gdb/testsuite/gdb.base/watchpoint.c b/gdb/testsuite/gdb.base/watchpoint.c
index 9ef9253..e887f99 100644
--- a/gdb/testsuite/gdb.base/watchpoint.c
+++ b/gdb/testsuite/gdb.base/watchpoint.c
@@ -42,6 +42,18 @@ int doread = 0;
 char *global_ptr;
 char **global_ptr_ptr;
 
+struct foo2
+{
+  int val[2];
+};
+struct foo2 foo2;
+
+struct foo4
+{
+  int val[4];
+};
+struct foo4 foo4;
+
 void marker1 ()
 {
 }
@@ -68,7 +80,7 @@ void recurser (int  x)
 void recurser (x) int  x;
 #endif
 {
-  int  local_x;
+  int  local_x = 0;
 
   if (x > 0)
     recurser (x-1);
@@ -78,9 +90,10 @@ void recurser (x) int  x;
 void
 func2 ()
 {
-  int  local_a;
+  int  local_a = 0;
   static int  static_b;
 
+  /* func2 breakpoint here */
   ival5++;
   local_a = ival5;
   static_b = local_a;
@@ -137,12 +150,24 @@ func5 ()
   val = 27;
 }
 
+void
+func6 (void)
+{
+  /* func6 breakpoint here */
+  foo2.val[1] = 0;
+  foo2.val[1] = 11;
+}
+
+void
+func7 (void)
+{
+  /* func7 breakpoint here */
+  foo4.val[3] = 0;
+  foo4.val[3] = 33;
+}
+
 int main ()
 {
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
   struct1.val = 1;
   struct2.val = 2;
   ptr1 = &struct1;
@@ -208,6 +233,12 @@ int main ()
   marker6 ();
   recurser (2);
 
+  /* This invocation is used for watches of a local variable with explicitly
+     specified scope when recursion happens.
+     */
+  marker6 ();
+  recurser (2);
+
   marker6 ();
 
   func3 ();
@@ -216,5 +247,9 @@ int main ()
 
   func5 ();
 
+  func6 ();
+
+  func7 ();
+
   return 0;
 }
diff --git a/gdb/testsuite/gdb.base/watchpoint.exp b/gdb/testsuite/gdb.base/watchpoint.exp
index ab23312..09f2375 100644
--- a/gdb/testsuite/gdb.base/watchpoint.exp
+++ b/gdb/testsuite/gdb.base/watchpoint.exp
@@ -15,18 +15,12 @@
 
 # This file was written by Fred Fish. (fnf at cygnus.com)
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 set testfile "watchpoint"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
 
-set wp_set 1
-
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
@@ -35,6 +29,9 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
      return -1
 }
 
+# True if we're forcing no hardware watchpoints.
+set no_hw 0
+
 # Prepare for watchpoint tests by setting up two breakpoints and one
 # watchpoint.
 #
@@ -56,12 +53,6 @@ proc initialize {} {
     global hex
     global decimal
     global srcfile
-    global wp_set
-
-    # Disable hardware watchpoints if necessary.
-    if [target_info exists gdb,no_hardware_watchpoints] {
-	gdb_test_no_output "set can-use-hw-watchpoints 0" ""
-    }
 
     if [gdb_test "break marker1" "Breakpoint 1 at $hex: file .*$srcfile, line $decimal.*" "set breakpoint at marker1" ] { 
       return 0; 
@@ -77,27 +68,7 @@ proc initialize {} {
       return 0; 
     }
 
-
-    # ??rehrauer: To fix DTS #CHFts23014, in which setting a watchpoint
-    # before running can cause the inferior to croak on HP-UX 11.0 for
-    # reasons yet unknown, we've disabled the ability to set watches
-    # without a running inferior.  Verify the restriction. 
-    #
-    send_gdb "watch ival3\n"
-    gdb_expect {
-        -re ".*\[Ww\]atchpoint 3: ival3.*$gdb_prompt $" {
-            pass "set watchpoint on ival3"
-        }
-        -re "warning: can't do that without a running program; try \"break main\", \"run\" first.*$gdb_prompt $" {
-            pass "set watchpoint on ival3"
-            set wp_set 0
-            return 1
-        }
-        timeout {
-            fail "(timeout) set watchpoint on ival3"
-            return 0
-        }
-    }
+    gdb_test "watch ival3" ".*\[Ww\]atchpoint 3: ival3.*" "set watchpoint on ival3"
 
     if [gdb_test "info watch" "3\[ \]*.*watchpoint.*ival3" "watchpoint found in watchpoint/breakpoint table" ] { 
       return 0; 
@@ -124,57 +95,26 @@ proc test_simple_watchpoint {} {
     global gdb_prompt
     global hex
     global decimal
-    global wp_set
 
     # Ensure that the watchpoint is disabled when we startup.
 
-    if { $wp_set } {
-        if [gdb_test "disable 3" "^disable 3\[\r\n\]+" "disable watchpoint in test_simple_watchpoint" ] { 
-	    return 0; 
-	}
+    if [gdb_test "disable 3" "^disable 3\[\r\n\]+" "disable watchpoint in test_simple_watchpoint" ] { 
+      return 0; 
     }
 
-
     # Run until we get to the first marker function.
 
     gdb_run_cmd
     set timeout 600
-    gdb_expect {
+    set test "run to marker1 in test_simple_watchpoint"
+    set retcode [gdb_test_multiple "" $test {
 	-re "Breakpoint 1, marker1 .*$gdb_prompt $" {
-	    pass "run to marker1 in test_simple_watchpoint"
-	}
-	-re ".*$gdb_prompt $" {
-	    fail "run to marker1 in test_simple_watchpoint"
-	    return
+	    pass $test
 	}
-	timeout {
-	    fail "run to marker1 in test_simple_watchpoint (timeout)"
-	    return
-	}
-    }
+    }]
 
-    if { !$wp_set } {
-	# ??rehrauer: To fix DTS #CHFts23014, in which setting a watchpoint
-	# before running can cause the inferior to croak on HP-UX 11.0
-	# for reasons yet unknown, we've disabled the ability to set 
-	# watches without a running inferior.  The following testpoints used
-	# to be in [initialize].
-	#
-	gdb_test "watch ival3" \
-	    "\[Ww\]atchpoint 3: ival3" \
-	    "set watchpoint on ival3"
-
-        set wp_set 1
-
-	gdb_test "info watch" \
-	    "3\[ \]*.*watchpoint.*ival3" \
-	    "watchpoint found in watchpoint/breakpoint table"
-
-	# After installing the watchpoint, we disable it until we are ready
-	# to use it.  This allows the test program to run at full speed until
-	# we get to the first marker function.
-
-	gdb_test "disable 3" "disable 3" "disable watchpoint"
+    if { $retcode != 0 } {
+	return
     }
 
     # After reaching the marker function, enable the watchpoint.
@@ -192,10 +132,10 @@ proc test_simple_watchpoint {} {
 
     # Continue until the first change, from -1 to 0
 
-    send_gdb "cont\n"
-    gdb_expect {
+    set test "watchpoint hit, first time"
+    gdb_test_multiple "cont" $test {
 	-re "Continuing.*\[Ww\]atchpoint.*ival3.*Old value = -1.*New value = 0.*ival3 = count; ival4 = count;.*$gdb_prompt $" {
-	    pass "watchpoint hit, first time"
+	    pass $test
 	}
 	-re "Continuing.*Breakpoint.*func1.*$gdb_prompt $" {
 	    setup_xfail "m68*-*-*" 2597
@@ -203,11 +143,8 @@ proc test_simple_watchpoint {} {
 	    gdb_test_no_output "delete \$func1_breakpoint_number"
 	    gdb_test "continue" "\
 Continuing.*\[Ww\]atchpoint.*ival3.*Old value = -1.*New value = 0.*ival3 = count;" \
-		"watchpoint hit, first time"
+		$test
 	}
-	-re ".*$gdb_prompt $" { fail "watchpoint hit, first time" ; return }
-	timeout { fail "watchpoint hit, first time (timeout)" ; return }
-	eof { fail "watchpoint hit, first time (eof)" ; return }
     }
 
     # Check that the hit count is reported correctly
@@ -270,8 +207,7 @@ proc test_disabling_watchpoints {} {
     global decimal
     global hex
 
-    # "info watch" is the same as "info break"
-    gdb_test "info watch" "\[0-9]+\[ \]*.*watchpoint.*ival3\r\n\.*\[0-9\]+ times.*" "watchpoints found in watchpoint/breakpoint table"
+    gdb_test "info watch" "\[0-9]+\[ \]*.*watchpoint.*ival3.*" "watchpoints found in watchpoint/breakpoint table"
 
     # Ensure that the watchpoint is disabled when we startup.
 
@@ -284,18 +220,15 @@ proc test_disabling_watchpoints {} {
 
     gdb_run_cmd
     set timeout 600
-    gdb_expect {
+    set test "run to marker1 in test_disabling_watchpoints"
+    set retcode [gdb_test_multiple "" $test {
 	-re "Breakpoint 1, marker1 .*$gdb_prompt $" {
-	    pass "run to marker1 in test_disabling_watchpoints"
-	}
-	-re ".*$gdb_prompt $" {
-	    fail "run to marker1 in test_disabling_watchpoints"
-	    return
-	}
-	timeout {
-	    fail "run to marker1 in test_disabling_watchpoints (timeout)"
-	    return
+	    pass $test
 	}
+    }]
+
+    if { $retcode != 0 } {
+	return
     }
 
     # After reaching the marker function, enable the watchpoint.
@@ -391,19 +324,14 @@ proc test_stepping {} {
 
 	gdb_test "until" "ival1 = count.*" "until to ival1 assignment"
 	gdb_test "until" "ival3 = count.*" "until to ival3 assignment"
-	send_gdb "until\n"
-	gdb_expect {
+	set test "until out of loop"
+	gdb_test_multiple "until" $test {
 	    -re "(for \\(count = 0|\}).*$gdb_prompt $" {
-		gdb_test "until" "ival1 = count; /. Outside loop ./" \
-		    "until out of loop"
+		gdb_test "until" "ival1 = count; /. Outside loop ./" $test
 	    }
 	    -re "ival1 = count; /. Outside loop ./.*$gdb_prompt $" {
-		pass "until out of loop"
-	    }
-	    -re ".*$gdb_prompt $" {
-		fail "until out of loop"
+		pass $test
 	    }
-	    default { fail "until out of loop (timeout)" ; return }
 	}
 
 	gdb_test "step" "ival2 = count.*" "step to ival2 assignment"
@@ -432,7 +360,7 @@ proc test_watchpoint_triggered_in_syscall {} {
 
 	gdb_test_no_output "set doread = 1"
 
-	# If we send_gdb "123\n" before gdb has switched the tty, then it goes
+	# If we send gdb "123\n" before gdb has switched the tty, then it goes
 	# to gdb, not the inferior, and we lose.  So that is why we have
 	# watchpoint.c prompt us, so we can wait for that prompt.
 
@@ -447,45 +375,36 @@ proc test_watchpoint_triggered_in_syscall {} {
 	    }
 	}
 
-	send_gdb "123\n"
-	gdb_expect {
+	set test "sent 123"
+	gdb_test_multiple "123" $test {
 	    -re ".*\[Ww\]atchpoint.*buf\\\[0\\\].*Old value = 0.*New value = 49\[^\n\]*\n" { set x [expr $x+1] ; exp_continue }
 	    -re ".*\[Ww\]atchpoint.*buf\\\[1\\\].*Old value = 0.*New value = 50\[^\n\]*\n" { set x [expr $x+1] ; exp_continue }
 	    -re ".*\[Ww\]atchpoint.*buf\\\[2\\\].*Old value = 0.*New value = 51\[^\n\]*\n" { set x [expr $x+1] ; exp_continue }
 	    -re ".*\[Ww\]atchpoint.*buf\\\[3\\\].*Old value = 0.*New value = 10\[^\n\]*\n" { set x [expr $x+1] ; exp_continue }
-	    -re ".*$gdb_prompt $" { pass "sent 123" }
-	    timeout { fail "sent 123 (timeout)" }
+	    -re ".*$gdb_prompt $" { pass $test }
 	}
 
 	# Examine the values in buf to see how many watchpoints we
 	# should have printed.
-	send_gdb "print buf\[0\]\n"
-	gdb_expect {
-	    -re ".*= 49.*$gdb_prompt $" { set y [expr $y+1]; pass "print buf\[0\]"}
-	    -re ".*= 0.*$gdb_prompt $" { pass "print buf\[0\]"}
-	    -re ".*$gdb_prompt $" { fail "print buf\[0\]"}
-	    default { fail "print buf\[0\]"}
+	set test "print buf\[0\]"
+	gdb_test_multiple $test $test {
+	    -re ".*= 49.*$gdb_prompt $" { set y [expr $y+1]; pass $test }
+	    -re ".*= 0.*$gdb_prompt $" { $test }
 	}
-	send_gdb "print buf\[1\]\n"
-	gdb_expect {
-	    -re ".*= 50.*$gdb_prompt $" { set y [expr $y+1]; pass "print buf\[1\]"}
-	    -re ".*= 0.*$gdb_prompt $" { pass "print buf\[1\]"}
-	    -re ".*$gdb_prompt $" { fail "print buf\[1\]"}
-	    default { fail "print buf\[1\]"}
+	set test "print buf\[1\]"
+	gdb_test_multiple $test $test {
+	    -re ".*= 50.*$gdb_prompt $" { set y [expr $y+1]; pass $test }
+	    -re ".*= 0.*$gdb_prompt $" { pass $test }
 	}
-	send_gdb "print buf\[2\]\n"
-	gdb_expect {
-	    -re ".*= 51.*$gdb_prompt $" { set y [expr $y+1]; pass "print buf\[2\]"}
-	    -re ".*= 0.*$gdb_prompt $" { pass "print buf\[2\]"}
-	    -re ".*$gdb_prompt $" { fail "print buf\[2\]"}
-	    default { fail "print buf\[2\]"}
+	set test "print buf\[2\]"
+	gdb_test_multiple $test $test {
+	    -re ".*= 51.*$gdb_prompt $" { set y [expr $y+1]; pass $test }
+	    -re ".*= 0.*$gdb_prompt $" { pass $test }
 	}
-	send_gdb "print buf\[3\]\n"
-	gdb_expect {
-	    -re ".*= 10.*$gdb_prompt $" { set y [expr $y+1]; pass "print buf\[3\]"}
-	    -re ".*= 0.*$gdb_prompt $" { pass "print buf\[3\]"}
-	    -re ".*$gdb_prompt $" { fail "print buf\[3\]" }
-	    default { fail "print buf\[3\]" }
+	set test "print buf\[3\]"
+	gdb_test_multiple $test $test {
+	    -re ".*= 10.*$gdb_prompt $" { set y [expr $y+1]; pass $test }
+	    -re ".*= 0.*$gdb_prompt $" { pass $test }
 	}
 
 	# Did we find what we were looking for?  If not, flunk it.
@@ -531,8 +450,8 @@ proc test_complex_watchpoint {} {
         gdb_test "break marker6" ".*Breakpoint.*"
         gdb_test "cont" "Continuing.*Breakpoint.*marker6 \\(\\).*" \
             "continue to marker6"
-        gdb_test "break func2" ".*Breakpoint.*"
-        gdb_test "cont" "Continuing.*func2.*"
+	gdb_breakpoint [gdb_get_line_number "func2 breakpoint here"]
+	gdb_continue_to_breakpoint "func2 breakpoint here"
 
         # Test a watch of a single stack-based variable, whose scope
         # is the function we're now in.  This should auto-delete when
@@ -540,9 +459,29 @@ proc test_complex_watchpoint {} {
         #
         gdb_test "watch local_a" ".*\[Ww\]atchpoint \[0-9\]*: local_a" "set local watch"
         gdb_test "cont" "\[Ww\]atchpoint.*local_a.*" "trigger local watch"
-        gdb_test "cont" "Continuing.*\[Ww\]atchpoint .* deleted because the program has left the block in.*which its expression is valid.*" "self-delete local watch"
 
-        gdb_test "cont" "Continuing.*func2.*"
+	set test "self-delete local watch"
+        gdb_test_multiple "cont" $test {
+	    -re "Continuing.*\[Ww\]atchpoint .* deleted because the program has left the block in.*which its expression is valid.*\r\n$gdb_prompt $" {
+		pass $test
+	    }
+	    -re "can't compute CFA for this frame.*\r\n$gdb_prompt $" {
+		global compiler_info no_hw
+
+		# GCC < 4.5.0 does not get LOCATIONS_VALID set by dwarf2read.c.
+		# Therefore epilogue unwinder gets applied which is
+		# incompatible with dwarf2_frame_cfa.
+		verbose -log "compiler_info: $compiler_info"
+		if {$no_hw && ([test_compiler_info {gcc-[0-3]-*}]
+			       || [test_compiler_info {gcc-4-[0-4]-*}])} {
+		    xfail "$test (old GCC has broken watchpoints in epilogues)"
+		    return
+		}
+		fail $test
+	    }
+	}
+
+	gdb_continue_to_breakpoint "func2 breakpoint here"
         # We should be in "func2" again now.  Test a watch of an
         # expression which includes both a stack-based local and
         # something whose scope is larger than this invocation
@@ -562,7 +501,7 @@ proc test_complex_watchpoint {} {
         # across any invocations of "func2", it should not auto-
         # delete.
         #
-        gdb_test "cont" "Continuing.*func2.*"
+	gdb_continue_to_breakpoint "func2 breakpoint here"
         gdb_test "watch static_b" ".*\[Ww\]atchpoint \[0-9\]*: static_b" \
                  "set static local watch"
         gdb_test "cont" "Continuing.*\[Ww\]atchpoint .*: static_b.*" \
@@ -580,6 +519,7 @@ proc test_complex_watchpoint {} {
         #
         gdb_test "tbreak recurser" ".*breakpoint.*"
         gdb_test "cont" "Continuing.*recurser.*"
+        gdb_test "next" "if \\(x > 0.*" "next past local_x initialization"
         gdb_test "watch local_x" ".*\[Ww\]atchpoint \[0-9\]*: local_x" \
                  "set local watch in recursive call"
         gdb_test "cont" "Continuing.*\[Ww\]atchpoint .*: local_x.*New value = 2.*" \
@@ -587,6 +527,19 @@ proc test_complex_watchpoint {} {
         gdb_test "cont" "Continuing.*\[Ww\]atchpoint .* deleted because the program has left the block in.*which its expression is valid.*" \
                  "self-delete local watch in recursive call"
 
+        # Repeat the preceding test, but this time use "recurser::local_x" as
+        # the variable to track.
+        gdb_test "cont" "Continuing.*marker6.*"
+        gdb_test "tbreak recurser" ".*breakpoint.*"
+        gdb_test "cont" "Continuing.*recurser.*"
+        gdb_test "next" "if \\(x > 0.*" "next past local_x initialization"
+        gdb_test "watch recurser::local_x" ".*\[Ww\]atchpoint \[0-9\]*: recurser::local_x" \
+                 "set local watch in recursive call with explicit scope"
+        gdb_test "cont" "Continuing.*\[Ww\]atchpoint .*: recurser::local_x.*New value = 2.*" \
+                 "trigger local watch with explicit scope in recursive call"
+        gdb_test "cont" "Continuing.*\[Ww\]atchpoint .* deleted because the program has left the block in.*which its expression is valid.*" \
+                 "self-delete local watch with explicit scope in recursive call (2)"
+
 	# Disable everything so we can finish the program at full speed
 	gdb_test_no_output "disable" "disable in test_complex_watchpoint"
 
@@ -621,6 +574,8 @@ proc test_watchpoint_and_breakpoint {} {
 
 proc test_constant_watchpoint {} {
     gdb_test "watch 5" "Cannot watch constant value `5'." "number is constant"
+    gdb_test "watch (int *)5" "Cannot watch constant value `\\(int \\*\\)5'." \
+    "number with cast is constant"
     gdb_test "watch marker1" "Cannot watch constant value `marker1'." \
     "marker1 is constant"
     gdb_test "watch count + 6" ".*atchpoint \[0-9\]+: count \\+ 6"
@@ -659,6 +614,102 @@ proc test_watch_location {} {
     gdb_test_no_output "delete \$bpnum" "delete watch -location"
 }
 
+# Tests watching areas larger than a word.
+
+proc test_wide_location_1 {} {
+    global no_hw
+    global gdb_prompt
+
+    # This test watches two words on most 32-bit ABIs, and one word on
+    # most 64-bit ABIs.
+
+    # Platforms where the target can't watch such a large region
+    # should clear hw_expected below.
+    if { $no_hw || [target_info exists gdb,no_hardware_watchpoints]
+         || [istarget arm*-*-*]
+         || ([istarget powerpc*-*-*] && ![is_lp64_target])} {
+	set hw_expected 0
+    } else {
+	set hw_expected 1
+    }
+
+    gdb_breakpoint [gdb_get_line_number "func6 breakpoint here"]
+    gdb_continue_to_breakpoint "func6 breakpoint here"
+
+    if { $hw_expected } {
+	gdb_test "watch foo2" "Hardware watchpoint .*: .*" "watch foo2"
+	gdb_test "continue" \
+	    "Continuing.*Hardware watchpoint .*: .*New value = \\\{val = \\\{0, 11\\\}\\\}.*" \
+	    "continue with watch foo2"
+    } else {
+	gdb_test "watch foo2" "atchpoint .*: .*" "watch foo2"
+	set test "continue with watch foo2"
+	gdb_test_multiple "cont" $test {
+	    -re "Continuing.*\[Ww\]atchpoint .*: .*New value = \\\{val = \\\{0, 11\\\}\\\}.*$gdb_prompt $" {
+		pass $test
+	    }
+	    -re "Could not insert hardware breakpoints:.*You may have requested too many hardware breakpoints/watchpoints.*$gdb_prompt $" {
+		# This may happen with remote targets that support
+		# hardware watchpoints.  We only find out the
+		# watchpoint was too large, for example, at insert
+		# time.  If GDB is ever adjusted to downgrade the
+		# watchpoint automatically in this case, this match
+		# should be removed.
+		pass $test
+	    }
+	}
+    }
+
+    gdb_test_no_output "delete \$bpnum" "delete watch foo2"
+}
+
+proc test_wide_location_2 {} {
+    global no_hw
+    global gdb_prompt
+
+    # This test watches four words on most 32-bit ABIs, and two words
+    # on 64-bit ABIs.
+
+    # Platforms where the target can't watch such a large region
+    # should clear hw_expected below.
+    if { $no_hw || [target_info exists gdb,no_hardware_watchpoints]
+         || [istarget arm*-*-*]
+         || [istarget powerpc*-*-*]} {
+	set hw_expected 0
+    } else {
+	set hw_expected 1
+    }
+
+    gdb_breakpoint [gdb_get_line_number "func7 breakpoint here"]
+    gdb_continue_to_breakpoint "func7 breakpoint here"
+
+    if { $hw_expected } {
+	gdb_test "watch foo4" "Hardware watchpoint .*: .*" "watch foo4"
+	gdb_test "continue" \
+	    "Continuing.*Hardware watchpoint .*: .*New value = \\\{val = \\\{0, 0, 0, 33\\\}\\\}.*" \
+	    "continue with watch foo4"
+    } else {
+	gdb_test "watch foo4" "atchpoint .*: .*" "watch foo4"
+	set test "continue with watch foo4"
+	gdb_test_multiple "cont" $test {
+	    -re "Continuing.*\[Ww\]atchpoint .*: .*New value = \\\{val = \\\{0, 0, 0, 33\\\}\\\}.*$gdb_prompt $" {
+		pass $test
+	    }
+	    -re "Could not insert hardware breakpoints:.*You may have requested too many hardware breakpoints/watchpoints.*$gdb_prompt $" {
+		# This may happen with remote targets that support
+		# hardware watchpoints.  We only find out the
+		# watchpoint was too large, for example, at insert
+		# time.  If GDB is ever adjusted to downgrade the
+		# watchpoint automatically in this case, this match
+		# should be removed.
+		pass $test
+	    }
+	}
+    }
+
+    gdb_test_no_output "delete \$bpnum" "delete watch foo4"
+}
+
 proc test_inaccessible_watchpoint {} {
     global gdb_prompt
 
@@ -728,72 +779,136 @@ proc test_inaccessible_watchpoint {} {
 	gdb_test "delete \$global_ptr_breakpoint_number" ""
 	gdb_test "watch **global_ptr_ptr" ".*atchpoint \[0-9\]+: \\*\\*global_ptr_ptr"
 	gdb_test "set \$global_ptr_ptr_breakpoint_number = \$bpnum" ""
-	gdb_test "next" ".*global_ptr_ptr = &global_ptr.*" "gloabl_ptr_ptr next"
+	gdb_test "next" ".*global_ptr_ptr = &global_ptr.*" "global_ptr_ptr next"
 	gdb_test "next" ".*atchpoint \[0-9\]+: \\*\\*global_ptr_ptr\[\r\n\]+Old value = .*\r\nNew value = 7 .*" "next over global_ptr_ptr init"
 	gdb_test "next" ".*atchpoint \[0-9\]+: \\*\\*global_ptr_ptr\[\r\n\]+Old value = 7 .*\r\nNew value = 9 .*" "next over global_ptr_ptr buffer set"
 	gdb_test "next" ".*atchpoint \[0-9\]+: \\*\\*global_ptr_ptr\[\r\n\]+Old value = 9 .*\r\nNew value = 5 .*" "next over global_ptr_ptr pointer advance"
 	gdb_test_no_output "delete \$global_ptr_ptr_breakpoint_number"
     }
 }
-    
+
+proc test_no_hw_watchpoints {} {
+    global testfile
+
+    clean_restart $testfile
+
+    # Verify that a user can force GDB to use "slow" watchpoints.
+    # (This proves rather little on kernels that don't support
+    # fast watchpoints, but still...)
+    #
+    if ![runto_main] then { fail "watch tests suppressed" }
+
+    gdb_test_no_output "set can-use-hw-watchpoints 0" "disable fast watches"
+
+    gdb_test "show can-use-hw-watchpoints" \
+	"Debugger's willingness to use watchpoint hardware is 0." \
+	"show disable fast watches"
+
+    gdb_test "watch ival3 if  count > 1" \
+	"Watchpoint \[0-9\]*: ival3.*" \
+	"set slow conditional watch"
+
+    gdb_test "continue" \
+	"Watchpoint \[0-9\]*: ival3.*Old value = 1.*New value = 2.*" \
+	"trigger slow conditional watch"
+
+    gdb_test_no_output "delete \$bpnum" "delete watch ival3"
+
+    # We've explicitly disabled hardware watches.  Verify that GDB
+    # refrains from using them.
+    #
+    gdb_test "rwatch ival3" \
+	"Expression cannot be implemented with read/access watchpoint..*" \
+	"rwatch disallowed when can-set-hw-watchpoints cleared"
+
+    # Re-enable hardware watchpoints if necessary.
+    if ![target_info exists gdb,no_hardware_watchpoints] {
+        gdb_test_no_output "set can-use-hw-watchpoints 1" ""
+    }
+}
+
 proc test_watchpoint_in_big_blob {} {
     global gdb_prompt
 
-    gdb_test "watch buf" ".*atchpoint \[0-9\]+: buf"
-    gdb_test "cont" "Continuing.*atchpoint \[0-9\]+: buf\r\n\r\nOld value = .*testte\".*" "watchpoint on buf hit"
+    # On native targets where we do hardware resource accounting, this
+    # may end up as a software watchpoint.
+    set ok 0
+    set test "watch buf"
+    gdb_test_multiple "watch buf" $test {
+	-re "Hardware watchpoint \[0-9\]+: buf.*You may have requested too many hardware breakpoints/watchpoints.*$gdb_prompt $" {
+	    # This may happen with remote targets (where we don't do
+	    # resource accounting) that support hardware watchpoints,
+	    # when breakpoint always-inserted is on.  The watchpoint
+	    # was too large, for example.  If GDB is ever adjusted to
+	    # downgrade the watchpoint automatically in this case,
+	    # this match should be removed.  Note the breakpoint has
+	    # been created, and is in the list, so it needs deleting.
+	    pass $test
+	}
+	-re ".*atchpoint \[0-9\]+: buf.*$gdb_prompt $" {
+	    pass $test
+	    set ok 1
+	}
+    }
+
+    if { $ok } {
+	set test "watchpoint on buf hit"
+	gdb_test_multiple "cont" $test {
+	    -re "Continuing.*atchpoint \[0-9\]+: buf\r\n\r\nOld value = .*testte\".*$gdb_prompt $" {
+		pass $test
+	    }
+	    -re "Could not insert hardware breakpoints:.*You may have requested too many hardware breakpoints/watchpoints.*$gdb_prompt $" {
+		# This may happen with remote targets that support
+		# hardware watchpoints.  We only find out the
+		# watchpoint was too large, for example, at insert
+		# time.  If GDB is ever adjusted to downgrade the
+		# watchpoint automatically in this case, this match
+		# should be removed.
+		pass $test
+	    }
+	}
+    }
 
     gdb_test_no_output "delete \$bpnum" "delete watch buf"
 }
 
 # Start with a fresh gdb.
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load $binfile
 set prev_timeout $timeout
 set timeout 600	
 verbose "Timeout now 600 sec.\n"
 
-if [initialize] then {
+test_no_hw_watchpoints
+
+proc do_tests {} {
+    global testfile
+    global no_hw
 
-    test_simple_watchpoint
+    clean_restart $testfile
 
-    # The IDT/sim monitor only has 8 (!) open files, of which it uses
-    # 4 (!).  So we have to make sure one program exits before
-    # starting another one.
-    if [istarget "mips-idt-*"] then {
-	gdb_exit
-	gdb_start
-	gdb_reinitialize_dir $srcdir/$subdir
-	gdb_load $binfile
-	initialize
+    if {$no_hw || [target_info exists gdb,no_hardware_watchpoints]} {
+	gdb_test_no_output "set can-use-hw-watchpoints 0" ""
     }
 
-    test_disabling_watchpoints
+    if [initialize] then {
 
-    # See above.
-    if [istarget "mips-idt-*"] then {
-	gdb_exit
-	gdb_start
-	gdb_reinitialize_dir $srcdir/$subdir
-	gdb_load $binfile
-	initialize
-    }
+	test_simple_watchpoint
 
-    if ![target_info exists gdb,cannot_call_functions] {
-	test_stepping
+	test_disabling_watchpoints
 
-	# See above.
-	if [istarget "mips-idt-*"] then {
-	    gdb_exit
-	    gdb_start
-	    gdb_reinitialize_dir $srcdir/$subdir
-	    gdb_load $binfile
-	    initialize
+	if ![target_info exists gdb,cannot_call_functions] {
+	    test_stepping
 	}
     }
 
+    # Tests below don't rely on the markers and watchpoint set by
+    # `initialize' anymore.
+    clean_restart $testfile
+
+    if {$no_hw || [target_info exists gdb,no_hardware_watchpoints]} {
+	gdb_test_no_output "set can-use-hw-watchpoints 0" ""
+    }
+
     # Only enabled for some targets merely because it has not been tested 
     # elsewhere.
     # On sparc-sun-sunos4.1.3, GDB was running all the way to the marker4 
@@ -802,126 +917,34 @@ if [initialize] then {
 	test_watchpoint_triggered_in_syscall
     }
 
-    # See above.
-    if [istarget "mips-idt-*"] then {
-	gdb_exit
-	gdb_start
-	gdb_reinitialize_dir $srcdir/$subdir
-	gdb_load $binfile
-	initialize
-    }
-
-    # Only enabled for some targets merely because it has not been tested 
-    # elsewhere.
-    if {[istarget "hppa*-*-*"] || \
-	    [istarget "sparc*-*-sunos*"] || \
-	    [istarget "m32r-*-*"]} then {
-	test_complex_watchpoint
-    }
+    test_complex_watchpoint
 
     test_inaccessible_watchpoint
 
-    # Verify that a user can force GDB to use "slow" watchpoints.
-    # (This proves rather little on kernels that don't support
-    # fast watchpoints, but still...)
-    #
-    if ![runto_main] then { fail "watch tests suppressed" }
-
-    send_gdb "set can-use-hw-watchpoints 0\n"
-    gdb_expect {
-      -re "$gdb_prompt $"\
-              {pass "disable fast watches"}
-      timeout {fail "(timeout) disable fast watches"}
-    }
-    send_gdb "show can-use-hw-watchpoints\n"
-    gdb_expect {
-      -re "Debugger's willingness to use watchpoint hardware is 0.*$gdb_prompt $"\
-              {pass "show disable fast watches"}
-      -re "$gdb_prompt $"\
-              {fail "show disable fast watches"}
-      timeout {fail "(timeout) show disable fast watches"}
-    }
-    send_gdb "watch ival3 if  count > 1\n"
-    gdb_expect {
-      -re "Watchpoint \[0-9\]*: ival3.*$gdb_prompt $"\
-              {pass "set slow conditional watch"}
-      -re "$gdb_prompt $"\
-              {fail "set slow conditional watch"}
-      timeout {fail "(timeout) set slow conditional watch"}
-    }
-    send_gdb "continue\n"
-    gdb_expect {
-      -re "Watchpoint \[0-9\]*: ival3.*Old value = 1.*New value = 2.*$gdb_prompt $"\
-              {pass "trigger slow conditional watch"}
-      -re "$gdb_prompt $"\
-              {fail "trigger slow conditional watch"}
-      timeout {fail "(timeout) trigger slow conditional watch"}
-    }
-
-    # We've explicitly disabled hardware watches.  Verify that GDB
-    # refrains from using them.
-    #
-    send_gdb "rwatch ival3\n"
-    gdb_expect {
-      -re "Expression cannot be implemented with read/access watchpoint..*$gdb_prompt $"\
-              {pass "rwatch disallowed when can-set-hw-watchpoints cleared"}
-      -re "$gdb_prompt $"\
-              {fail "rwatch disallowed when can-set-hw-watchpoints cleared"}
-      timeout {fail "(timeout) rwatch disallowed when can-use-hw-watchpoints cleared"}
-    }
-
-    # Read- and access watchpoints are unsupported on HP-UX.  Verify
-    # that GDB gracefully responds to requests to create them.
-    #
-    if [istarget "hppa*-*-hpux*"] then {
-      send_gdb "set can-use-hw-watchpoints 1\n"
-      gdb_expect {
-        -re "$gdb_prompt $"\
-                {pass "enable fast watches"}
-        timeout {fail "(timeout) enable fast watches"}
-      }
-      send_gdb "rwatch ival3\n"
-      gdb_expect {
-        -re "Target does not have this type of hardware watchpoint support.*$gdb_prompt $"\
-                {pass "read watches disallowed"}
-        -re "$gdb_prompt $"\
-                {fail "read watches disallowed"}
-        timeout {fail "(timeout) read watches disallowed"}
-      }
-
-      send_gdb "awatch ival3\n"
-      gdb_expect {
-        -re "Target does not have this type of hardware watchpoint support.*$gdb_prompt $"\
-                {pass "access watches disallowed"}
-        -re "$gdb_prompt $"\
-                {fail "access watches disallowed"}
-        timeout {fail "(timeout) access watches disallowed"}
-      }
-    }
-
-    # See above.
-    if [istarget "mips-idt-*"] then {
-	gdb_exit
-	gdb_start
-	gdb_reinitialize_dir $srcdir/$subdir
-	gdb_load $binfile
-	initialize
-    }
-
     test_watchpoint_and_breakpoint
 
     test_watchpoint_in_big_blob
 
-    # See above.
-    if [istarget "mips-idt-*"] then {
-	clean_restart
-    }
-
     test_constant_watchpoint
 
     test_disable_enable_software_watchpoint
 
     test_watch_location
+
+    test_wide_location_1
+    test_wide_location_2
+}
+
+# On targets that can do hardware watchpoints, run the tests twice:
+# once with hardware watchpoints enabled; another with hardware
+# watchpoints force-disabled.
+
+do_tests
+if ![target_info exists gdb,no_hardware_watchpoints] {
+    with_test_prefix "no-hw" {
+	set no_hw 1
+	do_tests
+    }
 }
 
 # Restore old timeout
diff --git a/gdb/testsuite/gdb.base/watchpoints.c b/gdb/testsuite/gdb.base/watchpoints.c
index 0494b3c..8cdeb04 100644
--- a/gdb/testsuite/gdb.base/watchpoints.c
+++ b/gdb/testsuite/gdb.base/watchpoints.c
@@ -30,11 +30,6 @@ int ival4 = -1;
 int 
 main ()
 {
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
-
   for (count = 0; count < 4; count++) {
     ival1 = count; ival2 = count;
     ival3 = count; ival4 = count;
diff --git a/gdb/testsuite/gdb.base/watchpoints.exp b/gdb/testsuite/gdb.base/watchpoints.exp
index b8b27dc..57500b0 100644
--- a/gdb/testsuite/gdb.base/watchpoints.exp
+++ b/gdb/testsuite/gdb.base/watchpoints.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Pierre Muller. (muller at ics.u-strasbg.fr)
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 set testfile "watchpoints"
 set srcfile ${testfile}.c
@@ -26,7 +22,7 @@ set binfile ${objdir}/${subdir}/${testfile}
 
 set wp_set 1
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.base/whatis-exp.exp b/gdb/testsuite/gdb.base/whatis-exp.exp
index 7ca9896..2c50854 100644
--- a/gdb/testsuite/gdb.base/whatis-exp.exp
+++ b/gdb/testsuite/gdb.base/whatis-exp.exp
@@ -25,10 +25,6 @@
 # with the EVAL_AVOID_SIDE_EFFECTS flag rather than EVAL_NORMAL
 # 
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
 #
 # test running programs
 #
diff --git a/gdb/testsuite/gdb.base/whatis.c b/gdb/testsuite/gdb.base/whatis.c
index b630c52..94fe8de 100644
--- a/gdb/testsuite/gdb.base/whatis.c
+++ b/gdb/testsuite/gdb.base/whatis.c
@@ -248,10 +248,6 @@ enum cars {chevy, ford, porsche} clunker;
 
 int main ()
 {
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
   /* Some linkers (e.g. on AIX) remove unreferenced variables,
      so make sure to reference them. */
   v_char = 0;
diff --git a/gdb/testsuite/gdb.base/whatis.exp b/gdb/testsuite/gdb.base/whatis.exp
index 825eb7f..18edc4c 100644
--- a/gdb/testsuite/gdb.base/whatis.exp
+++ b/gdb/testsuite/gdb.base/whatis.exp
@@ -16,10 +16,6 @@
 
 # This file was written by Rob Savoye. (rob at cygnus.com)
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 #
 # test running programs
 #
@@ -40,7 +36,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable $exe
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
@@ -469,3 +465,45 @@ gdb_test "whatis char_addr" \
 gdb_test "whatis a_char_addr" \
     "type = char_addr" \
     "whatis applied to variable defined by typedef"
+
+# Regression tests for PR 9514.
+
+gdb_test "whatis void (**)()" \
+  "type = void \\(\\*\\*\\)\\(\\)" \
+  "whatis applied to pointer to pointer to function"
+
+gdb_test "whatis void (** const)()" \
+  "type = void \\(\\*\\* const\\)\\(\\)" \
+  "whatis applied to const pointer to pointer to function"
+
+gdb_test "whatis void (* const *)()" \
+  "type = void \\(\\* const \\*\\)\\(\\)" \
+  "whatis applied to pointer to const pointer to function"
+
+gdb_test "whatis int *(*)()" \
+    "type = int \\*\\(\\*\\)\\(\\)" \
+    "whatis applied to pointer to function returning pointer to int"
+
+gdb_test "whatis int *(**)()" \
+    "type = int \\*\\(\\*\\*\\)\\(\\)" \
+    "whatis applied to pointer to pointer to function returning pointer to int"
+
+gdb_test "whatis char (*(*)())\[23\]" \
+    "type = char \\(\\*\\(\\*\\)\\(\\)\\)\\\[23\\\]" \
+    "whatis applied to pointer to function returning pointer to array"
+
+gdb_test "whatis int (*)(int, int)" \
+    "type = int \\(\\*\\)\\(int, int\\)" \
+    "whatis applied to pointer to function taking int,int and returning int"
+
+gdb_test "whatis int (*)(const int *, ...)" \
+    "type = int \\(\\*\\)\\(const int \\*, \\.\\.\\.\\)" \
+    "whatis applied to pointer to function taking const int ptr and varargs and returning int"
+
+gdb_test "whatis int (*)(void, int, int)" \
+    "parameter types following 'void'" \
+    "whatis applied to function with types trailing 'void'"
+
+gdb_test "whatis int (*)(int, void, int)" \
+    "'void' invalid as parameter type" \
+    "whatis applied to function with 'void' parameter type"
diff --git a/gdb/testsuite/gdb.cell/Makefile.in b/gdb/testsuite/gdb.cell/Makefile.in
index 8b6675d..7771d61 100644
--- a/gdb/testsuite/gdb.cell/Makefile.in
+++ b/gdb/testsuite/gdb.cell/Makefile.in
@@ -11,6 +11,7 @@ all info install-info dvi install uninstall installcheck check:
 
 clean mostlyclean:
 	-rm -f *~ *.o a.out core corefile gcore.test
+	-rm -f *.dwo *.dwp
 	-rm -f $(EXECUTABLES) $(SPU_EXECUTABLES)
 
 distclean maintainer-clean realclean: clean
diff --git a/gdb/testsuite/gdb.cell/arch.exp b/gdb/testsuite/gdb.cell/arch.exp
index 8ee08c8..6f812ff 100644
--- a/gdb/testsuite/gdb.cell/arch.exp
+++ b/gdb/testsuite/gdb.cell/arch.exp
@@ -46,7 +46,7 @@ if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable
   return -1
 }
 
-if [get_compiler_info ${ppu_bin}] {
+if [get_compiler_info] {
   return -1
 }
 
diff --git a/gdb/testsuite/gdb.cell/break.exp b/gdb/testsuite/gdb.cell/break.exp
index bfe64e3..499c80f 100644
--- a/gdb/testsuite/gdb.cell/break.exp
+++ b/gdb/testsuite/gdb.cell/break.exp
@@ -47,7 +47,7 @@ if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable
   return -1
 }
 
-if [get_compiler_info ${ppu_bin}] {
+if [get_compiler_info] {
   return -1
 }
 
diff --git a/gdb/testsuite/gdb.cell/bt.exp b/gdb/testsuite/gdb.cell/bt.exp
index db07780..15a3b32 100644
--- a/gdb/testsuite/gdb.cell/bt.exp
+++ b/gdb/testsuite/gdb.cell/bt.exp
@@ -58,7 +58,7 @@ if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o $spu2_bin-embed.o] $p
   return -1
 }
 
-if [get_compiler_info ${ppu_bin}] {
+if [get_compiler_info] {
   return -1
 }
 
diff --git a/gdb/testsuite/gdb.cell/core.exp b/gdb/testsuite/gdb.cell/core.exp
index 3c01538..76867a6 100644
--- a/gdb/testsuite/gdb.cell/core.exp
+++ b/gdb/testsuite/gdb.cell/core.exp
@@ -51,7 +51,7 @@ if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable
   return -1
 }
 
-if [get_compiler_info ${ppu_bin}] {
+if [get_compiler_info] {
   return -1
 }
 
diff --git a/gdb/testsuite/gdb.cell/data.exp b/gdb/testsuite/gdb.cell/data.exp
index 9afc963..3fb134e 100644
--- a/gdb/testsuite/gdb.cell/data.exp
+++ b/gdb/testsuite/gdb.cell/data.exp
@@ -47,7 +47,7 @@ if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable
   return -1
 }
 
-if [get_compiler_info ${ppu_bin}] {
+if [get_compiler_info] {
   return -1
 }
 
diff --git a/gdb/testsuite/gdb.cell/ea-cache.exp b/gdb/testsuite/gdb.cell/ea-cache.exp
index f1de8bd..fa7fb7a 100644
--- a/gdb/testsuite/gdb.cell/ea-cache.exp
+++ b/gdb/testsuite/gdb.cell/ea-cache.exp
@@ -46,7 +46,7 @@ if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable
   return -1
 }
 
-if [get_compiler_info ${ppu_bin}] {
+if [get_compiler_info] {
   return -1
 }
 
diff --git a/gdb/testsuite/gdb.cell/f-regs.exp b/gdb/testsuite/gdb.cell/f-regs.exp
index 0952cc6..42cc064 100644
--- a/gdb/testsuite/gdb.cell/f-regs.exp
+++ b/gdb/testsuite/gdb.cell/f-regs.exp
@@ -46,7 +46,7 @@ if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable
   return -1
 }
 
-if [get_compiler_info ${ppu_bin}] {
+if [get_compiler_info] {
   return -1
 }
 
diff --git a/gdb/testsuite/gdb.cell/fork.exp b/gdb/testsuite/gdb.cell/fork.exp
index d5eed2f..b22b4e6 100644
--- a/gdb/testsuite/gdb.cell/fork.exp
+++ b/gdb/testsuite/gdb.cell/fork.exp
@@ -47,7 +47,7 @@ if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable
   return -1
 }
 
-if [get_compiler_info ${ppu_bin}] {
+if [get_compiler_info] {
   return -1
 }
 
diff --git a/gdb/testsuite/gdb.cell/gcore.exp b/gdb/testsuite/gdb.cell/gcore.exp
index 230fc80..c05bc4a 100644
--- a/gdb/testsuite/gdb.cell/gcore.exp
+++ b/gdb/testsuite/gdb.cell/gcore.exp
@@ -51,7 +51,7 @@ if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable
   return -1
 }
 
-if [get_compiler_info ${ppu_bin}] {
+if [get_compiler_info] {
   return -1
 }
 
diff --git a/gdb/testsuite/gdb.cell/mem-access.exp b/gdb/testsuite/gdb.cell/mem-access.exp
index 55c094a..305c32a 100644
--- a/gdb/testsuite/gdb.cell/mem-access.exp
+++ b/gdb/testsuite/gdb.cell/mem-access.exp
@@ -47,7 +47,7 @@ if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable
   return -1
 }
 
-if [get_compiler_info ${ppu_bin}] {
+if [get_compiler_info] {
   return -1
 }
 
diff --git a/gdb/testsuite/gdb.cell/ptype.exp b/gdb/testsuite/gdb.cell/ptype.exp
index e5f1687..58fcb4b 100644
--- a/gdb/testsuite/gdb.cell/ptype.exp
+++ b/gdb/testsuite/gdb.cell/ptype.exp
@@ -46,7 +46,7 @@ if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable
   return -1
 }
 
-if [get_compiler_info ${ppu_bin}] {
+if [get_compiler_info] {
   return -1
 }
 
diff --git a/gdb/testsuite/gdb.cell/registers.exp b/gdb/testsuite/gdb.cell/registers.exp
index ff20b31..654e85f 100644
--- a/gdb/testsuite/gdb.cell/registers.exp
+++ b/gdb/testsuite/gdb.cell/registers.exp
@@ -46,7 +46,7 @@ if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable
   return -1
 }
 
-if [get_compiler_info ${ppu_bin}] {
+if [get_compiler_info] {
   return -1
 }
 
diff --git a/gdb/testsuite/gdb.cell/sizeof.exp b/gdb/testsuite/gdb.cell/sizeof.exp
index 616c797..0fb2dfe 100644
--- a/gdb/testsuite/gdb.cell/sizeof.exp
+++ b/gdb/testsuite/gdb.cell/sizeof.exp
@@ -46,7 +46,7 @@ if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable
   return -1
 }
 
-if [get_compiler_info ${ppu_bin}] {
+if [get_compiler_info] {
   return -1
 }
 
diff --git a/gdb/testsuite/gdb.cell/solib-symbol.exp b/gdb/testsuite/gdb.cell/solib-symbol.exp
index db49369..8e788e3 100644
--- a/gdb/testsuite/gdb.cell/solib-symbol.exp
+++ b/gdb/testsuite/gdb.cell/solib-symbol.exp
@@ -46,7 +46,7 @@ if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable
   return -1
 }
 
-if [get_compiler_info ${ppu_bin}] {
+if [get_compiler_info] {
   return -1
 }
 
diff --git a/gdb/testsuite/gdb.cell/solib.exp b/gdb/testsuite/gdb.cell/solib.exp
index 8985c2d..f65d64a 100644
--- a/gdb/testsuite/gdb.cell/solib.exp
+++ b/gdb/testsuite/gdb.cell/solib.exp
@@ -46,7 +46,7 @@ if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable
   return -1
 }
 
-if [get_compiler_info ${ppu_bin}] {
+if [get_compiler_info] {
   return -1
 }
 
diff --git a/gdb/testsuite/gdb.cp/Makefile.in b/gdb/testsuite/gdb.cp/Makefile.in
index 3b7ef16..2958e24 100644
--- a/gdb/testsuite/gdb.cp/Makefile.in
+++ b/gdb/testsuite/gdb.cp/Makefile.in
@@ -21,6 +21,7 @@ all info install-info dvi install uninstall installcheck check:
 
 clean mostlyclean:
 	-rm -f *~ *.o *.ci
+	-rm -f *.dwo *.dwp
 	-rm -f core ${EXECUTABLES}
 
 distclean maintainer-clean realclean: clean
diff --git a/gdb/testsuite/gdb.cp/abstract-origin.exp b/gdb/testsuite/gdb.cp/abstract-origin.exp
index 68e247b..16c9069 100644
--- a/gdb/testsuite/gdb.cp/abstract-origin.exp
+++ b/gdb/testsuite/gdb.cp/abstract-origin.exp
@@ -13,9 +13,9 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile abstract-origin
-set srcfile ${testfile}.cc
-if [prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}] {
+standard_testfile .cc
+
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.cp/ambiguous.exp b/gdb/testsuite/gdb.cp/ambiguous.exp
index b03eb8c..052c281 100644
--- a/gdb/testsuite/gdb.cp/ambiguous.exp
+++ b/gdb/testsuite/gdb.cp/ambiguous.exp
@@ -21,10 +21,6 @@
 
 # This file is part of the gdb testsuite
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 #
 # test running programs
 #
@@ -32,28 +28,18 @@ if $tracelevel then {
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile "ambiguous"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if [get_compiler_info ${binfile} "c++"] {
+if [get_compiler_info "c++"] {
     return -1;
 }
 
 if { [test_compiler_info gcc-*] } then { continue }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested ambiguous.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
-
 #
 # set it up at a breakpoint so we can play with the variable values
 #
diff --git a/gdb/testsuite/gdb.cp/annota2.exp b/gdb/testsuite/gdb.cp/annota2.exp
index 9de83c8..9a54fac 100644
--- a/gdb/testsuite/gdb.cp/annota2.exp
+++ b/gdb/testsuite/gdb.cp/annota2.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Elena Zannoni (ezannoni at cygnus.com)
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 #
 # test running programs
@@ -26,12 +22,10 @@ if $tracelevel then {
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile "annota2"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++ nowarnings}] != "" } {
-    untested annota2.exp
+if {[prepare_for_testing $testfile.exp $testfile $srcfile \
+	 {debug c++ nowarnings}]} {
     return -1
 }
 
@@ -44,16 +38,6 @@ if [is_remote target] then {
     return 0
 }
 
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
-if [target_info exists gdb_stub] {
-    gdb_step_for_stub;
-}
-
 #
 # line number where we need to stop in main
 #
diff --git a/gdb/testsuite/gdb.cp/annota3.exp b/gdb/testsuite/gdb.cp/annota3.exp
index e34973b..61ee222 100644
--- a/gdb/testsuite/gdb.cp/annota3.exp
+++ b/gdb/testsuite/gdb.cp/annota3.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Elena Zannoni (ezannoni at cygnus.com)
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 #
 # test running programs
@@ -26,12 +22,10 @@ if $tracelevel then {
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile "annota3"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++ nowarnings}] != "" } {
-    untested annota3.exp
+if {[prepare_for_testing $testfile.exp $testfile $srcfile \
+	 {debug c++ nowarnings}]} {
     return -1
 }
 
@@ -44,16 +38,6 @@ if [is_remote target] then {
     return 0
 }
 
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
-if [target_info exists gdb_stub] {
-    gdb_step_for_stub;
-}
-
 #
 # line number where we need to stop in main
 #
diff --git a/gdb/testsuite/gdb.cp/anon-ns.exp b/gdb/testsuite/gdb.cp/anon-ns.exp
index 188cdec..19c5f1d 100644
--- a/gdb/testsuite/gdb.cp/anon-ns.exp
+++ b/gdb/testsuite/gdb.cp/anon-ns.exp
@@ -19,9 +19,7 @@
 
 if {[skip_cplus_tests]} { continue }
 
-# Tests for c++/12750/12704
-set testfile "anon-ns"
-set srcfile $testfile.cc
+standard_testfile .cc
 
 if {[prepare_for_testing $testfile $testfile $srcfile {c++ debug}]} {
     return -1
diff --git a/gdb/testsuite/gdb.cp/anon-struct.exp b/gdb/testsuite/gdb.cp/anon-struct.exp
index 4130e9c..b3a0806 100644
--- a/gdb/testsuite/gdb.cp/anon-struct.exp
+++ b/gdb/testsuite/gdb.cp/anon-struct.exp
@@ -14,9 +14,8 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile anon-struct
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
+
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug c++}] } {
      return -1
 }
diff --git a/gdb/testsuite/gdb.cp/anon-union.exp b/gdb/testsuite/gdb.cp/anon-union.exp
index a8db275..51b69e2 100644
--- a/gdb/testsuite/gdb.cp/anon-union.exp
+++ b/gdb/testsuite/gdb.cp/anon-union.exp
@@ -19,10 +19,6 @@
 
 # This file is part of the gdb testsuite
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 #
 # test running programs
 #
@@ -30,22 +26,12 @@ if $tracelevel then {
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile "anon-union"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     perror "Testcase compile failed" 0
-     continue
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
-# Start with a fresh gdb
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint"
     continue
diff --git a/gdb/testsuite/gdb.cp/arg-reference.exp b/gdb/testsuite/gdb.cp/arg-reference.exp
index 6c59cdc..a65055b 100644
--- a/gdb/testsuite/gdb.cp/arg-reference.exp
+++ b/gdb/testsuite/gdb.cp/arg-reference.exp
@@ -21,25 +21,13 @@
 # Test G++ has compiled debuginfo without a C++ '&' reference where it should
 # not be.  GCC Bug 33537.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if { [skip_cplus_tests] } { continue }
 
 
-set testfile "arg-reference"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-    untested ${testfile}.exp
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 gdb_test "ptype foo" "type = int \\\(Obj\\\)" "No false reference"
diff --git a/gdb/testsuite/gdb.cp/bool.exp b/gdb/testsuite/gdb.cp/bool.exp
index e33ebe9..fec6653 100644
--- a/gdb/testsuite/gdb.cp/bool.exp
+++ b/gdb/testsuite/gdb.cp/bool.exp
@@ -18,29 +18,17 @@
 
 # This file is part of the gdb testsuite.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 # Test returning bool.
 
 if { [skip_cplus_tests] } { continue }
 
 
-set testfile "bool"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-    untested bool.exp
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 runto_main
 
 # Testcases for tdep/2075.
diff --git a/gdb/testsuite/gdb.cp/breakpoint.exp b/gdb/testsuite/gdb.cp/breakpoint.exp
index 1072ff0..c615528 100644
--- a/gdb/testsuite/gdb.cp/breakpoint.exp
+++ b/gdb/testsuite/gdb.cp/breakpoint.exp
@@ -17,40 +17,28 @@
 
 # This contains tests for breakpoints in C++.
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 if { [skip_cplus_tests] } { continue }
 
 #
 # test running programs
 #
 
-set testfile "breakpoint"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested breakpoint.exp
-     return -1
+if [get_compiler_info "c++"] {
+    return -1
 }
 
-if [get_compiler_info ${binfile} "c++"] {
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 proc test_breakpoint {name} {
     # Restart the program every time, so that a single failure doesn't
     # lead to a cascade.
     if ![runto_main] then {
 	perror "couldn't run to main when testing ${name}"
-	continue
+	return -code continue
     } else {
 	gdb_breakpoint "${name}"
 	gdb_test "continue" "Continuing.\r\n\r\nBreakpoint \[0-9\]*, ${name}.*" "continue to ${name}"
diff --git a/gdb/testsuite/gdb.cp/bs15503.exp b/gdb/testsuite/gdb.cp/bs15503.exp
index 23df242..0803fc9 100644
--- a/gdb/testsuite/gdb.cp/bs15503.exp
+++ b/gdb/testsuite/gdb.cp/bs15503.exp
@@ -17,10 +17,6 @@
 # This file was written by Sue Kimura (sue_kimura at hp.com)
 # Rewritten by Michael Chastain (mec.gnu at mindspring.com)
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 if { [skip_stl_tests] } { continue }
 
 # On SPU this test fails because the executable exceeds local storage size.
@@ -28,24 +24,16 @@ if { [istarget "spu*-*-*"] } {
         return 0
 }
 
-set testfile "bs15503"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "debug c++"] != "" } {
-    untested bs15503.exp
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint"
     continue
diff --git a/gdb/testsuite/gdb.cp/call-c.exp b/gdb/testsuite/gdb.cp/call-c.exp
index c0fc79d..68ca35d 100644
--- a/gdb/testsuite/gdb.cp/call-c.exp
+++ b/gdb/testsuite/gdb.cp/call-c.exp
@@ -13,31 +13,21 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile call-c
-set binfile ${objdir}/${subdir}/${testfile}
-set srcfilec ${srcdir}/${subdir}/${testfile}-1.c
-set srcfilecpp ${srcdir}/${subdir}/${testfile}.cc
-set objfilec ${objdir}/${subdir}/${testfile}-1.o
-set objfilecpp ${objdir}/${subdir}/${testfile}.o
+standard_testfile .cc call-c-1.c
+set objfilec [standard_output_file ${testfile}-1.o]
+set objfilecpp [standard_output_file ${testfile}.o]
 
-if {[gdb_compile "${srcfilec}" "${objfilec}" object {debug}] != ""
-    || [gdb_compile "${srcfilecpp}" "${objfilecpp}" object {c++ debug}] != ""
+if {[gdb_compile "$srcdir/$subdir/${srcfile2}" "${objfilec}" object {debug}] != ""
+    || [gdb_compile "$srcdir/$subdir/${srcfile}" "${objfilecpp}" object {c++ debug}] != ""
     || [gdb_compile "${objfilecpp} ${objfilec}" "${binfile}" executable {c++ debug}] != ""} {
     untested ${testfile}.exp
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 
 runto_main
 
diff --git a/gdb/testsuite/gdb.cp/casts.exp b/gdb/testsuite/gdb.cp/casts.exp
index 93fab94..2013ab8 100644
--- a/gdb/testsuite/gdb.cp/casts.exp
+++ b/gdb/testsuite/gdb.cp/casts.exp
@@ -20,10 +20,6 @@
 
 # This file is part of the gdb testsuite
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 #
 # test running programs
 #
@@ -31,25 +27,16 @@ if $tracelevel then {
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile "casts"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if [get_compiler_info ${binfile} "c++"] {
+if [get_compiler_info "c++"] {
     return -1;
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested casts.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint"
     continue
@@ -141,11 +128,11 @@ gdb_test "print dynamic_cast<Alpha *> (&doublyderived)" \
     "dynamic_cast upcast to unique base"
 
 gdb_test "print dynamic_cast<Alpha &> (derived)" \
-    " = \\(Alpha \\&\\) @$nonzero_hex: {.* = $nonzero_hex}" \
+    " = \\(Alpha \\&\\) @$nonzero_hex: {.* = ${nonzero_hex}( <vtable for Derived.*>)?}" \
     "dynamic_cast simple upcast to reference"
 
 gdb_test "print dynamic_cast<Derived *> (ad)" \
-    " = \\(Derived \\*\\) $nonzero_hex" \
+    " = \\(Derived \\*\\) ${nonzero_hex}( <vtable for Derived.*>)?" \
     "dynamic_cast simple downcast"
 
 gdb_test "print dynamic_cast<VirtuallyDerived *> (add)" \
@@ -161,7 +148,7 @@ gdb_test "print dynamic_cast<VirtuallyDerived &> (*ad)" \
     "dynamic_cast to reference to non-existing base"
 
 gdb_test "print dynamic_cast<DoublyDerived *> (add)" \
-    " = \\(DoublyDerived \\*\\) $nonzero_hex" \
+    " = \\(DoublyDerived \\*\\) ${nonzero_hex}( <vtable for DoublyDerived.*>)?" \
     "dynamic_cast unique downcast"
 
 gdb_test "print dynamic_cast<Gamma *> (add)" \
diff --git a/gdb/testsuite/gdb.cp/class2.exp b/gdb/testsuite/gdb.cp/class2.exp
index 7c2e63e..3ccbc23 100644
--- a/gdb/testsuite/gdb.cp/class2.exp
+++ b/gdb/testsuite/gdb.cp/class2.exp
@@ -13,33 +13,21 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-    }
-
 if { [skip_cplus_tests] } { continue }
 
 
-set testfile "class2"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile} "c++"] {
+if [get_compiler_info "c++"] {
     return -1
 }
 
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-    untested class2.exp
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 # Start with "set print object off".
 
 gdb_test_no_output "set print object off"
diff --git a/gdb/testsuite/gdb.cp/classes.cc b/gdb/testsuite/gdb.cp/classes.cc
index 75979c8..b54ca1c 100644
--- a/gdb/testsuite/gdb.cp/classes.cc
+++ b/gdb/testsuite/gdb.cp/classes.cc
@@ -576,10 +576,6 @@ void use_methods ()
 int
 main()
 {
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
   dummy();
   inheritance1 ();
   inheritance3 ();
diff --git a/gdb/testsuite/gdb.cp/classes.exp b/gdb/testsuite/gdb.cp/classes.exp
index 3793f91..440677b 100644
--- a/gdb/testsuite/gdb.cp/classes.exp
+++ b/gdb/testsuite/gdb.cp/classes.exp
@@ -18,21 +18,14 @@
 
 set nl "\[\r\n\]+"
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if { [skip_cplus_tests] } { continue }
 
 load_lib "cp-support.exp"
 
-set testfile "classes"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested classes.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
 # Test ptype of class objects.
@@ -523,8 +516,8 @@ proc test_static_members {} {
     gdb_test "print Foo::st" "\\$\[0-9\]+ = 100"
     gdb_test_no_output "set foo.st = 200" ""
     gdb_test "print bar.st" "\\$\[0-9\]+ = 200"
-    gdb_test "print &foo.st" "\\$\[0-9\]+ = \\(int ?\\*\\) $hex"
-    gdb_test "print &Bar::st" "\\$\[0-9\]+ = \\(int ?\\*\\) $hex"
+    gdb_test "print &foo.st" "\\$\[0-9\]+ = \\(int ?\\*\\) $hex <Foo::st>"
+    gdb_test "print &Bar::st" "\\$\[0-9\]+ = \\(int ?\\*\\) $hex <Foo::st>"
     gdb_test "print *\$" "\\$\[0-9\]+ = 200"
 
     gdb_test_no_output "set print static-members off"
@@ -545,21 +538,10 @@ proc test_static_members {} {
 }
 
 proc do_tests {} {
-    global subdir
-    global objdir
-    global srcdir
-    global binfile
     global gdb_prompt
     global nl
 
 
-    # Start with a fresh gdb.
-
-    gdb_exit
-    gdb_start
-    gdb_reinitialize_dir $srcdir/$subdir
-    gdb_load $binfile
-
     gdb_test_no_output "set language c++" ""
     gdb_test_no_output "set width 0" ""
 
diff --git a/gdb/testsuite/gdb.cp/cmpd-minsyms.exp b/gdb/testsuite/gdb.cp/cmpd-minsyms.exp
index 0186c0c..fae1ac9 100644
--- a/gdb/testsuite/gdb.cp/cmpd-minsyms.exp
+++ b/gdb/testsuite/gdb.cp/cmpd-minsyms.exp
@@ -20,9 +20,10 @@
 if {[skip_cplus_tests]} { continue }
 
 # Tests for c++/12273, breakpoint/12803
-set testfile "cmpd-minsyms"
+standard_testfile .cc
+
 # Do NOT compile with debug flag.
-if {[prepare_for_testing $testfile $testfile $testfile.cc {c++}]} {
+if {[prepare_for_testing $testfile $testfile $srcfile {c++}]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.cp/converts.exp b/gdb/testsuite/gdb.cp/converts.exp
index bd2d84b..9b8df58 100644
--- a/gdb/testsuite/gdb.cp/converts.exp
+++ b/gdb/testsuite/gdb.cp/converts.exp
@@ -13,8 +13,8 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile converts
-set srcfile ${testfile}.cc
+standard_testfile .cc
+
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug c++}] } {
      return -1
 }
diff --git a/gdb/testsuite/gdb.cp/cp-relocate.exp b/gdb/testsuite/gdb.cp/cp-relocate.exp
index 172f24e..31b434f 100644
--- a/gdb/testsuite/gdb.cp/cp-relocate.exp
+++ b/gdb/testsuite/gdb.cp/cp-relocate.exp
@@ -15,9 +15,8 @@
 
 # Test loading symbols from unrelocated C++ object files.
 
-set testfile cp-relocate
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}.o
+standard_testfile .cc
+append binfile .o
 
 if { [skip_cplus_tests] } { continue }
 
@@ -31,11 +30,11 @@ proc get_func_address { func } {
 
     set rfunc [string_to_regexp $func]
     gdb_test_multiple "print ${func}" "get address of ${func}" {
-	-re "\\\$\[0-9\]+ = \\{.*\\} (0|($hex) <${rfunc}>)\[\r\n\]+${gdb_prompt} $" {
+	-re "\\\$\[0-9\]+ = \\{.*\\} (($hex) <${rfunc}.*>)\[\r\n\]+${gdb_prompt} $" {
 	    # $1 = {int ()} 0x24 <function_bar>
 	    # But if the function is at zero, the name may be omitted.
 	    pass "get address of ${func}"
-	    if { $expect_out(1,string) == "0" } {
+	    if { $expect_out(1,string) == "0x0" } {
 		return "0x0"
 	    } else {
 		return $expect_out(2,string)
diff --git a/gdb/testsuite/gdb.cp/cpcompletion.exp b/gdb/testsuite/gdb.cp/cpcompletion.exp
index 48dcca1..dba9c10 100644
--- a/gdb/testsuite/gdb.cp/cpcompletion.exp
+++ b/gdb/testsuite/gdb.cp/cpcompletion.exp
@@ -49,31 +49,14 @@ proc test_class_complete {class expr name matches} {
     }
 }
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if { [skip_cplus_tests] } { continue }
 
-set testfile pr9594
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile pr9594.cc
 
-if {[gdb_compile "${srcdir}/${subdir}/${testfile}.cc" "${testfile}.o" object {c++ debug}] != ""} {
-    untested cpcompletion.exp
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-if {[gdb_compile "${testfile}.o" ${binfile} executable {c++ debug}] != "" } {
-     untested cpcompletion.exp
-     return -1
-}
-
-gdb_exit
-
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 # Test that completion is restricted by class name (all methods)
 test_class_complete Foo "" "complete class methods" \
     [list Foo Foofoo get_foo set_foo ~Foo]
@@ -83,9 +66,9 @@ test_class_complete Foo F "complete class methods beginning with F" \
 
 # The tests below depend on the current code scope.
 
-set bp_location [gdb_get_line_number "Set breakpoint here" ${testfile}.cc]
+set bp_location [gdb_get_line_number "Set breakpoint here" ${srcfile}]
 
-if {![runto "${testfile}.cc:$bp_location"]} {
+if {![runto "${srcfile}:$bp_location"]} {
     perror "test suppressed"
     return
 }
diff --git a/gdb/testsuite/gdb.cp/cpexprs.cc b/gdb/testsuite/gdb.cp/cpexprs.cc
index c8c5ac8..f6b355c 100644
--- a/gdb/testsuite/gdb.cp/cpexprs.cc
+++ b/gdb/testsuite/gdb.cp/cpexprs.cc
@@ -308,6 +308,29 @@ class derived : public base1, public base2
   int foo_;
 };
 
+class CV { public:
+  static const int i;
+  typedef int t;
+  void m(t);
+  void m(t) const;
+  void m(t) volatile;
+  void m(t) const volatile;
+};
+const int CV::i = 42;
+#ifdef __GNUC__
+# define ATTRIBUTE_USED __attribute__((used))
+#else
+# define ATTRIBUTE_USED
+#endif
+ATTRIBUTE_USED void CV::m(CV::t) {}
+ATTRIBUTE_USED void CV::m(CV::t) const {}
+ATTRIBUTE_USED void CV::m(CV::t) volatile {}
+ATTRIBUTE_USED void CV::m(CV::t) const volatile {}
+int CV_f (int x)
+{
+  return x + 1;
+}
+
 int
 test_function (int argc, char* argv[]) // test_function
 { // test_function
@@ -428,6 +451,8 @@ test_function (int argc, char* argv[]) // test_function
   fluff* flp = a;
   fluff** flpp = a;
 
+  CV_f(CV::i);
+
   return 0;
 }
 
diff --git a/gdb/testsuite/gdb.cp/cpexprs.exp b/gdb/testsuite/gdb.cp/cpexprs.exp
index 6b5e14e..aa37315 100644
--- a/gdb/testsuite/gdb.cp/cpexprs.exp
+++ b/gdb/testsuite/gdb.cp/cpexprs.exp
@@ -663,10 +663,6 @@ add {policyd5::function} \
     {operation_1<T>::function}
 
 # Start the test
-if {$tracelevel} {
-    strace $tracelevel
-}
-
 if {[skip_cplus_tests]} { continue }
 
 # On SPU this test fails because the executable exceeds local storage size.
@@ -678,25 +674,16 @@ if { [istarget "spu*-*-*"] } {
 # test running programs
 #
 
-set testfile "cpexprs"
-set srcfile "${testfile}.cc"
-set binfile [file join $objdir $subdir $testfile]
+standard_testfile .cc
 
-if  {[gdb_compile [file join $srcdir $subdir $srcfile] $binfile \
-	  executable {debug c++}] != "" } {
-    untested "$testfile.exp"
+if {[get_compiler_info "c++"]} {
     return -1
 }
 
-if {[get_compiler_info $binfile "c++"]} {
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir [file join $srcdir $subdir]
-gdb_load $binfile
-
 if {![runto_main]} {
     perror "couldn't run to breakpoint"
     continue
@@ -723,5 +710,26 @@ foreach name [get_functions list] {
     }
 }
 
+# Test c/v gets recognized even without quoting.
+foreach cv {{} { const} { volatile} { const volatile}} {
+  set test "p 'CV::m(int)$cv'"
+  gdb_test_multiple $test $test {
+      -re "( = {.*} 0x\[0-9a-f\]+ <CV::m.*>)\r\n$gdb_prompt $" {
+	  # = {void (CV * const, CV::t)} 0x400944 <CV::m(int)>
+	  set correct $expect_out(1,string)
+	  pass $test
+      }
+  }
+  if {"$cv" != ""} {
+      setup_kfail c++/14186 *-*-*
+  }
+  gdb_test "p CV::m(int)$cv" [string_to_regexp $correct]
+}
+
+# Test TYPENAME:: gets recognized even in parentheses.
+gdb_test "p CV_f(int)"   { = {int \(int\)} 0x[0-9a-f]+ <CV_f\(int\)>}
+gdb_test "p CV_f(CV::t)" { = {int \(int\)} 0x[0-9a-f]+ <CV_f\(int\)>}
+gdb_test "p CV_f(CV::i)" " = 43"
+
 gdb_exit
 return 0
diff --git a/gdb/testsuite/gdb.cp/cplabel.cc b/gdb/testsuite/gdb.cp/cplabel.cc
new file mode 100644
index 0000000..876f802
--- /dev/null
+++ b/gdb/testsuite/gdb.cp/cplabel.cc
@@ -0,0 +1,80 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+class foo
+{
+public:
+  static int bar (void)
+  {
+    int i = 5;
+    bool first = true;
+
+  to_the_top:  /* bar:to_the_top */
+    while (1)
+      {
+	if (i == 1)
+	  {
+	    if (first)
+	      {
+		first = false;
+		goto to_the_top;
+	      }
+	    else
+	      goto get_out_of_here;
+	  }
+
+	--i;
+      }
+
+  get_out_of_here: /* bar:get_out_of_here */
+    return i;
+  }
+
+  int baz (int a)
+  {
+    int i = a;
+    bool first = true;
+
+  to_the_top: /* baz:to_the_top */
+    while (1)
+      {
+	if (i == 1)
+	  {
+	    if (first)
+	      {
+		first = false;
+		goto to_the_top;
+	      }
+	    else
+	      goto get_out_of_here;
+	  }
+
+	--i;
+      }
+
+  get_out_of_here: /* baz:get_out_of_here */
+    return i;
+  }
+};
+
+int
+main (void)
+{
+  foo f;
+  return f.baz (foo::bar () + 3); 
+}
+
diff --git a/gdb/testsuite/gdb.cp/cplabel.exp b/gdb/testsuite/gdb.cp/cplabel.exp
new file mode 100644
index 0000000..41a9196
--- /dev/null
+++ b/gdb/testsuite/gdb.cp/cplabel.exp
@@ -0,0 +1,40 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Tests for breakpoint on labels in methods.
+
+if {[skip_cplus_tests]} { continue }
+
+standard_testfile .cc
+
+if {[prepare_for_testing "$testfile.exp" $testfile $srcfile {c++ debug}]} {
+    return -1
+}
+
+if {![runto_main]} {
+    untested "could not run to main"
+    return -1
+}
+
+set methods {"bar" "baz"}
+set labels {"to_the_top" "get_out_of_here"}
+
+foreach m $methods {
+    foreach l $labels {
+	set line [gdb_get_line_number "$m:$l"]
+	gdb_test "break foo::$m:$l" \
+	    "Breakpoint $decimal at $hex: file .*/$srcfile, line $line\."
+    }
+}
diff --git a/gdb/testsuite/gdb.cp/cplusfuncs.cc b/gdb/testsuite/gdb.cp/cplusfuncs.cc
index 11dba06..021d7c1 100644
--- a/gdb/testsuite/gdb.cp/cplusfuncs.cc
+++ b/gdb/testsuite/gdb.cp/cplusfuncs.cc
@@ -58,18 +58,7 @@ public:
   const char *ccpfoo;
 };
 
-#ifdef usestubs
-extern "C" { 
-   void set_debug_traps();
-   void breakpoint();
-};
-#endif
-
 int main () {
-#ifdef usestubs
-   set_debug_traps();
-   breakpoint();
-#endif
    int z=3;
 }
 
diff --git a/gdb/testsuite/gdb.cp/cplusfuncs.exp b/gdb/testsuite/gdb.cp/cplusfuncs.exp
index 6aa5445..e482c82 100644
--- a/gdb/testsuite/gdb.cp/cplusfuncs.exp
+++ b/gdb/testsuite/gdb.cp/cplusfuncs.exp
@@ -17,23 +17,16 @@
 # This file was written by Fred Fish. (fnf at cygnus.com)
 # Adapted for g++ 3.0 ABI by Michael Chastain. (chastain at redhat.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if { [skip_cplus_tests] } { continue }
 
-set testfile "cplusfuncs"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if { [get_compiler_info $binfile "c++"] } {
+if { [get_compiler_info "c++"] } {
     return -1
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested cplusfuncs.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
 #
@@ -588,20 +581,10 @@ proc test_paddr_hairy_functions {} {
 }
 
 proc do_tests {} {
-    global subdir
-    global objdir
-    global srcdir
     global binfile
-    global gdb_prompt
     global dm_type_int_star
 
-
-    # Start with a fresh gdb.
-
-    gdb_exit
-    gdb_start
-    gdb_reinitialize_dir $srcdir/$subdir
-    gdb_load $binfile
+    clean_restart $binfile
 
     gdb_test_no_output "set width 0"
 
diff --git a/gdb/testsuite/gdb.cp/ctti.exp b/gdb/testsuite/gdb.cp/ctti.exp
index 46c3a1f..ff52003 100644
--- a/gdb/testsuite/gdb.cp/ctti.exp
+++ b/gdb/testsuite/gdb.cp/ctti.exp
@@ -22,56 +22,18 @@
 
 # Call to template instantiations.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if { [skip_cplus_tests] } { continue }
 
-set testfile "cttiadd"
-set srcfile  "${testfile}.cc"
-set srcfile1 "${testfile}1.cc"
-set srcfile2 "${testfile}2.cc"
-set srcfile3 "${testfile}3.cc"
-set objfile  "${testfile}.o"
-set objfile1 "${testfile}1.o"
-set objfile2 "${testfile}2.o"
-set objfile3 "${testfile}3.o"
-set binfile  "${objdir}/${subdir}/${testfile}"
-
-if { [gdb_compile "$srcdir/$subdir/$srcfile" "$objdir/$subdir/$objfile" object {debug c++}] != "" } {
-     untested ctti.exp
-     return -1
-}
-
-if { [gdb_compile "$srcdir/$subdir/$srcfile1" "$objdir/$subdir/$objfile1" object {debug c++}] != "" } {
-     untested ctti.exp
-     return -1
-}
-
-if { [gdb_compile "$srcdir/$subdir/$srcfile2" "$objdir/$subdir/$objfile2" object {debug c++}] != "" } {
-     untested ctti.exp
-     return -1
-}
-
-if { [gdb_compile "$srcdir/$subdir/$srcfile3" "$objdir/$subdir/$objfile3" object {debug c++}] != "" } {
-     untested ctti.exp
-     return -1
-}
+standard_testfile cttiadd.cc cttiadd1.cc cttiadd2.cc cttiadd3.cc
 
-if { [gdb_compile "$objdir/$subdir/$objfile $objdir/$subdir/$objfile1 $objdir/$subdir/$objfile2 $objdir/$subdir/$objfile3" "${binfile}" executable {debug c++}] != "" } {
-     untested ctti.exp
-     return -1
-}
-
-if [get_compiler_info ${binfile} "c++"] {
+if [get_compiler_info "c++"] {
     return -1;
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+if {[prepare_for_testing $testfile.exp $testfile \
+	 [list $srcfile $srcfile2 $srcfile3 $srcfile4] {debug c++}]} {
+    return -1
+}
 
 if ![runto_main] then {
     perror "couldn't run to breakpoint"
diff --git a/gdb/testsuite/gdb.cp/demangle.exp b/gdb/testsuite/gdb.cp/demangle.exp
index 14ce0b0..c6e9491 100644
--- a/gdb/testsuite/gdb.cp/demangle.exp
+++ b/gdb/testsuite/gdb.cp/demangle.exp
@@ -16,10 +16,6 @@
 
 # This file was written by Fred Fish. (fnf at cygnus.com)
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if { [skip_cplus_tests] } { continue }
 
 ### The demangling style we last sent to GDB.
diff --git a/gdb/testsuite/gdb.cp/derivation.cc b/gdb/testsuite/gdb.cp/derivation.cc
index f6d42e7..942fcd2 100644
--- a/gdb/testsuite/gdb.cp/derivation.cc
+++ b/gdb/testsuite/gdb.cp/derivation.cc
@@ -208,12 +208,6 @@ int main(void)
     F f_instance;
     G g_instance;
     
-    #ifdef usestubs
-       set_debug_traps();
-       breakpoint();
-    #endif
-    
-
     marker1(); // marker1-returns-here
     
     a_instance.a = 20; // marker1-returns-here
diff --git a/gdb/testsuite/gdb.cp/derivation.exp b/gdb/testsuite/gdb.cp/derivation.exp
index 57bf416..b752b52 100644
--- a/gdb/testsuite/gdb.cp/derivation.exp
+++ b/gdb/testsuite/gdb.cp/derivation.exp
@@ -25,10 +25,6 @@
 set ws "\[\r\n\t \]+"
 set nl "\[\r\n\]+"
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 # Start program.
 
 
@@ -36,20 +32,12 @@ if { [skip_cplus_tests] } { continue }
 
 load_lib "cp-support.exp"
 
-set testfile "derivation"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested derivation.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 # Set it up at a breakpoint so we can play with the variable values.
 
 if ![runto 'marker1'] then {
diff --git a/gdb/testsuite/gdb.cp/destrprint.exp b/gdb/testsuite/gdb.cp/destrprint.exp
index 377c785..23d7e14 100644
--- a/gdb/testsuite/gdb.cp/destrprint.exp
+++ b/gdb/testsuite/gdb.cp/destrprint.exp
@@ -13,9 +13,9 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile destrprint
-set srcfile ${testfile}.cc
-if [prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}] {
+standard_testfile .cc
+
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.cp/dispcxx.cc b/gdb/testsuite/gdb.cp/dispcxx.cc
new file mode 100644
index 0000000..2bc15e4
--- /dev/null
+++ b/gdb/testsuite/gdb.cp/dispcxx.cc
@@ -0,0 +1,39 @@
+/* Test for displays in C++.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.
+*/
+
+struct K {
+  void method () { }
+
+  int k;
+
+  K() : k(23) { }
+
+  int m2 ()
+  {
+    k += 7;			// Break here
+    return k;
+  }
+};
+
+int main() {
+  K k;
+
+  k.method();
+  return k.m2();
+}
+
diff --git a/gdb/testsuite/gdb.cp/dispcxx.exp b/gdb/testsuite/gdb.cp/dispcxx.exp
new file mode 100644
index 0000000..4174504
--- /dev/null
+++ b/gdb/testsuite/gdb.cp/dispcxx.exp
@@ -0,0 +1,39 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+if { [skip_cplus_tests] } { continue }
+
+standard_testfile .cc
+
+if [get_compiler_info "c++"] {
+    untested dispcxx.exp
+    return -1
+}
+
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
+}
+
+if ![runto_main] then {
+    perror "couldn't run to main"
+    continue
+} 
+
+gdb_breakpoint [gdb_get_line_number "Break here"]
+gdb_continue_to_breakpoint here
+
+# Regression test for
+# http://sourceware.org/bugzilla/show_bug.cgi?id=9307.
+gdb_test "display k" "1: k = 23"
diff --git a/gdb/testsuite/gdb.cp/exception.exp b/gdb/testsuite/gdb.cp/exception.exp
index 5cff73b..ae2d8b4 100644
--- a/gdb/testsuite/gdb.cp/exception.exp
+++ b/gdb/testsuite/gdb.cp/exception.exp
@@ -34,10 +34,6 @@
 set ws	"\[\r\n\t \]+"
 set nl	"\[\r\n\]+"
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if { [skip_stl_tests] } { continue }
 
 # On SPU this test fails because the executable exceeds local storage size.
@@ -45,23 +41,12 @@ if { [istarget "spu*-*-*"] } {
         return 0
 }
 
-set testfile "exception"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
  
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested exception.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
-# Start with a fresh gdb
-
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 # Set a catch catchpoint
 
 gdb_test "catch catch" "Catchpoint \[0-9\]+ \\(catch\\)" \
diff --git a/gdb/testsuite/gdb.cp/expand-psymtabs-cxx.exp b/gdb/testsuite/gdb.cp/expand-psymtabs-cxx.exp
index 226d0b8..01c56f1 100644
--- a/gdb/testsuite/gdb.cp/expand-psymtabs-cxx.exp
+++ b/gdb/testsuite/gdb.cp/expand-psymtabs-cxx.exp
@@ -16,10 +16,8 @@
 #
 # This file is part of the gdb testsuite.
 
-set testfile expand-psymtabs-cxx
-set srcfile ${testfile}.cc
-set executable ${testfile}.x
-set binfile ${objdir}/${subdir}/${executable}
+standard_testfile .cc
+set executable ${testfile}
 
 if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {debug c++} ] != "" } {
      untested ${testfile}.exp
@@ -32,6 +30,9 @@ gdb_test_no_output "set language c++"
 
 # FAIL was:
 # $1 = {<text variable, no debug info>} 0
-gdb_test "p 'method(long)'" { = {void \(long\)} 0} "before expand"
-gdb_test "p method" { = {void \(long\)} 0} "force expand"
-gdb_test "p 'method(long)'" { = {void \(long\)} 0} "after expand"
+gdb_test "p 'method(long)'" { = {void \(long\)} 0x0 <method.long.>} \
+    "before expand"
+gdb_test "p method" { = {void \(long\)} 0x0 <method.long.>} \
+    "force expand"
+gdb_test "p 'method(long)'" { = {void \(long\)} 0x0 <method.long.>} \
+    "after expand"
diff --git a/gdb/testsuite/gdb.cp/extern-c.exp b/gdb/testsuite/gdb.cp/extern-c.exp
index 70c8f93..eecccc6 100644
--- a/gdb/testsuite/gdb.cp/extern-c.exp
+++ b/gdb/testsuite/gdb.cp/extern-c.exp
@@ -17,22 +17,12 @@
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile "extern-c"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested extern-c.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
-# Start with a fresh gdb
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 runto_main
 
 if { [gdb_breakpoint "c_func"] == 1 } {
diff --git a/gdb/testsuite/gdb.cp/formatted-ref.cc b/gdb/testsuite/gdb.cp/formatted-ref.cc
index 8b63a60..b0119be 100644
--- a/gdb/testsuite/gdb.cp/formatted-ref.cc
+++ b/gdb/testsuite/gdb.cp/formatted-ref.cc
@@ -38,11 +38,6 @@ Enum1 e1 = Val11;
 int main(void) 
 {
 
-  #ifdef usestubs
-     set_debug_traps();
-     breakpoint();
-  #endif
-
   f1 (s1, e1, i1);
 
 }
diff --git a/gdb/testsuite/gdb.cp/formatted-ref.exp b/gdb/testsuite/gdb.cp/formatted-ref.exp
index 34cb7c5..4522a29 100644
--- a/gdb/testsuite/gdb.cp/formatted-ref.exp
+++ b/gdb/testsuite/gdb.cp/formatted-ref.exp
@@ -27,20 +27,13 @@
 # work properly: condition expression using a reference object as one of its
 # operand.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile "formatted-ref"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested formatted-ref.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
 proc get_address { var } {
@@ -117,11 +110,6 @@ proc test_p_op1_equals_op2 {op1 op2} {
     gdb_test $test "\\$\[0-9\]+ = true"
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 runto ${srcfile}:[gdb_get_line_number "marker here"]
 
 set s1_address  [get_address "s1"]
diff --git a/gdb/testsuite/gdb.cp/fpointer.exp b/gdb/testsuite/gdb.cp/fpointer.exp
index 48e6aad..6f8c09f 100644
--- a/gdb/testsuite/gdb.cp/fpointer.exp
+++ b/gdb/testsuite/gdb.cp/fpointer.exp
@@ -16,8 +16,8 @@
 # This tests for evaluation of functions in the form of
 # complex expressions.
 
-set testfile fpointer
-set srcfile ${testfile}.cc
+standard_testfile .cc
+
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug c++}] } {
      return -1
 }
diff --git a/gdb/testsuite/gdb.cp/gdb1355.exp b/gdb/testsuite/gdb.cp/gdb1355.exp
index f584279..20726dd 100644
--- a/gdb/testsuite/gdb.cp/gdb1355.exp
+++ b/gdb/testsuite/gdb.cp/gdb1355.exp
@@ -21,34 +21,22 @@
 set ws "\[\r\n\t \]*"
 set nl "\[\r\n\]+"
 
-if $tracelevel then {
-    strace $tracelevel
-    }
-
 if { [skip_cplus_tests] } { continue }
 
 #
 # test running programs
 #
 
-set testfile "gdb1355"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested gdb1355.exp
-     return -1
+if [get_compiler_info "c++"] {
+    return -1
 }
 
-if [get_compiler_info ${binfile} "c++"] {
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto_main] then {
     perror "couldn't run to main"
     continue
diff --git a/gdb/testsuite/gdb.cp/gdb2384.exp b/gdb/testsuite/gdb.cp/gdb2384.exp
index 0ee27c4..cc3d07f 100644
--- a/gdb/testsuite/gdb.cp/gdb2384.exp
+++ b/gdb/testsuite/gdb.cp/gdb2384.exp
@@ -21,37 +21,26 @@
 #
 # PR c++/9489.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if { [skip_cplus_tests] } { continue }
 if { [skip_shlib_tests] } { continue }
 
-set testfile "gdb2384"
-set srcfile ${testfile}.cc
-set binfile $objdir/$subdir/$testfile
+standard_testfile .cc gdb2384-base.cc
 
-set libfile "gdb2384-base"
-set libsrcfile ${libfile}.cc
-set sofile $objdir/$subdir/${libfile}.so
+set sofile [standard_output_file gdb2384-base.so]
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile} "c++"] {
+if [get_compiler_info "c++"] {
     return -1
 }
 
-if { [gdb_compile_shlib $srcdir/$subdir/$libsrcfile $sofile {debug c++}] != ""
+if { [gdb_compile_shlib $srcdir/$subdir/$srcfile2 $sofile {debug c++}] != ""
      || [gdb_compile $srcdir/$subdir/$srcfile $binfile executable [list debug "c++" shlib=${sofile}]] != ""} {
     untested gdb2384.exp
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 gdb_load_shlibs ${sofile}
 
 
diff --git a/gdb/testsuite/gdb.cp/gdb2495.exp b/gdb/testsuite/gdb.cp/gdb2495.exp
index 5dbc226..deef927 100644
--- a/gdb/testsuite/gdb.cp/gdb2495.exp
+++ b/gdb/testsuite/gdb.cp/gdb2495.exp
@@ -31,10 +31,6 @@
 
 # This test is largely based of gdb.base/callfuncs.exp.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if { [skip_cplus_tests] } { continue }
 
 if [target_info exists gdb,nosignals] {
@@ -47,21 +43,14 @@ if { [istarget "spu*-*-*"] } {
         return 0
 }
 
-set testfile "gdb2495"
-set srcfile ${testfile}.cc
-set binfile $objdir/$subdir/$testfile
+standard_testfile .cc
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile} "c++"] {
+if [get_compiler_info "c++"] {
     return -1
 }
 
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested gdb2495.exp
-     return -1
-}
-
 # Some targets can't do function calls, so don't even bother with this
 # test.
 if [target_info exists gdb,cannot_call_functions] {
@@ -70,10 +59,9 @@ if [target_info exists gdb,cannot_call_functions] {
     continue
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
+}
 
 if ![runto_main] then {
     perror "couldn't run to main"
diff --git a/gdb/testsuite/gdb.cp/hang.exp b/gdb/testsuite/gdb.cp/hang.exp
index 2025a20..d10d249 100644
--- a/gdb/testsuite/gdb.cp/hang.exp
+++ b/gdb/testsuite/gdb.cp/hang.exp
@@ -13,35 +13,16 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile hang
-set binfile ${objdir}/${subdir}/${testfile}
-
-foreach file {hang1 hang2 hang3} {
-    if {[gdb_compile "${srcdir}/${subdir}/${file}.cc" "${file}.o" object {c++ debug}] != ""} {
-        untested hang.exp
-        return -1
-    }
-}
+standard_testfile hang1.cc hang2.cc hang3.cc
 
-if {[gdb_compile "hang1.o hang2.o hang3.o" ${binfile} executable {c++ debug}] != "" } {
-     untested hang.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile \
+	 [list $srcfile $srcfile2 $srcfile3] {debug c++}]} {
+    return -1
 }
 
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
-
 # As of May 1, 2002, GDB hangs trying to read the debug info for the
 # `hang2.o' compilation unit from the executable `hang', when compiled
 # by g++ 2.96 with STABS debugging info.  Here's what's going on, as
diff --git a/gdb/testsuite/gdb.cp/infcall-dlopen.exp b/gdb/testsuite/gdb.cp/infcall-dlopen.exp
index e2abde8..4a2c009 100644
--- a/gdb/testsuite/gdb.cp/infcall-dlopen.exp
+++ b/gdb/testsuite/gdb.cp/infcall-dlopen.exp
@@ -17,21 +17,17 @@ if {[skip_shlib_tests]} {
     return 0
 }
 
-if [get_compiler_info not-used] {
+if [get_compiler_info] {
     return -1
 }
 
-set testfile "infcall-dlopen"
-set srcmainfile ${testfile}.cc
-set srclibfile ${testfile}-lib.cc
-set executable ${testfile}
-set libfile ${objdir}/${subdir}/${executable}.so
-set binfile ${objdir}/${subdir}/${executable}
-set lib_dlopen [shlib_target_file ${executable}.so]
+standard_testfile .cc infcall-dlopen-lib.cc
+set libfile [standard_output_file ${testfile}.so]
+set lib_dlopen [shlib_target_file ${testfile}.so]
 
 # Use completely arbitrary file for $libfile source.
-if { [gdb_compile_shlib ${srcdir}/${subdir}/${srclibfile} ${libfile} {debug c++}] != ""
-     || [prepare_for_testing ${testfile}.exp ${executable} ${srcmainfile} {debug c++ shlib_load}] } {
+if { [gdb_compile_shlib ${srcdir}/${subdir}/${srcfile2} ${libfile} {debug c++}] != ""
+     || [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug c++ shlib_load}] } {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.cp/inherit.exp b/gdb/testsuite/gdb.cp/inherit.exp
index c970d03..fc5f2e2 100644
--- a/gdb/testsuite/gdb.cp/inherit.exp
+++ b/gdb/testsuite/gdb.cp/inherit.exp
@@ -21,21 +21,14 @@ set ws  "\[\r\n\t \]+"
 set nl  "\[\r\n\]+"
 set vhn "\\$\[0-9\]+"
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if { [skip_cplus_tests] } { continue }
 
 load_lib "cp-support.exp"
 
-set testfile "inherit"
-set srcfile misc.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile misc.cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested inherit.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
 # Single inheritance, print type definitions.
@@ -325,25 +318,11 @@ proc test_print_mi_members {} {
 
     # Print all members of g_D.
     #
-    # g_D.A::a and g_D.A::x are ambiguous member accesses, and gdb
-    # should detect these.  There are no ways to PASS these tests
-    # because I don't know what the gdb message will be.  -- chastain
-    # 2004-01-27.
-
-    set name "print g_D.A::a"
-    gdb_test_multiple "print g_D.A::a" $name {
-	-re "$vhn = (15|11)$nl$gdb_prompt $" {
-	    kfail "gdb/68" "print g_D.A::a"
-	}
-    }
-
-    set name "print g_D.A::x"
-    gdb_test_multiple "print g_D.A::x" $name {
-	-re "$vhn = (16|12)$nl$gdb_prompt $" {
-	    kfail "gdb/68" "print g_D.A::x"
-	}
-    }
-
+    # g_D.A::a and g_D.A::x are ambiguous member accesses.
+    gdb_test "print g_D.A::a" "base class 'A' is ambiguous in type 'D'"
+    gdb_test "print g_D.C::a" "$vhn = 15"
+    gdb_test "print g_D.B::a" "$vhn = 11"
+    gdb_test "print g_D.A::x" "base class 'A' is ambiguous in type 'D'"
     gdb_test "print g_D.B::b" "$vhn = 13"
     gdb_test "print g_D.B::x" "$vhn = 14"
     gdb_test "print g_D.C::c" "$vhn = 17"
@@ -354,20 +333,8 @@ proc test_print_mi_members {} {
     # Print all members of g_E.
     # g_E.A::a and g_E.A::x are ambiguous.
 
-    set name "print g_E.A::a"
-    gdb_test_multiple "print g_E.A::a" $name {
-	-re "$vhn = (21|25)$nl$gdb_prompt $" {
-	    kfail "gdb/68" "print g_E.A::a"
-	}
-    }
-
-    set name "print g_E.A::x"
-    gdb_test_multiple "print g_E.A::x" $name {
-	-re "$vhn = (26|22)$nl$gdb_prompt $" {
-	    kfail "gdb/68" "print g_E.A::x"
-	}
-    }
-
+    gdb_test "print g_E.A::a" "base class 'A' is ambiguous in type 'E'"
+    gdb_test "print g_E.A::x" "base class 'A' is ambiguous in type 'E'"
     gdb_test "print g_E.B::b" "$vhn = 23"
     gdb_test "print g_E.B::x" "$vhn = 24"
     gdb_test "print g_E.C::c" "$vhn = 27"
@@ -410,25 +377,10 @@ proc test_print_mi_member_types {} {
 
     # Print all members of g_D.
     #
-    # g_D.A::a and g_D.A::x are ambiguous member accesses, and gdb
-    # should detect these.  There are no ways to PASS these tests
-    # because I don't know what the gdb message will be.  -- chastain
-    # 2004-01-27.
-
-    set name "ptype g_D.A::a"
-    gdb_test_multiple "ptype g_D.A::a" $name {
-	-re "type = int$nl$gdb_prompt $" {
-	    kfail "gdb/68" "ptype g_D.A::a"
-	}
-    }
-
-    set name "ptype g_D.A::x"
-    gdb_test_multiple "ptype g_D.A::x" $name {
-	-re "type = int$nl$gdb_prompt $" {
-	    kfail "gdb/68" "ptype g_D.A::x"
-	}
-    }
+    # g_D.A::a and g_D.A::x are ambiguous member accesses.
 
+    gdb_test "ptype g_D.A::a" "base class 'A' is ambiguous in type 'D'"
+    gdb_test "ptype g_D.A::x" "base class 'A' is ambiguous in type 'D'"
     gdb_test "ptype g_D.B::b" "type = int"
     gdb_test "ptype g_D.B::x" "type = int"
     gdb_test "ptype g_D.C::c" "type = int"
@@ -439,20 +391,8 @@ proc test_print_mi_member_types {} {
     # Print all members of g_E.
     # g_E.A::a and g_E.A::x are ambiguous.
 
-    set name "ptype g_E.A::a"
-    gdb_test_multiple "ptype g_E.A::a" $name {
-	-re "type = int$nl$gdb_prompt $" {
-	    kfail "gdb/68" "ptype g_E.A::a"
-	}
-    }
-
-    set name "ptype g_E.A::x"
-    gdb_test_multiple "ptype g_E.A::x" $name {
-	-re "type = int$nl$gdb_prompt $" {
-	    kfail "gdb/68" "ptype g_E.A::x"
-	}
-    }
-
+    gdb_test "ptype g_E.A::a" "base class 'A' is ambiguous in type 'E'"
+    gdb_test "ptype g_E.A::x" "base class 'A' is ambiguous in type 'E'"
     gdb_test "ptype g_E.B::b" "type = int"
     gdb_test "ptype g_E.B::x" "type = int"
     gdb_test "ptype g_E.C::c" "type = int"
@@ -674,7 +614,7 @@ proc test_print_mvi_classes { } {
 	    # gcc 2.95.3 -gstabs+
 	    pass $name
 	}
-	-re "$vhn = \{<vB> = \{<vA> = \{va = 19, vx = 20\}, $re_vbptr_3_vB = $hex, vb = 21, vx = 22\}, <vC> = \{$re_vbptr_3_vC = $hex, vc = 23, vx = 24\}, $re_vbptr_3_vD = $hex, vd = 25, vx = 26\}$nl$gdb_prompt $" {
+	-re "$vhn = \{<vB> = \{<vA> = \{va = 19, vx = 20\}, $re_vbptr_3_vB = ${hex}( <vtable for vD.*>)?, vb = 21, vx = 22\}, <vC> = \{$re_vbptr_3_vC = ${hex}( <vtable for vC.*>)?, vc = 23, vx = 24\}, $re_vbptr_3_vD = ${hex}( <vtable for vD.*>)?, vd = 25, vx = 26\}$nl$gdb_prompt $" {
 	    # gcc 3.3.2 -gdwarf-2
 	    # gcc HEAD 2004-01-21 -gdwarf-2
 	    # gcc HEAD 2004-01-21 -gstabs+
@@ -695,7 +635,7 @@ proc test_print_mvi_classes { } {
 	    # gcc 2.95.3 -gstabs+
 	    pass $name
 	}
-	-re "$vhn = \{<vD> = \{<vB> = \{<vA> = \{va = 0, vx = 0\}, $re_vbptr_3_vB = $hex, vb = 0, vx = 0\}, <vC> = \{$re_vbptr_3_vC = $hex, vc = 0, vx = 0\}, $re_vbptr_3_vD = $hex, vd = 0, vx = 0\}, $re_vbptr_3_vE = $hex, ve = 27, vx = 28\}$nl$gdb_prompt $" {
+	-re "$vhn = \{<vD> = \{<vB> = \{<vA> = \{va = 0, vx = 0\}, $re_vbptr_3_vB = ${hex}( <vtable for vE.*>)?, vb = 0, vx = 0\}, <vC> = \{$re_vbptr_3_vC = ${hex}( <vtable for vE.*>)?, vc = 0, vx = 0\}, $re_vbptr_3_vD = ${hex}( <vtable for vE.*>)?, vd = 0, vx = 0\}, $re_vbptr_3_vE = ${hex}( <vtable for vE.*>)?, ve = 27, vx = 28\}$nl$gdb_prompt $" {
 	    # gcc 3.3.4 -gdwarf-2
 	    # gcc 3.3.4 -gstabs+
 	    # gcc 3.4.1 -gdwarf-2
@@ -715,19 +655,6 @@ proc test_print_mvi_classes { } {
 }
 
 proc do_tests { } {
-    global subdir
-    global objdir
-    global srcdir
-    global binfile
-
-
-    # Start with a fresh gdb.
-
-    gdb_exit
-    gdb_start
-    gdb_reinitialize_dir $srcdir/$subdir
-    gdb_load $binfile
-
     gdb_test_no_output "set width 0"
 
     if { ![runto_main] } then {
diff --git a/gdb/testsuite/gdb.cp/koenig.exp b/gdb/testsuite/gdb.cp/koenig.exp
index 100a32a..ee6634e 100644
--- a/gdb/testsuite/gdb.cp/koenig.exp
+++ b/gdb/testsuite/gdb.cp/koenig.exp
@@ -13,8 +13,8 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile koenig
-set srcfile ${testfile}.cc
+standard_testfile .cc
+
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug c++}] } {
      return -1
 }
diff --git a/gdb/testsuite/gdb.cp/local.exp b/gdb/testsuite/gdb.cp/local.exp
index ce28283..4767fa1 100644
--- a/gdb/testsuite/gdb.cp/local.exp
+++ b/gdb/testsuite/gdb.cp/local.exp
@@ -23,34 +23,21 @@
 set ws "\[\r\n\t \]+"
 set nl "\[\r\n\]+"
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 #
 # test running programs
 #
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile "local"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
-
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested local.exp
-     return -1
-}
+standard_testfile .cc
 
-if [get_compiler_info $binfile "c++"] {
+if [get_compiler_info "c++"] {
   return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
+}
 
 #
 # set it up at a breakpoint so we can play with the variable values
diff --git a/gdb/testsuite/gdb.cp/m-data.exp b/gdb/testsuite/gdb.cp/m-data.exp
index 71620a2..a636596 100644
--- a/gdb/testsuite/gdb.cp/m-data.exp
+++ b/gdb/testsuite/gdb.cp/m-data.exp
@@ -18,35 +18,22 @@
 
 # This file is part of the gdb testsuite
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 if { [skip_cplus_tests] } { continue }
 
 #
 # test running programs
 #
 
-set testfile "m-data"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested m-data.exp
-     return -1
+if [get_compiler_info "c++"] {
+    return -1
 }
 
-if [get_compiler_info ${binfile} "c++"] {
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint"
     continue
diff --git a/gdb/testsuite/gdb.cp/m-static.cc b/gdb/testsuite/gdb.cp/m-static.cc
index 7f997ef..e9dce18 100644
--- a/gdb/testsuite/gdb.cp/m-static.cc
+++ b/gdb/testsuite/gdb.cp/m-static.cc
@@ -2,6 +2,8 @@
 
 enum region { oriental, egyptian, greek, etruscan, roman };
 
+void keepalive(bool *var) { }
+
 // Test one.
 class gnu_obj_1
 {
@@ -19,6 +21,7 @@ public:
   long method ()
   {
     static bool svar = true;
+    keepalive (&svar);
     return key2;
   }
 };
diff --git a/gdb/testsuite/gdb.cp/m-static.exp b/gdb/testsuite/gdb.cp/m-static.exp
index 0b8f290..0ac1d2e 100644
--- a/gdb/testsuite/gdb.cp/m-static.exp
+++ b/gdb/testsuite/gdb.cp/m-static.exp
@@ -19,47 +19,23 @@
 
 # This file is part of the gdb testsuite
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 if { [skip_cplus_tests] } { continue }
 
 #
 # test running programs
 #
 
-set testfile "m-static"
-set srcfile  "${testfile}.cc"
-set srcfile1 "${testfile}1.cc"
-set objfile  "${testfile}.o"
-set objfile1 "${testfile}1.o"
-set binfile  "${objdir}/${subdir}/${testfile}"
-
-if  { [gdb_compile "$srcdir/$subdir/$srcfile" "$objdir/$subdir/$objfile" object {debug c++}] != "" } {
-     untested m-static.exp
-     return -1
-}
-
-if  { [gdb_compile "$srcdir/$subdir/$srcfile1" "$objdir/$subdir/$objfile1" object {debug c++}] != "" } {
-     untested m-static.exp
-     return -1
-}
+standard_testfile .cc m-static1.cc
 
-if { [gdb_compile "$objdir/$subdir/$objfile $objdir/$subdir/$objfile1" "${binfile}" executable {debug c++}] != "" } {
-     untested m-static.exp
-     return -1
+if [get_compiler_info] {
+    return -1
 }
 
-if [get_compiler_info $binfile] {
+if {[prepare_for_testing $testfile.exp $testfile \
+	 [list $srcfile $srcfile2] {debug c++}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint"
     continue
diff --git a/gdb/testsuite/gdb.cp/maint.exp b/gdb/testsuite/gdb.cp/maint.exp
index f576b31..768664a 100644
--- a/gdb/testsuite/gdb.cp/maint.exp
+++ b/gdb/testsuite/gdb.cp/maint.exp
@@ -18,10 +18,6 @@
 
 # Currently, no source file is used.
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 # Test the help messages.
 
 proc test_help {} {
diff --git a/gdb/testsuite/gdb.cp/mb-ctor.exp b/gdb/testsuite/gdb.cp/mb-ctor.exp
index bff7ac5..4c76535 100644
--- a/gdb/testsuite/gdb.cp/mb-ctor.exp
+++ b/gdb/testsuite/gdb.cp/mb-ctor.exp
@@ -16,31 +16,19 @@
 # Test that breakpoints on C++ constructors work, despite the
 # fact that gcc generates several versions of constructor function.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if { [skip_cplus_tests] } { continue }
 
 
-set testfile "mb-ctor"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if [get_compiler_info ${binfile} "c++"] {
+if [get_compiler_info "c++"] {
     return -1
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested mb-ctor.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint"
     continue
diff --git a/gdb/testsuite/gdb.cp/mb-inline.exp b/gdb/testsuite/gdb.cp/mb-inline.exp
index 1a29d35..d223bae 100644
--- a/gdb/testsuite/gdb.cp/mb-inline.exp
+++ b/gdb/testsuite/gdb.cp/mb-inline.exp
@@ -18,45 +18,20 @@
 # This test verifies that setting breakpoint on line in inline
 # function will fire in all instantiations of that function.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if { [skip_cplus_tests] } { continue }
 
-
-set testfile "mb-inline"
+standard_testfile mb-inline1.cc mb-inline2.cc
 set hdrfile "${testfile}.h"
-set srcfile1 "${testfile}1.cc"
-set objfile1 "${testfile}1.o"
-set srcfile2 "${testfile}2.cc"
-set objfile2 "${testfile}2.o"
-set binfile  "${objdir}/${subdir}/${testfile}"
-
-if  { [gdb_compile "$srcdir/$subdir/$srcfile1" "$objdir/$subdir/$objfile1" object {debug c++}] != "" } {
-     untested mb-inline.exp
-     return -1
-}
 
-if  { [gdb_compile "$srcdir/$subdir/$srcfile2" "$objdir/$subdir/$objfile2" object {debug c++}] != "" } {
-     untested mb-inline.exp
-     return -1
-}
-
-if  { [gdb_compile "$objdir/$subdir/$objfile1 $objdir/$subdir/$objfile2" "${binfile}" executable {debug c++}] != "" } {
-     untested mb-inline.exp
-     return -1
+if [get_compiler_info "c++"] {
+    return -1
 }
 
-if [get_compiler_info ${binfile} "c++"] {
+if {[prepare_for_testing $testfile.exp $testfile \
+	 [list $srcfile $srcfile2] {debug c++}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 set bp_location [gdb_get_line_number "set breakpoint here" $hdrfile]
 
 # Set a breakpoint with multiple locations.
diff --git a/gdb/testsuite/gdb.cp/mb-templates.exp b/gdb/testsuite/gdb.cp/mb-templates.exp
index dfb25cc..8aab415 100644
--- a/gdb/testsuite/gdb.cp/mb-templates.exp
+++ b/gdb/testsuite/gdb.cp/mb-templates.exp
@@ -16,10 +16,6 @@
 # This test verifies that setting breakpoint on line in template
 # function will fire in all instantiations of that template.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if { [skip_stl_tests] } { continue }
 
 # On SPU this test fails because the executable exceeds local storage size.
@@ -28,24 +24,16 @@ if { [istarget "spu*-*-*"] } {
 }
 
 
-set testfile "mb-templates"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if [get_compiler_info ${binfile} "c++"] {
+if [get_compiler_info "c++"] {
     return -1
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested mb-templates.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 set bp_location [gdb_get_line_number "set breakpoint here"]
 
 # Set a breakpoint with multiple locations
@@ -56,15 +44,12 @@ gdb_test "break $srcfile:$bp_location if i==1" \
     "initial condition: set breakpoint"
 
 gdb_run_cmd
-gdb_expect {
+
+set test "initial condition: run to breakpoint"
+gdb_test_multiple "" $test {
     -re "Breakpoint \[0-9\]+,.*foo<int> \\(i=1\\).*$gdb_prompt $" {
-	pass "initial condition: run to breakpoint"
-    }
-    -re "$gdb_prompt $" {
-	fail "initial condition: run to breakpoint"
-    }
-    timeout {
-	fail "initial condition: run to breakpoint (timeout)"
+	pass $test
+	break
     }
 }
 
@@ -74,16 +59,16 @@ gdb_test "continue" \
 
 # Set breakpoint with multiple locations.
 # Separately set the condition.
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+
+delete_breakpoints
+gdb_test "kill" "" "kill" \
+         {Kill the program being debugged\? \(y or n\) } "y"
 
 gdb_test "break $srcfile:$bp_location" \
     "Breakpoint.*at.*: $srcfile:$bp_location. \\(2 locations\\).*" \
     "separate condition: set breakpoint"
 
-gdb_test_no_output "condition 1 i==1" \
+gdb_test_no_output {condition $bpnum i==1} \
     "separate condition: set condition"
     
 gdb_run_cmd
@@ -106,7 +91,7 @@ gdb_test "continue" \
 # Try disabling a single location. We also test
 # that at least in simple cases, the enable/disable
 # state of locations surive "run".
-gdb_test_no_output "disable 1.1" "disabling location: disable"
+gdb_test_no_output {disable $bpnum.1} "disabling location: disable"
 
 gdb_run_cmd
 gdb_expect {
@@ -122,10 +107,10 @@ gdb_expect {
 }
 
 # Try disabling entire breakpoint
-gdb_test_no_output "enable 1.1" "disabling location: enable"
+gdb_test_no_output {enable $bpnum.1} "disabling location: enable"
 
 
-gdb_test_no_output "disable 1" "disable breakpoint: disable"
+gdb_test_no_output {disable $bpnum} "disable breakpoint: disable"
 
 gdb_run_cmd
 gdb_expect {
diff --git a/gdb/testsuite/gdb.cp/member-ptr.exp b/gdb/testsuite/gdb.cp/member-ptr.exp
index 4b9a37d..f569ca9 100644
--- a/gdb/testsuite/gdb.cp/member-ptr.exp
+++ b/gdb/testsuite/gdb.cp/member-ptr.exp
@@ -22,31 +22,19 @@
 
 set vhn "\\$\[0-9\]+"
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if { [skip_cplus_tests] } { continue }
 
 
-set testfile "member-ptr"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if [get_compiler_info ${binfile} "c++"] {
+if [get_compiler_info "c++"] {
     return -1
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested member-ptr.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint"
     continue
@@ -261,7 +249,7 @@ gdb_test_multiple "print a" $name {
     -re "$vhn = \{c = 120 'x', j = 33, jj = 1331, (static|static int) s = 10, Virtual table at $hex\}\r\n$gdb_prompt $" {
 	pass $name
     }
-    -re "$vhn = \{(_vptr.A|_vptr\\$) = $hex, c = 120 'x', j = 33, jj = 1331, (static|static int) s = 10\}\r\n$gdb_prompt $" {
+    -re "$vhn = \{(_vptr.A|_vptr\\$) = ${hex}( <vtable for A.*>)?, c = 120 'x', j = 33, jj = 1331, (static|static int) s = 10\}\r\n$gdb_prompt $" {
 	pass $name
     }
     -re "$vhn = \{(_vptr.A|_vptr\\$) = $hex, c = 120 'x', j = 121, jj = 1331, (static|static int) s = 10\}\r\n$gdb_prompt $" {
@@ -309,7 +297,7 @@ gdb_test_multiple "print a" $name {
     -re "$vhn = \{c = 120 'x', j = 44, jj = 1331, (static|static int) s = 10, Virtual table at $hex\}\r\n$gdb_prompt $" {
 	pass $name
     }
-    -re "$vhn = \{(_vptr.A|_vptr\\$) = $hex, c = 120 'x', j = 44, jj = 1331, (static|static int) s = 10\}\r\n$gdb_prompt $" {
+    -re "$vhn = \{(_vptr.A|_vptr\\$) = ${hex}( <vtable for A.*>), c = 120 'x', j = 44, jj = 1331, (static|static int) s = 10\}\r\n$gdb_prompt $" {
 	pass $name
     }
     -re "$vhn = \{(_vptr.A|_vptr\\$) = $hex, c = 120 'x', j = 121, jj = 1331, (static|static int) s = 10\}\r\n$gdb_prompt $" {
diff --git a/gdb/testsuite/gdb.cp/meth-typedefs.exp b/gdb/testsuite/gdb.cp/meth-typedefs.exp
index 73ffa1b..b27d124 100644
--- a/gdb/testsuite/gdb.cp/meth-typedefs.exp
+++ b/gdb/testsuite/gdb.cp/meth-typedefs.exp
@@ -33,8 +33,7 @@ proc add {var name params expected {kind {func}}} {
 if {[skip_cplus_tests]} { continue }
 
 # Tests for c++/12266 et al
-set testfile "meth-typedefs"
-set srcfile $testfile.cc
+standard_testfile .cc
 
 if {[prepare_for_testing $testfile $testfile $srcfile {c++ debug}]} {
     return -1
diff --git a/gdb/testsuite/gdb.cp/method.exp b/gdb/testsuite/gdb.cp/method.exp
index 3fe24c3..193a253 100644
--- a/gdb/testsuite/gdb.cp/method.exp
+++ b/gdb/testsuite/gdb.cp/method.exp
@@ -29,34 +29,21 @@
 # integrate FPARAM symbols in HP debug info into the local var list
 # for the function or method's block.)
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 #
 # test running programs
 #
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile "method"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
-
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested method.exp
-     return -1
-}
+standard_testfile .cc
 
-if [get_compiler_info $binfile "c++"] {
+if [get_compiler_info "c++"] {
   return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
+}
 
 #
 # set it up at a breakpoint so we can play with the variable values
diff --git a/gdb/testsuite/gdb.cp/method2.exp b/gdb/testsuite/gdb.cp/method2.exp
index f44381f..34c874a 100644
--- a/gdb/testsuite/gdb.cp/method2.exp
+++ b/gdb/testsuite/gdb.cp/method2.exp
@@ -20,25 +20,14 @@
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile "method2"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
+if  {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
      untested method2.exp
      return -1
 }
 
-if [get_compiler_info $binfile "c++"] {
-  return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
-if ![runto_main] then {
+if {![runto_main]} {
     perror "couldn't run to breakpoint"
     continue
 }
@@ -50,8 +39,21 @@ proc test_break { lang } {
 	"" \
 	"setting language $lang"
 
+    # Menu items should be alphabetical
+    set ovlds [lsort {"" "int" "A*"}]
+    set items {"cancel" "all"}
+    foreach ovld $ovlds {
+        lappend items "A::method($ovld)"
+    }
+    set menu_items {}
+    set idx 0
+    foreach item $items {
+        lappend menu_items ".$idx. .*[string_to_regexp $item]"
+        incr idx
+    }
+    set expect [join $menu_items {.*[\r\n]*}]
     gdb_test_multiple "break A::method" "breaking in method ($lang)" {
-	-re ".0. cancel.*\[\r\n\]*.1. all.*\[\r\n\]*.2. .*:A::method\\(A\\*\\)\[\r\n\]*.3. .*:A::method\\(int\\)\[\r\n\]*.4. .*:A::method\\(\\)\[\r\n\]*> $" {
+        -re $expect {
 	    gdb_test "0" \
 		"canceled" \
 		"breaking in method ($lang)"
diff --git a/gdb/testsuite/gdb.cp/minsym-fallback.exp b/gdb/testsuite/gdb.cp/minsym-fallback.exp
index 5a2ac6d..6f2f50f 100644
--- a/gdb/testsuite/gdb.cp/minsym-fallback.exp
+++ b/gdb/testsuite/gdb.cp/minsym-fallback.exp
@@ -17,15 +17,13 @@
 # only a declaration there for the method.  The method is then defined in
 # a different file providing only ELF symbols.
 
-set testfile minsym-fallback
-set srcfile ${testfile}.cc
-set srcmainfile ${testfile}-main.cc
+standard_testfile .cc minsym-fallback-main.cc
 set executable $testfile
-set objfile $objdir/$subdir/${testfile}.o
-set objmainfile $objdir/$subdir/${testfile}-main.o
-set binfile $objdir/$subdir/$executable
+set objfile [standard_output_file ${testfile}.o]
+set objmainfile [standard_output_file ${testfile}-main.o]
+
 if {[gdb_compile $srcdir/$subdir/$srcfile $objfile object {}] != ""
-    || [gdb_compile $srcdir/$subdir/$srcmainfile $objmainfile object {debug}] != ""
+    || [gdb_compile $srcdir/$subdir/$srcfile2 $objmainfile object {debug}] != ""
     || [gdb_compile "$objfile $objmainfile" $binfile executable {c++}] != ""} {
     untested ${testfile}.exp
     return -1
diff --git a/gdb/testsuite/gdb.cp/misc.cc b/gdb/testsuite/gdb.cp/misc.cc
index 9a26f36..2920078 100644
--- a/gdb/testsuite/gdb.cp/misc.cc
+++ b/gdb/testsuite/gdb.cp/misc.cc
@@ -568,10 +568,6 @@ void use_methods ()
 int
 main()
 {
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
   dummy();
   inheritance1 ();
   inheritance3 ();
diff --git a/gdb/testsuite/gdb.cp/misc.exp b/gdb/testsuite/gdb.cp/misc.exp
index 6e7bf11..9d1ed0e 100644
--- a/gdb/testsuite/gdb.cp/misc.exp
+++ b/gdb/testsuite/gdb.cp/misc.exp
@@ -16,18 +16,12 @@
 
 # This file was written by Fred Fish. (fnf at cygnus.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if { [skip_cplus_tests] } { continue }
 
-set testfile "misc"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested misc.exp
-     return -1
+standard_testfile .cc
+
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
 #
@@ -70,20 +64,6 @@ proc test_expr { args } {
 }
 
 proc do_tests {} {
-    global subdir
-    global objdir
-    global srcdir
-    global binfile
-    global gdb_prompt
-
-
-    # Start with a fresh gdb.
-
-    gdb_exit
-    gdb_start
-    gdb_reinitialize_dir $srcdir/$subdir
-    gdb_load $binfile
-
     deduce_language_of_main
     # Check for fixes for PRs 8916 and 8630
     gdb_test "print s.a" ".* = 0" "print s.a for foo struct (known gcc 2.7.2 and earlier bug)"
diff --git a/gdb/testsuite/gdb.cp/namespace-enum.exp b/gdb/testsuite/gdb.cp/namespace-enum.exp
index 9847a1d..c293dbd 100644
--- a/gdb/testsuite/gdb.cp/namespace-enum.exp
+++ b/gdb/testsuite/gdb.cp/namespace-enum.exp
@@ -13,30 +13,13 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile namespace-enum
-set srcfile0 ${testfile}.cc
-set objfile0 ${testfile}.o
-set srcfile1 ${testfile}-main.cc
-set objfile1 ${testfile}-main.o
-set executable ${testfile}
-set binfile ${objdir}/${subdir}/${executable}
+standard_testfile .cc namespace-enum-main.cc
 
-if  { [gdb_compile "$srcdir/$subdir/$srcfile0" "$objdir/$subdir/$objfile0" object {debug c++}] != "" } {
-     untested namespace-enum.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile \
+	 [list $srcfile $srcfile2] {debug c++}]} {
+    return -1
 }
 
-if  { [gdb_compile "$srcdir/$subdir/$srcfile1" "$objdir/$subdir/$objfile1" object {debug c++}] != "" } {
-     untested namespace-enum.exp
-     return -1
-}
-
-if  { [gdb_compile "$objdir/$subdir/$objfile0 $objdir/$subdir/$objfile1" "${binfile}" executable {debug c++}] != "" } {
-     untested namespace-enum.exp
-     return -1
-}
-
-clean_restart ${executable}
 gdb_test "print foo::B::B_B" "`foo::B' is not defined as an aggregate type."
 gdb_test "print foo::B_B" "foo::B_B"
 gdb_test "print A_A" "A_A"
diff --git a/gdb/testsuite/gdb.cp/namespace-nested-import.exp b/gdb/testsuite/gdb.cp/namespace-nested-import.exp
index f0a934b..24507ce 100644
--- a/gdb/testsuite/gdb.cp/namespace-nested-import.exp
+++ b/gdb/testsuite/gdb.cp/namespace-nested-import.exp
@@ -13,26 +13,13 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
 
+standard_testfile .cc
 
-set testfile namespace-nested-import
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-    untested "Couldn't compile test program"
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-# Get things started.
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 ############################################
 # Test printing of a variable from a nested
 # in a namespace inner to the one which has
diff --git a/gdb/testsuite/gdb.cp/namespace.exp b/gdb/testsuite/gdb.cp/namespace.exp
index e0789de..fefd796 100644
--- a/gdb/testsuite/gdb.cp/namespace.exp
+++ b/gdb/testsuite/gdb.cp/namespace.exp
@@ -25,21 +25,12 @@
 # Note: As of 2000-06-03, they passed under g++ - djb
 
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile "namespace"
-set srcfile ${testfile}.cc
-set objfile ${objdir}/${subdir}/${testfile}.o
-set srcfile1 ${testfile}1.cc
-set objfile1 ${objdir}/${subdir}/${testfile}1.o
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc namespace1.cc
 
-if [get_compiler_info ${binfile} c++] {
+if [get_compiler_info c++] {
     return -1;
 }
 
@@ -50,26 +41,12 @@ if {[test_compiler_info {gcc-[0-3]-*}]
     set xfail_class_types 1
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug c++}] != "" } {
-     untested namespace.exp
-     return -1
-}
-
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${objfile1}" object {debug c++}] != "" } {
-     untested namespace.exp
-     return -1
-}
-
-if  { [gdb_compile "${objfile} ${objfile1}" "${binfile}" executable {debug c++}] != "" } {
-     untested namespace.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile \
+	 [list $srcfile $srcfile2] {debug c++}]} {
+    return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
+gdb_test "show lang" "auto; currently c\\+\\+.*"
 
 #
 # set it up at a breakpoint so we can play with the variable values
@@ -142,6 +119,11 @@ gdb_test "print AAA::xyzq('x')" \
 gdb_test "break AAA::xyzq" \
     "Breakpoint.*at $hex: file.*namespace.cc, line 47\\."
 
+# Break on a function in the global namespace.
+
+gdb_test "break ::ensureOtherRefs" \
+    "Breakpoint.*at $hex: file.*$srcfile2, line $decimal\\."
+
 # Call a function in a nested namespace
 
 gdb_test "print 'BBB::CCC::xyzq'('x')" \
@@ -157,6 +139,11 @@ gdb_test "print BBB::CCC::xyzq('x')" \
 gdb_test "break BBB::CCC::xyzq" \
     "Breakpoint.*at $hex: file.*namespace.cc, line 63\\."
 
+# Break on the same function, starting with the global namespace.
+
+gdb_test "break ::BBB::CCC::xyzq" \
+    ".*Breakpoint.*at $hex: file.*$srcfile, line 63\\."
+
 # Print address of a function in a class in a namespace
 
 gdb_test "print 'BBB::Class::xyzq'" \
diff --git a/gdb/testsuite/gdb.cp/nextoverthrow.exp b/gdb/testsuite/gdb.cp/nextoverthrow.exp
index 2224628..53f59d7 100644
--- a/gdb/testsuite/gdb.cp/nextoverthrow.exp
+++ b/gdb/testsuite/gdb.cp/nextoverthrow.exp
@@ -14,19 +14,13 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if { [skip_cplus_tests] } { continue }
 
-set testfile "nextoverthrow"
-set srcfile ${testfile}.cc
-set binfile $objdir/$subdir/$testfile
+standard_testfile .cc
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile} "c++"] {
+if [get_compiler_info "c++"] {
     untested nextoverthrow.exp
     return -1
 }
@@ -58,6 +52,17 @@ gdb_test_multiple "print _Unwind_DebugHook" "check for unwinder hook" {
     }
 }
 if {!$ok} {
+    gdb_test_multiple "info probe" "check for stap probe in unwinder" {
+	-re ".*libgcc.*unwind.*\r\n$gdb_prompt $" {
+	    pass "check for stap probe in unwinder"
+	    set ok 1
+	}
+	-re "\r\n$gdb_prompt $" {
+	}
+    }
+}
+
+if {!$ok} {
     unsupported "nextoverthrow.exp could not find _Unwind_DebugHook"
     return -1
 }
diff --git a/gdb/testsuite/gdb.cp/no-dmgl-verbose.exp b/gdb/testsuite/gdb.cp/no-dmgl-verbose.exp
index 6bf2f03..4dc181b 100644
--- a/gdb/testsuite/gdb.cp/no-dmgl-verbose.exp
+++ b/gdb/testsuite/gdb.cp/no-dmgl-verbose.exp
@@ -15,19 +15,16 @@
 
 # Test loading symbols from unrelocated C++ object files.
 
-set testfile no-dmgl-verbose
-set srcfile ${testfile}.cc
-set executable ${testfile}.o
-set binfile ${objdir}/${subdir}/${executable}
+standard_testfile .cc
 
 if { [skip_cplus_tests] } { continue }
 
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {c++ debug}] != "" } {
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}.o" object {c++ debug}] != "" } {
      untested ${testfile}.exp
      return -1
 }
 
-clean_restart ${executable}
+clean_restart ${testfile}.o
 
 gdb_test_no_output "set breakpoint pending off"
 
diff --git a/gdb/testsuite/gdb.cp/nsdecl.exp b/gdb/testsuite/gdb.cp/nsdecl.exp
index f8617d1..23698fd 100644
--- a/gdb/testsuite/gdb.cp/nsdecl.exp
+++ b/gdb/testsuite/gdb.cp/nsdecl.exp
@@ -15,29 +15,16 @@
 
 # Stress test the lookup of declarations
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
-set testfile nsdecl
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-    untested "Couldn't compile test program"
-    return -1
-}
+standard_testfile .cc
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
-# Get things started.
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
+}
 
 if ![runto_main] then {
     perror "couldn't run to breakpoint main"
diff --git a/gdb/testsuite/gdb.cp/nsimport.exp b/gdb/testsuite/gdb.cp/nsimport.exp
index deeca46..4547d26 100644
--- a/gdb/testsuite/gdb.cp/nsimport.exp
+++ b/gdb/testsuite/gdb.cp/nsimport.exp
@@ -16,26 +16,13 @@
 # Test printing from multiple namespace
 # imported into the same scope.
 
-if $tracelevel then {
-    strace $tracelevel
-}
 
+standard_testfile .cc
 
-set testfile nsimport
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-    untested "Couldn't compile test program"
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-# Get things started.
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 ############################################
 # test printing of namespace imported within
 # the function.
diff --git a/gdb/testsuite/gdb.cp/nsnested.exp b/gdb/testsuite/gdb.cp/nsnested.exp
index 420483a..766eb33 100644
--- a/gdb/testsuite/gdb.cp/nsnested.exp
+++ b/gdb/testsuite/gdb.cp/nsnested.exp
@@ -13,9 +13,8 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile nsnested
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
+
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug c++}] } {
      return -1
 }
diff --git a/gdb/testsuite/gdb.cp/nsnoimports.exp b/gdb/testsuite/gdb.cp/nsnoimports.exp
index d1ed3b3..38e4577 100644
--- a/gdb/testsuite/gdb.cp/nsnoimports.exp
+++ b/gdb/testsuite/gdb.cp/nsnoimports.exp
@@ -13,8 +13,8 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile nsnoimports
-set srcfile ${testfile}.cc
+standard_testfile .cc
+
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug c++}] } {
      return -1
 }
diff --git a/gdb/testsuite/gdb.cp/nsrecurs.exp b/gdb/testsuite/gdb.cp/nsrecurs.exp
index fa80eb4..5ea4376 100644
--- a/gdb/testsuite/gdb.cp/nsrecurs.exp
+++ b/gdb/testsuite/gdb.cp/nsrecurs.exp
@@ -13,32 +13,17 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
 
+standard_testfile .cc
 
-set testfile nsrecurs
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" \
-      "${binfile}" executable {debug c++}] != "" } {
-    untested "Couldn't compile test program"
+if [get_compiler_info] {
     return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-
-# Get things started.
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint main"
     continue
diff --git a/gdb/testsuite/gdb.cp/nsstress.exp b/gdb/testsuite/gdb.cp/nsstress.exp
index 93f310c..92ca6c7 100644
--- a/gdb/testsuite/gdb.cp/nsstress.exp
+++ b/gdb/testsuite/gdb.cp/nsstress.exp
@@ -15,30 +15,17 @@
 
 # Stress test namespace lookup
 
-if $tracelevel then {
-    strace $tracelevel
-}
 
+standard_testfile .cc
 
-set testfile nsstress
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-    untested "Couldn't compile test program"
+if [get_compiler_info] {
     return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-# Get things started.
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint main"
     continue
diff --git a/gdb/testsuite/gdb.cp/nsusing.exp b/gdb/testsuite/gdb.cp/nsusing.exp
index fd8caec..0a052a2 100644
--- a/gdb/testsuite/gdb.cp/nsusing.exp
+++ b/gdb/testsuite/gdb.cp/nsusing.exp
@@ -13,32 +13,17 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
 
+standard_testfile .cc
 
-set testfile nsusing
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable \
-      {debug c++}] != "" } {
-    untested "Couldn't compile test program"
+if [get_compiler_info] {
     return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-
-# Get things started.
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 ############################################
 # test printing of namespace imported within
 # the function.
diff --git a/gdb/testsuite/gdb.cp/operator.exp b/gdb/testsuite/gdb.cp/operator.exp
index a777567..d60af8f 100644
--- a/gdb/testsuite/gdb.cp/operator.exp
+++ b/gdb/testsuite/gdb.cp/operator.exp
@@ -13,8 +13,8 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile operator
-set srcfile ${testfile}.cc
+standard_testfile .cc
+
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug c++}] } {
     return -1
 }
diff --git a/gdb/testsuite/gdb.cp/oranking.exp b/gdb/testsuite/gdb.cp/oranking.exp
index cc72728..d2330dc 100644
--- a/gdb/testsuite/gdb.cp/oranking.exp
+++ b/gdb/testsuite/gdb.cp/oranking.exp
@@ -13,8 +13,8 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile oranking
-set srcfile ${testfile}.cc
+standard_testfile .cc
+
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug c++}] } {
      return -1
 }
diff --git a/gdb/testsuite/gdb.cp/overload-const.exp b/gdb/testsuite/gdb.cp/overload-const.exp
index 2a64356..1fec157 100644
--- a/gdb/testsuite/gdb.cp/overload-const.exp
+++ b/gdb/testsuite/gdb.cp/overload-const.exp
@@ -17,8 +17,9 @@
 
 if {[skip_cplus_tests]} { continue }
 
-set testfile "overload-const"
-if [prepare_for_testing $testfile $testfile $testfile.cc {c++ debug}] {
+standard_testfile .cc
+
+if {[prepare_for_testing $testfile $testfile $testfile.cc {c++ debug}]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.cp/overload.cc b/gdb/testsuite/gdb.cp/overload.cc
index ba082d2..ba0678f 100644
--- a/gdb/testsuite/gdb.cp/overload.cc
+++ b/gdb/testsuite/gdb.cp/overload.cc
@@ -135,11 +135,6 @@ int main ()
     N::nsoverload(2);
     N::nsoverload(2, 3);
 
-    #ifdef usestubs
-       set_debug_traps();
-       breakpoint();
-    #endif
-
     overloadNamespace (1);
     overloadNamespace (dummyInstance);
     XXX::overloadNamespace ('a');
diff --git a/gdb/testsuite/gdb.cp/overload.exp b/gdb/testsuite/gdb.cp/overload.exp
index 10bd4de..43eeabf 100644
--- a/gdb/testsuite/gdb.cp/overload.exp
+++ b/gdb/testsuite/gdb.cp/overload.exp
@@ -20,30 +20,18 @@
 
 # Tests for overloaded member functions.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 set ws "\[\r\n\t \]+"
 set nl "\[\r\n\]+"
 
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile "overload"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested overload.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 # Set it up at a breakpoint so we can play with the variable values.
 
 if ![runto 'marker1'] then {
diff --git a/gdb/testsuite/gdb.cp/ovldbreak.cc b/gdb/testsuite/gdb.cp/ovldbreak.cc
index 7aa1f2f..c3cc069 100644
--- a/gdb/testsuite/gdb.cp/ovldbreak.cc
+++ b/gdb/testsuite/gdb.cp/ovldbreak.cc
@@ -89,10 +89,6 @@ int main ()
     foo_instance1.overloadargs(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
    
 
-    #ifdef usestubs
-       set_debug_traps();
-       breakpoint();
-    #endif
 
 
     marker1();
@@ -107,18 +103,41 @@ foo::~foo ()                       {}
 
 /* Some functions to test overloading by varying one argument type. */
 
-int foo::overload1arg (void)                {  return 1; }
-int foo::overload1arg (char arg)            { arg = 0; return 2;}
-int foo::overload1arg (signed char arg)     { arg = 0; return 3;}
-int foo::overload1arg (unsigned char arg)   { arg = 0; return 4;}
-int foo::overload1arg (short arg)           { arg = 0; return 5;}
-int foo::overload1arg (unsigned short arg)  { arg = 0; return 6;}
-int foo::overload1arg (int arg)             { arg = 0; return 7;}
-int foo::overload1arg (unsigned int arg)    { arg = 0; return 8;}
-int foo::overload1arg (long arg)            { arg = 0; return 9;}
-int foo::overload1arg (unsigned long arg)   { arg = 0; return 10;}
-int foo::overload1arg (float arg)           { arg = 0; return 11;}
-int foo::overload1arg (double arg)          { arg = 0; return 12;}
+int foo::overload1arg (void)
+{ return 1; } /* fo1 void */
+
+int foo::overload1arg (char arg)
+{ arg = 0; return 2; } /* fo1 char */
+
+int foo::overload1arg (signed char arg)
+{ arg = 0; return 3; } /* fo1 signed_char */
+
+int foo::overload1arg (unsigned char arg)
+{ arg = 0; return 4; } /* fo1 unsigned_char */
+
+int foo::overload1arg (short arg)
+{ arg = 0; return 5; } /* fo1 short_int */
+
+int foo::overload1arg (unsigned short arg)
+{ arg = 0; return 6; } /* fo1 unsigned_short_int */
+
+int foo::overload1arg (int arg)
+{ arg = 0; return 7; } /* fo1 int */
+
+int foo::overload1arg (unsigned int arg)
+{ arg = 0; return 8; } /* fo1 unsigned_int */
+
+int foo::overload1arg (long arg)
+{ arg = 0; return 9; } /* fo1 long_int */
+
+int foo::overload1arg (unsigned long arg)
+{ arg = 0; return 10; } /* fo1 unsigned_long_int */
+
+int foo::overload1arg (float arg)
+{ arg = 0; return 11; } /* fo1 float */
+
+int foo::overload1arg (double arg)
+{ arg = 0; return 12; } /* fo1 double */
 
 
 /* Some functions to test overloading by varying argument count. */
diff --git a/gdb/testsuite/gdb.cp/ovldbreak.exp b/gdb/testsuite/gdb.cp/ovldbreak.exp
index f8cd42f..1aad559 100644
--- a/gdb/testsuite/gdb.cp/ovldbreak.exp
+++ b/gdb/testsuite/gdb.cp/ovldbreak.exp
@@ -25,39 +25,25 @@
 
 global timeout
 set timeout 15
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 #
 # test running programs
 #
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile "ovldbreak"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested ovldbreak.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 # set it up at a breakpoint so we can play with the variable values
 #
-if ![runto_main] then {
+if {![runto_main]} {
     perror "couldn't run to breakpoint"
     continue
 }
 
-
-
 # When I ask gdb to set a breakpoint on an overloaded function,
 # gdb gives me a choice menu.  I might get stuck in that choice menu
 # (for example, if C++ name mangling is not working properly).
@@ -124,68 +110,113 @@ proc set_bp_overloaded {name expectedmenu mychoice bpnumber linenumber} {
     }
 }
 
-# This is the expected menu for overload1arg.
+# Compute the expected menu for overload1arg.
 # Note the arg type variations for void and integer types.
 # This accommodates different versions of g++.
 
-set    menu_overload1arg "\\\[0\\\] cancel\r\n"
-append menu_overload1arg "\\\[1\\\] all\r\n"
-append menu_overload1arg "\\\[2\\\] .*$srcfile:foo::overload1arg\\(double\\)\r\n"
-append menu_overload1arg "\\\[3\\\] .*$srcfile:foo::overload1arg\\(float\\)\r\n"
-append menu_overload1arg "\\\[4\\\] .*$srcfile:foo::overload1arg\\((unsigned long|long unsigned)( int)?\\)\r\n"
-append menu_overload1arg "\\\[5\\\] .*$srcfile:foo::overload1arg\\(long( int)?\\)\r\n"
-append menu_overload1arg "\\\[6\\\] .*$srcfile:foo::overload1arg\\((unsigned int|unsigned)\\)\r\n"
-append menu_overload1arg "\\\[7\\\] .*$srcfile:foo::overload1arg\\(int\\)\r\n"
-append menu_overload1arg "\\\[8\\\] .*$srcfile:foo::overload1arg\\((unsigned short|short unsigned)( int)?\\)\r\n"
-append menu_overload1arg "\\\[9\\\] .*$srcfile:foo::overload1arg\\(short( int)?\\)\r\n"
-append menu_overload1arg "\\\[10\\\] .*$srcfile:foo::overload1arg\\(unsigned char\\)\r\n"
-append menu_overload1arg "\\\[11\\\] .*$srcfile:foo::overload1arg\\(signed char\\)\r\n"
-append menu_overload1arg "\\\[12\\\] .*$srcfile:foo::overload1arg\\(char\\)\r\n"
-append menu_overload1arg "\\\[13\\\] .*$srcfile:foo::overload1arg\\((void|)\\)\r\n"
-append menu_overload1arg "> $"
+# Probe for the real types.  This will do some unnecessary checking
+# for some simple types (like "int"), but it's just easier to loop
+# over all_types instead of calling out just the exceptions.
+# This list /must/ remain in the same order that the methods are
+# called in the source code.  Otherwise the order in which breakpoints
+# are hit (tested below) will be incorrect.
+set all_types [list void char signed_char unsigned_char short_int \
+		   unsigned_short_int int unsigned_int long_int \
+		   unsigned_long_int float double]
+
+# ARGUMENTS is an array that will map from synthetic type to argument
+# expressions in the source code, which is of the form "arg = $decimal".
+# ARGUMENTS stores this decimal number.
+array set arguments {
+    void ""
+    char 2
+    signed_char 3
+    unsigned_char 4
+    short_int 5
+    unsigned_short_int 6
+    int 7
+    unsigned_int 8
+    long_int 9
+    unsigned_long_int 10
+    float 100(.0)?
+    double 200(.0)?
+}
+
+unset -nocomplain line types
+foreach type $all_types {
+    # TYPES is an array that maps the synthetic names in ALL_TYPES
+    # to the real type used in the debugger.  These will be checked
+    # below and changed if the debugger thinks they are different from
+    # their default values.
+    set types($type) [join [split $type "_"] " "]
+
+    # LINE is an array that will map from synthetic type to line number.
+    # in the source code.
+    set line($type) [gdb_get_line_number "fo1 $type"]
+
+    # Probe for the actual type.
+    gdb_test_multiple "print &foo::overload1arg($types($type))" \
+        "probe $types($type)" {
+            -re ".*\<foo::.*\>.*$gdb_prompt $" {
+	        regexp {<.*>} $expect_out(0,string) func
+	        regexp {\(.*\)} $func real_type
+
+	        # Store the real type into TYPES.
+	        set types($type) [string trim $real_type {()}]
+
+	        # Create an inverse mapping of the actual type to
+	        # the synthetic type.
+	        set type_map("$types($type)") $type
+	        pass "detect $type"
+	    }
+    }
+}
+
+# This is a list of the actual overloaded method arguments.
+set overloads {}
+foreach type $all_types {
+    lappend overloads $types($type)
+}
+
+# Sort this list alphabetically.
+set overloads [lsort $overloads]
+
+# Create the menu list.
+set items {"cancel" "all"}
+foreach ovld $overloads {
+    lappend items "$srcfile:foo::overload1arg\\($ovld\\)"
+}
+set menu_items {}
+set idx 0
+foreach item $items {
+    lappend menu_items ".$idx. .*$item"
+    incr idx
+}
+set menu_overload1arg [join $menu_items {[\r\n]*}]
+append menu_overload1arg {[\r\n]*> $}
 
 # Set multiple-symbols to "ask", to allow us to test the use
 # of the multiple-choice menu when breaking on an overloaded method.
 gdb_test_no_output "set multiple-symbols ask"
 
 # Set breakpoints on foo::overload1arg, one by one.
-
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg" 12    2 111
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg" 11    3 112
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg" 10    4 113
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg"  9    5 114
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg"  8    6 115
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg"  7    7 116
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg"  6    8 117
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg"  5    9 118
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg"  4   10 119
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg"  3   11 120
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg"  2   12 121
-set_bp_overloaded "foo::overload1arg" "$menu_overload1arg" 13   13 110
-
-
+set bpnum 1
+set method "foo::overload1arg"
+for {set idx 0} {$idx < [llength $overloads]} {incr idx} {
+    set type [lindex $overloads $idx]
+    set_bp_overloaded $method $menu_overload1arg \
+	[expr {$idx + 2}] [incr bpnum] $line($type_map("$type"))
+}
 
 # Verify the breakpoints.
-
-gdb_test "info break" \
-    "Num     Type\[\t \]+Disp Enb Address\[\t \]+What.*
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in main(\\((|void)\\))? at.*$srcfile:49\r
-\[\t \]+breakpoint already hit 1 time\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(char\\) at.*$srcfile:111\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(signed char\\) at.*$srcfile:112\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(unsigned char\\) at.*$srcfile:113\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(short( int)?\\) at.*$srcfile:114\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\((unsigned short|short unsigned)( int)?\\) at.*$srcfile:115\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(int\\) at.*$srcfile:116\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\((unsigned|unsigned int)\\) at.*$srcfile:117\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(long( int)?\\) at.*$srcfile:118\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\((unsigned long|long unsigned)( int)?\\) at.*$srcfile:119\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(float\\) at.*$srcfile:120\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(double\\) at.*$srcfile:121\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\((void|)\\) at.*$srcfile:110" \
-    "breakpoint info (after setting one-by-one)"
-
-
+set bptable "Num     Type\[\t \]+Disp Enb Address\[\t \]+What.*"
+append bptable "\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in main(\\((|void)\\))? at.*$srcfile:49\[\r\n\]+"
+append bptable "\[\t \]+breakpoint already hit 1 time\[\r\n\]+"
+foreach ovld $overloads {
+    append bptable [format "\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(%s\\) at.*$srcfile:%d\[\r\n\]+" $ovld \
+			$line($type_map("$ovld"))]
+}
+gdb_test "info break" $bptable "breakpoint info (after setting one-by-one)"
 
 # Test choice "cancel".
 # This is copy-and-paste from set_bp_overloaded.
@@ -225,25 +256,7 @@ gdb_expect {
     }
 }
 
-gdb_test "info break" \
-    "Num     Type\[\t \]+Disp Enb Address\[\t \]+What.*
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in main(\\((|void)\\))? at.*$srcfile:49\r
-\[\t \]+breakpoint already hit 1 time\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(char\\) at.*$srcfile:111\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(signed char\\) at.*$srcfile:112\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(unsigned char\\) at.*$srcfile:113\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(short( int)?\\) at.*$srcfile:114\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\((unsigned short|short unsigned)( int)?\\) at.*$srcfile:115\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(int\\) at.*$srcfile:116\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\((unsigned|unsigned int)\\) at.*$srcfile:117\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(long( int)?\\) at.*$srcfile:118\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\((unsigned long|long unsigned)( int)?\\) at.*$srcfile:119\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(float\\) at.*$srcfile:120\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(double\\) at.*$srcfile:121\r
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+$hex\[\t \]+in foo::overload1arg\\((void|)\\) at.*$srcfile:110" \
-    "breakpoint info (after cancel)"
-
-
+gdb_test "info break" $bptable "breakpoint info (after cancel)"
 
 # Delete these breakpoints.
 
@@ -304,67 +317,73 @@ gdb_expect {
     }
 }
 
-gdb_test "info break" \
-    "Num     Type\[\t \]+Disp Enb Address\[\t \]+What.*
-\[0-9\]+\[\t \]+breakpoint     keep y\[\t \]+<MULTIPLE>\[\t \]*\r
-\[0-9\]+.1\[\t \]+y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(double\\) at.*$srcfile:121\r
-\[0-9\]+.2\[\t \]+y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(float\\) at.*$srcfile:120\r
-\[0-9\]+.3\[\t \]+y\[\t \]+$hex\[\t \]+in foo::overload1arg\\((unsigned long|long unsigned)( int)?\\) at.*$srcfile:119\r
-\[0-9\]+.4\[\t \]+y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(long( int)?\\) at.*$srcfile:118\r
-\[0-9\]+.5\[\t \]+y\[\t \]+$hex\[\t \]+in foo::overload1arg\\((unsigned|unsigned int)\\) at.*$srcfile:117\r
-\[0-9\]+.6\[\t \]+y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(int\\) at.*$srcfile:116\r
-\[0-9\]+.7\[\t \]+y\[\t \]+$hex\[\t \]+in foo::overload1arg\\((unsigned short|short unsigned)( int)?\\) at.*$srcfile:115\r
-\[0-9\]+.8\[\t \]+y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(short( int)?\\) at.*$srcfile:114\r
-\[0-9\]+.9\[\t \]+y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(unsigned char\\) at.*$srcfile:113\r
-\[0-9\]+.10\[\t \]+y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(signed char\\) at.*$srcfile:112\r
-\[0-9\]+.11\[\t \]+y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(char\\) at.*$srcfile:111\r
-\[0-9\]+.12\[\t \]+y\[\t \]+$hex\[\t \]+in foo::overload1arg\\((void|)\\) at.*$srcfile:110" \
-    "breakpoint info (after setting on all)"
-
+# Create the breakpoint table for "info breakpoint".
+set bptable "Num     Type\[\t \]+Disp Enb Address\[\t \]+What.*\[\r\n]+"
+append bptable "\[0-9\]+\[\t \]+breakpoint\[\t \]+keep\[\t \]y\[\t \]+<MULTIPLE>.*\[\r\n\]+"
+foreach ovld {void char signed_char unsigned_char short_int \
+		  unsigned_short_int int unsigned_int long_int \
+		  unsigned_long_int float double} {
+  append bptable [format "\[0-9\]+.\[0-9\]+\[\t \]+y\[\t \]+$hex\[\t \]+in foo::overload1arg\\(%s\\) at.*$srcfile:%d\[\r\n\]+" \
+		      $types($ovld) $line($ovld)]
+}
 
+gdb_test "info break" $bptable "breakpoint info (after setting on all)"
 
 # Run through each breakpoint.
+proc continue_to_bp_overloaded {bpnumber might_fail line argtype argument} {
+    global gdb_prompt hex decimal srcfile
+
+    if {$argument == ""} {
+        set actuals ""
+    } else {
+        set actuals "arg=$argument"
+        if {[regexp {char} $argtype]} {
+	    append actuals " \\'\\\\00$argument\\'"
+      }
+    }
 
-# NOTE: carlton/2003-02-03: I'm seeing failures on some of the tests,
-# with the wrong arg being printed out.  Michael Chastain sees
-# failures at times, too, albeit fewer than I do.
+    if {[string match $argtype "void"]} {
+        set body "return $decimal;"
+    } else {
+        set body "arg = 0; return $decimal;"
+    }
 
-proc continue_to_bp_overloaded {might_kfail bpnumber argtype actuals} {
-    global gdb_prompt hex decimal srcfile 
+    gdb_test_multiple "continue" "continue to bp overloaded : $argtype" {
+        -re "Continuing.\r\n\r\nBreakpoint $bpnumber, foo::overload1arg \\(this=${hex}(, )?$actuals\\) at .*$srcfile:$line\r\n$decimal\[\t \]+{ $body }.*$gdb_prompt $" {
+            pass "continue to bp overloaded : $argtype"
+        }
 
-    send_gdb "continue\n"
-    gdb_expect {
-	-re "Continuing.\r\n\r\nBreakpoint ${bpnumber}, foo::overload1arg \\(this=${hex}(, )?${actuals}\\) at.*${srcfile}:${decimal}\r\n${decimal}\[\t \]+int foo::overload1arg \\(${argtype}( arg)?\\).*\r\n.*$gdb_prompt $" {
-	    pass "continue to bp overloaded : ${argtype}"
-	}
-	-re "Continuing.\r\n\r\nBreakpoint ${bpnumber}, foo::overload1arg \\(this=${hex}, arg=.*\\) at.*${srcfile}:${decimal}\r\n${decimal}\[\t \]+int foo::overload1arg \\(${argtype}( arg)?\\).*\r\n.*$gdb_prompt $" {
-	    if $might_kfail {
-		kfail "gdb/1025" "continue to bp overloaded : ${argtype}"
-	    } else {
-		fail "continue to bp overloaded : ${argtype}"
-	    }
-	}
-        -re ".*$gdb_prompt $" {
-	    fail "continue to bp overloaded : ${argtype}" 
-	}
-        timeout {
-	    fail "continue to bp overloaded : ${argtype} (timeout)"
-	}
+        -re "Continuing.\r\n\r\nBreakpoint $bpnumber, foo::overload1arg \\(this=${hex}, arg=.*\\) at .*$srcfile:$line\r\n$decimal\[\t \]+{ $body }.*$gdb_prompt $" {
+            if $might_kfail {
+                kfail "c++/8130" "continue to bp overloaded : $argtype"
+            } else {
+                fail "continue to bp overloaded : $argtype"
+            }
+        }
     }
 }
 
-continue_to_bp_overloaded 0 14 "(void|)" ""
-continue_to_bp_overloaded 1 14 "char" "arg=2 \\'\\\\002\\'"
-continue_to_bp_overloaded 1 14 "signed char" "arg=3 \\'\\\\003\\'"
-continue_to_bp_overloaded 1 14 "unsigned char" "arg=4 \\'\\\\004\\'"
-continue_to_bp_overloaded 1 14 "short" "arg=5"
-continue_to_bp_overloaded 1 14 "unsigned short" "arg=6"
-continue_to_bp_overloaded 0 14 "int" "arg=7"
-continue_to_bp_overloaded 0 14 "(unsigned|unsigned int)" "arg=8"
-continue_to_bp_overloaded 0 14 "long" "arg=9"
-continue_to_bp_overloaded 0 14 "unsigned long" "arg=10"
-continue_to_bp_overloaded 0 14 "float" "arg=100"
-continue_to_bp_overloaded 1 14 "double" "arg=200"
+# An array which describes which of these methods might be expected
+# to kfail on GCC 2.95. See C++/8210.
+array set might_fail {
+    void 0
+    char 1
+    signed_char 1
+    unsigned_char 1
+    short_int 1
+    unsigned_short_int 1
+    int 0
+    unsigned_int 0
+    long_int 0
+    unsigned_long_int 0
+    float 0
+    double 1
+}
+
+foreach type $all_types {
+    continue_to_bp_overloaded 14 $might_fail($type) $line($type) \
+	$type $arguments($type)
+}
 
 # Test breaking on an overloaded function when multiple-symbols
 # is set to "cancel"
@@ -380,4 +399,5 @@ gdb_test "break foo::foofunc" \
 
 # That's all, folks.
 
+unset -nocomplain line types
 gdb_continue_to_end "finish program"
diff --git a/gdb/testsuite/gdb.cp/ovsrch.exp b/gdb/testsuite/gdb.cp/ovsrch.exp
index 5af5368..b31c655 100644
--- a/gdb/testsuite/gdb.cp/ovsrch.exp
+++ b/gdb/testsuite/gdb.cp/ovsrch.exp
@@ -55,15 +55,10 @@ proc test_class {class} {
 if { [skip_cplus_tests] } { continue }
 
 # Test for c++/11734
-set testfile "ovsrch"
-set binfile [file join $objdir $subdir $testfile]
+standard_testfile ovsrch1.cc ovsrch2.cc ovsrch3.cc ovsrch4.cc
 
-set srcfiles {}
-for {set i 1} {$i < 5} {incr i} {
-    lappend srcfiles $testfile$i.cc
-}
-
-if {[prepare_for_testing $testfile $testfile $srcfiles {c++ debug}]} {
+if {[prepare_for_testing $testfile $testfile \
+	 [list $srcfile $srcfile2 $srcfile3 $srcfile4] {c++ debug}]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.cp/paren-type.exp b/gdb/testsuite/gdb.cp/paren-type.exp
index 2f722b7..2cc993d 100644
--- a/gdb/testsuite/gdb.cp/paren-type.exp
+++ b/gdb/testsuite/gdb.cp/paren-type.exp
@@ -13,7 +13,8 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile paren-type
+standard_testfile .cc
+
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${testfile}.cc {c++ debug}] } {
     return -1
 }
diff --git a/gdb/testsuite/gdb.cp/pass-by-ref.exp b/gdb/testsuite/gdb.cp/pass-by-ref.exp
index 19cbf97..74dfec5 100644
--- a/gdb/testsuite/gdb.cp/pass-by-ref.exp
+++ b/gdb/testsuite/gdb.cp/pass-by-ref.exp
@@ -18,20 +18,12 @@
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile "pass-by-ref"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
-	  executable {debug c++}] != "" } {
-    untested pass-by-ref.exp
+standard_testfile .cc
+
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto_main] then {
     return -1
 }
diff --git a/gdb/testsuite/gdb.cp/pr-1023.exp b/gdb/testsuite/gdb.cp/pr-1023.exp
index 8e41e04..0f0b523 100644
--- a/gdb/testsuite/gdb.cp/pr-1023.exp
+++ b/gdb/testsuite/gdb.cp/pr-1023.exp
@@ -18,34 +18,22 @@
 
 # This file is part of the gdb testsuite.
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 if { [skip_cplus_tests] } { continue }
 
 #
 # test running programs
 #
 
-set testfile "pr-1023"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested pr-1023.exp
-     return -1
+if [get_compiler_info "c++"] {
+    return -1
 }
 
-if [get_compiler_info ${binfile} "c++"] {
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint"
     continue
diff --git a/gdb/testsuite/gdb.cp/pr-1210.exp b/gdb/testsuite/gdb.cp/pr-1210.exp
index b0fc3c9..6e4ab57 100644
--- a/gdb/testsuite/gdb.cp/pr-1210.exp
+++ b/gdb/testsuite/gdb.cp/pr-1210.exp
@@ -17,34 +17,22 @@
 
 # This file is part of the gdb testsuite.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if { [skip_cplus_tests] } { continue }
 
 #
 # test running programs
 #
 
-set testfile "pr-1210"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-    untested pr-1210.exp
+if [get_compiler_info "c++"] {
     return -1
 }
 
-if [get_compiler_info ${binfile} "c++"] {
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint"
     continue
diff --git a/gdb/testsuite/gdb.cp/pr-574.exp b/gdb/testsuite/gdb.cp/pr-574.exp
index abc38d1..50bce18 100644
--- a/gdb/testsuite/gdb.cp/pr-574.exp
+++ b/gdb/testsuite/gdb.cp/pr-574.exp
@@ -20,35 +20,22 @@
 
 # This file is part of the gdb testsuite
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 if { [skip_cplus_tests] } { continue }
 
 #
 # test running programs
 #
 
-set testfile "pr-574"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested pr-574.exp
-     return -1
+if [get_compiler_info "c++"] {
+    return -1
 }
 
-if [get_compiler_info ${binfile} "c++"] {
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint"
     continue
diff --git a/gdb/testsuite/gdb.cp/pr10687.exp b/gdb/testsuite/gdb.cp/pr10687.exp
index f7e6088..318477e 100644
--- a/gdb/testsuite/gdb.cp/pr10687.exp
+++ b/gdb/testsuite/gdb.cp/pr10687.exp
@@ -13,9 +13,9 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile pr10687
-set srcfile ${testfile}.cc
-if [prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}] {
+standard_testfile .cc
+
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.cp/pr10728.exp b/gdb/testsuite/gdb.cp/pr10728.exp
index 7568d66..3391a19 100644
--- a/gdb/testsuite/gdb.cp/pr10728.exp
+++ b/gdb/testsuite/gdb.cp/pr10728.exp
@@ -21,18 +21,16 @@ if { [skip_cplus_tests] } { continue }
 
 load_lib "cp-support.exp"
 
-set testfile "pr10728"
-set srcfile ${testfile}-x.cc
-set tfx ${testfile}-x
-set tfy ${testfile}-y
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile pr10728-x.cc pr10728-y.cc
+set tfx [standard_output_file pr10728-x.o]
+set tfy [standard_output_file pr10728-y.o]
 
-if  { [gdb_compile "${srcdir}/${subdir}/${tfy}.cc" "${tfy}.o" object {c++}] != "" } {
+if  { [gdb_compile "${srcdir}/${subdir}/$srcfile2" "${tfy}.o" object {c++}] != "" } {
      untested pr10728.exp
      return -1
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${tfx}.cc" "${tfx}.o" object {debug c++}] != "" } {
+if  { [gdb_compile "${srcdir}/${subdir}/$srcfile" "${tfx}.o" object {debug c++}] != "" } {
      untested pr10728.exp
      return -1
 }
@@ -42,11 +40,7 @@ if  { [gdb_compile "${tfx}.o ${tfy}.o" ${binfile} executable {debug c++}] != ""
      return -1
 }
 
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart $binfile
 
 if ![runto_main] then {
     perror "couldn't run to breakpoint"
diff --git a/gdb/testsuite/gdb.cp/pr12028.exp b/gdb/testsuite/gdb.cp/pr12028.exp
index 2c3b406..b68235e 100644
--- a/gdb/testsuite/gdb.cp/pr12028.exp
+++ b/gdb/testsuite/gdb.cp/pr12028.exp
@@ -13,8 +13,8 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile pr12028
-set srcfile ${testfile}.cc
+standard_testfile .cc
+
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug c++}] } {
     return -1
 }
diff --git a/gdb/testsuite/gdb.cp/pr9067.exp b/gdb/testsuite/gdb.cp/pr9067.exp
index 31d4e80..cf80be0 100644
--- a/gdb/testsuite/gdb.cp/pr9067.exp
+++ b/gdb/testsuite/gdb.cp/pr9067.exp
@@ -19,20 +19,12 @@ if { [skip_cplus_tests] } { continue }
 
 load_lib "cp-support.exp"
 
-set testfile "pr9067"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {c++ debug}] != "" } {
-     untested pr9067.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint"
     continue
diff --git a/gdb/testsuite/gdb.cp/pr9167.exp b/gdb/testsuite/gdb.cp/pr9167.exp
index 0a99093..7c86b39 100644
--- a/gdb/testsuite/gdb.cp/pr9167.exp
+++ b/gdb/testsuite/gdb.cp/pr9167.exp
@@ -18,9 +18,9 @@ if { [istarget "spu*-*-*"] } {
         return 0
 }
 
-set testfile pr9167
-set srcfile ${testfile}.cc
-if [prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}] {
+standard_testfile .cc
+
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.cp/pr9631.exp b/gdb/testsuite/gdb.cp/pr9631.exp
index 7da3183..a74b82d 100644
--- a/gdb/testsuite/gdb.cp/pr9631.exp
+++ b/gdb/testsuite/gdb.cp/pr9631.exp
@@ -17,24 +17,16 @@
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile "pr9631"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested pr9631.exp
-     return -1
+if [get_compiler_info "c++"] {
+    return -1
 }
 
-if [get_compiler_info ${binfile} "c++"] {
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint"
     continue
@@ -45,4 +37,4 @@ gdb_continue_to_breakpoint "after bar tender is initialized"
 
 gdb_test \
   "print tender" \
-  "\\\$1 = {<foo::vbase> = {_vptr.vbase = $hex}, <empty_base> = {<No data fields>}, <No data fields>}"
+  "\\\$1 = {<foo::vbase> = {_vptr.vbase = ${hex}( <vtable for bar.*>)?}, <empty_base> = {<No data fields>}, <No data fields>}"
diff --git a/gdb/testsuite/gdb.cp/printmethod.exp b/gdb/testsuite/gdb.cp/printmethod.exp
index 998fffc..c441ea7 100644
--- a/gdb/testsuite/gdb.cp/printmethod.exp
+++ b/gdb/testsuite/gdb.cp/printmethod.exp
@@ -19,35 +19,22 @@
 
 # This file is part of the gdb testsuite
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 if { [skip_cplus_tests] } { continue }
 
 #
 # test running programs
 #
 
-set testfile "printmethod"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested printmethod.exp
-     return -1
+if [get_compiler_info "c++"] {
+    return -1
 }
 
-if [get_compiler_info ${binfile} "c++"] {
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint"
     continue
diff --git a/gdb/testsuite/gdb.cp/psmang.exp b/gdb/testsuite/gdb.cp/psmang.exp
index 743f882..fc895e6 100644
--- a/gdb/testsuite/gdb.cp/psmang.exp
+++ b/gdb/testsuite/gdb.cp/psmang.exp
@@ -171,10 +171,6 @@
 # other ways this test could fail to do its job.  If you need to make
 # revisions, please be very careful.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # test running programs
 #
@@ -182,42 +178,22 @@ if $tracelevel then {
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile "psmang"
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile psmang1.cc psmang2.cc
 
-if [get_compiler_info ${binfile} "c++"] {
+if [get_compiler_info "c++"] {
     return -1;
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${testfile}1.cc" "${testfile}1.o" object {debug c++}] != "" } {
-     untested psmang.exp
-     return -1
-}
-
-if  { [gdb_compile "${srcdir}/${subdir}/${testfile}2.cc" "${testfile}2.o" object {debug c++}] != "" } {
-     untested psmang.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile \
+	 [list $srcfile $srcfile2] {debug c++}]} {
+    return -1
 }
 
-if  { [gdb_compile "${testfile}1.o ${testfile}2.o" ${binfile} executable {debug c++}] != "" } {
-     untested psmang.exp
-     return -1
-}
-
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 gdb_test "break s::method1" "Breakpoint .* at .*: file .*psmang1.cc.*"
 
 # We have to exit and restart GDB here, to make sure that all the
 # compilation units are psymtabs again.
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 
 gdb_test "break s::method2" "Breakpoint .* at .*: file .*psmang2.cc.*"
diff --git a/gdb/testsuite/gdb.cp/psymtab-parameter.exp b/gdb/testsuite/gdb.cp/psymtab-parameter.exp
index 1d60507..c74fa8b 100644
--- a/gdb/testsuite/gdb.cp/psymtab-parameter.exp
+++ b/gdb/testsuite/gdb.cp/psymtab-parameter.exp
@@ -15,18 +15,14 @@
 
 if { [skip_cplus_tests] } { continue }
 
+standard_testfile .cc
 
-set testfile psymtab-parameter
-set executable ${testfile}.x
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${executable}
-
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {debug c++}] != "" } {
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}.x" object {debug c++}] != "" } {
     untested ${testfile}.exp
     return -1
 }
 
-clean_restart $executable
+clean_restart $testfile.x
 
 # As `main' is not present GDB fails to find the proper inferior language.
 gdb_test_no_output "set language c++"
diff --git a/gdb/testsuite/gdb.cp/ptype-cv-cp.exp b/gdb/testsuite/gdb.cp/ptype-cv-cp.exp
index cb7294a..c53785b 100644
--- a/gdb/testsuite/gdb.cp/ptype-cv-cp.exp
+++ b/gdb/testsuite/gdb.cp/ptype-cv-cp.exp
@@ -17,8 +17,7 @@
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile "ptype-cv-cp"
-set srcfile ${testfile}.cc
+standard_testfile .cc
 
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug c++}] } {
     return -1
@@ -37,5 +36,8 @@ gdb_test "whatis v_const_volatile_my_int" "type = const_volatile_my_int"
 gdb_test "ptype v_const_volatile_my_int" "type = const volatile int"
 
 gdb_test "whatis v_volatile_const_my_int" "type = volatile_const_my_int"
-setup_kfail "gcc/45997" *-*-*
+if {[test_compiler_info {gcc-[0-3]-*}]
+    || [test_compiler_info {gcc-4-[0-5]-*}]} {
+    setup_xfail "gcc/45997" "*-*-*"
+}
 gdb_test "ptype v_volatile_const_my_int" "type = const volatile int"
diff --git a/gdb/testsuite/gdb.cp/punctuator.exp b/gdb/testsuite/gdb.cp/punctuator.exp
index 9af22ad..27ef37c 100644
--- a/gdb/testsuite/gdb.cp/punctuator.exp
+++ b/gdb/testsuite/gdb.cp/punctuator.exp
@@ -17,10 +17,6 @@
 
 # This file is part of the gdb testsuite
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 if { [skip_cplus_tests] } { continue }
 
 gdb_exit
diff --git a/gdb/testsuite/gdb.cp/re-set-overloaded.exp b/gdb/testsuite/gdb.cp/re-set-overloaded.exp
index afd5c5a..30adb75 100644
--- a/gdb/testsuite/gdb.cp/re-set-overloaded.exp
+++ b/gdb/testsuite/gdb.cp/re-set-overloaded.exp
@@ -16,27 +16,23 @@
 if { [skip_cplus_tests] } { continue }
 if { [skip_shlib_tests] } { continue }
 
-set testfile re-set-overloaded
-set srcfile bool.cc
-set executable $testfile
-set binfile $objdir/$subdir/$executable
+standard_testfile bool.cc .cc
 
-set libsrcfile ${testfile}.cc
-set sofile $objdir/$subdir/${testfile}.so
+set sofile [standard_output_file ${testfile}.so]
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile} "c++"] {
+if [get_compiler_info "c++"] {
     return -1
 }
 
-if { [gdb_compile_shlib $srcdir/$subdir/$libsrcfile $sofile {debug c++}] != ""
+if { [gdb_compile_shlib $srcdir/$subdir/$srcfile2 $sofile {debug c++}] != ""
      || [gdb_compile $srcdir/$subdir/$srcfile $binfile executable [list debug "c++" shlib=${sofile}]] != ""} {
     untested ${testfile}.exp
     return -1
 }
 
-clean_restart $executable
+clean_restart $testfile
 gdb_load_shlibs ${sofile}
 
 gdb_test_no_output "set breakpoint pending yes"
diff --git a/gdb/testsuite/gdb.cp/readnow-language.exp b/gdb/testsuite/gdb.cp/readnow-language.exp
index 6614112..a85b970 100644
--- a/gdb/testsuite/gdb.cp/readnow-language.exp
+++ b/gdb/testsuite/gdb.cp/readnow-language.exp
@@ -13,16 +13,15 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile readnow-language
-set srcfile ${testfile}.cc
-set executable ${testfile}
-if {[build_executable ${testfile}.exp $executable ${testfile}.cc {c++ debug}] == -1} {
+standard_testfile .cc
+
+if {[build_executable ${testfile}.exp $testfile ${testfile}.cc {c++ debug}] == -1} {
     return -1
 }
 
 set old_gdbflags $GDBFLAGS
 set GDBFLAGS "$GDBFLAGS -readnow"
-clean_restart $executable
+clean_restart $testfile
 set GDBFLAGS $old_gdbflags
 
 gdb_test "show language" {The current source language is "auto; currently c\+\+"\.}
diff --git a/gdb/testsuite/gdb.cp/ref-params.cc b/gdb/testsuite/gdb.cp/ref-params.cc
index 9737505..d8a0bfa 100644
--- a/gdb/testsuite/gdb.cp/ref-params.cc
+++ b/gdb/testsuite/gdb.cp/ref-params.cc
@@ -61,11 +61,6 @@ int main(void)
   Child Q(42);
   Child& QR = Q;
 
-  #ifdef usestubs
-     set_debug_traps();
-     breakpoint();
-  #endif
-
   /* Set breakpoint marker1 here.  */
 
   f2(Q);
diff --git a/gdb/testsuite/gdb.cp/ref-params.exp b/gdb/testsuite/gdb.cp/ref-params.exp
index 23f9de8..3305e70 100644
--- a/gdb/testsuite/gdb.cp/ref-params.exp
+++ b/gdb/testsuite/gdb.cp/ref-params.exp
@@ -16,37 +16,25 @@
 
 # written by Paul N. Hilfinger (Hilfinger at adacore.com)
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 #
 # test running programs
 #
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile "ref-params"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested ref-params.exp
-     return -1
+if {[build_executable $testfile.exp $testfile $srcfile {debug c++}] == 1} {
+    return -1
 }
 
 gdb_exit
 
 proc gdb_start_again { text } {
-    global srcdir
-    global subdir
     global binfile
     global srcfile
 
-    gdb_exit
-    gdb_start
-    gdb_reinitialize_dir $srcdir/$subdir
-    gdb_load ${binfile}
+    clean_restart $binfile
 
     runto ${srcfile}:[gdb_get_line_number $text]
 }
diff --git a/gdb/testsuite/gdb.cp/ref-types.cc b/gdb/testsuite/gdb.cp/ref-types.cc
index 3ad2435..d7199ec 100644
--- a/gdb/testsuite/gdb.cp/ref-types.cc
+++ b/gdb/testsuite/gdb.cp/ref-types.cc
@@ -40,10 +40,6 @@ int main(void)
     as[2] = 2;
     as[3] = 3;
 
-   #ifdef usestubs
-       set_debug_traps();
-       breakpoint();
-    #endif
     marker1();
 
     main2();
diff --git a/gdb/testsuite/gdb.cp/ref-types.exp b/gdb/testsuite/gdb.cp/ref-types.exp
index 3e63b6b..2002d7b 100644
--- a/gdb/testsuite/gdb.cp/ref-types.exp
+++ b/gdb/testsuite/gdb.cp/ref-types.exp
@@ -16,31 +16,18 @@
 
 # written by Elena Zannoni (ezannoni at cygnus.com)
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 #
 # test running programs
 #
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile "ref-types"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested ref-types.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
-
 #
 # set it up at a breakpoint so we can play with the variable values
 #
diff --git a/gdb/testsuite/gdb.cp/rtti.exp b/gdb/testsuite/gdb.cp/rtti.exp
index 35e37b0..e5a8d3b 100644
--- a/gdb/testsuite/gdb.cp/rtti.exp
+++ b/gdb/testsuite/gdb.cp/rtti.exp
@@ -26,48 +26,23 @@
 # (involving templates, in particular) where this problem triggers
 # because GDB and GCC have different ideas what a class is called.
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 if { [skip_cplus_tests] } { continue }
 
 #
 # test running programs
 #
 
-set testfile "rtti"
-set srcfile1 "${testfile}1.cc"
-set objfile1 "${testfile}1.o"
-set srcfile2 "${testfile}2.cc"
-set objfile2 "${testfile}2.o"
-set binfile  "${objdir}/${subdir}/${testfile}"
-
-if  { [gdb_compile "$srcdir/$subdir/$srcfile1" "$objdir/$subdir/$objfile1" object {debug c++}] != "" } {
-     untested rtti.exp
-     return -1
-}
-
-if  { [gdb_compile "$srcdir/$subdir/$srcfile2" "$objdir/$subdir/$objfile2" object {debug c++}] != "" } {
-     untested rtti.exp
-     return -1
-}
+standard_testfile rtti1.cc rtti2.cc
 
-if  { [gdb_compile "$objdir/$subdir/$objfile1 $objdir/$subdir/$objfile2" "${binfile}" executable {debug c++}] != "" } {
-     untested rtti.exp
-     return -1
+if [get_compiler_info "c++"] {
+    return -1
 }
 
-if [get_compiler_info ${binfile} "c++"] {
+if {[prepare_for_testing $testfile.exp $testfile \
+	 [list $srcfile $srcfile2] {debug c++}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint"
     continue
@@ -75,7 +50,7 @@ if ![runto_main] then {
 
 # First, run to after we've constructed the object:
 
-gdb_breakpoint [gdb_get_line_number "main-constructs-done" "$srcfile1"]
+gdb_breakpoint [gdb_get_line_number "main-constructs-done" "$srcfile"]
 gdb_continue_to_breakpoint "end of constructors in main"
 
 gdb_test_multiple "print *e1" "print *e1" {
@@ -131,12 +106,12 @@ gdb_test_multiple "print *e2" "print *e2" {
 # Now we test the hack that's been implemented to get around some
 # instances of PR gdb/1511.
 
-gdb_breakpoint [gdb_get_line_number "func-constructs-done" "$srcfile1"]
+gdb_breakpoint [gdb_get_line_number "func-constructs-done" "$srcfile"]
 gdb_continue_to_breakpoint "end of constructors in func"
 
 gdb_test "print *obj" "\\$\[0-9\]* = {<n2::Base2> = .*}"
 
-gdb_breakpoint [gdb_get_line_number "func3-constructs-done" "$srcfile1"]
+gdb_breakpoint [gdb_get_line_number "func3-constructs-done" "$srcfile"]
 gdb_continue_to_breakpoint "end of constructors in func3"
 
 gdb_test "print *obj3" "\\$\[0-9\]* = {<n2::C2> = .*}"
diff --git a/gdb/testsuite/gdb.cp/shadow.exp b/gdb/testsuite/gdb.cp/shadow.exp
index a6b40d1..76530e0 100644
--- a/gdb/testsuite/gdb.cp/shadow.exp
+++ b/gdb/testsuite/gdb.cp/shadow.exp
@@ -16,30 +16,17 @@
 # Test that when multiple variables have the same
 # name the one from the correct scope is printed.
 
-if $tracelevel then {
-    strace $tracelevel
-}
 
+standard_testfile .cc
 
-set testfile shadow
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-    untested "Couldn't compile test program"
+if [get_compiler_info] {
     return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-# Get things started.
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint main"
     continue
diff --git a/gdb/testsuite/gdb.cp/smartp.exp b/gdb/testsuite/gdb.cp/smartp.exp
index 98b0df7..6f3e3ac 100644
--- a/gdb/testsuite/gdb.cp/smartp.exp
+++ b/gdb/testsuite/gdb.cp/smartp.exp
@@ -13,8 +13,8 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile smartp
-set srcfile ${testfile}.cc
+standard_testfile .cc
+
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug c++}] } {
      return -1
 }
diff --git a/gdb/testsuite/gdb.cp/static-method.exp b/gdb/testsuite/gdb.cp/static-method.exp
index d4dc6fa..55c3431 100644
--- a/gdb/testsuite/gdb.cp/static-method.exp
+++ b/gdb/testsuite/gdb.cp/static-method.exp
@@ -41,8 +41,7 @@ proc test_breakpoint {func result} {
 if {[skip_cplus_tests]} { continue }
 
 # Tests for c++/12750
-set testfile "static-method"
-set srcfile $testfile.cc
+standard_testfile .cc
 
 if {[prepare_for_testing $testfile $testfile $srcfile {c++ debug}]} {
     return -1
@@ -60,7 +59,8 @@ gdb_test_multiple $test $test {
 	pass $test
     }
     -re "Symbol \"A::func\\(\\)\" is a function at address .*\r\n$gdb_prompt $" {
-	kfail gcc/45682 $test
+	setup_xfail gcc/45682 "*-*-*"
+	fail $test
 	set have_gcc_45682_fixed 0
     }
 }
@@ -87,22 +87,22 @@ foreach test $methods {
     # with the filename pre-pended.
     if {[string compare $test "xxx::${ans}::A::func"] == 0
 	&& !$have_gcc_45682_fixed} {
-	setup_kfail gcc/45682 "*-*-*"
+	setup_xfail gcc/45682 "*-*-*"
     }
     gdb_test "list ${srcfile}:$test" $result
     if {[string compare $test "xxx::${ans}::A::func"] == 0
 	&& !$have_gcc_45682_fixed} {
-	setup_kfail gcc/45682 "*-*-*"
+	setup_xfail gcc/45682 "*-*-*"
     }
     gdb_test "list '${srcfile}:$test'" $result
     if {[string compare $test "xxx::${ans}::A::func"] == 0
 	&& !$have_gcc_45682_fixed} {
-	setup_kfail gcc/45682 "*-*-*"
+	setup_xfail gcc/45682 "*-*-*"
     }
     gdb_test "list '${srcfile}':'$test'" $result
     if {[string compare $test "xxx::${ans}::A::func"] == 0
 	&& !$have_gcc_45682_fixed} {
-	setup_kfail gcc/45682 "*-*-*"
+	setup_xfail gcc/45682 "*-*-*"
     }
     gdb_test "list ${srcfile}:'$test'" $result
 
diff --git a/gdb/testsuite/gdb.cp/static-print-quit.exp b/gdb/testsuite/gdb.cp/static-print-quit.exp
index a0fd5d6..142c08c 100644
--- a/gdb/testsuite/gdb.cp/static-print-quit.exp
+++ b/gdb/testsuite/gdb.cp/static-print-quit.exp
@@ -15,17 +15,14 @@
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile static-print-quit
-set srcfile ${testfile}.cc
-set executable $testfile.o
-set objfile ${objdir}/${subdir}/${executable}
+standard_testfile .cc
 
-if { [gdb_compile $srcdir/$subdir/$srcfile $objfile object {debug c++}] != ""} {
+if { [gdb_compile $srcdir/$subdir/$srcfile $binfile.o object {debug c++}] != ""} {
     untested ${testfile}.exp
     return -1
 }
 
-clean_restart $executable
+clean_restart $testfile.o
 
 gdb_test_no_output "set width 80"
 gdb_test_no_output "set height 2"
diff --git a/gdb/testsuite/gdb.cp/temargs.exp b/gdb/testsuite/gdb.cp/temargs.exp
index 37c1336..8c89002 100644
--- a/gdb/testsuite/gdb.cp/temargs.exp
+++ b/gdb/testsuite/gdb.cp/temargs.exp
@@ -17,16 +17,11 @@
 
 # This file is part of the gdb testsuite.
 
-if {$tracelevel} {
-    strace $tracelevel
-}
-
 if {[skip_cplus_tests]} {
     continue
 }
 
-set testfile "temargs"
-set srcfile "${testfile}.cc"
+standard_testfile .cc
 
 if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
@@ -176,7 +171,7 @@ if $have_older_template_gcc { setup_xfail "*-*-*" }
 gdb_test "ptype F" "type = void \\\(S::\\\*\\\)\\\(S \\\* const\\\)" \
     "test type of F in k2_m"
 
-setup_kfail gcc/49366 "*-*-*"
+setup_xfail gcc/49366 "*-*-*"
 gdb_test "print F" "&S::somefunc" "test value of F in k2_m"
 
 #
@@ -189,10 +184,10 @@ gdb_test "print F" "&S::somefunc" "test value of F in k2_m"
 gdb_continue_to_breakpoint "continue to sixth breakpoint for temargs"
 
 if $have_older_template_gcc { setup_xfail "*-*-*"
-} else { setup_kfail gcc/49546 "*-*-*" }
+} else { setup_xfail gcc/49546 "*-*-*" }
 gdb_test "ptype F" {type = void \(\*\)\(int\)} "test type of F in k3_m"
 
 if $have_older_template_gcc { setup_xfail "*-*-*"
-} else { setup_kfail gcc/49546 "*-*-*" }
+} else { setup_xfail gcc/49546 "*-*-*" }
 gdb_test "print F" { = \(void \(\*\)\(int\)\) 0x[0-9a-f]+ <S3::m\(int\)>} \
 	 "test value of F in k3_m"
diff --git a/gdb/testsuite/gdb.cp/templates.cc b/gdb/testsuite/gdb.cp/templates.cc
index b5e0643..49cf6b6 100644
--- a/gdb/testsuite/gdb.cp/templates.cc
+++ b/gdb/testsuite/gdb.cp/templates.cc
@@ -734,10 +734,7 @@ int main()
 {
     int i;
     long l, m, n;
-#ifdef usestubs
-    set_debug_traps();
-    breakpoint();
-#endif
+
     i = i + 1;
 
     // New tests added here
diff --git a/gdb/testsuite/gdb.cp/templates.exp b/gdb/testsuite/gdb.cp/templates.exp
index c6b4173..47915b1 100644
--- a/gdb/testsuite/gdb.cp/templates.exp
+++ b/gdb/testsuite/gdb.cp/templates.exp
@@ -18,25 +18,18 @@
 
 set ws "\[\r\n\t \]+"
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if { [skip_cplus_tests] } { continue }
 
-set testfile "templates"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile} "c++"] {
+if [get_compiler_info "c++"] {
     return -1
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested templates.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
 #
@@ -49,51 +42,53 @@ proc test_ptype_of_templates {} {
 
     gdb_test_multiple "ptype T5<int>" "ptype T5<int>" {
 	-re "type = class T5<int> \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}T5<int> & operator=\\(T5<int> const ?&\\);${ws}T5\\(int\\);${ws}T5\\((T5<int> const|const T5<int>) ?&\\);${ws}~T5\\((void|)\\);${ws}static void \\* operator new\\(unsigned( int| long)?\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}\}\r\n$gdb_prompt $" {
-	    pass "ptype T5<int>"
+	    xfail "ptype T5<int> -- new without size_t"
 	}
 	-re "type = class T5<int> \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}T5\\(int\\);${ws}T5\\((T5<int> const|const T5<int>) ?&\\);${ws}~T5\\((void|)\\);${ws}static void \\* operator new\\(unsigned( int| long)?\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}T5<int> & operator=\\(T5<int> const ?&\\);${ws}\}\r\n$gdb_prompt $" {
-	    pass "ptype T5<int>"
+	    xfail "ptype T5<int> -- new without size_t"
 	}
 	-re "type = class T5<int> \\{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}${ws}T5 \\(int\\);${ws}T5 \\(const class T5<int> &\\);${ws}void ~T5 \\(int\\);${ws}static void \\* new \\(unsigned int\\);${ws}static void delete \\(void ?\\*\\);${ws}int value \\((void|)\\);${ws}\\}${ws}$gdb_prompt $" {
-	    pass "ptype T5<int> -- new with unsigned int"
+	    xfail "ptype T5<int> -- new with unsigned int"
 	}
 	-re "type = class T5<int> \\{.*public:.*static int X;.*int x;.*int val;.*T5 \\(int\\);.*T5 \\(const class T5<int> &\\);.*void ~T5 \\(int\\);.*static void \\* new \\(unsigned long\\);.*static void delete \\(void ?\\*\\);.*int value \\((void|)\\);.*\\}\r\n$gdb_prompt $" {
-	    pass "ptype T5<int> -- new with unsigned long"
+	    xfail "ptype T5<int> -- new with unsigned long"
 	}
 	-re "type = class T5<int> \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;((${ws}T5<int> & operator=\\(T5<int> const ?&\\);)|(${ws}T5\\(int\\);)|(${ws}T5\\((T5<int> const|const T5<int>) ?&\\);)|(${ws}~T5\\((void|)\\);)|(${ws}static void \\* operator new\\(unsigned( int| long)?\\);)|(${ws}static void operator delete\\(void ?\\*\\);)|(${ws}int value\\((void|)\\);))*${ws}\}\r\n$gdb_prompt $" {
-	    pass "ptype T5<int> (obsolescent gcc or gdb)"
+	    xfail "ptype T5<int> (obsolescent gcc or gdb)"
 	}
-	-re "type = class T5<int> \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}void T5\\(int\\);${ws}void T5\\((T5<int> const|const T5<int>) ?&\\);${ws}~T5\\(int\\);${ws}static void \\* operator new\\(unsigned( int| long|)\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}\}\r\n$gdb_prompt $" {
+	-re "type = class T5<int> \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}void T5\\(int\\);${ws}void T5\\((T5<int> const|const T5<int>) ?&\\);${ws}~T5\\(int\\);${ws}static void \\* operator new\\((size_t|unsigned( int| long|))\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}\}\r\n$gdb_prompt $" {
 	    # This also triggers gdb/1113...
 	    kfail "gdb/1111" "ptype T5<int>"
+	    # Add here a PASS case when PR gdb/1111 gets fixed.
 	}
     }
 
     gdb_test_multiple "ptype t5i" "ptype t5i" {
         -re "type = class T5<int> \\{${ws}public:${ws}static int X;${ws}int x;${ws}int val;\r\n${ws}T5\\(int\\);${ws}T5\\(T5<int> const ?&\\);${ws}~T5\\((void|)\\);${ws}static void \\* operator new\\(unsigned( int| long)?\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}\\}\r\n$gdb_prompt $" {
-	    pass "ptype T5<int> -- with several fixes from 4.17"
+	    xfail "ptype T5<int> -- with several fixes from 4.17 -- without size_t"
 	}
         -re "type = class T5<int> \\{${ws}public:${ws}static int X;${ws}int x;${ws}int val;\r\n${ws}T5 \\(int\\);${ws}T5 \\(const class T5<int> &\\);${ws}void ~T5 \\(int\\);${ws}static void \\* new \\(unsigned int\\);${ws}static void delete \\(void ?\\*\\);${ws}int value \\((void|)\\);${ws}\\}\r\n$gdb_prompt $" {
-	    pass "ptype t5i<int> -- new with unsigned int"
+	    xfail "ptype t5i<int> -- new with unsigned int -- without size_t"
 	}
         -re "type = class T5<int> \\{${ws}public:${ws}static int X;${ws}int x;${ws}int val;\r\n${ws}T5 \\(int\\);${ws}T5 \\(const class T5<int> &\\);${ws}void ~T5 \\(int\\);${ws}static void \\* new \\(unsigned long\\);${ws}static void delete \\(void ?\\*\\);${ws}int value \\((void|)\\);${ws}\\}\r\n$gdb_prompt $" {
-	    pass "ptype t5i<int> -- new with unsigned long"
+	    xfail "ptype t5i<int> -- new with unsigned long -- without size_t"
 	}
         -re "type = class T5<int> \{.*public:.*static int X;.*int x;.*int val;.*.*T5 \\(int\\);.*.*void ~T5 \\(int\\).*.*.*int value \\((void|)\\);.*\}.*$gdb_prompt $" { 
-            pass "ptype t5i"
+            xfail "ptype t5i -- without size_t"
         }
 	-re "type = class T5<int> \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}T5<int> & operator=\\(T5<int> const ?&\\);${ws}T5\\(int\\);${ws}T5\\((T5<int> const|const T5<int>) ?&\\);${ws}~T5\\((void|)\\);${ws}static void \\* operator new\\(unsigned( int| long)?\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}\}\r\n$gdb_prompt $" {
-	    pass "ptype t5i"
+	    xfail "ptype t5i -- without size_t"
 	}
 	-re "type = class T5<int> \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}T5\\(int\\);${ws}T5\\((T5<int> const|const T5<int>) ?&\\);${ws}~T5\\((void|)\\);${ws}static void \\* operator new\\(unsigned( int| long)?\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}T5<int> & operator=\\(T5<int> const ?&\\);${ws}\}\r\n$gdb_prompt $" {
-	    pass "ptype t5i"
+	    xfail "ptype t5i -- without size_t"
 	}
 	-re "type = class T5<int> \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;((${ws}T5<int> & operator=\\(T5<int> const ?&\\);)|(${ws}T5\\(int\\);)|(${ws}T5\\(T5<int> const ?&\\);)|(${ws}~T5\\((void|)\\);)|(${ws}static void \\* operator new\\(unsigned( int| long)?\\);)|(${ws}static void operator delete\\(void ?\\*\\);)|(${ws}int value\\((void|)\\);))*${ws}\}\r\n$gdb_prompt $" {
-	    pass "ptype t5i (obsolescent gcc or gdb)"
+	    xfail "ptype t5i (obsolescent gcc or gdb) -- without size_t"
 	}
-	-re "type = class T5<int> \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}void T5\\(int\\);${ws}void T5\\((T5<int> const|const T5<int>) ?&\\);${ws}~T5\\(int\\);${ws}static void \\* operator new\\(unsigned( int| long|)\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}\}\r\n$gdb_prompt $" {
+	-re "type = class T5<int> \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}void T5\\(int\\);${ws}void T5\\((T5<int> const|const T5<int>) ?&\\);${ws}~T5\\(int\\);${ws}static void \\* operator new\\((size_t|unsigned( int| long|))\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}\}\r\n$gdb_prompt $" {
 	    # This also triggers gdb/1113...
 	    kfail "gdb/1111" "ptype T5<int>"
+	    # Add here a PASS case when PR gdb/1111 gets fixed.
 	}
     }
 }
@@ -200,12 +195,32 @@ proc test_template_calls {} {
 }
 
 proc test_template_typedef {} {
+    global gdb_prompt
 
     gdb_test "print intBazOne::baz" ".*baz\\(int, int\\)>" \
 	"print method of template typedef"
 
-    gdb_test "print intBazOne::~Baz" ".*~Baz(\\(\\))?>" \
-	"print destructor of template typedef"
+    set test "print destructor of template typedef"
+    gdb_test_multiple "print intBazOne::~Baz" $test {
+	-re "~Baz(\\(\\))?>\r\n$gdb_prompt $" {
+	    pass $test
+	}
+	-re "There is no field named ~Baz\r\n$gdb_prompt $" {
+	    set test2 "verify GCC PR debug/51668"
+	    gdb_test_multiple "whatis intBazOne" $test2 {
+		-re "type = Baz<int, \\(char\\)'\\\\001'>\r\n$gdb_prompt $" {
+		    setup_xfail gcc/51668 "*-*-*"
+		    xfail $test
+		    pass $test2
+		}
+		-re "\r\n$gdb_prompt $" {
+		    # Some unexpected response.
+		    fail $test
+		    fail $test2
+		}
+	    }
+	}
+    }
 }
 
 proc test_template_args {} {
@@ -219,20 +234,6 @@ proc test_template_args {} {
 }
 
 proc do_tests {} {
-    global subdir
-    global objdir
-    global srcdir
-    global binfile
-    global gdb_prompt
-
-
-    # Start with a fresh gdb.
-
-    gdb_exit
-    gdb_start
-    gdb_reinitialize_dir $srcdir/$subdir
-    gdb_load $binfile
-
     # Change multiple-symbols to "ask" in order to get the multiple-choice
     # menu when breaking on overloaded methods.
     gdb_test_no_output "set multiple-symbols ask"
diff --git a/gdb/testsuite/gdb.cp/try_catch.exp b/gdb/testsuite/gdb.cp/try_catch.exp
index 474d674..f6810d0 100644
--- a/gdb/testsuite/gdb.cp/try_catch.exp
+++ b/gdb/testsuite/gdb.cp/try_catch.exp
@@ -18,35 +18,22 @@
 
 # This file is part of the gdb testsuite
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 if { [skip_stl_tests] } { continue }
 
 #
 # test running programs
 #
 
-set testfile "try_catch"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested try_catch.exp
-     return -1
+if [get_compiler_info "c++"] {
+    return -1
 }
 
-if [get_compiler_info ${binfile} "c++"] {
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint"
     continue
diff --git a/gdb/testsuite/gdb.cp/typedef-operator.exp b/gdb/testsuite/gdb.cp/typedef-operator.exp
index 1ec6af7..6aa603f 100644
--- a/gdb/testsuite/gdb.cp/typedef-operator.exp
+++ b/gdb/testsuite/gdb.cp/typedef-operator.exp
@@ -17,8 +17,9 @@
 
 if {[skip_cplus_tests]} { continue }
 
-set testfile "typedef-operator"
-if [prepare_for_testing $testfile $testfile $testfile.cc {c++ debug}] {
+standard_testfile .cc
+
+if {[prepare_for_testing $testfile $testfile $srcfile {c++ debug}]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.cp/userdef.exp b/gdb/testsuite/gdb.cp/userdef.exp
index 98bd105..199a579 100644
--- a/gdb/testsuite/gdb.cp/userdef.exp
+++ b/gdb/testsuite/gdb.cp/userdef.exp
@@ -19,10 +19,6 @@
 # source file "userdef.cc"
 #
 
-if $tracelevel then {
-        strace $tracelevel
-}
-
 if { [skip_stl_tests] } { continue }
 
 # On SPU this test fails because the executable exceeds local storage size.
@@ -30,22 +26,12 @@ if { [istarget "spu*-*-*"] } {
         return 0
 }
 
-set testfile "userdef"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested userdef.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint"
     continue
@@ -140,8 +126,8 @@ gdb_test "print one += 7" "\\\$\[0-9\]* = {x = 9, y = 10}"
 gdb_test "print two = one" "\\\$\[0-9\]* = {x = 9, y = 10}"
 
 # Check that GDB tolerates whitespace in operator names.
-gdb_test "break A2::'operator+'" ".*Breakpoint $decimal at.*"
-gdb_test "break A2::'operator +'" ".*Breakpoint $decimal at.*"
+gdb_test "break A2::operator+" ".*Breakpoint $decimal at.*"
+gdb_test "break A2::operator +" ".*Breakpoint $decimal at.*"
 
 # Check that GDB handles operator* correctly.
 gdb_test "print c" "\\\$\[0-9\]* = {m = {z = .*}}"
diff --git a/gdb/testsuite/gdb.cp/virtbase.exp b/gdb/testsuite/gdb.cp/virtbase.exp
index 191cf90..a6bb77b 100644
--- a/gdb/testsuite/gdb.cp/virtbase.exp
+++ b/gdb/testsuite/gdb.cp/virtbase.exp
@@ -17,20 +17,12 @@
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile "virtbase"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-     untested virtbase.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if {![runto_main]} then {
     perror "couldn't run to breakpoint"
     continue
@@ -72,11 +64,11 @@ gdb_test "print rtti_data" " = .*, data = 1\}"
 # value history to check the pointer value is not changed.  If it had
 # been changed, then we'd not be able to find the real type anymore.
 gdb_test "print virtual_middle_b" \
-    " = \\(Virtual \\*\\) $hex" \
+    " = \\(Virtual \\*\\) $hex <virtual_o>" \
     "print pointer to virtual base at non-zero offset of larger object"
 gdb_test "print $" \
-    " = \\(Virtual \\*\\) $hex" \
+    " = \\(Virtual \\*\\) $hex <virtual_o>" \
     "print same pointer from history value"
 gdb_test "print *$$" \
-    " = \\(Virtual\\) {<VirtualMiddleA> = {<VirtualBase> = {_vptr.VirtualBase = $hex, x = 0}, _vptr.VirtualMiddleA = $hex, y = \\{0 <repeats 300 times>\\}}, <VirtualMiddleB> = {_vptr.VirtualMiddleB = $hex, y = 0}, _vptr.Virtual = $hex, z = 0}" \
+    " = \\(Virtual\\) {<VirtualMiddleA> = {<VirtualBase> = {_vptr.VirtualBase = ${hex}( <vtable for Virtual.*>)?, x = 0}, _vptr.VirtualMiddleA = ${hex}( <vtable for Virtual.*>)?, y = \\{0 <repeats 300 times>\\}}, <VirtualMiddleB> = {_vptr.VirtualMiddleB = ${hex}( <vtable for Virtual.*>)?, y = 0}, _vptr.Virtual = ${hex}( <vtable for Virtual.*>)?, z = 0}" \
     "print whole pointed-to object, starting from the virtual base pointer"
diff --git a/gdb/testsuite/gdb.cp/virtfunc.cc b/gdb/testsuite/gdb.cp/virtfunc.cc
index eac3c9b..e319863 100644
--- a/gdb/testsuite/gdb.cp/virtfunc.cc
+++ b/gdb/testsuite/gdb.cp/virtfunc.cc
@@ -111,6 +111,7 @@ D   d;
 E   e;
 V   v;
 VB  vb;
+VA  va;
 
 
 A* 	pAa	= 	&a;
@@ -182,19 +183,9 @@ void test_calls()
         TEST(pEe->D::vg(), 102);
 	printf("Did %d tests, of which %d failed.\n", all_count, failed_count);
 }
-#ifdef usestubs
-extern "C" {
-  void set_debug_traps();
-  void breakpoint();
-};
-#endif
 
 int main()
 {
-#ifdef usestubs
-   set_debug_traps();
-   breakpoint();
-#endif
     init();
 
     e.w = 7;
diff --git a/gdb/testsuite/gdb.cp/virtfunc.exp b/gdb/testsuite/gdb.cp/virtfunc.exp
index ab8eceb..4621a74 100644
--- a/gdb/testsuite/gdb.cp/virtfunc.exp
+++ b/gdb/testsuite/gdb.cp/virtfunc.exp
@@ -19,21 +19,14 @@
 
 set nl		"\[\r\n\]+"
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if { [skip_cplus_tests] } { continue }
 
 load_lib "cp-support.exp"
 
-set testfile "virtfunc"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {c++ debug}] != "" } {
-     untested virtfunc.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
 proc test_ptype_of_classes {} {
@@ -230,16 +223,55 @@ proc test_virtual_calls {} {
     }
 }
 
-proc do_tests {} {
-    global srcdir subdir binfile
-    global gdb_prompt
+# A helper proc that creates a regular expression matching a
+# particular vtable.  NAME is the type name.  Each element of ARGS is
+# the name of a function in the vtable.
+
+proc make_one_vtable_result {name args} {
+    global hex
 
+    set nls "\[\r\n\]+"
 
-    gdb_exit
-    gdb_start
-    gdb_reinitialize_dir $srcdir/$subdir
-    gdb_load $binfile
+    set result "vtable for '${name}' @ $hex .subobject @ $hex.:$nls"
+    set count 0
+    foreach func $args {
+	append result ".${count}.: $hex <$func..>${nls}"
+	incr count
+    }
 
+    return $result
+}
+
+# Test "info vtbl".
+
+proc test_info_vtbl {} {
+    global hex
+
+    set nls "\[\r\n\]+"
+
+    set vt_A [make_one_vtable_result A A::f]
+    set vt_B [make_one_vtable_result B B::f]
+    set vt_V [make_one_vtable_result V VB::vvb V::vv]
+    set vt_V2 [make_one_vtable_result V VB::vvb "virtual thunk to E::vv"]
+    set vt_D [make_one_vtable_result D D::vg D::vd]
+    set vt_D2 [make_one_vtable_result D "non-virtual thunk to E::vg" D::vd]
+    set vt_E [make_one_vtable_result E E::f E::vg E::vv]
+
+    gdb_test "info vtbl a" "${vt_A}${vt_V}"
+    gdb_test "info vtbl b" "${vt_B}${vt_V}"
+    gdb_test "info vtbl c" "${vt_V}"
+    gdb_test "info vtbl d" "${vt_D}${vt_V}"
+    gdb_test "info vtbl e" "${vt_E}${vt_D2}${vt_V2}"
+    gdb_test "info vtbl pEe" "${vt_E}${vt_D2}${vt_V2}"
+
+    gdb_test "info vtbl" "Argument required.*"
+    gdb_test "info vtbl va" \
+	"This object does not have a virtual function table.*"
+    gdb_test "info vtbl all_count" \
+	"This object does not have a virtual function table.*"
+}
+
+proc do_tests {} {
     gdb_test_no_output "set language c++" ""
     gdb_test_no_output "set width 0" ""
 
@@ -248,6 +280,7 @@ proc do_tests {} {
 	return
     }
     test_ptype_of_classes
+    test_info_vtbl
 
     gdb_breakpoint test_calls
     gdb_test "continue" ".*Breakpoint .* test_calls.*" ""
diff --git a/gdb/testsuite/gdb.cp/virtfunc2.exp b/gdb/testsuite/gdb.cp/virtfunc2.exp
index 0039692..437aa7c 100644
--- a/gdb/testsuite/gdb.cp/virtfunc2.exp
+++ b/gdb/testsuite/gdb.cp/virtfunc2.exp
@@ -22,20 +22,12 @@ if { [skip_cplus_tests] } { continue }
 
 load_lib "cp-support.exp"
 
-set testfile "virtfunc2"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {c++ debug}] != "" } {
-     untested virtfunc2.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint"
     continue
@@ -53,6 +45,7 @@ gdb_test "print o2.do_print()"  "\\$\[0-9\]+ = 123456"
 gdb_test "print o2.do_print2()"  "\\$\[0-9\]+ = 654321"
 gdb_test "print o2.do_print3()"  "\\$\[0-9\]+ = 111111"
 
+gdb_test "print o" " = {<interface> = {.*_vptr.interface = $hex <vtable for Obj.*>}, <No data fields>}"
 
 gdb_exit
 return 0
diff --git a/gdb/testsuite/gdb.disasm/Makefile.in b/gdb/testsuite/gdb.disasm/Makefile.in
index 34492f2..f4830fa 100644
--- a/gdb/testsuite/gdb.disasm/Makefile.in
+++ b/gdb/testsuite/gdb.disasm/Makefile.in
@@ -8,6 +8,7 @@ all info install-info dvi install uninstall installcheck check:
 
 clean mostlyclean:
 	-rm -f *.o *.diff *~ *.bad core h8300s hppa mn10300 sh3
+	-rm -f *.dwo *.dwp
 
 distclean maintainer-clean realclean: clean
 	-rm -f Makefile config.status config.log gdb.log gdb.sum
diff --git a/gdb/testsuite/gdb.disasm/am33.exp b/gdb/testsuite/gdb.disasm/am33.exp
index 3486667..c06f00b 100644
--- a/gdb/testsuite/gdb.disasm/am33.exp
+++ b/gdb/testsuite/gdb.disasm/am33.exp
@@ -16,10 +16,6 @@
 
 # This file was written by Jeff Law. (law at cygnus.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if ![istarget "mn10300*-*-*"] {
     verbose "Tests ignored for all but mn10300 based targets."
     return
diff --git a/gdb/testsuite/gdb.disasm/h8300s.exp b/gdb/testsuite/gdb.disasm/h8300s.exp
index b1a5524..4a00f5d 100644
--- a/gdb/testsuite/gdb.disasm/h8300s.exp
+++ b/gdb/testsuite/gdb.disasm/h8300s.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Kazu Hirata. (kazu at hxi.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if ![istarget "h8300*-*-*"] {
     verbose "Tests ignored for all but h8300s based targets."
     return
diff --git a/gdb/testsuite/gdb.disasm/hppa.exp b/gdb/testsuite/gdb.disasm/hppa.exp
index 99c02a2..39ff779 100644
--- a/gdb/testsuite/gdb.disasm/hppa.exp
+++ b/gdb/testsuite/gdb.disasm/hppa.exp
@@ -16,10 +16,6 @@
 
 # This file was written by Jeff Law. (law at cs.utah.edu)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if ![istarget "hppa*-*-*"] {
     verbose "Tests ignored for all but hppa based targets."
     return
diff --git a/gdb/testsuite/gdb.disasm/mn10300.exp b/gdb/testsuite/gdb.disasm/mn10300.exp
index f001c23..1fc3ff0 100644
--- a/gdb/testsuite/gdb.disasm/mn10300.exp
+++ b/gdb/testsuite/gdb.disasm/mn10300.exp
@@ -16,10 +16,6 @@
 
 # This file was written by Jeff Law. (law at cygnus.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if ![istarget "mn10300*-*-*"] {
     verbose "Tests ignored for all but mn10300 based targets."
     return
diff --git a/gdb/testsuite/gdb.disasm/sh3.exp b/gdb/testsuite/gdb.disasm/sh3.exp
index c4fb7e7..0e702f5 100644
--- a/gdb/testsuite/gdb.disasm/sh3.exp
+++ b/gdb/testsuite/gdb.disasm/sh3.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Jeff Law. (law at cs.utah.edu)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if ![istarget "sh3*-*-*"] {
     verbose "Tests ignored for all but sh3 based targets."
     return
diff --git a/gdb/testsuite/gdb.disasm/t01_mov.exp b/gdb/testsuite/gdb.disasm/t01_mov.exp
index 110fa74..3f4c037 100644
--- a/gdb/testsuite/gdb.disasm/t01_mov.exp
+++ b/gdb/testsuite/gdb.disasm/t01_mov.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Michael Snyder (msnyder at redhat.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if ![istarget "h8300*-*-*"] {
     verbose "Tests ignored for all but h8300s based targets."
     return
diff --git a/gdb/testsuite/gdb.disasm/t02_mova.exp b/gdb/testsuite/gdb.disasm/t02_mova.exp
index b3dbcb7..c6d4740 100644
--- a/gdb/testsuite/gdb.disasm/t02_mova.exp
+++ b/gdb/testsuite/gdb.disasm/t02_mova.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Michael Snyder (msnyder at redhat.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if ![istarget "h8300*-*-*"] {
     verbose "Tests ignored for all but h8300s based targets."
     return
diff --git a/gdb/testsuite/gdb.disasm/t03_add.exp b/gdb/testsuite/gdb.disasm/t03_add.exp
index 175f2a1..7880778 100644
--- a/gdb/testsuite/gdb.disasm/t03_add.exp
+++ b/gdb/testsuite/gdb.disasm/t03_add.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Michael Snyder (msnyder at redhat.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if ![istarget "h8300*-*-*"] {
     verbose "Tests ignored for all but h8300s based targets."
     return
diff --git a/gdb/testsuite/gdb.disasm/t04_sub.exp b/gdb/testsuite/gdb.disasm/t04_sub.exp
index d1bc71e..3e8bfea 100644
--- a/gdb/testsuite/gdb.disasm/t04_sub.exp
+++ b/gdb/testsuite/gdb.disasm/t04_sub.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Michael Snyder (msnyder at redhat.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if ![istarget "h8300*-*-*"] {
     verbose "Tests ignored for all but h8300s based targets."
     return
diff --git a/gdb/testsuite/gdb.disasm/t05_cmp.exp b/gdb/testsuite/gdb.disasm/t05_cmp.exp
index a0ea60b..ecf031b 100644
--- a/gdb/testsuite/gdb.disasm/t05_cmp.exp
+++ b/gdb/testsuite/gdb.disasm/t05_cmp.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Michael Snyder (msnyder at redhat.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if ![istarget "h8300*-*-*"] {
     verbose "Tests ignored for all but h8300s based targets."
     return
diff --git a/gdb/testsuite/gdb.disasm/t06_ari2.exp b/gdb/testsuite/gdb.disasm/t06_ari2.exp
index 4cd4188..c013b5a 100644
--- a/gdb/testsuite/gdb.disasm/t06_ari2.exp
+++ b/gdb/testsuite/gdb.disasm/t06_ari2.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Michael Snyder (msnyder at redhat.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if ![istarget "h8300*-*-*"] {
     verbose "Tests ignored for all but h8300s based targets."
     return
diff --git a/gdb/testsuite/gdb.disasm/t07_ari3.exp b/gdb/testsuite/gdb.disasm/t07_ari3.exp
index 6a2a0fe..a585134 100644
--- a/gdb/testsuite/gdb.disasm/t07_ari3.exp
+++ b/gdb/testsuite/gdb.disasm/t07_ari3.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Michael Snyder (msnyder at redhat.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if ![istarget "h8300*-*-*"] {
     verbose "Tests ignored for all but h8300s based targets."
     return
diff --git a/gdb/testsuite/gdb.disasm/t08_or.exp b/gdb/testsuite/gdb.disasm/t08_or.exp
index 1c27b19..9b89f71 100644
--- a/gdb/testsuite/gdb.disasm/t08_or.exp
+++ b/gdb/testsuite/gdb.disasm/t08_or.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Michael Snyder (msnyder at redhat.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if ![istarget "h8300*-*-*"] {
     verbose "Tests ignored for all but h8300s based targets."
     return
diff --git a/gdb/testsuite/gdb.disasm/t09_xor.exp b/gdb/testsuite/gdb.disasm/t09_xor.exp
index f5794fe..63b9887 100644
--- a/gdb/testsuite/gdb.disasm/t09_xor.exp
+++ b/gdb/testsuite/gdb.disasm/t09_xor.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Michael Snyder (msnyder at redhat.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if ![istarget "h8300*-*-*"] {
     verbose "Tests ignored for all but h8300s based targets."
     return
diff --git a/gdb/testsuite/gdb.disasm/t10_and.exp b/gdb/testsuite/gdb.disasm/t10_and.exp
index 97ea0a5..516cc85 100644
--- a/gdb/testsuite/gdb.disasm/t10_and.exp
+++ b/gdb/testsuite/gdb.disasm/t10_and.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Michael Snyder (msnyder at redhat.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if ![istarget "h8300*-*-*"] {
     verbose "Tests ignored for all but h8300s based targets."
     return
diff --git a/gdb/testsuite/gdb.disasm/t11_logs.exp b/gdb/testsuite/gdb.disasm/t11_logs.exp
index 75fd7f7..3baa28e 100644
--- a/gdb/testsuite/gdb.disasm/t11_logs.exp
+++ b/gdb/testsuite/gdb.disasm/t11_logs.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Michael Snyder (msnyder at redhat.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if ![istarget "h8300*-*-*"] {
     verbose "Tests ignored for all but h8300s based targets."
     return
diff --git a/gdb/testsuite/gdb.disasm/t12_bit.exp b/gdb/testsuite/gdb.disasm/t12_bit.exp
index a03b5d6..8ff157b 100644
--- a/gdb/testsuite/gdb.disasm/t12_bit.exp
+++ b/gdb/testsuite/gdb.disasm/t12_bit.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Michael Snyder (msnyder at redhat.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if ![istarget "h8300*-*-*"] {
     verbose "Tests ignored for all but h8300s based targets."
     return
diff --git a/gdb/testsuite/gdb.disasm/t13_otr.exp b/gdb/testsuite/gdb.disasm/t13_otr.exp
index 21904d8..ece053f 100644
--- a/gdb/testsuite/gdb.disasm/t13_otr.exp
+++ b/gdb/testsuite/gdb.disasm/t13_otr.exp
@@ -15,10 +15,6 @@
 
 # This file was written by Michael Snyder (msnyder at redhat.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if ![istarget "h8300*-*-*"] {
     verbose "Tests ignored for all but h8300s based targets."
     return
diff --git a/gdb/testsuite/gdb.dwarf2/Makefile.in b/gdb/testsuite/gdb.dwarf2/Makefile.in
index 4a28738..f89f162 100644
--- a/gdb/testsuite/gdb.dwarf2/Makefile.in
+++ b/gdb/testsuite/gdb.dwarf2/Makefile.in
@@ -30,6 +30,7 @@ all info install-info dvi install uninstall installcheck check:
 clean mostlyclean:
 	-rm -f *~ *.o a.out *.x *.ci *.tmp
 	-rm -f core core.coremaker coremaker.core corefile
+	-rm -f *.dwo *.dwp
 	-rm -f $(EXECUTABLES)
 
 distclean maintainer-clean realclean: clean
diff --git a/gdb/testsuite/gdb.dwarf2/callframecfa.exp b/gdb/testsuite/gdb.dwarf2/callframecfa.exp
index f527b14..7b0fc8d 100644
--- a/gdb/testsuite/gdb.dwarf2/callframecfa.exp
+++ b/gdb/testsuite/gdb.dwarf2/callframecfa.exp
@@ -25,20 +25,13 @@ if {![is_x86_like_target]} {
     return 0  
 }
 
-set testfile "callframecfa"
-set srcfile ${testfile}.S
-set binfile ${objdir}/${subdir}/${testfile}.x
+standard_testfile .S
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable \
-       [list {additional_flags=-nostdlib}]] != "" } {
+if {[prepare_for_testing $testfile.exp $testfile $srcfile \
+	 [list {additional_flags=-nostdlib}]]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto_main] {
     return -1
 }
diff --git a/gdb/testsuite/gdb.dwarf2/dup-psym.exp b/gdb/testsuite/gdb.dwarf2/dup-psym.exp
index ec29535..9ecd5e9 100644
--- a/gdb/testsuite/gdb.dwarf2/dup-psym.exp
+++ b/gdb/testsuite/gdb.dwarf2/dup-psym.exp
@@ -21,27 +21,13 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dup-psym"
-set srcfile ${testfile}.S
-set binfile ${objdir}/${subdir}/${testfile}.x
+standard_testfile .S
 
-if  { [gdb_compile "${srcdir}/${subdir}/main.c" "main.o" object {debug}] != "" } {
+if {[prepare_for_testing_full $testfile.exp \
+	 [list $testfile {debug} main.c debug $srcfile nodebug]]} {
     return -1
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${testfile}.o" object {nodebug}] != "" } {
-    return -1
-}
-
-if  { [gdb_compile "${testfile}.o main.o" "${binfile}" executable {debug}] != "" } {
-    return -1
-}
-
-gdb_exit
-gdb_start
-# Note that we do not change the sources search path,
-gdb_load ${binfile}
-
 set test "info sources should contain only one reference to file1.txt"
 gdb_test_multiple "info sources" "$test" {
   -re "file1\\.txt.*file1\\.txt.*$gdb_prompt $" {
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.S b/gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.S
index fa38819..d659a5b 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.S
+++ b/gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.S
@@ -15,10 +15,10 @@
 
 	.section	.debug_info
 debug_start:
-	.long	debug_end - 1f	/* Length of Compilation Unit Info */
+	.4byte	debug_end - 1f	/* Length of Compilation Unit Info */
 1:
 	.2byte	0x3	/* DWARF version number */
-	.long	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
+	.4byte	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
 	.byte	0x4	/* Pointer Size (in bytes) */
 	.uleb128 0x1	/* (DIE (0xb) DW_TAG_compile_unit) */
 	.ascii "GNU C 4.4.3\0"	/* DW_AT_producer */
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.exp b/gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.exp
index 5a3ccee..4e87217 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.exp
@@ -19,10 +19,8 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-ada-ffffffff"
-set srcfile ${testfile}.S
-set executable ${testfile}.x
-set binfile ${objdir}/${subdir}/${executable}
+standard_testfile .S
+set executable ${testfile}
 
 if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {}] != "" } {
     return -1
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-anonymous-func.exp b/gdb/testsuite/gdb.dwarf2/dw2-anonymous-func.exp
index 5430399..82fbb2a 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-anonymous-func.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-anonymous-func.exp
@@ -21,28 +21,14 @@ if {![dwarf2_support]} {
     return 0
 }
 
-set testfile "dw2-anonymous-func"
+standard_testfile .S
 set dwarf_srcfile "file1.txt"
-set srcfile ${testfile}.S
-set binfile ${objdir}/${subdir}/${testfile}.x
 
-if  { [gdb_compile "${srcdir}/${subdir}/main.c" "main.o" object {debug}] != "" } {
+if {[prepare_for_testing_full $testfile.exp \
+	 [list $testfile debug main.c debug $srcfile nodebug]]} {
     return -1
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${testfile}.o" object {nodebug}] != "" } {
-    return -1
-}
-
-if  { [gdb_compile "${testfile}.o main.o" "${binfile}" executable {debug}] != "" } {
-    return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 # Force the debugger to create the file1.txt symtab, to make sure that
 # the debugger does not crash doing so.
 gdb_test "list file1.txt:1" "File 1 Line 1.*File 1 Line 8" "list file1.txt"
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.S b/gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.S
index 932c433..d0f84ae 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.S
+++ b/gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.S
@@ -15,10 +15,10 @@
 
 	.section	.debug_info
 debug_start:
-	.long	debug_end - 1f	/* Length of Compilation Unit Info */
+	.4byte	debug_end - 1f	/* Length of Compilation Unit Info */
 1:
 	.2byte	0x3	/* DWARF version number */
-	.long	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
+	.4byte	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
 	.byte	0x4	/* Pointer Size (in bytes) */
 	.uleb128 0x1	/* (DIE (0xb) DW_TAG_compile_unit) */
 	.ascii "GNU C 4.4.3\0"	/* DW_AT_producer */
@@ -27,12 +27,12 @@ debug_start:
 	.uleb128 0x4	/* (DIE (0x3c) DW_TAG_subprogram) */
 	.ascii "f\0"	/* DW_AT_name */
 /* Value 0 would require has_section_at_zero != 0 (which is true, though).  */
-	.long	1	/* DW_AT_low_pc */
-	.long	2	/* DW_AT_high_pc */
+	.4byte	1	/* DW_AT_low_pc */
+	.4byte	2	/* DW_AT_high_pc */
 	.byte	0x1	/* DW_AT_prototyped */
 	.uleb128 0x5	/* (DIE (0x42) DW_TAG_formal_parameter) */
 /* Invalid value.  */
-	.long	0x0	/* DW_AT_type */
+	.4byte	0x0	/* DW_AT_type */
 	.byte	0x0	/* end of children of DIE 0x3c */
 	.byte	0x0	/* end of children of DIE 0xb */
 debug_end:
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.exp b/gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.exp
index 91d86ce..6f8a764 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.exp
@@ -19,10 +19,8 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-bad-parameter-type"
-set srcfile ${testfile}.S
-set executable ${testfile}.x
-set binfile ${objdir}/${subdir}/${executable}
+standard_testfile .S
+set executable ${testfile}
 
 # First try referencing DW_AT_frame_base which is not defined.
 if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {}] != "" } {
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-basic.exp b/gdb/testsuite/gdb.dwarf2/dw2-basic.exp
index 9100eb7..fa11ebe 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-basic.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-basic.exp
@@ -21,28 +21,14 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-basic"
+standard_testfile .S
 set dwarf_srcfile "file1.txt"
-set srcfile ${testfile}.S
-set binfile ${objdir}/${subdir}/${testfile}.x
 
-if  { [gdb_compile "${srcdir}/${subdir}/main.c" "main.o" object {debug}] != "" } {
+if {[prepare_for_testing_full $testfile.exp \
+	 [list $testfile debug main.c debug $srcfile nodebug]]} {
     return -1
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${testfile}.o" object {nodebug}] != "" } {
-    return -1
-}
-
-if  { [gdb_compile "${testfile}.o main.o" "${binfile}" executable {debug}] != "" } {
-    return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 set remote_dwarf_srcfile [remote_download host ${srcdir}/${subdir}/${dwarf_srcfile}]
 
 gdb_test_no_output "set listsize 1"
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.exp b/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.exp
index 8f58830..3559e7c 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.exp
@@ -19,9 +19,10 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-case-insensitive"
+standard_testfile .c dw2-case-insensitive-debug.S
 
-if { [prepare_for_testing ${testfile}.exp ${testfile} [list ${testfile}.c ${testfile}-debug.S] {nodebug}] } {
+if { [prepare_for_testing ${testfile}.exp ${testfile} \
+	  [list $srcfile $srcfile2] {nodebug}] } {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-compressed.exp b/gdb/testsuite/gdb.dwarf2/dw2-compressed.exp
index aec50a9..cfb4f33 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-compressed.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-compressed.exp
@@ -21,28 +21,16 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-compressed"
+standard_testfile .S
 set dwarf_srcfile "file1.txt"
-set srcfile ${testfile}.S
-set binfile ${objdir}/${subdir}/${testfile}.x
 
-if  { [gdb_compile "${srcdir}/${subdir}/main.c" "main-ndebug.o" object -g0] != "" } {
+if {[prepare_for_testing_full $testfile.exp \
+	 [list $testfile \
+	      {debug additional_flags=-static additional_flags=-nostdlib} \
+	      main.c -g0 $srcfile nodebug]]} {
     return -1
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${testfile}.o" object {nodebug}] != "" } {
-    return -1
-}
-
-if  { [gdb_compile "${testfile}.o main-ndebug.o -static -nostdlib" "${binfile}" executable {debug}] != "" } {
-    return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 set remote_dwarf_srcfile [remote_download host ${srcdir}/${subdir}/${dwarf_srcfile}]
 
 gdb_test_no_output "set listsize 1"
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-const.exp b/gdb/testsuite/gdb.dwarf2/dw2-const.exp
index 6e2dc42..9482057 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-const.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-const.exp
@@ -19,24 +19,13 @@ if {![dwarf2_support]} {
     return 0
 }
 
-set testfile "dw2-const"
-set srcfile ${testfile}.S
-set binfile ${objdir}/${subdir}/${testfile}.x
+standard_testfile .S
 
-if  { [gdb_compile "${srcdir}/${subdir}/main.c" "main.o" object {debug}] != "" } {
+if {[prepare_for_testing_full $testfile.exp \
+	 [list $testfile debug main.c debug $srcfile nodebug]]} {
     return -1
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${testfile}.o" object {nodebug}] != "" } {
-    return -1
-}
-
-if  { [gdb_compile "${testfile}.o main.o" "${binfile}" executable {debug}] != "" } {
-    return -1
-}
-
-clean_restart ${testfile}.x
-
 gdb_test "print twelve" "= 12"
 
 gdb_test "print/x val8" " = 0xffffffff00000000"
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.exp b/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.exp
index 8f6aebe..34e1da4 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.exp
@@ -25,8 +25,10 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-cp-infcall-ref-static"
-if { [prepare_for_testing ${testfile}.exp ${testfile} [list ${testfile}-main.c ${testfile}.S] {}] } {
+standard_testfile .S dw2-cp-infcall-ref-static-main.c
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} \
+	  [list $srcfile2 $srcfile] {}] } {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-cu-size.exp b/gdb/testsuite/gdb.dwarf2/dw2-cu-size.exp
index 3c669a4..10dd3ec 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-cu-size.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-cu-size.exp
@@ -24,25 +24,11 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-cu-size"
-set srcfile ${testfile}.S
-set binfile ${objdir}/${subdir}/${testfile}.x
+standard_testfile .S
 
-if  { [gdb_compile "${srcdir}/${subdir}/main.c" "main.o" object {debug}] != "" } {
+if {[prepare_for_testing_full $testfile.exp \
+	 [list $testfile debug main.c debug $srcfile nodebug]]} {
     return -1
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${testfile}.o" object {nodebug}] != "" } {
-    return -1
-}
-
-if  { [gdb_compile "${testfile}.o main.o" "${binfile}" executable {debug}] != "" } {
-    return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 gdb_test "ptype noloc" "type = const int"
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.S b/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.S
index 1c8164b..392fe54 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.S
+++ b/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.S
@@ -42,7 +42,7 @@
 	.4byte	.Lcu1_end - .Lcu1_start	/* Length of Compilation Unit Info */
 .Lcu1_start:
 	.2byte	0x3	/* DWARF version number */
-	.long	.Labbrev1_begin	/* Offset Into Abbrev. Section */
+	.4byte	.Labbrev1_begin	/* Offset Into Abbrev. Section */
 	.byte	0x4	/* Pointer Size (in bytes) */
 
 .Ldie_b:
@@ -50,12 +50,12 @@
 	.ascii	"GNU C++ 4.4.3 20100127 (Red Hat 4.4.3-4)\0"	/* DW_AT_producer */
 	.byte	0x4	/* DW_AT_language */
 	.ascii	"duplicate-type.cc\0"	/* DW_AT_name */
-	.long	.Ldebug_line0	/* DW_AT_stmt_list */
+	.4byte	.Ldebug_line0	/* DW_AT_stmt_list */
 
 .Ldie_38:
 	.uleb128 0x3	/* (DIE (0x38) DW_TAG_typedef) */
 	.ascii	"size_t\0"	/* DW_AT_name */
-	.long	OFFSET (43)	/* DW_AT_type */
+	.4byte	OFFSET (43)	/* DW_AT_type */
 
 .Ldie_43:
 	.uleb128 0x2	/* (DIE (0x43) DW_TAG_base_type) */
@@ -66,7 +66,7 @@
 .Ldie_4a:
 	.uleb128 0x4	/* (DIE (0x4a) DW_TAG_namespace) */
 	.ascii "std\0"	/* DW_AT_name */
-	.long	OFFSET (143)	/* DW_AT_sibling */
+	.4byte	OFFSET (143)	/* DW_AT_sibling */
 
 .Ldie_70:
 	.uleb128 0x8	/* (DIE (0x70) DW_TAG_class_type) */
@@ -77,7 +77,7 @@
 	.uleb128 0x9	/* (DIE (0x76) DW_TAG_structure_type) */
 	.ascii	"_Vector_base<a::b, std::allocator<a::b> >\0"	/* DW_AT_name */
 	.byte	0x1	/* DW_AT_declaration */
-	.long	OFFSET (f7)	/* DW_AT_sibling */
+	.4byte	OFFSET (f7)	/* DW_AT_sibling */
 
 .Ldie_80:
 	.uleb128 0xa	/* (DIE (0x80) DW_TAG_structure_type) */
@@ -86,7 +86,7 @@
 
 .Ldie_88:
 	.uleb128 0xb	/* (DIE (0x88) DW_TAG_inheritance) */
-	.long	OFFSET (3e0)	/* DW_AT_type */
+	.4byte	OFFSET (3e0)	/* DW_AT_type */
 	.sleb128 0	/* DW_AT_data_member_location */
 	.byte	0x1	/* DW_AT_accessibility */
 	.byte	0x0	/* end of children of DIE 0x80 */
@@ -117,7 +117,7 @@
 .Ldie_1c6:
 	.uleb128 0x17	/* (DIE (0x1c6) DW_TAG_pointer_type) */
 	.byte	0x8	/* DW_AT_byte_size */
-	.long	OFFSET (1cc)	/* DW_AT_type */
+	.4byte	OFFSET (1cc)	/* DW_AT_type */
 
 .Ldie_1cc:
 	.uleb128 0x18	/* (DIE (0x1cc) DW_TAG_const_type) */
@@ -132,13 +132,13 @@
 	.uleb128 0x1b	/* (DIE (0x221) DW_TAG_class_type) */
 	.ascii "a\0"	/* DW_AT_name */
 	.byte	0x18	/* DW_AT_byte_size */
-	.long	OFFSET (277)	/* DW_AT_sibling */
+	.4byte	OFFSET (277)	/* DW_AT_sibling */
 
 .Ldie_22b:
 	.uleb128 0x1b	/* (DIE (0x22b) DW_TAG_class_type) */
 	.ascii "b\0"	/* DW_AT_name */
 	.byte	0x1	/* DW_AT_byte_size */
-	.long	OFFSET (244)	/* DW_AT_sibling */
+	.4byte	OFFSET (244)	/* DW_AT_sibling */
 
 .Ldie_235:
 	.uleb128 0x1c	/* (DIE (0x235) DW_TAG_subprogram) */
@@ -148,7 +148,7 @@
 
 .Ldie_23c:
 	.uleb128 0xe	/* (DIE (0x23c) DW_TAG_formal_parameter) */
-	.long	OFFSET (277)	/* DW_AT_type */
+	.4byte	OFFSET (277)	/* DW_AT_type */
 	.byte	0x1	/* DW_AT_artificial */
 	.byte	0x0	/* end of children of DIE 0x235 */
 	.byte	0x0	/* end of children of DIE 0x22b */
@@ -156,7 +156,7 @@
 .Ldie_244:
 	.uleb128 0x1d	/* (DIE (0x244) DW_TAG_member) */
 	.ascii	"list\0"	/* DW_AT_name */
-	.long	OFFSET (59d)	/* DW_AT_type */
+	.4byte	OFFSET (59d)	/* DW_AT_type */
 	.sleb128 0	/* DW_AT_data_member_location */
 	.byte	0x3	/* DW_AT_accessibility */
 
@@ -166,11 +166,11 @@
 	.ascii "a\0"	/* DW_AT_name */
 	.byte	0x1	/* DW_AT_artificial */
 	.byte	0x1	/* DW_AT_declaration */
-	.long	OFFSET (262)	/* DW_AT_sibling */
+	.4byte	OFFSET (262)	/* DW_AT_sibling */
 
 .Ldie_25b:
 	.uleb128 0xe	/* (DIE (0x25b) DW_TAG_formal_parameter) */
-	.long	OFFSET (b61)	/* DW_AT_type */
+	.4byte	OFFSET (b61)	/* DW_AT_type */
 	.byte	0x1	/* DW_AT_artificial */
 	.byte	0x0	/* end of children of DIE 0x251 */
 
@@ -183,12 +183,12 @@
 
 .Ldie_269:
 	.uleb128 0xe	/* (DIE (0x269) DW_TAG_formal_parameter) */
-	.long	OFFSET (b61)	/* DW_AT_type */
+	.4byte	OFFSET (b61)	/* DW_AT_type */
 	.byte	0x1	/* DW_AT_artificial */
 
 .Ldie_26f:
 	.uleb128 0xe	/* (DIE (0x26f) DW_TAG_formal_parameter) */
-	.long	OFFSET (19f)	/* DW_AT_type */
+	.4byte	OFFSET (19f)	/* DW_AT_type */
 	.byte	0x1	/* DW_AT_artificial */
 	.byte	0x0	/* end of children of DIE 0x262 */
 	.byte	0x0	/* end of children of DIE 0x221 */
@@ -196,143 +196,143 @@
 .Ldie_277:
 	.uleb128 0x17	/* (DIE (0x277) DW_TAG_pointer_type) */
 	.byte	0x4	/* DW_AT_byte_size */
-	.long	OFFSET (22b)	/* DW_AT_type */
+	.4byte	OFFSET (22b)	/* DW_AT_type */
 
 .Ldie_27d:
 	.uleb128 0x20	/* (DIE (0x27d) DW_TAG_class_type) */
-	.long	OFFSET (162)	/* DW_AT_specification */
+	.4byte	OFFSET (162)	/* DW_AT_specification */
 	.byte	0x1	/* DW_AT_byte_size */
-	.long	OFFSET (3b2)	/* DW_AT_sibling */
+	.4byte	OFFSET (3b2)	/* DW_AT_sibling */
 
 .Ldie_2d0:
 	.uleb128 0x21	/* (DIE (0x2d0) DW_TAG_subprogram) */
 	.byte	0x1	/* DW_AT_external */
 	.ascii	"address\0"	/* DW_AT_name */
-	.long	OFFSET (277)	/* DW_AT_type */
+	.4byte	OFFSET (277)	/* DW_AT_type */
 	.byte	0x1	/* DW_AT_declaration */
-	.long	OFFSET (3b2)	/* DW_AT_sibling */
+	.4byte	OFFSET (3b2)	/* DW_AT_sibling */
 
 .Ldie_2e5:
 	.uleb128 0xe	/* (DIE (0x2e5) DW_TAG_formal_parameter) */
-	.long	OFFSET (3da)	/* DW_AT_type */
+	.4byte	OFFSET (3da)	/* DW_AT_type */
 	.byte	0x1	/* DW_AT_artificial */
 
 .Ldie_2eb:
 	.uleb128 0xf	/* (DIE (0x2eb) DW_TAG_formal_parameter) */
-	.long	OFFSET (3bd)	/* DW_AT_type */
+	.4byte	OFFSET (3bd)	/* DW_AT_type */
 	.byte	0x0	/* end of children of DIE 0x2d0 */
 	.byte	0x0	/* end of children of DIE 0x27d */
 
 .Ldie_3b2:
 	.uleb128 0x17	/* (DIE (0x3b2) DW_TAG_pointer_type) */
 	.byte	0x4	/* DW_AT_byte_size */
-	.long	OFFSET (3b8)	/* DW_AT_type */
+	.4byte	OFFSET (3b8)	/* DW_AT_type */
 
 .Ldie_3b8:
 	.uleb128 0x19	/* (DIE (0x3b8) DW_TAG_const_type) */
-	.long	OFFSET (22b)	/* DW_AT_type */
+	.4byte	OFFSET (22b)	/* DW_AT_type */
 
 .Ldie_3bd:
 	.uleb128 0x22	/* (DIE (0x3bd) DW_TAG_reference_type) */
 	.byte	0x4	/* DW_AT_byte_size */
-	.long	OFFSET (22b)	/* DW_AT_type */
+	.4byte	OFFSET (22b)	/* DW_AT_type */
 
 .Ldie_3d5:
 	.uleb128 0x19	/* (DIE (0x3d5) DW_TAG_const_type) */
-	.long	OFFSET (27d)	/* DW_AT_type */
+	.4byte	OFFSET (27d)	/* DW_AT_type */
 
 .Ldie_3da:
 	.uleb128 0x17	/* (DIE (0x3da) DW_TAG_pointer_type) */
 	.byte	0x4	/* DW_AT_byte_size */
-	.long	OFFSET (3d5)	/* DW_AT_type */
+	.4byte	OFFSET (3d5)	/* DW_AT_type */
 
 .Ldie_3e0:
 	.Uleb128 0x20	/* (DIE (0x3e0) DW_TAG_class_type) */
-	.long	OFFSET (70)	/* DW_AT_specification */
+	.4byte	OFFSET (70)	/* DW_AT_specification */
 	.byte	0x1	/* DW_AT_byte_size */
-	.long	OFFSET (44e)	/* DW_AT_sibling */
+	.4byte	OFFSET (44e)	/* DW_AT_sibling */
 
 .Ldie_3ec:
 	.uleb128 0xb	/* (DIE (0x3ec) DW_TAG_inheritance) */
-	.long	OFFSET (27d)	/* DW_AT_type */
+	.4byte	OFFSET (27d)	/* DW_AT_type */
 	.sleb128 0	/* DW_AT_data_member_location */
 	.byte	0x1	/* DW_AT_accessibility */
 	.byte	0x0	/* end of children of DIE 0x3e0 */
 
 .Ldie_44e:
 	.uleb128 0x1a	/* (DIE (0x44e) DW_TAG_structure_type) */
-	.long	OFFSET (76)	/* DW_AT_specification */
+	.4byte	OFFSET (76)	/* DW_AT_specification */
 	.byte	0x18	/* DW_AT_byte_size */
-	.long	OFFSET (505)	/* DW_AT_sibling */
+	.4byte	OFFSET (505)	/* DW_AT_sibling */
 
 .Ldie_505:
 	.uleb128 0x11	/* (DIE (0x505) DW_TAG_subprogram) */
 	.ascii	"~_Vector_base\0"	/* DW_AT_name */
 	.byte	0x1	/* DW_AT_declaration */
-	.long	OFFSET (51f)	/* DW_AT_sibling */
+	.4byte	OFFSET (51f)	/* DW_AT_sibling */
 
 .Ldie_512:
 	.uleb128 0xe	/* (DIE (0x512) DW_TAG_formal_parameter) */
-	.long	OFFSET (58c)	/* DW_AT_type */
+	.4byte	OFFSET (58c)	/* DW_AT_type */
 	.byte	0x1	/* DW_AT_artificial */
 
 .Ldie_518:
 	.uleb128 0xf	/* (DIE (0x518) DW_TAG_formal_parameter) */
-	.long	OFFSET (19f)	/* DW_AT_type */
+	.4byte	OFFSET (19f)	/* DW_AT_type */
 	.byte	0x0	/* end of children of DIE 0x505 */
 
 .Ldie_51f:
 	.uleb128 0x23	/* (DIE (0x51f) DW_TAG_subprogram) */
 	.byte	0x1	/* DW_AT_external */
 	.ascii	"_M_allocate\0"	/* DW_AT_name */
-	.long	OFFSET (277)	/* DW_AT_type */
+	.4byte	OFFSET (277)	/* DW_AT_type */
 	.byte	0x1	/* DW_AT_declaration */
-	.long	OFFSET (540)	/* DW_AT_sibling */
+	.4byte	OFFSET (540)	/* DW_AT_sibling */
 
 .Ldie_540:
 	.uleb128 0x11	/* (DIE (0x540) DW_TAG_subprogram) */
 	.ascii	"_M_deallocate\0"	/* DW_AT_name */
 	.byte	0x1	/* DW_AT_declaration */
-	.long	OFFSET (562)	/* DW_AT_sibling */
+	.4byte	OFFSET (562)	/* DW_AT_sibling */
 
 .Ldie_551:
 	.uleb128 0xe	/* (DIE (0x551) DW_TAG_formal_parameter) */
-	.long	OFFSET (58c)	/* DW_AT_type */
+	.4byte	OFFSET (58c)	/* DW_AT_type */
 	.byte	0x1	/* DW_AT_artificial */
 
 .Ldie_557:
 	.uleb128 0xf	/* (DIE (0x557) DW_TAG_formal_parameter) */
-	.long	OFFSET (277)	/* DW_AT_type */
+	.4byte	OFFSET (277)	/* DW_AT_type */
 
 .Ldie_55c:
 	.uleb128 0xf	/* (DIE (0x55c) DW_TAG_formal_parameter) */
-	.long	OFFSET (43)	/* DW_AT_type */
+	.4byte	OFFSET (43)	/* DW_AT_type */
 	.byte	0x0	/* end of children of DIE 0x540 */
 
 .Ldie_562:
 	.uleb128 0x5	/* (DIE (0x562) DW_TAG_imported_declaration) */
-	.long	OFFSET (51f)	/* DW_AT_import */
+	.4byte	OFFSET (51f)	/* DW_AT_import */
 	.byte	0x0	/* end of children of DIE 0x44e */
 
 .Ldie_586:
 	.uleb128 0x22	/* (DIE (0x586) DW_TAG_reference_type) */
 	.byte	0x4	/* DW_AT_byte_size */
-	.long	OFFSET (3e0)	/* DW_AT_type */
+	.4byte	OFFSET (3e0)	/* DW_AT_type */
 
 .Ldie_58c:
 	.uleb128 0x17	/* (DIE (0x58c) DW_TAG_pointer_type) */
 	.byte	0x8	/* DW_AT_byte_size */
-	.long	OFFSET (44e)	/* DW_AT_type */
+	.4byte	OFFSET (44e)	/* DW_AT_type */
 
 .Ldie_59d:
 	.uleb128 0x20	/* (DIE (0x59d) DW_TAG_class_type) */
-	.long	OFFSET (f7)	/* DW_AT_specification */
+	.4byte	OFFSET (f7)	/* DW_AT_specification */
 	.byte	0x18	/* DW_AT_byte_size */
-	.long	OFFSET (b44)	/* DW_AT_sibling */
+	.4byte	OFFSET (b44)	/* DW_AT_sibling */
 
 .Ldie_5a9:
 	.uleb128 0xb	/* (DIE (0x5a9) DW_TAG_inheritance) */
-	.long	OFFSET (44e)	/* DW_AT_type */
+	.4byte	OFFSET (44e)	/* DW_AT_type */
 	.sleb128 0	/* DW_AT_data_member_location */
 	.byte	0x2	/* DW_AT_accessibility */
 	.byte	0x0	/* end of children of DIE 0x59d */
@@ -340,12 +340,12 @@
 .Ldie_b44:
 	.uleb128 0x17	/* (DIE (0xb44) DW_TAG_pointer_type) */
 	.byte	0x8	/* DW_AT_byte_size */
-	.long	OFFSET (59d) /* DW_AT_type */
+	.4byte	OFFSET (59d) /* DW_AT_type */
 
 .Ldie_b61:
 	.uleb128 0x17	/* (DIE (0xb61) DW_TAG_pointer_type) */
 	.byte	0x4	/* DW_AT_byte_size */
-	.long	OFFSET (221) /* DW_AT_type */
+	.4byte	OFFSET (221) /* DW_AT_type */
 	.byte	0x0	/* end of children of DIE 0xb */
 .Lcu1_end:
 
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.exp b/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.exp
index 5fa4075..b85d8ed 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.exp
@@ -22,15 +22,12 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-double-set-die-type"
-set srcfile "$testfile.S"
-set executable "$testfile.x"
+standard_testfile .S
 
-if  { [gdb_compile [file join $srcdir $subdir $srcfile] \
-	   [file join $objdir $subdir $executable] \
+if  { [gdb_compile [file join $srcdir $subdir $srcfile] $binfile \
 	   object {nodebug}] != "" } {
     return -1
 }
 
-clean_restart $executable
+clean_restart $testfile
 gdb_test "ptype a" "type = class .*"
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-empty-namespace.exp b/gdb/testsuite/gdb.dwarf2/dw2-empty-namespace.exp
index 1fb5541..02f2fcf 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-empty-namespace.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-empty-namespace.exp
@@ -21,15 +21,14 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-empty-namespace"
-set srcfile ${testfile}.S
-set executable ${testfile}.x
+standard_testfile .S
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objdir}/${subdir}/${executable}" object {nodebug}] != "" } {
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" $binfile \
+	   object {nodebug}] != "" } {
     return -1
 }
 
-clean_restart $executable
+clean_restart $testfile
 
 # `p var' below can work without identified DWARF DIE just based on its ELF symbol.
 # Catch it here as `type = <data variable, no debug info>'.
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.S b/gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.S
index 21bb249..0dc9164 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.S
+++ b/gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.S
@@ -20,10 +20,10 @@ pc_end:
 
 	.section	.debug_info
 d:
-	.long	.Ldebug_info_end - 1f	/* Length of Compilation Unit Info */
+	.4byte	.Ldebug_info_end - 1f	/* Length of Compilation Unit Info */
 1:
 	.2byte	0x3	/* DWARF version number */
-	.long	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
+	.4byte	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
 	.byte	0x4	/* Pointer Size (in bytes) */
 dieb:
 	.uleb128 0x1	/* (DIE (0xb) DW_TAG_compile_unit) */
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.exp b/gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.exp
index d87dc9c..ee49890 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.exp
@@ -19,10 +19,8 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-empty-pc-range"
-set srcfile ${testfile}.S
-set executable ${testfile}.x
-set binfile ${objdir}/${subdir}/${executable}
+standard_testfile .S
+set executable ${testfile}
 
 if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {}] != "" } {
     return -1
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-entry-value.S b/gdb/testsuite/gdb.dwarf2/dw2-entry-value.S
index 080491e..caf06cb 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-entry-value.S
+++ b/gdb/testsuite/gdb.dwarf2/dw2-entry-value.S
@@ -15,10 +15,10 @@
 
 	.section	.debug_info
 debug_start:
-	.long	debug_end - 1f	/* Length of Compilation Unit Info */
+	.4byte	debug_end - 1f	/* Length of Compilation Unit Info */
 1:
 	.2byte	0x3	/* DWARF version number */
-	.long	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
+	.4byte	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
 	.byte	0x4	/* Pointer Size (in bytes) */
 	.uleb128 0x1	/* (DIE (0xb) DW_TAG_compile_unit) */
 	.ascii "GNU C 4.4.3\0"	/* DW_AT_producer */
@@ -26,13 +26,13 @@ debug_start:
 	.ascii "1.c\0"	/* DW_AT_name */
 	.uleb128 0x4	/* (DIE (0x3c) DW_TAG_subprogram) */
 	.ascii "f\0"	/* DW_AT_name */
-	.long	f_start	/* DW_AT_low_pc */
-	.long	f_end	/* DW_AT_high_pc */
+	.4byte	f_start	/* DW_AT_low_pc */
+	.4byte	f_end	/* DW_AT_high_pc */
 	.byte	0x1	/* DW_AT_prototyped */
 	.uleb128 0x5	/* (DIE (0x42) DW_TAG_formal_parameter) */
 	.ascii	"param\0"		/* DW_AT_name */
-	.long	type - debug_start	/* DW_AT_type */
-	.long	loclist	/* DW_AT_location */
+	.4byte	type - debug_start	/* DW_AT_type */
+	.4byte	loclist	/* DW_AT_location */
 	.byte	0x0	/* end of children of DIE 0x3c */
 type:
 	.uleb128	3			/* Abbrev: DW_TAG_base_type */
@@ -45,13 +45,13 @@ debug_end:
 
 	.section	.debug_loc
 loclist:
-	.long	f_start, f_end
+	.4byte	f_start, f_end
 	.2byte	2f-1f
 1:	.byte	0xf3	/* DW_OP_GNU_entry_value */
 	.uleb128  2f-3f
 3:	.byte	0x50	/* DW_OP_reg0 */
 2:
-	.long	0, 0
+	.4byte	0, 0
 
 	.section	.debug_abbrev
 .Ldebug_abbrev0:
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-filename.exp b/gdb/testsuite/gdb.dwarf2/dw2-filename.exp
index 992a06c..5cc2534 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-filename.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-filename.exp
@@ -21,15 +21,13 @@ if {![dwarf2_support]} {
     return 0
 }
 
-set testfile "dw2-filename"
-set srcfile ${testfile}.S
-set binfile ${objdir}/${subdir}/${testfile}.x
+standard_testfile .S
 
 if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {nodebug}] != "" } {
     return -1
 }
 
-clean_restart ${testfile}.x
+clean_restart ${testfile}
 
 # Verify that -file-list-exec-source-files returns a list where
 # the "file" is "file1.txt" (file base name), and "fullname" is
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-icc-opaque.S b/gdb/testsuite/gdb.dwarf2/dw2-icc-opaque.S
new file mode 100644
index 0000000..47b017b
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-icc-opaque.S
@@ -0,0 +1,254 @@
+/* Copyright (C) 2011-2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* This test demonstrates a failure to resolve opaque structure types in
+   binaries compiled by the Intel C compiler.  This is GDB PR symtab/13277.
+
+   The test was derived from opaque-pointer.c, which contains the single line:
+
+   struct opaque_struct_t *p_struct;
+
+   and opaque_struct.c, which looks like:
+
+   struct opaque_struct_t
+   {
+     int wrapped_value;
+   };
+
+   struct opaque_struct_t opaque_internal = { 0 };
+
+   What follows is a simplified version of the debug info generated by ICC
+   version 12.0.4.191. */
+
+	.file "opaque-pointer.c"
+	.data
+	.comm p_struct,8,8
+	.global p_struct#
+
+	.section .debug_info
+debug_info_seg1:
+	.4byte debug_info_seg1_end - 1f	/* Length of compilation unit info. */
+1:
+	.2byte 0x0002			/* DWARF version number. */
+	.4byte .debug_abbrev_seg1	/* Points to abbrev section for this unit. */
+	.byte 0x04			/* Target address size. */
+
+	.byte 0x01			/* DIE 1: DW_TAG_compile_unit. */
+	.byte 0x01			/* DW_AT_language = DW_LANG_C89. */
+	.ascii "Intel(R) C Intel(R) 64 Compiler XE "	/* DW_AT_producer. */
+	.ascii "for applications running on Intel(R) 64, "
+	.ascii "Version 12.0.4.191 Build 20110427\n "
+	.asciz "Fixes SameLinkageName MemberPointers"
+
+	.byte 0x02			/* DIE 2: DW_TAG_variable. */
+	.byte 0x01			/* DW_AT_accessibility. */
+	.asciz "p_struct"		/* DW_AT_name. */
+	.4byte 3f - debug_info_seg1	/* DW_AT_type. */
+	.byte 0x05			/* DW_AT_location: 5 bytes ... */
+	.byte 0x03			/* DW_OP_addr ... */
+	.4byte p_struct			/* followed by the address of p_struct. */
+	.byte 0x01			/* DW_AT_external. */
+
+3:
+	.byte 0x03			/* DIE 3: DW_TAG_pointer_type. */
+	.4byte 4f - debug_info_seg1	/* DW_AT_type. */
+
+4:
+	.byte 0x04			/* DIE 4: DW_TAG_structure_type. */
+	.byte 0x01			/* DW_AT_accessibility. */
+	.byte 0x00			/* DW_AT_byte_size. */
+	.asciz "opaque_struct_t"	/* DW_AT_name. */
+
+	.byte 0x00			/* End DIE 1. */
+debug_info_seg1_end:
+
+	.section .debug_abbrev
+.debug_abbrev_seg1:
+	.byte 0x01	/* Abbrev 1. */
+	.byte 0x11	/* DW_TAG_compile_unit. */
+	.byte 0x01	/* DW_CHILDREN_yes. */
+	.byte 0x13	/* DW_AT_language. */
+	.byte 0x0b	/* DW_FORM_data1. */
+	.byte 0x25	/* DW_AT_producer. */
+	.byte 0x08	/* DW_AT_string. */
+	.2byte 0x0000	/* End abbrev. */
+
+	.byte 0x02	/* Abbrev 2. */
+	.byte 0x34	/* DW_TAG_variable. */
+	.byte 0x00	/* DW_CHILDREN_no. */
+	.byte 0x32	/* DW_AT_accessibility. */
+	.byte 0x0b	/* DW_FORM_data1. */
+	.byte 0x03	/* DW_AT_name. */
+	.byte 0x08	/* DW_FORM_string. */
+	.byte 0x49	/* DW_AT_type. */
+	.byte 0x13	/* DW_FORM_ref4. */
+	.byte 0x02	/* DW_AT_location. */
+	.byte 0x0a	/* DW_FORM_block1. */
+	.byte 0x3f	/* DW_AT_external. */
+	.byte 0x0c	/* DW_FORM_flag. */
+	.2byte 0x0000	/* End abbrev. */
+
+	.byte 0x03	/* Abbrev 3. */
+	.byte 0x0f	/* DW_TAG_pointer_type. */
+	.byte 0x00	/* DW_CHILDREN_no. */
+	.byte 0x49	/* DW_AT_type. */
+	.byte 0x13	/* DW_FORM_ref4. */
+	.2byte 0x0000	/* End abbrev. */
+
+	.byte 0x04	/* Abbrev 4. */
+	.byte 0x13	/* DW_TAG_structure_type. */
+	.byte 0x00	/* DW_CHILDREN_no. */
+	.byte 0x32	/* DW_AT_accessibility. */
+	.byte 0x0b	/* DW_FORM_data1. */
+	.byte 0x0b	/* DW_AT_byte_size. */
+	.byte 0x0b	/* DW_FORM_data1. */
+	.byte 0x03	/* DW_AT_name. */
+	.byte 0x08	/* DW_FORM_string. */
+	.2byte 0x0000	/* End abbrev. */
+	.byte 0x00	/* End abbrev table. */
+
+
+	.file "opaque-struct.c"
+	.section .debug_info
+debug_info_seg2:
+	.4byte debug_info_seg2_end - 1f	/* Length of compilation unit info. */
+1:
+	.2byte 0x0002			/* DWARF version number. */
+	.4byte .debug_abbrev_seg2	/* Points to abbrev section for this unit. */
+	.byte 0x04			/* Target address size. */
+
+	.byte 0x01			/* DIE 1: DW_TAG_compile_unit. */
+	.byte 0x01			/* DW_AT_language = DW_LANG_C89. */
+	.ascii "Intel(R) C Intel(R) 64 Compiler XE "	/* DW_AT_producer. */
+	.ascii "for applications running on Intel(R) 64, "
+	.ascii "Version 12.0.4.191 Build 20110427\n "
+	.asciz "Fixes SameLinkageName MemberPointers"
+
+	.byte 0x02			/* DIE 2: DW_TAG_structure_type. */
+	.byte 0x01			/* DW_AT_accessibility. */
+	.byte 0x04			/* DW_AT_byte_size. */
+	.asciz "opaque_struct_t"	/* DW_AT_name. */
+
+
+	.byte 0x03			/* DIE 3: DW_TAG_member. */
+	.byte 0x02			/* DW_AT_data_member_location: 2 bytes ... */
+	.byte 0x23			/* DW_OP_plus_uconst ... */
+	.byte 0x00			/* followed by zero. */
+	.asciz "wrapped_value"		/* DW_AT_name. */
+	.4byte 4f - debug_info_seg2	/* DW_AT_type. */
+	.byte 0x00
+
+4:
+	.byte 0x04			/* DIE 4: DW_TAG_base_type. */
+	.byte 0x04			/* DW_AT_byte_size. */
+	.byte 0x05			/* DW_AT_encoding. */
+	.asciz "int"			/* DW_AT_name. */
+
+	.byte 0x00			/* End DIE 1. */
+debug_info_seg2_end:
+
+	.section .debug_abbrev
+.debug_abbrev_seg2:
+	.byte 0x01	/* Abbrev 1. */
+	.byte 0x11	/* DW_TAG_compile_unit. */
+	.byte 0x01	/* DW_CHILDREN_yes. */
+	.byte 0x13	/* DW_AT_language. */
+	.byte 0x0b	/* DW_FORM_data1. */
+	.byte 0x25	/* DW_AT_producer. */
+	.byte 0x08	/* DW_FORM_string. */
+	.2byte 0x0000	/* End abbrev. */
+
+	.byte 0x02	/* Abbrev 2. */
+	.byte 0x13	/* DW_TAG_structure_type. */
+	.byte 0x01	/* DW_CHILDREN_yes. */
+	.byte 0x32	/* DW_AT_accessibility. */
+	.byte 0x0b	/* DW_FORM_data1. */
+	.byte 0x0b	/* DW_AT_byte_size. */
+	.byte 0x0b	/* DW_FORM_data1. */
+	.byte 0x03	/* DW_AT_name. */
+	.byte 0x08	/* DW_FORM_string. */
+	.2byte 0x0000	/* End abbrev. */
+
+	.byte 0x03	/* Abbrev 3. */
+	.byte 0x0d	/* DW_TAG_member. */
+	.byte 0x00	/* DW_CHILDREN_no. */
+	.byte 0x38	/* DW_AT_data_member_location. */
+	.byte 0x0a	/* DW_FORM_block1. */
+	.byte 0x03	/* DW_AT_name. */
+	.byte 0x08	/* DW_FORM_string. */
+	.byte 0x49	/* DW_AT_type. */
+	.byte 0x13	/* DW_FORM_ref4. */
+	.2byte 0x0000	/* End abbrev. */
+
+	.byte 0x04	/* Abbrev 4. */
+	.byte 0x24	/* DW_TAG_base_type. */
+	.byte 0x00	/* DW_CHILDREN_no. */
+	.byte 0x0b	/* DW_AT_byte_size. */
+	.byte 0x0b	/* DW_FORM_data1. */
+	.byte 0x3e	/* DW_AT_encoding. */
+	.byte 0x0b	/* DW_FORM_data1. */
+	.byte 0x03	/* DW_AT_name. */
+	.byte 0x08	/* DW_FORM_string. */
+	.2byte 0x0000	/* End abbrev. */
+	.byte 0x00	/* End abbrev table. */
+
+
+	.file "opaque-pointer2.c"
+
+	.section .debug_info
+debug_info_seg3:
+	.4byte debug_info_seg3_end - 1f	/* Length of compilation unit info. */
+1:
+	.2byte 0x0002			/* DWARF version number. */
+	.4byte .debug_abbrev_seg3	/* Points to abbrev section for this unit. */
+	.byte 0x04			/* Target address size. */
+
+	.byte 0x01			/* DIE 1: DW_TAG_compile_unit. */
+	.byte 0x01			/* DW_AT_language = DW_LANG_C89. */
+	.ascii "Intel(R) C Intel(R) 64 Compiler XE "	/* DW_AT_producer. */
+	.ascii "for applications running on Intel(R) 64, "
+	.ascii "Version 12.0.4.191 Build 20110427\n "
+	.asciz "Fixes SameLinkageName MemberPointers"
+
+	.byte 0x04			/* DIE 4: DW_TAG_structure_type. */
+	.byte 0x01			/* DW_AT_accessibility. */
+	.byte 0x00			/* DW_AT_byte_size. */
+	.asciz "opaque_struct_t"	/* DW_AT_name. */
+
+	.byte 0x00			/* End DIE 1. */
+debug_info_seg3_end:
+
+	.section .debug_abbrev
+.debug_abbrev_seg3:
+	.byte 0x01	/* Abbrev 1. */
+	.byte 0x11	/* DW_TAG_compile_unit. */
+	.byte 0x01	/* DW_CHILDREN_yes. */
+	.byte 0x13	/* DW_AT_language. */
+	.byte 0x0b	/* DW_FORM_data1. */
+	.byte 0x25	/* DW_AT_producer. */
+	.byte 0x08	/* DW_AT_string. */
+	.2byte 0x0000	/* End abbrev. */
+
+	.byte 0x04	/* Abbrev 4. */
+	.byte 0x13	/* DW_TAG_structure_type. */
+	.byte 0x00	/* DW_CHILDREN_no. */
+	.byte 0x32	/* DW_AT_accessibility. */
+	.byte 0x0b	/* DW_FORM_data1. */
+	.byte 0x0b	/* DW_AT_byte_size. */
+	.byte 0x0b	/* DW_FORM_data1. */
+	.byte 0x03	/* DW_AT_name. */
+	.byte 0x08	/* DW_FORM_string. */
+	.2byte 0x0000	/* End abbrev. */
+	.byte 0x00	/* End abbrev table. */
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-icc-opaque.exp b/gdb/testsuite/gdb.dwarf2/dw2-icc-opaque.exp
new file mode 100644
index 0000000..fe7d7e8
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-icc-opaque.exp
@@ -0,0 +1,45 @@
+# Copyright (C) 2011-2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+load_lib dwarf.exp
+
+# Test that we can correctly resolve opaque structures compiled by the Intel
+# compiler, which does not set DW_AT_declaration on opaque structure types.
+# This is GDB PR symtab/13277.
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+if {![dwarf2_support]} {
+    return 0
+}
+
+standard_testfile .S
+set executable ${testfile}
+
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {}] != "" } {
+    return -1
+}
+
+clean_restart $executable
+
+# Before PR 13277 was fixed, this would output:
+# type = struct opaque_struct_t {
+#     <no data fields>
+# } *
+if { [istarget s390x-*-*] && [is_lp64_target] } {
+    # The hand-coded DWARF info hard-codes a pointer size of 4 bytes,
+    # which is represented as @mode32 on s390x.
+    gdb_test "ptype p_struct" "type = struct opaque_struct_t {\r\n *int wrapped_value;\r\n} \\* @mode32"
+} else {
+    gdb_test "ptype p_struct" "type = struct opaque_struct_t {\r\n *int wrapped_value;\r\n} \\*"
+}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.exp b/gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.exp
index 000b7f3..d0c1dff 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.exp
@@ -15,21 +15,17 @@
 
 # Verify DW_AT_variable_parameter does not modify the data structures meaning
 # for GDB, as being used by iFort.
+load_lib dwarf.exp
 
 # This test can only be run on targets which support DWARF-2 and use gas.
-# For now pick a sampling of likely targets.
-if {![istarget *-*-linux*]
-    && ![istarget *-*-gnu*]
-    && ![istarget *-*-elf*]
-    && ![istarget *-*-openbsd*]
-    && ![istarget arm-*-eabi*]
-    && ![istarget powerpc-*-eabi*]} {
+if {![dwarf2_support]} {
     return 0
 }
 
-set testfile "dw2-ifort-parameter"
+standard_testfile .c dw2-ifort-parameter-debug.S
 
-if { [prepare_for_testing ${testfile}.exp ${testfile} [list ${testfile}.c ${testfile}-debug.S] {nodebug}] } {
+if { [prepare_for_testing ${testfile}.exp ${testfile} \
+	  [list $srcfile $srcfile2] {nodebug}] } {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-inheritance.exp b/gdb/testsuite/gdb.dwarf2/dw2-inheritance.exp
index 3913811..aefe3f5 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-inheritance.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-inheritance.exp
@@ -22,14 +22,13 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-inheritance"
-set srcfile ${testfile}.S
-set executable ${testfile}.x
+standard_testfile .S
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objdir}/${subdir}/${executable}" object {nodebug}] != "" } {
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" $binfile \
+	   object {nodebug}] != "" } {
     return -1
 }
 
-clean_restart $executable
+clean_restart $testfile
 
 gdb_test "ptype inherited" "type = class inherited .*"
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-inline-break.S b/gdb/testsuite/gdb.dwarf2/dw2-inline-break.S
new file mode 100644
index 0000000..92da965
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-inline-break.S
@@ -0,0 +1,1663 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* This source file was generated using the following command line:
+
+   gcc -S -dA -g -O2 ../gdb.opt/inline-break.c -o inline-break.S
+
+*/
+	.file	"inline-break.c"
+	.section	.debug_abbrev,"", at progbits
+.Ldebug_abbrev0:
+	.section	.debug_info,"", at progbits
+.Ldebug_info0:
+	.section	.debug_line,"", at progbits
+.Ldebug_line0:
+	.text
+.Ltext0:
+	.p2align 4,,15
+.globl func2
+	.type	func2, @function
+func2:
+.LFB1:
+	.file 1 "../gdb.opt/inline-break.c"
+	# ../gdb.opt/inline-break.c:39
+	.loc 1 39 0
+	.cfi_startproc
+.LVL0:
+	# basic block 2
+	# ../gdb.opt/inline-break.c:40
+	.loc 1 40 0
+	movl	%edi, %eax
+	sall	$4, %eax
+	addl	%edi, %eax
+	# ../gdb.opt/inline-break.c:41
+	.loc 1 41 0
+	ret
+	.cfi_endproc
+.LFE1:
+	.size	func2, .-func2
+	.p2align 4,,15
+.globl func4a
+	.type	func4a, @function
+func4a:
+.LFB5:
+	# ../gdb.opt/inline-break.c:69
+	.loc 1 69 0
+	.cfi_startproc
+.LVL1:
+	# basic block 2
+	# ../gdb.opt/inline-break.c:70
+	.loc 1 70 0
+	movl	%edi, %eax
+	sall	$4, %eax
+	leal	(%rax,%rdi), %edi
+.LVL2:
+.LBB46:
+.LBB47:
+	# ../gdb.opt/inline-break.c:64
+	.loc 1 64 0
+	xorl	%eax, %eax
+	cmpl	$12, %edi
+	setg	%al
+	addl	$1, %eax
+.LBE47:
+.LBE46:
+	# ../gdb.opt/inline-break.c:71
+	.loc 1 71 0
+	ret
+	.cfi_endproc
+.LFE5:
+	.size	func4a, .-func4a
+	.p2align 4,,15
+.globl func5b
+	.type	func5b, @function
+func5b:
+.LFB6:
+	# ../gdb.opt/inline-break.c:78
+	.loc 1 78 0
+	.cfi_startproc
+.LVL3:
+	# basic block 2
+	# ../gdb.opt/inline-break.c:79
+	.loc 1 79 0
+	xorl	%eax, %eax
+	cmpl	$11, %edi
+	setg	%al
+	addl	$1, %eax
+	# ../gdb.opt/inline-break.c:80
+	.loc 1 80 0
+	ret
+	.cfi_endproc
+.LFE6:
+	.size	func5b, .-func5b
+	.p2align 4,,15
+.globl func6b
+	.type	func6b, @function
+func6b:
+.LFB8:
+	# ../gdb.opt/inline-break.c:93
+	.loc 1 93 0
+	.cfi_startproc
+.LVL4:
+	# basic block 2
+	# ../gdb.opt/inline-break.c:94
+	.loc 1 94 0
+	xorl	%eax, %eax
+	cmpl	$13, %edi
+	setle	%al
+	addl	$2, %eax
+	# ../gdb.opt/inline-break.c:95
+	.loc 1 95 0
+	ret
+	.cfi_endproc
+.LFE8:
+	.size	func6b, .-func6b
+	.p2align 4,,15
+.globl func6a
+	.type	func6a, @function
+func6a:
+.LFB9:
+	# ../gdb.opt/inline-break.c:99
+	.loc 1 99 0
+	.cfi_startproc
+.LVL5:
+	# basic block 2
+	# ../gdb.opt/inline-break.c:100
+	.loc 1 100 0
+	movl	%edi, %eax
+	sall	$4, %eax
+	leal	(%rax,%rdi), %edi
+.LVL6:
+.LBB48:
+.LBB49:
+	# ../gdb.opt/inline-break.c:94
+	.loc 1 94 0
+	xorl	%eax, %eax
+	cmpl	$13, %edi
+	setle	%al
+	addl	$2, %eax
+.LBE49:
+.LBE48:
+	# ../gdb.opt/inline-break.c:101
+	.loc 1 101 0
+	ret
+	.cfi_endproc
+.LFE9:
+	.size	func6a, .-func6a
+	.p2align 4,,15
+.globl func8b
+	.type	func8b, @function
+func8b:
+.LFB12:
+	# ../gdb.opt/inline-break.c:121
+	.loc 1 121 0
+	.cfi_startproc
+.LVL7:
+	# basic block 2
+	# ../gdb.opt/inline-break.c:122
+	.loc 1 122 0
+	xorl	%eax, %eax
+	cmpl	$6, %edi
+	setle	%al
+	leal	9(%rax,%rax), %eax
+	# ../gdb.opt/inline-break.c:123
+	.loc 1 123 0
+	ret
+	.cfi_endproc
+.LFE12:
+	.size	func8b, .-func8b
+	.p2align 4,,15
+.globl main
+	.type	main, @function
+main:
+.LFB14:
+	# ../gdb.opt/inline-break.c:135
+	.loc 1 135 0
+	.cfi_startproc
+.LVL8:
+	# basic block 2
+	# ../gdb.opt/inline-break.c:140
+	.loc 1 140 0
+	movl	%edi, -4(%rsp)
+.LVL9:
+	# ../gdb.opt/inline-break.c:142
+	.loc 1 142 0
+	movl	-4(%rsp), %eax
+.LVL10:
+.LBB50:
+.LBB51:
+	# ../gdb.opt/inline-break.c:32
+	.loc 1 32 0
+	movl	$23, %edi
+.LVL11:
+.LBE51:
+.LBE50:
+.LBB53:
+.LBB54:
+	# ../gdb.opt/inline-break.c:55
+	.loc 1 55 0
+	movl	$23, %esi
+.LVL12:
+.LBE54:
+.LBE53:
+.LBB58:
+.LBB59:
+	# ../gdb.opt/inline-break.c:85
+	.loc 1 85 0
+	movl	$23, %ecx
+.LBE59:
+.LBE58:
+.LBB63:
+.LBB52:
+	# ../gdb.opt/inline-break.c:32
+	.loc 1 32 0
+	imull	%edi, %eax
+.LVL13:
+.LBE52:
+.LBE63:
+	# ../gdb.opt/inline-break.c:142
+	.loc 1 142 0
+	movl	%eax, -4(%rsp)
+	# ../gdb.opt/inline-break.c:144
+	.loc 1 144 0
+	movl	-4(%rsp), %eax
+.LVL14:
+.LBB64:
+.LBB65:
+	# ../gdb.opt/inline-break.c:40
+	.loc 1 40 0
+	movl	%eax, %edx
+	sall	$4, %edx
+	leal	(%rdx,%rax), %eax
+.LVL15:
+.LBE65:
+.LBE64:
+	# ../gdb.opt/inline-break.c:144
+	.loc 1 144 0
+	movl	%eax, -4(%rsp)
+	# ../gdb.opt/inline-break.c:146
+	.loc 1 146 0
+	movl	-4(%rsp), %eax
+.LVL16:
+.LBB66:
+.LBB57:
+	# ../gdb.opt/inline-break.c:55
+	.loc 1 55 0
+	imull	%esi, %eax
+.LVL17:
+.LBB55:
+.LBB56:
+	# ../gdb.opt/inline-break.c:49
+	.loc 1 49 0
+	cmpl	$13, %eax
+	setg	%al
+.LVL18:
+	movzbl	%al, %eax
+	addl	$1, %eax
+.LBE56:
+.LBE55:
+.LBE57:
+.LBE66:
+	# ../gdb.opt/inline-break.c:146
+	.loc 1 146 0
+	movl	%eax, -4(%rsp)
+	# ../gdb.opt/inline-break.c:148
+	.loc 1 148 0
+	movl	-4(%rsp), %eax
+.LVL19:
+.LBB67:
+.LBB68:
+	# ../gdb.opt/inline-break.c:70
+	.loc 1 70 0
+	movl	%eax, %edx
+	sall	$4, %edx
+	leal	(%rdx,%rax), %eax
+.LVL20:
+.LBB69:
+.LBB70:
+	# ../gdb.opt/inline-break.c:64
+	.loc 1 64 0
+	cmpl	$12, %eax
+	setg	%al
+	movzbl	%al, %eax
+	addl	$1, %eax
+.LBE70:
+.LBE69:
+.LBE68:
+.LBE67:
+	# ../gdb.opt/inline-break.c:148
+	.loc 1 148 0
+	movl	%eax, -4(%rsp)
+	# ../gdb.opt/inline-break.c:150
+	.loc 1 150 0
+	movl	-4(%rsp), %eax
+.LVL21:
+.LBB71:
+.LBB62:
+	# ../gdb.opt/inline-break.c:85
+	.loc 1 85 0
+	imull	%ecx, %eax
+.LVL22:
+.LBB60:
+.LBB61:
+	# ../gdb.opt/inline-break.c:79
+	.loc 1 79 0
+	cmpl	$11, %eax
+	setg	%al
+.LVL23:
+	movzbl	%al, %eax
+	addl	$1, %eax
+.LBE61:
+.LBE60:
+.LBE62:
+.LBE71:
+	# ../gdb.opt/inline-break.c:150
+	.loc 1 150 0
+	movl	%eax, -4(%rsp)
+	# ../gdb.opt/inline-break.c:152
+	.loc 1 152 0
+	movl	-4(%rsp), %eax
+.LVL24:
+.LBB72:
+.LBB73:
+	# ../gdb.opt/inline-break.c:100
+	.loc 1 100 0
+	movl	%eax, %edx
+	sall	$4, %edx
+	leal	(%rdx,%rax), %eax
+.LVL25:
+.LBE73:
+.LBE72:
+.LBB77:
+.LBB80:
+	# ../gdb.opt/inline-break.c:114
+	.loc 1 114 0
+	movl	$29, %edx
+.LBE80:
+.LBE77:
+.LBB89:
+.LBB76:
+.LBB74:
+.LBB75:
+	# ../gdb.opt/inline-break.c:94
+	.loc 1 94 0
+	cmpl	$13, %eax
+	setle	%al
+	movzbl	%al, %eax
+	addl	$2, %eax
+.LBE75:
+.LBE74:
+.LBE76:
+.LBE89:
+	# ../gdb.opt/inline-break.c:152
+	.loc 1 152 0
+	movl	%eax, -4(%rsp)
+	# ../gdb.opt/inline-break.c:154
+	.loc 1 154 0
+	movl	-4(%rsp), %eax
+.LVL26:
+.LBB90:
+.LBB79:
+	# ../gdb.opt/inline-break.c:114
+	.loc 1 114 0
+	imull	%edx, %eax
+.LVL27:
+.LBE79:
+.LBE90:
+	# ../gdb.opt/inline-break.c:154
+	.loc 1 154 0
+	movl	-4(%rsp), %edx
+.LVL28:
+.LBB91:
+.LBB87:
+.LBB82:
+.LBB84:
+	# ../gdb.opt/inline-break.c:108
+	.loc 1 108 0
+	cmpl	$22, %eax
+	setg	%al
+.LVL29:
+.LBE84:
+.LBE82:
+.LBE87:
+.LBE91:
+.LBB92:
+.LBB94:
+	cmpl	$22, %edx
+	setg	%dl
+.LVL30:
+.LBE94:
+.LBE92:
+.LBB96:
+.LBB78:
+.LBB81:
+.LBB83:
+	movzbl	%al, %eax
+.LBE83:
+.LBE81:
+.LBE78:
+.LBE96:
+.LBB97:
+.LBB93:
+	movzbl	%dl, %edx
+.LBE93:
+.LBE97:
+.LBB98:
+.LBB88:
+.LBB86:
+.LBB85:
+	leal	1(%rax,%rax,2), %eax
+.LBE85:
+.LBE86:
+.LBE88:
+.LBE98:
+.LBB99:
+.LBB95:
+	leal	1(%rdx,%rdx,2), %edx
+.LBE95:
+.LBE99:
+	# ../gdb.opt/inline-break.c:154
+	.loc 1 154 0
+	leal	(%rdx,%rax), %eax
+.LVL31:
+	movl	%eax, -4(%rsp)
+.LVL32:
+	# ../gdb.opt/inline-break.c:156
+	.loc 1 156 0
+	movl	-4(%rsp), %edx
+.LVL33:
+.LBB100:
+.LBB101:
+	# ../gdb.opt/inline-break.c:128
+	.loc 1 128 0
+	movl	%edx, %eax
+.LVL34:
+	sall	$5, %eax
+	subl	%edx, %eax
+.LBB102:
+.LBB103:
+	# ../gdb.opt/inline-break.c:122
+	.loc 1 122 0
+	xorl	%edx, %edx
+.LVL35:
+	cmpl	$6, %eax
+.LBE103:
+.LBE102:
+.LBE101:
+.LBE100:
+	# ../gdb.opt/inline-break.c:156
+	.loc 1 156 0
+	movl	-4(%rsp), %eax
+.LVL36:
+.LBB107:
+.LBB106:
+.LBB105:
+.LBB104:
+	# ../gdb.opt/inline-break.c:122
+	.loc 1 122 0
+	setle	%dl
+.LBE104:
+.LBE105:
+.LBE106:
+.LBE107:
+.LBB108:
+.LBB109:
+	cmpl	$6, %eax
+	setle	%al
+.LVL37:
+	movzbl	%al, %eax
+	leal	9(%rax,%rax), %eax
+.LBE109:
+.LBE108:
+	# ../gdb.opt/inline-break.c:156
+	.loc 1 156 0
+	leal	9(%rax,%rdx,2), %eax
+.LVL38:
+	movl	%eax, -4(%rsp)
+.LVL39:
+	# ../gdb.opt/inline-break.c:158
+	.loc 1 158 0
+	movl	-4(%rsp), %eax
+.LVL40:
+	# ../gdb.opt/inline-break.c:159
+	.loc 1 159 0
+	ret
+	.cfi_endproc
+.LFE14:
+	.size	main, .-main
+.Letext0:
+	.section	.debug_loc,"", at progbits
+.Ldebug_loc0:
+.LLST0:
+	.quad	.LVL1-.Ltext0	# Location list begin address (*.LLST0)
+	.quad	.LVL2-.Ltext0	# Location list end address (*.LLST0)
+	.value	0x1	# Location expression size
+	.byte	0x55	# DW_OP_reg5
+	.quad	0x0	# Location list terminator begin (*.LLST0)
+	.quad	0x0	# Location list terminator end (*.LLST0)
+.LLST1:
+	.quad	.LVL1-.Ltext0	# Location list begin address (*.LLST1)
+	.quad	.LVL2-.Ltext0	# Location list end address (*.LLST1)
+	.value	0x5	# Location expression size
+	.byte	0x75	# DW_OP_breg5
+	.sleb128 0
+	.byte	0x41	# DW_OP_lit17
+	.byte	0x1e	# DW_OP_mul
+	.byte	0x9f	# DW_OP_stack_value
+	.quad	0x0	# Location list terminator begin (*.LLST1)
+	.quad	0x0	# Location list terminator end (*.LLST1)
+.LLST2:
+	.quad	.LVL5-.Ltext0	# Location list begin address (*.LLST2)
+	.quad	.LVL6-.Ltext0	# Location list end address (*.LLST2)
+	.value	0x1	# Location expression size
+	.byte	0x55	# DW_OP_reg5
+	.quad	0x0	# Location list terminator begin (*.LLST2)
+	.quad	0x0	# Location list terminator end (*.LLST2)
+.LLST3:
+	.quad	.LVL5-.Ltext0	# Location list begin address (*.LLST3)
+	.quad	.LVL6-.Ltext0	# Location list end address (*.LLST3)
+	.value	0x5	# Location expression size
+	.byte	0x75	# DW_OP_breg5
+	.sleb128 0
+	.byte	0x41	# DW_OP_lit17
+	.byte	0x1e	# DW_OP_mul
+	.byte	0x9f	# DW_OP_stack_value
+	.quad	0x0	# Location list terminator begin (*.LLST3)
+	.quad	0x0	# Location list terminator end (*.LLST3)
+.LLST4:
+	.quad	.LVL8-.Ltext0	# Location list begin address (*.LLST4)
+	.quad	.LVL11-.Ltext0	# Location list end address (*.LLST4)
+	.value	0x1	# Location expression size
+	.byte	0x55	# DW_OP_reg5
+	.quad	.LVL11-.Ltext0	# Location list begin address (*.LLST4)
+	.quad	.LFE14-.Ltext0	# Location list end address (*.LLST4)
+	.value	0x2	# Location expression size
+	.byte	0x91	# DW_OP_fbreg
+	.sleb128 -12
+	.quad	0x0	# Location list terminator begin (*.LLST4)
+	.quad	0x0	# Location list terminator end (*.LLST4)
+.LLST5:
+	.quad	.LVL8-.Ltext0	# Location list begin address (*.LLST5)
+	.quad	.LVL12-.Ltext0	# Location list end address (*.LLST5)
+	.value	0x1	# Location expression size
+	.byte	0x54	# DW_OP_reg4
+	.quad	0x0	# Location list terminator begin (*.LLST5)
+	.quad	0x0	# Location list terminator end (*.LLST5)
+.LLST6:
+	.quad	.LVL9-.Ltext0	# Location list begin address (*.LLST6)
+	.quad	.LVL31-.Ltext0	# Location list end address (*.LLST6)
+	.value	0x2	# Location expression size
+	.byte	0x91	# DW_OP_fbreg
+	.sleb128 -12
+	.quad	.LVL32-.Ltext0	# Location list begin address (*.LLST6)
+	.quad	.LVL34-.Ltext0	# Location list end address (*.LLST6)
+	.value	0x1	# Location expression size
+	.byte	0x50	# DW_OP_reg0
+	.quad	.LVL34-.Ltext0	# Location list begin address (*.LLST6)
+	.quad	.LVL38-.Ltext0	# Location list end address (*.LLST6)
+	.value	0x2	# Location expression size
+	.byte	0x91	# DW_OP_fbreg
+	.sleb128 -12
+	.quad	.LVL39-.Ltext0	# Location list begin address (*.LLST6)
+	.quad	.LVL40-.Ltext0	# Location list end address (*.LLST6)
+	.value	0x1	# Location expression size
+	.byte	0x50	# DW_OP_reg0
+	.quad	.LVL40-.Ltext0	# Location list begin address (*.LLST6)
+	.quad	.LFE14-.Ltext0	# Location list end address (*.LLST6)
+	.value	0x2	# Location expression size
+	.byte	0x91	# DW_OP_fbreg
+	.sleb128 -12
+	.quad	0x0	# Location list terminator begin (*.LLST6)
+	.quad	0x0	# Location list terminator end (*.LLST6)
+.LLST7:
+	.quad	.LVL10-.Ltext0	# Location list begin address (*.LLST7)
+	.quad	.LVL13-.Ltext0	# Location list end address (*.LLST7)
+	.value	0x1	# Location expression size
+	.byte	0x50	# DW_OP_reg0
+	.quad	0x0	# Location list terminator begin (*.LLST7)
+	.quad	0x0	# Location list terminator end (*.LLST7)
+.LLST8:
+	.quad	.LVL16-.Ltext0	# Location list begin address (*.LLST8)
+	.quad	.LVL17-.Ltext0	# Location list end address (*.LLST8)
+	.value	0x1	# Location expression size
+	.byte	0x50	# DW_OP_reg0
+	.quad	0x0	# Location list terminator begin (*.LLST8)
+	.quad	0x0	# Location list terminator end (*.LLST8)
+.LLST9:
+	.quad	.LVL16-.Ltext0	# Location list begin address (*.LLST9)
+	.quad	.LVL17-.Ltext0	# Location list end address (*.LLST9)
+	.value	0x5	# Location expression size
+	.byte	0x70	# DW_OP_breg0
+	.sleb128 0
+	.byte	0x47	# DW_OP_lit23
+	.byte	0x1e	# DW_OP_mul
+	.byte	0x9f	# DW_OP_stack_value
+	.quad	.LVL17-.Ltext0	# Location list begin address (*.LLST9)
+	.quad	.LVL18-.Ltext0	# Location list end address (*.LLST9)
+	.value	0x1	# Location expression size
+	.byte	0x50	# DW_OP_reg0
+	.quad	0x0	# Location list terminator begin (*.LLST9)
+	.quad	0x0	# Location list terminator end (*.LLST9)
+.LLST10:
+	.quad	.LVL21-.Ltext0	# Location list begin address (*.LLST10)
+	.quad	.LVL22-.Ltext0	# Location list end address (*.LLST10)
+	.value	0x1	# Location expression size
+	.byte	0x50	# DW_OP_reg0
+	.quad	0x0	# Location list terminator begin (*.LLST10)
+	.quad	0x0	# Location list terminator end (*.LLST10)
+.LLST11:
+	.quad	.LVL21-.Ltext0	# Location list begin address (*.LLST11)
+	.quad	.LVL22-.Ltext0	# Location list end address (*.LLST11)
+	.value	0x5	# Location expression size
+	.byte	0x70	# DW_OP_breg0
+	.sleb128 0
+	.byte	0x47	# DW_OP_lit23
+	.byte	0x1e	# DW_OP_mul
+	.byte	0x9f	# DW_OP_stack_value
+	.quad	.LVL22-.Ltext0	# Location list begin address (*.LLST11)
+	.quad	.LVL23-.Ltext0	# Location list end address (*.LLST11)
+	.value	0x1	# Location expression size
+	.byte	0x50	# DW_OP_reg0
+	.quad	0x0	# Location list terminator begin (*.LLST11)
+	.quad	0x0	# Location list terminator end (*.LLST11)
+.LLST12:
+	.quad	.LVL14-.Ltext0	# Location list begin address (*.LLST12)
+	.quad	.LVL15-.Ltext0	# Location list end address (*.LLST12)
+	.value	0x1	# Location expression size
+	.byte	0x50	# DW_OP_reg0
+	.quad	0x0	# Location list terminator begin (*.LLST12)
+	.quad	0x0	# Location list terminator end (*.LLST12)
+.LLST13:
+	.quad	.LVL19-.Ltext0	# Location list begin address (*.LLST13)
+	.quad	.LVL20-.Ltext0	# Location list end address (*.LLST13)
+	.value	0x1	# Location expression size
+	.byte	0x50	# DW_OP_reg0
+	.quad	0x0	# Location list terminator begin (*.LLST13)
+	.quad	0x0	# Location list terminator end (*.LLST13)
+.LLST14:
+	.quad	.LVL19-.Ltext0	# Location list begin address (*.LLST14)
+	.quad	.LVL20-.Ltext0	# Location list end address (*.LLST14)
+	.value	0x5	# Location expression size
+	.byte	0x70	# DW_OP_breg0
+	.sleb128 0
+	.byte	0x41	# DW_OP_lit17
+	.byte	0x1e	# DW_OP_mul
+	.byte	0x9f	# DW_OP_stack_value
+	.quad	0x0	# Location list terminator begin (*.LLST14)
+	.quad	0x0	# Location list terminator end (*.LLST14)
+.LLST15:
+	.quad	.LVL24-.Ltext0	# Location list begin address (*.LLST15)
+	.quad	.LVL25-.Ltext0	# Location list end address (*.LLST15)
+	.value	0x1	# Location expression size
+	.byte	0x50	# DW_OP_reg0
+	.quad	0x0	# Location list terminator begin (*.LLST15)
+	.quad	0x0	# Location list terminator end (*.LLST15)
+.LLST16:
+	.quad	.LVL24-.Ltext0	# Location list begin address (*.LLST16)
+	.quad	.LVL25-.Ltext0	# Location list end address (*.LLST16)
+	.value	0x5	# Location expression size
+	.byte	0x70	# DW_OP_breg0
+	.sleb128 0
+	.byte	0x41	# DW_OP_lit17
+	.byte	0x1e	# DW_OP_mul
+	.byte	0x9f	# DW_OP_stack_value
+	.quad	0x0	# Location list terminator begin (*.LLST16)
+	.quad	0x0	# Location list terminator end (*.LLST16)
+.LLST17:
+	.quad	.LVL26-.Ltext0	# Location list begin address (*.LLST17)
+	.quad	.LVL27-.Ltext0	# Location list end address (*.LLST17)
+	.value	0x1	# Location expression size
+	.byte	0x50	# DW_OP_reg0
+	.quad	0x0	# Location list terminator begin (*.LLST17)
+	.quad	0x0	# Location list terminator end (*.LLST17)
+.LLST18:
+	.quad	.LVL26-.Ltext0	# Location list begin address (*.LLST18)
+	.quad	.LVL27-.Ltext0	# Location list end address (*.LLST18)
+	.value	0x5	# Location expression size
+	.byte	0x70	# DW_OP_breg0
+	.sleb128 0
+	.byte	0x4d	# DW_OP_lit29
+	.byte	0x1e	# DW_OP_mul
+	.byte	0x9f	# DW_OP_stack_value
+	.quad	.LVL27-.Ltext0	# Location list begin address (*.LLST18)
+	.quad	.LVL29-.Ltext0	# Location list end address (*.LLST18)
+	.value	0x1	# Location expression size
+	.byte	0x50	# DW_OP_reg0
+	.quad	0x0	# Location list terminator begin (*.LLST18)
+	.quad	0x0	# Location list terminator end (*.LLST18)
+.LLST19:
+	.quad	.LVL28-.Ltext0	# Location list begin address (*.LLST19)
+	.quad	.LVL30-.Ltext0	# Location list end address (*.LLST19)
+	.value	0x1	# Location expression size
+	.byte	0x51	# DW_OP_reg1
+	.quad	0x0	# Location list terminator begin (*.LLST19)
+	.quad	0x0	# Location list terminator end (*.LLST19)
+.LLST20:
+	.quad	.LVL33-.Ltext0	# Location list begin address (*.LLST20)
+	.quad	.LVL35-.Ltext0	# Location list end address (*.LLST20)
+	.value	0x1	# Location expression size
+	.byte	0x51	# DW_OP_reg1
+	.quad	0x0	# Location list terminator begin (*.LLST20)
+	.quad	0x0	# Location list terminator end (*.LLST20)
+.LLST21:
+	.quad	.LVL33-.Ltext0	# Location list begin address (*.LLST21)
+	.quad	.LVL35-.Ltext0	# Location list end address (*.LLST21)
+	.value	0x5	# Location expression size
+	.byte	0x71	# DW_OP_breg1
+	.sleb128 0
+	.byte	0x4f	# DW_OP_lit31
+	.byte	0x1e	# DW_OP_mul
+	.byte	0x9f	# DW_OP_stack_value
+	.quad	0x0	# Location list terminator begin (*.LLST21)
+	.quad	0x0	# Location list terminator end (*.LLST21)
+.LLST22:
+	.quad	.LVL36-.Ltext0	# Location list begin address (*.LLST22)
+	.quad	.LVL37-.Ltext0	# Location list end address (*.LLST22)
+	.value	0x1	# Location expression size
+	.byte	0x50	# DW_OP_reg0
+	.quad	0x0	# Location list terminator begin (*.LLST22)
+	.quad	0x0	# Location list terminator end (*.LLST22)
+	.section	.debug_info
+	.long	0x540	# Length of Compilation Unit Info
+	.value	0x3	# DWARF version number
+	.long	.Ldebug_abbrev0	# Offset Into Abbrev. Section
+	.byte	0x8	# Pointer Size (in bytes)
+	.uleb128 0x1	# (DIE (0xb) DW_TAG_compile_unit)
+	.long	.LASF17	# DW_AT_producer: "GNU C 4.5.1 20100924 (Red Hat 4.5.1-4)"
+	.byte	0x1	# DW_AT_language
+	.long	.LASF18	# DW_AT_name: "../gdb.opt/inline-break.c"
+	.long	.LASF19	# DW_AT_comp_dir: "/home/gary/work/archer/src/gdb/testsuite/gdb.dwarf2"
+	.quad	.Ltext0	# DW_AT_low_pc
+	.quad	.Letext0	# DW_AT_high_pc
+	.long	.Ldebug_line0	# DW_AT_stmt_list
+	.uleb128 0x2	# (DIE (0x2d) DW_TAG_subprogram)
+	.long	.LASF0	# DW_AT_name: "func3b"
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x2f	# DW_AT_decl_line
+	.byte	0x1	# DW_AT_prototyped
+	.long	0x48	# DW_AT_type
+	.byte	0x3	# DW_AT_inline
+	.long	0x48	# DW_AT_sibling
+	.uleb128 0x3	# (DIE (0x3e) DW_TAG_formal_parameter)
+	.ascii "x\0"	# DW_AT_name
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x2f	# DW_AT_decl_line
+	.long	0x48	# DW_AT_type
+	.byte	0x0	# end of children of DIE 0x2d
+	.uleb128 0x4	# (DIE (0x48) DW_TAG_base_type)
+	.byte	0x4	# DW_AT_byte_size
+	.byte	0x5	# DW_AT_encoding
+	.ascii "int\0"	# DW_AT_name
+	.uleb128 0x2	# (DIE (0x4f) DW_TAG_subprogram)
+	.long	.LASF1	# DW_AT_name: "func7b"
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x6a	# DW_AT_decl_line
+	.byte	0x1	# DW_AT_prototyped
+	.long	0x48	# DW_AT_type
+	.byte	0x3	# DW_AT_inline
+	.long	0x6a	# DW_AT_sibling
+	.uleb128 0x3	# (DIE (0x60) DW_TAG_formal_parameter)
+	.ascii "x\0"	# DW_AT_name
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x6a	# DW_AT_decl_line
+	.long	0x48	# DW_AT_type
+	.byte	0x0	# end of children of DIE 0x4f
+	.uleb128 0x2	# (DIE (0x6a) DW_TAG_subprogram)
+	.long	.LASF2	# DW_AT_name: "func4b"
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x3e	# DW_AT_decl_line
+	.byte	0x1	# DW_AT_prototyped
+	.long	0x48	# DW_AT_type
+	.byte	0x3	# DW_AT_inline
+	.long	0x85	# DW_AT_sibling
+	.uleb128 0x3	# (DIE (0x7b) DW_TAG_formal_parameter)
+	.ascii "x\0"	# DW_AT_name
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x3e	# DW_AT_decl_line
+	.long	0x48	# DW_AT_type
+	.byte	0x0	# end of children of DIE 0x6a
+	.uleb128 0x5	# (DIE (0x85) DW_TAG_subprogram)
+	.byte	0x1	# DW_AT_external
+	.long	.LASF3	# DW_AT_name: "func5b"
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x4d	# DW_AT_decl_line
+	.byte	0x1	# DW_AT_prototyped
+	.long	0x48	# DW_AT_type
+	.byte	0x3	# DW_AT_inline
+	.long	0xa1	# DW_AT_sibling
+	.uleb128 0x3	# (DIE (0x97) DW_TAG_formal_parameter)
+	.ascii "x\0"	# DW_AT_name
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x4d	# DW_AT_decl_line
+	.long	0x48	# DW_AT_type
+	.byte	0x0	# end of children of DIE 0x85
+	.uleb128 0x5	# (DIE (0xa1) DW_TAG_subprogram)
+	.byte	0x1	# DW_AT_external
+	.long	.LASF4	# DW_AT_name: "func6b"
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x5c	# DW_AT_decl_line
+	.byte	0x1	# DW_AT_prototyped
+	.long	0x48	# DW_AT_type
+	.byte	0x3	# DW_AT_inline
+	.long	0xbd	# DW_AT_sibling
+	.uleb128 0x3	# (DIE (0xb3) DW_TAG_formal_parameter)
+	.ascii "x\0"	# DW_AT_name
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x5c	# DW_AT_decl_line
+	.long	0x48	# DW_AT_type
+	.byte	0x0	# end of children of DIE 0xa1
+	.uleb128 0x5	# (DIE (0xbd) DW_TAG_subprogram)
+	.byte	0x1	# DW_AT_external
+	.long	.LASF5	# DW_AT_name: "func8b"
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x78	# DW_AT_decl_line
+	.byte	0x1	# DW_AT_prototyped
+	.long	0x48	# DW_AT_type
+	.byte	0x3	# DW_AT_inline
+	.long	0xd9	# DW_AT_sibling
+	.uleb128 0x3	# (DIE (0xcf) DW_TAG_formal_parameter)
+	.ascii "x\0"	# DW_AT_name
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x78	# DW_AT_decl_line
+	.long	0x48	# DW_AT_type
+	.byte	0x0	# end of children of DIE 0xbd
+	.uleb128 0x2	# (DIE (0xd9) DW_TAG_subprogram)
+	.long	.LASF6	# DW_AT_name: "func1"
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x1e	# DW_AT_decl_line
+	.byte	0x1	# DW_AT_prototyped
+	.long	0x48	# DW_AT_type
+	.byte	0x3	# DW_AT_inline
+	.long	0xf4	# DW_AT_sibling
+	.uleb128 0x3	# (DIE (0xea) DW_TAG_formal_parameter)
+	.ascii "x\0"	# DW_AT_name
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x1e	# DW_AT_decl_line
+	.long	0x48	# DW_AT_type
+	.byte	0x0	# end of children of DIE 0xd9
+	.uleb128 0x5	# (DIE (0xf4) DW_TAG_subprogram)
+	.byte	0x1	# DW_AT_external
+	.long	.LASF7	# DW_AT_name: "func2"
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x26	# DW_AT_decl_line
+	.byte	0x1	# DW_AT_prototyped
+	.long	0x48	# DW_AT_type
+	.byte	0x3	# DW_AT_inline
+	.long	0x110	# DW_AT_sibling
+	.uleb128 0x3	# (DIE (0x106) DW_TAG_formal_parameter)
+	.ascii "x\0"	# DW_AT_name
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x26	# DW_AT_decl_line
+	.long	0x48	# DW_AT_type
+	.byte	0x0	# end of children of DIE 0xf4
+	.uleb128 0x2	# (DIE (0x110) DW_TAG_subprogram)
+	.long	.LASF8	# DW_AT_name: "func3a"
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x35	# DW_AT_decl_line
+	.byte	0x1	# DW_AT_prototyped
+	.long	0x48	# DW_AT_type
+	.byte	0x3	# DW_AT_inline
+	.long	0x12b	# DW_AT_sibling
+	.uleb128 0x3	# (DIE (0x121) DW_TAG_formal_parameter)
+	.ascii "x\0"	# DW_AT_name
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x35	# DW_AT_decl_line
+	.long	0x48	# DW_AT_type
+	.byte	0x0	# end of children of DIE 0x110
+	.uleb128 0x5	# (DIE (0x12b) DW_TAG_subprogram)
+	.byte	0x1	# DW_AT_external
+	.long	.LASF9	# DW_AT_name: "func4a"
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x44	# DW_AT_decl_line
+	.byte	0x1	# DW_AT_prototyped
+	.long	0x48	# DW_AT_type
+	.byte	0x3	# DW_AT_inline
+	.long	0x147	# DW_AT_sibling
+	.uleb128 0x3	# (DIE (0x13d) DW_TAG_formal_parameter)
+	.ascii "x\0"	# DW_AT_name
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x44	# DW_AT_decl_line
+	.long	0x48	# DW_AT_type
+	.byte	0x0	# end of children of DIE 0x12b
+	.uleb128 0x2	# (DIE (0x147) DW_TAG_subprogram)
+	.long	.LASF10	# DW_AT_name: "func5a"
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x53	# DW_AT_decl_line
+	.byte	0x1	# DW_AT_prototyped
+	.long	0x48	# DW_AT_type
+	.byte	0x3	# DW_AT_inline
+	.long	0x162	# DW_AT_sibling
+	.uleb128 0x3	# (DIE (0x158) DW_TAG_formal_parameter)
+	.ascii "x\0"	# DW_AT_name
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x53	# DW_AT_decl_line
+	.long	0x48	# DW_AT_type
+	.byte	0x0	# end of children of DIE 0x147
+	.uleb128 0x5	# (DIE (0x162) DW_TAG_subprogram)
+	.byte	0x1	# DW_AT_external
+	.long	.LASF11	# DW_AT_name: "func6a"
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x62	# DW_AT_decl_line
+	.byte	0x1	# DW_AT_prototyped
+	.long	0x48	# DW_AT_type
+	.byte	0x3	# DW_AT_inline
+	.long	0x17e	# DW_AT_sibling
+	.uleb128 0x3	# (DIE (0x174) DW_TAG_formal_parameter)
+	.ascii "x\0"	# DW_AT_name
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x62	# DW_AT_decl_line
+	.long	0x48	# DW_AT_type
+	.byte	0x0	# end of children of DIE 0x162
+	.uleb128 0x2	# (DIE (0x17e) DW_TAG_subprogram)
+	.long	.LASF12	# DW_AT_name: "func7a"
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x70	# DW_AT_decl_line
+	.byte	0x1	# DW_AT_prototyped
+	.long	0x48	# DW_AT_type
+	.byte	0x3	# DW_AT_inline
+	.long	0x199	# DW_AT_sibling
+	.uleb128 0x3	# (DIE (0x18f) DW_TAG_formal_parameter)
+	.ascii "x\0"	# DW_AT_name
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x70	# DW_AT_decl_line
+	.long	0x48	# DW_AT_type
+	.byte	0x0	# end of children of DIE 0x17e
+	.uleb128 0x2	# (DIE (0x199) DW_TAG_subprogram)
+	.long	.LASF13	# DW_AT_name: "func8a"
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x7e	# DW_AT_decl_line
+	.byte	0x1	# DW_AT_prototyped
+	.long	0x48	# DW_AT_type
+	.byte	0x3	# DW_AT_inline
+	.long	0x1b4	# DW_AT_sibling
+	.uleb128 0x3	# (DIE (0x1aa) DW_TAG_formal_parameter)
+	.ascii "x\0"	# DW_AT_name
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x7e	# DW_AT_decl_line
+	.long	0x48	# DW_AT_type
+	.byte	0x0	# end of children of DIE 0x199
+	.uleb128 0x6	# (DIE (0x1b4) DW_TAG_subprogram)
+	.long	0xf4	# DW_AT_abstract_origin
+	.quad	.LFB1	# DW_AT_low_pc
+	.quad	.LFE1	# DW_AT_high_pc
+	.byte	0x1	# DW_AT_frame_base
+	.byte	0x9c	# DW_OP_call_frame_cfa
+	.long	0x1d7	# DW_AT_sibling
+	.uleb128 0x7	# (DIE (0x1cf) DW_TAG_formal_parameter)
+	.long	0x106	# DW_AT_abstract_origin
+	.byte	0x1	# DW_AT_location
+	.byte	0x55	# DW_OP_reg5
+	.byte	0x0	# end of children of DIE 0x1b4
+	.uleb128 0x6	# (DIE (0x1d7) DW_TAG_subprogram)
+	.long	0x12b	# DW_AT_abstract_origin
+	.quad	.LFB5	# DW_AT_low_pc
+	.quad	.LFE5	# DW_AT_high_pc
+	.byte	0x1	# DW_AT_frame_base
+	.byte	0x9c	# DW_OP_call_frame_cfa
+	.long	0x21d	# DW_AT_sibling
+	.uleb128 0x8	# (DIE (0x1f2) DW_TAG_formal_parameter)
+	.long	0x13d	# DW_AT_abstract_origin
+	.long	.LLST0	# DW_AT_location
+	.uleb128 0x9	# (DIE (0x1fb) DW_TAG_inlined_subroutine)
+	.long	0x6a	# DW_AT_abstract_origin
+	.quad	.LBB46	# DW_AT_low_pc
+	.quad	.LBE46	# DW_AT_high_pc
+	.byte	0x1	# DW_AT_call_file (../gdb.opt/inline-break.c)
+	.byte	0x46	# DW_AT_call_line
+	.uleb128 0x8	# (DIE (0x212) DW_TAG_formal_parameter)
+	.long	0x7b	# DW_AT_abstract_origin
+	.long	.LLST1	# DW_AT_location
+	.byte	0x0	# end of children of DIE 0x1fb
+	.byte	0x0	# end of children of DIE 0x1d7
+	.uleb128 0x6	# (DIE (0x21d) DW_TAG_subprogram)
+	.long	0x85	# DW_AT_abstract_origin
+	.quad	.LFB6	# DW_AT_low_pc
+	.quad	.LFE6	# DW_AT_high_pc
+	.byte	0x1	# DW_AT_frame_base
+	.byte	0x9c	# DW_OP_call_frame_cfa
+	.long	0x240	# DW_AT_sibling
+	.uleb128 0x7	# (DIE (0x238) DW_TAG_formal_parameter)
+	.long	0x97	# DW_AT_abstract_origin
+	.byte	0x1	# DW_AT_location
+	.byte	0x55	# DW_OP_reg5
+	.byte	0x0	# end of children of DIE 0x21d
+	.uleb128 0x6	# (DIE (0x240) DW_TAG_subprogram)
+	.long	0xa1	# DW_AT_abstract_origin
+	.quad	.LFB8	# DW_AT_low_pc
+	.quad	.LFE8	# DW_AT_high_pc
+	.byte	0x1	# DW_AT_frame_base
+	.byte	0x9c	# DW_OP_call_frame_cfa
+	.long	0x263	# DW_AT_sibling
+	.uleb128 0x7	# (DIE (0x25b) DW_TAG_formal_parameter)
+	.long	0xb3	# DW_AT_abstract_origin
+	.byte	0x1	# DW_AT_location
+	.byte	0x55	# DW_OP_reg5
+	.byte	0x0	# end of children of DIE 0x240
+	.uleb128 0x6	# (DIE (0x263) DW_TAG_subprogram)
+	.long	0x162	# DW_AT_abstract_origin
+	.quad	.LFB9	# DW_AT_low_pc
+	.quad	.LFE9	# DW_AT_high_pc
+	.byte	0x1	# DW_AT_frame_base
+	.byte	0x9c	# DW_OP_call_frame_cfa
+	.long	0x2a9	# DW_AT_sibling
+	.uleb128 0x8	# (DIE (0x27e) DW_TAG_formal_parameter)
+	.long	0x174	# DW_AT_abstract_origin
+	.long	.LLST2	# DW_AT_location
+	.uleb128 0x9	# (DIE (0x287) DW_TAG_inlined_subroutine)
+	.long	0xa1	# DW_AT_abstract_origin
+	.quad	.LBB48	# DW_AT_low_pc
+	.quad	.LBE48	# DW_AT_high_pc
+	.byte	0x1	# DW_AT_call_file (../gdb.opt/inline-break.c)
+	.byte	0x64	# DW_AT_call_line
+	.uleb128 0x8	# (DIE (0x29e) DW_TAG_formal_parameter)
+	.long	0xb3	# DW_AT_abstract_origin
+	.long	.LLST3	# DW_AT_location
+	.byte	0x0	# end of children of DIE 0x287
+	.byte	0x0	# end of children of DIE 0x263
+	.uleb128 0x6	# (DIE (0x2a9) DW_TAG_subprogram)
+	.long	0xbd	# DW_AT_abstract_origin
+	.quad	.LFB12	# DW_AT_low_pc
+	.quad	.LFE12	# DW_AT_high_pc
+	.byte	0x1	# DW_AT_frame_base
+	.byte	0x9c	# DW_OP_call_frame_cfa
+	.long	0x2cc	# DW_AT_sibling
+	.uleb128 0x7	# (DIE (0x2c4) DW_TAG_formal_parameter)
+	.long	0xcf	# DW_AT_abstract_origin
+	.byte	0x1	# DW_AT_location
+	.byte	0x55	# DW_OP_reg5
+	.byte	0x0	# end of children of DIE 0x2a9
+	.uleb128 0xa	# (DIE (0x2cc) DW_TAG_subprogram)
+	.byte	0x1	# DW_AT_external
+	.long	.LASF20	# DW_AT_name: "main"
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x86	# DW_AT_decl_line
+	.byte	0x1	# DW_AT_prototyped
+	.long	0x48	# DW_AT_type
+	.quad	.LFB14	# DW_AT_low_pc
+	.quad	.LFE14	# DW_AT_high_pc
+	.byte	0x1	# DW_AT_frame_base
+	.byte	0x9c	# DW_OP_call_frame_cfa
+	.long	0x52b	# DW_AT_sibling
+	.uleb128 0xb	# (DIE (0x2ef) DW_TAG_formal_parameter)
+	.long	.LASF14	# DW_AT_name: "argc"
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x86	# DW_AT_decl_line
+	.long	0x48	# DW_AT_type
+	.long	.LLST4	# DW_AT_location
+	.uleb128 0xb	# (DIE (0x2fe) DW_TAG_formal_parameter)
+	.long	.LASF15	# DW_AT_name: "argv"
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x86	# DW_AT_decl_line
+	.long	0x52b	# DW_AT_type
+	.long	.LLST5	# DW_AT_location
+	.uleb128 0xc	# (DIE (0x30d) DW_TAG_variable)
+	.ascii "x\0"	# DW_AT_name
+	.byte	0x1	# DW_AT_decl_file (../gdb.opt/inline-break.c)
+	.byte	0x8c	# DW_AT_decl_line
+	.long	0x53e	# DW_AT_type
+	.long	.LLST6	# DW_AT_location
+	.uleb128 0xd	# (DIE (0x31a) DW_TAG_inlined_subroutine)
+	.long	0xd9	# DW_AT_abstract_origin
+	.quad	.LBB50	# DW_AT_entry_pc
+	.long	.Ldebug_ranges0+0x0	# DW_AT_ranges
+	.byte	0x1	# DW_AT_call_file (../gdb.opt/inline-break.c)
+	.byte	0x8e	# DW_AT_call_line
+	.long	0x33b	# DW_AT_sibling
+	.uleb128 0x8	# (DIE (0x331) DW_TAG_formal_parameter)
+	.long	0xea	# DW_AT_abstract_origin
+	.long	.LLST7	# DW_AT_location
+	.byte	0x0	# end of children of DIE 0x31a
+	.uleb128 0xd	# (DIE (0x33b) DW_TAG_inlined_subroutine)
+	.long	0x110	# DW_AT_abstract_origin
+	.quad	.LBB53	# DW_AT_entry_pc
+	.long	.Ldebug_ranges0+0x30	# DW_AT_ranges
+	.byte	0x1	# DW_AT_call_file (../gdb.opt/inline-break.c)
+	.byte	0x92	# DW_AT_call_line
+	.long	0x37d	# DW_AT_sibling
+	.uleb128 0x8	# (DIE (0x352) DW_TAG_formal_parameter)
+	.long	0x121	# DW_AT_abstract_origin
+	.long	.LLST8	# DW_AT_location
+	.uleb128 0x9	# (DIE (0x35b) DW_TAG_inlined_subroutine)
+	.long	0x2d	# DW_AT_abstract_origin
+	.quad	.LBB55	# DW_AT_low_pc
+	.quad	.LBE55	# DW_AT_high_pc
+	.byte	0x1	# DW_AT_call_file (../gdb.opt/inline-break.c)
+	.byte	0x37	# DW_AT_call_line
+	.uleb128 0x8	# (DIE (0x372) DW_TAG_formal_parameter)
+	.long	0x3e	# DW_AT_abstract_origin
+	.long	.LLST9	# DW_AT_location
+	.byte	0x0	# end of children of DIE 0x35b
+	.byte	0x0	# end of children of DIE 0x33b
+	.uleb128 0xd	# (DIE (0x37d) DW_TAG_inlined_subroutine)
+	.long	0x147	# DW_AT_abstract_origin
+	.quad	.LBB58	# DW_AT_entry_pc
+	.long	.Ldebug_ranges0+0x60	# DW_AT_ranges
+	.byte	0x1	# DW_AT_call_file (../gdb.opt/inline-break.c)
+	.byte	0x96	# DW_AT_call_line
+	.long	0x3bf	# DW_AT_sibling
+	.uleb128 0x8	# (DIE (0x394) DW_TAG_formal_parameter)
+	.long	0x158	# DW_AT_abstract_origin
+	.long	.LLST10	# DW_AT_location
+	.uleb128 0x9	# (DIE (0x39d) DW_TAG_inlined_subroutine)
+	.long	0x85	# DW_AT_abstract_origin
+	.quad	.LBB60	# DW_AT_low_pc
+	.quad	.LBE60	# DW_AT_high_pc
+	.byte	0x1	# DW_AT_call_file (../gdb.opt/inline-break.c)
+	.byte	0x55	# DW_AT_call_line
+	.uleb128 0x8	# (DIE (0x3b4) DW_TAG_formal_parameter)
+	.long	0x97	# DW_AT_abstract_origin
+	.long	.LLST11	# DW_AT_location
+	.byte	0x0	# end of children of DIE 0x39d
+	.byte	0x0	# end of children of DIE 0x37d
+	.uleb128 0xe	# (DIE (0x3bf) DW_TAG_inlined_subroutine)
+	.long	0xf4	# DW_AT_abstract_origin
+	.quad	.LBB64	# DW_AT_low_pc
+	.quad	.LBE64	# DW_AT_high_pc
+	.byte	0x1	# DW_AT_call_file (../gdb.opt/inline-break.c)
+	.byte	0x90	# DW_AT_call_line
+	.long	0x3e4	# DW_AT_sibling
+	.uleb128 0x8	# (DIE (0x3da) DW_TAG_formal_parameter)
+	.long	0x106	# DW_AT_abstract_origin
+	.long	.LLST12	# DW_AT_location
+	.byte	0x0	# end of children of DIE 0x3bf
+	.uleb128 0xe	# (DIE (0x3e4) DW_TAG_inlined_subroutine)
+	.long	0x12b	# DW_AT_abstract_origin
+	.quad	.LBB67	# DW_AT_low_pc
+	.quad	.LBE67	# DW_AT_high_pc
+	.byte	0x1	# DW_AT_call_file (../gdb.opt/inline-break.c)
+	.byte	0x94	# DW_AT_call_line
+	.long	0x42a	# DW_AT_sibling
+	.uleb128 0x8	# (DIE (0x3ff) DW_TAG_formal_parameter)
+	.long	0x13d	# DW_AT_abstract_origin
+	.long	.LLST13	# DW_AT_location
+	.uleb128 0x9	# (DIE (0x408) DW_TAG_inlined_subroutine)
+	.long	0x6a	# DW_AT_abstract_origin
+	.quad	.LBB69	# DW_AT_low_pc
+	.quad	.LBE69	# DW_AT_high_pc
+	.byte	0x1	# DW_AT_call_file (../gdb.opt/inline-break.c)
+	.byte	0x46	# DW_AT_call_line
+	.uleb128 0x8	# (DIE (0x41f) DW_TAG_formal_parameter)
+	.long	0x7b	# DW_AT_abstract_origin
+	.long	.LLST14	# DW_AT_location
+	.byte	0x0	# end of children of DIE 0x408
+	.byte	0x0	# end of children of DIE 0x3e4
+	.uleb128 0xd	# (DIE (0x42a) DW_TAG_inlined_subroutine)
+	.long	0x162	# DW_AT_abstract_origin
+	.quad	.LBB72	# DW_AT_entry_pc
+	.long	.Ldebug_ranges0+0x90	# DW_AT_ranges
+	.byte	0x1	# DW_AT_call_file (../gdb.opt/inline-break.c)
+	.byte	0x98	# DW_AT_call_line
+	.long	0x46c	# DW_AT_sibling
+	.uleb128 0x8	# (DIE (0x441) DW_TAG_formal_parameter)
+	.long	0x174	# DW_AT_abstract_origin
+	.long	.LLST15	# DW_AT_location
+	.uleb128 0x9	# (DIE (0x44a) DW_TAG_inlined_subroutine)
+	.long	0xa1	# DW_AT_abstract_origin
+	.quad	.LBB74	# DW_AT_low_pc
+	.quad	.LBE74	# DW_AT_high_pc
+	.byte	0x1	# DW_AT_call_file (../gdb.opt/inline-break.c)
+	.byte	0x64	# DW_AT_call_line
+	.uleb128 0x8	# (DIE (0x461) DW_TAG_formal_parameter)
+	.long	0xb3	# DW_AT_abstract_origin
+	.long	.LLST16	# DW_AT_location
+	.byte	0x0	# end of children of DIE 0x44a
+	.byte	0x0	# end of children of DIE 0x42a
+	.uleb128 0xd	# (DIE (0x46c) DW_TAG_inlined_subroutine)
+	.long	0x17e	# DW_AT_abstract_origin
+	.quad	.LBB77	# DW_AT_entry_pc
+	.long	.Ldebug_ranges0+0xc0	# DW_AT_ranges
+	.byte	0x1	# DW_AT_call_file (../gdb.opt/inline-break.c)
+	.byte	0x9a	# DW_AT_call_line
+	.long	0x4aa	# DW_AT_sibling
+	.uleb128 0x8	# (DIE (0x483) DW_TAG_formal_parameter)
+	.long	0x18f	# DW_AT_abstract_origin
+	.long	.LLST17	# DW_AT_location
+	.uleb128 0xf	# (DIE (0x48c) DW_TAG_inlined_subroutine)
+	.long	0x4f	# DW_AT_abstract_origin
+	.quad	.LBB82	# DW_AT_entry_pc
+	.long	.Ldebug_ranges0+0x120	# DW_AT_ranges
+	.byte	0x1	# DW_AT_call_file (../gdb.opt/inline-break.c)
+	.byte	0x72	# DW_AT_call_line
+	.uleb128 0x8	# (DIE (0x49f) DW_TAG_formal_parameter)
+	.long	0x60	# DW_AT_abstract_origin
+	.long	.LLST18	# DW_AT_location
+	.byte	0x0	# end of children of DIE 0x48c
+	.byte	0x0	# end of children of DIE 0x46c
+	.uleb128 0xd	# (DIE (0x4aa) DW_TAG_inlined_subroutine)
+	.long	0x4f	# DW_AT_abstract_origin
+	.quad	.LBB92	# DW_AT_entry_pc
+	.long	.Ldebug_ranges0+0x160	# DW_AT_ranges
+	.byte	0x1	# DW_AT_call_file (../gdb.opt/inline-break.c)
+	.byte	0x9a	# DW_AT_call_line
+	.long	0x4cb	# DW_AT_sibling
+	.uleb128 0x8	# (DIE (0x4c1) DW_TAG_formal_parameter)
+	.long	0x60	# DW_AT_abstract_origin
+	.long	.LLST19	# DW_AT_location
+	.byte	0x0	# end of children of DIE 0x4aa
+	.uleb128 0xd	# (DIE (0x4cb) DW_TAG_inlined_subroutine)
+	.long	0x199	# DW_AT_abstract_origin
+	.quad	.LBB100	# DW_AT_entry_pc
+	.long	.Ldebug_ranges0+0x1a0	# DW_AT_ranges
+	.byte	0x1	# DW_AT_call_file (../gdb.opt/inline-break.c)
+	.byte	0x9c	# DW_AT_call_line
+	.long	0x509	# DW_AT_sibling
+	.uleb128 0x8	# (DIE (0x4e2) DW_TAG_formal_parameter)
+	.long	0x1aa	# DW_AT_abstract_origin
+	.long	.LLST20	# DW_AT_location
+	.uleb128 0xf	# (DIE (0x4eb) DW_TAG_inlined_subroutine)
+	.long	0xbd	# DW_AT_abstract_origin
+	.quad	.LBB102	# DW_AT_entry_pc
+	.long	.Ldebug_ranges0+0x1d0	# DW_AT_ranges
+	.byte	0x1	# DW_AT_call_file (../gdb.opt/inline-break.c)
+	.byte	0x80	# DW_AT_call_line
+	.uleb128 0x8	# (DIE (0x4fe) DW_TAG_formal_parameter)
+	.long	0xcf	# DW_AT_abstract_origin
+	.long	.LLST21	# DW_AT_location
+	.byte	0x0	# end of children of DIE 0x4eb
+	.byte	0x0	# end of children of DIE 0x4cb
+	.uleb128 0x9	# (DIE (0x509) DW_TAG_inlined_subroutine)
+	.long	0xbd	# DW_AT_abstract_origin
+	.quad	.LBB108	# DW_AT_low_pc
+	.quad	.LBE108	# DW_AT_high_pc
+	.byte	0x1	# DW_AT_call_file (../gdb.opt/inline-break.c)
+	.byte	0x9c	# DW_AT_call_line
+	.uleb128 0x8	# (DIE (0x520) DW_TAG_formal_parameter)
+	.long	0xcf	# DW_AT_abstract_origin
+	.long	.LLST22	# DW_AT_location
+	.byte	0x0	# end of children of DIE 0x509
+	.byte	0x0	# end of children of DIE 0x2cc
+	.uleb128 0x10	# (DIE (0x52b) DW_TAG_pointer_type)
+	.byte	0x8	# DW_AT_byte_size
+	.long	0x531	# DW_AT_type
+	.uleb128 0x10	# (DIE (0x531) DW_TAG_pointer_type)
+	.byte	0x8	# DW_AT_byte_size
+	.long	0x537	# DW_AT_type
+	.uleb128 0x11	# (DIE (0x537) DW_TAG_base_type)
+	.byte	0x1	# DW_AT_byte_size
+	.byte	0x6	# DW_AT_encoding
+	.long	.LASF16	# DW_AT_name: "char"
+	.uleb128 0x12	# (DIE (0x53e) DW_TAG_volatile_type)
+	.long	0x48	# DW_AT_type
+	.byte	0x0	# end of children of DIE 0xb
+	.section	.debug_abbrev
+	.uleb128 0x1	# (abbrev code)
+	.uleb128 0x11	# (TAG: DW_TAG_compile_unit)
+	.byte	0x1	# DW_children_yes
+	.uleb128 0x25	# (DW_AT_producer)
+	.uleb128 0xe	# (DW_FORM_strp)
+	.uleb128 0x13	# (DW_AT_language)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x3	# (DW_AT_name)
+	.uleb128 0xe	# (DW_FORM_strp)
+	.uleb128 0x1b	# (DW_AT_comp_dir)
+	.uleb128 0xe	# (DW_FORM_strp)
+	.uleb128 0x11	# (DW_AT_low_pc)
+	.uleb128 0x1	# (DW_FORM_addr)
+	.uleb128 0x12	# (DW_AT_high_pc)
+	.uleb128 0x1	# (DW_FORM_addr)
+	.uleb128 0x10	# (DW_AT_stmt_list)
+	.uleb128 0x6	# (DW_FORM_data4)
+	.byte	0x0
+	.byte	0x0
+	.uleb128 0x2	# (abbrev code)
+	.uleb128 0x2e	# (TAG: DW_TAG_subprogram)
+	.byte	0x1	# DW_children_yes
+	.uleb128 0x3	# (DW_AT_name)
+	.uleb128 0xe	# (DW_FORM_strp)
+	.uleb128 0x3a	# (DW_AT_decl_file)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x3b	# (DW_AT_decl_line)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x27	# (DW_AT_prototyped)
+	.uleb128 0xc	# (DW_FORM_flag)
+	.uleb128 0x49	# (DW_AT_type)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.uleb128 0x20	# (DW_AT_inline)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x1	# (DW_AT_sibling)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.byte	0x0
+	.byte	0x0
+	.uleb128 0x3	# (abbrev code)
+	.uleb128 0x5	# (TAG: DW_TAG_formal_parameter)
+	.byte	0x0	# DW_children_no
+	.uleb128 0x3	# (DW_AT_name)
+	.uleb128 0x8	# (DW_FORM_string)
+	.uleb128 0x3a	# (DW_AT_decl_file)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x3b	# (DW_AT_decl_line)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x49	# (DW_AT_type)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.byte	0x0
+	.byte	0x0
+	.uleb128 0x4	# (abbrev code)
+	.uleb128 0x24	# (TAG: DW_TAG_base_type)
+	.byte	0x0	# DW_children_no
+	.uleb128 0xb	# (DW_AT_byte_size)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x3e	# (DW_AT_encoding)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x3	# (DW_AT_name)
+	.uleb128 0x8	# (DW_FORM_string)
+	.byte	0x0
+	.byte	0x0
+	.uleb128 0x5	# (abbrev code)
+	.uleb128 0x2e	# (TAG: DW_TAG_subprogram)
+	.byte	0x1	# DW_children_yes
+	.uleb128 0x3f	# (DW_AT_external)
+	.uleb128 0xc	# (DW_FORM_flag)
+	.uleb128 0x3	# (DW_AT_name)
+	.uleb128 0xe	# (DW_FORM_strp)
+	.uleb128 0x3a	# (DW_AT_decl_file)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x3b	# (DW_AT_decl_line)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x27	# (DW_AT_prototyped)
+	.uleb128 0xc	# (DW_FORM_flag)
+	.uleb128 0x49	# (DW_AT_type)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.uleb128 0x20	# (DW_AT_inline)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x1	# (DW_AT_sibling)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.byte	0x0
+	.byte	0x0
+	.uleb128 0x6	# (abbrev code)
+	.uleb128 0x2e	# (TAG: DW_TAG_subprogram)
+	.byte	0x1	# DW_children_yes
+	.uleb128 0x31	# (DW_AT_abstract_origin)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.uleb128 0x11	# (DW_AT_low_pc)
+	.uleb128 0x1	# (DW_FORM_addr)
+	.uleb128 0x12	# (DW_AT_high_pc)
+	.uleb128 0x1	# (DW_FORM_addr)
+	.uleb128 0x40	# (DW_AT_frame_base)
+	.uleb128 0xa	# (DW_FORM_block1)
+	.uleb128 0x1	# (DW_AT_sibling)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.byte	0x0
+	.byte	0x0
+	.uleb128 0x7	# (abbrev code)
+	.uleb128 0x5	# (TAG: DW_TAG_formal_parameter)
+	.byte	0x0	# DW_children_no
+	.uleb128 0x31	# (DW_AT_abstract_origin)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.uleb128 0x2	# (DW_AT_location)
+	.uleb128 0xa	# (DW_FORM_block1)
+	.byte	0x0
+	.byte	0x0
+	.uleb128 0x8	# (abbrev code)
+	.uleb128 0x5	# (TAG: DW_TAG_formal_parameter)
+	.byte	0x0	# DW_children_no
+	.uleb128 0x31	# (DW_AT_abstract_origin)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.uleb128 0x2	# (DW_AT_location)
+	.uleb128 0x6	# (DW_FORM_data4)
+	.byte	0x0
+	.byte	0x0
+	.uleb128 0x9	# (abbrev code)
+	.uleb128 0x1d	# (TAG: DW_TAG_inlined_subroutine)
+	.byte	0x1	# DW_children_yes
+	.uleb128 0x31	# (DW_AT_abstract_origin)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.uleb128 0x11	# (DW_AT_low_pc)
+	.uleb128 0x1	# (DW_FORM_addr)
+	.uleb128 0x12	# (DW_AT_high_pc)
+	.uleb128 0x1	# (DW_FORM_addr)
+	.uleb128 0x58	# (DW_AT_call_file)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x59	# (DW_AT_call_line)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.byte	0x0
+	.byte	0x0
+	.uleb128 0xa	# (abbrev code)
+	.uleb128 0x2e	# (TAG: DW_TAG_subprogram)
+	.byte	0x1	# DW_children_yes
+	.uleb128 0x3f	# (DW_AT_external)
+	.uleb128 0xc	# (DW_FORM_flag)
+	.uleb128 0x3	# (DW_AT_name)
+	.uleb128 0xe	# (DW_FORM_strp)
+	.uleb128 0x3a	# (DW_AT_decl_file)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x3b	# (DW_AT_decl_line)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x27	# (DW_AT_prototyped)
+	.uleb128 0xc	# (DW_FORM_flag)
+	.uleb128 0x49	# (DW_AT_type)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.uleb128 0x11	# (DW_AT_low_pc)
+	.uleb128 0x1	# (DW_FORM_addr)
+	.uleb128 0x12	# (DW_AT_high_pc)
+	.uleb128 0x1	# (DW_FORM_addr)
+	.uleb128 0x40	# (DW_AT_frame_base)
+	.uleb128 0xa	# (DW_FORM_block1)
+	.uleb128 0x1	# (DW_AT_sibling)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.byte	0x0
+	.byte	0x0
+	.uleb128 0xb	# (abbrev code)
+	.uleb128 0x5	# (TAG: DW_TAG_formal_parameter)
+	.byte	0x0	# DW_children_no
+	.uleb128 0x3	# (DW_AT_name)
+	.uleb128 0xe	# (DW_FORM_strp)
+	.uleb128 0x3a	# (DW_AT_decl_file)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x3b	# (DW_AT_decl_line)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x49	# (DW_AT_type)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.uleb128 0x2	# (DW_AT_location)
+	.uleb128 0x6	# (DW_FORM_data4)
+	.byte	0x0
+	.byte	0x0
+	.uleb128 0xc	# (abbrev code)
+	.uleb128 0x34	# (TAG: DW_TAG_variable)
+	.byte	0x0	# DW_children_no
+	.uleb128 0x3	# (DW_AT_name)
+	.uleb128 0x8	# (DW_FORM_string)
+	.uleb128 0x3a	# (DW_AT_decl_file)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x3b	# (DW_AT_decl_line)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x49	# (DW_AT_type)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.uleb128 0x2	# (DW_AT_location)
+	.uleb128 0x6	# (DW_FORM_data4)
+	.byte	0x0
+	.byte	0x0
+	.uleb128 0xd	# (abbrev code)
+	.uleb128 0x1d	# (TAG: DW_TAG_inlined_subroutine)
+	.byte	0x1	# DW_children_yes
+	.uleb128 0x31	# (DW_AT_abstract_origin)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.uleb128 0x52	# (DW_AT_entry_pc)
+	.uleb128 0x1	# (DW_FORM_addr)
+	.uleb128 0x55	# (DW_AT_ranges)
+	.uleb128 0x6	# (DW_FORM_data4)
+	.uleb128 0x58	# (DW_AT_call_file)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x59	# (DW_AT_call_line)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x1	# (DW_AT_sibling)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.byte	0x0
+	.byte	0x0
+	.uleb128 0xe	# (abbrev code)
+	.uleb128 0x1d	# (TAG: DW_TAG_inlined_subroutine)
+	.byte	0x1	# DW_children_yes
+	.uleb128 0x31	# (DW_AT_abstract_origin)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.uleb128 0x11	# (DW_AT_low_pc)
+	.uleb128 0x1	# (DW_FORM_addr)
+	.uleb128 0x12	# (DW_AT_high_pc)
+	.uleb128 0x1	# (DW_FORM_addr)
+	.uleb128 0x58	# (DW_AT_call_file)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x59	# (DW_AT_call_line)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x1	# (DW_AT_sibling)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.byte	0x0
+	.byte	0x0
+	.uleb128 0xf	# (abbrev code)
+	.uleb128 0x1d	# (TAG: DW_TAG_inlined_subroutine)
+	.byte	0x1	# DW_children_yes
+	.uleb128 0x31	# (DW_AT_abstract_origin)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.uleb128 0x52	# (DW_AT_entry_pc)
+	.uleb128 0x1	# (DW_FORM_addr)
+	.uleb128 0x55	# (DW_AT_ranges)
+	.uleb128 0x6	# (DW_FORM_data4)
+	.uleb128 0x58	# (DW_AT_call_file)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x59	# (DW_AT_call_line)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.byte	0x0
+	.byte	0x0
+	.uleb128 0x10	# (abbrev code)
+	.uleb128 0xf	# (TAG: DW_TAG_pointer_type)
+	.byte	0x0	# DW_children_no
+	.uleb128 0xb	# (DW_AT_byte_size)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x49	# (DW_AT_type)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.byte	0x0
+	.byte	0x0
+	.uleb128 0x11	# (abbrev code)
+	.uleb128 0x24	# (TAG: DW_TAG_base_type)
+	.byte	0x0	# DW_children_no
+	.uleb128 0xb	# (DW_AT_byte_size)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x3e	# (DW_AT_encoding)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x3	# (DW_AT_name)
+	.uleb128 0xe	# (DW_FORM_strp)
+	.byte	0x0
+	.byte	0x0
+	.uleb128 0x12	# (abbrev code)
+	.uleb128 0x35	# (TAG: DW_TAG_volatile_type)
+	.byte	0x0	# DW_children_no
+	.uleb128 0x49	# (DW_AT_type)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.byte	0x0
+	.byte	0x0
+	.byte	0x0
+	.section	.debug_pubnames,"", at progbits
+	.long	0x58	# Length of Public Names Info
+	.value	0x2	# DWARF Version
+	.long	.Ldebug_info0	# Offset of Compilation Unit Info
+	.long	0x544	# Compilation Unit Length
+	.long	0x1b4	# DIE offset
+	.ascii "func2\0"	# external name
+	.long	0x1d7	# DIE offset
+	.ascii "func4a\0"	# external name
+	.long	0x21d	# DIE offset
+	.ascii "func5b\0"	# external name
+	.long	0x240	# DIE offset
+	.ascii "func6b\0"	# external name
+	.long	0x263	# DIE offset
+	.ascii "func6a\0"	# external name
+	.long	0x2a9	# DIE offset
+	.ascii "func8b\0"	# external name
+	.long	0x2cc	# DIE offset
+	.ascii "main\0"	# external name
+	.long	0x0
+	.section	.debug_aranges,"", at progbits
+	.long	0x2c	# Length of Address Ranges Info
+	.value	0x2	# DWARF Version
+	.long	.Ldebug_info0	# Offset of Compilation Unit Info
+	.byte	0x8	# Size of Address
+	.byte	0x0	# Size of Segment Descriptor
+	.value	0x0	# Pad to 16 byte boundary
+	.value	0x0
+	.quad	.Ltext0	# Address
+	.quad	.Letext0-.Ltext0	# Length
+	.quad	0x0
+	.quad	0x0
+	.section	.debug_ranges,"", at progbits
+.Ldebug_ranges0:
+	.quad	.LBB50-.Ltext0	# Offset 0x0
+	.quad	.LBE50-.Ltext0
+	.quad	.LBB63-.Ltext0
+	.quad	.LBE63-.Ltext0
+	.quad	0x0
+	.quad	0x0
+	.quad	.LBB53-.Ltext0	# Offset 0x30
+	.quad	.LBE53-.Ltext0
+	.quad	.LBB66-.Ltext0
+	.quad	.LBE66-.Ltext0
+	.quad	0x0
+	.quad	0x0
+	.quad	.LBB58-.Ltext0	# Offset 0x60
+	.quad	.LBE58-.Ltext0
+	.quad	.LBB71-.Ltext0
+	.quad	.LBE71-.Ltext0
+	.quad	0x0
+	.quad	0x0
+	.quad	.LBB72-.Ltext0	# Offset 0x90
+	.quad	.LBE72-.Ltext0
+	.quad	.LBB89-.Ltext0
+	.quad	.LBE89-.Ltext0
+	.quad	0x0
+	.quad	0x0
+	.quad	.LBB77-.Ltext0	# Offset 0xc0
+	.quad	.LBE77-.Ltext0
+	.quad	.LBB98-.Ltext0
+	.quad	.LBE98-.Ltext0
+	.quad	.LBB96-.Ltext0
+	.quad	.LBE96-.Ltext0
+	.quad	.LBB91-.Ltext0
+	.quad	.LBE91-.Ltext0
+	.quad	.LBB90-.Ltext0
+	.quad	.LBE90-.Ltext0
+	.quad	0x0
+	.quad	0x0
+	.quad	.LBB82-.Ltext0	# Offset 0x120
+	.quad	.LBE82-.Ltext0
+	.quad	.LBB86-.Ltext0
+	.quad	.LBE86-.Ltext0
+	.quad	.LBB81-.Ltext0
+	.quad	.LBE81-.Ltext0
+	.quad	0x0
+	.quad	0x0
+	.quad	.LBB92-.Ltext0	# Offset 0x160
+	.quad	.LBE92-.Ltext0
+	.quad	.LBB99-.Ltext0
+	.quad	.LBE99-.Ltext0
+	.quad	.LBB97-.Ltext0
+	.quad	.LBE97-.Ltext0
+	.quad	0x0
+	.quad	0x0
+	.quad	.LBB100-.Ltext0	# Offset 0x1a0
+	.quad	.LBE100-.Ltext0
+	.quad	.LBB107-.Ltext0
+	.quad	.LBE107-.Ltext0
+	.quad	0x0
+	.quad	0x0
+	.quad	.LBB102-.Ltext0	# Offset 0x1d0
+	.quad	.LBE102-.Ltext0
+	.quad	.LBB105-.Ltext0
+	.quad	.LBE105-.Ltext0
+	.quad	0x0
+	.quad	0x0
+	.section	.debug_str,"MS", at progbits,1
+.LASF12:
+	.string	"func7a"
+.LASF1:
+	.string	"func7b"
+.LASF19:
+	.string	"/home/gary/work/archer/src/gdb/testsuite/gdb.dwarf2"
+.LASF20:
+	.string	"main"
+.LASF18:
+	.string	"../gdb.opt/inline-break.c"
+.LASF6:
+	.string	"func1"
+.LASF17:
+	.string	"GNU C 4.5.1 20100924 (Red Hat 4.5.1-4)"
+.LASF14:
+	.string	"argc"
+.LASF8:
+	.string	"func3a"
+.LASF0:
+	.string	"func3b"
+.LASF16:
+	.string	"char"
+.LASF9:
+	.string	"func4a"
+.LASF2:
+	.string	"func4b"
+.LASF11:
+	.string	"func6a"
+.LASF10:
+	.string	"func5a"
+.LASF3:
+	.string	"func5b"
+.LASF5:
+	.string	"func8b"
+.LASF13:
+	.string	"func8a"
+.LASF7:
+	.string	"func2"
+.LASF4:
+	.string	"func6b"
+.LASF15:
+	.string	"argv"
+	.ident	"GCC: (GNU) 4.5.1 20100924 (Red Hat 4.5.1-4)"
+	.section	.note.GNU-stack,"", at progbits
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-inline-break.exp b/gdb/testsuite/gdb.dwarf2/dw2-inline-break.exp
new file mode 100644
index 0000000..4839d90
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-inline-break.exp
@@ -0,0 +1,125 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Note that the testcase gdb.opt/inline-break.exp largely mirrors
+# this testcase, and should be updated if this testcase is changed.
+
+load_lib dwarf.exp
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+if ![dwarf2_support] {
+    return 0
+}
+
+# This test can only be run on x86_64 targets.
+if {![istarget "x86_64-*-*"] || ![is_lp64_target]} {
+    return 0
+}
+
+set basename "inline-break"
+
+standard_testfile .S
+
+if { [prepare_for_testing $testfile.exp $testfile $srcfile {nodebug}] } {
+    return -1
+}
+
+#
+# func1 is a static inlined function that is called once.
+# The result should be a single-location breakpoint.
+#
+gdb_test "break func1" \
+    "Breakpoint.*at.* file .*$basename\\.c, line.*"
+
+#
+# func2 is a non-static inlined function that is called once.
+# The result should be a breakpoint with two locations: the
+# out-of-line function and the single inlined instance.
+#
+gdb_test "break func2" \
+    "Breakpoint.*at.*func2.*\\(2 locations\\)"
+
+#
+# func3b is a static inlined function that is called once from
+# within another static inlined function.  The result should be
+# a single-location breakpoint.
+#
+gdb_test "break func3b" \
+    "Breakpoint.*at.* file .*$basename\\.c, line.*"
+
+#
+# func4b is a static inlined function that is called once from
+# within a non-static inlined function.  The result should be
+# a breakpoint with two locations: the inlined instance within
+# the inlined call to func4a in main, and the inlined instance
+# within the out-of-line func4a.
+#
+gdb_test "break func4b" \
+    "Breakpoint.*at.*func4b.*\\(2 locations\\)"
+
+#
+# func5b is a non-static inlined function that is called once
+# from within a static inlined function.  The result should be a
+# breakpoint with two locations: the out-of-line function and the
+# inlined instance within the inlined call to func5a in main.
+#
+gdb_test "break func5b" \
+    "Breakpoint.*at.*func5b.*\\(2 locations\\)"
+#
+# func6b is a non-static inlined function that is called once from
+# within another non-static inlined function.  The result should be
+# a breakpoint with three locations: the out-of-line function, the
+# inlined instance within the out-of-line func6a, and the inlined
+# instance within the inlined call to func6a in main,
+#
+gdb_test "break func6b" \
+    "Breakpoint.*at.*func6b.*\\(3 locations\\)"
+
+#
+# func7b is a static inlined function that is called twice: once from
+# func7a, and once from main.  The result should be a breakpoint with
+# two locations: the inlined instance within the inlined instance of
+# func7a, and the inlined instance within main.
+#
+gdb_test "break func7b" \
+    "Breakpoint.*at.*func7b.*\\(2 locations\\)"
+
+#
+# func8b is a non-static inlined function that is called twice: once
+# func8a, and once from main.  The result should be a breakpoint with
+# three locations: the out-of-line function, the inlined instance
+# within the inlined instance of func7a, and the inlined instance
+# within main.
+#
+gdb_test "break func8b" \
+    "Breakpoint.*at.*func8b.*\\(3 locations\\)"
+
+#
+# func1 is a static inlined function.  The result should be that no
+# symbol is found to print.
+#
+gdb_test "print func1" \
+    "No symbol \"func1\" in current context."
+
+#
+# func2 is a non-static inlined function.  The result should be that
+# one symbol is found to print, and that the printed symbol is called
+# "func2".  Note that this does not cover the failure case that two
+# symbols were found, but that gdb chose the out-of-line copy to
+# print, but if this was failing the "print func1" test would likely
+# fail instead.
+#
+gdb_test "print func2" \
+    "\\\$.* = {int \\(int\\)} .* <func2>"
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-inline-param.exp b/gdb/testsuite/gdb.dwarf2/dw2-inline-param.exp
index 0db3f0f..30cfdc2 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-inline-param.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-inline-param.exp
@@ -19,14 +19,13 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile dw2-inline-param
-set binfile ${objdir}/${subdir}/${testfile}
-if { [build_executable ${testfile}.exp "${testfile}" [list ${testfile}-main.c ${testfile}.S] {nodebug}] } {
+standard_testfile .S dw2-inline-param-main.c
+
+if { [prepare_for_testing ${testfile}.exp "${testfile}" \
+	  [list $srcfile2 $srcfile] {nodebug}] } {
     return -1
 }
 
-clean_restart ${testfile}
-
 set break_at ""
 set test "info addr break_at"
 gdb_test_multiple $test $test {
@@ -41,7 +40,9 @@ gdb_unload
 # Strip out any labels there as they could corrupt the `main' name.
 
 set objcopy_program [transform objcopy]
-set result [catch "exec $objcopy_program -N block_start -N block_end -N break_at ${binfile}" output]
+set command "$objcopy_program -N block_start -N block_end -N break_at ${binfile}"
+verbose -log "Executing: $command"
+set result [catch "exec $command" output]
 verbose "result is $result"
 verbose "output is $output"
 if {$result != 0} {
@@ -49,9 +50,6 @@ if {$result != 0} {
 }
 
 gdb_load ${binfile}
-if [target_info exists gdb_stub] {
-    gdb_step_for_stub;
-}    
 
 if ![runto "*${break_at}"] {
     return -1
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-intercu.S b/gdb/testsuite/gdb.dwarf2/dw2-intercu.S
index 4b236d0..e62fb06 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-intercu.S
+++ b/gdb/testsuite/gdb.dwarf2/dw2-intercu.S
@@ -58,7 +58,7 @@ func_cu1:
 	.byte		1			/* DW_AT_decl_file */
 	.byte		2			/* DW_AT_decl_line */
 	.ascii		"func_cu1\0"		/* DW_AT_name */
-	.4byte		.Ltype_int_in_cu2	/* DW_AT_type */
+	.4byte		.Ltype_int2_in_cu2	/* DW_AT_type */
 	.4byte		.Lbegin_func_cu1	/* DW_AT_low_pc */
 	.4byte		.Lend_func_cu1		/* DW_AT_high_pc */
 	.byte		1			/* DW_AT_frame_base: length */
@@ -83,9 +83,12 @@ func_cu1:
 	.ascii	"GNU C 3.3.3\0"			/* DW_AT_producer */
 	.byte	1				/* DW_AT_language (C) */
 
-.Ltype_int_in_cu2:
+	/* This type is named "int2" and not "int" to ensure it is unique,
+	   and thus we can easily ensure we expand this CU and not some
+	   other CU with "int".  */
+.Ltype_int2_in_cu2:
 	.uleb128	2			/* Abbrev: DW_TAG_base_type */
-	.ascii		"int\0"			/* DW_AT_name */
+	.ascii		"int2\0"		/* DW_AT_name */
 	.byte		4			/* DW_AT_byte_size */
 	.byte		5			/* DW_AT_encoding */
 
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-intercu.exp b/gdb/testsuite/gdb.dwarf2/dw2-intercu.exp
index d0166a8..dd836c5 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-intercu.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-intercu.exp
@@ -21,32 +21,25 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-intercu"
+standard_testfile .S
 set dwarf_srcfile "file1.txt"
-set srcfile ${testfile}.S
-set binfile ${objdir}/${subdir}/${testfile}.x
 
-if  { [gdb_compile "${srcdir}/${subdir}/main.c" "main.o" object {debug}] != "" } {
+if {[prepare_for_testing_full $testfile.exp \
+	 [list $testfile debug main.c debug $srcfile nodebug]]} {
     return -1
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${testfile}.o" object {nodebug}] != "" } {
-    return -1
-}
-
-if  { [gdb_compile "${testfile}.o main.o" "${binfile}" executable {debug}] != "" } {
-    return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 set remote_dwarf_srcfile [remote_download host ${srcdir}/${subdir}/${dwarf_srcfile}]
 
+# This needs to be done first so that the CU for int2 gets expanded first.
+# This exercises the case where the type for this die is hashed, but we
+# need to perform the inter-cu lookup before looking the type up in the
+# hash table.
+gdb_test "ptype int2" "type = int2"
+
 gdb_test_no_output "set listsize 1"
 gdb_test "list func_cu1" "4\[ \t\]+File 1 Line 4"
-gdb_test "ptype func_cu1" "type = int \\(\\)"
+
+gdb_test "ptype func_cu1" "type = int2 \\(\\)"
 
 remote_file host delete ${remote_dwarf_srcfile}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-intermix.exp b/gdb/testsuite/gdb.dwarf2/dw2-intermix.exp
index 451b5f2..2ea96bc 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-intermix.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-intermix.exp
@@ -21,28 +21,14 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-intermix"
+standard_testfile .S
 set dwarf_srcfile "file1.txt"
-set srcfile ${testfile}.S
-set binfile ${objdir}/${subdir}/${testfile}.x
 
-if  { [gdb_compile "${srcdir}/${subdir}/main.c" "main.o" object {debug}] != "" } {
+if {[prepare_for_testing_full $testfile.exp \
+	 [list $testfile debug main.c debug $srcfile nodebug]]} {
     return -1
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${testfile}.o" object {nodebug}] != "" } {
-    return -1
-}
-
-if  { [gdb_compile "${testfile}.o main.o" "${binfile}" executable {debug}] != "" } {
-    return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 set remote_dwarf_srcfile [remote_download host ${srcdir}/${subdir}/${dwarf_srcfile}]
 
 gdb_test_no_output "set listsize 1"
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.exp b/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.exp
index 42a5f45..7857449 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.exp
@@ -25,17 +25,15 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-linkage-name-trust"
+standard_testfile .S
 set executable ${testfile}
-set binfile ${objdir}/${subdir}/${executable}
-if { [gdb_compile ${srcdir}/${subdir}/${testfile}-main.cc "${objdir}/${subdir}/${testfile}-main.o" object {c++ debug}] != ""
-     || [gdb_compile "${srcdir}/${subdir}/${testfile}.S" "${objdir}/${subdir}/${testfile}.o" object {}] != ""
-     || [gdb_compile "${objdir}/${subdir}/${testfile}-main.o ${objdir}/${subdir}/${testfile}.o" "${binfile}" executable {c++}] != "" } {
+
+if {[prepare_for_testing_full $testfile.exp \
+	 [list $testfile c++ $testfile-main.cc {c++ debug} \
+	      $srcfile {}]]} {
     return -1
 }
 
-clean_restart $executable
-
 if ![runto_main] then {
     return -1
 }
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.S b/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.S
new file mode 100644
index 0000000..2f8068e
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.S
@@ -0,0 +1,108 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2004, 2007-2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+	.text
+.Lbegin_text1:
+
+	.globl main
+	.type main, %function
+main:
+.Lbegin_main:
+	.int 0
+.Lend_main:
+	.size main, .-main
+
+	.globl func2
+	.type func2, %function
+func2:
+	.int 0
+	.size func2, .-func2
+
+.Lend_text1:
+
+/* Debug information */
+
+	.section .debug_info
+.Lcu1_begin:
+	/* CU header */
+	.4byte	.Lcu1_end - .Lcu1_start		/* Length of Compilation Unit */
+.Lcu1_start:
+	.2byte	2				/* DWARF Version */
+	.4byte	.Labbrev1_begin			/* Offset into abbrev section */
+	.byte	4				/* Pointer size */
+
+	/* CU die */
+	.uleb128 1				/* Abbrev: DW_TAG_compile_unit */
+	.4byte	.Lend_text1			/* DW_AT_high_pc */
+	.4byte	.Lbegin_text1			/* DW_AT_low_pc */
+	.ascii	"file1.txt\0"			/* DW_AT_name */
+	.ascii	"GNU C 3.3.3\0"			/* DW_AT_producer */
+	.byte	1				/* DW_AT_language (C) */
+
+	/* main */
+	.uleb128	2			/* Abbrev: DW_TAG_subprogram */
+	.byte		1			/* DW_AT_external */
+	.ascii		"main\0"		/* DW_AT_name */
+	.4byte	.Ldebug_ranges			/* DW_AT_ranges */
+
+	.byte		0			/* End of children of CU */
+.Lcu1_end:
+
+/* DW_AT_ranges.  */
+	.section	.debug_ranges
+.Ldebug_ranges:
+	.4byte	.Lbegin_main
+	.4byte	.Lend_main - 1
+	/* Make it slightly more interesting to set pending_addrmap_interesting.  */
+	.4byte	.Lend_main - 1
+	.4byte	.Lend_main
+	.4byte	0
+	.4byte	0
+
+/* Abbrev table */
+	.section .debug_abbrev
+.Labbrev1_begin:
+	.uleb128	1			/* Abbrev code */
+	.uleb128	0x11			/* DW_TAG_compile_unit */
+	.byte		1			/* has_children */
+	.uleb128	0x12			/* DW_AT_high_pc */
+	.uleb128	0x1			/* DW_FORM_addr */
+	.uleb128	0x11			/* DW_AT_low_pc */
+	.uleb128	0x1			/* DW_FORM_addr */
+	.uleb128	0x3			/* DW_AT_name */
+	.uleb128	0x8			/* DW_FORM_string */
+	.uleb128	0x25			/* DW_AT_producer */
+	.uleb128	0x8			/* DW_FORM_string */
+	.uleb128	0x13			/* DW_AT_language */
+	.uleb128	0xb			/* DW_FORM_data1 */
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+	.uleb128	2			/* Abbrev code */
+	.uleb128	0x2e			/* DW_TAG_subprogram */
+	.byte		0			/* has_children */
+	.uleb128	0x3f			/* DW_AT_external */
+	.uleb128	0xc			/* DW_FORM_flag */
+	.uleb128	0x3			/* DW_AT_name */
+	.uleb128	0x8			/* DW_FORM_string */
+	.uleb128	0x55			/* DW_AT_ranges */
+	.uleb128	0x6			/* DW_FORM_data4 */
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.exp b/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.exp
new file mode 100644
index 0000000..7df47bd
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.exp
@@ -0,0 +1,34 @@
+# Copyright 2004-2005, 2007-2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+load_lib dwarf.exp
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+if {![dwarf2_support]} {
+    return 0  
+}
+
+# This testfile has reproducibility only with cc-with-index.sh.
+
+set testfile "dw2-minsym-in-cu"
+set srcfile ${testfile}.S
+set executable ${testfile}
+
+if [prepare_for_testing ${testfile}.exp ${executable} ${srcfile}] {
+    return -1
+}
+
+# Ask for address which is still located in this CU but not described by
+# any DIE.
+gdb_test "info fun func2" {All functions matching regular expression "func2":}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.S b/gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.S
index baa6cd0..99a96b6 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.S
+++ b/gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.S
@@ -26,35 +26,35 @@ v:	.long	0
 
 	.section	.debug_info
 d:
-	.long	.Ldebug_info_end - 1f	/* Length of Compilation Unit Info */
+	.4byte	.Ldebug_info_end - 1f	/* Length of Compilation Unit Info */
 1:
 	.2byte	0x3	/* DWARF version number */
-	.long	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
+	.4byte	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
 	.byte	0x4	/* Pointer Size (in bytes) */
 dieb:
 	.uleb128 0x1	/* (DIE (0xb) DW_TAG_compile_unit) */
-	.long	.LASF0	/* DW_AT_producer */
+	.4byte	.LASF0	/* DW_AT_producer */
 	.byte	0xa	/* DW_AT_language = DW_LANG_Modula2 */
-	.long	.LASF1	/* DW_AT_name: "2.mod" */
-	.long	.LASF2	/* DW_AT_comp_dir: "" */
+	.4byte	.LASF1	/* DW_AT_name: "2.mod" */
+	.4byte	.LASF2	/* DW_AT_comp_dir: "" */
 
 die210:
 	.uleb128 0x5	/* (DIE (0x210) DW_TAG_subroutine_type) */
 die215:
 	.uleb128 0x6	/* (DIE (0x215) DW_TAG_formal_parameter) */
-	.long	die21b-d	/* DW_AT_type */
+	.4byte	die21b-d	/* DW_AT_type */
 	.byte	0x0	/* end of children of DIE 0x210 */
 die21b:
 	.uleb128 0x7	/* (DIE (0x21b) DW_TAG_pointer_type) */
 	.byte	0x4	/* DW_AT_byte_size */
-	.long	die210-d	/* DW_AT_type */
+	.4byte	die210-d	/* DW_AT_type */
 die221:
 	.uleb128 0x8	/* (DIE (0x221) DW_TAG_variable) */
 	.ascii "v\0"	/* DW_AT_name */
-	.long	die21b-d	/* DW_AT_type */
+	.4byte	die21b-d	/* DW_AT_type */
 	.byte	2f-1f	/* DW_AT_location */
 1:	.byte	0x3	/* DW_OP_addr */
-	.long	v
+	.4byte	v
 2:
 
 	.byte	0x0	/* end of children of DIE 0xb */
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.exp b/gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.exp
index 970c17b..7a33254 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.exp
@@ -19,17 +19,14 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-modula2-self-type"
-set srcfile ${testfile}.S
-set executable ${testfile}.x
-set binfile ${objdir}/${subdir}/${executable}
+standard_testfile .S
 
 # First try referencing DW_AT_frame_base which is not defined.
 if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {}] != "" } {
     return -1
 }
 
-clean_restart $executable
+clean_restart $testfile
 
 # C language would just naively print:
 # type = void (*)(void (*)(void (*)(void (*)(void (*)(...
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.S b/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.S
new file mode 100644
index 0000000..43793db
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.S
@@ -0,0 +1,93 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+	.data
+var:	.4byte	1
+
+	.section .debug_info
+.Lcu1_begin:
+	/* CU header */
+	.4byte	.Lcu1_end - .Lcu1_start		/* Length of Compilation Unit */
+.Lcu1_start:
+	.2byte	2				/* DWARF Version */
+	.4byte	.Labbrev1_begin			/* Offset into abbrev section */
+	.byte	4				/* Pointer size */
+
+	/* CU die */
+	.uleb128 1				/* Abbrev: DW_TAG_compile_unit */
+	.ascii	"file1.txt\0"			/* DW_AT_name */
+	.ascii	"GNU C 3.3.3\0"			/* DW_AT_producer */
+	.byte	4				/* DW_LANG_C_plus_plus (C++) */
+
+.Ltype_myint:
+	.uleb128	2			/* Abbrev: DW_TAG_base_type */
+	.ascii		"myint\0"			/* DW_AT_name */
+	.byte		4			/* DW_AT_byte_size */
+	.byte		5			/* DW_AT_encoding */
+
+	.uleb128	7			/* Abbrev: DW_TAG_variable (location) */
+	.ascii		"_ZN12_GLOBAL__N_11vE\0" /* DW_AT_name = "(anonymous namespace)::v" */
+	.byte		2f - 1f			/* DW_AT_location */
+1:	.byte		3			/*   DW_OP_addr */
+	.4byte		var			/*   <addr> */
+2:	.4byte		.Ltype_myint-.Lcu1_begin /* DW_AT_type */
+
+	.byte		0			/* End of children of CU */
+
+.Lcu1_end:
+
+/* Abbrev table */
+	.section .debug_abbrev
+.Labbrev1_begin:
+	.uleb128	1			/* Abbrev code */
+	.uleb128	0x11			/* DW_TAG_compile_unit */
+	.byte		1			/* has_children */
+	.uleb128	0x3			/* DW_AT_name */
+	.uleb128	0x8			/* DW_FORM_string */
+	.uleb128	0x25			/* DW_AT_producer */
+	.uleb128	0x8			/* DW_FORM_string */
+	.uleb128	0x13			/* DW_AT_language */
+	.uleb128	0xb			/* DW_FORM_data1 */
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+	.uleb128	2			/* Abbrev code */
+	.uleb128	0x24			/* DW_TAG_base_type */
+	.byte		0			/* has_children */
+	.uleb128	0x3			/* DW_AT_name */
+	.uleb128	0x8			/* DW_FORM_string */
+	.uleb128	0xb			/* DW_AT_byte_size */
+	.uleb128	0xb			/* DW_FORM_data1 */
+	.uleb128	0x3e			/* DW_AT_encoding */
+	.uleb128	0xb			/* DW_FORM_data1 */
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+	.uleb128	7			/* Abbrev code (location) */
+	.uleb128	0x34			/* DW_TAG_variable */
+	.byte		0			/* has_children */
+	.uleb128	0x3			/* DW_AT_name */
+	.uleb128	0x8			/* DW_FORM_string */
+	.uleb128	0x2			/* DW_AT_location */
+	.uleb128	0xa			/* DW_FORM_block1 */
+	.uleb128	0x49			/* DW_AT_type */
+	.uleb128	0x13			/* DW_FORM_ref4 */
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
+
+	.byte		0x0			/* Terminator */
+	.byte		0x0			/* Terminator */
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.exp b/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.exp
new file mode 100644
index 0000000..5192861
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.exp
@@ -0,0 +1,32 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+load_lib dwarf.exp
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+if {![dwarf2_support]} {
+    return 0  
+}
+
+standard_testfile .S
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" $binfile \
+	   object {nodebug}] != "" } {
+    return -1
+}
+
+clean_restart $testfile
+
+gdb_test "ptype '(anonymous namespace)::v'" "type = myint"
+gdb_test "p '(anonymous namespace)::v'" " = 1"
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-noloc.exp b/gdb/testsuite/gdb.dwarf2/dw2-noloc.exp
index 9b29b14..9a6cb2a 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-noloc.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-noloc.exp
@@ -33,10 +33,7 @@ if { [prepare_for_testing dw2-noloc.exp "dw2-noloc" {dw2-noloc-main.c dw2-noloc.
 # unresolvable: .symtab entry does not exist for this symbol name.
 # DW_AT_declaration is not present in any of these DIEs.
 
-proc file_symbols {type} {
-    global pf_prefix
-    set old_prefix $pf_prefix
-    lappend pf_prefix "$type:"
+proc file_symbols {type} { with_test_prefix "$type" {
 
     global gdb_prompt
 
@@ -78,9 +75,7 @@ proc file_symbols {type} {
     # As DW_AT_declaration is not present in this DIE
     # it should print <optimized out>.  As usefulness of such DIE is not
     # clear its resolution is not being tested.
-
-    set pf_prefix $old_prefix
-}
+}}
 
 file_symbols no-run
 
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap.exp b/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap.exp
index 738fd5f..cc2f75b 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap.exp
@@ -19,12 +19,13 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-objfile-overlap"
+standard_testfile
+
 set srcfile_outer ${testfile}-outer.S
 set srcfile_inner ${testfile}-inner.S
 set executable_outer ${testfile}-outer.x
-set binfile_outer ${objdir}/${subdir}/${executable_outer}
-set binfile_inner ${objdir}/${subdir}/${testfile}-inner.x
+set binfile_outer ${binfile}-outer.x
+set binfile_inner ${binfile}-inner.x
 
 if { [gdb_compile "${srcdir}/${subdir}/${srcfile_outer}" "${binfile_outer}" \
       object {}] != ""
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-op-call.S b/gdb/testsuite/gdb.dwarf2/dw2-op-call.S
index c369966..39345b9 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-op-call.S
+++ b/gdb/testsuite/gdb.dwarf2/dw2-op-call.S
@@ -23,6 +23,23 @@ array2:	.2byte	2
 array3:	.2byte	3
 
 	.section .debug_info
+.Lcu0_begin:
+	/* CU header */
+	.4byte	.Lcu0_end - .Lcu0_start		/* Length of Compilation Unit */
+.Lcu0_start:
+	.2byte	2				/* DWARF Version */
+	.4byte	.Labbrev1_begin			/* Offset into abbrev section */
+	.byte	4				/* Pointer size */
+
+	/* CU die */
+	.uleb128 1				/* Abbrev: DW_TAG_compile_unit */
+	.ascii	"file0.txt\0"			/* DW_AT_name */
+	.ascii	"GNU C 3.3.3\0"			/* DW_AT_producer */
+	.byte	2				/* DW_LANG_C (C) */
+
+	.byte	0				/* End of children of CU */
+.Lcu0_end:
+
 .Lcu1_begin:
 	/* CU header */
 	.4byte	.Lcu1_end - .Lcu1_start		/* Length of Compilation Unit */
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-op-call.exp b/gdb/testsuite/gdb.dwarf2/dw2-op-call.exp
index cd6e4f8..dcd9b20 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-op-call.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-op-call.exp
@@ -21,8 +21,10 @@ if {![dwarf2_support]} {
     return 0   
 }
 
-set testfile "dw2-op-call"
-if { [prepare_for_testing ${testfile}.exp ${testfile} [list ${testfile}.S main.c] {nodebug}] } {
+standard_testfile .S main.c
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} \
+	  [list $srcfile $srcfile2] {nodebug}] } {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-op-stack-value.exp b/gdb/testsuite/gdb.dwarf2/dw2-op-stack-value.exp
index f731d7b..125b2af 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-op-stack-value.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-op-stack-value.exp
@@ -19,15 +19,14 @@ if {![dwarf2_support]} {
     return 0   
 }
 
-set testfile "dw2-op-stack-value"
-set srcfile ${testfile}.S
-set executable ${testfile}.x
+standard_testfile .S
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objdir}/${subdir}/${executable}" object {nodebug}] != "" } {
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" $binfile \
+	   object {nodebug}] != "" } {
     return -1
 }
 
-clean_restart $executable
+clean_restart $testfile
 
 gdb_test "p/x stack2" " = 0x1"
 gdb_test "p/x stack8" " = 0x1"
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-param-error.S b/gdb/testsuite/gdb.dwarf2/dw2-param-error.S
index 4941545..1efb469 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-param-error.S
+++ b/gdb/testsuite/gdb.dwarf2/dw2-param-error.S
@@ -18,10 +18,10 @@ var:	.4byte	23
 
 	.section	.debug_info
 debug_start:
-	.long	debug_end - 1f	/* Length of Compilation Unit Info */
+	.4byte	debug_end - 1f	/* Length of Compilation Unit Info */
 1:
 	.2byte	0x3	/* DWARF version number */
-	.long	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
+	.4byte	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
 	.byte	0x4	/* Pointer Size (in bytes) */
 	.uleb128 0x1	/* (DIE (0xb) DW_TAG_compile_unit) */
 	.ascii "GNU C 4.4.3\0"	/* DW_AT_producer */
@@ -29,19 +29,19 @@ debug_start:
 	.ascii "1.c\0"	/* DW_AT_name */
 	.uleb128 0x4	/* (DIE (0x3c) DW_TAG_subprogram) */
 	.ascii "f\0"	/* DW_AT_name */
-	.long	f_start	/* DW_AT_low_pc */
-	.long	f_end	/* DW_AT_high_pc */
+	.4byte	f_start	/* DW_AT_low_pc */
+	.4byte	f_end	/* DW_AT_high_pc */
 	.byte	0x1	/* DW_AT_prototyped */
 
 	.uleb128 0x5	/* (DIE (0x42) DW_TAG_formal_parameter) */
 	.ascii	"bad\0"		/* DW_AT_name */
-	.long	type - debug_start	/* DW_AT_type */
+	.4byte	type - debug_start	/* DW_AT_type */
 	.byte	2f - 1f	/* DW_AT_location */
 1:	.byte	0x06	/* DW_OP_deref */
 2:
 	.uleb128 0x5	/* (DIE (0x??) DW_TAG_formal_parameter) */
 	.ascii	"good\0"		/* DW_AT_name */
-	.long	type - debug_start	/* DW_AT_type */
+	.4byte	type - debug_start	/* DW_AT_type */
 	.byte	2f - 1f	/* DW_AT_location */
 1:	.byte	0x03	/* DW_OP_addr */
 	.4byte	var
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-param-error.exp b/gdb/testsuite/gdb.dwarf2/dw2-param-error.exp
index 0799d1e..71faee3 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-param-error.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-param-error.exp
@@ -19,8 +19,10 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile dw2-param-error
-if { [prepare_for_testing ${testfile}.exp "${testfile}" "${testfile}-main.c ${testfile}.S" {nodebug}] } {
+standard_testfile .S dw2-param-error-main.c
+
+if { [prepare_for_testing ${testfile}.exp "${testfile}" \
+	  [list $srcfile2 $srcfile] {nodebug}] } {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-producer.exp b/gdb/testsuite/gdb.dwarf2/dw2-producer.exp
index 261b5b0..29a62c8 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-producer.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-producer.exp
@@ -19,28 +19,14 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-producer"
+standard_testfile .S
 set dwarf_srcfile "file1.txt"
-set srcfile ${testfile}.S
-set binfile ${objdir}/${subdir}/${testfile}.x
 
-if  { [gdb_compile "${srcdir}/${subdir}/main.c" "main.o" object {debug}] != "" } {
+if {[prepare_for_testing_full $testfile.exp \
+	 [list $testfile debug main.c debug $srcfile nodebug]]} {
     return -1
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${testfile}.o" object {nodebug}] != "" } {
-    return -1
-}
-
-if  { [gdb_compile "${testfile}.o main.o" "${binfile}" executable {debug}] != "" } {
-    return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 set remote_dwarf_srcfile [remote_download host ${srcdir}/${subdir}/${dwarf_srcfile}]
 
 gdb_test_no_output "set listsize 1"
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-ranges.exp b/gdb/testsuite/gdb.dwarf2/dw2-ranges.exp
index a31b3ff..dea212d 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-ranges.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-ranges.exp
@@ -24,7 +24,7 @@ if {![dwarf2_support]} {
 }
 
 # The .c files use __attribute__.
-if [get_compiler_info unused] {
+if [get_compiler_info] {
     return -1;
 }
 if !$gcc_compiled {
@@ -32,17 +32,13 @@ if !$gcc_compiled {
     return 0  
 }
 
-set testfile "dw2-ranges"
-set srcfile ${testfile}.c
-set srcfile2 ${testfile}2.c
-set srcfile3 ${testfile}3.c
-set asmfile ${objdir}/${subdir}/${testfile}.s
-set asmfile2 ${objdir}/${subdir}/${testfile}2.s
-set asmfile3 ${objdir}/${subdir}/${testfile}3.s
-set objfile ${objdir}/${subdir}/${testfile}.o
-set objfile2 ${objdir}/${subdir}/${testfile}2.o
-set objfile3 ${objdir}/${subdir}/${testfile}3.o
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile dw2-ranges.c dw2-ranges2.c dw2-ranges3.c
+set asmfile [standard_output_file ${testfile}.s]
+set asmfile2 [standard_output_file ${testfile}2.s]
+set asmfile3 [standard_output_file ${testfile}3.s]
+set objfile [standard_output_file ${testfile}.o]
+set objfile2 [standard_output_file ${testfile}2.o]
+set objfile3 [standard_output_file ${testfile}3.o]
 
 # Generate .s without debug info but provide debug info by the assembler.
 # This way we get DW_TAG_compile_unit DIE and only that DIE.
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame.exp b/gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame.exp
index 01960a6..74fb698 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame.exp
@@ -19,25 +19,17 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-ref-missing-frame"
-set srcsfile ${testfile}.S
-set objsfile ${objdir}/${subdir}/${testfile}.o
+standard_testfile .S
 set srcfuncfile ${testfile}-func.c
-set objfuncfile ${objdir}/${subdir}/${testfile}-func.o
 set srcmainfile ${testfile}-main.c
-set objmainfile ${objdir}/${subdir}/${testfile}-main.o
 set executable ${testfile}
-set binfile ${objdir}/${subdir}/${executable}
 
-if { [gdb_compile "${srcdir}/${subdir}/${srcsfile}" $objsfile object {}] != ""
-     || [gdb_compile "${srcdir}/${subdir}/${srcfuncfile}" $objfuncfile object {}] != ""
-     || [gdb_compile "${srcdir}/${subdir}/${srcmainfile}" $objmainfile object {debug}] != ""
-     || [gdb_compile "$objsfile $objfuncfile $objmainfile" $binfile executable {}] != "" } {
+if {[prepare_for_testing_full $testfile.exp \
+	 [list $testfile {} $srcfile {} $srcfuncfile {} \
+	      $srcmainfile debug]]} {
     return -1
 }
 
-clean_restart $executable
-
 # First try referencing DW_AT_frame_base which is not defined.
 if [runto func_nofb] {
     gdb_test "p func_nofb_var" {Could not find the frame base for "func_nofb".} "func_nofb print"
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-restore.exp b/gdb/testsuite/gdb.dwarf2/dw2-restore.exp
index a04ab55..081655a 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-restore.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-restore.exp
@@ -19,20 +19,13 @@
 if {![istarget x86_64-*] || ![is_lp64_target]} {
     return 0  
 }
-set testfile "dw2-restore"
-set srcfile ${testfile}.S
-set binfile ${objdir}/${subdir}/${testfile}.x
+standard_testfile .S
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable \
-       [list {additional_flags=-nostdlib}]] != "" } {
+if {[prepare_for_testing $testfile.exp $testfile [list $srcfile] \
+	 [list {additional_flags=-nostdlib}]]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto foo] {
     return 0
 }
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-simple-locdesc.exp b/gdb/testsuite/gdb.dwarf2/dw2-simple-locdesc.exp
index 72a075c..77d42ec 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-simple-locdesc.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-simple-locdesc.exp
@@ -19,16 +19,13 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-simple-locdesc"
-set srcfile ${testfile}.S
-set executable ${testfile}.x
-set binfile ${objdir}/${subdir}/${executable}
+standard_testfile .S
 
 if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {}] != "" } {
     return -1
 }
 
-clean_restart $executable
+clean_restart $testfile
 
 # Re: [patch 2/2] Fix decode_locdesc for gcc-4.7.x optimized DWARF
 # http://sourceware.org/ml/gdb-patches/2011-07/msg00766.html
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S b/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S
index de3ed5f..725c694 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S
+++ b/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S
@@ -30,7 +30,7 @@
 	.4byte	func_start			/* DW_AT_low_pc */
 	.4byte	func_end			/* DW_AT_high_pc */
 	.ascii	"main.c\0"			/* DW_AT_name */
-	.ascii	"GNU C 4.0.0\0"			/* DW_AT_producer must be >= 4.0  */
+	.ascii	"GNU C 4.5.0\0"			/* DW_AT_producer must be >= 4.5  */
 	.byte	2				/* DW_AT_language (DW_LANG_C) */
 
 	.uleb128	2			/* Abbrev: DW_TAG_subprogram */
@@ -46,8 +46,8 @@
 
 	.uleb128	0x7			/* (DIE (0x42) DW_TAG_formal_parameter) */
 	.ascii		"param\0"		/* DW_AT_name */
-	.long		.Ltype_int - .Lcu1_begin	/* DW_AT_type */
-	.long		loclist			/* DW_AT_location */
+	.4byte		.Ltype_int - .Lcu1_begin	/* DW_AT_type */
+	.4byte		loclist			/* DW_AT_location */
 
 	.uleb128	4			/* Abbrev: DW_TAG_inlined_subroutine */
 	.ascii		"inlined\0"		/* DW_AT_name */
@@ -115,14 +115,14 @@
 	.section	.debug_loc
 loclist:
 	/* Reset the location list base address first.  */
-	.long		-1, 0
+	.4byte		-1, 0
 
-	.long		func_start, func_end
+	.4byte		func_start, func_end
 	.2byte		2f-1f
 1:	.byte		0x50	/* DW_OP_reg0 */
 2:
 	/* Location list end.  */
-	.long	0, 0
+	.4byte	0, 0
 
 /* Abbrev table */
 	.section .debug_abbrev
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.exp b/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.exp
index 31d0c63..1367cb1 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.exp
@@ -36,9 +36,8 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-skip-prologue"
+standard_testfile
 set executable ${testfile}
-set binfile ${objdir}/${subdir}/${executable}
 
 if {[build_executable ${testfile}.exp ${executable} "${testfile}.c ${testfile}.S" {additional_flags=-DINLINED}] == -1} {
     return -1
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.S b/gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.S
index 4112dd1..ace2022 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.S
+++ b/gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.S
@@ -15,10 +15,10 @@
 
 	.section	.debug_info
 debug_start:
-	.long	debug_end - 1f	/* Length of Compilation Unit Info */
+	.4byte	debug_end - 1f	/* Length of Compilation Unit Info */
 1:
 	.2byte	0x3	/* DWARF version number */
-	.long	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
+	.4byte	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
 	.byte	0x4	/* Pointer Size (in bytes) */
 	.uleb128 0x1	/* (DIE (0xb) DW_TAG_compile_unit) */
 	.ascii "GNU C 4.4.3\0"	/* DW_AT_producer */
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.exp b/gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.exp
index 1468e95..03dd576 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.exp
@@ -19,10 +19,7 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-stack-boundary"
-set srcfile ${testfile}.S
-set executable ${testfile}.x
-set binfile ${objdir}/${subdir}/${executable}
+standard_testfile .S
 
 if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {}] != "" } {
     return -1
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-strp.exp b/gdb/testsuite/gdb.dwarf2/dw2-strp.exp
index 4148297..d2820ae 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-strp.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-strp.exp
@@ -22,27 +22,13 @@ if {![dwarf2_support]} {
     return 0
 }
 
-set testfile "dw2-strp"
-set srcfile ${testfile}.S
-set binfile ${objdir}/${subdir}/${testfile}.x
+standard_testfile .S
 
-if  { [gdb_compile "${srcdir}/${subdir}/main.c" "main.o" object {debug}] != "" } {
+if {[prepare_for_testing_full $testfile.exp \
+	 [list $testfile debug main.c debug $srcfile nodebug]]} {
     return -1
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${testfile}.o" object {nodebug}] != "" } {
-    return -1
-}
-
-if  { [gdb_compile "${testfile}.o main.o" "${binfile}" executable {debug}] != "" } {
-    return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 gdb_test "p a_string" " = \"hello world!\\\\n\""
 gdb_test "ptype a_string" "type = const char \\\[14\\\]"
 
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.exp b/gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.exp
index 9df6a7e..e149fe1 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.exp
@@ -19,8 +19,10 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile dw2-var-zero-addr
-if [prepare_for_testing ${testfile}.exp ${testfile} [list ${testfile}.S main.c] {nodebug}] {
+standard_testfile .S main.c
+
+if [prepare_for_testing ${testfile}.exp ${testfile} \
+	[list $srcfile $srcfile2] {nodebug}] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.S b/gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.S
index ff8c260..4602a99 100644
--- a/gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.S
+++ b/gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.S
@@ -15,10 +15,10 @@
 
 	.section	.debug_info
 debug_start:
-	.long	debug_end - 1f	/* Length of Compilation Unit Info */
+	.4byte	debug_end - 1f	/* Length of Compilation Unit Info */
 1:
 	.2byte	0x4	/* DWARF version number */
-	.long	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
+	.4byte	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
 	.byte	0x4	/* Pointer Size (in bytes) */
 	.uleb128 0x3	/* (DIE (0xb) DW_TAG_compile_unit) */
 	.ascii "GNU C 4.4.3\0"	/* DW_AT_producer */
@@ -29,15 +29,15 @@ debug_end:
 	.section	.debug_types
 types_start:
 	.macro	unit sig1 sig2 name
-	.long	2f - 1f	/* Length of Compilation Unit Info */
+	.4byte	2f - 1f	/* Length of Compilation Unit Info */
 1:
 	.2byte	0x4	/* DWARF version number */
-	.long	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
+	.4byte	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
 	.byte	0x4	/* Pointer Size (in bytes) */
 	/* signature */
 	.4byte	\sig1
 	.4byte	\sig2
-	.long	3f-types_start	/* offset into type DIE */
+	.4byte	3f-types_start	/* offset into type DIE */
 	.uleb128 0x1	/* DW_TAG_type_unit) */
 	.byte	0x0c	/* DW_AT_language = DW_LANG_C99 */
 3:
@@ -58,7 +58,7 @@ types_start:
 	.section	.debug_abbrev
 .Ldebug_abbrev0:
 	.uleb128 0x1	/* (abbrev code) */
-	.uleb128 0x11	/* (TAG: DW_TAG_type_unit) */
+	.uleb128 0x41	/* (TAG: DW_TAG_type_unit) */
 	.byte	0x1	/* DW_children_yes */
 	.uleb128 0x13	/* (DW_AT_language) */
 	.uleb128 0xb	/* (DW_FORM_data1) */
diff --git a/gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.exp b/gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.exp
index 5cc195b..2baae8b 100644
--- a/gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.exp
@@ -19,10 +19,8 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw4-sig-type-unused"
-set srcfile ${testfile}.S
-set executable ${testfile}.x
-set binfile ${objdir}/${subdir}/${executable}
+standard_testfile .S
+set executable ${testfile}
 
 if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {}] != "" } {
     return -1
diff --git a/gdb/testsuite/gdb.dwarf2/dw4-sig-types.exp b/gdb/testsuite/gdb.dwarf2/dw4-sig-types.exp
index 878627a..dd86237 100644
--- a/gdb/testsuite/gdb.dwarf2/dw4-sig-types.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw4-sig-types.exp
@@ -15,16 +15,15 @@
 
 # Test dwarf4 signatured types.
 
-set test "dw4-sig-types"
-set executable ${test}.x
+standard_testfile .cc dw4-sig-types-b.cc
 
 # This test is intended for targets which support DWARF-4.
 # Since we pass an explicit -gdwarf-4 to the compiler, we let
 # that be the test of whether the target supports it.
 
-if { [prepare_for_testing "${test}.exp" "${executable}" \
-	{dw4-sig-types.cc dw4-sig-types-b.cc} \
-	{debug c++ additional_flags=-gdwarf-4}] } {
+if { [prepare_for_testing "${testfile}.exp" "${testfile}" \
+	  [list $srcfile $srcfile2] \
+	  {debug c++ additional_flags=-gdwarf-4}] } {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.dwarf2/fission-base.S b/gdb/testsuite/gdb.dwarf2/fission-base.S
new file mode 100644
index 0000000..94ba068
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/fission-base.S
@@ -0,0 +1,364 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.
+
+   This file was created by doing:
+   gcc -gdwarf-4 -gsplit-debug -S -dA fission-base.c
+   and then massaging the output.
+*/
+
+	.file	"fission-base.c"
+
+	.text
+.Ltext0:
+
+	.globl	func
+	.type	func, @function
+func:
+.LFB0:
+	.file 1 "fission-base.c"
+	# fission-base.c:20
+	.loc 1 20 0
+	.cfi_startproc
+	pushq	%rbp	#
+	.cfi_def_cfa_offset 16
+	.cfi_offset 6, -16
+	movq	%rsp, %rbp	#,
+	.cfi_def_cfa_register 6
+	movl	%edi, -4(%rbp)	# arg, arg
+	# fission-base.c:21
+	.loc 1 21 0
+	movl	-4(%rbp), %eax	# arg, tmp61
+	addl	$1, %eax	#, D.1617
+	# fission-base.c:22
+	.loc 1 22 0
+	popq	%rbp	#
+	.cfi_def_cfa 7, 8
+	ret
+	.cfi_endproc
+.LFE0:
+	.size	func, .-func
+	.globl	main
+	.type	main, @function
+main:
+.LFB1:
+	# fission-base.c:26
+	.loc 1 26 0
+	.cfi_startproc
+	pushq	%rbp	#
+	.cfi_def_cfa_offset 16
+	.cfi_offset 6, -16
+	movq	%rsp, %rbp	#,
+	.cfi_def_cfa_register 6
+	# fission-base.c:27
+	.loc 1 27 0
+	movl	$-1, %edi	#,
+	call	func	#
+	# fission-base.c:28
+	.loc 1 28 0
+	popq	%rbp	#
+	.cfi_def_cfa 7, 8
+	ret
+	.cfi_endproc
+.LFE1:
+	.size	main, .-main
+.Letext0:
+	.section	.debug_info.dwo,"", at progbits
+.Ldebug_info0:
+	.4byte	.Ldebug_info0_end - .Ldebug_info0 - 4 # Length of Compilation Unit Info
+	.2byte	0x4	# DWARF version number
+	.4byte	.Ldebug_abbrev0	# Offset Into Abbrev. Section
+	.byte	0x8	# Pointer Size (in bytes)
+	.uleb128 0x1	# (DIE (0xb) DW_TAG_compile_unit)
+	.ascii "GNU C 4.6.x-fission\0"	# DW_AT_producer
+	.byte	0x1	# DW_AT_language
+	.ascii "fission-base.c\0"	# DW_AT_name
+	.ascii "/tmp/src/gdb/testsuite/gdb.dwarf2\0"	# DW_AT_comp_dir
+	.byte	0	# DW_AT_GNU_dwo_id
+	.byte	0
+	.byte	0
+	.byte	0
+	.byte	0
+	.byte	0
+	.byte	0
+	.byte	0
+	.uleb128 0x2	# (DIE (0x89) DW_TAG_subprogram)
+			# DW_AT_external
+	.ascii "func\0"	# DW_AT_name
+	.byte	0x1	# DW_AT_decl_file (fission-base.c)
+	.byte	0x13	# DW_AT_decl_line
+			# DW_AT_prototyped
+	.4byte	.Ldebug_info0_int	# DW_AT_type
+	.4byte	0x0	# DW_AT_ranges
+	.uleb128 0x1	# DW_AT_frame_base
+	.byte	0x9c	# DW_OP_call_frame_cfa
+	.4byte	.Ldebug_info0_int	# DW_AT_sibling
+	.uleb128 0x3	# (DIE (0xa4) DW_TAG_formal_parameter)
+	.ascii "arg\0"	# DW_AT_name
+	.byte	0x1	# DW_AT_decl_file (fission-base.c)
+	.byte	0x13	# DW_AT_decl_line
+	.4byte	.Ldebug_info0_int	# DW_AT_type
+	.uleb128 0x2	# DW_AT_location
+	.byte	0x91	# DW_OP_fbreg
+	.sleb128 -20
+	.byte	0	# end of children of DIE 0x89
+.Ldebug_info0_int:
+	.uleb128 0x4	# (DIE (0xb3) DW_TAG_base_type)
+	.byte	0x4	# DW_AT_byte_size
+	.byte	0x5	# DW_AT_encoding
+	.ascii "int\0"	# DW_AT_name
+	.uleb128 0x5	# (DIE (0xba) DW_TAG_subprogram)
+			# DW_AT_external
+	.ascii "main\0"	# DW_AT_name
+	.byte	0x1	# DW_AT_decl_file (fission-base.c)
+	.byte	0x19	# DW_AT_decl_line
+	.4byte	.Ldebug_info0_int	# DW_AT_type
+	.uleb128 0x1	# DW_AT_low_pc
+	.8byte	.LFE1-.LFB1	# DW_AT_high_pc
+	.uleb128 0x1	# DW_AT_frame_base
+	.byte	0x9c	# DW_OP_call_frame_cfa
+	.byte	0	# end of children of DIE 0xb
+.Ldebug_info0_end:
+	.section	.debug_info,"", at progbits
+.Lskeleton_debug_info0:
+	.4byte	.Lskeleton_debug_info0_end - .Lskeleton_debug_info0 - 4 # Length of Compilation Unit Info
+	.2byte	0x4	# DWARF version number
+	.4byte	.Lskeleton_debug_abbrev0	# Offset Into Abbrev. Section
+	.byte	0x8	# Pointer Size (in bytes)
+	.uleb128 0x1	# (DIE (0) DW_TAG_compile_unit)
+	.8byte	.Ltext0	# DW_AT_low_pc
+	.8byte	.Letext0-.Ltext0	# DW_AT_high_pc
+	.4byte	.Ldebug_line0	# DW_AT_stmt_list
+	.ascii "/tmp/src/gdb/testsuite/gdb.dwarf2\0"	# DW_AT_comp_dir
+	# Normally dwo_name would be "fission-base.dwo".
+	# Simplification: Leave the DWO contents in the executable.
+	.ascii "fission-base\0"	# DW_AT_GNU_dwo_name
+	.4byte	.Ldebug_pubnames0	# DW_AT_GNU_pubnames
+	.4byte	.Ldebug_pubtypes0	# DW_AT_GNU_pubtypes
+	.4byte	.Ldebug_addr0_begin	# DW_AT_GNU_addr_base
+	.4byte	.Ldebug_ranges0_begin	# DW_AT_GNU_ranges_base
+	.byte	0	# DW_AT_GNU_dwo_id
+	.byte	0
+	.byte	0
+	.byte	0
+	.byte	0
+	.byte	0
+	.byte	0
+	.byte	0
+.Lskeleton_debug_info0_end:
+	.section	.debug_abbrev,"", at progbits
+.Lskeleton_debug_abbrev0:
+	.uleb128 0x1	# (abbrev code)
+	.uleb128 0x11	# (TAG: DW_TAG_compile_unit)
+	.byte	0	# DW_children_no
+	.uleb128 0x11	# (DW_AT_low_pc)
+	.uleb128 0x1	# (DW_FORM_addr)
+	.uleb128 0x12	# (DW_AT_high_pc)
+	.uleb128 0x7	# (DW_FORM_data8)
+	.uleb128 0x10	# (DW_AT_stmt_list)
+	.uleb128 0x17	# (DW_FORM_sec_offset)
+	.uleb128 0x1b	# (DW_AT_comp_dir)
+	.uleb128 0x8	# (DW_FORM_string)
+	.uleb128 0x2130	# (DW_AT_GNU_dwo_name)
+	.uleb128 0x8	# (DW_FORM_string)
+	.uleb128 0x2134	# (DW_AT_GNU_pubnames)
+	.uleb128 0x17	# (DW_FORM_sec_offset)
+	.uleb128 0x2135	# (DW_AT_GNU_pubtypes)
+	.uleb128 0x17	# (DW_FORM_sec_offset)
+	.uleb128 0x2133	# (DW_AT_GNU_addr_base)
+	.uleb128 0x17	# (DW_FORM_sec_offset)
+	.uleb128 0x2132	# (DW_AT_GNU_ranges_base)
+	.uleb128 0x17	# (DW_FORM_sec_offset)
+	.uleb128 0x2131	# (DW_AT_GNU_dwo_id)
+	.uleb128 0x7	# (DW_FORM_data8)
+	.byte	0
+	.byte	0
+	.byte	0	# end of skeleton .debug_abbrev
+	.section	.debug_abbrev.dwo,"", at progbits
+.Ldebug_abbrev0:
+	.uleb128 0x1	# (abbrev code)
+	.uleb128 0x11	# (TAG: DW_TAG_compile_unit)
+	.byte	0x1	# DW_children_yes
+	.uleb128 0x25	# (DW_AT_producer)
+	.uleb128 0x8	# (DW_FORM_string)
+	.uleb128 0x13	# (DW_AT_language)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x3	# (DW_AT_name)
+	.uleb128 0x8	# (DW_FORM_string)
+	.uleb128 0x1b	# (DW_AT_comp_dir)
+	.uleb128 0x8	# (DW_FORM_string)
+	.uleb128 0x2131	# (DW_AT_GNU_dwo_id)
+	.uleb128 0x7	# (DW_FORM_data8)
+	.byte	0
+	.byte	0
+	.uleb128 0x2	# (abbrev code)
+	.uleb128 0x2e	# (TAG: DW_TAG_subprogram)
+	.byte	0x1	# DW_children_yes
+	.uleb128 0x3f	# (DW_AT_external)
+	.uleb128 0x19	# (DW_FORM_flag_present)
+	.uleb128 0x3	# (DW_AT_name)
+	.uleb128 0x8	# (DW_FORM_string)
+	.uleb128 0x3a	# (DW_AT_decl_file)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x3b	# (DW_AT_decl_line)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x27	# (DW_AT_prototyped)
+	.uleb128 0x19	# (DW_FORM_flag_present)
+	.uleb128 0x49	# (DW_AT_type)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.uleb128 0x55	# (DW_AT_ranges)
+	.uleb128 0x17	# (DW_FORM_sec_offset)
+	.uleb128 0x40	# (DW_AT_frame_base)
+	.uleb128 0x18	# (DW_FORM_exprloc)
+	.uleb128 0x1	# (DW_AT_sibling)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.byte	0
+	.byte	0
+	.uleb128 0x3	# (abbrev code)
+	.uleb128 0x5	# (TAG: DW_TAG_formal_parameter)
+	.byte	0	# DW_children_no
+	.uleb128 0x3	# (DW_AT_name)
+	.uleb128 0x8	# (DW_FORM_string)
+	.uleb128 0x3a	# (DW_AT_decl_file)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x3b	# (DW_AT_decl_line)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x49	# (DW_AT_type)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.uleb128 0x2	# (DW_AT_location)
+	.uleb128 0x18	# (DW_FORM_exprloc)
+	.byte	0
+	.byte	0
+	.uleb128 0x4	# (abbrev code)
+	.uleb128 0x24	# (TAG: DW_TAG_base_type)
+	.byte	0	# DW_children_no
+	.uleb128 0xb	# (DW_AT_byte_size)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x3e	# (DW_AT_encoding)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x3	# (DW_AT_name)
+	.uleb128 0x8	# (DW_FORM_string)
+	.byte	0
+	.byte	0
+	.uleb128 0x5	# (abbrev code)
+	.uleb128 0x2e	# (TAG: DW_TAG_subprogram)
+	.byte	0	# DW_children_no
+	.uleb128 0x3f	# (DW_AT_external)
+	.uleb128 0x19	# (DW_FORM_flag_present)
+	.uleb128 0x3	# (DW_AT_name)
+	.uleb128 0x8	# (DW_FORM_string)
+	.uleb128 0x3a	# (DW_AT_decl_file)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x3b	# (DW_AT_decl_line)
+	.uleb128 0xb	# (DW_FORM_data1)
+	.uleb128 0x49	# (DW_AT_type)
+	.uleb128 0x13	# (DW_FORM_ref4)
+	.uleb128 0x11	# (DW_AT_low_pc)
+	.uleb128 0x1f01	# (DW_FORM_GNU_addr_index)
+	.uleb128 0x12	# (DW_AT_high_pc)
+	.uleb128 0x7	# (DW_FORM_data8)
+	.uleb128 0x40	# (DW_AT_frame_base)
+	.uleb128 0x18	# (DW_FORM_exprloc)
+	.byte	0
+	.byte	0
+	.byte	0
+	.section	.debug_pubnames,"", at progbits
+.Ldebug_pubnames0:
+	.4byte	0x20	# Length of Public Names Info
+	.2byte	0x2	# DWARF Version
+	.4byte	.Lskeleton_debug_info0	# Offset of Compilation Unit Info
+	.4byte	0xd2	# Compilation Unit Length
+	.4byte	0x89	# DIE offset
+	.ascii "func\0"	# external name
+	.4byte	0xba	# DIE offset
+	.ascii "main\0"	# external name
+	.4byte	0
+	.section	.debug_pubtypes,"", at progbits
+.Ldebug_pubtypes0:
+	.4byte	0x16	# Length of Public Type Names Info
+	.2byte	0x2	# DWARF Version
+	.4byte	.Lskeleton_debug_info0	# Offset of Compilation Unit Info
+	.4byte	0xd2	# Compilation Unit Length
+	.4byte	.Ldebug_info0_int	# DIE offset
+	.ascii "int\0"	# external name
+	.4byte	0
+	.section	.debug_aranges,"", at progbits
+	.4byte	0x2c	# Length of Address Ranges Info
+	.2byte	0x2	# DWARF Version
+	.4byte	.Lskeleton_debug_info0	# Offset of Compilation Unit Info
+	.byte	0x8	# Size of Address
+	.byte	0	# Size of Segment Descriptor
+	.2byte	0	# Pad to 16 byte boundary
+	.2byte	0
+	.8byte	.Ltext0	# Address
+	.8byte	.Letext0-.Ltext0	# Length
+	.8byte	0
+	.8byte	0
+	.section	.debug_line,"", at progbits
+.Ldebug_line0:
+	.section	.debug_line.dwo,"", at progbits
+.Lskeleton_debug_line0:
+	.4byte	.LELT0-.LSLT0	# Length of Source Line Info
+.LSLT0:
+	.2byte	0x4	# DWARF Version
+	.4byte	.LELTP0-.LASLTP0	# Prolog Length
+.LASLTP0:
+	.byte	0x1	# Minimum Instruction Length
+	.byte	0x1	# Maximum Operations Per Instruction
+	.byte	0x1	# Default is_stmt_start flag
+	.byte	0xf6	# Line Base Value (Special Opcodes)
+	.byte	0xf5	# Line Range Value (Special Opcodes)
+	.byte	0xa	# Special Opcode Base
+	.byte	0	# opcode: 0x1 has 0 args
+	.byte	0x1	# opcode: 0x2 has 1 args
+	.byte	0x1	# opcode: 0x3 has 1 args
+	.byte	0x1	# opcode: 0x4 has 1 args
+	.byte	0x1	# opcode: 0x5 has 1 args
+	.byte	0	# opcode: 0x6 has 0 args
+	.byte	0	# opcode: 0x7 has 0 args
+	.byte	0	# opcode: 0x8 has 0 args
+	.byte	0x1	# opcode: 0x9 has 1 args
+	.byte	0	# End directory table
+	.ascii "fission-base.c\0"	# File Entry: 0x1
+	.uleb128 0
+	.uleb128 0
+	.uleb128 0
+	.byte	0	# End file name table
+.LELTP0:
+.LELT0:
+	.section	.debug_addr,"", at progbits
+.Ldebug_addr0:
+	# Shift the real entries down by a non-zero amount to test
+	# DW_AT_GNU_addr_base.
+	.8byte	0,0
+.Ldebug_addr0_begin:
+	.8byte	.LFB0	# DW_AT_low_pc
+	.8byte	.LFB1	# DW_AT_low_pc
+
+	.section	.debug_ranges,"", at progbits
+.Ldebug_ranges0:
+	# Shift the real entries down by a non-zero amount to test
+	# DW_AT_GNU_ranges_base.
+	.8byte	0,0
+.Ldebug_ranges0_begin:
+	# Note: Since the DW_TAG_compile_unit specifies low_pc, that sets
+	# the base address, and thus we have to subtract it here.
+	.8byte	.LFB0 - .Ltext0	# Offset 0
+	.8byte	.LFE0 - .Ltext0
+	.8byte	0
+	.8byte	0
+
+	.section	.note.GNU-stack,"", at progbits
diff --git a/gdb/testsuite/gdb.dwarf2/fission-base.c b/gdb/testsuite/gdb.dwarf2/fission-base.c
new file mode 100644
index 0000000..f2eb387
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/fission-base.c
@@ -0,0 +1,28 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+int
+func (int arg)
+{
+  return arg + 1;
+}
+
+int
+main ()
+{
+  return func (-1);
+}
diff --git a/gdb/testsuite/gdb.dwarf2/fission-base.exp b/gdb/testsuite/gdb.dwarf2/fission-base.exp
new file mode 100644
index 0000000..2bd2748
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/fission-base.exp
@@ -0,0 +1,64 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib dwarf.exp
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+if ![dwarf2_support] {
+    return 0  
+}
+
+# This test can only be run on x86-64 targets.
+if {![istarget x86_64-*] || ![is_lp64_target]} {
+    return 0
+}
+
+set basename "fission-base"
+
+standard_testfile .S
+
+# IWBN to use prepare_for_testing here, but we need to set debug-file-directory
+# before we load the binary.
+
+if { [build_executable "$testfile.exp" "$testfile" "$srcfile" {nodebug}] } {
+    return -1
+}
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+# Set debug-file-directory so we find the dwo file.
+gdb_test_no_output "set debug-file-directory $subdir"
+gdb_load [standard_output_file $testfile]
+
+if ![runto_main] {
+    return -1
+}
+
+# Do a few basic things to verify we're finding the DWO debug info.
+
+gdb_test "ptype main" "type = int \\(\\)"
+gdb_test "ptype func" "type = int \\(int\\)"
+
+gdb_test "frame" "#0 *main \\(\\) at $testfile\\.c:$decimal.*" \
+    "frame in main"
+
+gdb_test "break func" "Breakpoint.*at.* file .*$testfile\\.c, line .*"
+
+gdb_test "continue" "Breakpoint.* func \\(arg=-1\\).*" \
+    "continue to func"
+
+gdb_test "frame" "#0 *func \\(arg=-1\\) at $testfile\\.c:$decimal.*" \
+    "frame in func"
diff --git a/gdb/testsuite/gdb.dwarf2/fission-reread.S b/gdb/testsuite/gdb.dwarf2/fission-reread.S
new file mode 100644
index 0000000..3ad6518
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/fission-reread.S
@@ -0,0 +1,457 @@
+/* Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Testcase to exercise the code path in bug 13961 for Fission.
+   http://gcc.gnu.org/wiki/DebugFission
+
+   Compiled from:
+
+   class foo
+   {
+    public:
+     int bar;
+   };
+
+   foo baz;
+
+   int
+   main ()
+   {
+     return 0;
+   }
+
+   And then manually edited to insert the necessary DW_AT_specification
+   entries to trigger the desired code path.
+   There's no real need to make this architecture-specific, so it has been
+   further hand-edited to support that.
+*/
+
+	.file	"fission-reread.cc"
+
+	.globl	baz
+	.data	/* Previously this used .bss, but it's not portable.  */
+	.align 4
+	.type	baz, @object
+	.size	baz, 4
+baz:
+	.zero	4
+
+	.text
+.Ltext0:
+	.globl	main
+	.type	main, @function
+main:
+.LFB0:
+	.file 1 "fission-reread.cc"
+	.loc 1 11 0
+	.4byte 0
+.LFE0:
+	.size	main, .-main
+.Letext0:
+
+	.section	.debug_types.dwo
+.Ltu_start_dwo:
+	.4byte	.Ltu_end_dwo - .Ltu_start_dwo - 4	/* Length of Compilation Unit Info */
+	.2byte	0x4	/* DWARF version number */
+	.4byte	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
+	.byte	0x4	/* Pointer Size (in bytes) */
+	.byte	0x19	/* Type Signature */
+	.byte	0x8b
+	.byte	0x7e
+	.byte	0xac
+	.byte	0xce
+	.byte	0xf1
+	.byte	0x22
+	.byte	0x90
+	.4byte	.Ltu_class_type - .Ltu_start_dwo	/* Offset to Type DIE */
+	.uleb128 0x1	/* (DIE (0x17) DW_TAG_type_unit) */
+	.byte	0x4	/* DW_AT_language */
+	.byte	0x73	/* DW_AT_GNU_odr_signature */
+	.byte	0xea
+	.byte	0x85
+	.byte	0x23
+	.byte	0x75
+	.byte	0x8a
+	.byte	0x7e
+	.byte	0x87
+	.4byte	.Lskeleton_debug_line0	/* DW_AT_stmt_list */
+
+	/* Manually inserted to have a DW_AT_specification refering to
+	   something and appearing ahead of it.  */
+	.uleb128 0x8	/* DW_TAG_class_type */
+	.4byte .Ltu_class_type - .Ltu_start_dwo
+	/* End of manual insertion */
+
+.Ltu_class_type:
+	.uleb128 0x2	/* (DIE (0x25) DW_TAG_class_type) */
+	.ascii "foo\0"	/* DW_AT_name */
+	.byte	0x4	/* DW_AT_byte_size */
+	.byte	0x1	/* DW_AT_decl_file (fission-reread.cc) */
+	.byte	0x1	/* DW_AT_decl_line */
+	.4byte	.Ltu_int	/* DW_AT_sibling */
+	.uleb128 0x3	/* (DIE (0x31) DW_TAG_member) */
+	.ascii "bar\0"	/* DW_AT_name */
+	.byte	0x1	/* DW_AT_decl_file (fission-reread.cc) */
+	.byte	0x4	/* DW_AT_decl_line */
+	.4byte	.Ltu_int	/* DW_AT_type */
+	.byte	0	/* DW_AT_data_member_location */
+	.byte	0x1	/* DW_AT_accessibility */
+	.byte	0	/* end of children of DIE 0x25 */
+.Ltu_int:
+	.uleb128 0x4	/* (DIE (0x3f) DW_TAG_base_type) */
+	.byte	0x4	/* DW_AT_byte_size */
+	.byte	0x5	/* DW_AT_encoding */
+	.ascii "int\0"	/* DW_AT_name */
+	.byte	0	/* end of children of DIE 0x17 */
+.Ltu_end_dwo:
+
+	.section	.debug_types
+.Ltu_start:
+	.4byte	.Ltu_end - .Ltu_start - 4	/* Length of Type Unit Info */
+	.2byte	0x4	/* DWARF version number */
+	.4byte	.Lskeleton_debug_abbrev0	/* Offset Into Abbrev. Section */
+	.byte	0x4	/* Pointer Size (in bytes) */
+	.byte	0x19	/* Type Signature */
+	.byte	0x8b
+	.byte	0x7e
+	.byte	0xac
+	.byte	0xce
+	.byte	0xf1
+	.byte	0x22
+	.byte	0x90
+	.4byte	0	/* Offset to Type DIE */
+	.uleb128 0x2	/* (DIE (0) DW_TAG_type_unit) */
+	.ascii "/tmp/src/gdb/testsuite/gdb.dwarf2\0"	/* DW_AT_comp_dir */
+	/* Normally dwo_name would be "fission-reread.dwo". */
+	/* Simplification: Leave the DWO contents in the executable. */
+	.ascii "fission-reread\0"	/* DW_AT_GNU_dwo_name */
+	.4byte	.Ldebug_pubnames0	/* DW_AT_GNU_pubnames */
+	.4byte	.Ldebug_pubtypes0	/* DW_AT_GNU_pubtypes */
+	.4byte	.Ldebug_addr0	/* DW_AT_GNU_addr_base */
+.Ltu_end:
+
+	.section	.debug_info.dwo
+.Lcu_start_dwo:
+	.4byte	.Lcu_end_dwo - .Lcu_start_dwo - 4	/* Length of Compilation Unit Info */
+	.2byte	0x4	/* DWARF version number */
+	.4byte	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
+	.byte	0x4	/* Pointer Size (in bytes) */
+	.uleb128 0x5	/* (DIE (0xb) DW_TAG_compile_unit) */
+	.ascii "GNU C++ 4.6.x-fission\0"	/* DW_AT_producer */
+	.byte	0x4	/* DW_AT_language */
+	.ascii "fission-reread.cc\0"	/* DW_AT_name */
+	.ascii "/tmp/src/gdb/testsuite/gdb.dwarf2\0"	/* DW_AT_comp_dir */
+	.byte	0	/* DW_AT_GNU_dwo_id */
+	.byte	0
+	.byte	0
+	.byte	0
+	.byte	0
+	.byte	0
+	.byte	0
+	.byte	0
+.Lcu_int:
+	.uleb128 0x4	/* (DIE (0x7f) DW_TAG_base_type) */
+	.byte	0x4	/* DW_AT_byte_size */
+	.byte	0x5	/* DW_AT_encoding */
+	.ascii "int\0"	/* DW_AT_name */
+	.uleb128 0x6	/* (DIE (0x86) DW_TAG_subprogram) */
+			/* DW_AT_external */
+	.ascii "main\0"	/* DW_AT_name */
+	.byte	0x1	/* DW_AT_decl_file (fission-reread.cc) */
+	.byte	0xa	/* DW_AT_decl_line */
+	.4byte	.Lcu_int	/* DW_AT_type */
+	.uleb128 0	/* DW_AT_low_pc */
+	.4byte	.LFE0-.LFB0	/* DW_AT_high_pc */
+	.uleb128 0x1	/* DW_AT_frame_base */
+	.byte	0x9c	/* DW_OP_call_frame_cfa */
+	.uleb128 0x7	/* (DIE (0x9d) DW_TAG_variable) */
+	.ascii "baz\0"	/* DW_AT_name */
+	.byte	0x1	/* DW_AT_decl_file (fission-reread.cc) */
+	.byte	0x7	/* DW_AT_decl_line */
+	.byte	0x19	/* DW_AT_type */
+	.byte	0x8b
+	.byte	0x7e
+	.byte	0xac
+	.byte	0xce
+	.byte	0xf1
+	.byte	0x22
+	.byte	0x90
+			/* DW_AT_external */
+	.uleb128 0x2	/* DW_AT_location */
+	.byte	0xfb	/* DW_OP_GNU_addr_index */
+	.uleb128 0x1	/* (index into .debug_addr) */
+	.byte	0	/* end of children of DIE 0xb */
+.Lcu_end_dwo:
+
+	.section	.debug_info
+.Lskeleton_debug_info0:
+.Lcu_start:
+	.4byte	.Lcu_end - .Lcu_start - 4	/* Length of Compilation Unit Info */
+	.2byte	0x4	/* DWARF version number */
+	.4byte	.Lskeleton_debug_abbrev0	/* Offset Into Abbrev. Section */
+	.byte	0x4	/* Pointer Size (in bytes) */
+	.uleb128 0x1	/* (DIE (0) DW_TAG_compile_unit) */
+	.4byte	.Ltext0	/* DW_AT_low_pc */
+	.4byte	.Letext0-.Ltext0	/* DW_AT_high_pc */
+	.4byte	.Ldebug_line0	/* DW_AT_stmt_list */
+	.ascii "/tmp/src/gdb/testsuite/gdb.dwarf2\0"	/* DW_AT_comp_dir */
+	/* Normally dwo_name would be "fission-reread.dwo". */
+	/* Simplification: Leave the DWO contents in the executable. */
+	.ascii "fission-reread\0"	/* DW_AT_GNU_dwo_name */
+	.4byte	.Ldebug_pubnames0	/* DW_AT_GNU_pubnames */
+	.4byte	.Ldebug_pubtypes0	/* DW_AT_GNU_pubtypes */
+	.4byte	.Ldebug_addr0	/* DW_AT_GNU_addr_base */
+	.byte	0	/* DW_AT_GNU_dwo_id */
+	.byte	0
+	.byte	0
+	.byte	0
+	.byte	0
+	.byte	0
+	.byte	0
+	.byte	0
+.Lcu_end:
+
+	.section	.debug_abbrev
+.Lskeleton_debug_abbrev0:
+	.uleb128 0x1	/* (abbrev code) */
+	.uleb128 0x11	/* (TAG: DW_TAG_compile_unit) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0x11	/* (DW_AT_low_pc) */
+	.uleb128 0x1	/* (DW_FORM_addr) */
+	.uleb128 0x12	/* (DW_AT_high_pc) */
+	.uleb128 0x6	/* (DW_FORM_data4) */
+	.uleb128 0x10	/* (DW_AT_stmt_list) */
+	.uleb128 0x17	/* (DW_FORM_sec_offset) */
+	.uleb128 0x1b	/* (DW_AT_comp_dir) */
+	.uleb128 0x8	/* (DW_FORM_string) */
+	.uleb128 0x2130	/* (DW_AT_GNU_dwo_name) */
+	.uleb128 0x8	/* (DW_FORM_string) */
+	.uleb128 0x2134	/* (DW_AT_GNU_pubnames) */
+	.uleb128 0x17	/* (DW_FORM_sec_offset) */
+	.uleb128 0x2135	/* (DW_AT_GNU_pubtypes) */
+	.uleb128 0x17	/* (DW_FORM_sec_offset) */
+	.uleb128 0x2133	/* (DW_AT_GNU_addr_base) */
+	.uleb128 0x17	/* (DW_FORM_sec_offset) */
+	.uleb128 0x2131	/* (DW_AT_GNU_dwo_id) */
+	.uleb128 0x7	/* (DW_FORM_data8) */
+	.byte	0
+	.byte	0
+	.uleb128 0x2	/* (abbrev code) */
+	.uleb128 0x41	/* (TAG: DW_TAG_type_unit) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0x1b	/* (DW_AT_comp_dir) */
+	.uleb128 0x8	/* (DW_FORM_string) */
+	.uleb128 0x2130	/* (DW_AT_GNU_dwo_name) */
+	.uleb128 0x8	/* (DW_FORM_string) */
+	.uleb128 0x2134	/* (DW_AT_GNU_pubnames) */
+	.uleb128 0x17	/* (DW_FORM_sec_offset) */
+	.uleb128 0x2135	/* (DW_AT_GNU_pubtypes) */
+	.uleb128 0x17	/* (DW_FORM_sec_offset) */
+	.uleb128 0x2133	/* (DW_AT_GNU_addr_base) */
+	.uleb128 0x17	/* (DW_FORM_sec_offset) */
+	.byte	0
+	.byte	0
+	.byte	0	/* end of skeleton .debug_abbrev */
+	.section	.debug_abbrev.dwo
+.Ldebug_abbrev0:
+	.uleb128 0x1	/* (abbrev code) */
+	.uleb128 0x41	/* (TAG: DW_TAG_type_unit) */
+	.byte	0x1	/* DW_children_yes */
+	.uleb128 0x13	/* (DW_AT_language) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x210f	/* (DW_AT_GNU_odr_signature) */
+	.uleb128 0x7	/* (DW_FORM_data8) */
+	.uleb128 0x10	/* (DW_AT_stmt_list) */
+	.uleb128 0x17	/* (DW_FORM_sec_offset) */
+	.byte	0
+	.byte	0
+	.uleb128 0x2	/* (abbrev code) */
+	.uleb128 0x2	/* (TAG: DW_TAG_class_type) */
+	.byte	0x1	/* DW_children_yes */
+	.uleb128 0x3	/* (DW_AT_name) */
+	.uleb128 0x8	/* (DW_FORM_string) */
+	.uleb128 0xb	/* (DW_AT_byte_size) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3a	/* (DW_AT_decl_file) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3b	/* (DW_AT_decl_line) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x1	/* (DW_AT_sibling) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.byte	0
+	.byte	0
+	.uleb128 0x3	/* (abbrev code) */
+	.uleb128 0xd	/* (TAG: DW_TAG_member) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0x3	/* (DW_AT_name) */
+	.uleb128 0x8	/* (DW_FORM_string) */
+	.uleb128 0x3a	/* (DW_AT_decl_file) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3b	/* (DW_AT_decl_line) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x49	/* (DW_AT_type) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.uleb128 0x38	/* (DW_AT_data_member_location) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x32	/* (DW_AT_accessibility) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.byte	0
+	.byte	0
+	.uleb128 0x4	/* (abbrev code) */
+	.uleb128 0x24	/* (TAG: DW_TAG_base_type) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0xb	/* (DW_AT_byte_size) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3e	/* (DW_AT_encoding) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3	/* (DW_AT_name) */
+	.uleb128 0x8	/* (DW_FORM_string) */
+	.byte	0
+	.byte	0
+	.uleb128 0x5	/* (abbrev code) */
+	.uleb128 0x11	/* (TAG: DW_TAG_compile_unit) */
+	.byte	0x1	/* DW_children_yes */
+	.uleb128 0x25	/* (DW_AT_producer) */
+	.uleb128 0x8	/* (DW_FORM_string) */
+	.uleb128 0x13	/* (DW_AT_language) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3	/* (DW_AT_name) */
+	.uleb128 0x8	/* (DW_FORM_string) */
+	.uleb128 0x1b	/* (DW_AT_comp_dir) */
+	.uleb128 0x8	/* (DW_FORM_string) */
+	.uleb128 0x2131	/* (DW_AT_GNU_dwo_id) */
+	.uleb128 0x7	/* (DW_FORM_data8) */
+	.byte	0
+	.byte	0
+	.uleb128 0x6	/* (abbrev code) */
+	.uleb128 0x2e	/* (TAG: DW_TAG_subprogram) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0x3f	/* (DW_AT_external) */
+	.uleb128 0x19	/* (DW_FORM_flag_present) */
+	.uleb128 0x3	/* (DW_AT_name) */
+	.uleb128 0x8	/* (DW_FORM_string) */
+	.uleb128 0x3a	/* (DW_AT_decl_file) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3b	/* (DW_AT_decl_line) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x49	/* (DW_AT_type) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.uleb128 0x11	/* (DW_AT_low_pc) */
+	.uleb128 0x1f01	/* (DW_FORM_GNU_addr_index) */
+	.uleb128 0x12	/* (DW_AT_high_pc) */
+	.uleb128 0x6	/* (DW_FORM_data4) */
+	.uleb128 0x40	/* (DW_AT_frame_base) */
+	.uleb128 0x18	/* (DW_FORM_exprloc) */
+	.byte	0
+	.byte	0
+	.uleb128 0x7	/* (abbrev code) */
+	.uleb128 0x34	/* (TAG: DW_TAG_variable) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0x3	/* (DW_AT_name) */
+	.uleb128 0x8	/* (DW_FORM_string) */
+	.uleb128 0x3a	/* (DW_AT_decl_file) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3b	/* (DW_AT_decl_line) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x49	/* (DW_AT_type) */
+	.uleb128 0x20	/* (DW_FORM_ref_sig8) */
+	.uleb128 0x3f	/* (DW_AT_external) */
+	.uleb128 0x19	/* (DW_FORM_flag_present) */
+	.uleb128 0x2	/* (DW_AT_location) */
+	.uleb128 0x18	/* (DW_FORM_exprloc) */
+	.byte	0
+	.byte	0
+
+	/* Manually inserted.  */
+	.uleb128 0x8		/* abbrev code */
+	.uleb128 0x2		/* DW_TAG_class_type */
+	.byte	0x0		/* DW_has_children_no */
+	.uleb128 0x47		/* DW_AT_specification */
+	.uleb128 0x13		/* DW_FORM_ref4 */
+	.byte	0x0		/* Terminator */
+	.byte	0x0		/* Terminator */
+	/* End of manual insertion.  */
+
+	.byte	0
+	.section	.debug_pubnames
+.Ldebug_pubnames0:
+	.4byte	0x1f	/* Length of Public Names Info */
+	.2byte	0x2	/* DWARF Version */
+	.4byte	.Lskeleton_debug_info0	/* Offset of Compilation Unit Info */
+	.4byte	0xb0	/* Compilation Unit Length */
+	.4byte	0x86	/* DIE offset */
+	.ascii "main\0"	/* external name */
+	.4byte	0x9d	/* DIE offset */
+	.ascii "baz\0"	/* external name */
+	.4byte	0
+	.section	.debug_pubtypes
+.Ldebug_pubtypes0:
+	.4byte	0x1e	/* Length of Public Type Names Info */
+	.2byte	0x2	/* DWARF Version */
+	.4byte	.Lskeleton_debug_info0	/* Offset of Compilation Unit Info */
+	.4byte	0xb0	/* Compilation Unit Length */
+	.4byte	0x7f	/* DIE offset */
+	.ascii "int\0"	/* external name */
+	.4byte	0x25	/* DIE offset */
+	.ascii "foo\0"	/* external name */
+	.4byte	0
+	.section	.debug_aranges
+	.4byte	0x2c	/* Length of Address Ranges Info */
+	.2byte	0x2	/* DWARF Version */
+	.4byte	.Lskeleton_debug_info0	/* Offset of Compilation Unit Info */
+	.byte	0x8	/* Size of Address */
+	.byte	0	/* Size of Segment Descriptor */
+	.2byte	0	/* Pad to 16 byte boundary */
+	.2byte	0
+	.4byte	.Ltext0	/* Address */
+	.4byte	.Letext0-.Ltext0	/* Length */
+	.4byte	0
+	.4byte	0
+	.section	.debug_line
+.Ldebug_line0:
+	.section	.debug_line.dwo
+.Lskeleton_debug_line0:
+	.4byte	.LELT0-.LSLT0	/* Length of Source Line Info */
+.LSLT0:
+	.2byte	0x4	/* DWARF Version */
+	.4byte	.LELTP0-.LASLTP0	/* Prolog Length */
+.LASLTP0:
+	.byte	0x1	/* Minimum Instruction Length */
+	.byte	0x1	/* Maximum Operations Per Instruction */
+	.byte	0x1	/* Default is_stmt_start flag */
+	.byte	0xf6	/* Line Base Value (Special Opcodes) */
+	.byte	0xf5	/* Line Range Value (Special Opcodes) */
+	.byte	0xa	/* Special Opcode Base */
+	.byte	0	/* opcode: 0x1 has 0 args */
+	.byte	0x1	/* opcode: 0x2 has 1 args */
+	.byte	0x1	/* opcode: 0x3 has 1 args */
+	.byte	0x1	/* opcode: 0x4 has 1 args */
+	.byte	0x1	/* opcode: 0x5 has 1 args */
+	.byte	0	/* opcode: 0x6 has 0 args */
+	.byte	0	/* opcode: 0x7 has 0 args */
+	.byte	0	/* opcode: 0x8 has 0 args */
+	.byte	0x1	/* opcode: 0x9 has 1 args */
+	.byte	0	/* End directory table */
+	.ascii "fission-reread.cc\0"	/* File Entry: 0x1 */
+	.uleb128 0
+	.uleb128 0
+	.uleb128 0
+	.byte	0	/* End file name table */
+.LELTP0:
+.LELT0:
+	.section	.debug_addr
+.Ldebug_addr0:
+	.4byte	.LFB0	/* DW_AT_low_pc */
+	.4byte	baz	/* DW_AT_location */
diff --git a/gdb/testsuite/gdb.dwarf2/fission-reread.exp b/gdb/testsuite/gdb.dwarf2/fission-reread.exp
new file mode 100644
index 0000000..9efc530
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/fission-reread.exp
@@ -0,0 +1,44 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib dwarf.exp
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+if ![dwarf2_support] {
+    return 0  
+}
+
+set basename "fission-reread"
+
+standard_testfile .S
+
+# IWBN to use prepare_for_testing here, but we need to set debug-file-directory
+# before we load the binary.
+
+if { [build_executable "$testfile.exp" "$testfile" "$srcfile" {nodebug}] } {
+    return -1
+}
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+# Set debug-file-directory so we find the dwo file.
+gdb_test_no_output "set debug-file-directory $subdir"
+gdb_load [standard_output_file $testfile]
+
+gdb_test "break main" "Breakpoint.*at.*"
+
+# If we get this far gdb didn't crash, nor did an error occur.
+pass $testfile
diff --git a/gdb/testsuite/gdb.dwarf2/implptr-64bit.exp b/gdb/testsuite/gdb.dwarf2/implptr-64bit.exp
index cd86389..78f1594 100644
--- a/gdb/testsuite/gdb.dwarf2/implptr-64bit.exp
+++ b/gdb/testsuite/gdb.dwarf2/implptr-64bit.exp
@@ -19,8 +19,7 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "implptr-64bit"
-set srcfile ${testfile}.S
+standard_testfile .S
 set mainfile main.c
 
 proc test { dwarf_version offset_size addr_size ref_addr_size } {
diff --git a/gdb/testsuite/gdb.dwarf2/implptr-optimized-out.S b/gdb/testsuite/gdb.dwarf2/implptr-optimized-out.S
index 673e56e..2f268b1 100644
--- a/gdb/testsuite/gdb.dwarf2/implptr-optimized-out.S
+++ b/gdb/testsuite/gdb.dwarf2/implptr-optimized-out.S
@@ -15,10 +15,10 @@
 
 	.section	.debug_info
 d:
-	.long	debug_end - 1f	/* Length of Compilation Unit Info */
+	.4byte	debug_end - 1f	/* Length of Compilation Unit Info */
 1:
 	.2byte	0x3	/* DWARF version number */
-	.long	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
+	.4byte	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
 	.byte	0x4	/* Pointer Size (in bytes) */
 	.uleb128 0x1	/* (DIE (0xb) DW_TAG_compile_unit) */
 	.ascii "GNU C 4.4.3\0"	/* DW_AT_producer */
@@ -53,7 +53,7 @@ d:
 .Ltype_structptr:
 	.uleb128 0x5	/* DW_TAG_pointer_type */
 	.byte	0x4	/* DW_AT_byte_size */
-	.long	.Ltype_struct - d	/* DW_AT_type */
+	.4byte	.Ltype_struct - d	/* DW_AT_type */
 
 .Lvar_out:
 	.uleb128 0x4	/* (DW_TAG_variable) */
diff --git a/gdb/testsuite/gdb.dwarf2/implptr-optimized-out.exp b/gdb/testsuite/gdb.dwarf2/implptr-optimized-out.exp
index ac0f95f..a810f7c 100644
--- a/gdb/testsuite/gdb.dwarf2/implptr-optimized-out.exp
+++ b/gdb/testsuite/gdb.dwarf2/implptr-optimized-out.exp
@@ -19,11 +19,9 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "implptr-optimized-out"
-set srcfile ${testfile}.S
+standard_testfile .S
 set mainfile main.c
 set executable ${testfile}
-set binfile ${objdir}/${subdir}/${executable}
 
 if [prepare_for_testing ${testfile}.exp $executable "${srcfile} ${mainfile}" {}] {
     return -1
diff --git a/gdb/testsuite/gdb.dwarf2/implptr.exp b/gdb/testsuite/gdb.dwarf2/implptr.exp
index 55181e4..a510516 100644
--- a/gdb/testsuite/gdb.dwarf2/implptr.exp
+++ b/gdb/testsuite/gdb.dwarf2/implptr.exp
@@ -21,10 +21,8 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "implptr"
-set srcfile ${testfile}.S
+standard_testfile .S
 set csrcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}.x
 set opts {}
 
 if [info exists COMPILE] {
@@ -36,7 +34,7 @@ if [info exists COMPILE] {
     return 0  
 }
 
-if {[prepare_for_testing ${testfile}.exp ${testfile}.x $srcfile $opts]} {
+if {[prepare_for_testing ${testfile}.exp ${testfile} $srcfile $opts]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.dwarf2/mac-fileno.exp b/gdb/testsuite/gdb.dwarf2/mac-fileno.exp
index 5fc5975..6e8bd9e 100644
--- a/gdb/testsuite/gdb.dwarf2/mac-fileno.exp
+++ b/gdb/testsuite/gdb.dwarf2/mac-fileno.exp
@@ -22,28 +22,14 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "mac-fileno"
+standard_testfile .S
 set dwarf_srcfile "file1.txt"
-set srcfile ${testfile}.S
-set binfile ${objdir}/${subdir}/${testfile}.x
 
-if  { [gdb_compile "${srcdir}/${subdir}/main.c" "main.o" object {debug}] != "" } {
+if {[prepare_for_testing_full $testfile.exp \
+	 [list $testfile debug main.c debug $srcfile nodebug]]} {
     return -1
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${testfile}.o" object {nodebug}] != "" } {
-    return -1
-}
-
-if  { [gdb_compile "${testfile}.o main.o" "${binfile}" executable {debug}] != "" } {
-    return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 set remote_dwarf_srcfile [remote_download host ${srcdir}/${subdir}/${dwarf_srcfile}]
 
 gdb_test_no_output "set listsize 1"
diff --git a/gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.S b/gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.S
index db84f16..8650268 100644
--- a/gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.S
+++ b/gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.S
@@ -56,46 +56,46 @@ c:
 .Letext0:
 	.file 1 "gdb.dwarf2/member-ptr-forwardref.cc"
 	.section	.debug_info
-	.long	0xa9	/* Length of Compilation Unit Info */
+	.4byte	0xa9	/* Length of Compilation Unit Info */
 	.2byte	0x3	/* DWARF version number */
-	.long	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
+	.4byte	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
 	.byte	0x4	/* Pointer Size (in bytes) */
 	.uleb128 0x1	/* (DIE (0xb) DW_TAG_compile_unit) */
-	.long	.LASF2	/* DW_AT_producer: "GNU C++ 4.4.2 20091222 (Red Hat 4.4.2-20)" */
+	.4byte	.LASF2	/* DW_AT_producer: "GNU C++ 4.4.2 20091222 (Red Hat 4.4.2-20)" */
 	.byte	0x4	/* DW_AT_language */
-	.long	.LASF3	/* DW_AT_name: "gdb.dwarf2/member-ptr-forwardref.cc" */
-	.long	.LASF4	/* DW_AT_comp_dir: "gdb/testsuite" */
-	.long	.Ltext0	/* DW_AT_low_pc */
-	.long	.Letext0	/* DW_AT_high_pc */
-	.long	.Ldebug_line0	/* DW_AT_stmt_list */
+	.4byte	.LASF3	/* DW_AT_name: "gdb.dwarf2/member-ptr-forwardref.cc" */
+	.4byte	.LASF4	/* DW_AT_comp_dir: "gdb/testsuite" */
+	.4byte	.Ltext0	/* DW_AT_low_pc */
+	.4byte	.Letext0	/* DW_AT_high_pc */
+	.4byte	.Ldebug_line0	/* DW_AT_stmt_list */
 	.uleb128 0x2	/* (DIE (0x25) DW_TAG_typedef) */
-	.long	.LASF5	/* DW_AT_name: "fp_t" */
+	.4byte	.LASF5	/* DW_AT_name: "fp_t" */
 	.byte	0x1	/* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
 	.byte	0x13	/* DW_AT_decl_line */
-	.long	0x30	/* DW_AT_type */
+	.4byte	0x30	/* DW_AT_type */
 	.uleb128 0x3	/* (DIE (0x30) DW_TAG_structure_type) */
 	.byte	0x8	/* DW_AT_byte_size */
 	.byte	0x1	/* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
 	.byte	0x13	/* DW_AT_decl_line */
-	.long	0x51	/* DW_AT_sibling */
+	.4byte	0x51	/* DW_AT_sibling */
 	.uleb128 0x4	/* (DIE (0x38) DW_TAG_member) */
-	.long	.LASF0	/* DW_AT_name: "__pfn" */
+	.4byte	.LASF0	/* DW_AT_name: "__pfn" */
 	.byte	0x1	/* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
 	.byte	0x13	/* DW_AT_decl_line */
-	.long	0x85	/* DW_AT_type */
+	.4byte	0x85	/* DW_AT_type */
 	.sleb128 0	/* DW_AT_data_member_location */
 	.uleb128 0x4	/* (DIE (0x44) DW_TAG_member) */
-	.long	.LASF1	/* DW_AT_name: "__delta" */
+	.4byte	.LASF1	/* DW_AT_name: "__delta" */
 	.byte	0x1	/* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
 	.byte	0x13	/* DW_AT_decl_line */
-	.long	0x61	/* DW_AT_type */
+	.4byte	0x61	/* DW_AT_type */
 	.sleb128 4	/* DW_AT_data_member_location */
 	.byte	0x0	/* end of children of DIE 0x30 */
 	.uleb128 0x5	/* (DIE (0x51) DW_TAG_subroutine_type) */
-	.long	0x61	/* DW_AT_type */
-	.long	0x61	/* DW_AT_sibling */
+	.4byte	0x61	/* DW_AT_type */
+	.4byte	0x61	/* DW_AT_sibling */
 	.uleb128 0x6	/* (DIE (0x5a) DW_TAG_formal_parameter) */
-	.long	0x68	/* DW_AT_type */
+	.4byte	0x68	/* DW_AT_type */
 	.byte	0x1	/* DW_AT_artificial */
 	.byte	0x0	/* end of children of DIE 0x51 */
 	.uleb128 0x7	/* (DIE (0x61) DW_TAG_base_type) */
@@ -104,42 +104,42 @@ c:
 	.ascii "int\0"	/* DW_AT_name */
 	.uleb128 0x8	/* (DIE (0x68) DW_TAG_pointer_type) */
 	.byte	0x4	/* DW_AT_byte_size */
-	.long	0x6e	/* DW_AT_type */
+	.4byte	0x6e	/* DW_AT_type */
 	.uleb128 0x9	/* (DIE (0x6e) DW_TAG_structure_type) */
 	.ascii "C\0"	/* DW_AT_name */
 	.byte	0x8	/* DW_AT_byte_size */
 	.byte	0x1	/* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
 	.byte	0x16	/* DW_AT_decl_line */
-	.long	0x85	/* DW_AT_sibling */
+	.4byte	0x85	/* DW_AT_sibling */
 	.uleb128 0xa	/* (DIE (0x78) DW_TAG_member) */
 	.ascii "fp\0"	/* DW_AT_name */
 	.byte	0x1	/* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
 	.byte	0x17	/* DW_AT_decl_line */
-	.long	0x30	/* DW_AT_type */
+	.4byte	0x30	/* DW_AT_type */
 	.sleb128 0	/* DW_AT_data_member_location */
 	.byte	0x3	/* DW_AT_accessibility */
 	.byte	0x0	/* end of children of DIE 0x6e */
 	.uleb128 0x8	/* (DIE (0x85) DW_TAG_pointer_type) */
 	.byte	0x4	/* DW_AT_byte_size */
-	.long	0x51	/* DW_AT_type */
+	.4byte	0x51	/* DW_AT_type */
 	.uleb128 0xb	/* (DIE (0x8b) DW_TAG_variable) */
 	.ascii "fp\0"	/* DW_AT_name */
 	.byte	0x1	/* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
 	.byte	0x14	/* DW_AT_decl_line */
-	.long	0x25	/* DW_AT_type */
+	.4byte	0x25	/* DW_AT_type */
 	.byte	0x1	/* DW_AT_external */
 	.byte	0x5	/* DW_AT_location */
 	.byte	0x3	/* DW_OP_addr */
-	.long	fp
+	.4byte	fp
 	.uleb128 0xb	/* (DIE (0x9c) DW_TAG_variable) */
 	.ascii "c\0"	/* DW_AT_name */
 	.byte	0x1	/* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
 	.byte	0x18	/* DW_AT_decl_line */
-	.long	0x6e	/* DW_AT_type */
+	.4byte	0x6e	/* DW_AT_type */
 	.byte	0x1	/* DW_AT_external */
 	.byte	0x5	/* DW_AT_location */
 	.byte	0x3	/* DW_OP_addr */
-	.long	c
+	.4byte	c
 	.byte	0x0	/* end of children of DIE 0xb */
 	.section	.debug_abbrev
 	.uleb128 0x1	/* (abbrev code) */
@@ -291,25 +291,25 @@ c:
 	.byte	0x0
 	.byte	0x0
 	.section	.debug_pubnames,"", at progbits
-	.long	0x1b	/* Length of Public Names Info */
+	.4byte	0x1b	/* Length of Public Names Info */
 	.2byte	0x2	/* DWARF Version */
-	.long	.Ldebug_info0	/* Offset of Compilation Unit Info */
-	.long	0xad	/* Compilation Unit Length */
-	.long	0x8b	/* DIE offset */
+	.4byte	.Ldebug_info0	/* Offset of Compilation Unit Info */
+	.4byte	0xad	/* Compilation Unit Length */
+	.4byte	0x8b	/* DIE offset */
 	.ascii "fp\0"	/* external name */
-	.long	0x9c	/* DIE offset */
+	.4byte	0x9c	/* DIE offset */
 	.ascii "c\0"	/* external name */
-	.long	0x0
+	.4byte	0x0
 	.section	.debug_pubtypes,"", at progbits
-	.long	0x1d	/* Length of Public Type Names Info */
+	.4byte	0x1d	/* Length of Public Type Names Info */
 	.2byte	0x2	/* DWARF Version */
-	.long	.Ldebug_info0	/* Offset of Compilation Unit Info */
-	.long	0xad	/* Compilation Unit Length */
-	.long	0x25	/* DIE offset */
+	.4byte	.Ldebug_info0	/* Offset of Compilation Unit Info */
+	.4byte	0xad	/* Compilation Unit Length */
+	.4byte	0x25	/* DIE offset */
 	.ascii "fp_t\0"	/* external name */
-	.long	0x6e	/* DIE offset */
+	.4byte	0x6e	/* DIE offset */
 	.ascii "C\0"	/* external name */
-	.long	0x0
+	.4byte	0x0
 	.section	.debug_str,"MS", at progbits,1
 .LASF5:
 	.string	"fp_t"
diff --git a/gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.exp b/gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.exp
index 3af2082..5b8b5ed 100644
--- a/gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.exp
+++ b/gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.exp
@@ -21,11 +21,9 @@ if {![dwarf2_support]} {
 
 if { [skip_cplus_tests] } { continue }
 
-set testfile member-ptr-forwardref
-set executable ${testfile}
-set binfile ${objdir}/${subdir}/${executable}.x
+standard_testfile .S
 
-if { [gdb_compile "${srcdir}/${subdir}/${testfile}.S" ${binfile} object {debug}] != "" } {
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" ${binfile} object {debug}] != "" } {
     untested ${testfile}.exp
     return -1
 }
diff --git a/gdb/testsuite/gdb.dwarf2/pieces.exp b/gdb/testsuite/gdb.dwarf2/pieces.exp
index 58331c1..eb3b5dc 100644
--- a/gdb/testsuite/gdb.dwarf2/pieces.exp
+++ b/gdb/testsuite/gdb.dwarf2/pieces.exp
@@ -24,12 +24,10 @@ if {![is_x86_like_target]} {
     return 0  
 }
 
-set testfile "pieces"
-set srcfile ${testfile}.S
+standard_testfile .S
 set csrcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}.x
 
-if {[prepare_for_testing ${testfile}.exp ${testfile}.x $srcfile]} {
+if {[prepare_for_testing ${testfile}.exp ${testfile} $srcfile]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.dwarf2/pr10770.exp b/gdb/testsuite/gdb.dwarf2/pr10770.exp
index 094f807..4c60b16 100644
--- a/gdb/testsuite/gdb.dwarf2/pr10770.exp
+++ b/gdb/testsuite/gdb.dwarf2/pr10770.exp
@@ -15,15 +15,14 @@
 
 # Test DW_OP_call_frame_cfa.
 
-set testfile "pr10770"
-set srcfile ${testfile}.c
+standard_testfile
 
 if {[prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}]} {
     return 0
 }
 
 # This test can only be run on targets which use GCC.
-get_compiler_info ${testfile}
+get_compiler_info
 if {![test_compiler_info "gcc-*"]} {
     return 0
 }
diff --git a/gdb/testsuite/gdb.dwarf2/pr11465.S b/gdb/testsuite/gdb.dwarf2/pr11465.S
index 730ee9e..0433df7 100644
--- a/gdb/testsuite/gdb.dwarf2/pr11465.S
+++ b/gdb/testsuite/gdb.dwarf2/pr11465.S
@@ -44,19 +44,19 @@ text_end:
 
 	.section	.debug_info
 d:
-	.long	.Ldebug_info_end - 1f /* Length of CU info */
+	.4byte	.Ldebug_info_end - 1f /* Length of CU info */
 1:
 	.2byte	0x2		/* DWARF version number */
-	.long	.Ldebug_abbrev0	/* Abbrev offset */
+	.4byte	.Ldebug_abbrev0	/* Abbrev offset */
 	.byte	0x4		/* Pointer size */
 dieb:	.uleb128 0x1		/* DW_TAG_compile_unit */
-	.long	.LASF4		/* DW_AT_producer */
+	.4byte	.LASF4		/* DW_AT_producer */
 	.byte	0x4		/* DW_AT_language */
-	.long	.LASF5		/* DW_AT_name */
-	.long	.LASF6		/* DW_AT_comp_dir */
-	.long	text_start	/* DW_AT_low_pc */
-	.long	text_end	/* DW_AT_high_pc */
-	.long	text_start	/* DW_AT_entry_pc */
+	.4byte	.LASF5		/* DW_AT_name */
+	.4byte	.LASF6		/* DW_AT_comp_dir */
+	.4byte	text_start	/* DW_AT_low_pc */
+	.4byte	text_end	/* DW_AT_high_pc */
+	.4byte	text_start	/* DW_AT_entry_pc */
 die29:	.uleb128 0x2		/* DW_TAG_namespace */
 	.string	"N"		/* DW_AT_name */
 die32:	.uleb128 0x3		/* DW_TAG_class_type */
@@ -64,68 +64,68 @@ die32:	.uleb128 0x3		/* DW_TAG_class_type */
 	.byte	0x1		/* DW_AT_declaration */
 die36:	.uleb128 0x4		/* DW_TAG_typedef */
 	.string	"u"		/* DW_AT_name */
-	.long	die7e-d		/* DW_AT_type */
+	.4byte	die7e-d		/* DW_AT_type */
 die3f:	.uleb128 0x5		/* DW_TAG_variable */
 	.string	"f"		/* DW_AT_name */
-	.long	.LASF0		/* DW_AT_MIPS_linkage_name */
-	.long	die36-d		/* DW_AT_type */
+	.4byte	.LASF0		/* DW_AT_MIPS_linkage_name */
+	.4byte	die36-d		/* DW_AT_type */
 	.byte	0x1		/* DW_AT_external */
 	.byte	0x1		/* DW_AT_declaration */
 die4e:	.uleb128 0x5		/* DW_TAG_variable */
 	.string	"c"		/* DW_AT_name */
-	.long	.LASF1		/* DW_AT_MIPS_linkage_name */
-	.long	die5e-d		/* DW_AT_type */
+	.4byte	.LASF1		/* DW_AT_MIPS_linkage_name */
+	.4byte	die5e-d		/* DW_AT_type */
 	.byte	0x1		/* DW_AT_external */
 	.byte	0x1		/* DW_AT_declaration */
 	.byte	0x0
 die5e:	.uleb128 0x6		/* DW_TAG_class_type */
-	.long	die32-d		/* DW_AT_specification */
+	.4byte	die32-d		/* DW_AT_specification */
 	.byte	0x1		/* DW_AT_byte_size */
 die6a:	.uleb128 0x7		/* DW_TAG_subprogram */
 	.byte	0x1		/* DW_AT_external */
 	.string	"C"		/* DW_AT_name */
 	.byte	0x1		/* DW_AT_declaration */
 die71:	.uleb128 0x8		/* DW_TAG_formal_parameter */
-	.long	die8f-d		/* DW_AT_type */
+	.4byte	die8f-d		/* DW_AT_type */
 	.byte	0x1		/* DW_AT_artificial */
 die77:	.uleb128 0x9		/* DW_TAG_formal_parameter */
-	.long	die7e-d		/* DW_AT_type */
+	.4byte	die7e-d		/* DW_AT_type */
 	.byte	0x0
 	.byte	0x0
 die7e:	.uleb128 0xa		/* DW_TAG_pointer_type */
 	.byte	PTRBITS / 8	/* DW_AT_byte_size */
-	.long	die84-d		/* DW_AT_type */
+	.4byte	die84-d		/* DW_AT_type */
 die84:	.uleb128 0xb		/* DW_TAG_subroutine_type */
 die89:	.uleb128 0x9		/* DW_TAG_formal_parameter */
-	.long	die5e-d		/* DW_AT_type */
+	.4byte	die5e-d		/* DW_AT_type */
 	.byte	0x0
 die8f:	.uleb128 0xa		/* DW_TAG_pointer_type */
 	.byte	PTRBITS / 8	/* DW_AT_byte_size */
-	.long	die5e-d		/* DW_AT_type */
+	.4byte	die5e-d		/* DW_AT_type */
 die95:	.uleb128 0xc		/* DW_TAG_subprogram */
-	.long	die6a-d		/* DW_AT_specification */
+	.4byte	die6a-d		/* DW_AT_specification */
 	.byte	0x2		/* DW_AT_inline */
 die9f:	.uleb128 0xd		/* DW_TAG_formal_parameter */
-	.long	.LASF7		/* DW_AT_name */
-	.long	dieaf-d		/* DW_AT_type */
+	.4byte	.LASF7		/* DW_AT_name */
+	.4byte	dieaf-d		/* DW_AT_type */
 	.byte	0x1		/* DW_AT_artificial */
 diea9:	.uleb128 0x9		/* DW_TAG_formal_parameter */
-	.long	die7e-d		/* DW_AT_type */
+	.4byte	die7e-d		/* DW_AT_type */
 	.byte	0x0
 dieaf:	.uleb128 0xe		/* DW_TAG_const_type */
-	.long	die8f-d		/* DW_AT_type */
+	.4byte	die8f-d		/* DW_AT_type */
 dieb4:	.uleb128 0xf		/* DW_TAG_subprogram */
-	.long	die95-d		/* DW_AT_abstract_origin */
-	.long	_ZN1N1cE	/* DW_AT_low_pc */
-	.long	_ZN1N1cE + 1	/* DW_AT_high_pc */
+	.4byte	die95-d		/* DW_AT_abstract_origin */
+	.4byte	_ZN1N1cE	/* DW_AT_low_pc */
+	.4byte	_ZN1N1cE + 1	/* DW_AT_high_pc */
 diec9:	.uleb128 0x10		/* DW_TAG_subprogram */
-	.long	die9f-d		/* DW_AT_abstract_origin */
+	.4byte	die9f-d		/* DW_AT_abstract_origin */
 	.byte	2f-1f		/* DW_AT_location */
 1:
 	.byte	0x50		/* DW_OP_reg0 */
 2:
 died1:	.uleb128 0x10		/* DW_TAG_formal_parameter */
-	.long	diea9-d		/* DW_AT_abstract_origin */
+	.4byte	diea9-d		/* DW_AT_abstract_origin */
 	.byte	2f-1f		/* DW_AT_location */
 1:
 	.byte	0x51		/* DW_OP_reg1 */
@@ -133,19 +133,19 @@ died1:	.uleb128 0x10		/* DW_TAG_formal_parameter */
 	.byte	0x0
 dieda:	.uleb128 0x11		/* DW_TAG_subprogram */
 	.byte	0x1		/* DW_AT_external */
-	.long	.LASF8		/* DW_AT_name */
-	.long	dief2-d		/* DW_AT_type */
-	.long	_ZN1N1cE	/* DW_AT_low_pc */
-	.long	_ZN1N1cE + 1	/* DW_AT_high_pc */
+	.4byte	.LASF8		/* DW_AT_name */
+	.4byte	dief2-d		/* DW_AT_type */
+	.4byte	_ZN1N1cE	/* DW_AT_low_pc */
+	.4byte	_ZN1N1cE + 1	/* DW_AT_high_pc */
 dief2:	.uleb128 0x12		/* DW_TAG_base_type */
 	.byte	0x4		/* DW_AT_byte_size */
 	.byte	0x5		/* DW_AT_encoding */
 	.string	"int"		/* DW_AT_name */
 die149:	.uleb128 0x16		/* DW_TAG_variable */
-	.long	die4e-d		/* DW_AT_specification */
+	.4byte	die4e-d		/* DW_AT_specification */
 	.byte	0x5		/* DW_AT_location */
 	.byte	0x3
-	.long	_ZN1N1cE
+	.4byte	_ZN1N1cE
 	.byte	0x0
 .Ldebug_info_end:
 	.section	.debug_abbrev
diff --git a/gdb/testsuite/gdb.dwarf2/pr11465.exp b/gdb/testsuite/gdb.dwarf2/pr11465.exp
index d6513f5..22c5007 100644
--- a/gdb/testsuite/gdb.dwarf2/pr11465.exp
+++ b/gdb/testsuite/gdb.dwarf2/pr11465.exp
@@ -19,10 +19,7 @@ if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "pr11465"
-set srcfile "$testfile.S"
-set executable "$testfile.x"
-set binfile [file join $objdir $subdir $executable]
+standard_testfile .S
 
 if [is_ilp32_target] {
     set ptrbits 32
@@ -35,7 +32,7 @@ if  { [gdb_compile [file join $srcdir $subdir $srcfile] \
     return -1
 }
 
-clean_restart $executable
+clean_restart $testfile
 
 # Test delayed physname computations
 gdb_test "p N::c.C" { = {void \(N::C \* const, void \(\*\)\(N::C\)\)}.*}
diff --git a/gdb/testsuite/gdb.dwarf2/pr13961.S b/gdb/testsuite/gdb.dwarf2/pr13961.S
new file mode 100644
index 0000000..5d7c58c
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/pr13961.S
@@ -0,0 +1,361 @@
+/* Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* Testcase to exercise the code path in bug 13961.
+
+   Compiled from:
+
+   class foo
+   {
+    public:
+     int bar;
+   };
+
+   foo baz;
+
+   int
+   main ()
+   {
+     return 0;
+   }
+
+   And then manually edited to insert the necessary DW_AT_specification
+   entries to trigger the desired code path.
+   There's no real need to make this architecture-specific, so it has been
+   further hand-edited to support that.
+*/
+
+	.file	"pr13961.cc"
+
+	.globl	baz
+	.data	/* Previously this used .bss, but it's not portable.  */
+	.align 4
+	.type	baz, @object
+	.size	baz, 4
+baz:
+#if 0
+	/* This is disabled because when it was accidentally left out it
+	   caused a segv when used with .gdb_index.  */
+	.file	1 "foo.c"
+	.loc	1 12 0
+#endif
+	.zero	4
+
+	.text
+.Ltext0:
+	.globl	main
+	.type	main, @function
+main:
+.LFB0:
+	.4byte 0
+.LFE0:
+	.size	main, .-main
+.Letext0:
+
+	.section	.debug_types,"", at progbits
+.Ldebug_types0:
+	.4byte	.Ltu_end - .Ltu_start	/* Length of Compilation Unit Info */
+.Ltu_start:
+	.2byte	0x4	/* DWARF version number */
+	.4byte	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
+	.byte	0x4	/* Pointer Size (in bytes) */
+	.byte	0x19	/* Type Signature */
+	.byte	0x8b
+	.byte	0x7e
+	.byte	0xac
+	.byte	0xce
+	.byte	0xf1
+	.byte	0x22
+	.byte	0x90
+	.4byte	.Ltu_class_type - .Ldebug_types0 /* Offset to Type DIE */
+	.uleb128 0x1	/* (DIE (0x17) DW_TAG_type_unit) */
+	.byte	0x4	/* DW_AT_language */
+	.byte	0x73	/* DW_AT_GNU_odr_signature */
+	.byte	0xea
+	.byte	0x85
+	.byte	0x23
+	.byte	0x75
+	.byte	0x8a
+	.byte	0x7e
+	.byte	0x87
+	.4byte	.Ldebug_line0	/* DW_AT_stmt_list */
+
+	/* Manually inserted to have a DW_AT_specification refering to
+	   something and appearing ahead of it.  */
+	.uleb128 0x8	/* DW_TAG_class_type */
+	.4byte .Ltu_class_type - .Ldebug_types0
+	/* End of manual insertion */
+
+.Ltu_class_type:
+	.uleb128 0x2	/* (DIE (0x25) DW_TAG_class_type) */
+	.ascii "foo\0"	/* DW_AT_name */
+	.byte	0x4	/* DW_AT_byte_size */
+	.byte	0x1	/* DW_AT_decl_file (pr13961.cc) */
+	.byte	0x1	/* DW_AT_decl_line */
+	.4byte	0x3f	/* DW_AT_sibling */
+	.uleb128 0x3	/* (DIE (0x31) DW_TAG_member) */
+	.ascii "bar\0"	/* DW_AT_name */
+	.byte	0x1	/* DW_AT_decl_file (pr13961.cc) */
+	.byte	0x4	/* DW_AT_decl_line */
+	.4byte	0x3f	/* DW_AT_type */
+	.byte	0	/* DW_AT_data_member_location */
+	.byte	0x1	/* DW_AT_accessibility */
+	.byte	0	/* end of children of DIE 0x25 */
+	.uleb128 0x4	/* (DIE (0x3f) DW_TAG_base_type) */
+	.byte	0x4	/* DW_AT_byte_size */
+	.byte	0x5	/* DW_AT_encoding */
+	.ascii "int\0"	/* DW_AT_name */
+	.byte	0	/* end of children of DIE 0x17 */
+
+.Ltu_end:
+
+	.section	.debug_info,"", at progbits
+.Ldebug_info0:
+	.4byte	.Lcu_end - .Lcu_start	/* Length of Compilation Unit Info */
+.Lcu_start:
+	.2byte	0x4	/* DWARF version number */
+	.4byte	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
+	.byte	0x4	/* Pointer Size (in bytes) */
+	.uleb128 0x5	/* (DIE (0xb) DW_TAG_compile_unit) */
+	.4byte	.LASF0	/* DW_AT_producer: "GNU C++ 4.6.3 20120306" */
+	.byte	0x4	/* DW_AT_language */
+	.4byte	.LASF1	/* DW_AT_name: "pr13961.cc" */
+	.4byte	.LASF2	/* DW_AT_comp_dir: "." */
+	.4byte	.Ltext0	/* DW_AT_low_pc */
+	.4byte	.Letext0	/* DW_AT_high_pc */
+	.4byte	.Ldebug_line0	/* DW_AT_stmt_list */
+.Lint_base_type:
+	.uleb128 0x4	/* (DIE (0x25) DW_TAG_base_type) */
+	.byte	0x4	/* DW_AT_byte_size */
+	.byte	0x5	/* DW_AT_encoding */
+	.ascii "int\0"	/* DW_AT_name */
+	.uleb128 0x6	/* (DIE (0x2c) DW_TAG_subprogram) */
+			/* DW_AT_external */
+	.4byte	.LASF3	/* DW_AT_name: "main" */
+	.byte	0x1	/* DW_AT_decl_file (pr13961.cc) */
+	.byte	0xa	/* DW_AT_decl_line */
+	.4byte	0x25	/* DW_AT_type */
+	.4byte	.LFB0	/* DW_AT_low_pc */
+	.4byte	.LFE0	/* DW_AT_high_pc */
+	.uleb128 0x1	/* DW_AT_frame_base */
+	.byte	0x9c	/* DW_OP_call_frame_cfa */
+			/* DW_AT_GNU_all_call_sites */
+	.uleb128 0x7	/* (DIE (0x41) DW_TAG_variable) */
+	.ascii "baz\0"	/* DW_AT_name */
+	.byte	0x1	/* DW_AT_decl_file (pr13961.cc) */
+	.byte	0x7	/* DW_AT_decl_line */
+	.byte	0x19	/* DW_AT_type */
+	.byte	0x8b
+	.byte	0x7e
+	.byte	0xac
+	.byte	0xce
+	.byte	0xf1
+	.byte	0x22
+	.byte	0x90
+			/* DW_AT_external */
+	.uleb128 0x5	/* DW_AT_location */
+	.byte	0x3	/* DW_OP_addr */
+	.4byte	baz
+
+	/* Manually inserted to have a DW_AT_specification refering to
+	   something and appearing ahead of it.  */
+	.uleb128 0x8	/* DW_TAG_class_type */
+	.4byte .Lcu_class_type - .Ldebug_info0 /* DW_AT_specification */
+
+.Lcu_int_type:
+	.uleb128 0x4	/* (DIE (0x3f) DW_TAG_base_type) */
+	.byte	0x4	/* DW_AT_byte_size */
+	.byte	0x5	/* DW_AT_encoding */
+	.ascii "int\0"	/* DW_AT_name */
+.Lcu_class_type:
+	.uleb128 0x2	/* (DIE (0x25) DW_TAG_class_type) */
+	.ascii "foo2\0"	/* DW_AT_name */
+	.byte	0x4	/* DW_AT_byte_size */
+	.byte	0x1	/* DW_AT_decl_file (pr13961.cc) */
+	.byte	0x1	/* DW_AT_decl_line */
+	.4byte	0x3f	/* DW_AT_sibling */
+	.uleb128 0x3	/* (DIE (0x31) DW_TAG_member) */
+	.ascii "bar\0"	/* DW_AT_name */
+	.byte	0x1	/* DW_AT_decl_file (pr13961.cc) */
+	.byte	0x4	/* DW_AT_decl_line */
+	.4byte	.Lcu_int_type - .Ldebug_info0 /* DW_AT_type */
+	.byte	0	/* DW_AT_data_member_location */
+	.byte	0x1	/* DW_AT_accessibility */
+	.byte	0	/* end of children of DIE 0x25 */
+	.uleb128 0x4	/* (DIE (0x3f) DW_TAG_base_type) */
+	.byte	0x4	/* DW_AT_byte_size */
+	.byte	0x5	/* DW_AT_encoding */
+	.ascii "int\0"	/* DW_AT_name */
+	.byte	0	/* end of children of DIE 0x17 */
+	/* End of manual insertion */
+
+	.byte	0	/* end of children of DIE 0xb */
+
+.Lcu_end:
+
+	.section	.debug_abbrev,"", at progbits
+.Ldebug_abbrev0:
+	.uleb128 0x1	/* (abbrev code) */
+	.uleb128 0x41	/* (TAG: DW_TAG_type_unit) */
+	.byte	0x1	/* DW_children_yes */
+	.uleb128 0x13	/* (DW_AT_language) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x210f	/* (DW_AT_GNU_odr_signature) */
+	.uleb128 0x7	/* (DW_FORM_data8) */
+	.uleb128 0x10	/* (DW_AT_stmt_list) */
+	.uleb128 0x17	/* (DW_FORM_sec_offset) */
+	.byte	0
+	.byte	0
+	.uleb128 0x2	/* (abbrev code) */
+	.uleb128 0x2	/* (TAG: DW_TAG_class_type) */
+	.byte	0x1	/* DW_children_yes */
+	.uleb128 0x3	/* (DW_AT_name) */
+	.uleb128 0x8	/* (DW_FORM_string) */
+	.uleb128 0xb	/* (DW_AT_byte_size) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3a	/* (DW_AT_decl_file) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3b	/* (DW_AT_decl_line) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x1	/* (DW_AT_sibling) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.byte	0
+	.byte	0
+	.uleb128 0x3	/* (abbrev code) */
+	.uleb128 0xd	/* (TAG: DW_TAG_member) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0x3	/* (DW_AT_name) */
+	.uleb128 0x8	/* (DW_FORM_string) */
+	.uleb128 0x3a	/* (DW_AT_decl_file) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3b	/* (DW_AT_decl_line) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x49	/* (DW_AT_type) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.uleb128 0x38	/* (DW_AT_data_member_location) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x32	/* (DW_AT_accessibility) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.byte	0
+	.byte	0
+	.uleb128 0x4	/* (abbrev code) */
+	.uleb128 0x24	/* (TAG: DW_TAG_base_type) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0xb	/* (DW_AT_byte_size) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3e	/* (DW_AT_encoding) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3	/* (DW_AT_name) */
+	.uleb128 0x8	/* (DW_FORM_string) */
+	.byte	0
+	.byte	0
+	.uleb128 0x5	/* (abbrev code) */
+	.uleb128 0x11	/* (TAG: DW_TAG_compile_unit) */
+	.byte	0x1	/* DW_children_yes */
+	.uleb128 0x25	/* (DW_AT_producer) */
+	.uleb128 0xe	/* (DW_FORM_strp) */
+	.uleb128 0x13	/* (DW_AT_language) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3	/* (DW_AT_name) */
+	.uleb128 0xe	/* (DW_FORM_strp) */
+	.uleb128 0x1b	/* (DW_AT_comp_dir) */
+	.uleb128 0xe	/* (DW_FORM_strp) */
+	.uleb128 0x11	/* (DW_AT_low_pc) */
+	.uleb128 0x1	/* (DW_FORM_addr) */
+	.uleb128 0x12	/* (DW_AT_high_pc) */
+	.uleb128 0x1	/* (DW_FORM_addr) */
+	.uleb128 0x10	/* (DW_AT_stmt_list) */
+	.uleb128 0x17	/* (DW_FORM_sec_offset) */
+	.byte	0
+	.byte	0
+	.uleb128 0x6	/* (abbrev code) */
+	.uleb128 0x2e	/* (TAG: DW_TAG_subprogram) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0x3f	/* (DW_AT_external) */
+	.uleb128 0x19	/* (DW_FORM_flag_present) */
+	.uleb128 0x3	/* (DW_AT_name) */
+	.uleb128 0xe	/* (DW_FORM_strp) */
+	.uleb128 0x3a	/* (DW_AT_decl_file) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3b	/* (DW_AT_decl_line) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x49	/* (DW_AT_type) */
+	.uleb128 0x13	/* (DW_FORM_ref4) */
+	.uleb128 0x11	/* (DW_AT_low_pc) */
+	.uleb128 0x1	/* (DW_FORM_addr) */
+	.uleb128 0x12	/* (DW_AT_high_pc) */
+	.uleb128 0x1	/* (DW_FORM_addr) */
+	.uleb128 0x40	/* (DW_AT_frame_base) */
+	.uleb128 0x18	/* (DW_FORM_exprloc) */
+	.uleb128 0x2117	/* (DW_AT_GNU_all_call_sites) */
+	.uleb128 0x19	/* (DW_FORM_flag_present) */
+	.byte	0
+	.byte	0
+	.uleb128 0x7	/* (abbrev code) */
+	.uleb128 0x34	/* (TAG: DW_TAG_variable) */
+	.byte	0	/* DW_children_no */
+	.uleb128 0x3	/* (DW_AT_name) */
+	.uleb128 0x8	/* (DW_FORM_string) */
+	.uleb128 0x3a	/* (DW_AT_decl_file) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x3b	/* (DW_AT_decl_line) */
+	.uleb128 0xb	/* (DW_FORM_data1) */
+	.uleb128 0x49	/* (DW_AT_type) */
+	.uleb128 0x20	/* (DW_FORM_ref_sig8) */
+	.uleb128 0x3f	/* (DW_AT_external) */
+	.uleb128 0x19	/* (DW_FORM_flag_present) */
+	.uleb128 0x2	/* (DW_AT_location) */
+	.uleb128 0x18	/* (DW_FORM_exprloc) */
+	.byte	0
+	.byte	0
+
+	/* Manually inserted.  */
+	.uleb128 0x8		/* abbrev code */
+	.uleb128 0x2		/* DW_TAG_class_type */
+	.byte	0x0		/* DW_has_children_no */
+	.uleb128 0x47		/* DW_AT_specification */
+	.uleb128 0x13		/* DW_FORM_ref4 */
+	.byte	0x0		/* Terminator */
+	.byte	0x0		/* Terminator */
+	/* End of manual insertion.  */
+
+	.byte	0
+
+	.section	.debug_aranges,"", at progbits
+	.4byte	0x1c	/* Length of Address Ranges Info */
+	.2byte	0x2	/* DWARF Version */
+	.4byte	.Ldebug_info0	/* Offset of Compilation Unit Info */
+	.byte	0x4	/* Size of Address */
+	.byte	0	/* Size of Segment Descriptor */
+	.2byte	0	/* Pad to 8 byte boundary */
+	.2byte	0
+	.4byte	.Ltext0	/* Address */
+	.4byte	.Letext0-.Ltext0	/* Length */
+	.4byte	0
+	.4byte	0
+
+	.section	.debug_line,"", at progbits
+.Ldebug_line0:
+
+	.section	.debug_str,"MS", at progbits,1
+.LASF0:
+	.string	"GNU C++ 4.6.3 20120306"
+.LASF2:
+	.string	"."
+.LASF1:
+	.string	"pr13961.cc"
+.LASF3:
+	.string	"main"
+
diff --git a/gdb/testsuite/gdb.dwarf2/pr13961.exp b/gdb/testsuite/gdb.dwarf2/pr13961.exp
new file mode 100644
index 0000000..1dc6f0a
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/pr13961.exp
@@ -0,0 +1,34 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# A testcase to trigger the code path in bug 13961.
+
+load_lib dwarf.exp
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+if {![dwarf2_support]} {
+    return 0
+}
+
+standard_testfile .S
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] == -1 } {
+    return -1
+}
+
+gdb_test "break main" "Breakpoint.*at.*"
+
+# If we get this far gdb didn't crash.
+pass $testfile
diff --git a/gdb/testsuite/gdb.dwarf2/valop.exp b/gdb/testsuite/gdb.dwarf2/valop.exp
index 5ce7b64..9cd99f0 100644
--- a/gdb/testsuite/gdb.dwarf2/valop.exp
+++ b/gdb/testsuite/gdb.dwarf2/valop.exp
@@ -25,20 +25,13 @@ if {![is_x86_like_target]} {
     return 0  
 }
 
-set testfile "valop"
-set srcfile ${testfile}.S
-set binfile ${objdir}/${subdir}/${testfile}.x
+standard_testfile .S
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable \
-       [list {additional_flags=-nostdlib}]] != "" } {
+if {[prepare_for_testing $testfile.exp $testfile \
+	 [list $srcfile] [list {additional_flags=-nostdlib}]]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto_main] {
     return -1
 }
diff --git a/gdb/testsuite/gdb.fortran/Makefile.in b/gdb/testsuite/gdb.fortran/Makefile.in
index aaa3508..c78a57a 100644
--- a/gdb/testsuite/gdb.fortran/Makefile.in
+++ b/gdb/testsuite/gdb.fortran/Makefile.in
@@ -28,6 +28,7 @@ all info install-info dvi install uninstall installcheck check:
 
 clean mostlyclean:
 	-rm -f *~ *.o *.ci
+	-rm -f *.dwo *.dwp
 	-rm -f core ${EXECUTABLES}
 
 distclean maintainer-clean realclean: clean
diff --git a/gdb/testsuite/gdb.fortran/array-element.exp b/gdb/testsuite/gdb.fortran/array-element.exp
index 412e3ea..90c42d1 100644
--- a/gdb/testsuite/gdb.fortran/array-element.exp
+++ b/gdb/testsuite/gdb.fortran/array-element.exp
@@ -18,26 +18,14 @@
 # This file is part of the gdb testsuite.  It contains test for printing
 # the elements of an array which is passed as pointer to a subroutine.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if { [skip_fortran_tests] } { return -1 }
 
-set testfile "array-element"
-set srcfile ${testfile}.f
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .f
 
-if {[gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
-	 executable {debug f90}] != ""} {
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug f90}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto sub_] then {
     perror "couldn't run to breakpoint sub_"
     continue
diff --git a/gdb/testsuite/gdb.fortran/charset.exp b/gdb/testsuite/gdb.fortran/charset.exp
index 08ea9fa..15ec9ef 100644
--- a/gdb/testsuite/gdb.fortran/charset.exp
+++ b/gdb/testsuite/gdb.fortran/charset.exp
@@ -18,8 +18,7 @@
 
 if { [skip_fortran_tests] } { return -1 }
 
-set testfile "charset"
-set srcfile ${testfile}.f90
+standard_testfile .f90
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug additional_flags=-fbackslash f90}] } {
     return -1
 }
diff --git a/gdb/testsuite/gdb.fortran/complex.exp b/gdb/testsuite/gdb.fortran/complex.exp
index 3b05995..a37abef 100644
--- a/gdb/testsuite/gdb.fortran/complex.exp
+++ b/gdb/testsuite/gdb.fortran/complex.exp
@@ -13,21 +13,13 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile "complex"
-set srcfile ${testfile}.f
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .f
 
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
-	  executable {debug f90 quiet}] != "" } {
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug f90 quiet}]} {
     untested "Couldn't compile ${srcfile}"
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto MAIN__] then {
     perror "Couldn't run to MAIN__"
     continue
diff --git a/gdb/testsuite/gdb.fortran/derived-type.exp b/gdb/testsuite/gdb.fortran/derived-type.exp
index c026742..0623019 100644
--- a/gdb/testsuite/gdb.fortran/derived-type.exp
+++ b/gdb/testsuite/gdb.fortran/derived-type.exp
@@ -18,26 +18,14 @@
 # This file is part of the gdb testsuite.  It contains tests for type-printing
 # and value-printing Fortran derived types.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if { [skip_fortran_tests] } { return -1 }
 
-set testfile "derived-type"
-set srcfile ${testfile}.f90
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .f90
 
-if {[gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
-	 executable {debug f90}] != ""} {
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug f90}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto MAIN__] then {
     perror "couldn't run to breakpoint MAIN__"
     continue
diff --git a/gdb/testsuite/gdb.fortran/exprs.exp b/gdb/testsuite/gdb.fortran/exprs.exp
index 2a1c157..20eb0ea 100644
--- a/gdb/testsuite/gdb.fortran/exprs.exp
+++ b/gdb/testsuite/gdb.fortran/exprs.exp
@@ -17,10 +17,6 @@
 # This file was adapted from old Chill tests by Stan Shebs
 # (shebs at cygnus.com).
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 load_lib "fortran.exp"
 
 if { [skip_fortran_tests] } { continue }
diff --git a/gdb/testsuite/gdb.fortran/library-module.exp b/gdb/testsuite/gdb.fortran/library-module.exp
index 7afe799..9db5ab1 100644
--- a/gdb/testsuite/gdb.fortran/library-module.exp
+++ b/gdb/testsuite/gdb.fortran/library-module.exp
@@ -13,19 +13,17 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile "library-module"
-set srcfile ${testfile}-main.f90
+standard_testfile library-module-main.f90 
 set srclibfile ${testfile}-lib.f90
-set libfile ${testfile}-lib.so
-set binfile ${testfile}
+set libfile [standard_output_file ${testfile}-lib.so]
 
 # Required for -fPIC by gdb_compile_shlib.
-if [get_compiler_info not-used] {
+if [get_compiler_info] {
    warning "Could not get compiler info"
    return -1
 }
 
-if  { [gdb_compile_shlib "${srcdir}/${subdir}/${srclibfile}" $objdir/$subdir/$libfile {debug f90}] != "" } {
+if  { [gdb_compile_shlib "${srcdir}/${subdir}/${srclibfile}" $libfile {debug f90}] != "" } {
     untested "Couldn't compile ${srclibfile}"
     return -1
 }
@@ -34,14 +32,14 @@ if  { [gdb_compile_shlib "${srcdir}/${subdir}/${srclibfile}" $objdir/$subdir/$li
 # just for the linking phase (and not the source compilation phase).  And any
 # warnings on ignored $libfile abort the process.
 
-if  { [gdb_compile $srcdir/$subdir/$srcfile $objdir/$subdir/$binfile executable [list debug f90 shlib=$objdir/$subdir/$libfile]] != "" } {
+if  { [gdb_compile $srcdir/$subdir/$srcfile $binfile executable [list debug f90 shlib=$libfile]] != "" } {
     untested "Couldn't compile ${srcfile}"
     return -1
 }
 
-clean_restart $binfile
+clean_restart $testfile
 
-gdb_load_shlibs $objdir/$subdir/$libfile
+gdb_load_shlibs $libfile
 
 if ![runto MAIN__] then {
     perror "couldn't run to breakpoint MAIN__"
diff --git a/gdb/testsuite/gdb.fortran/logical.exp b/gdb/testsuite/gdb.fortran/logical.exp
index 116f598..f7f1bf1 100644
--- a/gdb/testsuite/gdb.fortran/logical.exp
+++ b/gdb/testsuite/gdb.fortran/logical.exp
@@ -16,11 +16,9 @@
 
 # This file was written by Jan Kratochvil <jan.kratochvil at redhat.com>.
 
-set test "logical"
-set srcfile ${test}.f90
+standard_testfile .f90
 
-if { [prepare_for_testing "${test}.exp" "${test}" "${srcfile}" {debug f90 quiet}] } {
-    untested "Could not compile ${srcfile}."
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug f90 quiet}]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.fortran/module.exp b/gdb/testsuite/gdb.fortran/module.exp
index 5fea4c5..3517ef7 100644
--- a/gdb/testsuite/gdb.fortran/module.exp
+++ b/gdb/testsuite/gdb.fortran/module.exp
@@ -13,8 +13,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile "module"
-set srcfile ${testfile}.f90
+standard_testfile .f90
 
 if { [prepare_for_testing $testfile.exp $testfile $srcfile {debug f90}] } {
     return -1
diff --git a/gdb/testsuite/gdb.fortran/multi-dim.exp b/gdb/testsuite/gdb.fortran/multi-dim.exp
index b300cf2..365abd0 100644
--- a/gdb/testsuite/gdb.fortran/multi-dim.exp
+++ b/gdb/testsuite/gdb.fortran/multi-dim.exp
@@ -18,8 +18,8 @@
 
 if { [skip_fortran_tests] } { return -1 }
 
-set testfile "multi-dim"
-set srcfile ${testfile}.f90
+standard_testfile .f90
+
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug f90}] } {
     return -1
 }
diff --git a/gdb/testsuite/gdb.fortran/subarray.exp b/gdb/testsuite/gdb.fortran/subarray.exp
index 4615126..ec23b32 100644
--- a/gdb/testsuite/gdb.fortran/subarray.exp
+++ b/gdb/testsuite/gdb.fortran/subarray.exp
@@ -18,18 +18,11 @@
 # This file is part of the gdb testsuite.  It contains tests for evaluating
 # Fortran subarray expression.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 if { [skip_fortran_tests] } { return -1 }
 
-set testfile "subarray"
-set srcfile ${testfile}.f
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .f
 
-if {[gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
-	executable {debug f90}] != ""} {
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug f90}]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.fortran/types.exp b/gdb/testsuite/gdb.fortran/types.exp
index 99f9fc8..cbfb122 100644
--- a/gdb/testsuite/gdb.fortran/types.exp
+++ b/gdb/testsuite/gdb.fortran/types.exp
@@ -17,10 +17,6 @@
 # This file was adapted from old Chill tests by Stan Shebs
 # (shebs at cygnus.com).
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 load_lib "fortran.exp"
 
 if { [skip_fortran_tests] } { continue }
diff --git a/gdb/testsuite/gdb.gdb/complaints.exp b/gdb/testsuite/gdb.gdb/complaints.exp
index adaa47d..97a3270 100644
--- a/gdb/testsuite/gdb.gdb/complaints.exp
+++ b/gdb/testsuite/gdb.gdb/complaints.exp
@@ -17,16 +17,17 @@
 # derived from xfullpath.exp (written by Joel Brobecker), derived from
 # selftest.exp (written by Rob Savoye).
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 # are we on a target board
 if { [is_remote target] || ![isnative] } then {
     return
 }
 
+if [target_info exists gdb,noinferiorio] {
+    verbose "Skipping because of no inferiorio capabilities."
+    return
+}
+
 proc setup_test { executable } {
     global gdb_prompt
     global timeout
diff --git a/gdb/testsuite/gdb.gdb/observer.exp b/gdb/testsuite/gdb.gdb/observer.exp
index bf6741c..47a4a11 100644
--- a/gdb/testsuite/gdb.gdb/observer.exp
+++ b/gdb/testsuite/gdb.gdb/observer.exp
@@ -16,10 +16,6 @@
 # This file was written by Joel Brobecker (brobecker at gnat.com), derived
 # from xfullpath.exp.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 # are we on a target board
 if { [is_remote target] || ![isnative] } then {
diff --git a/gdb/testsuite/gdb.gdb/selftest.exp b/gdb/testsuite/gdb.gdb/selftest.exp
index 91c2ee4..7645caf 100644
--- a/gdb/testsuite/gdb.gdb/selftest.exp
+++ b/gdb/testsuite/gdb.gdb/selftest.exp
@@ -16,10 +16,6 @@
 
 # This file was written by Rob Savoye. (rob at cygnus.com)
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 # are we on a target board
 if { [is_remote target] || ![isnative] } then {
@@ -92,6 +88,10 @@ proc do_steps_and_nexts {} {
 		set description "step over ttyarg initialization"
 		set command "step"
 	    }
+	    -re ".*cmdarg_vec = NULL.*$gdb_prompt $" {
+		set description "step over cmdarg_vec initialization"
+		set command "step"
+	    }
 	    -re ".*pre_stat_chain = make_command_stats_cleanup.*$gdb_prompt $" {
 		set description "next over make_command_stats_cleanup and everything it calls"
 		set command "next"
@@ -128,18 +128,6 @@ proc do_steps_and_nexts {} {
 		set description "next over conditional stack alignment alloca"
 		set command "next"
 	    }
-	    -re ".*cmdsize = 1.*$gdb_prompt $" {
-		set description "step over cmdsize initialization"
-		set command "next"
-	    }
-	    -re ".*cmdarg = .* xmalloc.*$gdb_prompt $" {
-		set description "next over cmdarg initialization via xmalloc"
-		set command "next"
-	    }
-	    -re ".*ncmd = 0.*$gdb_prompt $" {
-		set description "next over ncmd initialization"
-		set command "next"
-	    }
 	    -re ".*dirsize = 1.*$gdb_prompt $" {
 		set description "next over dirsize initialization"
 		set command "next"
@@ -163,6 +151,10 @@ proc do_steps_and_nexts {} {
 		set description "next over textdomain PACKAGE"
 		set command "next"
 	    }
+	    -re ".*VEC_cleanup .cmdarg_s.*$gdb_prompt $" {
+		set description "next over cmdarg_s VEC_cleanup"
+		set command "next"
+	    }
 	    -re "\[0-9\]+\[\t \]+\{\r\n$gdb_prompt $" {
 		set description "step over initial brace"
 		set command "step"
@@ -398,19 +390,29 @@ proc test_with_self { executable } {
     }
 
     # start the "xgdb" process
-    gdb_test_multiple "continue" "xgdb is at prompt" {
-	-re "GNU gdb \[0-9\.\]*.*Copyright \\(C\\) \[0-9\]* Free Software Foundation, Inc.*License GPLv3\\+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.*This is free software: you are free to change and redistribute it.*There is NO WARRANTY, to the extent permitted by law.  Type \"show copying\".*and \"show warranty\" for details.*This GDB was configured as .*$gdb_prompt $" {
-	    pass "xgdb is at prompt"
+    if [target_info exists gdb,noinferiorio] {
+	# Maybe testing with a local extended-remote gdbserver.  With
+	# no way to interact with inferior GDB, all we can do is let
+	# it run.
+	send_gdb "continue\n"
+	# Wait a bit while the inferior gdb gets to its prompt.
+	sleep 1
+    } else {
+	set test "xgdb is at prompt"
+	gdb_test_multiple "continue" $test {
+	    -re "GNU gdb \[0-9\.\]*.*Copyright \\(C\\) \[0-9\]* Free Software Foundation, Inc.*License GPLv3\\+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.*This is free software: you are free to change and redistribute it.*There is NO WARRANTY, to the extent permitted by law.  Type \"show copying\".*and \"show warranty\" for details.*This GDB was configured as .*$gdb_prompt $" {
+		pass $test
+	    }
 	}
-    }
-    
-    # set xgdb prompt so we can tell which is which
-    gdb_test_multiple "set prompt (xgdb) " "Set xgdb_prompt" {
-	-re "\[(\]xgdb\[)\].*\[(\]xgdb\[)\] $" {
-	    pass "Set xgdb prompt"
+
+	# set xgdb prompt so we can tell which is which
+	gdb_test_multiple "set prompt (xgdb) " "Set xgdb_prompt" {
+	    -re "\[(\]xgdb\[)\].*\[(\]xgdb\[)\] $" {
+		pass "Set xgdb prompt"
+	    }
 	}
     }
-    
+
     # kill the xgdb process
     set description "send ^C to child process"
     send_gdb "\003"
diff --git a/gdb/testsuite/gdb.gdb/xfullpath.exp b/gdb/testsuite/gdb.gdb/xfullpath.exp
index 1377802..0ebf824 100644
--- a/gdb/testsuite/gdb.gdb/xfullpath.exp
+++ b/gdb/testsuite/gdb.gdb/xfullpath.exp
@@ -16,10 +16,6 @@
 # This file was written by Joel Brobecker. (brobecker at gnat.com), derived
 # from selftest.exp, written by Rob Savoye.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 # are we on a target board
 if { [is_remote target] || ![isnative] } then {
diff --git a/gdb/testsuite/gdb.go/Makefile b/gdb/testsuite/gdb.go/Makefile
new file mode 100644
index 0000000..ef3e91a
--- /dev/null
+++ b/gdb/testsuite/gdb.go/Makefile
@@ -0,0 +1,21 @@
+
+srcdir = .
+
+EXECUTABLES = \
+	chan handcall hello integers methods package \
+	strings types unsafe
+
+all info install-info dvi install uninstall installcheck check:
+	@echo "Nothing to be done for $@..."
+
+clean mostlyclean:
+	-find . -name '*.o' -print | xargs rm -f
+	-find . -name '*.ali' -print | xargs rm -f
+	-rm -f *~ a.out
+	-rm -f *.dwo *.dwp
+	-rm -f core core.coremaker coremaker.core corefile $(EXECUTABLES)
+
+distclean maintainer-clean realclean: clean
+	-rm -f Makefile config.status config.log
+	-rm -f *-init.exp gdb.log gdb.sum
+	-rm -fr *.log summary detail *.plog *.sum *.psum site.*
diff --git a/gdb/testsuite/gdb.go/Makefile.in b/gdb/testsuite/gdb.go/Makefile.in
new file mode 100644
index 0000000..6a1a895
--- /dev/null
+++ b/gdb/testsuite/gdb.go/Makefile.in
@@ -0,0 +1,21 @@
+VPATH = @srcdir@
+srcdir = @srcdir@
+
+EXECUTABLES = \
+	chan handcall hello integers methods package \
+	strings types unsafe
+
+all info install-info dvi install uninstall installcheck check:
+	@echo "Nothing to be done for $@..."
+
+clean mostlyclean:
+	-find . -name '*.o' -print | xargs rm -f
+	-find . -name '*.ali' -print | xargs rm -f
+	-rm -f *~ a.out
+	-rm -f *.dwo *.dwp
+	-rm -f core core.coremaker coremaker.core corefile $(EXECUTABLES)
+
+distclean maintainer-clean realclean: clean
+	-rm -f Makefile config.status config.log
+	-rm -f *-init.exp gdb.log gdb.sum
+	-rm -fr *.log summary detail *.plog *.sum *.psum site.*
diff --git a/gdb/testsuite/gdb.go/basic-types.exp b/gdb/testsuite/gdb.go/basic-types.exp
new file mode 100644
index 0000000..d3a542d
--- /dev/null
+++ b/gdb/testsuite/gdb.go/basic-types.exp
@@ -0,0 +1,118 @@
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Test basic builtin types.
+# NOTE: The tests here intentionally do not require a go compiler.
+
+load_lib "go.exp"
+
+if { [skip_go_tests] } { continue }
+
+proc test_integer_literal_types_accepted {} {
+    # Test various decimal values.
+
+    gdb_test "pt 123" "type = int" 
+
+    gdb_test "pt void(42)" "type = void"
+    gdb_test "pt byte(42)" "type = uint8"
+    gdb_test "pt int(42)" "type = int"
+    gdb_test "pt uint(42)" "type = uint"
+    gdb_test "pt uintptr(42)" "type = uintptr"
+
+    gdb_test "pt int8(42)" "type = int8"
+    gdb_test "pt int16(42)" "type = int16"
+    gdb_test "pt int32(42)" "type = int32"
+    gdb_test "pt int64(42)" "type = int64"
+
+    gdb_test "pt uint8(42)" "type = uint8"
+    gdb_test "pt uint16(42)" "type = uint16"
+    gdb_test "pt uint32(42)" "type = uint32"
+    gdb_test "pt uint64(42)" "type = uint64"
+}
+
+proc test_logical_literal_types_accepted {} {
+    # Test the only possible values for a logical, TRUE and FALSE.
+
+    gdb_test "pt true" "type = bool"
+    gdb_test "pt false" "type = bool"
+
+    gdb_test "pt bool(0)" "type = bool"
+    gdb_test "pt bool(1)" "type = bool"
+}
+
+proc test_character_literal_types_accepted {} {
+    # Test various character values.
+
+    gdb_test "pt 'a'" "type = char"
+
+    # FIXME: Need more.
+}
+
+proc test_string_literal_types_accepted {} {
+    # Test various string values.
+
+    gdb_test "pt \"a simple string\"" "type = string"
+    gdb_test "pt `a simple raw string`" "type = string"
+
+    # FIXME: Need more.
+}
+
+proc test_float_literal_types_accepted {} {
+    # Test various floating point formats.
+
+    gdb_test "pt .44" "type = float64"
+    gdb_test "pt 44.0" "type = float64"
+    gdb_test "pt 10e20" "type = float64"
+    gdb_test "pt 10E20" "type = float64"
+
+    gdb_test "pt float32(.42)" "type = float32"
+
+    gdb_test "pt float64(.42)" "type = float64"
+}
+
+proc test_complex_literal_types_accepted {} {
+    # Test various complex formats.
+
+    gdb_test "pt complex64(.42)" "type = complex64"
+    setup_xfail "*-*-*"
+    gdb_test "pt complex64(.42i1.0)" "type = complex64"
+    setup_xfail "*-*-*"
+    gdb_test "pt complex64(i1.0)" "type = complex64"
+
+    gdb_test "pt complex128(.42)" "type = complex128"
+    setup_xfail "*-*-*"
+    gdb_test "pt complex128(.42i1.0)" "type = complex128"
+    setup_xfail "*-*-*"
+    gdb_test "pt complex128(i1.0)" "type = complex128"
+}
+
+# Start with a fresh gdb.
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+
+if [set_lang_go] {
+    test_integer_literal_types_accepted
+    test_logical_literal_types_accepted
+    test_character_literal_types_accepted
+    test_string_literal_types_accepted
+    test_float_literal_types_accepted
+    test_complex_literal_types_accepted
+} else {
+    warning "Go type tests suppressed."
+}
diff --git a/gdb/testsuite/gdb.go/chan.exp b/gdb/testsuite/gdb.go/chan.exp
new file mode 100644
index 0000000..1becbc1
--- /dev/null
+++ b/gdb/testsuite/gdb.go/chan.exp
@@ -0,0 +1,51 @@
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Basic channel tests.
+# This is very much a work-in-progress.
+
+load_lib "go.exp"
+
+if { [skip_go_tests] } { continue }
+
+standard_testfile .go
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug go}] } {
+    return -1
+}
+
+set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
+set bp_location2 [gdb_get_line_number "set breakpoint 2 here"]
+
+if { [go_runto_main] < 0 } {
+    untested $testfile
+    return -1
+}
+
+if { [gdb_breakpoint ${srcfile}:${bp_location1}] } {
+    pass "setting breakpoint 1"
+}
+
+gdb_test "cont" "Breakpoint .*:${bp_location1}.*" "Going to first breakpoint"
+
+gdb_test_no_output "disable"
+
+if { [gdb_breakpoint ${srcfile}:${bp_location2}] } {
+    pass "setting breakpoint 2"
+}
+
+gdb_test "cont" "Breakpoint .*:${bp_location2}.*" "Going to second breakpoint"
diff --git a/gdb/testsuite/gdb.go/chan.go b/gdb/testsuite/gdb.go/chan.go
new file mode 100644
index 0000000..f237288
--- /dev/null
+++ b/gdb/testsuite/gdb.go/chan.go
@@ -0,0 +1,20 @@
+package main
+
+import "fmt"
+
+func generate() chan int {
+    ch := make(chan int)
+    go func() {
+        for i := 0; ; i++ {
+            ch <- i // set breakpoint 1 here
+        }
+    }()
+    return ch
+}
+
+func main() {
+    integers := generate()
+    for i := 0; i < 100; i++ { // Print the first hundred integers.
+        fmt.Println(<-integers) // set breakpoint 2 here
+    }
+}
diff --git a/gdb/testsuite/gdb.go/handcall.exp b/gdb/testsuite/gdb.go/handcall.exp
new file mode 100644
index 0000000..7dd6d6e
--- /dev/null
+++ b/gdb/testsuite/gdb.go/handcall.exp
@@ -0,0 +1,44 @@
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Test hand-calling go functions.
+
+load_lib "go.exp"
+
+if { [skip_go_tests] } { continue }
+
+standard_testfile .go
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug go}] } {
+    return -1
+}
+
+set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
+
+if { [go_runto_main] < 0 } {
+    untested $testfile
+    return -1
+}
+
+if { [gdb_breakpoint ${srcfile}:${bp_location1}] } {
+    pass "setting breakpoint 1"
+}
+
+gdb_test "cont" "Breakpoint .*:${bp_location1}.*" "Going to first breakpoint"
+
+gdb_test "print add (1, 2)" " = 3"
+gdb_test "print main.add (1, 2)" " = 3"
diff --git a/gdb/testsuite/gdb.go/handcall.go b/gdb/testsuite/gdb.go/handcall.go
new file mode 100644
index 0000000..f32b5e9
--- /dev/null
+++ b/gdb/testsuite/gdb.go/handcall.go
@@ -0,0 +1,15 @@
+package main
+
+func add (a,b int) (int) {
+  return a + b
+}
+
+func sub (a,b int) (int) {
+  return a - b
+}
+
+var v_int int
+
+func main () {
+  v_int = 42 // set breakpoint 1 here
+}
diff --git a/gdb/testsuite/gdb.go/hello.exp b/gdb/testsuite/gdb.go/hello.exp
new file mode 100644
index 0000000..94f9b67
--- /dev/null
+++ b/gdb/testsuite/gdb.go/hello.exp
@@ -0,0 +1,59 @@
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Basic tests.
+
+load_lib "go.exp"
+
+if { [skip_go_tests] } { continue }
+
+standard_testfile .go
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug go}] } {
+    return -1
+}
+
+set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
+set bp_location2 [gdb_get_line_number "set breakpoint 2 here"]
+
+if { [go_runto_main] < 0 } {
+    untested $testfile
+    return -1
+}
+
+if { [gdb_breakpoint ${srcfile}:${bp_location1}] } {
+    pass "setting breakpoint 1"
+}
+
+gdb_test "cont" "Breakpoint .*:${bp_location1}.*" "Going to first breakpoint"
+
+# This used to print "", i.e., the local "st" initialized as "".
+setup_xfail "*-*-*"
+
+gdb_test "print st" \
+    ".* = $hex \"\"" \
+    "Starting string check"
+
+if { [gdb_breakpoint ${srcfile}:${bp_location2}] } {
+    pass "setting breakpoint 2"
+}
+
+gdb_test "cont" "Breakpoint .*:${bp_location2}.*" "Going to second breakpoint"
+
+gdb_test "print st" \
+    ".* = $hex \"Hello, world!\"" \
+    "String after assignment check"
diff --git a/gdb/testsuite/gdb.go/hello.go b/gdb/testsuite/gdb.go/hello.go
new file mode 100644
index 0000000..6e56112
--- /dev/null
+++ b/gdb/testsuite/gdb.go/hello.go
@@ -0,0 +1,12 @@
+package main
+
+import "fmt"
+
+var myst = "Shall we?"
+
+func main () {
+  fmt.Println ("Before assignment") // set breakpoint 1 here
+  st := "Hello, world!" // this intentionally shadows the global "st"
+  fmt.Println (st) // set breakpoint 2 here
+  fmt.Println (myst) // set breakpoint 2 here
+}
diff --git a/gdb/testsuite/gdb.go/integers.exp b/gdb/testsuite/gdb.go/integers.exp
new file mode 100644
index 0000000..68626c7
--- /dev/null
+++ b/gdb/testsuite/gdb.go/integers.exp
@@ -0,0 +1,115 @@
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Test integer expressions.
+
+load_lib "go.exp"
+
+if { [skip_go_tests] } { continue }
+
+standard_testfile .go
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug go}] } {
+    return -1
+}
+
+set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
+set bp_location2 [gdb_get_line_number "set breakpoint 2 here"]
+
+if { [go_runto_main] < 0 } {
+    untested $testfile
+    return -1
+}
+
+if { [gdb_breakpoint ${srcfile}:${bp_location1}] } {
+    pass "setting breakpoint 1"
+}
+
+gdb_test "cont" "Breakpoint .*:${bp_location1}.*" "Going to first breakpoint"
+
+gdb_test "print i" ".* = 0" "Print i before assigned to 1"
+
+gdb_test "next" "i = 1" "Next to 'i = 1' line"
+gdb_test "next" "j = 2" "Next to 'j = 2' line"
+# At that point, 
+# i should be equal to 1
+gdb_test "print i" " = 1" 
+# but j should still be equal to zero
+gdb_test "print j" " = 0" "Test j value before assignment"
+
+gdb_test "next" "k = 3" "Next to 'k = 3' line"
+gdb_test "next" "l = k" "Next to 'l = k' line"
+
+#j should be equal to 2
+gdb_test "print j" " = 2"
+# k should be equal to 3
+gdb_test "print k" " = 3"
+# But l should still be zero
+gdb_test "print l" " = 0"
+
+# Test addition
+gdb_test "print i + j" " = 3"
+gdb_test "print i + k" " = 4"
+gdb_test "print j + k" " = 5"
+gdb_test "print i + j + k" " = 6"
+
+# Test substraction
+gdb_test "print j - i" " = 1"
+gdb_test "print i - j" "= -1"
+gdb_test "print k -i -j" " = 0"
+gdb_test "print k -(i + j)" " = 0"
+
+# Test unany minus
+gdb_test "print -i" " = -1"
+gdb_test "print (-i)" " = -1"
+gdb_test "print -(i)" " = -1"
+gdb_test "print -(i+j)" " = -3"
+
+# Test boolean operators =, <>, <, <=, > and >=
+gdb_test "print i + 1 == j" " = true"
+gdb_test "print i + 1 != j" " = false"
+gdb_test "print i + 1 < j" " = false"
+gdb_test "print i + 1 <= j" " = true"
+gdb_test "print i + 1 > j" " = false"
+gdb_test "print i + 1 >= j" " = true"
+
+# Test multiplication
+gdb_test "print 2 * i" " = 2"
+gdb_test "print j * k" " = 6"
+gdb_test "print 3000*i" " = 3000"
+
+#Test div and mod operators
+gdb_test "print 35 / 2" " = 17"
+gdb_test "print 35 % 2" " = 1"
+
+# Test several operators together
+gdb_test "print i+10*j+100*k" " = 321"
+gdb_test " print (i + 5) * (j + 7)" " = 54"
+
+gdb_test "set var i = 2" " = 2"
+gdb_test "print i" " = 2" "Testing new i value"
+
+if { [gdb_breakpoint ${srcfile}:${bp_location2}] } {
+    pass "setting breakpoint 2"
+}
+
+gdb_test "cont" \
+	 "Breakpoint .*:${bp_location2}.*" \
+	 "Going to second breakpoint"
+gdb_test "print i" \
+	 ".* = 5.*" \
+	 "Value of i after assignment"
diff --git a/gdb/testsuite/gdb.go/integers.go b/gdb/testsuite/gdb.go/integers.go
new file mode 100644
index 0000000..4430099
--- /dev/null
+++ b/gdb/testsuite/gdb.go/integers.go
@@ -0,0 +1,22 @@
+package main
+
+var i = 0
+var j = 0
+var k = 0
+var l = 0
+
+func main () {
+  i = 0
+  j = 0
+  k = 0
+  l = 0 // set breakpoint 1 here
+  i = 1
+  j = 2
+  k = 3
+  l = k
+
+  i = j + k
+
+  j = 0 // set breakpoint 2 here
+  k = 0
+}
diff --git a/gdb/testsuite/gdb.go/methods.exp b/gdb/testsuite/gdb.go/methods.exp
new file mode 100644
index 0000000..31a441e
--- /dev/null
+++ b/gdb/testsuite/gdb.go/methods.exp
@@ -0,0 +1,49 @@
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Test various aspects of methods.
+
+load_lib "go.exp"
+
+if { [skip_go_tests] } { continue }
+
+standard_testfile .go
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug go}] } {
+    return -1
+}
+
+set bp_location1 {main.T.Foo}
+set bp_location2 {(*main.T).Bar}
+set bp_location2_regexp {\(*main.T\).Bar}
+
+if { [go_runto_main] < 0 } {
+    untested $testfile
+    return -1
+}
+
+if { [gdb_breakpoint ${bp_location1}] } {
+    pass "setting breakpoint 1"
+}
+setup_xfail "*-*-*" ;# mangling issues IIRC
+gdb_test "cont" "Breakpoint .*:${bp_location1}.*" "Going to first breakpoint"
+
+if { [gdb_breakpoint ${bp_location2}] } {
+    pass "setting breakpoint 2"
+}
+setup_xfail "*-*-*" ;# mangling issues IIRC
+gdb_test "cont" "Breakpoint .*:${bp_location2_regexp}.*" "Going to second breakpoint"
diff --git a/gdb/testsuite/gdb.go/methods.go b/gdb/testsuite/gdb.go/methods.go
new file mode 100644
index 0000000..563d0e4
--- /dev/null
+++ b/gdb/testsuite/gdb.go/methods.go
@@ -0,0 +1,21 @@
+package main
+
+import "fmt"
+
+type T struct { i int }
+
+func (t T) Foo () {
+  fmt.Println (t.i)
+}
+
+func (t *T) Bar () {
+  fmt.Println (t.i)
+}
+
+func main () {
+  fmt.Println ("Shall we?")
+  var t T
+  t.Foo ()
+  var pt = new (T)
+  pt.Bar ()
+}
diff --git a/gdb/testsuite/gdb.go/package.exp b/gdb/testsuite/gdb.go/package.exp
new file mode 100644
index 0000000..1fd65fc
--- /dev/null
+++ b/gdb/testsuite/gdb.go/package.exp
@@ -0,0 +1,49 @@
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Test various aspects of packages.
+
+load_lib "go.exp"
+
+if { [skip_go_tests] } { continue }
+
+standard_testfile package1.go package2.go
+
+if  { [gdb_compile "${srcdir}/${subdir}/${testfile}2.go" "${binfile}2.o" object {debug go}] != "" } {
+    untested $testfile
+    return -1
+}
+ 
+if  { [gdb_compile "${srcdir}/${subdir}/${testfile}1.go ${binfile}2.o" "${binfile}" executable "debug go libdir=[standard_output_file {}]"] != "" } {
+    untested $testfile
+    return -1
+}
+
+clean_restart $testfile
+
+if { [go_runto_main] < 0 } {
+    untested methods
+    return -1
+}
+
+set bp_location1 {package2.Foo}
+set bp_location1_regexp {package2[.]Foo.*package2[.]go:}
+
+if { [gdb_breakpoint ${bp_location1}] } {
+    pass "setting breakpoint 1"
+}
+gdb_test "cont" "Breakpoint .*${bp_location1_regexp}.*" "Going to first breakpoint"
diff --git a/gdb/testsuite/gdb.go/package1.go b/gdb/testsuite/gdb.go/package1.go
new file mode 100644
index 0000000..ec538ba
--- /dev/null
+++ b/gdb/testsuite/gdb.go/package1.go
@@ -0,0 +1,11 @@
+package main
+
+import (
+  "fmt"
+  "package2"
+)
+
+func main () {
+  fmt.Println ("Shall we?")
+  package2.Foo ()
+}
diff --git a/gdb/testsuite/gdb.go/package2.go b/gdb/testsuite/gdb.go/package2.go
new file mode 100644
index 0000000..de4c49a
--- /dev/null
+++ b/gdb/testsuite/gdb.go/package2.go
@@ -0,0 +1,7 @@
+package package2
+
+import "fmt"
+
+func Foo () {
+  fmt.Println ("Hi, I'm package2.Foo.")
+}
diff --git a/gdb/testsuite/gdb.go/print.exp b/gdb/testsuite/gdb.go/print.exp
new file mode 100644
index 0000000..84e6166
--- /dev/null
+++ b/gdb/testsuite/gdb.go/print.exp
@@ -0,0 +1,70 @@
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Test printing of various values.
+# NOTE: The tests here intentionally do not require a go compiler.
+
+load_lib "go.exp"
+
+if { [skip_go_tests] } { continue }
+
+proc test_float_accepted {} {
+    global gdb_prompt
+
+    # Test parsing of fp value with legit text following.
+    gdb_test "p 1234.5+1" " = 1235.5" "check fp + text"
+
+    # Test all the suffixes (including no suffix).
+    gdb_test "p 1." " = 1"
+    gdb_test "p 1.5" " = 1.5"
+    gdb_test "p 1.f" " = 1"
+    gdb_test "p 1.5f" " = 1.5"
+    gdb_test "p 1.l" " = 1"
+    gdb_test "p 1.5l" " = 1.5"
+
+    # Test hexadecimal floating point.
+    set test "p 0x1.1"
+    gdb_test_multiple $test $test {
+	-re " = 1\\.0625\r\n$gdb_prompt $" {
+	    pass $test
+	}
+	-re "Invalid number \"0x1\\.1\"\\.\r\n$gdb_prompt $" {
+	    # Older glibc does not support hex float, newer does.
+	    xfail $test
+	}
+    }
+}
+
+proc test_float_rejected {} {
+    # Test bad suffixes.
+    test_print_reject "p 1.1x"
+    test_print_reject "p 1.1ff"
+    test_print_reject "p 1.1ll"
+}
+
+# Start with a fresh gdb.
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+
+if [set_lang_go] {
+    test_float_accepted
+    test_float_rejected
+} else {
+    warning "Go print tests suppressed"
+}
diff --git a/gdb/testsuite/gdb.go/strings.exp b/gdb/testsuite/gdb.go/strings.exp
new file mode 100644
index 0000000..a4885a9
--- /dev/null
+++ b/gdb/testsuite/gdb.go/strings.exp
@@ -0,0 +1,41 @@
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib "go.exp"
+
+if { [skip_go_tests] } { continue }
+
+standard_testfile .go
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug go}] } {
+    return -1
+}
+
+set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
+
+if { [go_runto_main] < 0 } {
+    untested $testfile
+    return -1
+}
+
+if { [gdb_breakpoint ${srcfile}:${bp_location1}] } {
+    pass "setting breakpoint 1"
+}
+
+gdb_test "cont" "Breakpoint .*:${bp_location1}.*" "Going to first breakpoint"
+
+gdb_test {print "abc" + "def"} {.* = "abcdef"}
diff --git a/gdb/testsuite/gdb.go/strings.go b/gdb/testsuite/gdb.go/strings.go
new file mode 100644
index 0000000..fc62e39
--- /dev/null
+++ b/gdb/testsuite/gdb.go/strings.go
@@ -0,0 +1,10 @@
+package main
+
+import "fmt"
+
+var v_string string = "foo"
+
+func main () {
+  fmt.Println ("hello") // set breakpoint 1 here
+  fmt.Printf ("%s\n", v_string)
+}
diff --git a/gdb/testsuite/gdb.go/types.exp b/gdb/testsuite/gdb.go/types.exp
new file mode 100644
index 0000000..da9d387
--- /dev/null
+++ b/gdb/testsuite/gdb.go/types.exp
@@ -0,0 +1,50 @@
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Various experiments with types.
+
+load_lib "go.exp"
+
+if { [skip_go_tests] } { continue }
+
+standard_testfile .go
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug go}] } {
+    return -1
+}
+
+if { [go_runto_main] < 0 } {
+    untested $testfile
+    return -1
+}
+
+# It's not clear yet what GCC will emit.
+# Pick something and xfail it until GCC solidifies.
+# And we still need to finish go-typeprint.c.
+
+setup_xfail "*-*-*"
+gdb_test "ptype T" "type T *T"
+
+setup_xfail "*-*-*"
+gdb_test "ptype T1" "type T1 *T2"
+setup_xfail "*-*-*"
+gdb_test "ptype T2" "type T2 *T1"
+
+setup_xfail "*-*-*"
+gdb_test "ptype S1" "type S1 struct {.*p_s2 *S2.*}"
+setup_xfail "*-*-*"
+gdb_test "ptype S2" "type S2 struct {.*p_s1 *S1.*}"
diff --git a/gdb/testsuite/gdb.go/types.go b/gdb/testsuite/gdb.go/types.go
new file mode 100644
index 0000000..be9179f
--- /dev/null
+++ b/gdb/testsuite/gdb.go/types.go
@@ -0,0 +1,24 @@
+package main
+
+import "fmt"
+
+// Self-referential type.
+type T *T
+
+// Mutually recursive types.
+type T1 *T2
+type T2 *T1
+
+// Mutually recursive struct types.
+type S1 struct { p_s2 *S2 }
+type S2 struct { p_s1 *S1 }
+
+func main () {
+  fmt.Println ("Shall we?")
+  var t T
+  fmt.Println (t)
+  var s1 S1
+  var s2 S2
+  fmt.Println (s1)
+  fmt.Println (s2)
+}
diff --git a/gdb/testsuite/gdb.go/unsafe.exp b/gdb/testsuite/gdb.go/unsafe.exp
new file mode 100644
index 0000000..eb536b2
--- /dev/null
+++ b/gdb/testsuite/gdb.go/unsafe.exp
@@ -0,0 +1,43 @@
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Test package "unsafe".
+
+load_lib "go.exp"
+
+if { [skip_go_tests] } { continue }
+
+standard_testfile .go
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug go}] } {
+    return -1
+}
+
+set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
+
+if { [go_runto_main] < 0 } {
+    untested $testfile
+    return -1
+}
+
+if { [gdb_breakpoint ${srcfile}:${bp_location1}] } {
+    pass "setting breakpoint 1"
+}
+
+gdb_test "cont" "Breakpoint .*:${bp_location1}.*" "Going to first breakpoint"
+
+gdb_test "print unsafe.Sizeof(42)" ".* = 4"
diff --git a/gdb/testsuite/gdb.go/unsafe.go b/gdb/testsuite/gdb.go/unsafe.go
new file mode 100644
index 0000000..95318bd
--- /dev/null
+++ b/gdb/testsuite/gdb.go/unsafe.go
@@ -0,0 +1,11 @@
+package main
+
+import ("fmt"
+        "unsafe")
+
+var mystring = "Shall we?"
+
+func main () {
+  fmt.Printf ("%d\n", unsafe.Sizeof (42)) // set breakpoint 1 here
+  fmt.Printf ("%d\n", unsafe.Sizeof (mystring))
+}
diff --git a/gdb/testsuite/gdb.hp/Makefile.in b/gdb/testsuite/gdb.hp/Makefile.in
index a2b1b8f..442dc44 100644
--- a/gdb/testsuite/gdb.hp/Makefile.in
+++ b/gdb/testsuite/gdb.hp/Makefile.in
@@ -16,6 +16,7 @@ check:
 
 clean mostlyclean:
 	-rm -f *~ core *.o
+	-rm -f *.dwo *.dwp
 	if [ x"${SUBDIRS}" != x ] ; then \
 	    for dir in ${SUBDIRS}; \
 	    do \
diff --git a/gdb/testsuite/gdb.hp/gdb.aCC/Makefile.in b/gdb/testsuite/gdb.hp/gdb.aCC/Makefile.in
index dbfca95..ff90963 100644
--- a/gdb/testsuite/gdb.hp/gdb.aCC/Makefile.in
+++ b/gdb/testsuite/gdb.hp/gdb.aCC/Makefile.in
@@ -16,6 +16,7 @@ check:
 
 clean mostlyclean:
 	-rm -f *~ *.o *.ci
+	-rm -f *.dwo *.dwp
 	-rm -f core $(EXECUTABLES)
 
 distclean maintainer-clean realclean: clean
diff --git a/gdb/testsuite/gdb.hp/gdb.aCC/optimize.exp b/gdb/testsuite/gdb.hp/gdb.aCC/optimize.exp
index 592b3b5..a5061d5 100644
--- a/gdb/testsuite/gdb.hp/gdb.aCC/optimize.exp
+++ b/gdb/testsuite/gdb.hp/gdb.aCC/optimize.exp
@@ -24,17 +24,13 @@ global timeout
 #
 #log_user 1
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if { [skip_hp_tests] } then { continue }
 
 set testfile optimize
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.hp/gdb.aCC/run.c b/gdb/testsuite/gdb.hp/gdb.aCC/run.c
index 6bff81a..b41abab 100644
--- a/gdb/testsuite/gdb.hp/gdb.aCC/run.c
+++ b/gdb/testsuite/gdb.hp/gdb.aCC/run.c
@@ -42,10 +42,6 @@ int main (int argc, char *argv[], char **envp)
 char *argv[], **envp;*/
 {
     int factorial (int);
-#ifdef usestubs
-    set_debug_traps();
-    breakpoint();
-#endif
 #ifdef FAKEARGV
     printf ("%d\n", factorial (1));
 #else    
diff --git a/gdb/testsuite/gdb.hp/gdb.aCC/watch-cmd.exp b/gdb/testsuite/gdb.hp/gdb.aCC/watch-cmd.exp
index 7ae2de6..6ef434f 100644
--- a/gdb/testsuite/gdb.hp/gdb.aCC/watch-cmd.exp
+++ b/gdb/testsuite/gdb.hp/gdb.aCC/watch-cmd.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # test special commands
 #
@@ -32,7 +28,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
 
 }
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 if { $gcc_compiled } then { continue }
diff --git a/gdb/testsuite/gdb.hp/gdb.base-hp/Makefile.in b/gdb/testsuite/gdb.hp/gdb.base-hp/Makefile.in
index 2254ab4..633266a 100644
--- a/gdb/testsuite/gdb.hp/gdb.base-hp/Makefile.in
+++ b/gdb/testsuite/gdb.hp/gdb.base-hp/Makefile.in
@@ -20,6 +20,7 @@ check:
 
 clean mostlyclean:
 	-rm -f *~ *.o *.ci
+	-rm -f *.dwo *.dwp
 	-rm -f core $(EXECUTABLES)
 	-rm -f $(MISCELLANEOUS)
 
diff --git a/gdb/testsuite/gdb.hp/gdb.base-hp/callfwmall.c b/gdb/testsuite/gdb.hp/gdb.base-hp/callfwmall.c
index 67edb8b..f22a248 100644
--- a/gdb/testsuite/gdb.hp/gdb.base-hp/callfwmall.c
+++ b/gdb/testsuite/gdb.hp/gdb.base-hp/callfwmall.c
@@ -180,10 +180,6 @@ int main()
 main ()
 #endif
 {
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
   t_structs_c(struct_val1);
   return 0;
   
diff --git a/gdb/testsuite/gdb.hp/gdb.base-hp/callfwmall.exp b/gdb/testsuite/gdb.hp/gdb.base-hp/callfwmall.exp
index c0f0877..52b0a42 100644
--- a/gdb/testsuite/gdb.hp/gdb.base-hp/callfwmall.exp
+++ b/gdb/testsuite/gdb.hp/gdb.base-hp/callfwmall.exp
@@ -81,10 +81,6 @@
 # inferior function calls to evaluate array literals.  But many people
 # jump to other, incorrect conclusions about this.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 if { [skip_hp_tests] } then { continue }
 
@@ -100,7 +96,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.hp/gdb.base-hp/dollar.exp b/gdb/testsuite/gdb.hp/gdb.base-hp/dollar.exp
index e212905..253e7dc 100644
--- a/gdb/testsuite/gdb.hp/gdb.base-hp/dollar.exp
+++ b/gdb/testsuite/gdb.hp/gdb.base-hp/dollar.exp
@@ -24,10 +24,6 @@
 # This file was written by Satish Pai <pai at apollo.hp.com>
 # 1997-09-24
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
 #
 # test running programs
 #
diff --git a/gdb/testsuite/gdb.hp/gdb.base-hp/hwwatchbus.exp b/gdb/testsuite/gdb.hp/gdb.base-hp/hwwatchbus.exp
index 4dc8516..af8a679 100644
--- a/gdb/testsuite/gdb.hp/gdb.base-hp/hwwatchbus.exp
+++ b/gdb/testsuite/gdb.hp/gdb.base-hp/hwwatchbus.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
 
 if { [skip_hp_tests] } then { continue }
 
@@ -35,7 +31,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
      return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.hp/gdb.base-hp/pxdb.exp b/gdb/testsuite/gdb.hp/gdb.base-hp/pxdb.exp
index aad9aec..b9b997d 100644
--- a/gdb/testsuite/gdb.hp/gdb.base-hp/pxdb.exp
+++ b/gdb/testsuite/gdb.hp/gdb.base-hp/pxdb.exp
@@ -20,10 +20,6 @@
 # pxdb.exp   Test that gdb calls pxdb on an application
 #            built without it.
 #
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 if { [skip_hp_tests] } then { continue }
 
@@ -32,7 +28,7 @@ set srcfile ${testfile}.c
 set objfile ${objdir}/${subdir}/${testfile}.o
 set binfile ${objdir}/${subdir}/${testfile}
 
-if [get_compiler_info ${binfile} "c++"] {
+if [get_compiler_info "c++"] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.hp/gdb.base-hp/reg-pa64.exp b/gdb/testsuite/gdb.hp/gdb.base-hp/reg-pa64.exp
index 39aa44a..3ff4f4b 100644
--- a/gdb/testsuite/gdb.hp/gdb.base-hp/reg-pa64.exp
+++ b/gdb/testsuite/gdb.hp/gdb.base-hp/reg-pa64.exp
@@ -17,10 +17,6 @@
 # use this to debug:
 #log_user 1
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 if { [skip_hp_tests] } { continue }
 
 if ![istarget "hppa*-*-*"] {
diff --git a/gdb/testsuite/gdb.hp/gdb.base-hp/reg.exp b/gdb/testsuite/gdb.hp/gdb.base-hp/reg.exp
index edb24f6..15c947f 100644
--- a/gdb/testsuite/gdb.hp/gdb.base-hp/reg.exp
+++ b/gdb/testsuite/gdb.hp/gdb.base-hp/reg.exp
@@ -20,10 +20,6 @@
 # use this to debug:
 #log_user 1
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
 if { [skip_hp_tests] } then { continue }
 
 set testfile "reg"
diff --git a/gdb/testsuite/gdb.hp/gdb.base-hp/sized-enum.exp b/gdb/testsuite/gdb.hp/gdb.base-hp/sized-enum.exp
index 8893d46..2ddcbc6 100644
--- a/gdb/testsuite/gdb.hp/gdb.base-hp/sized-enum.exp
+++ b/gdb/testsuite/gdb.hp/gdb.base-hp/sized-enum.exp
@@ -22,10 +22,6 @@
 # This file was written by Satish Pai <pai at apollo.hp.com>
 # 1997-09-24
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
 #
 # test running programs
 #
@@ -36,7 +32,7 @@ set testfile "sized-enum"
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.hp/gdb.base-hp/so-thresh.exp b/gdb/testsuite/gdb.hp/gdb.base-hp/so-thresh.exp
index b7e4d06..2e98203 100644
--- a/gdb/testsuite/gdb.hp/gdb.base-hp/so-thresh.exp
+++ b/gdb/testsuite/gdb.hp/gdb.base-hp/so-thresh.exp
@@ -13,17 +13,13 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-if $tracelevel then {
-	strace $tracelevel
-	}
-
 
 if { [skip_hp_tests] } then { continue }
 
 set testfile "so-thresh"
 set binfile ${objdir}/${subdir}/${testfile}
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.hp/gdb.compat/Makefile.in b/gdb/testsuite/gdb.hp/gdb.compat/Makefile.in
index b74fa65..10fc8fc 100644
--- a/gdb/testsuite/gdb.hp/gdb.compat/Makefile.in
+++ b/gdb/testsuite/gdb.hp/gdb.compat/Makefile.in
@@ -16,6 +16,7 @@ check:
 
 clean mostlyclean:
 	-rm -f *~ *.o *.ci
+	-rm -f *.dwo *.dwp
 	-rm -f core $(EXECUTABLES)
 
 distclean maintainer-clean realclean: clean
diff --git a/gdb/testsuite/gdb.hp/gdb.compat/xdb0.c b/gdb/testsuite/gdb.hp/gdb.compat/xdb0.c
index fa5c76f..4cd29c3 100644
--- a/gdb/testsuite/gdb.hp/gdb.compat/xdb0.c
+++ b/gdb/testsuite/gdb.hp/gdb.compat/xdb0.c
@@ -3,10 +3,7 @@
 main ()
 {
     int x;
-#ifdef usestubs
-    set_debug_traps();
-    breakpoint();
-#endif
+
     x = 0;
     foo (x++);
     foo (x++);
diff --git a/gdb/testsuite/gdb.hp/gdb.compat/xdb1.exp b/gdb/testsuite/gdb.hp/gdb.compat/xdb1.exp
index 56b4527..84fb347 100644
--- a/gdb/testsuite/gdb.hp/gdb.compat/xdb1.exp
+++ b/gdb/testsuite/gdb.hp/gdb.compat/xdb1.exp
@@ -16,14 +16,8 @@
 
 # This file was written by Fred Fish. (fnf at cygnus.com)
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 if { [skip_hp_tests] } then { continue }
 
-global usestubs
-
 #
 # test running programs
 #
@@ -36,7 +30,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
      return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 if { $gcc_compiled } then { continue }
diff --git a/gdb/testsuite/gdb.hp/gdb.compat/xdb2.exp b/gdb/testsuite/gdb.hp/gdb.compat/xdb2.exp
index a0789e3..0ea2c07 100644
--- a/gdb/testsuite/gdb.hp/gdb.compat/xdb2.exp
+++ b/gdb/testsuite/gdb.hp/gdb.compat/xdb2.exp
@@ -16,10 +16,6 @@
 
 # This file was written by Fred Fish. (fnf at cygnus.com)
 
-if $tracelevel then {
-        strace $tracelevel
-        }
-
 if { [skip_hp_tests] } then { continue }
 
 global message
@@ -46,7 +42,7 @@ if  { [gdb_compile "${binfile}0.o ${binfile}1.o" ${binfile} executable {debug}]
     return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.hp/gdb.compat/xdb3.exp b/gdb/testsuite/gdb.hp/gdb.compat/xdb3.exp
index c331c37..7662321 100644
--- a/gdb/testsuite/gdb.hp/gdb.compat/xdb3.exp
+++ b/gdb/testsuite/gdb.hp/gdb.compat/xdb3.exp
@@ -14,10 +14,6 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 
-if $tracelevel then {
-        strace $tracelevel
-}
-
 if { [skip_hp_tests] } then { continue }
 
 set testfile1 "average"
@@ -42,7 +38,7 @@ if  { [gdb_compile "${binfile1}.o ${binfile2}.o" ${binfile} executable {debug}]
      return -1
 }
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 if { $gcc_compiled } then { continue }
diff --git a/gdb/testsuite/gdb.hp/gdb.defects/Makefile.in b/gdb/testsuite/gdb.hp/gdb.defects/Makefile.in
index b1a9284..feb456e 100644
--- a/gdb/testsuite/gdb.hp/gdb.defects/Makefile.in
+++ b/gdb/testsuite/gdb.hp/gdb.defects/Makefile.in
@@ -16,6 +16,7 @@ check:
 
 clean mostlyclean:
 	-rm -f *~ *.o *.ci
+	-rm -f *.dwo *.dwp
 	-rm -f core $(EXECUTABLES)
 
 distclean maintainer-clean realclean: clean
diff --git a/gdb/testsuite/gdb.hp/gdb.defects/bs14602.exp b/gdb/testsuite/gdb.hp/gdb.defects/bs14602.exp
index abd4e6f..45dbf94 100644
--- a/gdb/testsuite/gdb.hp/gdb.defects/bs14602.exp
+++ b/gdb/testsuite/gdb.hp/gdb.defects/bs14602.exp
@@ -4,10 +4,6 @@
 #
 # Source file: bs14602.c
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 if { [skip_hp_tests] } { continue }
 
 #
@@ -21,7 +17,7 @@ set binfile ${objdir}/${subdir}/${testfile}
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.hp/gdb.defects/solib-d.exp b/gdb/testsuite/gdb.hp/gdb.defects/solib-d.exp
index 4b65d67..8b62925 100644
--- a/gdb/testsuite/gdb.hp/gdb.defects/solib-d.exp
+++ b/gdb/testsuite/gdb.hp/gdb.defects/solib-d.exp
@@ -44,10 +44,6 @@
 #
 #
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 if { [skip_hp_tests] } { continue }
 
 
@@ -74,7 +70,7 @@ set libfile2 ${objdir}/${subdir}/${testfile}2.sl
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.hp/gdb.objdbg/Makefile.in b/gdb/testsuite/gdb.hp/gdb.objdbg/Makefile.in
index 229f3ae..2440cf4 100644
--- a/gdb/testsuite/gdb.hp/gdb.objdbg/Makefile.in
+++ b/gdb/testsuite/gdb.hp/gdb.objdbg/Makefile.in
@@ -17,6 +17,7 @@ check:
 
 clean mostlyclean:
 	-rm -f *~ objdbg*/*.o objdbg*/*.ci
+	-rm -f *.dwo *.dwp
 	-rm -f core $(EXECUTABLES)
 
 distclean maintainer-clean realclean: clean
diff --git a/gdb/testsuite/gdb.hp/gdb.objdbg/objdbg01.exp b/gdb/testsuite/gdb.hp/gdb.objdbg/objdbg01.exp
index 1b491bb..02ec5d3 100644
--- a/gdb/testsuite/gdb.hp/gdb.objdbg/objdbg01.exp
+++ b/gdb/testsuite/gdb.hp/gdb.objdbg/objdbg01.exp
@@ -16,7 +16,7 @@ set symaddrfile ${toolssubdir}/symaddr
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.hp/gdb.objdbg/objdbg02.exp b/gdb/testsuite/gdb.hp/gdb.objdbg/objdbg02.exp
index 027c77e..5677b7e 100644
--- a/gdb/testsuite/gdb.hp/gdb.objdbg/objdbg02.exp
+++ b/gdb/testsuite/gdb.hp/gdb.objdbg/objdbg02.exp
@@ -15,7 +15,7 @@ set toolssubdir ${srcdir}/${subdir}/tools
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.hp/gdb.objdbg/objdbg03.exp b/gdb/testsuite/gdb.hp/gdb.objdbg/objdbg03.exp
index c5d12e5..73defdc 100644
--- a/gdb/testsuite/gdb.hp/gdb.objdbg/objdbg03.exp
+++ b/gdb/testsuite/gdb.hp/gdb.objdbg/objdbg03.exp
@@ -20,7 +20,7 @@ if [istarget "hppa64-*-*"] {
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.hp/gdb.objdbg/objdbg04.exp b/gdb/testsuite/gdb.hp/gdb.objdbg/objdbg04.exp
index b060f1c..0a98950 100644
--- a/gdb/testsuite/gdb.hp/gdb.objdbg/objdbg04.exp
+++ b/gdb/testsuite/gdb.hp/gdb.objdbg/objdbg04.exp
@@ -16,7 +16,7 @@ set symaddrfile ${toolssubdir}/symaddr
 
 # Create and source the file that provides information about the compiler
 # used to compile the test case.
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.java/Makefile.in b/gdb/testsuite/gdb.java/Makefile.in
index cc0b575..0b0ae1a 100644
--- a/gdb/testsuite/gdb.java/Makefile.in
+++ b/gdb/testsuite/gdb.java/Makefile.in
@@ -16,6 +16,7 @@ all info install-info dvi install uninstall installcheck check:
 
 clean mostlyclean:
 	-rm -f *.o ${OBJS}  *.class *.exe *~ core jmain jmisc jnpe jprint
+	-rm -f *.dwo *.dwp
 
 distclean maintainer-clean realclean: clean
 	-rm -f Makefile config.status config.log gdb.log gdb.sum
diff --git a/gdb/testsuite/gdb.java/jmain.exp b/gdb/testsuite/gdb.java/jmain.exp
index 8e9d7c6..aba1e5a 100644
--- a/gdb/testsuite/gdb.java/jmain.exp
+++ b/gdb/testsuite/gdb.java/jmain.exp
@@ -16,18 +16,12 @@
 # This file was based on jmisc.exp which in turn was written by
 # Anthony Green. (green at redhat.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 load_lib "java.exp"
 
 if { [skip_java_tests] } { continue }
 
-set testfile "jmain"
-set srcfile ${srcdir}/$subdir/${testfile}.java
-set binfile ${objdir}/${subdir}/${testfile}
-if {[compile_java_from_source ${srcfile} ${binfile} "-g"] != ""} {
+standard_testfile .java
+if {[compile_java_from_source $srcdir/$subdir/$srcfile $binfile "-g"] != ""} {
     continue
 }
 
diff --git a/gdb/testsuite/gdb.java/jmisc.exp b/gdb/testsuite/gdb.java/jmisc.exp
index 050ea56..7215861 100644
--- a/gdb/testsuite/gdb.java/jmisc.exp
+++ b/gdb/testsuite/gdb.java/jmisc.exp
@@ -16,18 +16,12 @@
 # This file was written by Anthony Green. (green at redhat.com)
 #
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 load_lib "java.exp"
 
 if { [skip_java_tests] } { continue }
 
-set testfile "jmisc"
-set srcfile ${srcdir}/$subdir/${testfile}.java
-set binfile ${objdir}/${subdir}/${testfile}
-if {[compile_java_from_source ${srcfile} ${binfile} "-g"] != ""} {
+standard_testfile .java
+if {[compile_java_from_source $srcdir/$subdir/$srcfile $binfile "-g"] != ""} {
     continue
 }
 
diff --git a/gdb/testsuite/gdb.java/jnpe.exp b/gdb/testsuite/gdb.java/jnpe.exp
index 85daf9d..f7225d8 100644
--- a/gdb/testsuite/gdb.java/jnpe.exp
+++ b/gdb/testsuite/gdb.java/jnpe.exp
@@ -13,16 +13,10 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-  strace $tracelevel
-}
-
 load_lib "java.exp"
 
-set testfile "jnpe"
-set srcfile ${testfile}.java
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [compile_java_from_source ${srcdir}/$subdir/${srcfile} ${binfile} "-g"] != "" } {
+standard_testfile .java
+if  { [compile_java_from_source $srcdir/$subdir/$srcfile $binfile "-g"] != "" } {
     untested "Couldn't compile ${srcdir}/$subdir/${srcfile}"
     return -1
 }
diff --git a/gdb/testsuite/gdb.java/jprint.exp b/gdb/testsuite/gdb.java/jprint.exp
index c11be67..b2d5d31 100644
--- a/gdb/testsuite/gdb.java/jprint.exp
+++ b/gdb/testsuite/gdb.java/jprint.exp
@@ -16,18 +16,12 @@
 # This file was written by Jeff Johnston. (jjohnstn at redhat.com)
 #
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 load_lib "java.exp"
 
 if { [skip_java_tests] } { continue }
 
-set testfile "jprint"
-set srcfile ${srcdir}/$subdir/${testfile}.java
-set binfile ${objdir}/${subdir}/${testfile}
-if {[compile_java_from_source ${srcfile} ${binfile} "-g"] != ""} {
+standard_testfile .java
+if {[compile_java_from_source $srcdir/$subdir/$srcfile $binfile "-g"] != ""} {
     continue
 }
 
@@ -53,16 +47,16 @@ if [set_lang_java] then {
     gdb_breakpoint "${function}void" { allow-pending }
     gdb_continue_to_breakpoint $function
 
-    gdb_test "p jvclass.addprint(4,5,6)" "sum is 15\r\n.*" "unambiguous static call"
+    gdb_test "p jvclass.addprint(4,5,6)" " = 15" "unambiguous static call"
 
     gdb_test "next" ""
     gdb_test "next" ""
 
-    gdb_test "p x.print(44)" "x is 44\r\n.*" "single argument print call"
-    gdb_test "p x.print(22,33)" "y is 33\r\n.*" "double argument print call"
-    gdb_test "call x.dothat(55)" "new value is 58\r\n.*= 62.*" "virtual fn call"
-    gdb_test "p x.addprint(1,2,3)" "sum is 6\r\n.*" "inherited static call"
-    gdb_test "call x.addk(44)" "adding k gives 121\r\n.*= 121.*" "inherited virtual fn call"
+    gdb_test "p x.print(44)" " = 44" "single argument call"
+    gdb_test "p x.print(22,33)" " = 33" "double argument call"
+    gdb_test "p x.dothat(55)" " = 62.*" "virtual fn call"
+    gdb_test "p x.addprint(1,2,3)" "= 6" "inherited static call"
+    gdb_test "p x.addk(44)" " = 121" "inherited virtual fn call"
 
     # Regression test for a crasher.
     # GCC does not output location information for static class members,
diff --git a/gdb/testsuite/gdb.java/jprint.java b/gdb/testsuite/gdb.java/jprint.java
index 5a4a424..0a5e7d3 100644
--- a/gdb/testsuite/gdb.java/jprint.java
+++ b/gdb/testsuite/gdb.java/jprint.java
@@ -27,9 +27,10 @@ class jvclass {
   static {
     k = 77;
   }
-  public static void addprint (int x, int y, int z) {
+  public static int addprint (int x, int y, int z) {
     int sum = x + y + z;
     System.out.println ("sum is " + sum);
+    return sum;
   }
 
   public int addk (int x) {
@@ -48,16 +49,19 @@ public class jprint extends jvclass {
     System.out.println ("new value is " + y);
     return y + 4;
   }
-  public static void print (int x) {
+  public static int print (int x) {
     System.out.println("x is " + x);
+    return x;
   }
-  public static void print (int x, int y) {
+  public static int print (int x, int y) {
     System.out.println("y is " + y);
+    return y;
   }
   public static void main(String[] args) {
     jprint x = new jprint ();
     x.dothat (44);
     print (k, 33);
+    print (x.addk(0), 33);
   }
 }
 
diff --git a/gdb/testsuite/gdb.java/jv-exp.exp b/gdb/testsuite/gdb.java/jv-exp.exp
index d3c7c0e..bea701b 100644
--- a/gdb/testsuite/gdb.java/jv-exp.exp
+++ b/gdb/testsuite/gdb.java/jv-exp.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "java.exp"
 
 proc test_comparisons {} {
diff --git a/gdb/testsuite/gdb.java/jv-print.exp b/gdb/testsuite/gdb.java/jv-print.exp
index 206e582..8d86841 100644
--- a/gdb/testsuite/gdb.java/jv-print.exp
+++ b/gdb/testsuite/gdb.java/jv-print.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 load_lib "java.exp"
 
 if { [skip_java_tests] } { continue }
diff --git a/gdb/testsuite/gdb.linespec/Makefile.in b/gdb/testsuite/gdb.linespec/Makefile.in
index 2658a24..18eadbe 100644
--- a/gdb/testsuite/gdb.linespec/Makefile.in
+++ b/gdb/testsuite/gdb.linespec/Makefile.in
@@ -8,6 +8,7 @@ all info install-info dvi install uninstall installcheck check:
 
 clean mostlyclean:
 	-rm -f *~ *.o *.ci
+	-rm -f *.dwo *.dwp
 	-rm -f core $(EXECUTABLES)
 
 distclean maintainer-clean realclean: clean
diff --git a/gdb/testsuite/gdb.linespec/linespec.exp b/gdb/testsuite/gdb.linespec/linespec.exp
index da5942a..3698ea2 100644
--- a/gdb/testsuite/gdb.linespec/linespec.exp
+++ b/gdb/testsuite/gdb.linespec/linespec.exp
@@ -15,10 +15,9 @@
 
 # Tests of ambiguous linespecs.
 
-set testfile linespec
+standard_testfile lspec.cc
 
-set exefile lspec
-set binfile ${objdir}/${subdir}/${exefile}
+set exefile $testfile
 
 set baseone base/one/thefile.cc
 set basetwo base/two/thefile.cc
@@ -29,8 +28,8 @@ if {[skip_cplus_tests]} {
 }
 
 if {[prepare_for_testing ${testfile}.exp $exefile \
-	 [list lspec.cc $baseone $basetwo] \
-	 {debug nowarnings}]} {
+	 [list $srcfile $baseone $basetwo] \
+	 {debug nowarnings c++}]} {
     return -1
 }
 
@@ -44,19 +43,24 @@ if {$l1 != $l2} {
     error "somebody incompatibly modified the source files needed by linespec.exp"
 }
 
+gdb_test "break one/thefile.cc:$l1" \
+    "Breakpoint $decimal at $hex: file .*thefile.cc, line $l1." \
+    "single-location break using dir/file:line"
+
+gdb_test "clear one/thefile.cc:$l1" \
+    "Deleted breakpoint $decimal *" \
+    "clear breakpoint using dir/file:line"
+
 gdb_test "break thefile.cc:$l1" \
-    "Breakpoint 1 at $hex: thefile.cc:$l1. \[(\]2 locations\[)\]" \
+    "Breakpoint $decimal at $hex: thefile.cc:$l1. \[(\]2 locations\[)\]" \
     "multi-location break using file:line"
 
-# We'd like this to work, but it currently does not.
-# gdb_test "break one/thefile.cc:$l1"
-
 gdb_test "break dupname" \
-    "Breakpoint 2 at $hex: dupname. \[(\]2 locations\[)\]" \
+    "Breakpoint $decimal at $hex: dupname. \[(\]2 locations\[)\]" \
     "multi-location break using duplicate function name"
 
 gdb_test "break dupname:label" \
-    "Breakpoint 3 at $hex: dupname:label. \[(\]2 locations\[)\]" \
+    "Breakpoint $decimal at $hex: dupname:label. \[(\]2 locations\[)\]" \
     "multi-location break using duplicate function name and label"
 
 gdb_test_no_output "set breakpoint pending off" \
diff --git a/gdb/testsuite/gdb.linespec/ls-dollar.cc b/gdb/testsuite/gdb.linespec/ls-dollar.cc
new file mode 100644
index 0000000..72e792b
--- /dev/null
+++ b/gdb/testsuite/gdb.linespec/ls-dollar.cc
@@ -0,0 +1,26 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+static int $dollar_var = 0;
+
+int $dollar_func (void) { return $dollar_var; } /* dollar_func */
+
+int
+main (void)
+{
+  return $dollar_func ();
+}
diff --git a/gdb/testsuite/gdb.linespec/ls-dollar.exp b/gdb/testsuite/gdb.linespec/ls-dollar.exp
new file mode 100644
index 0000000..1fbb6bb
--- /dev/null
+++ b/gdb/testsuite/gdb.linespec/ls-dollar.exp
@@ -0,0 +1,36 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Tests for dollar signs in linespecs
+
+standard_testfile .cc
+set exefile $testfile
+
+if {[skip_cplus_tests]} {
+    unsupported "skipping C++ tests"
+    return
+}
+
+if {[prepare_for_testing $testfile $exefile $srcfile \
+	 {debug nowarnings c++}]} {
+    return -1
+}
+
+gdb_test_no_output "set listsize 1"
+
+gdb_test "list \$dollar_var" \
+    ".*static int [string_to_regexp {$dollar_var}] = 0;"
+gdb_test "break \$dollar_func" \
+    "Breakpoint $decimal at $hex: file .*$srcfile, line [gdb_get_line_number {dollar_func}]\\\."
diff --git a/gdb/testsuite/gdb.linespec/ls-errs.c b/gdb/testsuite/gdb.linespec/ls-errs.c
new file mode 100644
index 0000000..bb4c096
--- /dev/null
+++ b/gdb/testsuite/gdb.linespec/ls-errs.c
@@ -0,0 +1,29 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+int myfunction (void) { return 0; }
+
+int
+main (void)
+{  
+  int a;
+
+  a = myfunction ();
+
+ here:
+  return a;
+}
diff --git a/gdb/testsuite/gdb.linespec/ls-errs.exp b/gdb/testsuite/gdb.linespec/ls-errs.exp
new file mode 100644
index 0000000..5668397
--- /dev/null
+++ b/gdb/testsuite/gdb.linespec/ls-errs.exp
@@ -0,0 +1,191 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Tests for linespec error conditions
+
+standard_testfile
+set exefile $testfile
+
+if {[prepare_for_testing $testfile $exefile $srcfile \
+	 {debug nowarnings}]} {
+    return -1
+}
+
+# Turn off the pending breakpoint queries.
+gdb_test_no_output "set breakpoint pending off"
+
+# We intentionally do not use gdb_breakpoint for these tests.
+
+# Add the (invalid) LINESPEC to the test array named in ARRAY_NAME.
+# Use the index into ::error_messages MSG_ID and ARGS to create
+# an error message which is the expect result of attempting to
+# break on the given LINESPEC.
+proc add {array_name linespec msg_id args} {
+    global error_messages
+    upvar $array_name tests
+
+    lappend tests(linespecs) $linespec
+    set tests("$linespec") [string_to_regexp \
+				[eval format \$error_messages($msg_id) $args]]
+}
+
+# Common error message format strings.
+array set error_messages {
+    invalid_file "No source file named %s."
+    invalid_function "Function \"%s\" not defined."
+    invalid_var_or_func "Undefined convenience variable or function \"%s\" not defined."
+    invalid_function_f "Function \"%s\" not defined in \"%s\"."
+    invalid_var_or_func_f \
+	"Undefined convenience variable or function \"%s\" not defined in \"%s\"."
+    invalid_label "No label \"%s\" defined in function \"%s\"."
+    invalid_offset "No line %d in the current file."
+    invalid_offset_f "No line %d in file \"%s\"."
+    unexpected "malformed linespec error: unexpected %s"
+    unexpected_opt "malformed linespec error: unexpected %s, \"%s\""
+    unmatched_quote "unmatched quote"
+}
+
+# Some commonly used whitespace tests around ':'.
+set spaces [list ":" ": " " :" " : " "\t:  " "  :\t" "\t:\t" " \t:\t " \
+		"\t  \t:\t  \t  \t"]
+
+# A list of invalid offsets.
+set invalid_offsets [list -100 +500 1000]
+
+# THE_TESTS will hold all of our test information.  Array index
+# "linespecs" will contain the complete list of all linespecs
+# to be tested.  An array index of \"$linespec\" will contain
+# the expected result.
+set the_tests(linespecs) {}
+
+# Try some simple, invalid linespecs involving spaces.
+foreach x $spaces {
+    add the_tests $x unexpected "colon"
+}
+
+# Test invalid filespecs starting with offset.  This is done
+# first so that default offsets are tested.
+foreach x $invalid_offsets {
+    set offset $x
+
+    # Relative offsets are relative to line 16.  Adjust
+    # expected offset from error message accordingly.
+    if {[string index $x 0] == "+" ||
+	[string index $x 0] == "-"} {
+	incr offset 16
+    }
+    add the_tests $x invalid_offset $offset
+}
+
+# Test offsets with trailing tokens w/ and w/o spaces.
+foreach x $spaces {
+    add the_tests "3$x" unexpected "colon"
+    add the_tests "+10$x" unexpected "colon"
+    add the_tests "-10$x" unexpected "colon"
+}
+
+foreach x {1 +1 +100 -10} {
+    add the_tests "3 $x" unexpected_opt "number" $x
+    add the_tests "+10 $x" unexpected_opt "number" $x
+    add the_tests "-10 $x" unexpected_opt "number" $x
+}
+
+add the_tests "3 foo" unexpected_opt "string" "foo"
+add the_tests "+10 foo" unexpected_opt "string" "foo"
+add the_tests "-10 foo" unexpected_opt "string" "foo"
+
+# Test invalid linespecs starting with filename.
+foreach x [list "this_file_doesn't_exist.c" \
+	       "this file has spaces.c" \
+	       "\"file::colons.c\"" \
+	       "'file::colons.c'" \
+	       "\"this \"file\" has quotes.c\"" \
+	       "'this \"file\" has quotes.c'" \
+	       "'this 'file' has quotes.c'" \
+	       "\"this 'file' has quotes.c\"" \
+	       "\"spaces: and :colons.c\"" \
+	       "'more: :spaces: :and  colons::.c'"] {
+    # Remove any quoting from FILENAME for the error message.
+    add the_tests "$x:3" invalid_file [string trim $x \"']
+}
+
+# Test unmatched quotes.
+foreach x {"\"src-file.c'" "'src-file.c"} {
+    add the_tests "$x:3" unmatched_quote
+}
+
+add the_tests $srcfile invalid_function $srcfile
+foreach x {"foo" " foo" " foo "} {
+    # Trim any leading/trailing whitespace for error messages.
+    add the_tests "$srcfile:$x" invalid_function_f [string trim $x] $srcfile
+    add the_tests "$srcfile:main:$x" invalid_label [string trim $x] "main" 
+}
+
+foreach x $spaces {
+    add the_tests "$srcfile$x" unexpected "end of input"
+    add the_tests "$srcfile:main$x" unexpected "end of input"
+}
+
+add the_tests "${srcfile}::" invalid_function "${srcfile}::"
+add the_tests "$srcfile:3 1" unexpected_opt "number" "1"
+add the_tests "$srcfile:3 +100" unexpected_opt "number" "+100"
+add the_tests "$srcfile:3 -100" unexpected_opt "number" "-100"
+add the_tests "$srcfile:3 foo" unexpected_opt "string" "foo"
+
+foreach x $invalid_offsets {
+    add the_tests "$srcfile:$x" invalid_offset_f $x $srcfile
+    add the_tests "\"$srcfile:$x\"" invalid_offset_f $x $srcfile
+    add the_tests "'$srcfile:$x'" invalid_offset_f $x $srcfile
+}
+
+# Test invalid filespecs starting with function.
+foreach x {"foobar" "foo::bar" "foo.bar" "foo ." "foo bar" "foo 1" \
+	       "foo 0" "foo +10" "foo -10" "foo +100" "foo -100"} {
+    add the_tests $x invalid_function $x
+}
+
+foreach x $spaces {
+    add the_tests "main${x}there" invalid_label "there" "main"
+    add the_tests "main:here${x}" unexpected "end of input"
+}
+
+add the_tests "main 3" invalid_function "main 3"
+add the_tests "main +100" invalid_function "main +100"
+add the_tests "main -100" invalid_function "main -100"
+add the_tests "main foo" invalid_function "main foo"
+
+foreach x {"3" "+100" "-100" "foo"} {
+    add the_tests "main:here $x" invalid_label "here $x" "main"
+}
+
+foreach x {"if" "task" "thread"} {
+    add the_tests $x unexpected_opt "keyword" $x
+}
+
+add the_tests "'main.c'flubber" unexpected_opt "string" "flubber"
+add the_tests "'main.c',21" invalid_function "main.c"
+add the_tests "'main.c' " invalid_function "main.c"
+add the_tests "'main.c'3" unexpected_opt "number" "3"
+add the_tests "'main.c'+3" unexpected_opt "number" "+3"
+
+# Test undefined convenience variables.
+set x {$zippo}
+add the_tests $x invalid_var_or_func $x
+add the_tests "$srcfile:$x" invalid_var_or_func_f $x $srcfile
+
+# Run the tests
+foreach linespec $the_tests(linespecs) {
+    gdb_test "break $linespec" $the_tests("$linespec")
+}
diff --git a/gdb/testsuite/gdb.mi/Makefile.in b/gdb/testsuite/gdb.mi/Makefile.in
index dc1f1a3..3f9bbb7 100644
--- a/gdb/testsuite/gdb.mi/Makefile.in
+++ b/gdb/testsuite/gdb.mi/Makefile.in
@@ -23,6 +23,7 @@ all info install-info dvi install uninstall installcheck check:
 
 clean mostlyclean:
 	-rm -f *.ci *.o $(OBJS) $(PROGS) *~ core
+	-rm -f *.dwo *.dwp
 	-rm -f $(MISCELLANEOUS)
 
 distclean maintainer-clean realclean: clean
diff --git a/gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp b/gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp
index 662bded..187cd12 100644
--- a/gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp
+++ b/gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp
@@ -22,19 +22,14 @@ if {![dwarf2_support]} {
     return 0
 }
 
-set testfile "dw2-ref-missing-frame"
-set srcsfile ${testfile}.S
-set objsfile ${objdir}/${subdir}/${testfile}.o
-set srcfuncfile ${testfile}-func.c
-set objfuncfile ${objdir}/${subdir}/${testfile}-func.o
-set srcmainfile ${testfile}-main.c
-set objmainfile ${objdir}/${subdir}/${testfile}-main.o
-set executable ${testfile}
-set binfile ${objdir}/${subdir}/${executable}
+standard_testfile .S dw2-ref-missing-frame-func.c dw2-ref-missing-frame-main.c
+set objsfile [standard_output_file ${testfile}.o]
+set objfuncfile [standard_output_file ${testfile}-func.o]
+set objmainfile [standard_output_file ${testfile}-main.o]
 
-if { [gdb_compile "${srcdir}/${subdir}/${srcsfile}" $objsfile object {}] != ""
-     || [gdb_compile "${srcdir}/${subdir}/${srcfuncfile}" $objfuncfile object {}] != ""
-     || [gdb_compile "${srcdir}/${subdir}/${srcmainfile}" $objmainfile object {debug}] != ""
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" $objsfile object {}] != ""
+     || [gdb_compile "${srcdir}/${subdir}/${srcfile2}" $objfuncfile object {}] != ""
+     || [gdb_compile "${srcdir}/${subdir}/${srcfile3}" $objmainfile object {debug}] != ""
      || [gdb_compile "$objsfile $objfuncfile $objmainfile" $binfile executable {}] != "" } {
     return -1
 }
diff --git a/gdb/testsuite/gdb.mi/gdb2549.exp b/gdb/testsuite/gdb.mi/gdb2549.exp
index 79068b1..9af04dd 100644
--- a/gdb/testsuite/gdb.mi/gdb2549.exp
+++ b/gdb/testsuite/gdb.mi/gdb2549.exp
@@ -30,10 +30,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi-regs.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/gdb669.exp b/gdb/testsuite/gdb.mi/gdb669.exp
index 904f14d..2ca173c 100644
--- a/gdb/testsuite/gdb.mi/gdb669.exp
+++ b/gdb/testsuite/gdb.mi/gdb669.exp
@@ -28,11 +28,9 @@ if {[mi_gdb_start]} {
 #
 # Start here
 #
-set testfile "pthreads"
-set srcfile "$testfile.c"
-set binfile "$objdir/$subdir/gdb669-$testfile"
+standard_testfile pthreads.c
 
-set options [list debug incdir=$objdir]
+set options [list debug]
 if {[gdb_compile_pthreads "$srcdir/$subdir/$srcfile" $binfile executable $options] != "" } {
     return -1
 }
diff --git a/gdb/testsuite/gdb.mi/gdb701.exp b/gdb/testsuite/gdb.mi/gdb701.exp
index cda54a8..8de7adc 100644
--- a/gdb/testsuite/gdb.mi/gdb701.exp
+++ b/gdb/testsuite/gdb.mi/gdb701.exp
@@ -25,9 +25,8 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile gdb701
-set srcfile "$testfile.c"
-set binfile $objdir/$subdir/$testfile
+standard_testfile
+
 if {[gdb_compile $srcdir/$subdir/$srcfile $binfile executable debug] != ""} {
   untested gdb701.exp
   return -1
diff --git a/gdb/testsuite/gdb.mi/gdb792.exp b/gdb/testsuite/gdb.mi/gdb792.exp
index bd0972a..1cb7ae2 100644
--- a/gdb/testsuite/gdb.mi/gdb792.exp
+++ b/gdb/testsuite/gdb.mi/gdb792.exp
@@ -27,11 +27,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile gdb792
-set srcfile "$testfile.cc"
-set binfile $objdir/$subdir/$testfile
+standard_testfile .cc
 
-if [get_compiler_info ${binfile} "c++"] {
+if [get_compiler_info "c++"] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.mi/mi-async.exp b/gdb/testsuite/gdb.mi/mi-async.exp
index 3beee7f..1d6b377 100644
--- a/gdb/testsuite/gdb.mi/mi-async.exp
+++ b/gdb/testsuite/gdb.mi/mi-async.exp
@@ -36,10 +36,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi-async
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi-async.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-basics.exp b/gdb/testsuite/gdb.mi/mi-basics.exp
index 4c96d47..564b835 100644
--- a/gdb/testsuite/gdb.mi/mi-basics.exp
+++ b/gdb/testsuite/gdb.mi/mi-basics.exp
@@ -33,13 +33,11 @@ if [mi_gdb_start separate-inferior-tty] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi-basics
+standard_testfile basics.c
 set escapedobjdir [string_to_regexp ${objdir}]
 set envirodir [string_to_regexp ${objdir}/${subdir}]
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi-basics.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-break.exp b/gdb/testsuite/gdb.mi/mi-break.exp
index a2c5c74..573f484 100644
--- a/gdb/testsuite/gdb.mi/mi-break.exp
+++ b/gdb/testsuite/gdb.mi/mi-break.exp
@@ -32,10 +32,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi-break
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi-break.exp
      return -1
 }
@@ -121,27 +120,27 @@ proc test_rbreak_creation_and_listing {} {
     # -break-insert -r .*llee
     # -break-list
 
-    setup_xfail "*-*-*"
+    setup_kfail "*-*-*" mi/14270
     mi_gdb_test "122-break-insert -r main" \
              "122\\^done,bkpt=\{number=\"5\",addr=\"$hex\",file=\".*basics.c\",line=\"$line_main_body\"\}" \
              "break-insert -r operation"
 
-    setup_xfail "*-*-*"
+    setup_kfail "*-*-*" mi/14270
     mi_gdb_test "133-break-insert -r callee2" \
              "133\\^done,bkpt=\{number=\"6\",addr=\"$hex\",file=\".*basics.c\",line=\"$line_callee2_body\"\}" \
              "insert breakpoint with regexp callee2"
 
-    setup_xfail "*-*-*"
+    setup_kfail "*-*-*" mi/14270
     mi_gdb_test "144-break-insert -r callee" \
 	    "144\\^done,bkpt=\{number=\"7\",addr=\"$hex\",file=\".*basics.c\",line=\"$line_callee1_body\"\},bkpt=\{number=\"8\",addr=\"$hex\",file=\".*basics.c\",line=\"$line_callee2_body\"\},bkpt=\{number=\"9\",addr=\"$hex\",file=\".*basics.c\",line=\"$line_callee3_body\"\},bkpt=\{number=\"10\",addr=\"$hex\",file=\".*basics.c\",line=\"$line_callee4_body\"\}" \
              "insert breakpoint with regexp callee"
 
-    setup_xfail "*-*-*"
+    setup_kfail "*-*-*" mi/14270
     mi_gdb_test "155-break-insert -r \.\*llee" \
 	    "155\\^done,bkpt=\{number=\"11\",addr=\"$hex\",file=\".*basics.c\",line=\"$line_callee1_body\"\},bkpt=\{number=\"12\",addr=\"$hex\",file=\".*basics.c\",line=\"$line_callee2_body\"\},bkpt=\{number=\"13\",addr=\"$hex\",file=\".*basics.c\",line=\"$line_callee3_body\"\},bkpt=\{number=\"14\",addr=\"$hex\",file=\".*basics.c\",line=\"$line_callee4_body\"\}" \
              "insert breakpoint with regexp .*llee"
 
-    setup_xfail "*-*-*"
+    setup_kfail "*-*-*" mi/14270
     mi_gdb_test "166-break-list" \
 	    "1\\\^done,BreakpointTable=\{nr_rows=\".\",nr_cols=\".\",hdr=\\\[\{width=\".*\",alignment=\".*\",col_name=\"number\",colhdr=\"Num\"\}.*colhdr=\"Type\".*colhdr=\"Disp\".*colhdr=\"Enb\".*colhdr=\"Address\".*colhdr=\"What\".*\\\],body=\\\[bkpt=\{number=\"5\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"$hex\",func=\"main\",file=\".*basics.c\",line=\"$line_main_body\",times=\"0\"\},.*\}\\\]\}" \
                 "list of breakpoints"
diff --git a/gdb/testsuite/gdb.mi/mi-cli.exp b/gdb/testsuite/gdb.mi/mi-cli.exp
index 0021308..b7abbc7 100644
--- a/gdb/testsuite/gdb.mi/mi-cli.exp
+++ b/gdb/testsuite/gdb.mi/mi-cli.exp
@@ -27,10 +27,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi-cli
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi-cli.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-console.exp b/gdb/testsuite/gdb.mi/mi-console.exp
index 10f8c71..891c743 100644
--- a/gdb/testsuite/gdb.mi/mi-console.exp
+++ b/gdb/testsuite/gdb.mi/mi-console.exp
@@ -36,10 +36,9 @@ if [mi_gdb_start separate-inferior-tty] {
     continue
 }
 
-set testfile "mi-console"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi-console.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-disassemble.exp b/gdb/testsuite/gdb.mi/mi-disassemble.exp
index dcbc033..377ffde 100644
--- a/gdb/testsuite/gdb.mi/mi-disassemble.exp
+++ b/gdb/testsuite/gdb.mi/mi-disassemble.exp
@@ -29,10 +29,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi-disassemble
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi-disassemble.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-eval.exp b/gdb/testsuite/gdb.mi/mi-eval.exp
index 61a35cc..ea20369 100644
--- a/gdb/testsuite/gdb.mi/mi-eval.exp
+++ b/gdb/testsuite/gdb.mi/mi-eval.exp
@@ -30,10 +30,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi-eval
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi-eval.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-file-transfer.exp b/gdb/testsuite/gdb.mi/mi-file-transfer.exp
index 74b38e9..a7a3e60 100644
--- a/gdb/testsuite/gdb.mi/mi-file-transfer.exp
+++ b/gdb/testsuite/gdb.mi/mi-file-transfer.exp
@@ -24,9 +24,8 @@ if { [skip_gdbserver_tests] } {
     return 0
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi-file-transfer
+standard_testfile basics.c
+
 if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     untested mi-file-transfer.exp
     return -1
diff --git a/gdb/testsuite/gdb.mi/mi-file.exp b/gdb/testsuite/gdb.mi/mi-file.exp
index 55239fe..b0df2cd 100644
--- a/gdb/testsuite/gdb.mi/mi-file.exp
+++ b/gdb/testsuite/gdb.mi/mi-file.exp
@@ -32,10 +32,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi-file
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi-file.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-info-os.exp b/gdb/testsuite/gdb.mi/mi-info-os.exp
new file mode 100644
index 0000000..2fff688
--- /dev/null
+++ b/gdb/testsuite/gdb.mi/mi-info-os.exp
@@ -0,0 +1,38 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib mi-support.exp
+set MIFLAGS "-i=mi"
+
+# This test is Linux-only.
+if ![istarget *-*-linux*] then {
+    unsupported "mi-info-os.exp"
+    return -1
+}
+
+# Support for XML-output is needed to run this test.
+if [gdb_skip_xml_test] then {
+    unsupported "mi-info-os.exp"
+    return -1
+}
+
+gdb_exit
+if [mi_gdb_start] {
+    continue
+}
+
+# Try the argument-less form that lists all the types in a table.
+
+mi_gdb_test "-info-os" ".*\\^done,OSDataTable=.*" "-info-os"
diff --git a/gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.exp b/gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.exp
index 4831a5b..ba80f4f 100644
--- a/gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.exp
+++ b/gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.exp
@@ -23,11 +23,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile mi-inheritance-syntax-error
-set srcfile "$testfile.cc"
-set binfile $objdir/$subdir/$testfile
+standard_testfile .cc
 
-if [get_compiler_info ${binfile} "c++"] {
+if [get_compiler_info "c++"] {
     return -1;
 }
 
diff --git a/gdb/testsuite/gdb.mi/mi-logging.exp b/gdb/testsuite/gdb.mi/mi-logging.exp
new file mode 100644
index 0000000..2c533bd
--- /dev/null
+++ b/gdb/testsuite/gdb.mi/mi-logging.exp
@@ -0,0 +1,87 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib mi-support.exp
+set MIFLAGS "-i=mi"
+
+gdb_exit
+if [mi_gdb_start] {
+    continue
+}
+
+standard_testfile basics.c
+set opts {debug}
+
+if [build_executable $testfile.exp $testfile $srcfile $opts] {
+    untested mi-logging.exp
+    return -1;
+}
+
+if {[mi_run_to_main] < 0} {
+    return -1
+}
+
+set milogfile "milog.txt"
+
+mi_gdb_test "-gdb-set logging file $milogfile" ".*"
+
+mi_gdb_test "-gdb-set logging overwrite on" ".*"
+
+mi_gdb_test "-gdb-set logging on" ".*" "logging on"
+
+mi_step "logged step"
+
+mi_next "logged next"
+
+mi_gdb_test "-gdb-set logging off" ".*" "logging off"
+
+set chan [open $milogfile]
+set logcontent [read $chan]
+close $chan
+
+set mi_log_prompt "\[(\]gdb\[)\] \[\r\n\]+"
+
+if [regexp "\\^done\[\r\n\]+$mi_log_prompt\\^running\[\r\n\]+\\*running,thread-id=\"all\"\[\r\n\]+$mi_log_prompt\\*stopped,reason=\"end-stepping-range\",.*\[\r\n\]+$mi_log_prompt\\^running\[\r\n\]+\\*running,thread-id=\"all\"\[\r\n\]+$mi_log_prompt\\*stopped,reason=\"end-stepping-range\",.*\[\r\n\]+$mi_log_prompt" $logcontent] {
+    pass "Log file contents"
+} else {
+    fail "Log file contents"
+}
+
+# Now try the redirect, which writes into the file only.
+
+mi_gdb_test "-gdb-set logging redirect on" ".*" "redirect logging on"
+
+# Since all output will be going into the file, just keep sending commands
+# and don't expect anything to appear until logging is turned off.
+
+send_gdb "1001-gdb-set logging on\n"
+send_gdb "1002-exec-step\n"
+send_gdb "1003-exec-next\n"
+
+mi_gdb_test "1004-gdb-set logging off" ".*" "redirect logging off"
+
+set chan [open $milogfile]
+set logcontent [read $chan]
+close $chan
+
+if [regexp "1001\\^done\[\r\n\]+$mi_log_prompt.*1002\\^running\[\r\n\]+\\*running,thread-id=\"all\"\[\r\n\]+$mi_log_prompt\\*stopped,reason=\"end-stepping-range\",.*\[\r\n\]+$mi_log_prompt.*1003\\^running\[\r\n\]+\\*running,thread-id=\"all\"\[\r\n\]+$mi_log_prompt\\*stopped,reason=\"end-stepping-range\",.*\[\r\n\]+$mi_log_prompt" $logcontent] {
+    pass "Redirect log file contents"
+} else {
+    fail "Redirect log file contents"
+}
+
+mi_gdb_exit
+
+remote_file host delete $milogfile
diff --git a/gdb/testsuite/gdb.mi/mi-nonstop-exit.exp b/gdb/testsuite/gdb.mi/mi-nonstop-exit.exp
index b6f5728..fe7654e 100644
--- a/gdb/testsuite/gdb.mi/mi-nonstop-exit.exp
+++ b/gdb/testsuite/gdb.mi/mi-nonstop-exit.exp
@@ -29,11 +29,9 @@ if {[mi_gdb_start]} {
 #
 # Start here
 #
-set testfile "non-stop-exit"
-set srcfile "$testfile.c"
-set binfile "$objdir/$subdir/mi-$testfile"
+standard_testfile non-stop-exit.c
 
-set options [list debug incdir=$objdir]
+set options [list debug]
 if {[gdb_compile_pthreads "$srcdir/$subdir/$srcfile" $binfile executable $options] != "" } {
     return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-nonstop.exp b/gdb/testsuite/gdb.mi/mi-nonstop.exp
index 1c57643..f96799f 100644
--- a/gdb/testsuite/gdb.mi/mi-nonstop.exp
+++ b/gdb/testsuite/gdb.mi/mi-nonstop.exp
@@ -39,11 +39,9 @@ proc mi_nonstop_resume { command test } {
 #
 # Start here
 #
-set testfile "non-stop"
-set srcfile "$testfile.c"
-set binfile "$objdir/$subdir/mi-$testfile"
+standard_testfile non-stop.c
 
-set options [list debug incdir=$objdir]
+set options [list debug]
 if {[gdb_compile_pthreads "$srcdir/$subdir/$srcfile" $binfile executable $options] != "" } {
     return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-ns-stale-regcache.exp b/gdb/testsuite/gdb.mi/mi-ns-stale-regcache.exp
index c5cf8cf..8cf5b6c 100644
--- a/gdb/testsuite/gdb.mi/mi-ns-stale-regcache.exp
+++ b/gdb/testsuite/gdb.mi/mi-ns-stale-regcache.exp
@@ -41,11 +41,9 @@ proc mi_nonstop_resume { command test } {
 #
 # Start here
 #
-set testfile "ns-stale-regcache"
-set srcfile "$testfile.c"
-set binfile "$objdir/$subdir/mi-$testfile"
+standard_testfile ns-stale-regcache.c
 
-set options [list debug incdir=$objdir]
+set options [list debug]
 if {[gdb_compile "$srcdir/$subdir/$srcfile" \
 	 $binfile executable $options] != "" } {
     return -1
diff --git a/gdb/testsuite/gdb.mi/mi-nsintrall.exp b/gdb/testsuite/gdb.mi/mi-nsintrall.exp
index ccdce5c..1d4aba5 100644
--- a/gdb/testsuite/gdb.mi/mi-nsintrall.exp
+++ b/gdb/testsuite/gdb.mi/mi-nsintrall.exp
@@ -29,11 +29,9 @@ if {[mi_gdb_start]} {
 #
 # Start here
 #
-set testfile "nsintrall"
-set srcfile "$testfile.c"
-set binfile "$objdir/$subdir/mi-$testfile"
+standard_testfile nsintrall.c
 
-set options [list debug incdir=$objdir]
+set options [list debug]
 if {[gdb_compile_pthreads "$srcdir/$subdir/$srcfile" $binfile executable $options] != "" } {
     return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-nsmoribund.exp b/gdb/testsuite/gdb.mi/mi-nsmoribund.exp
index 0c16e85..0c83bb9 100644
--- a/gdb/testsuite/gdb.mi/mi-nsmoribund.exp
+++ b/gdb/testsuite/gdb.mi/mi-nsmoribund.exp
@@ -29,11 +29,9 @@ if {[mi_gdb_start]} {
 #
 # Start here
 #
-set testfile "nsmoribund"
-set srcfile "$testfile.c"
-set binfile "$objdir/$subdir/mi-$testfile"
+standard_testfile nsmoribund.c
 
-set options [list debug incdir=$objdir]
+set options [list debug]
 if {[gdb_compile_pthreads "$srcdir/$subdir/$srcfile" $binfile executable $options] != "" } {
     return -1
 }
@@ -118,9 +116,9 @@ mi_check_thread_states \
 # we are interested in, so we can't use mi_gdb_test or
 # gdb_test_multiple (or an MI equivalent)
 
-send_gdb "102-break-delete\n"
-send_gdb "print done = 1\n"
-send_gdb "103-exec-continue --all\n"
+mi_gdb_test "102-break-delete" "102\\^done.*"
+mi_gdb_test "print done = 1" { = 1"}
+mi_gdb_test "103-exec-continue --all" "\[^\n\]*\r\n$running_re"
 
 gdb_expect {
     -re "\\*stopped,reason=\"exited-normally\"" {
diff --git a/gdb/testsuite/gdb.mi/mi-nsthrexec.exp b/gdb/testsuite/gdb.mi/mi-nsthrexec.exp
index 921fcf0..28ca7fc 100644
--- a/gdb/testsuite/gdb.mi/mi-nsthrexec.exp
+++ b/gdb/testsuite/gdb.mi/mi-nsthrexec.exp
@@ -39,11 +39,9 @@ if {[mi_gdb_start]} {
 #
 # Start here
 #
-set testfile "nsthrexec"
-set srcfile "$testfile.c"
-set binfile "$objdir/$subdir/mi-$testfile"
+standard_testfile nsthrexec.c
 
-set options [list debug incdir=$objdir]
+set options [list debug]
 if {[gdb_compile_pthreads "$srcdir/$subdir/$srcfile" $binfile executable $options] != "" } {
     return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-pending.exp b/gdb/testsuite/gdb.mi/mi-pending.exp
index f23df3e..f39ab71 100644
--- a/gdb/testsuite/gdb.mi/mi-pending.exp
+++ b/gdb/testsuite/gdb.mi/mi-pending.exp
@@ -16,10 +16,6 @@
 load_lib mi-support.exp
 set MIFLAGS "-i=mi"
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 #
 # test running programs
 #
@@ -28,21 +24,17 @@ if {[skip_shlib_tests]} {
     return 0
 }
 
-set testfile "mi-pending"
-set libfile "mi-pendshr"
-set srcfile $testfile.c
-set libsrc  $srcdir/$subdir/$libfile.c
-set binfile $objdir/$subdir/$testfile
-set lib_sl  $objdir/$subdir/$libfile.sl
+standard_testfile mi-pending.c mi-pendshr.c
+set lib_sl [standard_output_file mi-pendshr.sl]
 
 set lib_opts  debug
 set exec_opts [list debug shlib=$lib_sl]
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
-if { [gdb_compile_shlib $libsrc $lib_sl $lib_opts] != ""
+if { [gdb_compile_shlib $srcdir/$subdir/$srcfile2 $lib_sl $lib_opts] != ""
      || [gdb_compile $srcdir/$subdir/$srcfile $binfile executable $exec_opts] != ""} {
     untested "Could not compile either $libsrc or $srcdir/$subdir/$srcfile."
     return -1
@@ -56,10 +48,6 @@ mi_gdb_reinitialize_dir $srcdir/$subdir
 mi_gdb_load ${binfile}
 mi_load_shlibs $lib_sl
 
-if [target_info exists gdb_stub] {
-    gdb_step_for_stub;
-}
-
 # Set pending breakpoint via MI
 mi_gdb_test "-break-insert -f pendfunc1" \
     ".*\\^done,bkpt=\{number=\"1\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"<PENDING>\",pending=\"pendfunc1\",times=\"0\",original-location=\"pendfunc1\"\}"\
diff --git a/gdb/testsuite/gdb.mi/mi-pthreads.exp b/gdb/testsuite/gdb.mi/mi-pthreads.exp
index 458d3fb..d30e0f2 100644
--- a/gdb/testsuite/gdb.mi/mi-pthreads.exp
+++ b/gdb/testsuite/gdb.mi/mi-pthreads.exp
@@ -61,11 +61,9 @@ proc check_mi_thread_command_set {} {
 #
 # Start here
 #
-set testfile "pthreads"
-set srcfile "$testfile.c"
-set binfile "$objdir/$subdir/mi-$testfile"
+standard_testfile pthreads.c
 
-set options [list debug incdir=$objdir]
+set options [list debug]
 if {[gdb_compile_pthreads "$srcdir/$subdir/$srcfile" $binfile executable $options] != "" } {
     return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-read-memory.exp b/gdb/testsuite/gdb.mi/mi-read-memory.exp
index 4773c6d..5d154ba 100644
--- a/gdb/testsuite/gdb.mi/mi-read-memory.exp
+++ b/gdb/testsuite/gdb.mi/mi-read-memory.exp
@@ -33,10 +33,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "mi-read-memory"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi-read-memory.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-regs.exp b/gdb/testsuite/gdb.mi/mi-regs.exp
index e6b2b48..988f0c5 100644
--- a/gdb/testsuite/gdb.mi/mi-regs.exp
+++ b/gdb/testsuite/gdb.mi/mi-regs.exp
@@ -30,10 +30,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi-regs
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi-regs.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-return.exp b/gdb/testsuite/gdb.mi/mi-return.exp
index b46f156..e6b4e61 100644
--- a/gdb/testsuite/gdb.mi/mi-return.exp
+++ b/gdb/testsuite/gdb.mi/mi-return.exp
@@ -31,10 +31,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi-return
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi-return.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-reverse.exp b/gdb/testsuite/gdb.mi/mi-reverse.exp
index 08025bd..f65493d 100644
--- a/gdb/testsuite/gdb.mi/mi-reverse.exp
+++ b/gdb/testsuite/gdb.mi/mi-reverse.exp
@@ -1,173 +1,172 @@
-# Copyright 2009, 2011-2012 Free Software Foundation, Inc.
-
-# 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 3 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, see <http://www.gnu.org/licenses/>.
-
-# Test Machine interface (MI) operations
-# Verify that, using the MI, we can run a simple program in both forward
-# and reverse directions with the following execution commands:
-# - exec-continue
-# - exec-finish
-# - exec-next
-# - exec-step
-# - exec-next-instruction
-# - exec-step-instruction
-
-# The goal is not to test gdb functionality, which is done by other tests,
-# but to verify the correct output response to MI operations.
-#
-
-if ![target_info exists gdb,can_reverse] {
-    return
-}
-
-load_lib mi-support.exp
-set MIFLAGS "-i=mi"
-
-gdb_exit
-if [mi_gdb_start] {
-    continue
-}
-
-set testfile mi-reverse
-set srcfile basics.c
-set binfile ${objdir}/${subdir}/mi2-reverse
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
-     untested ${testfile}.exp
-     return -1
-}
-
-mi_run_to_main
-
-if [target_info exists gdb,use_precord] {
-    # Activate process record/replay
-    if [mi_gdb_test "-interpreter-exec console record" \
-	{\^done} "Turn on process record"] {
-	warning "Fail to activate process record/replay, tests in this group will not be performed.\n";
-	return -1
-    }
-}
-
-# Locate line numbers in basics.c.
-set line_callee4_head  [gdb_get_line_number "callee4 ("]
-set line_callee4_body  [expr $line_callee4_head + 2]
-set line_callee3_head  [gdb_get_line_number "callee3 ("]
-set line_callee3_body  [expr $line_callee3_head + 2]
-set line_callee3_close [expr $line_callee3_head + 3]
-set line_callee2_head  [gdb_get_line_number "callee2 ("]
-set line_callee2_body  [expr $line_callee2_head + 2]
-set line_callee2_close [expr $line_callee2_head + 3]
-set line_callee1_head  [gdb_get_line_number "callee1 ("]
-set line_callee1_body  [expr $line_callee1_head + 2]
-set line_callee1_close [expr $line_callee1_head + 3]
-set line_callme_head   [gdb_get_line_number "callme"]
-set line_callme_body   [expr $line_callme_head + 2]
-set line_main_head     [gdb_get_line_number "main ("]
-set line_main_body     [expr $line_main_head + 2]
-set line_main_hello    [gdb_get_line_number "Hello, World!"]
-set line_main_callme_1 [gdb_get_line_number "callme (1"]
-
-# Forward execute to the callme() function, so that we can
-# execute backward from there.
-mi_continue_to callme
-mi_delete_breakpoints
-
-proc test_controlled_execution_reverse {} {
-    global mi_gdb_prompt
-    global srcfile
-    global hex
-
-    global line_callee4_head line_callee4_body
-    global line_callee3_head line_callee3_body line_callee3_close
-    global line_callee2_head line_callee2_body line_callee2_close
-    global line_callee1_head line_callee1_body line_callee1_close
-    global line_main_head    line_main_body
-    global line_main_hello   line_main_callme_1
-
-    # Test exec-reverse-finish
-
-    mi_execute_to "exec-finish --reverse" \
-	"end-stepping-range" "main" "" \
-	"basics.c" $line_main_callme_1 "" \
-	"reverse finish from callme"
-
-    # Test exec-reverse-next
-    #   It takes two steps to get back to the previous line,
-    #   as the first step moves us to the start of the current line,
-    #   and the one after that moves back to the previous line.
-
-    mi_execute_to "exec-next --reverse 2" \
- 	"end-stepping-range" "main" "" \
- 	"basics.c" $line_main_hello "" \
- 	"reverse next to get over the call to do_nothing"
-
-    # Test exec-reverse-step
-
-    mi_execute_to "exec-step --reverse" \
- 	"end-stepping-range" "callee1" \
-	"\{name=\"intarg\",value=\"2\"\},\{name=\"strarg\",value=\"$hex \\\\\"A string argument\.\\\\\"\"\},\{name=\"fltarg\",value=\"3.5\"\}" \
- 	"basics.c" $line_callee1_close "" \
- 	"reverse step to callee1"
-
-    mi_execute_to "exec-step --reverse" \
- 	"end-stepping-range" "callee2" \
-	"\{name=\"intarg\",value=\"2\"\},\{name=\"strarg\",value=\"$hex \\\\\"A string argument\.\\\\\"\"\}" \
- 	"basics.c" $line_callee2_close "" \
- 	"reverse step to callee2"
-
-    mi_execute_to "exec-step --reverse" \
- 	"end-stepping-range" "callee3" \
-	"\{name=\"strarg\",value=\"$hex \\\\\"A string argument\.\\\\\"\"\}" \
- 	"basics.c" $line_callee3_close "" \
- 	"reverse step to callee3"
-
-    mi_execute_to "exec-step --reverse" \
- 	"end-stepping-range" "callee4" "" \
- 	"basics.c" "\[0-9\]+" "" \
- 	"reverse step to callee4"
-
-    # Test exec-reverse-[step|next]-instruction
-
-    mi_execute_to "exec-step-instruction --reverse" \
-        "end-stepping-range" "callee4" "" \
-        "basics.c" "\[0-9\]+" "" \
-        "reverse-step-instruction at callee4"
-
-    mi_execute_to "exec-next-instruction --reverse" \
-        "end-stepping-range" "callee4" "" \
-        "basics.c" "\[0-9\]+" "" \
-        "reverse-next-instruction at callee4"
-
-    # Test exec-reverse-continue
-
-    mi_create_breakpoint "-t basics.c:$line_callee3_head" \
-	3 del callee3 ".*basics.c" $line_callee3_head $hex \
-	"insert temp breakpoint at basics.c:$line_callee3_head"
-
-    mi_execute_to "exec-continue --reverse" \
-        "breakpoint-hit" "callee3" \
-	"\{name=\"strarg\",value=\"$hex \\\\\"A string argument\.\\\\\"\"\}" \
-        "basics.c" "\[0-9\]+" \
-	{ "" "disp=\"del\""} \
-        "reverse-continue at callee3"
-
-    mi_execute_to "exec-continue --reverse" \
-        "" "main" "" \
-        "basics.c" $line_main_body "" \
-        "reverse-continue at main"
-}
-
-test_controlled_execution_reverse
-
-mi_gdb_exit
-return 0
+# Copyright 2009, 2011-2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Test Machine interface (MI) operations
+# Verify that, using the MI, we can run a simple program in both forward
+# and reverse directions with the following execution commands:
+# - exec-continue
+# - exec-finish
+# - exec-next
+# - exec-step
+# - exec-next-instruction
+# - exec-step-instruction
+
+# The goal is not to test gdb functionality, which is done by other tests,
+# but to verify the correct output response to MI operations.
+#
+
+if ![supports_reverse] {
+    return
+}
+
+load_lib mi-support.exp
+set MIFLAGS "-i=mi"
+
+gdb_exit
+if [mi_gdb_start] {
+    continue
+}
+
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+     untested ${testfile}.exp
+     return -1
+}
+
+mi_run_to_main
+
+if [supports_process_record] {
+    # Activate process record/replay
+    if [mi_gdb_test "-interpreter-exec console record" \
+	{\^done} "Turn on process record"] {
+	warning "Fail to activate process record/replay, tests in this group will not be performed.\n";
+	return -1
+    }
+}
+
+# Locate line numbers in basics.c.
+set line_callee4_head  [gdb_get_line_number "callee4 ("]
+set line_callee4_body  [expr $line_callee4_head + 2]
+set line_callee3_head  [gdb_get_line_number "callee3 ("]
+set line_callee3_body  [expr $line_callee3_head + 2]
+set line_callee3_close [expr $line_callee3_head + 3]
+set line_callee2_head  [gdb_get_line_number "callee2 ("]
+set line_callee2_body  [expr $line_callee2_head + 2]
+set line_callee2_close [expr $line_callee2_head + 3]
+set line_callee1_head  [gdb_get_line_number "callee1 ("]
+set line_callee1_body  [expr $line_callee1_head + 2]
+set line_callee1_close [expr $line_callee1_head + 3]
+set line_callme_head   [gdb_get_line_number "callme"]
+set line_callme_body   [expr $line_callme_head + 2]
+set line_main_head     [gdb_get_line_number "main ("]
+set line_main_body     [expr $line_main_head + 2]
+set line_main_hello    [gdb_get_line_number "Hello, World!"]
+set line_main_callme_1 [gdb_get_line_number "callme (1"]
+
+# Forward execute to the callme() function, so that we can
+# execute backward from there.
+mi_continue_to callme
+mi_delete_breakpoints
+
+proc test_controlled_execution_reverse {} {
+    global mi_gdb_prompt
+    global srcfile
+    global hex
+
+    global line_callee4_head line_callee4_body
+    global line_callee3_head line_callee3_body line_callee3_close
+    global line_callee2_head line_callee2_body line_callee2_close
+    global line_callee1_head line_callee1_body line_callee1_close
+    global line_main_head    line_main_body
+    global line_main_hello   line_main_callme_1
+
+    # Test exec-reverse-finish
+
+    mi_execute_to "exec-finish --reverse" \
+	"end-stepping-range" "main" "" \
+	"basics.c" $line_main_callme_1 "" \
+	"reverse finish from callme"
+
+    # Test exec-reverse-next
+    #   It takes two steps to get back to the previous line,
+    #   as the first step moves us to the start of the current line,
+    #   and the one after that moves back to the previous line.
+
+    mi_execute_to "exec-next --reverse 2" \
+ 	"end-stepping-range" "main" "" \
+ 	"basics.c" $line_main_hello "" \
+ 	"reverse next to get over the call to do_nothing"
+
+    # Test exec-reverse-step
+
+    mi_execute_to "exec-step --reverse" \
+ 	"end-stepping-range" "callee1" \
+	"\{name=\"intarg\",value=\"2\"\},\{name=\"strarg\",value=\"$hex \\\\\"A string argument\.\\\\\"\"\},\{name=\"fltarg\",value=\"3.5\"\}" \
+ 	"basics.c" $line_callee1_close "" \
+ 	"reverse step to callee1"
+
+    mi_execute_to "exec-step --reverse" \
+ 	"end-stepping-range" "callee2" \
+	"\{name=\"intarg\",value=\"2\"\},\{name=\"strarg\",value=\"$hex \\\\\"A string argument\.\\\\\"\"\}" \
+ 	"basics.c" $line_callee2_close "" \
+ 	"reverse step to callee2"
+
+    mi_execute_to "exec-step --reverse" \
+ 	"end-stepping-range" "callee3" \
+	"\{name=\"strarg\",value=\"$hex \\\\\"A string argument\.\\\\\"\"\}" \
+ 	"basics.c" $line_callee3_close "" \
+ 	"reverse step to callee3"
+
+    mi_execute_to "exec-step --reverse" \
+ 	"end-stepping-range" "callee4" "" \
+ 	"basics.c" "\[0-9\]+" "" \
+ 	"reverse step to callee4"
+
+    # Test exec-reverse-[step|next]-instruction
+
+    mi_execute_to "exec-step-instruction --reverse" \
+        "end-stepping-range" "callee4" "" \
+        "basics.c" "\[0-9\]+" "" \
+        "reverse-step-instruction at callee4"
+
+    mi_execute_to "exec-next-instruction --reverse" \
+        "end-stepping-range" "callee4" "" \
+        "basics.c" "\[0-9\]+" "" \
+        "reverse-next-instruction at callee4"
+
+    # Test exec-reverse-continue
+
+    mi_create_breakpoint "-t basics.c:$line_callee3_head" \
+	3 del callee3 ".*basics.c" $line_callee3_head $hex \
+	"insert temp breakpoint at basics.c:$line_callee3_head"
+
+    mi_execute_to "exec-continue --reverse" \
+        "breakpoint-hit" "callee3" \
+	"\{name=\"strarg\",value=\"$hex \\\\\"A string argument\.\\\\\"\"\}" \
+        "basics.c" "\[0-9\]+" \
+	{ "" "disp=\"del\""} \
+        "reverse-continue at callee3"
+
+    mi_execute_to "exec-continue --reverse" \
+        "" "main" "" \
+        "basics.c" $line_main_body "" \
+        "reverse-continue at main"
+}
+
+test_controlled_execution_reverse
+
+mi_gdb_exit
+return 0
diff --git a/gdb/testsuite/gdb.mi/mi-simplerun.exp b/gdb/testsuite/gdb.mi/mi-simplerun.exp
index 2b74089..a20d088 100644
--- a/gdb/testsuite/gdb.mi/mi-simplerun.exp
+++ b/gdb/testsuite/gdb.mi/mi-simplerun.exp
@@ -32,10 +32,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi-simplerun
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi-simplerun.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-solib.exp b/gdb/testsuite/gdb.mi/mi-solib.exp
index 8e99f90..cec4b84 100644
--- a/gdb/testsuite/gdb.mi/mi-solib.exp
+++ b/gdb/testsuite/gdb.mi/mi-solib.exp
@@ -26,22 +26,22 @@ if [mi_gdb_start] {
     continue
 }
 
+standard_testfile solib-main.c solib-lib.c
+
 set libname "solib-lib"
-set srcfile_lib ${srcdir}/${subdir}/${libname}.c
-set binfile_lib ${objdir}/${subdir}/${libname}.so
+set srcfile_lib ${srcdir}/${subdir}/$srcfile2
+set binfile_lib [standard_output_file ${libname}.so]
 set lib_flags [list debug]
 
-set testfile "solib-main"
-set srcfile ${srcdir}/${subdir}/${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+set srcfile_main ${srcdir}/${subdir}/$srcfile
 set bin_flags [list debug shlib=${binfile_lib}]
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
 if { [gdb_compile_shlib ${srcfile_lib} ${binfile_lib} $lib_flags] != ""
-     || [gdb_compile ${srcfile} ${binfile} executable $bin_flags] != "" } {
+     || [gdb_compile ${srcfile_main} ${binfile} executable $bin_flags] != "" } {
   untested "Could not compile $binfile_lib or $binfile."
   return -1
 }
@@ -59,4 +59,9 @@ mi_gdb_test "777-gdb-set stop-on-solib-events 1" "777\\^done" \
 # We use "run" rather than "-exec-run" here in order to test that CLI
 # commands still cause the correct MI output to be generated.
 mi_run_with_cli
+
+global async
+if { $async } {
+    setup_kfail gdb/13860 *-*-*
+}
 mi_expect_stop solib-event .* .* .* .* .* "check for solib event"
diff --git a/gdb/testsuite/gdb.mi/mi-stack.exp b/gdb/testsuite/gdb.mi/mi-stack.exp
index 6c0d625..d743c68 100644
--- a/gdb/testsuite/gdb.mi/mi-stack.exp
+++ b/gdb/testsuite/gdb.mi/mi-stack.exp
@@ -31,10 +31,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "mi-stack"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi-stack.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-stepi.exp b/gdb/testsuite/gdb.mi/mi-stepi.exp
index 10e12be..245dc1c 100644
--- a/gdb/testsuite/gdb.mi/mi-stepi.exp
+++ b/gdb/testsuite/gdb.mi/mi-stepi.exp
@@ -31,10 +31,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi-stepi
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi-stepi.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-stepn.c b/gdb/testsuite/gdb.mi/mi-stepn.c
new file mode 100644
index 0000000..b8663d9
--- /dev/null
+++ b/gdb/testsuite/gdb.mi/mi-stepn.c
@@ -0,0 +1,32 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see  <http://www.gnu.org/licenses/>.
+*/
+
+void
+do_nothing (void)
+{
+}
+
+int
+main ()
+{
+  int i;
+
+  for (i = 0; i < 2; i++)
+    do_nothing ();
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.mi/mi-stepn.exp b/gdb/testsuite/gdb.mi/mi-stepn.exp
new file mode 100644
index 0000000..4333cfe
--- /dev/null
+++ b/gdb/testsuite/gdb.mi/mi-stepn.exp
@@ -0,0 +1,43 @@
+# Copyright 2011-2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Verify that when "-exec-step N" trips on a breakpoint, we get a
+# *stop event with reason breakpoint-hit.
+
+load_lib mi-support.exp
+set MIFLAGS "-i=mi"
+
+gdb_exit
+if [mi_gdb_start] {
+    continue
+}
+
+standard_testfile
+
+set opts {debug}
+if [build_executable ${testfile}.exp ${testfile} ${srcfile} $opts] {
+    return -1
+}
+
+if {[mi_run_to_main] < 0} {
+    return -1
+}
+
+mi_create_breakpoint do_nothing 2 keep do_nothing .* .* .* \
+    "breakpoint at do_nothing"
+
+mi_send_resuming_command "exec-step 3" ""
+mi_expect_stop "breakpoint-hit" "do_nothing" "\[^\n\]*" "$srcfile" \
+    "\[0-9\]*" {"" "disp=\"keep\""} "breakpoint-hit reported"
diff --git a/gdb/testsuite/gdb.mi/mi-syn-frame.exp b/gdb/testsuite/gdb.mi/mi-syn-frame.exp
index 17a76be..a19deb9 100644
--- a/gdb/testsuite/gdb.mi/mi-syn-frame.exp
+++ b/gdb/testsuite/gdb.mi/mi-syn-frame.exp
@@ -24,10 +24,9 @@ if [target_info exists gdb,nosignals] {
 load_lib mi-support.exp
 set MIFLAGS "-i=mi"
 
-set testfile "mi-syn-frame"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi-syn-frame.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-until.exp b/gdb/testsuite/gdb.mi/mi-until.exp
index 6caf0a0..a1c97b1 100644
--- a/gdb/testsuite/gdb.mi/mi-until.exp
+++ b/gdb/testsuite/gdb.mi/mi-until.exp
@@ -30,10 +30,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "until"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile until.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi-until.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-var-block.exp b/gdb/testsuite/gdb.mi/mi-var-block.exp
index a362d64..e2eb42f 100644
--- a/gdb/testsuite/gdb.mi/mi-var-block.exp
+++ b/gdb/testsuite/gdb.mi/mi-var-block.exp
@@ -27,10 +27,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "var-cmd"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi-var-block
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile var-cmd.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     untested mi-var-block.exp
     return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-var-child-f.exp b/gdb/testsuite/gdb.mi/mi-var-child-f.exp
index 9383f50..052d7e2 100644
--- a/gdb/testsuite/gdb.mi/mi-var-child-f.exp
+++ b/gdb/testsuite/gdb.mi/mi-var-child-f.exp
@@ -25,9 +25,8 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "array"
-set srcfile ${testfile}.f
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile array.f
+
 if {[gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
 	 executable {debug f77}] != ""} {
     return -1
diff --git a/gdb/testsuite/gdb.mi/mi-var-child.exp b/gdb/testsuite/gdb.mi/mi-var-child.exp
index 7e58ad7..1d72311 100644
--- a/gdb/testsuite/gdb.mi/mi-var-child.exp
+++ b/gdb/testsuite/gdb.mi/mi-var-child.exp
@@ -28,10 +28,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "mi-var-child"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     untested mi-var-child.exp
     return -1
 }
@@ -808,9 +807,9 @@ mi_list_varobj_children {struct_declarations --simple-values} \
          {struct_declarations.long_array long_array 12 "long int \\[12\\]"} \
          [list struct_declarations.func_ptr func_ptr 0 "void \\(\\*\\)\\((void)?\\)" "(@$hex: |)$hex <nothing>"] \
          {struct_declarations.func_ptr_struct func_ptr_struct 0 \
-              "struct _struct_decl \\(\\*\\)(\\(int, char \\*, long int\\))?" 0} \
+              "struct _struct_decl \\(\\*\\)(\\(int, char \\*, long int\\))?" 0x0} \
          {struct_declarations.func_ptr_ptr func_ptr_ptr 0 \
-              "struct _struct_decl \\*\\(\\*\\)\\((int, char \\*, long int)?\\)" 0} \
+              "struct _struct_decl \\*\\(\\*\\)\\((int, char \\*, long int)?\\)" 0x0} \
          {struct_declarations.u1 u1 4 "union \\{\\.\\.\\.\\}"} \
          {struct_declarations.s2 s2 4 "struct \\{\\.\\.\\.\\}"} \
 ] "listing of children, simple types: names, type and values, complex types: names and types"
diff --git a/gdb/testsuite/gdb.mi/mi-var-cmd.exp b/gdb/testsuite/gdb.mi/mi-var-cmd.exp
index f3ee77a..4c560a7 100644
--- a/gdb/testsuite/gdb.mi/mi-var-cmd.exp
+++ b/gdb/testsuite/gdb.mi/mi-var-cmd.exp
@@ -28,10 +28,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "var-cmd"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi-var-cmd
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile var-cmd.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     untested mi-var-cmd.exp
     return -1
 }
@@ -377,11 +376,11 @@ mi_gdb_test "-var-update *" \
 	"assign same value to func (update)"
 
 mi_gdb_test "-var-create array_ptr * array_ptr" \
-	"\\^done,name=\"array_ptr\",numchild=\"1\",value=\"$hex\",type=\"int \\*\",has_more=\"0\"" \
+	"\\^done,name=\"array_ptr\",numchild=\"1\",value=\"$hex <array>\",type=\"int \\*\",has_more=\"0\"" \
 	"create global variable array_ptr"
 
 mi_gdb_test "-var-assign array_ptr array2" \
-	"\\^done,value=\"$hex\"" \
+	"\\^done,value=\"$hex <array2>\"" \
 	"assign array to pointer"
 
 mi_gdb_test "-var-update *" \
@@ -389,7 +388,7 @@ mi_gdb_test "-var-update *" \
 	"assign array to pointer (update)"
 
 mi_gdb_test "-var-assign array_ptr array2" \
-	"\\^done,value=\"$hex\"" \
+	"\\^done,value=\"$hex <array2>\"" \
 	"assign same array to pointer"
 
 mi_gdb_test "-var-update *" \
diff --git a/gdb/testsuite/gdb.mi/mi-var-cp.cc b/gdb/testsuite/gdb.mi/mi-var-cp.cc
index f23913b..abdee9f 100644
--- a/gdb/testsuite/gdb.mi/mi-var-cp.cc
+++ b/gdb/testsuite/gdb.mi/mi-var-cp.cc
@@ -205,6 +205,51 @@ int path_expression ()
   /*: END: path_expression :*/
 }
 
+class Anonymous
+{
+public:
+  struct { /* index: 0 */
+    int b;
+  };
+  struct { /* index: 1 */
+    int c;
+  };
+  struct { /* index: 2 */
+    int d;
+    struct { /* index: 1 */
+      int e;
+      struct { /* index: 0 */
+        int f;
+        union { /* index: 0 */
+          int g;
+          char h;
+        };
+      };
+      union { /* index: 0 */
+        int i;
+        char j;
+      };
+    };
+  };
+};
+
+/* Test anonymous structs and unions.  */
+int
+anonymous_structs_and_unions (void)
+{
+  Anonymous a;
+  a.b = 1;
+  a.c = 2;
+  a.d = 3;
+  a.e = 4;
+  a.f = 5;
+  a.g = 6;
+  a.h = '7';
+  a.i = 8;
+  a.j = '8';
+  return 0;  /* anonymous_structs_and_unions */
+}
+
 int main ()
 {
   reference_update_tests ();
@@ -212,5 +257,6 @@ int main ()
   reference_to_pointer ();
   reference_to_struct ();
   path_expression ();
+  anonymous_structs_and_unions ();
   return 0;
 }
diff --git a/gdb/testsuite/gdb.mi/mi-var-cp.exp b/gdb/testsuite/gdb.mi/mi-var-cp.exp
index 01204e4..0ce4c40 100644
--- a/gdb/testsuite/gdb.mi/mi-var-cp.exp
+++ b/gdb/testsuite/gdb.mi/mi-var-cp.exp
@@ -23,11 +23,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile mi-var-cp
-set srcfile "$testfile.cc"
-set binfile $objdir/$subdir/$testfile
+standard_testfile .cc
 
-if [get_compiler_info ${binfile} "c++"] {
+if [get_compiler_info "c++"] {
     return -1;
 }
 
@@ -46,5 +44,78 @@ mi_run_inline_test reference_to_pointer
 mi_run_inline_test reference_to_struct
 mi_run_inline_test path_expression
 
+set lineno [gdb_get_line_number "/* anonymous_structs_and_unions */"]
+mi_create_breakpoint \
+    "$srcfile:$lineno" {[0-9]+} keep {anonymous_structs_and_unions\(\)} \
+    ".*mi-var-cp.cc" $lineno $hex "break in anonymous_structs_and_unions"
+mi_execute_to "exec-continue" "breakpoint-hit" \
+    "anonymous_structs_and_unions" "" ".*" ".*" {"" "disp=\"keep\""} \
+    "continue to anonymous_structs breakpoint"
+
+set tree {
+  Anonymous a {
+    {} public {
+      anonymous struct {
+        {} public {
+          int b {}
+        }
+      }
+      anonymous struct {
+        {} public {
+          int c {}
+        }
+      }
+      anonymous struct {
+        {} public {
+          int d {}
+          anonymous struct {
+            {} public {
+              int e {}
+              anonymous struct {
+                {} public {
+                  int f {}
+                  anonymous union {
+                    {} public {
+                      int g {}
+                      char h {}
+                    }
+                  }
+                }
+              }
+	      anonymous union {
+		{} public {
+		  int i {}
+		  char j {}
+		}
+	      }
+	    }
+	  }
+	}
+      }
+    }
+  }
+}
+
+proc verify_everything {variable_name} {
+  # Test -var-list-children
+  mi_varobj_tree_test_children_callback $variable_name
+
+  # Bring the variable named by VARIABLE_NAME into the current scope
+  # in VAROBJ.
+  upvar #0 $variable_name varobj
+
+  # Test -var-info-path-expression
+  mi_gdb_test "-var-info-path-expression $varobj(obj_name)" \
+      "\\^done,path_expr=\"[string_to_regexp $varobj(path_expr)]\"" \
+      "path expression for $varobj(obj_name)"
+
+  # Test -var-info-expression
+  mi_gdb_test "-var-info-expression $varobj(obj_name)" \
+      "\\^done,lang=\"C\\+\\+\",exp=\"[string_to_regexp $varobj(display_name)]\"" \
+      "expression for $varobj(obj_name)"
+}
+
+mi_walk_varobj_tree c++ $tree verify_everything
+
 mi_gdb_exit
 return 0
diff --git a/gdb/testsuite/gdb.mi/mi-var-display.exp b/gdb/testsuite/gdb.mi/mi-var-display.exp
index c508681..5cb5f26 100644
--- a/gdb/testsuite/gdb.mi/mi-var-display.exp
+++ b/gdb/testsuite/gdb.mi/mi-var-display.exp
@@ -27,10 +27,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "var-cmd"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi-var-display
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile var-cmd.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     untested mi-var-display.exp
     return -1
 }
@@ -286,7 +285,7 @@ mi_gdb_test "-var-set-format weird.func_ptr_struct hexadecimal" \
 	"set format variable weird.func_ptr_struct"
 
 mi_gdb_test "-var-set-format weird.func_ptr_ptr natural" \
-	"\\^done,format=\"natural\",value=\"0\"" \
+	"\\^done,format=\"natural\",value=\"0x0\"" \
 	"set format variable weird.func_ptr_ptr"
 
 mi_gdb_test "-var-set-format weird.u1 natural" \
@@ -614,9 +613,13 @@ mi_gdb_test "-var-create a1 * a" \
 	"\\^done,name=\"a1\",numchild=\"0\",value=\".*\",type=\"char\".*" \
 	"create local variable a1"
 
-mi_gdb_test "-var-create a2 $fp a" \
+if { [info exists fp] } {
+    mi_gdb_test "-var-create a2 $fp a" \
 	"\\^done,name=\"a2\",numchild=\"0\",value=\".*\",type=\"int\".*" \
 	"create variable a2 in different scope"
+} else {
+    untested "create variable a2 in different scope"
+}
 
 #gdbtk_test c_variable-7.81 {create variables in different scopes} {
 #  set a1 [gdb_variable create -expr a]
diff --git a/gdb/testsuite/gdb.mi/mi-var-invalidate.exp b/gdb/testsuite/gdb.mi/mi-var-invalidate.exp
index f389e32..3ecbbdf 100644
--- a/gdb/testsuite/gdb.mi/mi-var-invalidate.exp
+++ b/gdb/testsuite/gdb.mi/mi-var-invalidate.exp
@@ -28,24 +28,23 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "var-cmd"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi-var-invalidate
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile var-cmd.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     untested mi-var-invalidate.exp
     return -1
 }
 # Just change the output binary.
-set binfile_bis ${objdir}/${subdir}/mi-var-invalidate_bis
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile_bis}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+set binfile_bis [standard_output_file mi-var-invalidate_bis]
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile_bis}" executable {debug}] != "" } {
     untested mi-var-invalidate.exp
     return -1
 }
 
 set testfile2 "basics"
 set srcfile2 ${testfile2}.c
-set binfile2 ${objdir}/${subdir}/${testfile2}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+set binfile2 [standard_output_file ${testfile2}]
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" executable {debug}] != "" } {
     untested mi-var-invalidate.exp
     return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi-var-rtti.cc b/gdb/testsuite/gdb.mi/mi-var-rtti.cc
new file mode 100644
index 0000000..d05f660
--- /dev/null
+++ b/gdb/testsuite/gdb.mi/mi-var-rtti.cc
@@ -0,0 +1,360 @@
+/* Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.
+*/
+
+struct Base {
+    Base() : A(1) {}
+    virtual ~Base() {}  // Enforce type to have vtable
+    int A;
+};
+
+struct Derived : public Base {
+    Derived() : B(2), C(3) {}
+    int B;
+    int C;
+};
+
+
+void use_rtti_for_ptr_test ()
+{
+  /*: BEGIN: use_rtti_for_ptr :*/
+	Derived d;
+	Base* ptr = &d;
+	const Base* constPtr = &d;
+	Base* const ptrConst = &d;
+	Base const* const constPtrConst = &d;
+  /*:
+	set testname use_rtti_for_ptr
+	set_print_object off $testname
+	check_new_derived_without_rtti ptr {Base \*} $testname
+	check_new_derived_without_rtti constPtr {const Base \*} $testname
+	check_new_derived_without_rtti ptrConst {Base \* const} $testname
+	check_new_derived_without_rtti constPtrConst {const Base \* const} \
+		$testname
+
+	set_print_object on $testname
+	check_new_derived_with_rtti ptr {Derived \*} $testname
+	check_new_derived_with_rtti constPtr {const Derived \*} $testname
+	check_new_derived_with_rtti ptrConst {Derived \* const} $testname
+	check_new_derived_with_rtti constPtrConst {const Derived \* const} \
+		$testname
+  :*/
+	return;
+  /*: END: use_rtti_for_ptr :*/
+}
+
+
+void use_rtti_for_ref_test ()
+{
+  /*: BEGIN: use_rtti_for_ref :*/
+	Derived d;
+	Base& ref = d;
+	const Base& constRef = d;
+  /*: 
+	set testname use_rtti_for_ref
+	set_print_object off $testname
+	check_new_derived_without_rtti ref {Base \&} $testname
+	check_new_derived_without_rtti constRef {const Base \&} $testname
+
+	set_print_object on $testname
+	check_new_derived_with_rtti ref {Derived \&} $testname
+	check_new_derived_with_rtti constRef {const Derived \&} $testname
+  :*/
+	return;
+  /*: END: use_rtti_for_ref :*/
+}
+
+
+void use_rtti_for_ptr_child_test ()
+{
+  /*: BEGIN: use_rtti_for_ptr_child :*/
+	Derived d;
+	struct S {	
+		Base* ptr;
+		const Base* constPtr;
+		Base* const ptrConst;
+		Base const* const constPtrConst;
+		S ( Base* v ) :
+			ptr ( v ),
+			constPtr ( v ),
+			ptrConst ( v ),
+			constPtrConst ( v ) {}
+	} s ( &d );
+  /*: 
+	set testname use_rtti_for_ptr_child
+
+	set_print_object off $testname
+	mi_create_varobj VAR s "create varobj for s (without RTTI) in $testname"
+	mi_list_varobj_children VAR {
+	    { VAR.public public 4 }
+	} "list children of s (without RTTI) in $testname"
+	mi_list_varobj_children VAR.public {
+	    { VAR.public.ptr ptr 1 {Base \*} }
+	    { VAR.public.constPtr constPtr 1 {const Base \*} }
+	    { VAR.public.ptrConst ptrConst 1 {Base \* const} }
+	    { VAR.public.constPtrConst constPtrConst 1 {const Base \* const} }
+	} "list children of s.public (without RTTI) in $testname"
+	check_derived_without_rtti VAR.public.ptr s.ptr $testname
+	check_derived_without_rtti VAR.public.constPtr s.constPtr $testname
+	check_derived_without_rtti VAR.public.ptrConst s.ptrConst $testname
+	check_derived_without_rtti VAR.public.constPtrConst s.constPtrConst \
+		$testname
+	mi_delete_varobj VAR "delete varobj for s (without RTTI) in $testname"
+
+	set_print_object on $testname
+	mi_create_varobj VAR s "create varobj for s (with RTTI) in $testname"
+	mi_list_varobj_children VAR {
+	    { VAR.public public 4 }
+	} "list children of s (with RTTI) in $testname"
+	mi_list_varobj_children VAR.public {
+	    { VAR.public.ptr ptr 2 {Derived \*} }
+	    { VAR.public.constPtr constPtr 2 {const Derived \*} }
+	    { VAR.public.ptrConst ptrConst 2 {Derived \* const} }
+	    { VAR.public.constPtrConst constPtrConst 2 {const Derived \* const}}
+	} "list children of s.public (with RTTI) in $testname"
+	check_derived_with_rtti VAR.public.ptr s.ptr $testname
+	check_derived_with_rtti VAR.public.constPtr s.constPtr $testname
+	check_derived_with_rtti VAR.public.ptrConst s.ptrConst $testname
+	check_derived_with_rtti VAR.public.constPtrConst s.constPtrConst \
+		$testname
+	mi_delete_varobj VAR "delete varobj for s (with RTTI) in $testname"
+  :*/
+	return;
+  /*: END: use_rtti_for_ptr_child :*/
+}
+
+
+void use_rtti_for_ref_child_test ()
+{
+  /*: BEGIN: use_rtti_for_ref_child :*/
+	Derived d;
+	struct S {	
+		Base& ref;
+		const Base& constRef;
+		S ( Base& v ) :
+			ref ( v ),
+			constRef ( v ) {}
+	} s ( d );
+  /*: 
+	set testname use_rtti_for_ref_child
+
+	set_print_object off $testname
+	mi_create_varobj VAR s "create varobj for s (without RTTI) in $testname"
+	mi_list_varobj_children VAR {
+	    { VAR.public public 2 }
+	} "list children of s (without RTTI) in $testname"
+	mi_list_varobj_children VAR.public {
+	    { VAR.public.ref ref 1 {Base \&} }
+	    { VAR.public.constRef constRef 1 {const Base \&} }
+	} "list children of s.public (without RTTI) in $testname"
+	check_derived_without_rtti VAR.public.ref s.ref $testname
+	check_derived_without_rtti VAR.public.constRef s.constRef  $testname
+	mi_delete_varobj VAR "delete varobj for s (without RTTI) in $testname"
+
+	set_print_object on $testname
+	mi_create_varobj VAR s "create varobj for s (with RTTI) in $testname"
+	mi_list_varobj_children VAR {
+	    { VAR.public public 2 }
+	} "list children of s (with RTTI) in $testname"
+	mi_list_varobj_children VAR.public {
+	    { VAR.public.ref ref 2 {Derived \&} }
+	    { VAR.public.constRef constRef 2 {const Derived \&} }
+	} "list children of s.public (with RTTI) in $testname"
+	check_derived_with_rtti VAR.public.ref s.ref $testname
+	check_derived_with_rtti VAR.public.constRef s.constRef $testname
+	mi_delete_varobj VAR "delete varobj for s (with RTTI) in $testname"
+  :*/
+	return;
+  /*: END: use_rtti_for_ref_child :*/
+}
+
+
+struct First {
+    First() : F(-1) {}
+    int F;
+};
+
+
+struct MultipleDerived : public First, Base {
+    MultipleDerived() : B(2), C(3) {}
+    int B;
+    int C;
+};
+
+
+void use_rtti_with_multiple_inheritence_test ()
+{
+  /*: BEGIN: use_rtti_with_multiple_inheritence :*/
+	MultipleDerived d;
+	Base* ptr = &d;
+	Base& ref = d;
+  /*:
+	set testname use_rtti_with_multiple_inheritence
+	set_print_object off $testname
+	check_new_derived_without_rtti ptr {Base \*} $testname
+	check_new_derived_without_rtti ref {Base \&} $testname
+
+	set_print_object on $testname
+	mi_create_varobj_checked VAR ptr {MultipleDerived \*} \
+	    "create varobj for ptr (with RTTI) in $testname"
+	mi_list_varobj_children VAR {
+	    { VAR.First First 1 First }
+	    { VAR.Base Base 1 Base }
+	    { VAR.public public 2 }
+	} "list children of ptr (with RTTI) in $testname"
+	mi_list_varobj_children "VAR.First" {
+	    { VAR.First.public public 1 }
+	} "list children of ptr.First (with RTTI) in $testname"
+	mi_list_varobj_children "VAR.First.public" {
+	    { VAR.First.public.F F 0 int }
+	} "list children of ptr.Base.public (with RTTI) in $testname"
+	mi_list_varobj_children "VAR.Base" {
+	    { VAR.Base.public public 1 }
+	} "list children of ptr.Base (with RTTI) in $testname"
+	mi_list_varobj_children "VAR.Base.public" {
+	    { VAR.Base.public.A A 0 int }
+	} "list children of ptr.Base.public (with RTTI) in $testname"
+	mi_list_varobj_children "VAR.public" {
+	    { VAR.public.B B 0 int }
+	    { VAR.public.C C 0 int }
+	} "list children of ptr.public (with RTTI) in $testname"
+
+	mi_delete_varobj VAR \
+	    "delete varobj for ptr (with RTTI) in $testname"
+  :*/
+	return;
+  /*: END: use_rtti_with_multiple_inheritence :*/
+}
+
+
+void type_update_when_use_rtti_test ()
+{
+  /*: BEGIN: type_update_when_use_rtti :*/
+	Derived d;
+  /*: 
+	set testname type_update_when_use_rtti
+
+	set_print_object on $testname
+	mi_create_varobj_checked PTR ptr {Base \*} \
+		"create varobj for ptr in $testname"
+	check_derived_children_without_rtti PTR ptr $testname
+
+	mi_create_varobj S s "create varobj for S in $testname"
+	mi_list_varobj_children S {
+	    { S.public public 1 }
+	} "list children of s in $testname"
+	mi_list_varobj_children S.public {
+	    { S.public.ptr ptr 1 {Base \*} }
+	} "list children of s.public in $testname"
+	check_derived_children_without_rtti S.public.ptr s.ptr $testname
+  :*/
+
+	Base* ptr = &d;
+	struct S {
+		Base* ptr;
+		S ( Base* v ) :
+			ptr ( v ) {}
+	} s ( &d );
+  /*:
+	mi_varobj_update_with_type_change PTR {Derived \*} 2 \
+		"update ptr to derived in $testname"
+	check_derived_with_rtti PTR ptr $testname
+
+	mi_varobj_update_with_child_type_change S S.public.ptr {Derived \*} 2 \
+		"update s.ptr to derived in $testname"
+	check_derived_with_rtti S.public.ptr s.ptr $testname
+  :*/
+
+	ptr = 0;
+	s.ptr = 0;
+  /*:
+	mi_varobj_update_with_type_change PTR {Base \*} 1 \
+		"update ptr back to base type in $testname"
+	mi_delete_varobj PTR "delete varobj for ptr in $testname"
+
+	mi_varobj_update_with_child_type_change S S.public.ptr {Base \*} 1 \
+		"update s.ptr back to base type in $testname"
+	mi_delete_varobj S "delete varobj for s in $testname"
+  :*/
+	return;
+  /*: END: type_update_when_use_rtti :*/
+}
+
+
+void skip_type_update_when_not_use_rtti_test ()
+{
+  /*: BEGIN: skip_type_update_when_not_use_rtti :*/
+	Derived d;
+  /*: 
+	set testname skip_type_update_when_not_use_rtti
+
+	set_print_object off $testname
+	mi_create_varobj_checked PTR ptr {Base \*} \
+		"create varobj for ptr in $testname"
+	check_derived_children_without_rtti PTR ptr $testname
+
+	mi_create_varobj S s "create varobj for S in $testname"
+	mi_list_varobj_children S {
+	    { S.public public 1 }
+	} "list children of s in $testname"
+	mi_list_varobj_children S.public {
+	    { S.public.ptr ptr 1 {Base \*} }
+	} "list children of s.public in $testname"
+	check_derived_children_without_rtti S.public.ptr s.ptr $testname
+  :*/
+
+	Base* ptr = &d;
+	struct S {
+		Base* ptr;
+		S ( Base* v ) :
+			ptr ( v ) {}
+	} s ( &d );
+  /*: 
+	mi_varobj_update PTR {PTR PTR.public.A} \
+		"update ptr to derived type in $testname"
+	check_derived_without_rtti PTR ptr $testname
+
+	mi_varobj_update S {S.public.ptr S.public.ptr.public.A} \
+		"update s to derived type in $testname"
+	check_derived_without_rtti S.public.ptr s.ptr $testname
+  :*/
+
+	ptr = 0;
+	s.ptr = 0;
+  /*:
+	mi_varobj_update PTR {PTR  PTR.public.A} \
+		"update ptr back to base type in $testname"
+	mi_delete_varobj PTR "delete varobj for ptr in $testname"
+
+	mi_varobj_update S {S.public.ptr S.public.ptr.public.A} \
+		"update s back to base type in $testname"
+	mi_delete_varobj S "delete varobj for s in $testname"
+  :*/
+	return;
+  /*: END: skip_type_update_when_not_use_rtti :*/
+}
+
+
+int main ()
+{
+	use_rtti_for_ptr_test();
+	use_rtti_for_ref_test();
+	use_rtti_for_ptr_child_test();
+	use_rtti_for_ref_child_test();
+	use_rtti_with_multiple_inheritence_test();
+	type_update_when_use_rtti_test();
+	skip_type_update_when_not_use_rtti_test();
+	return 0;
+}
diff --git a/gdb/testsuite/gdb.mi/mi-var-rtti.exp b/gdb/testsuite/gdb.mi/mi-var-rtti.exp
new file mode 100644
index 0000000..a718ffb
--- /dev/null
+++ b/gdb/testsuite/gdb.mi/mi-var-rtti.exp
@@ -0,0 +1,121 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+if { [skip_cplus_tests] } { continue }
+
+load_lib mi-support.exp
+set MIFLAGS "-i=mi"
+
+gdb_exit
+if [mi_gdb_start] {
+    continue
+}
+
+standard_testfile .cc
+set opts {debug c++}
+
+if [build_executable $testfile.exp $testfile $srcfile $opts] {
+    return -1;
+}
+
+mi_gdb_load ${binfile}
+
+mi_prepare_inline_tests $srcfile
+
+# Enable using RTTI to determine real types of the objects
+proc set_print_object {state testname} {
+    mi_gdb_test "-interpreter-exec console \"set print object ${state}\"" \
+        {\^done} \
+        "-interpreter-exec console \"set print object ${state}\" in $testname"
+}
+
+proc check_derived_children_without_rtti {varobj_name var_name testname} {
+    mi_list_varobj_children ${varobj_name} "
+        { ${varobj_name}.public public 1 }
+    " "list children of ${var_name} (without RTTI) in $testname"
+    mi_list_varobj_children "${varobj_name}.public" "
+        { ${varobj_name}.public.A A 0 int }
+    " "list children of ${var_name}.public (without RTTI) in $testname"
+}
+
+proc check_derived_content_without_rtti {varobj_name var_name testname} {
+    mi_check_varobj_value ${varobj_name}.public.A 1 \
+        "check ${var_name}->A (without RTTI) in $testname"
+}
+
+proc check_derived_without_rtti {varobj_name var_name testname} {
+    check_derived_children_without_rtti ${varobj_name} ${var_name} ${testname}
+    check_derived_content_without_rtti ${varobj_name} ${var_name} ${testname}
+}
+
+proc check_new_derived_without_rtti {var_name var_type testname} {
+    set varobj_name VAR
+    mi_create_varobj_checked ${varobj_name} ${var_name} ${var_type} \
+        "create varobj for ${var_name} (without RTTI) in ${testname}"
+    check_derived_without_rtti ${varobj_name} ${var_name} ${testname}
+    mi_delete_varobj ${varobj_name} \
+        "delete varobj for ${var_name} (without RTTI) in ${testname}"
+}
+
+proc check_derived_children_with_rtti {varobj_name var_name testname} {
+    mi_list_varobj_children ${varobj_name} "
+        { ${varobj_name}.Base Base 1 Base }
+        { ${varobj_name}.public public 2 }
+    " "list children of ${var_name} (with RTTI) in $testname"
+    mi_list_varobj_children "${varobj_name}.Base" "
+        { ${varobj_name}.Base.public public 1 }
+    " "list children of ${var_name}.Base (with RTTI) in $testname"
+    mi_list_varobj_children "${varobj_name}.Base.public" "
+        { ${varobj_name}.Base.public.A A 0 int }
+    " "list children of ${var_name}.Base.public (with RTTI) in $testname"
+    mi_list_varobj_children "${varobj_name}.public" "
+        { ${varobj_name}.public.B B 0 int }
+        { ${varobj_name}.public.C C 0 int }
+    " "list children of ${var_name}.public (with RTTI) in $testname"
+}
+
+proc check_derived_content_with_rtti {varobj_name var_name testname} {
+    mi_check_varobj_value ${varobj_name}.Base.public.A 1 \
+        "check ${var_name}->A (with RTTI) in $testname"
+    mi_check_varobj_value ${varobj_name}.public.B 2 \
+        "check ${var_name}->B (with RTTI) in $testname"
+    mi_check_varobj_value ${varobj_name}.public.C 3 \
+        "check ${var_name}->C (with RTTI) in $testname"
+}
+
+proc check_derived_with_rtti {varobj_name var_name testname} {
+    check_derived_children_with_rtti ${varobj_name} ${var_name} $testname
+    check_derived_content_with_rtti ${varobj_name} ${var_name} $testname
+}
+
+proc check_new_derived_with_rtti {var_name var_type testname} {
+    set varobj_name VAR
+    mi_create_varobj_checked ${varobj_name} ${var_name} ${var_type} \
+        "create varobj for ${var_name} (with RTTI) in $testname"
+    check_derived_with_rtti ${varobj_name} ${var_name} $testname
+    mi_delete_varobj ${varobj_name} \
+        "delete varobj for ${var_name} (with RTTI) in $testname"
+}
+
+mi_run_inline_test use_rtti_for_ptr
+mi_run_inline_test use_rtti_for_ref
+mi_run_inline_test use_rtti_for_ptr_child
+mi_run_inline_test use_rtti_for_ref_child
+mi_run_inline_test use_rtti_with_multiple_inheritence
+mi_run_inline_test type_update_when_use_rtti
+mi_run_inline_test skip_type_update_when_not_use_rtti
+
+mi_gdb_exit
+return 0
diff --git a/gdb/testsuite/gdb.mi/mi-watch-nonstop.exp b/gdb/testsuite/gdb.mi/mi-watch-nonstop.exp
new file mode 100644
index 0000000..c61b519
--- /dev/null
+++ b/gdb/testsuite/gdb.mi/mi-watch-nonstop.exp
@@ -0,0 +1,75 @@
+#   Copyright 2011-2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+if [target_info exists gdb,no_hardware_watchpoints] {
+    return -1
+}
+
+if { ![support_displaced_stepping] } { 
+    unsupported "displaced stepping"
+    return -1
+}
+
+load_lib mi-support.exp
+set MIFLAGS "-i=mi"
+
+gdb_exit
+if {[mi_gdb_start]} {
+    continue
+}
+
+proc mi_nonstop_resume { command test } {
+    if { [mi_send_resuming_command $command $test] != 0 } {
+	# If a resume fails, assume non-stop is broken or unsupported
+	# for this target.  We have logged a FAIL or UNSUPPORTED; skip
+	# the remaining tests to limit timeouts.
+	return -code continue
+    }
+}
+
+#
+# Start here
+#
+standard_testfile watch-nonstop.c
+
+if {[gdb_compile "$srcdir/$subdir/$srcfile" $binfile executable {debug}] != "" } {
+    return -1
+}
+
+mi_gdb_reinitialize_dir $srcdir/$subdir
+mi_gdb_load $binfile
+
+mi_gdb_test "-gdb-set non-stop 1" ".*"
+mi_gdb_test "-gdb-set target-async 1" ".*"
+mi_detect_async
+
+if { [mi_run_to_main] < 0 } {
+    continue
+}
+
+# Set a watchpoint.
+mi_gdb_test "111-break-watch global" \
+    "111\\^done,wpt=\{number=\"2\",exp=\"global\"\}" \
+    "break-watch operation"
+
+# Set the target running.
+mi_nonstop_resume "exec-continue" "resume 1"
+
+# Now try deleting the watchpoint.  This would fail with "Couldn't
+# write debug register: No such process."  on GNU/Linux, because we'd
+# try to poke at the debug registers of a running thread.
+mi_gdb_test "777-break-delete 2" \
+    "777\\^done" \
+    "delete watchpoint"
diff --git a/gdb/testsuite/gdb.mi/mi-watch.exp b/gdb/testsuite/gdb.mi/mi-watch.exp
index bce4e88..5ccff51 100644
--- a/gdb/testsuite/gdb.mi/mi-watch.exp
+++ b/gdb/testsuite/gdb.mi/mi-watch.exp
@@ -33,10 +33,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi-watch
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi-watch.exp
      return -1
 }
@@ -147,15 +146,11 @@ proc test_watchpoint_triggering {type} {
     clear_xfail *-*-*
 }
 
-proc test_watchpoint_all {type} {
-    global pf_prefix
+proc test_watchpoint_all {type} { with_test_prefix "$type" {
     upvar srcdir srcdir
     upvar subdir subdir
     upvar binfile binfile
 
-    set old_prefix $pf_prefix
-    lappend pf_prefix "$type:"
-
     mi_delete_breakpoints
     mi_gdb_reinitialize_dir $srcdir/$subdir
     mi_gdb_load ${binfile}
@@ -165,9 +160,7 @@ proc test_watchpoint_all {type} {
     #test_rwatch_creation_and_listing $type
     #test_awatch_creation_and_listing $type
     test_watchpoint_triggering $type
-
-    set pf_prefix $old_prefix
-}
+}}
 
 # Run the tests twice, once using software watchpoints...
 mi_gdb_test "567-gdb-set can-use-hw-watchpoints 0" \
diff --git a/gdb/testsuite/gdb.mi/mi2-amd64-entry-value.exp b/gdb/testsuite/gdb.mi/mi2-amd64-entry-value.exp
index 12786bb..e7f1208 100644
--- a/gdb/testsuite/gdb.mi/mi2-amd64-entry-value.exp
+++ b/gdb/testsuite/gdb.mi/mi2-amd64-entry-value.exp
@@ -21,8 +21,7 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile mi2-amd64-entry-value
-set srcfile ${testfile}.s
+standard_testfile .s
 set opts {}
 
 if [info exists COMPILE] {
@@ -35,7 +34,6 @@ if [info exists COMPILE] {
 }
 
 set executable ${testfile}
-set binfile ${objdir}/${subdir}/${executable}
 
 if [build_executable ${testfile}.exp ${executable} ${srcfile} $opts] {
     return -1
diff --git a/gdb/testsuite/gdb.mi/mi2-basics.exp b/gdb/testsuite/gdb.mi/mi2-basics.exp
index 74fe3f6..3a54f99 100644
--- a/gdb/testsuite/gdb.mi/mi2-basics.exp
+++ b/gdb/testsuite/gdb.mi/mi2-basics.exp
@@ -33,13 +33,12 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi2-basics
+standard_testfile basics.c
+
 set escapedobjdir [string_to_regexp ${objdir}]
 set envirodir [string_to_regexp ${objdir}/${subdir}]
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi2-basics.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi2-break.exp b/gdb/testsuite/gdb.mi/mi2-break.exp
index c6acc7c..e1375e2 100644
--- a/gdb/testsuite/gdb.mi/mi2-break.exp
+++ b/gdb/testsuite/gdb.mi/mi2-break.exp
@@ -33,10 +33,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi2-break
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi2-break.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi2-cli.exp b/gdb/testsuite/gdb.mi/mi2-cli.exp
index 6e15da6..e84b191 100644
--- a/gdb/testsuite/gdb.mi/mi2-cli.exp
+++ b/gdb/testsuite/gdb.mi/mi2-cli.exp
@@ -27,10 +27,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi2-cli
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi2-cli.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi2-console.exp b/gdb/testsuite/gdb.mi/mi2-console.exp
index 36c098d..e1e180b 100644
--- a/gdb/testsuite/gdb.mi/mi2-console.exp
+++ b/gdb/testsuite/gdb.mi/mi2-console.exp
@@ -36,10 +36,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "mi-console"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile mi-console.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi2-console.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi2-disassemble.exp b/gdb/testsuite/gdb.mi/mi2-disassemble.exp
index f2e6d67..30e9129 100644
--- a/gdb/testsuite/gdb.mi/mi2-disassemble.exp
+++ b/gdb/testsuite/gdb.mi/mi2-disassemble.exp
@@ -28,10 +28,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi2-disassemble
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi2-disassemble.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi2-eval.exp b/gdb/testsuite/gdb.mi/mi2-eval.exp
index 564e617..cb82c73 100644
--- a/gdb/testsuite/gdb.mi/mi2-eval.exp
+++ b/gdb/testsuite/gdb.mi/mi2-eval.exp
@@ -30,10 +30,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi2-eval
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi2-eval.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi2-file.exp b/gdb/testsuite/gdb.mi/mi2-file.exp
index c19b0e0..56ad708 100644
--- a/gdb/testsuite/gdb.mi/mi2-file.exp
+++ b/gdb/testsuite/gdb.mi/mi2-file.exp
@@ -32,10 +32,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi2-file
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi2-file.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi2-prompt.exp b/gdb/testsuite/gdb.mi/mi2-prompt.exp
new file mode 100644
index 0000000..6145c38
--- /dev/null
+++ b/gdb/testsuite/gdb.mi/mi2-prompt.exp
@@ -0,0 +1,38 @@
+# Copyright 2011 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib mi-support.exp
+set MIFLAGS "-i=mi2"
+
+gdb_exit
+if [mi_gdb_start] {
+    continue
+}
+
+# Check console 'set prompt' does not affect the MI output.
+
+mi_gdb_test {-interpreter-exec console "set prompt (banana) "} {\^done} \
+	    "console set prompt"
+mi_gdb_test "-break-list" ".*}" "-break-list"
+
+gdb_exit
+gdb_start
+
+# Check 'set prompt' affects console output even for "interpreter-exec mi".
+
+set gdb_prompt {\(banana\)}
+gdb_test_no_output "set prompt (banana) "
+
+gdb_test "interpreter-exec mi -break-list" "\r\n\\^done,.*}"
diff --git a/gdb/testsuite/gdb.mi/mi2-pthreads.exp b/gdb/testsuite/gdb.mi/mi2-pthreads.exp
index 8acc7ce..37f325e 100644
--- a/gdb/testsuite/gdb.mi/mi2-pthreads.exp
+++ b/gdb/testsuite/gdb.mi/mi2-pthreads.exp
@@ -55,11 +55,9 @@ proc check_mi_thread_command_set {} {
 #
 # Start here
 #
-set testfile "pthreads"
-set srcfile "$testfile.c"
-set binfile "$objdir/$subdir/mi2-$testfile"
+standard_testfile pthreads.c
 
-set options [list debug incdir=$objdir]
+set options [list debug]
 if {[gdb_compile_pthreads "$srcdir/$subdir/$srcfile" $binfile executable $options] != "" } {
     return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi2-read-memory.exp b/gdb/testsuite/gdb.mi/mi2-read-memory.exp
index 39e23c6..17c9573 100644
--- a/gdb/testsuite/gdb.mi/mi2-read-memory.exp
+++ b/gdb/testsuite/gdb.mi/mi2-read-memory.exp
@@ -33,10 +33,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "mi-read-memory"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile mi-read-memory.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi2-read-memory.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi2-regs.exp b/gdb/testsuite/gdb.mi/mi2-regs.exp
index d9a63d1..8ddf894 100644
--- a/gdb/testsuite/gdb.mi/mi2-regs.exp
+++ b/gdb/testsuite/gdb.mi/mi2-regs.exp
@@ -30,10 +30,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi2-regs
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi2-regs.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi2-return.exp b/gdb/testsuite/gdb.mi/mi2-return.exp
index e16ae20..8d32e13 100644
--- a/gdb/testsuite/gdb.mi/mi2-return.exp
+++ b/gdb/testsuite/gdb.mi/mi2-return.exp
@@ -30,10 +30,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi2-return
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi2-return.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi2-simplerun.exp b/gdb/testsuite/gdb.mi/mi2-simplerun.exp
index 5e1a084..d4bbdab 100644
--- a/gdb/testsuite/gdb.mi/mi2-simplerun.exp
+++ b/gdb/testsuite/gdb.mi/mi2-simplerun.exp
@@ -32,10 +32,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi2-simplerun
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi2-simplerun.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi2-stack.exp b/gdb/testsuite/gdb.mi/mi2-stack.exp
index 031a90e..9b79f41 100644
--- a/gdb/testsuite/gdb.mi/mi2-stack.exp
+++ b/gdb/testsuite/gdb.mi/mi2-stack.exp
@@ -30,10 +30,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "mi-stack"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile mi-stack.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi2-stack.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi2-stepi.exp b/gdb/testsuite/gdb.mi/mi2-stepi.exp
index 56332db..d2cbb0b 100644
--- a/gdb/testsuite/gdb.mi/mi2-stepi.exp
+++ b/gdb/testsuite/gdb.mi/mi2-stepi.exp
@@ -30,10 +30,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi2-stepi
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi2-stepi.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi2-syn-frame.exp b/gdb/testsuite/gdb.mi/mi2-syn-frame.exp
index 0641cc3..9c24cca 100644
--- a/gdb/testsuite/gdb.mi/mi2-syn-frame.exp
+++ b/gdb/testsuite/gdb.mi/mi2-syn-frame.exp
@@ -24,10 +24,9 @@ if [target_info exists gdb,nosignals] {
 load_lib mi-support.exp
 set MIFLAGS "-i=mi2"
 
-set testfile "mi-syn-frame"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile mi-syn-frame.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi2-syn-frame.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi2-until.exp b/gdb/testsuite/gdb.mi/mi2-until.exp
index 3d663c8..e1abc4a 100644
--- a/gdb/testsuite/gdb.mi/mi2-until.exp
+++ b/gdb/testsuite/gdb.mi/mi2-until.exp
@@ -31,10 +31,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "until"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile until.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi2-until.exp
      return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi2-var-block.exp b/gdb/testsuite/gdb.mi/mi2-var-block.exp
index 3bd62a5..6999db6 100644
--- a/gdb/testsuite/gdb.mi/mi2-var-block.exp
+++ b/gdb/testsuite/gdb.mi/mi2-var-block.exp
@@ -27,10 +27,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "var-cmd"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi2-var-block
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile var-cmd.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     untested mi2-var-block.exp
     return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi2-var-child.exp b/gdb/testsuite/gdb.mi/mi2-var-child.exp
index 2e7b395..fdf12f7 100644
--- a/gdb/testsuite/gdb.mi/mi2-var-child.exp
+++ b/gdb/testsuite/gdb.mi/mi2-var-child.exp
@@ -27,10 +27,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "var-cmd"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi2-var-child
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile var-cmd.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     untested mi2-var-child.exp
     return -1
 }
@@ -1139,7 +1138,102 @@ mi_gdb_test "-var-update *" \
 	"update all vars psnp->next->next->long_ptr (and 2.long_ptr) changed"
 
 
+# Anonymous type tests
+proc verify_everything {variable_name} {
+  # Test -var-list-children
+  mi_varobj_tree_test_children_callback $variable_name
+
+  # Bring the variable named by VARIABLE_NAME into the current scope
+  # in VAROBJ.
+  upvar #0 $variable_name varobj
+
+  # Test -var-info-path-expression
+  mi_gdb_test "-var-info-path-expression $varobj(obj_name)" \
+      "\\^done,path_expr=\"[string_to_regexp $varobj(path_expr)]\"" \
+      "path expression for $varobj(obj_name)"
+
+  # Test -var-info-expression
+  mi_gdb_test "-var-info-expression $varobj(obj_name)" \
+      "\\^done,lang=\"C\",exp=\"[string_to_regexp $varobj(display_name)]\"" \
+      "expression for $varobj(obj_name)"
+}
+
+set lineno [gdb_get_line_number "anonymous type tests breakpoint"]
+mi_create_breakpoint \
+    "$srcfile:$lineno" {[0-9]+} keep {do_anonymous_type_tests} \
+    ".*var-cmd.c" $lineno $hex "break in do_anonymous_type_tests"
+mi_execute_to "exec-continue" "breakpoint-hit" "do_anonymous_type_tests" ""\
+    ".*" ".*" {"" "disp=\"keep\""} \
+    "continue to do_anonymous_type_tests breakpoint"
+
+# Run the varobj tree on variable "ptr".
+set tree {
+  {struct anonymous **} ptr {
+    {struct anonymous *} {*ptr} {
+      int a {}
+      anonymous struct {
+	int b {}
+	{char *} c {
+	  char {*c} {}
+	}
+	anonymous union {
+	  int d {}
+	  {void *} e {}
+	  char f {}
+	  anonymous struct {
+	    char g {}
+	    {const char **} h {
+	      {const char *} {*h} {
+		{const char} {**h} {}
+	      }
+	    }
+	    {simpleton ***} simple {
+	      {simpleton **} {*simple} {
+		{simpleton *} {**simple} {
+		  int integer {}
+		  {unsigned int} unsigned_integer {}
+		  char character {}
+		  {signed char} signed_character {}
+		  {char *} char_ptr {
+		    char {*char_ptr} {}
+		  }
+		  {int [10]} array_of_10 {
+		    int 0 {}
+		    int 1 {}
+		    int 2 {}
+		    int 3 {}
+		    int 4 {}
+		    int 5 {}
+		    int 6 {}
+		    int 7 {}
+		    int 8 {}
+		    int 9 {}
+		  }
+		}
+	      }
+	    }
+	  }
+	}
+      }
+    }
+  }
+}
+
+mi_walk_varobj_tree c $tree verify_everything
+
+set tree {
+  {struct {...}} v {
+    int x {}
+    anonymous struct {
+      int a {}
+    }
+    anonymous struct {
+      int b {}
+    }
+  }
+}
 
+mi_walk_varobj_tree c $tree verify_everything
 
 mi_gdb_exit
 return 0
diff --git a/gdb/testsuite/gdb.mi/mi2-var-cmd.exp b/gdb/testsuite/gdb.mi/mi2-var-cmd.exp
index dc26d65..5af2af8 100644
--- a/gdb/testsuite/gdb.mi/mi2-var-cmd.exp
+++ b/gdb/testsuite/gdb.mi/mi2-var-cmd.exp
@@ -27,10 +27,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "var-cmd"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi2-var-cmd
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile var-cmd.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     untested mi2-var-cmd.exp
     return -1
 }
diff --git a/gdb/testsuite/gdb.mi/mi2-var-display.exp b/gdb/testsuite/gdb.mi/mi2-var-display.exp
index f5c69ab..4bb1cd8 100644
--- a/gdb/testsuite/gdb.mi/mi2-var-display.exp
+++ b/gdb/testsuite/gdb.mi/mi2-var-display.exp
@@ -27,10 +27,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "var-cmd"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi2-var-display
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile var-cmd.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     untested mi2-var-display.exp
     return -1
 }
@@ -285,7 +284,7 @@ mi_gdb_test "-var-set-format weird.func_ptr_struct hexadecimal" \
 	"set format variable weird.func_ptr_struct"
 
 mi_gdb_test "-var-set-format weird.func_ptr_ptr natural" \
-	"\\^done,format=\"natural\",value=\"0\"" \
+	"\\^done,format=\"natural\",value=\"0x0\"" \
 	"set format variable weird.func_ptr_ptr"
 
 mi_gdb_test "-var-set-format weird.u1 natural" \
diff --git a/gdb/testsuite/gdb.mi/mi2-watch.exp b/gdb/testsuite/gdb.mi/mi2-watch.exp
index 3324ba8..5a56c8e 100644
--- a/gdb/testsuite/gdb.mi/mi2-watch.exp
+++ b/gdb/testsuite/gdb.mi/mi2-watch.exp
@@ -32,10 +32,9 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "basics"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/mi2-watch
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+standard_testfile basics.c
+
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested mi2-watch.exp
      return -1
 }
@@ -146,15 +145,11 @@ proc test_watchpoint_triggering {type} {
     clear_xfail *-*-*
 }
 
-proc test_watchpoint_all {type} {
-    global pf_prefix
+proc test_watchpoint_all {type} { with_test_prefix "$type" {
     upvar srcdir srcdir
     upvar subdir subdir
     upvar binfile binfile
 
-    set old_prefix $pf_prefix
-    lappend pf_prefix "$type:"
-
     mi_delete_breakpoints
     mi_gdb_reinitialize_dir $srcdir/$subdir
     mi_gdb_load ${binfile}
@@ -164,9 +159,7 @@ proc test_watchpoint_all {type} {
     #test_rwatch_creation_and_listing $type
     #test_awatch_creation_and_listing $type
     test_watchpoint_triggering $type
-
-    set pf_prefix $old_prefix
-}
+}}
 
 # Run the tests twice, once using software watchpoints...
 mi_gdb_test "567-gdb-set can-use-hw-watchpoints 0" \
diff --git a/gdb/testsuite/gdb.mi/var-cmd.c b/gdb/testsuite/gdb.mi/var-cmd.c
index 1482cdd..abdeb66 100644
--- a/gdb/testsuite/gdb.mi/var-cmd.c
+++ b/gdb/testsuite/gdb.mi/var-cmd.c
@@ -91,6 +91,24 @@ struct _struct_n_pointer {
   struct _struct_n_pointer *next;
 };
 
+struct anonymous {
+  int a;
+  struct {
+    int b;
+    char *c;
+    union {
+      int d;
+      void *e;
+      char f;
+      struct {
+	char g;
+	const char **h;
+	simpleton ***simple;
+      };
+    };
+  };
+};
+
 void do_locals_tests (void);
 void do_block_tests (void);
 void subroutine1 (int, long *);
@@ -122,9 +140,9 @@ do_locals_tests ()
   float *lpfloat = 0;
   double ldouble = 0;
   double *lpdouble = 0;
-  struct _simple_struct lsimple;
-  struct _simple_struct *lpsimple;
-  void (*func) (void);
+  struct _simple_struct lsimple = { 0 };
+  struct _simple_struct *lpsimple = 0;
+  void (*func) (void) = 0;
 
   /* Simple assignments */
   linteger = 1234;
@@ -502,6 +520,38 @@ void do_bitfield_tests ()
   /*: END: bitfield :*/  
 }
 
+void
+do_anonymous_type_tests (void)
+{
+  struct anonymous *anon;
+  struct anonymous **ptr;
+  struct
+  {
+    int x;
+    struct
+    {
+      int a;
+    };
+    struct
+    {
+      int b;
+    };
+  } v = {1, {2}, {3}};
+
+  anon = malloc (sizeof (struct anonymous));
+  anon->a = 1;
+  anon->b = 2;
+  anon->c = (char *) 3;
+  anon->d = 4;
+  anon->g = '5';
+  anon->h = (const char **) 6;
+  anon->simple = (simpleton ***) 7;
+
+  ptr = &anon;
+  free (anon);
+  return; /* anonymous type tests breakpoint */
+}
+
 int
 main (int argc, char *argv [])
 {
@@ -512,6 +562,7 @@ main (int argc, char *argv [])
   do_frozen_tests ();
   do_at_tests ();
   do_bitfield_tests ();
+  do_anonymous_type_tests ();
   exit (0);
 }
 
diff --git a/gdb/testsuite/gdb.mi/watch-nonstop.c b/gdb/testsuite/gdb.mi/watch-nonstop.c
new file mode 100644
index 0000000..bf6263f
--- /dev/null
+++ b/gdb/testsuite/gdb.mi/watch-nonstop.c
@@ -0,0 +1,24 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2011-2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+int global;
+
+int main ()
+{
+  sleep (60);
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.modula2/Makefile.in b/gdb/testsuite/gdb.modula2/Makefile.in
index 5afce56..19b5f10 100644
--- a/gdb/testsuite/gdb.modula2/Makefile.in
+++ b/gdb/testsuite/gdb.modula2/Makefile.in
@@ -27,6 +27,7 @@ all info install-info dvi install uninstall installcheck check:
 
 clean mostlyclean:
 	-rm -f *~ *.o *.ci
+	-rm -f *.dwo *.dwp
 	-rm -f core ${EXECUTABLES}
 
 distclean maintainer-clean realclean: clean
diff --git a/gdb/testsuite/gdb.modula2/unbounded-array.exp b/gdb/testsuite/gdb.modula2/unbounded-array.exp
index 485de0b..38dcf8f 100644
--- a/gdb/testsuite/gdb.modula2/unbounded-array.exp
+++ b/gdb/testsuite/gdb.modula2/unbounded-array.exp
@@ -17,24 +17,13 @@
 # the elements of an unbounded array using the Modula-2 language mode of
 # gdb.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
-set testfile "unbounded1"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile unbounded1.c
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug quiet}] != "" } {
-    untested "Couldn't compile ${srcfile}"
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug quiet}]} {
+    untested $testfile.exp
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto foo] then {
     perror "couldn't run to breakpoint foo"
     continue
diff --git a/gdb/testsuite/gdb.multi/Makefile.in b/gdb/testsuite/gdb.multi/Makefile.in
index 812ed13..fe26bae 100644
--- a/gdb/testsuite/gdb.multi/Makefile.in
+++ b/gdb/testsuite/gdb.multi/Makefile.in
@@ -8,6 +8,7 @@ all info install-info dvi install uninstall installcheck check:
 
 clean mostlyclean:
 	-rm -f *~ *.o *.ci
+	-rm -f *.dwo *.dwp
 	-rm -f core $(EXECUTABLES)
 
 distclean maintainer-clean realclean: clean
diff --git a/gdb/testsuite/gdb.multi/base.exp b/gdb/testsuite/gdb.multi/base.exp
index 70cbc46..172eb41 100644
--- a/gdb/testsuite/gdb.multi/base.exp
+++ b/gdb/testsuite/gdb.multi/base.exp
@@ -20,25 +20,25 @@ set testfile "base"
 
 set exec1 "hello"
 set srcfile1 ${exec1}.c
-set binfile1 ${objdir}/${subdir}/${exec1}
+set binfile1 [standard_output_file ${exec1}]
 
 set exec2 "hangout"
 set srcfile2 ${exec2}.c
-set binfile2 ${objdir}/${subdir}/${exec2}
+set binfile2 [standard_output_file ${exec2}]
 
 set exec3 "goodbye"
 set srcfile3 ${exec3}.c
-set binfile3 ${objdir}/${subdir}/${exec3}
+set binfile3 [standard_output_file ${exec3}]
 
-if { [prepare_for_testing ${testfile}.exp ${exec1} "${srcfile1}" {debug nowarnings}] } {
+if { [build_executable ${testfile}.exp ${exec1} "${srcfile1}" {debug nowarnings}] == -1 } {
     return -1
 }
 
-if { [prepare_for_testing ${testfile}.exp ${exec2} "${srcfile2}" {debug nowarnings}] } {
+if { [build_executable ${testfile}.exp ${exec2} "${srcfile2}" {debug nowarnings}] == -1} {
     return -1
 }
 
-if { [prepare_for_testing ${testfile}.exp ${exec3} "${srcfile3}" {debug nowarnings}] } {
+if { [build_executable ${testfile}.exp ${exec3} "${srcfile3}" {debug nowarnings}] == -1 } {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.multi/bkpt-multi-exec.exp b/gdb/testsuite/gdb.multi/bkpt-multi-exec.exp
index 9705cc8..6a76d07 100644
--- a/gdb/testsuite/gdb.multi/bkpt-multi-exec.exp
+++ b/gdb/testsuite/gdb.multi/bkpt-multi-exec.exp
@@ -17,28 +17,29 @@ if { [is_remote target] || ![isnative] } then {
     continue
 }
 
+# Until "catch exec" is implemented on other targets...
+#
+if {![istarget "hppa*-hp-hpux*"] && ![istarget "*-linux*"]} then {
+    continue
+}
+
 set testfile "bkpt-multi-exec"
 
 set exec1 "bkpt-multi-exec"
 set srcfile1 ${exec1}.c
-set binfile1 ${objdir}/${subdir}/${exec1}
+set binfile1 [standard_output_file ${exec1}]
 
 set exec2 "crashme"
 set srcfile2 ${exec2}.c
-set binfile2 ${objdir}/${subdir}/${exec2}
+set binfile2 [standard_output_file ${exec2}]
 
-if { [prepare_for_testing ${testfile}.exp ${exec1} "${srcfile1}" {debug nowarnings}] } {
+if { [build_executable ${testfile}.exp ${exec1} "${srcfile1}" {debug nowarnings}] == -1 } {
     return -1
 }
 
-if { [prepare_for_testing ${testfile}.exp ${exec2} "${srcfile2}" {debug nowarnings}] } {
+if { [build_executable ${testfile}.exp ${exec2} "${srcfile2}" {debug nowarnings}] == -1 } {
     return -1
 }
-# Until "catch exec" is implemented on other targets...
-#
-if {![istarget "hppa*-hp-hpux*"] && ![istarget "*-linux*"]} then {
-    continue
-}
 
 # Start with a fresh gdb
 
diff --git a/gdb/testsuite/gdb.multi/watchpoint-multi.c b/gdb/testsuite/gdb.multi/watchpoint-multi.c
new file mode 100644
index 0000000..51697b0
--- /dev/null
+++ b/gdb/testsuite/gdb.multi/watchpoint-multi.c
@@ -0,0 +1,51 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <pthread.h>
+#include <assert.h>
+
+static volatile int a, b, c;
+
+static void
+marker_exit (void)
+{
+  a = 1;
+}
+
+static void *
+start (void *arg)
+{
+  b = 2;
+  c = 3;
+
+  return NULL;
+}
+
+int
+main (void)
+{
+  pthread_t thread;
+  int i;
+
+  i = pthread_create (&thread, NULL, start, NULL);
+  assert (i == 0);
+  i = pthread_join (thread, NULL);
+  assert (i == 0);
+
+  marker_exit ();
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.multi/watchpoint-multi.exp b/gdb/testsuite/gdb.multi/watchpoint-multi.exp
new file mode 100644
index 0000000..09d3f7c
--- /dev/null
+++ b/gdb/testsuite/gdb.multi/watchpoint-multi.exp
@@ -0,0 +1,94 @@
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+standard_testfile
+set executable ${testfile}
+
+# Multiple inferiors are needed, therefore both native and extended gdbserver
+# modes are supported.  Only non-extended gdbserver is not supported.
+if [target_info exists use_gdb_stub] {
+    untested ${testfile}.exp
+    return
+}
+
+# Do not use simple hardware watchpoints ("watch") as its false hit may be
+# unnoticed by GDB if it reads it still has the same value.
+if [skip_hw_watchpoint_access_tests] {
+    untested "${testfile} (no hardware access watchpoints)"
+    return
+}
+
+if { [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+    untested ${testfile}.exp
+    return -1
+}
+
+clean_restart $executable
+
+# Simulate non-stop+target-async which also uses breakpoint always-inserted.
+gdb_test_no_output "set breakpoint always-inserted on"
+# displaced-stepping is also needed as other GDB sometimes still removes the
+# breakpoints, even with always-inserted on.
+# Without the support this test just is not as thorough as it could be.
+if [support_displaced_stepping] {
+    gdb_test_no_output "set displaced-stepping on"
+}
+
+# Debugging of this testcase:
+#gdb_test_no_output "maintenance set show-debug-regs on"
+#gdb_test_no_output "set debug infrun 1"
+
+gdb_breakpoint main {temporary}
+gdb_test "run" "Temporary breakpoint.* main .*" "start to main inferior 1"
+
+gdb_test "add-inferior" "Added inferior 2" "add inferior 2"
+gdb_test "inferior 2" "witching to inferior 2 .*" "switch to inferior 2, first time"
+gdb_load $binfile
+
+gdb_breakpoint main {temporary}
+gdb_test "run" "Temporary breakpoint.* main .*" "start to main inferior 2"
+
+gdb_test "awatch c" \
+    "Hardware access \\(read/write\\) watchpoint \[0-9\]+: c" \
+    "awatch c on inferior 2"
+
+gdb_breakpoint "marker_exit"
+
+gdb_test "inferior 1" "witching to inferior 1 .*" "switch back to inferior 1"
+
+if [skip_hw_watchpoint_multi_tests] {
+    # On single hardware watchpoint at least test the watchpoint in inferior
+    # 2 is not hit.
+} else {
+    gdb_test "awatch b" \
+	"Hardware access \\(read/write\\) watchpoint \[0-9\]+: b" \
+	"awatch b on inferior 1"
+
+    gdb_test "inferior 2" "witching to inferior 2 .*" "switch to inferior 2 again"
+
+    # FAIL would be a hit on watchpoint for `b' - that one is for the other
+    # inferior.
+    gdb_test "continue" \
+	"Hardware access \\(read/write\\) watchpoint \[0-9\]+: c\r\n\r\nOld value = 0\r\nNew value = 3\r\n.*" \
+	"catch c on inferior 2"
+
+    gdb_test "continue" "Breakpoint \[0-9\]+, marker_exit .*" "catch marker_exit in inferior 2"
+
+    gdb_test "inferior 1" "witching to inferior 1 .*" "switch back to inferior 1 again"
+
+    gdb_test "continue" "Hardware access \\(read/write\\) watchpoint \[0-9\]+: b\r\n\r\nOld value = 0\r\nNew value = 2\r\n.*" "catch b on inferior 1"
+}
+
+gdb_test "continue" "Breakpoint \[0-9\]+, marker_exit .*" "catch marker_exit in inferior 1"
diff --git a/gdb/testsuite/gdb.objc/Makefile.in b/gdb/testsuite/gdb.objc/Makefile.in
index 4d20c48..c9ed32b 100644
--- a/gdb/testsuite/gdb.objc/Makefile.in
+++ b/gdb/testsuite/gdb.objc/Makefile.in
@@ -16,6 +16,7 @@ check:
 
 clean mostlyclean:
 	-rm -f *~ *.o *.ci
+	-rm -f *.dwo *.dwp
 	-rm -f core ${EXECUTABLES}
 
 distclean maintainer-clean realclean: clean
diff --git a/gdb/testsuite/gdb.objc/basicclass.exp b/gdb/testsuite/gdb.objc/basicclass.exp
index 18c373b..befe620 100644
--- a/gdb/testsuite/gdb.objc/basicclass.exp
+++ b/gdb/testsuite/gdb.objc/basicclass.exp
@@ -15,13 +15,7 @@
 
 # This file was written by Adam Fedor (fedor at gnu.org)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
-set testfile "basicclass"
-set srcfile ${testfile}.m
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .m
 
 #
 # Objective-C program compilation isn't standard. We need to figure out
@@ -77,7 +71,6 @@ proc deduce_language_of_main {} {
 
 proc do_objc_tests {} {
     global subdir
-    global objdir
     global srcdir
     global binfile
     global gdb_prompt
@@ -152,7 +145,7 @@ gdb_test "print self" \
     " print self"
 
 gdb_test "print \*self" \
-    "\\$\[0-9\] = \{{?isa = 0x\[0-9a-f\]+}?, object = 0x0\}" \
+    "\\$\[0-9\] = \{{?isa = 0x\[0-9a-f\]+( <.*>)?}?, object = 0x0\}" \
     " print contents of self"
 
 #
diff --git a/gdb/testsuite/gdb.objc/nondebug.exp b/gdb/testsuite/gdb.objc/nondebug.exp
index d901b81..bca897f 100644
--- a/gdb/testsuite/gdb.objc/nondebug.exp
+++ b/gdb/testsuite/gdb.objc/nondebug.exp
@@ -17,13 +17,7 @@
 
 # This file was written by Adam Fedor (fedor at gnu.org)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
-set testfile "nondebug"
-set srcfile ${testfile}.m
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .m
 
 #
 # Objective-C program compilation isn't standard. We need to figure out
@@ -35,7 +29,6 @@ if {[gdb_compile_objc "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [
 
 proc do_objc_tests {} {
     global subdir
-    global objdir
     global srcdir
     global binfile
     global gdb_prompt
diff --git a/gdb/testsuite/gdb.objc/objcdecode.exp b/gdb/testsuite/gdb.objc/objcdecode.exp
index e3bbb51..9a39de2 100644
--- a/gdb/testsuite/gdb.objc/objcdecode.exp
+++ b/gdb/testsuite/gdb.objc/objcdecode.exp
@@ -17,13 +17,7 @@
 
 # This file was written by Adam Fedor (fedor at gnu.org)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
-set testfile "objcdecode"
-set srcfile ${testfile}.m
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .m
 
 #
 # Objective-C program compilation isn't standard. We need to figure out
@@ -35,7 +29,6 @@ if {[gdb_compile_objc "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [
 
 proc do_objc_tests {} {
     global subdir
-    global objdir
     global srcdir
     global binfile
     global gdb_prompt
diff --git a/gdb/testsuite/gdb.objc/print.exp b/gdb/testsuite/gdb.objc/print.exp
index 56725e1..96fb759 100644
--- a/gdb/testsuite/gdb.objc/print.exp
+++ b/gdb/testsuite/gdb.objc/print.exp
@@ -21,10 +21,6 @@
 # Test printing of various values.
 # NOTE: The tests here intentionally do not require an objc compiler.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 load_lib "objc.exp"
 
 proc test_float_accepted {} {
diff --git a/gdb/testsuite/gdb.opencl/Makefile.in b/gdb/testsuite/gdb.opencl/Makefile.in
index cb025ce..decf413 100644
--- a/gdb/testsuite/gdb.opencl/Makefile.in
+++ b/gdb/testsuite/gdb.opencl/Makefile.in
@@ -8,6 +8,7 @@ all info install-info dvi install uninstall installcheck check:
 
 clean mostlyclean:
 	-rm -f *~ *.o a.out core corefile gcore.test
+	-rm -f *.dwo *.dwp
 	-rm -f $(EXECUTABLES)
 
 distclean maintainer-clean realclean: clean
diff --git a/gdb/testsuite/gdb.opencl/callfuncs.exp b/gdb/testsuite/gdb.opencl/callfuncs.exp
index a311953..1ea11eb 100644
--- a/gdb/testsuite/gdb.opencl/callfuncs.exp
+++ b/gdb/testsuite/gdb.opencl/callfuncs.exp
@@ -17,10 +17,6 @@
 #
 # Tests OpenCL function calling conventions.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 load_lib opencl.exp
 
 if { [skip_opencl_tests] } {
diff --git a/gdb/testsuite/gdb.opencl/convs_casts.exp b/gdb/testsuite/gdb.opencl/convs_casts.exp
index d10d887..a230392 100644
--- a/gdb/testsuite/gdb.opencl/convs_casts.exp
+++ b/gdb/testsuite/gdb.opencl/convs_casts.exp
@@ -17,10 +17,6 @@
 #
 # Tests GDBs support for OpenCL type conversions and casts.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 load_lib opencl.exp
 
 if { [skip_opencl_tests] } {
diff --git a/gdb/testsuite/gdb.opencl/datatypes.exp b/gdb/testsuite/gdb.opencl/datatypes.exp
index a50018d..2993539 100644
--- a/gdb/testsuite/gdb.opencl/datatypes.exp
+++ b/gdb/testsuite/gdb.opencl/datatypes.exp
@@ -17,10 +17,6 @@
 #
 # Tests OpenCL data types.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 load_lib opencl.exp
 
 if { [skip_opencl_tests] } {
diff --git a/gdb/testsuite/gdb.opencl/operators.exp b/gdb/testsuite/gdb.opencl/operators.exp
index 910d4f1..6a698f3 100644
--- a/gdb/testsuite/gdb.opencl/operators.exp
+++ b/gdb/testsuite/gdb.opencl/operators.exp
@@ -17,10 +17,6 @@
 #
 # Tests GDBs support for OpenCL operators.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 load_lib opencl.exp
 
 if { [skip_opencl_tests] } {
diff --git a/gdb/testsuite/gdb.opencl/vec_comps.exp b/gdb/testsuite/gdb.opencl/vec_comps.exp
index eb26db4..0e699a1 100644
--- a/gdb/testsuite/gdb.opencl/vec_comps.exp
+++ b/gdb/testsuite/gdb.opencl/vec_comps.exp
@@ -17,10 +17,6 @@
 #
 # Tests component access of OpenCL vectors.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 load_lib opencl.exp
 
 if { [skip_opencl_tests] } {
diff --git a/gdb/testsuite/gdb.opt/Makefile.in b/gdb/testsuite/gdb.opt/Makefile.in
index 669e53b..76b305e 100644
--- a/gdb/testsuite/gdb.opt/Makefile.in
+++ b/gdb/testsuite/gdb.opt/Makefile.in
@@ -14,6 +14,7 @@ clean mostlyclean:
 	-find . -name 'b~*.ad[sb]' -print | xargs rm -f
 	-rm -f *~ a.out xgdb *.x *.ci *.tmp
 	-rm -f *~ *.o a.out xgdb *.x *.ci *.tmp
+	-rm -f *.dwo *.dwp
 	-rm -f core core.coremaker coremaker.core corefile $(EXECUTABLES)
 	-rm -f $(MISCELLANEOUS) twice-tmp.c
 
diff --git a/gdb/testsuite/gdb.opt/clobbered-registers-O2.exp b/gdb/testsuite/gdb.opt/clobbered-registers-O2.exp
index b90c164..a733baa 100644
--- a/gdb/testsuite/gdb.opt/clobbered-registers-O2.exp
+++ b/gdb/testsuite/gdb.opt/clobbered-registers-O2.exp
@@ -15,36 +15,22 @@
 #
 # This file is part of the gdb testsuite.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 # Test displaying call clobbered registers in optimized binaries.
 # GDB should not show incorrect values.
 
-set testfile clobbered-registers-O2
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
 # What compiler are we using?
 #
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [concat debug optimize=-O2 nowarnings]] != "" } {
-     untested clobbered-registers-O2.exp
-     return -1
+if {[prepare_for_testing $testfile.exp $testfile $srcfile \
+	 {debug optimize=-O2 nowarnings}]} {
+    return -1
 }
 
-# use this to debug:
-#log_user 1
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if { ![runto start_sequence] } then {
    fail "run to start_sequence"
    return
diff --git a/gdb/testsuite/gdb.opt/inline-break.c b/gdb/testsuite/gdb.opt/inline-break.c
new file mode 100644
index 0000000..edf82d6
--- /dev/null
+++ b/gdb/testsuite/gdb.opt/inline-break.c
@@ -0,0 +1,159 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* The file ../gdb.dwarf2/inline-break.S was generated manually from
+   this file, and should be regenerated if this file is modified.  */
+
+#ifdef __GNUC__
+# define ATTR __attribute__((always_inline))
+#else
+# define ATTR
+#endif
+
+/* A static inlined function that is called once.  */
+
+static inline ATTR int
+func1 (int x)
+{
+  return x * 23;
+}
+
+/* A non-static inlined function that is called once.  */
+
+inline ATTR int
+func2 (int x)
+{
+  return x * 17;
+}
+
+/* A static inlined function that calls another static inlined
+   function.  */
+
+static inline ATTR int
+func3b (int x)
+{
+  return x < 14 ? 1 : 2;
+}
+
+static inline ATTR int
+func3a (int x)
+{
+  return func3b (x * 23);
+}
+
+/* A non-static inlined function that calls a static inlined
+   function.  */
+
+static inline ATTR int
+func4b (int x)
+{
+  return x < 13 ? 1 : 2;
+}
+
+inline ATTR int
+func4a (int x)
+{
+  return func4b (x * 17);
+}
+
+/* A static inlined function that calls a non-static inlined
+   function.  */
+
+inline ATTR int
+func5b (int x)
+{
+  return x < 12 ? 1 : 2;
+}
+
+static inline ATTR int
+func5a (int x)
+{
+  return func5b (x * 23);
+}
+
+/* A non-static inlined function that calls another non-static inlined
+   function.  */
+
+inline ATTR int
+func6b (int x)
+{
+  return x < 14 ? 3 : 2;
+}
+
+inline ATTR int
+func6a (int x)
+{
+  return func6b (x * 17);
+}
+
+/* A static inlined function that is called more than once.  */
+
+static inline ATTR int
+func7b (int x)
+{
+  return x < 23 ? 1 : 4;
+}
+
+static inline ATTR int
+func7a (int x)
+{
+  return func7b (x * 29);
+}
+
+/* A non-static inlined function that is called more than once.  */
+
+inline ATTR int
+func8b (int x)
+{
+  return x < 7 ? 11 : 9;
+}
+
+static inline ATTR int
+func8a (int x)
+{
+  return func8b (x * 31);
+}
+
+/* Entry point.  */
+
+int
+main (int argc, char *argv[])
+{
+  /* Declaring x as volatile here prevents GCC from combining calls.
+     If GCC is allowed to combine calls then some of them end up with
+     no instructions at all, so there is no specific address for GDB
+     to set a breakpoint at.  */
+  volatile int x = argc;
+
+  x = func1 (x);
+
+  x = func2 (x);
+
+  x = func3a (x);
+
+  x = func4a (x);
+
+  x = func5a (x);
+
+  x = func6a (x);
+
+  x = func7a (x) + func7b (x);
+
+  x = func8a (x) + func8b (x);
+
+  return x;
+}
diff --git a/gdb/testsuite/gdb.opt/inline-break.exp b/gdb/testsuite/gdb.opt/inline-break.exp
new file mode 100644
index 0000000..2a7ef39
--- /dev/null
+++ b/gdb/testsuite/gdb.opt/inline-break.exp
@@ -0,0 +1,113 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Note that the testcase gdb.dwarf2/dw2-inline-break.exp largely
+# mirrors this testcase, and should be updated if this testcase is
+# changed.
+
+standard_testfile
+
+if { [prepare_for_testing $testfile.exp $testfile $srcfile \
+          {debug optimize=-O2 additional_flags=-Winline}] } {
+    return -1
+}
+
+#
+# func1 is a static inlined function that is called once.
+# The result should be a single-location breakpoint.
+#
+gdb_test "break func1" \
+    "Breakpoint.*at.* file .*$srcfile, line.*"
+
+#
+# func2 is a non-static inlined function that is called once.
+# The result should be a breakpoint with two locations: the
+# out-of-line function and the single inlined instance.
+#
+gdb_test "break func2" \
+    "Breakpoint.*at.*func2.*\\(2 locations\\)"
+
+#
+# func3b is a static inlined function that is called once from
+# within another static inlined function.  The result should be
+# a single-location breakpoint.
+#
+gdb_test "break func3b" \
+    "Breakpoint.*at.* file .*$srcfile, line.*"
+
+#
+# func4b is a static inlined function that is called once from
+# within a non-static inlined function.  The result should be
+# a breakpoint with two locations: the inlined instance within
+# the inlined call to func4a in main, and the inlined instance
+# within the out-of-line func4a.
+#
+gdb_test "break func4b" \
+    "Breakpoint.*at.*func4b.*\\(2 locations\\)"
+
+#
+# func5b is a non-static inlined function that is called once
+# from within a static inlined function.  The result should be a
+# breakpoint with two locations: the out-of-line function and the
+# inlined instance within the inlined call to func5a in main.
+#
+gdb_test "break func5b" \
+    "Breakpoint.*at.*func5b.*\\(2 locations\\)"
+#
+# func6b is a non-static inlined function that is called once from
+# within another non-static inlined function.  The result should be
+# a breakpoint with three locations: the out-of-line function, the
+# inlined instance within the out-of-line func6a, and the inlined
+# instance within the inlined call to func6a in main,
+#
+gdb_test "break func6b" \
+    "Breakpoint.*at.*func6b.*\\(3 locations\\)"
+
+#
+# func7b is a static inlined function that is called twice: once from
+# func7a, and once from main.  The result should be a breakpoint with
+# two locations: the inlined instance within the inlined instance of
+# func7a, and the inlined instance within main.
+#
+gdb_test "break func7b" \
+    "Breakpoint.*at.*func7b.*\\(2 locations\\)"
+
+#
+# func8b is a non-static inlined function that is called twice: once
+# func8a, and once from main.  The result should be a breakpoint with
+# three locations: the out-of-line function, the inlined instance
+# within the inlined instance of func7a, and the inlined instance
+# within main.
+#
+gdb_test "break func8b" \
+    "Breakpoint.*at.*func8b.*\\(3 locations\\)"
+
+#
+# func1 is a static inlined function.  The result should be that no
+# symbol is found to print.
+#
+gdb_test "print func1" \
+    "No symbol \"func1\" in current context."
+
+#
+# func2 is a non-static inlined function.  The result should be that
+# one symbol is found to print, and that the printed symbol is called
+# "func2".  Note that this does not cover the failure case that two
+# symbols were found, but that gdb chose the out-of-line copy to
+# print, but if this was failing the "print func1" test would likely
+# fail instead.
+#
+gdb_test "print func2" \
+    "\\\$.* = {int \\(int\\)} .* <func2>"
diff --git a/gdb/testsuite/gdb.opt/inline-bt.exp b/gdb/testsuite/gdb.opt/inline-bt.exp
index 6b35690..8eecd35 100644
--- a/gdb/testsuite/gdb.opt/inline-bt.exp
+++ b/gdb/testsuite/gdb.opt/inline-bt.exp
@@ -13,28 +13,17 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile "inline-bt"
-set srcfile ${testfile}.c
-set srcfile2 "inline-markers.c"
-set fullsrcfile "${srcdir}/${subdir}/${srcfile}"
-set fullsrcfile2 "${srcdir}/${subdir}/${srcfile2}"
-set sources [list ${fullsrcfile} ${fullsrcfile2}]
-set binfile ${objdir}/${subdir}/${testfile}
-
-if  { [gdb_compile ${sources} ${binfile} \
-	   executable {debug optimize=-O2 additional_flags=-Winline}] != "" } {
-    untested inline-bt.exp
+standard_testfile .c inline-markers.c
+
+if {[prepare_for_testing $testfile.exp $testfile \
+	 [list $srcfile $srcfile2] \
+	 {debug optimize=-O2 additional_flags=-Winline}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 runto_main
 
-get_compiler_info $binfile
+get_compiler_info
 get_debug_format
 if { [skip_inline_frame_tests] } {
     untested inline-bt.exp
diff --git a/gdb/testsuite/gdb.opt/inline-cmds.exp b/gdb/testsuite/gdb.opt/inline-cmds.exp
index 13aeeb8..2a333e0 100644
--- a/gdb/testsuite/gdb.opt/inline-cmds.exp
+++ b/gdb/testsuite/gdb.opt/inline-cmds.exp
@@ -13,30 +13,18 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile "inline-cmds"
-set srcfile "${testfile}.c"
-set srcfile2 "inline-markers.c"
-set fullsrcfile "${srcdir}/${subdir}/${srcfile}"
-set fullsrcfile2 "${srcdir}/${subdir}/${srcfile2}"
-set sources [list ${fullsrcfile} ${fullsrcfile2}]
-set binfile ${objdir}/${subdir}/${testfile}
-
-if  { [gdb_compile $sources ${binfile} \
-	   executable {debug optimize=-O2}] != "" } {
-    untested inline-cmds.exp
+standard_testfile .c inline-markers.c
+
+if {[prepare_for_testing $testfile.exp $testfile \
+	 [list $srcfile $srcfile2] {debug optimize=-O2}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 gdb_test_no_output "set listsize 1"
 
 runto_main
 
-get_compiler_info $binfile
+get_compiler_info
 get_debug_format
 if { [skip_inline_frame_tests] } {
     untested inline-cmds.exp
diff --git a/gdb/testsuite/gdb.opt/inline-locals.exp b/gdb/testsuite/gdb.opt/inline-locals.exp
index f11167f..7ff6a13 100644
--- a/gdb/testsuite/gdb.opt/inline-locals.exp
+++ b/gdb/testsuite/gdb.opt/inline-locals.exp
@@ -13,28 +13,16 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile "inline-locals"
-set srcfile ${testfile}.c
-set srcfile2 "inline-markers.c"
-set fullsrcfile "${srcdir}/${subdir}/${srcfile}"
-set fullsrcfile2 "${srcdir}/${subdir}/${srcfile2}"
-set sources [list ${fullsrcfile} ${fullsrcfile2}]
-set binfile ${objdir}/${subdir}/${testfile}
-
-if  { [gdb_compile ${sources} ${binfile} \
-	   executable {debug optimize=-O2}] != "" } {
-    untested inline-locals.exp
+standard_testfile .c inline-markers.c
+
+if {[prepare_for_testing $testfile.exp $testfile \
+	 [list $srcfile $srcfile2] {debug optimize=-O2}]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 runto_main
 
-get_compiler_info $binfile
+get_compiler_info
 get_debug_format
 if { [skip_inline_var_tests] } {
     untested inline-bt.exp
diff --git a/gdb/testsuite/gdb.pascal/Makefile.in b/gdb/testsuite/gdb.pascal/Makefile.in
index 0427a8f..d9ad900 100644
--- a/gdb/testsuite/gdb.pascal/Makefile.in
+++ b/gdb/testsuite/gdb.pascal/Makefile.in
@@ -14,6 +14,7 @@ clean mostlyclean:
 	-find . -name 'b~*.ad[sb]' -print | xargs rm -f
 	-rm -f *~ a.out xgdb *.x *.ci *.tmp
 	-rm -f *~ *.o a.out xgdb *.x *.ci *.tmp
+	-rm -f *.dwo *.dwp
 	-rm -f core core.coremaker coremaker.core corefile $(EXECUTABLES)
 	-rm -f $(MISCELLANEOUS) twice-tmp.c
 
diff --git a/gdb/testsuite/gdb.pascal/floats.exp b/gdb/testsuite/gdb.pascal/floats.exp
index 6668666..1bde7fa 100644
--- a/gdb/testsuite/gdb.pascal/floats.exp
+++ b/gdb/testsuite/gdb.pascal/floats.exp
@@ -13,24 +13,17 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "pascal.exp"
 
-set testfile "floats"
-set srcfile ${testfile}.pas
-set binfile ${objdir}/${subdir}/${testfile}$EXEEXT
+standard_testfile .pas
 
 if {[gdb_compile_pascal "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug ]] != "" } {
-  return -1
+    untested $testfile.exp
+    return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${testfile}
+
 set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
 set bp_location2 [gdb_get_line_number "set breakpoint 2 here"]
 
diff --git a/gdb/testsuite/gdb.pascal/gdb11492.exp b/gdb/testsuite/gdb.pascal/gdb11492.exp
index 0d03522..d232ddc 100644
--- a/gdb/testsuite/gdb.pascal/gdb11492.exp
+++ b/gdb/testsuite/gdb.pascal/gdb11492.exp
@@ -13,24 +13,16 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "pascal.exp"
 
-set testfile "gdb11492"
-set srcfile ${testfile}.pas
-set binfile ${objdir}/${subdir}/${testfile}$EXEEXT
+standard_testfile .pas
 
 if {[gdb_compile_pascal "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug ]] != "" } {
-  return -1
+    untested $testfile.exp
+    return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${testfile}
 set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
 
 if { [gdb_breakpoint ${srcfile}:${bp_location1}] } {
diff --git a/gdb/testsuite/gdb.pascal/hello.exp b/gdb/testsuite/gdb.pascal/hello.exp
index ce30919..cd0fce6 100644
--- a/gdb/testsuite/gdb.pascal/hello.exp
+++ b/gdb/testsuite/gdb.pascal/hello.exp
@@ -13,24 +13,15 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "pascal.exp"
 
-set testfile "hello"
-set srcfile ${testfile}.pas
-set binfile ${objdir}/${subdir}/${testfile}${EXEEXT}
+standard_testfile .pas
 
 if {[gdb_compile_pascal "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug ]] != "" } {
   return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${testfile}
 set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
 set bp_location2 [gdb_get_line_number "set breakpoint 2 here"]
 
diff --git a/gdb/testsuite/gdb.pascal/integers.exp b/gdb/testsuite/gdb.pascal/integers.exp
index 8cdc00c..82ce065 100644
--- a/gdb/testsuite/gdb.pascal/integers.exp
+++ b/gdb/testsuite/gdb.pascal/integers.exp
@@ -13,24 +13,15 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib "pascal.exp"
 
-set testfile "integers"
-set srcfile ${testfile}.pas
-set binfile ${objdir}/${subdir}/${testfile}$EXEEXT
+standard_testfile .pas
 
 if {[gdb_compile_pascal "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug ]] != "" } {
   return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${testfile}
 set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
 set bp_location2 [gdb_get_line_number "set breakpoint 2 here"]
 
diff --git a/gdb/testsuite/gdb.pascal/print.exp b/gdb/testsuite/gdb.pascal/print.exp
index ba6351b..c390a7c 100644
--- a/gdb/testsuite/gdb.pascal/print.exp
+++ b/gdb/testsuite/gdb.pascal/print.exp
@@ -21,10 +21,6 @@
 # Test printing of various values.
 # NOTE: The tests here intentionally do not require a pascal compiler.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 load_lib "pascal.exp"
 
 proc test_float_accepted {} {
diff --git a/gdb/testsuite/gdb.pascal/types.exp b/gdb/testsuite/gdb.pascal/types.exp
index f9f1736..a5db631 100644
--- a/gdb/testsuite/gdb.pascal/types.exp
+++ b/gdb/testsuite/gdb.pascal/types.exp
@@ -19,10 +19,6 @@
 # (shebs at cygnus.com).
 # Adapted to pascal by Pierre Muller
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 load_lib "pascal.exp"
 
 proc test_integer_literal_types_accepted {} {
diff --git a/gdb/testsuite/gdb.python/Makefile.in b/gdb/testsuite/gdb.python/Makefile.in
index 5890191..4e286b5 100644
--- a/gdb/testsuite/gdb.python/Makefile.in
+++ b/gdb/testsuite/gdb.python/Makefile.in
@@ -5,7 +5,8 @@ EXECUTABLES = py-type py-value py-prettyprint py-template py-block \
 	py-symbol py-mi py-breakpoint py-inferior py-infthread \
 	py-shared python lib-types py-events py-evthreads py-frame \
 	py-mi py-pp-maint py-progspace py-section-script py-objfile \
-	py-finish-breakpoint py-finish-breakpoint2
+	py-finish-breakpoint py-finish-breakpoint2 py-value-cc py-explore \
+	py-explore-cc
 
 MISCELLANEOUS = py-shared-sl.sl py-events-shlib.so py-events-shlib-nodebug.so 
 
@@ -14,6 +15,7 @@ all info install-info dvi install uninstall installcheck check:
 
 clean mostlyclean:
 	-rm -f *~ *.o *.ci
+	-rm -f *.dwo *.dwp
 	-rm -f core $(EXECUTABLES) $(MISCELLANEOUS)
 
 distclean maintainer-clean realclean: clean
diff --git a/gdb/testsuite/gdb.python/lib-types.exp b/gdb/testsuite/gdb.python/lib-types.exp
index ff14421..f38ec1c 100644
--- a/gdb/testsuite/gdb.python/lib-types.exp
+++ b/gdb/testsuite/gdb.python/lib-types.exp
@@ -16,26 +16,14 @@
 # This file is part of the GDB testsuite.
 # It tests the types.py module.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib gdb-python.exp
 
-set testfile "lib-types"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-    untested "Couldn't compile ${srcfile}"
+standard_testfile .cc
+
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-# Start with a fresh gdb.
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 # Skip all tests if Python scripting is not enabled.
 if { [skip_python_tests] } { continue }
 
diff --git a/gdb/testsuite/gdb.python/py-block.exp b/gdb/testsuite/gdb.python/py-block.exp
index 4b995da..745f844 100644
--- a/gdb/testsuite/gdb.python/py-block.exp
+++ b/gdb/testsuite/gdb.python/py-block.exp
@@ -16,14 +16,10 @@
 # This file is part of the GDB testsuite.  It tests the mechanism
 # exposing values to Python.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib gdb-python.exp
 
-set testfile "py-block"
-set srcfile ${testfile}.c
+standard_testfile
+
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
     return -1
 }
diff --git a/gdb/testsuite/gdb.python/py-breakpoint.exp b/gdb/testsuite/gdb.python/py-breakpoint.exp
index 8ed3742..9bedeb2 100644
--- a/gdb/testsuite/gdb.python/py-breakpoint.exp
+++ b/gdb/testsuite/gdb.python/py-breakpoint.exp
@@ -16,14 +16,10 @@
 # This file is part of the GDB testsuite.  It tests the mechanism
 # exposing values to Python.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib gdb-python.exp
 
-set testfile "py-breakpoint"
-set srcfile ${testfile}.c
+standard_testfile
+
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
     return -1
 }
diff --git a/gdb/testsuite/gdb.python/py-cmd.exp b/gdb/testsuite/gdb.python/py-cmd.exp
index 976adf6..36fa343 100644
--- a/gdb/testsuite/gdb.python/py-cmd.exp
+++ b/gdb/testsuite/gdb.python/py-cmd.exp
@@ -16,10 +16,6 @@
 # This file is part of the GDB testsuite.  It tests the mechanism
 # for defining new GDB commands in Python.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib gdb-python.exp
 
 # Start with a fresh gdb.
@@ -142,3 +138,20 @@ gdb_test "python print gdb.string_to_argv ('\"1 2\" 3')" \
 gdb_test "python print gdb.string_to_argv ('1\\ 2 3')" \
   {\['1 2', '3'\]} \
     "string_to_argv ('1\\ 2 3')"
+
+# Test user-defined python commands.
+gdb_py_test_multiple "input simple user-defined command" \
+  "python" "" \
+  "class test_help (gdb.Command):" "" \
+  "  \"\"\"Docstring\"\"\"" "" \
+  "  def __init__ (self):" "" \
+  "    super (test_help, self).__init__ (\"test_help\", gdb.COMMAND_USER)" "" \
+  "  def invoke (self, arg, from_tty):" "" \
+  "    print \"test_cmd output, arg = %s\" % arg" "" \
+  "test_help ()" "" \
+  "end" ""
+
+gdb_test "test_help ugh" "test_cmd output, arg = ugh" "call simple user-defined command"
+
+# Make sure the command shows up in `help user-defined`.
+gdb_test "help user-defined" "User-defined commands.\[\r\n\]+The commands in this class are those defined by the user.\[\r\n\]+Use the \"define\" command to define a command.\[\r\n\]+\[\r\n\]+List of commands:\[\r\n\]+\[\r\n\]+test_help -- Docstring\[\r\n\]+\[\r\n\]+Type \"help\" followed by command name for full documentation.\[\r\n\]+Type \"apropos word\" to search for commands related to \"word\".\[\r\n\]+Command name abbreviations are allowed if unambiguous.\[\r\n\]+" "see user-defined command in `help user-defined`"
diff --git a/gdb/testsuite/gdb.python/py-events.c b/gdb/testsuite/gdb.python/py-events.c
index 00490c6..5b9a0c5 100644
--- a/gdb/testsuite/gdb.python/py-events.c
+++ b/gdb/testsuite/gdb.python/py-events.c
@@ -24,6 +24,11 @@ int second(){
 }
 
 int first(){
+  int i;
+
+  for (i = 0; i < 2; i++)
+    do_nothing ();
+
   return second();
 }
 
diff --git a/gdb/testsuite/gdb.python/py-events.exp b/gdb/testsuite/gdb.python/py-events.exp
index 0b5c1cf..6b655bb 100644
--- a/gdb/testsuite/gdb.python/py-events.exp
+++ b/gdb/testsuite/gdb.python/py-events.exp
@@ -17,24 +17,18 @@ if [target_info exists use_gdb_stub] {
     return 0
 }
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib gdb-python.exp
 
 set libfile "py-events-shlib"
 set libsrc  $srcdir/$subdir/$libfile.c
-set lib_sl  $objdir/$subdir/$libfile.so
+set lib_sl  [standard_output_file $libfile.so]
 set lib_opts  debug
 
-set testfile "py-events"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 set exec_opts [list debug shlib=$lib_sl]
 set pyfile ${srcdir}/${subdir}/${testfile}.py
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
@@ -73,14 +67,28 @@ gdb_test "continue" ".*event type: continue.*
 .*breakpoint number: 3.*
 all threads stopped"
 
+# Test that when "step N" trips on a breakpoint, we get a stop event
+# with breakpoint stop reason.
+gdb_breakpoint "do_nothing"
+gdb_test "step 3" ".*event type: continue.*
+.*event type: stop.*
+.*stop reason: breakpoint.*
+.*first breakpoint number: 4.*
+.*breakpoint number: 4.*
+all threads stopped"
+
+delete_breakpoints
+
 #test exited event.
 gdb_test "continue" ".*event type: continue.*
 .*event type: exit.*
 .*exit code: 12.*
-.*exit inf: 1.*" "Inferior 1 terminated."
+.*exit inf: 1.*
+dir ok: True.*" "Inferior 1 terminated."
 
 gdb_test "inferior 2" ".*Switching to inferior 2.*"
 gdb_test "continue" ".*event type: continue.*
 .*event type: exit.*
 .*exit code: 12.*
-.*exit inf: 2.*" "Inferior 2 terminated."
+.*exit inf: 2.*
+dir ok: True.*" "Inferior 2 terminated."
diff --git a/gdb/testsuite/gdb.python/py-events.py b/gdb/testsuite/gdb.python/py-events.py
index 122def0..f7e45f5 100644
--- a/gdb/testsuite/gdb.python/py-events.py
+++ b/gdb/testsuite/gdb.python/py-events.py
@@ -44,6 +44,7 @@ def exit_handler (event):
         print "event type: exit"
     print "exit code: %d" % (event.exit_code)
     print "exit inf: %d" % (event.inferior.num)
+    print "dir ok: %s" % str('exit_code' in dir(event))
 
 def continue_handler (event):
     if (isinstance (event, gdb.ContinueEvent)):
diff --git a/gdb/testsuite/gdb.python/py-evsignal.exp b/gdb/testsuite/gdb.python/py-evsignal.exp
index 35abddc..b3c1d66 100644
--- a/gdb/testsuite/gdb.python/py-evsignal.exp
+++ b/gdb/testsuite/gdb.python/py-evsignal.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if {[is_remote target]} {
     # RuntimeError: Could not find event thread
     kfail "python/12966" "Signal Thread 3"
@@ -25,9 +21,7 @@ if {[is_remote target]} {
 
 load_lib gdb-python.exp
 
-set testfile "py-evsignal"
-set srcfile py-evthreads.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile py-evthreads.c
 set pyfile ${srcdir}/${subdir}/py-events.py
 
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
diff --git a/gdb/testsuite/gdb.python/py-evthreads.exp b/gdb/testsuite/gdb.python/py-evthreads.exp
index 2139c9a..98f2501 100644
--- a/gdb/testsuite/gdb.python/py-evthreads.exp
+++ b/gdb/testsuite/gdb.python/py-evthreads.exp
@@ -13,10 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if {[is_remote target]} {
     # RuntimeError: Could not find event thread
     kfail "python/12966" "Run to breakpoint 1"
@@ -30,9 +26,7 @@ if { ![support_displaced_stepping] } {
 
 load_lib gdb-python.exp
 
-set testfile "py-evthreads"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 set pyfile ${srcdir}/${subdir}/py-events.py
 
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
diff --git a/gdb/testsuite/gdb.python/py-explore-cc.exp b/gdb/testsuite/gdb.python/py-explore-cc.exp
new file mode 100644
index 0000000..3686ae3
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-explore-cc.exp
@@ -0,0 +1,144 @@
+# Copyright (C) 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# This file is part of the GDB testsuite.  It tests the mechanism
+# exposing values to Python.
+
+if { [skip_cplus_tests] } { continue }
+
+standard_testfile py-explore.cc
+
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
+}
+
+# Skip all tests if Python scripting is not enabled.
+if { [skip_python_tests] } { continue }
+
+set int_ptr_ref_desc "The value of 'int_ptr_ref' is of type 'int_ptr' which is a typedef of type 'int \\*'.*\'int_ptr_ref' is a pointer to a value of type 'int'.*"
+
+set b_desc "The value of 'b' is a struct/class of type 'B' with the following fields:.*\
+A = <Enter 0 to explore this base class of type 'A'>.*\
+i = 10 \\.\\. \\(Value of type 'int'\\).*\
+c = 97 'a' \\.\\. \\(Value of type 'char'\\).*"
+
+set B_desc "'B' is a struct/class with the following fields:.*\
+A = <Enter 0 to explore this base class of type 'A'>.*\
+i = <Enter 1 to explore this field of type 'int'>.*\
+c = <Enter 2 to explore this field of type 'char'>.*"
+
+if ![runto_main] {
+   return -1
+}
+
+gdb_breakpoint [gdb_get_line_number "Break here."]
+gdb_continue_to_breakpoint "Break here" ".*Break here.*"
+
+gdb_test "explore A" "'A' is a struct/class with no fields\."
+gdb_test "explore a" "The value of 'a' is a struct/class of type 'const A' with no fields\."
+gdb_test "explore int_ref" "'int_ref' is a scalar value of type 'int'.*int_ref = 10"
+
+gdb_test_multiple "explore int_ptr_ref" "" {
+    -re "$int_ptr_ref_desc.*Continue exploring it as a pointer to a single value \\\[y/n\\\]:.*" {
+        pass "explore int_ptr_ref"
+        gdb_test_multiple "y" "explore_int_ptr_ref_as_single_value_pointer" {
+            -re "'\[*\]int_ptr_ref' is a scalar value of type 'int'.*\[*\]int_ptr_ref = 10.*$gdb_prompt" {
+                pass "explore_int_ptr_ref_as_single_value_pointer"
+            }
+        }
+    }
+}
+
+gdb_test_multiple "explore b" "" {
+    -re "$b_desc.*Enter the field number of choice:.*" {
+        pass "explore b"
+        gdb_test_multiple "0" "explore_base_class_A" {
+            -re "The value of 'b\.A' is a struct/class of type 'A' with no fields\." {
+                pass "explore_base_class_A"
+                gdb_test_multiple "\0" "return_to_b_from_A" {
+                    -re ".*$b_desc.*Enter the field number of choice:.*" {
+                        pass "return_to_b_from_A"
+                        gdb_test_multiple "1" "explore_field_i_of_b" {
+                            -re "'b\.i' is a scalar value of type 'int'.*b\.i = 10.*" {
+                                pass "explore_field_i_of_b"
+                                gdb_test_multiple "\0" "return_to_b_from_i" {
+                                    -re "$b_desc.*Enter the field number of choice:.*" {
+                                        pass "return_to_b_from_i"
+                                    }
+                                }
+                            }
+                        }
+                        gdb_test_multiple "2" "explore_field_c_of_b" {
+                            -re "'b\.c' is a scalar value of type 'char'.*b\.c = .*'a'.*" {
+                                pass "explore_field_c_of_b"
+                                gdb_test_multiple "\0" "return_to_b_from_c" {
+                                    -re "$b_desc.*Enter the field number of choice:.*" {
+                                        pass "return_to_b_from_i"
+                                    }
+                                }
+                            }
+                        }
+                        gdb_test_multiple "\0" "return_to_gdb_prompt" {
+                            -re "$gdb_prompt" {
+                                pass "return_to_gdb_prompt_from_b"
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+gdb_test_multiple "explore B" "" {
+    -re "$B_desc.*Enter the field number of choice:.*" {
+        pass "explore B"
+        gdb_test_multiple "0" "explore_base_class_A" {
+            -re "base class 'A' of 'B' is a struct/class of type 'A' with no fields\." {
+                pass "explore_base_class_A"
+                gdb_test_multiple "\0" "return_to_B" {
+                    -re "$B_desc.*Enter the field number of choice:.*" {
+                        pass "return_to_B"
+                        gdb_test_multiple "1" "explore_field_i_of_B" {
+                            -re "field 'i' of 'B' is of a scalar type 'int'.*" {
+                                pass "explore_field_i_of_B"
+                                gdb_test_multiple "\0" "return_to_B_from_i" {
+                                    -re "$B_desc.*Enter the field number of choice:.*" {
+                                        pass "return_to_B_from_i"
+                                    }
+                                }
+                            }
+                        }
+                        gdb_test_multiple "2" "explore_field_c_of_B" {
+                            -re "field 'c' of 'B' is of a scalar type 'char'.*" {
+                                pass "explore_field_c_of_B"
+                                gdb_test_multiple "\0" "return_to_B_from_c" {
+                                    -re "$B_desc.*Enter the field number of choice:.*" {
+                                        pass "return_to_B_from_c"
+                                    }
+                                }
+                            }
+                        }
+                        gdb_test_multiple "\0" "return_to_gdb_prompt" {
+                            -re "$gdb_prompt" {
+                                pass "return_to_gdb_prompt_from_B"
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/gdb/testsuite/gdb.python/py-explore.c b/gdb/testsuite/gdb.python/py-explore.c
new file mode 100644
index 0000000..9dcf0e9
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-explore.c
@@ -0,0 +1,82 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see  <http://www.gnu.org/licenses/>.
+*/
+
+#define ARRAY_SIZE 10
+
+struct SimpleStruct
+{
+  int a;
+  double d;
+};
+
+union SimpleUnion
+{
+  int i;
+  char c;
+  float f;
+  double d;
+};
+
+typedef struct SimpleStruct SS;
+
+struct ComplexStruct
+{
+  struct SimpleStruct s;
+  union SimpleUnion u;
+  SS sa[ARRAY_SIZE];
+};
+
+union ComplexUnion
+{
+  SS s;
+  struct SimpleStruct sa[ARRAY_SIZE];
+};
+
+int
+main (void)
+{
+  struct SimpleStruct ss;
+  struct SimpleStruct* ss_ptr = &ss;
+  SS ss_t;
+
+  union SimpleUnion su;
+  struct ComplexStruct cs;
+  struct ComplexStruct* cs_ptr = &cs;
+  union ComplexUnion cu;
+  int i;
+  double darray[5] = {0.1, 0.2, 0.3, 0.4, 0.5};
+  double *darray_ref = darray;
+
+  ss.a = 10;
+  ss.d = 100.01;
+  ss_t = ss;
+  
+  su.d = 100.1;
+
+  cs.s = ss;
+  cs.u = su;
+  for (i = 0; i < ARRAY_SIZE; i++)
+    {
+      cs.sa[i].a = i;
+      cs.sa[i].d = 10.10 + i;
+      cu.sa[i].a = i;
+      cu.sa[i].d = 100.10 + i;
+    }
+
+  return 0; /* Break here. */
+}
diff --git a/gdb/testsuite/gdb.python/py-explore.cc b/gdb/testsuite/gdb.python/py-explore.cc
new file mode 100644
index 0000000..420ba57
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-explore.cc
@@ -0,0 +1,54 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see  <http://www.gnu.org/licenses/>.
+*/
+
+class A {
+ public:
+  virtual ~A() { }
+};
+
+class B : public A {
+ public:
+  virtual ~B() { }
+
+  int i;
+  char c;
+};
+
+typedef int *int_ptr;
+
+int
+func (const A &a)
+{
+  int val = 10;
+  int &int_ref = val;
+  int_ptr ptr = &val;
+  int_ptr &int_ptr_ref = ptr;
+  B b;
+
+  b.i = 10;
+  b.c = 'a';
+
+  return 0; /* Break here.  */
+}
+
+int
+main ()
+{
+  A obj;
+  return func (obj);
+}
diff --git a/gdb/testsuite/gdb.python/py-explore.exp b/gdb/testsuite/gdb.python/py-explore.exp
new file mode 100644
index 0000000..308d902
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-explore.exp
@@ -0,0 +1,468 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+standard_testfile
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
+    return -1
+}
+
+# Skip all tests if Python scripting is not enabled.
+if { [skip_python_tests] } { continue }
+
+set SS "struct SimpleStruct"
+set SU "union SimpleUnion"
+set CS "struct ComplexStruct"
+set CU "union ComplexUnion"
+set enter_field_number_prompt  {Enter the field number of choice: }
+set return_to_parent_prompt {Press enter to return to parent value: }
+set array_index_prompt {Enter the index of the element you want to explore in .*: }
+
+proc compound_description { value_name type_desc type_name } {
+    return "The value of '$value_name' is a $type_desc of type '$type_name' with the following fields:\[\r\n\]+"
+}
+
+proc typedef_description { value_name typedef_name type_name } {
+    return "The value of '$value_name' is of type '$typedef_name' which is a typedef of type '$type_name'\.\[\r\n\]+"
+}
+
+proc scalar_description { value_name type } {
+    return "'$value_name' is a scalar value of type '$type'\.\[\r\n\]+"
+}
+
+proc array_description { value_name type } {
+    return "'$value_name' is an array of '$type'\.\[\r\n\]+"
+}
+
+proc pointer_description { value_name type_name } {
+    set type_description "'$value_name' is a pointer to a value of type '$type_name'\.\[\r\n\]+"
+    set prompt "Continue exploring it as a pointer to a single value \[\[\]y/n\[\]\]: " 
+    return "$type_description$prompt"
+}
+
+proc field_values { args } {
+    set result ""
+    foreach field $args {
+        set result "$result\[ \]*$field \[\.\]\[\.\] \[\(\]Value of type .*\[\)\]\[\r\n\]+"
+    }
+    return $result
+}
+
+proc field_choices { args } {
+    set result ""
+    set field_num 0
+    foreach field $args {
+        set result "$result$field\[ \]+=\[ \]+<Enter $field_num to explore this field of type .*"
+        incr field_num
+    }
+    return $result
+}
+
+proc scalar_value { value_name value } {
+    return "$value_name = $value\[r\n\]+"
+}
+
+set SS_fields [field_values {a = 10} {d = 100[.].*}]
+
+if ![runto_main] {
+   return -1
+}
+
+gdb_breakpoint [gdb_get_line_number "Break here."]
+gdb_continue_to_breakpoint "Break here" ".*Break here.*"
+
+#########################
+# Value exploration tests
+#########################
+
+gdb_test "explore i" "[scalar_description {i} {int}].*i = .*"
+gdb_test "explore ss" "[compound_description {ss} {struct/class} $SS].*$SS_fields"
+gdb_test "explore *ss_ptr" "[compound_description {\*ss_ptr} {struct/class} $SS].*$SS_fields"
+gdb_test "explore ss_t" "[typedef_description {ss_t} {SS} $SS].*[compound_description {ss_t} {struct/class} $SS].*$SS_fields"
+
+gdb_test_multiple "explore ss_ptr" "" {
+    -re "[pointer_description {ss_ptr} $SS].*" {
+        pass "explore ss_ptr"
+        gdb_test_multiple "y" "explore_as_single_value_pointer" {
+            -re "$SS_fields" {
+                pass "explore ss_ptr as single value pointer"
+            }
+        }
+    }
+}
+
+gdb_test_multiple "explore darray_ref" "" {
+    -re "[pointer_description {darray_ref} {double}].*" {
+        pass "explore darray_ref"
+        gdb_test_multiple "n" "no_to_explore_as_pointer" {
+            -re "Continue exploring it as a pointer to an array \[\[\]y/n\[\]\]: " {
+                pass "no_to_explore_as_pointer"
+                gdb_test_multiple "y" "explore_as_array" {
+                    -re ".*Enter the index of the element you want to explore in 'darray_ref':.*"  {
+                        pass "explore_as_array"
+                        gdb_test_multiple "2" "explore_as_array_index_2" {
+                            -re ".*'darray_ref\\\[2\\\]' is a scalar value of type 'double'\..*darray_ref\\\[2\\\] = 0.*" {
+                                pass "explore_as_array_index_2"
+                                gdb_test_multiple "\0" "end explore_as_array_index_2" {
+                                    -re ".*Returning to parent value.*Enter the index of the element you want to explore in 'darray_ref':.*" {
+                                        pass "end explore_as_array_index_2"
+                                        gdb_test_multiple "\0" "end explore_as_array" {
+                                            -re "\[\n\r\]+" {
+                                                pass "end explore_as_array"
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        } 
+                    }
+                }
+            }
+        }
+    }
+}
+
+gdb_test_multiple "explore su" "" {
+    -re "[compound_description {su} {union} {union SimpleUnion}].*[field_choices {i} {c} {f} {d}].*$enter_field_number_prompt" {
+        pass "explore su"
+        gdb_test_multiple "3" "explore su.d" {
+            -re "[scalar_description {su.d} {double}].*[scalar_value {su.d} {100[.].*}].*$return_to_parent_prompt" {
+                pass "explore su.d"
+                gdb_test_multiple " " "end su.d exploration" {
+                    -re ".*[compound_description {su} {union} {union SimpleUnion}].*[field_choices {i} {c} {f} {d}].*$enter_field_number_prompt" {
+                        pass "end su.d exploration"
+                        gdb_test_multiple "\0" "end su exploration" {
+                            -re "$gdb_prompt" {
+                                pass "end su exploration"
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+gdb_test_multiple "explore cs" "" {
+    -re "[compound_description {cs} {struct/class} {struct ComplexStruct}].*[field_choices {s} {u} {sa}].*$enter_field_number_prompt" {
+        pass "explore cs"
+        gdb_test_multiple "0" "explore cs.s" {
+            -re "[compound_description {cs.s} {struct/class} {struct SimpleStruct}].*[field_values {a = 10} {d = 100[.].*}].*$return_to_parent_prompt" {
+                pass "explore cs.s"
+                gdb_test_multiple " " "end cs.s exploration" {
+                    -re ".*$enter_field_number_prompt" {
+                        pass "end cs.s exploration"
+                        gdb_test_multiple "\0" "end cs exploration" {
+                            -re "$gdb_prompt" {
+                                pass "end cs exploration"
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+gdb_test_multiple "explore cu" "" {
+    -re "[compound_description {cu} {union} {union ComplexUnion}].*[field_choices {s} {sa}].*$enter_field_number_prompt" {
+        pass "explore cu"
+        gdb_test_multiple "1" "explore cu.sa" {
+            -re ".*[array_description {cu.sa} $SS].*$array_index_prompt" {
+                pass "explore cu.sa"
+                gdb_test_multiple "0" "explore cu.sa\[0\]" {
+                    -re "[compound_description {\(cu.sa\)\[0\]} {struct/class} {struct SimpleStruct}].*[field_values {a = 0} {d = 100[.].*}].*$return_to_parent_prompt" {
+                        pass "explore cu.sa\[0\]"
+                        gdb_test_multiple "\0" "end cu.sa\[0\] exploration" {
+                            -re "[array_description {cu.sa} $SS]$array_index_prompt" {
+                                pass "end cu.sa\[0\] exploration"
+                            }
+                        }
+                    }
+                }
+                gdb_test_multiple "\0" "end cu.sa exploration" {
+                    -re ".*$enter_field_number_prompt" {
+                        pass "end cu.sa exploration"
+                        gdb_test_multiple "\0" "end cu exploration" {
+                            -re "$gdb_prompt" {
+                                pass "end cu exploration"
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+########################
+# Type exploration tests
+########################
+
+proc scalar_type_decsription {type} {
+    return "'$type' is a scalar type\."
+}
+
+proc child_scalar_type_description {path type} {
+    return "$path is of a scalar type '$type'\."
+}
+
+proc compound_type_description { type_name type_desc } {
+    return "'$type_name' is a $type_desc with the following fields:"
+}
+
+proc child_compound_type_description { path type_name type_desc } {
+    return "$path is a $type_desc of type '$type_name' with the following fields:"
+}
+
+proc child_array_type_description { path target_type_name } {
+    return "$path is an array of '$target_type_name'\."
+}
+
+proc typedef_type_description { type_name target_name } {
+    return "The type '$type_name' is a typedef of type '$target_name'\."
+}
+
+set SS_fields_types [field_choices {a} {d}]
+set SU_fields_types [field_choices {i} {c} {f} {d}]
+set CS_fields_types [field_choices {s} {u} {sa}]
+set CU_fields_types [field_choices {s} {sa}]
+
+set CS_field_0 "field 's' of 'struct ComplexStruct'"
+set CS_field_1 "field 'u' of 'struct ComplexStruct'"
+set CS_field_2 "field 'sa' of 'struct ComplexStruct'"
+set CS_field_2_array_element "an array element of $CS_field_2"
+
+set CU_field_0 "field 's' of 'union ComplexUnion'"
+set CU_field_1 "field 'sa' of 'union ComplexUnion'"
+set CU_field_1_array_element "an array element of $CU_field_1"
+
+gdb_test "explore int" ".*[scalar_type_decsription {int}].*"
+
+gdb_test_multiple "explore struct SimpleStruct" "" {
+    -re ".*[compound_type_description $SS {struct/class}].*$SS_fields_types.*" {
+        pass "explore struct SimpleStruct"
+        gdb_test_multiple "0" "explore type struct SimpleStruct feild 0" {
+            -re ".*[child_scalar_type_description {field 'a' of 'struct SimpleStruct'} {int}].*" {
+                pass "explore type struct SimpleStruct feild 0"
+                gdb_test_multiple "\0" "return to struct SimpleStruct from field 0" {
+                    -re ".*[compound_type_description $SS {struct/class}].*$SS_fields_types.*" {
+                        pass "return to struct SimpleStruct from field 0"
+                    }
+                }
+            }
+        }
+        gdb_test_multiple "1" "explore type struct SimpleStruct feild 1" {
+            -re ".*[child_scalar_type_description {field 'd' of 'struct SimpleStruct'} {double}].*" {
+                pass "explore type struct SimpleStruct feild 1"
+                gdb_test_multiple "\0" "return to struct SimpleStruct from field 1" {
+                    -re ".*[compound_type_description $SS {struct/class}].*$SS_fields_types.*" {
+                        pass "return to struct SimpleStruct from field 1"
+                    }
+                }
+            }
+        }
+        gdb_test_multiple "\0" "return to GDB prompt from struct SimpleStruct" {
+            -re "$gdb_prompt" {
+                pass "return to GDB prompt from struct SimpleStruct"
+            }
+        }
+    }
+}
+
+gdb_test_multiple "explore union SimpleUnion" "" {
+  -re ".*[compound_type_description $SU {union}].*$SU_fields_types.*" {
+      pass "explore union SimpleUnion"
+        gdb_test_multiple "0" "explore type union SimpleUnion feild 0" {
+            -re ".*[child_scalar_type_description {field 'i' of 'union SimpleUnion'} {int}].*" {
+                pass "explore type union SimpleUnion feild 0"
+                gdb_test_multiple "\0" "return to union SimpleUnion from field 0" {
+                    -re ".*[compound_type_description $SU {union}].*$SU_fields_types.*" {
+                        pass "return to union SimpleUnion from field 0"
+                    }
+                }
+            }
+        }
+        gdb_test_multiple "1" "explore type union SimpleUnion feild 1" {
+            -re ".*[child_scalar_type_description {field 'c' of 'union SimpleUnion'} {char}].*" {
+                pass "explore type union SimpleUnion feild 1"
+                gdb_test_multiple "\0" "return to union SimpleUnion from field 1" {
+                    -re ".*[compound_type_description $SU {union}].*$SU_fields_types.*" {
+                        pass "return to union SimpleUnion from field 1"
+                    }
+                }
+            }
+        }
+        gdb_test_multiple "2" "explore type union SimpleUnion feild 2" {
+            -re ".*[child_scalar_type_description {field 'f' of 'union SimpleUnion'} {float}].*" {
+                pass "explore type union SimpleUnion feild 2"
+                gdb_test_multiple "\0" "return to union SimpleUnion from field 2" {
+                    -re ".*[compound_type_description $SU {union}].*$SU_fields_types.*" {
+                        pass "return to union SimpleUnion from field 2"
+                    }
+                }
+            }
+        }
+        gdb_test_multiple "3" "explore type union SimpleUnion feild 3" {
+            -re ".*[child_scalar_type_description {field 'd' of 'union SimpleUnion'} {double}].*" {
+                pass "explore type union SimpleUnion feild 3"
+                gdb_test_multiple "\0" "return to union SimpleUnion from field 3" {
+                    -re ".*[compound_type_description $SU {union}].*$SU_fields_types.*" {
+                        pass "return to union SimpleUnion from field 3"
+                    }
+                }
+            }
+        }
+        gdb_test_multiple "\0" "return to GDB prompt from union SimpleUnion" {
+            -re "$gdb_prompt" {
+                pass "return to GDB prompt from union SimpleUnion"
+            }
+        }
+  }
+}
+
+gdb_test_multiple "explore SS" "" {
+    -re ".*[typedef_type_description {SS} $SS].*[compound_type_description {SS} {struct/class}].*$SS_fields_types.*" {
+        pass "explore SS"
+        gdb_test_multiple "0" "explore type SS feild 0" {
+            -re ".*[child_scalar_type_description {field 'a' of 'SS'} {int}].*" {
+                pass "explore type SS feild 0"
+                gdb_test_multiple "\0" "return to SS from field 0" {
+                    -re ".*[compound_type_description {SS} {struct/class}].*$SS_fields_types.*" {
+                        pass "return to SS from field 0"
+                    }
+                }
+            }
+        }
+        gdb_test_multiple "1" "explore type SS feild 1" {
+            -re ".*[child_scalar_type_description {field 'd' of 'SS'} {double}].*" {
+                pass "explore type SS feild 1"
+                gdb_test_multiple "\0" "return to struct SimpleStruct from field 1" {
+                    -re ".*[compound_type_description {SS} {struct/class}].*$SS_fields_types.*" {
+                        pass "return to SS field 1"
+                    }
+                }
+            }
+        }
+        gdb_test_multiple "\0" "return to GDB prompt from SS" {
+            -re "$gdb_prompt" {
+                pass "return to GDB prompt from SS"
+            }
+        }
+    }
+}
+
+gdb_test_multiple "explore type struct ComplexStruct" "" {
+    -re ".*[compound_type_description $CS {struct/class}].*$CS_fields_types.*" {
+        pass "explore type struct ComplexStruct"
+        gdb_test_multiple "0" "explore type struct ComplexStruct field 0" {
+            -re ".*[child_compound_type_description $CS_field_0 $SS {struct/class}].*$SS_fields_types.*" {
+                pass "explore type struct ComplexStruct field 0"
+                gdb_test_multiple "\0" "return to ComplexStruct from field 0" {
+                    -re ".*[compound_type_description $CS {struct/class}].*$CS_fields_types.*" {
+                        pass "return to ComplexStruct from field 0"
+                    }
+                }
+            }
+        }
+        gdb_test_multiple "1" "explore type struct ComplexStruct field 1" {
+            -re ".*[child_compound_type_description $CS_field_1 $SU {union}].*$SU_fields_types.*" {
+                pass "explore type struct ComplexStruct field 1"
+                gdb_test_multiple "\0" "return to ComplexStruct from field 1" {
+                    -re ".*[compound_type_description $CS {struct/class}].*$CS_fields_types.*" {
+                        pass "return to ComplexStruct from field 1"
+                    }
+                }
+            }
+        }
+        gdb_test_multiple "2" "explore type struct ComplexStruct field 2" {
+            -re ".*[child_array_type_description $CS_field_2 {SS}].*" {
+                pass "explore type struct ComplexStruct field 2"
+                gdb_test_multiple "\0" "return to ComplexStruct from field 2" {
+                    -re ".*[compound_type_description $CS {struct/class}].*$CS_fields_types.*" {
+                        pass "return to ComplexStruct from field 2"
+                    }
+                }
+            }
+        }
+        gdb_test_multiple "\0" "return to GDB prompt from ComplexStruct type exploration" {
+            -re "$gdb_prompt" {
+                pass "return to GDB prompt from ComplexStruct type exploration"
+            }
+        }
+    }
+}
+
+gdb_test_multiple "explore type union ComplexUnion" "" {
+    -re ".*[compound_type_description $CU {union}].*$CU_fields_types.*" {
+        pass "explore type union ComplexUnion"
+        gdb_test_multiple "0" "explore type union ComplexStruct field 0" {
+            -re ".*[child_compound_type_description $CU_field_0 $SS {struct/class}].*$SS_fields_types.*" {
+                pass "explore type union ComplexUnion field 0"
+                gdb_test_multiple "\0" "return to ComplexUnion from field 0" {
+                    -re ".*[compound_type_description $CU {union}].*$CU_fields_types.*" {
+                        pass "return to ComplexUnion from field 0"
+                    }
+                }
+            }
+        }
+        gdb_test_multiple "1" "explore type union ComplexUnion field 1" {
+            -re ".*[child_array_type_description $CU_field_1 $SS].*" {
+                pass "explore type union ComplexUnion field 1"
+                gdb_test_multiple "\0" "return to ComplexUnion array" {
+                    -re ".*[compound_type_description $CU {union}].*$CU_fields_types.*" {
+                        pass "return to ComplexUnion from field 1"
+                    }
+                }
+            }
+        }
+        gdb_test_multiple "\0" "return to GDB prompt from ComplexUnion type exploration" {
+            -re "$gdb_prompt" {
+                pass "return to GDB prompt from ComplexUnion type exploration"
+            }
+        }
+    }
+}
+
+gdb_test_multiple "explore type cu" "" {
+    -re "'cu' is of type 'union ComplexUnion'.*[compound_type_description $CU {union}].*$CU_fields_types.*" {
+        pass "explore type union ComplexUnion"
+        gdb_test_multiple "0" "explore type union ComplexStruct field 0" {
+            -re ".*[child_compound_type_description $CU_field_0 $SS {struct/class}].*$SS_fields_types.*" {
+                pass "explore type union ComplexUnion field 0"
+                gdb_test_multiple "\0" "return to ComplexUnion from field 0" {
+                    -re ".*[compound_type_description $CU {union}].*$CU_fields_types.*" {
+                        pass "return to ComplexUnion from field 0"
+                    }
+                }
+            }
+        }
+        gdb_test_multiple "1" "explore type union ComplexUnion field 1" {
+            -re ".*[child_array_type_description $CU_field_1 $SS].*" {
+                pass "explore type union ComplexUnion field 1"
+                gdb_test_multiple "\0" "return to ComplexUnion array" {
+                    -re ".*[compound_type_description $CU {union}].*$CU_fields_types.*" {
+                        pass "return to ComplexUnion from field 1"
+                    }
+                }
+            }
+        }
+        gdb_test_multiple "\0" "return to GDB prompt from ComplexUnion type exploration" {
+            -re "$gdb_prompt" {
+                pass "return to GDB prompt from ComplexUnion type exploration"
+            }
+        }
+    }
+}
diff --git a/gdb/testsuite/gdb.python/py-finish-breakpoint.exp b/gdb/testsuite/gdb.python/py-finish-breakpoint.exp
index 96ff971..d521021 100644
--- a/gdb/testsuite/gdb.python/py-finish-breakpoint.exp
+++ b/gdb/testsuite/gdb.python/py-finish-breakpoint.exp
@@ -16,10 +16,6 @@
 # This file is part of the GDB testsuite.  It tests the mechanism
 # exposing values to Python.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if {[skip_shlib_tests]} {
 	untested py-finish-breakpoint.exp
     return 0
@@ -29,15 +25,13 @@ load_lib gdb-python.exp
 
 set libfile "py-events-shlib"
 set libsrc  $srcdir/$subdir/$libfile.c
-set lib_sl  $objdir/$subdir/$libfile-nodebug.so
+set lib_sl  [standard_output_file $libfile-nodebug.so]
 set lib_opts ""
 
-set testfile "py-finish-breakpoint"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 set exec_opts [list debug shlib=$lib_sl]
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.python/py-finish-breakpoint.py b/gdb/testsuite/gdb.python/py-finish-breakpoint.py
index fb462bb..2878bb8 100644
--- a/gdb/testsuite/gdb.python/py-finish-breakpoint.py
+++ b/gdb/testsuite/gdb.python/py-finish-breakpoint.py
@@ -86,4 +86,4 @@ class SimpleFinishBreakpoint(gdb.FinishBreakpoint):
 	def out_of_scope(self):
 		print "SimpleFinishBreakpoint out of scope"
 
-print "Python script importedd"
+print "Python script imported"
diff --git a/gdb/testsuite/gdb.python/py-finish-breakpoint2.exp b/gdb/testsuite/gdb.python/py-finish-breakpoint2.exp
index 9e65d6c..3b08ef8 100644
--- a/gdb/testsuite/gdb.python/py-finish-breakpoint2.exp
+++ b/gdb/testsuite/gdb.python/py-finish-breakpoint2.exp
@@ -16,28 +16,15 @@
 # This file is part of the GDB testsuite.  It tests the mechanism
 # exposing values to Python.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib gdb-python.exp
 
-set testfile "py-finish-breakpoint2"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 set pyfile  ${srcdir}/${subdir}/${testfile}.py
 
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
-    untested "Couldn't compile ${srcfile}"
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
     return -1
 }
 
-# Start with a fresh gdb.
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 # Skip all tests if Python scripting is not enabled.
 if { [skip_python_tests] } { continue }
 
diff --git a/gdb/testsuite/gdb.python/py-frame-inline.exp b/gdb/testsuite/gdb.python/py-frame-inline.exp
index 6d45ba2..49fa87e 100644
--- a/gdb/testsuite/gdb.python/py-frame-inline.exp
+++ b/gdb/testsuite/gdb.python/py-frame-inline.exp
@@ -15,8 +15,8 @@
 
 load_lib gdb-python.exp
 
-set testfile "py-frame-inline"
-set srcfile ${testfile}.c
+standard_testfile
+
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
     return -1
 }
diff --git a/gdb/testsuite/gdb.python/py-frame.exp b/gdb/testsuite/gdb.python/py-frame.exp
index f3cb069..993e774 100644
--- a/gdb/testsuite/gdb.python/py-frame.exp
+++ b/gdb/testsuite/gdb.python/py-frame.exp
@@ -16,14 +16,10 @@
 # This file is part of the GDB testsuite.  It tests the mechanism
 # exposing values to Python.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib gdb-python.exp
 
-set testfile "py-frame"
-set srcfile ${testfile}.c
+standard_testfile
+
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
     return -1
 }
diff --git a/gdb/testsuite/gdb.python/py-function.exp b/gdb/testsuite/gdb.python/py-function.exp
index f813254..b0b35b7 100644
--- a/gdb/testsuite/gdb.python/py-function.exp
+++ b/gdb/testsuite/gdb.python/py-function.exp
@@ -16,10 +16,6 @@
 # This file is part of the GDB testsuite.  It tests the mechanism
 # exposing convenience functions to Python.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib gdb-python.exp
 
 # Start with a fresh gdb.
diff --git a/gdb/testsuite/gdb.python/py-inferior.exp b/gdb/testsuite/gdb.python/py-inferior.exp
index 6838138..b40a514 100644
--- a/gdb/testsuite/gdb.python/py-inferior.exp
+++ b/gdb/testsuite/gdb.python/py-inferior.exp
@@ -16,14 +16,10 @@
 # This file is part of the GDB testsuite.  It tests the mechanism
 # exposing inferiors to Python.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib gdb-python.exp
 
-set testfile "py-inferior"
-set srcfile ${testfile}.c
+standard_testfile
+
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
     return -1
 }
@@ -220,4 +216,4 @@ gdb_test "add-inferior" "Added inferior 3" "Create new inferior"
 gdb_test "inferior 3" ".*" "Switch to third inferior"
 gdb_test "py print gdb.selected_inferior().num" "3" "Third inferior selected"
 gdb_test "inferior 1" ".*" "Switch to first inferior"
-gdb_test_no_output "remove-inferiors 3" "Remove second inferior"
\ No newline at end of file
+gdb_test_no_output "remove-inferiors 3" "Remove second inferior"
diff --git a/gdb/testsuite/gdb.python/py-infthread.exp b/gdb/testsuite/gdb.python/py-infthread.exp
index 756a7d3..0ddc912 100644
--- a/gdb/testsuite/gdb.python/py-infthread.exp
+++ b/gdb/testsuite/gdb.python/py-infthread.exp
@@ -16,14 +16,10 @@
 # This file is part of the GDB testsuite.  It tests the mechanism
 # exposing inferior threads to Python.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib gdb-python.exp
 
-set testfile "py-infthread"
-set srcfile ${testfile}.c
+standard_testfile
+
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
     return -1
 }
@@ -41,8 +37,6 @@ if ![runto_main] then {
     return 0
 }
 
-runto [gdb_get_line_number "Break here."]
-
 # Test basic gdb.Inferior attributes and methods.
 
 gdb_py_test_silent_cmd "python t0 = gdb.selected_thread ()" "test gdb.selected_thread" 1
diff --git a/gdb/testsuite/gdb.python/py-mi.exp b/gdb/testsuite/gdb.python/py-mi.exp
index 8d54a8d..e7034a1 100644
--- a/gdb/testsuite/gdb.python/py-mi.exp
+++ b/gdb/testsuite/gdb.python/py-mi.exp
@@ -24,9 +24,7 @@ if [mi_gdb_start] {
     continue
 }
 
-set testfile "py-mi"
-set srcfile py-prettyprint.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile py-prettyprint.c
 set pyfile py-prettyprint.py
 if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DMI}] != "" } {
     untested ${testfile}.exp
@@ -291,6 +289,10 @@ mi_gdb_test "-var-evaluate-expression me" \
 	"\\^done,value=\"<error reading variable: Cannot access memory.>.*\"" \
 	"evaluate me varobj"
 
+# Regression test for python/14836.
+mi_create_dynamic_varobj children_as_list children_as_list \
+    "printer whose children are returned as a list"
+
 # C++ MI tests
 gdb_exit
 if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}-cxx" \
diff --git a/gdb/testsuite/gdb.python/py-objfile-script.exp b/gdb/testsuite/gdb.python/py-objfile-script.exp
index 2d6260c..abdb127 100644
--- a/gdb/testsuite/gdb.python/py-objfile-script.exp
+++ b/gdb/testsuite/gdb.python/py-objfile-script.exp
@@ -16,15 +16,9 @@
 # This file is part of the GDB testsuite.  It tests automagic loading of
 # -gdb.py scripts.
 
-if $tracelevel then {
-    strace $tracelevel
-}
+standard_testfile
 
-set testfile "py-objfile-script"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
-    untested "Couldn't compile ${srcfile}"
+if {[build_executable $testfile.exp $testfile $srcfile debug] == -1} {
     return -1
 }
 
@@ -41,10 +35,11 @@ if { [skip_python_tests] } { continue }
 set remote_python_file [remote_download host ${srcdir}/${subdir}/${testfile}-gdb.py.in ${subdir}/${testfile}-gdb.py]
 
 gdb_reinitialize_dir $srcdir/$subdir
+gdb_test_no_output "set auto-load safe-path ${remote_python_file}" "set auto-load safe-path"
 gdb_load ${binfile}
 
 # Verify gdb loaded the script.
-gdb_test "info auto-load-scripts" "Yes.*/${testfile}-gdb.py.*"
+gdb_test "info auto-load python-scripts" "Yes.*/${testfile}-gdb.py.*"
 
 if ![runto_main] {
     perror "couldn't run to main"
diff --git a/gdb/testsuite/gdb.python/py-objfile.exp b/gdb/testsuite/gdb.python/py-objfile.exp
index ca74718..cbd0f87 100644
--- a/gdb/testsuite/gdb.python/py-objfile.exp
+++ b/gdb/testsuite/gdb.python/py-objfile.exp
@@ -16,14 +16,9 @@
 # This file is part of the GDB testsuite.  It tests the program space
 # support in Python.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib gdb-python.exp
 
-set testfile "py-objfile"
-set srcfile ${testfile}.c
+standard_testfile
 
 if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
     return -1
diff --git a/gdb/testsuite/gdb.python/py-parameter.exp b/gdb/testsuite/gdb.python/py-parameter.exp
index 2985d68..08538ea 100644
--- a/gdb/testsuite/gdb.python/py-parameter.exp
+++ b/gdb/testsuite/gdb.python/py-parameter.exp
@@ -16,10 +16,6 @@
 # This file is part of the GDB testsuite.
 # It tests gdb.parameter and gdb.Parameter.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib gdb-python.exp
 
 # Start with a fresh gdb.
diff --git a/gdb/testsuite/gdb.python/py-pp-maint.c b/gdb/testsuite/gdb.python/py-pp-maint.c
index f65e5f7..e91193a 100644
--- a/gdb/testsuite/gdb.python/py-pp-maint.c
+++ b/gdb/testsuite/gdb.python/py-pp-maint.c
@@ -17,6 +17,16 @@
 
 #include <string.h>
 
+enum flag_enum
+  {
+    FLAG_1 = 1,
+    FLAG_2 = 2,
+    FLAG_3 = 4,
+    ALL = FLAG_1 | FLAG_2 | FLAG_3
+  };
+
+enum flag_enum fval;
+
 struct function_lookup_test
 {
   int x,y;
diff --git a/gdb/testsuite/gdb.python/py-pp-maint.exp b/gdb/testsuite/gdb.python/py-pp-maint.exp
index 1a2b213..3f08ba1 100644
--- a/gdb/testsuite/gdb.python/py-pp-maint.exp
+++ b/gdb/testsuite/gdb.python/py-pp-maint.exp
@@ -16,10 +16,6 @@
 # This file is part of the GDB testsuite.  It tests Python-based
 # pretty-printing for the CLI.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if [is_remote host] {
     untested "py-pp-maint.exp can only be run locally"
     return -1
@@ -27,24 +23,14 @@ if [is_remote host] {
 
 load_lib gdb-python.exp
 
-set testfile "py-pp-maint"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
-# Start with a fresh gdb.
-gdb_exit
-gdb_start
-
-# Skip all tests if Python scripting is not enabled.
-if { [skip_python_tests] } { continue }
-
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "debug"] != "" } {
-    untested "Couldn't compile ${srcfile}"
+if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} {
     return -1
 }
 
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+# Skip all tests if Python scripting is not enabled.
+if { [skip_python_tests] } { continue }
 
 if ![runto_main ] then {
     fail "Can't run to main"
@@ -74,23 +60,25 @@ gdb_test "print flt" " = x=<42> y=<43>" \
 gdb_test "print ss" " = a=<a=<1> b=<$hex>> b=<a=<2> b=<$hex>>" \
     "print ss enabled #1"
 
+set num_pp 6
+
 gdb_test "disable pretty-printer" \
-    "5 printers disabled.*0 of 5 printers enabled"
+    "$num_pp printers disabled.*0 of $num_pp printers enabled"
 
 gdb_test "enable pretty-printer" \
-    "5 printers enabled.*5 of 5 printers enabled"
+    "$num_pp printers enabled.*$num_pp of $num_pp printers enabled"
 
 gdb_test "disable pretty-printer global" \
-    "5 printers disabled.*0 of 5 printers enabled"
+    "$num_pp printers disabled.*0 of $num_pp printers enabled"
 
 gdb_test "enable pretty-printer" \
-    "5 printers enabled.*5 of 5 printers enabled"
+    "$num_pp printers enabled.*$num_pp of $num_pp printers enabled"
 
 gdb_test "disable pretty-printer global lookup_function_lookup_test" \
-    "1 printer disabled.*4 of 5 printers enabled"
+    "1 printer disabled.*[expr $num_pp - 1] of $num_pp printers enabled"
 
 gdb_test "disable pretty-printer global pp-test;.*" \
-    "4 printers disabled.*0 of 5 printers enabled"
+    "[expr $num_pp - 1] printers disabled.*0 of $num_pp printers enabled"
 
 gdb_test "info pretty-printer global .*function" \
     {.*function_lookup_test \[disabled\].*}
@@ -105,19 +93,22 @@ gdb_test "print ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}" \
     "print ss disabled"
 
 gdb_test "enable pretty-printer global lookup_function_lookup_test" \
-    "1 printer enabled.*1 of 5 printers enabled"
+    "1 printer enabled.*1 of $num_pp printers enabled"
 
 # This doesn't enable any printers because each subprinter in the collection
 # is still individually disabled.  But this is still needed, to enable the
 # collection itself.
 gdb_test "enable pretty-printer global pp-test" \
-    "0 printers enabled.*1 of 5 printers enabled"
+    "0 printers enabled.*1 of $num_pp printers enabled"
 
 gdb_test "enable pretty-printer global pp-test;.*ss.*" \
-    "2 printers enabled.*3 of 5 printers enabled"
+    "2 printers enabled.*[expr $num_pp - 3] of $num_pp printers enabled"
 
 gdb_test "enable pretty-printer global pp-test;.*s.*" \
-    "2 printers enabled.*5 of 5 printers enabled"
+    "2 printers enabled.*[expr $num_pp - 1] of $num_pp printers enabled"
+
+gdb_test "enable pretty-printer global pp-test;.*" \
+    "1 printer enabled.*$num_pp of $num_pp printers enabled"
 
 gdb_test "info pretty-printer" \
     {.*function_lookup_test.*pp-test.*struct ss.*}
@@ -127,3 +118,15 @@ gdb_test "print flt" " = x=<42> y=<43>" \
 
 gdb_test "print ss" " = a=<a=<1> b=<$hex>> b=<a=<2> b=<$hex>>" \
     "print ss re-enabled"
+
+gdb_test "print (enum flag_enum) (FLAG_1)" \
+    " = 0x1 .FLAG_1." \
+    "print FLAG_1"
+
+gdb_test "print (enum flag_enum) (FLAG_1 | FLAG_3)" \
+    " = 0x5 .FLAG_1 | FLAG_3." \
+    "print FLAG_1 | FLAG_3"
+
+gdb_test "print (enum flag_enum) (4 + 8)" \
+    " = 0xc .FLAG_1 | <unknown: 0x8>." \
+    "print FLAG_1 | 8"
diff --git a/gdb/testsuite/gdb.python/py-pp-maint.py b/gdb/testsuite/gdb.python/py-pp-maint.py
index c988f88..1677371 100644
--- a/gdb/testsuite/gdb.python/py-pp-maint.py
+++ b/gdb/testsuite/gdb.python/py-pp-maint.py
@@ -67,6 +67,9 @@ def build_pretty_printer():
     pp.add_printer('struct ss', '^struct ss$', lambda val: pp_ss(val))
     pp.add_printer('ss', '^ss$', lambda val: pp_ss(val))
 
+    pp.add_printer('enum flag_enum', '^flag_enum$',
+                   gdb.printing.FlagEnumerationPrinter('enum flag_enum'))
+
     return pp
 
 
diff --git a/gdb/testsuite/gdb.python/py-prettyprint.c b/gdb/testsuite/gdb.python/py-prettyprint.c
index 0ff7b33..b1a12b1 100644
--- a/gdb/testsuite/gdb.python/py-prettyprint.c
+++ b/gdb/testsuite/gdb.python/py-prettyprint.c
@@ -48,6 +48,10 @@ struct hint_error {
   int x;
 };
 
+struct children_as_list {
+  int x;
+};
+
 #ifdef __cplusplus
 struct S : public s {
   int zs;
@@ -219,6 +223,22 @@ struct nullstr
 struct string_repr string_1 = { { "one" } };
 struct string_repr string_2 = { { "two" } };
 
+static int
+eval_func (int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8)
+{
+  return p1;
+}
+
+static void
+eval_sub (void)
+{
+  struct eval_type_s { int x; } eval1 = { 1 }, eval2 = { 2 }, eval3 = { 3 },
+				eval4 = { 4 }, eval5 = { 5 }, eval6 = { 6 },
+				eval7 = { 7 }, eval8 = { 8 }, eval9 = { 9 };
+
+  eval1.x++; /* eval-break */
+}
+
 int
 main ()
 {
@@ -236,6 +256,7 @@ main ()
   struct ns ns, ns2;
   struct lazystring estring, estring2;
   struct hint_error hint_error;
+  struct children_as_list children_as_list;
 
   nstype.elements = narray;
   nstype.len = 0;
@@ -309,5 +330,7 @@ main ()
   
   nstype2 = nstype;
 
+  eval_sub ();
+
   return 0;      /* break to inspect struct and union */
 }
diff --git a/gdb/testsuite/gdb.python/py-prettyprint.exp b/gdb/testsuite/gdb.python/py-prettyprint.exp
index dc4116b..22af83c 100644
--- a/gdb/testsuite/gdb.python/py-prettyprint.exp
+++ b/gdb/testsuite/gdb.python/py-prettyprint.exp
@@ -16,15 +16,9 @@
 # This file is part of the GDB testsuite.  It tests Python-based
 # pretty-printing for the CLI.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib gdb-python.exp
 
-set testfile "py-prettyprint"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
 # Start with a fresh gdb.
 gdb_exit
@@ -129,14 +123,19 @@ if ![runto_main ] then {
     return
 }
 
-gdb_test "b [gdb_get_line_number {break to inspect} ${testfile}.c ]" \
-    ".*Breakpoint.*"
-gdb_test "continue" ".*Breakpoint.*"
-
 set remote_python_file [remote_download host ${srcdir}/${subdir}/${testfile}.py]
 
 gdb_test_no_output "python execfile ('${remote_python_file}')"
 
+gdb_breakpoint [gdb_get_line_number "eval-break"]
+gdb_continue_to_breakpoint "eval-break" ".* eval-break .*"
+
+gdb_test "info locals" "eval9 = eval=<123456789>"
+
+gdb_test "b [gdb_get_line_number {break to inspect} ${testfile}.c ]" \
+    ".*Breakpoint.*"
+gdb_test "continue" ".*Breakpoint.*"
+
 gdb_test "print ss" " = a=< a=<1> b=<$hex>> b=< a=<2> b=<$hex>>" \
     "print ss enabled #1"
 
diff --git a/gdb/testsuite/gdb.python/py-prettyprint.py b/gdb/testsuite/gdb.python/py-prettyprint.py
index 52ffd1a..6e960e6 100644
--- a/gdb/testsuite/gdb.python/py-prettyprint.py
+++ b/gdb/testsuite/gdb.python/py-prettyprint.py
@@ -174,6 +174,18 @@ class pp_hint_error:
     def display_hint (self):
         raise Exception("hint failed")
 
+class pp_children_as_list:
+    "Throw error from display_hint"
+
+    def __init__(self, val):
+        self.val = val
+
+    def to_string(self):
+        return 'children_as_list_val'
+
+    def children (self):
+        return [('one', 1)]
+
 class pp_outer:
     "Print struct outer"
 
@@ -199,6 +211,14 @@ class MemoryErrorString:
     def display_hint (self):
         return 'string'
 
+class pp_eval_type:
+    def __init__(self, val):
+        self.val = val
+
+    def to_string(self):
+	gdb.execute("bt", to_string=True)
+        return "eval=<" + str(gdb.parse_and_eval("eval_func (123456789, 2, 3, 4, 5, 6, 7, 8)")) + ">"
+
 def lookup_function (val):
     "Look-up and return a pretty-printer that can print val."
 
@@ -274,8 +294,13 @@ def register_pretty_printers ():
     pretty_printers_dict[re.compile ('^struct hint_error$')]  = pp_hint_error
     pretty_printers_dict[re.compile ('^hint_error$')]  = pp_hint_error
 
+    pretty_printers_dict[re.compile ('^struct children_as_list$')]  = pp_children_as_list
+    pretty_printers_dict[re.compile ('^children_as_list$')]  = pp_children_as_list
+
     pretty_printers_dict[re.compile ('^memory_error$')]  = MemoryErrorString
 
+    pretty_printers_dict[re.compile ('^eval_type_s$')] = pp_eval_type
+
 pretty_printers_dict = {}
 
 register_pretty_printers ()
diff --git a/gdb/testsuite/gdb.python/py-progspace.exp b/gdb/testsuite/gdb.python/py-progspace.exp
index 1d08325..ee7ce9e 100644
--- a/gdb/testsuite/gdb.python/py-progspace.exp
+++ b/gdb/testsuite/gdb.python/py-progspace.exp
@@ -16,15 +16,9 @@
 # This file is part of the GDB testsuite.  It tests the program space
 # support in Python.
 
-if $tracelevel then {
-    strace $tracelevel
-}
+standard_testfile
 
-set testfile "py-progspace"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
-    untested "Couldn't compile ${srcfile}"
+if {[build_executable $testfile.exp $testfile $srcfile debug] == -1} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.python/py-prompt.exp b/gdb/testsuite/gdb.python/py-prompt.exp
index 4d71090..b5d9368 100644
--- a/gdb/testsuite/gdb.python/py-prompt.exp
+++ b/gdb/testsuite/gdb.python/py-prompt.exp
@@ -16,14 +16,12 @@
 # This file is part of the GDB testsuite.  It tests the mechanism
 # for defining the prompt in Python.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
-set testfile "py-prompt"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
+# We need to use TCL's exec to get the pid.
+if [is_remote target] then {
+    return 0
+}
 
 load_lib gdb-python.exp
 load_lib prompt.exp
@@ -38,8 +36,7 @@ gdb_reinitialize_dir $srcdir/$subdir
 if { [skip_python_tests] } { continue }
 gdb_exit
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
-    untested py-prompt.exp
+if {[build_executable $testfile.exp $testfile $srcfile debug] == -1} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.python/py-section-script.exp b/gdb/testsuite/gdb.python/py-section-script.exp
index 56fd792..8135b96 100644
--- a/gdb/testsuite/gdb.python/py-section-script.exp
+++ b/gdb/testsuite/gdb.python/py-section-script.exp
@@ -29,15 +29,9 @@ if {![istarget *-*-linux*]
     return
 }
 
-if $tracelevel then {
-    strace $tracelevel
-}
+standard_testfile
 
-set testfile "py-section-script"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
-    untested "Couldn't compile ${srcfile}"
+if {[build_executable $testfile.exp $testfile $srcfile debug] == -1} {
     return -1
 }
 
@@ -53,14 +47,15 @@ if { [skip_python_tests] } { continue }
 set remote_python_file [remote_download host ${srcdir}/${subdir}/${testfile}.py]
 
 gdb_reinitialize_dir $srcdir/$subdir
+gdb_test_no_output "set auto-load safe-path ${remote_python_file}" "set auto-load safe-path"
 gdb_load ${binfile}
 
 # Verify gdb loaded the script.
-gdb_test "info auto-load-scripts" "Yes.*${testfile}.py.*full name: .*/${testfile}.py.*"
+gdb_test "info auto-load python-scripts" "Yes.*${testfile}.py.*full name: .*/${testfile}.py.*"
 # Again, with a regexp this time.
-gdb_test "info auto-load-scripts ${testfile}" "Yes.*${testfile}.py.*full name: .*/${testfile}.py.*"
+gdb_test "info auto-load python-scripts ${testfile}" "Yes.*${testfile}.py.*full name: .*/${testfile}.py.*"
 # Again, with a regexp that matches no scripts.
-gdb_test "info auto-load-scripts no-script-matches-this" \
+gdb_test "info auto-load python-scripts no-script-matches-this" \
   "No auto-load scripts matching no-script-matches-this."
 
 if ![runto_main] {
diff --git a/gdb/testsuite/gdb.python/py-shared.exp b/gdb/testsuite/gdb.python/py-shared.exp
index fa57de7..454a325 100644
--- a/gdb/testsuite/gdb.python/py-shared.exp
+++ b/gdb/testsuite/gdb.python/py-shared.exp
@@ -21,12 +21,11 @@ if {[skip_shlib_tests]} {
     return 0
 }
 
-set testfile "py-shared"
-set srcfile  ${testfile}.c
+standard_testfile
+
 set libfile  "py-shared-sl"
 set libsrc   ${libfile}.c
-set library  ${objdir}/${subdir}/${libfile}.sl
-set binfile  ${objdir}/${subdir}/${testfile}
+set library  [standard_output_file ${libfile}.sl]
 
 if { [gdb_compile_shlib ${srcdir}/${subdir}/${libsrc} ${library} "debug"] != "" } {
     untested "Could not compile shared library."
@@ -41,10 +40,7 @@ if { [gdb_compile ${srcdir}/${subdir}/${srcfile} ${binfile} executable $exec_opt
 }
 
 # Start with a fresh gdb.
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart $testfile
 gdb_load_shlibs ${library}
 
 # Skip all tests if Python scripting is not enabled.
diff --git a/gdb/testsuite/gdb.python/py-symbol.c b/gdb/testsuite/gdb.python/py-symbol.c
index 72469be..82395f1 100644
--- a/gdb/testsuite/gdb.python/py-symbol.c
+++ b/gdb/testsuite/gdb.python/py-symbol.c
@@ -35,13 +35,20 @@ class SimpleClass
 };
 #endif
 
+int qq = 72;			/* line of qq */
+
 int func (int arg)
 {
   int i = 2;
-  i = i * arg;
-  return arg; /* Block break here.  */
+  i = i * arg; /* Block break here.  */
+  return arg;
 }
 
+struct simple_struct
+{
+  int a;
+};
+
 int main (int argc, char *argv[])
 {
 #ifdef __cplusplus
@@ -49,6 +56,7 @@ int main (int argc, char *argv[])
 #endif
   int a = 0;
   int result;
+  struct simple_struct ss = { 10 };
   enum tag {one, two, three};
   enum tag t = one;
 
diff --git a/gdb/testsuite/gdb.python/py-symbol.exp b/gdb/testsuite/gdb.python/py-symbol.exp
index aa952fb..bc20ee4 100644
--- a/gdb/testsuite/gdb.python/py-symbol.exp
+++ b/gdb/testsuite/gdb.python/py-symbol.exp
@@ -16,26 +16,14 @@
 # This file is part of the GDB testsuite.  It tests the mechanism
 # exposing values to Python.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib gdb-python.exp
 
-set testfile "py-symbol"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
-    untested "Couldn't compile ${srcfile}"
+standard_testfile
+
+if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} {
     return -1
 }
 
-# Start with a fresh gdb.
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 # Skip all tests if Python scripting is not enabled.
 if { [skip_python_tests] } { continue }
 
@@ -46,6 +34,21 @@ gdb_py_test_silent_cmd "python main_func = gdb.lookup_global_symbol(\"main\")" "
 gdb_test "python print main_func.is_function" "True" "Test main_func.is_function"
 gdb_test "python print gdb.lookup_global_symbol(\"junk\")" "None" "Test lookup_global_symbol(\"junk\")"
 
+gdb_test "python print gdb.lookup_global_symbol('main').value()" "$hex .main." \
+    "print value of main"
+
+set qq_line [gdb_get_line_number "line of qq"]
+gdb_test "python print gdb.lookup_global_symbol('qq').line" "$qq_line" \
+    "print line number of qq"
+
+gdb_test "python print gdb.lookup_global_symbol('qq').value()" "72" \
+    "print value of qq"
+
+gdb_test "python print gdb.lookup_global_symbol('qq').needs_frame" \
+    "False" \
+    "print whether qq needs a frame"
+
+
 if ![runto_main] then {
     fail "Can't run to main"
     return 0
@@ -88,6 +91,14 @@ gdb_test "python print a\[0\].is_argument" "False" "Test a.is_argument"
 gdb_test "python print a\[0\].is_function" "False" "Test a.is_function"
 gdb_test "python print a\[0\].addr_class == gdb.SYMBOL_LOC_COMPUTED" "True" "Test a.addr_class"
 
+gdb_test "python print a\[0\].value()" \
+    "symbol requires a frame to compute its value.*"\
+    "try to print value of a without a frame"
+gdb_test "python print a\[0\].value(frame)" "0" \
+    "print value of a"
+gdb_test "python print a\[0\].needs_frame" "True" \
+    "print whether a needs a frame"
+
 # Test is_constant attribute
 gdb_py_test_silent_cmd "python t = gdb.lookup_symbol(\"one\")" "Get variable a" 0
 gdb_test "python print t\[0\].is_variable" "False" "Test t.is_variable"
diff --git a/gdb/testsuite/gdb.python/py-symtab.exp b/gdb/testsuite/gdb.python/py-symtab.exp
index 1e55fd3..da0c3e4 100644
--- a/gdb/testsuite/gdb.python/py-symtab.exp
+++ b/gdb/testsuite/gdb.python/py-symtab.exp
@@ -16,26 +16,14 @@
 # This file is part of the GDB testsuite.  It tests the mechanism
 # exposing values to Python.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib gdb-python.exp
 
-set testfile "py-symbol"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
-    untested "Couldn't compile ${srcfile}"
+standard_testfile py-symbol.c
+
+if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} {
     return -1
 }
 
-# Start with a fresh gdb.
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 # Skip all tests if Python scripting is not enabled.
 if { [skip_python_tests] } { continue }
 
@@ -47,16 +35,25 @@ if ![runto_main] then {
 global hex decimal
 
 # Setup and get the symbol table.
-gdb_breakpoint [gdb_get_line_number "Block break here."]
+set line_no [gdb_get_line_number "Block break here."]
+gdb_breakpoint $line_no
 gdb_continue_to_breakpoint "Block break here."
 gdb_py_test_silent_cmd "python frame = gdb.selected_frame()" "Get Frame" 0
 gdb_py_test_silent_cmd "python sal = frame.find_sal()" "Get block" 0
 gdb_py_test_silent_cmd "python symtab = sal.symtab" "Get block" 0
+gdb_py_test_silent_cmd "python global_block = symtab.global_block()" "Get global block" 0
+gdb_py_test_silent_cmd "python static_block = symtab.static_block()" "Get static block" 0
+gdb_py_test_silent_cmd "python global_symbols = \[\]; static_symbols = \[\]" "Set up symbol name lists" 0
+gdb_py_test_silent_cmd "python for sym in global_block: global_symbols.append(sym.name)" "Get global symbol names" 0
+gdb_py_test_silent_cmd "python for sym in static_block: static_symbols.append(sym.name)" "Get static symbol names" 0
+gdb_py_test_silent_cmd "step" "Step to the next line" 0
+gdb_py_test_silent_cmd "python new_pc = gdb.selected_frame().find_sal().pc" "Get new PC" 0
 
 # Test sal.
 gdb_test "python print sal.symtab" ".*gdb.python/py-symbol.c.*" "Test symtab"
 gdb_test "python print sal.pc" "${decimal}" "Test sal.pc"
-gdb_test "python print sal.line" "42" "Test sal.line"
+gdb_test "python print sal.last == (new_pc - 1)" "True" "Test sal.last"
+gdb_test "python print sal.line" "$line_no" "Test sal.line"
 gdb_test "python print sal.is_valid()" "True" "Test sal.is_valid"
 
 # Test symbol table.
@@ -64,6 +61,12 @@ gdb_test "python print symtab.filename" ".*gdb.python/py-symbol.c.*" "Test symta
 gdb_test "python print symtab.objfile" "<gdb.Objfile object at ${hex}>" "Test symtab.objfile"
 gdb_test "python print symtab.fullname()" "testsuite/gdb.python/py-symbol.c.*" "Test symtab.fullname"
 gdb_test "python print symtab.is_valid()" "True" "Test symtab.is_valid()"
+gdb_test "python print \"qq\" in global_symbols" "True" "Test qq in global symbols"
+gdb_test "python print \"func\" in global_symbols" "True" "Test func in global symbols"
+gdb_test "python print \"main\" in global_symbols" "True" "Test main in global symbols"
+gdb_test "python print \"int\" in static_symbols" "True" "Test int in static symbols"
+gdb_test "python print \"char\" in static_symbols" "True" "Test char in static symbols"
+gdb_test "python print \"simple_struct\" in static_symbols" "True" "Test simple_struct in static symbols"
 
 # Test is_valid when the objfile is unloaded.  This must be the last
 # test as it unloads the object file in GDB.
diff --git a/gdb/testsuite/gdb.python/py-template.exp b/gdb/testsuite/gdb.python/py-template.exp
index 5fc8234..5aff73d 100644
--- a/gdb/testsuite/gdb.python/py-template.exp
+++ b/gdb/testsuite/gdb.python/py-template.exp
@@ -16,15 +16,9 @@
 # This file is part of the GDB testsuite.  It tests the mechanism
 # exposing values to Python.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if { [skip_cplus_tests] } { continue }
 
-set testfile "py-template"
-set srcfile ${testfile}.cc
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile .cc
 if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable \
 	  {debug c++}] != "" } {
     untested "Couldn't compile ${srcfile}"
diff --git a/gdb/testsuite/gdb.python/py-type.exp b/gdb/testsuite/gdb.python/py-type.exp
index 66782b1..98a055e 100644
--- a/gdb/testsuite/gdb.python/py-type.exp
+++ b/gdb/testsuite/gdb.python/py-type.exp
@@ -16,17 +16,11 @@
 # This file is part of the GDB testsuite.  It tests the mechanism
 # of exposing types to Python.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib gdb-python.exp
 
-set testfile "py-type"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
-if [get_compiler_info not-used c++] {
+if [get_compiler_info c++] {
     return -1;
 }
 
@@ -90,6 +84,11 @@ proc test_fields {lang} {
   gdb_test "python print fields\[0\].name" "a" "Check structure field a name"
   gdb_test "python print fields\[1\].name" "b" "Check structure field b name"
 
+  # Regression test for
+  # http://sourceware.org/bugzilla/show_bug.cgi?id=12070.
+  gdb_test "python print 'type' in dir(fields\[0\])" "True" \
+    "Check that dir includes name"
+
   # Test Python mapping behavior of gdb.Type for structs/classes
   gdb_test "python print len(st.type)" "2" "Check number of fields"
   gdb_test "python print st.type\['a'\].name" "a" "Check fields lookup by name"
@@ -135,8 +134,8 @@ proc test_enums {} {
   gdb_test "python print len(e.type)" "3" "Check the number of enum fields"
   gdb_test "python print e.type\['v1'\].name" "v1" "Check enum field lookup by name"
   gdb_test "python print e.type\['v3'\].name" "v3" "Check enum field lookup by name"
-    gdb_test "python print \[v.bitpos for v in e.type.itervalues()\]" {\[0L, 1L, 2L\]} "Check num fields iteration over values"
-    gdb_test "python print \[(n, v.bitpos) for (n, v) in e.type.items()\]" {\[\('v1', 0L\), \('v2', 1L\), \('v3', 2L\)\]} "Check enum fields items list"
+    gdb_test "python print \[v.enumval for v in e.type.itervalues()\]" {\[0L, 1L, 2L\]} "Check num fields iteration over values"
+    gdb_test "python print \[(n, v.enumval) for (n, v) in e.type.items()\]" {\[\('v1', 0L\), \('v2', 1L\), \('v3', 2L\)\]} "Check enum fields items list"
 }
 proc test_base_class {} {
   gdb_py_test_silent_cmd "print d" "print value" 1
@@ -193,7 +192,10 @@ proc test_template {} {
     gdb_test "python print isinstance(ttype.template_argument(1), gdb.Value)" \
 	"True"
 
-    setup_kfail "gcc/41736" *-*-*
+    if {[test_compiler_info {gcc-[0-3]-*}]
+	|| [test_compiler_info {gcc-4-[0-5]-*}]} {
+	setup_xfail "gcc/46955" *-*-*
+    }
     gdb_test "python print ttype.template_argument(2)" "&C::c"
 }
 
diff --git a/gdb/testsuite/gdb.python/py-value-cc.exp b/gdb/testsuite/gdb.python/py-value-cc.exp
new file mode 100644
index 0000000..9de63b1
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-value-cc.exp
@@ -0,0 +1,46 @@
+# Copyright (C) 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# This file is part of the GDB testsuite.  It tests the mechanism
+# exposing values to Python.
+
+if { [skip_cplus_tests] } { continue }
+
+standard_testfile py-value.cc
+
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+    return -1
+}
+
+# Skip all tests if Python scripting is not enabled.
+if { [skip_python_tests] } { continue }
+
+if ![runto_main] {
+   return -1
+}
+
+gdb_breakpoint [gdb_get_line_number "Break here."]
+gdb_continue_to_breakpoint "Break here" ".*Break here.*"
+
+gdb_test "python print str(gdb.parse_and_eval(\"a\").type)" "const A &"
+gdb_test "python print str(gdb.parse_and_eval(\"a\").referenced_value().type)" "const A"
+gdb_test "python print str(gdb.parse_and_eval(\"int_ref\").type)" "int &"
+gdb_test "python print str(gdb.parse_and_eval(\"int_ref\").referenced_value().type)" "int"
+gdb_test "python print str(gdb.parse_and_eval(\"int_ref\").referenced_value())" "10"
+
+gdb_test "python print str(gdb.parse_and_eval(\"int_ptr_ref\").dereference().type)" "int"
+gdb_test "python print str(gdb.parse_and_eval(\"int_ptr_ref\").referenced_value().type)" "int_ptr"
+gdb_test "python print str(gdb.parse_and_eval(\"int_ptr_ref\").referenced_value().dereference())" "10"
+gdb_test "python print str(gdb.parse_and_eval(\"int_ptr_ref\").referenced_value().referenced_value())" "10"
diff --git a/gdb/testsuite/gdb.python/py-value.cc b/gdb/testsuite/gdb.python/py-value.cc
new file mode 100644
index 0000000..65a784c
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-value.cc
@@ -0,0 +1,39 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+class A {
+};
+
+typedef int *int_ptr;
+
+int
+func (const A &a)
+{
+  int val = 10;
+  int &int_ref = val;
+  int_ptr ptr = &val;
+  int_ptr &int_ptr_ref = ptr;
+
+  return 0; /* Break here.  */
+}
+
+int
+main ()
+{
+  A obj;
+  return func (obj);
+}
diff --git a/gdb/testsuite/gdb.python/py-value.exp b/gdb/testsuite/gdb.python/py-value.exp
index 038361e..87b0734 100644
--- a/gdb/testsuite/gdb.python/py-value.exp
+++ b/gdb/testsuite/gdb.python/py-value.exp
@@ -16,15 +16,9 @@
 # This file is part of the GDB testsuite.  It tests the mechanism
 # exposing values to Python.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib gdb-python.exp
 
-set testfile "py-value"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
 # Build inferior to language specification.
 proc build_inferior {exefile lang} {
@@ -106,8 +100,8 @@ proc test_value_numeric_ops {} {
   gdb_test "print (void *) 5" ".*" ""
   gdb_test_no_output "python b = gdb.history (0)" ""
 
-  gdb_test "python print 'result = ' + str(a+5)" " = 0x7" "add pointer value with python integer"
-  gdb_test "python print 'result = ' + str(b-2)" " = 0x3" "subtract python integer from pointer value"
+  gdb_test "python print 'result = ' + str(a+5)" " = 0x7( <.*>)?" "add pointer value with python integer"
+  gdb_test "python print 'result = ' + str(b-2)" " = 0x3( <.*>)?" "subtract python integer from pointer value"
   gdb_test "python print 'result = ' + str(b-a)" " = 3" "subtract two pointer values"
 
   # Test some invalid operations.
diff --git a/gdb/testsuite/gdb.python/python.c b/gdb/testsuite/gdb.python/python.c
index d9f02cd..50bee21 100644
--- a/gdb/testsuite/gdb.python/python.c
+++ b/gdb/testsuite/gdb.python/python.c
@@ -23,6 +23,6 @@ int
 main (int argc, char *argv[])
 {
   func1 ();
-  func2 ();
+  func2 ();      /* Break at func2 call site.  */
   return 0;      /* Break to end.  */
 }
diff --git a/gdb/testsuite/gdb.python/python.exp b/gdb/testsuite/gdb.python/python.exp
index 42036df..9683b1c 100644
--- a/gdb/testsuite/gdb.python/python.exp
+++ b/gdb/testsuite/gdb.python/python.exp
@@ -16,20 +16,12 @@
 # This file is part of the GDB testsuite.  It tests the mechanism
 # exposing values to Python.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 load_lib gdb-python.exp
 
-set testfile "python"
-set srcfile  ${testfile}.c
-set srcfile1  ${testfile}-1.c
-set binfile  ${objdir}/${subdir}/${testfile}
+standard_testfile python.c python-1.c
 
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile} ${srcdir}/${subdir}/${srcfile1}" \
-	  ${binfile} executable {debug}] != "" } {
-    untested "Could not compile $binfile."
+if {[build_executable $testfile.exp $testfile \
+	 [list $srcfile $srcfile2] debug] == -1} {
     return -1
 }
 
@@ -120,7 +112,7 @@ gdb_test_multiple "python print \"\\n\" * $lines" $test {
 	pass $test
     }
 }
-gdb_test "q" "Quit" "verify pagination beforehand: q"
+gdb_test "q" "Quit.*Error while executing Python.*" "verify pagination beforehand: q"
 
 gdb_test "python if gdb.execute('python print \"\\\\n\" * $lines', to_string=True) == \"\\n\" * [expr $lines + 1]: print \"yes\"" "yes" "gdb.execute does not page"
 
@@ -136,7 +128,7 @@ gdb_test_multiple "python print \"\\n\" * $lines" $test {
 	pass $test
     }
 }
-gdb_test "q" "Quit" "verify pagination afterwards: q"
+gdb_test "q" "Quit.*Error while executing Python.*" "verify pagination afterwards: q"
 
 gdb_test_no_output "set height 0"
 
@@ -186,6 +178,9 @@ gdb_test "python print len(symtab)" "2" "Test decode_line func1 length"
 gdb_test "python print len(symtab\[1\])" "1" "Test decode_line func1 length"
 gdb_test "python print symtab\[1\]\[0\].symtab" ".*gdb.python/python-1.c.*" "Test decode_line func1 filename"
 gdb_test "python print symtab\[1\]\[0\].line" "19" "Test decode_line func1 line number"
+gdb_py_test_silent_cmd {python symtab = gdb.decode_line ("func1,func2")} \
+    "test decode_line func1,func2" 1
+gdb_test {python print symtab[0]} ",func2" "stop at comma in linespec"
 
 # gdb.write
 gdb_test "python print sys.stderr" ".*__main__.GdbOutputErrorFile instance at.*" "Test stderr location"
@@ -368,3 +363,23 @@ gdb_test_multiple "python gdb.prompt_hook = error_prompt" "set the hook" {
 
 gdb_py_test_silent_cmd "python gdb.prompt_hook = None" \
     "set the hook to default" 1
+
+# Start with a fresh gdb.
+clean_restart ${testfile}
+
+# The following tests require execution.
+
+if ![runto_main] then {
+    fail "Can't run to main"
+    return 0
+}
+
+runto [gdb_get_line_number "Break at func2 call site."]
+
+gdb_py_test_silent_cmd "python line = gdb.selected_frame().find_sal().line" "Get line number of func2 call site" 1
+gdb_test "python print gdb.find_pc_line(gdb.selected_frame().pc()).line == line" "True" "Test find_pc_line at func2 call site"
+
+gdb_py_test_silent_cmd "step" "Step into func2" 1
+gdb_py_test_silent_cmd "up" "Step out of func2" 1
+
+gdb_test "python print gdb.find_pc_line(gdb.selected_frame().pc()).line > line" "True" "Test find_pc_line with resume address"
diff --git a/gdb/testsuite/gdb.reverse/Makefile.in b/gdb/testsuite/gdb.reverse/Makefile.in
index f5c4ff6..adaf7dd 100644
--- a/gdb/testsuite/gdb.reverse/Makefile.in
+++ b/gdb/testsuite/gdb.reverse/Makefile.in
@@ -13,6 +13,7 @@ all info install-info dvi install uninstall installcheck check:
 
 clean mostlyclean:
 	rm -f *~ *.o *.x *.ci *.sl a.out core
+	rm -f *.dwo *.dwp
 	rm -f $(EXECUTABLES) $(MISCELLANEOUS)
 
 distclean maintainer-clean realclean: clean
diff --git a/gdb/testsuite/gdb.reverse/break-precsave.exp b/gdb/testsuite/gdb.reverse/break-precsave.exp
index 54c3840..af0f769 100644
--- a/gdb/testsuite/gdb.reverse/break-precsave.exp
+++ b/gdb/testsuite/gdb.reverse/break-precsave.exp
@@ -21,8 +21,8 @@ if ![supports_process_record] {
     return
 }
 
-set testfile "break-reverse"
-set srcfile  ${testfile}.c
+standard_testfile break-reverse.c
+set precsave [standard_output_file break.precsave]
 
 if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
     return -1
@@ -46,14 +46,14 @@ gdb_test "break $end_location" \
 
 gdb_test "continue" "Breakpoint .* end of main .*" "run to end of main"
 
-gdb_test "record save break.precsave" \
-    "Saved core file break.precsave with execution log\."  \
+gdb_test "record save $precsave" \
+    "Saved core file $precsave with execution log\."  \
     "save process recfile"
 
 gdb_test "kill" "" "Kill process, prepare to debug log file" \
     "Kill the program being debugged\\? \\(y or n\\) " "y"
 
-gdb_test "record restore break.precsave" \
+gdb_test "record restore $precsave" \
     "Program terminated with signal .*" \
     "reload precord save file"
 
diff --git a/gdb/testsuite/gdb.reverse/break-reverse.exp b/gdb/testsuite/gdb.reverse/break-reverse.exp
index 0601501..c9ce345 100644
--- a/gdb/testsuite/gdb.reverse/break-reverse.exp
+++ b/gdb/testsuite/gdb.reverse/break-reverse.exp
@@ -20,8 +20,7 @@ if ![supports_reverse] {
     return
 }
 
-set testfile "break-reverse"
-set srcfile  ${testfile}.c
+standard_testfile
 
 if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
     return -1
diff --git a/gdb/testsuite/gdb.reverse/consecutive-precsave.exp b/gdb/testsuite/gdb.reverse/consecutive-precsave.exp
index a4f575e..b782c36 100644
--- a/gdb/testsuite/gdb.reverse/consecutive-precsave.exp
+++ b/gdb/testsuite/gdb.reverse/consecutive-precsave.exp
@@ -21,8 +21,8 @@ if ![supports_process_record] {
     return
 }
 
-set testfile "consecutive-reverse"
-set srcfile ${testfile}.c
+standard_testfile consecutive-reverse.c
+set precsave [standard_output_file consecutive.precsave]
 
 if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
     return -1
@@ -42,14 +42,14 @@ gdb_test "break $end_location" \
 
 gdb_test "continue" "Breakpoint .* end of main .*" "run to end of main"
 
-gdb_test "record save consecutive.precsave" \
-    "Saved core file consecutive.precsave with execution log\."  \
+gdb_test "record save $precsave" \
+    "Saved core file $precsave with execution log\."  \
     "save process recfile"
 
 gdb_test "kill" "" "Kill process, prepare to debug log file" \
     "Kill the program being debugged\\? \\(y or n\\) " "y"
 
-gdb_test "record restore consecutive.precsave" \
+gdb_test "record restore $precsave" \
     "Program terminated with signal .*" \
     "reload precord save file"
 
diff --git a/gdb/testsuite/gdb.reverse/consecutive-reverse.c b/gdb/testsuite/gdb.reverse/consecutive-reverse.c
index b149584..3930453 100644
--- a/gdb/testsuite/gdb.reverse/consecutive-reverse.c
+++ b/gdb/testsuite/gdb.reverse/consecutive-reverse.c
@@ -29,10 +29,6 @@ int foo ()
 
 main()
 {
-#ifdef usestubs
-    set_debug_traps ();
-    breakpoint ();
-#endif
   foo ();
 } /* end of main */
 
diff --git a/gdb/testsuite/gdb.reverse/consecutive-reverse.exp b/gdb/testsuite/gdb.reverse/consecutive-reverse.exp
index a7445e9..06433a0 100644
--- a/gdb/testsuite/gdb.reverse/consecutive-reverse.exp
+++ b/gdb/testsuite/gdb.reverse/consecutive-reverse.exp
@@ -20,8 +20,7 @@ if ![supports_reverse] {
     return
 }
 
-set testfile "consecutive-reverse"
-set srcfile ${testfile}.c
+standard_testfile
 
 if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
     return -1
diff --git a/gdb/testsuite/gdb.reverse/finish-precsave.exp b/gdb/testsuite/gdb.reverse/finish-precsave.exp
index 661a07e..775c68a 100644
--- a/gdb/testsuite/gdb.reverse/finish-precsave.exp
+++ b/gdb/testsuite/gdb.reverse/finish-precsave.exp
@@ -20,8 +20,8 @@ if ![supports_reverse] {
     return
 }
 
-set testfile "finish-reverse"
-set srcfile ${testfile}.c
+standard_testfile finish-reverse.c
+set precsave [standard_output_file finish.precsave]
 
 if { [prepare_for_testing $testfile.exp "$testfile" $srcfile] } {
     return -1
@@ -43,14 +43,14 @@ gdb_test "break $breakloc" \
 
 gdb_test "continue" "Breakpoint .* end of main .*" "run to end of main"
 
-gdb_test "record save finish.precsave" \
-    "Saved core file finish.precsave with execution log\."  \
+gdb_test "record save $precsave" \
+    "Saved core file $precsave with execution log\."  \
     "save process recfile"
 
 gdb_test "kill" "" "Kill process, prepare to debug log file" \
     "Kill the program being debugged\\? \\(y or n\\) " "y"
 
-gdb_test "record restore finish.precsave" \
+gdb_test "record restore $precsave" \
     "Program terminated with signal .*" \
     "reload precord save file"
 
diff --git a/gdb/testsuite/gdb.reverse/finish-reverse-bkpt.exp b/gdb/testsuite/gdb.reverse/finish-reverse-bkpt.exp
index 02f1e19..ab7978a 100644
--- a/gdb/testsuite/gdb.reverse/finish-reverse-bkpt.exp
+++ b/gdb/testsuite/gdb.reverse/finish-reverse-bkpt.exp
@@ -23,8 +23,7 @@ if ![supports_reverse] {
     return
 }
 
-set testfile "finish-reverse-bkpt"
-set srcfile finish-reverse.c
+standard_testfile finish-reverse.c
 
 if { [prepare_for_testing $testfile.exp "$testfile" $srcfile] } {
     return -1
diff --git a/gdb/testsuite/gdb.reverse/finish-reverse.exp b/gdb/testsuite/gdb.reverse/finish-reverse.exp
index 97dc689..0d09e6e 100644
--- a/gdb/testsuite/gdb.reverse/finish-reverse.exp
+++ b/gdb/testsuite/gdb.reverse/finish-reverse.exp
@@ -20,8 +20,7 @@ if ![supports_reverse] {
     return
 }
 
-set testfile "finish-reverse"
-set srcfile ${testfile}.c
+standard_testfile
 
 if { [prepare_for_testing $testfile.exp "$testfile" $srcfile] } {
     return -1
diff --git a/gdb/testsuite/gdb.reverse/i386-precsave.exp b/gdb/testsuite/gdb.reverse/i386-precsave.exp
index a627223..962b374 100644
--- a/gdb/testsuite/gdb.reverse/i386-precsave.exp
+++ b/gdb/testsuite/gdb.reverse/i386-precsave.exp
@@ -24,37 +24,26 @@ if ![supports_process_record] {
     return
 }
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 if ![istarget "i?86-*linux*"] then {
     verbose "Skipping i386 reverse tests."
     return
 }
 
-set testfile "i386-precsave"
-set srcfile i386-reverse.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile i386-reverse.c
+set precsave [standard_output_file i386.precsave]
 
 # some targets have leading underscores on assembly symbols.
 set additional_flags [gdb_target_symbol_prefix_flags]
 
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug $additional_flags]] != "" } {
-    untested ${testfile}.exp
+if {[prepare_for_testing $testfile.exp $testfile $srcfile \
+	 [list debug $additional_flags]]} {
     return -1
 }
 
 set end_of_main          [gdb_get_line_number " end of main "]
 set end_of_inc_dec_tests [gdb_get_line_number " end inc_dec_tests "]
 
-# Get things started.
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
 runto main
 
 if [supports_process_record] {
@@ -71,14 +60,14 @@ gdb_test "break $end_of_main" \
 
 gdb_test "continue" "Breakpoint .* end of main .*" "run to end of main"
 
-gdb_test "record save i386.precsave" \
-    "Saved core file i386.precsave with execution log\."  \
+gdb_test "record save $precsave" \
+    "Saved core file $precsave with execution log\."  \
     "save process recfile"
 
 gdb_test "kill" "" "Kill process, prepare to debug log file" \
     "Kill the program being debugged\\? \\(y or n\\) " "y"
 
-gdb_test "record restore i386.precsave" \
+gdb_test "record restore $precsave" \
     "Program terminated with signal .*" \
     "reload precord save file"
 
diff --git a/gdb/testsuite/gdb.reverse/i386-reverse.exp b/gdb/testsuite/gdb.reverse/i386-reverse.exp
index e85905d..81dccef 100644
--- a/gdb/testsuite/gdb.reverse/i386-reverse.exp
+++ b/gdb/testsuite/gdb.reverse/i386-reverse.exp
@@ -23,37 +23,25 @@ if ![supports_reverse] {
     return
 }
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 if ![istarget "i?86-*linux*"] then {
     verbose "Skipping i386 reverse tests."
     return
 }
 
-set testfile "i386-reverse"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
 # some targets have leading underscores on assembly symbols.
 set additional_flags [gdb_target_symbol_prefix_flags]
 
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug $additional_flags]] != "" } {
-    untested i386-reverse
+if {[prepare_for_testing $testfile.exp $testfile $srcfile \
+	 [list debug $additional_flags]]} {
     return -1
 }
 
 set end_of_main          [gdb_get_line_number " end of main "]
 set end_of_inc_dec_tests [gdb_get_line_number " end inc_dec_tests "]
 
-# Get things started.
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
 runto main
 
 if [supports_process_record] {
diff --git a/gdb/testsuite/gdb.reverse/i386-sse-reverse.c b/gdb/testsuite/gdb.reverse/i386-sse-reverse.c
index 2691663..490eed3 100644
--- a/gdb/testsuite/gdb.reverse/i386-sse-reverse.c
+++ b/gdb/testsuite/gdb.reverse/i386-sse-reverse.c
@@ -59,9 +59,6 @@ sse_test (void)
   asm ("mulss %xmm1, %xmm0");
   asm ("orpd %xmm2, %xmm0");
   asm ("orps %xmm0, %xmm1");
-  asm ("pabsb %xmm1, %xmm2");
-  asm ("pabsw %xmm2, %xmm1");
-  asm ("pabsd %xmm1, %xmm0");
   asm ("packsswb %xmm0, %xmm2");
   asm ("packssdw %xmm0, %xmm1");
   asm ("ucomisd %xmm1, %xmm2");
@@ -73,6 +70,25 @@ sse_test (void)
 } /* end sse_test */
 
 void
+ssse3_test (void)
+{
+  char	buf0[] = {0, 1, 2, 3, 4, 5, 6, 7, 8,
+                  9, 10, 11, 12, 13, 14, 15};
+  char	buf1[] = {16, 17, 18, 19, 20, 21, 22, 23,
+                  24, 25, 26, 27, 28, 29, 30, 31};
+  char	buf2[] = {32, 33, 34, 35, 36, 37, 38, 39,
+                  40, 41, 42, 43, 44, 45, 46, 47};
+
+  asm ("movupd %0, %%xmm0":"=m"(buf0));
+  asm ("movupd %0, %%xmm1":"=m"(buf1));
+  asm ("movupd %0, %%xmm2":"=m"(buf2));
+
+  asm ("pabsb %xmm1, %xmm2");
+  asm ("pabsw %xmm2, %xmm1");
+  asm ("pabsd %xmm1, %xmm0");
+} /* end ssse3_test */
+
+void
 sse4_test (void)
 {
   char	buf0[] = {0, 1, 2, 3, 4, 5, 6, 7, 8,
@@ -96,6 +112,7 @@ int
 main ()
 {
   sse_test ();
+  ssse3_test ();
   sse4_test ();
   return 0;	/* end of main */
 }
diff --git a/gdb/testsuite/gdb.reverse/i386-sse-reverse.exp b/gdb/testsuite/gdb.reverse/i386-sse-reverse.exp
index 530b2aa..6bc21c9 100644
--- a/gdb/testsuite/gdb.reverse/i386-sse-reverse.exp
+++ b/gdb/testsuite/gdb.reverse/i386-sse-reverse.exp
@@ -23,38 +23,27 @@ if ![supports_reverse] {
     return
 }
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 if ![istarget "*86*-*linux*"] then {
     verbose "Skipping i386 reverse tests."
     return
 }
 
-set testfile "i386-sse-reverse"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
 # some targets have leading underscores on assembly symbols.
 set additional_flags [gdb_target_symbol_prefix_flags]
 
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug $additional_flags]] != "" } {
-    untested i386-sse-reverse
+if {[prepare_for_testing $testfile.exp $testfile $srcfile \
+	 [list debug $additional_flags]]} {
     return -1
 }
 
 set end_of_main          [gdb_get_line_number " end of main "]
 set end_sse_test         [gdb_get_line_number " end sse_test "]
+set end_ssse3_test       [gdb_get_line_number " end ssse3_test "]
 set end_sse4_test         [gdb_get_line_number " end sse4_test "]
 
-# Get things started.
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
 runto main
 
 if [supports_process_record] {
@@ -71,177 +60,142 @@ gdb_test "break $end_sse_test" \
     "Breakpoint $decimal at .* line $end_sse_test\." \
     "set breakpoint at end of sse_test"
 
-gdb_test "continue" \
-    " end sse_test .*" \
-    "continue to end of sse_test"
+set test "continue to end of sse_test"
+gdb_test_multiple "continue" $test {
+    -re " end sse_test .*\r\n$gdb_prompt $" {
+	pass $test
+    }
+    -re " Illegal instruction.*\r\n$gdb_prompt $" {
+	untested i386-sse-reverse
+	return -1
+    }
+}
 
 gdb_test "reverse-step" "xorps.*" "reverse-step to xorps"
 
 gdb_test "info register xmm0" \
-    "xmm0 .*uint128 = 0x7f007f007fff7fff7f007f007fff7fff.*" \
+    "xmm0 .*uint128 = 0xf000c00080008000f800c00080008000.*" \
     "verify xmm0 at end of sse_test"
 
 gdb_test "info register xmm1" \
-    "xmm1 .*uint128 = 0x00ff00ff0000000000ff00ff00000000.*" \
+    "xmm1 .*uint128 = 0x70004000000000007800400000000000.*" \
     "verify xmm1 at end of sse_test"
 
 gdb_test "info register xmm2" \
-    "xmm2 .*uint128 = 0x7f007f007f007f007f007f007f007f00.*" \
+    "xmm2 .*uint128 = 0xf000c000f800c000f000c000f000c000.*" \
     "verify xmm2 at end of sse_test"
 
 gdb_test "reverse-step" "xorpd.*" "reverse-step to xorpd"
 
 gdb_test "info register xmm0" \
-    "xmm0 .*uint128 = 0x7f007f007fff7fff7f007f007fff7fff.*" \
+    "xmm0 .*uint128 = 0xf000c00080008000f800c00080008000.*" \
     "verify xmm0 after reverse xorps"
 
 gdb_test "info register xmm1" \
-    "xmm1 .*uint128 = 0x7fff7fff7fff7fff7fff7fff7fff7fff.*" \
+    "xmm1 .*uint128 = 0x80008000800080008000800080008000.*" \
     "verify xmm1 after reverse xorps"
 
 gdb_test "info register xmm2" \
-    "xmm2 .*uint128 = 0x7f007f007f007f007f007f007f007f00.*" \
+    "xmm2 .*uint128 = 0xf000c000f800c000f000c000f000c000.*" \
     "verify xmm2 after reverse xorps"
 
 gdb_test "reverse-step" "unpckhps.*" "reverse-step to unpckhps"
 
 gdb_test "info register xmm0" \
-    "xmm0 .*uint128 = 0x7fff7fff7fff7fff0108000001400000.*" \
+    "xmm0 .*uint128 = 0x8000800080008000fff00000ffc00000.*" \
     "verify xmm0 after reverse xorpd"
 
 gdb_test "info register xmm1" \
-    "xmm1 .*uint128 = 0x7fff7fff7fff7fff7fff7fff7fff7fff.*" \
+    "xmm1 .*uint128 = 0x80008000800080008000800080008000.*" \
     "verify xmm1 after reverse xorpd"
 
 gdb_test "info register xmm2" \
-    "xmm2 .*uint128 = 0x7f007f007f007f007f007f007f007f00.*" \
+    "xmm2 .*uint128 = 0xf000c000f800c000f000c000f000c000.*" \
     "verify xmm2 after reverse xorpd"
 
 gdb_test "reverse-step" "unpckhpd.*" "reverse-step to unpckhpd"
 
 gdb_test "info register xmm0" \
-    "xmm0 .*uint128 = 0x01080000014000000108000001400000.*" \
+    "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
     "verify xmm0 after reverse unpckhps"
 
 gdb_test "info register xmm1" \
-    "xmm1 .*uint128 = 0x7fff7fff7fff7fff7fff7fff7fff7fff.*" \
+    "xmm1 .*uint128 = 0x80008000800080008000800080008000.*" \
     "verify xmm1 after reverse unpckhps"
 
 gdb_test "info register xmm2" \
-    "xmm2 .*uint128 = 0x7f007f007f007f007f007f007f007f00.*" \
+    "xmm2 .*uint128 = 0xf000c000f800c000f000c000f000c000.*" \
     "verify xmm2 after reverse unpckhps"
 
 gdb_test "reverse-step" "ucomiss.*" "reverse-step to ucomiss"
 
 gdb_test "info register xmm0" \
-    "xmm0 .*uint128 = 0x01080000014000000108000001400000.*" \
+    "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
     "verify xmm0 after reverse unpckhpd"
 
 gdb_test "info register xmm1" \
-    "xmm1 .*uint128 = 0x7fff7fff7fff7fff7fff7fff7fff7fff.*" \
+    "xmm1 .*uint128 = 0x80008000800080008000800080008000.*" \
     "verify xmm1 after reverse unpckhpd"
 
 gdb_test "info register xmm2" \
-    "xmm2 .*uint128 = 0x7f007f007f007f007f007f007f007f00.*" \
+    "xmm2 .*uint128 = 0xf000c000f800c000f000c000f000c000.*" \
     "verify xmm2 after reverse unpckhpd"
 
 gdb_test "reverse-step" "ucomisd.*" "reverse-step to ucomisd"
 
 gdb_test "info register xmm0" \
-    "xmm0 .*uint128 = 0x01080000014000000108000001400000.*" \
+    "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
     "verify xmm0 after reverse ucomiss"
 
 gdb_test "info register xmm1" \
-    "xmm1 .*uint128 = 0x7fff7fff7fff7fff7fff7fff7fff7fff.*" \
+    "xmm1 .*uint128 = 0x80008000800080008000800080008000.*" \
     "verify xmm1 after reverse ucomiss"
 
 gdb_test "info register xmm2" \
-    "xmm2 .*uint128 = 0x7f007f007f007f007f007f007f007f00.*" \
+    "xmm2 .*uint128 = 0xf000c000f800c000f000c000f000c000.*" \
     "verify xmm2 after reverse ucomiss"
 
 gdb_test "reverse-step" "packssdw.*" "reverse-step to packssdw"
 
 gdb_test "info register xmm0" \
-    "xmm0 .*uint128 = 0x01080000014000000108000001400000.*" \
+    "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
     "verify xmm0 after reverse ucomisd"
 
 gdb_test "info register xmm1" \
-    "xmm1 .*uint128 = 0x01080000014000000108000001400000.*" \
+    "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \
     "verify xmm1 after reverse ucomisd"
 
 gdb_test "info register xmm2" \
-    "xmm2 .*uint128 = 0x7f007f007f007f007f007f007f007f00.*" \
+    "xmm2 .*uint128 = 0xf000c000f800c000f000c000f000c000.*" \
     "verify xmm2 after reverse ucomisd"
 
 gdb_test "reverse-step" "packsswb.*" "reverse-step to packsswb"
 
 gdb_test "info register xmm0" \
-    "xmm0 .*uint128 = 0x01080000014000000108000001400000.*" \
-    "verify xmm0 after reverse packssdw"
-
-gdb_test "info register xmm1" \
-    "xmm1 .*uint128 = 0x01080000014000000108000001400000.*" \
-    "verify xmm1 after reverse packssdw"
-
-gdb_test "info register xmm2" \
-    "xmm2 .*uint128 = 0x01080000014000000108000001400000.*" \
-    "verify xmm2 after reverse packssdw"
-
-gdb_test "reverse-step" "pabsd.*" "reverse-step to pabsd"
-
-gdb_test "info register xmm0" \
     "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
-    "verify xmm0 after reverse packsswb"
-
-gdb_test "info register xmm1" \
-    "xmm1 .*uint128 = 0x01080000014000000108000001400000.*" \
-    "verify xmm1 after reverse packsswb"
-
-gdb_test "info register xmm2" \
-    "xmm2 .*uint128 = 0x01080000014000000108000001400000.*" \
-    "verify xmm2 after reverse packsswb"
-
-gdb_test "reverse-step" "pabsw.*" "reverse-step to pabsw"
-
-gdb_test "info register xmm0" \
-    "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
-    "verify xmm0 after reverse pabsd"
-
-gdb_test "info register xmm1" \
-    "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \
-    "verify xmm1 after reverse pabsd"
-
-gdb_test "info register xmm2" \
-    "xmm2 .*uint128 = 0x01080000014000000108000001400000.*" \
-    "verify xmm2 after reverse pabsd"
-
-gdb_test "reverse-step" "pabsb.*" "reverse-step to pabsb"
-
-gdb_test "info register xmm0" \
-    "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
-    "verify xmm0 after reverse pabsw"
+    "verify xmm0 after reverse packssdw"
 
 gdb_test "info register xmm1" \
     "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \
-    "verify xmm1 after reverse pabsw"
+    "verify xmm1 after reverse packssdw"
 
 gdb_test "info register xmm2" \
     "xmm2 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \
-    "verify xmm2 after reverse pabsw"
+    "verify xmm2 after reverse packssdw"
 
 gdb_test "reverse-step" "orps.*" "reverse-step to orps"
 
 gdb_test "info register xmm0" \
     "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
-    "verify xmm0 after reverse pabsb"
+    "verify xmm0 after reverse packsswb"
 
 gdb_test "info register xmm1" \
     "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \
-    "verify xmm1 after reverse pabsb"
+    "verify xmm1 after reverse packsswb"
 
 gdb_test "info register xmm2" \
     "xmm2 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \
-    "verify xmm2 after reverse pabsb"
+    "verify xmm2 after reverse packsswb"
 
 gdb_test "reverse-step" "orpd.*" "reverse-step to orpd"
 
@@ -622,12 +576,88 @@ gdb_test "info register xmm2" \
     "verify xmm2 after reverse addps"
 
 
-#sse4_test
+#ssse3_test
 
 gdb_test "continue" \
     " end sse_test .*" \
     "continue to end of sse_test #2"
 
+gdb_test "break $end_ssse3_test" \
+    "Breakpoint $decimal at .* line $end_ssse3_test\." \
+    "set breakpoint at end of ssse3_test"
+
+set test "continue to end of ssse3_test"
+gdb_test_multiple "continue" $test {
+    -re " end ssse3_test .*\r\n$gdb_prompt $" {
+	pass $test
+    }
+    -re " Illegal instruction.*\r\n$gdb_prompt $" {
+	untested i386-ssse3-reverse
+	return -1
+    }
+}
+
+gdb_test "info register xmm0" \
+    "xmm0 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
+    "verify xmm0 at end of ssse3_test"
+
+gdb_test "info register xmm1" \
+    "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
+    "verify xmm1 at end of ssse3_test"
+
+gdb_test "info register xmm2" \
+    "xmm2 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
+    "verify xmm2 at end of ssse3_test"
+
+gdb_test "reverse-step" "pabsd.*" "reverse-step to pabsd"
+
+gdb_test "info register xmm0" \
+    "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050403020100.*" \
+    "verify xmm0 after reverse pabsd"
+
+gdb_test "info register xmm1" \
+    "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
+    "verify xmm1 after reverse pabsd"
+
+gdb_test "info register xmm2" \
+    "xmm2 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
+    "verify xmm2 after reverse pabsd"
+
+gdb_test "reverse-step" "pabsw.*" "reverse-step to pabsw"
+
+gdb_test "info register xmm0" \
+    "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050403020100.*" \
+    "verify xmm0 after reverse pabsw"
+
+gdb_test "info register xmm1" \
+    "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
+    "verify xmm1 after reverse pabsw"
+
+gdb_test "info register xmm2" \
+    "xmm2 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
+    "verify xmm2 after reverse pabsw"
+
+gdb_test "reverse-step" "pabsb.*" "reverse-step to pabsb"
+
+gdb_test "info register xmm0" \
+    "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050403020100.*" \
+    "verify xmm0 after reverse pabsb"
+
+gdb_test "info register xmm1" \
+    "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
+    "verify xmm1 after reverse pabsb"
+
+gdb_test "info register xmm2" \
+    "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
+    "verify xmm2 after reverse pabsb"
+
+
+#sse4_test
+
+gdb_test "continue" \
+    " end ssse3_test .*" \
+    "continue to end of ssse3_test #2"
+
 gdb_test "break $end_sse4_test" \
     "Breakpoint $decimal at .* line $end_sse4_test\." \
     "set breakpoint at end of sse4_test"
diff --git a/gdb/testsuite/gdb.reverse/i387-env-reverse.exp b/gdb/testsuite/gdb.reverse/i387-env-reverse.exp
index 097df64..3e9774a 100644
--- a/gdb/testsuite/gdb.reverse/i387-env-reverse.exp
+++ b/gdb/testsuite/gdb.reverse/i387-env-reverse.exp
@@ -15,34 +15,22 @@
 
 # This file is part of the gdb testsuite.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 if ![istarget "i?86-*linux*"] then {
     verbose "Skipping i387 reverse float tests."
     return
 }
 
-set testfile "i387-env-reverse"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
 # some targets have leading underscores on assembly symbols.
 set additional_flags [gdb_target_symbol_prefix_flags]
 
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug $additional_flags]] != "" } {
-    untested ${testfile}.exp
+if {[prepare_for_testing $testfile.exp $testfile $srcfile \
+	 [list debug $additional_flags]]} {
     return -1
 }
 
-# Get things started.
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
 runto main
 
 # Record to end of main
diff --git a/gdb/testsuite/gdb.reverse/i387-stack-reverse.exp b/gdb/testsuite/gdb.reverse/i387-stack-reverse.exp
index 8660ac9..79b7945 100644
--- a/gdb/testsuite/gdb.reverse/i387-stack-reverse.exp
+++ b/gdb/testsuite/gdb.reverse/i387-stack-reverse.exp
@@ -15,34 +15,22 @@
 
 # This file is part of the gdb testsuite.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 if ![istarget "i?86-*linux*"] then {
     verbose "Skipping i387 reverse float tests."
     return
 }
 
-set testfile "i387-stack-reverse"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
 # some targets have leading underscores on assembly symbols.
 set additional_flags [gdb_target_symbol_prefix_flags]
 
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug $additional_flags]] != "" } {
-    untested ${testfile}.exp
+if {[prepare_for_testing $testfile.exp $testfile $srcfile \
+	 [list debug $additional_flags]]} {
     return -1
 }
 
-# Get things started.
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
 runto main
 
 # Record to end of main
diff --git a/gdb/testsuite/gdb.reverse/machinestate-precsave.exp b/gdb/testsuite/gdb.reverse/machinestate-precsave.exp
index 944946d..ad6053b 100644
--- a/gdb/testsuite/gdb.reverse/machinestate-precsave.exp
+++ b/gdb/testsuite/gdb.reverse/machinestate-precsave.exp
@@ -40,11 +40,11 @@ if ![supports_process_record] {
     return
 }
 
-set testfile "machinestate"
-set srcfile  ${testfile}.c
-set srcfile1 ms1.c
+standard_testfile machinestate.c ms1.c
+set precsave [standard_output_file machinestate.precsave]
 
-if { [prepare_for_testing $testfile.exp $testfile {machinestate.c ms1.c} ] } {
+if { [prepare_for_testing $testfile.exp $testfile \
+	  [list $srcfile $srcfile2]] } {
     return -1
 }
 
@@ -68,14 +68,14 @@ gdb_test "break $endmain" \
 
 gdb_test "continue" "Breakpoint .* end main .*" "run to end of main"
 
-gdb_test "record save machinestate.precsave" \
-    "Saved core file machinestate.precsave with execution log\."  \
+gdb_test "record save $precsave" \
+    "Saved core file $precsave with execution log\."  \
     "save process recfile"
 
 gdb_test "kill" "" "Kill process, prepare to debug log file" \
     "Kill the program being debugged\\? \\(y or n\\) " "y"
 
-gdb_test "record restore machinestate.precsave" \
+gdb_test "record restore $precsave" \
     "Program terminated with signal .*" \
     "reload prec save file"
 
diff --git a/gdb/testsuite/gdb.reverse/machinestate.exp b/gdb/testsuite/gdb.reverse/machinestate.exp
index 67c4cd6..2b20a53 100644
--- a/gdb/testsuite/gdb.reverse/machinestate.exp
+++ b/gdb/testsuite/gdb.reverse/machinestate.exp
@@ -39,11 +39,10 @@ if ![supports_reverse] {
     return
 }
 
-set testfile "machinestate"
-set srcfile  ${testfile}.c
-set srcfile1 ms1.c
+standard_testfile .c ms1.c
 
-if { [prepare_for_testing $testfile.exp $testfile {machinestate.c ms1.c} ] } {
+if { [prepare_for_testing $testfile.exp $testfile \
+	  [list $srcfile $srcfile2]] } {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.reverse/next-reverse-bkpt-over-sr.exp b/gdb/testsuite/gdb.reverse/next-reverse-bkpt-over-sr.exp
index 93acc07..c4f96af 100644
--- a/gdb/testsuite/gdb.reverse/next-reverse-bkpt-over-sr.exp
+++ b/gdb/testsuite/gdb.reverse/next-reverse-bkpt-over-sr.exp
@@ -27,8 +27,7 @@ if ![supports_reverse] {
     return
 }
 
-set testfile "next-reverse-bkpt-over-sr"
-set srcfile  step-reverse.c
+standard_testfile step-reverse.c
 
 if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
     return -1
diff --git a/gdb/testsuite/gdb.reverse/sigall-precsave.exp b/gdb/testsuite/gdb.reverse/sigall-precsave.exp
index 6916278..465e3cc 100644
--- a/gdb/testsuite/gdb.reverse/sigall-precsave.exp
+++ b/gdb/testsuite/gdb.reverse/sigall-precsave.exp
@@ -22,21 +22,16 @@ if ![supports_reverse] {
     return
 }
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 gdb_exit
 gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
 
-set testfile sigall-precsave
-set srcfile sigall-reverse.c
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
-     untested ${testfile}.exp
-     return -1
+standard_testfile sigall-reverse.c
+set precsave [standard_output_file sigall.precsave]
+
+if {[build_executable $testfile.exp $testfile $srcfile debug] == -1} {
+    return -1
 }
 
 # Make the first signal SIGABRT because it is always supported.
@@ -189,14 +184,14 @@ gdb_test "handle all nostop noprint"
 
 gdb_test "continue" "Breakpoint .* end of main .*" "run to end of main"
 
-gdb_test "record save sigall.precsave" \
-    "Saved core file sigall.precsave with execution log\."  \
+gdb_test "record save $precsave" \
+    "Saved core file $precsave with execution log\."  \
     "save process recfile"
 
 gdb_test "kill" "" "Kill process, prepare to debug log file" \
     "Kill the program being debugged\\? \\(y or n\\) " "y"
 
-gdb_test "record restore sigall.precsave" \
+gdb_test "record restore $precsave" \
     "Program terminated with signal .*" \
     "reload precord save file"
 
diff --git a/gdb/testsuite/gdb.reverse/sigall-reverse.c b/gdb/testsuite/gdb.reverse/sigall-reverse.c
index ac68278..b7579a8 100644
--- a/gdb/testsuite/gdb.reverse/sigall-reverse.c
+++ b/gdb/testsuite/gdb.reverse/sigall-reverse.c
@@ -18,9 +18,6 @@
 #include <signal.h>
 #include <unistd.h>
 
-#ifdef __sh__
-#define signal(a,b)	/* Signals not supported on this target - make them go away */
-#endif
 
 /* Signal handlers, we set breakpoints in them to make sure that the
    signals really get delivered.  */
@@ -1168,11 +1165,6 @@ return 0;
 int
 main ()
 {
-#ifdef usestubs
-  set_debug_traps ();
-  breakpoint ();
-#endif
-
 #ifdef SIG_SETMASK
   /* Ensure all the signals aren't blocked.
      The environment in which the testsuite is run may have blocked some
diff --git a/gdb/testsuite/gdb.reverse/sigall-reverse.exp b/gdb/testsuite/gdb.reverse/sigall-reverse.exp
index 12362de..598e5d4 100644
--- a/gdb/testsuite/gdb.reverse/sigall-reverse.exp
+++ b/gdb/testsuite/gdb.reverse/sigall-reverse.exp
@@ -22,21 +22,15 @@ if ![supports_reverse] {
     return
 }
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 gdb_exit
 gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
 
-set testfile sigall-reverse
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
-     untested ${testfile}.exp
-     return -1
+standard_testfile
+
+if {[build_executable $testfile.exp $testfile $srcfile debug] == -1} {
+    return -1
 }
 
 # Make the first signal SIGABRT because it is always supported.
diff --git a/gdb/testsuite/gdb.reverse/solib-precsave.exp b/gdb/testsuite/gdb.reverse/solib-precsave.exp
index 4082672..85384c3 100644
--- a/gdb/testsuite/gdb.reverse/solib-precsave.exp
+++ b/gdb/testsuite/gdb.reverse/solib-precsave.exp
@@ -21,14 +21,13 @@ if ![supports_process_record] {
     return
 }
 
-set testfile "solib-reverse"
-set srcfile  ${testfile}.c
+standard_testfile solib-reverse.c
+set precsave [standard_output_file solib.precsave]
 set libfile  "shr2"
 set libsrc   ${libfile}.c
-set library  ${objdir}/${subdir}/${libfile}.sl
-set binfile  ${objdir}/${subdir}/${testfile}
+set library  [standard_output_file ${libfile}.sl]
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
@@ -39,7 +38,13 @@ if { [gdb_compile_shlib ${srcdir}/${subdir}/${libsrc} ${library} "debug"] != ""
 
 set exec_opts [list debug shlib=${library}]
 
-if { [gdb_compile ${srcdir}/${subdir}/${srcfile} ${binfile} executable $exec_opts] != "" } {
+# Attempt to prevent -Wl,-z,relro which may happen by default with some
+# toolchain configurations.  Due to PR corefiles/11804 GDB will then produce
+# invalid core file.
+
+if { [gdb_compile ${srcdir}/${subdir}/${srcfile} ${binfile} executable \
+		     [concat $exec_opts additional_flags=-Wl,-z,norelro]] != ""
+     && [gdb_compile ${srcdir}/${subdir}/${srcfile} ${binfile} executable $exec_opts] != "" } {
     untested "Could not compile $binfile."
     return -1
 }
@@ -48,6 +53,10 @@ if { [gdb_compile ${srcdir}/${subdir}/${srcfile} ${binfile} executable $exec_opt
 
 gdb_exit
 gdb_start
+
+# Clear it to never find any separate system debug infos.
+gdb_test_no_output "set debug-file-directory"
+
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
 
@@ -66,14 +75,14 @@ gdb_test "break $end_of_main" \
 
 gdb_test "continue" "Breakpoint .* end of main .*" "run to end of main"
 
-gdb_test "record save solib.precsave" \
-    "Saved core file solib.precsave with execution log\."  \
+gdb_test "record save $precsave" \
+    "Saved core file $precsave with execution log\."  \
     "save process recfile"
 
 gdb_test "kill" "" "Kill process, prepare to debug log file" \
     "Kill the program being debugged\\? \\(y or n\\) " "y"
 
-gdb_test "record restore solib.precsave" \
+gdb_test "record restore $precsave" \
     "Program terminated with signal .*" \
     "reload core file"
 
diff --git a/gdb/testsuite/gdb.reverse/solib-reverse.exp b/gdb/testsuite/gdb.reverse/solib-reverse.exp
index 8d000f3..d878a7f 100644
--- a/gdb/testsuite/gdb.reverse/solib-reverse.exp
+++ b/gdb/testsuite/gdb.reverse/solib-reverse.exp
@@ -20,14 +20,12 @@ if ![supports_reverse] {
     return
 }
 
-set testfile "solib-reverse"
-set srcfile  ${testfile}.c
+standard_testfile
 set libfile  "shr2"
 set libsrc   ${libfile}.c
-set library  ${objdir}/${subdir}/${libfile}.sl
-set binfile  ${objdir}/${subdir}/${testfile}
+set library  [standard_output_file ${libfile}.sl]
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
@@ -47,6 +45,10 @@ if { [gdb_compile ${srcdir}/${subdir}/${srcfile} ${binfile} executable $exec_opt
 
 gdb_exit
 gdb_start
+
+# Clear it to never find any separate system debug infos.
+gdb_test_no_output "set debug-file-directory"
+
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
 
diff --git a/gdb/testsuite/gdb.reverse/step-precsave.exp b/gdb/testsuite/gdb.reverse/step-precsave.exp
index 529d3c0..f0f1832 100644
--- a/gdb/testsuite/gdb.reverse/step-precsave.exp
+++ b/gdb/testsuite/gdb.reverse/step-precsave.exp
@@ -25,8 +25,8 @@ if ![supports_process_record] {
     return
 }
 
-set testfile "step-reverse"
-set srcfile  ${testfile}.c
+standard_testfile step-reverse.c
+set precsave [standard_output_file step.precsave]
 
 if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
     return -1
@@ -46,14 +46,14 @@ gdb_test "break $end_of_main" \
 
 gdb_test "continue" "Breakpoint .* end of main .*" "run to end of main"
 
-gdb_test "record save step.precsave" \
-    "Saved core file step.precsave with execution log\."  \
+gdb_test "record save $precsave" \
+    "Saved core file $precsave with execution log\."  \
     "save process recfile"
 
 gdb_test "kill" "" "Kill process, prepare to debug log file" \
     "Kill the program being debugged\\? \\(y or n\\) " "y"
 
-gdb_test "record restore step.precsave" \
+gdb_test "record restore $precsave" \
     "Program terminated with signal .*" \
     "reload core file"
 
diff --git a/gdb/testsuite/gdb.reverse/step-reverse.exp b/gdb/testsuite/gdb.reverse/step-reverse.exp
index 8fd6c12..331b3a8 100644
--- a/gdb/testsuite/gdb.reverse/step-reverse.exp
+++ b/gdb/testsuite/gdb.reverse/step-reverse.exp
@@ -24,8 +24,7 @@ if ![supports_reverse] {
     return
 }
 
-set testfile "step-reverse"
-set srcfile  ${testfile}.c
+standard_testfile
 
 if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
     return -1
diff --git a/gdb/testsuite/gdb.reverse/until-precsave.exp b/gdb/testsuite/gdb.reverse/until-precsave.exp
index ce62c07..3e271c2 100644
--- a/gdb/testsuite/gdb.reverse/until-precsave.exp
+++ b/gdb/testsuite/gdb.reverse/until-precsave.exp
@@ -21,17 +21,17 @@ if ![supports_process_record] {
     return
 }
 
-set testfile "until-reverse"
-set srcfile ${testfile}.c
-set srcfile1 ur1.c
+standard_testfile until-reverse.c ur1.c
+set precsave [standard_output_file until.precsave]
 
-if { [prepare_for_testing $testfile.exp $testfile {until-reverse.c ur1.c} ] } {
+if { [prepare_for_testing $testfile.exp $testfile \
+	  [list $srcfile $srcfile2]] } {
     return -1
 }
 
 set bp_location1  [gdb_get_line_number "set breakpoint 1 here"]
 set bp_location7  [gdb_get_line_number "set breakpoint 7 here"]
-set bp_location9  [gdb_get_line_number "set breakpoint 9 here" "$srcfile1"]
+set bp_location9  [gdb_get_line_number "set breakpoint 9 here" "$srcfile2"]
 set bp_location19 [gdb_get_line_number "set breakpoint 19 here"]
 set bp_location20 [gdb_get_line_number "set breakpoint 20 here"]
 set bp_location21 [gdb_get_line_number "set breakpoint 21 here"]
@@ -52,16 +52,17 @@ gdb_test "break $end_of_main" \
 set oldtimeout $timeout
 set timeout [expr $oldtimeout + 120]
 gdb_test "continue" "Breakpoint .* set breakpoint 10a here .*" "run to end of main"
-set timeout $oldtimeout
 
-gdb_test "record save until.precsave" \
-    "Saved core file until.precsave with execution log\."  \
+# So can this, against gdbserver, for example.
+gdb_test "record save $precsave" \
+    "Saved core file $precsave with execution log\."  \
     "save process recfile"
+set timeout $oldtimeout
 
 gdb_test "kill" "" "Kill process, prepare to debug log file" \
     "Kill the program being debugged\\? \\(y or n\\) " "y"
 
-gdb_test "record restore until.precsave" \
+gdb_test "record restore $precsave" \
     "Program terminated with signal .*" \
     "reload core file"
 
@@ -94,7 +95,7 @@ gdb_test "finish" \
 # Advance to a function called by main (marker2)
 #
 gdb_test "advance marker2" \
-    "marker2 .a=43.*$srcfile1:$bp_location9.*" \
+    "marker2 .a=43.*$srcfile2:$bp_location9.*" \
     "advance to marker2"
 
 # Now issue an until with another function, not called by the current
@@ -125,7 +126,7 @@ gdb_test_no_output "set exec-dir reverse" "set reverse execution"
 #
 
 gdb_test "advance marker2" \
-    "marker2 .a=43.*$srcfile1:$bp_location9.*" \
+    "marker2 .a=43.*$srcfile2:$bp_location9.*" \
     "reverse-advance to marker2"
 
 # Finish out to main scope (backward)
diff --git a/gdb/testsuite/gdb.reverse/until-reverse.c b/gdb/testsuite/gdb.reverse/until-reverse.c
index e3845f3..ea9a0a5 100644
--- a/gdb/testsuite/gdb.reverse/until-reverse.c
+++ b/gdb/testsuite/gdb.reverse/until-reverse.c
@@ -78,10 +78,6 @@ int argc;
 char *argv[], **envp;
 #endif
 {
-#ifdef usestubs
-    set_debug_traps();  /* set breakpoint 5 here */
-    breakpoint();
-#endif
     if (argc == 12345) {  /* an unlikely value < 2^16, in case uninited */ /* set breakpoint 6 here */
 	fprintf (stderr, "usage:  factorial <number>\n");
 	return 1;
diff --git a/gdb/testsuite/gdb.reverse/until-reverse.exp b/gdb/testsuite/gdb.reverse/until-reverse.exp
index f59c3a5..51d836a 100644
--- a/gdb/testsuite/gdb.reverse/until-reverse.exp
+++ b/gdb/testsuite/gdb.reverse/until-reverse.exp
@@ -20,17 +20,16 @@ if ![supports_reverse] {
     return
 }
 
-set testfile "until-reverse"
-set srcfile ${testfile}.c
-set srcfile1 ur1.c
+standard_testfile .c ur1.c
 
-if { [prepare_for_testing $testfile.exp $testfile {until-reverse.c ur1.c} ] } {
+if { [prepare_for_testing $testfile.exp $testfile \
+	  [list $srcfile $srcfile2]] } {
     return -1
 }
 
 set bp_location1  [gdb_get_line_number "set breakpoint 1 here"]
 set bp_location7  [gdb_get_line_number "set breakpoint 7 here"]
-set bp_location9  [gdb_get_line_number "set breakpoint 9 here" "$srcfile1"]
+set bp_location9  [gdb_get_line_number "set breakpoint 9 here" "$srcfile2"]
 set bp_location19 [gdb_get_line_number "set breakpoint 19 here"]
 set bp_location20 [gdb_get_line_number "set breakpoint 20 here"]
 set bp_location21 [gdb_get_line_number "set breakpoint 21 here"]
@@ -71,7 +70,7 @@ gdb_test "finish" \
 # Advance to a function called by main (marker2)
 #
 gdb_test "advance marker2" \
-    "marker2 .a=43.*$srcfile1:$bp_location9.*" \
+    "marker2 .a=43.*$srcfile2:$bp_location9.*" \
     "advance to marker2"
 
 # Now issue an until with another function, not called by the current
@@ -102,7 +101,7 @@ gdb_test_no_output "set exec-dir reverse" "set reverse execution"
 #
 
 gdb_test "advance marker2" \
-    "marker2 .a=43.*$srcfile1:$bp_location9.*" \
+    "marker2 .a=43.*$srcfile2:$bp_location9.*" \
     "reverse-advance to marker2"
 
 # Finish out to main scope (backward)
diff --git a/gdb/testsuite/gdb.reverse/watch-precsave.exp b/gdb/testsuite/gdb.reverse/watch-precsave.exp
index 054b7c2..9c2ec49 100644
--- a/gdb/testsuite/gdb.reverse/watch-precsave.exp
+++ b/gdb/testsuite/gdb.reverse/watch-precsave.exp
@@ -22,9 +22,8 @@ if ![supports_process_record] {
     return
 }
 
-set testfile "watch-reverse"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile watch-reverse.c
+set precsave [standard_output_file watch.precsave]
 
 if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
     return -1
@@ -44,14 +43,14 @@ gdb_test "break $end_location" \
 
 gdb_test "continue" "Breakpoint .* end of main .*" "run to end of main"
 
-gdb_test "record save watch.precsave" \
-    "Saved core file watch.precsave with execution log\."  \
+gdb_test "record save $precsave" \
+    "Saved core file $precsave with execution log\."  \
     "save process recfile"
 
 gdb_test "kill" "" "Kill process, prepare to debug log file" \
     "Kill the program being debugged\\? \\(y or n\\) " "y"
 
-gdb_test "record restore watch.precsave" \
+gdb_test "record restore $precsave" \
     "Program terminated with signal .*" \
     "reload core file"
 
diff --git a/gdb/testsuite/gdb.reverse/watch-reverse.c b/gdb/testsuite/gdb.reverse/watch-reverse.c
index 8407108..3231a4c 100644
--- a/gdb/testsuite/gdb.reverse/watch-reverse.c
+++ b/gdb/testsuite/gdb.reverse/watch-reverse.c
@@ -139,10 +139,6 @@ func4 ()
 
 int main ()
 {
-#ifdef usestubs
-  set_debug_traps();
-  breakpoint();
-#endif
   struct1.val = 1;
   struct2.val = 2;
   ptr1 = &struct1;
diff --git a/gdb/testsuite/gdb.reverse/watch-reverse.exp b/gdb/testsuite/gdb.reverse/watch-reverse.exp
index 78b3f40..ca31b4c 100644
--- a/gdb/testsuite/gdb.reverse/watch-reverse.exp
+++ b/gdb/testsuite/gdb.reverse/watch-reverse.exp
@@ -22,9 +22,7 @@ if ![supports_reverse] {
     return
 }
 
-set testfile "watch-reverse"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
 if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
     return -1
diff --git a/gdb/testsuite/gdb.server/Makefile.in b/gdb/testsuite/gdb.server/Makefile.in
index eb1981e..8d9a867 100644
--- a/gdb/testsuite/gdb.server/Makefile.in
+++ b/gdb/testsuite/gdb.server/Makefile.in
@@ -14,6 +14,7 @@ clean mostlyclean:
 	-find . -name 'b~*.ad[sb]' -print | xargs rm -f
 	-rm -f *~ a.out xgdb *.x *.ci *.tmp
 	-rm -f *~ *.o a.out xgdb *.x *.ci *.tmp
+	-rm -f *.dwo *.dwp
 	-rm -f core core.coremaker coremaker.core corefile $(EXECUTABLES)
 	-rm -f $(MISCELLANEOUS) twice-tmp.c
 
diff --git a/gdb/testsuite/gdb.server/ext-attach.exp b/gdb/testsuite/gdb.server/ext-attach.exp
index edf08fd..c5aec84 100644
--- a/gdb/testsuite/gdb.server/ext-attach.exp
+++ b/gdb/testsuite/gdb.server/ext-attach.exp
@@ -19,9 +19,7 @@
 
 load_lib gdbserver-support.exp
 
-set testfile "ext-attach"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
 if { [skip_gdbserver_tests] } {
     return 0
@@ -32,15 +30,13 @@ if [is_remote target] then {
     return 0
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
-    untested ext-attach.exp
+if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_load $binfile
-gdb_reinitialize_dir $srcdir/$subdir
+# Make sure we're disconnected, in case we're testing with an
+# extended-remote board, therefore already connected.
+gdb_test "disconnect" ".*"
 
 set target_exec [gdbserver_download_current_prog]
 gdbserver_start_extended
@@ -57,14 +53,16 @@ if { [istarget "*-*-cygwin*"] } {
     set testpid [ exec ps -e | gawk "{ if (\$1 == $testpid) print \$4; }" ]
 }
 
-gdb_test "attach $testpid" "Attached to.*" \
+gdb_test "attach $testpid" \
+    "Attaching to program: .*, process $testpid.*(in|at).*" \
     "attach to remote program 1"
 gdb_test "backtrace" ".*main.*" "backtrace 1"
 
-gdb_test "detach" "Detached from remote process.*\\."
+gdb_test "detach" "Detaching from program.*process.*"
 gdb_test "backtrace" "No stack\\." "backtrace with no program"
 
-gdb_test "attach $testpid" "Attached to.*" \
+gdb_test "attach $testpid" \
+    "Attaching to program: .*, process $testpid.*(in|at).*" \
     "attach to remote program 2"
 gdb_test "backtrace" ".*main.*" "backtrace 2"
 
diff --git a/gdb/testsuite/gdb.server/ext-run.exp b/gdb/testsuite/gdb.server/ext-run.exp
index 163e0cf..f397cd9 100644
--- a/gdb/testsuite/gdb.server/ext-run.exp
+++ b/gdb/testsuite/gdb.server/ext-run.exp
@@ -19,15 +19,13 @@
 
 load_lib gdbserver-support.exp
 
-set testfile "server"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/ext-run
+standard_testfile server.c
 
 if { [skip_gdbserver_tests] } {
     return 0
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+if {[build_executable $testfile.exp $testfile $srcfile debug] == -1} {
     return -1
 }
 
@@ -40,6 +38,10 @@ gdb_start
 gdb_load $binfile
 gdb_reinitialize_dir $srcdir/$subdir
 
+# Make sure we're disconnected, in case we're testing with an
+# extended-remote board, therefore already connected.
+gdb_test "disconnect" ".*"
+
 set target_exec [gdbserver_download_current_prog]
 gdbserver_start_extended
 
diff --git a/gdb/testsuite/gdb.server/file-transfer.exp b/gdb/testsuite/gdb.server/file-transfer.exp
index 6b48b02..c5455ef 100644
--- a/gdb/testsuite/gdb.server/file-transfer.exp
+++ b/gdb/testsuite/gdb.server/file-transfer.exp
@@ -18,23 +18,19 @@
 
 load_lib gdbserver-support.exp
 
-set testfile "server"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/file-transfer${EXEEXT}
+standard_testfile server.c
 
 if { [skip_gdbserver_tests] } {
     return 0
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
-    untested file-transfer.exp
+if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_load $binfile
-gdb_reinitialize_dir $srcdir/$subdir
+# Make sure we're disconnected, in case we're testing with an
+# extended-remote board, therefore already connected.
+gdb_test "disconnect" ".*"
 
 gdbserver_run ""
 
diff --git a/gdb/testsuite/gdb.server/server-exec-info.exp b/gdb/testsuite/gdb.server/server-exec-info.exp
new file mode 100644
index 0000000..6635805
--- /dev/null
+++ b/gdb/testsuite/gdb.server/server-exec-info.exp
@@ -0,0 +1,34 @@
+# Copyright (C) 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib gdbserver-support.exp
+
+# We test for skip_shlib_tests in this test because without a main
+# exec file we only have the exec target loaded if shared libraries
+# are present.
+if {[skip_gdbserver_tests] || [skip_shlib_tests]} {
+    return
+}
+
+standard_testfile server.c
+if [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] {
+    return -1
+}
+
+gdb_test "file" ".*" "file" \
+	 {Discard symbol table from `.*'\? \(y or n\) } "y"
+gdbserver_run ""
+gdb_test "set sysroot remote:"
+gdb_test "info files" "\r\nLocal exec file:\r\n\t<no file loaded>"
diff --git a/gdb/testsuite/gdb.server/server-mon.exp b/gdb/testsuite/gdb.server/server-mon.exp
index ffe95bc..f47fe15 100644
--- a/gdb/testsuite/gdb.server/server-mon.exp
+++ b/gdb/testsuite/gdb.server/server-mon.exp
@@ -19,22 +19,19 @@
 
 load_lib gdbserver-support.exp
 
-set testfile "server"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/server-mon
+standard_testfile server.c
 
 if { [skip_gdbserver_tests] } {
     return 0
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_load $binfile
-gdb_reinitialize_dir $srcdir/$subdir
+# Make sure we're disconnected, in case we're testing with an
+# extended-remote board, therefore already connected.
+gdb_test "disconnect" ".*"
 
 gdbserver_run ""
 
diff --git a/gdb/testsuite/gdb.server/server-run.exp b/gdb/testsuite/gdb.server/server-run.exp
index f9a41e9..da357b4 100644
--- a/gdb/testsuite/gdb.server/server-run.exp
+++ b/gdb/testsuite/gdb.server/server-run.exp
@@ -19,15 +19,13 @@
 
 load_lib gdbserver-support.exp
 
-set testfile "server"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/server-run
+standard_testfile server.c
 
 if { [skip_gdbserver_tests] } {
     return 0
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+if {[build_executable $testfile.exp $testfile $srcfile debug] == -1} {
     return -1
 }
 
@@ -35,6 +33,10 @@ gdb_exit
 gdb_start
 gdb_load $binfile
 
+# Make sure we're disconnected, in case we're testing with an
+# extended-remote board, therefore already connected.
+gdb_test "disconnect" ".*"
+
 gdbserver_run ""
 gdb_reinitialize_dir $srcdir/$subdir
 
diff --git a/gdb/testsuite/gdb.server/solib-list-lib.c b/gdb/testsuite/gdb.server/solib-list-lib.c
new file mode 100644
index 0000000..504a34e
--- /dev/null
+++ b/gdb/testsuite/gdb.server/solib-list-lib.c
@@ -0,0 +1,28 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <signal.h>
+
+static int libvar = 23;
+
+int
+libfunc (void)
+{
+  raise (SIGUSR1);
+
+  return libvar;
+}
diff --git a/gdb/testsuite/gdb.server/solib-list-main.c b/gdb/testsuite/gdb.server/solib-list-main.c
new file mode 100644
index 0000000..8abee3f
--- /dev/null
+++ b/gdb/testsuite/gdb.server/solib-list-main.c
@@ -0,0 +1,25 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+extern int libfunc (void);
+
+int
+main (void)
+{
+  libfunc ();
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.server/solib-list.exp b/gdb/testsuite/gdb.server/solib-list.exp
new file mode 100644
index 0000000..7fbfefc
--- /dev/null
+++ b/gdb/testsuite/gdb.server/solib-list.exp
@@ -0,0 +1,108 @@
+# Copyright 2010-2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+# In some cases gdbserver cannot find the DT_DEBUG library list on its own and
+# it needs to fall back to GDB solib-svr4.c look up via symbols from the main
+# executable.
+# gdbserver :1234 ld-linux-x86-64.so.2 /bin/prog
+# gdb /bin/prog
+# (gdb) target remote ...
+
+load_lib gdbserver-support.exp
+load_lib prelink-support.exp
+
+if {[skip_gdbserver_tests] || [skip_shlib_tests]} {
+    return
+}
+
+# This test case (currently) does not support remote targets, since it
+# assumes the ELF interpreter can be found on the host system
+if [is_remote target] then {
+    return
+}
+
+standard_testfile solib-list-main.c
+set srclibfile ${testfile}-lib.c
+set binlibfile [standard_output_file ${testfile}.so]
+set executable ${testfile}
+set objfile ${binfile}.o
+
+if { [get_compiler_info]
+     || [gdb_compile_shlib "${srcdir}/${subdir}/${srclibfile}" "${binlibfile}" [list debug ldflags=-Wl,-soname,${binlibfile}]] != ""
+     || [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != ""
+     || [gdb_compile "${objfile} ${binlibfile}" "${binfile}" executable {}] != "" } {
+    untested "could not compile sources"
+    return -1
+}
+
+set interp_system [section_get ${binfile} .interp]
+verbose -log "system interpreter is: $interp_system"
+
+foreach nonstop { 0 1 } { with_test_prefix "non-stop $nonstop" {
+
+    # clean_restart assumes ${objdir}/${subdir}/ which is not applicable
+    # for ${interp_system}.
+    gdb_exit
+    gdb_start
+    gdb_reinitialize_dir $srcdir/$subdir
+    gdb_load ${interp_system}
+    gdb_load_shlibs ${binfile}
+    gdb_load_shlibs ${binlibfile}
+
+    # Make sure we're disconnected, in case we're testing with an
+    # extended-remote board, therefore already connected.
+    gdb_test "disconnect" ".*"
+
+    gdb_test "set non-stop $nonstop"
+    gdb_test "set target-async $nonstop"
+
+    # It is required for the non-stop mode, GDB would try to step over
+    # _dl_debug_state breakpoint will still only ld.so loaded in gdbserver.
+    # But GDB having symbols from the main executable it would try to use
+    # displaced-stepping buffer at unmapped that time address _start.
+    gdb_test "set displaced-stepping off"
+	
+    set res [gdbserver_spawn ${binfile}]
+    set gdbserver_protocol [lindex $res 0]
+    set gdbserver_gdbport [lindex $res 1]
+
+    # Load BINFILE after gdbserver_spawn (so that gdbserver executes ld.so)
+    # but before "target remote" below so that qSymbol data get already
+    # initialized from BINFILE (and not from ld.so first needing a change to
+    # BINFILE later).
+    gdb_test "file ${binfile}" {Reading symbols from .*\.\.\.done\..*} "file binfile" \
+	     {(Are you sure you want to change the file|Load new symbol table from ".*")\? \(y or n\) } "y"
+
+    set test "target $gdbserver_protocol"
+    gdb_test_multiple "target $gdbserver_protocol $gdbserver_gdbport" $test {
+	-re "Remote debugging using .*\r\n$gdb_prompt " {
+	    # Do not anchor end, there may be more output in non-stop mode.
+	    pass $test
+	}
+    }
+
+    if $nonstop {
+	set test "non-stop interior stop"
+	gdb_test_multiple "" $test {
+	    -re " #1 stopped\\.\r\n" {
+		pass $test
+	    }
+	}
+    }
+
+    gdb_test "continue" "Program received signal SIGUSR1, .*"
+    gdb_test "sharedlibrary" ".*"
+    gdb_test "p libvar" " = 23"
+}}
diff --git a/gdb/testsuite/gdb.stabs/Makefile.in b/gdb/testsuite/gdb.stabs/Makefile.in
index 7d5755c..f1a5913 100644
--- a/gdb/testsuite/gdb.stabs/Makefile.in
+++ b/gdb/testsuite/gdb.stabs/Makefile.in
@@ -8,6 +8,7 @@ all:
 
 clean mostlyclean:
 	-rm -f *.o *~ core tmp.c tmp.s weird.s errs exclfwd gdb11479
+	-rm -f *.dwo *.dwp
 
 distclean maintainer-clean realclean: clean
 	-rm -f Makefile gdb.log gdb.sum
diff --git a/gdb/testsuite/gdb.stabs/exclfwd.exp b/gdb/testsuite/gdb.stabs/exclfwd.exp
index 92df6f9..77e2d5d 100644
--- a/gdb/testsuite/gdb.stabs/exclfwd.exp
+++ b/gdb/testsuite/gdb.stabs/exclfwd.exp
@@ -16,40 +16,17 @@
 # Please email any bugs, comments, and/or additions to this file to:
 # bug-gdb at gnu.org
 
-if $tracelevel {
-    strace $tracelevel
-}
-
-# If the test directory was not created by configure then skip
-# this test.
-if ![file isdirectory ${objdir}/${subdir}] then {
-    return 0
-}
-
 #
 # test running programs
 #
 
-set testfile exclfwd
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile exclfwd1.c exclfwd2.c
 
-foreach file {exclfwd1 exclfwd2} {
-    if {[gdb_compile "${srcdir}/${subdir}/${file}.c" "${file}.o" object {debug}] != ""} {
-        untested exclfwd.exp
-        return -1
-    }
+if {[prepare_for_testing $testfile.exp $testfile \
+	 [list $srcfile $srcfile2] debug]} {
+    return -1
 }
 
-if {[gdb_compile "exclfwd1.o exclfwd2.o" ${binfile} executable {debug}] != "" } {
-     untested exclfwd.exp
-     return -1
-}
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
 if ![runto_main] then {
     perror "couldn't run to breakpoint"
     continue
diff --git a/gdb/testsuite/gdb.stabs/gdb11479.exp b/gdb/testsuite/gdb.stabs/gdb11479.exp
index 1dd70d7..f24d054 100644
--- a/gdb/testsuite/gdb.stabs/gdb11479.exp
+++ b/gdb/testsuite/gdb.stabs/gdb11479.exp
@@ -17,10 +17,6 @@
 
 # Test GDB stabs problem with qualified parameter of forward types.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 set testfile "gdb11479"
 
diff --git a/gdb/testsuite/gdb.stabs/weird.exp b/gdb/testsuite/gdb.stabs/weird.exp
index 1569cdb..78ceb68 100644
--- a/gdb/testsuite/gdb.stabs/weird.exp
+++ b/gdb/testsuite/gdb.stabs/weird.exp
@@ -17,22 +17,12 @@
 # Test that GDB properly ignores invalid stabs.
 # Also test that GDB can debug a .o file, and that it doesn't mind
 # a file that's more minimal than what a compiler normally puts out.
-if $tracelevel then {
-	strace $tracelevel
-}
-
-# If the test directory was not created by configure then skip
-# this test.
-if ![file isdirectory ${objdir}/${subdir}] then {
-    return 0
-}
-
 
 set testfile weird
-set srcfile ${objdir}/${subdir}/weird.s
-set binfile ${objdir}/${subdir}/weirdx.o
+set srcfile [standard_output_file weird.s]
+set binfile [standard_output_file weirdx.o]
 
-if { [ get_compiler_info "$binfile" ] } {
+if { [ get_compiler_info ] } {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.threads/Makefile.in b/gdb/testsuite/gdb.threads/Makefile.in
index 954d547..8f9f867 100644
--- a/gdb/testsuite/gdb.threads/Makefile.in
+++ b/gdb/testsuite/gdb.threads/Makefile.in
@@ -1,7 +1,8 @@
 VPATH = @srcdir@
 srcdir = @srcdir@
 
-EXECUTABLES = attach-into-signal attach-stopped attachstop-mt \
+EXECUTABLES = attach-into-signal-nothr attach-into-signal-thr \
+	attach-stopped attachstop-mt \
 	bp_in_thread current-lwp-dead execl execl1 fork-child-threads \
 	fork-thread-pending gcore-pthreads hand-call-in-threads \
 	ia64-sigill interrupted-hand-call killed linux-dp \
@@ -18,6 +19,7 @@ all info install-info dvi install uninstall installcheck check:
 clean mostlyclean:
 	-rm -f *~ *.o a.out xgdb *.x *.ci *.tmp core core.* $(EXECUTABLES) \
 	 *.core gcore.test
+	-rm -f *.dwo *.dwp
 
 distclean maintainer-clean realclean: clean
 	-rm -f Makefile config.status config.log config.h gdb.log gdb.sum
diff --git a/gdb/testsuite/gdb.threads/attach-into-signal.exp b/gdb/testsuite/gdb.threads/attach-into-signal.exp
index db88222..c74fafa 100644
--- a/gdb/testsuite/gdb.threads/attach-into-signal.exp
+++ b/gdb/testsuite/gdb.threads/attach-into-signal.exp
@@ -22,149 +22,162 @@ if { ![isnative] || [is_remote host] || [target_info exists use_gdb_stub]
     continue
 }
 
-set testfile "attach-into-signal"
-set srcfile  ${testfile}.c
-set binfile  ${objdir}/${subdir}/${testfile}
-set escapedbinfile  [string_to_regexp ${objdir}/${subdir}/${testfile}]
+standard_testfile
+set executable_nothr ${testfile}-nothr
+set executable_thr ${testfile}-thr
 
-remote_exec build "rm -f ${binfile}"
-# For debugging this test
-#
-#log_user 1
-
-proc corefunc { threadtype } {
+proc corefunc { threadtype executable } {
     global srcfile
-    global binfile
-    global escapedbinfile
     global srcdir
     global subdir
     global gdb_prompt
 
-    if [get_compiler_info ${binfile}] {
-	return -1
-    }
+    with_test_prefix "$threadtype" {
+	clean_restart ${executable}
 
-    # Start the program running and then wait for a bit, to be sure
-    # that it can be attached to.
-    # Statistically there is a better chance without giving process a nice.
-
-    set testpid [eval exec $binfile &]
-    exec sleep 2
-
-    # Run 2 passes of the test.
-    # The C file inferior stops pending its signals if a single one is lost,
-    # we test successful redelivery of the caught signal by the 2nd pass.
-
-    # linux-2.6.20.4.x86_64 had maximal attempt # 20 in 4 test runs.
-    set attempts 100
-    set attempt 1
-    set passes 1
-    while { $passes < 3 && $attempt <= $attempts } {
-	set stoppedtry 0
-	while { $stoppedtry < 10 } {
-	    if [catch {open /proc/${testpid}/status r} fileid] {
-		set stoppedtry 10
-		break
-	    }
-	    gets $fileid line1;
-	    gets $fileid line2;
-	    close $fileid;
+	set binfile [standard_output_file $executable]
+	set escapedbinfile [string_to_regexp ${binfile}]
 
-	    if {![string match "*(stopped)*" $line2]} {
-		# No PASS message as we may be looping in multiple attempts.
-		break
-	    }
-	    sleep 1
-	    set stoppedtry [expr $stoppedtry + 1]
-	}
-	if { $stoppedtry >= 10 } {
-	    verbose -log $line2
-	    set test "$threadtype: process is still running on the attempt # $attempt of $attempts"
-	    break
+	if [get_compiler_info] {
+	    return -1
 	}
 
-	# Main test:
-	set test "$threadtype: attach (pass $passes), pending signal catch"
-	if {[gdb_test_multiple "attach $testpid" $test {
-	    -re "Attaching to program.*`?$escapedbinfile'?, process $testpid.*Received Alarm clock.*$gdb_prompt $" {
-		# nonthreaded:
-		pass $test
-		verbose -log "$test succeeded on the attempt # $attempt of $attempts"
-		set passes [expr $passes + 1]
-	    }
-	    -re "Attaching to program.*`?$escapedbinfile'?, process $testpid.*$gdb_prompt $" {
-		# nonthreaded:
-		# We just lack the luck, we should try it again.
-		set attempt [expr $attempt + 1]
+	gdb_test "handle SIGALRM stop print pass" "Yes.*Yes.*Yes.*"
+
+	# Start the program running and then wait for a bit, to be sure
+	# that it can be attached to.
+	# Statistically there is a better chance without giving process a nice.
+
+	set testpid [eval exec $binfile &]
+	exec sleep 2
+
+	# Run 2 passes of the test.
+	# The C file inferior stops pending its signals if a single one is lost,
+	# we test successful redelivery of the caught signal by the 2nd pass.
+
+	# linux-2.6.20.4.x86_64 had maximal attempt # 20 in 4 test runs.
+	set attempts 100
+	set attempt 1
+	set passes 1
+	while { $passes < 3 && $attempt <= $attempts } {
+	    set stoppedtry 0
+	    while { $stoppedtry < 10 } {
+		if [catch {open /proc/${testpid}/status r} fileid] {
+		    set stoppedtry 10
+		    break
+		}
+		gets $fileid line1;
+		gets $fileid line2;
+		close $fileid;
+
+		if {![string match "*(stopped)*" $line2]} {
+		    # No PASS message as we may be looping in multiple
+		    # attempts.
+		    break
+		}
+		sleep 1
+		set stoppedtry [expr $stoppedtry + 1]
 	    }
-	    -re "Attaching to process $testpid.*Received Alarm clock.*$gdb_prompt $" {
-		# threaded:
-		pass $test
-		verbose -log "$test succeeded on the attempt # $attempt of $attempts"
-		set passes [expr $passes + 1]
+	    if { $stoppedtry >= 10 } {
+		verbose -log $line2
+		set test "process is still running on the attempt # $attempt of $attempts"
+		break
 	    }
-	    -re "Attaching to process $testpid.*$gdb_prompt $" {
-		# threaded:
-		# We just lack the luck, we should try it again.
-		set attempt [expr $attempt - 1]
+
+	    # Main test:
+	    set test "attach (pass $passes), pending signal catch"
+	    if {[gdb_test_multiple "attach $testpid" $test {
+		-re "Attaching to program.*`?$escapedbinfile'?, process $testpid.*Program received signal SIGALRM.*$gdb_prompt $" {
+		    # nonthreaded:
+		    pass $test
+		    verbose -log "$test succeeded on the attempt # $attempt of $attempts"
+		    set passes [expr $passes + 1]
+		}
+		-re "Attaching to program.*`?$escapedbinfile'?, process $testpid.*$gdb_prompt $" {
+		    set ok 0
+
+		    if { $threadtype == "threaded" } {
+			# In the threaded case, the signal is left
+			# pending on the second thread.  Check for
+			# that by peeking at the thread's siginfo.
+			# SIGALRM is 14, SIGSTOP is 19.
+
+			# With remote targets, we need to pull the
+			# thread list explicitly before GDB even knows
+			# about thread 2.
+			set test2 "pull thread list"
+			gdb_test_multiple "info threads" $test2 {
+			    -re "\r\n$gdb_prompt $" {
+			    }
+			}
+
+			set test2 "thread apply 2 print \$_siginfo.si_signo"
+			gdb_test_multiple $test2 $test2 {
+			    -re " = 14\r\n$gdb_prompt $" {
+				set ok 1
+			    }
+			    -re " = 19\r\n$gdb_prompt $" {
+			    }
+			}
+		    } else {
+			# In the nonthreaded case, GDB should tell the
+			# user about having seen a signal.
+		    }
+
+		    if { $ok == 0} {
+			# We just lack the luck, we should try it again.
+			set attempt [expr $attempt + 1]
+		    } else {
+			pass $test
+			verbose -log "$test succeeded on the attempt # $attempt of $attempts"
+			set passes [expr $passes + 1]
+		    }
+		}
+	    }] != 0 } {
+		break
 	    }
-	}] != 0 } {
-	    break
-	}
 
-	gdb_test "detach" "Detaching from.*" ""
-    }
-    if {$passes < 3} {
-	if {$attempt > $attempts} {
-	    unresolved $test
-	} else {
-	    fail $test
+	    gdb_test "detach" "Detaching from.*" ""
+	}
+	if {$passes < 3} {
+	    if {$attempt > $attempts} {
+		unresolved $test
+	    } else {
+		fail $test
+	    }
 	}
-    }
 
-    # Exit and detach the process.
+	# Exit and detach the process.
        
-    gdb_exit
+	gdb_exit
 
-    # Make sure we don't leave a process around to confuse
-    # the next test run (and prevent the compile by keeping
-    # the text file busy), in case the "set should_exit" didn't
-    # work.
+	# Make sure we don't leave a process around to confuse the
+	# next test run (and prevent the compile by keeping the text
+	# file busy), in case the "set should_exit" didn't work.
 
-    # Continue the program - some Linux kernels need it before -9 if the
-    # process is stopped.
-    remote_exec build "kill -s CONT ${testpid}"
+	# Continue the program - some Linux kernels need it before -9 if the
+	# process is stopped.
+	remote_exec build "kill -s CONT ${testpid}"
        
-    remote_exec build "kill -9 ${testpid}"
-}
+	remote_exec build "kill -9 ${testpid}"
 
-# Start with clean gdb
-gdb_exit
+    }
+}
 
 # build the test case first without threads
 #
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
-    untested "attach-into-signal.exp (unthreaded)"
+if {[build_executable $testfile $executable_nothr $srcfile] == -1} {
+    untested "attach-into-signal.exp (nonthreaded)"
     return -1
 }
 
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-gdb_test_no_output "set debug lin-lwp 1" ""
-
-corefunc nonthreaded
+corefunc nonthreaded ${executable_nothr}
 
 # build the test case also with threads
 #
-if  { [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DUSE_THREADS}] != "" } {
+if  { [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" [standard_output_file ${executable_thr}] executable {debug additional_flags=-DUSE_THREADS}] != "" } {
     untested "attach-into-signal.exp (threaded)"
     return -1
 }
 
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-gdb_test_no_output "set debug lin-lwp 1" ""
-
-corefunc threaded
+corefunc threaded ${executable_thr}
diff --git a/gdb/testsuite/gdb.threads/attach-stopped.exp b/gdb/testsuite/gdb.threads/attach-stopped.exp
index d2aacb3..f4c05ba 100644
--- a/gdb/testsuite/gdb.threads/attach-stopped.exp
+++ b/gdb/testsuite/gdb.threads/attach-stopped.exp
@@ -23,10 +23,8 @@ if { ![isnative] || [is_remote host] || [target_info exists use_gdb_stub]
     continue
 }
 
-set testfile "attach-stopped"
-set srcfile  ${testfile}.c
-set binfile  ${objdir}/${subdir}/${testfile}
-set escapedbinfile  [string_to_regexp ${objdir}/${subdir}/${testfile}]
+standard_testfile
+set escapedbinfile  [string_to_regexp $binfile]
 
 #execute_anywhere "rm -f ${binfile}"
 remote_exec build "rm -f ${binfile}"
@@ -42,7 +40,7 @@ proc corefunc { threadtype } {
     global subdir
     global gdb_prompt
 
-    if [get_compiler_info ${binfile}] {
+    if [get_compiler_info] {
 	return -1
     }
 
@@ -78,61 +76,16 @@ proc corefunc { threadtype } {
     } else {
 	gdb_test "bt" ".*sleep.*main.*" "$threadtype: attach2 to stopped bt"
     }
-    # This breakpoint is there for old/non-x86 kernels not restarting syscalls.
-    gdb_breakpoint $srcfile:[gdb_get_line_number "Second sleep"]
-    set test "$threadtype: attach2 continue"
-    gdb_test_multiple "continue" "continue ($test)" {
-	-re "Continuing" {
-	    pass "continue ($test)"
-	}
-    }
-
-    # For this to work we must be sure to consume the "Continuing."
-    # message first, or GDB's signal handler may not be in place.
-    after 1000 {send_gdb "\003"}
-    set test "$threadtype: attach2 stop interrupt"
-    gdb_expect 10 {
-      -re "Program received signal SIGINT.*$gdb_prompt $"
-	{
-	  pass $test
-	}
-      -re "Breakpoint \[0-9\].*$srcfile.*$gdb_prompt $"
-	{
-	  pass $test
-	}
-      timeout
-	{
-	  fail $test
-	}
-    }
 
     gdb_exit
 
     # Avoid some race:
     sleep 2
 
-    # At this point, the process should be sleeping
+    # At this point, the process may be sleeping or T (Stopped) depending on
+    # the Linux kernel version.  The behavior is not tested as it is not
+    # dependent on GDB.
 
-    if [catch {open /proc/${testpid}/status r} fileid2] {
-	set line2 "NOTFOUND"
-    } else {
-	gets $fileid2 line1;
-	gets $fileid2 line2;
-	close $fileid2;
-    }
-
-    set test "$threadtype: attach2, exit leaves process sleeping"
-    if {[string match "*(sleeping)*" $line2]} {
-      pass $test
-    } else {
-      fail $test
-    }
-
-    # Make sure we don't leave a process around to confuse
-    # the next test run (and prevent the compile by keeping
-    # the text file busy), in case the "set should_exit" didn't
-    # work.
-       
     remote_exec build "kill -9 ${testpid}"
 }
 
diff --git a/gdb/testsuite/gdb.threads/attachstop-mt.c b/gdb/testsuite/gdb.threads/attachstop-mt.c
deleted file mode 100644
index ec884cb..0000000
--- a/gdb/testsuite/gdb.threads/attachstop-mt.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2008-2012 Free Software Foundation, Inc.
-
-   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 3 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, see <http://www.gnu.org/licenses/>.  */
-
-/* This program is intended to be started outside of gdb, then
-   manually stopped via a signal.  */
-
-#include <unistd.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Red Hat BZ PR 197584.c */
-
-void *func (void *arg)
-{
-  sleep (10000);  /* Ridiculous time, but we will eventually kill it.  */
-  sleep (10000);	/* RHEL3U8 kernel-2.4.21-47.EL will cut the sleep time.  */
-
-  return NULL;	/* thread-sleep */
-}
-
-int main ()
-{
-  pthread_t t1,t2;
-  int ret;
-
-  ret = pthread_create (&t1, NULL, func, NULL);
-  if (ret)
-    fprintf(stderr, "pthread_create(): %s", strerror (ret));
-  ret = pthread_create (&t2, NULL, func, NULL);
-  if (ret)
-    fprintf(stderr, "pthread_create(): %s", strerror (ret));
-
-  ret = pthread_join (t1, NULL);
-  if (ret)	/* first-join */
-    fprintf(stderr, "pthread_join(): %s", strerror (ret));
-  ret = pthread_join (t2, NULL);
-  if (ret)
-    fprintf(stderr, "pthread_join(): %s", strerror (ret));
-
-  return 0;
-}
diff --git a/gdb/testsuite/gdb.threads/attachstop-mt.exp b/gdb/testsuite/gdb.threads/attachstop-mt.exp
deleted file mode 100644
index 3e04f3d..0000000
--- a/gdb/testsuite/gdb.threads/attachstop-mt.exp
+++ /dev/null
@@ -1,266 +0,0 @@
-# Copyright 2008-2012 Free Software Foundation, Inc.
-
-# 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 3 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, see <http://www.gnu.org/licenses/>.
-
-# This test is based on gdb.base/attach.exp with modifications by Jeff Johnston
-# <jjohnstn at redhat.com> and Jan Kratochvil <jan.kratochvil at redhat.com>.
-
-# This test only works on Linux
-if { ![isnative] || [is_remote host] || [target_info exists use_gdb_stub]
-     || ![istarget *-linux*] } {
-    continue
-}
-
-set testfile "attachstop-mt"
-set srcfile  ${testfile}.c
-set binfile  ${objdir}/${subdir}/${testfile}
-set escapedbinfile  [string_to_regexp ${objdir}/${subdir}/${testfile}]
-
-#execute_anywhere "rm -f ${binfile}"
-remote_exec build "rm -f ${binfile}"
-# For debugging this test
-#
-#log_user 1
-
-# build the test case
-#
-if  { [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
-    untested attachstop-mt.exp
-    return -1
-}
-
-if [get_compiler_info ${binfile}] {
-    return -1
-}
-
-# Start the program running and then wait for a bit, to be sure
-# that it can be attached to.
-
-set testpid [eval exec $binfile &]
-
-# No race
-sleep 2
-
-# The testcase has three threads, find some other thread TID for $testpid2.
-set tids [exec sh -c "echo /proc/$testpid/task/*"]
-regsub -all /proc/$testpid/task/ $tids {} tids
-if {$tids == "*"} {
-    unresolved "/proc/PID/task is not supported (kernel-2.4?)"
-    remote_exec build "kill -9 ${testpid}"
-    return -1
-}
-set tids [lsort -integer [split $tids]]
-if {[llength $tids] != 3 || [lindex $tids 0] != $testpid} {
-    verbose -log "Invalid TIDs <$tids> for PID $testpid"
-    fail "Invalid TIDs found"
-    remote_exec build "kill -9 ${testpid}"
-    return -1
-}
-set testpid2 [lindex $tids 2]
-
-# Initial sanity test it is normally sleeping
-set status2 /proc/${testpid}/task/${testpid2}/status
-set fileid0 [open $status2 r];
-gets $fileid0 line1;
-gets $fileid0 line2;
-close $fileid0;
-
-set test "attach0, initial sanity check of the sleeping state"
-if {[string match "*(sleeping)*" $line2]} {
-  pass $test
-} else {
-  fail $test
-}
-
-# Sttach and detach to test it will not become stopped
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
-set test "attach0 to sleeping"
-gdb_test_multiple "attach $testpid" "$test" {
-    -re "Attaching to program.*`?$escapedbinfile'?, process $testpid.*$gdb_prompt $" {
-        pass "$test"
-    }
-}
-
-gdb_test "gcore /dev/null" ".*aved corefile.*" "attach0 to sleeping gcore invocation"
-
-gdb_test "thread 2" ".*witching to thread 2 .*" "attach0 to sleeping switch thread"
-
-gdb_test "bt" ".*sleep.*func.*" "attach0 to sleeping bt"
-
-# Exit and detach the process.
-
-gdb_exit
-
-# No race
-sleep 2
-
-# Check it did not get stopped by our gdb
-set fileid1 [open $status2 r];
-gets $fileid1 line1;
-gets $fileid1 line2;
-close $fileid1;
-
-set test "attach1, post-gdb sanity check of the sleeping state - Red Hat BZ 197584"
-if {[string match "*(sleeping)*" $line2]} {
-  pass $test
-} else {
-  fail $test
-}
-
-# Stop the program 
-remote_exec build "kill -s STOP ${testpid}"
-
-# No race
-sleep 2
-
-# Check it really got stopped by kill(1)
-set fileid2 [open $status2 r];
-gets $fileid2 line1;
-gets $fileid2 line2;
-close $fileid2;
-
-set test "attach2, initial sanity check of the stopped state"
-if {[string match "*(stopped)*" $line2]} {
-  pass $test
-} else {
-  fail $test
-}
-
-# Start with clean gdb
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
-# Verify that we can attach to the process by first giving its
-# executable name via the file command, and using attach with the
-# process ID.
-
-set test "set file, before attach3 to stopped process"
-gdb_test_multiple "file $binfile" "$test" {
-   -re "Load new symbol table from.*y or n. $" {
-        gdb_test "y" "Reading symbols from $escapedbinfile\.\.\.*done." \
-		"$test (re-read)"
-    }
-    -re "Reading symbols from $escapedbinfile\.\.\.*done.*$gdb_prompt $" {
-        pass "$test"
-    }
-}
-
-set test "attach3 to stopped, after setting file"
-gdb_test_multiple "attach $testpid" "$test" {
-    -re "Attaching to program.*`?$escapedbinfile'?, process $testpid.*$gdb_prompt $" {
-        pass "$test"
-    }
-}
-
-# We may be already after the threads phase.
-# `thread 2' command is important for the test to switch the current thread to
-# a non-primary one for the detach process.
-
-gdb_test "thread 2" ".*(witching to thread 2 |hread ID 2 not known).*" "attach3 to stopped switch thread"
-gdb_test "bt" ".*sleep.*(func|main).*" "attach3 to stopped bt"
-
-# Exit and detach the process.
-gdb_exit
-
-# Stop the program 
-remote_exec build "kill -s STOP ${testpid}"
-
-# No race
-sleep 2
-
-# Continue the test as we would hit another expected bug regarding
-# 	Program received signal SIGSTOP, Stopped (signal).
-# across NPTL threads.
-
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-
-# Verify that we can attach to the process just by giving the
-# process ID.
-   
-set test "attach4 to stopped, after setting file"
-gdb_test_multiple "attach $testpid" "$test" {
-    -re "Attaching to program.*`?$escapedbinfile'?, process $testpid.*$gdb_prompt $" {
-        pass "$test"
-    }
-}
-
-# We may be already after the threads phase.
-# `thread 2' command is important for the test to switch the current thread to
-# a non-primary one for the detach process.
-
-gdb_test "thread 2" ".*(witching to thread 2 |hread ID 2 not known).*" "attach4 to stopped switch thread"
-gdb_test "bt" ".*sleep.*(func|main).*" "attach4 to stopped bt"
-
-# RHEL3U8 kernel-2.4.21-47.EL will not return SIGINT but only shorten the sleep.
-gdb_breakpoint $srcfile:[gdb_get_line_number "Ridiculous time"]
-gdb_breakpoint $srcfile:[gdb_get_line_number "cut the sleep time"]
-set test "attach4 continue"
-gdb_test_multiple "continue" "continue ($test)" {
-    -re "Continuing" {
-	pass "continue ($test)"
-    }
-}
-
-# For this to work we must be sure to consume the "Continuing."
-# message first, or GDB's signal handler may not be in place.
-after 1000 {send_gdb "\003"}
-set test "attach4 stop by interrupt"
-gdb_expect {
-  -re "Program received signal SIGINT.*$gdb_prompt $"
-    {
-      pass $test
-    }
-  -re "Breakpoint \[0-9\].*$srcfile.*$gdb_prompt $"
-    {
-      pass $test
-    }
-  timeout
-    {
-      fail "$test (timeout)"
-    }
-}
-
-gdb_exit
-
-# No race
-sleep 2
-
-# At this point, the process should be sleeping
-
-set fileid4 [open $status2 r];
-gets $fileid4 line1;
-gets $fileid4 line2;
-close $fileid4;
-
-set test "attach4, exit leaves process sleeping"
-if {[string match "*(sleeping)*" $line2]} {
-  pass $test
-} else {
-  fail $test
-}
-
-# Make sure we don't leave a process around to confuse
-# the next test run (and prevent the compile by keeping
-# the text file busy), in case the "set should_exit" didn't
-# work.
-   
-remote_exec build "kill -9 ${testpid}"
-
-return 0
diff --git a/gdb/testsuite/gdb.threads/bp_in_thread.exp b/gdb/testsuite/gdb.threads/bp_in_thread.exp
index ef8cc3f..7b6182c 100644
--- a/gdb/testsuite/gdb.threads/bp_in_thread.exp
+++ b/gdb/testsuite/gdb.threads/bp_in_thread.exp
@@ -18,22 +18,14 @@
 # GDB reported a SIGTRAP signal in a random thread when hitting
 # a breakpoint.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
-set testfile "bp_in_thread"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
-if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } {
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable debug] != "" } {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart $binfile
+
 runto_main
 
 gdb_test "break noreturn" \
diff --git a/gdb/testsuite/gdb.threads/clone-new-thread-event.c b/gdb/testsuite/gdb.threads/clone-new-thread-event.c
new file mode 100644
index 0000000..5855ad9
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/clone-new-thread-event.c
@@ -0,0 +1,75 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2009-2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.
+
+   Test that GDB doesn't lose an event for a thread it didn't know
+   about, until an event is reported for it.  */
+
+#define _GNU_SOURCE
+#include <sched.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+
+#include <features.h>
+#ifdef __UCLIBC__
+#if !(defined(__UCLIBC_HAS_MMU__) || defined(__ARCH_HAS_MMU__))
+#define HAS_NOMMU
+#endif
+#endif
+
+#define STACK_SIZE 0x1000
+
+static int
+tkill (int lwpid, int signo)
+{
+  return syscall (__NR_tkill, lwpid, signo);
+}
+
+static pid_t
+gettid (void)
+{
+  return syscall (__NR_gettid);
+}
+
+static int
+fn (void *unused)
+{
+  tkill (gettid (), SIGUSR1);
+  return 0;
+}
+
+int
+main (int argc, char **argv)
+{
+  unsigned char *stack;
+  int new_pid;
+
+  stack = malloc (STACK_SIZE);
+  assert (stack != NULL);
+
+  new_pid = clone (fn, stack + STACK_SIZE, CLONE_FILES
+#if defined(__UCLIBC__) && defined(HAS_NOMMU)
+		   | CLONE_VM
+#endif /* defined(__UCLIBC__) && defined(HAS_NOMMU) */
+		   , NULL, NULL, NULL, NULL);
+  assert (new_pid > 0);
+
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.threads/clone-new-thread-event.exp b/gdb/testsuite/gdb.threads/clone-new-thread-event.exp
new file mode 100644
index 0000000..061f2c0
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/clone-new-thread-event.exp
@@ -0,0 +1,34 @@
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# This only works on targets with the Linux kernel.
+if ![istarget *-*-linux*] then {
+    return
+}
+
+if { [prepare_for_testing clone-new-thread-event.exp clone-new-thread-event] } {
+    return -1
+}
+
+if { ![runto_main] } {
+    untested "could not run to main"
+    return -1
+}
+
+gdb_test "continue" \
+    "Program received signal SIGUSR1, User defined signal 1.*" \
+    "catch SIGUSR1"
diff --git a/gdb/testsuite/gdb.threads/corethreads.exp b/gdb/testsuite/gdb.threads/corethreads.exp
index 2dd1173..6700017 100644
--- a/gdb/testsuite/gdb.threads/corethreads.exp
+++ b/gdb/testsuite/gdb.threads/corethreads.exp
@@ -19,10 +19,8 @@ if {![isnative] || ![istarget "*-*-linux*"]} {
     return
 }
 
-set testfile "corethreads"
-set srcfile ${testfile}.c
+standard_testfile
 set executable ${testfile}
-set binfile ${objdir}/${subdir}/${executable}
 if { [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
      untested ${testfile}.exp
      return -1
diff --git a/gdb/testsuite/gdb.threads/execl.exp b/gdb/testsuite/gdb.threads/execl.exp
index 4a8fb4d..9b9116a 100644
--- a/gdb/testsuite/gdb.threads/execl.exp
+++ b/gdb/testsuite/gdb.threads/execl.exp
@@ -20,9 +20,7 @@ if { [is_remote target] } then {
 }
 
 # Original image, loads a thread library.
-set testfile "execl"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     return -1
@@ -31,16 +29,13 @@ if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executab
 # New image, that does not load a thread library.
 set testfile1 "execl1"
 set srcfile1 ${testfile1}.c
-set binfile1 ${objdir}/${subdir}/${testfile1}
+set binfile1 [standard_output_file ${testfile1}]
 
 if {[gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile1}" executable {debug}] != "" } {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 
 runto_main
 
diff --git a/gdb/testsuite/gdb.threads/fork-child-threads.exp b/gdb/testsuite/gdb.threads/fork-child-threads.exp
index e94fcbb..b8c198c 100644
--- a/gdb/testsuite/gdb.threads/fork-child-threads.exp
+++ b/gdb/testsuite/gdb.threads/fork-child-threads.exp
@@ -22,19 +22,14 @@ if { [is_remote target] || ![isnative] } then {
     return 0
 }
 
-set testfile fork-child-threads
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
+clean_restart ${binfile}
 
-gdb_load ${binfile}
 if ![runto_main] then {
    fail "Can't run to main"
    return 0
diff --git a/gdb/testsuite/gdb.threads/fork-thread-pending.c b/gdb/testsuite/gdb.threads/fork-thread-pending.c
index ba8824e..82317d4 100644
--- a/gdb/testsuite/gdb.threads/fork-thread-pending.c
+++ b/gdb/testsuite/gdb.threads/fork-thread-pending.c
@@ -28,6 +28,7 @@
 #define NUMTHREADS 10
 
 volatile int done = 0;
+static pthread_barrier_t barrier;
 
 static void *
 start (void *arg)
@@ -45,6 +46,8 @@ thread_function (void *arg)
 
   printf ("Thread <%d> executing\n", x);
 
+  pthread_barrier_wait (&barrier);
+
   while (!done)
     usleep (100);
 
@@ -62,6 +65,8 @@ thread_forker (void *arg)
 
   printf ("Thread forker <%d> executing\n", x);
 
+  pthread_barrier_wait (&barrier);
+
   switch ((pid = fork ()))
     {
     case -1:
@@ -89,6 +94,9 @@ main (void)
   int args[NUMTHREADS];
   int i, j;
 
+  i = pthread_barrier_init (&barrier, NULL, NUMTHREADS);
+  assert (i == 0);
+
   /* Create a few threads that do mostly nothing, and then one that
      forks.  */
   for (j = 0; j < NUMTHREADS - 1; ++j)
diff --git a/gdb/testsuite/gdb.threads/fork-thread-pending.exp b/gdb/testsuite/gdb.threads/fork-thread-pending.exp
index 3c0a4af..e2b4cc3 100644
--- a/gdb/testsuite/gdb.threads/fork-thread-pending.exp
+++ b/gdb/testsuite/gdb.threads/fork-thread-pending.exp
@@ -25,19 +25,14 @@ if { ! [istarget "*-*-linux*"] } {
     return 0
 }
 
-set testfile fork-thread-pending
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
+clean_restart ${binfile}
 
-gdb_load ${binfile}
 if ![runto_main] then {
    fail "Can't run to main"
    return 0
diff --git a/gdb/testsuite/gdb.threads/gcore-thread.exp b/gdb/testsuite/gdb.threads/gcore-thread.exp
index 62d6af1..37eadd3 100644
--- a/gdb/testsuite/gdb.threads/gcore-thread.exp
+++ b/gdb/testsuite/gdb.threads/gcore-thread.exp
@@ -16,17 +16,11 @@
 # This file was written by Michael Snyder (msnyder at redhat.com)
 # This is a test for the gdb command "generate-core-file".
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 # Single-threaded test case
-set testfile "gcore-thread"
-set srcfile  pthreads.c
-set objfile  ${objdir}/${subdir}/${testfile}.o
-set binfile  ${objdir}/${subdir}/${testfile}
-set corefile ${objdir}/${subdir}/${testfile}.test
-set core0file ${objdir}/${subdir}/${testfile}0.test
+standard_testfile pthreads.c
+set objfile  $binfile.o
+set corefile $binfile.test
+set core0file ${binfile}0.test
 
 if [istarget "*-*-linux"] then {
     set target_cflags "-D_MIT_POSIX_THREADS"
@@ -39,7 +33,7 @@ if [istarget "*-*-linux"] then {
 # libpthread, therefore libthread_db will not fail as expected
 # on the test `zeroed-threads cannot be listed'.
 
-set opts [list debug "incdir=${objdir}"]
+set opts [list debug]
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${objfile}" object $opts] != ""
     || ([gdb_compile_pthreads "${objfile}" "${binfile}" executable [concat $opts {additional_flags=-Wl,-z,norelro}] ] != ""
         && [gdb_compile_pthreads "${objfile}" "${binfile}" executable $opts] != "") } {
@@ -147,11 +141,9 @@ proc load_core { corefile } {
     global gdb_prompt
     global libthread_db_seen
 
-    set libthread_db_seen 0
     gdb_test_multiple "core $corefile" \
 	"re-load generated corefile" {
 	    -re "\\\[Thread debugging using \[^ \r\n\]* enabled\\\]\r\n" {
-		set libthread_db_seen 1
 		exp_continue
 	    }
 	    -re " is not a core dump:.*\r\n$gdb_prompt $" {
@@ -174,39 +166,27 @@ proc load_core { corefile } {
     return 1
 }
 
-if ![load_core $corefile] {
-    return
-}
-
-# FIXME: now what can we test about the thread state?
-# We do not know for certain that there should be at least 
-# three threads, because who knows what kind of many-to-one
-# mapping various OS's may do?  Let's assume that there must
-# be at least two threads:
-
-gdb_test "info threads" ".*${nl}  2 ${horiz}${nl}\\* 1 .*" \
-	"corefile contains at least two threads"
-
-# One thread in the corefile should be in the "thread2" function.
-
-gdb_test "info threads" ".* thread2 .*" \
-	"a corefile thread is executing thread2"
+foreach name { corefile core0file } { with_test_prefix $name {
+    if ![load_core [subst $$name]] {
+	continue
+    }
 
-# The thread2 thread should be marked as the current thread.
+    # FIXME: now what can we test about the thread state?
+    # We do not know for certain that there should be at least 
+    # three threads, because who knows what kind of many-to-one
+    # mapping various OS's may do?  Let's assume that there must
+    # be at least two threads:
 
-gdb_test "info threads" ".*${nl}\\* ${horiz} thread2 .*" \
-	"thread2 is current thread in corefile"
+    gdb_test "info threads" ".*${nl}  2 ${horiz}${nl}\\* 1 .*" \
+	    "corefile contains at least two threads"
 
+    # One thread in the corefile should be in the "thread2" function.
 
-# Test the uninitialized thread list.
+    gdb_test "info threads" ".* thread2 .*" \
+	    "a corefile thread is executing thread2"
 
-if {"$core0file" != "" && [load_core $core0file]} {
-    set test "zeroed-threads cannot be listed"
+    # The thread2 thread should be marked as the current thread.
 
-    if {!$libthread_db_seen} {
-	verbose -log "No libthread_db loaded - -Wl,-z,relro compilation?"
-	xfail $test
-    } else {
-	gdb_test "info threads" "Cannot find new threads: .*" $test
-    }
-}
+    gdb_test "info threads" ".*${nl}\\* ${horiz} thread2 .*" \
+	    "thread2 is current thread in corefile"
+}}
diff --git a/gdb/testsuite/gdb.threads/hand-call-in-threads.exp b/gdb/testsuite/gdb.threads/hand-call-in-threads.exp
index 707fb44..e179390 100644
--- a/gdb/testsuite/gdb.threads/hand-call-in-threads.exp
+++ b/gdb/testsuite/gdb.threads/hand-call-in-threads.exp
@@ -18,15 +18,9 @@
 
 set NR_THREADS 4
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
-set testfile "hand-call-in-threads"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
-if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}" "additional_flags=-DNR_THREADS=$NR_THREADS"]] != "" } {
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "additional_flags=-DNR_THREADS=$NR_THREADS"]] != "" } {
     return -1
 }
 
@@ -55,10 +49,7 @@ proc get_dummy_frame_number { } {
     return ""
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 
 if { ![runto_main] } {
     fail "Can't run to main"
diff --git a/gdb/testsuite/gdb.threads/ia64-sigill.exp b/gdb/testsuite/gdb.threads/ia64-sigill.exp
index e14c685..a1ae60d 100644
--- a/gdb/testsuite/gdb.threads/ia64-sigill.exp
+++ b/gdb/testsuite/gdb.threads/ia64-sigill.exp
@@ -20,9 +20,7 @@
 # breakpoint has been already deleted.  moribund locations are not active in
 # the default all-stop mode.
 
-set testfile "ia64-sigill"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" ${binfile} executable [list debug additional_flags=-lrt]] != "" } {
     return -1
 }
diff --git a/gdb/testsuite/gdb.threads/interrupted-hand-call.exp b/gdb/testsuite/gdb.threads/interrupted-hand-call.exp
index 8c22bd3..7b838af 100644
--- a/gdb/testsuite/gdb.threads/interrupted-hand-call.exp
+++ b/gdb/testsuite/gdb.threads/interrupted-hand-call.exp
@@ -19,15 +19,9 @@
 
 set NR_THREADS 4
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
-set testfile "interrupted-hand-call"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
-if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}" "additional_flags=-DNR_THREADS=$NR_THREADS"]] != "" } {
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "additional_flags=-DNR_THREADS=$NR_THREADS"]] != "" } {
     return -1
 }
 
@@ -39,10 +33,7 @@ if [target_info exists gdb,cannot_call_functions] {
     continue
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 
 if { ![runto_main] } {
     fail "Can't run to main"
diff --git a/gdb/testsuite/gdb.threads/killed.exp b/gdb/testsuite/gdb.threads/killed.exp
index c9c6397..2e22886 100644
--- a/gdb/testsuite/gdb.threads/killed.exp
+++ b/gdb/testsuite/gdb.threads/killed.exp
@@ -54,23 +54,15 @@
 # [7]+  Killed                  $D6/gdb/gdb -nw killed
 # $ 
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
-set testfile "killed"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
-if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } {
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable debug] != "" } {
     return -1
 }
 
 
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 
 gdb_run_cmd
 gdb_expect {
diff --git a/gdb/testsuite/gdb.threads/leader-exit.exp b/gdb/testsuite/gdb.threads/leader-exit.exp
index d4b8c1f..140b025 100644
--- a/gdb/testsuite/gdb.threads/leader-exit.exp
+++ b/gdb/testsuite/gdb.threads/leader-exit.exp
@@ -15,10 +15,8 @@
 
 # Exit of the thread group leader should not break GDB.
 
-set testfile "leader-exit"
-set srcfile ${testfile}.c
+standard_testfile
 set executable ${testfile}
-set binfile ${objdir}/${subdir}/${executable}
 
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     return -1
diff --git a/gdb/testsuite/gdb.threads/linux-dp.exp b/gdb/testsuite/gdb.threads/linux-dp.exp
index b211aa2..ca65d10 100644
--- a/gdb/testsuite/gdb.threads/linux-dp.exp
+++ b/gdb/testsuite/gdb.threads/linux-dp.exp
@@ -33,26 +33,18 @@
 ### killing and restarting
 ### quitting gracefully
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
 # This only works with Linux configurations.
 if ![istarget *-*-linux-gnu*] then {
     return
 }
 
-set testfile "linux-dp"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != ""} {
     return -1
 }
 
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 gdb_test_no_output "set print sevenbit-strings"
 runto_main
 
@@ -343,13 +335,14 @@ proc check_philosopher_stack {thread seen_name} {
 }
 
 set any_interesting 0
+catch {unset seen}
 array set seen {}
-unset seen
 for {set i 1} {$i <= $nthreads} {incr i} {
     if [check_philosopher_stack $i seen] {
 	set any_interesting 1
     }
 }
+unset seen
 
 if {$any_interesting} {
     pass "found an interesting thread"
diff --git a/gdb/testsuite/gdb.threads/local-watch-wrong-thread.exp b/gdb/testsuite/gdb.threads/local-watch-wrong-thread.exp
index a8897a5..942922f 100644
--- a/gdb/testsuite/gdb.threads/local-watch-wrong-thread.exp
+++ b/gdb/testsuite/gdb.threads/local-watch-wrong-thread.exp
@@ -23,19 +23,14 @@ if {[skip_hw_watchpoint_multi_tests]} {
     return 0
 }
 
-set testfile "local-watch-wrong-thread"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 if {[gdb_compile_pthreads \
 	 "${srcdir}/${subdir}/${srcfile}" \
 	 "${binfile}" executable {debug} ] != "" } {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 
 gdb_test_no_output "set can-use-hw-watchpoints 1" ""
 
diff --git a/gdb/testsuite/gdb.threads/manythreads.exp b/gdb/testsuite/gdb.threads/manythreads.exp
index 1c13b42..c863ee1 100644
--- a/gdb/testsuite/gdb.threads/manythreads.exp
+++ b/gdb/testsuite/gdb.threads/manythreads.exp
@@ -16,22 +16,14 @@
 
 # This file was written by Jeff Johnston. (jjohnstn at redhat.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
-set testfile "manythreads"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
-if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } {
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable debug] != "" } {
     return -1
 }
 
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 gdb_test_no_output "set print sevenbit-strings"
 runto_main
 
diff --git a/gdb/testsuite/gdb.threads/multi-create.exp b/gdb/testsuite/gdb.threads/multi-create.exp
index ed5cb30..7d1f3ea 100644
--- a/gdb/testsuite/gdb.threads/multi-create.exp
+++ b/gdb/testsuite/gdb.threads/multi-create.exp
@@ -14,18 +14,14 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile "multi-create"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
 	 executable {debug}] != "" } {
     return -1
 }
 
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 runto_main
 
 # Run to the beginning of create_function several times.  Make sure
diff --git a/gdb/testsuite/gdb.threads/no-unwaited-for-left.exp b/gdb/testsuite/gdb.threads/no-unwaited-for-left.exp
index 86c9259..22efc36 100644
--- a/gdb/testsuite/gdb.threads/no-unwaited-for-left.exp
+++ b/gdb/testsuite/gdb.threads/no-unwaited-for-left.exp
@@ -16,10 +16,8 @@
 # Exit of a thread when there are other threads in the inferior should
 # not hang GDB.
 
-set testfile "no-unwaited-for-left"
-set srcfile ${testfile}.c
+standard_testfile
 set executable ${testfile}
-set binfile ${objdir}/${subdir}/${executable}
 
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     return -1
diff --git a/gdb/testsuite/gdb.threads/non-ldr-exc-1.exp b/gdb/testsuite/gdb.threads/non-ldr-exc-1.exp
index 8a14129..2d0b802 100644
--- a/gdb/testsuite/gdb.threads/non-ldr-exc-1.exp
+++ b/gdb/testsuite/gdb.threads/non-ldr-exc-1.exp
@@ -21,26 +21,19 @@ if { [is_remote target] } then {
     continue
 }
 
-set testfile "non-ldr-exc-1"
-set srcfile ${testfile}.c
+standard_testfile
 set executable ${testfile}
-set binfile ${objdir}/${subdir}/${executable}
 
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     return -1
 }
 
-proc do_test { lock_sched } {
-    global pf_prefix
+proc do_test { lock_sched } { with_test_prefix "lock-sched$lock_sched" {
     global executable
 
-    set save_pf_prefix $pf_prefix
-    lappend pf_prefix "lock-sched$lock_sched:"
-
     clean_restart ${executable}
 
     if ![runto_main] {
-	set pf_prefix $save_pf_prefix
 	return -1
     }
 
@@ -57,9 +50,7 @@ proc do_test { lock_sched } {
     gdb_test "continue" \
 	".*is executing new program.*Breakpoint 1, main.* at .*" \
 	"continue over exec"
-
-    set pf_prefix $save_pf_prefix
-}
+}}
 
 do_test 0
 do_test 1
diff --git a/gdb/testsuite/gdb.threads/non-ldr-exc-2.exp b/gdb/testsuite/gdb.threads/non-ldr-exc-2.exp
index 5404ef4..476e48e 100644
--- a/gdb/testsuite/gdb.threads/non-ldr-exc-2.exp
+++ b/gdb/testsuite/gdb.threads/non-ldr-exc-2.exp
@@ -22,26 +22,19 @@ if { [is_remote target] } then {
     continue
 }
 
-set testfile "non-ldr-exc-2"
-set srcfile ${testfile}.c
+standard_testfile
 set executable ${testfile}
-set binfile ${objdir}/${subdir}/${executable}
 
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     return -1
 }
 
-proc do_test { lock_sched } {
-    global pf_prefix
+proc do_test { lock_sched } { with_test_prefix "lock-sched$lock_sched" {
     global executable
 
-    set save_pf_prefix $pf_prefix
-    lappend pf_prefix "lock-sched$lock_sched:"
-
     clean_restart ${executable}
 
     if ![runto_main] {
-	set pf_prefix $save_pf_prefix
 	return -1
     }
 
@@ -62,9 +55,7 @@ proc do_test { lock_sched } {
     gdb_test "continue" \
 	".*is executing new program.*Breakpoint 1, main.* at .*" \
 	"continue over exec"
-
-    set pf_prefix $save_pf_prefix
-}
+}}
 
 do_test 0
 do_test 1
diff --git a/gdb/testsuite/gdb.threads/non-ldr-exc-3.exp b/gdb/testsuite/gdb.threads/non-ldr-exc-3.exp
index 9c82c2a..9d674a6 100644
--- a/gdb/testsuite/gdb.threads/non-ldr-exc-3.exp
+++ b/gdb/testsuite/gdb.threads/non-ldr-exc-3.exp
@@ -24,26 +24,19 @@ if { [is_remote target] } then {
     continue
 }
 
-set testfile "non-ldr-exc-3"
-set srcfile ${testfile}.c
+standard_testfile
 set executable ${testfile}
-set binfile ${objdir}/${subdir}/${executable}
 
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     return -1
 }
 
-proc do_test { lock_sched } {
-    global pf_prefix
+proc do_test { lock_sched } { with_test_prefix "lock-sched$lock_sched" {
     global executable
 
-    set save_pf_prefix $pf_prefix
-    lappend pf_prefix "lock-sched$lock_sched:"
-
     clean_restart ${executable}
 
     if ![runto_main] {
-	set pf_prefix $save_pf_prefix
 	return -1
     }
 
@@ -60,9 +53,7 @@ proc do_test { lock_sched } {
     gdb_test "continue" \
 	".*is executing new program.*Breakpoint 1, main.* at .*" \
 	"continue over exec"
-
-    set pf_prefix $save_pf_prefix
-}
+}}
 
 do_test 0
 do_test 1
diff --git a/gdb/testsuite/gdb.threads/non-ldr-exc-4.exp b/gdb/testsuite/gdb.threads/non-ldr-exc-4.exp
index 943b077..7543e20 100644
--- a/gdb/testsuite/gdb.threads/non-ldr-exc-4.exp
+++ b/gdb/testsuite/gdb.threads/non-ldr-exc-4.exp
@@ -23,26 +23,19 @@ if { [is_remote target] } then {
     continue
 }
 
-set testfile "non-ldr-exc-4"
-set srcfile ${testfile}.c
+standard_testfile
 set executable ${testfile}
-set binfile ${objdir}/${subdir}/${executable}
 
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     return -1
 }
 
-proc do_test { lock_sched } {
-    global pf_prefix
+proc do_test { lock_sched } { with_test_prefix "lock-sched$lock_sched" {
     global executable
 
-    set save_pf_prefix $pf_prefix
-    lappend pf_prefix "lock-sched$lock_sched:"
-
     clean_restart ${executable}
 
     if ![runto_main] {
-	set pf_prefix $save_pf_prefix
 	return -1
     }
 
@@ -59,9 +52,7 @@ proc do_test { lock_sched } {
     gdb_test "continue" \
 	".*is executing new program.*Breakpoint 1, main.* at .*" \
 	"continue over exec"
-
-    set pf_prefix $save_pf_prefix
-}
+}}
 
 do_test 0
 do_test 1
diff --git a/gdb/testsuite/gdb.threads/pending-step.exp b/gdb/testsuite/gdb.threads/pending-step.exp
index eb052cd..b5987dd 100644
--- a/gdb/testsuite/gdb.threads/pending-step.exp
+++ b/gdb/testsuite/gdb.threads/pending-step.exp
@@ -48,20 +48,13 @@
 #    continued in step 5).  Neither does this SIGTRAP correspond to a
 #    breakpoint hit.  GDB reports to the user a spurious SIGTRAP.
 
-set testfile "pending-step"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
-if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } {
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable debug] != "" } {
     return -1
 }
 
-# Start with a fresh gdb.
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 
 if ![runto_main] then {
     fail "Can't run to main"
diff --git a/gdb/testsuite/gdb.threads/print-threads.exp b/gdb/testsuite/gdb.threads/print-threads.exp
index 97c8cf6..8336e29 100644
--- a/gdb/testsuite/gdb.threads/print-threads.exp
+++ b/gdb/testsuite/gdb.threads/print-threads.exp
@@ -20,31 +20,20 @@
 # It tests miscellaneous actions with multiple threads, including
 # handling for thread exit.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
-set testfile "print-threads"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
 # regexp for "horizontal" text (i.e. doesn't include newline or
 # carriage return)
 set horiz "\[^\n\r\]*"
 
-if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } {
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable debug] != "" } {
     return -1
 }
 
 # Now we can proceed with the real testing.
 
-# Start with a fresh gdb.
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 
 gdb_test_no_output "set print sevenbit-strings"
 #gdb_test_no_output "set print address off"
diff --git a/gdb/testsuite/gdb.threads/pthread_cond_wait.exp b/gdb/testsuite/gdb.threads/pthread_cond_wait.exp
index 283545a..bf8730b 100644
--- a/gdb/testsuite/gdb.threads/pthread_cond_wait.exp
+++ b/gdb/testsuite/gdb.threads/pthread_cond_wait.exp
@@ -19,22 +19,13 @@
 # This file verifies that GDB is able to compute a backtrace for a thread
 # being blocked on a call to pthread_cond_wait(). 
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
-set testfile "pthread_cond_wait"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
-if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } {
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable debug] != "" } {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 runto_main
 
 gdb_test "break break_me" \
diff --git a/gdb/testsuite/gdb.threads/pthreads.exp b/gdb/testsuite/gdb.threads/pthreads.exp
index 31008ca..14aa410 100644
--- a/gdb/testsuite/gdb.threads/pthreads.exp
+++ b/gdb/testsuite/gdb.threads/pthreads.exp
@@ -16,14 +16,8 @@
 
 # This file was written by Fred Fish. (fnf at cygnus.com)
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
-set testfile "pthreads"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
 # regexp for "horizontal" text (i.e. doesn't include newline or
 # carriage return)
@@ -35,17 +29,11 @@ if [istarget "*-*-linux"] then {
     set target_cflags ""
 }
 
-if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } {
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable debug] != "" } {
     return -1
 }
 
-
-# Start with a fresh gdb.
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 
 gdb_test_no_output "set print sevenbit-strings"
 #gdb_test_no_output "set print address off"
diff --git a/gdb/testsuite/gdb.threads/schedlock.exp b/gdb/testsuite/gdb.threads/schedlock.exp
index 2c34a89..2d0552a 100644
--- a/gdb/testsuite/gdb.threads/schedlock.exp
+++ b/gdb/testsuite/gdb.threads/schedlock.exp
@@ -19,19 +19,13 @@
 #
 # This test covers the various forms of "set scheduler-locking".
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
-set testfile "schedlock"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
 # The number of threads, including the main thread.
 set NUM 2
 
-if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } {
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable debug] != "" } {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.threads/siginfo-threads.c b/gdb/testsuite/gdb.threads/siginfo-threads.c
new file mode 100644
index 0000000..5859088
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/siginfo-threads.c
@@ -0,0 +1,457 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2010-2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#define _GNU_SOURCE
+#include <pthread.h>
+#include <stdio.h>
+#include <limits.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <sys/types.h>
+#include <signal.h>
+#include <unistd.h>
+#include <asm/unistd.h>
+
+#define gettid() syscall (__NR_gettid)
+#define tgkill(tgid, tid, sig) syscall (__NR_tgkill, tgid, tid, sig)
+
+/* Terminate always in the main task.  It can lock up with SIGSTOPped
+   GDB otherwise.  */
+#define TIMEOUT (gettid () == getpid() ? 10 : 15)
+
+static pid_t thread1_tid;
+static pthread_cond_t thread1_tid_cond
+  = PTHREAD_COND_INITIALIZER;
+static pthread_mutex_t thread1_tid_mutex
+  = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP;
+static int thread1_sigusr1_hit;
+static int thread1_sigusr2_hit;
+
+static pid_t thread2_tid;
+static pthread_cond_t thread2_tid_cond
+  = PTHREAD_COND_INITIALIZER;
+static pthread_mutex_t thread2_tid_mutex
+  = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP;
+static int thread2_sigusr1_hit;
+static int thread2_sigusr2_hit;
+
+static pthread_mutex_t terminate_mutex
+  = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP;
+
+/* Do not use alarm as it would create a ptrace event which would hang
+   us up if we are being traced by GDB, which we stopped
+   ourselves.  */
+
+static void
+timed_mutex_lock (pthread_mutex_t *mutex)
+{
+  int i;
+  struct timespec start, now;
+
+  i = clock_gettime (CLOCK_MONOTONIC, &start);
+  assert (i == 0);
+
+  do
+    {
+      i = pthread_mutex_trylock (mutex);
+      if (i == 0)
+	return;
+      assert (i == EBUSY);
+
+      i = clock_gettime (CLOCK_MONOTONIC, &now);
+      assert (i == 0);
+      assert (now.tv_sec >= start.tv_sec);
+    }
+  while (now.tv_sec - start.tv_sec < TIMEOUT);
+
+  fprintf (stderr, "Timed out waiting for internal lock!\n");
+  exit (EXIT_FAILURE);
+}
+
+static void
+handler (int signo, siginfo_t *siginfo, void *exception)
+{
+  int *varp;
+
+  assert (siginfo->si_signo == signo);
+  assert (siginfo->si_code == SI_TKILL);
+  assert (siginfo->si_pid == getpid ());
+
+  if (gettid () == thread1_tid)
+    {
+      if (signo == SIGUSR1)
+	varp = &thread1_sigusr1_hit;
+      else if (signo == SIGUSR2)
+	varp = &thread1_sigusr2_hit;
+      else
+	assert (0);
+    }
+  else if (gettid () == thread2_tid)
+    {
+      if (signo == SIGUSR1)
+	varp = &thread2_sigusr1_hit;
+      else if (signo == SIGUSR2)
+	varp = &thread2_sigusr2_hit;
+      else
+	assert (0);
+    }
+  else
+    assert (0);
+
+  if (*varp)
+    {
+      fprintf (stderr, "Signal %d for TID %lu has been already hit!\n", signo,
+	       (unsigned long) gettid ());
+      exit (EXIT_FAILURE);
+    }
+  *varp = 1;
+}
+
+static void *
+thread1_func (void *unused)
+{
+  int i;
+
+  timed_mutex_lock (&thread1_tid_mutex);
+
+  /* THREAD1_TID_MUTEX must be already locked to avoid a race.  */
+  thread1_tid = gettid ();
+
+  i = pthread_cond_signal (&thread1_tid_cond);
+  assert (i == 0);
+  i = pthread_mutex_unlock (&thread1_tid_mutex);
+  assert (i == 0);
+
+  /* Be sure the "t (tracing stop)" test can proceed for both
+     threads.  */
+  timed_mutex_lock (&terminate_mutex);
+  i = pthread_mutex_unlock (&terminate_mutex);
+  assert (i == 0);
+
+  if (!thread1_sigusr1_hit)
+    {
+      fprintf (stderr, "Thread 1 signal SIGUSR1 not hit!\n");
+      exit (EXIT_FAILURE);
+    }
+  if (!thread1_sigusr2_hit)
+    {
+      fprintf (stderr, "Thread 1 signal SIGUSR2 not hit!\n");
+      exit (EXIT_FAILURE);
+    }
+
+  return NULL;
+}
+
+static void *
+thread2_func (void *unused)
+{
+  int i;
+
+  timed_mutex_lock (&thread2_tid_mutex);
+
+  /* THREAD2_TID_MUTEX must be already locked to avoid a race.  */
+  thread2_tid = gettid ();
+
+  i = pthread_cond_signal (&thread2_tid_cond);
+  assert (i == 0);
+  i = pthread_mutex_unlock (&thread2_tid_mutex);
+  assert (i == 0);
+
+  /* Be sure the "t (tracing stop)" test can proceed for both
+     threads.  */
+  timed_mutex_lock (&terminate_mutex);
+  i = pthread_mutex_unlock (&terminate_mutex);
+  assert (i == 0);
+
+  if (!thread2_sigusr1_hit)
+    {
+      fprintf (stderr, "Thread 2 signal SIGUSR1 not hit!\n");
+      exit (EXIT_FAILURE);
+    }
+  if (!thread2_sigusr2_hit)
+    {
+      fprintf (stderr, "Thread 2 signal SIGUSR2 not hit!\n");
+      exit (EXIT_FAILURE);
+    }
+
+  return NULL;
+}
+
+static const char *
+proc_string (const char *filename, const char *line)
+{
+  FILE *f;
+  static char buf[LINE_MAX];
+  size_t line_len = strlen (line);
+
+  f = fopen (filename, "r");
+  if (f == NULL)
+    {
+      fprintf (stderr, "fopen (\"%s\") for \"%s\": %s\n", filename, line,
+	       strerror (errno));
+      exit (EXIT_FAILURE);
+    }
+  while (errno = 0, fgets (buf, sizeof (buf), f))
+    {
+      char *s;
+
+      s = strchr (buf, '\n');
+      assert (s != NULL);
+      *s = 0;
+
+      if (strncmp (buf, line, line_len) != 0)
+	continue;
+
+      if (fclose (f))
+	{
+	  fprintf (stderr, "fclose (\"%s\") for \"%s\": %s\n", filename, line,
+		   strerror (errno));
+	  exit (EXIT_FAILURE);
+	}
+
+      return &buf[line_len];
+    }
+  if (errno != 0)
+    {
+      fprintf (stderr, "fgets (\"%s\": %s\n", filename, strerror (errno));
+      exit (EXIT_FAILURE);
+    }
+  fprintf (stderr, "\"%s\": No line \"%s\" found.\n", filename, line);
+  exit (EXIT_FAILURE);
+}
+
+static unsigned long
+proc_ulong (const char *filename, const char *line)
+{
+  const char *s = proc_string (filename, line);
+  long retval;
+  char *end;
+
+  errno = 0;
+  retval = strtol (s, &end, 10);
+  if (retval < 0 || retval >= LONG_MAX || (end && *end))
+    {
+      fprintf (stderr, "\"%s\":\"%s\": %ld, %s\n", filename, line, retval,
+	       strerror (errno));
+      exit (EXIT_FAILURE);
+    }
+  return retval;
+}
+
+static void
+state_wait (pid_t process, const char *wanted)
+{
+  char *filename;
+  int i;
+  struct timespec start, now;
+  const char *state;
+
+  i = asprintf (&filename, "/proc/%lu/status", (unsigned long) process);
+  assert (i > 0);
+
+  i = clock_gettime (CLOCK_MONOTONIC, &start);
+  assert (i == 0);
+
+  do
+    {
+      state = proc_string (filename, "State:\t");
+
+      /* torvalds/linux-2.6.git 464763cf1c6df632dccc8f2f4c7e50163154a2c0
+	 has changed "T (tracing stop)" to "t (tracing stop)".  Make the GDB
+	 testcase backward compatible with older Linux kernels.  */
+      if (strcmp (state, "T (tracing stop)") == 0)
+	state = "t (tracing stop)";
+
+      if (strcmp (state, wanted) == 0)
+	{
+	  free (filename);
+	  return;
+	}
+
+      if (sched_yield ())
+	{
+	  perror ("sched_yield()");
+	  exit (EXIT_FAILURE);
+	}
+
+      i = clock_gettime (CLOCK_MONOTONIC, &now);
+      assert (i == 0);
+      assert (now.tv_sec >= start.tv_sec);
+    }
+  while (now.tv_sec - start.tv_sec < TIMEOUT);
+
+  fprintf (stderr, "Timed out waiting for PID %lu \"%s\" (now it is \"%s\")!\n",
+	   (unsigned long) process, wanted, state);
+  exit (EXIT_FAILURE);
+}
+
+static volatile pid_t tracer = 0;
+static pthread_t thread1, thread2;
+
+static void
+cleanup (void)
+{
+  printf ("Resuming GDB PID %lu.\n", (unsigned long) tracer);
+
+  if (tracer)
+    {
+      int i;
+      int tracer_save = tracer;
+
+      tracer = 0;
+
+      i = kill (tracer_save, SIGCONT);
+      assert (i == 0);
+    }
+}
+
+int
+main (int argc, char **argv)
+{
+  int i;
+  int standalone = 0;
+  struct sigaction act;
+
+  if (argc == 2 && strcmp (argv[1], "-s") == 0)
+    standalone = 1;
+  else
+    assert (argc == 1);
+
+  setbuf (stdout, NULL);
+
+  timed_mutex_lock (&thread1_tid_mutex);
+  timed_mutex_lock (&thread2_tid_mutex);
+
+  timed_mutex_lock (&terminate_mutex);
+
+  errno = 0;
+  memset (&act, 0, sizeof (act));
+  act.sa_sigaction = handler;
+  act.sa_flags = SA_RESTART | SA_SIGINFO;
+  i = sigemptyset (&act.sa_mask);
+  assert_perror (errno);
+  assert (i == 0);
+  i = sigaction (SIGUSR1, &act, NULL);
+  assert_perror (errno);
+  assert (i == 0);
+  i = sigaction (SIGUSR2, &act, NULL);
+  assert_perror (errno);
+  assert (i == 0);
+
+  i = pthread_create (&thread1, NULL, thread1_func, NULL);
+  assert (i == 0);
+
+  i = pthread_create (&thread2, NULL, thread2_func, NULL);
+  assert (i == 0);
+
+  if (!standalone)
+    {
+      tracer = proc_ulong ("/proc/self/status", "TracerPid:\t");
+      if (tracer == 0)
+	{
+	  fprintf (stderr, "The testcase must be run by GDB!\n");
+	  exit (EXIT_FAILURE);
+	}
+      if (tracer != getppid ())
+	{
+	  fprintf (stderr, "The testcase parent must be our GDB tracer!\n");
+	  exit (EXIT_FAILURE);
+	}
+    }
+
+  /* SIGCONT our debugger in the case of our crash as we would deadlock
+     otherwise.  */
+
+  atexit (cleanup);
+
+  printf ("Stopping GDB PID %lu.\n", (unsigned long) tracer);
+
+  if (tracer)
+    {
+      i = kill (tracer, SIGSTOP);
+      assert (i == 0);
+      state_wait (tracer, "T (stopped)");
+    }
+
+  /* Threads are now waiting at timed_mutex_lock (thread1_tid_mutex)
+     and so they could not trigger the signals before GDB is unstopped
+     later.  Threads get resumed by the pthread_cond_wait below.  Use
+     `while' loops for protection against spurious pthread_cond_wait
+     wakeups.  */
+
+  printf ("Waiting till the threads initialize their TIDs.\n");
+
+  while (thread1_tid == 0)
+    {
+      i = pthread_cond_wait (&thread1_tid_cond, &thread1_tid_mutex);
+      assert (i == 0);
+    }
+
+  while (thread2_tid == 0)
+    {
+      i = pthread_cond_wait (&thread2_tid_cond, &thread2_tid_mutex);
+      assert (i == 0);
+    }
+
+  printf ("Thread 1 TID = %lu, thread 2 TID = %lu, PID = %lu.\n",
+	  (unsigned long) thread1_tid, (unsigned long) thread2_tid,
+	  (unsigned long) getpid ());
+
+  errno = 0;
+  i = tgkill (getpid (), thread1_tid, SIGUSR1);
+  assert_perror (errno);
+  assert (i == 0);
+  i = tgkill (getpid (), thread1_tid, SIGUSR2);
+  assert_perror (errno);
+  assert (i == 0);
+  i = tgkill (getpid (), thread2_tid, SIGUSR1);
+  assert_perror (errno);
+  assert (i == 0);
+  i = tgkill (getpid (), thread2_tid, SIGUSR2);
+  assert_perror (errno);
+  assert (i == 0);
+
+  printf ("Waiting till the threads are trapped by the signals.\n");
+
+  if (tracer)
+    {
+      /* s390x-unknown-linux-gnu will fail with "R (running)".  */
+
+      state_wait (thread1_tid, "t (tracing stop)");
+
+      state_wait (thread2_tid, "t (tracing stop)");
+    }
+
+  cleanup ();
+
+  printf ("Joining the threads.\n");
+
+  i = pthread_mutex_unlock (&terminate_mutex);
+  assert (i == 0);
+
+  i = pthread_join (thread1, NULL);
+  assert (i == 0);
+
+  i = pthread_join (thread2, NULL);
+  assert (i == 0);
+
+  printf ("Exiting.\n");	/* break-at-exit */
+
+  return EXIT_SUCCESS;
+}
diff --git a/gdb/testsuite/gdb.threads/siginfo-threads.exp b/gdb/testsuite/gdb.threads/siginfo-threads.exp
new file mode 100644
index 0000000..f3f9c51
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/siginfo-threads.exp
@@ -0,0 +1,99 @@
+# Copyright 2010-2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+standard_testfile
+set executable ${testfile}
+
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" \
+	 ${binfile} \
+	 executable \
+	 [list debug additional_flags=-lrt]] != "" } {
+    return -1
+}
+
+clean_restart $testfile
+
+if ![runto_main] {
+    return -1
+}
+
+# `nostop noprint pass' could in some cases report false PASS due to
+# the (preempt 'handle') code path in linux-nat.c.
+
+gdb_test "handle SIGUSR1 stop print pass" \
+    "Signal\[ \t\]+Stop\[ \t\]+Print\[ \t\]+Pass to program\[ \t\]+Description\r\nSIGUSR1\[ \t\]+Yes\[ \t\]+Yes\[ \t\]+Yes\[ \t\].*"
+gdb_test "handle SIGUSR2 stop print pass" \
+    "Signal\[ \t\]+Stop\[ \t\]+Print\[ \t\]+Pass to program\[ \t\]+Description\r\nSIGUSR2\[ \t\]+Yes\[ \t\]+Yes\[ \t\]+Yes\[ \t\].*"
+
+gdb_breakpoint [gdb_get_line_number "break-at-exit"]
+
+set test "get pid"
+gdb_test_multiple "p getpid ()" $test {
+    -re " = (\[0-9\]+)\r\n$gdb_prompt $" {
+	set pid $expect_out(1,string)
+	pass $test
+    }
+}
+
+for {set sigcount 0} {$sigcount < 4} {incr sigcount} {
+    set test "catch signal $sigcount"
+    set sigusr ""
+    gdb_test_multiple "continue" $test {
+	-re "Program received signal SIGUSR(\[12\]), User defined signal \[12\]\\.\r\n.*\r\n$gdb_prompt $" {
+	    set sigusr $expect_out(1,string)
+	    pass $test
+	}
+    }
+    if {$sigusr == ""} {
+	return -1
+    }
+
+    set test "signal $sigcount si_signo"
+    if {$sigusr == 1} {
+	set signo 10
+    } else {
+	set signo 12
+    }
+    gdb_test_multiple {p $_siginfo.si_signo} $test {
+	-re " = $signo\r\n$gdb_prompt $" {
+	    pass $test
+	}
+	-re "Attempt to extract a component of a value that is not a structure\\.\r\n$gdb_prompt $" {
+	    unsupported $test
+	}
+    }
+
+    set test "signal $sigcount si_code is SI_TKILL"
+    gdb_test_multiple {p $_siginfo.si_code} $test {
+	-re " = -6\r\n$gdb_prompt $" {
+	    pass $test
+	}
+	-re "Attempt to extract a component of a value that is not a structure\\.\r\n$gdb_prompt $" {
+	    unsupported $test
+	}
+    }
+
+    set test "signal $sigcount si_pid"
+    gdb_test_multiple {p $_siginfo._sifields._kill.si_pid} $test {
+	-re " = $pid\r\n$gdb_prompt $" {
+	    pass $test
+	}
+	-re "Attempt to extract a component of a value that is not a structure\\.\r\n$gdb_prompt $" {
+	    unsupported $test
+	}
+    }
+}
+
+gdb_continue_to_breakpoint break-at-exit ".*break-at-exit.*"
diff --git a/gdb/testsuite/gdb.threads/sigstep-threads.c b/gdb/testsuite/gdb.threads/sigstep-threads.c
new file mode 100644
index 0000000..ca77fe4
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/sigstep-threads.c
@@ -0,0 +1,54 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2010-2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <pthread.h>
+#include <assert.h>
+#include <signal.h>
+
+#include <asm/unistd.h>
+#include <unistd.h>
+#define tgkill(tgid, tid, sig) syscall (__NR_tgkill, (tgid), (tid), (sig))
+#define gettid() syscall (__NR_gettid)
+
+static volatile int var;
+
+static void
+handler (int signo)	/* step-0 */
+{			/* step-0 */
+  var++;		/* step-1 */
+  tgkill (getpid (), gettid (), SIGUSR1);	/* step-2 */
+}
+
+static void *
+start (void *arg)
+{
+  tgkill (getpid (), gettid (), SIGUSR1);
+  assert (0);
+  return NULL;
+}
+
+int
+main (void)
+{
+  pthread_t thread;
+
+  signal (SIGUSR1, handler);
+
+  pthread_create (&thread, NULL, start, NULL);
+  start (NULL);	/* main-start */
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.threads/sigstep-threads.exp b/gdb/testsuite/gdb.threads/sigstep-threads.exp
new file mode 100644
index 0000000..484ca37
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/sigstep-threads.exp
@@ -0,0 +1,73 @@
+# Copyright 2010-2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+standard_testfile
+set executable ${testfile}
+
+if { [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+    untested ${testfile}.exp
+    return -1
+}
+
+clean_restart $executable
+
+if ![runto_main] {
+    return -1;
+}
+
+# `noprint' would not test the full logic of GDB.
+gdb_test "handle SIGUSR1 nostop print pass" \
+    "\r\nSIGUSR1\[ \t\]+No\[ \t\]+Yes\[ \t\]+Yes\[ \t\].*"
+
+gdb_test_no_output "set scheduler-locking off"
+
+gdb_breakpoint [gdb_get_line_number "step-1"]
+gdb_test_no_output {set $step1=$bpnum}
+gdb_continue_to_breakpoint "step-1" ".* step-1 .*"
+gdb_test_no_output {disable $step1}
+
+# 1 as we are now stopped at the `step-1' label.
+set step_at 1
+for {set i 0} {$i < 100} {incr i} {
+    set test "step $i"
+    # Presume this step failed - as in the case of a timeout.
+    set failed 1
+    gdb_test_multiple "step" $test {
+	-re "\r\nProgram received signal SIGUSR1, User defined signal 1.\r\n" {
+	    exp_continue -continue_timer
+	}
+	-re "step-(\[012\]).*\r\n$gdb_prompt $" {
+	    set now $expect_out(1,string)
+	    if {$step_at == 2 && $now == 1} {
+		set failed 0
+	    } elseif {$step_at == 1 && $now == 2} {
+		set failed 0
+		# Continue over the re-signalling back to the handle entry.
+		gdb_test_no_output {enable $step1} ""
+		gdb_test "continue" " step-1 .*" ""
+		set now 1
+		gdb_test_no_output {disable $step1} ""
+	    } else  {
+		fail $test
+	    }
+	    set step_at $now
+	}
+    }
+    if $failed {
+	return
+    }
+}
+# We can never reliably say the racy problematic case has been tested.
+pass "step"
diff --git a/gdb/testsuite/gdb.threads/sigthread.exp b/gdb/testsuite/gdb.threads/sigthread.exp
index d3b4918..7e9fb06 100644
--- a/gdb/testsuite/gdb.threads/sigthread.exp
+++ b/gdb/testsuite/gdb.threads/sigthread.exp
@@ -14,19 +14,14 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-set testfile sigthread
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
 	 executable { debug }] != "" } {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 
 if ![runto_main] then {
    fail "Can't run to main"
diff --git a/gdb/testsuite/gdb.threads/staticthreads.exp b/gdb/testsuite/gdb.threads/staticthreads.exp
index bb65156..d26f3e8 100644
--- a/gdb/testsuite/gdb.threads/staticthreads.exp
+++ b/gdb/testsuite/gdb.threads/staticthreads.exp
@@ -18,26 +18,18 @@
 # Based on manythreads written by Jeff Johnston, contributed by Red
 # Hat.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
-set testfile "staticthreads"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 set static_flag "-static"
 
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
 	 executable \
-	 [list debug "incdir=${objdir}" "additional_flags=${static_flag}" \
+	 [list debug "additional_flags=${static_flag}" \
 	     ]] != "" } {
     return -1
 }
 
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 gdb_test_no_output "set print sevenbit-strings"
 
 
diff --git a/gdb/testsuite/gdb.threads/step.c b/gdb/testsuite/gdb.threads/step.c
deleted file mode 100644
index 1b18a4b..0000000
--- a/gdb/testsuite/gdb.threads/step.c
+++ /dev/null
@@ -1,221 +0,0 @@
-/*    step.c for step.exp    */
-#include <ipc.h>
-#include <pthread.h>
-#include <st.h>
-#include <signal.h>
-#include <stdio.h>
-
-void alarm_handler ();
-void alarm_handler1 ();
-void alarm_handler2 ();
-void thread1 ();
-void thread2 ();
-
-#define TIME_LIMIT 30
-
-
-int count1 = 0;
-int count2 = 0;
-
-pthread_t tid1, tid2;
-pthread_attr_t attr1, attr2;
-
-pthread_mutex_t mut;
-pthread_mutexattr_t mut_attr;
-
-pthread_condattr_t cv_attr_a, cv_attr_b;
-pthread_cond_t cv_a, cv_b;
-
-struct cv_struct
-  {
-    char a;
-    char b;
-  }
-test_struct;
-
-main ()
-{
-  /*init la struct */
-  test_struct.a = 0;
-  test_struct.b = 1;
-
-  /* create le mutex */
-  if (pthread_mutexattr_create (&mut_attr) == -1)
-    {
-      perror ("mutexattr_create");
-      exit (1);
-    }
-
-
-  if (pthread_mutex_init (&mut, mut_attr) == -1)
-    {
-      perror ("mutex_init");
-      exit (1);
-    }
-
-  /* create 2 cv */
-  if (pthread_condattr_create (&cv_attr_a) == -1)
-    {
-      perror ("condattr_create(1)");
-      exit (1);
-    }
-
-  if (pthread_cond_init (&cv_a, cv_attr_a) == -1)
-    {
-      perror ("cond_init(1)");
-      exit (1);
-    }
-
-  if (pthread_condattr_create (&cv_attr_b) == -1)
-    {
-      perror ("condattr_create(2)");
-      exit (1);
-    }
-
-  if (pthread_cond_init (&cv_b, cv_attr_b) == -1)
-    {
-      perror ("cond_init(2)");
-      exit (1);
-    }
-
-  /* create 2 threads of execution */
-  if (pthread_attr_create (&attr1) == -1)
-    {
-      perror ("attr_create(1)");
-      exit (1);
-    }
-
-  if (pthread_create (&tid1, attr1, thread1, &count1) == -1)
-    {
-      perror ("pthread_create(1)");
-      exit (1);
-    }
-
-  if (pthread_attr_create (&attr2) == -1)
-    {
-      perror ("attr_create(2)");
-      exit (1);
-    }
-
-  if (pthread_create (&tid2, attr2, thread2, &count2) == -1)
-    {
-      perror ("pthread_create(2)");
-      exit (1);
-    }
-
-  /* set alarm to print out data and exit */
-  signal (SIGALRM, alarm_handler);
-  alarm (TIME_LIMIT);
-
-  for (;;)
-    pause ();
-}
-
-void 
-thread1 (count)
-     int *count;
-{
-  tid_t tid;
-
-  tid = getstid ();
-  printf ("Thread1 tid 0x%x  (%d) \n", tid, tid);
-  printf ("Thread1 @tid=0x%x \n", &tid);
-  signal (SIGALRM, alarm_handler1);
-
-  for (;;)
-    {
-      if (pthread_mutex_lock (&mut) == -1)
-	{
-	  perror ("pthread_mutex_lock(1)");
-	  pthread_exit ((void *) 0);
-	}
-
-      while (test_struct.a == 0)
-	{
-	  if (pthread_cond_wait (&cv_a, &mut) == -1)
-	    {
-	      perror ("pthread_cond_wait(1)");
-	      pthread_exit ((void *) -1);
-	    }
-	}
-
-      (*count)++;
-      printf ("*******thread1 count %d\n", *count);
-
-      test_struct.a = 0;
-
-      test_struct.b = 1;
-      pthread_cond_signal (&cv_b);
-
-      if (pthread_mutex_unlock (&mut) == -1)
-	{
-	  perror ("pthread_mutex_unlock(1)");
-	  pthread_exit ((void *) -1);
-	}
-    }
-}
-
-void 
-thread2 (count)
-     int *count;
-{
-  tid_t tid;
-
-  tid = getstid ();
-  printf ("Thread2 tid 0x%x  (%d) \n", tid, tid);
-  printf ("Thread1 @tid=0x%x \n", &tid);
-  signal (SIGALRM, alarm_handler2);
-
-  for (;;)
-    {
-      if (pthread_mutex_lock (&mut) == -1)
-	{
-	  perror ("pthread_mutex_lock(2)");
-	  pthread_exit ((void *) 0);
-	}
-
-      while (test_struct.b == 0)
-	{
-	  if (pthread_cond_wait (&cv_b, &mut) == -1)
-	    {
-	      perror ("pthread_cond_wait(2)");
-	      pthread_exit ((void *) -1);
-	    }
-	}
-
-      (*count)++;
-      printf ("*******thread2 count %d\n", *count);
-
-      test_struct.b = 0;
-
-      test_struct.a = 1;
-      pthread_cond_signal (&cv_a);
-
-      if (pthread_mutex_unlock (&mut) == -1)
-	{
-	  perror ("pthread_mutex_unlock(2)");
-	  pthread_exit ((void *) -1);
-	}
-    }
-}
-
-
-void 
-alarm_handler ()
-{
-  printf ("\tcount1 (%d) \n\tcount2 (%d)\n", count1, count2);
-  exit (0);
-}
-
-void 
-alarm_handler1 ()
-{
-  printf ("ALARM thread 1\n");
-}
-
-void 
-alarm_handler2 ()
-{
-  printf ("ALARM thread 2\n");
-  pthread_exit ((void *) 0);
-}
diff --git a/gdb/testsuite/gdb.threads/step.exp b/gdb/testsuite/gdb.threads/step.exp
deleted file mode 100644
index 6b6d2cc..0000000
--- a/gdb/testsuite/gdb.threads/step.exp
+++ /dev/null
@@ -1,194 +0,0 @@
-# step.exp -- Expect script to test gdb with step.c
-# Copyright (C) 1992, 1997, 2007-2012 Free Software Foundation, Inc.
-
-# 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 3 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, see <http://www.gnu.org/licenses/>.
-
-# This file was written by Hiro Sugawara. (hiro at lynx.com)
-#
-# This test really needs some major surgery to be acceptable, but
-# I'm just about burnt out on lynx work, so I'm not doing it now.
-#
-#	* The test has an indeterminate number of pass/fails
-#	for each run (it runs a small group of tests until
-#	it's timer kicks off).  This is very bad for nightly
-#	automated regression testing.
-#
-#	* It tries to "step" from withint he prologue of a
-# 	function.  This isn't support in gdb (it's going
-#	to act like a continue).
-#
-#	* This test rarely check that it stopped in sensible
-#	places.  (see previous bullet -- this test doesn't
-#	catch the fact it continued rather than stepped)
-
-
-if $tracelevel then {
-	strace $tracelevel
-}
-
-set program_exited 0
-
-proc set_bp { where } {
-    global gdb_prompt
-
-    send_gdb "break $where\n"
-    # The first regexp is what we get with -g, the second without -g.
-    gdb_expect {
-	-re "Break.* at .*: file .*, line \[0-9\]*.*$gdb_prompt $" {}
-	-re "Breakpoint \[0-9\]* at 0x\[0-9a-f\]*.*$gdb_prompt $" {}
-	-re "$gdb_prompt $" { fail "setting breakpoint at $where" ; return 0 }
-	timeout { fail "setting breakpoint at $where (timeout)" ; return 0 }
-    }
-    pass "set_bp"
-}
-
-proc step_it { cmd } {
-    global gdb_prompt
-    global program_exited
-    global inferior_exited_re
-
-    send_gdb "$cmd\n"
-    gdb_expect {
-	-re "0x\[0-9A-Fa-f\]* *in.*\r\n$gdb_prompt $" { pass "step_it"; return 0 }
-	-re "0x\[0-9A-Fa-f\]* *\[0-9\]*.*\r\n$gdb_prompt $" { pass "step_it"; return 1 }
-	-re "$inferior_exited_re .*\n$gdb_prompt $" {
-		set program_exited 1
-		return -1
-	    }
-	-re "$gdb_prompt $"	{ fail "single-stepping ($cmd).\n" ; return -1 }
-	timeout	{ fail "single-stepping ($cmd) timout.\n" ; return -1 }
-    }
-}
-
-proc step_inst {} {
-    step_it "stepi"
-}
-
-proc step_source {} {
-    step_it "step"
-}
-
-proc continue_all {} {
-    global gdb_prompt
-    global inferior_exited_re
-
-    send_gdb "continue\n"
-    gdb_expect {
-	-re "Breakpoint \[0-9\]*, thread\[0-9\]* .*$gdb_prompt $" { 
-	    pass "continue_all"
-	    return 0
-	}
-	-re "$inferior_exited_re .*\n$gdb_prompt $" {
-	    set program_exited 1
-	    return 1;
-	}
-	-re "$gdb_prompt $" { fail "continue" ; return -1 }
-	timeout { fail "continue (timeout)" ; return -1 }
-    }
-}
-
-proc check_threads { num_threads } {
-    global gdb_prompt
-
-    set curr_thread 0
-    send_gdb "info threads\n"
-    while { $num_threads > 0 } {
-	gdb_expect {
-	    -re "\\* *\[0-9\]* process \[0-9\]* thread \[0-9\]* .*\n" {
-		incr curr_thread
-		set num_threads [expr $num_threads - 1]
-	    }
-	    -re " *\[0-9\]* process \[0-9\]* thread \[0-9\]* .*\n" {
-		set num_threads [expr $num_threads - 1]
-	    }
-	    -re "$gdb_prompt $" {
-		if { $num_threads < 0 } {
-		    fail "check_threads (too many)" ; return -1
-		}
-		break
-	    }
-	    timeout { fail "check_threads (timeout)" ; return -1 }
-	}
-    }
-
-    if { $curr_thread == 0 } {
-	fail "check_threads (no current thread)\n"
-	return -1
-    }
-    if { $curr_thread > 1 } {
-	fail "check_threads (more than one current thread)\n"
-	return -1
-    }
-    return 0
-}
-
-proc test_cond_wait {} {
-    global program_exited
-
-    set_bp	135
-    runto	179
-    while { 1 } {
-	set stepi_counter 0
-	while { [step_inst] } {
-		if { $program_exited } { break }
-		incr stepi_counter
-		if { $stepi_counter > 30 } {
-			fail "too many stepi's per line\n"
-			return -1
-		}
-	}
-	if { $program_exited } { break }
-	step_source
-	if { $program_exited } { break }
-	continue_all
-	if { $program_exited } { break }
-	check_threads 3
-    }
-}
-
-proc do_tests {} {
-    global subdir
-    global objdir
-    global srcdir
-    global binfile
-    global gdb_prompt
-
-
-    # Start with a fresh gdb.
-
-    gdb_exit
-    gdb_start
-    gdb_reinitialize_dir $srcdir/$subdir
-    gdb_load $objdir/$subdir/$binfile
-
-    send_gdb "set width 0\n"
-    gdb_expect -re "$gdb_prompt $"
-
-    test_cond_wait
-}
-
-# Check to see if we have an executable to test.  If not, then either we
-# haven't tried to compile one, or the compilation failed for some reason.
-# In either case, just notify the user and skip the tests in this file.
-
-set binfile "step"
-set srcfile "step.c"
-
-if ![file exists $objdir/$subdir/$binfile] then {
-    if $all_flag then {
-	warning "$binfile does not exist; tests suppressed."
-    }
-} else {
-    do_tests
-}
diff --git a/gdb/testsuite/gdb.threads/step2.exp b/gdb/testsuite/gdb.threads/step2.exp
deleted file mode 100644
index 42a279b..0000000
--- a/gdb/testsuite/gdb.threads/step2.exp
+++ /dev/null
@@ -1,144 +0,0 @@
-# step2.exp -- Expect script to test gdb step.c
-# Copyright (C) 1992, 1997, 2007-2012 Free Software Foundation, Inc.
-
-# 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 3 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, see <http://www.gnu.org/licenses/>.
-
-# This file was written by Jeff Law. (law at cygnus.com)
-#
-
-
-if $tracelevel then {
-	strace $tracelevel
-}
-
-set program_exited 0
-
-# A simple and crude test to see that we can step two threads independently
-proc test_multi_threaded_stepping {} {
-    global gdb_prompt
-    global hex
-    global srcfile
-    global decimal
-
-    # Set breakpoints in code that we know is executed in only
-    # thread of control.
-    gdb_test "break thread1" \
-	     "Break.* at $hex: file .*$srcfile, line $decimal\\."
-    gdb_test "break thread2" \
-	     "Break.* at $hex: file .*$srcfile, line $decimal\\."
-
-    # the order in which things happen is indeterminate.  So we basically
-    # look for a set of events and note that each one happens and that
-    # all of the required events have happened when we're done.
-    #
-    # Right now we only verify that both threads start and that they
-    # both call pthread_cond_wait twice.
-    set thread1started 0
-    set thread1condwait 0
-    set thread2started 0
-    set thread2condwait 0
-    
-    send_gdb "run\n"
-    gdb_expect {
-	-re "The program .* has been started already.*y or n. $" {
-	    send_gdb "y\n"
-	    exp_continue
-	}
-	-re ".*Breakpoint \[0-9\]+,.*thread1.* at .*$srcfile:.*\[\t \].*$gdb_prompt $" {
-	    if { $thread1started != 0 } then {
-		fail "thread1 started"
-		return
-	    } else {
-		set thread1started 1
-		pass "thread1 started"
-	    }
-	    send_gdb "step\n"
-	    exp_continue
-	}
-	-re ".*Breakpoint \[0-9\]+,.*thread2.* at .*$srcfile:.*\[\t \].*$gdb_prompt $" {
-	    if { $thread2started != 0 } then {
-		fail "thread2 started"
-		return
-	    } else {
-		set thread2started 1
-		pass "thread2 started"
-	    }
-	    send_gdb "step\n"
-	    exp_continue
-	}
-	-re ".*pthread_cond_wait.*cv_a.*$gdb_prompt" {
-	    if { $thread1started == 0 } then {
-		fail "thread1 condwait"
-		return
-	    }
-	    if { $thread1condwait < 2 } then {
-		pass "thread1 condwait"
-		incr thread1condwait
-	    }
-	    if { $thread2condwait == 2 } then {
-		pass "multi threaded stepping"
-		return
-	    }
-	    send_gdb "step\n"
-	    exp_continue
-	}
-		    
-	-re ".*pthread_cond_wait.*cv_b.*$gdb_prompt" {
-	    if { $thread2started == 0 } then {
-		fail "thread2 condwait"
-		return
-	    }
-	    if { $thread2condwait < 2 } then {
-		pass "thread2 condwait"
-		incr thread2condwait
-	    }
-	    if { $thread1condwait == 2 } then {
-		pass "multi threaded stepping"
-		return
-	    }
-	    send_gdb "step\n"
-	    exp_continue
-	}
-		    
-	-re "$gdb_prompt" {
-	    send_gdb "step\n"
-	    exp_continue
-	}
-	default { fail "multi threaded stepping" }
-    }
-}
-
-# Check to see if we have an executable to test.  If not, then either we
-# haven't tried to compile one, or the compilation failed for some reason.
-# In either case, just notify the user and skip the tests in this file.
-
-set binfile "step"
-set srcfile "step.c"
-
-if ![file exists $objdir/$subdir/$binfile] then {
-    if $all_flag then {
-	warning "$binfile does not exist; tests suppressed."
-    }
-    return
-}
-
-
-# Start with a fresh gdb.
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load $objdir/$subdir/$binfile
-
-test_multi_threaded_stepping
diff --git a/gdb/testsuite/gdb.threads/switch-threads.exp b/gdb/testsuite/gdb.threads/switch-threads.exp
index 7a0e261..c0ccb58 100644
--- a/gdb/testsuite/gdb.threads/switch-threads.exp
+++ b/gdb/testsuite/gdb.threads/switch-threads.exp
@@ -23,22 +23,13 @@
 # TODO: we should also test explicitly changing threads with the "thread"
 # command.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
-set testfile "switch-threads"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
-if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } {
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable debug] != "" } {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 
 runto_main
 
diff --git a/gdb/testsuite/gdb.threads/thread-execl.exp b/gdb/testsuite/gdb.threads/thread-execl.exp
index 3886846..449e303 100644
--- a/gdb/testsuite/gdb.threads/thread-execl.exp
+++ b/gdb/testsuite/gdb.threads/thread-execl.exp
@@ -21,21 +21,14 @@ if { [is_remote target] } {
     return 0
 }
 
-set testfile "thread-execl"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
-	 executable [list debug "incdir=${objdir}"]] != "" } {
+	 executable debug] != "" } {
     return -1
 }
 
-# Start with a fresh gdb.
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 
 runto_main
 
diff --git a/gdb/testsuite/gdb.threads/thread-find.exp b/gdb/testsuite/gdb.threads/thread-find.exp
index cce83fc..42932ff 100644
--- a/gdb/testsuite/gdb.threads/thread-find.exp
+++ b/gdb/testsuite/gdb.threads/thread-find.exp
@@ -16,20 +16,12 @@
 # Please email any bugs, comments, and/or additions to this file to:
 # bug-gdb at gnu.org
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
-set testfile "linux-dp"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile linux-dp.c
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != ""} {
     return -1
 }
 
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 gdb_test_no_output "set print sevenbit-strings"
 runto_main
 
diff --git a/gdb/testsuite/gdb.threads/thread-specific.exp b/gdb/testsuite/gdb.threads/thread-specific.exp
index d914fe2..e41f12f 100644
--- a/gdb/testsuite/gdb.threads/thread-specific.exp
+++ b/gdb/testsuite/gdb.threads/thread-specific.exp
@@ -17,16 +17,10 @@
 # It tests that the correct breakpoint is reported when we hit a
 # thread-specific breakpoint inserted for several threads.
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
-set testfile "thread-specific"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
-if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } {
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable debug] != "" } {
     return -1
 }
 
@@ -67,13 +61,7 @@ proc get_thread_list { } {
   return $thr_list
 }
 
-# Start with a fresh gdb.
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-
-gdb_load ${binfile}
+clean_restart ${binfile}
 
 gdb_test_no_output "set print sevenbit-strings"
 gdb_test_no_output "set width 0"
diff --git a/gdb/testsuite/gdb.threads/thread-unwindonsignal.exp b/gdb/testsuite/gdb.threads/thread-unwindonsignal.exp
index 302a9d1..cb90479 100644
--- a/gdb/testsuite/gdb.threads/thread-unwindonsignal.exp
+++ b/gdb/testsuite/gdb.threads/thread-unwindonsignal.exp
@@ -18,15 +18,9 @@
 
 set NR_THREADS 4
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
-set testfile "interrupted-hand-call"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile interrupted-hand-call.c
 
-if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}" "additional_flags=-DNR_THREADS=$NR_THREADS"]] != "" } {
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "additional_flags=-DNR_THREADS=$NR_THREADS"]] != "" } {
     return -1
 }
 
@@ -38,10 +32,7 @@ if [target_info exists gdb,cannot_call_functions] {
     continue
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 
 if { ![runto_main] } {
     fail "Can't run to main"
diff --git a/gdb/testsuite/gdb.threads/thread_check.exp b/gdb/testsuite/gdb.threads/thread_check.exp
index 18446ca..8d94046 100644
--- a/gdb/testsuite/gdb.threads/thread_check.exp
+++ b/gdb/testsuite/gdb.threads/thread_check.exp
@@ -31,23 +31,15 @@
 # - delete all breakpoints 
 # - exit gdb.
 
-if $tracelevel then {
-        strace $tracelevel
-}
-
 
-set testfile "thread_check"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
-if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } {
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable debug] != "" } {
     return -1
 }
 
 
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 
 if ![runto_main] then {
    fail "Can't run to main"
diff --git a/gdb/testsuite/gdb.threads/thread_events.exp b/gdb/testsuite/gdb.threads/thread_events.exp
index 176c90b..61bf69d 100644
--- a/gdb/testsuite/gdb.threads/thread_events.exp
+++ b/gdb/testsuite/gdb.threads/thread_events.exp
@@ -33,16 +33,10 @@ if [is_remote target] then {
     return
 }
 
-if $tracelevel then {
-        strace $tracelevel
-}
-
 
-set testfile "thread_events"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
-if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } {
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable debug] != "" } {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.threads/threadapply.exp b/gdb/testsuite/gdb.threads/threadapply.exp
index 7ec3f67..1ec1a3a 100644
--- a/gdb/testsuite/gdb.threads/threadapply.exp
+++ b/gdb/testsuite/gdb.threads/threadapply.exp
@@ -15,26 +15,17 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 # This test verifies that a macro using backtrace can be applied to all threads
 # and will continue for each thread even though an error may occur in
 # backtracing one of the threads.
 
-set testfile "threadapply"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } {
+standard_testfile
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable debug] != "" } {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 
 #
 # Run to `main' where we begin our tests.
diff --git a/gdb/testsuite/gdb.threads/threxit-hop-specific.exp b/gdb/testsuite/gdb.threads/threxit-hop-specific.exp
index 315dabc..4985d45 100644
--- a/gdb/testsuite/gdb.threads/threxit-hop-specific.exp
+++ b/gdb/testsuite/gdb.threads/threxit-hop-specific.exp
@@ -16,22 +16,14 @@
 # Test that GDB doesn't get stuck when thread hoping over a thread
 # specific breakpoint when the selected thread has gone away.
 
-set testfile "threxit-hop-specific"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
-	 executable [list debug "incdir=${objdir}"]] != "" } {
+	 executable debug] != "" } {
     return -1
 }
 
-# Start with a fresh gdb.
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-
-gdb_load ${binfile}
+clean_restart ${binfile}
 
 runto_main
 
diff --git a/gdb/testsuite/gdb.threads/tls-nodebug.exp b/gdb/testsuite/gdb.threads/tls-nodebug.exp
index 40709f2..186a9da 100644
--- a/gdb/testsuite/gdb.threads/tls-nodebug.exp
+++ b/gdb/testsuite/gdb.threads/tls-nodebug.exp
@@ -14,9 +14,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-set testfile tls-nodebug
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 
 if [istarget "*-*-linux"] then {
     set target_cflags "-D_MIT_POSIX_THREADS"
@@ -28,11 +26,7 @@ if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executab
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-
-gdb_load ${binfile}
+clean_restart ${binfile}
 if ![runto_main] then {
    fail "Can't run to main"
    return 0
diff --git a/gdb/testsuite/gdb.threads/tls-shared.exp b/gdb/testsuite/gdb.threads/tls-shared.exp
index ac3c4c5..e659d51 100644
--- a/gdb/testsuite/gdb.threads/tls-shared.exp
+++ b/gdb/testsuite/gdb.threads/tls-shared.exp
@@ -16,21 +16,15 @@
 # tls-shared.exp -- Expect script to test thread local storage in gdb, with
 # shared libraries.
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
-set testfile tls-main
+standard_testfile tls-main.c
 set libfile tls-shared
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
 set srcfile_lib ${libfile}.c
-set binfile_lib ${objdir}/${subdir}/${libfile}.so
+set binfile_lib [standard_output_file ${libfile}.so]
 
 remote_exec build "rm -f ${binfile}"
 
 # get the value of gcc_compiled
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
@@ -41,10 +35,7 @@ if { [gdb_compile_shlib_pthreads ${srcdir}/${subdir}/${srcfile_lib} ${binfile_li
 }
 
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 gdb_load_shlibs ${binfile_lib}
 
 if ![runto_main] then {
@@ -57,7 +48,7 @@ gdb_test "print i_tls" "2" "print thread local storage variable"
 gdb_test "ptype i_tls" "int" "ptype of thread local storage variable"
 
 gdb_test "info address i_tls" \
-	"Symbol \\\"i_tls\\\" is a thread-local variable at offset 0x0 in the thread-local storage for .*tls-main.." \
+	"Symbol \\\"i_tls\\\" is a thread-local variable at offset 0x0 in the thread-local storage for .*tls-shared.." \
 	"print storage info for thread local storage variable"
 
 set line_number [gdb_get_line_number "break here to check result"]
diff --git a/gdb/testsuite/gdb.threads/tls-var.exp b/gdb/testsuite/gdb.threads/tls-var.exp
index 0054049..fdc267a 100644
--- a/gdb/testsuite/gdb.threads/tls-var.exp
+++ b/gdb/testsuite/gdb.threads/tls-var.exp
@@ -13,13 +13,11 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-set testfile tls-var
-set srcfile ${testfile}.c
+standard_testfile
 set srcmainfile ${testfile}-main.c
-set objfile ${objdir}/${subdir}/${testfile}.o
-set objmainfile ${objdir}/${subdir}/${testfile}-main.o
+set objfile [standard_output_file ${testfile}.o]
+set objmainfile [standard_output_file ${testfile}-main.o]
 set executable ${testfile}
-set binfile ${objdir}/${subdir}/${executable}
 
 if { [gdb_compile ${srcdir}/${subdir}/${srcfile} ${objfile} object {debug}] != ""
      || [gdb_compile ${srcdir}/${subdir}/${srcmainfile} ${objmainfile} object {}] != ""
diff --git a/gdb/testsuite/gdb.threads/tls.exp b/gdb/testsuite/gdb.threads/tls.exp
index 411b24b..62ef4ef 100644
--- a/gdb/testsuite/gdb.threads/tls.exp
+++ b/gdb/testsuite/gdb.threads/tls.exp
@@ -14,11 +14,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-set testfile tls
-set testfile2 tls2
-set srcfile ${testfile}.c
-set srcfile2 ${testfile2}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile tls.c tls2.c
 
 if [istarget "*-*-linux"] then {
     set target_cflags "-D_MIT_POSIX_THREADS"
@@ -26,7 +22,7 @@ if [istarget "*-*-linux"] then {
     set target_cflags ""
 }
 
-if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile} ${srcdir}/${subdir}/${srcfile2}" "${binfile}" executable [list c++ debug "incdir=${objdir}"]] != "" } {
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile} ${srcdir}/${subdir}/${srcfile2}" "${binfile}" executable [list c++ debug]] != "" } {
     return -1
 }
 
@@ -142,11 +138,7 @@ proc check_thread_stack {number spin_threads spin_threads_level} {
     }
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-
-gdb_load ${binfile}
+clean_restart ${binfile}
 if ![runto_main] then {
    fail "Can't run to main"
    return 0
diff --git a/gdb/testsuite/gdb.threads/watchpoint-fork-child.c b/gdb/testsuite/gdb.threads/watchpoint-fork-child.c
new file mode 100644
index 0000000..7a7e07f
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/watchpoint-fork-child.c
@@ -0,0 +1,129 @@
+/* Test case for forgotten hw-watchpoints after fork()-off of a process.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <assert.h>
+#include <signal.h>
+#include <stdio.h>
+
+#include "watchpoint-fork.h"
+
+/* `pid_t' may not be available.  */
+
+static volatile int usr1_got;
+
+static void
+handler_usr1 (int signo)
+{
+  usr1_got++;
+}
+
+void
+forkoff (int nr)
+{
+  int child, save_parent = getpid ();
+  int i;
+  struct sigaction act, oldact;
+#ifdef THREAD
+  void *thread_result;
+#endif
+
+  memset (&act, 0, sizeof act);
+  act.sa_flags = SA_RESTART;
+  act.sa_handler = handler_usr1;
+  sigemptyset (&act.sa_mask);
+  i = sigaction (SIGUSR1, &act, &oldact);
+  assert (i == 0);
+
+  child = fork ();
+  switch (child)
+    {
+    case -1:
+      assert (0);
+    default:
+      printf ("parent%d: %d\n", nr, (int) child);
+
+      /* Sleep for a while to possibly get incorrectly ATTACH_THREADed by GDB
+	 tracing the child fork with no longer valid thread/lwp entries of the
+	 parent.  */
+
+      i = sleep (2);
+      assert (i == 0);
+
+      /* We must not get caught here (against a forgotten breakpoint).  */
+
+      var++;
+      marker ();
+
+#ifdef THREAD
+      /* And neither got caught our thread.  */
+
+      step = 99;
+      i = pthread_join (thread, &thread_result);
+      assert (i == 0);
+      assert (thread_result == (void *) 99UL);
+#endif
+
+      /* Be sure our child knows we did not get caught above.  */
+
+      i = kill (child, SIGUSR1);
+      assert (i == 0);
+
+      /* Sleep for a while to check GDB's `info threads' no longer tracks us in
+	 the child fork.  */
+
+      i = sleep (2);
+      assert (i == 0);
+
+      _exit (0);
+    case 0:
+      printf ("child%d: %d\n", nr, (int) getpid ());
+
+      /* Let the parent signal us about its success.  Be careful of races.  */
+
+      for (;;)
+	{
+	  /* Parent either died (and USR1_GOT is zero) or it succeeded.  */
+	  if (getppid () != save_parent)
+	    break;
+	  if (kill (getppid (), 0) != 0)
+	    break;
+	  /* Parent succeeded?  */
+	  if (usr1_got)
+	    break;
+
+#ifdef THREAD
+	  i = pthread_yield ();
+	  assert (i == 0);
+#endif
+	}
+      assert (usr1_got);
+
+      /* We must get caught here (against a false watchpoint removal).  */
+
+      marker ();
+    }
+
+  i = sigaction (SIGUSR1, &oldact, NULL);
+  assert (i == 0);
+}
diff --git a/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c b/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c
new file mode 100644
index 0000000..eb07409
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c
@@ -0,0 +1,174 @@
+/* Test case for forgotten hw-watchpoints after fork()-off of a process.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 <assert.h>
+#include <unistd.h>
+#include <sys/wait.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <pthread.h>
+
+#include <asm/unistd.h>
+#include <unistd.h>
+#define gettid() syscall (__NR_gettid)
+
+#include "watchpoint-fork.h"
+
+/* Non-atomic `var++' should not hurt as we synchronize the threads by the STEP
+   variable.  Hit-comments need to be duplicated there to catch both at-stops
+   and behind-stops, depending on the target.  */
+
+volatile int var;
+
+void
+marker (void)
+{
+}
+
+static void
+empty (void)
+{
+}
+
+static void
+mark_exit (void)
+{
+}
+
+pthread_t thread;
+volatile int step;
+
+static void *
+start (void *arg)
+{
+  int i;
+
+  if (step >= 3)
+    goto step_3;
+
+  while (step != 1)
+    {
+      i = pthread_yield ();
+      assert (i == 0);
+    }
+
+  var++;	/* validity-thread-B */
+  empty ();	/* validity-thread-B */
+  step = 2;
+  while (step != 3)
+    {
+      if (step == 99)
+	goto step_99;
+
+      i = pthread_yield ();
+      assert (i == 0);
+    }
+
+step_3:
+  if (step >= 5)
+    goto step_5;
+
+  var++;	/* after-fork1-B */
+  empty ();	/* after-fork1-B */
+  step = 4;
+  while (step != 5)
+    {
+      if (step == 99)
+	goto step_99;
+
+      i = pthread_yield ();
+      assert (i == 0);
+    }
+
+step_5:
+  var++;	/* after-fork2-B */
+  empty ();	/* after-fork2-B */
+  return (void *) 5UL;
+
+step_99:
+  /* We must not get caught here (against a forgotten breakpoint).  */
+  var++;
+  marker ();
+  return (void *) 99UL;
+}
+
+int
+main (void)
+{
+  int i;
+  void *thread_result;
+
+  setbuf (stdout, NULL);
+  printf ("main: %d\n", (int) gettid ());
+
+  /* General hardware breakpoints and watchpoints validity.  */
+  marker ();
+  var++;	/* validity-first */
+  empty ();	/* validity-first */
+
+  i = pthread_create (&thread, NULL, start, NULL);
+  assert (i == 0);
+
+  var++;	/* validity-thread-A */
+  empty ();	/* validity-thread-A */
+  step = 1;
+  while (step != 2)
+    {
+      i = pthread_yield ();
+      assert (i == 0);
+    }
+
+  /* Hardware watchpoints got disarmed here.  */
+  forkoff (1);
+
+  var++;	/* after-fork1-A */
+  empty ();	/* after-fork1-A */
+  step = 3;
+#ifdef FOLLOW_CHILD
+  /* Spawn new thread as it was deleted in the child of FORK.  */
+  i = pthread_create (&thread, NULL, start, NULL);
+  assert (i == 0);
+#endif
+  while (step != 4)
+    {
+      i = pthread_yield ();
+      assert (i == 0);
+    }
+
+  /* A sanity check for double hardware watchpoints removal.  */
+  forkoff (2);
+
+  var++;	/* after-fork2-A */
+  empty ();	/* after-fork2-A */
+  step = 5;
+#ifdef FOLLOW_CHILD
+  /* Spawn new thread as it was deleted in the child of FORK.  */
+  i = pthread_create (&thread, NULL, start, NULL);
+  assert (i == 0);
+#endif
+
+  i = pthread_join (thread, &thread_result);
+  assert (i == 0);
+  assert (thread_result == (void *) 5UL);
+
+  mark_exit ();
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.threads/watchpoint-fork-parent.c b/gdb/testsuite/gdb.threads/watchpoint-fork-parent.c
new file mode 100644
index 0000000..9bbf438
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/watchpoint-fork-parent.c
@@ -0,0 +1,74 @@
+/* Test case for forgotten hw-watchpoints after fork()-off of a process.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 <string.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <assert.h>
+#include <stdio.h>
+#include <sys/wait.h>
+
+#include "watchpoint-fork.h"
+
+void
+forkoff (int nr)
+{
+  pid_t child, pid_got;
+  int exit_code = 42 + nr;
+  int status, i;
+
+  child = fork ();
+  switch (child)
+    {
+    case -1:
+      assert (0);
+    case 0:
+      printf ("child%d: %d\n", nr, (int) getpid ());
+      /* Delay to get both the "child%d" and "parent%d" message printed without
+	 a race breaking expect by its endless wait on `$gdb_prompt$':
+	 Breakpoint 3, marker () at ../../../gdb/testsuite/gdb.threads/watchpoint-fork.c:33
+	 33      }
+	 (gdb) parent2: 14223  */
+      i = sleep (1);
+      assert (i == 0);
+
+      /* We must not get caught here (against a forgotten breakpoint).  */
+      var++;
+      marker ();
+
+      _exit (exit_code);
+    default:
+      printf ("parent%d: %d\n", nr, (int) child);
+      /* Delay to get both the "child%d" and "parent%d" message printed, see
+	 above.  */
+      i = sleep (1);
+      assert (i == 0);
+
+      pid_got = wait (&status);
+      assert (pid_got == child);
+      assert (WIFEXITED (status));
+      assert (WEXITSTATUS (status) == exit_code);
+
+      /* We must get caught here (against a false watchpoint removal).  */
+      marker ();
+    }
+}
diff --git a/gdb/testsuite/gdb.threads/watchpoint-fork-st.c b/gdb/testsuite/gdb.threads/watchpoint-fork-st.c
new file mode 100644
index 0000000..17cc058
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/watchpoint-fork-st.c
@@ -0,0 +1,61 @@
+/* Test case for forgotten hw-watchpoints after fork()-off of a process.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 <assert.h>
+#include <unistd.h>
+#include <sys/wait.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "watchpoint-fork.h"
+
+volatile int var;
+
+void
+marker (void)
+{
+}
+
+static void
+mark_exit (void)
+{
+}
+
+int
+main (void)
+{
+  setbuf (stdout, NULL);
+  printf ("main: %d\n", (int) getpid ());
+
+  /* General hardware breakpoints and watchpoints validity.  */
+  marker ();
+  var++;
+  /* Hardware watchpoints got disarmed here.  */
+  forkoff (1);
+  /* This watchpoint got lost before.  */
+  var++;
+  /* A sanity check for double hardware watchpoints removal.  */
+  forkoff (2);
+  var++;
+
+  mark_exit ();
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.threads/watchpoint-fork.exp b/gdb/testsuite/gdb.threads/watchpoint-fork.exp
new file mode 100644
index 0000000..f6f1567
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/watchpoint-fork.exp
@@ -0,0 +1,147 @@
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Test case for forgotten hw-watchpoints after fork()-off of a process.
+
+set testfile watchpoint-fork
+
+if [is_remote target] {
+    kfail "remote/13584" "gdbserver does not support debugging across fork"
+    return
+}
+
+proc test {type symbol} { with_test_prefix "$type" {
+    global testfile subdir srcdir gdb_prompt
+
+    set srcfile_type ${srcdir}/${subdir}/${testfile}-${type}.c
+
+    # no threads
+
+    with_test_prefix "singlethreaded" {
+	set executable ${testfile}-${type}-st
+	set srcfile_main ${testfile}-st.c
+	if {[build_executable $testfile.exp $executable \
+		 [list $srcfile_main ${testfile}-${type}.c] \
+		 [list debug additional_flags=-D$symbol]] == -1} {
+	    return -1
+	}
+
+	clean_restart $executable
+
+	if [target_info exists gdb,no_hardware_watchpoints] {
+	    # The software watchpoint functionality is in GDB an unrelated test.
+	    gdb_test_no_output "set can-use-hw-watchpoints 0"
+	}
+
+	gdb_test "show detach-on-fork" "Whether gdb will detach the child of a fork is on\\."
+	gdb_test_no_output "set follow-fork-mode $type"
+	gdb_test "show follow-fork-mode" "Debugger response to a program call of fork or vfork is \"$type\"\\."
+	# Testcase uses it for the `follow-fork-mode child' type.
+	gdb_test "handle SIGUSR1 nostop noprint pass" "No\[ \t\]+No\[ \t\]+Yes.*"
+
+	if ![runto_main] {
+	    return
+	}
+
+	gdb_test "watch var" "atchpoint \[0-9\]+: var" "Set the watchpoint"
+
+	# It is never hit but it should not be left over in the fork()ed-off child.
+	if [skip_hw_breakpoint_tests] {
+	    set hbreak "break"
+	} else {
+	    set hbreak "hbreak"
+	}
+	gdb_test "$hbreak marker"
+
+	gdb_breakpoint "mark_exit"
+
+	gdb_test "continue" \
+	    "reakpoint \[0-9\]+, marker.*" "hardware breakpoints work"
+	gdb_test "continue" \
+	    "atchpoint \[0-9\]+: var.*Old value = 0.*New value = 1.*forkoff *\\(1\\).*" "watchpoints work"
+	gdb_test "continue" \
+	    "reakpoint \[0-9\]+, marker.*" "breakpoint after the first fork"
+	gdb_test "continue" \
+	    "atchpoint \[0-9\]+: var.*Old value = 1.*New value = 2.*forkoff *\\(2\\).*" "watchpoint after the first fork"
+	gdb_test "continue" \
+	    "reakpoint \[0-9\]+, marker.*" "breakpoint after the second fork"
+	gdb_test "continue" \
+	    "atchpoint \[0-9\]+: var.*Old value = 2.*New value = 3.*mark_exit \\(\\);" "watchpoint after the second fork"
+	gdb_test "continue" "Continuing\\..*\r\nBreakpoint \[0-9\]+, mark_exit .*" "finish"
+    }
+
+    # threads
+
+    if [target_info exists gdb,no_hardware_watchpoints] {
+	# Watchpoint hits would get detected in unexpected threads.
+	return
+    }
+
+    with_test_prefix "multithreaded" {
+	set executable ${testfile}-${type}-mt
+	set srcfile_main ${srcdir}/${subdir}/${testfile}-mt.c
+	if { [gdb_compile_pthreads "${srcfile_main} ${srcfile_type}" [standard_output_file ${executable}] executable [list debug "additional_flags=-D$symbol -DTHREAD"]] != "" } {
+	    untested ${testfile}.exp
+	    return
+	}
+	clean_restart $executable
+
+	gdb_test_no_output "set follow-fork-mode $type"
+	# Testcase uses it for the `follow-fork-mode child' type.
+	gdb_test "handle SIGUSR1 nostop noprint pass" "No\[ \t\]+No\[ \t\]+Yes.*"
+
+	if ![runto_main] {
+	    return
+	}
+
+	gdb_test "watch var" "atchpoint \[0-9\]+: var" "Set the watchpoint"
+
+	# It should not be left over in the fork()ed-off child.
+	gdb_test "$hbreak marker" {reakpoint [0-9]+.*}
+
+	gdb_breakpoint "mark_exit"
+
+	gdb_test "continue" \
+	    "reakpoint \[0-9\]+, marker.*" "hardware breakpoints work"
+	gdb_test "continue" \
+	    "atchpoint \[0-9\]+: var.*Old value = 0.*New value = 1.*validity-first.*" "singlethread watchpoints work"
+	gdb_test "continue" \
+	    "atchpoint \[0-9\]+: var.*Old value = 1.*New value = 2.*validity-thread-A.*" "multithreaded watchpoints work at A"
+	gdb_test "continue" \
+	    "atchpoint \[0-9\]+: var.*Old value = 2.*New value = 3.*validity-thread-B.*" "multithreaded watchpoints work at B"
+	gdb_test "continue" \
+	    "reakpoint \[0-9\]+, marker.*" "breakpoint (A) after the first fork"
+	gdb_test "continue" \
+	    "atchpoint \[0-9\]+: var.*Old value = 3.*New value = 4.*after-fork1-A.*" "watchpoint A after the first fork"
+	gdb_test "continue" \
+	    "atchpoint \[0-9\]+: var.*Old value = 4.*New value = 5.*after-fork1-B.*" "watchpoint B after the first fork"
+	gdb_test "continue" \
+	    "reakpoint \[0-9\]+, marker.*" "breakpoint (A) after the second fork"
+	gdb_test "continue" \
+	    "atchpoint \[0-9\]+: var.*Old value = 5.*New value = 6.*after-fork2-A.*" "watchpoint A after the second fork"
+	gdb_test "continue" \
+	    "atchpoint \[0-9\]+: var.*Old value = 6.*New value = 7.*after-fork2-B.*" "watchpoint B after the second fork"
+	gdb_test "continue" "Continuing\\..*\r\nBreakpoint \[0-9\]+, mark_exit .*" "finish"
+    }
+}}
+
+test parent FOLLOW_PARENT
+
+# Only GNU/Linux is known to support `set follow-fork-mode child'.
+if [istarget "*-*-linux*"] {
+    test child FOLLOW_CHILD
+} else {
+    untested "${testfile}: child"
+}
diff --git a/gdb/testsuite/gdb.threads/watchpoint-fork.h b/gdb/testsuite/gdb.threads/watchpoint-fork.h
new file mode 100644
index 0000000..cb109fa
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/watchpoint-fork.h
@@ -0,0 +1,32 @@
+/* Test case for forgotten hw-watchpoints after fork()-off of a process.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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.  */
+
+#ifdef THREAD
+#include <pthread.h>
+
+extern volatile int step;
+extern pthread_t thread;
+#endif /* THREAD */
+
+extern volatile int var;
+
+extern void marker (void);
+extern void forkoff (int nr);
diff --git a/gdb/testsuite/gdb.threads/watchthreads-reorder.exp b/gdb/testsuite/gdb.threads/watchthreads-reorder.exp
index f620c07..283c4ca 100644
--- a/gdb/testsuite/gdb.threads/watchthreads-reorder.exp
+++ b/gdb/testsuite/gdb.threads/watchthreads-reorder.exp
@@ -31,18 +31,12 @@ if {[skip_hw_watchpoint_access_tests]
     return 0
 }
 
-set testfile "watchthreads-reorder"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
+standard_testfile
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" ${binfile} executable [list debug additional_flags=-lrt]] != "" } {
     return -1
 }
 
-foreach reorder {0 1} {
-
-    global pf_prefix
-    set prefix_test $pf_prefix
-    lappend pf_prefix "reorder$reorder:"
+foreach reorder {0 1} { with_test_prefix "reorder$reorder" {
 
     clean_restart $testfile
 
@@ -97,6 +91,4 @@ foreach reorder {0 1} {
     gdb_test "set debug infrun 1"
 
     gdb_continue_to_breakpoint "break-at-exit" ".*break-at-exit.*"
-
-    set pf_prefix $prefix_test
-}
+}}
diff --git a/gdb/testsuite/gdb.threads/watchthreads.exp b/gdb/testsuite/gdb.threads/watchthreads.exp
index d9fc87c..b74b291 100644
--- a/gdb/testsuite/gdb.threads/watchthreads.exp
+++ b/gdb/testsuite/gdb.threads/watchthreads.exp
@@ -17,10 +17,6 @@
 
 # Check that GDB can support multiple watchpoints across threads.
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 # This test verifies that a watchpoint is detected in the proper thread
 # so the test is only meaningful on a system with hardware watchpoints.
@@ -32,10 +28,8 @@ proc target_no_stopped_data { } {
     return [istarget s390*-*-*]
 }
 
-set testfile "watchthreads"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } {
+standard_testfile
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable debug] != "" } {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.threads/watchthreads2.exp b/gdb/testsuite/gdb.threads/watchthreads2.exp
index ef4fa29..d67b9f0 100644
--- a/gdb/testsuite/gdb.threads/watchthreads2.exp
+++ b/gdb/testsuite/gdb.threads/watchthreads2.exp
@@ -21,10 +21,6 @@
 set NR_THREADS 4
 set X_INCR_COUNT 10
 
-if $tracelevel {
-    strace $tracelevel
-}
-
 
 # This test verifies that a watchpoint is detected in the proper thread
 # so the test is only meaningful on a system with hardware watchpoints.
@@ -32,17 +28,12 @@ if {[skip_hw_watchpoint_tests]} {
     return 0
 }
 
-set testfile "watchthreads2"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}" "additional_flags=-DNR_THREADS=$NR_THREADS -DX_INCR_COUNT=$X_INCR_COUNT"]] != "" } {
+standard_testfile
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "additional_flags=-DNR_THREADS=$NR_THREADS -DX_INCR_COUNT=$X_INCR_COUNT"]] != "" } {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+clean_restart ${binfile}
 
 gdb_test_no_output "set can-use-hw-watchpoints 1" ""
 
diff --git a/gdb/testsuite/gdb.trace/Makefile.in b/gdb/testsuite/gdb.trace/Makefile.in
index 7e719e2..8a7d523 100644
--- a/gdb/testsuite/gdb.trace/Makefile.in
+++ b/gdb/testsuite/gdb.trace/Makefile.in
@@ -3,9 +3,9 @@ srcdir = @srcdir@
 
 .PHONY: all clean mostlyclean distclean realclean
 
-PROGS = ax backtrace deltrace infotrace packetlen passc-dyn passcount \
-	report save-trace tfile tfind tracecmd tsv unavailable while-dyn \
-	while-stepping
+PROGS = ax backtrace deltrace disconnected-tracing infotrace packetlen \
+	passc-dyn passcount report save-trace tfile tfind tracecmd tsv \
+	unavailable while-dyn while-stepping
 
 all info install-info dvi install uninstall installcheck check:
 	@echo "Nothing to be done for $@..."
@@ -13,6 +13,7 @@ all info install-info dvi install uninstall installcheck check:
 clean mostlyclean:
 	-rm -f actions circ collection
 	-rm -f *.o *.diff *~ *.bad core sh3 hppa mn10300 $(PROGS)
+	-rm -f *.dwo *.dwp
 
 distclean maintainer-clean realclean: clean
 	-rm -f Makefile config.status config.log gdb.log gdb.sum
diff --git a/gdb/testsuite/gdb.trace/actions.c b/gdb/testsuite/gdb.trace/actions.c
index 270e1e1..04ae43f 100644
--- a/gdb/testsuite/gdb.trace/actions.c
+++ b/gdb/testsuite/gdb.trace/actions.c
@@ -119,11 +119,6 @@ main (argc, argv, envp)
   int i;
   unsigned long myparms[10];
 
-#ifdef usestubs
-  set_debug_traps ();
-  breakpoint ();
-#endif
-
   begin ();
   for (i = 0; i < sizeof (myparms) / sizeof (myparms[0]); i++)
     myparms[i] = i;
diff --git a/gdb/testsuite/gdb.trace/actions.exp b/gdb/testsuite/gdb.trace/actions.exp
index e337fb3..4400dbc 100644
--- a/gdb/testsuite/gdb.trace/actions.exp
+++ b/gdb/testsuite/gdb.trace/actions.exp
@@ -17,17 +17,11 @@
 
 load_lib "trace-support.exp";
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 gdb_exit
 gdb_start
 
-set testfile "actions"
-set srcfile ${testfile}.c
-set binfile $objdir/$subdir/actions
+standard_testfile
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested actions.exp
diff --git a/gdb/testsuite/gdb.trace/ax.exp b/gdb/testsuite/gdb.trace/ax.exp
index 2b2a1cd..9940a5e 100644
--- a/gdb/testsuite/gdb.trace/ax.exp
+++ b/gdb/testsuite/gdb.trace/ax.exp
@@ -20,16 +20,10 @@
 
 load_lib "trace-support.exp";
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 gdb_exit
 gdb_start
-set testfile "actions"
-set srcfile ${testfile}.c
-set binfile $objdir/$subdir/ax
+standard_testfile actions.c
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested ax.exp
diff --git a/gdb/testsuite/gdb.trace/backtrace.exp b/gdb/testsuite/gdb.trace/backtrace.exp
index 07aed30..5093266 100644
--- a/gdb/testsuite/gdb.trace/backtrace.exp
+++ b/gdb/testsuite/gdb.trace/backtrace.exp
@@ -17,17 +17,11 @@
 
 load_lib "trace-support.exp";
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 gdb_exit
 gdb_start
 
-set testfile "actions"
-set srcfile ${testfile}.c
-set binfile $objdir/$subdir/backtrace
+standard_testfile actions.c
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested backtrace.exp
@@ -39,10 +33,8 @@ gdb_test "tfind none"  ".*" ""
 runto_main
 gdb_reinitialize_dir $srcdir/$subdir
 
-# We generously give ourselves one "pass" if we successfully 
-# detect that this test cannot be run on this target!
 if { ![gdb_target_supports_trace] } then {
-    pass "Current target does not support trace"
+    unsupported "Current target does not support trace"
     return 1;
 
 }
diff --git a/gdb/testsuite/gdb.trace/change-loc.exp b/gdb/testsuite/gdb.trace/change-loc.exp
index ec3c555..0064b6f 100644
--- a/gdb/testsuite/gdb.trace/change-loc.exp
+++ b/gdb/testsuite/gdb.trace/change-loc.exp
@@ -14,28 +14,22 @@
 
 load_lib "trace-support.exp";
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if {[skip_shlib_tests]} {
     return 0
 }
 
-set testfile "change-loc"
+standard_testfile
 set libfile1 "change-loc-1"
 set libfile2 "change-loc-2"
-set srcfile $testfile.c
 set executable $testfile
 set libsrc1 $srcdir/$subdir/$libfile1.c
 set libsrc2 $srcdir/$subdir/$libfile2.c
-set binfile $objdir/$subdir/$testfile
-set lib_sl1 $objdir/$subdir/$libfile1.sl
-set lib_sl2 $objdir/$subdir/$libfile2.sl
+set lib_sl1 [standard_output_file $libfile1.sl]
+set lib_sl2 [standard_output_file $libfile2.sl]
 
 set lib_opts debug
 
-if [get_compiler_info ${binfile}] {
+if [get_compiler_info] {
     return -1
 }
 
@@ -75,20 +69,15 @@ if [is_amd64_regs_target] {
 
 # Set tracepoint during tracing experiment.
 
-proc tracepoint_change_loc_1 { trace_type } {
+proc tracepoint_change_loc_1 { trace_type } { with_test_prefix "1 $trace_type" {
     global testfile
     global srcfile
     global pcreg
     global gdb_prompt
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix 1 $trace_type:"
 
     clean_restart ${testfile}
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }
     gdb_test_no_output "delete break 1"
@@ -107,7 +96,21 @@ proc tracepoint_change_loc_1 { trace_type } {
     gdb_test "continue" ".*Breakpoint.*marker.*at.*$srcfile.*" \
 	"continue to marker 1"
     # Set a tracepoint during tracing.
-    gdb_test "${trace_type} set_tracepoint" ".*" "set tracepoint on set_tracepoint"
+    set test "set tracepoint on set_tracepoint"
+    gdb_test_multiple "${trace_type} set_tracepoint" $test {
+	-re "Target returns error code .* too far .*$gdb_prompt $" {
+	    if [string equal $trace_type "ftrace"] {
+		# The target was unable to install the fast tracepoint
+		# (e.g., jump pad too far from tracepoint).
+		pass "$test (too far)"
+	    } else {
+		fail $test
+	    }
+	}
+	-re "\r\n$gdb_prompt $" {
+	    pass $test
+	}
+    }
 
     gdb_trace_setactions "set action for tracepoint" "" \
 	"collect \$$pcreg" "^$"
@@ -118,16 +121,27 @@ proc tracepoint_change_loc_1 { trace_type } {
 \[0-9\]+\[\t \]+\(|fast \)tracepoint\[ \]+keep y.*\<MULTIPLE\>.*4\.1.* in func4.*4\.2.* in func4.*" \
 	"tracepoint with two locations"
 
-    gdb_test_multiple "continue" "continue to marker 2" {
-	-re ".*Breakpoint.*marker.*at.*$srcfile.*$gdb_prompt $" {
-	    pass "continue to marker 2"
-	}
-	-re ".*$gdb_prompt $" {
-	    kfail "gdb/13392" "continue to marker 2"
-	    set pf_prefix $old_pf_prefix
-	    return
-	}
+    set test "continue to marker 2"
+    gdb_test_multiple "continue" $test {
+	-re "Target returns error code .* too far .*$gdb_prompt $" {
+            if [string equal $trace_type "ftrace"] {
+		# Expected if the target was unable to install the
+		# fast tracepoint (e.g., jump pad too far from
+		# tracepoint).
+		pass "$test (too far)"
+		# Skip the rest of the tests.
+                return
+            } else {
+		fail "continue to marker 2"
+		fail $test
+            }
+
+       }
+       -re ".*Breakpoint.*marker.*at.*$srcfile.*$gdb_prompt $" {
+           pass "continue to marker 2"
+       }
     }
+
     # tracepoint has three locations after shlib change-loc-2 is loaded.
     gdb_test "info trace" \
 	"Num     Type\[ \]+Disp Enb Address\[ \]+What.*
@@ -140,30 +154,24 @@ proc tracepoint_change_loc_1 { trace_type } {
     # shlib is unloaded, there are still three locations, but one is pending.
     gdb_test "info trace" \
         "Num     Type\[ \]+Disp Enb Address\[ \]+What.*
-\[0-9\]+\[\t \]+\(|fast \)tracepoint\[ \]+keep y.*\<MULTIPLE\>.*4\.1.* in func4.*4\.2.* in func4.*4\.3.* \<PENDING\>\[\t \]+set_tracepoint.*" \
+\[0-9\]+\[\t \]+\(|fast \)tracepoint\[ \]+keep y.*\<MULTIPLE\>.*4\.1.* in func4.*(4\.2.* in func4.*4\.3.* \<PENDING\>\[\t \]+set_tracepoint|4\.2.* \<PENDING\>\[\t \]+set_tracepoint\r\n4\.3.* in func4).*" \
         "tracepoint with two locations (unload)"
 
     gdb_test_no_output "tstop"
 
     gdb_test "tfind" "Found trace frame 0, tracepoint 4.*" "tfind frame 0"
     gdb_test "tfind" "Target failed to find requested trace frame\\..*"
-
-    set pf_prefix $old_pf_prefix
-}
+}}
 
 # Set pending tracepoint.
 
-proc tracepoint_change_loc_2 { trace_type } {
+proc tracepoint_change_loc_2 { trace_type } { with_test_prefix "2 $trace_type" {
     global srcdir
     global srcfile
     global subdir
     global pcreg
     global binfile
     global gdb_prompt
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix 2 $trace_type:"
 
     gdb_exit
     gdb_start
@@ -214,20 +222,28 @@ proc tracepoint_change_loc_2 { trace_type } {
 	"breakpoint on marker"
 
     # tracepoint with two locations will be downloaded and installed.
-    gdb_test_no_output "tstart"
-
-    gdb_test_multiple "continue" "continue to marker 1" {
-	-re ".*Breakpoint.*marker.*at.*$srcfile.*$gdb_prompt $" {
-	    pass "continue to marker 1"
-	}
-	-re ".*$gdb_prompt $" {
-	    kfail "gdb/13392" "continue to marker 1"
-	    set pf_prefix $old_pf_prefix
-	    return
+    set test "tstart"
+    gdb_test_multiple "tstart" $test {
+        -re "^tstart\r\n$gdb_prompt $" {
+	    pass "tstart"
+        }
+	-re "Target returns error code .* too far .*$gdb_prompt $" {
+            if [string equal $trace_type "ftrace"] {
+		# The target was unable to install the fast tracepoint
+		# (e.g., jump pad too far from tracepoint).
+		pass "$test (too far)"
+		# Skip the rest of the tests.
+		return
+            } else {
+		fail $test
+            }
 	}
     }
 
     gdb_test "continue" ".*Breakpoint.*marker.*at.*$srcfile.*" \
+	"continue to marker 1"
+
+    gdb_test "continue" ".*Breakpoint.*marker.*at.*$srcfile.*" \
 	"continue to marker 2"
 
     # tracepoint has three locations after shlib change-loc-2 is loaded.
@@ -242,7 +258,7 @@ proc tracepoint_change_loc_2 { trace_type } {
     # shlib is unloaded, there are still three locations, but one is pending.
     gdb_test "info trace" \
 	"Num     Type\[ \]+Disp Enb Address\[ \]+What.*
-\[0-9\]+\[\t \]+\(|fast \)tracepoint\[ \]+keep y.*\<MULTIPLE\>.*1\.1.* in func4.*1\.2.* in func4.*1\.3.* \<PENDING\>\[\t \]+set_tracepoint.*" \
+\[0-9\]+\[\t \]+\(|fast \)tracepoint\[ \]+keep y.*\<MULTIPLE\>.*1\.1.* in func4.*(1\.2.* in func4.*1\.3.* \<PENDING\>\[\t \]+set_tracepoint|1\.2.* \<PENDING\>\[\t \]+set_tracepoint\r\n1\.3.* in func4).*" \
 	"tracepoint with two locations (unload)"
 
     gdb_test_no_output "tstop"
@@ -251,15 +267,13 @@ proc tracepoint_change_loc_2 { trace_type } {
     gdb_test "tfind" "Found trace frame 1, tracepoint 1.*" "tfind frame 1"
     gdb_test "tfind" "Found trace frame 2, tracepoint 1.*" "tfind frame 2"
     gdb_test "tfind" "Target failed to find requested trace frame\\..*"
-
-    set pf_prefix $old_pf_prefix
-}
+}}
 
 tracepoint_change_loc_1 "trace"
 tracepoint_change_loc_2 "trace"
 
 # Re-compile test case with IPA.
-set libipa $objdir/../gdbserver/libinproctrace.so
+set libipa [get_in_proc_agent]
 gdb_load_shlibs $libipa
 
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile executable \
diff --git a/gdb/testsuite/gdb.trace/circ.c b/gdb/testsuite/gdb.trace/circ.c
index 98a2ce6..e83eb04 100644
--- a/gdb/testsuite/gdb.trace/circ.c
+++ b/gdb/testsuite/gdb.trace/circ.c
@@ -61,11 +61,6 @@ main (argc, argv, envp)
 {
   int i;
 
-#ifdef usestubs
-  set_debug_traps ();
-  breakpoint ();
-#endif
-
   begin ();
   for (i = 0; i < sizeof(testload) / sizeof(testload[0]); i++)
     testload[i] = i + 1;
@@ -83,8 +78,5 @@ main (argc, argv, envp)
 
   end ();
 
-#ifdef usestubs
-  breakpoint ();
-#endif
   return 0;
 }
diff --git a/gdb/testsuite/gdb.trace/circ.exp b/gdb/testsuite/gdb.trace/circ.exp
index 7d79d04..8300082 100644
--- a/gdb/testsuite/gdb.trace/circ.exp
+++ b/gdb/testsuite/gdb.trace/circ.exp
@@ -15,18 +15,10 @@
 
 load_lib "trace-support.exp"
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
-set testfile "circ"
-set srcfile ${testfile}.c
-set binfile $objdir/$subdir/$testfile
+standard_testfile
 
-if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
-	executable {debug nowarnings}] != "" } {
-    untested circ.exp
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug nowarnings}]} {
     return -1
 }
 
@@ -92,26 +84,45 @@ proc setup_tracepoints { } {
 
 # return 0 for success, 1 for failure
 proc trace_buffer_normal { } {
-    if [gdb_test "maint packet QTBuffer:size:ffffffff" \
-	    "received: .OK." ""] then { 
-	pass "This test cannot be run on this target"
+    global gdb_prompt
+
+    set ok 0
+    set test "maint packet QTBuffer:size:ffffffff"
+    gdb_test_multiple $test $test {
+	-re "received: .OK.\r\n$gdb_prompt $" {
+	    set ok 1
+	    pass $test
+	}
+	-re "\r\n$gdb_prompt $" {
+	}
+    }
+    if { !$ok } {
+	unsupported $test
 	return 1;
     }
-    if [gdb_test "maint packet QTBuffer:circular:0" \
-	    "received: .OK." ""] then { 
-	pass "This test cannot be run on this target"
+
+    set ok 0
+    set test "maint packet QTBuffer:circular:0"
+    gdb_test_multiple $test $test {
+	-re "received: .OK.\r\n$gdb_prompt $" {
+	    set ok 1
+	    pass $test
+	}
+	-re "\r\n$gdb_prompt $" {
+	}
+    }
+    if { !$ok } {
+	unsupported $test
 	return 1;
     }
+
     return 0;
 }
 
 # return 0 for success, 1 for failure
 proc gdb_trace_circular_tests { } {
-
-    # We generously give ourselves one "pass" if we successfully 
-    # detect that this test cannot be run on this target!
     if { ![gdb_target_supports_trace] } then { 
-	pass "Current target does not support trace"
+	unsupported "Current target does not support trace"
 	return 1;
     }
 
@@ -185,17 +196,6 @@ proc gdb_trace_circular_tests { } {
     return 0;
 }
 
-# Start with a fresh gdb.
-
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load $binfile
- 
-if [target_info exists gdb_stub] {
-    gdb_step_for_stub;
-}
-
 gdb_test_no_output "set circular-trace-buffer on" \
     "set circular-trace-buffer on"
 
diff --git a/gdb/testsuite/gdb.trace/collection.c b/gdb/testsuite/gdb.trace/collection.c
index 5901baf..3eac221 100644
--- a/gdb/testsuite/gdb.trace/collection.c
+++ b/gdb/testsuite/gdb.trace/collection.c
@@ -225,11 +225,6 @@ main (argc, argv, envp)
   test_struct mystruct;
   int         myarray[4];
 
-#ifdef usestubs
-  set_debug_traps ();
-  breakpoint ();
-#endif
-
   begin ();
   /* Assign collectable values to global variables. */
   l0  = s0  = c0  = 0;     l1  = s1  = c1  = 1;
diff --git a/gdb/testsuite/gdb.trace/collection.exp b/gdb/testsuite/gdb.trace/collection.exp
index c80334b..25544b5 100644
--- a/gdb/testsuite/gdb.trace/collection.exp
+++ b/gdb/testsuite/gdb.trace/collection.exp
@@ -15,19 +15,11 @@
 
 load_lib "trace-support.exp"
 
-if $tracelevel then {
-	strace $tracelevel
-}
-
 
-set testfile "collection"
-set srcfile ${testfile}.c
+standard_testfile
 set executable $testfile
-set binfile $objdir/$subdir/$executable
 
-if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
-	executable {debug nowarnings}] != "" } {
-    untested collection.exp
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug nowarnings}]} {
     return -1
 }
 
@@ -780,13 +772,10 @@ proc gdb_trace_collection_test {} {
 
 }
 
-clean_restart $executable
 runto_main
 
-# We generously give ourselves one "pass" if we successfully
-# detect that this test cannot be run on this target!
 if { ![gdb_target_supports_trace] } then {
-    pass "Current target does not support trace"
+    unsupported "Current target does not support trace"
     return 1;
 }
 
diff --git a/gdb/testsuite/gdb.trace/deltrace.exp b/gdb/testsuite/gdb.trace/deltrace.exp
index 3664d7a..2423de2 100644
--- a/gdb/testsuite/gdb.trace/deltrace.exp
+++ b/gdb/testsuite/gdb.trace/deltrace.exp
@@ -17,17 +17,11 @@
 
 load_lib "trace-support.exp";
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 gdb_exit
 gdb_start
 
-set testfile "actions"
-set srcfile ${testfile}.c
-set binfile $objdir/$subdir/deltrace
+standard_testfile actions.c
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested deltrace.exp
diff --git a/gdb/testsuite/gdb.trace/disconnected-tracing.c b/gdb/testsuite/gdb.trace/disconnected-tracing.c
new file mode 100644
index 0000000..91d66ed
--- /dev/null
+++ b/gdb/testsuite/gdb.trace/disconnected-tracing.c
@@ -0,0 +1,21 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+int main ()
+{
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.trace/disconnected-tracing.exp b/gdb/testsuite/gdb.trace/disconnected-tracing.exp
new file mode 100644
index 0000000..79194f1
--- /dev/null
+++ b/gdb/testsuite/gdb.trace/disconnected-tracing.exp
@@ -0,0 +1,74 @@
+#   Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Test of disconnected-tracing.
+
+load_lib "trace-support.exp";
+
+standard_testfile
+set executable $testfile
+set expfile $testfile.exp
+set gdbserver_reconnect_p 1
+
+if { [info proc gdb_reconnect] == "" } {
+    unsupported "target does not support reconnect"
+    return -1
+}
+
+if [prepare_for_testing $expfile $executable $srcfile \
+        {debug nowarnings}] {
+    untested "failed to prepare for trace tests"
+    return -1
+}
+
+if ![runto_main] {
+    fail "can't run to main to check for trace support"
+    return -1
+}
+
+if ![gdb_target_supports_trace] {
+    unsupported "target does not support trace"
+    return -1;
+}
+
+delete_breakpoints
+gdb_test_no_output "set confirm off"
+gdb_test_no_output "set disconnected-tracing on"
+gdb_test "trace main" ".*"
+gdb_test_no_output "tstart"
+
+gdb_test "info tracepoints" ".*in main at.*" "first info tracepoints"
+
+gdb_test "disconnect" "Ending remote debugging\\." "first disconnect"
+if { [gdb_reconnect] == 0 } {
+    pass "first reconnect after unload"
+} else {
+    fail "first reconnect after unload"
+    return 0
+}
+gdb_test "info tracepoints" ".*in main at.*" "second info tracepoints"
+
+delete_breakpoints
+gdb_test "info tracepoints" ".*No tracepoints..*" "third info tracepoints"
+
+gdb_test "disconnect" "Ending remote debugging\\." "second disconnect"
+if { [gdb_reconnect] == 0 } {
+    pass "second reconnect after unload"
+} else {
+    fail "second reconnect after unload"
+    return 0
+}
+gdb_test "info tracepoints" ".*in main at.*" "fourth info tracepoints"
+
diff --git a/gdb/testsuite/gdb.trace/ftrace.exp b/gdb/testsuite/gdb.trace/ftrace.exp
index beeccb9..56cd2fa 100644
--- a/gdb/testsuite/gdb.trace/ftrace.exp
+++ b/gdb/testsuite/gdb.trace/ftrace.exp
@@ -14,10 +14,8 @@
 
 load_lib "trace-support.exp";
 
-set testfile "ftrace"
+standard_testfile
 set executable $testfile
-set srcfile $testfile.c
-set binfile $objdir/$subdir/$testfile
 set expfile $testfile.exp
 
 # Some targets have leading underscores on assembly symbols.
@@ -39,7 +37,7 @@ if ![gdb_target_supports_trace] {
     return -1
 }
 
-set libipa $objdir/../gdbserver/libinproctrace.so
+set libipa [get_in_proc_agent]
 gdb_load_shlibs $libipa
 
 # Can't use prepare_for_testing, because that splits compiling into
@@ -86,7 +84,7 @@ proc test_fast_tracepoints {} {
 
     gdb_test "print gdb_agent_gdb_trampoline_buffer_error" ".*" ""
 
-    if { [is_x86_like_target] } {
+    if { [istarget "x86_64-*-*"] || [istarget "i\[34567\]86-*-*"] } {
 
 	gdb_test "ftrace set_point" "Fast tracepoint .*" \
 	    "fast tracepoint at a long insn"
@@ -134,11 +132,13 @@ proc test_fast_tracepoints {} {
 	gdb_test "tfind pc *set_point" "Found trace frame .*" \
 	    "tfind set_point frame, first time"
 
+	setup_kfail_for_target "gdb/13808" "x86_64-*-linux*"
 	gdb_test "print globvar" " = 1"
 
 	gdb_test "tfind pc *set_point" "Found trace frame .*" \
 	    "tfind set_point frame, second time"
 
+	setup_kfail_for_target "gdb/13808" "x86_64-*-linux*"
 	gdb_test "print anarg" " = 200"
 
 	gdb_test "tfind start" "Found trace frame .*" \
@@ -164,7 +164,7 @@ proc test_fast_tracepoints {} {
 
 gdb_reinitialize_dir $srcdir/$subdir
 
-if { [gdb_test "info sharedlibrary" ".*libinproctrace\.so.*" "IPA loaded"] != 0 } {
+if { [gdb_test "info sharedlibrary" ".*${libipa}.*" "IPA loaded"] != 0 } {
     untested "Could not find IPA lib loaded"
     return 1
 }
diff --git a/gdb/testsuite/gdb.trace/infotrace.exp b/gdb/testsuite/gdb.trace/infotrace.exp
index f8237e7..bdc3830 100644
--- a/gdb/testsuite/gdb.trace/infotrace.exp
+++ b/gdb/testsuite/gdb.trace/infotrace.exp
@@ -17,17 +17,11 @@
 
 load_lib "trace-support.exp";
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 gdb_exit
 gdb_start
 
-set testfile "actions"
-set srcfile ${testfile}.c
-set binfile $objdir/$subdir/infotrace
+standard_testfile actions.c
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested infotrace.exp
diff --git a/gdb/testsuite/gdb.trace/packetlen.exp b/gdb/testsuite/gdb.trace/packetlen.exp
index e9e42b8..81f3d7d 100644
--- a/gdb/testsuite/gdb.trace/packetlen.exp
+++ b/gdb/testsuite/gdb.trace/packetlen.exp
@@ -17,17 +17,11 @@
 
 load_lib "trace-support.exp"
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 gdb_exit
 gdb_start
 
-set testfile "actions"
-set srcfile ${testfile}.c
-set binfile $objdir/$subdir/packetlen
+standard_testfile actions.c
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested packetlen.exp
@@ -39,10 +33,8 @@ gdb_test "tfind none"  ".*" ""
 runto_main
 gdb_reinitialize_dir $srcdir/$subdir
 
-# We generously give ourselves one "pass" if we successfully
-# detect that this test cannot be run on this target!
 if { ![gdb_target_supports_trace] } then {
-    pass "Current target does not support trace"
+    unsupported "Current target does not support trace"
     return 1;
 
 }
diff --git a/gdb/testsuite/gdb.trace/passc-dyn.exp b/gdb/testsuite/gdb.trace/passc-dyn.exp
index b8d3a14..0e6465b 100644
--- a/gdb/testsuite/gdb.trace/passc-dyn.exp
+++ b/gdb/testsuite/gdb.trace/passc-dyn.exp
@@ -17,16 +17,10 @@
 
 load_lib "trace-support.exp";
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 gdb_exit
 gdb_start
-set testfile "actions"
-set srcfile ${testfile}.c
-set binfile $objdir/$subdir/passc-dyn
+standard_testfile actions.c
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested passc-dyn.exp
@@ -38,10 +32,8 @@ gdb_test "tfind none"  ".*" ""
 runto_main
 gdb_reinitialize_dir $srcdir/$subdir
 
-# We generously give ourselves one "pass" if we successfully 
-# detect that this test cannot be run on this target!
 if { ![gdb_target_supports_trace] } then {
-    pass "Current target does not support trace"
+    unsupported "Current target does not support trace"
     return 1;
 
 }
diff --git a/gdb/testsuite/gdb.trace/passcount.exp b/gdb/testsuite/gdb.trace/passcount.exp
index b91cdbd..42f767a 100644
--- a/gdb/testsuite/gdb.trace/passcount.exp
+++ b/gdb/testsuite/gdb.trace/passcount.exp
@@ -17,16 +17,10 @@
 
 load_lib "trace-support.exp";
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 gdb_exit
 gdb_start
-set testfile "actions"
-set srcfile ${testfile}.c
-set binfile $objdir/$subdir/passcount
+standard_testfile actions.c
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested passcount.exp
diff --git a/gdb/testsuite/gdb.trace/pending.exp b/gdb/testsuite/gdb.trace/pending.exp
index 3b246c9..750c031 100644
--- a/gdb/testsuite/gdb.trace/pending.exp
+++ b/gdb/testsuite/gdb.trace/pending.exp
@@ -14,24 +14,18 @@
 
 load_lib "trace-support.exp";
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 if {[skip_shlib_tests]} {
     return 0
 }
 
-set testfile "pending"
+standard_testfile
 set libfile1 "pendshr1"
 set libfile2 "pendshr2"
 set executable $testfile
-set srcfile $testfile.c
 set libsrc1  $srcdir/$subdir/$libfile1.c
 set libsrc2  $srcdir/$subdir/$libfile2.c
-set binfile $objdir/$subdir/$testfile
-set lib_sl1  $objdir/$subdir/$libfile1.sl
-set lib_sl2  $objdir/$subdir/$libfile2.sl
+set lib_sl1  [standard_output_file $libfile1.sl]
+set lib_sl2  [standard_output_file $libfile2.sl]
 
 set lib_opts [gdb_target_symbol_prefix_flags]
 
@@ -64,16 +58,12 @@ if ![gdb_target_supports_trace] {
 
 # Verify pending tracepoint is resolved to running to main.
 
-proc pending_tracepoint_resolved { trace_type } {
+proc pending_tracepoint_resolved { trace_type } { with_test_prefix "$trace_type resolved" {
     global srcdir
     global subdir
     global binfile
     global srcfile
     global lib_sl1
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "$trace_type" "resolved:"
 
     # Start with a fresh gdb.
     gdb_exit
@@ -105,22 +95,16 @@ proc pending_tracepoint_resolved { trace_type } {
 	"Num     Type\[ \]+Disp Enb Address\[ \]+What.*
 \[0-9\]+\[\t \]+\(fast |\)tracepoint\[ \]+keep y.*pendfunc.*" \
 	"single tracepoint info"
-
-    set pf_prefix $old_pf_prefix
-}
+}}
 
 # Verify pending tracepoint is resolved and works as expected.
 
-proc pending_tracepoint_works { trace_type } {
+proc pending_tracepoint_works { trace_type } { with_test_prefix "$trace_type works" {
     global executable
     global srcfile
     global lib_sl1
-    global pf_prefix
     global gdb_prompt
 
-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "$trace_type" "works:"
-
     # Restart with a fresh gdb.
     clean_restart $executable
 
@@ -146,46 +130,50 @@ proc pending_tracepoint_works { trace_type } {
     gdb_test "break marker" "Breakpoint.*at.* file .*$srcfile, line.*" \
 	"breakpoint on marker"
 
-    gdb_test_no_output "tstart" "start trace experiment"
-
-    gdb_test_multiple "continue" "continue to marker" {
-	-re "Continuing.\r\n\r\nBreakpoint.*marker.*at.*$srcfile.*$gdb_prompt $" {
-	    pass "continue to marker"
+    set test "start trace experiment"
+    gdb_test_multiple "tstart" $test {
+	-re "^tstart\r\n$gdb_prompt $" {
+	    pass $test
 	}
-	-re ".*$gdb_prompt $" {
-	    kfail "gdb/13392" "continue to marker"
-	    set pf_prefix $old_pf_prefix
-	    return
+	-re "Target returns error code .* too far .*$gdb_prompt $" {
+	    if [string equal $trace_type "ftrace"] {
+		# The target was unable to install the fast tracepoint
+		# (e.g., jump pad too far from tracepoint).
+		pass "$test (too far)"
+		# Skip the rest of the tests.
+		return
+	    } else {
+		fail $test
+	    }
 	}
+
     }
 
+    gdb_test "continue" "Continuing.\r\n\r\nBreakpoint.*marker.*at.*$srcfile.*" \
+	"continue to marker"
+
     gdb_test "tstop" "\[\r\n\]+" "stop trace experiment"
 
     gdb_test "tfind start" "#0 .*" "tfind test frame 0"
     gdb_test "tfind" "Found trace frame 1, tracepoint 1.*" "tfind test frame 1"
     gdb_test "tfind" "Found trace frame 2, tracepoint 1.*" "tfind test frame 2"
     gdb_test "tfind" "Target failed to find requested trace frame..*" "tfind test frame"
-
-    set pf_prefix $old_pf_prefix
-}
+}}
 
 # Verify pending tracepoint is resolved during trace.
 
-proc pending_tracepoint_resolved_during_trace { trace_type } {
+proc pending_tracepoint_resolved_during_trace { trace_type } \
+{ with_test_prefix "$trace_type resolved_in_trace" \
+{
     global executable
     global srcfile
     global gdb_prompt
     global lib_sl1
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "$trace_type" "resolved_in_trace:"
 
     # Start with a fresh gdb.
     clean_restart $executable
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }
 
@@ -209,14 +197,22 @@ proc pending_tracepoint_resolved_during_trace { trace_type } {
     gdb_test "continue" "Continuing.\r\n\r\nBreakpoint.*marker.*at.*pending.c.*" \
 	"continue to marker 1"
 
-    gdb_test_multiple "continue" "continue to marker 2" {
-	-re "Continuing.\r\n\r\nBreakpoint.*marker.*at.*$srcfile.*$gdb_prompt $" {
-	    pass "continue to marker 2"
+    set test "continue to marker 2"
+    gdb_test_multiple "continue" $test {
+	-re "Target returns error code .* too far .*$gdb_prompt $" {
+	    if [string equal $trace_type "ftrace"] {
+		# Expected if the target was unable to install the
+		# fast tracepoint (e.g., jump pad too far from
+		# tracepoint).
+		pass "$test (too far)"
+		# Skip the rest of the tests.
+		return
+	    } else {
+		fail $test
+	    }
 	}
-	-re ".*$gdb_prompt $" {
-	    kfail "gdb/13392" "continue to marker 2"
-	    set pf_prefix $old_pf_prefix
-	    return
+	-re "Continuing.\r\n\r\nBreakpoint.*marker.*at.*$srcfile.*$gdb_prompt $" {
+	    pass $test
 	}
     }
 
@@ -230,28 +226,23 @@ proc pending_tracepoint_resolved_during_trace { trace_type } {
 
     gdb_test "tfind start" "#0 .*" "tfind test frame 0"
     gdb_test "tfind" "Target failed to find requested trace frame..*" "tfind test frame"
-
-    set pf_prefix $old_pf_prefix
-}
+}}
 
 # Verify pending tracepoint is resolved and installed during trace.
 
-proc pending_tracepoint_installed_during_trace { trace_type } {
+proc pending_tracepoint_installed_during_trace { trace_type } \
+{ with_test_prefix "$trace_type installed_in_trace" \
+{
     global executable
     global srcfile
     global lib_sl1
     global gdb_prompt
-    global pf_prefix
     global hex
 
-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "$trace_type" "installed_in_trace:"
-
     # Start with a fresh gdb.
     clean_restart $executable
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }
 
@@ -279,15 +270,23 @@ proc pending_tracepoint_installed_during_trace { trace_type } {
 \[0-9\]+\[\t \]+\(fast |\)tracepoint\[ \t\]+keep y.*PENDING.*set_point2.*" \
 	"single pending tracepoint on set_point2"
 
-    gdb_test_multiple "continue" "continue to marker 2" {
-	-re "Continuing.\r\n\r\nBreakpoint.*marker.*at.*$srcfile.*$gdb_prompt $" {
-	    pass "continue to marker 2"
-	}
-	-re ".*$gdb_prompt $" {
-	    kfail "gdb/13392" "continue to marker 2"
-	    set pf_prefix $old_pf_prefix
-	    return
+    set test "continue to marker 2"
+    gdb_test_multiple "continue" $test {
+	-re "Target returns error code .* too far .*$gdb_prompt $" {
+	    if [string equal $trace_type "ftrace"] {
+		# Expected if the target was unable to install the
+		# fast tracepoint (e.g., jump pad too far from
+		# tracepoint).
+		pass "$test (too far)"
+		# Skip the rest of the tests.
+		return
+	    } else {
+		fail $test
+	    }
 	}
+	-re "Continuing.\r\n\r\nBreakpoint.*marker.*at.*$srcfile.*$gdb_prompt $" {
+           pass $test
+       }
     }
 
     gdb_test "tstop" "\[\r\n\]+" "stop trace experiment"
@@ -300,28 +299,23 @@ proc pending_tracepoint_installed_during_trace { trace_type } {
 
     gdb_test "tfind start" "#0  $hex in pendfunc2 .*" "tfind test frame 0"
     gdb_test "tfind" "Target failed to find requested trace frame..*" "tfind test frame"
-
-    set pf_prefix $old_pf_prefix
-}
+}}
 
 
 # Verify pending tracepoint will no longer work if we disconnect during tracing.
 
-proc pending_tracepoint_disconnect_during_trace { trace_type } {
+proc pending_tracepoint_disconnect_during_trace { trace_type } \
+{ with_test_prefix "$trace_type disconn" \
+{
     global executable
     global srcfile
     global lib_sl1
-    global pf_prefix
     global gdb_prompt
 
-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "$trace_type" "disconn:"
-
     # Start with a fresh gdb.
     clean_restart $executable
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }
 
@@ -353,28 +347,23 @@ proc pending_tracepoint_disconnect_during_trace { trace_type } {
 	   }
        }
     }
-
-    set pf_prefix $old_pf_prefix
-}
+}}
 
 
 # Verify disconnect after pending tracepoint has been resolved.
 
-proc pending_tracepoint_disconnect_after_resolved { trace_type } {
+proc pending_tracepoint_disconnect_after_resolved { trace_type } \
+{ with_test_prefix "$trace_type disconn_resolved" \
+{
     global executable
     global srcfile
     global lib_sl1
     global gdb_prompt
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "$trace_type" "disconn_resolved:"
 
     # Start with a fresh gdb.
     clean_restart $executable
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }
 
@@ -411,27 +400,22 @@ proc pending_tracepoint_disconnect_after_resolved { trace_type } {
 	    pass "$test"
 	}
     }
-
-    set pf_prefix $old_pf_prefix
-}
+}}
 
 # Verify action works properly in resolved tracepoint.
 
-proc pending_tracepoint_with_action_resolved { trace_type } {
+proc pending_tracepoint_with_action_resolved { trace_type } \
+{ with_test_prefix "$trace_type action_resolved" \
+{
     global executable
     global srcfile
     global lib_sl1
     global gdb_prompt
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "$trace_type" "action_resolved:"
 
     # Start with a fresh gdb.
     clean_restart $executable
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }
 
@@ -465,15 +449,24 @@ proc pending_tracepoint_with_action_resolved { trace_type } {
     gdb_test "continue" "Continuing.\r\n\r\nBreakpoint.*marker.*at.*pending.c.*" \
 	"continue to marker 1"
 
-    gdb_test_multiple "continue" "continue to marker 2" {
+    set test "continue to marker 2"
+    gdb_test_multiple "continue" $test {
+	    -re "Target returns error code .* too far .*$gdb_prompt $" {
+            if [string equal $trace_type "ftrace"] {
+		# Expected if the target was unable to install the
+		# fast tracepoint (e.g., jump pad too far from
+		# tracepoint).
+		pass "$test (too far)"
+		# Skip the rest of the tests.
+		return
+            } else {
+		fail $test
+            }
+	}
 	-re "Continuing.\r\n\r\nBreakpoint.*marker.*at.*$srcfile.*$gdb_prompt $" {
 	    pass "continue to marker 2"
 	}
-	-re ".*$gdb_prompt $" {
-	    kfail "gdb/13392" "continue to marker 2"
-	    set pf_prefix $old_pf_prefix
-	    return
-	}
+
     }
 
     gdb_test "tstop" "\[\r\n\]+" "stop trace experiment"
@@ -487,9 +480,7 @@ proc pending_tracepoint_with_action_resolved { trace_type } {
     gdb_test "tfind start" "#0 .*" "tfind test frame 0"
     gdb_test "tdump" "Data collected at tracepoint .*, trace frame \[0-9\]:.*\\$${pcreg} = .*"
     gdb_test "tfind" "Target failed to find requested trace frame..*" "tfind test frame"
-
-    set pf_prefix $old_pf_prefix
-}
+}}
 
 pending_tracepoint_resolved "trace"
 
@@ -506,7 +497,7 @@ pending_tracepoint_with_action_resolved "trace"
 pending_tracepoint_installed_during_trace "trace"
 
 # Re-compile test case with IPA.
-set libipa $objdir/../gdbserver/libinproctrace.so
+set libipa [get_in_proc_agent]
 gdb_load_shlibs $libipa
 
 lappend exec_opts "shlib=$libipa"
diff --git a/gdb/testsuite/gdb.trace/report.exp b/gdb/testsuite/gdb.trace/report.exp
index 2d9d785..7153f07 100644
--- a/gdb/testsuite/gdb.trace/report.exp
+++ b/gdb/testsuite/gdb.trace/report.exp
@@ -17,17 +17,11 @@
 
 load_lib "trace-support.exp";
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 gdb_exit
 gdb_start
 
-set testfile "actions"
-set srcfile ${testfile}.c
-set binfile $objdir/$subdir/report
+standard_testfile actions.c
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested report.exp
@@ -39,10 +33,8 @@ gdb_test "tfind none"  ".*" ""
 runto_main
 gdb_reinitialize_dir $srcdir/$subdir
 
-# We generously give ourselves one "pass" if we successfully 
-# detect that this test cannot be run on this target!
 if { ![gdb_target_supports_trace] } then {
-    pass "Current target does not support trace"
+    unsupported "Current target does not support trace"
     return 1;
 
 }
diff --git a/gdb/testsuite/gdb.trace/save-trace.exp b/gdb/testsuite/gdb.trace/save-trace.exp
index d0db3a6..2a9061a 100644
--- a/gdb/testsuite/gdb.trace/save-trace.exp
+++ b/gdb/testsuite/gdb.trace/save-trace.exp
@@ -17,17 +17,11 @@
 
 load_lib "trace-support.exp";
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 gdb_exit
 gdb_start
 
-set testfile "actions"
-set srcfile ${testfile}.c
-set binfile $objdir/$subdir/save-trace
+standard_testfile actions.c
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested save-trace.exp
@@ -140,20 +134,21 @@ remote_file host delete savetrace.tr
 
 # 10.3 repeat with a path to the file
 
-set escapedfilename [string_to_regexp $objdir/savetrace.tr]
-remote_file host delete $objdir/savetrace.tr
-gdb_test "save-tracepoints $objdir/savetrace.tr" \
+set trace_file_name [standard_output_file savetrace.tr]
+set escapedfilename [string_to_regexp $trace_file_name]
+remote_file host delete $trace_file_name
+gdb_test "save-tracepoints $trace_file_name" \
 	"Saved to file '${escapedfilename}'." \
 	"10.3: save tracepoint definitions, full path"
 
 gdb_delete_tracepoints
 gdb_test_no_output "set default-collect" "10.3: clear default-collect"
 gdb_test "info tracepoints" "No tracepoints." "10.3: delete tracepoints"
-gdb_test "source $objdir/savetrace.tr" \
+gdb_test "source $trace_file_name" \
 	"Tracepoint \[0-9\]+ at .*" \
 	"10.4: read saved tracepoints, full path"
 gdb_verify_tracepoints "10.3: verify recovered tracepoints, full path";
-remote_file host delete $objdir/savetrace.tr
+remote_file host delete $trace_file_name
 
 # 10.5 invalid filename
 #      [deferred -- not sure what a good invalid filename would be]
diff --git a/gdb/testsuite/gdb.trace/stap-trace.c b/gdb/testsuite/gdb.trace/stap-trace.c
new file mode 100644
index 0000000..7c638db
--- /dev/null
+++ b/gdb/testsuite/gdb.trace/stap-trace.c
@@ -0,0 +1,71 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#if USE_PROBES
+
+#define _SDT_HAS_SEMAPHORES
+__extension__ unsigned short test_user_semaphore __attribute__ ((unused)) __attribute__ ((section (".probes")));
+#define TEST test_user_semaphore
+
+__extension__ unsigned short test_two_semaphore __attribute__ ((unused)) __attribute__ ((section (".probes")));
+#define TEST2 test_two_semaphore
+
+#else
+
+#define TEST 1
+#define TEST2 1
+
+#endif /* USE_PROBES */
+
+#include <sys/sdt.h>
+
+/* We only support SystemTap and only the v3 form.  */
+#if _SDT_NOTE_TYPE != 3
+#error "not using SystemTap v3 probes"
+#endif
+
+void
+m1 (int x)
+{
+  if (TEST2)
+    STAP_PROBE1 (test, two, x);
+}
+
+int
+f (int x)
+{
+  if (TEST)
+    STAP_PROBE1(test, user, x);
+  return x+5;
+}
+
+void
+nothing (void)
+{
+  int a = 1 + 1;
+  return;
+}
+
+int
+main()
+{
+  f (f (23));
+  m1 (46);
+  nothing (); /* end-here */
+
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.trace/stap-trace.exp b/gdb/testsuite/gdb.trace/stap-trace.exp
new file mode 100644
index 0000000..39db64b
--- /dev/null
+++ b/gdb/testsuite/gdb.trace/stap-trace.exp
@@ -0,0 +1,134 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib "trace-support.exp"
+
+standard_testfile
+set executable ""
+
+set ws "\[\r\n\t \]+"
+set cr "\[\r\n\]+"
+
+# Only x86 and x86_64 targets are supported for now.
+
+if { ![istarget "x86_64-*"] && ![istarget "i?86-*"] } {
+    continue
+}
+
+proc compile_stap_bin {exec_name {arg ""}} {
+    global srcfile
+    global srcdir
+    global subdir
+    global executable
+
+    if { $arg != "" } {
+	set arg "additional_flags=$arg"
+    }
+
+    set executable ${exec_name}
+
+    if { [gdb_compile "$srcdir/$subdir/$srcfile" \
+	      [standard_output_file $exec_name] \
+	      executable [concat $arg debug nowarnings]] != "" } {
+	untested "Could not compile ${srcfile}"
+	return 0
+    }
+
+    return 1
+}
+
+proc prepare_for_trace_test {} {
+    global executable
+
+    clean_restart $executable
+
+    if { ![runto_main] } {
+	perror "Could not run to `main'."
+	continue
+    }
+
+    gdb_breakpoint [gdb_get_line_number "end-here"]
+}
+
+proc run_trace_experiment { test_probe msg } {
+    global gdb_prompt
+
+    set test "collect $msg: start trace experiment"
+    gdb_test_multiple "tstart" "$test" {
+	-re "^tstart\r\n$gdb_prompt $" {
+	    pass "$test"
+	}
+    }
+
+    gdb_test "continue" \
+	    "Continuing.*Breakpoint \[0-9\]+.*" \
+	    "collect $msg: run trace experiment"
+    gdb_test "tstop" \
+	    "\[\r\n\]+" \
+	    "collect $msg: stop trace experiment"
+    gdb_test "tfind start" \
+	    "#0 .*" \
+	    "collect $msg: tfind test frame"
+}
+
+proc gdb_collect_probe_arg { msg probe val_arg0 } {
+    global gdb_prompt
+    global cr
+
+    prepare_for_trace_test
+
+    gdb_test "trace $probe" \
+	    "Tracepoint \[0-9\]+ at .*" \
+	    "collect $msg: set tracepoint"
+    gdb_trace_setactions "collect $msg: define actions" \
+	    "" \
+	    "collect \$_probe_arg0" "^$"
+
+    # Begin the test.
+    run_trace_experiment $msg $probe
+
+    gdb_test "print \$_probe_arg0" \
+	    "\\$\[0-9\]+ = $val_arg0$cr" \
+	    "collect $msg: collected probe arg0"
+}
+
+if {![compile_stap_bin "stap-probe-nosem"]} {
+    # An appropriate failure message has already been output
+    return -1
+}
+
+clean_restart $executable
+if { ![runto_main] } {
+    perror "Could not run to `main'."
+    continue
+}
+
+if { ![gdb_target_supports_trace] } {
+    # Test cannot run on this target.
+    return 1;
+}
+
+gdb_collect_probe_arg "probe args without semaphore" "-probe-stap user" "23"
+gdb_exit
+
+if {![compile_stap_bin "stap-probe-sem" "-DUSE_PROBES"]} {
+    # An appropriate failure message has already been output
+    return -1
+}
+
+gdb_collect_probe_arg "probe args with semaphore" "-probe-stap two" "46"
+
+# Finished!
+gdb_test "tfind none" ".*" ""
diff --git a/gdb/testsuite/gdb.trace/status-stop.exp b/gdb/testsuite/gdb.trace/status-stop.exp
index 9c7e915..61afdd5 100644
--- a/gdb/testsuite/gdb.trace/status-stop.exp
+++ b/gdb/testsuite/gdb.trace/status-stop.exp
@@ -14,10 +14,8 @@
 
 load_lib "trace-support.exp";
 
-set testfile "status-stop"
+standard_testfile
 set executable $testfile
-set srcfile ${testfile}.c
-set binfile $objdir/$subdir/$testfile
 set expfile $testfile.exp
 
 
@@ -39,19 +37,14 @@ if ![gdb_target_supports_trace] {
 
 # Verify that the sequence of commands "tstart tstop tstart" works well.
 
-proc test_tstart_tstop_tstart { } {
+proc test_tstart_tstop_tstart { } { with_test_prefix "tstart_tstop_tstart" {
     global executable
-    global pf_prefix
     global hex
 
-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix tstart_tstop_tstart:"
-
     # Start with a fresh gdb.
     clean_restart ${executable}
     if ![runto_main] {
         fail "Can't run to main"
-        set pf_prefix $old_pf_prefix
         return -1
     }
 
@@ -64,25 +57,18 @@ proc test_tstart_tstop_tstart { } {
     gdb_test_no_output "tstop"
 
     gdb_test_no_output "tstart"
-
-    set pf_prefix $old_pf_prefix
-}
+}}
 
 # Verify the sequence of commands "tstart tstart" works well.
 
-proc test_tstart_tstart { } {
+proc test_tstart_tstart { } { with_test_prefix "tstart_tstart" {
     global executable
-    global pf_prefix
     global hex
 
-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix tstart_tstart:"
-
     # Start with a fresh gdb.
     clean_restart ${executable}
     if ![runto_main] {
         fail "Can't run to main"
-        set pf_prefix $old_pf_prefix
         return -1
     }
 
@@ -90,25 +76,18 @@ proc test_tstart_tstart { } {
     gdb_test_no_output "tstart"
 
     gdb_test "tstart" "" "tstart again" "A trace is running already.  Start a new run\\? \\(y or n\\) " "y"
-
-    set pf_prefix $old_pf_prefix
-}
+}}
 
 # Verify that trace stops clearly when trace buffer is full.
 
-proc test_buffer_full_tstart { } {
+proc test_buffer_full_tstart { } { with_test_prefix "buffer_full_tstart" {
     global executable
-    global pf_prefix
     global hex
 
-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix buffer_full_tstart:"
-
     # Start with a fresh gdb.
     clean_restart ${executable}
     if ![runto_main] {
         fail "Can't run to main"
-        set pf_prefix $old_pf_prefix
         return -1
     }
 
@@ -123,12 +102,10 @@ proc test_buffer_full_tstart { } {
 
     gdb_test "tstatus" ".*buffer was full.*"
     gdb_test_no_output "tstart"
-
-    set old_pf_prefix $pf_prefix
-}
+}}
 
 test_tstart_tstop_tstart
 
 test_tstart_tstart
 
-test_buffer_full_tstart
\ No newline at end of file
+test_buffer_full_tstart
diff --git a/gdb/testsuite/gdb.trace/strace.c b/gdb/testsuite/gdb.trace/strace.c
new file mode 100644
index 0000000..f83c0de
--- /dev/null
+++ b/gdb/testsuite/gdb.trace/strace.c
@@ -0,0 +1,37 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2011-2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <ust/marker.h>
+
+static void
+end (void)
+{}
+
+int
+main (void)
+{
+  /* Some code to make sure that breakpoints on `main' and `ust/bar' marker
+     are set at different addresses.  */
+  int a = 0;
+  int b = a;
+
+  trace_mark(ust, bar, "str %s", "FOOBAZ");
+  trace_mark(ust, bar2, "number1 %d number2 %d", 53, 9800);
+
+  end ();
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.trace/strace.exp b/gdb/testsuite/gdb.trace/strace.exp
new file mode 100644
index 0000000..d9e90b6
--- /dev/null
+++ b/gdb/testsuite/gdb.trace/strace.exp
@@ -0,0 +1,270 @@
+# Copyright 2011-2012 Free Software Foundation, Inc.
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib "trace-support.exp";
+
+if {[skip_shlib_tests]} {
+    return 0
+}
+
+standard_testfile
+set executable $testfile
+
+set libipa [get_in_proc_agent]
+
+set lib_opts debug
+
+if [get_compiler_info] {
+    return -1
+}
+
+set additional_flags [list quiet debug shlib=$libipa shlib_load \
+			  "additional_flags=-lust -lurcu-bp" ]
+
+if { [gdb_compile $srcdir/$subdir/$srcfile $binfile executable $additional_flags] != ""} {
+    untested "UST library or headers are not installed"
+    return -1
+}
+
+proc strace_info_marker { } { with_test_prefix "info_marker" {
+    global executable
+    global gdb_prompt
+
+    # Restart with a fresh gdb.
+    clean_restart $executable
+    if ![runto_main] {
+	fail "Can't run to main"
+	return -1
+    }
+
+    # List the markers in program.  They should be disabled.
+    gdb_test "info static-tracepoint-markers" \
+	".*ust/bar\[\t \]+n\[\t \]+.*ust/bar2\[\t \]+n\[\t \]+.*"
+
+    # List all the thread.  It is expected to get three threads without
+    # any errors.
+    gdb_test_multiple "info threads 3 2 1" "info threads" {
+	-re "3\[ \t\]+Thread .*2\[ \t\]+Thread .*1\[ \t\]+Thread .*${gdb_prompt} $" {
+	    pass "info threads"
+	}
+    }
+}}
+
+proc strace_probe_marker { } { with_test_prefix "probe_marker" {
+    global executable
+    global expect_out
+    global gdb_prompt
+    global hex
+
+    # Restart with a fresh gdb.
+    clean_restart $executable
+    if ![runto_main] {
+	fail "Can't run to main"
+	return -1
+    }
+
+    gdb_test "strace -m ust/bar" "Static tracepoint \[0-9\]+ at ${hex}: file.*"
+    gdb_test "strace -m ust/bar2" "Static tracepoint \[0-9\]+ at ${hex}: file.*"
+    # Two trace markers should be enabled.
+    gdb_test "info static-tracepoint-markers" \
+	"ust/bar\[\t \]+y\[\t \]+$hex .*ust/bar2\[\t \]+y\[\t \]+$hex.*"
+
+    gdb_test "break end" "Breakpoint \[0-9\]+ at.*"
+
+    gdb_test_no_output "tstart"
+    gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" "continue to end"
+    gdb_test_no_output "tstop"
+
+    gdb_test "tfind" "Found trace frame 0, tracepoint .*" "tfind frame 0"
+    gdb_test "tfind" "Found trace frame 1, tracepoint .*" "tfind frame 1"
+    gdb_test "tfind" "Target failed to find requested trace frame\\..*"
+}}
+
+proc strace_trace_on_same_addr { type } {
+with_test_prefix "trace_same_addr $type" {
+    global executable
+    global expect_out
+    global gdb_prompt
+    global hex
+
+    # Restart with a fresh gdb.
+    clean_restart $executable
+    if ![runto_main] {
+	fail "Can't run to main"
+	return -1
+    }
+
+    set marker_bar_addr ""
+    set marker_bar2_addr ""
+
+    # List the markers in program.  They should be disabled.
+    gdb_test_multiple "info static-tracepoint-markers" "info static-tracepoint-markers 1" {
+	-re ".*ust/bar\[\t \]+n.*${gdb_prompt} $" {
+	    set ignore ""
+
+	    regexp "ust/bar\[\t \]+n\[\t \]+($hex) .*ust/bar2\[\t \]+n\[\t \]+($hex) " \
+		"$expect_out(0,string)" ignore marker_bar_addr marker_bar2_addr
+
+	    pass "info static-tracepoint-markers 1"
+	}
+	-re ".*${gdb_prompt} $" {
+	    fail "info static-tracepoint-markers 1"
+	}
+    }
+
+    gdb_test "strace -m ust/bar" "Static tracepoint \[0-9\]+ at ${hex}: file.*"
+    gdb_test "strace -m ust/bar2" "Static tracepoint \[0-9\]+ at ${hex}: file.*"
+    # Two trace markers should be enabled.
+    gdb_test "info static-tracepoint-markers" \
+	"ust/bar\[\t \]+y\[\t \]+$hex .*ust/bar2\[\t \]+y\[\t \]+$hex.*" \
+	"info static-tracepoint-markers 2"
+
+    # Set breapoints or tracepoints.
+    set test "${type} on marker bar"
+    gdb_test_multiple "${type} *${marker_bar_addr}" $test {
+	-re "\(Fast trace|Trace|Break\)point \[0-9\]+ at ${hex}: file.*\r\n$gdb_prompt $" {
+	    pass $test
+	}
+	-re ".*\r\n$gdb_prompt $" {
+	    if [string equal $type "ftrace"] {
+		# The instruction may be not long enough to set a fast
+		# tracepoint.  Skip the rest of this test.
+		return -1;
+	    } else {
+		fail $test
+	    }
+	}
+    }
+    set test "${type} on marker bar2"
+    gdb_test_multiple "${type} *${marker_bar2_addr}" $test {
+	-re "\(Fast trace|Trace|Break\)point \[0-9\]+ at ${hex}: file.*" {
+	    pass $test
+	}
+	-re ".*\r\n$gdb_prompt $" {
+	    if [string equal $type "ftrace"] {
+		# The instruction may be not long enough to set a fast
+		# tracepoint.  Skip the rest of this test.
+		return -1;
+	    } else {
+		fail $test
+	    }
+	}
+    }
+
+    gdb_test "break end" "Breakpoint \[0-9\]+ at.*"
+
+    if [string equal $type "break"] {
+	gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" \
+	    "continue to bar"
+	gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" \
+	    "continue to bar2"
+	gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" \
+	    "continue to end"
+    } else {
+
+	gdb_test_no_output "tstart"
+	gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" \
+	    "continue to end"
+	gdb_test_no_output "tstop"
+
+	gdb_test "tfind" "Found trace frame 0, tracepoint .*" "tfind frame 0"
+	gdb_test "tfind" "Found trace frame 1, tracepoint .*" "tfind frame 1"
+	gdb_test "tfind" "Found trace frame 2, tracepoint .*" "tfind frame 2"
+	gdb_test "tfind" "Found trace frame 3, tracepoint .*" "tfind frame 3"
+	gdb_test "tfind" "Target failed to find requested trace frame\\..*"
+    }
+}}
+
+proc strace_trace_on_diff_addr { } { with_test_prefix "trace_diff_addr" {
+
+    global executable
+    global expect_out
+    global gdb_prompt
+    global hex
+
+    # Restart with a fresh gdb.
+    clean_restart $executable
+    if ![runto_main] {
+	fail "Can't run to main"
+	return -1
+    }
+
+    set marker_bar_addr ""
+    set marker_bar2_addr ""
+
+    # List the markers in program.  They should be disabled.
+    gdb_test_multiple "info static-tracepoint-markers" "info static-tracepoint-markers 1" {
+	-re ".*ust/bar\[\t \]+n.*${gdb_prompt} $" {
+	    set ignore ""
+
+	    regexp "ust/bar\[\t \]+n\[\t \]+($hex) .*ust/bar2\[\t \]+n\[\t \]+($hex) " \
+		"$expect_out(0,string)" ignore marker_bar_addr marker_bar2_addr
+
+	    pass "info static-tracepoint-markers 1"
+	}
+	-re ".*${gdb_prompt} $" {
+	    fail "info static-tracepoint-markers 1"
+	}
+    }
+
+    gdb_test "strace -m ust/bar" "Static tracepoint \[0-9\]+ at ${hex}: file.*"
+
+    gdb_test "info static-tracepoint-markers" \
+	"ust/bar\[\t \]+y\[\t \]+$hex .*ust/bar2\[\t \]+n\[\t \]+$hex.*" \
+	"info static-tracepoint-markers 2"
+
+
+    # Set common tracepoint.
+    gdb_test "trace *${marker_bar2_addr}" \
+	"Tracepoint \[0-9\]+ at ${hex}: file.*"
+
+    gdb_test "break end" "Breakpoint \[0-9\]+ at.*"
+
+    gdb_test_no_output "tstart"
+    gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" "continue to end"
+    gdb_test_no_output "tstop"
+
+    gdb_test "tfind" "Found trace frame 0, tracepoint .*" "tfind frame 0"
+    gdb_test "tfind" "Found trace frame 1, tracepoint .*" "tfind frame 1"
+    gdb_test "tfind" "Target failed to find requested trace frame\\..*"
+}}
+
+clean_restart $executable
+
+if ![runto_main] {
+    fail "Can't run to main to check for trace support"
+    return -1
+}
+
+# Run it on native x86/x86_64 linux.
+if { ![is_remote target]
+     && ([istarget "x86_64-*-linux*"] || [istarget "i\[34567\]86-*-linux*"]) } {
+    strace_info_marker
+    return
+}
+
+if { ![gdb_target_supports_trace] } then {
+    unsupported "Current target does not support trace"
+    return -1;
+}
+
+gdb_load_shlibs $libipa
+
+strace_info_marker
+strace_probe_marker
+
+strace_trace_on_same_addr "trace"
+strace_trace_on_same_addr "ftrace"
+strace_trace_on_same_addr "break"
+strace_trace_on_diff_addr
diff --git a/gdb/testsuite/gdb.trace/tfile.exp b/gdb/testsuite/gdb.trace/tfile.exp
index 7e996a4..a2c5c1d 100644
--- a/gdb/testsuite/gdb.trace/tfile.exp
+++ b/gdb/testsuite/gdb.trace/tfile.exp
@@ -27,16 +27,10 @@ if [target_info exists gdb,nofileio] {
     continue
 }
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 gdb_exit
 gdb_start
-set testfile "tfile"
-set srcfile ${testfile}.c
-set binfile $objdir/$subdir/$testfile
+standard_testfile
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested ${testfile}.exp
diff --git a/gdb/testsuite/gdb.trace/tfind.exp b/gdb/testsuite/gdb.trace/tfind.exp
index 8e9d066..cce742e 100644
--- a/gdb/testsuite/gdb.trace/tfind.exp
+++ b/gdb/testsuite/gdb.trace/tfind.exp
@@ -17,17 +17,11 @@
 
 load_lib "trace-support.exp";
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 gdb_exit
 gdb_start
 
-set testfile "actions"
-set srcfile ${testfile}.c
-set binfile $objdir/$subdir/tfind
+standard_testfile actions.c
 
 if { [gdb_compile "$srcdir/$subdir/$srcfile" "$binfile" \
 	  executable {debug nowarnings}] != "" } {
@@ -40,10 +34,8 @@ gdb_test "tfind none"  ".*" ""
 runto_main
 gdb_reinitialize_dir $srcdir/$subdir
 
-# We generously give ourselves one "pass" if we successfully 
-# detect that this test cannot be run on this target!
 if { ![gdb_target_supports_trace] } then {
-    pass "Current target does not support trace"
+    unsupported "Current target does not support trace"
     return 1;
 
 }
diff --git a/gdb/testsuite/gdb.trace/trace-break.exp b/gdb/testsuite/gdb.trace/trace-break.exp
index 1c372d4..d75e2bc 100644
--- a/gdb/testsuite/gdb.trace/trace-break.exp
+++ b/gdb/testsuite/gdb.trace/trace-break.exp
@@ -14,10 +14,8 @@
 
 load_lib "trace-support.exp";
 
-set testfile "trace-break"
+standard_testfile
 set executable $testfile
-set srcfile $testfile.c
-set binfile $objdir/$subdir/$testfile
 set expfile $testfile.exp
 
 # Some targets have leading underscores on assembly symbols.
@@ -55,19 +53,16 @@ if [is_amd64_regs_target] {
 
 # Set breakpoint and tracepoint at the same address.
 
-proc break_trace_same_addr_1 { trace_type option } {
+proc break_trace_same_addr_1 { trace_type option } \
+{ with_test_prefix "1 $trace_type $option" \
+{
     global executable
-    global pf_prefix
     global hex
 
-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix 1 $trace_type $option:"
-
     # Start with a fresh gdb.
     clean_restart ${executable}
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }
 
@@ -87,25 +82,20 @@ proc break_trace_same_addr_1 { trace_type option } {
 
     gdb_test "tfind" "Found trace frame 0, tracepoint .*" "tfind frame 0"
     gdb_test "tfind" "Target failed to find requested trace frame\\..*"
-
-    set pf_prefix $old_pf_prefix
-}
+}}
 
 # Set multiple tracepoints at the same address.
 
-proc break_trace_same_addr_2 { trace_type1 trace_type2 option } {
+proc break_trace_same_addr_2 { trace_type1 trace_type2 option } \
+{ with_test_prefix "2 $trace_type1 $trace_type2 $option" \
+{
     global executable
-    global pf_prefix
     global hex
 
-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix 2 $trace_type1 $trace_type2 $option:"
-
     # Start with a fresh gdb.
     clean_restart ${executable}
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }
 
@@ -129,26 +119,21 @@ proc break_trace_same_addr_2 { trace_type1 trace_type2 option } {
     gdb_test "tfind" "Found trace frame 0, tracepoint .*" "tfind frame 0"
     gdb_test "tfind" "Found trace frame 1, tracepoint .*" "tfind frame 1"
     gdb_test "tfind" "Target failed to find requested trace frame\\..*"
-
-    set pf_prefix $old_pf_prefix
-}
+}}
 
 # Set breakpoint and tracepoint at the same address.  Delete breakpoint, and verify
 # that tracepoint still works.
 
-proc break_trace_same_addr_3 { trace_type option } {
+proc break_trace_same_addr_3 { trace_type option } \
+{ with_test_prefix "3 $trace_type $option" \
+{
     global executable
-    global pf_prefix
     global hex
 
-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix 3 $trace_type $option:"
-
     # Start with a fresh gdb.
     clean_restart ${executable}
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }
 
@@ -169,26 +154,22 @@ proc break_trace_same_addr_3 { trace_type option } {
 
     gdb_test "tfind" "Found trace frame 0, tracepoint .*" "tfind frame 0"
     gdb_test "tfind" "Target failed to find requested trace frame\\..*"
-
-    set pf_prefix $old_pf_prefix
-}
+}}
 
 # Set breakpoint and tracepoint at the same address.  Delete tracepoint, and verify
 # that breakpoint still works.
 
-proc break_trace_same_addr_4 { trace_type option } {
+proc break_trace_same_addr_4 { trace_type option } \
+{ with_test_prefix "4 $trace_type $option" \
+{
     global executable
-    global pf_prefix
     global hex
 
-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix 4 $trace_type $option:"
 
     # Start with a fresh gdb.
     clean_restart ${executable}
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }
 
@@ -210,31 +191,26 @@ proc break_trace_same_addr_4 { trace_type option } {
     gdb_test "tstop" "Trace is not running.*"
 
     gdb_test "tfind" "Target failed to find requested trace frame\\..*"
-
-    set pf_prefix $old_pf_prefix
-}
+}}
 
 # Set two tracepoints TRACE1 and TRACE2 at two locations, and start tracing.
 # Then, set tracepoint TRACE3 at either of these two locations.
 # TRACE3_AT_FIRST_LOC is a boolean variable to decide insert TRACE3 at which
 # of two locations.  Verify  these tracepoints work as expected.
 
-proc break_trace_same_addr_5 { trace1 trace2 trace3 trace3_at_first_loc } {
+proc break_trace_same_addr_5 { trace1 trace2 trace3 trace3_at_first_loc } \
+{ with_test_prefix "5 $trace1 $trace2 ${trace3}@${trace3_at_first_loc}" \
+{
     global executable
-    global pf_prefix
     global hex
     global fpreg
     global spreg
     global pcreg
 
-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix 5 $trace1 $trace2 ${trace3}@${trace3_at_first_loc}:"
-
     # Start with a fresh gdb.
     clean_restart ${executable}
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }
 
@@ -289,29 +265,24 @@ proc break_trace_same_addr_5 { trace1 trace2 trace3 trace3_at_first_loc } {
     gdb_test "tdump" \
 	"Data collected at tracepoint .*, trace frame \[0-9\]:.*\\$${fpreg} = .*" \
 	"tdump 3"
-
-    set pf_prefix $old_pf_prefix
-}
+}}
 
 # Set two tracepoints at the same address, and enable/disable them.  Verify
 # tracepoints work as expect.
 
-proc break_trace_same_addr_6 { trace1 enable1 trace2 enable2 } {
+proc break_trace_same_addr_6 { trace1 enable1 trace2 enable2 } \
+{ with_test_prefix "6 $trace1 $enable1 $trace2 $enable2" \
+{
     global executable
-    global pf_prefix
     global hex
     global gdb_prompt
     global spreg
     global pcreg
 
-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix 6 $trace1 $enable1 $trace2 $enable2:"
-
     # Start with a fresh gdb.
     clean_restart ${executable}
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }
 
@@ -362,9 +333,7 @@ proc break_trace_same_addr_6 { trace1 enable1 trace2 enable2 } {
 	gdb_test "tfind tracepoint 5" "Target failed to find requested trace frame.*" \
 	    "tfind test frame of tracepoint 5"
     }
-
-    set pf_prefix $old_pf_prefix
-}
+}}
 
 
 foreach break_always_inserted { "on" "off" } {
@@ -381,7 +350,7 @@ foreach at_first_loc { "1" "0" } {
 break_trace_same_addr_6 "trace" "enable" "trace" "disable"
 break_trace_same_addr_6 "trace" "disable" "trace" "enable"
 
-set libipa $objdir/../gdbserver/libinproctrace.so
+set libipa [get_in_proc_agent]
 gdb_load_shlibs $libipa
 
 # Can't use prepare_for_testing, because that splits compiling into
@@ -401,7 +370,7 @@ if ![runto_main] {
 }
 
 gdb_reinitialize_dir $srcdir/$subdir
-if { [gdb_test "info sharedlibrary" ".*libinproctrace\.so.*" "IPA loaded"] != 0 } {
+if { [gdb_test "info sharedlibrary" ".*${libipa}.*" "IPA loaded"] != 0 } {
     untested "Could not find IPA lib loaded"
 } else {
     foreach break_always_inserted { "on" "off" } {
diff --git a/gdb/testsuite/gdb.trace/trace-mt.c b/gdb/testsuite/gdb.trace/trace-mt.c
new file mode 100644
index 0000000..90a5b54
--- /dev/null
+++ b/gdb/testsuite/gdb.trace/trace-mt.c
@@ -0,0 +1,63 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include <pthread.h>
+
+#ifdef SYMBOL_PREFIX
+#define SYMBOL(str)     SYMBOL_PREFIX #str
+#else
+#define SYMBOL(str)     #str
+#endif
+/* Called from asm.  */
+static void __attribute__((used))
+func (void)
+{}
+
+static void *
+thread_function(void *arg)
+{
+  /* `set_point1' is the label at which to set a fast tracepoint.  The
+     insn at the label must be large enough to fit a fast tracepoint
+     jump.  */
+  asm ("    .global " SYMBOL(set_point1) "\n"
+       SYMBOL(set_point1) ":\n"
+#if (defined __x86_64__ || defined __i386__)
+       "    call " SYMBOL(func) "\n"
+#endif
+       );
+}
+
+static void
+end (void)
+{}
+
+int
+main (int argc, char *argv[], char *envp[])
+{
+  pthread_t threads[2];
+  int i;
+
+  for (i = 0; i < 2; i++)
+    pthread_create (&threads[i], NULL, thread_function, NULL);
+
+  for (i = 0; i < 2; i++)
+    pthread_join (threads[i], NULL);
+
+  end ();
+
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.trace/trace-mt.exp b/gdb/testsuite/gdb.trace/trace-mt.exp
new file mode 100644
index 0000000..58990ac
--- /dev/null
+++ b/gdb/testsuite/gdb.trace/trace-mt.exp
@@ -0,0 +1,134 @@
+# Copyright 2012 Free Software Foundation, Inc.
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+load_lib "trace-support.exp";
+
+standard_testfile
+set executable $testfile
+set expfile $testfile.exp
+
+# Some targets have leading underscores on assembly symbols.
+set additional_flags [gdb_target_symbol_prefix_flags]
+
+if { [gdb_compile_pthreads "$srcdir/$subdir/$srcfile" $binfile \
+	  executable [list debug $additional_flags] ] != "" } {
+    untested "Couldn't compile test program"
+    return -1
+}
+
+clean_restart ${testfile}
+
+if ![runto_main] {
+    fail "Can't run to main to check for trace support"
+    return -1
+}
+
+if ![gdb_target_supports_trace] {
+    unsupported "target does not support trace"
+    return -1
+}
+
+proc step_over_tracepoint { trace_type } \
+{with_test_prefix "step over $trace_type" \
+{
+    global executable
+    global hex
+
+    # Start with a fresh gdb.
+    clean_restart ${executable}
+    # Make sure inferior is running in all-stop mode.
+    gdb_test_no_output "set non-stop 0"
+    if ![runto_main] {
+	fail "Can't run to main"
+	return -1
+    }
+
+    gdb_test "break set_point1" "Breakpoint \[0-9\] at $hex: file.*"
+    gdb_test "continue" "Continuing\\.\[ \r\n\]+.*Breakpoint.*" "continue to set_point1"
+
+    gdb_test "${trace_type} *\$pc" "\(Fast t|T\)racepoint \[0-9\] at $hex: file.*"
+    gdb_test_no_output "tstart"
+
+    gdb_test "stepi" ".*"
+    gdb_test_no_output "tstop"
+}}
+
+# Set breakpoint and tracepoint at the same address.
+
+proc break_trace_same_addr { trace_type option } \
+{with_test_prefix "$trace_type $option" \
+{
+    global executable
+    global hex
+
+    # Start with a fresh gdb.
+    clean_restart ${executable}
+    if ![runto_main] {
+	fail "Can't run to main"
+	return -1
+    }
+
+    gdb_test_no_output "set breakpoint always-inserted ${option}"
+
+    gdb_test "break end" "Breakpoint \[0-9\] at $hex: file.*"
+
+    gdb_test "break set_point1" "Breakpoint \[0-9\] at $hex: file.*"
+    gdb_test "${trace_type} set_point1" "\(Fast t|T\)racepoint \[0-9\] at $hex: file.*"
+
+    gdb_test_no_output "tstart"
+
+    gdb_test "continue" "Continuing\\.\[ \r\n\]+.*Breakpoint.*" "continue to set_point1 1"
+    gdb_test "continue" "Continuing\\.\[ \r\n\]+.*Breakpoint.*" "continue to set_point1 2"
+
+    gdb_test "continue" "Continuing\\.\[ \r\n\]+.*Breakpoint.*" "continue to end"
+    gdb_test_no_output "tstop"
+
+    gdb_test "tfind" "Found trace frame 0, tracepoint .*" "tfind frame 0"
+    gdb_test "tfind" "Found trace frame 1, tracepoint .*" "tfind frame 1"
+
+    gdb_test "tfind" "Target failed to find requested trace frame\\..*"
+}}
+
+foreach break_always_inserted { "on" "off" } {
+    break_trace_same_addr "trace" ${break_always_inserted}
+}
+
+step_over_tracepoint "trace"
+
+set libipa [get_in_proc_agent]
+gdb_load_shlibs $libipa
+
+# Compile test case again with IPA.
+if { [gdb_compile_pthreads "$srcdir/$subdir/$srcfile" $binfile \
+	  executable [list debug $additional_flags shlib=$libipa] ] != "" } {
+    untested "failed to compile ftrace tests"
+    return -1
+}
+clean_restart ${executable}
+
+if ![runto_main] {
+    fail "Can't run to main for ftrace tests"
+    return 0
+}
+
+gdb_reinitialize_dir $srcdir/$subdir
+if { [gdb_test "info sharedlibrary" ".*${libipa}.*" "IPA loaded"] != 0 } {
+    untested "Could not find IPA lib loaded"
+} else {
+    foreach break_always_inserted { "on" "off" } {
+	break_trace_same_addr "ftrace" ${break_always_inserted}
+    }
+
+    step_over_tracepoint "ftrace"
+}
diff --git a/gdb/testsuite/gdb.trace/tracecmd.exp b/gdb/testsuite/gdb.trace/tracecmd.exp
index 10cf27f..b4fc3e2 100644
--- a/gdb/testsuite/gdb.trace/tracecmd.exp
+++ b/gdb/testsuite/gdb.trace/tracecmd.exp
@@ -17,16 +17,10 @@
 
 load_lib "trace-support.exp";
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 gdb_exit
 gdb_start
-set testfile "actions"
-set srcfile ${testfile}.c
-set binfile $objdir/$subdir/tracecmd
+standard_testfile actions.c
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested tracecmd.exp
diff --git a/gdb/testsuite/gdb.trace/tspeed.exp b/gdb/testsuite/gdb.trace/tspeed.exp
index 0becf18..653b119 100644
--- a/gdb/testsuite/gdb.trace/tspeed.exp
+++ b/gdb/testsuite/gdb.trace/tspeed.exp
@@ -15,12 +15,10 @@
 
 load_lib "trace-support.exp"
 
-set testfile "tspeed"
-set srcfile ${testfile}.c
+standard_testfile
 set executable $testfile
-set binfile $objdir/$subdir/$executable
 
-set ipalib $objdir/../gdbserver/libinproctrace.so
+set ipalib [get_in_proc_agent]
 
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable [concat {debug nowarnings c} libs=$ipalib]] != "" } {
@@ -129,10 +127,8 @@ proc gdb_trace_collection_test {} {
 clean_restart $executable
 runto_main
 
-# We generously give ourselves one "pass" if we successfully
-# detect that this test cannot be run on this target!
 if { ![gdb_target_supports_trace] } then {
-    pass "Current target does not support trace"
+    unsupported "Current target does not support trace"
     return 1;
 }
 
diff --git a/gdb/testsuite/gdb.trace/tstatus.exp b/gdb/testsuite/gdb.trace/tstatus.exp
index 1146e1f..fdeb0dd 100644
--- a/gdb/testsuite/gdb.trace/tstatus.exp
+++ b/gdb/testsuite/gdb.trace/tstatus.exp
@@ -14,10 +14,8 @@
 
 load_lib "trace-support.exp"
 
-set testfile "actions"
+standard_testfile actions.c
 set executable $testfile
-set srcfile $testfile.c
-set binfile $objdir/$subdir/$testfile
 set expfile tstatus.exp
 
 if [prepare_for_testing $expfile $executable $srcfile \
@@ -36,7 +34,7 @@ if ![gdb_target_supports_trace] {
     return -1
 }
 
-set libipa $objdir/../gdbserver/libinproctrace.so
+set libipa [get_in_proc_agent]
 gdb_load_shlibs $libipa
 
 # Can't use prepare_for_testing, because that splits compiling into
@@ -166,7 +164,7 @@ proc test_tracepoints {} {
 
 gdb_reinitialize_dir $srcdir/$subdir
 
-if { [gdb_test "info sharedlibrary" ".*libinproctrace\.so.*" "IPA loaded"] != 0 } {
+if { [gdb_test "info sharedlibrary" ".*${libipa}.*" "IPA loaded"] != 0 } {
     untested "Could not find IPA lib loaded"
     return 1
 }
diff --git a/gdb/testsuite/gdb.trace/tsv.exp b/gdb/testsuite/gdb.trace/tsv.exp
index 4fc180d..ce95835 100644
--- a/gdb/testsuite/gdb.trace/tsv.exp
+++ b/gdb/testsuite/gdb.trace/tsv.exp
@@ -15,16 +15,10 @@
 
 load_lib "trace-support.exp";
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 gdb_exit
 gdb_start
-set testfile "actions"
-set srcfile ${testfile}.c
-set binfile $objdir/$subdir/tsv
+standard_testfile actions.c
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested tsv.exp
@@ -96,7 +90,7 @@ gdb_reinitialize_dir $srcdir/$subdir
 
 # The rest of the testing needs actual tracing to work.
 if { ![gdb_target_supports_trace] } then {
-    pass "Current target does not support trace"
+    unsupported "Current target does not support trace"
     return 1;
 }
 
diff --git a/gdb/testsuite/gdb.trace/unavailable.exp b/gdb/testsuite/gdb.trace/unavailable.exp
index 5d82d4c..1fb75eb 100644
--- a/gdb/testsuite/gdb.trace/unavailable.exp
+++ b/gdb/testsuite/gdb.trace/unavailable.exp
@@ -15,14 +15,11 @@
 
 load_lib "trace-support.exp"
 
-set testfile "unavailable"
-set srcfile ${testfile}.cc
+standard_testfile unavailable.cc
 set executable $testfile
-set binfile $objdir/$subdir/$executable
 
-if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
-	executable {debug nowarnings c++}] != "" } {
-    untested unavailable.exp
+if {[prepare_for_testing $testfile.exp $testfile $srcfile \
+	 {debug nowarnings c++}]} {
     return -1
 }
 
@@ -136,13 +133,9 @@ proc test_maybe_regvar_display { var } {
 # Test procs
 #
 
-proc gdb_collect_args_test {} {
+proc gdb_collect_args_test {} { with_test_prefix "unavailable arguments" {
     global cr
     global gdb_prompt
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix unavailable arguments:"
 
     prepare_for_trace_test
 
@@ -205,17 +198,11 @@ proc gdb_collect_args_test {} {
     gdb_test "tfind none" \
 	"#0  end .*" \
 	"cease trace debugging"
+}}
 
-    set pf_prefix $old_pf_prefix
-}
-
-proc gdb_collect_locals_test { func msg } {
+proc gdb_collect_locals_test { func msg } { with_test_prefix "unavailable locals: $msg" {
     global cr
     global gdb_prompt
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix unavailable locals: $msg:"
 
     prepare_for_trace_test
 
@@ -262,18 +249,12 @@ proc gdb_collect_locals_test { func msg } {
     gdb_test "tfind none" \
 	"#0  end .*" \
 	"cease trace debugging"
+}}
 
-    set pf_prefix $old_pf_prefix
-}
-
-proc gdb_unavailable_registers_test { } {
+proc gdb_unavailable_registers_test { } { with_test_prefix "unavailable registers" {
     global gdb_prompt
     global spreg
     global pcreg
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix unavailable registers:"
 
     prepare_for_trace_test
 
@@ -319,19 +300,46 @@ proc gdb_unavailable_registers_test { } {
 	"info registers \$$spreg reports not available"
 
     gdb_test "tfind none" "#0  end .*" "cease trace debugging"
+}}
+
+proc gdb_unavailable_floats { } {
+    global gdb_prompt
+
+    with_test_prefix "unavailable floats" {
+	prepare_for_trace_test
+
+	# We'll simply re-use the globals_test_function for this test
+	gdb_test "trace globals_test_func" \
+	    "Tracepoint \[0-9\]+ at .*" \
+	    "set tracepoint"
 
-    set pf_prefix $old_pf_prefix
+	# Collect nothing.
+
+	# Begin the test.
+	run_trace_experiment globals_test_func
+
+	# Necessarily target specific.
+	if {[istarget "x86_64-*-*"] || [istarget i?86-*]} {
+	    send_gdb "info float\n"
+	    gdb_expect_list "info float" ".*$gdb_prompt $" {
+		"Status Word:         <unavailable>"
+		"Control Word:        <unavailable>"
+		"Tag Word:            <unavailable>"
+		"Instruction Pointer: <unavailable>:<unavailable>"
+		"Operand Pointer:     <unavailable>:<unavailable>"
+		"Opcode:              <unavailable>"
+	    }
+	}
+
+	gdb_test "tfind none" "#0  end .*" "cease trace debugging"
+    }
 }
 
-proc gdb_collect_globals_test { } {
+proc gdb_collect_globals_test { } { with_test_prefix "collect globals" {
     global ws
     global cr
     global gdb_prompt
     global hex
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix collect globals:"
 
     prepare_for_trace_test
 
@@ -464,7 +472,7 @@ proc gdb_collect_globals_test { } {
 	"non collected const string is still printable"
 
     gdb_test "print g_string_p" \
-	" = $hex \"hello world\"" \
+	" = $hex <g_const_string> \"hello world\"" \
 	"printing constant string through collected pointer"
 
     gdb_test "print g_string_unavail" \
@@ -518,48 +526,43 @@ proc gdb_collect_globals_test { } {
 
     gdb_test_no_output "set print object on"
 
-    set old_pf_prefix_2 $pf_prefix
-    set pf_prefix "$pf_prefix print object on:"
-
-    # With print object on, printing a pointer may need to fetch the
-    # pointed-to object, to check its run-time type.  Make sure that
-    # fails gracefully and transparently when the pointer itself is
-    # unavailable.
-    gdb_test "print virtualp" " = \\(Virtual \\*\\) <unavailable>"
-
-    # no vtable pointer available
-    gdb_test "print derived_unavail" \
-	" = {<Middle> = <unavailable>, _vptr.Derived = <unavailable>, z = <unavailable>}"
+    with_test_prefix "print object on" {
+	# With print object on, printing a pointer may need to fetch
+	# the pointed-to object, to check its run-time type.  Make
+	# sure that fails gracefully and transparently when the
+	# pointer itself is unavailable.
+	gdb_test "print virtualp" " = \\(Virtual \\*\\) <unavailable>"
 
-    # vtable pointer available, but nothing else
-    gdb_test "print derived_partial" \
-	" = \\(Derived\\) {<Middle> = {<Base> = <unavailable>, _vptr.Middle = <unavailable>, y = <unavailable>}, _vptr.Derived = $hex, z = <unavailable>}"
+	# no vtable pointer available
+	gdb_test "print derived_unavail" \
+	    " = {<Middle> = <unavailable>, _vptr.Derived = <unavailable>, z = <unavailable>}"
 
-    # whole object available
-    gdb_test "print derived_whole" \
-	" = \\(Derived\\) {<Middle> = {<Base> = {x = 2}, _vptr.Middle = $hex, y = 3}, _vptr.Derived = $hex, z = 4}"
+	# vtable pointer available, but nothing else
+	gdb_test "print derived_partial" \
+	    " = \\(Derived\\) {<Middle> = {<Base> = <unavailable>, _vptr.Middle = <unavailable>, y = <unavailable>}, _vptr.Derived = $hex <vtable for Derived.*>, z = <unavailable>}"
 
-    set pf_prefix $old_pf_prefix_2
+	# whole object available
+	gdb_test "print derived_whole" \
+	    " = \\(Derived\\) {<Middle> = {<Base> = {x = 2}, _vptr.Middle = $hex, y = 3}, _vptr.Derived = $hex <vtable for Derived.*>, z = 4}"
+    }
 
     gdb_test_no_output "set print object off"
 
-    set pf_prefix "$pf_prefix print object off:"
-
-    gdb_test "print virtualp" " = \\(Virtual \\*\\) <unavailable>"
-
-    # no vtable pointer available
-    gdb_test "print derived_unavail" \
-	" = {<Middle> = <unavailable>, _vptr.Derived = <unavailable>, z = <unavailable>}"
+    with_test_prefix "print object off" {
+	gdb_test "print virtualp" " = \\(Virtual \\*\\) <unavailable>"
 
-    # vtable pointer available, but nothing else
-    gdb_test "print derived_partial" \
-	" = {<Middle> = {<Base> = <unavailable>, _vptr.Middle = <unavailable>, y = <unavailable>}, _vptr.Derived = $hex, z = <unavailable>}"
+	# no vtable pointer available
+	gdb_test "print derived_unavail" \
+	    " = {<Middle> = <unavailable>, _vptr.Derived = <unavailable>, z = <unavailable>}"
 
-    # whole object available
-    gdb_test "print derived_whole" \
-	" = {<Middle> = {<Base> = {x = 2}, _vptr.Middle = $hex, y = 3}, _vptr.Derived = $hex, z = 4}"
+	# vtable pointer available, but nothing else
+	gdb_test "print derived_partial" \
+	    " = {<Middle> = {<Base> = <unavailable>, _vptr.Middle = <unavailable>, y = <unavailable>}, _vptr.Derived = $hex <vtable for Derived.*>, z = <unavailable>}"
 
-    set pf_prefix $old_pf_prefix_2
+	# whole object available
+	gdb_test "print derived_whole" \
+	    " = {<Middle> = {<Base> = {x = 2}, _vptr.Middle = $hex, y = 3}, _vptr.Derived = $hex <vtable for Derived.*>, z = 4}"
+    }
 
     # An instance of a virtual class where we collected everything but
     # the vptr.
@@ -569,13 +572,12 @@ proc gdb_collect_globals_test { } {
     gdb_test "tfind none" \
 	"#0  end .*" \
 	"cease trace debugging"
-
-    set pf_prefix $old_pf_prefix
-}
+}}
 
 proc gdb_trace_collection_test {} {
     gdb_collect_globals_test
     gdb_unavailable_registers_test
+    gdb_unavailable_floats
 
     gdb_collect_args_test
     gdb_collect_locals_test local_test_func "auto locals"
@@ -583,13 +585,10 @@ proc gdb_trace_collection_test {} {
     gdb_collect_locals_test statlocal_test_func "static locals"
 }
 
-clean_restart $executable
 runto_main
 
-# We generously give ourselves one "pass" if we successfully
-# detect that this test cannot be run on this target!
 if { ![gdb_target_supports_trace] } then {
-    pass "Current target does not support trace"
+    unsupported "Current target does not support trace"
     return 1;
 }
 
diff --git a/gdb/testsuite/gdb.trace/while-dyn.exp b/gdb/testsuite/gdb.trace/while-dyn.exp
index 547f0b8..7281a81 100644
--- a/gdb/testsuite/gdb.trace/while-dyn.exp
+++ b/gdb/testsuite/gdb.trace/while-dyn.exp
@@ -17,18 +17,12 @@
 
 load_lib "trace-support.exp"
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 gdb_exit
 gdb_start
 
-set testfile "actions"
-set srcfile $testfile.c
-set executable while-dyn
-set binfile $objdir/$subdir/$executable
+standard_testfile actions.c
+set executable $testfile
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested while-dyn.exp
@@ -40,10 +34,8 @@ gdb_test "tfind none"  ".*" ""
 runto_main
 gdb_reinitialize_dir $srcdir/$subdir
 
-# We generously give ourselves one "pass" if we successfully 
-# detect that this test cannot be run on this target!
 if { ![gdb_target_supports_trace] } then {
-    pass "Current target does not support trace"
+    unsupported "Current target does not support trace"
     return 1;
 }
 
diff --git a/gdb/testsuite/gdb.trace/while-stepping.exp b/gdb/testsuite/gdb.trace/while-stepping.exp
index 0ee27fd..5d8e066 100644
--- a/gdb/testsuite/gdb.trace/while-stepping.exp
+++ b/gdb/testsuite/gdb.trace/while-stepping.exp
@@ -17,17 +17,11 @@
 
 load_lib "trace-support.exp";
 
-if $tracelevel then {
-    strace $tracelevel
-}
-
 
 gdb_exit
 gdb_start
 
-set testfile "actions"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/while-stepping
+standard_testfile actions.c
 if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" $binfile \
 	  executable {debug nowarnings}] != "" } {
     untested while-stepping.exp
diff --git a/gdb/testsuite/gdb.xml/Makefile.in b/gdb/testsuite/gdb.xml/Makefile.in
index 7143134..b8383ca 100644
--- a/gdb/testsuite/gdb.xml/Makefile.in
+++ b/gdb/testsuite/gdb.xml/Makefile.in
@@ -8,6 +8,7 @@ all info install-info dvi install uninstall installcheck check:
 
 clean mostlyclean:
 	-rm -f *.ci *.o $(OBJS) $(PROGS) *~ core
+	-rm -f *.dwo *.dwp
 
 distclean maintainer-clean realclean: clean
 	-rm -f Makefile gdb.log gdb.sum
diff --git a/gdb/testsuite/gdb.xml/tdesc-regs.exp b/gdb/testsuite/gdb.xml/tdesc-regs.exp
index 35d8541..9a89d7e 100644
--- a/gdb/testsuite/gdb.xml/tdesc-regs.exp
+++ b/gdb/testsuite/gdb.xml/tdesc-regs.exp
@@ -34,7 +34,7 @@ switch -glob -- [istarget] {
         set core-regs {m68k-core.xml}
     }
     "mips*-*-*" {
-	set core-regs {mips-cpu.xml mips-cp0.xml mips-fpu.xml}
+	set core-regs {mips-cpu.xml mips-cp0.xml mips-fpu.xml mips-dsp.xml}
     }
     "powerpc*-*-*" {
 	set regdir "rs6000/"
diff --git a/gdb/testsuite/lib/append_gdb_boards_dir.exp b/gdb/testsuite/lib/append_gdb_boards_dir.exp
new file mode 100644
index 0000000..4b01f2b
--- /dev/null
+++ b/gdb/testsuite/lib/append_gdb_boards_dir.exp
@@ -0,0 +1,48 @@
+# Copyright 2012 Free Software Foundation, Inc.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Make the boards under testsuite/boards automatically available to
+# DejaGnu.  This is sourced by the `site.exp' file generated in the
+# root of the testsuite's build directory.
+
+# Append GDB's boards dir to DejaGnu's board dir list, making sure
+# that that is the last boards dir in the list, so that boards found
+# in directories appended to the list by either the global config
+# site.exp, or in `$(dirname $DEJAGNU)/boards' override GDB's boards.
+# Unfortunately, there's no standard way to get that behavior.  To
+# make it happen, we trace all writes to the $boards_dirs global, and
+# make sure our dir is always the last in the list.  This relies on
+# the fact that DejaGnu always writes to this variable, even if just
+# to set it to the empty list, which it does.
+#
+proc append_gdb_boards_dir { name1 name2 op } {
+    global srcdir
+    global boards_dir
+
+    # In case someone wants to point at GDB's boards dir in the global
+    # config before some other board dir, in which case we should not
+    # push it to the end of the list, use an unlikely path to GDB's
+    # boards, so it compares different to other simpler but equivalent
+    # paths.
+    set gdb_boards_dir "${srcdir}/boards/../boards"
+
+    # Keep our board dir last in the list.
+    set idx [lsearch -exact $boards_dir "$gdb_boards_dir"]
+    if { $idx >= 0 } {
+	set boards_dir [lreplace $boards_dir $idx $idx]
+    }
+    lappend boards_dir "${gdb_boards_dir}"
+}
+trace variable "boards_dir" w append_gdb_boards_dir
diff --git a/gdb/testsuite/lib/future.exp b/gdb/testsuite/lib/future.exp
index 4e26dcb..bf47988 100644
--- a/gdb/testsuite/lib/future.exp
+++ b/gdb/testsuite/lib/future.exp
@@ -60,6 +60,30 @@ proc gdb_find_gfortran {} {
     return $CC
 }
 
+proc gdb_find_go {} {
+    global tool_root_dir
+
+    set GO ""
+
+    if {![is_remote host]} {
+	set file [lookfor_file $tool_root_dir gccgo]
+	if { $file != "" } {
+	    set root [file dirname $file]
+	    set GO "$file -B$root/gcc/"
+	}
+    }
+
+    if { $GO == "" } {
+	set GO [transform gccgo]
+    }
+
+    return $GO
+}
+
+proc gdb_find_go_linker {} {
+    return [find_go]
+}
+
 proc gdb_default_target_compile {source destfile type options} {
     global target_triplet
     global tool_root_dir
@@ -74,6 +98,11 @@ proc gdb_default_target_compile {source destfile type options} {
     set libs ""
     set compiler_type "c"
     set compiler ""
+    set linker ""
+    # linker_opts_order is one of "sources-then-flags", "flags-then-sources".
+    # The order shouldn't matter.  It's done this way to preserve
+    # existing behavior.
+    set linker_opts_order "sources-then-flags"
     set ldflags ""
     set dest [target_info name]
 
@@ -138,6 +167,26 @@ proc gdb_default_target_compile {source destfile type options} {
 	    }
 	}
 
+	if { $i == "go" } {
+	    set compiler_type "go"
+	    if {[board_info $dest exists goflags]} {
+		append add_flags " [target_info goflags]"
+	    }
+	    if {[board_info $dest exists gocompiler]} {
+		set compiler [target_info gocompiler]
+	    } else {
+		set compiler [find_go]
+	    }
+	    if {[board_info $dest exists golinker]} {
+		set linker [target_info golinker]
+	    } else {
+		set linker [find_go_linker]
+	    }
+	    if {[board_info $dest exists golinker_opts_order]} {
+		set linker_opts_order [target_info golinker_opts_order]
+	    }
+	}
+
 	if {[regexp "^dest=" $i]} {
 	    regsub "^dest=" $i "" tmp
 	    if {[board_info $tmp exists name]} {
@@ -193,6 +242,8 @@ proc gdb_default_target_compile {source destfile type options} {
     global F77_FOR_TARGET
     global F90_FOR_TARGET
     global GNATMAKE_FOR_TARGET
+    global GO_FOR_TARGET
+    global GO_LD_FOR_TARGET
 
     if {[info exists GNATMAKE_FOR_TARGET]} {
 	if { $compiler_type == "ada" } {
@@ -224,6 +275,19 @@ proc gdb_default_target_compile {source destfile type options} {
 	}
     }
 
+    if { $compiler_type == "go" } {
+	if {[info exists GO_FOR_TARGET]} {
+	    set compiler $GO_FOR_TARGET
+	}
+	if {[info exists GO_LD_FOR_TARGET]} {
+	    set linker $GO_LD_FOR_TARGET
+	}
+    }
+
+    if { $type == "executable" && $linker != "" } {
+	set compiler $linker
+    }
+
     if { $compiler == "" } {
 	set compiler [board_info $dest compiler]
 	if { $compiler == "" } {
@@ -366,10 +430,26 @@ proc gdb_default_target_compile {source destfile type options} {
     # This is obscure: we put SOURCES at the end when building an
     # object, because otherwise, in some situations, libtool will
     # become confused about the name of the actual source file.
-    if {$type == "object"} {
-	set opts "$add_flags $sources"
-    } else {
-	set opts "$sources $add_flags"
+    switch $type {
+	"object" {
+	    set opts "$add_flags $sources"
+	}
+	"executable" {
+	    switch $linker_opts_order {
+		"flags-then-sources" {
+		    set opts "$add_flags $sources"
+		}
+		"sources-then-flags" {
+		    set opts "$sources $add_flags"
+		}
+		default {
+		    error "Invalid value for board_info linker_opts_order"
+		}
+	    }
+	}
+	default {
+	    set opts "$sources $add_flags"
+	}
     }
 
     if {[is_remote host]} {
@@ -431,6 +511,12 @@ if {[info procs find_gfortran] == ""} {
     set use_gdb_compile 1
 }
 
+if {[info procs find_go_linker] == ""} {
+    rename gdb_find_go find_go
+    rename gdb_find_go_linker find_go_linker
+    set use_gdb_compile 1
+}
+
 if {$use_gdb_compile} {
     catch {rename default_target_compile {}}
     rename gdb_default_target_compile default_target_compile
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index b06e723..4f2b7c9 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -52,10 +52,13 @@ if ![info exists GDBFLAGS] {
 }
 verbose "using GDBFLAGS = $GDBFLAGS" 2
 
+# Make the build data directory available to tests.
+set BUILD_DATA_DIRECTORY "[pwd]/../data-directory"
+
 # INTERNAL_GDBFLAGS contains flags that the testsuite requires.
 global INTERNAL_GDBFLAGS
 if ![info exists INTERNAL_GDBFLAGS] {
-    set INTERNAL_GDBFLAGS "-nw -nx -data-directory [pwd]/../data-directory"
+    set INTERNAL_GDBFLAGS "-nw -nx -data-directory $BUILD_DATA_DIRECTORY"
 }
 
 # The variable gdb_prompt is a regexp which matches the gdb prompt.
@@ -266,13 +269,6 @@ proc gdb_run_cmd {args} {
 		}
 	    }
 	}
-	if [target_info exists gdb_stub] {
-	    gdb_expect 60 {
-		-re "$gdb_prompt $" {
-		    send_gdb "continue\n"
-		}
-	    }
-	}
 	return
     }
 
@@ -312,7 +308,7 @@ proc gdb_start_cmd {args} {
 	    -re "$gdb_prompt $" { }
 	    default {
 		perror "gdb_init_command for target failed";
-		return;
+		return -1;
 	    }
 	}
     }
@@ -454,26 +450,12 @@ proc runto { function args } {
 }
 
 # Ask gdb to run until we hit a breakpoint at main.
-# The case where the target uses stubs has to be handled
-# specially--if it uses stubs, assuming we hit
-# breakpoint() and just step out of the function.
 #
 # N.B. This function deletes all existing breakpoints.
 # If you don't want that, use gdb_start_cmd.
 
 proc runto_main { } {
-    global gdb_prompt
-    global decimal
-
-    if ![target_info exists gdb_stub] {
-	return [runto main]
-    }			
-
-    delete_breakpoints
-
-    gdb_step_for_stub;
-
-    return 1
+    return [runto main]
 }
 
 ### Continue, and expect to hit a breakpoint.
@@ -487,7 +469,7 @@ proc gdb_continue_to_breakpoint {name {location_pattern .*}} {
 
     send_gdb "continue\n"
     gdb_expect {
-	-re "Breakpoint .* (at|in) $location_pattern\r\n$gdb_prompt $" {
+	-re "(?:Breakpoint|Temporary breakpoint) .* (at|in) $location_pattern\r\n$gdb_prompt $" {
 	    pass $full_name
 	}
 	-re ".*$gdb_prompt $" {
@@ -605,7 +587,7 @@ proc gdb_test_multiple { command message user_code } {
     }
 
     if {$use_gdb_stub
-        && [regexp -nocase {^\s*(r|run|star|start|at|att|atta|attac|attach)\M} \
+	&& [regexp -nocase {^\s*(r|run|star|start|at|att|atta|attac|attach)\M} \
 	    $command]} {
 	error "gdbserver does not support $command without extended-remote"
     }
@@ -745,21 +727,21 @@ proc gdb_test_multiple { command message user_code } {
     }
 
     set code {
-         -re ".*A problem internal to GDB has been detected" {
-             fail "$message (GDB internal error)"
-             gdb_internal_error_resync
-         }
-	 -re "\\*\\*\\* DOSEXIT code.*" {
-	     if { $message != "" } {
-		 fail "$message";
-	     }
-	     gdb_suppress_entire_file "GDB died";
-	     set result -1;
-	 }
+	-re ".*A problem internal to GDB has been detected" {
+	    fail "$message (GDB internal error)"
+	    gdb_internal_error_resync
+	}
+	-re "\\*\\*\\* DOSEXIT code.*" {
+	    if { $message != "" } {
+		fail "$message";
+	    }
+	    gdb_suppress_entire_file "GDB died";
+	    set result -1;
+	}
     }
     append code $processed_code
     append code {
-	 -re "Ending remote debugging.*$gdb_prompt $" {
+	-re "Ending remote debugging.*$gdb_prompt $" {
 	    if ![isnative] then {
 		warning "Can`t communicate to remote target."
 	    }
@@ -767,17 +749,17 @@ proc gdb_test_multiple { command message user_code } {
 	    gdb_start
 	    set result -1
 	}
-	 -re "Undefined\[a-z\]* command:.*$gdb_prompt $" {
+	-re "Undefined\[a-z\]* command:.*$gdb_prompt $" {
 	    perror "Undefined command \"$command\"."
-            fail "$message"
+	    fail "$message"
 	    set result 1
 	}
-	 -re "Ambiguous command.*$gdb_prompt $" {
+	-re "Ambiguous command.*$gdb_prompt $" {
 	    perror "\"$command\" is not a unique command name."
-            fail "$message"
+	    fail "$message"
 	    set result 1
 	}
-	 -re "$inferior_exited_re with code \[0-9\]+.*$gdb_prompt $" {
+	-re "$inferior_exited_re with code \[0-9\]+.*$gdb_prompt $" {
 	    if ![string match "" $message] then {
 		set errmsg "$message (the program exited)"
 	    } else {
@@ -786,7 +768,7 @@ proc gdb_test_multiple { command message user_code } {
 	    fail "$errmsg"
 	    set result -1
 	}
-	 -re "$inferior_exited_re normally.*$gdb_prompt $" {
+	-re "$inferior_exited_re normally.*$gdb_prompt $" {
 	    if ![string match "" $message] then {
 		set errmsg "$message (the program exited)"
 	    } else {
@@ -795,7 +777,7 @@ proc gdb_test_multiple { command message user_code } {
 	    fail "$errmsg"
 	    set result -1
 	}
-	 -re "The program is not being run.*$gdb_prompt $" {
+	-re "The program is not being run.*$gdb_prompt $" {
 	    if ![string match "" $message] then {
 		set errmsg "$message (the program is no longer running)"
 	    } else {
@@ -804,16 +786,16 @@ proc gdb_test_multiple { command message user_code } {
 	    fail "$errmsg"
 	    set result -1
 	}
-	 -re "\r\n$gdb_prompt $" {
+	-re "\r\n$gdb_prompt $" {
 	    if ![string match "" $message] then {
 		fail "$message"
 	    }
 	    set result 1
 	}
-	 "<return>" {
+	"<return>" {
 	    send_gdb "\n"
 	    perror "Window too small."
-            fail "$message"
+	    fail "$message"
 	    set result -1
 	}
 	-re "\\((y or n|y or \\\[n\\\]|\\\[y\\\] or n)\\) " {
@@ -828,16 +810,16 @@ proc gdb_test_multiple { command message user_code } {
 	    fail "$message (got breakpoint menu)"
 	    set result -1
 	}
-	 eof {
-	     perror "Process no longer exists"
-	     if { $message != "" } {
-		 fail "$message"
-	     }
-	     return -1
+	eof {
+	    perror "Process no longer exists"
+	    if { $message != "" } {
+		fail "$message"
+	    }
+	    return -1
 	}
-	 full_buffer {
+	full_buffer {
 	    perror "internal buffer is full."
-            fail "$message"
+	    fail "$message"
 	    set result -1
 	}
 	timeout	{
@@ -1458,6 +1440,12 @@ proc skip_ada_tests {} {
     return 0
 }
 
+# Return a 1 if I don't even want to try to test GO.
+
+proc skip_go_tests {} {
+    return 0
+}
+
 # Return a 1 if I don't even want to try to test java.
 
 proc skip_java_tests {} {
@@ -1502,6 +1490,93 @@ proc skip_shlib_tests {} {
     return 1
 }
 
+# Test files shall make sure all the test result lines in gdb.sum are
+# unique in a test run, so that comparing the gdb.sum files of two
+# test runs gives correct results.  Test files that exercise
+# variations of the same tests more than once, shall prefix the
+# different test invocations with different identifying strings in
+# order to make them unique.
+#
+# About test prefixes:
+#
+# $pf_prefix is the string that dejagnu prints after the result (FAIL,
+# PASS, etc.), and before the test message/name in gdb.sum.  E.g., the
+# underlined substring in
+#
+#  PASS: gdb.base/mytest.exp: some test
+#        ^^^^^^^^^^^^^^^^^^^^
+#
+# is $pf_prefix.
+#
+# The easiest way to adjust the test prefix is to append a test
+# variation prefix to the $pf_prefix, using the with_test_prefix
+# procedure.  E.g.,
+#
+# proc do_tests {} {
+#   gdb_test ... ... "test foo"
+#   gdb_test ... ... "test bar"
+#
+#   with_test_prefix "subvariation a" {
+#     gdb_test ... ... "test x"
+#   }
+#
+#   with_test_prefix "subvariation b" {
+#     gdb_test ... ... "test x"
+#   }
+# }
+#
+# with_test_prefix "variation1" {
+#   ...do setup for variation 1...
+#   do_tests
+# }
+#
+# with_test_prefix "variation2" {
+#   ...do setup for variation 2...
+#   do_tests
+# }
+#
+# Results in:
+#
+#  PASS: gdb.base/mytest.exp: variation1: test foo
+#  PASS: gdb.base/mytest.exp: variation1: test bar
+#  PASS: gdb.base/mytest.exp: variation1: subvariation a: test x
+#  PASS: gdb.base/mytest.exp: variation1: subvariation b: test x
+#  PASS: gdb.base/mytest.exp: variation2: test foo
+#  PASS: gdb.base/mytest.exp: variation2: test bar
+#  PASS: gdb.base/mytest.exp: variation2: subvariation a: test x
+#  PASS: gdb.base/mytest.exp: variation2: subvariation b: test x
+#
+# If for some reason more flexibility is necessary, one can also
+# manipulate the pf_prefix global directly, treating it as a string.
+# E.g.,
+#
+#   global pf_prefix
+#   set saved_pf_prefix
+#   append pf_prefix "${foo}: bar"
+#   ... actual tests ...
+#   set pf_prefix $saved_pf_prefix
+#
+
+# Run BODY in the context of the caller, with the current test prefix
+# (pf_prefix) appended with one space, then PREFIX, and then a colon.
+# Returns the result of BODY.
+#
+proc with_test_prefix { prefix body } {
+  global pf_prefix
+
+  set saved $pf_prefix
+  append pf_prefix " " $prefix ":"
+  set code [catch {uplevel 1 $body} result]
+  set pf_prefix $saved
+
+  if {$code == 1} {
+      global errorInfo errorCode
+      return -code $code -errorinfo $errorInfo -errorcode $errorCode $result
+  } else {
+      return -code $code $result
+  }
+}
+
 # Return 1 if _Complex types are supported, otherwise, return 0.
 
 proc support_complex_tests {} {
@@ -1752,7 +1827,7 @@ proc skip_altivec_tests {} {
 
     # Make sure we have a compiler that understands altivec.
     set compile_flags {debug nowarnings}
-    if [get_compiler_info not-used] {
+    if [get_compiler_info] {
        warning "Could not get compiler info"
        return 1
     }
@@ -1841,7 +1916,7 @@ proc skip_vsx_tests {} {
 
     # Make sure we have a compiler that understands altivec.
     set compile_flags {debug nowarnings quiet}
-    if [get_compiler_info not-used] {
+    if [get_compiler_info] {
        warning "Could not get compiler info"
        return 1
     }
@@ -2025,10 +2100,7 @@ set hp_aCC_compiler		0
 
 # Figure out what compiler I am using.
 #
-# BINFILE is a "compiler information" output file.  This implementation
-# does not use BINFILE.
-#
-# ARGS can be empty or "C++".  If empty, "C" is assumed.
+# ARG can be empty or "C++".  If empty, "C" is assumed.
 #
 # There are several ways to do this, with various problems.
 #
@@ -2077,7 +2149,7 @@ set hp_aCC_compiler		0
 #
 # -- chastain 2004-01-06
 
-proc get_compiler_info {binfile args} {
+proc get_compiler_info {{arg ""}} {
     # For compiler.c and compiler.cc
     global srcdir
 
@@ -2095,7 +2167,7 @@ proc get_compiler_info {binfile args} {
 
     # Choose which file to preprocess.
     set ifile "${srcdir}/lib/compiler.c"
-    if { [llength $args] > 0 && [lindex $args 0] == "c++" } {
+    if { $arg == "c++" } {
 	set ifile "${srcdir}/lib/compiler.cc"
     }
 
@@ -2106,12 +2178,12 @@ proc get_compiler_info {binfile args} {
 	# We have to use -E and -o together, despite the comments
 	# above, because of how DejaGnu handles remote host testing.
 	set ppout "$outdir/compiler.i"
-	gdb_compile "${ifile}" "$ppout" preprocess [list "$args" quiet]
+	gdb_compile "${ifile}" "$ppout" preprocess [list "$arg" quiet]
 	set file [open $ppout r]
 	set cppout [read $file]
 	close $file
     } else {
-	set cppout [ gdb_compile "${ifile}" "" preprocess [list "$args" quiet] ]
+	set cppout [ gdb_compile "${ifile}" "" preprocess [list "$arg" quiet] ]
     }
     log_file -a "$outdir/$tool.log" 
 
@@ -2292,14 +2364,8 @@ proc gdb_compile {source dest type options} {
     }
     set options $new_options
 
-    if [target_info exists gdb_stub] {
-	set options2 { "additional_flags=-Dusestubs" }
-	lappend options "libs=[target_info gdb_stub]";
-	set options [concat $options2 $options]
-    }
     if [target_info exists is_vxworks] {
 	set options2 { "additional_flags=-Dvxworks" }
-	lappend options "libs=[target_info gdb_stub]";
 	set options [concat $options2 $options]
     }
     if [info exists GDB_TESTCASE_OPTIONS] {
@@ -2958,12 +3024,15 @@ proc gdb_continue { function } {
 proc default_gdb_init { args } {
     global gdb_wrapper_initialized
     global gdb_wrapper_target
+    global gdb_test_file_name
     global cleanfiles
     
     set cleanfiles {}
 
     gdb_clear_suppressed;
 
+    set gdb_test_file_name [file rootname [file tail [lindex $args 0]]]
+
     # Make sure that the wrapper is rebuilt
     # with the appropriate multilib option.
     if { $gdb_wrapper_target != [current_target_name] } {
@@ -2997,6 +3066,84 @@ proc default_gdb_init { args } {
     }
 }
 
+# Turn BASENAME into a full file name in the standard output
+# directory.  It is ok if BASENAME is the empty string; in this case
+# the directory is returned.
+
+proc standard_output_file {basename} {
+    global objdir subdir
+
+    return [file join $objdir $subdir $basename]
+}
+
+# Set 'testfile', 'srcfile', and 'binfile'.
+#
+# ARGS is a list of source file specifications.
+# Without any arguments, the .exp file's base name is used to
+# compute the source file name.  The ".c" extension is added in this case.
+# If ARGS is not empty, each entry is a source file specification.
+# If the specification starts with a ".", it is treated as a suffix
+# to append to the .exp file's base name.
+# If the specification is the empty string, it is treated as if it
+# were ".c".
+# Otherwise it is a file name.
+# The first file in the list is used to set the 'srcfile' global.
+# Each subsequent name is used to set 'srcfile2', 'srcfile3', etc.
+#
+# Most tests should call this without arguments.
+#
+# If a completely different binary file name is needed, then it
+# should be handled in the .exp file with a suitable comment.
+
+proc standard_testfile {args} {
+    global gdb_test_file_name
+    global subdir
+    global gdb_test_file_last_vars
+
+    # Outputs.
+    global testfile binfile
+
+    set testfile $gdb_test_file_name
+    set binfile [standard_output_file ${testfile}]
+
+    if {[llength $args] == 0} {
+	set args .c
+    }
+
+    # Unset our previous output variables.
+    # This can help catch hidden bugs.
+    if {[info exists gdb_test_file_last_vars]} {
+	foreach varname $gdb_test_file_last_vars {
+	    global $varname
+	    catch {unset $varname}
+	}
+    }
+    # 'executable' is often set by tests.
+    set gdb_test_file_last_vars {executable}
+
+    set suffix ""
+    foreach arg $args {
+	set varname srcfile$suffix
+	global $varname
+
+	# Handle an extension.
+	if {$arg == ""} {
+	    set arg $testfile.c
+	} elseif {[string range $arg 0 0] == "."} {
+	    set arg $testfile$arg
+	}
+
+	set $varname $arg
+	lappend gdb_test_file_last_vars $varname
+
+	if {$suffix == ""} {
+	    set suffix 2
+	} else {
+	    incr suffix
+	}
+    }
+}
+
 # The default timeout used when testing GDB commands.  We want to use
 # the same timeout as the default dejagnu timeout, unless the user has
 # already provided a specific value (probably through a site.exp file).
@@ -3010,14 +3157,19 @@ if ![info exists gdb_test_timeout] {
 # an error when that happens.
 set banned_variables { bug_id prms_id }
 
+# A list of procedures that GDB testcases should not use.
+# We try to prevent their use by monitoring invocations and raising
+# an error when that happens.
+set banned_procedures { strace }
+
 # gdb_init is called by runtest at start, but also by several
 # tests directly; gdb_finish is only called from within runtest after
 # each test source execution.
 # Placing several traces by repetitive calls to gdb_init leads
 # to problems, as only one trace is removed in gdb_finish.
 # To overcome this possible problem, we add a variable that records
-# if the banned variables are traced.
-set banned_variables_traced 0
+# if the banned variables and procedures are already traced.
+set banned_traced 0
 
 proc gdb_init { args } {
     # Reset the timeout value to the default.  This way, any testcase
@@ -3027,15 +3179,21 @@ proc gdb_init { args } {
     global timeout
     set timeout $gdb_test_timeout
 
-    # Block writes to all banned variables...
+    # Block writes to all banned variables, and invocation of all
+    # banned procedures...
     global banned_variables
-    global banned_variables_traced
-    if (!$banned_variables_traced) {
+    global banned_procedures
+    global banned_traced
+    if (!$banned_traced) {
     	foreach banned_var $banned_variables {
             global "$banned_var"
             trace add variable "$banned_var" write error
 	}
-	set banned_variables_traced 1
+	foreach banned_proc $banned_procedures {
+	    global "$banned_proc"
+	    trace add execution "$banned_proc" enter error
+	}
+	set banned_traced 1
     }
 
     # We set LC_ALL, LC_CTYPE, and LANG to C so that we get the same
@@ -3084,13 +3242,18 @@ proc gdb_finish { } {
     # Unblock write access to the banned variables.  Dejagnu typically
     # resets some of them between testcases.
     global banned_variables
-    global banned_variables_traced
-    if ($banned_variables_traced) {
+    global banned_procedures
+    global banned_traced
+    if ($banned_traced) {
     	foreach banned_var $banned_variables {
             global "$banned_var"
             trace remove variable "$banned_var" write error
 	}
-	set banned_variables_traced 0
+	foreach banned_proc $banned_procedures {
+	    global "$banned_proc"
+	    trace remove execution "$banned_proc" enter error
+	}
+	set banned_traced 0
     }
 }
 
@@ -3164,95 +3327,10 @@ proc setup_kfail_for_target { PR target } {
     }
 }
 
-# Test programs for embedded (often "bare board") systems sometimes use a
-# "stub" either embedded in the test program itself or in the boot rom.
-# The job of the stub is to implement the remote protocol to communicate
-# with gdb and control the inferior.  To initiate the remote protocol
-# session with gdb the stub needs to be given control by the inferior.
-# They do this by calling a function that typically triggers a trap
-# from main that transfers control to the stub.
-# The purpose of this function, gdb_step_for_stub, is to step out of
-# that function ("breakpoint" in the example below) and back into main.
-#
-# Example:
-#
-# int
-# main ()
-# {
-# #ifdef usestubs
-#  set_debug_traps (); /* install trap handlers for stub */
-#  breakpoint (); /* trigger a trap to give the stub control */
-# #endif
-#  /* test program begins here */
-# }
-#
-# Note that one consequence of this design is that a breakpoint on "main"
-# does not Just Work (because if the target could stop there you still have
-# to step past the calls to set_debug_traps,breakpoint).
-
-proc gdb_step_for_stub { } {
-    global gdb_prompt;
-
-    if ![target_info exists gdb,use_breakpoint_for_stub] {
-	if [target_info exists gdb_stub_step_command] {
-	    set command [target_info gdb_stub_step_command];
-	} else {
-	    set command "step";
-	}
-	send_gdb "${command}\n";
-	set tries 0;
-	gdb_expect 60 {
-	    -re "(main.* at |.*in .*start).*$gdb_prompt" {
-		return;
-	    }
-	    -re ".*$gdb_prompt" {
-		incr tries;
-		if { $tries == 5 } {
-		    fail "stepping out of breakpoint function";
-		    return;
-		}
-		send_gdb "${command}\n";
-		exp_continue;
-	    }
-	    default {
-		fail "stepping out of breakpoint function";
-		return;
-	    }
-	}
-    }
-    send_gdb "where\n";
-    gdb_expect {
-	-re "main\[^\r\n\]*at \(\[^:]+\):\(\[0-9\]+\)" {
-	    set file $expect_out(1,string);
-	    set linenum [expr $expect_out(2,string) + 1];
-	    set breakplace "${file}:${linenum}";
-	}
-	default {}
-    }
-    send_gdb "break ${breakplace}\n";
-    gdb_expect 60 {
-	-re "Breakpoint (\[0-9\]+) at.*$gdb_prompt" {
-	    set breakpoint $expect_out(1,string);
-	}
-	-re "Breakpoint (\[0-9\]+): file.*$gdb_prompt" {
-	    set breakpoint $expect_out(1,string);
-	}
-	default {}
-    }
-    send_gdb "continue\n";
-    gdb_expect 60 {
-	-re "Breakpoint ${breakpoint},.*$gdb_prompt" {
-	    gdb_test "delete $breakpoint" ".*" "";
-	    return;
-	}
-	default {}
-    }
-}
-
 # gdb_get_line_number TEXT [FILE]
 #
 # Search the source file FILE, and return the line number of the
-# first line containing TEXT.  If no match is found, return -1.
+# first line containing TEXT.  If no match is found, an error is thrown.
 # 
 # TEXT is a string literal, not a regular expression.
 #
@@ -3325,15 +3403,13 @@ proc gdb_get_line_number { text { file "" } } {
     }
 
     if { [ catch { set fd [open "$file"] } message ] } then {
-	perror "$message"
-	return -1
+	error "$message"
     }
 
     set found -1
     for { set line 1 } { 1 } { incr line } {
 	if { [ catch { set nchar [gets "$fd" body] } message ] } then {
-	    perror "$message"
-	    return -1
+	    error "$message"
 	}
 	if { $nchar < 0 } then {
 	    break
@@ -3345,8 +3421,11 @@ proc gdb_get_line_number { text { file "" } } {
     }
 
     if { [ catch { close "$fd" } message ] } then {
-	perror "$message"
-	return -1
+	error "$message"
+    }
+
+    if {$found == -1} {
+        error "undefined tag \"$text\""
     }
 
     return $found
@@ -3655,29 +3734,31 @@ proc test_prefix_command_help { command_list expected_initial_lines args } {
     }
 }
 
-# Build executable named EXECUTABLE, from SOURCES.  If SOURCES are not
-# provided, uses $EXECUTABLE.c.  The TESTNAME paramer is the name of test
-# to pass to untested, if something is wrong.  OPTIONS are passed
-# to gdb_compile directly.
-proc build_executable { testname executable {sources ""} {options {debug}} } {
-
-    global objdir
+# Build executable named EXECUTABLE from specifications that allow
+# different options to be passed to different sub-compilations.
+# TESTNAME is the name of the test; this is passed to 'untested' if
+# something fails.
+# OPTIONS is passed to the final link, using gdb_compile.
+# ARGS is a flat list of source specifications, of the form:
+#    { SOURCE1 OPTIONS1 [ SOURCE2 OPTIONS2 ]... }
+# Each SOURCE is compiled to an object file using its OPTIONS,
+# using gdb_compile.
+# Returns 0 on success, -1 on failure.
+proc build_executable_from_specs {testname executable options args} {
     global subdir
     global srcdir
-    if {[llength $sources]==0} {
-        set sources ${executable}.c
-    }
 
-    set binfile ${objdir}/${subdir}/${executable}
+    set binfile [standard_output_file $executable]
 
     set objects {}
-    for {set i 0} "\$i<[llength $sources]" {incr i} {
-        set s [lindex $sources $i]
-        if  { [gdb_compile "${srcdir}/${subdir}/${s}" "${binfile}${i}.o" object $options] != "" } {
+    set i 0
+    foreach {s local_options} $args {
+        if  { [gdb_compile "${srcdir}/${subdir}/${s}" "${binfile}${i}.o" object $local_options] != "" } {
             untested $testname
             return -1
         }
         lappend objects "${binfile}${i}.o"
+	incr i
     }
     
     if  { [gdb_compile $objects "${binfile}" executable $options] != "" } {
@@ -3689,28 +3770,59 @@ proc build_executable { testname executable {sources ""} {options {debug}} } {
     if { [lsearch -exact $options "c++"] >= 0 } {
 	set info_options "c++"
     }
-    if [get_compiler_info ${binfile} ${info_options}] {
+    if [get_compiler_info ${info_options}] {
         return -1
     }
     return 0
 }
 
+# Build executable named EXECUTABLE, from SOURCES.  If SOURCES are not
+# provided, uses $EXECUTABLE.c.  The TESTNAME paramer is the name of test
+# to pass to untested, if something is wrong.  OPTIONS are passed
+# to gdb_compile directly.
+proc build_executable { testname executable {sources ""} {options {debug}} } {
+    if {[llength $sources]==0} {
+        set sources ${executable}.c
+    }
+
+    set arglist [list $testname $executable $options]
+    foreach source $sources {
+	lappend arglist $source $options
+    }
+
+    return [eval build_executable_from_specs $arglist]
+}
+
 # Starts fresh GDB binary and loads EXECUTABLE into GDB. EXECUTABLE is
-# the name of binary in ${objdir}/${subdir}.
+# the basename of the binary.
 proc clean_restart { executable } {
     global srcdir
-    global objdir
     global subdir
-    set binfile ${objdir}/${subdir}/${executable}
+    set binfile [standard_output_file ${executable}]
 
     gdb_exit
     gdb_start
     gdb_reinitialize_dir $srcdir/$subdir
     gdb_load ${binfile}
+}
 
-    if [target_info exists gdb_stub] {
-        gdb_step_for_stub;
-    }    
+# Prepares for testing by calling build_executable_full, then
+# clean_restart.
+# TESTNAME is the name of the test.
+# Each element in ARGS is a list of the form
+#    { EXECUTABLE OPTIONS SOURCE_SPEC... }
+# These are passed to build_executable_from_specs, which see.
+# The last EXECUTABLE is passed to clean_restart.
+# Returns 0 on success, non-zero on failure.
+proc prepare_for_testing_full {testname args} {
+    foreach spec $args {
+	if {[eval build_executable_from_specs [list $testname] $spec] == -1} {
+	    return -1
+	}
+	set executable [lindex $spec 0]
+    }
+    clean_restart $executable
+    return 0
 }
 
 # Prepares for testing, by calling build_executable, and then clean_restart.
@@ -3874,7 +3986,7 @@ proc core_find {binfile {deletefiles {}} {arg ""}} {
     # could have many core files lying around, and it may be difficult to
     # tell which one is ours, so let's run the program in a subdirectory.
     set found 0
-    set coredir "${objdir}/${subdir}/coredir.[getpid]"
+    set coredir [standard_output_file coredir.[getpid]]
     file mkdir $coredir
     catch "system \"(cd ${coredir}; ulimit -c unlimited; ${binfile} ${arg}; true) >/dev/null 2>&1\""
     #      remote_exec host "${binfile}"
diff --git a/gdb/testsuite/lib/gdbserver-support.exp b/gdb/testsuite/lib/gdbserver-support.exp
index 275f33c..ee66e48 100644
--- a/gdb/testsuite/lib/gdbserver-support.exp
+++ b/gdb/testsuite/lib/gdbserver-support.exp
@@ -69,6 +69,10 @@ proc gdb_target_cmd { targetname serialport } {
 		verbose "Set target to $targetname"
 		return 0
 	    }
+	    -re "Remote debugging using stdio.*$gdb_prompt $" {
+		verbose "Set target to $targetname"
+		return 0
+	    }
 	    -re "Remote target $targetname connected to.*$gdb_prompt $" {
 		verbose "Set target to $targetname"
 		return 0
@@ -182,6 +186,12 @@ proc gdbserver_download_current_prog { } {
     return $gdbserver_server_exec
 }
 
+# Default routine to compute the argument to "target remote".
+
+proc gdbserver_default_get_remote_address { host port } {
+    return "$host$port"
+}
+
 # Start a gdbserver process with initial OPTIONS and trailing ARGUMENTS.
 # The port will be filled in between them automatically.
 #
@@ -205,6 +215,15 @@ proc gdbserver_start { options arguments } {
 	set debughost "localhost:"
     }
 
+    # Some boards use a different value for the port that is passed to
+    # gdbserver and the port that is passed to the "target remote" command.
+    # One example is the stdio gdbserver support.
+    if [target_info exists gdb,get_remote_address] {
+	set get_remote_address [target_info gdb,get_remote_address]
+    } else {
+	set get_remote_address gdbserver_default_get_remote_address
+    }
+
     # Extract the protocol
     if [target_info exists gdb_protocol] {
 	set protocol [target_info gdb_protocol]
@@ -216,9 +235,6 @@ proc gdbserver_start { options arguments } {
 
     # Loop till we find a free port.
     while 1 {
-	# Export the host:port pair.
-	set gdbport $debughost$portnum
-
 	# Fire off the debug agent.
 	set gdbserver_command "$gdbserver"
 
@@ -234,9 +250,9 @@ proc gdbserver_start { options arguments } {
 	if { $options != "" } {
 	    append gdbserver_command " $options"
 	}
-
-	append gdbserver_command " :$portnum"
-
+	if { $portnum != "" } {
+	    append gdbserver_command " :$portnum"
+	}
 	if { $arguments != "" } {
 	    append gdbserver_command " $arguments"
 	}
@@ -274,7 +290,7 @@ proc gdbserver_start { options arguments } {
 	}
     }
 
-    return [list $protocol $gdbport]
+    return [list $protocol [$get_remote_address $debughost $portnum]]
 }
 
 # Start a gdbserver process running SERVER_EXEC, and connect GDB
@@ -339,14 +355,19 @@ proc gdbserver_reconnect { } {
     return [gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport]
 }
 
-# Start and connect to a gdbserver in extended mode.
+# Start and connect to a gdbserver in extended mode.  Note this frobs
+# $gdbserver_protocol, so should be used only from a board that
+# usually connects in target remote mode.
 proc gdbserver_start_extended { } {
     global gdbserver_protocol
     global gdbserver_gdbport
     global use_gdb_stub
 
     set res [gdbserver_start "--multi" ""]
-    set gdbserver_protocol "extended-[lindex $res 0]"
+    set gdbserver_protocol [lindex $res 0]
+    if { [string first "extended-" $gdbserver_protocol] != 0} {
+	set gdbserver_protocol "extended-$gdbserver_protocol"
+    }
     set gdbserver_gdbport [lindex $res 1]
 
     # Even if the board file is testing with target remote, our caller
@@ -356,3 +377,32 @@ proc gdbserver_start_extended { } {
 
     return [gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport]
 }
+
+# Start and connect to a gdbserver in extended/multi mode.  Unlike
+# gdbserver_start_extended, this does not frob $gdbserver_protocol.
+
+proc gdbserver_start_multi { } {
+    global gdbserver_protocol
+    global gdbserver_gdbport
+
+    set res [gdbserver_start "--multi" ""]
+    set gdbserver_protocol [lindex $res 0]
+    set gdbserver_gdbport [lindex $res 1]
+
+    return [gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport]
+}
+
+# Start a gdbserver process in multi/extended mode, and have GDB
+# connect to it (MI version).  Return 0 on success, or non-zero on
+# failure.
+
+proc mi_gdbserver_start_multi { } {
+    global gdbserver_protocol
+    global gdbserver_gdbport
+
+    set res [gdbserver_start "--multi" ""]
+    set gdbserver_protocol [lindex $res 0]
+    set gdbserver_gdbport [lindex $res 1]
+
+    return [mi_gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport]
+}
diff --git a/gdb/testsuite/lib/go.exp b/gdb/testsuite/lib/go.exp
new file mode 100644
index 0000000..e8466bb
--- /dev/null
+++ b/gdb/testsuite/lib/go.exp
@@ -0,0 +1,37 @@
+# Copyright 2012 Free Software Foundation, Inc.
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# FIXME: Presumably skip_go_tests should be defined here,
+# but for consistency with other languages it currently lives in gdb.exp.
+
+# Auxiliary function to set the language to Go.
+# The result is 1 (true) for success, 0 (false) for failure.
+
+proc set_lang_go {} {
+    if [gdb_test_no_output "set language go"] {
+	return 0
+    }
+    if [gdb_test "show language" ".* source language is \"go\"." \
+	   "set language to \"go\""] {
+	return 0
+    }
+    return 1
+}
+
+# Go version of runto_main.
+
+proc go_runto_main { } {
+    return [runto main.main]
+}
diff --git a/gdb/testsuite/lib/mi-support.exp b/gdb/testsuite/lib/mi-support.exp
index 29ce7f0..9de27dd 100644
--- a/gdb/testsuite/lib/mi-support.exp
+++ b/gdb/testsuite/lib/mi-support.exp
@@ -31,7 +31,8 @@ global mi_inferior_tty_name
 set MIFLAGS "-i=mi"
 
 set thread_selected_re "=thread-selected,id=\"\[0-9\]+\"\r\n"
-set library_loaded_re "=library-loaded\[^\n\]+\"\r\n"
+set gdbindex_warning_re "&\"warning: Skipping \[^\r\n\]+ \.gdb_index section in \[^\r\n\]+\"\r\n(?:&\"\\\\n\"\r\n)?"
+set library_loaded_re "=library-loaded\[^\n\]+\"\r\n(?:$gdbindex_warning_re)?"
 set breakpoint_re "=(?:breakpoint-created|breakpoint-deleted)\[^\n\]+\"\r\n"
 
 #
@@ -1060,6 +1061,8 @@ proc mi_expect_stop { reason func args file line extra test } {
     set bn ""
     if { $reason == "breakpoint-hit" } {
         set bn {bkptno="[0-9]+",}
+    } elseif { $reason == "solib-event" } {
+	set bn ".*"
     }
 
     set r ""
@@ -1295,13 +1298,17 @@ proc mi_varobj_update { name expected testname } {
     mi_gdb_test "-var-update $name" $er $testname
 }
 
-proc mi_varobj_update_with_type_change { name new_type new_children testname } {
-    set v "{name=\"$name\",in_scope=\"true\",type_changed=\"true\",new_type=\"$new_type\",new_num_children=\"$new_children\",has_more=\".\"}"
+proc mi_varobj_update_with_child_type_change { name child_name new_type new_children testname } {
+    set v "{name=\"$child_name\",in_scope=\"true\",type_changed=\"true\",new_type=\"$new_type\",new_num_children=\"$new_children\",has_more=\".\"}"
     set er "\\^done,changelist=\\\[$v\\\]"
     verbose -log "Expecting: $er"
     mi_gdb_test "-var-update $name" $er $testname
 }
 
+proc mi_varobj_update_with_type_change { name new_type new_children testname } {
+    mi_varobj_update_with_child_type_change $name $name $new_type $new_children $testname
+}
+
 # A helper that turns a key/value list into a regular expression
 # matching some MI output.
 proc mi_varobj_update_kv_helper {list} {
@@ -2012,7 +2019,7 @@ proc mi_get_features {} {
 #   }
 # }
 #
-# mi_walk_varobj_tree $tree
+# mi_walk_varobj_tree c++ $tree
 #
 # If you'd prefer to walk the tree using your own callback,
 # simply pass the name of the callback to mi_walk_varobj_tree.
@@ -2038,6 +2045,9 @@ proc mi_get_features {} {
 # type         - the type of this variable (type="type" in the output
 #                of -var-list-children, or the special tag "anonymous"
 # path_expr    - the "-var-info-path-expression" for this variable
+#                NOTE: This member cannot be used reliably with typedefs.
+#                Use with caution!
+#                See notes inside get_path_expr for more.
 # parent       - the variable name of the parent varobj
 # children     - a list of children variable names (which are the
 #                names Tcl arrays, not object names)
@@ -2084,7 +2094,8 @@ namespace eval ::varobj_tree {
   }
 
   # The default callback used by mi_walk_varobj_tree.  This callback
-  # simply checks all of VAR's children.
+  # simply checks all of VAR's children.  It specifically does not test
+  # path expressions, since that is very problematic.
   #
   # This procedure may be used in custom callbacks.
   proc test_children_callback {variable_name} {
@@ -2154,20 +2165,59 @@ namespace eval ::varobj_tree {
   # parent varobj whose variable name is given by PARENT_VARIABLE.
   proc get_path_expr {parent_variable name type} {
     upvar #0 $parent_variable parent
+    upvar #0 $parent_variable path_parent
 
     # If TYPE is "", this is one of the CPLUS_FAKE_CHILD varobjs,
-    # which has no path expression
-    if {[string length $type] == 0} {
+    # which has no path expression.  Likewsise for anonymous structs
+    # and unions.
+    if {[string length $type] == 0 \
+	    || [string compare $type "anonymous"] == 0} {
       return ""
     }
 
     # Find the path parent variable.
     while {![is_path_expr_parent $parent_variable]} {
-      set parent_variable $parent(parent)
-      upvar #0 $parent_variable parent
-    }
+      set parent_variable $path_parent(parent)
+      upvar #0 $parent_variable path_parent
+    }
+
+    # This is where things get difficult.  We do not actually know
+    # the real type for variables defined via typedefs, so we don't actually
+    # know whether the parent is a structure/union or not.
+    #
+    # So we assume everything that isn't a simple type is a compound type.
+    set stars ""
+    regexp {\*+} $parent(type) stars
+    set is_compound 1
+    if {[string index $name 0] == "*"} {
+      set is_compound 0
+    }
+
+    if {[string index $parent(type) end] == "\]"} {
+      # Parent is an array.
+      return "($path_parent(path_expr))\[$name\]"
+    } elseif {$is_compound} {
+      # Parent is a structure or union or a pointer to one.
+      if {[string length $stars]} {
+	set join "->"
+      } else {
+	set join "."
+      }
+
+      global root
 
-    return "(($parent(path_expr)).$name)"
+      # To make matters even more hideous, varobj.c has slightly different
+      # path expressions for C and C++.
+      set path_expr "($path_parent(path_expr))$join$name"
+      if {[string compare -nocase $root(language) "c"] == 0} {
+	return $path_expr
+      } else {
+	return "($path_expr)"
+      }
+    } else {
+      # Parent is a pointer.
+      return "*($path_parent(path_expr))"
+    }
   }
 
   # Process the CHILDREN (a list of varobj_tree elements) of the variable
@@ -2208,7 +2258,7 @@ namespace eval ::varobj_tree {
 
   # The main procedure to call the given CALLBACK on the elements of the
   # given varobj TREE.  See detailed explanation above.
-  proc walk_tree {tree callback} {
+  proc walk_tree {language tree callback} {
     global root
 
     if {[llength $tree] < 3} {
@@ -2216,6 +2266,7 @@ namespace eval ::varobj_tree {
     }
 
     # Create root node and process the tree.
+    array set root [list language $language]
     array set root [list obj_name "root"]
     array set root [list display_name "root"]
     array set root [list type "root"]
@@ -2259,7 +2310,8 @@ proc mi_varobj_tree_test_children_callback {variable} {
 
 # Walk the variable object tree given by TREE, calling the specified
 # CALLBACK.  By default this uses mi_varobj_tree_test_children_callback.
-proc mi_walk_varobj_tree {tree {callback \
-				    mi_varobj_tree_test_children_callback}} {
-  ::varobj_tree::walk_tree $tree $callback
+proc mi_walk_varobj_tree {language tree \
+			      {callback \
+				   mi_varobj_tree_test_children_callback}} {
+  ::varobj_tree::walk_tree $language $tree $callback
 }
diff --git a/gdb/testsuite/lib/trace-support.exp b/gdb/testsuite/lib/trace-support.exp
index ef28ec8..35a8a9d 100644
--- a/gdb/testsuite/lib/trace-support.exp
+++ b/gdb/testsuite/lib/trace-support.exp
@@ -301,3 +301,15 @@ proc gdb_find_recursion_test_baseline { filename } {
     }
     return $baseline;
 }
+
+# Return the location of the IPA library.
+
+proc get_in_proc_agent {} {
+    global objdir
+
+    if [target_info exists in_proc_agent] {
+	return [target_info in_proc_agent]
+    } else {
+	return $objdir/../gdbserver/libinproctrace.so
+    }
+}
diff --git a/gdb/thread.c b/gdb/thread.c
index 9a29383..ff5220d 100644
--- a/gdb/thread.c
+++ b/gdb/thread.c
@@ -54,7 +54,7 @@ void _initialize_thread (void);
 
 /* Prototypes for local functions.  */
 
-static struct thread_info *thread_list = NULL;
+struct thread_info *thread_list = NULL;
 static int highest_thread_num;
 
 static void thread_command (char *tidstr, int from_tty);
@@ -113,12 +113,12 @@ clear_thread_inferior_resources (struct thread_info *tp)
       tp->control.exception_resume_breakpoint = NULL;
     }
 
+  delete_longjmp_breakpoint_at_next_stop (tp->num);
+
   bpstat_clear (&tp->control.stop_bpstat);
 
   do_all_intermediate_continuations_thread (tp, 1);
   do_all_continuations_thread (tp, 1);
-
-  delete_longjmp_breakpoint (tp->num);
 }
 
 static void
@@ -1072,6 +1072,7 @@ struct current_thread_cleanup
   int selected_frame_level;
   int was_stopped;
   int inf_id;
+  int was_removable;
 };
 
 static void
@@ -1112,10 +1113,14 @@ restore_current_thread_cleanup_dtor (void *arg)
 {
   struct current_thread_cleanup *old = arg;
   struct thread_info *tp;
+  struct inferior *inf;
 
   tp = find_thread_ptid (old->inferior_ptid);
   if (tp)
     tp->refcount--;
+  inf = find_inferior_id (old->inf_id);
+  if (inf != NULL)
+    inf->removable = old->was_removable;
   xfree (old);
 }
 
@@ -1129,6 +1134,7 @@ make_cleanup_restore_current_thread (void)
   old = xmalloc (sizeof (struct current_thread_cleanup));
   old->inferior_ptid = inferior_ptid;
   old->inf_id = current_inferior ()->num;
+  old->was_removable = current_inferior ()->removable;
 
   if (!ptid_equal (inferior_ptid, null_ptid))
     {
@@ -1156,6 +1162,8 @@ make_cleanup_restore_current_thread (void)
 	tp->refcount++;
     }
 
+  current_inferior ()->removable = 0;
+
   return make_cleanup_dtor (do_restore_current_thread_cleanup, old,
 			    restore_current_thread_cleanup_dtor);
 }
@@ -1431,7 +1439,8 @@ update_thread_list (void)
    no thread is selected, or no threads exist.  */
 
 static struct value *
-thread_id_make_value (struct gdbarch *gdbarch, struct internalvar *var)
+thread_id_make_value (struct gdbarch *gdbarch, struct internalvar *var,
+		      void *ignore)
 {
   struct thread_info *tp = find_thread_ptid (inferior_ptid);
 
@@ -1442,6 +1451,15 @@ thread_id_make_value (struct gdbarch *gdbarch, struct internalvar *var)
 /* Commands with a prefix of `thread'.  */
 struct cmd_list_element *thread_cmd_list = NULL;
 
+/* Implementation of `thread' variable.  */
+
+static const struct internalvar_funcs thread_funcs =
+{
+  thread_id_make_value,
+  NULL,
+  NULL
+};
+
 void
 _initialize_thread (void)
 {
@@ -1487,5 +1505,5 @@ Show printing of thread events (such as thread start and exit)."), NULL,
          show_print_thread_events,
          &setprintlist, &showprintlist);
 
-  create_internalvar_type_lazy ("_thread", thread_id_make_value);
+  create_internalvar_type_lazy ("_thread", &thread_funcs, NULL);
 }
diff --git a/gdb/tic6x-tdep.c b/gdb/tic6x-tdep.c
index 2661cb2..1fefcf3 100644
--- a/gdb/tic6x-tdep.c
+++ b/gdb/tic6x-tdep.c
@@ -146,7 +146,7 @@ static int tic6x_register_number (int reg, int side, int crosspath);
    Bail out early if CURRENT_PC is reached.  Returns the address of the first
    instruction after the prologue.  */
 
-CORE_ADDR
+static CORE_ADDR
 tic6x_analyze_prologue (struct gdbarch *gdbarch, const CORE_ADDR start_pc,
 			const CORE_ADDR current_pc,
 			struct tic6x_unwind_cache *cache,
@@ -298,10 +298,9 @@ tic6x_analyze_prologue (struct gdbarch *gdbarch, const CORE_ADDR start_pc,
 
 /* This is the implementation of gdbarch method skip_prologue.  */
 
-CORE_ADDR
+static CORE_ADDR
 tic6x_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
 {
-  CORE_ADDR limit_pc;
   CORE_ADDR func_addr;
   struct tic6x_unwind_cache cache;
 
@@ -324,7 +323,7 @@ tic6x_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
 
 /* This is the implementation of gdbarch method breakpiont_from_pc.  */
 
-const unsigned char*
+static const unsigned char*
 tic6x_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *bp_addr,
 			  int *bp_size)
 {
@@ -398,14 +397,13 @@ tic6x_unwind_sp (struct gdbarch *gdbarch, struct frame_info *this_frame)
 
 /* Frame base handling.  */
 
-struct tic6x_unwind_cache*
+static struct tic6x_unwind_cache*
 tic6x_frame_unwind_cache (struct frame_info *this_frame,
 			  void **this_prologue_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   CORE_ADDR current_pc;
   struct tic6x_unwind_cache *cache;
-  int i;
 
   if (*this_prologue_cache)
     return *this_prologue_cache;
@@ -606,7 +604,6 @@ tic6x_get_next_pc (struct frame_info *frame, CORE_ADDR pc)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
   unsigned long inst;
-  int offset;
   int register_number;
   int last = 0;
 
@@ -698,7 +695,7 @@ tic6x_get_next_pc (struct frame_info *frame, CORE_ADDR pc)
 
 /* This is the implementation of gdbarch method software_single_step.  */
 
-int
+static int
 tic6x_software_single_step (struct frame_info *frame)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
@@ -821,10 +818,23 @@ tic6x_store_return_value (struct type *valtype, struct regcache *regcache,
 /* This is the implementation of gdbarch method return_value.  */
 
 static enum return_value_convention
-tic6x_return_value (struct gdbarch *gdbarch, struct type *func_type,
+tic6x_return_value (struct gdbarch *gdbarch, struct value *function,
 		    struct type *type, struct regcache *regcache,
 		    gdb_byte *readbuf, const gdb_byte *writebuf)
 {
+  /* In C++, when function returns an object, even its size is small
+     enough, it stii has to be passed via reference, pointed by register
+     A3.  */
+  if (current_language->la_language == language_cplus)
+    {
+      if (type != NULL)
+	{
+	  CHECK_TYPEDEF (type);
+	  if (language_pass_by_reference (type))
+	    return RETURN_VALUE_STRUCT_CONVENTION;
+	}
+    }
+
   if (TYPE_LENGTH (type) > 8)
     return RETURN_VALUE_STRUCT_CONVENTION;
 
@@ -915,32 +925,7 @@ tic6x_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
   /* The first arg passed on stack.  Mostly the first 10 args are passed by
      registers.  */
   int first_arg_on_stack = 10;
-  /* If this inf-call is a cpp method call, and return value is passed by
-     reference, this flag is set to 1, otherwise set to 0.  We need this flag
-     because computation of the return location in
-     infcall.c:call_function_by_hand is wrong for C6000 ELF ABI.  In
-     call_function_by_hand, the language is considered first, and then
-     target ABI is considered.  If language_pass_by_reference returns true,
-     the return location is passed as the first parameter to the function,
-     which is conflict with C6000 ELF ABI.  If this flag is true, we should
-     adjust args and return locations accordingly to comply with C6000 ELF
-     ABI.  */
-  int cplus_return_struct_by_reference = 0;
-
-  if (current_language->la_language == language_cplus)
-    {
-      struct type *values_type;
-
-      find_function_addr (function, &values_type);
 
-      if (values_type)
-	{
-	  CHECK_TYPEDEF (values_type);
-	  if (language_pass_by_reference (values_type))
-	    cplus_return_struct_by_reference = 1;
-	}
-
-    }
   /* Set the return address register to point to the entry point of
      the program, where a breakpoint lies in wait.  */
   regcache_cooked_write_unsigned (regcache, TIC6X_RA_REGNUM, bp_addr);
@@ -950,12 +935,6 @@ tic6x_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
      the address in A3.  */
   if (struct_return)
     regcache_cooked_write_unsigned (regcache, 3, struct_addr);
-  else if (cplus_return_struct_by_reference)
-    /* When cplus_return_struct_by_reference is 1, means local variable
-       lang_struct_return in call_function_by_hand is 1, so struct is
-       returned by reference, even STRUCT_RETURN is 0.  Note that STRUCT_ADDR
-       is still valid in this case.  */
-    regcache_cooked_write_unsigned (regcache, 3, struct_addr);
 
   /* Determine the type of this function.  */
   func_type = check_typedef (func_type);
@@ -970,10 +949,8 @@ tic6x_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
   if (TYPE_VARARGS (func_type))
     first_arg_on_stack = TYPE_NFIELDS (func_type) - 1;
 
-  /* Now make space on the stack for the args.  If
-     cplus_return_struct_by_reference is 1, means GDB pass an extra parameter
-     in ARGS, which is useless here, skip it.  */
-  for (argnum = cplus_return_struct_by_reference; argnum < nargs; argnum++)
+  /* Now make space on the stack for the args.  */
+  for (argnum = 0; argnum < nargs; argnum++)
     {
       int len = align_up (TYPE_LENGTH (value_type (args[argnum])), 4);
       if (argnum >= 10 - argreg)
@@ -989,7 +966,7 @@ tic6x_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
   /* Now load as many as possible of the first arguments into
      registers, and push the rest onto the stack.  Loop through args
      from first to last.  */
-  for (argnum = cplus_return_struct_by_reference; argnum < nargs; argnum++)
+  for (argnum = 0; argnum < nargs; argnum++)
     {
       const gdb_byte *val;
       struct value *arg = args[argnum];
@@ -1210,6 +1187,16 @@ tic6x_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
   return 1;
 }
 
+/* This is the implementation of gdbarch method
+   return_in_first_hidden_param_p.  */
+
+static int
+tic6x_return_in_first_hidden_param_p (struct gdbarch *gdbarch,
+				      struct type *type)
+{
+  return 0;
+}
+
 static struct gdbarch *
 tic6x_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 {
@@ -1368,6 +1355,9 @@ tic6x_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
   set_gdbarch_in_function_epilogue_p (gdbarch, tic6x_in_function_epilogue_p);
 
+  set_gdbarch_return_in_first_hidden_param_p (gdbarch,
+					      tic6x_return_in_first_hidden_param_p);
+
   /* Hook in ABI-specific overrides, if they have been registered.  */
   gdbarch_init_osabi (info, gdbarch);
 
@@ -1377,6 +1367,9 @@ tic6x_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   return gdbarch;
 }
 
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_tic6x_tdep;
+
 void
 _initialize_tic6x_tdep (void)
 {
diff --git a/gdb/tilegx-linux-nat.c b/gdb/tilegx-linux-nat.c
new file mode 100644
index 0000000..23acba5
--- /dev/null
+++ b/gdb/tilegx-linux-nat.c
@@ -0,0 +1,187 @@
+/* Native-dependent code for GNU/Linux TILE-Gx.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "inferior.h"
+#include "gdbcore.h"
+#include "regcache.h"
+#include "linux-nat.h"
+
+#include <sys/ptrace.h>
+
+#include "gdb_assert.h"
+#include "gdb_string.h"
+
+#include <sys/procfs.h>
+
+#include "gdb_proc_service.h"
+#include <sys/ptrace.h>
+
+/* Prototypes for supply_gregset etc.  */
+#include "gregset.h"
+
+/* Defines ps_err_e, struct ps_prochandle.  */
+#include "gdb_proc_service.h"
+
+/* The register sets used in GNU/Linux ELF core-dumps are identical to
+   the register sets in `struct user' that is used for a.out
+   core-dumps, and is also used by `ptrace'.  The corresponding types
+   are `elf_gregset_t' for the general-purpose registers (with
+   `elf_greg_t' the type of a single GP register) and `elf_fpregset_t'
+   for the floating-point registers.
+
+   Those types used to be available under the names `gregset_t' and
+   `fpregset_t' too, and this file used those names in the past.  But
+   those names are now used for the register sets used in the
+   `mcontext_t' type, and have a different size and layout.  */
+
+/* Mapping between the general-purpose registers in `struct user'
+   format and GDB's register array layout.  Note that we map the
+   first 56 registers (0 thru 55) one-to-one.  GDB maps the pc to
+   slot 64, but ptrace returns it in slot 56.  */
+static const int regmap[] =
+{
+   0,  1,  2,  3,  4,  5,  6,  7,
+   8,  9, 10, 11, 12, 13, 14, 15,
+  16, 17, 18, 19, 20, 21, 22, 23,
+  24, 25, 26, 27, 28, 29, 30, 31,
+  32, 33, 34, 35, 36, 37, 38, 39,
+  40, 41, 42, 43, 44, 45, 46, 47,
+  48, 49, 50, 51, 52, 53, 54, 55,
+  -1, -1, -1, -1, -1, -1, -1, -1,
+  56
+};
+
+/* Transfering the general-purpose registers between GDB, inferiors
+   and core files.  */
+
+/* Fill GDB's register array with the general-purpose register values
+   in *GREGSETP.  */
+
+void
+supply_gregset (struct regcache* regcache,
+		const elf_gregset_t *gregsetp)
+{
+  elf_greg_t *regp = (elf_greg_t *) gregsetp;
+  int i;
+
+  for (i = 0; i < sizeof (regmap) / sizeof (regmap[0]); i++)
+    if (regmap[i] >= 0)
+      regcache_raw_supply (regcache, i, regp + regmap[i]);
+}
+
+/* Fill registers in *GREGSETPS with the values in GDB's
+   register array.  */
+
+void
+fill_gregset (const struct regcache* regcache,
+	      elf_gregset_t *gregsetp, int regno)
+{
+  elf_greg_t *regp = (elf_greg_t *) gregsetp;
+  int i;
+
+  for (i = 0; i < sizeof (regmap) / sizeof (regmap[0]); i++)
+    if (regmap[i] >= 0)
+      regcache_raw_collect (regcache, i, regp + regmap[i]);
+}
+
+/* Transfering floating-point registers between GDB, inferiors and cores.  */
+
+/* Fill GDB's register array with the floating-point register values in
+   *FPREGSETP.  */
+
+void
+supply_fpregset (struct regcache *regcache,
+		 const elf_fpregset_t *fpregsetp)
+{
+  /* NOTE: There are no floating-point registers for TILE-Gx.  */
+}
+
+/* Fill register REGNO (if it is a floating-point register) in
+   *FPREGSETP with the value in GDB's register array.  If REGNO is -1,
+   do this for all registers.  */
+
+void
+fill_fpregset (const struct regcache *regcache,
+	       elf_fpregset_t *fpregsetp, int regno)
+{
+  /* NOTE: There are no floating-point registers for TILE-Gx.  */
+}
+
+/* Fetch register REGNUM from the inferior.  If REGNUM is -1, do this
+   for all registers.  */
+
+static void
+fetch_inferior_registers (struct target_ops *ops,
+			  struct regcache *regcache, int regnum)
+{
+  elf_gregset_t regs;
+  int tid;
+
+  tid = ptid_get_lwp (inferior_ptid);
+  if (tid == 0)
+    tid = ptid_get_pid (inferior_ptid);
+
+  if (ptrace (PTRACE_GETREGS, tid, 0, (PTRACE_TYPE_ARG3) &regs) < 0)
+    perror_with_name (_("Couldn't get registers"));
+
+  supply_gregset (regcache, (const elf_gregset_t *)&regs);
+}
+
+/* Store register REGNUM back into the inferior.  If REGNUM is -1, do
+   this for all registers.  */
+
+static void
+store_inferior_registers (struct target_ops *ops,
+			  struct regcache *regcache, int regnum)
+{
+  elf_gregset_t regs;
+  int tid;
+
+  tid = ptid_get_lwp (inferior_ptid);
+  if (tid == 0)
+    tid = ptid_get_pid (inferior_ptid);
+
+  if (ptrace (PTRACE_GETREGS, tid, 0, (PTRACE_TYPE_ARG3) &regs) < 0)
+    perror_with_name (_("Couldn't get registers"));
+
+  fill_gregset (regcache, &regs, regnum);
+
+  if (ptrace (PTRACE_SETREGS, tid, 0, (PTRACE_TYPE_ARG3) &regs) < 0)
+    perror_with_name (_("Couldn't write registers"));
+}
+
+
+extern initialize_file_ftype _initialize_tile_linux_nat;
+
+void
+_initialize_tile_linux_nat (void)
+{
+  struct target_ops *t;
+
+  /* Fill in the generic GNU/Linux methods.  */
+  t = linux_target ();
+
+  /* Add our register access methods.  */
+  t->to_fetch_registers = fetch_inferior_registers;
+  t->to_store_registers = store_inferior_registers;
+
+  /* Register the target.  */
+  linux_nat_add_target (t);
+}
diff --git a/gdb/tilegx-linux-tdep.c b/gdb/tilegx-linux-tdep.c
new file mode 100644
index 0000000..2b7677d
--- /dev/null
+++ b/gdb/tilegx-linux-tdep.c
@@ -0,0 +1,146 @@
+/* Target-dependent code for GNU/Linux on Tilera TILE-Gx processors.
+
+   Copyright 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "osabi.h"
+#include "linux-tdep.h"
+#include "glibc-tdep.h"
+#include "solib-svr4.h"
+#include "symtab.h"
+#include "regcache.h"
+#include "regset.h"
+#include "tramp-frame.h"
+#include "trad-frame.h"
+#include "tilegx-tdep.h"
+
+/* Signal trampoline support.  */
+
+static void
+tilegx_linux_sigframe_init (const struct tramp_frame *self,
+			    struct frame_info *this_frame,
+			    struct trad_frame_cache *this_cache,
+			    CORE_ADDR func)
+{
+  CORE_ADDR pc = get_frame_register_unsigned (this_frame, 64);
+  CORE_ADDR sp = get_frame_register_unsigned (this_frame, 54);
+  CORE_ADDR base = sp + 16;
+  int i;
+
+  for (i = 0; i < 56; i++)
+    trad_frame_set_reg_addr (this_cache, i, base + i * 8);
+
+  trad_frame_set_reg_value (this_cache, 64, pc);
+
+  /* Save a frame ID.  */
+  trad_frame_set_id (this_cache, frame_id_build (base, func));
+}
+
+static const struct tramp_frame tilegx_linux_rt_sigframe =
+{
+  SIGTRAMP_FRAME,
+  8,
+  {
+    { 0x00045fe551483000ULL, -1 }, /* { moveli r10, 139 } */
+    { 0x286b180051485000ULL, -1 }, /* { swint1 } */
+    { TRAMP_SENTINEL_INSN, -1 }
+  },
+  tilegx_linux_sigframe_init
+};
+
+/* Supply raw registers from REGCACHE to REGS.  */
+
+static void
+tilegx_linux_supply_regset (const struct regset *regset,
+			    struct regcache *regcache,
+			    int regnum, const void *regs, size_t len)
+{
+  struct gdbarch *arch = get_regcache_arch (regcache);
+  const char *ptr = regs;
+  int i;
+
+  /* This logic must match that of struct pt_regs in "ptrace.h".  */
+  for (i = 0; i < TILEGX_NUM_EASY_REGS + 1; i++, ptr += tilegx_reg_size)
+    {
+      int gri = (i < TILEGX_NUM_EASY_REGS) ? i : TILEGX_PC_REGNUM;
+
+      if (regnum == gri || regnum == -1)
+	regcache_raw_supply (regcache, gri, ptr);
+    }
+}
+
+/* TILE-Gx Linux kernel register set.  */
+static struct regset tilegx_linux_regset =
+{
+  NULL,
+  tilegx_linux_supply_regset
+};
+
+static const struct regset *
+tilegx_regset_from_core_section (struct gdbarch *gdbarch,
+				 const char *sect_name,
+				 size_t sect_size)
+{
+  if (strcmp (sect_name, ".reg") == 0)
+    return &tilegx_linux_regset;
+
+  return NULL;
+}
+
+/* OS specific initialization of gdbarch.  */
+
+static void
+tilegx_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  int arch_size = gdbarch_addr_bit (gdbarch);
+
+  linux_init_abi (info, gdbarch);
+
+  tramp_frame_prepend_unwinder (gdbarch, &tilegx_linux_rt_sigframe);
+
+  set_gdbarch_regset_from_core_section (gdbarch,
+					tilegx_regset_from_core_section);
+
+  /* GNU/Linux uses SVR4-style shared libraries.  */
+  if (arch_size == 32)
+    set_solib_svr4_fetch_link_map_offsets (gdbarch,
+					   svr4_ilp32_fetch_link_map_offsets);
+  else
+    set_solib_svr4_fetch_link_map_offsets (gdbarch,
+					   svr4_lp64_fetch_link_map_offsets);
+
+  /* Enable TLS support.  */
+  set_gdbarch_fetch_tls_load_module_address (gdbarch,
+					     svr4_fetch_objfile_link_map);
+
+  /* Shared library handling.  */
+  set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
+  set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver);
+
+  set_gdbarch_get_siginfo_type (gdbarch, linux_get_siginfo_type);
+}
+
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_tilegx_linux_tdep;
+
+void
+_initialize_tilegx_linux_tdep (void)
+{
+  gdbarch_register_osabi (bfd_arch_tilegx, bfd_mach_tilegx, GDB_OSABI_LINUX,
+			  tilegx_linux_init_abi);
+}
diff --git a/gdb/tilegx-tdep.c b/gdb/tilegx-tdep.c
new file mode 100644
index 0000000..9ec3aaa
--- /dev/null
+++ b/gdb/tilegx-tdep.c
@@ -0,0 +1,1017 @@
+/* Target-dependent code for the Tilera TILE-Gx processor.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "frame.h"
+#include "frame-base.h"
+#include "frame-unwind.h"
+#include "dwarf2-frame.h"
+#include "trad-frame.h"
+#include "symtab.h"
+#include "gdbtypes.h"
+#include "gdbcmd.h"
+#include "gdbcore.h"
+#include "value.h"
+#include "dis-asm.h"
+#include "inferior.h"
+#include "gdb_string.h"
+#include "gdb_assert.h"
+#include "arch-utils.h"
+#include "floatformat.h"
+#include "regcache.h"
+#include "regset.h"
+#include "doublest.h"
+#include "osabi.h"
+#include "linux-tdep.h"
+#include "objfiles.h"
+#include "solib-svr4.h"
+#include "symtab.h"
+#include "tilegx-tdep.h"
+#include "opcode/tilegx.h"
+
+struct tilegx_frame_cache
+{
+  /* Base address.  */
+  CORE_ADDR base;
+  /* Function start.  */
+  CORE_ADDR start_pc;
+
+  /* Table of saved registers.  */
+  struct trad_frame_saved_reg *saved_regs;
+};
+
+/* Register state values used by analyze_prologue.  */
+enum reverse_state
+  {
+    REVERSE_STATE_REGISTER,
+    REVERSE_STATE_VALUE,
+    REVERSE_STATE_UNKNOWN
+  };
+
+/* Register state used by analyze_prologue().  */
+struct tilegx_reverse_regs
+{
+  LONGEST value;
+  enum reverse_state state;
+};
+
+static const struct tilegx_reverse_regs
+template_reverse_regs[TILEGX_NUM_PHYS_REGS] =
+  {
+    { TILEGX_R0_REGNUM,  REVERSE_STATE_REGISTER },
+    { TILEGX_R1_REGNUM,  REVERSE_STATE_REGISTER },
+    { TILEGX_R2_REGNUM,  REVERSE_STATE_REGISTER },
+    { TILEGX_R3_REGNUM,  REVERSE_STATE_REGISTER },
+    { TILEGX_R4_REGNUM,  REVERSE_STATE_REGISTER },
+    { TILEGX_R5_REGNUM,  REVERSE_STATE_REGISTER },
+    { TILEGX_R6_REGNUM,  REVERSE_STATE_REGISTER },
+    { TILEGX_R7_REGNUM,  REVERSE_STATE_REGISTER },
+    { TILEGX_R8_REGNUM,  REVERSE_STATE_REGISTER },
+    { TILEGX_R9_REGNUM,  REVERSE_STATE_REGISTER },
+    { TILEGX_R10_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R11_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R12_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R13_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R14_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R15_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R16_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R17_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R18_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R19_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R20_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R21_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R22_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R23_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R24_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R25_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R26_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R27_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R28_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R29_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R30_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R31_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R32_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R33_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R34_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R35_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R36_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R37_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R38_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R39_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R40_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R41_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R42_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R43_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R44_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R45_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R46_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R47_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R48_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R49_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R50_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R51_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_R52_REGNUM, REVERSE_STATE_REGISTER },
+    { TILEGX_TP_REGNUM,  REVERSE_STATE_REGISTER },
+    { TILEGX_SP_REGNUM,  REVERSE_STATE_REGISTER },
+    { TILEGX_LR_REGNUM,  REVERSE_STATE_REGISTER },
+    { 0, REVERSE_STATE_UNKNOWN },
+    { 0, REVERSE_STATE_UNKNOWN },
+    { 0, REVERSE_STATE_UNKNOWN },
+    { 0, REVERSE_STATE_UNKNOWN },
+    { 0, REVERSE_STATE_UNKNOWN },
+    { 0, REVERSE_STATE_UNKNOWN },
+    { 0, REVERSE_STATE_UNKNOWN },
+    { TILEGX_ZERO_REGNUM, REVERSE_STATE_VALUE }
+  };
+
+/* Implement the "register_name" gdbarch method.  */
+
+static const char *
+tilegx_register_name (struct gdbarch *gdbarch, int regnum)
+{
+  static const char *const register_names[TILEGX_NUM_REGS] =
+    {
+      "r0",   "r1",   "r2",   "r3",   "r4",   "r5",   "r6",   "r7",
+      "r8",   "r9",   "r10",  "r11",  "r12",  "r13",  "r14",  "r15",
+      "r16",  "r17",  "r18",  "r19",  "r20",  "r21",  "r22",  "r23",
+      "r24",  "r25",  "r26",  "r27",  "r28",  "r29",  "r30",  "r31",
+      "r32",  "r33",  "r34",  "r35",  "r36",  "r37",  "r38",  "r39",
+      "r40",  "r41",  "r42",  "r43",  "r44",  "r45",  "r46",  "r47",
+      "r48",  "r49",  "r50",  "r51",  "r52",  "tp",   "sp",   "lr",
+      "sn",   "idn0", "idn1", "udn0", "udn1", "udn2", "udn3", "zero",
+      "pc"
+    };
+
+  if (regnum < 0 || regnum >= TILEGX_NUM_REGS)
+    internal_error (__FILE__, __LINE__,
+		    "tilegx_register_name: invalid register number %d",
+		    regnum);
+
+  return register_names[regnum];
+}
+
+/* This is the implementation of gdbarch method register_type.  */
+
+static struct type *
+tilegx_register_type (struct gdbarch *gdbarch, int regnum)
+{
+  if (regnum == TILEGX_PC_REGNUM)
+    return builtin_type (gdbarch)->builtin_func_ptr;
+  else
+    return builtin_type (gdbarch)->builtin_uint64;
+}
+
+/* This is the implementation of gdbarch method dwarf2_reg_to_regnum.  */
+
+static int
+tilegx_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int num)
+{
+  return num;
+}
+
+/* Makes the decision of whether a given type is a scalar type.
+   Scalar types are returned in the registers r2-r11 as they fit.  */
+
+static int
+tilegx_type_is_scalar (struct type *t)
+{
+  return (TYPE_CODE(t) != TYPE_CODE_STRUCT
+	  && TYPE_CODE(t) != TYPE_CODE_UNION
+	  && TYPE_CODE(t) != TYPE_CODE_ARRAY);
+}
+
+/* Returns non-zero if the given struct type will be returned using
+   a special convention, rather than the normal function return method.
+   Used in the context of the "return" command, and target function
+   calls from the debugger.  */
+
+static int
+tilegx_use_struct_convention (struct type *type)
+{
+  /* Only scalars which fit in R0 - R9 can be returned in registers.
+     Otherwise, they are returned via a pointer passed in R0.  */
+  return (!tilegx_type_is_scalar (type)
+	  && (TYPE_LENGTH (type) > (1 + TILEGX_R9_REGNUM - TILEGX_R0_REGNUM)
+	      * tilegx_reg_size));
+}
+
+/* Find a function's return value in the appropriate registers (in
+   REGCACHE), and copy it into VALBUF.  */
+
+static void
+tilegx_extract_return_value (struct type *type, struct regcache *regcache,
+			     gdb_byte *valbuf)
+{
+  int len = TYPE_LENGTH (type);
+  int i, regnum = TILEGX_R0_REGNUM;
+
+  for (i = 0; i < len; i += tilegx_reg_size)
+    regcache_raw_read (regcache, regnum++, valbuf + i);
+}
+
+/* Copy the function return value from VALBUF into the proper
+   location for a function return.
+   Called only in the context of the "return" command.  */
+
+static void
+tilegx_store_return_value (struct type *type, struct regcache *regcache,
+			   const void *valbuf)
+{
+  if (TYPE_LENGTH (type) < tilegx_reg_size)
+    {
+      /* Add leading zeros to the (little-endian) value.  */
+      gdb_byte buf[tilegx_reg_size] = { 0 };
+
+      memcpy (buf, valbuf, TYPE_LENGTH (type));
+      regcache_raw_write (regcache, TILEGX_R0_REGNUM, buf);
+    }
+  else
+    {
+      int len = TYPE_LENGTH (type);
+      int i, regnum = TILEGX_R0_REGNUM;
+
+      for (i = 0; i < len; i += tilegx_reg_size)
+	regcache_raw_write (regcache, regnum++, (gdb_byte *) valbuf + i);
+    }
+}
+
+/* This is the implementation of gdbarch method return_value.  */
+
+static enum return_value_convention
+tilegx_return_value (struct gdbarch *gdbarch, struct value *function,
+		     struct type *type, struct regcache *regcache,
+		     gdb_byte *readbuf, const gdb_byte *writebuf)
+{
+  if (tilegx_use_struct_convention (type))
+    return RETURN_VALUE_STRUCT_CONVENTION;
+  if (writebuf)
+    tilegx_store_return_value (type, regcache, writebuf);
+  else if (readbuf)
+    tilegx_extract_return_value (type, regcache, readbuf);
+  return RETURN_VALUE_REGISTER_CONVENTION;
+}
+
+/* This is the implementation of gdbarch method frame_align.  */
+
+static CORE_ADDR
+tilegx_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
+{
+  return addr & -8;
+}
+
+
+/* Implement the "push_dummy_call" gdbarch method.  */
+
+static CORE_ADDR
+tilegx_push_dummy_call (struct gdbarch *gdbarch,
+			struct value *function,
+			struct regcache *regcache,
+			CORE_ADDR bp_addr, int nargs,
+			struct value **args,
+			CORE_ADDR sp, int struct_return,
+			CORE_ADDR struct_addr)
+{
+  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+  CORE_ADDR stack_dest = sp;
+  int argreg = TILEGX_R0_REGNUM;
+  int i, j;
+  int typelen, slacklen, alignlen;
+  static const gdb_byte two_zero_words[8] = { 0 };
+
+  /* If struct_return is 1, then the struct return address will
+     consume one argument-passing register.  */
+  if (struct_return)
+    regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
+
+  /* Arguments are passed in R0 - R9, and as soon as an argument
+     will not fit completely in the remaining registers, then it,
+     and all remaining arguments, are put on the stack.  */
+  for (i = 0; i < nargs && argreg <= TILEGX_R9_REGNUM; i++)
+    {
+      const gdb_byte *val;
+      typelen = TYPE_LENGTH (value_enclosing_type (args[i]));
+
+      if (typelen > (TILEGX_R9_REGNUM - argreg + 1) * tilegx_reg_size)
+	break;
+
+      /* Put argument into registers wordwise.	*/
+      val = value_contents (args[i]);
+      for (j = 0; j < typelen; j += tilegx_reg_size)
+	{
+	  /* ISSUE: Why special handling for "typelen = 4x + 1"?
+	     I don't ever see "typelen" values except 4 and 8.	*/
+	  int n = (typelen - j == 1) ? 1 : tilegx_reg_size;
+	  ULONGEST w = extract_unsigned_integer (val + j, n, byte_order);
+
+	  regcache_cooked_write_unsigned (regcache, argreg++, w);
+	}
+    }
+
+  /* Align SP.  */
+  stack_dest = tilegx_frame_align (gdbarch, stack_dest);
+
+  /* Loop backwards through arguments to determine stack alignment.  */
+  alignlen = 0;
+
+  for (j = nargs - 1; j >= i; j--)
+    {
+      typelen = TYPE_LENGTH (value_enclosing_type (args[j]));
+      alignlen += (typelen + 3) & (~3);
+    }
+
+  if (alignlen & 0x4)
+    stack_dest -= 4;
+
+  /* Loop backwards through remaining arguments and push them on
+     the stack, word aligned.  */
+  for (j = nargs - 1; j >= i; j--)
+    {
+      gdb_byte *val;
+
+      typelen = TYPE_LENGTH (value_enclosing_type (args[j]));
+      slacklen = ((typelen + 3) & (~3)) - typelen;
+      val = alloca (typelen + slacklen);
+      memcpy (val, value_contents (args[j]), typelen);
+      memset (val + typelen, 0, slacklen);
+
+      /* Now write data to the stack.  The stack grows downwards.  */
+      stack_dest -= typelen + slacklen;
+      write_memory (stack_dest, val, typelen + slacklen);
+    }
+
+  /* Add 2 words for linkage space to the stack.  */
+  stack_dest = stack_dest - 8;
+  write_memory (stack_dest, two_zero_words, 8);
+
+  /* Update stack pointer.  */
+  regcache_cooked_write_unsigned (regcache, TILEGX_SP_REGNUM, stack_dest);
+
+  /* Set the return address register to point to the entry point of
+     the program, where a breakpoint lies in wait.  */
+  regcache_cooked_write_unsigned (regcache, TILEGX_LR_REGNUM, bp_addr);
+
+  return stack_dest;
+}
+
+
+/* Decode the instructions within the given address range.
+   Decide when we must have reached the end of the function prologue.
+   If a frame_info pointer is provided, fill in its saved_regs etc.
+   Returns the address of the first instruction after the prologue.
+   NOTE: This is often called with start_addr being the start of some
+   function, and end_addr being the current PC.  */
+
+static CORE_ADDR
+tilegx_analyze_prologue (struct gdbarch* gdbarch,
+			 CORE_ADDR start_addr, CORE_ADDR end_addr,
+			 struct tilegx_frame_cache *cache,
+			 struct frame_info *next_frame)
+{
+  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+  CORE_ADDR next_addr;
+  CORE_ADDR prolog_end = end_addr;
+  ULONGEST inst, inst2;
+  LONGEST offset;
+  int regnum;
+  gdb_byte instbuf[32 * TILEGX_BUNDLE_SIZE_IN_BYTES];
+  CORE_ADDR instbuf_start;
+  unsigned int instbuf_size;
+  int status;
+  bfd_uint64_t bundle;
+  struct tilegx_decoded_instruction
+    decoded[TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE];
+  int num_insns;
+  struct tilegx_reverse_regs reverse_frame[TILEGX_NUM_PHYS_REGS];
+  struct tilegx_reverse_regs
+    new_reverse_frame[TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE];
+  int dest_regs[TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE];
+  int reverse_frame_valid, prolog_done, branch_seen;
+  LONGEST prev_sp_value;
+  int i, j;
+
+  if (start_addr >= end_addr
+      || (start_addr % TILEGX_BUNDLE_ALIGNMENT_IN_BYTES) != 0)
+    return end_addr;
+
+  /* Initialize the reverse frame.  This maps the CURRENT frame's
+     registers to the outer frame's registers (the frame on the
+     stack goes the other way).  */
+  memcpy (&reverse_frame, &template_reverse_regs, sizeof (reverse_frame));
+
+  prolog_done = 0;
+  branch_seen = 0;
+  prev_sp_value = 0;
+
+  /* To cut down on round-trip overhead, we fetch multiple bundles
+     at once.  These variables describe the range of memory we have
+     prefetched.  */
+  instbuf_start = 0;
+  instbuf_size = 0;
+
+  for (next_addr = start_addr;
+       next_addr < end_addr;
+       next_addr += TILEGX_BUNDLE_SIZE_IN_BYTES)
+    {
+      /* Retrieve the next instruction.  */
+      if (next_addr - instbuf_start >= instbuf_size)
+	{
+	  /* Figure out how many bytes to fetch.  Don't span a page
+	     boundary since that might cause an unnecessary memory
+	     error.  */
+	  unsigned int size_on_same_page = 4096 - (next_addr & 4095);
+
+	  instbuf_size = sizeof instbuf;
+
+	  if (instbuf_size > size_on_same_page)
+	    instbuf_size = size_on_same_page;
+	  instbuf_start = next_addr;
+
+	  status = safe_frame_unwind_memory (next_frame, instbuf_start,
+					     instbuf, instbuf_size);
+	  if (status == 0)
+	    memory_error (status, next_addr);
+	}
+
+      reverse_frame_valid = 0;
+
+      bundle = extract_unsigned_integer (&instbuf[next_addr - instbuf_start],
+					 8, byte_order);
+
+      num_insns = parse_insn_tilegx (bundle, next_addr, decoded);
+
+      for (i = 0; i < num_insns; i++)
+	{
+	  struct tilegx_decoded_instruction *this_insn = &decoded[i];
+	  int64_t *operands = (int64_t *) this_insn->operand_values;
+	  const struct tilegx_opcode *opcode = this_insn->opcode;
+
+	  switch (opcode->mnemonic)
+	    {
+	    case TILEGX_OPC_ST:
+	      if (cache
+		  && reverse_frame[operands[0]].state == REVERSE_STATE_VALUE
+		  && reverse_frame[operands[1]].state
+		  == REVERSE_STATE_REGISTER)
+		{
+		  LONGEST saved_address = reverse_frame[operands[0]].value;
+		  unsigned saved_register
+		    = (unsigned) reverse_frame[operands[1]].value;
+
+		  /* realreg >= 0 and addr != -1 indicates that the
+		     value of saved_register is in memory location
+		     saved_address.  The value of realreg is not
+		     meaningful in this case but it must be >= 0.
+		     See trad-frame.h.  */
+		  cache->saved_regs[saved_register].realreg = saved_register;
+		  cache->saved_regs[saved_register].addr = saved_address;
+		}
+	      break;
+	    case TILEGX_OPC_ADDI:
+	    case TILEGX_OPC_ADDLI:
+	      if (cache
+		  && operands[0] == TILEGX_SP_REGNUM
+		  && operands[1] == TILEGX_SP_REGNUM
+		  && reverse_frame[operands[1]].state == REVERSE_STATE_REGISTER)
+		{
+		  /* Special case.  We're fixing up the stack frame.  */
+		  uint64_t hopefully_sp
+		    = (unsigned) reverse_frame[operands[1]].value;
+		  short op2_as_short = (short) operands[2];
+		  signed char op2_as_char = (signed char) operands[2];
+
+		  /* Fix up the sign-extension.  */
+		  if (opcode->mnemonic == TILEGX_OPC_ADDI)
+		    op2_as_short = op2_as_char;
+		  prev_sp_value = (cache->saved_regs[hopefully_sp].addr
+				   - op2_as_short);
+
+		  new_reverse_frame[i].state = REVERSE_STATE_VALUE;
+		  new_reverse_frame[i].value
+		    = cache->saved_regs[hopefully_sp].addr;
+		  trad_frame_set_value (cache->saved_regs,
+					hopefully_sp, prev_sp_value);
+		}
+	      else
+		{
+		  short op2_as_short = (short) operands[2];
+		  signed char op2_as_char = (signed char) operands[2];
+
+		  /* Fix up the sign-extension.  */
+		  if (opcode->mnemonic == TILEGX_OPC_ADDI)
+		    op2_as_short = op2_as_char;
+
+		  new_reverse_frame[i] = reverse_frame[operands[1]];
+		  if (new_reverse_frame[i].state == REVERSE_STATE_VALUE)
+		    new_reverse_frame[i].value += op2_as_short;
+		  else
+		    new_reverse_frame[i].state = REVERSE_STATE_UNKNOWN;
+		}
+	      reverse_frame_valid |= 1 << i;
+	      dest_regs[i] = operands[0];
+	      break;
+	    case TILEGX_OPC_ADD:
+	      if (reverse_frame[operands[1]].state == REVERSE_STATE_VALUE
+		  && reverse_frame[operands[2]].state == REVERSE_STATE_VALUE)
+		{
+		  /* We have values -- we can do this.  */
+		  new_reverse_frame[i] = reverse_frame[operands[2]];
+		  new_reverse_frame[i].value
+		    += reverse_frame[operands[i]].value;
+		}
+	      else
+		{
+		  /* We don't know anything about the values.  Punt.  */
+		  new_reverse_frame[i].state = REVERSE_STATE_UNKNOWN;
+		}
+	      reverse_frame_valid |= 1 << i;
+	      dest_regs[i] = operands[0];
+	      break;
+	    case TILEGX_OPC_MOVE:
+	      new_reverse_frame[i] = reverse_frame[operands[1]];
+	      reverse_frame_valid |= 1 << i;
+	      dest_regs[i] = operands[0];
+	      break;
+	    case TILEGX_OPC_MOVEI:
+	    case TILEGX_OPC_MOVELI:
+	      new_reverse_frame[i].state = REVERSE_STATE_VALUE;
+	      new_reverse_frame[i].value = operands[1];
+	      reverse_frame_valid |= 1 << i;
+	      dest_regs[i] = operands[0];
+	      break;
+	    case TILEGX_OPC_ORI:
+	      if (reverse_frame[operands[1]].state == REVERSE_STATE_VALUE)
+		{
+		  /* We have a value in A -- we can do this.  */
+		  new_reverse_frame[i] = reverse_frame[operands[1]];
+		  new_reverse_frame[i].value
+		    = reverse_frame[operands[1]].value | operands[2];
+		}
+	      else if (operands[2] == 0)
+		{
+		  /* This is a move.  */
+		  new_reverse_frame[i] = reverse_frame[operands[1]];
+		}
+	      else
+		{
+		  /* We don't know anything about the values.  Punt.  */
+		  new_reverse_frame[i].state = REVERSE_STATE_UNKNOWN;
+		}
+	      reverse_frame_valid |= 1 << i;
+	      dest_regs[i] = operands[0];
+	      break;
+	    case TILEGX_OPC_OR:
+	      if (reverse_frame[operands[1]].state == REVERSE_STATE_VALUE
+		  && reverse_frame[operands[1]].value == 0)
+		{
+		  /* This is a move.  */
+		  new_reverse_frame[i] = reverse_frame[operands[2]];
+		}
+	      else if (reverse_frame[operands[2]].state == REVERSE_STATE_VALUE
+		       && reverse_frame[operands[2]].value == 0)
+		{
+		  /* This is a move.  */
+		  new_reverse_frame[i] = reverse_frame[operands[1]];
+		}
+	      else
+		{
+		  /* We don't know anything about the values.  Punt.  */
+		  new_reverse_frame[i].state = REVERSE_STATE_UNKNOWN;
+		}
+	      reverse_frame_valid |= 1 << i;
+	      dest_regs[i] = operands[0];
+	      break;
+	    case TILEGX_OPC_SUB:
+	      if (reverse_frame[operands[1]].state == REVERSE_STATE_VALUE
+		  && reverse_frame[operands[2]].state == REVERSE_STATE_VALUE)
+		{
+		  /* We have values -- we can do this.  */
+		  new_reverse_frame[i] = reverse_frame[operands[1]];
+		  new_reverse_frame[i].value
+		    -= reverse_frame[operands[2]].value;
+		}
+	      else
+		{
+		  /* We don't know anything about the values.  Punt.  */
+		  new_reverse_frame[i].state = REVERSE_STATE_UNKNOWN;
+		}
+	      reverse_frame_valid |= 1 << i;
+	      dest_regs[i] = operands[0];
+	      break;
+
+	    case TILEGX_OPC_FNOP:
+	    case TILEGX_OPC_INFO:
+	    case TILEGX_OPC_INFOL:
+	      /* Nothing to see here, move on.
+		 Note that real NOP is treated as a 'real' instruction
+		 because someone must have intended that it be there.
+		 It therefore terminates the prolog.  */
+	      break;
+
+	    case TILEGX_OPC_J:
+	    case TILEGX_OPC_JAL:
+
+	    case TILEGX_OPC_BEQZ:
+	    case TILEGX_OPC_BEQZT:
+	    case TILEGX_OPC_BGEZ:
+	    case TILEGX_OPC_BGEZT:
+	    case TILEGX_OPC_BGTZ:
+	    case TILEGX_OPC_BGTZT:
+	    case TILEGX_OPC_BLBC:
+	    case TILEGX_OPC_BLBCT:
+	    case TILEGX_OPC_BLBS:
+	    case TILEGX_OPC_BLBST:
+	    case TILEGX_OPC_BLEZ:
+	    case TILEGX_OPC_BLEZT:
+	    case TILEGX_OPC_BLTZ:
+	    case TILEGX_OPC_BLTZT:
+	    case TILEGX_OPC_BNEZ:
+	    case TILEGX_OPC_BNEZT:
+
+	    case TILEGX_OPC_IRET:
+	    case TILEGX_OPC_JALR:
+	    case TILEGX_OPC_JALRP:
+	    case TILEGX_OPC_JR:
+	    case TILEGX_OPC_JRP:
+	    case TILEGX_OPC_SWINT0:
+	    case TILEGX_OPC_SWINT1:
+	    case TILEGX_OPC_SWINT2:
+	    case TILEGX_OPC_SWINT3:
+	      /* We're really done -- this is a branch.  */
+	      branch_seen = 1;
+	      prolog_done = 1;
+	      break;
+	    default:
+	      /* We don't know or care what this instruction is.
+		 All we know is that it isn't part of a prolog, and if
+		 there's a destination register, we're trashing it.  */
+	      prolog_done = 1;
+	      for (j = 0; j < opcode->num_operands; j++)
+		{
+		  if (this_insn->operands[j]->is_dest_reg)
+		    {
+		      dest_regs[i] = operands[j];
+		      new_reverse_frame[i].state = REVERSE_STATE_UNKNOWN;
+		      reverse_frame_valid |= 1 << i;
+		      break;
+		    }
+		}
+	      break;
+	    }
+	}
+
+      /* Now update the reverse frames.  */
+      for (i = 0; i < num_insns; i++)
+	{
+	  /* ISSUE: Does this properly handle "network" registers?  */
+	  if ((reverse_frame_valid & (1 << i))
+	      && dest_regs[i] != TILEGX_ZERO_REGNUM)
+	    reverse_frame[dest_regs[i]] = new_reverse_frame[i];
+	}
+
+      if (prev_sp_value != 0)
+	{
+	  /* GCC uses R52 as a frame pointer.  Have we seen "move r52, sp"?  */
+	  if (reverse_frame[TILEGX_R52_REGNUM].state == REVERSE_STATE_REGISTER
+	      && reverse_frame[TILEGX_R52_REGNUM].value == TILEGX_SP_REGNUM)
+	  {
+	    reverse_frame[TILEGX_R52_REGNUM].state = REVERSE_STATE_VALUE;
+	    reverse_frame[TILEGX_R52_REGNUM].value = prev_sp_value;
+	  }
+
+	  prev_sp_value = 0;
+	}
+
+      if (prolog_done && prolog_end == end_addr)
+	{
+	  /* We found non-prolog code.	As such, _this_ instruction
+	     is the one after the prolog.  We keep processing, because
+	     there may be more prolog code in there, but this is what
+	     we'll return.  */
+	  /* ISSUE: There may not have actually been a prologue, and
+	     we may have simply skipped some random instructions.  */
+	  prolog_end = next_addr;
+	}
+      if (branch_seen)
+	{
+	  /* We saw a branch.  The prolog absolutely must be over.  */
+	  break;
+	}
+    }
+
+  if (prolog_end == end_addr && cache)
+    {
+      /* We may have terminated the prolog early, and we're certainly
+	 at THIS point right now.  It's possible that the values of
+	 registers we need are currently actually in other registers
+	 (and haven't been written to memory yet).  Go find them.  */
+      for (i = 0; i < TILEGX_NUM_PHYS_REGS; i++)
+	{
+	  if (reverse_frame[i].state == REVERSE_STATE_REGISTER
+	      && reverse_frame[i].value != i)
+	    {
+	      unsigned saved_register = (unsigned) reverse_frame[i].value;
+
+	      cache->saved_regs[saved_register].realreg = i;
+	      cache->saved_regs[saved_register].addr = (LONGEST) -1;
+	    }
+	}
+    }
+
+  return prolog_end;
+}
+
+/* This is the implementation of gdbarch method skip_prologue.  */
+
+static CORE_ADDR
+tilegx_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
+{
+  struct symtab_and_line sal;
+  CORE_ADDR func_start, func_end;
+
+  /* This is the preferred method, find the end of the prologue by
+     using the debugging information.  */
+  if (find_pc_partial_function (pc, NULL, &func_start, &func_end))
+    {
+	sal = find_pc_line (func_start, 0);
+
+	if (sal.end < func_end && pc <= sal.end)
+	  return sal.end;
+    }
+
+  /* Otherwise, try to skip prologue the hard way.  */
+  return tilegx_analyze_prologue (gdbarch,
+				  pc, pc + 8 * TILEGX_BUNDLE_SIZE_IN_BYTES,
+				  NULL, NULL);
+}
+
+/* This is the implementation of gdbarch method in_function_epilogue_p.  */
+
+static int
+tilegx_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
+{
+  CORE_ADDR func_addr = 0, func_end = 0;
+
+  if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
+    {
+      ULONGEST inst, inst2;
+      CORE_ADDR addr = func_end - TILEGX_BUNDLE_SIZE_IN_BYTES;
+
+      /* FIXME: Find the actual epilogue.  */
+      /* HACK: Just assume the final bundle is the "ret" instruction".  */
+      if (pc > addr)
+	return 1;
+    }
+  return 0;
+}
+
+/* This is the implementation of gdbarch method breakpoint_from_pc.  */
+
+static const unsigned char *
+tilegx_breakpoint_from_pc (struct gdbarch *gdbarch,
+			   CORE_ADDR *pcptr, int *lenptr)
+{
+  /* 64-bit pattern for a { bpt ; nop } bundle.  */
+  static const unsigned char breakpoint[] =
+    { 0x00, 0x50, 0x48, 0x51, 0xae, 0x44, 0x6a, 0x28 };
+
+  *lenptr = sizeof (breakpoint);
+  return breakpoint;
+}
+
+/* Normal frames.  */
+
+static struct tilegx_frame_cache *
+tilegx_frame_cache (struct frame_info *this_frame, void **this_cache)
+{
+  struct gdbarch *gdbarch = get_frame_arch (this_frame);
+  struct tilegx_frame_cache *cache;
+  CORE_ADDR current_pc;
+  int i;
+
+  if (*this_cache)
+    return *this_cache;
+
+  cache = FRAME_OBSTACK_ZALLOC (struct tilegx_frame_cache);
+  *this_cache = cache;
+  cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
+  cache->base = 0;
+  cache->start_pc = get_frame_func (this_frame);
+  current_pc = get_frame_pc (this_frame);
+
+  cache->base = get_frame_register_unsigned (this_frame, TILEGX_SP_REGNUM);
+  trad_frame_set_value (cache->saved_regs, TILEGX_SP_REGNUM, cache->base);
+
+  cache->saved_regs[TILEGX_PC_REGNUM] = cache->saved_regs[TILEGX_LR_REGNUM];
+  if (cache->start_pc)
+    tilegx_analyze_prologue (gdbarch, cache->start_pc, current_pc,
+			     cache, this_frame);
+
+  return cache;
+}
+
+/* Retrieve the value of REGNUM in FRAME.  */
+
+static struct value*
+tilegx_frame_prev_register (struct frame_info *this_frame,
+			    void **this_cache,
+			    int regnum)
+{
+  struct tilegx_frame_cache *info =
+    tilegx_frame_cache (this_frame, this_cache);
+
+  return trad_frame_get_prev_register (this_frame, info->saved_regs,
+				       regnum);
+}
+
+/* Build frame id.  */
+
+static void
+tilegx_frame_this_id (struct frame_info *this_frame, void **this_cache,
+		      struct frame_id *this_id)
+{
+  struct tilegx_frame_cache *info =
+    tilegx_frame_cache (this_frame, this_cache);
+
+  /* This marks the outermost frame.  */
+  if (info->base == 0)
+    return;
+
+  (*this_id) = frame_id_build (info->base, info->start_pc);
+}
+
+static CORE_ADDR
+tilegx_frame_base_address (struct frame_info *this_frame, void **this_cache)
+{
+  struct tilegx_frame_cache *cache =
+    tilegx_frame_cache (this_frame, this_cache);
+
+  return cache->base;
+}
+
+static const struct frame_unwind tilegx_frame_unwind = {
+  NORMAL_FRAME,
+  default_frame_unwind_stop_reason,
+  tilegx_frame_this_id,
+  tilegx_frame_prev_register,
+  NULL,                        /* const struct frame_data *unwind_data  */
+  default_frame_sniffer,       /* frame_sniffer_ftype *sniffer  */
+  NULL                         /* frame_prev_pc_ftype *prev_pc  */
+};
+
+static const struct frame_base tilegx_frame_base = {
+  &tilegx_frame_unwind,
+  tilegx_frame_base_address,
+  tilegx_frame_base_address,
+  tilegx_frame_base_address
+};
+
+static CORE_ADDR
+tilegx_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
+{
+  return frame_unwind_register_unsigned (next_frame, TILEGX_SP_REGNUM);
+}
+
+static CORE_ADDR
+tilegx_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
+{
+  return frame_unwind_register_unsigned (next_frame, TILEGX_PC_REGNUM);
+}
+
+static struct frame_id
+tilegx_unwind_dummy_id (struct gdbarch *gdbarch,
+			struct frame_info *this_frame)
+{
+  CORE_ADDR sp;
+
+  sp = get_frame_register_unsigned (this_frame, TILEGX_SP_REGNUM);
+  return frame_id_build (sp, get_frame_pc (this_frame));
+}
+
+
+/* We cannot read/write the "special" registers.  */
+
+static int
+tilegx_cannot_reference_register (struct gdbarch *gdbarch, int regno)
+{
+  if (regno >= 0 && regno < TILEGX_NUM_EASY_REGS)
+    return 0;
+  else if (regno == TILEGX_PC_REGNUM)
+    return 0;
+  else
+    return 1;
+}
+
+static struct gdbarch *
+tilegx_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
+{
+  struct gdbarch *gdbarch;
+  int arch_size = 64;
+
+  /* Handle arch_size == 32 or 64.  Default to 64.  */
+  if (info.abfd)
+    arch_size = bfd_get_arch_size (info.abfd);
+
+  /* Try to find a pre-existing architecture.  */
+  for (arches = gdbarch_list_lookup_by_info (arches, &info);
+       arches != NULL;
+       arches = gdbarch_list_lookup_by_info (arches->next, &info))
+    {
+      /* We only have two flavors -- just make sure arch_size matches.  */
+      if (gdbarch_ptr_bit (arches->gdbarch) == arch_size)
+	return (arches->gdbarch);
+    }
+
+  gdbarch = gdbarch_alloc (&info, NULL);
+
+  /* Basic register fields and methods, datatype sizes and stuff.  */
+
+  /* There are 64 physical registers which can be referenced by
+     instructions (although only 56 of them can actually be
+     debugged) and 1 magic register (the PC).  The other three
+     magic registers (ex1, syscall, orig_r0) which are known to
+     "ptrace" are ignored by "gdb".  Note that we simply pretend
+     that there are 65 registers, and no "pseudo registers".  */
+  set_gdbarch_num_regs (gdbarch, TILEGX_NUM_REGS);
+  set_gdbarch_num_pseudo_regs (gdbarch, 0);
+
+  set_gdbarch_sp_regnum (gdbarch, TILEGX_SP_REGNUM);
+  set_gdbarch_pc_regnum (gdbarch, TILEGX_PC_REGNUM);
+
+  set_gdbarch_register_name (gdbarch, tilegx_register_name);
+  set_gdbarch_register_type (gdbarch, tilegx_register_type);
+
+  set_gdbarch_char_signed (gdbarch, 0);
+  set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
+  set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT);
+  set_gdbarch_long_bit (gdbarch, arch_size);
+  set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
+
+  set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
+  set_gdbarch_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
+  set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
+
+  set_gdbarch_ptr_bit (gdbarch, arch_size);
+  set_gdbarch_addr_bit (gdbarch, arch_size);
+
+  set_gdbarch_cannot_fetch_register (gdbarch,
+				     tilegx_cannot_reference_register);
+  set_gdbarch_cannot_store_register (gdbarch,
+				     tilegx_cannot_reference_register);
+
+  /* Stack grows down.  */
+  set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
+
+  /* Frame Info.  */
+  set_gdbarch_unwind_sp (gdbarch, tilegx_unwind_sp);
+  set_gdbarch_unwind_pc (gdbarch, tilegx_unwind_pc);
+  set_gdbarch_dummy_id (gdbarch, tilegx_unwind_dummy_id);
+  set_gdbarch_frame_align (gdbarch, tilegx_frame_align);
+  frame_base_set_default (gdbarch, &tilegx_frame_base);
+
+  set_gdbarch_skip_prologue (gdbarch, tilegx_skip_prologue);
+
+  set_gdbarch_in_function_epilogue_p (gdbarch,
+				      tilegx_in_function_epilogue_p);
+
+  /* Map debug registers into internal register numbers.  */
+  set_gdbarch_dwarf2_reg_to_regnum (gdbarch, tilegx_dwarf2_reg_to_regnum);
+
+  /* These values and methods are used when gdb calls a target function.  */
+  set_gdbarch_push_dummy_call (gdbarch, tilegx_push_dummy_call);
+  set_gdbarch_breakpoint_from_pc (gdbarch, tilegx_breakpoint_from_pc);
+  set_gdbarch_return_value (gdbarch, tilegx_return_value);
+
+  set_gdbarch_print_insn (gdbarch, print_insn_tilegx);
+
+  gdbarch_init_osabi (info, gdbarch);
+
+  dwarf2_append_unwinders (gdbarch);
+  frame_unwind_append_unwinder (gdbarch, &tilegx_frame_unwind);
+
+  return gdbarch;
+}
+
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_tilegx_tdep;
+
+void
+_initialize_tilegx_tdep (void)
+{
+  register_gdbarch_init (bfd_arch_tilegx, tilegx_gdbarch_init);
+}
diff --git a/gdb/tilegx-tdep.h b/gdb/tilegx-tdep.h
new file mode 100644
index 0000000..3ac18a5
--- /dev/null
+++ b/gdb/tilegx-tdep.h
@@ -0,0 +1,109 @@
+/* Target-dependent code for the Tilera TILE-Gx processor.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef TILEGX_TDEP_H
+#define TILEGX_TDEP_H
+
+/* TILE-Gx has 56 general purpose registers (R0 - R52, TP, SP, LR),
+   plus 8 special general purpose registers (network and ZERO),
+   plus 1 magic register (PC).
+
+   TP (aka R53) is the thread specific data pointer.
+   SP (aka R54) is the stack pointer.
+   LR (aka R55) is the link register.  */
+
+enum tilegx_regnum
+  {
+    TILEGX_R0_REGNUM,
+    TILEGX_R1_REGNUM,
+    TILEGX_R2_REGNUM,
+    TILEGX_R3_REGNUM,
+    TILEGX_R4_REGNUM,
+    TILEGX_R5_REGNUM,
+    TILEGX_R6_REGNUM,
+    TILEGX_R7_REGNUM,
+    TILEGX_R8_REGNUM,
+    TILEGX_R9_REGNUM,
+    TILEGX_R10_REGNUM,
+    TILEGX_R11_REGNUM,
+    TILEGX_R12_REGNUM,
+    TILEGX_R13_REGNUM,
+    TILEGX_R14_REGNUM,
+    TILEGX_R15_REGNUM,
+    TILEGX_R16_REGNUM,
+    TILEGX_R17_REGNUM,
+    TILEGX_R18_REGNUM,
+    TILEGX_R19_REGNUM,
+    TILEGX_R20_REGNUM,
+    TILEGX_R21_REGNUM,
+    TILEGX_R22_REGNUM,
+    TILEGX_R23_REGNUM,
+    TILEGX_R24_REGNUM,
+    TILEGX_R25_REGNUM,
+    TILEGX_R26_REGNUM,
+    TILEGX_R27_REGNUM,
+    TILEGX_R28_REGNUM,
+    TILEGX_R29_REGNUM,
+    TILEGX_R30_REGNUM,
+    TILEGX_R31_REGNUM,
+    TILEGX_R32_REGNUM,
+    TILEGX_R33_REGNUM,
+    TILEGX_R34_REGNUM,
+    TILEGX_R35_REGNUM,
+    TILEGX_R36_REGNUM,
+    TILEGX_R37_REGNUM,
+    TILEGX_R38_REGNUM,
+    TILEGX_R39_REGNUM,
+    TILEGX_R40_REGNUM,
+    TILEGX_R41_REGNUM,
+    TILEGX_R42_REGNUM,
+    TILEGX_R43_REGNUM,
+    TILEGX_R44_REGNUM,
+    TILEGX_R45_REGNUM,
+    TILEGX_R46_REGNUM,
+    TILEGX_R47_REGNUM,
+    TILEGX_R48_REGNUM,
+    TILEGX_R49_REGNUM,
+    TILEGX_R50_REGNUM,
+    TILEGX_R51_REGNUM,
+    TILEGX_R52_REGNUM,
+    TILEGX_TP_REGNUM,
+    TILEGX_SP_REGNUM,
+    TILEGX_LR_REGNUM,
+
+    TILEGX_SN_REGNUM,
+    TILEGX_NUM_EASY_REGS = TILEGX_SN_REGNUM, /* 56 */
+
+    TILEGX_IO0_REGNUM,
+    TILEGX_IO1_REGNUM,
+    TILEGX_US0_REGNUM,
+    TILEGX_US1_REGNUM,
+    TILEGX_US2_REGNUM,
+    TILEGX_US3_REGNUM,
+    TILEGX_ZERO_REGNUM,
+
+    TILEGX_PC_REGNUM,
+    TILEGX_NUM_PHYS_REGS = TILEGX_PC_REGNUM, /* 64 */
+
+    TILEGX_NUM_REGS /* 65 */
+  };
+
+enum { tilegx_reg_size = 8 };
+
+#endif /* tilegx-tdep.h */
diff --git a/gdb/top.c b/gdb/top.c
index 903795e..061ad48 100644
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -47,6 +47,7 @@
 #include "gdbthread.h"
 #include "python/python.h"
 #include "interps.h"
+#include "observer.h"
 
 /* readline include files.  */
 #include "readline/readline.h"
@@ -98,11 +99,13 @@ int use_windows = 0;
 
 extern char lang_frame_mismatch_warn[];		/* language.c */
 
-/* Flag for whether we want all the "from_tty" gubbish printed.  */
+/* Flag for whether we want to confirm potentially dangerous
+   operations.  Default is yes.  */
+
+int confirm = 1;
 
-int caution = 1;		/* Default is yes, sigh.  */
 static void
-show_caution (struct ui_file *file, int from_tty,
+show_confirm (struct ui_file *file, int from_tty,
 	      struct cmd_list_element *c, const char *value)
 {
   fprintf_filtered (file, _("Whether to confirm potentially "
@@ -289,9 +292,9 @@ void (*deprecated_context_hook) (int id);
 /* static */ void
 quit_cover (void)
 {
-  caution = 0;			/* Throw caution to the wind -- we're exiting.
-				   This prevents asking the user dumb 
-				   questions.  */
+  /* Stop asking user for confirmation --- we're exiting.  This
+     prevents asking the user dumb questions.  */
+  confirm = 0;
   quit_command ((char *) 0, 0);
 }
 #endif /* defined SIGHUP */
@@ -360,6 +363,47 @@ prepare_execute_command (void)
   return cleanup;
 }
 
+/* Tell the user if the language has changed (except first time) after
+   executing a command.  */
+
+void
+check_frame_language_change (void)
+{
+  static int warned = 0;
+
+  /* First make sure that a new frame has been selected, in case the
+     command or the hooks changed the program state.  */
+  deprecated_safe_get_selected_frame ();
+  if (current_language != expected_language)
+    {
+      if (language_mode == language_mode_auto && info_verbose)
+	{
+	  language_info (1);	/* Print what changed.  */
+	}
+      warned = 0;
+    }
+
+  /* Warn the user if the working language does not match the language
+     of the current frame.  Only warn the user if we are actually
+     running the program, i.e. there is a stack.  */
+  /* FIXME: This should be cacheing the frame and only running when
+     the frame changes.  */
+
+  if (has_stack_frames ())
+    {
+      enum language flang;
+
+      flang = get_frame_language ();
+      if (!warned
+	  && flang != language_unknown
+	  && flang != current_language->la_language)
+	{
+	  printf_filtered ("%s\n", lang_frame_mismatch_warn);
+	  warned = 1;
+	}
+    }
+}
+
 /* Execute the line P as a command, in the current user context.
    Pass FROM_TTY as second argument to the defining function.  */
 
@@ -368,8 +412,6 @@ execute_command (char *p, int from_tty)
 {
   struct cleanup *cleanup_if_error, *cleanup;
   struct cmd_list_element *c;
-  enum language flang;
-  static int warned = 0;
   char *line;
 
   cleanup_if_error = make_bpstat_clear_actions_cleanup ();
@@ -429,16 +471,17 @@ execute_command (char *p, int from_tty)
       if (c->flags & DEPRECATED_WARN_USER)
 	deprecated_cmd_warning (&line);
 
-      if (c->class == class_user)
+      /* c->user_commands would be NULL in the case of a python command.  */
+      if (c->class == class_user && c->user_commands)
 	execute_user_command (c, arg);
       else if (c->type == set_cmd || c->type == show_cmd)
-	do_setshow_command (arg, from_tty & caution, c);
+	do_setshow_command (arg, from_tty, c);
       else if (!cmd_func_p (c))
 	error (_("That is not a command, just a help topic."));
       else if (deprecated_call_command_hook)
-	deprecated_call_command_hook (c, arg, from_tty & caution);
+	deprecated_call_command_hook (c, arg, from_tty);
       else
-	cmd_func (c, arg, from_tty & caution);
+	cmd_func (c, arg, from_tty);
 
       /* If the interpreter is in sync mode (we're running a user
 	 command's list, running command hooks or similars), and we
@@ -456,36 +499,7 @@ execute_command (char *p, int from_tty)
 
     }
 
-  /* Tell the user if the language has changed (except first time).
-     First make sure that a new frame has been selected, in case this
-     command or the hooks changed the program state.  */
-  deprecated_safe_get_selected_frame ();
-  if (current_language != expected_language)
-    {
-      if (language_mode == language_mode_auto && info_verbose)
-	{
-	  language_info (1);	/* Print what changed.  */
-	}
-      warned = 0;
-    }
-
-  /* Warn the user if the working language does not match the
-     language of the current frame.  Only warn the user if we are
-     actually running the program, i.e. there is a stack.  */
-  /* FIXME:  This should be cacheing the frame and only running when
-     the frame changes.  */
-
-  if (has_stack_frames ())
-    {
-      flang = get_frame_language ();
-      if (!warned
-	  && flang != language_unknown
-	  && flang != current_language->la_language)
-	{
-	  printf_filtered ("%s\n", lang_frame_mismatch_warn);
-	  warned = 1;
-	}
-    }
+  check_frame_language_change ();
 
   do_cleanups (cleanup);
   discard_cleanups (cleanup_if_error);
@@ -1284,8 +1298,8 @@ quit_target (void *arg)
   if (write_history_p && history_filename)
     write_history (history_filename);
 
-  do_final_cleanups (ALL_CLEANUPS);    /* Do any final cleanups before
-					  exiting.  */
+  do_final_cleanups (all_cleanups ());    /* Do any final cleanups before
+					     exiting.  */
   return 0;
 }
 
@@ -1546,6 +1560,15 @@ show_exec_done_display_p (struct ui_file *file, int from_tty,
 			    "asynchronous execution commands is %s.\n"),
 		    value);
 }
+
+/* "set" command for the gdb_datadir configuration variable.  */
+
+static void
+set_gdb_datadir (char *args, int from_tty, struct cmd_list_element *c)
+{
+  observer_notify_gdb_datadir_changed ();
+}
+
 static void
 init_main (void)
 {
@@ -1623,11 +1646,11 @@ Show the filename in which to record the command history"), _("\
 			    show_history_filename,
 			    &sethistlist, &showhistlist);
 
-  add_setshow_boolean_cmd ("confirm", class_support, &caution, _("\
+  add_setshow_boolean_cmd ("confirm", class_support, &confirm, _("\
 Set whether to confirm potentially dangerous operations."), _("\
 Show whether to confirm potentially dangerous operations."), NULL,
 			   NULL,
-			   show_caution,
+			   show_confirm,
 			   &setlist, &showlist);
 
   add_setshow_zinteger_cmd ("annotate", class_obscure, &annotation_level, _("\
@@ -1653,7 +1676,7 @@ Use \"on\" to enable the notification, and \"off\" to disable it."),
                            _("Show GDB's data directory."),
                            _("\
 When set, GDB uses the specified path to search for data files."),
-                           NULL, NULL,
+                           set_gdb_datadir, NULL,
                            &setlist,
                            &showlist);
 }
diff --git a/gdb/top.h b/gdb/top.h
index 90e662a..6f74233 100644
--- a/gdb/top.h
+++ b/gdb/top.h
@@ -26,7 +26,7 @@ extern char *saved_command_line;
 extern int saved_command_line_size;
 extern FILE *instream;
 extern int in_user_command;
-extern int caution;
+extern int confirm;
 extern char gdb_dirbuf[1024];
 extern int inhibit_gdbinit;
 extern int epoch_interface;
@@ -43,6 +43,8 @@ extern void quit_command (char *, int);
 extern void quit_cover (void);
 extern void execute_command (char *, int);
 
+extern void check_frame_language_change (void);
+
 /* Prepare for execution of a command.
    Call this before every command, CLI or MI.
    Returns a cleanup to be run after the command is completed.  */
diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
index ede3742..0fc4ea4 100644
--- a/gdb/tracepoint.c
+++ b/gdb/tracepoint.c
@@ -52,6 +52,7 @@
 #include "memrange.h"
 #include "exceptions.h"
 #include "cli/cli-utils.h"
+#include "probe.h"
 
 /* readline include files */
 #include "readline/readline.h"
@@ -347,7 +348,7 @@ find_trace_state_variable (const char *name)
   return NULL;
 }
 
-void
+static void
 delete_trace_state_variable (const char *name)
 {
   struct trace_state_variable *tsv;
@@ -367,7 +368,7 @@ delete_trace_state_variable (const char *name)
 /* The 'tvariable' command collects a name and optional expression to
    evaluate into an initial value.  */
 
-void
+static void
 trace_variable_command (char *args, int from_tty)
 {
   struct expression *expr;
@@ -429,7 +430,7 @@ trace_variable_command (char *args, int from_tty)
   do_cleanups (old_chain);
 }
 
-void
+static void
 delete_trace_variable_command (char *args, int from_tty)
 {
   int ix;
@@ -733,17 +734,18 @@ validate_actionline (char **line, struct breakpoint *b)
 	  for (loc = t->base.loc; loc; loc = loc->next)
 	    {
 	      p = tmp_p;
-	      exp = parse_exp_1 (&p, block_for_pc (loc->address), 1);
+	      exp = parse_exp_1 (&p, loc->address,
+				 block_for_pc (loc->address), 1);
 	      old_chain = make_cleanup (free_current_contents, &exp);
 
 	      if (exp->elts[0].opcode == OP_VAR_VALUE)
 		{
 		  if (SYMBOL_CLASS (exp->elts[2].symbol) == LOC_CONST)
 		    {
-		      error (_("constant `%s' (value %ld) "
+		      error (_("constant `%s' (value %s) "
 			       "will not be collected."),
 			     SYMBOL_PRINT_NAME (exp->elts[2].symbol),
-			     SYMBOL_VALUE (exp->elts[2].symbol));
+			     plongest (SYMBOL_VALUE (exp->elts[2].symbol)));
 		    }
 		  else if (SYMBOL_CLASS (exp->elts[2].symbol)
 			   == LOC_OPTIMIZED_OUT)
@@ -786,7 +788,8 @@ validate_actionline (char **line, struct breakpoint *b)
 	    {
 	      p = tmp_p;
 	      /* Only expressions are allowed for this action.  */
-	      exp = parse_exp_1 (&p, block_for_pc (loc->address), 1);
+	      exp = parse_exp_1 (&p, loc->address,
+				 block_for_pc (loc->address), 1);
 	      old_chain = make_cleanup (free_current_contents, &exp);
 
 	      /* We have something to evaluate, make sure that the expr to
@@ -980,8 +983,8 @@ collect_symbol (struct collection_list *collect,
 		       SYMBOL_CLASS (sym));
       break;
     case LOC_CONST:
-      printf_filtered ("constant %s (value %ld) will not be collected.\n",
-		       SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE (sym));
+      printf_filtered ("constant %s (value %s) will not be collected.\n",
+		       SYMBOL_PRINT_NAME (sym), plongest (SYMBOL_VALUE (sym)));
       break;
     case LOC_STATIC:
       offset = SYMBOL_VALUE_ADDRESS (sym);
@@ -1451,7 +1454,7 @@ encode_actions_1 (struct command_line *action,
 		  struct cleanup *old_chain = NULL;
 		  struct cleanup *old_chain1 = NULL;
 
-		  exp = parse_exp_1 (&action_exp, 
+		  exp = parse_exp_1 (&action_exp, tloc->address,
 				     block_for_pc (tloc->address), 1);
 		  old_chain = make_cleanup (free_current_contents, &exp);
 
@@ -1541,7 +1544,7 @@ encode_actions_1 (struct command_line *action,
 		  struct cleanup *old_chain = NULL;
 		  struct cleanup *old_chain1 = NULL;
 
-		  exp = parse_exp_1 (&action_exp, 
+		  exp = parse_exp_1 (&action_exp, tloc->address,
 				     block_for_pc (tloc->address), 1);
 		  old_chain = make_cleanup (free_current_contents, &exp);
 
@@ -1577,7 +1580,8 @@ encode_actions_1 (struct command_line *action,
 }
 
 /* Render all actions into gdb protocol.  */
-/*static*/ void
+
+void
 encode_actions (struct breakpoint *t, struct bp_location *tloc,
 		char ***tdp_actions, char ***stepping_actions)
 {
@@ -1716,6 +1720,7 @@ start_tracing (char *notes)
   for (ix = 0; VEC_iterate (breakpoint_p, tp_vec, ix, b); ix++)
     {
       struct tracepoint *t = (struct tracepoint *) b;
+      struct bp_location *loc;
 
       if (b->enable_state == bp_enabled)
 	any_enabled = 1;
@@ -1778,6 +1783,10 @@ start_tracing (char *notes)
 	}
 
       t->number_on_target = b->number;
+
+      for (loc = b->loc; loc; loc = loc->next)
+	if (loc->probe != NULL)
+	  loc->probe->pops->set_semaphore (loc->probe, loc->gdbarch);
     }
   VEC_free (breakpoint_p, tp_vec);
 
@@ -1798,7 +1807,7 @@ start_tracing (char *notes)
   ret = target_set_trace_notes (trace_user, notes, NULL);
 
   if (!ret && (trace_user || notes))
-    warning ("Target does not support trace user/notes, info ignored");
+    warning (_("Target does not support trace user/notes, info ignored"));
 
   /* Now insert traps and begin collecting data.  */
   target_trace_start ();
@@ -1850,15 +1859,41 @@ void
 stop_tracing (char *note)
 {
   int ret;
+  VEC(breakpoint_p) *tp_vec = NULL;
+  int ix;
+  struct breakpoint *t;
 
   target_trace_stop ();
 
+  tp_vec = all_tracepoints ();
+  for (ix = 0; VEC_iterate (breakpoint_p, tp_vec, ix, t); ix++)
+    {
+      struct bp_location *loc;
+
+      if ((t->type == bp_fast_tracepoint
+	   ? !may_insert_fast_tracepoints
+	   : !may_insert_tracepoints))
+	continue;
+
+      for (loc = t->loc; loc; loc = loc->next)
+	{
+	  /* GDB can be totally absent in some disconnected trace scenarios,
+	     but we don't really care if this semaphore goes out of sync.
+	     That's why we are decrementing it here, but not taking care
+	     in other places.  */
+	  if (loc->probe != NULL)
+	    loc->probe->pops->clear_semaphore (loc->probe, loc->gdbarch);
+	}
+    }
+
+  VEC_free (breakpoint_p, tp_vec);
+
   if (!note)
     note = trace_stop_notes;
   ret = target_set_trace_notes (NULL, NULL, note);
 
   if (!ret && note)
-    warning ("Target does not support trace notes, note ignored");
+    warning (_("Target does not support trace notes, note ignored"));
 
   /* Should change in response to reply?  */
   current_trace_status ()->running = 0;
@@ -2459,7 +2494,7 @@ trace_find_line_command (char *args, int from_tty)
     }
   else
     {
-      sals = decode_line_spec (args, DECODE_LINE_FUNFIRSTLINE);
+      sals = decode_line_with_current_source (args, DECODE_LINE_FUNFIRSTLINE);
       sal = sals.sals[0];
     }
   
@@ -2577,8 +2612,9 @@ scope_info (char *args, int from_tty)
   struct symbol *sym;
   struct minimal_symbol *msym;
   struct block *block;
-  char *symname, *save_args = args;
-  struct dict_iterator iter;
+  const char *symname;
+  char *save_args = args;
+  struct block_iterator iter;
   int j, count = 0;
   struct gdbarch *gdbarch;
   int regno;
@@ -2621,8 +2657,9 @@ scope_info (char *args, int from_tty)
 	      count--;		/* Don't count this one.  */
 	      continue;
 	    case LOC_CONST:
-	      printf_filtered ("a constant with value %ld (0x%lx)",
-			       SYMBOL_VALUE (sym), SYMBOL_VALUE (sym));
+	      printf_filtered ("a constant with value %s (%s)",
+			       plongest (SYMBOL_VALUE (sym)),
+			       hex_string (SYMBOL_VALUE (sym)));
 	      break;
 	    case LOC_CONST_BYTES:
 	      printf_filtered ("constant bytes: ");
@@ -2655,16 +2692,16 @@ scope_info (char *args, int from_tty)
 				 gdbarch_register_name (gdbarch, regno));
 	      break;
 	    case LOC_ARG:
-	      printf_filtered ("an argument at stack/frame offset %ld",
-			       SYMBOL_VALUE (sym));
+	      printf_filtered ("an argument at stack/frame offset %s",
+			       plongest (SYMBOL_VALUE (sym)));
 	      break;
 	    case LOC_LOCAL:
-	      printf_filtered ("a local variable at frame offset %ld",
-			       SYMBOL_VALUE (sym));
+	      printf_filtered ("a local variable at frame offset %s",
+			       plongest (SYMBOL_VALUE (sym)));
 	      break;
 	    case LOC_REF_ARG:
-	      printf_filtered ("a reference argument at offset %ld",
-			       SYMBOL_VALUE (sym));
+	      printf_filtered ("a reference argument at offset %s",
+			       plongest (SYMBOL_VALUE (sym)));
 	      break;
 	    case LOC_REGPARM_ADDR:
 	      /* Note comment at LOC_REGISTER.  */
@@ -3166,7 +3203,7 @@ set_trace_user (char *args, int from_tty,
   ret = target_set_trace_notes (trace_user, NULL, NULL);
 
   if (!ret)
-    warning ("Target does not support trace notes, user ignored");
+    warning (_("Target does not support trace notes, user ignored"));
 }
 
 static void
@@ -3178,7 +3215,7 @@ set_trace_notes (char *args, int from_tty,
   ret = target_set_trace_notes (NULL, trace_notes, NULL);
 
   if (!ret)
-    warning ("Target does not support trace notes, note ignored");
+    warning (_("Target does not support trace notes, note ignored"));
 }
 
 static void
@@ -3190,7 +3227,7 @@ set_trace_stop_notes (char *args, int from_tty,
   ret = target_set_trace_notes (NULL, NULL, trace_stop_notes);
 
   if (!ret)
-    warning ("Target does not support trace notes, stop note ignored");
+    warning (_("Target does not support trace notes, stop note ignored"));
 }
 
 /* Convert the memory pointed to by mem into hex, placing result in buf.
@@ -3342,7 +3379,7 @@ free_uploaded_tps (struct uploaded_tp **utpp)
 /* Given a number and address, return an uploaded tracepoint with that
    number, creating if necessary.  */
 
-struct uploaded_tsv *
+static struct uploaded_tsv *
 get_uploaded_tsv (int num, struct uploaded_tsv **utsvp)
 {
   struct uploaded_tsv *utsv;
@@ -3389,7 +3426,7 @@ cond_string_is_same (char *str1, char *str2)
    toggle that freely, and may have done so in anticipation of the
    next trace run.  Return the location of matched tracepoint.  */
 
-struct bp_location *
+static struct bp_location *
 find_matching_tracepoint_location (struct uploaded_tp *utp)
 {
   VEC(breakpoint_p) *tp_vec = all_tracepoints ();
@@ -3472,7 +3509,7 @@ merge_uploaded_tracepoints (struct uploaded_tp **uploaded_tps)
 /* Trace state variables don't have much to identify them beyond their
    name, so just use that to detect matches.  */
 
-struct trace_state_variable *
+static struct trace_state_variable *
 find_matching_tsv (struct uploaded_tsv *utsv)
 {
   if (!utsv->name)
@@ -3481,7 +3518,7 @@ find_matching_tsv (struct uploaded_tsv *utsv)
   return find_trace_state_variable (utsv->name);
 }
 
-struct trace_state_variable *
+static struct trace_state_variable *
 create_tsv_from_upload (struct uploaded_tsv *utsv)
 {
   const char *namebase;
@@ -4386,9 +4423,7 @@ tfile_fetch_registers (struct target_ops *ops,
 		       struct regcache *regcache, int regno)
 {
   struct gdbarch *gdbarch = get_regcache_arch (regcache);
-  char block_type;
-  int pos, offset, regn, regsize, pc_regno;
-  unsigned short mlen;
+  int offset, regn, regsize, pc_regno;
   char *regs;
 
   /* An uninitialized reg size says we're not going to be
@@ -4512,6 +4547,8 @@ tfile_xfer_partial (struct target_ops *ops, enum target_object object,
 	      if (amt > len)
 		amt = len;
 
+	      if (maddr != offset)
+	        lseek (trace_fd, offset - maddr, SEEK_CUR);
 	      tfile_read (readbuf, amt);
 	      return amt;
 	    }
@@ -4699,6 +4736,20 @@ init_tfile_ops (void)
   tfile_ops.to_magic = OPS_MAGIC;
 }
 
+void
+free_current_marker (void *arg)
+{
+  struct static_tracepoint_marker **marker_p = arg;
+
+  if (*marker_p != NULL)
+    {
+      release_static_tracepoint_marker (*marker_p);
+      xfree (*marker_p);
+    }
+  else
+    *marker_p = NULL;
+}
+
 /* Given a line of text defining a static tracepoint marker, parse it
    into a "static tracepoint marker" object.  Throws an error is
    parsing fails.  If PP is non-null, it points to one past the end of
@@ -4761,8 +4812,6 @@ print_one_static_tracepoint_marker (int count,
   char wrap_indent[80];
   char extra_field_indent[80];
   struct ui_out *uiout = current_uiout;
-  struct ui_stream *stb = ui_out_stream_new (uiout);
-  struct cleanup *old_chain = make_cleanup_ui_out_stream_delete (stb);
   struct cleanup *bkpt_chain;
   VEC(breakpoint_p) *tracepoints;
 
@@ -4869,7 +4918,6 @@ print_one_static_tracepoint_marker (int count,
   VEC_free (breakpoint_p, tracepoints);
 
   do_cleanups (bkpt_chain);
-  do_cleanups (old_chain);
 }
 
 static void
@@ -4881,6 +4929,12 @@ info_static_tracepoint_markers_command (char *arg, int from_tty)
   struct ui_out *uiout = current_uiout;
   int i;
 
+  /* We don't have to check target_can_use_agent and agent's capability on
+     static tracepoint here, in order to be compatible with older GDBserver.
+     We don't check USE_AGENT is true or not, because static tracepoints
+     don't work without in-process agent, so we don't bother users to type
+     `set agent on' when to use static tracepoint.  */
+
   old_chain
     = make_cleanup_ui_out_table_begin_end (uiout, 5, -1,
 					   "StaticTracepointMarkersTable");
@@ -4924,7 +4978,8 @@ info_static_tracepoint_markers_command (char *arg, int from_tty)
    available.  */
 
 static struct value *
-sdata_make_value (struct gdbarch *gdbarch, struct internalvar *var)
+sdata_make_value (struct gdbarch *gdbarch, struct internalvar *var,
+		  void *ignore)
 {
   LONGEST size;
   gdb_byte *buf;
@@ -5050,7 +5105,7 @@ parse_traceframe_info (const char *tframe_info)
    This is where we avoid re-fetching the object from the target if we
    already have it cached.  */
 
-struct traceframe_info *
+static struct traceframe_info *
 get_traceframe_info (void)
 {
   if (traceframe_info == NULL)
@@ -5103,6 +5158,15 @@ traceframe_available_memory (VEC(mem_range_s) **result,
   return 0;
 }
 
+/* Implementation of `sdata' variable.  */
+
+static const struct internalvar_funcs sdata_funcs =
+{
+  sdata_make_value,
+  NULL,
+  NULL
+};
+
 /* module initialization */
 void
 _initialize_tracepoint (void)
@@ -5113,7 +5177,7 @@ _initialize_tracepoint (void)
      value with a void typed value, and when we get here, gdbarch
      isn't initialized yet.  At this point, we're quite sure there
      isn't another convenience variable of the same name.  */
-  create_internalvar_type_lazy ("_sdata", sdata_make_value);
+  create_internalvar_type_lazy ("_sdata", &sdata_funcs, NULL);
 
   traceframe_number = -1;
   tracepoint_number = -1;
diff --git a/gdb/tracepoint.h b/gdb/tracepoint.h
index 8a1e77c..ced29fa 100644
--- a/gdb/tracepoint.h
+++ b/gdb/tracepoint.h
@@ -22,6 +22,7 @@
 #include "breakpoint.h"
 #include "target.h"
 #include "memrange.h"
+#include "gdb_vecs.h"
 
 /* A trace state variable is a value managed by a target being
    traced.  A trace state variable (or tsv for short) can be accessed
@@ -143,8 +144,6 @@ extern char *default_collect;
 
 /* Struct to collect random info about tracepoints on the target.  */
 
-DEF_VEC_P (char_ptr);
-
 struct uploaded_tp
 {
   int number;
@@ -210,6 +209,7 @@ extern void parse_static_tracepoint_marker_definition
   (char *line, char **pp,
    struct static_tracepoint_marker *marker);
 extern void release_static_tracepoint_marker (struct static_tracepoint_marker *);
+extern void free_current_marker (void *arg);
 
 /* A hook used to notify the UI of tracepoint operations.  */
 
@@ -239,6 +239,9 @@ void free_actions (struct breakpoint *);
 
 extern char *decode_agent_options (char *exp);
 
+extern void encode_actions (struct breakpoint *t, struct bp_location *tloc,
+			    char ***tdp_actions, char ***stepping_actions);
+
 extern void validate_actionline (char **, struct breakpoint *);
 
 extern void end_actions_pseudocommand (char *args, int from_tty);
diff --git a/gdb/tui/tui-data.c b/gdb/tui/tui-data.c
index e7e0749..1f74b3f 100644
--- a/gdb/tui/tui-data.c
+++ b/gdb/tui/tui-data.c
@@ -311,16 +311,6 @@ tui_set_current_layout_to (enum tui_layout_type new_layout)
 }
 
 
-/* Set the origin of the window.  */
-void
-set_gen_win_origin (struct tui_gen_win_info *win_info, 
-		    int x, int y)
-{
-  win_info->origin.x = x;
-  win_info->origin.y = y;
-}
-
-
 /*****************************
 ** OTHER PUBLIC FUNCTIONS
 *****************************/
diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h
index 50619d2..5df73d2 100644
--- a/gdb/tui/tui-data.h
+++ b/gdb/tui/tui-data.h
@@ -341,8 +341,6 @@ extern int tui_term_height (void);
 extern void tui_set_term_height_to (int);
 extern int tui_term_width (void);
 extern void tui_set_term_width_to (int);
-extern void tui_set_gen_win_origin (struct tui_gen_win_info *, 
-				    int, int);
 extern struct tui_gen_win_info *tui_locator_win_info_ptr (void);
 extern struct tui_gen_win_info *tui_source_exec_info_win_ptr (void);
 extern struct tui_gen_win_info *tui_disassem_exec_info_win_ptr (void);
diff --git a/gdb/tui/tui-hooks.c b/gdb/tui/tui-hooks.c
index 17a9593..4d1e063 100644
--- a/gdb/tui/tui-hooks.c
+++ b/gdb/tui/tui-hooks.c
@@ -69,6 +69,13 @@ tui_query_hook (const char *msg, va_list argp)
   int retval;
   int ans2;
   int answer;
+  char *question;
+  struct cleanup *old_chain;
+
+  /* Format the question outside of the loop, to avoid reusing
+     ARGP.  */
+  question = xstrvprintf (msg, argp);
+  old_chain = make_cleanup (xfree, question);
 
   echo ();
   while (1)
@@ -76,7 +83,7 @@ tui_query_hook (const char *msg, va_list argp)
       wrap_here ("");		/* Flush any buffered output.  */
       gdb_flush (gdb_stdout);
 
-      vfprintf_filtered (gdb_stdout, msg, argp);
+      fputs_filtered (question, gdb_stdout);
       printf_filtered (_("(y or n) "));
 
       wrap_here ("");
@@ -113,6 +120,8 @@ tui_query_hook (const char *msg, va_list argp)
       printf_filtered (_("Please answer y or n.\n"));
     }
   noecho ();
+
+  do_cleanups (old_chain);
   return retval;
 }
 
diff --git a/gdb/tui/tui-main.c b/gdb/tui/tui-main.c
deleted file mode 100644
index d12fa74..0000000
--- a/gdb/tui/tui-main.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Main function for TUI gdb.
-
-   Copyright (C) 2002, 2004, 2007-2012 Free Software Foundation, Inc.
-
-   This file is part of GDB.
-
-   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 3 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, see <http://www.gnu.org/licenses/>.  */
-
-/* The binary "gdbtui" is deprecated.
-
-   The binary will be no longer built or installed in GDB 7.5.
-   Use "gdb -tui" instead.  */
-
-#include "defs.h"
-#include "main.h"
-#include "gdb_string.h"
-#include "interps.h"
-
-int
-main (int argc, char **argv)
-{
-  struct captured_main_args args;
-
-  memset (&args, 0, sizeof args);
-  args.argc = argc;
-  args.argv = argv;
-  args.use_windows = 0;
-  args.interpreter_p = INTERP_TUI;
-  return gdb_main (&args);
-}
diff --git a/gdb/tui/tui-regs.c b/gdb/tui/tui-regs.c
index a093e91..62c0fad 100644
--- a/gdb/tui/tui-regs.c
+++ b/gdb/tui/tui-regs.c
@@ -131,19 +131,6 @@ tui_first_reg_element_no_inline (int line_no)
 }
 
 
-/* Answer the index of the last element in line_no.  If line_no is
-   past the register area (-1) is returned.  */
-int
-tui_last_reg_element_no_in_line (int line_no)
-{
-  if ((line_no * TUI_DATA_WIN->detail.data_display_info.regs_column_count) <=
-      TUI_DATA_WIN->detail.data_display_info.regs_content_count)
-    return ((line_no + 1) *
-	    TUI_DATA_WIN->detail.data_display_info.regs_column_count) - 1;
-  else
-    return (-1);
-}
-
 /* Show the registers of the given group in the data window
    and refresh the window.  */
 void
diff --git a/gdb/tui/tui-stack.c b/gdb/tui/tui-stack.c
index 8722058..262a6bf 100644
--- a/gdb/tui/tui-stack.c
+++ b/gdb/tui/tui-stack.c
@@ -228,6 +228,7 @@ tui_get_function_from_frame (struct frame_info *fi)
   if (*p == '<')
     p++;
   strncpy (name, p, sizeof (name) - 1);
+  name[sizeof (name) - 1] = 0;
   p = strchr (name, '(');
   if (!p)
     p = strchr (name, '>');
@@ -378,7 +379,8 @@ tui_show_frame_info (struct frame_info *fi)
 	    }
 	  else
 	    {
-	      if (find_pc_partial_function (get_frame_pc (fi), (char **) NULL,
+	      if (find_pc_partial_function (get_frame_pc (fi),
+					    (const char **) NULL,
 					    &low, (CORE_ADDR) 0) == 0)
 		{
 		  /* There is no symbol available for current PC.  There is no
diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c
index 0a49697..c12f036 100644
--- a/gdb/tui/tui-win.c
+++ b/gdb/tui/tui-win.c
@@ -107,7 +107,7 @@ static void parse_scrolling_args (char *,
 #endif
 
 /* Possible values for tui-border-kind variable.  */
-static const char *tui_border_kind_enums[] = {
+static const char *const tui_border_kind_enums[] = {
   "space",
   "ascii",
   "acs",
@@ -115,7 +115,7 @@ static const char *tui_border_kind_enums[] = {
 };
 
 /* Possible values for tui-border-mode and tui-active-border-mode.  */
-static const char *tui_border_mode_enums[] = {
+static const char *const tui_border_mode_enums[] = {
   "normal",
   "standout",
   "reverse",
@@ -690,13 +690,16 @@ tui_resize_all (void)
 	  if (height_diff < 0)
 	    cmd_split_diff--;
 	  else
-	    cmd_split_diff++;
-	}
+           cmd_split_diff++;
+       }
       /* Now adjust each window.  */
-      clear ();
+      /* erase + clearok are used instead of a straightforward clear as
+         AIX 5.3 does not define clear.  */
+      erase ();
+      clearok (curscr, TRUE);
       refresh ();
       switch (cur_layout)
-	{
+       {
 	case SRC_COMMAND:
 	case DISASSEM_COMMAND:
 	  first_win = (struct tui_win_info *) (tui_source_windows ())->list[0];
@@ -1583,13 +1586,16 @@ parse_scrolling_args (char *arg,
 	      ;
 
 	  if (*buf_ptr != (char) 0)
-	    wname = buf_ptr;
+	    {
+	      wname = buf_ptr;
+
+	      /* Validate the window name.  */
+	      for (i = 0; i < strlen (wname); i++)
+		wname[i] = toupper (wname[i]);
+	    }
 	  else
 	    wname = "?";
 	  
-	  /* Validate the window name.  */
-	  for (i = 0; i < strlen (wname); i++)
-	    wname[i] = toupper (wname[i]);
 	  *win_to_scroll = tui_partial_win_by_name (wname);
 
 	  if (*win_to_scroll == (struct tui_win_info *) NULL
diff --git a/gdb/typeprint.c b/gdb/typeprint.c
index de96fd5..c25e705 100644
--- a/gdb/typeprint.c
+++ b/gdb/typeprint.c
@@ -73,7 +73,7 @@ default_print_typedef (struct type *type, struct symbol *new_symbol,
    If SHOW is negative, we never show the details of elements' types.  */
 
 void
-type_print (struct type *type, char *varstring, struct ui_file *stream,
+type_print (struct type *type, const char *varstring, struct ui_file *stream,
 	    int show)
 {
   LA_PRINT_TYPE (type, varstring, stream, show, 0);
@@ -139,16 +139,7 @@ whatis_exp (char *exp, int show)
       if (((TYPE_CODE (type) == TYPE_CODE_PTR)
 	   || (TYPE_CODE (type) == TYPE_CODE_REF))
 	  && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_CLASS))
-        {
-          real_type = value_rtti_target_type (val, &full, &top, &using_enc);
-          if (real_type)
-            {
-              if (TYPE_CODE (type) == TYPE_CODE_PTR)
-                real_type = lookup_pointer_type (real_type);
-              else
-                real_type = lookup_reference_type (real_type);
-            }
-        }
+        real_type = value_rtti_indirect_type (val, &full, &top, &using_enc);
       else if (TYPE_CODE (type) == TYPE_CODE_CLASS)
 	real_type = value_rtti_type (val, &full, &top, &using_enc);
     }
@@ -215,7 +206,7 @@ print_type_scalar (struct type *type, LONGEST val, struct ui_file *stream)
       len = TYPE_NFIELDS (type);
       for (i = 0; i < len; i++)
 	{
-	  if (TYPE_FIELD_BITPOS (type, i) == val)
+	  if (TYPE_FIELD_ENUMVAL (type, i) == val)
 	    {
 	      break;
 	    }
diff --git a/gdb/ui-out.c b/gdb/ui-out.c
index 9f24784..afd15f9 100644
--- a/gdb/ui-out.c
+++ b/gdb/ui-out.c
@@ -501,17 +501,17 @@ ui_out_field_core_addr (struct ui_out *uiout,
 void
 ui_out_field_stream (struct ui_out *uiout,
 		     const char *fldname,
-		     struct ui_stream *buf)
+		     struct ui_file *stream)
 {
   long length;
-  char *buffer = ui_file_xstrdup (buf->stream, &length);
+  char *buffer = ui_file_xstrdup (stream, &length);
   struct cleanup *old_cleanup = make_cleanup (xfree, buffer);
 
   if (length > 0)
     ui_out_field_string (uiout, fldname, buffer);
   else
     ui_out_field_skip (uiout, fldname);
-  ui_file_rewind (buf->stream);
+  ui_file_rewind (stream);
   do_cleanups (old_cleanup);
 }
 
@@ -589,37 +589,6 @@ ui_out_message (struct ui_out *uiout, int verbosity,
   va_end (args);
 }
 
-struct ui_stream *
-ui_out_stream_new (struct ui_out *uiout)
-{
-  struct ui_stream *tempbuf;
-
-  tempbuf = XMALLOC (struct ui_stream);
-  tempbuf->uiout = uiout;
-  tempbuf->stream = mem_fileopen ();
-  return tempbuf;
-}
-
-void
-ui_out_stream_delete (struct ui_stream *buf)
-{
-  ui_file_delete (buf->stream);
-  xfree (buf);
-}
-
-static void
-do_stream_delete (void *buf)
-{
-  ui_out_stream_delete (buf);
-}
-
-struct cleanup *
-make_cleanup_ui_out_stream_delete (struct ui_stream *buf)
-{
-  return make_cleanup (do_stream_delete, buf);
-}
-
-
 void
 ui_out_wrap_hint (struct ui_out *uiout, char *identstring)
 {
@@ -675,61 +644,6 @@ ui_out_get_verblvl (struct ui_out *uiout)
   return 0;
 }
 
-#if 0
-void
-ui_out_result_begin (struct ui_out *uiout, char *class)
-{
-}
-
-void
-ui_out_result_end (struct ui_out *uiout)
-{
-}
-
-void
-ui_out_info_begin (struct ui_out *uiout, char *class)
-{
-}
-
-void
-ui_out_info_end (struct ui_out *uiout)
-{
-}
-
-void
-ui_out_notify_begin (struct ui_out *uiout, char *class)
-{
-}
-
-void
-ui_out_notify_end (struct ui_out *uiout)
-{
-}
-
-void
-ui_out_error_begin (struct ui_out *uiout, char *class)
-{
-}
-
-void
-ui_out_error_end (struct ui_out *uiout)
-{
-}
-#endif
-
-#if 0
-void
-gdb_error (ui_out * uiout, int severity, char *format,...)
-{
-  va_list args;
-}
-
-void
-gdb_query (struct ui_out *uiout, int qflags, char *qprompt)
-{
-}
-#endif
-
 int
 ui_out_is_mi_like_p (struct ui_out *uiout)
 {
@@ -999,8 +913,8 @@ clear_header_list (struct ui_out *uiout)
     {
       uiout->table.header_next = uiout->table.header_first;
       uiout->table.header_first = uiout->table.header_first->next;
-      if (uiout->table.header_next->colhdr != NULL)
-	xfree (uiout->table.header_next->colhdr);
+      xfree (uiout->table.header_next->colhdr);
+      xfree (uiout->table.header_next->col_name);
       xfree (uiout->table.header_next);
     }
   gdb_assert (uiout->table.header_first == NULL);
diff --git a/gdb/ui-out.h b/gdb/ui-out.h
index 9a75eed..0ffe51d 100644
--- a/gdb/ui-out.h
+++ b/gdb/ui-out.h
@@ -52,17 +52,6 @@ enum ui_flags
   };
 
 
-/* The ui_out stream structure.  */
-/* NOTE: cagney/2000-02-01: The ui_stream object can be subsumed by
-   the more generic ui_file object.  */
-
-struct ui_stream
-  {
-    struct ui_out *uiout;
-    struct ui_file *stream;
-  };
-
-
 /* Prototypes for ui-out API.  */
 
 /* A result is a recursive data structure consisting of lists and
@@ -122,7 +111,7 @@ extern void ui_out_field_string (struct ui_out * uiout, const char *fldname,
 				 const char *string);
 
 extern void ui_out_field_stream (struct ui_out *uiout, const char *fldname,
-				 struct ui_stream *buf);
+				 struct ui_file *stream);
 
 extern void ui_out_field_fmt (struct ui_out *uiout, const char *fldname,
 			      const char *format, ...)
@@ -138,12 +127,6 @@ extern void ui_out_message (struct ui_out *uiout, int verbosity,
 			    const char *format, ...)
      ATTRIBUTE_PRINTF (3, 4);
 
-extern struct ui_stream *ui_out_stream_new (struct ui_out *uiout);
-
-extern void ui_out_stream_delete (struct ui_stream *buf);
-
-struct cleanup *make_cleanup_ui_out_stream_delete (struct ui_stream *buf);
-
 extern void ui_out_wrap_hint (struct ui_out *uiout, char *identstring);
 
 extern void ui_out_flush (struct ui_out *uiout);
@@ -159,30 +142,6 @@ extern int ui_out_test_flags (struct ui_out *uiout, int mask);
 extern int ui_out_query_field (struct ui_out *uiout, int colno,
 			       int *width, int *alignment, char **col_name);
 
-#if 0
-extern void ui_out_result_begin (struct ui_out *uiout, char *class);
-
-extern void ui_out_result_end (struct ui_out *uiout);
-
-extern void ui_out_info_begin (struct ui_out *uiout, char *class);
-
-extern void ui_out_info_end (struct ui_out *uiout);
-
-extern void ui_out_notify_begin (struct ui_out *uiout, char *class);
-
-extern void ui_out_notify_end (struct ui_out *uiout);
-
-extern void ui_out_error_begin (struct ui_out *uiout, char *class);
-
-extern void ui_out_error_end (struct ui_out *uiout);
-#endif
-
-#if 0
-extern void gdb_error (struct ui_out *uiout, int severity, char *format, ...);
-
-extern void gdb_query (struct ui_out *uiout, int qflags, char *qprompt);
-#endif
-
 /* HACK: Code in GDB is currently checking to see the type of ui_out
    builder when determining which output to produce.  This function is
    a hack to encapsulate that test.  Once GDB manages to separate the
diff --git a/gdb/utils.c b/gdb/utils.c
index a838295..5566149 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -22,9 +22,11 @@
 #include "gdb_assert.h"
 #include <ctype.h>
 #include "gdb_string.h"
+#include "gdb_wait.h"
 #include "event-top.h"
 #include "exceptions.h"
 #include "gdbthread.h"
+#include "fnmatch.h"
 #ifdef HAVE_SYS_RESOURCE_H
 #include <sys/resource.h>
 #endif /* HAVE_SYS_RESOURCE_H */
@@ -98,8 +100,6 @@ static void vfprintf_maybe_filtered (struct ui_file *, const char *,
 
 static void fputs_maybe_filtered (const char *, struct ui_file *, int);
 
-static void do_my_cleanups (struct cleanup **, struct cleanup *);
-
 static void prompt_for_continue (void);
 
 static void set_screen_size (void);
@@ -109,12 +109,6 @@ static void set_width (void);
 
 static int debug_timestamp = 0;
 
-/* Chain of cleanup actions established with make_cleanup,
-   to be executed if an error happens.  */
-
-static struct cleanup *cleanup_chain;	/* cleaned up after a failed command */
-static struct cleanup *final_cleanup_chain;	/* cleaned up when gdb exits */
-
 /* Nonzero if we have job control.  */
 
 int job_control;
@@ -171,31 +165,11 @@ show_pagination_enabled (struct ui_file *file, int from_tty,
 }
 
 

+/* Cleanup utilities.
 
-/* Add a new cleanup to the cleanup_chain,
-   and return the previous chain pointer
-   to be passed later to do_cleanups or discard_cleanups.
-   Args are FUNCTION to clean up with, and ARG to pass to it.  */
-
-struct cleanup *
-make_cleanup (make_cleanup_ftype *function, void *arg)
-{
-  return make_my_cleanup (&cleanup_chain, function, arg);
-}
-
-struct cleanup *
-make_cleanup_dtor (make_cleanup_ftype *function, void *arg,
-		   void (*dtor) (void *))
-{
-  return make_my_cleanup2 (&cleanup_chain,
-			   function, arg, dtor);
-}
-
-struct cleanup *
-make_final_cleanup (make_cleanup_ftype *function, void *arg)
-{
-  return make_my_cleanup (&final_cleanup_chain, function, arg);
-}
+   These are not defined in cleanups.c (nor declared in cleanups.h)
+   because while they use the "cleanup API" they are not part of the
+   "cleanup API".  */
 
 static void
 do_freeargv (void *arg)
@@ -206,7 +180,7 @@ do_freeargv (void *arg)
 struct cleanup *
 make_cleanup_freeargv (char **arg)
 {
-  return make_my_cleanup (&cleanup_chain, do_freeargv, arg);
+  return make_cleanup (do_freeargv, arg);
 }
 
 static void
@@ -218,7 +192,7 @@ do_dyn_string_delete (void *arg)
 struct cleanup *
 make_cleanup_dyn_string_delete (dyn_string_t arg)
 {
-  return make_my_cleanup (&cleanup_chain, do_dyn_string_delete, arg);
+  return make_cleanup (do_dyn_string_delete, arg);
 }
 
 static void
@@ -295,7 +269,7 @@ do_ui_file_delete (void *arg)
 struct cleanup *
 make_cleanup_ui_file_delete (struct ui_file *arg)
 {
-  return make_my_cleanup (&cleanup_chain, do_ui_file_delete, arg);
+  return make_cleanup (do_ui_file_delete, arg);
 }
 
 /* Helper function for make_cleanup_ui_out_redirect_pop.  */
@@ -315,7 +289,7 @@ do_ui_out_redirect_pop (void *arg)
 struct cleanup *
 make_cleanup_ui_out_redirect_pop (struct ui_out *uiout)
 {
-  return make_my_cleanup (&cleanup_chain, do_ui_out_redirect_pop, uiout);
+  return make_cleanup (do_ui_out_redirect_pop, uiout);
 }
 
 static void
@@ -327,7 +301,7 @@ do_free_section_addr_info (void *arg)
 struct cleanup *
 make_cleanup_free_section_addr_info (struct section_addr_info *addrs)
 {
-  return make_my_cleanup (&cleanup_chain, do_free_section_addr_info, addrs);
+  return make_cleanup (do_free_section_addr_info, addrs);
 }
 
 struct restore_integer_closure
@@ -356,8 +330,7 @@ make_cleanup_restore_integer (int *variable)
   c->variable = variable;
   c->value = *variable;
 
-  return make_my_cleanup2 (&cleanup_chain, restore_integer, (void *)c,
-			   xfree);
+  return make_cleanup_dtor (restore_integer, (void *) c, xfree);
 }
 
 /* Remember the current value of *VARIABLE and make it restored when
@@ -384,7 +357,7 @@ do_unpush_target (void *arg)
 struct cleanup *
 make_cleanup_unpush_target (struct target_ops *ops)
 {
-  return make_my_cleanup (&cleanup_chain, do_unpush_target, ops);
+  return make_cleanup (do_unpush_target, ops);
 }
 
 /* Helper for make_cleanup_htab_delete compile time checking the types.  */
@@ -447,7 +420,7 @@ do_value_free_to_mark (void *value)
 struct cleanup *
 make_cleanup_value_free_to_mark (struct value *mark)
 {
-  return make_my_cleanup (&cleanup_chain, do_value_free_to_mark, mark);
+  return make_cleanup (do_value_free_to_mark, mark);
 }
 
 /* Helper for make_cleanup_value_free.  */
@@ -463,7 +436,7 @@ do_value_free (void *value)
 struct cleanup *
 make_cleanup_value_free (struct value *value)
 {
-  return make_my_cleanup (&cleanup_chain, do_value_free, value);
+  return make_cleanup (do_value_free, value);
 }
 
 /* Helper for make_cleanup_free_so.  */
@@ -481,133 +454,7 @@ do_free_so (void *arg)
 struct cleanup *
 make_cleanup_free_so (struct so_list *so)
 {
-  return make_my_cleanup (&cleanup_chain, do_free_so, so);
-}
-
-struct cleanup *
-make_my_cleanup2 (struct cleanup **pmy_chain, make_cleanup_ftype *function,
-		  void *arg,  void (*free_arg) (void *))
-{
-  struct cleanup *new
-    = (struct cleanup *) xmalloc (sizeof (struct cleanup));
-  struct cleanup *old_chain = *pmy_chain;
-
-  new->next = *pmy_chain;
-  new->function = function;
-  new->free_arg = free_arg;
-  new->arg = arg;
-  *pmy_chain = new;
-
-  return old_chain;
-}
-
-struct cleanup *
-make_my_cleanup (struct cleanup **pmy_chain, make_cleanup_ftype *function,
-		 void *arg)
-{
-  return make_my_cleanup2 (pmy_chain, function, arg, NULL);
-}
-
-/* Discard cleanups and do the actions they describe
-   until we get back to the point OLD_CHAIN in the cleanup_chain.  */
-
-void
-do_cleanups (struct cleanup *old_chain)
-{
-  do_my_cleanups (&cleanup_chain, old_chain);
-}
-
-void
-do_final_cleanups (struct cleanup *old_chain)
-{
-  do_my_cleanups (&final_cleanup_chain, old_chain);
-}
-
-static void
-do_my_cleanups (struct cleanup **pmy_chain,
-		struct cleanup *old_chain)
-{
-  struct cleanup *ptr;
-
-  while ((ptr = *pmy_chain) != old_chain)
-    {
-      *pmy_chain = ptr->next;	/* Do this first in case of recursion.  */
-      (*ptr->function) (ptr->arg);
-      if (ptr->free_arg)
-	(*ptr->free_arg) (ptr->arg);
-      xfree (ptr);
-    }
-}
-
-/* Discard cleanups, not doing the actions they describe,
-   until we get back to the point OLD_CHAIN in the cleanup_chain.  */
-
-void
-discard_cleanups (struct cleanup *old_chain)
-{
-  discard_my_cleanups (&cleanup_chain, old_chain);
-}
-
-void
-discard_final_cleanups (struct cleanup *old_chain)
-{
-  discard_my_cleanups (&final_cleanup_chain, old_chain);
-}
-
-void
-discard_my_cleanups (struct cleanup **pmy_chain,
-		     struct cleanup *old_chain)
-{
-  struct cleanup *ptr;
-
-  while ((ptr = *pmy_chain) != old_chain)
-    {
-      *pmy_chain = ptr->next;
-      if (ptr->free_arg)
-	(*ptr->free_arg) (ptr->arg);
-      xfree (ptr);
-    }
-}
-
-/* Set the cleanup_chain to 0, and return the old cleanup chain.  */
-struct cleanup *
-save_cleanups (void)
-{
-  return save_my_cleanups (&cleanup_chain);
-}
-
-struct cleanup *
-save_final_cleanups (void)
-{
-  return save_my_cleanups (&final_cleanup_chain);
-}
-
-struct cleanup *
-save_my_cleanups (struct cleanup **pmy_chain)
-{
-  struct cleanup *old_chain = *pmy_chain;
-
-  *pmy_chain = 0;
-  return old_chain;
-}
-
-/* Restore the cleanup chain from a previously saved chain.  */
-void
-restore_cleanups (struct cleanup *chain)
-{
-  restore_my_cleanups (&cleanup_chain, chain);
-}
-
-void
-restore_final_cleanups (struct cleanup *chain)
-{
-  restore_my_cleanups (&final_cleanup_chain, chain);
-}
-
-void
-restore_my_cleanups (struct cleanup **pmy_chain, struct cleanup *chain)
-{
-  *pmy_chain = chain;
+  return make_cleanup (do_free_so, so);
 }
 
 /* This function is useful for cleanups.
@@ -633,18 +480,6 @@ free_current_contents (void *ptr)
     }
 }
 
-/* Provide a known function that does nothing, to use as a base for
-   a possibly long chain of cleanups.  This is useful where we
-   use the cleanup chain for handling normal cleanups as well as dealing
-   with cleanups that need to be done as a result of a call to error().
-   In such cases, we may not be certain where the first cleanup is, unless
-   we have a do-nothing one to always use as the base.  */
-
-void
-null_cleanup (void *arg)
-{
-}
-
 /* If nonzero, display time usage both at startup and for each command.  */
 
 static int display_time;
@@ -885,7 +720,7 @@ can_dump_core (const char *reason)
 const char internal_problem_ask[] = "ask";
 const char internal_problem_yes[] = "yes";
 const char internal_problem_no[] = "no";
-static const char *internal_problem_modes[] =
+static const char *const internal_problem_modes[] =
 {
   internal_problem_ask,
   internal_problem_yes,
@@ -969,7 +804,7 @@ internal_vproblem (struct internal_problem *problem,
       /* Default (yes/batch case) is to quit GDB.  When in batch mode
 	 this lessens the likelihood of GDB going into an infinite
 	 loop.  */
-      if (caution == 0)
+      if (!confirm)
         {
           /* Emit the message and quit.  */
           fputs_unfiltered (reason, gdb_stderr);
@@ -1383,7 +1218,7 @@ defaulted_query (const char *ctlstr, const char defchar, va_list args)
 
   /* Automatically answer the default value if the user did not want
      prompts or the command was issued with the server prefix.  */
-  if (! caution || server_command)
+  if (!confirm || server_command)
     return def_value;
 
   /* If input isn't coming from the user directly, just say what
@@ -2588,7 +2423,7 @@ print_spaces_filtered (int n, struct ui_file *stream)
    demangling is off, the name is printed in its "raw" form.  */
 
 void
-fprintf_symbol_filtered (struct ui_file *stream, char *name,
+fprintf_symbol_filtered (struct ui_file *stream, const char *name,
 			 enum language lang, int arg_mode)
 {
   char *demangled;
@@ -3338,6 +3173,25 @@ gdb_realpath (const char *filename)
   }
 #endif
 
+  /* The MS Windows method.  If we don't have realpath, we assume we
+     don't have symlinks and just canonicalize to a Windows absolute
+     path.  GetFullPath converts ../ and ./ in relative paths to
+     absolute paths, filling in current drive if one is not given
+     or using the current directory of a specified drive (eg, "E:foo").
+     It also converts all forward slashes to back slashes.  */
+  /* The file system is case-insensitive but case-preserving.
+     So we do not lowercase the path.  Otherwise, we might not
+     be able to display the original casing in a given path.  */
+#if defined (_WIN32)
+  {
+    char buf[MAX_PATH];
+    DWORD len = GetFullPathName (filename, MAX_PATH, buf, NULL);
+
+    if (len > 0 && len < MAX_PATH)
+      return xstrdup (buf);
+  }
+#endif
+
   /* This system is a lost cause, just dup the buffer.  */
   return xstrdup (filename);
 }
@@ -3782,6 +3636,254 @@ producer_is_gcc_ge_4 (const char *producer)
   return minor;
 }
 
+/* Call xfree for each element of CHAR_PTR_VEC and final VEC_free for
+   CHAR_PTR_VEC itself.
+
+   You must not modify CHAR_PTR_VEC after it got registered with this function
+   by make_cleanup as the CHAR_PTR_VEC base address may change on its updates.
+   Contrary to VEC_free this function does not (cannot) clear the pointer.  */
+
+void
+free_char_ptr_vec (VEC (char_ptr) *char_ptr_vec)
+{
+  int ix;
+  char *name;
+
+  for (ix = 0; VEC_iterate (char_ptr, char_ptr_vec, ix, name); ++ix)
+    xfree (name);
+  VEC_free (char_ptr, char_ptr_vec);
+}
+
+/* Helper for make_cleanup_free_char_ptr_vec.  */
+
+static void
+do_free_char_ptr_vec (void *arg)
+{
+  VEC (char_ptr) *char_ptr_vec = arg;
+
+  free_char_ptr_vec (char_ptr_vec);
+}
+
+/* Make cleanup handler calling xfree for each element of CHAR_PTR_VEC and
+   final VEC_free for CHAR_PTR_VEC itself.
+
+   You must not modify CHAR_PTR_VEC after this cleanup registration as the
+   CHAR_PTR_VEC base address may change on its updates.  Contrary to VEC_free
+   this function does not (cannot) clear the pointer.  */
+
+struct cleanup *
+make_cleanup_free_char_ptr_vec (VEC (char_ptr) *char_ptr_vec)
+{
+  return make_cleanup (do_free_char_ptr_vec, char_ptr_vec);
+}
+
+/* Extended version of dirnames_to_char_ptr_vec - additionally if *VECP is
+   non-NULL the new list elements from DIRNAMES are appended to the existing
+   *VECP list of entries.  *VECP address will be updated by this call.  */
+
+void
+dirnames_to_char_ptr_vec_append (VEC (char_ptr) **vecp, const char *dirnames)
+{
+  do
+    {
+      size_t this_len;
+      char *next_dir, *this_dir;
+
+      next_dir = strchr (dirnames, DIRNAME_SEPARATOR);
+      if (next_dir == NULL)
+	this_len = strlen (dirnames);
+      else
+	{
+	  this_len = next_dir - dirnames;
+	  next_dir++;
+	}
+
+      this_dir = xmalloc (this_len + 1);
+      memcpy (this_dir, dirnames, this_len);
+      this_dir[this_len] = '\0';
+      VEC_safe_push (char_ptr, *vecp, this_dir);
+
+      dirnames = next_dir;
+    }
+  while (dirnames != NULL);
+}
+
+/* Split DIRNAMES by DIRNAME_SEPARATOR delimiter and return a list of all the
+   elements in their original order.  For empty string ("") DIRNAMES return
+   list of one empty string ("") element.
+   
+   You may modify the returned strings.
+   Read free_char_ptr_vec for its cleanup.  */
+
+VEC (char_ptr) *
+dirnames_to_char_ptr_vec (const char *dirnames)
+{
+  VEC (char_ptr) *retval = NULL;
+  
+  dirnames_to_char_ptr_vec_append (&retval, dirnames);
+
+  return retval;
+}
+
+/* Substitute all occurences of string FROM by string TO in *STRINGP.  *STRINGP
+   must come from xrealloc-compatible allocator and it may be updated.  FROM
+   needs to be delimited by IS_DIR_SEPARATOR or DIRNAME_SEPARATOR (or be
+   located at the start or end of *STRINGP.  */
+
+void
+substitute_path_component (char **stringp, const char *from, const char *to)
+{
+  char *string = *stringp, *s;
+  const size_t from_len = strlen (from);
+  const size_t to_len = strlen (to);
+
+  for (s = string;;)
+    {
+      s = strstr (s, from);
+      if (s == NULL)
+	break;
+
+      if ((s == string || IS_DIR_SEPARATOR (s[-1])
+	   || s[-1] == DIRNAME_SEPARATOR)
+          && (s[from_len] == '\0' || IS_DIR_SEPARATOR (s[from_len])
+	      || s[from_len] == DIRNAME_SEPARATOR))
+	{
+	  char *string_new;
+
+	  string_new = xrealloc (string, (strlen (string) + to_len + 1));
+
+	  /* Relocate the current S pointer.  */
+	  s = s - string + string_new;
+	  string = string_new;
+
+	  /* Replace from by to.  */
+	  memmove (&s[to_len], &s[from_len], strlen (&s[from_len]) + 1);
+	  memcpy (s, to, to_len);
+
+	  s += to_len;
+	}
+      else
+	s++;
+    }
+
+  *stringp = string;
+}
+
+#ifdef HAVE_WAITPID
+
+#ifdef SIGALRM
+
+/* SIGALRM handler for waitpid_with_timeout.  */
+
+static void
+sigalrm_handler (int signo)
+{
+  /* Nothing to do.  */
+}
+
+#endif
+
+/* Wrapper to wait for child PID to die with TIMEOUT.
+   TIMEOUT is the time to stop waiting in seconds.
+   If TIMEOUT is zero, pass WNOHANG to waitpid.
+   Returns PID if it was successfully waited for, otherwise -1.
+
+   Timeouts are currently implemented with alarm and SIGALRM.
+   If the host does not support them, this waits "forever".
+   It would be odd though for a host to have waitpid and not SIGALRM.  */
+
+pid_t
+wait_to_die_with_timeout (pid_t pid, int *status, int timeout)
+{
+  pid_t waitpid_result;
+
+  gdb_assert (pid > 0);
+  gdb_assert (timeout >= 0);
+
+  if (timeout > 0)
+    {
+#ifdef SIGALRM
+#if defined (HAVE_SIGACTION) && defined (SA_RESTART)
+      struct sigaction sa, old_sa;
+
+      sa.sa_handler = sigalrm_handler;
+      sigemptyset (&sa.sa_mask);
+      sa.sa_flags = 0;
+      sigaction (SIGALRM, &sa, &old_sa);
+#else
+      void (*ofunc) ();
+
+      ofunc = (void (*)()) signal (SIGALRM, sigalrm_handler);
+#endif
+
+      alarm (timeout);
+#endif
+
+      waitpid_result = waitpid (pid, status, 0);
+
+#ifdef SIGALRM
+      alarm (0);
+#if defined (HAVE_SIGACTION) && defined (SA_RESTART)
+      sigaction (SIGALRM, &old_sa, NULL);
+#else
+      signal (SIGALRM, ofunc);
+#endif
+#endif
+    }
+  else
+    waitpid_result = waitpid (pid, status, WNOHANG);
+
+  if (waitpid_result == pid)
+    return pid;
+  else
+    return -1;
+}
+
+#endif /* HAVE_WAITPID */
+
+/* Provide fnmatch compatible function for FNM_FILE_NAME matching of host files.
+   Both FNM_FILE_NAME and FNM_NOESCAPE must be set in FLAGS.
+
+   It handles correctly HAVE_DOS_BASED_FILE_SYSTEM and
+   HAVE_CASE_INSENSITIVE_FILE_SYSTEM.  */
+
+int
+gdb_filename_fnmatch (const char *pattern, const char *string, int flags)
+{
+  gdb_assert ((flags & FNM_FILE_NAME) != 0);
+
+  /* It is unclear how '\' escaping vs. directory separator should coexist.  */
+  gdb_assert ((flags & FNM_NOESCAPE) != 0);
+
+#ifdef HAVE_DOS_BASED_FILE_SYSTEM
+  {
+    char *pattern_slash, *string_slash;
+
+    /* Replace '\' by '/' in both strings.  */
+
+    pattern_slash = alloca (strlen (pattern) + 1);
+    strcpy (pattern_slash, pattern);
+    pattern = pattern_slash;
+    for (; *pattern_slash != 0; pattern_slash++)
+      if (IS_DIR_SEPARATOR (*pattern_slash))
+	*pattern_slash = '/';
+
+    string_slash = alloca (strlen (string) + 1);
+    strcpy (string_slash, string);
+    string = string_slash;
+    for (; *string_slash != 0; string_slash++)
+      if (IS_DIR_SEPARATOR (*string_slash))
+	*string_slash = '/';
+  }
+#endif /* HAVE_DOS_BASED_FILE_SYSTEM */
+
+#ifdef HAVE_CASE_INSENSITIVE_FILE_SYSTEM
+  flags |= FNM_CASEFOLD;
+#endif /* HAVE_CASE_INSENSITIVE_FILE_SYSTEM */
+
+  return fnmatch (pattern, string, flags);
+}
+
 /* Provide a prototype to silence -Wmissing-prototypes.  */
 extern initialize_file_ftype _initialize_utils;
 
diff --git a/gdb/v850-tdep.c b/gdb/v850-tdep.c
index e21b9c5..e374df8 100644
--- a/gdb/v850-tdep.c
+++ b/gdb/v850-tdep.c
@@ -102,6 +102,98 @@ enum
     E_R63_REGNUM,
     E_R64_REGNUM, E_PC_REGNUM = E_R64_REGNUM,
     E_R65_REGNUM,
+    E_NUM_OF_V850_REGS,
+    E_NUM_OF_V850E_REGS = E_NUM_OF_V850_REGS,
+
+    /* mpu0 system registers */
+    E_R66_REGNUM = E_NUM_OF_V850_REGS,
+    E_R67_REGNUM,
+    E_R68_REGNUM,
+    E_R69_REGNUM,
+    E_R70_REGNUM,
+    E_R71_REGNUM,
+    E_R72_REGNUM,
+    E_R73_REGNUM,
+    E_R74_REGNUM,
+    E_R75_REGNUM,
+    E_R76_REGNUM,
+    E_R77_REGNUM,
+    E_R78_REGNUM,
+    E_R79_REGNUM,
+    E_R80_REGNUM,
+    E_R81_REGNUM,
+    E_R82_REGNUM,
+    E_R83_REGNUM,
+    E_R84_REGNUM,
+    E_R85_REGNUM,
+    E_R86_REGNUM,
+    E_R87_REGNUM,
+    E_R88_REGNUM,
+    E_R89_REGNUM,
+    E_R90_REGNUM,
+    E_R91_REGNUM,
+    E_R92_REGNUM,
+    E_R93_REGNUM,
+
+    /* mpu1 system registers */
+
+    E_R94_REGNUM,
+    E_R95_REGNUM,
+    E_R96_REGNUM,
+    E_R97_REGNUM,
+    E_R98_REGNUM,
+    E_R99_REGNUM,
+    E_R100_REGNUM,
+    E_R101_REGNUM,
+    E_R102_REGNUM,
+    E_R103_REGNUM,
+    E_R104_REGNUM,
+    E_R105_REGNUM,
+    E_R106_REGNUM,
+    E_R107_REGNUM,
+    E_R108_REGNUM,
+    E_R109_REGNUM,
+    E_R110_REGNUM,
+    E_R111_REGNUM,
+    E_R112_REGNUM,
+    E_R113_REGNUM,
+    E_R114_REGNUM,
+    E_R115_REGNUM,
+    E_R116_REGNUM,
+    E_R117_REGNUM,
+    E_R118_REGNUM,
+    E_R119_REGNUM,
+    E_R120_REGNUM,
+    E_R121_REGNUM,
+
+    /* fpu system registers */
+    E_R122_REGNUM,
+    E_R123_REGNUM,
+    E_R124_REGNUM,
+    E_R125_REGNUM,
+    E_R126_REGNUM,
+    E_R127_REGNUM,
+    E_R128_REGNUM, E_FPSR_REGNUM = E_R128_REGNUM,
+    E_R129_REGNUM, E_FPEPC_REGNUM = E_R129_REGNUM,
+    E_R130_REGNUM, E_FPST_REGNUM = E_R130_REGNUM,
+    E_R131_REGNUM, E_FPCC_REGNUM = E_R131_REGNUM,
+    E_R132_REGNUM, E_FPCFG_REGNUM = E_R132_REGNUM,
+    E_R133_REGNUM,
+    E_R134_REGNUM,
+    E_R135_REGNUM,
+    E_R136_REGNUM,
+    E_R137_REGNUM,
+    E_R138_REGNUM,
+    E_R139_REGNUM,
+    E_R140_REGNUM,
+    E_R141_REGNUM,
+    E_R142_REGNUM,
+    E_R143_REGNUM,
+    E_R144_REGNUM,
+    E_R145_REGNUM,
+    E_R146_REGNUM,
+    E_R147_REGNUM,
+    E_R148_REGNUM,
     E_NUM_REGS
   };
 
@@ -152,7 +244,7 @@ v850_register_name (struct gdbarch *gdbarch, int regnum)
     "sr24", "sr25", "sr26", "sr27", "sr28", "sr29", "sr30", "sr31",
     "pc", "fp"
   };
-  if (regnum < 0 || regnum >= E_NUM_REGS)
+  if (regnum < 0 || regnum > E_NUM_OF_V850_REGS)
     return NULL;
   return v850_reg_names[regnum];
 }
@@ -172,11 +264,50 @@ v850e_register_name (struct gdbarch *gdbarch, int regnum)
     "sr24", "sr25", "sr26", "sr27", "sr28", "sr29", "sr30", "sr31",
     "pc", "fp"
   };
-  if (regnum < 0 || regnum >= E_NUM_REGS)
+  if (regnum < 0 || regnum > E_NUM_OF_V850E_REGS)
     return NULL;
   return v850e_reg_names[regnum];
 }
 
+static const char *
+v850e2_register_name (struct gdbarch *gdbarch, int regnum)
+{
+  static const char *v850e2_reg_names[] =
+  {
+    "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
+    "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
+    "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
+    "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
+
+    "eipc", "eipsw", "fepc", "fepsw", "ecr", "psw", "sr6", "sr7",
+    "sr8", "sr9", "sr10", "sr11", "sr12", "sr13", "sr14", "sr15",
+    "ctpc", "ctpsw", "dbpc", "dbpsw", "ctbp", "sr21", "sr22", "sr23",
+    "sr24", "sr25", "sr26", "sr27", "sr28", "sr29", "sr30", "sr31",
+    "pc", "fp"
+
+    /* mpu0 system registers */
+    "vip", "sr33", "sr34", "sr35", "vmecr", "vmtid", "vmadr", "sr39",
+    "vpecr", "vptid", "vpadr", "sr43", "vdecr", "vdtid", "sr46", "sr47",
+    "sr48", "sr49", "sr50", "sr51", "sr52", "sr53", "sr54", "sr55",
+    "sr56", "sr57", "sr58", "sr59",
+
+    /* mpu1 system registers */
+    "mpm", "mpc", "tid", "ppa", "ppm", "ppc", "dcc", "dcv0",
+    "dcv1", "sr69", "spal", "spau", "ipa0l", "ipa0u", "ipa1l", "ipa1u",
+    "iap2l", "ipa2u", "ipa3l", "ipa3u", "dpa0l", "dpa0u", "dpa1l", "dpa1u",
+    "dpa2l", "dpa2u", "dpa3l", "dpa3u",
+
+    /* fpu system registers */
+    "sr88", "sr89", "sr90", "sr91", "sr92", "sr93", "fpsr", "fpepc",
+    "fpst", "fpcc", "fpcfg", "sr99", "sr100", "sr101", "sr102", "sr103",
+    "sr104", "sr105", "sr106", "sr107", "sr108", "sr109", "sr110", "sr111",
+    "sr112", "sr113", "sr114", "sr115"
+  };
+  if (regnum < 0 || regnum >= E_NUM_REGS)
+    return NULL;
+  return v850e2_reg_names[regnum];
+}
+
 /* Returns the default type for register N.  */
 
 static struct type *
@@ -462,7 +593,6 @@ v850_analyze_prologue (struct gdbarch *gdbarch,
   CORE_ADDR prologue_end, current_pc;
   struct pifsr pifsrs[E_NUM_REGS + 1];
   struct pifsr *pifsr, *pifsr_tmp;
-  int fp_used;
   int ep_used;
   int reg;
   CORE_ADDR save_pc, save_end;
@@ -802,7 +932,7 @@ v850_store_return_value (struct type *type, struct regcache *regcache,
 }
 
 static enum return_value_convention
-v850_return_value (struct gdbarch *gdbarch, struct type *func_type,
+v850_return_value (struct gdbarch *gdbarch, struct value *function,
 		   struct type *type, struct regcache *regcache,
 		   gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -827,7 +957,6 @@ static struct v850_frame_cache *
 v850_alloc_frame_cache (struct frame_info *this_frame)
 {
   struct v850_frame_cache *cache;
-  int i;
 
   cache = FRAME_OBSTACK_ZALLOC (struct v850_frame_cache);
   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
@@ -894,7 +1023,7 @@ v850_frame_cache (struct frame_info *this_frame, void **this_cache)
 
   /* Adjust all the saved registers such that they contain addresses
      instead of offsets.  */
-  for (i = 0; i < E_NUM_REGS; i++)
+  for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
     if (trad_frame_addr_p (cache->saved_regs, i))
       cache->saved_regs[i].addr += cache->base;
 
@@ -994,14 +1123,20 @@ v850_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
     {
     case bfd_mach_v850:
       set_gdbarch_register_name (gdbarch, v850_register_name);
+      set_gdbarch_num_regs (gdbarch, E_NUM_OF_V850_REGS);
       break;
     case bfd_mach_v850e:
     case bfd_mach_v850e1:
       set_gdbarch_register_name (gdbarch, v850e_register_name);
+      set_gdbarch_num_regs (gdbarch, E_NUM_OF_V850E_REGS);
+      break;
+    case bfd_mach_v850e2:
+    case bfd_mach_v850e2v3:
+      set_gdbarch_register_name (gdbarch, v850e2_register_name);
+      set_gdbarch_num_regs (gdbarch, E_NUM_REGS);
       break;
     }
 
-  set_gdbarch_num_regs (gdbarch, E_NUM_REGS);
   set_gdbarch_num_pseudo_regs (gdbarch, 0);
   set_gdbarch_sp_regnum (gdbarch, E_SP_REGNUM);
   set_gdbarch_pc_regnum (gdbarch, E_PC_REGNUM);
diff --git a/gdb/valarith.c b/gdb/valarith.c
index b8bcc6b..96d5411 100644
--- a/gdb/valarith.c
+++ b/gdb/valarith.c
@@ -64,7 +64,7 @@ find_size_for_pointer_math (struct type *ptr_type)
 	sz = 1;
       else
 	{
-	  char *name;
+	  const char *name;
 	  
 	  name = TYPE_NAME (ptr_target);
 	  if (name == NULL)
@@ -279,7 +279,7 @@ binop_types_user_defined_p (enum exp_opcode op,
   if (TYPE_CODE (type1) == TYPE_CODE_REF)
     type1 = check_typedef (TYPE_TARGET_TYPE (type1));
 
-  type2 = check_typedef (type1);
+  type2 = check_typedef (type2);
   if (TYPE_CODE (type2) == TYPE_CODE_REF)
     type2 = check_typedef (TYPE_TARGET_TYPE (type2));
 
@@ -1390,7 +1390,7 @@ static struct value *
 vector_binop (struct value *val1, struct value *val2, enum exp_opcode op)
 {
   struct value *val, *tmp, *mark;
-  struct type *type1, *type2, *eltype1, *eltype2, *result_type;
+  struct type *type1, *type2, *eltype1, *eltype2;
   int t1_is_vec, t2_is_vec, elsize, i;
   LONGEST low_bound1, high_bound1, low_bound2, high_bound2;
 
diff --git a/gdb/valops.c b/gdb/valops.c
index 5453b1a..97d889b 100644
--- a/gdb/valops.c
+++ b/gdb/valops.c
@@ -301,10 +301,14 @@ value_cast_structs (struct type *type, struct value *v2)
 
 /* Cast one pointer or reference type to another.  Both TYPE and
    the type of ARG2 should be pointer types, or else both should be
-   reference types.  Returns the new pointer or reference.  */
+   reference types.  If SUBCLASS_CHECK is non-zero, this will force a
+   check to see whether TYPE is a superclass of ARG2's type.  If
+   SUBCLASS_CHECK is zero, then the subclass check is done only when
+   ARG2 is itself non-zero.  Returns the new pointer or reference.  */
 
 struct value *
-value_cast_pointers (struct type *type, struct value *arg2)
+value_cast_pointers (struct type *type, struct value *arg2,
+		     int subclass_check)
 {
   struct type *type1 = check_typedef (type);
   struct type *type2 = check_typedef (value_type (arg2));
@@ -313,7 +317,7 @@ value_cast_pointers (struct type *type, struct value *arg2)
 
   if (TYPE_CODE (t1) == TYPE_CODE_STRUCT
       && TYPE_CODE (t2) == TYPE_CODE_STRUCT
-      && !value_logical_not (arg2))
+      && (subclass_check || !value_logical_not (arg2)))
     {
       struct value *v2;
 
@@ -568,7 +572,7 @@ value_cast (struct type *type, struct value *arg2)
   else if (TYPE_LENGTH (type) == TYPE_LENGTH (type2))
     {
       if (code1 == TYPE_CODE_PTR && code2 == TYPE_CODE_PTR)
-	return value_cast_pointers (type, arg2);
+	return value_cast_pointers (type, arg2, 0);
 
       arg2 = value_copy (arg2);
       deprecated_set_value_type (arg2, type);
@@ -1295,9 +1299,7 @@ value_assign (struct value *toval, struct value *fromval)
 	    dest_buffer = value_contents (fromval);
 	  }
 
-	write_memory (changed_addr, dest_buffer, changed_len);
-	observer_notify_memory_changed (changed_addr, changed_len,
-					dest_buffer);
+	write_memory_with_notification (changed_addr, dest_buffer, changed_len);
       }
       break;
 
@@ -1772,15 +1774,7 @@ value_ind (struct value *arg1)
 			      (value_as_address (arg1)
 			       - value_pointed_to_offset (arg1)));
 
-      /* Re-adjust type.  */
-      deprecated_set_value_type (arg2, TYPE_TARGET_TYPE (base_type));
-      /* Add embedding info.  */
-      set_value_enclosing_type (arg2, enc_type);
-      set_value_embedded_offset (arg2, value_pointed_to_offset (arg1));
-
-      /* We may be pointing to an object of some derived type.  */
-      arg2 = value_full_object (arg2, NULL, 0, 0, 0);
-      return arg2;
+      return readjust_indirect_value_type (arg2, enc_type, base_type, arg1);
     }
 
   error (_("Attempt to take contents of a non-pointer value."));
@@ -1984,17 +1978,41 @@ typecmp (int staticp, int varargs, int nargs,
   return i + 1;
 }
 
-/* Helper function used by value_struct_elt to recurse through
-   baseclasses.  Look for a field NAME in ARG1.  Adjust the address of
-   ARG1 by OFFSET bytes, and search in it assuming it has (class) type
-   TYPE.  If found, return value, else return NULL.
+/* Helper class for do_search_struct_field that updates *RESULT_PTR
+   and *LAST_BOFFSET, and possibly throws an exception if the field
+   search has yielded ambiguous results.  */
 
-   If LOOKING_FOR_BASECLASS, then instead of looking for struct
-   fields, look for a baseclass named NAME.  */
+static void
+update_search_result (struct value **result_ptr, struct value *v,
+		      int *last_boffset, int boffset,
+		      const char *name, struct type *type)
+{
+  if (v != NULL)
+    {
+      if (*result_ptr != NULL
+	  /* The result is not ambiguous if all the classes that are
+	     found occupy the same space.  */
+	  && *last_boffset != boffset)
+	error (_("base class '%s' is ambiguous in type '%s'"),
+	       name, TYPE_SAFE_NAME (type));
+      *result_ptr = v;
+      *last_boffset = boffset;
+    }
+}
 
-static struct value *
-search_struct_field (const char *name, struct value *arg1, int offset,
-		     struct type *type, int looking_for_baseclass)
+/* A helper for search_struct_field.  This does all the work; most
+   arguments are as passed to search_struct_field.  The result is
+   stored in *RESULT_PTR, which must be initialized to NULL.
+   OUTERMOST_TYPE is the type of the initial type passed to
+   search_struct_field; this is used for error reporting when the
+   lookup is ambiguous.  */
+
+static void
+do_search_struct_field (const char *name, struct value *arg1, int offset,
+			struct type *type, int looking_for_baseclass,
+			struct value **result_ptr,
+			int *last_boffset,
+			struct type *outermost_type)
 {
   int i;
   int nbases;
@@ -2005,7 +2023,7 @@ search_struct_field (const char *name, struct value *arg1, int offset,
   if (!looking_for_baseclass)
     for (i = TYPE_NFIELDS (type) - 1; i >= nbases; i--)
       {
-	char *t_field_name = TYPE_FIELD_NAME (type, i);
+	const char *t_field_name = TYPE_FIELD_NAME (type, i);
 
 	if (t_field_name && (strcmp_iw (t_field_name, name) == 0))
 	  {
@@ -2020,12 +2038,9 @@ search_struct_field (const char *name, struct value *arg1, int offset,
 			 name);
 	      }
 	    else
-	      {
-		v = value_primitive_field (arg1, offset, i, type);
-		if (v == 0)
-		  error (_("there is no field named %s"), name);
-	      }
-	    return v;
+	      v = value_primitive_field (arg1, offset, i, type);
+	    *result_ptr = v;
+	    return;
 	  }
 
 	if (t_field_name
@@ -2050,7 +2065,7 @@ search_struct_field (const char *name, struct value *arg1, int offset,
 		   represented as a struct, with a member for each
 		   <variant field>.  */
 
-		struct value *v;
+		struct value *v = NULL;
 		int new_offset = offset;
 
 		/* This is pretty gross.  In G++, the offset in an
@@ -2064,18 +2079,23 @@ search_struct_field (const char *name, struct value *arg1, int offset,
 			&& TYPE_FIELD_BITPOS (field_type, 0) == 0))
 		  new_offset += TYPE_FIELD_BITPOS (type, i) / 8;
 
-		v = search_struct_field (name, arg1, new_offset, 
-					 field_type,
-					 looking_for_baseclass);
+		do_search_struct_field (name, arg1, new_offset, 
+					field_type,
+					looking_for_baseclass, &v,
+					last_boffset,
+					outermost_type);
 		if (v)
-		  return v;
+		  {
+		    *result_ptr = v;
+		    return;
+		  }
 	      }
 	  }
       }
 
   for (i = 0; i < nbases; i++)
     {
-      struct value *v;
+      struct value *v = NULL;
       struct type *basetype = check_typedef (TYPE_BASECLASS (type, i));
       /* If we are looking for baseclasses, this is what we get when
          we hit them.  But it could happen that the base part's member
@@ -2085,10 +2105,10 @@ search_struct_field (const char *name, struct value *arg1, int offset,
 			     && (strcmp_iw (name, 
 					    TYPE_BASECLASS_NAME (type, 
 								 i)) == 0));
+      int boffset = value_embedded_offset (arg1) + offset;
 
       if (BASETYPE_VIA_VIRTUAL (type, i))
 	{
-	  int boffset;
 	  struct value *v2;
 
 	  boffset = baseclass_offset (type, i,
@@ -2124,22 +2144,51 @@ search_struct_field (const char *name, struct value *arg1, int offset,
 	    }
 
 	  if (found_baseclass)
-	    return v2;
-	  v = search_struct_field (name, v2, 0,
-				   TYPE_BASECLASS (type, i),
-				   looking_for_baseclass);
+	    v = v2;
+	  else
+	    {
+	      do_search_struct_field (name, v2, 0,
+				      TYPE_BASECLASS (type, i),
+				      looking_for_baseclass,
+				      result_ptr, last_boffset,
+				      outermost_type);
+	    }
 	}
       else if (found_baseclass)
 	v = value_primitive_field (arg1, offset, i, type);
       else
-	v = search_struct_field (name, arg1,
-				 offset + TYPE_BASECLASS_BITPOS (type, 
-								 i) / 8,
-				 basetype, looking_for_baseclass);
-      if (v)
-	return v;
+	{
+	  do_search_struct_field (name, arg1,
+				  offset + TYPE_BASECLASS_BITPOS (type, 
+								  i) / 8,
+				  basetype, looking_for_baseclass,
+				  result_ptr, last_boffset,
+				  outermost_type);
+	}
+
+      update_search_result (result_ptr, v, last_boffset,
+			    boffset, name, outermost_type);
     }
-  return NULL;
+}
+
+/* Helper function used by value_struct_elt to recurse through
+   baseclasses.  Look for a field NAME in ARG1.  Adjust the address of
+   ARG1 by OFFSET bytes, and search in it assuming it has (class) type
+   TYPE.  If found, return value, else return NULL.
+
+   If LOOKING_FOR_BASECLASS, then instead of looking for struct
+   fields, look for a baseclass named NAME.  */
+
+static struct value *
+search_struct_field (const char *name, struct value *arg1, int offset,
+		     struct type *type, int looking_for_baseclass)
+{
+  struct value *result = NULL;
+  int boffset = 0;
+
+  do_search_struct_field (name, arg1, offset, type, looking_for_baseclass,
+			  &result, &boffset, type);
+  return result;
 }
 
 /* Helper function used by value_struct_elt to recurse through
@@ -2163,7 +2212,7 @@ search_struct_method (const char *name, struct value **arg1p,
   CHECK_TYPEDEF (type);
   for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; i--)
     {
-      char *t_field_name = TYPE_FN_FIELDLIST_NAME (type, i);
+      const char *t_field_name = TYPE_FN_FIELDLIST_NAME (type, i);
 
       /* FIXME!  May need to check for ARM demangling here.  */
       if (strncmp (t_field_name, "__", 2) == 0 ||
@@ -2407,7 +2456,7 @@ find_method_list (struct value **argp, const char *method,
   for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; i--)
     {
       /* pai: FIXME What about operators and type conversions?  */
-      char *fn_field_name = TYPE_FN_FIELDLIST_NAME (type, i);
+      const char *fn_field_name = TYPE_FN_FIELDLIST_NAME (type, i);
 
       if (fn_field_name && (strcmp_iw (fn_field_name, method) == 0))
 	{
@@ -2461,7 +2510,7 @@ find_method_list (struct value **argp, const char *method,
       method.
    BOFFSET is the offset of the base subobject which defines the method.  */
 
-struct fn_field *
+static struct fn_field *
 value_find_oload_method_list (struct value **argp, const char *method,
 			      int offset, int *num_fns, 
 			      struct type **basetype, int *boffset)
@@ -2630,8 +2679,7 @@ find_overload_match (struct value **args, int nargs,
          and non member function, the first argument must now be
          dereferenced.  */
       if (method == BOTH)
-	deprecated_set_value_type (args[0],
-				   TYPE_TARGET_TYPE (value_type (args[0])));
+	args[0] = value_ind (args[0]);
 
       if (fsym)
         {
@@ -3154,7 +3202,7 @@ check_field (struct type *type, const char *name)
 
   for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--)
     {
-      char *t_field_name = TYPE_FIELD_NAME (type, i);
+      const char *t_field_name = TYPE_FIELD_NAME (type, i);
 
       if (t_field_name && (strcmp_iw (t_field_name, name) == 0))
 	return 1;
@@ -3280,7 +3328,7 @@ value_struct_elt_for_reference (struct type *domain, int offset,
 
   for (i = TYPE_NFIELDS (t) - 1; i >= TYPE_N_BASECLASSES (t); i--)
     {
-      char *t_field_name = TYPE_FIELD_NAME (t, i);
+      const char *t_field_name = TYPE_FIELD_NAME (t, i);
 
       if (t_field_name && strcmp (t_field_name, name) == 0)
 	{
@@ -3317,7 +3365,7 @@ value_struct_elt_for_reference (struct type *domain, int offset,
 
   for (i = TYPE_NFN_FIELDS (t) - 1; i >= 0; --i)
     {
-      char *t_field_name = TYPE_FN_FIELDLIST_NAME (t, i);
+      const char *t_field_name = TYPE_FN_FIELDLIST_NAME (t, i);
       char dem_opname[64];
 
       if (strncmp (t_field_name, "__", 2) == 0 
@@ -3526,21 +3574,48 @@ value_maybe_namespace_elt (const struct type *curtype,
   return result;
 }
 
-/* Given a pointer value V, find the real (RTTI) type of the object it
-   points to.
+/* Given a pointer or a reference value V, find its real (RTTI) type.
 
    Other parameters FULL, TOP, USING_ENC as with value_rtti_type()
    and refer to the values computed for the object pointed to.  */
 
 struct type *
-value_rtti_target_type (struct value *v, int *full, 
-			int *top, int *using_enc)
+value_rtti_indirect_type (struct value *v, int *full, 
+			  int *top, int *using_enc)
 {
   struct value *target;
+  struct type *type, *real_type, *target_type;
 
-  target = value_ind (v);
+  type = value_type (v);
+  type = check_typedef (type);
+  if (TYPE_CODE (type) == TYPE_CODE_REF)
+    target = coerce_ref (v);
+  else if (TYPE_CODE (type) == TYPE_CODE_PTR)
+    target = value_ind (v);
+  else
+    return NULL;
+
+  real_type = value_rtti_type (target, full, top, using_enc);
+
+  if (real_type)
+    {
+      /* Copy qualifiers to the referenced object.  */
+      target_type = value_type (target);
+      real_type = make_cv_type (TYPE_CONST (target_type),
+				TYPE_VOLATILE (target_type), real_type, NULL);
+      if (TYPE_CODE (type) == TYPE_CODE_REF)
+        real_type = lookup_reference_type (real_type);
+      else if (TYPE_CODE (type) == TYPE_CODE_PTR)
+        real_type = lookup_pointer_type (real_type);
+      else
+        internal_error (__FILE__, __LINE__, _("Unexpected value type."));
+
+      /* Copy qualifiers to the pointer/reference.  */
+      real_type = make_cv_type (TYPE_CONST (type), TYPE_VOLATILE (type),
+				real_type, NULL);
+    }
 
-  return value_rtti_type (target, full, top, using_enc);
+  return real_type;
 }
 
 /* Given a value pointed to by ARGP, check its real run-time type, and
diff --git a/gdb/valprint.c b/gdb/valprint.c
index 325cf40..fc5942d 100644
--- a/gdb/valprint.c
+++ b/gdb/valprint.c
@@ -85,7 +85,8 @@ struct value_print_options user_print_options =
   1,				/* static_field_print */
   1,				/* pascal_static_field_print */
   0,				/* raw */
-  0				/* summary */
+  0,				/* summary */
+  1				/* symbol_print */
 };
 
 /* Initialize *OPTS to be a copy of the user print options.  */
@@ -219,6 +220,16 @@ show_addressprint (struct ui_file *file, int from_tty,
 {
   fprintf_filtered (file, _("Printing of addresses is %s.\n"), value);
 }
+
+static void
+show_symbol_print (struct ui_file *file, int from_tty,
+		   struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file,
+		    _("Printing of symbols when printing pointers is %s.\n"),
+		    value);
+}
+
 

 
 /* A helper function for val_print.  When printing in "summary" mode,
@@ -248,17 +259,9 @@ scalar_type_p (struct type *type)
     }
 }
 
-/* Helper function to check the validity of some bits of a value.
-
-   If TYPE represents some aggregate type (e.g., a structure), return 1.
-   
-   Otherwise, any of the bytes starting at OFFSET and extending for
-   TYPE_LENGTH(TYPE) bytes are invalid, print a message to STREAM and
-   return 0.  The checking is done using FUNCS.
-   
-   Otherwise, return 1.  */
+/* See its definition in value.h.  */
 
-static int
+int
 valprint_check_validity (struct ui_file *stream,
 			 struct type *type,
 			 int embedded_offset,
@@ -312,6 +315,361 @@ val_print_invalid_address (struct ui_file *stream)
   fprintf_filtered (stream, _("<invalid address>"));
 }
 
+/* A generic val_print that is suitable for use by language
+   implementations of the la_val_print method.  This function can
+   handle most type codes, though not all, notably exception
+   TYPE_CODE_UNION and TYPE_CODE_STRUCT, which must be implemented by
+   the caller.
+   
+   Most arguments are as to val_print.
+   
+   The additional DECORATIONS argument can be used to customize the
+   output in some small, language-specific ways.  */
+
+void
+generic_val_print (struct type *type, const gdb_byte *valaddr,
+		   int embedded_offset, CORE_ADDR address,
+		   struct ui_file *stream, int recurse,
+		   const struct value *original_value,
+		   const struct value_print_options *options,
+		   const struct generic_val_print_decorations *decorations)
+{
+  struct gdbarch *gdbarch = get_type_arch (type);
+  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+  unsigned int i = 0;	/* Number of characters printed.  */
+  unsigned len;
+  struct type *elttype, *unresolved_elttype;
+  struct type *unresolved_type = type;
+  LONGEST val;
+  CORE_ADDR addr;
+
+  CHECK_TYPEDEF (type);
+  switch (TYPE_CODE (type))
+    {
+    case TYPE_CODE_ARRAY:
+      unresolved_elttype = TYPE_TARGET_TYPE (type);
+      elttype = check_typedef (unresolved_elttype);
+      if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (unresolved_elttype) > 0)
+	{
+          LONGEST low_bound, high_bound;
+
+          if (!get_array_bounds (type, &low_bound, &high_bound))
+            error (_("Could not determine the array high bound"));
+
+	  if (options->prettyprint_arrays)
+	    {
+	      print_spaces_filtered (2 + 2 * recurse, stream);
+	    }
+
+	  fprintf_filtered (stream, "{");
+	  val_print_array_elements (type, valaddr, embedded_offset,
+				    address, stream,
+				    recurse, original_value, options, 0);
+	  fprintf_filtered (stream, "}");
+	  break;
+	}
+      /* Array of unspecified length: treat like pointer to first
+	 elt.  */
+      addr = address + embedded_offset;
+      goto print_unpacked_pointer;
+
+    case TYPE_CODE_MEMBERPTR:
+      val_print_scalar_formatted (type, valaddr, embedded_offset,
+				  original_value, options, 0, stream);
+      break;
+
+    case TYPE_CODE_PTR:
+      if (options->format && options->format != 's')
+	{
+	  val_print_scalar_formatted (type, valaddr, embedded_offset,
+				      original_value, options, 0, stream);
+	  break;
+	}
+      unresolved_elttype = TYPE_TARGET_TYPE (type);
+      elttype = check_typedef (unresolved_elttype);
+	{
+	  addr = unpack_pointer (type, valaddr + embedded_offset);
+	print_unpacked_pointer:
+
+	  if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
+	    {
+	      /* Try to print what function it points to.  */
+	      print_function_pointer_address (options, gdbarch, addr, stream);
+	      return;
+	    }
+
+	  if (options->symbol_print)
+	    print_address_demangle (options, gdbarch, addr, stream, demangle);
+	  else if (options->addressprint)
+	    fputs_filtered (paddress (gdbarch, addr), stream);
+	}
+      break;
+
+    case TYPE_CODE_REF:
+      elttype = check_typedef (TYPE_TARGET_TYPE (type));
+      if (options->addressprint)
+	{
+	  CORE_ADDR addr
+	    = extract_typed_address (valaddr + embedded_offset, type);
+
+	  fprintf_filtered (stream, "@");
+	  fputs_filtered (paddress (gdbarch, addr), stream);
+	  if (options->deref_ref)
+	    fputs_filtered (": ", stream);
+	}
+      /* De-reference the reference.  */
+      if (options->deref_ref)
+	{
+	  if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF)
+	    {
+	      struct value *deref_val;
+
+	      deref_val = coerce_ref_if_computed (original_value);
+	      if (deref_val != NULL)
+		{
+		  /* More complicated computed references are not supported.  */
+		  gdb_assert (embedded_offset == 0);
+		}
+	      else
+		deref_val = value_at (TYPE_TARGET_TYPE (type),
+				      unpack_pointer (type,
+						      (valaddr
+						       + embedded_offset)));
+
+	      common_val_print (deref_val, stream, recurse, options,
+				current_language);
+	    }
+	  else
+	    fputs_filtered ("???", stream);
+	}
+      break;
+
+    case TYPE_CODE_ENUM:
+      if (options->format)
+	{
+	  val_print_scalar_formatted (type, valaddr, embedded_offset,
+				      original_value, options, 0, stream);
+	  break;
+	}
+      len = TYPE_NFIELDS (type);
+      val = unpack_long (type, valaddr + embedded_offset);
+      for (i = 0; i < len; i++)
+	{
+	  QUIT;
+	  if (val == TYPE_FIELD_ENUMVAL (type, i))
+	    {
+	      break;
+	    }
+	}
+      if (i < len)
+	{
+	  fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
+	}
+      else if (TYPE_FLAG_ENUM (type))
+	{
+	  int first = 1;
+
+	  /* We have a "flag" enum, so we try to decompose it into
+	     pieces as appropriate.  A flag enum has disjoint
+	     constants by definition.  */
+	  fputs_filtered ("(", stream);
+	  for (i = 0; i < len; ++i)
+	    {
+	      QUIT;
+
+	      if ((val & TYPE_FIELD_ENUMVAL (type, i)) != 0)
+		{
+		  if (!first)
+		    fputs_filtered (" | ", stream);
+		  first = 0;
+
+		  val &= ~TYPE_FIELD_ENUMVAL (type, i);
+		  fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
+		}
+	    }
+
+	  if (first || val != 0)
+	    {
+	      if (!first)
+		fputs_filtered (" | ", stream);
+	      fputs_filtered ("unknown: ", stream);
+	      print_longest (stream, 'd', 0, val);
+	    }
+
+	  fputs_filtered (")", stream);
+	}
+      else
+	print_longest (stream, 'd', 0, val);
+      break;
+
+    case TYPE_CODE_FLAGS:
+      if (options->format)
+	val_print_scalar_formatted (type, valaddr, embedded_offset,
+				    original_value, options, 0, stream);
+      else
+	val_print_type_code_flags (type, valaddr + embedded_offset,
+				   stream);
+      break;
+
+    case TYPE_CODE_FUNC:
+    case TYPE_CODE_METHOD:
+      if (options->format)
+	{
+	  val_print_scalar_formatted (type, valaddr, embedded_offset,
+				      original_value, options, 0, stream);
+	  break;
+	}
+      /* FIXME, we should consider, at least for ANSI C language,
+         eliminating the distinction made between FUNCs and POINTERs
+         to FUNCs.  */
+      fprintf_filtered (stream, "{");
+      type_print (type, "", stream, -1);
+      fprintf_filtered (stream, "} ");
+      /* Try to print what function it points to, and its address.  */
+      print_address_demangle (options, gdbarch, address, stream, demangle);
+      break;
+
+    case TYPE_CODE_BOOL:
+      if (options->format || options->output_format)
+	{
+	  struct value_print_options opts = *options;
+	  opts.format = (options->format ? options->format
+			 : options->output_format);
+	  val_print_scalar_formatted (type, valaddr, embedded_offset,
+				      original_value, &opts, 0, stream);
+	}
+      else
+	{
+	  val = unpack_long (type, valaddr + embedded_offset);
+	  if (val == 0)
+	    fputs_filtered (decorations->false_name, stream);
+	  else if (val == 1)
+	    fputs_filtered (decorations->true_name, stream);
+	  else
+	    print_longest (stream, 'd', 0, val);
+	}
+      break;
+
+    case TYPE_CODE_RANGE:
+      /* FIXME: create_range_type does not set the unsigned bit in a
+         range type (I think it probably should copy it from the
+         target type), so we won't print values which are too large to
+         fit in a signed integer correctly.  */
+      /* FIXME: Doesn't handle ranges of enums correctly.  (Can't just
+         print with the target type, though, because the size of our
+         type and the target type might differ).  */
+
+      /* FALLTHROUGH */
+
+    case TYPE_CODE_INT:
+      if (options->format || options->output_format)
+	{
+	  struct value_print_options opts = *options;
+
+	  opts.format = (options->format ? options->format
+			 : options->output_format);
+	  val_print_scalar_formatted (type, valaddr, embedded_offset,
+				      original_value, &opts, 0, stream);
+	}
+      else
+	val_print_type_code_int (type, valaddr + embedded_offset, stream);
+      break;
+
+    case TYPE_CODE_CHAR:
+      if (options->format || options->output_format)
+	{
+	  struct value_print_options opts = *options;
+
+	  opts.format = (options->format ? options->format
+			 : options->output_format);
+	  val_print_scalar_formatted (type, valaddr, embedded_offset,
+				      original_value, &opts, 0, stream);
+	}
+      else
+	{
+	  val = unpack_long (type, valaddr + embedded_offset);
+	  if (TYPE_UNSIGNED (type))
+	    fprintf_filtered (stream, "%u", (unsigned int) val);
+	  else
+	    fprintf_filtered (stream, "%d", (int) val);
+	  fputs_filtered (" ", stream);
+	  LA_PRINT_CHAR (val, unresolved_type, stream);
+	}
+      break;
+
+    case TYPE_CODE_FLT:
+      if (options->format)
+	{
+	  val_print_scalar_formatted (type, valaddr, embedded_offset,
+				      original_value, options, 0, stream);
+	}
+      else
+	{
+	  print_floating (valaddr + embedded_offset, type, stream);
+	}
+      break;
+
+    case TYPE_CODE_DECFLOAT:
+      if (options->format)
+	val_print_scalar_formatted (type, valaddr, embedded_offset,
+				    original_value, options, 0, stream);
+      else
+	print_decimal_floating (valaddr + embedded_offset,
+				type, stream);
+      break;
+
+    case TYPE_CODE_VOID:
+      fputs_filtered (decorations->void_name, stream);
+      break;
+
+    case TYPE_CODE_ERROR:
+      fprintf_filtered (stream, "%s", TYPE_ERROR_NAME (type));
+      break;
+
+    case TYPE_CODE_UNDEF:
+      /* This happens (without TYPE_FLAG_STUB set) on systems which
+         don't use dbx xrefs (NO_DBX_XREFS in gcc) if a file has a
+         "struct foo *bar" and no complete type for struct foo in that
+         file.  */
+      fprintf_filtered (stream, _("<incomplete type>"));
+      break;
+
+    case TYPE_CODE_COMPLEX:
+      fprintf_filtered (stream, "%s", decorations->complex_prefix);
+      if (options->format)
+	val_print_scalar_formatted (TYPE_TARGET_TYPE (type),
+				    valaddr, embedded_offset,
+				    original_value, options, 0, stream);
+      else
+	print_floating (valaddr + embedded_offset,
+			TYPE_TARGET_TYPE (type),
+			stream);
+      fprintf_filtered (stream, "%s", decorations->complex_infix);
+      if (options->format)
+	val_print_scalar_formatted (TYPE_TARGET_TYPE (type),
+				    valaddr,
+				    embedded_offset
+				    + TYPE_LENGTH (TYPE_TARGET_TYPE (type)),
+				    original_value,
+				    options, 0, stream);
+      else
+	print_floating (valaddr + embedded_offset
+			+ TYPE_LENGTH (TYPE_TARGET_TYPE (type)),
+			TYPE_TARGET_TYPE (type),
+			stream);
+      fprintf_filtered (stream, "%s", decorations->complex_suffix);
+      break;
+
+    case TYPE_CODE_UNION:
+    case TYPE_CODE_STRUCT:
+    case TYPE_CODE_METHODPTR:
+    default:
+      error (_("Unhandled type code %d in symbol table."),
+	     TYPE_CODE (type));
+    }
+  gdb_flush (stream);
+}
+
 /* Print using the given LANGUAGE the data of type TYPE located at
    VALADDR + EMBEDDED_OFFSET (within GDB), which came from the
    inferior at address ADDRESS + EMBEDDED_OFFSET, onto stdio stream
@@ -330,12 +688,9 @@ val_print_invalid_address (struct ui_file *stream)
 
    RECURSE indicates the amount of indentation to supply before
    continuation lines; this amount is roughly twice the value of
-   RECURSE.
-
-   If the data is printed as a string, returns the number of string
-   characters printed.  */
+   RECURSE.  */
 
-int
+void
 val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
 	   CORE_ADDR address, struct ui_file *stream, int recurse,
 	   const struct value *val,
@@ -361,11 +716,11 @@ val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
     {
       fprintf_filtered (stream, _("<incomplete type>"));
       gdb_flush (stream);
-      return (0);
+      return;
     }
 
   if (!valprint_check_validity (stream, real_type, embedded_offset, val))
-    return 0;
+    return;
 
   if (!options->raw)
     {
@@ -373,7 +728,7 @@ val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
 				      address, stream, recurse,
 				      val, options, language);
       if (ret)
-	return ret;
+	return;
     }
 
   /* Handle summary mode.  If the value is a scalar, print it;
@@ -381,19 +736,17 @@ val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
   if (options->summary && !scalar_type_p (type))
     {
       fprintf_filtered (stream, "...");
-      return 0;
+      return;
     }
 
   TRY_CATCH (except, RETURN_MASK_ERROR)
     {
-      ret = language->la_val_print (type, valaddr, embedded_offset, address,
-				    stream, recurse, val,
-				    &local_opts);
+      language->la_val_print (type, valaddr, embedded_offset, address,
+			      stream, recurse, val,
+			      &local_opts);
     }
   if (except.reason < 0)
     fprintf_filtered (stream, _("<error reading variable>"));
-
-  return ret;
 }
 
 /* Check whether the value VAL is printable.  Return 1 if it is;
@@ -432,19 +785,16 @@ value_check_printable (struct value *val, struct ui_file *stream,
 /* Print using the given LANGUAGE the value VAL onto stream STREAM according
    to OPTIONS.
 
-   If the data are a string pointer, returns the number of string characters
-   printed.
-
    This is a preferable interface to val_print, above, because it uses
    GDB's value mechanism.  */
 
-int
+void
 common_val_print (struct value *val, struct ui_file *stream, int recurse,
 		  const struct value_print_options *options,
 		  const struct language_defn *language)
 {
   if (!value_check_printable (val, stream, options))
-    return 0;
+    return;
 
   if (language->la_language == language_ada)
     /* The value might have a dynamic type, which would cause trouble
@@ -453,24 +803,21 @@ common_val_print (struct value *val, struct ui_file *stream, int recurse,
        get a fixed representation of our value.  */
     val = ada_to_fixed_value (val);
 
-  return val_print (value_type (val), value_contents_for_printing (val),
-		    value_embedded_offset (val), value_address (val),
-		    stream, recurse,
-		    val, options, language);
+  val_print (value_type (val), value_contents_for_printing (val),
+	     value_embedded_offset (val), value_address (val),
+	     stream, recurse,
+	     val, options, language);
 }
 
 /* Print on stream STREAM the value VAL according to OPTIONS.  The value
-   is printed using the current_language syntax.
+   is printed using the current_language syntax.  */
 
-   If the object printed is a string pointer, return the number of string
-   bytes printed.  */
-
-int
+void
 value_print (struct value *val, struct ui_file *stream,
 	     const struct value_print_options *options)
 {
   if (!value_check_printable (val, stream, options))
-    return 0;
+    return;
 
   if (!options->raw)
     {
@@ -482,10 +829,10 @@ value_print (struct value *val, struct ui_file *stream,
 					val, options, current_language);
 
       if (r)
-	return r;
+	return;
     }
 
-  return LA_VALUE_PRINT (val, stream, options);
+  LA_VALUE_PRINT (val, stream, options);
 }
 
 /* Called by various <lang>_val_print routines to print
@@ -545,6 +892,7 @@ val_print_type_code_flags (struct type *type, const gdb_byte *valaddr,
 	}
     }
   fputs_filtered ("]", stream);
+}
 
 /* Print a scalar of data of type TYPE, pointed to in GDB by VALADDR,
    according to OPTIONS and SIZE on STREAM.  Format i is not supported
@@ -552,7 +900,6 @@ val_print_type_code_flags (struct type *type, const gdb_byte *valaddr,
 
    This is how the elements of an array or structure are printed
    with a format.  */
-}
 
 void
 val_print_scalar_formatted (struct type *type,
@@ -1161,6 +1508,31 @@ print_char_chars (struct ui_file *stream, struct type *type,
     }
 }
 
+/* Print function pointer with inferior address ADDRESS onto stdio
+   stream STREAM.  */
+
+void
+print_function_pointer_address (const struct value_print_options *options,
+				struct gdbarch *gdbarch,
+				CORE_ADDR address,
+				struct ui_file *stream)
+{
+  CORE_ADDR func_addr
+    = gdbarch_convert_from_func_ptr_addr (gdbarch, address,
+					  &current_target);
+
+  /* If the function pointer is represented by a description, print
+     the address of the description.  */
+  if (options->addressprint && func_addr != address)
+    {
+      fputs_filtered ("@", stream);
+      fputs_filtered (paddress (gdbarch, address), stream);
+      fputs_filtered (": ", stream);
+    }
+  print_address_demangle (options, gdbarch, func_addr, stream, demangle);
+}
+
+
 /* Print on STREAM using the given OPTIONS the index for the element
    at INDEX of an array whose index type is INDEX_TYPE.  */
     
@@ -1991,10 +2363,6 @@ val_print_string (struct type *elttype, const char *encoding,
      and then the error message.  */
   if (errcode == 0 || bytes_read > 0)
     {
-      if (options->addressprint)
-	{
-	  fputs_filtered (" ", stream);
-	}
       LA_PRINT_STRING (stream, elttype, buffer, bytes_read / width,
 		       encoding, force_ellipsis, options);
     }
@@ -2003,13 +2371,13 @@ val_print_string (struct type *elttype, const char *encoding,
     {
       if (errcode == EIO)
 	{
-	  fprintf_filtered (stream, " <Address ");
+	  fprintf_filtered (stream, "<Address ");
 	  fputs_filtered (paddress (gdbarch, addr), stream);
 	  fprintf_filtered (stream, " out of bounds>");
 	}
       else
 	{
-	  fprintf_filtered (stream, " <Error reading address ");
+	  fprintf_filtered (stream, "<Error reading address ");
 	  fputs_filtered (paddress (gdbarch, addr), stream);
 	  fprintf_filtered (stream, ": %s>", safe_strerror (errcode));
 	}
@@ -2244,6 +2612,14 @@ Show printing of addresses."), NULL,
 			   show_addressprint,
 			   &setprintlist, &showprintlist);
 
+  add_setshow_boolean_cmd ("symbol", class_support,
+			   &user_print_options.symbol_print, _("\
+Set printing of symbol names when printing pointers."), _("\
+Show printing of symbol names when printing pointers."),
+			   NULL, NULL,
+			   show_symbol_print,
+			   &setprintlist, &showprintlist);
+
   add_setshow_zuinteger_cmd ("input-radix", class_support, &input_radix_1,
 			     _("\
 Set default input radix for entering numbers."), _("\
diff --git a/gdb/valprint.h b/gdb/valprint.h
index a34d09b..b853b1a 100644
--- a/gdb/valprint.h
+++ b/gdb/valprint.h
@@ -90,6 +90,10 @@ struct value_print_options
 
   /* If nonzero, print the value in "summary" form.  */
   int summary;
+
+  /* If nonzero, when printing a pointer, print the symbol to which it
+     points, if any.  */
+  int symbol_print;
 };
 
 /* The global print options set by the user.  In general this should
@@ -148,6 +152,11 @@ extern void print_hex_chars (struct ui_file *, const gdb_byte *,
 extern void print_char_chars (struct ui_file *, struct type *,
 			      const gdb_byte *, unsigned int, enum bfd_endian);
 
+extern void print_function_pointer_address (const struct value_print_options *options,
+					    struct gdbarch *gdbarch,
+					    CORE_ADDR address,
+					    struct ui_file *stream);
+
 int read_string (CORE_ADDR addr, int len, int width, unsigned int fetchlimit,
 		 enum bfd_endian byte_order, gdb_byte **buffer,
 		 int *bytes_read);
@@ -158,6 +167,36 @@ extern void val_print_unavailable (struct ui_file *stream);
 
 extern void val_print_invalid_address (struct ui_file *stream);
 
+/* An instance of this is passed to generic_val_print and describes
+   some language-specific ways to print things.  */
+
+struct generic_val_print_decorations
+{
+  /* Printing complex numbers: what to print before, between the
+     elements, and after.  */
+
+  const char *complex_prefix;
+  const char *complex_infix;
+  const char *complex_suffix;
+
+  /* Boolean true and false.  */
+
+  const char *true_name;
+  const char *false_name;
+
+  /* What to print when we see TYPE_CODE_VOID.  */
+
+  const char *void_name;
+};
+
+
+extern void generic_val_print (struct type *type, const gdb_byte *valaddr,
+			       int embedded_offset, CORE_ADDR address,
+			       struct ui_file *stream, int recurse,
+			       const struct value *original_value,
+			       const struct value_print_options *options,
+			       const struct generic_val_print_decorations *);
+
 extern void generic_emit_char (int c, struct type *type, struct ui_file *stream,
 			       int quoter, const char *encoding);
 
diff --git a/gdb/value.c b/gdb/value.c
index 2a210d7..a6bb718 100644
--- a/gdb/value.c
+++ b/gdb/value.c
@@ -41,6 +41,7 @@
 #include "python/python.h"
 #include <ctype.h>
 #include "tracepoint.h"
+#include "cp-abi.h"
 
 /* Prototypes for exported functions.  */
 
@@ -167,6 +168,9 @@ ranges_contain (VEC(range_s) *ranges, int offset, int length)
 
 static struct cmd_list_element *functionlist;
 
+/* Note that the fields in this structure are arranged to save a bit
+   of memory.  */
+
 struct value
 {
   /* Type of value; either not an lval, or one of the various
@@ -174,7 +178,37 @@ struct value
   enum lval_type lval;
 
   /* Is it modifiable?  Only relevant if lval != not_lval.  */
-  int modifiable;
+  unsigned int modifiable : 1;
+
+  /* If zero, contents of this value are in the contents field.  If
+     nonzero, contents are in inferior.  If the lval field is lval_memory,
+     the contents are in inferior memory at location.address plus offset.
+     The lval field may also be lval_register.
+
+     WARNING: This field is used by the code which handles watchpoints
+     (see breakpoint.c) to decide whether a particular value can be
+     watched by hardware watchpoints.  If the lazy flag is set for
+     some member of a value chain, it is assumed that this member of
+     the chain doesn't need to be watched as part of watching the
+     value itself.  This is how GDB avoids watching the entire struct
+     or array when the user wants to watch a single struct member or
+     array element.  If you ever change the way lazy flag is set and
+     reset, be sure to consider this use as well!  */
+  unsigned int lazy : 1;
+
+  /* If nonzero, this is the value of a variable which does not
+     actually exist in the program.  */
+  unsigned int optimized_out : 1;
+
+  /* If value is a variable, is it initialized or not.  */
+  unsigned int initialized : 1;
+
+  /* If value is from the stack.  If this is set, read_stack will be
+     used instead of read_memory to enable extra caching.  */
+  unsigned int stack : 1;
+
+  /* If the value has been released.  */
+  unsigned int released : 1;
 
   /* Location of value (if lval).  */
   union
@@ -215,6 +249,13 @@ struct value
      gdbarch_bits_big_endian=1 targets, it is the position of the MSB.  */
   int bitpos;
 
+  /* The number of references to this value.  When a value is created,
+     the value chain holds a reference, so REFERENCE_COUNT is 1.  If
+     release_value is called, this value is removed from the chain but
+     the caller of release_value now has a reference to this value.
+     The caller must arrange for a call to value_free later.  */
+  int reference_count;
+
   /* Only used for bitfields; the containing value.  This allows a
      single read from the target when displaying multiple
      bitfields.  */
@@ -280,33 +321,6 @@ struct value
   /* Register number if the value is from a register.  */
   short regnum;
 
-  /* If zero, contents of this value are in the contents field.  If
-     nonzero, contents are in inferior.  If the lval field is lval_memory,
-     the contents are in inferior memory at location.address plus offset.
-     The lval field may also be lval_register.
-
-     WARNING: This field is used by the code which handles watchpoints
-     (see breakpoint.c) to decide whether a particular value can be
-     watched by hardware watchpoints.  If the lazy flag is set for
-     some member of a value chain, it is assumed that this member of
-     the chain doesn't need to be watched as part of watching the
-     value itself.  This is how GDB avoids watching the entire struct
-     or array when the user wants to watch a single struct member or
-     array element.  If you ever change the way lazy flag is set and
-     reset, be sure to consider this use as well!  */
-  char lazy;
-
-  /* If nonzero, this is the value of a variable which does not
-     actually exist in the program.  */
-  char optimized_out;
-
-  /* If value is a variable, is it initialized or not.  */
-  int initialized;
-
-  /* If value is from the stack.  If this is set, read_stack will be
-     used instead of read_memory to enable extra caching.  */
-  int stack;
-
   /* Actual contents of the value.  Target byte-order.  NULL or not
      valid if lazy is nonzero.  */
   gdb_byte *contents;
@@ -315,13 +329,6 @@ struct value
      rather than available, since the common and default case is for a
      value to be available.  This is filled in at value read time.  */
   VEC(range_s) *unavailable;
-
-  /* The number of references to this value.  When a value is created,
-     the value chain holds a reference, so REFERENCE_COUNT is 1.  If
-     release_value is called, this value is removed from the chain but
-     the caller of release_value now has a reference to this value.
-     The caller must arrange for a call to value_free later.  */
-  int reference_count;
 };
 
 int
@@ -799,6 +806,14 @@ value_parent (struct value *value)
   return value->parent;
 }
 
+/* See value.h.  */
+
+void
+set_value_parent (struct value *value, struct value *parent)
+{
+  value->parent = parent;
+}
+
 gdb_byte *
 value_contents_raw (struct value *value)
 {
@@ -819,6 +834,46 @@ value_enclosing_type (struct value *value)
   return value->enclosing_type;
 }
 
+/* Look at value.h for description.  */
+
+struct type *
+value_actual_type (struct value *value, int resolve_simple_types,
+		   int *real_type_found)
+{
+  struct value_print_options opts;
+  struct type *result;
+
+  get_user_print_options (&opts);
+
+  if (real_type_found)
+    *real_type_found = 0;
+  result = value_type (value);
+  if (opts.objectprint)
+    {
+      if (TYPE_CODE (result) == TYPE_CODE_PTR
+	  || TYPE_CODE (result) == TYPE_CODE_REF)
+        {
+          struct type *real_type;
+
+          real_type = value_rtti_indirect_type (value, NULL, NULL, NULL);
+          if (real_type)
+            {
+              if (real_type_found)
+                *real_type_found = 1;
+              result = real_type;
+            }
+        }
+      else if (resolve_simple_types)
+        {
+          if (real_type_found)
+            *real_type_found = 1;
+          result = value_enclosing_type (value);
+        }
+    }
+
+  return result;
+}
+
 static void
 require_not_optimized_out (const struct value *value)
 {
@@ -1094,7 +1149,10 @@ value_address (const struct value *value)
   if (value->lval == lval_internalvar
       || value->lval == lval_internalvar_component)
     return 0;
-  return value->location.address + value->offset;
+  if (value->parent != NULL)
+    return value_address (value->parent) + value->offset;
+  else
+    return value->location.address + value->offset;
 }
 
 CORE_ADDR
@@ -1205,6 +1263,7 @@ value_free_to_mark (struct value *mark)
   for (val = all_values; val && val != mark; val = next)
     {
       next = val->next;
+      val->released = 1;
       value_free (val);
     }
   all_values = val;
@@ -1223,6 +1282,7 @@ free_all_values (void)
   for (val = all_values; val; val = next)
     {
       next = val->next;
+      val->released = 1;
       value_free (val);
     }
 
@@ -1255,6 +1315,7 @@ release_value (struct value *val)
     {
       all_values = val->next;
       val->next = NULL;
+      val->released = 1;
       return;
     }
 
@@ -1264,11 +1325,26 @@ release_value (struct value *val)
 	{
 	  v->next = val->next;
 	  val->next = NULL;
+	  val->released = 1;
 	  break;
 	}
     }
 }
 
+/* If the value is not already released, release it.
+   If the value is already released, increment its reference count.
+   That is, this function ensures that the value is released from the
+   value chain and that the caller owns a reference to it.  */
+
+void
+release_value_or_incref (struct value *val)
+{
+  if (val->released)
+    value_incref (val);
+  else
+    release_value (val);
+}
+
 /* Release all values up to mark  */
 struct value *
 value_release_to_mark (struct value *mark)
@@ -1277,12 +1353,15 @@ value_release_to_mark (struct value *mark)
   struct value *next;
 
   for (val = next = all_values; next; next = next->next)
-    if (next->next == mark)
-      {
-	all_values = next->next;
-	next->next = NULL;
-	return val;
-      }
+    {
+      if (next->next == mark)
+	{
+	  all_values = next->next;
+	  next->next = NULL;
+	  return val;
+	}
+      next->released = 1;
+    }
   all_values = 0;
   return val;
 }
@@ -1549,7 +1628,14 @@ struct internalvar
       struct value *value;
 
       /* The call-back routine used with INTERNALVAR_MAKE_VALUE.  */
-      internalvar_make_value make_value;
+      struct
+        {
+	  /* The functions to call.  */
+	  const struct internalvar_funcs *functions;
+
+	  /* The function's user-data.  */
+	  void *data;
+        } make_value;
 
       /* The internal function used with INTERNALVAR_FUNCTION.  */
       struct
@@ -1628,6 +1714,29 @@ lookup_only_internalvar (const char *name)
   return NULL;
 }
 
+/* Complete NAME by comparing it to the names of internal variables.
+   Returns a vector of newly allocated strings, or NULL if no matches
+   were found.  */
+
+VEC (char_ptr) *
+complete_internalvar (const char *name)
+{
+  VEC (char_ptr) *result = NULL;
+  struct internalvar *var;
+  int len;
+
+  len = strlen (name);
+
+  for (var = internalvars; var; var = var->next)
+    if (strncmp (var->name, name, len) == 0)
+      {
+	char *r = xstrdup (var->name);
+
+	VEC_safe_push (char_ptr, result, r);
+      }
+
+  return result;
+}
 
 /* Create an internal variable with name NAME and with a void value.
    NAME should not normally include a dollar sign.  */
@@ -1648,18 +1757,39 @@ create_internalvar (const char *name)
 /* Create an internal variable with name NAME and register FUN as the
    function that value_of_internalvar uses to create a value whenever
    this variable is referenced.  NAME should not normally include a
-   dollar sign.  */
+   dollar sign.  DATA is passed uninterpreted to FUN when it is
+   called.  CLEANUP, if not NULL, is called when the internal variable
+   is destroyed.  It is passed DATA as its only argument.  */
 
 struct internalvar *
-create_internalvar_type_lazy (char *name, internalvar_make_value fun)
+create_internalvar_type_lazy (const char *name,
+			      const struct internalvar_funcs *funcs,
+			      void *data)
 {
   struct internalvar *var = create_internalvar (name);
 
   var->kind = INTERNALVAR_MAKE_VALUE;
-  var->u.make_value = fun;
+  var->u.make_value.functions = funcs;
+  var->u.make_value.data = data;
   return var;
 }
 
+/* See documentation in value.h.  */
+
+int
+compile_internalvar_to_ax (struct internalvar *var,
+			   struct agent_expr *expr,
+			   struct axs_value *value)
+{
+  if (var->kind != INTERNALVAR_MAKE_VALUE
+      || var->u.make_value.functions->compile_to_ax == NULL)
+    return 0;
+
+  var->u.make_value.functions->compile_to_ax (var, expr, value,
+					      var->u.make_value.data);
+  return 1;
+}
+
 /* Look up an internal variable with name NAME.  NAME should not
    normally include a dollar sign.
 
@@ -1732,7 +1862,8 @@ value_of_internalvar (struct gdbarch *gdbarch, struct internalvar *var)
       break;
 
     case INTERNALVAR_MAKE_VALUE:
-      val = (*var->u.make_value) (gdbarch, var);
+      val = (*var->u.make_value.functions->make_value) (gdbarch, var,
+							var->u.make_value.data);
       break;
 
     default:
@@ -1928,6 +2059,11 @@ clear_internalvar (struct internalvar *var)
       xfree (var->u.string);
       break;
 
+    case INTERNALVAR_MAKE_VALUE:
+      if (var->u.make_value.functions->destroy != NULL)
+	var->u.make_value.functions->destroy (var->u.make_value.data);
+      break;
+
     default:
       break;
     }
@@ -2522,11 +2658,24 @@ value_primitive_field (struct value *arg1, int offset,
       /* This field is actually a base subobject, so preserve the
 	 entire object's contents for later references to virtual
 	 bases, etc.  */
+      int boffset;
 
       /* Lazy register values with offsets are not supported.  */
       if (VALUE_LVAL (arg1) == lval_register && value_lazy (arg1))
 	value_fetch_lazy (arg1);
 
+      /* We special case virtual inheritance here because this
+	 requires access to the contents, which we would rather avoid
+	 for references to ordinary fields of unavailable values.  */
+      if (BASETYPE_VIA_VIRTUAL (arg_type, fieldno))
+	boffset = baseclass_offset (arg_type, fieldno,
+				    value_contents (arg1),
+				    value_embedded_offset (arg1),
+				    value_address (arg1),
+				    arg1);
+      else
+	boffset = TYPE_FIELD_BITPOS (arg_type, fieldno) / 8;
+
       if (value_lazy (arg1))
 	v = allocate_value_lazy (value_enclosing_type (arg1));
       else
@@ -2537,8 +2686,7 @@ value_primitive_field (struct value *arg1, int offset,
 	}
       v->type = type;
       v->offset = value_offset (arg1);
-      v->embedded_offset = (offset + value_embedded_offset (arg1)
-			    + TYPE_FIELD_BITPOS (arg_type, fieldno) / 8);
+      v->embedded_offset = offset + value_embedded_offset (arg1) + boffset;
     }
   else
     {
@@ -2902,7 +3050,7 @@ pack_long (gdb_byte *buf, struct type *type, LONGEST num)
 
 /* Pack NUM into BUF using a target format of TYPE.  */
 
-void
+static void
 pack_unsigned_long (gdb_byte *buf, struct type *type, ULONGEST num)
 {
   int len;
@@ -3107,11 +3255,30 @@ coerce_ref_if_computed (const struct value *arg)
   return funcs->coerce_ref (arg);
 }
 
+/* Look at value.h for description.  */
+
+struct value *
+readjust_indirect_value_type (struct value *value, struct type *enc_type,
+			      struct type *original_type,
+			      struct value *original_value)
+{
+  /* Re-adjust type.  */
+  deprecated_set_value_type (value, TYPE_TARGET_TYPE (original_type));
+
+  /* Add embedding info.  */
+  set_value_enclosing_type (value, enc_type);
+  set_value_embedded_offset (value, value_pointed_to_offset (original_value));
+
+  /* We may be pointing to an object of some derived type.  */
+  return value_full_object (value, NULL, 0, 0, 0);
+}
+
 struct value *
 coerce_ref (struct value *arg)
 {
   struct type *value_type_arg_tmp = check_typedef (value_type (arg));
   struct value *retval;
+  struct type *enc_type;
 
   retval = coerce_ref_if_computed (arg);
   if (retval)
@@ -3120,9 +3287,14 @@ coerce_ref (struct value *arg)
   if (TYPE_CODE (value_type_arg_tmp) != TYPE_CODE_REF)
     return arg;
 
-  return value_at_lazy (TYPE_TARGET_TYPE (value_type_arg_tmp),
-			unpack_pointer (value_type (arg),
-					value_contents (arg)));
+  enc_type = check_typedef (value_enclosing_type (arg));
+  enc_type = TYPE_TARGET_TYPE (enc_type);
+
+  retval = value_at_lazy (enc_type,
+                          unpack_pointer (value_type (arg),
+                                          value_contents (arg)));
+  return readjust_indirect_value_type (retval, enc_type,
+                                       value_type_arg_tmp, arg);
 }
 
 struct value *
@@ -3153,7 +3325,7 @@ coerce_array (struct value *arg)
 
 int
 using_struct_return (struct gdbarch *gdbarch,
-		     struct type *func_type, struct type *value_type)
+		     struct value *function, struct type *value_type)
 {
   enum type_code code = TYPE_CODE (value_type);
 
@@ -3166,7 +3338,7 @@ using_struct_return (struct gdbarch *gdbarch,
     return 0;
 
   /* Probe the architecture for the return-value convention.  */
-  return (gdbarch_return_value (gdbarch, func_type, value_type,
+  return (gdbarch_return_value (gdbarch, function, value_type,
 				NULL, NULL, NULL)
 	  != RETURN_VALUE_REGISTER_CONVENTION);
 }
diff --git a/gdb/value.h b/gdb/value.h
index 5651e08..d8b157f 100644
--- a/gdb/value.h
+++ b/gdb/value.h
@@ -74,6 +74,7 @@ extern void set_value_bitpos (struct value *, int bit);
    bitfields.  */
 
 struct value *value_parent (struct value *);
+extern void set_value_parent (struct value *value, struct value *parent);
 
 /* Describes offset of a value within lval of a structure in bytes.
    If lval == lval_memory, this is an offset to the address.  If lval
@@ -137,6 +138,22 @@ extern struct type *value_enclosing_type (struct value *);
 extern void set_value_enclosing_type (struct value *val,
 				      struct type *new_type);
 
+/* Returns value_type or value_enclosing_type depending on
+   value_print_options.objectprint.
+
+   If RESOLVE_SIMPLE_TYPES is 0 the enclosing type will be resolved
+   only for pointers and references, else it will be returned
+   for all the types (e.g. structures).  This option is useful
+   to prevent retrieving enclosing type for the base classes fields.
+
+   REAL_TYPE_FOUND is used to inform whether the real type was found
+   (or just static type was used).  The NULL may be passed if it is not
+   necessary. */
+
+extern struct type *value_actual_type (struct value *value,
+				       int resolve_simple_types,
+				       int *real_type_found);
+
 extern int value_pointed_to_offset (struct value *value);
 extern void set_value_pointed_to_offset (struct value *value, int val);
 extern int value_embedded_offset (struct value *value);
@@ -212,6 +229,20 @@ extern struct value *allocate_computed_value (struct type *type,
 					      const struct lval_funcs *funcs,
 					      void *closure);
 
+/* Helper function to check the validity of some bits of a value.
+
+   If TYPE represents some aggregate type (e.g., a structure), return 1.
+   
+   Otherwise, any of the bytes starting at OFFSET and extending for
+   TYPE_LENGTH(TYPE) bytes are invalid, print a message to STREAM and
+   return 0.  The checking is done using FUNCS.
+   
+   Otherwise, return 1.  */
+
+extern int valprint_check_validity (struct ui_file *stream, struct type *type,
+				    int embedded_offset,
+				    const struct value *val);
+
 extern struct value *allocate_optimized_out_value (struct type *type);
 
 /* If VALUE is lval_computed, return its lval_funcs structure.  */
@@ -351,6 +382,19 @@ extern short *deprecated_value_regnum_hack (struct value *);
 
 extern struct value *coerce_ref_if_computed (const struct value *arg);
 
+/* Setup a new value type and enclosing value type for dereferenced value VALUE.
+   ENC_TYPE is the new enclosing type that should be set.  ORIGINAL_TYPE and
+   ORIGINAL_VAL are the type and value of the original reference or pointer.
+
+   Note, that VALUE is modified by this function.
+
+   It is a common implementation for coerce_ref and value_ind.  */
+
+extern struct value * readjust_indirect_value_type (struct value *value,
+						    struct type *enc_type,
+						    struct type *original_type,
+						    struct value *original_val);
+
 /* Convert a REF to the object referenced.  */
 
 extern struct value *coerce_ref (struct value *value);
@@ -447,8 +491,9 @@ extern void read_value_memory (struct value *val, int embedded_offset,
 struct frame_info;
 struct fn_field;
 
-extern void print_address_demangle (struct gdbarch *, CORE_ADDR,
-				    struct ui_file *, int);
+extern int print_address_demangle (const struct value_print_options *,
+				   struct gdbarch *, CORE_ADDR,
+				   struct ui_file *, int);
 
 extern LONGEST value_as_long (struct value *val);
 extern DOUBLEST value_as_double (struct value *val);
@@ -523,6 +568,9 @@ extern int symbol_read_needs_frame (struct symbol *);
 extern struct value *read_var_value (struct symbol *var,
 				     struct frame_info *frame);
 
+extern struct value *default_read_var_value (struct symbol *var,
+					     struct frame_info *frame);
+
 extern struct value *allocate_value (struct type *type);
 extern struct value *allocate_value_lazy (struct type *type);
 extern void allocate_value_contents (struct value *value);
@@ -594,11 +642,6 @@ extern struct value *value_aggregate_elt (struct type *curtype,
 
 extern struct value *value_static_field (struct type *type, int fieldno);
 
-extern struct fn_field *value_find_oload_method_list (struct value **,
-						      const char *,
-						      int, int *,
-						      struct type **, int *);
-
 enum oload_search_type { NON_METHOD, METHOD, BOTH };
 
 extern int find_overload_match (struct value **args, int nargs,
@@ -615,13 +658,13 @@ extern struct value *value_primitive_field (struct value *arg1, int offset,
 					    struct type *arg_type);
 
 
-extern struct type *value_rtti_target_type (struct value *, int *, int *,
-					    int *);
+extern struct type *value_rtti_indirect_type (struct value *, int *, int *,
+					      int *);
 
 extern struct value *value_full_object (struct value *, struct type *, int,
 					int, int);
 
-extern struct value *value_cast_pointers (struct type *, struct value *);
+extern struct value *value_cast_pointers (struct type *, struct value *, int);
 
 extern struct value *value_cast (struct type *type, struct value *arg2);
 
@@ -651,7 +694,7 @@ extern int value_bit_index (struct type *type, const gdb_byte *addr,
 			    int index);
 
 extern int using_struct_return (struct gdbarch *gdbarch,
-				struct type *func_type,
+				struct value *function,
 				struct type *value_type);
 
 extern struct value *evaluate_expression (struct expression *exp);
@@ -717,10 +760,54 @@ extern struct internalvar *lookup_only_internalvar (const char *name);
 
 extern struct internalvar *create_internalvar (const char *name);
 
-typedef struct value * (*internalvar_make_value) (struct gdbarch *,
-						  struct internalvar *);
+extern VEC (char_ptr) *complete_internalvar (const char *name);
+
+/* An internalvar can be dynamically computed by supplying a vector of
+   function pointers to perform various operations.  */
+
+struct internalvar_funcs
+{
+  /* Compute the value of the variable.  The DATA argument passed to
+     the function is the same argument that was passed to
+     `create_internalvar_type_lazy'.  */
+
+  struct value *(*make_value) (struct gdbarch *arch,
+			       struct internalvar *var,
+			       void *data);
+
+  /* Update the agent expression EXPR with bytecode to compute the
+     value.  VALUE is the agent value we are updating.  The DATA
+     argument passed to this function is the same argument that was
+     passed to `create_internalvar_type_lazy'.  If this pointer is
+     NULL, then the internalvar cannot be compiled to an agent
+     expression.  */
+
+  void (*compile_to_ax) (struct internalvar *var,
+			 struct agent_expr *expr,
+			 struct axs_value *value,
+			 void *data);
+
+  /* If non-NULL, this is called to destroy DATA.  The DATA argument
+     passed to this function is the same argument that was passed to
+     `create_internalvar_type_lazy'.  */
+
+  void (*destroy) (void *data);
+};
+
 extern struct internalvar *
-  create_internalvar_type_lazy (char *name, internalvar_make_value fun);
+create_internalvar_type_lazy (const char *name,
+			      const struct internalvar_funcs *funcs,
+			      void *data);
+
+/* Compile an internal variable to an agent expression.  VAR is the
+   variable to compile; EXPR and VALUE are the agent expression we are
+   updating.  This will return 0 if there is no known way to compile
+   VAR, and 1 if VAR was successfully compiled.  It may also throw an
+   exception on error.  */
+
+extern int compile_internalvar_to_ax (struct internalvar *var,
+				      struct agent_expr *expr,
+				      struct axs_value *value);
 
 extern struct internalvar *lookup_internalvar (const char *name);
 
@@ -770,12 +857,14 @@ extern void free_value_chain (struct value *v);
 
 extern void release_value (struct value *val);
 
+extern void release_value_or_incref (struct value *val);
+
 extern int record_latest_value (struct value *val);
 
 extern void modify_field (struct type *type, gdb_byte *addr,
 			  LONGEST fieldval, int bitpos, int bitsize);
 
-extern void type_print (struct type *type, char *varstring,
+extern void type_print (struct type *type, const char *varstring,
 			struct ui_file *stream, int show);
 
 extern char *type_to_string (struct type *type);
@@ -793,8 +882,8 @@ extern void print_floating (const gdb_byte *valaddr, struct type *type,
 extern void print_decimal_floating (const gdb_byte *valaddr, struct type *type,
 				    struct ui_file *stream);
 
-extern int value_print (struct value *val, struct ui_file *stream,
-			const struct value_print_options *options);
+extern void value_print (struct value *val, struct ui_file *stream,
+			 const struct value_print_options *options);
 
 extern void value_print_array_elements (struct value *val,
 					struct ui_file *stream, int format,
@@ -802,17 +891,17 @@ extern void value_print_array_elements (struct value *val,
 
 extern struct value *value_release_to_mark (struct value *mark);
 
-extern int val_print (struct type *type, const gdb_byte *valaddr,
-		      int embedded_offset, CORE_ADDR address,
-		      struct ui_file *stream, int recurse,
-		      const struct value *val,
-		      const struct value_print_options *options,
-		      const struct language_defn *language);
-
-extern int common_val_print (struct value *val,
-			     struct ui_file *stream, int recurse,
-			     const struct value_print_options *options,
-			     const struct language_defn *language);
+extern void val_print (struct type *type, const gdb_byte *valaddr,
+		       int embedded_offset, CORE_ADDR address,
+		       struct ui_file *stream, int recurse,
+		       const struct value *val,
+		       const struct value_print_options *options,
+		       const struct language_defn *language);
+
+extern void common_val_print (struct value *val,
+			      struct ui_file *stream, int recurse,
+			      const struct value_print_options *options,
+			      const struct language_defn *language);
 
 extern int val_print_string (struct type *elttype, const char *encoding,
 			     CORE_ADDR addr, int len,
diff --git a/gdb/varobj.c b/gdb/varobj.c
index 195d821..6b7ec52 100644
--- a/gdb/varobj.c
+++ b/gdb/varobj.c
@@ -21,7 +21,6 @@
 #include "expression.h"
 #include "frame.h"
 #include "language.h"
-#include "wrapper.h"
 #include "gdbcmd.h"
 #include "block.h"
 #include "valprint.h"
@@ -34,6 +33,8 @@
 #include "vec.h"
 #include "gdbthread.h"
 #include "inferior.h"
+#include "ada-varobj.h"
+#include "ada-lang.h"
 
 #if HAVE_PYTHON
 #include "python/python.h"
@@ -42,6 +43,10 @@
 typedef int PyObject;
 #endif
 
+/* The names of varobjs representing anonymous structs or unions.  */
+#define ANONYMOUS_STRUCT_NAME _("<anonymous struct>")
+#define ANONYMOUS_UNION_NAME _("<anonymous union>")
+
 /* Non-zero if we want to see trace of varobj level stuff.  */
 
 int varobjdebug = 0;
@@ -265,6 +270,9 @@ static void cppush (struct cpstack **pstack, char *name);
 
 static char *cppop (struct cpstack **pstack);
 
+static int update_type_if_necessary (struct varobj *var,
+				     struct value *new_value);
+
 static int install_new_value (struct varobj *var, struct value *value, 
 			      int initial);
 
@@ -301,6 +309,8 @@ static struct varobj *varobj_add_child (struct varobj *var,
 
 #endif /* HAVE_PYTHON */
 
+static int default_value_is_changeable_p (struct varobj *var);
+
 /* C implementation */
 
 static int c_number_of_children (struct varobj *var);
@@ -379,6 +389,11 @@ static struct type *ada_type_of_child (struct varobj *parent, int index);
 static char *ada_value_of_variable (struct varobj *var,
 				    enum varobj_display_formats format);
 
+static int ada_value_is_changeable_p (struct varobj *var);
+
+static int ada_value_has_mutated (struct varobj *var, struct value *new_val,
+				  struct type *new_type);
+
 /* The language specific vector */
 
 struct language_specific
@@ -412,6 +427,31 @@ struct language_specific
   /* The current value of VAR.  */
   char *(*value_of_variable) (struct varobj * var,
 			      enum varobj_display_formats format);
+
+  /* Return non-zero if changes in value of VAR must be detected and
+     reported by -var-update.  Return zero if -var-update should never
+     report changes of such values.  This makes sense for structures
+     (since the changes in children values will be reported separately),
+     or for artifical objects (like 'public' pseudo-field in C++).
+
+     Return value of 0 means that gdb need not call value_fetch_lazy
+     for the value of this variable object.  */
+  int (*value_is_changeable_p) (struct varobj *var);
+
+  /* Return nonzero if the type of VAR has mutated.
+
+     VAR's value is still the varobj's previous value, while NEW_VALUE
+     is VAR's new value and NEW_TYPE is the var's new type.  NEW_VALUE
+     may be NULL indicating that there is no value available (the varobj
+     may be out of scope, of may be the child of a null pointer, for
+     instance).  NEW_TYPE, on the other hand, must never be NULL.
+
+     This function should also be able to assume that var's number of
+     children is set (not < 0).
+
+     Languages where types do not mutate can set this to NULL.  */
+  int (*value_has_mutated) (struct varobj *var, struct value *new_value,
+			    struct type *new_type);
 };
 
 /* Array of known source language routines.  */
@@ -426,7 +466,9 @@ static struct language_specific languages[vlang_end] = {
    c_value_of_root,
    c_value_of_child,
    c_type_of_child,
-   c_value_of_variable}
+   c_value_of_variable,
+   default_value_is_changeable_p,
+   NULL /* value_has_mutated */}
   ,
   /* C */
   {
@@ -438,7 +480,9 @@ static struct language_specific languages[vlang_end] = {
    c_value_of_root,
    c_value_of_child,
    c_type_of_child,
-   c_value_of_variable}
+   c_value_of_variable,
+   default_value_is_changeable_p,
+   NULL /* value_has_mutated */}
   ,
   /* C++ */
   {
@@ -450,7 +494,9 @@ static struct language_specific languages[vlang_end] = {
    cplus_value_of_root,
    cplus_value_of_child,
    cplus_type_of_child,
-   cplus_value_of_variable}
+   cplus_value_of_variable,
+   default_value_is_changeable_p,
+   NULL /* value_has_mutated */}
   ,
   /* Java */
   {
@@ -462,7 +508,9 @@ static struct language_specific languages[vlang_end] = {
    java_value_of_root,
    java_value_of_child,
    java_type_of_child,
-   java_value_of_variable},
+   java_value_of_variable,
+   default_value_is_changeable_p,
+   NULL /* value_has_mutated */},
   /* Ada */
   {
    vlang_ada,
@@ -473,7 +521,9 @@ static struct language_specific languages[vlang_end] = {
    ada_value_of_root,
    ada_value_of_child,
    ada_type_of_child,
-   ada_value_of_variable}
+   ada_value_of_variable,
+   ada_value_is_changeable_p,
+   ada_value_has_mutated}
 };
 
 /* A little convenience enum for dealing with C++/Java.  */
@@ -512,7 +562,7 @@ is_root_p (struct varobj *var)
 #ifdef HAVE_PYTHON
 /* Helper function to install a Python environment suitable for
    use during operations on VAR.  */
-struct cleanup *
+static struct cleanup *
 varobj_ensure_python_env (struct varobj *var)
 {
   return ensure_python_env (var->root->exp->gdbarch,
@@ -573,6 +623,8 @@ varobj_create (char *objname,
       char *p;
       enum varobj_languages lang;
       struct value *value = NULL;
+      volatile struct gdb_exception except;
+      CORE_ADDR pc;
 
       /* Parse and evaluate the expression, filling in as much of the
          variable's data as possible.  */
@@ -599,15 +651,24 @@ varobj_create (char *objname,
       if (type == USE_SELECTED_FRAME)
 	var->root->floating = 1;
 
+      pc = 0;
       block = NULL;
       if (fi != NULL)
-	block = get_frame_block (fi, 0);
+	{
+	  block = get_frame_block (fi, 0);
+	  pc = get_frame_pc (fi);
+	}
 
       p = expression;
       innermost_block = NULL;
       /* Wrap the call to parse expression, so we can 
          return a sensible error.  */
-      if (!gdb_parse_exp_1 (&p, block, 0, &var->root->exp))
+      TRY_CATCH (except, RETURN_MASK_ERROR)
+	{
+	  var->root->exp = parse_exp_1 (&p, pc, block, 0);
+	}
+
+      if (except.reason < 0)
 	{
 	  do_cleanups (old_chain);
 	  return NULL;
@@ -650,7 +711,12 @@ varobj_create (char *objname,
       /* We definitely need to catch errors here.
          If evaluate_expression succeeds we got the value we wanted.
          But if it fails, we still go on with a call to evaluate_type().  */
-      if (!gdb_evaluate_expression (var->root->exp, &value))
+      TRY_CATCH (except, RETURN_MASK_ERROR)
+	{
+	  value = evaluate_expression (var->root->exp);
+	}
+
+      if (except.reason < 0)
 	{
 	  /* Error getting the value.  Try to at least get the
 	     right type.  */
@@ -658,15 +724,21 @@ varobj_create (char *objname,
 
 	  var->type = value_type (type_only_value);
 	}
-      else 
-	var->type = value_type (value);
+	else
+	  {
+	    int real_type_found = 0;
 
-      install_new_value (var, value, 1 /* Initial assignment */);
+	    var->type = value_actual_type (value, 0, &real_type_found);
+	    if (real_type_found)
+	      value = value_cast (var->type, value);
+	  }
 
       /* Set language info */
       lang = variable_language (var);
       var->root->lang = &languages[lang];
 
+      install_new_value (var, value, 1 /* Initial assignment */);
+
       /* Set ourselves as our root.  */
       var->root->rootvar = var;
 
@@ -947,6 +1019,7 @@ restrict_range (VEC (varobj_p) *children, int *from, int *to)
 static void
 install_dynamic_child (struct varobj *var,
 		       VEC (varobj_p) **changed,
+		       VEC (varobj_p) **type_changed,
 		       VEC (varobj_p) **new,
 		       VEC (varobj_p) **unchanged,
 		       int *cchanged,
@@ -969,12 +1042,18 @@ install_dynamic_child (struct varobj *var,
     {
       varobj_p existing = VEC_index (varobj_p, var->children, index);
 
+      int type_updated = update_type_if_necessary (existing, value);
+      if (type_updated)
+	{
+	  if (type_changed)
+	    VEC_safe_push (varobj_p, *type_changed, existing);
+	}
       if (install_new_value (existing, value, 0))
 	{
-	  if (changed)
+	  if (!type_updated && changed)
 	    VEC_safe_push (varobj_p, *changed, existing);
 	}
-      else if (unchanged)
+      else if (!type_updated && unchanged)
 	VEC_safe_push (varobj_p, *unchanged, existing);
     }
 }
@@ -997,6 +1076,7 @@ dynamic_varobj_has_child_method (struct varobj *var)
 static int
 update_dynamic_varobj_children (struct varobj *var,
 				VEC (varobj_p) **changed,
+				VEC (varobj_p) **type_changed,
 				VEC (varobj_p) **new,
 				VEC (varobj_p) **unchanged,
 				int *cchanged,
@@ -1032,9 +1112,6 @@ update_dynamic_varobj_children (struct varobj *var,
 
       make_cleanup_py_decref (children);
 
-      if (!PyIter_Check (children))
-	error (_("Returned value is not iterable"));
-
       Py_XDECREF (var->child_iter);
       var->child_iter = PyObject_GetIter (children);
       if (!var->child_iter)
@@ -1132,6 +1209,7 @@ update_dynamic_varobj_children (struct varobj *var,
 	  if (v == NULL)
 	    gdbpy_print_stack ();
 	  install_dynamic_child (var, can_mention ? changed : NULL,
+				 can_mention ? type_changed : NULL,
 				 can_mention ? new : NULL,
 				 can_mention ? unchanged : NULL,
 				 can_mention ? cchanged : NULL, i, name, v);
@@ -1187,7 +1265,7 @@ varobj_get_num_children (struct varobj *var)
 
 	  /* If we have a dynamic varobj, don't report -1 children.
 	     So, try to fetch some children first.  */
-	  update_dynamic_varobj_children (var, NULL, NULL, NULL, &dummy,
+	  update_dynamic_varobj_children (var, NULL, NULL, NULL, NULL, &dummy,
 					  0, 0, 0);
 	}
       else
@@ -1213,8 +1291,8 @@ varobj_list_children (struct varobj *var, int *from, int *to)
       /* This, in theory, can result in the number of children changing without
 	 frontend noticing.  But well, calling -var-list-children on the same
 	 varobj twice is not something a sane frontend would do.  */
-      update_dynamic_varobj_children (var, NULL, NULL, NULL, &children_changed,
-				      0, 0, *to);
+      update_dynamic_varobj_children (var, NULL, NULL, NULL, NULL,
+				      &children_changed, 0, 0, *to);
       restrict_range (var->children, from, to);
       return var->children;
     }
@@ -1288,6 +1366,39 @@ varobj_get_gdb_type (struct varobj *var)
   return var->type;
 }
 
+/* Is VAR a path expression parent, i.e., can it be used to construct
+   a valid path expression?  */
+
+static int
+is_path_expr_parent (struct varobj *var)
+{
+  struct type *type;
+
+  /* "Fake" children are not path_expr parents.  */
+  if (CPLUS_FAKE_CHILD (var))
+    return 0;
+
+  type = get_value_type (var);
+
+  /* Anonymous unions and structs are also not path_expr parents.  */
+  return !((TYPE_CODE (type) == TYPE_CODE_STRUCT
+	    || TYPE_CODE (type) == TYPE_CODE_UNION)
+	   && TYPE_NAME (type) == NULL);
+}
+
+/* Return the path expression parent for VAR.  */
+
+static struct varobj *
+get_path_expr_parent (struct varobj *var)
+{
+  struct varobj *parent = var;
+
+  while (!is_root_p (parent) && !is_path_expr_parent (parent))
+    parent = parent->parent;
+
+  return parent;
+}
+
 /* Return a pointer to the full rooted expression of varobj VAR.
    If it has not been computed yet, compute it.  */
 char *
@@ -1349,21 +1460,26 @@ varobj_get_value (struct varobj *var)
 int
 varobj_set_value (struct varobj *var, char *expression)
 {
-  struct value *val;
-
+  struct value *val = NULL; /* Initialize to keep gcc happy.  */
   /* The argument "expression" contains the variable's new value.
      We need to first construct a legal expression for this -- ugh!  */
   /* Does this cover all the bases?  */
   struct expression *exp;
-  struct value *value;
+  struct value *value = NULL; /* Initialize to keep gcc happy.  */
   int saved_input_radix = input_radix;
   char *s = expression;
+  volatile struct gdb_exception except;
 
   gdb_assert (varobj_editable_p (var));
 
   input_radix = 10;		/* ALWAYS reset to decimal temporarily.  */
-  exp = parse_exp_1 (&s, 0, 0);
-  if (!gdb_evaluate_expression (exp, &value))
+  exp = parse_exp_1 (&s, 0, 0, 0);
+  TRY_CATCH (except, RETURN_MASK_ERROR)
+    {
+      value = evaluate_expression (exp);
+    }
+
+  if (except.reason < 0)
     {
       /* We cannot proceed without a valid expression.  */
       xfree (exp);
@@ -1385,13 +1501,16 @@ varobj_set_value (struct varobj *var, char *expression)
      array's content.  */
   value = coerce_array (value);
 
-  /* The new value may be lazy.  gdb_value_assign, or 
-     rather value_contents, will take care of this.
-     If fetching of the new value will fail, gdb_value_assign
-     with catch the exception.  */
-  if (!gdb_value_assign (var->value, value, &val))
+  /* The new value may be lazy.  value_assign, or
+     rather value_contents, will take care of this.  */
+  TRY_CATCH (except, RETURN_MASK_ERROR)
+    {
+      val = value_assign (var->value, value);
+    }
+
+  if (except.reason < 0)
     return 0;
-     
+
   /* If the value has changed, record it, so that next -var-update can
      report this change.  If a variable had a value of '1', we've set it
      to '333' and then set again to '1', when -var-update will report this
@@ -1520,6 +1639,43 @@ install_new_value_visualizer (struct varobj *var)
 #endif
 }
 
+/* When using RTTI to determine variable type it may be changed in runtime when
+   the variable value is changed.  This function checks whether type of varobj
+   VAR will change when a new value NEW_VALUE is assigned and if it is so
+   updates the type of VAR.  */
+
+static int
+update_type_if_necessary (struct varobj *var, struct value *new_value)
+{
+  if (new_value)
+    {
+      struct value_print_options opts;
+
+      get_user_print_options (&opts);
+      if (opts.objectprint)
+	{
+	  struct type *new_type;
+	  char *curr_type_str, *new_type_str;
+
+	  new_type = value_actual_type (new_value, 0, 0);
+	  new_type_str = type_to_string (new_type);
+	  curr_type_str = varobj_get_type (var);
+	  if (strcmp (curr_type_str, new_type_str) != 0)
+	    {
+	      var->type = new_type;
+
+	      /* This information may be not valid for a new type.  */
+	      varobj_delete (var, NULL, 1);
+	      VEC_free (varobj_p, var->children);
+	      var->num_children = -1;
+	      return 1;
+	    }
+	}
+    }
+
+  return 0;
+}
+
 /* Assign a new value to a variable object.  If INITIAL is non-zero,
    this is the first assignement after the variable object was just
    created, or changed type.  In that case, just assign the value 
@@ -1594,15 +1750,29 @@ install_new_value (struct varobj *var, struct value *value, int initial)
 	     explicitly asked to compare the new value with the old one.  */
 	  intentionally_not_fetched = 1;
 	}
-      else if (!gdb_value_fetch_lazy (value))
+      else
 	{
-	  /* Set the value to NULL, so that for the next -var-update,
-	     we don't try to compare the new value with this value,
-	     that we couldn't even read.  */
-	  value = NULL;
+	  volatile struct gdb_exception except;
+
+	  TRY_CATCH (except, RETURN_MASK_ERROR)
+	    {
+	      value_fetch_lazy (value);
+	    }
+
+	  if (except.reason < 0)
+	    {
+	      /* Set the value to NULL, so that for the next -var-update,
+		 we don't try to compare the new value with this value,
+		 that we couldn't even read.  */
+	      value = NULL;
+	    }
 	}
     }
 
+  /* Get a reference now, before possibly passing it to any Python
+     code that might release it.  */
+  if (value != NULL)
+    value_incref (value);
 
   /* Below, we'll be comparing string rendering of old and new
      values.  Don't get string rendering if the value is
@@ -1670,8 +1840,6 @@ install_new_value (struct varobj *var, struct value *value, int initial)
   if (var->value != NULL && var->value != value)
     value_free (var->value);
   var->value = value;
-  if (value != NULL)
-    value_incref (value);
   if (value && value_lazy (value) && intentionally_not_fetched)
     var->not_fetched = 1;
   else
@@ -1757,6 +1925,30 @@ varobj_set_visualizer (struct varobj *var, const char *visualizer)
 #endif
 }
 
+/* If NEW_VALUE is the new value of the given varobj (var), return
+   non-zero if var has mutated.  In other words, if the type of
+   the new value is different from the type of the varobj's old
+   value.
+
+   NEW_VALUE may be NULL, if the varobj is now out of scope.  */
+
+static int
+varobj_value_has_mutated (struct varobj *var, struct value *new_value,
+			  struct type *new_type)
+{
+  /* If we haven't previously computed the number of children in var,
+     it does not matter from the front-end's perspective whether
+     the type has mutated or not.  For all intents and purposes,
+     it has not mutated.  */
+  if (var->num_children < 0)
+    return 0;
+
+  if (var->root->lang->value_has_mutated)
+    return var->root->lang->value_has_mutated (var, new_value, new_type);
+  else
+    return 0;
+}
+
 /* Update the values for a variable and its children.  This is a
    two-pronged attack.  First, re-parse the value for the root's
    expression to see if it's changed.  Then go all the way
@@ -1772,7 +1964,8 @@ varobj_set_visualizer (struct varobj *var, const char *visualizer)
    returns TYPE_CHANGED, then it has done this and VARP will be modified
    to point to the new varobj.  */
 
-VEC(varobj_update_result) *varobj_update (struct varobj **varp, int explicit)
+VEC(varobj_update_result) *
+varobj_update (struct varobj **varp, int explicit)
 {
   int changed = 0;
   int type_changed = 0;
@@ -1812,8 +2005,9 @@ VEC(varobj_update_result) *varobj_update (struct varobj **varp, int explicit)
 	 value_of_root variable dispose of the varobj if the type
 	 has changed.  */
       new = value_of_root (varp, &type_changed);
+      if (update_type_if_necessary(*varp, new))
+	  type_changed = 1;
       r.varobj = *varp;
-
       r.type_changed = type_changed;
       if (install_new_value ((*varp), new, type_changed))
 	r.changed = 1;
@@ -1850,9 +2044,30 @@ VEC(varobj_update_result) *varobj_update (struct varobj **varp, int explicit)
       /* Update this variable, unless it's a root, which is already
 	 updated.  */
       if (!r.value_installed)
-	{	  
+	{
+	  struct type *new_type;
+
 	  new = value_of_child (v->parent, v->index);
-	  if (install_new_value (v, new, 0 /* type not changed */))
+	  if (update_type_if_necessary(v, new))
+	    r.type_changed = 1;
+	  if (new)
+	    new_type = value_type (new);
+	  else
+	    new_type = v->root->lang->type_of_child (v->parent, v->index);
+
+	  if (varobj_value_has_mutated (v, new, new_type))
+	    {
+	      /* The children are no longer valid; delete them now.
+	         Report the fact that its type changed as well.  */
+	      varobj_delete (v, NULL, 1 /* only_children */);
+	      v->num_children = -1;
+	      v->to = -1;
+	      v->from = -1;
+	      v->type = new_type;
+	      r.type_changed = 1;
+	    }
+
+	  if (install_new_value (v, new, r.type_changed))
 	    {
 	      r.changed = 1;
 	      v->updated = 0;
@@ -1864,7 +2079,8 @@ VEC(varobj_update_result) *varobj_update (struct varobj **varp, int explicit)
 	 invoked.  */
       if (v->pretty_printer)
 	{
-	  VEC (varobj_p) *changed = 0, *new = 0, *unchanged = 0;
+	  VEC (varobj_p) *changed = 0, *type_changed = 0, *unchanged = 0;
+	  VEC (varobj_p) *new = 0;
 	  int i, children_changed = 0;
 
 	  if (v->frozen)
@@ -1882,7 +2098,7 @@ VEC(varobj_update_result) *varobj_update (struct varobj **varp, int explicit)
 		 it.  */
 	      if (!varobj_has_more (v, 0))
 		{
-		  update_dynamic_varobj_children (v, NULL, NULL, NULL,
+		  update_dynamic_varobj_children (v, NULL, NULL, NULL, NULL,
 						  &dummy, 0, 0, 0);
 		  if (varobj_has_more (v, 0))
 		    r.changed = 1;
@@ -1896,8 +2112,8 @@ VEC(varobj_update_result) *varobj_update (struct varobj **varp, int explicit)
 
 	  /* If update_dynamic_varobj_children returns 0, then we have
 	     a non-conforming pretty-printer, so we skip it.  */
-	  if (update_dynamic_varobj_children (v, &changed, &new, &unchanged,
-					      &children_changed, 1,
+	  if (update_dynamic_varobj_children (v, &changed, &type_changed, &new,
+					      &unchanged, &children_changed, 1,
 					      v->from, v->to))
 	    {
 	      if (children_changed || new)
@@ -1909,6 +2125,18 @@ VEC(varobj_update_result) *varobj_update (struct varobj **varp, int explicit)
 		 popped from the work stack first, and so will be
 		 added to result first.  This does not affect
 		 correctness, just "nicer".  */
+	      for (i = VEC_length (varobj_p, type_changed) - 1; i >= 0; --i)
+		{
+		  varobj_p tmp = VEC_index (varobj_p, type_changed, i);
+		  varobj_update_result r = {0};
+
+		  /* Type may change only if value was changed.  */
+		  r.varobj = tmp;
+		  r.changed = 1;
+		  r.type_changed = 1;
+		  r.value_installed = 1;
+		  VEC_safe_push (varobj_update_result, stack, &r);
+		}
 	      for (i = VEC_length (varobj_p, changed) - 1; i >= 0; --i)
 		{
 		  varobj_p tmp = VEC_index (varobj_p, changed, i);
@@ -1935,9 +2163,10 @@ VEC(varobj_update_result) *varobj_update (struct varobj **varp, int explicit)
 	      if (r.changed || r.children_changed)
 		VEC_safe_push (varobj_update_result, result, &r);
 
-	      /* Free CHANGED and UNCHANGED, but not NEW, because NEW
-		 has been put into the result vector.  */
+	      /* Free CHANGED, TYPE_CHANGED and UNCHANGED, but not NEW,
+		 because NEW has been put into the result vector.  */
 	      VEC_free (varobj_p, changed);
+	      VEC_free (varobj_p, type_changed);
 	      VEC_free (varobj_p, unchanged);
 
 	      continue;
@@ -2169,6 +2398,20 @@ create_child (struct varobj *parent, int index, char *name)
 				  value_of_child (parent, index));
 }
 
+/* Does CHILD represent a child with no name?  This happens when
+   the child is an anonmous struct or union and it has no field name
+   in its parent variable.
+
+   This has already been determined by *_describe_child. The easiest
+   thing to do is to compare the child's name with ANONYMOUS_*_NAME.  */
+
+static int
+is_anonymous_child (struct varobj *child)
+{
+  return (strcmp (child->name, ANONYMOUS_STRUCT_NAME) == 0
+	  || strcmp (child->name, ANONYMOUS_UNION_NAME) == 0);
+}
+
 static struct varobj *
 create_child_with_value (struct varobj *parent, int index, const char *name,
 			 struct value *value)
@@ -2184,8 +2427,13 @@ create_child_with_value (struct varobj *parent, int index, const char *name,
   child->index = index;
   child->parent = parent;
   child->root = parent->root;
-  childs_name = xstrprintf ("%s.%s", parent->obj_name, name);
+
+  if (is_anonymous_child (child))
+    childs_name = xstrprintf ("%s.%d_anonymous", parent->obj_name, index);
+  else
+    childs_name = xstrprintf ("%s.%s", parent->obj_name, name);
   child->obj_name = childs_name;
+
   install_variable (child);
 
   /* Compute the type of the child.  Must do this before
@@ -2193,7 +2441,7 @@ create_child_with_value (struct varobj *parent, int index, const char *name,
   if (value != NULL)
     /* If the child had no evaluation errors, var->value
        will be non-NULL and contain a valid type.  */
-    child->type = value_type (value);
+    child->type = value_actual_type (value, 0, NULL);
   else
     /* Otherwise, we must compute the type.  */
     child->type = (*child->root->lang->type_of_child) (child->parent, 
@@ -2540,7 +2788,28 @@ value_of_root (struct varobj **var_handle, int *type_changed)
       *type_changed = 0;
     }
 
-  return (*var->root->lang->value_of_root) (var_handle);
+  {
+    struct value *value;
+
+    value = (*var->root->lang->value_of_root) (var_handle);
+    if (var->value == NULL || value == NULL)
+      {
+	/* For root varobj-s, a NULL value indicates a scoping issue.
+	   So, nothing to do in terms of checking for mutations.  */
+      }
+    else if (varobj_value_has_mutated (var, value, value_type (value)))
+      {
+	/* The type has mutated, so the children are no longer valid.
+	   Just delete them, and tell our caller that the type has
+	   changed.  */
+	varobj_delete (var, NULL, 1 /* only_children */);
+	var->num_children = -1;
+	var->to = -1;
+	var->from = -1;
+	*type_changed = 1;
+      }
+    return value;
+  }
 }
 
 /* What is the ``struct value *'' for the INDEX'th child of PARENT?  */
@@ -2729,39 +2998,12 @@ varobj_editable_p (struct varobj *var)
     }
 }
 
-/* Return non-zero if changes in value of VAR
-   must be detected and reported by -var-update.
-   Return zero is -var-update should never report
-   changes of such values.  This makes sense for structures
-   (since the changes in children values will be reported separately),
-   or for artifical objects (like 'public' pseudo-field in C++).
+/* Call VAR's value_is_changeable_p language-specific callback.  */
 
-   Return value of 0 means that gdb need not call value_fetch_lazy
-   for the value of this variable object.  */
 static int
 varobj_value_is_changeable_p (struct varobj *var)
 {
-  int r;
-  struct type *type;
-
-  if (CPLUS_FAKE_CHILD (var))
-    return 0;
-
-  type = get_value_type (var);
-
-  switch (TYPE_CODE (type))
-    {
-    case TYPE_CODE_STRUCT:
-    case TYPE_CODE_UNION:
-    case TYPE_CODE_ARRAY:
-      r = 0;
-      break;
-
-    default:
-      r = 1;
-    }
-
-  return r;
+  return var->root->lang->value_is_changeable_p (var);
 }
 
 /* Return 1 if that varobj is floating, that is is always evaluated in the
@@ -2780,6 +3022,10 @@ varobj_floating_p (struct varobj *var)
    to all types and dereferencing pointers to
    structures.
 
+   If LOOKUP_ACTUAL_TYPE is set the enclosing type of the
+   value will be fetched and if it differs from static type
+   the value will be casted to it.
+
    Both TYPE and *TYPE should be non-null.  VALUE
    can be null if we want to only translate type.
    *VALUE can be null as well -- if the parent
@@ -2791,7 +3037,8 @@ varobj_floating_p (struct varobj *var)
 static void
 adjust_value_for_child_access (struct value **value,
 				  struct type **type,
-				  int *was_ptr)
+				  int *was_ptr,
+				  int lookup_actual_type)
 {
   gdb_assert (type && *type);
 
@@ -2817,9 +3064,14 @@ adjust_value_for_child_access (struct value **value,
 	{
 	  if (value && *value)
 	    {
-	      int success = gdb_value_ind (*value, value);
+	      volatile struct gdb_exception except;
 
-	      if (!success)
+	      TRY_CATCH (except, RETURN_MASK_ERROR)
+		{
+		  *value = value_ind (*value);
+		}
+
+	      if (except.reason < 0)
 		*value = NULL;
 	    }
 	  *type = target_type;
@@ -2831,9 +3083,53 @@ adjust_value_for_child_access (struct value **value,
   /* The 'get_target_type' function calls check_typedef on
      result, so we can immediately check type code.  No
      need to call check_typedef here.  */
+
+  /* Access a real type of the value (if necessary and possible).  */
+  if (value && *value && lookup_actual_type)
+    {
+      struct type *enclosing_type;
+      int real_type_found = 0;
+
+      enclosing_type = value_actual_type (*value, 1, &real_type_found);
+      if (real_type_found)
+        {
+          *type = enclosing_type;
+          *value = value_cast (enclosing_type, *value);
+        }
+    }
+}
+
+/* Implement the "value_is_changeable_p" varobj callback for most
+   languages.  */
+
+static int
+default_value_is_changeable_p (struct varobj *var)
+{
+  int r;
+  struct type *type;
+
+  if (CPLUS_FAKE_CHILD (var))
+    return 0;
+
+  type = get_value_type (var);
+
+  switch (TYPE_CODE (type))
+    {
+    case TYPE_CODE_STRUCT:
+    case TYPE_CODE_UNION:
+    case TYPE_CODE_ARRAY:
+      r = 0;
+      break;
+
+    default:
+      r = 1;
+    }
+
+  return r;
 }
 
 /* C */
+
 static int
 c_number_of_children (struct varobj *var)
 {
@@ -2841,7 +3137,7 @@ c_number_of_children (struct varobj *var)
   int children = 0;
   struct type *target;
 
-  adjust_value_for_child_access (NULL, &type, NULL);
+  adjust_value_for_child_access (NULL, &type, NULL, 0);
   target = get_target_type (type);
 
   switch (TYPE_CODE (type))
@@ -2944,6 +3240,7 @@ c_describe_child (struct varobj *parent, int index,
   struct type *type = get_value_type (parent);
   char *parent_expression = NULL;
   int was_ptr;
+  volatile struct gdb_exception except;
 
   if (cname)
     *cname = NULL;
@@ -2954,9 +3251,9 @@ c_describe_child (struct varobj *parent, int index,
   if (cfull_expression)
     {
       *cfull_expression = NULL;
-      parent_expression = varobj_get_path_expr (parent);
+      parent_expression = varobj_get_path_expr (get_path_expr_parent (parent));
     }
-  adjust_value_for_child_access (&value, &type, &was_ptr);
+  adjust_value_for_child_access (&value, &type, &was_ptr, 0);
       
   switch (TYPE_CODE (type))
     {
@@ -2971,7 +3268,10 @@ c_describe_child (struct varobj *parent, int index,
 	{
 	  int real_index = index + TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type));
 
-	  gdb_value_subscript (value, real_index, cvalue);
+	  TRY_CATCH (except, RETURN_MASK_ERROR)
+	    {
+	      *cvalue = value_subscript (value, real_index);
+	    }
 	}
 
       if (ctype)
@@ -2989,26 +3289,49 @@ c_describe_child (struct varobj *parent, int index,
 
     case TYPE_CODE_STRUCT:
     case TYPE_CODE_UNION:
-      if (cname)
-	*cname = xstrdup (TYPE_FIELD_NAME (type, index));
+      {
+	const char *field_name;
 
-      if (cvalue && value)
-	{
-	  /* For C, varobj index is the same as type index.  */
-	  *cvalue = value_struct_element_index (value, index);
-	}
+	/* If the type is anonymous and the field has no name,
+	   set an appropriate name.  */
+	field_name = TYPE_FIELD_NAME (type, index);
+	if (field_name == NULL || *field_name == '\0')
+	  {
+	    if (cname)
+	      {
+		if (TYPE_CODE (TYPE_FIELD_TYPE (type, index))
+		    == TYPE_CODE_STRUCT)
+		  *cname = xstrdup (ANONYMOUS_STRUCT_NAME);
+		else
+		  *cname = xstrdup (ANONYMOUS_UNION_NAME);
+	      }
 
-      if (ctype)
-	*ctype = TYPE_FIELD_TYPE (type, index);
+	    if (cfull_expression)
+	      *cfull_expression = xstrdup ("");
+	  }
+	else
+	  {
+	    if (cname)
+	      *cname = xstrdup (field_name);
 
-      if (cfull_expression)
-	{
-	  char *join = was_ptr ? "->" : ".";
+	    if (cfull_expression)
+	      {
+		char *join = was_ptr ? "->" : ".";
 
-	  *cfull_expression = xstrprintf ("(%s)%s%s", parent_expression, join,
-					  TYPE_FIELD_NAME (type, index));
-	}
+		*cfull_expression = xstrprintf ("(%s)%s%s", parent_expression,
+						join, field_name);
+	      }
+	  }
+
+	if (cvalue && value)
+	  {
+	    /* For C, varobj index is the same as type index.  */
+	    *cvalue = value_struct_element_index (value, index);
+	  }
 
+	if (ctype)
+	  *ctype = TYPE_FIELD_TYPE (type, index);
+      }
       break;
 
     case TYPE_CODE_PTR:
@@ -3017,9 +3340,12 @@ c_describe_child (struct varobj *parent, int index,
 
       if (cvalue && value)
 	{
-	  int success = gdb_value_ind (value, cvalue);
+	  TRY_CATCH (except, RETURN_MASK_ERROR)
+	    {
+	      *cvalue = value_ind (value);
+	    }
 
-	  if (!success)
+	  if (except.reason < 0)
 	    *cvalue = NULL;
 	}
 
@@ -3123,9 +3449,15 @@ c_value_of_root (struct varobj **var_handle)
 
   if (within_scope)
     {
+      volatile struct gdb_exception except;
+
       /* We need to catch errors here, because if evaluate
          expression fails we want to just return NULL.  */
-      gdb_evaluate_expression (var->root->exp, &new_val);
+      TRY_CATCH (except, RETURN_MASK_ERROR)
+	{
+	  new_val = evaluate_expression (var->root->exp);
+	}
+
       return new_val;
     }
 
@@ -3160,11 +3492,6 @@ c_value_of_variable (struct varobj *var, enum varobj_display_formats format)
      catch that case explicitly.  */
   struct type *type = get_type (var);
 
-  /* If we have a custom formatter, return whatever string it has
-     produced.  */
-  if (var->pretty_printer && var->print_value)
-    return xstrdup (var->print_value);
-  
   /* Strip top-level references.  */
   while (TYPE_CODE (type) == TYPE_CODE_REF)
     type = check_typedef (TYPE_TARGET_TYPE (type));
@@ -3222,16 +3549,29 @@ c_value_of_variable (struct varobj *var, enum varobj_display_formats format)
 static int
 cplus_number_of_children (struct varobj *var)
 {
+  struct value *value = NULL;
   struct type *type;
   int children, dont_know;
+  int lookup_actual_type = 0;
+  struct value_print_options opts;
 
   dont_know = 1;
   children = 0;
 
+  get_user_print_options (&opts);
+
   if (!CPLUS_FAKE_CHILD (var))
     {
       type = get_value_type (var);
-      adjust_value_for_child_access (NULL, &type, NULL);
+
+      /* It is necessary to access a real type (via RTTI).  */
+      if (opts.objectprint)
+        {
+          value = var->value;
+          lookup_actual_type = (TYPE_CODE (var->type) == TYPE_CODE_REF
+				|| TYPE_CODE (var->type) == TYPE_CODE_PTR);
+        }
+      adjust_value_for_child_access (&value, &type, NULL, lookup_actual_type);
 
       if (((TYPE_CODE (type)) == TYPE_CODE_STRUCT) ||
 	  ((TYPE_CODE (type)) == TYPE_CODE_UNION))
@@ -3258,7 +3598,17 @@ cplus_number_of_children (struct varobj *var)
       int kids[3];
 
       type = get_value_type (var->parent);
-      adjust_value_for_child_access (NULL, &type, NULL);
+
+      /* It is necessary to access a real type (via RTTI).  */
+      if (opts.objectprint)
+        {
+	  struct varobj *parent = var->parent;
+
+	  value = parent->value;
+	  lookup_actual_type = (TYPE_CODE (parent->type) == TYPE_CODE_REF
+				|| TYPE_CODE (parent->type) == TYPE_CODE_PTR);
+        }
+      adjust_value_for_child_access (&value, &type, NULL, lookup_actual_type);
 
       cplus_class_num_children (type, kids);
       if (strcmp (var->name, "public") == 0)
@@ -3340,7 +3690,10 @@ cplus_describe_child (struct varobj *parent, int index,
   struct value *value;
   struct type *type;
   int was_ptr;
+  int lookup_actual_type = 0;
   char *parent_expression = NULL;
+  struct varobj *var;
+  struct value_print_options opts;
 
   if (cname)
     *cname = NULL;
@@ -3351,22 +3704,18 @@ cplus_describe_child (struct varobj *parent, int index,
   if (cfull_expression)
     *cfull_expression = NULL;
 
-  if (CPLUS_FAKE_CHILD (parent))
-    {
-      value = parent->parent->value;
-      type = get_value_type (parent->parent);
-      if (cfull_expression)
-	parent_expression = varobj_get_path_expr (parent->parent);
-    }
-  else
-    {
-      value = parent->value;
-      type = get_value_type (parent);
-      if (cfull_expression)
-	parent_expression = varobj_get_path_expr (parent);
-    }
+  get_user_print_options (&opts);
 
-  adjust_value_for_child_access (&value, &type, &was_ptr);
+  var = (CPLUS_FAKE_CHILD (parent)) ? parent->parent : parent;
+  if (opts.objectprint)
+    lookup_actual_type = (TYPE_CODE (var->type) == TYPE_CODE_REF
+			  || TYPE_CODE (var->type) == TYPE_CODE_PTR);
+  value = var->value;
+  type = get_value_type (var);
+  if (cfull_expression)
+    parent_expression = varobj_get_path_expr (get_path_expr_parent (var));
+
+  adjust_value_for_child_access (&value, &type, &was_ptr, lookup_actual_type);
 
   if (TYPE_CODE (type) == TYPE_CODE_STRUCT
       || TYPE_CODE (type) == TYPE_CODE_UNION)
@@ -3385,6 +3734,7 @@ cplus_describe_child (struct varobj *parent, int index,
 	  enum accessibility acc = public_field;
 	  int vptr_fieldno;
 	  struct type *basetype = NULL;
+	  const char *field_name;
 
 	  vptr_fieldno = get_vptr_fieldno (type, &basetype);
 	  if (strcmp (parent->name, "private") == 0)
@@ -3403,20 +3753,40 @@ cplus_describe_child (struct varobj *parent, int index,
 	    }
 	  --type_index;
 
-	  if (cname)
-	    *cname = xstrdup (TYPE_FIELD_NAME (type, type_index));
+	  /* If the type is anonymous and the field has no name,
+	     set an appopriate name.  */
+	  field_name = TYPE_FIELD_NAME (type, type_index);
+	  if (field_name == NULL || *field_name == '\0')
+	    {
+	      if (cname)
+		{
+		  if (TYPE_CODE (TYPE_FIELD_TYPE (type, type_index))
+		      == TYPE_CODE_STRUCT)
+		    *cname = xstrdup (ANONYMOUS_STRUCT_NAME);
+		  else if (TYPE_CODE (TYPE_FIELD_TYPE (type, type_index))
+			   == TYPE_CODE_UNION)
+		    *cname = xstrdup (ANONYMOUS_UNION_NAME);
+		}
+
+	      if (cfull_expression)
+		*cfull_expression = xstrdup ("");
+	    }
+	  else
+	    {
+	      if (cname)
+		*cname = xstrdup (TYPE_FIELD_NAME (type, type_index));
+
+	      if (cfull_expression)
+		*cfull_expression
+		  = xstrprintf ("((%s)%s%s)", parent_expression, join,
+				field_name);
+	    }
 
 	  if (cvalue && value)
 	    *cvalue = value_struct_element_index (value, type_index);
 
 	  if (ctype)
 	    *ctype = TYPE_FIELD_TYPE (type, type_index);
-
-	  if (cfull_expression)
-	    *cfull_expression
-	      = xstrprintf ("((%s)%s%s)", parent_expression,
-			    join, 
-			    TYPE_FIELD_NAME (type, type_index));
 	}
       else if (index < TYPE_N_BASECLASSES (type))
 	{
@@ -3648,7 +4018,7 @@ java_value_of_variable (struct varobj *var, enum varobj_display_formats format)
 static int
 ada_number_of_children (struct varobj *var)
 {
-  return c_number_of_children (var);
+  return ada_varobj_get_number_of_children (var->value, var->type);
 }
 
 static char *
@@ -3660,13 +4030,21 @@ ada_name_of_variable (struct varobj *parent)
 static char *
 ada_name_of_child (struct varobj *parent, int index)
 {
-  return c_name_of_child (parent, index);
+  return ada_varobj_get_name_of_child (parent->value, parent->type,
+				       parent->name, index);
 }
 
 static char*
 ada_path_expr_of_child (struct varobj *child)
 {
-  return c_path_expr_of_child (child);
+  struct varobj *parent = child->parent;
+  const char *parent_path_expr = varobj_get_path_expr (parent);
+
+  return ada_varobj_get_path_expr_of_child (parent->value,
+					    parent->type,
+					    parent->name,
+					    parent_path_expr,
+					    child->index);
 }
 
 static struct value *
@@ -3678,19 +4056,92 @@ ada_value_of_root (struct varobj **var_handle)
 static struct value *
 ada_value_of_child (struct varobj *parent, int index)
 {
-  return c_value_of_child (parent, index);
+  return ada_varobj_get_value_of_child (parent->value, parent->type,
+					parent->name, index);
 }
 
 static struct type *
 ada_type_of_child (struct varobj *parent, int index)
 {
-  return c_type_of_child (parent, index);
+  return ada_varobj_get_type_of_child (parent->value, parent->type,
+				       index);
 }
 
 static char *
 ada_value_of_variable (struct varobj *var, enum varobj_display_formats format)
 {
-  return c_value_of_variable (var, format);
+  struct value_print_options opts;
+
+  get_formatted_print_options (&opts, format_code[(int) format]);
+  opts.deref_ref = 0;
+  opts.raw = 1;
+
+  return ada_varobj_get_value_of_variable (var->value, var->type, &opts);
+}
+
+/* Implement the "value_is_changeable_p" routine for Ada.  */
+
+static int
+ada_value_is_changeable_p (struct varobj *var)
+{
+  struct type *type = var->value ? value_type (var->value) : var->type;
+
+  if (ada_is_array_descriptor_type (type)
+      && TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
+    {
+      /* This is in reality a pointer to an unconstrained array.
+	 its value is changeable.  */
+      return 1;
+    }
+
+  if (ada_is_string_type (type))
+    {
+      /* We display the contents of the string in the array's
+	 "value" field.  The contents can change, so consider
+	 that the array is changeable.  */
+      return 1;
+    }
+
+  return default_value_is_changeable_p (var);
+}
+
+/* Implement the "value_has_mutated" routine for Ada.  */
+
+static int
+ada_value_has_mutated (struct varobj *var, struct value *new_val,
+		       struct type *new_type)
+{
+  int i;
+  int from = -1;
+  int to = -1;
+
+  /* If the number of fields have changed, then for sure the type
+     has mutated.  */
+  if (ada_varobj_get_number_of_children (new_val, new_type)
+      != var->num_children)
+    return 1;
+
+  /* If the number of fields have remained the same, then we need
+     to check the name of each field.  If they remain the same,
+     then chances are the type hasn't mutated.  This is technically
+     an incomplete test, as the child's type might have changed
+     despite the fact that the name remains the same.  But we'll
+     handle this situation by saying that the child has mutated,
+     not this value.
+
+     If only part (or none!) of the children have been fetched,
+     then only check the ones we fetched.  It does not matter
+     to the frontend whether a child that it has not fetched yet
+     has mutated or not. So just assume it hasn't.  */
+
+  restrict_range (var->children, &from, &to);
+  for (i = from; i < to; i++)
+    if (strcmp (ada_varobj_get_name_of_child (new_val, new_type,
+					      var->name, i),
+		VEC_index (varobj_p, var->children, i)->name) != 0)
+      return 1;
+
+  return 0;
 }
 
 /* Iterate all the existing _root_ VAROBJs and call the FUNC callback for them
diff --git a/gdb/vax-tdep.c b/gdb/vax-tdep.c
index 0dcca75..550b56b 100644
--- a/gdb/vax-tdep.c
+++ b/gdb/vax-tdep.c
@@ -204,7 +204,7 @@ vax_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
 

 
 static enum return_value_convention
-vax_return_value (struct gdbarch *gdbarch, struct type *func_type,
+vax_return_value (struct gdbarch *gdbarch, struct value *function,
 		  struct type *type, struct regcache *regcache,
 		  gdb_byte *readbuf, const gdb_byte *writebuf)
 {
diff --git a/gdb/vaxobsd-tdep.c b/gdb/vaxobsd-tdep.c
index d5f4ba6..55515f3 100644
--- a/gdb/vaxobsd-tdep.c
+++ b/gdb/vaxobsd-tdep.c
@@ -65,7 +65,7 @@ vaxobsd_sigtramp_sniffer (const struct frame_unwind *self,
   CORE_ADDR start_pc = (pc & ~(vaxobsd_page_size - 1));
   CORE_ADDR sigreturn_addr = start_pc + vaxobsd_sigreturn_offset;
   gdb_byte *buf;
-  char *name;
+  const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
   if (name)
diff --git a/gdb/vec.c b/gdb/vec.c
deleted file mode 100644
index 3793a6a..0000000
--- a/gdb/vec.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/* Vector API for GDB.
-   Copyright (C) 2004-2012 Free Software Foundation, Inc.
-   Contributed by Nathan Sidwell <nathan at codesourcery.com>
-
-   This file is part of GDB.
-
-   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 3 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, see <http://www.gnu.org/licenses/>.  */
-
-#include "defs.h"
-#include "vec.h"
-
-struct vec_prefix
-{
-  unsigned num;
-  unsigned alloc;
-  void *vec[1];
-};
-
-/* Calculate the new ALLOC value, making sure that abs(RESERVE) slots
-   are free.  If RESERVE < 0 grow exactly, otherwise grow
-   exponentially.  */
-
-static inline unsigned
-calculate_allocation (const struct vec_prefix *pfx, int reserve)
-{
-  unsigned alloc = 0;
-  unsigned num = 0;
-
-  if (pfx)
-    {
-      alloc = pfx->alloc;
-      num = pfx->num;
-    }
-  else if (!reserve)
-    /* If there's no prefix, and we've not requested anything, then we
-       will create a NULL vector.  */
-    return 0;
-
-  /* We must have run out of room.  */
-  gdb_assert (alloc - num < (unsigned)(reserve < 0 ? -reserve : reserve));
-
-  if (reserve < 0)
-    /* Exact size.  */
-    alloc = num + -reserve;
-  else
-    {
-      /* Exponential growth.  */
-      if (!alloc)
-	alloc = 4;
-      else if (alloc < 16)
-	/* Double when small.  */
-	alloc = alloc * 2;
-      else
-	/* Grow slower when large.  */
-	alloc = (alloc * 3 / 2);
-
-      /* If this is still too small, set it to the right size.  */
-      if (alloc < num + reserve)
-	alloc = num + reserve;
-    }
-  return alloc;
-}
-
-/* Ensure there are at least abs(RESERVE) free slots in VEC.  If
-   RESERVE < 0 grow exactly, else grow exponentially.  As a special
-   case, if VEC is NULL, and RESERVE is 0, no vector will be created.  */
-
-void *
-vec_p_reserve (void *vec, int reserve)
-{
-  return vec_o_reserve (vec, reserve,
-			offsetof (struct vec_prefix, vec), sizeof (void *));
-}
-
-/* As vec_p_reserve, but for object vectors.  The vector's trailing
-   array is at VEC_OFFSET offset and consists of ELT_SIZE sized
-   elements.  */
-
-void *
-vec_o_reserve (void *vec, int reserve, size_t vec_offset, size_t elt_size)
-{
-  struct vec_prefix *pfx = vec;
-  unsigned alloc = calculate_allocation (pfx, reserve);
-
-  if (!alloc)
-    return NULL;
-
-  vec = xrealloc (vec, vec_offset + alloc * elt_size);
-  ((struct vec_prefix *)vec)->alloc = alloc;
-  if (!pfx)
-    ((struct vec_prefix *)vec)->num = 0;
-
-  return vec;
-}
-
-#if 0
-/* Example uses.  */
-DEF_VEC_I (int);
-typedef struct X
-{
-  int i;
-} obj_t;
-typedef obj_t *ptr_t;
-
-DEF_VEC_P (ptr_t);
-DEF_VEC_O (obj_t);
-#endif
diff --git a/gdb/vec.h b/gdb/vec.h
deleted file mode 100644
index 7ec27a1..0000000
--- a/gdb/vec.h
+++ /dev/null
@@ -1,1033 +0,0 @@
-/* Vector API for GDB.
-   Copyright (C) 2004-2012 Free Software Foundation, Inc.
-   Contributed by Nathan Sidwell <nathan at codesourcery.com>
-
-   This file is part of GDB.
-
-   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 3 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, see <http://www.gnu.org/licenses/>.  */
-
-#if !defined (GDB_VEC_H)
-#define GDB_VEC_H
-
-#include <stddef.h>
-#include "gdb_string.h"
-#include "gdb_assert.h"
-
-/* The macros here implement a set of templated vector types and
-   associated interfaces.  These templates are implemented with
-   macros, as we're not in C++ land.  The interface functions are
-   typesafe and use static inline functions, sometimes backed by
-   out-of-line generic functions.
-
-   Because of the different behavior of structure objects, scalar
-   objects and of pointers, there are three flavors, one for each of
-   these variants.  Both the structure object and pointer variants
-   pass pointers to objects around -- in the former case the pointers
-   are stored into the vector and in the latter case the pointers are
-   dereferenced and the objects copied into the vector.  The scalar
-   object variant is suitable for int-like objects, and the vector
-   elements are returned by value.
-
-   There are both 'index' and 'iterate' accessors.  The iterator
-   returns a boolean iteration condition and updates the iteration
-   variable passed by reference.  Because the iterator will be
-   inlined, the address-of can be optimized away.
-
-   The vectors are implemented using the trailing array idiom, thus
-   they are not resizeable without changing the address of the vector
-   object itself.  This means you cannot have variables or fields of
-   vector type -- always use a pointer to a vector.  The one exception
-   is the final field of a structure, which could be a vector type.
-   You will have to use the embedded_size & embedded_init calls to
-   create such objects, and they will probably not be resizeable (so
-   don't use the 'safe' allocation variants).  The trailing array
-   idiom is used (rather than a pointer to an array of data), because,
-   if we allow NULL to also represent an empty vector, empty vectors
-   occupy minimal space in the structure containing them.
-
-   Each operation that increases the number of active elements is
-   available in 'quick' and 'safe' variants.  The former presumes that
-   there is sufficient allocated space for the operation to succeed
-   (it dies if there is not).  The latter will reallocate the
-   vector, if needed.  Reallocation causes an exponential increase in
-   vector size.  If you know you will be adding N elements, it would
-   be more efficient to use the reserve operation before adding the
-   elements with the 'quick' operation.  This will ensure there are at
-   least as many elements as you ask for, it will exponentially
-   increase if there are too few spare slots.  If you want reserve a
-   specific number of slots, but do not want the exponential increase
-   (for instance, you know this is the last allocation), use a
-   negative number for reservation.  You can also create a vector of a
-   specific size from the get go.
-
-   You should prefer the push and pop operations, as they append and
-   remove from the end of the vector.  If you need to remove several
-   items in one go, use the truncate operation.  The insert and remove
-   operations allow you to change elements in the middle of the
-   vector.  There are two remove operations, one which preserves the
-   element ordering 'ordered_remove', and one which does not
-   'unordered_remove'.  The latter function copies the end element
-   into the removed slot, rather than invoke a memmove operation.  The
-   'lower_bound' function will determine where to place an item in the
-   array using insert that will maintain sorted order.
-
-   If you need to directly manipulate a vector, then the 'address'
-   accessor will return the address of the start of the vector.  Also
-   the 'space' predicate will tell you whether there is spare capacity
-   in the vector.  You will not normally need to use these two functions.
-
-   Vector types are defined using a DEF_VEC_{O,P,I}(TYPEDEF) macro.
-   Variables of vector type are declared using a VEC(TYPEDEF) macro.
-   The characters O, P and I indicate whether TYPEDEF is a pointer
-   (P), object (O) or integral (I) type.  Be careful to pick the
-   correct one, as you'll get an awkward and inefficient API if you
-   use the wrong one.  There is a check, which results in a
-   compile-time warning, for the P and I versions, but there is no
-   check for the O versions, as that is not possible in plain C.
-
-   An example of their use would be,
-
-   DEF_VEC_P(tree);   // non-managed tree vector.
-
-   struct my_struct {
-     VEC(tree) *v;      // A (pointer to) a vector of tree pointers.
-   };
-
-   struct my_struct *s;
-
-   if (VEC_length(tree, s->v)) { we have some contents }
-   VEC_safe_push(tree, s->v, decl); // append some decl onto the end
-   for (ix = 0; VEC_iterate(tree, s->v, ix, elt); ix++)
-     { do something with elt }
-
-*/
-
-/* Macros to invoke API calls.  A single macro works for both pointer
-   and object vectors, but the argument and return types might well be
-   different.  In each macro, T is the typedef of the vector elements.
-   Some of these macros pass the vector, V, by reference (by taking
-   its address), this is noted in the descriptions.  */
-
-/* Length of vector
-   unsigned VEC_T_length(const VEC(T) *v);
-
-   Return the number of active elements in V.  V can be NULL, in which
-   case zero is returned.  */
-
-#define VEC_length(T,V)	(VEC_OP(T,length)(V))
-
-
-/* Check if vector is empty
-   int VEC_T_empty(const VEC(T) *v);
-
-   Return nonzero if V is an empty vector (or V is NULL), zero otherwise.  */
-
-#define VEC_empty(T,V)	(VEC_length (T,V) == 0)
-
-
-/* Get the final element of the vector.
-   T VEC_T_last(VEC(T) *v); // Integer
-   T VEC_T_last(VEC(T) *v); // Pointer
-   T *VEC_T_last(VEC(T) *v); // Object
-
-   Return the final element.  V must not be empty.  */
-
-#define VEC_last(T,V)	(VEC_OP(T,last)(V VEC_ASSERT_INFO))
-
-/* Index into vector
-   T VEC_T_index(VEC(T) *v, unsigned ix); // Integer
-   T VEC_T_index(VEC(T) *v, unsigned ix); // Pointer
-   T *VEC_T_index(VEC(T) *v, unsigned ix); // Object
-
-   Return the IX'th element.  If IX must be in the domain of V.  */
-
-#define VEC_index(T,V,I) (VEC_OP(T,index)(V,I VEC_ASSERT_INFO))
-
-/* Iterate over vector
-   int VEC_T_iterate(VEC(T) *v, unsigned ix, T &ptr); // Integer
-   int VEC_T_iterate(VEC(T) *v, unsigned ix, T &ptr); // Pointer
-   int VEC_T_iterate(VEC(T) *v, unsigned ix, T *&ptr); // Object
-
-   Return iteration condition and update PTR to point to the IX'th
-   element.  At the end of iteration, sets PTR to NULL.  Use this to
-   iterate over the elements of a vector as follows,
-
-     for (ix = 0; VEC_iterate(T,v,ix,ptr); ix++)
-       continue;  */
-
-#define VEC_iterate(T,V,I,P)	(VEC_OP(T,iterate)(V,I,&(P)))
-
-/* Allocate new vector.
-   VEC(T,A) *VEC_T_alloc(int reserve);
-
-   Allocate a new vector with space for RESERVE objects.  If RESERVE
-   is zero, NO vector is created.  */
-
-#define VEC_alloc(T,N)	(VEC_OP(T,alloc)(N))
-
-/* Free a vector.
-   void VEC_T_free(VEC(T,A) *&);
-
-   Free a vector and set it to NULL.  */
-
-#define VEC_free(T,V)	(VEC_OP(T,free)(&V))
-
-/* A cleanup function for a vector.
-   void VEC_T_cleanup(void *);
-   
-   Clean up a vector.  */
-
-#define VEC_cleanup(T)	(VEC_OP(T,cleanup))
-
-/* Use these to determine the required size and initialization of a
-   vector embedded within another structure (as the final member).
-
-   size_t VEC_T_embedded_size(int reserve);
-   void VEC_T_embedded_init(VEC(T) *v, int reserve);
-
-   These allow the caller to perform the memory allocation.  */
-
-#define VEC_embedded_size(T,N)	 (VEC_OP(T,embedded_size)(N))
-#define VEC_embedded_init(T,O,N) (VEC_OP(T,embedded_init)(VEC_BASE(O),N))
-
-/* Copy a vector.
-   VEC(T,A) *VEC_T_copy(VEC(T) *);
-
-   Copy the live elements of a vector into a new vector.  The new and
-   old vectors need not be allocated by the same mechanism.  */
-
-#define VEC_copy(T,V) (VEC_OP(T,copy)(V))
-
-/* Determine if a vector has additional capacity.
-
-   int VEC_T_space (VEC(T) *v,int reserve)
-
-   If V has space for RESERVE additional entries, return nonzero.  You
-   usually only need to use this if you are doing your own vector
-   reallocation, for instance on an embedded vector.  This returns
-   nonzero in exactly the same circumstances that VEC_T_reserve
-   will.  */
-
-#define VEC_space(T,V,R) (VEC_OP(T,space)(V,R VEC_ASSERT_INFO))
-
-/* Reserve space.
-   int VEC_T_reserve(VEC(T,A) *&v, int reserve);
-
-   Ensure that V has at least abs(RESERVE) slots available.  The
-   signedness of RESERVE determines the reallocation behavior.  A
-   negative value will not create additional headroom beyond that
-   requested.  A positive value will create additional headroom.  Note
-   this can cause V to be reallocated.  Returns nonzero iff
-   reallocation actually occurred.  */
-
-#define VEC_reserve(T,V,R) (VEC_OP(T,reserve)(&(V),R VEC_ASSERT_INFO))
-
-/* Push object with no reallocation
-   T *VEC_T_quick_push (VEC(T) *v, T obj); // Integer
-   T *VEC_T_quick_push (VEC(T) *v, T obj); // Pointer
-   T *VEC_T_quick_push (VEC(T) *v, T *obj); // Object
-
-   Push a new element onto the end, returns a pointer to the slot
-   filled in.  For object vectors, the new value can be NULL, in which
-   case NO initialization is performed.  There must
-   be sufficient space in the vector.  */
-
-#define VEC_quick_push(T,V,O) (VEC_OP(T,quick_push)(V,O VEC_ASSERT_INFO))
-
-/* Push object with reallocation
-   T *VEC_T_safe_push (VEC(T,A) *&v, T obj); // Integer
-   T *VEC_T_safe_push (VEC(T,A) *&v, T obj); // Pointer
-   T *VEC_T_safe_push (VEC(T,A) *&v, T *obj); // Object
-
-   Push a new element onto the end, returns a pointer to the slot
-   filled in.  For object vectors, the new value can be NULL, in which
-   case NO initialization is performed.  Reallocates V, if needed.  */
-
-#define VEC_safe_push(T,V,O) (VEC_OP(T,safe_push)(&(V),O VEC_ASSERT_INFO))
-
-/* Pop element off end
-   T VEC_T_pop (VEC(T) *v);		// Integer
-   T VEC_T_pop (VEC(T) *v);		// Pointer
-   void VEC_T_pop (VEC(T) *v);		// Object
-
-   Pop the last element off the end.  Returns the element popped, for
-   pointer vectors.  */
-
-#define VEC_pop(T,V)	(VEC_OP(T,pop)(V VEC_ASSERT_INFO))
-
-/* Truncate to specific length
-   void VEC_T_truncate (VEC(T) *v, unsigned len);
-
-   Set the length as specified.  The new length must be less than or
-   equal to the current length.  This is an O(1) operation.  */
-
-#define VEC_truncate(T,V,I)		\
-	(VEC_OP(T,truncate)(V,I VEC_ASSERT_INFO))
-
-/* Grow to a specific length.
-   void VEC_T_safe_grow (VEC(T,A) *&v, int len);
-
-   Grow the vector to a specific length.  The LEN must be as
-   long or longer than the current length.  The new elements are
-   uninitialized.  */
-
-#define VEC_safe_grow(T,V,I)		\
-	(VEC_OP(T,safe_grow)(&(V),I VEC_ASSERT_INFO))
-
-/* Replace element
-   T VEC_T_replace (VEC(T) *v, unsigned ix, T val); // Integer
-   T VEC_T_replace (VEC(T) *v, unsigned ix, T val); // Pointer
-   T *VEC_T_replace (VEC(T) *v, unsigned ix, T *val);  // Object
-
-   Replace the IXth element of V with a new value, VAL.  For pointer
-   vectors returns the original value.  For object vectors returns a
-   pointer to the new value.  For object vectors the new value can be
-   NULL, in which case no overwriting of the slot is actually
-   performed.  */
-
-#define VEC_replace(T,V,I,O) (VEC_OP(T,replace)(V,I,O VEC_ASSERT_INFO))
-
-/* Insert object with no reallocation
-   T *VEC_T_quick_insert (VEC(T) *v, unsigned ix, T val); // Integer
-   T *VEC_T_quick_insert (VEC(T) *v, unsigned ix, T val); // Pointer
-   T *VEC_T_quick_insert (VEC(T) *v, unsigned ix, T *val); // Object
-
-   Insert an element, VAL, at the IXth position of V.  Return a pointer
-   to the slot created.  For vectors of object, the new value can be
-   NULL, in which case no initialization of the inserted slot takes
-   place.  There must be sufficient space.  */
-
-#define VEC_quick_insert(T,V,I,O) \
-	(VEC_OP(T,quick_insert)(V,I,O VEC_ASSERT_INFO))
-
-/* Insert object with reallocation
-   T *VEC_T_safe_insert (VEC(T,A) *&v, unsigned ix, T val); // Integer
-   T *VEC_T_safe_insert (VEC(T,A) *&v, unsigned ix, T val); // Pointer
-   T *VEC_T_safe_insert (VEC(T,A) *&v, unsigned ix, T *val); // Object
-
-   Insert an element, VAL, at the IXth position of V.  Return a pointer
-   to the slot created.  For vectors of object, the new value can be
-   NULL, in which case no initialization of the inserted slot takes
-   place.  Reallocate V, if necessary.  */
-
-#define VEC_safe_insert(T,V,I,O)	\
-	(VEC_OP(T,safe_insert)(&(V),I,O VEC_ASSERT_INFO))
-
-/* Remove element retaining order
-   T VEC_T_ordered_remove (VEC(T) *v, unsigned ix); // Integer
-   T VEC_T_ordered_remove (VEC(T) *v, unsigned ix); // Pointer
-   void VEC_T_ordered_remove (VEC(T) *v, unsigned ix); // Object
-
-   Remove an element from the IXth position of V.  Ordering of
-   remaining elements is preserved.  For pointer vectors returns the
-   removed object.  This is an O(N) operation due to a memmove.  */
-
-#define VEC_ordered_remove(T,V,I)	\
-	(VEC_OP(T,ordered_remove)(V,I VEC_ASSERT_INFO))
-
-/* Remove element destroying order
-   T VEC_T_unordered_remove (VEC(T) *v, unsigned ix); // Integer
-   T VEC_T_unordered_remove (VEC(T) *v, unsigned ix); // Pointer
-   void VEC_T_unordered_remove (VEC(T) *v, unsigned ix); // Object
-
-   Remove an element from the IXth position of V.  Ordering of
-   remaining elements is destroyed.  For pointer vectors returns the
-   removed object.  This is an O(1) operation.  */
-
-#define VEC_unordered_remove(T,V,I)	\
-	(VEC_OP(T,unordered_remove)(V,I VEC_ASSERT_INFO))
-
-/* Remove a block of elements
-   void VEC_T_block_remove (VEC(T) *v, unsigned ix, unsigned len);
-
-   Remove LEN elements starting at the IXth.  Ordering is retained.
-   This is an O(N) operation due to memmove.  */
-
-#define VEC_block_remove(T,V,I,L)	\
-	(VEC_OP(T,block_remove)(V,I,L VEC_ASSERT_INFO))
-
-/* Get the address of the array of elements
-   T *VEC_T_address (VEC(T) v)
-
-   If you need to directly manipulate the array (for instance, you
-   want to feed it to qsort), use this accessor.  */
-
-#define VEC_address(T,V)		(VEC_OP(T,address)(V))
-
-/* Find the first index in the vector not less than the object.
-   unsigned VEC_T_lower_bound (VEC(T) *v, const T val,
-                               int (*lessthan) (const T, const T)); // Integer
-   unsigned VEC_T_lower_bound (VEC(T) *v, const T val,
-                               int (*lessthan) (const T, const T)); // Pointer
-   unsigned VEC_T_lower_bound (VEC(T) *v, const T *val,
-                               int (*lessthan) (const T*, const T*)); // Object
-
-   Find the first position in which VAL could be inserted without
-   changing the ordering of V.  LESSTHAN is a function that returns
-   true if the first argument is strictly less than the second.  */
-
-#define VEC_lower_bound(T,V,O,LT)    \
-       (VEC_OP(T,lower_bound)(V,O,LT VEC_ASSERT_INFO))
-
-/* Reallocate an array of elements with prefix.  */
-extern void *vec_p_reserve (void *, int);
-extern void *vec_o_reserve (void *, int, size_t, size_t);
-#define vec_free_(V) xfree (V)
-
-#define VEC_ASSERT_INFO ,__FILE__,__LINE__
-#define VEC_ASSERT_DECL ,const char *file_,unsigned line_
-#define VEC_ASSERT_PASS ,file_,line_
-#define vec_assert(expr, op) \
-  ((void)((expr) ? 0 : (gdb_assert_fail (op, file_, line_, \
-					 ASSERT_FUNCTION), 0)))
-
-#define VEC(T) VEC_##T
-#define VEC_OP(T,OP) VEC_##T##_##OP
-
-#define VEC_T(T)							  \
-typedef struct VEC(T)							  \
-{									  \
-  unsigned num;								  \
-  unsigned alloc;							  \
-  T vec[1];								  \
-} VEC(T)
-
-/* Vector of integer-like object.  */
-#define DEF_VEC_I(T)							  \
-static inline void VEC_OP (T,must_be_integral_type) (void)		  \
-{									  \
-  (void)~(T)0;								  \
-}									  \
-									  \
-VEC_T(T);								  \
-DEF_VEC_FUNC_P(T)							  \
-DEF_VEC_ALLOC_FUNC_I(T)							  \
-struct vec_swallow_trailing_semi
-
-/* Vector of pointer to object.  */
-#define DEF_VEC_P(T)							  \
-static inline void VEC_OP (T,must_be_pointer_type) (void)		  \
-{									  \
-  (void)((T)1 == (void *)1);						  \
-}									  \
-									  \
-VEC_T(T);								  \
-DEF_VEC_FUNC_P(T)							  \
-DEF_VEC_ALLOC_FUNC_P(T)							  \
-struct vec_swallow_trailing_semi
-
-/* Vector of object.  */
-#define DEF_VEC_O(T)							  \
-VEC_T(T);								  \
-DEF_VEC_FUNC_O(T)							  \
-DEF_VEC_ALLOC_FUNC_O(T)							  \
-struct vec_swallow_trailing_semi
-
-#define DEF_VEC_ALLOC_FUNC_I(T)						  \
-static inline VEC(T) *VEC_OP (T,alloc)					  \
-     (int alloc_)							  \
-{									  \
-  /* We must request exact size allocation, hence the negation.  */	  \
-  return (VEC(T) *) vec_o_reserve (NULL, -alloc_,			  \
-                                   offsetof (VEC(T),vec), sizeof (T));	  \
-}									  \
-									  \
-static inline VEC(T) *VEC_OP (T,copy) (VEC(T) *vec_)			  \
-{									  \
-  size_t len_ = vec_ ? vec_->num : 0;					  \
-  VEC (T) *new_vec_ = NULL;						  \
-									  \
-  if (len_)								  \
-    {									  \
-      /* We must request exact size allocation, hence the negation.  */	  \
-      new_vec_ = (VEC (T) *)						  \
-	vec_o_reserve (NULL, -len_, offsetof (VEC(T),vec), sizeof (T));	  \
-									  \
-      new_vec_->num = len_;						  \
-      memcpy (new_vec_->vec, vec_->vec, sizeof (T) * len_);		  \
-    }									  \
-  return new_vec_;							  \
-}									  \
-									  \
-static inline void VEC_OP (T,free)					  \
-     (VEC(T) **vec_)							  \
-{									  \
-  if (*vec_)								  \
-    vec_free_ (*vec_);							  \
-  *vec_ = NULL;								  \
-}									  \
-									  \
-static inline void VEC_OP (T,cleanup)					  \
-     (void *arg_)							  \
-{									  \
-  VEC(T) **vec_ = arg_;							  \
-  if (*vec_)								  \
-    vec_free_ (*vec_);							  \
-  *vec_ = NULL;								  \
-}									  \
-									  \
-static inline int VEC_OP (T,reserve)					  \
-     (VEC(T) **vec_, int alloc_ VEC_ASSERT_DECL)			  \
-{									  \
-  int extend = !VEC_OP (T,space)					  \
-	(*vec_, alloc_ < 0 ? -alloc_ : alloc_ VEC_ASSERT_PASS);		  \
-									  \
-  if (extend)								  \
-    *vec_ = (VEC(T) *) vec_o_reserve (*vec_, alloc_,			  \
-				      offsetof (VEC(T),vec), sizeof (T)); \
-									  \
-  return extend;							  \
-}									  \
-									  \
-static inline void VEC_OP (T,safe_grow)					  \
-     (VEC(T) **vec_, int size_ VEC_ASSERT_DECL)				  \
-{									  \
-  vec_assert (size_ >= 0 && VEC_OP(T,length) (*vec_) <= (unsigned)size_,  \
-	"safe_grow");							  \
-  VEC_OP (T,reserve) (vec_, (int)(*vec_ ? (*vec_)->num : 0) - size_	  \
-			VEC_ASSERT_PASS);				  \
-  (*vec_)->num = size_;							  \
-}									  \
-									  \
-static inline T *VEC_OP (T,safe_push)					  \
-     (VEC(T) **vec_, const T obj_ VEC_ASSERT_DECL)			  \
-{									  \
-  VEC_OP (T,reserve) (vec_, 1 VEC_ASSERT_PASS);				  \
-									  \
-  return VEC_OP (T,quick_push) (*vec_, obj_ VEC_ASSERT_PASS);		  \
-}									  \
-									  \
-static inline T *VEC_OP (T,safe_insert)					  \
-     (VEC(T) **vec_, unsigned ix_, const T obj_ VEC_ASSERT_DECL)	  \
-{									  \
-  VEC_OP (T,reserve) (vec_, 1 VEC_ASSERT_PASS);				  \
-									  \
-  return VEC_OP (T,quick_insert) (*vec_, ix_, obj_ VEC_ASSERT_PASS);	  \
-}
-
-#define DEF_VEC_FUNC_P(T)						  \
-static inline unsigned VEC_OP (T,length) (const VEC(T) *vec_)		  \
-{									  \
-  return vec_ ? vec_->num : 0;						  \
-}									  \
-									  \
-static inline T VEC_OP (T,last)						  \
-	(const VEC(T) *vec_ VEC_ASSERT_DECL)				  \
-{									  \
-  vec_assert (vec_ && vec_->num, "last");				  \
-									  \
-  return vec_->vec[vec_->num - 1];					  \
-}									  \
-									  \
-static inline T VEC_OP (T,index)					  \
-     (const VEC(T) *vec_, unsigned ix_ VEC_ASSERT_DECL)			  \
-{									  \
-  vec_assert (vec_ && ix_ < vec_->num, "index");			  \
-									  \
-  return vec_->vec[ix_];						  \
-}									  \
-									  \
-static inline int VEC_OP (T,iterate)					  \
-     (const VEC(T) *vec_, unsigned ix_, T *ptr)				  \
-{									  \
-  if (vec_ && ix_ < vec_->num)						  \
-    {									  \
-      *ptr = vec_->vec[ix_];						  \
-      return 1;								  \
-    }									  \
-  else									  \
-    {									  \
-      *ptr = 0;								  \
-      return 0;								  \
-    }									  \
-}									  \
-									  \
-static inline size_t VEC_OP (T,embedded_size)				  \
-     (int alloc_)							  \
-{									  \
-  return offsetof (VEC(T),vec) + alloc_ * sizeof(T);			  \
-}									  \
-									  \
-static inline void VEC_OP (T,embedded_init)				  \
-     (VEC(T) *vec_, int alloc_)						  \
-{									  \
-  vec_->num = 0;							  \
-  vec_->alloc = alloc_;							  \
-}									  \
-									  \
-static inline int VEC_OP (T,space)					  \
-     (VEC(T) *vec_, int alloc_ VEC_ASSERT_DECL)				  \
-{									  \
-  vec_assert (alloc_ >= 0, "space");					  \
-  return vec_ ? vec_->alloc - vec_->num >= (unsigned)alloc_ : !alloc_;	  \
-}									  \
-									  \
-static inline T *VEC_OP (T,quick_push)					  \
-     (VEC(T) *vec_, T obj_ VEC_ASSERT_DECL)				  \
-{									  \
-  T *slot_;								  \
-									  \
-  vec_assert (vec_->num < vec_->alloc, "quick_push");			  \
-  slot_ = &vec_->vec[vec_->num++];					  \
-  *slot_ = obj_;							  \
-									  \
-  return slot_;								  \
-}									  \
-									  \
-static inline T VEC_OP (T,pop) (VEC(T) *vec_ VEC_ASSERT_DECL)		  \
-{									  \
-  T obj_;								  \
-									  \
-  vec_assert (vec_->num, "pop");					  \
-  obj_ = vec_->vec[--vec_->num];					  \
-									  \
-  return obj_;								  \
-}									  \
-									  \
-static inline void VEC_OP (T,truncate)					  \
-     (VEC(T) *vec_, unsigned size_ VEC_ASSERT_DECL)			  \
-{									  \
-  vec_assert (vec_ ? vec_->num >= size_ : !size_, "truncate");		  \
-  if (vec_)								  \
-    vec_->num = size_;							  \
-}									  \
-									  \
-static inline T VEC_OP (T,replace)					  \
-     (VEC(T) *vec_, unsigned ix_, T obj_ VEC_ASSERT_DECL)		  \
-{									  \
-  T old_obj_;								  \
-									  \
-  vec_assert (ix_ < vec_->num, "replace");				  \
-  old_obj_ = vec_->vec[ix_];						  \
-  vec_->vec[ix_] = obj_;						  \
-									  \
-  return old_obj_;							  \
-}									  \
-									  \
-static inline T *VEC_OP (T,quick_insert)				  \
-     (VEC(T) *vec_, unsigned ix_, T obj_ VEC_ASSERT_DECL)		  \
-{									  \
-  T *slot_;								  \
-									  \
-  vec_assert (vec_->num < vec_->alloc && ix_ <= vec_->num, "quick_insert"); \
-  slot_ = &vec_->vec[ix_];						  \
-  memmove (slot_ + 1, slot_, (vec_->num++ - ix_) * sizeof (T));		  \
-  *slot_ = obj_;							  \
-									  \
-  return slot_;								  \
-}									  \
-									  \
-static inline T VEC_OP (T,ordered_remove)				  \
-     (VEC(T) *vec_, unsigned ix_ VEC_ASSERT_DECL)			  \
-{									  \
-  T *slot_;								  \
-  T obj_;								  \
-									  \
-  vec_assert (ix_ < vec_->num, "ordered_remove");			  \
-  slot_ = &vec_->vec[ix_];						  \
-  obj_ = *slot_;							  \
-  memmove (slot_, slot_ + 1, (--vec_->num - ix_) * sizeof (T));		  \
-									  \
-  return obj_;								  \
-}									  \
-									  \
-static inline T VEC_OP (T,unordered_remove)				  \
-     (VEC(T) *vec_, unsigned ix_ VEC_ASSERT_DECL)			  \
-{									  \
-  T *slot_;								  \
-  T obj_;								  \
-									  \
-  vec_assert (ix_ < vec_->num, "unordered_remove");			  \
-  slot_ = &vec_->vec[ix_];						  \
-  obj_ = *slot_;							  \
-  *slot_ = vec_->vec[--vec_->num];					  \
-									  \
-  return obj_;								  \
-}									  \
-									  \
-static inline void VEC_OP (T,block_remove)				  \
-     (VEC(T) *vec_, unsigned ix_, unsigned len_ VEC_ASSERT_DECL)	  \
-{									  \
-  T *slot_;								  \
-									  \
-  vec_assert (ix_ + len_ <= vec_->num, "block_remove");			  \
-  slot_ = &vec_->vec[ix_];						  \
-  vec_->num -= len_;							  \
-  memmove (slot_, slot_ + len_, (vec_->num - ix_) * sizeof (T));	  \
-}									  \
-									  \
-static inline T *VEC_OP (T,address)					  \
-     (VEC(T) *vec_)							  \
-{									  \
-  return vec_ ? vec_->vec : 0;						  \
-}									  \
-									  \
-static inline unsigned VEC_OP (T,lower_bound)				  \
-     (VEC(T) *vec_, const T obj_,					  \
-      int (*lessthan_)(const T, const T) VEC_ASSERT_DECL)		  \
-{									  \
-   unsigned int len_ = VEC_OP (T, length) (vec_);			  \
-   unsigned int half_, middle_;						  \
-   unsigned int first_ = 0;						  \
-   while (len_ > 0)							  \
-     {									  \
-        T middle_elem_;							  \
-        half_ = len_ >> 1;						  \
-        middle_ = first_;						  \
-        middle_ += half_;						  \
-        middle_elem_ = VEC_OP (T,index) (vec_, middle_ VEC_ASSERT_PASS);  \
-        if (lessthan_ (middle_elem_, obj_))				  \
-          {								  \
-             first_ = middle_;						  \
-             ++first_;							  \
-             len_ = len_ - half_ - 1;					  \
-          }								  \
-        else								  \
-          len_ = half_;							  \
-     }									  \
-   return first_;							  \
-}
-
-#define DEF_VEC_ALLOC_FUNC_P(T)						  \
-static inline VEC(T) *VEC_OP (T,alloc)					  \
-     (int alloc_)							  \
-{									  \
-  /* We must request exact size allocation, hence the negation.  */	  \
-  return (VEC(T) *) vec_p_reserve (NULL, -alloc_);			  \
-}									  \
-									  \
-static inline void VEC_OP (T,free)					  \
-     (VEC(T) **vec_)							  \
-{									  \
-  if (*vec_)								  \
-    vec_free_ (*vec_);							  \
-  *vec_ = NULL;								  \
-}									  \
-									  \
-static inline void VEC_OP (T,cleanup)					  \
-     (void *arg_)							  \
-{									  \
-  VEC(T) **vec_ = arg_;							  \
-  if (*vec_)								  \
-    vec_free_ (*vec_);							  \
-  *vec_ = NULL;								  \
-}									  \
-									  \
-static inline VEC(T) *VEC_OP (T,copy) (VEC(T) *vec_)			  \
-{									  \
-  size_t len_ = vec_ ? vec_->num : 0;					  \
-  VEC (T) *new_vec_ = NULL;						  \
-									  \
-  if (len_)								  \
-    {									  \
-      /* We must request exact size allocation, hence the negation.  */	  \
-      new_vec_ = (VEC (T) *)(vec_p_reserve (NULL, -len_));		  \
-									  \
-      new_vec_->num = len_;						  \
-      memcpy (new_vec_->vec, vec_->vec, sizeof (T) * len_);		  \
-    }									  \
-  return new_vec_;							  \
-}									  \
-									  \
-static inline int VEC_OP (T,reserve)					  \
-     (VEC(T) **vec_, int alloc_ VEC_ASSERT_DECL)			  \
-{									  \
-  int extend = !VEC_OP (T,space)					  \
-	(*vec_, alloc_ < 0 ? -alloc_ : alloc_ VEC_ASSERT_PASS);		  \
-									  \
-  if (extend)								  \
-    *vec_ = (VEC(T) *) vec_p_reserve (*vec_, alloc_);			  \
-									  \
-  return extend;							  \
-}									  \
-									  \
-static inline void VEC_OP (T,safe_grow)					  \
-     (VEC(T) **vec_, int size_ VEC_ASSERT_DECL)				  \
-{									  \
-  vec_assert (size_ >= 0 && VEC_OP(T,length) (*vec_) <= (unsigned)size_,  \
-	"safe_grow");							  \
-  VEC_OP (T,reserve)							  \
-	(vec_, (int)(*vec_ ? (*vec_)->num : 0) - size_ VEC_ASSERT_PASS);  \
-  (*vec_)->num = size_;							  \
-}									  \
-									  \
-static inline T *VEC_OP (T,safe_push)					  \
-     (VEC(T) **vec_, T obj_ VEC_ASSERT_DECL)				  \
-{									  \
-  VEC_OP (T,reserve) (vec_, 1 VEC_ASSERT_PASS);				  \
-									  \
-  return VEC_OP (T,quick_push) (*vec_, obj_ VEC_ASSERT_PASS);		  \
-}									  \
-									  \
-static inline T *VEC_OP (T,safe_insert)					  \
-     (VEC(T) **vec_, unsigned ix_, T obj_ VEC_ASSERT_DECL)		  \
-{									  \
-  VEC_OP (T,reserve) (vec_, 1 VEC_ASSERT_PASS);				  \
-									  \
-  return VEC_OP (T,quick_insert) (*vec_, ix_, obj_ VEC_ASSERT_PASS);	  \
-}
-
-#define DEF_VEC_FUNC_O(T)						  \
-static inline unsigned VEC_OP (T,length) (const VEC(T) *vec_)		  \
-{									  \
-  return vec_ ? vec_->num : 0;						  \
-}									  \
-									  \
-static inline T *VEC_OP (T,last) (VEC(T) *vec_ VEC_ASSERT_DECL)		  \
-{									  \
-  vec_assert (vec_ && vec_->num, "last");				  \
-									  \
-  return &vec_->vec[vec_->num - 1];					  \
-}									  \
-									  \
-static inline T *VEC_OP (T,index)					  \
-     (VEC(T) *vec_, unsigned ix_ VEC_ASSERT_DECL)			  \
-{									  \
-  vec_assert (vec_ && ix_ < vec_->num, "index");			  \
-									  \
-  return &vec_->vec[ix_];						  \
-}									  \
-									  \
-static inline int VEC_OP (T,iterate)					  \
-     (VEC(T) *vec_, unsigned ix_, T **ptr)				  \
-{									  \
-  if (vec_ && ix_ < vec_->num)						  \
-    {									  \
-      *ptr = &vec_->vec[ix_];						  \
-      return 1;								  \
-    }									  \
-  else									  \
-    {									  \
-      *ptr = 0;								  \
-      return 0;								  \
-    }									  \
-}									  \
-									  \
-static inline size_t VEC_OP (T,embedded_size)				  \
-     (int alloc_)							  \
-{									  \
-  return offsetof (VEC(T),vec) + alloc_ * sizeof(T);			  \
-}									  \
-									  \
-static inline void VEC_OP (T,embedded_init)				  \
-     (VEC(T) *vec_, int alloc_)						  \
-{									  \
-  vec_->num = 0;							  \
-  vec_->alloc = alloc_;							  \
-}									  \
-									  \
-static inline int VEC_OP (T,space)					  \
-     (VEC(T) *vec_, int alloc_ VEC_ASSERT_DECL)				  \
-{									  \
-  vec_assert (alloc_ >= 0, "space");					  \
-  return vec_ ? vec_->alloc - vec_->num >= (unsigned)alloc_ : !alloc_;	  \
-}									  \
-									  \
-static inline T *VEC_OP (T,quick_push)					  \
-     (VEC(T) *vec_, const T *obj_ VEC_ASSERT_DECL)			  \
-{									  \
-  T *slot_;								  \
-									  \
-  vec_assert (vec_->num < vec_->alloc, "quick_push");			  \
-  slot_ = &vec_->vec[vec_->num++];					  \
-  if (obj_)								  \
-    *slot_ = *obj_;							  \
-									  \
-  return slot_;								  \
-}									  \
-									  \
-static inline void VEC_OP (T,pop) (VEC(T) *vec_ VEC_ASSERT_DECL)	  \
-{									  \
-  vec_assert (vec_->num, "pop");					  \
-  --vec_->num;								  \
-}									  \
-									  \
-static inline void VEC_OP (T,truncate)					  \
-     (VEC(T) *vec_, unsigned size_ VEC_ASSERT_DECL)			  \
-{									  \
-  vec_assert (vec_ ? vec_->num >= size_ : !size_, "truncate");		  \
-  if (vec_)								  \
-    vec_->num = size_;							  \
-}									  \
-									  \
-static inline T *VEC_OP (T,replace)					  \
-     (VEC(T) *vec_, unsigned ix_, const T *obj_ VEC_ASSERT_DECL)	  \
-{									  \
-  T *slot_;								  \
-									  \
-  vec_assert (ix_ < vec_->num, "replace");				  \
-  slot_ = &vec_->vec[ix_];						  \
-  if (obj_)								  \
-    *slot_ = *obj_;							  \
-									  \
-  return slot_;								  \
-}									  \
-									  \
-static inline T *VEC_OP (T,quick_insert)				  \
-     (VEC(T) *vec_, unsigned ix_, const T *obj_ VEC_ASSERT_DECL)	  \
-{									  \
-  T *slot_;								  \
-									  \
-  vec_assert (vec_->num < vec_->alloc && ix_ <= vec_->num, "quick_insert"); \
-  slot_ = &vec_->vec[ix_];						  \
-  memmove (slot_ + 1, slot_, (vec_->num++ - ix_) * sizeof (T));		  \
-  if (obj_)								  \
-    *slot_ = *obj_;							  \
-									  \
-  return slot_;								  \
-}									  \
-									  \
-static inline void VEC_OP (T,ordered_remove)				  \
-     (VEC(T) *vec_, unsigned ix_ VEC_ASSERT_DECL)			  \
-{									  \
-  T *slot_;								  \
-									  \
-  vec_assert (ix_ < vec_->num, "ordered_remove");			  \
-  slot_ = &vec_->vec[ix_];						  \
-  memmove (slot_, slot_ + 1, (--vec_->num - ix_) * sizeof (T));		  \
-}									  \
-									  \
-static inline void VEC_OP (T,unordered_remove)				  \
-     (VEC(T) *vec_, unsigned ix_ VEC_ASSERT_DECL)			  \
-{									  \
-  vec_assert (ix_ < vec_->num, "unordered_remove");			  \
-  vec_->vec[ix_] = vec_->vec[--vec_->num];				  \
-}									  \
-									  \
-static inline void VEC_OP (T,block_remove)				  \
-     (VEC(T) *vec_, unsigned ix_, unsigned len_ VEC_ASSERT_DECL)	  \
-{									  \
-  T *slot_;								  \
-									  \
-  vec_assert (ix_ + len_ <= vec_->num, "block_remove");			  \
-  slot_ = &vec_->vec[ix_];						  \
-  vec_->num -= len_;							  \
-  memmove (slot_, slot_ + len_, (vec_->num - ix_) * sizeof (T));	  \
-}									  \
-									  \
-static inline T *VEC_OP (T,address)					  \
-     (VEC(T) *vec_)							  \
-{									  \
-  return vec_ ? vec_->vec : 0;						  \
-}									  \
-									  \
-static inline unsigned VEC_OP (T,lower_bound)				  \
-     (VEC(T) *vec_, const T *obj_,					  \
-      int (*lessthan_)(const T *, const T *) VEC_ASSERT_DECL)		  \
-{									  \
-   unsigned int len_ = VEC_OP (T, length) (vec_);			  \
-   unsigned int half_, middle_;						  \
-   unsigned int first_ = 0;						  \
-   while (len_ > 0)							  \
-     {									  \
-        T *middle_elem_;						  \
-        half_ = len_ >> 1;						  \
-        middle_ = first_;						  \
-        middle_ += half_;						  \
-        middle_elem_ = VEC_OP (T,index) (vec_, middle_ VEC_ASSERT_PASS);  \
-        if (lessthan_ (middle_elem_, obj_))				  \
-          {								  \
-             first_ = middle_;						  \
-             ++first_;							  \
-             len_ = len_ - half_ - 1;					  \
-          }								  \
-        else								  \
-          len_ = half_;							  \
-     }									  \
-   return first_;							  \
-}
-
-#define DEF_VEC_ALLOC_FUNC_O(T)						  \
-static inline VEC(T) *VEC_OP (T,alloc)					  \
-     (int alloc_)							  \
-{									  \
-  /* We must request exact size allocation, hence the negation.  */	  \
-  return (VEC(T) *) vec_o_reserve (NULL, -alloc_,			  \
-                                   offsetof (VEC(T),vec), sizeof (T));	  \
-}									  \
-									  \
-static inline VEC(T) *VEC_OP (T,copy) (VEC(T) *vec_)			  \
-{									  \
-  size_t len_ = vec_ ? vec_->num : 0;					  \
-  VEC (T) *new_vec_ = NULL;						  \
-									  \
-  if (len_)								  \
-    {									  \
-      /* We must request exact size allocation, hence the negation.  */	  \
-      new_vec_ = (VEC (T) *)						  \
-	vec_o_reserve  (NULL, -len_, offsetof (VEC(T),vec), sizeof (T));  \
-									  \
-      new_vec_->num = len_;						  \
-      memcpy (new_vec_->vec, vec_->vec, sizeof (T) * len_);		  \
-    }									  \
-  return new_vec_;							  \
-}									  \
-									  \
-static inline void VEC_OP (T,free)					  \
-     (VEC(T) **vec_)							  \
-{									  \
-  if (*vec_)								  \
-    vec_free_ (*vec_);							  \
-  *vec_ = NULL;								  \
-}									  \
-									  \
-static inline void VEC_OP (T,cleanup)					  \
-     (void *arg_)							  \
-{									  \
-  VEC(T) **vec_ = arg_;							  \
-  if (*vec_)								  \
-    vec_free_ (*vec_);							  \
-  *vec_ = NULL;								  \
-}									  \
-									  \
-static inline int VEC_OP (T,reserve)					  \
-     (VEC(T) **vec_, int alloc_ VEC_ASSERT_DECL)			  \
-{									  \
-  int extend = !VEC_OP (T,space) (*vec_, alloc_ < 0 ? -alloc_ : alloc_	  \
-				  VEC_ASSERT_PASS);			  \
-									  \
-  if (extend)								  \
-    *vec_ = (VEC(T) *)							  \
-	vec_o_reserve (*vec_, alloc_, offsetof (VEC(T),vec), sizeof (T)); \
-									  \
-  return extend;							  \
-}									  \
-									  \
-static inline void VEC_OP (T,safe_grow)					  \
-     (VEC(T) **vec_, int size_ VEC_ASSERT_DECL)				  \
-{									  \
-  vec_assert (size_ >= 0 && VEC_OP(T,length) (*vec_) <= (unsigned)size_,  \
-	"safe_grow");							  \
-  VEC_OP (T,reserve)							  \
-	(vec_, (int)(*vec_ ? (*vec_)->num : 0) - size_ VEC_ASSERT_PASS);  \
-  (*vec_)->num = size_;							  \
-}									  \
-									  \
-static inline T *VEC_OP (T,safe_push)					  \
-     (VEC(T) **vec_, const T *obj_ VEC_ASSERT_DECL)			  \
-{									  \
-  VEC_OP (T,reserve) (vec_, 1 VEC_ASSERT_PASS);				  \
-									  \
-  return VEC_OP (T,quick_push) (*vec_, obj_ VEC_ASSERT_PASS);		  \
-}									  \
-									  \
-static inline T *VEC_OP (T,safe_insert)					  \
-     (VEC(T) **vec_, unsigned ix_, const T *obj_ VEC_ASSERT_DECL)	  \
-{									  \
-  VEC_OP (T,reserve) (vec_, 1 VEC_ASSERT_PASS);				  \
-									  \
-  return VEC_OP (T,quick_insert) (*vec_, ix_, obj_ VEC_ASSERT_PASS);	  \
-}
-
-#endif /* GDB_VEC_H */
diff --git a/gdb/version.in b/gdb/version.in
index 815da58..c382960 100644
--- a/gdb/version.in
+++ b/gdb/version.in
@@ -1 +1 @@
-7.4.1
+7.5
diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c
index 2afa26e..f16588a 100644
--- a/gdb/windows-nat.c
+++ b/gdb/windows-nat.c
@@ -172,9 +172,11 @@ static void windows_kill_inferior (struct target_ops *);
 
 static void cygwin_set_dr (int i, CORE_ADDR addr);
 static void cygwin_set_dr7 (unsigned long val);
+static CORE_ADDR cygwin_get_dr (int i);
 static unsigned long cygwin_get_dr6 (void);
+static unsigned long cygwin_get_dr7 (void);
 
-static enum target_signal last_sig = TARGET_SIGNAL_0;
+static enum gdb_signal last_sig = GDB_SIGNAL_0;
 /* Set if a signal was received from the debugged process.  */
 
 /* Thread information structure used to track information that is
@@ -241,24 +243,28 @@ static int useshell = 0;		/* use shell for subprocesses */
 
 static const int *mappings;
 
+/* The function to use in order to determine whether a register is
+   a segment register or not.  */
+static segment_register_p_ftype *segment_register_p;
+
 /* This vector maps the target's idea of an exception (extracted
    from the DEBUG_EVENT structure) to GDB's idea.  */
 
 struct xlate_exception
   {
     int them;
-    enum target_signal us;
+    enum gdb_signal us;
   };
 
 static const struct xlate_exception
   xlate[] =
 {
-  {EXCEPTION_ACCESS_VIOLATION, TARGET_SIGNAL_SEGV},
-  {STATUS_STACK_OVERFLOW, TARGET_SIGNAL_SEGV},
-  {EXCEPTION_BREAKPOINT, TARGET_SIGNAL_TRAP},
-  {DBG_CONTROL_C, TARGET_SIGNAL_INT},
-  {EXCEPTION_SINGLE_STEP, TARGET_SIGNAL_TRAP},
-  {STATUS_FLOAT_DIVIDE_BY_ZERO, TARGET_SIGNAL_FPE},
+  {EXCEPTION_ACCESS_VIOLATION, GDB_SIGNAL_SEGV},
+  {STATUS_STACK_OVERFLOW, GDB_SIGNAL_SEGV},
+  {EXCEPTION_BREAKPOINT, GDB_SIGNAL_TRAP},
+  {DBG_CONTROL_C, GDB_SIGNAL_INT},
+  {EXCEPTION_SINGLE_STEP, GDB_SIGNAL_TRAP},
+  {STATUS_FLOAT_DIVIDE_BY_ZERO, GDB_SIGNAL_FPE},
   {-1, -1}};
 
 /* Set the MAPPINGS static global to OFFSETS.
@@ -270,6 +276,14 @@ windows_set_context_register_offsets (const int *offsets)
   mappings = offsets;
 }
 
+/* See windows-nat.h.  */
+
+void
+windows_set_segment_register_p (segment_register_p_ftype *fun)
+{
+  segment_register_p = fun;
+}
+
 static void
 check (BOOL ok, const char *file, int line)
 {
@@ -454,6 +468,14 @@ do_windows_fetch_inferior_registers (struct regcache *regcache, int r)
       l = (*((long *) context_offset) >> 16) & ((1 << 11) - 1);
       regcache_raw_supply (regcache, r, (char *) &l);
     }
+  else if (segment_register_p (r))
+    {
+      /* GDB treats segment registers as 32bit registers, but they are
+	 in fact only 16 bits long.  Make sure we do not read extra
+	 bits from our source buffer.  */
+      l = *((long *) context_offset) & 0xffff;
+      regcache_raw_supply (regcache, r, (char *) &l);
+    }
   else if (r >= 0)
     regcache_raw_supply (regcache, r, context_offset);
   else
@@ -889,7 +911,7 @@ windows_clear_solib (void)
 }
 
 /* Load DLL symbol info.  */
-void
+static void
 dll_symbol_command (char *args, int from_tty)
 {
   int n;
@@ -944,7 +966,7 @@ handle_output_debug_string (struct target_waitstatus *ourstatus)
 	 to treat this like a real signal.  */
       char *p;
       int sig = strtol (s + sizeof (_CYGWIN_SIGNAL_STRING) - 1, &p, 0);
-      int gotasig = target_signal_from_host (sig);
+      int gotasig = gdb_signal_from_host (sig);
       ourstatus->value.sig = gotasig;
       if (gotasig)
 	{
@@ -1105,7 +1127,7 @@ handle_exception (struct target_waitstatus *ourstatus)
     {
     case EXCEPTION_ACCESS_VIOLATION:
       DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_ACCESS_VIOLATION");
-      ourstatus->value.sig = TARGET_SIGNAL_SEGV;
+      ourstatus->value.sig = GDB_SIGNAL_SEGV;
 #ifdef __CYGWIN__
       {
 	/* See if the access violation happened within the cygwin DLL
@@ -1116,7 +1138,7 @@ handle_exception (struct target_waitstatus *ourstatus)
 	   cygwin later in the process and will be sent as a
 	   cygwin-specific-signal.  So, ignore SEGVs if they show up
 	   within the text segment of the DLL itself.  */
-	char *fn;
+	const char *fn;
 	CORE_ADDR addr = (CORE_ADDR) (uintptr_t)
 	  current_event.u.Exception.ExceptionRecord.ExceptionAddress;
 
@@ -1131,75 +1153,75 @@ handle_exception (struct target_waitstatus *ourstatus)
       break;
     case STATUS_STACK_OVERFLOW:
       DEBUG_EXCEPTION_SIMPLE ("STATUS_STACK_OVERFLOW");
-      ourstatus->value.sig = TARGET_SIGNAL_SEGV;
+      ourstatus->value.sig = GDB_SIGNAL_SEGV;
       break;
     case STATUS_FLOAT_DENORMAL_OPERAND:
       DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_DENORMAL_OPERAND");
-      ourstatus->value.sig = TARGET_SIGNAL_FPE;
+      ourstatus->value.sig = GDB_SIGNAL_FPE;
       break;
     case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
       DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_ARRAY_BOUNDS_EXCEEDED");
-      ourstatus->value.sig = TARGET_SIGNAL_FPE;
+      ourstatus->value.sig = GDB_SIGNAL_FPE;
       break;
     case STATUS_FLOAT_INEXACT_RESULT:
       DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_INEXACT_RESULT");
-      ourstatus->value.sig = TARGET_SIGNAL_FPE;
+      ourstatus->value.sig = GDB_SIGNAL_FPE;
       break;
     case STATUS_FLOAT_INVALID_OPERATION:
       DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_INVALID_OPERATION");
-      ourstatus->value.sig = TARGET_SIGNAL_FPE;
+      ourstatus->value.sig = GDB_SIGNAL_FPE;
       break;
     case STATUS_FLOAT_OVERFLOW:
       DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_OVERFLOW");
-      ourstatus->value.sig = TARGET_SIGNAL_FPE;
+      ourstatus->value.sig = GDB_SIGNAL_FPE;
       break;
     case STATUS_FLOAT_STACK_CHECK:
       DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_STACK_CHECK");
-      ourstatus->value.sig = TARGET_SIGNAL_FPE;
+      ourstatus->value.sig = GDB_SIGNAL_FPE;
       break;
     case STATUS_FLOAT_UNDERFLOW:
       DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_UNDERFLOW");
-      ourstatus->value.sig = TARGET_SIGNAL_FPE;
+      ourstatus->value.sig = GDB_SIGNAL_FPE;
       break;
     case STATUS_FLOAT_DIVIDE_BY_ZERO:
       DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_DIVIDE_BY_ZERO");
-      ourstatus->value.sig = TARGET_SIGNAL_FPE;
+      ourstatus->value.sig = GDB_SIGNAL_FPE;
       break;
     case STATUS_INTEGER_DIVIDE_BY_ZERO:
       DEBUG_EXCEPTION_SIMPLE ("STATUS_INTEGER_DIVIDE_BY_ZERO");
-      ourstatus->value.sig = TARGET_SIGNAL_FPE;
+      ourstatus->value.sig = GDB_SIGNAL_FPE;
       break;
     case STATUS_INTEGER_OVERFLOW:
       DEBUG_EXCEPTION_SIMPLE ("STATUS_INTEGER_OVERFLOW");
-      ourstatus->value.sig = TARGET_SIGNAL_FPE;
+      ourstatus->value.sig = GDB_SIGNAL_FPE;
       break;
     case EXCEPTION_BREAKPOINT:
       DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_BREAKPOINT");
-      ourstatus->value.sig = TARGET_SIGNAL_TRAP;
+      ourstatus->value.sig = GDB_SIGNAL_TRAP;
       break;
     case DBG_CONTROL_C:
       DEBUG_EXCEPTION_SIMPLE ("DBG_CONTROL_C");
-      ourstatus->value.sig = TARGET_SIGNAL_INT;
+      ourstatus->value.sig = GDB_SIGNAL_INT;
       break;
     case DBG_CONTROL_BREAK:
       DEBUG_EXCEPTION_SIMPLE ("DBG_CONTROL_BREAK");
-      ourstatus->value.sig = TARGET_SIGNAL_INT;
+      ourstatus->value.sig = GDB_SIGNAL_INT;
       break;
     case EXCEPTION_SINGLE_STEP:
       DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_SINGLE_STEP");
-      ourstatus->value.sig = TARGET_SIGNAL_TRAP;
+      ourstatus->value.sig = GDB_SIGNAL_TRAP;
       break;
     case EXCEPTION_ILLEGAL_INSTRUCTION:
       DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_ILLEGAL_INSTRUCTION");
-      ourstatus->value.sig = TARGET_SIGNAL_ILL;
+      ourstatus->value.sig = GDB_SIGNAL_ILL;
       break;
     case EXCEPTION_PRIV_INSTRUCTION:
       DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_PRIV_INSTRUCTION");
-      ourstatus->value.sig = TARGET_SIGNAL_ILL;
+      ourstatus->value.sig = GDB_SIGNAL_ILL;
       break;
     case EXCEPTION_NONCONTINUABLE_EXCEPTION:
       DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_NONCONTINUABLE_EXCEPTION");
-      ourstatus->value.sig = TARGET_SIGNAL_ILL;
+      ourstatus->value.sig = GDB_SIGNAL_ILL;
       break;
     default:
       /* Treat unhandled first chance exceptions specially.  */
@@ -1209,7 +1231,7 @@ handle_exception (struct target_waitstatus *ourstatus)
 	current_event.u.Exception.ExceptionRecord.ExceptionCode,
 	host_address_to_string (
 	  current_event.u.Exception.ExceptionRecord.ExceptionAddress));
-      ourstatus->value.sig = TARGET_SIGNAL_UNKNOWN;
+      ourstatus->value.sig = GDB_SIGNAL_UNKNOWN;
       break;
     }
   exception_count++;
@@ -1289,7 +1311,7 @@ fake_create_process (void)
 
 static void
 windows_resume (struct target_ops *ops,
-		ptid_t ptid, int step, enum target_signal sig)
+		ptid_t ptid, int step, enum gdb_signal sig)
 {
   thread_info *th;
   DWORD continue_status = DBG_CONTINUE;
@@ -1302,7 +1324,7 @@ windows_resume (struct target_ops *ops,
   if (resume_all)
     ptid = inferior_ptid;
 
-  if (sig != TARGET_SIGNAL_0)
+  if (sig != GDB_SIGNAL_0)
     {
       if (current_event.dwDebugEventCode != EXCEPTION_DEBUG_EVENT)
 	{
@@ -1336,7 +1358,7 @@ windows_resume (struct target_ops *ops,
 	  last_sig));
     }
 
-  last_sig = TARGET_SIGNAL_0;
+  last_sig = GDB_SIGNAL_0;
 
   DEBUG_EXEC (("gdb: windows_resume (pid=%d, tid=%ld, step=%d, sig=%d);\n",
 	       ptid_get_pid (ptid), ptid_get_tid (ptid), step, sig));
@@ -1384,7 +1406,7 @@ windows_resume (struct target_ops *ops,
    handler is in charge of interrupting the inferior using DebugBreakProcess.
    Note that this function is not available prior to Windows XP.  In this case
    we emit a warning.  */
-BOOL WINAPI
+static BOOL WINAPI
 ctrl_c_handler (DWORD event_type)
 {
   const int attach_flag = current_inferior ()->attach_flag;
@@ -1418,7 +1440,7 @@ get_windows_debug_event (struct target_ops *ops,
   static thread_info dummy_thread_info;
   int retval = 0;
 
-  last_sig = TARGET_SIGNAL_0;
+  last_sig = GDB_SIGNAL_0;
 
   if (!(debug_event = WaitForDebugEvent (&current_event, 1000)))
     goto out;
@@ -1678,7 +1700,7 @@ do_initial_windows_stuff (struct target_ops *ops, DWORD pid, int attaching)
   struct inferior *inf;
   struct thread_info *tp;
 
-  last_sig = TARGET_SIGNAL_0;
+  last_sig = GDB_SIGNAL_0;
   event_count = 0;
   exception_count = 0;
   open_process_used = 0;
@@ -1717,7 +1739,7 @@ do_initial_windows_stuff (struct target_ops *ops, DWORD pid, int attaching)
       stop_after_trap = 1;
       wait_for_inferior ();
       tp = inferior_thread ();
-      if (tp->suspend.stop_signal != TARGET_SIGNAL_TRAP)
+      if (tp->suspend.stop_signal != GDB_SIGNAL_TRAP)
 	resume (0, tp->suspend.stop_signal);
       else
 	break;
@@ -1838,7 +1860,7 @@ windows_detach (struct target_ops *ops, char *args, int from_tty)
   int detached = 1;
 
   ptid_t ptid = {-1};
-  windows_resume (ops, ptid, 0, TARGET_SIGNAL_0);
+  windows_resume (ops, ptid, 0, GDB_SIGNAL_0);
 
   if (!DebugActiveProcessStop (current_event.dwProcessId))
     {
@@ -2493,8 +2515,9 @@ init_windows_ops (void)
 
   i386_dr_low.set_control = cygwin_set_dr7;
   i386_dr_low.set_addr = cygwin_set_dr;
-  i386_dr_low.reset_addr = NULL;
+  i386_dr_low.get_addr = cygwin_get_dr;
   i386_dr_low.get_status = cygwin_get_dr6;
+  i386_dr_low.get_control = cygwin_get_dr7;
 
   /* i386_dr_low.debug_register_length field is set by
      calling i386_set_debug_register_length function
@@ -2509,6 +2532,9 @@ set_windows_aliases (char *argv0)
   add_info_alias ("dll", "sharedlibrary", 1);
 }
 
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_windows_nat;
+
 void
 _initialize_windows_nat (void)
 {
@@ -2626,6 +2652,14 @@ cygwin_set_dr7 (unsigned long val)
   debug_registers_used = 1;
 }
 
+/* Get the value of debug register I from the inferior.  */
+
+static CORE_ADDR
+cygwin_get_dr (int i)
+{
+  return dr[i];
+}
+
 /* Get the value of the DR6 debug status register from the inferior.
    Here we just return the value stored in dr[6]
    by the last call to thread_rec for current_event.dwThreadId id.  */
@@ -2635,6 +2669,16 @@ cygwin_get_dr6 (void)
   return (unsigned long) dr[6];
 }
 
+/* Get the value of the DR7 debug status register from the inferior.
+   Here we just return the value stored in dr[7] by the last call to
+   thread_rec for current_event.dwThreadId id.  */
+
+static unsigned long
+cygwin_get_dr7 (void)
+{
+  return (unsigned long) dr[7];
+}
+
 /* Determine if the thread referenced by "ptid" is alive
    by "polling" it.  If WaitForSingleObject returns WAIT_OBJECT_0
    it means that the thread has died.  Otherwise it is assumed to be alive.  */
@@ -2650,6 +2694,9 @@ windows_thread_alive (struct target_ops *ops, ptid_t ptid)
     ? FALSE : TRUE;
 }
 
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_check_for_gdb_ini;
+
 void
 _initialize_check_for_gdb_ini (void)
 {
@@ -2743,8 +2790,12 @@ bad_GetConsoleFontSize (HANDLE w, DWORD nFont)
   return size;
 }
  
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_loadable;
+
 /* Load any functions which may not be available in ancient versions
    of Windows.  */
+
 void
 _initialize_loadable (void)
 {
diff --git a/gdb/windows-nat.h b/gdb/windows-nat.h
index 08200b9..a6cc5ec 100644
--- a/gdb/windows-nat.h
+++ b/gdb/windows-nat.h
@@ -20,5 +20,13 @@
 
 extern void windows_set_context_register_offsets (const int *offsets);
 
+/* A pointer to a function that should return non-zero iff REGNUM
+   corresponds to one of the segment registers.  */
+typedef int (segment_register_p_ftype) (int regnum);
+
+/* Set the function that should be used by this module to determine
+   whether a given register is a segment register or not.  */
+extern void windows_set_segment_register_p (segment_register_p_ftype *fun);
+
 #endif
 
diff --git a/gdb/windows-tdep.c b/gdb/windows-tdep.c
index e111d41..116525c 100644
--- a/gdb/windows-tdep.c
+++ b/gdb/windows-tdep.c
@@ -26,6 +26,7 @@
 #include "command.h"
 #include "gdbcmd.h"
 #include "gdbthread.h"
+#include "objfiles.h"
 
 struct cmd_list_element *info_w32_cmdlist;
 
@@ -268,7 +269,7 @@ static const struct lval_funcs tlb_value_funcs =
    if there's no object available.  */
 
 static struct value *
-tlb_make_value (struct gdbarch *gdbarch, struct internalvar *var)
+tlb_make_value (struct gdbarch *gdbarch, struct internalvar *var, void *ignore)
 {
   if (target_has_stack && !ptid_equal (inferior_ptid, null_ptid))
     {
@@ -398,6 +399,51 @@ windows_xfer_shared_library (const char* so_name, CORE_ADDR load_addr,
   obstack_grow_str (obstack, "\"/></library>");
 }
 
+/* Implement the "iterate_over_objfiles_in_search_order" gdbarch
+   method.  It searches all objfiles, starting with CURRENT_OBJFILE
+   first (if not NULL).
+
+   On Windows, the system behaves a little differently when two
+   objfiles each define a global symbol using the same name, compared
+   to other platforms such as GNU/Linux for instance.  On GNU/Linux,
+   all instances of the symbol effectively get merged into a single
+   one, but on Windows, they remain distinct.
+
+   As a result, it usually makes sense to start global symbol searches
+   with the current objfile before expanding it to all other objfiles.
+   This helps for instance when a user debugs some code in a DLL that
+   refers to a global variable defined inside that DLL.  When trying
+   to print the value of that global variable, it would be unhelpful
+   to print the value of another global variable defined with the same
+   name, but in a different DLL.  */
+
+void
+windows_iterate_over_objfiles_in_search_order
+  (struct gdbarch *gdbarch,
+   iterate_over_objfiles_in_search_order_cb_ftype *cb,
+   void *cb_data, struct objfile *current_objfile)
+{
+  int stop;
+  struct objfile *objfile;
+
+  if (current_objfile)
+    {
+      stop = cb (current_objfile, cb_data);
+      if (stop)
+	return;
+    }
+
+  ALL_OBJFILES (objfile)
+    {
+      if (objfile != current_objfile)
+	{
+	  stop = cb (objfile, cb_data);
+	  if (stop)
+	    return;
+	}
+    }
+}
+
 static void
 show_maint_show_all_tib (struct ui_file *file, int from_tty,
 		struct cmd_list_element *c, const char *value)
@@ -425,6 +471,18 @@ init_w32_command_list (void)
     }
 }
 
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_windows_tdep;
+
+/* Implementation of `tlb' variable.  */
+
+static const struct internalvar_funcs tlb_funcs =
+{
+  tlb_make_value,
+  NULL,
+  NULL
+};
+
 void
 _initialize_windows_tdep (void)
 {
@@ -451,5 +509,5 @@ even if their meaning is unknown."),
      value with a void typed value, and when we get here, gdbarch
      isn't initialized yet.  At this point, we're quite sure there
      isn't another convenience variable of the same name.  */
-  create_internalvar_type_lazy ("_tlb", tlb_make_value);
+  create_internalvar_type_lazy ("_tlb", &tlb_funcs, NULL);
 }
diff --git a/gdb/windows-tdep.h b/gdb/windows-tdep.h
index c790e0a..20bf66d 100644
--- a/gdb/windows-tdep.h
+++ b/gdb/windows-tdep.h
@@ -29,4 +29,9 @@ extern void windows_xfer_shared_library (const char* so_name,
 					 CORE_ADDR load_addr,
 					 struct gdbarch *gdbarch,
 					 struct obstack *obstack);
+
+extern void windows_iterate_over_objfiles_in_search_order
+  (struct gdbarch *gdbarch,
+   iterate_over_objfiles_in_search_order_cb_ftype *cb,
+   void *cb_data, struct objfile *current_objfile);
 #endif
diff --git a/gdb/windows-termcap.c b/gdb/windows-termcap.c
index a70b6e8..7f946ea 100644
--- a/gdb/windows-termcap.c
+++ b/gdb/windows-termcap.c
@@ -21,6 +21,14 @@
 
 #include <stdlib.h>
 
+/* -Wmissing-prototypes */
+extern int tgetent (char *buffer, char *termtype);
+extern int tgetnum (char *name);
+extern int tgetflag (char *name);
+extern char* tgetstr (char *name, char **area);
+extern int tputs (char *string, int nlines, int (*outfun) ());
+extern char *tgoto (const char *cap, int col, int row);
+
 /* Each of the files below is a minimal implementation of the standard
    termcap function with the same name, suitable for use in a Windows
    console window.  */
diff --git a/gdb/wrapper.c b/gdb/wrapper.c
deleted file mode 100644
index 0a5e237..0000000
--- a/gdb/wrapper.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/* Longjump free calls to GDB internal routines.
-
-   Copyright (C) 1999-2000, 2005, 2007-2012 Free Software Foundation,
-   Inc.
-
-   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 3 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, see <http://www.gnu.org/licenses/>.  */
-
-#include "defs.h"
-#include "value.h"
-#include "exceptions.h"
-#include "wrapper.h"
-#include "ui-out.h"
-#include "target.h"
-
-int
-gdb_parse_exp_1 (char **stringptr, struct block *block, int comma,
-		 struct expression **expression)
-{
-  volatile struct gdb_exception except;
-
-  TRY_CATCH (except, RETURN_MASK_ERROR)
-    {
-      *expression = parse_exp_1 (stringptr, block, comma);
-    }
-
-  if (except.reason < 0)
-    return 0;
-  return 1;
-}
-
-int
-gdb_evaluate_expression (struct expression *exp, struct value **value)
-{
-  volatile struct gdb_exception except;
-
-  TRY_CATCH (except, RETURN_MASK_ERROR)
-    {
-      *value = evaluate_expression(exp);
-    }
-
-  if (except.reason < 0)
-    return 0;
-  return 1;
-}
-
-int
-gdb_value_fetch_lazy (struct value *val)
-{
-  volatile struct gdb_exception except;
-
-  TRY_CATCH (except, RETURN_MASK_ERROR)
-    {
-      value_fetch_lazy (val);
-    }
-
-  if (except.reason < 0)
-    return 0;
-  return 1;
-}
-
-int
-gdb_value_equal (struct value *val1, struct value *val2, int *result)
-{
-  volatile struct gdb_exception except;
-
-  TRY_CATCH (except, RETURN_MASK_ERROR)
-    {
-      *result = value_equal (val1, val2);
-    }
-
-  if (except.reason < 0)
-    return 0;
-  return 1;
-}
-
-int
-gdb_value_assign (struct value *val1, struct value *val2,
-		  struct value **result)
-{
-  volatile struct gdb_exception except;
-
-  TRY_CATCH (except, RETURN_MASK_ERROR)
-    {
-      *result = value_assign (val1, val2);
-    }
-
-  if (except.reason < 0)
-    return 0;
-  return 1;
-}
-
-int
-gdb_value_subscript (struct value *val, LONGEST index,
-		     struct value **result)
-{
-  volatile struct gdb_exception except;
-
-  TRY_CATCH (except, RETURN_MASK_ERROR)
-    {
-      *result = value_subscript (val, index);
-    }
-
-  if (except.reason < 0)
-    return 0;
-  return 1;
-}
-
-int
-gdb_value_ind (struct value *val, struct value **result)
-{
-  volatile struct gdb_exception except;
-
-  TRY_CATCH (except, RETURN_MASK_ERROR)
-    {
-      *result = value_ind (val);
-    }
-
-  if (except.reason < 0)
-    return 0;
-  return 1;
-}
-
-int
-gdb_parse_and_eval_type (char *p, int length, struct type **type)
-{
-  volatile struct gdb_exception except;
-
-  TRY_CATCH (except, RETURN_MASK_ERROR)
-    {
-      *type = parse_and_eval_type (p, length);
-    }
-
-  if (except.reason < 0)
-    return 0;
-  return 1;
-}
-
-enum gdb_rc
-gdb_value_struct_elt (struct ui_out *uiout, struct value **result,
-		      struct value **argp, struct value **args, char *name,
-		      int *static_memfuncp, char *err)
-{
-  volatile struct gdb_exception except;
-
-  TRY_CATCH (except, RETURN_MASK_ERROR)
-    {
-      *result = value_struct_elt (argp, args, name, static_memfuncp, err);
-    }
-
-  if (except.reason < 0)
-    return GDB_RC_FAIL;
-  return GDB_RC_OK;
-}
-
-/* Call target_find_new_threads without throwing exception.  Exception is
-   printed if it got thrown.  */
-
-int
-gdb_target_find_new_threads (void)
-{
-  volatile struct gdb_exception except;
-
-  TRY_CATCH (except, RETURN_MASK_ERROR)
-    {
-      target_find_new_threads ();
-    }
-
-  if (except.reason < 0)
-    {
-      exception_print (gdb_stderr, except);
-      return 0;
-    }
-  return 1;
-}
diff --git a/gdb/wrapper.h b/gdb/wrapper.h
deleted file mode 100644
index 974b17b..0000000
--- a/gdb/wrapper.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Longjump free calls to GDB internal routines.
-
-   Copyright (C) 1999-2000, 2005, 2007-2012 Free Software Foundation,
-   Inc.
-
-   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 3 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, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef WRAPPER_H
-#define WRAPPER_H 1
-
-#include "gdb.h"
-
-struct value;
-struct expression;
-struct block;
-
-extern int gdb_parse_exp_1 (char **, struct block *,
-			    int, struct expression **);
-
-extern int gdb_evaluate_expression (struct expression *, struct value **);
-
-extern int gdb_value_fetch_lazy (struct value *);
-
-extern int gdb_value_equal (struct value *, struct value *, int *);
-
-extern int gdb_value_assign (struct value *, struct value *, struct value **);
-
-extern int gdb_value_subscript (struct value *, LONGEST, struct value **);
-
-extern enum gdb_rc gdb_value_struct_elt (struct ui_out *uiout,
-					 struct value **result_ptr,
-					 struct value **argp,
-					 struct value **args, char *name,
-					 int *static_memfuncp, char *err);
-
-extern int gdb_value_ind (struct value *val, struct value ** rval);
-
-extern int gdb_parse_and_eval_type (char *, int, struct type **);
-
-extern int gdb_target_find_new_threads (void);
-
-#endif /* wrapper.h */
diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c
index 1a2bb14..af93a43 100644
--- a/gdb/xcoffread.c
+++ b/gdb/xcoffread.c
@@ -162,6 +162,7 @@ static const struct dwarf2_debug_sections dwarf2_xcoff_names = {
   { ".dwstr", NULL },
   { ".dwrnges", NULL },
   { NULL, NULL }, /* debug_types */
+  { NULL, NULL }, /* debug_addr */
   { ".dwframe", NULL },
   { NULL, NULL }, /* eh_frame */
   { NULL, NULL }, /* gdb_index */
@@ -272,36 +273,53 @@ find_targ_sec (bfd *abfd, asection *sect, void *obj)
     }
 }
 
-/* Return the section number (SECT_OFF_*) that CS points to.  */
-static int
-secnum_to_section (int secnum, struct objfile *objfile)
-{
-  int off = SECT_OFF_TEXT (objfile);
+/* Search all BFD sections for the section whose target_index is
+   equal to N_SCNUM.  Set *BFD_SECT to that section.  The section's
+   associated index in the objfile's section_offset table is also
+   stored in *SECNUM.
 
-  asection *sect = NULL;
+   If no match is found, *BFD_SECT is set to NULL, and *SECNUM
+   is set to the text section's number.  */
+
+static void
+xcoff_secnum_to_sections (int n_scnum, struct objfile *objfile,
+			  asection **bfd_sect, int *secnum)
+{
   struct find_targ_sec_arg args;
-  args.targ_index = secnum;
-  args.resultp = &off;
-  args.bfd_sect = §
+
+  args.targ_index = n_scnum;
+  args.resultp = secnum;
+  args.bfd_sect = bfd_sect;
   args.objfile = objfile;
+
+  *bfd_sect = NULL;
+  *secnum = SECT_OFF_TEXT (objfile);
+
   bfd_map_over_sections (objfile->obfd, find_targ_sec, &args);
-  return off;
 }
 
-/* Return the BFD section that CS points to.  */
+/* Return the section number (SECT_OFF_*) that N_SCNUM points to.  */
+
+static int
+secnum_to_section (int n_scnum, struct objfile *objfile)
+{
+  int secnum;
+  asection *ignored;
+
+  xcoff_secnum_to_sections (n_scnum, objfile, &ignored, &secnum);
+  return secnum;
+}
+
+/* Return the BFD section that N_SCNUM points to.  */
+
 static asection *
-secnum_to_bfd_section (int secnum, struct objfile *objfile)
+secnum_to_bfd_section (int n_scnum, struct objfile *objfile)
 {
-  int off = SECT_OFF_TEXT (objfile);
+  int ignored;
+  asection *bfd_sect;
 
-  asection *sect = NULL;
-  struct find_targ_sec_arg args;
-  args.targ_index = secnum;
-  args.resultp = &off;
-  args.bfd_sect = §
-  args.objfile = objfile;
-  bfd_map_over_sections (objfile->obfd, find_targ_sec, &args);
-  return sect;
+  xcoff_secnum_to_sections (n_scnum, objfile, &bfd_sect, &ignored);
+  return bfd_sect;
 }
 

 /* add a given stab string into given stab vector.  */
@@ -877,21 +895,33 @@ enter_line_range (struct subfile *subfile, unsigned beginoffset,
    This function can read past the end of the symbol table
    (into the string table) but this does no harm.  */
 
-/* Reading symbol table has to be fast! Keep the followings as macros, rather
-   than functions.  */
-
-#define	RECORD_MINIMAL_SYMBOL(NAME, ADDR, TYPE, SECTION, OBJFILE) \
-{						\
-  char *namestr;				\
-						\
-  namestr = (NAME);				\
-  if (namestr[0] == '.') ++namestr;		\
-  prim_record_minimal_symbol_and_info (namestr, (ADDR), (TYPE),     \
-				       (SECTION), (asection *)NULL, \
-				       (OBJFILE));		    \
-  misc_func_recorded = 1;			\
-}
+/* Create a new minimal symbol (using prim_record_minimal_symbol_and_info).
+
+   Arguments are:
+
+   NAME - the symbol's name (but if NAME starts with a period, that
+   leading period is discarded).
+   ADDRESS - the symbol's address.
+   MS_TYPE - the symbol's type.
+   N_SCNUM - the symbol's XCOFF section number.
+   OBJFILE - the objfile associated with the minimal symbol.  */
+
+static void
+record_minimal_symbol (const char *name, CORE_ADDR address,
+		       enum minimal_symbol_type ms_type,
+		       int n_scnum,
+		       struct objfile *objfile)
+{
+  int secnum;
+  asection *bfd_sect;
+
+  if (name[0] == '.')
+    ++name;
 
+  xcoff_secnum_to_sections (n_scnum, objfile, &bfd_sect, &secnum);
+  prim_record_minimal_symbol_and_info (name, address, ms_type,
+				       secnum, bfd_sect, objfile);
+}
 
 /* xcoff has static blocks marked in `.bs', `.es' pairs.  They cannot be
    nested.  At any given time, a symbol can only be in one static block.
@@ -986,9 +1016,7 @@ read_xcoff_symtab (struct partial_symtab *pst)
 
   char *filestring = " _start_ ";	/* Name of the current file.  */
 
-  char *last_csect_name;	/* Last seen csect's name and value.  */
-  CORE_ADDR last_csect_val;
-  int last_csect_sec;
+  const char *last_csect_name;	/* Last seen csect's name.  */
 
   this_symtab_psymtab = pst;
 
@@ -998,7 +1026,6 @@ read_xcoff_symtab (struct partial_symtab *pst)
 
   last_source_file = NULL;
   last_csect_name = 0;
-  last_csect_val = 0;
 
   start_stabs ();
   start_symtab (filestring, (char *) NULL, file_start_addr);
@@ -1171,14 +1198,8 @@ read_xcoff_symtab (struct partial_symtab *pst)
 						SECT_OFF_TEXT (objfile));
 		      file_end_addr = file_start_addr + CSECT_LEN (&main_aux);
 
-		      if (cs->c_name && (cs->c_name[0] == '.'
-					 || cs->c_name[0] == '@'))
-			{
-			  last_csect_name = cs->c_name;
-			  last_csect_val = cs->c_value;
-			  last_csect_sec = secnum_to_section (cs->c_secnum,
-							      objfile);
-			}
+		      if (cs->c_name && (cs->c_name[0] == '.' || cs->c_name[0] == '@'))
+			last_csect_name = cs->c_name;
 		    }
 		    continue;
 
@@ -1989,10 +2010,6 @@ init_stringtab (bfd *abfd, file_ptr offset, struct objfile *objfile)
    for the psymtab.  */
 static unsigned int first_fun_line_offset;
 
-static struct partial_symtab *xcoff_start_psymtab
-  (struct objfile *, char *, int,
-   struct partial_symbol **, struct partial_symbol **);
-
 /* Allocate and partially fill a partial symtab.  It will be
    completely filled at the end of the symbol list.
 
@@ -2001,7 +2018,8 @@ static struct partial_symtab *xcoff_start_psymtab
    (normal).  */
 
 static struct partial_symtab *
-xcoff_start_psymtab (struct objfile *objfile, char *filename, int first_symnum,
+xcoff_start_psymtab (struct objfile *objfile,
+		     const char *filename, int first_symnum,
 		     struct partial_symbol **global_syms,
 		     struct partial_symbol **static_syms)
 {
@@ -2023,10 +2041,6 @@ xcoff_start_psymtab (struct objfile *objfile, char *filename, int first_symnum,
   return result;
 }
 
-static struct partial_symtab *xcoff_end_psymtab
-  (struct partial_symtab *, char **, int, int,
-   struct partial_symtab **, int, int);
-
 /* Close off the current usage of PST.
    Returns PST, or NULL if the partial symtab was empty and thrown away.
 
@@ -2036,7 +2050,7 @@ static struct partial_symtab *xcoff_end_psymtab
    are the information for includes and dependencies.  */
 
 static struct partial_symtab *
-xcoff_end_psymtab (struct partial_symtab *pst, char **include_list,
+xcoff_end_psymtab (struct partial_symtab *pst, const char **include_list,
 		   int num_includes, int capping_symbol_number,
 		   struct partial_symtab **dependency_list,
 		   int number_dependencies, int textlow_not_set)
@@ -2119,17 +2133,13 @@ xcoff_end_psymtab (struct partial_symtab *pst, char **include_list,
   return pst;
 }
 
-static void swap_sym (struct internal_syment *,
-		      union internal_auxent *, char **, char **,
-		      unsigned int *, struct objfile *);
-
 /* Swap raw symbol at *RAW and put the name in *NAME, the symbol in
    *SYMBOL, the first auxent in *AUX.  Advance *RAW and *SYMNUMP over
    the symbol and its auxents.  */
 
 static void
 swap_sym (struct internal_syment *symbol, union internal_auxent *aux,
-	  char **name, char **raw, unsigned int *symnump,
+	  const char **name, char **raw, unsigned int *symnump,
 	  struct objfile *objfile)
 {
   bfd_coff_swap_sym_in (objfile->obfd, *raw, symbol);
@@ -2189,9 +2199,9 @@ scan_xcoff_symtab (struct objfile *objfile)
 {
   struct gdbarch *gdbarch = get_objfile_arch (objfile);
   CORE_ADDR toc_offset = 0;	/* toc offset value in data section.  */
-  char *filestring = NULL;
+  const char *filestring = NULL;
 
-  char *namestring;
+  const char *namestring;
   int past_first_source_file = 0;
   bfd *abfd;
   asection *bfd_sect;
@@ -2201,7 +2211,7 @@ scan_xcoff_symtab (struct objfile *objfile)
   struct partial_symtab *pst;
 
   /* List of current psymtab's include files.  */
-  char **psymtab_include_list;
+  const char **psymtab_include_list;
   int includes_allocated;
   int includes_used;
 
@@ -2214,7 +2224,7 @@ scan_xcoff_symtab (struct objfile *objfile)
   union internal_auxent main_aux[5];
   unsigned int ssymnum;
 
-  char *last_csect_name = NULL;	/* Last seen csect's name and value.  */
+  const char *last_csect_name = NULL; /* Last seen csect's name and value.  */
   CORE_ADDR last_csect_val = 0;
   int last_csect_sec = 0;
   int misc_func_recorded = 0;	/* true if any misc. function.  */
@@ -2224,8 +2234,8 @@ scan_xcoff_symtab (struct objfile *objfile)
 
   includes_allocated = 30;
   includes_used = 0;
-  psymtab_include_list = (char **) alloca (includes_allocated *
-					   sizeof (char *));
+  psymtab_include_list = (const char **) alloca (includes_allocated *
+						 sizeof (const char *));
 
   dependencies_allocated = 30;
   dependencies_used = 0;
@@ -2297,10 +2307,10 @@ scan_xcoff_symtab (struct objfile *objfile)
 
 			if (!misc_func_recorded)
 			  {
-			    RECORD_MINIMAL_SYMBOL
+			    record_minimal_symbol
 			      (last_csect_name, last_csect_val,
-			       mst_text, last_csect_sec,
-			       objfile);
+			       mst_text, last_csect_sec, objfile);
+			    misc_func_recorded = 1;
 			  }
 
 			if (pst != NULL)
@@ -2332,8 +2342,7 @@ scan_xcoff_symtab (struct objfile *objfile)
 		      {
 			last_csect_name = namestring;
 			last_csect_val = symbol.n_value;
-			last_csect_sec =
-			  secnum_to_section (symbol.n_scnum, objfile);
+			last_csect_sec = symbol.n_scnum;
 		      }
 		    if (pst != NULL)
 		      {
@@ -2357,7 +2366,8 @@ scan_xcoff_symtab (struct objfile *objfile)
 			(namestring, symbol.n_value,
 			 sclass == C_HIDEXT ? mst_file_data : mst_data,
 			 secnum_to_section (symbol.n_scnum, objfile),
-			 NULL, objfile);
+			 secnum_to_bfd_section (symbol.n_scnum, objfile),
+			 objfile);
 		    break;
 
 		  case XMC_TC0:
@@ -2391,11 +2401,13 @@ scan_xcoff_symtab (struct objfile *objfile)
 		    if (first_fun_line_offset == 0 && symbol.n_numaux > 1)
 		      first_fun_line_offset =
 			main_aux[0].x_sym.x_fcnary.x_fcn.x_lnnoptr;
-		    RECORD_MINIMAL_SYMBOL
-		      (namestring, symbol.n_value,
-		       sclass == C_HIDEXT ? mst_file_text : mst_text,
-		       secnum_to_section (symbol.n_scnum, objfile),
-		       objfile);
+		      {
+			record_minimal_symbol
+			  (namestring, symbol.n_value,
+			   sclass == C_HIDEXT ? mst_file_text : mst_text,
+			   symbol.n_scnum, objfile);
+			misc_func_recorded = 1;
+		      }
 		    break;
 
 		  case XMC_GL:
@@ -2406,11 +2418,10 @@ scan_xcoff_symtab (struct objfile *objfile)
 		       mst_solib_trampoline symbol.  When we lookup mst
 		       symbols, we will choose mst_text over
 		       mst_solib_trampoline.  */
-		    RECORD_MINIMAL_SYMBOL
+		    record_minimal_symbol
 		      (namestring, symbol.n_value,
-		       mst_solib_trampoline,
-		       secnum_to_section (symbol.n_scnum, objfile),
-		       objfile);
+		       mst_solib_trampoline, symbol.n_scnum, objfile);
+		    misc_func_recorded = 1;
 		    break;
 
 		  case XMC_DS:
@@ -2433,7 +2444,8 @@ scan_xcoff_symtab (struct objfile *objfile)
 			(namestring, symbol.n_value,
 			 sclass == C_HIDEXT ? mst_file_data : mst_data,
 			 secnum_to_section (symbol.n_scnum, objfile),
-			 NULL, objfile);
+			 secnum_to_bfd_section (symbol.n_scnum, objfile),
+			 objfile);
 		    break;
 		  }
 		break;
@@ -2450,7 +2462,8 @@ scan_xcoff_symtab (struct objfile *objfile)
 			(namestring, symbol.n_value,
 			 sclass == C_HIDEXT ? mst_file_bss : mst_bss,
 			 secnum_to_section (symbol.n_scnum, objfile),
-			 NULL, objfile);
+			 secnum_to_bfd_section (symbol.n_scnum, objfile),
+			 objfile);
 		    break;
 		  }
 		break;
@@ -2476,9 +2489,9 @@ scan_xcoff_symtab (struct objfile *objfile)
 		   it as a function.  This will take care of functions like
 		   strcmp() compiled by xlc.  */
 
-		RECORD_MINIMAL_SYMBOL
-		  (last_csect_name, last_csect_val,
-		   mst_text, last_csect_sec, objfile);
+		record_minimal_symbol (last_csect_name, last_csect_val,
+				       mst_text, last_csect_sec, objfile);
+		misc_func_recorded = 1;
 	      }
 
 	    if (pst)
@@ -2619,13 +2632,13 @@ scan_xcoff_symtab (struct objfile *objfile)
 	    psymtab_include_list[includes_used++] = namestring;
 	    if (includes_used >= includes_allocated)
 	      {
-		char **orig = psymtab_include_list;
+		const char **orig = psymtab_include_list;
 
-		psymtab_include_list = (char **)
+		psymtab_include_list = (const char **)
 		  alloca ((includes_allocated *= 2) *
-			  sizeof (char *));
+			  sizeof (const char *));
 		memcpy (psymtab_include_list, orig,
-			includes_used * sizeof (char *));
+			includes_used * sizeof (const char *));
 	      }
 	    continue;
 	  }
@@ -3123,6 +3136,7 @@ static const struct sym_fns xcoff_sym_fns =
   default_symfile_segments,	/* Get segment information from a file.  */
   aix_process_linenos,
   default_symfile_relocate,	/* Relocate a debug section.  */
+  NULL,				/* sym_probe_fns */
   &psym_functions
 };
 
diff --git a/gdb/xcoffsolib.c b/gdb/xcoffsolib.c
index 0a4f5fe..46cf808 100644
--- a/gdb/xcoffsolib.c
+++ b/gdb/xcoffsolib.c
@@ -158,6 +158,8 @@ sharedlibrary_command (char *pattern, int from_tty)
   }
 }
 
+void _initialize_xcoffsolib (void);
+
 void
 _initialize_xcoffsolib (void)
 {
diff --git a/gdb/xml-syscall.c b/gdb/xml-syscall.c
index 105b265..f4b16f4 100644
--- a/gdb/xml-syscall.c
+++ b/gdb/xml-syscall.c
@@ -151,7 +151,7 @@ free_syscalls_info (void *arg)
   xfree (sysinfo);
 }
 
-struct cleanup *
+static struct cleanup *
 make_cleanup_free_syscalls_info (struct syscalls_info *sysinfo)
 {
   return make_cleanup (free_syscalls_info, sysinfo);
diff --git a/gdb/xstormy16-tdep.c b/gdb/xstormy16-tdep.c
index 23ae60b..47fc86b 100644
--- a/gdb/xstormy16-tdep.c
+++ b/gdb/xstormy16-tdep.c
@@ -197,7 +197,7 @@ xstormy16_store_return_value (struct type *type, struct regcache *regcache,
 }
 
 static enum return_value_convention
-xstormy16_return_value (struct gdbarch *gdbarch, struct type *func_type,
+xstormy16_return_value (struct gdbarch *gdbarch, struct value *function,
 			struct type *type, struct regcache *regcache,
 			gdb_byte *readbuf, const gdb_byte *writebuf)
 {
@@ -413,7 +413,7 @@ static CORE_ADDR
 xstormy16_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
   CORE_ADDR func_addr = 0, func_end = 0;
-  char *func_name;
+  const char *func_name;
 
   if (find_pc_partial_function (pc, &func_name, &func_addr, &func_end))
     {
diff --git a/gdb/xtensa-linux-nat.c b/gdb/xtensa-linux-nat.c
index 191ccef..4c7f0ab 100644
--- a/gdb/xtensa-linux-nat.c
+++ b/gdb/xtensa-linux-nat.c
@@ -46,7 +46,7 @@
    hardware-specific overlays.  */
 #include "xtensa-xtregs.c"
 
-int
+static int
 get_thread_id (ptid_t ptid)
 {
   int tid = TIDGET (ptid);
diff --git a/gdb/xtensa-tdep.c b/gdb/xtensa-tdep.c
index 78d8888..b2a0617 100644
--- a/gdb/xtensa-tdep.c
+++ b/gdb/xtensa-tdep.c
@@ -665,7 +665,6 @@ xtensa_pseudo_register_write (struct gdbarch *gdbarch,
       && (regnum <= gdbarch_tdep (gdbarch)->a0_base + 15))
     {
       gdb_byte *buf = (gdb_byte *) alloca (MAX_REGISTER_SIZE);
-      unsigned int wb;
 
       regcache_raw_read (regcache,
 			 gdbarch_tdep (gdbarch)->wb_regnum, buf);
@@ -1682,7 +1681,7 @@ xtensa_store_return_value (struct type *type,
 
 static enum return_value_convention
 xtensa_return_value (struct gdbarch *gdbarch,
-		     struct type *func_type,
+		     struct value *function,
 		     struct type *valtype,
 		     struct regcache *regcache,
 		     gdb_byte *readbuf,
@@ -2816,7 +2815,6 @@ execute_code (struct gdbarch *gdbarch, CORE_ADDR current_pc, CORE_ADDR wb)
   void (*func) (struct gdbarch *, int, int, int, CORE_ADDR);
 
   int at, as, offset;
-  int num_operands;
 
   /* WindowUnderflow12 = true, when inside _WindowUnderflow12.  */ 
   int WindowUnderflow12 = (current_pc & 0x1ff) >= 0x140; 
diff --git a/include/ChangeLog b/include/ChangeLog
index 01854a4..38e30cf 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,129 @@
+2012-07-13  Doug Evans  <dje at google.com>
+
+	* filenames.h: #include "hashtab.h".
+	(filename_hash, filename_eq): Declare.
+
+2012-07-13  Andreas Krebbel  <Andreas.Krebbel at de.ibm.com>
+
+	* elf/s390.h (START_RELOC_NUMBERS): Define R_390_IRELATIVE reloc.
+
+2012-06-18  Doug Evans  <dje at google.com>
+
+	* dwarf2.def (DW_OP): Add DW_OP_GNU_const_index.
+
+2012-06-12  Rafael Ávila de Espíndola <respindola at mozilla.com>
+
+	* plugin-api.h (ld_plugin_output_file_type): Add LDPO_PIE.
+
+2012-06-08  Jakub Jelinek  <jakub at redhat.com>
+
+	* dwarf2.def (DW_FORM_GNU_ref_alt, DW_FORM_GNU_strp_alt): New
+	forms.
+	* dwarf2.h (enum dwarf_macro_record_type): Add
+	DW_MACRO_GNU_define_indirect_alt, DW_MACRO_GNU_undef_indirect_alt
+	and DW_MACRO_GNU_transparent_include_alt.
+
+2012-05-23  Doug Evans  <dje at google.com>
+
+	* leb128.h: #include stdint.h, inttypes.h.
+	(read_uleb128_to_uint64): Renamed from read_uleb128_to_ull.
+	Change to take a uint64_t * argument instead of unsigned long long.
+	(read_sleb128_to_uint64): Renamed from read_sleb128_to_ll.
+	Change to take an int64_t * argument instead of long long.
+
+2012-05-22  Doug Evans  <dje at google.com>
+
+	* leb128.h: New file.
+
+2012-05-19  Gary Funck  <gary at intrepid.com>
+
+	* dwarf2.def: Update comment re: UPC extensions to reference
+	DWARF4 specification.
+
+2012-05-15  James Murray <jsm at jsm-net.demon.co.uk>
+
+	* dis-asm.h (print_insn_m9s12x): Prototype.
+	(print_insn_m9s12xg): Prototype.
+
+2012-05-03  Sean Keys  <skeys at ipdatasys.com>
+
+	* dis-asm.h (print_insn_xgate): Define.
+	(print_insn_xgate): Ditto.
+	Added new files for XGATE port.
+
+2012-05-02  Cary Coutant  <ccoutant at google.com>
+
+	* dwarf2.def: Remove DW_FORM_GNU_ref_index,
+	replace DW_AT_GNU_ref_base with DW_AT_GNU_ranges_base.
+
+2012-04-28  Doug Evans  <dje at google.com>
+
+	* dwarf2.def (DW_OP): Add DW_OP_GNU_addr_index.
+
+2012-04-27  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2.h: Wrap function declarations in extern "C".
+
+2012-04-27  Tom Tromey  <tromey at redhat.com>
+
+	* dwarf2.h (enum dwarf_tag, enum dwarf_form, enum dwarf_attribute)
+	(enum dwarf_location_atom, enum dwarf_type, enum
+	dwarf_call_frame_info): Remove.
+	(DW_TAG, DW_TAG_DUP, DW_FORM, DW_AT, DW_AT_DUP, DW_OP)
+	(DW_OP_DUP, DW_ATE, DW_ATE_DUP, DW_CFA): New macros.
+	Include dwarf2.def.
+	(get_DW_TAG_name, get_DW_AT_name, get_DW_FORM_name)
+	(get_DW_OP_name, get_DW_ATE_name): Declare.
+	* dwarf2.def: New file, from dwarf2.h.
+
+2012-04-12  David S. Miller  <davem at davemloft.net>
+
+	* elf/sparc.h (R_SPARC_WDISP10): New reloc.
+	* opcode/sparc.h: Define '=' as generating R_SPARC_WDISP10.
+
+2012-04-10  Tristan Gingold  <gingold at adacore.com>
+
+	* splay-tree.h: Conditionnaly includes stdint.h and inttypes.h
+	(libi_uhostptr_t, libi_shostptr_t): Remove, replaced by uintptr_t.
+
+2012-04-09  Roland McGrath  <mcgrathr at google.com>
+
+	* bfdlink.h (struct bfd_link_info): Add new member user_phdrs.
+
+2012-03-15  Alan Modra  <amodra at gmail.com>
+
+	* dis-asm.h (disassemble_init_powerpc): Declare.
+
+2009-11-06  Jonas Maebe  <jonas.maebe at elis.ugent.be>
+
+	Add DWARF attribute value for the "Borland fastcall" calling
+	convention.
+	* elf/dwarf2.h: Add DW_CC_GNU_borland_fastcall_i386 constant.
+
+2012-01-31  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/13616
+	* bfdlink.h (bfd_link_order): Update comments on data size.
+
+2012-01-26  Cary Coutant  <ccoutant at google.com>
+
+	* dwarf2.h (enum dwarf_form): Add Fission extensions.
+	(enum dwarf_attribute): Likewise.
+
+2012-01-06  Jason Merrill  <jason at redhat.com>
+
+	PR c++/6057
+	PR c++/48051
+	PR c++/50855
+	PR c++/51322
+	* demangle.h (enum demangle_component_type): Add
+	DEMANGLE_COMPONENT_INITIALIZER_LIST, DEMANGLE_COMPONENT_NULLARY.
+
+2011-12-14  Iain Sandoe  <iains at gcc.gnu.org>
+
+	* mach-o/loader.h (bfd_mach_o_section_type): define
+	BFD_MACH_O_S_ATTR_NONE to 0.
+
 2011-11-07  Richard Henderson  <rth at redhat.com>
 
 	Merged from transactional-memory.
@@ -168,12 +294,6 @@
 
 	* bfdlink.h (struct bfd_link_hash_entry): Remove u.undef.weak field.
 
-2011-05-09  Paul Brook  <paul at codesourcery.com>
-
-	* elf/tic6x.h (ELF_STRING_C6000_unwind,
-	ELF_STRING_C6000_unwind_info, ELF_STRING_C6000_unwind_once,
-	ELF_STRING_C6000_unwind_info_once): Define.
-
 2011-04-30  Jakub Jelinek  <jakub at redhat.com>
 
 	* dwarf2.h (DW_OP_GNU_const_type, DW_OP_GNU_regval_type,
@@ -468,11 +588,6 @@
 	(disassemble_init_for_target): Ditto.
 	(init_disassemble_info): Ditto.
 
-2009-12-03  David Daney  <ddaney at caviumnetworks.com>
-	    Adam Nemet  <adambnemet at gmail.com>
-
-	* elf/mips.h (E_MIPS_MACH_OCTEON2): New machine flag.
-
 2009-11-18  Alan Modra  <amodra at bigpond.net.au>
 
 	* alloca-conf.h: Clarify comment.
@@ -481,7 +596,7 @@
 
 	Add DWARF attribute value for the "Borland fastcall" calling
 	convention.
-	* elf/dwarf2.h: Add DW_CC_GNU_borland_fastcall_i386 constant.
+	* dwarf2.h: Add DW_CC_GNU_borland_fastcall_i386 constant.
 
 2009-10-23  Kai Tietz  <kai.tietz at onevision.com>
 
diff --git a/include/bfdlink.h b/include/bfdlink.h
index be85329..d900b47 100644
--- a/include/bfdlink.h
+++ b/include/bfdlink.h
@@ -229,7 +229,7 @@ typedef enum {with_flags, without_flags} flag_type;
 /* A section flag list.  */
 struct flag_info_list
 {
-  flag_type with; 
+  flag_type with;
   const char *name;
   bfd_boolean valid;
   struct flag_info_list *next;
@@ -405,6 +405,9 @@ struct bfd_link_info
   /* TRUE if we should warn alternate ELF machine code.  */
   unsigned int warn_alternate_em: 1;
 
+  /* TRUE if the linker script contained an explicit PHDRS command.  */
+  unsigned int user_phdrs: 1;
+
   /* Char that may appear as the first char of a symbol, but should be
      skipped (like symbol_leading_char) when looking up symbols in
      wrap_hash.  Used by PowerPC Linux for 'dot' symbols.  */
@@ -674,8 +677,8 @@ struct bfd_link_order
 	} indirect;
       struct
 	{
-	  /* Size of contents, or zero when contents size == size
-	     within output section.
+	  /* Size of contents, or zero when contents should be filled by
+	     the architecture-dependent fill function.
 	     A non-zero value allows filling of the output section
 	     with an arbitrary repeated pattern.  */
 	  unsigned int size;
diff --git a/include/demangle.h b/include/demangle.h
index 98b11d7..34b3ed3 100644
--- a/include/demangle.h
+++ b/include/demangle.h
@@ -344,6 +344,9 @@ enum demangle_component_type
      template argument, and the right subtree is either NULL or
      another TEMPLATE_ARGLIST node.  */
   DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,
+  /* An initializer list.  The left subtree is either an explicit type or
+     NULL, and the right subtree is a DEMANGLE_COMPONENT_ARGLIST.  */
+  DEMANGLE_COMPONENT_INITIALIZER_LIST,
   /* An operator.  This holds information about a standard
      operator.  */
   DEMANGLE_COMPONENT_OPERATOR,
@@ -353,6 +356,8 @@ enum demangle_component_type
   /* A typecast, represented as a unary operator.  The one subtree is
      the type to which the argument should be cast.  */
   DEMANGLE_COMPONENT_CAST,
+  /* A nullary expression.  The left subtree is the operator.  */
+  DEMANGLE_COMPONENT_NULLARY,
   /* A unary expression.  The left subtree is the operator, and the
      right subtree is the single argument.  */
   DEMANGLE_COMPONENT_UNARY,
diff --git a/include/dis-asm.h b/include/dis-asm.h
index d2334c6..f9c8ae9 100644
--- a/include/dis-asm.h
+++ b/include/dis-asm.h
@@ -1,7 +1,7 @@
 /* Interface between the opcode library and its callers.
 
    Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010,
-   2011  Free Software Foundation, Inc.
+   2011, 2012 Free Software Foundation, Inc.
 
    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
@@ -260,6 +260,8 @@ extern int print_insn_m32c	        (bfd_vma, disassemble_info *);
 extern int print_insn_m32r		(bfd_vma, disassemble_info *);
 extern int print_insn_m68hc11		(bfd_vma, disassemble_info *);
 extern int print_insn_m68hc12		(bfd_vma, disassemble_info *);
+extern int print_insn_m9s12x		(bfd_vma, disassemble_info *);
+extern int print_insn_m9s12xg		(bfd_vma, disassemble_info *);
 extern int print_insn_m68k		(bfd_vma, disassemble_info *);
 extern int print_insn_m88k		(bfd_vma, disassemble_info *);
 extern int print_insn_mcore		(bfd_vma, disassemble_info *);
@@ -293,6 +295,7 @@ extern int print_insn_v850		(bfd_vma, disassemble_info *);
 extern int print_insn_vax		(bfd_vma, disassemble_info *);
 extern int print_insn_w65		(bfd_vma, disassemble_info *);
 extern int print_insn_xc16x		(bfd_vma, disassemble_info *);
+extern int print_insn_xgate             (bfd_vma, disassemble_info *);
 extern int print_insn_xstormy16		(bfd_vma, disassemble_info *);
 extern int print_insn_xtensa		(bfd_vma, disassemble_info *);
 extern int print_insn_z80		(bfd_vma, disassemble_info *);
@@ -314,6 +317,7 @@ extern int  get_arm_regname_num_options (void);
 extern int  set_arm_regname_option (int);
 extern int  get_arm_regnames (int, const char **, const char **, const char *const **);
 extern bfd_boolean arm_symbol_is_valid (asymbol *, struct disassemble_info *);
+extern void disassemble_init_powerpc (struct disassemble_info *);
 
 /* Fetch the disassembler for a given BFD, if that support is available.  */
 extern disassembler_ftype disassembler (bfd *);
diff --git a/include/dwarf2.def b/include/dwarf2.def
new file mode 100644
index 0000000..3c3dfcc
--- /dev/null
+++ b/include/dwarf2.def
@@ -0,0 +1,685 @@
+/* -*- c -*-
+   Declarations and definitions of codes relating to the DWARF2 and
+   DWARF3 symbolic debugging information formats.
+   Copyright (C) 1992, 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002,
+   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+   Free Software Foundation, Inc.
+
+   Written by Gary Funck (gary at intrepid.com) The Ada Joint Program
+   Office (AJPO), Florida State University and Silicon Graphics Inc.
+   provided support for this effort -- June 21, 1995.
+
+   Derived from the DWARF 1 implementation written by Ron Guilmette
+   (rfg at netcom.com), November 1990.
+
+   This file is part of GCC.
+
+   GCC 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 3, or (at your option) any later
+   version.
+
+   GCC 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.
+
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This file is derived from the DWARF specification (a public document)
+   Revision 2.0.0 (July 27, 1993) developed by the UNIX International
+   Programming Languages Special Interest Group (UI/PLSIG) and distributed
+   by UNIX International.  Copies of this specification are available from
+   UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054.
+
+   This file also now contains definitions from the DWARF 3 specification
+   published Dec 20, 2005, available from: http://dwarf.freestandards.org.
+
+   This file also now contains definitions from the DWARF 4
+   specification, available from: http://dwarfstd.org/ */
+
+/* This file declares various DWARF-related constants using a set of
+   macros which can be redefined by the including file.
+   
+   The macros are in sections.  Each section corresponds to a single
+   set of DWARF constants and has a corresponding key.  The key is
+   used in all the macro names.
+   
+   The sections are TAG (for DW_TAG_ constants), FORM (DW_FORM_), AT
+   (DW_AT_), OP (DW_OP_), ATE (DW_ATE_), and CFA (DW_CFA_).
+   
+   Using TAG as an example, the following macros may be used for each
+   key:
+   
+   DW_FIRST_TAG(name, value) - Introduce the first DW_TAG constant.
+   
+   DW_TAG(name, value) - Define a subsequent constant.
+   
+   DW_TAG_DUP(name, value) - Define a subsequent constant whose value
+   is a duplicate of some other constant.  Not all keys use the _DUP
+   macro form.  If more than one name shares a value, then the base
+   (DW_TAG) form will be the preferred name and DW_TAG_DUP will hold
+   any alternate names.
+   
+   DW_END_TAG - Invoked at the end of the DW_TAG constants.  */
+
+DW_FIRST_TAG (DW_TAG_padding, 0x00)
+DW_TAG (DW_TAG_array_type, 0x01)
+DW_TAG (DW_TAG_class_type, 0x02)
+DW_TAG (DW_TAG_entry_point, 0x03)
+DW_TAG (DW_TAG_enumeration_type, 0x04)
+DW_TAG (DW_TAG_formal_parameter, 0x05)
+DW_TAG (DW_TAG_imported_declaration, 0x08)
+DW_TAG (DW_TAG_label, 0x0a)
+DW_TAG (DW_TAG_lexical_block, 0x0b)
+DW_TAG (DW_TAG_member, 0x0d)
+DW_TAG (DW_TAG_pointer_type, 0x0f)
+DW_TAG (DW_TAG_reference_type, 0x10)
+DW_TAG (DW_TAG_compile_unit, 0x11)
+DW_TAG (DW_TAG_string_type, 0x12)
+DW_TAG (DW_TAG_structure_type, 0x13)
+DW_TAG (DW_TAG_subroutine_type, 0x15)
+DW_TAG (DW_TAG_typedef, 0x16)
+DW_TAG (DW_TAG_union_type, 0x17)
+DW_TAG (DW_TAG_unspecified_parameters, 0x18)
+DW_TAG (DW_TAG_variant, 0x19)
+DW_TAG (DW_TAG_common_block, 0x1a)
+DW_TAG (DW_TAG_common_inclusion, 0x1b)
+DW_TAG (DW_TAG_inheritance, 0x1c)
+DW_TAG (DW_TAG_inlined_subroutine, 0x1d)
+DW_TAG (DW_TAG_module, 0x1e)
+DW_TAG (DW_TAG_ptr_to_member_type, 0x1f)
+DW_TAG (DW_TAG_set_type, 0x20)
+DW_TAG (DW_TAG_subrange_type, 0x21)
+DW_TAG (DW_TAG_with_stmt, 0x22)
+DW_TAG (DW_TAG_access_declaration, 0x23)
+DW_TAG (DW_TAG_base_type, 0x24)
+DW_TAG (DW_TAG_catch_block, 0x25)
+DW_TAG (DW_TAG_const_type, 0x26)
+DW_TAG (DW_TAG_constant, 0x27)
+DW_TAG (DW_TAG_enumerator, 0x28)
+DW_TAG (DW_TAG_file_type, 0x29)
+DW_TAG (DW_TAG_friend, 0x2a)
+DW_TAG (DW_TAG_namelist, 0x2b)
+DW_TAG (DW_TAG_namelist_item, 0x2c)
+DW_TAG (DW_TAG_packed_type, 0x2d)
+DW_TAG (DW_TAG_subprogram, 0x2e)
+DW_TAG (DW_TAG_template_type_param, 0x2f)
+DW_TAG (DW_TAG_template_value_param, 0x30)
+DW_TAG (DW_TAG_thrown_type, 0x31)
+DW_TAG (DW_TAG_try_block, 0x32)
+DW_TAG (DW_TAG_variant_part, 0x33)
+DW_TAG (DW_TAG_variable, 0x34)
+DW_TAG (DW_TAG_volatile_type, 0x35)
+/* DWARF 3.  */
+DW_TAG (DW_TAG_dwarf_procedure, 0x36)
+DW_TAG (DW_TAG_restrict_type, 0x37)
+DW_TAG (DW_TAG_interface_type, 0x38)
+DW_TAG (DW_TAG_namespace, 0x39)
+DW_TAG (DW_TAG_imported_module, 0x3a)
+DW_TAG (DW_TAG_unspecified_type, 0x3b)
+DW_TAG (DW_TAG_partial_unit, 0x3c)
+DW_TAG (DW_TAG_imported_unit, 0x3d)
+DW_TAG (DW_TAG_condition, 0x3f)
+DW_TAG (DW_TAG_shared_type, 0x40)
+/* DWARF 4.  */
+DW_TAG (DW_TAG_type_unit, 0x41)
+DW_TAG (DW_TAG_rvalue_reference_type, 0x42)
+DW_TAG (DW_TAG_template_alias, 0x43)
+
+DW_TAG_DUP (DW_TAG_lo_user, 0x4080)
+DW_TAG_DUP (DW_TAG_hi_user, 0xffff)
+
+/* SGI/MIPS Extensions.  */
+DW_TAG (DW_TAG_MIPS_loop, 0x4081)
+
+/* HP extensions.  See: ftp://ftp.hp.com/pub/lang/tools/WDB/wdb-4.0.tar.gz .  */
+DW_TAG (DW_TAG_HP_array_descriptor, 0x4090)
+DW_TAG (DW_TAG_HP_Bliss_field, 0x4091)
+DW_TAG (DW_TAG_HP_Bliss_field_set, 0x4092)
+
+/* GNU extensions.  */
+DW_TAG (DW_TAG_format_label, 0x4101)	/* For FORTRAN 77 and Fortran 90.  */
+DW_TAG (DW_TAG_function_template, 0x4102)	/* For C++.  */
+DW_TAG (DW_TAG_class_template, 0x4103)	/* For C++.  */
+DW_TAG (DW_TAG_GNU_BINCL, 0x4104)
+DW_TAG (DW_TAG_GNU_EINCL, 0x4105)
+/* Template template parameter.
+   See http://gcc.gnu.org/wiki/TemplateParmsDwarf .  */
+DW_TAG (DW_TAG_GNU_template_template_param, 0x4106)
+
+/* Template parameter pack extension, specified at
+   http://wiki.dwarfstd.org/index.php?title=C%2B%2B0x:_Variadic_templates
+   The values of these two TAGS are in the DW_TAG_GNU_* space until the tags
+   are properly part of DWARF 5.  */
+DW_TAG (DW_TAG_GNU_template_parameter_pack, 0x4107)
+DW_TAG (DW_TAG_GNU_formal_parameter_pack, 0x4108)
+/* The GNU call site extension, specified at
+   http://www.dwarfstd.org/ShowIssue.php?issue=100909.2&type=open .
+   The values of these two TAGS are in the DW_TAG_GNU_* space until the tags
+   are properly part of DWARF 5.  */
+DW_TAG (DW_TAG_GNU_call_site, 0x4109)
+DW_TAG (DW_TAG_GNU_call_site_parameter, 0x410a)
+/* Extensions for UPC.  See: http://dwarfstd.org/doc/DWARF4.pdf.  */
+DW_TAG (DW_TAG_upc_shared_type, 0x8765)
+DW_TAG (DW_TAG_upc_strict_type, 0x8766)
+DW_TAG (DW_TAG_upc_relaxed_type, 0x8767)
+/* PGI (STMicroelectronics) extensions.  No documentation available.  */
+DW_TAG (DW_TAG_PGI_kanji_type, 0xA000)
+DW_TAG (DW_TAG_PGI_interface_block, 0xA020)
+DW_END_TAG
+
+DW_FIRST_FORM (DW_FORM_addr, 0x01)
+DW_FORM (DW_FORM_block2, 0x03)
+DW_FORM (DW_FORM_block4, 0x04)
+DW_FORM (DW_FORM_data2, 0x05)
+DW_FORM (DW_FORM_data4, 0x06)
+DW_FORM (DW_FORM_data8, 0x07)
+DW_FORM (DW_FORM_string, 0x08)
+DW_FORM (DW_FORM_block, 0x09)
+DW_FORM (DW_FORM_block1, 0x0a)
+DW_FORM (DW_FORM_data1, 0x0b)
+DW_FORM (DW_FORM_flag, 0x0c)
+DW_FORM (DW_FORM_sdata, 0x0d)
+DW_FORM (DW_FORM_strp, 0x0e)
+DW_FORM (DW_FORM_udata, 0x0f)
+DW_FORM (DW_FORM_ref_addr, 0x10)
+DW_FORM (DW_FORM_ref1, 0x11)
+DW_FORM (DW_FORM_ref2, 0x12)
+DW_FORM (DW_FORM_ref4, 0x13)
+DW_FORM (DW_FORM_ref8, 0x14)
+DW_FORM (DW_FORM_ref_udata, 0x15)
+DW_FORM (DW_FORM_indirect, 0x16)
+/* DWARF 4.  */
+DW_FORM (DW_FORM_sec_offset, 0x17)
+DW_FORM (DW_FORM_exprloc, 0x18)
+DW_FORM (DW_FORM_flag_present, 0x19)
+DW_FORM (DW_FORM_ref_sig8, 0x20)
+/* Extensions for Fission.  See http://gcc.gnu.org/wiki/DebugFission.  */
+DW_FORM (DW_FORM_GNU_addr_index, 0x1f01)
+DW_FORM (DW_FORM_GNU_str_index, 0x1f02)
+/* Extensions for DWZ multifile.
+   See http://www.dwarfstd.org/ShowIssue.php?issue=120604.1&type=open .  */
+DW_FORM (DW_FORM_GNU_ref_alt, 0x1f20)
+DW_FORM (DW_FORM_GNU_strp_alt, 0x1f21)
+DW_END_FORM
+
+DW_FIRST_AT (DW_AT_sibling, 0x01)
+DW_AT (DW_AT_location, 0x02)
+DW_AT (DW_AT_name, 0x03)
+DW_AT (DW_AT_ordering, 0x09)
+DW_AT (DW_AT_subscr_data, 0x0a)
+DW_AT (DW_AT_byte_size, 0x0b)
+DW_AT (DW_AT_bit_offset, 0x0c)
+DW_AT (DW_AT_bit_size, 0x0d)
+DW_AT (DW_AT_element_list, 0x0f)
+DW_AT (DW_AT_stmt_list, 0x10)
+DW_AT (DW_AT_low_pc, 0x11)
+DW_AT (DW_AT_high_pc, 0x12)
+DW_AT (DW_AT_language, 0x13)
+DW_AT (DW_AT_member, 0x14)
+DW_AT (DW_AT_discr, 0x15)
+DW_AT (DW_AT_discr_value, 0x16)
+DW_AT (DW_AT_visibility, 0x17)
+DW_AT (DW_AT_import, 0x18)
+DW_AT (DW_AT_string_length, 0x19)
+DW_AT (DW_AT_common_reference, 0x1a)
+DW_AT (DW_AT_comp_dir, 0x1b)
+DW_AT (DW_AT_const_value, 0x1c)
+DW_AT (DW_AT_containing_type, 0x1d)
+DW_AT (DW_AT_default_value, 0x1e)
+DW_AT (DW_AT_inline, 0x20)
+DW_AT (DW_AT_is_optional, 0x21)
+DW_AT (DW_AT_lower_bound, 0x22)
+DW_AT (DW_AT_producer, 0x25)
+DW_AT (DW_AT_prototyped, 0x27)
+DW_AT (DW_AT_return_addr, 0x2a)
+DW_AT (DW_AT_start_scope, 0x2c)
+DW_AT (DW_AT_bit_stride, 0x2e)
+DW_AT (DW_AT_upper_bound, 0x2f)
+DW_AT (DW_AT_abstract_origin, 0x31)
+DW_AT (DW_AT_accessibility, 0x32)
+DW_AT (DW_AT_address_class, 0x33)
+DW_AT (DW_AT_artificial, 0x34)
+DW_AT (DW_AT_base_types, 0x35)
+DW_AT (DW_AT_calling_convention, 0x36)
+DW_AT (DW_AT_count, 0x37)
+DW_AT (DW_AT_data_member_location, 0x38)
+DW_AT (DW_AT_decl_column, 0x39)
+DW_AT (DW_AT_decl_file, 0x3a)
+DW_AT (DW_AT_decl_line, 0x3b)
+DW_AT (DW_AT_declaration, 0x3c)
+DW_AT (DW_AT_discr_list, 0x3d)
+DW_AT (DW_AT_encoding, 0x3e)
+DW_AT (DW_AT_external, 0x3f)
+DW_AT (DW_AT_frame_base, 0x40)
+DW_AT (DW_AT_friend, 0x41)
+DW_AT (DW_AT_identifier_case, 0x42)
+DW_AT (DW_AT_macro_info, 0x43)
+DW_AT (DW_AT_namelist_items, 0x44)
+DW_AT (DW_AT_priority, 0x45)
+DW_AT (DW_AT_segment, 0x46)
+DW_AT (DW_AT_specification, 0x47)
+DW_AT (DW_AT_static_link, 0x48)
+DW_AT (DW_AT_type, 0x49)
+DW_AT (DW_AT_use_location, 0x4a)
+DW_AT (DW_AT_variable_parameter, 0x4b)
+DW_AT (DW_AT_virtuality, 0x4c)
+DW_AT (DW_AT_vtable_elem_location, 0x4d)
+/* DWARF 3 values.  */
+DW_AT (DW_AT_allocated, 0x4e)
+DW_AT (DW_AT_associated, 0x4f)
+DW_AT (DW_AT_data_location, 0x50)
+DW_AT (DW_AT_byte_stride, 0x51)
+DW_AT (DW_AT_entry_pc, 0x52)
+DW_AT (DW_AT_use_UTF8, 0x53)
+DW_AT (DW_AT_extension, 0x54)
+DW_AT (DW_AT_ranges, 0x55)
+DW_AT (DW_AT_trampoline, 0x56)
+DW_AT (DW_AT_call_column, 0x57)
+DW_AT (DW_AT_call_file, 0x58)
+DW_AT (DW_AT_call_line, 0x59)
+DW_AT (DW_AT_description, 0x5a)
+DW_AT (DW_AT_binary_scale, 0x5b)
+DW_AT (DW_AT_decimal_scale, 0x5c)
+DW_AT (DW_AT_small, 0x5d)
+DW_AT (DW_AT_decimal_sign, 0x5e)
+DW_AT (DW_AT_digit_count, 0x5f)
+DW_AT (DW_AT_picture_string, 0x60)
+DW_AT (DW_AT_mutable, 0x61)
+DW_AT (DW_AT_threads_scaled, 0x62)
+DW_AT (DW_AT_explicit, 0x63)
+DW_AT (DW_AT_object_pointer, 0x64)
+DW_AT (DW_AT_endianity, 0x65)
+DW_AT (DW_AT_elemental, 0x66)
+DW_AT (DW_AT_pure, 0x67)
+DW_AT (DW_AT_recursive, 0x68)
+/* DWARF 4.  */
+DW_AT (DW_AT_signature, 0x69)
+DW_AT (DW_AT_main_subprogram, 0x6a)
+DW_AT (DW_AT_data_bit_offset, 0x6b)
+DW_AT (DW_AT_const_expr, 0x6c)
+DW_AT (DW_AT_enum_class, 0x6d)
+DW_AT (DW_AT_linkage_name, 0x6e)
+
+DW_AT_DUP (DW_AT_lo_user, 0x2000) /* Implementation-defined range start.  */
+DW_AT_DUP (DW_AT_hi_user, 0x3fff) /* Implementation-defined range end.  */
+
+/* SGI/MIPS extensions.  */
+DW_AT (DW_AT_MIPS_fde, 0x2001)
+DW_AT (DW_AT_MIPS_loop_begin, 0x2002)
+DW_AT (DW_AT_MIPS_tail_loop_begin, 0x2003)
+DW_AT (DW_AT_MIPS_epilog_begin, 0x2004)
+DW_AT (DW_AT_MIPS_loop_unroll_factor, 0x2005)
+DW_AT (DW_AT_MIPS_software_pipeline_depth, 0x2006)
+DW_AT (DW_AT_MIPS_linkage_name, 0x2007)
+DW_AT (DW_AT_MIPS_stride, 0x2008)
+DW_AT (DW_AT_MIPS_abstract_name, 0x2009)
+DW_AT (DW_AT_MIPS_clone_origin, 0x200a)
+DW_AT (DW_AT_MIPS_has_inlines, 0x200b)
+/* HP extensions.  */
+DW_AT (DW_AT_HP_block_index, 0x2000)
+DW_AT_DUP (DW_AT_HP_unmodifiable, 0x2001) /* Same as DW_AT_MIPS_fde.  */
+DW_AT_DUP (DW_AT_HP_prologue, 0x2005) /* Same as DW_AT_MIPS_loop_unroll.  */
+DW_AT_DUP (DW_AT_HP_epilogue, 0x2008) /* Same as DW_AT_MIPS_stride.  */
+DW_AT (DW_AT_HP_actuals_stmt_list, 0x2010)
+DW_AT (DW_AT_HP_proc_per_section, 0x2011)
+DW_AT (DW_AT_HP_raw_data_ptr, 0x2012)
+DW_AT (DW_AT_HP_pass_by_reference, 0x2013)
+DW_AT (DW_AT_HP_opt_level, 0x2014)
+DW_AT (DW_AT_HP_prof_version_id, 0x2015)
+DW_AT (DW_AT_HP_opt_flags, 0x2016)
+DW_AT (DW_AT_HP_cold_region_low_pc, 0x2017)
+DW_AT (DW_AT_HP_cold_region_high_pc, 0x2018)
+DW_AT (DW_AT_HP_all_variables_modifiable, 0x2019)
+DW_AT (DW_AT_HP_linkage_name, 0x201a)
+DW_AT (DW_AT_HP_prof_flags, 0x201b)  /* In comp unit of procs_info for -g.  */
+DW_AT (DW_AT_HP_unit_name, 0x201f)
+DW_AT (DW_AT_HP_unit_size, 0x2020)
+DW_AT (DW_AT_HP_widened_byte_size, 0x2021)
+DW_AT (DW_AT_HP_definition_points, 0x2022)
+DW_AT (DW_AT_HP_default_location, 0x2023)
+DW_AT (DW_AT_HP_is_result_param, 0x2029)
+
+/* GNU extensions.  */
+DW_AT (DW_AT_sf_names, 0x2101)
+DW_AT (DW_AT_src_info, 0x2102)
+DW_AT (DW_AT_mac_info, 0x2103)
+DW_AT (DW_AT_src_coords, 0x2104)
+DW_AT (DW_AT_body_begin, 0x2105)
+DW_AT (DW_AT_body_end, 0x2106)
+DW_AT (DW_AT_GNU_vector, 0x2107)
+/* Thread-safety annotations.
+   See http://gcc.gnu.org/wiki/ThreadSafetyAnnotation .  */
+DW_AT (DW_AT_GNU_guarded_by, 0x2108)
+DW_AT (DW_AT_GNU_pt_guarded_by, 0x2109)
+DW_AT (DW_AT_GNU_guarded, 0x210a)
+DW_AT (DW_AT_GNU_pt_guarded, 0x210b)
+DW_AT (DW_AT_GNU_locks_excluded, 0x210c)
+DW_AT (DW_AT_GNU_exclusive_locks_required, 0x210d)
+DW_AT (DW_AT_GNU_shared_locks_required, 0x210e)
+/* One-definition rule violation detection.
+   See http://gcc.gnu.org/wiki/DwarfSeparateTypeInfo .  */
+DW_AT (DW_AT_GNU_odr_signature, 0x210f)
+/* Template template argument name.
+   See http://gcc.gnu.org/wiki/TemplateParmsDwarf .  */
+DW_AT (DW_AT_GNU_template_name, 0x2110)
+/* The GNU call site extension.
+   See http://www.dwarfstd.org/ShowIssue.php?issue=100909.2&type=open .  */
+DW_AT (DW_AT_GNU_call_site_value, 0x2111)
+DW_AT (DW_AT_GNU_call_site_data_value, 0x2112)
+DW_AT (DW_AT_GNU_call_site_target, 0x2113)
+DW_AT (DW_AT_GNU_call_site_target_clobbered, 0x2114)
+DW_AT (DW_AT_GNU_tail_call, 0x2115)
+DW_AT (DW_AT_GNU_all_tail_call_sites, 0x2116)
+DW_AT (DW_AT_GNU_all_call_sites, 0x2117)
+DW_AT (DW_AT_GNU_all_source_call_sites, 0x2118)
+/* Section offset into .debug_macro section.  */
+DW_AT (DW_AT_GNU_macros, 0x2119)
+/* Extensions for Fission.  See http://gcc.gnu.org/wiki/DebugFission.  */
+DW_AT (DW_AT_GNU_dwo_name, 0x2130)
+DW_AT (DW_AT_GNU_dwo_id, 0x2131)
+DW_AT (DW_AT_GNU_ranges_base, 0x2132)
+DW_AT (DW_AT_GNU_addr_base, 0x2133)
+DW_AT (DW_AT_GNU_pubnames, 0x2134)
+DW_AT (DW_AT_GNU_pubtypes, 0x2135)
+/* VMS extensions.  */
+DW_AT (DW_AT_VMS_rtnbeg_pd_address, 0x2201)
+/* GNAT extensions.  */
+/* GNAT descriptive type.
+   See http://gcc.gnu.org/wiki/DW_AT_GNAT_descriptive_type .  */
+DW_AT (DW_AT_use_GNAT_descriptive_type, 0x2301)
+DW_AT (DW_AT_GNAT_descriptive_type, 0x2302)
+/* UPC extension.  */
+DW_AT (DW_AT_upc_threads_scaled, 0x3210)
+/* PGI (STMicroelectronics) extensions.  */
+DW_AT (DW_AT_PGI_lbase, 0x3a00)
+DW_AT (DW_AT_PGI_soffset, 0x3a01)
+DW_AT (DW_AT_PGI_lstride, 0x3a02)
+DW_END_AT
+
+DW_FIRST_OP (DW_OP_addr, 0x03)
+DW_OP (DW_OP_deref, 0x06)
+DW_OP (DW_OP_const1u, 0x08)
+DW_OP (DW_OP_const1s, 0x09)
+DW_OP (DW_OP_const2u, 0x0a)
+DW_OP (DW_OP_const2s, 0x0b)
+DW_OP (DW_OP_const4u, 0x0c)
+DW_OP (DW_OP_const4s, 0x0d)
+DW_OP (DW_OP_const8u, 0x0e)
+DW_OP (DW_OP_const8s, 0x0f)
+DW_OP (DW_OP_constu, 0x10)
+DW_OP (DW_OP_consts, 0x11)
+DW_OP (DW_OP_dup, 0x12)
+DW_OP (DW_OP_drop, 0x13)
+DW_OP (DW_OP_over, 0x14)
+DW_OP (DW_OP_pick, 0x15)
+DW_OP (DW_OP_swap, 0x16)
+DW_OP (DW_OP_rot, 0x17)
+DW_OP (DW_OP_xderef, 0x18)
+DW_OP (DW_OP_abs, 0x19)
+DW_OP (DW_OP_and, 0x1a)
+DW_OP (DW_OP_div, 0x1b)
+DW_OP (DW_OP_minus, 0x1c)
+DW_OP (DW_OP_mod, 0x1d)
+DW_OP (DW_OP_mul, 0x1e)
+DW_OP (DW_OP_neg, 0x1f)
+DW_OP (DW_OP_not, 0x20)
+DW_OP (DW_OP_or, 0x21)
+DW_OP (DW_OP_plus, 0x22)
+DW_OP (DW_OP_plus_uconst, 0x23)
+DW_OP (DW_OP_shl, 0x24)
+DW_OP (DW_OP_shr, 0x25)
+DW_OP (DW_OP_shra, 0x26)
+DW_OP (DW_OP_xor, 0x27)
+DW_OP (DW_OP_bra, 0x28)
+DW_OP (DW_OP_eq, 0x29)
+DW_OP (DW_OP_ge, 0x2a)
+DW_OP (DW_OP_gt, 0x2b)
+DW_OP (DW_OP_le, 0x2c)
+DW_OP (DW_OP_lt, 0x2d)
+DW_OP (DW_OP_ne, 0x2e)
+DW_OP (DW_OP_skip, 0x2f)
+DW_OP (DW_OP_lit0, 0x30)
+DW_OP (DW_OP_lit1, 0x31)
+DW_OP (DW_OP_lit2, 0x32)
+DW_OP (DW_OP_lit3, 0x33)
+DW_OP (DW_OP_lit4, 0x34)
+DW_OP (DW_OP_lit5, 0x35)
+DW_OP (DW_OP_lit6, 0x36)
+DW_OP (DW_OP_lit7, 0x37)
+DW_OP (DW_OP_lit8, 0x38)
+DW_OP (DW_OP_lit9, 0x39)
+DW_OP (DW_OP_lit10, 0x3a)
+DW_OP (DW_OP_lit11, 0x3b)
+DW_OP (DW_OP_lit12, 0x3c)
+DW_OP (DW_OP_lit13, 0x3d)
+DW_OP (DW_OP_lit14, 0x3e)
+DW_OP (DW_OP_lit15, 0x3f)
+DW_OP (DW_OP_lit16, 0x40)
+DW_OP (DW_OP_lit17, 0x41)
+DW_OP (DW_OP_lit18, 0x42)
+DW_OP (DW_OP_lit19, 0x43)
+DW_OP (DW_OP_lit20, 0x44)
+DW_OP (DW_OP_lit21, 0x45)
+DW_OP (DW_OP_lit22, 0x46)
+DW_OP (DW_OP_lit23, 0x47)
+DW_OP (DW_OP_lit24, 0x48)
+DW_OP (DW_OP_lit25, 0x49)
+DW_OP (DW_OP_lit26, 0x4a)
+DW_OP (DW_OP_lit27, 0x4b)
+DW_OP (DW_OP_lit28, 0x4c)
+DW_OP (DW_OP_lit29, 0x4d)
+DW_OP (DW_OP_lit30, 0x4e)
+DW_OP (DW_OP_lit31, 0x4f)
+DW_OP (DW_OP_reg0, 0x50)
+DW_OP (DW_OP_reg1, 0x51)
+DW_OP (DW_OP_reg2, 0x52)
+DW_OP (DW_OP_reg3, 0x53)
+DW_OP (DW_OP_reg4, 0x54)
+DW_OP (DW_OP_reg5, 0x55)
+DW_OP (DW_OP_reg6, 0x56)
+DW_OP (DW_OP_reg7, 0x57)
+DW_OP (DW_OP_reg8, 0x58)
+DW_OP (DW_OP_reg9, 0x59)
+DW_OP (DW_OP_reg10, 0x5a)
+DW_OP (DW_OP_reg11, 0x5b)
+DW_OP (DW_OP_reg12, 0x5c)
+DW_OP (DW_OP_reg13, 0x5d)
+DW_OP (DW_OP_reg14, 0x5e)
+DW_OP (DW_OP_reg15, 0x5f)
+DW_OP (DW_OP_reg16, 0x60)
+DW_OP (DW_OP_reg17, 0x61)
+DW_OP (DW_OP_reg18, 0x62)
+DW_OP (DW_OP_reg19, 0x63)
+DW_OP (DW_OP_reg20, 0x64)
+DW_OP (DW_OP_reg21, 0x65)
+DW_OP (DW_OP_reg22, 0x66)
+DW_OP (DW_OP_reg23, 0x67)
+DW_OP (DW_OP_reg24, 0x68)
+DW_OP (DW_OP_reg25, 0x69)
+DW_OP (DW_OP_reg26, 0x6a)
+DW_OP (DW_OP_reg27, 0x6b)
+DW_OP (DW_OP_reg28, 0x6c)
+DW_OP (DW_OP_reg29, 0x6d)
+DW_OP (DW_OP_reg30, 0x6e)
+DW_OP (DW_OP_reg31, 0x6f)
+DW_OP (DW_OP_breg0, 0x70)
+DW_OP (DW_OP_breg1, 0x71)
+DW_OP (DW_OP_breg2, 0x72)
+DW_OP (DW_OP_breg3, 0x73)
+DW_OP (DW_OP_breg4, 0x74)
+DW_OP (DW_OP_breg5, 0x75)
+DW_OP (DW_OP_breg6, 0x76)
+DW_OP (DW_OP_breg7, 0x77)
+DW_OP (DW_OP_breg8, 0x78)
+DW_OP (DW_OP_breg9, 0x79)
+DW_OP (DW_OP_breg10, 0x7a)
+DW_OP (DW_OP_breg11, 0x7b)
+DW_OP (DW_OP_breg12, 0x7c)
+DW_OP (DW_OP_breg13, 0x7d)
+DW_OP (DW_OP_breg14, 0x7e)
+DW_OP (DW_OP_breg15, 0x7f)
+DW_OP (DW_OP_breg16, 0x80)
+DW_OP (DW_OP_breg17, 0x81)
+DW_OP (DW_OP_breg18, 0x82)
+DW_OP (DW_OP_breg19, 0x83)
+DW_OP (DW_OP_breg20, 0x84)
+DW_OP (DW_OP_breg21, 0x85)
+DW_OP (DW_OP_breg22, 0x86)
+DW_OP (DW_OP_breg23, 0x87)
+DW_OP (DW_OP_breg24, 0x88)
+DW_OP (DW_OP_breg25, 0x89)
+DW_OP (DW_OP_breg26, 0x8a)
+DW_OP (DW_OP_breg27, 0x8b)
+DW_OP (DW_OP_breg28, 0x8c)
+DW_OP (DW_OP_breg29, 0x8d)
+DW_OP (DW_OP_breg30, 0x8e)
+DW_OP (DW_OP_breg31, 0x8f)
+DW_OP (DW_OP_regx, 0x90)
+DW_OP (DW_OP_fbreg, 0x91)
+DW_OP (DW_OP_bregx, 0x92)
+DW_OP (DW_OP_piece, 0x93)
+DW_OP (DW_OP_deref_size, 0x94)
+DW_OP (DW_OP_xderef_size, 0x95)
+DW_OP (DW_OP_nop, 0x96)
+/* DWARF 3 extensions.  */
+DW_OP (DW_OP_push_object_address, 0x97)
+DW_OP (DW_OP_call2, 0x98)
+DW_OP (DW_OP_call4, 0x99)
+DW_OP (DW_OP_call_ref, 0x9a)
+DW_OP (DW_OP_form_tls_address, 0x9b)
+DW_OP (DW_OP_call_frame_cfa, 0x9c)
+DW_OP (DW_OP_bit_piece, 0x9d)
+
+/* DWARF 4 extensions.  */
+DW_OP (DW_OP_implicit_value, 0x9e)
+DW_OP (DW_OP_stack_value, 0x9f)
+
+DW_OP_DUP (DW_OP_lo_user, 0xe0)	/* Implementation-defined range start.  */
+DW_OP_DUP (DW_OP_hi_user, 0xff)	/* Implementation-defined range end.  */
+
+/* GNU extensions.  */
+DW_OP (DW_OP_GNU_push_tls_address, 0xe0)
+/* The following is for marking variables that are uninitialized.  */
+DW_OP (DW_OP_GNU_uninit, 0xf0)
+DW_OP (DW_OP_GNU_encoded_addr, 0xf1)
+/* The GNU implicit pointer extension.
+   See http://www.dwarfstd.org/ShowIssue.php?issue=100831.1&type=open .  */
+DW_OP (DW_OP_GNU_implicit_pointer, 0xf2)
+/* The GNU entry value extension.
+   See http://www.dwarfstd.org/ShowIssue.php?issue=100909.1&type=open .  */
+DW_OP (DW_OP_GNU_entry_value, 0xf3)
+/* The GNU typed stack extension.
+   See http://www.dwarfstd.org/doc/040408.1.html .  */
+DW_OP (DW_OP_GNU_const_type, 0xf4)
+DW_OP (DW_OP_GNU_regval_type, 0xf5)
+DW_OP (DW_OP_GNU_deref_type, 0xf6)
+DW_OP (DW_OP_GNU_convert, 0xf7)
+DW_OP (DW_OP_GNU_reinterpret, 0xf9)
+/* The GNU parameter ref extension.  */
+DW_OP (DW_OP_GNU_parameter_ref, 0xfa)
+/* Extension for Fission.  See http://gcc.gnu.org/wiki/DebugFission.  */
+DW_OP (DW_OP_GNU_addr_index, 0xfb)
+DW_OP (DW_OP_GNU_const_index, 0xfc)
+/* HP extensions.  */
+DW_OP_DUP (DW_OP_HP_unknown, 0xe0) /* Ouch, the same as GNU_push_tls_address.  */
+DW_OP (DW_OP_HP_is_value, 0xe1)
+DW_OP (DW_OP_HP_fltconst4, 0xe2)
+DW_OP (DW_OP_HP_fltconst8, 0xe3)
+DW_OP (DW_OP_HP_mod_range, 0xe4)
+DW_OP (DW_OP_HP_unmod_range, 0xe5)
+DW_OP (DW_OP_HP_tls, 0xe6)
+/* PGI (STMicroelectronics) extensions.  */
+DW_OP (DW_OP_PGI_omp_thread_num, 0xf8)
+DW_END_OP
+
+DW_FIRST_ATE (DW_ATE_void, 0x0)
+DW_ATE (DW_ATE_address, 0x1)
+DW_ATE (DW_ATE_boolean, 0x2)
+DW_ATE (DW_ATE_complex_float, 0x3)
+DW_ATE (DW_ATE_float, 0x4)
+DW_ATE (DW_ATE_signed, 0x5)
+DW_ATE (DW_ATE_signed_char, 0x6)
+DW_ATE (DW_ATE_unsigned, 0x7)
+DW_ATE (DW_ATE_unsigned_char, 0x8)
+/* DWARF 3.  */
+DW_ATE (DW_ATE_imaginary_float, 0x9)
+DW_ATE (DW_ATE_packed_decimal, 0xa)
+DW_ATE (DW_ATE_numeric_string, 0xb)
+DW_ATE (DW_ATE_edited, 0xc)
+DW_ATE (DW_ATE_signed_fixed, 0xd)
+DW_ATE (DW_ATE_unsigned_fixed, 0xe)
+DW_ATE (DW_ATE_decimal_float, 0xf)
+/* DWARF 4.  */
+DW_ATE (DW_ATE_UTF, 0x10)
+
+DW_ATE_DUP (DW_ATE_lo_user, 0x80)
+DW_ATE_DUP (DW_ATE_hi_user, 0xff)
+
+/* HP extensions.  */
+DW_ATE (DW_ATE_HP_float80, 0x80) /* Floating-point (80 bit).  */
+DW_ATE (DW_ATE_HP_complex_float80, 0x81) /* Complex floating-point (80 bit).  */
+DW_ATE (DW_ATE_HP_float128, 0x82) /* Floating-point (128 bit).  */
+DW_ATE (DW_ATE_HP_complex_float128, 0x83) /* Complex fp (128 bit).  */
+DW_ATE (DW_ATE_HP_floathpintel, 0x84) /* Floating-point (82 bit IA64).  */
+DW_ATE (DW_ATE_HP_imaginary_float80, 0x85)
+DW_ATE (DW_ATE_HP_imaginary_float128, 0x86)
+DW_ATE (DW_ATE_HP_VAX_float, 0x88) /* F or G floating.  */
+DW_ATE (DW_ATE_HP_VAX_float_d, 0x89) /* D floating.  */
+DW_ATE (DW_ATE_HP_packed_decimal, 0x8a) /* Cobol.  */
+DW_ATE (DW_ATE_HP_zoned_decimal, 0x8b) /* Cobol.  */
+DW_ATE (DW_ATE_HP_edited, 0x8c) /* Cobol.  */
+DW_ATE (DW_ATE_HP_signed_fixed, 0x8d) /* Cobol.  */
+DW_ATE (DW_ATE_HP_unsigned_fixed, 0x8e) /* Cobol.  */
+DW_ATE (DW_ATE_HP_VAX_complex_float, 0x8f) /* F or G floating complex.  */
+DW_ATE (DW_ATE_HP_VAX_complex_float_d, 0x90) /* D floating complex.  */
+
+DW_END_ATE
+
+DW_FIRST_CFA (DW_CFA_advance_loc, 0x40)
+DW_CFA (DW_CFA_offset, 0x80)
+DW_CFA (DW_CFA_restore, 0xc0)
+DW_CFA (DW_CFA_nop, 0x00)
+DW_CFA (DW_CFA_set_loc, 0x01)
+DW_CFA (DW_CFA_advance_loc1, 0x02)
+DW_CFA (DW_CFA_advance_loc2, 0x03)
+DW_CFA (DW_CFA_advance_loc4, 0x04)
+DW_CFA (DW_CFA_offset_extended, 0x05)
+DW_CFA (DW_CFA_restore_extended, 0x06)
+DW_CFA (DW_CFA_undefined, 0x07)
+DW_CFA (DW_CFA_same_value, 0x08)
+DW_CFA (DW_CFA_register, 0x09)
+DW_CFA (DW_CFA_remember_state, 0x0a)
+DW_CFA (DW_CFA_restore_state, 0x0b)
+DW_CFA (DW_CFA_def_cfa, 0x0c)
+DW_CFA (DW_CFA_def_cfa_register, 0x0d)
+DW_CFA (DW_CFA_def_cfa_offset, 0x0e)
+/* DWARF 3.  */
+DW_CFA (DW_CFA_def_cfa_expression, 0x0f)
+DW_CFA (DW_CFA_expression, 0x10)
+DW_CFA (DW_CFA_offset_extended_sf, 0x11)
+DW_CFA (DW_CFA_def_cfa_sf, 0x12)
+DW_CFA (DW_CFA_def_cfa_offset_sf, 0x13)
+DW_CFA (DW_CFA_val_offset, 0x14)
+DW_CFA (DW_CFA_val_offset_sf, 0x15)
+DW_CFA (DW_CFA_val_expression, 0x16)
+
+DW_CFA (DW_CFA_lo_user, 0x1c)
+DW_CFA (DW_CFA_hi_user, 0x3f)
+
+/* SGI/MIPS specific.  */
+DW_CFA (DW_CFA_MIPS_advance_loc8, 0x1d)
+/* GNU extensions.  */
+DW_CFA (DW_CFA_GNU_window_save, 0x2d)
+DW_CFA (DW_CFA_GNU_args_size, 0x2e)
+DW_CFA (DW_CFA_GNU_negative_offset_extended, 0x2f)
+
+DW_END_CFA
diff --git a/include/dwarf2.h b/include/dwarf2.h
index 37cb83f..2c1aeb6 100644
--- a/include/dwarf2.h
+++ b/include/dwarf2.h
@@ -1,7 +1,7 @@
 /* Declarations and definitions of codes relating to the DWARF2 and
    DWARF3 symbolic debugging information formats.
    Copyright (C) 1992, 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002,
-   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    Written by Gary Funck (gary at intrepid.com) The Ada Joint Program
@@ -41,588 +41,71 @@
    This file also now contains definitions from the DWARF 3 specification
    published Dec 20, 2005, available from: http://dwarf.freestandards.org.  */
 
-/* This file is shared between GCC and GDB, and should not contain
-   prototypes.  */
-
 #ifndef _DWARF2_H
 #define _DWARF2_H
 
-/* Tag names and codes.  */
-enum dwarf_tag
-  {
-    DW_TAG_padding = 0x00,
-    DW_TAG_array_type = 0x01,
-    DW_TAG_class_type = 0x02,
-    DW_TAG_entry_point = 0x03,
-    DW_TAG_enumeration_type = 0x04,
-    DW_TAG_formal_parameter = 0x05,
-    DW_TAG_imported_declaration = 0x08,
-    DW_TAG_label = 0x0a,
-    DW_TAG_lexical_block = 0x0b,
-    DW_TAG_member = 0x0d,
-    DW_TAG_pointer_type = 0x0f,
-    DW_TAG_reference_type = 0x10,
-    DW_TAG_compile_unit = 0x11,
-    DW_TAG_string_type = 0x12,
-    DW_TAG_structure_type = 0x13,
-    DW_TAG_subroutine_type = 0x15,
-    DW_TAG_typedef = 0x16,
-    DW_TAG_union_type = 0x17,
-    DW_TAG_unspecified_parameters = 0x18,
-    DW_TAG_variant = 0x19,
-    DW_TAG_common_block = 0x1a,
-    DW_TAG_common_inclusion = 0x1b,
-    DW_TAG_inheritance = 0x1c,
-    DW_TAG_inlined_subroutine = 0x1d,
-    DW_TAG_module = 0x1e,
-    DW_TAG_ptr_to_member_type = 0x1f,
-    DW_TAG_set_type = 0x20,
-    DW_TAG_subrange_type = 0x21,
-    DW_TAG_with_stmt = 0x22,
-    DW_TAG_access_declaration = 0x23,
-    DW_TAG_base_type = 0x24,
-    DW_TAG_catch_block = 0x25,
-    DW_TAG_const_type = 0x26,
-    DW_TAG_constant = 0x27,
-    DW_TAG_enumerator = 0x28,
-    DW_TAG_file_type = 0x29,
-    DW_TAG_friend = 0x2a,
-    DW_TAG_namelist = 0x2b,
-    DW_TAG_namelist_item = 0x2c,
-    DW_TAG_packed_type = 0x2d,
-    DW_TAG_subprogram = 0x2e,
-    DW_TAG_template_type_param = 0x2f,
-    DW_TAG_template_value_param = 0x30,
-    DW_TAG_thrown_type = 0x31,
-    DW_TAG_try_block = 0x32,
-    DW_TAG_variant_part = 0x33,
-    DW_TAG_variable = 0x34,
-    DW_TAG_volatile_type = 0x35,
-    /* DWARF 3.  */
-    DW_TAG_dwarf_procedure = 0x36,
-    DW_TAG_restrict_type = 0x37,
-    DW_TAG_interface_type = 0x38,
-    DW_TAG_namespace = 0x39,
-    DW_TAG_imported_module = 0x3a,
-    DW_TAG_unspecified_type = 0x3b,
-    DW_TAG_partial_unit = 0x3c,
-    DW_TAG_imported_unit = 0x3d,
-    DW_TAG_condition = 0x3f,
-    DW_TAG_shared_type = 0x40,
-    /* DWARF 4.  */
-    DW_TAG_type_unit = 0x41,
-    DW_TAG_rvalue_reference_type = 0x42,
-    DW_TAG_template_alias = 0x43,
-
-    DW_TAG_lo_user = 0x4080,
-    DW_TAG_hi_user = 0xffff,
-
-    /* SGI/MIPS Extensions.  */
-    DW_TAG_MIPS_loop = 0x4081,
-
-    /* HP extensions.  See: ftp://ftp.hp.com/pub/lang/tools/WDB/wdb-4.0.tar.gz .  */
-    DW_TAG_HP_array_descriptor = 0x4090,
-    DW_TAG_HP_Bliss_field      = 0x4091,
-    DW_TAG_HP_Bliss_field_set  = 0x4092,
-
-    /* GNU extensions.  */
-    DW_TAG_format_label = 0x4101,	/* For FORTRAN 77 and Fortran 90.  */
-    DW_TAG_function_template = 0x4102,	/* For C++.  */
-    DW_TAG_class_template = 0x4103,	/* For C++.  */
-    DW_TAG_GNU_BINCL = 0x4104,
-    DW_TAG_GNU_EINCL = 0x4105,
-    /* Template template parameter.
-       See http://gcc.gnu.org/wiki/TemplateParmsDwarf .  */
-    DW_TAG_GNU_template_template_param = 0x4106,
-
-    /* Template parameter pack extension, specified at
-       http://wiki.dwarfstd.org/index.php?title=C%2B%2B0x:_Variadic_templates
-       The values of these two TAGS are in the DW_TAG_GNU_* space until the tags
-       are properly part of DWARF 5.  */
-    DW_TAG_GNU_template_parameter_pack = 0x4107,
-    DW_TAG_GNU_formal_parameter_pack = 0x4108,
-    /* The GNU call site extension, specified at
-       http://www.dwarfstd.org/ShowIssue.php?issue=100909.2&type=open .
-       The values of these two TAGS are in the DW_TAG_GNU_* space until the tags
-       are properly part of DWARF 5.  */
-    DW_TAG_GNU_call_site = 0x4109,
-    DW_TAG_GNU_call_site_parameter = 0x410a,
-    /* Extensions for UPC.  See: http://upc.gwu.edu/~upc.  */
-    DW_TAG_upc_shared_type = 0x8765,
-    DW_TAG_upc_strict_type = 0x8766,
-    DW_TAG_upc_relaxed_type = 0x8767,
-    /* PGI (STMicroelectronics) extensions.  No documentation available.  */
-    DW_TAG_PGI_kanji_type      = 0xA000,
-    DW_TAG_PGI_interface_block = 0xA020
-  };
+#define DW_TAG(name, value) , name = value
+#define DW_TAG_DUP(name, value) , name = value
+#define DW_FORM(name, value) , name = value
+#define DW_AT(name, value) , name = value
+#define DW_AT_DUP(name, value) , name = value
+#define DW_OP(name, value) , name = value
+#define DW_OP_DUP(name, value) , name = value
+#define DW_ATE(name, value) , name = value
+#define DW_ATE_DUP(name, value) , name = value
+#define DW_CFA(name, value) , name = value
+
+#define DW_FIRST_TAG(name, value) enum dwarf_tag { \
+  name = value
+#define DW_END_TAG };
+#define DW_FIRST_FORM(name, value) enum dwarf_form { \
+  name = value
+#define DW_END_FORM };
+#define DW_FIRST_AT(name, value) enum dwarf_attribute { \
+  name = value
+#define DW_END_AT };
+#define DW_FIRST_OP(name, value) enum dwarf_location_atom { \
+  name = value
+#define DW_END_OP };
+#define DW_FIRST_ATE(name, value) enum dwarf_type { \
+  name = value
+#define DW_END_ATE };
+#define DW_FIRST_CFA(name, value) enum dwarf_call_frame_info { \
+  name = value
+#define DW_END_CFA };
+
+#include "dwarf2.def"
+
+#undef DW_FIRST_TAG
+#undef DW_END_TAG
+#undef DW_FIRST_FORM
+#undef DW_END_FORM
+#undef DW_FIRST_AT
+#undef DW_END_AT
+#undef DW_FIRST_OP
+#undef DW_END_OP
+#undef DW_FIRST_ATE
+#undef DW_END_ATE
+#undef DW_FIRST_CFA
+#undef DW_END_CFA
+
+#undef DW_TAG
+#undef DW_TAG_DUP
+#undef DW_FORM
+#undef DW_AT
+#undef DW_AT_DUP
+#undef DW_OP
+#undef DW_OP_DUP
+#undef DW_ATE
+#undef DW_ATE_DUP
+#undef DW_CFA
 
 /* Flag that tells whether entry has a child or not.  */
 #define DW_children_no   0
 #define	DW_children_yes  1
 
-/* Form names and codes.  */
-enum dwarf_form
-  {
-    DW_FORM_addr = 0x01,
-    DW_FORM_block2 = 0x03,
-    DW_FORM_block4 = 0x04,
-    DW_FORM_data2 = 0x05,
-    DW_FORM_data4 = 0x06,
-    DW_FORM_data8 = 0x07,
-    DW_FORM_string = 0x08,
-    DW_FORM_block = 0x09,
-    DW_FORM_block1 = 0x0a,
-    DW_FORM_data1 = 0x0b,
-    DW_FORM_flag = 0x0c,
-    DW_FORM_sdata = 0x0d,
-    DW_FORM_strp = 0x0e,
-    DW_FORM_udata = 0x0f,
-    DW_FORM_ref_addr = 0x10,
-    DW_FORM_ref1 = 0x11,
-    DW_FORM_ref2 = 0x12,
-    DW_FORM_ref4 = 0x13,
-    DW_FORM_ref8 = 0x14,
-    DW_FORM_ref_udata = 0x15,
-    DW_FORM_indirect = 0x16,
-    /* DWARF 4.  */
-    DW_FORM_sec_offset = 0x17,
-    DW_FORM_exprloc = 0x18,
-    DW_FORM_flag_present = 0x19,
-    DW_FORM_ref_sig8 = 0x20
-  };
-
-/* Attribute names and codes.  */
-enum dwarf_attribute
-  {
-    DW_AT_sibling = 0x01,
-    DW_AT_location = 0x02,
-    DW_AT_name = 0x03,
-    DW_AT_ordering = 0x09,
-    DW_AT_subscr_data = 0x0a,
-    DW_AT_byte_size = 0x0b,
-    DW_AT_bit_offset = 0x0c,
-    DW_AT_bit_size = 0x0d,
-    DW_AT_element_list = 0x0f,
-    DW_AT_stmt_list = 0x10,
-    DW_AT_low_pc = 0x11,
-    DW_AT_high_pc = 0x12,
-    DW_AT_language = 0x13,
-    DW_AT_member = 0x14,
-    DW_AT_discr = 0x15,
-    DW_AT_discr_value = 0x16,
-    DW_AT_visibility = 0x17,
-    DW_AT_import = 0x18,
-    DW_AT_string_length = 0x19,
-    DW_AT_common_reference = 0x1a,
-    DW_AT_comp_dir = 0x1b,
-    DW_AT_const_value = 0x1c,
-    DW_AT_containing_type = 0x1d,
-    DW_AT_default_value = 0x1e,
-    DW_AT_inline = 0x20,
-    DW_AT_is_optional = 0x21,
-    DW_AT_lower_bound = 0x22,
-    DW_AT_producer = 0x25,
-    DW_AT_prototyped = 0x27,
-    DW_AT_return_addr = 0x2a,
-    DW_AT_start_scope = 0x2c,
-    DW_AT_bit_stride = 0x2e,
 #define DW_AT_stride_size   DW_AT_bit_stride  /* Note: The use of DW_AT_stride_size is deprecated.  */
-    DW_AT_upper_bound = 0x2f,
-    DW_AT_abstract_origin = 0x31,
-    DW_AT_accessibility = 0x32,
-    DW_AT_address_class = 0x33,
-    DW_AT_artificial = 0x34,
-    DW_AT_base_types = 0x35,
-    DW_AT_calling_convention = 0x36,
-    DW_AT_count = 0x37,
-    DW_AT_data_member_location = 0x38,
-    DW_AT_decl_column = 0x39,
-    DW_AT_decl_file = 0x3a,
-    DW_AT_decl_line = 0x3b,
-    DW_AT_declaration = 0x3c,
-    DW_AT_discr_list = 0x3d,
-    DW_AT_encoding = 0x3e,
-    DW_AT_external = 0x3f,
-    DW_AT_frame_base = 0x40,
-    DW_AT_friend = 0x41,
-    DW_AT_identifier_case = 0x42,
-    DW_AT_macro_info = 0x43,
-    DW_AT_namelist_items = 0x44,
-    DW_AT_priority = 0x45,
-    DW_AT_segment = 0x46,
-    DW_AT_specification = 0x47,
-    DW_AT_static_link = 0x48,
-    DW_AT_type = 0x49,
-    DW_AT_use_location = 0x4a,
-    DW_AT_variable_parameter = 0x4b,
-    DW_AT_virtuality = 0x4c,
-    DW_AT_vtable_elem_location = 0x4d,
-    /* DWARF 3 values.  */
-    DW_AT_allocated     = 0x4e,
-    DW_AT_associated    = 0x4f,
-    DW_AT_data_location = 0x50,
-    DW_AT_byte_stride   = 0x51,
 #define DW_AT_stride   DW_AT_byte_stride  /* Note: The use of DW_AT_stride is deprecated.  */
-    DW_AT_entry_pc      = 0x52,
-    DW_AT_use_UTF8      = 0x53,
-    DW_AT_extension     = 0x54,
-    DW_AT_ranges        = 0x55,
-    DW_AT_trampoline    = 0x56,
-    DW_AT_call_column   = 0x57,
-    DW_AT_call_file     = 0x58,
-    DW_AT_call_line     = 0x59,
-    DW_AT_description   = 0x5a,
-    DW_AT_binary_scale  = 0x5b,
-    DW_AT_decimal_scale = 0x5c,
-    DW_AT_small         = 0x5d,
-    DW_AT_decimal_sign  = 0x5e,
-    DW_AT_digit_count   = 0x5f,
-    DW_AT_picture_string = 0x60,
-    DW_AT_mutable       = 0x61,
-    DW_AT_threads_scaled = 0x62,
-    DW_AT_explicit      = 0x63,
-    DW_AT_object_pointer = 0x64,
-    DW_AT_endianity     = 0x65,
-    DW_AT_elemental     = 0x66,
-    DW_AT_pure          = 0x67,
-    DW_AT_recursive     = 0x68,
-    /* DWARF 4.  */
-    DW_AT_signature       = 0x69,
-    DW_AT_main_subprogram = 0x6a,
-    DW_AT_data_bit_offset = 0x6b,
-    DW_AT_const_expr      = 0x6c,
-    DW_AT_enum_class      = 0x6d,
-    DW_AT_linkage_name    = 0x6e,
-
-    DW_AT_lo_user = 0x2000,	/* Implementation-defined range start.  */
-    DW_AT_hi_user = 0x3fff,	/* Implementation-defined range end.  */
-
-    /* SGI/MIPS extensions.  */
-    DW_AT_MIPS_fde = 0x2001,
-    DW_AT_MIPS_loop_begin = 0x2002,
-    DW_AT_MIPS_tail_loop_begin = 0x2003,
-    DW_AT_MIPS_epilog_begin = 0x2004,
-    DW_AT_MIPS_loop_unroll_factor = 0x2005,
-    DW_AT_MIPS_software_pipeline_depth = 0x2006,
-    DW_AT_MIPS_linkage_name = 0x2007,
-    DW_AT_MIPS_stride = 0x2008,
-    DW_AT_MIPS_abstract_name = 0x2009,
-    DW_AT_MIPS_clone_origin = 0x200a,
-    DW_AT_MIPS_has_inlines = 0x200b,
-    /* HP extensions.  */
-    DW_AT_HP_block_index         = 0x2000,
-    DW_AT_HP_unmodifiable        = 0x2001, /* Same as DW_AT_MIPS_fde.  */
-    DW_AT_HP_prologue            = 0x2005, /* Same as DW_AT_MIPS_loop_unroll.  */
-    DW_AT_HP_epilogue            = 0x2008, /* Same as DW_AT_MIPS_stride.  */
-    DW_AT_HP_actuals_stmt_list   = 0x2010,
-    DW_AT_HP_proc_per_section    = 0x2011,
-    DW_AT_HP_raw_data_ptr        = 0x2012,
-    DW_AT_HP_pass_by_reference   = 0x2013,
-    DW_AT_HP_opt_level           = 0x2014,
-    DW_AT_HP_prof_version_id     = 0x2015,
-    DW_AT_HP_opt_flags           = 0x2016,
-    DW_AT_HP_cold_region_low_pc  = 0x2017,
-    DW_AT_HP_cold_region_high_pc = 0x2018,
-    DW_AT_HP_all_variables_modifiable = 0x2019,
-    DW_AT_HP_linkage_name        = 0x201a,
-    DW_AT_HP_prof_flags          = 0x201b,  /* In comp unit of procs_info for -g.  */
-    DW_AT_HP_unit_name           = 0x201f,
-    DW_AT_HP_unit_size           = 0x2020,
-    DW_AT_HP_widened_byte_size   = 0x2021,
-    DW_AT_HP_definition_points   = 0x2022,
-    DW_AT_HP_default_location    = 0x2023,
-    DW_AT_HP_is_result_param     = 0x2029,
-
-    /* GNU extensions.  */
-    DW_AT_sf_names   = 0x2101,
-    DW_AT_src_info   = 0x2102,
-    DW_AT_mac_info   = 0x2103,
-    DW_AT_src_coords = 0x2104,
-    DW_AT_body_begin = 0x2105,
-    DW_AT_body_end   = 0x2106,
-    DW_AT_GNU_vector = 0x2107,
-    /* Thread-safety annotations.
-       See http://gcc.gnu.org/wiki/ThreadSafetyAnnotation .  */
-    DW_AT_GNU_guarded_by    = 0x2108,
-    DW_AT_GNU_pt_guarded_by = 0x2109,
-    DW_AT_GNU_guarded       = 0x210a,
-    DW_AT_GNU_pt_guarded    = 0x210b,
-    DW_AT_GNU_locks_excluded = 0x210c,
-    DW_AT_GNU_exclusive_locks_required = 0x210d,
-    DW_AT_GNU_shared_locks_required = 0x210e,
-    /* One-definition rule violation detection.
-       See http://gcc.gnu.org/wiki/DwarfSeparateTypeInfo .  */
-    DW_AT_GNU_odr_signature = 0x210f,
-    /* Template template argument name.
-       See http://gcc.gnu.org/wiki/TemplateParmsDwarf .  */
-    DW_AT_GNU_template_name = 0x2110,
-    /* The GNU call site extension.
-       See http://www.dwarfstd.org/ShowIssue.php?issue=100909.2&type=open .  */
-    DW_AT_GNU_call_site_value = 0x2111,
-    DW_AT_GNU_call_site_data_value = 0x2112,
-    DW_AT_GNU_call_site_target = 0x2113,
-    DW_AT_GNU_call_site_target_clobbered = 0x2114,
-    DW_AT_GNU_tail_call = 0x2115,
-    DW_AT_GNU_all_tail_call_sites = 0x2116,
-    DW_AT_GNU_all_call_sites = 0x2117,
-    DW_AT_GNU_all_source_call_sites = 0x2118,
-    /* Section offset into .debug_macro section.  */
-    DW_AT_GNU_macros = 0x2119,
-    /* VMS extensions.  */
-    DW_AT_VMS_rtnbeg_pd_address = 0x2201,
-    /* GNAT extensions.  */
-    /* GNAT descriptive type.
-       See http://gcc.gnu.org/wiki/DW_AT_GNAT_descriptive_type .  */
-    DW_AT_use_GNAT_descriptive_type = 0x2301,
-    DW_AT_GNAT_descriptive_type	= 0x2302,
-    /* UPC extension.  */
-    DW_AT_upc_threads_scaled = 0x3210,
-    /* PGI (STMicroelectronics) extensions.  */
-    DW_AT_PGI_lbase    = 0x3a00,
-    DW_AT_PGI_soffset  = 0x3a01,
-    DW_AT_PGI_lstride  = 0x3a02
-  };
-
-/* Location atom names and codes.  */
-enum dwarf_location_atom
-  {
-    DW_OP_addr = 0x03,
-    DW_OP_deref = 0x06,
-    DW_OP_const1u = 0x08,
-    DW_OP_const1s = 0x09,
-    DW_OP_const2u = 0x0a,
-    DW_OP_const2s = 0x0b,
-    DW_OP_const4u = 0x0c,
-    DW_OP_const4s = 0x0d,
-    DW_OP_const8u = 0x0e,
-    DW_OP_const8s = 0x0f,
-    DW_OP_constu = 0x10,
-    DW_OP_consts = 0x11,
-    DW_OP_dup = 0x12,
-    DW_OP_drop = 0x13,
-    DW_OP_over = 0x14,
-    DW_OP_pick = 0x15,
-    DW_OP_swap = 0x16,
-    DW_OP_rot = 0x17,
-    DW_OP_xderef = 0x18,
-    DW_OP_abs = 0x19,
-    DW_OP_and = 0x1a,
-    DW_OP_div = 0x1b,
-    DW_OP_minus = 0x1c,
-    DW_OP_mod = 0x1d,
-    DW_OP_mul = 0x1e,
-    DW_OP_neg = 0x1f,
-    DW_OP_not = 0x20,
-    DW_OP_or = 0x21,
-    DW_OP_plus = 0x22,
-    DW_OP_plus_uconst = 0x23,
-    DW_OP_shl = 0x24,
-    DW_OP_shr = 0x25,
-    DW_OP_shra = 0x26,
-    DW_OP_xor = 0x27,
-    DW_OP_bra = 0x28,
-    DW_OP_eq = 0x29,
-    DW_OP_ge = 0x2a,
-    DW_OP_gt = 0x2b,
-    DW_OP_le = 0x2c,
-    DW_OP_lt = 0x2d,
-    DW_OP_ne = 0x2e,
-    DW_OP_skip = 0x2f,
-    DW_OP_lit0 = 0x30,
-    DW_OP_lit1 = 0x31,
-    DW_OP_lit2 = 0x32,
-    DW_OP_lit3 = 0x33,
-    DW_OP_lit4 = 0x34,
-    DW_OP_lit5 = 0x35,
-    DW_OP_lit6 = 0x36,
-    DW_OP_lit7 = 0x37,
-    DW_OP_lit8 = 0x38,
-    DW_OP_lit9 = 0x39,
-    DW_OP_lit10 = 0x3a,
-    DW_OP_lit11 = 0x3b,
-    DW_OP_lit12 = 0x3c,
-    DW_OP_lit13 = 0x3d,
-    DW_OP_lit14 = 0x3e,
-    DW_OP_lit15 = 0x3f,
-    DW_OP_lit16 = 0x40,
-    DW_OP_lit17 = 0x41,
-    DW_OP_lit18 = 0x42,
-    DW_OP_lit19 = 0x43,
-    DW_OP_lit20 = 0x44,
-    DW_OP_lit21 = 0x45,
-    DW_OP_lit22 = 0x46,
-    DW_OP_lit23 = 0x47,
-    DW_OP_lit24 = 0x48,
-    DW_OP_lit25 = 0x49,
-    DW_OP_lit26 = 0x4a,
-    DW_OP_lit27 = 0x4b,
-    DW_OP_lit28 = 0x4c,
-    DW_OP_lit29 = 0x4d,
-    DW_OP_lit30 = 0x4e,
-    DW_OP_lit31 = 0x4f,
-    DW_OP_reg0 = 0x50,
-    DW_OP_reg1 = 0x51,
-    DW_OP_reg2 = 0x52,
-    DW_OP_reg3 = 0x53,
-    DW_OP_reg4 = 0x54,
-    DW_OP_reg5 = 0x55,
-    DW_OP_reg6 = 0x56,
-    DW_OP_reg7 = 0x57,
-    DW_OP_reg8 = 0x58,
-    DW_OP_reg9 = 0x59,
-    DW_OP_reg10 = 0x5a,
-    DW_OP_reg11 = 0x5b,
-    DW_OP_reg12 = 0x5c,
-    DW_OP_reg13 = 0x5d,
-    DW_OP_reg14 = 0x5e,
-    DW_OP_reg15 = 0x5f,
-    DW_OP_reg16 = 0x60,
-    DW_OP_reg17 = 0x61,
-    DW_OP_reg18 = 0x62,
-    DW_OP_reg19 = 0x63,
-    DW_OP_reg20 = 0x64,
-    DW_OP_reg21 = 0x65,
-    DW_OP_reg22 = 0x66,
-    DW_OP_reg23 = 0x67,
-    DW_OP_reg24 = 0x68,
-    DW_OP_reg25 = 0x69,
-    DW_OP_reg26 = 0x6a,
-    DW_OP_reg27 = 0x6b,
-    DW_OP_reg28 = 0x6c,
-    DW_OP_reg29 = 0x6d,
-    DW_OP_reg30 = 0x6e,
-    DW_OP_reg31 = 0x6f,
-    DW_OP_breg0 = 0x70,
-    DW_OP_breg1 = 0x71,
-    DW_OP_breg2 = 0x72,
-    DW_OP_breg3 = 0x73,
-    DW_OP_breg4 = 0x74,
-    DW_OP_breg5 = 0x75,
-    DW_OP_breg6 = 0x76,
-    DW_OP_breg7 = 0x77,
-    DW_OP_breg8 = 0x78,
-    DW_OP_breg9 = 0x79,
-    DW_OP_breg10 = 0x7a,
-    DW_OP_breg11 = 0x7b,
-    DW_OP_breg12 = 0x7c,
-    DW_OP_breg13 = 0x7d,
-    DW_OP_breg14 = 0x7e,
-    DW_OP_breg15 = 0x7f,
-    DW_OP_breg16 = 0x80,
-    DW_OP_breg17 = 0x81,
-    DW_OP_breg18 = 0x82,
-    DW_OP_breg19 = 0x83,
-    DW_OP_breg20 = 0x84,
-    DW_OP_breg21 = 0x85,
-    DW_OP_breg22 = 0x86,
-    DW_OP_breg23 = 0x87,
-    DW_OP_breg24 = 0x88,
-    DW_OP_breg25 = 0x89,
-    DW_OP_breg26 = 0x8a,
-    DW_OP_breg27 = 0x8b,
-    DW_OP_breg28 = 0x8c,
-    DW_OP_breg29 = 0x8d,
-    DW_OP_breg30 = 0x8e,
-    DW_OP_breg31 = 0x8f,
-    DW_OP_regx = 0x90,
-    DW_OP_fbreg = 0x91,
-    DW_OP_bregx = 0x92,
-    DW_OP_piece = 0x93,
-    DW_OP_deref_size = 0x94,
-    DW_OP_xderef_size = 0x95,
-    DW_OP_nop = 0x96,
-    /* DWARF 3 extensions.  */
-    DW_OP_push_object_address = 0x97,
-    DW_OP_call2 = 0x98,
-    DW_OP_call4 = 0x99,
-    DW_OP_call_ref = 0x9a,
-    DW_OP_form_tls_address = 0x9b,
-    DW_OP_call_frame_cfa = 0x9c,
-    DW_OP_bit_piece = 0x9d,
-
-    /* DWARF 4 extensions.  */
-    DW_OP_implicit_value = 0x9e,
-    DW_OP_stack_value = 0x9f,
-
-    DW_OP_lo_user = 0xe0,	/* Implementation-defined range start.  */
-    DW_OP_hi_user = 0xff,	/* Implementation-defined range end.  */
-
-    /* GNU extensions.  */
-    DW_OP_GNU_push_tls_address = 0xe0,
-    /* The following is for marking variables that are uninitialized.  */
-    DW_OP_GNU_uninit     = 0xf0,
-    DW_OP_GNU_encoded_addr = 0xf1,
-    /* The GNU implicit pointer extension.
-       See http://www.dwarfstd.org/ShowIssue.php?issue=100831.1&type=open .  */
-    DW_OP_GNU_implicit_pointer = 0xf2,
-    /* The GNU entry value extension.
-       See http://www.dwarfstd.org/ShowIssue.php?issue=100909.1&type=open .  */
-    DW_OP_GNU_entry_value = 0xf3,
-    /* The GNU typed stack extension.
-       See http://www.dwarfstd.org/doc/040408.1.html .  */
-    DW_OP_GNU_const_type = 0xf4,
-    DW_OP_GNU_regval_type = 0xf5,
-    DW_OP_GNU_deref_type = 0xf6,
-    DW_OP_GNU_convert = 0xf7,
-    DW_OP_GNU_reinterpret = 0xf9,
-    /* The GNU parameter ref extension.  */
-    DW_OP_GNU_parameter_ref = 0xfa,
-    /* HP extensions.  */
-    DW_OP_HP_unknown     = 0xe0, /* Ouch, the same as GNU_push_tls_address.  */
-    DW_OP_HP_is_value    = 0xe1,
-    DW_OP_HP_fltconst4   = 0xe2,
-    DW_OP_HP_fltconst8   = 0xe3,
-    DW_OP_HP_mod_range   = 0xe4,
-    DW_OP_HP_unmod_range = 0xe5,
-    DW_OP_HP_tls         = 0xe6,
-    /* PGI (STMicroelectronics) extensions.  */
-    DW_OP_PGI_omp_thread_num = 0xf8
-  };
-
-/* Type encodings.  */
-enum dwarf_type
-  {
-    DW_ATE_void = 0x0,
-    DW_ATE_address = 0x1,
-    DW_ATE_boolean = 0x2,
-    DW_ATE_complex_float = 0x3,
-    DW_ATE_float = 0x4,
-    DW_ATE_signed = 0x5,
-    DW_ATE_signed_char = 0x6,
-    DW_ATE_unsigned = 0x7,
-    DW_ATE_unsigned_char = 0x8,
-    /* DWARF 3.  */
-    DW_ATE_imaginary_float = 0x9,
-    DW_ATE_packed_decimal = 0xa,
-    DW_ATE_numeric_string = 0xb,
-    DW_ATE_edited = 0xc,
-    DW_ATE_signed_fixed = 0xd,
-    DW_ATE_unsigned_fixed = 0xe,
-    DW_ATE_decimal_float = 0xf,
-    /* DWARF 4.  */
-    DW_ATE_UTF = 0x10,
-
-    DW_ATE_lo_user = 0x80,
-    DW_ATE_hi_user = 0xff,
-
-    /* HP extensions.  */
-    DW_ATE_HP_float80             = 0x80, /* Floating-point (80 bit).  */
-    DW_ATE_HP_complex_float80     = 0x81, /* Complex floating-point (80 bit).  */
-    DW_ATE_HP_float128            = 0x82, /* Floating-point (128 bit).  */
-    DW_ATE_HP_complex_float128    = 0x83, /* Complex fp (128 bit).  */
-    DW_ATE_HP_floathpintel        = 0x84, /* Floating-point (82 bit IA64).  */
-    DW_ATE_HP_imaginary_float80   = 0x85,
-    DW_ATE_HP_imaginary_float128  = 0x86,
-    DW_ATE_HP_VAX_float           = 0x88, /* F or G floating.  */
-    DW_ATE_HP_VAX_float_d         = 0x89, /* D floating.  */
-    DW_ATE_HP_packed_decimal      = 0x8a, /* Cobol.  */
-    DW_ATE_HP_zoned_decimal       = 0x8b, /* Cobol.  */
-    DW_ATE_HP_edited              = 0x8c, /* Cobol.  */
-    DW_ATE_HP_signed_fixed        = 0x8d, /* Cobol.  */
-    DW_ATE_HP_unsigned_fixed      = 0x8e, /* Cobol.  */
-    DW_ATE_HP_VAX_complex_float   = 0x8f, /* F or G floating complex.  */
-    DW_ATE_HP_VAX_complex_float_d = 0x90  /* D floating complex.  */
-  };
 
 /* Decimal sign encodings.  */
 enum dwarf_decimal_sign_encoding
@@ -776,48 +259,6 @@ enum dwarf_line_number_hp_sfc_ops
     DW_LNE_HP_SFC_associate = 3
   };
 
-/* Call frame information.  */
-enum dwarf_call_frame_info
-  {
-    DW_CFA_advance_loc = 0x40,
-    DW_CFA_offset = 0x80,
-    DW_CFA_restore = 0xc0,
-    DW_CFA_nop = 0x00,
-    DW_CFA_set_loc = 0x01,
-    DW_CFA_advance_loc1 = 0x02,
-    DW_CFA_advance_loc2 = 0x03,
-    DW_CFA_advance_loc4 = 0x04,
-    DW_CFA_offset_extended = 0x05,
-    DW_CFA_restore_extended = 0x06,
-    DW_CFA_undefined = 0x07,
-    DW_CFA_same_value = 0x08,
-    DW_CFA_register = 0x09,
-    DW_CFA_remember_state = 0x0a,
-    DW_CFA_restore_state = 0x0b,
-    DW_CFA_def_cfa = 0x0c,
-    DW_CFA_def_cfa_register = 0x0d,
-    DW_CFA_def_cfa_offset = 0x0e,
-    /* DWARF 3.  */
-    DW_CFA_def_cfa_expression = 0x0f,
-    DW_CFA_expression = 0x10,
-    DW_CFA_offset_extended_sf = 0x11,
-    DW_CFA_def_cfa_sf = 0x12,
-    DW_CFA_def_cfa_offset_sf = 0x13,
-    DW_CFA_val_offset = 0x14,
-    DW_CFA_val_offset_sf = 0x15,
-    DW_CFA_val_expression = 0x16,
-
-    DW_CFA_lo_user = 0x1c,
-    DW_CFA_hi_user = 0x3f,
-
-    /* SGI/MIPS specific.  */
-    DW_CFA_MIPS_advance_loc8 = 0x1d,
-    /* GNU extensions.  */
-    DW_CFA_GNU_window_save = 0x2d,
-    DW_CFA_GNU_args_size = 0x2e,
-    DW_CFA_GNU_negative_offset_extended = 0x2f
-  };
-
 #define DW_CIE_ID	  0xffffffff
 #define DW64_CIE_ID	  0xffffffffffffffffULL
 #define DW_CIE_VERSION	  1
@@ -892,6 +333,11 @@ enum dwarf_macro_record_type
     DW_MACRO_GNU_define_indirect = 5,
     DW_MACRO_GNU_undef_indirect = 6,
     DW_MACRO_GNU_transparent_include = 7,
+    /* Extensions for DWZ multifile.
+       See http://www.dwarfstd.org/ShowIssue.php?issue=120604.1&type=open .  */
+    DW_MACRO_GNU_define_indirect_alt = 8,
+    DW_MACRO_GNU_undef_indirect_alt = 9,
+    DW_MACRO_GNU_transparent_include_alt = 10,
     DW_MACRO_GNU_lo_user = 0xe0,
     DW_MACRO_GNU_hi_user = 0xff
   };
@@ -919,4 +365,37 @@ enum dwarf_macro_record_type
 
 #define DW_EH_PE_indirect	0x80
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/* Return the name of a DW_TAG_ constant, or NULL if the value is not
+   recognized.  */
+extern const char *get_DW_TAG_name (unsigned int tag);
+
+/* Return the name of a DW_AT_ constant, or NULL if the value is not
+   recognized.  */
+extern const char *get_DW_AT_name (unsigned int attr);
+
+/* Return the name of a DW_FORM_ constant, or NULL if the value is not
+   recognized.  */
+extern const char *get_DW_FORM_name (unsigned int form);
+
+/* Return the name of a DW_OP_ constant, or NULL if the value is not
+   recognized.  */
+extern const char *get_DW_OP_name (unsigned int op);
+
+/* Return the name of a DW_ATE_ constant, or NULL if the value is not
+   recognized.  */
+extern const char *get_DW_ATE_name (unsigned int enc);
+
+/* Return the name of a DW_CFA_ constant, or NULL if the value is not
+   recognized.  */
+extern const char *get_DW_CFA_name (unsigned int opc);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
 #endif /* _DWARF2_H */
diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog
index 4da1820..ef84aa3 100644
--- a/include/elf/ChangeLog
+++ b/include/elf/ChangeLog
@@ -1,3 +1,137 @@
+2012-06-28  Iain Sandoe  <iain at codesourcery.com>
+
+	* common.h (AT_L1I_CACHESHAPE, AT_L1D_CACHESHAPE,
+	AT_L2_CACHESHAPE, AT_L3_CACHESHAPE): New defines.
+
+2012-05-16  Georg-Johann Lay  <avr at gjlay.de>
+
+	PR target/13503
+	* avr.h (RELOC_NUMBERS): Rename R_AVR_8_HHI8 to R_AVR_8_HLO8.
+
+2012-05-15  James Murray <jsm at jsm-net.demon.co.uk>
+
+	* m68hc11.h (R_M68HC12_16B, R_M68HC12_PCREL_9, R_M68HC12_PCREL_10)
+	R_M68HC12_HI8XG, R_M68HC12_LO8XG): New relocations.
+	(E_M68HC11_XGATE_RAMOFFSET): Define.
+
+2012-05-14  James Lemke  <jwlemke at codesourcery.com>
+	* ppc.h (SEC_PPC_VLE): Remove.
+
+2012-05-14  Catherine Moore  <clm at codesourcery.com>
+	    James Lemke  <jwlemke at codesourcery.com>
+
+	* ppc.h (R_PPC_VLE_REL8): New reloction.
+	(R_PPC_VLE_REL15): Likewise.
+	(R_PPC_VLE_REL24): Likewise.
+	(R_PPC_VLE_LO16A): Likewise.
+	(R_PPC_VLE_LO16D): Likewise.
+	(R_PPC_VLE_HI16A): Likewise.
+	(R_PPC_VLE_HI16D): Likewise.
+	(R_PPC_VLE_HA16A): Likewise.
+	(R_PPC_VLE_HA16D): Likewise.
+	(R_PPC_VLE_SDA21): Likewise.
+	(R_PPC_VLE_SDA21_LO): Likewise.
+	(R_PPC_VLE_SDAREL_LO16A): Likewise.
+	(R_PPC_VLE_SDAREL_LO16D): Likewise.
+	(R_PPC_VLE_SDAREL_HI16A): Likewise.
+	(R_PPC_VLE_SDAREL_HI16D): Likewise.
+	(R_PPC_VLE_SDAREL_HA16A): Likewise.
+	(R_PPC_VLE_SDAREL_HA16D): Likewise.
+	(SEC_PPC_VLE): Remove.
+	(PF_PPC_VLE): New program header flag.
+	(SHF_PPC_VLE): New section header flag.
+	(vle_opcodes, vle_num_opcodes): New.
+	(VLE_OP): New macro.
+	(VLE_OP_TO_SEG): New macro.
+
+2012-05-11  Georg-Johann Lay  <avr at gjlay.de
+
+	PR target/13503
+	* elf/avr.h (RELOC_NUMBERS): Add values for R_AVR_8_LO8,
+	R_AVR_8_HI8, R_AVR_8_HHI8.
+
+2012-05-03  Sean Keys  <skeys at ipdatasys.com>
+
+	* xgate.h: Mininal file to support XGATE relocations.
+
+2012-04-27  David S. Miller  <davem at davemloft.net>
+
+	* sparc.h: Add new ELF_SPARC_HWCAP_* defines for crypto,
+	pause, and compare-and-branch instructions.
+
+2012-03-07  Nick Clifton  <nickc at redhat.com>
+
+	* mn10300.h (elf_mn10300_reloc_type): Add R_MN10300_TLS_GD,
+	R_MN10300_TLS_LD, R_MN10300_TLS_LDO, R_MN10300_TLS_GOTIE,
+	R_MN10300_TLS_IE, R_MN10300_TLS_LE, R_MN10300_TLS_DPTMOD,
+	R_MN10300_TLS_DTPOFF and R_MN10300_TLS_TPOFF.
+
+2012-02-25  Walter Lee  <walt at tilera.com>
+
+	* tilegx.h (R_TILEGX_IMM16_X0_HW1_GOT): Delete.
+	(R_TILEGX_IMM16_X1_HW1_GOT): Ditto.
+	(R_TILEGX_IMM16_X0_HW2_GOT): Ditto.
+	(R_TILEGX_IMM16_X1_HW2_GOT): Ditto.
+	(R_TILEGX_IMM16_X0_HW3_GOT): Ditto.
+	(R_TILEGX_IMM16_X1_HW3_GOT): Ditto.
+	(R_TILEGX_IMM16_X0_HW2_LAST_GOT): Ditto.
+	(R_TILEGX_IMM16_X1_HW2_LAST_GOT): Ditto.
+	(R_TILEGX_IMM16_X0_HW1_TLS_GD): Ditto.
+	(R_TILEGX_IMM16_X1_HW1_TLS_GD): Ditto.
+	(R_TILEGX_IMM16_X0_HW2_TLS_GD): Ditto.
+	(R_TILEGX_IMM16_X1_HW2_TLS_GD): Ditto.
+	(R_TILEGX_IMM16_X0_HW3_TLS_GD): Ditto.
+	(R_TILEGX_IMM16_X1_HW3_TLS_GD): Ditto.
+	(R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD): Ditto.
+	(R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD): Ditto.
+	(R_TILEGX_IMM16_X0_HW1_TLS_IE): Ditto.
+	(R_TILEGX_IMM16_X1_HW1_TLS_IE): Ditto.
+	(R_TILEGX_IMM16_X0_HW2_TLS_IE): Ditto.
+	(R_TILEGX_IMM16_X1_HW2_TLS_IE): Ditto.
+	(R_TILEGX_IMM16_X0_HW3_TLS_IE): Ditto.
+	(R_TILEGX_IMM16_X1_HW3_TLS_IE): Ditto.
+	(R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE): Ditto.
+	(R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE): Ditto.
+	(R_TILEGX_IMM16_X0_HW0_TLS_LE): New relocation.
+	(R_TILEGX_IMM16_X1_HW0_TLS_LE): Ditto.
+	(R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE): Ditto.
+	(R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE): Ditto.
+	(R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE): Ditto.
+	(R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE): Ditto.
+	(R_TILEGX_TLS_GD_CALL): Ditto.
+	(R_TILEGX_IMM8_X0_TLS_GD_ADD): Ditto.
+	(R_TILEGX_IMM8_X1_TLS_GD_ADD): Ditto.
+	(R_TILEGX_IMM8_Y0_TLS_GD_ADD): Ditto.
+	(R_TILEGX_IMM8_Y1_TLS_GD_ADD): Ditto.
+	(R_TILEGX_TLS_IE_LOAD): Ditto.
+	(R_TILEGX_IMM8_X0_TLS_ADD): Ditto.
+	(R_TILEGX_IMM8_X1_TLS_ADD): Ditto.
+	(R_TILEGX_IMM8_Y0_TLS_ADD): Ditto.
+	(R_TILEGX_IMM8_Y1_TLS_ADD): Ditto.
+	* tilepro.h (R_TILEPRO_TLS_GD_CALL): New relocation.
+	(R_TILEPRO_IMM8_X0_TLS_GD_ADD): Ditto.
+	(R_TILEPRO_IMM8_X1_TLS_GD_ADD): Ditto.
+	(R_TILEPRO_IMM8_Y0_TLS_GD_ADD): Ditto.
+	(R_TILEPRO_IMM8_Y1_TLS_GD_ADD): Ditto.
+	(R_TILEPRO_TLS_IE_LOAD): Ditto.
+	(R_TILEPRO_IMM16_X0_TLS_LE): Ditto.
+	(R_TILEPRO_IMM16_X1_TLS_LE): Ditto.
+	(R_TILEPRO_IMM16_X0_TLS_LE_LO): Ditto.
+	(R_TILEPRO_IMM16_X1_TLS_LE_LO): Ditto.
+	(R_TILEPRO_IMM16_X0_TLS_LE_HI): Ditto.
+	(R_TILEPRO_IMM16_X1_TLS_LE_HI): Ditto.
+	(R_TILEPRO_IMM16_X0_TLS_LE_HA): Ditto.
+	(R_TILEPRO_IMM16_X1_TLS_LE_HA): Ditto.
+
+2011-12-22  DJ Delorie  <dj at redhat.com>
+
+	* rl78.h (R_RL78_RH_RELAX, R_RL78_RH_SFR, R_RL78_RH_SADDR): New.
+	(RL78_RELAXA_BRA, RL78_RELAXA_ADDR16: New.
+
+2011-12-19  Chung-Lin Tang  <cltang at codesourcery.com>
+
+	* mips.h (elf_mips_reloc_type): Add R_MIPS16_TLS_* entries.
+
 2011-12-06  Ulrich Weigand  <uweigand at de.ibm.com>
 
 	* common.h (NT_S390_LAST_BREAK): Define.
@@ -99,6 +233,12 @@
 
 	* arm.h (arm_st_branch_type): Add ST_BRANCH_UNKNOWN.
 
+2011-05-09  Paul Brook  <paul at codesourcery.com>
+
+	* tic6x.h (ELF_STRING_C6000_unwind,
+	ELF_STRING_C6000_unwind_info, ELF_STRING_C6000_unwind_once,
+	ELF_STRING_C6000_unwind_info_once): Define.
+
 2011-04-15  Sergio Durigan Junior  <sergiodj at redhat.com>
 
 	* common.h (NT_STAPSDT): New define.
@@ -383,6 +523,11 @@
 	R_PPC_RELAX32PC_PLT): Delete.
 	(R_PPC_RELAX, R_PPC_RELAX_PLT, R_PPC_RELAX_PLTREL24): Define.
 
+2009-12-03  David Daney  <ddaney at caviumnetworks.com>
+	    Adam Nemet  <adambnemet at gmail.com>
+
+	* mips.h (E_MIPS_MACH_OCTEON2): New machine flag.
+
 2009-11-28  Joseph Myers  <joseph at codesourcery.com>
 
 	* common.h (ELFOSABI_FENIXOS, EM_TI_C6000, EM_TI_C2000,
diff --git a/include/elf/avr.h b/include/elf/avr.h
index 11d43f9..b45d902 100644
--- a/include/elf/avr.h
+++ b/include/elf/avr.h
@@ -1,5 +1,6 @@
 /* AVR ELF support for BFD.
-   Copyright 1999, 2000, 2004, 2006, 2010  Free Software Foundation, Inc.
+   Copyright 1999, 2000, 2004, 2006, 2010, 2012
+   Free Software Foundation, Inc.
    Contributed by Denis Chertykov <denisc at overta.ru>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -30,16 +31,16 @@
    as reference for the relocations so that linker relaxation is possible.  */
 #define EF_AVR_LINKRELAX_PREPARED 0x80
 
-#define E_AVR_MACH_AVR1 1
-#define E_AVR_MACH_AVR2 2
-#define E_AVR_MACH_AVR25 25
-#define E_AVR_MACH_AVR3 3
-#define E_AVR_MACH_AVR31 31
-#define E_AVR_MACH_AVR35 35
-#define E_AVR_MACH_AVR4 4
-#define E_AVR_MACH_AVR5 5
-#define E_AVR_MACH_AVR51 51
-#define E_AVR_MACH_AVR6 6 
+#define E_AVR_MACH_AVR1     1
+#define E_AVR_MACH_AVR2     2
+#define E_AVR_MACH_AVR25   25
+#define E_AVR_MACH_AVR3     3
+#define E_AVR_MACH_AVR31   31
+#define E_AVR_MACH_AVR35   35
+#define E_AVR_MACH_AVR4     4
+#define E_AVR_MACH_AVR5     5
+#define E_AVR_MACH_AVR51   51
+#define E_AVR_MACH_AVR6     6 
 #define E_AVR_MACH_XMEGA1 101
 #define E_AVR_MACH_XMEGA2 102
 #define E_AVR_MACH_XMEGA3 103
@@ -77,6 +78,9 @@ START_RELOC_NUMBERS (elf_avr_reloc_type)
      RELOC_NUMBER (R_AVR_LO8_LDI_GS,	       24)
      RELOC_NUMBER (R_AVR_HI8_LDI_GS,	       25)
      RELOC_NUMBER (R_AVR_8, 		       26)
+     RELOC_NUMBER (R_AVR_8_LO8,                27)
+     RELOC_NUMBER (R_AVR_8_HI8,                28)
+     RELOC_NUMBER (R_AVR_8_HLO8,               29)
 END_RELOC_NUMBERS (R_AVR_max)
 
 #endif /* _ELF_AVR_H */
diff --git a/include/elf/common.h b/include/elf/common.h
index 5cddc0b..58e489a 100644
--- a/include/elf/common.h
+++ b/include/elf/common.h
@@ -1,6 +1,6 @@
 /* ELF support for BFD.
    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    Written by Fred Fish @ Cygnus Support, from information published
@@ -935,6 +935,18 @@
 #define AT_SYSINFO	32
 #define AT_SYSINFO_EHDR	33 /* Pointer to ELF header of system-supplied DSO.  */
 
+/* More complete cache descriptions than AT_[DIU]CACHEBSIZE.  If the
+   value is -1, then the cache doesn't exist.  Otherwise:
+
+   bit 0-3:  Cache set-associativity; 0 means fully associative.
+   bit 4-7:  Log2 of cacheline size.
+   bit 8-31:  Size of the entire cache >> 8.  */
+
+#define AT_L1I_CACHESHAPE 34
+#define AT_L1D_CACHESHAPE 35
+#define AT_L2_CACHESHAPE  36
+#define AT_L3_CACHESHAPE  37
+
 #define AT_SUN_UID      2000    /* Effective user ID.  */
 #define AT_SUN_RUID     2001    /* Real user ID.  */
 #define AT_SUN_GID      2002    /* Effective group ID.  */
diff --git a/include/elf/m68hc11.h b/include/elf/m68hc11.h
index ca325d9..9a37a44 100644
--- a/include/elf/m68hc11.h
+++ b/include/elf/m68hc11.h
@@ -1,5 +1,5 @@
 /* m68hc11 & m68hc12 ELF support for BFD.
-   Copyright 1999, 2000, 2001, 2002, 2010 Free Software Foundation, Inc.
+   Copyright 1999, 2000, 2001, 2002, 2010, 2012 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -42,6 +42,12 @@ START_RELOC_NUMBERS (elf_m68hc11_reloc_type)
   RELOC_NUMBER (R_M68HC11_LO16, 12)
   RELOC_NUMBER (R_M68HC11_PAGE, 13)
 
+  RELOC_NUMBER (R_M68HC12_16B, 15)
+  RELOC_NUMBER (R_M68HC12_PCREL_9, 16)
+  RELOC_NUMBER (R_M68HC12_PCREL_10, 17)
+  RELOC_NUMBER (R_M68HC12_HI8XG, 18)
+  RELOC_NUMBER (R_M68HC12_LO8XG, 19)
+
      /* GNU extension for linker relaxation.
         Mark beginning of a jump instruction (any form).  */
   RELOC_NUMBER (R_M68HC11_RL_JUMP, 20)
@@ -64,6 +70,9 @@ END_RELOC_NUMBERS (R_M68HC11_max)
 /* Uses 68HC12 memory banks.  */
 #define E_M68HC12_BANKS 0x000000004
 
+/* XGATE ram offsetting.  */
+#define E_M68HC11_XGATE_RAMOFFSET     0x000000100
+
 #define EF_M68HC11_MACH_MASK 0xF0
 #define EF_M68HC11_GENERIC   0x00 /* Generic 68HC12/backward compatibility.  */
 #define EF_M68HC12_MACH      0x10 /* 68HC12 microcontroller.  */
@@ -86,10 +95,10 @@ END_RELOC_NUMBERS (R_M68HC11_max)
 /* Special values for the st_other field in the symbol table.  These
    are used for 68HC12 to identify far functions (must be called with
    'call' and returns with 'rtc').  */
-#define STO_M68HC12_FAR 0x80
+#define STO_M68HC12_FAR          0x80
 
 /* Identify interrupt handlers.  This is used by the debugger to
    correctly compute the stack frame.  */
-#define STO_M68HC12_INTERRUPT 0x40
+#define STO_M68HC12_INTERRUPT    0x40
      
 #endif
diff --git a/include/elf/mips.h b/include/elf/mips.h
index db5fa54..c2c5922 100644
--- a/include/elf/mips.h
+++ b/include/elf/mips.h
@@ -98,7 +98,14 @@ START_RELOC_NUMBERS (elf_mips_reloc_type)
   RELOC_NUMBER (R_MIPS16_CALL16, 103)
   RELOC_NUMBER (R_MIPS16_HI16, 104)
   RELOC_NUMBER (R_MIPS16_LO16, 105)
-  FAKE_RELOC (R_MIPS16_max, 106)
+  RELOC_NUMBER (R_MIPS16_TLS_GD, 106)
+  RELOC_NUMBER (R_MIPS16_TLS_LDM, 107)
+  RELOC_NUMBER (R_MIPS16_TLS_DTPREL_HI16, 108)
+  RELOC_NUMBER (R_MIPS16_TLS_DTPREL_LO16, 109)
+  RELOC_NUMBER (R_MIPS16_TLS_GOTTPREL, 110)
+  RELOC_NUMBER (R_MIPS16_TLS_TPREL_HI16, 111)
+  RELOC_NUMBER (R_MIPS16_TLS_TPREL_LO16, 112)
+  FAKE_RELOC (R_MIPS16_max, 113)
   /* These relocations are specific to VxWorks.  */
   RELOC_NUMBER (R_MIPS_COPY, 126)
   RELOC_NUMBER (R_MIPS_JUMP_SLOT, 127)
diff --git a/include/elf/mn10300.h b/include/elf/mn10300.h
index 444787b..529b389 100644
--- a/include/elf/mn10300.h
+++ b/include/elf/mn10300.h
@@ -51,6 +51,15 @@ START_RELOC_NUMBERS (elf_mn10300_reloc_type)
   RELOC_NUMBER (R_MN10300_GLOB_DAT, 21)
   RELOC_NUMBER (R_MN10300_JMP_SLOT, 22)
   RELOC_NUMBER (R_MN10300_RELATIVE, 23)
+  RELOC_NUMBER (R_MN10300_TLS_GD, 24)
+  RELOC_NUMBER (R_MN10300_TLS_LD, 25)
+  RELOC_NUMBER (R_MN10300_TLS_LDO, 26)
+  RELOC_NUMBER (R_MN10300_TLS_GOTIE, 27)
+  RELOC_NUMBER (R_MN10300_TLS_IE, 28)
+  RELOC_NUMBER (R_MN10300_TLS_LE, 29)
+  RELOC_NUMBER (R_MN10300_TLS_DTPMOD, 30)
+  RELOC_NUMBER (R_MN10300_TLS_DTPOFF, 31)
+  RELOC_NUMBER (R_MN10300_TLS_TPOFF, 32)
   RELOC_NUMBER (R_MN10300_SYM_DIFF, 33)
   RELOC_NUMBER (R_MN10300_ALIGN, 34)
 END_RELOC_NUMBERS (R_MN10300_MAX)
diff --git a/include/elf/ppc.h b/include/elf/ppc.h
index 8e27855..f80a1e8 100644
--- a/include/elf/ppc.h
+++ b/include/elf/ppc.h
@@ -131,6 +131,25 @@ START_RELOC_NUMBERS (elf_ppc_reloc_type)
   RELOC_NUMBER (R_PPC_EMB_BIT_FLD,	115)
   RELOC_NUMBER (R_PPC_EMB_RELSDA,	116)
 
+/* PowerPC VLE relocations.  */
+  RELOC_NUMBER (R_PPC_VLE_REL8,		216)
+  RELOC_NUMBER (R_PPC_VLE_REL15,	217)
+  RELOC_NUMBER (R_PPC_VLE_REL24,	218)
+  RELOC_NUMBER (R_PPC_VLE_LO16A,	219)
+  RELOC_NUMBER (R_PPC_VLE_LO16D,	220)
+  RELOC_NUMBER (R_PPC_VLE_HI16A,	221)
+  RELOC_NUMBER (R_PPC_VLE_HI16D,	222)
+  RELOC_NUMBER (R_PPC_VLE_HA16A,	223)
+  RELOC_NUMBER (R_PPC_VLE_HA16D,	224)
+  RELOC_NUMBER (R_PPC_VLE_SDA21,	225)
+  RELOC_NUMBER (R_PPC_VLE_SDA21_LO,	226)
+  RELOC_NUMBER (R_PPC_VLE_SDAREL_LO16A,	227)
+  RELOC_NUMBER (R_PPC_VLE_SDAREL_LO16D,	228)
+  RELOC_NUMBER (R_PPC_VLE_SDAREL_HI16A,	229)
+  RELOC_NUMBER (R_PPC_VLE_SDAREL_HI16D,	230)
+  RELOC_NUMBER (R_PPC_VLE_SDAREL_HA16A,	231)
+  RELOC_NUMBER (R_PPC_VLE_SDAREL_HA16D,	232)
+
 /* Support STT_GNU_IFUNC plt calls.  */
   RELOC_NUMBER (R_PPC_IRELATIVE,	248)
 
@@ -166,9 +185,11 @@ END_RELOC_NUMBERS (R_PPC_max)
 #define	EF_PPC_RELOCATABLE	0x00010000	/* PowerPC -mrelocatable flag.  */
 #define	EF_PPC_RELOCATABLE_LIB	0x00008000	/* PowerPC -mrelocatable-lib flag.  */
 
-/* This bit is reserved by BFD for processor specific stuff.  Name
-   it properly so that we can easily stay consistent elsewhere.  */
-#define SEC_PPC_VLE		SEC_TIC54X_BLOCK
+/* Processor specific program headers, p_flags field.  */
+#define PF_PPC_VLE		0x10000000	/* PowerPC VLE.  */
+
+/* Processor specific section headers, sh_flags field.  */
+#define SHF_PPC_VLE		0x10000000	/* PowerPC VLE text section.  */
 
 /* Processor specific section headers, sh_type field.  */
 
diff --git a/include/elf/rl78.h b/include/elf/rl78.h
index 4f29850..82959e1 100644
--- a/include/elf/rl78.h
+++ b/include/elf/rl78.h
@@ -55,6 +55,11 @@ START_RELOC_NUMBERS (elf_rl78_reloc_type)
   RELOC_NUMBER (R_RL78_DIR16_REV,    0x11)
   RELOC_NUMBER (R_RL78_DIR3U_PCREL,  0x12)
 
+  /* These are extensions added by Red Hat.  */
+  RELOC_NUMBER (R_RL78_RH_RELAX,     0x2d) /* Marks opcodes suitable for linker relaxation.  */
+  RELOC_NUMBER (R_RL78_RH_SFR,       0x2e) /* SFR addresses - internal use only.  */
+  RELOC_NUMBER (R_RL78_RH_SADDR,     0x2f) /* SADDR addresses - internal use only..  */
+
   /* These are for complex relocs.  */
   RELOC_NUMBER (R_RL78_ABS32,        0x41)
   RELOC_NUMBER (R_RL78_ABS24S,       0x42)
@@ -103,12 +108,8 @@ END_RELOC_NUMBERS (R_RL78_max)
 #define E_FLAG_RL78_DSP			(1 << 1) /* Defined in the RL78 CPU Object file specification, but not explained.  */
 
 /* These define the addend field of R_RL78_RH_RELAX relocations.  */
-#define	RL78_RELAXA_IMM6	0x00000010	/* Imm8/16/24/32 at bit offset 6.  */
-#define	RL78_RELAXA_IMM12	0x00000020	/* Imm8/16/24/32 at bit offset 12.  */
-#define	RL78_RELAXA_DSP4	0x00000040	/* Dsp0/8/16 at bit offset 4.  */
-#define	RL78_RELAXA_DSP6	0x00000080	/* Dsp0/8/16 at bit offset 6.  */
-#define	RL78_RELAXA_DSP14	0x00000100	/* Dsp0/8/16 at bit offset 14.  */
-#define	RL78_RELAXA_BRA	0x00000200	/* Any type of branch (must be decoded).  */
+#define	RL78_RELAXA_BRA		0x00000010	/* Any type of branch (must be decoded).  */
+#define	RL78_RELAXA_ADDR16	0x00000020	/* addr16->sfr/saddr opportunity  */
 #define RL78_RELAXA_RNUM	0x0000000f	/* Number of associated relocations.  */
 /* These mark the place where alignment is requested, and the place where the filler bytes end.  */
 #define	RL78_RELAXA_ALIGN	0x10000000	/* Start alignment; the remaining bits are the alignment value.  */
diff --git a/include/elf/s390.h b/include/elf/s390.h
index 807b7e8..a5b4217 100644
--- a/include/elf/s390.h
+++ b/include/elf/s390.h
@@ -119,6 +119,7 @@ START_RELOC_NUMBERS (elf_s390_reloc_type)
     RELOC_NUMBER (R_390_GOTPLT20, 59)	/* 20 bit offset to jump slot.  */
     RELOC_NUMBER (R_390_TLS_GOTIE20, 60)/* 20 bit GOT offset for statis TLS
 					   block offset.  */
+    RELOC_NUMBER (R_390_IRELATIVE, 61)  /* IFUNC relocation.  */
     /* These are GNU extensions to enable C++ vtable garbage collection.  */
     RELOC_NUMBER (R_390_GNU_VTINHERIT, 250)
     RELOC_NUMBER (R_390_GNU_VTENTRY, 251)
diff --git a/include/elf/sparc.h b/include/elf/sparc.h
index fc8a765..d182f4d 100644
--- a/include/elf/sparc.h
+++ b/include/elf/sparc.h
@@ -162,6 +162,7 @@ START_RELOC_NUMBERS (elf_sparc_reloc_type)
   RELOC_NUMBER (R_SPARC_H34, 85)
   RELOC_NUMBER (R_SPARC_SIZE32, 86)
   RELOC_NUMBER (R_SPARC_SIZE64, 87)
+  RELOC_NUMBER (R_SPARC_WDISP10, 88)
   
   EMPTY_RELOC  (R_SPARC_max_std)
 
@@ -212,5 +213,19 @@ enum
 #define ELF_SPARC_HWCAP_IMA	0x00008000 /* integer multiply-add */
 #define ELF_SPARC_HWCAP_ASI_CACHE_SPARING \
 				0x00010000 /* cache sparing ASIs */
+#define ELF_SPARC_HWCAP_AES	0x00020000 /* AES crypto insns */
+#define ELF_SPARC_HWCAP_DES	0x00040000 /* DES crypto insns */
+#define ELF_SPARC_HWCAP_KASUMI	0x00080000 /* KASUMI crypto insns */
+#define ELF_SPARC_HWCAP_CAMELLIA \
+				0x00100000 /* CAMELLIA crypto insns */
+#define ELF_SPARC_HWCAP_MD5	0x00200000 /* MD5 hashing insns */
+#define ELF_SPARC_HWCAP_SHA1	0x00400000 /* SHA1 hashing insns */
+#define ELF_SPARC_HWCAP_SHA256	0x00800000 /* SHA256 hashing insns */
+#define ELF_SPARC_HWCAP_SHA512	0x01000000 /* SHA512 hashing insns */
+#define ELF_SPARC_HWCAP_MPMUL	0x02000000 /* Multiple Precision Multiply */
+#define ELF_SPARC_HWCAP_MONT	0x04000000 /* Montgomery Mult/Sqrt */
+#define ELF_SPARC_HWCAP_PAUSE	0x08000000 /* Pause insn */
+#define ELF_SPARC_HWCAP_CBCOND	0x10000000 /* Compare and Branch insns */
+#define ELF_SPARC_HWCAP_CRC32C	0x20000000 /* CRC32C insn */
 
 #endif /* _ELF_SPARC_H */
diff --git a/include/elf/tilegx.h b/include/elf/tilegx.h
index d276f2e..004ce28 100644
--- a/include/elf/tilegx.h
+++ b/include/elf/tilegx.h
@@ -104,48 +104,37 @@ START_RELOC_NUMBERS (elf_tilegx_reloc_type)
 
   RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_GOT,          64)
   RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_GOT,          65)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_GOT,          66)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_GOT,          67)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_GOT,          68)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_GOT,          69)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW3_GOT,          70)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW3_GOT,          71)
+  /* Relocs 66-71 are currently not defined.  */
+
   RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_GOT,     72)
   RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_GOT,     73)
   RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_GOT,     74)
   RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_GOT,     75)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_LAST_GOT,     76)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_LAST_GOT,     77)
+  /* Relocs 76-77 are currently not defined.  */
 
   RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_TLS_GD,       78)
   RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_TLS_GD,       79)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_TLS_GD,       80)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_TLS_GD,       81)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_TLS_GD,       82)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_TLS_GD,       83)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW3_TLS_GD,       84)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW3_TLS_GD,       85)
+  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_TLS_LE,       80)
+  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_TLS_LE,       81)
+  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE,  82)
+  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE,  83)
+  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE,  84)
+  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE,  85)
   RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD,  86)
   RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD,  87)
   RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD,  88)
   RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD,  89)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_LAST_TLS_GD,  90)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_LAST_TLS_GD,  91)
+  /* Relocs 90-91 are currently not defined.  */
 
   RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_TLS_IE,       92)
   RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_TLS_IE,       93)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_TLS_IE,       94)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_TLS_IE,       95)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_TLS_IE,       96)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_TLS_IE,       97)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW3_TLS_IE,       98)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW3_TLS_IE,       99)
+  /* Relocs 94-99 are currently not defined.  */
+
   RELOC_NUMBER (R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE, 100)
   RELOC_NUMBER (R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE, 101)
   RELOC_NUMBER (R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE, 102)
   RELOC_NUMBER (R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE, 103)
-  RELOC_NUMBER (R_TILEGX_IMM16_X0_HW2_LAST_TLS_IE, 104)
-  RELOC_NUMBER (R_TILEGX_IMM16_X1_HW2_LAST_TLS_IE, 105)
+  /* Relocs 104-105 are currently not defined.  */
 
   RELOC_NUMBER (R_TILEGX_TLS_DTPMOD64,             106)
   RELOC_NUMBER (R_TILEGX_TLS_DTPOFF64,             107)
@@ -154,6 +143,17 @@ START_RELOC_NUMBERS (elf_tilegx_reloc_type)
   RELOC_NUMBER (R_TILEGX_TLS_DTPOFF32,             110)
   RELOC_NUMBER (R_TILEGX_TLS_TPOFF32,              111)
 
+  RELOC_NUMBER (R_TILEGX_TLS_GD_CALL,              112)
+  RELOC_NUMBER (R_TILEGX_IMM8_X0_TLS_GD_ADD,       113)
+  RELOC_NUMBER (R_TILEGX_IMM8_X1_TLS_GD_ADD,       114)
+  RELOC_NUMBER (R_TILEGX_IMM8_Y0_TLS_GD_ADD,       115)
+  RELOC_NUMBER (R_TILEGX_IMM8_Y1_TLS_GD_ADD,       116)
+  RELOC_NUMBER (R_TILEGX_TLS_IE_LOAD,              117)
+  RELOC_NUMBER (R_TILEGX_IMM8_X0_TLS_ADD,          118)
+  RELOC_NUMBER (R_TILEGX_IMM8_X1_TLS_ADD,          119)
+  RELOC_NUMBER (R_TILEGX_IMM8_Y0_TLS_ADD,          120)
+  RELOC_NUMBER (R_TILEGX_IMM8_Y1_TLS_ADD,          121)
+
 /* These are GNU extensions to enable C++ vtable garbage collection.  */
   RELOC_NUMBER (R_TILEGX_GNU_VTINHERIT, 128)
   RELOC_NUMBER (R_TILEGX_GNU_VTENTRY, 129)
diff --git a/include/elf/tilepro.h b/include/elf/tilepro.h
index 899697f..0079a2f 100644
--- a/include/elf/tilepro.h
+++ b/include/elf/tilepro.h
@@ -96,7 +96,14 @@ START_RELOC_NUMBERS (elf_tilepro_reloc_type)
 
   RELOC_NUMBER (R_TILEPRO_DEST_IMM8_X1,       55)
 
-  /* Relocs 56-65 are currently not defined.  */
+  /* Relocs 56-59 are currently not defined.  */
+
+  RELOC_NUMBER (R_TILEPRO_TLS_GD_CALL,        60)
+  RELOC_NUMBER (R_TILEPRO_IMM8_X0_TLS_GD_ADD, 61)
+  RELOC_NUMBER (R_TILEPRO_IMM8_X1_TLS_GD_ADD, 62)
+  RELOC_NUMBER (R_TILEPRO_IMM8_Y0_TLS_GD_ADD, 63)
+  RELOC_NUMBER (R_TILEPRO_IMM8_Y1_TLS_GD_ADD, 64)
+  RELOC_NUMBER (R_TILEPRO_TLS_IE_LOAD,        65)
 
   RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_GD,    66)
   RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_GD,    67)
@@ -120,6 +127,15 @@ START_RELOC_NUMBERS (elf_tilepro_reloc_type)
   RELOC_NUMBER (R_TILEPRO_TLS_DTPOFF32,       83)
   RELOC_NUMBER (R_TILEPRO_TLS_TPOFF32,        84)
 
+  RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_LE,    85)
+  RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_LE,    86)
+  RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_LE_LO, 87)
+  RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_LE_LO, 88)
+  RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_LE_HI, 89)
+  RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_LE_HI, 90)
+  RELOC_NUMBER (R_TILEPRO_IMM16_X0_TLS_LE_HA, 91)
+  RELOC_NUMBER (R_TILEPRO_IMM16_X1_TLS_LE_HA, 92)
+
 /* These are GNU extensions to enable C++ vtable garbage collection.  */
   RELOC_NUMBER (R_TILEPRO_GNU_VTINHERIT, 128)
   RELOC_NUMBER (R_TILEPRO_GNU_VTENTRY, 129)
diff --git a/include/elf/xgate.h b/include/elf/xgate.h
new file mode 100644
index 0000000..33286a8
--- /dev/null
+++ b/include/elf/xgate.h
@@ -0,0 +1,77 @@
+/* XGATE ELF support for BFD.
+   Copyright 2010, 2011, 2012 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _ELF_XGATE_H
+#define _ELF_XGATE_H
+
+#include "elf/reloc-macros.h"
+
+/* Relocation types.  */
+START_RELOC_NUMBERS (elf_xgate_reloc_type)
+  RELOC_NUMBER (R_XGATE_NONE, 0)
+  RELOC_NUMBER (R_XGATE_8, 1)
+  RELOC_NUMBER (R_XGATE_PCREL_8, 2)
+  RELOC_NUMBER (R_XGATE_16, 3)
+  RELOC_NUMBER (R_XGATE_32, 4)
+  RELOC_NUMBER (R_XGATE_PCREL_16, 5)
+  /* These are GNU extensions to enable C++ vtable garbage collection.  */
+  RELOC_NUMBER (R_XGATE_GNU_VTINHERIT, 6)
+  RELOC_NUMBER (R_XGATE_GNU_VTENTRY, 7)
+
+  RELOC_NUMBER (R_XGATE_24, 8)
+  RELOC_NUMBER (R_XGATE_LO16, 9)
+  RELOC_NUMBER (R_XGATE_GPAGE, 10)
+  RELOC_NUMBER (R_XGATE_PCREL_9, 11)
+  RELOC_NUMBER (R_XGATE_PCREL_10, 12)
+  RELOC_NUMBER (R_XGATE_IMM8_LO, 13)
+  RELOC_NUMBER (R_XGATE_IMM8_HI, 14)
+  RELOC_NUMBER (R_XGATE_IMM3, 15)
+  RELOC_NUMBER (R_XGATE_IMM4, 16)
+  RELOC_NUMBER (R_XGATE_IMM5, 17)
+
+  /* GNU extension for linker relaxation.
+     Mark beginning of a jump instruction (any form).  */
+  RELOC_NUMBER (R_XGATE_RL_JUMP, 18)
+
+  /* Mark beginning of Gcc relaxation group instruction.  */
+  RELOC_NUMBER (R_XGATE_RL_GROUP, 19)
+END_RELOC_NUMBERS (R_XGATE_max)
+
+/* Processor specific flags for the ELF header e_flags field.  */
+
+/* ABI identification.  */
+#define EF_XGATE_ABI  0x00000000F
+
+/* Integers are 32-bit long.  */
+#define E_XGATE_I32   0x000000001
+
+/* Doubles are 64-bit long.  */
+#define E_XGATE_F64   0x000000002
+
+#define EF_XGATE_MACH_MASK  0xF0
+
+#define EF_XGATE_MACH       0x80 /* XGATE microcontroller.  */
+
+#define E_M68HCS12X_GLOBAL  0x100
+
+/* Identify interrupt handlers.  This is used by the debugger to
+   correctly compute the stack frame.  */
+#define STO_XGATE_INTERRUPT 0x40
+     
+#endif
diff --git a/include/filenames.h b/include/filenames.h
index 75ec330..e799a51 100644
--- a/include/filenames.h
+++ b/include/filenames.h
@@ -26,6 +26,8 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
 #ifndef FILENAMES_H
 #define FILENAMES_H
 
+#include "hashtab.h" /* for hashval_t */
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -84,6 +86,10 @@ extern int filename_cmp (const char *s1, const char *s2);
 extern int filename_ncmp (const char *s1, const char *s2,
 			  size_t n);
 
+extern hashval_t filename_hash (const void *s);
+
+extern int filename_eq (const void *s1, const void *s2);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/include/gdb/ChangeLog b/include/gdb/ChangeLog
index 9ce3db9..833f913 100644
--- a/include/gdb/ChangeLog
+++ b/include/gdb/ChangeLog
@@ -1,3 +1,27 @@
+2012-06-23  Doug Evans  <dje at google.com>
+
+	* gdb-index.h: New file.
+
+2012-05-24  Pedro Alves  <palves at redhat.com>
+
+	PR gdb/7205
+
+        Replace TARGET_SIGNAL_ with GDB_SIGNAL_ throughout.
+
+2012-05-24  Pedro Alves  <palves at redhat.com>
+
+	PR gdb/7205
+
+	Replace target_signal with gdb_signal throughout.
+
+2012-04-12  Mike Frysinger  <vapier at gentoo.org>
+
+	* callback.h (CB_SYS_argc, CB_SYS_argnlen, CB_SYS_argn): Define.
+
+2012-02-03  Kevin Buettner  <kevinb at redhat.com>
+
+	* sim-rl78.h: New file.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* callback.h (cb_get_string): New prototype.
diff --git a/include/gdb/callback.h b/include/gdb/callback.h
index 9b6cf85..d8d1472 100644
--- a/include/gdb/callback.h
+++ b/include/gdb/callback.h
@@ -231,6 +231,11 @@ extern host_callback default_callback;
 #define CB_SYS_truncate	21
 #define CB_SYS_ftruncate 22
 #define CB_SYS_pipe 	23
+
+/* New ARGV support.  */
+#define CB_SYS_argc	24
+#define CB_SYS_argnlen	25
+#define CB_SYS_argn	26
 

 /* Struct use to pass and return information necessary to perform a
    system call.  */
@@ -309,7 +314,7 @@ int cb_target_to_host_open (host_callback *, int);
 int cb_target_to_host_signal (host_callback *, int);
 
 /* Translate host signal number to target.  */
-int cb_host_to_target_signal (host_callback *, int);
+int cb_host_to_gdb_signal (host_callback *, int);
 
 /* Translate host stat struct to target.
    If stat struct ptr is NULL, just compute target stat struct size.
diff --git a/include/gdb/gdb-index.h b/include/gdb/gdb-index.h
new file mode 100644
index 0000000..92c3398
--- /dev/null
+++ b/include/gdb/gdb-index.h
@@ -0,0 +1,99 @@
+/* Public attributes of the .gdb_index section.
+   Copyright 2012 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* This file contains values for understanding the .gdb_index section
+   needed by more than just GDB, e.g. readelf.  */
+
+#ifndef GDB_INDEX_H
+#define GDB_INDEX_H
+
+/* Each symbol in .gdb_index refers to a set of CUs that defines the symbol.
+   Each CU is represented by a 32 bit number that is the index of the CU in
+   the CU table, plus some attributes of the use of the symbol in that CU.
+
+   The values are defined such that if all the bits are zero, then no
+   special meaning is assigned to any of them.  This is done to preserve
+   compatibility with older indices.  The way this is done is to specify
+   that if the GDB_INDEX_SYMBOL_KIND value is zero then all other attribute
+   bits must be zero.
+
+    0-23  CU index
+   24-27  reserved
+   28-30  symbol kind
+   31     0 == global, 1 == static
+
+   Bits 24-27 are reserved because it's easier to relax restrictions than
+   it is to impose them after the fact.  At present 24 bits to represent
+   the CU index is plenty.  If we need more bits for the CU index or for
+   attributes then we have them.  */
+
+/* Whether the symbol is in GLOBAL_BLOCK (== 0) or STATIC_BLOCK (== 1).  */
+#define GDB_INDEX_SYMBOL_STATIC_SHIFT 31
+#define GDB_INDEX_SYMBOL_STATIC_MASK 1
+#define GDB_INDEX_SYMBOL_STATIC_VALUE(cu_index) \
+  (((cu_index) >> GDB_INDEX_SYMBOL_STATIC_SHIFT) & GDB_INDEX_SYMBOL_STATIC_MASK)
+#define GDB_INDEX_SYMBOL_STATIC_SET_VALUE(cu_index, value) \
+  do { \
+    (cu_index) |= (((value) & GDB_INDEX_SYMBOL_STATIC_MASK) \
+		   << GDB_INDEX_SYMBOL_STATIC_SHIFT); \
+  } while (0)
+
+/* The kind of the symbol.
+   We don't use GDB's internal values as these numbers are published
+   so that other tools can build and read .gdb_index.  */
+
+typedef enum {
+  /* Special value to indicate no attributes are present.  */
+  GDB_INDEX_SYMBOL_KIND_NONE = 0,
+  GDB_INDEX_SYMBOL_KIND_TYPE = 1,
+  GDB_INDEX_SYMBOL_KIND_VARIABLE = 2,
+  GDB_INDEX_SYMBOL_KIND_FUNCTION = 3,
+  GDB_INDEX_SYMBOL_KIND_OTHER = 4,
+  /* We currently allocate 3 bits to record the symbol kind.
+     Give the unused bits a value so gdb will print them sensibly.  */
+  GDB_INDEX_SYMBOL_KIND_UNUSED5 = 5,
+  GDB_INDEX_SYMBOL_KIND_UNUSED6 = 6,
+  GDB_INDEX_SYMBOL_KIND_UNUSED7 = 7,
+} gdb_index_symbol_kind;
+
+#define GDB_INDEX_SYMBOL_KIND_SHIFT 28
+#define GDB_INDEX_SYMBOL_KIND_MASK 7
+#define GDB_INDEX_SYMBOL_KIND_VALUE(cu_index) \
+  ((gdb_index_symbol_kind) (((cu_index) >> GDB_INDEX_SYMBOL_KIND_SHIFT) \
+			    & GDB_INDEX_SYMBOL_KIND_MASK))
+#define GDB_INDEX_SYMBOL_KIND_SET_VALUE(cu_index, value) \
+  do { \
+    (cu_index) |= (((value) & GDB_INDEX_SYMBOL_KIND_MASK) \
+		   << GDB_INDEX_SYMBOL_KIND_SHIFT); \
+  } while (0)
+
+#define GDB_INDEX_RESERVED_SHIFT 24
+#define GDB_INDEX_RESERVED_MASK 15
+#define GDB_INDEX_RESERVED_VALUE(cu_index) \
+  (((cu_index) >> GDB_INDEX_RESERVED_SHIFT) & GDB_INDEX_RESERVED_MASK)
+
+/* CU index.  */
+#define GDB_INDEX_CU_BITSIZE 24
+#define GDB_INDEX_CU_MASK ((1 << GDB_INDEX_CU_BITSIZE) - 1)
+#define GDB_INDEX_CU_VALUE(cu_index) ((cu_index) & GDB_INDEX_CU_MASK)
+#define GDB_INDEX_CU_SET_VALUE(cu_index, value) \
+  do { \
+    (cu_index) |= (value) & GDB_INDEX_CU_MASK; \
+  } while (0)
+
+#endif /* GDB_INDEX_H */
diff --git a/include/gdb/signals.def b/include/gdb/signals.def
index c01895a..ef4c8d4 100644
--- a/include/gdb/signals.def
+++ b/include/gdb/signals.def
@@ -18,173 +18,173 @@
 
 /* Used some places (e.g. stop_signal) to record the concept that
    there is no signal.  */
-SET (TARGET_SIGNAL_0, 0, "0", "Signal 0")
-#define TARGET_SIGNAL_FIRST TARGET_SIGNAL_0
-SET (TARGET_SIGNAL_HUP, 1, "SIGHUP", "Hangup")
-SET (TARGET_SIGNAL_INT, 2, "SIGINT", "Interrupt")
-SET (TARGET_SIGNAL_QUIT, 3, "SIGQUIT", "Quit")
-SET (TARGET_SIGNAL_ILL, 4, "SIGILL", "Illegal instruction")
-SET (TARGET_SIGNAL_TRAP, 5, "SIGTRAP", "Trace/breakpoint trap")
-SET (TARGET_SIGNAL_ABRT, 6, "SIGABRT", "Aborted")
-SET (TARGET_SIGNAL_EMT, 7, "SIGEMT", "Emulation trap")
-SET (TARGET_SIGNAL_FPE, 8, "SIGFPE", "Arithmetic exception")
-SET (TARGET_SIGNAL_KILL, 9, "SIGKILL", "Killed")
-SET (TARGET_SIGNAL_BUS, 10, "SIGBUS", "Bus error")
-SET (TARGET_SIGNAL_SEGV, 11, "SIGSEGV", "Segmentation fault")
-SET (TARGET_SIGNAL_SYS, 12, "SIGSYS", "Bad system call")
-SET (TARGET_SIGNAL_PIPE, 13, "SIGPIPE", "Broken pipe")
-SET (TARGET_SIGNAL_ALRM, 14, "SIGALRM", "Alarm clock")
-SET (TARGET_SIGNAL_TERM, 15, "SIGTERM", "Terminated")
-SET (TARGET_SIGNAL_URG, 16, "SIGURG", "Urgent I/O condition")
-SET (TARGET_SIGNAL_STOP, 17, "SIGSTOP", "Stopped (signal)")
-SET (TARGET_SIGNAL_TSTP, 18, "SIGTSTP", "Stopped (user)")
-SET (TARGET_SIGNAL_CONT, 19, "SIGCONT", "Continued")
-SET (TARGET_SIGNAL_CHLD, 20, "SIGCHLD", "Child status changed")
-SET (TARGET_SIGNAL_TTIN, 21, "SIGTTIN", "Stopped (tty input)")
-SET (TARGET_SIGNAL_TTOU, 22, "SIGTTOU", "Stopped (tty output)")
-SET (TARGET_SIGNAL_IO, 23, "SIGIO", "I/O possible")
-SET (TARGET_SIGNAL_XCPU, 24, "SIGXCPU", "CPU time limit exceeded")
-SET (TARGET_SIGNAL_XFSZ, 25, "SIGXFSZ", "File size limit exceeded")
-SET (TARGET_SIGNAL_VTALRM, 26, "SIGVTALRM", "Virtual timer expired")
-SET (TARGET_SIGNAL_PROF, 27, "SIGPROF", "Profiling timer expired")
-SET (TARGET_SIGNAL_WINCH, 28, "SIGWINCH", "Window size changed")
-SET (TARGET_SIGNAL_LOST, 29, "SIGLOST", "Resource lost")
-SET (TARGET_SIGNAL_USR1, 30, "SIGUSR1", "User defined signal 1")
-SET (TARGET_SIGNAL_USR2, 31, "SIGUSR2", "User defined signal 2")
-SET (TARGET_SIGNAL_PWR, 32, "SIGPWR", "Power fail/restart")
+SET (GDB_SIGNAL_0, 0, "0", "Signal 0")
+#define GDB_SIGNAL_FIRST GDB_SIGNAL_0
+SET (GDB_SIGNAL_HUP, 1, "SIGHUP", "Hangup")
+SET (GDB_SIGNAL_INT, 2, "SIGINT", "Interrupt")
+SET (GDB_SIGNAL_QUIT, 3, "SIGQUIT", "Quit")
+SET (GDB_SIGNAL_ILL, 4, "SIGILL", "Illegal instruction")
+SET (GDB_SIGNAL_TRAP, 5, "SIGTRAP", "Trace/breakpoint trap")
+SET (GDB_SIGNAL_ABRT, 6, "SIGABRT", "Aborted")
+SET (GDB_SIGNAL_EMT, 7, "SIGEMT", "Emulation trap")
+SET (GDB_SIGNAL_FPE, 8, "SIGFPE", "Arithmetic exception")
+SET (GDB_SIGNAL_KILL, 9, "SIGKILL", "Killed")
+SET (GDB_SIGNAL_BUS, 10, "SIGBUS", "Bus error")
+SET (GDB_SIGNAL_SEGV, 11, "SIGSEGV", "Segmentation fault")
+SET (GDB_SIGNAL_SYS, 12, "SIGSYS", "Bad system call")
+SET (GDB_SIGNAL_PIPE, 13, "SIGPIPE", "Broken pipe")
+SET (GDB_SIGNAL_ALRM, 14, "SIGALRM", "Alarm clock")
+SET (GDB_SIGNAL_TERM, 15, "SIGTERM", "Terminated")
+SET (GDB_SIGNAL_URG, 16, "SIGURG", "Urgent I/O condition")
+SET (GDB_SIGNAL_STOP, 17, "SIGSTOP", "Stopped (signal)")
+SET (GDB_SIGNAL_TSTP, 18, "SIGTSTP", "Stopped (user)")
+SET (GDB_SIGNAL_CONT, 19, "SIGCONT", "Continued")
+SET (GDB_SIGNAL_CHLD, 20, "SIGCHLD", "Child status changed")
+SET (GDB_SIGNAL_TTIN, 21, "SIGTTIN", "Stopped (tty input)")
+SET (GDB_SIGNAL_TTOU, 22, "SIGTTOU", "Stopped (tty output)")
+SET (GDB_SIGNAL_IO, 23, "SIGIO", "I/O possible")
+SET (GDB_SIGNAL_XCPU, 24, "SIGXCPU", "CPU time limit exceeded")
+SET (GDB_SIGNAL_XFSZ, 25, "SIGXFSZ", "File size limit exceeded")
+SET (GDB_SIGNAL_VTALRM, 26, "SIGVTALRM", "Virtual timer expired")
+SET (GDB_SIGNAL_PROF, 27, "SIGPROF", "Profiling timer expired")
+SET (GDB_SIGNAL_WINCH, 28, "SIGWINCH", "Window size changed")
+SET (GDB_SIGNAL_LOST, 29, "SIGLOST", "Resource lost")
+SET (GDB_SIGNAL_USR1, 30, "SIGUSR1", "User defined signal 1")
+SET (GDB_SIGNAL_USR2, 31, "SIGUSR2", "User defined signal 2")
+SET (GDB_SIGNAL_PWR, 32, "SIGPWR", "Power fail/restart")
 /* Similar to SIGIO.  Perhaps they should have the same number.  */
-SET (TARGET_SIGNAL_POLL, 33, "SIGPOLL", "Pollable event occurred")
-SET (TARGET_SIGNAL_WIND, 34, "SIGWIND", "SIGWIND")
-SET (TARGET_SIGNAL_PHONE, 35, "SIGPHONE", "SIGPHONE")
-SET (TARGET_SIGNAL_WAITING, 36, "SIGWAITING", "Process's LWPs are blocked")
-SET (TARGET_SIGNAL_LWP, 37, "SIGLWP", "Signal LWP")
-SET (TARGET_SIGNAL_DANGER, 38, "SIGDANGER", "Swap space dangerously low")
-SET (TARGET_SIGNAL_GRANT, 39, "SIGGRANT", "Monitor mode granted")
-SET (TARGET_SIGNAL_RETRACT, 40, "SIGRETRACT",
+SET (GDB_SIGNAL_POLL, 33, "SIGPOLL", "Pollable event occurred")
+SET (GDB_SIGNAL_WIND, 34, "SIGWIND", "SIGWIND")
+SET (GDB_SIGNAL_PHONE, 35, "SIGPHONE", "SIGPHONE")
+SET (GDB_SIGNAL_WAITING, 36, "SIGWAITING", "Process's LWPs are blocked")
+SET (GDB_SIGNAL_LWP, 37, "SIGLWP", "Signal LWP")
+SET (GDB_SIGNAL_DANGER, 38, "SIGDANGER", "Swap space dangerously low")
+SET (GDB_SIGNAL_GRANT, 39, "SIGGRANT", "Monitor mode granted")
+SET (GDB_SIGNAL_RETRACT, 40, "SIGRETRACT",
      "Need to relinquish monitor mode")
-SET (TARGET_SIGNAL_MSG, 41, "SIGMSG", "Monitor mode data available")
-SET (TARGET_SIGNAL_SOUND, 42, "SIGSOUND", "Sound completed")
-SET (TARGET_SIGNAL_SAK, 43, "SIGSAK", "Secure attention")
-SET (TARGET_SIGNAL_PRIO, 44, "SIGPRIO", "SIGPRIO")
-SET (TARGET_SIGNAL_REALTIME_33, 45, "SIG33", "Real-time event 33")
-SET (TARGET_SIGNAL_REALTIME_34, 46, "SIG34", "Real-time event 34")
-SET (TARGET_SIGNAL_REALTIME_35, 47, "SIG35", "Real-time event 35")
-SET (TARGET_SIGNAL_REALTIME_36, 48, "SIG36", "Real-time event 36")
-SET (TARGET_SIGNAL_REALTIME_37, 49, "SIG37", "Real-time event 37")
-SET (TARGET_SIGNAL_REALTIME_38, 50, "SIG38", "Real-time event 38")
-SET (TARGET_SIGNAL_REALTIME_39, 51, "SIG39", "Real-time event 39")
-SET (TARGET_SIGNAL_REALTIME_40, 52, "SIG40", "Real-time event 40")
-SET (TARGET_SIGNAL_REALTIME_41, 53, "SIG41", "Real-time event 41")
-SET (TARGET_SIGNAL_REALTIME_42, 54, "SIG42", "Real-time event 42")
-SET (TARGET_SIGNAL_REALTIME_43, 55, "SIG43", "Real-time event 43")
-SET (TARGET_SIGNAL_REALTIME_44, 56, "SIG44", "Real-time event 44")
-SET (TARGET_SIGNAL_REALTIME_45, 57, "SIG45", "Real-time event 45")
-SET (TARGET_SIGNAL_REALTIME_46, 58, "SIG46", "Real-time event 46")
-SET (TARGET_SIGNAL_REALTIME_47, 59, "SIG47", "Real-time event 47")
-SET (TARGET_SIGNAL_REALTIME_48, 60, "SIG48", "Real-time event 48")
-SET (TARGET_SIGNAL_REALTIME_49, 61, "SIG49", "Real-time event 49")
-SET (TARGET_SIGNAL_REALTIME_50, 62, "SIG50", "Real-time event 50")
-SET (TARGET_SIGNAL_REALTIME_51, 63, "SIG51", "Real-time event 51")
-SET (TARGET_SIGNAL_REALTIME_52, 64, "SIG52", "Real-time event 52")
-SET (TARGET_SIGNAL_REALTIME_53, 65, "SIG53", "Real-time event 53")
-SET (TARGET_SIGNAL_REALTIME_54, 66, "SIG54", "Real-time event 54")
-SET (TARGET_SIGNAL_REALTIME_55, 67, "SIG55", "Real-time event 55")
-SET (TARGET_SIGNAL_REALTIME_56, 68, "SIG56", "Real-time event 56")
-SET (TARGET_SIGNAL_REALTIME_57, 69, "SIG57", "Real-time event 57")
-SET (TARGET_SIGNAL_REALTIME_58, 70, "SIG58", "Real-time event 58")
-SET (TARGET_SIGNAL_REALTIME_59, 71, "SIG59", "Real-time event 59")
-SET (TARGET_SIGNAL_REALTIME_60, 72, "SIG60", "Real-time event 60")
-SET (TARGET_SIGNAL_REALTIME_61, 73, "SIG61", "Real-time event 61")
-SET (TARGET_SIGNAL_REALTIME_62, 74, "SIG62", "Real-time event 62")
-SET (TARGET_SIGNAL_REALTIME_63, 75, "SIG63", "Real-time event 63")
+SET (GDB_SIGNAL_MSG, 41, "SIGMSG", "Monitor mode data available")
+SET (GDB_SIGNAL_SOUND, 42, "SIGSOUND", "Sound completed")
+SET (GDB_SIGNAL_SAK, 43, "SIGSAK", "Secure attention")
+SET (GDB_SIGNAL_PRIO, 44, "SIGPRIO", "SIGPRIO")
+SET (GDB_SIGNAL_REALTIME_33, 45, "SIG33", "Real-time event 33")
+SET (GDB_SIGNAL_REALTIME_34, 46, "SIG34", "Real-time event 34")
+SET (GDB_SIGNAL_REALTIME_35, 47, "SIG35", "Real-time event 35")
+SET (GDB_SIGNAL_REALTIME_36, 48, "SIG36", "Real-time event 36")
+SET (GDB_SIGNAL_REALTIME_37, 49, "SIG37", "Real-time event 37")
+SET (GDB_SIGNAL_REALTIME_38, 50, "SIG38", "Real-time event 38")
+SET (GDB_SIGNAL_REALTIME_39, 51, "SIG39", "Real-time event 39")
+SET (GDB_SIGNAL_REALTIME_40, 52, "SIG40", "Real-time event 40")
+SET (GDB_SIGNAL_REALTIME_41, 53, "SIG41", "Real-time event 41")
+SET (GDB_SIGNAL_REALTIME_42, 54, "SIG42", "Real-time event 42")
+SET (GDB_SIGNAL_REALTIME_43, 55, "SIG43", "Real-time event 43")
+SET (GDB_SIGNAL_REALTIME_44, 56, "SIG44", "Real-time event 44")
+SET (GDB_SIGNAL_REALTIME_45, 57, "SIG45", "Real-time event 45")
+SET (GDB_SIGNAL_REALTIME_46, 58, "SIG46", "Real-time event 46")
+SET (GDB_SIGNAL_REALTIME_47, 59, "SIG47", "Real-time event 47")
+SET (GDB_SIGNAL_REALTIME_48, 60, "SIG48", "Real-time event 48")
+SET (GDB_SIGNAL_REALTIME_49, 61, "SIG49", "Real-time event 49")
+SET (GDB_SIGNAL_REALTIME_50, 62, "SIG50", "Real-time event 50")
+SET (GDB_SIGNAL_REALTIME_51, 63, "SIG51", "Real-time event 51")
+SET (GDB_SIGNAL_REALTIME_52, 64, "SIG52", "Real-time event 52")
+SET (GDB_SIGNAL_REALTIME_53, 65, "SIG53", "Real-time event 53")
+SET (GDB_SIGNAL_REALTIME_54, 66, "SIG54", "Real-time event 54")
+SET (GDB_SIGNAL_REALTIME_55, 67, "SIG55", "Real-time event 55")
+SET (GDB_SIGNAL_REALTIME_56, 68, "SIG56", "Real-time event 56")
+SET (GDB_SIGNAL_REALTIME_57, 69, "SIG57", "Real-time event 57")
+SET (GDB_SIGNAL_REALTIME_58, 70, "SIG58", "Real-time event 58")
+SET (GDB_SIGNAL_REALTIME_59, 71, "SIG59", "Real-time event 59")
+SET (GDB_SIGNAL_REALTIME_60, 72, "SIG60", "Real-time event 60")
+SET (GDB_SIGNAL_REALTIME_61, 73, "SIG61", "Real-time event 61")
+SET (GDB_SIGNAL_REALTIME_62, 74, "SIG62", "Real-time event 62")
+SET (GDB_SIGNAL_REALTIME_63, 75, "SIG63", "Real-time event 63")
 
 /* Used internally by Solaris threads.  See signal(5) on Solaris.  */
-SET (TARGET_SIGNAL_CANCEL, 76, "SIGCANCEL", "LWP internal signal")
+SET (GDB_SIGNAL_CANCEL, 76, "SIGCANCEL", "LWP internal signal")
 
 /* Yes, this pains me, too.  But LynxOS didn't have SIG32, and now
    GNU/Linux does, and we can't disturb the numbering, since it's
    part of the remote protocol.  Note that in some GDB's
-   TARGET_SIGNAL_REALTIME_32 is number 76.  */
-SET (TARGET_SIGNAL_REALTIME_32, 77, "SIG32", "Real-time event 32")
+   GDB_SIGNAL_REALTIME_32 is number 76.  */
+SET (GDB_SIGNAL_REALTIME_32, 77, "SIG32", "Real-time event 32")
 /* Yet another pain, IRIX 6 has SIG64. */
-SET (TARGET_SIGNAL_REALTIME_64, 78, "SIG64", "Real-time event 64")
+SET (GDB_SIGNAL_REALTIME_64, 78, "SIG64", "Real-time event 64")
 /* Yet another pain, GNU/Linux MIPS might go up to 128. */
-SET (TARGET_SIGNAL_REALTIME_65, 79, "SIG65", "Real-time event 65")
-SET (TARGET_SIGNAL_REALTIME_66, 80, "SIG66", "Real-time event 66")
-SET (TARGET_SIGNAL_REALTIME_67, 81, "SIG67", "Real-time event 67")
-SET (TARGET_SIGNAL_REALTIME_68, 82, "SIG68", "Real-time event 68")
-SET (TARGET_SIGNAL_REALTIME_69, 83, "SIG69", "Real-time event 69")
-SET (TARGET_SIGNAL_REALTIME_70, 84, "SIG70", "Real-time event 70")
-SET (TARGET_SIGNAL_REALTIME_71, 85, "SIG71", "Real-time event 71")
-SET (TARGET_SIGNAL_REALTIME_72, 86, "SIG72", "Real-time event 72")
-SET (TARGET_SIGNAL_REALTIME_73, 87, "SIG73", "Real-time event 73")
-SET (TARGET_SIGNAL_REALTIME_74, 88, "SIG74", "Real-time event 74")
-SET (TARGET_SIGNAL_REALTIME_75, 89, "SIG75", "Real-time event 75")
-SET (TARGET_SIGNAL_REALTIME_76, 90, "SIG76", "Real-time event 76")
-SET (TARGET_SIGNAL_REALTIME_77, 91, "SIG77", "Real-time event 77")
-SET (TARGET_SIGNAL_REALTIME_78, 92, "SIG78", "Real-time event 78")
-SET (TARGET_SIGNAL_REALTIME_79, 93, "SIG79", "Real-time event 79")
-SET (TARGET_SIGNAL_REALTIME_80, 94, "SIG80", "Real-time event 80")
-SET (TARGET_SIGNAL_REALTIME_81, 95, "SIG81", "Real-time event 81")
-SET (TARGET_SIGNAL_REALTIME_82, 96, "SIG82", "Real-time event 82")
-SET (TARGET_SIGNAL_REALTIME_83, 97, "SIG83", "Real-time event 83")
-SET (TARGET_SIGNAL_REALTIME_84, 98, "SIG84", "Real-time event 84")
-SET (TARGET_SIGNAL_REALTIME_85, 99, "SIG85", "Real-time event 85")
-SET (TARGET_SIGNAL_REALTIME_86, 100, "SIG86", "Real-time event 86")
-SET (TARGET_SIGNAL_REALTIME_87, 101, "SIG87", "Real-time event 87")
-SET (TARGET_SIGNAL_REALTIME_88, 102, "SIG88", "Real-time event 88")
-SET (TARGET_SIGNAL_REALTIME_89, 103, "SIG89", "Real-time event 89")
-SET (TARGET_SIGNAL_REALTIME_90, 104, "SIG90", "Real-time event 90")
-SET (TARGET_SIGNAL_REALTIME_91, 105, "SIG91", "Real-time event 91")
-SET (TARGET_SIGNAL_REALTIME_92, 106, "SIG92", "Real-time event 92")
-SET (TARGET_SIGNAL_REALTIME_93, 107, "SIG93", "Real-time event 93")
-SET (TARGET_SIGNAL_REALTIME_94, 108, "SIG94", "Real-time event 94")
-SET (TARGET_SIGNAL_REALTIME_95, 109, "SIG95", "Real-time event 95")
-SET (TARGET_SIGNAL_REALTIME_96, 110, "SIG96", "Real-time event 96")
-SET (TARGET_SIGNAL_REALTIME_97, 111, "SIG97", "Real-time event 97")
-SET (TARGET_SIGNAL_REALTIME_98, 112, "SIG98", "Real-time event 98")
-SET (TARGET_SIGNAL_REALTIME_99, 113, "SIG99", "Real-time event 99")
-SET (TARGET_SIGNAL_REALTIME_100, 114, "SIG100", "Real-time event 100")
-SET (TARGET_SIGNAL_REALTIME_101, 115, "SIG101", "Real-time event 101")
-SET (TARGET_SIGNAL_REALTIME_102, 116, "SIG102", "Real-time event 102")
-SET (TARGET_SIGNAL_REALTIME_103, 117, "SIG103", "Real-time event 103")
-SET (TARGET_SIGNAL_REALTIME_104, 118, "SIG104", "Real-time event 104")
-SET (TARGET_SIGNAL_REALTIME_105, 119, "SIG105", "Real-time event 105")
-SET (TARGET_SIGNAL_REALTIME_106, 120, "SIG106", "Real-time event 106")
-SET (TARGET_SIGNAL_REALTIME_107, 121, "SIG107", "Real-time event 107")
-SET (TARGET_SIGNAL_REALTIME_108, 122, "SIG108", "Real-time event 108")
-SET (TARGET_SIGNAL_REALTIME_109, 123, "SIG109", "Real-time event 109")
-SET (TARGET_SIGNAL_REALTIME_110, 124, "SIG110", "Real-time event 110")
-SET (TARGET_SIGNAL_REALTIME_111, 125, "SIG111", "Real-time event 111")
-SET (TARGET_SIGNAL_REALTIME_112, 126, "SIG112", "Real-time event 112")
-SET (TARGET_SIGNAL_REALTIME_113, 127, "SIG113", "Real-time event 113")
-SET (TARGET_SIGNAL_REALTIME_114, 128, "SIG114", "Real-time event 114")
-SET (TARGET_SIGNAL_REALTIME_115, 129, "SIG115", "Real-time event 115")
-SET (TARGET_SIGNAL_REALTIME_116, 130, "SIG116", "Real-time event 116")
-SET (TARGET_SIGNAL_REALTIME_117, 131, "SIG117", "Real-time event 117")
-SET (TARGET_SIGNAL_REALTIME_118, 132, "SIG118", "Real-time event 118")
-SET (TARGET_SIGNAL_REALTIME_119, 133, "SIG119", "Real-time event 119")
-SET (TARGET_SIGNAL_REALTIME_120, 134, "SIG120", "Real-time event 120")
-SET (TARGET_SIGNAL_REALTIME_121, 135, "SIG121", "Real-time event 121")
-SET (TARGET_SIGNAL_REALTIME_122, 136, "SIG122", "Real-time event 122")
-SET (TARGET_SIGNAL_REALTIME_123, 137, "SIG123", "Real-time event 123")
-SET (TARGET_SIGNAL_REALTIME_124, 138, "SIG124", "Real-time event 124")
-SET (TARGET_SIGNAL_REALTIME_125, 139, "SIG125", "Real-time event 125")
-SET (TARGET_SIGNAL_REALTIME_126, 140, "SIG126", "Real-time event 126")
-SET (TARGET_SIGNAL_REALTIME_127, 141, "SIG127", "Real-time event 127")
+SET (GDB_SIGNAL_REALTIME_65, 79, "SIG65", "Real-time event 65")
+SET (GDB_SIGNAL_REALTIME_66, 80, "SIG66", "Real-time event 66")
+SET (GDB_SIGNAL_REALTIME_67, 81, "SIG67", "Real-time event 67")
+SET (GDB_SIGNAL_REALTIME_68, 82, "SIG68", "Real-time event 68")
+SET (GDB_SIGNAL_REALTIME_69, 83, "SIG69", "Real-time event 69")
+SET (GDB_SIGNAL_REALTIME_70, 84, "SIG70", "Real-time event 70")
+SET (GDB_SIGNAL_REALTIME_71, 85, "SIG71", "Real-time event 71")
+SET (GDB_SIGNAL_REALTIME_72, 86, "SIG72", "Real-time event 72")
+SET (GDB_SIGNAL_REALTIME_73, 87, "SIG73", "Real-time event 73")
+SET (GDB_SIGNAL_REALTIME_74, 88, "SIG74", "Real-time event 74")
+SET (GDB_SIGNAL_REALTIME_75, 89, "SIG75", "Real-time event 75")
+SET (GDB_SIGNAL_REALTIME_76, 90, "SIG76", "Real-time event 76")
+SET (GDB_SIGNAL_REALTIME_77, 91, "SIG77", "Real-time event 77")
+SET (GDB_SIGNAL_REALTIME_78, 92, "SIG78", "Real-time event 78")
+SET (GDB_SIGNAL_REALTIME_79, 93, "SIG79", "Real-time event 79")
+SET (GDB_SIGNAL_REALTIME_80, 94, "SIG80", "Real-time event 80")
+SET (GDB_SIGNAL_REALTIME_81, 95, "SIG81", "Real-time event 81")
+SET (GDB_SIGNAL_REALTIME_82, 96, "SIG82", "Real-time event 82")
+SET (GDB_SIGNAL_REALTIME_83, 97, "SIG83", "Real-time event 83")
+SET (GDB_SIGNAL_REALTIME_84, 98, "SIG84", "Real-time event 84")
+SET (GDB_SIGNAL_REALTIME_85, 99, "SIG85", "Real-time event 85")
+SET (GDB_SIGNAL_REALTIME_86, 100, "SIG86", "Real-time event 86")
+SET (GDB_SIGNAL_REALTIME_87, 101, "SIG87", "Real-time event 87")
+SET (GDB_SIGNAL_REALTIME_88, 102, "SIG88", "Real-time event 88")
+SET (GDB_SIGNAL_REALTIME_89, 103, "SIG89", "Real-time event 89")
+SET (GDB_SIGNAL_REALTIME_90, 104, "SIG90", "Real-time event 90")
+SET (GDB_SIGNAL_REALTIME_91, 105, "SIG91", "Real-time event 91")
+SET (GDB_SIGNAL_REALTIME_92, 106, "SIG92", "Real-time event 92")
+SET (GDB_SIGNAL_REALTIME_93, 107, "SIG93", "Real-time event 93")
+SET (GDB_SIGNAL_REALTIME_94, 108, "SIG94", "Real-time event 94")
+SET (GDB_SIGNAL_REALTIME_95, 109, "SIG95", "Real-time event 95")
+SET (GDB_SIGNAL_REALTIME_96, 110, "SIG96", "Real-time event 96")
+SET (GDB_SIGNAL_REALTIME_97, 111, "SIG97", "Real-time event 97")
+SET (GDB_SIGNAL_REALTIME_98, 112, "SIG98", "Real-time event 98")
+SET (GDB_SIGNAL_REALTIME_99, 113, "SIG99", "Real-time event 99")
+SET (GDB_SIGNAL_REALTIME_100, 114, "SIG100", "Real-time event 100")
+SET (GDB_SIGNAL_REALTIME_101, 115, "SIG101", "Real-time event 101")
+SET (GDB_SIGNAL_REALTIME_102, 116, "SIG102", "Real-time event 102")
+SET (GDB_SIGNAL_REALTIME_103, 117, "SIG103", "Real-time event 103")
+SET (GDB_SIGNAL_REALTIME_104, 118, "SIG104", "Real-time event 104")
+SET (GDB_SIGNAL_REALTIME_105, 119, "SIG105", "Real-time event 105")
+SET (GDB_SIGNAL_REALTIME_106, 120, "SIG106", "Real-time event 106")
+SET (GDB_SIGNAL_REALTIME_107, 121, "SIG107", "Real-time event 107")
+SET (GDB_SIGNAL_REALTIME_108, 122, "SIG108", "Real-time event 108")
+SET (GDB_SIGNAL_REALTIME_109, 123, "SIG109", "Real-time event 109")
+SET (GDB_SIGNAL_REALTIME_110, 124, "SIG110", "Real-time event 110")
+SET (GDB_SIGNAL_REALTIME_111, 125, "SIG111", "Real-time event 111")
+SET (GDB_SIGNAL_REALTIME_112, 126, "SIG112", "Real-time event 112")
+SET (GDB_SIGNAL_REALTIME_113, 127, "SIG113", "Real-time event 113")
+SET (GDB_SIGNAL_REALTIME_114, 128, "SIG114", "Real-time event 114")
+SET (GDB_SIGNAL_REALTIME_115, 129, "SIG115", "Real-time event 115")
+SET (GDB_SIGNAL_REALTIME_116, 130, "SIG116", "Real-time event 116")
+SET (GDB_SIGNAL_REALTIME_117, 131, "SIG117", "Real-time event 117")
+SET (GDB_SIGNAL_REALTIME_118, 132, "SIG118", "Real-time event 118")
+SET (GDB_SIGNAL_REALTIME_119, 133, "SIG119", "Real-time event 119")
+SET (GDB_SIGNAL_REALTIME_120, 134, "SIG120", "Real-time event 120")
+SET (GDB_SIGNAL_REALTIME_121, 135, "SIG121", "Real-time event 121")
+SET (GDB_SIGNAL_REALTIME_122, 136, "SIG122", "Real-time event 122")
+SET (GDB_SIGNAL_REALTIME_123, 137, "SIG123", "Real-time event 123")
+SET (GDB_SIGNAL_REALTIME_124, 138, "SIG124", "Real-time event 124")
+SET (GDB_SIGNAL_REALTIME_125, 139, "SIG125", "Real-time event 125")
+SET (GDB_SIGNAL_REALTIME_126, 140, "SIG126", "Real-time event 126")
+SET (GDB_SIGNAL_REALTIME_127, 141, "SIG127", "Real-time event 127")
 
-SET (TARGET_SIGNAL_INFO, 142, "SIGINFO", "Information request")
+SET (GDB_SIGNAL_INFO, 142, "SIGINFO", "Information request")
 
 /* Some signal we don't know about.  */
-SET (TARGET_SIGNAL_UNKNOWN, 143, NULL, "Unknown signal")
+SET (GDB_SIGNAL_UNKNOWN, 143, NULL, "Unknown signal")
 
 /* Use whatever signal we use when one is not specifically specified
    (for passing to proceed and so on).  */
-SET (TARGET_SIGNAL_DEFAULT, 144, NULL,
-     "Internal error: printing TARGET_SIGNAL_DEFAULT")
+SET (GDB_SIGNAL_DEFAULT, 144, NULL,
+     "Internal error: printing GDB_SIGNAL_DEFAULT")
 
 /* Mach exceptions.  In versions of GDB before 5.2, these were just before
-   TARGET_SIGNAL_INFO if you were compiling on a Mach host (and missing
+   GDB_SIGNAL_INFO if you were compiling on a Mach host (and missing
    otherwise).  */
 SET (TARGET_EXC_BAD_ACCESS, 145, "EXC_BAD_ACCESS", "Could not access memory")
 SET (TARGET_EXC_BAD_INSTRUCTION, 146, "EXC_BAD_INSTRUCTION",
@@ -197,4 +197,4 @@ SET (TARGET_EXC_BREAKPOINT, 150, "EXC_BREAKPOINT", "Breakpoint")
 /* If you are adding a new signal, add it just above this comment.  */
 
 /* Last and unused enum value, for sizing arrays, etc.  */
-SET (TARGET_SIGNAL_LAST, 151, NULL, "TARGET_SIGNAL_MAGIC")
+SET (GDB_SIGNAL_LAST, 151, NULL, "GDB_SIGNAL_MAGIC")
diff --git a/include/gdb/signals.h b/include/gdb/signals.h
index 67902c6..a59d3b5 100644
--- a/include/gdb/signals.h
+++ b/include/gdb/signals.h
@@ -45,9 +45,9 @@
    etc. are doing to address these issues.  */
 
 /* For an explanation of what each signal means, see
-   target_signal_to_string.  */
+   gdb_signal_to_string.  */
 
-enum target_signal
+enum gdb_signal
   {
 #define SET(symbol, constant, name, string) \
     symbol = constant,
diff --git a/include/gdb/sim-rl78.h b/include/gdb/sim-rl78.h
new file mode 100644
index 0000000..941ee04
--- /dev/null
+++ b/include/gdb/sim-rl78.h
@@ -0,0 +1,76 @@
+/* sim-rx.h --- interface between rl78 simulator and GDB.
+
+   Copyright 2011-2012 Free Software Foundation, Inc.
+
+   Contributed by Red Hat.
+
+   This file is part of GDB.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#if !defined (SIM_RL78_H)
+#define SIM_RL78_H
+
+enum sim_rl78_regnum
+{
+  sim_rl78_bank0_r0_regnum,
+  sim_rl78_bank0_r1_regnum,
+  sim_rl78_bank0_r2_regnum,
+  sim_rl78_bank0_r3_regnum,
+  sim_rl78_bank0_r4_regnum,
+  sim_rl78_bank0_r5_regnum,
+  sim_rl78_bank0_r6_regnum,
+  sim_rl78_bank0_r7_regnum,
+
+  sim_rl78_bank1_r0_regnum,
+  sim_rl78_bank1_r1_regnum,
+  sim_rl78_bank1_r2_regnum,
+  sim_rl78_bank1_r3_regnum,
+  sim_rl78_bank1_r4_regnum,
+  sim_rl78_bank1_r5_regnum,
+  sim_rl78_bank1_r6_regnum,
+  sim_rl78_bank1_r7_regnum,
+
+  sim_rl78_bank2_r0_regnum,
+  sim_rl78_bank2_r1_regnum,
+  sim_rl78_bank2_r2_regnum,
+  sim_rl78_bank2_r3_regnum,
+  sim_rl78_bank2_r4_regnum,
+  sim_rl78_bank2_r5_regnum,
+  sim_rl78_bank2_r6_regnum,
+  sim_rl78_bank2_r7_regnum,
+
+  sim_rl78_bank3_r0_regnum,
+  sim_rl78_bank3_r1_regnum,
+  sim_rl78_bank3_r2_regnum,
+  sim_rl78_bank3_r3_regnum,
+  sim_rl78_bank3_r4_regnum,
+  sim_rl78_bank3_r5_regnum,
+  sim_rl78_bank3_r6_regnum,
+  sim_rl78_bank3_r7_regnum,
+
+  sim_rl78_psw_regnum,
+  sim_rl78_es_regnum,
+  sim_rl78_cs_regnum,
+  sim_rl78_pc_regnum,
+
+  sim_rl78_spl_regnum,
+  sim_rl78_sph_regnum,
+  sim_rl78_pmc_regnum,
+  sim_rl78_mem_regnum,
+
+  sim_rl78_num_regs
+};
+
+#endif /* SIM_RL78_H */
diff --git a/include/leb128.h b/include/leb128.h
new file mode 100644
index 0000000..f584f72
--- /dev/null
+++ b/include/leb128.h
@@ -0,0 +1,136 @@
+/* Utilities for reading leb128 values.
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty 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.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If not, write
+to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/* The functions defined here can be speed critical.
+   Since they are all pretty small we keep things simple and just define
+   them all as "static inline".
+
+   WARNING: This file is used by GDB which is stuck at C90. :-(
+   Though it can use stdint.h, inttypes.h.
+   Therefore if you want to add support for "long long" you need
+   to wrap it in #ifdef CC_HAS_LONG_LONG.  */
+
+#ifndef LEB128_H
+#define LEB128_H
+
+/* Get a definition for inline.  */
+#include "ansidecl.h"
+
+/* Get a definition for NULL, size_t.  */
+#include <stddef.h>
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+#include <inttypes.h>
+#endif
+
+/* Decode the unsigned LEB128 constant at BUF into the variable pointed to
+   by R, and return the number of bytes read.
+   If we read off the end of the buffer, zero is returned,
+   and nothing is stored in R.
+
+   Note: The result is an int instead of a pointer to the next byte to be
+   read to avoid const-vs-non-const problems.  */
+
+static inline size_t
+read_uleb128_to_uint64 (const unsigned char *buf, const unsigned char *buf_end,
+			uint64_t *r)
+{
+  const unsigned char *p = buf;
+  unsigned int shift = 0;
+  uint64_t result = 0;
+  unsigned char byte;
+
+  while (1)
+    {
+      if (p >= buf_end)
+	return 0;
+
+      byte = *p++;
+      result |= ((uint64_t) (byte & 0x7f)) << shift;
+      if ((byte & 0x80) == 0)
+	break;
+      shift += 7;
+    }
+
+  *r = result;
+  return p - buf;
+}
+
+/* Decode the signed LEB128 constant at BUF into the variable pointed to
+   by R, and return the number of bytes read.
+   If we read off the end of the buffer, zero is returned,
+   and nothing is stored in R.
+
+   Note: The result is an int instead of a pointer to the next byte to be
+   read to avoid const-vs-non-const problems.  */
+
+static inline size_t
+read_sleb128_to_int64 (const unsigned char *buf, const unsigned char *buf_end,
+		       int64_t *r)
+{
+  const unsigned char *p = buf;
+  unsigned int shift = 0;
+  int64_t result = 0;
+  unsigned char byte;
+
+  while (1)
+    {
+      if (p >= buf_end)
+	return 0;
+
+      byte = *p++;
+      result |= ((uint64_t) (byte & 0x7f)) << shift;
+      shift += 7;
+      if ((byte & 0x80) == 0)
+	break;
+    }
+  if (shift < (sizeof (*r) * 8) && (byte & 0x40) != 0)
+    result |= -(((uint64_t) 1) << shift);
+
+  *r = result;
+  return p - buf;
+}
+
+/* Return the number of bytes to read to skip past an LEB128 number in BUF.
+   If the end isn't found before reaching BUF_END, return zero.
+
+   Note: The result is an int instead of a pointer to the next byte to be
+   read to avoid const-vs-non-const problems.  */
+
+static inline size_t
+skip_leb128 (const unsigned char *buf, const unsigned char *buf_end)
+{
+  const unsigned char *p = buf;
+  unsigned char byte;
+
+  while (1)
+    {
+      if (p == buf_end)
+	return 0;
+
+      byte = *p++;
+      if ((byte & 0x80) == 0)
+	return p - buf;
+    }
+}
+
+#endif /* LEB128_H */
diff --git a/include/mach-o/ChangeLog b/include/mach-o/ChangeLog
index 2276d01..19eacd0 100644
--- a/include/mach-o/ChangeLog
+++ b/include/mach-o/ChangeLog
@@ -1,3 +1,35 @@
+2012-02-23  Iain Sandoe  <idsandoe at googlemail.com>
+
+	* external.h: Add comments about relocations fields.  Add macros
+	for non-scattered relocations.  Move scattered relocation macros to
+	here.
+	* reloc.h: Remove macros related to external representation of reloc
+	fields.
+
+2012-01-12  Iain Sandoe  <idsandoe at googlemail.com>
+
+	* loader.h (BFD_MACH_O_INDIRECT_SYM_LOCAL): New.
+	(BFD_MACH_O_INDIRECT_SYM_ABS): New
+
+2012-01-04  Tristan Gingold  <gingold at adacore.com>
+
+	* external.h (mach_o_fvmlib_command_external): New structure.
+
+2012-01-04  Tristan Gingold  <gingold at adacore.com>
+
+	* loader.h: Update copyright year.
+	(bfd_mach_o_cpu_subtype): Add ARM subtypes.
+
+2012-01-04  Tristan Gingold  <gingold at adacore.com>
+
+	* external.h: Update copyright year.
+	(mach_o_symtab_command_external): Add comments.
+	(mach_o_encryption_info_command_external): New structure.
+
+2011-12-16  Tristan Gingold  <gingold at adacore.com>
+
+	* codesign.h: New file.
+
 2011-08-08  Tristan Gingold  <gingold at adacore.com>
 
 	* loader.h (bfd_mach_o_load_command_type): Add
diff --git a/include/mach-o/codesign.h b/include/mach-o/codesign.h
new file mode 100644
index 0000000..ee2f792
--- /dev/null
+++ b/include/mach-o/codesign.h
@@ -0,0 +1,85 @@
+/* Mach-O support for BFD.
+   Copyright 2011
+   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 3 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., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+#ifndef _MACH_O_CODESIGN_H
+#define _MACH_O_CODESIGN_H
+
+/* Codesign blob magics.  */
+
+/* Superblob containing all the components.  */
+#define BFD_MACH_O_CS_MAGIC_EMBEDDED_SIGNATURE 0xfade0cc0
+
+/* Individual code requirement.  */
+#define BFD_MACH_O_CS_MAGIC_REQUIREMENT 0xfade0c00
+
+/* Collection of code requirements, indexed by type.  */
+#define BFD_MACH_O_CS_MAGIC_REQUIREMENTS 0xfade0c01
+
+/* Directory.  */
+#define BFD_MACH_O_CS_MAGIC_CODEDIRECTORY 0xfade0c02
+
+/* Entitlements blob.  */
+#define BFD_MACH_O_CS_MAGIC_EMBEDDED_ENTITLEMENTS 0xfade7171
+
+/* Blob container.  */
+#define BFD_MACH_O_CS_MAGIC_BLOB_WRAPPER 0xfade0b01
+
+struct mach_o_codesign_codedirectory_external_v1
+{
+  /* All the fields are in network byte order (big endian).  */
+  unsigned char version[4];
+  unsigned char flags[4];
+  unsigned char hash_offset[4];
+  unsigned char ident_offset[4];
+  unsigned char nbr_special_slots[4];
+  unsigned char nbr_code_slots[4];
+  unsigned char code_limit[4];
+  unsigned char hash_size[1];
+  unsigned char hash_type[1];
+  unsigned char spare1[1];
+  unsigned char page_size[1];
+  unsigned char spare2[4];
+};
+
+struct mach_o_codesign_codedirectory_v1
+{
+  unsigned int version;
+  unsigned int flags;
+  unsigned int hash_offset;
+  unsigned int ident_offset;
+  unsigned int nbr_special_slots;
+  unsigned int nbr_code_slots;
+  unsigned int code_limit;
+  unsigned char hash_size;
+  unsigned char hash_type;
+  unsigned char spare1;
+  unsigned char page_size;
+  unsigned int spare2;
+};
+
+/* Value for hash_type.  */
+#define BFD_MACH_O_CS_NO_HASH 0
+#define BFD_MACH_O_CS_HASH_SHA1 1
+#define BFD_MACH_O_CS_HASH_SHA256 2
+#define BFD_MACH_O_CS_HASH_PRESTANDARD_SKEIN_160x256 32 /* Skein, 160 bits */
+#define BFD_MACH_O_CS_HASH_PRESTANDARD_SKEIN_256x512 33 /* Skein, 256 bits */
+
+#endif /* _MACH_O_CODESIGN_H */
diff --git a/include/mach-o/external.h b/include/mach-o/external.h
index ebb09a7..41a2932 100644
--- a/include/mach-o/external.h
+++ b/include/mach-o/external.h
@@ -1,5 +1,5 @@
 /* Mach-O support for BFD.
-   Copyright 2011
+   Copyright 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -116,12 +116,51 @@ struct mach_o_reloc_info_external
 };
 #define BFD_MACH_O_RELENT_SIZE 8
 
+/* Relocations are based on 'address' being a section offset and an assumption
+   that sections are never more than 2^24-1 bytes in size.  Relocation data
+   also carry information on type/size/PC-relative/extern and whether scattered
+   or not [stored in the MSB of the r_address].  */
+
+#define BFD_MACH_O_SR_SCATTERED		0x80000000
+
+/* For a non-scattered reloc, the relocation info is found in r_symbolnum.
+   Bytes 1 to 3 contain the symbol number (0xffffff, in a non-scattered PAIR).  
+   Byte 4 contains the relocation info - but with differing bit-positions
+   dependent on target endian-ness - as below.  */
+
+#define BFD_MACH_O_LE_PCREL		0x01
+#define BFD_MACH_O_LE_LENGTH_SHIFT	1
+#define BFD_MACH_O_LE_EXTERN		0x08
+#define BFD_MACH_O_LE_TYPE_SHIFT	4
+
+#define BFD_MACH_O_BE_PCREL		0x80
+#define BFD_MACH_O_BE_LENGTH_SHIFT	5
+#define BFD_MACH_O_BE_EXTERN		0x10
+#define BFD_MACH_O_BE_TYPE_SHIFT	0
+
+/* The field sizes are the same for both BE and LE.  */
+#define BFD_MACH_O_LENGTH_MASK		0x03
+#define BFD_MACH_O_TYPE_MASK		0x0f
+
+/* For a scattered reloc entry the info is contained in r_address.  There
+   is no need to discriminate on target endian-ness, since the design was
+   arranged to produce the same layout on both.  Scattered relocations are
+   only used for local items, therefore there is no 'extern' field.  */
+
+#define BFD_MACH_O_SR_PCREL		0x40000000
+#define BFD_MACH_O_GET_SR_LENGTH(s)	(((s) >> 28) & 0x3)
+#define BFD_MACH_O_GET_SR_TYPE(s)	(((s) >> 24) & 0x0f)
+#define BFD_MACH_O_GET_SR_ADDRESS(s)	((s) & 0x00ffffff)
+#define BFD_MACH_O_SET_SR_LENGTH(l)	(((l) & 0x3) << 28)
+#define BFD_MACH_O_SET_SR_TYPE(t)	(((t) & 0xf) << 24)
+#define BFD_MACH_O_SET_SR_ADDRESS(s)	((s) & 0x00ffffff)
+
 struct mach_o_symtab_command_external
 {
-  unsigned char symoff[4];
-  unsigned char nsyms[4];
-  unsigned char stroff[4];
-  unsigned char strsize[4];
+  unsigned char symoff[4];	/* File offset of the symbol table.  */
+  unsigned char nsyms[4];	/* Number of symbols.  */
+  unsigned char stroff[4];	/* File offset of the string table.  */
+  unsigned char strsize[4];	/* String table size.  */
 };
 
 struct mach_o_nlist_external
@@ -255,6 +294,20 @@ struct mach_o_version_min_command_external
   unsigned char reserved[4];
 };
 
+struct mach_o_encryption_info_command_external
+{
+  unsigned char cryptoff[4];	/* File offset of the encrypted area.  */
+  unsigned char cryptsize[4];	/* Size of the encrypted area.  */
+  unsigned char cryptid[4];	/* Encryption method.  */
+};
+
+struct mach_o_fvmlib_command_external
+{
+  unsigned char name[4];	/* Offset of the name.  */
+  unsigned char minor_version[4];
+  unsigned char header_addr[4];
+};
+
 struct mach_o_fat_header_external
 {
   unsigned char magic[4];
diff --git a/include/mach-o/loader.h b/include/mach-o/loader.h
index 357f65e..1b9b15e 100644
--- a/include/mach-o/loader.h
+++ b/include/mach-o/loader.h
@@ -1,5 +1,5 @@
 /* Mach-O support for BFD.
-   Copyright 2011
+   Copyright 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -56,7 +56,16 @@ bfd_mach_o_cpu_type;
 
 typedef enum bfd_mach_o_cpu_subtype
 {
-  BFD_MACH_O_CPU_SUBTYPE_X86_ALL = 3
+  /* i386.  */
+  BFD_MACH_O_CPU_SUBTYPE_X86_ALL = 3,
+
+  /* arm.  */
+  BFD_MACH_O_CPU_SUBTYPE_ARM_ALL = 0,
+  BFD_MACH_O_CPU_SUBTYPE_ARM_V4T = 5,
+  BFD_MACH_O_CPU_SUBTYPE_ARM_V6 = 6,
+  BFD_MACH_O_CPU_SUBTYPE_ARM_V5TEJ = 7,
+  BFD_MACH_O_CPU_SUBTYPE_ARM_XSCALE = 8,
+  BFD_MACH_O_CPU_SUBTYPE_ARM_V7 = 9
 }
 bfd_mach_o_cpu_subtype;
 
@@ -246,6 +255,9 @@ bfd_mach_o_section_type;
 
 typedef enum bfd_mach_o_section_attribute
 {
+  /* Section has no specified attibutes.  */
+  BFD_MACH_O_S_ATTR_NONE              = 0,
+
   /* Section has local relocation entries.  */
   BFD_MACH_O_S_ATTR_LOC_RELOC         = 0x00000100,
 
@@ -308,6 +320,9 @@ bfd_mach_o_section_attribute;
 #define BFD_MACH_O_N_NO_DEAD_STRIP				0x20
 #define BFD_MACH_O_N_WEAK_REF					0x40
 #define BFD_MACH_O_N_WEAK_DEF					0x80
+
+#define BFD_MACH_O_INDIRECT_SYM_LOCAL			0x80000000
+#define BFD_MACH_O_INDIRECT_SYM_ABS			0x40000000
 

 /* Thread constants.  */
 
diff --git a/include/mach-o/reloc.h b/include/mach-o/reloc.h
index 93ebb8b..bab31ef 100644
--- a/include/mach-o/reloc.h
+++ b/include/mach-o/reloc.h
@@ -1,5 +1,5 @@
 /* Mach-O support for BFD.
-   Copyright 2011
+   Copyright 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -22,26 +22,6 @@
 #ifndef _MACH_O_RELOC_H
 #define _MACH_O_RELOC_H
 
-/* Fields for a normal (non-scattered) entry.  */
-#define BFD_MACH_O_R_PCREL		0x01000000
-#define BFD_MACH_O_GET_R_LENGTH(s)	(((s) >> 25) & 0x3)
-#define BFD_MACH_O_R_EXTERN		0x08000000
-#define BFD_MACH_O_GET_R_TYPE(s)	(((s) >> 28) & 0x0f)
-#define BFD_MACH_O_GET_R_SYMBOLNUM(s)	((s) & 0x00ffffff)
-#define BFD_MACH_O_SET_R_LENGTH(l)	(((l) & 0x3) << 25)
-#define BFD_MACH_O_SET_R_TYPE(t)	(((t) & 0xf) << 28)
-#define BFD_MACH_O_SET_R_SYMBOLNUM(s)	((s) & 0x00ffffff)
-
-/* Fields for a scattered entry.  */
-#define BFD_MACH_O_SR_SCATTERED		0x80000000
-#define BFD_MACH_O_SR_PCREL		0x40000000
-#define BFD_MACH_O_GET_SR_LENGTH(s)	(((s) >> 28) & 0x3)
-#define BFD_MACH_O_GET_SR_TYPE(s)	(((s) >> 24) & 0x0f)
-#define BFD_MACH_O_GET_SR_ADDRESS(s)	((s) & 0x00ffffff)
-#define BFD_MACH_O_SET_SR_LENGTH(l)	(((l) & 0x3) << 28)
-#define BFD_MACH_O_SET_SR_TYPE(t)	(((t) & 0xf) << 24)
-#define BFD_MACH_O_SET_SR_ADDRESS(s)	((s) & 0x00ffffff)
-
 /* Generic relocation types (used by i386).  */
 #define BFD_MACH_O_GENERIC_RELOC_VANILLA 	0
 #define BFD_MACH_O_GENERIC_RELOC_PAIR	 	1
diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog
index 2cbb382..4b8d300 100644
--- a/include/opcode/ChangeLog
+++ b/include/opcode/ChangeLog
@@ -1,3 +1,74 @@
+2012-07-06  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* mips.h: Fix a typo in description.
+
+2012-06-07  Georg-Johann Lay  <avr at gjlay.de>
+
+	* avr.h: (AVR_ISA_XCH): New define.
+	(AVR_ISA_XMEGA): Use it.
+	(XCH, LAS, LAT, LAC): New XMEGA opcodes.
+
+2012-05-15  James Murray <jsm at jsm-net.demon.co.uk>
+
+	* m68hc11.h: Add XGate definitions.
+	(struct m68hc11_opcode): Add xg_mask field.
+
+2012-05-14  Catherine Moore  <clm at codesourcery.com>
+	    Maciej W. Rozycki  <macro at codesourcery.com>
+	    Rhonda Wittels  <rhonda at codesourcery.com>
+
+	* ppc.h (PPC_OPCODE_VLE): New definition.
+	(PPC_OP_SA): New macro.
+	(PPC_OP_SE_VLE): New macro.
+	(PPC_OP): Use a variable shift amount.
+	(powerpc_operand): Update comments.
+	(PPC_OPSHIFT_INV): New macro.
+	(PPC_OPERAND_CR): Replace with...
+	(PPC_OPERAND_CR_BIT): ...this and
+	(PPC_OPERAND_CR_REG): ...this.
+
+
+2012-05-03  Sean Keys  <skeys at ipdatasys.com>
+
+	* xgate.h: Header file for XGATE assembler.
+
+2012-04-27  David S. Miller  <davem at davemloft.net>
+
+	* sparc.h: Document new arg code' )' for crypto RS3
+	immediates.
+
+	* sparc.h (struct sparc_opcode): New field 'hwcaps'.
+	F_MUL32, F_DIV32, F_FDMULD, F_V8PLUS, F_POPC, F_VIS, F_VIS2,
+	F_ASI_BLK_INIT, F_FMAF, F_VIS3, F_HPC, F_RANDOM, F_TRANS,
+	F_FJFMAU, F_IMA, F_ASI_CACHE_SPARING, F_HWCAP_MASK): Delete.
+	(HWCAP_MUL32, HWCAP_DIV32, HWCAP_FSMULD, HWCAP_V8PLUS, HWCAP_POPC,
+	HWCAP_VIS, HWCAP_VIS2, HWCAP_ASI_BLK_INIT, HWCAP_FMAF,
+	HWCAP_VIS3, HWCAP_HPC, HWCAP_RANDOM, HWCAP_TRANS, HWCAP_FJFMAU,
+	HWCAP_IMA, HWCAP_ASI_CACHE_SPARING, HWCAP_AES, HWCAP_DES,
+	HWCAP_KASUMI, HWCAP_CAMELLIA, HWCAP_MD5, HWCAP_SHA1,
+	HWCAP_SHA256, HWCAP_SHA512, HWCAP_MPMUL, HWCAP_MONT, HWCAP_PAUSE,
+	HWCAP_CBCOND, HWCAP_CRC32): New defines.
+
+2012-03-10  Edmar Wienskoski  <edmar at freescale.com>
+
+	* ppc.h: Add PPC_OPCODE_ALTIVEC2, PPC_OPCODE_E6500, PPC_OPCODE_TMR.
+
+2012-02-27  Alan Modra  <amodra at gmail.com>
+
+	* crx.h (cst4_map): Update declaration.
+
+2012-02-25  Walter Lee  <walt at tilera.com>
+
+	* tilegx.h (tilegx_mnemonic): Add TILEGX_OPC_LD4S_TLS,
+	TILEGX_OPC_LD_TLS.
+	* tilepro.h (tilepro_mnemonic): Add TILEPRO_OPC_LW_TLS,
+	TILEPRO_OPC_LW_TLS_SN.
+
+2012-02-08  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* i386.h (XACQUIRE_PREFIX_OPCODE): New.
+	(XRELEASE_PREFIX_OPCODE): Likewise.
+
 2011-12-08  Andrew Pinski  <apinski at cavium.com>
             Adam Nemet  <anemet at caviumnetworks.com>
 
diff --git a/include/opcode/avr.h b/include/opcode/avr.h
index a6d7b47..6e86c07 100644
--- a/include/opcode/avr.h
+++ b/include/opcode/avr.h
@@ -1,6 +1,6 @@
 /* Opcode table for the Atmel AVR micro controllers.
 
-   Copyright 2000, 2001, 2004, 2006, 2008, 2010 Free Software Foundation, Inc.
+   Copyright 2000, 2001, 2004, 2006, 2008, 2010, 2012 Free Software Foundation, Inc.
    Contributed by Denis Chertykov <denisc at overta.ru>
    
    This program is free software; you can redistribute it and/or modify
@@ -33,6 +33,7 @@
 #define AVR_ISA_MOVW  0x1000 /* device has MOVW */
 #define AVR_ISA_SPMX  0x2000 /* device has SPM Z[+] */
 #define AVR_ISA_DES   0x4000 /* device has DES */
+#define AVR_ISA_XCH   0x8000 /* device has XCH, LAC, LAS, LAT */
 
 #define AVR_ISA_TINY1 (AVR_ISA_1200 | AVR_ISA_LPM)
 #define AVR_ISA_2xxx  (AVR_ISA_TINY1 | AVR_ISA_SRAM)
@@ -52,7 +53,7 @@
 #define AVR_ISA_M323  (AVR_ISA_M161 | AVR_ISA_BRK)
 #define AVR_ISA_M128  (AVR_ISA_M323 | AVR_ISA_ELPM | AVR_ISA_ELPMX)
 #define AVR_ISA_M256  (AVR_ISA_M128 | AVR_ISA_EIND)
-#define AVR_ISA_XMEGA (AVR_ISA_M256 | AVR_ISA_SPMX | AVR_ISA_DES)
+#define AVR_ISA_XMEGA (AVR_ISA_M256 | AVR_ISA_SPMX | AVR_ISA_DES | AVR_ISA_XCH)
 
 #define AVR_ISA_AVR1   AVR_ISA_TINY1
 #define AVR_ISA_AVR2   AVR_ISA_2xxx
@@ -124,7 +125,6 @@
     0x0001...0x00ff    (255) (known to be decoded as `nop' by the old core)
    "100100xxxxxxx011"  (128) 0x9[0-3][0-9a-f][3b]
    "100100xxxxxx1000"   (64) 0x9[0-3][0-9a-f]8
-   "1001001xxxxx01xx"  (128) 0x9[23][0-9a-f][4-7]
    "1001010xxxxx0100"   (32) 0x9[45][0-9a-f]4
    "1001010x001x1001"    (4) 0x9[45][23]9
    "1001010x01xx1001"    (8) 0x9[45][4-7]9
@@ -265,6 +265,12 @@ AVR_INSN (push, "r",   "1001001rrrrr1111", 1, AVR_ISA_2xxx, 0x920f)
 AVR_INSN (ror,  "r",   "1001010rrrrr0111", 1, AVR_ISA_1200, 0x9407)
 AVR_INSN (swap, "r",   "1001010rrrrr0010", 1, AVR_ISA_1200, 0x9402)
 
+   /* Atomic memory operations for XMEGA.  List before `sts'.  */
+AVR_INSN (xch,  "z,r",   "1001001rrrrr0100", 1, AVR_ISA_XCH, 0x9204)
+AVR_INSN (las,  "z,r",   "1001001rrrrr0101", 1, AVR_ISA_XCH, 0x9205)
+AVR_INSN (lac,  "z,r",   "1001001rrrrr0110", 1, AVR_ISA_XCH, 0x9206)
+AVR_INSN (lat,  "z,r",   "1001001rrrrr0111", 1, AVR_ISA_XCH, 0x9207)
+
    /* Known to be decoded as `nop' by the old core.  */
 AVR_INSN (movw, "v,v", "00000001ddddrrrr", 1, AVR_ISA_MOVW, 0x0100)
 AVR_INSN (muls, "d,d", "00000010ddddrrrr", 1, AVR_ISA_MUL,  0x0200)
diff --git a/include/opcode/crx.h b/include/opcode/crx.h
index 5c484bf..6081ea3 100644
--- a/include/opcode/crx.h
+++ b/include/opcode/crx.h
@@ -1,5 +1,5 @@
 /* crx.h -- Header file for CRX opcode and register tables.
-   Copyright 2004, 2010 Free Software Foundation, Inc.
+   Copyright 2004, 2010, 2012 Free Software Foundation, Inc.
    Contributed by Tomer Levi, NSC, Israel.
    Originally written for GAS 2.12 by Tomer Levi, NSC, Israel.
    Updates, BFDizing, GNUifying and ELF support by Tomer Levi.
@@ -384,7 +384,7 @@ extern const int crx_num_traps;
 #define NUMTRAPS crx_num_traps
 
 /* cst4 operand mapping.  */
-extern const long cst4_map[];
+extern const int cst4_map[];
 extern const int cst4_maps;
 
 /* Table of instructions with no operands.  */
diff --git a/include/opcode/i386.h b/include/opcode/i386.h
index b635334..ad6d3c6 100644
--- a/include/opcode/i386.h
+++ b/include/opcode/i386.h
@@ -76,6 +76,8 @@
 #define SS_PREFIX_OPCODE 0x36
 #define REPNE_PREFIX_OPCODE 0xf2
 #define REPE_PREFIX_OPCODE  0xf3
+#define XACQUIRE_PREFIX_OPCODE 0xf2
+#define XRELEASE_PREFIX_OPCODE 0xf3
 
 #define TWO_BYTE_OPCODE_ESCAPE 0x0f
 #define NOP_OPCODE (char) 0x90
diff --git a/include/opcode/m68hc11.h b/include/opcode/m68hc11.h
index 83f5a9a..1a00200 100644
--- a/include/opcode/m68hc11.h
+++ b/include/opcode/m68hc11.h
@@ -1,5 +1,6 @@
 /* m68hc11.h -- Header file for Motorola 68HC11 & 68HC12 opcode table
-   Copyright 1999, 2000, 2002, 2003, 2010 Free Software Foundation, Inc.
+   Copyright 1999, 2000, 2002, 2003, 2010, 2012
+   Free Software Foundation, Inc.
    Written by Stephane Carrez (stcarrez at nerim.fr)
 
    This file is part of GDB, GAS, and the GNU binutils.
@@ -37,8 +38,7 @@
    of the M6811_INIT register.  At init time, the I/O registers are
    mapped at 0x1000.  Address of registers is then:
 
-   0x1000 + M6811_xxx
-*/
+   0x1000 + M6811_xxx.  */
 #define M6811_PORTA     0x00	/* Port A register */
 #define M6811__RES1	0x01	/* Unused/Reserved */
 #define M6811_PIOC	0x02	/* Parallel I/O Control register */
@@ -364,6 +364,26 @@
 #define M6812_INDEXED         0x20000000 /* n,r    n = 5, 9 or 16-bits	    */
 #define M6812_OP_IDX_P2       0x40000000
 
+/* XGATE defines.
+   These overlap with HC11/12 as above but not used at the same time.  */
+#define M68XG_OP_NONE           0x0001
+#define M68XG_OP_IMM3           0x0002
+#define M68XG_OP_R              0x0004
+#define M68XG_OP_R_R            0x0008
+#define M68XG_OP_R_IMM4         0x0010
+#define M68XG_OP_R_R_R          0x0020
+#define M68XG_OP_REL9           0x0040
+#define M68XG_OP_REL10          0x0080
+#define M68XG_OP_R_R_OFFS5      0x0100
+#define M68XG_OP_RD_RB_RI       0x0200
+#define M68XG_OP_RD_RB_RIp      0x0400
+#define M68XG_OP_RD_RB_mRI      0x0800
+#define M68XG_OP_R_IMM8         0x1000
+#define M68XG_OP_R_IMM16        0x2000
+#define M68XG_OP_REG            0x4000   /* Register operand 1.  */
+#define M68XG_OP_REG_2          0x8000   /* Register operand 2.  */
+#define M68XG_MAX_OPERANDS      3        /* Max operands of triadic r1, r2, r3.  */
+
 /* Markers to identify some instructions.  */
 #define M6812_OP_EXG_MARKER   0x01000000 /* exg r1,r2 */
 #define M6812_OP_TFR_MARKER   0x02000000 /* tfr r1,r2 */
@@ -374,35 +394,43 @@
 #define M6812_OP_IBCC_MARKER  0x02000000 /* ibeq/ibne */
 #define M6812_OP_TBCC_MARKER  0x01000000
 
+/* XGATE markers.  */
+#define M68XG_OP_B_MARKER     0x04000000 /* bXX rel9 */
+#define M68XG_OP_BRA_MARKER   0x02000000 /* bra rel10 */
+
 #define M6812_OP_TRAP_ID      0x80000000 /* trap #N */
 
 #define M6811_OP_HIGH_ADDR    0x01000000 /* Used internally by gas.  */
 #define M6811_OP_LOW_ADDR     0x02000000
 
-#define M68HC12_BANK_VIRT 0x010000
-#define M68HC12_BANK_MASK 0x00003fff
-#define M68HC12_BANK_BASE 0x00008000
-#define M68HC12_BANK_SHIFT 14
-#define M68HC12_BANK_PAGE_MASK 0x0ff
+#define M68HC12_BANK_VIRT       0x010000
+#define M68HC12_BANK_MASK     0x00003fff
+#define M68HC12_BANK_BASE     0x00008000
+#define M68HC12_BANK_SHIFT            14
+#define M68HC12_BANK_PAGE_MASK     0x0ff
 
 
 /* CPU identification.  */
 #define cpu6811 0x01
 #define cpu6812 0x02
 #define cpu6812s 0x04
+#define cpu9s12x 0x08  /* 9S12X main cpu.  */
+#define cpuxgate 0x10  /* The XGATE module itself.  */
 
 /* The opcode table is an array of struct m68hc11_opcode.  */
-struct m68hc11_opcode {
-  const char*    name;     /* Op-code name */
+struct m68hc11_opcode
+{
+  const char *   name;     /* Op-code name.  */
   long           format;
   unsigned char  size;
-  unsigned char  opcode;
+  unsigned int   opcode;
   unsigned char  cycles_low;
   unsigned char  cycles_high;
   unsigned char  set_flags_mask;
   unsigned char  clr_flags_mask;
   unsigned char  chg_flags_mask;
   unsigned char  arch;
+  unsigned int   xg_mask; /* Mask with zero in register place for xgate.  */
 };
 
 /* Alias definition for 68HC12.  */
diff --git a/include/opcode/mips.h b/include/opcode/mips.h
index fb9094c..9232508 100644
--- a/include/opcode/mips.h
+++ b/include/opcode/mips.h
@@ -1646,7 +1646,7 @@ extern const int bfd_mips16_num_opcodes;
    "y" 5-bit source 3 register for ALNV.PS (MICROMIPSOP_*_RS3)
    "z" must be zero register
    "C" 23-bit coprocessor function code (MICROMIPSOP_*_COPZ)
-   "B" 8-bit syscall/wait function code (MICROMIPSOP_*_CODE10)
+   "B" 10-bit syscall/wait function code (MICROMIPSOP_*_CODE10)
    "K" 5-bit Hardware Register (RDHWR instruction) (MICROMIPSOP_*_RS)
 
    "+A" 5-bit INS/EXT/DINS/DEXT/DINSM/DEXTM position, which becomes
diff --git a/include/opcode/ppc.h b/include/opcode/ppc.h
index a0119dc..2e789d6 100644
--- a/include/opcode/ppc.h
+++ b/include/opcode/ppc.h
@@ -1,6 +1,6 @@
 /* ppc.h -- Header file for PowerPC opcode table
    Copyright 1994, 1995, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-   2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+   2007, 2008, 2009, 2010, 2012 Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support
 
    This file is part of GDB, GAS, and the GNU binutils.
@@ -65,6 +65,8 @@ struct powerpc_opcode
    instructions.  */
 extern const struct powerpc_opcode powerpc_opcodes[];
 extern const int powerpc_num_opcodes;
+extern const struct powerpc_opcode vle_opcodes[];
+extern const int vle_num_opcodes;
 
 /* Values defined for the flags field of a struct powerpc_opcode.  */
 
@@ -174,8 +176,29 @@ extern const int powerpc_num_opcodes;
 /* Opcode which is supported by the e500 family */
 #define PPC_OPCODE_E500	       0x100000000ull
 
+/* Opcode is supported by Extended Altivec Vector Unit */
+#define PPC_OPCODE_ALTIVEC2    0x200000000ull
+
+/* Opcode is supported by Power E6500 */
+#define PPC_OPCODE_E6500       0x400000000ull
+
+/* Opcode is supported by Thread management APU */
+#define PPC_OPCODE_TMR         0x800000000ull
+
+/* Opcode which is supported by the VLE extension.  */
+#define PPC_OPCODE_VLE	      0x1000000000ull
+
 /* A macro to extract the major opcode from an instruction.  */
 #define PPC_OP(i) (((i) >> 26) & 0x3f)
+
+/* A macro to determine if the instruction is a 2-byte VLE insn.  */
+#define PPC_OP_SE_VLE(m) ((m) <= 0xffff)
+
+/* A macro to extract the major opcode from a VLE instruction.  */
+#define VLE_OP(i,m) (((i) >> ((m) <= 0xffff ? 10 : 26)) & 0x3f)
+
+/* A macro to convert a VLE opcode to a VLE opcode segment.  */
+#define VLE_OP_TO_SEG(i) ((i) >> 1)
 

 /* The operands table is an array of struct powerpc_operand.  */
 
@@ -184,16 +207,22 @@ struct powerpc_operand
   /* A bitmask of bits in the operand.  */
   unsigned int bitm;
 
-  /* How far the operand is left shifted in the instruction.
-     -1 to indicate that BITM and SHIFT cannot be used to determine
-     where the operand goes in the insn.  */
+  /* The shift operation to be applied to the operand.  No shift
+     is made if this is zero.  For positive values, the operand
+     is shifted left by SHIFT.  For negative values, the operand
+     is shifted right by -SHIFT.  Use PPC_OPSHIFT_INV to indicate
+     that BITM and SHIFT cannot be used to determine where the
+     operand goes in the insn.  */
   int shift;
 
   /* Insertion function.  This is used by the assembler.  To insert an
      operand value into an instruction, check this field.
 
      If it is NULL, execute
-	 i |= (op & o->bitm) << o->shift;
+	 if (o->shift >= 0)
+	   i |= (op & o->bitm) << o->shift;
+	 else
+	   i |= (op & o->bitm) >> -o->shift;
      (i is the instruction which we are filling in, o is a pointer to
      this structure, and op is the operand value).
 
@@ -211,7 +240,10 @@ struct powerpc_operand
      extract this operand type from an instruction, check this field.
 
      If it is NULL, compute
-	 op = (i >> o->shift) & o->bitm;
+	 if (o->shift >= 0)
+	   op = (i >> o->shift) & o->bitm;
+	 else
+	   op = (i << -o->shift) & o->bitm;
 	 if ((o->flags & PPC_OPERAND_SIGNED) != 0)
 	   sign_extend (op);
      (i is the instruction, o is a pointer to this structure, and op
@@ -235,6 +267,11 @@ struct powerpc_operand
 extern const struct powerpc_operand powerpc_operands[];
 extern const unsigned int num_powerpc_operands;
 
+/* Use with the shift field of a struct powerpc_operand to indicate
+     that BITM and SHIFT cannot be used to determine where the operand
+     goes in the insn.  */
+#define PPC_OPSHIFT_INV (-1 << 31)
+
 /* Values defined for the flags field of a struct powerpc_operand.  */
 
 /* This operand takes signed values.  */
@@ -268,7 +305,7 @@ extern const unsigned int num_powerpc_operands;
        cr4 4	cr5 5	cr6 6	cr7 7
    These may be combined arithmetically, as in cr2*4+gt.  These are
    only supported on the PowerPC, not the POWER.  */
-#define PPC_OPERAND_CR (0x10)
+#define PPC_OPERAND_CR_BIT (0x10)
 
 /* This operand names a register.  The disassembler uses this to print
    register names with a leading 'r'.  */
@@ -333,6 +370,9 @@ extern const unsigned int num_powerpc_operands;
 /* This operand names a vector-scalar unit register.  The disassembler
    prints these with a leading 'vs'.  */
 #define PPC_OPERAND_VSR (0x100000)
+
+/* This is a CR FIELD that does not use symbolic names.  */
+#define PPC_OPERAND_CR_REG (0x200000)
 

 /* The POWER and PowerPC assemblers use a few macros.  We keep them
    with the operands table for simplicity.  The macro table is an
diff --git a/include/opcode/sparc.h b/include/opcode/sparc.h
index 7ae3641..b1c5e42 100644
--- a/include/opcode/sparc.h
+++ b/include/opcode/sparc.h
@@ -99,6 +99,7 @@ typedef struct sparc_opcode
   const char *args;
   /* This was called "delayed" in versions before the flags.  */
   unsigned int flags;
+  unsigned int hwcaps;
   short architecture;	/* Bitmask of sparc_opcode_arch_val's.  */
 } sparc_opcode;
 
@@ -110,25 +111,39 @@ typedef struct sparc_opcode
 #define	F_JSR		0x00000010 /* Subroutine call.  */
 #define F_FLOAT		0x00000020 /* Floating point instruction (not a branch).  */
 #define F_FBR		0x00000040 /* Floating point branch.  */
-#define F_MUL32		0x00000100 /* umul/umulcc/smul/smulcc insns */
-#define F_DIV32		0x00000200 /* udiv/udivcc/sdiv/sdivcc insns */
-#define F_FSMULD	0x00000400 /* 'fsmuld' insn */
-#define F_V8PLUS	0x00000800 /* v9 insns available to 32bit */
-#define F_POPC		0x00001000 /* 'popc' insn */
-#define F_VIS		0x00002000 /* VIS insns */
-#define F_VIS2		0x00004000 /* VIS2 insns */
-#define F_ASI_BLK_INIT	0x00008000 /* block init ASIs */
-#define F_FMAF		0x00010000 /* fused multiply-add */
-#define F_VIS3		0x00020000 /* VIS3 insns */
-#define F_HPC		0x00040000 /* HPC insns */
-#define F_RANDOM	0x00080000 /* 'random' insn */
-#define F_TRANS		0x00100000 /* transaction insns */
-#define F_FJFMAU	0x00200000 /* unfused multiply-add */
-#define F_IMA		0x00400000 /* integer multiply-add */
-#define F_ASI_CACHE_SPARING \
-			0x00800000 /* cache sparing ASIs */
-
-#define F_HWCAP_MASK	0x00ffff00
+
+/* These must match the HWCAP_* values precisely.  */
+#define HWCAP_MUL32	0x00000001 /* umul/umulcc/smul/smulcc insns */
+#define HWCAP_DIV32	0x00000002 /* udiv/udivcc/sdiv/sdivcc insns */
+#define HWCAP_FSMULD	0x00000004 /* 'fsmuld' insn */
+#define HWCAP_V8PLUS	0x00000008 /* v9 insns available to 32bit */
+#define HWCAP_POPC	0x00000010 /* 'popc' insn */
+#define HWCAP_VIS	0x00000020 /* VIS insns */
+#define HWCAP_VIS2	0x00000040 /* VIS2 insns */
+#define HWCAP_ASI_BLK_INIT	\
+			0x00000080 /* block init ASIs */
+#define HWCAP_FMAF	0x00000100 /* fused multiply-add */
+#define HWCAP_VIS3	0x00000400 /* VIS3 insns */
+#define HWCAP_HPC	0x00000800 /* HPC insns */
+#define HWCAP_RANDOM	0x00001000 /* 'random' insn */
+#define HWCAP_TRANS	0x00002000 /* transaction insns */
+#define HWCAP_FJFMAU	0x00004000 /* unfused multiply-add */
+#define HWCAP_IMA	0x00008000 /* integer multiply-add */
+#define HWCAP_ASI_CACHE_SPARING \
+			0x00010000 /* cache sparing ASIs */
+#define HWCAP_AES	0x00020000 /* AES crypto insns */
+#define HWCAP_DES	0x00040000 /* DES crypto insns */
+#define HWCAP_KASUMI	0x00080000 /* KASUMI crypto insns */
+#define HWCAP_CAMELLIA 	0x00100000 /* CAMELLIA crypto insns */
+#define HWCAP_MD5	0x00200000 /* MD5 hashing insns */
+#define HWCAP_SHA1	0x00400000 /* SHA1 hashing insns */
+#define HWCAP_SHA256	0x00800000 /* SHA256 hashing insns */
+#define HWCAP_SHA512	0x01000000 /* SHA512 hashing insns */
+#define HWCAP_MPMUL	0x02000000 /* Multiple Precision Multiply */
+#define HWCAP_MONT	0x04000000 /* Montgomery Mult/Sqrt */
+#define HWCAP_PAUSE	0x08000000 /* Pause insn */
+#define HWCAP_CBCOND	0x10000000 /* Compare and Branch insns */
+#define HWCAP_CRC32C	0x20000000 /* CRC32C insn */
 
 /* All sparc opcodes are 32 bits, except for the `set' instruction (really a
    macro), which is 64 bits. It is handled as a special case.
@@ -208,7 +223,9 @@ typedef struct sparc_opcode
 	0	32/64 bit immediate for set or setx (v9) insns
 	_	Ancillary state register in rd (v9a)
 	/	Ancillary state register in rs1 (v9a)
-	(	entire floating point state register (%efsr).  */
+	(	entire floating point state register (%efsr)
+	)	5 bit immediate placed in RS3 field
+	=	2+8 bit PC relative immediate. (v9)  */
 
 #define OP2(x)		(((x) & 0x7) << 22)  /* Op2 field of format2 insns.  */
 #define OP3(x)		(((x) & 0x3f) << 19) /* Op3 field of format3 insns.  */
diff --git a/include/opcode/tilegx.h b/include/opcode/tilegx.h
index 95a9ca7..c11fc16 100644
--- a/include/opcode/tilegx.h
+++ b/include/opcode/tilegx.h
@@ -34,6 +34,8 @@ typedef enum
   TILEGX_OPC_BPT,
   TILEGX_OPC_INFO,
   TILEGX_OPC_INFOL,
+  TILEGX_OPC_LD4S_TLS,
+  TILEGX_OPC_LD_TLS,
   TILEGX_OPC_MOVE,
   TILEGX_OPC_MOVEI,
   TILEGX_OPC_MOVELI,
diff --git a/include/opcode/tilepro.h b/include/opcode/tilepro.h
index 91e2a2b..767926b 100644
--- a/include/opcode/tilepro.h
+++ b/include/opcode/tilepro.h
@@ -36,6 +36,8 @@ typedef enum
   TILEPRO_OPC_INFOL,
   TILEPRO_OPC_J,
   TILEPRO_OPC_JAL,
+  TILEPRO_OPC_LW_TLS,
+  TILEPRO_OPC_LW_TLS_SN,
   TILEPRO_OPC_MOVE,
   TILEPRO_OPC_MOVE_SN,
   TILEPRO_OPC_MOVEI,
diff --git a/include/opcode/xgate.h b/include/opcode/xgate.h
new file mode 100644
index 0000000..77a521f
--- /dev/null
+++ b/include/opcode/xgate.h
@@ -0,0 +1,120 @@
+/* xgate.h -- Freescale XGATE opcode list
+   Copyright 2010, 2011, 2012 Free Software Foundation, Inc.
+   Written by Sean Keys (skeys at ipdatasys.com)
+
+   This file is part of the GNU opcodes library.
+
+   This library 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 3, or (at your option)
+   any later version.
+
+   It 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 file; see the file COPYING.  If not, write to the
+   Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA. */
+
+#ifndef _OPCODE_XGATE_H
+#define _OPCODE_XGATE_H
+
+/* XGATE CCR flag definitions.  */
+#define XGATE_N_BIT   0x08	/* XGN - Sign Flag */
+#define XGATE_Z_BIT   0x04	/* XGZ - Zero Flag */
+#define XGATE_V_BIT   0x02	/* XGV - Overflow Flag */
+#define XGATE_C_BIT   0x01	/* XGC - Carry Flag */
+
+/* Access Detail Notation
+   V — Vector fetch: always an aligned word read, lasts for at least one RISC core cycle
+   P — Program word fetch: always an aligned word read, lasts for at least one RISC core cycle
+   r — 8-bit data read: lasts for at least one RISC core cycle
+   R — 16-bit data read: lasts for at least one RISC core cycle
+   w — 8-bit data write: lasts for at least one RISC core cycle
+   W — 16-bit data write: lasts for at least one RISC core cycle
+   A — Alignment cycle: no read or write, lasts for zero or one RISC core cycles
+   f — Free cycle: no read or write, lasts for one RISC core cycles.  */
+#define XGATE_CYCLE_V	0x01
+#define XGATE_CYCLE_P	0x02
+#define XGATE_CYCLE_r	0x04
+#define XGATE_CYCLE_R	0x08
+#define XGATE_CYCLE_w	0x10
+#define XGATE_CYCLE_W	0x20
+#define XGATE_CYCLE_A	0x40
+#define XGATE_CYCLE_f	0x80
+
+/* Opcode format abbreviations.  */
+#define XG_INH		0x0001  /* Inherent.  */
+#define XG_I		0x0002  /* 3-bit immediate address.  */
+#define XG_R_I		0x0004  /* Register followed by 4/8-bit immediate value.  */
+#define XG_R_R		0x0008  /* Register followed by a register.  */
+#define XG_R_R_R	0x0010  /* Register followed by two registers.  */
+#define XG_R		0x0020  /* Single register.  */
+#define XG_PC		0x0040  /* PC relative 10 or 11 bit.  */
+#define XG_R_C		0x0080  /* General register followed by ccr register.  */
+#define XG_C_R		0x0100  /* CCR register followed by a general register.  */
+#define XG_R_P		0x0200  /* General register followed by pc register.  */
+#define XG_R_R_I	0x0400  /* Two general registers followed by an immediate value.  */
+#define XG_PCREL	0x0800  /* Immediate value that is relative to the current pc.  */
+
+/* XGATE operand formats as stored in the XGATE_opcode table.
+   They are only used by GAS to recognize operands.  */
+#define XGATE_OP_INH		""
+#define XGATE_OP_TRI		"r,r,r"
+#define XGATE_OP_DYA		"r,r"
+#define XGATE_OP_IMM16          "r,if"
+#define XGATE_OP_IMM8	        "r,i8"
+#define XGATE_OP_IMM4           "r,i4"
+#define XGATE_OP_IMM3	        "i3"
+#define XGATE_OP_MON		"r"
+#define XGATE_OP_MON_R_C	"r,c"
+#define XGATE_OP_MON_C_R	"c,r"
+#define XGATE_OP_MON_R_P	"r,p"
+#define XGATE_OP_IDR		"r,r,+"
+#define XGATE_OP_IDO5	        "r,r,i5"
+#define XGATE_OP_REL9	        "b9"
+#define XGATE_OP_REL10	        "ba"
+#define XGATE_OP_DYA_MON	"=r"
+/* Macro definitions.  */
+#define XGATE_OP_IMM16mADD    "r,if; addl addh"
+#define XGATE_OP_IMM16mAND    "r,if; andl andh"
+#define XGATE_OP_IMM16mCPC    "r,if; cmpl cpch"
+#define XGATE_OP_IMM16mSUB    "r,if; subl subh"
+#define XGATE_OP_IMM16mLDW    "r,if; ldl ldh"
+
+/* CPU variant identification.  */
+#define XGATE_V1 0x1
+#define XGATE_V2 0x2
+#define XGATE_V3 0x4
+
+/* Max opcodes per opcode handle.  */
+#define MAX_OPCODES     0x05
+
+#define MAX_DETECT_CHARS 0x10
+
+/* The opcode table definitions.  */
+struct xgate_opcode
+{
+  char * name;                  /* Op-code name.  */
+  char * constraints;           /* Constraint chars.  */
+  char * format;                /* Bit definitions.  */
+  unsigned int sh_format;       /* Shorthand format mask.  */
+  unsigned int size;            /* Opcode size in bytes.  */
+  unsigned int bin_opcode;      /* Binary opcode with operands masked off.  */
+  unsigned char cycles_min;     /* Minimum cpu cycles needed.  */
+  unsigned char cycles_max;     /* Maximum cpu cycles needed.  */
+  unsigned char set_flags_mask; /* CCR flags set.  */
+  unsigned char clr_flags_mask; /* CCR flags cleared.  */
+  unsigned char chg_flags_mask; /* CCR flags changed.  */
+  unsigned char arch;           /* CPU variant.  */
+};
+
+/* The opcode table.  The table contains all the opcodes (all pages).
+   You can't rely on the order.  */
+extern const struct xgate_opcode xgate_opcodes[];
+extern const int xgate_num_opcodes;
+
+#endif /* _OPCODE_XGATE_H */
diff --git a/include/plugin-api.h b/include/plugin-api.h
index 122424c..3220142 100644
--- a/include/plugin-api.h
+++ b/include/plugin-api.h
@@ -66,7 +66,8 @@ enum ld_plugin_output_file_type
 {
   LDPO_REL,
   LDPO_EXEC,
-  LDPO_DYN
+  LDPO_DYN,
+  LDPO_PIE
 };
 
 /* An input file managed by the plugin library.  */
diff --git a/include/splay-tree.h b/include/splay-tree.h
index 480b2c43..a26135a 100644
--- a/include/splay-tree.h
+++ b/include/splay-tree.h
@@ -37,18 +37,11 @@ extern "C" {
 
 #include "ansidecl.h"
 
-#ifndef _WIN64
-  typedef unsigned long int libi_uhostptr_t;
-  typedef long int libi_shostptr_t;
-#else
-#ifdef __GNUC__
-  __extension__
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
 #endif
-  typedef unsigned long long libi_uhostptr_t;
-#ifdef __GNUC__
-  __extension__
-#endif
-  typedef long long libi_shostptr_t;
+#ifdef HAVE_INTTYPES_H
+#include <inttypes.h>
 #endif
 
 #ifndef GTY
@@ -59,8 +52,8 @@ extern "C" {
    these types, if necessary.  These types should be sufficiently wide
    that any pointer or scalar can be cast to these types, and then
    cast back, without loss of precision.  */
-typedef libi_uhostptr_t splay_tree_key;
-typedef libi_uhostptr_t splay_tree_value;
+typedef uintptr_t splay_tree_key;
+typedef uintptr_t splay_tree_value;
 
 /* Forward declaration for a node in the tree.  */
 typedef struct splay_tree_node_s *splay_tree_node;
diff --git a/include/vms/ChangeLog b/include/vms/ChangeLog
index 788d8d8..bb2dfeb 100644
--- a/include/vms/ChangeLog
+++ b/include/vms/ChangeLog
@@ -1,3 +1,7 @@
+2012-03-08  Tristan Gingold  <gingold at adacore.com>
+
+	* lbr.h (struct vms_lhd): Add comments.
+
 2010-05-27  Tristan Gingold  <gingold at adacore.com>
 
 	* lbr.h: Improve comments.
diff --git a/include/vms/lbr.h b/include/vms/lbr.h
index bdb436a..fd3c256 100644
--- a/include/vms/lbr.h
+++ b/include/vms/lbr.h
@@ -87,7 +87,10 @@ struct vms_lhd
   unsigned char nextvbn[4];
 
   /* Free pre-allocated index block.  */
+  /* Number of free blocks.  */
   unsigned char freidxblk[4];
+  /* VBN of a simply linked list of free blocks.  The list is terminated by a
+     nul VBN.  */
   unsigned char freeidx[4];
 
   /* Highest pre-allocated index block and in use.  */
diff --git a/libdecnumber/ChangeLog b/libdecnumber/ChangeLog
index 8a19499..ec3de31 100644
--- a/libdecnumber/ChangeLog
+++ b/libdecnumber/ChangeLog
@@ -1,3 +1,11 @@
+2011-12-20  Andreas Schwab  <schwab at linux-m68k.org>
+
+	* configure: Regenerate.
+
+2011-12-19  Andreas Schwab  <schwab at linux-m68k.org>
+
+	* configure: Regenerate.
+
 2011-04-20  Jim Meyering  <meyering at redhat.com>
 
 	* decNumber.c (decNumberFromString): Remove useless
diff --git a/libdecnumber/configure b/libdecnumber/configure
index f69dd44..2b58684 100755
--- a/libdecnumber/configure
+++ b/libdecnumber/configure
@@ -3248,9 +3248,15 @@ test -n "$AUTOHEADER" || AUTOHEADER="$MISSING autoheader"
 
 WARN_CFLAGS=
 save_CFLAGS="$CFLAGS"
-for option in -W -Wall -Wwrite-strings -Wstrict-prototypes \
+for real_option in -W -Wall -Wwrite-strings -Wstrict-prototypes \
 			  -Wmissing-prototypes -Wold-style-definition \
 			  -Wmissing-format-attribute -Wcast-qual; do
+  # Do the check with the no- prefix removed since gcc silently
+  # accepts any -Wno-* option on purpose
+  case $real_option in
+    -Wno-*) option=-W`expr x$real_option : 'x-Wno-\(.*\)'` ;;
+    *) option=$real_option ;;
+  esac
   as_acx_Woption=`$as_echo "acx_cv_prog_cc_warning_$option" | $as_tr_sh`
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports $option" >&5
@@ -3282,20 +3288,22 @@ eval ac_res=\$$as_acx_Woption
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
   if test `eval 'as_val=${'$as_acx_Woption'};$as_echo "$as_val"'` = yes; then :
-  WARN_CFLAGS="$WARN_CFLAGS${WARN_CFLAGS:+ }$option"
+  WARN_CFLAGS="$WARN_CFLAGS${WARN_CFLAGS:+ }$real_option"
 fi
   done
 CFLAGS="$save_CFLAGS"
 
 WARN_PEDANTIC=
+# Do the check with the no- prefix removed from the warning options
+# since gcc silently accepts any -Wno-* option on purpose
 if test "$GCC" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -pedantic -Wno-long-long" >&5
-$as_echo_n "checking whether $CC supports -pedantic -Wno-long-long... " >&6; }
-if test "${acx_cv_prog_cc_pedantic__Wno_long_long+set}" = set; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -pedantic -Wlong-long" >&5
+$as_echo_n "checking whether $CC supports -pedantic -Wlong-long... " >&6; }
+if test "${acx_cv_prog_cc_pedantic__Wlong_long+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   save_CFLAGS="$CFLAGS"
-CFLAGS="-pedantic -Wno-long-long"
+CFLAGS="-pedantic -Wlong-long"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -3308,16 +3316,16 @@ main ()
 }
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
-  acx_cv_prog_cc_pedantic__Wno_long_long=yes
+  acx_cv_prog_cc_pedantic__Wlong_long=yes
 else
-  acx_cv_prog_cc_pedantic__Wno_long_long=no
+  acx_cv_prog_cc_pedantic__Wlong_long=no
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 CFLAGS="$save_CFLAGS"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_prog_cc_pedantic__Wno_long_long" >&5
-$as_echo "$acx_cv_prog_cc_pedantic__Wno_long_long" >&6; }
-if test $acx_cv_prog_cc_pedantic__Wno_long_long = yes; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_prog_cc_pedantic__Wlong_long" >&5
+$as_echo "$acx_cv_prog_cc_pedantic__Wlong_long" >&6; }
+if test $acx_cv_prog_cc_pedantic__Wlong_long = yes; then :
   WARN_PEDANTIC="$WARN_PEDANTIC${WARN_PEDANTIC:+ }-pedantic -Wno-long-long"
 fi
 
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index a269a0e..4ece5ab 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,109 @@
+2012-07-13  Doug Evans  <dje at google.com>
+
+	* filename_cmp.c (filename_hash, filename_eq): New functions.
+
+2012-06-29  Andreas Schwab  <schwab at linux-m68k.org>
+
+	* copying-lib.texi (Library Copying): Don't use @heading inside
+	@enumerate.
+
+2012-05-22  Tom Tromey  <tromey at redhat.com>
+
+	http://sourceware.org/bugzilla/show_bug.cgi?id=14065
+	* testsuite/demangle-expected: Add regression test.
+	* cp-demangle.c (d_find_pack): Return NULL for
+	DEMANGLE_COMPONENT_UNNAMED_TYPE.
+
+2012-04-27  Tom Tromey  <tromey at redhat.com>
+
+	* dwarfnames.c: New file.
+	* Makefile.in (CFILES): Add dwarfnames.
+	(REQUIRED_OFILES): Add dwarfnames.
+	(./dwarfnames.$(objext)): New target.
+
+2012-04-04  Tristan Gingold  <gingold at adacore.com>
+
+	* pex-unix.c (to_ptr32): Fix style.
+
+2012-04-02  Tristan Gingold  <gingold at adacore.com>
+
+	* stack-limit.c: Includes ansidecl.h.
+	(stack_limit_increase): Add ATTRIBUTE_UNUSED
+
+2012-03-20  Jason Merrill  <jason at redhat.com>
+
+	* cp-demangle.c (cplus_demangle_type): Handle 'auto'.
+
+2012-03-07  Jason Merrill  <jason at redhat.com>
+
+	* cp-demangle.c (cplus_demangle_operators): Add li.
+	(d_unqualified_name): Handle it specially.
+
+2012-01-26  Jakub Jelinek  <jakub at redhat.com>
+
+	* make-relative-prefix.c (make_relative_prefix_1): Avoid warning
+	about using preprocessor directives inside of macro arguments.
+
+2012-01-22  Douglas B Rupp  <rupp at gnat.com>
+
+	* configure: Regenerate.
+
+2012-01-10  Jason Merrill  <jason at redhat.com>
+
+	* cp-demangle.c (d_print_comp) [DEMANGLE_COMPONENT_OPERATOR]:
+	Omit a trailing space in the operator name.
+
+2012-01-06  Jason Merrill  <jason at redhat.com>
+
+	PR c++/6057
+	PR c++/48051
+	PR c++/50855
+	PR c++/51322
+	* cp-demangle.c (d_dump): Handle DEMANGLE_COMPONENT_NULLARY and
+	DEMANGLE_COMPONENT_INITIALIZER_LIST.
+	(d_make_comp): Likewise.  Allow null right arg for
+	DEMANGLE_COMPONENT_TRINARY_ARG2.
+	(cplus_demangle_operators): Adjust new/delete; add .*, :: and throw.
+	(d_template_args, d_template_arg): Handle 'J' for argument packs.
+	(d_exprlist): Add terminator parm.
+	(d_expression, d_print_comp): Handle initializer lists, nullary
+	expressions, prefix/suffix operators, and new.
+	(d_print_subexpr): Avoid parens around DEMANGLE_COMPONENT_QUAL_NAME
+	and DEMANGLE_COMPONENT_INITIALIZER_LIST.
+	* testsuite/demangle-expected: Add tests.
+
+	* cp-demangle.c (cplus_demangle_type): decltype, pack expansion
+	and vector are substitutable.
+	(cplus_demangle_operators): Sort.
+
+2012-01-04  Andreas Krebbel  <Andreas.Krebbel at de.ibm.com>
+
+	* configure: Regenerate.
+
+2012-01-02  Jakub Jelinek  <jakub at redhat.com>
+
+	* make-relative-prefix.c (make_relative_prefix_1): Avoid
+	stack overflow if PATH contains just a single entry and
+	HOST_EXECUTABLE_SUFFIX needs to be used.
+
+	PR driver/48306
+	* make-relative-prefix.c: Include sys/stat.h.
+	(make_relative_prefix_1): If access succeeds, check also stat
+	if nstore is a regular file.
+
+2011-12-20  Andreas Schwab  <schwab at linux-m68k.org>
+
+	* configure: Regenerate.
+
+2011-12-20  Tristan Gingold  <gingold at adacore.com>
+
+	* aclocal.m4: Assume strncmp works in cross case.
+	* configure: Regenerate
+
+2011-12-19  Andreas Schwab  <schwab at linux-m68k.org>
+
+	* configure: Regenerate.
+
 2011-11-07  Richard Henderson  <rth at redhat.com>
 
 	Merged from transactional-memory.
diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in
index 5280bc1..0a5da31 100644
--- a/libiberty/Makefile.in
+++ b/libiberty/Makefile.in
@@ -2,7 +2,7 @@
 # Originally written by K. Richard Pixley <rich at cygnus.com>.
 #
 # Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
 # Free Software Foundation
 #
 # This file is part of the libiberty library.
@@ -126,7 +126,7 @@ CFILES = alloca.c argv.c asprintf.c atexit.c				\
 	basename.c bcmp.c bcopy.c bsearch.c bzero.c			\
 	calloc.c choose-temp.c clock.c concat.c cp-demangle.c		\
 	 cp-demint.c cplus-dem.c crc32.c				\
-	dyn-string.c							\
+	dwarfnames.c dyn-string.c					\
 	fdmatch.c ffs.c fibheap.c filename_cmp.c floatformat.c		\
 	fnmatch.c fopen_unlocked.c					\
 	getcwd.c getopt.c getopt1.c getpagesize.c getpwd.c getruntime.c	\
@@ -166,7 +166,8 @@ REQUIRED_OFILES =							\
 	./md5.$(objext) ./sha1.$(objext) ./alloca.$(objext)		\
 	./argv.$(objext)						\
 	./choose-temp.$(objext) ./concat.$(objext)			\
-	./cp-demint.$(objext) ./crc32.$(objext) ./dyn-string.$(objext)	\
+	./cp-demint.$(objext) ./crc32.$(objext)				\
+	./dwarfnames.$(objext) ./dyn-string.$(objext)			\
 	./fdmatch.$(objext) ./fibheap.$(objext)				\
 	./filename_cmp.$(objext) ./floatformat.$(objext)		\
 	./fnmatch.$(objext) ./fopen_unlocked.$(objext)			\
@@ -621,6 +622,13 @@ $(CONFIGURED_OFILES): stamp-picdir
 	else true; fi
 	$(COMPILE.c) $(srcdir)/crc32.c $(OUTPUT_OPTION)
 
+./dwarfnames.$(objext): $(srcdir)/dwarfnames.c $(INCDIR)/dwarf2.h \
+	$(INCDIR)/dwarf2.def
+	if [ x"$(PICFLAG)" != x ]; then \
+	  $(COMPILE.c) $(PICFLAG) $(srcdir)/dwarfnames.c -o pic/$@; \
+	else true; fi
+	$(COMPILE.c) $(srcdir)/dwarfnames.c $(OUTPUT_OPTION)
+
 ./dyn-string.$(objext): $(srcdir)/dyn-string.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/dyn-string.h $(INCDIR)/libiberty.h
 	if [ x"$(PICFLAG)" != x ]; then \
diff --git a/libiberty/aclocal.m4 b/libiberty/aclocal.m4
index a528604..bf8a907 100644
--- a/libiberty/aclocal.m4
+++ b/libiberty/aclocal.m4
@@ -72,7 +72,7 @@ main ()
   exit (0);
 }
 ], ac_cv_func_strncmp_works=yes, ac_cv_func_strncmp_works=no,
-  ac_cv_func_strncmp_works=no)
+  ac_cv_func_strncmp_works=yes)
 rm -f core core.* *.core])
 if test $ac_cv_func_strncmp_works = no ; then
   AC_LIBOBJ([strncmp])
diff --git a/libiberty/at-file.texi b/libiberty/at-file.texi
index 8b13789..080d195 100644
--- a/libiberty/at-file.texi
+++ b/libiberty/at-file.texi
@@ -1 +1,15 @@
+ at c This file is designed to be included in manuals that use 
+ at c expandargv.
 
+ at item @@@var{file}
+Read command-line options from @var{file}.  The options read are
+inserted in place of the original @@@var{file} option.  If @var{file}
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.  
+
+Options in @var{file} are separated by whitespace.  A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes.  Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash.  The @var{file} may itself contain additional
+@@@var{file} options; any such options will be processed recursively.
diff --git a/libiberty/configure b/libiberty/configure
index c798937..6e98352 100755
--- a/libiberty/configure
+++ b/libiberty/configure
@@ -3920,8 +3920,14 @@ ac_c_preproc_warn_flag=yes
 
 ac_libiberty_warn_cflags=
 save_CFLAGS="$CFLAGS"
-for option in -W -Wall -Wwrite-strings -Wc++-compat \
+for real_option in -W -Wall -Wwrite-strings -Wc++-compat \
 			  -Wstrict-prototypes; do
+  # Do the check with the no- prefix removed since gcc silently
+  # accepts any -Wno-* option on purpose
+  case $real_option in
+    -Wno-*) option=-W`expr x$real_option : 'x-Wno-\(.*\)'` ;;
+    *) option=$real_option ;;
+  esac
   as_acx_Woption=`$as_echo "acx_cv_prog_cc_warning_$option" | $as_tr_sh`
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports $option" >&5
@@ -3953,11 +3959,13 @@ eval ac_res=\$$as_acx_Woption
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
   if test `eval 'as_val=${'$as_acx_Woption'};$as_echo "$as_val"'` = yes; then :
-  ac_libiberty_warn_cflags="$ac_libiberty_warn_cflags${ac_libiberty_warn_cflags:+ }$option"
+  ac_libiberty_warn_cflags="$ac_libiberty_warn_cflags${ac_libiberty_warn_cflags:+ }$real_option"
 fi
   done
 CFLAGS="$save_CFLAGS"
 
+# Do the check with the no- prefix removed from the warning options
+# since gcc silently accepts any -Wno-* option on purpose
 if test "$GCC" = yes; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -pedantic " >&5
 $as_echo_n "checking whether $CC supports -pedantic ... " >&6; }
@@ -4859,7 +4867,7 @@ case "${host}" in
 	;;
     i[34567]86-*-cygwin* | i[34567]86-*-mingw* | x86_64-*-mingw*)
 	;;
-    i[34567]86-*-interix3*)
+    i[34567]86-*-interix[3-9]*)
 	# Interix 3.x gcc -fpic/-fPIC options generate broken code.
 	# Instead, we relocate shared libraries at runtime.
 	;;
@@ -4891,9 +4899,6 @@ case "${host}" in
     m68k-*-*)
 	PICFLAG=-fpic
 	;;
-    s390*-*-*)
-	PICFLAG=-fpic
-	;;
     # FIXME: Override -fPIC default in libgcc only?
     sh-*-linux* | sh[2346lbe]*-*-linux*)
 	PICFLAG=-fpic
@@ -6816,7 +6821,7 @@ if test "${ac_cv_func_strncmp_works+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
-  ac_cv_func_strncmp_works=no
+  ac_cv_func_strncmp_works=yes
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
diff --git a/libiberty/copying-lib.texi b/libiberty/copying-lib.texi
index 8b13789..31ef68b 100644
--- a/libiberty/copying-lib.texi
+++ b/libiberty/copying-lib.texi
@@ -1 +1,560 @@
+ at node Library Copying
+ at appendixsec GNU LESSER GENERAL PUBLIC LICENSE
 
+ at cindex LGPL, Lesser General Public License
+ at center Version 2.1, February 1999
+
+ at display
+Copyright @copyright{} 1991, 1999 Free Software Foundation, Inc.
+51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, 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 Lesser GPL.  It also counts
+as the successor of the GNU Library Public License, version 2, hence the
+version number 2.1.]
+ at end display
+
+ at appendixsubsec Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+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 Lesser General Public License, applies to some
+specially designated software---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 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
+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 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.
+
+  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.
+
+  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, 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.  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.
+
+  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.
+
+  We call this license the @dfn{Lesser} General Public License because it
+does @emph{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.
+
+  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, whereas the latter must
+be combined with the library in order to run.
+
+ at iftex
+ at appendixsubsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+ at end iftex
+ at ifinfo
+ at center GNU LESSER GENERAL PUBLIC LICENSE
+ at center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+ at end ifinfo
+
+ at enumerate 0
+ at item
+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
+(which use some of those functions and data) to form executables.
+
+  The ``Library'', below, refers to any such software library or work
+which has been distributed under these terms.  A ``work based on the
+Library'' means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term ``modification''.)
+
+  ``Source code'' for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ at item
+You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ at item
+You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ at enumerate a
+ at item
+The modified work must itself be a software library.
+
+ at item
+You must cause the files modified to carry prominent notices
+stating that you changed the files and the date of any change.
+
+ at item
+You must cause the whole of the work to be licensed at no
+charge to all third parties under the terms of this License.
+
+ at item
+If a facility in the modified Library refers to a function or a
+table of data to be supplied by an application program that uses
+the facility, other than as an argument passed when the facility
+is invoked, then you must make a good faith effort to ensure that,
+in the event an application does not supply such function or
+table, the facility still operates, and performs whatever part of
+its purpose remains meaningful.
+
+(For example, a function in a library to compute square roots has
+a purpose that is entirely well-defined independent of the
+application.  Therefore, Subsection 2d requires that any
+application-supplied function or table used by this function must
+be optional: if the application does not supply it, the square
+root function must still compute square roots.)
+ at end enumerate
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ at item
+You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ at item
+You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ at item
+A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a ``work that uses the Library''.  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a ``work that uses the Library'' with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a ``work that uses the
+library''.  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a ``work that uses the Library'' uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ at item
+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
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+ at enumerate a
+ at item
+Accompany the work with the complete corresponding
+machine-readable source code for the Library including whatever
+changes were used in the work (which must be distributed under
+Sections 1 and 2 above); and, if the work is an executable linked
+with the Library, with the complete machine-readable ``work that
+uses the Library'', as object code and/or source code, so that the
+user can modify the Library and then relink to produce a modified
+executable containing the modified Library.  (It is understood
+that the user who changes the contents of definitions files in the
+Library will not necessarily be able to recompile the application
+to use the modified definitions.)
+
+ at item
+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.
+
+ at item
+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.
+
+ at item
+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.
+
+ at item
+Verify that the user has already received a copy of these
+materials or that you have already sent this user a copy.
+ at end enumerate
+
+  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 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.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ at item
+You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ at enumerate a
+ at item
+Accompany the combined library with a copy of the same work
+based on the Library, uncombined with any other library
+facilities.  This must be distributed under the terms of the
+Sections above.
+
+ at item
+Give prominent notice with the combined library of the fact
+that part of it is a work based on the Library, and explaining
+where to find the accompanying uncombined form of the same work.
+ at end enumerate
+
+ at item
+You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ at item
+You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ at item
+Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+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 with
+this License.
+
+ at item
+If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ at item
+If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ at item
+The Free Software Foundation may publish revised and/or new
+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.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+``any later version'', you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ at item
+If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ at center NO WARRANTY
+
+ at item
+BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY ``AS IS'' WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ at item
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+ at end enumerate
+
+ at iftex
+ at heading END OF TERMS AND CONDITIONS
+ at end iftex
+ at ifinfo
+ at center END OF TERMS AND CONDITIONS
+ at end ifinfo
+
+ at page
+ at appendixsubsec 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
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+``copyright'' line and a pointer to where the full notice is found.
+
+ at smallexample
+ at var{one line to give the library's name and an idea of what it does.}
+Copyright (C) @var{year}  @var{name of author}
+
+This library is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either 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
+Lesser General Public License for more details.
+
+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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+USA.
+ at end smallexample
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a ``copyright disclaimer'' for the library, if
+necessary.  Here is a sample; alter the names:
+
+ at smallexample
+Yoyodyne, Inc., hereby disclaims all copyright interest in the library
+`Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ at var{signature of Ty Coon}, 1 April 1990
+Ty Coon, President of Vice
+ at end smallexample
+
+That's all there is to it!
diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c
index 0f1166b..27cc323 100644
--- a/libiberty/cp-demangle.c
+++ b/libiberty/cp-demangle.c
@@ -648,9 +648,15 @@ d_dump (struct demangle_component *dc, int indent)
     case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
       printf ("template argument list\n");
       break;
+    case DEMANGLE_COMPONENT_INITIALIZER_LIST:
+      printf ("initializer list\n");
+      break;
     case DEMANGLE_COMPONENT_CAST:
       printf ("cast\n");
       break;
+    case DEMANGLE_COMPONENT_NULLARY:
+      printf ("nullary operator\n");
+      break;
     case DEMANGLE_COMPONENT_UNARY:
       printf ("unary operator\n");
       break;
@@ -806,7 +812,6 @@ d_make_comp (struct d_info *di, enum demangle_component_type type,
     case DEMANGLE_COMPONENT_BINARY_ARGS:
     case DEMANGLE_COMPONENT_TRINARY:
     case DEMANGLE_COMPONENT_TRINARY_ARG1:
-    case DEMANGLE_COMPONENT_TRINARY_ARG2:
     case DEMANGLE_COMPONENT_LITERAL:
     case DEMANGLE_COMPONENT_LITERAL_NEG:
     case DEMANGLE_COMPONENT_COMPOUND_NAME:
@@ -843,6 +848,8 @@ d_make_comp (struct d_info *di, enum demangle_component_type type,
     case DEMANGLE_COMPONENT_PACK_EXPANSION:
     case DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS:
     case DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS:
+    case DEMANGLE_COMPONENT_NULLARY:
+    case DEMANGLE_COMPONENT_TRINARY_ARG2:
       if (left == NULL)
 	return NULL;
       break;
@@ -850,6 +857,7 @@ d_make_comp (struct d_info *di, enum demangle_component_type type,
       /* This needs a right parameter, but the left parameter can be
 	 empty.  */
     case DEMANGLE_COMPONENT_ARRAY_TYPE:
+    case DEMANGLE_COMPONENT_INITIALIZER_LIST:
       if (right == NULL)
 	return NULL;
       break;
@@ -1411,7 +1419,12 @@ d_unqualified_name (struct d_info *di)
 
       ret = d_operator_name (di);
       if (ret != NULL && ret->type == DEMANGLE_COMPONENT_OPERATOR)
-	di->expansion += sizeof "operator" + ret->u.s_operator.op->len - 2;
+	{
+	  di->expansion += sizeof "operator" + ret->u.s_operator.op->len - 2;
+	  if (!strcmp (ret->u.s_operator.op->code, "li"))
+	    ret = d_make_comp (di, DEMANGLE_COMPONENT_UNARY, ret,
+			       d_source_name (di));
+	}
       return ret;
     }
   else if (peek == 'C' || peek == 'D')
@@ -1554,7 +1567,8 @@ d_identifier (struct d_info *di, int len)
 /* operator_name ::= many different two character encodings.
                  ::= cv <type>
                  ::= v <digit> <source-name>
-*/
+
+   This list is sorted for binary search.  */
 
 #define NL(s) s, (sizeof s) - 1
 
@@ -1566,23 +1580,28 @@ const struct demangle_operator_info cplus_demangle_operators[] =
   { "aa", NL ("&&"),        2 },
   { "ad", NL ("&"),         1 },
   { "an", NL ("&"),         2 },
+  { "at", NL ("alignof "),   1 },
+  { "az", NL ("alignof "),   1 },
   { "cl", NL ("()"),        2 },
   { "cm", NL (","),         2 },
   { "co", NL ("~"),         1 },
   { "dV", NL ("/="),        2 },
-  { "da", NL ("delete[]"),  1 },
+  { "da", NL ("delete[] "), 1 },
   { "de", NL ("*"),         1 },
-  { "dl", NL ("delete"),    1 },
+  { "dl", NL ("delete "),   1 },
+  { "ds", NL (".*"),        2 },
   { "dt", NL ("."),         2 },
   { "dv", NL ("/"),         2 },
   { "eO", NL ("^="),        2 },
   { "eo", NL ("^"),         2 },
   { "eq", NL ("=="),        2 },
   { "ge", NL (">="),        2 },
+  { "gs", NL ("::"),	    1 },
   { "gt", NL (">"),         2 },
   { "ix", NL ("[]"),        2 },
   { "lS", NL ("<<="),       2 },
   { "le", NL ("<="),        2 },
+  { "li", NL ("operator\"\" "), 1 },
   { "ls", NL ("<<"),        2 },
   { "lt", NL ("<"),         2 },
   { "mI", NL ("-="),        2 },
@@ -1590,11 +1609,11 @@ const struct demangle_operator_info cplus_demangle_operators[] =
   { "mi", NL ("-"),         2 },
   { "ml", NL ("*"),         2 },
   { "mm", NL ("--"),        1 },
-  { "na", NL ("new[]"),     1 },
+  { "na", NL ("new[]"),     3 },
   { "ne", NL ("!="),        2 },
   { "ng", NL ("-"),         1 },
   { "nt", NL ("!"),         1 },
-  { "nw", NL ("new"),       1 },
+  { "nw", NL ("new"),       3 },
   { "oR", NL ("|="),        2 },
   { "oo", NL ("||"),        2 },
   { "or", NL ("|"),         2 },
@@ -1611,8 +1630,8 @@ const struct demangle_operator_info cplus_demangle_operators[] =
   { "rs", NL (">>"),        2 },
   { "st", NL ("sizeof "),   1 },
   { "sz", NL ("sizeof "),   1 },
-  { "at", NL ("alignof "),   1 },
-  { "az", NL ("alignof "),   1 },
+  { "tr", NL ("throw"),     0 },
+  { "tw", NL ("throw "),    1 },
   { NULL, NULL, 0,          0 }
 };
 
@@ -2242,12 +2261,19 @@ cplus_demangle_type (struct d_info *di)
 			     d_expression (di), NULL);
 	  if (ret && d_next_char (di) != 'E')
 	    ret = NULL;
+	  can_subst = 1;
 	  break;
 	  
 	case 'p':
 	  /* Pack expansion.  */
 	  ret = d_make_comp (di, DEMANGLE_COMPONENT_PACK_EXPANSION,
 			     cplus_demangle_type (di), NULL);
+	  can_subst = 1;
+	  break;
+
+	case 'a':
+	  /* auto */
+	  ret = d_make_name (di, "auto", 4);
 	  break;
 	  
 	case 'f':
@@ -2298,6 +2324,7 @@ cplus_demangle_type (struct d_info *di)
 
 	case 'v':
 	  ret = d_vector_type (di);
+	  can_subst = 1;
 	  break;
 
         case 'n':
@@ -2675,8 +2702,10 @@ d_template_args (struct d_info *di)
      constructor or destructor.  */
   hold_last_name = di->last_name;
 
-  if (! d_check_char (di, 'I'))
+  if (d_peek_char (di) != 'I'
+      && d_peek_char (di) != 'J')
     return NULL;
+  d_advance (di, 1);
 
   if (d_peek_char (di) == 'E')
     {
@@ -2735,6 +2764,7 @@ d_template_arg (struct d_info *di)
       return d_expr_primary (di);
 
     case 'I':
+    case 'J':
       /* An argument pack.  */
       return d_template_args (di);
 
@@ -2743,15 +2773,16 @@ d_template_arg (struct d_info *di)
     }
 }
 
-/* Subroutine of <expression> ::= cl <expression>+ E */
+/* Parse a sequence of expressions until we hit the terminator
+   character.  */
 
 static struct demangle_component *
-d_exprlist (struct d_info *di)
+d_exprlist (struct d_info *di, char terminator)
 {
   struct demangle_component *list = NULL;
   struct demangle_component **p = &list;
 
-  if (d_peek_char (di) == 'E')
+  if (d_peek_char (di) == terminator)
     {
       d_advance (di, 1);
       return d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, NULL, NULL);
@@ -2768,7 +2799,7 @@ d_exprlist (struct d_info *di)
 	return NULL;
       p = &d_right (*p);
 
-      if (d_peek_char (di) == 'E')
+      if (d_peek_char (di) == terminator)
 	{
 	  d_advance (di, 1);
 	  break;
@@ -2859,9 +2890,21 @@ d_expression (struct d_info *di)
       else
 	return name;
     }
+  else if ((peek == 'i' || peek == 't')
+	   && d_peek_next_char (di) == 'l')
+    {
+      /* Brace-enclosed initializer list, untyped or typed.  */
+      struct demangle_component *type = NULL;
+      if (peek == 't')
+	type = cplus_demangle_type (di);
+      d_advance (di, 2);
+      return d_make_comp (di, DEMANGLE_COMPONENT_INITIALIZER_LIST,
+			  type, d_exprlist (di, 'E'));
+    }
   else
     {
       struct demangle_component *op;
+      const char *code = NULL;
       int args;
 
       op = d_operator_name (di);
@@ -2869,12 +2912,13 @@ d_expression (struct d_info *di)
 	return NULL;
 
       if (op->type == DEMANGLE_COMPONENT_OPERATOR)
-	di->expansion += op->u.s_operator.op->len - 2;
-
-      if (op->type == DEMANGLE_COMPONENT_OPERATOR
-	  && strcmp (op->u.s_operator.op->code, "st") == 0)
-	return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
-			    cplus_demangle_type (di));
+	{
+	  code = op->u.s_operator.op->code;
+	  di->expansion += op->u.s_operator.op->len - 2;
+	  if (strcmp (code, "st") == 0)
+	    return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
+				cplus_demangle_type (di));
+	}
 
       switch (op->type)
 	{
@@ -2893,26 +2937,43 @@ d_expression (struct d_info *di)
 
       switch (args)
 	{
+	case 0:
+	  return d_make_comp (di, DEMANGLE_COMPONENT_NULLARY, op, NULL);
+
 	case 1:
 	  {
 	    struct demangle_component *operand;
+	    int suffix = 0;
+
+	    if (code && (code[0] == 'p' || code[0] == 'm')
+		&& code[1] == code[0])
+	      /* pp_ and mm_ are the prefix variants.  */
+	      suffix = !d_check_char (di, '_');
+
 	    if (op->type == DEMANGLE_COMPONENT_CAST
 		&& d_check_char (di, '_'))
-	      operand = d_exprlist (di);
+	      operand = d_exprlist (di, 'E');
 	    else
 	      operand = d_expression (di);
-	    return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
-				operand);
+
+	    if (suffix)
+	      /* Indicate the suffix variant for d_print_comp.  */
+	      return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
+				  d_make_comp (di,
+					       DEMANGLE_COMPONENT_BINARY_ARGS,
+					       operand, operand));
+	    else
+	      return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
+				  operand);
 	  }
 	case 2:
 	  {
 	    struct demangle_component *left;
 	    struct demangle_component *right;
-	    const char *code = op->u.s_operator.op->code;
 
 	    left = d_expression (di);
 	    if (!strcmp (code, "cl"))
-	      right = d_exprlist (di);
+	      right = d_exprlist (di, 'E');
 	    else if (!strcmp (code, "dt") || !strcmp (code, "pt"))
 	      {
 		right = d_unqualified_name (di);
@@ -2932,17 +2993,50 @@ d_expression (struct d_info *di)
 	  {
 	    struct demangle_component *first;
 	    struct demangle_component *second;
+	    struct demangle_component *third;
 
-	    first = d_expression (di);
-	    second = d_expression (di);
+	    if (!strcmp (code, "qu"))
+	      {
+		/* ?: expression.  */
+		first = d_expression (di);
+		second = d_expression (di);
+		third = d_expression (di);
+	      }
+	    else if (code[0] == 'n')
+	      {
+		/* new-expression.  */
+		if (code[1] != 'w' && code[1] != 'a')
+		  return NULL;
+		first = d_exprlist (di, '_');
+		second = cplus_demangle_type (di);
+		if (d_peek_char (di) == 'E')
+		  {
+		    d_advance (di, 1);
+		    third = NULL;
+		  }
+		else if (d_peek_char (di) == 'p'
+			 && d_peek_next_char (di) == 'i')
+		  {
+		    /* Parenthesized initializer.  */
+		    d_advance (di, 2);
+		    third = d_exprlist (di, 'E');
+		  }
+		else if (d_peek_char (di) == 'i'
+			 && d_peek_next_char (di) == 'l')
+		  /* initializer-list.  */
+		  third = d_expression (di);
+		else
+		  return NULL;
+	      }
+	    else
+	      return NULL;
 	    return d_make_comp (di, DEMANGLE_COMPONENT_TRINARY, op,
 				d_make_comp (di,
 					     DEMANGLE_COMPONENT_TRINARY_ARG1,
 					     first,
 					     d_make_comp (di,
 							  DEMANGLE_COMPONENT_TRINARY_ARG2,
-							  second,
-							  d_expression (di))));
+							  second, third)));
 	  }
 	default:
 	  return NULL;
@@ -3621,6 +3715,7 @@ d_find_pack (struct d_print_info *dpi,
     case DEMANGLE_COMPONENT_SUB_STD:
     case DEMANGLE_COMPONENT_CHARACTER:
     case DEMANGLE_COMPONENT_FUNCTION_PARAM:
+    case DEMANGLE_COMPONENT_UNNAMED_TYPE:
       return NULL;
 
     case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
@@ -3662,6 +3757,8 @@ d_print_subexpr (struct d_print_info *dpi, int options,
 {
   int simple = 0;
   if (dc->type == DEMANGLE_COMPONENT_NAME
+      || dc->type == DEMANGLE_COMPONENT_QUAL_NAME
+      || dc->type == DEMANGLE_COMPONENT_INITIALIZER_LIST
       || dc->type == DEMANGLE_COMPONENT_FUNCTION_PARAM)
     simple = 1;
   if (!simple)
@@ -4257,16 +4354,32 @@ d_print_comp (struct d_print_info *dpi, int options,
 	}
       return;
 
+    case DEMANGLE_COMPONENT_INITIALIZER_LIST:
+      {
+	struct demangle_component *type = d_left (dc);
+	struct demangle_component *list = d_right (dc);
+
+	if (type)
+	  d_print_comp (dpi, options, type);
+	d_append_char (dpi, '{');
+	d_print_comp (dpi, options, list);
+	d_append_char (dpi, '}');
+      }
+      return;
+
     case DEMANGLE_COMPONENT_OPERATOR:
       {
-	char c;
+	const struct demangle_operator_info *op = dc->u.s_operator.op;
+	int len = op->len;
 
 	d_append_string (dpi, "operator");
-	c = dc->u.s_operator.op->name[0];
-	if (IS_LOWER (c))
+	/* Add a space before new/delete.  */
+	if (IS_LOWER (op->name[0]))
 	  d_append_char (dpi, ' ');
-	d_append_buffer (dpi, dc->u.s_operator.op->name,
-			 dc->u.s_operator.op->len);
+	/* Omit a trailing space.  */
+	if (op->name[len-1] == ' ')
+	  --len;
+	d_append_buffer (dpi, op->name, len);
 	return;
       }
 
@@ -4280,55 +4393,59 @@ d_print_comp (struct d_print_info *dpi, int options,
       d_print_cast (dpi, options, dc);
       return;
 
+    case DEMANGLE_COMPONENT_NULLARY:
+      d_print_expr_op (dpi, options, d_left (dc));
+      return;
+
     case DEMANGLE_COMPONENT_UNARY:
-      if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR
-	  && d_left (dc)->u.s_operator.op->len == 1
-	  && d_left (dc)->u.s_operator.op->name[0] == '&'
-	  && d_right (dc)->type == DEMANGLE_COMPONENT_TYPED_NAME
-	  && d_left (d_right (dc))->type == DEMANGLE_COMPONENT_QUAL_NAME
-	  && d_right (d_right (dc))->type == DEMANGLE_COMPONENT_FUNCTION_TYPE)
-	{
-	  /* Address of a function (therefore in an expression context) must
-	     have its argument list suppressed.
-
-	     unary operator ... dc
-	       operator & ... d_left (dc)
-	       typed name ... d_right (dc)
-		 qualified name ... d_left (d_right (dc))
-		   <names>
-		 function type ... d_right (d_right (dc))
-		   argument list
-		     <arguments>  */
-
-	  d_print_expr_op (dpi, options, d_left (dc));
-	  d_print_comp (dpi, options, d_left (d_right (dc)));
-	  return;
-	}
-      else if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR
-	       && d_left (dc)->u.s_operator.op->len == 1
-	       && d_left (dc)->u.s_operator.op->name[0] == '&'
-	       && d_right (dc)->type == DEMANGLE_COMPONENT_QUAL_NAME)
-	{
-	  /* Keep also already processed variant without the argument list.
+      {
+	struct demangle_component *op = d_left (dc);
+	struct demangle_component *operand = d_right (dc);
+	const char *code = NULL;
 
-	     unary operator ... dc
-	       operator & ... d_left (dc)
-	       qualified name ... d_right (dc)
-		 <names>  */
+	if (op->type == DEMANGLE_COMPONENT_OPERATOR)
+	  {
+	    code = op->u.s_operator.op->code;
+	    if (!strcmp (code, "ad"))
+	      {
+		/* Don't print the argument list for the address of a
+		   function.  */
+		if (operand->type == DEMANGLE_COMPONENT_TYPED_NAME
+		    && d_left (operand)->type == DEMANGLE_COMPONENT_QUAL_NAME
+		    && d_right (operand)->type == DEMANGLE_COMPONENT_FUNCTION_TYPE)
+		  operand = d_left (operand);
+	      }
+	    if (operand->type == DEMANGLE_COMPONENT_BINARY_ARGS)
+	      {
+		/* This indicates a suffix operator.  */
+		operand = d_left (operand);
+		d_print_subexpr (dpi, options, operand);
+		d_print_expr_op (dpi, options, op);
+		return;
+	      }
+	  }
 
-	  d_print_expr_op (dpi, options, d_left (dc));
-	  d_print_comp (dpi, options, d_right (dc));
-	  return;
-	}
-      else if (d_left (dc)->type != DEMANGLE_COMPONENT_CAST)
-	d_print_expr_op (dpi, options, d_left (dc));
-      else
-	{
-	  d_append_char (dpi, '(');
-	  d_print_cast (dpi, options, d_left (dc));
-	  d_append_char (dpi, ')');
-	}
-      d_print_subexpr (dpi, options, d_right (dc));
+	if (op->type != DEMANGLE_COMPONENT_CAST)
+	  d_print_expr_op (dpi, options, op);
+	else
+	  {
+	    d_append_char (dpi, '(');
+	    d_print_cast (dpi, options, op);
+	    d_append_char (dpi, ')');
+	  }
+	if (code && !strcmp (code, "gs"))
+	  /* Avoid parens after '::'.  */
+	  d_print_comp (dpi, options, operand);
+	else if (code && !strcmp (code, "st"))
+	  /* Always print parens for sizeof (type).  */
+	  {
+	    d_append_char (dpi, '(');
+	    d_print_comp (dpi, options, operand);
+	    d_append_char (dpi, ')');
+	  }
+	else
+	  d_print_subexpr (dpi, options, operand);
+      }
       return;
 
     case DEMANGLE_COMPONENT_BINARY:
@@ -4393,11 +4510,33 @@ d_print_comp (struct d_print_info *dpi, int options,
 	  d_print_error (dpi);
 	  return;
 	}
-      d_print_subexpr (dpi, options, d_left (d_right (dc)));
-      d_print_expr_op (dpi, options, d_left (dc));
-      d_print_subexpr (dpi, options, d_left (d_right (d_right (dc))));
-      d_append_string (dpi, " : ");
-      d_print_subexpr (dpi, options, d_right (d_right (d_right (dc))));
+      {
+	struct demangle_component *op = d_left (dc);
+	struct demangle_component *first = d_left (d_right (dc));
+	struct demangle_component *second = d_left (d_right (d_right (dc)));
+	struct demangle_component *third = d_right (d_right (d_right (dc)));
+
+	if (!strcmp (op->u.s_operator.op->code, "qu"))
+	  {
+	    d_print_subexpr (dpi, options, first);
+	    d_print_expr_op (dpi, options, op);
+	    d_print_subexpr (dpi, options, second);
+	    d_append_string (dpi, " : ");
+	    d_print_subexpr (dpi, options, third);
+	  }
+	else
+	  {
+	    d_append_string (dpi, "new ");
+	    if (d_left (first) != NULL)
+	      {
+		d_print_subexpr (dpi, options, first);
+		d_append_char (dpi, ' ');
+	      }
+	    d_print_comp (dpi, options, second);
+	    if (third)
+	      d_print_subexpr (dpi, options, third);
+	  }
+      }
       return;
 
     case DEMANGLE_COMPONENT_TRINARY_ARG1:
diff --git a/libiberty/dwarfnames.c b/libiberty/dwarfnames.c
new file mode 100644
index 0000000..7017308
--- /dev/null
+++ b/libiberty/dwarfnames.c
@@ -0,0 +1,98 @@
+/* Names of various DWARF tags.
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+   
+GNU CC 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.
+
+In addition to the permissions in the GNU General Public License, the
+Free Software Foundation gives you unlimited permission to link the
+compiled version of this file into combinations with other programs,
+and to distribute those combinations without any restriction coming
+from the use of this file.  (The General Public License restrictions
+do apply in other respects; for example, they cover modification of
+the file, and distribution when not linked into a combined
+executable.)
+
+GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#include "dwarf2.h"
+
+#define DW_FIRST_TAG(name, value) \
+  const char *get_DW_TAG_name (unsigned int tag)	\
+  { switch (tag) { \
+  DW_TAG (name, value)
+#define DW_END_TAG } return 0; }
+#define DW_FIRST_FORM(name, value) \
+  const char *get_DW_FORM_name (unsigned int form)	\
+  { switch (form) { \
+  DW_FORM (name, value)
+#define DW_END_FORM } return 0; }
+#define DW_FIRST_AT(name, value) \
+  const char *get_DW_AT_name (unsigned int attr) {	\
+  switch (attr) { \
+  DW_AT (name, value)
+#define DW_END_AT } return 0; }
+#define DW_FIRST_OP(name, value) \
+  const char *get_DW_OP_name (unsigned int op) {	\
+  switch (op) { \
+  DW_OP (name, value)
+#define DW_END_OP } return 0; }
+#define DW_FIRST_ATE(name, value)			\
+  const char *get_DW_ATE_name (unsigned int enc) {	\
+  switch (enc) { \
+  DW_ATE (name, value)
+#define DW_END_ATE } return 0; }
+#define DW_FIRST_CFA(name, value) \
+  const char *get_DW_CFA_name (unsigned int opc) {	\
+  switch (opc) {					\
+  DW_CFA (name, value)
+#define DW_END_CFA } return 0; }
+
+#define DW_TAG(name, value) case name: return # name ;
+#define DW_TAG_DUP(name, value)
+#define DW_FORM(name, value) case name: return # name ;
+#define DW_AT(name, value) case name: return # name ;
+#define DW_AT_DUP(name, value)
+#define DW_OP(name, value) case name: return # name ;
+#define DW_OP_DUP(name, value)
+#define DW_ATE(name, value) case name: return # name ;
+#define DW_ATE_DUP(name, value)
+#define DW_CFA(name, value) case name: return # name ;
+
+#include "dwarf2.def"
+
+#undef DW_FIRST_TAG
+#undef DW_END_TAG
+#undef DW_FIRST_FORM
+#undef DW_END_FORM
+#undef DW_FIRST_AT
+#undef DW_END_AT
+#undef DW_FIRST_OP
+#undef DW_END_OP
+#undef DW_FIRST_ATE
+#undef DW_END_ATE
+#undef DW_FIRST_CFA
+#undef DW_END_CFA
+
+#undef DW_TAG
+#undef DW_TAG_DUP
+#undef DW_FORM
+#undef DW_AT
+#undef DW_AT_DUP
+#undef DW_OP
+#undef DW_OP_DUP
+#undef DW_ATE
+#undef DW_ATE_DUP
+#undef DW_CFA
diff --git a/libiberty/filename_cmp.c b/libiberty/filename_cmp.c
index 5179f8d..9e16d24 100644
--- a/libiberty/filename_cmp.c
+++ b/libiberty/filename_cmp.c
@@ -141,3 +141,52 @@ filename_ncmp (const char *s1, const char *s2, size_t n)
   return 0;
 #endif
 }
+
+/*
+
+ at deftypefn Extension hashval_t filename_hash (const void *@var{s})
+
+Return the hash value for file name @var{s} that will be compared
+using filename_cmp.
+This function is for use with hashtab.c hash tables.
+
+ at end deftypefn
+
+*/
+
+hashval_t
+filename_hash (const void *s)
+{
+  /* The cast is for -Wc++-compat.  */
+  const unsigned char *str = (const unsigned char *) s;
+  hashval_t r = 0;
+  unsigned char c;
+
+  while ((c = *str++) != 0)
+    {
+      if (c == '\\')
+	c = '/';
+      c = TOLOWER (c);
+      r = r * 67 + c - 113;
+    }
+
+  return r;
+}
+
+/*
+
+ at deftypefn Extension int filename_eq (const void *@var{s1}, const void *@var{s2})
+
+Return non-zero if file names @var{s1} and @var{s2} are equivalent.
+This function is for use with hashtab.c hash tables.
+
+ at end deftypefn
+
+*/
+
+int
+filename_eq (const void *s1, const void *s2)
+{
+  /* The casts are for -Wc++-compat.  */
+  return filename_cmp ((const char *) s1, (const char *) s2) == 0;
+}
diff --git a/libiberty/functions.texi b/libiberty/functions.texi
index 8b13789..c9df186 100644
--- a/libiberty/functions.texi
+++ b/libiberty/functions.texi
@@ -1 +1,1940 @@
+ at c Automatically generated from *.c and others (the comments before
+ at c each entry tell you which file and where in that file).  DO NOT EDIT!
+ at c Edit the *.c files, configure with --enable-maintainer-mode,
+ at c run 'make stamp-functions' and gather-docs will build a new copy.
+
+ at c alloca.c:26
+ at deftypefn Replacement void* alloca (size_t @var{size})
+
+This function allocates memory which will be automatically reclaimed
+after the procedure exits.  The @libib{} implementation does not free
+the memory immediately but will do so eventually during subsequent
+calls to this function.  Memory is allocated using @code{xmalloc} under
+normal circumstances.
+
+The header file @file{alloca-conf.h} can be used in conjunction with the
+GNU Autoconf test @code{AC_FUNC_ALLOCA} to test for and properly make
+available this function.  The @code{AC_FUNC_ALLOCA} test requires that
+client code use a block of preprocessor code to be safe (see the Autoconf
+manual for more); this header incorporates that logic and more, including
+the possibility of a GCC built-in function.
+
+ at end deftypefn
+
+ at c asprintf.c:32
+ at deftypefn Extension int asprintf (char **@var{resptr}, const char *@var{format}, ...)
+
+Like @code{sprintf}, but instead of passing a pointer to a buffer, you
+pass a pointer to a pointer.  This function will compute the size of
+the buffer needed, allocate memory with @code{malloc}, and store a
+pointer to the allocated memory in @code{*@var{resptr}}.  The value
+returned is the same as @code{sprintf} would return.  If memory could
+not be allocated, minus one is returned and @code{NULL} is stored in
+ at code{*@var{resptr}}.
+
+ at end deftypefn
+
+ at c atexit.c:6
+ at deftypefn Supplemental int atexit (void (*@var{f})())
+
+Causes function @var{f} to be called at exit.  Returns 0.
+
+ at end deftypefn
+
+ at c basename.c:6
+ at deftypefn Supplemental char* basename (const char *@var{name})
+
+Returns a pointer to the last component of pathname @var{name}.
+Behavior is undefined if the pathname ends in a directory separator.
+
+ at end deftypefn
+
+ at c bcmp.c:6
+ at deftypefn Supplemental int bcmp (char *@var{x}, char *@var{y}, int @var{count})
+
+Compares the first @var{count} bytes of two areas of memory.  Returns
+zero if they are the same, nonzero otherwise.  Returns zero if
+ at var{count} is zero.  A nonzero result only indicates a difference,
+it does not indicate any sorting order (say, by having a positive
+result mean @var{x} sorts before @var{y}).
+
+ at end deftypefn
+
+ at c bcopy.c:3
+ at deftypefn Supplemental void bcopy (char *@var{in}, char *@var{out}, int @var{length})
+
+Copies @var{length} bytes from memory region @var{in} to region
+ at var{out}.  The use of @code{bcopy} is deprecated in new programs.
+
+ at end deftypefn
+
+ at c bsearch.c:33
+ at deftypefn Supplemental void* bsearch (const void *@var{key}, @
+  const void *@var{base}, size_t @var{nmemb}, size_t @var{size}, @
+  int (*@var{compar})(const void *, const void *))
+
+Performs a search over an array of @var{nmemb} elements pointed to by
+ at var{base} for a member that matches the object pointed to by @var{key}.
+The size of each member is specified by @var{size}.  The array contents
+should be sorted in ascending order according to the @var{compar}
+comparison function.  This routine should take two arguments pointing to
+the @var{key} and to an array member, in that order, and should return an
+integer less than, equal to, or greater than zero if the @var{key} object
+is respectively less than, matching, or greater than the array member.
+
+ at end deftypefn
+
+ at c argv.c:142
+ at deftypefn Extension char** buildargv (char *@var{sp})
+
+Given a pointer to a string, parse the string extracting fields
+separated by whitespace and optionally enclosed within either single
+or double quotes (which are stripped off), and build a vector of
+pointers to copies of the string for each field.  The input string
+remains unchanged.  The last element of the vector is followed by a
+ at code{NULL} element.
+
+All of the memory for the pointer array and copies of the string
+is obtained from @code{malloc}.  All of the memory can be returned to the
+system with the single function call @code{freeargv}, which takes the
+returned result of @code{buildargv}, as it's argument.
+
+Returns a pointer to the argument vector if successful.  Returns
+ at code{NULL} if @var{sp} is @code{NULL} or if there is insufficient
+memory to complete building the argument vector.
+
+If the input is a null string (as opposed to a @code{NULL} pointer),
+then buildarg returns an argument vector that has one arg, a null
+string.
+
+ at end deftypefn
+
+ at c bzero.c:6
+ at deftypefn Supplemental void bzero (char *@var{mem}, int @var{count})
+
+Zeros @var{count} bytes starting at @var{mem}.  Use of this function
+is deprecated in favor of @code{memset}.
+
+ at end deftypefn
+
+ at c calloc.c:6
+ at deftypefn Supplemental void* calloc (size_t @var{nelem}, size_t @var{elsize})
+
+Uses @code{malloc} to allocate storage for @var{nelem} objects of
+ at var{elsize} bytes each, then zeros the memory.
+
+ at end deftypefn
+
+ at c choose-temp.c:46
+ at deftypefn Extension char* choose_temp_base (void)
+
+Return a prefix for temporary file names or @code{NULL} if unable to
+find one.  The current directory is chosen if all else fails so the
+program is exited if a temporary directory can't be found (@code{mktemp}
+fails).  The buffer for the result is obtained with @code{xmalloc}.
+
+This function is provided for backwards compatibility only.  Its use is
+not recommended.
+
+ at end deftypefn
+
+ at c make-temp-file.c:96
+ at deftypefn Replacement char* choose_tmpdir ()
+
+Returns a pointer to a directory path suitable for creating temporary
+files in.
+
+ at end deftypefn
+
+ at c clock.c:27
+ at deftypefn Supplemental long clock (void)
+
+Returns an approximation of the CPU time used by the process as a
+ at code{clock_t}; divide this number by @samp{CLOCKS_PER_SEC} to get the
+number of seconds used.
+
+ at end deftypefn
+
+ at c concat.c:24
+ at deftypefn Extension char* concat (const char *@var{s1}, const char *@var{s2}, @
+  @dots{}, @code{NULL})
+
+Concatenate zero or more of strings and return the result in freshly
+ at code{xmalloc}ed memory.  Returns @code{NULL} if insufficient memory is
+available.  The argument list is terminated by the first @code{NULL}
+pointer encountered.  Pointers to empty strings are ignored.
+
+ at end deftypefn
+
+ at c crc32.c:141
+ at deftypefn Extension {unsigned int} crc32 (const unsigned char *@var{buf}, @
+  int @var{len}, unsigned int @var{init})
+
+Compute the 32-bit CRC of @var{buf} which has length @var{len}.  The
+starting value is @var{init}; this may be used to compute the CRC of
+data split across multiple buffers by passing the return value of each
+call as the @var{init} parameter of the next.
+
+This is intended to match the CRC used by the @command{gdb} remote
+protocol for the @samp{qCRC} command.  In order to get the same
+results as gdb for a block of data, you must pass the first CRC
+parameter as @code{0xffffffff}.
+
+This CRC can be specified as:
+
+  Width  : 32
+  Poly   : 0x04c11db7
+  Init   : parameter, typically 0xffffffff
+  RefIn  : false
+  RefOut : false
+  XorOut : 0
+
+This differs from the "standard" CRC-32 algorithm in that the values
+are not reflected, and there is no final XOR value.  These differences
+make it easy to compose the values of multiple blocks.
+
+ at end deftypefn
+
+ at c argv.c:52
+ at deftypefn Extension char** dupargv (char **@var{vector})
+
+Duplicate an argument vector.  Simply scans through @var{vector},
+duplicating each argument until the terminating @code{NULL} is found.
+Returns a pointer to the argument vector if successful.  Returns
+ at code{NULL} if there is insufficient memory to complete building the
+argument vector.
+
+ at end deftypefn
+
+ at c strerror.c:567
+ at deftypefn Extension int errno_max (void)
+
+Returns the maximum @code{errno} value for which a corresponding
+symbolic name or message is available.  Note that in the case where we
+use the @code{sys_errlist} supplied by the system, it is possible for
+there to be more symbolic names than messages, or vice versa.  In
+fact, the manual page for @code{perror(3C)} explicitly warns that one
+should check the size of the table (@code{sys_nerr}) before indexing
+it, since new error codes may be added to the system before they are
+added to the table.  Thus @code{sys_nerr} might be smaller than value
+implied by the largest @code{errno} value defined in @code{<errno.h>}.
+
+We return the maximum value that can be used to obtain a meaningful
+symbolic name or message.
+
+ at end deftypefn
+
+ at c argv.c:361
+ at deftypefn Extension void expandargv (int *@var{argcp}, char ***@var{argvp})
+
+The @var{argcp} and @code{argvp} arguments are pointers to the usual
+ at code{argc} and @code{argv} arguments to @code{main}.  This function
+looks for arguments that begin with the character @samp{@@}.  Any such
+arguments are interpreted as ``response files''.  The contents of the
+response file are interpreted as additional command line options.  In
+particular, the file is separated into whitespace-separated strings;
+each such string is taken as a command-line option.  The new options
+are inserted in place of the option naming the response file, and
+ at code{*argcp} and @code{*argvp} will be updated.  If the value of
+ at code{*argvp} is modified by this function, then the new value has
+been dynamically allocated and can be deallocated by the caller with
+ at code{freeargv}.  However, most callers will simply call
+ at code{expandargv} near the beginning of @code{main} and allow the
+operating system to free the memory when the program exits.
+
+ at end deftypefn
+
+ at c fdmatch.c:23
+ at deftypefn Extension int fdmatch (int @var{fd1}, int @var{fd2})
+
+Check to see if two open file descriptors refer to the same file.
+This is useful, for example, when we have an open file descriptor for
+an unnamed file, and the name of a file that we believe to correspond
+to that fd.  This can happen when we are exec'd with an already open
+file (@code{stdout} for example) or from the SVR4 @file{/proc} calls
+that return open file descriptors for mapped address spaces.  All we
+have to do is open the file by name and check the two file descriptors
+for a match, which is done by comparing major and minor device numbers
+and inode numbers.
+
+ at end deftypefn
+
+ at c fopen_unlocked.c:49
+ at deftypefn Extension {FILE *} fdopen_unlocked (int @var{fildes}, @
+  const char * @var{mode})
+
+Opens and returns a @code{FILE} pointer via @code{fdopen}.  If the
+operating system supports it, ensure that the stream is setup to avoid
+any multi-threaded locking.  Otherwise return the @code{FILE} pointer
+unchanged.
+
+ at end deftypefn
+
+ at c ffs.c:3
+ at deftypefn Supplemental int ffs (int @var{valu})
+
+Find the first (least significant) bit set in @var{valu}.  Bits are
+numbered from right to left, starting with bit 1 (corresponding to the
+value 1).  If @var{valu} is zero, zero is returned.
+
+ at end deftypefn
+
+ at c filename_cmp.c:32
+ at deftypefn Extension int filename_cmp (const char *@var{s1}, const char *@var{s2})
+
+Return zero if the two file names @var{s1} and @var{s2} are equivalent.
+If not equivalent, the returned value is similar to what @code{strcmp}
+would return.  In other words, it returns a negative value if @var{s1}
+is less than @var{s2}, or a positive value if @var{s2} is greater than
+ at var{s2}.
+
+This function does not normalize file names.  As a result, this function
+will treat filenames that are spelled differently as different even in
+the case when the two filenames point to the same underlying file.
+However, it does handle the fact that on DOS-like file systems, forward
+and backward slashes are equal.
+
+ at end deftypefn
+
+ at c filename_cmp.c:81
+ at deftypefn Extension int filename_ncmp (const char *@var{s1}, const char *@var{s2}, size_t @var{n})
+
+Return zero if the two file names @var{s1} and @var{s2} are equivalent
+in range @var{n}.
+If not equivalent, the returned value is similar to what @code{strncmp}
+would return.  In other words, it returns a negative value if @var{s1}
+is less than @var{s2}, or a positive value if @var{s2} is greater than
+ at var{s2}.
+
+This function does not normalize file names.  As a result, this function
+will treat filenames that are spelled differently as different even in
+the case when the two filenames point to the same underlying file.
+However, it does handle the fact that on DOS-like file systems, forward
+and backward slashes are equal.
+
+ at end deftypefn
+
+ at c fnmatch.txh:1
+ at deftypefn Replacement int fnmatch (const char *@var{pattern}, @
+  const char *@var{string}, int @var{flags})
+
+Matches @var{string} against @var{pattern}, returning zero if it
+matches, @code{FNM_NOMATCH} if not.  @var{pattern} may contain the
+wildcards @code{?} to match any one character, @code{*} to match any
+zero or more characters, or a set of alternate characters in square
+brackets, like @samp{[a-gt8]}, which match one character (@code{a}
+through @code{g}, or @code{t}, or @code{8}, in this example) if that one
+character is in the set.  A set may be inverted (i.e., match anything
+except what's in the set) by giving @code{^} or @code{!} as the first
+character in the set.  To include those characters in the set, list them
+as anything other than the first character of the set.  To include a
+dash in the set, list it last in the set.  A backslash character makes
+the following character not special, so for example you could match
+against a literal asterisk with @samp{\*}.  To match a literal
+backslash, use @samp{\\}.
+
+ at code{flags} controls various aspects of the matching process, and is a
+boolean OR of zero or more of the following values (defined in
+ at code{<fnmatch.h>}):
+
+ at table @code
+
+ at item FNM_PATHNAME
+ at itemx FNM_FILE_NAME
+ at var{string} is assumed to be a path name.  No wildcard will ever match
+ at code{/}.
+
+ at item FNM_NOESCAPE
+Do not interpret backslashes as quoting the following special character.
+
+ at item FNM_PERIOD
+A leading period (at the beginning of @var{string}, or if
+ at code{FNM_PATHNAME} after a slash) is not matched by @code{*} or
+ at code{?} but must be matched explicitly.
+
+ at item FNM_LEADING_DIR
+Means that @var{string} also matches @var{pattern} if some initial part
+of @var{string} matches, and is followed by @code{/} and zero or more
+characters.  For example, @samp{foo*} would match either @samp{foobar}
+or @samp{foobar/grill}.
+
+ at item FNM_CASEFOLD
+Ignores case when performing the comparison.
+
+ at end table
+
+ at end deftypefn
+
+ at c fopen_unlocked.c:39
+ at deftypefn Extension {FILE *} fopen_unlocked (const char *@var{path}, @
+  const char * @var{mode})
+
+Opens and returns a @code{FILE} pointer via @code{fopen}.  If the
+operating system supports it, ensure that the stream is setup to avoid
+any multi-threaded locking.  Otherwise return the @code{FILE} pointer
+unchanged.
+
+ at end deftypefn
+
+ at c argv.c:97
+ at deftypefn Extension void freeargv (char **@var{vector})
+
+Free an argument vector that was built using @code{buildargv}.  Simply
+scans through @var{vector}, freeing the memory for each argument until
+the terminating @code{NULL} is found, and then frees @var{vector}
+itself.
+
+ at end deftypefn
+
+ at c fopen_unlocked.c:59
+ at deftypefn Extension {FILE *} freopen_unlocked (const char * @var{path}, @
+  const char * @var{mode}, FILE * @var{stream})
+
+Opens and returns a @code{FILE} pointer via @code{freopen}.  If the
+operating system supports it, ensure that the stream is setup to avoid
+any multi-threaded locking.  Otherwise return the @code{FILE} pointer
+unchanged.
+
+ at end deftypefn
+
+ at c getruntime.c:82
+ at deftypefn Replacement long get_run_time (void)
+
+Returns the time used so far, in microseconds.  If possible, this is
+the time used by this process, else it is the elapsed time since the
+process started.
+
+ at end deftypefn
+
+ at c getcwd.c:6
+ at deftypefn Supplemental char* getcwd (char *@var{pathname}, int @var{len})
+
+Copy the absolute pathname for the current working directory into
+ at var{pathname}, which is assumed to point to a buffer of at least
+ at var{len} bytes, and return a pointer to the buffer.  If the current
+directory's path doesn't fit in @var{len} characters, the result is
+ at code{NULL} and @code{errno} is set.  If @var{pathname} is a null pointer,
+ at code{getcwd} will obtain @var{len} bytes of space using
+ at code{malloc}.
+
+ at end deftypefn
+
+ at c getpagesize.c:5
+ at deftypefn Supplemental int getpagesize (void)
+
+Returns the number of bytes in a page of memory.  This is the
+granularity of many of the system memory management routines.  No
+guarantee is made as to whether or not it is the same as the basic
+memory management hardware page size.
+
+ at end deftypefn
+
+ at c getpwd.c:5
+ at deftypefn Supplemental char* getpwd (void)
+
+Returns the current working directory.  This implementation caches the
+result on the assumption that the process will not call @code{chdir}
+between calls to @code{getpwd}.
+
+ at end deftypefn
+
+ at c gettimeofday.c:12
+ at deftypefn Supplemental int gettimeofday (struct timeval *@var{tp}, void *@var{tz})
+
+Writes the current time to @var{tp}.  This implementation requires
+that @var{tz} be NULL.  Returns 0 on success, -1 on failure.
+
+ at end deftypefn
+
+ at c hex.c:33
+ at deftypefn Extension void hex_init (void)
+
+Initializes the array mapping the current character set to
+corresponding hex values.  This function must be called before any
+call to @code{hex_p} or @code{hex_value}.  If you fail to call it, a
+default ASCII-based table will normally be used on ASCII systems.
+
+ at end deftypefn
+
+ at c hex.c:42
+ at deftypefn Extension int hex_p (int @var{c})
+
+Evaluates to non-zero if the given character is a valid hex character,
+or zero if it is not.  Note that the value you pass will be cast to
+ at code{unsigned char} within the macro.
+
+ at end deftypefn
+
+ at c hex.c:50
+ at deftypefn Extension {unsigned int} hex_value (int @var{c})
+
+Returns the numeric equivalent of the given character when interpreted
+as a hexadecimal digit.  The result is undefined if you pass an
+invalid hex digit.  Note that the value you pass will be cast to
+ at code{unsigned char} within the macro.
+
+The @code{hex_value} macro returns @code{unsigned int}, rather than
+signed @code{int}, to make it easier to use in parsing addresses from
+hex dump files: a signed @code{int} would be sign-extended when
+converted to a wider unsigned type --- like @code{bfd_vma}, on some
+systems.
+
+ at end deftypefn
+
+ at c safe-ctype.c:25
+ at defvr Extension HOST_CHARSET
+This macro indicates the basic character set and encoding used by the
+host: more precisely, the encoding used for character constants in
+preprocessor @samp{#if} statements (the C "execution character set").
+It is defined by @file{safe-ctype.h}, and will be an integer constant
+with one of the following values:
+
+ at ftable @code
+ at item HOST_CHARSET_UNKNOWN
+The host character set is unknown - that is, not one of the next two
+possibilities.
+
+ at item HOST_CHARSET_ASCII
+The host character set is ASCII.
+
+ at item HOST_CHARSET_EBCDIC
+The host character set is some variant of EBCDIC.  (Only one of the
+nineteen EBCDIC varying characters is tested; exercise caution.)
+ at end ftable
+ at end defvr
+
+ at c hashtab.c:336
+ at deftypefn Supplemental htab_t htab_create_typed_alloc (size_t @var{size}, @
+htab_hash @var{hash_f}, htab_eq @var{eq_f}, htab_del @var{del_f}, @
+htab_alloc @var{alloc_tab_f}, htab_alloc @var{alloc_f}, @
+htab_free @var{free_f})
+
+This function creates a hash table that uses two different allocators
+ at var{alloc_tab_f} and @var{alloc_f} to use for allocating the table itself
+and its entries respectively.  This is useful when variables of different
+types need to be allocated with different allocators.
+
+The created hash table is slightly larger than @var{size} and it is
+initially empty (all the hash table entries are @code{HTAB_EMPTY_ENTRY}).
+The function returns the created hash table, or @code{NULL} if memory
+allocation fails.
+
+ at end deftypefn
+
+ at c index.c:5
+ at deftypefn Supplemental char* index (char *@var{s}, int @var{c})
+
+Returns a pointer to the first occurrence of the character @var{c} in
+the string @var{s}, or @code{NULL} if not found.  The use of @code{index} is
+deprecated in new programs in favor of @code{strchr}.
+
+ at end deftypefn
+
+ at c insque.c:6
+ at deftypefn Supplemental void insque (struct qelem *@var{elem}, @
+  struct qelem *@var{pred})
+ at deftypefnx Supplemental void remque (struct qelem *@var{elem})
+
+Routines to manipulate queues built from doubly linked lists.  The
+ at code{insque} routine inserts @var{elem} in the queue immediately
+after @var{pred}.  The @code{remque} routine removes @var{elem} from
+its containing queue.  These routines expect to be passed pointers to
+structures which have as their first members a forward pointer and a
+back pointer, like this prototype (although no prototype is provided):
+
+ at example
+struct qelem @{
+  struct qelem *q_forw;
+  struct qelem *q_back;
+  char q_data[];
+@};
+ at end example
+
+ at end deftypefn
+
+ at c safe-ctype.c:46
+ at deffn  Extension ISALPHA  (@var{c})
+ at deffnx Extension ISALNUM  (@var{c})
+ at deffnx Extension ISBLANK  (@var{c})
+ at deffnx Extension ISCNTRL  (@var{c})
+ at deffnx Extension ISDIGIT  (@var{c})
+ at deffnx Extension ISGRAPH  (@var{c})
+ at deffnx Extension ISLOWER  (@var{c})
+ at deffnx Extension ISPRINT  (@var{c})
+ at deffnx Extension ISPUNCT  (@var{c})
+ at deffnx Extension ISSPACE  (@var{c})
+ at deffnx Extension ISUPPER  (@var{c})
+ at deffnx Extension ISXDIGIT (@var{c})
+
+These twelve macros are defined by @file{safe-ctype.h}.  Each has the
+same meaning as the corresponding macro (with name in lowercase)
+defined by the standard header @file{ctype.h}.  For example,
+ at code{ISALPHA} returns true for alphabetic characters and false for
+others.  However, there are two differences between these macros and
+those provided by @file{ctype.h}:
+
+ at itemize @bullet
+ at item These macros are guaranteed to have well-defined behavior for all 
+values representable by @code{signed char} and @code{unsigned char}, and
+for @code{EOF}.
+
+ at item These macros ignore the current locale; they are true for these
+fixed sets of characters:
+ at multitable {@code{XDIGIT}} {yada yada yada yada yada yada yada yada}
+ at item @code{ALPHA}  @tab @kbd{A-Za-z}
+ at item @code{ALNUM}  @tab @kbd{A-Za-z0-9}
+ at item @code{BLANK}  @tab @kbd{space tab}
+ at item @code{CNTRL}  @tab @code{!PRINT}
+ at item @code{DIGIT}  @tab @kbd{0-9}
+ at item @code{GRAPH}  @tab @code{ALNUM || PUNCT}
+ at item @code{LOWER}  @tab @kbd{a-z}
+ at item @code{PRINT}  @tab @code{GRAPH ||} @kbd{space}
+ at item @code{PUNCT}  @tab @kbd{`~!@@#$%^&*()_-=+[@{]@}\|;:'",<.>/?}
+ at item @code{SPACE}  @tab @kbd{space tab \n \r \f \v}
+ at item @code{UPPER}  @tab @kbd{A-Z}
+ at item @code{XDIGIT} @tab @kbd{0-9A-Fa-f}
+ at end multitable
+
+Note that, if the host character set is ASCII or a superset thereof,
+all these macros will return false for all values of @code{char} outside
+the range of 7-bit ASCII.  In particular, both ISPRINT and ISCNTRL return
+false for characters with numeric values from 128 to 255.
+ at end itemize
+ at end deffn
+
+ at c safe-ctype.c:95
+ at deffn  Extension ISIDNUM         (@var{c})
+ at deffnx Extension ISIDST          (@var{c})
+ at deffnx Extension IS_VSPACE       (@var{c})
+ at deffnx Extension IS_NVSPACE      (@var{c})
+ at deffnx Extension IS_SPACE_OR_NUL (@var{c})
+ at deffnx Extension IS_ISOBASIC     (@var{c})
+These six macros are defined by @file{safe-ctype.h} and provide
+additional character classes which are useful when doing lexical
+analysis of C or similar languages.  They are true for the following
+sets of characters:
+
+ at multitable {@code{SPACE_OR_NUL}} {yada yada yada yada yada yada yada yada}
+ at item @code{IDNUM}        @tab @kbd{A-Za-z0-9_}
+ at item @code{IDST}         @tab @kbd{A-Za-z_}
+ at item @code{VSPACE}       @tab @kbd{\r \n}
+ at item @code{NVSPACE}      @tab @kbd{space tab \f \v \0}
+ at item @code{SPACE_OR_NUL} @tab @code{VSPACE || NVSPACE}
+ at item @code{ISOBASIC}     @tab @code{VSPACE || NVSPACE || PRINT}
+ at end multitable
+ at end deffn
+
+ at c lbasename.c:23
+ at deftypefn Replacement {const char*} lbasename (const char *@var{name})
+
+Given a pointer to a string containing a typical pathname
+(@samp{/usr/src/cmd/ls/ls.c} for example), returns a pointer to the
+last component of the pathname (@samp{ls.c} in this case).  The
+returned pointer is guaranteed to lie within the original
+string.  This latter fact is not true of many vendor C
+libraries, which return special strings or modify the passed
+strings for particular input.
+
+In particular, the empty string returns the same empty string,
+and a path ending in @code{/} returns the empty string after it.
+
+ at end deftypefn
+
+ at c lrealpath.c:25
+ at deftypefn Replacement {const char*} lrealpath (const char *@var{name})
+
+Given a pointer to a string containing a pathname, returns a canonical
+version of the filename.  Symlinks will be resolved, and ``.'' and ``..''
+components will be simplified.  The returned value will be allocated using
+ at code{malloc}, or @code{NULL} will be returned on a memory allocation error.
+
+ at end deftypefn
+
+ at c make-relative-prefix.c:24
+ at deftypefn Extension {const char*} make_relative_prefix (const char *@var{progname}, @
+  const char *@var{bin_prefix}, const char *@var{prefix})
+
+Given three paths @var{progname}, @var{bin_prefix}, @var{prefix},
+return the path that is in the same position relative to
+ at var{progname}'s directory as @var{prefix} is relative to
+ at var{bin_prefix}.  That is, a string starting with the directory
+portion of @var{progname}, followed by a relative pathname of the
+difference between @var{bin_prefix} and @var{prefix}.
+
+If @var{progname} does not contain any directory separators,
+ at code{make_relative_prefix} will search @env{PATH} to find a program
+named @var{progname}.  Also, if @var{progname} is a symbolic link,
+the symbolic link will be resolved.
+
+For example, if @var{bin_prefix} is @code{/alpha/beta/gamma/gcc/delta},
+ at var{prefix} is @code{/alpha/beta/gamma/omega/}, and @var{progname} is
+ at code{/red/green/blue/gcc}, then this function will return
+ at code{/red/green/blue/../../omega/}.
+
+The return value is normally allocated via @code{malloc}.  If no
+relative prefix can be found, return @code{NULL}.
+
+ at end deftypefn
+
+ at c make-temp-file.c:174
+ at deftypefn Replacement char* make_temp_file (const char *@var{suffix})
+
+Return a temporary file name (as a string) or @code{NULL} if unable to
+create one.  @var{suffix} is a suffix to append to the file name.  The
+string is @code{malloc}ed, and the temporary file has been created.
+
+ at end deftypefn
+
+ at c memchr.c:3
+ at deftypefn Supplemental void* memchr (const void *@var{s}, int @var{c}, @
+  size_t @var{n})
+
+This function searches memory starting at @code{*@var{s}} for the
+character @var{c}.  The search only ends with the first occurrence of
+ at var{c}, or after @var{length} characters; in particular, a null
+character does not terminate the search.  If the character @var{c} is
+found within @var{length} characters of @code{*@var{s}}, a pointer
+to the character is returned.  If @var{c} is not found, then @code{NULL} is
+returned.
+
+ at end deftypefn
+
+ at c memcmp.c:6
+ at deftypefn Supplemental int memcmp (const void *@var{x}, const void *@var{y}, @
+  size_t @var{count})
+
+Compares the first @var{count} bytes of two areas of memory.  Returns
+zero if they are the same, a value less than zero if @var{x} is
+lexically less than @var{y}, or a value greater than zero if @var{x}
+is lexically greater than @var{y}.  Note that lexical order is determined
+as if comparing unsigned char arrays.
+
+ at end deftypefn
+
+ at c memcpy.c:6
+ at deftypefn Supplemental void* memcpy (void *@var{out}, const void *@var{in}, @
+  size_t @var{length})
+
+Copies @var{length} bytes from memory region @var{in} to region
+ at var{out}.  Returns a pointer to @var{out}.
+
+ at end deftypefn
+
+ at c memmem.c:20
+ at deftypefn Supplemental void* memmem (const void *@var{haystack}, @
+  size_t @var{haystack_len} const void *@var{needle}, size_t @var{needle_len})
+
+Returns a pointer to the first occurrence of @var{needle} (length
+ at var{needle_len}) in @var{haystack} (length @var{haystack_len}).
+Returns @code{NULL} if not found.
+
+ at end deftypefn
+
+ at c memmove.c:6
+ at deftypefn Supplemental void* memmove (void *@var{from}, const void *@var{to}, @
+  size_t @var{count})
+
+Copies @var{count} bytes from memory area @var{from} to memory area
+ at var{to}, returning a pointer to @var{to}.
+
+ at end deftypefn
+
+ at c mempcpy.c:23
+ at deftypefn Supplemental void* mempcpy (void *@var{out}, const void *@var{in}, @
+  size_t @var{length})
+
+Copies @var{length} bytes from memory region @var{in} to region
+ at var{out}.  Returns a pointer to @var{out} + @var{length}.
+
+ at end deftypefn
+
+ at c memset.c:6
+ at deftypefn Supplemental void* memset (void *@var{s}, int @var{c}, @
+  size_t @var{count})
+
+Sets the first @var{count} bytes of @var{s} to the constant byte
+ at var{c}, returning a pointer to @var{s}.
+
+ at end deftypefn
+
+ at c mkstemps.c:58
+ at deftypefn Replacement int mkstemps (char *@var{pattern}, int @var{suffix_len})
+
+Generate a unique temporary file name from @var{pattern}.
+ at var{pattern} has the form:
+
+ at example
+   @var{path}/ccXXXXXX at var{suffix}
+ at end example
+
+ at var{suffix_len} tells us how long @var{suffix} is (it can be zero
+length).  The last six characters of @var{pattern} before @var{suffix}
+must be @samp{XXXXXX}; they are replaced with a string that makes the
+filename unique.  Returns a file descriptor open on the file for
+reading and writing.
+
+ at end deftypefn
+
+ at c pexecute.txh:278
+ at deftypefn Extension void pex_free (struct pex_obj @var{obj})
+
+Clean up and free all data associated with @var{obj}.  If you have not
+yet called @code{pex_get_times} or @code{pex_get_status}, this will
+try to kill the subprocesses.
+
+ at end deftypefn
+
+ at c pexecute.txh:251
+ at deftypefn Extension int pex_get_status (struct pex_obj *@var{obj}, @
+  int @var{count}, int *@var{vector})
+
+Returns the exit status of all programs run using @var{obj}.
+ at var{count} is the number of results expected.  The results will be
+placed into @var{vector}.  The results are in the order of the calls
+to @code{pex_run}.  Returns 0 on error, 1 on success.
+
+ at end deftypefn
+
+ at c pexecute.txh:261
+ at deftypefn Extension int pex_get_times (struct pex_obj *@var{obj}, @
+  int @var{count}, struct pex_time *@var{vector})
+
+Returns the process execution times of all programs run using
+ at var{obj}.  @var{count} is the number of results expected.  The
+results will be placed into @var{vector}.  The results are in the
+order of the calls to @code{pex_run}.  Returns 0 on error, 1 on
+success.
+
+ at code{struct pex_time} has the following fields of the type
+ at code{unsigned long}: @code{user_seconds},
+ at code{user_microseconds}, @code{system_seconds},
+ at code{system_microseconds}.  On systems which do not support reporting
+process times, all the fields will be set to @code{0}.
+
+ at end deftypefn
+
+ at c pexecute.txh:2
+ at deftypefn Extension {struct pex_obj *} pex_init (int @var{flags}, @
+  const char *@var{pname}, const char *@var{tempbase})
+
+Prepare to execute one or more programs, with standard output of each
+program fed to standard input of the next.  This is a system
+independent interface to execute a pipeline.
+
+ at var{flags} is a bitwise combination of the following:
+
+ at table @code
+
+ at vindex PEX_RECORD_TIMES
+ at item PEX_RECORD_TIMES
+Record subprocess times if possible.
+
+ at vindex PEX_USE_PIPES
+ at item PEX_USE_PIPES
+Use pipes for communication between processes, if possible.
+
+ at vindex PEX_SAVE_TEMPS
+ at item PEX_SAVE_TEMPS
+Don't delete temporary files used for communication between
+processes.
+
+ at end table
+
+ at var{pname} is the name of program to be executed, used in error
+messages.  @var{tempbase} is a base name to use for any required
+temporary files; it may be @code{NULL} to use a randomly chosen name.
+
+ at end deftypefn
+
+ at c pexecute.txh:161
+ at deftypefn Extension {FILE *} pex_input_file (struct pex_obj *@var{obj}, @
+  int @var{flags}, const char *@var{in_name})
+
+Return a stream for a temporary file to pass to the first program in
+the pipeline as input.
+
+The name of the input file is chosen according to the same rules
+ at code{pex_run} uses to choose output file names, based on
+ at var{in_name}, @var{obj} and the @code{PEX_SUFFIX} bit in @var{flags}.
+
+Don't call @code{fclose} on the returned stream; the first call to
+ at code{pex_run} closes it automatically.
+
+If @var{flags} includes @code{PEX_BINARY_OUTPUT}, open the stream in
+binary mode; otherwise, open it in the default mode.  Including
+ at code{PEX_BINARY_OUTPUT} in @var{flags} has no effect on Unix.
+ at end deftypefn
+
+ at c pexecute.txh:179
+ at deftypefn Extension {FILE *} pex_input_pipe (struct pex_obj *@var{obj}, @
+  int @var{binary})
+
+Return a stream @var{fp} for a pipe connected to the standard input of
+the first program in the pipeline; @var{fp} is opened for writing.
+You must have passed @code{PEX_USE_PIPES} to the @code{pex_init} call
+that returned @var{obj}.
+
+You must close @var{fp} using @code{fclose} yourself when you have
+finished writing data to the pipeline.
+
+The file descriptor underlying @var{fp} is marked not to be inherited
+by child processes.
+
+On systems that do not support pipes, this function returns
+ at code{NULL}, and sets @code{errno} to @code{EINVAL}.  If you would
+like to write code that is portable to all systems the @code{pex}
+functions support, consider using @code{pex_input_file} instead.
+
+There are two opportunities for deadlock using
+ at code{pex_input_pipe}:
+
+ at itemize @bullet
+ at item
+Most systems' pipes can buffer only a fixed amount of data; a process
+that writes to a full pipe blocks.  Thus, if you write to @file{fp}
+before starting the first process, you run the risk of blocking when
+there is no child process yet to read the data and allow you to
+continue.  @code{pex_input_pipe} makes no promises about the
+size of the pipe's buffer, so if you need to write any data at all
+before starting the first process in the pipeline, consider using
+ at code{pex_input_file} instead.
+
+ at item
+Using @code{pex_input_pipe} and @code{pex_read_output} together
+may also cause deadlock.  If the output pipe fills up, so that each
+program in the pipeline is waiting for the next to read more data, and
+you fill the input pipe by writing more data to @var{fp}, then there
+is no way to make progress: the only process that could read data from
+the output pipe is you, but you are blocked on the input pipe.
+
+ at end itemize
+
+ at end deftypefn
+
+ at c pexecute.txh:286
+ at deftypefn Extension {const char *} pex_one (int @var{flags}, @
+  const char *@var{executable}, char * const *@var{argv}, @
+  const char *@var{pname}, const char *@var{outname}, const char *@var{errname}, @
+  int *@var{status}, int *@var{err})
+
+An interface to permit the easy execution of a
+single program.  The return value and most of the parameters are as
+for a call to @code{pex_run}.  @var{flags} is restricted to a
+combination of @code{PEX_SEARCH}, @code{PEX_STDERR_TO_STDOUT}, and
+ at code{PEX_BINARY_OUTPUT}.  @var{outname} is interpreted as if
+ at code{PEX_LAST} were set.  On a successful return, @code{*@var{status}} will
+be set to the exit status of the program.
+
+ at end deftypefn
+
+ at c pexecute.txh:237
+ at deftypefn Extension {FILE *} pex_read_err (struct pex_obj *@var{obj}, @
+  int @var{binary})
+
+Returns a @code{FILE} pointer which may be used to read the standard
+error of the last program in the pipeline.  When this is used,
+ at code{PEX_LAST} should not be used in a call to @code{pex_run}.  After
+this is called, @code{pex_run} may no longer be called with the same
+ at var{obj}.  @var{binary} should be non-zero if the file should be
+opened in binary mode.  Don't call @code{fclose} on the returned file;
+it will be closed by @code{pex_free}.
+
+ at end deftypefn
+
+ at c pexecute.txh:224
+ at deftypefn Extension {FILE *} pex_read_output (struct pex_obj *@var{obj}, @
+  int @var{binary})
+
+Returns a @code{FILE} pointer which may be used to read the standard
+output of the last program in the pipeline.  When this is used,
+ at code{PEX_LAST} should not be used in a call to @code{pex_run}.  After
+this is called, @code{pex_run} may no longer be called with the same
+ at var{obj}.  @var{binary} should be non-zero if the file should be
+opened in binary mode.  Don't call @code{fclose} on the returned file;
+it will be closed by @code{pex_free}.
+
+ at end deftypefn
+
+ at c pexecute.txh:34
+ at deftypefn Extension {const char *} pex_run (struct pex_obj *@var{obj}, @
+  int @var{flags}, const char *@var{executable}, char * const *@var{argv}, @
+  const char *@var{outname}, const char *@var{errname}, int *@var{err})
+
+Execute one program in a pipeline.  On success this returns
+ at code{NULL}.  On failure it returns an error message, a statically
+allocated string.
+
+ at var{obj} is returned by a previous call to @code{pex_init}.
+
+ at var{flags} is a bitwise combination of the following:
+
+ at table @code
+
+ at vindex PEX_LAST
+ at item PEX_LAST
+This must be set on the last program in the pipeline.  In particular,
+it should be set when executing a single program.  The standard output
+of the program will be sent to @var{outname}, or, if @var{outname} is
+ at code{NULL}, to the standard output of the calling program.  Do @emph{not}
+set this bit if you want to call @code{pex_read_output}
+(described below).  After a call to @code{pex_run} with this bit set,
+ at var{pex_run} may no longer be called with the same @var{obj}.
+
+ at vindex PEX_SEARCH
+ at item PEX_SEARCH
+Search for the program using the user's executable search path.
+
+ at vindex PEX_SUFFIX
+ at item PEX_SUFFIX
+ at var{outname} is a suffix.  See the description of @var{outname},
+below.
+
+ at vindex PEX_STDERR_TO_STDOUT
+ at item PEX_STDERR_TO_STDOUT
+Send the program's standard error to standard output, if possible.
+
+ at vindex PEX_BINARY_INPUT
+ at vindex PEX_BINARY_OUTPUT
+ at vindex PEX_BINARY_ERROR
+ at item PEX_BINARY_INPUT
+ at itemx PEX_BINARY_OUTPUT
+ at itemx PEX_BINARY_ERROR
+The standard input (output or error) of the program should be read (written) in
+binary mode rather than text mode.  These flags are ignored on systems
+which do not distinguish binary mode and text mode, such as Unix.  For
+proper behavior these flags should match appropriately---a call to
+ at code{pex_run} using @code{PEX_BINARY_OUTPUT} should be followed by a
+call using @code{PEX_BINARY_INPUT}.
+
+ at vindex PEX_STDERR_TO_PIPE
+ at item PEX_STDERR_TO_PIPE
+Send the program's standard error to a pipe, if possible.  This flag
+cannot be specified together with @code{PEX_STDERR_TO_STDOUT}.  This
+flag can be specified only on the last program in pipeline.
+
+ at end table
+
+ at var{executable} is the program to execute.  @var{argv} is the set of
+arguments to pass to the program; normally @code{@var{argv}[0]} will
+be a copy of @var{executable}.
+
+ at var{outname} is used to set the name of the file to use for standard
+output.  There are two cases in which no output file will be used:
+
+ at enumerate
+ at item
+if @code{PEX_LAST} is not set in @var{flags}, and @code{PEX_USE_PIPES}
+was set in the call to @code{pex_init}, and the system supports pipes
+
+ at item
+if @code{PEX_LAST} is set in @var{flags}, and @var{outname} is
+ at code{NULL}
+ at end enumerate
+
+ at noindent
+Otherwise the code will use a file to hold standard
+output.  If @code{PEX_LAST} is not set, this file is considered to be
+a temporary file, and it will be removed when no longer needed, unless
+ at code{PEX_SAVE_TEMPS} was set in the call to @code{pex_init}.
+
+There are two cases to consider when setting the name of the file to
+hold standard output.
+
+ at enumerate
+ at item
+ at code{PEX_SUFFIX} is set in @var{flags}.  In this case
+ at var{outname} may not be @code{NULL}.  If the @var{tempbase} parameter
+to @code{pex_init} was not @code{NULL}, then the output file name is
+the concatenation of @var{tempbase} and @var{outname}.  If
+ at var{tempbase} was @code{NULL}, then the output file name is a random
+file name ending in @var{outname}.
+
+ at item
+ at code{PEX_SUFFIX} was not set in @var{flags}.  In this
+case, if @var{outname} is not @code{NULL}, it is used as the output
+file name.  If @var{outname} is @code{NULL}, and @var{tempbase} was
+not NULL, the output file name is randomly chosen using
+ at var{tempbase}.  Otherwise the output file name is chosen completely
+at random.
+ at end enumerate
+
+ at var{errname} is the file name to use for standard error output.  If
+it is @code{NULL}, standard error is the same as the caller's.
+Otherwise, standard error is written to the named file.
+
+On an error return, the code sets @code{*@var{err}} to an @code{errno}
+value, or to 0 if there is no relevant @code{errno}.
+
+ at end deftypefn
+
+ at c pexecute.txh:145
+ at deftypefn Extension {const char *} pex_run_in_environment (struct pex_obj *@var{obj}, @
+  int @var{flags}, const char *@var{executable}, char * const *@var{argv}, @
+  char * const *@var{env}, int @var{env_size}, const char *@var{outname}, @
+  const char *@var{errname}, int *@var{err})
+
+Execute one program in a pipeline, permitting the environment for the
+program to be specified.  Behaviour and parameters not listed below are
+as for @code{pex_run}.
+
+ at var{env} is the environment for the child process, specified as an array of
+character pointers.  Each element of the array should point to a string of the
+form @code{VAR=VALUE}, with the exception of the last element that must be
+ at code{NULL}.
+
+ at end deftypefn
+
+ at c pexecute.txh:301
+ at deftypefn Extension int pexecute (const char *@var{program}, @
+  char * const *@var{argv}, const char *@var{this_pname}, @
+  const char *@var{temp_base}, char **@var{errmsg_fmt}, @
+  char **@var{errmsg_arg}, int @var{flags})
+
+This is the old interface to execute one or more programs.  It is
+still supported for compatibility purposes, but is no longer
+documented.
+
+ at end deftypefn
+
+ at c strsignal.c:541
+ at deftypefn Supplemental void psignal (int @var{signo}, char *@var{message})
+
+Print @var{message} to the standard error, followed by a colon,
+followed by the description of the signal specified by @var{signo},
+followed by a newline.
+
+ at end deftypefn
+
+ at c putenv.c:21
+ at deftypefn Supplemental int putenv (const char *@var{string})
+
+Uses @code{setenv} or @code{unsetenv} to put @var{string} into
+the environment or remove it.  If @var{string} is of the form
+ at samp{name=value} the string is added; if no @samp{=} is present the
+name is unset/removed.
+
+ at end deftypefn
+
+ at c pexecute.txh:312
+ at deftypefn Extension int pwait (int @var{pid}, int *@var{status}, int @var{flags})
+
+Another part of the old execution interface.
+
+ at end deftypefn
+
+ at c random.c:39
+ at deftypefn Supplement {long int} random (void)
+ at deftypefnx Supplement void srandom (unsigned int @var{seed})
+ at deftypefnx Supplement void* initstate (unsigned int @var{seed}, @
+  void *@var{arg_state}, unsigned long @var{n})
+ at deftypefnx Supplement void* setstate (void *@var{arg_state})
+
+Random number functions.  @code{random} returns a random number in the
+range 0 to @code{LONG_MAX}.  @code{srandom} initializes the random
+number generator to some starting point determined by @var{seed}
+(else, the values returned by @code{random} are always the same for each
+run of the program).  @code{initstate} and @code{setstate} allow fine-grained
+control over the state of the random number generator.
+
+ at end deftypefn
+
+ at c concat.c:174
+ at deftypefn Extension char* reconcat (char *@var{optr}, const char *@var{s1}, @
+  @dots{}, @code{NULL})
+
+Same as @code{concat}, except that if @var{optr} is not @code{NULL} it
+is freed after the string is created.  This is intended to be useful
+when you're extending an existing string or building up a string in a
+loop:
+
+ at example
+  str = reconcat (str, "pre-", str, NULL);
+ at end example
+
+ at end deftypefn
+
+ at c rename.c:6
+ at deftypefn Supplemental int rename (const char *@var{old}, const char *@var{new})
+
+Renames a file from @var{old} to @var{new}.  If @var{new} already
+exists, it is removed.
+
+ at end deftypefn
+
+ at c rindex.c:5
+ at deftypefn Supplemental char* rindex (const char *@var{s}, int @var{c})
+
+Returns a pointer to the last occurrence of the character @var{c} in
+the string @var{s}, or @code{NULL} if not found.  The use of @code{rindex} is
+deprecated in new programs in favor of @code{strrchr}.
+
+ at end deftypefn
+
+ at c setenv.c:23
+ at deftypefn Supplemental int setenv (const char *@var{name}, @
+  const char *@var{value}, int @var{overwrite})
+ at deftypefnx Supplemental void unsetenv (const char *@var{name})
+
+ at code{setenv} adds @var{name} to the environment with value
+ at var{value}.  If the name was already present in the environment,
+the new value will be stored only if @var{overwrite} is nonzero.
+The companion @code{unsetenv} function removes @var{name} from the
+environment.  This implementation is not safe for multithreaded code.
+
+ at end deftypefn
+
+ at c setproctitle.c:31
+ at deftypefn Supplemental void setproctitle (const char *@var{fmt}, ...)
+
+Set the title of a process to @var{fmt}. va args not supported for now,
+but defined for compatibility with BSD. 
+
+ at end deftypefn
+
+ at c strsignal.c:348
+ at deftypefn Extension int signo_max (void)
+
+Returns the maximum signal value for which a corresponding symbolic
+name or message is available.  Note that in the case where we use the
+ at code{sys_siglist} supplied by the system, it is possible for there to
+be more symbolic names than messages, or vice versa.  In fact, the
+manual page for @code{psignal(3b)} explicitly warns that one should
+check the size of the table (@code{NSIG}) before indexing it, since
+new signal codes may be added to the system before they are added to
+the table.  Thus @code{NSIG} might be smaller than value implied by
+the largest signo value defined in @code{<signal.h>}.
+
+We return the maximum value that can be used to obtain a meaningful
+symbolic name or message.
+
+ at end deftypefn
+
+ at c sigsetmask.c:8
+ at deftypefn Supplemental int sigsetmask (int @var{set})
+
+Sets the signal mask to the one provided in @var{set} and returns
+the old mask (which, for libiberty's implementation, will always
+be the value @code{1}).
+
+ at end deftypefn
+
+ at c simple-object.txh:96
+ at deftypefn Extension {const char *} simple_object_attributes_compare @
+  (simple_object_attributes *@var{attrs1}, simple_object_attributes *@var{attrs2}, @
+   int *@var{err})
+
+Compare @var{attrs1} and @var{attrs2}.  If they could be linked
+together without error, return @code{NULL}.  Otherwise, return an
+error message and set @code{*@var{err}} to an errno value or @code{0}
+if there is no relevant errno.
+
+ at end deftypefn
+
+ at c simple-object.txh:81
+ at deftypefn Extension {simple_object_attributes *} simple_object_fetch_attributes @
+  (simple_object_read *@var{simple_object}, const char **@var{errmsg}, int *@var{err})
+
+Fetch the attributes of @var{simple_object}.  The attributes are
+internal information such as the format of the object file, or the
+architecture it was compiled for.  This information will persist until
+ at code{simple_object_attributes_release} is called, even if
+ at var{simple_object} itself is released.
+
+On error this returns @code{NULL}, sets @code{*@var{errmsg}} to an
+error message, and sets @code{*@var{err}} to an errno value or
+ at code{0} if there is no relevant errno.
+
+ at end deftypefn
+
+ at c simple-object.txh:49
+ at deftypefn Extension {int} simple_object_find_section @
+  (simple_object_read *@var{simple_object} off_t *@var{offset}, @
+  off_t *@var{length}, const char **@var{errmsg}, int *@var{err})
+
+Look for the section @var{name} in @var{simple_object}.  This returns
+information for the first section with that name.
+
+If found, return 1 and set @code{*@var{offset}} to the offset in the
+file of the section contents and set @code{*@var{length}} to the
+length of the section contents.  The value in @code{*@var{offset}}
+will be relative to the offset passed to
+ at code{simple_object_open_read}.
+
+If the section is not found, and no error occurs,
+ at code{simple_object_find_section} returns @code{0} and set
+ at code{*@var{errmsg}} to @code{NULL}.
+
+If an error occurs, @code{simple_object_find_section} returns
+ at code{0}, sets @code{*@var{errmsg}} to an error message, and sets
+ at code{*@var{err}} to an errno value or @code{0} if there is no
+relevant errno.
+
+ at end deftypefn
+
+ at c simple-object.txh:27
+ at deftypefn Extension {const char *} simple_object_find_sections @
+  (simple_object_read *@var{simple_object}, int (*@var{pfn}) (void *@var{data}, @
+  const char *@var{name}, off_t @var{offset}, off_t @var{length}), @
+  void *@var{data}, int *@var{err})
+
+This function calls @var{pfn} for each section in @var{simple_object}.
+It calls @var{pfn} with the section name, the offset within the file
+of the section contents, and the length of the section contents.  The
+offset within the file is relative to the offset passed to
+ at code{simple_object_open_read}.  The @var{data} argument to this
+function is passed along to @var{pfn}.
+
+If @var{pfn} returns @code{0}, the loop over the sections stops and
+ at code{simple_object_find_sections} returns.  If @var{pfn} returns some
+other value, the loop continues.
+
+On success @code{simple_object_find_sections} returns.  On error it
+returns an error string, and sets @code{*@var{err}} to an errno value
+or @code{0} if there is no relevant errno.
+
+ at end deftypefn
+
+ at c simple-object.txh:2
+ at deftypefn Extension {simple_object_read *} simple_object_open_read @
+  (int @var{descriptor}, off_t @var{offset}, const char *{segment_name}, @
+  const char **@var{errmsg}, int *@var{err})
+
+Opens an object file for reading.  Creates and returns an
+ at code{simple_object_read} pointer which may be passed to other
+functions to extract data from the object file.
+
+ at var{descriptor} holds a file descriptor which permits reading.
+
+ at var{offset} is the offset into the file; this will be @code{0} in the
+normal case, but may be a different value when reading an object file
+in an archive file.
+
+ at var{segment_name} is only used with the Mach-O file format used on
+Darwin aka Mac OS X.  It is required on that platform, and means to
+only look at sections within the segment with that name.  The
+parameter is ignored on other systems.
+
+If an error occurs, this functions returns @code{NULL} and sets
+ at code{*@var{errmsg}} to an error string and sets @code{*@var{err}} to
+an errno value or @code{0} if there is no relevant errno.
+
+ at end deftypefn
+
+ at c simple-object.txh:107
+ at deftypefn Extension {void} simple_object_release_attributes @
+  (simple_object_attributes *@var{attrs})
+
+Release all resources associated with @var{attrs}.
+
+ at end deftypefn
+
+ at c simple-object.txh:73
+ at deftypefn Extension {void} simple_object_release_read @
+  (simple_object_read *@var{simple_object})
+
+Release all resources associated with @var{simple_object}.  This does
+not close the file descriptor.
+
+ at end deftypefn
+
+ at c simple-object.txh:184
+ at deftypefn Extension {void} simple_object_release_write @
+  (simple_object_write *@var{simple_object})
+
+Release all resources associated with @var{simple_object}.
+
+ at end deftypefn
+
+ at c simple-object.txh:114
+ at deftypefn Extension {simple_object_write *} simple_object_start_write @
+  (simple_object_attributes @var{attrs}, const char *@var{segment_name}, @
+  const char **@var{errmsg}, int *@var{err})
+
+Start creating a new object file using the object file format
+described in @var{attrs}.  You must fetch attribute information from
+an existing object file before you can create a new one.  There is
+currently no support for creating an object file de novo.
+
+ at var{segment_name} is only used with Mach-O as found on Darwin aka Mac
+OS X.  The parameter is required on that target.  It means that all
+sections are created within the named segment.  It is ignored for
+other object file formats.
+
+On error @code{simple_object_start_write} returns @code{NULL}, sets
+ at code{*@var{ERRMSG}} to an error message, and sets @code{*@var{err}}
+to an errno value or @code{0} if there is no relevant errno.
+
+ at end deftypefn
+
+ at c simple-object.txh:153
+ at deftypefn Extension {const char *} simple_object_write_add_data @
+  (simple_object_write *@var{simple_object}, @
+  simple_object_write_section *@var{section}, const void *@var{buffer}, @
+  size_t @var{size}, int @var{copy}, int *@var{err})
+
+Add data @var{buffer}/@var{size} to @var{section} in
+ at var{simple_object}.  If @var{copy} is non-zero, the data will be
+copied into memory if necessary.  If @var{copy} is zero, @var{buffer}
+must persist until @code{simple_object_write_to_file} is called.  is
+released.
+
+On success this returns @code{NULL}.  On error this returns an error
+message, and sets @code{*@var{err}} to an errno value or 0 if there is
+no relevant erro.
+
+ at end deftypefn
+
+ at c simple-object.txh:134
+ at deftypefn Extension {simple_object_write_section *} simple_object_write_create_section @
+  (simple_object_write *@var{simple_object}, const char *@var{name}, @
+  unsigned int @var{align}, const char **@var{errmsg}, int *@var{err})
+
+Add a section to @var{simple_object}.  @var{name} is the name of the
+new section.  @var{align} is the required alignment expressed as the
+number of required low-order 0 bits (e.g., 2 for alignment to a 32-bit
+boundary).
+
+The section is created as containing data, readable, not writable, not
+executable, not loaded at runtime.  The section is not written to the
+file until @code{simple_object_write_to_file} is called.
+
+On error this returns @code{NULL}, sets @code{*@var{errmsg}} to an
+error message, and sets @code{*@var{err}} to an errno value or
+ at code{0} if there is no relevant errno.
+
+ at end deftypefn
+
+ at c simple-object.txh:170
+ at deftypefn Extension {const char *} simple_object_write_to_file @
+  (simple_object_write *@var{simple_object}, int @var{descriptor}, int *@var{err})
+
+Write the complete object file to @var{descriptor}, an open file
+descriptor.  This writes out all the data accumulated by calls to
+ at code{simple_object_write_create_section} and
+ at var{simple_object_write_add_data}.
+
+This returns @code{NULL} on success.  On error this returns an error
+message and sets @code{*@var{err}} to an errno value or @code{0} if
+there is no relevant errno.
+
+ at end deftypefn
+
+ at c snprintf.c:28
+ at deftypefn Supplemental int snprintf (char *@var{buf}, size_t @var{n}, @
+  const char *@var{format}, ...)
+
+This function is similar to @code{sprintf}, but it will write to
+ at var{buf} at most @code{@var{n}-1} bytes of text, followed by a
+terminating null byte, for a total of @var{n} bytes.
+On error the return value is -1, otherwise it returns the number of
+bytes, not including the terminating null byte, that would have been
+written had @var{n} been sufficiently large, regardless of the actual
+value of @var{n}.  Note some pre-C99 system libraries do not implement
+this correctly so users cannot generally rely on the return value if
+the system version of this function is used.
+
+ at end deftypefn
+
+ at c spaces.c:22
+ at deftypefn Extension char* spaces (int @var{count})
+
+Returns a pointer to a memory region filled with the specified
+number of spaces and null terminated.  The returned pointer is
+valid until at least the next call.
+
+ at end deftypefn
+
+ at c splay-tree.c:303
+ at deftypefn Supplemental splay_tree splay_tree_new_with_typed_alloc @
+(splay_tree_compare_fn @var{compare_fn}, @
+splay_tree_delete_key_fn @var{delete_key_fn}, @
+splay_tree_delete_value_fn @var{delete_value_fn}, @
+splay_tree_allocate_fn @var{tree_allocate_fn}, @
+splay_tree_allocate_fn @var{node_allocate_fn}, @
+splay_tree_deallocate_fn @var{deallocate_fn}, @
+void * @var{allocate_data})
+
+This function creates a splay tree that uses two different allocators
+ at var{tree_allocate_fn} and @var{node_allocate_fn} to use for allocating the
+tree itself and its nodes respectively.  This is useful when variables of
+different types need to be allocated with different allocators.
+
+The splay tree will use @var{compare_fn} to compare nodes,
+ at var{delete_key_fn} to deallocate keys, and @var{delete_value_fn} to
+deallocate values.
+
+ at end deftypefn
+
+ at c stpcpy.c:23
+ at deftypefn Supplemental char* stpcpy (char *@var{dst}, const char *@var{src})
+
+Copies the string @var{src} into @var{dst}.  Returns a pointer to
+ at var{dst} + strlen(@var{src}).
+
+ at end deftypefn
+
+ at c stpncpy.c:23
+ at deftypefn Supplemental char* stpncpy (char *@var{dst}, const char *@var{src}, @
+  size_t @var{len})
+
+Copies the string @var{src} into @var{dst}, copying exactly @var{len}
+and padding with zeros if necessary.  If @var{len} < strlen(@var{src})
+then return @var{dst} + @var{len}, otherwise returns @var{dst} +
+strlen(@var{src}).
+
+ at end deftypefn
+
+ at c strcasecmp.c:15
+ at deftypefn Supplemental int strcasecmp (const char *@var{s1}, const char *@var{s2})
+
+A case-insensitive @code{strcmp}.
+
+ at end deftypefn
+
+ at c strchr.c:6
+ at deftypefn Supplemental char* strchr (const char *@var{s}, int @var{c})
+
+Returns a pointer to the first occurrence of the character @var{c} in
+the string @var{s}, or @code{NULL} if not found.  If @var{c} is itself the
+null character, the results are undefined.
+
+ at end deftypefn
+
+ at c strdup.c:3
+ at deftypefn Supplemental char* strdup (const char *@var{s})
+
+Returns a pointer to a copy of @var{s} in memory obtained from
+ at code{malloc}, or @code{NULL} if insufficient memory was available.
+
+ at end deftypefn
+
+ at c strerror.c:670
+ at deftypefn Replacement {const char*} strerrno (int @var{errnum})
+
+Given an error number returned from a system call (typically returned
+in @code{errno}), returns a pointer to a string containing the
+symbolic name of that error number, as found in @code{<errno.h>}.
+
+If the supplied error number is within the valid range of indices for
+symbolic names, but no name is available for the particular error
+number, then returns the string @samp{Error @var{num}}, where @var{num}
+is the error number.
+
+If the supplied error number is not within the range of valid
+indices, then returns @code{NULL}.
+
+The contents of the location pointed to are only guaranteed to be
+valid until the next call to @code{strerrno}.
+
+ at end deftypefn
+
+ at c strerror.c:603
+ at deftypefn Supplemental char* strerror (int @var{errnoval})
+
+Maps an @code{errno} number to an error message string, the contents
+of which are implementation defined.  On systems which have the
+external variables @code{sys_nerr} and @code{sys_errlist}, these
+strings will be the same as the ones used by @code{perror}.
+
+If the supplied error number is within the valid range of indices for
+the @code{sys_errlist}, but no message is available for the particular
+error number, then returns the string @samp{Error @var{num}}, where
+ at var{num} is the error number.
+
+If the supplied error number is not a valid index into
+ at code{sys_errlist}, returns @code{NULL}.
+
+The returned string is only guaranteed to be valid only until the
+next call to @code{strerror}.
+
+ at end deftypefn
+
+ at c strncasecmp.c:15
+ at deftypefn Supplemental int strncasecmp (const char *@var{s1}, const char *@var{s2})
+
+A case-insensitive @code{strncmp}.
+
+ at end deftypefn
+
+ at c strncmp.c:6
+ at deftypefn Supplemental int strncmp (const char *@var{s1}, @
+  const char *@var{s2}, size_t @var{n})
+
+Compares the first @var{n} bytes of two strings, returning a value as
+ at code{strcmp}.
+
+ at end deftypefn
+
+ at c strndup.c:23
+ at deftypefn Extension char* strndup (const char *@var{s}, size_t @var{n})
+
+Returns a pointer to a copy of @var{s} with at most @var{n} characters
+in memory obtained from @code{malloc}, or @code{NULL} if insufficient
+memory was available.  The result is always NUL terminated.
+
+ at end deftypefn
+
+ at c strrchr.c:6
+ at deftypefn Supplemental char* strrchr (const char *@var{s}, int @var{c})
+
+Returns a pointer to the last occurrence of the character @var{c} in
+the string @var{s}, or @code{NULL} if not found.  If @var{c} is itself the
+null character, the results are undefined.
+
+ at end deftypefn
+
+ at c strsignal.c:383
+ at deftypefn Supplemental {const char *} strsignal (int @var{signo})
+
+Maps an signal number to an signal message string, the contents of
+which are implementation defined.  On systems which have the external
+variable @code{sys_siglist}, these strings will be the same as the
+ones used by @code{psignal()}.
+
+If the supplied signal number is within the valid range of indices for
+the @code{sys_siglist}, but no message is available for the particular
+signal number, then returns the string @samp{Signal @var{num}}, where
+ at var{num} is the signal number.
+
+If the supplied signal number is not a valid index into
+ at code{sys_siglist}, returns @code{NULL}.
+
+The returned string is only guaranteed to be valid only until the next
+call to @code{strsignal}.
+
+ at end deftypefn
+
+ at c strsignal.c:448
+ at deftypefn Extension {const char*} strsigno (int @var{signo})
+
+Given an signal number, returns a pointer to a string containing the
+symbolic name of that signal number, as found in @code{<signal.h>}.
+
+If the supplied signal number is within the valid range of indices for
+symbolic names, but no name is available for the particular signal
+number, then returns the string @samp{Signal @var{num}}, where
+ at var{num} is the signal number.
+
+If the supplied signal number is not within the range of valid
+indices, then returns @code{NULL}.
+
+The contents of the location pointed to are only guaranteed to be
+valid until the next call to @code{strsigno}.
+
+ at end deftypefn
+
+ at c strstr.c:6
+ at deftypefn Supplemental char* strstr (const char *@var{string}, const char *@var{sub})
+
+This function searches for the substring @var{sub} in the string
+ at var{string}, not including the terminating null characters.  A pointer
+to the first occurrence of @var{sub} is returned, or @code{NULL} if the
+substring is absent.  If @var{sub} points to a string with zero
+length, the function returns @var{string}.
+
+ at end deftypefn
+
+ at c strtod.c:27
+ at deftypefn Supplemental double strtod (const char *@var{string}, @
+  char **@var{endptr})
+
+This ISO C function converts the initial portion of @var{string} to a
+ at code{double}.  If @var{endptr} is not @code{NULL}, a pointer to the
+character after the last character used in the conversion is stored in
+the location referenced by @var{endptr}.  If no conversion is
+performed, zero is returned and the value of @var{string} is stored in
+the location referenced by @var{endptr}.
+
+ at end deftypefn
+
+ at c strerror.c:729
+ at deftypefn Extension int strtoerrno (const char *@var{name})
+
+Given the symbolic name of a error number (e.g., @code{EACCES}), map it
+to an errno value.  If no translation is found, returns 0.
+
+ at end deftypefn
+
+ at c strtol.c:33
+ at deftypefn Supplemental {long int} strtol (const char *@var{string}, @
+  char **@var{endptr}, int @var{base})
+ at deftypefnx Supplemental {unsigned long int} strtoul (const char *@var{string}, @
+  char **@var{endptr}, int @var{base})
+
+The @code{strtol} function converts the string in @var{string} to a
+long integer value according to the given @var{base}, which must be
+between 2 and 36 inclusive, or be the special value 0.  If @var{base}
+is 0, @code{strtol} will look for the prefixes @code{0} and @code{0x}
+to indicate bases 8 and 16, respectively, else default to base 10.
+When the base is 16 (either explicitly or implicitly), a prefix of
+ at code{0x} is allowed.  The handling of @var{endptr} is as that of
+ at code{strtod} above.  The @code{strtoul} function is the same, except
+that the converted value is unsigned.
+
+ at end deftypefn
+
+ at c strsignal.c:502
+ at deftypefn Extension int strtosigno (const char *@var{name})
+
+Given the symbolic name of a signal, map it to a signal number.  If no
+translation is found, returns 0.
+
+ at end deftypefn
+
+ at c strverscmp.c:25
+ at deftypefun int strverscmp (const char *@var{s1}, const char *@var{s2})
+The @code{strverscmp} function compares the string @var{s1} against
+ at var{s2}, considering them as holding indices/version numbers.  Return
+value follows the same conventions as found in the @code{strverscmp}
+function.  In fact, if @var{s1} and @var{s2} contain no digits,
+ at code{strverscmp} behaves like @code{strcmp}.
+
+Basically, we compare strings normally (character by character), until
+we find a digit in each string - then we enter a special comparison
+mode, where each sequence of digits is taken as a whole.  If we reach the
+end of these two parts without noticing a difference, we return to the
+standard comparison mode.  There are two types of numeric parts:
+"integral" and "fractional" (those  begin with a '0'). The types
+of the numeric parts affect the way we sort them:
+
+ at itemize @bullet
+ at item
+integral/integral: we compare values as you would expect.
+
+ at item
+fractional/integral: the fractional part is less than the integral one.
+Again, no surprise.
+
+ at item
+fractional/fractional: the things become a bit more complex.
+If the common prefix contains only leading zeroes, the longest part is less
+than the other one; else the comparison behaves normally.
+ at end itemize
+
+ at smallexample
+strverscmp ("no digit", "no digit")
+    @result{} 0    // @r{same behavior as strcmp.}
+strverscmp ("item#99", "item#100")
+    @result{} <0   // @r{same prefix, but 99 < 100.}
+strverscmp ("alpha1", "alpha001")
+    @result{} >0   // @r{fractional part inferior to integral one.}
+strverscmp ("part1_f012", "part1_f01")
+    @result{} >0   // @r{two fractional parts.}
+strverscmp ("foo.009", "foo.0")
+    @result{} <0   // @r{idem, but with leading zeroes only.}
+ at end smallexample
+
+This function is especially useful when dealing with filename sorting,
+because filenames frequently hold indices/version numbers.
+ at end deftypefun
+
+ at c tmpnam.c:3
+ at deftypefn Supplemental char* tmpnam (char *@var{s})
+
+This function attempts to create a name for a temporary file, which
+will be a valid file name yet not exist when @code{tmpnam} checks for
+it.  @var{s} must point to a buffer of at least @code{L_tmpnam} bytes,
+or be @code{NULL}.  Use of this function creates a security risk, and it must
+not be used in new projects.  Use @code{mkstemp} instead.
+
+ at end deftypefn
+
+ at c unlink-if-ordinary.c:27
+ at deftypefn Supplemental int unlink_if_ordinary (const char*)
+
+Unlinks the named file, unless it is special (e.g. a device file).
+Returns 0 when the file was unlinked, a negative value (and errno set) when
+there was an error deleting the file, and a positive value if no attempt
+was made to unlink the file because it is special.
+
+ at end deftypefn
+
+ at c fopen_unlocked.c:31
+ at deftypefn Extension void unlock_std_streams (void)
+
+If the OS supports it, ensure that the standard I/O streams,
+ at code{stdin}, @code{stdout} and @code{stderr} are setup to avoid any
+multi-threaded locking.  Otherwise do nothing.
+
+ at end deftypefn
+
+ at c fopen_unlocked.c:23
+ at deftypefn Extension void unlock_stream (FILE * @var{stream})
+
+If the OS supports it, ensure that the supplied stream is setup to
+avoid any multi-threaded locking.  Otherwise leave the @code{FILE}
+pointer unchanged.  If the @var{stream} is @code{NULL} do nothing.
+
+ at end deftypefn
+
+ at c vasprintf.c:47
+ at deftypefn Extension int vasprintf (char **@var{resptr}, @
+  const char *@var{format}, va_list @var{args})
+
+Like @code{vsprintf}, but instead of passing a pointer to a buffer,
+you pass a pointer to a pointer.  This function will compute the size
+of the buffer needed, allocate memory with @code{malloc}, and store a
+pointer to the allocated memory in @code{*@var{resptr}}.  The value
+returned is the same as @code{vsprintf} would return.  If memory could
+not be allocated, minus one is returned and @code{NULL} is stored in
+ at code{*@var{resptr}}.
+
+ at end deftypefn
+
+ at c vfork.c:6
+ at deftypefn Supplemental int vfork (void)
+
+Emulates @code{vfork} by calling @code{fork} and returning its value.
+
+ at end deftypefn
+
+ at c vprintf.c:3
+ at deftypefn Supplemental int vprintf (const char *@var{format}, va_list @var{ap})
+ at deftypefnx Supplemental int vfprintf (FILE *@var{stream}, @
+  const char *@var{format}, va_list @var{ap})
+ at deftypefnx Supplemental int vsprintf (char *@var{str}, @
+  const char *@var{format}, va_list @var{ap})
+
+These functions are the same as @code{printf}, @code{fprintf}, and
+ at code{sprintf}, respectively, except that they are called with a
+ at code{va_list} instead of a variable number of arguments.  Note that
+they do not call @code{va_end}; this is the application's
+responsibility.  In @libib{} they are implemented in terms of the
+nonstandard but common function @code{_doprnt}.
+
+ at end deftypefn
+
+ at c vsnprintf.c:28
+ at deftypefn Supplemental int vsnprintf (char *@var{buf}, size_t @var{n}, @
+  const char *@var{format}, va_list @var{ap})
+
+This function is similar to @code{vsprintf}, but it will write to
+ at var{buf} at most @code{@var{n}-1} bytes of text, followed by a
+terminating null byte, for a total of @var{n} bytes.  On error the
+return value is -1, otherwise it returns the number of characters that
+would have been printed had @var{n} been sufficiently large,
+regardless of the actual value of @var{n}.  Note some pre-C99 system
+libraries do not implement this correctly so users cannot generally
+rely on the return value if the system version of this function is
+used.
+
+ at end deftypefn
+
+ at c waitpid.c:3
+ at deftypefn Supplemental int waitpid (int @var{pid}, int *@var{status}, int)
+
+This is a wrapper around the @code{wait} function.  Any ``special''
+values of @var{pid} depend on your implementation of @code{wait}, as
+does the return value.  The third argument is unused in @libib{}.
+
+ at end deftypefn
+
+ at c argv.c:306
+ at deftypefn Extension int writeargv (const char **@var{argv}, FILE *@var{file})
+
+Write each member of ARGV, handling all necessary quoting, to the file
+named by FILE, separated by whitespace.  Return 0 on success, non-zero
+if an error occurred while writing to FILE.
+
+ at end deftypefn
+
+ at c xatexit.c:11
+ at deftypefun int xatexit (void (*@var{fn}) (void))
+
+Behaves as the standard @code{atexit} function, but with no limit on
+the number of registered functions.  Returns 0 on success, or @minus{}1 on
+failure.  If you use @code{xatexit} to register functions, you must use
+ at code{xexit} to terminate your program.
+
+ at end deftypefun
+
+ at c xmalloc.c:38
+ at deftypefn Replacement void* xcalloc (size_t @var{nelem}, size_t @var{elsize})
+
+Allocate memory without fail, and set it to zero.  This routine functions
+like @code{calloc}, but will behave the same as @code{xmalloc} if memory
+cannot be found.
+
+ at end deftypefn
+
+ at c xexit.c:22
+ at deftypefn Replacement void xexit (int @var{code})
+
+Terminates the program.  If any functions have been registered with
+the @code{xatexit} replacement function, they will be called first.
+Termination is handled via the system's normal @code{exit} call.
+
+ at end deftypefn
+
+ at c xmalloc.c:22
+ at deftypefn Replacement void* xmalloc (size_t)
+
+Allocate memory without fail.  If @code{malloc} fails, this will print
+a message to @code{stderr} (using the name set by
+ at code{xmalloc_set_program_name},
+if any) and then call @code{xexit}.  Note that it is therefore safe for
+a program to contain @code{#define malloc xmalloc} in its source.
+
+ at end deftypefn
+
+ at c xmalloc.c:53
+ at deftypefn Replacement void xmalloc_failed (size_t)
+
+This function is not meant to be called by client code, and is listed
+here for completeness only.  If any of the allocation routines fail, this
+function will be called to print an error message and terminate execution.
+
+ at end deftypefn
+
+ at c xmalloc.c:46
+ at deftypefn Replacement void xmalloc_set_program_name (const char *@var{name})
+
+You can use this to set the name of the program used by
+ at code{xmalloc_failed} when printing a failure message.
+
+ at end deftypefn
+
+ at c xmemdup.c:7
+ at deftypefn Replacement void* xmemdup (void *@var{input}, @
+  size_t @var{copy_size}, size_t @var{alloc_size})
+
+Duplicates a region of memory without fail.  First, @var{alloc_size} bytes
+are allocated, then @var{copy_size} bytes from @var{input} are copied into
+it, and the new memory is returned.  If fewer bytes are copied than were
+allocated, the remaining memory is zeroed.
+
+ at end deftypefn
+
+ at c xmalloc.c:32
+ at deftypefn Replacement void* xrealloc (void *@var{ptr}, size_t @var{size})
+Reallocate memory without fail.  This routine functions like @code{realloc},
+but will behave the same as @code{xmalloc} if memory cannot be found.
+
+ at end deftypefn
+
+ at c xstrdup.c:7
+ at deftypefn Replacement char* xstrdup (const char *@var{s})
+
+Duplicates a character string without fail, using @code{xmalloc} to
+obtain memory.
+
+ at end deftypefn
+
+ at c xstrerror.c:7
+ at deftypefn Replacement char* xstrerror (int @var{errnum})
+
+Behaves exactly like the standard @code{strerror} function, but
+will never return a @code{NULL} pointer.
+
+ at end deftypefn
+
+ at c xstrndup.c:23
+ at deftypefn Replacement char* xstrndup (const char *@var{s}, size_t @var{n})
+
+Returns a pointer to a copy of @var{s} with at most @var{n} characters
+without fail, using @code{xmalloc} to obtain memory.  The result is
+always NUL terminated.
+
+ at end deftypefn
+
 
diff --git a/libiberty/libiberty.texi b/libiberty/libiberty.texi
index 8b13789..74f70d2 100644
--- a/libiberty/libiberty.texi
+++ b/libiberty/libiberty.texi
@@ -1 +1,318 @@
+\input texinfo  @c -*-texinfo-*-
+ at c %**start of header
+ at setfilename libiberty.info
+ at settitle @sc{gnu} libiberty
+ at c %**end of header
+
+ at syncodeindex fn cp
+ at syncodeindex vr cp
+ at syncodeindex pg cp
+
+ at finalout
+ at c %**end of header
+
+ at dircategory GNU libraries
+ at direntry
+* Libiberty: (libiberty).          Library of utility functions which
+                                   are missing or broken on some systems.
+ at end direntry
+
+ at macro libib
+ at code{libiberty}
+ at end macro
+
+ at ifinfo
+This manual describes the GNU @libib library of utility subroutines.
+
+Copyright @copyright{} 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+2009, 2010 Free Software Foundation, Inc.
+
+      Permission is granted to copy, distribute and/or modify this document
+      under the terms of the GNU Free Documentation License, Version 1.3
+      or any later version published by the Free Software Foundation;
+      with no Invariant Sections, with no Front-Cover Texts, and with no
+      Back-Cover Texts.  A copy of the license is included in the
+      section entitled ``GNU Free Documentation License''.
+
+ at ignore
+Permission is granted to process this file through TeX and print the
+results, provided the printed document carries a copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+
+ at end ignore
+ at end ifinfo
+
+
+ at titlepage
+ at title @sc{gnu} libiberty
+ at author Phil Edwards et al.
+ at page
+
+
+ at vskip 0pt plus 1filll
+Copyright @copyright{} 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+2009, 2010 Free Software Foundation, Inc.
+
+      Permission is granted to copy, distribute and/or modify this document
+      under the terms of the GNU Free Documentation License, Version 1.3
+      or any later version published by the Free Software Foundation;
+      with no Invariant Sections, with no Front-Cover Texts, and with no
+      Back-Cover Texts.  A copy of the license is included in the
+      section entitled ``GNU Free Documentation License''.
+
+ at end titlepage
+ at contents
+ at page
+
+ at ifnottex
+ at node    Top,Using,,
+ at top     Introduction
+
+The @libib{} library is a collection of subroutines used by various
+GNU programs.  It is available under the Library General Public
+License; for more information, see @ref{Library Copying}.
+
+ at end ifnottex
+
+ at menu
+* Using::              How to use libiberty in your code.
+
+* Overview::           Overview of available function groups.
+
+* Functions::          Available functions, macros, and global variables.
+
+* Obstacks::           Object Stacks.
+
+* Licenses::           The various licenses under which libiberty sources are
+                       distributed.
+
+* Index::              Index of functions and categories.
+ at end menu
+
+ at node Using
+ at chapter Using
+ at cindex using libiberty
+ at cindex libiberty usage
+ at cindex how to use
+
+ at c THIS SECTION IS CRAP AND NEEDS REWRITING BADLY.
+
+To date, @libib{} is generally not installed on its own.  It has evolved
+over years but does not have its own version number nor release schedule.
+
+Possibly the easiest way to use @libib{} in your projects is to drop the
+ at libib{} code into your project's sources, and to build the library along
+with your own sources; the library would then be linked in at the end.  This
+prevents any possible version mismatches with other copies of libiberty
+elsewhere on the system.
+
+Passing @option{--enable-install-libiberty} to the @command{configure}
+script when building @libib{} causes the header files and archive library
+to be installed when @kbd{make install} is run.  This option also takes
+an (optional) argument to specify the installation location, in the same
+manner as @option{--prefix}.
+
+For your own projects, an approach which offers stability and flexibility
+is to include @libib{} with your code, but allow the end user to optionally
+choose to use a previously-installed version instead.  In this way the
+user may choose (for example) to install @libib{} as part of GCC, and use
+that version for all software built with that compiler.  (This approach
+has proven useful with software using the GNU @code{readline} library.)
+
+Making use of @libib{} code usually requires that you include one or more
+header files from the @libib{} distribution.  (They will be named as
+necessary in the function descriptions.)  At link time, you will need to
+add @option{-liberty} to your link command invocation.
+
+
+ at node Overview
+ at chapter Overview
+
+Functions contained in @libib{} can be divided into three general categories.
+
+
+ at menu
+* Supplemental Functions::       Providing functions which don't exist
+                                 on older operating systems.
+
+* Replacement Functions::        These functions are sometimes buggy or
+                                 unpredictable on some operating systems.
+
+* Extensions::                   Functions which provide useful extensions
+                                 or safety wrappers around existing code.
+ at end menu
+
+ at node Supplemental Functions
+ at section Supplemental Functions
+ at cindex supplemental functions
+ at cindex functions, supplemental
+ at cindex functions, missing
+
+Certain operating systems do not provide functions which have since
+become standardized, or at least common.  For example, the Single
+Unix Specification Version 2 requires that the @code{basename}
+function be provided, but an OS which predates that specification
+might not have this function.  This should not prevent well-written
+code from running on such a system.
+
+Similarly, some functions exist only among a particular ``flavor''
+or ``family'' of operating systems.  As an example, the @code{bzero}
+function is often not present on systems outside the BSD-derived
+family of systems.
+
+Many such functions are provided in @libib{}.  They are quickly
+listed here with little description, as systems which lack them
+become less and less common.  Each function @var{foo} is implemented
+in @file{@var{foo}.c} but not declared in any @libib{} header file; more
+comments and caveats for each function's implementation are often
+available in the source file.  Generally, the function can simply
+be declared as @code{extern}.
+
+
+
+ at node Replacement Functions
+ at section Replacement Functions
+ at cindex replacement functions
+ at cindex functions, replacement
+
+Some functions have extremely limited implementations on different
+platforms.  Other functions are tedious to use correctly; for example,
+proper use of @code{malloc} calls for the return value to be checked and
+appropriate action taken if memory has been exhausted.  A group of
+``replacement functions'' is available in @libib{} to address these issues
+for some of the most commonly used subroutines.
+
+All of these functions are declared in the @file{libiberty.h} header
+file.  Many of the implementations will use preprocessor macros set by
+GNU Autoconf, if you decide to make use of that program.  Some of these
+functions may call one another.
+
+
+ at menu
+* Memory Allocation::            Testing and handling failed memory
+                                   requests automatically.
+* Exit Handlers::                Calling routines on program exit.
+* Error Reporting::              Mapping errno and signal numbers to
+                                   more useful string formats.
+ at end menu
+
+ at node Memory Allocation
+ at subsection Memory Allocation
+ at cindex memory allocation
+
+The functions beginning with the letter @samp{x} are wrappers around
+standard functions; the functions provided by the system environment
+are called and their results checked before the results are passed back
+to client code.  If the standard functions fail, these wrappers will
+terminate the program.  Thus, these versions can be used with impunity.
+
+
+ at node Exit Handlers
+ at subsection Exit Handlers
+ at cindex exit handlers
+
+The existence and implementation of the @code{atexit} routine varies
+amongst the flavors of Unix.  @libib{} provides an unvarying dependable
+implementation via @code{xatexit} and @code{xexit}.
+
+
+ at node Error Reporting
+ at subsection Error Reporting
+ at cindex error reporting
+
+These are a set of routines to facilitate programming with the system
+ at code{errno} interface.  The @libib{} source file @file{strerror.c}
+contains a good deal of documentation for these functions.
+
+ at c signal stuff
+
+
+ at node Extensions
+ at section Extensions
+ at cindex extensions
+ at cindex functions, extension
+
+ at libib{} includes additional functionality above and beyond standard
+functions, which has proven generically useful in GNU programs, such as
+obstacks and regex.  These functions are often copied from other
+projects as they gain popularity, and are included here to provide a
+central location from which to use, maintain, and distribute them.
+
+ at menu
+* Obstacks::                     Stacks of arbitrary objects.
+ at end menu
+
+ at c This is generated from the glibc manual using a make-obstacks-texi.sh
+ at c script of Phil's.  Hope it's accurate.
+ at include obstacks.texi
+
+ at node Functions
+ at chapter Function, Variable, and Macro Listing.
+ at include functions.texi
+
+ at node Licenses
+ at appendix Licenses
+
+ at menu
+
+* Library Copying::   The GNU Library General Public License
+* BSD::               Regents of the University of California
+
+ at end menu
+
+ at c This takes care of Library Copying.  It is the copying-lib.texi from the
+ at c GNU web site, with its @node line altered to make makeinfo shut up.
+ at include copying-lib.texi
+
+ at page
+ at node BSD
+ at appendixsec BSD
+
+Copyright @copyright{} 1990 Regents of the University of California.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+ at enumerate
+
+ at item
+Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+ at item
+Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+ at item
+[rescinded 22 July 1999]
+
+ at item
+Neither the name of the University nor the names of its contributors
+may be used to endorse or promote products derived from this software
+without specific prior written permission.
+
+ at end enumerate
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+ at node Index
+ at unnumbered Index
+
+ at printindex cp
+
+ at bye
 
diff --git a/libiberty/make-relative-prefix.c b/libiberty/make-relative-prefix.c
index 4553a71..fe639d1 100644
--- a/libiberty/make-relative-prefix.c
+++ b/libiberty/make-relative-prefix.c
@@ -1,6 +1,6 @@
 /* Relative (relocatable) prefix support.
    Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2001, 2002, 2006 Free Software Foundation, Inc.
+   1999, 2000, 2001, 2002, 2006, 2012 Free Software Foundation, Inc.
 
 This file is part of libiberty.
 
@@ -58,6 +58,9 @@ relative prefix can be found, return @code{NULL}.
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
 
 #include <string.h>
 
@@ -245,10 +248,15 @@ make_relative_prefix_1 (const char *progname, const char *bin_prefix,
 	{
 	  char *startp, *endp, *nstore;
 	  size_t prefixlen = strlen (temp) + 1;
+	  size_t len;
 	  if (prefixlen < 2)
 	    prefixlen = 2;
 
-	  nstore = (char *) alloca (prefixlen + strlen (progname) + 1);
+	  len = prefixlen + strlen (progname) + 1;
+#ifdef HAVE_HOST_EXECUTABLE_SUFFIX
+	  len += strlen (HOST_EXECUTABLE_SUFFIX);
+#endif
+	  nstore = (char *) alloca (len);
 
 	  startp = endp = temp;
 	  while (1)
@@ -263,7 +271,7 @@ make_relative_prefix_1 (const char *progname, const char *bin_prefix,
 		    }
 		  else
 		    {
-		      strncpy (nstore, startp, endp - startp);
+		      memcpy (nstore, startp, endp - startp);
 		      if (! IS_DIR_SEPARATOR (endp[-1]))
 			{
 			  nstore[endp - startp] = DIR_SEPARATOR;
@@ -279,8 +287,14 @@ make_relative_prefix_1 (const char *progname, const char *bin_prefix,
 #endif
 		      )
 		    {
-		      progname = nstore;
-		      break;
+#if defined (HAVE_SYS_STAT_H) && defined (S_ISREG)
+		      struct stat st;
+		      if (stat (nstore, &st) >= 0 && S_ISREG (st.st_mode))
+#endif
+			{
+			  progname = nstore;
+			  break;
+			}
 		    }
 
 		  if (*endp == 0)
diff --git a/libiberty/obstacks.texi b/libiberty/obstacks.texi
index 8b13789..a1b1b47 100644
--- a/libiberty/obstacks.texi
+++ b/libiberty/obstacks.texi
@@ -1 +1,758 @@
+ at node Obstacks,Licenses,Functions,Top
+ at chapter Obstacks
+ at cindex obstacks
+
+An @dfn{obstack} is a pool of memory containing a stack of objects.  You
+can create any number of separate obstacks, and then allocate objects in
+specified obstacks.  Within each obstack, the last object allocated must
+always be the first one freed, but distinct obstacks are independent of
+each other.
+
+Aside from this one constraint of order of freeing, obstacks are totally
+general: an obstack can contain any number of objects of any size.  They
+are implemented with macros, so allocation is usually very fast as long as
+the objects are usually small.  And the only space overhead per object is
+the padding needed to start each object on a suitable boundary.
+
+ at menu
+* Creating Obstacks::           How to declare an obstack in your program.
+* Preparing for Obstacks::      Preparations needed before you can
+                                use obstacks.
+* Allocation in an Obstack::    Allocating objects in an obstack.
+* Freeing Obstack Objects::     Freeing objects in an obstack.
+* Obstack Functions::           The obstack functions are both
+                                functions and macros.
+* Growing Objects::             Making an object bigger by stages.
+* Extra Fast Growing::          Extra-high-efficiency (though more
+                                complicated) growing objects.
+* Status of an Obstack::        Inquiries about the status of an obstack.
+* Obstacks Data Alignment::     Controlling alignment of objects in obstacks.
+* Obstack Chunks::              How obstacks obtain and release chunks;
+                                efficiency considerations.
+* Summary of Obstacks::
+ at end menu
+
+ at node Creating Obstacks
+ at section Creating Obstacks
+
+The utilities for manipulating obstacks are declared in the header
+file @file{obstack.h}.
+ at pindex obstack.h
+
+ at comment obstack.h
+ at comment GNU
+ at deftp {Data Type} {struct obstack}
+An obstack is represented by a data structure of type @code{struct
+obstack}.  This structure has a small fixed size; it records the status
+of the obstack and how to find the space in which objects are allocated.
+It does not contain any of the objects themselves.  You should not try
+to access the contents of the structure directly; use only the functions
+described in this chapter.
+ at end deftp
+
+You can declare variables of type @code{struct obstack} and use them as
+obstacks, or you can allocate obstacks dynamically like any other kind
+of object.  Dynamic allocation of obstacks allows your program to have a
+variable number of different stacks.  (You can even allocate an
+obstack structure in another obstack, but this is rarely useful.)
+
+All the functions that work with obstacks require you to specify which
+obstack to use.  You do this with a pointer of type @code{struct obstack
+*}.  In the following, we often say ``an obstack'' when strictly
+speaking the object at hand is such a pointer.
+
+The objects in the obstack are packed into large blocks called
+ at dfn{chunks}.  The @code{struct obstack} structure points to a chain of
+the chunks currently in use.
+
+The obstack library obtains a new chunk whenever you allocate an object
+that won't fit in the previous chunk.  Since the obstack library manages
+chunks automatically, you don't need to pay much attention to them, but
+you do need to supply a function which the obstack library should use to
+get a chunk.  Usually you supply a function which uses @code{malloc}
+directly or indirectly.  You must also supply a function to free a chunk.
+These matters are described in the following section.
+
+ at node Preparing for Obstacks
+ at section Preparing for Using Obstacks
+
+Each source file in which you plan to use the obstack functions
+must include the header file @file{obstack.h}, like this:
+
+ at smallexample
+#include <obstack.h>
+ at end smallexample
+
+ at findex obstack_chunk_alloc
+ at findex obstack_chunk_free
+Also, if the source file uses the macro @code{obstack_init}, it must
+declare or define two functions or macros that will be called by the
+obstack library.  One, @code{obstack_chunk_alloc}, is used to allocate
+the chunks of memory into which objects are packed.  The other,
+ at code{obstack_chunk_free}, is used to return chunks when the objects in
+them are freed.  These macros should appear before any use of obstacks
+in the source file.
+
+Usually these are defined to use @code{malloc} via the intermediary
+ at code{xmalloc} (@pxref{Unconstrained Allocation, , , libc, The GNU C Library Reference Manual}).  This is done with
+the following pair of macro definitions:
+
+ at smallexample
+#define obstack_chunk_alloc xmalloc
+#define obstack_chunk_free free
+ at end smallexample
+
+ at noindent
+Though the memory you get using obstacks really comes from @code{malloc},
+using obstacks is faster because @code{malloc} is called less often, for
+larger blocks of memory.  @xref{Obstack Chunks}, for full details.
+
+At run time, before the program can use a @code{struct obstack} object
+as an obstack, it must initialize the obstack by calling
+ at code{obstack_init}.
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefun int obstack_init (struct obstack *@var{obstack-ptr})
+Initialize obstack @var{obstack-ptr} for allocation of objects.  This
+function calls the obstack's @code{obstack_chunk_alloc} function.  If
+allocation of memory fails, the function pointed to by
+ at code{obstack_alloc_failed_handler} is called.  The @code{obstack_init}
+function always returns 1 (Compatibility notice: Former versions of
+obstack returned 0 if allocation failed).
+ at end deftypefun
+
+Here are two examples of how to allocate the space for an obstack and
+initialize it.  First, an obstack that is a static variable:
+
+ at smallexample
+static struct obstack myobstack;
+ at dots{}
+obstack_init (&myobstack);
+ at end smallexample
+
+ at noindent
+Second, an obstack that is itself dynamically allocated:
+
+ at smallexample
+struct obstack *myobstack_ptr
+  = (struct obstack *) xmalloc (sizeof (struct obstack));
+
+obstack_init (myobstack_ptr);
+ at end smallexample
+
+ at comment obstack.h
+ at comment GNU
+ at defvar obstack_alloc_failed_handler
+The value of this variable is a pointer to a function that
+ at code{obstack} uses when @code{obstack_chunk_alloc} fails to allocate
+memory.  The default action is to print a message and abort.
+You should supply a function that either calls @code{exit}
+(@pxref{Program Termination, , , libc, The GNU C Library Reference Manual}) or @code{longjmp} (@pxref{Non-Local
+Exits, , , libc, The GNU C Library Reference Manual}) and doesn't return.
+
+ at smallexample
+void my_obstack_alloc_failed (void)
+ at dots{}
+obstack_alloc_failed_handler = &my_obstack_alloc_failed;
+ at end smallexample
+
+ at end defvar
+
+ at node Allocation in an Obstack
+ at section Allocation in an Obstack
+ at cindex allocation (obstacks)
+
+The most direct way to allocate an object in an obstack is with
+ at code{obstack_alloc}, which is invoked almost like @code{malloc}.
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefun {void *} obstack_alloc (struct obstack *@var{obstack-ptr}, int @var{size})
+This allocates an uninitialized block of @var{size} bytes in an obstack
+and returns its address.  Here @var{obstack-ptr} specifies which obstack
+to allocate the block in; it is the address of the @code{struct obstack}
+object which represents the obstack.  Each obstack function or macro
+requires you to specify an @var{obstack-ptr} as the first argument.
+
+This function calls the obstack's @code{obstack_chunk_alloc} function if
+it needs to allocate a new chunk of memory; it calls
+ at code{obstack_alloc_failed_handler} if allocation of memory by
+ at code{obstack_chunk_alloc} failed.
+ at end deftypefun
+
+For example, here is a function that allocates a copy of a string @var{str}
+in a specific obstack, which is in the variable @code{string_obstack}:
+
+ at smallexample
+struct obstack string_obstack;
+
+char *
+copystring (char *string)
+@{
+  size_t len = strlen (string) + 1;
+  char *s = (char *) obstack_alloc (&string_obstack, len);
+  memcpy (s, string, len);
+  return s;
+@}
+ at end smallexample
+
+To allocate a block with specified contents, use the function
+ at code{obstack_copy}, declared like this:
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefun {void *} obstack_copy (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
+This allocates a block and initializes it by copying @var{size}
+bytes of data starting at @var{address}.  It calls
+ at code{obstack_alloc_failed_handler} if allocation of memory by
+ at code{obstack_chunk_alloc} failed.
+ at end deftypefun
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefun {void *} obstack_copy0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
+Like @code{obstack_copy}, but appends an extra byte containing a null
+character.  This extra byte is not counted in the argument @var{size}.
+ at end deftypefun
+
+The @code{obstack_copy0} function is convenient for copying a sequence
+of characters into an obstack as a null-terminated string.  Here is an
+example of its use:
+
+ at smallexample
+char *
+obstack_savestring (char *addr, int size)
+@{
+  return obstack_copy0 (&myobstack, addr, size);
+@}
+ at end smallexample
+
+ at noindent
+Contrast this with the previous example of @code{savestring} using
+ at code{malloc} (@pxref{Basic Allocation, , , libc, The GNU C Library Reference Manual}).
+
+ at node Freeing Obstack Objects
+ at section Freeing Objects in an Obstack
+ at cindex freeing (obstacks)
+
+To free an object allocated in an obstack, use the function
+ at code{obstack_free}.  Since the obstack is a stack of objects, freeing
+one object automatically frees all other objects allocated more recently
+in the same obstack.
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefun void obstack_free (struct obstack *@var{obstack-ptr}, void *@var{object})
+If @var{object} is a null pointer, everything allocated in the obstack
+is freed.  Otherwise, @var{object} must be the address of an object
+allocated in the obstack.  Then @var{object} is freed, along with
+everything allocated in @var{obstack} since @var{object}.
+ at end deftypefun
+
+Note that if @var{object} is a null pointer, the result is an
+uninitialized obstack.  To free all memory in an obstack but leave it
+valid for further allocation, call @code{obstack_free} with the address
+of the first object allocated on the obstack:
+
+ at smallexample
+obstack_free (obstack_ptr, first_object_allocated_ptr);
+ at end smallexample
+
+Recall that the objects in an obstack are grouped into chunks.  When all
+the objects in a chunk become free, the obstack library automatically
+frees the chunk (@pxref{Preparing for Obstacks}).  Then other
+obstacks, or non-obstack allocation, can reuse the space of the chunk.
+
+ at node Obstack Functions
+ at section Obstack Functions and Macros
+ at cindex macros
+
+The interfaces for using obstacks may be defined either as functions or
+as macros, depending on the compiler.  The obstack facility works with
+all C compilers, including both @w{ISO C} and traditional C, but there are
+precautions you must take if you plan to use compilers other than GNU C.
+
+If you are using an old-fashioned @w{non-ISO C} compiler, all the obstack
+``functions'' are actually defined only as macros.  You can call these
+macros like functions, but you cannot use them in any other way (for
+example, you cannot take their address).
+
+Calling the macros requires a special precaution: namely, the first
+operand (the obstack pointer) may not contain any side effects, because
+it may be computed more than once.  For example, if you write this:
+
+ at smallexample
+obstack_alloc (get_obstack (), 4);
+ at end smallexample
+
+ at noindent
+you will find that @code{get_obstack} may be called several times.
+If you use @code{*obstack_list_ptr++} as the obstack pointer argument,
+you will get very strange results since the incrementation may occur
+several times.
+
+In @w{ISO C}, each function has both a macro definition and a function
+definition.  The function definition is used if you take the address of the
+function without calling it.  An ordinary call uses the macro definition by
+default, but you can request the function definition instead by writing the
+function name in parentheses, as shown here:
+
+ at smallexample
+char *x;
+void *(*funcp) ();
+/* @r{Use the macro}.  */
+x = (char *) obstack_alloc (obptr, size);
+/* @r{Call the function}.  */
+x = (char *) (obstack_alloc) (obptr, size);
+/* @r{Take the address of the function}.  */
+funcp = obstack_alloc;
+ at end smallexample
+
+ at noindent
+This is the same situation that exists in @w{ISO C} for the standard library
+functions.  @xref{Macro Definitions, , , libc, The GNU C Library Reference Manual}.
+
+ at strong{Warning:} When you do use the macros, you must observe the
+precaution of avoiding side effects in the first operand, even in @w{ISO C}.
+
+If you use the GNU C compiler, this precaution is not necessary, because
+various language extensions in GNU C permit defining the macros so as to
+compute each argument only once.
+
+ at node Growing Objects
+ at section Growing Objects
+ at cindex growing objects (in obstacks)
+ at cindex changing the size of a block (obstacks)
+
+Because memory in obstack chunks is used sequentially, it is possible to
+build up an object step by step, adding one or more bytes at a time to the
+end of the object.  With this technique, you do not need to know how much
+data you will put in the object until you come to the end of it.  We call
+this the technique of @dfn{growing objects}.  The special functions
+for adding data to the growing object are described in this section.
+
+You don't need to do anything special when you start to grow an object.
+Using one of the functions to add data to the object automatically
+starts it.  However, it is necessary to say explicitly when the object is
+finished.  This is done with the function @code{obstack_finish}.
+
+The actual address of the object thus built up is not known until the
+object is finished.  Until then, it always remains possible that you will
+add so much data that the object must be copied into a new chunk.
+
+While the obstack is in use for a growing object, you cannot use it for
+ordinary allocation of another object.  If you try to do so, the space
+already added to the growing object will become part of the other object.
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefun void obstack_blank (struct obstack *@var{obstack-ptr}, int @var{size})
+The most basic function for adding to a growing object is
+ at code{obstack_blank}, which adds space without initializing it.
+ at end deftypefun
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefun void obstack_grow (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size})
+To add a block of initialized space, use @code{obstack_grow}, which is
+the growing-object analogue of @code{obstack_copy}.  It adds @var{size}
+bytes of data to the growing object, copying the contents from
+ at var{data}.
+ at end deftypefun
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefun void obstack_grow0 (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size})
+This is the growing-object analogue of @code{obstack_copy0}.  It adds
+ at var{size} bytes copied from @var{data}, followed by an additional null
+character.
+ at end deftypefun
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefun void obstack_1grow (struct obstack *@var{obstack-ptr}, char @var{c})
+To add one character at a time, use the function @code{obstack_1grow}.
+It adds a single byte containing @var{c} to the growing object.
+ at end deftypefun
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefun void obstack_ptr_grow (struct obstack *@var{obstack-ptr}, void *@var{data})
+Adding the value of a pointer one can use the function
+ at code{obstack_ptr_grow}.  It adds @code{sizeof (void *)} bytes
+containing the value of @var{data}.
+ at end deftypefun
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefun void obstack_int_grow (struct obstack *@var{obstack-ptr}, int @var{data})
+A single value of type @code{int} can be added by using the
+ at code{obstack_int_grow} function.  It adds @code{sizeof (int)} bytes to
+the growing object and initializes them with the value of @var{data}.
+ at end deftypefun
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefun {void *} obstack_finish (struct obstack *@var{obstack-ptr})
+When you are finished growing the object, use the function
+ at code{obstack_finish} to close it off and return its final address.
+
+Once you have finished the object, the obstack is available for ordinary
+allocation or for growing another object.
+
+This function can return a null pointer under the same conditions as
+ at code{obstack_alloc} (@pxref{Allocation in an Obstack}).
+ at end deftypefun
+
+When you build an object by growing it, you will probably need to know
+afterward how long it became.  You need not keep track of this as you grow
+the object, because you can find out the length from the obstack just
+before finishing the object with the function @code{obstack_object_size},
+declared as follows:
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr})
+This function returns the current size of the growing object, in bytes.
+Remember to call this function @emph{before} finishing the object.
+After it is finished, @code{obstack_object_size} will return zero.
+ at end deftypefun
+
+If you have started growing an object and wish to cancel it, you should
+finish it and then free it, like this:
+
+ at smallexample
+obstack_free (obstack_ptr, obstack_finish (obstack_ptr));
+ at end smallexample
+
+ at noindent
+This has no effect if no object was growing.
+
+ at cindex shrinking objects
+You can use @code{obstack_blank} with a negative size argument to make
+the current object smaller.  Just don't try to shrink it beyond zero
+length---there's no telling what will happen if you do that.
+
+ at node Extra Fast Growing
+ at section Extra Fast Growing Objects
+ at cindex efficiency and obstacks
+
+The usual functions for growing objects incur overhead for checking
+whether there is room for the new growth in the current chunk.  If you
+are frequently constructing objects in small steps of growth, this
+overhead can be significant.
+
+You can reduce the overhead by using special ``fast growth''
+functions that grow the object without checking.  In order to have a
+robust program, you must do the checking yourself.  If you do this checking
+in the simplest way each time you are about to add data to the object, you
+have not saved anything, because that is what the ordinary growth
+functions do.  But if you can arrange to check less often, or check
+more efficiently, then you make the program faster.
+
+The function @code{obstack_room} returns the amount of room available
+in the current chunk.  It is declared as follows:
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefun int obstack_room (struct obstack *@var{obstack-ptr})
+This returns the number of bytes that can be added safely to the current
+growing object (or to an object about to be started) in obstack
+ at var{obstack} using the fast growth functions.
+ at end deftypefun
+
+While you know there is room, you can use these fast growth functions
+for adding data to a growing object:
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefun void obstack_1grow_fast (struct obstack *@var{obstack-ptr}, char @var{c})
+The function @code{obstack_1grow_fast} adds one byte containing the
+character @var{c} to the growing object in obstack @var{obstack-ptr}.
+ at end deftypefun
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefun void obstack_ptr_grow_fast (struct obstack *@var{obstack-ptr}, void *@var{data})
+The function @code{obstack_ptr_grow_fast} adds @code{sizeof (void *)}
+bytes containing the value of @var{data} to the growing object in
+obstack @var{obstack-ptr}.
+ at end deftypefun
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefun void obstack_int_grow_fast (struct obstack *@var{obstack-ptr}, int @var{data})
+The function @code{obstack_int_grow_fast} adds @code{sizeof (int)} bytes
+containing the value of @var{data} to the growing object in obstack
+ at var{obstack-ptr}.
+ at end deftypefun
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefun void obstack_blank_fast (struct obstack *@var{obstack-ptr}, int @var{size})
+The function @code{obstack_blank_fast} adds @var{size} bytes to the
+growing object in obstack @var{obstack-ptr} without initializing them.
+ at end deftypefun
+
+When you check for space using @code{obstack_room} and there is not
+enough room for what you want to add, the fast growth functions
+are not safe.  In this case, simply use the corresponding ordinary
+growth function instead.  Very soon this will copy the object to a
+new chunk; then there will be lots of room available again.
+
+So, each time you use an ordinary growth function, check afterward for
+sufficient space using @code{obstack_room}.  Once the object is copied
+to a new chunk, there will be plenty of space again, so the program will
+start using the fast growth functions again.
+
+Here is an example:
+
+ at smallexample
+ at group
+void
+add_string (struct obstack *obstack, const char *ptr, int len)
+@{
+  while (len > 0)
+    @{
+      int room = obstack_room (obstack);
+      if (room == 0)
+        @{
+          /* @r{Not enough room. Add one character slowly,}
+             @r{which may copy to a new chunk and make room.}  */
+          obstack_1grow (obstack, *ptr++);
+          len--;
+        @}
+      else
+        @{
+          if (room > len)
+            room = len;
+          /* @r{Add fast as much as we have room for.} */
+          len -= room;
+          while (room-- > 0)
+            obstack_1grow_fast (obstack, *ptr++);
+        @}
+    @}
+@}
+ at end group
+ at end smallexample
+
+ at node Status of an Obstack
+ at section Status of an Obstack
+ at cindex obstack status
+ at cindex status of obstack
+
+Here are functions that provide information on the current status of
+allocation in an obstack.  You can use them to learn about an object while
+still growing it.
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefun {void *} obstack_base (struct obstack *@var{obstack-ptr})
+This function returns the tentative address of the beginning of the
+currently growing object in @var{obstack-ptr}.  If you finish the object
+immediately, it will have that address.  If you make it larger first, it
+may outgrow the current chunk---then its address will change!
+
+If no object is growing, this value says where the next object you
+allocate will start (once again assuming it fits in the current
+chunk).
+ at end deftypefun
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefun {void *} obstack_next_free (struct obstack *@var{obstack-ptr})
+This function returns the address of the first free byte in the current
+chunk of obstack @var{obstack-ptr}.  This is the end of the currently
+growing object.  If no object is growing, @code{obstack_next_free}
+returns the same value as @code{obstack_base}.
+ at end deftypefun
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr})
+This function returns the size in bytes of the currently growing object.
+This is equivalent to
+
+ at smallexample
+obstack_next_free (@var{obstack-ptr}) - obstack_base (@var{obstack-ptr})
+ at end smallexample
+ at end deftypefun
+
+ at node Obstacks Data Alignment
+ at section Alignment of Data in Obstacks
+ at cindex alignment (in obstacks)
+
+Each obstack has an @dfn{alignment boundary}; each object allocated in
+the obstack automatically starts on an address that is a multiple of the
+specified boundary.  By default, this boundary is 4 bytes.
+
+To access an obstack's alignment boundary, use the macro
+ at code{obstack_alignment_mask}, whose function prototype looks like
+this:
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefn Macro int obstack_alignment_mask (struct obstack *@var{obstack-ptr})
+The value is a bit mask; a bit that is 1 indicates that the corresponding
+bit in the address of an object should be 0.  The mask value should be one
+less than a power of 2; the effect is that all object addresses are
+multiples of that power of 2.  The default value of the mask is 3, so that
+addresses are multiples of 4.  A mask value of 0 means an object can start
+on any multiple of 1 (that is, no alignment is required).
+
+The expansion of the macro @code{obstack_alignment_mask} is an lvalue,
+so you can alter the mask by assignment.  For example, this statement:
+
+ at smallexample
+obstack_alignment_mask (obstack_ptr) = 0;
+ at end smallexample
+
+ at noindent
+has the effect of turning off alignment processing in the specified obstack.
+ at end deftypefn
+
+Note that a change in alignment mask does not take effect until
+ at emph{after} the next time an object is allocated or finished in the
+obstack.  If you are not growing an object, you can make the new
+alignment mask take effect immediately by calling @code{obstack_finish}.
+This will finish a zero-length object and then do proper alignment for
+the next object.
+
+ at node Obstack Chunks
+ at section Obstack Chunks
+ at cindex efficiency of chunks
+ at cindex chunks
+
+Obstacks work by allocating space for themselves in large chunks, and
+then parceling out space in the chunks to satisfy your requests.  Chunks
+are normally 4096 bytes long unless you specify a different chunk size.
+The chunk size includes 8 bytes of overhead that are not actually used
+for storing objects.  Regardless of the specified size, longer chunks
+will be allocated when necessary for long objects.
+
+The obstack library allocates chunks by calling the function
+ at code{obstack_chunk_alloc}, which you must define.  When a chunk is no
+longer needed because you have freed all the objects in it, the obstack
+library frees the chunk by calling @code{obstack_chunk_free}, which you
+must also define.
+
+These two must be defined (as macros) or declared (as functions) in each
+source file that uses @code{obstack_init} (@pxref{Creating Obstacks}).
+Most often they are defined as macros like this:
+
+ at smallexample
+#define obstack_chunk_alloc malloc
+#define obstack_chunk_free free
+ at end smallexample
+
+Note that these are simple macros (no arguments).  Macro definitions with
+arguments will not work!  It is necessary that @code{obstack_chunk_alloc}
+or @code{obstack_chunk_free}, alone, expand into a function name if it is
+not itself a function name.
+
+If you allocate chunks with @code{malloc}, the chunk size should be a
+power of 2.  The default chunk size, 4096, was chosen because it is long
+enough to satisfy many typical requests on the obstack yet short enough
+not to waste too much memory in the portion of the last chunk not yet used.
+
+ at comment obstack.h
+ at comment GNU
+ at deftypefn Macro int obstack_chunk_size (struct obstack *@var{obstack-ptr})
+This returns the chunk size of the given obstack.
+ at end deftypefn
+
+Since this macro expands to an lvalue, you can specify a new chunk size by
+assigning it a new value.  Doing so does not affect the chunks already
+allocated, but will change the size of chunks allocated for that particular
+obstack in the future.  It is unlikely to be useful to make the chunk size
+smaller, but making it larger might improve efficiency if you are
+allocating many objects whose size is comparable to the chunk size.  Here
+is how to do so cleanly:
+
+ at smallexample
+if (obstack_chunk_size (obstack_ptr) < @var{new-chunk-size})
+  obstack_chunk_size (obstack_ptr) = @var{new-chunk-size};
+ at end smallexample
+
+ at node Summary of Obstacks
+ at section Summary of Obstack Functions
+
+Here is a summary of all the functions associated with obstacks.  Each
+takes the address of an obstack (@code{struct obstack *}) as its first
+argument.
+
+ at table @code
+ at item void obstack_init (struct obstack *@var{obstack-ptr})
+Initialize use of an obstack.  @xref{Creating Obstacks}.
+
+ at item void *obstack_alloc (struct obstack *@var{obstack-ptr}, int @var{size})
+Allocate an object of @var{size} uninitialized bytes.
+ at xref{Allocation in an Obstack}.
+
+ at item void *obstack_copy (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
+Allocate an object of @var{size} bytes, with contents copied from
+ at var{address}.  @xref{Allocation in an Obstack}.
+
+ at item void *obstack_copy0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
+Allocate an object of @var{size}+1 bytes, with @var{size} of them copied
+from @var{address}, followed by a null character at the end.
+ at xref{Allocation in an Obstack}.
+
+ at item void obstack_free (struct obstack *@var{obstack-ptr}, void *@var{object})
+Free @var{object} (and everything allocated in the specified obstack
+more recently than @var{object}).  @xref{Freeing Obstack Objects}.
+
+ at item void obstack_blank (struct obstack *@var{obstack-ptr}, int @var{size})
+Add @var{size} uninitialized bytes to a growing object.
+ at xref{Growing Objects}.
+
+ at item void obstack_grow (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
+Add @var{size} bytes, copied from @var{address}, to a growing object.
+ at xref{Growing Objects}.
+
+ at item void obstack_grow0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
+Add @var{size} bytes, copied from @var{address}, to a growing object,
+and then add another byte containing a null character.  @xref{Growing
+Objects}.
+
+ at item void obstack_1grow (struct obstack *@var{obstack-ptr}, char @var{data-char})
+Add one byte containing @var{data-char} to a growing object.
+ at xref{Growing Objects}.
+
+ at item void *obstack_finish (struct obstack *@var{obstack-ptr})
+Finalize the object that is growing and return its permanent address.
+ at xref{Growing Objects}.
+
+ at item int obstack_object_size (struct obstack *@var{obstack-ptr})
+Get the current size of the currently growing object.  @xref{Growing
+Objects}.
+
+ at item void obstack_blank_fast (struct obstack *@var{obstack-ptr}, int @var{size})
+Add @var{size} uninitialized bytes to a growing object without checking
+that there is enough room.  @xref{Extra Fast Growing}.
+
+ at item void obstack_1grow_fast (struct obstack *@var{obstack-ptr}, char @var{data-char})
+Add one byte containing @var{data-char} to a growing object without
+checking that there is enough room.  @xref{Extra Fast Growing}.
+
+ at item int obstack_room (struct obstack *@var{obstack-ptr})
+Get the amount of room now available for growing the current object.
+ at xref{Extra Fast Growing}.
+
+ at item int obstack_alignment_mask (struct obstack *@var{obstack-ptr})
+The mask used for aligning the beginning of an object.  This is an
+lvalue.  @xref{Obstacks Data Alignment}.
+
+ at item int obstack_chunk_size (struct obstack *@var{obstack-ptr})
+The size for allocating chunks.  This is an lvalue.  @xref{Obstack Chunks}.
+
+ at item void *obstack_base (struct obstack *@var{obstack-ptr})
+Tentative starting address of the currently growing object.
+ at xref{Status of an Obstack}.
+
+ at item void *obstack_next_free (struct obstack *@var{obstack-ptr})
+Address just after the end of the currently growing object.
+ at xref{Status of an Obstack}.
+ at end table
 
diff --git a/libiberty/pex-unix.c b/libiberty/pex-unix.c
index 8d5145c..addf8ee 100644
--- a/libiberty/pex-unix.c
+++ b/libiberty/pex-unix.c
@@ -85,13 +85,15 @@ to_ptr32 (char **ptr64)
   int argc;
   __char_ptr_char_ptr32 short_argv;
 
-  for (argc=0; ptr64[argc]; argc++);
+  /* Count number of arguments.  */
+  for (argc = 0; ptr64[argc] != NULL; argc++)
+    ;
 
   /* Reallocate argv with 32 bit pointers.  */
   short_argv = (__char_ptr_char_ptr32) decc$malloc
     (sizeof (__char_ptr32) * (argc + 1));
 
-  for (argc=0; ptr64[argc]; argc++)
+  for (argc = 0; ptr64[argc] != NULL; argc++)
     short_argv[argc] = (__char_ptr32) decc$strdup (ptr64[argc]);
 
   short_argv[argc] = (__char_ptr32) 0;
diff --git a/libiberty/stack-limit.c b/libiberty/stack-limit.c
index e64cac2..82c3d44 100644
--- a/libiberty/stack-limit.c
+++ b/libiberty/stack-limit.c
@@ -34,6 +34,7 @@ Attempt to increase stack size limit to @var{pref} bytes if possible.
 */
 
 #include "config.h"
+#include "ansidecl.h"
 
 #ifdef HAVE_STDINT_H
 #include <stdint.h>
@@ -43,7 +44,7 @@ Attempt to increase stack size limit to @var{pref} bytes if possible.
 #endif
 
 void
-stack_limit_increase (unsigned long pref)
+stack_limit_increase (unsigned long pref ATTRIBUTE_UNUSED)
 {
 #if defined(HAVE_SETRLIMIT) && defined(HAVE_GETRLIMIT) \
     && defined(RLIMIT_STACK) && defined(RLIM_INFINITY)
diff --git a/libiberty/testsuite/demangle-expected b/libiberty/testsuite/demangle-expected
index 70abf68..58c1368 100644
--- a/libiberty/testsuite/demangle-expected
+++ b/libiberty/testsuite/demangle-expected
@@ -3935,7 +3935,7 @@ _Z1tIlEDTplcvT_Li5EclL_Z1qsELi6EEEv
 decltype (((long)(5))+(q(6))) t<long>()
 # test for expansion of function parameter pack
 --format=gnu-v3
-_Z1gIIidEEDTclL_Z1fEspplfp_Li1EEEDpT_
+_Z1gIJidEEDTclL_Z1fEspplfp_Li1EEEDpT_
 decltype (f(({parm#1}+(1))...)) g<int, double>(int, double)
 # lambda tests
 --format=gnu-v3
@@ -4018,6 +4018,69 @@ K<1, &S::m>::f()
 --format=gnu-v3
 _ZSt10_ConstructI10CellBorderIS0_EEvPT_DpOT0_
 _ZSt10_ConstructI10CellBorderIS0_EEvPT_DpOT0_
+# A pack expansion is substitutable.
+--format=gnu-v3
+_Z1fIJiEiEv1AIJDpT_EET0_S4_
+void f<int, int>(A<int>, int, int)
+# So is decltype.
+--format=gnu-v3
+_Z1fIiiEDTcvT__EET0_S2_
+decltype ((int)()) f<int, int>(int, int)
+# And vector.
+--format=gnu-v3
+_Z1fDv4_iS_
+f(int __vector(4), int __vector(4))
+--format=gnu-v3
+_Z2f1Ii1AEDTdsfp_fp0_ET0_MS2_T_
+decltype ({parm#1}.*{parm#2}) f1<int, A>(A, int A::*)
+--format=gnu-v3
+_Z2f2IiEDTquL_Z1bEfp_trET_
+decltype (b?{parm#1} : (throw)) f2<int>(int)
+--format=gnu-v3
+_Z6check1IiEvP6helperIXsznw_T_EEE
+void check1<int>(helper<sizeof (new int)>*)
+--format=gnu-v3
+_Z6check2IiEvP6helperIXszgsnw_T_piEEE
+void check2<int>(helper<sizeof (::new int())>*)
+--format=gnu-v3
+_Z6check3IiEvP6helperIXsznwadL_Z1iE_T_piLi1EEEE
+void check3<int>(helper<sizeof (new (&i) int(1))>*)
+--format=gnu-v3
+_Z6check4IiEvP6helperIXszna_A1_T_EEE
+void check4<int>(helper<sizeof (new int [1])>*)
+--format=gnu-v3
+_Z6check5IiEvP6helperIXszna_A1_T_piEEE
+void check5<int>(helper<sizeof (new int [1]())>*)
+--format=gnu-v3
+_Z1fIiEDTcmgsdlfp_psfp_EPT_
+decltype ((::delete {parm#1}),(+{parm#1})) f<int>(int*)
+--format=gnu-v3
+_Z1fIiEDTcmdafp_psfp_EPT_
+decltype ((delete[] {parm#1}),(+{parm#1})) f<int>(int*)
+--format=gnu-v3
+_ZN1AdlEPv
+A::operator delete(void*)
+--format=gnu-v3
+_Z2f1IiEDTppfp_ET_
+decltype ({parm#1}++) f1<int>(int)
+--format=gnu-v3
+_Z2f1IiEDTpp_fp_ET_
+decltype (++{parm#1}) f1<int>(int)
+--format=gnu-v3
+_Z2f1IiEDTcl1gfp_ilEEET_
+decltype (g({parm#1}, {})) f1<int>(int)
+--format=gnu-v3
+_Z2f1IiEDTnw_T_ilEES0_
+decltype (new int{}) f1<int>(int)
+--format=gnu-v3
+_Zli2_wPKc
+operator"" _w(char const*)
+--format=gnu-v3
+_Z1fIiEDTnw_Dapifp_EET_
+decltype (new auto({parm#1})) f<int>(int)
+--format=gnu-v3
+_Z1fIiERDaRKT_S1_
+auto& f<int>(int const&, int)
 #
 # Ada (GNAT) tests.
 #
@@ -4203,3 +4266,7 @@ foo
 _Z1fIKFvvES0_Evv
 void f<void () const, void ()>()
 f<void () const, void ()>
+#
+--format=gnu-v3
+_ZN4modc6parser8sequenceINS_9astParser13LocatedParserINS0_9ParserRefINS2_UlRNS2_16TokenParserInputEE_EEEEEINS0_14OptionalParserINS2_18ListParserTemplateILNS_6tokens5Token4TypeE4EXadL_ZNSD_Ut_13parenthesizedEEEE6ParserINS4_INS0_6ParserIS5_NS_3ast10ExpressionEEEEEEEEENSA_INS4_INS2_22OneOfKeywordsToTParserINSJ_5StyleEEEEEEENS0_14SequenceParserIS5_INS0_18ExactElementParserIS5_EENSA_ISM_EEEEENS0_14RepeatedParserINS4_INS0_15TransformParserINSU_IS5_INS4_INSP_INSJ_10Annotation12RelationshipEEEEESX_EEENS2_UlNS2_3LocES12_ONS_5MaybeISK_EEE19_EEEEELb0EEEEEENSU_INS0_17ExtractParserTypeIT_E9InputTypeEINS0_8MaybeRefIS1F_E4TypeEDpNS1I_IT0_E4TypeEEEEOS1F_DpOS1L_
+modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> ><modc::parser::ExtractParserType<modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> > >::InputType, modc::parser::MaybeRef<modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}>::Type, modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > ><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}> >, false><modc::parser::OptionalParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > > > >::Type, modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > ><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}> >, false><modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> ><modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> > > >::Type, modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > ><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}> >, false><modc::parser::SequenceParser<modc::astParser::TokenParserInput<modc::parser::ExactElementParser<modc::astParser::TokenParserInput>, modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> ><modc::ast::Expression> > > >::Type, modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > ><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}> >, false><modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > ><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}> >, false> >::Type> modc::parser::sequence<modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> >, modc::parser::OptionalParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > > >, modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> ><modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> > >, modc::parser::SequenceParser<modc::astParser::TokenParserInput<modc::parser::ExactElementParser<modc::astParser::TokenParserInput>, modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> ><modc::ast::Expression> > >, modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > ><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}> >, false> >(modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}&&, (modc::parser::ExtractParserType<modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> > >&&)...)
diff --git a/md5.sum b/md5.sum
index d451152..4607beb 100644
--- a/md5.sum
+++ b/md5.sum
@@ -1,6 +1,6 @@
 408ef1462276b75d3708877103c85eb8  bfd/.gitignore
 d32239bcb673463ab874e80d47fae504  bfd/COPYING
-429533162470e7998099e05f56d80baf  bfd/ChangeLog
+b2f7b3c393d54a2afe800a24bde71329  bfd/ChangeLog
 daabeea83b81f2707d48d2c04dcc37c4  bfd/ChangeLog-0001
 0a3e33c0b179772334e34175da11b64f  bfd/ChangeLog-0203
 d20549a2f701cd99318d0af070416bf3  bfd/ChangeLog-2004
@@ -10,289 +10,299 @@ aa4c260fc770839ccd0776dec1c2353d  bfd/ChangeLog-2005
 6e40d764a9749e6638d7d7c9c1301c76  bfd/ChangeLog-2008
 e343d8f85c4b1f246b783db27f797934  bfd/ChangeLog-2009
 30e074bff91d690e7c55999f9df5edbb  bfd/ChangeLog-2010
+2c15fb46b4d364c7fe1210fb9cc8cad4  bfd/ChangeLog-2011
 8dcb7ce2e45911e21ceb6e457e69eacf  bfd/ChangeLog-9193
 6d37ec6ee5f57a1188a0717f2fa5deb0  bfd/ChangeLog-9495
 b7ad288235bf6a3e015e01cb6096cbe7  bfd/ChangeLog-9697
 dbb0d89c90d6c0ec79eb003a5b63f923  bfd/ChangeLog-9899
 d618facc3e8ce8bf3d02ba452e1be6ab  bfd/MAINTAINERS
-843f97bcdf3464ca3b0afcf4e6d28f90  bfd/Makefile.am
-4b89c977642ca28dd04103900ffd1eb9  bfd/Makefile.in
+e2a842ac3faf690c4ecc53712ab30a59  bfd/Makefile.am
+4c095504bee463e5c0773bdfd2ae3f07  bfd/Makefile.in
 6455e3c85b31e588ecb75f7d3c945c8d  bfd/PORTING
 2d6a5be3f5d1b33251fe9a8570e943d8  bfd/README
 cd26654c6eb30680694867e434e40044  bfd/TODO
 6fa0d57c29b1872c3829bb251d8898f9  bfd/acinclude.m4
-3381b54a88e28dc216f5a2c7f4d30c32  bfd/aclocal.m4
-d8ddebc6a89593388d3c07405644a845  bfd/aix386-core.c
+92684b9c2bc5d3ffe0370c32e51c9bb3  bfd/aclocal.m4
+a9966d40b6f9a5469bbd752177db63f1  bfd/aix386-core.c
 b3575c73467ebc45473c2ea0875c1b4e  bfd/aix5ppc-core.c
 c9ec7d24e6be9796656156d1c44d295c  bfd/aout-adobe.c
-20b9909bfd2ddd02d26b99dc37b194fa  bfd/aout-arm.c
-d3a602dd8c8525c314571b8122935fc6  bfd/aout-cris.c
-839d08c624b51cc73a2e2e28741f0fb1  bfd/aout-ns32k.c
-31a4784a448794bed0bf31a191a8d669  bfd/aout-sparcle.c
+d9f978749e35f836c66403497694b831  bfd/aout-arm.c
+c552fd4edbac068d0780ef556247177a  bfd/aout-cris.c
+8bd53d16402d058cbbe4ce4284cc1d86  bfd/aout-ns32k.c
+50d3f1577ee0ba388baa9b63b8e1db9c  bfd/aout-sparcle.c
 b6a4558a2c7d319f6d570a23ce81b1db  bfd/aout-target.h
-22e4eb1022de9eb752738eebd980b1c9  bfd/aout-tic30.c
-a840f061d05ebff08fc9b147c0bd2c3f  bfd/aout0.c
+b5b4558b39a1545b4c993c1142889a43  bfd/aout-tic30.c
+6d5fc62bcbac7f92c6ad842268888378  bfd/aout0.c
 c13beca7dc743efbb13bd2c0091a2d41  bfd/aout32.c
 e028cead3cc51cc3eb131e35b66c8813  bfd/aout64.c
 1aec204d64d5b321d35def886f46e078  bfd/aoutf1.h
-5a92a9bb5c133fb99f62d2504c8a6437  bfd/aoutx.h
-8087ea866defe89564193c80f6ad2fed  bfd/archive.c
-15c4097aac815e15f674c0609aab3f4e  bfd/archive64.c
-b2885675202ad27cea1d512ac4ffc052  bfd/archures.c
+0f6ed663a22aac0cf80781ffc5bbdcf5  bfd/aoutx.h
+28f9096e508407bb193482c4d207feb5  bfd/archive.c
+b4663eef6f5ec4e062c33a3675339676  bfd/archive64.c
+34cb778f6aceced6f88adac47070d296  bfd/archures.c
 5ed657bb294400d6c36a8c00ee83ad48  bfd/armnetbsd.c
-943acf964aaee8b88ad0b60c271500de  bfd/bfd-in.h
-853451d58f51d87a0c04709eed9ef86f  bfd/bfd-in2.h
-eaaca5af5a36653c14b81fa04ef705ae  bfd/bfd.c
+67ad7e507d96f317d8b3d7e6a7910d32  bfd/bfd-in.h
+c0048d8ad52f920266f54885d3313827  bfd/bfd-in2.h
+b550c5fd87618f1cf945efb66f11e83b  bfd/bfd.c
 5f01e2a009218852c42c63d1a20bcdb9  bfd/bfd.m4
-7fb120c19da2c4d96d86e53e105ae059  bfd/bfdio.c
+f1e720bf594cefb4af9f987bc510b89c  bfd/bfdio.c
 da4c12f9e0f77a2d235b154c536a439a  bfd/bfdwin.c
 91164da037fb2dd5a84678adde4ac3cb  bfd/binary.c
 cea32a666a0713e7835609a9bcc6d907  bfd/bout.c
-86c96e8a5c3afb021ed2bcb18a31675d  bfd/cache.c
+49412bb05cdf3c5efd41c6d8e2331cb6  bfd/cache.c
 c97717d51efe6661f46119e4e1ea4db4  bfd/cf-i386lynx.c
 18f09a3a9b17fa7bff19b95588827a37  bfd/cf-sparclynx.c
-8501ee115266f28cdb1105eae2f7f520  bfd/cisco-core.c
-a273ad57cbee716afe73dd5b2ebaf817  bfd/coff-alpha.c
-b2c01d9e98c123ddf643f51d22752aff  bfd/coff-apollo.c
-4ed770f7721bc206fd80e8ccf1ba68d1  bfd/coff-arm.c
-aa42b42d63542892d67c2c0ede9dd6f2  bfd/coff-aux.c
+88ee7c6aa85fb446a0b1c19fa0ba564d  bfd/cisco-core.c
+801b3e9b9ce82571bded3444ef487ffb  bfd/coff-alpha.c
+a9c5cd8e9c43829ec43055139e9684ed  bfd/coff-apollo.c
+149bb251e8a66ff40e77f46494d48411  bfd/coff-arm.c
+6a450251ed7583fffcdd4fc593f8723b  bfd/coff-aux.c
 f5b2082a5a1a29c38e706e3d9c0a8af7  bfd/coff-go32.c
-7ddfa118cf2d72e10c168401199d0dd6  bfd/coff-h8300.c
-4a232faf6edb35141b68834d82bb444c  bfd/coff-h8500.c
-227af7ae6cd2d71d3c540cd9c8fa4c55  bfd/coff-i386.c
+f70c44caa4a16a32b590203c70048d5c  bfd/coff-h8300.c
+76a0cd09ba8e37e7ea9154d0655d947c  bfd/coff-h8500.c
+38b6e8c5a1360cf3d814587a2f2d0676  bfd/coff-i386.c
 5b8269256cd88c3dff19f7fe4d360133  bfd/coff-i860.c
-88c3e03e382595443e0dc771b7f2b8fc  bfd/coff-i960.c
-0a8f5c6759e6065b6819d9a4e6e08d21  bfd/coff-ia64.c
-4c9e31191b7a19aa9472ca3620c5d029  bfd/coff-m68k.c
-f2a7f3c126540e19b45d69c87d18d4e6  bfd/coff-m88k.c
-57fe1aeff47ff2dd8d1cf5c95e8ea7d1  bfd/coff-mcore.c
-e91ded3cde01135aea6fe90387fa6224  bfd/coff-mips.c
-530adaceacad1b71056d11d45b68fa62  bfd/coff-or32.c
-1ec92d761b8a010714f50e07c9ea50cd  bfd/coff-ppc.c
-fabffe73c3d674c43c621a1e76a8baa8  bfd/coff-rs6000.c
-3ae7c591751dfaf16f40033b20b1e5b5  bfd/coff-sh.c
-cb5ae8ecdedba094ce170c3d3cb895c9  bfd/coff-sparc.c
-12729aa3dbc470a175f0a1a39b2e9952  bfd/coff-stgo32.c
+c33e7b476fff49257bec843b4b756e64  bfd/coff-i960.c
+8aaace2416bb5a5e839b5d52475e5748  bfd/coff-ia64.c
+b25e2042f47980c6becb453b011e4e54  bfd/coff-m68k.c
+478077bc20e72323269b4c1947f48cf3  bfd/coff-m88k.c
+29257ce696471fd92d98cc2b5aca10a1  bfd/coff-mcore.c
+2570032f208b0d356702bfaafae1ca37  bfd/coff-mips.c
+8ea216f62c9ac4a2eb48a5c0278065c0  bfd/coff-or32.c
+92a096408c4ed498c9b996ce60ae0ce3  bfd/coff-ppc.c
+013360a2a10ee578f0ef63b9b5b1cc41  bfd/coff-rs6000.c
+dd07936c4738bef74a6cedb74ad3804c  bfd/coff-sh.c
+8e875336f2874e801daca2e0ce78bb22  bfd/coff-sparc.c
+1fc6bf93a05ca32a3c1cc60bebfe5520  bfd/coff-stgo32.c
 d875c398d7e93cf42aec58884a374a37  bfd/coff-svm68k.c
-7069bf46919a4a7c88a33483a2813a40  bfd/coff-tic30.c
-ee9a930e5bc9ca7ec06a7d698d6d3a22  bfd/coff-tic4x.c
-6ab56b6584158b01d2dc3e0460a493bf  bfd/coff-tic54x.c
-308b9b8b5dbf0373f664dab323a75a6f  bfd/coff-tic80.c
+d09f953d0733cc807d26da54686915e8  bfd/coff-tic30.c
+1248b7f868384a6b2d45700bce3c2dd4  bfd/coff-tic4x.c
+b86f2e7284cccc60308be84893b90788  bfd/coff-tic54x.c
+3fd898eecd175b71dfbf37c643ef4507  bfd/coff-tic80.c
 6cd06305505a30c517e919d2e55a1ada  bfd/coff-u68k.c
-81a19edd9de0c77a9148f421d84a2aed  bfd/coff-w65.c
+dc9e77c5a0af641664c4ca31677bdb96  bfd/coff-w65.c
 4f9c0de80ce9266b55bb00bed21c9389  bfd/coff-we32k.c
-76d38bbfad6e0f7805310cb3688073c2  bfd/coff-x86_64.c
+3e15e63b01d5dfdcebb922c19aba29d0  bfd/coff-x86_64.c
 8277a49e1403d5308d984580784a3275  bfd/coff-z80.c
 7d0efdbb284f00939c3d7f6de24235da  bfd/coff-z8k.c
 a193f92a3d6988382254678ca0ed6776  bfd/coff64-rs6000.c
 f14d6b203ba54dc0d7fa9a8934ceaa62  bfd/coffcode.h
 69dbf7533411b592bd3c9ab0b5fa90ea  bfd/coffgen.c
-3e5bde29e523fbe6896ecee3268f39fb  bfd/cofflink.c
+d6c79155449faf5ed698eba62cc8ee6b  bfd/cofflink.c
 8b735739122823a277e225a45fd2fa80  bfd/coffswap.h
-32c9c99c1e104818523f13d4011113e3  bfd/compress.c
-50e0283cdf988e329ec94db04b7e8884  bfd/config.bfd
-d7a8c5a505ff94107d2f8f53d787283d  bfd/config.in
-a15dcde416d8e98c3c583a16ac112233  bfd/configure
+c9da998c65c90a60a85faf7c1a4fb608  bfd/compress.c
+b1681e5d2bcefc96b8cced0c1381181d  bfd/config.bfd
+2e396fc67f31a7790e5d944253555011  bfd/config.in
+acb6f45a1cd6f7d9bcc2f557340f1f9e  bfd/configure
 62648cd0ae8a4495a8ccd686cf18e445  bfd/configure.com
 15a3950292cca2571a79f5abf7c01e95  bfd/configure.host
-df5b1ca458097e58c15ffcf4719571a4  bfd/configure.in
+020cda79294012fea450bdd5eb91846e  bfd/configure.in
 0ad57f9869ce6685635952c413d30c3b  bfd/corefile.c
-89ae5a994f899638bc8effdc8bfeac34  bfd/cpu-alpha.c
-3d9623ebd0055cc23a9f84929db2cf0f  bfd/cpu-arc.c
-2704edffe71c370ccbe87e05a4f7cb95  bfd/cpu-arm.c
-af052e4ae39ea5e5ab22aba781f37417  bfd/cpu-avr.c
-e5359870df01083e350eec26574fc25f  bfd/cpu-bfin.c
-6ae40f951ba2fe744d05c06bc8d64f80  bfd/cpu-cr16.c
-e17372c3409e4b59e5448e1e7d3b65b0  bfd/cpu-cr16c.c
-069151362a6520c1de16762c0e32d588  bfd/cpu-cris.c
-560c01c276ce3d26a8a1ec6136889299  bfd/cpu-crx.c
-5926f1162d10b02d270d85e11695e618  bfd/cpu-d10v.c
-f39f657b7b404cedd71c44b3254d4fa8  bfd/cpu-d30v.c
-95ff9999519ba7119f67bb87196b9678  bfd/cpu-dlx.c
-5aaa963cef0e4f845eb52685a227e623  bfd/cpu-epiphany.c
-d864f35a009e75e369acd1925a7d1056  bfd/cpu-fr30.c
-8dcd1222ed2acbca6844dc6cfd246310  bfd/cpu-frv.c
-86fbd5e47ed20f51b600f454f2c78600  bfd/cpu-h8300.c
-092d206aa16c5f74936f5dacc4375a4d  bfd/cpu-h8500.c
-b1e25b270596278333ccbe5a8cb86ada  bfd/cpu-hppa.c
-3f79e3c79d70b495d1de3c4e132d60c8  bfd/cpu-i370.c
-4d40f51e511b7105d8586c2a77cc4609  bfd/cpu-i386.c
-826adfd8cdf1ebd3ba4c77f8b84c1654  bfd/cpu-i860.c
-2d8e643f66d80ec33b312b2ccd7476cd  bfd/cpu-i960.c
+80da78edc286647ccdfe7ac1beb7847f  bfd/cpu-alpha.c
+650a879bd3894859b9d879c6bb99b8b3  bfd/cpu-arc.c
+43b9a08d50ee28b548b55ecafb050119  bfd/cpu-arm.c
+bf11b8bbc1216b2ad0dfe33e3ac4e75a  bfd/cpu-avr.c
+f39ddc826cee0d98c0ed4bdd393f1329  bfd/cpu-bfin.c
+d1fed14fd63c13b4ee6837c929cc6796  bfd/cpu-cr16.c
+7141bd386229dfe9e02cb01c2d5b0e7a  bfd/cpu-cr16c.c
+f8c8fcc4569d002851e51d147166daa0  bfd/cpu-cris.c
+9b6d6ed1c4fe80923492cb5ea8b6fe52  bfd/cpu-crx.c
+8582c054475f2d547af273c8df0858ef  bfd/cpu-d10v.c
+8d05783356368d9c61864556fa47878b  bfd/cpu-d30v.c
+7fbddfe69f37461a77cfce211d239c29  bfd/cpu-dlx.c
+732d44155653990b02c5c89118a3165d  bfd/cpu-epiphany.c
+951369b8790aac848b83f5429ef74a30  bfd/cpu-fr30.c
+1eab51ce3868536310aeee86763e2694  bfd/cpu-frv.c
+12215ef788a560186a674dcadf42c42e  bfd/cpu-h8300.c
+82178b4c95a87335d7e8beceef9307a8  bfd/cpu-h8500.c
+3127dde613298950f74c23ee7a4afdf5  bfd/cpu-hppa.c
+5706c1cc7b3f32f3354de1dd910dda00  bfd/cpu-i370.c
+be10b5ca072bbb4eed94cd04bf712210  bfd/cpu-i386.c
+9242cec48ca63c6c0057bbd8b89e4cf0  bfd/cpu-i860.c
+a0050d52ab1b2135fb09e5ffd2b41125  bfd/cpu-i960.c
 5198b542f07fd7f52a9c9c827af5616b  bfd/cpu-ia64-opc.c
-5839e4309c4859d3a174765ed3522a85  bfd/cpu-ia64.c
-4524bde19eeefda082bbccf768e5df5d  bfd/cpu-ip2k.c
-a2acba4eacfcc83d555068c6f0747bfe  bfd/cpu-iq2000.c
-c6206efb34e3f17af565d0d90217d49e  bfd/cpu-k1om.c
-d9b66debce1820c2ebda6ae3d325034f  bfd/cpu-l1om.c
-b44557a52ae7803692123f34d71373d0  bfd/cpu-lm32.c
-8477d902c2e995b5c9c3a6cd7370d100  bfd/cpu-m10200.c
-ca560e934ed5d367ab80dfaa757b7d8d  bfd/cpu-m10300.c
-5d1039c31606332304242ec3758ec79a  bfd/cpu-m32c.c
-774bd19ed65dd7505c28891bd4407b7b  bfd/cpu-m32r.c
-6ab713aa0b98d8a7be5910d74bb75602  bfd/cpu-m68hc11.c
-0266f22c1e79ae970ac54fc740c74147  bfd/cpu-m68hc12.c
-e759187831ad93284a9e4fafa69abe16  bfd/cpu-m68k.c
-6ed4ee0ee7447a9ab467d28742627be5  bfd/cpu-m88k.c
-c30d43d274800c9418fb244acf5b9641  bfd/cpu-mcore.c
-45df80823f40d77dd8495b7d52f1ebab  bfd/cpu-mep.c
-d0466065fbf0bc773645f7dac657355d  bfd/cpu-microblaze.c
-31fcb1cbfa66b62adeb1e51c8539daa4  bfd/cpu-mips.c
-33e393cb256971b30a150f50f9ceba7d  bfd/cpu-mmix.c
-0e566a384c3cb42d225def6d79d9105c  bfd/cpu-moxie.c
-f959ee5623b67d571f8c6ef764638591  bfd/cpu-msp430.c
-d87f62d816eab577e24ed00e8a1dc82b  bfd/cpu-mt.c
-07ba0d23ca8f838e8ba9b1e2f69cec8b  bfd/cpu-ns32k.c
-c204abe1385d8544a04782cd3e547a8e  bfd/cpu-openrisc.c
-6a9152a776286e937d03812caffd06b0  bfd/cpu-or32.c
-5bc8a2a42fd38ca10cd19c8ff17017ee  bfd/cpu-pdp11.c
-fca5332e71878803a9b05ba6d7ba6bcf  bfd/cpu-pj.c
-1fc49dc67fe8b86991f8e70759801a6e  bfd/cpu-plugin.c
-32730f9ced53f4ea96609868534c5024  bfd/cpu-powerpc.c
-6496f67b92582d7e76e5cd14b5e07831  bfd/cpu-rl78.c
-639cb93eba287cb8262c9bab69aa1de7  bfd/cpu-rs6000.c
-ecb4883b6df0b09e6a32f0f40b4915f6  bfd/cpu-rx.c
-f5bbc07515c3e51d4c91b68abc89226b  bfd/cpu-s390.c
-749c338af5feda4b61c32ac7cef3c728  bfd/cpu-score.c
-15511c9f15aaea5a8fc8cb8e0616feeb  bfd/cpu-sh.c
-26bd80a3fd973f6d0e39f7d58bbea060  bfd/cpu-sparc.c
-21a1cb9748c501a39e5542af1f33b611  bfd/cpu-spu.c
-0d01e90a8372e857cf93e1915267d99a  bfd/cpu-tic30.c
-5192f963df80aaa7f8f36fcc8d7e1f89  bfd/cpu-tic4x.c
-d7ee6d0c52826b6aa0c140bf6927cdc8  bfd/cpu-tic54x.c
-d25b25f15f2f89a009660d3777f11223  bfd/cpu-tic6x.c
-74924c54241882e67602fa5cf483a8e6  bfd/cpu-tic80.c
-68faf06d37979aae8db77c6c2de50262  bfd/cpu-tilegx.c
-6468a45886e5ff9b0db680d6d6433cae  bfd/cpu-tilepro.c
-948c2e6044fe797fb4e11a1db823b5b9  bfd/cpu-v850.c
-669042112776344f813a6a91ce53a409  bfd/cpu-vax.c
-966c37d73c083aeee8959e51c49f28c9  bfd/cpu-w65.c
-d5271485a1353b275cc69acf7332b4ff  bfd/cpu-we32k.c
-11a6c47e1d51c8bf25715e420f9df31f  bfd/cpu-xc16x.c
-4124b3a9995f1e85b9a3bafe5059b4b9  bfd/cpu-xstormy16.c
-db4d0b1da7361125abfd80f312a43052  bfd/cpu-xtensa.c
-e17e159f98955683b8194c5d5df31e96  bfd/cpu-z80.c
-427e6473e9ad2e878ec987152e3cff2a  bfd/cpu-z8k.c
+1cef3e1ac7e6beb30daf5eb59dac58ad  bfd/cpu-ia64.c
+949afc1f9dd18e5799abe4c638e65604  bfd/cpu-ip2k.c
+546640a80c1b867a387381e1eee30607  bfd/cpu-iq2000.c
+eac533ea503f7ce587df2770cab0d459  bfd/cpu-k1om.c
+1be7d420c85f1c04a2ba04e1115f49ab  bfd/cpu-l1om.c
+0303c1dba2093a974d9248aba693021c  bfd/cpu-lm32.c
+5e5e95e91ba4fef3dd491fda19db54c0  bfd/cpu-m10200.c
+61223783ade40fecb9e0dd5a8fddb8b6  bfd/cpu-m10300.c
+5bdcb0777ada79fecad6acd7f24e9623  bfd/cpu-m32c.c
+dfc730af18ae0b7562145571c2d67c41  bfd/cpu-m32r.c
+1bc6dc489783a6fe7462a69b44b0a584  bfd/cpu-m68hc11.c
+bc780b7e5cb31ca64bbe92eb1efae1cc  bfd/cpu-m68hc12.c
+3f4006dc6fdb99ba8a8e0b4058947a6a  bfd/cpu-m68k.c
+4a23a467327c93a88608d9540a020fee  bfd/cpu-m88k.c
+57f9bcf149f6869e8089ea220de8a6ff  bfd/cpu-m9s12x.c
+f52e1a5b5abbde1504604bda6f1b891c  bfd/cpu-m9s12xg.c
+54ab04a87b825d17fdb5ef3dde5692c1  bfd/cpu-mcore.c
+b959779119dbe1f0ee745da2ab5b1872  bfd/cpu-mep.c
+bfb7b056c2c6359919adf272c3e78ffe  bfd/cpu-microblaze.c
+b832fe4dfb95d8f2846da145ca380b47  bfd/cpu-mips.c
+2e21e585fb67afaffd265f709df8d96c  bfd/cpu-mmix.c
+101c3f1cce03d3004f9fee91aff8ef04  bfd/cpu-moxie.c
+48b171951d866743ef8c631737317269  bfd/cpu-msp430.c
+70d84e39ef27faf103c7d50d73d8431d  bfd/cpu-mt.c
+14daf53f44846e0adf24caa24bf52257  bfd/cpu-ns32k.c
+c20c3f1e9dba1f4ca27d1a06ade015a2  bfd/cpu-openrisc.c
+2ff6df3d8f2df290dfedc17bce1946c2  bfd/cpu-or32.c
+947b1e64ba2f8c14173a5c458895f342  bfd/cpu-pdp11.c
+57f0db63296c32a27b1d9db173eaab73  bfd/cpu-pj.c
+615aafacb9c91c273605cbb197f1c648  bfd/cpu-plugin.c
+0a483c8d4c107c8bb2c691674be98447  bfd/cpu-powerpc.c
+26ed5ff74f1dc195706d7bfd9245740e  bfd/cpu-rl78.c
+be6dcb896af2af0331fd0877a2230b25  bfd/cpu-rs6000.c
+30bb118e27b056030ba33809380bd65b  bfd/cpu-rx.c
+91aba870515885a8da2f09a2ef4e013b  bfd/cpu-s390.c
+74f11aaecb1fdb7dc8634a9fa83652e5  bfd/cpu-score.c
+a3abac62db3aa0a5b932cf1532ddc3a2  bfd/cpu-sh.c
+380a45633d70077d120171bfa352861c  bfd/cpu-sparc.c
+088129b04a8dfe918144f013e0d9fb75  bfd/cpu-spu.c
+f25c600fef52bfaf2e655b88cfd3e323  bfd/cpu-tic30.c
+5ddc6d571a6730591dfe99e69348a25b  bfd/cpu-tic4x.c
+7944adcc0e356862a28598769de73fc4  bfd/cpu-tic54x.c
+f4e4fde73b678460cb0e66077b6bac21  bfd/cpu-tic6x.c
+6d816216f3d9626ec46b5e726531fcd0  bfd/cpu-tic80.c
+61035a9ec1c8ace84fb7d95293f1437b  bfd/cpu-tilegx.c
+115e023b5b903e7f6cd7d5477aa99dd1  bfd/cpu-tilepro.c
+aec4c18d8e54f6c6c0285e3dcf82d598  bfd/cpu-v850.c
+20df59aa22b6373110c8ff5f597064d9  bfd/cpu-vax.c
+95307a7f6868fcf839f4c9bdd35463d1  bfd/cpu-w65.c
+ff93a53a3a6c12b6d37102e487cc868b  bfd/cpu-we32k.c
+c7d358ed7974193e01b2bfa0a5c4ed93  bfd/cpu-xc16x.c
+b50493dbeeb6a6c72d74c195d4334bf9  bfd/cpu-xgate.c
+986087ba257917af042f8c184c3cd7ea  bfd/cpu-xstormy16.c
+973084456c9fa330b3b39bd3f1055ee4  bfd/cpu-xtensa.c
+74d32711262a5e76c0f69f65cd2d49c8  bfd/cpu-z80.c
+bf0b3463ab0847d483c28446c7efea99  bfd/cpu-z8k.c
 1870cebc00e9a18f8aed220ba7c8cef9  bfd/demo64.c
 dad496c68df8395b3cdb8e3187c37eb1  bfd/dep-in.sed
 35a51081f68984bab0850ecc54b062cc  bfd/dwarf1.c
-3aec11a9a3dff2ac45872d416f0d24e5  bfd/dwarf2.c
-0ce39c90208b12ef2a4c178187c4db54  bfd/ecoff.c
-d2787db8fdda32e6f28c6635fed02cdf  bfd/ecofflink.c
+e8e8999f7c14ff3775d63187b41f5296  bfd/dwarf2.c
+bab98af3e6cdf4a18282124e28ef8f5f  bfd/ecoff.c
+e024d27cc4adad54cd323d8145270375  bfd/ecofflink.c
 67df9e1bdfc0782dd9e6ad00f505f687  bfd/ecoffswap.h
-f51b03b3f2dc74522822ae4dc9ff1eac  bfd/elf-attrs.c
-eac365875f15da8d160ed963cffb981d  bfd/elf-bfd.h
-eb6e0c9a65e4ef6e60ddb8d84c42fc85  bfd/elf-eh-frame.c
+7aa51841682212c68471b2474c0d9b44  bfd/elf-attrs.c
+98d1a178848e5fdb9593bd2d43998fb3  bfd/elf-bfd.h
+cf3454fb601936a512dc067442f49076  bfd/elf-eh-frame.c
 ab61804e1d5adeef7a190158af639583  bfd/elf-hppa.h
 9cae244d87acec3e44ecb339cd364e13  bfd/elf-ifunc.c
-7b1fa717b0323857568400b252902312  bfd/elf-m10200.c
-f95b632fb43c59dc8fe3ccd45aeae792  bfd/elf-m10300.c
+b0ff68a67f424eba03155c2e422a5cbc  bfd/elf-m10200.c
+c0798f68c8d6c34538113663162d3b68  bfd/elf-m10300.c
+a1a8bc1604d28751ebfbf1b153d13ea8  bfd/elf-nacl.c
+b4fa755b5de6ee09200eaac46b2682fd  bfd/elf-nacl.h
+99bcf3d3076ed424b44c96352a9d5d9c  bfd/elf-s390-common.c
 299214fa9cc7a7bac4c32e3ad1028389  bfd/elf-strtab.c
-42ee16947225b1bc6c90ba81f1869381  bfd/elf-vxworks.c
+14ba21bec7329b1dbf47c9b5cf2097b7  bfd/elf-vxworks.c
 558028f73662a4a2a2df3932d23a30b9  bfd/elf-vxworks.h
-546131e3d2cecb61327add146606f129  bfd/elf.c
-87f5612eba792da8c039b1c0e59ee24a  bfd/elf32-am33lin.c
+888d5b5c0ad3524ef5453b970f7625d4  bfd/elf.c
+cb42660b5a190a46276f0f8b169d3c19  bfd/elf32-am33lin.c
 9d03e5cc8b0719b6fdb483746ba834a0  bfd/elf32-arc.c
-424425f25a28a08d8002dade16e2d102  bfd/elf32-arm.c
-8a04ed7a1f6cd6dc97f5448e168f8a90  bfd/elf32-avr.c
+7f73ee903883df9a058d51bf38ac73b0  bfd/elf32-arm.c
+5156e0bec67c174d85429da97b8402b8  bfd/elf32-avr.c
 f6846e8628e2f26f82fea28151906429  bfd/elf32-avr.h
-fe7b88880a50156a442335c07de57f70  bfd/elf32-bfin.c
-80c3d3a4891d10d7ad684e8466c1935c  bfd/elf32-cr16.c
-2cb217d76cc527cd60817ecd017cfb10  bfd/elf32-cr16c.c
-7c97198b91db2bcfb1cd0671dd0e8cc9  bfd/elf32-cris.c
-4199171d3be10b6d06353d086c2f1a15  bfd/elf32-crx.c
-0778b06b2ee2d9f31f428d7302e95cd4  bfd/elf32-d10v.c
+81afb4a4bc843d9316910f039f785905  bfd/elf32-bfin.c
+d8b363c11b8a709b3d95ca6dbf03e971  bfd/elf32-cr16.c
+6c06da6f73e61df25f3fbf89f37fd1a6  bfd/elf32-cr16c.c
+b58efa188bdebfcde7e852c9d64dbc0a  bfd/elf32-cris.c
+56f70feba9900b92bdf6e54755b14195  bfd/elf32-crx.c
+0769eeb4e6b604de27a5e3d2133da027  bfd/elf32-d10v.c
 e9aa232096cc8fe8d530c39db7358897  bfd/elf32-d30v.c
 9dc2c3083007d055584a29f2c4bc0e08  bfd/elf32-dlx.c
-7f3ed6e241a87c08223fc09fa76e344c  bfd/elf32-epiphany.c
-d78a2835c4d0bceffddaa93868b67074  bfd/elf32-fr30.c
-556382e7f7004010a06f20be80999565  bfd/elf32-frv.c
+9f0a163b8aa24dfdeaeac8300a8b6070  bfd/elf32-epiphany.c
+59017b369bab45d682a696ccdfe9b84a  bfd/elf32-fr30.c
+5be37942894e79993bcb7092c28ce2e1  bfd/elf32-frv.c
 2fbdc5d0b99c7ed22cbbc0b5082feb95  bfd/elf32-gen.c
-7b9f8da8c6251fe91c970cfcb78f6482  bfd/elf32-h8300.c
-e40278c0da24ecc863157aed578257c0  bfd/elf32-hppa.c
+93211d80c4915fb5cef407540e846927  bfd/elf32-h8300.c
+14b5c5ea8ecbefd70dc4e456238ccfb0  bfd/elf32-hppa.c
 0f3b87f69654d5b2726d626a709cc9b3  bfd/elf32-hppa.h
-5a8acd43eb2d3729383c2114eab34050  bfd/elf32-i370.c
-90e1213169eae846c2e8c75a6438c053  bfd/elf32-i386.c
-ee57a120f5721538749d61aaf9191a97  bfd/elf32-i860.c
-af76e3dde2241645d746bcb82f2f86ed  bfd/elf32-i960.c
-7135d21aa3600609ccc0d7fa3535013e  bfd/elf32-ip2k.c
-c98d5aea99470a393a8ae31c4980f4d4  bfd/elf32-iq2000.c
-6dc69d4caebdcade1797a640339a7154  bfd/elf32-lm32.c
-07646154bfb59e81a76168ad0a88aabf  bfd/elf32-m32c.c
-e01e456390bd635b7184c6d0be290d3f  bfd/elf32-m32r.c
-6428c04385c66ae14d4bca296623bac5  bfd/elf32-m68hc11.c
-51df867fbf4d0ae3b47d176786169d58  bfd/elf32-m68hc12.c
-77443960526ec549d2209447c26a1627  bfd/elf32-m68hc1x.c
-494e09c13f3a731ad18d5190e4443db1  bfd/elf32-m68hc1x.h
-b33d7cd8ab3da691c1726c32eb5a1898  bfd/elf32-m68k.c
+f20758cd134417245e93d4e1630e8393  bfd/elf32-i370.c
+59a980c01a47b9115d3473fc351edd97  bfd/elf32-i386.c
+9403f486c5d3c420120948775c56298d  bfd/elf32-i860.c
+dacaf9ee79c84591bf8de6cb67f8516a  bfd/elf32-i960.c
+cdc3b6c2a1cdfa17107a006a328ba854  bfd/elf32-ip2k.c
+fbf640c1cdf44f11498a5ff1c346ca48  bfd/elf32-iq2000.c
+1823e101b275595b0e3eb610fdbcfcaf  bfd/elf32-lm32.c
+e9772d477b6a32f3b956bd97e9980eef  bfd/elf32-m32c.c
+0ca10906efde3d869652ade526b66098  bfd/elf32-m32r.c
+893fe0b81664f9d3f807ed875d26ef4b  bfd/elf32-m68hc11.c
+024f2bb7c2097073069d066e730c6459  bfd/elf32-m68hc12.c
+77d1310b7bc65337a5c98e0e4176a5d6  bfd/elf32-m68hc1x.c
+ae5eedddd31cbdc1cf1ab6e1d701dac3  bfd/elf32-m68hc1x.h
+acda83b650b4f832f3be80353d4952ff  bfd/elf32-m68k.c
 24c6dfe183b600fba2f348e08fe8b3c5  bfd/elf32-m88k.c
-21fb6613e678ec26d3b4570c8f2c0cec  bfd/elf32-mcore.c
-51d8efff5c1ef19d9f00d5a3254f0d38  bfd/elf32-mep.c
-88182211b25497f444b6a7afc35acf90  bfd/elf32-microblaze.c
-0c5b2d824b73533f8de8e1998a3eae9c  bfd/elf32-mips.c
-b4fc78e1f9a3a0e45fbd692fdeb30584  bfd/elf32-moxie.c
-624f58a4f62a23ad6acf2ed1ec669282  bfd/elf32-msp430.c
-68f00b7ffa1d86f18e630f7c48693457  bfd/elf32-mt.c
-018af022914aed2c14aea3f6e1b7a8a5  bfd/elf32-openrisc.c
+c5093d9da73eb811b8cf4374800c839d  bfd/elf32-mcore.c
+2fbfcc1c89eadcc94bc0291669e60ea5  bfd/elf32-mep.c
+ba431f86f5e6364ac6dfe6dbe911fa23  bfd/elf32-microblaze.c
+ef493263dac2bc1a64bfbf848db93f2e  bfd/elf32-mips.c
+a1585f58c273b4186bdde805f44e1f1a  bfd/elf32-moxie.c
+47bb6c5c358c1891ff5332df9fd1fd16  bfd/elf32-msp430.c
+e61947b747afd688e1fe5dba8d30308d  bfd/elf32-mt.c
+daa6f7cc78b29d34dfa56afcb0701c13  bfd/elf32-openrisc.c
 468e5e58c80e985dfbfa201ce07fe4ba  bfd/elf32-or32.c
 140b65ea1bdd039c81067900b5124da8  bfd/elf32-pj.c
-681bb2243544c980f5bf8c5c2a600f16  bfd/elf32-ppc.c
-365a056a6b67a82bc90fd684ae12a82c  bfd/elf32-ppc.h
-f1894e9cf819f300cfcf31a7164594a4  bfd/elf32-rl78.c
-9430d1f815580f05ebdc0036bb9daaeb  bfd/elf32-rx.c
-c37bdd9b33dfa8bbbe83364ef1033101  bfd/elf32-s390.c
-8d87a8b0caa7f8f4f48b4f959bd52e49  bfd/elf32-score.c
+3e79d099cf9c5609e5cecdddc4e0c65d  bfd/elf32-ppc.c
+847207b9318f62b8e7139129bca3d0f4  bfd/elf32-ppc.h
+8069bccb1098840863c1eae7c8e379a8  bfd/elf32-rl78.c
+5798162d9d33012b11990803696ac3f9  bfd/elf32-rx.c
+cb650f2c2e3a4663fcc0bc143b59e592  bfd/elf32-s390.c
+1c5040aa929822a6be5b599478b979eb  bfd/elf32-score.c
 0ae85011185c7162178de9dc0acabc90  bfd/elf32-score.h
-b99fa646f5da8708b636b46b8b162faf  bfd/elf32-score7.c
+f77c899cea80bee217545eba9a694698  bfd/elf32-score7.c
 1452b80dbcae3a156632f017e6a9e1b8  bfd/elf32-sh-relocs.h
 70d7820e62a8d4c8da02a1ce5f0fe3db  bfd/elf32-sh-symbian.c
-db77082aa043751ca9c8c6af93442908  bfd/elf32-sh.c
+85e154581661ba364dfa9b7f9f777e5c  bfd/elf32-sh.c
 c3e727bdfb7a73954c1f7ea914d5de0e  bfd/elf32-sh64-com.c
 a1e9a3c25fd579771da3e57df20efbdc  bfd/elf32-sh64.c
 1fa268e389df0b3304de7d965589da01  bfd/elf32-sh64.h
 23b143cc38a09a53a9410a8cea1f96b6  bfd/elf32-sparc.c
-947d1fb1ce9e44a3367a79fc0f78a981  bfd/elf32-spu.c
+dc3f7fe42afd87cd448d56ec2c35911d  bfd/elf32-spu.c
 e48841dba20a31a21c00d16af64ee8f8  bfd/elf32-spu.h
-52c5196f2718ad68df91e44bbf7179a2  bfd/elf32-tic6x.c
+17fb8f1b593789fe578d37ff98cb9712  bfd/elf32-tic6x.c
 e24c26414c8cffc67b83fcb4bcfb2a55  bfd/elf32-tic6x.h
-8d590e9b423120035e03e29ea8ff74c6  bfd/elf32-tilegx.c
+7804eb5f39e0f9c288846d000389a15e  bfd/elf32-tilegx.c
 5a56e51411354a0c6dc6fd74f5896da3  bfd/elf32-tilegx.h
-411568003c2063f00a7fefa1a5868455  bfd/elf32-tilepro.c
+f8d1ca42090979195481070ccdab6534  bfd/elf32-tilepro.c
 b1166d035ecbc003403a55552fbda550  bfd/elf32-tilepro.h
-db7c5d5a4b5687078101c68578e80875  bfd/elf32-v850.c
-73b985af7662709f58504440b0a1ddf6  bfd/elf32-vax.c
-1e2e75212cde3fa3a9263dd49dd3a972  bfd/elf32-xc16x.c
-f759e10eba5ac63622f6a60717b69b7f  bfd/elf32-xstormy16.c
-ef428f33af2e760f3ed7d61bd5944665  bfd/elf32-xtensa.c
+8523cbe34da569159b06844072b46bf5  bfd/elf32-v850.c
+6c659be50e316da841723865f1b08a97  bfd/elf32-vax.c
+be8cbe51f5467ddcde924588fa08f728  bfd/elf32-xc16x.c
+feb45378a7834b9145144ffc0e57caea  bfd/elf32-xgate.c
+8e9d8c054633b122ab136f8dfe2d4481  bfd/elf32-xgate.h
+2185e90f9bc97bc4a31e04ec99b92ff5  bfd/elf32-xstormy16.c
+d41d0d8a2e613c10998909ec30b9f4f6  bfd/elf32-xtensa.c
 19711956ec075d032f0d0b894b11a1ce  bfd/elf32.c
-db28bfb3c7b22416e3401303fe2f1a9d  bfd/elf64-alpha.c
+6484a92a98f0e2d2e5c55714a73f8ae0  bfd/elf64-alpha.c
 cb5514787c5264ee0bc353a2c981561f  bfd/elf64-gen.c
-30bddabed647a2c091e7d6b1dd59c433  bfd/elf64-hppa.c
+8827b6d991244ad54c219c73b32dd12d  bfd/elf64-hppa.c
 9cff3ac6c428477bd9e305540d95e47a  bfd/elf64-hppa.h
-f040a31cb27b6f2c284ad8544c81841c  bfd/elf64-mips.c
-513dd5792664b734fc2b09c3f3ac6fa9  bfd/elf64-mmix.c
-5de2a94ca0d0d3cd6e34de9be29f92b4  bfd/elf64-ppc.c
-5596457fac5cbdd67b8c273d8bb890c9  bfd/elf64-ppc.h
-0d7d2aee8d2be1b90e1c8c706170dc27  bfd/elf64-s390.c
-19955d4d818aae4a65cc161a013d6164  bfd/elf64-sh64.c
-c4873a109e3134d9a9f2a3784ee34d86  bfd/elf64-sparc.c
-4c71d0b2f5f315b45c6b3319ebb770cf  bfd/elf64-tilegx.c
+463a4b7092d2d1347421c70badd9755a  bfd/elf64-ia64-vms.c
+a93978895dc5daa38dc08291c67e1f12  bfd/elf64-mips.c
+97681b7674e5c432437e4da8c4bb02fb  bfd/elf64-mmix.c
+58c08809d3b921d52f230da2eaa4ea9c  bfd/elf64-ppc.c
+3f3c5dc793a8b77d68167c7fcdd88c29  bfd/elf64-ppc.h
+e86c6b0623b3967899aac40513b0b907  bfd/elf64-s390.c
+ae4d690e3b99a4d0979f93a599970ac9  bfd/elf64-sh64.c
+ffea6f7c195c8732ad0a374e78e3aa96  bfd/elf64-sparc.c
+90fca3d6adf7a59feec997a0148be56e  bfd/elf64-tilegx.c
 fcf3f7fff3f72094447832681d4e23e3  bfd/elf64-tilegx.h
-43982b6ba2df76822cb437d96e7ea208  bfd/elf64-x86-64.c
+87bb09fe46249d7dde2a8c48d4713180  bfd/elf64-x86-64.c
 72144adaba3f8c119f115d7af46b2502  bfd/elf64.c
-ac1c1025d0ef7ec8d77e95ce79477c86  bfd/elfcode.h
+736264162b6631ef0dd92c6bb7edaea6  bfd/elfcode.h
 16571e24f21c320a2fac42e3b98494de  bfd/elfcore.h
-e707e8859f996283ecfb51490d8c4901  bfd/elflink.c
-53d8b8d569864cdf9ba183bded6dd269  bfd/elfn32-mips.c
-6bde5bc7002aa7e1264f3034b55f1cde  bfd/elfnn-ia64.c
+a4c5b341f23744179263f36620f1d81e  bfd/elflink.c
+2eec8f38d6b2ff15f7d08aef69337d10  bfd/elfn32-mips.c
+17f942a5e42b86395c217d9f0c58ce0a  bfd/elfnn-ia64.c
 96944bd725981974ba76e887c9dba7a5  bfd/elfxx-ia64.c
 4155caaab977fb465c3e89f068183ee3  bfd/elfxx-ia64.h
-70ad1f78ae4073b55de4b87fe34342de  bfd/elfxx-mips.c
+c3381735330f0ccec9d410b6aef91957  bfd/elfxx-mips.c
 b67886d2b2b2684ff187bcbaf9410b0d  bfd/elfxx-mips.h
-5f39a103dcc2f92195c9c7ded00b5887  bfd/elfxx-sparc.c
+f3143b48a9b27554b0006e30f0a1d73f  bfd/elfxx-sparc.c
 3608d55b3d3531e3572ac1f1acb0df35  bfd/elfxx-sparc.h
-6e620ce23dff38fdedef80039402508b  bfd/elfxx-target.h
-abae63efaa97ceb87b3b13833d796874  bfd/elfxx-tilegx.c
+a5a24fb6482234f8eb800e59beff7464  bfd/elfxx-target.h
+c86c4f2899333382d290e2cc2dac76fa  bfd/elfxx-tilegx.c
 2ac78eb0e9567bd2222495c6f4db43c8  bfd/elfxx-tilegx.h
 efebf716233c08ae64f74104709dc5fb  bfd/epoc-pe-arm.c
 e5062a411407a4e8f94cfe0e931990f8  bfd/epoc-pei-arm.c
@@ -301,30 +311,30 @@ fc8bec4190b9d8fb626bb9395d8c1af0  bfd/freebsd.h
 c3348a714f44a96cc2032f62ee507728  bfd/gen-aout.c
 b0682558ad69d3671cc55f83abebf32d  bfd/genlink.h
 663a6979bd331c91d1385445edeca7b0  bfd/go32stub.h
-6c011e2cc19ef4e5e27d334684ae1fda  bfd/hash.c
+bfcac9eb1512e895b7b82f886e6cbde5  bfd/hash.c
 5078b3985212bed5ac3c79b3b9497571  bfd/host-aout.c
 eb81ed101d0ee1fbe13af6f4e02f7253  bfd/hp300bsd.c
-9a21e2388efe0083ae8b8a00106d205c  bfd/hp300hpux.c
-da4091ca346b311435b728ac95b2f8bc  bfd/hppabsd-core.c
-890ee98a8f03c08fb1f4afa968ae7029  bfd/hpux-core.c
+c302ee6fa46b0207b8afb617f8d9effd  bfd/hp300hpux.c
+c84019afb88cf1094d5542cd1baf552a  bfd/hppabsd-core.c
+1d0f28b87be7e59d8e259a1d1976a179  bfd/hpux-core.c
 f7b33e7dcd153dc5e4a4905f65772e08  bfd/i386aout.c
 eb3bd341db7f74b0dca2de96ac2407be  bfd/i386bsd.c
-4f2221b958ece4a1135c89d376459724  bfd/i386dynix.c
+28bef35155293ca2b7f4cc332554f929  bfd/i386dynix.c
 5ea4b70fac02927d272892127e65a114  bfd/i386freebsd.c
-466e000ec97f9ea53439fe3c4a8d648b  bfd/i386linux.c
-55e553007461b9d12c9723738ce6f6a6  bfd/i386lynx.c
-184fcf53ece8dbc8c3e5452ea60fdadc  bfd/i386mach3.c
-c1e79054ff4fb9e6eb269d78759bc544  bfd/i386msdos.c
+af225fb657021bfd4946cdb418c54271  bfd/i386linux.c
+554a1fe7ddd9fc23109a88322275a03c  bfd/i386lynx.c
+a1df35b230a12d1664dc2fe61adbbe5d  bfd/i386mach3.c
+5be2cec1f8e5fb7b84a6313f05195f2c  bfd/i386msdos.c
 5b4ae611feaf9f968c4d95cc67c705bd  bfd/i386netbsd.c
-e56f8de796808ae21194c7f6825d1c6e  bfd/i386os9k.c
+cb33b29b221c8d37ccc518a7ac90e546  bfd/i386os9k.c
 5172fbc7af7cf6e98fa68a89ea5a5a83  bfd/ieee.c
 534dee991a296275abbe2ebd2c4a136c  bfd/ihex.c
 25509065b1ee664694b3e5c37bb433e0  bfd/init.c
-d0ba25f30c1dd2ec685b8dd421d6dac3  bfd/irix-core.c
+f3797f2e8423e96a6b555cab7c8a531b  bfd/irix-core.c
 291df23cff915aea08424e59437c5b24  bfd/libaout.h
-d925c19f8d8376de7a00cf2ecfa7c8d1  bfd/libbfd-in.h
+4371d2ed3b69ee6ee1799a8f0fb3086b  bfd/libbfd-in.h
 27ec1cbe10f1e22f6404da3ce3387f5b  bfd/libbfd.c
-06b1918761e89623d2c4556b3279a7ad  bfd/libbfd.h
+42f0955fb238d8f4a39de7d25875f137  bfd/libbfd.h
 ae9fa0e2e2751bb74fb473484ba7a673  bfd/libcoff-in.h
 6dea4c4a6442e92e7ddb48c7da2b3647  bfd/libcoff.h
 08ce055f353f29b7dbbd3367cb14d8c3  bfd/libecoff.h
@@ -334,43 +344,43 @@ ae9fa0e2e2751bb74fb473484ba7a673  bfd/libcoff-in.h
 f9d7123c139b25de478c6221908315f5  bfd/liboasys.h
 e6d8fbd8d34251787718d47c0f2b8daa  bfd/libpei.h
 bb3cad08f59e273f335a5cbe04404471  bfd/libxcoff.h
-9697e87eaf1aabede0616a88f5e35366  bfd/linker.c
-61146204dd5df9b7bf0a942be89f1676  bfd/lynx-core.c
+9fdbf14e2495bc349a7ffb4827f8c1f0  bfd/linker.c
+fc8520bd5b0118f88f0b27284de5459c  bfd/lynx-core.c
 47df372ec9d2c9f570e2377a6cd6b2d9  bfd/m68k4knetbsd.c
-bc24228eedac8cd67ef03e2e89c77110  bfd/m68klinux.c
+300748083e4f497c3f496174cb9dfbbe  bfd/m68klinux.c
 c2b3e6b9a0227a6fc3d9589f9413aa30  bfd/m68knetbsd.c
 fc231dd7c10b50f7f56316db72781116  bfd/m88kmach3.c
 884aa3acb0cf92f946c86305530c0cde  bfd/m88kopenbsd.c
-10fb1267e73e26f05b0d1edfd65941c7  bfd/mach-o-i386.c
-354a19111dded756ef0641d0779adcb2  bfd/mach-o-target.c
-15fb1ab9b1ab6344b9f51d9abda19c46  bfd/mach-o-x86-64.c
-ae5f3b0ae03fa49573e2bcc0a738eb76  bfd/mach-o.c
-2e48fbea71b99a30bc0532b833446d5e  bfd/mach-o.h
+4710fe6bd7e3ac927416375ee202d16a  bfd/mach-o-i386.c
+a39fc746042a7a9074b9f4d844cb335e  bfd/mach-o-target.c
+bb6acf1d84921e8712ad6ed3cafa2b3c  bfd/mach-o-x86-64.c
+71b7c16aec06323444704262e79ea9a1  bfd/mach-o.c
+f9d9874d9ece7a1b353317a96ce31785  bfd/mach-o.h
 0a2a01a5564c7bdd57d3c467e570733c  bfd/makefile.vms
 76a44dbc419f39a2d9cdf76d308b370f  bfd/mep-relocs.pl
 7783752d1f86d8464bbfc536d9129d5d  bfd/merge.c
-41c58646711a99f6e4b7b1b49fa91c5c  bfd/mipsbsd.c
+0af41617899d408f0342b2267d5e24d0  bfd/mipsbsd.c
 92d188e365097e030b77d3bceb4d4480  bfd/mmo.c
-e728260ba314147c9534085b7c691eb3  bfd/netbsd-core.c
+00232035ac9d30d72598b22efeb82d43  bfd/netbsd-core.c
 8d66f1b8531156a8b251161840b2cd5f  bfd/netbsd.h
 5ef760be50db7ca763c85e8a57576b63  bfd/newsos3.c
 2260d5d5b17087621f4d22d664caca17  bfd/nlm-target.h
 ada7e1273c745ce6a3446311be52471d  bfd/nlm.c
 e3a11b8c38f8beb8cb380d2556b1fe88  bfd/nlm32-alpha.c
-6fab17bbbab49e405c5403c74c8666d4  bfd/nlm32-i386.c
-15616141c4d4ce3cffcba9fd5a64af16  bfd/nlm32-ppc.c
+8de11f2fdc1bc65388e8bc9869113d15  bfd/nlm32-i386.c
+b15c916ac8e559430bab4e3c4452e2ca  bfd/nlm32-ppc.c
 e65fcc0e9242ddf2063b573b70bdddbd  bfd/nlm32-sparc.c
 6f6955a0a5e3d39a2c31c1d5d7d0ba48  bfd/nlm32.c
 a3d3a8f71632020d3d15fbdc0cfbeccf  bfd/nlm64.c
 03ea9182aa386b08ea2c6d5cb852395c  bfd/nlmcode.h
 94288f2695f9ec23df20e5a82861525e  bfd/nlmswap.h
 7d24843968787ccead71cb5da5c21adf  bfd/ns32k.h
-fdbfd6f37c3c732d7b622b8fd5fdee3a  bfd/ns32knetbsd.c
-248874cdb74bb34c98ecea6a77b078b5  bfd/oasys.c
-99e0c11af729fd8dc4c17a2688a7dddc  bfd/opncls.c
-c01a4933892d6b2e269ee599189401b1  bfd/osf-core.c
-b2884774d5204a41e2560319db40bfae  bfd/pc532-mach.c
-8230605678f13811c21ee094ed61ecdd  bfd/pdp11.c
+636782166ac65cbab820e79b9b410aa5  bfd/ns32knetbsd.c
+d93f88e1a9861147b63bc980772e2d3c  bfd/oasys.c
+a4c256f74ad6c01e1918a2b140375158  bfd/opncls.c
+bcb16d5ea131e40497b809820ffa15b7  bfd/osf-core.c
+9ac71375350838903d4e2ea5e273328a  bfd/pc532-mach.c
+8a6a27cd454a64ef51455014e40d76f9  bfd/pdp11.c
 c730ca7a2061acbed6f26534381508c5  bfd/pe-arm-wince.c
 dc0b454eb5ac0d16f390770f3fb53c4e  bfd/pe-arm.c
 4dafd0eaf2359f8dd74a9ff32ba069c9  bfd/pe-i386.c
@@ -381,80 +391,80 @@ de5c8e74526c4e815aecf91d0a045549  bfd/pe-sh.c
 c272f56c8b5aa83b6d878809491505d4  bfd/pe-x86_64.c
 7a9d44d145a7129525cc428a140d7467  bfd/peXXigen.c
 12d97ba29117269a1a8cf0ca362de34f  bfd/pef-traceback.h
-5bd6943fcf927aeb8b0f4aa1abda4ea3  bfd/pef.c
-5d711a64601f429fa483785559b743ea  bfd/pef.h
+2531e568f499ae30cb392b5f8259311c  bfd/pef.c
+b61393691e51a2f82e603b342c855370  bfd/pef.h
 3b93dbc924bcd6ca464d26c42a679909  bfd/pei-arm-wince.c
+338d87b0cd2a666095744141782a2337  bfd/pei-sh.c
 cf952c320bd31f09566ef5512192907b  bfd/pei-arm.c
 42ca288076eb97c9b810f7bd0c769e4e  bfd/pei-i386.c
 a26d0f4cc121b804db0d1296d32436b2  bfd/pei-ia64.c
 99c1d8bb1c1ecacf42ea046353eded35  bfd/pei-mcore.c
 2ab171f6edf98be45f0593435c1b11e4  bfd/pei-mips.c
 315b1fbec795d69ae698d384f1f217bd  bfd/pei-ppc.c
-338d87b0cd2a666095744141782a2337  bfd/pei-sh.c
 6943839a518c640cc96c2afd21dbfbcf  bfd/pei-x86_64.c
-1816aa7338fd2423e01d0b9db2c911dd  bfd/peicode.h
-11680aa1a0255ffb9a1793de6e6c68ad  bfd/plugin.c
+faa3815d77e663d34ffd63f85b695703  bfd/peicode.h
+2098be8fcee402eced8d1f0e3ce08ef1  bfd/plugin.c
 2261c135ccf79ec02dc19864386d2cca  bfd/plugin.h
-724476a2771f3210c19912f442659c5d  bfd/ppcboot.c
-597e9d326b44a976e473a2ef79e2cedf  bfd/reloc.c
-aeadade463fbe3401ef73b3533100208  bfd/ptrace-core.c
-a4d110644df46c682e52deab17df66b8  bfd/reloc16.c
-35a62e7106f6ca762b4afa22ea02edc5  bfd/riscix.c
+b844d2ce8eb68c06700fab0102e6ca6d  bfd/ppcboot.c
+ef22053db5ec8e14c7b267e982b10119  bfd/ptrace-core.c
+cedbc0508a4a14d4488c42ca83d06b51  bfd/reloc.c
+b989c85bc932176260558d6709265b69  bfd/reloc16.c
+ce638d0d59bb905efd80ababa8865695  bfd/riscix.c
 390127806fd49f3cbb7ad14ea2456202  bfd/rs6000-core.c
-9441258386e8e125722354c26f1f3494  bfd/sco5-core.c
-b10b07f30f3f775a36ac15c4c0360308  bfd/section.c
+b5f3b2d08e052c37aa4d4375bafdde9f  bfd/sco5-core.c
+2e01637c84d9550de61fbca0421880a5  bfd/section.c
 898b0251b29e0d0333b717c5fba85f47  bfd/simple.c
-a1a5148e875195c11059c023e9d903ed  bfd/som.c
-73be612633c59c18a5b744bdb2362978  bfd/som.h
-fcc0333513e11eced6f7caf5c41bdfa7  bfd/sparclinux.c
-a2a46b3d42519728843beb7307727724  bfd/sparclynx.c
+1c36dbd6188bb235ee55840ab567f01a  bfd/som.c
+527cd35122c6885ae765455261a125a8  bfd/som.h
+7d1cb79964eb839707ebb014fccb9c07  bfd/sparclinux.c
+c86090a9cda640648b8641b73dd6a794  bfd/sparclynx.c
 7dba15a9568e388261655fac84be612a  bfd/sparcnetbsd.c
 39a24f4fb73be4ba6b49f262da35691c  bfd/srec.c
-650aac6b1948fc417523f6ab33b335a9  bfd/stab-syms.c
+0a08173296d31345343fe38de2e1f349  bfd/stab-syms.c
 168eb4e7f79237249cc976f8a3d4f13d  bfd/stabs.c
 1ded054093de910d9786c62bc4fe8cc6  bfd/stamp-h.in
-33b8a6dbb56569cb0b36a073e2630bce  bfd/sunos.c
-92ea3880be875c1b8378bcad7489b928  bfd/syms.c
-7492d6e9f7bdddef8e51b8897b2b20ab  bfd/sysdep.h
-6b127b3ca607476d82d9ffe4a482b38a  bfd/targets.c
+55d6ff765f608aa2890a3d8d480ee69e  bfd/sunos.c
+9f38cfac982c6dc19c2757801cffdf6e  bfd/syms.c
+2c079897eeb18ff659b69c89522ca20e  bfd/sysdep.h
+0f93d1f0b4f73bdbb1a8c22e77ccedb7  bfd/targets.c
 53357a9b87dd158b90cf790c316fd438  bfd/targmatch.sed
 ee39822c67ebc0722fe775d2d0d92dec  bfd/tekhex.c
-1d5d2a98584b8f27cd2cba1b7a8aa9fa  bfd/ticoff.h
-f6744dd2c8ed7505ede5614cb352daf8  bfd/trad-core.c
+1e20feddad4945b759b607e60f5d4965  bfd/ticoff.h
+79eff0414d2cd6916ba7a5d3ebc6dd7a  bfd/trad-core.c
 16d2eaf8a4b6d5a2c90b931c5a1fd41f  bfd/vax1knetbsd.c
 3fe7114f6b98c45afeea1c2030f69b1b  bfd/vaxbsd.c
 35614e9f4a26c44ff67a78f1c2ff108c  bfd/vaxnetbsd.c
 88ef6962a203c349a38631b164f38708  bfd/verilog.c
-c4df6dd675bd3a61a3c3ce1a5da4f280  bfd/versados.c
-e5862d34780281014ed9ccbbe281eee6  bfd/version.h
+75c8e5b80f6808e391faef89cb26285f  bfd/versados.c
+0247497f8615ce241b50004854cd9a00  bfd/version.h
 7c23dec4d8799ae0e23659494830fba7  bfd/vms-alpha.c
-f5d4118a72916298ed0c3f0c77ff6cff  bfd/vms-lib.c
+60630444d06d1b30186cdc65415fd567  bfd/vms-lib.c
 b87c03c4dbdb7c2469bb565c0695487d  bfd/vms-misc.c
 546ec97623af181c29dec0b2f0a638db  bfd/vms.h
 120cb38c718d121d488f8106cbcdd8d9  bfd/warning.m4
 e3378d2a545225d0a7eceef2efdca7b7  bfd/xcofflink.c
-38d3ff539ce63c1e7096de81bc25dbfa  bfd/xsym.c
-11213bf58c2136189edd119d00671f00  bfd/xsym.h
+674207c5b5de8243d7ad20f528264d9f  bfd/xsym.c
+855ab07c2a0b15cf6bdfe1502f83b705  bfd/xsym.h
 f85e635b7ec810c1df6fe8ec9bdad616  bfd/xtensa-isa.c
 fc5a13a797dc463213593a836d4e2edf  bfd/xtensa-modules.c
-1866a5dccdd2353d75ef69ef21077d14  bfd/doc/ChangeLog
+d6fdc863de58274bf2aed5414a21dca1  bfd/doc/ChangeLog
 42b5ebab441fcbf65e95c2aa31262147  bfd/doc/ChangeLog-9103
 d2c072a60c85bbcf23800ed64bd45f83  bfd/doc/Makefile.am
 40319bd6a8a254e8a40c97442f5dfff3  bfd/doc/Makefile.in
 81652cb38f512353656fd8f29f2e9df6  bfd/doc/bfd.texinfo
 fbccdbd05f0690694c015fba7c392d45  bfd/doc/bfdint.texi
 5ee7f8ae8b0ec33c7baf2e004084aaa1  bfd/doc/bfdsumm.texi
-42b97469de7550820862b7c27dda849b  bfd/doc/chew.c
+0a891acca4c73b7d207f8122c65b3bce  bfd/doc/chew.c
 e67d8b07516154c4ddbee2e3bab3d75e  bfd/doc/doc.str
 072910d553f79906db69fa7c0e956bba  bfd/doc/fdl.texi
 39f61ac0fb56eced56e6894e7bc47cef  bfd/doc/header.sed
 5fa24958e8a60b2f879af658e615ccc0  bfd/doc/makefile.vms
 d7a37304ccd7b245f93df4be02797477  bfd/doc/proto.str
-86cc3f1170e71432f8c814bca7de35d5  bfd/doc/bfdver.texi
+38b96e25e08a45daa65bce5dae12c37b  bfd/doc/bfdver.texi
 b1848292a4811cd7301fc6201debe63a  bfd/doc/aoutx.texi
 1ec269e34cd7de48135ce9d4aefb98b6  bfd/doc/archive.texi
-197c39bd6f28ed23c62dac11a648c77f  bfd/doc/archures.texi
-ed2f6de3413bab723db72b9cfba36f85  bfd/doc/bfdt.texi
+f387391c9b6221323eee7e5dc53ab174  bfd/doc/archures.texi
+b9acb68785d5e9803f2343bfdcad441d  bfd/doc/bfdt.texi
 2afdf80182d7d816eb993fe194d378a3  bfd/doc/cache.texi
 232d094e3d6da6e3294d39c0149901d2  bfd/doc/coffcode.texi
 6dd9da257666139a061d6905349d9614  bfd/doc/core.texi
@@ -464,16 +474,16 @@ d41d8cd98f00b204e9800998ecf8427e  bfd/doc/elfcode.texi
 0fc22c68d543f8dc7cc4548a3fad3557  bfd/doc/libbfd.texi
 236e856bb13ee47adc5d7d253037640d  bfd/doc/bfdwin.texi
 7edf511939deb638e8291f264c4249e1  bfd/doc/bfdio.texi
-0a434fb4ed336b3267a07a0eee83a714  bfd/doc/opncls.texi
-ea935bd32fc4cd8d28b1903a41165368  bfd/doc/reloc.texi
-7cda9a06854f5529e7a27ed951aace6b  bfd/doc/section.texi
-f335289247e38d4dce82697113a6bce5  bfd/doc/syms.texi
-bf5eee2282a29e48a8bea259d0cfc44f  bfd/doc/targets.texi
+0d97ec5476a53d6d33f7118f227264ed  bfd/doc/opncls.texi
+7ce23a2c4193390e6f3ab16c3a6ed813  bfd/doc/reloc.texi
+c00ccf49a8426559fab6fc7710613355  bfd/doc/section.texi
+f7189351d15560daee69b5f5f0c3da72  bfd/doc/syms.texi
+355ef6ff5934dc8194032db6db3a05e4  bfd/doc/targets.texi
 37ba364fb34b96a1dbb55b0f6f612432  bfd/doc/init.texi
 d2b923f7732c26442570c16fd1dfac5a  bfd/doc/hash.texi
 ebb7107f0b9aa8607e4fb3af643e6171  bfd/doc/linker.texi
 58f9e78e71f2d034a79e172899e792f6  bfd/doc/mmo.texi
-ef4084e5a440ac0280483f8e88b51060  bfd/doc/bfd.info
+1e677ddd6f3ab4b783df6546130bf1de  bfd/doc/bfd.info
 065b0a6c7a8a5427098e677cef40f6ab  bfd/hosts/alphalinux.h
 0c52204c0eb0530561da8699dcfa3452  bfd/hosts/alphavms.h
 b456ff19a38c6a50a7b6fcf23fd9e1f0  bfd/hosts/decstation.h
@@ -503,7 +513,7 @@ e77a36f7eeeee139ec033b09e37ec02f  bfd/hosts/vaxbsd.h
 59a50941a3ba41d5eeaddfa608ed9155  bfd/hosts/x86-64linux.h
 d900f09c506ad5057a3fddd39e3fab7c  bfd/po/BLD-POTFILES.in
 912c079b0305e916b36d6bbb97438681  bfd/po/Make-in
-508ce0caad0505ef4fc2ac33bd750fd8  bfd/po/SRC-POTFILES.in
+cd533fe9ce9fbc5f0d43f4a8c45175b9  bfd/po/SRC-POTFILES.in
 f646d174055d2eb5e935eb8df4cdb8c8  bfd/po/bfd.pot
 f42836fa54a22c3b715c61e6df8973ef  bfd/po/da.po
 105311309f8e20430bf22845d95c476c  bfd/po/es.po
@@ -516,6 +526,7 @@ eb8a62877bd3f8a2c93c35e492392fab  bfd/po/ru.po
 4314f7dc707bdd16e1a3aa6318d52f8a  bfd/po/rw.po
 dfe82e26118652583a47b8f4771e7e1c  bfd/po/sv.po
 95bcedd50b1016d3de8c9f543c6b2bb9  bfd/po/tr.po
+c39e8b28039c97139d3611b3be673bba  bfd/po/uk.po
 1bbe9236287bcc2e6d317562dda6aefb  bfd/po/vi.po
 1ab81455a3fa63e837709d2924e5f1cf  bfd/po/zh_CN.po
 af59cbed52c0a16ed933a2add351b7fd  bfd/po/da.gmo
@@ -529,13 +540,15 @@ f41278ab618bbf7ef67dc21dc951e45f  bfd/po/ru.gmo
 e15c998ffa3537ef5f5c5ed225c18279  bfd/po/rw.gmo
 b04862da8728ddf3c4c8a45b18ee35f7  bfd/po/sv.gmo
 495dc4f4a2e82ea81d7226370e07294f  bfd/po/tr.gmo
+1d1f350ad4c6cda7827993805fb67cef  bfd/po/uk.gmo
 03155ac55999ea99fd93db756c85d4fc  bfd/po/vi.gmo
 e0ac4c0bbc954826529362c28e86810f  bfd/po/zh_CN.gmo
-56b7b1544091f5bff183e3c2512a50db  ChangeLog
+dfef8f4f6d912417128b665b65996206  ChangeLog
 0d3c238b02b9d0c1c32347dea7fc490d  compile
-5f8513728fe025555cdf84dedfa4cc1b  config/ChangeLog
+e39a90fca1a8bf02b74e7a02f026afd8  config/ChangeLog
 0fcd4badfe2a2191778bdf5ab94aa40c  config/acinclude.m4
-731a4c2ef07c06a2a175804e75fadc03  config/acx.m4
+9238d23c68259d195b332db71892d242  config/acx.m4
+6b030f5cf640bdd401ea739f54a667f8  config/asmcfi.m4
 5c6a030699353abe2ff69294a495e4cd  config/bootstrap-O1.mk
 4d3304310a9b7b17872d6f644e1dd7c8  config/bootstrap-O3.mk
 3be755875df9da02eb4b0a9badd414f1  config/bootstrap-debug-big.mk
@@ -571,59 +584,61 @@ cbcbd9977ef1239ccac0c5c54d214302  config/ld-symbolic.m4
 50120e7fff340d87578219756e55a5e3  config/lib-link.m4
 4455537cdae70977a1283180062a2d8d  config/lib-prefix.m4
 534dce34ae221e73e2d67d3ba07f00a3  config/lthostflags.m4
+8e9893e8dda7f5288879e0a4cc10d3da  config/math.m4
 3fe4a576c2a75736c8da3af1d0824217  config/mh-cygwin
-a2628132e60b0492f8c93ce6ad8c9fea  config/mh-darwin
+e788730d0a557cc25a47dc93a6e15b62  config/mh-darwin
 625bacc09b9992290d94831bd7506bd0  config/mh-djgpp
-047dca2dcebf2e03c189bf8819e4c63a  config/mh-interix
 683433c6c1f829d4f0aa007dfa29c880  config/mh-mingw
 cd7034dccd04e50150b14c597dd545a5  config/mh-pa
 48d5107b991a0cdbe7eb7022b0dfecb2  config/mh-pa-hpux10
-59846d5e40c35f67530d476403b5838b  config/mh-ppc-aix
-3755b5b077053b5de54ff0f781ca9295  config/mt-alphaieee
+76d638a67d840715b2de89afee8ef49a  config/mh-ppc-aix
+bd6855445bd58ae7e066221ade8cc55d  config/mmap.m4
+59bd17b0aad6631e55578865d5828d70  config/mt-alphaieee
 96289d06809692c31d71e69c4bedb6d7  config/mt-d30v
 945f54294ca11fd14c1aaaecde3ce7da  config/mt-gnu
 1d7419534d43fda437ce0a4f0719ee5f  config/mt-mips-elfoabi
 8d6647b6e881a11ae46d9bcaeaa0bd0f  config/mt-mips-gnu
 e5f16579c830ccc42e238b49e8409e99  config/mt-mips16-compat
 5aa8f75c6588d513ce199e2e44c206e2  config/mt-ospace
-23e56715f4bf1219d8fe216560c4f3ee  config/mt-sde
+ebe86b73875c733efe14039f25573687  config/mt-sde
 9af153786999225732c95595da5ebd52  config/mt-spu
 b2adad0a4a862632ab430160dc6a218c  config/multi.m4
 120ec56e3aa27739a2945bc1c8a2530a  config/nls.m4
 fa22f7e8f43ef5b6e9ab94ec570c2327  config/no-executables.m4
 a251aa127ad38c507c6c5d6462060dfd  config/override.m4
-7632e8393bbd7e57d2e0a58e78521d3f  config/picflag.m4
+8cdc9509f51b2a613c2a2dfc790d3c4d  config/picflag.m4
 734b3558fccbdc3e95eca1f1374b4016  config/plugins.m4
 1e69014355ea3f8f6aa2c91b13a7bb92  config/po.m4
 b2d511a8a77414eda79bdee0daccfea8  config/proginstall.m4
 d3cecf02bb97035177818aefbb0e0833  config/progtest.m4
-cf44bcebf16110e74cc72300706818c9  config/stdint.m4
+c1337a4ac59eeb2169108df8e358d389  config/stdint.m4
 761497fd3445beb86a90919955d5aa20  config/stdint_h.m4
-2b708186a72f4b6d7afca4de41ae5448  config/tcl.m4
+b0d2f2e937c16091b330451e6883c4b6  config/tcl.m4
 36af806073153196c545a5a43f31bbeb  config/tls.m4
 5e1e75893989d0ae3c0452451cf80280  config/uintmax_t.m4
 6b1c349fb182e74fbc464c50c88fe2ee  config/ulonglong.m4
 49305b421244035f19bdccb38a800d5f  config/unwind_ipinfo.m4
-3510459bb8dffa5ea06682a29bcdbfa9  config/warnings.m4
+b6afa5c33fb98edfaf591dd38d198b0d  config/warnings.m4
+7ef51b0adb98e5c5f7aba46d2c7293f1  config/weakref.m4
 e249d18c447a8372fd1ed5f084284d6b  config/zlib.m4
 8385976ed3a37f278f07c10341d53876  config.guess
 4adca919c67d00b948bf581991b79bbf  config-ml.in
 040359150cf11493f973a46d8a25b06b  config.rpath
-32c03149d8dd8808dea9adf58e712886  config.sub
-ed0aee0cbde5805c0ae2dedce2106bb3  configure
-ec7b1af278e9b03553ec44ebc994ab9c  configure.ac
+b65469e74491b977b8babd8f98f3c1e5  config.sub
+1c849891d18557dbe91fa6e9cb84de31  configure
+40ba19bca24172cb2ea030cdcb1302a6  configure.ac
 59530bdf33659b29e73d4adb9f9f6552  COPYING
 d32239bcb673463ab874e80d47fae504  COPYING3
 6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
 9f604d8a4f8e74f4f5140845a21b6674  COPYING.LIB
-691a38580b65b3a3639207987ac7900a  cpu/ChangeLog
+9ece8acaa89e9aeeca4e41bd88545de1  cpu/ChangeLog
 57bb884c7f43b4868dc92a9cdbb51a42  cpu/cris.cpu
 0d2eab764ddd3fe954464b2529183fad  cpu/epiphany.cpu
 45ceeef6dd0334c1762c922e13ca5bb7  cpu/epiphany.opc
 5482fe4be796476228dcef116a5085ea  cpu/fr30.cpu
 b4ecfabcfae65cc11bf52fd29db940bc  cpu/fr30.opc
 2f25728eb6321969c8b21f7ce4bb9fd2  cpu/frv.cpu
-4c260ef104ad0998c6a0f6677fdfc685  cpu/frv.opc
+007dfc606bd4027d953a79ef6bb8d01b  cpu/frv.opc
 3e071f0b9c6ed8919fc0cfbd4e2c255a  cpu/ip2k.cpu
 2ec6a978ace41c4f6444cd841689b839  cpu/ip2k.opc
 36a3725cfe5376cf5bbe2ba4ba3af92b  cpu/iq10.cpu
@@ -650,7 +665,7 @@ a19fd9e8443a64db1dc14972cac446ab  cpu/mep-rhcop.cpu
 d534cf9b6b4a7e68f003dcf5d9174cb8  cpu/mep.cpu
 be028971bb0055834c3612ca886b9a0f  cpu/mep.opc
 d131138bbb159cd94a48bbb552beeb1e  cpu/mt.cpu
-5f68403905e01ac34a57ec0bd0654dc4  cpu/mt.opc
+051b41a8f22ff0a5dc829da70867b9d6  cpu/mt.opc
 ee0a9dc3f65e1227da3e29a6f2e0b103  cpu/openrisc.cpu
 93a4d6e2606566a4effad67f9d4d4aea  cpu/openrisc.opc
 2ec1c54e8542038a6e1623a6540c6d71  cpu/sh.cpu
@@ -683,10 +698,11 @@ c1f7c41d3e596256ab5f5f933a66293f  etc/configdev.fig
 ab0fe311032294b952da80585b8b90e7  etc/fdl.texi
 d5faa80d97899ae08accaff400923890  etc/texi2pod.pl
 07570ba317be730a55c952a81d92dcef  etc/gnu-oids.texi
-00708d79997ccea662940ac0766199d4  gdb/.gitignore
-3e085b17b51d615c12da7b4a99492d1d  gdb/CONTRIBUTE
+a04bbfc6092a474c8797b8b4f4b28035  gdb/.dir-locals.el
+c3a142c54fa6dc516b5a14aabc62e78f  gdb/.gitignore
+0e8e9a83ca2de8e7edc3ac4791c379e0  gdb/CONTRIBUTE
 d32239bcb673463ab874e80d47fae504  gdb/COPYING
-ace056f9fe75c9baad5a50b3c1f7c965  gdb/ChangeLog
+29459e2bc17ea3fadc95cf9fab73a172  gdb/ChangeLog
 42b9f7c51223e595f66c2210064be682  gdb/ChangeLog-1990
 8f5a03c189727d347a330548f3ea9c98  gdb/ChangeLog-1991
 51d2fa6ce8618d5c87150c7c576f1f6d  gdb/ChangeLog-1992
@@ -708,231 +724,243 @@ d87f8f330dda7f736350ea5dcff5b709  gdb/ChangeLog-2006
 70a77fd6898743da19391f432f32be37  gdb/ChangeLog-2008
 063dc93653badda346bced7ccfd1c867  gdb/ChangeLog-2009
 16676b9547f9a7ac95c648ec5962cbc5  gdb/ChangeLog-2010
+07c87108ca68f86c15cfa5d8792085f6  gdb/ChangeLog-2011
 1f68d3272b33b380724fe731f1716f7b  gdb/ChangeLog-3.x
-7fa313e7b8591a388b05d2a90af3d481  gdb/MAINTAINERS
-dee6c995cc78d4e66c1211a5e92d263e  gdb/Makefile.in
-b85bf66362decad2400c9e41e17bdb22  gdb/NEWS
+8226720de90187c640d58cfb16f46148  gdb/MAINTAINERS
+3c9c5dec0bd473479d75534586094d6e  gdb/Makefile.in
+f67e5e4735f2eabadfa733e50c8dc471  gdb/NEWS
 f98668e6b62ba2b17a25ebb7e9961fc1  gdb/PROBLEMS
-aa74b3d8c26fe32d384a47983e22137c  gdb/README
-c2f4142ef6f23088713f0ae544ac563d  gdb/acinclude.m4
-3169d81ed760e357823c7796b4de42c5  gdb/aclocal.m4
-02afb97baafa7e379830fc668df2a1b1  gdb/ada-exp.y
-838cfeca95bc7ebd6c575ecc29c3d544  gdb/ada-lang.c
-acd881dfe6c6d56d62e6fe1855a9ae9d  gdb/ada-lang.h
-ac0a816e102f62db624e395ae8e6a8ba  gdb/ada-lex.l
+723f97d0d032ddcca2bc4704a45cea9c  gdb/README
+dc27d26860fce3408795d9c1c94f783a  gdb/acinclude.m4
+6936e8520c04c41680b35fac431f0061  gdb/aclocal.m4
+7dd2164a6029e2dad66c7104313533e9  gdb/acx_configure_dir.m4
+e351f87c3dec42260b58cb6c7df274aa  gdb/ada-exp.y
+134b24975495491ad1e9286fcb81b0d4  gdb/ada-lang.c
+68ec13a506210fd1a7b3879c45afa796  gdb/ada-lang.h
+f4d3ee8a3f4f26c472161646e757575a  gdb/ada-lex.l
 a806ec9d34cce31ce9192c7ca7c340e0  gdb/ada-operator.def
-ba749ea250cf805024005a8aeba781dd  gdb/ada-tasks.c
-2cea739415579ee3cab3d28e70025165  gdb/ada-typeprint.c
-4a2be5ee7e608ae82f5059d7d5e841b8  gdb/ada-valprint.c
+377f7f42dcfec4345a2d9e022772d262  gdb/ada-tasks.c
+cb2fcdd6136e4b49ce33986b7a3383f5  gdb/ada-typeprint.c
+6d80446483e8afe4d8332389648a997f  gdb/ada-valprint.c
+5cb2b01c2f900706a68da2523efab477  gdb/ada-varobj.c
+18fb5e0d75f32867dda33a969b764ea0  gdb/ada-varobj.h
 7039e2107040ce5a507e4067ce9cf7df  gdb/addrmap.c
 3a85c16bd0139904fe7513602374b1fc  gdb/addrmap.h
-62dbaae49244031b3253bf7e3f947f25  gdb/aix-thread.c
+821666e864c66fa0e42624c8e50d19b1  gdb/agent.c
+221ed9605f122881f193a3722c7e7b5f  gdb/aix-thread.c
 13bdaa729fb85cda3f06067d232ae5d7  gdb/alpha-linux-nat.c
-b75347c96aa1067138f4ee51eaa813e4  gdb/alpha-linux-tdep.c
-40aea3d1d8a6fd513818448e092adb93  gdb/alpha-mdebug-tdep.c
+5e59a51fd1b7194f33c02821a2859b1d  gdb/alpha-linux-tdep.c
+8379102fc1fd232daebe4ae0aa423075  gdb/alpha-mdebug-tdep.c
 6a3ef512469c5a4d1ccf8b236e0f3619  gdb/alpha-nat.c
-1b0c06deef26eb072abde1bfbe7de985  gdb/alpha-osf1-tdep.c
-d043904d08133278d250449980c34157  gdb/alpha-tdep.c
-c2002915fc4eac8501ab8a57e07d27e2  gdb/alpha-tdep.h
+9e4374ba5d42ce600adedfd569013691  gdb/alpha-osf1-tdep.c
+60675a65292c794b939135d7207d6d52  gdb/alpha-tdep.c
+3d4193f6298b9e1ff03f3f86903b656e  gdb/alpha-tdep.h
 4f7e8f8795acd8282e6d6c808b4a3526  gdb/alphabsd-nat.c
 33ec2f525e0cf1b7250760fc904810e9  gdb/alphabsd-tdep.c
 ec54c1421bb5e305783cf83963c505b3  gdb/alphabsd-tdep.h
-0d90e12b2249d38ab2d516f44b0bb461  gdb/alphafbsd-tdep.c
-19338f3aa2b50d5cb50fb9ef34a72ac6  gdb/alphanbsd-tdep.c
-658f09d8594f8af00f16da69f5e8fc9e  gdb/alphaobsd-tdep.c
-e4f0bb06ce583da08864a3528834030c  gdb/amd64-darwin-tdep.c
+bea9427d5b0ac812fb798bee5ebd0de0  gdb/alphafbsd-tdep.c
+594f63fe39629edf2647834f7c506326  gdb/alphanbsd-tdep.c
+26b840c27210959f1d6a908b5ff7587f  gdb/alphaobsd-tdep.c
+a54d5b87528b7c4afbcb3928b580e492  gdb/amd64-darwin-tdep.c
 6ffa5b510dbf07c666c27c95eab8c121  gdb/amd64-darwin-tdep.h
-39b82f445c5c5380444bb3846e016eda  gdb/amd64-dicos-tdep.c
-679551cabbe65af40b4a1c49a659ddbc  gdb/amd64-linux-nat.c
-6e9d9a67fa57f7f6edff01c3a8d4e39c  gdb/amd64-linux-tdep.c
-aee43b89e39d3b1d28ac7c737b1a3e35  gdb/amd64-linux-tdep.h
-775f7032c594bdd75031a02f553bc943  gdb/amd64-nat.c
+83fb3eac7d1c900a7eddf41a83ab0694  gdb/amd64-dicos-tdep.c
+904065cb84b5dc183a8d6d11f763f41d  gdb/amd64-linux-nat.c
+ad3c77174e0e007dd5abe6257875645c  gdb/amd64-linux-tdep.c
+fa9ccd1d7488dac4ae8a971f92009437  gdb/amd64-linux-tdep.h
+46aa048480e9be6144599531661ceb41  gdb/amd64-nat.c
 e2cef59310fcc1711a275eec473eeba9  gdb/amd64-nat.h
-973498fa49fa5a1f388c984d0625c1ff  gdb/amd64-sol2-tdep.c
-941ef053763675a0354814d6b09fbed7  gdb/amd64-tdep.c
-917f9c87b6fe810209f33636fc9f2e73  gdb/amd64-tdep.h
-ea24d944f828f7aa4c6e4d960bbc378e  gdb/amd64-windows-nat.c
-ec2faf8d7e8e8802bbfe3a3d2c4060c1  gdb/amd64-windows-tdep.c
-be985efd14b67a5487b99a01b0ec9bac  gdb/amd64bsd-nat.c
-c359251c25e82734300c806175291a2e  gdb/amd64fbsd-nat.c
+142113802069790ef8c2ee9b4a21c1c7  gdb/amd64-sol2-tdep.c
+7b28d4475a2aef79f3bd2202f693d199  gdb/amd64-tdep.c
+f083b6bb124c20ad96a53ef849afe5e4  gdb/amd64-tdep.h
+425f01a1645629a9467032d756162678  gdb/amd64-windows-nat.c
+e54adc457de46bdca74af64de296c96c  gdb/amd64-windows-tdep.c
+98d6dce273a2d19a662c61a93ec74904  gdb/amd64bsd-nat.c
+6a54d0632102d52cf74df0e155fe27c1  gdb/amd64bsd-nat.h
+13234997d23e951bc6c0363435f7cbc4  gdb/amd64fbsd-nat.c
 221edc4fa95ffcc658c47b310ba784c0  gdb/amd64fbsd-tdep.c
 c7fe722902c018d62e7b8b991f90f2d2  gdb/amd64nbsd-nat.c
-fe5bc30cc4aa4ab5f5330847bd678df3  gdb/amd64nbsd-tdep.c
+beac11915b461bf004b33c771d5def75  gdb/amd64nbsd-tdep.c
 0b03dae3d546f709b355f0af069b8744  gdb/amd64obsd-nat.c
-4e892653035b6dec7a3466a24db780d0  gdb/amd64obsd-tdep.c
+287adc07365ea81aa5530df0ff495536  gdb/amd64obsd-tdep.c
 9e15462b1e7d535f45d7c8164f4cfdba  gdb/annotate.c
 0c7030ad447f846d3ea5e901ef293de5  gdb/annotate.h
-9b7911a35a526184ede0310c95714b9c  gdb/arch-utils.c
-d68a7575141987d4ec81a5e158acdecb  gdb/arch-utils.h
-67363378c37b6c88d77cde7616f87e94  gdb/arm-linux-nat.c
-55df600a704ad8ca606879d1fb990a35  gdb/arm-linux-tdep.c
+3179de616af2620d4c31f50d434afebc  gdb/arch-utils.c
+be42b7fe2b0611367c16ff0ab40bd4de  gdb/arch-utils.h
+f3b8d9b3a93a96460d457c71b990bad5  gdb/arm-linux-nat.c
+444cdfc599cc4b06e489caf5bda2265a  gdb/arm-linux-tdep.c
 7a61dfd0a9009466ade28032ff0a6f57  gdb/arm-linux-tdep.h
-efe0bb723f18a98b4650ceb85f41e0b1  gdb/arm-symbian-tdep.c
-bddd333f3ebc7d157661a5c74a613593  gdb/arm-tdep.c
-9d59674e98eeed15c9ec991c015c0a40  gdb/arm-tdep.h
-24990ef94a85e9a2ff3634848dac63b7  gdb/arm-wince-tdep.c
+b3a4ba6a664b1425f49d6acb2a1b5236  gdb/arm-symbian-tdep.c
+26ac6b66d44e3ffdfe7d43941bdd8336  gdb/arm-tdep.c
+5968856eac50afbf36b03859ba3a695b  gdb/arm-tdep.h
+c7d54fba31894c3d6430ca155ab7246b  gdb/arm-wince-tdep.c
 aa96a769aa9be57e0d727881ee79e62b  gdb/armbsd-tdep.c
 66a73dc1080711a3d55f37d16ddb775e  gdb/armnbsd-nat.c
 826af3810cc9448157a1ea6f7f142c46  gdb/armnbsd-tdep.c
 70fb31e48a90157b9270bca8c4f2a6d6  gdb/armobsd-tdep.c
-5acdc299f24e30c66a5ee2f9cc6f1329  gdb/auxv.c
+625df147df7178dcb64ccdd42b49e1b5  gdb/auto-load.c
+d5ad2ba5255773bf8f62a1e39803ec72  gdb/auto-load.h
+b0f639f55c14dd8cc3303f0be9ded626  gdb/auxv.c
 c32d8ef0e03fbf46bf202427bd250c40  gdb/auxv.h
-8403d21b360cfceb360b114bd4071b86  gdb/avr-tdep.c
-a13734174eff96f20f3d78104f5cb5aa  gdb/ax-gdb.c
-31064534f2ce25fafa0ab16368324d9e  gdb/ax-gdb.h
-6820ebc2f9eb8ca55b9687de28bd49ff  gdb/ax-general.c
-29db188f03c252d79cc996332f57f77d  gdb/ax.h
+2506672c942983263485c926f98a4fae  gdb/avr-tdep.c
+0c3eeeece7c6f637b6838d718361123b  gdb/ax-gdb.c
+fd5ab73c27e251576e1fc7ef345372d8  gdb/ax-gdb.h
+20b454c77d1bc035a524b109c0f9a220  gdb/ax-general.c
+ffe076d64d980b0434dbb32f7abb8cc3  gdb/ax.h
 e9a5b9f4254c0c00413865805e688ead  gdb/bcache.c
 38a66521eebdd1b33c206c50cb8032ad  gdb/bcache.h
 7766ccfd3bed989305b424858ca6ff65  gdb/bfd-target.c
 28bea68030b66fed8df9149d6e8a9bb0  gdb/bfd-target.h
-3fd7e82c154092e56b8a836edfc18e85  gdb/bfin-linux-tdep.c
-0abb8e850ef4521689095b7ab7ff9d80  gdb/bfin-tdep.c
+99b3498afc66ba18c74893588f0d68ee  gdb/bfin-linux-tdep.c
+b4d83a9feb568982f7a51364aeadc2d5  gdb/bfin-tdep.c
 644abe43a19d94e58244325d2fb28b07  gdb/bfin-tdep.h
-311d4834750b544b40c8c8533c5fc142  gdb/block.c
-12b0711b6fabfc7a0a9317f8ec6c76ca  gdb/block.h
-996089c64e1ce601b5393710693945c2  gdb/blockframe.c
-889fd525008aca5b911f5b12dbdc296a  gdb/breakpoint.c
-cae77f8b727294759a4854ae8f905c28  gdb/breakpoint.h
+8eee9628c90d5a5a4d2f68218ef85284  gdb/block.c
+bdbf742531a9c3fd177b32cfdeabfef6  gdb/block.h
+af1c62ed4e248722255b10fc8f683011  gdb/blockframe.c
+33aad6535cbda2b12ae3eadbee11dfdf  gdb/breakpoint.c
+0564350305fcd8aa11bcad90833cd0df  gdb/breakpoint.h
 948f4853765807667e49728e96bacc56  gdb/bsd-kvm.c
 b5ed82189a99a125cfa8f4223c5c7bc5  gdb/bsd-kvm.h
-33cf3cf339daf5497fb4378d752e4d2f  gdb/bsd-uthread.c
+d4f6fa76e21dead0ec0c1c6f76bffafa  gdb/bsd-uthread.c
 0c1c9e8f2068761aa878f9b568402413  gdb/bsd-uthread.h
-d8d13ab2bc6cca04bf11371670be7c9f  gdb/buildsym.c
-860b51b8293090c839190b399dfe74e1  gdb/buildsym.h
-f8f4d122c273efd9ce416a5bdcc1bdb6  gdb/c-exp.y
-c6fda3bcafdbf383d205e8cef6b93a9d  gdb/c-lang.c
-6806a4d6e2d06cf023a61885567419ba  gdb/c-lang.h
-551d6dd99e33c7278280e94cfd50bcee  gdb/c-typeprint.c
-353c09e62b45ad11eaaabc2efd0aab65  gdb/c-valprint.c
+e8ddb09d91457b1e6e5a52c9fdb7f078  gdb/buildsym.c
+6a75670b11257b319902a005913cc94a  gdb/buildsym.h
+ddc8c6a21d666c34eb57b2dd7c286f2f  gdb/c-exp.y
+037f4bb6bf8b8bba15206229c92d88b8  gdb/c-lang.c
+22d6183e1ebb8159e9ff878be76db66a  gdb/c-lang.h
+ba732f75202367beceff85f3216eb711  gdb/c-typeprint.c
+edbfbe732e05d2e072e57614c46e1d88  gdb/c-valprint.c
 35bb0a5021679fe81771a65c30e30a41  gdb/call-cmds.h
-bbf750157349ed3c6a1a3df1bc6e2e04  gdb/cc-with-index.sh
+97f5bf11caa28bbd3cfc53444ebfebac  gdb/cc-with-dwz.sh
+6003de5b15686c933bcad1949124eb9a  gdb/cc-with-index.sh
 b46053d81b6fc350d4f58e396f4a7416  gdb/charset-list.h
-6b25692b751e9b59b9de5ef0a0b3dd00  gdb/charset.c
+1d0d2a4f803607d637ff6a2379529804  gdb/charset.c
 b7701b21484e2b2f6ef72b66de939d55  gdb/charset.h
+a8cdf83f4bce5c86f229fcf605aecfd8  gdb/cleanups.c
+5f56a541b0b7c537f22066463c9dd42a  gdb/cleanups.h
 c3457d768b75688cd8cbc629bbc45065  gdb/cli-out.c
 545e8cf596d2b2b176dfab6e57ac12c0  gdb/cli-out.h
 37e66e0fc9d14d85a22ae485e64bdd9f  gdb/coff-pe-read.c
 59e914a746a5838af9ab20c3f644d52b  gdb/coff-pe-read.h
-efd486174d566453b38810417470ecca  gdb/coffread.c
-096156ba24ccd45ee6882285c80327ba  gdb/command.h
+71946ce34e8d38f3a50accb06f424020  gdb/coffread.c
+0496856c4b28c49008b4d1c14235808f  gdb/command.h
 697f5b51389575f82719fa32ff870fdd  gdb/complaints.c
 7edb456dd3a92b053179651bbb24c88c  gdb/complaints.h
-3a95be95abfe2c13220c33755f6f9bd0  gdb/completer.c
-95b27bbd8303620aa2b6bb2331b2c2a8  gdb/completer.h
-bd98c674c21d0c46d5bf71adb370bcda  gdb/config.in
-10d8c5c1de3098e5e4fc9ee20f78a084  gdb/configure
-3b3447124bce69c6e84f02267dbb3074  gdb/configure.ac
-9ed90aedec0635100e1d9dab007e0a68  gdb/configure.host
-0c9f5591c7c7d76d47fedb63b262c736  gdb/configure.tgt
+434f62601f27e9fd40fccaeed459f7a9  gdb/completer.c
+aad5efb9422e591ee45e0fea5f331763  gdb/completer.h
+1800bcf93cbb1a590112370d099b46cd  gdb/config.in
+c71ba711a781652ebe4bff08bcb31980  gdb/configure
+3e800aebcfc3053c089ce6be369cc1c3  gdb/configure.ac
+c30b8541d1c0c147fd48abaebd5b278b  gdb/configure.host
+ff9e6b95cc3956366fdef296d2b18965  gdb/configure.tgt
 af82fbafe700324fba5ab56fedde6d64  gdb/continuations.c
 fffd636d3981ee769fafe5854565d379  gdb/continuations.h
 f06ccf06b255a9e149efc728de7c5394  gdb/copying.awk
 d00671fcc4d4d49c83e99bdaa6f8395e  gdb/copying.c
-75d89196e751b075f6a0941c210d32e9  gdb/copyright.py
-75be3b498d83842ccec7f3bbbe933585  gdb/copyright.sh
+33adab12e16585fa8efc901133a9bd40  gdb/copyright.py
 ee9fe469fb7d5810875c7d1282cba6b7  gdb/core-regset.c
-79e361a085f10fd0b68c7bb949882a04  gdb/corefile.c
-ff02cf6b0da071bbf94967d562b13ae1  gdb/corelow.c
-810205b502b8c9cab1817eb4dd857359  gdb/cp-abi.c
-5d937e608e85d7a18f0da21c57f485dd  gdb/cp-abi.h
-7107690b127b0343a52af4aff352e981  gdb/cp-name-parser.y
-59a21647a5c10f19e79ec39f489922c1  gdb/cp-namespace.c
-3d15d47c918ccc2b9c741b8971ef5e73  gdb/cp-support.c
-124d0fd42d3385d292c97a86923f51f4  gdb/cp-support.h
-3222bb85a7ec015ddddcd4eee943b8d2  gdb/cp-valprint.c
-eed15bcd3d855b19d49b6ad24784ee40  gdb/cris-tdep.c
-13d8becf3a994a477e432145628fcb32  gdb/d-lang.c
-650ef4d6c063fd2d7b4cf7ae73944e39  gdb/d-lang.h
-dde6a10fc32acae6093b79bdf323040a  gdb/d-valprint.c
-b6ba21522b48d6712cc9cb412ce7a18e  gdb/darwin-nat-info.c
-0f69cf080b7e843ea0fb6adc806a0738  gdb/darwin-nat.c
-3d58645e70a3e37c8a0b329e1d9409e4  gdb/darwin-nat.h
+687d590b661543d54289b756a753c10f  gdb/corefile.c
+34bce00076ba5a3d0ac4dbf62156f792  gdb/corelow.c
+f0e926a685ee93998bb71ad7f36ad7dd  gdb/cp-abi.c
+5893bdc06dfcd97c92dc10aae65044c0  gdb/cp-abi.h
+30eb26021ba04a3d229a4b1cb5aff817  gdb/cp-name-parser.y
+40d3be2b7f13376252cb1baaf89f3fc0  gdb/cp-namespace.c
+f24b3bfe8c93ee0fd789c068873678b9  gdb/cp-support.c
+acd0fdef5e3b81ad91e12348312864ec  gdb/cp-support.h
+d67f471ca6c82d2238596a77cbf794a5  gdb/cp-valprint.c
+2228ad37c8b11fc51d491c51ca6fbd0e  gdb/cris-tdep.c
+6102404aac589d91c59f732edac12dd4  gdb/d-lang.c
+4f50c58d9f827d7c3ae3700455346fd0  gdb/d-lang.h
+e32815d6fc16fc8c3b2c586b296b5719  gdb/d-valprint.c
+c1e57e2bc83f3dfb38949e29441355ae  gdb/darwin-nat-info.c
+a93e5a93aa6598f7b9b3c85b652b4139  gdb/darwin-nat.c
+2e165bb9805ad85a6b20524611e0acdb  gdb/darwin-nat.h
 b0dde7c054cbb26da5187addff11f592  gdb/dbug-rom.c
-4b1fc201c863de2d3b68c721abd81a22  gdb/dbxread.c
+d3d6859c1a2fade6f71a8aa8ddbb9f98  gdb/dbxread.c
 17abb75d54c0318f0c2929724b6a25da  gdb/dcache.c
 07cb5058ffeffd173b9a0f8270eec8a6  gdb/dcache.h
 13f1974b41f890746469a9b16b2235b5  gdb/dec-thread.c
-095ed64e556c1fa2be410ab822f18c2d  gdb/defs.h
+71a46655ee2fa3eb03219fa7e564eced  gdb/defs.h
 9dd6593e7c927010adcfa22fccb04524  gdb/demangle.c
 3aded3605f7488210ff205cdd7a3b226  gdb/dfp.c
 1cbf5428c93b97b6432801160e3eb48d  gdb/dfp.h
-d895cdf8d5e77a954d9fdcadf32cda0b  gdb/dicos-tdep.c
+d8bc254e9db8e3ac93b31b03f043882a  gdb/dicos-tdep.c
 cef89f28065b66b0c99c0d8029b37ab7  gdb/dicos-tdep.h
-509fca78743a51901f54bd72252e3ba7  gdb/dictionary.c
-51c99e7fcab89464b7d176ecbf656f72  gdb/dictionary.h
+9c09a3b00f4b6db1b148e6be33465eec  gdb/dictionary.c
+d95cac8af73fa834fd44b16fd36b3a71  gdb/disasm.c
+4000eb3b1d7cfc9bfc25a540fbb037fd  gdb/dictionary.h
 9e43aaeb63d22bb83565a3848a9731ff  gdb/dink32-rom.c
-d2706bf68938396a0f6fb492e2a6a014  gdb/disasm.c
 f0d4f6c25ec87306371708dfc93327a7  gdb/disasm.h
 885ce7b8e4dd3b45723675fd2a4eb7a9  gdb/doublest.c
 f0ddfeddd06dfd1b1178058f327b9e56  gdb/doublest.h
 f3771d8fd7d861d4af76ac2e7cd81b51  gdb/dsrec.c
-2b68b99eaeba0570e2e3db75d493943e  gdb/dummy-frame.c
-501d67df310f693094138f489a4894e1  gdb/dummy-frame.h
-3edc37c35f4e2ff2e604a2e9d1a545b0  gdb/dwarf2-frame-tailcall.c
+038ad59dbfc6b9725eb1c9ac7d25139e  gdb/dummy-frame.c
+2113ab8e372694d248531bb80766fbcd  gdb/dummy-frame.h
+fec521ed4926d537f3ff28267b9e98ca  gdb/dwarf2-frame-tailcall.c
 4e351fbdd4e6fdcd4139a31032880cca  gdb/dwarf2-frame-tailcall.h
-1847d0a9102e8ddf63299bbe4e6af273  gdb/eval.c
-cec2c677da36b2c06f42f670bd9c1f60  gdb/dwarf2-frame.c
+588c55a42993c462f9b5fa41f387c79b  gdb/dwarf2-frame.c
 f8bf9ac1dfc34c67fc64e33274399c60  gdb/dwarf2-frame.h
-75b23c7a6b66934c80c7dfba6dffdbc1  gdb/dwarf2expr.c
-7bd47ccb82047b3409214b0a465b2a29  gdb/dwarf2expr.h
-717f6ae4203fda843c5a57b2454dd327  gdb/dwarf2loc.c
-740d87a235c81c05551937ffa5875387  gdb/dwarf2loc.h
-8b6c57a60bd33a46d518505e124a22b6  gdb/dwarf2read.c
-84b231464110f272834ecbcf6c8e4ff8  gdb/elfread.c
+dddf51f48b09f6c440db53cafac83b22  gdb/dwarf2expr.c
+e1496b320142f1226e038cc5a10ed567  gdb/dwarf2expr.h
+cf7518fce3540c55cdf572ba483b2db2  gdb/dwarf2loc.c
+5a714f27c437a15781b592538ffb7503  gdb/dwarf2loc.h
+2e217e87d839e70d7e144cffda5580ac  gdb/dwarf2read.c
+f852d804f582274b9a240a103a823ae2  gdb/elfread.c
 23632a118398a1f66b9f91f2ffe78a12  gdb/environ.c
 e8d655fd58c17483b268477190e1fc92  gdb/environ.h
+bcffa161afb33b7db1add0984237ebc9  gdb/eval.c
 d23c32eb2e29c693cd6313e452d96e1b  gdb/event-loop.c
 7ed15aa77b81a53a63826412baa8f353  gdb/event-loop.h
 fcda920d0481656a6ad02fa427fc1cc5  gdb/event-top.c
 f86304a8da40648a4d7efe23eb0bbacc  gdb/event-top.h
 1f6b545be0b6822eca215d0b5f1edfc2  gdb/exc_request.defs
-bc8c47d22545223ca14cb6b567396f0d  gdb/exceptions.c
+0722ffc7906164b4321bb5b4de20f897  gdb/exceptions.c
 51f76d9bb602a38004ea50609f5e75b0  gdb/exceptions.h
-e1d2d147256a68f0e4f97773f869e9eb  gdb/exec.c
+285ffbd763f5c63162301bc77fc06c8d  gdb/exec.c
 7f5057d96a9c6e0abdcd1c2c1fe8476d  gdb/exec.h
-c4589a16d9f2bdb3e371aacc09495403  gdb/expprint.c
-cf4c98d236d0a9c3d5e6952e4160135a  gdb/expression.h
-1931d8dfb98cd694156f7e16c3d288a0  gdb/f-exp.y
-60026cf93e359823eadc25a5d458521d  gdb/f-lang.c
-0cb20ea04e81996e1b74d39ebf3cfd7f  gdb/f-lang.h
+789018cb54d1683c6e7c36e62fd151a7  gdb/expprint.c
+08fbcb3d9437213bbe4dd8860c1e7e61  gdb/expression.h
+5c8dea348b2450e22df0f0309ea02e07  gdb/f-exp.y
+778c18dc40978ed6060690c2021dc1d4  gdb/f-lang.c
+10957cf584e5d98b79b471325434e3ae  gdb/f-lang.h
 3d4913767f4d51cf0e153eedbf06204e  gdb/f-typeprint.c
-e5a05b2c07dda7a81910fafdd63e2e89  gdb/f-valprint.c
-3854b9c10c348224d728f3f5c29856a9  gdb/fbsd-nat.c
+8a40ebf9e9a8630643972af8a53871b0  gdb/f-valprint.c
+39e99d95cb450a14f76f061b4a48a7fc  gdb/fbsd-nat.c
 568eab37d0316aea3692cb2c87a061c1  gdb/fbsd-nat.h
-95fc440b30d6f1de7d636b080ac1c5f8  gdb/filesystem.c
+d306fa5fe1944c74e045ecb82978bcc6  gdb/filesystem.c
 5187f6536581e6b76d5eed7aaeba868b  gdb/filesystem.h
-053eaa21e76d2083aec30434243b70e1  gdb/findcmd.c
-b6ce86c1db9f360737836eea9ebd248c  gdb/findvar.c
-5a6659b99c7cc6526b785d1e84d4dafd  gdb/fork-child.c
+b06f65b9e9de3a9d15af70e73960075a  gdb/findcmd.c
+4120db59efa80ee1173d3135b495da11  gdb/findvar.c
+9223bf7245b656981616ea02d7c1fe15  gdb/fork-child.c
 11f03a1c44fffb9737e44d18e60763b4  gdb/frame-base.c
 4e1313fbee885087315bf3dc9176f6fe  gdb/frame-base.h
 98a7d20803c6682892bf3110e757fcf4  gdb/frame-unwind.c
-fbed831ba3e5fdfda2dcbd4e145360f3  gdb/frame-unwind.h
-a9fbb66649a4af9f4848897b79cdefbc  gdb/frame.c
-e87f376d2ff89180741017895fbfc1d7  gdb/frame.h
-ef9cc67df3ae255a5ddfafe5fbeaffa1  gdb/frv-linux-tdep.c
-a3ee06e89019e0bba787a022a54c39ff  gdb/frv-tdep.c
+a77a6309ae039cd6ce09e7856e1ef9a4  gdb/frame-unwind.h
+db59dfecb1dc4f3d66c405c9e656a34b  gdb/frame.c
+cdf2e9c0f80c87d02cde560cec4d77aa  gdb/frame.h
+c7bef879f9f50b1a6046da8cab7dd489  gdb/frv-linux-tdep.c
+be96fa00f3aa213f9848a1d76688973b  gdb/frv-tdep.c
 9753304e60ddf7615081d2fcb9bbbde9  gdb/frv-tdep.h
-63e71d1ded8baff4b9ede8a90f671b9a  gdb/gcore.c
+641307d8748252a376c92cb9cc0b8c7f  gdb/gcore.c
 bd6f4effc0c116b709e506022b68b741  gdb/gcore.h
+e0dfab79cdeb19af921b88eb6f77ef5f  gdb/gdb-code-style.el
 92b17a5eebcdb1e3ae2f1534866d0960  gdb/gdb-demangle.h
 68b3d61b595166a9e0003e9aeb49743a  gdb/gdb-dlfcn.c
 ea5b2627ed229bb38ae450acdd1f0fd9  gdb/gdb-dlfcn.h
-b197b82498a99ddc00b725fe27990129  gdb/gdb-gdb.py
+2b995a4e23a761ad298a84b35febcf0e  gdb/gdb-gdb.gdb.in
+502343b12c0da902cd77808b6e68e975  gdb/gdb-gdb.py
 5846451c87bf55434a26e5831d734bd9  gdb/gdb-stabs.h
-490e18ec139a95fd61ca5d5fc942ee39  gdb/gdb.1
+284ea5440b77d4961f971360fb5e0e0d  gdb/gdb.1
 ca136bf50e72c9363c030130a9f15b64  gdb/gdb.c
 9198f7b1807c968098814aa2a3901aee  gdb/gdb.gdb
 1fc31f8b5c79d0783a422cbeb43bcd78  gdb/gdb.h
 aaaed24ac9f88844f01d55e31cacc8e9  gdb/gdb_buildall.sh
-c16d710794c62d5b6d48ee86b75b25cc  gdb/gdb_curses.h
+79269e2ce582a2e3cabf908c24e5fac1  gdb/gdb_curses.h
 dbcfc5dfe70183381937e444f51adb1c  gdb/gdb_expat.h
 9963322de2bc289a1a0d64681fa1e4c0  gdb/gdb_gcore.sh
 9d9baf6ee79baadc2a660370cb2c1afc  gdb/gdb_indent.sh
 26d16de11e8b845c1499285cbe478705  gdb/gdb_mbuild.sh
 f37a8da3b3d27fd1b38e759749fda914  gdb/gdb_obstack.h
-7de4f697d9b48b54baf15d799d3c537c  gdb/gdb_proc_service.h
+d5c5a0a7d2b554c4a0c2636ea9ed5cd3  gdb/gdb_proc_service.h
 d2042908ae86234a17bdf0866933d1d9  gdb/gdb_ptrace.h
 92e3f33b81ef9073527d9e30802479a9  gdb/gdb_regex.h
 c9be15a8f6180afaabc23b1cc18494c3  gdb/gdb_select.h
@@ -940,260 +968,266 @@ c9be15a8f6180afaabc23b1cc18494c3  gdb/gdb_select.h
 746a7c60c8c2fac3d6c23f4fd3252f64  gdb/gdb_string.h
 a095283b3946bc0f2ca7dbf0e2b37f54  gdb/gdb_usleep.c
 1739d5f4092ea3a1320cc220aaec4f4d  gdb/gdb_usleep.h
+e23a6edf3ca8e3046781f83905e8ce99  gdb/gdb_vecs.h
 5cc04113d5b6dcd5c685715d2720f639  gdb/gdb_vfork.h
 2b7fa518fa7748a4176c2f92d1465792  gdb/gdb_wait.h
 7ed29825de476f88e66689ed3643a720  gdb/gdb_wchar.h
-44820fc551218587bc07a76296fa0418  gdb/gdbarch.c
-089667cff0b0faa1ade6ba00f652e0f4  gdb/gdbarch.h
-28d264a4bc85fe9ba2180aaf9f6a3939  gdb/gdbarch.sh
+ccab1b00fadff0a05358d273d28dcc80  gdb/gdbarch.c
+d0b222bea98e6c93cf70c2b3bded737f  gdb/gdbarch.h
+864e43d39efdefc845a70bbe7a689f6e  gdb/gdbarch.sh
 d5c16e100ea637455c2b96592462897c  gdb/gdbcmd.h
-189bd281a1c925387c2c1ada48084e80  gdb/gdbcore.h
-2b995a4e23a761ad298a84b35febcf0e  gdb/gdbinit.in
-7400c87b03aca8b636c0ccf713e18e70  gdb/gdbthread.h
-39e9823cf1e2ffcb67c50edfdacbabec  gdb/gdbtypes.c
-72f40f826b552a26403d319a495ba273  gdb/gdbtypes.h
+f678d0312e6fa8b27060af203ec9a484  gdb/gdbcore.h
+7e0261ea05945cd2c52ea2df01822ba3  gdb/gdbthread.h
+fa31455359da0476c43ef3bea24a25ce  gdb/gdbtypes.c
+ff6abac72696e5f199ab339a9b45616d  gdb/gdbtypes.h
 00b7f459cf589520b277d014be34b61e  gdb/glibc-tdep.c
 cc7c6f7aac34b19105a2b362c5626654  gdb/glibc-tdep.h
-07dfee8a14465de666939aa08331300e  gdb/gnu-nat.c
+eeb23388fcdab5afdce4fd15c6c47208  gdb/gnu-nat.c
 b0630e6109ed140e0072ed6b518ebb5e  gdb/gnu-nat.h
-f78961a311c751a31230f0fb1b6f72e1  gdb/gnu-v2-abi.c
-b22c1007a028aa412afb1098be328488  gdb/gnu-v3-abi.c
-e8a14996dd79efebc9e18e5bc63635f1  gdb/go32-nat.c
-059d152775f48f4595445071167ce740  gdb/gregset.h
-eb5e1e7e8d624cdc36606f3b4c1116b4  gdb/h8300-tdep.c
+a7a2e896002c8cf6e214ad6a2ae09455  gdb/gnu-v2-abi.c
+d9f54766e752c02c6e61b0ebc0507b49  gdb/gnu-v3-abi.c
+f21a524734651446435b228371162c9d  gdb/go-exp.y
+09dcb4400aa5405907bb240866dc4544  gdb/go-lang.c
+8de242da8b37a1ebc2abebdbb1d97946  gdb/go-lang.h
+d272d71b0325e93a13ef252e59c127c1  gdb/go-typeprint.c
+6851acec44428a8f9126f12c1905c4e1  gdb/go-valprint.c
+db3edbdbc8ac20ff0aaeb70fafc04847  gdb/go32-nat.c
+a1e76cc0a8065f83ebe3904b24d8ab52  gdb/gregset.h
+bcb0241cb09d30d6739d4495e150f60b  gdb/h8300-tdep.c
 3729fab30e06e1c9e119b8a047ac0018  gdb/hppa-hpux-nat.c
-1801e7165015a560892a5c7e6e59f548  gdb/hppa-hpux-tdep.c
+3c85f0b0d6d20724d227e92f7d114fcd  gdb/hppa-hpux-tdep.c
 2421a937795ed5cff6a645ee3e14035b  gdb/hppa-linux-nat.c
 dfe78449a731cec83f492fded596f8f0  gdb/hppa-linux-offsets.h
 b2beddf37e780044d80fa520c288dc47  gdb/hppa-linux-tdep.c
-2c48b17f93df11f44ea02f8fc8335200  gdb/hppa-tdep.c
+7b4c545cde23e74307f8e4bdb3294134  gdb/hppa-tdep.c
 0191739d0f90de0bdaef0d10147aebdf  gdb/hppa-tdep.h
 ac5adf33c462475329fb5b30e23c7988  gdb/hppabsd-nat.c
 25f6737b31ed6f460a9d339b35eb453a  gdb/hppabsd-tdep.c
 ef36c0171fa231d8c426c5b64153ef8b  gdb/hppabsd-tdep.h
 3a7e096789756d4aa8aa64aec9fb1e64  gdb/hppanbsd-nat.c
-2d549124790a0081958d74fc270b3698  gdb/hppanbsd-tdep.c
+01cb46f19e4d01575e8a3c87c7975fa3  gdb/hppanbsd-tdep.c
 693992c1202b4e2966a499695b0cdcdd  gdb/hppaobsd-tdep.c
-b3bb455a0d307bf79a911e9d5a77a704  gdb/i386-cygwin-tdep.c
-a465a341f28f888f2d1da1a372029a21  gdb/i386-darwin-nat.c
-2c3f076c103c7a589b9709d4f8db351c  gdb/i386-darwin-tdep.c
+11ab5bf272957a7d3583b59e73fcc009  gdb/i386-cygwin-tdep.c
+f66c69e91578b177fcadbe09e2fd8a8a  gdb/i386-darwin-nat.c
+d10b9dbe30ff57138f1e4e7ea0aeaee5  gdb/i386-darwin-tdep.c
 3f11d75566565ae4e14ca56f4f7debda  gdb/i386-darwin-tdep.h
-212a570f7a380a2a19e147f86daaa240  gdb/i386-dicos-tdep.c
-2ffe4433510bfaa0510477f6378ff325  gdb/i386-linux-nat.c
-f3340cf4c049f53ba20ca3e01e41e7db  gdb/i386-linux-tdep.c
+dd3ae36fc4a48a6891b1812b9ba02ac0  gdb/i386-dicos-tdep.c
+f75f27fab6b81c614840abf3f9e02d1c  gdb/i386-linux-nat.c
+7bf7511c327eb60937d5583bffc4206d  gdb/i386-linux-tdep.c
 b2377eb2725875e048f569a39f48bde4  gdb/i386-linux-tdep.h
-68e52d2bdc4f3bafd594520a2784386d  gdb/i386-nat.c
-898b84df5cd2ad62c18faa3fefd5d283  gdb/i386-nat.h
-d05d2097ffb7a9d9d395e4702b2e6128  gdb/i386-nto-tdep.c
-dd0341dc89443ba88c9d3f52e241f598  gdb/i386-sol2-nat.c
-2e03da1adfae2814c932d379dd30bdc1  gdb/i386-sol2-tdep.c
-0644af48c77adac296d83d3fe9bc65e3  gdb/i386-stub.c
-847bbf29cf637de07f6ab88369423beb  gdb/i386-tdep.c
-4e92ca30edd9b14dbf73c22b5c404332  gdb/i386-tdep.h
-e6e0f9028d59e31ca326cfd4c46e1b9e  gdb/i386-windows-nat.c
-d70fa6c3c21ddcdbbbba1214f991539c  gdb/i386bsd-nat.c
-a86fe6b062310d549df0a7df8efcb9fb  gdb/i386bsd-nat.h
+74f6170050bc210048221bc030732d96  gdb/i386-nat.c
+f05b021eaf672b40dd32a733b937b84f  gdb/i386-nat.h
+e6d9a5f907836a846af13e0bc7a1b79b  gdb/i386-nto-tdep.c
+6f2bafd5495abc9c29d9a6cbf78b2fd9  gdb/i386-sol2-nat.c
+9eb584aa3c5ac9359b639d0a383b8fb0  gdb/i386-sol2-tdep.c
+0c876d7b6be969617736270fc82f5671  gdb/i386-tdep.c
+e076c225e034a0332afd2c9ffc7986f7  gdb/i386-tdep.h
+75478759b42ee713ae183e5f37af167b  gdb/i386-windows-nat.c
+78cb575ef6664b5720c02471febbb18c  gdb/i386bsd-nat.c
+06dbf1e75a68d5d3797fb59e05937d85  gdb/i386bsd-nat.h
 09bef1f46773e8b7abfa26d0ab1b40e2  gdb/i386bsd-tdep.c
-f8406e073a218b31e050b2b3785321e7  gdb/i386fbsd-nat.c
+f8ac6c36922f9fd656283591c5a6007a  gdb/i386fbsd-nat.c
 4cca20fa037b8f600f5cddc02882fbac  gdb/i386fbsd-tdep.c
 7f4dad30807a9904c29580189ad5535d  gdb/i386gnu-nat.c
 49011616d247112fa730edbfee9242a4  gdb/i386gnu-tdep.c
 7f4906c6796b8084cf120771eebf26d1  gdb/i386nbsd-nat.c
 83e56803e712a9f285f28a78223bbde4  gdb/i386nbsd-tdep.c
 610c54d2f64c62ee2841a5f3f1cc6ab4  gdb/i386obsd-nat.c
-ad1a0227ab5618cf99b99defc77e5b49  gdb/i386obsd-tdep.c
+62e06a9d8f2e053eef26c9472e676cd4  gdb/i386obsd-tdep.c
 6dc92c37afea3134079db7d44626dc46  gdb/i386v4-nat.c
-ed09a85f99d152b8f6595285811e47ae  gdb/i387-tdep.c
+05a2cacdd8b48b911da37aedd4718bd4  gdb/i387-tdep.c
 6fd84f2f73947d1f9a69badac39431e8  gdb/i387-tdep.h
-67946d50029566cdd23c21431b0d3534  gdb/ia64-hpux-nat.c
+1386aa0a85e1c714b7541e725f7e1b19  gdb/ia64-hpux-nat.c
 127d4e2bda2904e017614cd8139f44b9  gdb/ia64-hpux-tdep.c
 a9ed7016a082f5441b180992b8c36487  gdb/ia64-hpux-tdep.h
-fe2562e96fbb2c9a11382ae51a30f512  gdb/ia64-linux-nat.c
+97702ba5304e7d2ce9b3286857f406ba  gdb/ia64-libunwind-tdep.c
+8e8c46671f0229c2b130f36a45f203d6  gdb/ia64-libunwind-tdep.h
+2ffb1357c9c0a2e6b1519c85c27d5d26  gdb/ia64-linux-nat.c
 6fc2d81eb329067f1796b3a1cf73f95a  gdb/ia64-linux-tdep.c
-ccbbe29ca92bc517865e485883e5062e  gdb/ia64-tdep.c
-7ae9f27a1649431f5a8165b375860d1f  gdb/ia64-tdep.h
-86e276b365a34ebdcca4129e4e4c0cee  gdb/inf-child.c
-97ad72fd24bbd32bb07454573c11c36d  gdb/inf-child.h
-8ffc298d430659d6adc6139313acb649  gdb/inf-loop.c
+927789ca89d2bf4994306d06c437d20d  gdb/ia64-tdep.c
+fd3b2413dcd2ecfb45924ddc99d0b50d  gdb/ia64-tdep.h
+6b4922d7026bb169674e95c922213b11  gdb/ia64-vms-tdep.c
+ac3ccf45a8c3e94ff0827b041051bdee  gdb/inf-child.c
+fa0cdd1dfc5ab8b20d689082c069fa42  gdb/inf-child.h
+bce99e66c435a22278f0ff5408b7e19e  gdb/inf-loop.c
 1a9116bb3413aa9f98b8f2b0d5366ce4  gdb/inf-loop.h
-ab82262a99ae477fa70c3d499a7371d2  gdb/inf-ptrace.c
+2d7888702a48c88e769f2435a9664c02  gdb/inf-ptrace.c
 b734ec894047c2a575083b86e1a0273f  gdb/inf-ptrace.h
-a7b4b329ded1e9f571607a2ce08e44c4  gdb/inf-ttrace.c
+544ef275dfe53dbd0b7c17871239d8ea  gdb/inf-ttrace.c
 c35fd23919a8cca9b4e0d148b4000459  gdb/inf-ttrace.h
-39c4979f1e97139d88303becdb1845b3  gdb/infcall.c
+019a5761d16393daa8c8c5811b4d8e33  gdb/infcall.c
 56b778f95084e0c4623e87cdb168a776  gdb/infcall.h
-593f4c6d28dca788b20d2dfdd1e38728  gdb/infcmd.c
-f5521d21d0d2dfc6f84b716c9d44917c  gdb/inferior.c
-0a1f6f277e59361278df54f0679d5c4b  gdb/inferior.h
+93ca5451a086a4dd3298faacfd238bad  gdb/infcmd.c
+987dc2641adfa8dd5ed1d3083931682a  gdb/inferior.c
+d82c6a59f0e5f85cd27c1aedccb1e001  gdb/inferior.h
 09772df7a350117869dc7dab168a9282  gdb/inflow.c
 db212b74175c347b52d0b5fb3faf026d  gdb/inflow.h
-79710ad85dd2d5def9979ba11b2a30f3  gdb/infrun.c
-87ded6541a8cf1d1268d5f1252349ac0  gdb/inline-frame.c
+fb37b904cdfd921d9ac5089e55a17076  gdb/infrun.c
+953d0e968f674d12486290853e9e386d  gdb/inline-frame.c
 9e313f674a7c2cdb0541ea52f806d134  gdb/inline-frame.h
-a32958cc46afa694d20bb8c387aef2a5  gdb/interps.c
-b3f0edb5dea75ee204bb8b7f5e75f7dd  gdb/interps.h
-1d2952f1fe9bf64524e0c8a1c0e8fbec  gdb/iq2000-tdep.c
+7c92bb52acde002e570a5b1e9683c787  gdb/interps.c
+f6548155072f75d2140870f0a9ce67ba  gdb/interps.h
+57ee09d82421de1099e951230f622c02  gdb/iq2000-tdep.c
 7a43686b9ad36a0a4df5689cffac335b  gdb/irix5-nat.c
-430521c8559f340d837521aec3b78b71  gdb/jit-reader.in
-eec192bfa0fd2626f81af8fc01721d77  gdb/jit.c
+d29f950d3402ad5228046ecd35c8e0d9  gdb/jit-reader.in
+429170489a50b627988581c5e9b78bcc  gdb/jit.c
 2035db4d5753fcfd2f0e9c675850821a  gdb/jit.h
-a457bda7b114806af3af7ed976e7aa55  gdb/jv-exp.y
-dc7e16f31899a682a29ce4b16612a7d2  gdb/jv-lang.c
-cae8cd675aeca9d2f8e7af73041618c5  gdb/jv-lang.h
-31f447b127964310c054c6041f5e2894  gdb/jv-typeprint.c
-37aa01919064c7355d9b31fdb4f3d416  gdb/jv-valprint.c
-61be960ed3209c5785f66bd62e2c6bec  gdb/language.c
-bb2c3940d2d2a38b7f0d74ad155a58e0  gdb/language.h
-0634a5e6560a8b43ffca20c98225320c  gdb/libunwind-frame.c
-a778c591ad033613f430aa515f7ad6e5  gdb/libunwind-frame.h
-a74b21766a9765a86242a6df8cc6a49d  gdb/linespec.c
-84cfbb36d57b8bcdaee972f8fe19d198  gdb/linespec.h
+d8ff166bb1a58e7c0c2ef3173837eb49  gdb/jv-exp.y
+b889a236852ca6b7c5fe2fdab47ad080  gdb/jv-lang.c
+0361b4cb8b8f132dca28ced5f5a49ce5  gdb/jv-lang.h
+6967c5c3d0198b940144603c49c87946  gdb/jv-typeprint.c
+d58fdfb892582a70c87804560a837ea2  gdb/jv-valprint.c
+e1077c322c7202b154cf999a053fe9d7  gdb/language.c
+997423099e93f7ac61dde4d51089bec1  gdb/m2-exp.y
+49592faf95b556fe36281b2a516a9f70  gdb/language.h
+0a4df2eaefef5254d81229ccbfb2f294  gdb/linespec.c
+5497e3682e3afaab892ca11a66ca2950  gdb/linespec.h
 a703ad4a4ed36314b64a5c9a57007719  gdb/linux-fork.c
 18d36d4834f1c8326d00493bb21ce8e4  gdb/linux-fork.h
-f058045084098741497986a0db9f1cd7  gdb/linux-nat.c
-6f39a589e5ecaeb7902a06ce95c7a0c6  gdb/linux-nat.h
+6521fec4073c65020ac367b80f7ec554  gdb/linux-nat.c
+d42ee222c5cd4bdc7b116932ba0bd49b  gdb/linux-nat.h
 34efa87b94bb56f592b2e3d8e5930008  gdb/linux-record.c
 4f7c332ca67fddca8a967c29b464e340  gdb/linux-record.h
-6e3c53a60fd2d844c2685f8748138d0a  gdb/linux-tdep.c
-2c1f2ff626edb4d737791275b49a1ad0  gdb/linux-tdep.h
-cb70543d6fb0bb6bf84b9e2f06f0534b  gdb/linux-thread-db.c
-32cf3207b1e8a30253cb9c96270c35fd  gdb/lm32-tdep.c
-716d2eb691ae55450b8f81f7d699efc2  gdb/m2-exp.y
-bb25e8f9c67f6b78904cdd50f95edabb  gdb/m2-lang.c
-f29eb65b2d68348324594f6a253e2693  gdb/m2-lang.h
-9a9ff26ff19b560d655df7b4781e373f  gdb/m2-typeprint.c
-21369868d39e58d5408ced41b22da55d  gdb/m2-valprint.c
-aec596efff75b3dc4a74a99c454b6223  gdb/m32c-tdep.c
+d91242e68691a6f8b62c6e2eb88fe353  gdb/linux-tdep.c
+b24b56da94864f1a63cbf7efb17a4389  gdb/linux-tdep.h
+4e571d943228fe1b7ba94beb90b52831  gdb/linux-thread-db.c
+d21e1928cf73a24ef2a4dbe1d70987ae  gdb/lm32-tdep.c
+7e732b84d81626922f0f608145189db4  gdb/m2-lang.c
+2901c27c5da685a15e41dbde61bad611  gdb/m2-lang.h
+fcb4be27fbc84f3048b2bf8ad2e63aa9  gdb/m2-typeprint.c
+3b511d6aa5dfb5a1b497baf5f87993d8  gdb/m2-valprint.c
+feabd39c3bbc29d5a1c6501ee39a5840  gdb/m32c-tdep.c
 ffab19e44ff34541e9776a71ca4295ff  gdb/m32r-linux-nat.c
-9218810ae2c9ec59725a168d55529a26  gdb/m32r-linux-tdep.c
-0d563567dc300c1d1ade97db56fb8cba  gdb/m32r-rom.c
-ef7f67e5720cf7b193349f8687243947  gdb/m32r-stub.c
-290b061b24cfb359540ba4cda385a8e2  gdb/m32r-tdep.c
+a4f0b5876bba308cbf4072576ca267f9  gdb/m32r-linux-tdep.c
+2d172a6d8d189c0e602971c79fba28d2  gdb/m32r-rom.c
+aff088d9c8bdbe2569bcb5d625e48524  gdb/m32r-tdep.c
 2b54c98443d6fbf3fc406b4803e11772  gdb/m32r-tdep.h
-7f5e6e7bbe913fe9e6e785d28097f4e9  gdb/m68hc11-tdep.c
-04ef5745a7e6781587638a72b849da35  gdb/m68k-stub.c
-3b30e649fc216ffc9410cf5e14f74c19  gdb/m68k-tdep.c
+e53d830d501f439bc038a224d22e6d36  gdb/m68hc11-tdep.c
+71d3ae33dd866f3e40844ded23550002  gdb/m68k-tdep.c
 f910644ab9a98cb7b1b3a0f143249786  gdb/m68k-tdep.h
 997458d1e25c902914b9bac7122d696a  gdb/m68kbsd-nat.c
 bc0b25c805e74223a86a322eea415fc4  gdb/m68kbsd-tdep.c
-c35e87ba12dad5f3ceac8934258ef0c4  gdb/m68klinux-nat.c
-3987cc5c78b1c8e0fa0af709fef43a18  gdb/m68klinux-tdep.c
-7d3395041e784decbae504004df31273  gdb/m88k-tdep.c
+205d66d261e31ccc5cf843476192f85f  gdb/m68klinux-nat.c
+86412865e8d4afaede465cdbccc69fde  gdb/m68klinux-tdep.c
+601ecb9c4eea6859092469f9e6fe63a7  gdb/m88k-tdep.c
 3d916fa6fa719de16fbfe188c6182750  gdb/m88k-tdep.h
 1669465cf6d34049b52fdb3f5e6b8ef5  gdb/m88kbsd-nat.c
-d1b6cd53ff4fe6eb74cead35c9c90f5f  gdb/machoread.c
-b489d3bafd2e7ba51e16759b3b63423a  gdb/macrocmd.c
-1d7d8929795a0e9372032216f07ad90e  gdb/macroexp.c
-f8d3205b903d66957c0511d6e3e4f3f6  gdb/macroexp.h
+e292d3a10ee852f39b8ecb1dc6952e1f  gdb/machoread.c
+5c0339af4c021e57d9a0a7bfc2589645  gdb/macrocmd.c
+c670ac4662aaa13a5551f4692cf6729e  gdb/macroexp.c
+6e503aaaf5dd8ac36725c3907aa43155  gdb/macroexp.h
 640347cf4f7f055e9fcbf001d41d9c31  gdb/macroscope.c
 adababafd40d86c626dcb94e6b368b31  gdb/macroscope.h
-621a0696d5b9e9edd67f21816e603c6f  gdb/macrotab.c
-bd959a3d4b74b4328f74eac6f7014376  gdb/macrotab.h
-753201703a76e621ce0124a7ab3cca98  gdb/main.c
+c6524f98f7a919834c62e514ff36ef97  gdb/macrotab.c
+93a1071b922cbadf8f162294f2fe74e3  gdb/macrotab.h
+7d6447061ae48bb0860d1eda7387df38  gdb/main.c
 7528c49ee7049af565a08fcedac5ae77  gdb/main.h
 6f347e70580b547f6ab8ba8960c5f3d4  gdb/maint.c
-7714eec9d95c427aaa6694fe41c22581  gdb/mdebugread.c
+d245e6a10a53596f4942f3aeee3e1329  gdb/mdebugread.c
 5bad37174ed008ae64a94441419c8947  gdb/mdebugread.h
-06382b6a26fa36174f63c351af8baaa9  gdb/mem-break.c
+2a2c3837eb20147f9db9274decd8e8e3  gdb/mem-break.c
 9c7b9aa39ba0a76060421e8ae10491ba  gdb/memattr.c
 8eeed02cb99901aff3ef527a7f5244db  gdb/memattr.h
 433e6a7681b49621e71b4bdeafc87cc8  gdb/memory-map.c
 005ebcd68ac7113701f5dba7ffdbbae6  gdb/memory-map.h
 a63d5fac07d93be14c2efc216540b138  gdb/memrange.c
 deade20838c43faf43f789d8d55b4ac2  gdb/memrange.h
-7bcf0f8aaf22b9466128b9de3cd9f48a  gdb/mep-tdep.c
-a738b6d5244bc6b2ed50753599f35c4b  gdb/microblaze-linux-tdep.c
-c1ecb3b1481dcf9c30d6fd61f1149446  gdb/microblaze-rom.c
-87d34215bda0958fe2b244049c47d9ea  gdb/microblaze-tdep.c
+f5c359efe2fb002e62dffc11dcd61c39  gdb/mep-tdep.c
+a0f659f08b62684682d8508c60447b72  gdb/microblaze-linux-tdep.c
+583ec29034ee797b06d6a5d3299a97ea  gdb/microblaze-rom.c
+12e2f3607e284a0fa0527c6715aa700a  gdb/microblaze-tdep.c
 7c775d336f48baf4f98386e007846c0b  gdb/microblaze-tdep.h
-85af2cde55ecc221bf1c38ad7bd6f811  gdb/mingw-hdep.c
-9281c457b4276d5da2b9a142f0fb2249  gdb/minsyms.c
+62d1e9cda0477ae33cacb18767c53502  gdb/mingw-hdep.c
+c3eb31a86379b840aa34419cf868b6ae  gdb/minsyms.c
+fa42c5e99428fa1f93a769ffa1e202b1  gdb/minsyms.h
 38627fb66077d27562b269098b7041d7  gdb/mips-irix-tdep.c
-6b6b9dd31cc6a5b4d671e7a48e351324  gdb/mips-linux-nat.c
-e2e0ae44f96540cefa499a559f4433cb  gdb/mips-linux-tdep.c
-d683f8a0706932d0df71e7d078685229  gdb/mips-linux-tdep.h
-df91ba8a11aca81e6f359fba869a3c6a  gdb/mips-tdep.c
-bcee3035562a7e90e1c07eaa1dd54c6d  gdb/mips-tdep.h
+261ef8358818764573bb21c5c2457cc4  gdb/mips-linux-nat.c
+8920b62910eac1c97dec17db21f9737d  gdb/mips-linux-tdep.c
+312f2c3385820b2b825077c80f0308dc  gdb/mips-linux-tdep.h
+d70804cd4dfb32f4c060520cb55a3e26  gdb/mips-tdep.c
+dc907877943e327c210ada508bbae584  gdb/mips-tdep.h
 c19d0095ced9c78f5a8dd89e7db9d2a2  gdb/mips64obsd-nat.c
 b7aa595582e92e9677781eafeb9854a6  gdb/mips64obsd-tdep.c
 4e7797a2820bef634c1d19c6f827fee3  gdb/mipsnbsd-nat.c
 1321a21eb653421804b8d0f20ebefad9  gdb/mipsnbsd-tdep.c
 424fed4141751f9e606ece0d369cc50e  gdb/mipsnbsd-tdep.h
-32fc7e409081f843ef1117706a464ef6  gdb/mipsread.c
+9781af35ecb37b75eb95de7440b180fe  gdb/mipsread.c
 59dc8a672f8b6cb6ef817b58aa3efe76  gdb/mn10300-linux-tdep.c
-d1508e6ff4dad58f8d4dea1372c1d683  gdb/mn10300-tdep.c
+0654679fba904e41dd73dcd60f366abc  gdb/mn10300-tdep.c
 8b9cdfd48115395abdaf3b07221c02cb  gdb/mn10300-tdep.h
-f36f704943b1ad6be7ffe98681a1152b  gdb/monitor.c
+b602ddbf1036ac1dafd3feb3434c49f4  gdb/monitor.c
 27100bad6288e1e1d6e5f752d6ab45a2  gdb/monitor.h
-2d0fdf65a06a0754477afd83213c6f37  gdb/moxie-tdep.c
+608246fb5c44efe4756be94cc33ed48a  gdb/moxie-tdep.c
 caf846078f3ec43d5049499b8c96328a  gdb/moxie-tdep.h
 31c83b4bb1c5c9c771fe8e1ec3f1e9ba  gdb/msg.defs
 24096aca3294cab3717506c2c69a7272  gdb/msg_reply.defs
-d94802748f312921192416bff2b33587  gdb/mt-tdep.c
+f1c5c4ea5986f2962372e3a1bf257b87  gdb/mt-tdep.c
 2e5056ecb08efe57fbe20c459eb44073  gdb/nbsd-nat.c
 0b697f897b73db91466baf7a02235904  gdb/nbsd-nat.h
-fe226742269503944b688df6e90a14bc  gdb/nbsd-tdep.c
-e7bca7feb5d3851ec413a91b32bd593e  gdb/nbsd-tdep.h
+0449577fc6f272221702afe10d6bee66  gdb/nbsd-tdep.c
+2a485f9c92fbd9f3180316d2b2ff0d48  gdb/nbsd-tdep.h
 21b85dc2ed09d1125c8ab4fbdb043c7a  gdb/notify.defs
-b3f0e3cb2aeb17d8e6e6da801c57e038  gdb/nto-procfs.c
-7fcd2b5fe0a5b27bce73abc50a43b407  gdb/nto-tdep.c
+ca6d882f467e1647d8a09e64b576730f  gdb/nto-procfs.c
+7f554472a759ee1ae6cef53e054c5a72  gdb/nto-tdep.c
 4e6c252a5d3ed4a94be1941602dd5f3d  gdb/nto-tdep.h
-20a6a5b9340f5465de5b38222b61db2e  gdb/objc-exp.y
-40a826356906db12e04061ebc390cff3  gdb/objc-lang.c
+c241cf914faa2a35093c4940380c6d41  gdb/objc-exp.y
+34d06b9939731cb5e54fe60a532eaa65  gdb/objc-lang.c
 11a5bac60367b5bc404a54abd17d214e  gdb/objc-lang.h
-1bdd7ab6aaad7386980a161c297b8776  gdb/objfiles.c
-695e82cca08d581b7d50508cd52c2e99  gdb/objfiles.h
+829d0d71c77ee8f9fbcb735929a6a2cb  gdb/objfiles.c
+374aa5f6912ab278cad8ec706b57f226  gdb/objfiles.h
 8d48d30236568bc552fcaacebfc07c03  gdb/obsd-tdep.c
 9229522d2d823dd20df3d7132b4e2c28  gdb/obsd-tdep.h
-caf67ca428bc63952c41810282ed4242  gdb/observer.c
-1bb60103f260d344d65a87635ee403ef  gdb/observer.sh
-8fe39cbbb16cf37c4a3fbcf676959a42  gdb/opencl-lang.c
-bb5e4475bf156464185cf410a0f2ca54  gdb/osabi.c
+e0c81f423caa07a3cd1b5690334a6412  gdb/observer.c
+0f9b1500024c168ab66801ae5739e785  gdb/observer.sh
+e99f57b723de4cc60538bcc80ba9073a  gdb/opencl-lang.c
+0c9d086d428be30db6d0a660b2760c4f  gdb/osabi.c
 06a3a27ef405208cdaa5fed36404b14b  gdb/osabi.h
-ce43be3df2569ffc8a93dcf0c9126413  gdb/osdata.c
-9cf2216f0d6a6144bf9d928283535eb1  gdb/osdata.h
-3c56dde79b6ca2b1a75c2b643d1f2b31  gdb/p-exp.y
-aa4dc8c7c4cf02d3ab5487482ece2dec  gdb/p-lang.c
-7d96ba7326c21b3b7017bdd8a8aacdd8  gdb/p-lang.h
-2470b01ff4a1f0ab6447a628584d211a  gdb/p-typeprint.c
-ea5b3277f55bd03998b5bf316521f431  gdb/p-valprint.c
-8afa99088c75df0502ec114947e4c4e1  gdb/parse.c
-71c3af45133cee23c48518af0275835a  gdb/parser-defs.h
+4261757e0458ec7356a26d6d919a9736  gdb/osdata.c
+4e65d9451c0fe5024b2d1281ba5df492  gdb/osdata.h
+5bf82f1bc6db9f36d33e4d33ed1f161e  gdb/p-exp.y
+40ffd5e06d933308c197cb83b3ebe139  gdb/p-lang.c
+172a32ad8dd177d94a125652ee739b4d  gdb/p-lang.h
+ffa2177eb12eaa4c1e492529ca891c9f  gdb/p-typeprint.c
+bf8f83672e228dfd73aa2647e631e612  gdb/p-valprint.c
+13bfd7478784c10c35580153a8a43f52  gdb/parse.c
+38ecc77ff4af359817f6ae0440dffa6d  gdb/parser-defs.h
 0f9c35e0e25bf30b79cbab966d8573fa  gdb/posix-hdep.c
-06e48ed7dcba0288dd5181d7a7cc1ca2  gdb/ppc-linux-nat.c
-56b768e1da90925e50c7d4440cf39de5  gdb/ppc-linux-tdep.c
+414be542ca82006e906f5af586a97bf1  gdb/ppc-linux-nat.c
+2526a97d9102f08cee7f37732a1ccc1c  gdb/ppc-linux-tdep.c
 741872aee583b49384eb91eb4930bbd3  gdb/ppc-linux-tdep.h
-ebec68e245e520dfed0a9c64512d2d8e  gdb/ppc-sysv-tdep.c
-d312a9a098b224681c7d594de3209f30  gdb/ppc-tdep.h
+c675b712b585236dd600533025703472  gdb/ppc-sysv-tdep.c
+791d2242ccf354b862988e98710f3bc9  gdb/ppc-tdep.h
 0cae9aca595ce3c0565a686af5c6eb7a  gdb/ppcbug-rom.c
 f43efc21047ab6fdc0eb95a3442889e2  gdb/ppcnbsd-nat.c
-2de42494018e1af7aa07a4a519d42c3a  gdb/ppcnbsd-tdep.c
+9283f94114eb8180502bc12697a42cd3  gdb/ppcnbsd-tdep.c
 6cdd7ab90132a1fe20dcaee43b2e43e3  gdb/ppcnbsd-tdep.h
 9049607181a94aa8d1fdcd45dc38268b  gdb/ppcobsd-nat.c
-cc5077ba7901b0d8431d551c431e63fd  gdb/ppcobsd-tdep.c
+bcc7d78f2bb1eb2f94fd47aa1b314c1e  gdb/ppcobsd-tdep.c
 73b8c04f11eb12f1538b23bc362f454d  gdb/ppcobsd-tdep.h
-467721510c7a2663020302797fc7994b  gdb/printcmd.c
-1e480c892e9aa63e86aa25c9bb138883  gdb/proc-api.c
-3e9717f1fbb8526febd4102a024dda2c  gdb/proc-events.c
-a2783e1a528c6a8044f7cc9f0855ec22  gdb/proc-flags.c
-2901f8f430117a54659d2c0f34a11bd5  gdb/proc-service.c
+52f94fbe21cb8ae0ede74597fed27525  gdb/printcmd.c
+b8a970852dccb194eee11f1d556e19c1  gdb/probe.c
+96ab5f97d6f7a1ae9f7ccd31bff80a2e  gdb/probe.h
+b3c7233d769699356200e744e891073d  gdb/proc-api.c
+cacfede84ae14ff075299ca50a6547bb  gdb/proc-events.c
+0b93444da0d4fa8a0b3b42b355037497  gdb/proc-flags.c
+5838a80a6b7cdee83e90a151bdcb3fdb  gdb/proc-service.c
 a2596b542bfd80f19137b84baa6348fc  gdb/proc-service.list
-256f045d36822366bc55923d710eed56  gdb/proc-utils.h
+1f95b2c36d825bdfa3592c8f2e8e5b49  gdb/proc-utils.h
 75ea6464c771251cc418618d8bf9f791  gdb/proc-why.c
 1de2e2c8bd6fc22a95d8484cbf584e4d  gdb/process_reply.defs
-dd5f6aa157c87d43e55baf73675195de  gdb/procfs.c
+05548ebf1a89d0ae7e8a1bc2175f6b5f  gdb/procfs.c
 0d479bc70954ab98bee8293bb8a0b71f  gdb/procfs.h
-00327948e5c3e6ceaad55242448b4c78  gdb/progspace.c
-1f24b830156b0e49236768f712925fd5  gdb/progspace.h
+8821d7993779a33377b69b54f8bd01d3  gdb/progspace.c
+e5ce8f19defdc0c39dc3f3b5ada78ec0  gdb/progspace.h
 3df8fbc6ee9cafe0d5a15ec993191ce1  gdb/prologue-value.c
 56393b0ef97f05956a64e6bdd2499a2d  gdb/prologue-value.h
-c2f7a7d6c32fc82b01bd1899230a70bd  gdb/psympriv.h
-ca47f817e7e19048d6586a42802f11f1  gdb/psymtab.c
-7016636a5b8fd555de7dc2a7319db73b  gdb/psymtab.h
-a2682505c09c74e10fe8406ff2bd46b8  gdb/ravenscar-sparc-thread.c
-abc372bffbfa3a68ec33067533bc3eaa  gdb/ravenscar-thread.c
+be9f2fd67db11db2ba538122e8065c97  gdb/psympriv.h
+7789555e10ef18c23575a15bf8b73d9f  gdb/psymtab.c
+c5913d2630e08da0c7dacbf21adc0e06  gdb/psymtab.h
+649f530911ce2e3ac9095265d60959ac  gdb/ravenscar-sparc-thread.c
+899333e7a069d77bf32b934c144f7b1b  gdb/ravenscar-thread.c
 b7aa3d914db0b9c6979bafbc9826e339  gdb/ravenscar-thread.h
-e04c75dd2bd4cf95f9e645a0b2fda6e3  gdb/record.c
+1d5f5cd7461877832121df730ea216d9  gdb/record.c
 9391776ea2f0147150d1505bf8bc2607  gdb/record.h
 2cd658db66ccc48ba94a196ab7143bee  gdb/regcache.c
 45377bf8de237b59b19143bf5f1e07f5  gdb/regcache.h
@@ -1201,349 +1235,364 @@ e04c75dd2bd4cf95f9e645a0b2fda6e3  gdb/record.c
 24b772e692b3e8c09d238a7bf90d397e  gdb/reggroups.h
 028ca6684eedc5cc7d6662260636ef4e  gdb/regset.c
 0d013a0516ef9486dbd72f1dc34baf5e  gdb/regset.h
-8f320cc167af3f281ff4ec7fbdeee830  gdb/remote-fileio.c
+19cefde787fca99a5c0de3ebe974751f  gdb/remote-fileio.c
 ae63123bdf6cfee2cafb26a5357d768f  gdb/remote-fileio.h
-6e3352acc620cbef7b2ca57d6dfeeb35  gdb/remote-m32r-sdi.c
-e2168e10a3f96685add418e4ebd71cb4  gdb/remote-mips.c
-3eb49222d524631dd316722a93557ea7  gdb/remote-sim.c
-8c56af1536fea367ba083de758632cb7  gdb/remote.c
+431777a216ad3f79054c98398426d878  gdb/remote-m32r-sdi.c
+dc7fbdaf1877b4b586067552b27dc4ad  gdb/remote-mips.c
+79e288e251e2fb1568ea56117bbbff15  gdb/remote-sim.c
+074ff00f32e8808abfaf81ca8bd47406  gdb/remote.c
 b63b1f20baf437bbb2fa87e630f3ab9e  gdb/remote.h
 f06ddee84bfa448102afb491decdaadb  gdb/reply_mig_hack.awk
-8cd5ccd4b05c5de996101ce08b42aedb  gdb/reverse.c
-6acd887be1baa28b84e622ca982ee5a1  gdb/rs6000-aix-tdep.c
-bbcc94d327ba428adc123e9a57c2b13b  gdb/rs6000-nat.c
-739eedd55f67707daa1eea365d12221e  gdb/rs6000-tdep.c
+0e3d0a7b61fd754f7c3c00cb58045ce7  gdb/reverse.c
+a483e98b4e4412360bd316d02f4ce367  gdb/rl78-tdep.c
+be8c044384feefcc4c9bb5893056e86e  gdb/rs6000-aix-tdep.c
+3691c143422bb6726847d8022caedfd0  gdb/rs6000-nat.c
+953b671889f6a0a73c0eedc3dd9a4d9e  gdb/rs6000-tdep.c
 0a59b97bc0bcfd53a4e24bee5b705a79  gdb/rs6000-tdep.h
-480d9623d748201ccbbfe540a6e94358  gdb/rx-tdep.c
-906def44b79b487d9098b68c9727371a  gdb/s390-nat.c
-9685450a3a672ac27361a1e847a25624  gdb/s390-tdep.c
+5c41467434ff06ef6528b211c3df25c6  gdb/rx-tdep.c
+d56d0a5f6f56682da9664aac05bf00d1  gdb/s390-nat.c
+ddd97c9aa6fa6e61d4b28b89a363f0e7  gdb/s390-tdep.c
 366e8b160c986e8d49929f4346a2ae68  gdb/s390-tdep.h
-96198ec24047077201a8f9c8e2afa2ed  gdb/score-tdep.c
+f45c1911f410cea023e96131201b3238  gdb/score-tdep.c
 f9aa8c6937679e9cad9cebd0eef19b04  gdb/score-tdep.h
 6eda9983bed6a1fa3bbb165fbdb109c2  gdb/sentinel-frame.c
 d93a1b4d0bdbe0fd75c82d7d81c7fcf7  gdb/sentinel-frame.h
-9bd6c8127bc5af594430f5682daaeadf  gdb/ser-base.c
+b3b3ed0e92a210d9edee4d0d025c4d6f  gdb/ser-base.c
 98b0ea5b801452d58e6750f7a171f55b  gdb/ser-base.h
 aaf70d52914790d4db6f298362e8801c  gdb/ser-go32.c
-a95b81d1d09e54b7c96ccc5b782d7f8d  gdb/ser-mingw.c
-7aba2d3296baf7bf51aa37f00467cc68  gdb/ser-pipe.c
+1dcfcc4af5fc8dc46f1dd12ecb3887b4  gdb/ser-mingw.c
+a453f970c82858c16498a0bc98053968  gdb/ser-pipe.c
 262f3d379f6ab070801debe49a898de6  gdb/ser-tcp.c
 727a56c98374639acdf4163f03a53388  gdb/ser-tcp.h
 a3cbfb5b5ed65def7bcf7cdcd552c3c0  gdb/ser-unix.c
 912d086bd16992fdadd74e32e9347672  gdb/ser-unix.h
-1da1b3ead8d3d20de6708e00eb70e92e  gdb/serial.c
-d8e45317045ff168acdd8eda009b08f1  gdb/serial.h
-0dea82ddf6c2cb3f6dbadad51a99133f  gdb/sh-linux-tdep.c
-ffc93e69a8813484cec63da022b68375  gdb/sh-stub.c
-71d8762676aec93f6da99d89a7087a72  gdb/sh-tdep.c
-a2543c08858f9c821944273ff68b4a87  gdb/sh-tdep.h
-3374d575925ffed10caa918acc3b08fc  gdb/sh64-tdep.c
+2c561fd4946a1e038c55ba7554ad1464  gdb/serial.c
+e83610234e1a5993fede6fc06dd3ffa1  gdb/serial.h
+2fb9361cb36df064a8500a034a6deae1  gdb/sh-linux-tdep.c
+3731c0d9a9e3d4f7876455613e8e7068  gdb/sh-tdep.c
+650d281833d2354d3816be633a6fbe42  gdb/sh-tdep.h
+fd5e1fc06ce335284a6f57718162c640  gdb/sh64-tdep.c
+4531b59ba7119886a600bb5d5494c7e3  gdb/sh64-tdep.h
 001284ba6d932eeab25aad9599e7a2ee  gdb/shnbsd-nat.c
 43e493c5d96c09307d7cfaa2c5dec759  gdb/shnbsd-tdep.c
 9ebf58d305f1a465cb7e6327915f53bc  gdb/sim-regno.h
-fb3e7caf858ca40295291f93c7231ee9  gdb/skip.c
+391b2b10baa9b015452d10a3299b2db8  gdb/skip.c
 1568ed93a8c5e2a2014deb6351096a6b  gdb/skip.h
-75d4f4f2a1ff0c255ace634b690c1107  gdb/sol-thread.c
+708486dc1ce1d88b480fd6dffac8ecc6  gdb/sol-thread.c
 b2ce36f8ee443dffeed65c71220bcd61  gdb/sol2-tdep.c
 2005f2104b561626c1adab1abce9c470  gdb/sol2-tdep.h
-9b87821503b1c9d2dae2ca8a7c273cf4  gdb/solib-darwin.c
+229b728e108e0c0ac3c9a4a4cf81d377  gdb/solib-darwin.c
 c4545f9eed917854afe2930dcb9cff58  gdb/solib-darwin.h
-6ffcbff1d0d0b11788e333434acb514c  gdb/solib-dsbt.c
-6c907ebadfb454c92336c980e69e7239  gdb/solib-frv.c
-4b66f7c313071550ebd4c8bff3d196f8  gdb/solib-ia64-hpux.c
+b87b7492cbe7856253c3d8bdfa900463  gdb/solib-dsbt.c
+5e3a3803923a1f944bf3b65366a88354  gdb/solib-frv.c
+9eb3d34455148c82b45e51ba939c190d  gdb/solib-ia64-hpux.c
 c96ada7a652aeddfb06e6bffb7c16022  gdb/solib-ia64-hpux.h
-eea3f4e5037361e8fa2396ea40d91283  gdb/solib-irix.c
+3f819209cfd167c5e47ec0dda93bb724  gdb/solib-irix.c
 05574785d2036d6832222da87e15850e  gdb/solib-irix.h
-75b393bf6e08a33ba6d30e7d16c384b4  gdb/solib-osf.c
-3f14cfdd24c886ea679bb9012a3ec95f  gdb/solib-pa64.c
+0e874b7ca3ec444479936995677ff776  gdb/solib-osf.c
+2471389137a1ee6c4c2f2cc189378a78  gdb/solib-pa64.c
 b4b7837f2404b9e6876a0731a7d2e30c  gdb/solib-pa64.h
 25ad3c7641ad3e0acc31eca8daba0d09  gdb/solib-som.c
 c0b9838613d0717a063f9a51a6a49418  gdb/solib-som.h
-00b1fda6ddebbfde149692f0dc182656  gdb/solib-spu.c
+50504ce445181d4c34d0f716c06dfeeb  gdb/solib-spu.c
 43597e17b5ca3e3157be747af5fa55c6  gdb/solib-spu.h
-c5eb3f50c63094059a580457a1b00630  gdb/solib-sunos.c
-3dcd18e325f805ebb34621075041863c  gdb/solib-svr4.c
+5bf4f8ab28893cd4304e7e66e0c89cbd  gdb/solib-sunos.c
+133617e1c76e32e0a6eeaf2fb77ca9e8  gdb/solib-svr4.c
 432575fc9a780b4b1f393765e8d216b9  gdb/solib-svr4.h
 3de0732e9f718144978021fa52b84c7a  gdb/solib-target.c
 94e395967e2522fec809bcb6365bcf95  gdb/solib-target.h
-fbfaccb1904bc825401831aa24197302  gdb/solib.c
-8f81374226e838b07015ed8719345f71  gdb/solib.h
+17ab69c7785cbabed928847f29c723a5  gdb/solib.c
+bfa3c6ee1dcc517e0e00979b87273b8e  gdb/solib.h
 0845f0278e2911f865c2caea6f74377f  gdb/solist.h
-a4b72e9273939455f26b955b7f9542ec  gdb/somread.c
-d9ee156940e32efbdd84a5d37268bd69  gdb/source.c
-10a4812247218adb9e47531ab9e80db6  gdb/source.h
-3698601c3f0d230e023f931ed0544884  gdb/sparc-linux-nat.c
+18141d89fdeb2719e37a01995476956e  gdb/somread.c
+121c7b443ab76fd39eb05d4259969ea1  gdb/source.c
+79f2d842be3485c4ffc3985c23925378  gdb/source.h
+5975526835a4cb122e23a991fd7f0efc  gdb/sparc-linux-nat.c
 817db6debff809810af952eba82f2a82  gdb/sparc-linux-tdep.c
-098548e89b8c41c5398267c116192405  gdb/sparc-nat.c
+d266b023a43650fbb11618fd3e8fb88a  gdb/sparc-nat.c
 b8d3e2c43a5cd539f33b7a648b014daf  gdb/sparc-nat.h
 b60dc63c802c777900b9c405d3f66474  gdb/sparc-sol2-nat.c
-3e59591ae80bd36297193b4e59f0bcd1  gdb/sparc-sol2-tdep.c
-8edc014e1b5928dd9761408fa7df0d64  gdb/sparc-stub.c
-b2970ac32ef352fe63d2eab141a78152  gdb/sparc-tdep.c
-5366e97baeaaf349f31797eb04b8b6fc  gdb/sparc-tdep.h
+dea495da3965e296f44ec91f9952828e  gdb/sparc-sol2-tdep.c
+2650dc5aaa15b8dccae66c5560cb034a  gdb/sparc-tdep.c
+04757673dce803703b5bf98acf4a004e  gdb/sparc-tdep.h
 7f7f09df114f98ed61934d78a1bce03d  gdb/sparc64-linux-nat.c
 658fdc6617db70d9c4f95fad23a1e6e1  gdb/sparc64-linux-tdep.c
 99cda8eeb5fa3bcf6dd9146b2516ca5e  gdb/sparc64-nat.c
-8dcfd2a7bc02164f6855ac8135677bca  gdb/sparc64-sol2-tdep.c
-b25bc57fae5719273b3a74aec2c737e0  gdb/sparc64-tdep.c
+17928c54bdb815fba4823f074b440f16  gdb/sparc64-sol2-tdep.c
+6f939ac1c9d3fe721e7472bef33a768d  gdb/sparc64-tdep.c
 beba999053a41b3a6e59d7011fdcae8a  gdb/sparc64-tdep.h
 c16822d5f92bec400cdbcd8c54e0b893  gdb/sparc64fbsd-nat.c
-a9e41059fcad8f4d50eaddab12a5c3a2  gdb/sparc64fbsd-tdep.c
+6992b5d21ca31fbd5044e8a8e3feefaa  gdb/sparc64fbsd-tdep.c
 a759e40ffee310499b3121797e2208b5  gdb/sparc64nbsd-nat.c
-ae11c6b1e35ce966c0c439350ad08986  gdb/sparc64nbsd-tdep.c
-c8431bffa3e046948e6b15df6771e0d8  gdb/sparc64obsd-tdep.c
+c10cb429b238ba6acaed1e00b1326a25  gdb/sparc64nbsd-tdep.c
+1bdfe1be269406fccc34131a87eabe63  gdb/sparc64obsd-tdep.c
 87ed4f182a3fcaed4a9a76545cf31442  gdb/sparcnbsd-nat.c
-cc2d78fc20ee5e751b966bf4acaa1905  gdb/sparcnbsd-tdep.c
-549d0b35739a80f6e5b8e7c52bf4c0e9  gdb/sparcobsd-tdep.c
-8dcf88eb43438f9e70bfd9621f4f890e  gdb/spu-linux-nat.c
-38778d2a021765f273e2ea7daa87f9a6  gdb/spu-multiarch.c
-a5df527f7b0e2754239e7bde34ffe918  gdb/spu-tdep.c
+076a4cf97730cb838679382c5d6c6d02  gdb/sparcnbsd-tdep.c
+72cc45aa0bf34082ffc285ec65593972  gdb/sparcobsd-tdep.c
+4d62d88defbdc1727ccce53e87bd55ca  gdb/spu-linux-nat.c
+0db882acb00d468e593dc1044353a45c  gdb/spu-multiarch.c
+e68c01c26764767406a17951627ef931  gdb/spu-tdep.c
 b01d53391d1c53810714b24b06c860cc  gdb/spu-tdep.h
 7e9582b9fbe1646d6654e1383309480d  gdb/srec.h
-cb727c206887e592b880069e1e6ab264  gdb/stabsread.c
-b0bf18c10ac98df18b360f88ed88b771  gdb/stabsread.h
-5382a8d946402290b2a259077051ae18  gdb/stack.c
-181e1e955c1315bb2971977a556fbf63  gdb/stack.h
+fef56cd72e6212e1263094e336bdb9f3  gdb/stabsread.c
+465ec7c00cf24617c843099a0837928b  gdb/stabsread.h
+99fbe223a5ec4bd330378ab1b477d916  gdb/stack.c
+cdf6a59fc4b82140ee363c8c7bc58bce  gdb/stack.h
+9f948196eb60724b3402c1ccbe779091  gdb/stap-probe.c
+583c879f1299ce2c0b255e49cd157498  gdb/stap-probe.h
 e71fdcbe183dab6e9bb2a6e983982a66  gdb/std-operator.def
 a3f6ba3854e8f56a0d99669d75bcfb03  gdb/std-regs.c
-de9f00a9defe22b75ab99f21ab8af152  gdb/symfile-mem.c
-5b0e6adfcb9c63cefb64680d014245ce  gdb/symfile.c
-eb93aed6cbd385de02f0f5c03083f49a  gdb/symfile.h
-df66cd056dba6d5ab71ced54f1778991  gdb/symmisc.c
-ed7c866901430ba182e4ebd910f4602e  gdb/symtab.c
-0740947a99ad25a5453f19ca2884688d  gdb/symtab.h
-b9fddb4822db5c8bfce8fd4e4a81f6eb  gdb/target-descriptions.c
+e444811cef88edbfb0ac4dee7c90d538  gdb/symfile-mem.c
+6354a2665263c1921d37e51d150257ef  gdb/symfile.c
+b6f486982248fc430b80784534e1cab5  gdb/symfile.h
+969b1e7fc926eefa49cdbbc025c406df  gdb/symmisc.c
+df40a3dbfb38349a08392d9adba9e75e  gdb/symtab.c
+9d95c62fb6507edbbad4f2d51bdcd02a  gdb/symtab.h
+57d1f5920312d69921291e92070237f7  gdb/target-descriptions.c
 8f8299b1ed47bc6eadd7b99f330e7982  gdb/target-descriptions.h
 4b119cbf70888294af52910c66df8c78  gdb/target-memory.c
-d9f926df416ff4df503b891ef2f2b92e  gdb/target.c
-994a2cb175c4f3f023dc60301050939c  gdb/target.h
+e3e16f5b5ccd99ae371a5891d653baf7  gdb/target.c
+6ab31a3431d7b6101d6d1fa651151058  gdb/target.h
 213e9a1aa6aa842bc48add1bef3302ea  gdb/terminal.h
-8ec8703fbc0e57ec2d7b0a865e52e6d4  gdb/thread.c
+325e232ceb28c8ef73cd4c8b26c11fe8  gdb/thread.c
 65a8fedc5987ed257bf1d82d7708429c  gdb/tic6x-linux-tdep.c
-841b6c350640ac1ea3dbc9d771e5fe10  gdb/tic6x-tdep.c
+ddfda92b7e7fd5c8477a77be4f2953aa  gdb/tic6x-tdep.c
 e6e857ce393ac8c76df6519bdd1f9e09  gdb/tic6x-tdep.h
-0dcd052a60397327a42fb3985d1a5923  gdb/top.c
-1b1b9ecc07579e69590b6a032e5ee451  gdb/top.h
-3181e0766be2cee4345c108a8eeea454  gdb/tracepoint.c
-4dfa3d5cf2b522e6e52a3860130d6014  gdb/tracepoint.h
+493d46e2dcd66b878f8483e98326fb20  gdb/tilegx-linux-nat.c
+a2f7ab490393dc25b552dd73b8ae1031  gdb/tilegx-linux-tdep.c
+a9ded0a33a8dbaf04c82a8def2ff367b  gdb/tilegx-tdep.c
+921e27777b2f509be9a869e977a61792  gdb/tilegx-tdep.h
+bc8c9af0f784476a66bcf658e37c7ee0  gdb/top.c
+5cc081f3fda6114302dbb6a3f0b191c5  gdb/top.h
+fa08724a37c2058e045361bf006ad4b8  gdb/tracepoint.c
+6d0ef6ab14a2e5b46913900fb3efb540  gdb/tracepoint.h
 967dee5925902600fa8ea977577153d5  gdb/trad-frame.c
 1945bfa0dfe2045dc0cb840c30d8f8fb  gdb/trad-frame.h
 3c1425b540e1dae5aef6dc3a595e327e  gdb/tramp-frame.c
 af6235d2c2f3347a125fdc1670534767  gdb/tramp-frame.h
-c881d68956224343d34e59b16abee359  gdb/typeprint.c
+0398f3e11d072f438056eb1c71855c27  gdb/typeprint.c
 9cc274a3ae0c31706c3b839bd8ec9b25  gdb/typeprint.h
 ac3dcf1db5e4eb541f894d480760494e  gdb/ui-file.c
 466c8ca9ada4c12c73854e47f42db525  gdb/ui-file.h
-b0f1c5de64dba4f66454720847d40069  gdb/ui-out.c
-d1ded92d61607c5d0297c93dd67c6b9a  gdb/ui-out.h
+bf26999aa7869774d633c2b6e96041cf  gdb/ui-out.c
+e07773160f933c0c8c8626094b9a6d01  gdb/ui-out.h
 2df01152846c29ea85d7021598429b5b  gdb/unwind_stop_reasons.def
 a95ffbcd131a4c21d4970aaff85593cf  gdb/user-regs.c
 90558079ac08923103a334886cf2cfc0  gdb/user-regs.h
-fedadbf27af2a9398d90ae1e236b809f  gdb/utils.c
-00d468434e3c6df4c17c0b9f3ec92731  gdb/v850-tdep.c
-abdd8b5c84fa5d06f8df6d94609f1d54  gdb/valarith.c
-271d6937e356cd8a9a170f60c66028cd  gdb/valops.c
-212b28c56d0788e514fb3b23e73a6900  gdb/valprint.c
-8a428b2e827358c5ef49e1293cc9594a  gdb/valprint.h
-2ab8ebaba3407869a6151c41bbfbac1b  gdb/value.c
-b56464e151c47ca489f2ca01deb21ccd  gdb/value.h
-1ac6c0838b9ecda3b855618b0e326df9  gdb/varobj.c
+e7f21c33f6a40033edcaf0caa5a5b5c4  gdb/utils.c
+11af50337ccba7c66fab839b21eca95d  gdb/v850-tdep.c
+b799cb34404e6370e33f0853aaea7030  gdb/valarith.c
+e1a32655e26049221103a5c751396ae7  gdb/valops.c
+2f64099e7de31e998ff209296465ede3  gdb/valprint.c
+0e38e4a97766782f0a93c93d1734fa6a  gdb/valprint.h
+8c157b6a085625450ce750136373cecd  gdb/value.c
+d97bf4af58b9cec40578126c0fda8fed  gdb/value.h
+2b37645cdd19555e06775ebad88bf225  gdb/varobj.c
 874e03757eff5c0d2c086e2cf7967144  gdb/varobj.h
 f0c8d385f700eeb4c4a95ae78cf0d3c4  gdb/vax-nat.c
-c44dd926e21174c53992c326dcdc8e2a  gdb/vax-tdep.c
+c38c7d0a945ebc05b1efdc5d78b7d538  gdb/vax-tdep.c
 59f40e0dd82280b35dbdcb84061ac245  gdb/vax-tdep.h
 1b32a618261bc67407e953e4c49dc601  gdb/vaxbsd-nat.c
 89248bc9aae5dac9bc9716fac67aad5b  gdb/vaxnbsd-tdep.c
-70bbcd3521e0986ed9368dac91620d8b  gdb/vaxobsd-tdep.c
-2d3a8dd8020df5ba26f34232fab12279  gdb/vec.c
-b03c6cf101ad30bee65195c9f7afc8de  gdb/vec.h
+dbbd1783603802bffc9fce0683394796  gdb/vaxobsd-tdep.c
 fe8a5f81dd9b4284facd03f11f79a03e  gdb/version.h
-6b6ca27c1897d473226f20f54f215bc8  gdb/version.in
-db4d8c78647c2420b8a9a978a73627ed  gdb/windows-nat.c
-187722ce28b0e44661d213c94b2030a3  gdb/windows-nat.h
-3ff955d7da99ae492c087979bf3652c0  gdb/windows-tdep.c
-bde65922cd86d439336c403a13f84524  gdb/windows-tdep.h
-ef8f6f0f234047fd89cbe966c799c0d8  gdb/windows-termcap.c
-816a03f4aed6da244f824070c5a77500  gdb/wrapper.c
-17ed0ef64cc90837f9a085de9394c609  gdb/wrapper.h
-15b79fdb6700d4d9b1a6bbca0881b6da  gdb/xcoffread.c
+183d476e5f65a2f5252a5043ba3688c0  gdb/version.in
+116c45a916c6d2f004d466d50497fb14  gdb/windows-nat.c
+5d46a3efdb81bad1cea8a80c561eac32  gdb/windows-nat.h
+b7b59da8f83a39a200ed5e4ed1780e9f  gdb/windows-tdep.c
+17e64a5e69f4a2327f1eafc3766dab61  gdb/windows-tdep.h
+a10a5289532bb289cb032dd85af470ac  gdb/windows-termcap.c
+791bbf961b008f7c4297e0fed19457b6  gdb/xcoffread.c
 d063d477dd07fac8c37a2fd75f1c29fb  gdb/xcoffread.h
-fb1a40c8b6481bfc2fca1be2d3dbc338  gdb/xcoffsolib.c
+3fadf0fa5c99270887b96bf345533276  gdb/xcoffsolib.c
 bd3019fd88eb83386eae0f2228ccd9ea  gdb/xcoffsolib.h
 2440f524eb3ba4bd6421f5f53e490af7  gdb/xml-support.c
 929d176b57dd907fe0cd709f0a67a06f  gdb/xml-support.h
-024c3df1e02741ca624d27959dee4292  gdb/xml-syscall.c
+09501dfeada12bc14be781fabe6abd8e  gdb/xml-syscall.c
 65d280f6f00699d04a51a6208dc9eae3  gdb/xml-syscall.h
 f1705a7f2c5e83d98df3f07cc6c51b39  gdb/xml-tdesc.c
 f7fe1ee891de926f1212ad618ff52913  gdb/xml-tdesc.h
-1bfa56233c440ea4559bf5ce7e2561ff  gdb/xstormy16-tdep.c
+6e854333d8bf46c635d4e5e4a40f1466  gdb/xstormy16-tdep.c
 775e8484384f811250e79c86208ae0c5  gdb/xtensa-config.c
-d9786605c8746cb33e5b8c9ca32ad5dd  gdb/xtensa-linux-nat.c
+e091e881e9cde7432b18f69a87976a0e  gdb/xtensa-linux-nat.c
 4199af98171df1665c897b191715f867  gdb/xtensa-linux-tdep.c
-26f26f548d6f9aaef74fb690e9de1e65  gdb/xtensa-tdep.c
+c5a0660ee258948051bcff1eb9e634df  gdb/xtensa-tdep.c
 cc8aa5d06a8539a75b2fbb82072566a1  gdb/xtensa-tdep.h
 8ccfd91194d0a3c2d817d60570520445  gdb/xtensa-xtregs.c
-74023bfc84f9bd13489867a2738e29ce  gdb/cli/cli-cmds.c
+a0ee257136bcbc46c0333b556d63869c  gdb/cli/cli-cmds.c
 92be51e5007e0ac5587384d8a17a38d3  gdb/cli/cli-cmds.h
-86a3c9553d01007047edd588764f4b62  gdb/cli/cli-decode.c
-1729881f1fc06ae91006a6f9fab96c68  gdb/cli/cli-decode.h
+89b4b6742131967b5fd0687b1464bf47  gdb/cli/cli-decode.c
+804d7d0ef72adca597ff2b03afe1b029  gdb/cli/cli-decode.h
 022d3434d85e50986e7d0bb6b9de4712  gdb/cli/cli-dump.c
 2f8090cd6fd1c4c34f667e03b65047d3  gdb/cli/cli-dump.h
-b1e2c3d32272fa5cf14b8f54e0f41d00  gdb/cli/cli-interp.c
-1e1773347fd0f1f76a95790ddf286769  gdb/cli/cli-logging.c
-df22522b8d89e9b74125c68adea23798  gdb/cli/cli-script.c
+f3d2680dd4d1ccc9fa0b8c9fcecb7259  gdb/cli/cli-interp.c
+7abc8ae37426a92059753c160045e93f  gdb/cli/cli-logging.c
+34d9d7077183f9a4ece11c76788a4293  gdb/cli/cli-script.c
 2fec130f3dd11cd8350c1c51b8b07871  gdb/cli/cli-script.h
-0a075de06afad57b96457b8a217386c4  gdb/cli/cli-setshow.c
+91ff7a64e33132af6d24f83817bb9b45  gdb/cli/cli-setshow.c
 6cdc0e7f9e3235e72db1e12177b53ff6  gdb/cli/cli-setshow.h
-71dd669acf7ca4774563e2f6a0213668  gdb/cli/cli-utils.c
-fbe3d37dbd6159f3c112b0c0e6e32b4f  gdb/cli/cli-utils.h
-746d0121b0efc230a3ad6f2bbc54d410  gdb/common/ax.def
-add5155df9182d0fde4582a1f3e7f187  gdb/common/buffer.c
+db588446dbfee43c454a5b98c35ff918  gdb/cli/cli-utils.c
+d34d8ea7481f96130bf950899251a712  gdb/cli/cli-utils.h
+5a9776a1b3db379ce1ff32c602a5acab  gdb/common/agent.c
+ade3a841a6fb52d4451af0b822a952cd  gdb/common/agent.h
+4f4257e4b0db439e7d4a73d89298a886  gdb/common/ax.def
+5c3d994ffe31589c0aae8479b181f068  gdb/common/buffer.c
 7a48bbb93c0070cea1b22c26198ed936  gdb/common/buffer.h
 f5278c92b4b4cb75411a27f74a38d009  gdb/common/common-utils.c
 7485e5498498233e902148dd1526bf59  gdb/common/common-utils.h
-64524e4a339287b5bd3cc675d86177ab  gdb/common/gdb_assert.h
+f4b4a909b8d61142bf17740367770c4c  gdb/common/format.c
+fbae394db0f3c944fceef5c438473397  gdb/common/format.h
+ebffb1c568f9085718add1ce92bafeb6  gdb/common/gdb_assert.h
 2c78a15fe780c28f5696ffee524b97e2  gdb/common/gdb_dirent.h
 9d11be3cf77ea8e3ca052c45b21c718b  gdb/common/gdb_locale.h
-54c69454a7002ea46feded8ccf312dd3  gdb/common/gdb_signals.h
+2099255eb26528e48b92e41a8ba418c9  gdb/common/gdb_signals.h
 1f943cf46ba7528d41518cce7b754f6f  gdb/common/gdb_thread_db.h
 b8cb96ba4c9861852f641c38ad9e57bd  gdb/common/i386-xstate.h
-a458658383d6fe274f12eaeac0d54518  gdb/common/linux-osdata.c
+881610b56ea4a5be6780c0c84506ff3d  gdb/common/linux-osdata.c
 09a783c56d0edb795c3ef85c3a6aa819  gdb/common/linux-osdata.h
-07afdc153daa9f09a05847ef56b84c63  gdb/common/linux-procfs.c
-5929fbc3c096063a3f128823f98b6ea2  gdb/common/linux-procfs.h
-2daea2bd50a632166ccbdb32c584b767  gdb/common/linux-ptrace.h
+ea27e54a6db2efe7194a240a07c611f7  gdb/common/linux-procfs.c
+0ab2dfbf3272bb9fdb87f6d3d3058e84  gdb/common/linux-procfs.h
+fe1b1a4e094025abab299289162722a4  gdb/common/linux-ptrace.c
+bf52cb2bb8ce8ed53d2254f2ec282df2  gdb/common/linux-ptrace.h
 61d1da6a52787d2e1b649008559f8abb  gdb/common/ptid.c
 36aff2da1a41f691e30ea187cd5c818e  gdb/common/ptid.h
-51d1140048605bf6d96780ee90d043d6  gdb/common/signals.c
+495ee7a30752aa44a61788564d0df559  gdb/common/signals.c
+d20451e415a729c84f8e6ca3e99403f7  gdb/common/vec.c
+a74a2d46c495bca62e088661165d931d  gdb/common/vec.h
 382239e00783ce9570324d91721e1ac5  gdb/common/xml-utils.c
 393e182f6fb783a37fc6abf904f64b96  gdb/common/xml-utils.h
 f272895bbb7af850cdb42655661ffb5a  gdb/config/nm-linux.h
 b19e88f28d5fb4bf90ca1a72c2424a07  gdb/config/nm-nto.h
-9c7b5aefa7c8f93d2df9912d2d10117c  gdb/config/alpha/alpha-linux.mh
-257c22fe7ff59f25920a4f4f670b172d  gdb/config/alpha/alpha-osf3.mh
-5a0d3c03ea3bd81823479f2c9919d73f  gdb/config/alpha/fbsd.mh
+b0fa09dc7738b6c05b509d9a0a20e045  gdb/config/alpha/alpha-linux.mh
+ba6edb4dc3ce5a4fa3d07f930ecaa4e9  gdb/config/alpha/alpha-osf3.mh
+3c04391aa783e9e4629b853321d2978f  gdb/config/alpha/fbsd.mh
 20481186c3d462f0c728913b6cc6edfe  gdb/config/alpha/nbsd.mh
 34143182870331ee0fba719fceef2248  gdb/config/alpha/nm-osf3.h
-5d5c490d96c308bea6d0c138e60ab226  gdb/config/arm/linux.mh
-b13eecd76b59b56aaeadbff80a7e368e  gdb/config/arm/nbsdaout.mh
-5d7cd55964cdcb59a85bfa7e1b9ecb57  gdb/config/arm/nbsdelf.mh
+c0243fc7e6ece16d972f978316aa95b6  gdb/config/arm/linux.mh
+96af27fec40c93f150e765cd9945377e  gdb/config/arm/nbsdaout.mh
+0cf93dd677f37b32e39c18d54981bb7d  gdb/config/arm/nbsdelf.mh
 bde487afd956fa6e0e51bc1c36ba2daa  gdb/config/djgpp/README
 cdc11406d9e6e5c91f7643088983ff30  gdb/config/djgpp/config.sed
-0e81c0d814454405b9e032e50363dd3b  gdb/config/djgpp/djcheck.sh
+02d448dbf55168b9b0bfac0b00d26fb7  gdb/config/djgpp/djcheck.sh
 6341392b59524374794026f5889a6cbe  gdb/config/djgpp/djconfig.sh
-a8f519512b5f1c8228c73327f8c065c8  gdb/config/djgpp/fnchange.lst
+a7e705b2a5c7dbbab86289ce8f783254  gdb/config/djgpp/fnchange.lst
 0a7797cd6a284ec085fddfc8ce9bced2  gdb/config/djgpp/langinfo.h
 760f2a1a4a8ff241d11b4ba1a6b5bc2c  gdb/config/djgpp/nl_types.h
 92416cf80ded37e04206be9a7fe438cf  gdb/config/i386/cygwin.mh
 c4e5ea78ff53471f15c998374add9cd8  gdb/config/i386/darwin.mh
 1a52f5e42e58999b9530a09ab80716e0  gdb/config/i386/fbsd.mh
-a9a239d338788e631b3cdb01c7056914  gdb/config/i386/fbsd64.mh
+d63a6e3ee8977669c0cd5b4bae958ea1  gdb/config/i386/fbsd64.mh
 a09f5e6711d9af7c376924bb20e0419f  gdb/config/i386/go32.mh
-81f79bca994c05a08155eb84defa0897  gdb/config/i386/i386gnu.mh
+eec2258b58c41a5abe9c7cf8497f7439  gdb/config/i386/i386gnu.mh
 ba1617a7f22e81d81b568678be05a163  gdb/config/i386/i386sol2.mh
-0a1fb0e4e91c7d0b3235f7141e484573  gdb/config/i386/linux.mh
-bc8528203ba0a0554d66acab07c4a492  gdb/config/i386/linux64.mh
+b57cee87d9392e14163e3b79557e2f1a  gdb/config/i386/linux.mh
+972b1b76cf309e6b5fe25f02886a9526  gdb/config/i386/linux64.mh
 92416cf80ded37e04206be9a7fe438cf  gdb/config/i386/mingw.mh
 61465f305cf4d8245e696761d2f01892  gdb/config/i386/mingw64.mh
 227ba98d865063107c08a9530ac2f8fe  gdb/config/i386/nbsd64.mh
-87558d4b911e222ecb22ad12cc3564c9  gdb/config/i386/nbsdaout.mh
+8deb3619fb3ed09747d5b85219d7fd48  gdb/config/i386/nbsdaout.mh
 9a03d523853e2737c9ad0b72551727f3  gdb/config/i386/nbsdelf.mh
 3bf3160ed7559ef3a2f4fcb58a07883d  gdb/config/i386/nm-fbsd.h
 5f7d08b12e2ea210ed04f7ee80b9e8a7  gdb/config/i386/nm-i386gnu.h
 768aafd492586f1951ce658073749015  gdb/config/i386/nto.mh
 fbecf9fa0f174ad85ebc30c2f02a1b17  gdb/config/i386/obsd.mh
 611c0da16ce75d39f6890ff211438c70  gdb/config/i386/obsd64.mh
-aa061d4665eb9c96abb60eb720b1bc84  gdb/config/i386/obsdaout.mh
+abf27bc2051c1bd83cbea1b5c9df65b3  gdb/config/i386/obsdaout.mh
 54b61d3b9fc33b487a839adeabe302df  gdb/config/i386/sol2-64.mh
-53017e21a20f4616adb789571ac10bd8  gdb/config/ia64/hpux.mh
-876cc2f1d2dbd8a33d15d231602bc686  gdb/config/ia64/linux.mh
-ff30a2bf901cdd7c35ff4429ebae02d8  gdb/config/m32r/linux.mh
-3a62f2190cefb37da29715d9deedeaca  gdb/config/m68k/linux.mh
-ee16d60a2b24a2609a6faa5062c4cd98  gdb/config/m68k/nbsdaout.mh
+68542493a958e6f0edd04069a733f6fd  gdb/config/ia64/hpux.mh
+ff16f3a47576d78333f4e5a31d3a4daf  gdb/config/ia64/linux.mh
+c516b286a5ef512b4202a01c7a75cb95  gdb/config/m32r/linux.mh
+1ead00405020f55ce83acb2dc352747c  gdb/config/m68k/linux.mh
+f5ea633fd339c39e5faf1a07f1c307a3  gdb/config/m68k/nbsdaout.mh
 cb8b6190eebde036c1376deb445c072b  gdb/config/m68k/nbsdelf.mh
-9ab03f6984d3ced1312b58bd5ec9a3f5  gdb/config/m68k/obsd.mh
+ea9f935dd2928d3a7a97c0765df6d4ae  gdb/config/m68k/obsd.mh
 48bfa91312c1e6daebf1f587fa78df9e  gdb/config/m88k/obsd.mh
-d686b89a460ce6430e76547e30dcbd0e  gdb/config/mips/irix5.mh
-37b8dfffc3a0fdff59c4dc63a9e3ebd3  gdb/config/mips/irix6.mh
-2e848060bf059ec68fc4c402fd9d060b  gdb/config/mips/linux.mh
+0f7503671c0f1714bd87ee7069adaa9d  gdb/config/mips/irix5.mh
+a6024342c7aa0a779fdf25c4a80c5c5c  gdb/config/mips/irix6.mh
+f2b0aba8b36cd400bfe913f444dfcf50  gdb/config/mips/linux.mh
 35cc06513a613ea3ddfbbcafd2806b8c  gdb/config/mips/nbsd.mh
 a134a67c299c643f4737f5d819837aca  gdb/config/mips/obsd64.mh
-d53c46263b02d71e60e61c6ed804a5cb  gdb/config/pa/hpux.mh
-32046ada7e5d9f6bc277db9e888c0b43  gdb/config/pa/linux.mh
+bc673e4f6eb9f9b29a234f1567d3711b  gdb/config/pa/hpux.mh
+231022e0d78f41b1f4f56f4143236e4d  gdb/config/pa/linux.mh
 c8a8841e6cc8fd8534ff677f827e804f  gdb/config/pa/nbsd.mh
 0e6e3c4eaf0de24e8e98ea1aea7e81cd  gdb/config/pa/obsd.mh
-85c67b213cef469499b50fd73d312eee  gdb/config/powerpc/aix.mh
-ce8e39038ef95666f1e5b561695d21fc  gdb/config/powerpc/linux.mh
+1ea7a3f5e435b2847e0b4a23b10d144e  gdb/config/powerpc/aix.mh
+52fca77a77898a49dac527dd061b63d0  gdb/config/powerpc/linux.mh
 8ad26d2ccfeec2da7581634421706cbf  gdb/config/powerpc/nbsd.mh
 39d15590e8e579a501673e1f776cb85b  gdb/config/powerpc/obsd.mh
-a23dc17508d7a7b180d5246c9bcc4710  gdb/config/powerpc/ppc64-linux.mh
-f20287078fa1cff98708e6dd18f563d6  gdb/config/powerpc/spu-linux.mh
+ba63c6d7ca232a15819cda7381365184  gdb/config/powerpc/ppc64-linux.mh
+36ec5b51c82520124a10f34cd0049290  gdb/config/powerpc/spu-linux.mh
 65dcc8dfcb36b641a357018ca5373f15  gdb/config/rs6000/nm-rs6000.h
-c4c69916b834bb22abedbaf80173d0f6  gdb/config/s390/s390.mh
+889ace3bd1f2bd93b6eb4a6ce1db9123  gdb/config/s390/s390.mh
 869f55b72d1468bff76771d7f03aa275  gdb/config/sh/nbsd.mh
 843982ccd6c401c67847295e25dc3edf  gdb/config/sparc/fbsd.mh
-a4e09a5d05fb441b63ad720d89ab8789  gdb/config/sparc/linux.mh
-d6e7b0c59d2177cd69a28622be3790dc  gdb/config/sparc/linux64.mh
+f4b53035ec294233edcf82027b5bbfbf  gdb/config/sparc/linux.mh
+b4e0754dc9872812e4ed6cd74f5f0b80  gdb/config/sparc/linux64.mh
 1c336614ad1c95795851d0b836ef97a0  gdb/config/sparc/nbsd64.mh
 3126d04fdb01a598a2cb29fa483baf92  gdb/config/sparc/nbsdaout.mh
 fa5c681e54a6e249012314eb54849460  gdb/config/sparc/nbsdelf.mh
 150ac47b5c5c93bc3af33412087ea655  gdb/config/sparc/nm-sol2.h
-00f756149c72f01d513b95e356b452f8  gdb/config/sparc/sol2.mh
-d836ebc31d840fdc54f71e37b118605f  gdb/config/vax/nbsdaout.mh
+575baa47677a0cd5727195abcd609cb0  gdb/config/sparc/sol2.mh
+f574b8688bb30b0a7d01815e8995cdcd  gdb/config/tilegx/linux.mh
+dd0e12186d87daa399b8d1fa21afb146  gdb/config/vax/nbsdaout.mh
 474ecf1428fe010bbb7c2fe21b33af0a  gdb/config/vax/nbsdelf.mh
 51bd75312393d4a9db52f4ee825f0051  gdb/config/vax/obsd.mh
-07aa8677ded37951f4bfec7278b68a4a  gdb/config/vax/vax.mh
-a6647558262470d907db4f0180401e5f  gdb/config/xtensa/linux.mh
-7d00c2f44ee167deb9e83be36aa9fd35  gdb/data-directory/Makefile.in
-5c032a48a710f2906446aea0e54780c9  gdb/doc/ChangeLog
+8f4178f354fd161539d0afa0642adef1  gdb/config/vax/vax.mh
+2b0bfbd4c6e9614c300b8887b592197d  gdb/config/xtensa/linux.mh
+16721564da743eab7c2935f361f24ed5  gdb/contrib/test_pubnames_and_indexes.py
+b5a451f9ce631db17dd56dabc9c19321  gdb/data-directory/Makefile.in
+19ba206965f8b1b819fd825c3e3e8b71  gdb/doc/ChangeLog
 cde55cb7bff1f00bd1c4b1ec0336c922  gdb/doc/LRS
 b2d5af403b33b8fca80aee36ba84b648  gdb/doc/Makefile.in
 d5d06eaf9b4d44aa442a4a281aa9aea4  gdb/doc/a4rc.sed
-764078d16ead60c8f3eab88dfdac1512  gdb/doc/agentexpr.texi
-ee7f4d04a894b4d7ca08b67e0573c12c  gdb/doc/all-cfg.texi
+74ed0b1e2675e61adf447b1fd1abd6d3  gdb/doc/agentexpr.texi
+16323a3dc38234990af7a5a8ad37b5cd  gdb/doc/all-cfg.texi
 237d78bddccb0bb9dc86911e194aac8e  gdb/doc/annotate.texinfo
 ab0fe311032294b952da80585b8b90e7  gdb/doc/fdl.texi
-01ec4c5cf3e99200526156712363367f  gdb/doc/gdb.texinfo
-343ed22105ce8521be9affdc842698a3  gdb/doc/gdbint.texinfo
+4dbdebad6f40d1cae89f1151121af42d  gdb/doc/gdb.texinfo
+b8a3eda0db9943a56763cdb63b3cec42  gdb/doc/gdbint.texinfo
 bf96494e6e4d346175babd5ef9781882  gdb/doc/gpl.texi
 73ec71cd3b2e7f61bc530f19d4b35056  gdb/doc/lpsrc.sed
-fd0cdb8b57d7cb16fdbee8edd76beb45  gdb/doc/observer.texi
+436e0267755ba7e820741897d7956d68  gdb/doc/observer.texi
 8108dd8f906f2654fecc74958cf383db  gdb/doc/psrc.sed
-3e991cf540b224ea32b8aaf4f4b7d9fa  gdb/doc/refcard.tex
-d68acf7d0e76c39693f3af12bcf6f698  gdb/doc/stabs.texinfo
+1cddabd008b5307842953924057f8959  gdb/doc/refcard.tex
+ee4f7feeb2a42a7b11cc8d6a45014a66  gdb/doc/stabs.texinfo
 7bfdb0765c5d050d204fbb30aeeba0d8  gdb/doc/stack_frame.eps
 d39233c86ed6a6dc9e853ae6a11fe03e  gdb/doc/stack_frame.pdf
 6076d300a46651562d4ecd0604442414  gdb/doc/stack_frame.png
 553b7fe1bf4b5d8b96fdb8cd83503de1  gdb/doc/stack_frame.svg
 f81a0e00e0cb9e41b078069fb9bedb07  gdb/doc/stack_frame.txt
-32f451da2e4c722938ffd253da784318  gdb/doc/gdb.info
-20509215f56bc4061535524841f1d1d9  gdb/doc/gdb.info-1
-2f137ecb4a7ea11d07bb88801e25f0fb  gdb/doc/gdb.info-2
-345eb4bec007bfe1dde0947466551232  gdb/doc/gdb.info-3
-f318b34b198be49872c18afd69b492ac  gdb/doc/gdb.info-4
-acca72d459d7ce181fa3cdec20497363  gdb/doc/gdb.info-5
-c899397f297f7f95cf19d8d7415cfefa  gdb/doc/gdb.info-6
-f57f91ede26642e2a8fb12ce558e39cf  gdb/doc/gdbint.info
-dd97188666a9a295463aab8b110e8e48  gdb/doc/gdbint.info-1
-6c9191d631d31b4e9ce4787ebd339d30  gdb/doc/gdbint.info-2
-b1c8f301843bd266c184403fb9ef3e37  gdb/doc/stabs.info
+351868531c2644b422d15ccca799e26a  gdb/doc/gdb.info
+4487a374ee47961b38fa1b4687eee060  gdb/doc/gdb.info-1
+6a2d5b40b94f5a64189da1293f820859  gdb/doc/gdb.info-2
+d7f703d8770387977223c1678d0efb63  gdb/doc/gdb.info-3
+3cdabe049d6e72d22e430f6e56c4480c  gdb/doc/gdb.info-4
+abd3f30779c3daf2959081a7d0fd13e0  gdb/doc/gdb.info-5
+9a73aeebc39dc6563ec0d70395c24d51  gdb/doc/gdb.info-6
+05c0d0b2a8b9edbc5db07192d1388b12  gdb/doc/gdbint.info
+751be19074a19c3f654f3d2537b4336e  gdb/doc/gdbint.info-1
+a003c8e79cb28d422bbb83034c17da12  gdb/doc/gdbint.info-2
+516a31726685fba3035732760a5d0ccb  gdb/doc/stabs.info
 ff611a6ef4f4b51d72bc5dd9562b1866  gdb/doc/annotate.info
-c0fcb5a1b83fe8682c303a5900e86eac  gdb/features/Makefile
+ec90f25e7eea4b53eeb80003e2c972ff  gdb/features/Makefile
 64020e98fab1968b2ee9f68f9b19f55c  gdb/features/arm-core.xml
 ac492f5d838934a8c56d1eb18b4dca2b  gdb/features/arm-fpa.xml
 7a20d0cc4f873b27395402a23af14ba8  gdb/features/arm-m-profile.xml
 965cdafbf7101367923b3bbbec668778  gdb/features/arm-vfpv2.xml
 a198a5e13df1646fbc5ab5e8a6333c72  gdb/features/arm-vfpv3.xml
-0625a99ebbdb62c65fe48a430d78d089  gdb/features/arm-with-iwmmxt.c
+969e19875f512fd6b0fce87fcffb2f57  gdb/features/arm-with-iwmmxt.c
 18e8884178c3a39db274f0dd2730b4e6  gdb/features/arm-with-iwmmxt.xml
-ceb73c4994e03bbd503c827cf32fd9dd  gdb/features/arm-with-m.c
+9e60d321f6330ac7ad7979e8fdf8a479  gdb/features/arm-with-m-fpa-layout.c
+1e911e809edc47243c66f298355d275f  gdb/features/arm-with-m-fpa-layout.xml
+c449d0a5ad5295f9e6365f5f9791652e  gdb/features/arm-with-m-vfp-d16.c
+5dd1719c4dcbac8a948731d39b0973d9  gdb/features/arm-with-m-vfp-d16.xml
+ab55ce8496f6cea8846bb89bc04c7e63  gdb/features/arm-with-m.c
 c067f964e5bfe0044c7f006108a0fafb  gdb/features/arm-with-m.xml
-a2c90c072dfbf290ca10707ff45058de  gdb/features/arm-with-neon.c
+95059335b8d1d106f9485e132ee1a71e  gdb/features/arm-with-neon.c
 e91935107c01b34b7fb8e3fcae12ca63  gdb/features/arm-with-neon.xml
-197c04b20ddba197f11b66c94588cb0b  gdb/features/arm-with-vfpv2.c
+756b33392c555d218433031cc27c74c5  gdb/features/arm-with-vfpv2.c
 2c898a26adacb68a31ad362bb8997fa7  gdb/features/arm-with-vfpv2.xml
-df95e8a217daf9739f1bd73564d21892  gdb/features/arm-with-vfpv3.c
+69d8cb9cf09d78697d4bf4e279c957b8  gdb/features/arm-with-vfpv3.c
 2f53ccb304bc635222362ea96050ef51  gdb/features/arm-with-vfpv3.xml
 a4938db19d1676b2c3ea4917fa133de9  gdb/features/feature_to_c.sh
 d49915a915dcbfeced6c9e37354407eb  gdb/features/gdb-target.dtd
@@ -1553,13 +1602,19 @@ d49915a915dcbfeced6c9e37354407eb  gdb/features/gdb-target.dtd
 2faa4557586c6ff6015ca31e693b9da5  gdb/features/m68k-core.xml
 ad605e2a1a29efee3279d2e07a461f36  gdb/features/mips-cp0.xml
 c08810d9c2e43780523c8d90bc62777e  gdb/features/mips-cpu.xml
+3181fdda05931d7a97b5f327823197e7  gdb/features/mips-dsp-linux.c
+7fcddce753a99e5fb0313c073a6d67ef  gdb/features/mips-dsp-linux.xml
+85b210ed9c20edc6eb74cfa82142450e  gdb/features/mips-dsp.xml
 c1d1eaa55161cb8a4b621d3bb6ec0192  gdb/features/mips-fpu.xml
-697465e893a15bc9361bcace472ebf4a  gdb/features/mips-linux.c
+a09b9026eec49b659bba991889d4b5fd  gdb/features/mips-linux.c
 a4d1cff118eb771654d36832903789a2  gdb/features/mips-linux.xml
 67f9da2688de9499245cd17b3415614e  gdb/features/mips64-cp0.xml
 91a9c196dfa530145732b50672ae8d4c  gdb/features/mips64-cpu.xml
+f717677945b9f28b06c5cc6f351ea9b5  gdb/features/mips64-dsp-linux.c
+b835cb4b14b6c1124eee1058a291e244  gdb/features/mips64-dsp-linux.xml
+d4c739846abf6a0dbf0536714cac1bb7  gdb/features/mips64-dsp.xml
 c7d4989c7aee72bb6792e79c7c565301  gdb/features/mips64-fpu.xml
-a76f2909b343d3baa03e1fe881024281  gdb/features/mips64-linux.c
+1fa6fa29e4cc0ee5f2d92af4d3222b51  gdb/features/mips64-linux.c
 d129ef30bfdb674dccc6a52f3ff39b7b  gdb/features/mips64-linux.xml
 344651c03e3550054486c97346dbe87e  gdb/features/number-regs.xsl
 35798890cd144cebeeaf4a9ad4e01719  gdb/features/osdata.dtd
@@ -1567,38 +1622,38 @@ d129ef30bfdb674dccc6a52f3ff39b7b  gdb/features/mips64-linux.xml
 4817f787f433184ec2190c8907a61d56  gdb/features/s390-core32.xml
 e586c24922182e502dfc55b59a22f3d6  gdb/features/s390-core64.xml
 ab7c97bd038427bfe4df9f0b06eb39c3  gdb/features/s390-fpr.xml
-cd08e71307a5efe210c27bf960dc21ff  gdb/features/s390-linux32.c
+6c0da3051edd22a7e115ced2d283f733  gdb/features/s390-linux32.c
 1bb84d72f125f34c289783ce186b5229  gdb/features/s390-linux32.xml
-971f4d38eb816ba294114b4a1ea7959d  gdb/features/s390-linux32v1.c
+a06c6bd74f59b8e7bb46cdc8cfe4915f  gdb/features/s390-linux32v1.c
 fd87af899a838d7d7dc2592f17449d7e  gdb/features/s390-linux32v1.xml
-d3a34978b3ed2384ea72656683de3530  gdb/features/s390-linux32v2.c
+73b19747473c356c716a8b1ebefb26fe  gdb/features/s390-linux32v2.c
 79ec64710bd7b77e7287f28d36a3f2cb  gdb/features/s390-linux32v2.xml
-d8592d7adc9f1d9754d79cc8d7d244ba  gdb/features/s390-linux64.c
+b16928b17f7037c6711e9299c8ede5c7  gdb/features/s390-linux64.c
 e7ab29c0f7ff88731a4576fb99830534  gdb/features/s390-linux64.xml
-f31e4adb098d9cb5ed84852bee85a47a  gdb/features/s390-linux64v1.c
+6aa6f1dc822ee72585ec70941faf5ed3  gdb/features/s390-linux64v1.c
 46cec3ace2012e01a1971b9391c0c827  gdb/features/s390-linux64v1.xml
-5e3d7464d7d1a9fdfb60df833c08b0da  gdb/features/s390-linux64v2.c
+d6af91c9ced7f3d6d5f99f1d5006593e  gdb/features/s390-linux64v2.c
 5b6e7b4471f68809b0ef21c62b3e21f7  gdb/features/s390-linux64v2.xml
 3a98fe3996f9457d06c38b26a63a1082  gdb/features/s390x-core64.xml
-348ea2344f25c477204327cfae59b879  gdb/features/s390x-linux64.c
+b45b599f2ab4d81fc83fb99c6b2275a7  gdb/features/s390x-linux64.c
 92d42c0ee1087b783afd047504d41e20  gdb/features/s390x-linux64.xml
-bb304eec0ec5c37d8118edd4c6500b60  gdb/features/s390x-linux64v1.c
+66470a9ba4e133af000383eed68f594a  gdb/features/s390x-linux64v1.c
 bf8ee68912883e1a86cae987b081e1ff  gdb/features/s390x-linux64v1.xml
-c105230644f145329b448b9825cf35ef  gdb/features/s390x-linux64v2.c
+877022bb349afe8758cf93f3667c8098  gdb/features/s390x-linux64v2.c
 03cecad59e247c7fa17e1d08bb6f97d3  gdb/features/s390x-linux64v2.xml
 a74f670e27b892b83c13054809c82473  gdb/features/sort-regs.xsl
 7ef3595fdd085ce375b95ab70bf0b59d  gdb/features/threads.dtd
-ef62f3ac548b464568e5dbea255c696d  gdb/features/tic6x-c62x-linux.c
+ec536fe4232baa39133cc7730e7f4f50  gdb/features/tic6x-c62x-linux.c
 be4ad93f0205fe988eee9545c7b48af8  gdb/features/tic6x-c62x-linux.xml
-a097bf6fe98f4da892d5d97512e16036  gdb/features/tic6x-c62x.c
+0366a792c056072d8fb0d254ffebf36e  gdb/features/tic6x-c62x.c
 0da26ea39f5f6a2cc3a0447f005b7555  gdb/features/tic6x-c62x.xml
-ec275855a9d543e5af7827a2746615ff  gdb/features/tic6x-c64x-linux.c
+9e8bdc6d9475f4556f778fe68b9efde1  gdb/features/tic6x-c64x-linux.c
 4bb64660e8023092e482b9362b2d1c4a  gdb/features/tic6x-c64x-linux.xml
-79c0ad7ade0d76da4f553ad01521a6c6  gdb/features/tic6x-c64x.c
+60f907f9991d31d03c3613a873f8e586  gdb/features/tic6x-c64x.c
 650296e00b32c2da81667b05b2a9557f  gdb/features/tic6x-c64x.xml
-4a8589fca4a480723e1f8665babfc9d9  gdb/features/tic6x-c64xp-linux.c
+e70a121e1744e914cbfd21b7e51de08d  gdb/features/tic6x-c64xp-linux.c
 4f54da5469b06a846e085fb5b0a9154a  gdb/features/tic6x-c64xp-linux.xml
-325715d4dc8d96798afb3365f043f33a  gdb/features/tic6x-c64xp.c
+fdc757adeece4c493bf6fcdfb57d13f8  gdb/features/tic6x-c64xp.c
 9eab9ffa9efc86cf113344611b80eceb  gdb/features/tic6x-c64xp.xml
 67433bdfcef4a1f323560af268cc9f97  gdb/features/tic6x-c6xp.xml
 1e9925d636d62c4745b0c89e7b987fd4  gdb/features/tic6x-core.xml
@@ -1628,12 +1683,21 @@ dd49d280fca7e5e069832bce1ae6b199  gdb/features/i386/i386-avx-linux.c
 f05c12c2b5347a7d77ae9847f6307d43  gdb/features/i386/i386-avx.xml
 ae90af0a482c42365dca75e0db80ffeb  gdb/features/i386/i386-linux.c
 1f9a0a2446e9ac0454284a8aca72295d  gdb/features/i386/i386-linux.xml
-8187ca7ad92e5a69e5c77b2633689b95  gdb/features/i386/i386-mmx-linux.c
+d0fbf0208faad258c35c15ee93ad80b8  gdb/features/i386/i386-mmx-linux.c
 95b0515e3944813f647efc9c5835cd87  gdb/features/i386/i386-mmx-linux.xml
 86b16687f30f9aeed83049e6101b3e57  gdb/features/i386/i386-mmx.c
 4f6ae34b504f2359d905030389af60a0  gdb/features/i386/i386-mmx.xml
 b1fb899d010ff4141898c1ee71a73231  gdb/features/i386/i386.c
 af657b2c99c63928ce26abe732af6011  gdb/features/i386/i386.xml
+55f5f248d54fd42a4c0c516a09389e4b  gdb/features/i386/x32-avx-linux.c
+a6e8f1769cd75e38c6272b7ec5c42643  gdb/features/i386/x32-avx-linux.xml
+4988d2a18546a1dd99f395ad6e069fc7  gdb/features/i386/x32-avx.c
+3c4769aa61a545a43a35c8d5dcb487b9  gdb/features/i386/x32-avx.xml
+012fb502937e3421baa4a6b42ca8ddbe  gdb/features/i386/x32-core.xml
+34096fb582c04097e59ba99689c70861  gdb/features/i386/x32-linux.c
+271f27db1cc56fa5c752951a9d9dc2ee  gdb/features/i386/x32-linux.xml
+6ba5553ba19480f43ccd689039fbcbd7  gdb/features/i386/x32.c
+5e692072c52326e17e9f019c117da629  gdb/features/i386/x32.xml
 7534090aeefb22d93446f7b1edc78a0d  gdb/features/rs6000/power-altivec.xml
 7716d6c340bbdd2f453229c97f2d97e2  gdb/features/rs6000/power-core.xml
 1bd4c46cbd86f422ce56e5b8aedf64d4  gdb/features/rs6000/power-fpu-isa205.xml
@@ -1644,35 +1708,35 @@ b13a9ef38e3c528d21adb725775d3225  gdb/features/rs6000/power-spe.xml
 ab402b42bb9c9d76c8b744c978ea5299  gdb/features/rs6000/power-vsx.xml
 6ad051eb2c5ea83a2186a7287cdc19b4  gdb/features/rs6000/power64-core.xml
 59217bee2666a1aaeab6b0c816aa3316  gdb/features/rs6000/power64-linux.xml
-2638bf4b3f468f2b7307b3269784c7ac  gdb/features/rs6000/powerpc-32.c
+19699a968e5374f8465f12cc27d39ff4  gdb/features/rs6000/powerpc-32.c
 5d2fe76161ed1cc018694be387304ef5  gdb/features/rs6000/powerpc-32.xml
-8f2a91e7b53b7152e6b426d8bb1edf9a  gdb/features/rs6000/powerpc-32l.c
+2daa152248300589f656cdbe969f4d3b  gdb/features/rs6000/powerpc-32l.c
 fac5c5e0410309a28899105fcddf7e57  gdb/features/rs6000/powerpc-32l.xml
-cdfe01249427ee1ad8ed78e5f38b2d9a  gdb/features/rs6000/powerpc-403.c
+555da96529af6bf378022059e6746e0e  gdb/features/rs6000/powerpc-403.c
 0c8220cd252b67657a53b3db3b589f56  gdb/features/rs6000/powerpc-403.xml
-5615f57f106b15a95a9879248039bd67  gdb/features/rs6000/powerpc-403gc.c
+5fe9c4f48e9473e628d9dd8e68520386  gdb/features/rs6000/powerpc-403gc.c
 d0a66b69376765ac37808a02639106b2  gdb/features/rs6000/powerpc-403gc.xml
-3fb85d97cbcb0161b78e9ac06a652946  gdb/features/rs6000/powerpc-405.c
+31296984f12d996b25d53bcbbe5e8dc0  gdb/features/rs6000/powerpc-405.c
 100546a01438adee6bdfb7014b729190  gdb/features/rs6000/powerpc-405.xml
-5188ff3f522886a2ef1128f33c47cad2  gdb/features/rs6000/powerpc-505.c
+41adfba9e5545320b20bf35ffdf6c5fa  gdb/features/rs6000/powerpc-505.c
 7d93c735e1675ef72eb428ec6f97efc1  gdb/features/rs6000/powerpc-505.xml
-7783e7eccd7ba18348b57622c78d440a  gdb/features/rs6000/powerpc-601.c
+c4eaada08f009c21f294c5fe0d406ae9  gdb/features/rs6000/powerpc-601.c
 c6f0d94c6ec1ac9a091ae1fc33a160c2  gdb/features/rs6000/powerpc-601.xml
-be0f8e004be3193474f1af626eb945fe  gdb/features/rs6000/powerpc-602.c
+3056104eb0c95f6d1b38480d9c127b4f  gdb/features/rs6000/powerpc-602.c
 d5be4fcb2400d500dd299b233ffd23a0  gdb/features/rs6000/powerpc-602.xml
-3aa540fa497c3fc501d257b45e9f12a0  gdb/features/rs6000/powerpc-603.c
+46c2cdd97e3b8e2cd7514cf3b2f6c471  gdb/features/rs6000/powerpc-603.c
 f63e5883ee89a41c4ab13299ed74e163  gdb/features/rs6000/powerpc-603.xml
-90ba4f08d8687156e1d7c18cc1f76dbb  gdb/features/rs6000/powerpc-604.c
+ae1d3d7d9e7d6e2c030ba75701045c66  gdb/features/rs6000/powerpc-604.c
 ba7121bea62495762561bac70b39c9eb  gdb/features/rs6000/powerpc-604.xml
-557981c8a513c20dc6df974a7a89573b  gdb/features/rs6000/powerpc-64.c
+cdfc31a06c3586f9674db053507e1d6c  gdb/features/rs6000/powerpc-64.c
 13bf8bf412a8c299d21ef59fda6189d0  gdb/features/rs6000/powerpc-64.xml
-0005eb4961c4f9cbfd8ec6131c8e121b  gdb/features/rs6000/powerpc-64l.c
+22135f0d7a26fc537ac63541b624dfc1  gdb/features/rs6000/powerpc-64l.c
 b30a7dfd694b2008f01ab28398b2b4d5  gdb/features/rs6000/powerpc-64l.xml
 7fab379035b9b02717e5488580b1e15e  gdb/features/rs6000/powerpc-7400.c
 963af547637514f9a4e3a90db8148d06  gdb/features/rs6000/powerpc-7400.xml
-aa967ddaf77a18da8e02ecef0b791ad3  gdb/features/rs6000/powerpc-750.c
+538b8a71ee635bc4dd971e03154e12d5  gdb/features/rs6000/powerpc-750.c
 be14522369976717ed1b22c6abeeb6fa  gdb/features/rs6000/powerpc-750.xml
-873ffb46305540f9777b98cf583b49d4  gdb/features/rs6000/powerpc-860.c
+c91af3450bc4de1de0bf48fa752d4ff7  gdb/features/rs6000/powerpc-860.c
 f1eca22ade158624560d58715b08d08c  gdb/features/rs6000/powerpc-860.xml
 63e1b1ee66be85fe7c5c8c7f77b21216  gdb/features/rs6000/powerpc-altivec32.c
 951914ff08f400082b0221819c4e5725  gdb/features/rs6000/powerpc-altivec32.xml
@@ -1686,13 +1750,13 @@ cb69e3d6da38224d72a6e330a239dcfc  gdb/features/rs6000/powerpc-cell32l.c
 00184a558fefdaa3d9d8ab96a6525c62  gdb/features/rs6000/powerpc-cell32l.xml
 cc3be23121d9811ead2534dd50f76c5e  gdb/features/rs6000/powerpc-cell64l.c
 933a568426deed4c999487387dcc4bc2  gdb/features/rs6000/powerpc-cell64l.xml
-cc8d422da00fda50fc778dc3c2e6062f  gdb/features/rs6000/powerpc-e500.c
+bbc81ffe8fbe9e6b1d2134bb68955146  gdb/features/rs6000/powerpc-e500.c
 64748401f1d3c01efcce6e335b01e458  gdb/features/rs6000/powerpc-e500.xml
-9cf2f3b46ca45f6009201d63e7ac38b9  gdb/features/rs6000/powerpc-e500l.c
+4e965aa9157206588882f05b7a07ea51  gdb/features/rs6000/powerpc-e500l.c
 ec45d2d43878fdc0532d053627e57752  gdb/features/rs6000/powerpc-e500l.xml
-f24536f3efbe274d01d18d8f80958828  gdb/features/rs6000/powerpc-isa205-32l.c
+0d909af13b63b57545dceefa2775ea5f  gdb/features/rs6000/powerpc-isa205-32l.c
 2d22181aa78e11e36c24d9449f2adecb  gdb/features/rs6000/powerpc-isa205-32l.xml
-e2d0eb7fdc9cfdf0d5c11cf12bf0df99  gdb/features/rs6000/powerpc-isa205-64l.c
+08a4644f6f73025276c995e27448215f  gdb/features/rs6000/powerpc-isa205-64l.c
 6aef602d253a920c5ebfdd077f023ee3  gdb/features/rs6000/powerpc-isa205-64l.xml
 d715fbd3c44451e7ad01569dbeea3507  gdb/features/rs6000/powerpc-isa205-altivec32l.c
 35e9417758adcb7e355cd2558eb2ebb4  gdb/features/rs6000/powerpc-isa205-altivec32l.xml
@@ -1710,136 +1774,187 @@ a238f6359a5d0f298234e00f685d548c  gdb/features/rs6000/powerpc-vsx32l.xml
 9a20582c9d10972b8d72baf2e18d617f  gdb/features/rs6000/powerpc-vsx64.xml
 440eb1f2a0d5b280aa56092ef08a11eb  gdb/features/rs6000/powerpc-vsx64l.c
 0a94939d5905689c05e56ac6b2368ddb  gdb/features/rs6000/powerpc-vsx64l.xml
-4cab03b61e55d6275d5b4a8d36d282a0  gdb/features/rs6000/rs6000.c
+376e396dd67d075bacc312f2c0a194fe  gdb/features/rs6000/rs6000.c
 31a4eafb186358843e27350b150e180e  gdb/features/rs6000/rs6000.xml
-0ceea5f6dc0fba6d6b272488fffb7002  gdb/gdbserver/.gitignore
-0c6b06dbb989cd47ade3b2f7b06db6e5  gdb/gdbserver/ChangeLog
-b3d56dffd241ee65374e26275a34aefa  gdb/gdbserver/Makefile.in
+94230696f6e1981ae284eb1d31607f8e  gdb/gdbserver/.gitignore
+8d50f02f0a6915c495681cf9b28934f9  gdb/gdbserver/ChangeLog
+dde2aa36479f53e8fa976c08bb81fc56  gdb/gdbserver/Makefile.in
 791b58ddf159b59c7d9375e2c2f00a07  gdb/gdbserver/README
-b36097c76ee1c108f10244037af7a6cd  gdb/gdbserver/acinclude.m4
-5f5b7060fadb3edc42fcde4b2f67da41  gdb/gdbserver/aclocal.m4
-8c2f268b77b5767301bba5e12782f10c  gdb/gdbserver/config.in
-24ad972ff4392647ff4298fa7fba2dae  gdb/gdbserver/configure
-139dd74ae629a22776621e25ae1aafa6  gdb/gdbserver/configure.ac
-feb73edbbbfbba330c67ae540a144aab  gdb/gdbserver/configure.srv
+0e796e5e05adc41096c8f711836e9f7e  gdb/gdbserver/acinclude.m4
+7f017910fc10864faa3886a248c0de44  gdb/gdbserver/aclocal.m4
+ba6e28a181806c10adced6eedfdb35f2  gdb/gdbserver/ax.c
+730df5c8f495bee535da956fdebc7907  gdb/gdbserver/ax.h
+e3e7ca333275eeb52b69007e4eecf01c  gdb/gdbserver/config.in
+dd34973acb1c21a0533f53faf87411e8  gdb/gdbserver/configure
+08970d677586ce287cf645c97ed57897  gdb/gdbserver/configure.ac
+ab1f29be3446ecf5e2b781969e77d4bb  gdb/gdbserver/configure.srv
+a06d2fc06d24c8ff8e1eacce34aa6cd7  gdb/gdbserver/dll.c
 7798a56033d81424a9b44b065d808946  gdb/gdbserver/event-loop.c
 475cc2ff3a61f243746075c4cd840cc3  gdb/gdbserver/gdb_proc_service.h
 0a3f5f95849acd6f4a783c0ca75b6e5c  gdb/gdbserver/gdbreplay.c
 f0e3f141168f9e49b60877d30817cc61  gdb/gdbserver/gdbserver.1
+9cec9bf1ae90c6dd37fb731b055b8bde  gdb/gdbserver/gdbthread.h
 34cd731f76620c1d39d318c510cf782a  gdb/gdbserver/hostio-errno.c
-939010d1c65c519d65a9c6464a40f649  gdb/gdbserver/hostio.c
-4c3300f31c1f14bbbd96bbdf710a6a77  gdb/gdbserver/i386-low.c
+420d4813052d62c7b865657c745d2e0e  gdb/gdbserver/hostio.c
+9f587cf9443a09753214314428cc8dad  gdb/gdbserver/i386-low.c
 652cb468ac0f56b480929ee5659cc5b5  gdb/gdbserver/i386-low.h
 01e15f74e08bd9b7018261d626c96642  gdb/gdbserver/i387-fp.c
 9b0fe2eff2950c7a186b707827de65c7  gdb/gdbserver/i387-fp.h
-5975801a47cc1cf57e5c84ae18911585  gdb/gdbserver/inferiors.c
+a4476de1712c5e0c11155f53cd55e9b2  gdb/gdbserver/inferiors.c
 bdacf42a94348b7665d43b9eb8a98f69  gdb/gdbserver/linux-amd64-ipa.c
-f5bbc5c3efa09b5ffc6f2800d2a9702c  gdb/gdbserver/linux-arm-low.c
-6abd7d7c1b7c2aaf2345837bfe63447a  gdb/gdbserver/linux-bfin-low.c
-f8cdc712e53152cb328b16ce21b1237a  gdb/gdbserver/linux-cris-low.c
-314e4a6e8c2a67a8d1c4a7a427a5bda2  gdb/gdbserver/linux-crisv32-low.c
+719b265ba65d8c185d19a9de4ed9815a  gdb/gdbserver/linux-arm-low.c
+1edf0686a3ef6e743686033944310f83  gdb/gdbserver/linux-bfin-low.c
+cba8bd803a9842d2480a89ddad0a8147  gdb/gdbserver/linux-cris-low.c
+803fbc985d226837d1f5e297997e26f4  gdb/gdbserver/linux-crisv32-low.c
 100dce3c66e8c38e807c1517d1f20f23  gdb/gdbserver/linux-i386-ipa.c
-bf410bda12450f207669a8297e7864f6  gdb/gdbserver/linux-ia64-low.c
-76f008eb3dd163fc3bf0cdf124ea56d7  gdb/gdbserver/linux-low.c
-2f7052edd516da1db7144a6ae5f88d43  gdb/gdbserver/linux-low.h
-b50ec40c25849cacce220917240ebc1f  gdb/gdbserver/linux-m32r-low.c
-cd5b08bb1c25a70d87fb40cb94ca1b4e  gdb/gdbserver/linux-m68k-low.c
-90377b7f825d4ccf4f71acc21cc682ca  gdb/gdbserver/linux-mips-low.c
-d66f57c3620c60e8c602f7981e21e3f0  gdb/gdbserver/linux-ppc-low.c
-a863b91248337645a3679828742f0448  gdb/gdbserver/linux-s390-low.c
-9983342a100ccf1015df571101b45ad8  gdb/gdbserver/linux-sh-low.c
-5a89f30ccaf9b5efcacc227e9c7d89d8  gdb/gdbserver/linux-sparc-low.c
-101ce309423c2fd95cbcc91c1ef56e25  gdb/gdbserver/linux-tic6x-low.c
-a39238d209d646996431e96fc2af0232  gdb/gdbserver/linux-x86-low.c
-3ba0e8f0572dbced0e06c872a36c443e  gdb/gdbserver/linux-xtensa-low.c
+a4138055c1b6e3a5ff3fa2c260b87976  gdb/gdbserver/linux-ia64-low.c
+a56ae41ac0c3dc2a2ab35b9647ea34d1  gdb/gdbserver/linux-low.c
+6cf39e9605241cb9eaca3f69be495abf  gdb/gdbserver/linux-low.h
+fefa59e6ca6f0feffe6338637f78744a  gdb/gdbserver/linux-m32r-low.c
+3a7d95b2f3021d5c943f059c6163a13f  gdb/gdbserver/linux-m68k-low.c
+bb28296e302dbfa6d628bfa9ad8f3351  gdb/gdbserver/linux-mips-low.c
+b595345f810438cc1036e5cbbf56eb6e  gdb/gdbserver/linux-ppc-low.c
+cc91b51333be871baed20314b81472c5  gdb/gdbserver/linux-s390-low.c
+cc0b76955b9bdc145f5b06c820a769ea  gdb/gdbserver/linux-sh-low.c
+04651081bb35efb1aa9583329dd81c7a  gdb/gdbserver/linux-sparc-low.c
+d507c9bd0ea95a8af3eb6074acfffbee  gdb/gdbserver/linux-tic6x-low.c
+f37fbfe207da039afd0c3a4ca6501668  gdb/gdbserver/linux-tile-low.c
+fe6cf11782df0c88a83653f3735cc609  gdb/gdbserver/linux-x86-low.c
+90ecfe19be6fa5bbe8308cfa6681a1a2  gdb/gdbserver/linux-xtensa-low.c
 1ffe831e2c3525cad7b0a8762bec135a  gdb/gdbserver/lynx-i386-low.c
-24220fe0c490c201ae2c623445238594  gdb/gdbserver/lynx-low.c
+4727b68a548903b07c3b0bed6808f2df  gdb/gdbserver/lynx-low.c
 28c45cd8989de83f7b6fb61bbf35ddd3  gdb/gdbserver/lynx-low.h
 00dcad86b035b709c3ab7bf65f70e7db  gdb/gdbserver/lynx-ppc-low.c
-127a2b05d85fa86927c4880bf388ee04  gdb/gdbserver/mem-break.c
-69b899e05f551a09649b39a44681e0a6  gdb/gdbserver/mem-break.h
-631122e148f02a1799cbfa6f48b2e7fc  gdb/gdbserver/nto-low.c
+4389c4bffc3c943f3e6296dae09f28f7  gdb/gdbserver/mem-break.c
+f7bac380dcb49575b757695b72fd6084  gdb/gdbserver/mem-break.h
+5ebe37084ef143bbefb9fdc7e88a606b  gdb/gdbserver/nto-low.c
 141a19a214edd362035151145c136335  gdb/gdbserver/nto-low.h
 388731bcaac5c1a21494045982ac0869  gdb/gdbserver/nto-x86-low.c
 6bb40b1a3b1225adb3ada5a5b7999f4d  gdb/gdbserver/proc-service.c
 03b69e032efc5b9beef676ec76b51593  gdb/gdbserver/proc-service.list
-2a1051fe4e0ee0a007218492500e22da  gdb/gdbserver/regcache.c
+089874966afd476cfd7bb0dd2acfd2e3  gdb/gdbserver/regcache.c
 58a941c8ff873a865d474eece1de9f1e  gdb/gdbserver/regcache.h
-48ee671f74e6d80b13d4716755f84846  gdb/gdbserver/remote-utils.c
-d9cf00b4c93f7f53eac51f8cac3ba437  gdb/gdbserver/server.c
-8246c7870380dbb441a7370bd22b0809  gdb/gdbserver/server.h
-381ead3cc6815de9964379b23af1852a  gdb/gdbserver/spu-low.c
-e509e98c7e78ed38916ded00bc869ccc  gdb/gdbserver/target.c
-d90876c65c40dea35d3947bcd52df922  gdb/gdbserver/target.h
+2a349d85d5e1a3a219380e55ee083220  gdb/gdbserver/remote-utils.c
+f7800406d7f0a7dc2a57b4ca690a3285  gdb/gdbserver/server.c
+f61b46da0ace58fe7e171f964837d920  gdb/gdbserver/server.h
+7d7b0321c7c4e80e33c15fda1c9a0c98  gdb/gdbserver/spu-low.c
+ab8791abc79fb06583ba8f6e830adcc0  gdb/gdbserver/target.c
+e6edecda64b09d5ab8c68f47476e410e  gdb/gdbserver/target.h
 0a8f5ecb59811c10ec136597d0d1bef1  gdb/gdbserver/terminal.h
 f97ec1d3f392d525f06f3d9462ed0ff0  gdb/gdbserver/thread-db.c
-6770d9500118194dcd034cac15ebd957  gdb/gdbserver/tracepoint.c
+cc27c877c3c16f9bdd4bb5a42f05a595  gdb/gdbserver/tracepoint.c
 8ecb6e383d2a3d7acc9679127227fa70  gdb/gdbserver/utils.c
 ce6435af7f0ed5373f7a848da3bfacc8  gdb/gdbserver/win32-arm-low.c
 19ccd9fb1be55de1884d2721590bd148  gdb/gdbserver/win32-i386-low.c
-b9ce0587e5a06d95b9d229c982fae0c0  gdb/gdbserver/win32-low.c
+589f257c4b8b0e85b85a6fa6ec21bbbf  gdb/gdbserver/win32-low.c
 4a8bf9bd45ed37e557ea2cba6c7b1bf2  gdb/gdbserver/win32-low.h
 8b3a235e8fb2f364dfc2f1b3acc9fcbf  gdb/gdbserver/wincecompat.c
 268e9e175f57233bb2af2ab466b4f6cd  gdb/gdbserver/wincecompat.h
 8132142fdb337872347caa894908326a  gdb/gdbserver/xtensa-xtregs.c
-c2fb92493edc66281a9e42ebf11bf2b6  gdb/gnulib/Makefile.am
-c29734259172d396d3c59974f8cc1da3  gdb/gnulib/Makefile.in
-3ae12f5ff0d55b4e426b19cf4594a3de  gdb/gnulib/dummy.c
-d34be71a467fd1a12328a8ce1fc92b26  gdb/gnulib/memchr.c
-ce80de59225450e9de1cff046ec2f0a3  gdb/gnulib/memchr.valgrind
-e3a9da96654e9e2800c28a5b0fe56b48  gdb/gnulib/memmem.c
-9b5beefaa1562e8a42fade81ca17cb45  gdb/gnulib/stddef.in.h
-801b6a5cd51dad34c4b8246eff52046f  gdb/gnulib/stdint.in.h
-2099cb03c67aa2eb4ae07677b3187425  gdb/gnulib/str-two-way.h
-f463d396f578db77ce456295786d6d49  gdb/gnulib/string.in.h
-d0385b7c49b7253a13200e93cd51cebf  gdb/gnulib/wchar.in.h
-70567958b0a11ac5731ea7406d56b646  gdb/gnulib/extra/arg-nonnull.h
-6a98fffe22545dd2d428ff1776afc824  gdb/gnulib/extra/c++defs.h
-1c9adf176eb33ee3daded18560f29abc  gdb/gnulib/extra/warn-on-use.h
-effb854bab9e8044e42d5ed818b3dcce  gdb/gnulib/m4/00gnulib.m4
-1e3fd65ae5b4af1a7eb77d41c7b3a3d7  gdb/gnulib/m4/extensions.m4
-496a462e0ece951a0cb209cf2db54218  gdb/gnulib/m4/gnulib-cache.m4
-b57ed5fa44f9accd603ecb0cf0c50e94  gdb/gnulib/m4/gnulib-common.m4
-0a7aea3ab80776320c4c7ee93e3e7b58  gdb/gnulib/m4/gnulib-comp.m4
-5fa93cc36d93441c1b5142521ead79c9  gdb/gnulib/m4/gnulib-tool.m4
-0052e48ef97af5f35398c78e429fa773  gdb/gnulib/m4/include_next.m4
-d90b3302f770db432cfb7468cfff9394  gdb/gnulib/m4/longlong.m4
-3816341c63db70190cc4264fe18990c3  gdb/gnulib/m4/memchr.m4
-cf01db53da7800dda6dd5e453f378198  gdb/gnulib/m4/memmem.m4
-91e5b83736d50da545b2b186915888c6  gdb/gnulib/m4/mmap-anon.m4
-1530437923955361f796d56eb0a1633a  gdb/gnulib/m4/multiarch.m4
-65212cbc419747a90cf6c98a01b42e19  gdb/gnulib/m4/onceonly.m4
-b8cc9a71a4529ee9f7a13c573f50ba37  gdb/gnulib/m4/stddef_h.m4
-53ea4ee2378c99399de3445ab283c670  gdb/gnulib/m4/stdint.m4
-a1fcbaf87712340ddc6f90cbe4768733  gdb/gnulib/m4/string_h.m4
-c77d838c811d357fca843427651f6dbd  gdb/gnulib/m4/warn-on-use.m4
-85b5d4753accda487a9faf5774c8677a  gdb/gnulib/m4/wchar_h.m4
-c570967ef8896ae2d04557ecc04869a0  gdb/gnulib/m4/wchar_t.m4
-ccd9fed60bef4397936592d030d2eb08  gdb/gnulib/m4/wint_t.m4
+89b922015142673369e7a79a09f9ee85  gdb/gnulib/Makefile.in
+797fb1288e0d26127d61104f95e0aac2  gdb/gnulib/aclocal.m4
+e5fd0cd131ce6af71d508472b4c38baa  gdb/gnulib/config.in
+6548db2b0c5bb9b75ecfaf925e4ebf63  gdb/gnulib/configure
+46ebdccce481dc09ab277c62ad3d4c75  gdb/gnulib/configure.ac
+bbaca27e028f78779fc110cd43718137  gdb/gnulib/import/Makefile.am
+57597f3f2d2923b8eb31287fe8188938  gdb/gnulib/import/Makefile.in
+ccdf375afd8f7530ce7c61117f718c22  gdb/gnulib/import/alloca.c
+8cf6afaad0c7a031ccd0f46aecd3ea22  gdb/gnulib/import/alloca.in.h
+937fa61c33c9be1fb22929622daee850  gdb/gnulib/import/config.charset
+62bc37e49a70fd85cf9a66e642d61022  gdb/gnulib/import/fnmatch.c
+8558cf4944d394330bfe211259059ccd  gdb/gnulib/import/fnmatch.in.h
+56b92e5dd39de642795ed5d6ec7e6d41  gdb/gnulib/import/fnmatch_loop.c
+4309cf0165373a122cbf8944f5beae5d  gdb/gnulib/import/inttypes.in.h
+051dbd7f026b1f829d7d4fe966204f59  gdb/gnulib/import/localcharset.c
+68e82b30d0964483537ad2623f33eb01  gdb/gnulib/import/localcharset.h
+4939cdb1edcc1605443575b6600768f1  gdb/gnulib/import/mbrtowc.c
+b51d863702f83411c29a87f887e61ca5  gdb/gnulib/import/mbsinit.c
+2b5e4b0b67b3dafa5184fc52ab9bdd0b  gdb/gnulib/import/mbsrtowcs-impl.h
+cb26079a149b621b52b0452a86d12d0b  gdb/gnulib/import/mbsrtowcs-state.c
+591dd16c7625f1953b7764cd6f722259  gdb/gnulib/import/mbsrtowcs.c
+7241fcfeea53eb9078d70b507b2579e2  gdb/gnulib/import/memchr.c
+ce80de59225450e9de1cff046ec2f0a3  gdb/gnulib/import/memchr.valgrind
+0de47d34c723ab6b3a1cdf1057149b5c  gdb/gnulib/import/memmem.c
+200f3e454367578962935dc57a0f1bd9  gdb/gnulib/import/ref-add.sin
+9d41afd60c33bf30a027dae3dc53db8c  gdb/gnulib/import/ref-del.sin
+eff09b26c67cd59c1daa995ab4d865fe  gdb/gnulib/import/stdbool.in.h
+cd52e1464b249cad639d31fe7aa393f3  gdb/gnulib/import/stddef.in.h
+637c1ee801280fe45561282999fe14c4  gdb/gnulib/import/stdint.in.h
+eccef6f80daacc90556367a28666b101  gdb/gnulib/import/str-two-way.h
+f53d8f3937a452797f9d7dbe0dec2b8b  gdb/gnulib/import/streq.h
+4dd09df660ed63eb57c769358fa36c98  gdb/gnulib/import/string.in.h
+3b9626013a120e3e72924371fda68241  gdb/gnulib/import/strnlen1.c
+b2f5b51c89a90c7f955fdabfe2416ed7  gdb/gnulib/import/strnlen1.h
+96a4643d1ae1ea97714c59bacd757aba  gdb/gnulib/import/verify.h
+b6a8de4b9483763e4d11fe1237d5473d  gdb/gnulib/import/wchar.in.h
+bf22ac0db738d04bc7e9cbbc231fdf96  gdb/gnulib/import/wctype.in.h
+314f1652c2e59a6b7e3e4003f7fa510f  gdb/gnulib/import/extra/update-copyright
+354d9ce86bdad55b2869f49c33886672  gdb/gnulib/import/extra/snippet/arg-nonnull.h
+99a14241de22838731d105c70336a6db  gdb/gnulib/import/extra/snippet/c++defs.h
+5fef4d236536865c1a927b65047f253f  gdb/gnulib/import/extra/snippet/warn-on-use.h
+f47203041f28e08e677013e187cd4d7e  gdb/gnulib/import/m4/00gnulib.m4
+9cac3a7f313170d7db64c7f31c533d31  gdb/gnulib/import/m4/alloca.m4
+44e4d3e20816e4ede69ef6ecd1e34f7b  gdb/gnulib/import/m4/codeset.m4
+72f23bf16c8420fa018b7de50324d61a  gdb/gnulib/import/m4/configmake.m4
+1da7a16baf24c3d47bcb917495d51818  gdb/gnulib/import/m4/extensions.m4
+82d4821b72b6077d63c0cf836a1b290d  gdb/gnulib/import/m4/fcntl-o.m4
+93cbcb981ebd0a05c4d6497c7b280668  gdb/gnulib/import/m4/fnmatch.m4
+aec2f86cb9ae0120611bb074fe1aedf7  gdb/gnulib/import/m4/glibc21.m4
+9bbeb1736b78cdcca5f9e716c5d571f1  gdb/gnulib/import/m4/gnulib-cache.m4
+7f23c5f548bfbd8e0fd7684c23dc9886  gdb/gnulib/import/m4/gnulib-common.m4
+f980cb02d6a7b3debe148ddf80409f76  gdb/gnulib/import/m4/gnulib-comp.m4
+55ce27bdc6f9787962a8be40bee99eeb  gdb/gnulib/import/m4/gnulib-tool.m4
+f056ec4e1a4ef7b357ba8c1966c4c6f3  gdb/gnulib/import/m4/include_next.m4
+2d39a6757b643db5c4438f4ebae7924e  gdb/gnulib/import/m4/inttypes-pri.m4
+c8684b0cbf3852b8a05706aaa538a03c  gdb/gnulib/import/m4/inttypes.m4
+461e40d856adc3703f010e8ca5115e0e  gdb/gnulib/import/m4/localcharset.m4
+0fa246d1afd71c819225b4351f92cadd  gdb/gnulib/import/m4/locale-fr.m4
+46d468c214c1da419edf3d88ec3a262b  gdb/gnulib/import/m4/locale-ja.m4
+cd90e0e86fc7e44f9eff252a3f86e7d1  gdb/gnulib/import/m4/locale-zh.m4
+02aa9e71068cf3f2f1c078d4bc38f596  gdb/gnulib/import/m4/longlong.m4
+1c253c8e3a286ebd512090e26f75c6e8  gdb/gnulib/import/m4/mbrtowc.m4
+fc621b23ef2325b1a59a974b8d416cde  gdb/gnulib/import/m4/mbsinit.m4
+2f1c1d83d6b430bfb0c64cd26fee6e30  gdb/gnulib/import/m4/mbsrtowcs.m4
+102c23a4bcb913a6ce9cbf091dcacf6d  gdb/gnulib/import/m4/mbstate_t.m4
+8ed0368562c75d62fe48fe81933eb8e3  gdb/gnulib/import/m4/memchr.m4
+02fab94d899b44900f79028f6919862b  gdb/gnulib/import/m4/memmem.m4
+89f4c4b9d609dc52d87ea9664a5ccfc2  gdb/gnulib/import/m4/mmap-anon.m4
+4f2196ec93490afbe054b2005fae7036  gdb/gnulib/import/m4/multiarch.m4
+d32a836a080e7d5f1a0e16b4d6e67b71  gdb/gnulib/import/m4/onceonly.m4
+20fcd20e53fd4515fc372bb6a4923106  gdb/gnulib/import/m4/stdbool.m4
+263711ce3f4faee8204ba3f9affb05b2  gdb/gnulib/import/m4/stddef_h.m4
+afe6cb217ae4d37611fc31197a49141f  gdb/gnulib/import/m4/stdint.m4
+357f2fb047fb386598a35e660ee51b11  gdb/gnulib/import/m4/string_h.m4
+13ab2498ab9d32b4868dfc5c542ea690  gdb/gnulib/import/m4/warn-on-use.m4
+0fd6c91e9d5d09676ba172e282bd1ddc  gdb/gnulib/import/m4/wchar_h.m4
+da56b205f4209d24fdd88ad067698477  gdb/gnulib/import/m4/wchar_t.m4
+ecd51c2ab1d3bddc681c149b1f093647  gdb/gnulib/import/m4/wctype_h.m4
+05144387efe258c63716402def36a920  gdb/gnulib/import/m4/wint_t.m4
 90b81f951a2351c88c1b4a1fedbb492f  gdb/mi/ChangeLog-1999-2003
-4fa89925a2b1970950976932d253154b  gdb/mi/mi-cmd-break.c
-0827e8f4645824d0d29164e6e256bb11  gdb/mi/mi-cmd-disas.c
-6245fb5753f0177ca6760014bc72f705  gdb/mi/mi-cmd-env.c
-47c52f73129733aa2b7f65df19039810  gdb/mi/mi-cmd-file.c
-f25a2a7828221c8890bfd4535e2f6da5  gdb/mi/mi-cmd-stack.c
-79db00ce1ec33cedee3e8274c98d85c7  gdb/mi/mi-cmd-target.c
-92a2a5ecd6127925bf869247ef7f096a  gdb/mi/mi-cmd-var.c
-bf40b31d547d08afb08abc3801a2e096  gdb/mi/mi-cmds.c
-959fa9c6ad472a7a8379286cf239265c  gdb/mi/mi-cmds.h
-1ab188df8c3186525484fb06480a7084  gdb/mi/mi-common.c
+04287496e4473d07d9770928e9468775  gdb/mi/mi-cmd-break.c
+63c2bf76d6d0f64d465473d809c19b43  gdb/mi/mi-cmd-disas.c
+c92ecc6ca16e0e64b5827c7ced6a6b04  gdb/mi/mi-cmd-env.c
+be5fbe3e0824e23a52bf6ed7f0a3a84b  gdb/mi/mi-cmd-file.c
+9955d031e5437f54b53067d671f5db37  gdb/mi/mi-cmd-info.c
+e2ae61b633f9bada0349c768a8d77468  gdb/mi/mi-cmd-stack.c
+647c1b0d5760a99c52669ab38fd5dc51  gdb/mi/mi-cmd-target.c
+946e65d3c100de9755386507f23d3a25  gdb/mi/mi-cmd-var.c
+c94793b0c3f48ac7083aa4f1d84b4335  gdb/mi/mi-cmds.c
+de95a0b4db971404fa124d9649b28728  gdb/mi/mi-cmds.h
+5ae31bb803219ac45bf4a6567daceab5  gdb/mi/mi-common.c
 690cb9405d967da278e7eb4177895c4b  gdb/mi/mi-common.h
-d37adaf6be3a92b69a0b3289b60c943f  gdb/mi/mi-console.c
-13595b9fb1418d0d4b27d426970b476c  gdb/mi/mi-console.h
-42e03bf4bcb6ef4b93681d84b3eabb2a  gdb/mi/mi-getopt.c
-84ee5b643f7635ec5812b268f0eefe05  gdb/mi/mi-getopt.h
-7e742b5764ee97af000ebbab0332c2c4  gdb/mi/mi-interp.c
-ee6cb3bc178a8bd6b3d5ec6bdd27af08  gdb/mi/mi-main.c
+57c09d87c91306bd6ad57f31787d033f  gdb/mi/mi-console.c
+2f20e1407470eeb31d612064cc07a8c3  gdb/mi/mi-console.h
+fa6bae52bd911afdc0ec5561842dae65  gdb/mi/mi-getopt.c
+27180688a97d0a6dc8dc59e365b00841  gdb/mi/mi-getopt.h
+74f499bd3aa58c11c3abe161f1a2d05d  gdb/mi/mi-interp.c
+3158965b5407aa2f988cab0e475dc0f0  gdb/mi/mi-main.c
 671215a10757e577147d49d6b76b53c2  gdb/mi/mi-main.h
-68e8e953d7d459929d8f09efa9f29a6f  gdb/mi/mi-out.c
+93ab920239091a5c8760f119a8f11428  gdb/mi/mi-out.c
 221b1b20bcab5757ffc8565b8ad768e7  gdb/mi/mi-out.h
-a3bd61c698128d4126d9b4916dfddbf0  gdb/mi/mi-parse.c
-b6efac7664e2cc79c2d7039ae49c2590  gdb/mi/mi-parse.h
-67400312ebc18a1538fbf842ad1ba7b3  gdb/mi/mi-symbol-cmds.c
+aeb200e62503ec05dbe32ba19f5976a4  gdb/mi/mi-parse.c
+26ae7898894f0e71c4adc062bff395c6  gdb/mi/mi-parse.h
+140168535ebc5d12145c368d87dabb49  gdb/mi/mi-symbol-cmds.c
 912ea9d855fcc23de552c2d674d37812  gdb/osf-share/README
 09c00dd64d8863a53eb3dc7b2b891e51  gdb/osf-share/cma_attr.h
 212d9dd6351a845a3cec7fb263bdd6ef  gdb/osf-share/cma_deb_core.h
@@ -1860,55 +1975,58 @@ c20fd87765652ad7ba50f43a0ec95088  gdb/osf-share/cma_util.h
 7cd3745f37bbbfcd24086735939ead52  gdb/osf-share/HP800/cma_thread_io.h
 36cb16e3cf86ddd4609d275a6a3052f5  gdb/osf-share/RIOS/cma_thread_io.h
 1851bff0653201a488dcae18dde7efad  gdb/po/gdbtext
-18fbf78a6d7bd184ea5a132a96e46eed  gdb/po/gdb.pot
-7d8e9488c01631f6ced7a5ee1abe4e82  gdb/python/py-auto-load.c
-c50cdb4ab700237449f27ea7d6b0637b  gdb/python/py-block.c
+74b34d720e20e5ffaa85d11127d51ec5  gdb/po/gdb.pot
+41d7ed66b6e42064caddff286fc26136  gdb/python/py-auto-load.c
+d46f38c49ba79ffcc1fe58e6babe8493  gdb/python/py-block.c
 be8cbd2c7ccd83e31f62e01605df83b8  gdb/python/py-bpevent.c
-fdfa7fb2ef76b8dea2d0a2c0aad8a048  gdb/python/py-breakpoint.c
-fef6c273551544195b08180798d25ff6  gdb/python/py-cmd.c
-698a44eebf25ce0b09902b1ba4f64fd7  gdb/python/py-continueevent.c
-2333c66f4114500b29e956629bd43d70  gdb/python/py-event.c
+bb535075049a1e977b2b25081908b990  gdb/python/py-breakpoint.c
+f33739bd3a1b2cb85fd2bae56762ea9c  gdb/python/py-cmd.c
+cead636794b56ab643ee6db74e5d9f5c  gdb/python/py-continueevent.c
+ffabee65e26756b050c2aea6b0e5972a  gdb/python/py-event.c
 eaf49c832190f6a0845041844f432815  gdb/python/py-event.h
 19c8c95be3850eaf9dc6f2327c1fb5db  gdb/python/py-events.h
 40ae56eb3dfcebc84d3a9c0f33b84ff3  gdb/python/py-evtregistry.c
 70046ad59d23797fb3de152bedd10099  gdb/python/py-evts.c
 20202c9e5c2493b0e7f2f070736f2569  gdb/python/py-exitedevent.c
-681bbc34c8b215f6eba58c469f250c5b  gdb/python/py-finishbreakpoint.c
-cbff3f902f47af733f776e5c60fa9394  gdb/python/py-frame.c
+84ecfff5299cb937ce903df90cc0e3d4  gdb/python/py-finishbreakpoint.c
+d6be40dc02a55bb8f5978635a8c4f6b8  gdb/python/py-frame.c
 33033c2d859aa201f90cca8f8c28f0f5  gdb/python/py-function.c
-a2ca777c5d83c952037f1c3b82241850  gdb/python/py-inferior.c
-2792311cc87b77690aef5c9695cc4b4c  gdb/python/py-infthread.c
-d0e6239d7286111f6e2f35929448b43f  gdb/python/py-lazy-string.c
-1858d823b362a447eb9837f70f367c5d  gdb/python/py-newobjfileevent.c
+1dce1503392f7fd711683f4e2217174d  gdb/python/py-inferior.c
+ce6845bcd16a9febc668d7f20cc34d04  gdb/python/py-infthread.c
+f7bab6e5739448e4a93a770b975c38af  gdb/python/py-lazy-string.c
+46f2b300d543ec65bd2bd979e30e19c6  gdb/python/py-newobjfileevent.c
 2871c55d49467b06149d924f435807a9  gdb/python/py-objfile.c
 94603e882605c76d89290c07cf5b9bb0  gdb/python/py-param.c
 fb2afb68441534d151e9d04ca47ea0ca  gdb/python/py-prettyprint.c
 cf56184c48c90d5631f314886c19bafd  gdb/python/py-progspace.c
-cfa5e947db52056fc20a01dc03a1aac6  gdb/python/py-signalevent.c
-47eccc8609467ab143cefdf0cc99554c  gdb/python/py-stopevent.c
-81ef109cdb3ad6ad2a60b5176f6078e3  gdb/python/py-stopevent.h
-86e4d29a04827c4f0100163e666c8dc9  gdb/python/py-symbol.c
-9d2ec5d88911c872f0fcec5815488198  gdb/python/py-symtab.c
+29708313063fdb67bda15365d05b16ca  gdb/python/py-signalevent.c
+9a467854032af9ec1229ef1b697d6839  gdb/python/py-stopevent.c
+0d3049b02034588573fe1f7536139461  gdb/python/py-stopevent.h
+741a28fccd7745ab696f7c332112ba8b  gdb/python/py-symbol.c
+abda572f9347387fe4ab124bea913029  gdb/python/py-symtab.c
 e342a12ab467488b7fa54062b2580147  gdb/python/py-threadevent.c
-c37c0c17f457045a221ad4e593e8ceb1  gdb/python/py-type.c
-9c68652a971588d0c430f935350779a8  gdb/python/py-utils.c
-82ee3c0782c0d016ebe781058feb3102  gdb/python/py-value.c
+e74ecf657888763f8de7ec863cc29a7e  gdb/python/py-type.c
+79ff39ed71bee84ae30c94d5d25651c1  gdb/python/py-utils.c
+a65d01a6be1d6e49f1a76f867a77a65f  gdb/python/py-value.c
 df61f04da42752ab5d9115d036f22430  gdb/python/python-config.py
-88faa0bef4fe37612c76894f86325cb1  gdb/python/python-internal.h
-62d0a2b3d550273efd3aa45feccd0419  gdb/python/python.c
-5bd1f86ccca86a34a3dc12fd4b8d4d11  gdb/python/python.h
+fae4b5c88e230ab947fae2d1ed72f686  gdb/python/python-internal.h
+bc441a666242c968665db9d8c4545eab  gdb/python/python.c
+06701c32366f9f2f6b2f847e9242a566  gdb/python/python.h
 0ede955be53064e857fca1abcd4af3d5  gdb/python/lib/gdb/__init__.py
-7f50a20a4850486dd55fe2d83586f8c3  gdb/python/lib/gdb/printing.py
+0b0f0baea9b60fb07eb7f687730da3f5  gdb/python/lib/gdb/printing.py
 9153dfb2c33ccfb638dcaf82a0c6f411  gdb/python/lib/gdb/prompt.py
-9fc5b78910f6f4b6de3f5c90f07b5628  gdb/python/lib/gdb/types.py
+5fc65c1cab8fcc151b6fb0eec39fddff  gdb/python/lib/gdb/types.py
 15426bf33aa5db9b85fcefa08c744a27  gdb/python/lib/gdb/command/__init__.py
+83a398c310b74df95689045f4d1e52ef  gdb/python/lib/gdb/command/explore.py
 a0c6399f9b2d37cc8f74ef7745055ad8  gdb/python/lib/gdb/command/pretty_printers.py
 f1dcc7968a832a6b4687c74cf043b7c6  gdb/python/lib/gdb/command/prompt.py
 2368e7d1c200b1ad2630b781176ebe8a  gdb/regformats/arm-with-iwmmxt.dat
 da9872dc9dc42c91513fb26feaccd663  gdb/regformats/arm-with-neon.dat
 14ddc015f817b3831e7aee174151ddc5  gdb/regformats/arm-with-vfpv2.dat
 d888977a91fd6e111ef801e34756cfb9  gdb/regformats/arm-with-vfpv3.dat
+c24d30706c2cf7ba19d6378f10687cb9  gdb/regformats/mips-dsp-linux.dat
 39090709455de66c58678b79b9e8ebb2  gdb/regformats/mips-linux.dat
+b63280b1465ff33c559e3c298f9b29fc  gdb/regformats/mips64-dsp-linux.dat
 a43a60c876dcd8181b951ada3ed48136  gdb/regformats/mips64-linux.dat
 af2244f4f4df3b1efe1f188b3b2c78a7  gdb/regformats/reg-arm.dat
 a4c831a178c251888eeb8c4ebbc573fe  gdb/regformats/reg-bfin.dat
@@ -1921,6 +2039,7 @@ a1c09888ecf3221afc983f497bf2c032  gdb/regformats/reg-ia64.dat
 657ed262c66093acacf0ccf85f97c55c  gdb/regformats/reg-sh.dat
 c650790932c3ce82d781ba6de87a578e  gdb/regformats/reg-sparc64.dat
 5bf224ddaee9fb46ea4c9ac7d14ac56c  gdb/regformats/reg-spu.dat
+352fd295e48c4f5b44c2ffda8112d6c9  gdb/regformats/reg-tilegx.dat
 ccc2e6c9eebe99b681af91142607fb6e  gdb/regformats/reg-xtensa.dat
 45c6b3b8b6386f27645e158e7337de47  gdb/regformats/regdat.sh
 1dc4994c85b6964fdd4e3b6eacb49289  gdb/regformats/regdef.h
@@ -1949,6 +2068,10 @@ cdd58df5759a520c7fa195f94d102bac  gdb/regformats/i386/i386-avx-linux.dat
 31e65e7acd7faa81fb88d40feaaf1156  gdb/regformats/i386/i386-mmx-linux.dat
 08eab2ea636d0fc209807523bbb7c828  gdb/regformats/i386/i386-mmx.dat
 e8430fc6a2e436bf04747f0c1a5a0ea5  gdb/regformats/i386/i386.dat
+0ae29025d84650b460b40bbd2ff51668  gdb/regformats/i386/x32-avx-linux.dat
+72fc72dcd4a5f195125a1aa18e97a23e  gdb/regformats/i386/x32-avx.dat
+1ea082045d60cef91c53d0400206e5bf  gdb/regformats/i386/x32-linux.dat
+ff5238df78e08cfed0e7dbd5c5589e9a  gdb/regformats/i386/x32.dat
 e351adcce8047049aac59357e3e1eb78  gdb/regformats/rs6000/powerpc-32.dat
 423c4d259d3dac4be0f8ae343e335562  gdb/regformats/rs6000/powerpc-32l.dat
 1632c54a20488a06ba18f427514480c8  gdb/regformats/rs6000/powerpc-64l.dat
@@ -1965,6 +2088,14 @@ d9af79851136b77df846c2b32d38906f  gdb/regformats/rs6000/powerpc-isa205-altivec64
 9d6b71f3c75ed11de62e7bf0f9b7db43  gdb/regformats/rs6000/powerpc-isa205-vsx64l.dat
 f12260e77ebe87a66b36402a7bc27cab  gdb/regformats/rs6000/powerpc-vsx32l.dat
 fb89f2757368fa482e0105094ef27952  gdb/regformats/rs6000/powerpc-vsx64l.dat
+bc5e8f3d9c4e5023326d85e4d7ca638f  gdb/stubs/ChangeLog
+45c21b71c1f9edc610cd241f98a2aa7f  gdb/stubs/buildvms.com
+0644af48c77adac296d83d3fe9bc65e3  gdb/stubs/i386-stub.c
+25556e4e84f5fc10ab1804cffabe6e5b  gdb/stubs/ia64vms-stub.c
+ef7f67e5720cf7b193349f8687243947  gdb/stubs/m32r-stub.c
+04ef5745a7e6781587638a72b849da35  gdb/stubs/m68k-stub.c
+ffc93e69a8813484cec63da022b68375  gdb/stubs/sh-stub.c
+8edc014e1b5928dd9761408fa7df0d64  gdb/stubs/sparc-stub.c
 47e0c1c770b05486948cf2e854236f94  gdb/syscalls/amd64-linux.xml
 e3c5db5fbc91b6f0b1804d64ef933df9  gdb/syscalls/bfin-linux.xml
 f63961c5f70a574943c3ed338feaa6ce  gdb/syscalls/gdb-syscalls.dtd
@@ -1976,14 +2107,16 @@ ea9cbcd95f79798e1a692f4abf93a2c7  gdb/syscalls/mips-n32-linux.xml
 c0ec02b9ad0757a03d9dea6ea6b8adb0  gdb/syscalls/ppc64-linux.xml
 1ec17336100dcc40f3964c8027955d28  gdb/syscalls/sparc-linux.xml
 92757f46acf7c629f8cecaaf0304f2c4  gdb/syscalls/sparc64-linux.xml
-32b68d52cb813a01f3eac71017f56d2e  gdb/testsuite/.gdbinit
-e4b14e40d46fb5be9dcfa3cef7754f68  gdb/testsuite/ChangeLog
-0cb40a171fb94e89b9718d67ec9fcacc  gdb/testsuite/Makefile.in
+7c67ab0a288eb2b773b073a92e3a64d1  gdb/testsuite/ChangeLog
+8181316b8b2460853fe22c659ba1071e  gdb/testsuite/Makefile.in
 1b9bb551736dbc95577c91620b81fb6c  gdb/testsuite/TODO
 a225f3bdf3ee20da9623fd4c54b5454b  gdb/testsuite/aclocal.m4
-b248fb97d84df99bde0186711c451f59  gdb/testsuite/configure
-99b3fdde0949616418d1d61078c29229  gdb/testsuite/configure.ac
-7590872c21b321fecfb8b2c870e6d367  gdb/testsuite/dg-extract-results.sh
+164a45657f22076de815ea0e46bc3b3e  gdb/testsuite/configure
+3339e0c87a77524df0f26c1ffe666e42  gdb/testsuite/configure.ac
+7ec5d2be55011ec7a689578e986411d1  gdb/testsuite/dg-extract-results.sh
+63c40563d1238eb3384c28c9967c7c93  gdb/testsuite/boards/native-extended-gdbserver.exp
+30f30b336106e87eb3691f0543465d90  gdb/testsuite/boards/native-gdbserver.exp
+424ff3eca4974e1c4e4133a2c5780b2c  gdb/testsuite/boards/native-stdio-gdbserver.exp
 fee369d654e97f06fe1c1e5a6680a672  gdb/testsuite/config/arm-ice.exp
 fee369d654e97f06fe1c1e5a6680a672  gdb/testsuite/config/bfin.exp
 8ba5b37f905bccdafcb6ee8566e5d26c  gdb/testsuite/config/cfdbug.exp
@@ -1991,6 +2124,7 @@ fee369d654e97f06fe1c1e5a6680a672  gdb/testsuite/config/cygmon.exp
 c6ea1f33c6c876c8e272f2b7248ebe77  gdb/testsuite/config/d10v.exp
 5b240aa800793e6821b4f5e0750f5488  gdb/testsuite/config/default.exp
 535594bf9a25f20fa34ca430f9ca4e04  gdb/testsuite/config/dve.exp
+fc80ad87604da50cd47cc778bcb701fa  gdb/testsuite/config/extended-gdbserver.exp
 f4e7d4b221fe1bbd7ddd64205184190d  gdb/testsuite/config/gdbserver.exp
 fee369d654e97f06fe1c1e5a6680a672  gdb/testsuite/config/h8300.exp
 e4708e4b23e4e6ddd07c7245736d37b3  gdb/testsuite/config/i386-bozo.exp
@@ -2013,71 +2147,87 @@ a5f95e0208de3292fa4de5beff9c9bf5  gdb/testsuite/config/unix.exp
 3b0ef9c6029e7a66c05d4ae72cb887ae  gdb/testsuite/config/vx.exp
 888f129344dedc2a02d99caaae58865d  gdb/testsuite/config/vxworks.exp
 a7c98de8868db40d2fe84eb0d3d529aa  gdb/testsuite/config/vxworks29k.exp
-cd17636f2ab706ae1d418c1f324e1b4a  gdb/testsuite/gdb.ada/Makefile.in
-93055c8612ec86baa83576cbe87299d5  gdb/testsuite/gdb.ada/array_bounds.exp
-c0053b8501d4e1d4d63976e08e9b9d30  gdb/testsuite/gdb.ada/array_return.exp
-e4171b3c3fe88edf8fd7ee0b2fb2a07a  gdb/testsuite/gdb.ada/array_subscript_addr.exp
-cc248c56d0af5e3c41f86c87a581cce5  gdb/testsuite/gdb.ada/arrayidx.exp
-62111e117dc96a8bcfeb7285bc79e345  gdb/testsuite/gdb.ada/arrayparam.exp
-432dafee6806fcb789fa1d7d13188cd9  gdb/testsuite/gdb.ada/arrayptr.exp
-81437fe679724e9b22b03d1f1a3fd276  gdb/testsuite/gdb.ada/assign_1.exp
-fd8b5326182d4ee8b780c53121327046  gdb/testsuite/gdb.ada/atomic_enum.exp
-ba508e8941054d732544b91273927994  gdb/testsuite/gdb.ada/boolean_expr.exp
-5043ad49dea2ab3d9897986eae69ba1e  gdb/testsuite/gdb.ada/call_pn.exp
-11de470771c5fab1aa545049e4a8113d  gdb/testsuite/gdb.ada/catch_ex.exp
+5c9aac2e20ef2516f2bfea5dfeb70adb  gdb/testsuite/gdb.ada/Makefile.in
+0ece79a678a8643a8e3de25cf96a4bee  gdb/testsuite/gdb.ada/aliased_array.exp
+340e5a637d443c719294e869aad18b2a  gdb/testsuite/gdb.ada/array_bounds.exp
+cb84fa04978e0ac4c2f1301d14fd86b2  gdb/testsuite/gdb.ada/array_return.exp
+783547eb70bc2b9da5feae616c211061  gdb/testsuite/gdb.ada/array_subscript_addr.exp
+d78d62b565501e54a53158ba4184da61  gdb/testsuite/gdb.ada/arrayidx.exp
+89963fb3fd4ba7bc754b7b05045fda46  gdb/testsuite/gdb.ada/arrayparam.exp
+476b9dc8b56af76311f833c93b671b2d  gdb/testsuite/gdb.ada/arrayptr.exp
+7d352c0bb932dd4e69ce129d5259c651  gdb/testsuite/gdb.ada/assign_1.exp
+82744eecd8308ec24c295fd04f478a44  gdb/testsuite/gdb.ada/atomic_enum.exp
+1f27faeb33fcc99ed57a5c6d35750328  gdb/testsuite/gdb.ada/bad-task-bp-keyword.exp
+1a2dfa4da35c7f3d99640b6af536a780  gdb/testsuite/gdb.ada/boolean_expr.exp
+6922871c70d0ebdc9ada9d3c755ba644  gdb/testsuite/gdb.ada/bp_enum_homonym.exp
+224417f44446eed6672b02a4455e0e13  gdb/testsuite/gdb.ada/bp_on_var.exp
+4bf4999c9efea8b5f54d9dc18b3da78f  gdb/testsuite/gdb.ada/bp_range_type.exp
+9798d53bc0ca8b940cb3a145b6599874  gdb/testsuite/gdb.ada/call_pn.exp
+ad3dce99c9e95aa59f92ad7c8ef5a93f  gdb/testsuite/gdb.ada/catch_ex.exp
 9d27b1fe1b28c6e0f8b87af36855bcbf  gdb/testsuite/gdb.ada/char_enum.exp
-6c99a742ca7d0c125ece1a77d95d3618  gdb/testsuite/gdb.ada/char_param.exp
-cc6ca05c6dc1aee4430e28184e9d6bb9  gdb/testsuite/gdb.ada/complete.exp
-05ff2eff21d202c479ed11cdc26ad992  gdb/testsuite/gdb.ada/cond_lang.exp
-ca712e57f891f1168944ba6fa9473e08  gdb/testsuite/gdb.ada/dyn_loc.exp
-855b2e2590c4e481ed61dc7da698f423  gdb/testsuite/gdb.ada/exec_changed.exp
-e1d5cc1d544c7bb2dab88fdc46d602e4  gdb/testsuite/gdb.ada/exprs.exp
-597377953540b9a19163e03781130c55  gdb/testsuite/gdb.ada/fixed_cmp.exp
-393eb6c53292f3ba1df85e6789971fca  gdb/testsuite/gdb.ada/fixed_points.exp
-f69663b9dc0f3ff29707aae73d41db14  gdb/testsuite/gdb.ada/formatted_ref.exp
-96be5d43a4c8b366e76610cca80852de  gdb/testsuite/gdb.ada/frame_args.exp
+c23b4460d0dacf3ae47dcc1e2263cd26  gdb/testsuite/gdb.ada/char_param.exp
+c2e01fd6f6a1e09381820d23ca590584  gdb/testsuite/gdb.ada/complete.exp
+275c85a021cb42237f61f4ce3c464c7d  gdb/testsuite/gdb.ada/cond_lang.exp
+d4be50f6a3cca6939210094e66ebde73  gdb/testsuite/gdb.ada/dyn_loc.exp
+ea26a27155ca9d7dda6dba6ebfbc7e17  gdb/testsuite/gdb.ada/enum_idx_packed.exp
+306bba39d038a76bc5646b9833e2c867  gdb/testsuite/gdb.ada/exec_changed.exp
+1d00286bff7c321fa2e2d2ba9f367904  gdb/testsuite/gdb.ada/exprs.exp
+059a8d3e3f71de782ff674523c87500d  gdb/testsuite/gdb.ada/fixed_cmp.exp
+1f70efbc4fe6d8c817dbd00de3b16c47  gdb/testsuite/gdb.ada/fixed_points.exp
+7fed30ab965327adda86b0de76d1f12b  gdb/testsuite/gdb.ada/formatted_ref.exp
+9ff06ba7174ad3f24dae96e3586eeb27  gdb/testsuite/gdb.ada/frame_args.exp
 cacd2691d915e5f1bb162c581cc4764f  gdb/testsuite/gdb.ada/fullname_bp.exp
-582c614e51f28d3323918a33f29623fd  gdb/testsuite/gdb.ada/fun_addr.exp
-be0b5ac617ec58ffc238e37371c07de0  gdb/testsuite/gdb.ada/fun_in_declare.exp
-016876f63b102285436ff4ee2c1dcee8  gdb/testsuite/gdb.ada/funcall_param.exp
+ebb7587a88c1c4b17f6afa320edc5eff  gdb/testsuite/gdb.ada/fun_addr.exp
+e2d6225396fa84fc31c8902c6137ee7a  gdb/testsuite/gdb.ada/fun_in_declare.exp
+d19b398ab5a263ed192aa1be30b37ec7  gdb/testsuite/gdb.ada/funcall_param.exp
 ff5660ee6e14f8d95c510297ac036aed  gdb/testsuite/gdb.ada/gnat_ada.gpr
-e757df3161c31f95bfaab116b3e7bab3  gdb/testsuite/gdb.ada/homonym.exp
+554b6977af4e6dfcf82bcf42a71ed6b9  gdb/testsuite/gdb.ada/homonym.exp
+c566aace0bf5f665a13a0a261315a509  gdb/testsuite/gdb.ada/info_locals_renaming.exp
 0c7e69301fd29a40d02243732aafc07f  gdb/testsuite/gdb.ada/info_types.c
 e8aa9153ce41953a3924a21f2cdf6dc3  gdb/testsuite/gdb.ada/info_types.exp
-f18b08a3650036bc14bd2c7cb8c81005  gdb/testsuite/gdb.ada/int_deref.exp
-62df8a60a44423a45a7383731e5ec6e3  gdb/testsuite/gdb.ada/interface.exp
-4638160032a9df46bf3adb2463846dbd  gdb/testsuite/gdb.ada/lang_switch.exp
+db159422de0214d1a8e4f120177c9ce3  gdb/testsuite/gdb.ada/int_deref.exp
+1096ebdc6c667ebb778dc8ee77b365fd  gdb/testsuite/gdb.ada/interface.exp
+69dd02edb5250de7fac133f6a2bf4197  gdb/testsuite/gdb.ada/lang_switch.exp
 fcf51723d7b5d3e637932dbed4fceb7e  gdb/testsuite/gdb.ada/mi_catch_ex.exp
-c22672920614a65a9a7bf6f97bcf9817  gdb/testsuite/gdb.ada/mi_task_info.exp
-f4842f3510a8df8b60c47e7e87dd4797  gdb/testsuite/gdb.ada/mod_from_name.exp
-95299889693efd71bfc41dbcc2d35e68  gdb/testsuite/gdb.ada/nested.exp
-586924942faaad9a2f0cc59dd23215fd  gdb/testsuite/gdb.ada/null_array.exp
-fef89614ed35e70d72dce10eb9cd6798  gdb/testsuite/gdb.ada/null_record.exp
-242ae41e8dba1ecc92c0c308e5c3657e  gdb/testsuite/gdb.ada/packed_array.exp
-a79ee861e502ee0e6bc7d5fd1b08489f  gdb/testsuite/gdb.ada/packed_tagged.exp
-100528d9f75fa97f8c54aa470716ee01  gdb/testsuite/gdb.ada/print_chars.exp
-7b5983a15ca4065adbe60f68c2c4b374  gdb/testsuite/gdb.ada/print_pc.exp
+3c6227a6f701071c33bb530fbce36488  gdb/testsuite/gdb.ada/mi_task_arg.exp
+f83803998a552d66cb57308863cae7d8  gdb/testsuite/gdb.ada/mi_task_info.exp
+e4d6041a784191f6643817a652f3c134  gdb/testsuite/gdb.ada/mod_from_name.exp
+16cd562d8884cbcd73e8ae6087f84f53  gdb/testsuite/gdb.ada/nested.exp
+7005a389dcb6c2588a73352cc00ddbae  gdb/testsuite/gdb.ada/null_array.exp
+8b26daf48d3570c2469bf2a965c76c66  gdb/testsuite/gdb.ada/null_record.exp
+89487601b3f3693ec5d025070222b756  gdb/testsuite/gdb.ada/operator_bp.exp
+510f4973582db8a98ce50da99c291030  gdb/testsuite/gdb.ada/packed_array.exp
+4523aa1adda65bac2e5eaa507274e368  gdb/testsuite/gdb.ada/packed_tagged.exp
+f30dc5a18c9b7378b8d816dd2f41275e  gdb/testsuite/gdb.ada/print_chars.exp
+0dffba3cc75f9e99e7415e08f0924e3d  gdb/testsuite/gdb.ada/print_pc.exp
 a4adfdb705767ad22b672d7d666639fb  gdb/testsuite/gdb.ada/ptr_typedef.exp
-66c862f6d5d2c2692fcff0a3477072a3  gdb/testsuite/gdb.ada/ptype_arith_binop.exp
-dae189cdffdc7ae980faa50052283908  gdb/testsuite/gdb.ada/ptype_field.exp
-33b6e3aebf1aef0de41fb3e36fe38087  gdb/testsuite/gdb.ada/ptype_tagged_param.exp
-750f959ed12c1f98a42327717f9874db  gdb/testsuite/gdb.ada/rec_return.exp
-cd0965683617399091318c1b6d5f369a  gdb/testsuite/gdb.ada/ref_param.exp
-17eccb31b8be518d4abf6edb455c4be6  gdb/testsuite/gdb.ada/ref_tick_size.exp
+95efd6eb413694f6fd3cb1f2772dbb91  gdb/testsuite/gdb.ada/ptype_arith_binop.exp
+4fe28b660f0c2c2e1ba98c5733c3fd03  gdb/testsuite/gdb.ada/ptype_field.exp
+9857f1025bcb3611516a2975e723329f  gdb/testsuite/gdb.ada/ptype_tagged_param.exp
+9683b84f4681ea031d4f1ee16c390ded  gdb/testsuite/gdb.ada/rec_return.exp
+d6586285ff365f0637bb305fb0c1e8b5  gdb/testsuite/gdb.ada/ref_param.exp
+ae44c46da3d87590aece9e416e4e3092  gdb/testsuite/gdb.ada/ref_tick_size.exp
 8068440e30928dab6e2e0e31eb759759  gdb/testsuite/gdb.ada/same_enum.exp
+b20193f1f74985d98c3e930622dfbded  gdb/testsuite/gdb.ada/set_pckd_arr_elt.exp
 496a13234d37b836b16a9971d62d4296  gdb/testsuite/gdb.ada/small_reg_param.exp
-d826e51640eed26223b2b3c2e064f92f  gdb/testsuite/gdb.ada/start.exp
-d8b9d607081aaabb72356c89e87738a5  gdb/testsuite/gdb.ada/str_ref_cmp.exp
-32aed0f43a497da830e78c1b9867c76e  gdb/testsuite/gdb.ada/sym_print_name.exp
-029183091f57467c06a31a269e14a543  gdb/testsuite/gdb.ada/taft_type.exp
-9ba72462076db080c8e36add8335a6b9  gdb/testsuite/gdb.ada/tagged.exp
-a610b750d1764434d4f2ce43cb859c95  gdb/testsuite/gdb.ada/tasks.exp
-96bbefa1f529d3f580785ef75d5c2525  gdb/testsuite/gdb.ada/tick_last_segv.exp
-309c03cc8a177be778fba62a0159d144  gdb/testsuite/gdb.ada/type_coercion.exp
-5333848e0b1be147464b78d0ee2f3f8e  gdb/testsuite/gdb.ada/uninitialized_vars.exp
-aa84019f379a5526cf73dbe7411ec038  gdb/testsuite/gdb.ada/variant_record_packed_array.exp
-ca07cd739e8ddeffde1333d0f28eeac8  gdb/testsuite/gdb.ada/watch_arg.exp
+0c1ba0b2e793889af40b16e2bcb804eb  gdb/testsuite/gdb.ada/start.exp
+efefa4feac39c7dbd72abd5181da082f  gdb/testsuite/gdb.ada/str_ref_cmp.exp
+ac97443275e838661e395e61e107fac0  gdb/testsuite/gdb.ada/sym_print_name.exp
+08a6c1cf5c82ae059ebc52a2c6a068b6  gdb/testsuite/gdb.ada/taft_type.exp
+401c0ce34cb29a40aa12f434d64deda9  gdb/testsuite/gdb.ada/tagged.exp
+a7f92f4ddada76eff1aabf141a984b2b  gdb/testsuite/gdb.ada/tagged_not_init.exp
+ce904cec7c8e6d745966dc078121611d  gdb/testsuite/gdb.ada/task_bp.exp
+bc08a48c56521fc5b8baf1f9f212b6ae  gdb/testsuite/gdb.ada/tasks.exp
+ce7c037db9bcf8f442926847b48b4847  gdb/testsuite/gdb.ada/tick_last_segv.exp
+349ae48abc34a3a0b7e83edbd1a1941a  gdb/testsuite/gdb.ada/type_coercion.exp
+389b0138572ab25151ddb8fb6bbc2a12  gdb/testsuite/gdb.ada/uninitialized_vars.exp
+5f1568a196552f0c39c65203bbf9140b  gdb/testsuite/gdb.ada/variant_record_packed_array.exp
+219206ac691d67aad272dd8b9ee58e5a  gdb/testsuite/gdb.ada/watch_arg.exp
+d2ddd860ddf7075f06c08d1dab99c61c  gdb/testsuite/gdb.ada/whatis_array_val.exp
 89efe36d52a6f9945a22140d4206f2d1  gdb/testsuite/gdb.ada/widewide.exp
+09b4d9e4bc4aadbe7fbf8e95b6dd93f5  gdb/testsuite/gdb.ada/aliased_array/foo.adb
+65d166e1a305dad3c50ea01a3ce018f7  gdb/testsuite/gdb.ada/aliased_array/pck.adb
+ed8cf8d68566cc73b74dbd6a73e41135  gdb/testsuite/gdb.ada/aliased_array/pck.ads
 752d775f1d4759d1a9ff903cd60d0cf3  gdb/testsuite/gdb.ada/array_bounds/bar.adb
 6b87290119a797cc1aa4cda12d8489ce  gdb/testsuite/gdb.ada/array_return/p.adb
 1577b584a0dee4c93dd893fee6f1a795  gdb/testsuite/gdb.ada/array_return/pck.adb
@@ -2093,6 +2243,16 @@ eba1634a3acbd33c3a0d710072cd57e5  gdb/testsuite/gdb.ada/arrayptr/pck.ads
 fce79cb4c1f303c6ef68fa3d7c8685b2  gdb/testsuite/gdb.ada/atomic_enum/foo.adb
 60a8486e53ff9e9dbcb52110c8663db3  gdb/testsuite/gdb.ada/atomic_enum/pck.adb
 5eadc2c873f2018fd1381b6b3d6cac44  gdb/testsuite/gdb.ada/atomic_enum/pck.ads
+7acf1ce786be73a4e513f740a34f83f7  gdb/testsuite/gdb.ada/bad-task-bp-keyword/foo.adb
+a439981ee4b2953ddfa19d52fdd46351  gdb/testsuite/gdb.ada/bp_enum_homonym/p.adb
+979805901510df3dab5cef47cde566e1  gdb/testsuite/gdb.ada/bp_enum_homonym/pck.adb
+afb0a1eff07a6c25b5b66de97f5bed82  gdb/testsuite/gdb.ada/bp_enum_homonym/pck.ads
+3cefbd66ca84dcdb9873dc5b382e7d03  gdb/testsuite/gdb.ada/bp_on_var/foo.adb
+221d8c210d80f304f1b2bee1d7c1afa7  gdb/testsuite/gdb.ada/bp_on_var/pck.adb
+f71c9371d08a058ca11852ca1312714b  gdb/testsuite/gdb.ada/bp_on_var/pck.ads
+1b610b27388d5596ac8bcd77582acf8a  gdb/testsuite/gdb.ada/bp_range_type/foo.adb
+f1389c3e58da0958c111f42f2a4d3621  gdb/testsuite/gdb.ada/bp_range_type/pck.adb
+0b0e575e88441b50215b15f2fe830406  gdb/testsuite/gdb.ada/bp_range_type/pck.ads
 890a08d6ee56313f1e94e5358330b52b  gdb/testsuite/gdb.ada/call_pn/foo.adb
 63d8633ab7635d2014d1669b6b976845  gdb/testsuite/gdb.ada/call_pn/pck.adb
 ac041c35223f8ad0464433213ed86959  gdb/testsuite/gdb.ada/call_pn/pck.ads
@@ -2115,6 +2275,9 @@ da8f47cc220e7a10cfe4ed775dbb1170  gdb/testsuite/gdb.ada/cond_lang/pck.ads
 4a009fc67dd8d21763cc8447662bd0d4  gdb/testsuite/gdb.ada/dyn_loc/p.adb
 18c43303e5020181e50215744875e7fd  gdb/testsuite/gdb.ada/dyn_loc/pack.adb
 292e957796b54c9309e872d3e67cdad0  gdb/testsuite/gdb.ada/dyn_loc/pack.ads
+17c47581e917ee9798ddb1ddcbd97043  gdb/testsuite/gdb.ada/enum_idx_packed/foo.adb
+f1389c3e58da0958c111f42f2a4d3621  gdb/testsuite/gdb.ada/enum_idx_packed/pck.adb
+a658dce86df4567e90c5194e814a4a25  gdb/testsuite/gdb.ada/enum_idx_packed/pck.ads
 db50b169742f6c4ac286bbbefd6c778a  gdb/testsuite/gdb.ada/exec_changed/first.adb
 953cc464071bb2458914a9da7fcf9847  gdb/testsuite/gdb.ada/exec_changed/second.adb
 92f1c9ad7889f0b3258513a812b67eb0  gdb/testsuite/gdb.ada/exprs/p.adb
@@ -2145,6 +2308,9 @@ c0393ae9b54355d92b2e595003fa725a  gdb/testsuite/gdb.ada/homonym/homonym.ads
 b3d6c17e81d895e8327654dd0864da42  gdb/testsuite/gdb.ada/homonym/homonym_main.adb
 879795cac382546246855bf1398509ea  gdb/testsuite/gdb.ada/homonym/pck.adb
 9e8ba16d664852aab4e3d1082a46ae7c  gdb/testsuite/gdb.ada/homonym/pck.ads
+23f2c1249bf3fc5958d3f900bbe877fe  gdb/testsuite/gdb.ada/info_locals_renaming/foo.adb
+bf0fb1114fee879736a1548b9f0eeda1  gdb/testsuite/gdb.ada/info_locals_renaming/pck.adb
+806bef7201e70f3d93cba3ddef7ed5b7  gdb/testsuite/gdb.ada/info_locals_renaming/pck.ads
 c6f9c1cb061dfacfcf051738918dae3d  gdb/testsuite/gdb.ada/int_deref/foo.adb
 80f119aae260ed971224fee4482b0ac9  gdb/testsuite/gdb.ada/int_deref/pck.ads
 9c36b64b0103a4c6b26811f01fb45d5c  gdb/testsuite/gdb.ada/interface/foo.adb
@@ -2153,6 +2319,7 @@ c3abdc53f349d748f48390df0d99b9e0  gdb/testsuite/gdb.ada/interface/types.adb
 627dc8419c0fda8cdc2b3dcdd542f4aa  gdb/testsuite/gdb.ada/lang_switch/foo.c
 7d47fde6452c7a45e7feb8cd88dc5cd4  gdb/testsuite/gdb.ada/lang_switch/lang_switch.adb
 6e9b5f04d924c0eb94ee6e7f728391a6  gdb/testsuite/gdb.ada/mi_catch_ex/foo.adb
+6c595315ac5b4799dc8dd63fe63cb173  gdb/testsuite/gdb.ada/mi_task_arg/task_switch.adb
 6c595315ac5b4799dc8dd63fe63cb173  gdb/testsuite/gdb.ada/mi_task_info/task_switch.adb
 32e743f9f109c4a9ffab135691b60b65  gdb/testsuite/gdb.ada/mod_from_name/foo.adb
 1c46d7a86d61b32cf225196048c4cdb2  gdb/testsuite/gdb.ada/nested/hello.adb
@@ -2162,10 +2329,13 @@ c39f773327861bc595d04a60374be889  gdb/testsuite/gdb.ada/null_array/pck.ads
 58d882fdbf1ab54536a898a6d8cc737b  gdb/testsuite/gdb.ada/null_record/bar.adb
 cabe4008c7bd3638d420df39ff5c29c9  gdb/testsuite/gdb.ada/null_record/bar.ads
 609563804bf81682c55ea5089fa955d3  gdb/testsuite/gdb.ada/null_record/null_record.adb
+019c30af7cfe5fc73c59834ed6ebb5b3  gdb/testsuite/gdb.ada/operator_bp/ops.adb
+ccf4498df8bdd93ba11158ad7f764a72  gdb/testsuite/gdb.ada/operator_bp/ops.ads
+d3a26948f8831ddaf837411d5b556f51  gdb/testsuite/gdb.ada/operator_bp/ops_test.adb
 1311df7ea93bb96d13a718ec3b8c3246  gdb/testsuite/gdb.ada/packed_array/pa.adb
 f9edbe548e68c6ba84674e0a78e69d57  gdb/testsuite/gdb.ada/packed_array/pck.adb
 41f10d99b5977305f837b851ddc825b3  gdb/testsuite/gdb.ada/packed_array/pck.ads
-fe3efdfcc45d626a2f317fb54b243ae4  gdb/testsuite/gdb.ada/packed_tagged/comp_bug.adb
+97e994ac8bab84d8cb6854cc09dfc2ad  gdb/testsuite/gdb.ada/packed_tagged/comp_bug.adb
 cbbb206477c79ea13ac190d08d2802f1  gdb/testsuite/gdb.ada/print_chars/foo.adb
 98f2171eb8f2a3157299635c2012d592  gdb/testsuite/gdb.ada/print_chars/pck.adb
 618d263dcb8a31a2eeb6e891e23d817a  gdb/testsuite/gdb.ada/print_chars/pck.ads
@@ -2190,6 +2360,9 @@ eba1634a3acbd33c3a0d710072cd57e5  gdb/testsuite/gdb.ada/ref_tick_size/pck.ads
 ef841c000aca34607fbfc799b0bec27a  gdb/testsuite/gdb.ada/same_enum/a.adb
 49ea9f34fa1e3f8adcb079ac3b90cd46  gdb/testsuite/gdb.ada/same_enum/pck.adb
 a282179fd1af13f37e44fd9463accb69  gdb/testsuite/gdb.ada/same_enum/pck.ads
+73450f29b5cdacb90f97b20846b98fa5  gdb/testsuite/gdb.ada/set_pckd_arr_elt/foo.adb
+7311c77f4b2959d14538418c24378274  gdb/testsuite/gdb.ada/set_pckd_arr_elt/pck.adb
+d134e414bbceb9c0dc9580f6bcbd0f8b  gdb/testsuite/gdb.ada/set_pckd_arr_elt/pck.ads
 d35394d0727b4b6338d775ec366234f1  gdb/testsuite/gdb.ada/small_reg_param/foo.adb
 4774fc90a8676108030a22de90c90c19  gdb/testsuite/gdb.ada/small_reg_param/pck.adb
 a7e274498c35f10d419a9d102b93dfc9  gdb/testsuite/gdb.ada/small_reg_param/pck.ads
@@ -2205,6 +2378,12 @@ e3217ebac9701221270f1fe3e4f2e5f6  gdb/testsuite/gdb.ada/taft_type/pck.ads
 e8f729c304ecee5d3ab28f2e5e9be8cc  gdb/testsuite/gdb.ada/tagged/foo.adb
 a3ff322ab57ea37cbc7a8a6668cb0daf  gdb/testsuite/gdb.ada/tagged/pck.adb
 22e65b5ba099e038895a96ee428aaf2b  gdb/testsuite/gdb.ada/tagged/pck.ads
+508a21dbacd32b33961e43580459128d  gdb/testsuite/gdb.ada/tagged_not_init/foo.adb
+713bdf63a21348390977576276ba24dc  gdb/testsuite/gdb.ada/tagged_not_init/pck.adb
+80c7c294190ca4e7f9c7b54eaf68695d  gdb/testsuite/gdb.ada/tagged_not_init/pck.ads
+88b496e8b3d8dec067ada07572a8ca6d  gdb/testsuite/gdb.ada/task_bp/foo.adb
+333c60b05ea8f6d563030bdfa48a381b  gdb/testsuite/gdb.ada/task_bp/pck.adb
+0f440420d944846624beb687ae8aabae  gdb/testsuite/gdb.ada/task_bp/pck.ads
 7acf1ce786be73a4e513f740a34f83f7  gdb/testsuite/gdb.ada/tasks/foo.adb
 b4db53a7613c91175e5384590a229cb2  gdb/testsuite/gdb.ada/tick_last_segv/foo.adb
 b175c9803fd2e4a4f5e269f0f01ab7fb  gdb/testsuite/gdb.ada/type_coercion/assign.adb
@@ -2217,97 +2396,114 @@ c1997bb3dc74c07bdb965121192f88cd  gdb/testsuite/gdb.ada/variant_record_packed_ar
 48db9c8099e1b384950617082b54e47b  gdb/testsuite/gdb.ada/watch_arg/pck.adb
 9e8ba16d664852aab4e3d1082a46ae7c  gdb/testsuite/gdb.ada/watch_arg/pck.ads
 8eb0e163212a816684a09bbb2b9cd93f  gdb/testsuite/gdb.ada/watch_arg/watch.adb
+9f2724142a78f3ea75b0f215e1c1e045  gdb/testsuite/gdb.ada/whatis_array_val/foo.adb
+48db9c8099e1b384950617082b54e47b  gdb/testsuite/gdb.ada/whatis_array_val/pck.adb
+9e8ba16d664852aab4e3d1082a46ae7c  gdb/testsuite/gdb.ada/whatis_array_val/pck.ads
 06165efa4d2267d44831fe685e505c6e  gdb/testsuite/gdb.ada/widewide/foo.adb
 48db9c8099e1b384950617082b54e47b  gdb/testsuite/gdb.ada/widewide/pck.adb
 db2720b3d8e969f0a57792250c7ab45f  gdb/testsuite/gdb.ada/widewide/pck.ads
-fbfb05283e0ab08a37a1dfbd21133a79  gdb/testsuite/gdb.arch/Makefile.in
+0132595b9f73a694c851aa5fe833f207  gdb/testsuite/gdb.arch/Makefile.in
 20f097f7b2eb4ac7e430750f86a36145  gdb/testsuite/gdb.arch/alpha-step.c
-7eb2059d4897448f97df81df66c44af8  gdb/testsuite/gdb.arch/alpha-step.exp
+7de45c96b9b0b93bafe474a4ac857750  gdb/testsuite/gdb.arch/alpha-step.exp
 19d5d7507bce76e9ca88070248830a61  gdb/testsuite/gdb.arch/altivec-abi.c
-9459a9909f495e1327c7b90ea7439ab7  gdb/testsuite/gdb.arch/altivec-abi.exp
+15878744f7700f82163a2a00967e11f6  gdb/testsuite/gdb.arch/altivec-abi.exp
 a4b44663a9c9d2ac554ea371750489cf  gdb/testsuite/gdb.arch/altivec-regs.c
-9600b563e35306221ea565f957477ae2  gdb/testsuite/gdb.arch/altivec-regs.exp
-6f7a38d06901248636d5d0dc02d8db9a  gdb/testsuite/gdb.arch/amd64-byte.exp
+aa563650d252ac0a69609359d21c6b41  gdb/testsuite/gdb.arch/altivec-regs.exp
+2db27b6d62d099239b58761aa1bc4c0b  gdb/testsuite/gdb.arch/amd64-byte.exp
 56d193d0f20644ea5fff682baae353fa  gdb/testsuite/gdb.arch/amd64-disp-step.S
-d3da7b48945dc13315ee3dbc978fbda6  gdb/testsuite/gdb.arch/amd64-disp-step.exp
-baef0cbdc9e0ec215b206314b3ce6013  gdb/testsuite/gdb.arch/amd64-dword.exp
+d40b52797e71e75917049684d4d2a7d4  gdb/testsuite/gdb.arch/amd64-disp-step.exp
+58c16295ab09a3ab6a00494ff91bb0e0  gdb/testsuite/gdb.arch/amd64-dword.exp
+720d131400d6c6c0228e06513050b9a2  gdb/testsuite/gdb.arch/amd64-entry-value-param.S
+40a5ca117c501d3b4e20ab45527cd6f5  gdb/testsuite/gdb.arch/amd64-entry-value-param.c
+da04c52ea50661c5ad70f21341987316  gdb/testsuite/gdb.arch/amd64-entry-value-param.exp
 de3663113db995c51f7063714ea82ccc  gdb/testsuite/gdb.arch/amd64-entry-value.cc
 9686b23c290b2d6e3005ba37b084a83f  gdb/testsuite/gdb.arch/amd64-entry-value.exp
 0f007a1bdaecdc742ad31bfc4d0f5176  gdb/testsuite/gdb.arch/amd64-entry-value.s
 32457cecbafcebf2e7b8241983cd530c  gdb/testsuite/gdb.arch/amd64-i386-address.S
-2a01cc6423c1ad2785a4429fbd24d4af  gdb/testsuite/gdb.arch/amd64-i386-address.exp
+1ae1aa79347aa431e5d0bca9a4f07490  gdb/testsuite/gdb.arch/amd64-i386-address.exp
 f649c736950b5fd624424e3a7f370e4f  gdb/testsuite/gdb.arch/amd64-prologue-xmm.c
 0263f89000d75b0d113a836aaf5daacf  gdb/testsuite/gdb.arch/amd64-prologue-xmm.exp
 e3a9f564be714835504436d7e8d0f0ce  gdb/testsuite/gdb.arch/amd64-prologue-xmm.s
 265407290bc6234802cf2a634ecea75c  gdb/testsuite/gdb.arch/amd64-pseudo.c
-8ee6c4446a279d5abfa57f9d030d72ee  gdb/testsuite/gdb.arch/amd64-word.exp
-25f66fc068f63a5c3fe25252cf470b8a  gdb/testsuite/gdb.arch/arm-disp-step.S
-5e2dfc0c374eecd44db39d5be3a87c7b  gdb/testsuite/gdb.arch/arm-disp-step.exp
+a3bc5b058e9a28b8c8961be3f48a0613  gdb/testsuite/gdb.arch/amd64-word.exp
+075421c7c7df13e3432011aea5c623e1  gdb/testsuite/gdb.arch/arm-disp-step.S
+f44f55476bfcc00aab9ef07183adf7a9  gdb/testsuite/gdb.arch/arm-disp-step.exp
 11389013dfeba005022a1d910728c9d7  gdb/testsuite/gdb.arch/e500-abi.c
-6e9de4dbf8ea640570763fe2d3cb1d07  gdb/testsuite/gdb.arch/e500-abi.exp
+822ec0ab2ec575866aa755218e75a1d8  gdb/testsuite/gdb.arch/e500-abi.exp
 a4e9e80bc620c87e49b17beb1568d3f6  gdb/testsuite/gdb.arch/e500-prologue.c
-d3e708ff4b92a3efad861702899fef23  gdb/testsuite/gdb.arch/e500-prologue.exp
+988160a6920d81df7a7e45cd1974a013  gdb/testsuite/gdb.arch/e500-prologue.exp
 fcd0dd3432e917999e1b351b9467f52f  gdb/testsuite/gdb.arch/e500-regs.c
-5f9c93665059b7c67ecb915d94d89715  gdb/testsuite/gdb.arch/e500-regs.exp
+ceb7e729ee38881b355a966363f2ec6a  gdb/testsuite/gdb.arch/e500-regs.exp
 dc6e59a71b50c1537d922967b0601e1d  gdb/testsuite/gdb.arch/gcore.c
-a8bca0fd56684c295229c610b936a7a7  gdb/testsuite/gdb.arch/gdb1291.exp
+840167829b662b96177ee95154a71e96  gdb/testsuite/gdb.arch/gdb1291.exp
 cf4252186f526c3f3bb50b5fa5770ef5  gdb/testsuite/gdb.arch/gdb1291.s
-5516d8b07ada35747573afef08e3f714  gdb/testsuite/gdb.arch/gdb1431.exp
+bfe692daf041b30e22288eaba8ff1f69  gdb/testsuite/gdb.arch/gdb1431.exp
 3a04b4966634cd3b00109b91c8f4059b  gdb/testsuite/gdb.arch/gdb1431.s
 57cbbf97ee6af178b34082c40c364275  gdb/testsuite/gdb.arch/gdb1558.c
-b4ce1abeef5ce0a726dca3860bd9a19d  gdb/testsuite/gdb.arch/gdb1558.exp
+5ba12b656335f9e8045071bc446aa570  gdb/testsuite/gdb.arch/gdb1558.exp
 70c171c40076612c31ad403281565051  gdb/testsuite/gdb.arch/i386-avx.c
-d6546249585e0bec1d87f86f44070ae1  gdb/testsuite/gdb.arch/i386-avx.exp
-a5409112142036fd328b7c85cb4c3c29  gdb/testsuite/gdb.arch/i386-bp_permanent.exp
-7d641c1c9b18cbead610587248a7bc8d  gdb/testsuite/gdb.arch/i386-byte.exp
+6cc8b1e920c590aac678a256b4d241c4  gdb/testsuite/gdb.arch/i386-avx.exp
+2607b56e9f04c06da30aa0cbac629ebe  gdb/testsuite/gdb.arch/i386-bp_permanent.exp
+3d72ac7544f23ce867ad7c21ba7e22ed  gdb/testsuite/gdb.arch/i386-byte.exp
 32e38c108e7fb4ad5fb7c601d49b6b9d  gdb/testsuite/gdb.arch/i386-cpuid.h
 9d5199a2dbe0f9ad0900f9be89b2c356  gdb/testsuite/gdb.arch/i386-disp-step.S
-7d839f3b58dd8381e2e33388f129c61b  gdb/testsuite/gdb.arch/i386-disp-step.exp
+8917b39bff0dcb2c02670e1f9e41797b  gdb/testsuite/gdb.arch/i386-disp-step.exp
 2f042a22721211b88cb3f8163ef443b2  gdb/testsuite/gdb.arch/i386-dr3-watch.c
 fbf7ae20d2a363391c1ee7afc48c8f5d  gdb/testsuite/gdb.arch/i386-dr3-watch.exp
 b95d7b6be926e11d4ca8c8ea6acea265  gdb/testsuite/gdb.arch/i386-gnu-cfi-asm.S
 485d22e26c193353f779212ada9c5451  gdb/testsuite/gdb.arch/i386-gnu-cfi.c
-2e9038d0b42f8f799714858e6e405274  gdb/testsuite/gdb.arch/i386-gnu-cfi.exp
+d6b6a96553b995e2c55eed7bdc8d2571  gdb/testsuite/gdb.arch/i386-gnu-cfi.exp
 478aed1d19441df16c30413e5a1e7736  gdb/testsuite/gdb.arch/i386-permbkpt.S
-2ea5856b1a30e1604dd60ed8fc089896  gdb/testsuite/gdb.arch/i386-permbkpt.exp
+23b670993ef3493226b8f2dce013ac00  gdb/testsuite/gdb.arch/i386-permbkpt.exp
 cb3d8a21c15d5fef2866f88613338bc4  gdb/testsuite/gdb.arch/i386-prologue.c
-8915e4bbd0b41848d7ceecff729947ee  gdb/testsuite/gdb.arch/i386-prologue.exp
+cf210d39c89a004baee132865a996a14  gdb/testsuite/gdb.arch/i386-prologue.exp
 1978164acdbe7219364eee24ca3d097d  gdb/testsuite/gdb.arch/i386-pseudo.c
 ead4e13b3e180bdb22c7d8f6c904881b  gdb/testsuite/gdb.arch/i386-signal.c
 41410d6b6a1c0ff4fefdcc591f2c8980  gdb/testsuite/gdb.arch/i386-signal.exp
 0e67b31bf115dda8e434a05162c9286d  gdb/testsuite/gdb.arch/i386-size-overlap.c
-7faff75a121565019772512097724c6b  gdb/testsuite/gdb.arch/i386-size-overlap.exp
+a030594ef0e8c64f7c27eac55bf09a02  gdb/testsuite/gdb.arch/i386-size-overlap.exp
 e33dcf746c40e3601e5cb42f2779a7f7  gdb/testsuite/gdb.arch/i386-size.c
-e4072669c22ecc03bd256f3f11d9c278  gdb/testsuite/gdb.arch/i386-size.exp
+d76be79940dbf5e6ab2e9fe1c039c171  gdb/testsuite/gdb.arch/i386-size.exp
+a15f11b39456038ec0b240058319dec6  gdb/testsuite/gdb.arch/i386-sse-stack-align.S
+8367fb36f3ee32d4e325f6896123a6c7  gdb/testsuite/gdb.arch/i386-sse-stack-align.c
+0e548ed7fbe14f49ab768b60f746b8e2  gdb/testsuite/gdb.arch/i386-sse-stack-align.exp
 fa7b3eed215f0c1c43997c244045d35a  gdb/testsuite/gdb.arch/i386-sse.c
-26ed4e7cfe6fbfbb42949ec010e567b9  gdb/testsuite/gdb.arch/i386-sse.exp
+b1dd09d2725c2594a3398d7082f93396  gdb/testsuite/gdb.arch/i386-sse.exp
 e5625d889ec3bf61b9b3ab82052bc32c  gdb/testsuite/gdb.arch/i386-unwind.c
-af1a79a3f6334cc7c05f2676b9abe195  gdb/testsuite/gdb.arch/i386-unwind.exp
-420f44a1d01e96084608aff5a95e88ec  gdb/testsuite/gdb.arch/i386-word.exp
+6e8d24d9c6cbafcbeb803bdf68ecc04c  gdb/testsuite/gdb.arch/i386-unwind.exp
+fa6e5f150c7bbc404f5be5d5cdb23d48  gdb/testsuite/gdb.arch/i386-word.exp
 c16c934630b87eb48d5515a4e55c98d8  gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.S
 7a98894854ba402b0afbcff00a3f018d  gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.exp
 96cd6aa2180bfe740a4d95f4208ae558  gdb/testsuite/gdb.arch/iwmmxt-regs.c
 b2d6b0237900a3b46e4183ad160300e7  gdb/testsuite/gdb.arch/iwmmxt-regs.exp
-39a54bddd9a53a1f36ddd10169370be5  gdb/testsuite/gdb.arch/pa-nullify.exp
+f38bc107c4bcee76d5f13d53d809e68b  gdb/testsuite/gdb.arch/mips16-thunks-inmain.c
+a961e255f30897718e1eef90f59155f2  gdb/testsuite/gdb.arch/mips16-thunks-main.c
+b7b1c497ca392b1b911c3ee3e2acab80  gdb/testsuite/gdb.arch/mips16-thunks-sin.c
+d3804a7cedd7739ba5a88353317e3e9d  gdb/testsuite/gdb.arch/mips16-thunks-sinfrob.c
+9102f5beff6b62127cbc2d9ce0245c93  gdb/testsuite/gdb.arch/mips16-thunks-sinfrob16.c
+308c4be2dbffd0d774ccfa751a21dbb9  gdb/testsuite/gdb.arch/mips16-thunks-sinmain.c
+29c402db100610237120fc374f6630cb  gdb/testsuite/gdb.arch/mips16-thunks-sinmips16.c
+041bbe1b9b13000f58f0b4f8fdb18d7f  gdb/testsuite/gdb.arch/mips16-thunks.exp
+56b7b43ee346f10924e0f842126ff363  gdb/testsuite/gdb.arch/pa-nullify.exp
 7e15fe36f59b8e04c5fb0265a6950c3e  gdb/testsuite/gdb.arch/pa-nullify.s
 5fb2eaef8fa3678d2f93e1b0c7c65be6  gdb/testsuite/gdb.arch/pa64-nullify.s
 3ccb99c51a2f230392b0153ceac7d8f2  gdb/testsuite/gdb.arch/powerpc-aix-prologue.c
-193a7afd7390bec15b25e4a1e6fff9d4  gdb/testsuite/gdb.arch/powerpc-aix-prologue.exp
+58ade46502897eac3f1de25f29ffabac  gdb/testsuite/gdb.arch/powerpc-aix-prologue.exp
 8c7bcb3a296c0e0e384648d3e3f51529  gdb/testsuite/gdb.arch/powerpc-d128-regs.c
-f82f4a0be54a1217c4da9a945ce3ca43  gdb/testsuite/gdb.arch/powerpc-d128-regs.exp
+bd43bef0172fc0586d410976077edef0  gdb/testsuite/gdb.arch/powerpc-d128-regs.exp
 6e19aa881f24e0a6d6c9ca745f998838  gdb/testsuite/gdb.arch/powerpc-prologue.c
 1bc6c4cd4fd3fa63ed6a699be6220647  gdb/testsuite/gdb.arch/powerpc-prologue.exp
 14b001c176a2d629bcb4d42ea3f396d9  gdb/testsuite/gdb.arch/ppc-dfp.c
-509af56ba9e9ed2976dc25f647dca77a  gdb/testsuite/gdb.arch/ppc-dfp.exp
+99d5a4b7631d10e17df312e495e6203c  gdb/testsuite/gdb.arch/ppc-dfp.exp
 53881c5f5ebf28b1851fafa7ed03e330  gdb/testsuite/gdb.arch/ppc-fp.c
-e4f8790b02bf012d8eb23ebb878fe624  gdb/testsuite/gdb.arch/ppc-fp.exp
+3e7eb3b10f0eb496885a27a835659d59  gdb/testsuite/gdb.arch/ppc-fp.exp
 63987a6e2f5310090e237cdcc732cd43  gdb/testsuite/gdb.arch/ppc64-atomic-inst.c
-ebe97d373dd2677d1db01ba962441d33  gdb/testsuite/gdb.arch/ppc64-atomic-inst.exp
+f2cc8edc8ecfbc97df0ab6cd28d4cbe4  gdb/testsuite/gdb.arch/ppc64-atomic-inst.exp
 857447f0ecd3ee0a88d3a93d6ef612cd  gdb/testsuite/gdb.arch/spu-info.c
 853edf2fe396557f739e7de124ec2a69  gdb/testsuite/gdb.arch/spu-info.exp
 f9c4285894eb326eceb09e68abda02d7  gdb/testsuite/gdb.arch/spu-ls.c
 2360597526e594a0a2509fbb0720b745  gdb/testsuite/gdb.arch/spu-ls.exp
-dcbe22d6d3bb8806b491087f77c8d0a6  gdb/testsuite/gdb.arch/system-gcore.exp
+524fe85b307cce280f7cccc316d360fe  gdb/testsuite/gdb.arch/system-gcore.exp
 b9548f3e2f4c9467a9b0f7f0ff96412a  gdb/testsuite/gdb.arch/thumb-prologue.c
 98b5040621c31208df39af33a20b619b  gdb/testsuite/gdb.arch/thumb-prologue.exp
 1a3aeaff688df051c3f98d702be14404  gdb/testsuite/gdb.arch/thumb-singlestep.S
@@ -2315,11 +2511,11 @@ e8bbbbb19af7494dff5c405144a6a2f6  gdb/testsuite/gdb.arch/thumb-singlestep.exp
 46e6af0628ed6e3d7026149142dd56a5  gdb/testsuite/gdb.arch/thumb2-it.S
 2bf559b8ec3586cf94a50184a78ffffd  gdb/testsuite/gdb.arch/thumb2-it.exp
 3d59210243b5b8811b386cdba894b522  gdb/testsuite/gdb.arch/vsx-regs.c
-938b84e4462dfb8410e56300cd7f8f78  gdb/testsuite/gdb.arch/vsx-regs.exp
-77f7e2e2f672e8dc200c129cbfca6388  gdb/testsuite/gdb.asm/Makefile.in
+80ea2ee2cc9bdc79ca244243f1750526  gdb/testsuite/gdb.arch/vsx-regs.exp
+06d7f14849783aa0c642bd7c9d97b58a  gdb/testsuite/gdb.asm/Makefile.in
 577585273ffc0fef150e7e01df7cebf9  gdb/testsuite/gdb.asm/alpha.inc
 73f28b814430e5f1534678ff549c32cc  gdb/testsuite/gdb.asm/arm.inc
-7da787c9da64359bca9b9837d153f8ac  gdb/testsuite/gdb.asm/asm-source.exp
+657d83996f2fe388f392ca796222d452  gdb/testsuite/gdb.asm/asm-source.exp
 a2926e1ce9905735ba2445cfb94be156  gdb/testsuite/gdb.asm/asmsrc1.s
 08a59dcdce475e0de4d4e5cd882c3c0a  gdb/testsuite/gdb.asm/asmsrc2.s
 f1621bbbb2acbec5adef86d7d9549975  gdb/testsuite/gdb.asm/bfin.inc
@@ -2344,519 +2540,562 @@ b793e4384b8604633bef4c10233557c8  gdb/testsuite/gdb.asm/powerpc.inc
 7acbc0a93ecaf3183a8c43ccb7af5585  gdb/testsuite/gdb.asm/powerpc64.inc
 c2ab6abca2f2009bd9b4b7f2501e8f9a  gdb/testsuite/gdb.asm/s390.inc
 59ed9adaed6dc7b887446707cf6c2d5f  gdb/testsuite/gdb.asm/s390x.inc
-96af5da159a5e8f03a3468db854d05a3  gdb/testsuite/gdb.asm/sh.inc
+cd196557c0510f072d40271da10c33a6  gdb/testsuite/gdb.asm/sh.inc
 004e3184dcbd00cdedc9969b1a860626  gdb/testsuite/gdb.asm/sparc.inc
 bef01819157e0cca7af4ba8058f5eaab  gdb/testsuite/gdb.asm/sparc64.inc
 fec2ca2fbcc0b02d6f21dcf2d73970b3  gdb/testsuite/gdb.asm/spu.inc
 e3c5be9e840a34c66a75b0204fe24a05  gdb/testsuite/gdb.asm/v850.inc
 7d06fead332c40b8b2b7b7e2e0cda153  gdb/testsuite/gdb.asm/x86_64.inc
 6c5e7f66709dbbc4e4fbbdec9be6297f  gdb/testsuite/gdb.asm/xstormy16.inc
-c9102bc4b41d8544a811cd0d71acf7d9  gdb/testsuite/gdb.base/Makefile.in
-543816ea7a6d022ce7a7e9b07954d1ed  gdb/testsuite/gdb.base/a2-run.exp
+be03ca4575a7809c7220f1d241134d8f  gdb/testsuite/gdb.base/Makefile.in
+351d89762d1680edea63566f614c175e  gdb/testsuite/gdb.base/a2-run.exp
 006e8779c9e23af3419a58591b7eab7e  gdb/testsuite/gdb.base/advance.c
-c1333caf31b1cf3552551ba660d43a65  gdb/testsuite/gdb.base/advance.exp
+4640707005b629264c058689ad2eb417  gdb/testsuite/gdb.base/advance.exp
 6c08664267ecac80f9b6eda5b4aeb6c7  gdb/testsuite/gdb.base/alias.exp
-e4c43d0e6da67c199962ced401fc3b28  gdb/testsuite/gdb.base/all-bin.exp
-7a6a57ab31ce1cf79d80fe6b690ba253  gdb/testsuite/gdb.base/all-types.c
-f76f09cd7572a5024b5ec2307f4f7a9b  gdb/testsuite/gdb.base/annota1.c
-dd1dfa517e06478111b9cf904c1aafe5  gdb/testsuite/gdb.base/annota1.exp
-f76f09cd7572a5024b5ec2307f4f7a9b  gdb/testsuite/gdb.base/annota3.c
-f21c6da50f5e44087b1bc8167edbacc1  gdb/testsuite/gdb.base/annota3.exp
+3389bcf61a83c7273b554c1a152afdd2  gdb/testsuite/gdb.base/all-bin.exp
+e33f3eea7d6105e0265ef823ed34ffc7  gdb/testsuite/gdb.base/all-types.c
+55143311aaa933db91b23d2b9900c9e7  gdb/testsuite/gdb.base/annota1.c
+906e8878ce273462c85b7a7330a215fb  gdb/testsuite/gdb.base/annota1.exp
+55143311aaa933db91b23d2b9900c9e7  gdb/testsuite/gdb.base/annota3.c
+89eab71b58d32932b653e421814705e5  gdb/testsuite/gdb.base/annota3.exp
 419ed3ef1cdc35f550df83f7dcc77f2f  gdb/testsuite/gdb.base/anon.c
 fd732dccce9e69feac6eaa9837cb4564  gdb/testsuite/gdb.base/anon.exp
 246912b4a24edf28c2896b2b0581372b  gdb/testsuite/gdb.base/args.c
-010b939e531ec44b42e7e56982ee247e  gdb/testsuite/gdb.base/args.exp
-94b1069783a532b300344718cda0cb9e  gdb/testsuite/gdb.base/arithmet.exp
+47d994254bff9ff83c7db8d12ea0fc0f  gdb/testsuite/gdb.base/args.exp
+471beb588b6242216e149a7138c1e55f  gdb/testsuite/gdb.base/arithmet.exp
 fa40271a4667735a776cba73829b929d  gdb/testsuite/gdb.base/arrayidx.c
-a083ae8e96a129c5cd0cb3dab0bd0043  gdb/testsuite/gdb.base/arrayidx.exp
-c612089c0fdb76ba8e1bc8f215db2a55  gdb/testsuite/gdb.base/assign.exp
+222d414b6ae4605505ca9f316c7dfc92  gdb/testsuite/gdb.base/arrayidx.exp
+bdb529f45bff17df4e030b95e6f48493  gdb/testsuite/gdb.base/assign.exp
 e947158db4855666b3b1d9cb88c62e0a  gdb/testsuite/gdb.base/async-shell.c
-c1cfc1796f9cd67a59febe32e22c36ab  gdb/testsuite/gdb.base/async-shell.exp
+fe0bba57fd83dd80e34d16f21b8117a2  gdb/testsuite/gdb.base/async-shell.exp
 7c164cbba3852ca6d8407f5461733f76  gdb/testsuite/gdb.base/async.c
-9ab6cf71063f14616a319249619538e3  gdb/testsuite/gdb.base/async.exp
+36a088098d69c30d53f55f1130b06664  gdb/testsuite/gdb.base/async.exp
 ff024552de6c7889f8a6eac05cbc19f6  gdb/testsuite/gdb.base/attach-pie-misread.c
-5bf018558dfd83d7958e176e087798d9  gdb/testsuite/gdb.base/attach-pie-misread.exp
+c4efb57d245b281c2bb11619f5775da8  gdb/testsuite/gdb.base/attach-pie-misread.exp
 da06c306a987ad3fe44ab46da27a1925  gdb/testsuite/gdb.base/attach-pie-noexec.c
 ca9af91e919a578eb06d52cd5ffae14e  gdb/testsuite/gdb.base/attach-pie-noexec.exp
+4a5cc9886d8fff32eede0692d4e63939  gdb/testsuite/gdb.base/attach-twice.c
+8a8f7d1d123f49938d3a878eae77c146  gdb/testsuite/gdb.base/attach-twice.exp
 67f370c8661ab05209185c9be1b1266f  gdb/testsuite/gdb.base/attach.c
-8bcfd7c0b899ee6e86aafc1df493d1bd  gdb/testsuite/gdb.base/attach.exp
+0083319a83a462ff013577508be59aba  gdb/testsuite/gdb.base/attach.exp
 40ea0b637bee041d22c72ad5ce356d17  gdb/testsuite/gdb.base/attach2.c
-9aed51149f1280093031d51c4fb328a3  gdb/testsuite/gdb.base/auxv.c
-f6778831d4cb104d2b8381bf6b908186  gdb/testsuite/gdb.base/auxv.exp
+35cdb61b00281b6f8f2a1daf4472c864  gdb/testsuite/gdb.base/auxv.c
+02a297540578db7489f63b1527d4337a  gdb/testsuite/gdb.base/auxv.exp
 d8f766041b8c03338b5833d6c37c5008  gdb/testsuite/gdb.base/average.c
-9032252c4467d3d936f9579890567d22  gdb/testsuite/gdb.base/bang.exp
+9cb04f2f519b6ee5b7bfc5286a7aeb46  gdb/testsuite/gdb.base/bang.exp
 94c1f1818c9234b5e8e7669b457865c1  gdb/testsuite/gdb.base/bar.c
 875a150f7fd4db096ea08b9acd105dae  gdb/testsuite/gdb.base/baz.c
 3879571cb6a93d710a0cc7268b447c22  gdb/testsuite/gdb.base/bfp-test.c
-0b0b0697262275e906a4cf21fd66626b  gdb/testsuite/gdb.base/bfp-test.exp
+1ec0e578d1c2dc7d4da1ffdd04e61aaf  gdb/testsuite/gdb.base/bfp-test.exp
 4c469eb361b3a8f6a6d3356e4aea39fc  gdb/testsuite/gdb.base/bigcore.c
-cd2bc0e7d520fa9a86b550888f652115  gdb/testsuite/gdb.base/bigcore.exp
-bca820c7a21dcab9297c44adde8b507f  gdb/testsuite/gdb.base/bitfields.c
-1a13ad51c91b5f1585dd3c9fc0972e92  gdb/testsuite/gdb.base/bitfields.exp
-b8c369bd4563ac0d10948d5771de0aeb  gdb/testsuite/gdb.base/bitfields2.c
-9260fe3e1e0e26af08753758ce7e6eb5  gdb/testsuite/gdb.base/bitfields2.exp
-588ef9ee0e204c20737f9429d0164ffe  gdb/testsuite/gdb.base/bitops.exp
+d9e6e364355ce7da3a0922efde71f345  gdb/testsuite/gdb.base/bigcore.exp
+6c8d01d49d4bdeb834a7e1eb6e6bbba2  gdb/testsuite/gdb.base/bitfields.c
+5c7753341d127388356483ef68137a87  gdb/testsuite/gdb.base/bitfields.exp
+1bbd5bc32f4f8b1fd1713f542eda08f2  gdb/testsuite/gdb.base/bitfields2.c
+7f36aa7090e04433478b0b05346b7d2d  gdb/testsuite/gdb.base/bitfields2.exp
+59c4ae710ec1775451db7c0f2509fd49  gdb/testsuite/gdb.base/bitops.exp
 601f4ed2b5be1d234ba175e76d7bba62  gdb/testsuite/gdb.base/branches.c
 6320d4bccc706a34d91bae0f608235bb  gdb/testsuite/gdb.base/break-always.c
 ea6bfbc2d0c2c5a0c94e8aa69f3ff24e  gdb/testsuite/gdb.base/break-always.exp
 515140ba7906eb8e972298a8e88e4d36  gdb/testsuite/gdb.base/break-entry.exp
+4d2ac7fd3411c47370e5773e54563631  gdb/testsuite/gdb.base/break-inline.c
+5c5704d613b7132b18b5ef5a31d37330  gdb/testsuite/gdb.base/break-inline.exp
 34245014538b7ffd5b8f337eb6085b25  gdb/testsuite/gdb.base/break-interp-lib.c
 4b4a942fb7cb84103920704f18629fad  gdb/testsuite/gdb.base/break-interp-main.c
-01cdae68c60bc509746bf32782a6b3d2  gdb/testsuite/gdb.base/break-interp.exp
+6e3b03b8036e1ad03581b157798ead53  gdb/testsuite/gdb.base/break-interp.exp
 c7bc6bb6d9f59f7bf6469e0c2ae87a32  gdb/testsuite/gdb.base/break-on-linker-gcd-function.cc
-34f07213d6c78637b6bb12bfae877b00  gdb/testsuite/gdb.base/break-on-linker-gcd-function.exp
-8c3b1e7a90fc45a85d412b1461d735b2  gdb/testsuite/gdb.base/break.c
-1d1112d792576afeac2d126c8ad349a2  gdb/testsuite/gdb.base/break.exp
+4b65b630a06a3e0b12f7348523cd227a  gdb/testsuite/gdb.base/break-on-linker-gcd-function.exp
+4df49b4ad9e9b25e6f2059de4b5e8f7b  gdb/testsuite/gdb.base/break.c
+759f3118c15ac5502fcc08f235ad2ee5  gdb/testsuite/gdb.base/break.exp
 2a746a7d59eaa10dbb8cd713618e16b6  gdb/testsuite/gdb.base/break1.c
 6f74642c04977774b9dfe16b758a95d6  gdb/testsuite/gdb.base/breakpoint-shadow.c
 4b16ec05c46f219df157357e84a6149e  gdb/testsuite/gdb.base/breakpoint-shadow.exp
 00423b6818e5837317fd66f9609d152b  gdb/testsuite/gdb.base/call-ar-st.c
-d840d1ccc4b8101075ae7d443561b612  gdb/testsuite/gdb.base/call-ar-st.exp
+62a7e745819f2023068c78c31f321012  gdb/testsuite/gdb.base/call-ar-st.exp
 868c4632e7860280ad3ddd0c7713c819  gdb/testsuite/gdb.base/call-rt-st.c
-a2fbf6281c4666943907f3b8a5343ec9  gdb/testsuite/gdb.base/call-rt-st.exp
-11354ebc5a481455ab22e58e8c6a08dc  gdb/testsuite/gdb.base/call-sc.c
-18bfb41d310986e153a0fff9b3255cae  gdb/testsuite/gdb.base/call-sc.exp
-ffe9575f36672c85cfa85a55bab55d12  gdb/testsuite/gdb.base/call-signal-resume.exp
-30479ace3f6e56d07b2bf24f64847619  gdb/testsuite/gdb.base/call-signals.c
+7cd09d1f85474584bbd7c76cda714110  gdb/testsuite/gdb.base/call-rt-st.exp
+3e4e1041fa1e5d735421ac242d1b42db  gdb/testsuite/gdb.base/call-sc.c
+2e5c31c5ded2d051240589fced451154  gdb/testsuite/gdb.base/call-sc.exp
+87a85dd15023b6ecfd41008fc56dcf03  gdb/testsuite/gdb.base/call-signal-resume.exp
+7aac0f7c3bfee1e6d276086aa8bef344  gdb/testsuite/gdb.base/call-signals.c
 0903784a2f2f16faef989543e584e31e  gdb/testsuite/gdb.base/call-strs.c
-08cb552d2f46184e789102628376e03b  gdb/testsuite/gdb.base/call-strs.exp
+69bd74049ac610506fb2f86be8428786  gdb/testsuite/gdb.base/call-strs.exp
 654e78db9cf7970e61d08dfa245bd90a  gdb/testsuite/gdb.base/callexit.c
-756fb9bb5bab4e8467d9c93aeb940130  gdb/testsuite/gdb.base/callexit.exp
-23d5e189bc322afc04c35ad4f07c159d  gdb/testsuite/gdb.base/callfuncs.c
-05c34e90994cb911f54fb4389db49a43  gdb/testsuite/gdb.base/callfuncs.exp
+71b12e95f9af5a779d20857f5c026af1  gdb/testsuite/gdb.base/callexit.exp
+53759ffc6cfe997686d21c94769d695c  gdb/testsuite/gdb.base/callfuncs.c
+ef016128e05b6ab7234a60512cc19a12  gdb/testsuite/gdb.base/callfuncs.exp
+7cee012c0d273b8f861811d3a4b9dedb  gdb/testsuite/gdb.base/catch-load-so.c
+8cf8aa371effc6be6bd21695898fefe7  gdb/testsuite/gdb.base/catch-load.c
+06de583e41d1faddd4cd9ebb3f6045b0  gdb/testsuite/gdb.base/catch-load.exp
 8fa2933c773e2b3abb9dc9f230dafd4c  gdb/testsuite/gdb.base/catch-syscall.c
-a7b7d8c8d3e8b5886df1f3cc8cc54f89  gdb/testsuite/gdb.base/catch-syscall.exp
+9486a196d5215d909cd487856731fb0a  gdb/testsuite/gdb.base/catch-syscall.exp
 ab7ac3c2c4e6484540cfc821cf5f781c  gdb/testsuite/gdb.base/charset-malloc.c
-bc969717d3c3a4017d56b0f284aa4540  gdb/testsuite/gdb.base/charset.c
-e7cfc45bcbad39148156056f4344a612  gdb/testsuite/gdb.base/charset.exp
+bb89990ed57d8ccdd0d764a766d82b3f  gdb/testsuite/gdb.base/charset.c
+dd2821f4b049dc2853b5ffc345282f31  gdb/testsuite/gdb.base/charset.exp
 159f8688a8a23c85018277ca3e9b27d9  gdb/testsuite/gdb.base/checkpoint.c
-fef8abb2c3e22469d865739a4ad65e20  gdb/testsuite/gdb.base/checkpoint.exp
+202d0714769ea8e135bcef410230f0b3  gdb/testsuite/gdb.base/checkpoint.exp
 91a9797c36773f25d2961a2478d37c89  gdb/testsuite/gdb.base/chng-syms.c
-f78274943117fbd1293ffdcd332902e0  gdb/testsuite/gdb.base/chng-syms.exp
-16677ba524c30d13eb54f3f7f9655342  gdb/testsuite/gdb.base/code-expr.exp
-0a2a18820f6daefba298784d8900ac42  gdb/testsuite/gdb.base/code_elim.exp
+04a6e2257a12ffca1c776276460e9531  gdb/testsuite/gdb.base/chng-syms.exp
+af564f7e74cadff2afe2e645ca08ceaf  gdb/testsuite/gdb.base/code-expr.exp
+cf0f85b2333e5e687ed1bd17b262e9b7  gdb/testsuite/gdb.base/code_elim.exp
 e3b3780b346c7d76ae708a6910860da1  gdb/testsuite/gdb.base/code_elim1.c
 9fc76fd6d4a96c7c51068bc704850756  gdb/testsuite/gdb.base/code_elim2.c
-aedf69512d0b95123faa51b9357693b5  gdb/testsuite/gdb.base/commands.exp
-5ad43d9ae38e01392204ffd3c6b97ddf  gdb/testsuite/gdb.base/completion.exp
+4c5a1be56f73d901079b0d5de9c18433  gdb/testsuite/gdb.base/commands.exp
+15d708f28b5f1724e8ddbdc6b704f80c  gdb/testsuite/gdb.base/completion.exp
 0a1b1d1b87c8146787d7898b3afda94a  gdb/testsuite/gdb.base/complex.c
-4e1132804af130827466be0433ba2f7a  gdb/testsuite/gdb.base/complex.exp
-7215c4438cbe43bc8b2f6ab20a231920  gdb/testsuite/gdb.base/cond-expr.exp
-6cf89bb618c4d9b914a8c3ecda262bd0  gdb/testsuite/gdb.base/condbreak.exp
-0a38768b03d77eda97cc0c83af11699d  gdb/testsuite/gdb.base/consecutive.c
-532ad5cc849c440465dfe92e1116c890  gdb/testsuite/gdb.base/consecutive.exp
-b23efa9006e3f005fc619bcf17fc1b4d  gdb/testsuite/gdb.base/constvars.c
-a1ef0e695cee360c8b54b41fd479d756  gdb/testsuite/gdb.base/constvars.exp
-6f59c8fbe3ba0afe069b073fa7edd932  gdb/testsuite/gdb.base/corefile.exp
+f80ef1263bfcda042b465df628a9b6fa  gdb/testsuite/gdb.base/complex.exp
+cd939fd99c76ec2f6860656be1aa7ebd  gdb/testsuite/gdb.base/cond-eval-mode.exp
+e8fead22a171d91c5c0b8c485a97b236  gdb/testsuite/gdb.base/cond-expr.exp
+beb94f85799a1df1d5db7a9e57ff5046  gdb/testsuite/gdb.base/condbreak.exp
+e132a0bda6a789c75e20e8d4eb4ebc02  gdb/testsuite/gdb.base/consecutive.c
+4dfcde7b6568d8a175188d484ab468fc  gdb/testsuite/gdb.base/consecutive.exp
+cdf93bd6213c776f5efcc0ac4a82cd3d  gdb/testsuite/gdb.base/constvars.c
+e81ff2cbf9e078f2c073ef88c8173273  gdb/testsuite/gdb.base/constvars.exp
+90dc36b5a66d8b905ba7e5bdaa9d47c0  gdb/testsuite/gdb.base/corefile.exp
 86a2d9ceefc159099c651b11aaf2e80c  gdb/testsuite/gdb.base/coremaker.c
 d5cf6abad8bdf4be55964f06dce04e3a  gdb/testsuite/gdb.base/coremaker2.c
+094443b7e63a0ccad6661a4e0829d1be  gdb/testsuite/gdb.base/ctxobj-f.c
+b898e1eb49a1baa64c18bf330e866d8c  gdb/testsuite/gdb.base/ctxobj-m.c
+2bd6baf4c0fdd20f309c1fd55a4dc0ff  gdb/testsuite/gdb.base/ctxobj-v.c
+19e680945eff29640be4203184867643  gdb/testsuite/gdb.base/ctxobj.exp
 2c99cf148e6178107e6436524c57ae35  gdb/testsuite/gdb.base/cursal.c
-ebcecc48c0767d9f38dba130589a901b  gdb/testsuite/gdb.base/cursal.exp
+3a849a5dfb2b93d032c28418e759c10b  gdb/testsuite/gdb.base/cursal.exp
 d60d5b0be23b6fa393aac8b4b25c6f3b  gdb/testsuite/gdb.base/cvexpr.c
-37093e27f6afd3bacada99834f229389  gdb/testsuite/gdb.base/cvexpr.exp
+7b089358a6de612bdc2e19fe21faa886  gdb/testsuite/gdb.base/cvexpr.exp
 c8b29ef2ecb662f50ea8aa7966c163f8  gdb/testsuite/gdb.base/d10v.ld
 35ce0d1e8a6cc6a278649ec7464d8a1c  gdb/testsuite/gdb.base/d10vovly.c
-7917e2e1555bf6ff96464496f21827a5  gdb/testsuite/gdb.base/dbx.exp
-f8f81a45e42b93508de2167a28a7b0b8  gdb/testsuite/gdb.base/default.exp
-6bb4849378791b2c4cdb2f61f7027538  gdb/testsuite/gdb.base/define.exp
+3638c76f954e2413ecb8b54aa99c8a8a  gdb/testsuite/gdb.base/dbx.exp
+d2c8e89450220e9f1fac5ee808622d9f  gdb/testsuite/gdb.base/default.exp
+4d5298e9516a1b038f1e7f2aab52deb3  gdb/testsuite/gdb.base/define.exp
 75bf2cc4c9bfcac03aff1e22c6175d5a  gdb/testsuite/gdb.base/del.c
-4bac9a418bad5c19d83218df68446753  gdb/testsuite/gdb.base/del.exp
-d8eb6dcbf5351d889a56b3ed167f7df4  gdb/testsuite/gdb.base/detach.exp
-955f11c9be97bf3ccb069fd2417eb0b2  gdb/testsuite/gdb.base/dfp-exprs.exp
+1a73b9a950c6f29806bfd130c5d36853  gdb/testsuite/gdb.base/del.exp
+40b9ee642fcdb93c5d349f1d0057ffb7  gdb/testsuite/gdb.base/detach.exp
+409af5605e975566acbad4656cab050a  gdb/testsuite/gdb.base/dfp-exprs.exp
 380e60c2fd4a162589b1824704075a51  gdb/testsuite/gdb.base/dfp-test.c
-81ae00a5697af22e29272da9eeb12a09  gdb/testsuite/gdb.base/dfp-test.exp
+d85e0f6d3851b5ec5eba60f2dc5724e0  gdb/testsuite/gdb.base/dfp-test.exp
 f34558880b3ee23ee122957e3bc797de  gdb/testsuite/gdb.base/disasm-end-cu-1.c
 2c26e6d28c98f7f16e2b21f127f44c53  gdb/testsuite/gdb.base/disasm-end-cu-2.c
 c6767ab151838835bd523fd4aa6e5f30  gdb/testsuite/gdb.base/disasm-end-cu.exp
 ae68b23be9e17b37db2c4f8d5d695bf7  gdb/testsuite/gdb.base/disp-step-fork.c
-9185345129663a440b6ef1ae7968d34f  gdb/testsuite/gdb.base/disp-step-syscall.exp
+becaa2e1c681ccec5e1c90300622713f  gdb/testsuite/gdb.base/disp-step-syscall.exp
 37be06c4a3c11fdd57f48e179db01b01  gdb/testsuite/gdb.base/disp-step-vfork.c
 a706fe8d6ecb51bd2a3d33a879414445  gdb/testsuite/gdb.base/display.c
-2333e2fc56a40a7e823557583e39e542  gdb/testsuite/gdb.base/display.exp
+365673b6693e2600004d25f7017cf39b  gdb/testsuite/gdb.base/display.exp
 71efa9db7d313b25892ef27410a3647b  gdb/testsuite/gdb.base/dmsym.c
 1eda16466ea19ab84e7b47975601ec2a  gdb/testsuite/gdb.base/dmsym.exp
 47062529abdaa1a71c7f46c0e0eb31fb  gdb/testsuite/gdb.base/dmsym_main.c
+bfbf8d063276b5f758d1a8d5d69bd8fa  gdb/testsuite/gdb.base/dprintf.c
+ac045e4081b9abad72c92a989ff9164c  gdb/testsuite/gdb.base/dprintf.exp
 ca9ff510856000f9ee111095ef00f913  gdb/testsuite/gdb.base/dump.c
-0f5708be22f0102798bcfd6e4cdd0fe0  gdb/testsuite/gdb.base/dump.exp
+d3b1fec9db741e67c9dec864586bbfe1  gdb/testsuite/gdb.base/dump.exp
 869cf2c6e5a2cae216758f4a222ce73e  gdb/testsuite/gdb.base/dup-sect.S
 b0c1e9de748f9898861e899d39a125a4  gdb/testsuite/gdb.base/dup-sect.exp
-cae5d7ad7079d590c4798a55f73b0050  gdb/testsuite/gdb.base/echo.exp
-0e9378ff1698264fe395b0ce0eef6c96  gdb/testsuite/gdb.base/ena-dis-br.exp
+9e14d7d7543f681f34fc7211b41abeea  gdb/testsuite/gdb.base/echo.exp
+0c3fde84d19b354009a2222d74af3f6f  gdb/testsuite/gdb.base/ena-dis-br.exp
 b9638337fbfa28806436681d540a2311  gdb/testsuite/gdb.base/ending-run.c
 e089b3db8f8f3b44d944df79c70057a9  gdb/testsuite/gdb.base/ending-run.exp
-b74bc01808fbc10b22245df7728e8ca9  gdb/testsuite/gdb.base/environ.exp
+21e4511ab5e88ec6584a8b83f6f677a8  gdb/testsuite/gdb.base/enum_cond.c
+da6e7eca57f76044fce87054455ace3f  gdb/testsuite/gdb.base/enum_cond.exp
+9d6574d0ed68f6da1c17aac86fa4ffcb  gdb/testsuite/gdb.base/enumval.c
+e08a36569bf44a7bfcb6c12ed727781c  gdb/testsuite/gdb.base/enumval.exp
+99f566ea18a4ba4b5efdc3a59ab6df2e  gdb/testsuite/gdb.base/environ.exp
 deb202a5c910c43767721891d4b006d4  gdb/testsuite/gdb.base/eu-strip-infcall.c
 fb4703cd61440af1f539992a834e936d  gdb/testsuite/gdb.base/eu-strip-infcall.exp
-6e79ecb8e1c60956132fb07fde4eb484  gdb/testsuite/gdb.base/eval-skip.exp
+3f290541604ea037f987da05121559a8  gdb/testsuite/gdb.base/eval-skip.exp
 0df8d1fdf0a2d667c55811e78167346e  gdb/testsuite/gdb.base/eval.exp
-4231a44ffd994bfeccc781963995f0ba  gdb/testsuite/gdb.base/exe-lock.exp
+366d74ecfef819377a7d22b114eaac67  gdb/testsuite/gdb.base/exe-lock.exp
 fe778e4ca9af81e067b376479c5f876d  gdb/testsuite/gdb.base/execd-prog.c
 798c54bd70dccd9b31f4c6e834444986  gdb/testsuite/gdb.base/expand-psymtabs.c
-34a524b74651b89a344cb8f1982d7f51  gdb/testsuite/gdb.base/expand-psymtabs.exp
-8d8f2091a0a3c20c9694d6d674e82f96  gdb/testsuite/gdb.base/exprs.c
-16de51941c83a864cd5316906c04084c  gdb/testsuite/gdb.base/exprs.exp
+eb35a6e5654f9acf49ad6c931a66f641  gdb/testsuite/gdb.base/expand-psymtabs.exp
+d4799bc6220685d4d599c7ec320f69ec  gdb/testsuite/gdb.base/exprs.c
+f84cf841b9a7be0600596c8c44b4188b  gdb/testsuite/gdb.base/exprs.exp
 4f898ad008a4fa3fb09a1bf3690e4404  gdb/testsuite/gdb.base/fileio.c
-332319922edb5c7c38beafd9aff0bfdf  gdb/testsuite/gdb.base/fileio.exp
+481c41f1e74eb70196f4814367ebd6d3  gdb/testsuite/gdb.base/fileio.exp
 3ae35969ab9a12aafc91f573c68e5267  gdb/testsuite/gdb.base/find.c
-31fe403431f00aed54af82f75b2dc150  gdb/testsuite/gdb.base/find.exp
-b7b64d469d800a0ab7736b77047a1270  gdb/testsuite/gdb.base/finish.exp
+712ec68d821df0078ed2a696cb2fe81e  gdb/testsuite/gdb.base/find.exp
+fe62476b90482dd701abe9aa6ccda105  gdb/testsuite/gdb.base/finish.exp
 f2e71528d74a2ec04a20093a8305f8eb  gdb/testsuite/gdb.base/fixsection.c
-1265b1c86f936992efa8112c60c92930  gdb/testsuite/gdb.base/fixsection.exp
+4c4de78cd5fe4e20fe17d75630175d9a  gdb/testsuite/gdb.base/fixsection.exp
 6a12cce54a177a6b40cddded00f1850d  gdb/testsuite/gdb.base/fixsectshr.c
 cbf87dcb97b8ed050d9029a8a3d96652  gdb/testsuite/gdb.base/float.c
-f20926009343a0ae96a061b38f57cb98  gdb/testsuite/gdb.base/float.exp
+dcd89c77856cc49e1f88b1d206f2f5c5  gdb/testsuite/gdb.base/float.exp
 5acfdd7a2dd0575778a59acf1e3e899e  gdb/testsuite/gdb.base/foll-exec.c
-facb42c27cc9160f0f5bf415918dbaa3  gdb/testsuite/gdb.base/foll-exec.exp
+6a61ca5857473de47dd8dbbdede70851  gdb/testsuite/gdb.base/foll-exec.exp
 8eaaaa3230a947983f16b0a48e57f810  gdb/testsuite/gdb.base/foll-fork.c
-e8c4ab234ed4406a116a45a2a0d4b486  gdb/testsuite/gdb.base/foll-fork.exp
+46b5867fbbcd05803ed8c6e1bcf7f7e2  gdb/testsuite/gdb.base/foll-fork.exp
 a7ea93bfb6e477f12e7a3c6404410b88  gdb/testsuite/gdb.base/foll-vfork.c
-5999c0b0d4f825ae82d29536b12e4bb1  gdb/testsuite/gdb.base/foll-vfork.exp
+2dc5c2c79a84b3042054cde789bbbb1f  gdb/testsuite/gdb.base/foll-vfork.exp
 c6a16edc9359f0384e9bb01cc216272c  gdb/testsuite/gdb.base/foo.c
 1acf4dca3be1249917c2c5e7914a6980  gdb/testsuite/gdb.base/fortran-sym-case.c
 e687e47136de8069e7636b6ee8423c73  gdb/testsuite/gdb.base/fortran-sym-case.exp
 0c481de9dbeff5914fa0261d7189dc43  gdb/testsuite/gdb.base/frame-args.c
-588c6ddec392d310cd81f2116bcc9f58  gdb/testsuite/gdb.base/frame-args.exp
-51055a2a75bb9f8021b1bff4c2287754  gdb/testsuite/gdb.base/freebpcmd.c
-7fa7155e025151c35adb48d68d0618d6  gdb/testsuite/gdb.base/freebpcmd.exp
+61c19e4cfbc597e1a54e6f45c3d85b4b  gdb/testsuite/gdb.base/frame-args.exp
+fd8e54b3cd89391ff0b39a65b3743427  gdb/testsuite/gdb.base/freebpcmd.c
+6d5ecdb8ce97ae0bbad326637116b295  gdb/testsuite/gdb.base/freebpcmd.exp
 63f38bed4e19be85bf34b2d9113caa43  gdb/testsuite/gdb.base/fullname.c
 75c02a5083ae8424d4e6530ff839e255  gdb/testsuite/gdb.base/fullname.exp
-e18b4275ac574f03bd0a7f431bb8f796  gdb/testsuite/gdb.base/funcargs.c
-e5b716246cdcfbc6e1f1672bc0a10f8d  gdb/testsuite/gdb.base/funcargs.exp
+f286113c42f8980f3f8df62641497345  gdb/testsuite/gdb.base/funcargs.c
+25dd3e940b7f381b4985683b64dff8cf  gdb/testsuite/gdb.base/ss.h
+6feaa0e857e606c66527204f3b8facb2  gdb/testsuite/gdb.base/funcargs.exp
 4c143c75a1eb7cef91c79779925f3768  gdb/testsuite/gdb.base/gcore-buffer-overflow.c
-6894773ae6d77b20e40508ba7befd222  gdb/testsuite/gdb.base/gcore-buffer-overflow.exp
+485540b2f4b4879e090cc3f18de6b4dd  gdb/testsuite/gdb.base/gcore-buffer-overflow.exp
 dc6e59a71b50c1537d922967b0601e1d  gdb/testsuite/gdb.base/gcore.c
-1ec7c7f336ae60372894556b5c300742  gdb/testsuite/gdb.base/gcore.exp
-090a55b025b46082d4f852c9ff82ab9a  gdb/testsuite/gdb.base/gdb1056.exp
+96066ac11178acfd8feaad49352b1438  gdb/testsuite/gdb.base/gcore.exp
+edeb7c9781b1a903a6f913c5eb76f6cd  gdb/testsuite/gdb.base/gdb1056.exp
 ef3a95a99b46ee088ed64acfeee572f3  gdb/testsuite/gdb.base/gdb1090.c
-ca1ef65cce689b934f719a01d00ce41b  gdb/testsuite/gdb.base/gdb1090.exp
+2ad21fb52e6484abf6a0fe7f530c85ab  gdb/testsuite/gdb.base/gdb1090.exp
 dd10b4189fc6a7bd29e20722eb6b3af7  gdb/testsuite/gdb.base/gdb11530.c
-959413f76557a2f10f1890a3bbe7fe13  gdb/testsuite/gdb.base/gdb11530.exp
+bf01c13000646d8f9ddf75e23a06b969  gdb/testsuite/gdb.base/gdb11530.exp
 6a63ddb22b7ce96c516badc0e4bfb6f8  gdb/testsuite/gdb.base/gdb11531.c
-d063f1efc0f6a3309a05c570947df7fe  gdb/testsuite/gdb.base/gdb11531.exp
+ac3cc40438f0daa95061a52f0e98ccff  gdb/testsuite/gdb.base/gdb11531.exp
 6ee0c773e66358b411183422ccabb6e5  gdb/testsuite/gdb.base/gdb1250.c
-8d4c936e42c5b32bd0fb2392f1cc5723  gdb/testsuite/gdb.base/gdb1250.exp
+171bbd1620ef1b422485155975a664af  gdb/testsuite/gdb.base/gdb1250.exp
 436a602657d2b46221aaef3df288babf  gdb/testsuite/gdb.base/gdb1555-main.c
 d154b7151a6f24857c7fed01fe6f034a  gdb/testsuite/gdb.base/gdb1555.c
-1eda97979a32ca53ba4a8fcfc1f4d197  gdb/testsuite/gdb.base/gdb1555.exp
+b9b1532cf1a1bd2eb022a129e7642c0e  gdb/testsuite/gdb.base/gdb1555.exp
 fded9ca3610855540829d6a63b2c97ee  gdb/testsuite/gdb.base/gdb1821.c
 0fe656779cd3d2416c15ae5e8709ec5f  gdb/testsuite/gdb.base/gdb1821.exp
-a2bfa5dea845c91374b0ca3348d5fe1c  gdb/testsuite/gdb.base/gdb_history
+fe5009ce8b19b723e7e6deb3c0ca9a0e  gdb/testsuite/gdb.base/gdb_history
 084a3eec82323dc74cf6a99464178220  gdb/testsuite/gdb.base/gdbindex-stabs-dwarf.c
 e031acca7d2e0313275db341c6a88d9b  gdb/testsuite/gdb.base/gdbindex-stabs.c
 d6bb9dd418be8e4ce1c6f5f8c6f4ffe4  gdb/testsuite/gdb.base/gdbindex-stabs.exp
 eda8ec786288ddac2a364b24f29a2298  gdb/testsuite/gdb.base/gdbvars.c
-cfd2aa6dd1f762dabbebb22d30c96d7f  gdb/testsuite/gdb.base/gdbvars.exp
+7fbfefaa7e6000bfb8d642c89b62431d  gdb/testsuite/gdb.base/gdbvars.exp
 4d678a66d62649d666dea6eacf44c39e  gdb/testsuite/gdb.base/gnu-ifunc-lib.c
 72f2ddf7f5dc78706ea1888fd3fcc43a  gdb/testsuite/gdb.base/gnu-ifunc.c
-f9acc5132bbc13b764ad20430e18d04f  gdb/testsuite/gdb.base/gnu-ifunc.exp
+5883a0b2024145d8f23c58cd77f783ca  gdb/testsuite/gdb.base/gnu-ifunc.exp
 148a2766da2f84db30d078fb5ae60f0d  gdb/testsuite/gdb.base/gnu_vector.c
-e38a76491637aa66c478c8a7d9e39519  gdb/testsuite/gdb.base/gnu_vector.exp
+bb523d8c176544f5628ff2bda15e0559  gdb/testsuite/gdb.base/gnu_vector.exp
 9cd4ef136dfbee149a4056477283fa41  gdb/testsuite/gdb.base/grbx.c
-ddfd07c05658eb96ab0e79fdb1a79e72  gdb/testsuite/gdb.base/hashline1.exp
-a60057d4136159b6ae775596118f10ce  gdb/testsuite/gdb.base/hashline2.exp
-13bef3cb05d1d53faec3454d938aeb69  gdb/testsuite/gdb.base/hashline3.exp
+89c4310d10bb0af90a64b745f8a99808  gdb/testsuite/gdb.base/hashline1.exp
+a7a318f2113f6f98fb5f970ac7fabafa  gdb/testsuite/gdb.base/hashline2.exp
+24d1d1e72a911251a0910a9045c9c3bb  gdb/testsuite/gdb.base/hashline3.exp
 3c8d165757e44afd768005ebf487e1bf  gdb/testsuite/gdb.base/hbreak.c
 936763fa0ed148382ff3a9b853b3abcd  gdb/testsuite/gdb.base/hbreak.exp
-774102d81ea423ea7e49e4dc1091af30  gdb/testsuite/gdb.base/help.exp
+d85cc393275c1383c8c4097c67b7fce1  gdb/testsuite/gdb.base/hbreak2.exp
+a8ce7a1ab4f4702bfa50bc8bc7e1b8b0  gdb/testsuite/gdb.base/help.exp
 af361c72a24eabab60664cb21343c0f2  gdb/testsuite/gdb.base/hook-stop-continue.c
 d98867206ee4a7adaaaee749d351678c  gdb/testsuite/gdb.base/hook-stop-continue.exp
 087c59e292d6b554453bd5b56d135ba3  gdb/testsuite/gdb.base/hook-stop-frame.c
 f9838a17324227f2ad87cb1124d7595d  gdb/testsuite/gdb.base/hook-stop-frame.exp
 1a35c6065c10f7f5e7d5fdc9d0136d67  gdb/testsuite/gdb.base/huge.c
-5eed83ea436e8ab48980ba418492cb45  gdb/testsuite/gdb.base/huge.exp
-34904bc8eb9b7cd40d94d5c43fc247e5  gdb/testsuite/gdb.base/ifelse.exp
+3f9e522d75cd30ea10a4f8082b8abf3f  gdb/testsuite/gdb.base/huge.exp
+3feccbdd0617d52bef8861001fd81f34  gdb/testsuite/gdb.base/ifelse.exp
 5afb548560db244e23d468668fda765e  gdb/testsuite/gdb.base/included.c
 acfb44f977016625883a0460888b34ec  gdb/testsuite/gdb.base/included.exp
 d04d92fbe171914178a044f5e82a6608  gdb/testsuite/gdb.base/included.h
+cc179d21822587d559cbc3cc142f6db1  gdb/testsuite/gdb.base/inferior-died.c
+253ad5320d366e816c8c7769774f9a1c  gdb/testsuite/gdb.base/inferior-died.exp
 f983804f83220dad77fd4e308eb7577a  gdb/testsuite/gdb.base/infnan.c
 f4896588057e4984bed97ad9995a7dc5  gdb/testsuite/gdb.base/infnan.exp
+e01f70660390c57210f5a1982a861edf  gdb/testsuite/gdb.base/info-fun-solib.c
+42034788637e55f08fafe69007acce26  gdb/testsuite/gdb.base/info-fun.c
+76ea6ca89e127a20539be3ef3e83d10b  gdb/testsuite/gdb.base/info-fun.exp
 8cec1d19e5934f4cb2f1ece7283a52d7  gdb/testsuite/gdb.base/info-macros.c
-7a413306f85f50383097a84ab780792d  gdb/testsuite/gdb.base/info-macros.exp
-01c8106035ed070c7676154b18bc9dcb  gdb/testsuite/gdb.base/info-proc.exp
-25ac3840721c27f887b767f2a28c912a  gdb/testsuite/gdb.base/info-target.exp
+9c22e56c5740065a24a03289d012b71b  gdb/testsuite/gdb.base/info-macros.exp
+807961a3f67f3b485b90a80672d7c8d8  gdb/testsuite/gdb.base/info-os.c
+aab9fadeab9e761fdcbc0c5e0eec3171  gdb/testsuite/gdb.base/info-os.exp
+faca14892b114957a8ebc47729535c99  gdb/testsuite/gdb.base/info-proc.exp
+dfb87ad42aa9008fda5d53df071079fd  gdb/testsuite/gdb.base/info-target.exp
 c12aeb5d4c10e4528c55788d83348f2c  gdb/testsuite/gdb.base/infoline.c
 3e23cba2f7fc5424b5c94324e4a27c64  gdb/testsuite/gdb.base/infoline.exp
-55bbb1088e1173143dd23818588c559c  gdb/testsuite/gdb.base/int-type.c
+3510a5962c44ec9aeffdf4accdf9a4cb  gdb/testsuite/gdb.base/int-type.c
 f6a5baa2ef45e0ac1452b52b4a028393  gdb/testsuite/gdb.base/interact.exp
 612acdfeffa1ec61d65c67ea065ea629  gdb/testsuite/gdb.base/interp.c
-5cc7598b2b10d0282bfa5a9b479ff902  gdb/testsuite/gdb.base/interp.exp
-ee6a14f70a7f01044e196327be17f752  gdb/testsuite/gdb.base/interrupt.c
-7f491eb225e803d7f9d2f1d360924123  gdb/testsuite/gdb.base/interrupt.exp
+26c51212d9f4b1950f7b93654ef34898  gdb/testsuite/gdb.base/interp.exp
+843b5e2cabe50fff9f3514fae3fac54d  gdb/testsuite/gdb.base/interrupt.c
+a0fda9be782471e55b45a218e17be2e0  gdb/testsuite/gdb.base/interrupt.exp
 af6f9e427bb3d09aa6033ec64aec8775  gdb/testsuite/gdb.base/jit-dlmain.c
 7d3e08186e9b98120a7a6a22b1c8bde1  gdb/testsuite/gdb.base/jit-main.c
-a0270f992e5d62a12c1281710a810dd5  gdb/testsuite/gdb.base/jit-so.exp
+b40539d04e57affb9b806cd323cb4cfd  gdb/testsuite/gdb.base/jit-simple.c
+a00eb46aacda60fd89dc2a70675038bc  gdb/testsuite/gdb.base/jit-simple.exp
+45bebc0154908614fcfc1c554ec8f5c6  gdb/testsuite/gdb.base/jit-so.exp
 1a434c8a1998c48445b10a58b5e7078f  gdb/testsuite/gdb.base/jit-solib.c
-5a761884802525185f21b94eb1a2ce7e  gdb/testsuite/gdb.base/jit.exp
+c36c544881d347c18d1062aa236a508f  gdb/testsuite/gdb.base/jit.exp
 5fefadea13c06424265ee8e5dbf68dd6  gdb/testsuite/gdb.base/jump.c
-f4685129c1ccd7aac3d05aed94713f77  gdb/testsuite/gdb.base/jump.exp
+ac0cc239ddea20a089d51e96c797f160  gdb/testsuite/gdb.base/jump.exp
 91c77337d1b4b4663a9f6c35914fc6df  gdb/testsuite/gdb.base/kill-after-signal.c
 d0deba15551ea967bd7fc2afb6754dc0  gdb/testsuite/gdb.base/kill-after-signal.exp
 1dcd2966c2dab693aba14abdc8842d59  gdb/testsuite/gdb.base/label.c
-3027ea0491fc9f4ca7a01d6a0c27aaf7  gdb/testsuite/gdb.base/label.exp
-f544983403e6ce3b8016878f2ba4e325  gdb/testsuite/gdb.base/langs.exp
-a7fcf828c54dbdc1100d525500c41a4c  gdb/testsuite/gdb.base/langs0.c
+275c60218f0ce894ebe4e7a0b0d42715  gdb/testsuite/gdb.base/label.exp
+2537947214acb82fe1fe729a447a5068  gdb/testsuite/gdb.base/langs.exp
+3a5c4bcb117ee068b630f462629f324b  gdb/testsuite/gdb.base/langs0.c
 2d0b8bc2c2b4eb4f8a28b7cb39ce5dca  gdb/testsuite/gdb.base/langs1.c
 e81358e63a7a264c2fe6f962dd730579  gdb/testsuite/gdb.base/langs1.f
 c62aebd49fcf2ece63ec68610c644c0e  gdb/testsuite/gdb.base/langs2.c
 c90e022fb5ef3df8a5639df233f9c350  gdb/testsuite/gdb.base/langs2.cxx
 78e5943d56b5a904e2e29e51749312ed  gdb/testsuite/gdb.base/lineinc.c
-06b4c0123a430ceda0afde0bd7ea0fb9  gdb/testsuite/gdb.base/lineinc.exp
+21e8b3b390ed24e8f0f3de0d66e6c62d  gdb/testsuite/gdb.base/lineinc.exp
 0b4e499f872cfeaab21e0b173c718ca9  gdb/testsuite/gdb.base/lineinc1.h
 f6a96ae4d88de9220856194dacc8c9c8  gdb/testsuite/gdb.base/lineinc2.h
 80fb742c6028f138e4ad580d729b403a  gdb/testsuite/gdb.base/lineinc3.h
 e212b182dfb5b7050de139e14b0551e5  gdb/testsuite/gdb.base/linespecs.exp
-2a20d2c42c748c9f19c46d2573e17686  gdb/testsuite/gdb.base/list.exp
-e7d4aa964e0ac3b22a0ecfeef466c437  gdb/testsuite/gdb.base/list0.c
+ccba67e38174f0ed04c39284e52a6afa  gdb/testsuite/gdb.base/list.exp
+3740760191f88c99939ed040b00b32b6  gdb/testsuite/gdb.base/list0.c
 d98c219c48dd073b09144e6cdb9de268  gdb/testsuite/gdb.base/list0.h
 8b38bf10b14906aeede912d147c23b43  gdb/testsuite/gdb.base/list1.c
-0ff192996152e093a0869efcd3fb5b10  gdb/testsuite/gdb.base/logical.exp
+1e202f07d83616c825c1714ea2e43ba2  gdb/testsuite/gdb.base/logical.exp
 b4b4b4855aa4a1ccefdce3f5f6c5ac53  gdb/testsuite/gdb.base/long_long.c
-4ba0277076d1caac23f960c5700d9bd0  gdb/testsuite/gdb.base/long_long.exp
-a56f5fefac8c744398175d70fff401ef  gdb/testsuite/gdb.base/longjmp.c
-8cf1477d7a4cb52ae0a9dd913eb4e3e7  gdb/testsuite/gdb.base/longjmp.exp
+d3f1fa47f1fa1659f0e5e4dee9741287  gdb/testsuite/gdb.base/long_long.exp
+b6ad87058a3d8790cec0366cfbf6abd4  gdb/testsuite/gdb.base/longjmp.c
+11461d5deea87411e0e2a71355ef7b55  gdb/testsuite/gdb.base/longjmp.exp
 d89474265b62f35df0c23a47bf1cc11a  gdb/testsuite/gdb.base/m32r.ld
 35ce0d1e8a6cc6a278649ec7464d8a1c  gdb/testsuite/gdb.base/m32rovly.c
-0fa51bf71a10dc2f9f53001cf4baeea5  gdb/testsuite/gdb.base/macscp.exp
-732d06040d246f18e821b7c3c3e74acb  gdb/testsuite/gdb.base/macscp1.c
+118cf2ced0f1bf18aad50845168f5a43  gdb/testsuite/gdb.base/macscp.exp
+7ea18a24d9d28cbcb1f4c5fe6442697a  gdb/testsuite/gdb.base/macscp1.c
 256625bcc48a090ec4e5b85d1affa9bc  gdb/testsuite/gdb.base/macscp2.h
 bbd68c316d4ba5e21f8aac02eb605fa4  gdb/testsuite/gdb.base/macscp3.h
 dc1c7b2d0d97de5e07f0046fca14d586  gdb/testsuite/gdb.base/macscp4.h
-d84773c6d7d85f8ce917f696dedc1ba7  gdb/testsuite/gdb.base/maint.exp
+fb5a1127ee2cd685f419630f6767e8b6  gdb/testsuite/gdb.base/maint.exp
 970409a50e435421b148feb6ecb2fa47  gdb/testsuite/gdb.base/memattr.c
-67407049f1f1934f2bf94373bc494c61  gdb/testsuite/gdb.base/memattr.exp
-c779221fb70a0e5b29aa0fffeb4b46b2  gdb/testsuite/gdb.base/mips_pro.c
-b9cd5beffc8024df9b68193fd8633989  gdb/testsuite/gdb.base/mips_pro.exp
-643671e20fe8eff654f14011ab332137  gdb/testsuite/gdb.base/miscexprs.c
-948bebe946507635dc84582403791159  gdb/testsuite/gdb.base/miscexprs.exp
+6238d6661f5587009f6e5714ab102959  gdb/testsuite/gdb.base/memattr.exp
+9b5b2f0fcf279f9ee30283799303bb25  gdb/testsuite/gdb.base/mips_pro.c
+3751d391b43fa50be2d4fae53a759670  gdb/testsuite/gdb.base/mips_pro.exp
+d47cf600366a984537fe500bf1b0e33e  gdb/testsuite/gdb.base/miscexprs.c
+2f3a2124c5bbfad97123e5a21a9a7cf0  gdb/testsuite/gdb.base/miscexprs.exp
 e5c027e0c31f2a58aaf8b02a038f1672  gdb/testsuite/gdb.base/morestack.c
-b741daec8c7f1037963508b99034d1a9  gdb/testsuite/gdb.base/morestack.exp
+45c7781c59eca8e4ef7c22da122aa15e  gdb/testsuite/gdb.base/morestack.exp
 f22bafc5dcde8e6db7484565aca66113  gdb/testsuite/gdb.base/moribund-step.exp
 a02c225d11bba81fe3b14a15e00eaa1a  gdb/testsuite/gdb.base/multi-forks.c
-9af25221d4ee3702702671dbb104ad13  gdb/testsuite/gdb.base/multi-forks.exp
-b7d340c5410e83eab50f73e499be0759  gdb/testsuite/gdb.base/nodebug.c
-c96dc84a87549c7fc0ca3ccec8ce0022  gdb/testsuite/gdb.base/nodebug.exp
+e607e4e87c044d68082c7590636d4b81  gdb/testsuite/gdb.base/multi-forks.exp
+7cd8baaf6568ba16b108661a4d70e1d4  gdb/testsuite/gdb.base/nextoverexit.c
+062739fbd52ec9fc7ffbc0c2b7b41f30  gdb/testsuite/gdb.base/nextoverexit.exp
+47e6b7dd55edba6bce2914475d26b40d  gdb/testsuite/gdb.base/nodebug.c
+86c2df3b42bad16f077f3976deed870a  gdb/testsuite/gdb.base/nodebug.exp
 331802f9c3573f20c3d368452af55966  gdb/testsuite/gdb.base/nofield.c
-b4a4e5dab1123e9cf6cf96df6eff52c4  gdb/testsuite/gdb.base/nofield.exp
+f17c5721a1b63dbda8febd2717accfef  gdb/testsuite/gdb.base/nofield.exp
 4f504c073d2cbd9f6302ecf648334137  gdb/testsuite/gdb.base/nostdlib.c
 b556b8d70eaedf6a865f57262d048961  gdb/testsuite/gdb.base/nostdlib.exp
-78c7afa8514516a4f58d7e242e19047c  gdb/testsuite/gdb.base/opaque.exp
-52ba3d967b2b82fff0684a32c9306380  gdb/testsuite/gdb.base/opaque0.c
+2c1eb0856c72e32321c66086d2258350  gdb/testsuite/gdb.base/opaque.exp
+0ede8a52889cb290a4df96f48615e1ca  gdb/testsuite/gdb.base/opaque0.c
 177d0aa2dc05a0887607543ae7a63ae4  gdb/testsuite/gdb.base/opaque1.c
 cc19ee1eb79fe010ad5bab989640c407  gdb/testsuite/gdb.base/overlays.c
-e6b4e045f7ad680b9971b9f5d1ede4e5  gdb/testsuite/gdb.base/overlays.exp
+d1165c7fe0646febf372007d5b594f64  gdb/testsuite/gdb.base/overlays.exp
 f7aec7811932b17ea2e12b59c13e377e  gdb/testsuite/gdb.base/ovlymgr.c
 beb7ddd8ac440e541b4ff7458987281f  gdb/testsuite/gdb.base/ovlymgr.h
-5e8785c0d3dd19e311308fd384bcc336  gdb/testsuite/gdb.base/page.exp
+72c568ad9962136e04088313fd0469d2  gdb/testsuite/gdb.base/page.exp
 0fec50da02e7cd3be0581d9269e8b27b  gdb/testsuite/gdb.base/pc-fp.c
-33daaf78aafc4d6b195b50e96fb89fae  gdb/testsuite/gdb.base/pc-fp.exp
+4c460366e82f7915c33f8927f665cb6c  gdb/testsuite/gdb.base/pc-fp.exp
 4e35af7478d5e53878db3b5cb8a571d9  gdb/testsuite/gdb.base/pending.c
-30894c8f3b803276b9512344bc9c192f  gdb/testsuite/gdb.base/pending.exp
+fad8957e1b7c117c39b8ac709c58219d  gdb/testsuite/gdb.base/pending.exp
 9250a8c8e7c6270d2ffe7cae44056116  gdb/testsuite/gdb.base/pendshr.c
-c09092f3eac31cc8900e87165ba7be19  gdb/testsuite/gdb.base/permissions.exp
+07a263baeb78f8d8a5398790a9587d9e  gdb/testsuite/gdb.base/permissions.exp
 d227cd5acdb0fca7bc3bc43b226fcf96  gdb/testsuite/gdb.base/pi.txt
 b1674e61bbbcd9349d088302193894a7  gdb/testsuite/gdb.base/pie-execl.c
-3bd86cb68490aee7728511e28dc58fc0  gdb/testsuite/gdb.base/pie-execl.exp
-52a6e11d1e2630850fa16f7fa8b59341  gdb/testsuite/gdb.base/pointers.c
-de4963dcc4feb65d14f98b96e0e2ccb3  gdb/testsuite/gdb.base/pointers.exp
+fc68c32b8e7c18e0909e2ca8376e561e  gdb/testsuite/gdb.base/pie-execl.exp
+a7eec13082c0bf5a6bcf3bea3e8f143c  gdb/testsuite/gdb.base/pointers.c
+f9679f8b22478198b60e958f44ef946f  gdb/testsuite/gdb.base/pointers.exp
 06c71b901c788aa21a4bcd240caa5464  gdb/testsuite/gdb.base/pr10179-a.c
 51c28755e9cd7289437025077044a922  gdb/testsuite/gdb.base/pr10179-b.c
 9713ce01f2f63829d1c1574e82d042e4  gdb/testsuite/gdb.base/pr10179.exp
 e19f1cc9e25094be2d91529e666d44ed  gdb/testsuite/gdb.base/pr11022.c
-a3ec6af50597bf1b06bef8202b63a78d  gdb/testsuite/gdb.base/pr11022.exp
+22992645a4a55550f2d718236c862b39  gdb/testsuite/gdb.base/pr11022.exp
 0925976c5bc56288bf3d28e8cc88e769  gdb/testsuite/gdb.base/prelink-lib.c
 69d54ff1fdfc1140f79d2f0df8267c18  gdb/testsuite/gdb.base/prelink.c
-37376b05d2942da023b93dfea928f9bb  gdb/testsuite/gdb.base/prelink.exp
-db3173777aeab81df628bffdb7b7372d  gdb/testsuite/gdb.base/printcmds.c
-888f90f55022f4c2d7bc3c6b47cbd9fb  gdb/testsuite/gdb.base/printcmds.exp
+b666eab2d9a20f816c442e12c2637ffe  gdb/testsuite/gdb.base/prelink.exp
+47976ef68faae68d2d4382ad5e68dba4  gdb/testsuite/gdb.base/print-file-var-lib1.c
+d5078c540454fe5a3c67a78db1d04f9d  gdb/testsuite/gdb.base/print-file-var-lib2.c
+2cbc428c25cd56a9778a5bbdcf8a8065  gdb/testsuite/gdb.base/print-file-var-main.c
+3fb9ad63cfd111702eded918b2ef7181  gdb/testsuite/gdb.base/print-file-var.exp
+3baea01bf8683f3fdde9237064be2711  gdb/testsuite/gdb.base/printcmds.c
+2026e588cde84a0749ffda35e256b605  gdb/testsuite/gdb.base/printcmds.exp
 103034844a00a98f84a705386cc9fb5b  gdb/testsuite/gdb.base/prologue.c
 b2a183273a2092e3ed947054d57c3197  gdb/testsuite/gdb.base/prologue.exp
-8694541acc6326a7d1b711bc1f4d79ff  gdb/testsuite/gdb.base/psymtab.exp
+ac244b85d086af3aaeaf93676908c9a5  gdb/testsuite/gdb.base/psymtab.exp
 b263e085b920ccae2568157fcc33189f  gdb/testsuite/gdb.base/psymtab1.c
 f356ff50643e59000ef3d9f24089698b  gdb/testsuite/gdb.base/psymtab2.c
 63722cf6354168528a5cfa9dfd73196a  gdb/testsuite/gdb.base/ptr-typedef.c
-cfcad6d8ffa24b0148a7699c1e79456c  gdb/testsuite/gdb.base/ptr-typedef.exp
-7bb42bada729782ed0bea924f4e362ee  gdb/testsuite/gdb.base/ptype.c
-304e7a37843ff56d6f4834d97a47533f  gdb/testsuite/gdb.base/ptype.exp
+a07d61fd34f4fc30f5a4e8624262ab6a  gdb/testsuite/gdb.base/ptr-typedef.exp
+069f759fe331dff14248a48d8ee66812  gdb/testsuite/gdb.base/ptype.c
+321b67dcf80dee92db64a2580a97bf92  gdb/testsuite/gdb.base/ptype.exp
 46b4c46217f2fcdabd1bba7e9afaf4bd  gdb/testsuite/gdb.base/ptype1.c
-ff296712903071886902c63cac7f5a9c  gdb/testsuite/gdb.base/radix.exp
+604f31f469dd23b7763132fc6b5e9832  gdb/testsuite/gdb.base/radix.exp
 8b810e761c75ffcabc5ff11c020f28da  gdb/testsuite/gdb.base/randomize.c
 99ea5ac67cf03066c2d96e4360a1f67f  gdb/testsuite/gdb.base/randomize.exp
 752062ea269b014b41d5c142e420d712  gdb/testsuite/gdb.base/readline-ask.c
 a09c9bf8b9d1f602b02227c562ff08b3  gdb/testsuite/gdb.base/readline-ask.exp
 7cf7ff099edf6685fe6ef0fef224206e  gdb/testsuite/gdb.base/readline-ask.inputrc
-778725112c523d6eab0c0d918122e8a4  gdb/testsuite/gdb.base/readline.exp
-b7c0b9263a943f4e519a0f797e126317  gdb/testsuite/gdb.base/recurse.c
-254a6b3dad13443990ea48f0d4dba260  gdb/testsuite/gdb.base/recurse.exp
-e3a5fb4554674aa5fc97901dbe13e635  gdb/testsuite/gdb.base/regs.exp
-4c3326ef04b9de02f9e51f53d90fc72b  gdb/testsuite/gdb.base/relational.exp
+60617b86d4ab944d9a732762bd334bdb  gdb/testsuite/gdb.base/readline.exp
+2081f8b2c1677301fc296fa19a4cf909  gdb/testsuite/gdb.base/recpar.c
+1135d270cf01553b5ab7aa17f2ca97c6  gdb/testsuite/gdb.base/recpar.exp
+eba226f5ff163b0f4c5aafc55cf844a7  gdb/testsuite/gdb.base/recurse.c
+22eade3e92adcc41a68f13211a0fe50e  gdb/testsuite/gdb.base/recurse.exp
+50feba2bd53167468a44e378cff66ab7  gdb/testsuite/gdb.base/relational.exp
 337a6deca418b6a7cf27fe3c9145a05a  gdb/testsuite/gdb.base/relativedebug.c
-420b5ea0be1bce31346c372f57a5d696  gdb/testsuite/gdb.base/relativedebug.exp
+8b2a60e3e53426667d5918a27c4c2b1b  gdb/testsuite/gdb.base/relativedebug.exp
 8ea8d85ffd08ed6c85f4c782b78df222  gdb/testsuite/gdb.base/relocate.c
-f09a23e126651f87e7841c5cc4d223ab  gdb/testsuite/gdb.base/relocate.exp
+2c4a35edfd644d9e87044e49c93acb16  gdb/testsuite/gdb.base/relocate.exp
 79696e315e518bcff76ca31d67e55856  gdb/testsuite/gdb.base/remote.c
-b741664f5282fb848fca34f7302dfed4  gdb/testsuite/gdb.base/remote.exp
-34fb11372ae492842ecd4fb80a24c57e  gdb/testsuite/gdb.base/remotetimeout.exp
-3d18784b5a4c89192d7c249173fa17e9  gdb/testsuite/gdb.base/reread.exp
-b27553d250bc9c1302b8081e241e4630  gdb/testsuite/gdb.base/reread1.c
-4375d6ac2243cd2a4c529e2c66073fbc  gdb/testsuite/gdb.base/reread2.c
-7e1631ff66139749465d54aeff6976df  gdb/testsuite/gdb.base/restore.c
-96d2afc951301329dfd08f430707cbfa  gdb/testsuite/gdb.base/restore.exp
+835b392e5a90879ff8630a705a536f76  gdb/testsuite/gdb.base/remote.exp
+b77ec1ca90e40bd71d2169db5f3b15cd  gdb/testsuite/gdb.base/remotetimeout.exp
+6ad7608986d34d81df6592eda4eef523  gdb/testsuite/gdb.base/reread.exp
+6f4837bae4e626ce4566cce03696ae48  gdb/testsuite/gdb.base/reread1.c
+917b1c0d4a61d5f2b7f74cb6ca9e2a59  gdb/testsuite/gdb.base/reread2.c
+d0d5a5680b812f6d3b7df6e5572729c5  gdb/testsuite/gdb.base/restore.c
+7e5c420f229fcbe7d3023f0ce12d334c  gdb/testsuite/gdb.base/restore.exp
 19e547ece9618074b33b2d725385447b  gdb/testsuite/gdb.base/return-nodebug.c
-b2ad2281bc93695f28bd18d99089bc98  gdb/testsuite/gdb.base/return-nodebug.exp
+c4e842e1c08c9562b49d2ea1b18ef8ce  gdb/testsuite/gdb.base/return-nodebug.exp
 1a6fcd8b8b9e2f557baf3291fa4eb95e  gdb/testsuite/gdb.base/return-nodebug1.c
-a8afc935fcccb233c94780a5db339e1b  gdb/testsuite/gdb.base/return.c
+362c166ca097de527884870a798faa95  gdb/testsuite/gdb.base/return.c
 87dfba564c9c0e0fb20442c165d9d5d2  gdb/testsuite/gdb.base/return.exp
 a083d8d4881ea947f4ec0a7af80e02e8  gdb/testsuite/gdb.base/return2.c
-1051cc9f23ab436172fee9af404beb53  gdb/testsuite/gdb.base/return2.exp
-d9eeb3be3ebabd9f01a38401b6df8314  gdb/testsuite/gdb.base/run.c
+7135587f86c466b3d2d5cb9eee917f67  gdb/testsuite/gdb.base/return2.exp
+8fee888228bb46ae061a4747818fa760  gdb/testsuite/gdb.base/run.c
 b1b5227b8878ebb3f802c68e3788e1bb  gdb/testsuite/gdb.base/save-bp.c
-8d97d6705972bf8adbb678201d5e2408  gdb/testsuite/gdb.base/save-bp.exp
+bc1a09eb82daf3d928a2ad4fff807c02  gdb/testsuite/gdb.base/save-bp.exp
 02ce115f1dc45b3d48bba0def3c8a665  gdb/testsuite/gdb.base/savedregs.c
-d2b8cc63148b5d59eb44a874609f9249  gdb/testsuite/gdb.base/savedregs.exp
-541264a93d90e1c90ed5ed349af66101  gdb/testsuite/gdb.base/scope.exp
-101afeeadfec41f766bd65dc3ab6b6f6  gdb/testsuite/gdb.base/scope0.c
+fc740fd23973c33316226ff5114ebe95  gdb/testsuite/gdb.base/savedregs.exp
+bd6b993cdfd66d2363a7e17cdde879e9  gdb/testsuite/gdb.base/scope.exp
+c1182a545d1a749b9b692b2e79ce0d51  gdb/testsuite/gdb.base/scope0.c
 cbb854d7a93b8312bbe45c702954651f  gdb/testsuite/gdb.base/scope1.c
-fa05a22cda3663567dbac5e75845a6ad  gdb/testsuite/gdb.base/sect-cmd.exp
+f1769e51e4639dadfad6f048ff160a65  gdb/testsuite/gdb.base/sect-cmd.exp
 79cf4c4e95afce25651ae1cc487ea5e5  gdb/testsuite/gdb.base/sep-proc.c
 2d575f7e409c0dca2d74edb8bb0c5a64  gdb/testsuite/gdb.base/sep.c
-b0d25818eb420094f4e27e4e90112809  gdb/testsuite/gdb.base/sep.exp
-c7370f2b62e18f52f6b7056d98f7b279  gdb/testsuite/gdb.base/sepdebug.c
-27b2c3a0478ce9d163f4bdc917607080  gdb/testsuite/gdb.base/sepdebug.exp
+92c72d46bb3b873321cfb390f4577130  gdb/testsuite/gdb.base/sep.exp
+da36c2cf691c8ec88cb0830f98133503  gdb/testsuite/gdb.base/sepdebug.c
+cc3b71277fa7e560c96ac9bd398d9927  gdb/testsuite/gdb.base/sepdebug.exp
 ec1ea5200434e9625e68f4c3b12ab082  gdb/testsuite/gdb.base/sepdebug2.c
 34c9b6e08e14ee5f9bd3cc61b7ce6a92  gdb/testsuite/gdb.base/sepsymtab.c
-54a3b5e1bad2e18fdcdb95bf05d08fd5  gdb/testsuite/gdb.base/sepsymtab.exp
-6c360314a1457d6f5033327c8b815221  gdb/testsuite/gdb.base/set-lang-auto.exp
-fd21df76b25003cb1b35af07ebac8991  gdb/testsuite/gdb.base/setshow.c
-3c41f31b184ef38b9724f81bc187321f  gdb/testsuite/gdb.base/setshow.exp
-366a61f5feeadf4733e79506ff7f4271  gdb/testsuite/gdb.base/setvar.c
-f0c15a902f799f41323a5d538af803e3  gdb/testsuite/gdb.base/setvar.exp
+784d548feecb700bea973ba03660c405  gdb/testsuite/gdb.base/sepsymtab.exp
+4d54624f2e79fde120c51577ac331caa  gdb/testsuite/gdb.base/set-lang-auto.exp
+7b1aa6a0c9bf61d7e1baf9874e443dd7  gdb/testsuite/gdb.base/set-noassign.exp
+ef8cdf869a09d1411c0be3d73841413e  gdb/testsuite/gdb.base/setshow.c
+f5c93ae0f3aa965a5df592c70a18b71e  gdb/testsuite/gdb.base/setshow.exp
+65a8a38bb087592bf24459295509724a  gdb/testsuite/gdb.base/setvar.c
+9e4e6f1ff496bbd895892bd8ee2c8f16  gdb/testsuite/gdb.base/setvar.exp
 0a65176d15ef084c50ef6b8de7b13b6b  gdb/testsuite/gdb.base/shell.exp
-fb00d7850eb42a5fe451a91a452d74dc  gdb/testsuite/gdb.base/shlib-call.exp
+ffd537c1fc6663f2315953bd96b20e4b  gdb/testsuite/gdb.base/shlib-call.exp
 cfbccb8fd0b5543680b261ada53c45fa  gdb/testsuite/gdb.base/shmain.c
 29ac9b65c0950d2812f5a77a0a55de5a  gdb/testsuite/gdb.base/shr1.c
 4c06f99b8d9db6a8a11b0e5474c3b5f5  gdb/testsuite/gdb.base/shr2.c
 3764973c71d5aa701031b4e66fd276d3  gdb/testsuite/gdb.base/shreloc.c
-d4158d2f35dfc099b479c8770efdeff7  gdb/testsuite/gdb.base/shreloc.exp
+f89eb2788d26df5aa5d3d65800005b85  gdb/testsuite/gdb.base/shreloc.exp
 18a49ceae996869f718980356f5f6b45  gdb/testsuite/gdb.base/shreloc1.c
 06a92d148b60fd5c50de17ed658ab73e  gdb/testsuite/gdb.base/shreloc2.c
-3b7f301a16a1a39bc10a75f8f4b3ae83  gdb/testsuite/gdb.base/sigall.c
-b57518412f9d52b3f3eb0c7a3f90164e  gdb/testsuite/gdb.base/sigall.exp
+73e3123f4b9800eac9540bb0403bc609  gdb/testsuite/gdb.base/sigall.c
+4eb4b27f9f071973f2a6f5be26b27750  gdb/testsuite/gdb.base/sigall.exp
 242af6d62fa5f9a4c4aa7a9330ef8837  gdb/testsuite/gdb.base/sigaltstack.c
-e8d89494303b4fe85c8ec4e77d145a0a  gdb/testsuite/gdb.base/sigaltstack.exp
+b245f2165abb476880dba8e7904eeb53  gdb/testsuite/gdb.base/sigaltstack.exp
 c9bc5461d97eedacf5255d25b4338e13  gdb/testsuite/gdb.base/sigbpt.c
-f81f605071fd76e0159c3f10d03e7f04  gdb/testsuite/gdb.base/sigbpt.exp
+dbc6cf693a9b113a951440da635395cb  gdb/testsuite/gdb.base/sigbpt.exp
 f053021fae6eeecedd700afcecf2b41c  gdb/testsuite/gdb.base/sigchld.c
 4e711b926e33da235758196abd5dfb94  gdb/testsuite/gdb.base/sigchld.exp
 7b759a7533d4429b99547e092454bbd4  gdb/testsuite/gdb.base/siginfo-addr.c
-b179a2e14bdf20b8e8feecb7f2cf657b  gdb/testsuite/gdb.base/siginfo-addr.exp
+986ce0fd1ae2f1e04a55ec58863e9748  gdb/testsuite/gdb.base/siginfo-addr.exp
 c251a2d1dffc9ccdd90212c035ead895  gdb/testsuite/gdb.base/siginfo-infcall.c
 e14801adcfcf64bb891bb596d4170a86  gdb/testsuite/gdb.base/siginfo-infcall.exp
 63bb4dfbf92912a958afd21b2bff8dde  gdb/testsuite/gdb.base/siginfo-obj.c
-7ff174eb14f274fe00c01256cf9099be  gdb/testsuite/gdb.base/siginfo-obj.exp
+69d1a9162578302135e0e8f3686bb843  gdb/testsuite/gdb.base/siginfo-obj.exp
 debad9c363ee57f71b5b15649a81c2c7  gdb/testsuite/gdb.base/siginfo.c
-e618e779531c9418743602b0fd3aef9e  gdb/testsuite/gdb.base/siginfo.exp
-24ddac9178f2f43b2b0f577c77aef032  gdb/testsuite/gdb.base/signals.c
-a229cdc1bbe34e915442ee31772784d1  gdb/testsuite/gdb.base/signals.exp
+b64043f2601660327b0b7391a8439f3d  gdb/testsuite/gdb.base/siginfo.exp
+eea87e016185466f959ce4ec8874caab  gdb/testsuite/gdb.base/signals.c
+23a5e4998a08c4bfda47ba71923a54d1  gdb/testsuite/gdb.base/signals.exp
 fc4c46361848c56e0e19b67e0b4d61c7  gdb/testsuite/gdb.base/signest.c
 0cd0670eeb5bebe6f746a74768764600  gdb/testsuite/gdb.base/signest.exp
 f06f228f51ba0b6d0666d7bf633d2f6f  gdb/testsuite/gdb.base/signull.c
-24c58422210c8b76c0d73c049ebf0353  gdb/testsuite/gdb.base/signull.exp
+5217ddc0021356394c794e890174300d  gdb/testsuite/gdb.base/signull.exp
 d185835d8d3431b9260ccc3953a75f6f  gdb/testsuite/gdb.base/sigrepeat.c
-7672dbc1636741457a0d7ddd07e991ab  gdb/testsuite/gdb.base/sigrepeat.exp
+b60b85b0d68617e8af98a7d24829f310  gdb/testsuite/gdb.base/sigrepeat.exp
 fdd2f63933cedfe2e4695ae72976455a  gdb/testsuite/gdb.base/sigstep.c
-a02cca18334e3d29508dcad96bc2b581  gdb/testsuite/gdb.base/sigstep.exp
+0eac3380ddfcfd4d1d8d37bee48b8c0f  gdb/testsuite/gdb.base/sigstep.exp
 33a4cf0c2d4e34941699f04f3837cd38  gdb/testsuite/gdb.base/sizeof.c
-26001d4fbbcf64379e1632152497c6bf  gdb/testsuite/gdb.base/sizeof.exp
+a1f7b29d0b91b8dc706066c40559c334  gdb/testsuite/gdb.base/sizeof.exp
 6e8b1ebb505d77ac53cfaab60499a09d  gdb/testsuite/gdb.base/skip-solib-lib.c
 fadb717d72b9f5ce2c8efd09ea299b3e  gdb/testsuite/gdb.base/skip-solib-main.c
 880acb9568ef495d291e3a9a71d9ab48  gdb/testsuite/gdb.base/skip-solib.exp
 cff80754c7c268bacb541f2847814852  gdb/testsuite/gdb.base/skip.c
-c1bb2f2e7ef110c7cd2de59a5773c436  gdb/testsuite/gdb.base/skip.exp
+ba06829a5197b6bd786e1e67d92ddb54  gdb/testsuite/gdb.base/skip.exp
 4a8a4effac3eb64964b18642cc32f2e6  gdb/testsuite/gdb.base/skip1.c
 3f3fc87d0d7af5df8550713bdfab76da  gdb/testsuite/gdb.base/so-disc-shr.c
 e711a6cfdf17afc08fbd300867145dd6  gdb/testsuite/gdb.base/so-impl-ld.c
-ac12321c5b9af2937c24b5433ef2a5cc  gdb/testsuite/gdb.base/so-impl-ld.exp
+9d60cb7344eb3cd6632478ec0e4abc92  gdb/testsuite/gdb.base/so-impl-ld.exp
 1429ffbb9973f67ebe556228ae4dfc66  gdb/testsuite/gdb.base/so-indr-cl.c
-5a8b9c82b7d0169fa5ac92424dad5b57  gdb/testsuite/gdb.base/so-indr-cl.exp
+53a35690f823373e445b8a957c46a5d5  gdb/testsuite/gdb.base/so-indr-cl.exp
 259928eff0029377a01d1e31168a51ac  gdb/testsuite/gdb.base/solib-corrupted.exp
 36661f6183a8cd5ba3518466cf4d4184  gdb/testsuite/gdb.base/solib-disc.c
-e9b15f44a5b1619603298269ff5b22e3  gdb/testsuite/gdb.base/solib-disc.exp
+b895754e86a9af35150ffc2b2028e3ae  gdb/testsuite/gdb.base/solib-disc.exp
 4c1744b0a73812cc668919dc19fc1e98  gdb/testsuite/gdb.base/solib-display-lib.c
 c464605a2533ce537b019eb1bf3e7537  gdb/testsuite/gdb.base/solib-display-main.c
-abc438a17466cde171f03b08b40011d1  gdb/testsuite/gdb.base/solib-display.exp
-b1609b08568f3dcc97d3c8f51392426a  gdb/testsuite/gdb.base/solib-nodir.exp
+8beba1b0aaf7e7ec7137f1273a5f76a8  gdb/testsuite/gdb.base/solib-display.exp
+8c2b262fc590268ffc7a9f491960f3ef  gdb/testsuite/gdb.base/solib-nodir.exp
 820f011aa1faf2b8f5e3deb99f656342  gdb/testsuite/gdb.base/solib-overlap-lib.c
 34ce1a56572dd8629ea63328ca2b0c08  gdb/testsuite/gdb.base/solib-overlap-main.c
-61b93ba4ce58b8c619958da04750b452  gdb/testsuite/gdb.base/solib-overlap.exp
+74052b998bc92df111beb37c434a8f77  gdb/testsuite/gdb.base/solib-overlap.exp
 0d9c9ff4481cc4b3f361089a5ce0820b  gdb/testsuite/gdb.base/solib-symbol-lib.c
 8954d89c2259d7252ae7f06b4b0827a4  gdb/testsuite/gdb.base/solib-symbol-main.c
-eb4a7e89d4e8cf31d813d0abb148ebe2  gdb/testsuite/gdb.base/solib-symbol.exp
+cf063d71a0ccf40cb4b7285a80472f51  gdb/testsuite/gdb.base/solib-symbol.exp
 451d440b7febfb8715975855d9b74ebe  gdb/testsuite/gdb.base/solib-weak.c
-5fde6e77bbd35d8df6ef817d45ab882d  gdb/testsuite/gdb.base/solib-weak.exp
+0aeea0086e632a3b407e4bca45aedf6c  gdb/testsuite/gdb.base/solib-weak.exp
 0cdb3ac52471574e63518d04e7490c77  gdb/testsuite/gdb.base/solib.c
-ff65ccd1f68b2d55780bd65870cc3e52  gdb/testsuite/gdb.base/solib.exp
+e3c5ddf857900e14821464c6136b878f  gdb/testsuite/gdb.base/solib.exp
 09b3514ecddad4ca9dd40f06f77ca5cc  gdb/testsuite/gdb.base/solib1.c
 c08d6d5da171e08cd8bce11e6ee9ffb5  gdb/testsuite/gdb.base/solib2.c
 734a5dd7fce2a1e9de35931eb4f7fd63  gdb/testsuite/gdb.base/source-error.gdb
 5b8dc4fe942860f315f63c099a776e89  gdb/testsuite/gdb.base/source-test.gdb
-acca26d93796b81fa3d491570934e2b9  gdb/testsuite/gdb.base/source.exp
+43bbb68ce180c487c8f7dce20be57f8d  gdb/testsuite/gdb.base/source.exp
 b4816e4b91e99aa3e905b5d44802e907  gdb/testsuite/gdb.base/spu.ld
-25dd3e940b7f381b4985683b64dff8cf  gdb/testsuite/gdb.base/ss.h
 f9f04d7877b8a2ed689c852cd14742ed  gdb/testsuite/gdb.base/stack-checking.c
-0111fb4602354ed0c1d824ab093a88c9  gdb/testsuite/gdb.base/stack-checking.exp
+7758e10779a8163339eaf0e42f9dd1a6  gdb/testsuite/gdb.base/stack-checking.exp
+748eaab21880b863b05166987f33423c  gdb/testsuite/gdb.base/stale-infcall.c
+7b2bea294006b96f9b0b52bbf626b176  gdb/testsuite/gdb.base/stale-infcall.exp
+81aeaf53e69d2f46ed920cd1411a84d1  gdb/testsuite/gdb.base/stap-probe.c
+4194f24a48aa1c67a40f1a40bcb02f2e  gdb/testsuite/gdb.base/stap-probe.exp
 eb585c4a0e918c4f9be0dc2de292adff  gdb/testsuite/gdb.base/start.c
-2461b758a7298c5e41fd82569318f727  gdb/testsuite/gdb.base/start.exp
+e4adb52c01589bc99d45080f4a468abd  gdb/testsuite/gdb.base/start.exp
 671ba60ed5b7f52b38fb47a08872222f  gdb/testsuite/gdb.base/step-break.c
-96fa7743b2384cd2fa03c6d072e1db1f  gdb/testsuite/gdb.base/step-break.exp
+bc311d62a29c66d285c5e05d221b0106  gdb/testsuite/gdb.base/step-break.exp
 51659855f82a68d4326f3b6f06a14db6  gdb/testsuite/gdb.base/step-bt.c
-f73372686aafe1d8f56c5e64ab35ae3f  gdb/testsuite/gdb.base/step-bt.exp
-82a9b400abd458b7fa55219139eebd99  gdb/testsuite/gdb.base/step-line.c
-3c7e08433bd579b98e8d9b6bf8c537bc  gdb/testsuite/gdb.base/step-line.exp
-545076199030cfe4bedb6b513ac18123  gdb/testsuite/gdb.base/step-line.inp
+4c80908b5f00ce5a70ad66507815328b  gdb/testsuite/gdb.base/step-bt.exp
+e48c21a0eeb78774c8761fbef657bdf1  gdb/testsuite/gdb.base/step-line.c
+115addef578c3e285a9a2e0db451edfc  gdb/testsuite/gdb.base/step-line.exp
+98cd6b7b1e6e3b7431873224eef42ee2  gdb/testsuite/gdb.base/step-line.inp
 18720b2bb9f88cd34aab612f18a606f5  gdb/testsuite/gdb.base/step-resume-infcall.c
 12b0ee8c5ec65ce23abc5ff7a695671f  gdb/testsuite/gdb.base/step-resume-infcall.exp
 9ffc2cd8e384888785a57bd5ed8168d2  gdb/testsuite/gdb.base/step-test.c
-e511db7a5214f4b7970567a8d5b313ff  gdb/testsuite/gdb.base/step-test.exp
+632fb2a218b330d0bdf4157005e9e142  gdb/testsuite/gdb.base/step-test.exp
 1ea088b852b87134ad1b9038b0dd2204  gdb/testsuite/gdb.base/store.c
-848ec3ed1dfa56c8c7dd62f68465c6b7  gdb/testsuite/gdb.base/store.exp
-72bcf67c121c3c9477348ac26c41fa72  gdb/testsuite/gdb.base/structs.c
-56876f126fa57cb19f1e8b49a56263de  gdb/testsuite/gdb.base/structs.exp
-ea9603592d237a2624d44c1a417ebaef  gdb/testsuite/gdb.base/structs2.c
-aa8decab908086beb44ac773aef92ff7  gdb/testsuite/gdb.base/structs2.exp
+b2ad72760fd7529d417a50b710270410  gdb/testsuite/gdb.base/store.exp
+44fc99a85a7c08e802620d406179d55b  gdb/testsuite/gdb.base/structs.c
+3be67b8d7e9eaca92033f732b07d7674  gdb/testsuite/gdb.base/structs.exp
+49b5960728f7fb97d1d913078cf6c70b  gdb/testsuite/gdb.base/structs2.c
+084e44998907427278b9c400ca40be4f  gdb/testsuite/gdb.base/structs2.exp
 23be545449c39de618fb623ae1275ea1  gdb/testsuite/gdb.base/structs3.c
 cab7ad7b32462358206881300444a7e5  gdb/testsuite/gdb.base/structs3.exp
-1bb5a11dfb225a21a513db6290640a77  gdb/testsuite/gdb.base/subst.exp
+753c118a7ae728078c613afaf2b3952b  gdb/testsuite/gdb.base/subst.exp
 f979f053e2cd1a61d9630b75d70607ef  gdb/testsuite/gdb.base/sum.c
 48a54ec628bc16897b09f9cf95acae9f  gdb/testsuite/gdb.base/symbol-without-target_section.c
 bb605195d95b72f13d2ebc84b55dfa05  gdb/testsuite/gdb.base/symbol-without-target_section.exp
-f63e5c8f644e7de820cb09145544bcec  gdb/testsuite/gdb.base/term.exp
-c24c372e406bc7cedb2c027cb11c510a  gdb/testsuite/gdb.base/testenv.c
-6dbc18208941ef0ae97bf9c5d59a3c7a  gdb/testsuite/gdb.base/testenv.exp
-8e3d99c7f1b84b6e90ed02acff19469c  gdb/testsuite/gdb.base/trace-commands.exp
+83786b4f147a6d0130b0a74fd148d7d0  gdb/testsuite/gdb.base/term.c
+a0195f1523f000aecf482a2edb0e1b9d  gdb/testsuite/gdb.base/term.exp
+b05d7e85bd5ad817f8af689499770b1f  gdb/testsuite/gdb.base/testenv.c
+599437a36de4377fa30e1ec201fe6c0c  gdb/testsuite/gdb.base/testenv.exp
+f5b27af8b7a586deb4430744583a12e0  gdb/testsuite/gdb.base/trace-commands.exp
 538e2aa20e0c2873f82ad08e38843bf3  gdb/testsuite/gdb.base/tui-layout.exp
-e230b8767f5ad5901a40b01435d17089  gdb/testsuite/gdb.base/twice.c
-8d5467739d880b4230a4fb4662d20a43  gdb/testsuite/gdb.base/twice.exp
+300341fe836af37adf2f3064285022aa  gdb/testsuite/gdb.base/twice.c
+57eac3ec630d275bd85825f640ff69e2  gdb/testsuite/gdb.base/twice.exp
 739bc686788b640b1457058f2388ec09  gdb/testsuite/gdb.base/type-opaque-lib.c
 1198388e447ea797a175ee7941748540  gdb/testsuite/gdb.base/type-opaque-main.c
-1c34a226efb08f381ab0069086d9246f  gdb/testsuite/gdb.base/type-opaque.exp
+d41631f46b152b4b39676b6461db90a3  gdb/testsuite/gdb.base/type-opaque.exp
 7b32d28e46b031a435926fd8d703fe80  gdb/testsuite/gdb.base/ui-redirect.exp
 8376147a785e1b33f922ffc4405a364e  gdb/testsuite/gdb.base/unload.c
-7e9bf5dfd1f2565c1cb30718c9a41dcc  gdb/testsuite/gdb.base/unload.exp
+b506bd69c8346510cd9c269ebed4cb0a  gdb/testsuite/gdb.base/unload.exp
 a9c9e49bed884735ee77fe8a360197d7  gdb/testsuite/gdb.base/unloadshr.c
 58408c5287a3835bd75822a48c621e7d  gdb/testsuite/gdb.base/unloadshr2.c
-6a5b25b6ee772cdcb32c7a86d8b89aee  gdb/testsuite/gdb.base/until.exp
-729ae9f533765ccfcfb22fa69b3cc9f3  gdb/testsuite/gdb.base/unwindonsignal.c
-a271bc45b82cdcc250c06f88fe8f59f3  gdb/testsuite/gdb.base/unwindonsignal.exp
+b73c3f450f97d3dfb3f63dac5fca8a0c  gdb/testsuite/gdb.base/until.exp
+e0f4a00d7eb2641628c91c705b4592d0  gdb/testsuite/gdb.base/unwindonsignal.c
+54977e8dc95d46d57d728774d9dea606  gdb/testsuite/gdb.base/unwindonsignal.exp
 a7f582dad7c86be966dc26a2dfd2a9b3  gdb/testsuite/gdb.base/valgrind-db-attach.c
-9a4f7cf8c65932d91fb9cda3a2b630aa  gdb/testsuite/gdb.base/valgrind-db-attach.exp
+9aeaebc9306f400ea147ed756128d580  gdb/testsuite/gdb.base/valgrind-db-attach.exp
+3cd0507c8af37b5788e02cd161262bd0  gdb/testsuite/gdb.base/valgrind-infcall.c
+442ca0b023d931a86fd214e05a52777e  gdb/testsuite/gdb.base/valgrind-infcall.exp
 319b40e0e783d65b296cdf21f0c3e0a0  gdb/testsuite/gdb.base/value-double-free.c
 abb7f938274118488161ab577968dc69  gdb/testsuite/gdb.base/value-double-free.exp
 96414feab41b4954360074ac656e2b8e  gdb/testsuite/gdb.base/varargs.c
-d37f79a3ca581aa0326bd3a3f8f663e8  gdb/testsuite/gdb.base/varargs.exp
+3e5ed84382823a817422b5aa1dbea9f1  gdb/testsuite/gdb.base/varargs.exp
 1a9fca83cee9e223ab94207b280c403b  gdb/testsuite/gdb.base/vforked-prog.c
-f614755c5cfb6943bb8c510d1f8bfa03  gdb/testsuite/gdb.base/volatile.exp
+a9ccc4619dbf88871fbeb4298571bcb5  gdb/testsuite/gdb.base/volatile.exp
 aea1e614c10d43842852318d068f3b05  gdb/testsuite/gdb.base/watch-cond-infcall.c
-b844522b51f0cd0203da6271bc50d02c  gdb/testsuite/gdb.base/watch-cond-infcall.exp
+f4bd388ffdd3a25ecc23c29bafcf11e7  gdb/testsuite/gdb.base/watch-cond-infcall.exp
 dc7d66c0f5297bdb7488889accc8d4fa  gdb/testsuite/gdb.base/watch-cond.c
 2e9b9e1096edf4ba67655a7de39a881d  gdb/testsuite/gdb.base/watch-cond.exp
 e0e700803189fe114bfcaf2bb8d4ca4f  gdb/testsuite/gdb.base/watch-non-mem.c
@@ -2866,544 +3105,585 @@ e0e700803189fe114bfcaf2bb8d4ca4f  gdb/testsuite/gdb.base/watch-non-mem.c
 a6617abe1eb5d5d4da6f1184a5579f09  gdb/testsuite/gdb.base/watch-vfork.c
 c2200ae94465537ae7e7320a1deed41a  gdb/testsuite/gdb.base/watch-vfork.exp
 2b065633813519d3326a6798f73b5be1  gdb/testsuite/gdb.base/watch_thread_num.c
-f5626623d1719cd2a18bc83bf7325c21  gdb/testsuite/gdb.base/watch_thread_num.exp
+256f523115d450b11e672183b8bbc2c4  gdb/testsuite/gdb.base/watch_thread_num.exp
 c58049ddda8e6586da47c66f987caffc  gdb/testsuite/gdb.base/watchpoint-cond-gone-stripped.c
 d9e17bb34177d4e5e5451b7a1ccc23b7  gdb/testsuite/gdb.base/watchpoint-cond-gone.c
 4b740c38221dedee87164d2672b91f79  gdb/testsuite/gdb.base/watchpoint-cond-gone.exp
 2a9ad92ef6a4f856d2f8cbc74d71b42e  gdb/testsuite/gdb.base/watchpoint-delete.c
 30b9cb8e733e54fea5cdbf71702b0ee8  gdb/testsuite/gdb.base/watchpoint-delete.exp
+c874d720fe6c68976f66ff27c6da946c  gdb/testsuite/gdb.base/watchpoint-hw.c
 0aaae63688bb03c5d7396d83b97588e0  gdb/testsuite/gdb.base/watchpoint-hw-hit-once.c
 545ef21168a1434c070b48ee8d6b884e  gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp
-c874d720fe6c68976f66ff27c6da946c  gdb/testsuite/gdb.base/watchpoint-hw.c
 c058ad583be695298ac6baba7ade02e6  gdb/testsuite/gdb.base/watchpoint-hw.exp
 2438fd3bcbad761182cfd4776499434e  gdb/testsuite/gdb.base/watchpoint-solib-shr.c
 14bb4ed2e7a3ca9f01b6456cd8dee9f0  gdb/testsuite/gdb.base/watchpoint-solib.c
-cb0b75fe7869b7dea7b92d6d4a5de2a0  gdb/testsuite/gdb.base/watchpoint-solib.exp
-4aa87975aa89230de9a63276112f5beb  gdb/testsuite/gdb.base/watchpoint.c
-d1b6156b3205e24ac63ca9bfd530e139  gdb/testsuite/gdb.base/watchpoint.exp
-2afe8f1ca9dcf9bcd9f126e8568eed64  gdb/testsuite/gdb.base/watchpoints.c
-21a2af8dd398aaf051e7a870be7195c7  gdb/testsuite/gdb.base/watchpoints.exp
+d5c6d56e604c1b33dc534634910a231d  gdb/testsuite/gdb.base/watchpoint-solib.exp
+43092741a129dbeb9e77d0574193009b  gdb/testsuite/gdb.base/watchpoint.c
+c91dd74b51a04f73847e533a9c3ddbf2  gdb/testsuite/gdb.base/watchpoint.exp
+0a4140e02a0ef15f74053218b414b246  gdb/testsuite/gdb.base/watchpoints.c
+bbcbe1c34fbd15874c811934870a2f3a  gdb/testsuite/gdb.base/watchpoints.exp
 18bd07a13cb0b38dd4d72398db1299ba  gdb/testsuite/gdb.base/wchar.c
 2dc3fa8d18e4dd313a1d9c3cb44e3aac  gdb/testsuite/gdb.base/wchar.exp
 f033e731e91c7b26f403a16e995acaac  gdb/testsuite/gdb.base/weaklib1.c
 dd666a076907faacef51f1d7d8860c72  gdb/testsuite/gdb.base/weaklib2.c
-604d495d2b4dc780bdbd86f2e05d7641  gdb/testsuite/gdb.base/whatis-exp.exp
-0ef937a860f14f81bc90c4c895e18fcf  gdb/testsuite/gdb.base/whatis.c
-7aff606c6aa4130e7073f689e3bcb282  gdb/testsuite/gdb.base/whatis.exp
+8924400fa4c24e4062419fdbb95e18d5  gdb/testsuite/gdb.base/whatis-exp.exp
+58ce7672f36e311828540b659cb96e83  gdb/testsuite/gdb.base/whatis.c
+647c4ccdc76bc27b3902bc4918d21af9  gdb/testsuite/gdb.base/whatis.exp
 612e6a39aee238b755c4ef2b41343a67  gdb/testsuite/gdb.base/comp-dir/subdir/dummy.txt
-68659a2b489212eec2ec8d6d747cfffc  gdb/testsuite/gdb.base/Makefile
-1db86eb23231b16c94c4ee78435a8557  gdb/testsuite/gdb.cell/Makefile.in
-39244a9b4dead0fb6ebea683fb1a57e7  gdb/testsuite/gdb.cell/arch.exp
+304f6672e767651dd42398535fa495a9  gdb/testsuite/gdb.cell/Makefile.in
+8275b1ba6cc9651a8ac6ef3c523a71d1  gdb/testsuite/gdb.cell/arch.exp
 77c2d9cbce520b9c4a8bee29c3410d93  gdb/testsuite/gdb.cell/break-spu.c
 cd99fa548c3071c660fa5d4e9f0fcc10  gdb/testsuite/gdb.cell/break.c
-a0f6d4dfec0c16c04aa7bde3ba5f5373  gdb/testsuite/gdb.cell/break.exp
+bbb143b22061ae60eb6e32b41e81aa41  gdb/testsuite/gdb.cell/break.exp
 6630cc38db0a77d8e9c7e3b93c25445e  gdb/testsuite/gdb.cell/bt-spu.c
 e4f14b3cb55a978d53f282d876d197a0  gdb/testsuite/gdb.cell/bt.c
-64647b16f52374f6aa196f82ea83d319  gdb/testsuite/gdb.cell/bt.exp
+e5906023a0ecdd3c3ab400808ff961b4  gdb/testsuite/gdb.cell/bt.exp
 89d7df707dca8492e54500099d5ee579  gdb/testsuite/gdb.cell/bt2-spu.c
-b0896929ac5cd540cf335bddf578ae9e  gdb/testsuite/gdb.cell/core.exp
+5e92d20e16d85614aaf7b88d218d610f  gdb/testsuite/gdb.cell/core.exp
 457af9f7481b47f09b33e77368eb004f  gdb/testsuite/gdb.cell/coremaker-spu.c
 185fa8badea70b45d829705ce443eed6  gdb/testsuite/gdb.cell/coremaker.c
 a9b684a1f5c6c8833c09202e5a3466b6  gdb/testsuite/gdb.cell/data-spu.c
 930d897698d4d78c85192b2eb8cb9d47  gdb/testsuite/gdb.cell/data.c
-630511c59676dcf0d1e1fa7ee1227ce3  gdb/testsuite/gdb.cell/data.exp
+1434677d3f135087440f5f0e5ce9cc35  gdb/testsuite/gdb.cell/data.exp
 3c811e697a823970727e01df683d85ff  gdb/testsuite/gdb.cell/dwarfaddr.S
 6e6dc91849a1f437130c893cdea09026  gdb/testsuite/gdb.cell/dwarfaddr.exp
 dbdfc672a89ce2ae33978685c7d86e96  gdb/testsuite/gdb.cell/ea-cache-spu.c
 04b0e7d8d5e0ab95180837606648c249  gdb/testsuite/gdb.cell/ea-cache.c
-e7224df77ad0881c5e082c95490d8027  gdb/testsuite/gdb.cell/ea-cache.exp
+d92c035ff1516f628b0cfca68e0c04db  gdb/testsuite/gdb.cell/ea-cache.exp
 f3fd649f6e38f720272a380aa3b24fce  gdb/testsuite/gdb.cell/ea-standalone.c
 e79d7fec07d7677de7f470f3af7b59aa  gdb/testsuite/gdb.cell/ea-standalone.exp
 d05121a88792924855920cb15f7420f1  gdb/testsuite/gdb.cell/ea-test.c
 de64204604a219cfc99ea8b9e4b8cfa2  gdb/testsuite/gdb.cell/ea-test.exp
-d67dc533a4eae43590079405f10200d2  gdb/testsuite/gdb.cell/f-regs.exp
+eeef942fc812431d685454d75c806816  gdb/testsuite/gdb.cell/f-regs.exp
 02e3694f06cd6a8f9c853bb9488a6048  gdb/testsuite/gdb.cell/fork-spu.c
 8d53fac48dfa84fcd9ba0e3443742cfa  gdb/testsuite/gdb.cell/fork.c
-793b716174e184b64e9017979619525e  gdb/testsuite/gdb.cell/fork.exp
-ace996434c974c8515e3d3fde541a4f0  gdb/testsuite/gdb.cell/gcore.exp
+781b74e7f5a158b09e8e4e00480a073e  gdb/testsuite/gdb.cell/fork.exp
+2faa19c9c205e5d762dfdfc0c183025e  gdb/testsuite/gdb.cell/gcore.exp
 dd53e6e0ed26bf9e83ef6e11d52e16d4  gdb/testsuite/gdb.cell/mem-access-spu.c
 0a79cc2748681cb8fbcff68a71f9433d  gdb/testsuite/gdb.cell/mem-access.c
-c0d7691a481dfc69bcafe58b3c83f838  gdb/testsuite/gdb.cell/mem-access.exp
-576d72e9fa9f6a8383ba0d3f2a280eb7  gdb/testsuite/gdb.cell/ptype.exp
-94ffa75ecf980b4a07c0c3fa2e971390  gdb/testsuite/gdb.cell/registers.exp
+09de122be8d45eb558cf761566740750  gdb/testsuite/gdb.cell/mem-access.exp
+b9e335f2b5b33ed02c0c9475fce8a353  gdb/testsuite/gdb.cell/ptype.exp
+d94b826bedfa8cf436ccf16cc595bef0  gdb/testsuite/gdb.cell/registers.exp
 1032c58e07d101fa0e9e3e5c3edf8d27  gdb/testsuite/gdb.cell/size-spu.c
 a845858ffd53b22d749a27c3bea2f7d7  gdb/testsuite/gdb.cell/size.c
-d0cc583777e637cb0249342a4bfc6334  gdb/testsuite/gdb.cell/sizeof.exp
-b70395b750c6c555af558872ea8a2b5d  gdb/testsuite/gdb.cell/solib-symbol.exp
-68b70af896a5bbb24bbecb1151f9f21e  gdb/testsuite/gdb.cell/solib.exp
-bd0e132ccd133a5a608e748b0b891f1d  gdb/testsuite/gdb.cp/Makefile.in
+e6bb25201c1eb85bc080dfc940d5998a  gdb/testsuite/gdb.cell/sizeof.exp
+530bddd0571ff8fc59cb7ce4332e5087  gdb/testsuite/gdb.cell/solib-symbol.exp
+ea3e4eb2a8131209fc195369fa60ef32  gdb/testsuite/gdb.cell/solib.exp
+acf77e069c97da3215c2aefdfdbcdd1f  gdb/testsuite/gdb.cp/Makefile.in
 c3484a5efe1aa88f29c0bd3e7d6b56d6  gdb/testsuite/gdb.cp/abstract-origin.cc
-8a1347d358ff53e7dc7a3a7b01524090  gdb/testsuite/gdb.cp/abstract-origin.exp
+f2cf843761cb5bd5475f4639781f2ddf  gdb/testsuite/gdb.cp/abstract-origin.exp
 fa88dcd56730da0447f3d14fe40a5cd0  gdb/testsuite/gdb.cp/ambiguous.cc
-d873032e3e489ca31cd0c13ba397355a  gdb/testsuite/gdb.cp/ambiguous.exp
+7f826eed6b92c1ddca3492f3163a1dca  gdb/testsuite/gdb.cp/ambiguous.exp
 2088f98bb23167ea5e0c8b394c560519  gdb/testsuite/gdb.cp/annota2.cc
-7c1da4ea08ceb28ffb036eb227e99aab  gdb/testsuite/gdb.cp/annota2.exp
+aa04e3d16074dd30fc19aa4e5916f1b7  gdb/testsuite/gdb.cp/annota2.exp
 2088f98bb23167ea5e0c8b394c560519  gdb/testsuite/gdb.cp/annota3.cc
-6ff8bea68f782721840c69904ffe7952  gdb/testsuite/gdb.cp/annota3.exp
+dea766a342d5aafbc312f14c0741c61d  gdb/testsuite/gdb.cp/annota3.exp
 9628bd86650df4925bd426d33511ac90  gdb/testsuite/gdb.cp/anon-ns.cc
-065f9fade3208992eef752f184ba0808  gdb/testsuite/gdb.cp/anon-ns.exp
+4e132b98f728ab71302d83a8acbfd2a2  gdb/testsuite/gdb.cp/anon-ns.exp
 21668d4e80cf5a654946c60a5dc5f5f7  gdb/testsuite/gdb.cp/anon-struct.cc
-8876e5489c9f5a5ae0157a697ba40380  gdb/testsuite/gdb.cp/anon-struct.exp
+200a12e79ff6cb70003daa3e3f41d0d5  gdb/testsuite/gdb.cp/anon-struct.exp
 5221a33cd93ea0eba10ad76e6c55a030  gdb/testsuite/gdb.cp/anon-union.cc
-2fe7b5c8e7aa8617130a6c2dfe152486  gdb/testsuite/gdb.cp/anon-union.exp
+0cba8c28c24cdadd2ae9c0a88e57838d  gdb/testsuite/gdb.cp/anon-union.exp
 70d6fed9882e236f727895a37ce4f41b  gdb/testsuite/gdb.cp/arg-reference.cc
-295e143f9d10f974cdfad1349779cf79  gdb/testsuite/gdb.cp/arg-reference.exp
+144dfe94a6e2f625bb22f37509fe859d  gdb/testsuite/gdb.cp/arg-reference.exp
 dd3b1ce22629c07c434bceecec3cf1d9  gdb/testsuite/gdb.cp/bool.cc
-e8b4f9bc1b4d32f96ef1d89d331fdd31  gdb/testsuite/gdb.cp/bool.exp
+52651776efb924f97a9ba46466db886c  gdb/testsuite/gdb.cp/bool.exp
 dab0ca840f6d0326d7395e41ce524688  gdb/testsuite/gdb.cp/breakpoint.cc
-59b60d5ca339ad9fb1ce0dbd7d1060e8  gdb/testsuite/gdb.cp/breakpoint.exp
+6ad45350c018db4578a13537ec5983b8  gdb/testsuite/gdb.cp/breakpoint.exp
 438ffd250b88923ece7d3bf151b0d64c  gdb/testsuite/gdb.cp/bs15503.cc
-12877b45fc71c90e285afef0620c7f37  gdb/testsuite/gdb.cp/bs15503.exp
+69194d52db558c5e8b6e9bd07af8ee5d  gdb/testsuite/gdb.cp/bs15503.exp
 1a8669eda3dd6afc4ac87c93a6cfe931  gdb/testsuite/gdb.cp/call-c-1.c
 8c8f83a03b05c1ea8bb77a9b1a4f4e70  gdb/testsuite/gdb.cp/call-c.cc
-8db32f79e1c473ad24d0908ea711c283  gdb/testsuite/gdb.cp/call-c.exp
+3aa7a68f21b5df268912a495818ff9fa  gdb/testsuite/gdb.cp/call-c.exp
 89f70140e72e27531dc4e94ee1e65c3c  gdb/testsuite/gdb.cp/casts.cc
-013a8585fdfc065970e1b7ca307bdd09  gdb/testsuite/gdb.cp/casts.exp
+1ff5190e131f689d81e03aeb368feb3e  gdb/testsuite/gdb.cp/casts.exp
 83b1d2bf0b2d988c8bc52707c7e9a414  gdb/testsuite/gdb.cp/class2.cc
-157044dfeac4fdeae005cc453c295bc3  gdb/testsuite/gdb.cp/class2.exp
-10235703ac856c77166bc2e08760b810  gdb/testsuite/gdb.cp/classes.cc
-cd26bac3934a21f3d4cb9c3773afba7a  gdb/testsuite/gdb.cp/classes.exp
+5e9776b10a56d538e7849ff45cce8b05  gdb/testsuite/gdb.cp/class2.exp
+e287008e9b987d8e8ebd42f95ebb6fea  gdb/testsuite/gdb.cp/classes.cc
+6f147db7a9944bc650397396dfbfe0ba  gdb/testsuite/gdb.cp/classes.exp
 472cde778de0b6f6486da521bb382230  gdb/testsuite/gdb.cp/cmpd-minsyms.cc
-5ec6c5e48f795286522d78699706c78d  gdb/testsuite/gdb.cp/cmpd-minsyms.exp
+255e71d9c800f46146b7d209b10502a3  gdb/testsuite/gdb.cp/cmpd-minsyms.exp
 c26c60bd3bf86962fdf1d432b8bc9aad  gdb/testsuite/gdb.cp/converts.cc
-2c8d1c6c15f67c8c1811e707bc124be9  gdb/testsuite/gdb.cp/converts.exp
+8b933cd816dd484486b310c5fbf22367  gdb/testsuite/gdb.cp/converts.exp
 059e3fc4a547d9342d854a1f046e41bd  gdb/testsuite/gdb.cp/cp-relocate.cc
-b21682aa1d4b4dec360c4aecc2c098ed  gdb/testsuite/gdb.cp/cp-relocate.exp
-d422c705143caf4b261b6349ee70d7e5  gdb/testsuite/gdb.cp/cpcompletion.exp
-f0341447e93b829d6cf24cfce267cf0b  gdb/testsuite/gdb.cp/cpexprs.cc
-830b1074ac40281c87312f2683a54370  gdb/testsuite/gdb.cp/cpexprs.exp
-d8e00eb7ccf97ff2e37fef892a3f826d  gdb/testsuite/gdb.cp/cplusfuncs.cc
-35b292ebf2e1b896c802b0864d1d153d  gdb/testsuite/gdb.cp/cplusfuncs.exp
-c2ae17048cc5ffe39a2658e9c10ff06a  gdb/testsuite/gdb.cp/ctti.exp
+071c70d238774139bbe4a6057502813c  gdb/testsuite/gdb.cp/cp-relocate.exp
+5f599d3cd98567edeeaab5ae81d2ab9a  gdb/testsuite/gdb.cp/cpcompletion.exp
+ec746fbdfa8b1d045456a4000e588b6b  gdb/testsuite/gdb.cp/cpexprs.cc
+1c2e7fd084bb3db1c3499685765e790a  gdb/testsuite/gdb.cp/cpexprs.exp
+e503cb68630020ce5163ba3f01d2ec6b  gdb/testsuite/gdb.cp/cplabel.cc
+d2cdb3065146c8acda91a0b2b8e5c3a9  gdb/testsuite/gdb.cp/cplabel.exp
+3392b4be32a4c703a94740abf585b834  gdb/testsuite/gdb.cp/cplusfuncs.cc
+6da5017140c441d6cf16282e58710938  gdb/testsuite/gdb.cp/cplusfuncs.exp
+b64d91a0f4fe212e8bb33df9a8790111  gdb/testsuite/gdb.cp/ctti.exp
 83f4c0c62d2a411c021bbaccd6920f8b  gdb/testsuite/gdb.cp/cttiadd.cc
 4c5905855b190bb5d1fa43c5064fbde9  gdb/testsuite/gdb.cp/cttiadd1.cc
 1f6687ce8df4353bd3c7081f74601242  gdb/testsuite/gdb.cp/cttiadd2.cc
 05e305854352694ee4ea0116d89f2c5f  gdb/testsuite/gdb.cp/cttiadd3.cc
-6450a45527d6f9ae3f91d9e8dba8d561  gdb/testsuite/gdb.cp/demangle.exp
-d4c5d86832a3728253bb6e303dca8814  gdb/testsuite/gdb.cp/derivation.cc
-e90cdc9316b1a77e34914e84a13bec03  gdb/testsuite/gdb.cp/derivation.exp
+e1116ae8d3c25d29e84845acb5a9f020  gdb/testsuite/gdb.cp/demangle.exp
+3bb314fc7a0a59f794560b765af3ebee  gdb/testsuite/gdb.cp/derivation.cc
+ec8041882240212920dc86fbd84c6e84  gdb/testsuite/gdb.cp/derivation.exp
 aa3b210cfd056b6a8835065c2c6aa791  gdb/testsuite/gdb.cp/destrprint.cc
-7ba8b4d7bc09f582a0be3fb5fb1fedae  gdb/testsuite/gdb.cp/destrprint.exp
+f918dd8888715d817f58b2b9cb763e34  gdb/testsuite/gdb.cp/destrprint.exp
+97010b6939f381917407a9ac5ba18965  gdb/testsuite/gdb.cp/dispcxx.cc
+dcd58061f94483892054ba7199c95473  gdb/testsuite/gdb.cp/dispcxx.exp
 19a4d6e0814c7fef5ee1e04e6c80e3ca  gdb/testsuite/gdb.cp/exception.cc
-cdfb46c51f07caafdd7ca552c6c76886  gdb/testsuite/gdb.cp/exception.exp
+eecbe4fbbc4dfd2f666b9a432d69f356  gdb/testsuite/gdb.cp/exception.exp
 cd7ab80eb7faf47d1688236fb6b83d20  gdb/testsuite/gdb.cp/expand-psymtabs-cxx.cc
-d84181b6bed2aabcbdc0a9f2e0b0fdc6  gdb/testsuite/gdb.cp/expand-psymtabs-cxx.exp
+5346b7838e130dddb3d29d9796be896f  gdb/testsuite/gdb.cp/expand-psymtabs-cxx.exp
 0a5c4b7ea3aab91b5453507421e4f36e  gdb/testsuite/gdb.cp/expand-sals.cc
 b19455917dcb5603354f24ddd636e311  gdb/testsuite/gdb.cp/expand-sals.exp
 c400c8adbae72b10eab3e55eb982f036  gdb/testsuite/gdb.cp/extern-c.cc
-2d10ffef6c496b0723292069fe9eb5fc  gdb/testsuite/gdb.cp/extern-c.exp
-90249c4f56d311c4be2946118a30a603  gdb/testsuite/gdb.cp/formatted-ref.cc
-a9391e2ebbab7b4a609c6db5a0575ab1  gdb/testsuite/gdb.cp/formatted-ref.exp
+3aa8c63cc9e9a9fe318eee502b254224  gdb/testsuite/gdb.cp/extern-c.exp
+2a0cbcdffaf12852396919e77e0e5795  gdb/testsuite/gdb.cp/formatted-ref.cc
+a73315e682960f23682b52020996619d  gdb/testsuite/gdb.cp/formatted-ref.exp
 33e6d7afd7c318893a5bbe2335a57cd8  gdb/testsuite/gdb.cp/fpointer.cc
-754b0ff7049403afe6c51c39d2c28739  gdb/testsuite/gdb.cp/fpointer.exp
+1490280723663595934a84daebaaa2c0  gdb/testsuite/gdb.cp/fpointer.exp
 d35ad7023fbe864b81f9469bbee7c048  gdb/testsuite/gdb.cp/gdb1355.cc
-27703e35ceb9a772691f2b9770ee4aa9  gdb/testsuite/gdb.cp/gdb1355.exp
+c494943ad30374c9d3ce5c09e619fe49  gdb/testsuite/gdb.cp/gdb1355.exp
 a583913fd6bbdaf5ee945909a550245f  gdb/testsuite/gdb.cp/gdb2384-base.cc
 4d3a0e516690442cf2e5e376efe9d9aa  gdb/testsuite/gdb.cp/gdb2384-base.h
 e346589a0c732871dcab4b1df23a9b6a  gdb/testsuite/gdb.cp/gdb2384.cc
-09340fc58cafb8d4d5aa9385726656fa  gdb/testsuite/gdb.cp/gdb2384.exp
+7e6e4bb945e7a4c967c25e797b498061  gdb/testsuite/gdb.cp/gdb2384.exp
 c7d7e21ab0e6b375a9da46c34f9d4acd  gdb/testsuite/gdb.cp/gdb2495.cc
-a9c727b7e689f346a7a027386e6f7fbd  gdb/testsuite/gdb.cp/gdb2495.exp
+b27994162c5ad8493d10791afc8dd81e  gdb/testsuite/gdb.cp/gdb2495.exp
 bec5831953699a0daf2274369c6f1ed1  gdb/testsuite/gdb.cp/hang.H
-ee80049302688233907a5f6dd23d0cc8  gdb/testsuite/gdb.cp/hang.exp
+8cdaeaf406568a3284ae191ddf06e5b3  gdb/testsuite/gdb.cp/hang.exp
 7356b291b65f3595630313cdf845d8dc  gdb/testsuite/gdb.cp/hang1.cc
 2e902d980a259189eabccce1cf8b8fbe  gdb/testsuite/gdb.cp/hang2.cc
 b4e27711f6e1b4b16df591b4acd7bdf1  gdb/testsuite/gdb.cp/hang3.cc
 b264ea32891fa137c80598c681b623df  gdb/testsuite/gdb.cp/infcall-dlopen-lib.cc
 58179c3b83fa6ee5735716ddfaaa473b  gdb/testsuite/gdb.cp/infcall-dlopen.cc
-97e7002390509744253c36276346077c  gdb/testsuite/gdb.cp/infcall-dlopen.exp
-086d35b23ddb2eb6d290b9eb704e7e3f  gdb/testsuite/gdb.cp/inherit.exp
+e287c3ed9811f67cca3429a1f54af04f  gdb/testsuite/gdb.cp/infcall-dlopen.exp
+24c44557b5a61e174dbdac5bdc84bf7b  gdb/testsuite/gdb.cp/inherit.exp
 61e293cd39db4588035377667c7bedf6  gdb/testsuite/gdb.cp/koenig.cc
-773f2e2900558688f2c359d5e6c5fff9  gdb/testsuite/gdb.cp/koenig.exp
+55a123b768fcd49e3c0a3b1b984a1ec7  gdb/testsuite/gdb.cp/koenig.exp
 584a50069ae4ae90c745978c0bb994db  gdb/testsuite/gdb.cp/local.cc
-efeee8baf9a84fc6730da667308637da  gdb/testsuite/gdb.cp/local.exp
+0f0013411153dd609aae09830f69cf67  gdb/testsuite/gdb.cp/local.exp
 923e8df050d19e1c25a51df276ffd8ae  gdb/testsuite/gdb.cp/m-data.cc
-f85e671ff42cdd6683c032c8f6b9a8f5  gdb/testsuite/gdb.cp/m-data.exp
-4be5057588a205ee87eaf40939ce9c5e  gdb/testsuite/gdb.cp/m-static.cc
-e9602438e985b40921561811d8e6a130  gdb/testsuite/gdb.cp/m-static.exp
+11a9ecabe75dcb889976d9dba2918e56  gdb/testsuite/gdb.cp/m-data.exp
+f76277acf4c4b29e3fca692cbf664910  gdb/testsuite/gdb.cp/m-static.cc
+0e4b12008fad25f05b0799c9d87f4177  gdb/testsuite/gdb.cp/m-static.exp
 a8ba70a5deabf0b697ffaac54e0563a1  gdb/testsuite/gdb.cp/m-static.h
 7844dbfb63d5ee815db3c14cb769c796  gdb/testsuite/gdb.cp/m-static1.cc
-79d2653ade7ec29f0d64f5383c8a534c  gdb/testsuite/gdb.cp/maint.exp
+9856b2cbbb3aaf458b471470f437d1b5  gdb/testsuite/gdb.cp/maint.exp
 f78534d3f0d2bb593cb77af10363735c  gdb/testsuite/gdb.cp/mb-ctor.cc
-86ce2f11d83ccdc46e0e5dd637d97d5d  gdb/testsuite/gdb.cp/mb-ctor.exp
-3908e5e06775b34f52b5a673bb99fb75  gdb/testsuite/gdb.cp/mb-inline.exp
+fffba988babde767c2bc34d11234296a  gdb/testsuite/gdb.cp/mb-ctor.exp
+ac0da3ed8ffe4f0c8165ccf6191658d8  gdb/testsuite/gdb.cp/mb-inline.exp
 9513f9b29cce56507780ec1dcbd77f04  gdb/testsuite/gdb.cp/mb-inline.h
 17ce8e764c735ff49a9a2a32d2fb5fd1  gdb/testsuite/gdb.cp/mb-inline1.cc
 c96e7626bd83c43554bc88609303b645  gdb/testsuite/gdb.cp/mb-inline2.cc
 4b1557ca2d2d17c8b4a96bf9fd97960a  gdb/testsuite/gdb.cp/mb-templates.cc
-c73b28831e507c94295e3afdcc23a795  gdb/testsuite/gdb.cp/mb-templates.exp
+8433284109b981bd29f98163ec9e2d59  gdb/testsuite/gdb.cp/mb-templates.exp
 4a48873485b7118af6688b0703ee5bf1  gdb/testsuite/gdb.cp/member-ptr.cc
-86bb252645390e91b9d6dd373ec91184  gdb/testsuite/gdb.cp/member-ptr.exp
+09e20e312b794c3c8c9fa02f597e86ac  gdb/testsuite/gdb.cp/member-ptr.exp
 85cbe9110f5e4bae2639caf301aaae91  gdb/testsuite/gdb.cp/meth-typedefs.cc
-73a67d3c8e9e3270204df74056fbc429  gdb/testsuite/gdb.cp/meth-typedefs.exp
+e1f2adbbaa5bf6d46928370d99eaf795  gdb/testsuite/gdb.cp/meth-typedefs.exp
 53d65c3b49d4d39b7a1c8ff6d68c8a65  gdb/testsuite/gdb.cp/method.cc
-ea23d836ee1b004625005382235b3785  gdb/testsuite/gdb.cp/method.exp
+b10ccd7caf6863e3b646f342a864c44c  gdb/testsuite/gdb.cp/method.exp
 4e402d8c3d4006f294952831e26242fa  gdb/testsuite/gdb.cp/method2.cc
-6f28bc01f757adc3e169ab15f8f9c1a1  gdb/testsuite/gdb.cp/method2.exp
+05154569cbb6bfa73d20ea2c9f2aef05  gdb/testsuite/gdb.cp/method2.exp
 0fff3be6cf88f205e673385cf6da6dbe  gdb/testsuite/gdb.cp/minsym-fallback-main.cc
 3f4374ebe971198e86372cee31d30e12  gdb/testsuite/gdb.cp/minsym-fallback.cc
-1c099dbdcdd303c6fc4553478af434ec  gdb/testsuite/gdb.cp/minsym-fallback.exp
+bb3c86b52d9f507fc5af4d4056b8fa33  gdb/testsuite/gdb.cp/minsym-fallback.exp
 112962e01930d2d7eae40312bf6aa92c  gdb/testsuite/gdb.cp/minsym-fallback.h
-69142a427bbee33df3ad3f297424c875  gdb/testsuite/gdb.cp/misc.cc
-6a4bc9ee5a1e03dd1155b7f5ea57ea56  gdb/testsuite/gdb.cp/misc.exp
+d030ef48a248cc7dd6d73e870e24e8b2  gdb/testsuite/gdb.cp/misc.cc
+a7a5aef46e4dde134c655c5a6458fcbb  gdb/testsuite/gdb.cp/misc.exp
 f33e9ec9e70b8b99ce29c558637c907e  gdb/testsuite/gdb.cp/namespace-enum-main.cc
 df11cb1835074902da6a4d0ad539ef4a  gdb/testsuite/gdb.cp/namespace-enum.cc
-0520f5055401bd975e9e62e713f20f67  gdb/testsuite/gdb.cp/namespace-enum.exp
+12f772195c5ed0c3d747faa462622012  gdb/testsuite/gdb.cp/namespace-enum.exp
 5aa100b253777f14d000cbac2d0a5c31  gdb/testsuite/gdb.cp/namespace-nested-import.cc
-0662816d4061c491516d0cee31fec06b  gdb/testsuite/gdb.cp/namespace-nested-import.exp
+cdfb6867728c255b54c834d918bf07ca  gdb/testsuite/gdb.cp/namespace-nested-import.exp
 a3c80a0b291239bc5f0921f3168bbe8e  gdb/testsuite/gdb.cp/namespace.cc
-1ca9d90c225d23c3f7f0c41546c7eb31  gdb/testsuite/gdb.cp/namespace.exp
+6267612aed555ecf787093eb8031b8e3  gdb/testsuite/gdb.cp/namespace.exp
 3889d833076ebcc0b125165ede88dfad  gdb/testsuite/gdb.cp/namespace1.cc
 6611bd0ab3aea442690836eba28e1f1a  gdb/testsuite/gdb.cp/nextoverthrow.cc
-f7ddbf439a428a45b694c0565a49e1a4  gdb/testsuite/gdb.cp/nextoverthrow.exp
+94b415ef27a9ccaf40725d991471418d  gdb/testsuite/gdb.cp/nextoverthrow.exp
 80962dd034e917ad6f3352f6dfb8f7e9  gdb/testsuite/gdb.cp/no-dmgl-verbose.cc
-7da118515f52ae6fe8c21ca7f50dce3c  gdb/testsuite/gdb.cp/no-dmgl-verbose.exp
+229766cd6583dfabab0fe81e4373eaeb  gdb/testsuite/gdb.cp/no-dmgl-verbose.exp
 1a25029e305f7ed81f9ee163177b3ed0  gdb/testsuite/gdb.cp/noparam.cc
 43c571b8998dc845d2c54c11e87a1897  gdb/testsuite/gdb.cp/noparam.exp
 e748c1a7bcb32dae45925a92fb033b45  gdb/testsuite/gdb.cp/nsdecl.cc
-b2d43c4b95aaf821cc07549c3d7bdd7c  gdb/testsuite/gdb.cp/nsdecl.exp
+a5f683c82c1723f82ab5fd9dbe827711  gdb/testsuite/gdb.cp/nsdecl.exp
 1a12a56eee1d93bdead22c3ca9edd58e  gdb/testsuite/gdb.cp/nsimport.cc
-25622ea28a8c0312cfcc0f0d41394e4f  gdb/testsuite/gdb.cp/nsimport.exp
+2241a4d7dcf8a938b1141bafba222e3c  gdb/testsuite/gdb.cp/nsimport.exp
 29f6b52a4e94c187aaf660090d99bd4f  gdb/testsuite/gdb.cp/nsnested.cc
-5fd4552826ed87db83d7f593839f26d6  gdb/testsuite/gdb.cp/nsnested.exp
+980a57a1ccdc7d46cd960a03aab0184c  gdb/testsuite/gdb.cp/nsnested.exp
 e6bbc12bae29b83d922b39735265dbfd  gdb/testsuite/gdb.cp/nsnoimports.cc
-833754a2ee28c6741915cb773076e688  gdb/testsuite/gdb.cp/nsnoimports.exp
+d9782e99f9460d0012578eab057af177  gdb/testsuite/gdb.cp/nsnoimports.exp
 274142a2ca86ad72d954a56bd01200c2  gdb/testsuite/gdb.cp/nsrecurs.cc
-1523ec4d98afa6cff9aa285c47ff05c0  gdb/testsuite/gdb.cp/nsrecurs.exp
+d8862bf205835179ea3921866a164a16  gdb/testsuite/gdb.cp/nsrecurs.exp
 31b4ca24a68ac8ff4bf148d6a8c8c72c  gdb/testsuite/gdb.cp/nsstress.cc
-93ba5756c77023982e783ced4dc7e2f8  gdb/testsuite/gdb.cp/nsstress.exp
+d0f888a9d3e1368efb173129dacbeef1  gdb/testsuite/gdb.cp/nsstress.exp
 4195d3718293b642b8ead0ca9e2e1448  gdb/testsuite/gdb.cp/nsusing.cc
-4d067f3cecaa8a5ad514c1ef95647862  gdb/testsuite/gdb.cp/nsusing.exp
+68f78f42cee3563a06a7152e84c87744  gdb/testsuite/gdb.cp/nsusing.exp
 1b230ab8da1b477237f0e769d5bd1af3  gdb/testsuite/gdb.cp/operator.cc
-c3b4f3dcb5fb7fe1b5bee182651adedb  gdb/testsuite/gdb.cp/operator.exp
+2f378f10cccb5a78afd7f3fa7df01af5  gdb/testsuite/gdb.cp/operator.exp
 e8df1818d38c994b33de7dbd3283948f  gdb/testsuite/gdb.cp/oranking.cc
-cd7e910e664b4d03a805b5e7d5791c5a  gdb/testsuite/gdb.cp/oranking.exp
+31e5ce0689b67654db945cdba477b763  gdb/testsuite/gdb.cp/oranking.exp
 1bed15ecebe58c2c607d9c0f626660a2  gdb/testsuite/gdb.cp/overload-const.cc
-dd33340a6a1bb0e57d2f1169b06908ff  gdb/testsuite/gdb.cp/overload-const.exp
-e16d0ac2815ee42f63099ee15e2873aa  gdb/testsuite/gdb.cp/overload.cc
-c957c899df867e10394153ed419908e3  gdb/testsuite/gdb.cp/overload.exp
-8299d5d16e9eb42b5415bed735e4f6de  gdb/testsuite/gdb.cp/ovldbreak.cc
-18b0e5ea97fbeb4ae97c32f37fc62231  gdb/testsuite/gdb.cp/ovldbreak.exp
-7752f1d0bbcb849a21e706620e0132f3  gdb/testsuite/gdb.cp/ovsrch.exp
+8134f4204bf2ca3e9c71d99ecfb4d6f4  gdb/testsuite/gdb.cp/overload-const.exp
+4037901cb4b71a80f0933b36d2e5cc5b  gdb/testsuite/gdb.cp/overload.cc
+adb42cfdf23480cae1f3f687ac2c71aa  gdb/testsuite/gdb.cp/overload.exp
+d735c2737237aa3cdaf44118af17689e  gdb/testsuite/gdb.cp/ovldbreak.cc
+dee59bd08ea266643d94e363ad22a08a  gdb/testsuite/gdb.cp/ovldbreak.exp
+f924defde29089258a7aeef94c0452dd  gdb/testsuite/gdb.cp/ovsrch.exp
 ef007c5597ade213901841c4490984f9  gdb/testsuite/gdb.cp/ovsrch.h
 1120c75b5549014f1d84cadb3f19395a  gdb/testsuite/gdb.cp/ovsrch1.cc
 96ac2a06479b87ae9bf510f8834ea448  gdb/testsuite/gdb.cp/ovsrch2.cc
 d2ecb7d485a2c2ec408697223a58a6fd  gdb/testsuite/gdb.cp/ovsrch3.cc
 09b63530a36c1dd03aa183fdf3a2b46b  gdb/testsuite/gdb.cp/ovsrch4.cc
 8ce85c90853b2ebcda79c0f1fa215e92  gdb/testsuite/gdb.cp/paren-type.cc
-13a1e842d3733a990b89840d03e69775  gdb/testsuite/gdb.cp/paren-type.exp
+9733a90c4fca2e62e3ee68fc37cfa9f4  gdb/testsuite/gdb.cp/paren-type.exp
 1103f6f412465727f1778f579e777e8b  gdb/testsuite/gdb.cp/pass-by-ref.cc
-7af98b9fc17413dd98524cf200dc13f6  gdb/testsuite/gdb.cp/pass-by-ref.exp
+89747063f2f9d49c6fda54ef866bc8b0  gdb/testsuite/gdb.cp/pass-by-ref.exp
 0a15a0bc517ee0acca862308c89de14b  gdb/testsuite/gdb.cp/pr-1023.cc
-c97ae8f375599d682c30f60fcdd750ce  gdb/testsuite/gdb.cp/pr-1023.exp
+1786db8041b32b653ac9cb054943f5aa  gdb/testsuite/gdb.cp/pr-1023.exp
 07fa7f618722031893284e4df11fe13e  gdb/testsuite/gdb.cp/pr-1210.cc
-c635c38ef59834b05769f3c749c84028  gdb/testsuite/gdb.cp/pr-1210.exp
+8d7cc61b5a8519d046f72e9be5f41ada  gdb/testsuite/gdb.cp/pr-1210.exp
 2e2303a56f2e08feb00dca5128fb212e  gdb/testsuite/gdb.cp/pr-574.cc
-3f8b870db9b4e2f623119d20b8d6f005  gdb/testsuite/gdb.cp/pr-574.exp
+8771f9a1867dfd5b612caec502704c3f  gdb/testsuite/gdb.cp/pr-574.exp
 77df3107df3b157b84ff642421e15048  gdb/testsuite/gdb.cp/pr10687.cc
-41cea8d167c6fcd5fcf8c98b99f5a180  gdb/testsuite/gdb.cp/pr10687.exp
+2d336b7ddce9549dc321bd58eadd2439  gdb/testsuite/gdb.cp/pr10687.exp
 effc2a9424706586edad04a9a28cfb3c  gdb/testsuite/gdb.cp/pr10728-x.cc
 c09026a63e9ed7f473a6fb1fd23c286a  gdb/testsuite/gdb.cp/pr10728-x.h
 f6a74a959db87bb044dcf86f24db098a  gdb/testsuite/gdb.cp/pr10728-y.cc
-7e018bb5e17cf28299ad8e1e4ae3e4a3  gdb/testsuite/gdb.cp/pr10728.exp
+aaa6b0525d6d68fb7eb16e5011626fb0  gdb/testsuite/gdb.cp/pr10728.exp
 55268c22c0ae3a64d769ce8101d70f11  gdb/testsuite/gdb.cp/pr12028.cc
-b590b89bb5cbafa70257d6f6e7be40da  gdb/testsuite/gdb.cp/pr12028.exp
+69767b5838bf203e689e518353bbd8d6  gdb/testsuite/gdb.cp/pr12028.exp
 2cfb40b86367c5e651147f419c05f8c7  gdb/testsuite/gdb.cp/pr9067.cc
-0fe6b72d0fbc55672297ec493d4307ba  gdb/testsuite/gdb.cp/pr9067.exp
+bb0642a557fe44574514cde22abbe350  gdb/testsuite/gdb.cp/pr9067.exp
 2d5a3f3b8c870b803e657d40ceae038e  gdb/testsuite/gdb.cp/pr9167.cc
-85baa0a00917af17e7e944853e63e97e  gdb/testsuite/gdb.cp/pr9167.exp
+235bf1da23d76a4d8a1db492d6cd8e88  gdb/testsuite/gdb.cp/pr9167.exp
 965732ac3771dcc604d8c29b2a498a49  gdb/testsuite/gdb.cp/pr9594.cc
 f972fe1b7fc6d142a289ffdd75bc0c70  gdb/testsuite/gdb.cp/pr9631.cc
-86a54d9dd375fd491805a299a52f064e  gdb/testsuite/gdb.cp/pr9631.exp
+76acf7758689f735ea786a482305c84a  gdb/testsuite/gdb.cp/pr9631.exp
 5d3f87699d8297f535c721dd47b8cc1b  gdb/testsuite/gdb.cp/printmethod.cc
-f121041e147514e46277e90645398fe1  gdb/testsuite/gdb.cp/printmethod.exp
-50c393902385f5cea1e37a6b9b1af958  gdb/testsuite/gdb.cp/psmang.exp
+bb30a624b1ca80c3177c6f00d25b7e64  gdb/testsuite/gdb.cp/printmethod.exp
+d6557c83f7bd607ea84fab17400cca03  gdb/testsuite/gdb.cp/psmang.exp
 043973e9d938c57a90e13540a5813b72  gdb/testsuite/gdb.cp/psmang1.cc
 9355968c4aa72e35b104224e7638477f  gdb/testsuite/gdb.cp/psmang2.cc
 eb53be379e0b27b74899eeeecf7650c9  gdb/testsuite/gdb.cp/psymtab-parameter.cc
-62cc12b6ff8cb93b38c962d5cd5d94b3  gdb/testsuite/gdb.cp/psymtab-parameter.exp
+e79c4b19f25e67a0c72d6abfed567c39  gdb/testsuite/gdb.cp/psymtab-parameter.exp
 b7d8820a549cc2832d8c5f8c2891db8c  gdb/testsuite/gdb.cp/ptype-cv-cp.cc
-e6a85b73d890f445ec848985e4defdc7  gdb/testsuite/gdb.cp/ptype-cv-cp.exp
-8703824589f32392e0f07a386eea1496  gdb/testsuite/gdb.cp/punctuator.exp
+3bd76a1aa7bf5777295175d2fcb53190  gdb/testsuite/gdb.cp/ptype-cv-cp.exp
+3b5275ca205a7089c8a6b9a9f2f2c128  gdb/testsuite/gdb.cp/punctuator.exp
 a32ba3d80d9714fb4b744c07d20220ca  gdb/testsuite/gdb.cp/re-set-overloaded.cc
-dfe482c17dc8b1b12455cbd2f93d667a  gdb/testsuite/gdb.cp/re-set-overloaded.exp
+ec8fc789d3e5b6c7e96a0ccbc90a3e2c  gdb/testsuite/gdb.cp/re-set-overloaded.exp
 aebea093c583d9c875e467939f757a99  gdb/testsuite/gdb.cp/readnow-language.cc
-0f86c3618ad3c7c08a1a2292ec3ede00  gdb/testsuite/gdb.cp/readnow-language.exp
-b62253abb34c84dd65a10ee4b6e83801  gdb/testsuite/gdb.cp/ref-params.cc
-eff0fef7ae143e5c70c38d2ada2803a5  gdb/testsuite/gdb.cp/ref-params.exp
-c68bb1482a7f9d9f46ff24339d93e519  gdb/testsuite/gdb.cp/ref-types.cc
-41b21b85a34fa02a356fe3b66d8ad37d  gdb/testsuite/gdb.cp/ref-types.exp
-ad7a76297eed0355adddbfc8a2cabfd3  gdb/testsuite/gdb.cp/rtti.exp
+8974abad9b1ac47ca60a4797a45dfca8  gdb/testsuite/gdb.cp/readnow-language.exp
+d62a78c54a60c25f4c0abb64e1f9482a  gdb/testsuite/gdb.cp/ref-params.cc
+592649d061ac1bccea0f3f9bce1bdcba  gdb/testsuite/gdb.cp/ref-params.exp
+734a6b503250c4a625ab0e6cb89ed688  gdb/testsuite/gdb.cp/ref-types.cc
+9510e4121a92696fd8abe4b6320673dc  gdb/testsuite/gdb.cp/ref-types.exp
+79f9aa5a28d6e85a2b6130bf6d89d2c8  gdb/testsuite/gdb.cp/rtti.exp
 25fa586f1ad014fbd8632238fe23bbc5  gdb/testsuite/gdb.cp/rtti.h
 c561b4037037e315e0e5b70af9e656a6  gdb/testsuite/gdb.cp/rtti1.cc
 8c621a488e70689ff23afd70e5de0cdc  gdb/testsuite/gdb.cp/rtti2.cc
 99eedf1581c7d74b79022a81adbff1f3  gdb/testsuite/gdb.cp/shadow.cc
-1df1820d06caa5447bdf0897557cccf0  gdb/testsuite/gdb.cp/shadow.exp
+11c401356895803cd0e863db45e71eb0  gdb/testsuite/gdb.cp/shadow.exp
 4d7c5d09c30f214bbfc41c7f2da979f2  gdb/testsuite/gdb.cp/smartp.cc
-bf4ca6468339f79a1b51df7656894539  gdb/testsuite/gdb.cp/smartp.exp
+955d41448ad92a32433fe66e71fbd8e5  gdb/testsuite/gdb.cp/smartp.exp
 ce1ed7dce1f3d689601bc7bebc0c04f1  gdb/testsuite/gdb.cp/static-method.cc
-05fed9fd1dc235446932030f67bb2cca  gdb/testsuite/gdb.cp/static-method.exp
+9526f5da14247dfa70bb32cf15d8258f  gdb/testsuite/gdb.cp/static-method.exp
 6880ef27b5eb3e7491dd5d7fa4a3299e  gdb/testsuite/gdb.cp/static-print-quit.cc
-e68d84ffd2204bb8467bccaf8598d8c7  gdb/testsuite/gdb.cp/static-print-quit.exp
+9a23a64f5f5b362b1908a522bddc2e4d  gdb/testsuite/gdb.cp/static-print-quit.exp
 f0e73f7a27a977ea55229e483e4e1db9  gdb/testsuite/gdb.cp/temargs.cc
-98af450c45d146eef632199320fe90f4  gdb/testsuite/gdb.cp/temargs.exp
-07f850395602bfbaf832a792b16b7d4c  gdb/testsuite/gdb.cp/templates.cc
-dec0c2146af78bccf9550a767402c3d9  gdb/testsuite/gdb.cp/templates.exp
+c7ff61858c5716715d847cbff5148ef9  gdb/testsuite/gdb.cp/temargs.exp
+de28a705c2ece829611f015aa519e070  gdb/testsuite/gdb.cp/templates.cc
+eb91351a31e8030043a39aae873551a1  gdb/testsuite/gdb.cp/templates.exp
 b308fcffbebecb72429b88954daa60f2  gdb/testsuite/gdb.cp/try_catch.cc
-5aecb08ca8ddba78ba98d873baa0a533  gdb/testsuite/gdb.cp/try_catch.exp
+535bc9bd1087ecbac950b0f36d1b6e12  gdb/testsuite/gdb.cp/try_catch.exp
 fde5198a2131e2e54bb89127166e669d  gdb/testsuite/gdb.cp/typedef-operator.cc
-83152ffcd393e67449b115d57fe3889e  gdb/testsuite/gdb.cp/typedef-operator.exp
+e87e3dbb8cf44df8708aa8686066c2dc  gdb/testsuite/gdb.cp/typedef-operator.exp
 77d9f374dc037f2de4e1551e1825be43  gdb/testsuite/gdb.cp/userdef.cc
-7d3fd44557a22522a8e0f9b57c1a1827  gdb/testsuite/gdb.cp/userdef.exp
+e7d3874cbc1707668aa033282bbfa7ff  gdb/testsuite/gdb.cp/userdef.exp
 feb819b43dbe4b5c8af03a9f050c6d04  gdb/testsuite/gdb.cp/virtbase.cc
-6d0d3e1823b0a77170cee07c27a3c500  gdb/testsuite/gdb.cp/virtbase.exp
-30a3a5e54ea57c61ce7c629468571eda  gdb/testsuite/gdb.cp/virtfunc.cc
-48595a2c3a820623f1ba1fdcf22f61bd  gdb/testsuite/gdb.cp/virtfunc.exp
+424324e3bbe54c5b7b7566e2512478f9  gdb/testsuite/gdb.cp/virtbase.exp
+ecd3a600647376048afead9c9862204e  gdb/testsuite/gdb.cp/virtfunc.cc
+838fa93ebda3dd8a21ca356269278756  gdb/testsuite/gdb.cp/virtfunc.exp
 ad3181fa561c621dfbe610ca97e8f2e8  gdb/testsuite/gdb.cp/virtfunc2.cc
-116859f8d355d914292a61c3533a9a61  gdb/testsuite/gdb.cp/virtfunc2.exp
-458090d4af10152e91d3d907d926a0c5  gdb/testsuite/gdb.disasm/Makefile.in
-9d84b32ac129c86420d40eb381a45803  gdb/testsuite/gdb.disasm/am33.exp
+b8a3cad5da8e442fae3b1138ff7493ea  gdb/testsuite/gdb.cp/virtfunc2.exp
+746cba1f69c9662de78147571ea8dc1e  gdb/testsuite/gdb.disasm/Makefile.in
+80b9f7d25e58e7d729ada2ba300e9db5  gdb/testsuite/gdb.disasm/am33.exp
 9d7ec73ab52e55ec1f83ec9e35523702  gdb/testsuite/gdb.disasm/am33.s
-2f3e27cfd17ae8b93ba8da0c9c3713ae  gdb/testsuite/gdb.disasm/h8300s.exp
+b2b33835e9eea0ec3cff1734a05befb2  gdb/testsuite/gdb.disasm/h8300s.exp
 cb76fc798d647b1ee8ba82f8ad9a5584  gdb/testsuite/gdb.disasm/h8300s.s
-1ac136453170a499ff9227b9223ad680  gdb/testsuite/gdb.disasm/hppa.exp
+153ad4bff2a3e83707ae86481424109d  gdb/testsuite/gdb.disasm/hppa.exp
 1531e9f2d8c5fe8c476a72c8621ac6f5  gdb/testsuite/gdb.disasm/hppa.s
 8df48a7abc7ba3009ba5f49d74d3c8f9  gdb/testsuite/gdb.disasm/mn10200.s
-46a2030bc2b5c72796d77523510a9f28  gdb/testsuite/gdb.disasm/mn10300.exp
+9264a167b57776172b234d9cb9692bbf  gdb/testsuite/gdb.disasm/mn10300.exp
 e02ce2008b0f7cd2c4bd231e78d46c8c  gdb/testsuite/gdb.disasm/mn10300.s
-73e9f6f9ffd2a2956810ab860c560232  gdb/testsuite/gdb.disasm/sh3.exp
+d3aa152a8a1e26e9047ecc874848105c  gdb/testsuite/gdb.disasm/sh3.exp
 e546b5aa7eb88708555537439de19900  gdb/testsuite/gdb.disasm/sh3.s
-de18fea00fcfd139e44c0c4a0cf0a542  gdb/testsuite/gdb.disasm/t01_mov.exp
+f4329e63369562ce3576b0074e0b2dd5  gdb/testsuite/gdb.disasm/t01_mov.exp
 b0c212de85c1acb1e14a705f4e40a6e9  gdb/testsuite/gdb.disasm/t01_mov.s
-1269dd8f04a2c689a3f682727dcf17ad  gdb/testsuite/gdb.disasm/t02_mova.exp
+6bb1e98b277d3d4bc97c3088578960e2  gdb/testsuite/gdb.disasm/t02_mova.exp
 fa6a2c9c9ae47e840be659d01a4750d8  gdb/testsuite/gdb.disasm/t02_mova.s
-6624c4fed782ccee62ce157f21a5dca5  gdb/testsuite/gdb.disasm/t03_add.exp
+3916d4d931784cc0b7e88261e6e43fb8  gdb/testsuite/gdb.disasm/t03_add.exp
 d20f8c266b73f0682f9b33a40641f923  gdb/testsuite/gdb.disasm/t03_add.s
-73a9a67a15a7bff91b3e2649b765d5a6  gdb/testsuite/gdb.disasm/t04_sub.exp
+d7c3f619338df924121fde464238e80b  gdb/testsuite/gdb.disasm/t04_sub.exp
 70b15852295559a37b00c60d55167563  gdb/testsuite/gdb.disasm/t04_sub.s
-f210a01e8c87836cadd8cb3c0311edd0  gdb/testsuite/gdb.disasm/t05_cmp.exp
+6f3a366963763d03c63f9e009b689ee8  gdb/testsuite/gdb.disasm/t05_cmp.exp
 13d33a0e2d93ee9c30330c55b1f370d1  gdb/testsuite/gdb.disasm/t05_cmp.s
-115ffc7031c659e59e30e32d115fb19c  gdb/testsuite/gdb.disasm/t06_ari2.exp
+7abdcc91fb809b430e28a5b2608416fe  gdb/testsuite/gdb.disasm/t06_ari2.exp
 9f2e1d0972a5fdf62643f281a80de560  gdb/testsuite/gdb.disasm/t06_ari2.s
-9f4585c1557869a05d4dc2a0e75210e3  gdb/testsuite/gdb.disasm/t07_ari3.exp
+9a1327659d692a58cb4522a822a6fc7f  gdb/testsuite/gdb.disasm/t07_ari3.exp
 c02c125e2e5010129e46e393e2cdef81  gdb/testsuite/gdb.disasm/t07_ari3.s
-7254e3c8b555fa3cb65f479d1be1e59e  gdb/testsuite/gdb.disasm/t08_or.exp
+7b6fc8cf34ada7228aa8864cb7d7243d  gdb/testsuite/gdb.disasm/t08_or.exp
 dbbb53f76688f2006bfe0b9c14fd4241  gdb/testsuite/gdb.disasm/t08_or.s
-a281979aff97b048c1976b0a0eabd906  gdb/testsuite/gdb.disasm/t09_xor.exp
+9b7345a67b5a2dd7ee68506d9e282d70  gdb/testsuite/gdb.disasm/t09_xor.exp
 82c2e284f051cc293b39b6ce0741aa89  gdb/testsuite/gdb.disasm/t09_xor.s
-10d79732ebcfbeed95bb43b03491e93c  gdb/testsuite/gdb.disasm/t10_and.exp
+cf5e933cdc7e06b8e2b6acb63b9eb4bb  gdb/testsuite/gdb.disasm/t10_and.exp
 a640da1752a98c70b4dae81fd6dc759b  gdb/testsuite/gdb.disasm/t10_and.s
-5217212d90eafb4dd2b6ce97ade43d71  gdb/testsuite/gdb.disasm/t11_logs.exp
+3d80edf89aa1ec69dac6df53d5ffb00a  gdb/testsuite/gdb.disasm/t11_logs.exp
 e14e8cc3e96d350310aaac726d4ea5e3  gdb/testsuite/gdb.disasm/t11_logs.s
-830e7d1403a2122cd032fc22bfd11786  gdb/testsuite/gdb.disasm/t12_bit.exp
+625db3de77a37377215f784b3933068e  gdb/testsuite/gdb.disasm/t12_bit.exp
 a36c2e9f8bf7f9d788db20927e18e921  gdb/testsuite/gdb.disasm/t12_bit.s
-45979ce40cd09b4e7de7e4c2f6896295  gdb/testsuite/gdb.disasm/t13_otr.exp
+b59e907afdeff0bd5aeda7af3e358261  gdb/testsuite/gdb.disasm/t13_otr.exp
 ec9241c34e56cabb8f4eadadad6c69d3  gdb/testsuite/gdb.disasm/t13_otr.s
-633f089ceb85d134e0bc7a2fa6d86b40  gdb/testsuite/gdb.dwarf2/Makefile.in
+18dd184180c93e4558b0007fae4998ec  gdb/testsuite/gdb.dwarf2/Makefile.in
 ddfa14dc620074102cb38bae9ea83eb0  gdb/testsuite/gdb.dwarf2/callframecfa.S
-28f45187ea62c8f33059408dc41b6e72  gdb/testsuite/gdb.dwarf2/callframecfa.exp
+19baa59bcf79a22f5801bec8dbdcd791  gdb/testsuite/gdb.dwarf2/callframecfa.exp
 8e5582a5e714518e3ecca7844dd67d30  gdb/testsuite/gdb.dwarf2/clztest.S
 a9d1814e91b1652544cf87629ae7d948  gdb/testsuite/gdb.dwarf2/clztest.c
 4f28bf472e77727bf7fb17bfdc81fce0  gdb/testsuite/gdb.dwarf2/clztest.exp
 26a15fb6b8f1f5551690876ba7285784  gdb/testsuite/gdb.dwarf2/dup-psym.S
-d0175f3be2b6a6e12b260a3021344395  gdb/testsuite/gdb.dwarf2/dup-psym.exp
-eefa1bec4c9907ac1bf84faaafcf0b08  gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.S
-d182b0aa21fc68fb36f7c5970d6c4436  gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.exp
+361cf41c619ce12391827473769ad72d  gdb/testsuite/gdb.dwarf2/dup-psym.exp
+b09f1aa3c822418d661abf85a096ee85  gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.S
+3247c045cd6b57611452afe28068e994  gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.exp
 edf31c07cec1905df97764fdfefe3814  gdb/testsuite/gdb.dwarf2/dw2-anonymous-func.S
-116286d07fbbf793c1dd36317438f775  gdb/testsuite/gdb.dwarf2/dw2-anonymous-func.exp
-d66df7e003c6414a2a0b397e9cd65b8c  gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.S
-39bfaf93e0b14f7e1930014f2d139c54  gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.exp
+63aa813860e227e76da02cb7001f7159  gdb/testsuite/gdb.dwarf2/dw2-anonymous-func.exp
+4ce992c210903f11e10af9934b4dfeb4  gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.S
+8ea9f559c532970eaaf323e1d8ab6969  gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.exp
 7a772d699f6144e486879a85f34e276a  gdb/testsuite/gdb.dwarf2/dw2-basic.S
-8b7ce12bcf7e2dc7e678645139c8c843  gdb/testsuite/gdb.dwarf2/dw2-basic.exp
+9dd9f0faf635b5f710cf579563bdfed6  gdb/testsuite/gdb.dwarf2/dw2-basic.exp
 7da36a5abb12b69fe412c9c8d88f9267  gdb/testsuite/gdb.dwarf2/dw2-case-insensitive-debug.S
 01a90e7fea078737a2f10c557563ea37  gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.c
-32892443a23c09194a83b0d93fb253df  gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.exp
+a1e1e7fe0e1b193b1b46d1e9a94aa2a8  gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.exp
 523733567d4c0793b6178bb2b68134fe  gdb/testsuite/gdb.dwarf2/dw2-compressed.S
-ed88a85d32db08dfbaf1a9964b74b5c2  gdb/testsuite/gdb.dwarf2/dw2-compressed.exp
+e8948f3f6ea0d41462e2e4171bede531  gdb/testsuite/gdb.dwarf2/dw2-compressed.exp
 b6f4083666de6cc4596eb964949e7453  gdb/testsuite/gdb.dwarf2/dw2-const.S
-b1a3b30249aea05cead6faf8e2304013  gdb/testsuite/gdb.dwarf2/dw2-const.exp
+e50ec62cfebcbefdc5bc0d143f44d09d  gdb/testsuite/gdb.dwarf2/dw2-const.exp
 76e93132aad406cfc4abd24ed0a99e70  gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static-main.c
 b1a15e7c239b0d7bd10409c4846b35e9  gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.S
-5059ea7d50046ecb4994f7c723c022c8  gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.exp
+5709e9ee909aca6d5d7b1647351be50a  gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.exp
 e99a5e374e0baa879a079104debceddc  gdb/testsuite/gdb.dwarf2/dw2-cu-size.S
-da39d1db8dbf3fabbe276b85853786bd  gdb/testsuite/gdb.dwarf2/dw2-cu-size.exp
-62945b77b1af2bf8b06930fcc0d9c60c  gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.S
-b87df4053d895219ae5cf8c107343bff  gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.exp
+4beca2bca5edc7dc057f8fd7425862c6  gdb/testsuite/gdb.dwarf2/dw2-cu-size.exp
+f4c5975de93eb8e2b203297216feae0d  gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.S
+05276aeb0716bfcc43ba59f48822d8e3  gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.exp
 b2be5f1cd5e7548723b7d1ab175098ba  gdb/testsuite/gdb.dwarf2/dw2-empty-namespace.S
-e5162d3f616275f6be8a0ad4c76ad692  gdb/testsuite/gdb.dwarf2/dw2-empty-namespace.exp
-2baf4fed784e405058543909c16ca70d  gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.S
-3cae3e0da889eb4da4ce7708a6407319  gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.exp
+64419745cc51d785cfc9ad62c0ca5e4c  gdb/testsuite/gdb.dwarf2/dw2-empty-namespace.exp
+439d9c15e104f16b691d5bc402c5e89b  gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.S
+80be638c733819bde1dc9cad729bd1bc  gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.exp
 d62202f00938dbd35d78b93aae8b4386  gdb/testsuite/gdb.dwarf2/dw2-entry-value-main.c
-5945773c3c7cea71be764e36ec16bd77  gdb/testsuite/gdb.dwarf2/dw2-entry-value.S
+f39c69847c6e704c813cba4c73012bf2  gdb/testsuite/gdb.dwarf2/dw2-entry-value.S
 878ecd7e1a560933192aef13c0b6a15d  gdb/testsuite/gdb.dwarf2/dw2-entry-value.exp
 fccdaa34fe2dc78b8ca101bd61d79b5f  gdb/testsuite/gdb.dwarf2/dw2-filename.S
-2666d51ecc771d673f796b4c23827ef1  gdb/testsuite/gdb.dwarf2/dw2-filename.exp
+79a143e5601c7c02c073b28dadf022c2  gdb/testsuite/gdb.dwarf2/dw2-filename.exp
+eed5e04e46c250a6f20d757477186e21  gdb/testsuite/gdb.dwarf2/dw2-icc-opaque.S
+779e91d0d13abef9114b46ec836ee649  gdb/testsuite/gdb.dwarf2/dw2-icc-opaque.exp
 8a6741c1120d351c216d6831624420d2  gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter-debug.S
 9fc5123ee98b74e8afd46d39a9f752d3  gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.c
-b4f3f185b87a7d52daa698f743cee71e  gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.exp
+30fc3dd569495a32bc74235b2a178beb  gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.exp
 139e16dd104f4e95a967a4f69391de3e  gdb/testsuite/gdb.dwarf2/dw2-inheritance.S
-8138bebd8edff8c563948343026a8021  gdb/testsuite/gdb.dwarf2/dw2-inheritance.exp
+2294c9822bc929c050b4762ba2e050b0  gdb/testsuite/gdb.dwarf2/dw2-inheritance.exp
+f3bcdd888b7b4f49eb2f2b0eb8c53e6f  gdb/testsuite/gdb.dwarf2/dw2-inline-break.S
+90c3617822e549223aae4dd2c39f5171  gdb/testsuite/gdb.dwarf2/dw2-inline-break.exp
 ca4a6a1f8c37811a8692884c36b7946b  gdb/testsuite/gdb.dwarf2/dw2-inline-param-main.c
 ba8e8e1e78a306d1792059c36e8fac5e  gdb/testsuite/gdb.dwarf2/dw2-inline-param.S
-cbf4e87285196ace5dc9c7bc4e20dbd4  gdb/testsuite/gdb.dwarf2/dw2-inline-param.exp
-1fadbef009b8ce82b96588b465662865  gdb/testsuite/gdb.dwarf2/dw2-intercu.S
-d446013739cd835311b2627b7f0096ec  gdb/testsuite/gdb.dwarf2/dw2-intercu.exp
+9d210672223fe39aa549f252f5f144d3  gdb/testsuite/gdb.dwarf2/dw2-inline-param.exp
+1e41f0d37f970241efe75ed70c36141e  gdb/testsuite/gdb.dwarf2/dw2-intercu.S
+95295ac4db7fa3eb5c6dd9bccb379213  gdb/testsuite/gdb.dwarf2/dw2-intercu.exp
 4791dc34f0ad2509859e9fa0453d644e  gdb/testsuite/gdb.dwarf2/dw2-intermix.S
-e420e076f6d360a5ee15f78354d5b842  gdb/testsuite/gdb.dwarf2/dw2-intermix.exp
+2e690aa9e160e325c0e12b9f3cd13ae5  gdb/testsuite/gdb.dwarf2/dw2-intermix.exp
 bd01a72cc8dc14a160780a1b2c1b62eb  gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust-main.cc
 c8105816cb19ec2ba74a71b3512205cd  gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.S
-a00c574254247d8756fd2812af3a36b4  gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.exp
-c61f7ba3854722a0c983d4bb944184ef  gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.S
-4f1eb58d1dc1c28a74a3b5323570d563  gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.exp
+47a49b8e3e2f0cc55c63f47ada109bd8  gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.exp
+6775cbd5c720193274102133dac506fd  gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.S
+0daac75c4b348fa0e99024dcb2b0c884  gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.exp
+435563970c881f1b2d92c773b8ff6e29  gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.S
+2f117af7ab5f4441e144ba156fb8208d  gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.exp
+83bec53e8985865f5c6aa2c56a068c9a  gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.S
+545c3622302db8b42422d10b55f1234e  gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.exp
 161f412d92d1b82807466849ce3ab4f1  gdb/testsuite/gdb.dwarf2/dw2-noloc-main.c
 7ddd3ec4969ecc7aaffe512e2b781e6d  gdb/testsuite/gdb.dwarf2/dw2-noloc.S
-67eada58fd1584aaedf0bb1c13a3a9d8  gdb/testsuite/gdb.dwarf2/dw2-noloc.exp
+83987212e410669b065fcd710eb54c7e  gdb/testsuite/gdb.dwarf2/dw2-noloc.exp
 0a93ea14a573f74b824b642ae553ecd4  gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-inner.S
 efae29d8c63a0199a17ac9e0c814076f  gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-outer.S
-4f76c960d79e5d810cb726a822aa2cf0  gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap.exp
-89a589ce149a5247a2b4e163a4fead66  gdb/testsuite/gdb.dwarf2/dw2-op-call.S
-3da0d2d4dedcf3f7aeadf4c447e108d9  gdb/testsuite/gdb.dwarf2/dw2-op-call.exp
+361a5dce83594f91cd61919132d861b0  gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap.exp
+d131d27cbf4d181b6683a5fa8a9d8d8f  gdb/testsuite/gdb.dwarf2/dw2-op-call.S
+e802cbd17d90d410dd68c8d61c543f3e  gdb/testsuite/gdb.dwarf2/dw2-op-call.exp
 ca064d08860bd6b939fabd55108e8b20  gdb/testsuite/gdb.dwarf2/dw2-op-stack-value.S
-ea8364f3a88f4c54890ac73ad0acb55d  gdb/testsuite/gdb.dwarf2/dw2-op-stack-value.exp
+4e087839b9d92fa4d0572a218034b17c  gdb/testsuite/gdb.dwarf2/dw2-op-stack-value.exp
 d62202f00938dbd35d78b93aae8b4386  gdb/testsuite/gdb.dwarf2/dw2-param-error-main.c
-b2919b11fca2bcd89fee5ce43f8d7862  gdb/testsuite/gdb.dwarf2/dw2-param-error.S
-bf5e63b64ca8e66c58b2a12e0289c58e  gdb/testsuite/gdb.dwarf2/dw2-param-error.exp
+80f22f2e729b2588d13a25eef81297a3  gdb/testsuite/gdb.dwarf2/dw2-param-error.S
+c0ad51d8b898fee0ae849f9616875027  gdb/testsuite/gdb.dwarf2/dw2-param-error.exp
 0903b57d8b7d357a9798bc3092ce09fe  gdb/testsuite/gdb.dwarf2/dw2-producer.S
-8c53d93f66256d90e3f8c8a61ed18d5e  gdb/testsuite/gdb.dwarf2/dw2-producer.exp
+89b543c8b99211a7c7d48e906e2c3876  gdb/testsuite/gdb.dwarf2/dw2-producer.exp
 d4e84f15aec87d488974561a1b87ad14  gdb/testsuite/gdb.dwarf2/dw2-ranges.c
-5827b42cc6cf4edf7f198e5f34e52326  gdb/testsuite/gdb.dwarf2/dw2-ranges.exp
+837c92e9ca62abb4a9dd62be381ef920  gdb/testsuite/gdb.dwarf2/dw2-ranges.exp
 27bc3dbfdec6b67b6b3b7856a98e73b5  gdb/testsuite/gdb.dwarf2/dw2-ranges2.c
 c8aaafd961c0c20ef1ec0d26b8772789  gdb/testsuite/gdb.dwarf2/dw2-ranges3.c
 a77f6cd567f8f8b9e3830660a1f3b38d  gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame-func.c
 0cd392ef8a7b003940cdf73f10a7e45e  gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame-main.c
 830960957906756a8b2a9018fd5a907e  gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame.S
-6ae20b5999d71ee26a4e7ddeae13cce3  gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame.exp
+47f18f53d5de4894367d80132c6057c0  gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame.exp
 84e65b047f918c602de2d1bfcd5ffa99  gdb/testsuite/gdb.dwarf2/dw2-restore.S
-ae524f2cf3c5507e30aa64f13592646a  gdb/testsuite/gdb.dwarf2/dw2-restore.exp
+3c0c3740ff9f1ad3c7e53d275f282177  gdb/testsuite/gdb.dwarf2/dw2-restore.exp
 e4631102a1452f8056ed07c7bbdbec0e  gdb/testsuite/gdb.dwarf2/dw2-simple-locdesc.S
-86c440d184ecfcf53776081bb136e4d1  gdb/testsuite/gdb.dwarf2/dw2-simple-locdesc.exp
-60dd9a7e5d9145f3cfb66c044049b2c7  gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S
+37b289c4a92fd821cdebeb504c00b5f4  gdb/testsuite/gdb.dwarf2/dw2-simple-locdesc.exp
+43186d807ad5d7289b498ad2914b41e9  gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S
 1165095c2a4f65fe1518f1d0765262cd  gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.c
-ab2ffa2a8bd854792a7ca96e02fea488  gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.exp
-48ee70c76042f1056be35898b92a9107  gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.S
-b40d05a058c6ce2597d2f4d00614d606  gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.exp
+f279fcce5edf8eead2441f430550a8f4  gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.exp
+63ebfa7040ed44393fe50ce981d7004f  gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.S
+3b09fd2cbcca80c32723cb66b4168ad5  gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.exp
 6c224ca4e118ad870614f41c56cd3799  gdb/testsuite/gdb.dwarf2/dw2-strp.S
-028706a8a610148aa135f262e944c4af  gdb/testsuite/gdb.dwarf2/dw2-strp.exp
+dc0cc57da9e52fd4c742c061fc47d00e  gdb/testsuite/gdb.dwarf2/dw2-strp.exp
 fa2a38cc4b53f23bc76cf6bd848cc5bb  gdb/testsuite/gdb.dwarf2/dw2-unresolved-main.c
 1586e1cbb1b9b96f1e1525b100548ba2  gdb/testsuite/gdb.dwarf2/dw2-unresolved.S
 979978b73e04eb30ea95cbf4a4f462b7  gdb/testsuite/gdb.dwarf2/dw2-unresolved.exp
 de8c05cec6f89004616408911b1c6e47  gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.S
-b5a1ba9dd61908d9072b817232369fba  gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.exp
-62c3caaba1984c9c00d3008d876a0f52  gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.S
-6f858fa303a21c06b13fee2c799b027c  gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.exp
+7eadd3c3698ecc59e160d9fe441d76ca  gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.exp
+013d105bb31e1b8a3bf3c69c9b4c5edf  gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.S
+ae2a9c8ce8cfde0b1d58c1e354483a18  gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.exp
 84dfdabac6f10bd8e20f5ddf6e5e20a4  gdb/testsuite/gdb.dwarf2/dw4-sig-types-b.cc
 daf7275b48424acdfc659414338f304f  gdb/testsuite/gdb.dwarf2/dw4-sig-types.cc
-bd88366af4060a2de78cec444a5a2fc1  gdb/testsuite/gdb.dwarf2/dw4-sig-types.exp
+165ce710f4fd58f871ea1c362553b5eb  gdb/testsuite/gdb.dwarf2/dw4-sig-types.exp
 66dff7abb42a5b191f3df1fb1617237c  gdb/testsuite/gdb.dwarf2/dw4-sig-types.h
 54b8a6b0ff52958ee33024c56b9bd2bd  gdb/testsuite/gdb.dwarf2/file1.txt
+9a8366e02f9f1449b6b97c8ca8393f5e  gdb/testsuite/gdb.dwarf2/fission-base.S
+b7ba510b2eca69db1394e2abc8a22060  gdb/testsuite/gdb.dwarf2/fission-base.c
+57da1e40ac983aa6b2152aba1ce431f3  gdb/testsuite/gdb.dwarf2/fission-base.exp
+5ce7a954dd4ada3c11bfda6f303210e2  gdb/testsuite/gdb.dwarf2/fission-reread.S
+baefaf5aa6f37aa33fe9d3c296d80d6d  gdb/testsuite/gdb.dwarf2/fission-reread.exp
 f9dd110a93343bf28dd23a85350f682c  gdb/testsuite/gdb.dwarf2/implptr-64bit.S
-80cde9c1ae4e53cd561b5787058e526d  gdb/testsuite/gdb.dwarf2/implptr-64bit.exp
-1f75e0165eaf24909e47128ca2dc44be  gdb/testsuite/gdb.dwarf2/implptr-optimized-out.S
-cd807354e8b93408f5f39f4ac781d9a8  gdb/testsuite/gdb.dwarf2/implptr-optimized-out.exp
+c8e475aec3fee7291942ed4713f0c133  gdb/testsuite/gdb.dwarf2/implptr-64bit.exp
+39847cd281a4c126e60a5d3762ac0d87  gdb/testsuite/gdb.dwarf2/implptr-optimized-out.S
+9d620be63b2dab2f40246ed76219c842  gdb/testsuite/gdb.dwarf2/implptr-optimized-out.exp
 0c1cac296d9825462dfe00fa9ed44889  gdb/testsuite/gdb.dwarf2/implptr.S
 0bc1002d3f4244f751f478eef2475011  gdb/testsuite/gdb.dwarf2/implptr.c
-d48f214c7b46d5f1078cd832819f1dce  gdb/testsuite/gdb.dwarf2/implptr.exp
+8d5fbf11788d66f91950ea72f97f9fa2  gdb/testsuite/gdb.dwarf2/implptr.exp
 616311bbe745ede967b9e582d511a108  gdb/testsuite/gdb.dwarf2/mac-fileno.S
-248b02979bd526e752a61d293aa86277  gdb/testsuite/gdb.dwarf2/mac-fileno.exp
+c4ec679e427f1dffdad6897fa99ea447  gdb/testsuite/gdb.dwarf2/mac-fileno.exp
 bd44fa83a6f67cbc268ddc23498aa7a0  gdb/testsuite/gdb.dwarf2/main.c
-5ba496d8ba68fcdc6be7a6a1dffe9ed5  gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.S
-4a32a683f0e4c5d595297c9840eeaecb  gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.exp
+33f75de3bb7af5003a94a57b24c91333  gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.S
+fc7f888173f83422e329fb6deacad4dd  gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.exp
 439a4a03858e437a18abe9651b180a93  gdb/testsuite/gdb.dwarf2/pieces.S
 f06c7eb988b94d342670a615bfa41ae9  gdb/testsuite/gdb.dwarf2/pieces.c
-b56cffca5685c7dc4ed8ead89ec95851  gdb/testsuite/gdb.dwarf2/pieces.exp
+3c88d7f9735c076b5a2a8e21a95766aa  gdb/testsuite/gdb.dwarf2/pieces.exp
 075ee4da88be6ff4297e6d6b44b113a1  gdb/testsuite/gdb.dwarf2/pr10770.c
-b7a159465214ec303fc788effa75c6fc  gdb/testsuite/gdb.dwarf2/pr10770.exp
-775015af088fe5f61d9b18cf289161b8  gdb/testsuite/gdb.dwarf2/pr11465.S
-426da78585b09251c1829aaee9fe9b67  gdb/testsuite/gdb.dwarf2/pr11465.exp
+5ef865d3aaf3cdcb71a48f890547826d  gdb/testsuite/gdb.dwarf2/pr10770.exp
+b0f92000fcb964e8968eaae86fe387da  gdb/testsuite/gdb.dwarf2/pr11465.S
+7cf67ca5f360db9cc63b253bbba92665  gdb/testsuite/gdb.dwarf2/pr11465.exp
+da45047e8385bdbd165e0885ddbdc678  gdb/testsuite/gdb.dwarf2/pr13961.S
+2c10f142ad15109024c1974e17fc248f  gdb/testsuite/gdb.dwarf2/pr13961.exp
 4f171b3645066239a7cd5c79acb92fcf  gdb/testsuite/gdb.dwarf2/typeddwarf-amd64.S
 44e142da47270d6a9d290ed491227d6c  gdb/testsuite/gdb.dwarf2/typeddwarf.S
 221371fc128c0ff0bd3ab15a074b243e  gdb/testsuite/gdb.dwarf2/typeddwarf.c
 61fcc08e6d35a1e3818cddeb40748a5a  gdb/testsuite/gdb.dwarf2/typeddwarf.exp
 98031ac5021a3fcf53e72ba206047bf6  gdb/testsuite/gdb.dwarf2/valop.S
-e7f188d29a7c88229a0c70038fcaab41  gdb/testsuite/gdb.dwarf2/valop.exp
+8e7eda9e8bde3c52ef2eb997efdf4b74  gdb/testsuite/gdb.dwarf2/valop.exp
 9896b7e4c30d046d8ca2c693082480a9  gdb/testsuite/gdb.dwarf2/watch-notconst.c
 8b9076b7f3483dc2d2df7a2de8345ea8  gdb/testsuite/gdb.dwarf2/watch-notconst.exp
 09c1401844afb7204b8acbf1ffc91da7  gdb/testsuite/gdb.dwarf2/watch-notconst2.S
 54c6ba58700ad608eb64e964887995ef  gdb/testsuite/gdb.dwarf2/watch-notconst2.c
-d3d48d089211172c0ee3426bfdba9e5e  gdb/testsuite/gdb.fortran/Makefile.in
-dd93063921e678dce679dd1daf8574bc  gdb/testsuite/gdb.fortran/array-element.exp
+2680218cff1dcedb79f1cd8ddfe19e97  gdb/testsuite/gdb.fortran/Makefile.in
+7ebfdf2e686ae14b913b1fd2f2384f5f  gdb/testsuite/gdb.fortran/array-element.exp
 f623b76d91ce1c9342f9458d39edc61e  gdb/testsuite/gdb.fortran/array-element.f
-efa3d072a986d9bf95bada88dcc290a6  gdb/testsuite/gdb.fortran/charset.exp
+bda040e2df55853adfff83d302b36c8f  gdb/testsuite/gdb.fortran/charset.exp
 95708d64a7ce14d26ec039f9ec0af921  gdb/testsuite/gdb.fortran/charset.f90
-891f7a915f00dea01e58f9b661a6c0ac  gdb/testsuite/gdb.fortran/complex.exp
+842d6a40fd306ded5883af5280983c92  gdb/testsuite/gdb.fortran/complex.exp
 59707d6d897d0253f63bc30237069f0f  gdb/testsuite/gdb.fortran/complex.f
-9860f61fdfd9f2931c19c284e0b86bea  gdb/testsuite/gdb.fortran/derived-type.exp
+4819cf208464fb56691ed79ae886f7c9  gdb/testsuite/gdb.fortran/derived-type.exp
 34234caf65a3392e8f9981e8dcdb620a  gdb/testsuite/gdb.fortran/derived-type.f90
-c7229771f8fee081dd0d4b867852feb7  gdb/testsuite/gdb.fortran/exprs.exp
+c4fc8716baeb6a481a12d6659e5850f4  gdb/testsuite/gdb.fortran/exprs.exp
 e67ce43b8d9ce9e510388ee90bc03b9a  gdb/testsuite/gdb.fortran/library-module-lib.f90
 e8d7564f08e6785df9620e950193f94e  gdb/testsuite/gdb.fortran/library-module-main.f90
-282f23493f275bda7395701d2059e123  gdb/testsuite/gdb.fortran/library-module.exp
-37535d053687a02510c1eb976a1c4d61  gdb/testsuite/gdb.fortran/logical.exp
+39cb5a3115a2526d2c3cee5d71a5095b  gdb/testsuite/gdb.fortran/library-module.exp
+35a819c6a5e901577c8452836984a813  gdb/testsuite/gdb.fortran/logical.exp
 74961df743f4be1bc95ec7d349b0fbc0  gdb/testsuite/gdb.fortran/logical.f90
-491f0f52ea5eecf45dba591b2b65728f  gdb/testsuite/gdb.fortran/module.exp
+7e4535e5f05fff8acc3dfb6450e3383e  gdb/testsuite/gdb.fortran/module.exp
 a9da8385acc1e84508c8801b1c154730  gdb/testsuite/gdb.fortran/module.f90
-5c4448bc3116f875fc60b7b3bd755a9a  gdb/testsuite/gdb.fortran/multi-dim.exp
+f40c0ecf3ace598b75104f59388e627e  gdb/testsuite/gdb.fortran/multi-dim.exp
 6ceb0081f0c73c52f181d96958512759  gdb/testsuite/gdb.fortran/multi-dim.f90
-7edff5d626d99902eda7fec7bf6679de  gdb/testsuite/gdb.fortran/subarray.exp
+204d233a23de2aa481f8f8fca5d85679  gdb/testsuite/gdb.fortran/subarray.exp
 c155ee54fada3930b93f8e45012d89e0  gdb/testsuite/gdb.fortran/subarray.f
-bfcb88a04306364a61f3703733da21a2  gdb/testsuite/gdb.fortran/types.exp
-5711b40a7e71013826fe7883cd6b33bf  gdb/testsuite/gdb.gdb/complaints.exp
-be36d24afb34ae010e31130fe59fb5fc  gdb/testsuite/gdb.gdb/observer.exp
-17bf0d85014d1e7edece4a70c5b18954  gdb/testsuite/gdb.gdb/selftest.exp
-46c6a9491c07f6b83623d3d5216da7e4  gdb/testsuite/gdb.gdb/xfullpath.exp
-887bac0bf664d8698f5405b5c2e7a084  gdb/testsuite/gdb.hp/Makefile.in
-1b7a586321e26723cafc92e147fad805  gdb/testsuite/gdb.hp/gdb.aCC/Makefile.in
+5db5ac8781ea7a2412217b9fa6446df9  gdb/testsuite/gdb.fortran/types.exp
+e0a3036efe2225aa920aa4c42bcbca03  gdb/testsuite/gdb.gdb/complaints.exp
+c9a98438bf7c4dd338bf237ef53899c5  gdb/testsuite/gdb.gdb/observer.exp
+8959eec8e436d6805d4c178f553e8c3b  gdb/testsuite/gdb.gdb/selftest.exp
+e516b57b0263907f69899c94dc3a2133  gdb/testsuite/gdb.gdb/xfullpath.exp
+47d5bb179a9aa71b0a055cda6305669e  gdb/testsuite/gdb.go/Makefile.in
+1ea1091045601aae918e3b67f6065d97  gdb/testsuite/gdb.go/basic-types.exp
+ae3c131e221f74838e8eec0a4e48a507  gdb/testsuite/gdb.go/chan.exp
+113f4cb954c18df6f26abddb56a25eda  gdb/testsuite/gdb.go/chan.go
+700009cb69fec726477475a910fe6b8b  gdb/testsuite/gdb.go/handcall.exp
+5f84057605287dc236c63d56aab77a82  gdb/testsuite/gdb.go/handcall.go
+eed9b37f3dca5b47bca8167a720cbf6b  gdb/testsuite/gdb.go/hello.exp
+139e82079c017f6cf42dfe490c1e06f1  gdb/testsuite/gdb.go/hello.go
+90ef3b83017f7980eeeab149a28c6573  gdb/testsuite/gdb.go/integers.exp
+3bf59fe4ee125fed62e361a4235f302d  gdb/testsuite/gdb.go/integers.go
+48e3c6c1ce83797fee8b439790b3ee0f  gdb/testsuite/gdb.go/methods.exp
+81b7ed6cb92c627d245bd2efc4b953b9  gdb/testsuite/gdb.go/methods.go
+c4d9ea4cd41d5307b28b231a335be32f  gdb/testsuite/gdb.go/package.exp
+963c02de7da3fe31926fec771633a373  gdb/testsuite/gdb.go/package1.go
+54037d4dd926eea5d4a2425fa18c0312  gdb/testsuite/gdb.go/package2.go
+0afd6ecacd48ad35cf8773ef40eeed65  gdb/testsuite/gdb.go/print.exp
+52dcee3d3eadb52b105f362614bd67fe  gdb/testsuite/gdb.go/strings.exp
+ea5ff936bcbd68cbc91cb8771230db91  gdb/testsuite/gdb.go/strings.go
+fd8ad390b364f9430ecbde64a1671400  gdb/testsuite/gdb.go/types.exp
+710eb55c40980ff44f412caea4f71ff5  gdb/testsuite/gdb.go/types.go
+7c609ff90a4a976d95a57a7cfd4635fd  gdb/testsuite/gdb.go/unsafe.exp
+b047847a5183b4462b5b135cfd964543  gdb/testsuite/gdb.go/unsafe.go
+ee2857ce9702dc8528ce9192b7a936e2  gdb/testsuite/gdb.go/Makefile
+05e2f4d5c2e07a495b1df3561f316681  gdb/testsuite/gdb.hp/Makefile.in
+be7678b7be909ac4a437af66e2775493  gdb/testsuite/gdb.hp/gdb.aCC/Makefile.in
 14d680b2bf3bca9fb3da08c05ebca928  gdb/testsuite/gdb.hp/gdb.aCC/exception.exp
 cc53bf59d2a9c47d276d1aac84bd0f50  gdb/testsuite/gdb.hp/gdb.aCC/optimize.c
-71d95df5feac631c892478f71a764f99  gdb/testsuite/gdb.hp/gdb.aCC/optimize.exp
-2fefc4288b99b3e947ca1e21a82fc5ce  gdb/testsuite/gdb.hp/gdb.aCC/run.c
-c68956bf2584b071c608ed55bd06e159  gdb/testsuite/gdb.hp/gdb.aCC/watch-cmd.exp
-fe60585fbdcde25979df0572db4b83b8  gdb/testsuite/gdb.hp/gdb.base-hp/Makefile.in
-14c754799fcbf620f6a249cbc446e003  gdb/testsuite/gdb.hp/gdb.base-hp/callfwmall.c
-45b2076ecd09b8f1e2379bc14ffa2053  gdb/testsuite/gdb.hp/gdb.base-hp/callfwmall.exp
+93b501d81b153860dc6bf5ab2bd87e10  gdb/testsuite/gdb.hp/gdb.aCC/optimize.exp
+2b587e0d7b50c411290fa84b9084a21e  gdb/testsuite/gdb.hp/gdb.aCC/run.c
+ae68a2c5bf197009f80d7249ddf26077  gdb/testsuite/gdb.hp/gdb.aCC/watch-cmd.exp
+a2fce5ad609775b8d18706022bc71229  gdb/testsuite/gdb.hp/gdb.base-hp/Makefile.in
+252ecd08a0cc1b82c6a3395bd4321e38  gdb/testsuite/gdb.hp/gdb.base-hp/callfwmall.c
+ade60200e2d1c92a38c9094cc0504767  gdb/testsuite/gdb.hp/gdb.base-hp/callfwmall.exp
 aa06298d5aa3e73236eb27c425fa4846  gdb/testsuite/gdb.hp/gdb.base-hp/dollar.c
-4bd6dd9a9636ced4fc91c20034c0b202  gdb/testsuite/gdb.hp/gdb.base-hp/dollar.exp
+94ce0d162b4ead8b92a54da63dc915e7  gdb/testsuite/gdb.hp/gdb.base-hp/dollar.exp
 d26b78129f6ede5217efccfb06f9d80d  gdb/testsuite/gdb.hp/gdb.base-hp/genso-thresh.c
 54e77a9296dcc133c8c1e6f11ca3b9e2  gdb/testsuite/gdb.hp/gdb.base-hp/hwwatchbus.c
-01f8e89783a50d5d318efd9ed819dcc1  gdb/testsuite/gdb.hp/gdb.base-hp/hwwatchbus.exp
+0f60fe715eb2c550367924c0dda0402d  gdb/testsuite/gdb.hp/gdb.base-hp/hwwatchbus.exp
 3dea1b9bc2e3aed256501550bf68d4cb  gdb/testsuite/gdb.hp/gdb.base-hp/pxdb.c
-810e0fc45fa3c2609f428928c2e2dbcf  gdb/testsuite/gdb.hp/gdb.base-hp/pxdb.exp
-5205688001bb84d058579b955a68e003  gdb/testsuite/gdb.hp/gdb.base-hp/reg-pa64.exp
+cb8b745f1043585f826c143fdcb890ec  gdb/testsuite/gdb.hp/gdb.base-hp/pxdb.exp
+65d66daa3082bfec19edd96a535abf5e  gdb/testsuite/gdb.hp/gdb.base-hp/reg-pa64.exp
 905458dab9cfbee0df58ed9240e14af1  gdb/testsuite/gdb.hp/gdb.base-hp/reg-pa64.s
-f06d49843fdfc884b3054d111992aef7  gdb/testsuite/gdb.hp/gdb.base-hp/reg.exp
+b5c8f517568c834a2f0bd73000886b84  gdb/testsuite/gdb.hp/gdb.base-hp/reg.exp
 dead9d35aee1ff308fe3522dabedc3b8  gdb/testsuite/gdb.hp/gdb.base-hp/reg.s
 465f43278cc7d0e79520ac7cd4420a02  gdb/testsuite/gdb.hp/gdb.base-hp/sized-enum.c
-c60fd95f517cb470603754a8f271bd5a  gdb/testsuite/gdb.hp/gdb.base-hp/sized-enum.exp
-f62041f97c54e9d8b2e1e487dfbaf729  gdb/testsuite/gdb.hp/gdb.base-hp/so-thresh.exp
+f60b82ce6922837db9db4177ccab5ab3  gdb/testsuite/gdb.hp/gdb.base-hp/sized-enum.exp
+c2622d96d9ae8767de9a09907d615615  gdb/testsuite/gdb.hp/gdb.base-hp/so-thresh.exp
 826cb85910a25693b5ec8940b9f17f02  gdb/testsuite/gdb.hp/gdb.base-hp/so-thresh.mk
 484344e9489d51e698048e6a91576363  gdb/testsuite/gdb.hp/gdb.base-hp/so-thresh.sh
-77cc41ca25b74fc45942075638ce8f43  gdb/testsuite/gdb.hp/gdb.compat/Makefile.in
+3ba668ddbe0fd65c911684e141286162  gdb/testsuite/gdb.hp/gdb.compat/Makefile.in
 00f1943eda306eea1225aa67d0716842  gdb/testsuite/gdb.hp/gdb.compat/average.c
 efdc8ddc5dba749425497347498fc5ab  gdb/testsuite/gdb.hp/gdb.compat/sum.c
 fbf537e72ce89db0e107c27b0339b49b  gdb/testsuite/gdb.hp/gdb.compat/xdb.c
-1d6255c634ec5650bf05e168820e52d6  gdb/testsuite/gdb.hp/gdb.compat/xdb0.c
+e999268b546368bce8c7d919f44073ed  gdb/testsuite/gdb.hp/gdb.compat/xdb0.c
 87882e6b6268aeb4258a5d999f17c0fe  gdb/testsuite/gdb.hp/gdb.compat/xdb0.h
 943ae15521dca9cb0098128efc3b280a  gdb/testsuite/gdb.hp/gdb.compat/xdb1.c
-5a8ae3c11b7ab77679c83570ad16ec37  gdb/testsuite/gdb.hp/gdb.compat/xdb1.exp
-3d995e4f8705df5d3f9d9ed3db5b66f6  gdb/testsuite/gdb.hp/gdb.compat/xdb2.exp
-8a6e0af77d3d007a6d3edd62e5791d57  gdb/testsuite/gdb.hp/gdb.compat/xdb3.exp
-b4575992bb8f1cd98a985c7a0f66e3eb  gdb/testsuite/gdb.hp/gdb.defects/Makefile.in
+961c6e09e9ec21074ae76829d26bc941  gdb/testsuite/gdb.hp/gdb.compat/xdb1.exp
+1c9e34e3949362b5aa7bae6fcbc5bd69  gdb/testsuite/gdb.hp/gdb.compat/xdb2.exp
+c16965ca4bb8870d48fb6942e6228352  gdb/testsuite/gdb.hp/gdb.compat/xdb3.exp
+32892380e46db7bf44c3e233ee6586ed  gdb/testsuite/gdb.hp/gdb.defects/Makefile.in
 db822d6cd121c4db2c5386f1b18327d3  gdb/testsuite/gdb.hp/gdb.defects/bs14602.c
-c61d79a587c1aa5793bf0d6fd9b7801c  gdb/testsuite/gdb.hp/gdb.defects/bs14602.exp
+43cdac61f3ec188b96d6165523898a76  gdb/testsuite/gdb.hp/gdb.defects/bs14602.exp
 408c16c2ba0801d824d0c16563aa93a6  gdb/testsuite/gdb.hp/gdb.defects/solib-d.c
-5cfe4fd0004a3e2838eb1657cb7e631e  gdb/testsuite/gdb.hp/gdb.defects/solib-d.exp
+c5910a73b28be9e2c7f923dba66dfb70  gdb/testsuite/gdb.hp/gdb.defects/solib-d.exp
 2c0a2c964be9bd822394d4c27d94351f  gdb/testsuite/gdb.hp/gdb.defects/solib-d1.c
 03f1b83c4f54667b4f0078457b15a52f  gdb/testsuite/gdb.hp/gdb.defects/solib-d2.c
-1b51fab5900246cd750b7f7c04f03c16  gdb/testsuite/gdb.hp/gdb.objdbg/Makefile.in
-a5d8b0d736b8786b4ac912e2fb236822  gdb/testsuite/gdb.hp/gdb.objdbg/objdbg01.exp
-e0d9366739facf15772f4d52f00b0ec1  gdb/testsuite/gdb.hp/gdb.objdbg/objdbg02.exp
-6722a7e0e6bed1da32e7dc8dd3734325  gdb/testsuite/gdb.hp/gdb.objdbg/objdbg03.exp
-d3ca892fcdeb9c029324f75e6f36ac7c  gdb/testsuite/gdb.hp/gdb.objdbg/objdbg04.exp
+821be45176140ec206fa7b3659201eac  gdb/testsuite/gdb.hp/gdb.objdbg/Makefile.in
+402e5896146f43898ffda4e221ec441c  gdb/testsuite/gdb.hp/gdb.objdbg/objdbg01.exp
+ec60dcbdfb0180436772d4591415b3f8  gdb/testsuite/gdb.hp/gdb.objdbg/objdbg02.exp
+7e4405014752e5f787c324d7533be41b  gdb/testsuite/gdb.hp/gdb.objdbg/objdbg03.exp
+d91064a091d2033a2689ac7e5e74c4c3  gdb/testsuite/gdb.hp/gdb.objdbg/objdbg04.exp
 c12f8a440f9d7eab2053d5fb263d654f  gdb/testsuite/gdb.hp/gdb.objdbg/objdbg01/x1.cc
 64a248fedafc6f5f792d6092a904faaa  gdb/testsuite/gdb.hp/gdb.objdbg/objdbg01/x2.cc
 dfae478e1d95497e262872ee20047863  gdb/testsuite/gdb.hp/gdb.objdbg/objdbg01/x3.cc
@@ -3421,110 +3701,122 @@ ab81c17425f162902b2593b2af2965bc  gdb/testsuite/gdb.hp/gdb.objdbg/objdbg03/x3.cc
 4f3c4e1c924d553e18775df711389e81  gdb/testsuite/gdb.hp/gdb.objdbg/tools/symaddr.pa64
 d1035b543709f23158df094b6d49742b  gdb/testsuite/gdb.hp/gdb.objdbg/tools/test-objdbg.cc
 8e84c7c14c0bfef46c0aa768c32904bf  gdb/testsuite/gdb.hp/tools/odump
-1d9b07418589f616a6322bbd311592c8  gdb/testsuite/gdb.java/Makefile.in
-bd2f4cfc823a1ecb23dc0c51809e2032  gdb/testsuite/gdb.java/jmain.exp
+103f30848803219a9db8fe445895dfa2  gdb/testsuite/gdb.java/Makefile.in
+63f3a0db56477a8a423a38f20de3205f  gdb/testsuite/gdb.java/jmain.exp
 030f9fc25e9acc988163f24817c83ee9  gdb/testsuite/gdb.java/jmain.java
-4795faad95b1fa722afd278a962a6222  gdb/testsuite/gdb.java/jmisc.exp
+c194af5391bc7c1310b9621d1d1d811e  gdb/testsuite/gdb.java/jmisc.exp
 e3a680cfde66129ed9607ad7c20fd6a0  gdb/testsuite/gdb.java/jmisc.java
-70ff6ef6c0176c210e5cd9b9cc500793  gdb/testsuite/gdb.java/jnpe.exp
+da2c5a6f26856d356b914dc3e303e201  gdb/testsuite/gdb.java/jnpe.exp
 df1554dc0e0d4fec69b18ca35eef22d2  gdb/testsuite/gdb.java/jnpe.java
-53f394bbe142efb4f22e82fb4b7ca547  gdb/testsuite/gdb.java/jprint.exp
-9116af4bd694ac57d7c88959caeb9f81  gdb/testsuite/gdb.java/jprint.java
-f0072906567a6a7067c5f40e46d5d720  gdb/testsuite/gdb.java/jv-exp.exp
-0e73d84a7f0f4fb02ca5a7d31508e5c4  gdb/testsuite/gdb.java/jv-print.exp
-aeaf638291c7e52e1b169c156fa07a15  gdb/testsuite/gdb.linespec/Makefile.in
+12eba58e54fd44ff325d66cf0109819c  gdb/testsuite/gdb.java/jprint.exp
+3035031cd2f267e7197722302f799e27  gdb/testsuite/gdb.java/jprint.java
+0520f99c4fca800e611dfe1727ff2817  gdb/testsuite/gdb.java/jv-exp.exp
+83388566b538e9cc2ef8c8bdef0dbd44  gdb/testsuite/gdb.java/jv-print.exp
+4010635a008a516c5216be204852bf91  gdb/testsuite/gdb.linespec/Makefile.in
 8ce9a284b978283fc01c139afe700294  gdb/testsuite/gdb.linespec/body.h
-c5b4a3e940790aea29b060203b7fee90  gdb/testsuite/gdb.linespec/linespec.exp
+3d2c7f25723489f9445309afd8afa756  gdb/testsuite/gdb.linespec/linespec.exp
+4cbe227c3ce3b7553c6b43bf0a2c0c0a  gdb/testsuite/gdb.linespec/ls-dollar.cc
+4f0e3058d0a23ac693c2b87bffbf746b  gdb/testsuite/gdb.linespec/ls-dollar.exp
+25fb37697e4b6d3bef5326907b5e2cbf  gdb/testsuite/gdb.linespec/ls-errs.c
+23270f6411b79fa118844d240102be79  gdb/testsuite/gdb.linespec/ls-errs.exp
 52412320dfc03bbc8ae9e0a5956b2d5a  gdb/testsuite/gdb.linespec/lspec.cc
 76efa0be5b547481043ba197cad7a14e  gdb/testsuite/gdb.linespec/lspec.h
 6db4b606c9a0b27272f4c918408081cb  gdb/testsuite/gdb.linespec/base/one/thefile.cc
 6063637e818b9601823ea95e95cfcfab  gdb/testsuite/gdb.linespec/base/two/thefile.cc
 1efe6f6402cbf322cd8aa810521f4b17  gdb/testsuite/gdb.mi/ChangeLog-1999-2003
-cce6f1f86f7faaf2e99219325e7e9b7a  gdb/testsuite/gdb.mi/Makefile.in
+aca96be7814c44aff0548f077837f292  gdb/testsuite/gdb.mi/Makefile.in
 fb840ee0b017e5929343225185cd6929  gdb/testsuite/gdb.mi/array.f
 616f00e1c51d651ba37b07bf72807b60  gdb/testsuite/gdb.mi/basics.c
 76995c4a7d5e5f951e44e4ea98b479c6  gdb/testsuite/gdb.mi/dw2-ref-missing-frame-func.c
 541eb8d1228360baeb904627e1a06464  gdb/testsuite/gdb.mi/dw2-ref-missing-frame-main.c
 f8749e13ccc698748f752accf6418e26  gdb/testsuite/gdb.mi/dw2-ref-missing-frame.S
-f4a33b00ce536400861f4668ef3c2808  gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp
-ad951161927b125c93448098a8c38eea  gdb/testsuite/gdb.mi/gdb2549.exp
-e1850906c34b878b1311ba497f6f90c6  gdb/testsuite/gdb.mi/gdb669.exp
+b6dc06293fb508a34693ff191bc93dfb  gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp
+6549c01a53561f4cc520bf6a8e7d2a27  gdb/testsuite/gdb.mi/gdb2549.exp
+df4774e4a3a702d8ef2003e372aeccdc  gdb/testsuite/gdb.mi/gdb669.exp
 2e3fc9e1fd17a0ed2bf098de04af85c3  gdb/testsuite/gdb.mi/gdb680.exp
 bbff496566f190853c0830bf572d6d95  gdb/testsuite/gdb.mi/gdb701.c
-6a93f0800831561a3e927949e103a26e  gdb/testsuite/gdb.mi/gdb701.exp
+b68ec5fb612e48abc0253bb73d9e4a4b  gdb/testsuite/gdb.mi/gdb701.exp
 a57794f9629bee4dc7f3868362e8d4ff  gdb/testsuite/gdb.mi/gdb792.cc
-1b15a785f7c9804d28021dc17a1f8262  gdb/testsuite/gdb.mi/gdb792.exp
-0a2d7653cfa9e9366691a0ea5dd4ddc6  gdb/testsuite/gdb.mi/mi-async.exp
-8a469fe6aaabdcdcdfffd31088bee506  gdb/testsuite/gdb.mi/mi-basics.exp
-02d9330e40cacacf3cda97d3d2f8f896  gdb/testsuite/gdb.mi/mi-break.exp
-deee5877cb9ac2f6eba39e9de9f56919  gdb/testsuite/gdb.mi/mi-cli.exp
+34db4bd0337cd259a21b101145f409de  gdb/testsuite/gdb.mi/gdb792.exp
+91a6500178d338d05aa11d89842e98dc  gdb/testsuite/gdb.mi/mi-async.exp
+d928adeb7196cf38b7b6e4bc5e731f3b  gdb/testsuite/gdb.mi/mi-basics.exp
+51b52dd788936035e0b98e5eb9ae4ffd  gdb/testsuite/gdb.mi/mi-break.exp
+f9d59eda90248f5b1cf7ef9d6948c619  gdb/testsuite/gdb.mi/mi-cli.exp
 2748c57b9ccc6f5d68d793f547c07d42  gdb/testsuite/gdb.mi/mi-console.c
-56871bb9bb43c7f98955697710bb000d  gdb/testsuite/gdb.mi/mi-console.exp
-6c68ed2bd7e2f1679d305682c3a45251  gdb/testsuite/gdb.mi/mi-disassemble.exp
-d48fd4580d976c80d9fcccc61536ac12  gdb/testsuite/gdb.mi/mi-eval.exp
-0166d2abf3f141abb6eb657400fd79a3  gdb/testsuite/gdb.mi/mi-file-transfer.exp
-95753af080f1638f78febeab58191f84  gdb/testsuite/gdb.mi/mi-file.exp
+802b5ca628e14775fd009b277f0f5f29  gdb/testsuite/gdb.mi/mi-console.exp
+b71e62ae5ad4c692efdfa8f35538cab9  gdb/testsuite/gdb.mi/mi-disassemble.exp
+f1f0d4ad33c6ea88a99add9ad94f72c9  gdb/testsuite/gdb.mi/mi-eval.exp
+67fed964b9e38abfd4c008afc0a24a3f  gdb/testsuite/gdb.mi/mi-file-transfer.exp
+963fff62346819cdaedf5d8480b43f8e  gdb/testsuite/gdb.mi/mi-file.exp
 bbc22af05b9f25d2dbfc6f8e55f03ba9  gdb/testsuite/gdb.mi/mi-hack-cli.exp
+0e62cfd0a0fadc3a6b36398b0e38cfb1  gdb/testsuite/gdb.mi/mi-info-os.exp
 966fb70be9ca0040daab6b55abf50020  gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.cc
-dc82428ddb21b9bb6d5748954d8a226e  gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.exp
-a3b1b28c5c9e197021a3e1cf706d6d7f  gdb/testsuite/gdb.mi/mi-nonstop-exit.exp
-1816e6b755fce6c53a1e2ddfe99f2545  gdb/testsuite/gdb.mi/mi-nonstop.exp
-3b3a816e680138962d826da6dfbd6ec9  gdb/testsuite/gdb.mi/mi-ns-stale-regcache.exp
-1e795d378ac423baf43ea51d8fe5ed83  gdb/testsuite/gdb.mi/mi-nsintrall.exp
-d160c685ea974d52916846c72fb326ba  gdb/testsuite/gdb.mi/mi-nsmoribund.exp
-3df345ebb98ba281ff562adfaf363a2e  gdb/testsuite/gdb.mi/mi-nsthrexec.exp
+6fd8d304d44563893ed7a05d541a5c5c  gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.exp
+3c9d10b756918950db2ca0cd24eec962  gdb/testsuite/gdb.mi/mi-logging.exp
+59cde91f67de046aa87582ba1d32702e  gdb/testsuite/gdb.mi/mi-nonstop-exit.exp
+c375577c4b4a902370d3eaf7c1cd01e1  gdb/testsuite/gdb.mi/mi-nonstop.exp
+0e2bd63daa0ff9ed598049b869810fe9  gdb/testsuite/gdb.mi/mi-ns-stale-regcache.exp
+b6b84cafdca27f164fb6317e71a4b5f4  gdb/testsuite/gdb.mi/mi-nsintrall.exp
+92f5bb253f4814eeeb36f808bb205ae5  gdb/testsuite/gdb.mi/mi-nsmoribund.exp
+2ba0fc2b726415b74b450ecd5ad691aa  gdb/testsuite/gdb.mi/mi-nsthrexec.exp
 949426458f3f6377fe0dcdc788302f88  gdb/testsuite/gdb.mi/mi-pending.c
-1debfd160ac908b8593773acb98e9e1f  gdb/testsuite/gdb.mi/mi-pending.exp
+042a1cdd34bf48b29edf0f316aa6005a  gdb/testsuite/gdb.mi/mi-pending.exp
 e0e171ac4718bc337eb70053109d650e  gdb/testsuite/gdb.mi/mi-pendshr.c
-c1c1d0170507949a62209ace823c8084  gdb/testsuite/gdb.mi/mi-pthreads.exp
+36c9f5dd4271c287a5035d4ce4b37839  gdb/testsuite/gdb.mi/mi-pthreads.exp
 d842f3134dbac91b77ca50d320988178  gdb/testsuite/gdb.mi/mi-read-memory.c
-89ceb3c050d991889efc528ae2609592  gdb/testsuite/gdb.mi/mi-read-memory.exp
-6ca21df55459824beb47bfacbde0e39b  gdb/testsuite/gdb.mi/mi-regs.exp
-837b81a6ff2b43968b1095067f9859e8  gdb/testsuite/gdb.mi/mi-return.exp
-238a55cde73e13339139a6010b978834  gdb/testsuite/gdb.mi/mi-reverse.exp
-97eb566ac44ca194a9f4061d4544bedc  gdb/testsuite/gdb.mi/mi-simplerun.exp
-b35b14ab2954445b643a9055499dc2fc  gdb/testsuite/gdb.mi/mi-solib.exp
+a559525bdfa08e8d64ba0544037fcf57  gdb/testsuite/gdb.mi/mi-read-memory.exp
+ce1d17cde6ebe3a1e76235cb128f50e4  gdb/testsuite/gdb.mi/mi-regs.exp
+84ed11a4f1c142f9e321673b1a9791aa  gdb/testsuite/gdb.mi/mi-return.exp
+7656ec4f3e7ff0b0faefa7d9aff6131c  gdb/testsuite/gdb.mi/mi-reverse.exp
+009cf021d805d9fb8da66d7c8cc15046  gdb/testsuite/gdb.mi/mi-simplerun.exp
+15b8c064f88ea8e5744a9811ad0a5da0  gdb/testsuite/gdb.mi/mi-solib.exp
 17b446132e63783986878990456ccf10  gdb/testsuite/gdb.mi/mi-stack.c
-8ed8ae1a031c0ef05e64c8052bbb46e6  gdb/testsuite/gdb.mi/mi-stack.exp
-8798a53f5982b4e48e9f34b3afd676da  gdb/testsuite/gdb.mi/mi-stepi.exp
+5a5bbc869f2e02da967e254a264c4f19  gdb/testsuite/gdb.mi/mi-stack.exp
+688a2860dd630146389bf4e8cffbf03f  gdb/testsuite/gdb.mi/mi-stepi.exp
+483c1390b81cbe69b1e86d9a1c09c39f  gdb/testsuite/gdb.mi/mi-stepn.c
+4d39492271e92f57cf80b24abc6a0c2f  gdb/testsuite/gdb.mi/mi-stepn.exp
 95ccf2f38e601fb3a49d7191a5389eff  gdb/testsuite/gdb.mi/mi-syn-frame.c
-652468956d8ac4e069beaf1c51ff807b  gdb/testsuite/gdb.mi/mi-syn-frame.exp
-0888c2f1a9cfdd951cf2904430d9d517  gdb/testsuite/gdb.mi/mi-until.exp
-2009dc56da0cf4c1840f53a2576ea8b0  gdb/testsuite/gdb.mi/mi-var-block.exp
-5c58f622b4d4226123eba559361cd904  gdb/testsuite/gdb.mi/mi-var-child-f.exp
+b1ffc96c839a3b8ef2515e25ad4dd8a2  gdb/testsuite/gdb.mi/mi-syn-frame.exp
+65c8584c15cbf1c12fb6e8d54e0e2a0e  gdb/testsuite/gdb.mi/mi-until.exp
+9081e81b0b3bf6519bab09b1171b19ac  gdb/testsuite/gdb.mi/mi-var-block.exp
+7a30db1ad3bcf762e0b885180a0b0392  gdb/testsuite/gdb.mi/mi-var-child-f.exp
 ee24692225ea85b28daabbd1ad974b62  gdb/testsuite/gdb.mi/mi-var-child.c
-3638986d0ebe70e11952145ce0bb2f8f  gdb/testsuite/gdb.mi/mi-var-child.exp
-1e356b3e980e8dbbcf4a5479133fcc54  gdb/testsuite/gdb.mi/mi-var-cmd.exp
-5ca4d3e6380134048a7a0c873f540851  gdb/testsuite/gdb.mi/mi-var-cp.cc
-bf46e617a0e81ba0c816a8190998a27a  gdb/testsuite/gdb.mi/mi-var-cp.exp
-ccf154ab2a721b4ce9aec636cbccb92c  gdb/testsuite/gdb.mi/mi-var-display.exp
-a85839ea27e77de8e6a05edd1f9d1777  gdb/testsuite/gdb.mi/mi-var-invalidate.exp
-90305497e832b5678980e24c13fd52dd  gdb/testsuite/gdb.mi/mi-watch.exp
+4a58809833e085214c541a958570151b  gdb/testsuite/gdb.mi/mi-var-child.exp
+3f48c06500859c3cf308754bac65f6b0  gdb/testsuite/gdb.mi/mi-var-cmd.exp
+8598dd80f7a0084ddc50cb8423376a93  gdb/testsuite/gdb.mi/mi-var-cp.cc
+dc5043efc1e27dfee24432a323fe296e  gdb/testsuite/gdb.mi/mi-var-cp.exp
+7f8ccbc524207bc51ed381afeffdb3d7  gdb/testsuite/gdb.mi/mi-var-display.exp
+a9474410222ee8fab31dfb464e59198c  gdb/testsuite/gdb.mi/mi-var-invalidate.exp
+24d9eae00eb2ddcc9946624160a680cb  gdb/testsuite/gdb.mi/mi-var-rtti.cc
+6bbb2871b258973faabb3fb53197f2f6  gdb/testsuite/gdb.mi/mi-var-rtti.exp
+a8440e7e4a79b959ab07ce8c727179d5  gdb/testsuite/gdb.mi/mi-watch-nonstop.exp
+5b4a066976c71d2693a9be7531e1ea56  gdb/testsuite/gdb.mi/mi-watch.exp
 9523c9606af65c364908c7691728e7e9  gdb/testsuite/gdb.mi/mi2-amd64-entry-value.c
-847a7c41066d5584c06217fcf1d92c9d  gdb/testsuite/gdb.mi/mi2-amd64-entry-value.exp
+06a6a0374e163396e8e59dceee1027ca  gdb/testsuite/gdb.mi/mi2-amd64-entry-value.exp
 ff083d0438d0050e10a963db39517ea0  gdb/testsuite/gdb.mi/mi2-amd64-entry-value.s
-ecaa96346b7a5e31ba888e5025f86461  gdb/testsuite/gdb.mi/mi2-basics.exp
-3904c04bdbabc198129a2e5587ad8528  gdb/testsuite/gdb.mi/mi2-break.exp
-e788ec7aca4e84cca9334a62b267a0cf  gdb/testsuite/gdb.mi/mi2-cli.exp
-82628498805bd542da1d0648796842b8  gdb/testsuite/gdb.mi/mi2-console.exp
-85aa0984563d318ed39d47ebfcc113a9  gdb/testsuite/gdb.mi/mi2-disassemble.exp
-70c32091ae90418afd6eeefb7620afbf  gdb/testsuite/gdb.mi/mi2-eval.exp
-e6a8075a1c761863cfa55a4cbb1a0330  gdb/testsuite/gdb.mi/mi2-file.exp
+70bd71d95114d625c8ab2e8a7581460e  gdb/testsuite/gdb.mi/mi2-basics.exp
+a20d1efa1fd57021d554dbe262e6c05a  gdb/testsuite/gdb.mi/mi2-break.exp
+3610cd926a39594e7bb648d6d08cc21a  gdb/testsuite/gdb.mi/mi2-cli.exp
+0512ba6710d069a93726e9dc2cacf6d6  gdb/testsuite/gdb.mi/mi2-console.exp
+60eae10b46ab848fa8410a6ba2ff1ef0  gdb/testsuite/gdb.mi/mi2-disassemble.exp
+39e9da3bf4fca54959eb54cb10d945be  gdb/testsuite/gdb.mi/mi2-eval.exp
+99c096a77fe268d8f8f54c38fc390a32  gdb/testsuite/gdb.mi/mi2-file.exp
 8b72d3a3d06a2270416b2dc47e063f53  gdb/testsuite/gdb.mi/mi2-hack-cli.exp
-81d2380ecbc24c868e863dde377943ac  gdb/testsuite/gdb.mi/mi2-pthreads.exp
-782a08ce308b5c7479f96021c554bddc  gdb/testsuite/gdb.mi/mi2-read-memory.exp
-2658869fff8d27883f32b09f09f8a6fc  gdb/testsuite/gdb.mi/mi2-regs.exp
-0c4f6025955bfd763da3ec49e3273c69  gdb/testsuite/gdb.mi/mi2-return.exp
-9c9a4077e497bbcfeb230d088a4bcda2  gdb/testsuite/gdb.mi/mi2-simplerun.exp
-649b0d52d90aa22d1e2387a914ec40ed  gdb/testsuite/gdb.mi/mi2-stack.exp
-06c86595c5de19772908fcb48c31e17e  gdb/testsuite/gdb.mi/mi2-stepi.exp
-32b1a1f7dece77366b308896196cda30  gdb/testsuite/gdb.mi/mi2-syn-frame.exp
-04f32de9d06dabad3a8159663e09c815  gdb/testsuite/gdb.mi/mi2-until.exp
-5f66cc84e49d8edfed16810f2f79aa00  gdb/testsuite/gdb.mi/mi2-var-block.exp
-1449730d3947974bd21da6d1e0a7f533  gdb/testsuite/gdb.mi/mi2-var-child.exp
-f163b21f563e1311b0bf1b12d18b541f  gdb/testsuite/gdb.mi/mi2-var-cmd.exp
-067244b9dd902a54c4a2a2535cb8434f  gdb/testsuite/gdb.mi/mi2-var-display.exp
-de51981def1b597c6a1c439c7f72830f  gdb/testsuite/gdb.mi/mi2-watch.exp
+5852c5f3341760e6aee02beb2378e389  gdb/testsuite/gdb.mi/mi2-prompt.exp
+dacb7650e7526b4fe9ea0116653247d0  gdb/testsuite/gdb.mi/mi2-pthreads.exp
+93c299a7e806dab929f974b8df7fcf69  gdb/testsuite/gdb.mi/mi2-read-memory.exp
+1dc87a21206ccccb3d479cd95480483e  gdb/testsuite/gdb.mi/mi2-regs.exp
+96e13bc8ad1b1c6fb46d4fb1c9d462ac  gdb/testsuite/gdb.mi/mi2-return.exp
+9fa0e36d06b5058e1f059ed01b79484d  gdb/testsuite/gdb.mi/mi2-simplerun.exp
+05dad9cdca473aaf493213b49055f3ee  gdb/testsuite/gdb.mi/mi2-stack.exp
+7f3a39281eefe531eae103278d97940a  gdb/testsuite/gdb.mi/mi2-stepi.exp
+6c70e9659e379813358b90a8c554bcef  gdb/testsuite/gdb.mi/mi2-syn-frame.exp
+c74d13f0043056ccd7b8e71b853f561a  gdb/testsuite/gdb.mi/mi2-until.exp
+4ad33572c7a63e8e41f1c43d890ba8d8  gdb/testsuite/gdb.mi/mi2-var-block.exp
+d5d6e2d5cc7a582c22db938473cdd4b4  gdb/testsuite/gdb.mi/mi2-var-child.exp
+ebe43fe5d388e4867e0bfac4cca0c8d3  gdb/testsuite/gdb.mi/mi2-var-cmd.exp
+bc6dc1908803931087b0a978e46ca9f0  gdb/testsuite/gdb.mi/mi2-var-display.exp
+bc00917f947fabf24a46c11c7b889b68  gdb/testsuite/gdb.mi/mi2-watch.exp
 8c9fde41ade2fa63b7a61d6a33ecf934  gdb/testsuite/gdb.mi/non-stop-exit.c
 bade11f5f4c317ab14e48f5c57aad6d4  gdb/testsuite/gdb.mi/non-stop.c
 d245378fccecaa319f8d98f72ad50a1c  gdb/testsuite/gdb.mi/ns-stale-regcache.c
@@ -3536,334 +3828,364 @@ dcf7cc5026d784a9c4f974b8209745d6  gdb/testsuite/gdb.mi/solib-lib.c
 c7893e6661dda785351bc99501085662  gdb/testsuite/gdb.mi/solib-main.c
 6b58acbe5f1fe573c27b67f2e2a2fee1  gdb/testsuite/gdb.mi/testcmds
 e69d1583b75cdf649449a0263d46822f  gdb/testsuite/gdb.mi/until.c
-3a44dbaeea9bda52a1f1a31864f9cca6  gdb/testsuite/gdb.mi/var-cmd.c
-41894fcef6091d1bb4ae9b3319bcff95  gdb/testsuite/gdb.modula2/Makefile.in
-db93b571693c73aa2186c55d8c72b9ac  gdb/testsuite/gdb.modula2/unbounded-array.exp
+2feffff68a4a50f1546344bb38535516  gdb/testsuite/gdb.mi/var-cmd.c
+64174b59a9eb43fc43bc7331f93547c3  gdb/testsuite/gdb.mi/watch-nonstop.c
+1e3143bbc75a5c579559147286fb4519  gdb/testsuite/gdb.modula2/Makefile.in
+22900596af7e24d4b2bbae0052ec7fa9  gdb/testsuite/gdb.modula2/unbounded-array.exp
 c20be9bdb46b1b1e10ccf9c4d44aba67  gdb/testsuite/gdb.modula2/unbounded1.c
-2a1aa9d67be06385adb3ded48bb61f4d  gdb/testsuite/gdb.multi/Makefile.in
-2d7aa5edcb3734c3d12a023f908f9082  gdb/testsuite/gdb.multi/base.exp
+d0418193cfebd949630bed6d50f01cb4  gdb/testsuite/gdb.multi/Makefile.in
+c6113aa4be883d948a6edf3976bd73d2  gdb/testsuite/gdb.multi/base.exp
 d5d546ff09b4f8f4d6b066586a9df625  gdb/testsuite/gdb.multi/bkpt-multi-exec.c
-0e1caf63c6b8ad12e587f7fe36670fa9  gdb/testsuite/gdb.multi/bkpt-multi-exec.exp
+2aa9020fa99130c50bfdeda869075c7b  gdb/testsuite/gdb.multi/bkpt-multi-exec.exp
 a678541a68147b25bf4358c1946e5675  gdb/testsuite/gdb.multi/crashme.c
 921829256746d35ede8df39038f6893e  gdb/testsuite/gdb.multi/goodbye.c
 7c5932400b41f6929239ef533a8292c1  gdb/testsuite/gdb.multi/hangout.c
 d2a37a407cbbf79eadf12135d5c5cf1f  gdb/testsuite/gdb.multi/hello.c
-5d7117d54ce15fb5a220b5487bbe1148  gdb/testsuite/gdb.objc/Makefile.in
-4088fbf393fb38f5c10fec117cacfbab  gdb/testsuite/gdb.objc/basicclass.exp
+3247735239fe8567d5f9a75e67ec36de  gdb/testsuite/gdb.multi/watchpoint-multi.c
+b6afba614ddb93ec89df9b159d6d335b  gdb/testsuite/gdb.multi/watchpoint-multi.exp
+cb36204b3c0981700f1fb27bba46a192  gdb/testsuite/gdb.objc/Makefile.in
+b78ff75bd26224bd8c9a28c5c29283ef  gdb/testsuite/gdb.objc/basicclass.exp
 f0f471d0b077ed32873ec23acd184ae2  gdb/testsuite/gdb.objc/basicclass.m
-48dbc7dbcab5bfd7e6a2d85c83f3de17  gdb/testsuite/gdb.objc/nondebug.exp
+973a19b4145b05fe8cd9f7768865ad3f  gdb/testsuite/gdb.objc/nondebug.exp
 680e14fd32f14cd93c56886bcb05f177  gdb/testsuite/gdb.objc/nondebug.m
-a7ec82f1880d4c074ad4d2e65f420cc1  gdb/testsuite/gdb.objc/objcdecode.exp
+e266fea7ad13ac13b90b14575f397cc5  gdb/testsuite/gdb.objc/objcdecode.exp
 5bf9075727dbd558ccbf123d9e11859a  gdb/testsuite/gdb.objc/objcdecode.m
-06469522598a6c0a5913e250e1c33531  gdb/testsuite/gdb.objc/print.exp
-2b0bd226a0d86e73e1cf9c413e452d98  gdb/testsuite/gdb.opencl/Makefile.in
+c59e67e582e15fccfe7cb6e7994a15f9  gdb/testsuite/gdb.objc/print.exp
+2d92fbd9a99d04eef6415ffd6a696316  gdb/testsuite/gdb.opencl/Makefile.in
 4f183d4e4720bccb0a3452e4cdaa1452  gdb/testsuite/gdb.opencl/callfuncs.cl
-d52c215afd89922c3cce9ebced296e1a  gdb/testsuite/gdb.opencl/callfuncs.exp
+3312313d677ab06fb5fc78ae779c16cd  gdb/testsuite/gdb.opencl/callfuncs.exp
 481513428889227f36848dadbcc58860  gdb/testsuite/gdb.opencl/convs_casts.cl
-291df4ed7e5b10d536a90b44f823480a  gdb/testsuite/gdb.opencl/convs_casts.exp
+bf0604706001d4f10e0ac33429f09b15  gdb/testsuite/gdb.opencl/convs_casts.exp
 df57dbb1a0ec437bcd14ec699dc1c4dd  gdb/testsuite/gdb.opencl/datatypes.cl
-de3718be5301aaace879f29275dc85b1  gdb/testsuite/gdb.opencl/datatypes.exp
+316150d1f1480a8d08f4a973e62c35c8  gdb/testsuite/gdb.opencl/datatypes.exp
 e1c095c0dddd0b4a5ac246c52aef6cc3  gdb/testsuite/gdb.opencl/operators.cl
-afc9b70af4e5f16ff6ffa6d41e929b6a  gdb/testsuite/gdb.opencl/operators.exp
+e24d7ed4ff2a9ab22a77412af66c4a69  gdb/testsuite/gdb.opencl/operators.exp
 632bb80f2cf71e082ebe486d1acc0d5d  gdb/testsuite/gdb.opencl/vec_comps.cl
-0ee4b05a3706f75df5c932179e883eb6  gdb/testsuite/gdb.opencl/vec_comps.exp
-d8832fd1e0e3b790560483425c5fd1bf  gdb/testsuite/gdb.opt/Makefile.in
+d0dde1d7c5751dcda63742117539bb7d  gdb/testsuite/gdb.opencl/vec_comps.exp
+55ff811e4ba9c0ed00acf2d95609480b  gdb/testsuite/gdb.opt/Makefile.in
 7a8c08ffc91c3bbdf0bdc62db7599ff2  gdb/testsuite/gdb.opt/clobbered-registers-O2.c
-f35efbbe8644c229feb79022cb8ade3c  gdb/testsuite/gdb.opt/clobbered-registers-O2.exp
+a1921e81316040c367e2afcdc1a4be00  gdb/testsuite/gdb.opt/clobbered-registers-O2.exp
+9e400f5f72780efd0f2d6905c6479bff  gdb/testsuite/gdb.opt/inline-break.c
+8d3a16195f198413abe189af0d24dc26  gdb/testsuite/gdb.opt/inline-break.exp
 d2c8044b74937bd39fba67ebec63bd60  gdb/testsuite/gdb.opt/inline-bt.c
-399752225cf00f9649ad4af69803e8af  gdb/testsuite/gdb.opt/inline-bt.exp
+e0c1f366184b2f8d9f4c9ff32cadf653  gdb/testsuite/gdb.opt/inline-bt.exp
 e0d7268e949bee99bba986c4eb7952b2  gdb/testsuite/gdb.opt/inline-cmds.c
-094d328d65fbf992b2a6a7378ebb818c  gdb/testsuite/gdb.opt/inline-cmds.exp
+4654141b76cfe6aebb6b7eaf97b670fd  gdb/testsuite/gdb.opt/inline-cmds.exp
 068cb66f4ef7a576a6a3eda6e3badf2d  gdb/testsuite/gdb.opt/inline-locals.c
-91a287644570b6fce10c23f3c0d8bcbe  gdb/testsuite/gdb.opt/inline-locals.exp
+fd3000c51109804f69fc2627083f1b0a  gdb/testsuite/gdb.opt/inline-locals.exp
 3dcce6aff764ef214649a0a93470293b  gdb/testsuite/gdb.opt/inline-markers.c
-ceab3646fee9e8027abe6a6ef5dd67b5  gdb/testsuite/gdb.pascal/Makefile.in
-38aa3b77d1fd5647128974b0a65854df  gdb/testsuite/gdb.pascal/floats.exp
+ec053af70195cf70c46f47710946ea2a  gdb/testsuite/gdb.pascal/Makefile.in
+24991d538ee5f95fd5a933e470ea751f  gdb/testsuite/gdb.pascal/floats.exp
 0d638e0fff3bf700562946e940914e16  gdb/testsuite/gdb.pascal/floats.pas
-81e7e4a944b4cee5edd98e41500303dc  gdb/testsuite/gdb.pascal/gdb11492.exp
+6b2d1ac0838313828b267c4216df325b  gdb/testsuite/gdb.pascal/gdb11492.exp
 786bfc070cb1b311164743c361d93364  gdb/testsuite/gdb.pascal/gdb11492.pas
-5751a9d78bef48247163c70c364152c3  gdb/testsuite/gdb.pascal/hello.exp
+6be7f1499237b3a5b5ce99f31bd437d3  gdb/testsuite/gdb.pascal/hello.exp
 19990cb5b198325b185af673b5ee5b4f  gdb/testsuite/gdb.pascal/hello.pas
-64698fcd80b2263a739594bda6978237  gdb/testsuite/gdb.pascal/integers.exp
+21393de2f8f475f42e3823e52234fbb9  gdb/testsuite/gdb.pascal/integers.exp
 023945219c548acbdec9c51db17e3d4b  gdb/testsuite/gdb.pascal/integers.pas
-04d8cb04a9c8261ed9e413b8127f5182  gdb/testsuite/gdb.pascal/print.exp
-e219d365101a8dff91d6798c20e3c067  gdb/testsuite/gdb.pascal/types.exp
-a6b34ca6ffa7a29eb36c30840efa0e16  gdb/testsuite/gdb.python/Makefile.in
+6e5451d1469cba086766efa97367951c  gdb/testsuite/gdb.pascal/print.exp
+7e0fdf78161c68831da8a72467f45cd0  gdb/testsuite/gdb.pascal/types.exp
+feb1c5707decb2763e23fb9cef318550  gdb/testsuite/gdb.python/Makefile.in
 11b12fe113259934d51c8dbd4e9fd13b  gdb/testsuite/gdb.python/lib-types.cc
-19b23629e63fbb2b21a30b6f6a22e81b  gdb/testsuite/gdb.python/lib-types.exp
+a3b3a071a1a8ad9ba0f0c9eb3b70660d  gdb/testsuite/gdb.python/lib-types.exp
 d660027f883462da3b699bea2677ade5  gdb/testsuite/gdb.python/py-block.c
-100bbaec4887bc5b2e05765f351c1a54  gdb/testsuite/gdb.python/py-block.exp
+7ee4fc58a8d0de8ce01797419d954497  gdb/testsuite/gdb.python/py-block.exp
 1fdd102bc67281bd57de601b0343f7d4  gdb/testsuite/gdb.python/py-breakpoint.c
-7f88302182a476d07de84b546f768291  gdb/testsuite/gdb.python/py-breakpoint.exp
-2b270fb822086cd8996f8629b3a3be99  gdb/testsuite/gdb.python/py-cmd.exp
+42a522f51d5b3040e1dca05b835b1977  gdb/testsuite/gdb.python/py-breakpoint.exp
+ee4908e879f819be39310707c9ab89c7  gdb/testsuite/gdb.python/py-cmd.exp
 9cbcf6bce12b1f5d68396a2b54ac029e  gdb/testsuite/gdb.python/py-error.exp
 4d675723639a2c3abaf4dee447f33131  gdb/testsuite/gdb.python/py-error.py
 b274b9bea726c67ff1f545323d675789  gdb/testsuite/gdb.python/py-events-shlib.c
-22fccbceb907170c72f67d2a4095b5a1  gdb/testsuite/gdb.python/py-events.c
-b049a4f3eb470452bd6dd4e5bcbbb9d2  gdb/testsuite/gdb.python/py-events.exp
-f573469004dc48c7fdf06c2c7644abea  gdb/testsuite/gdb.python/py-events.py
-95649095ceabf4b0d1b6b4b2989c7418  gdb/testsuite/gdb.python/py-evsignal.exp
+d41c6f242948172f58a1e5d4c30ef4c9  gdb/testsuite/gdb.python/py-events.c
+f0b4546c7189978c98ff6e14851e02ab  gdb/testsuite/gdb.python/py-events.exp
+84f4a38fb5a96fff7b8d9e10595fc2f6  gdb/testsuite/gdb.python/py-events.py
+73c45453ec3aa68eaa72d91c522ec9b2  gdb/testsuite/gdb.python/py-evsignal.exp
 415e4f7d304198e45edb6c4f20357ab0  gdb/testsuite/gdb.python/py-evthreads.c
-34f41e84d896cb3ee6c5a3d7e5189bb5  gdb/testsuite/gdb.python/py-evthreads.exp
+6c0d940ddc533cad87f8802f1cdaad63  gdb/testsuite/gdb.python/py-evthreads.exp
+93b7b18661da06dee03375dbb62130b9  gdb/testsuite/gdb.python/py-explore-cc.exp
+45881da1fb4560fdfa799b8cc146407a  gdb/testsuite/gdb.python/py-explore.c
+1c13638d4cddf805987b7192238af474  gdb/testsuite/gdb.python/py-explore.cc
+1abdcf3cf214e45986009a8bf3c4a134  gdb/testsuite/gdb.python/py-explore.exp
 7a5e9c15bad08478ceb48892024a607d  gdb/testsuite/gdb.python/py-finish-breakpoint.c
-f762452a004d4769c988344edd3cdb28  gdb/testsuite/gdb.python/py-finish-breakpoint.exp
-7b5e56287d7ffc4417e47fcf341bfb85  gdb/testsuite/gdb.python/py-finish-breakpoint.py
+85180e2dec096bd973e4c525f3d74056  gdb/testsuite/gdb.python/py-finish-breakpoint.exp
+4637c063b49e4aaefb1043d78907648a  gdb/testsuite/gdb.python/py-finish-breakpoint.py
 724d2110e642f2a5da915ae88874d8df  gdb/testsuite/gdb.python/py-finish-breakpoint2.cc
-9508da8fa16c9d54e4d441638635e713  gdb/testsuite/gdb.python/py-finish-breakpoint2.exp
+e4de068f6c80ad7035a8d3bb8582dbcf  gdb/testsuite/gdb.python/py-finish-breakpoint2.exp
 4de4fe87eaa33974fef64f91801458db  gdb/testsuite/gdb.python/py-finish-breakpoint2.py
 885c7beaeace917cd52ae0820ea14ab3  gdb/testsuite/gdb.python/py-frame-inline.c
-6cb921c36ddd93557463b9dc6294dba5  gdb/testsuite/gdb.python/py-frame-inline.exp
+c63f90109c5fb2d099aa2d905ad63d37  gdb/testsuite/gdb.python/py-frame-inline.exp
 2201fe232be56f834518596b4f09f9ce  gdb/testsuite/gdb.python/py-frame.c
-4ae20f08441781969a8c5a9abec20336  gdb/testsuite/gdb.python/py-frame.exp
-dbfaf6de1765e8606995d75eff06f5f9  gdb/testsuite/gdb.python/py-function.exp
+03802d519bf56a35dad6246d31e2cb44  gdb/testsuite/gdb.python/py-frame.exp
+19e29e16d840476a27609fc32756d060  gdb/testsuite/gdb.python/py-function.exp
 9f58c971f8ad4b0e16959f9f8f3e058b  gdb/testsuite/gdb.python/py-inferior.c
-f658e63a9badd5f0c65407f4f94e8726  gdb/testsuite/gdb.python/py-inferior.exp
+dd2cbe8e52fde4ee330a8f32873b38d9  gdb/testsuite/gdb.python/py-inferior.exp
 d33da31e9602c754cd11dcc3f1da1896  gdb/testsuite/gdb.python/py-infthread.c
-6455e2a9d37d8842772653f263f2ba33  gdb/testsuite/gdb.python/py-infthread.exp
-97689575628555240c822cc448c9b05f  gdb/testsuite/gdb.python/py-mi.exp
+07482afbd632be98191906fc1ab0eb28  gdb/testsuite/gdb.python/py-infthread.exp
+a27457ee6f6f2eba8ce21083ad2b3b0c  gdb/testsuite/gdb.python/py-mi.exp
 4b3926e873645d116b4cb9043343a022  gdb/testsuite/gdb.python/py-objfile-script-gdb.py.in
 7cf6804be10152a3f1e53f2c6192a3ed  gdb/testsuite/gdb.python/py-objfile-script.c
-a7a5800b203f89140e1d8105012b432c  gdb/testsuite/gdb.python/py-objfile-script.exp
+6885d9c06ebe0d4898acd39b13f8cba1  gdb/testsuite/gdb.python/py-objfile-script.exp
 f1a4fe1eeaa5483c770aec9aa77cebd6  gdb/testsuite/gdb.python/py-objfile.c
-3d04ed23ca316d7e1c77d9cc18c91c16  gdb/testsuite/gdb.python/py-objfile.exp
-7342543db4147097c8e36210df7c4ba1  gdb/testsuite/gdb.python/py-parameter.exp
-85874ac100798f76359b0f2926f3e241  gdb/testsuite/gdb.python/py-pp-maint.c
-af29e58a5eab9b998897ec63ab42c040  gdb/testsuite/gdb.python/py-pp-maint.exp
-b1113bacec2fb02cfdee49b893802bfc  gdb/testsuite/gdb.python/py-pp-maint.py
-b94eae8c91279b9413ea616e054908c9  gdb/testsuite/gdb.python/py-prettyprint.c
-6dccbcc0faca79d9dbd8c172715d827e  gdb/testsuite/gdb.python/py-prettyprint.exp
-5cc642669f489a3d6a8cec3fccd869ae  gdb/testsuite/gdb.python/py-prettyprint.py
+f22efbda7c2fed6e1ad6c9eb9fc92c59  gdb/testsuite/gdb.python/py-objfile.exp
+6d5ebd2f7d5d5812a1d813da4c91095d  gdb/testsuite/gdb.python/py-parameter.exp
+a8f7d50a9812394cd8661eb337006721  gdb/testsuite/gdb.python/py-pp-maint.c
+29b0e465088773b110172101cad11970  gdb/testsuite/gdb.python/py-pp-maint.exp
+f14adb558a3a7dfc821c3b119bf4e3bb  gdb/testsuite/gdb.python/py-pp-maint.py
+196d4f887874bcadc4ae823b0ecf7352  gdb/testsuite/gdb.python/py-prettyprint.c
+740f064a414fbda57aee0b76c1183ba1  gdb/testsuite/gdb.python/py-prettyprint.exp
+3f26a5f6b4051c539b706cba0b49ea83  gdb/testsuite/gdb.python/py-prettyprint.py
 79cca4044ac56f52b9de419296b1b1cf  gdb/testsuite/gdb.python/py-progspace.c
-f4de9598f01f637725b66280e6266a2a  gdb/testsuite/gdb.python/py-progspace.exp
+b6ce7e2881ac3c131f82e29bda91f3d4  gdb/testsuite/gdb.python/py-progspace.exp
 479f7c5cce759b657f9899756b52e3e6  gdb/testsuite/gdb.python/py-prompt.c
-4880646bdeb8b5e7f2a6ab5d74065ae0  gdb/testsuite/gdb.python/py-prompt.exp
+2e7129ff35c9c7fc596939781741dd14  gdb/testsuite/gdb.python/py-prompt.exp
 b3820584782eb0eb720cbc81bd079954  gdb/testsuite/gdb.python/py-section-script.c
-18abf21007d5713e4d53f1c1315acf6f  gdb/testsuite/gdb.python/py-section-script.exp
+09b1b2345f05ab6ab51de57f907a2a7c  gdb/testsuite/gdb.python/py-section-script.exp
 403427e18c7c1a27be18e0f1ac803e3e  gdb/testsuite/gdb.python/py-section-script.py
 671e9dc916f273d6dbca3a5e2e4c7b76  gdb/testsuite/gdb.python/py-shared-sl.c
 fa30aca7cfdd9041aaef08d873162aa4  gdb/testsuite/gdb.python/py-shared.c
-f0a7f75f8af4928e73f07496f4486cbc  gdb/testsuite/gdb.python/py-shared.exp
-130a3ea98d4feacf008277d45c5fce33  gdb/testsuite/gdb.python/py-symbol.c
-7d42a36269237ef04dd3af3eed26573d  gdb/testsuite/gdb.python/py-symbol.exp
-c36c8cf8eb5a9bf4a1539112e97120cd  gdb/testsuite/gdb.python/py-symtab.exp
+de0ae59cea3204991a301d1485ab9212  gdb/testsuite/gdb.python/py-shared.exp
+dd9768b036f79a876a7ed7b6911c187b  gdb/testsuite/gdb.python/py-symbol.c
+589c9a279716a8348e9f737e5c8bb88d  gdb/testsuite/gdb.python/py-symbol.exp
+52bddc15a6703f7c8bce72eab6d349d2  gdb/testsuite/gdb.python/py-symtab.exp
 47886efa253586a02ab5a49ea6808467  gdb/testsuite/gdb.python/py-template.cc
-310bfa5b899e030d2c3325da19bda926  gdb/testsuite/gdb.python/py-template.exp
+a9cc35dd202860f9f800ee7e5bd649bd  gdb/testsuite/gdb.python/py-template.exp
 b64536961ca7337fc68f415971b887e9  gdb/testsuite/gdb.python/py-type.c
-f03762a5cc7f33999c5f94f2b00c5ccc  gdb/testsuite/gdb.python/py-type.exp
+4ca2067cd8cb8cd38badc9483231c6c0  gdb/testsuite/gdb.python/py-type.exp
+e0172acc487bb4bfc1bb5813d774d73c  gdb/testsuite/gdb.python/py-value-cc.exp
 cc0c299cc13d32b8be6c04e7f2b1103a  gdb/testsuite/gdb.python/py-value.c
-34b54cf8ad12b5fd410ca4f67bc331a2  gdb/testsuite/gdb.python/py-value.exp
+e5268fcbb138bc8dd9ea8a3bea6df5e6  gdb/testsuite/gdb.python/py-value.cc
+78819bc127ce22a01efef3659003d2ad  gdb/testsuite/gdb.python/py-value.exp
 671e9dc916f273d6dbca3a5e2e4c7b76  gdb/testsuite/gdb.python/python-1.c
-20564d0bc363df763557678912959acf  gdb/testsuite/gdb.python/python.c
-0c8d4b182ffce4329880c9daf5b80b8d  gdb/testsuite/gdb.python/python.exp
+b4d2852e0a6c20f6a94cb2bea32b7428  gdb/testsuite/gdb.python/python.c
+97a499e90cb0e4ddab2b28b0ac252719  gdb/testsuite/gdb.python/python.exp
 4262afd139ccc75abebdbd4a936378c5  gdb/testsuite/gdb.python/source1
 01f60a446360a6a9e07afb55ac6cd5d9  gdb/testsuite/gdb.python/source2.py
-1c6a0cd8f585f6c9400398ec35847fcc  gdb/testsuite/gdb.reverse/Makefile.in
-1a041b221b79e8e09c8a4f6d3d8d1cde  gdb/testsuite/gdb.reverse/break-precsave.exp
+5d0857368c33e2992acae395c7353dee  gdb/testsuite/gdb.reverse/Makefile.in
+e1f07c48544f9e652a81e4fc357822ac  gdb/testsuite/gdb.reverse/break-precsave.exp
 b749c2f0e459adb076c510d07419c9b6  gdb/testsuite/gdb.reverse/break-reverse.c
-2fa71d4120c6e3940661079cedf288ac  gdb/testsuite/gdb.reverse/break-reverse.exp
-36d14507899c140d69c08617faa2bc74  gdb/testsuite/gdb.reverse/consecutive-precsave.exp
-6d3d0049e9391e7e6120a667ef99435a  gdb/testsuite/gdb.reverse/consecutive-reverse.c
-ac2fa9fc75437260bd2d6d913121e94c  gdb/testsuite/gdb.reverse/consecutive-reverse.exp
-87aa06b6ae9023529073b0971b28b711  gdb/testsuite/gdb.reverse/finish-precsave.exp
-deed90b4b342490226a8c46d17603ff5  gdb/testsuite/gdb.reverse/finish-reverse-bkpt.exp
+d2afd35b6abf06808c0db8cd3d6f974b  gdb/testsuite/gdb.reverse/break-reverse.exp
+a7257deff80f000b5c15f7518c9ad1fc  gdb/testsuite/gdb.reverse/consecutive-precsave.exp
+0097b95b252e50f2293c0070b07de3fc  gdb/testsuite/gdb.reverse/consecutive-reverse.c
+93da88780d2ec37091f712b03804a3ab  gdb/testsuite/gdb.reverse/consecutive-reverse.exp
+bc4f4e051199605357e1682fb4e6783e  gdb/testsuite/gdb.reverse/finish-precsave.exp
+1d545f836ccba7c3969ee97ed0797217  gdb/testsuite/gdb.reverse/finish-reverse-bkpt.exp
 47ea07dc2e7d1d3d0157a3ac93337ebb  gdb/testsuite/gdb.reverse/finish-reverse.c
-bcd54c157b6f83bb66908bf7f5472cc1  gdb/testsuite/gdb.reverse/finish-reverse.exp
-7e10b362c1988024650bb4fa51d7d97e  gdb/testsuite/gdb.reverse/i386-precsave.exp
+680a103df52075d64c7b682992db827f  gdb/testsuite/gdb.reverse/finish-reverse.exp
+2d9d1ab118f1b476fd4131f7fbdd09c3  gdb/testsuite/gdb.reverse/i386-precsave.exp
 dc103897ebcab51c481fc2f1fd51c8e4  gdb/testsuite/gdb.reverse/i386-reverse.c
-c185d2c81d6ea657378bff252d590680  gdb/testsuite/gdb.reverse/i386-reverse.exp
-24c174a81bf758080d37a38e2665a4c9  gdb/testsuite/gdb.reverse/i386-sse-reverse.c
-ff1159aff7b622905e572129a8de3744  gdb/testsuite/gdb.reverse/i386-sse-reverse.exp
+591c62d068244fd826b9d2c2a1e153f9  gdb/testsuite/gdb.reverse/i386-reverse.exp
+6b1711d08e0f81395c980c2bb92821f5  gdb/testsuite/gdb.reverse/i386-sse-reverse.c
+4c91fc30550b769ced4b0ca18e5ef8e7  gdb/testsuite/gdb.reverse/i386-sse-reverse.exp
 3324e2bb106a9b9279ac3127170de20b  gdb/testsuite/gdb.reverse/i387-env-reverse.c
-4d5a18b9c14c659c0be5701fbfccf650  gdb/testsuite/gdb.reverse/i387-env-reverse.exp
+a012f50fa62eb2cd8271edba093d0fb1  gdb/testsuite/gdb.reverse/i387-env-reverse.exp
 7287898ff83b2ad3153f6f7dcdea751e  gdb/testsuite/gdb.reverse/i387-stack-reverse.c
-6e8cfa4b5b8201a1395d3ac5eb22f9bf  gdb/testsuite/gdb.reverse/i387-stack-reverse.exp
-0370924a9a34943754f050ec5bc473ed  gdb/testsuite/gdb.reverse/machinestate-precsave.exp
+c4deb969a94ea4779a9d276653102139  gdb/testsuite/gdb.reverse/i387-stack-reverse.exp
+82eff251cb23a6ab8d38e3f527e44a07  gdb/testsuite/gdb.reverse/machinestate-precsave.exp
 eeabf100d5f21f787e1eb677c30b74e2  gdb/testsuite/gdb.reverse/machinestate.c
-0851a1920bc4862d1c11b9f7d0d70dc6  gdb/testsuite/gdb.reverse/machinestate.exp
+b34b810f445106b670055e89fd6d4f61  gdb/testsuite/gdb.reverse/machinestate.exp
 26db778734d4a284b495b94c483d7ba8  gdb/testsuite/gdb.reverse/ms1.c
-8c494c6b4839775c505d484dc95586ba  gdb/testsuite/gdb.reverse/next-reverse-bkpt-over-sr.exp
+5408e789a152801ef630bd475a4e01cf  gdb/testsuite/gdb.reverse/next-reverse-bkpt-over-sr.exp
 04f2d7db7a18f28e020136a5dbda5bc5  gdb/testsuite/gdb.reverse/shr2.c
-d6d06792d7270b842f955051124c93b6  gdb/testsuite/gdb.reverse/sigall-precsave.exp
-8c354bd799e859261da3c83c62dcf941  gdb/testsuite/gdb.reverse/sigall-reverse.c
-56f7fe69e48fd4e25790f4685ba9f1a0  gdb/testsuite/gdb.reverse/sigall-reverse.exp
-33d6be2c32275048e2d4dd3cb9192a60  gdb/testsuite/gdb.reverse/solib-precsave.exp
+e7b8677e478b90ad5c33f356e36bd734  gdb/testsuite/gdb.reverse/sigall-precsave.exp
+b48715211845417cac4850ca50b276f4  gdb/testsuite/gdb.reverse/sigall-reverse.c
+7cb15f12754160514415b7c3091a9856  gdb/testsuite/gdb.reverse/sigall-reverse.exp
+f17cfbb6458a72c312f00c807cc6c33f  gdb/testsuite/gdb.reverse/solib-precsave.exp
 0739a17b9f89c3f77f566fbb0fa04e86  gdb/testsuite/gdb.reverse/solib-reverse.c
-2fa32a423f77f7d5da9eac03ac609a67  gdb/testsuite/gdb.reverse/solib-reverse.exp
-f3b5a0a5cca2b4e28a71e99ca425fb7d  gdb/testsuite/gdb.reverse/step-precsave.exp
+2812d36b3d0fa46d067e16019e504aea  gdb/testsuite/gdb.reverse/solib-reverse.exp
+638baf7b8c799e896a59ac932987fc23  gdb/testsuite/gdb.reverse/step-precsave.exp
 b0b10a0b84a06a1919f278dab4820a40  gdb/testsuite/gdb.reverse/step-reverse.c
-bb7e17e5a8eae0494ff6552c052f8ca8  gdb/testsuite/gdb.reverse/step-reverse.exp
-a76fbca1c415e4513c403fc20c80679e  gdb/testsuite/gdb.reverse/until-precsave.exp
-1a60a611bb9154772d07b6335665da65  gdb/testsuite/gdb.reverse/until-reverse.c
-c710626d4d395eee3738fe31605f0beb  gdb/testsuite/gdb.reverse/until-reverse.exp
+8cc0af245b79ba8fad75a7539b2af438  gdb/testsuite/gdb.reverse/step-reverse.exp
+772a9bc36ad09ff8c8b6c712afdef9f0  gdb/testsuite/gdb.reverse/until-precsave.exp
+687b10b0794abf4762cd458f5da0b8e9  gdb/testsuite/gdb.reverse/until-reverse.c
+9fc1aacf64085721908159ef6c40ba2a  gdb/testsuite/gdb.reverse/until-reverse.exp
 9091f689968c4397a22e090f42680150  gdb/testsuite/gdb.reverse/ur1.c
-f017d5204d782c9cd4603d89931bac6c  gdb/testsuite/gdb.reverse/watch-precsave.exp
-381f3995222a675256d3d4776f48cecb  gdb/testsuite/gdb.reverse/watch-reverse.c
-3dfb3dd283b0be46e71152e9ec127378  gdb/testsuite/gdb.reverse/watch-reverse.exp
-285361003b846eb311d73f4924312aec  gdb/testsuite/gdb.server/Makefile.in
+0eac9e6749a9e230736e2f3a1e2839f3  gdb/testsuite/gdb.reverse/watch-precsave.exp
+0d69e19cd72d730d55236bfea61c82e8  gdb/testsuite/gdb.reverse/watch-reverse.c
+fefbd3cfcc74973d4bce0c0201d1952d  gdb/testsuite/gdb.reverse/watch-reverse.exp
+e2d4483f5daabe4976107fe3fe52049c  gdb/testsuite/gdb.server/Makefile.in
 479f7c5cce759b657f9899756b52e3e6  gdb/testsuite/gdb.server/ext-attach.c
-2e8ac015b4be07668c75950a9145bed6  gdb/testsuite/gdb.server/ext-attach.exp
-b3fd5578dc201b1ae802322ece959ce5  gdb/testsuite/gdb.server/ext-run.exp
-cf9bd5c5227350cb743caa561e59cb0f  gdb/testsuite/gdb.server/file-transfer.exp
-d88604957b455721379fdde80153c6a6  gdb/testsuite/gdb.server/server-mon.exp
-32f949b96b66f60acd875352643bf13d  gdb/testsuite/gdb.server/server-run.exp
+8f58a18044e51b54ae9067bcfdbffc6a  gdb/testsuite/gdb.server/ext-attach.exp
+e24b572c24e2ace22d2479eb743f6671  gdb/testsuite/gdb.server/ext-run.exp
+68812d6789f7a6f09148ae70668ae369  gdb/testsuite/gdb.server/file-transfer.exp
+ac17e18bdd39d2bd3808029dabe2ee31  gdb/testsuite/gdb.server/server-exec-info.exp
+8a4b4796812cca9fd9e8eaac44d742ea  gdb/testsuite/gdb.server/server-mon.exp
+f6dce662159360aa490fd2ece5d036fd  gdb/testsuite/gdb.server/server-run.exp
 baf3d719bcb16284b000c52e1d8d6f9e  gdb/testsuite/gdb.server/server.c
+8af43de56d0d752cd08b97c2a9f5a1e6  gdb/testsuite/gdb.server/solib-list-lib.c
+07d381dbd35a9694864dddd43c62d1c9  gdb/testsuite/gdb.server/solib-list-main.c
+6a65d2e13058fcb5a94a67c206fefa9c  gdb/testsuite/gdb.server/solib-list.exp
 b83c8391da68f1e641f679bf1eed5690  gdb/testsuite/gdb.server/transfer.txt
-f2491f39e20236fc96028f27907c494c  gdb/testsuite/gdb.stabs/Makefile.in
+2c9967eb7c172201bd76e62e47a95036  gdb/testsuite/gdb.stabs/Makefile.in
 4a87d0041963c650cbec0bdd23141931  gdb/testsuite/gdb.stabs/aout.sed
 6fb5c366d78fe2c47f31555c035ddcb3  gdb/testsuite/gdb.stabs/ecoff.sed
-adbd796c53644cd136459a9c3c49b2c3  gdb/testsuite/gdb.stabs/exclfwd.exp
+7c0c79375e23b0d70784b6e92ad852be  gdb/testsuite/gdb.stabs/exclfwd.exp
 53f1c42fa3bc4ba5b38f689344f605fc  gdb/testsuite/gdb.stabs/exclfwd.h
 4f9b4b4bb12d94515ee37b8e2d981e76  gdb/testsuite/gdb.stabs/exclfwd1.c
 ca27b39b795c5e9b860974511f548acc  gdb/testsuite/gdb.stabs/exclfwd2.c
 3526f079debaf08f44d97adac59a22e9  gdb/testsuite/gdb.stabs/gdb11479.c
-61f4215545b158989f1c4dfa1379aeaf  gdb/testsuite/gdb.stabs/gdb11479.exp
+19332ea88f80a0abc69f6232aa82ec8b  gdb/testsuite/gdb.stabs/gdb11479.exp
 16ebc6e814bd3628cce9049f530a0990  gdb/testsuite/gdb.stabs/hppa.sed
 24cd51afd4311a96fd7256d1ebd3a4b1  gdb/testsuite/gdb.stabs/weird.def
-a0789c83e11b47ec9728d545edacd0bd  gdb/testsuite/gdb.stabs/weird.exp
+9134f27ae827f229abf2f6242e2cae5f  gdb/testsuite/gdb.stabs/weird.exp
 ef0a0ca194e090e3a942606488625f47  gdb/testsuite/gdb.stabs/xcoff.sed
-2b38db71f18059c9e2253752fff6bf7a  gdb/testsuite/gdb.threads/Makefile.in
+930e3bb22ca8b8efaec8385816e05b8f  gdb/testsuite/gdb.threads/Makefile.in
 0a321f79e7b78cf04524e8172b8899d9  gdb/testsuite/gdb.threads/attach-into-signal.c
-16b587618682b9cf42edfb8d3ca9378f  gdb/testsuite/gdb.threads/attach-into-signal.exp
+bbdeeb783af8fda744ecb4ac90cae6bd  gdb/testsuite/gdb.threads/attach-into-signal.exp
 255ca749aa5305df6bf2bd9bb37797cc  gdb/testsuite/gdb.threads/attach-stopped.c
-377f8b99c6fddfbff164a551742ed194  gdb/testsuite/gdb.threads/attach-stopped.exp
-489a61c0c3f91de366dac6e1e75cd370  gdb/testsuite/gdb.threads/attachstop-mt.c
-ca492b1074b55c3f34031fd8d64849e3  gdb/testsuite/gdb.threads/attachstop-mt.exp
+542513af659088f81cb555ee987efcc7  gdb/testsuite/gdb.threads/attach-stopped.exp
 c1ca06cd065b3c09e17b9a052122d922  gdb/testsuite/gdb.threads/bp_in_thread.c
-47946e53756ea503314d3de84a86c8ef  gdb/testsuite/gdb.threads/bp_in_thread.exp
+63e7ac649884421e0554df63b2c848a7  gdb/testsuite/gdb.threads/bp_in_thread.exp
+719b249b9e6ce237777a228b1d46198c  gdb/testsuite/gdb.threads/clone-new-thread-event.c
+35ed5d412748c312282cd6b459f74887  gdb/testsuite/gdb.threads/clone-new-thread-event.exp
 ff708a3cd94e6aecba08a4fde168b5e9  gdb/testsuite/gdb.threads/corethreads.c
-0354154e99435fb6899468d852a827cd  gdb/testsuite/gdb.threads/corethreads.exp
+d545986758430f4886277622a26070a7  gdb/testsuite/gdb.threads/corethreads.exp
 5e320122a48ba4683ea8a576a7f8f17e  gdb/testsuite/gdb.threads/current-lwp-dead.c
 12f00e0bbbb5ccb608e7d61082d3789a  gdb/testsuite/gdb.threads/current-lwp-dead.exp
 5bf57328dedefb2d6b4d6281772d6acc  gdb/testsuite/gdb.threads/execl.c
-d0030f24f83bc0014be1ad6d774d8120  gdb/testsuite/gdb.threads/execl.exp
+f2c61dadd690541c122732d08382c2db  gdb/testsuite/gdb.threads/execl.exp
 d9899c52399d99686ba8e17f4ca12ce1  gdb/testsuite/gdb.threads/execl1.c
 e9f2d484067f57ed833c9ef11b908a03  gdb/testsuite/gdb.threads/fork-child-threads.c
-b98cf5c01a15c0262d8b17d78f18ef67  gdb/testsuite/gdb.threads/fork-child-threads.exp
-bc348ea57adfeef536a65e823791d6f7  gdb/testsuite/gdb.threads/fork-thread-pending.c
-a203f356dae15a31cc219b195a1b04b9  gdb/testsuite/gdb.threads/fork-thread-pending.exp
-a247724844d2d36ecfa25a27934419a5  gdb/testsuite/gdb.threads/gcore-thread.exp
+80004e11b6f3ab2162f73bf1a84ecf58  gdb/testsuite/gdb.threads/fork-child-threads.exp
+be94efab1a0feb56270196fc9b9a8266  gdb/testsuite/gdb.threads/fork-thread-pending.c
+274edaa5288cd83a65bb61e8c41de14d  gdb/testsuite/gdb.threads/fork-thread-pending.exp
+d72f3684e8916ad81a024d7508a64d40  gdb/testsuite/gdb.threads/gcore-thread.exp
 394fc8a2e782ed03585c29d3ed155805  gdb/testsuite/gdb.threads/hand-call-in-threads.c
-74e1cb63dee286c795394d97372046da  gdb/testsuite/gdb.threads/hand-call-in-threads.exp
+1f41de45384e9aea6285dcd347d0223f  gdb/testsuite/gdb.threads/hand-call-in-threads.exp
 ad1ca2b1d0181c43c6da4cf591d07cda  gdb/testsuite/gdb.threads/ia64-sigill.c
-a710125ddd71e7eabe0010ca3bd679a5  gdb/testsuite/gdb.threads/ia64-sigill.exp
+7e2c2713ae70723e4f56d26ac44c7978  gdb/testsuite/gdb.threads/ia64-sigill.exp
 dfffdcdbaa594a61d9caf8fb9f2f8b63  gdb/testsuite/gdb.threads/interrupted-hand-call.c
-390e9d75deb16ce7b847c570fb28edb1  gdb/testsuite/gdb.threads/interrupted-hand-call.exp
+10eea871b4e9c8778077a5c571357654  gdb/testsuite/gdb.threads/interrupted-hand-call.exp
 a426a738edca5d9a5f3e4dc1198336d1  gdb/testsuite/gdb.threads/killed.c
-b960462dde9776e53a9dc45fa7c636a2  gdb/testsuite/gdb.threads/killed.exp
+99983b5c3083e4abc92c3343302ff09f  gdb/testsuite/gdb.threads/killed.exp
 dc2e65e82a4c5aa5740451fad6789240  gdb/testsuite/gdb.threads/leader-exit.c
-751e5c9df9399a0a506664a7219e11cc  gdb/testsuite/gdb.threads/leader-exit.exp
+a24034c9629a4ca37f78f0f28bb4d004  gdb/testsuite/gdb.threads/leader-exit.exp
 887ac67db3e53d926301bc46fe548d3e  gdb/testsuite/gdb.threads/linux-dp.c
-dea9f30ce180db6e9b23ce722f375b00  gdb/testsuite/gdb.threads/linux-dp.exp
+ac3c29566eda0c691cc6ca36140add69  gdb/testsuite/gdb.threads/linux-dp.exp
 c978ff36e047dbe3149b6dad906c72f2  gdb/testsuite/gdb.threads/local-watch-wrong-thread.c
-937a1b36d04e887a7430c010b10a084a  gdb/testsuite/gdb.threads/local-watch-wrong-thread.exp
+24169f430b27d9c26be937c5fdd0f906  gdb/testsuite/gdb.threads/local-watch-wrong-thread.exp
 fae6bffc099aad66899c430d2903c35d  gdb/testsuite/gdb.threads/manythreads.c
-1a826f6b9ec201bdf9617441734b12a2  gdb/testsuite/gdb.threads/manythreads.exp
+da0cb09c019a4aeac13ac734fa5f83c8  gdb/testsuite/gdb.threads/manythreads.exp
 be9081ca85f6146a103b349e38db5e9a  gdb/testsuite/gdb.threads/multi-create.c
-9808aad2046a9a405742d802e77b535a  gdb/testsuite/gdb.threads/multi-create.exp
+72d66c7c24e6ed90e2fa5fe2d3a4d33c  gdb/testsuite/gdb.threads/multi-create.exp
 ed25caced49e28b616f55b5263e46d52  gdb/testsuite/gdb.threads/no-unwaited-for-left.c
-4547a5d8c32d213db3e6c26bf2a0b325  gdb/testsuite/gdb.threads/no-unwaited-for-left.exp
+796fb8f97251d99e24209176824eeaab  gdb/testsuite/gdb.threads/no-unwaited-for-left.exp
 8160d915c16e0a35922daeba585fcb6d  gdb/testsuite/gdb.threads/non-ldr-exc-1.c
-896fba5d1eca008c08121338fda8fd71  gdb/testsuite/gdb.threads/non-ldr-exc-1.exp
+3f3013e3e597bcf94b99305daeac47f3  gdb/testsuite/gdb.threads/non-ldr-exc-1.exp
 8fb5567c0b181ccae917173e64663ef8  gdb/testsuite/gdb.threads/non-ldr-exc-2.c
-fbf54ac0243fd0799d74a248d0c4540d  gdb/testsuite/gdb.threads/non-ldr-exc-2.exp
+d3291655bc9dc09dea5bf727f894a7dd  gdb/testsuite/gdb.threads/non-ldr-exc-2.exp
 f69806002ddfa33c665877ab1f800f60  gdb/testsuite/gdb.threads/non-ldr-exc-3.c
-918b05b4f510d4275a19ec2ccc641d86  gdb/testsuite/gdb.threads/non-ldr-exc-3.exp
+8c1ab151c900c2196cc955822e2202e3  gdb/testsuite/gdb.threads/non-ldr-exc-3.exp
 5b51bf409a106162b3d2322b08a60d6d  gdb/testsuite/gdb.threads/non-ldr-exc-4.c
-7e56b66ab471526ce557b664963dc0e7  gdb/testsuite/gdb.threads/non-ldr-exc-4.exp
+673c7b9d8305d584bb7acd9c36745433  gdb/testsuite/gdb.threads/non-ldr-exc-4.exp
 8c665249d70973b681d3205aa03c81e5  gdb/testsuite/gdb.threads/pending-step.c
-d18e2fcf1ac793c3cd6a334a31d13ed2  gdb/testsuite/gdb.threads/pending-step.exp
+58cbdd671462b71bffaeffe7ecf37652  gdb/testsuite/gdb.threads/pending-step.exp
 df82452f754ef15a81d71f46a0892757  gdb/testsuite/gdb.threads/print-threads.c
-1790e5944c7afaba340f636a7c1a1ccb  gdb/testsuite/gdb.threads/print-threads.exp
+4e550c82f260b6630a5a1c931077c9d3  gdb/testsuite/gdb.threads/print-threads.exp
 c1ca06cd065b3c09e17b9a052122d922  gdb/testsuite/gdb.threads/pthread_cond_wait.c
-c6a32d896451234c5b78ec53d612f79b  gdb/testsuite/gdb.threads/pthread_cond_wait.exp
+f14de15642d74358ccc40148c6c0193d  gdb/testsuite/gdb.threads/pthread_cond_wait.exp
 5e79d0ea3d3de50499d97e30d56acb31  gdb/testsuite/gdb.threads/pthreads.c
-627599ff342f41d8b4c19e584e0648cd  gdb/testsuite/gdb.threads/pthreads.exp
+29483335da8531927328eda8e1bfbae1  gdb/testsuite/gdb.threads/pthreads.exp
 cdc788ebfff74914c58a849aada16a55  gdb/testsuite/gdb.threads/schedlock.c
-68f756aa2f8750f08fd421bbd25986c3  gdb/testsuite/gdb.threads/schedlock.exp
+2805eec144cca0d541ffd327a6fd3a13  gdb/testsuite/gdb.threads/schedlock.exp
+0531ad0614ae4607110945ec28ca9294  gdb/testsuite/gdb.threads/siginfo-threads.c
+97f48d0e8b666c90a621b8e460f97d4f  gdb/testsuite/gdb.threads/siginfo-threads.exp
+cbbc58811510cc7c569f5b861be69bd3  gdb/testsuite/gdb.threads/sigstep-threads.c
+000b34784325242c5c6e07eba6edc3b0  gdb/testsuite/gdb.threads/sigstep-threads.exp
 0b0761fb016e8bcdfefea3dcb870c6a4  gdb/testsuite/gdb.threads/sigthread.c
-786cbf77b17a126494f7eba0318e2257  gdb/testsuite/gdb.threads/sigthread.exp
+2a4532eb401f76a4be772c205314a391  gdb/testsuite/gdb.threads/sigthread.exp
 718db0e15b1b7e1aa1f348008c6e0bc1  gdb/testsuite/gdb.threads/staticthreads.c
-c82651779fcb94e45d0b93b621393b5b  gdb/testsuite/gdb.threads/staticthreads.exp
-6abe05b4e05fce5d6c228dd5ef8ec9cb  gdb/testsuite/gdb.threads/step.c
-ce884312b0bf8517cda767e80f622af5  gdb/testsuite/gdb.threads/step.exp
-603701307d059f852d57910682a17eed  gdb/testsuite/gdb.threads/step2.exp
+ef7ebd4d0aa66cbd2766a83002fd10aa  gdb/testsuite/gdb.threads/staticthreads.exp
 a634c5244caf3e6e13a4ea80e15d7cdb  gdb/testsuite/gdb.threads/switch-threads.c
-ef9aa60e9e6a7a9d236b7f3ed09046f6  gdb/testsuite/gdb.threads/switch-threads.exp
+f25f2c6734c3f887aa3ee600db6d0638  gdb/testsuite/gdb.threads/switch-threads.exp
 b360d8ffbc86beb12163876b59fb4933  gdb/testsuite/gdb.threads/thread-execl.c
-a95909904e14c0989343d89093ded972  gdb/testsuite/gdb.threads/thread-execl.exp
-8fe3a983865d45a0ac98f1fbd1532c9c  gdb/testsuite/gdb.threads/thread-find.exp
+6a26e8629e51a82fe72f3ef12daf2fe6  gdb/testsuite/gdb.threads/thread-execl.exp
+b7541f90d0d5590c0e6550d8fe08b1e6  gdb/testsuite/gdb.threads/thread-find.exp
 443880afed6820f2b74fed330c9ce6e1  gdb/testsuite/gdb.threads/thread-specific.c
-161578bec2e77dfb2482408d483a26d3  gdb/testsuite/gdb.threads/thread-specific.exp
-efe06b922f3d781288649235c313ea42  gdb/testsuite/gdb.threads/thread-unwindonsignal.exp
+860cc04c53a27ee3f463e1929a8ac070  gdb/testsuite/gdb.threads/thread-specific.exp
+5aaea2c43c9a20fda0af545861474c2e  gdb/testsuite/gdb.threads/thread-unwindonsignal.exp
 3c9a6eae61cf1f2e6947abad7f81220b  gdb/testsuite/gdb.threads/thread_check.c
-e0b153e57e478354c5e0bba210b1e894  gdb/testsuite/gdb.threads/thread_check.exp
+864b035babf569db83ceea1db3f99695  gdb/testsuite/gdb.threads/thread_check.exp
 622e41728a869d5b31d9d692db993561  gdb/testsuite/gdb.threads/thread_events.c
-eeb673384b2f7c3f7cec173c364dd01e  gdb/testsuite/gdb.threads/thread_events.exp
+9512554d081cbc4682cbc445b669a230  gdb/testsuite/gdb.threads/thread_events.exp
 a783a5bfc6da0539cb6e47cedb6637e5  gdb/testsuite/gdb.threads/threadapply.c
-f0edea1982005e3c2e1e4f5fc901783e  gdb/testsuite/gdb.threads/threadapply.exp
+62548dcb252c6a2f2aab4f5daf07ccf9  gdb/testsuite/gdb.threads/threadapply.exp
 2a4acbdaa03c5e07680ef2f047208971  gdb/testsuite/gdb.threads/threxit-hop-specific.c
-56b62924cd91c4b1428cc24f1c230812  gdb/testsuite/gdb.threads/threxit-hop-specific.exp
+50aaaa83d18c53c94868ade7b09ec670  gdb/testsuite/gdb.threads/threxit-hop-specific.exp
 0bc37c048361582d53f69d0700501c98  gdb/testsuite/gdb.threads/tls-main.c
 6bd939c206a5be543cda268e0851129b  gdb/testsuite/gdb.threads/tls-nodebug.c
-ae63ecc3ebea628c549f212716682fad  gdb/testsuite/gdb.threads/tls-nodebug.exp
+6cf4c036b153f330bf158062e1e02af9  gdb/testsuite/gdb.threads/tls-nodebug.exp
 ca92dcd6537aed1d73f8b67fdf1f766a  gdb/testsuite/gdb.threads/tls-shared.c
-1f18e8a10b4ce148eee9a1383d1f119f  gdb/testsuite/gdb.threads/tls-shared.exp
+1363aa51fda033b70d4e51eac993968c  gdb/testsuite/gdb.threads/tls-shared.exp
 d7e6b781599e7f360c1a733179778ffd  gdb/testsuite/gdb.threads/tls-var-main.c
 31915292708a22a1782588bf37f2f651  gdb/testsuite/gdb.threads/tls-var.c
-78b5e4e87a14d0ec408702bb2bc7e9af  gdb/testsuite/gdb.threads/tls-var.exp
+f04803a4e82666ff64a4eb26ed17091c  gdb/testsuite/gdb.threads/tls-var.exp
 9eaba0dd2266d7d35941eb49845e6072  gdb/testsuite/gdb.threads/tls.c
-92016122c8d171ca2728555511364ee6  gdb/testsuite/gdb.threads/tls.exp
+4b54db52d1ebd68817ce339825490524  gdb/testsuite/gdb.threads/tls.exp
 d84f297fb46724ac8d25099b24c40fa3  gdb/testsuite/gdb.threads/tls2.c
+c4e50f9bf7ba1a2ee01c1a3672512530  gdb/testsuite/gdb.threads/watchpoint-fork-child.c
+6856ccb5a4ad975550cddf36105e7c50  gdb/testsuite/gdb.threads/watchpoint-fork-mt.c
+c56485482a4806d2da7ad873a4180354  gdb/testsuite/gdb.threads/watchpoint-fork-parent.c
+59b1567eeb1c719d4dcd18c7256077e4  gdb/testsuite/gdb.threads/watchpoint-fork-st.c
+ad266475ac2bf76e23860c3234989aeb  gdb/testsuite/gdb.threads/watchpoint-fork.exp
+7e995fdc3bbf68d1647f63bfc753aec1  gdb/testsuite/gdb.threads/watchpoint-fork.h
 f0fe90fc6aa7f19673c1e18c63b31265  gdb/testsuite/gdb.threads/watchthreads-reorder.c
-bf843fbab06f57003f0b97558fae4a65  gdb/testsuite/gdb.threads/watchthreads-reorder.exp
+ce3aac6891d5a13222cab0244af8e686  gdb/testsuite/gdb.threads/watchthreads-reorder.exp
 6b88bd1798245f1da0e45b3c08f9038f  gdb/testsuite/gdb.threads/watchthreads.c
-a469932bb2383617c5632e6b2190c9c5  gdb/testsuite/gdb.threads/watchthreads.exp
+b701a07a6ebcd89284c2e63a4d2b2111  gdb/testsuite/gdb.threads/watchthreads.exp
 0fb98d6775ed54355a8882851571fbea  gdb/testsuite/gdb.threads/watchthreads2.c
-425d1a14361e2bad1f4712c273b3001b  gdb/testsuite/gdb.threads/watchthreads2.exp
-bcaeb284be19d073390d818b5b645a63  gdb/testsuite/gdb.trace/Makefile.in
-e699653ef8a1000ac4324b0923e069ac  gdb/testsuite/gdb.trace/actions.c
-95e962f07e29c5101425d1f8b2024599  gdb/testsuite/gdb.trace/actions.exp
-0d394063bd82d3f31d5eb56e2cafef92  gdb/testsuite/gdb.trace/ax.exp
-d2ac4ec90c597192ec1cbf787457d40b  gdb/testsuite/gdb.trace/backtrace.exp
+8829f48e5813070989b24b76180d3841  gdb/testsuite/gdb.threads/watchthreads2.exp
+4e294b8585530bac6fa8122f36698507  gdb/testsuite/gdb.trace/Makefile.in
+df15f5c4044b83e574353bccb2ab49c5  gdb/testsuite/gdb.trace/actions.c
+53fc7961c127b8c9140fbb757dd346a1  gdb/testsuite/gdb.trace/actions.exp
+f62e4593beda304b64e6201224d83d74  gdb/testsuite/gdb.trace/ax.exp
+a95b5b2296b941036caa953a44db8f8a  gdb/testsuite/gdb.trace/backtrace.exp
 6c3d9607cb3138127ef0dc98c8f28910  gdb/testsuite/gdb.trace/change-loc-1.c
 1576c66c95bd9012e7c0f8d358a6b74a  gdb/testsuite/gdb.trace/change-loc-2.c
 38895f7e1bde44b49edae16a5b5ecbe5  gdb/testsuite/gdb.trace/change-loc.c
-f8103018e655c3ce55b0cda3367a137f  gdb/testsuite/gdb.trace/change-loc.exp
+7a7f4c0575c3fc5284281c2b36cd808b  gdb/testsuite/gdb.trace/change-loc.exp
 2b3a7585f3d1e14d3a1f23baa8d71525  gdb/testsuite/gdb.trace/change-loc.h
-d2edd9bfb6b15369a5e3296908d0bf6d  gdb/testsuite/gdb.trace/circ.c
-5db69dce068d16ebb76ae941b9ad19fd  gdb/testsuite/gdb.trace/circ.exp
-56e672dc3f1f340e3636d64bf4ce6e5c  gdb/testsuite/gdb.trace/collection.c
-b57e92f39cf707b86be64735aee6e936  gdb/testsuite/gdb.trace/collection.exp
-5ccae9c3f9f102630ec4a68cec6cdcf0  gdb/testsuite/gdb.trace/deltrace.exp
+5569c57b8789e7ee9021da595e3750a0  gdb/testsuite/gdb.trace/circ.c
+6a25c5c263cf999c685f5cc63673fe5c  gdb/testsuite/gdb.trace/circ.exp
+5ce1dd6f83fe7cf45424d8300c1c7493  gdb/testsuite/gdb.trace/collection.c
+2b732bd65d12bfa71303fc4c726c4ad2  gdb/testsuite/gdb.trace/collection.exp
+ddbc2f2e3ec288a481e912d6214c9cd0  gdb/testsuite/gdb.trace/deltrace.exp
+83786b4f147a6d0130b0a74fd148d7d0  gdb/testsuite/gdb.trace/disconnected-tracing.c
+2beb2991e8aa4df5459d0b49e700f5f6  gdb/testsuite/gdb.trace/disconnected-tracing.exp
 f2a8e88d46144d89427e6d3219052341  gdb/testsuite/gdb.trace/ftrace.c
-6c778f3fe627ec068879cb8850af6792  gdb/testsuite/gdb.trace/ftrace.exp
-284182487881e75d42f1e053c19c32fe  gdb/testsuite/gdb.trace/infotrace.exp
-f5aac8886009e4fe17201baa60bb818d  gdb/testsuite/gdb.trace/packetlen.exp
-a738237a2ac1e71901ac225e662ced2b  gdb/testsuite/gdb.trace/passc-dyn.exp
-618b316e8c4cb99ed4d5948abf26e881  gdb/testsuite/gdb.trace/passcount.exp
+e2f519672105c28a3ef04e7cd5d3b3f8  gdb/testsuite/gdb.trace/ftrace.exp
+d6d78e1b5dd2a1fdc34f36040a925827  gdb/testsuite/gdb.trace/infotrace.exp
+f649de3221092bc809c69e10007e9b2f  gdb/testsuite/gdb.trace/packetlen.exp
+5f842986761e64b6ea477a4102b67162  gdb/testsuite/gdb.trace/passc-dyn.exp
+a520bd23f414362a69c4cb5aabb2399a  gdb/testsuite/gdb.trace/passcount.exp
 dde6d3675f0ce29ee3c4426bebafdb9f  gdb/testsuite/gdb.trace/pending.c
-0cd44263c423c3619cb9dabec045f16d  gdb/testsuite/gdb.trace/pending.exp
+5408218a94d549edcd0be3415b7697fe  gdb/testsuite/gdb.trace/pending.exp
 0f981eb74605fae4672f4af2b2ca93e9  gdb/testsuite/gdb.trace/pendshr1.c
 9eaad1f19a7887c8b348b13e53cc8c6e  gdb/testsuite/gdb.trace/pendshr2.c
-390e7ad7ee044f672172141620571c8a  gdb/testsuite/gdb.trace/report.exp
-aa3efb092f5e5976d42a6d7a9883f13d  gdb/testsuite/gdb.trace/save-trace.exp
+540b19dbf556f253056d0bff44758fb8  gdb/testsuite/gdb.trace/report.exp
+596b3676081b42573d2eb77af3be8ca5  gdb/testsuite/gdb.trace/save-trace.exp
+2819dec24f2d828d7c38c6dbd9e2f282  gdb/testsuite/gdb.trace/stap-trace.c
+e3fbde5d3c2eadfaf63d8d8f309493f2  gdb/testsuite/gdb.trace/stap-trace.exp
 c1e7b1f7a6cb1d155c11291f10765bd7  gdb/testsuite/gdb.trace/status-stop.c
-3a38c1c9f57efd99d128c84e5f124ca9  gdb/testsuite/gdb.trace/status-stop.exp
+4f8545f82547b38f8894cfb45876680f  gdb/testsuite/gdb.trace/status-stop.exp
+8a3caf0c9940c7747d7ea65c62d46701  gdb/testsuite/gdb.trace/strace.c
+2f8ccb590fe7c57f5b3feddbb0661380  gdb/testsuite/gdb.trace/strace.exp
 4efd64858c862fbf8d8489a911aa845d  gdb/testsuite/gdb.trace/tfile.c
-d06d3e8393098515811d31c2acb823c0  gdb/testsuite/gdb.trace/tfile.exp
-926aaa156ce10ad3fc4e644e063fd69c  gdb/testsuite/gdb.trace/tfind.exp
+a6cd694a5300f62d432f9e4158dbeef5  gdb/testsuite/gdb.trace/tfile.exp
+f4e9d6193739549bd82923d46ee0c021  gdb/testsuite/gdb.trace/tfind.exp
 28eb71a8e59b78e50aca2a0e72c6ebe8  gdb/testsuite/gdb.trace/trace-break.c
-c4d71c9879d3f2951072d062e122107a  gdb/testsuite/gdb.trace/trace-break.exp
-8a82a37445332318c23753706c9a3623  gdb/testsuite/gdb.trace/tracecmd.exp
+9d6f2c5835d26436be5b46a088b85420  gdb/testsuite/gdb.trace/trace-break.exp
+ecde0b1b077e0224eb44d33c6b21a573  gdb/testsuite/gdb.trace/trace-mt.c
+edf909d73f291d598aa3dab294272986  gdb/testsuite/gdb.trace/trace-mt.exp
+39579191075fa7580f1c4eb780048d2f  gdb/testsuite/gdb.trace/tracecmd.exp
 b7a73a697176fda01fc02bae97e3ba6c  gdb/testsuite/gdb.trace/tspeed.c
-808ac9f72dc45da325f61dd2790ce3f1  gdb/testsuite/gdb.trace/tspeed.exp
-36c14308dd96b6ec16dbce337f02c23a  gdb/testsuite/gdb.trace/tstatus.exp
-bf562ff5e2d36bfe32d6027ea0fef134  gdb/testsuite/gdb.trace/tsv.exp
+4b6c9f989bd69260b8bcc350d6e21205  gdb/testsuite/gdb.trace/tspeed.exp
+de19824e854e1122a12f87f72f566251  gdb/testsuite/gdb.trace/tstatus.exp
+d75d8d427aef185b8b940ce948e8581b  gdb/testsuite/gdb.trace/tsv.exp
 24cd08dc36d3e36241b62c688b9c40d6  gdb/testsuite/gdb.trace/unavailable.cc
-00a103565d79edfaa45027d71932c4f4  gdb/testsuite/gdb.trace/unavailable.exp
-2857b0c7587eb89781b17df386aa1ff0  gdb/testsuite/gdb.trace/while-dyn.exp
-4499e6067fa819138c3cd9d6bb6507e3  gdb/testsuite/gdb.trace/while-stepping.exp
-07bfe26f379e39fc5296fb75501aaf52  gdb/testsuite/gdb.xml/Makefile.in
+6ebc7e4e23b8a9b0e0a2dca9fb428648  gdb/testsuite/gdb.trace/unavailable.exp
+98da0003f22a1ebd8fd56b3a8242847d  gdb/testsuite/gdb.trace/while-dyn.exp
+def1fb47180cb49faec324a2f4be8060  gdb/testsuite/gdb.trace/while-stepping.exp
+1282826776fbaa3434eaf9c13379f11c  gdb/testsuite/gdb.xml/Makefile.in
 4f6f7233919a7b5cbebb97e0d9b9fcf6  gdb/testsuite/gdb.xml/bad-include.xml
 6822163e38e7af33a0d81cdac6768ac9  gdb/testsuite/gdb.xml/core-only.xml
 5f040cdc742fff8b8845e8ed21d20381  gdb/testsuite/gdb.xml/extra-regs.xml
@@ -3875,11 +4197,12 @@ b17141653a2a7f81010b78ba903cfdec  gdb/testsuite/gdb.xml/includes.xml
 8988065398483a21c50b4b3e347922a3  gdb/testsuite/gdb.xml/tdesc-arch.exp
 217bac7412f8837f007be696d457b70c  gdb/testsuite/gdb.xml/tdesc-bogus.xml
 6085550bf9acaedb46ac36ef33fba199  gdb/testsuite/gdb.xml/tdesc-errors.exp
-d1fab8b01b4742b17e7c0ecc24028edb  gdb/testsuite/gdb.xml/tdesc-regs.exp
+2a7fe63b3a1f9312a1d44074c3854f1a  gdb/testsuite/gdb.xml/tdesc-regs.exp
 f8e7043a6ec28fe297b2ed7aacd0501b  gdb/testsuite/gdb.xml/tdesc-unknown.xml
 52431b7e72104d58e55b29d98530c7b4  gdb/testsuite/gdb.xml/tdesc-xinclude.exp
 0762eff212b3c7e9fe3c7047b5f037d9  gdb/testsuite/gdb.xml/trivial.xml
 f778ecc2d9ad6ee20b1c776f128c4d54  gdb/testsuite/lib/ada.exp
+72f81fb50386a83d872e213d4fa7928e  gdb/testsuite/lib/append_gdb_boards_dir.exp
 f3b186643f452e1f8a949613a87ac99a  gdb/testsuite/lib/cell.exp
 83fff5efbc2cf35db1c3d07a3862f7a2  gdb/testsuite/lib/cl_util.c
 334402f5e989d7e9bb54f38e485f37b4  gdb/testsuite/lib/cl_util.h
@@ -3888,12 +4211,13 @@ f3b186643f452e1f8a949613a87ac99a  gdb/testsuite/lib/cell.exp
 279c70e5c3341eda273481d9289601e5  gdb/testsuite/lib/cp-support.exp
 4889a88c58a05a21afb8f6cba066d8c3  gdb/testsuite/lib/dwarf.exp
 6b64019bc3b989ff3c4f43d7d05d9989  gdb/testsuite/lib/fortran.exp
-b8a433e96fd052ea6cfb0ce68d695082  gdb/testsuite/lib/future.exp
+5cd24413a6dbb7177ca707c2b64607d3  gdb/testsuite/lib/future.exp
 d239eaeaacac1055125b70b9a9760421  gdb/testsuite/lib/gdb-python.exp
-b4849beae55ef3f6ebbe74a4ada46157  gdb/testsuite/lib/gdb.exp
-4e792648d322de720158e51b36eca5fa  gdb/testsuite/lib/gdbserver-support.exp
+15bba05edc13cbd18287147a37ad99e1  gdb/testsuite/lib/gdb.exp
+50b624a3bb3f5fe169fddeaf02daa20a  gdb/testsuite/lib/gdbserver-support.exp
+777cf66a4347ab65ba50690bfe3b2ab4  gdb/testsuite/lib/go.exp
 124f4627e54084a8df56842b401576f4  gdb/testsuite/lib/java.exp
-b545852440d0fc0fe283ea96a673ef80  gdb/testsuite/lib/mi-support.exp
+3eacaf034279c9bd51752fdd216d135b  gdb/testsuite/lib/mi-support.exp
 05712b4632eb1e21954902cfd98b30c7  gdb/testsuite/lib/objc.exp
 ad31ce81c4b703d82894202cd827cd9e  gdb/testsuite/lib/opencl.exp
 68e0a89896b09e322f28a115100fe6d4  gdb/testsuite/lib/opencl_hostapp.c
@@ -3902,32 +4226,31 @@ b95dc2a351d65373861d5ccbc6f62d5c  gdb/testsuite/lib/opencl_kernel.cl
 a3e792b9c398ef932745abf174a13a78  gdb/testsuite/lib/prelink-support.exp
 51323fb624257bc195fa3ef239e6ca46  gdb/testsuite/lib/prompt.exp
 a825a837dc24328e8b47982f7de07e36  gdb/testsuite/lib/set_unbuffered_mode.c
-cdeb70220ddeebd08eb4e4118117aefd  gdb/testsuite/lib/trace-support.exp
+2f465e0c45b25a74fa6c143f2cc3b121  gdb/testsuite/lib/trace-support.exp
 0415f3bd7a379430b752618c1e8c7cd4  gdb/tui/ChangeLog-1998-2003
 da1c108f3aa253503ff18993961d3ba5  gdb/tui/tui-command.c
 e90b977ab259ede45c36a113e9ba6647  gdb/tui/tui-command.h
-3103332b45c61910a966ece9581b3614  gdb/tui/tui-data.c
-6779a54795e20b5ec1b18194a7049c8c  gdb/tui/tui-data.h
+ea6a63a5c70c16e4474e5ed80c7b4f75  gdb/tui/tui-data.c
+d18473e1ffa1ca5fcfaed5249ac880c9  gdb/tui/tui-data.h
 914f81a263eba5471cf58ef0327b5c79  gdb/tui/tui-disasm.c
 c03094a2a5e79dcbac5acf972f3182d7  gdb/tui/tui-disasm.h
 b6dd2aba4b0ee5541e861c0a1552ee3c  gdb/tui/tui-file.c
 064a4ff1bebb725bb893d6e73982a3de  gdb/tui/tui-file.h
-9a94259120ec5699e2be060be8542428  gdb/tui/tui-hooks.c
+809a4bf631074d80adc1fcb04d29fe75  gdb/tui/tui-hooks.c
 8a8b22e69614f3bf3b5d570b332c0936  gdb/tui/tui-hooks.h
 cecd156f9ea812ce5089598542cba27a  gdb/tui/tui-interp.c
 0044a3fb93ff11c145fdae49bfd2bb4d  gdb/tui/tui-io.c
 723cc96aa0335556ded304c077c03d8e  gdb/tui/tui-io.h
 cf08616fbeee4df713a177e071b29a66  gdb/tui/tui-layout.c
 4daaca89a1e223d1376971fba91ca9eb  gdb/tui/tui-layout.h
-9459a0b75ae9e0e7b4afa823713befad  gdb/tui/tui-main.c
 f5a5deb0b695d032705f83af73e46522  gdb/tui/tui-out.c
-c68b4a2ddadffb1d5ee6994b3a3df510  gdb/tui/tui-regs.c
+ebd7c6794f4534b2d17ac3818f190a06  gdb/tui/tui-regs.c
 8475b3465b6f8e533fdac78361098830  gdb/tui/tui-regs.h
 edecc37f2ccf22fe3f5e8a0751403303  gdb/tui/tui-source.c
 be50d74f32ce783eeac82501c1fc296c  gdb/tui/tui-source.h
-cb9d215be023c66bdec524f53121139a  gdb/tui/tui-stack.c
+067f5ec30c46a8d1aacbb341ea028d5e  gdb/tui/tui-stack.c
 31a713fdcd8ff97d5a475ed19ff22d5d  gdb/tui/tui-stack.h
-37ad2b6332f52dac8af77bf183c0418d  gdb/tui/tui-win.c
+0c7b938ab94d0d08e612668861d57bb6  gdb/tui/tui-win.c
 3df49fd1dc780d7fd57942c00882a0d4  gdb/tui/tui-win.h
 e0132e5c4f83e7781e1d0781d9530d05  gdb/tui/tui-windata.c
 af46c96b7a6a2e51844ff32a3c94753b  gdb/tui/tui-windata.h
@@ -3937,32 +4260,33 @@ f4f3ee4fa9b599ce98a9a42400f989a5  gdb/tui/tui-winsource.c
 775072f93e0c29a926976e2047363155  gdb/tui/tui-winsource.h
 dafff967c76100b688d32f8a7b72348a  gdb/tui/tui.c
 a2f395dad4660a650530ea9a36884b02  gdb/tui/tui.h
-d46a2d154df04991f0fcc76039a74591  gdb/objc-exp.c
-6301da59f6599f51d7ac06dd17916fc3  gdb/c-exp.c
-91023a1d58d69b4916a8609882d782a8  gdb/stamp-h1
-013c1894e21827204085c6ce3b2746c8  gdb/cp-name-parser.c
-7350db31043e1612dea2490b7a7c069d  gdb/ada-lex.c
-39c0f1e08239758e5c3ae7b266feafb0  gdb/ada-exp.c
-b26c3033ab305c3bdc0c50b0a4b57402  gdb/jv-exp.c
-e63adc150d6972bc19f7e266a9b6dc40  gdb/f-exp.c
-f9748dd4d2651746f489c98914b71074  gdb/m2-exp.c
-1ccfa458ac24a9ac5fca7ae3a6345e5d  gdb/p-exp.c
+5b5339002433c16d3481b1de3358a9d2  gdb/objc-exp.c
+ca0ec951a596f6103941f39bc0a7917c  gdb/c-exp.c
+694b6ca00bde700317ce730496c8005c  gdb/cp-name-parser.c
+8aebe1a147c4aee5833977b17c32c26f  gdb/ada-lex.c
+ffbdea74462075d1a60a10375ef2091a  gdb/ada-exp.c
+fd28aa8ecc03650f4727939fd3e67936  gdb/jv-exp.c
+43e1c34be21f4e99e2d209740d98644c  gdb/f-exp.c
+1a09786f227a884b1f3b8d666797077d  gdb/go-exp.c
+c77c83448ecd455d6a031ce414c92b75  gdb/m2-exp.c
+26a59ac14a65aac505561d8f80478be7  gdb/p-exp.c
 59530bdf33659b29e73d4adb9f9f6552  include/COPYING
 d32239bcb673463ab874e80d47fae504  include/COPYING3
-4f48721d0aca5f0165df90ac4af6697f  include/ChangeLog
+2410bf6b12b703fd18d4c09d8d481b4d  include/ChangeLog
 4263432a72ff47ed8bf420208ee7eea5  include/ChangeLog-9103
 d618facc3e8ce8bf3d02ba452e1be6ab  include/MAINTAINERS
 34a574860b19567290ef5380ad1a2add  include/alloca-conf.h
 c40ba6a2a63d615e632bdba97866cea5  include/ansidecl.h
-1db71a14c0f6670060e4d92570413cbd  include/bfdlink.h
+d1706d41d3996b900541b5a6457e833d  include/bfdlink.h
 8899f3b1094aed581ee5ce21fb77eeb5  include/binary-io.h
 f3c1e3130022d959443585d2333df0e8  include/bout.h
-6d555059e47b54b4190e647ba46f32b8  include/demangle.h
-a23487914a2e9dabbb9fb1caea85a1ca  include/dis-asm.h
-5550f59655329d720b345cf218922666  include/dwarf2.h
+5b2df72b3c122934ec1dce7f8ef4cf82  include/demangle.h
+bc80351b6d4453a62c313dbe0e1809ad  include/dis-asm.h
+9499bcd5beebc7ef960e6d1a476611cc  include/dwarf2.def
+fbc3e1cf8e8df0102f4cccfbe7a7c794  include/dwarf2.h
 7e968442c6c0231dfe2def312758e765  include/dyn-string.h
 6cd2afc8e147c2eed4404d0845dfa47a  include/fibheap.h
-bf41284ba32805344a0d778b39b0220c  include/filenames.h
+619af9e2694488ca6f9a13d29b206d8d  include/filenames.h
 5029c34a63aebe10502a4059ffd7e427  include/floatformat.h
 7d6baaede380aa3344526a4bbf8a294f  include/fnmatch.h
 b2cd17a9267bc2e92df461d3170cb15c  include/fopen-bin.h
@@ -3973,6 +4297,7 @@ c6c79c7650e939987e61782932471d6f  include/gdbm.h
 b14b5907a8d21fe886487feead7161c8  include/hashtab.h
 27e2b82efdf39b6ec9889dcc03468d28  include/hp-symtab.h
 97a8767b7f95bd5bb7207d0215541d10  include/ieee.h
+f37c73fd8b85558dcfb68bd6d67f82e0  include/leb128.h
 99ba7247f98c6b02e3033110b29150f3  include/libiberty.h
 741cac90249849bb61230ecd5fb777de  include/lto-symtab.h
 e994d64a5f8fff3c81791b6d8a1d09b7  include/md5.h
@@ -3981,13 +4306,13 @@ e994d64a5f8fff3c81791b6d8a1d09b7  include/md5.h
 44c7ff060ba30ebe0900b63c327d30b1  include/obstack.h
 10cbf87ea52bafe84a696ec172e072d5  include/os9k.h
 b212dcdaf1121bd8a14b03ebb2ce5ce1  include/partition.h
-f09eca32351413c6ede8d270c2944078  include/plugin-api.h
+d2151974782ca7acbe176a71d2017118  include/plugin-api.h
 31582c91154fd42d85121c9b7dfa4404  include/progress.h
 f407187879a6cc40877c4b38ee717349  include/safe-ctype.h
 34b05c11cce7bd2bcc461549eb34bd09  include/sha1.h
 c2d8ea6a0bcacf3a3d5128a916291424  include/simple-object.h
 ffc879400e93c3be7e8727262ff65700  include/sort.h
-a137d3d4edba8fab397dddb9f3d5ccdb  include/splay-tree.h
+82be368bc0fe671e7bf9500e95743ca5  include/splay-tree.h
 4b6357d1d36b0981d1f437ab787cfa51  include/symcat.h
 e34d525d7faceda0dd5cb3eae49c1548  include/timeval-utils.h
 53bdfdb5cd3c0c7831611602041cda52  include/xregex.h
@@ -4055,14 +4380,14 @@ c9ca24217769549d3b1a88ae2d219412  include/coff/x86_64.h
 adb495746480cf5e4bec3fe6c3d3bceb  include/coff/xcoff.h
 2abcef5d0d6f17bc50116ce28c2a9c79  include/coff/z80.h
 598577f829ade2923058b3aa70fbac61  include/coff/z8k.h
-ebd1f25244729e6be7d211d8a6e65b5e  include/elf/ChangeLog
+688dfe8e0dbe63e7ead2af1b6b1ccedb  include/elf/ChangeLog
 98f9c5b892b53edff47e277ff7d497f8  include/elf/ChangeLog-9103
 a0be754e05a23a8ec6b90db035b264fa  include/elf/alpha.h
 07b373cba191d679f95f44fb56ee2f62  include/elf/arc.h
 f0fec15cd5722ca40e791ceb6fff0864  include/elf/arm.h
-cd6e7c61fd149a7c60a81e3f3172ab6c  include/elf/avr.h
+f2bef435e745965f9aec4ba355974d32  include/elf/avr.h
 6cdc5aea929775d124edd759932f0f21  include/elf/bfin.h
-1d475bce439c68b6bea88776fcf33fb7  include/elf/common.h
+e67730d52c10f48620a1e09453e40757  include/elf/common.h
 833f67e93dfac42af486802c610b6e50  include/elf/cr16.h
 d557cb1da86b222f1d446100b403e863  include/elf/cr16c.h
 4a1fffce3fb4620d590f27cc8f28fe6e  include/elf/cris.h
@@ -4088,48 +4413,50 @@ c77ae174f27c7490e252c18e2c04ef1f  include/elf/internal.h
 c419f9feca3ab0795a69b694858b8508  include/elf/lm32.h
 adc2d9020e08eaab707704eec6c20168  include/elf/m32c.h
 9cf7dfeb398922addf1273a9ed9a1cb8  include/elf/m32r.h
-b79cab44748c89662f9ba4c8eeb5e016  include/elf/m68hc11.h
+60420224b1de13e39431ec19f6063d50  include/elf/m68hc11.h
 405a16584c84e60c8b230c7d1f449fa4  include/elf/m68k.h
 acd354050b83b2aecf2c78e0c2fc3b12  include/elf/mcore.h
 d81e7a0dca173a1ba09c1999fba38b56  include/elf/mep.h
 f330b5f3671b02e554c928157c1edd6b  include/elf/microblaze.h
-45dd9dc4045aa4cd9019837bc8f163d9  include/elf/mips.h
+7ffb4ffc5ed4c4296590771e621e6de2  include/elf/mips.h
 b841c8ba42956d6f7e17537ce63236c8  include/elf/mmix.h
 7ed67b249c64a72d05d9b4d87554dc18  include/elf/mn10200.h
-ccc949431c77de0330ee3c20548b7e67  include/elf/mn10300.h
+c2ad8d35ad4f62e2032d839ad34f17b7  include/elf/mn10300.h
 71e4a33766312419df99b0e62c39e445  include/elf/moxie.h
 eb3d9aab50e9c9fb6e18ad4812db0118  include/elf/msp430.h
 bbbd9d7f4e8f79f4d93e007aa07bf778  include/elf/mt.h
 b63470ef405cd3627e8a4fbff6bfd5e9  include/elf/openrisc.h
 8eabdfbd28ae6198beccb31177efe06e  include/elf/or32.h
 8adb19e5cc46d08bd2e4956e35270751  include/elf/pj.h
-7c23650992c8b40893751f297da52275  include/elf/ppc.h
+c960e4cd8ddc3ce5d9fadfb25cb54a2b  include/elf/ppc.h
 831ad133be87ebb0c334458ac71e9b28  include/elf/ppc64.h
 b465c7a7c9368125ccd6102fafe986c5  include/elf/reloc-macros.h
-003bf47ba6cb90103794c9e32786da1e  include/elf/rl78.h
+72dd178cc90f84892d263d692b789f97  include/elf/rl78.h
 545d41645ea67471d5b534804f593e4a  include/elf/rx.h
-ed1da1299b5bfacd5d3fedda42866edd  include/elf/s390.h
+94b31541a2212bded870e092ac0fdaed  include/elf/s390.h
 31572c17886e82b32afee52ddac4b8c7  include/elf/score.h
 fdf0c78b30e3def4265b84749ac7636b  include/elf/sh.h
-4d28901c9577fde21e67f7ce7c60e0d4  include/elf/sparc.h
+5f8215501c5d15a16436b49338a1ef74  include/elf/sparc.h
 14a24081c6a435663296024c32f2aaea  include/elf/spu.h
 da1403a10c2f7da13868f1995ed765f8  include/elf/tic6x-attrs.h
 5d85ecbb50678de258bdfedad761475e  include/elf/tic6x.h
-ce8fb71e4fd9470fdc0b3c6ca2a6d620  include/elf/tilegx.h
-d134e5d222ab02346e1bdc467076c9c5  include/elf/tilepro.h
+fbb53c50ed60e237dd3c6f08b7475c90  include/elf/tilegx.h
+69e7ebf6904b58936bbf95b5f859ee27  include/elf/tilepro.h
 668ad953ff79fab28ea63be3c5e77db9  include/elf/v850.h
 cad5c91a81e838b439e530d350909b47  include/elf/vax.h
 08fba636fe2637ddc5176ab120cce6f0  include/elf/vxworks.h
 d12111ea734fb1577739f855f8ca6fec  include/elf/x86-64.h
 4bc7ecb76afcc22d26fa3b926b6daada  include/elf/xc16x.h
+20226bc95acc60409871175c25e7d923  include/elf/xgate.h
 08c0eb5204c37ddb199cbe638ff33c53  include/elf/xstormy16.h
 05ae7083595b682022f2dc9eecff9877  include/elf/xtensa.h
-0fe4a8d6bf07c8671aadd149f742e71a  include/gdb/ChangeLog
-602d68c7f3e67e33119a7addbe57b6ed  include/gdb/callback.h
+2c05dd4439ba5352570e20f49e4c6ec7  include/gdb/ChangeLog
+e1c34561e987bc633faf31df3ca656fa  include/gdb/callback.h
 b9692ac9c6957dd0bfc9e0ddeb46bc02  include/gdb/fileio.h
+19e317f14a5018473ef016c96e1ce901  include/gdb/gdb-index.h
 95c01db0f19c4f6d089f0b761cb0ad96  include/gdb/remote-sim.h
-9cf43c01678d97043e69af70db72fce2  include/gdb/signals.def
-62b83f2903fa1b6efc6dc684676a0389  include/gdb/signals.h
+5e5ae28b33ced40c46058cbfd284d270  include/gdb/signals.def
+3f3a81157a5b56da7e8ea3baa6d3c475  include/gdb/signals.h
 35cf137e197d949c9408202704b7b271  include/gdb/sim-arm.h
 565cc9dce7f87accf001d1e6ebb264ef  include/gdb/sim-bfin.h
 e07132e50cb3970d97eea32d11adf021  include/gdb/sim-cr16.h
@@ -4139,12 +4466,14 @@ a606d9a0e930a8a6d2fffbe1a9ff9efb  include/gdb/sim-h8300.h
 f4727eb051bebabeebe756c95887135f  include/gdb/sim-lm32.h
 3035a43eb527c9316b199d6312da3c9e  include/gdb/sim-m32c.h
 1a565b3f81445a87320c8fd5c42503a2  include/gdb/sim-ppc.h
+a6af1e3e7b76833688af3e025aa96014  include/gdb/sim-rl78.h
 c37583d812273bb9482eb78fad958beb  include/gdb/sim-rx.h
 4da6cd250b49aac3a3d60fb6904ec93a  include/gdb/sim-sh.h
-3835b04e73ad824ae9a82745d6a9a310  include/mach-o/ChangeLog
-e47902a1febdb36ba352b012fac028b4  include/mach-o/external.h
-bc5266173f3a7c58944d74ccd77ab9c1  include/mach-o/loader.h
-a3be11cb068f8f33831c6f1233d92056  include/mach-o/reloc.h
+7012e8f17941d96ada576caca7d9a4c6  include/mach-o/ChangeLog
+aced8642d5bfd2d505d648a13a73e022  include/mach-o/codesign.h
+8add4dd2e557d437c022a4ae9d7343de  include/mach-o/external.h
+c3d10af373433ccf7d5af38cb6c2d1f2  include/mach-o/loader.h
+e471e4bd1a7761f65632b224d8f45582  include/mach-o/reloc.h
 246ec9592b8643e0436200783361dda0  include/mach-o/x86-64.h
 b3429a1bc8a629a099df6e98ab939602  include/nlm/ChangeLog
 8987130f1c1fc6547fc26cc7dbafe0aa  include/nlm/alpha-ext.h
@@ -4154,32 +4483,32 @@ c5c9d05c1d16379fb9f96c8ec954c5c9  include/nlm/external.h
 09f97c76b2c744131a200bdc7fa33c35  include/nlm/internal.h
 ba3e2410c85ea661024a7d27360afb80  include/nlm/ppc-ext.h
 555d624236f77f04e2063d455fdd3c97  include/nlm/sparc32-ext.h
-bcce29b913bc3252fe9e7541e630a3f3  include/opcode/ChangeLog
+65a9499d96ce6d9e8c59694dcb6d8692  include/opcode/ChangeLog
 422ec9ceff6284c1c213760d8d847ace  include/opcode/ChangeLog-9103
 deaf0df0e2d6c5a7bf0ee9caba4305b1  include/opcode/alpha.h
 cee84b6ac4bf5ac5b70f37c43a47f8ec  include/opcode/arc.h
 7394461a9415dc18f047497f1cf3ea2b  include/opcode/arm.h
-a0c8eec19b02cdfe7360b3a4a8677ea2  include/opcode/avr.h
+ac7c2ab71d35b46004f4b25b4ba24e05  include/opcode/avr.h
 3f33fd3299b17a72ced502e07febd074  include/opcode/bfin.h
 15a2fb48bf2c3ad804768e1e0d592960  include/opcode/cgen.h
 fa4047908e1aff4811fe77680065510e  include/opcode/convex.h
 a02c23db91d70feb3bbcfd667aa8dc73  include/opcode/cr16.h
 48bf08b1c7e518e2051141f5e241c998  include/opcode/cris.h
-e1e2463dfebecacab2cd54043b6ad31d  include/opcode/crx.h
+60560c774d0f3fe0da93e37be9f0bbe3  include/opcode/crx.h
 7a4987744ef7a7f4078c5a8c576336b7  include/opcode/d10v.h
 2aab9f5c7ac5de630a5ab61dffee686b  include/opcode/d30v.h
 f84b076cad9f87a270aa56cbea14f9ba  include/opcode/dlx.h
 7f63cf5dfc5ef1fc339d6c7a6fee0056  include/opcode/h8300.h
 6b85b43c12d0761473e2d612dcd3d695  include/opcode/hppa.h
 54cbff9b5d02dc47b71ed655ef7737ff  include/opcode/i370.h
-0427f68f546cb52b130235c1f6102f09  include/opcode/i386.h
+023689bbb2505d5aabc9664b1087b35e  include/opcode/i386.h
 df8f12dfd8d0b1451ed5c2046312ddf6  include/opcode/i860.h
 a56f5898179c9fc902c6c327c783bb53  include/opcode/i960.h
 482b5385aadd9b8108be5ddf3b830368  include/opcode/ia64.h
-82ceedf44931bbd1f53e43446c16d98c  include/opcode/m68hc11.h
+1d82db72c1b06b43cd662816c4dd0d47  include/opcode/m68hc11.h
 de8665a54a36f8c24293459b0600a29b  include/opcode/m68k.h
 a7767c170cf4c03cfe45af922a9f4712  include/opcode/m88k.h
-bb4286c02bf84bf6a033a0b7d6d09c74  include/opcode/mips.h
+9e1791190580640a17ede77592315c04  include/opcode/mips.h
 5dcba87aeb69d978d0a18f90273f64b7  include/opcode/mmix.h
 f05383f2385be4bb45c21332d96ba6fd  include/opcode/mn10200.h
 ea6d3f479e270d1b495da19cf71531a2  include/opcode/mn10300.h
@@ -4191,14 +4520,14 @@ a20e9cd3cfdfd503ebc3832e99ce2d3d  include/opcode/or32.h
 24f31cdc90efabd60c1b495ee36b4645  include/opcode/pdp11.h
 59f34e20ddfb8380dd5e14669903eac4  include/opcode/pj.h
 904930a6da216d930ed050e8fda269b4  include/opcode/pn.h
-ce376e5c05e5f11002c2b2aff453f585  include/opcode/ppc.h
+8a1ab8aa20992349f5d6a4ad8c3a1c31  include/opcode/ppc.h
 7bfc43cfb0a7db8606357492e077735c  include/opcode/pyr.h
 a4348bae934b831a9cb22321beaaf4ac  include/opcode/rl78.h
 d13912548d0ed599b86d03326e8bc298  include/opcode/rx.h
 3029b0bba5889b9f818db8e3e1d7cbdc  include/opcode/s390.h
 df0c40d81329409d82344b6d266a8de9  include/opcode/score-datadep.h
 608ebdcc4ac46872571bfbe2d970d329  include/opcode/score-inst.h
-568c45ae2814c0396720e01f4dd2573a  include/opcode/sparc.h
+2865f2234c807ad9a82c849e1f449134  include/opcode/sparc.h
 4723833e3e62f9e982b99c58abb15b5d  include/opcode/spu-insns.h
 c14771870a5df1b422affd75b5d38086  include/opcode/spu.h
 c69e19287023c929ac20ee5311acfadc  include/opcode/tahoe.h
@@ -4210,17 +4539,18 @@ c5a881e7ef0b1a02009742c2020a9e60  include/opcode/tic6x-insn-formats.h
 26df5941f5530c412ae5e078fa2e11c1  include/opcode/tic6x-opcode-table.h
 7185a3931c3f8698b9174b081caa875f  include/opcode/tic6x.h
 908392f63074afd6f59631782b74b286  include/opcode/tic80.h
-3bb1feae07579ad29b706d73b1f9dfe7  include/opcode/tilegx.h
-6d3b86739c74f1047e9589ae4b52d9a5  include/opcode/tilepro.h
+5aea705a8c6cc1fa6728208702093592  include/opcode/tilegx.h
+b7a849b9b1500da5dce31a119b6ce042  include/opcode/tilepro.h
 1735b8cb5147cc087b956bf9f0025f84  include/opcode/v850.h
 b611a308a75056c2a8186199b92d8751  include/opcode/vax.h
+74df238cda9084f9a9049b1b757fa85c  include/opcode/xgate.h
 c43947b0b5de54a75109c4cee325b363  include/som/ChangeLog
 629ae8ac3ef91fc03af64dd1e2fbd58a  include/som/aout.h
 085e076342ef6bf2062ba033f466ceae  include/som/clock.h
 652226dcecf615295764cf795a829111  include/som/internal.h
 b35975811a6a1bad6e65ffcd2f5d122e  include/som/lst.h
 0cf7926687d5ac13f2db7e083d428f38  include/som/reloc.h
-3068b9fda8210770794c36af6e3b7b5b  include/vms/ChangeLog
+940e58db224948f4faf67fb5414c24d0  include/vms/ChangeLog
 a99f59546afadbe9e0cbb4ab49cb870a  include/vms/dcx.h
 7055098b5e32e0622dc5b1c498523310  include/vms/dmt.h
 cb5b98595f89e309e206e03ebe3fca2a  include/vms/dsc.h
@@ -4248,7 +4578,7 @@ e1d4167d1da2a83946c0ed659ed17b7b  include/vms/esgps.h
 886d6690946661bd6f445390cceb1dff  include/vms/esrf.h
 eb03a3ab596017df4e6a454f550d2b0d  include/vms/etir.h
 53f453335384805ad41365ad4cced40d  include/vms/internal.h
-fd11cc047dbcc31cf234ee7f8a267896  include/vms/lbr.h
+f5ee0fa0260f4e7be8ce4352c87e61be  include/vms/lbr.h
 b7f74b9489772248d46d28e6406d77b0  include/vms/prt.h
 96729d6fd64637a732ffd525e5a3a514  include/vms/shl.h
 0afce91a3daa1fdc32ee36370c1129dd  install-sh
@@ -4295,11 +4625,11 @@ b4758a0194e3e41362b939911472ce62  intl/relocatable.c
 bedade7bcfc3bc5eb09a2c6844f637f3  intl/relocatable.h
 43f287d082528203fc85c1d2d81bf30d  intl/textdomain.c
 a6c2b3de06c7424706b16f4c206396a1  libdecnumber/.gitignore
-d9fceb0fb6b2abce36d9651489647436  libdecnumber/ChangeLog
+d609774eaa3895b29569fc3ef5f478e5  libdecnumber/ChangeLog
 86d8785bbc0f5bb23cfce8de566a3d5b  libdecnumber/Makefile.in
 2746a1155d319a2cda823ee5b58921ce  libdecnumber/aclocal.m4
 76d4afd0dd1c0f5e776cbc40cf2e91b3  libdecnumber/config.in
-fb74c8bdc995fcb773d5a6489922cd2a  libdecnumber/configure
+249eecbcf863bedf848e5da40e948d11  libdecnumber/configure
 3182ccf66b33479ade9820cce70f4301  libdecnumber/configure.ac
 d8600da43d51b0d57d181c7b6133a2fb  libdecnumber/dconfig.h
 30181450bc4c76de58fa316cfe39b18f  libdecnumber/decBasic.c
@@ -4359,11 +4689,11 @@ a97c47969dfc92a7666dfe3c2e1e1448  libdecnumber/dpd/decimal32Symbols.h
 0f6db29710e7075c2fd62bc4478b3b8d  libdecnumber/dpd/decimal64Symbols.h
 99c2e5e712b990ee07be10f53e41f3fb  libiberty/.gitignore
 a916467b91076e631dd8edb7424769c7  libiberty/COPYING.LIB
-4c0e0466a147fa802374476762b5a654  libiberty/ChangeLog
-361480b2ed2814aa843f0b743d09fa0d  libiberty/Makefile.in
+6a9fd50468b78362739488bf7b845843  libiberty/ChangeLog
+78cbb9fa07796e2b83ec5539ebd53589  libiberty/Makefile.in
 c68dbf7834af4281ebd84caa3fd54680  libiberty/README
 8797cb1a6faa84f3c7fe3d12164a4b13  libiberty/_doprnt.c
-9e0fa3abcd04ba6712cbd50ec7ea1bb8  libiberty/aclocal.m4
+22b53dd8b990133515799dffbda44c8c  libiberty/aclocal.m4
 e60c2e7c5dcdd19510066c13f1a527d3  libiberty/alloca.c
 ea73337c63edadbef7d1326509c64669  libiberty/argv.c
 1ff1c82c53060dceecc901cf0b63c950  libiberty/asprintf.c
@@ -4380,21 +4710,22 @@ a8391a5d7431a4e11f61be41386a3356  libiberty/clock.c
 5d5d14621573984e4b94b1ceb9299fc3  libiberty/concat.c
 83565a31c7f296b3013daf383cd03ee9  libiberty/config.h-vms
 44d9a67ca74e0a4744f9c751d345b849  libiberty/config.in
-b112c3ae14be9d020a1cdd185bcc9099  libiberty/configure
+42ed91dc8b7eca58495136bacf1e81bc  libiberty/configure
 5d9a5592c3884692916e7456817c0a72  libiberty/configure.ac
 5824bd0f9be9f4fa74bb3bdc7fd9431c  libiberty/configure.com
-a8959f1d1758eb14819753023f89d199  libiberty/copying-lib.texi
+32149e9d61d873be9c2950bee2ae7137  libiberty/copying-lib.texi
 fe053283d3559af3ec5cac45f8ead009  libiberty/copysign.c
-cc1732ee8cd54375b558d783e46ffcb9  libiberty/cp-demangle.c
+cd41f917cc5c60e3af4979ac3a8a31d8  libiberty/cp-demangle.c
 4aaee5f46bac9e50f23fabebe62cded5  libiberty/cp-demangle.h
 6af921a6efcb5621c06ff9b2a8769b01  libiberty/cp-demint.c
 37193048466b1b0934121905ff3f534f  libiberty/cplus-dem.c
 7c69a6c6a36925e0ca6f068473e6d858  libiberty/crc32.c
+e78ee72146f932cefb435c11b2aa3ee7  libiberty/dwarfnames.c
 d31a55379aa2dc43eb6858a26c4a6c76  libiberty/dyn-string.c
 d7cc74911527c672bba716c9a793ed94  libiberty/fdmatch.c
 0c2635175b975823b40980974dfc2110  libiberty/ffs.c
 14fdd881914e69080c65de413c7b6ecd  libiberty/fibheap.c
-1c0244e5edb10602e11b34716b1edff7  libiberty/filename_cmp.c
+93450a605573987f6cc2ab7bc2c3bfaf  libiberty/filename_cmp.c
 c324184243607652409c3844f262f040  libiberty/floatformat.c
 aa0f79d836563e6a0cd92ab678b07aaf  libiberty/fnmatch.c
 145debe2f28f470878f95b1255f5537c  libiberty/fnmatch.txh
@@ -4416,7 +4747,7 @@ bb0043d92c716691cc17b80c845c336b  libiberty/getpagesize.c
 9905223327acad708d5b0a28e8047cdc  libiberty/libiberty.texi
 2c56f9552603480f87b7136972894128  libiberty/lrealpath.c
 fe4e25fb7df7cacdc921eaf39ce595af  libiberty/maint-tool
-661dd1cfd866f16a426aafedaae4523a  libiberty/make-relative-prefix.c
+e7487c25e2021939bf5af58e8cd70a3f  libiberty/make-relative-prefix.c
 0172f6488e44155e35d94e3f2c5c3c5c  libiberty/make-temp-file.c
 379561229f99437be05ede87fbcf8533  libiberty/makefile.vms
 7005e9cc6647b299a791a6af3904e49b  libiberty/md5.c
@@ -4438,7 +4769,7 @@ f4ec5461a2fdb28214092b95b39ef186  libiberty/partition.c
 9c9f332011572cd3bc1b606c878bd707  libiberty/pex-djgpp.c
 581ca82c700722ff2cdd7fd93c0a0c11  libiberty/pex-msdos.c
 d67a9b0906ffa961fdc411aa936fdfb1  libiberty/pex-one.c
-452d4245168d96c6e66637ad1f9a382f  libiberty/pex-unix.c
+2dc83b1429c2234bfaacf3f7eaa728fe  libiberty/pex-unix.c
 8228d61a0df6bccc7444c1e331bd6fd2  libiberty/pex-win32.c
 fa294b254945587548ca6b32d7922d03  libiberty/pexecute.c
 a6b1581efa83a4072727b38d6fef4230  libiberty/pexecute.txh
@@ -4463,7 +4794,7 @@ e34c9d634af52457ef9c7973d9879d48  libiberty/snprintf.c
 32ea90e5aded75d1cbed83fc52123753  libiberty/sort.c
 2a636db0be7babf70662b1387ae73354  libiberty/spaces.c
 60612038a3f96d55b6be45cb8b5cf217  libiberty/splay-tree.c
-8ee69b2d3c5fac2cf556666eb0c26b9e  libiberty/stack-limit.c
+2af2e5d9848286892654477830443b51  libiberty/stack-limit.c
 bac20c1a198662917e6bc775ad9bd0cf  libiberty/stpcpy.c
 6d8293add4026ed6717d39608786d5f6  libiberty/stpncpy.c
 0c900e9180d750a26ac0ddb237151832  libiberty/strcasecmp.c
@@ -4503,7 +4834,7 @@ c6e7ef53b4ff115a136d917511222656  libiberty/xstrndup.c
 904bdcd9daf97fa55a9ca8901ffe7435  libiberty/config/mh-openedition
 38e76da568ab25260754fdb9d5080513  libiberty/config/mh-windows
 8f24f8939540ed6d58ad0dcdf1132562  libiberty/testsuite/Makefile.in
-8fe7a7bff95f51ca02a200231c46ad4d  libiberty/testsuite/demangle-expected
+c2f849ef4134b091ffa4cc9944f8839d  libiberty/testsuite/demangle-expected
 85c7215f6a2d5dde81ab2e8211a4becc  libiberty/testsuite/test-demangle.c
 d4cc425bb97dbff240fe7c804bdc00f4  libiberty/testsuite/test-expandargv.c
 e9e958dbfc45a08dbbbbe48c83d3987e  libiberty/testsuite/test-pexecute.c
@@ -4514,7 +4845,7 @@ d65d47d2ff82eaf7b39fbf26d000eb96  libtool.m4
 dee72a6a60e99528b0d17bf3ff9a1e15  ltoptions.m4
 bc2f6032c98896249eadb56177c7d357  ltsugar.m4
 c30cd33c496505f13d9fbdb6970c7c33  ltversion.m4
-8604252784712dfd4447a5b0183c15d8  MAINTAINERS
+2ce60858b3eab0a88195c43f23b1a094  MAINTAINERS
 41dd05e97edee6330eb5ac52efeffa2c  Makefile.def
 0629941859b158c7044274baf344240d  Makefile.in
 7c11d0a95f811a78e0b28e5196753101  Makefile.tpl
@@ -4523,7 +4854,7 @@ fbe2467afef81c41c166173adeb0ee20  mkdep
 766574f467c38d27fc7604ca8eb6734c  mkinstalldirs
 f1fff2ea196cbf6fe4634bc3edc5af4d  move-if-change
 ef6602b963f2a903ab9c81134c6b8d29  opcodes/.gitignore
-c5ae391b8f38432641b7c83be237d30f  opcodes/ChangeLog
+9e9a17b1192d8af3a534539559e95dbb  opcodes/ChangeLog
 1b4b8646bdc7ad5a2f9071d8ac8b024e  opcodes/ChangeLog-0001
 83ac14eead5eda1862cc926b82d35cea  opcodes/ChangeLog-0203
 d4cca6dd9882292b6f2e17604bed6cbd  opcodes/ChangeLog-2004
@@ -4533,48 +4864,49 @@ d4cca6dd9882292b6f2e17604bed6cbd  opcodes/ChangeLog-2004
 aaf7e24e3596c794e506477ee65123ab  opcodes/ChangeLog-2008
 caa6c6acfe99f77e960674fab34611f2  opcodes/ChangeLog-2009
 9f388ebefba474c0479df23b8458d128  opcodes/ChangeLog-2010
+df0d05062c980b7014bd087776112762  opcodes/ChangeLog-2011
 568db2b4641150f46a18da55529d8d3b  opcodes/ChangeLog-9297
 fc3adcd099179b77d2adb79ada21a89c  opcodes/ChangeLog-9899
 d618facc3e8ce8bf3d02ba452e1be6ab  opcodes/MAINTAINERS
-91741c4afe82f81bc4f0e44f40662c15  opcodes/Makefile.am
-95b17790cbcd2281b4ebd3dd398c2608  opcodes/Makefile.in
+062897711bf916d9562a9b9d95dc3b80  opcodes/Makefile.am
+e5bab05f160e55ade3f4f6f470119f89  opcodes/Makefile.in
 1eabaeb9aa44234d9977c09f3ed932e5  opcodes/aclocal.m4
-0d183fbfd7a3b3bbb706594c41604ace  opcodes/alpha-dis.c
-b2c7455ac27ff79f81ccb4aee922e6a1  opcodes/alpha-opc.c
-f7637eb4db64ff973cf56bc4e2ca4d06  opcodes/arc-dis.c
+9de0721c55346a2137a1c4743a346125  opcodes/alpha-dis.c
+7e0e61944d83ac71db0fd3c3278bbea1  opcodes/alpha-opc.c
+12af0b329381e4727b75056eb0a1c9b1  opcodes/arc-dis.c
 6d22b958c28df865e858391b44aa0532  opcodes/arc-dis.h
 c68a361ec50354fc6b61bf73aaf01acf  opcodes/arc-ext.c
 b3d65ebfe89e547896663c61def89981  opcodes/arc-ext.h
 e016668afed76e3602ac2c0b9c8c5f9d  opcodes/arc-opc.c
-d5a61a93e8abbb4ccf711cc96ca58a6a  opcodes/arm-dis.c
-6556c6c47ae03ad7481e97718ca99152  opcodes/avr-dis.c
-f26dec5aa530f30f80b4f22c96391719  opcodes/bfin-dis.c
-45cea674fa428a0345e51f278752257c  opcodes/cgen-asm.c
+1ae42d87a31f7b84eb858ab39e524be8  opcodes/arm-dis.c
+08c9ea34083f6d02efbd3dd805c8082f  opcodes/avr-dis.c
+68de0ba7109635563b191b1c5be7b5d3  opcodes/bfin-dis.c
+81b1180a55f50f6828b66e3e5f0d8048  opcodes/cgen-asm.c
 d92cf67612895b65ff62ddb82f9b5543  opcodes/cgen-asm.in
 2e26c2d5bcab8c834c3f8748325f7367  opcodes/cgen-bitset.c
 4ffab65c39d688bd5e8078e10b92df4c  opcodes/cgen-dis.c
 3f344b4342a0f690134a85b456e303e0  opcodes/cgen-dis.in
 a270403bead8816e5e9a909aa991e2b1  opcodes/cgen-ibld.in
-3f509397dc42868fd6b3b4369364f3c6  opcodes/cgen-opc.c
+0125fca6e8b270631b3575279a455c28  opcodes/cgen-opc.c
 bc080d7ab00992593cfa8b975cd771a9  opcodes/cgen.sh
-42a395f87f37d432f30615448f2e9dde  opcodes/config.in
-3bc11ab576597855253a0f373f09d3bd  opcodes/configure
+888f9b710b1625a949433f92fdbc5d44  opcodes/config.in
+e07cecdcbaac9894c9fa1cd182ecfb47  opcodes/configure
 70a452d27d058e90c3d5ea0c77390d74  opcodes/configure.com
-d93c0dec0a340471d3796e91aa91969e  opcodes/configure.in
-d5ffc6e2dece475d856226677a75965e  opcodes/cr16-dis.c
+ab3fc45ea81bafba54976c5fae1de180  opcodes/configure.in
+867e594675225e3906eeadce305cf28f  opcodes/cr16-dis.c
 8e6fb5d34ee9e13ea581ba43962baeef  opcodes/cr16-opc.c
-35feef6702a5237816c99597b77a40bd  opcodes/cris-dis.c
+f3cd555e597e3315c98758f1484de64f  opcodes/cris-dis.c
 24a976b6e3d0dedc20abd0ff680ae63a  opcodes/cris-opc.c
-e079337376f6eb8d13442f65b8b9e2c8  opcodes/crx-dis.c
-78cb9b6b05693f19de9e7f6f5c7c5922  opcodes/crx-opc.c
-9f37ca078c8fbbc619657203997c305d  opcodes/d10v-dis.c
-d32690dc533892cbdede583b5e166b0f  opcodes/d10v-opc.c
-9706bc2f17f3927f1b59e09a3ab3acee  opcodes/d30v-dis.c
-fa8f5111930e274b56b6ca49e0304e7f  opcodes/d30v-opc.c
+d0ea7cedd75ed29e4eb2f67ab370e966  opcodes/crx-dis.c
+3892c106d85e117f76c0e167c5ba5f76  opcodes/crx-opc.c
+cc5e60b89bbc2e3ec881a04b9abc751a  opcodes/d10v-dis.c
+4aaeb64a762322dd30d24900d9477775  opcodes/d10v-opc.c
+1f54245db6d74faffc5f8e956644e894  opcodes/d30v-dis.c
+9cb3c388fcf5ee3f0b73563c77d6a733  opcodes/d30v-opc.c
 574537d9972c9161d297dcfd7eca0282  opcodes/dep-in.sed
 0b5893bc5b9e2225c5271f9c177863f0  opcodes/dis-buf.c
 ece66b3e9256a52ed11137f296b8ae2c  opcodes/dis-init.c
-8d556beb6a0e9583fce6fba53be33df1  opcodes/disassemble.c
+bca5162b18545e9b04fcc46156b55240  opcodes/disassemble.c
 750e7500febd896381af0445f2d2f671  opcodes/dlx-dis.c
 a6a85e9dae8ed6727c8421092faea180  opcodes/epiphany-asm.c
 09968c8e2d15271d6835ba2cbda611dd  opcodes/epiphany-desc.c
@@ -4590,7 +4922,7 @@ ed406e7ae99699b9d4dd8e53aad11c4a  opcodes/fr30-dis.c
 9a83bbdb6f1c0816a6a03cd4180bb438  opcodes/fr30-ibld.c
 dce3dc85831bd7368b85f6fb4c5ca93d  opcodes/fr30-opc.c
 006ba74072ac247a26a5dca66fa99eb7  opcodes/fr30-opc.h
-e4ff1a5a63af8bb51dcad7eeb1c890dc  opcodes/frv-asm.c
+a2cd95b5c7cf44e143e7bfb343765b24  opcodes/frv-asm.c
 432f09661ca978fdfd790d2d314e01b4  opcodes/frv-desc.c
 5339efb6ca9f1055b0e07064fa64db35  opcodes/frv-desc.h
 8b55d5b3e9d33d047e4649446acfce1b  opcodes/frv-dis.c
@@ -4598,25 +4930,25 @@ cfabe82140ce4eb2addfcb21b986c86a  opcodes/frv-ibld.c
 8d6fe830106fcbda822c06a6763b1f28  opcodes/frv-opc.c
 ed96c9379698ac3715e6440ae6d9c3fb  opcodes/frv-opc.h
 977f791ef7c4744f7e86948ef4c81d16  opcodes/h8300-dis.c
-7dc426bed3d4409dfde9c431f5351994  opcodes/h8500-dis.c
+2541d38e11e55129d57b1d1f142372e1  opcodes/h8500-dis.c
 a90d1cf88e8ca000d2fe045d2757c929  opcodes/h8500-opc.h
 2d54299521f9bd96064004cec7c26523  opcodes/hppa-dis.c
-c86a545a6e8fe8ac8cec0f3d8d09a82d  opcodes/i370-dis.c
-218308bad0ffc625fd4598939457dc2e  opcodes/i370-opc.c
-af18e3c9939b2f35db3af14855eb9119  opcodes/i386-dis.c
-a5caede2127e3720973c2017499ecdb7  opcodes/i386-gen.c
-dce9f1d2e3c3c2eb460b101e3b3f3062  opcodes/i386-init.h
+db51c13bce32d80eccda6849e650197f  opcodes/i370-dis.c
+f7f50a63a85a0ca74d16a9beac993af0  opcodes/i370-opc.c
+f8d5f5b4a2820a81bca6f0e619c73b8e  opcodes/i386-dis.c
+15d4a266b84e4f68b9b79b6bc58ae1f6  opcodes/i386-gen.c
+b71be27e19b90f71692ed636f6bc8088  opcodes/i386-init.h
 b349e449b7242ffccadc2905ba3bf302  opcodes/i386-opc.c
-ea0debad6159115c95c8dc4103de2b26  opcodes/i386-opc.h
-961c33d947e88722a4883a2fa688ebef  opcodes/i386-opc.tbl
+5399c64303900f6f9bed9c203e43faec  opcodes/i386-opc.h
+0df5b32fc603e5e24e1a7bff817ffdc2  opcodes/i386-opc.tbl
 d916194e78f00cc94c8d848e6f64b8ef  opcodes/i386-reg.tbl
-3af24642c732155e8f291832760e30b4  opcodes/i386-tbl.h
-d332fee7f16c258c245719be4e3b42d2  opcodes/i860-dis.c
+6298f28cd75f6ff05b605ba599deb2b8  opcodes/i386-tbl.h
+898abf362f534e6519a902cfc5b62512  opcodes/i860-dis.c
 6f95da0087252987fc36375464b53b25  opcodes/i960-dis.c
 0ccdc17aead3327c15b4fa800790d302  opcodes/ia64-asmtab.c
 71ba420c878d2fd0eb4d2ac36e8970e0  opcodes/ia64-asmtab.h
-2249ba833158c5faccc1ee90e2c43906  opcodes/ia64-dis.c
-9c2874445493c3819b8e1d09897c590c  opcodes/ia64-gen.c
+8c1ab5ad3ef70c64fa8970c1c055fc8d  opcodes/ia64-dis.c
+69f2760c153d3c2f36d236a2e0d88e28  opcodes/ia64-gen.c
 3ba50a7c1fd5801e7580330288cc725d  opcodes/ia64-ic.tbl
 8f9a2aed093833e5731816035917e414  opcodes/ia64-opc-a.c
 4f8035ad5d22b8fbcc34d2e25f7ab579  opcodes/ia64-opc-b.c
@@ -4625,7 +4957,7 @@ f2d2c6a73919ad50bfe2e45fe88ee660  opcodes/ia64-opc-f.c
 13cb7cd8ba9ed01df363cb584a2ba842  opcodes/ia64-opc-i.c
 06a95f9a4099de3fe81b2f60baf5d2cd  opcodes/ia64-opc-m.c
 a1ce2021835faa950844ba29d355ce5f  opcodes/ia64-opc-x.c
-479a02992c0c32054c66a67a595bd60f  opcodes/ia64-opc.c
+742a7f45477cbbc31dc4bd414e66215d  opcodes/ia64-opc.c
 34c13118bf7c1f27ed2413588449c811  opcodes/ia64-opc.h
 53c4ff8b528feccdd43a51b2031d9855  opcodes/ia64-raw.tbl
 b3d7452b4310332b7974b34b09f65a6d  opcodes/ia64-war.tbl
@@ -4652,9 +4984,9 @@ ccced39416c4bc64fee833c133213b66  opcodes/lm32-desc.h
 5601b608a19d4e7c19b134a458df22d7  opcodes/lm32-opc.c
 4040795b40e856e403a736b7203f8c00  opcodes/lm32-opc.h
 465fca89973240988d539b7965f54034  opcodes/lm32-opinst.c
-6cd99590cdb5cc96648741f375819ee1  opcodes/m10200-dis.c
+2ec45deef9abc581dd68e3e6f2dc9d0f  opcodes/m10200-dis.c
 2537fd35553e9abc7f73b09a9dcc8448  opcodes/m10200-opc.c
-6fa875346f1ecf4d6769949d0b077238  opcodes/m10300-dis.c
+a13fe9b39f5f481ea3fb8662cbc16ee4  opcodes/m10300-dis.c
 3d215d208dbcadd93eeb6081f02f430c  opcodes/m10300-opc.c
 06bb0f0061213535accab5622a35f351  opcodes/m32c-asm.c
 fa21aa9c6fa0ee3c65707a2107f4a8d7  opcodes/m32c-desc.c
@@ -4671,10 +5003,10 @@ c4a5df1a398db76fa7547a9aff9897bf  opcodes/m32r-desc.h
 64ae4f82595cb61b72149e7e22a42f27  opcodes/m32r-opc.c
 4f37bce53e8b1a1d85fb3ed8b9b7cf15  opcodes/m32r-opc.h
 9485c677e8907524837c1e6064a50a31  opcodes/m32r-opinst.c
-c884a02c786bb9ae35cc4e436b6b882c  opcodes/m68hc11-dis.c
-59906efbf7a9eee5f8382a8b30e133da  opcodes/m68hc11-opc.c
+094de21fb30b3bafe4dc04810bb8683d  opcodes/m68hc11-dis.c
+e713f5ec619f0268014ef01feab86c0b  opcodes/m68hc11-opc.c
 e579c07b45c41fee680a1eafdb382f04  opcodes/m68k-dis.c
-1fe5414b859587b78594fdc3506097fc  opcodes/m68k-opc.c
+868add2c9c882f36910b5c2ec8c5afb3  opcodes/m68k-opc.c
 a8a5e99b9b9176f9a932a252fd9ab2a1  opcodes/m88k-dis.c
 3efef7dad61a0eb561346d3047fb7ed8  opcodes/makefile.vms
 5e74f56bfccffa3c7f07f1c90582ca00  opcodes/mcore-dis.c
@@ -4690,19 +5022,19 @@ cf295dec03869cdad4c38f0398ce247e  opcodes/mep-ibld.c
 adf720ae7611c9ed19989e9d6428f638  opcodes/microblaze-dis.h
 6e58e9f9e87531e0295d9277266f25b4  opcodes/microblaze-opc.h
 2146cb07dc8b4c05bc3dad6bc04dcc72  opcodes/microblaze-opcm.h
-3709c2b970c49b5fc2acadc72b3631af  opcodes/micromips-opc.c
-1523cf7be15a7c5d97f8ac2767cf6520  opcodes/mips-dis.c
-f21b69e4748ceb04a888ad1654a8461b  opcodes/mips-opc.c
-4d4dad5b6ae89dc8c2b4398b1f4d9bdd  opcodes/mips16-opc.c
-70059e50d54f0a65c674d08a3c5650e0  opcodes/mmix-dis.c
+bbc7c4a9393317d4b25a9ca24fbf353c  opcodes/micromips-opc.c
+99e8fa536fa5790980c88844833866a5  opcodes/mips-dis.c
+5ce65ed64fb4e0e42dd3a0e8aeecfd2d  opcodes/mips-opc.c
+c15b01e8551f7fb71b8d5cd42bddf9a6  opcodes/mips16-opc.c
+9f42a1892b3c4b2499fabfdadd1746be  opcodes/mmix-dis.c
 5d3ce00c0af1e8be47a84b7a0b24b237  opcodes/mmix-opc.c
-7d36a0b59192414bfc95f9f924f9fa7f  opcodes/moxie-dis.c
+84a88e7f6600129313be652da27ebe16  opcodes/moxie-dis.c
 a026dda6f88b66ca94ba83599b8f717c  opcodes/moxie-opc.c
-e7ce22020a7dbebf739b04a1aaf94967  opcodes/msp430-dis.c
+c44159ef2fa0854d2f464fb14983bf68  opcodes/msp430-dis.c
 d51d9a5a27aabe5c992e2bda4657b73f  opcodes/mt-asm.c
 67a08e35431b47d3fd02fa6672e87b52  opcodes/mt-desc.c
 c50d1471d263342c49d33f6d4237c703  opcodes/mt-desc.h
-e4f21e1b452a0c14ca01c65f181531ad  opcodes/mt-dis.c
+1aa2a9ba89c6c603b71fe5c7644bb067  opcodes/mt-dis.c
 e1a2f3897ca5248d5c164e47f725b20f  opcodes/mt-ibld.c
 c18b2d837279ebf8a89ab05db8b952b3  opcodes/mt-opc.c
 9892e9aa135881086dae669b8bc3d733  opcodes/mt-opc.h
@@ -4716,53 +5048,86 @@ a636d91f3e2b5c8340fa91e4eb11a8d5  opcodes/openrisc-desc.c
 b703a698570619af12334f30eeffd41c  opcodes/openrisc-opc.c
 a0ba79c35d1a39d977e6019ba1cedfd9  opcodes/openrisc-opc.h
 ddb3324288d8b89a8d21cc42936fd320  opcodes/opintl.h
-e1ef1b7be22c0bb600c200c402a1ca03  opcodes/or32-dis.c
-7c044dbd081ea712eb68d6fbffe19b00  opcodes/pj-dis.c
-084b26c55650090e5ea056ea4364a16e  opcodes/or32-opc.c
+ae6d82cae94b6dbf83af04ece662faf8  opcodes/po/Make-in
+44cb430aef531428f04dd317002b74eb  opcodes/po/POTFILES.in
+08644663c098c4faa0a75ef257ff85de  opcodes/po/da.po
+baba2506d17c4e2214d6fdd5868e6699  opcodes/po/de.po
+c115c715175d3fb17a3f9021871ca4d4  opcodes/po/es.po
+99b389b94eb99468046c9914cc38a07b  opcodes/po/fi.po
+8784d443527b3837ccdbd6baab60763a  opcodes/po/fr.po
+a5961a0281569011fb2468afebe4c4d8  opcodes/po/ga.po
+9b0083cb5b9854569bfd39fb4e432099  opcodes/po/id.po
+402cb40ed225c3b5395718630db6e10b  opcodes/po/it.po
+55b6639559777f04aadc075e51744b12  opcodes/po/nl.po
+b8cdf533bbf8d839eaa7aaeed922ec08  opcodes/po/opcodes.pot
+30f5fa421474edf39ae99a8985bd42e9  opcodes/po/pt_BR.po
+27e9fec6ee5c546b5d5f4afb80b287ed  opcodes/po/ro.po
+45db317868bfb202300160e0657f06ea  opcodes/po/sv.po
+8ddcec300546b39bc1d9a13098637b64  opcodes/po/tr.po
+78d21a980cc11a1dc73edd773cf84d5e  opcodes/po/vi.po
+0928658424d3439f5dcaa21464ac43b6  opcodes/po/zh_CN.po
+40631143014bf28aa6c4c18fb42c7e3f  opcodes/po/da.gmo
+6881ecf19052fe945c5dfefc588207ab  opcodes/po/de.gmo
+2fdf0b504c4745f6f06286bf5a4c30b9  opcodes/po/es.gmo
+6d2d316af0b810ec5eeb2593d57f2766  opcodes/po/fi.gmo
+0354d8ebde8359a359d0703d9d897ba8  opcodes/po/fr.gmo
+aaa7913c4672954f5afe196a57bea399  opcodes/po/ga.gmo
+bbdc560c49ae729616af290d86d1801a  opcodes/po/id.gmo
+32b4c1f9191141b2f28e38d686a21650  opcodes/po/it.gmo
+6b7f6db13ec1f340c587ccd58c898e8b  opcodes/po/nl.gmo
+1b79e075af1926ef6736fa317f054702  opcodes/po/pt_BR.gmo
+e216f1583ca03a04f8849dfb96b59c3f  opcodes/po/ro.gmo
+d7c42d78dd00ae4c8b71fecb736fd17c  opcodes/po/sv.gmo
+179cd41f0e8af51dd577fd5d7ab36c79  opcodes/po/tr.gmo
+7cd7865b7368e409d1e8ea4e85e5d6f1  opcodes/po/vi.gmo
+6e7ae21e20fe177fba4c9c7fe8afa55a  opcodes/po/zh_CN.gmo
+eeab997c7d1e4c1a693b14524b0f3ce6  opcodes/or32-dis.c
+2825c9b5fe984f05bebbb3666a7403b1  opcodes/or32-opc.c
 2e878a17084801b0c09d6edae4e65862  opcodes/pdp11-dis.c
 546f13ebe3df55e2efcbca2e76695a7c  opcodes/pdp11-opc.c
+c2e4b45306a9df3d7ceafe1ce546fa59  opcodes/pj-dis.c
 f9282da1105aa1d5aaa561bad2ec6e31  opcodes/pj-opc.c
-22cba53648dc5160dae12213ec9a8b90  opcodes/ppc-dis.c
-dfdfce3a88e939f11801ccece48a1b42  opcodes/ppc-opc.c
-048271dfbdb6a8315eb28562233b0188  opcodes/rl78-decode.c
-0c0d0408899ccb301c42840ee952ef49  opcodes/rl78-decode.opc
-817658f2546950e4a943cfc1070820c0  opcodes/rl78-dis.c
-8c4cce1349402f40f44be6d6967d9c7f  opcodes/rx-decode.c
-fad0cf8f9da36f320dd8a4c56a9f6743  opcodes/rx-decode.opc
-dc4ea6e70e4d38be3e566aae78971374  opcodes/rx-dis.c
-7c424942718f1a04585a8fdbb5ff7744  opcodes/s390-dis.c
+82861ce962fadad10af38237b3618dc5  opcodes/ppc-dis.c
+bcf4fd50b2bd62c2739dd3fa9d0a3631  opcodes/ppc-opc.c
+6a1aab0439002efd2d5c13c1029c9d08  opcodes/rl78-decode.c
+fd30758d9f4984f586ff4c22151293d5  opcodes/rl78-decode.opc
+6698fc2972814122c3abf42bbbf45387  opcodes/rl78-dis.c
+42e03fb0d1204946d7449a7f38d333eb  opcodes/rx-decode.c
+933c543bd942d74ff8b3acd0599f3002  opcodes/rx-decode.opc
+69bb9db6a037428108ff9e160c529daa  opcodes/rx-dis.c
+a1bd87f32dea84b9bc5605f092d91688  opcodes/s390-dis.c
 056a82808818c3d02e5220f1604304f1  opcodes/s390-mkopc.c
 db37da8a908aea2ec57ee6cec5757fed  opcodes/s390-opc.c
-fe17e194501487125f5bdb620b11be46  opcodes/s390-opc.txt
+1620a2f984a4c9b45d8edde62d1506c8  opcodes/s390-opc.txt
 9dc03a304cf6c2651ec5edcf970ee417  opcodes/score-dis.c
 84efbd963f1573bab84ce05f7ad4e58d  opcodes/score-opc.h
 a91452ca1d7ab6a941a364d974149852  opcodes/score7-dis.c
-87f89485f60a37d02ce5c4df842ecb26  opcodes/sh-dis.c
+c3ebd3ed8139f7b7beb4150d78dd9963  opcodes/sh-dis.c
 aea44dd53e979c11216c7c3fc7848fe0  opcodes/sh-opc.h
-a4ff1ccc184718e2866819ee8abd273b  opcodes/sh64-dis.c
+b57c95f7673ed63762bed90de4f2baae  opcodes/sh64-dis.c
 ba68ff46225ffa4fc3cf57c14bc5d09e  opcodes/sh64-opc.c
 4500a9749b3a81ef89fb50be85a4bedf  opcodes/sh64-opc.h
-25038d14a858f8b0c89c550c67e1fe08  opcodes/sparc-dis.c
-7dee24e908db42c44f02f054688d094a  opcodes/sparc-opc.c
-d46eddeb5c24a897ece9911d8e7775f3  opcodes/spu-dis.c
+6d6da17e18acea9798717761d2d7ce0c  opcodes/sparc-dis.c
+09aad02ecd52c6ea2cb6012c0d435de7  opcodes/sparc-opc.c
+559ff91b577b8bcbed38d73760342b1d  opcodes/spu-dis.c
 d2cd7ae58ae776e075b0d64bb18a5f76  opcodes/spu-opc.c
 1ded054093de910d9786c62bc4fe8cc6  opcodes/stamp-h.in
-e8ec6515ba869ddb5a4f64987448830e  opcodes/sysdep.h
-b6c8df366df6d1bf517368283a3e83bc  opcodes/tic30-dis.c
-d8bd324a75e601ace2b2d2eb4a525e52  opcodes/tic4x-dis.c
-e9fab875e373c0f0509849a0c4311a22  opcodes/tic54x-dis.c
+ee3831872d0eb5a46d9bb8649e5e464a  opcodes/sysdep.h
+f760d680b2f781d6aa7ebcc7f0ad0e31  opcodes/tic30-dis.c
+b5c8dbba6bec73cc7bc357e6397ff00f  opcodes/tic4x-dis.c
+b06721df60d28f0580b5394693b80026  opcodes/tic54x-dis.c
 ea7d1d4700e2cc534f624f3ae366117d  opcodes/tic54x-opc.c
 d8b41e742a6b046ccffae75f9d22f1cf  opcodes/tic6x-dis.c
-0b799451ba231a6be1a404f1d6b2be41  opcodes/tic80-dis.c
-0bffeecc20e5f0456dc2f1ba689d9fa9  opcodes/tic80-opc.c
-0c2c4900730316dfad0cc55b494d85c3  opcodes/tilegx-dis.c
-8361ba1f35dd1f074e3eb46d2e900807  opcodes/tilegx-opc.c
-43a724eca5dc465cb67a13338f93d68d  opcodes/tilepro-dis.c
-bd957ced2786a05389ebf9156ac2b2ac  opcodes/tilepro-opc.c
-c290d133df7afa3924a02d6db20e2fb0  opcodes/v850-dis.c
-5f4f1836a2c8fcc24a3d1ce5304c150b  opcodes/v850-opc.c
-0f83318013675dffa18582b207263449  opcodes/vax-dis.c
-4760e70a223de43a1a22033ca2e21dda  opcodes/w65-dis.c
+54b00173b67ef85d0a34554dcb9ca96d  opcodes/tic80-dis.c
+5193c34acf1e348f10a702f444920aaa  opcodes/tic80-opc.c
+39b1c9289ffdb0c649e2edadabf3c3ba  opcodes/tilegx-dis.c
+5a15417ef09e5760439325334aff3308  opcodes/tilegx-opc.c
+8321e848de7b3c800d5c611874615427  opcodes/tilepro-dis.c
+b4c5541eecd4cc6d60b85efa8fa65746  opcodes/tilepro-opc.c
+649af27ab7a59a9d04e542f703032a93  opcodes/v850-dis.c
+8ecc372c03031d52ef9a47ff99382115  opcodes/v850-opc.c
+31995accf3e7ef8e0eedd6392afeb4d8  opcodes/vax-dis.c
+d6bbf65881c44492b08cab6c6cad51b8  opcodes/w65-dis.c
 072127e2c22b9ea5599f349c097ebbc1  opcodes/w65-opc.h
 9760faa524bc333d3d8ea4cbff08e2aa  opcodes/xc16x-asm.c
 61ee16ff3ea71974250aa3f3b6fbddc1  opcodes/xc16x-desc.c
@@ -4771,6 +5136,8 @@ d2d8d28ec86ecb0ad1138e8bbc71a99e  opcodes/xc16x-desc.h
 f1a8c5a5233adec0f43885f0967f5c5c  opcodes/xc16x-ibld.c
 886733cd9cd944bd6b70785e53b0f69b  opcodes/xc16x-opc.c
 0483c849ed60ff25db78f503bd8a84e0  opcodes/xc16x-opc.h
+5eb9f302f3f52f611d0c1961e5fdcd10  opcodes/xgate-dis.c
+7b6ceb55b3a85537ec321cca00cf3abc  opcodes/xgate-opc.c
 3a6f9d4b824578571fcd952ffbfe589b  opcodes/xstormy16-asm.c
 41ee4e0a4f42e0d396adfce5d0ca7d5f  opcodes/xstormy16-desc.c
 10713cd53a68ad189219343ae17bb441  opcodes/xstormy16-desc.h
@@ -4778,48 +5145,15 @@ f1a8c5a5233adec0f43885f0967f5c5c  opcodes/xc16x-ibld.c
 18d5a80d2b4910d879a88197eb1627ad  opcodes/xstormy16-ibld.c
 953957d3d7b43d96528448b2044227c4  opcodes/xstormy16-opc.c
 099f445cf3df0fb0724aaf81ab3a3ff9  opcodes/xstormy16-opc.h
-05434a9d71725aeef1d877bbf65fee25  opcodes/xtensa-dis.c
+f172ffa9789365f41acd6af7334e98d4  opcodes/xtensa-dis.c
 48a1de2a08d81135c59cce49900c06bd  opcodes/z80-dis.c
 b73735f570dac4f2ad37d5e3848d01a0  opcodes/z8k-dis.c
 e349344d63e18942681c442ad564c34c  opcodes/z8k-opc.h
-d41e0b39d53a131bb560583587e3dadf  opcodes/z8kgen.c
-ae6d82cae94b6dbf83af04ece662faf8  opcodes/po/Make-in
-44cb430aef531428f04dd317002b74eb  opcodes/po/POTFILES.in
-08644663c098c4faa0a75ef257ff85de  opcodes/po/da.po
-baba2506d17c4e2214d6fdd5868e6699  opcodes/po/de.po
-c115c715175d3fb17a3f9021871ca4d4  opcodes/po/es.po
-99b389b94eb99468046c9914cc38a07b  opcodes/po/fi.po
-8784d443527b3837ccdbd6baab60763a  opcodes/po/fr.po
-a5961a0281569011fb2468afebe4c4d8  opcodes/po/ga.po
-9b0083cb5b9854569bfd39fb4e432099  opcodes/po/id.po
-402cb40ed225c3b5395718630db6e10b  opcodes/po/it.po
-55b6639559777f04aadc075e51744b12  opcodes/po/nl.po
-b8cdf533bbf8d839eaa7aaeed922ec08  opcodes/po/opcodes.pot
-30f5fa421474edf39ae99a8985bd42e9  opcodes/po/pt_BR.po
-27e9fec6ee5c546b5d5f4afb80b287ed  opcodes/po/ro.po
-45db317868bfb202300160e0657f06ea  opcodes/po/sv.po
-8ddcec300546b39bc1d9a13098637b64  opcodes/po/tr.po
-0205ef8d6d910165612939b103d9ccf7  opcodes/po/vi.po
-0928658424d3439f5dcaa21464ac43b6  opcodes/po/zh_CN.po
-40631143014bf28aa6c4c18fb42c7e3f  opcodes/po/da.gmo
-6881ecf19052fe945c5dfefc588207ab  opcodes/po/de.gmo
-2fdf0b504c4745f6f06286bf5a4c30b9  opcodes/po/es.gmo
-6d2d316af0b810ec5eeb2593d57f2766  opcodes/po/fi.gmo
-0354d8ebde8359a359d0703d9d897ba8  opcodes/po/fr.gmo
-aaa7913c4672954f5afe196a57bea399  opcodes/po/ga.gmo
-bbdc560c49ae729616af290d86d1801a  opcodes/po/id.gmo
-32b4c1f9191141b2f28e38d686a21650  opcodes/po/it.gmo
-6b7f6db13ec1f340c587ccd58c898e8b  opcodes/po/nl.gmo
-1b79e075af1926ef6736fa317f054702  opcodes/po/pt_BR.gmo
-e216f1583ca03a04f8849dfb96b59c3f  opcodes/po/ro.gmo
-d7c42d78dd00ae4c8b71fecb736fd17c  opcodes/po/sv.gmo
-179cd41f0e8af51dd577fd5d7ab36c79  opcodes/po/tr.gmo
-d47776e427a062eaf76832cfe02c122b  opcodes/po/vi.gmo
-6e7ae21e20fe177fba4c9c7fe8afa55a  opcodes/po/zh_CN.gmo
+4abfaee9194f792275651b5d3a271cf5  opcodes/z8kgen.c
 ce1d37b24c89ba4fc70fff5586f31f5d  readline/CHANGELOG
 a9d91440157f3e5cc44a650de8ee01ec  readline/CHANGES
 d32239bcb673463ab874e80d47fae504  readline/COPYING
-76d32835a9526aac9fb821ba6a049b44  readline/ChangeLog.gdb
+be06517f626b90c4bd6bfd110d8fa0f0  readline/ChangeLog.gdb
 024114d5d789c58f138aab82edb3a1f6  readline/INSTALL
 3f0812a6f5260a91c5199c656181cd64  readline/MANIFEST
 3f896da51476168edbf09a4aaac3d0d6  readline/Makefile.in
@@ -4875,7 +5209,7 @@ b5fc756b0f152e134278645b689bd27a  readline/rlwinsize.h
 dc1983a2cdbbe9417a0782b17ed0782b  readline/savestring.c
 b88492abc4fde1973800a1da59055021  readline/search.c
 bbfd19f836fc28d722aca0929f398c00  readline/shell.c
-1a1df7705bb5747526fd9cc6e42fd615  readline/signals.c
+60b388b115443e453e98880a3c1db8f9  readline/signals.c
 cb0acd4d37d1445d3b038622c819d25b  readline/tcap.h
 e3d3c53815b350e1abfad06738852890  readline/terminal.c
 f33ee2b652a0d39a08e697d0382f3061  readline/text.c
@@ -4948,18 +5282,18 @@ f01cade8404f87f796fee1a0a296092d  readline/support/install.sh
 07c33a285703b40cd6f93a478e97e03b  README
 72b7803505f14cf31e291a59f538c6c8  README-maintainer-mode
 941d8476e5adfd53d999413a26e5ecde  sim/.gitignore
-07c1c0aea7172dbac154153d377aa034  sim/ChangeLog
+9696c34f0dad89873f480c505f61f8a9  sim/ChangeLog
 e5d37dd1c20fcbb821de5453f016fcf5  sim/MAINTAINERS
 9bc8c915777f1831973280a14124e372  sim/Makefile.in
 cf5aa69ec8adb2c468b21374f6d2379d  sim/README-HACKING
-8d582d6f300c595fed986ce0b334f300  sim/configure
+956007f25ae1abddbbb0ceb2eb71cdde  sim/configure
 4aabc998e48449506d742d45903a5f62  sim/configure.ac
 210332a3b1a74da7ba1aeb1b8b1a9a25  sim/configure.tgt
 14bc6ee8b2e2b409be599212867d126e  sim/arm/COPYING
-d49d7d4b27d5ea535f57f834862ebc85  sim/arm/ChangeLog
+fdbfd69c55c0c24a412f20a3d5c16729  sim/arm/ChangeLog
 48f3c7da956f9c271d51154d52137647  sim/arm/Makefile.in
 a62a77605003de7a8ba75d8247fd77b7  sim/arm/README
-44fb591abc46aae9e9937c23ca9f161d  sim/arm/aclocal.m4
+6aeab705c29ad37128d6a99779ab6ec1  sim/arm/aclocal.m4
 a20b31a1cfc24dce8fb7601327fe0c7a  sim/arm/armcopro.c
 4ad759c1968c6f2e3fd7eaa392c0bf4b  sim/arm/armdefs.h
 114976046c7fcdb42851d0915113936f  sim/arm/armemu.c
@@ -4976,8 +5310,8 @@ d91f70e16f3321da1e33c4cfe1890b6f  sim/arm/arminit.c
 f2c0339f1bc254b9a2852a36d5073c01  sim/arm/bag.h
 52c26751759ef270b8051a5b8d78db4b  sim/arm/communicate.c
 6c63e70994d6749376838b490acba130  sim/arm/communicate.h
-04c2bd556b859d13011f77d620f1b6ba  sim/arm/config.in
-485916fda13ea2b2a5b4ae1054bbd540  sim/arm/configure
+f53321324a92d228d616fb592b68690d  sim/arm/config.in
+96708a647c4c8ed88fbf20055c7c935c  sim/arm/configure
 bf4a645a229d2ff0f810e39458a8309d  sim/arm/configure.ac
 8c039053e2def9e4fc910caf4b23ea56  sim/arm/dbg_conf.h
 0f8adbd409f2cc2e5d2fd74104196b39  sim/arm/dbg_cp.h
@@ -4993,24 +5327,24 @@ d475acac11768f072cfed4f38392348f  sim/arm/maverick.c
 b7b9aeaee9f61608836d2192e5f9d2b3  sim/arm/parent.c
 954e1b0a1dc87a295e02d42020117638  sim/arm/tconfig.in
 e94963f48831b61c449faf5f53b36f27  sim/arm/thumbemu.c
-34e8fcabbb17d67a91611eef80fbf821  sim/arm/wrapper.c
-7b8c82fd67e5cda2f3fe498aeeaffffe  sim/avr/ChangeLog
+309f27f8851ab7dad390803546d380e5  sim/arm/wrapper.c
+02a63ce32b7bf6af4943644ef2f5d540  sim/avr/ChangeLog
 8c9433dda4cf4a0892e77ad4424ae12f  sim/avr/Makefile.in
-44fb591abc46aae9e9937c23ca9f161d  sim/avr/aclocal.m4
-04c2bd556b859d13011f77d620f1b6ba  sim/avr/config.in
-e063229b2cf1791d2589dd147cfbbe83  sim/avr/configure
+6aeab705c29ad37128d6a99779ab6ec1  sim/avr/aclocal.m4
+f53321324a92d228d616fb592b68690d  sim/avr/config.in
+112eed9ba8e0a2da7916a7d8b7e7b4de  sim/avr/configure
 8bd719d3c014d2c2d004522bdddfa99f  sim/avr/configure.ac
-32d79d4cf102b5ad6c4c2745f68ee449  sim/avr/interp.c
-88b3c6f558d1a2bb82e72111f844d2bd  sim/bfin/ChangeLog
+317eec19e19be01d0a5356ded04376ae  sim/avr/interp.c
+eb557ec80b9f187eaed143ac025a2f57  sim/bfin/ChangeLog
 f7c4ad7755665dab78c17d6388916d4f  sim/bfin/Makefile.in
 f98ea62fb3f55a9a7de978460c19b0d7  sim/bfin/TODO
-e56b6c27ddaaed521429306d131d537a  sim/bfin/aclocal.m4
-f198125ebd49d034b295a7a7c292cee7  sim/bfin/bfin-sim.c
-3a321ec317d271d6e504d103892f69ef  sim/bfin/bfin-sim.h
-40e3ad2a04af58806f54123b09b7366a  sim/bfin/config.in
-361b05046656ff822012c5bb3740e977  sim/bfin/configure
-5cb7e753f86dfea1f6bf2463a7f34aa3  sim/bfin/configure.ac
-a107410d6152155a2504673d5a68b5e2  sim/bfin/devices.c
+cf5aec2eeb9f41abb186d98fd2d13469  sim/bfin/aclocal.m4
+cd21c3ebd5293e7f2d91a881316202f7  sim/bfin/bfin-sim.c
+f974340a6b235e5ca00d18b5e4f01276  sim/bfin/bfin-sim.h
+bfe19790f7cdd501d82e1647c291471a  sim/bfin/config.in
+73e204b97c0edaf4fcf3eac4bf3984b2  sim/bfin/configure
+fa52750eb4c6a2980c45a827971c44c4  sim/bfin/configure.ac
+7dd0dd3eda603b52036561e8546e175e  sim/bfin/devices.c
 8eb68c05f5ac0c950187bb69a4409e8c  sim/bfin/devices.h
 0ff63580a8e5beb2da364a615190757e  sim/bfin/dv-bfin_cec.c
 b8496d082b390aa0a6cff1c465f81051  sim/bfin/dv-bfin_cec.h
@@ -5020,7 +5354,7 @@ c9d02957224aaf467507b48596ecce9d  sim/bfin/dv-bfin_dma.c
 4f7e45c79186951f270fcefda28dd2f8  sim/bfin/dv-bfin_dma.h
 7d3a26b9c5f8c8bdfab2cd55fcc155b6  sim/bfin/dv-bfin_dmac.c
 e27dcbdd9612158c1c0606c224d3541f  sim/bfin/dv-bfin_dmac.h
-9b3b96b0af4fcb62a7bae03bb16f7209  sim/bfin/dv-bfin_ebiu_amc.c
+5c9857c762d97be3b5b7b3daee0e7296  sim/bfin/dv-bfin_ebiu_amc.c
 f0fc6272fc4bab2747cdb0230b99926f  sim/bfin/dv-bfin_ebiu_amc.h
 c4254594e763bb70a5e94c268b418990  sim/bfin/dv-bfin_ebiu_ddrc.c
 9164cb48813aec78a101943daa82a06b  sim/bfin/dv-bfin_ebiu_ddrc.h
@@ -5034,6 +5368,8 @@ cde4e29fd8d7c053049f688422448c15  sim/bfin/dv-bfin_evt.c
 9c908ef9d8792d7b24582888baa97f09  sim/bfin/dv-bfin_evt.h
 2b5c66142839c6099b4ea7cdbe0d627f  sim/bfin/dv-bfin_gpio.c
 a58d1228958df7ae0887414c90f917c4  sim/bfin/dv-bfin_gpio.h
+35399420c16a8b53b3be08a7cce0aebc  sim/bfin/dv-bfin_gpio2.c
+e2f6df32af8c06233f964315018f839e  sim/bfin/dv-bfin_gpio2.h
 78b274e09d51dc9bbbc15438000f95c9  sim/bfin/dv-bfin_gptimer.c
 a396137d64b8f9f0f2a80a7d3c63df86  sim/bfin/dv-bfin_gptimer.h
 18ed79f5a7917eea6ba3436afe6d7c44  sim/bfin/dv-bfin_jtag.c
@@ -5046,13 +5382,15 @@ c6c88831044782fc9e7dc78b8845e9ce  sim/bfin/dv-bfin_otp.c
 7460ef0b2ad7363dac7f9c0fb5ff9e7c  sim/bfin/dv-bfin_otp.h
 98532243be0b5aaabe4894f21ca49bcb  sim/bfin/dv-bfin_pfmon.c
 1045f0621e12c31aed37e1b405e47690  sim/bfin/dv-bfin_pfmon.h
+1ddd4cd5ff4c3cb3c470c601c9ba4ee1  sim/bfin/dv-bfin_pint.c
+2ab18f858e146e5fb0732bff89e9bbc9  sim/bfin/dv-bfin_pint.h
 31a320eb6cc970f89cc08248599ed406  sim/bfin/dv-bfin_pll.c
 6c0c5f032e88d2e63c7e3006282132b1  sim/bfin/dv-bfin_pll.h
 8ab2b46947ea94614f7f4befad91e88e  sim/bfin/dv-bfin_ppi.c
 c81c1f118a85e4664f1c10d076b60b44  sim/bfin/dv-bfin_ppi.h
 d1605171f0f42e62867bbd5b711a6ac4  sim/bfin/dv-bfin_rtc.c
 30a09966492099096d3dc7c13058a133  sim/bfin/dv-bfin_rtc.h
-bb9cb293300c6daf9df70979bd85a89b  sim/bfin/dv-bfin_sic.c
+3a9f507504b33c93650d380825321dea  sim/bfin/dv-bfin_sic.c
 65c37dd7fd7f53867d0a575c114aeb58  sim/bfin/dv-bfin_sic.h
 09a0bd004a0442f7aa6bdc3882c87479  sim/bfin/dv-bfin_spi.c
 fa51fffb0aa325f8350925344c3a298a  sim/bfin/dv-bfin_spi.h
@@ -5072,12 +5410,12 @@ de93375012a60e62b35fbbae386d7ed8  sim/bfin/dv-eth_phy.c
 45f9bb1026267ccc7d9243cf08d61701  sim/bfin/gui.c
 da3e7e47b8e62f28716fc770edff8212  sim/bfin/gui.h
 a751ed26a3c04c3f39508421dfe815be  sim/bfin/insn_list.def
-9cac79d684ac1dd359f64a2ab13d8cf8  sim/bfin/interp.c
+6d77a81a15beff274db93a08221ae006  sim/bfin/interp.c
 492427fc77b38896d10fe0d402d8033b  sim/bfin/linux-fixed-code.h
 fe8fcb58271d79a51c52cb2d3d880d6c  sim/bfin/linux-fixed-code.s
 40392de169eff15c687d7545b487e66e  sim/bfin/linux-targ-map.h
-ea91147d167331d429c7c113e2a6a77a  sim/bfin/machs.c
-f46a14711a9660bbfa710577ecba992d  sim/bfin/machs.h
+943145c1be374c0f7f5a082fac388b74  sim/bfin/machs.c
+3112a5e736ff64d3521e7696d14d80f4  sim/bfin/machs.h
 f8b044e8415c9f9e8e0c23b4d73a59e4  sim/bfin/proc_list.def
 1bec285587452dcb0beacf31b9576662  sim/bfin/sim-main.h
 74df1e68e5725af09bfe140479acf3b8  sim/bfin/tconfig.in
@@ -5110,12 +5448,12 @@ ffb76dbec098de19fa58d330e4499c7d  sim/bfin/bfroms/bf54x_l1-0.4.h
 7c2822269026f83ae214a15f8688694d  sim/bfin/bfroms/bf561-0.5.h
 66cbeef247c1ae97be55a7c621b2414d  sim/bfin/bfroms/bf59x-0.0.h
 d192c8113897b222793a89643741c55e  sim/bfin/bfroms/bf59x_l1-0.1.h
-7ffa9697180a656c09f9c610cf3ec0a0  sim/common/ChangeLog
-6c27b82e35089fea1c6fc8750cc04e79  sim/common/Make-common.in
-d3b8ef37053a4a88617f58f7c24fbc2e  sim/common/Makefile.in
-041e9d362465603c0316d535557bb5d7  sim/common/acinclude.m4
-47a35016bd3fc4648de1354cb53e5c13  sim/common/aclocal.m4
-0ae28910668e0187fe05b3944a47ab67  sim/common/callback.c
+ab8e4397c9dfecd861546dbd03b8679b  sim/common/ChangeLog
+f3c99bb434988b9beb3afc03d70215c6  sim/common/Make-common.in
+a7a152ec77d1d16585af46d3768043c4  sim/common/Makefile.in
+19b1b0d739475ae9cf6f6fc32643ef27  sim/common/acinclude.m4
+5f613afbd09a4730561db7f4b323b3fc  sim/common/aclocal.m4
+6f704a3f375403bee767f3bcc90dcaa8  sim/common/callback.c
 e411408b876d3d66730db0ef1041f8ce  sim/common/cgen-accfp.c
 b3d5405593392fae19d31f5b0b3800d6  sim/common/cgen-cpu.h
 8257320ebb914d2d4ad1b9ddd8033885  sim/common/cgen-defs.h
@@ -5130,13 +5468,13 @@ c10b9f0f2371d36bd3f63856ecfc0b38  sim/common/cgen-par.c
 e24a3f89d6c0370be9e81c6ef0875a29  sim/common/cgen-scache.c
 d60aa3b98c619de77e6a21566fd49a6c  sim/common/cgen-scache.h
 6d3fcf555884f4f8547ae0f619987076  sim/common/cgen-sim.h
-3b453af43b20b2e146b811d4a3b0445a  sim/common/cgen-trace.c
+ffbed3d7bd6b050e46945ed2a7c61380  sim/common/cgen-trace.c
 89fc49ec62f95d3d148190763b12393e  sim/common/cgen-trace.h
 d25ae81285bcf1767e9072c1b28adde5  sim/common/cgen-types.h
-50c83b2dff1e6354f688f43bdd5f71cf  sim/common/cgen-utils.c
+d41fb7af772055cc353ddf94e59c1976  sim/common/cgen-utils.c
 025dcdf5925933a2d0a1b4e1e1c00ce0  sim/common/cgen.sh
-64a8879dc9cea409e860d0cc48899a81  sim/common/config.in
-d1d07cd6950ed06b0f7cf18c37323079  sim/common/configure
+6b86e4e12b3390b4ace64fee0baf223c  sim/common/config.in
+8baa3d8dfa9ba56932e70dec9765f11d  sim/common/configure
 19e6baf3d02f4e62bc462107c23b1aaa  sim/common/configure.ac
 e57e47029d4570e727a24a297430761f  sim/common/dv-cfi.c
 5e762b9f259bcb8270eede7ba85e88ce  sim/common/dv-cfi.h
@@ -5147,8 +5485,8 @@ f384bdbef9f72ae1b8e915ac1b403527  sim/common/dv-sockser.c
 5f2f6b848b075b8f5ae7b74081e1f4e7  sim/common/dv-sockser.h
 4ac4de2f5cbaa78e805d696918722ad1  sim/common/gdbinit.in
 df68f67b8cb1aae31736038c3d1a9685  sim/common/genmloop.sh
-6b37f32950f39cfaf94d591956d9c0e6  sim/common/gennltvals.sh
-2281f5fa34ad8e9cf673469a424e676f  sim/common/gentmap.c
+0b325ef38373f313ecc4eb972947fcb5  sim/common/gennltvals.sh
+5d3ed8a89347b07c6e8c5d942325d008  sim/common/gentmap.c
 0cd5aec0350eb378abd59b9e9c5050e3  sim/common/gentvals.sh
 8d4683e5816825624222903e4bec22a9  sim/common/hw-alloc.c
 324b353f0f6f20f904a56a8b3c69bd93  sim/common/hw-alloc.h
@@ -5163,14 +5501,14 @@ a5d3326863160cb41255da5c279f6caf  sim/common/hw-handles.h
 575a9e474faad108b9436886520244ed  sim/common/hw-instances.c
 756433f58dda884d1c3bd3a0f1df4b4f  sim/common/hw-instances.h
 e5102dfe4a00d0ddd845ce0aa3ae75c4  sim/common/hw-main.h
-fe5ccac1cee88fba60355d0c3fb4febd  sim/common/hw-ports.c
+5ecb9ec29bb4969ce08e7a24cee1920d  sim/common/hw-ports.c
 db6a8566d31c828383cb08be8bddada2  sim/common/hw-ports.h
 24068e0b73aca56d9c12e8720e04c21b  sim/common/hw-properties.c
 de134b24dec36654b695968aaf3b9564  sim/common/hw-properties.h
 1af519a1f24b68d9fefe072785f9270e  sim/common/hw-tree.c
 600425cd349e592e1f61f6dfda418632  sim/common/hw-tree.h
 085d96935d0cf2649b8ca8d83d54bf3f  sim/common/nltvals.def
-4b41989dd1b3b2445c96a013da1baa19  sim/common/nrun.c
+5cb1243f7fc36c9fbdb383b033912d9a  sim/common/nrun.c
 3f1306133dc196e84c770a833a9d89f4  sim/common/run-sim.h
 fdde582da5120759c53c234e5c382b9e  sim/common/run.1
 bd3e02768df834973f52608547cd0969  sim/common/run.c
@@ -5187,7 +5525,7 @@ f73edcc352ac82dd2efb6232d3f872be  sim/common/sim-basics.h
 bd9a352a7f5ed9bbb49c4c10f1a25914  sim/common/sim-config.c
 200c4a83c0badb951ac5e60dbc651cd9  sim/common/sim-config.h
 a8ebad0812c0431366d729145ac7ddec  sim/common/sim-core.c
-1b3fbfaaaf2efd8904aba95c7c82d441  sim/common/sim-core.h
+b03699321e82c15b9816d4df11c99ed4  sim/common/sim-core.h
 84ab428c3990cd005acaa06c9562a703  sim/common/sim-cpu.c
 e17119dd829f7f8d74bc10468599763c  sim/common/sim-cpu.h
 f9f57df5d39647db4df430674c439709  sim/common/sim-endian.c
@@ -5221,15 +5559,15 @@ ddc1c8723449de82714ff60bc740b8a8  sim/common/sim-options.c
 9b3ac4717939446832ac41839596724d  sim/common/sim-options.h
 180b8053f3e0fd2ce01a302d17481f76  sim/common/sim-profile.c
 bc49895953600aaf6ac215f842a471b3  sim/common/sim-profile.h
-1838f4a915b8368919b9f785ea9075ad  sim/common/sim-reason.c
+1c806e22963039ccf44ac41677be1066  sim/common/sim-reason.c
 6a26d68905610dca647bc42553c1f5f4  sim/common/sim-reg.c
 cacc284dd7627a1b7e899d1e9e4e15d2  sim/common/sim-resume.c
 5770e413456abccd1115c9d92b6fbab5  sim/common/sim-run.c
-974de6d1b964f2810da10338f2bd1a12  sim/common/sim-signal.c
-8eb3bf2c8104101dbbd5fd1a6ad10304  sim/common/sim-signal.h
+b1bcc8ae8f02951ab4f57c69307afd90  sim/common/sim-signal.c
+ec4a0c2741cfc57931d9d094d0113053  sim/common/sim-signal.h
 af7bb2f77547f9542befc2680a0efefe  sim/common/sim-stop.c
-98e85f9e32bc62a72c1a84f6e628a86c  sim/common/sim-trace.c
-7a4345bb2c20da4faf28dc55aeba6051  sim/common/sim-trace.h
+7a18b2dffb6447128528da621daa4459  sim/common/sim-trace.c
+4ad5a86baf1246297acf78264e2f74d6  sim/common/sim-trace.h
 c6a867b5aeb979d23f6892affd0b1c3e  sim/common/sim-types.h
 e9579630434350eec5556685fb7b3ef2  sim/common/sim-utils.c
 7f45c522b0256e4e232da95186df14fb  sim/common/sim-utils.h
@@ -5238,24 +5576,24 @@ c68fdc7929dffdc673d1d40d68a89992  sim/common/sim-watch.h
 726c3cb28b39150494a55f034dd19aed  sim/common/syscall.c
 bd5c87daaac42725e636fe648650fc7c  sim/common/tconfig.in
 ef9680aff9815190f37b5946d26dd616  sim/common/version.h
-49c749473ffeae2242c7e0e62948c45e  sim/cr16/ChangeLog
+70b08e589af1fa8475a0df0258cc3461  sim/cr16/ChangeLog
 ecf24c708ae89ccda3c69e375c7853cc  sim/cr16/Makefile.in
-44fb591abc46aae9e9937c23ca9f161d  sim/cr16/aclocal.m4
-04c2bd556b859d13011f77d620f1b6ba  sim/cr16/config.in
-603785699c099d94db1dc1655760f0ef  sim/cr16/configure
+6aeab705c29ad37128d6a99779ab6ec1  sim/cr16/aclocal.m4
+f53321324a92d228d616fb592b68690d  sim/cr16/config.in
+cf0b01c6742f0ea2bd1efb642be03d91  sim/cr16/configure
 e1e8eeb861a2f2281fbc2c298c16d800  sim/cr16/configure.ac
 322feee856f846f7539d39cee1430aed  sim/cr16/cr16_sim.h
 554320ebd71635b391b6f62977c29ec7  sim/cr16/endian.c
 13f5d1a1cf5eb103db28992107be55fb  sim/cr16/gencode.c
-f56ead85f26b6c921732e7d9cc8075ec  sim/cr16/interp.c
-51d276a58f24df39f07d84883298231a  sim/cr16/simops.c
-721ed2fef7eb34463e7cc9fbf264d9e5  sim/cris/ChangeLog
+9f32c8a5e221147c8fd8a004065164b3  sim/cr16/interp.c
+397d3eefdd573e4de48a0ef68c14c737  sim/cr16/simops.c
+39cde079e72611bb64ea80f263b1b910  sim/cris/ChangeLog
 ed128a8264364e28b879ba2e2a8fbaf7  sim/cris/Makefile.in
-44fb591abc46aae9e9937c23ca9f161d  sim/cris/aclocal.m4
+6aeab705c29ad37128d6a99779ab6ec1  sim/cris/aclocal.m4
 943509248a8db122bcd6bfd37b182708  sim/cris/arch.c
 60a72bbfae01463643baadf8b1d9088d  sim/cris/arch.h
-ceca025eeb1242bd8b6665e5f65ba95b  sim/cris/config.in
-8a670e3d937acda18e9d7f2f6b58f6a4  sim/cris/configure
+6e348eb37c01c8514f0119407886a1e0  sim/cris/config.in
+5d06c265b35e505fc800042f0ab502d4  sim/cris/configure
 cc780d50c072ffb7f9d29ad398e78a62  sim/cris/configure.ac
 c69c60c5503e57ee76fcdd2efe59671a  sim/cris/cpuall.h
 b790eb434c6febdc8180bd5150b67bcf  sim/cris/cpuv10.c
@@ -5282,52 +5620,52 @@ af18706dea11d6dfaf347c614bf29dae  sim/cris/dv-rv.c
 f4d4115d9407f3c46f685e998c0ab23d  sim/cris/rvdummy.c
 2557d0b2cb2638ee5ee54f849bcc115a  sim/cris/semcrisv10f-switch.c
 758ff5e8996b1b05dab6515347e61e34  sim/cris/semcrisv32f-switch.c
-cf106f37411a7051f0f3d36a370eec81  sim/cris/sim-if.c
+929915f8493f450a73c3233ff45f3a77  sim/cris/sim-if.c
 68ed95f2cbe462a7f86d3d61404f6630  sim/cris/sim-main.h
 24a0b30d492ddf6bfe81d2c4ca15e7e5  sim/cris/tconfig.in
 aa17b0b2140a68e87e6d6b8914d70ea5  sim/cris/traps.c
-c0ed97f2e2d6c7380f8d64dfd91f2865  sim/d10v/ChangeLog
+3c4e0c891d46966fe2be1f78491ad069  sim/d10v/ChangeLog
 d4e4845a0be4739db774fc7e1c8a75e5  sim/d10v/Makefile.in
-44fb591abc46aae9e9937c23ca9f161d  sim/d10v/aclocal.m4
-04c2bd556b859d13011f77d620f1b6ba  sim/d10v/config.in
-603785699c099d94db1dc1655760f0ef  sim/d10v/configure
+6aeab705c29ad37128d6a99779ab6ec1  sim/d10v/aclocal.m4
+f53321324a92d228d616fb592b68690d  sim/d10v/config.in
+cf0b01c6742f0ea2bd1efb642be03d91  sim/d10v/configure
 e1e8eeb861a2f2281fbc2c298c16d800  sim/d10v/configure.ac
 986e8bfc01b0e0cfe1be748f55d862e3  sim/d10v/d10v_sim.h
 7cf4cd44539377c57e6d64f3715397fd  sim/d10v/endian.c
 4dda487eecd2318dd4c38275683196c8  sim/d10v/gencode.c
-c702f01b2fa634f9698f27f278b7d07a  sim/d10v/interp.c
+e42784c3b6e0496f47b685e5fd56ad18  sim/d10v/interp.c
 be35730e9f08c186e180c980154411b4  sim/d10v/simops.c
-54760eb7b3c44ff39b441ef9db97c1d9  sim/erc32/ChangeLog
+94be69885876ad8eb1057cc359f4ad6e  sim/erc32/ChangeLog
 6d6431b2948f30ce50c8b288212cf176  sim/erc32/Makefile.in
 9f2cbd625dfef51b3d1162ba9dbb8a4f  sim/erc32/NEWS
 72fececbe452af10d0adb31b037040dc  sim/erc32/README.erc32
 ce58de7fe1b8736ff94d663cb47bcf4a  sim/erc32/README.gdb
 8d0b5212c0ce4ec7e01d67b407af3ba8  sim/erc32/README.sis
-44fb591abc46aae9e9937c23ca9f161d  sim/erc32/aclocal.m4
-04c2bd556b859d13011f77d620f1b6ba  sim/erc32/config.in
-f0f5b7155e490c4b167832ce52525e0f  sim/erc32/configure
-9c7892b14ba7616aa4573fc04b53553c  sim/erc32/configure.ac
+6aeab705c29ad37128d6a99779ab6ec1  sim/erc32/aclocal.m4
+f53321324a92d228d616fb592b68690d  sim/erc32/config.in
+bb445866e38a54a01c55e4eae5afa498  sim/erc32/configure
+4bb6a0210991c75692509700fa118328  sim/erc32/configure.ac
 fb82f2de8f5ca5a041a8f5a0c8536984  sim/erc32/end.c
 bdaa408be1b1707342a0ab3d2809e21b  sim/erc32/erc32.c
 65b57f3e2df11d8361fe09bad8d27f8f  sim/erc32/exec.c
 cd61f3c64f81cf4df13045a4542d2423  sim/erc32/float.c
 84294b9e0aec47ee49f6a4f1f3c869fd  sim/erc32/func.c
 5d55e685281806e6fb65aae7ea51a36e  sim/erc32/help.c
-e626edf8f805822d0154822402d712cf  sim/erc32/interf.c
+bedcc2f6b0da08c3b7005878dee11322  sim/erc32/interf.c
 a4ec0aec403bad8fc19bc22c214b0ae9  sim/erc32/sis.c
-c882f8091328be301c0826475a4c00c8  sim/erc32/sis.h
+f7493da586e6d0a54573dd2419ef425d  sim/erc32/sis.h
 e7a02f18ba69be1512d680e05b4c44da  sim/erc32/startsim
-2a31e0035dbfecea1da3ac754a36f66a  sim/frv/ChangeLog
+b60f50fb2f05d4ef91816e5ffffd9e79  sim/frv/ChangeLog
 d8f4b78e1e867d743091c0a2812b130b  sim/frv/Makefile.in
 1dcb16936dd94db21e5b82f208506a6a  sim/frv/README
 4327df77a7932a933cf53cd14051fdc0  sim/frv/TODO
-44fb591abc46aae9e9937c23ca9f161d  sim/frv/aclocal.m4
+6aeab705c29ad37128d6a99779ab6ec1  sim/frv/aclocal.m4
 218289ee8cc2507eaa5e53c8756fc2c1  sim/frv/arch.c
 9b39a2f9163621c8935b18a14a97a205  sim/frv/arch.h
 7a087706640a1d019c7de760b0a73e25  sim/frv/cache.c
 add2df1f7c156d0a208c4c33b2c33d32  sim/frv/cache.h
-b3ad6ae643f707c415ea64d5621d6bfd  sim/frv/config.in
-46cee806b96e9594271cf7efa7f96343  sim/frv/configure
+c0c6a50b13479a8edbb89380d4e7a1d9  sim/frv/config.in
+d2ddfe5a21f8806e06778d14fcc21818  sim/frv/configure
 799548fcf6366a66780edaf0d25d451e  sim/frv/configure.ac
 c803b4a2f9d55ff78491ae572b0f8a62  sim/frv/cpu.c
 570b26f2750e2b9f44f4904cb3fd7c6c  sim/frv/cpu.h
@@ -5360,22 +5698,22 @@ fcb7f59cbdd7ba6034773202dee91904  sim/frv/sem.c
 c83db5f997e8a421138b74ece0198603  sim/frv/sim-main.h
 87e1b2f71a8938597514fda93676e466  sim/frv/tconfig.in
 45acd0950cdd0fe8115efcce6e7a50aa  sim/frv/traps.c
-919d22b1b9b606d7c8b6aa481cee5547  sim/h8300/ChangeLog
+f3215edbba8650385e638e80b55677e1  sim/h8300/ChangeLog
 d212546861806c054ccb4056248ad7aa  sim/h8300/Makefile.in
-44fb591abc46aae9e9937c23ca9f161d  sim/h8300/aclocal.m4
-200be7d4e89df5335cf559e3ab6ef4e1  sim/h8300/compile.c
-aeb29a5aa513d2ed69ccd2845fc2c33b  sim/h8300/config.in
-8a7e5e72b06a04bf0c9ee05cc0c69d2f  sim/h8300/configure
+6aeab705c29ad37128d6a99779ab6ec1  sim/h8300/aclocal.m4
+f79a2406c947f02a857832887e5375fe  sim/h8300/compile.c
+d5542707076448361d6cf928a9682924  sim/h8300/config.in
+50e3f409dbf4e7cc63a101d322bcc452  sim/h8300/configure
 caf8ed0d0602dc5b775648762ee46e5e  sim/h8300/configure.ac
 c5fc0ac18cf227f20bd9e218f219d811  sim/h8300/inst.h
-57ddd7ec6dc75f46110af89cca60a0a9  sim/h8300/sim-main.h
+f5057aca5db39df81656e79ade16cbab  sim/h8300/sim-main.h
 f180a66ef231f5eabfe450962b4225cf  sim/h8300/tconfig.in
 5a198f6b19aed858570b289330bf44f2  sim/h8300/writecode.c
-b9bc6e4300d24cfc07328a0341b3e8c3  sim/igen/ChangeLog
+366dc03a83cafb69dd42245bf7cfaf56  sim/igen/ChangeLog
 8f51aa628a226cbfaf5143365ebdee2f  sim/igen/Makefile.in
 e4820c2ded003734a0d4cbe7a2858ab0  sim/igen/compare_igen_models
 290d600da66bd2846e6b8130844f4f38  sim/igen/config.in
-02d6bf6c1ac54d6e8bf92e8b32ade6d8  sim/igen/configure
+a61b8483bb73c9218497c1ecef5a9497  sim/igen/configure
 cf3879eb2ab97f84b5d4d569139ce418  sim/igen/configure.ac
 25b8f8bd6436707342580f8ac4e4cdd1  sim/igen/filter.c
 4a45c2736ce5a726785e926b4bfae9a5  sim/igen/filter.h
@@ -5411,13 +5749,13 @@ c2d29a7da729f885dbbf79da11b38f76  sim/igen/misc.c
 cb230f3f6187e66a77d0bcd4ab0cef58  sim/igen/misc.h
 1c87a27cf4cc3621bd9b6cdcc22d0c04  sim/igen/table.c
 06f7cad64fd83ece5dbc7fbf426ce056  sim/igen/table.h
-af49ca4b1bc0d3c79c09dc0ffe424ed9  sim/iq2000/ChangeLog
+3ba82805a68ed117ef57bc436d241754  sim/iq2000/ChangeLog
 eedecb989b0b7b22b660e6e725cb6c85  sim/iq2000/Makefile.in
-44fb591abc46aae9e9937c23ca9f161d  sim/iq2000/aclocal.m4
+6aeab705c29ad37128d6a99779ab6ec1  sim/iq2000/aclocal.m4
 267504d75df7dbf2b2c13dc788b21175  sim/iq2000/arch.c
 9b79db2ffe9a4bbd70673847aa4ec32c  sim/iq2000/arch.h
-b3ad6ae643f707c415ea64d5621d6bfd  sim/iq2000/config.in
-c0df55d62138aa5144445ce0f9278f75  sim/iq2000/configure
+c0c6a50b13479a8edbb89380d4e7a1d9  sim/iq2000/config.in
+130811b0d252ac64102b6b8030db1745  sim/iq2000/configure
 4206bcc0276d4974aa7623af02c1d312  sim/iq2000/configure.ac
 9f868929ba23e8725e6177658091639d  sim/iq2000/cpu.c
 7c6e4734427bf847d704f4523ddd72ac  sim/iq2000/cpu.h
@@ -5433,13 +5771,13 @@ f332cc9f063370e18eec47f7433fc6fc  sim/iq2000/sem.c
 a8470cc7a36053982f6c4cc9bdca29c2  sim/iq2000/sim-if.c
 aa1461ca5a06866e1b574bee397435c2  sim/iq2000/sim-main.h
 696a9d79c383c9b3ce4655d27f5948e8  sim/iq2000/tconfig.in
-4b415319ecfe8a4415feb962779e7e2e  sim/lm32/ChangeLog
+b7a30cfd797142a3b3fc56bcff55c4eb  sim/lm32/ChangeLog
 109b8e6c0b9bf08551b7ff285c940fb8  sim/lm32/Makefile.in
-44fb591abc46aae9e9937c23ca9f161d  sim/lm32/aclocal.m4
+6aeab705c29ad37128d6a99779ab6ec1  sim/lm32/aclocal.m4
 ff1593d3acb5849ef9c4b02e61263b77  sim/lm32/arch.c
 ed598eb8e986599981ef0c08dc356918  sim/lm32/arch.h
-b3ad6ae643f707c415ea64d5621d6bfd  sim/lm32/config.in
-289d3dae2d052d1b4040c892efe00d9d  sim/lm32/configure
+b36495fee0026d3c034f187c4c6fdaf9  sim/lm32/config.in
+660e744d1a99d3b40377694bfdf0d164  sim/lm32/configure
 126879ee99d22b2005fd60e030388d49  sim/lm32/configure.ac
 bb4928750ff0de97bc69c82554679133  sim/lm32/cpu.c
 64e21fd56641794c86d78d5b5f572416  sim/lm32/cpu.h
@@ -5460,19 +5798,19 @@ c516c600e4b17bf332056eec02ae9842  sim/lm32/sim-if.c
 f5537c39e19adb336efcf84351d0fb78  sim/lm32/tconfig.in
 c3309a554bf05b974402e83600985b18  sim/lm32/traps.c
 892e0764a45dbe7211a2eae039de5647  sim/lm32/user.c
-e49745c09adb4fc685437eb9c31b1bb1  sim/m32c/ChangeLog
+7aa0a2500efe4180f7b293560d2cbc81  sim/m32c/ChangeLog
 c800255e8f89e76fd542f5fb7fce963c  sim/m32c/Makefile.in
-44fb591abc46aae9e9937c23ca9f161d  sim/m32c/aclocal.m4
+6aeab705c29ad37128d6a99779ab6ec1  sim/m32c/aclocal.m4
 23011f56a747db705b6546e605b22126  sim/m32c/blinky.S
-0fdb0144121569404b35dd8d29720c7d  sim/m32c/config.in
-a0fa1361ede9ccd3bc7858159e58d9d0  sim/m32c/configure
+520099415a355c2cc7021c632b138e0f  sim/m32c/config.in
+cb60274b2b2b548083619dfad16286d1  sim/m32c/configure
 3bc0b55ca214918e3f4a7eb72c4837a4  sim/m32c/configure.ac
 75f2534ab02c3dc7b380400c579a4d76  sim/m32c/cpu.h
-e62440c64b477f033f85efdca6ffda1b  sim/m32c/gdb-if.c
+928dc5db8bfe34231f10fb0d74197ef3  sim/m32c/gdb-if.c
 e9fe8619bc8ca4d9ed8130bdf74b223b  sim/m32c/gloss.S
 8ebf269ed608ff594f4cfa0355149336  sim/m32c/int.c
 ed63ece7a9c3fee683f685d13caf6188  sim/m32c/int.h
-bbf8a84010bb6dd1b23053ee5143f806  sim/m32c/load.c
+65505d316605f55e83a47234172582b1  sim/m32c/load.c
 fcf2b5fb758a72942c89e475643fe8d4  sim/m32c/load.h
 ea61004c60b65247322bf688de95a4d0  sim/m32c/m32c.opc
 e8a705dfafa9298d663dac334ff6024b  sim/m32c/main.c
@@ -5490,20 +5828,20 @@ c84ac91f27aea2d27d33da7ba83283da  sim/m32c/safe-fgets.h
 f4df8bea20cc47fecea436778e97b05d  sim/m32c/sample2.c
 93b3c7703ed7033d75c7a1caea2c0260  sim/m32c/srcdest.c
 24e2f861da06951620983b5a9ca6efe2  sim/m32c/syscall.h
-953bceb696548c778c65387f7f182932  sim/m32c/syscalls.c
+1fb259bf48277efabe1a7e3e3fcd9909  sim/m32c/syscalls.c
 0a44f7a8ab9b4c5326fbf21761cf6cbf  sim/m32c/syscalls.h
 79e388b08d436f4bfc70c64e46df14b0  sim/m32c/timer_a.h
-2ee47761906fbe0d90d2d20dedc6d7ac  sim/m32c/trace.c
+424d5ef607a30df6a9ce48bd7040dee1  sim/m32c/trace.c
 615729a4542d2c3c8832c01fa63ae862  sim/m32c/trace.h
-e51d490b5e7a768636d12ff32811216a  sim/m32r/ChangeLog
+87961e892b0f511336d86a59258fbf98  sim/m32r/ChangeLog
 618bf7cac65b3c5d88c0f1a89414b411  sim/m32r/Makefile.in
 23b6e82d29f42c31a097d431b0f73004  sim/m32r/README
 7aa7d02d4d195447e0ae6c176fc6ceb4  sim/m32r/TODO
-44fb591abc46aae9e9937c23ca9f161d  sim/m32r/aclocal.m4
+6aeab705c29ad37128d6a99779ab6ec1  sim/m32r/aclocal.m4
 d1a6b8389370d62bfa6dad3e930f5958  sim/m32r/arch.c
 e8c8855c78136b33aab2096c6a5970ca  sim/m32r/arch.h
-b3ad6ae643f707c415ea64d5621d6bfd  sim/m32r/config.in
-224a48edd2ac9aca3058f25540cb1d3a  sim/m32r/configure
+c0c6a50b13479a8edbb89380d4e7a1d9  sim/m32r/config.in
+610dc7457de4ad001cd5379a0b007016  sim/m32r/configure
 32728b40e80fa0acd3b47bc08a85d24a  sim/m32r/configure.ac
 f176f1104731072f93450191e3e64c39  sim/m32r/cpu.c
 96f4b6567bbe5cb0e6d459cf56f8d555  sim/m32r/cpu.h
@@ -5537,13 +5875,13 @@ b3b8a63ec4327eec912924d3c2b3e0e9  sim/m32r/model2.c
 a24af2c954c1781817ac3519604b8e37  sim/m32r/sim-main.h
 e401ce81778d171f79151b58eeef8bb0  sim/m32r/syscall.h
 e962644fafd12290fbf81ebc5bf75941  sim/m32r/tconfig.in
-3bb2de0f10851b3819569fbc5b598993  sim/m32r/traps-linux.c
+5bd6584363128f1f835a1a2056e03a2d  sim/m32r/traps-linux.c
 cc34ab068aecbd4bbf8d639a80a2a4ad  sim/m32r/traps.c
-a46ada549b25b9084c4eefa05d51876a  sim/m68hc11/ChangeLog
+fc0e721a4ad717fad92e3b06adbe8545  sim/m68hc11/ChangeLog
 d5ddad54b96349061fc7cb1d15838e10  sim/m68hc11/Makefile.in
-44fb591abc46aae9e9937c23ca9f161d  sim/m68hc11/aclocal.m4
-b3ad6ae643f707c415ea64d5621d6bfd  sim/m68hc11/config.in
-3c7317577294da2fd082ffba33226639  sim/m68hc11/configure
+6aeab705c29ad37128d6a99779ab6ec1  sim/m68hc11/aclocal.m4
+b36495fee0026d3c034f187c4c6fdaf9  sim/m68hc11/config.in
+9ca31279754f8677913acef8859c5fee  sim/m68hc11/configure
 f092e7c97289adc96411232a5fb24d3f  sim/m68hc11/configure.ac
 31966ea48755631fdbb695f5b14d29b3  sim/m68hc11/dv-m68hc11.c
 88da92080c83881b42e8811ded67a346  sim/m68hc11/dv-m68hc11eepr.c
@@ -5558,30 +5896,30 @@ ba8dc9ef203bc77831a0302e54ca021c  sim/m68hc11/interrupts.c
 500ad3599a2edff1b2c81089831a4700  sim/m68hc11/interrupts.h
 622eb7b4a994057f6dc2007a14f7b662  sim/m68hc11/m68hc11_sim.c
 c6f4ba0ae0bf908648928ca527951807  sim/m68hc11/sim-main.h
-dbdd08062e0a6851fc0a5dd2a186fe21  sim/mcore/ChangeLog
+1f12e68b61e8e9255d6fdb7db209416d  sim/mcore/ChangeLog
 339972cad424bae08b6b22c4a5aeb5d5  sim/mcore/Makefile.in
-44fb591abc46aae9e9937c23ca9f161d  sim/mcore/aclocal.m4
-04c2bd556b859d13011f77d620f1b6ba  sim/mcore/config.in
-0ebebca683683a2c1789bb66f8cafd19  sim/mcore/configure
+6aeab705c29ad37128d6a99779ab6ec1  sim/mcore/aclocal.m4
+f53321324a92d228d616fb592b68690d  sim/mcore/config.in
+8fc665e882926583a87539ff58cac362  sim/mcore/configure
 10e2d243d24d49e6536a568de1f67bc8  sim/mcore/configure.ac
-7524f9d86c092f1c912eae41045143df  sim/mcore/interp.c
+88c17d581027a35ac7ef61e0341e58a0  sim/mcore/interp.c
 cf7ecc4ab6bc4f614024431a48a4ab2a  sim/mcore/sysdep.h
-7b8c82fd67e5cda2f3fe498aeeaffffe  sim/microblaze/ChangeLog
+ddc12a9478d40462969c1b43c59d5d87  sim/microblaze/ChangeLog
 7794caca0c2fee0da17a20b7d85fb3c7  sim/microblaze/Makefile.in
-44fb591abc46aae9e9937c23ca9f161d  sim/microblaze/aclocal.m4
-04c2bd556b859d13011f77d620f1b6ba  sim/microblaze/config.in
-0ebebca683683a2c1789bb66f8cafd19  sim/microblaze/configure
+6aeab705c29ad37128d6a99779ab6ec1  sim/microblaze/aclocal.m4
+f53321324a92d228d616fb592b68690d  sim/microblaze/config.in
+8fc665e882926583a87539ff58cac362  sim/microblaze/configure
 10e2d243d24d49e6536a568de1f67bc8  sim/microblaze/configure.ac
-b73c370d31df631bd4708217ce241927  sim/microblaze/interp.c
+c2aedd6bb74dd2553a58a36d4c416c2f  sim/microblaze/interp.c
 3d375b77197ef00016f3a774ae799f5c  sim/microblaze/microblaze.h
 fe3a6a2e1fef4344e97146c78bfcb402  sim/microblaze/microblaze.isa
 083f3df6a8bf1fbb172b5fef98e5e7c2  sim/microblaze/sim-main.h
 a03dad7dbc132baa90761738a7739285  sim/microblaze/sysdep.h
-cdedb540723b9594ce65944f8440dd91  sim/mips/ChangeLog
+a4df9ae2a71c0bb23f5f1cbb230a1629  sim/mips/ChangeLog
 d30898fdd5510461d70cb70cf86a3b15  sim/mips/Makefile.in
-44fb591abc46aae9e9937c23ca9f161d  sim/mips/aclocal.m4
-7100047c622408940cac648d224f879b  sim/mips/config.in
-43301a0f1cb2dbb9b2f6e9731647b215  sim/mips/configure
+6aeab705c29ad37128d6a99779ab6ec1  sim/mips/aclocal.m4
+2d2d55c7a4c04e00ea26e612ca72c566  sim/mips/config.in
+c9faf2689a93103f206e3688edeedba7  sim/mips/configure
 312b942f48d17f6046e2e72da693d669  sim/mips/configure.ac
 893917253c292a457ad58ded4484f006  sim/mips/cp1.c
 832b1f6db007bfcbe124108d5eba938d  sim/mips/cp1.h
@@ -5592,7 +5930,7 @@ e0a0c10beba41316e906ff39e8a86424  sim/mips/dsp2.igen
 c927efdfef0e7f23cf76d919b940353a  sim/mips/dv-tx3904irc.c
 b28c78af7d6df79333bb79ca21cf8eba  sim/mips/dv-tx3904sio.c
 45ab23163b19d774ce6d837f4521b088  sim/mips/dv-tx3904tmr.c
-8c6b4feeb0b46f85b9763f24784518ba  sim/mips/interp.c
+050b46d4710cafaadaadbf44a36e56ff  sim/mips/interp.c
 61566dc2819979301d3d92473a37bbc3  sim/mips/m16.dc
 8793eaebb46c2a817387548abc7ef322  sim/mips/m16.igen
 be46c6b7d0eadfac93f6b71692cbcc00  sim/mips/m16e.igen
@@ -5610,20 +5948,20 @@ ee580282bffd8d68eeb0fbe1825232e6  sim/mips/sim-main.h
 520d024eada0d4a3ca8c17772361b8c0  sim/mips/tconfig.in
 e90e73eee445d44f164749dc8d8c0a4d  sim/mips/tx.igen
 b35a5093e668223efdc8aa2ef2d27f8b  sim/mips/vr.igen
-18d37d76991635dc6c27cff1fc6f62fc  sim/mn10300/ChangeLog
+d53ac5cc38ce0fe680b4a609d58126c9  sim/mn10300/ChangeLog
 23878329534d4f2ed6a9492cae4883d2  sim/mn10300/Makefile.in
-44fb591abc46aae9e9937c23ca9f161d  sim/mn10300/aclocal.m4
+6aeab705c29ad37128d6a99779ab6ec1  sim/mn10300/aclocal.m4
 c37a8063b25bb881b34e79630d4988b3  sim/mn10300/am33-2.igen
 ca37d532ba114a9504ebc9f569417a2b  sim/mn10300/am33.igen
-77ba48b2166205c0aa261dd505d2e7be  sim/mn10300/config.in
-38664df08446828845f722a38cb74c47  sim/mn10300/configure
+257ff45c3f578fd217af1870b7e371d6  sim/mn10300/config.in
+06e0b22fafd3ba1c34ac498b88bf722e  sim/mn10300/configure
 c844bb895ef0529327e9f5972f74706b  sim/mn10300/configure.ac
 6e40650f0c0b89353a9877049df9168b  sim/mn10300/dv-mn103cpu.c
 61525f1d482561dfc13ac5961e0c8589  sim/mn10300/dv-mn103int.c
 d1544f4f5add0f5585b1c796dd20d318  sim/mn10300/dv-mn103iop.c
 8189c7f3f311f2d4d5f9eaeeaae15bc2  sim/mn10300/dv-mn103ser.c
 04c8ac763f34b67c0c2b2d7104472d61  sim/mn10300/dv-mn103tim.c
-4aefb1596712f18ec4cc09ea507684ff  sim/mn10300/interp.c
+5947f7d37ee19cdf3e29990dad5f8d25  sim/mn10300/interp.c
 a02c306411614c8de463bf278aac5d2e  sim/mn10300/mn10300.dc
 a7335227cef936abda2f0c8402e79570  sim/mn10300/mn10300.igen
 0f2f6763bb1b6158e4f629b5da8c871f  sim/mn10300/mn10300_sim.h
@@ -5631,13 +5969,13 @@ a7335227cef936abda2f0c8402e79570  sim/mn10300/mn10300.igen
 9560a29b6c94d4955a447290ab5d050a  sim/mn10300/sim-main.c
 e301761d486406a6a63c17d5614d8559  sim/mn10300/sim-main.h
 a123cfe902117497cd3549ffb9746f78  sim/mn10300/tconfig.in
-1a729a11a32b6dc3ed184db593701a28  sim/moxie/ChangeLog
+a5de1300ecf7af5a3b7e29fb8fdccb3c  sim/moxie/ChangeLog
 4737d85ec67f5d1f75f978eadbe9dec4  sim/moxie/Makefile.in
-44fb591abc46aae9e9937c23ca9f161d  sim/moxie/aclocal.m4
-04c2bd556b859d13011f77d620f1b6ba  sim/moxie/config.in
-9a2bb583046956b90c32a0687dced28f  sim/moxie/configure
+6aeab705c29ad37128d6a99779ab6ec1  sim/moxie/aclocal.m4
+c0c6a50b13479a8edbb89380d4e7a1d9  sim/moxie/config.in
+310bbcfdd8f52091890cc5b110a92452  sim/moxie/configure
 93482e62e51e1d6c85c31a9510aafb91  sim/moxie/configure.ac
-a6eead4d07fb75782120f5376b2bcbaa  sim/moxie/interp.c
+b5ae70d0b26e81afe4058227c9fdb9ed  sim/moxie/interp.c
 3e974a2785cfa59747bccfc398c23e7b  sim/moxie/moxie-gdb.dts
 42b026d9a58e0c1dabb0269b8a322080  sim/moxie/sim-main.h
 8917ea9de8f6f7ff9f6fb86b5170ef8b  sim/moxie/sysdep.h
@@ -5645,7 +5983,7 @@ a6eead4d07fb75782120f5376b2bcbaa  sim/moxie/interp.c
 36407106664516616438a622329f6f1c  sim/ppc/BUGS
 0636e73ff0215e8d672dc4c32c317bb3  sim/ppc/COPYING
 55ca817ccb7d5b5b66355690e9abc605  sim/ppc/COPYING.LIB
-1adcddcef7d5c46163feca392ae76b77  sim/ppc/ChangeLog
+f5f4a9a9142bda6a0575d60a3936ef49  sim/ppc/ChangeLog
 1bad061e853e13647aa63e38a9f1001f  sim/ppc/ChangeLog.00
 ecd61aaafc1737616ae87c802cc0a8e1  sim/ppc/INSTALL
 b0ef7ced359d51bdb281f13afbb85e3e  sim/ppc/Makefile.in
@@ -5661,7 +5999,7 @@ cd16a10e02f69c3d9a4d66c8823d98a6  sim/ppc/altivec_registers.h
 28012ca04577dc9598675df669e13de6  sim/ppc/cap.c
 8f88189396a532d2824fcef2d85db174  sim/ppc/cap.h
 613b9a91f91f98d41a23f6dd89613cef  sim/ppc/config.in
-de5c4b9279718829c920b98594d4d557  sim/ppc/configure
+4cb4ea834dfaef1d24ac8e166a82130f  sim/ppc/configure
 e8de908db2df5e6f35ba8a0553e918ac  sim/ppc/configure.ac
 131b92c2bfc60c0a0fa11c7127f01151  sim/ppc/corefile-n.h
 e8cf6ac776b1e5098f8208c0f98aca62  sim/ppc/corefile.c
@@ -5693,7 +6031,7 @@ c6d335c965bc9ac0fd8a69490abc036e  sim/ppc/emul_generic.c
 ed6d07b7f4e68168b0ac37650d30dce0  sim/ppc/emul_generic.h
 168834b991f5670f93f1e419e3892461  sim/ppc/emul_netbsd.c
 7b33787dcf41c03863f43b596f3e4a50  sim/ppc/emul_netbsd.h
-6b419827e40f44ca84ae18d0b0268bbb  sim/ppc/emul_unix.c
+68b9f6a9fa48b1508a4710c943846ae1  sim/ppc/emul_unix.c
 3f59054ed73fc405d309edc3c0cd58c0  sim/ppc/emul_unix.h
 f347bc8042610a760f25878b9ff4f61d  sim/ppc/events.c
 6cbdba37de3215094841c9436c4a706a  sim/ppc/events.h
@@ -5766,7 +6104,7 @@ ec00d27d9b5b0ee84e478874c7952855  sim/ppc/os_emul.h
 4881b6af302a6218c9793d63659351da  sim/ppc/ppc-instructions
 823ef5c76d31eb8708d4cb31348d9fc1  sim/ppc/ppc-spr-table
 7ef1469cfb0809ffbafba1a6f43cc98b  sim/ppc/ppc.mt
-ca3627ed0bb2f6c4eab74d08e91f74bf  sim/ppc/psim.c
+d0afca93979f43251741bca018926df5  sim/ppc/psim.c
 89a16bfcde26a12178cd435c25221a9c  sim/ppc/psim.h
 054d66ec90385dd4922ce49bf1408019  sim/ppc/psim.texinfo
 edc5e08e83b415d070176ec878fc1b10  sim/ppc/registers.c
@@ -5776,7 +6114,7 @@ b4fd27207dfbdd0fa5586a006a50b670  sim/ppc/sim-endian.c
 36e42da97cca42a96b3fc8208163c6a2  sim/ppc/sim-endian.h
 48c6b8643d82c832a08fc5aad6c182c3  sim/ppc/sim-main.h
 bca15c21e526c323781775dc194a0216  sim/ppc/sim_callbacks.h
-3626ab0925c7fbd12a988cae0fb98b01  sim/ppc/sim_calls.c
+0a3b719ec81d9bffc4ac9ae825bf120d  sim/ppc/sim_calls.c
 ee98eaaf8d7ed65d3addcdeb392d9a3c  sim/ppc/std-config.h
 7c82fdf54eee8023e24b19f93bfbda3e  sim/ppc/table.c
 393b81b772e44da580c2183af38e50c5  sim/ppc/table.h
@@ -5786,14 +6124,15 @@ dc8443177e1872f435e5bb5e8744cc5d  sim/ppc/vm.c
 f5e70f8a845ecb64afee001c9d36535c  sim/ppc/vm.h
 ed994e6b649eff89844e1e09fb217d02  sim/ppc/vm_n.h
 c317eb318225097de547a50b0f676fe6  sim/ppc/words.h
-fe2d1d7d2ac7fe6d93ad607b43e3c8b0  sim/rl78/ChangeLog
-ed833fe2f1825706c31253de84f9148f  sim/rl78/Makefile.in
-44fb591abc46aae9e9937c23ca9f161d  sim/rl78/aclocal.m4
-df279c83434ad279fe07969d9c5f30a2  sim/rl78/config.in
-82eb4b7ff66d611565e12d94cfa14d52  sim/rl78/configure
+cf833839a63589c3a047af6ec1dd3f14  sim/rl78/ChangeLog
+670e026ce56e1d462c308c70a429426f  sim/rl78/Makefile.in
+6aeab705c29ad37128d6a99779ab6ec1  sim/rl78/aclocal.m4
+4a703cfa2b8f067f60f69b5dd729b3f2  sim/rl78/config.in
+8441a8e37ea3cb39789adb17006f3eef  sim/rl78/configure
 94fe7c608bf775db9027312e683184d8  sim/rl78/configure.ac
 e5f72b4716f80b1b08cba6734bdf56bc  sim/rl78/cpu.c
 9640e4ea321d51f9d724912d3ab9d2ca  sim/rl78/cpu.h
+3c3bff4832df10ba858d70480a699211  sim/rl78/gdb-if.c
 6f97276b1757a2a150f03e1a03ecb0e6  sim/rl78/load.c
 24a7957373837430e31ddee8c390d259  sim/rl78/load.h
 96c19e68fdf3cf3138c1c0ca2dcad37e  sim/rl78/main.c
@@ -5802,22 +6141,22 @@ e5f72b4716f80b1b08cba6734bdf56bc  sim/rl78/cpu.c
 8f040060a0c97f920c8909b43fab17e2  sim/rl78/rl78.c
 743663935037b546ea8be836c81baa94  sim/rl78/trace.c
 9c22dfcc52b66d7c8abcc23bfeec3bb8  sim/rl78/trace.h
-5577b12c40751ba612fe43092680a01a  sim/rx/ChangeLog
+4c714ddcaf7c62e9d3102898cde6ffe0  sim/rx/ChangeLog
 dd327aaf08241ff39611c4aa58ac5c5f  sim/rx/Makefile.in
 c1b2c0b2ffef1ba72a8a6e24677c8653  sim/rx/README.txt
-44fb591abc46aae9e9937c23ca9f161d  sim/rx/aclocal.m4
-df279c83434ad279fe07969d9c5f30a2  sim/rx/config.in
-78ec8373e9a843b8080d72383ed85768  sim/rx/configure
-cac96b4f6a2e036d6ebc8ad287cea4b4  sim/rx/configure.ac
+6aeab705c29ad37128d6a99779ab6ec1  sim/rx/aclocal.m4
+473c3a4e18ce501a6e189cb6a69eae7f  sim/rx/config.in
+4001ba113852dff132aa68ba92a56bf0  sim/rx/configure
+93ca250a9d23cf89096fe4e9f19bfae0  sim/rx/configure.ac
 fc648179a00387e86e980fc329794992  sim/rx/cpu.h
 519ffe98dd2b0057d41d416a1e5d17fa  sim/rx/err.c
 11af0c7894e60a5cdbc037be6c2ba761  sim/rx/err.h
 9372e7cfc54823f8e54f0d8dd131e4cb  sim/rx/fpu.c
 7590f244fb448f3951a1d92a28adeb84  sim/rx/fpu.h
-7839f429c8c7ffa75e4da432689adf76  sim/rx/gdb-if.c
-3d40582ca85bb9bf424cba4b8d856408  sim/rx/load.c
-560feeffdc6d791b016e80e8abc4bc2f  sim/rx/load.h
-560ab9a69adbf5e3318edeee93519c76  sim/rx/main.c
+52c080d7d52d39f756a882a8c31a09eb  sim/rx/gdb-if.c
+0f681a4a3af6086ce6408c9e3555a01c  sim/rx/load.c
+15431704af871d138af98adcdf8463c3  sim/rx/load.h
+a6cfe5550208031c14395858a4c6b089  sim/rx/main.c
 f254e825ac1277ab7408a19522e42b28  sim/rx/mem.c
 e886161d569f632d15661edc36f2a66b  sim/rx/mem.h
 1c4baef27c7502f638df5998233f5ab1  sim/rx/misc.c
@@ -5825,27 +6164,27 @@ e886161d569f632d15661edc36f2a66b  sim/rx/mem.h
 8dcf62cedee01ec0f758b197e18469fc  sim/rx/reg.c
 f97a5f2897848faafd870d70c3757fe6  sim/rx/rx.c
 24e2f861da06951620983b5a9ca6efe2  sim/rx/syscall.h
-896f33614b6169fb2512665de42fee90  sim/rx/syscalls.c
-1cbcda6464efb83d9b15dc5dd41b1e7a  sim/rx/syscalls.h
+4814fcf7d984e994838bac97ecf6a7db  sim/rx/syscalls.c
+2707179d626d322fe4db10a7037b37eb  sim/rx/syscalls.h
 9dd889a728e3163b2ba212afecf0d9c4  sim/rx/trace.c
 33946eae3ece8d2bedab1bc8454a9882  sim/rx/trace.h
-de8beba93aee9569b7ee62d2e0fd0299  sim/sh/ChangeLog
+ee3677768b8e42d5545d519192a9698b  sim/sh/ChangeLog
 c4057e7630257507e766fef2a0a193c6  sim/sh/Makefile.in
-44fb591abc46aae9e9937c23ca9f161d  sim/sh/aclocal.m4
-04c2bd556b859d13011f77d620f1b6ba  sim/sh/config.in
-0ebebca683683a2c1789bb66f8cafd19  sim/sh/configure
+6aeab705c29ad37128d6a99779ab6ec1  sim/sh/aclocal.m4
+f53321324a92d228d616fb592b68690d  sim/sh/config.in
+8fc665e882926583a87539ff58cac362  sim/sh/configure
 10e2d243d24d49e6536a568de1f67bc8  sim/sh/configure.ac
 906094942d44b3938dca210bdf91daf5  sim/sh/gencode.c
-114f573c0275a8a12f431d9b9f7778df  sim/sh/interp.c
+5c77223c38d6396aaecdc2bb3d1c42a0  sim/sh/interp.c
 485762a39054bcf5bf3a3ee2a4de586f  sim/sh/syscall.h
 d0f4fcd32d377647d675b8d3ef85db09  sim/sh/tconfig.in
-1ca250986a441d2eb548a16d89759bfc  sim/sh64/ChangeLog
+21884d68d988b51ff588cdd1c3e296c3  sim/sh64/ChangeLog
 7f2bc015014d57239f942b66196c3ecf  sim/sh64/Makefile.in
-44fb591abc46aae9e9937c23ca9f161d  sim/sh64/aclocal.m4
+6aeab705c29ad37128d6a99779ab6ec1  sim/sh64/aclocal.m4
 521ab78b8cf85d97df0e84f02c639740  sim/sh64/arch.c
 46ff500ea0f10018a5b3852671d39938  sim/sh64/arch.h
-b3ad6ae643f707c415ea64d5621d6bfd  sim/sh64/config.in
-840b24e788d18d3bc031b678056f44ab  sim/sh64/configure
+c0c6a50b13479a8edbb89380d4e7a1d9  sim/sh64/config.in
+5499254f379a04ea98a3025f6ac8ab8e  sim/sh64/configure
 be47c2fd724e4c616686a6a75cdcd034  sim/sh64/configure.ac
 a3a1d6ecfa5a9f2994f0c8cf01eed3d7  sim/sh64/cpu.c
 de780587f51fd2092122fad5202ef06e  sim/sh64/cpu.h
@@ -5871,12 +6210,13 @@ faccfe00565ee251af26c107c4b1adbc  sim/sh64/sh-desc.c
 aa9cd2a9c236d3b47e3291fdce441fff  sim/sh64/sh-opc.h
 d44ad4e106ace830108a1cfcb172634c  sim/sh64/sh64-sim.h
 60cc24a93b6dc51ab8db72f1abe41372  sim/sh64/sh64.c
-fc2243568a4ecf4ec530dcd3e60ce3d6  sim/sh64/sim-if.c
+f053243c6840836985a6f7829d5c7b36  sim/sh64/sim-if.c
 5b99599096dc654535fd4a12919319ca  sim/sh64/sim-main.h
 16ef05475d28f88f3cffe19f1743a5eb  sim/sh64/tconfig.in
-55cf2e255d9e8cd50d1ee66ce2efcbd1  sim/testsuite/ChangeLog
+c3159efacfaf9907b2cd1771fa08d97c  sim/testsuite/.gitignore
+7a9c40946f97c25c69350f292ffe60d1  sim/testsuite/ChangeLog
 19721daba2b0964d826d79fcc16cfa04  sim/testsuite/Makefile.in
-abdf111a22694f30eca4e86a306c6869  sim/testsuite/configure
+bb777f73d51ff89ea7ccc3f044bbe934  sim/testsuite/configure
 d24df2803b828fb585a79a6bb0568016  sim/testsuite/configure.ac
 8b1814b871166305ec8fc7a06cc9a84d  sim/testsuite/common/Make-common.in
 09db0759c17936e2d8cf6dea6eda8fb1  sim/testsuite/common/Makefile.in
@@ -5960,6 +6300,7 @@ d855cd1f7a63aa5913126e4c9cbbdca4  sim/testsuite/m32r-elf/hello.s
 9b1f502707bd9fe8c685dd1060cafb1d  sim/testsuite/mips64el-elf/Makefile.in
 36e51fd3fa445f63573cffef4da15282  sim/testsuite/mips64el-elf/configure
 aeb9f246be0c025b69dcf144b916ce33  sim/testsuite/mips64el-elf/configure.ac
+dbeef184873cfd3717299aa666021609  sim/testsuite/sim/arm/ChangeLog
 5477dc224f249d5d847bb14b5809df81  sim/testsuite/sim/arm/adc.cgs
 1c290ff406eb9de96060785ccfb36a33  sim/testsuite/sim/arm/add.cgs
 a35d3dd0d1cfca5cd666ab9d23676f5f  sim/testsuite/sim/arm/allinsn.exp
@@ -6142,7 +6483,7 @@ d5cdfc180a7d6a20c74063ade297679c  sim/testsuite/sim/bfin/10622.s
 32645fab003ee956b9b7d4c31636c5d9  sim/testsuite/sim/bfin/10799.s
 5ec8a64db6b00e60a7b1de82c2d6f62f  sim/testsuite/sim/bfin/11080.s
 7a821b1429672bfdbefe565e64c5a430  sim/testsuite/sim/bfin/7641.s
-44343a755d45d76b3fc86002ea771838  sim/testsuite/sim/bfin/ChangeLog
+b6b3e34c8dd4be4ba4ef7694555938e4  sim/testsuite/sim/bfin/ChangeLog
 516f48e069742b7f0b2ff3191a0ac453  sim/testsuite/sim/bfin/PN_generator.s
 4cbe899245aabaf314047e6bf4c8837b  sim/testsuite/sim/bfin/a0.s
 a3774f7d75d9d6145968bd38ae123bb9  sim/testsuite/sim/bfin/a0shift.S
@@ -6180,7 +6521,7 @@ c18325dfd3429b6ce26d5776879acf5d  sim/testsuite/sim/bfin/add_imm7.s
 b51f410dda785219d7eb3608d7cc2232  sim/testsuite/sim/bfin/addsub_flags.S
 acb21f37b3594ec532ca0c04399480da  sim/testsuite/sim/bfin/algnbug1.s
 29afc1fccf6b9388d4776c8c49f4504c  sim/testsuite/sim/bfin/algnbug2.s
-c5dac9c9027973e643e947cdaab675a7  sim/testsuite/sim/bfin/allinsn.exp
+6d75130bfde6bbdc97fa7da50009c2ad  sim/testsuite/sim/bfin/allinsn.exp
 90673b97a790eaa3f2c2ea162cc0a5cf  sim/testsuite/sim/bfin/argc.c
 f39fa630ebeff7bd621524ce8656920f  sim/testsuite/sim/bfin/ashift.s
 6cfa5b42892230220a48a16418b3c3d5  sim/testsuite/sim/bfin/ashift_flags.s
@@ -6361,9 +6702,9 @@ e08d72dc62d60e2c7fe9ce2cd0d9439b  sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_s.s
 30aa9272252e64359cc656b4a65dda30  sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_t.s
 c9a0e9341f21ddaaaf8069d7850d8d3c  sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_tu.s
 188540971af41b094e50388e253abbdd  sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_u.s
-d781a9af653dad1cf174c902564b5f8e  sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0.s
-64105064d0843ef3a23b6138222f7c73  sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0_iutsh.s
-d88a47abf0b69533c4a7837d49134fc4  sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0_m.s
+1c2f680be0856eca64957b27251ec528  sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0.s
+84af1902fa132a0e9aa33a511ed5e1db  sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0_iutsh.s
+bf90d7be3a839a151d3b980c5a568d81  sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0_m.s
 325e8de5d4d4df4b865840606dcec369  sim/testsuite/sim/bfin/c_dsp32mac_mix.s
 9ccb935d989a81b04d4ceab4e10f4413  sim/testsuite/sim/bfin/c_dsp32mac_pair_a0.s
 adb4a45e5b38761e203ab20e11fb974d  sim/testsuite/sim/bfin/c_dsp32mac_pair_a0_i.s
@@ -6451,10 +6792,10 @@ e08f027090f78de83b488cbee78372c9  sim/testsuite/sim/bfin/c_dsp32shift_signbits_r
 cce602f497a322243cde44b5b8609cd9  sim/testsuite/sim/bfin/c_dsp32shift_signbits_rh.s
 4b8146ec5b307272f328815952257457  sim/testsuite/sim/bfin/c_dsp32shift_signbits_rl.s
 aa10645e3c824974c092c7bc94faac0d  sim/testsuite/sim/bfin/c_dsp32shift_vmax.s
-5254761def4d5cf14ef9559cbb9e6cb0  sim/testsuite/sim/bfin/c_dsp32shift_vmaxvmax.s
+0ad8f9106ff263b61d76a0c7851b70f3  sim/testsuite/sim/bfin/c_dsp32shift_vmaxvmax.s
 958ad19045957e69b955aee37ce5b6c0  sim/testsuite/sim/bfin/c_dsp32shiftim_a0alr.s
 8a31d31b5465c4a06ca4e3d59d9aac64  sim/testsuite/sim/bfin/c_dsp32shiftim_af.s
-9f207ef5de5fbd7d801d1d7b12e0129d  sim/testsuite/sim/bfin/c_dsp32shiftim_af_s.s
+86090ee34a3fa27f1fb55d8e8d9aa8e9  sim/testsuite/sim/bfin/c_dsp32shiftim_af_s.s
 19b4f5b1ab5013d05fac7b0e0b646a62  sim/testsuite/sim/bfin/c_dsp32shiftim_ahalf_ln.s
 ef39a36b3b64f18de73a0f37e0ccb300  sim/testsuite/sim/bfin/c_dsp32shiftim_ahalf_ln_s.s
 f274a6ca7d830041c247c576c06de99a  sim/testsuite/sim/bfin/c_dsp32shiftim_ahalf_lp.s
@@ -6465,7 +6806,7 @@ fe76fdee471453bf806efcee9c5c02f8  sim/testsuite/sim/bfin/c_dsp32shiftim_ahalf_rn
 b88a160929b70861633dd13f81dd0e74  sim/testsuite/sim/bfin/c_dsp32shiftim_ahalf_rp_s.s
 38ee4ebc782b080bdca44a7ad104b367  sim/testsuite/sim/bfin/c_dsp32shiftim_ahh.s
 f826d86590c3e73ee7d923ba5f17365e  sim/testsuite/sim/bfin/c_dsp32shiftim_ahh_s.s
-8cebe950e4bf3b05c0bec66f9202ab32  sim/testsuite/sim/bfin/c_dsp32shiftim_amix.s
+9733e71fe621ab58e43e16d7f0ce6fdf  sim/testsuite/sim/bfin/c_dsp32shiftim_amix.s
 dfd2465416f06504f716df3fb82de552  sim/testsuite/sim/bfin/c_dsp32shiftim_lf.s
 9dc752cfdf40fd3b34af73066cb982e5  sim/testsuite/sim/bfin/c_dsp32shiftim_lhalf_ln.s
 72a0c0a8490db86af44875827d7cc77a  sim/testsuite/sim/bfin/c_dsp32shiftim_lhalf_lp.s
@@ -6725,7 +7066,7 @@ ffdcea84476eb75625dcc1993c2e3c98  sim/testsuite/sim/bfin/edn_snafu.s
 711a16fc84ffe0a266c85a34a1230914  sim/testsuite/sim/bfin/eu_dsp32mac_s.s
 b7de88655a515a59593b40fa9e98054c  sim/testsuite/sim/bfin/events.s
 7c79d08dcbe4826dbd86bffc27116b69  sim/testsuite/sim/bfin/f221.s
-f37cbb687411251b3bb3298fb32edb4d  sim/testsuite/sim/bfin/fact.s
+2ea489b4cb1b207f1081fbea5017ddb4  sim/testsuite/sim/bfin/fact.s
 ec3ebf4777088920b90901340effa079  sim/testsuite/sim/bfin/fir.s
 777284035c8b07cb4482758e05f061fc  sim/testsuite/sim/bfin/fsm.s
 471ed97f64fa7fd9d05e55bf9255d678  sim/testsuite/sim/bfin/greg2.s
@@ -6837,12 +7178,18 @@ ceca2bed9df225e9fa884a457775800f  sim/testsuite/sim/bfin/random_0008.S
 dc280850768a497ef970f73a05ff8419  sim/testsuite/sim/bfin/random_0011.S
 5f2f31aaf7ddcce2d121e9f6a041268d  sim/testsuite/sim/bfin/random_0012.S
 c657ad4c186b6224e353864dafbbb4fe  sim/testsuite/sim/bfin/random_0013.S
+0d3dfdefad6fbcd95af51959b009736d  sim/testsuite/sim/bfin/random_0014.S
+90f8ad210fc240758e6734d2e492c803  sim/testsuite/sim/bfin/random_0015.S
+905359e217984f979eeadbe20d456226  sim/testsuite/sim/bfin/random_0016.S
+e712aa82e9762dad4d50ed13be9d8916  sim/testsuite/sim/bfin/random_0017.S
+7009963e29a84ae3a3e971baafa44fd4  sim/testsuite/sim/bfin/random_0018.S
 06db600415d9d6672602063b7e23e47c  sim/testsuite/sim/bfin/random_0019.S
 fcdcb712779b367c8cc3364878d6feb3  sim/testsuite/sim/bfin/random_0020.S
 b66136e773f49004230589eb30a8a457  sim/testsuite/sim/bfin/random_0021.S
 555d43b2af6912a9113f06247e6aed40  sim/testsuite/sim/bfin/random_0022.S
 902c615bf0a946c928824d4fd3c3bb4d  sim/testsuite/sim/bfin/random_0023.S
 0f7d4b5ea357c0150dabca21177b4085  sim/testsuite/sim/bfin/random_0024.S
+f3a06cadc1c18f60e13782fce6ddb241  sim/testsuite/sim/bfin/random_0025.S
 e3870c9fecda7cf9e76042bfa82638ff  sim/testsuite/sim/bfin/random_0026.S
 803509c8c316b6803434416a4387b8c3  sim/testsuite/sim/bfin/random_0027.S
 b13ea0d7e5e574ce70563cf75607904f  sim/testsuite/sim/bfin/random_0028.S
@@ -6853,6 +7200,8 @@ c65c1dfe2f3640b01035e17a8d1faa1d  sim/testsuite/sim/bfin/random_0032.S
 81b3ba095218dfad42fa906627155f38  sim/testsuite/sim/bfin/random_0033.S
 5b9727fb9b75bc8fdb919715a859e381  sim/testsuite/sim/bfin/random_0034.S
 04fdaa0d8a35b9b81c9fe27c41ae33aa  sim/testsuite/sim/bfin/random_0035.S
+e5b207681d3e6bf5142bf642322e06dc  sim/testsuite/sim/bfin/random_0036.S
+057ccb2e2c4511efec2ab3ca4e6953a9  sim/testsuite/sim/bfin/random_0037.S
 01e629458dcdd7e08ba5e63a1f3cfca6  sim/testsuite/sim/bfin/run-tests.sh
 208b72a075a321f8e8667de5ee0387f8  sim/testsuite/sim/bfin/s0.s
 4fd07b28d259adebc742a51ce7336e56  sim/testsuite/sim/bfin/s1.s
@@ -6878,9 +7227,13 @@ ce16c8dc5618340ff79b5dd11ded0040  sim/testsuite/sim/bfin/s7.s
 b8df1721881549647d38a8e0f038f5ee  sim/testsuite/sim/bfin/s8.s
 8ad9f6f0f793abb42eabeafb47f543cd  sim/testsuite/sim/bfin/s9.s
 fa94045af9a8b611ac508d0288d5c842  sim/testsuite/sim/bfin/saatest.s
-b9523761e2e539f8fed35eccd8a6d3c4  sim/testsuite/sim/bfin/se_all16bitopcodes.S
-0fc6c012ec70e18cacacc0217d4a646a  sim/testsuite/sim/bfin/se_all32bitopcodes.S
+b93a919db2b04c1e0d9e925b7fe59142  sim/testsuite/sim/bfin/se_all16bitopcodes.S
+33cf03bdc00965275c70e36d5d18be3f  sim/testsuite/sim/bfin/se_all32bitopcodes.S
 e159310a1ee9029a180827603c0f9221  sim/testsuite/sim/bfin/se_all32bitopcodes.lds
+2b4a49438847727f0608f760789f6146  sim/testsuite/sim/bfin/se_all64bitg0opcodes.S
+6a7bca360b713f72787e3277285ca337  sim/testsuite/sim/bfin/se_all64bitg1opcodes.S
+af104a052ade9d20d83c99d7f6e38383  sim/testsuite/sim/bfin/se_all64bitg2opcodes.S
+b3b5c63ba1155641b1923186a9d9f17d  sim/testsuite/sim/bfin/se_allopcodes.h
 67329277f88dfe86a1ba8f33000b6e2b  sim/testsuite/sim/bfin/se_brtarget_stall.S
 84673e70c29a76ffd74b8532d0c24afd  sim/testsuite/sim/bfin/se_bug_ui.S
 103c5d4573562eb707d0f224bddb079f  sim/testsuite/sim/bfin/se_bug_ui2.S
@@ -6903,6 +7256,7 @@ a1c11b6866b46807fda894f1720f91cb  sim/testsuite/sim/bfin/se_loop_kill.S
 86275529be3ea8284b411b5fdaf1ed7e  sim/testsuite/sim/bfin/se_loop_lr.S
 384eb4f808cafbd9d923abefbb61efb0  sim/testsuite/sim/bfin/se_loop_mv2lb_stall.S
 7231e0d400de88be56af046f605e1d01  sim/testsuite/sim/bfin/se_loop_mv2lc.S
+c5b263008c222c94779326bb6ed293db  sim/testsuite/sim/bfin/sign.s
 2d02f1f1b8815fb89e351f4e40136e7b  sim/testsuite/sim/bfin/se_loop_mv2lc_stall.S
 dc7132cda4cad096d26f1d56feaee2c1  sim/testsuite/sim/bfin/se_loop_mv2lt_stall.S
 2aa8a19946018e214cd1564e75f421fb  sim/testsuite/sim/bfin/se_loop_nest_ppm.S
@@ -6929,7 +7283,6 @@ b09590158cb4ba15ec32ecb44a251205  sim/testsuite/sim/bfin/se_undefinedinstruction
 f7c0c137bdbe3b5206820590db0f69a7  sim/testsuite/sim/bfin/se_undefinedinstruction4.S
 0f2b4133feb80539da731f1ff18154aa  sim/testsuite/sim/bfin/se_usermode_protviol.S
 72341c4026360cabf2d1d012fddb0738  sim/testsuite/sim/bfin/seqstat.s
-c5b263008c222c94779326bb6ed293db  sim/testsuite/sim/bfin/sign.s
 4758444e9e2c1365d5f9280e48aa3685  sim/testsuite/sim/bfin/simple0.s
 64478ad965c272969a99a2e1c551cf96  sim/testsuite/sim/bfin/sri.s
 9febdf1b81f79e26ff69db6936429036  sim/testsuite/sim/bfin/stk.s
@@ -7096,6 +7449,7 @@ b066047a28cc74aecec0251e255c36f0  sim/testsuite/sim/cr16/uread32.ms
 d6b2f7815fe26f69215d43464c590a73  sim/testsuite/sim/cr16/xorb.cgs
 bdd1ffa1a75ef8b2cf35c172d7598fcc  sim/testsuite/sim/cr16/xord.cgs
 44441592132a1541d22ae406a3f70379  sim/testsuite/sim/cr16/xorw.cgs
+343fd6f5dac62f3201fd8ddad7473df5  sim/testsuite/sim/cris/ChangeLog
 01748fb2e18517d90562bb0e840828da  sim/testsuite/sim/cris/asm/abs.ms
 a909c3f9eca7ac8afed8e09345f10da2  sim/testsuite/sim/cris/asm/addc.ms
 745fe5dbcb1bd5a9cf09833d2c60720d  sim/testsuite/sim/cris/asm/addcpc.ms
@@ -7109,7 +7463,7 @@ d1a8f7bf8185d66d74bcb7813e215796  sim/testsuite/sim/cris/asm/addm.ms
 eaa47e885647f776382ab73a6f5961ec  sim/testsuite/sim/cris/asm/addom.ms
 b4c3d4cf958efce78de12dbe055158b1  sim/testsuite/sim/cris/asm/addoq.ms
 6accf667f81ed8bfb8c56f18e8e844c9  sim/testsuite/sim/cris/asm/addq.ms
-6817aaa89fa3d0012a8d28db17c3e311  sim/testsuite/sim/cris/asm/addqpc.ms
+9b1a656bf4b326af7b3a1ea20a2c4189  sim/testsuite/sim/cris/asm/addqpc.ms
 e1164adb4965589fb668a12b9cabad32  sim/testsuite/sim/cris/asm/addr.ms
 1ee7b9da11c1883f071654c33c6f4e3b  sim/testsuite/sim/cris/asm/addswpc.ms
 0e4cdcc3d930dbe4bb1960224de30c37  sim/testsuite/sim/cris/asm/addxc.ms
@@ -7135,7 +7489,7 @@ de59b44165a54822f1e186794fe2ba46  sim/testsuite/sim/cris/asm/bdapm.ms
 272797f68936986d5f91637d3773b3ca  sim/testsuite/sim/cris/asm/biap.ms
 655db8f5621d9a019c169c33a538f5b6  sim/testsuite/sim/cris/asm/boundc.ms
 72b76cf328e602ac59d0eb6d3828db10  sim/testsuite/sim/cris/asm/boundm.ms
-3bf811af64069fafddd0997ff8fbca50  sim/testsuite/sim/cris/asm/boundmv32.ms
+c243c3ccba34415cd7be10730bf8f849  sim/testsuite/sim/cris/asm/boundmv32.ms
 c0d5a8770803259746508dc445dd8854  sim/testsuite/sim/cris/asm/boundr.ms
 2242370394be8c61d84f559201c21c38  sim/testsuite/sim/cris/asm/break.ms
 33c03c3be0ae8e449a15c3c9f595fe07  sim/testsuite/sim/cris/asm/btst.ms
@@ -7153,20 +7507,20 @@ a9438c1d50113d9dd4cd1a1da3878fc4  sim/testsuite/sim/cris/asm/cmpxm.ms
 5da23c5c235f9234e2f92203712100c4  sim/testsuite/sim/cris/asm/dflags.ms
 3fa72767063631d49bf4feaa0f4f6639  sim/testsuite/sim/cris/asm/dip.ms
 5b1a83a07ae1f436fae2c9afc9e32e0a  sim/testsuite/sim/cris/asm/dstep.ms
-6de4abd05e77fc1ff5a6532b86ee877f  sim/testsuite/sim/cris/asm/fidxd.ms
-c32801173ab04d7c48810448ac9ac41d  sim/testsuite/sim/cris/asm/fidxi.ms
-42b8ad76ab83648bc21de617564e2f41  sim/testsuite/sim/cris/asm/ftagd.ms
-5e016def3b1f2378d046da635d23ed30  sim/testsuite/sim/cris/asm/ftagi.ms
-e6d17a5c04658ee4296a5564eeb0bda1  sim/testsuite/sim/cris/asm/halt.ms
+37899e7414d05fdcbf1d760c84613019  sim/testsuite/sim/cris/asm/fidxd.ms
+cc72dfe579e0e04d8088491bd81512e1  sim/testsuite/sim/cris/asm/fidxi.ms
+2cc26138923126bad1f3c0411249801b  sim/testsuite/sim/cris/asm/ftagd.ms
+9549eb00a2575e64da41069b45d66b26  sim/testsuite/sim/cris/asm/ftagi.ms
+57faa30b3f920ee188ce72d0453daee9  sim/testsuite/sim/cris/asm/halt.ms
 b216800662427ef7d209ef094910e8bc  sim/testsuite/sim/cris/asm/io1.ms
 750db2caea6a5174fce9f0e83d686cbb  sim/testsuite/sim/cris/asm/io2.ms
 1d44f5e46380b9ef890396e82e843e8b  sim/testsuite/sim/cris/asm/io3.ms
 074dc6598e23e28f78546cee905c554b  sim/testsuite/sim/cris/asm/io4.ms
 5fdad03a8aa07112fd066b9c8feff6f3  sim/testsuite/sim/cris/asm/io5.ms
-47671131454820ec2fcc7e91587ef745  sim/testsuite/sim/cris/asm/io6.ms
-6e5ae74837dbabc6ea0ba4b2126a6980  sim/testsuite/sim/cris/asm/io7.ms
-da80d870be0a30685884c47a9fde8040  sim/testsuite/sim/cris/asm/io8.ms
-5ff83437c8ed81814c917502031bd4e0  sim/testsuite/sim/cris/asm/io9.ms
+2f3c1c7757603ece9b7598297d95260b  sim/testsuite/sim/cris/asm/io6.ms
+14b8d0c38494b61aab6cf1712bf36c59  sim/testsuite/sim/cris/asm/io7.ms
+a25d5568923a8a2d7a8a81f5bd557429  sim/testsuite/sim/cris/asm/io8.ms
+2a1f9ceb60a9708ddeb09a021c645189  sim/testsuite/sim/cris/asm/io9.ms
 af31a5dab88b669267a99dfef2f68de1  sim/testsuite/sim/cris/asm/jsr.ms
 cac8a4df22fecf18b6f4a8a8343dc311  sim/testsuite/sim/cris/asm/jsrmv10.ms
 36af380c716d4cd34eca6173940a89cd  sim/testsuite/sim/cris/asm/jumpmp.ms
@@ -7177,56 +7531,56 @@ a3f7925f637528a6ed229eefe49fc69e  sim/testsuite/sim/cris/asm/lsr.ms
 347b1a9e1c63a246cfcd0334e0b2011b  sim/testsuite/sim/cris/asm/lz.ms
 b7870ec565bcc1c4e6a59cc359e85330  sim/testsuite/sim/cris/asm/mcp.ms
 0027c92c821b64aa99e62a63306c59c4  sim/testsuite/sim/cris/asm/movdelsr1.ms
-7ee0c813a6c857f1e2790f75518d6b0b  sim/testsuite/sim/cris/asm/movecpc.ms
+84855c457ddac74d211a8e33ba4e5727  sim/testsuite/sim/cris/asm/movecpc.ms
 4a4c657a9d8be8e6567a4b26be9c0b26  sim/testsuite/sim/cris/asm/movecr.ms
 f618263e1a5fe35414d390c5e698da43  sim/testsuite/sim/cris/asm/movecrt10.ms
 152588b5fbb59aab4a789c32082baecd  sim/testsuite/sim/cris/asm/movecrt32.ms
 565043672daf4f7395eb4efe7c2dc629  sim/testsuite/sim/cris/asm/movect10.ms
 8265c3e5f0cec4ddb884b9740689ce56  sim/testsuite/sim/cris/asm/movei.ms
-f281c7e575f851b5dde60ee7b72fdde1  sim/testsuite/sim/cris/asm/movempc.ms
+5a3ae2ad101563b150633c2dba49672b  sim/testsuite/sim/cris/asm/movempc.ms
 dd2500a9c794d29818b9b89fbff9899e  sim/testsuite/sim/cris/asm/movemr.ms
 d972f2e08c829a759859a71e68b136dd  sim/testsuite/sim/cris/asm/movemrv10.ms
 abb5e89b50f55827e90d50ca04cbc2ed  sim/testsuite/sim/cris/asm/movemrv32.ms
-36508141125864999a9d627f47d85d7d  sim/testsuite/sim/cris/asm/movepcb.ms
-18ae624b3c2bbfa410dec0cdf25b49c6  sim/testsuite/sim/cris/asm/movepcd.ms
-5677bd81887a8a8d1cc44d6e0b2b8fe3  sim/testsuite/sim/cris/asm/movepcw.ms
+1cb26c9bde7c3993c284d50c6720f91a  sim/testsuite/sim/cris/asm/movepcb.ms
+1359413b7986cecedcd94ebe610283d9  sim/testsuite/sim/cris/asm/movepcd.ms
+c5edbb044bd6500ea76cca5aa555fa14  sim/testsuite/sim/cris/asm/movepcw.ms
 dff4cfde15294bc9a91d3c44534b8793  sim/testsuite/sim/cris/asm/moveq.ms
-99a55a2f2e0305cd73bc387ffe75c701  sim/testsuite/sim/cris/asm/moveqpc.ms
+d9cfd2ff023db1a091832b06aeafed46  sim/testsuite/sim/cris/asm/moveqpc.ms
 c538f86c2d76489f295e6173a1bb8fc2  sim/testsuite/sim/cris/asm/mover.ms
-25ca120518990aa077c0e1c6a7c789de  sim/testsuite/sim/cris/asm/moverbpc.ms
-25ca120518990aa077c0e1c6a7c789de  sim/testsuite/sim/cris/asm/moverdpc.ms
+4afa3ee0acec4592cb0ef423894cd516  sim/testsuite/sim/cris/asm/moverbpc.ms
+4afa3ee0acec4592cb0ef423894cd516  sim/testsuite/sim/cris/asm/moverdpc.ms
 5118adbb201cb7bf5a37bef5da1c11fa  sim/testsuite/sim/cris/asm/moverm.ms
-21ecb091b9d8a63ed2986ba3001bff42  sim/testsuite/sim/cris/asm/moverpcb.ms
+940a3f2ca5fd86fb564a932cf5861816  sim/testsuite/sim/cris/asm/moverpcb.ms
 b237b59f3cda9ba8783de6f3ec0dc9de  sim/testsuite/sim/cris/asm/moverpcd.ms
-4ac50ad29d540ee3522e4b61f5aa0b03  sim/testsuite/sim/cris/asm/moverpcw.ms
-25ca120518990aa077c0e1c6a7c789de  sim/testsuite/sim/cris/asm/moverwpc.ms
+dcd6ed83a1a72b9d24b49c47ed34f3b1  sim/testsuite/sim/cris/asm/moverpcw.ms
+4afa3ee0acec4592cb0ef423894cd516  sim/testsuite/sim/cris/asm/moverwpc.ms
 fe9ec586c2fc70714864986dcf435482  sim/testsuite/sim/cris/asm/movesmp.ms
 6b8b85b69157e96282007e991e0065b4  sim/testsuite/sim/cris/asm/movmp.ms
 2dee3459d1adb88a531c1d807414630a  sim/testsuite/sim/cris/asm/movmp8.ms
 760e24ee5627c4e168d8870342fecb10  sim/testsuite/sim/cris/asm/movpmv10.ms
 3b9da18c291a6594a818808ab4524114  sim/testsuite/sim/cris/asm/movpmv32.ms
-b9e9c6cde823013b27e9d342a7cabb48  sim/testsuite/sim/cris/asm/movppc.ms
+298dc950bcadd5e2cec44bf8f18e91cc  sim/testsuite/sim/cris/asm/movppc.ms
 c3c61f8d4c0515eeee975292dc0a718f  sim/testsuite/sim/cris/asm/movpr.ms
 461cec9d6dc84c3e170d3d48e567fca2  sim/testsuite/sim/cris/asm/movprv10.ms
 c715f5d22e83bf04003f9fc87087d65b  sim/testsuite/sim/cris/asm/movprv32.ms
-0e0c749b12b2842a5a162e7fae07263c  sim/testsuite/sim/cris/asm/movrss.ms
-df716e941d204c32f43af5effb0832d8  sim/testsuite/sim/cris/asm/movscpc.ms
+eb8d64a2df115f7886fbbe471a124360  sim/testsuite/sim/cris/asm/movrss.ms
+28e718a23838ab030070706b95e0dd52  sim/testsuite/sim/cris/asm/movscpc.ms
 785a6bb740608dac717c73e57591deaa  sim/testsuite/sim/cris/asm/movscr.ms
 c67e215c008a0948de2968a3ac09b3eb  sim/testsuite/sim/cris/asm/movsm.ms
-c336d6a5c7f95498870e5c8a8419adac  sim/testsuite/sim/cris/asm/movsmpc.ms
+c3a673b686630e75037fd83b792e0311  sim/testsuite/sim/cris/asm/movsmpc.ms
 ebdf7ba59efa1850437aa3f32a2d17c5  sim/testsuite/sim/cris/asm/movsr.ms
-6c6a4cc3065b3267b236626d6ac47da1  sim/testsuite/sim/cris/asm/movsrpc.ms
-0d623805dbce567108dbf01a0fc5e565  sim/testsuite/sim/cris/asm/movssr.ms
-09d55b9f243be642c3274a0b7e3de327  sim/testsuite/sim/cris/asm/movucpc.ms
+d15391935ca4c69dfa85d6c0f888fdeb  sim/testsuite/sim/cris/asm/movsrpc.ms
+3689ac7d53d2b21df32f33b086932b90  sim/testsuite/sim/cris/asm/movssr.ms
+fa784df29314879a4ca90fab8c371c96  sim/testsuite/sim/cris/asm/movucpc.ms
 213ed16674863ab8a94a648b4bacce9b  sim/testsuite/sim/cris/asm/movucr.ms
 b1fbda4cbc4148fcd1d52e10fac71369  sim/testsuite/sim/cris/asm/movum.ms
-f2882847ad3562b04049a44787285639  sim/testsuite/sim/cris/asm/movumpc.ms
+004bff78fcb41a45ef50dbf3a5c8af62  sim/testsuite/sim/cris/asm/movumpc.ms
 9dfa0a22cdc4310a491a61947e6ee18d  sim/testsuite/sim/cris/asm/movur.ms
-a3312cd2dfac8a338882fed18002d48e  sim/testsuite/sim/cris/asm/movurpc.ms
+8cc2f6a46bd1708bb4d93aa2e270c02a  sim/testsuite/sim/cris/asm/movurpc.ms
 7096f57332180f0f76e67be2df346d57  sim/testsuite/sim/cris/asm/mstep.ms
-967a768f7f4979c667a416d786211233  sim/testsuite/sim/cris/asm/msteppc1.ms
-6457b748159a9431e298113cf0d4d3ba  sim/testsuite/sim/cris/asm/msteppc2.ms
-7556676c19b21185c5d2d6a5c90f1935  sim/testsuite/sim/cris/asm/msteppc3.ms
+3afdb4c2ab99cf0d1f8fe3f418a7c207  sim/testsuite/sim/cris/asm/msteppc1.ms
+0903b2df7977da882963125e318843d0  sim/testsuite/sim/cris/asm/msteppc2.ms
+9f9bb997017dd3932826751b6dd361ea  sim/testsuite/sim/cris/asm/msteppc3.ms
 8c2eb325206f4b871171eed08ef84121  sim/testsuite/sim/cris/asm/mulv10.ms
 7f4b76ce2acc68884932a32ea46a3e7c  sim/testsuite/sim/cris/asm/mulv32.ms
 d8ee30b386546c5a4a5ef566f40403a3  sim/testsuite/sim/cris/asm/mulx.ms
@@ -7273,15 +7627,15 @@ da50619c2878e9a3e3bda17fbdafa435  sim/testsuite/sim/cris/asm/raw8.ms
 f8a0fd268e1e283ce98a93f08d462c7f  sim/testsuite/sim/cris/asm/raw9.ms
 726b5ab1d6dc49b8f877375c303005a4  sim/testsuite/sim/cris/asm/ret.ms
 3173b88b402a0711ac76f427a87b94b1  sim/testsuite/sim/cris/asm/rfe.ms
-f838f05b6522e477701884e02acaf2d1  sim/testsuite/sim/cris/asm/rfg.ms
+f8f9a2e029aab177abacbbf64522f6da  sim/testsuite/sim/cris/asm/rfg.ms
 63adf223c2a656abb48a0043eb8fdf86  sim/testsuite/sim/cris/asm/rfn.ms
-2e86c644ce91fc382ad08f3a562de572  sim/testsuite/sim/cris/asm/sbfs.ms
+78e9293d31b7461d137dc0ff8968f666  sim/testsuite/sim/cris/asm/sbfs.ms
 47d66dfd6c2b779644000a0d6c49eda8  sim/testsuite/sim/cris/asm/scc.ms
 30bc829c5021270dec933e8b5fc63d6a  sim/testsuite/sim/cris/asm/sfe.ms
 a33563a1f08346e7ea9ed16b4ca551af  sim/testsuite/sim/cris/asm/subc.ms
 1fc031c1da27d1c01da817c0c079ab0b  sim/testsuite/sim/cris/asm/subm.ms
 a81626c906efa0bcb8640d2d3dc2a691  sim/testsuite/sim/cris/asm/subq.ms
-1fdc774bc504c38cfa755a12367f5c2c  sim/testsuite/sim/cris/asm/subqpc.ms
+93cfdef83cb844b87a1bf93fdbc705d7  sim/testsuite/sim/cris/asm/subqpc.ms
 a3c92164147ee43f0b7866106074e567  sim/testsuite/sim/cris/asm/subr.ms
 e1a4ba67d2b7566edb96dbf069c4565e  sim/testsuite/sim/cris/asm/subxc.ms
 3c2d6762617530e584961f7630a34d58  sim/testsuite/sim/cris/asm/subxm.ms
@@ -7334,12 +7688,12 @@ ed07274fcfdf206083388a23353719bd  sim/testsuite/sim/cris/c/c.exp
 aa50b7df97a5974860b06781313fefb4  sim/testsuite/sim/cris/c/clone2.c
 b976c33ef4b4a551c903d495708c81c3  sim/testsuite/sim/cris/c/clone3.c
 b61cf3cca5bf399335c11308f3a8bc52  sim/testsuite/sim/cris/c/clone4.c
-ed06fc45ffdd02256f0837acf4cc2cd5  sim/testsuite/sim/cris/c/clone5.c
+3362bf08ac2ded34da69fabf7165f628  sim/testsuite/sim/cris/c/clone5.c
 23a35358f6b5397b05295030549fb462  sim/testsuite/sim/cris/c/clone6.c
 7f8e2cee9aa8074fd03e27007034b38f  sim/testsuite/sim/cris/c/ex1.c
 3855c8a67a930c364dfcdf7fb19e76ea  sim/testsuite/sim/cris/c/exitg1.c
 6309fd9674cb770b4802886a74d9ec04  sim/testsuite/sim/cris/c/exitg2.c
-62bbe8dd85a06ed358a98ef02ea0d3af  sim/testsuite/sim/cris/c/fcntl1.c
+16df4a6a8d008acb0db573bbca23bc7a  sim/testsuite/sim/cris/c/fcntl1.c
 86c2ceb180ebd532b644605f3da83107  sim/testsuite/sim/cris/c/fcntl2.c
 636048f3ba0304af174e7096f70abd17  sim/testsuite/sim/cris/c/fdopen1.c
 2e215ceef67a0ea53f763ecc91012fab  sim/testsuite/sim/cris/c/fdopen2.c
@@ -7355,8 +7709,8 @@ e7b41c99814c28b6604c647430917b4e  sim/testsuite/sim/cris/c/hellodyn.c
 2c7ce1214983ff7757a9a3a260675438  sim/testsuite/sim/cris/c/hellodyn2.c
 404abc34f36e44bf83f9259d6de84eac  sim/testsuite/sim/cris/c/hellodyn3.c
 2dc90db6492c7915acfd9d8c4c4b7fd3  sim/testsuite/sim/cris/c/kill1.c
-127bd507205856f25eee41bf62694d5b  sim/testsuite/sim/cris/c/kill2.c
-e04084e0ff81457675caa9fd22851711  sim/testsuite/sim/cris/c/kill3.c
+58491fc532f3932e426eaea1676f84e1  sim/testsuite/sim/cris/c/kill2.c
+f6119ae18fa0133c2c9818b18e01ebc6  sim/testsuite/sim/cris/c/kill3.c
 76252d805935152a8a395d166eb58367  sim/testsuite/sim/cris/c/mapbrk.c
 4a2a61b782a1069557cec29154217082  sim/testsuite/sim/cris/c/mmap1.c
 244728880f7a59ca8197581196366a8e  sim/testsuite/sim/cris/c/mmap2.c
@@ -7366,7 +7720,7 @@ c5ba8136a099953307e60d97437eeef2  sim/testsuite/sim/cris/c/mmap4.c
 e522a6433d65d3c0a300178b242b58dd  sim/testsuite/sim/cris/c/mmap6.c
 33ec0c3647b169206223f953d4bec850  sim/testsuite/sim/cris/c/mmap7.c
 06b60a56edef9d411652f374749adef1  sim/testsuite/sim/cris/c/mmap8.c
-bd5c39f48eecbeab01151501a46817b5  sim/testsuite/sim/cris/c/mprotect1.c
+2b56dd7467ff0cf466b91d8b0bf253b9  sim/testsuite/sim/cris/c/mprotect1.c
 b6dede668026bc1b3a88551a29d37998  sim/testsuite/sim/cris/c/mprotect2.c
 d2eebcf4b27d666f115002238a95e9cc  sim/testsuite/sim/cris/c/mremap.c
 76a475d64d7a621fe12d8107b35de203  sim/testsuite/sim/cris/c/openpf1.c
@@ -7378,7 +7732,7 @@ bed307959abae151f8251a2aa94f5fb3  sim/testsuite/sim/cris/c/pipe1.c
 46698027bdeb7ff534bcaae25cfed3ea  sim/testsuite/sim/cris/c/pipe2.c
 d240d97f980a2b5bf5e50f40cda75cb8  sim/testsuite/sim/cris/c/pipe3.c
 6652ae9c1f46ef0e790abe331a413cc2  sim/testsuite/sim/cris/c/pipe4.c
-b9526b425c4ac2ec2b08f90beb14868b  sim/testsuite/sim/cris/c/pipe5.c
+5c0166471388803f8a87b2e75f8cb540  sim/testsuite/sim/cris/c/pipe5.c
 a6d1101c58781140696015731a836765  sim/testsuite/sim/cris/c/pipe6.c
 6caec686cea8fd103570f5a11d22103f  sim/testsuite/sim/cris/c/pipe7.c
 67ec38ee427de40a93d1dab24bca2787  sim/testsuite/sim/cris/c/readlink1.c
@@ -7387,15 +7741,15 @@ dedbe73fd0801fd79e3926d56d5d3b69  sim/testsuite/sim/cris/c/readlink10.c
 b4406066f629d45fa7a492ad97bb35fb  sim/testsuite/sim/cris/c/readlink2.c
 f13f3eb93fb037c514f32acce267e780  sim/testsuite/sim/cris/c/readlink3.c
 cddeadd523c716f3e065b3db91c6598d  sim/testsuite/sim/cris/c/readlink4.c
-198abb3f5d618e7e284a4339db78b38c  sim/testsuite/sim/cris/c/readlink5.c
+3b8aa26ae0d326bc2f6c5e7b6b0d97df  sim/testsuite/sim/cris/c/readlink5.c
 bb344255c26b7ff66ba972f594a52ff9  sim/testsuite/sim/cris/c/readlink6.c
 1394f715c3c3f448462016b2114396e2  sim/testsuite/sim/cris/c/readlink7.c
 6caf43a36fee1de1cd658dd7b9df9f28  sim/testsuite/sim/cris/c/readlink8.c
 85d07e227f3da16227efd370d4bd98e8  sim/testsuite/sim/cris/c/readlink9.c
 1d9766a687655c334147a81547f4d35b  sim/testsuite/sim/cris/c/rename2.c
-b022b9f20cf29fd4ddd8ff817ba9b256  sim/testsuite/sim/cris/c/rtsigprocmask1.c
+649916de976212a31beb966c0d9ec21f  sim/testsuite/sim/cris/c/rtsigprocmask1.c
 871e76b97d097a594ac69b273cd490ab  sim/testsuite/sim/cris/c/rtsigprocmask2.c
-4849952b6a39baee774d91c13bf86bec  sim/testsuite/sim/cris/c/rtsigsuspend1.c
+c3292b96518cff172bb4d88953f1e85d  sim/testsuite/sim/cris/c/rtsigsuspend1.c
 1a3574caa2bc1a3e97b486486582a550  sim/testsuite/sim/cris/c/rtsigsuspend2.c
 1b12a53abdcc110b05a27f86ec82a144  sim/testsuite/sim/cris/c/sched1.c
 2451f3d36cbfbe0fcac765781a858f0e  sim/testsuite/sim/cris/c/sched2.c
@@ -7413,20 +7767,20 @@ e72c1ba5c42bc26baf3997a515d411dc  sim/testsuite/sim/cris/c/seek4.c
 88553eaf83703a59cbc8361643680b59  sim/testsuite/sim/cris/c/setrlimit1.c
 7a9259e3ec6e9661ccfc9fbf6c2dca1e  sim/testsuite/sim/cris/c/settls1.c
 bd926ac35b64d187f9466e95e69139be  sim/testsuite/sim/cris/c/sig1.c
-86279febd490f4c3df90f0b720149a09  sim/testsuite/sim/cris/c/sig10.c
-db54627436abb0ecfd7a5dc02f15d649  sim/testsuite/sim/cris/c/sig11.c
+565c7444b0cb03669e9e3490df139414  sim/testsuite/sim/cris/c/sig10.c
+6dcea03f790840f18ea8fd64127724c5  sim/testsuite/sim/cris/c/sig11.c
 e0ff04c2f66d5683806accf52c5a5c85  sim/testsuite/sim/cris/c/sig12.c
 aa0cc3e3a6590e21d1422c36e67d46f0  sim/testsuite/sim/cris/c/sig13.c
 2cc75950d1deb441cd82effb9a01ea94  sim/testsuite/sim/cris/c/sig2.c
-e99458c448500fd05e90d3a3ece06d9b  sim/testsuite/sim/cris/c/sig3.c
-349d8502d2d59845f68b8274721bb30f  sim/testsuite/sim/cris/c/sig4.c
-d3a8ade9091c19e8ae0f007ef249674c  sim/testsuite/sim/cris/c/sig5.c
-58be07d3625d5a3c39683cbc40e44445  sim/testsuite/sim/cris/c/sig6.c
-18d847c1e595ce572121ea443a15485e  sim/testsuite/sim/cris/c/sig7.c
-e0a416ad8d473e373c72594166064d96  sim/testsuite/sim/cris/c/sig8.c
+2d4c2f79ecdb8323bbe9cce4e20c5dd2  sim/testsuite/sim/cris/c/sig3.c
+93e4cbcae267860da4713824d7ab26fc  sim/testsuite/sim/cris/c/sig4.c
+b1ec63e4c4c81066c2c4ea8b7cba870e  sim/testsuite/sim/cris/c/sig5.c
+6991044fcf18c8e5d841e4bd7437ccea  sim/testsuite/sim/cris/c/sig6.c
+498cda002f91b397e6317146f285ca85  sim/testsuite/sim/cris/c/sig7.c
+bc53972854656ed53a133834033ebb44  sim/testsuite/sim/cris/c/sig8.c
 29c2f654808c90dbb79584a57bb693bc  sim/testsuite/sim/cris/c/sig9.c
-5aa665b959234a5539ad2545d6ed6780  sim/testsuite/sim/cris/c/sigreturn1.c
-cc2b1ab0259914e2ece1d15c0d4ddb7d  sim/testsuite/sim/cris/c/sigreturn2.c
+e691954a7ba7158e83626f4c975a85ed  sim/testsuite/sim/cris/c/sigreturn1.c
+f2df9aca537b3f4f4ad3e125a5e60778  sim/testsuite/sim/cris/c/sigreturn2.c
 3399987136f5aa5a07a144e772b4eb8a  sim/testsuite/sim/cris/c/sigreturn3.c
 96353e6f0e8a0a7e6f52e4d55e03e0db  sim/testsuite/sim/cris/c/sigreturn4.c
 bd5bc121e85df515345f34f12c3c294d  sim/testsuite/sim/cris/c/sjlj.c
@@ -7438,16 +7792,16 @@ c0e04f2b9fefcb80eb53e1550116f49f  sim/testsuite/sim/cris/c/stat1.c
 cb3173d4abb5e27ab24ff09d049646bd  sim/testsuite/sim/cris/c/stat5.c
 be489bb1f78e97b8b3e47474a4b07933  sim/testsuite/sim/cris/c/stat7.c
 10eb2f4b61f6908d3cb3a06f0a8f2def  sim/testsuite/sim/cris/c/stat8.c
-ae1f0bf3a9c19be2d22882e324b4d36a  sim/testsuite/sim/cris/c/syscall1.c
-382a4423fb5f541e5fa2810c7b7ee7f3  sim/testsuite/sim/cris/c/syscall2.c
-bfa88f17cfcde03ee37379f87a5fcd2b  sim/testsuite/sim/cris/c/syscall3.c
-54e90fb194ebee986dfa9915ef03e704  sim/testsuite/sim/cris/c/syscall4.c
+b3a611ff2914bafc74e5e03c6670ecd6  sim/testsuite/sim/cris/c/syscall1.c
+6f9d4d83964d160c93eed9432d507573  sim/testsuite/sim/cris/c/syscall2.c
+3c1d79499542dc743b4a23ee18c74fd0  sim/testsuite/sim/cris/c/syscall3.c
+60854fabe3d60fad9fedf210455bd03b  sim/testsuite/sim/cris/c/syscall4.c
 858217cb5c5ddb0c2cffbb7ed06e5fe7  sim/testsuite/sim/cris/c/syscall5.c
 4556ba96585517de2f2eb2d2c898f2a1  sim/testsuite/sim/cris/c/syscall6.c
 f1411b703fcd6badb90f276646d32f24  sim/testsuite/sim/cris/c/syscall7.c
 11192685d2e3b68b4da90f7cf68fe582  sim/testsuite/sim/cris/c/syscall8.c
 9cef688125999d097b8fab9239621f08  sim/testsuite/sim/cris/c/sysctl1.c
-59df9318c8e3d0aebdfdc8e1769252ea  sim/testsuite/sim/cris/c/sysctl2.c
+77d15d167d2e0c72fa21387375cd9dc0  sim/testsuite/sim/cris/c/sysctl2.c
 28acfc17ffb85e9ad08bf03b54364eea  sim/testsuite/sim/cris/c/sysctl3.c
 537da8824f256e117c4f392687279519  sim/testsuite/sim/cris/c/thread2.c
 48d76b9632e424203cafd7d2a10424fa  sim/testsuite/sim/cris/c/thread3.c
@@ -7483,6 +7837,7 @@ ef064c7b060493a8f7faf78eb0cae219  sim/testsuite/sim/cris/hw/rv-n-cris/trivial3.m
 f6d32608623f87d96663d265b179fb6f  sim/testsuite/sim/cris/hw/rv-n-cris/trivial4.r
 4b44b5e187cf10e9a1e097d6d0c785a1  sim/testsuite/sim/cris/hw/rv-n-cris/trivial5.ms
 a2452f548d0fe6d247d6a5b6b4d62721  sim/testsuite/sim/cris/hw/rv-n-cris/wd1.ms
+39e04e64c4d19c045c63ea3638083f1e  sim/testsuite/sim/fr30/ChangeLog
 503d6096668d67d46c257e7895d84d31  sim/testsuite/sim/fr30/add.cgs
 692e2c452c77ecbc6b74405fbfb8764f  sim/testsuite/sim/fr30/add.ms
 726473e3a587a7dc454557dc8b4c43db  sim/testsuite/sim/fr30/add2.cgs
@@ -7589,6 +7944,7 @@ f32638a3919a1385e630a7e29518e0ed  sim/testsuite/sim/fr30/subc.cgs
 da584f1cf2dcd0f85046a64bc5d9ba5e  sim/testsuite/sim/fr30/subn.cgs
 c174cd3fd5b8667dbc7b7741ec7449e3  sim/testsuite/sim/fr30/testutils.inc
 9d0e5f42019df498994f84948f9de403  sim/testsuite/sim/fr30/xchb.cgs
+4a47a184f95cf06b21e2cb960ec207ca  sim/testsuite/sim/frv/ChangeLog
 9f35e5c8475a3dce4d3d1f86192b757f  sim/testsuite/sim/frv/add.cgs
 24091903403ffb172b0b81cfbb3f331e  sim/testsuite/sim/frv/add.pcgs
 0328850bbb204540e39224902cea7437  sim/testsuite/sim/frv/addcc.cgs
@@ -8489,6 +8845,7 @@ e889ba6121bfc3b32c11372b6d4c9dcd  sim/testsuite/sim/h8300/testutils.inc
 307b4b54b70c077beb6b886ed1dadc9d  sim/testsuite/sim/h8300/xorb.s
 8ea8bfb6cddf05ef11ea7fb068e218e6  sim/testsuite/sim/h8300/xorl.s
 c2e57a11d5e455cef19248c2a0fb26b0  sim/testsuite/sim/h8300/xorw.s
+6b678d4461818ce7834941045cbfcd01  sim/testsuite/sim/m32r/ChangeLog
 16834904d188192c7fbb15f488c53087  sim/testsuite/sim/m32r/add.cgs
 e9adf1458ab377d5d90d1678d2292bd5  sim/testsuite/sim/m32r/add3.cgs
 8cf9213ee7ef813787645bc4c9e12727  sim/testsuite/sim/m32r/addi.cgs
@@ -9083,6 +9440,7 @@ ad28f968a1d98c2efb00d8fd9b4bc680  sim/testsuite/sim/sh64/media/testutils.inc
 30c62b03976f8ab78b8fac6daf4c2fdc  sim/testsuite/sim/sh64/media/xor.cgs
 9bbc7190782eedf13e1e86c251c73679  sim/testsuite/sim/sh64/media/xori.cgs
 66f3cbc997f2e5c7d7fdddec7391416a  sim/testsuite/sim/sh64/misc/fr-dr.s
+85e815de2abdd4a8e57f976a70d450f2  sim/testsuite/sim/v850/ChangeLog
 728bb384853e3de0cd850ba77dbb94f9  sim/testsuite/sim/v850/allinsns.exp
 cdd524c11367ecd095b2fb68cda24cee  sim/testsuite/sim/v850/bsh.cgs
 176f95658c3cdea072a56a08a40fa988  sim/testsuite/sim/v850/div.cgs
@@ -9099,18 +9457,18 @@ b4859f29935e5b217a201e3996ef936e  sim/testsuite/sim/v850/shl.cgs
 4e33f6ab389381ede55a4ca40ca14064  sim/testsuite/sim/v850/shr.cgs
 a7fde5e930bcca4fab473e7e12a4cd30  sim/testsuite/sim/v850/testutils.cgs
 c5cadbab939f31f2815550c2e1bc4ff4  sim/testsuite/sim/v850/testutils.inc
-ff761100ac591321e7f40db10b588c25  sim/v850/ChangeLog
+0765721f9759c68d8c14358f47d9c906  sim/v850/ChangeLog
 32b644c029dbcf80b02dcdd37541a9c6  sim/v850/Makefile.in
-44fb591abc46aae9e9937c23ca9f161d  sim/v850/aclocal.m4
-77ba48b2166205c0aa261dd505d2e7be  sim/v850/config.in
-f85c10264839996b742ba70e28b76971  sim/v850/configure
+6aeab705c29ad37128d6a99779ab6ec1  sim/v850/aclocal.m4
+6125e56b80df3d9bcf2c55aa14d1d992  sim/v850/config.in
+ab81b0f9b1c4812bce280b1a3b612433  sim/v850/configure
 43c8a2f424b12ff80b9a8a417b5ff951  sim/v850/configure.ac
 6118b8b34eefecbd4dd964daa92aabff  sim/v850/interp.c
-5c6de75cf871f9762d4a7c341dcd4afc  sim/v850/sim-main.h
-726bf5900bb78f7571110f26e7a74b8c  sim/v850/simops.c
-bee4a6a9ecb7e78bab13c75961a998e9  sim/v850/simops.h
-61a55a15e7ef4e104adb33aaa7f55b66  sim/v850/v850-dc
-ca25d8e9c3513185f71aeacb4580e9df  sim/v850/v850.igen
+c3b72f696ee5ef6a2792d09ba5b7d2a9  sim/v850/sim-main.h
+de0ae51c463671e0bc84a161d5024c7d  sim/v850/simops.c
+717b5fc3f75e6bde589e74d8ea4f1b22  sim/v850/simops.h
+fb9af7d38688866404535282973246ef  sim/v850/v850-dc
+d378e3060d83871ecf6c7c525dbb1241  sim/v850/v850.igen
 ec996f52079c4afb02cb86bdd2fd188f  sim/v850/v850_sim.h
 9bb037294df2451327cdaf73d040a851  src-release
 cf2baa0854f564a7785307e79f155efc  symlink-tree
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index ffe1002..ff95178 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,812 +1,450 @@
-2011-12-13  Alan Modra  <amodra at gmail.com>
-
-	* ppc-opc.c (ISA_V2): Define and use for relevant BO field tests.
-	(valid_bo_pre_v2, valid_bo_post_v2): New functions, extracted from..
-	(valid_bo): ..here.  When disassembling, accept either 'y' or 'at'
-	type encoding on second pass.
-	(powerpc_opcodes): Use ISA_V2 to enable branch insns rather than
-	POWER4.
-	* ppc-dis.c (print_insn_powerpc): Delete dialect_orig.  Instead
-	ignore deprecated on second pass.
-
-2011-12-08  Andrew Pinski  <apinski at cavium.com>
-
-	* mips-opc.c (mips_builtin_opcodes): Add "pause".
-
-2011-12-08  Andrew Pinski  <apinski at cavium.com>
-	    Adam Nemet  <anemet at caviumnetworks.com>
-
-	* mips-dis.c (mips_arch_choices): Add Octeon2.
-	For "octeon+", just include OcteonP for the insn.
-	* mips-opc.c (IOCT): Include Octeon2.
-	(IOCTP): Include Octeon2.
-	(IOCT2): New macro.
-	(mips_builtin_opcodes): Add "laa", "laad", "lac", "lacd", "lad",
-	"ladd", "lai", "laid", "las", "lasd", "law", "lawd".
-	Move "lbux", "ldx", "lhx", "lwx", and "lwux" up to where the standard
-	loads are, and add IOCT2 to them.
-	Add "lbx" and "lhux".
-	Add "qmac.00", "qmac.01", "qmac.02", "qmac.03", "qmacs.00",
-	"qmacs.01", "qmacs.01", "qmacs.02" and "qmacs.03".
-	Add "zcb" and "zcbt".
-
-2011-11-29  Andrew Pinski  <apinski at cavium.com>
-
-	* mips-dis.c (mips_arch_choices): Add Octeon+.
-	* mips-opc.c (IOCT): Include Octeon+.
-	(IOCTP): New macro.
-	(mips_builtin_opcodes): Add "saa" and "saad".
-
-2011-11-25  Pierre Muller  <muller at ics.u-strasbg.fr>
-
-	* mips-dis.c (print_insn_micromips): Rename local variable iprintf
-	to infprintf to avoid shadow warning.
-
-2011-11-25  Nick Clifton  <nickc at redhat.com>
-
-	* po/it.po: Updated Italian translation.
+2012-07-16  Michael Zolotukhin  <michael.v.zolotukhin at intel.com>
+
+	* i386-dis.c (PREFIX_0F38F6): New.
+	(prefix_table): Add adcx, adox instructions.
+	(three_byte_table): Use PREFIX_0F38F6.
+	(mod_table): Add rdseed instruction.
+	* i386-gen.c (cpu_flag_init): Add CpuADX, CpuRDSEED, CpuPRFCHW.
+	(cpu_flags): Likewise.
+	* i386-opc.h: Add CpuADX, CpuRDSEED, CpuPRFCHW.
+	(i386_cpu_flags): Add fields cpurdseed, cpuadx, cpuprfchw.
+	* i386-opc.tbl: Add instrcutions adcx, adox, rdseed. Extend
+	prefetchw.
+	* i386-tbl.h: Regenerate.
+	* i386-init.h: Likewise.
+
+2012-07-05  Thomas Schwinge  <thomas at codesourcery.com>
+
+	* mips-dis.c: Remove gratuitous newline.
+
+2012-07-02  Roland McGrath  <mcgrathr at google.com>
+
+	* i386-opc.tbl: Add RepPrefixOk to nop.
+	* i386-tbl.h: Regenerate.
+
+2012-06-28  Nick Clifton  <nickc at redhat.com>
+
+	* po/vi.po: Updated Vietnamese translation.
+
+2012-06-22  Roland McGrath  <mcgrathr at google.com>
+
+	* i386-opc.tbl: Add RepPrefixOk to ret.
+	* i386-tbl.h: Regenerate.
+
+	* i386-opc.h (RepPrefixOk): New enum constant.
+	(i386_opcode_modifier): New bitfield 'repprefixok'.
+	* i386-gen.c (opcode_modifiers): Add RepPrefixOk.
+	* i386-opc.tbl: Add RepPrefixOk to bsf, bsr, and to all
+	instructions that have IsString.
+	* i386-tbl.h: Regenerate.
+
+2012-06-11  Andreas Schwab  <schwab at linux-m68k.org>
+
+	* ppc-opc.c (lvsl, lvebx, isellt, icbt, ldepx, lwepx, lvsr, lvehx)
+	(iselgt, lvewx, iseleq, isel, dcbst, dcbstep, dcbfl, dcbf, lbepx)
+	(lvx, dcbfep, dcbtstls, stvebx, dcbtstlse, stdepx, stwepx, dcbtls)
+	(stvehx, dcbtlse, stvewx, stbepx, icblc, stvx, dcbtstt, dcbtst)
+	(dcbtst, dcbtstep, dcbtt, dcbt, dcbt, lhepx, eciwx, dcbtep)
+	(dcread, lxvdsx, lvxl, dcblc, sthepx, ecowx, dcbi, dcread, icbtls)
+	(stvxl, lxsdx, lfdepx, stxsdx, stfdepx, dcba, dcbal, lxvw4x)
+	(tlbivax, lfdpx, lxvd2x, tlbsrx., stxvw4x, tlbsx, tlbsx., stfdpx)
+	(stfqx, stxvd2x, icbi, icbiep, icread, dcbzep): Change RA to RA0.
+
+2012-05-19  Alan Modra  <amodra at gmail.com>
+
+	* ppc-dis.c: Don't include elf32-ppc.h, do include elf/ppc.h.
+	(get_powerpc_dialect): Detect VLE sections from ELF sh_flags.
+
+2012-05-18  Alan Modra  <amodra at gmail.com>
+
+	* ia64-opc.c: Remove #include "ansidecl.h".
+	* z8kgen.c: Include sysdep.h first.
+
+	* arc-dis.c: Include sysdep.h first, remove some redundant includes.
+	* bfin-dis.c: Likewise.
+	* i860-dis.c: Likewise.
+	* ia64-dis.c: Likewise.
+	* ia64-gen.c: Likewise.
+	* m68hc11-dis.c: Likewise.
+	* mmix-dis.c: Likewise.
+	* msp430-dis.c: Likewise.
+	* or32-dis.c: Likewise.
+	* rl78-dis.c: Likewise.
+	* rx-dis.c: Likewise.
+	* tic4x-dis.c: Likewise.
+	* tilegx-opc.c: Likewise.
+	* tilepro-opc.c: Likewise.
+	* rx-decode.c: Regenerate.
 
-2011-11-16  Maciej W. Rozycki  <macro at codesourcery.com>
+2012-05-17  James Lemke  <jwlemke at codesourcery.com>
 
-	* micromips-opc.c (micromips_opcodes): Use NODS rather than TRAP
-	for "alnv.ps".
+	* ppc-opc.c (powerpc_macros): Add entries for e_extlwi to e_clrlslwi.
 
-2011-11-02  Nick Clifton  <nickc at redhat.com>
+2012-05-17  James Lemke  <jwlemke at codesourcery.com>
 
-	* po/it.po: New Italian translation.
-	* configure.in (ALL_LINGUAS): Add it.
-	* configure: Regenerate.
-	* po/opcodes.pot: Regenerate.
+	* ppc-opc.c (extract_sprg): Use ALLOW8_SPRG to include VLE.
 
-2011-11-01  DJ Delorie  <dj at redhat.com>
+2012-05-17  Daniel Richard G.  <skunk at iskunk.org>
+	    Nick Clifton  <nickc at redhat.com>
 
-	* Makefile.am (TARGET_LIBOPCODES_CFILES): Add rl78-decode.c and
-	rl78-dis.c.
-	(MAINTAINERCLEANFILES): Add rl78-decode.c.
-	(rl78-decode.c): New rule, built from rl78-decode.opc and opc2c.
-	* Makefile.in: Regenerate.
-	* configure.in: Add bfd_rl78_arch case.
-	* configure: Regenerate.
-	* disassemble.c: Define ARCH_rl78.
-	(disassembler): Add ARCH_rl78 case.
-	* rl78-decode.c: New file.
-	* rl78-decode.opc: New file.
-	* rl78-dis.c: New file.
-
-2011-10-27  Peter Bergner  <bergner at vnet.ibm.com>
-
-	* ppc-opc.c (powerpc_opcodes) <drrndq, drrndq., dtstexq, dctqpq,
-	dctqpq., dctfixq, dctfixq., dxexq, dxexq., dtstsfq, dcffixq, dcffixq.,
-	diexq, diexq.>: Use FRT, FRA, FRB and FRBp repsectively on DFP quad
-	instructions.
-
-2011-10-26  Nick Clifton  <nickc at redhat.com>
-
-	PR binutils/13348
-	* i386-dis.c (print_insn): Fix testing of array subscript.
-
-2011-10-26  Joern Rennecke  <joern.rennecke at embecosm.com>
-
-	* disassemble.c (ARCH_epiphany): Move into alphasorted spot.
-	* epiphany-asm.c, epiphany-opc.h: Regenerate.
-
-2011-10-25  Joern Rennecke  <joern.rennecke at embecosm.com>
-
-	* Makefile.am (HFILES): Add epiphany-desc.h and epiphany-opc.h .
-	(TARGET_LIBOPCODES_CFILES): Add  epiphany-asm.c, epiphany-desc.c,
-	epiphany-dis.c, epiphany-ibld.c and epiphany-opc.c .
-	(CLEANFILES): Add stamp-epiphany.
-	(EPIPHANY_DEPS): Set.  Make CGEN-generated Epiphany files depend on it.
-	(stamp-epiphany): New rule.
-	* configure.in: Handle bfd_epiphany_arch.
-	* disassemble.c (ARCH_epiphany): Define.
-	(disassembler): Handle bfd_arch_epiphany.
-	* epiphany-asm.c: New file.
-	* epiphany-desc.c: New file.
-	* epiphany-desc.h: New file.
-	* epiphany-dis.c: New file.
-	* epiphany-ibld.c: New file.
-	* epiphany-opc.c: New file.
-	* epiphany-opc.h: New file.
-	* Makefile.in: Regenerate.
+	PR 14072
+	* configure.in: Add check that sysdep.h has been included before
+	any system header files.
 	* configure: Regenerate.
-	* po/POTFILES.in: Regenerate.
-	* po/opcodes.pot: Regenerate.
-
-2011-10-24  Julian Brown  <julian at codesourcery.com>
-
-	* m68k-opc.c (m68k_opcodes): Fix entries for ColdFire moveml.
-
-2011-10-21  Jan Glauber  <jang at linux.vnet.ibm.com>
-
-	* s390-opc.txt: Add CPUMF instructions.
-
-2011-10-18  Jie Zhang  <jie at codesourcery.com>
-	    Julian Brown  <julian at codesourcery.com>
-
-	* arm-dis.c (print_insn_arm): Explicitly specify rotation if needed.
-
-2011-10-10  Nick Clifton  <nickc at redhat.com>
-
-	* po/es.po: Updated Spanish translation.
-	* po/fi.po: Updated Finnish translation.
-
-2011-09-28  Jan Beulich  <jbeulich at suse.com>
-
-	* ppc-opc.c (insert_nbi, insert_rbx, FRAp, FRBp, FRSp, FRTp, NBI, RAX,
-	RBX): New.
-	(insert_bo, insert_boe): Reject bcctr with bit 2 in bo unset.
-	(powerpc_opcodes): Use RAX for second and RBXC for third operand of
-	lswx. Use NBI for third operand of lswi. Use FRTp for first operand of
-	lfdp and lfdpx. Use FRSp for first operand of stfdp and stfdpx, and
-	mark them as invalid on POWER7. Use FRTp, FRAp, and FRBp repsectively
-	on DFP quad instructions.
-
-2011-09-27  David S. Miller  <davem at davemloft.net>
-
-	* sparc-opc.c (sparc_opcodes): Fix random instruction to write
-	to a float instead of an integer register.
-
-2011-09-26  David S. Miller  <davem at davemloft.net>
-
-	* sparc-opc.c (sparc_opcodes): Add integer multiply-add
-	instructions.
-
-2011-09-21  David S. Miller  <davem at davemloft.net>
-
-	* sparc-opc.c (sparc_opcodes): Annotate table with HWCAP flag
-	bits.  Fix "fchksm16" mnemonic.
-
-2011-09-08  Mark Fortescue <mark at mtfhpc.demon.co.uk>
-
-	The changes below bring 'mov' and 'ticc' instructions into line
-	with the V8 SPARC Architecture Manual.
-	* sparc-opc.c (sparc_opcodes): Add entry for 'ticc imm + regrs1'.
-	* sparc-opc.c (sparc_opcodes): Add alias entries for
-	'mov regrs2,%asrX'; 'mov regrs2,%y'; 'mov regrs2,%prs';
-	'mov regrs2,%wim' and 'mov regrs2,%tbr'.
-	* sparc-opc.c (sparc_opcodes): Move/Change entries for
-	'mov imm,%asrX'; 'mov imm,%y'; 'mov imm,%prs'; 'mov imm,%wim'
-	and 'mov imm,%tbr'.
-	* sparc-opc.c (sparc_opcodes): Add wr alias entries to match above
-	mov aliases.
-
-	* sparc-opc.c (sparc_opcodes): Add entry for 'save simm13,regrs1,regrd'
-	This has been reported as being accepted by the Sun assmebler.
-
-2011-09-08  David S. Miller  <davem at davemloft.net>
-
-	* sparc-opc.c (pdistn): Destination is integer not float register.
-
-2011-09-07  Andreas Schwab  <schwab at linux-m68k.org>
-
-	PR gas/13145
-	* m68k-opc.c: Use "y" in moveml pattern for mcfisa_a.
-
-2011-08-26  Nick Clifton  <nickc at redhat.com>
-
-	* po/es.po: Updated Spanish translation.
-
-2011-08-22  Nick Clifton  <nickc at redhat.com>
-
-	* Makefile.am (CPUDIR): Redfine to point to top level cpu
-	directory.
-	(stamp-frv): Use CPUDIR.
-	(stamp-iq2000): Likewise.
-	(stamp-lm32): Likewise.
-	(stamp-m32c): Likewise.
-	(stamp-mt): Likewise.
-	(stamp-xc16x): Likewise.
-	* Makefile.in: Regenerate.
-
-2011-08-09  Chao-ying Fu  <fu at mips.com>
-	    Maciej W. Rozycki  <macro at codesourcery.com>
-
-	* mips-dis.c (mips_arch_choices): Enable MCU for "mips32r2"
-	and "mips64r2".
-	(print_insn_args, print_insn_micromips): Handle MCU.
-	* micromips-opc.c (MC): New macro.
-	(micromips_opcodes): Add "aclr", "aset" and "iret".
-	* mips-opc.c (MC): New macro.
-	(mips_builtin_opcodes): Add "aclr", "aset" and "iret".
-
-2011-08-09  Maciej W. Rozycki  <macro at codesourcery.com>
-
-	* micromips-opc.c (MOD_mb, MOD_mc, MOD_md): Remove macros.
-	(MOD_me, MOD_mf, MOD_mg, MOD_mhi, MOD_mj, MOD_ml): Likewise.
-	(MOD_mm, MOD_mn, MOD_mp, MOD_mq, MOD_sp): Likewise.
-	(WR_mb, RD_mc, RD_md, WR_md, RD_me, RD_mf, WR_mf): New macros.
-	(RD_mg, WR_mhi, RD_mj, WR_mj, RD_ml, RD_mmn): Likewise.
-	(RD_mp, WR_mp, RD_mq, RD_sp, WR_sp): Likewise.
-	(WR_s): Update macro.
-	(micromips_opcodes): Update register use flags of: "addiu",
-	"addiupc", "addiur1sp", "addiur2", "addius5", "addiusp", "addu",
-	"and", "andi", "beq", "beqz", "bne", "bnez", "di", "ei", "j",
-	"jalr", "jalrs", "jr", "jraddiusp", "jrc", "lbu", "lhu", "li",
-	"lui", "lw", "lwm", "mfhi", "mflo", "move", "movep", "not",
-	"nor", "or", "ori", "sb", "sh", "sll", "srl", "subu", "sw",
-	"swm" and "xor" instructions.
-
-2011-08-05  David S. Miller  <davem at davemloft.net>
-
-	* sparc-dis.c (v9a_ast_reg_names): Add "cps".
-	(X_RS3): New macro.
-	(print_insn_sparc): Handle '4', '5', and '(' format codes.
-	Accept %asr numbers below 28.
-	* sparc-opc.c (sparc_opcodes): Add entries for HPC and VIS3
-	instructions.
-
-2011-08-02  Quentin Neill  <quentin.neill at amd.com>
-
-	* i386-dis.c (xop_table): Remove spurious bextr insn.
+	* config.in: Regenerate.
+	* sysdep.h: Generate an error if included before config.h.
+	* alpha-opc.c: Include sysdep.h before any other header file.
+	* alpha-dis.c: Likewise.
+	* avr-dis.c: Likewise.
+	* cgen-opc.c: Likewise.
+	* cr16-dis.c: Likewise.
+	* cris-dis.c: Likewise.
+	* crx-dis.c: Likewise.
+	* d10v-dis.c: Likewise.
+	* d10v-opc.c: Likewise.
+	* d30v-dis.c: Likewise.
+	* d30v-opc.c: Likewise.
+	* h8500-dis.c: Likewise.
+	* i370-dis.c: Likewise.
+	* i370-opc.c: Likewise.
+	* m10200-dis.c: Likewise.
+	* m10300-dis.c: Likewise.
+	* micromips-opc.c: Likewise.
+	* mips-opc.c: Likewise.
+	* mips61-opc.c: Likewise.
+	* moxie-dis.c: Likewise.
+	* or32-opc.c: Likewise.
+	* pj-dis.c: Likewise.
+	* ppc-dis.c: Likewise.
+	* ppc-opc.c: Likewise.
+	* s390-dis.c: Likewise.
+	* sh-dis.c: Likewise.
+	* sh64-dis.c: Likewise.
+	* sparc-dis.c: Likewise.
+	* sparc-opc.c: Likewise.
+	* spu-dis.c: Likewise.
+	* tic30-dis.c: Likewise.
+	* tic54x-dis.c: Likewise.
+	* tic80-dis.c: Likewise.
+	* tic80-opc.c: Likewise.
+	* tilegx-dis.c: Likewise.
+	* tilepro-dis.c: Likewise.
+	* v850-dis.c: Likewise.
+	* v850-opc.c: Likewise.
+	* vax-dis.c: Likewise.
+	* w65-dis.c: Likewise.
+	* xgate-dis.c: Likewise.
+	* xtensa-dis.c: Likewise.
+	* rl78-decode.opc: Likewise.
+	* rl78-decode.c: Regenerate.
+	* rx-decode.opc: Likewise.
+	* rx-decode.c: Regenerate.
 
-2011-08-01  H.J. Lu  <hongjiu.lu at intel.com>
+2012-05-17  Alan Modra  <amodra at gmail.com>
 
-	PR ld/13048
-	* i386-dis.c (print_insn): Optimize info->mach check.
+	* ppc_dis.c: Don't include elf/ppc.h.
 
-2011-08-01  H.J. Lu  <hongjiu.lu at intel.com>
+2012-05-16  Meador Inge  <meadori at codesourcery.com>
 
-	PR gas/13046
-	* i386-opc.tbl: Add Disp32S to 64bit call.
-	* i386-tbl.h: Regenerated.
+	* arm-dis.c (arm_opcodes): Don't disassemble STMFD/LDMIA sp!, {reg}
+	to PUSH/POP {reg}.
 
-2011-07-24  Chao-ying Fu  <fu at mips.com>
-	    Maciej W. Rozycki  <macro at codesourcery.com>
+2012-05-15  James Murray <jsm at jsm-net.demon.co.uk>
+	    Stephane Carrez <stcarrez at nerim.fr>
 
-	* micromips-opc.c: New file.
-	* mips-dis.c (micromips_to_32_reg_b_map): New array.
-	(micromips_to_32_reg_c_map, micromips_to_32_reg_d_map): Likewise.
-	(micromips_to_32_reg_e_map, micromips_to_32_reg_f_map): Likewise.
-	(micromips_to_32_reg_g_map, micromips_to_32_reg_l_map): Likewise.
-	(micromips_to_32_reg_q_map): Likewise.
-	(micromips_imm_b_map, micromips_imm_c_map): Likewise.
-	(micromips_ase): New variable.
-	(is_micromips): New function.
-	(set_default_mips_dis_options): Handle microMIPS ASE.
-	(print_insn_micromips): New function.
-	(is_compressed_mode_p): Likewise.
-	(_print_insn_mips): Handle microMIPS instructions.
-	* Makefile.am (CFILES): Add micromips-opc.c.
-	* configure.in (bfd_mips_arch): Add micromips-opc.lo.
-	* Makefile.in: Regenerate.
+	* configure.in: Add S12X and XGATE co-processor support to m68hc11
+	target.
+	* disassemble.c: Likewise.
 	* configure: Regenerate.
+	* m68hc11-dis.c: Make objdump output more consistent, use hex
+	instead of decimal and use 0x prefix for hex.
+	* m68hc11-opc.c: Add S12X and XGATE opcodes.
 
-	* mips-dis.c (micromips_to_32_reg_h_map): New variable.
-	(micromips_to_32_reg_i_map): Likewise.
-	(micromips_to_32_reg_m_map): Likewise.
-	(micromips_to_32_reg_n_map): New macro.
-
-2011-07-24  Maciej W. Rozycki  <macro at codesourcery.com>
-
-	* mips-opc.c (NODS): New macro.
-	(TRAP): Adjust for the rename of INSN_TRAP to INSN_NO_DELAY_SLOT.
-	(DSP_VOLA): Likewise.
-	(mips_builtin_opcodes): Add NODS annotation to "deret" and
-	"eret". Replace INSN_SYNC with NODS throughout.  Use NODS in
-	place of TRAP for "wait", "waiti" and "yield".
-	* mips16-opc.c (NODS): New macro.
-	(TRAP): Adjust for the rename of INSN_TRAP to INSN_NO_DELAY_SLOT.
-	(mips16_opcodes):  Use NODS in place of TRAP for "jalrc", "jrc",
-	"restore" and "save".
-
-2011-07-22  H.J. Lu  <hongjiu.lu at intel.com>
-
-	* configure.in: Handle bfd_k1om_arch.
-	* configure: Regenerated.
-
-	* disassemble.c (disassembler): Handle bfd_k1om_arch.
-
-	* i386-dis.c (print_insn): Handle bfd_mach_k1om and
-	bfd_mach_k1om_intel_syntax.
-
-	* i386-gen.c (cpu_flag_init): Set CPU_UNKNOWN_FLAGS to
-	~(CpuL1OM|CpuK1OM).  Add CPU_K1OM_FLAGS.
-	(cpu_flags): Add CpuK1OM.
-
-	* i386-opc.h (CpuK1OM): New.
-	(i386_cpu_flags): Add cpuk1om.
-
-	* i386-init.h: Regenerated.
-	* i386-tbl.h: Likewise.
-
-2011-07-12  Nick Clifton  <nickc at redhat.com>
-
-	* arm-dis.c (print_insn_arm): Revert previous, undocumented,
-	accidental change.
-
-2011-07-01  Nick Clifton  <nickc at redhat.com>
-
-	PR binutils/12329
-	* avr-dis.c (avr_operand): Fix disassembly of ELPM, LPM and SPM
-	insns using post-increment addressing.
-
-2011-06-30  H.J. Lu  <hongjiu.lu at intel.com>
-
-	* i386-dis.c (vex_len_table): Update rorxS.
-
-2011-06-30  H.J. Lu  <hongjiu.lu at intel.com>
-
-	AVX Programming Reference (June, 2011)
-	* i386-dis.c (vex_len_table): Correct rorxS.
-
-	* i386-opc.tbl: Correct rorx.
-	* i386-tbl.h: Regenerated.
-
-2011-06-29  H.J. Lu  <hongjiu.lu at intel.com>
-
-	* tilegx-opc.c (find_opcode): Replace "index" with "i".
-	* tilepro-opc.c (find_opcode): Likewise.
-
-2011-06-29  Richard Sandiford  <rdsandiford at googlemail.com>
-
-	* mips16-opc.c (jalrc, jrc): Move earlier in file.
-
-2011-06-21  H.J. Lu  <hongjiu.lu at intel.com>
-
-	* i386-dis.c (prefix_table): Re-indent PREFIX_VEX_0F388C and
-	PREFIX_VEX_0F388E.
-
-2011-06-17  Andreas Schwab  <schwab at redhat.com>
-
-	* Makefile.am (MAINTAINERCLEANFILES): Move s390-opc.tab ...
-	(MOSTLYCLEANFILES): ... here.
-	* Makefile.in: Regenerate.
-
-2011-06-14  Alan Modra  <amodra at gmail.com>
-
-	* Makefile.in: Regenerate.
+2012-05-14  James Lemke  <jwlemke at codesourcery.com>
 
-2011-06-13  Walter Lee  <walt at tilera.com>
+	* ppc-dis.c (get_powerpc_dialect): Use is_ppc_vle.
+	(PPC_OPCD_SEGS, VLE_OPCD_SEGS): New defines.
+	(vle_opcd_indices): New array.
+	(lookup_vle): New function.
+	(disassemble_init_powerpc): Revise for second (VLE) opcode table.
+	(print_insn_powerpc): Likewise.
+	* ppc-opc.c: Likewise.
 
-	* Makefile.am (TARGET_LIBOPCODES_CFILES): Add tilegx-dis.c,
-	tilegx-opc.c, tilepro-dis.c, and tilepro-opc.c.
-	* Makefile.in: Regenerate.
-	* configure.in: Handle bfd_tilegx_arch and bfd_tilepro_arch.
+2012-05-14  Catherine Moore  <clm at codesourcery.com>
+	    Maciej W. Rozycki  <macro at codesourcery.com>
+	    Rhonda Wittels  <rhonda at codesourcery.com>
+	    Nathan Froyd <froydnj at codesourcery.com>
+
+	* ppc-opc.c (insert_arx, extract_arx): New functions.
+	(insert_ary, extract_ary): New functions.
+	(insert_li20, extract_li20): New functions.
+	(insert_rx, extract_rx): New functions.
+	(insert_ry, extract_ry): New functions.
+	(insert_sci8, extract_sci8): New functions.
+	(insert_sci8n, extract_sci8n): New functions.
+	(insert_sd4h, extract_sd4h): New functions.
+	(insert_sd4w, extract_sd4w): New functions.
+	(insert_vlesi, extract_vlesi): New functions.
+	(insert_vlensi, extract_vlensi): New functions.
+	(insert_vleui, extract_vleui): New functions.
+	(insert_vleil, extract_vleil): New functions.
+	(BI_MASK, BB_MASK, BT): Use PPC_OPERAND_CR_BIT.
+	(BI16, BI32, BO32, B8): New.
+	(B15, B24, CRD32, CRS): New.
+	(CRD, OBF, BFA, CR, CRFS): Use PPC_OPERAND_CR_REG.
+	(DB, IMM20, RD, Rx, ARX, RY, RZ): New.
+	(ARY, SCLSCI8, SCLSCI8N, SE_SD, SE_SDH): New.
+	(SH6_MASK): Use PPC_OPSHIFT_INV.
+	(SI8, UI5, OIMM5, UI7, BO16): New.
+	(VLESIMM, VLENSIMM, VLEUIMM, VLEUIMML): New.
+	(XT6, XA6, XB6, XB6S, XC6): Use PPC_OPSHIFT_INV.
+	(ALLOW8_SPRG): New.
+	(insert_sprg, extract_sprg): Check ALLOW8_SPRG.
+	(OPVUP, OPVUP_MASK OPVUP): New
+	(BD8, BD8_MASK, BD8IO, BD8IO_MASK): New.
+	(EBD8IO, EBD8IO1_MASK, EBD8IO2_MASK, EBD8IO3_MASK): New.
+	(BD15, BD15_MASK, EBD15, EBD15_MASK, EBD15BI, EBD15BI_MASK): New.
+	(BD24,BD24_MASK, C_LK, C_LK_MASK, C, C_MASK): New.
+	(IA16, IA16_MASK, I16A, I16A_MASK, I16L, I16L_MASK): New.
+	(IM7, IM7_MASK, LI20, LI20_MASK, SCI8, SCI8_MASK): New.
+	(SCI8BF, SCI8BF_MASK, SD4, SD4_MASK): New.
+	(SE_IM5, SE_IM5_MASK): New.
+	(SE_R, SE_R_MASK, SE_RR, SE_RR_MASK): New.
+	(EX, EX_MASK, BO16F, BO16T, BO32F, BO32T): New.
+	(BO32DNZ, BO32DZ): New.
+	(NO371, PPCSPE, PPCISEL, PPCEFS, MULHW): Include PPC_OPCODE_VLE.
+	(PPCVLE): New.
+	(powerpc_opcodes): Add new VLE instructions.  Update existing
+	instruction to include PPCVLE if supported.
+	* ppc-dis.c (ppc_opts): Add vle entry.
+	(get_powerpc_dialect): New function.
+	(powerpc_init_dialect): VLE support.
+	(print_insn_big_powerpc): Call get_powerpc_dialect.
+	(print_insn_little_powerpc): Likewise.
+	(operand_value_powerpc): Handle negative shift counts.
+	(print_insn_powerpc): Handle 2-byte instruction lengths.
+
+2012-05-11  Daniel Richard G.  <skunk at iskunk.org>
+
+	PR binutils/14028
+	* configure.in: Invoke ACX_HEADER_STRING.
 	* configure: Regenerate.
-	* disassemble.c (disassembler): Add ARCH_tilegx and ARCH_tilepro.
-	* po/POTFILES.in: Regenerate.
-	* tilegx-dis.c: New file.
-	* tilegx-opc.c: New file.
-	* tilepro-dis.c: New file.
-	* tilepro-opc.c: New file.
-
-2011-06-10  H.J. Lu  <hongjiu.lu at intel.com>
-
-	AVX Programming Reference (June, 2011)
-	* i386-dis.c (XMGatherQ): New.
-	* i386-dis.c (EXxmm_mb): New.
-	(EXxmm_mb): Likewise.
-	(EXxmm_mw): Likewise.
-	(EXxmm_md): Likewise.
-	(EXxmm_mq): Likewise.
-	(EXxmmdw): Likewise.
-	(EXxmmqd): Likewise.
-	(VexGatherQ): Likewise.
-	(MVexVSIBDWpX): Likewise.
-	(MVexVSIBQWpX): Likewise.
-	(xmm_mb_mode): Likewise.
-	(xmm_mw_mode): Likewise.
-	(xmm_md_mode): Likewise.
-	(xmm_mq_mode): Likewise.
-	(xmmdw_mode): Likewise.
-	(xmmqd_mode): Likewise.
-	(ymmxmm_mode): Likewise.
-	(vex_vsib_d_w_dq_mode): Likewise.
-	(vex_vsib_q_w_dq_mode): Likewise.
-	(MOD_VEX_0F385A_PREFIX_2): Likewise.
-	(MOD_VEX_0F388C_PREFIX_2): Likewise.
-	(MOD_VEX_0F388E_PREFIX_2): Likewise.
-	(PREFIX_0F3882): Likewise.
-	(PREFIX_VEX_0F3816): Likewise.
-	(PREFIX_VEX_0F3836): Likewise.
-	(PREFIX_VEX_0F3845): Likewise.
-	(PREFIX_VEX_0F3846): Likewise.
-	(PREFIX_VEX_0F3847): Likewise.
-	(PREFIX_VEX_0F3858): Likewise.
-	(PREFIX_VEX_0F3859): Likewise.
-	(PREFIX_VEX_0F385A): Likewise.
-	(PREFIX_VEX_0F3878): Likewise.
-	(PREFIX_VEX_0F3879): Likewise.
-	(PREFIX_VEX_0F388C): Likewise.
-	(PREFIX_VEX_0F388E): Likewise.
-	(PREFIX_VEX_0F3890..PREFIX_VEX_0F3893): Likewise.
-	(PREFIX_VEX_0F38F5): Likewise.
-	(PREFIX_VEX_0F38F6): Likewise.
-	(PREFIX_VEX_0F3A00): Likewise.
-	(PREFIX_VEX_0F3A01): Likewise.
-	(PREFIX_VEX_0F3A02): Likewise.
-	(PREFIX_VEX_0F3A38): Likewise.
-	(PREFIX_VEX_0F3A39): Likewise.
-	(PREFIX_VEX_0F3A46): Likewise.
-	(PREFIX_VEX_0F3AF0): Likewise.
-	(VEX_LEN_0F3816_P_2): Likewise.
-	(VEX_LEN_0F3819_P_2): Likewise.
-	(VEX_LEN_0F3836_P_2): Likewise.
-	(VEX_LEN_0F385A_P_2_M_0): Likewise.
-	(VEX_LEN_0F38F5_P_0): Likewise.
-	(VEX_LEN_0F38F5_P_1): Likewise.
-	(VEX_LEN_0F38F5_P_3): Likewise.
-	(VEX_LEN_0F38F6_P_3): Likewise.
-	(VEX_LEN_0F38F7_P_1): Likewise.
-	(VEX_LEN_0F38F7_P_2): Likewise.
-	(VEX_LEN_0F38F7_P_3): Likewise.
-	(VEX_LEN_0F3A00_P_2): Likewise.
-	(VEX_LEN_0F3A01_P_2): Likewise.
-	(VEX_LEN_0F3A38_P_2): Likewise.
-	(VEX_LEN_0F3A39_P_2): Likewise.
-	(VEX_LEN_0F3A46_P_2): Likewise.
-	(VEX_LEN_0F3AF0_P_3): Likewise.
-	(VEX_W_0F3816_P_2): Likewise.
-	(VEX_W_0F3818_P_2): Likewise.
-	(VEX_W_0F3819_P_2): Likewise.
-	(VEX_W_0F3836_P_2): Likewise.
-	(VEX_W_0F3846_P_2): Likewise.
-	(VEX_W_0F3858_P_2): Likewise.
-	(VEX_W_0F3859_P_2): Likewise.
-	(VEX_W_0F385A_P_2_M_0): Likewise.
-	(VEX_W_0F3878_P_2): Likewise.
-	(VEX_W_0F3879_P_2): Likewise.
-	(VEX_W_0F3A00_P_2): Likewise.
-	(VEX_W_0F3A01_P_2): Likewise.
-	(VEX_W_0F3A02_P_2): Likewise.
-	(VEX_W_0F3A38_P_2): Likewise.
-	(VEX_W_0F3A39_P_2): Likewise.
-	(VEX_W_0F3A46_P_2): Likewise.
-	(MOD_VEX_0F3818_PREFIX_2): Removed.
-	(MOD_VEX_0F3819_PREFIX_2): Likewise.
-	(VEX_LEN_0F60_P_2..VEX_LEN_0F6D_P_2): Likewise.
-	(VEX_LEN_0F70_P_1..VEX_LEN_0F76_P_2): Likewise.
-	(VEX_LEN_0FD1_P_2..VEX_LEN_0FD5_P_2): Likewise.
-	(VEX_LEN_0FD7_P_2_M_1..VEX_LEN_0F3819_P_2_M_0): Likewise.
-	(VEX_LEN_0F381C_P_2..VEX_LEN_0F3840_P_2): Likewise.
-	(VEX_LEN_0F3A0E_P_2): Likewise.
-	(VEX_LEN_0F3A0F_P_2): Likewise.
-	(VEX_LEN_0F3A42_P_2): Likewise.
-	(VEX_LEN_0F3A4C_P_2): Likewise.
-	(VEX_W_0F3818_P_2_M_0): Likewise.
-	(VEX_W_0F3819_P_2_M_0): Likewise.
-	(prefix_table): Updated.
-	(three_byte_table): Likewise.
-	(vex_table): Likewise.
-	(vex_len_table): Likewise.
-	(vex_w_table): Likewise.
-	(mod_table): Likewise.
-	(putop): Handle "LW".
-	(intel_operand_size): Handle xmm_mb_mode, xmm_mw_mode,
-	xmm_md_mode, xmm_mq_mode, xmmdw_mode, xmmqd_mode, ymmxmm_mode,
-	vex_vsib_d_w_dq_mode, vex_vsib_q_w_dq_mode.
-	(OP_EX): Likewise.
-	(OP_E_memory): Handle vex_vsib_d_w_dq_mode and
-	vex_vsib_q_w_dq_mode.
-	(OP_XMM): Handle vex_vsib_q_w_dq_mode.
-	(OP_VEX): Likewise.
-
-	* i386-gen.c (cpu_flag_init): Add CpuAVX2 to CPU_ANY_SSE_FLAGS
-	and CPU_ANY_AVX_FLAGS.  Add CPU_BMI2_FLAGS, CPU_LZCNT_FLAGS,
-	CPU_INVPCID_FLAGS and CPU_AVX2_FLAGS.
-	(cpu_flags): Add CpuAVX2, CpuBMI2, CpuLZCNT and CpuINVPCID.
-	(opcode_modifiers): Add VecSIB.
-
-	* i386-opc.h (CpuAVX2): New.
-	(CpuBMI2): Likewise.
-	(CpuLZCNT): Likewise.
-	(CpuINVPCID): Likewise.
-	(VecSIB128): Likewise.
-	(VecSIB256): Likewise.
-	(VecSIB): Likewise.
-	(i386_cpu_flags): Add cpuavx2, cpubmi2, cpulzcnt and cpuinvpcid.
-	(i386_opcode_modifier): Add vecsib.
-
-	* i386-opc.tbl: Add invpcid, AVX2 and BMI2 instructions.
-	* i386-init.h: Regenerated.
-	* i386-tbl.h: Likewise.
-
-2011-06-03  Quentin Neill  <quentin.neill at amd.com>
-
-	* i386-gen.c (cpu_flag_init): Add CpuF16C to CPU_BDVER2_FLAGS.
-	* i386-init.h: Regenerated.
-
-2011-06-03  Nick Clifton  <nickc at redhat.com>
-
-	PR binutils/12752
-	* arm-dis.c (print_insn_coprocessor): Use bfd_vma type for
-	computing address offsets.
-	(print_arm_address): Likewise.
-	(print_insn_arm): Likewise.
-	(print_insn_thumb16): Likewise.
-	(print_insn_thumb32): Likewise.
-
-2011-06-02  Jie Zhang <jie at codesourcery.com>
-	    Nathan Sidwell <nathan at codesourcery.com>
-	    Maciej Rozycki <macro at codesourcery.com>
-
-	* arm-dis.c (print_insn_coprocessor): Explicitly print #-0
-	as address offset.
-	(print_arm_address): Likewise. Elide positive #0 appropriately.
-	(print_insn_arm): Likewise.
-
-2011-06-02  Nick Clifton  <nickc at redhat.com>
+	* config.in: Regenerate.
+	* sysdep.h: If STRINGS_WITH_STRING is defined then include both
+	string.h and strings.h.
 
-	PR gas/12752
-	* arm-dis.c (print_insn_thumb32): Do not sign extend  addresses
-	passed to print_address_func.
+2012-05-11  Nick Clifton  <nickc at redhat.com>
 
-2011-06-02  Nick Clifton  <nickc at redhat.com>
-
-	* arm-dis.c: Fix spelling mistakes.
-	* op/opcodes.pot: Regenerate.
-
-2011-05-24  Andreas Krebbel  <Andreas.Krebbel at de.ibm.com>
-
-	* s390-opc.c: Replace S390_OPERAND_REG_EVEN with
-	S390_OPERAND_REG_PAIR.  Fix INSTR_RRF_0UFEF instruction type.
-	* s390-opc.txt: Fix cxr instruction type.
-
-2011-05-24  Andreas Krebbel  <Andreas.Krebbel at de.ibm.com>
-
-	* s390-opc.c: Add new instruction types marking register pair
-	operands.
-	* s390-opc.txt: Match instructions having register pair operands
-	to the new instruction types.
-
-2011-05-19  Nick Clifton  <nickc at redhat.com>
-
-	* v850-opc.c (cmpf.[sd]): Reverse the order of the reg1 and reg2
-	operands.
-
-2011-05-10  Quentin Neill  <quentin.neill at amd.com>
-
-	* i386-gen.c (cpu_flag_init): Add new CPU_BDVER2_FLAGS.
-	* i386-init.h: Regenerated.
+	PR binutils/14006
+	* arm-dis.c (print_insn): Fix detection of instruction mode in
+	files containing multiple executable sections.
 
-2011-04-27  Nick Clifton  <nickc at redhat.com>
+2012-05-03  Sean Keys  <skeys at ipdatasys.com>
 
-	* po/da.po: Updated Danish translation.
+	* Makefile.in, configure: regenerate
+	* disassemble.c (disassembler): Recognize ARCH_XGATE.
+	* xgate-dis.c (read_memory, print_insn, print_insn_xgate):
+	New functions.
+	* configure.in: Recognize xgate.
+	* xgate-dis.c, xgate-opc.c: New files for support of xgate
+	* Makefile.am (CFILES, ALL_MACHINES): New files for disassembly
+	and opcode generation for xgate.
 
-2011-04-26  Anton Blanchard  <anton at samba.org>
+2012-04-30  DJ Delorie  <dj at redhat.com>
 
-	* ppc-opc.c: (powerpc_opcodes): Enable icswx for POWER7.
-
-2011-04-21  DJ Delorie  <dj at redhat.com>
-
-	* rx-decode.opc (rx_decode_opcode): Set the syntax for multi-byte NOPs.
+	* rx-decode.opc (MOV): Do not sign-extend immediates which are
+	already the maximum bit size.
 	* rx-decode.c: Regenerate.
 
-2011-04-20  H.J. Lu  <hongjiu.lu at intel.com>
-
-	* i386-init.h: Regenerated.
-
-2011-04-19  Quentin Neill  <quentin.neill at amd.com>
-
-	* i386-gen.c (cpu_flag_init): Remove 3dnow and 3dnowa bits
-	from bdver1 flags.
-
-2011-04-13  Nick Clifton  <nickc at redhat.com>
-
-	* v850-dis.c (disassemble): Always print a closing square brace if
-	an opening square brace was printed.
-
-2011-04-12  Nick Clifton  <nickc at redhat.com>
-
-	PR binutils/12534
-	* arm-dis.c (thumb32_opcodes): Add %L suffix to LDRD and STRD insn
-	patterns.
-	(print_insn_thumb32): Handle %L.
-
-2011-04-11  Julian Brown  <julian at codesourcery.com>
-
-	* arm-dis.c (psr_name): Fix typo for BASEPRI_MAX.
-	(print_insn_thumb32): Add APSR bitmask support.
-
-2011-04-07  Paul Carroll<pcarroll at codesourcery.com>
-
-	* arm-dis.c (print_insn): init vars moved into private_data structure.
-
-2011-03-24  Mike Frysinger  <vapier at gentoo.org>
-
-	* bfin-dis.c (decode_dsp32mac_0): Move MM zeroing down to MAC0 logic.
-
-2011-03-22  Eric B. Weddington  <eric.weddington at atmel.com>
-
-	* avr-dis.c (avr_operand): Add opcode_str parameter. Check for
-	post-increment to support LPM Z+ instruction. Add support for 'E'
-	constraint for DES instruction.
-	(print_insn_avr): Adjust calls to avr_operand. Rename variable.
-
-2011-03-14  Richard Sandiford  <richard.sandiford at linaro.org>
-
-	* arm-dis.c (get_sym_code_type): Treat STT_GNU_IFUNCs as code.
+2012-04-27  David S. Miller  <davem at davemloft.net>
 
-2011-03-14  Richard Sandiford  <richard.sandiford at linaro.org>
+	* sparc-dis.c (v9a_asr_reg_names): Add 'cfr'.
+	* sparc-opc.c (sparc_opcodes): Add rd/wr cases for %cfr.
 
-	* arm-dis.c (get_sym_code_type): Don't check for STT_ARM_TFUNC.
-	Use branch types instead.
-	(print_insn): Likewise.
+	* sparc-opc.c (sparc_opcodes): Add 'wr X, %pause' and 'pause'.
+	* sparc-dis.c (v9a_asr_reg_names): Add 'pause'.
 
-2011-02-28  Maciej W. Rozycki  <macro at codesourcery.com>
+	* sparc-opc.c (CBCOND): New define.
+	(CBCOND_XCC): Likewise.
+	(cbcond): New helper macro.
+	(sparc_opcodes): Add compare-and-branch instructions.
 
-	* mips-opc.c (mips_builtin_opcodes): Correct register use
-	annotation of "alnv.ps".
+	* sparc-dis.c (print_insn_sparc): Handle ')'.
+	* sparc-opc.c (sparc_opcodes): Add crypto instructions.
 
-2011-02-28  Maciej W. Rozycki  <macro at codesourcery.com>
+	* sparc-opc.c (sparc_opcodes): Rework table to put HWCAP values
+	into new struct sparc_opcode 'hwcaps' field instead of 'flags'.
 
-	* mips-opc.c (mips_builtin_opcodes): Add "pref" macro.
+2012-04-12  David S. Miller  <davem at davemloft.net>
 
-2011-02-22  Mike Frysinger  <vapier at gentoo.org>
+	* sparc-dis.c (X_DISP10): Define.
+	(print_insn_sparc): Handle '='.
 
-	* bfin-dis.c (OUTS): Remove p NULL check and txt NUL check.
+2012-04-01  Mike Frysinger  <vapier at gentoo.org>
 
-2011-02-22  Mike Frysinger  <vapier at gentoo.org>
+	* bfin-dis.c (fmtconst): Replace decimal handling with a single
+	sprintf call and the '*' field width.
 
-	* bfin-dis.c (print_insn_bfin): Change outf->fprintf_func to OUTS.
+2012-03-23  Maxim Kuvyrkov  <maxim at codesourcery.com>
 
-2011-02-19  Mike Frysinger  <vapier at gentoo.org>
+	* mips-dis.c (mips_arch_choices): Add entry for Broadcom XLP.
 
-	* bfin-dis.c (saved_state): Mark static.  Change a[01]x to ax[] and
-	a[01]w to aw[].  Delete ac0, ac0_copy, ac1, an, aq, av0, av0s, av1,
-	av1s, az, cc, v, v_copy, vs, rnd_mod, v_internal, pc, ticks, insts,
-	exception, end_of_registers, msize, memory, bfd_mach.
-	(CCREG, PCREG, A0XREG, A0WREG, A1XREG, A1WREG, LC0REG, LT0REG,
-	LB0REG, LC1REG, LT1REG, LB1REG): Delete
-	(AXREG, AWREG, LCREG, LTREG, LBREG): Define.
-	(get_allreg): Change to new defines.  Fallback to abort().
+2012-03-16  Alan Modra  <amodra at gmail.com>
 
-2011-02-14  Mike Frysinger  <vapier at gentoo.org>
+	* ppc-dis.c (PPC_OPC_SEGS, PPC_OP_TO_SEG): Delete.
+	(powerpc_opcd_indices): Bump array size.
+	(disassemble_init_powerpc): Set powerpc_opcd_indices entries
+	corresponding to unused opcodes to following entry.
+	(lookup_powerpc): New function, extracted and optimised from..
+	(print_insn_powerpc): ..here.
 
-	* bfin-dis.c: Add whitespace/parenthesis where needed.
-
-2011-02-14  Mike Frysinger  <vapier at gentoo.org>
-
-	* bfin-dis.c (decode_LoopSetup_0): Return when reg is greater
-	than 7.
-
-2011-02-13  Ralf Wildenhues  <Ralf.Wildenhues at gmx.de>
-
-	* configure: Regenerate.
-
-2011-02-13  Mike Frysinger  <vapier at gentoo.org>
-
-	* bfin-dis.c (decode_dsp32alu_0): Fix typo with A1 reg.
-
-2011-02-13  Mike Frysinger  <vapier at gentoo.org>
-
-	* bfin-dis.c (decode_dsp32mult_0): Add 1 to dst for mac1.  Output
-	dregs only when P is set, and dregs_lo otherwise.
-
-2011-02-13  Mike Frysinger  <vapier at gentoo.org>
-
-	* bfin-dis.c (decode_dsp32alu_0): Delete BYTEOP2M code.
-
-2011-02-12  Mike Frysinger  <vapier at gentoo.org>
-
-	* bfin-dis.c (decode_pseudoDEBUG_0): Add space after PRNT.
-
-2011-02-12  Mike Frysinger  <vapier at gentoo.org>
-
-	* bfin-dis.c (machine_registers): Delete REG_GP.
-	(reg_names): Delete "GP".
-	(decode_allregs): Change REG_GP to REG_LASTREG.
-
-2011-02-12  Mike Frysinger  <vapier at gentoo.org>
-
-	* bfin-dis.c (M_S2RND, M_T, M_W32, M_FU, M_TFU, M_IS, M_ISS2,
-	M_IH, M_IU): Delete.
-
-2011-02-11  Mike Frysinger  <vapier at gentoo.org>
-
-	* bfin-dis.c (reg_names): Add const.
-	(decode_dregs_lo, decode_dregs_hi, decode_dregs, decode_dregs_byte,
-	decode_pregs, decode_iregs, decode_mregs, decode_dpregs, decode_gregs,
-	decode_regs, decode_regs_lo, decode_regs_hi, decode_statbits,
-	decode_counters, decode_allregs): Likewise.
-
-2011-02-09  Michael Snyder  <msnyder at vmware.com>
-
-	* i386-dis.c (OP_J): Parenthesize expression to prevent
-	truncated addresses.
-	(print_insn): Fix indentation off-by-one.
-
-2011-02-01  Nick Clifton  <nickc at redhat.com>
-
-	* po/da.po: Updated Danish translation.
-
-2011-01-21  Dave Murphy  <davem at devkitpro.org>
-
-	* ppc-opc.c (NON32, NO371): Remove PPC_OPCODE_PPCPS.
-
-2011-01-18  H.J. Lu  <hongjiu.lu at intel.com>
-
-	* i386-dis.c (sIbT): New.
-	(b_T_mode): Likewise.
-	(dis386): Replace sIb with sIbT on "pushT".
-	(x86_64_table): Replace sIb with Ib on "aam" and "aad".
-	(OP_sI): Handle b_T_mode.  Properly sign-extend byte.
-
-2011-01-18  Jan Kratochvil  <jan.kratochvil at redhat.com>
+2012-03-15  Alan Modra  <amodra at gmail.com>
+	    James Lemke  <jwlemke at codesourcery.com>
 
+	* disassemble.c (disassemble_init_for_target): Handle ppc init.
+	* ppc-dis.c (private): New var.
+	(powerpc_init_dialect): Don't return calloc failure, instead use
+	private.
+	(PPC_OPCD_SEGS, PPC_OP_TO_SEG): Define.
+	(powerpc_opcd_indices): New array.
+	(disassemble_init_powerpc): New function.
+	(print_insn_big_powerpc): Don't init dialect here.
+	(print_insn_little_powerpc): Likewise.
+	(print_insn_powerpc): Start search using powerpc_opcd_indices.
+
+2012-03-10  Edmar Wienskoski  <edmar at freescale.com>
+
+	* ppc-dis.c (ppc_opts): Add entries for "e5500" and "e6500".
+	* ppc-opc.c (insert_ls, TMR, ESYNC, XSYNCLE_MASK): New.
+	(PPCVEC2, PPCTMR, E6500): New short names.
+	(powerpc_opcodes): Add vabsdub, vabsduh, vabsduw, dni, mvidsplt,
+	mviwsplt, icblq., mftmr, mttmr, dcblq., miso, lvexbx, lvexhx,
+	lvexwx, stvexbx, stvexhx, stvexwx, lvepx, lvepxl, stvepx, stvepxl,
+	lvtrx, lvtrxl, lvtlx, lvtlxl, stvfrx, stvfrxl, stvflx, stvflxl,
+	lvswx, lvswxl, stvswx, stvswxl, lvsm mnemonics. Accept LS, ESYNC
+	optional operands on sync instruction for E6500 target.
+
+2012-03-08  Andreas Krebbel  <Andreas.Krebbel at de.ibm.com>
+
+	* s390-opc.txt: Set instruction type of pku to SS_L2RDRD.
+
+2012-02-27  Alan Modra  <amodra at gmail.com>
+
+	* mt-dis.c: Regenerate.
+
+2012-02-27  Alan Modra  <amodra at gmail.com>
+
+	* v850-opc.c (extract_v8): Rearrange to make it obvious this
+	is the inverse of corresponding insert function.
+	(extract_d22, extract_u9, extract_r4): Likewise.
+	(extract_d9): Correct sign extension.
+	(extract_d16_15): Don't assume "long" is 32 bits, and don't
+	rely on implementation defined behaviour for shift right of
+	signed types.
+	(extract_d16_16, extract_d17_16, extract_i9): Likewise.
+	(extract_d23): Likewise, and correct mask.
+
+2012-02-27  Alan Modra  <amodra at gmail.com>
+
+	* crx-dis.c (print_arg): Mask constant to 32 bits.
+	* crx-opc.c (cst4_map): Use int array.
+
+2012-02-27  Alan Modra  <amodra at gmail.com>
+
+	* arc-dis.c (BITS): Don't use shifts to mask off bits.
+	(FIELDD): Sign extend with xor,sub.
+
+2012-02-25  Walter Lee  <walt at tilera.com>
+
+	* tilegx-opc.c: Handle TILEGX_OPC_LD4S_TLS and TILEGX_OPC_LD_TLS.
+	* tilepro-opc.c: Handle TILEPRO_OPC_LW_TLS and
+	TILEPRO_OPC_LW_TLS_SN.
+
+2012-02-21  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* i386-opc.h (HLEPrefixNone): New.
+	(HLEPrefixLock): Likewise.
+	(HLEPrefixAny): Likewise.
+	(HLEPrefixRelease): Likewise.
+
+2012-02-08  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* i386-dis.c (HLE_Fixup1): New.
+	(HLE_Fixup2): Likewise.
+	(HLE_Fixup3): Likewise.
+	(Ebh1): Likewise.
+	(Evh1): Likewise.
+	(Ebh2): Likewise.
+	(Evh2): Likewise.
+	(Ebh3): Likewise.
+	(Evh3): Likewise.
+	(MOD_C6_REG_7): Likewise.
+	(MOD_C7_REG_7): Likewise.
+	(RM_C6_REG_7): Likewise.
+	(RM_C7_REG_7): Likewise.
+	(XACQUIRE_PREFIX): Likewise.
+	(XRELEASE_PREFIX): Likewise.
+	(dis386): Use Ebh1/Evh1 on add, adc, and, btc, btr, bts,
+	cmpxchg, dec, inc, neg, not, or, sbb, sub, xor and xadd. Use
+	Ebh2/Evh2 on xchg.  Use Ebh3/Evh3 on mov.
+	(reg_table): Use Ebh1/Evh1 on add, adc, and, dec, inc, neg,
+	not, or, sbb, sub and xor.  Use Ebh3/Evh3 on mov.  Use
+	MOD_C6_REG_7 and MOD_C7_REG_7.
+	(mod_table): Add MOD_C6_REG_7 and MOD_C7_REG_7.
+	(rm_table): Add RM_C6_REG_7 and RM_C7_REG_7.  Add xend and
+	xtest.
+	(prefix_name): Handle XACQUIRE_PREFIX and XRELEASE_PREFIX.
+	(CMPXCHG8B_Fixup): Handle HLE prefix on cmpxchg8b.
+
+	* i386-gen.c (cpu_flag_init): Add CPU_HLE_FLAGS and
+	CPU_RTM_FLAGS.
+	(cpu_flags): Add CpuHLE and CpuRTM.
+	(opcode_modifiers): Add HLEPrefixOk.
+
+	* i386-opc.h (CpuHLE): New.
+	(CpuRTM): Likewise.
+	(HLEPrefixOk): Likewise.
+	(i386_cpu_flags): Add cpuhle and cpurtm.
+	(i386_opcode_modifier): Add hleprefixok.
+
+	* i386-opc.tbl: Add HLEPrefixOk=3 to mov.  Add HLEPrefixOk to
+	add, adc, and, btc, btr, bts, cmpxchg, dec, inc, neg, not, or,
+	sbb, sub, xor and xadd.  Add HLEPrefixOk=2 to xchg with memory
+	operand.  Add xacquire, xrelease, xabort, xbegin, xend and
+	xtest.
 	* i386-init.h: Regenerated.
-	* i386-tbl.h: Regenerated
-
-2011-01-17  Quentin Neill  <quentin.neill at amd.com>
-
-	* i386-dis.c (REG_XOP_TBM_01): New.
-	(REG_XOP_TBM_02): New.
-	(reg_table): Add REG_XOP_TBM_01 and REG_XOP_TBM_02 tables.
-	(xop_table): Redirect to REG_XOP_TBM_01 and REG_XOP_TBM_02
-	entries, and add bextr instruction.
-
-	* i386-gen.c (cpu_flag_init): Add CPU_TBM_FLAGS, CpuTBM.
-	(cpu_flags): Add CpuTBM.
-
-	* i386-opc.h (CpuTBM) New.
-	(i386_cpu_flags): Add bit cputbm.
-
-	* i386-opc.tbl: Add bextr, blcfill, blci, blcic, blcmsk,
-	blcs, blsfill, blsic, t1mskc, and tzmsk.
-
-2011-01-12  DJ Delorie  <dj at redhat.com>
-
-	* rx-dis.c (print_insn_rx): Support RX_Operand_TwoReg.
+	* i386-tbl.h: Likewise.
 
-2011-01-11  Mingjie Xing  <mingjie.xing at gmail.com>
+2012-01-24  DJ Delorie  <dj at redhat.com>
 
-	* mips-dis.c (print_insn_args): Adjust the value to print the real
-	offset for "+c" argument.
+	* rl78-decode.opc (rl78_decode_opcode): Add NOT1.
+	* rl78-decode.c: Regenerate.
 
-2011-01-10  Nick Clifton  <nickc at redhat.com>
+2012-01-17  James Murray  <jsm at jsm-net.demon.co.uk>
 
-	* po/da.po: Updated Danish translation.
+	PR binutils/10173
+	* cr16-dis.c (print_arg): Test symtab_size not num_symbols.
 
-2011-01-05  Nathan Sidwell  <nathan at codesourcery.com>
+2012-01-17  Andreas Schwab  <schwab at linux-m68k.org>
 
-	* arm-dis.c (thumb32_opcodes): BLX must have bit zero clear.
+	* m68k-opc.c (m68k_opcodes): Fix entries for pmove with BADx/BACx
+	register and move them after pmove with PSR/PCSR register.
 
-2011-01-04  H.J. Lu  <hongjiu.lu at intel.com>
+2012-01-13  H.J. Lu  <hongjiu.lu at intel.com>
 
-	* i386-dis.c (REG_VEX_38F3): New.
-	(PREFIX_0FBC): Likewise.
-	(PREFIX_VEX_38F2): Likewise.
-	(PREFIX_VEX_38F3_REG_1): Likewise.
-	(PREFIX_VEX_38F3_REG_2): Likewise.
-	(PREFIX_VEX_38F3_REG_3): Likewise.
-	(PREFIX_VEX_38F7): Likewise.
-	(VEX_LEN_38F2_P_0): Likewise.
-	(VEX_LEN_38F3_R_1_P_0): Likewise.
-	(VEX_LEN_38F3_R_2_P_0): Likewise.
-	(VEX_LEN_38F3_R_3_P_0): Likewise.
-	(VEX_LEN_38F7_P_0): Likewise.
-	(dis386_twobyte): Use PREFIX_0FBC.
-	(reg_table): Add REG_VEX_38F3.
-	(prefix_table): Add PREFIX_0FBC, PREFIX_VEX_38F2,
-	PREFIX_VEX_38F3_REG_1, PREFIX_VEX_38F3_REG_2,
-	PREFIX_VEX_38F3_REG_3 and PREFIX_VEX_38F7.
-	(vex_table): Use PREFIX_VEX_38F2, REG_VEX_38F3 and
-	PREFIX_VEX_38F7.
-	(vex_len_table): Add VEX_LEN_38F2_P_0, VEX_LEN_38F3_R_1_P_0,
-	VEX_LEN_38F3_R_2_P_0, VEX_LEN_38F3_R_3_P_0 and
-	VEX_LEN_38F7_P_0.
+	* i386-dis.c (mod_table): Add vmfunc.
 
-	* i386-gen.c (cpu_flag_init): Add CPU_BMI_FLAGS.
-	(cpu_flags): Add CpuBMI.
+	* i386-gen.c (cpu_flag_init): Add CPU_VMFUNC_FLAGS.
+	(cpu_flags): CpuVMFUNC.
 
-	* i386-opc.h (CpuBMI): New.
-	(i386_cpu_flags): Add cpubmi.
+	* i386-opc.h (CpuVMFUNC): New.
+	(i386_cpu_flags): Add cpuvmfunc.
 
-	* i386-opc.tbl: Add andn, bextr, blsi, blsmsk, blsr and tzcnt.
+	* i386-opc.tbl: Add vmfunc.
 	* i386-init.h: Regenerated.
 	* i386-tbl.h: Likewise.
 
-2011-01-04  H.J. Lu  <hongjiu.lu at intel.com>
-
-	* i386-dis.c (VexGdq): New.
-	(OP_VEX): Handle dq_mode.
-
-2011-01-01  H.J. Lu  <hongjiu.lu at intel.com>
-
-	* i386-gen.c (process_copyright): Update copyright to 2011.
-
-For older changes see ChangeLog-2010
+For older changes see ChangeLog-2011
 

 Local Variables:
 mode: change-log
diff --git a/opcodes/ChangeLog-2011 b/opcodes/ChangeLog-2011
new file mode 100644
index 0000000..413f3dc
--- /dev/null
+++ b/opcodes/ChangeLog-2011
@@ -0,0 +1,822 @@
+2011-12-15  Nick Clifton  <nickc at redhat.com>
+
+	* cgen-asm.c (cgen_parse_signed_integer): Add code to handle the
+	sign extension of negative values on a 64-bit host.
+	* frv-asm.c: Regenerate.
+
+2011-12-13  Alan Modra  <amodra at gmail.com>
+
+	* ppc-opc.c (ISA_V2): Define and use for relevant BO field tests.
+	(valid_bo_pre_v2, valid_bo_post_v2): New functions, extracted from..
+	(valid_bo): ..here.  When disassembling, accept either 'y' or 'at'
+	type encoding on second pass.
+	(powerpc_opcodes): Use ISA_V2 to enable branch insns rather than
+	POWER4.
+	* ppc-dis.c (print_insn_powerpc): Delete dialect_orig.  Instead
+	ignore deprecated on second pass.
+
+2011-12-08  Andrew Pinski  <apinski at cavium.com>
+
+	* mips-opc.c (mips_builtin_opcodes): Add "pause".
+
+2011-12-08  Andrew Pinski  <apinski at cavium.com>
+	    Adam Nemet  <anemet at caviumnetworks.com>
+
+	* mips-dis.c (mips_arch_choices): Add Octeon2.
+	For "octeon+", just include OcteonP for the insn.
+	* mips-opc.c (IOCT): Include Octeon2.
+	(IOCTP): Include Octeon2.
+	(IOCT2): New macro.
+	(mips_builtin_opcodes): Add "laa", "laad", "lac", "lacd", "lad",
+	"ladd", "lai", "laid", "las", "lasd", "law", "lawd".
+	Move "lbux", "ldx", "lhx", "lwx", and "lwux" up to where the standard
+	loads are, and add IOCT2 to them.
+	Add "lbx" and "lhux".
+	Add "qmac.00", "qmac.01", "qmac.02", "qmac.03", "qmacs.00",
+	"qmacs.01", "qmacs.01", "qmacs.02" and "qmacs.03".
+	Add "zcb" and "zcbt".
+
+2011-11-29  Andrew Pinski  <apinski at cavium.com>
+
+	* mips-dis.c (mips_arch_choices): Add Octeon+.
+	* mips-opc.c (IOCT): Include Octeon+.
+	(IOCTP): New macro.
+	(mips_builtin_opcodes): Add "saa" and "saad".
+
+2011-11-25  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	* mips-dis.c (print_insn_micromips): Rename local variable iprintf
+	to infprintf to avoid shadow warning.
+
+2011-11-25  Nick Clifton  <nickc at redhat.com>
+
+	* po/it.po: Updated Italian translation.
+
+2011-11-16  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* micromips-opc.c (micromips_opcodes): Use NODS rather than TRAP
+	for "alnv.ps".
+
+2011-11-02  Nick Clifton  <nickc at redhat.com>
+
+	* po/it.po: New Italian translation.
+	* configure.in (ALL_LINGUAS): Add it.
+	* configure: Regenerate.
+	* po/opcodes.pot: Regenerate.
+
+2011-11-01  DJ Delorie  <dj at redhat.com>
+
+	* Makefile.am (TARGET_LIBOPCODES_CFILES): Add rl78-decode.c and
+	rl78-dis.c.
+	(MAINTAINERCLEANFILES): Add rl78-decode.c.
+	(rl78-decode.c): New rule, built from rl78-decode.opc and opc2c.
+	* Makefile.in: Regenerate.
+	* configure.in: Add bfd_rl78_arch case.
+	* configure: Regenerate.
+	* disassemble.c: Define ARCH_rl78.
+	(disassembler): Add ARCH_rl78 case.
+	* rl78-decode.c: New file.
+	* rl78-decode.opc: New file.
+	* rl78-dis.c: New file.
+
+2011-10-27  Peter Bergner  <bergner at vnet.ibm.com>
+
+	* ppc-opc.c (powerpc_opcodes) <drrndq, drrndq., dtstexq, dctqpq,
+	dctqpq., dctfixq, dctfixq., dxexq, dxexq., dtstsfq, dcffixq, dcffixq.,
+	diexq, diexq.>: Use FRT, FRA, FRB and FRBp repsectively on DFP quad
+	instructions.
+
+2011-10-26  Nick Clifton  <nickc at redhat.com>
+
+	PR binutils/13348
+	* i386-dis.c (print_insn): Fix testing of array subscript.
+
+2011-10-26  Joern Rennecke  <joern.rennecke at embecosm.com>
+
+	* disassemble.c (ARCH_epiphany): Move into alphasorted spot.
+	* epiphany-asm.c, epiphany-opc.h: Regenerate.
+
+2011-10-25  Joern Rennecke  <joern.rennecke at embecosm.com>
+
+	* Makefile.am (HFILES): Add epiphany-desc.h and epiphany-opc.h .
+	(TARGET_LIBOPCODES_CFILES): Add  epiphany-asm.c, epiphany-desc.c,
+	epiphany-dis.c, epiphany-ibld.c and epiphany-opc.c .
+	(CLEANFILES): Add stamp-epiphany.
+	(EPIPHANY_DEPS): Set.  Make CGEN-generated Epiphany files depend on it.
+	(stamp-epiphany): New rule.
+	* configure.in: Handle bfd_epiphany_arch.
+	* disassemble.c (ARCH_epiphany): Define.
+	(disassembler): Handle bfd_arch_epiphany.
+	* epiphany-asm.c: New file.
+	* epiphany-desc.c: New file.
+	* epiphany-desc.h: New file.
+	* epiphany-dis.c: New file.
+	* epiphany-ibld.c: New file.
+	* epiphany-opc.c: New file.
+	* epiphany-opc.h: New file.
+	* Makefile.in: Regenerate.
+	* configure: Regenerate.
+	* po/POTFILES.in: Regenerate.
+	* po/opcodes.pot: Regenerate.
+
+2011-10-24  Julian Brown  <julian at codesourcery.com>
+
+	* m68k-opc.c (m68k_opcodes): Fix entries for ColdFire moveml.
+
+2011-10-21  Jan Glauber  <jang at linux.vnet.ibm.com>
+
+	* s390-opc.txt: Add CPUMF instructions.
+
+2011-10-18  Jie Zhang  <jie at codesourcery.com>
+	    Julian Brown  <julian at codesourcery.com>
+
+	* arm-dis.c (print_insn_arm): Explicitly specify rotation if needed.
+
+2011-10-10  Nick Clifton  <nickc at redhat.com>
+
+	* po/es.po: Updated Spanish translation.
+	* po/fi.po: Updated Finnish translation.
+
+2011-09-28  Jan Beulich  <jbeulich at suse.com>
+
+	* ppc-opc.c (insert_nbi, insert_rbx, FRAp, FRBp, FRSp, FRTp, NBI, RAX,
+	RBX): New.
+	(insert_bo, insert_boe): Reject bcctr with bit 2 in bo unset.
+	(powerpc_opcodes): Use RAX for second and RBXC for third operand of
+	lswx. Use NBI for third operand of lswi. Use FRTp for first operand of
+	lfdp and lfdpx. Use FRSp for first operand of stfdp and stfdpx, and
+	mark them as invalid on POWER7. Use FRTp, FRAp, and FRBp repsectively
+	on DFP quad instructions.
+
+2011-09-27  David S. Miller  <davem at davemloft.net>
+
+	* sparc-opc.c (sparc_opcodes): Fix random instruction to write
+	to a float instead of an integer register.
+
+2011-09-26  David S. Miller  <davem at davemloft.net>
+
+	* sparc-opc.c (sparc_opcodes): Add integer multiply-add
+	instructions.
+
+2011-09-21  David S. Miller  <davem at davemloft.net>
+
+	* sparc-opc.c (sparc_opcodes): Annotate table with HWCAP flag
+	bits.  Fix "fchksm16" mnemonic.
+
+2011-09-08  Mark Fortescue <mark at mtfhpc.demon.co.uk>
+
+	The changes below bring 'mov' and 'ticc' instructions into line
+	with the V8 SPARC Architecture Manual.
+	* sparc-opc.c (sparc_opcodes): Add entry for 'ticc imm + regrs1'.
+	* sparc-opc.c (sparc_opcodes): Add alias entries for
+	'mov regrs2,%asrX'; 'mov regrs2,%y'; 'mov regrs2,%prs';
+	'mov regrs2,%wim' and 'mov regrs2,%tbr'.
+	* sparc-opc.c (sparc_opcodes): Move/Change entries for
+	'mov imm,%asrX'; 'mov imm,%y'; 'mov imm,%prs'; 'mov imm,%wim'
+	and 'mov imm,%tbr'.
+	* sparc-opc.c (sparc_opcodes): Add wr alias entries to match above
+	mov aliases.
+
+	* sparc-opc.c (sparc_opcodes): Add entry for 'save simm13,regrs1,regrd'
+	This has been reported as being accepted by the Sun assmebler.
+
+2011-09-08  David S. Miller  <davem at davemloft.net>
+
+	* sparc-opc.c (pdistn): Destination is integer not float register.
+
+2011-09-07  Andreas Schwab  <schwab at linux-m68k.org>
+
+	PR gas/13145
+	* m68k-opc.c: Use "y" in moveml pattern for mcfisa_a.
+
+2011-08-26  Nick Clifton  <nickc at redhat.com>
+
+	* po/es.po: Updated Spanish translation.
+
+2011-08-22  Nick Clifton  <nickc at redhat.com>
+
+	* Makefile.am (CPUDIR): Redfine to point to top level cpu
+	directory.
+	(stamp-frv): Use CPUDIR.
+	(stamp-iq2000): Likewise.
+	(stamp-lm32): Likewise.
+	(stamp-m32c): Likewise.
+	(stamp-mt): Likewise.
+	(stamp-xc16x): Likewise.
+	* Makefile.in: Regenerate.
+
+2011-08-09  Chao-ying Fu  <fu at mips.com>
+	    Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* mips-dis.c (mips_arch_choices): Enable MCU for "mips32r2"
+	and "mips64r2".
+	(print_insn_args, print_insn_micromips): Handle MCU.
+	* micromips-opc.c (MC): New macro.
+	(micromips_opcodes): Add "aclr", "aset" and "iret".
+	* mips-opc.c (MC): New macro.
+	(mips_builtin_opcodes): Add "aclr", "aset" and "iret".
+
+2011-08-09  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* micromips-opc.c (MOD_mb, MOD_mc, MOD_md): Remove macros.
+	(MOD_me, MOD_mf, MOD_mg, MOD_mhi, MOD_mj, MOD_ml): Likewise.
+	(MOD_mm, MOD_mn, MOD_mp, MOD_mq, MOD_sp): Likewise.
+	(WR_mb, RD_mc, RD_md, WR_md, RD_me, RD_mf, WR_mf): New macros.
+	(RD_mg, WR_mhi, RD_mj, WR_mj, RD_ml, RD_mmn): Likewise.
+	(RD_mp, WR_mp, RD_mq, RD_sp, WR_sp): Likewise.
+	(WR_s): Update macro.
+	(micromips_opcodes): Update register use flags of: "addiu",
+	"addiupc", "addiur1sp", "addiur2", "addius5", "addiusp", "addu",
+	"and", "andi", "beq", "beqz", "bne", "bnez", "di", "ei", "j",
+	"jalr", "jalrs", "jr", "jraddiusp", "jrc", "lbu", "lhu", "li",
+	"lui", "lw", "lwm", "mfhi", "mflo", "move", "movep", "not",
+	"nor", "or", "ori", "sb", "sh", "sll", "srl", "subu", "sw",
+	"swm" and "xor" instructions.
+
+2011-08-05  David S. Miller  <davem at davemloft.net>
+
+	* sparc-dis.c (v9a_ast_reg_names): Add "cps".
+	(X_RS3): New macro.
+	(print_insn_sparc): Handle '4', '5', and '(' format codes.
+	Accept %asr numbers below 28.
+	* sparc-opc.c (sparc_opcodes): Add entries for HPC and VIS3
+	instructions.
+
+2011-08-02  Quentin Neill  <quentin.neill at amd.com>
+
+	* i386-dis.c (xop_table): Remove spurious bextr insn.
+
+2011-08-01  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR ld/13048
+	* i386-dis.c (print_insn): Optimize info->mach check.
+
+2011-08-01  H.J. Lu  <hongjiu.lu at intel.com>
+
+	PR gas/13046
+	* i386-opc.tbl: Add Disp32S to 64bit call.
+	* i386-tbl.h: Regenerated.
+
+2011-07-24  Chao-ying Fu  <fu at mips.com>
+	    Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* micromips-opc.c: New file.
+	* mips-dis.c (micromips_to_32_reg_b_map): New array.
+	(micromips_to_32_reg_c_map, micromips_to_32_reg_d_map): Likewise.
+	(micromips_to_32_reg_e_map, micromips_to_32_reg_f_map): Likewise.
+	(micromips_to_32_reg_g_map, micromips_to_32_reg_l_map): Likewise.
+	(micromips_to_32_reg_q_map): Likewise.
+	(micromips_imm_b_map, micromips_imm_c_map): Likewise.
+	(micromips_ase): New variable.
+	(is_micromips): New function.
+	(set_default_mips_dis_options): Handle microMIPS ASE.
+	(print_insn_micromips): New function.
+	(is_compressed_mode_p): Likewise.
+	(_print_insn_mips): Handle microMIPS instructions.
+	* Makefile.am (CFILES): Add micromips-opc.c.
+	* configure.in (bfd_mips_arch): Add micromips-opc.lo.
+	* Makefile.in: Regenerate.
+	* configure: Regenerate.
+
+	* mips-dis.c (micromips_to_32_reg_h_map): New variable.
+	(micromips_to_32_reg_i_map): Likewise.
+	(micromips_to_32_reg_m_map): Likewise.
+	(micromips_to_32_reg_n_map): New macro.
+
+2011-07-24  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* mips-opc.c (NODS): New macro.
+	(TRAP): Adjust for the rename of INSN_TRAP to INSN_NO_DELAY_SLOT.
+	(DSP_VOLA): Likewise.
+	(mips_builtin_opcodes): Add NODS annotation to "deret" and
+	"eret". Replace INSN_SYNC with NODS throughout.  Use NODS in
+	place of TRAP for "wait", "waiti" and "yield".
+	* mips16-opc.c (NODS): New macro.
+	(TRAP): Adjust for the rename of INSN_TRAP to INSN_NO_DELAY_SLOT.
+	(mips16_opcodes):  Use NODS in place of TRAP for "jalrc", "jrc",
+	"restore" and "save".
+
+2011-07-22  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* configure.in: Handle bfd_k1om_arch.
+	* configure: Regenerated.
+
+	* disassemble.c (disassembler): Handle bfd_k1om_arch.
+
+	* i386-dis.c (print_insn): Handle bfd_mach_k1om and
+	bfd_mach_k1om_intel_syntax.
+
+	* i386-gen.c (cpu_flag_init): Set CPU_UNKNOWN_FLAGS to
+	~(CpuL1OM|CpuK1OM).  Add CPU_K1OM_FLAGS.
+	(cpu_flags): Add CpuK1OM.
+
+	* i386-opc.h (CpuK1OM): New.
+	(i386_cpu_flags): Add cpuk1om.
+
+	* i386-init.h: Regenerated.
+	* i386-tbl.h: Likewise.
+
+2011-07-12  Nick Clifton  <nickc at redhat.com>
+
+	* arm-dis.c (print_insn_arm): Revert previous, undocumented,
+	accidental change.
+
+2011-07-01  Nick Clifton  <nickc at redhat.com>
+
+	PR binutils/12329
+	* avr-dis.c (avr_operand): Fix disassembly of ELPM, LPM and SPM
+	insns using post-increment addressing.
+
+2011-06-30  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* i386-dis.c (vex_len_table): Update rorxS.
+
+2011-06-30  H.J. Lu  <hongjiu.lu at intel.com>
+
+	AVX Programming Reference (June, 2011)
+	* i386-dis.c (vex_len_table): Correct rorxS.
+
+	* i386-opc.tbl: Correct rorx.
+	* i386-tbl.h: Regenerated.
+
+2011-06-29  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* tilegx-opc.c (find_opcode): Replace "index" with "i".
+	* tilepro-opc.c (find_opcode): Likewise.
+
+2011-06-29  Richard Sandiford  <rdsandiford at googlemail.com>
+
+	* mips16-opc.c (jalrc, jrc): Move earlier in file.
+
+2011-06-21  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* i386-dis.c (prefix_table): Re-indent PREFIX_VEX_0F388C and
+	PREFIX_VEX_0F388E.
+
+2011-06-17  Andreas Schwab  <schwab at redhat.com>
+
+	* Makefile.am (MAINTAINERCLEANFILES): Move s390-opc.tab ...
+	(MOSTLYCLEANFILES): ... here.
+	* Makefile.in: Regenerate.
+
+2011-06-14  Alan Modra  <amodra at gmail.com>
+
+	* Makefile.in: Regenerate.
+
+2011-06-13  Walter Lee  <walt at tilera.com>
+
+	* Makefile.am (TARGET_LIBOPCODES_CFILES): Add tilegx-dis.c,
+	tilegx-opc.c, tilepro-dis.c, and tilepro-opc.c.
+	* Makefile.in: Regenerate.
+	* configure.in: Handle bfd_tilegx_arch and bfd_tilepro_arch.
+	* configure: Regenerate.
+	* disassemble.c (disassembler): Add ARCH_tilegx and ARCH_tilepro.
+	* po/POTFILES.in: Regenerate.
+	* tilegx-dis.c: New file.
+	* tilegx-opc.c: New file.
+	* tilepro-dis.c: New file.
+	* tilepro-opc.c: New file.
+
+2011-06-10  H.J. Lu  <hongjiu.lu at intel.com>
+
+	AVX Programming Reference (June, 2011)
+	* i386-dis.c (XMGatherQ): New.
+	* i386-dis.c (EXxmm_mb): New.
+	(EXxmm_mb): Likewise.
+	(EXxmm_mw): Likewise.
+	(EXxmm_md): Likewise.
+	(EXxmm_mq): Likewise.
+	(EXxmmdw): Likewise.
+	(EXxmmqd): Likewise.
+	(VexGatherQ): Likewise.
+	(MVexVSIBDWpX): Likewise.
+	(MVexVSIBQWpX): Likewise.
+	(xmm_mb_mode): Likewise.
+	(xmm_mw_mode): Likewise.
+	(xmm_md_mode): Likewise.
+	(xmm_mq_mode): Likewise.
+	(xmmdw_mode): Likewise.
+	(xmmqd_mode): Likewise.
+	(ymmxmm_mode): Likewise.
+	(vex_vsib_d_w_dq_mode): Likewise.
+	(vex_vsib_q_w_dq_mode): Likewise.
+	(MOD_VEX_0F385A_PREFIX_2): Likewise.
+	(MOD_VEX_0F388C_PREFIX_2): Likewise.
+	(MOD_VEX_0F388E_PREFIX_2): Likewise.
+	(PREFIX_0F3882): Likewise.
+	(PREFIX_VEX_0F3816): Likewise.
+	(PREFIX_VEX_0F3836): Likewise.
+	(PREFIX_VEX_0F3845): Likewise.
+	(PREFIX_VEX_0F3846): Likewise.
+	(PREFIX_VEX_0F3847): Likewise.
+	(PREFIX_VEX_0F3858): Likewise.
+	(PREFIX_VEX_0F3859): Likewise.
+	(PREFIX_VEX_0F385A): Likewise.
+	(PREFIX_VEX_0F3878): Likewise.
+	(PREFIX_VEX_0F3879): Likewise.
+	(PREFIX_VEX_0F388C): Likewise.
+	(PREFIX_VEX_0F388E): Likewise.
+	(PREFIX_VEX_0F3890..PREFIX_VEX_0F3893): Likewise.
+	(PREFIX_VEX_0F38F5): Likewise.
+	(PREFIX_VEX_0F38F6): Likewise.
+	(PREFIX_VEX_0F3A00): Likewise.
+	(PREFIX_VEX_0F3A01): Likewise.
+	(PREFIX_VEX_0F3A02): Likewise.
+	(PREFIX_VEX_0F3A38): Likewise.
+	(PREFIX_VEX_0F3A39): Likewise.
+	(PREFIX_VEX_0F3A46): Likewise.
+	(PREFIX_VEX_0F3AF0): Likewise.
+	(VEX_LEN_0F3816_P_2): Likewise.
+	(VEX_LEN_0F3819_P_2): Likewise.
+	(VEX_LEN_0F3836_P_2): Likewise.
+	(VEX_LEN_0F385A_P_2_M_0): Likewise.
+	(VEX_LEN_0F38F5_P_0): Likewise.
+	(VEX_LEN_0F38F5_P_1): Likewise.
+	(VEX_LEN_0F38F5_P_3): Likewise.
+	(VEX_LEN_0F38F6_P_3): Likewise.
+	(VEX_LEN_0F38F7_P_1): Likewise.
+	(VEX_LEN_0F38F7_P_2): Likewise.
+	(VEX_LEN_0F38F7_P_3): Likewise.
+	(VEX_LEN_0F3A00_P_2): Likewise.
+	(VEX_LEN_0F3A01_P_2): Likewise.
+	(VEX_LEN_0F3A38_P_2): Likewise.
+	(VEX_LEN_0F3A39_P_2): Likewise.
+	(VEX_LEN_0F3A46_P_2): Likewise.
+	(VEX_LEN_0F3AF0_P_3): Likewise.
+	(VEX_W_0F3816_P_2): Likewise.
+	(VEX_W_0F3818_P_2): Likewise.
+	(VEX_W_0F3819_P_2): Likewise.
+	(VEX_W_0F3836_P_2): Likewise.
+	(VEX_W_0F3846_P_2): Likewise.
+	(VEX_W_0F3858_P_2): Likewise.
+	(VEX_W_0F3859_P_2): Likewise.
+	(VEX_W_0F385A_P_2_M_0): Likewise.
+	(VEX_W_0F3878_P_2): Likewise.
+	(VEX_W_0F3879_P_2): Likewise.
+	(VEX_W_0F3A00_P_2): Likewise.
+	(VEX_W_0F3A01_P_2): Likewise.
+	(VEX_W_0F3A02_P_2): Likewise.
+	(VEX_W_0F3A38_P_2): Likewise.
+	(VEX_W_0F3A39_P_2): Likewise.
+	(VEX_W_0F3A46_P_2): Likewise.
+	(MOD_VEX_0F3818_PREFIX_2): Removed.
+	(MOD_VEX_0F3819_PREFIX_2): Likewise.
+	(VEX_LEN_0F60_P_2..VEX_LEN_0F6D_P_2): Likewise.
+	(VEX_LEN_0F70_P_1..VEX_LEN_0F76_P_2): Likewise.
+	(VEX_LEN_0FD1_P_2..VEX_LEN_0FD5_P_2): Likewise.
+	(VEX_LEN_0FD7_P_2_M_1..VEX_LEN_0F3819_P_2_M_0): Likewise.
+	(VEX_LEN_0F381C_P_2..VEX_LEN_0F3840_P_2): Likewise.
+	(VEX_LEN_0F3A0E_P_2): Likewise.
+	(VEX_LEN_0F3A0F_P_2): Likewise.
+	(VEX_LEN_0F3A42_P_2): Likewise.
+	(VEX_LEN_0F3A4C_P_2): Likewise.
+	(VEX_W_0F3818_P_2_M_0): Likewise.
+	(VEX_W_0F3819_P_2_M_0): Likewise.
+	(prefix_table): Updated.
+	(three_byte_table): Likewise.
+	(vex_table): Likewise.
+	(vex_len_table): Likewise.
+	(vex_w_table): Likewise.
+	(mod_table): Likewise.
+	(putop): Handle "LW".
+	(intel_operand_size): Handle xmm_mb_mode, xmm_mw_mode,
+	xmm_md_mode, xmm_mq_mode, xmmdw_mode, xmmqd_mode, ymmxmm_mode,
+	vex_vsib_d_w_dq_mode, vex_vsib_q_w_dq_mode.
+	(OP_EX): Likewise.
+	(OP_E_memory): Handle vex_vsib_d_w_dq_mode and
+	vex_vsib_q_w_dq_mode.
+	(OP_XMM): Handle vex_vsib_q_w_dq_mode.
+	(OP_VEX): Likewise.
+
+	* i386-gen.c (cpu_flag_init): Add CpuAVX2 to CPU_ANY_SSE_FLAGS
+	and CPU_ANY_AVX_FLAGS.  Add CPU_BMI2_FLAGS, CPU_LZCNT_FLAGS,
+	CPU_INVPCID_FLAGS and CPU_AVX2_FLAGS.
+	(cpu_flags): Add CpuAVX2, CpuBMI2, CpuLZCNT and CpuINVPCID.
+	(opcode_modifiers): Add VecSIB.
+
+	* i386-opc.h (CpuAVX2): New.
+	(CpuBMI2): Likewise.
+	(CpuLZCNT): Likewise.
+	(CpuINVPCID): Likewise.
+	(VecSIB128): Likewise.
+	(VecSIB256): Likewise.
+	(VecSIB): Likewise.
+	(i386_cpu_flags): Add cpuavx2, cpubmi2, cpulzcnt and cpuinvpcid.
+	(i386_opcode_modifier): Add vecsib.
+
+	* i386-opc.tbl: Add invpcid, AVX2 and BMI2 instructions.
+	* i386-init.h: Regenerated.
+	* i386-tbl.h: Likewise.
+
+2011-06-03  Quentin Neill  <quentin.neill at amd.com>
+
+	* i386-gen.c (cpu_flag_init): Add CpuF16C to CPU_BDVER2_FLAGS.
+	* i386-init.h: Regenerated.
+
+2011-06-03  Nick Clifton  <nickc at redhat.com>
+
+	PR binutils/12752
+	* arm-dis.c (print_insn_coprocessor): Use bfd_vma type for
+	computing address offsets.
+	(print_arm_address): Likewise.
+	(print_insn_arm): Likewise.
+	(print_insn_thumb16): Likewise.
+	(print_insn_thumb32): Likewise.
+
+2011-06-02  Jie Zhang <jie at codesourcery.com>
+	    Nathan Sidwell <nathan at codesourcery.com>
+	    Maciej Rozycki <macro at codesourcery.com>
+
+	* arm-dis.c (print_insn_coprocessor): Explicitly print #-0
+	as address offset.
+	(print_arm_address): Likewise. Elide positive #0 appropriately.
+	(print_insn_arm): Likewise.
+
+2011-06-02  Nick Clifton  <nickc at redhat.com>
+
+	PR gas/12752
+	* arm-dis.c (print_insn_thumb32): Do not sign extend  addresses
+	passed to print_address_func.
+
+2011-06-02  Nick Clifton  <nickc at redhat.com>
+
+	* arm-dis.c: Fix spelling mistakes.
+	* op/opcodes.pot: Regenerate.
+
+2011-05-24  Andreas Krebbel  <Andreas.Krebbel at de.ibm.com>
+
+	* s390-opc.c: Replace S390_OPERAND_REG_EVEN with
+	S390_OPERAND_REG_PAIR.  Fix INSTR_RRF_0UFEF instruction type.
+	* s390-opc.txt: Fix cxr instruction type.
+
+2011-05-24  Andreas Krebbel  <Andreas.Krebbel at de.ibm.com>
+
+	* s390-opc.c: Add new instruction types marking register pair
+	operands.
+	* s390-opc.txt: Match instructions having register pair operands
+	to the new instruction types.
+
+2011-05-19  Nick Clifton  <nickc at redhat.com>
+
+	* v850-opc.c (cmpf.[sd]): Reverse the order of the reg1 and reg2
+	operands.
+
+2011-05-10  Quentin Neill  <quentin.neill at amd.com>
+
+	* i386-gen.c (cpu_flag_init): Add new CPU_BDVER2_FLAGS.
+	* i386-init.h: Regenerated.
+
+2011-04-27  Nick Clifton  <nickc at redhat.com>
+
+	* po/da.po: Updated Danish translation.
+
+2011-04-26  Anton Blanchard  <anton at samba.org>
+
+	* ppc-opc.c: (powerpc_opcodes): Enable icswx for POWER7.
+
+2011-04-21  DJ Delorie  <dj at redhat.com>
+
+	* rx-decode.opc (rx_decode_opcode): Set the syntax for multi-byte NOPs.
+	* rx-decode.c: Regenerate.
+
+2011-04-20  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* i386-init.h: Regenerated.
+
+2011-04-19  Quentin Neill  <quentin.neill at amd.com>
+
+	* i386-gen.c (cpu_flag_init): Remove 3dnow and 3dnowa bits
+	from bdver1 flags.
+
+2011-04-13  Nick Clifton  <nickc at redhat.com>
+
+	* v850-dis.c (disassemble): Always print a closing square brace if
+	an opening square brace was printed.
+
+2011-04-12  Nick Clifton  <nickc at redhat.com>
+
+	PR binutils/12534
+	* arm-dis.c (thumb32_opcodes): Add %L suffix to LDRD and STRD insn
+	patterns.
+	(print_insn_thumb32): Handle %L.
+
+2011-04-11  Julian Brown  <julian at codesourcery.com>
+
+	* arm-dis.c (psr_name): Fix typo for BASEPRI_MAX.
+	(print_insn_thumb32): Add APSR bitmask support.
+
+2011-04-07  Paul Carroll<pcarroll at codesourcery.com>
+
+	* arm-dis.c (print_insn): init vars moved into private_data structure.
+
+2011-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* bfin-dis.c (decode_dsp32mac_0): Move MM zeroing down to MAC0 logic.
+
+2011-03-22  Eric B. Weddington  <eric.weddington at atmel.com>
+
+	* avr-dis.c (avr_operand): Add opcode_str parameter. Check for
+	post-increment to support LPM Z+ instruction. Add support for 'E'
+	constraint for DES instruction.
+	(print_insn_avr): Adjust calls to avr_operand. Rename variable.
+
+2011-03-14  Richard Sandiford  <richard.sandiford at linaro.org>
+
+	* arm-dis.c (get_sym_code_type): Treat STT_GNU_IFUNCs as code.
+
+2011-03-14  Richard Sandiford  <richard.sandiford at linaro.org>
+
+	* arm-dis.c (get_sym_code_type): Don't check for STT_ARM_TFUNC.
+	Use branch types instead.
+	(print_insn): Likewise.
+
+2011-02-28  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* mips-opc.c (mips_builtin_opcodes): Correct register use
+	annotation of "alnv.ps".
+
+2011-02-28  Maciej W. Rozycki  <macro at codesourcery.com>
+
+	* mips-opc.c (mips_builtin_opcodes): Add "pref" macro.
+
+2011-02-22  Mike Frysinger  <vapier at gentoo.org>
+
+	* bfin-dis.c (OUTS): Remove p NULL check and txt NUL check.
+
+2011-02-22  Mike Frysinger  <vapier at gentoo.org>
+
+	* bfin-dis.c (print_insn_bfin): Change outf->fprintf_func to OUTS.
+
+2011-02-19  Mike Frysinger  <vapier at gentoo.org>
+
+	* bfin-dis.c (saved_state): Mark static.  Change a[01]x to ax[] and
+	a[01]w to aw[].  Delete ac0, ac0_copy, ac1, an, aq, av0, av0s, av1,
+	av1s, az, cc, v, v_copy, vs, rnd_mod, v_internal, pc, ticks, insts,
+	exception, end_of_registers, msize, memory, bfd_mach.
+	(CCREG, PCREG, A0XREG, A0WREG, A1XREG, A1WREG, LC0REG, LT0REG,
+	LB0REG, LC1REG, LT1REG, LB1REG): Delete
+	(AXREG, AWREG, LCREG, LTREG, LBREG): Define.
+	(get_allreg): Change to new defines.  Fallback to abort().
+
+2011-02-14  Mike Frysinger  <vapier at gentoo.org>
+
+	* bfin-dis.c: Add whitespace/parenthesis where needed.
+
+2011-02-14  Mike Frysinger  <vapier at gentoo.org>
+
+	* bfin-dis.c (decode_LoopSetup_0): Return when reg is greater
+	than 7.
+
+2011-02-13  Ralf Wildenhues  <Ralf.Wildenhues at gmx.de>
+
+	* configure: Regenerate.
+
+2011-02-13  Mike Frysinger  <vapier at gentoo.org>
+
+	* bfin-dis.c (decode_dsp32alu_0): Fix typo with A1 reg.
+
+2011-02-13  Mike Frysinger  <vapier at gentoo.org>
+
+	* bfin-dis.c (decode_dsp32mult_0): Add 1 to dst for mac1.  Output
+	dregs only when P is set, and dregs_lo otherwise.
+
+2011-02-13  Mike Frysinger  <vapier at gentoo.org>
+
+	* bfin-dis.c (decode_dsp32alu_0): Delete BYTEOP2M code.
+
+2011-02-12  Mike Frysinger  <vapier at gentoo.org>
+
+	* bfin-dis.c (decode_pseudoDEBUG_0): Add space after PRNT.
+
+2011-02-12  Mike Frysinger  <vapier at gentoo.org>
+
+	* bfin-dis.c (machine_registers): Delete REG_GP.
+	(reg_names): Delete "GP".
+	(decode_allregs): Change REG_GP to REG_LASTREG.
+
+2011-02-12  Mike Frysinger  <vapier at gentoo.org>
+
+	* bfin-dis.c (M_S2RND, M_T, M_W32, M_FU, M_TFU, M_IS, M_ISS2,
+	M_IH, M_IU): Delete.
+
+2011-02-11  Mike Frysinger  <vapier at gentoo.org>
+
+	* bfin-dis.c (reg_names): Add const.
+	(decode_dregs_lo, decode_dregs_hi, decode_dregs, decode_dregs_byte,
+	decode_pregs, decode_iregs, decode_mregs, decode_dpregs, decode_gregs,
+	decode_regs, decode_regs_lo, decode_regs_hi, decode_statbits,
+	decode_counters, decode_allregs): Likewise.
+
+2011-02-09  Michael Snyder  <msnyder at vmware.com>
+
+	* i386-dis.c (OP_J): Parenthesize expression to prevent
+	truncated addresses.
+	(print_insn): Fix indentation off-by-one.
+
+2011-02-01  Nick Clifton  <nickc at redhat.com>
+
+	* po/da.po: Updated Danish translation.
+
+2011-01-21  Dave Murphy  <davem at devkitpro.org>
+
+	* ppc-opc.c (NON32, NO371): Remove PPC_OPCODE_PPCPS.
+
+2011-01-18  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* i386-dis.c (sIbT): New.
+	(b_T_mode): Likewise.
+	(dis386): Replace sIb with sIbT on "pushT".
+	(x86_64_table): Replace sIb with Ib on "aam" and "aad".
+	(OP_sI): Handle b_T_mode.  Properly sign-extend byte.
+
+2011-01-18  Jan Kratochvil  <jan.kratochvil at redhat.com>
+
+	* i386-init.h: Regenerated.
+	* i386-tbl.h: Regenerated
+
+2011-01-17  Quentin Neill  <quentin.neill at amd.com>
+
+	* i386-dis.c (REG_XOP_TBM_01): New.
+	(REG_XOP_TBM_02): New.
+	(reg_table): Add REG_XOP_TBM_01 and REG_XOP_TBM_02 tables.
+	(xop_table): Redirect to REG_XOP_TBM_01 and REG_XOP_TBM_02
+	entries, and add bextr instruction.
+
+	* i386-gen.c (cpu_flag_init): Add CPU_TBM_FLAGS, CpuTBM.
+	(cpu_flags): Add CpuTBM.
+
+	* i386-opc.h (CpuTBM) New.
+	(i386_cpu_flags): Add bit cputbm.
+
+	* i386-opc.tbl: Add bextr, blcfill, blci, blcic, blcmsk,
+	blcs, blsfill, blsic, t1mskc, and tzmsk.
+
+2011-01-12  DJ Delorie  <dj at redhat.com>
+
+	* rx-dis.c (print_insn_rx): Support RX_Operand_TwoReg.
+
+2011-01-11  Mingjie Xing  <mingjie.xing at gmail.com>
+
+	* mips-dis.c (print_insn_args): Adjust the value to print the real
+	offset for "+c" argument.
+
+2011-01-10  Nick Clifton  <nickc at redhat.com>
+
+	* po/da.po: Updated Danish translation.
+
+2011-01-05  Nathan Sidwell  <nathan at codesourcery.com>
+
+	* arm-dis.c (thumb32_opcodes): BLX must have bit zero clear.
+
+2011-01-04  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* i386-dis.c (REG_VEX_38F3): New.
+	(PREFIX_0FBC): Likewise.
+	(PREFIX_VEX_38F2): Likewise.
+	(PREFIX_VEX_38F3_REG_1): Likewise.
+	(PREFIX_VEX_38F3_REG_2): Likewise.
+	(PREFIX_VEX_38F3_REG_3): Likewise.
+	(PREFIX_VEX_38F7): Likewise.
+	(VEX_LEN_38F2_P_0): Likewise.
+	(VEX_LEN_38F3_R_1_P_0): Likewise.
+	(VEX_LEN_38F3_R_2_P_0): Likewise.
+	(VEX_LEN_38F3_R_3_P_0): Likewise.
+	(VEX_LEN_38F7_P_0): Likewise.
+	(dis386_twobyte): Use PREFIX_0FBC.
+	(reg_table): Add REG_VEX_38F3.
+	(prefix_table): Add PREFIX_0FBC, PREFIX_VEX_38F2,
+	PREFIX_VEX_38F3_REG_1, PREFIX_VEX_38F3_REG_2,
+	PREFIX_VEX_38F3_REG_3 and PREFIX_VEX_38F7.
+	(vex_table): Use PREFIX_VEX_38F2, REG_VEX_38F3 and
+	PREFIX_VEX_38F7.
+	(vex_len_table): Add VEX_LEN_38F2_P_0, VEX_LEN_38F3_R_1_P_0,
+	VEX_LEN_38F3_R_2_P_0, VEX_LEN_38F3_R_3_P_0 and
+	VEX_LEN_38F7_P_0.
+
+	* i386-gen.c (cpu_flag_init): Add CPU_BMI_FLAGS.
+	(cpu_flags): Add CpuBMI.
+
+	* i386-opc.h (CpuBMI): New.
+	(i386_cpu_flags): Add cpubmi.
+
+	* i386-opc.tbl: Add andn, bextr, blsi, blsmsk, blsr and tzcnt.
+	* i386-init.h: Regenerated.
+	* i386-tbl.h: Likewise.
+
+2011-01-04  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* i386-dis.c (VexGdq): New.
+	(OP_VEX): Handle dq_mode.
+
+2011-01-01  H.J. Lu  <hongjiu.lu at intel.com>
+
+	* i386-gen.c (process_copyright): Update copyright to 2011.
+
+For older changes see ChangeLog-2010
+

+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
+version-control: never
+End:
diff --git a/opcodes/Makefile.am b/opcodes/Makefile.am
index b377c4d..a43aa0d 100644
--- a/opcodes/Makefile.am
+++ b/opcodes/Makefile.am
@@ -234,6 +234,8 @@ TARGET_LIBOPCODES_CFILES = \
 	xstormy16-ibld.c \
 	xstormy16-opc.c \
 	xtensa-dis.c \
+	xgate-dis.c \
+ 	xgate-opc.c \
 	z80-dis.c \
 	z8k-dis.c
 
diff --git a/opcodes/Makefile.in b/opcodes/Makefile.in
index 8ae4b84..f5035ea 100644
--- a/opcodes/Makefile.in
+++ b/opcodes/Makefile.in
@@ -504,6 +504,8 @@ TARGET_LIBOPCODES_CFILES = \
 	xstormy16-ibld.c \
 	xstormy16-opc.c \
 	xtensa-dis.c \
+	xgate-dis.c \
+ 	xgate-opc.c \
 	z80-dis.c \
 	z8k-dis.c
 
@@ -884,6 +886,8 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xc16x-dis.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xc16x-ibld.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xc16x-opc.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xgate-dis.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xgate-opc.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xstormy16-asm.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xstormy16-desc.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xstormy16-dis.Plo at am__quote@
diff --git a/opcodes/alpha-dis.c b/opcodes/alpha-dis.c
index 00b552f..df37143 100644
--- a/opcodes/alpha-dis.c
+++ b/opcodes/alpha-dis.c
@@ -1,5 +1,5 @@
 /* alpha-dis.c -- Disassemble Alpha AXP instructions
-   Copyright 1996, 1998, 1999, 2000, 2001, 2002, 2005, 2007
+   Copyright 1996, 1998, 1999, 2000, 2001, 2002, 2005, 2007, 2012
    Free Software Foundation, Inc.
    Contributed by Richard Henderson <rth at tamu.edu>,
    patterned after the PPC opcode handling written by Ian Lance Taylor.
@@ -21,8 +21,8 @@
    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
    02110-1301, USA.  */
 
-#include <stdio.h>
 #include "sysdep.h"
+#include <stdio.h>
 #include "dis-asm.h"
 #include "opcode/alpha.h"
 
diff --git a/opcodes/alpha-opc.c b/opcodes/alpha-opc.c
index d8c7121..9cf00b0 100644
--- a/opcodes/alpha-opc.c
+++ b/opcodes/alpha-opc.c
@@ -1,6 +1,6 @@
 /* alpha-opc.c -- Alpha AXP opcode list
-   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007
-   Free Software Foundation, Inc.
+   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007,
+   2012  Free Software Foundation, Inc.
    Contributed by Richard Henderson <rth at cygnus.com>,
    patterned after the PPC opcode handling written by Ian Lance Taylor.
 
@@ -21,8 +21,8 @@
    Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
    02110-1301, USA.  */
 
-#include <stdio.h>
 #include "sysdep.h"
+#include <stdio.h>
 #include "opcode/alpha.h"
 #include "bfd.h"
 #include "opintl.h"
diff --git a/opcodes/arc-dis.c b/opcodes/arc-dis.c
index b4cc241..0e16cde 100644
--- a/opcodes/arc-dis.c
+++ b/opcodes/arc-dis.c
@@ -1,6 +1,6 @@
 /* Instruction printing code for the ARC.
-   Copyright 1994, 1995, 1997, 1998, 2000, 2001, 2002, 2005, 2007, 2009, 2010
-   Free Software Foundation, Inc.
+   Copyright 1994, 1995, 1997, 1998, 2000, 2001, 2002, 2005, 2007, 2009,
+   2010, 2012 Free Software Foundation, Inc.
    Contributed by Doug Evans (dje at cygnus.com).
 
    This file is part of libopcodes.
@@ -20,13 +20,12 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include "ansidecl.h"
+#include "sysdep.h"
 #include "libiberty.h"
 #include "dis-asm.h"
 #include "opcode/arc.h"
 #include "elf-bfd.h"
 #include "elf/arc.h"
-#include <string.h>
 #include "opintl.h"
 
 #include <stdarg.h>
@@ -60,15 +59,14 @@ typedef enum
 } a4_decoding_class;
 
 #define BIT(word,n)	((word) & (1 << n))
-#define BITS(word,s,e)  (((word) << (31 - e)) >> (s + (31 - e)))
+#define BITS(word,s,e)  (((word) >> s) & ((1 << (e + 1 - s)) - 1))
 #define OPCODE(word)	(BITS ((word), 27, 31))
 #define FIELDA(word)	(BITS ((word), 21, 26))
 #define FIELDB(word)	(BITS ((word), 15, 20))
 #define FIELDC(word)	(BITS ((word),  9, 14))
 
-/* FIELD D is signed in all of its uses, so we make sure argument is
-   treated as signed for bit shifting purposes:  */
-#define FIELDD(word)	(BITS (((signed int)word), 0, 8))
+/* FIELD D is signed.  */
+#define FIELDD(word)	((BITS ((word), 0, 8) ^ 0x100) - 0x100)
 
 #define PUT_NEXT_WORD_IN(a)						\
   do									\
diff --git a/opcodes/arm-dis.c b/opcodes/arm-dis.c
index 03062ad..e987140 100644
--- a/opcodes/arm-dis.c
+++ b/opcodes/arm-dis.c
@@ -1159,12 +1159,46 @@ static const struct opcode32 arm_opcodes[] =
   {ARM_EXT_V1, 0x04300000, 0x0d700000, "ldrt%c\t%12-15R, %a"},
   {ARM_EXT_V1, 0x04100000, 0x0c500000, "ldr%c\t%12-15r, %a"},
   
+  {ARM_EXT_V1, 0x092d0001, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x092d0002, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x092d0004, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x092d0008, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x092d0010, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x092d0020, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x092d0040, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x092d0080, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x092d0100, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x092d0200, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x092d0400, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x092d0800, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x092d1000, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x092d2000, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x092d4000, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x092d8000, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
   {ARM_EXT_V1, 0x092d0000, 0x0fff0000, "push%c\t%m"},
   {ARM_EXT_V1, 0x08800000, 0x0ff00000, "stm%c\t%16-19R%21'!, %m%22'^"},
   {ARM_EXT_V1, 0x08000000, 0x0e100000, "stm%23?id%24?ba%c\t%16-19R%21'!, %m%22'^"},
+
+  {ARM_EXT_V1, 0x08bd0001, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x08bd0002, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x08bd0004, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x08bd0008, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x08bd0010, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x08bd0020, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x08bd0040, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x08bd0080, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x08bd0100, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x08bd0200, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x08bd0400, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x08bd0800, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x08bd1000, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x08bd2000, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x08bd4000, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
+  {ARM_EXT_V1, 0x08bd8000, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
   {ARM_EXT_V1, 0x08bd0000, 0x0fff0000, "pop%c\t%m"},
   {ARM_EXT_V1, 0x08900000, 0x0f900000, "ldm%c\t%16-19R%21'!, %m%22'^"},
   {ARM_EXT_V1, 0x08100000, 0x0e100000, "ldm%23?id%24?ba%c\t%16-19R%21'!, %m%22'^"},
+
   {ARM_EXT_V1, 0x0a000000, 0x0e000000, "b%24'l%c\t%b"},
   {ARM_EXT_V1, 0x0f000000, 0x0f000000, "svc%c\t%0-23x"},
 
@@ -4697,9 +4731,19 @@ print_insn (bfd_vma pc, struct disassemble_info *info, bfd_boolean little)
 
       /* Start scanning at the start of the function, or wherever
 	 we finished last time.  */
-      start = info->symtab_pos + 1;
-      if (start < private_data->last_mapping_sym)
-	start = private_data->last_mapping_sym;
+      /* PR 14006.  When the address is 0 we are either at the start of the
+	 very first function, or else the first function in a new, unlinked
+	 executable section (eg because uf -ffunction-sections).  Either way
+	 start scanning from the beginning of the symbol table, not where we
+	 left off last time.  */
+      if (pc == 0)
+	start = 0;
+      else
+	{
+	  start = info->symtab_pos + 1;
+	  if (start < private_data->last_mapping_sym)
+	    start = private_data->last_mapping_sym;
+	}
       found = FALSE;
 
       /* First, look for mapping symbols.  */
diff --git a/opcodes/avr-dis.c b/opcodes/avr-dis.c
index b895ad5..385b399 100644
--- a/opcodes/avr-dis.c
+++ b/opcodes/avr-dis.c
@@ -1,5 +1,5 @@
 /* Disassemble AVR instructions.
-   Copyright 1999, 2000, 2002, 2004, 2005, 2006, 2007, 2008
+   Copyright 1999, 2000, 2002, 2004, 2005, 2006, 2007, 2008, 2012
    Free Software Foundation, Inc.
 
    Contributed by Denis Chertykov <denisc at overta.ru>
@@ -21,8 +21,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <assert.h>
 #include "sysdep.h"
+#include <assert.h>
 #include "dis-asm.h"
 #include "opintl.h"
 #include "libiberty.h"
diff --git a/opcodes/bfin-dis.c b/opcodes/bfin-dis.c
index 130dfc7..5022228 100644
--- a/opcodes/bfin-dis.c
+++ b/opcodes/bfin-dis.c
@@ -1,5 +1,5 @@
 /* Disassemble ADI Blackfin Instructions.
-   Copyright 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   Copyright 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of libopcodes.
@@ -19,9 +19,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
 
 #include "opcode/bfin.h"
 
@@ -162,16 +161,7 @@ fmtconst (const_forms_t cf, TIword x, bfd_vma pc, disassemble_info *outf)
     x <<= constant_formats[cf].scale;
 
   if (constant_formats[cf].decimal)
-    {
-      if (constant_formats[cf].leading)
-	{
-	  char ps[10];
-	  sprintf (ps, "%%%ii", constant_formats[cf].leading);
-	  sprintf (buf, ps, x);
-	}
-      else
-	sprintf (buf, "%li", x);
-    }
+    sprintf (buf, "%*li", constant_formats[cf].leading, x);
   else
     {
       if (constant_formats[cf].issigned && x < 0)
diff --git a/opcodes/cgen-asm.c b/opcodes/cgen-asm.c
index f5fde40..901a578 100644
--- a/opcodes/cgen-asm.c
+++ b/opcodes/cgen-asm.c
@@ -1,6 +1,6 @@
 /* CGEN generic assembler support code.
-   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007
-   Free Software Foundation, Inc.
+   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007,
+   2011  Free Software Foundation, Inc.
 
    This file is part of libopcodes.
 
@@ -268,7 +268,23 @@ cgen_parse_signed_integer (CGEN_CPU_DESC cd,
      &result, &value);
   /* FIXME: Examine `result'.  */
   if (!errmsg)
-    *valuep = value;
+    {
+      /* Handle the case where a hex value is parsed on a 64-bit host.
+	 A value like 0xffffe000 is clearly intended to be a negative
+	 16-bit value, but on a 64-bit host it will be parsed by gas
+	 as 0x00000000ffffe000.
+
+	 The shifts below are designed not to produce compile time
+	 warnings on a 32-bit host.  */
+      if (sizeof (value) > 4
+	  && result == CGEN_PARSE_OPERAND_RESULT_NUMBER
+	  && value > 0
+	  && (value & 0x80000000)
+	  && ((value >> 31) == 1))
+	value |= -1 << 31;
+
+      *valuep = value;
+    }
   return errmsg;
 }
 
diff --git a/opcodes/cgen-opc.c b/opcodes/cgen-opc.c
index 263eb2c..b0405cc 100644
--- a/opcodes/cgen-opc.c
+++ b/opcodes/cgen-opc.c
@@ -1,7 +1,7 @@
 /* CGEN generic opcode support.
 
-   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2005, 2007, 2009
-   Free Software Foundation, Inc.
+   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2005, 2007, 2009,
+   2012  Free Software Foundation, Inc.
 
    This file is part of libopcodes.
 
@@ -19,8 +19,8 @@
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
 
-#include "alloca-conf.h"
 #include "sysdep.h"
+#include "alloca-conf.h"
 #include <stdio.h>
 #include "ansidecl.h"
 #include "libiberty.h"
diff --git a/opcodes/config.in b/opcodes/config.in
index fab2a51..7b97957 100644
--- a/opcodes/config.in
+++ b/opcodes/config.in
@@ -1,5 +1,12 @@
 /* config.in.  Generated from configure.in by autoheader.  */
 
+/* Check that config.h is #included before system headers
+   (this works only for glibc, but that should be enough).  */
+#if defined(__GLIBC__) && !defined(__CONFIG_H__)
+#  error config.h must be #included before system headers
+#endif
+#define __CONFIG_H__ 1
+
 /* Define to 1 if translation of program messages to the user's native
    language is requested. */
 #undef ENABLE_NLS
@@ -73,6 +80,9 @@
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
+/* Define if you can safely include both <string.h> and <strings.h>. */
+#undef STRING_WITH_STRINGS
+
 /* Enable extensions on AIX 3, Interix.  */
 #ifndef _ALL_SOURCE
 # undef _ALL_SOURCE
diff --git a/opcodes/configure b/opcodes/configure
index cc69060..dbfca48 100755
--- a/opcodes/configure
+++ b/opcodes/configure
@@ -11565,6 +11565,9 @@ fi
 ac_config_headers="$ac_config_headers config.h:config.in"
 
 
+# PR 14072
+
+
 if test -z "$target" ; then
     as_fn_error "Unrecognized target system type; please check config.sub." "$LINENO" 5
 fi
@@ -12089,6 +12092,38 @@ fi
 
 done
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether string.h and strings.h may both be included" >&5
+$as_echo_n "checking whether string.h and strings.h may both be included... " >&6; }
+if test "${gcc_cv_header_string+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+#include <strings.h>
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gcc_cv_header_string=yes
+else
+  gcc_cv_header_string=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_header_string" >&5
+$as_echo "$gcc_cv_header_string" >&6; }
+if test $gcc_cv_header_string = yes; then
+
+$as_echo "#define STRING_WITH_STRINGS 1" >>confdefs.h
+
+fi
+
 
 ac_fn_c_check_decl "$LINENO" "basename" "ac_cv_have_decl_basename" "$ac_includes_default"
 if test "x$ac_cv_have_decl_basename" = x""yes; then :
@@ -12436,6 +12471,8 @@ if test x${all_targets} = xfalse ; then
 	bfd_m32r_arch)		ta="$ta m32r-asm.lo m32r-desc.lo m32r-dis.lo m32r-ibld.lo m32r-opc.lo m32r-opinst.lo" using_cgen=yes ;;
 	bfd_m68hc11_arch)	ta="$ta m68hc11-dis.lo m68hc11-opc.lo" ;;
 	bfd_m68hc12_arch)	ta="$ta m68hc11-dis.lo m68hc11-opc.lo" ;;
+	bfd_m9s12x_arch)  ta="$ta m68hc11-dis.lo m68hc11-opc.lo" ;;
+	bfd_m9s12xg_arch)	ta="$ta m68hc11-dis.lo m68hc11-opc.lo" ;;
 	bfd_m68k_arch)		ta="$ta m68k-dis.lo m68k-opc.lo" ;;
 	bfd_m88k_arch)		ta="$ta m88k-dis.lo" ;;
 	bfd_mcore_arch)		ta="$ta mcore-dis.lo" ;;
@@ -12492,7 +12529,8 @@ if test x${all_targets} = xfalse ; then
 	bfd_vax_arch)		ta="$ta vax-dis.lo" ;;
 	bfd_w65_arch)		ta="$ta w65-dis.lo" ;;
 	bfd_we32k_arch)		;;
-	bfd_xc16x_arch)		ta="$ta xc16x-asm.lo xc16x-desc.lo xc16x-dis.lo xc16x-ibld.lo xc16x-opc.lo" using_cgen=yes ;;
+	bfd_xc16x_arch)         ta="$ta xc16x-asm.lo xc16x-desc.lo xc16x-dis.lo xc16x-ibld.lo xc16x-opc.lo" using_cgen=yes ;;
+	bfd_xgate_arch) 	ta="$ta xgate-dis.lo xgate-opc.lo" ;;
 	bfd_xstormy16_arch)	ta="$ta xstormy16-asm.lo xstormy16-desc.lo xstormy16-dis.lo xstormy16-ibld.lo xstormy16-opc.lo" using_cgen=yes ;;
 	bfd_xtensa_arch)	ta="$ta xtensa-dis.lo" ;;
 	bfd_z80_arch)		ta="$ta z80-dis.lo" ;;
diff --git a/opcodes/configure.in b/opcodes/configure.in
index 6da3ef1..dadfe4a 100644
--- a/opcodes/configure.in
+++ b/opcodes/configure.in
@@ -45,6 +45,15 @@ AM_BINUTILS_WARNINGS
 
 AC_CONFIG_HEADERS(config.h:config.in)
 
+# PR 14072
+AH_VERBATIM([00_CONFIG_H_CHECK],
+[/* Check that config.h is #included before system headers
+   (this works only for glibc, but that should be enough).  */
+#if defined(__GLIBC__) && !defined(__CONFIG_H__)
+#  error config.h must be #included before system headers
+#endif
+#define __CONFIG_H__ 1])
+
 if test -z "$target" ; then
     AC_MSG_ERROR(Unrecognized target system type; please check config.sub.)
 fi
@@ -67,6 +76,7 @@ AC_SUBST(HDEFINES)
 AC_PROG_INSTALL
 
 AC_CHECK_HEADERS(string.h strings.h stdlib.h limits.h)
+ACX_HEADER_STRING
 
 AC_CHECK_DECLS([basename, stpcpy])
 
@@ -250,6 +260,8 @@ if test x${all_targets} = xfalse ; then
 	bfd_m32r_arch)		ta="$ta m32r-asm.lo m32r-desc.lo m32r-dis.lo m32r-ibld.lo m32r-opc.lo m32r-opinst.lo" using_cgen=yes ;;
 	bfd_m68hc11_arch)	ta="$ta m68hc11-dis.lo m68hc11-opc.lo" ;;
 	bfd_m68hc12_arch)	ta="$ta m68hc11-dis.lo m68hc11-opc.lo" ;;
+	bfd_m9s12x_arch)  ta="$ta m68hc11-dis.lo m68hc11-opc.lo" ;;
+	bfd_m9s12xg_arch)	ta="$ta m68hc11-dis.lo m68hc11-opc.lo" ;;
 	bfd_m68k_arch)		ta="$ta m68k-dis.lo m68k-opc.lo" ;;
 	bfd_m88k_arch)		ta="$ta m88k-dis.lo" ;;
 	bfd_mcore_arch)		ta="$ta mcore-dis.lo" ;;
@@ -306,7 +318,8 @@ if test x${all_targets} = xfalse ; then
 	bfd_vax_arch)		ta="$ta vax-dis.lo" ;;
 	bfd_w65_arch)		ta="$ta w65-dis.lo" ;;
 	bfd_we32k_arch)		;;
-	bfd_xc16x_arch)		ta="$ta xc16x-asm.lo xc16x-desc.lo xc16x-dis.lo xc16x-ibld.lo xc16x-opc.lo" using_cgen=yes ;;
+	bfd_xc16x_arch)         ta="$ta xc16x-asm.lo xc16x-desc.lo xc16x-dis.lo xc16x-ibld.lo xc16x-opc.lo" using_cgen=yes ;;
+	bfd_xgate_arch) 	ta="$ta xgate-dis.lo xgate-opc.lo" ;;
 	bfd_xstormy16_arch)	ta="$ta xstormy16-asm.lo xstormy16-desc.lo xstormy16-dis.lo xstormy16-ibld.lo xstormy16-opc.lo" using_cgen=yes ;;
 	bfd_xtensa_arch)	ta="$ta xtensa-dis.lo" ;;
 	bfd_z80_arch)		ta="$ta z80-dis.lo" ;;
diff --git a/opcodes/cr16-dis.c b/opcodes/cr16-dis.c
index 0aaf61c..f299fef 100644
--- a/opcodes/cr16-dis.c
+++ b/opcodes/cr16-dis.c
@@ -1,5 +1,5 @@
 /* Disassembler code for CR16.
-   Copyright 2007, 2008, 2009  Free Software Foundation, Inc.
+   Copyright 2007, 2008, 2009, 2012  Free Software Foundation, Inc.
    Contributed by M R Swami Reddy (MR.Swami.Reddy at nsc.com).
 
    This file is part of GAS, GDB and the GNU binutils.
@@ -18,8 +18,8 @@
    along with this program; if not, write to the Free Software Foundation,
    Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
 
-#include "dis-asm.h"
 #include "sysdep.h"
+#include "dis-asm.h"
 #include "opcode/cr16.h"
 #include "libiberty.h"
 
@@ -679,7 +679,7 @@ print_arg (argument *a, bfd_vma memaddr, struct disassemble_info *info)
 	(sign_flag) ? func (stream, "%s", "*-"): func (stream, "%s","*+");
 
       /* PR 10173: Avoid printing the 0x prefix twice.  */
-      if (info->num_symbols > 0)
+      if (info->symtab_size > 0)
 	func (stream, "%s", "0x");
       number = ((relative ? memaddr : 0) +
 		(sign_flag ? ((- a->constant) & 0xffffffe) : a->constant));
diff --git a/opcodes/cris-dis.c b/opcodes/cris-dis.c
index 01ada9d..64e8e1d 100644
--- a/opcodes/cris-dis.c
+++ b/opcodes/cris-dis.c
@@ -1,5 +1,5 @@
 /* Disassembler code for CRIS.
-   Copyright 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009
+   Copyright 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009, 2012
    Free Software Foundation, Inc.
    Contributed by Axis Communications AB, Lund, Sweden.
    Written by Hans-Peter Nilsson.
@@ -21,8 +21,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include "dis-asm.h"
 #include "sysdep.h"
+#include "dis-asm.h"
 #include "opcode/cris.h"
 #include "libiberty.h"
 

diff --git a/opcodes/crx-dis.c b/opcodes/crx-dis.c
index f909897..710a96e 100644
--- a/opcodes/crx-dis.c
+++ b/opcodes/crx-dis.c
@@ -1,5 +1,5 @@
 /* Disassembler code for CRX.
-   Copyright 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   Copyright 2004, 2005, 2006, 2007, 2012 Free Software Foundation, Inc.
    Contributed by Tomer Levi, NSC, Israel.
    Written by Tomer Levi.
 
@@ -20,8 +20,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include "dis-asm.h"
 #include "sysdep.h"
+#include "dis-asm.h"
 #include "opcode/crx.h"
 
 /* String to print when opcode was not matched.  */
@@ -548,7 +548,7 @@ print_arg (argument *a, bfd_vma memaddr, struct disassemble_info *info)
 		    func (stream, "%s", string);
 		  }
 		else
-		  func (stream, "$0x%lx", a->constant);
+		  func (stream, "$0x%lx", a->constant & 0xffffffff);
 	    }
 	  else
             {
@@ -557,12 +557,12 @@ print_arg (argument *a, bfd_vma memaddr, struct disassemble_info *info)
             }
         }
       else
-	func (stream, "$0x%lx", a->constant);
+	func (stream, "$0x%lx", a->constant & 0xffffffff);
       break;
 
     case arg_idxr:
-      func (stream, "0x%lx(%s,%s,%d)", a->constant, getregname (a->r),
-	    getregname (a->i_r), powerof2 (a->scale));
+      func (stream, "0x%lx(%s,%s,%d)", a->constant & 0xffffffff,
+	    getregname (a->r), getregname (a->i_r), powerof2 (a->scale));
       break;
 
     case arg_rbase:
@@ -570,7 +570,7 @@ print_arg (argument *a, bfd_vma memaddr, struct disassemble_info *info)
       break;
 
     case arg_cr:
-      func (stream, "0x%lx(%s)", a->constant, getregname (a->r));
+      func (stream, "0x%lx(%s)", a->constant & 0xffffffff, getregname (a->r));
 
       if (IS_INSN_TYPE (LD_STOR_INS_INC))
 	func (stream, "+");
diff --git a/opcodes/crx-opc.c b/opcodes/crx-opc.c
index b046c91..65e2e86 100644
--- a/opcodes/crx-opc.c
+++ b/opcodes/crx-opc.c
@@ -1,5 +1,5 @@
 /* crx-opc.c -- Table of opcodes for the CRX processor.
-   Copyright 2004, 2005, 2007 Free Software Foundation, Inc.
+   Copyright 2004, 2005, 2007, 2012 Free Software Foundation, Inc.
    Contributed by Tomer Levi NSC, Israel.
    Originally written for GAS 2.12 by Tomer Levi.
 
@@ -701,7 +701,7 @@ The value in entry <N> is mapped to the value <N>
 Example (for N=5):
 
     cst4_map[5]=-4  -->>	5		*/
-const long cst4_map[] =
+const int cst4_map[] =
 {
   0, 1, 2, 3, 4, -4, -1, 7, 8, 16, 32, 20, 12, 48
 };
diff --git a/opcodes/d10v-dis.c b/opcodes/d10v-dis.c
index dbedb3d..4e601b7 100644
--- a/opcodes/d10v-dis.c
+++ b/opcodes/d10v-dis.c
@@ -1,5 +1,5 @@
 /* Disassemble D10V instructions.
-   Copyright 1996, 1997, 1998, 2000, 2001, 2005, 2007
+   Copyright 1996, 1997, 1998, 2000, 2001, 2005, 2007, 2012
    Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
@@ -19,9 +19,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <stdio.h>
-
 #include "sysdep.h"
+#include <stdio.h>
 #include "opcode/d10v.h"
 #include "dis-asm.h"
 
diff --git a/opcodes/d10v-opc.c b/opcodes/d10v-opc.c
index f99d66a..8df62cb 100644
--- a/opcodes/d10v-opc.c
+++ b/opcodes/d10v-opc.c
@@ -1,5 +1,5 @@
 /* d10v-opc.c -- D10V opcode list
-   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2005, 2007
+   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2005, 2007, 2012
    Free Software Foundation, Inc.
    Written by Martin Hunt, Cygnus Support
 
@@ -20,8 +20,8 @@
    Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <stdio.h>
 #include "sysdep.h"
+#include <stdio.h>
 #include "opcode/d10v.h"
 
 
diff --git a/opcodes/d30v-dis.c b/opcodes/d30v-dis.c
index 5f5d07f..972d367 100644
--- a/opcodes/d30v-dis.c
+++ b/opcodes/d30v-dis.c
@@ -1,5 +1,5 @@
 /* Disassemble D30V instructions.
-   Copyright 1997, 1998, 2000, 2001, 2005, 2007
+   Copyright 1997, 1998, 2000, 2001, 2005, 2007, 2012
    Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
@@ -19,8 +19,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <stdio.h>
 #include "sysdep.h"
+#include <stdio.h>
 #include "opcode/d30v.h"
 #include "dis-asm.h"
 #include "opintl.h"
diff --git a/opcodes/d30v-opc.c b/opcodes/d30v-opc.c
index 806fb3c..b7e35e5 100644
--- a/opcodes/d30v-opc.c
+++ b/opcodes/d30v-opc.c
@@ -1,5 +1,6 @@
 /* d30v-opc.c -- D30V opcode list
-   Copyright 1997, 1998, 1999, 2000, 2005, 2007 Free Software Foundation, Inc.
+   Copyright 1997, 1998, 1999, 2000, 2005, 2007, 2012
+   Free Software Foundation, Inc.
    Written by Martin Hunt, Cygnus Support
 
    This file is part of the GNU opcodes library.
@@ -19,8 +20,8 @@
    Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <stdio.h>
 #include "sysdep.h"
+#include <stdio.h>
 #include "opcode/d30v.h"
 
 /* This table is sorted.
diff --git a/opcodes/disassemble.c b/opcodes/disassemble.c
index 0b63135..3dad64b 100644
--- a/opcodes/disassemble.c
+++ b/opcodes/disassemble.c
@@ -1,6 +1,7 @@
 /* Select disassembly routine for specified architecture.
    Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-   2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+   2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+   Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
 
@@ -90,6 +91,7 @@
 #define ARCH_w65
 #define ARCH_xstormy16
 #define ARCH_xc16x
+#define ARCH_xgate
 #define ARCH_xtensa
 #define ARCH_z80
 #define ARCH_z8k
@@ -246,13 +248,20 @@ disassembler (abfd)
       disassemble = print_insn_m32r;
       break;
 #endif
-#if defined(ARCH_m68hc11) || defined(ARCH_m68hc12)
+#if defined(ARCH_m68hc11) || defined(ARCH_m68hc12) \
+    || defined(ARCH_9s12x) || defined(ARCH_m9s12xg)
     case bfd_arch_m68hc11:
       disassemble = print_insn_m68hc11;
       break;
     case bfd_arch_m68hc12:
       disassemble = print_insn_m68hc12;
       break;
+    case bfd_arch_m9s12x:
+      disassemble = print_insn_m9s12x;
+      break;
+    case bfd_arch_m9s12xg:
+      disassemble = print_insn_m9s12xg;
+      break;
 #endif
 #ifdef ARCH_m68k
     case bfd_arch_m68k:
@@ -429,6 +438,11 @@ disassembler (abfd)
       disassemble = print_insn_w65;
       break;
 #endif
+#ifdef ARCH_xgate
+    case bfd_arch_xgate:
+      disassemble = print_insn_xgate;
+      break;
+#endif
 #ifdef ARCH_xstormy16
     case bfd_arch_xstormy16:
       disassemble = print_insn_xstormy16;
@@ -566,6 +580,16 @@ disassemble_init_for_target (struct disassemble_info * info)
 	}
       break;
 #endif
+#ifdef ARCH_powerpc
+    case bfd_arch_powerpc:
+#endif
+#ifdef ARCH_rs6000
+    case bfd_arch_rs6000:
+#endif
+#if defined (ARCH_powerpc) || defined (ARCH_rs6000)
+      disassemble_init_powerpc (info);
+      break;
+#endif
     default:
       break;
     }
diff --git a/opcodes/frv-asm.c b/opcodes/frv-asm.c
index dffa059..3da8261 100644
--- a/opcodes/frv-asm.c
+++ b/opcodes/frv-asm.c
@@ -465,11 +465,11 @@ parse_uhi16 (CGEN_CPU_DESC cd,
 	  if (errmsg == NULL
 	      && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
 	    {
-	      /* If bfd_vma is wider than 32 bits, but we have a sign-
-		 or zero-extension, truncate it.  */
-	      if (value >= - ((bfd_vma)1 << 31)
-		  || value <= ((bfd_vma)1 << 31) - (bfd_vma)1)
-		value &= (((bfd_vma)1 << 16) << 16) - 1;
+ 	      /* If value is wider than 32 bits then be
+ 		 careful about how we extract bits 16-31.  */
+ 	      if (sizeof (value) > 4)
+ 		value &= (((bfd_vma)1 << 16) << 16) - 1;
+
 	      value >>= 16;
 	    }
 	  *valuep = value;
diff --git a/opcodes/h8500-dis.c b/opcodes/h8500-dis.c
index 1c9463a..880cc7f 100644
--- a/opcodes/h8500-dis.c
+++ b/opcodes/h8500-dis.c
@@ -1,5 +1,5 @@
 /* Disassemble h8500 instructions.
-   Copyright 1993, 1998, 2000, 2001, 2002, 2004, 2005, 2007
+   Copyright 1993, 1998, 2000, 2001, 2002, 2004, 2005, 2007, 2012
    Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
@@ -19,12 +19,12 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include <stdio.h>
 
 #define DISASSEMBLER_TABLE
 #define DEFINE_TABLE
 
-#include "sysdep.h"
 #include "h8500-opc.h"
 #include "dis-asm.h"
 #include "opintl.h"
diff --git a/opcodes/i370-dis.c b/opcodes/i370-dis.c
index 98c110b..05a6341 100644
--- a/opcodes/i370-dis.c
+++ b/opcodes/i370-dis.c
@@ -1,5 +1,6 @@
 /* i370-dis.c -- Disassemble Instruction 370 (ESA/390) instructions
-   Copyright 1994, 2000, 2003, 2005, 2007  Free Software Foundation, Inc.
+   Copyright 1994, 2000, 2003, 2005, 2007, 2012
+   Free Software Foundation, Inc.
    PowerPC version written by Ian Lance Taylor, Cygnus Support
    Rewritten for i370 ESA/390 support by Linas Vepstas <linas at linas.org>
 
@@ -20,8 +21,8 @@
    Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <stdio.h>
 #include "sysdep.h"
+#include <stdio.h>
 #include "dis-asm.h"
 #include "opcode/i370.h"
 
diff --git a/opcodes/i370-opc.c b/opcodes/i370-opc.c
index e684ff4..68a8e01 100644
--- a/opcodes/i370-opc.c
+++ b/opcodes/i370-opc.c
@@ -1,5 +1,5 @@
 /* i370-opc.c -- Instruction 370 (ESA/390) architecture opcode list
-   Copyright 1994, 1999, 2000, 2001, 2003, 2005, 2007
+   Copyright 1994, 1999, 2000, 2001, 2003, 2005, 2007, 2012
    Free Software Foundation, Inc.
    PowerPC version written by Ian Lance Taylor, Cygnus Support
    Rewritten for i370 ESA/390 support by Linas Vepstas <linas at linas.org> 1998, 1999
@@ -21,8 +21,8 @@
    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
    02110-1301, USA.  */
 
-#include <stdio.h>
 #include "sysdep.h"
+#include <stdio.h>
 #include "opcode/i370.h"
 
 /* This file holds the i370 opcode table.  The opcode table
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index 019a8f5..9abce1a 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -108,6 +108,9 @@ static void OP_3DNowSuffix (int, int);
 static void CMP_Fixup (int, int);
 static void BadOp (void);
 static void REP_Fixup (int, int);
+static void HLE_Fixup1 (int, int);
+static void HLE_Fixup2 (int, int);
+static void HLE_Fixup3 (int, int);
 static void CMPXCHG8B_Fixup (int, int);
 static void XMM_Fixup (int, int);
 static void CRC32_Fixup (int, int);
@@ -412,6 +415,14 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
 #define ALr { REP_Fixup, al_reg }
 #define eAXr { REP_Fixup, eAX_reg }
 
+/* Used handle HLE prefix for lockable instructions.  */
+#define Ebh1 { HLE_Fixup1, b_mode }
+#define Evh1 { HLE_Fixup1, v_mode }
+#define Ebh2 { HLE_Fixup2, b_mode }
+#define Evh2 { HLE_Fixup2, v_mode }
+#define Ebh3 { HLE_Fixup3, b_mode }
+#define Evh3 { HLE_Fixup3, v_mode }
+
 #define cond_jump_flag { NULL, cond_jump_mode }
 #define loop_jcxz_flag { NULL, loop_jcxz_mode }
 
@@ -642,6 +653,8 @@ enum
 enum
 {
   MOD_8D = 0,
+  MOD_C6_REG_7,
+  MOD_C7_REG_7,
   MOD_0F01_REG_0,
   MOD_0F01_REG_1,
   MOD_0F01_REG_2,
@@ -730,7 +743,9 @@ enum
 
 enum
 {
-  RM_0F01_REG_0 = 0,
+  RM_C6_REG_7 = 0,
+  RM_C7_REG_7,
+  RM_0F01_REG_0,
   RM_0F01_REG_1,
   RM_0F01_REG_2,
   RM_0F01_REG_3,
@@ -836,6 +851,7 @@ enum
   PREFIX_0F38DF,
   PREFIX_0F38F0,
   PREFIX_0F38F1,
+  PREFIX_0F38F6,
   PREFIX_0F3A08,
   PREFIX_0F3A09,
   PREFIX_0F3A0A,
@@ -1646,8 +1662,8 @@ struct dis386 {
 
 static const struct dis386 dis386[] = {
   /* 00 */
-  { "addB",		{ Eb, Gb } },
-  { "addS",		{ Ev, Gv } },
+  { "addB",		{ Ebh1, Gb } },
+  { "addS",		{ Evh1, Gv } },
   { "addB",		{ Gb, EbS } },
   { "addS",		{ Gv, EvS } },
   { "addB",		{ AL, Ib } },
@@ -1655,8 +1671,8 @@ static const struct dis386 dis386[] = {
   { X86_64_TABLE (X86_64_06) },
   { X86_64_TABLE (X86_64_07) },
   /* 08 */
-  { "orB",		{ Eb, Gb } },
-  { "orS",		{ Ev, Gv } },
+  { "orB",		{ Ebh1, Gb } },
+  { "orS",		{ Evh1, Gv } },
   { "orB",		{ Gb, EbS } },
   { "orS",		{ Gv, EvS } },
   { "orB",		{ AL, Ib } },
@@ -1664,8 +1680,8 @@ static const struct dis386 dis386[] = {
   { X86_64_TABLE (X86_64_0D) },
   { Bad_Opcode },	/* 0x0f extended opcode escape */
   /* 10 */
-  { "adcB",		{ Eb, Gb } },
-  { "adcS",		{ Ev, Gv } },
+  { "adcB",		{ Ebh1, Gb } },
+  { "adcS",		{ Evh1, Gv } },
   { "adcB",		{ Gb, EbS } },
   { "adcS",		{ Gv, EvS } },
   { "adcB",		{ AL, Ib } },
@@ -1673,8 +1689,8 @@ static const struct dis386 dis386[] = {
   { X86_64_TABLE (X86_64_16) },
   { X86_64_TABLE (X86_64_17) },
   /* 18 */
-  { "sbbB",		{ Eb, Gb } },
-  { "sbbS",		{ Ev, Gv } },
+  { "sbbB",		{ Ebh1, Gb } },
+  { "sbbS",		{ Evh1, Gv } },
   { "sbbB",		{ Gb, EbS } },
   { "sbbS",		{ Gv, EvS } },
   { "sbbB",		{ AL, Ib } },
@@ -1682,8 +1698,8 @@ static const struct dis386 dis386[] = {
   { X86_64_TABLE (X86_64_1E) },
   { X86_64_TABLE (X86_64_1F) },
   /* 20 */
-  { "andB",		{ Eb, Gb } },
-  { "andS",		{ Ev, Gv } },
+  { "andB",		{ Ebh1, Gb } },
+  { "andS",		{ Evh1, Gv } },
   { "andB",		{ Gb, EbS } },
   { "andS",		{ Gv, EvS } },
   { "andB",		{ AL, Ib } },
@@ -1691,8 +1707,8 @@ static const struct dis386 dis386[] = {
   { Bad_Opcode },	/* SEG ES prefix */
   { X86_64_TABLE (X86_64_27) },
   /* 28 */
-  { "subB",		{ Eb, Gb } },
-  { "subS",		{ Ev, Gv } },
+  { "subB",		{ Ebh1, Gb } },
+  { "subS",		{ Evh1, Gv } },
   { "subB",		{ Gb, EbS } },
   { "subS",		{ Gv, EvS } },
   { "subB",		{ AL, Ib } },
@@ -1700,8 +1716,8 @@ static const struct dis386 dis386[] = {
   { Bad_Opcode },	/* SEG CS prefix */
   { X86_64_TABLE (X86_64_2F) },
   /* 30 */
-  { "xorB",		{ Eb, Gb } },
-  { "xorS",		{ Ev, Gv } },
+  { "xorB",		{ Ebh1, Gb } },
+  { "xorS",		{ Evh1, Gv } },
   { "xorB",		{ Gb, EbS } },
   { "xorS",		{ Gv, EvS } },
   { "xorB",		{ AL, Ib } },
@@ -1796,11 +1812,11 @@ static const struct dis386 dis386[] = {
   { REG_TABLE (REG_82) },
   { "testB",		{ Eb, Gb } },
   { "testS",		{ Ev, Gv } },
-  { "xchgB",		{ Eb, Gb } },
-  { "xchgS",		{ Ev, Gv } },
+  { "xchgB",		{ Ebh2, Gb } },
+  { "xchgS",		{ Evh2, Gv } },
   /* 88 */
-  { "movB",		{ Eb, Gb } },
-  { "movS",		{ Ev, Gv } },
+  { "movB",		{ Ebh3, Gb } },
+  { "movS",		{ Evh3, Gv } },
   { "movB",		{ Gb, EbS } },
   { "movS",		{ Gv, EvS } },
   { "movD",		{ Sv, Sw } },
@@ -2129,16 +2145,16 @@ static const struct dis386 dis386_twobyte[] = {
   { "pushT",		{ gs } },
   { "popT",		{ gs } },
   { "rsm",		{ XX } },
-  { "btsS",		{ Ev, Gv } },
+  { "btsS",		{ Evh1, Gv } },
   { "shrdS",		{ Ev, Gv, Ib } },
   { "shrdS",		{ Ev, Gv, CL } },
   { REG_TABLE (REG_0FAE) },
   { "imulS",		{ Gv, Ev } },
   /* b0 */
-  { "cmpxchgB",		{ Eb, Gb } },
-  { "cmpxchgS",		{ Ev, Gv } },
+  { "cmpxchgB",		{ Ebh1, Gb } },
+  { "cmpxchgS",		{ Evh1, Gv } },
   { MOD_TABLE (MOD_0FB2) },
-  { "btrS",		{ Ev, Gv } },
+  { "btrS",		{ Evh1, Gv } },
   { MOD_TABLE (MOD_0FB4) },
   { MOD_TABLE (MOD_0FB5) },
   { "movz{bR|x}",	{ Gv, Eb } },
@@ -2147,14 +2163,14 @@ static const struct dis386 dis386_twobyte[] = {
   { PREFIX_TABLE (PREFIX_0FB8) },
   { "ud1",		{ XX } },
   { REG_TABLE (REG_0FBA) },
-  { "btcS",		{ Ev, Gv } },
+  { "btcS",		{ Evh1, Gv } },
   { PREFIX_TABLE (PREFIX_0FBC) },
   { PREFIX_TABLE (PREFIX_0FBD) },
   { "movs{bR|x}",	{ Gv, Eb } },
   { "movs{wR|x}",	{ Gv, Ew } }, /* yes, there really is movsww ! */
   /* c0 */
-  { "xaddB",		{ Eb, Gb } },
-  { "xaddS",		{ Ev, Gv } },
+  { "xaddB",		{ Ebh1, Gb } },
+  { "xaddS",		{ Evh1, Gv } },
   { PREFIX_TABLE (PREFIX_0FC2) },
   { PREFIX_TABLE (PREFIX_0FC3) },
   { "pinsrw",		{ MX, Edqw, Ib } },
@@ -2436,35 +2452,35 @@ static const char *att_names_ymm[] = {
 static const struct dis386 reg_table[][8] = {
   /* REG_80 */
   {
-    { "addA",	{ Eb, Ib } },
-    { "orA",	{ Eb, Ib } },
-    { "adcA",	{ Eb, Ib } },
-    { "sbbA",	{ Eb, Ib } },
-    { "andA",	{ Eb, Ib } },
-    { "subA",	{ Eb, Ib } },
-    { "xorA",	{ Eb, Ib } },
+    { "addA",	{ Ebh1, Ib } },
+    { "orA",	{ Ebh1, Ib } },
+    { "adcA",	{ Ebh1, Ib } },
+    { "sbbA",	{ Ebh1, Ib } },
+    { "andA",	{ Ebh1, Ib } },
+    { "subA",	{ Ebh1, Ib } },
+    { "xorA",	{ Ebh1, Ib } },
     { "cmpA",	{ Eb, Ib } },
   },
   /* REG_81 */
   {
-    { "addQ",	{ Ev, Iv } },
-    { "orQ",	{ Ev, Iv } },
-    { "adcQ",	{ Ev, Iv } },
-    { "sbbQ",	{ Ev, Iv } },
-    { "andQ",	{ Ev, Iv } },
-    { "subQ",	{ Ev, Iv } },
-    { "xorQ",	{ Ev, Iv } },
+    { "addQ",	{ Evh1, Iv } },
+    { "orQ",	{ Evh1, Iv } },
+    { "adcQ",	{ Evh1, Iv } },
+    { "sbbQ",	{ Evh1, Iv } },
+    { "andQ",	{ Evh1, Iv } },
+    { "subQ",	{ Evh1, Iv } },
+    { "xorQ",	{ Evh1, Iv } },
     { "cmpQ",	{ Ev, Iv } },
   },
   /* REG_82 */
   {
-    { "addQ",	{ Ev, sIb } },
-    { "orQ",	{ Ev, sIb } },
-    { "adcQ",	{ Ev, sIb } },
-    { "sbbQ",	{ Ev, sIb } },
-    { "andQ",	{ Ev, sIb } },
-    { "subQ",	{ Ev, sIb } },
-    { "xorQ",	{ Ev, sIb } },
+    { "addQ",	{ Evh1, sIb } },
+    { "orQ",	{ Evh1, sIb } },
+    { "adcQ",	{ Evh1, sIb } },
+    { "sbbQ",	{ Evh1, sIb } },
+    { "andQ",	{ Evh1, sIb } },
+    { "subQ",	{ Evh1, sIb } },
+    { "xorQ",	{ Evh1, sIb } },
     { "cmpQ",	{ Ev, sIb } },
   },
   /* REG_8F */
@@ -2500,11 +2516,25 @@ static const struct dis386 reg_table[][8] = {
   },
   /* REG_C6 */
   {
-    { "movA",	{ Eb, Ib } },
+    { "movA",	{ Ebh3, Ib } },
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { MOD_TABLE (MOD_C6_REG_7) },
   },
   /* REG_C7 */
   {
-    { "movQ",	{ Ev, Iv } },
+    { "movQ",	{ Evh3, Iv } },
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { MOD_TABLE (MOD_C7_REG_7) },
   },
   /* REG_D0 */
   {
@@ -2554,8 +2584,8 @@ static const struct dis386 reg_table[][8] = {
   {
     { "testA",	{ Eb, Ib } },
     { Bad_Opcode },
-    { "notA",	{ Eb } },
-    { "negA",	{ Eb } },
+    { "notA",	{ Ebh1 } },
+    { "negA",	{ Ebh1 } },
     { "mulA",	{ Eb } },	/* Don't print the implicit %al register,  */
     { "imulA",	{ Eb } },	/* to distinguish these opcodes from other */
     { "divA",	{ Eb } },	/* mul/imul opcodes.  Do the same for div  */
@@ -2565,8 +2595,8 @@ static const struct dis386 reg_table[][8] = {
   {
     { "testQ",	{ Ev, Iv } },
     { Bad_Opcode },
-    { "notQ",	{ Ev } },
-    { "negQ",	{ Ev } },
+    { "notQ",	{ Evh1 } },
+    { "negQ",	{ Evh1 } },
     { "mulQ",	{ Ev } },	/* Don't print the implicit register.  */
     { "imulQ",	{ Ev } },
     { "divQ",	{ Ev } },
@@ -2574,13 +2604,13 @@ static const struct dis386 reg_table[][8] = {
   },
   /* REG_FE */
   {
-    { "incA",	{ Eb } },
-    { "decA",	{ Eb } },
+    { "incA",	{ Ebh1 } },
+    { "decA",	{ Ebh1 } },
   },
   /* REG_FF */
   {
-    { "incQ",	{ Ev } },
-    { "decQ",	{ Ev } },
+    { "incQ",	{ Evh1 } },
+    { "decQ",	{ Evh1 } },
     { "call{T|}", { indirEv } },
     { "Jcall{T|}", { indirEp } },
     { "jmp{T|}", { indirEv } },
@@ -2686,9 +2716,9 @@ static const struct dis386 reg_table[][8] = {
     { Bad_Opcode },
     { Bad_Opcode },
     { "btQ",	{ Ev, Ib } },
-    { "btsQ",	{ Ev, Ib } },
-    { "btrQ",	{ Ev, Ib } },
-    { "btcQ",	{ Ev, Ib } },
+    { "btsQ",	{ Evh1, Ib } },
+    { "btrQ",	{ Evh1, Ib } },
+    { "btcQ",	{ Evh1, Ib } },
   },
   /* REG_0FC7 */
   {
@@ -3456,6 +3486,14 @@ static const struct dis386 prefix_table[][4] = {
     { "crc32",	{ Gdq, { CRC32_Fixup, v_mode } } },	
   },
 
+  /* PREFIX_0F38F6 */
+  {
+    { Bad_Opcode },
+    { "adoxS",	{ Gdq, Edq} },
+    { "adcxS",	{ Gdq, Edq} },
+    { Bad_Opcode },
+  },
+
   /* PREFIX_0F3A08 */
   {
     { Bad_Opcode },
@@ -6026,7 +6064,7 @@ static const struct dis386 three_byte_table[][256] = {
     { Bad_Opcode },
     { Bad_Opcode },
     { Bad_Opcode },
-    { Bad_Opcode },
+    { PREFIX_TABLE (PREFIX_0F38F6) },
     { Bad_Opcode },
     /* f8 */
     { Bad_Opcode },
@@ -10066,6 +10104,16 @@ static const struct dis386 mod_table[][2] = {
     { "leaS",		{ Gv, M } },
   },
   {
+    /* MOD_C6_REG_7 */
+    { Bad_Opcode },
+    { RM_TABLE (RM_C6_REG_7) },
+  },
+  {
+    /* MOD_C7_REG_7 */
+    { Bad_Opcode },
+    { RM_TABLE (RM_C7_REG_7) },
+  },
+  {
     /* MOD_0F01_REG_0 */
     { X86_64_TABLE (X86_64_0F01_REG_0) },
     { RM_TABLE (RM_0F01_REG_0) },
@@ -10284,6 +10332,7 @@ static const struct dis386 mod_table[][2] = {
   {
     /* MOD_0FC7_REG_7 */
     { "vmptrst",	{ Mq } },
+    { "rdseed",		{ Ev } },
   },
   {
     /* MOD_0FD7 */
@@ -10454,6 +10503,14 @@ static const struct dis386 mod_table[][2] = {
 
 static const struct dis386 rm_table[][8] = {
   {
+    /* RM_C6_REG_7 */
+    { "xabort",		{ Skip_MODRM, Ib } },
+  },
+  {
+    /* RM_C7_REG_7 */
+    { "xbeginT",	{ Skip_MODRM, Jv } },
+  },
+  {
     /* RM_0F01_REG_0 */
     { Bad_Opcode },
     { "vmcall",		{ Skip_MODRM } },
@@ -10470,6 +10527,12 @@ static const struct dis386 rm_table[][8] = {
     /* RM_0F01_REG_2 */
     { "xgetbv",		{ Skip_MODRM } },
     { "xsetbv",		{ Skip_MODRM } },
+    { Bad_Opcode },
+    { Bad_Opcode },
+    { "vmfunc",		{ Skip_MODRM } },
+    { "xend",		{ Skip_MODRM } },
+    { "xtest",		{ Skip_MODRM } },
+    { Bad_Opcode },
   },
   {
     /* RM_0F01_REG_3 */
@@ -10510,6 +10573,8 @@ static const struct dis386 rm_table[][8] = {
 #define DATA16_PREFIX	(0x66 | 0x100)
 #define DATA32_PREFIX	(0x66 | 0x200)
 #define REP_PREFIX	(0xf3 | 0x100)
+#define XACQUIRE_PREFIX	(0xf2 | 0x200)
+#define XRELEASE_PREFIX	(0xf3 | 0x400)
 
 static int
 ckprefix (void)
@@ -10740,6 +10805,10 @@ prefix_name (int pref, int sizeflag)
       return "data32";
     case REP_PREFIX:
       return "rep";
+    case XACQUIRE_PREFIX:
+      return "xacquire";
+    case XRELEASE_PREFIX:
+      return "xrelease";
     default:
       return NULL;
     }
@@ -14358,6 +14427,57 @@ REP_Fixup (int bytemode, int sizeflag)
     }
 }
 
+/* Similar to OP_E.  But the 0xf2/0xf3 prefixes should be displayed as
+   "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
+ */
+
+static void
+HLE_Fixup1 (int bytemode, int sizeflag)
+{
+  if (modrm.mod != 3
+      && (prefixes & PREFIX_LOCK) != 0)
+    {
+      if (prefixes & PREFIX_REPZ)
+	all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
+      if (prefixes & PREFIX_REPNZ)
+	all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
+    }
+
+  OP_E (bytemode, sizeflag);
+}
+
+/* Similar to OP_E.  But the 0xf2/0xf3 prefixes should be displayed as
+   "xacquire"/"xrelease" for memory operand.  No check for LOCK prefix.
+ */
+
+static void
+HLE_Fixup2 (int bytemode, int sizeflag)
+{
+  if (modrm.mod != 3)
+    {
+      if (prefixes & PREFIX_REPZ)
+	all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
+      if (prefixes & PREFIX_REPNZ)
+	all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
+    }
+
+  OP_E (bytemode, sizeflag);
+}
+
+/* Similar to OP_E.  But the 0xf3 prefixes should be displayed as
+   "xrelease" for memory operand.  No check for LOCK prefix.   */
+
+static void
+HLE_Fixup3 (int bytemode, int sizeflag)
+{
+  if (modrm.mod != 3
+      && last_repz_prefix > last_repnz_prefix
+      && (prefixes & PREFIX_REPZ) != 0)
+    all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
+
+  OP_E (bytemode, sizeflag);
+}
+
 static void
 CMPXCHG8B_Fixup (int bytemode, int sizeflag)
 {
@@ -14369,6 +14489,14 @@ CMPXCHG8B_Fixup (int bytemode, int sizeflag)
       mnemonicendp = stpcpy (p, "16b");
       bytemode = o_mode;
     }
+  else if ((prefixes & PREFIX_LOCK) != 0)
+    {
+      if (prefixes & PREFIX_REPZ)
+	all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
+      if (prefixes & PREFIX_REPNZ)
+	all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
+    }
+
   OP_M (bytemode, sizeflag);
 }
 
diff --git a/opcodes/i386-gen.c b/opcodes/i386-gen.c
index 4dd75a2..722bb15 100644
--- a/opcodes/i386-gen.c
+++ b/opcodes/i386-gen.c
@@ -1,4 +1,4 @@
-/* Copyright 2007, 2008, 2009, 2010, 2011
+/* Copyright 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
@@ -46,7 +46,7 @@ static initializer cpu_flag_init[] =
     "~(CpuL1OM|CpuK1OM)" },
   { "CPU_GENERIC32_FLAGS",
     "Cpu186|Cpu286|Cpu386" },
-  { "CPU_GENERIC64_FLAGS", 
+  { "CPU_GENERIC64_FLAGS",
     "Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuClflush|Cpu387|Cpu687|CpuNop|CpuMMX|CpuSSE|CpuSSE2|CpuLM" },
   { "CPU_NONE_FLAGS",
    "0" },
@@ -162,8 +162,14 @@ static initializer cpu_flag_init[] =
     "CpuBMI2" },
   { "CPU_LZCNT_FLAGS",
     "CpuLZCNT" },
+  { "CPU_HLE_FLAGS",
+    "CpuHLE" },
+  { "CPU_RTM_FLAGS",
+    "CpuRTM" },
   { "CPU_INVPCID_FLAGS",
     "CpuINVPCID" },
+  { "CPU_VMFUNC_FLAGS",
+    "CpuVMFUNC" },
   { "CPU_3DNOW_FLAGS",
     "CpuMMX|Cpu3dnow" },
   { "CPU_3DNOWA_FLAGS",
@@ -186,6 +192,12 @@ static initializer cpu_flag_init[] =
     "unknown" },
   { "CPU_K1OM_FLAGS",
     "unknown" },
+  { "CPU_ADX_FLAGS",
+    "CpuADX" },
+  { "CPU_RDSEED_FLAGS",
+    "CpuRdSeed" },
+  { "CPU_PRFCHW_FLAGS",
+    "CpuPRFCHW" },
 };
 
 static initializer operand_type_init[] =
@@ -349,7 +361,13 @@ static bitfield cpu_flags[] =
   BITFIELD (CpuF16C),
   BITFIELD (CpuBMI2),
   BITFIELD (CpuLZCNT),
+  BITFIELD (CpuHLE),
+  BITFIELD (CpuRTM),
   BITFIELD (CpuINVPCID),
+  BITFIELD (CpuVMFUNC),
+  BITFIELD (CpuRDSEED),
+  BITFIELD (CpuADX),
+  BITFIELD (CpuPRFCHW),
   BITFIELD (Cpu64),
   BITFIELD (CpuNo64),
 #ifdef CpuUnused
@@ -389,6 +407,8 @@ static bitfield opcode_modifiers[] =
   BITFIELD (RegKludge),
   BITFIELD (FirstXmm0),
   BITFIELD (Implicit1stXmm0),
+  BITFIELD (RepPrefixOk),
+  BITFIELD (HLEPrefixOk),
   BITFIELD (ToDword),
   BITFIELD (ToQword),
   BITFIELD (AddrPrefixOp0),
@@ -478,7 +498,7 @@ static void
 fail (const char *message, ...)
 {
   va_list args;
-  
+
   va_start (args, message);
   fprintf (stderr, _("%s: Error: "), program_name);
   vfprintf (stderr, message, args);
@@ -556,7 +576,7 @@ next_field (char *str, char sep, char **next, char *last)
   *str = '\0';
   remove_trailing_whitespaces (p);
 
-  *next = str + 1; 
+  *next = str + 1;
 
   if (p >= last)
     abort ();
@@ -1045,7 +1065,7 @@ process_i386_opcodes (FILE *table)
   process_i386_cpu_flag (table, "0", 0, ",", "    ", -1);
 
   process_i386_opcode_modifier (table, "0", -1);
- 
+
   fprintf (table, "    { ");
   process_i386_operand_type (table, "0", 0, "\t  ", -1);
   fprintf (table, " } }\n");
@@ -1171,7 +1191,7 @@ process_i386_initializers (void)
 /* Program options.  */
 #define OPTION_SRCDIR	200
 
-struct option long_options[] = 
+struct option long_options[] =
 {
   {"srcdir",  required_argument, NULL, OPTION_SRCDIR},
   {"debug",   no_argument,       NULL, 'd'},
@@ -1202,7 +1222,7 @@ main (int argc, char **argv)
   char *srcdir = NULL;
   int c;
   FILE *table;
-  
+
   program_name = *argv;
   xmalloc_set_program_name (program_name);
 
@@ -1230,7 +1250,7 @@ main (int argc, char **argv)
   if (optind != argc)
     usage (stdout, 1);
 
-  if (srcdir != NULL) 
+  if (srcdir != NULL)
     if (chdir (srcdir) != 0)
       fail (_("unable to change directory to \"%s\", errno = %s\n"),
 	    srcdir, xstrerror (errno));
diff --git a/opcodes/i386-init.h b/opcodes/i386-init.h
index 69f0e94..dba240e 100644
--- a/opcodes/i386-init.h
+++ b/opcodes/i386-init.h
@@ -22,362 +22,470 @@
 #define CPU_UNKNOWN_FLAGS \
   { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  \
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1,  \
-      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1 } }
+      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,  \
+      1, 1 } }
 
 #define CPU_GENERIC32_FLAGS \
   { { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_GENERIC64_FLAGS \
   { { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_NONE_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_I186_FLAGS \
   { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_I286_FLAGS \
   { { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_I386_FLAGS \
   { { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_I486_FLAGS \
   { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_I586_FLAGS \
   { { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_I686_FLAGS \
   { { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_PENTIUMPRO_FLAGS \
   { { 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_P2_FLAGS \
   { { 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_P3_FLAGS \
   { { 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_P4_FLAGS \
   { { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_NOCONA_FLAGS \
   { { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_CORE_FLAGS \
   { { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_CORE2_FLAGS \
   { { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1,  \
       0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_COREI7_FLAGS \
   { { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1,  \
       0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_K6_FLAGS \
   { { 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_K6_2_FLAGS \
   { { 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_ATHLON_FLAGS \
   { { 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_K8_FLAGS \
   { { 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_AMDFAM10_FLAGS \
   { { 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,  \
       0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_BDVER1_FLAGS \
   { { 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1,  \
       0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,  \
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } }
+      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_BDVER2_FLAGS \
   { { 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1,  \
       0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,  \
-      1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 } }
+      1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_8087_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_287_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_387_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_ANY87_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_CLFLUSH_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_NOP_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_SYSCALL_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_MMX_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_SSE_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_SSE2_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_SSE3_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_SSSE3_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,  \
       0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_SSE4_1_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,  \
       0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_SSE4_2_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,  \
       0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_ANY_SSE_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1,  \
       0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_VMX_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_SMX_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_XSAVE_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_XSAVEOPT_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_AES_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,  \
       0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_PCLMUL_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,  \
       0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_FMA_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,  \
       0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_FMA4_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,  \
       0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_XOP_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,  \
       0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_LWP_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_BMI_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_TBM_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_MOVBE_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_RDTSCP_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_EPT_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_FSGSBASE_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_RDRND_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_F16C_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_BMI2_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_LZCNT_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
+
+#define CPU_HLE_FLAGS \
+  { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
+
+#define CPU_RTM_FLAGS \
+  { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_INVPCID_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
+
+#define CPU_VMFUNC_FLAGS \
+  { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_3DNOW_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_3DNOWA_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_PADLOCK_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_SVME_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_SSE4A_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,  \
       0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_ABM_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_AVX_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,  \
       0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_AVX2_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,  \
       0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_ANY_AVX_FLAGS \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0 } }
 
 #define CPU_L1OM_FLAGS \
   { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  \
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  \
-      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1 } }
+      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,  \
+      1, 1 } }
 
 #define CPU_K1OM_FLAGS \
   { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  \
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  \
-      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1 } }
+      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,  \
+      1, 1 } }
+
+#define CPU_ADX_FLAGS \
+  { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,  \
+      0, 0 } }
+
+#define CPU_RDSEED_FLAGS \
+  { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,  \
+      0, 0 } }
+
+#define CPU_PRFCHW_FLAGS \
+  { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  \
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,  \
+      0, 0 } }
 
 
 #define OPERAND_TYPE_NONE \
diff --git a/opcodes/i386-opc.h b/opcodes/i386-opc.h
index 8d5dade..598b220 100644
--- a/opcodes/i386-opc.h
+++ b/opcodes/i386-opc.h
@@ -1,5 +1,5 @@
 /* Declarations for Intel 80386 opcode table
-   Copyright 2007, 2008, 2009, 2010
+   Copyright 2007, 2008, 2009, 2010, 2012
    Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
@@ -134,10 +134,22 @@ enum
   CpuBMI2,
   /* LZCNT support required */
   CpuLZCNT,
+  /* HLE support required */
+  CpuHLE,
+  /* RTM support required */
+  CpuRTM,
   /* INVPCID Instructions required */
   CpuINVPCID,
+  /* VMFUNC Instruction required */
+  CpuVMFUNC,
   /* 64bit support available, used by -march= in assembler.  */
   CpuLM,
+  /* RDRSEED instruction required.  */
+  CpuRDSEED,
+  /* Multi-presisionn add-carry instructions are required.  */
+  CpuADX,
+  /* Supports prefetchw instruction.  */
+  CpuPRFCHW,
   /* 64bit support required  */
   Cpu64,
   /* Not supported in the 64bit mode  */
@@ -212,8 +224,14 @@ typedef union i386_cpu_flags
       unsigned int cpuf16c:1;
       unsigned int cpubmi2:1;
       unsigned int cpulzcnt:1;
+      unsigned int cpuhle:1;
+      unsigned int cpurtm:1;
       unsigned int cpuinvpcid:1;
+      unsigned int cpuvmfunc:1;
       unsigned int cpulm:1;
+      unsigned int cpurdseed:1;
+      unsigned int cpuadx:1;
+      unsigned int cpuprfchw:1;
       unsigned int cpu64:1;
       unsigned int cpuno64:1;
 #ifdef CpuUnused
@@ -290,6 +308,18 @@ enum
   FirstXmm0,
   /* An implicit xmm0 as the first operand */
   Implicit1stXmm0,
+  /* The HLE prefix is OK:
+     1. With a LOCK prefix.
+     2. With or without a LOCK prefix.
+     3. With a RELEASE (0xf3) prefix.
+   */
+#define HLEPrefixNone		0
+#define HLEPrefixLock		1
+#define HLEPrefixAny		2
+#define HLEPrefixRelease	3
+  HLEPrefixOk,
+  /* An instruction on which a "rep" prefix is acceptable.  */
+  RepPrefixOk,
   /* Convert to DWORD */
   ToDword,
   /* Convert to QWORD */
@@ -319,7 +349,7 @@ enum
      0: VEX.vvvv must be 1111b.
      1: VEX.NDS.  Register-only source is encoded in VEX.vvvv where
 	the content of source registers will be preserved.
-	VEX.DDS.  The second register operand is encoded in VEX.vvvv 
+	VEX.DDS.  The second register operand is encoded in VEX.vvvv
 	where the content of first source register will be overwritten
 	by the result.
 	VEX.NDD2.  The second destination register operand is encoded in
@@ -423,6 +453,8 @@ typedef struct i386_opcode_modifier
   unsigned int regkludge:1;
   unsigned int firstxmm0:1;
   unsigned int implicit1stxmm0:1;
+  unsigned int hleprefixok:2;
+  unsigned int repprefixok:1;
   unsigned int todword:1;
   unsigned int toqword:1;
   unsigned int addrprefixop0:1;
@@ -642,7 +674,7 @@ typedef struct insn_template
   /* extension_opcode is the 3 bit extension for group <n> insns.
      This field is also used to store the 8-bit opcode suffix for the
      AMD 3DNow! instructions.
-     If this template has no extension opcode (the usual case) use None 
+     If this template has no extension opcode (the usual case) use None
      Instructions */
   unsigned int extension_opcode;
 #define None 0xffff		/* If no extension_opcode is possible.  */
diff --git a/opcodes/i386-opc.tbl b/opcodes/i386-opc.tbl
index eb7dae9..c21ced5 100644
--- a/opcodes/i386-opc.tbl
+++ b/opcodes/i386-opc.tbl
@@ -1,5 +1,5 @@
 // i386 opcode table.
-// Copyright 2007, 2008, 2009, 2010
+// Copyright 2007, 2008, 2009, 2010, 2012
 // Free Software Foundation, Inc.
 //
 // This file is part of the GNU opcodes library.
@@ -24,11 +24,11 @@
 // larger than 32bit as Disp64.
 mov, 2, 0xa0, None, 1, Cpu64, D|W|CheckRegSize|No_sSuf|No_ldSuf, { Disp64|Unspecified|Byte|Word|Dword|Qword, Acc|Byte|Word|Dword|Qword }
 mov, 2, 0xa0, None, 1, CpuNo64, D|W|CheckRegSize|No_sSuf|No_qSuf|No_ldSuf, { Disp16|Disp32|Unspecified|Byte|Word|Dword, Acc|Byte|Word|Dword }
-mov, 2, 0x88, None, 1, 0, D|W|CheckRegSize|Modrm|No_sSuf|No_ldSuf, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+mov, 2, 0x88, None, 1, 0, D|W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|HLEPrefixOk=3, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 // In the 64bit mode the short form mov immediate is redefined to have
 // 64bit value.
 mov, 2, 0xb0, None, 1, 0, W|CheckRegSize|ShortForm|No_sSuf|No_qSuf|No_ldSuf, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32 }
-mov, 2, 0xc6, 0x0, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+mov, 2, 0xc6, 0x0, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|HLEPrefixOk=3, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 mov, 2, 0xb0, None, 1, Cpu64, W|ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf, { Imm64, Reg64 }
 // The segment register moves accept WordReg so that a segment register
 // can be copied to a 32 bit register, and vice versa, without using a
@@ -128,8 +128,8 @@ popa, 0, 0x61, None, 1, Cpu186|CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_l
 // In the 64bit code, xchg rax, rax is reused for new nop instruction.
 xchg, 2, 0x90, None, 1, 0, ShortForm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64, Acc|Word|Dword|Qword }
 xchg, 2, 0x90, None, 1, 0, ShortForm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Acc|Word|Dword|Qword, Reg16|Reg32|Reg64 }
-xchg, 2, 0x86, None, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
-xchg, 2, 0x86, None, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable, { Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg8|Reg16|Reg32|Reg64 }
+xchg, 2, 0x86, None, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk=2, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+xchg, 2, 0x86, None, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk=2, { Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg8|Reg16|Reg32|Reg64 }
 
 // In/out from ports.
 in, 2, 0xe4, None, 1, 0, W|CheckRegSize|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Acc|Byte|Word|Dword }
@@ -168,26 +168,26 @@ std, 0, 0xfd, None, 1, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0
 sti, 0, 0xfb, None, 1, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
 
 // Arithmetic.
-add, 2, 0x0, None, 1, 0, D|W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
-add, 2, 0x83, 0x0, 1, 0, Modrm|No_bSuf|No_sSuf|No_ldSuf|IsLockable, { Imm8S, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+add, 2, 0x0, None, 1, 0, D|W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+add, 2, 0x83, 0x0, 1, 0, Modrm|No_bSuf|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Imm8S, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 add, 2, 0x4, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf, { Imm8|Imm16|Imm32|Imm32S, Acc|Byte|Word|Dword|Qword }
-add, 2, 0x80, 0x0, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+add, 2, 0x80, 0x0, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 
 inc, 1, 0x40, None, 1, CpuNo64, ShortForm|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16|Reg32 }
-inc, 1, 0xfe, 0x0, 1, 0, W|Modrm|No_sSuf|No_ldSuf|IsLockable, { Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+inc, 1, 0xfe, 0x0, 1, 0, W|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 
-sub, 2, 0x28, None, 1, 0, D|W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
-sub, 2, 0x83, 0x5, 1, 0, Modrm|No_bSuf|No_sSuf|No_ldSuf|IsLockable, { Imm8S, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sub, 2, 0x28, None, 1, 0, D|W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sub, 2, 0x83, 0x5, 1, 0, Modrm|No_bSuf|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Imm8S, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 sub, 2, 0x2c, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf, { Imm8|Imm16|Imm32|Imm32S, Acc|Byte|Word|Dword|Qword }
-sub, 2, 0x80, 0x5, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sub, 2, 0x80, 0x5, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 
 dec, 1, 0x48, None, 1, CpuNo64, ShortForm|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16|Reg32 }
-dec, 1, 0xfe, 0x1, 1, 0, W|Modrm|No_sSuf|No_ldSuf|IsLockable, { Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+dec, 1, 0xfe, 0x1, 1, 0, W|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 
-sbb, 2, 0x18, None, 1, 0, D|W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
-sbb, 2, 0x83, 0x3, 1, 0, Modrm|No_bSuf|No_sSuf|No_ldSuf|IsLockable, { Imm8S, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sbb, 2, 0x18, None, 1, 0, D|W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sbb, 2, 0x83, 0x3, 1, 0, Modrm|No_bSuf|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Imm8S, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 sbb, 2, 0x1c, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf, { Imm8|Imm16|Imm32|Imm32S, Acc|Byte|Word|Dword|Qword }
-sbb, 2, 0x80, 0x3, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+sbb, 2, 0x80, 0x3, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 
 cmp, 2, 0x38, None, 1, 0, D|W|CheckRegSize|Modrm|No_sSuf|No_ldSuf, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 cmp, 2, 0x83, 0x7, 1, 0, Modrm|No_bSuf|No_sSuf|No_ldSuf, { Imm8S, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
@@ -199,31 +199,31 @@ test, 2, 0x84, None, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf, { Byte|Word|Dw
 test, 2, 0xa8, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf, { Imm8|Imm16|Imm32|Imm32S, Acc|Byte|Word|Dword|Qword }
 test, 2, 0xf6, 0x0, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 
-and, 2, 0x20, None, 1, 0, D|W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
-and, 2, 0x83, 0x4, 1, 0, Modrm|No_bSuf|No_sSuf|No_ldSuf|IsLockable, { Imm8S, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+and, 2, 0x20, None, 1, 0, D|W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+and, 2, 0x83, 0x4, 1, 0, Modrm|No_bSuf|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Imm8S, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 and, 2, 0x24, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf, { Imm8|Imm16|Imm32|Imm32S, Acc|Byte|Word|Dword|Qword }
-and, 2, 0x80, 0x4, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+and, 2, 0x80, 0x4, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 
-or, 2, 0x8, None, 1, 0, D|W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
-or, 2, 0x83, 0x1, 1, 0, Modrm|No_bSuf|No_sSuf|No_ldSuf|IsLockable, { Imm8S, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+or, 2, 0x8, None, 1, 0, D|W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+or, 2, 0x83, 0x1, 1, 0, Modrm|No_bSuf|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Imm8S, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 or, 2, 0xc, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf, { Imm8|Imm16|Imm32|Imm32S, Acc|Byte|Word|Dword|Qword }
-or, 2, 0x80, 0x1, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+or, 2, 0x80, 0x1, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 
-xor, 2, 0x30, None, 1, 0, D|W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
-xor, 2, 0x83, 0x6, 1, 0, Modrm|No_bSuf|No_sSuf|No_ldSuf|IsLockable, { Imm8S, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+xor, 2, 0x30, None, 1, 0, D|W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+xor, 2, 0x83, 0x6, 1, 0, Modrm|No_bSuf|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Imm8S, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 xor, 2, 0x34, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf, { Imm8|Imm16|Imm32|Imm32S, Acc|Byte|Word|Dword|Qword }
-xor, 2, 0x80, 0x6, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+xor, 2, 0x80, 0x6, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 
 // clr with 1 operand is really xor with 2 operands.
 clr, 1, 0x30, None, 1, 0, W|Modrm|No_sSuf|No_ldSuf|RegKludge, { Reg8|Reg16|Reg32|Reg64 }
 
-adc, 2, 0x10, None, 1, 0, D|W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
-adc, 2, 0x83, 0x2, 1, 0, Modrm|No_bSuf|No_sSuf|No_ldSuf|IsLockable, { Imm8S, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+adc, 2, 0x10, None, 1, 0, D|W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+adc, 2, 0x83, 0x2, 1, 0, Modrm|No_bSuf|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Imm8S, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 adc, 2, 0x14, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf, { Imm8|Imm16|Imm32|Imm32S, Acc|Byte|Word|Dword|Qword }
-adc, 2, 0x80, 0x2, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+adc, 2, 0x80, 0x2, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 
-neg, 1, 0xf6, 0x3, 1, 0, W|Modrm|No_sSuf|No_ldSuf|IsLockable, { Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
-not, 1, 0xf6, 0x2, 1, 0, W|Modrm|No_sSuf|No_ldSuf|IsLockable, { Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+neg, 1, 0xf6, 0x3, 1, 0, W|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+not, 1, 0xf6, 0x2, 1, 0, W|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 
 aaa, 0, 0x37, None, 1, CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
 aas, 0, 0x3f, None, 1, CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
@@ -340,10 +340,10 @@ jmp, 1, 0xff, 0x5, 1, 0, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf, { Dword|
 ljmp, 2, 0xea, None, 1, CpuNo64, JumpInterSegment|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm16, Imm16|Imm32 }
 ljmp, 1, 0xff, 0x5, 1, 0, Modrm|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|JumpAbsolute }
 
-ret, 0, 0xc3, None, 1, CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
-ret, 1, 0xc2, None, 1, CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm16 }
-ret, 0, 0xc3, None, 1, Cpu64, DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { 0 }
-ret, 1, 0xc2, None, 1, Cpu64, DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { Imm16 }
+ret, 0, 0xc3, None, 1, CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf|RepPrefixOk, { 0 }
+ret, 1, 0xc2, None, 1, CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf|RepPrefixOk, { Imm16 }
+ret, 0, 0xc3, None, 1, Cpu64, DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|RepPrefixOk, { 0 }
+ret, 1, 0xc2, None, 1, Cpu64, DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|RepPrefixOk, { Imm16 }
 lret, 0, 0xcb, None, 1, 0, DefaultSize|No_bSuf|No_sSuf|No_ldSuf, { 0 }
 lret, 1, 0xca, None, 1, 0, DefaultSize|No_bSuf|No_sSuf|No_ldSuf, { Imm16 }
 // Intel Syntax.
@@ -441,50 +441,50 @@ setnle, 1, 0xf9f, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf
 setg, 1, 0xf9f, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 
 // String manipulation.
-cmps, 0, 0xa6, None, 1, 0, W|No_sSuf|No_ldSuf|IsString, { 0 }
-cmps, 2, 0xa6, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf|IsString, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg, Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
-scmp, 0, 0xa6, None, 1, 0, W|No_sSuf|No_ldSuf|IsString, { 0 }
-scmp, 2, 0xa6, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf|IsString, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg, Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
-ins, 0, 0x6c, None, 1, Cpu186, W|No_sSuf|No_qSuf|No_ldSuf|IsString, { 0 }
-ins, 2, 0x6c, None, 1, Cpu186, W|CheckRegSize|No_sSuf|No_qSuf|No_ldSuf|IsString, { InOutPortReg, Byte|Word|Dword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
-outs, 0, 0x6e, None, 1, Cpu186, W|No_sSuf|No_qSuf|No_ldSuf|IsString, { 0 }
-outs, 2, 0x6e, None, 1, Cpu186, W|CheckRegSize|No_sSuf|No_qSuf|No_ldSuf|IsString, { Byte|Word|Dword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, InOutPortReg }
-lods, 0, 0xac, None, 1, 0, W|No_sSuf|No_ldSuf|IsString, { 0 }
-lods, 1, 0xac, None, 1, 0, W|No_sSuf|No_ldSuf|IsString, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
-lods, 2, 0xac, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf|IsString, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Acc|Byte|Word|Dword|Qword }
-slod, 0, 0xac, None, 1, 0, W|No_sSuf|No_ldSuf|IsString, { 0 }
-slod, 1, 0xac, None, 1, 0, W|No_sSuf|No_ldSuf|IsString, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
-slod, 2, 0xac, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf|IsString, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Acc|Byte|Word|Dword|Qword }
-movs, 0, 0xa4, None, 1, 0, W|No_sSuf|No_ldSuf|IsString, { 0 }
-movs, 2, 0xa4, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf|IsString, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
-smov, 0, 0xa4, None, 1, 0, W|No_sSuf|No_ldSuf|IsString, { 0 }
-smov, 2, 0xa4, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf|IsString, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
-scas, 0, 0xae, None, 1, 0, W|No_sSuf|No_ldSuf|IsString, { 0 }
-scas, 1, 0xae, None, 1, 0, W|No_sSuf|No_ldSuf|IsString, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
-scas, 2, 0xae, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf|IsString, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg, Acc|Byte|Word|Dword|Qword }
-ssca, 0, 0xae, None, 1, 0, W|No_sSuf|No_ldSuf|IsString, { 0 }
-ssca, 1, 0xae, None, 1, 0, W|No_sSuf|No_ldSuf|IsString, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
-ssca, 2, 0xae, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf|IsString, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg, Acc|Byte|Word|Dword|Qword }
-stos, 0, 0xaa, None, 1, 0, W|No_sSuf|No_ldSuf|IsString, { 0 }
-stos, 1, 0xaa, None, 1, 0, W|No_sSuf|No_ldSuf|IsString, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
-stos, 2, 0xaa, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf|IsString, { Acc|Byte|Word|Dword|Qword, Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
-ssto, 0, 0xaa, None, 1, 0, W|No_sSuf|No_ldSuf|IsString, { 0 }
-ssto, 1, 0xaa, None, 1, 0, W|No_sSuf|No_ldSuf|IsString, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
-ssto, 2, 0xaa, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf|IsString, { Acc|Byte|Word|Dword|Qword, Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
-xlat, 0, 0xd7, None, 1, 0, No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString, { 0 }
-xlat, 1, 0xd7, None, 1, 0, No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString, { Byte|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+cmps, 0, 0xa6, None, 1, 0, W|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { 0 }
+cmps, 2, 0xa6, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg, Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+scmp, 0, 0xa6, None, 1, 0, W|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { 0 }
+scmp, 2, 0xa6, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg, Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+ins, 0, 0x6c, None, 1, Cpu186, W|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk, { 0 }
+ins, 2, 0x6c, None, 1, Cpu186, W|CheckRegSize|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk, { InOutPortReg, Byte|Word|Dword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+outs, 0, 0x6e, None, 1, Cpu186, W|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk, { 0 }
+outs, 2, 0x6e, None, 1, Cpu186, W|CheckRegSize|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk, { Byte|Word|Dword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, InOutPortReg }
+lods, 0, 0xac, None, 1, 0, W|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { 0 }
+lods, 1, 0xac, None, 1, 0, W|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+lods, 2, 0xac, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Acc|Byte|Word|Dword|Qword }
+slod, 0, 0xac, None, 1, 0, W|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { 0 }
+slod, 1, 0xac, None, 1, 0, W|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+slod, 2, 0xac, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Acc|Byte|Word|Dword|Qword }
+movs, 0, 0xa4, None, 1, 0, W|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { 0 }
+movs, 2, 0xa4, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+smov, 0, 0xa4, None, 1, 0, W|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { 0 }
+smov, 2, 0xa4, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+scas, 0, 0xae, None, 1, 0, W|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { 0 }
+scas, 1, 0xae, None, 1, 0, W|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+scas, 2, 0xae, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg, Acc|Byte|Word|Dword|Qword }
+ssca, 0, 0xae, None, 1, 0, W|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { 0 }
+ssca, 1, 0xae, None, 1, 0, W|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+ssca, 2, 0xae, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg, Acc|Byte|Word|Dword|Qword }
+stos, 0, 0xaa, None, 1, 0, W|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { 0 }
+stos, 1, 0xaa, None, 1, 0, W|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+stos, 2, 0xaa, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { Acc|Byte|Word|Dword|Qword, Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+ssto, 0, 0xaa, None, 1, 0, W|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { 0 }
+ssto, 1, 0xaa, None, 1, 0, W|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+ssto, 2, 0xaa, None, 1, 0, W|CheckRegSize|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { Acc|Byte|Word|Dword|Qword, Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+xlat, 0, 0xd7, None, 1, 0, No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk, { 0 }
+xlat, 1, 0xd7, None, 1, 0, No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk, { Byte|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 
 // Bit manipulation.
-bsf, 2, 0xfbc, None, 2, Cpu386, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
-bsr, 2, 0xfbd, None, 2, Cpu386, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+bsf, 2, 0xfbc, None, 2, Cpu386, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf|RepPrefixOk, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
+bsr, 2, 0xfbd, None, 2, Cpu386, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf|RepPrefixOk, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
 bt, 2, 0xfa3, None, 2, Cpu386, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 bt, 2, 0xfba, 0x4, 2, Cpu386, Modrm|No_bSuf|No_sSuf|No_ldSuf, { Imm8, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
-btc, 2, 0xfbb, None, 2, Cpu386, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf|IsLockable, { Reg16|Reg32|Reg64, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
-btc, 2, 0xfba, 0x7, 2, Cpu386, Modrm|No_bSuf|No_sSuf|No_ldSuf|IsLockable, { Imm8, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
-btr, 2, 0xfb3, None, 2, Cpu386, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf|IsLockable, { Reg16|Reg32|Reg64, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
-btr, 2, 0xfba, 0x6, 2, Cpu386, Modrm|No_bSuf|No_sSuf|No_ldSuf|IsLockable, { Imm8, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
-bts, 2, 0xfab, None, 2, Cpu386, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf|IsLockable, { Reg16|Reg32|Reg64, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
-bts, 2, 0xfba, 0x5, 2, Cpu386, Modrm|No_bSuf|No_sSuf|No_ldSuf|IsLockable, { Imm8, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+btc, 2, 0xfbb, None, 2, Cpu386, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Reg16|Reg32|Reg64, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+btc, 2, 0xfba, 0x7, 2, Cpu386, Modrm|No_bSuf|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Imm8, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+btr, 2, 0xfb3, None, 2, Cpu386, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Reg16|Reg32|Reg64, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+btr, 2, 0xfba, 0x6, 2, Cpu386, Modrm|No_bSuf|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Imm8, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+bts, 2, 0xfab, None, 2, Cpu386, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Reg16|Reg32|Reg64, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+bts, 2, 0xfba, 0x5, 2, Cpu386, Modrm|No_bSuf|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Imm8, Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 
 // Interrupts & op. sys insns.
 // See gas/config/tc-i386.c for conversion of 'int $3' into the special
@@ -504,7 +504,7 @@ nop, 1, 0xf1f, 0x0, 2, CpuNop, Modrm|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg
 
 // nop is actually "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
 // 32bit mode and "xchg %rax,%rax" in 64bit mode.
-nop, 0, 0x90, None, 1, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
+nop, 0, 0x90, None, 1, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|RepPrefixOk, { 0 }
 
 // Protection control.
 arpl, 2, 0x63, None, 1, Cpu286|CpuNo64, Modrm|IgnoreSize|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16, Reg16|Word|Unspecified|BaseIndex|Disp8|Disp16|Disp32 }
@@ -829,8 +829,8 @@ rex.wrxb, 0, 0x4f, None, 1, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ld
 // 486 extensions.
 
 bswap, 1, 0xfc8, None, 2, Cpu486, ShortForm|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64 }
-xadd, 2, 0xfc0, None, 2, Cpu486, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
-cmpxchg, 2, 0xfb0, None, 2, Cpu486, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+xadd, 2, 0xfc0, None, 2, Cpu486, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+cmpxchg, 2, 0xfb0, None, 2, Cpu486, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 invd, 0, 0xf08, None, 2, Cpu486, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
 wbinvd, 0, 0xf09, None, 2, Cpu486, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
 invlpg, 1, 0xf01, 0x7, 2, Cpu486, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
@@ -842,7 +842,7 @@ cpuid, 0, 0xfa2, None, 2, Cpu486, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldS
 wrmsr, 0, 0xf30, None, 2, Cpu586, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
 rdtsc, 0, 0xf31, None, 2, Cpu586, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
 rdmsr, 0, 0xf32, None, 2, Cpu586, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
-cmpxchg8b, 1, 0xfc7, 0x1, 2, Cpu586, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|IsLockable, { Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+cmpxchg8b, 1, 0xfc7, 0x1, 2, Cpu586, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 
 // Pentium II/Pentium Pro extensions.
 sysenter, 0, 0xf34, None, 2, Cpu686, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
@@ -956,8 +956,8 @@ movd, 2, 0xf7e, None, 2, CpuMMX|Cpu64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|
 // 64bit displacement value.  We put the 64bit displacement first and
 // we only mark constants larger than 32bit as Disp64.
 movq, 2, 0xa0, None, 1, Cpu64, D|W|CheckRegSize|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Disp64|Unspecified|Qword, Acc|Qword }
-movq, 2, 0x88, None, 1, Cpu64, D|W|Modrm|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg64, Reg64|Unspecified|Qword|BaseIndex|Disp8|Disp32|Disp32S }
-movq, 2, 0xc6, 0x0, 1, Cpu64, W|Modrm|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm32S, Reg64|Qword|Unspecified|BaseIndex|Disp8|Disp32|Disp32S }
+movq, 2, 0x88, None, 1, Cpu64, D|W|Modrm|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|HLEPrefixOk=3, { Reg64, Reg64|Unspecified|Qword|BaseIndex|Disp8|Disp32|Disp32S }
+movq, 2, 0xc6, 0x0, 1, Cpu64, W|Modrm|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|HLEPrefixOk=3, { Imm32S, Reg64|Qword|Unspecified|BaseIndex|Disp8|Disp32|Disp32S }
 movq, 2, 0xb0, None, 1, Cpu64, W|ShortForm|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm64, Reg64 }
 movq, 2, 0xf37e, None, 1, CpuAVX, S|Modrm|Vex=3|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|SSE2AVX, { Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
 movq, 2, 0x66d6, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|SSE2AVX, { RegXMM, Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM }
@@ -1371,8 +1371,8 @@ cmpunordsd, 2, 0xf20fc2, 0x3, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lS
 cmppd, 3, 0x66c2, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, Xmmword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
 cmppd, 3, 0x660fc2, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Xmmword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
 // Intel mode string compare.
-cmpsd, 0, 0xa7, None, 1, 0, Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString, { 0 }
-cmpsd, 2, 0xa7, None, 1, 0, Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString, { Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+cmpsd, 0, 0xa7, None, 1, 0, Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk, { 0 }
+cmpsd, 2, 0xa7, None, 1, 0, Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk, { Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
 cmpsd, 3, 0xf2c2, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
 cmpsd, 3, 0xf20fc2, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
 comisd, 2, 0x662f, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM }
@@ -1411,8 +1411,8 @@ movmskpd, 2, 0x660f50, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSu
 movntpd, 2, 0x662b, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM, Xmmword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 movntpd, 2, 0x660f2b, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Xmmword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 // Intel mode string move.
-movsd, 0, 0xa5, None, 1, 0, Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString, { 0 }
-movsd, 2, 0xa5, None, 1, 0, Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString, { Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
+movsd, 0, 0xa5, None, 1, 0, Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk, { 0 }
+movsd, 2, 0xa5, None, 1, 0, Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk, { Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|EsSeg }
 movsd, 2, 0xf211, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM, Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 movsd, 2, 0xf210, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, RegXMM }
 movsd, 2, 0xf210, None, 1, CpuAVX, S|Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM, RegXMM }
@@ -1561,6 +1561,10 @@ vmwrite, 2, 0xf79, None, 2, CpuVMX|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|
 vmxoff, 0, 0xf01, 0xc4, 2, CpuVMX, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { 0 }
 vmxon, 1, 0xf30fc7, 0x6, 2, CpuVMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 
+// VMFUNC instruction
+
+vmfunc, 0, 0xf01, 0xd4, 2, CpuVMFUNC, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { 0 }
+
 // SMX instructions.
 
 getsec, 0, 0xf37, None, 2, CpuSMX, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
@@ -1761,7 +1765,7 @@ xrstor64, 1, 0xfae, 0x5, 2, CpuXsave|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSu
 xgetbv, 0, 0xf01, 0xd0, 2, CpuXsave, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { 0 }
 xsetbv, 0, 0xf01, 0xd1, 2, CpuXsave, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { 0 }
 
-// xsaveopt 
+// xsaveopt
 xsaveopt, 1, 0xfae, 0x6, 2, CpuXsaveopt, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf, { Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 xsaveopt64, 1, 0xfae, 0x6, 2, CpuXsaveopt|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|Rex64, { Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 
@@ -2687,6 +2691,17 @@ vfnmsub213ss, 3, 0x66af, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW
 vfnmsub231sd, 3, 0x66bf, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM, RegXMM }
 vfnmsub231ss, 3, 0x66bf, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegXMM, RegXMM, RegXMM }
 
+// HLE prefixes
+
+xacquire, 0, 0xf2, None, 1, CpuHLE, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 }
+xrelease, 0, 0xf3, None, 1, CpuHLE, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 }
+
+// RTM instructions
+xabort, 1, 0xc6f8, None, 2, CpuRTM, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8 }
+xbegin, 1, 0xc7f8, None, 2, CpuRTM,  JumpDword|DefaultSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Disp16|Disp32 }
+xend, 0, 0xf01d5, None, 3, CpuRTM, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
+xtest, 0, 0xf01d6, None, 3, CpuHLE|CpuRTM, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
+
 // BMI2 instructions.
 bzhi, 3, 0xf5, None, 1, CpuBMI2, Modrm|CheckRegSize|Vex=3|VexOpcode=1|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64, Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg32|Reg64 }
 mulx, 3, 0xf2f6, None, 1, CpuBMI2, Modrm|CheckRegSize|Vex=3|VexOpcode=1|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg32|Reg64, Reg32|Reg64 }
@@ -2951,7 +2966,7 @@ tzmsk,  2, 0x01,   0x4, 1, CpuTBM, Modrm|CheckRegSize|Vex=3|VexOpcode=4|VexVVVV=
 // AMD 3DNow! instructions.
 
 prefetch, 1, 0xf0d, 0x0, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Byte|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
-prefetchw, 1, 0xf0d, 0x1, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Byte|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
+prefetchw, 1, 0xf0d, 0x1, 2, Cpu3dnow|CpuPRFCHW, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Byte|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S }
 femms, 0, 0xf0e, None, 2, Cpu3dnow, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
 pavgusb, 2, 0xf0f, 0xbf, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
 pf2id, 2, 0xf0f, 0x1d, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S|RegMMX, RegMMX }
@@ -3020,21 +3035,26 @@ popcnt, 2, 0xf30fb8, None, 2, CpuABM|CpuSSE4_2, Modrm|CheckRegSize|No_bSuf|No_sS
 lzcnt, 2, 0xf30fbd, None, 2, CpuABM|CpuLZCNT, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg16|Reg32|Reg64 }
 
 // VIA PadLock extensions.
-xstore-rng, 0, 0xfa7, 0xc0, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|ImmExt, { 0 }
-xcrypt-ecb, 0, 0xf30fa7, 0xc8, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|ImmExt, { 0 }
-xcrypt-cbc, 0, 0xf30fa7, 0xd0, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|ImmExt, { 0 }
-xcrypt-ctr, 0, 0xf30fa7, 0xd8, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|ImmExt, { 0 }
-xcrypt-cfb, 0, 0xf30fa7, 0xe0, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|ImmExt, { 0 }
-xcrypt-ofb, 0, 0xf30fa7, 0xe8, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|ImmExt, { 0 }
-montmul, 0, 0xf30fa6, 0xc0, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|ImmExt, { 0 }
-xsha1, 0, 0xf30fa6, 0xc8, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|ImmExt, { 0 }
-xsha256, 0, 0xf30fa6, 0xd0, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|ImmExt, { 0 }
+xstore-rng, 0, 0xfa7, 0xc0, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk|ImmExt, { 0 }
+xcrypt-ecb, 0, 0xf30fa7, 0xc8, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk|ImmExt, { 0 }
+xcrypt-cbc, 0, 0xf30fa7, 0xd0, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk|ImmExt, { 0 }
+xcrypt-ctr, 0, 0xf30fa7, 0xd8, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk|ImmExt, { 0 }
+xcrypt-cfb, 0, 0xf30fa7, 0xe0, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk|ImmExt, { 0 }
+xcrypt-ofb, 0, 0xf30fa7, 0xe8, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk|ImmExt, { 0 }
+montmul, 0, 0xf30fa6, 0xc0, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk|ImmExt, { 0 }
+xsha1, 0, 0xf30fa6, 0xc8, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk|ImmExt, { 0 }
+xsha256, 0, 0xf30fa6, 0xd0, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk|ImmExt, { 0 }
 // Aliases without hyphens.
-xstorerng, 0, 0xfa7, 0xc0, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|ImmExt, { 0 }
-xcryptecb, 0, 0xf30fa7, 0xc8, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|ImmExt, { 0 }
-xcryptcbc, 0, 0xf30fa7, 0xd0, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|ImmExt, { 0 }
-xcryptctr, 0, 0xf30fa7, 0xd8, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|ImmExt, { 0 }
-xcryptcfb, 0, 0xf30fa7, 0xe0, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|ImmExt, { 0 }
-xcryptofb, 0, 0xf30fa7, 0xe8, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|ImmExt, { 0 }
+xstorerng, 0, 0xfa7, 0xc0, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk|ImmExt, { 0 }
+xcryptecb, 0, 0xf30fa7, 0xc8, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk|ImmExt, { 0 }
+xcryptcbc, 0, 0xf30fa7, 0xd0, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk|ImmExt, { 0 }
+xcryptctr, 0, 0xf30fa7, 0xd8, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk|ImmExt, { 0 }
+xcryptcfb, 0, 0xf30fa7, 0xe0, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk|ImmExt, { 0 }
+xcryptofb, 0, 0xf30fa7, 0xe8, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk|ImmExt, { 0 }
 // Alias for xstore-rng.
-xstore, 0, 0xfa7, 0xc0, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|ImmExt, { 0 }
+xstore, 0, 0xfa7, 0xc0, 2, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk|ImmExt, { 0 }
+
+// Multy-precision Add Carry, rdseed instructions.
+adcx, 2, 0x660f38f6, None, 3, CpuADX, Modrm|CheckRegSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg32|Reg64 }
+adox, 2, 0xf30f38f6, None, 3, CpuADX, Modrm|CheckRegSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg32|Reg64 }
+rdseed, 1, 0xfc7, 0x7, 2, CpuRdSeed, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16|Reg32|Reg64 }
diff --git a/opcodes/i386-tbl.h b/opcodes/i386-tbl.h
index 795f71d..69588f1 100644
--- a/opcodes/i386-tbl.h
+++ b/opcodes/i386-tbl.h
@@ -26,10 +26,11 @@ const insn_template i386_optab[] =
   { "mov", 2, 0xa0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -39,10 +40,11 @@ const insn_template i386_optab[] =
   { "mov", 2, 0xa0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -52,10 +54,11 @@ const insn_template i386_optab[] =
   { "mov", 2, 0x88, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -65,10 +68,11 @@ const insn_template i386_optab[] =
   { "mov", 2, 0xb0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -78,10 +82,11 @@ const insn_template i386_optab[] =
   { "mov", 2, 0xc6, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -91,10 +96,11 @@ const insn_template i386_optab[] =
   { "mov", 2, 0xb0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -104,10 +110,11 @@ const insn_template i386_optab[] =
   { "mov", 2, 0x8c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -117,10 +124,11 @@ const insn_template i386_optab[] =
   { "mov", 2, 0x8c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -130,10 +138,11 @@ const insn_template i386_optab[] =
   { "mov", 2, 0x8c, None, 1,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -143,10 +152,11 @@ const insn_template i386_optab[] =
   { "mov", 2, 0x8c, None, 1,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -156,10 +166,11 @@ const insn_template i386_optab[] =
   { "mov", 2, 0x8e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -169,10 +180,11 @@ const insn_template i386_optab[] =
   { "mov", 2, 0x8e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -182,10 +194,11 @@ const insn_template i386_optab[] =
   { "mov", 2, 0x8e, None, 1,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -195,10 +208,11 @@ const insn_template i386_optab[] =
   { "mov", 2, 0x8e, None, 1,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -208,10 +222,11 @@ const insn_template i386_optab[] =
   { "mov", 2, 0xf20, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -221,10 +236,11 @@ const insn_template i386_optab[] =
   { "mov", 2, 0xf20, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -234,10 +250,11 @@ const insn_template i386_optab[] =
   { "mov", 2, 0xf21, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -247,10 +264,11 @@ const insn_template i386_optab[] =
   { "mov", 2, 0xf21, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -260,10 +278,11 @@ const insn_template i386_optab[] =
   { "mov", 2, 0xf24, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -273,10 +292,11 @@ const insn_template i386_optab[] =
   { "movabs", 2, 0xa0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -286,10 +306,11 @@ const insn_template i386_optab[] =
   { "movabs", 2, 0xb0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -299,10 +320,11 @@ const insn_template i386_optab[] =
   { "movbe", 2, 0x0f38f0, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -312,10 +334,11 @@ const insn_template i386_optab[] =
   { "movbe", 2, 0x0f38f1, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -325,10 +348,11 @@ const insn_template i386_optab[] =
   { "movsbl", 2, 0xfbe, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -338,10 +362,11 @@ const insn_template i386_optab[] =
   { "movsbw", 2, 0xfbe, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -351,10 +376,11 @@ const insn_template i386_optab[] =
   { "movswl", 2, 0xfbf, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -364,10 +390,11 @@ const insn_template i386_optab[] =
   { "movsbq", 2, 0xfbe, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -377,10 +404,11 @@ const insn_template i386_optab[] =
   { "movswq", 2, 0xfbf, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -390,10 +418,11 @@ const insn_template i386_optab[] =
   { "movslq", 2, 0x63, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -403,10 +432,11 @@ const insn_template i386_optab[] =
   { "movsx", 2, 0xfbe, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -416,10 +446,11 @@ const insn_template i386_optab[] =
   { "movsx", 2, 0xfbf, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
     { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -429,10 +460,11 @@ const insn_template i386_optab[] =
   { "movsx", 2, 0x63, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
+      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
     { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -442,10 +474,11 @@ const insn_template i386_optab[] =
   { "movsx", 2, 0xfbe, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -455,10 +488,11 @@ const insn_template i386_optab[] =
   { "movsx", 2, 0xfbf, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
     { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -468,10 +502,11 @@ const insn_template i386_optab[] =
   { "movsx", 2, 0x63, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
+      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
     { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -481,10 +516,11 @@ const insn_template i386_optab[] =
   { "movsxd", 2, 0x63, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -494,10 +530,11 @@ const insn_template i386_optab[] =
   { "movzb", 2, 0xfb6, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -507,10 +544,11 @@ const insn_template i386_optab[] =
   { "movzbl", 2, 0xfb6, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -520,10 +558,11 @@ const insn_template i386_optab[] =
   { "movzbw", 2, 0xfb6, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -533,10 +572,11 @@ const insn_template i386_optab[] =
   { "movzwl", 2, 0xfb7, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -546,10 +586,11 @@ const insn_template i386_optab[] =
   { "movzbq", 2, 0xfb6, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -559,10 +600,11 @@ const insn_template i386_optab[] =
   { "movzwq", 2, 0xfb7, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -572,10 +614,11 @@ const insn_template i386_optab[] =
   { "movzx", 2, 0xfb6, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -585,10 +628,11 @@ const insn_template i386_optab[] =
   { "movzx", 2, 0xfb7, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
     { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -598,10 +642,11 @@ const insn_template i386_optab[] =
   { "movzx", 2, 0xfb6, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -611,10 +656,11 @@ const insn_template i386_optab[] =
   { "movzx", 2, 0xfb7, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
     { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -624,210 +670,231 @@ const insn_template i386_optab[] =
   { "push", 1, 0x50, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "push", 1, 0xff, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "push", 1, 0x6a, None, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "push", 1, 0x68, None, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "push", 1, 0x6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "push", 1, 0xfa0, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "push", 1, 0x50, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "push", 1, 0xff, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "push", 1, 0x6a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "push", 1, 0x68, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "push", 1, 0xfa0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "pusha", 0, 0x60, None, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "pop", 1, 0x58, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "pop", 1, 0x8f, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "pop", 1, 0x7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "pop", 1, 0xfa1, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "pop", 1, 0x58, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "pop", 1, 0x8f, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "pop", 1, 0xfa1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "popa", 0, 0x61, None, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "xchg", 2, 0x90, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -837,10 +904,11 @@ const insn_template i386_optab[] =
   { "xchg", 2, 0x90, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -850,10 +918,11 @@ const insn_template i386_optab[] =
   { "xchg", 2, 0x86, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -863,10 +932,11 @@ const insn_template i386_optab[] =
   { "xchg", 2, 0x86, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -876,10 +946,11 @@ const insn_template i386_optab[] =
   { "in", 2, 0xe4, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -889,10 +960,11 @@ const insn_template i386_optab[] =
   { "in", 2, 0xec, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -902,30 +974,33 @@ const insn_template i386_optab[] =
   { "in", 1, 0xe4, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "in", 1, 0xec, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "out", 2, 0xe6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -935,10 +1010,11 @@ const insn_template i386_optab[] =
   { "out", 2, 0xee, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -948,30 +1024,33 @@ const insn_template i386_optab[] =
   { "out", 1, 0xe6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "out", 1, 0xee, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "lea", 2, 0x8d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 1, 0, 0 } },
@@ -981,10 +1060,11 @@ const insn_template i386_optab[] =
   { "lds", 2, 0xc5, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -994,10 +1074,11 @@ const insn_template i386_optab[] =
   { "les", 2, 0xc4, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -1007,10 +1088,11 @@ const insn_template i386_optab[] =
   { "lfs", 2, 0xfb4, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -1020,10 +1102,11 @@ const insn_template i386_optab[] =
   { "lgs", 2, 0xfb5, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -1033,10 +1116,11 @@ const insn_template i386_optab[] =
   { "lss", 2, 0xfb2, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -1046,150 +1130,165 @@ const insn_template i386_optab[] =
   { "clc", 0, 0xf8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "cld", 0, 0xfc, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "cli", 0, 0xfa, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "clts", 0, 0xf06, None, 2,
     { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "cmc", 0, 0xf5, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "lahf", 0, 0x9f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "sahf", 0, 0x9e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "pushf", 0, 0x9c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "pushf", 0, 0x9c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "popf", 0, 0x9d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "popf", 0, 0x9d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "stc", 0, 0xf9, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "std", 0, 0xfd, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "sti", 0, 0xfb, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "add", 2, 0x0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1199,10 +1298,11 @@ const insn_template i386_optab[] =
   { "add", 2, 0x83, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1212,10 +1312,11 @@ const insn_template i386_optab[] =
   { "add", 2, 0x4, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1225,10 +1326,11 @@ const insn_template i386_optab[] =
   { "add", 2, 0x80, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1238,30 +1340,33 @@ const insn_template i386_optab[] =
   { "inc", 1, 0x40, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "inc", 1, 0xfe, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "sub", 2, 0x28, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1271,10 +1376,11 @@ const insn_template i386_optab[] =
   { "sub", 2, 0x83, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1284,10 +1390,11 @@ const insn_template i386_optab[] =
   { "sub", 2, 0x2c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1297,10 +1404,11 @@ const insn_template i386_optab[] =
   { "sub", 2, 0x80, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1310,30 +1418,33 @@ const insn_template i386_optab[] =
   { "dec", 1, 0x48, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "dec", 1, 0xfe, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "sbb", 2, 0x18, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1343,10 +1454,11 @@ const insn_template i386_optab[] =
   { "sbb", 2, 0x83, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1356,10 +1468,11 @@ const insn_template i386_optab[] =
   { "sbb", 2, 0x1c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1369,10 +1482,11 @@ const insn_template i386_optab[] =
   { "sbb", 2, 0x80, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1382,10 +1496,11 @@ const insn_template i386_optab[] =
   { "cmp", 2, 0x38, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1395,10 +1510,11 @@ const insn_template i386_optab[] =
   { "cmp", 2, 0x83, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1408,10 +1524,11 @@ const insn_template i386_optab[] =
   { "cmp", 2, 0x3c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1421,10 +1538,11 @@ const insn_template i386_optab[] =
   { "cmp", 2, 0x80, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1434,10 +1552,11 @@ const insn_template i386_optab[] =
   { "test", 2, 0x84, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1447,10 +1566,11 @@ const insn_template i386_optab[] =
   { "test", 2, 0x84, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -1460,10 +1580,11 @@ const insn_template i386_optab[] =
   { "test", 2, 0xa8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1473,10 +1594,11 @@ const insn_template i386_optab[] =
   { "test", 2, 0xf6, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1486,10 +1608,11 @@ const insn_template i386_optab[] =
   { "and", 2, 0x20, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1499,10 +1622,11 @@ const insn_template i386_optab[] =
   { "and", 2, 0x83, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1512,10 +1636,11 @@ const insn_template i386_optab[] =
   { "and", 2, 0x24, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1525,10 +1650,11 @@ const insn_template i386_optab[] =
   { "and", 2, 0x80, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1538,10 +1664,11 @@ const insn_template i386_optab[] =
   { "or", 2, 0x8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1551,10 +1678,11 @@ const insn_template i386_optab[] =
   { "or", 2, 0x83, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1564,10 +1692,11 @@ const insn_template i386_optab[] =
   { "or", 2, 0xc, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1577,10 +1706,11 @@ const insn_template i386_optab[] =
   { "or", 2, 0x80, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1590,10 +1720,11 @@ const insn_template i386_optab[] =
   { "xor", 2, 0x30, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1603,10 +1734,11 @@ const insn_template i386_optab[] =
   { "xor", 2, 0x83, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1616,10 +1748,11 @@ const insn_template i386_optab[] =
   { "xor", 2, 0x34, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1629,10 +1762,11 @@ const insn_template i386_optab[] =
   { "xor", 2, 0x80, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1642,20 +1776,22 @@ const insn_template i386_optab[] =
   { "clr", 1, 0x30, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "adc", 2, 0x10, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1665,10 +1801,11 @@ const insn_template i386_optab[] =
   { "adc", 2, 0x83, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1678,10 +1815,11 @@ const insn_template i386_optab[] =
   { "adc", 2, 0x14, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1691,10 +1829,11 @@ const insn_template i386_optab[] =
   { "adc", 2, 0x80, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1704,250 +1843,275 @@ const insn_template i386_optab[] =
   { "neg", 1, 0xf6, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "not", 1, 0xf6, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "aaa", 0, 0x37, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "aas", 0, 0x3f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "daa", 0, 0x27, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "das", 0, 0x2f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "aad", 0, 0xd50a, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "aad", 1, 0xd5, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "aam", 0, 0xd40a, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "aam", 1, 0xd4, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "cbw", 0, 0x98, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "cdqe", 0, 0x98, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "cwde", 0, 0x98, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "cwd", 0, 0x99, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "cdq", 0, 0x99, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "cqo", 0, 0x99, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "cbtw", 0, 0x98, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "cltq", 0, 0x98, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "cwtl", 0, 0x98, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "cwtd", 0, 0x99, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "cltd", 0, 0x99, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "cqto", 0, 0x99, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "mul", 1, 0xf6, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "imul", 1, 0xf6, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "imul", 2, 0xfaf, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -1957,10 +2121,11 @@ const insn_template i386_optab[] =
   { "imul", 3, 0x6b, None, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1973,10 +2138,11 @@ const insn_template i386_optab[] =
   { "imul", 3, 0x69, None, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -1989,10 +2155,11 @@ const insn_template i386_optab[] =
   { "imul", 2, 0x6b, None, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2002,10 +2169,11 @@ const insn_template i386_optab[] =
   { "imul", 2, 0x69, None, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2015,20 +2183,22 @@ const insn_template i386_optab[] =
   { "div", 1, 0xf6, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "div", 2, 0xf6, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -2038,20 +2208,22 @@ const insn_template i386_optab[] =
   { "idiv", 1, 0xf6, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "idiv", 2, 0xf6, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -2061,10 +2233,11 @@ const insn_template i386_optab[] =
   { "rol", 2, 0xd0, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2074,10 +2247,11 @@ const insn_template i386_optab[] =
   { "rol", 2, 0xc0, 0x0, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2087,10 +2261,11 @@ const insn_template i386_optab[] =
   { "rol", 2, 0xd2, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2100,20 +2275,22 @@ const insn_template i386_optab[] =
   { "rol", 1, 0xd0, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "ror", 2, 0xd0, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2123,10 +2300,11 @@ const insn_template i386_optab[] =
   { "ror", 2, 0xc0, 0x1, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2136,10 +2314,11 @@ const insn_template i386_optab[] =
   { "ror", 2, 0xd2, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2149,20 +2328,22 @@ const insn_template i386_optab[] =
   { "ror", 1, 0xd0, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "rcl", 2, 0xd0, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2172,10 +2353,11 @@ const insn_template i386_optab[] =
   { "rcl", 2, 0xc0, 0x2, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2185,10 +2367,11 @@ const insn_template i386_optab[] =
   { "rcl", 2, 0xd2, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2198,20 +2381,22 @@ const insn_template i386_optab[] =
   { "rcl", 1, 0xd0, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "rcr", 2, 0xd0, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2221,10 +2406,11 @@ const insn_template i386_optab[] =
   { "rcr", 2, 0xc0, 0x3, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2234,10 +2420,11 @@ const insn_template i386_optab[] =
   { "rcr", 2, 0xd2, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2247,20 +2434,22 @@ const insn_template i386_optab[] =
   { "rcr", 1, 0xd0, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "sal", 2, 0xd0, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2270,10 +2459,11 @@ const insn_template i386_optab[] =
   { "sal", 2, 0xc0, 0x4, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2283,10 +2473,11 @@ const insn_template i386_optab[] =
   { "sal", 2, 0xd2, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2296,20 +2487,22 @@ const insn_template i386_optab[] =
   { "sal", 1, 0xd0, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "shl", 2, 0xd0, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2319,10 +2512,11 @@ const insn_template i386_optab[] =
   { "shl", 2, 0xc0, 0x4, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2332,10 +2526,11 @@ const insn_template i386_optab[] =
   { "shl", 2, 0xd2, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2345,20 +2540,22 @@ const insn_template i386_optab[] =
   { "shl", 1, 0xd0, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "shr", 2, 0xd0, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2368,10 +2565,11 @@ const insn_template i386_optab[] =
   { "shr", 2, 0xc0, 0x5, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2381,10 +2579,11 @@ const insn_template i386_optab[] =
   { "shr", 2, 0xd2, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2394,20 +2593,22 @@ const insn_template i386_optab[] =
   { "shr", 1, 0xd0, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "sar", 2, 0xd0, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2417,10 +2618,11 @@ const insn_template i386_optab[] =
   { "sar", 2, 0xc0, 0x7, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2430,10 +2632,11 @@ const insn_template i386_optab[] =
   { "sar", 2, 0xd2, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2443,20 +2646,22 @@ const insn_template i386_optab[] =
   { "sar", 1, 0xd0, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "shld", 3, 0xfa4, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2469,10 +2674,11 @@ const insn_template i386_optab[] =
   { "shld", 3, 0xfa5, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2485,10 +2691,11 @@ const insn_template i386_optab[] =
   { "shld", 2, 0xfa5, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2498,10 +2705,11 @@ const insn_template i386_optab[] =
   { "shrd", 3, 0xfac, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2514,10 +2722,11 @@ const insn_template i386_optab[] =
   { "shrd", 3, 0xfad, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2530,10 +2739,11 @@ const insn_template i386_optab[] =
   { "shrd", 2, 0xfad, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2543,50 +2753,55 @@ const insn_template i386_optab[] =
   { "call", 1, 0xe8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "call", 1, 0xe8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "call", 1, 0xff, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "call", 1, 0xff, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "call", 2, 0x9a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2596,20 +2811,22 @@ const insn_template i386_optab[] =
   { "call", 1, 0xff, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 
       1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "lcall", 2, 0x9a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2619,50 +2836,55 @@ const insn_template i386_optab[] =
   { "lcall", 1, 0xff, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "jmp", 1, 0xeb, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jmp", 1, 0xff, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "jmp", 1, 0xff, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "jmp", 2, 0xea, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2672,20 +2894,22 @@ const insn_template i386_optab[] =
   { "jmp", 1, 0xff, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "ljmp", 2, 0xea, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2695,100 +2919,110 @@ const insn_template i386_optab[] =
   { "ljmp", 1, 0xff, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "ret", 0, 0xc3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
-      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "ret", 1, 0xc2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
-      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "ret", 0, 0xc3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "ret", 1, 0xc2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "lret", 0, 0xcb, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "lret", 1, 0xca, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "retf", 0, 0xcb, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "retf", 1, 0xca, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "enter", 2, 0xc8, None, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2798,10 +3032,11 @@ const insn_template i386_optab[] =
   { "enter", 2, 0xc8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -2811,780 +3046,858 @@ const insn_template i386_optab[] =
   { "leave", 0, 0xc9, None, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "leave", 0, 0xc9, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jo", 1, 0x70, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jno", 1, 0x71, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jb", 1, 0x72, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jc", 1, 0x72, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jnae", 1, 0x72, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jnb", 1, 0x73, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jnc", 1, 0x73, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jae", 1, 0x73, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "je", 1, 0x74, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jz", 1, 0x74, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jne", 1, 0x75, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jnz", 1, 0x75, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jbe", 1, 0x76, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jna", 1, 0x76, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jnbe", 1, 0x77, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "ja", 1, 0x77, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "js", 1, 0x78, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jns", 1, 0x79, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jp", 1, 0x7a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jpe", 1, 0x7a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jnp", 1, 0x7b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jpo", 1, 0x7b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jl", 1, 0x7c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jnge", 1, 0x7c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jnl", 1, 0x7d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jge", 1, 0x7d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jle", 1, 0x7e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jng", 1, 0x7e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jnle", 1, 0x7f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jg", 1, 0x7f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jcxz", 1, 0xe3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jecxz", 1, 0xe3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jecxz", 1, 0x67e3, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "jrcxz", 1, 0xe3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "loop", 1, 0xe2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "loop", 1, 0xe2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "loopz", 1, 0xe1, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "loopz", 1, 0xe1, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "loope", 1, 0xe1, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "loope", 1, 0xe1, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "loopnz", 1, 0xe0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "loopnz", 1, 0xe0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "loopne", 1, 0xe0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "loopne", 1, 0xe0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "seto", 1, 0xf90, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setno", 1, 0xf91, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setb", 1, 0xf92, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setc", 1, 0xf92, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setnae", 1, 0xf92, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setnb", 1, 0xf93, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setnc", 1, 0xf93, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setae", 1, 0xf93, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "sete", 1, 0xf94, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setz", 1, 0xf94, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setne", 1, 0xf95, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setnz", 1, 0xf95, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setbe", 1, 0xf96, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setna", 1, 0xf96, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setnbe", 1, 0xf97, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "seta", 1, 0xf97, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "sets", 1, 0xf98, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setns", 1, 0xf99, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setp", 1, 0xf9a, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setpe", 1, 0xf9a, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setnp", 1, 0xf9b, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setpo", 1, 0xf9b, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setl", 1, 0xf9c, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setnge", 1, 0xf9c, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setnl", 1, 0xf9d, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setge", 1, 0xf9d, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setle", 1, 0xf9e, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setng", 1, 0xf9e, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setnle", 1, 0xf9f, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "setg", 1, 0xf9f, 0x0, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "cmps", 0, 0xa6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "cmps", 2, 0xa6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -3594,20 +3907,22 @@ const insn_template i386_optab[] =
   { "scmp", 0, 0xa6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "scmp", 2, 0xa6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -3617,20 +3932,22 @@ const insn_template i386_optab[] =
   { "ins", 0, 0x6c, None, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "ins", 2, 0x6c, None, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -3640,20 +3957,22 @@ const insn_template i386_optab[] =
   { "outs", 0, 0x6e, None, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "outs", 2, 0x6e, None, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -3663,30 +3982,33 @@ const insn_template i386_optab[] =
   { "lods", 0, 0xac, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "lods", 1, 0xac, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "lods", 2, 0xac, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -3696,30 +4018,33 @@ const insn_template i386_optab[] =
   { "slod", 0, 0xac, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "slod", 1, 0xac, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "slod", 2, 0xac, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -3729,20 +4054,22 @@ const insn_template i386_optab[] =
   { "movs", 0, 0xa4, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "movs", 2, 0xa4, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -3752,20 +4079,22 @@ const insn_template i386_optab[] =
   { "smov", 0, 0xa4, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "smov", 2, 0xa4, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -3775,30 +4104,33 @@ const insn_template i386_optab[] =
   { "scas", 0, 0xae, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "scas", 1, 0xae, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "scas", 2, 0xae, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -3808,30 +4140,33 @@ const insn_template i386_optab[] =
   { "ssca", 0, 0xae, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "ssca", 1, 0xae, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "ssca", 2, 0xae, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -3841,30 +4176,33 @@ const insn_template i386_optab[] =
   { "stos", 0, 0xaa, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "stos", 1, 0xaa, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "stos", 2, 0xaa, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -3874,30 +4212,33 @@ const insn_template i386_optab[] =
   { "ssto", 0, 0xaa, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "ssto", 1, 0xaa, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "ssto", 2, 0xaa, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -3907,30 +4248,33 @@ const insn_template i386_optab[] =
   { "xlat", 0, 0xd7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "xlat", 1, 0xd7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "bsf", 2, 0xfbc, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -3940,10 +4284,11 @@ const insn_template i386_optab[] =
   { "bsr", 2, 0xfbd, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -3953,10 +4298,11 @@ const insn_template i386_optab[] =
   { "bt", 2, 0xfa3, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -3966,10 +4312,11 @@ const insn_template i386_optab[] =
   { "bt", 2, 0xfba, 0x4, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -3979,10 +4326,11 @@ const insn_template i386_optab[] =
   { "btc", 2, 0xfbb, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -3992,10 +4340,11 @@ const insn_template i386_optab[] =
   { "btc", 2, 0xfba, 0x7, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -4005,10 +4354,11 @@ const insn_template i386_optab[] =
   { "btr", 2, 0xfb3, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -4018,10 +4368,11 @@ const insn_template i386_optab[] =
   { "btr", 2, 0xfba, 0x6, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -4031,10 +4382,11 @@ const insn_template i386_optab[] =
   { "bts", 2, 0xfab, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -4044,10 +4396,11 @@ const insn_template i386_optab[] =
   { "bts", 2, 0xfba, 0x5, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -4057,60 +4410,66 @@ const insn_template i386_optab[] =
   { "int", 1, 0xcd, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "int3", 0, 0xcc, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "into", 0, 0xce, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "iret", 0, 0xcf, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rsm", 0, 0xfaa, None, 2,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "bound", 2, 0x62, None, 1,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -4120,40 +4479,44 @@ const insn_template i386_optab[] =
   { "hlt", 0, 0xf4, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "nop", 1, 0xf1f, 0x0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "nop", 0, 0x90, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "arpl", 2, 0x63, None, 1,
     { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -4163,10 +4526,11 @@ const insn_template i386_optab[] =
   { "lar", 2, 0xf02, None, 2,
     { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -4176,70 +4540,77 @@ const insn_template i386_optab[] =
   { "lgdt", 1, 0xf01, 0x2, 2,
     { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "lgdt", 1, 0xf01, 0x2, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "lidt", 1, 0xf01, 0x3, 2,
     { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "lidt", 1, 0xf01, 0x3, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "lldt", 1, 0xf00, 0x2, 2,
     { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "lmsw", 1, 0xf01, 0x6, 2,
     { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "lsl", 2, 0xf03, None, 2,
     { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -4249,630 +4620,693 @@ const insn_template i386_optab[] =
   { "ltr", 1, 0xf00, 0x3, 2,
     { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "sgdt", 1, 0xf01, 0x0, 2,
     { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "sgdt", 1, 0xf01, 0x0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "sidt", 1, 0xf01, 0x1, 2,
     { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "sidt", 1, 0xf01, 0x1, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "sldt", 1, 0xf00, 0x0, 2,
     { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "sldt", 1, 0xf00, 0x0, 2,
     { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "smsw", 1, 0xf01, 0x4, 2,
     { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "smsw", 1, 0xf01, 0x4, 2,
     { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "str", 1, 0xf00, 0x1, 2,
     { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "str", 1, 0xf00, 0x1, 2,
     { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "verr", 1, 0xf00, 0x4, 2,
     { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "verw", 1, 0xf00, 0x5, 2,
     { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fld", 1, 0xd9c0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fld", 1, 0xd9, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fld", 1, 0xd9c0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fld", 1, 0xdb, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fild", 1, 0xdf, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fild", 1, 0xdf, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fildll", 1, 0xdf, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fldt", 1, 0xdb, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fbld", 1, 0xdf, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fst", 1, 0xddd0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fst", 1, 0xd9, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fst", 1, 0xddd0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fist", 1, 0xdf, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fstp", 1, 0xddd8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fstp", 1, 0xd9, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fstp", 1, 0xddd8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fstp", 1, 0xdb, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fistp", 1, 0xdf, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fistp", 1, 0xdf, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fistpll", 1, 0xdf, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fstpt", 1, 0xdb, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fbstp", 1, 0xdf, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fxch", 1, 0xd9c8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fxch", 0, 0xd9c9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fcom", 1, 0xd8d0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fcom", 0, 0xd8d1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fcom", 1, 0xd8, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fcom", 1, 0xd8d0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "ficom", 1, 0xde, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fcomp", 1, 0xd8d8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fcomp", 0, 0xd8d9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fcomp", 1, 0xd8, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fcomp", 1, 0xd8d8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "ficomp", 1, 0xde, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fcompp", 0, 0xded9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fucom", 1, 0xdde0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fucom", 0, 0xdde1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fucomp", 1, 0xdde8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fucomp", 0, 0xdde9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fucompp", 0, 0xdae9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "ftst", 0, 0xd9e4, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fxam", 0, 0xd9e5, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fld1", 0, 0xd9e8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fldl2t", 0, 0xd9e9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fldl2e", 0, 0xd9ea, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fldpi", 0, 0xd9eb, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fldlg2", 0, 0xd9ec, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fldln2", 0, 0xd9ed, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fldz", 0, 0xd9ee, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fadd", 2, 0xd8c0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -4882,50 +5316,55 @@ const insn_template i386_optab[] =
   { "fadd", 1, 0xd8c0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fadd", 0, 0xdec1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fadd", 1, 0xd8, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fiadd", 1, 0xde, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "faddp", 2, 0xdec0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -4935,30 +5374,33 @@ const insn_template i386_optab[] =
   { "faddp", 1, 0xdec0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "faddp", 0, 0xdec1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "faddp", 2, 0xdec0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -4968,20 +5410,22 @@ const insn_template i386_optab[] =
   { "fsub", 1, 0xd8e0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fsub", 2, 0xd8e0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -4991,30 +5435,33 @@ const insn_template i386_optab[] =
   { "fsub", 0, 0xdee1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fsub", 0, 0xdee9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fsub", 2, 0xd8e0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5024,30 +5471,33 @@ const insn_template i386_optab[] =
   { "fsub", 1, 0xd8, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fisub", 1, 0xde, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fsubp", 2, 0xdee0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5057,30 +5507,33 @@ const insn_template i386_optab[] =
   { "fsubp", 1, 0xdee0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fsubp", 0, 0xdee1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fsubp", 2, 0xdee0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5090,10 +5543,11 @@ const insn_template i386_optab[] =
   { "fsubp", 2, 0xdee9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5103,10 +5557,11 @@ const insn_template i386_optab[] =
   { "fsubp", 2, 0xdee8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5116,40 +5571,44 @@ const insn_template i386_optab[] =
   { "fsubp", 1, 0xdee8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fsubp", 0, 0xdee9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fsubr", 1, 0xd8e8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fsubr", 2, 0xd8e8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5159,30 +5618,33 @@ const insn_template i386_optab[] =
   { "fsubr", 0, 0xdee9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fsubr", 0, 0xdee1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fsubr", 2, 0xd8e8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5192,30 +5654,33 @@ const insn_template i386_optab[] =
   { "fsubr", 1, 0xd8, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fisubr", 1, 0xde, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fsubrp", 2, 0xdee8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5225,30 +5690,33 @@ const insn_template i386_optab[] =
   { "fsubrp", 1, 0xdee8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fsubrp", 0, 0xdee9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fsubrp", 2, 0xdee8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5258,10 +5726,11 @@ const insn_template i386_optab[] =
   { "fsubrp", 2, 0xdee0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5271,10 +5740,11 @@ const insn_template i386_optab[] =
   { "fsubrp", 2, 0xdee0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5284,30 +5754,33 @@ const insn_template i386_optab[] =
   { "fsubrp", 1, 0xdee0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fsubrp", 0, 0xdee1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fmul", 2, 0xd8c8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5317,50 +5790,55 @@ const insn_template i386_optab[] =
   { "fmul", 1, 0xd8c8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fmul", 0, 0xdec9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fmul", 1, 0xd8, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fimul", 1, 0xde, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fmulp", 2, 0xdec8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5370,30 +5848,33 @@ const insn_template i386_optab[] =
   { "fmulp", 1, 0xdec8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fmulp", 0, 0xdec9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fmulp", 2, 0xdec8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5403,20 +5884,22 @@ const insn_template i386_optab[] =
   { "fdiv", 1, 0xd8f0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fdiv", 2, 0xd8f0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5426,30 +5909,33 @@ const insn_template i386_optab[] =
   { "fdiv", 0, 0xdef1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fdiv", 0, 0xdef9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fdiv", 2, 0xd8f0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5459,30 +5945,33 @@ const insn_template i386_optab[] =
   { "fdiv", 1, 0xd8, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fidiv", 1, 0xde, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fdivp", 2, 0xdef0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5492,30 +5981,33 @@ const insn_template i386_optab[] =
   { "fdivp", 1, 0xdef0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fdivp", 0, 0xdef1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fdivp", 2, 0xdef0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5525,10 +6017,11 @@ const insn_template i386_optab[] =
   { "fdivp", 2, 0xdef8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5538,10 +6031,11 @@ const insn_template i386_optab[] =
   { "fdivp", 2, 0xdef8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5551,40 +6045,44 @@ const insn_template i386_optab[] =
   { "fdivp", 1, 0xdef8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fdivp", 0, 0xdef9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fdivr", 1, 0xd8f8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fdivr", 2, 0xd8f8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5594,30 +6092,33 @@ const insn_template i386_optab[] =
   { "fdivr", 0, 0xdef9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fdivr", 0, 0xdef1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fdivr", 2, 0xd8f8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5627,30 +6128,33 @@ const insn_template i386_optab[] =
   { "fdivr", 1, 0xd8, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fidivr", 1, 0xde, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fdivrp", 2, 0xdef8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5660,30 +6164,33 @@ const insn_template i386_optab[] =
   { "fdivrp", 1, 0xdef8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fdivrp", 0, 0xdef9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fdivrp", 2, 0xdef8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5693,10 +6200,11 @@ const insn_template i386_optab[] =
   { "fdivrp", 2, 0xdef0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5706,10 +6214,11 @@ const insn_template i386_optab[] =
   { "fdivrp", 2, 0xdef0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -5719,1060 +6228,1166 @@ const insn_template i386_optab[] =
   { "fdivrp", 1, 0xdef0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fdivrp", 0, 0xdef1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "f2xm1", 0, 0xd9f0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fyl2x", 0, 0xd9f1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fptan", 0, 0xd9f2, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fpatan", 0, 0xd9f3, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fxtract", 0, 0xd9f4, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fprem1", 0, 0xd9f5, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fdecstp", 0, 0xd9f6, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fincstp", 0, 0xd9f7, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fprem", 0, 0xd9f8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fyl2xp1", 0, 0xd9f9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fsqrt", 0, 0xd9fa, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fsincos", 0, 0xd9fb, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "frndint", 0, 0xd9fc, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fscale", 0, 0xd9fd, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fsin", 0, 0xd9fe, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fcos", 0, 0xd9ff, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fchs", 0, 0xd9e0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fabs", 0, 0xd9e1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fninit", 0, 0xdbe3, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "finit", 0, 0xdbe3, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fldcw", 1, 0xd9, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fnstcw", 1, 0xd9, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fstcw", 1, 0xd9, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fnstsw", 1, 0xdfe0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fnstsw", 1, 0xdd, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fnstsw", 0, 0xdfe0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fstsw", 1, 0xdfe0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fstsw", 1, 0xdd, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fstsw", 0, 0xdfe0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fnclex", 0, 0xdbe2, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fclex", 0, 0xdbe2, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fnstenv", 1, 0xd9, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fstenv", 1, 0xd9, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 
       0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fldenv", 1, 0xd9, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fnsave", 1, 0xdd, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fsave", 1, 0xdd, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 
       0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "frstor", 1, 0xdd, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fneni", 0, 0xdbe0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "feni", 0, 0xdbe0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fndisi", 0, 0xdbe1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fdisi", 0, 0xdbe1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fnsetpm", 0, 0xdbe4, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fsetpm", 0, 0xdbe4, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "frstpm", 0, 0xdbe5, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "ffree", 1, 0xddc0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "ffreep", 1, 0xdfc0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fnop", 0, 0xd9d0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fwait", 0, 0x9b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "addr16", 0, 0x67, None, 1,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "addr32", 0, 0x67, None, 1,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "aword", 0, 0x67, None, 1,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "adword", 0, 0x67, None, 1,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "data16", 0, 0x66, None, 1,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "data32", 0, 0x66, None, 1,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "word", 0, 0x66, None, 1,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "dword", 0, 0x66, None, 1,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "lock", 0, 0xf0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "wait", 0, 0x9b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "cs", 0, 0x2e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "ds", 0, 0x3e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "es", 0, 0x26, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fs", 0, 0x64, None, 1,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "gs", 0, 0x65, None, 1,
     { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "ss", 0, 0x36, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rep", 0, 0xf3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "repe", 0, 0xf3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "repz", 0, 0xf3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "repne", 0, 0xf2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "repnz", 0, 0xf2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "ht", 0, 0x3e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "hnt", 0, 0x2e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex", 0, 0x40, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rexz", 0, 0x41, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rexy", 0, 0x42, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rexyz", 0, 0x43, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rexx", 0, 0x44, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rexxz", 0, 0x45, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rexxy", 0, 0x46, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rexxyz", 0, 0x47, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex64", 0, 0x48, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex64z", 0, 0x49, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex64y", 0, 0x4a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex64yz", 0, 0x4b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex64x", 0, 0x4c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex64xz", 0, 0x4d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex64xy", 0, 0x4e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex64xyz", 0, 0x4f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex.b", 0, 0x41, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex.x", 0, 0x42, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex.xb", 0, 0x43, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex.r", 0, 0x44, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex.rb", 0, 0x45, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex.rx", 0, 0x46, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex.rxb", 0, 0x47, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex.w", 0, 0x48, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex.wb", 0, 0x49, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex.wx", 0, 0x4a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex.wxb", 0, 0x4b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex.wr", 0, 0x4c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex.wrb", 0, 0x4d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex.wrx", 0, 0x4e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rex.wrxb", 0, 0x4f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "bswap", 1, 0xfc8, None, 2,
     { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "xadd", 2, 0xfc0, None, 2,
     { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -6782,10 +7397,11 @@ const insn_template i386_optab[] =
   { "cmpxchg", 2, 0xfb0, None, 2,
     { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -6795,200 +7411,220 @@ const insn_template i386_optab[] =
   { "invd", 0, 0xf08, None, 2,
     { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "wbinvd", 0, 0xf09, None, 2,
     { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "invlpg", 1, 0xf01, 0x7, 2,
     { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "cpuid", 0, 0xfa2, None, 2,
     { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "wrmsr", 0, 0xf30, None, 2,
     { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rdtsc", 0, 0xf31, None, 2,
     { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rdmsr", 0, 0xf32, None, 2,
     { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "cmpxchg8b", 1, 0xfc7, 0x1, 2,
     { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "sysenter", 0, 0xf34, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "sysexit", 0, 0xf35, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fxsave", 1, 0xfae, 0x0, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fxsave64", 1, 0xfae, 0x0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fxrstor", 1, 0xfae, 0x1, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fxrstor64", 1, 0xfae, 0x1, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "rdpmc", 0, 0xf33, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "ud2", 0, 0xf0b, None, 2,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "ud2a", 0, 0xf0b, None, 2,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "ud1", 0, 0xfb9, None, 2,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "ud2b", 0, 0xfb9, None, 2,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "cmovo", 2, 0xf40, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -6998,10 +7634,11 @@ const insn_template i386_optab[] =
   { "cmovno", 2, 0xf41, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7011,10 +7648,11 @@ const insn_template i386_optab[] =
   { "cmovb", 2, 0xf42, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7024,10 +7662,11 @@ const insn_template i386_optab[] =
   { "cmovc", 2, 0xf42, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7037,10 +7676,11 @@ const insn_template i386_optab[] =
   { "cmovnae", 2, 0xf42, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7050,10 +7690,11 @@ const insn_template i386_optab[] =
   { "cmovae", 2, 0xf43, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7063,10 +7704,11 @@ const insn_template i386_optab[] =
   { "cmovnc", 2, 0xf43, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7076,10 +7718,11 @@ const insn_template i386_optab[] =
   { "cmovnb", 2, 0xf43, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7089,10 +7732,11 @@ const insn_template i386_optab[] =
   { "cmove", 2, 0xf44, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7102,10 +7746,11 @@ const insn_template i386_optab[] =
   { "cmovz", 2, 0xf44, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7115,10 +7760,11 @@ const insn_template i386_optab[] =
   { "cmovne", 2, 0xf45, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7128,10 +7774,11 @@ const insn_template i386_optab[] =
   { "cmovnz", 2, 0xf45, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7141,10 +7788,11 @@ const insn_template i386_optab[] =
   { "cmovbe", 2, 0xf46, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7154,10 +7802,11 @@ const insn_template i386_optab[] =
   { "cmovna", 2, 0xf46, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7167,10 +7816,11 @@ const insn_template i386_optab[] =
   { "cmova", 2, 0xf47, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7180,10 +7830,11 @@ const insn_template i386_optab[] =
   { "cmovnbe", 2, 0xf47, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7193,10 +7844,11 @@ const insn_template i386_optab[] =
   { "cmovs", 2, 0xf48, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7206,10 +7858,11 @@ const insn_template i386_optab[] =
   { "cmovns", 2, 0xf49, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7219,10 +7872,11 @@ const insn_template i386_optab[] =
   { "cmovp", 2, 0xf4a, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7232,10 +7886,11 @@ const insn_template i386_optab[] =
   { "cmovnp", 2, 0xf4b, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7245,10 +7900,11 @@ const insn_template i386_optab[] =
   { "cmovl", 2, 0xf4c, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7258,10 +7914,11 @@ const insn_template i386_optab[] =
   { "cmovnge", 2, 0xf4c, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7271,10 +7928,11 @@ const insn_template i386_optab[] =
   { "cmovge", 2, 0xf4d, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7284,10 +7942,11 @@ const insn_template i386_optab[] =
   { "cmovnl", 2, 0xf4d, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7297,10 +7956,11 @@ const insn_template i386_optab[] =
   { "cmovle", 2, 0xf4e, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7310,10 +7970,11 @@ const insn_template i386_optab[] =
   { "cmovng", 2, 0xf4e, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7323,10 +7984,11 @@ const insn_template i386_optab[] =
   { "cmovg", 2, 0xf4f, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7336,10 +7998,11 @@ const insn_template i386_optab[] =
   { "cmovnle", 2, 0xf4f, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7349,10 +8012,11 @@ const insn_template i386_optab[] =
   { "cmovpe", 2, 0xf4a, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7362,10 +8026,11 @@ const insn_template i386_optab[] =
   { "cmovpo", 2, 0xf4b, None, 2,
     { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7375,10 +8040,11 @@ const insn_template i386_optab[] =
   { "fcmovb", 2, 0xdac0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7388,10 +8054,11 @@ const insn_template i386_optab[] =
   { "fcmovnae", 2, 0xdac0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7401,10 +8068,11 @@ const insn_template i386_optab[] =
   { "fcmove", 2, 0xdac8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7414,10 +8082,11 @@ const insn_template i386_optab[] =
   { "fcmovbe", 2, 0xdad0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7427,10 +8096,11 @@ const insn_template i386_optab[] =
   { "fcmovna", 2, 0xdad0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7440,10 +8110,11 @@ const insn_template i386_optab[] =
   { "fcmovu", 2, 0xdad8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7453,10 +8124,11 @@ const insn_template i386_optab[] =
   { "fcmovae", 2, 0xdbc0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7466,10 +8138,11 @@ const insn_template i386_optab[] =
   { "fcmovnb", 2, 0xdbc0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7479,10 +8152,11 @@ const insn_template i386_optab[] =
   { "fcmovne", 2, 0xdbc8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7492,10 +8166,11 @@ const insn_template i386_optab[] =
   { "fcmova", 2, 0xdbd0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7505,10 +8180,11 @@ const insn_template i386_optab[] =
   { "fcmovnbe", 2, 0xdbd0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7518,10 +8194,11 @@ const insn_template i386_optab[] =
   { "fcmovnu", 2, 0xdbd8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7531,10 +8208,11 @@ const insn_template i386_optab[] =
   { "fcomi", 2, 0xdbf0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7544,30 +8222,33 @@ const insn_template i386_optab[] =
   { "fcomi", 0, 0xdbf1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fcomi", 1, 0xdbf0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fucomi", 2, 0xdbe8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7577,30 +8258,33 @@ const insn_template i386_optab[] =
   { "fucomi", 0, 0xdbe9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fucomi", 1, 0xdbe8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fcomip", 2, 0xdff0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7610,30 +8294,33 @@ const insn_template i386_optab[] =
   { "fcomip", 0, 0xdff1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fcomip", 1, 0xdff0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fcompi", 2, 0xdff0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7643,30 +8330,33 @@ const insn_template i386_optab[] =
   { "fcompi", 0, 0xdff1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fcompi", 1, 0xdff0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fucomip", 2, 0xdfe8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7676,30 +8366,33 @@ const insn_template i386_optab[] =
   { "fucomip", 0, 0xdfe9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fucomip", 1, 0xdfe8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fucompi", 2, 0xdfe8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7709,30 +8402,33 @@ const insn_template i386_optab[] =
   { "fucompi", 0, 0xdfe9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "fucompi", 1, 0xdfe8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "movnti", 2, 0xfc3, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7742,60 +8438,66 @@ const insn_template i386_optab[] =
   { "clflush", 1, 0xfae, 0x7, 2,
     { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "lfence", 0, 0xfae, 0xe8, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "mfence", 0, 0xfae, 0xf0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "pause", 0, 0xf390, None, 2,
     { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "emms", 0, 0xf77, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "movd", 2, 0x666e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7805,10 +8507,11 @@ const insn_template i386_optab[] =
   { "movd", 2, 0x666e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 
-      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7818,10 +8521,11 @@ const insn_template i386_optab[] =
   { "movd", 2, 0x667e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7831,10 +8535,11 @@ const insn_template i386_optab[] =
   { "movd", 2, 0x667e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 
-      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7844,10 +8549,11 @@ const insn_template i386_optab[] =
   { "movd", 2, 0x660f6e, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7857,10 +8563,11 @@ const insn_template i386_optab[] =
   { "movd", 2, 0x660f6e, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7870,10 +8577,11 @@ const insn_template i386_optab[] =
   { "movd", 2, 0x660f7e, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7883,10 +8591,11 @@ const insn_template i386_optab[] =
   { "movd", 2, 0x660f7e, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7896,10 +8605,11 @@ const insn_template i386_optab[] =
   { "movd", 2, 0xf6e, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7909,10 +8619,11 @@ const insn_template i386_optab[] =
   { "movd", 2, 0xf6e, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7922,10 +8633,11 @@ const insn_template i386_optab[] =
   { "movd", 2, 0xf7e, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7935,10 +8647,11 @@ const insn_template i386_optab[] =
   { "movd", 2, 0xf7e, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7948,10 +8661,11 @@ const insn_template i386_optab[] =
   { "movq", 2, 0xa0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -7961,10 +8675,11 @@ const insn_template i386_optab[] =
   { "movq", 2, 0x88, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7974,10 +8689,11 @@ const insn_template i386_optab[] =
   { "movq", 2, 0xc6, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -7987,10 +8703,11 @@ const insn_template i386_optab[] =
   { "movq", 2, 0xb0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -8000,10 +8717,11 @@ const insn_template i386_optab[] =
   { "movq", 2, 0xf37e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8013,10 +8731,11 @@ const insn_template i386_optab[] =
   { "movq", 2, 0x66d6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -8026,10 +8745,11 @@ const insn_template i386_optab[] =
   { "movq", 2, 0x666e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8039,10 +8759,11 @@ const insn_template i386_optab[] =
   { "movq", 2, 0x667e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -8052,10 +8773,11 @@ const insn_template i386_optab[] =
   { "movq", 2, 0xf30f7e, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8065,10 +8787,11 @@ const insn_template i386_optab[] =
   { "movq", 2, 0x660fd6, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -8078,10 +8801,11 @@ const insn_template i386_optab[] =
   { "movq", 2, 0x660f6e, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8091,10 +8815,11 @@ const insn_template i386_optab[] =
   { "movq", 2, 0x660f7e, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -8104,10 +8829,11 @@ const insn_template i386_optab[] =
   { "movq", 2, 0xf6f, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8117,10 +8843,11 @@ const insn_template i386_optab[] =
   { "movq", 2, 0xf7f, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -8130,10 +8857,11 @@ const insn_template i386_optab[] =
   { "movq", 2, 0xf6e, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8143,10 +8871,11 @@ const insn_template i386_optab[] =
   { "movq", 2, 0xf7e, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -8156,10 +8885,11 @@ const insn_template i386_optab[] =
   { "movq", 2, 0x8c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -8169,10 +8899,11 @@ const insn_template i386_optab[] =
   { "movq", 2, 0x8e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -8182,10 +8913,11 @@ const insn_template i386_optab[] =
   { "movq", 2, 0xf20, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -8195,10 +8927,11 @@ const insn_template i386_optab[] =
   { "movq", 2, 0xf21, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -8208,10 +8941,11 @@ const insn_template i386_optab[] =
   { "packssdw", 2, 0x666b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8221,10 +8955,11 @@ const insn_template i386_optab[] =
   { "packssdw", 2, 0x660f6b, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8234,10 +8969,11 @@ const insn_template i386_optab[] =
   { "packssdw", 2, 0xf6b, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8247,10 +8983,11 @@ const insn_template i386_optab[] =
   { "packsswb", 2, 0x6663, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8260,10 +8997,11 @@ const insn_template i386_optab[] =
   { "packsswb", 2, 0x660f63, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8273,10 +9011,11 @@ const insn_template i386_optab[] =
   { "packsswb", 2, 0xf63, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8286,10 +9025,11 @@ const insn_template i386_optab[] =
   { "packuswb", 2, 0x6667, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8299,10 +9039,11 @@ const insn_template i386_optab[] =
   { "packuswb", 2, 0x660f67, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8312,10 +9053,11 @@ const insn_template i386_optab[] =
   { "packuswb", 2, 0xf67, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8325,10 +9067,11 @@ const insn_template i386_optab[] =
   { "paddb", 2, 0x66fc, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8338,10 +9081,11 @@ const insn_template i386_optab[] =
   { "paddb", 2, 0x660ffc, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8351,10 +9095,11 @@ const insn_template i386_optab[] =
   { "paddb", 2, 0xffc, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8364,10 +9109,11 @@ const insn_template i386_optab[] =
   { "paddw", 2, 0x66fd, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8377,10 +9123,11 @@ const insn_template i386_optab[] =
   { "paddw", 2, 0x660ffd, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8390,10 +9137,11 @@ const insn_template i386_optab[] =
   { "paddw", 2, 0xffd, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8403,10 +9151,11 @@ const insn_template i386_optab[] =
   { "paddd", 2, 0x66fe, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8416,10 +9165,11 @@ const insn_template i386_optab[] =
   { "paddd", 2, 0x660ffe, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8429,10 +9179,11 @@ const insn_template i386_optab[] =
   { "paddd", 2, 0xffe, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8442,10 +9193,11 @@ const insn_template i386_optab[] =
   { "paddq", 2, 0x66d4, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8455,10 +9207,11 @@ const insn_template i386_optab[] =
   { "paddq", 2, 0x660fd4, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8468,10 +9221,11 @@ const insn_template i386_optab[] =
   { "paddq", 2, 0xfd4, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8481,10 +9235,11 @@ const insn_template i386_optab[] =
   { "paddsb", 2, 0x66ec, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8494,10 +9249,11 @@ const insn_template i386_optab[] =
   { "paddsb", 2, 0x660fec, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8507,10 +9263,11 @@ const insn_template i386_optab[] =
   { "paddsb", 2, 0xfec, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8520,10 +9277,11 @@ const insn_template i386_optab[] =
   { "paddsw", 2, 0x66ed, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8533,10 +9291,11 @@ const insn_template i386_optab[] =
   { "paddsw", 2, 0x660fed, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8546,10 +9305,11 @@ const insn_template i386_optab[] =
   { "paddsw", 2, 0xfed, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8559,10 +9319,11 @@ const insn_template i386_optab[] =
   { "paddusb", 2, 0x66dc, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8572,10 +9333,11 @@ const insn_template i386_optab[] =
   { "paddusb", 2, 0x660fdc, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8585,10 +9347,11 @@ const insn_template i386_optab[] =
   { "paddusb", 2, 0xfdc, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8598,10 +9361,11 @@ const insn_template i386_optab[] =
   { "paddusw", 2, 0x66dd, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8611,10 +9375,11 @@ const insn_template i386_optab[] =
   { "paddusw", 2, 0x660fdd, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8624,10 +9389,11 @@ const insn_template i386_optab[] =
   { "paddusw", 2, 0xfdd, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8637,10 +9403,11 @@ const insn_template i386_optab[] =
   { "pand", 2, 0x66db, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8650,10 +9417,11 @@ const insn_template i386_optab[] =
   { "pand", 2, 0x660fdb, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8663,10 +9431,11 @@ const insn_template i386_optab[] =
   { "pand", 2, 0xfdb, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8676,10 +9445,11 @@ const insn_template i386_optab[] =
   { "pandn", 2, 0x66df, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8689,10 +9459,11 @@ const insn_template i386_optab[] =
   { "pandn", 2, 0x660fdf, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8702,10 +9473,11 @@ const insn_template i386_optab[] =
   { "pandn", 2, 0xfdf, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8715,10 +9487,11 @@ const insn_template i386_optab[] =
   { "pcmpeqb", 2, 0x6674, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8728,10 +9501,11 @@ const insn_template i386_optab[] =
   { "pcmpeqb", 2, 0x660f74, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8741,10 +9515,11 @@ const insn_template i386_optab[] =
   { "pcmpeqb", 2, 0xf74, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8754,10 +9529,11 @@ const insn_template i386_optab[] =
   { "pcmpeqw", 2, 0x6675, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8767,10 +9543,11 @@ const insn_template i386_optab[] =
   { "pcmpeqw", 2, 0x660f75, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8780,10 +9557,11 @@ const insn_template i386_optab[] =
   { "pcmpeqw", 2, 0xf75, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8793,10 +9571,11 @@ const insn_template i386_optab[] =
   { "pcmpeqd", 2, 0x6676, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8806,10 +9585,11 @@ const insn_template i386_optab[] =
   { "pcmpeqd", 2, 0x660f76, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8819,10 +9599,11 @@ const insn_template i386_optab[] =
   { "pcmpeqd", 2, 0xf76, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8832,10 +9613,11 @@ const insn_template i386_optab[] =
   { "pcmpgtb", 2, 0x6664, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8845,10 +9627,11 @@ const insn_template i386_optab[] =
   { "pcmpgtb", 2, 0x660f64, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8858,10 +9641,11 @@ const insn_template i386_optab[] =
   { "pcmpgtb", 2, 0xf64, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8871,10 +9655,11 @@ const insn_template i386_optab[] =
   { "pcmpgtw", 2, 0x6665, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8884,10 +9669,11 @@ const insn_template i386_optab[] =
   { "pcmpgtw", 2, 0x660f65, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8897,10 +9683,11 @@ const insn_template i386_optab[] =
   { "pcmpgtw", 2, 0xf65, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8910,10 +9697,11 @@ const insn_template i386_optab[] =
   { "pcmpgtd", 2, 0x6666, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8923,10 +9711,11 @@ const insn_template i386_optab[] =
   { "pcmpgtd", 2, 0x660f66, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8936,10 +9725,11 @@ const insn_template i386_optab[] =
   { "pcmpgtd", 2, 0xf66, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8949,10 +9739,11 @@ const insn_template i386_optab[] =
   { "pmaddwd", 2, 0x66f5, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8962,10 +9753,11 @@ const insn_template i386_optab[] =
   { "pmaddwd", 2, 0x660ff5, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -8975,10 +9767,11 @@ const insn_template i386_optab[] =
   { "pmaddwd", 2, 0xff5, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -8988,10 +9781,11 @@ const insn_template i386_optab[] =
   { "pmulhw", 2, 0x66e5, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9001,10 +9795,11 @@ const insn_template i386_optab[] =
   { "pmulhw", 2, 0x660fe5, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9014,10 +9809,11 @@ const insn_template i386_optab[] =
   { "pmulhw", 2, 0xfe5, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -9027,10 +9823,11 @@ const insn_template i386_optab[] =
   { "pmullw", 2, 0x66d5, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9040,10 +9837,11 @@ const insn_template i386_optab[] =
   { "pmullw", 2, 0x660fd5, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9053,10 +9851,11 @@ const insn_template i386_optab[] =
   { "pmullw", 2, 0xfd5, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -9066,10 +9865,11 @@ const insn_template i386_optab[] =
   { "por", 2, 0x66eb, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9079,10 +9879,11 @@ const insn_template i386_optab[] =
   { "por", 2, 0x660feb, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9092,10 +9893,11 @@ const insn_template i386_optab[] =
   { "por", 2, 0xfeb, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -9105,10 +9907,11 @@ const insn_template i386_optab[] =
   { "psllw", 2, 0x6671, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 2, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9118,10 +9921,11 @@ const insn_template i386_optab[] =
   { "psllw", 2, 0x66f1, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9131,10 +9935,11 @@ const insn_template i386_optab[] =
   { "psllw", 2, 0x660f71, 0x6, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9144,10 +9949,11 @@ const insn_template i386_optab[] =
   { "psllw", 2, 0x660ff1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9157,10 +9963,11 @@ const insn_template i386_optab[] =
   { "psllw", 2, 0xf71, 0x6, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9170,10 +9977,11 @@ const insn_template i386_optab[] =
   { "psllw", 2, 0xff1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -9183,10 +9991,11 @@ const insn_template i386_optab[] =
   { "pslld", 2, 0x6672, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 2, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9196,10 +10005,11 @@ const insn_template i386_optab[] =
   { "pslld", 2, 0x66f2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9209,10 +10019,11 @@ const insn_template i386_optab[] =
   { "pslld", 2, 0x660f72, 0x6, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9222,10 +10033,11 @@ const insn_template i386_optab[] =
   { "pslld", 2, 0x660ff2, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9235,10 +10047,11 @@ const insn_template i386_optab[] =
   { "pslld", 2, 0xf72, 0x6, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9248,10 +10061,11 @@ const insn_template i386_optab[] =
   { "pslld", 2, 0xff2, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -9261,10 +10075,11 @@ const insn_template i386_optab[] =
   { "psllq", 2, 0x6673, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 2, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9274,10 +10089,11 @@ const insn_template i386_optab[] =
   { "psllq", 2, 0x66f3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9287,10 +10103,11 @@ const insn_template i386_optab[] =
   { "psllq", 2, 0x660f73, 0x6, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9300,10 +10117,11 @@ const insn_template i386_optab[] =
   { "psllq", 2, 0x660ff3, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9313,10 +10131,11 @@ const insn_template i386_optab[] =
   { "psllq", 2, 0xf73, 0x6, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9326,10 +10145,11 @@ const insn_template i386_optab[] =
   { "psllq", 2, 0xff3, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -9339,10 +10159,11 @@ const insn_template i386_optab[] =
   { "psraw", 2, 0x6671, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 2, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9352,10 +10173,11 @@ const insn_template i386_optab[] =
   { "psraw", 2, 0x66e1, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9365,10 +10187,11 @@ const insn_template i386_optab[] =
   { "psraw", 2, 0x660f71, 0x4, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9378,10 +10201,11 @@ const insn_template i386_optab[] =
   { "psraw", 2, 0x660fe1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9391,10 +10215,11 @@ const insn_template i386_optab[] =
   { "psraw", 2, 0xf71, 0x4, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9404,10 +10229,11 @@ const insn_template i386_optab[] =
   { "psraw", 2, 0xfe1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -9417,10 +10243,11 @@ const insn_template i386_optab[] =
   { "psrad", 2, 0x6672, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 2, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9430,10 +10257,11 @@ const insn_template i386_optab[] =
   { "psrad", 2, 0x66e2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9443,10 +10271,11 @@ const insn_template i386_optab[] =
   { "psrad", 2, 0x660f72, 0x4, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9456,10 +10285,11 @@ const insn_template i386_optab[] =
   { "psrad", 2, 0x660fe2, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9469,10 +10299,11 @@ const insn_template i386_optab[] =
   { "psrad", 2, 0xf72, 0x4, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9482,10 +10313,11 @@ const insn_template i386_optab[] =
   { "psrad", 2, 0xfe2, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -9495,10 +10327,11 @@ const insn_template i386_optab[] =
   { "psrlw", 2, 0x6671, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 2, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9508,10 +10341,11 @@ const insn_template i386_optab[] =
   { "psrlw", 2, 0x66d1, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9521,10 +10355,11 @@ const insn_template i386_optab[] =
   { "psrlw", 2, 0x660f71, 0x2, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9534,10 +10369,11 @@ const insn_template i386_optab[] =
   { "psrlw", 2, 0x660fd1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9547,10 +10383,11 @@ const insn_template i386_optab[] =
   { "psrlw", 2, 0xf71, 0x2, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9560,10 +10397,11 @@ const insn_template i386_optab[] =
   { "psrlw", 2, 0xfd1, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -9573,10 +10411,11 @@ const insn_template i386_optab[] =
   { "psrld", 2, 0x6672, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 2, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9586,10 +10425,11 @@ const insn_template i386_optab[] =
   { "psrld", 2, 0x66d2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9599,10 +10439,11 @@ const insn_template i386_optab[] =
   { "psrld", 2, 0x660f72, 0x2, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9612,10 +10453,11 @@ const insn_template i386_optab[] =
   { "psrld", 2, 0x660fd2, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9625,10 +10467,11 @@ const insn_template i386_optab[] =
   { "psrld", 2, 0xf72, 0x2, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9638,10 +10481,11 @@ const insn_template i386_optab[] =
   { "psrld", 2, 0xfd2, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -9651,10 +10495,11 @@ const insn_template i386_optab[] =
   { "psrlq", 2, 0x6673, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 2, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9664,10 +10509,11 @@ const insn_template i386_optab[] =
   { "psrlq", 2, 0x66d3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9677,10 +10523,11 @@ const insn_template i386_optab[] =
   { "psrlq", 2, 0x660f73, 0x2, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9690,10 +10537,11 @@ const insn_template i386_optab[] =
   { "psrlq", 2, 0x660fd3, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9703,10 +10551,11 @@ const insn_template i386_optab[] =
   { "psrlq", 2, 0xf73, 0x2, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -9716,10 +10565,11 @@ const insn_template i386_optab[] =
   { "psrlq", 2, 0xfd3, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -9729,10 +10579,11 @@ const insn_template i386_optab[] =
   { "psubb", 2, 0x66f8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9742,10 +10593,11 @@ const insn_template i386_optab[] =
   { "psubb", 2, 0x660ff8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9755,10 +10607,11 @@ const insn_template i386_optab[] =
   { "psubb", 2, 0xff8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -9768,10 +10621,11 @@ const insn_template i386_optab[] =
   { "psubw", 2, 0x66f9, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9781,10 +10635,11 @@ const insn_template i386_optab[] =
   { "psubw", 2, 0x660ff9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9794,10 +10649,11 @@ const insn_template i386_optab[] =
   { "psubw", 2, 0xff9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -9807,10 +10663,11 @@ const insn_template i386_optab[] =
   { "psubd", 2, 0x66fa, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9820,10 +10677,11 @@ const insn_template i386_optab[] =
   { "psubd", 2, 0x660ffa, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9833,10 +10691,11 @@ const insn_template i386_optab[] =
   { "psubd", 2, 0xffa, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -9846,10 +10705,11 @@ const insn_template i386_optab[] =
   { "psubq", 2, 0x66fb, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9859,10 +10719,11 @@ const insn_template i386_optab[] =
   { "psubq", 2, 0x660ffb, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9872,10 +10733,11 @@ const insn_template i386_optab[] =
   { "psubq", 2, 0xffb, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -9885,10 +10747,11 @@ const insn_template i386_optab[] =
   { "psubsb", 2, 0x66e8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9898,10 +10761,11 @@ const insn_template i386_optab[] =
   { "psubsb", 2, 0x660fe8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9911,10 +10775,11 @@ const insn_template i386_optab[] =
   { "psubsb", 2, 0xfe8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -9924,10 +10789,11 @@ const insn_template i386_optab[] =
   { "psubsw", 2, 0x66e9, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9937,10 +10803,11 @@ const insn_template i386_optab[] =
   { "psubsw", 2, 0x660fe9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9950,10 +10817,11 @@ const insn_template i386_optab[] =
   { "psubsw", 2, 0xfe9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -9963,10 +10831,11 @@ const insn_template i386_optab[] =
   { "psubusb", 2, 0x66d8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9976,10 +10845,11 @@ const insn_template i386_optab[] =
   { "psubusb", 2, 0x660fd8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -9989,10 +10859,11 @@ const insn_template i386_optab[] =
   { "psubusb", 2, 0xfd8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10002,10 +10873,11 @@ const insn_template i386_optab[] =
   { "psubusw", 2, 0x66d9, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10015,10 +10887,11 @@ const insn_template i386_optab[] =
   { "psubusw", 2, 0x660fd9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10028,10 +10901,11 @@ const insn_template i386_optab[] =
   { "psubusw", 2, 0xfd9, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10041,10 +10915,11 @@ const insn_template i386_optab[] =
   { "punpckhbw", 2, 0x6668, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10054,10 +10929,11 @@ const insn_template i386_optab[] =
   { "punpckhbw", 2, 0x660f68, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10067,10 +10943,11 @@ const insn_template i386_optab[] =
   { "punpckhbw", 2, 0xf68, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10080,10 +10957,11 @@ const insn_template i386_optab[] =
   { "punpckhwd", 2, 0x6669, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10093,10 +10971,11 @@ const insn_template i386_optab[] =
   { "punpckhwd", 2, 0x660f69, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10106,10 +10985,11 @@ const insn_template i386_optab[] =
   { "punpckhwd", 2, 0xf69, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10119,10 +10999,11 @@ const insn_template i386_optab[] =
   { "punpckhdq", 2, 0x666a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10132,10 +11013,11 @@ const insn_template i386_optab[] =
   { "punpckhdq", 2, 0x660f6a, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10145,10 +11027,11 @@ const insn_template i386_optab[] =
   { "punpckhdq", 2, 0xf6a, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10158,10 +11041,11 @@ const insn_template i386_optab[] =
   { "punpcklbw", 2, 0x6660, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10171,10 +11055,11 @@ const insn_template i386_optab[] =
   { "punpcklbw", 2, 0x660f60, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10184,10 +11069,11 @@ const insn_template i386_optab[] =
   { "punpcklbw", 2, 0xf60, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10197,10 +11083,11 @@ const insn_template i386_optab[] =
   { "punpcklwd", 2, 0x6661, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10210,10 +11097,11 @@ const insn_template i386_optab[] =
   { "punpcklwd", 2, 0x660f61, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10223,10 +11111,11 @@ const insn_template i386_optab[] =
   { "punpcklwd", 2, 0xf61, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10236,10 +11125,11 @@ const insn_template i386_optab[] =
   { "punpckldq", 2, 0x6662, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10249,10 +11139,11 @@ const insn_template i386_optab[] =
   { "punpckldq", 2, 0x660f62, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10262,10 +11153,11 @@ const insn_template i386_optab[] =
   { "punpckldq", 2, 0xf62, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10275,10 +11167,11 @@ const insn_template i386_optab[] =
   { "pxor", 2, 0x66ef, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10288,10 +11181,11 @@ const insn_template i386_optab[] =
   { "pxor", 2, 0x660fef, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10301,10 +11195,11 @@ const insn_template i386_optab[] =
   { "pxor", 2, 0xfef, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10314,10 +11209,11 @@ const insn_template i386_optab[] =
   { "addps", 2, 0x58, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10327,10 +11223,11 @@ const insn_template i386_optab[] =
   { "addps", 2, 0xf58, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10340,10 +11237,11 @@ const insn_template i386_optab[] =
   { "addss", 2, 0xf358, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10353,10 +11251,11 @@ const insn_template i386_optab[] =
   { "addss", 2, 0xf30f58, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10366,10 +11265,11 @@ const insn_template i386_optab[] =
   { "andnps", 2, 0x55, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10379,10 +11279,11 @@ const insn_template i386_optab[] =
   { "andnps", 2, 0xf55, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10392,10 +11293,11 @@ const insn_template i386_optab[] =
   { "andps", 2, 0x54, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10405,10 +11307,11 @@ const insn_template i386_optab[] =
   { "andps", 2, 0xf54, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10418,10 +11321,11 @@ const insn_template i386_optab[] =
   { "cmpeqps", 2, 0xc2, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10431,10 +11335,11 @@ const insn_template i386_optab[] =
   { "cmpeqps", 2, 0xfc2, 0x0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10444,10 +11349,11 @@ const insn_template i386_optab[] =
   { "cmpeqss", 2, 0xf3c2, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10457,10 +11363,11 @@ const insn_template i386_optab[] =
   { "cmpeqss", 2, 0xf30fc2, 0x0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10470,10 +11377,11 @@ const insn_template i386_optab[] =
   { "cmpleps", 2, 0xc2, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10483,10 +11391,11 @@ const insn_template i386_optab[] =
   { "cmpleps", 2, 0xfc2, 0x2, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10496,10 +11405,11 @@ const insn_template i386_optab[] =
   { "cmpless", 2, 0xf3c2, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10509,10 +11419,11 @@ const insn_template i386_optab[] =
   { "cmpless", 2, 0xf30fc2, 0x2, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10522,10 +11433,11 @@ const insn_template i386_optab[] =
   { "cmpltps", 2, 0xc2, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10535,10 +11447,11 @@ const insn_template i386_optab[] =
   { "cmpltps", 2, 0xfc2, 0x1, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10548,10 +11461,11 @@ const insn_template i386_optab[] =
   { "cmpltss", 2, 0xf3c2, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10561,10 +11475,11 @@ const insn_template i386_optab[] =
   { "cmpltss", 2, 0xf30fc2, 0x1, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10574,10 +11489,11 @@ const insn_template i386_optab[] =
   { "cmpneqps", 2, 0xc2, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10587,10 +11503,11 @@ const insn_template i386_optab[] =
   { "cmpneqps", 2, 0xfc2, 0x4, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10600,10 +11517,11 @@ const insn_template i386_optab[] =
   { "cmpneqss", 2, 0xf3c2, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10613,10 +11531,11 @@ const insn_template i386_optab[] =
   { "cmpneqss", 2, 0xf30fc2, 0x4, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10626,10 +11545,11 @@ const insn_template i386_optab[] =
   { "cmpnleps", 2, 0xc2, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10639,10 +11559,11 @@ const insn_template i386_optab[] =
   { "cmpnleps", 2, 0xfc2, 0x6, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10652,10 +11573,11 @@ const insn_template i386_optab[] =
   { "cmpnless", 2, 0xf3c2, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10665,10 +11587,11 @@ const insn_template i386_optab[] =
   { "cmpnless", 2, 0xf30fc2, 0x6, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10678,10 +11601,11 @@ const insn_template i386_optab[] =
   { "cmpnltps", 2, 0xc2, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10691,10 +11615,11 @@ const insn_template i386_optab[] =
   { "cmpnltps", 2, 0xfc2, 0x5, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10704,10 +11629,11 @@ const insn_template i386_optab[] =
   { "cmpnltss", 2, 0xf3c2, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10717,10 +11643,11 @@ const insn_template i386_optab[] =
   { "cmpnltss", 2, 0xf30fc2, 0x5, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10730,10 +11657,11 @@ const insn_template i386_optab[] =
   { "cmpordps", 2, 0xc2, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10743,10 +11671,11 @@ const insn_template i386_optab[] =
   { "cmpordps", 2, 0xfc2, 0x7, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10756,10 +11685,11 @@ const insn_template i386_optab[] =
   { "cmpordss", 2, 0xf3c2, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10769,10 +11699,11 @@ const insn_template i386_optab[] =
   { "cmpordss", 2, 0xf30fc2, 0x7, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10782,10 +11713,11 @@ const insn_template i386_optab[] =
   { "cmpunordps", 2, 0xc2, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10795,10 +11727,11 @@ const insn_template i386_optab[] =
   { "cmpunordps", 2, 0xfc2, 0x3, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -10808,10 +11741,11 @@ const insn_template i386_optab[] =
   { "cmpunordss", 2, 0xf3c2, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10821,10 +11755,11 @@ const insn_template i386_optab[] =
   { "cmpunordss", 2, 0xf30fc2, 0x3, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10834,10 +11769,11 @@ const insn_template i386_optab[] =
   { "cmpps", 3, 0xc2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -10850,10 +11786,11 @@ const insn_template i386_optab[] =
   { "cmpps", 3, 0xfc2, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -10866,10 +11803,11 @@ const insn_template i386_optab[] =
   { "cmpss", 3, 0xf3c2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -10882,10 +11820,11 @@ const insn_template i386_optab[] =
   { "cmpss", 3, 0xf30fc2, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -10898,10 +11837,11 @@ const insn_template i386_optab[] =
   { "comiss", 2, 0x2f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10911,10 +11851,11 @@ const insn_template i386_optab[] =
   { "comiss", 2, 0xf2f, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10924,10 +11865,11 @@ const insn_template i386_optab[] =
   { "cvtpi2ps", 2, 0xf2a, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10937,10 +11879,11 @@ const insn_template i386_optab[] =
   { "cvtps2pi", 2, 0xf2d, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10950,10 +11893,11 @@ const insn_template i386_optab[] =
   { "cvtsi2ss", 2, 0xf32a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10963,10 +11907,11 @@ const insn_template i386_optab[] =
   { "cvtsi2ss", 2, 0xf32a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10976,10 +11921,11 @@ const insn_template i386_optab[] =
   { "cvtsi2ss", 2, 0xf30f2a, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -10989,10 +11935,11 @@ const insn_template i386_optab[] =
   { "cvtsi2ss", 2, 0xf30f2a, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -11002,10 +11949,11 @@ const insn_template i386_optab[] =
   { "cvtss2si", 2, 0xf32d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 
-      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
+      3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -11015,10 +11963,11 @@ const insn_template i386_optab[] =
   { "cvtss2si", 2, 0xf30f2d, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -11028,10 +11977,11 @@ const insn_template i386_optab[] =
   { "cvttps2pi", 2, 0xf2c, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -11041,10 +11991,11 @@ const insn_template i386_optab[] =
   { "cvttss2si", 2, 0xf32c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 
-      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
+      3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -11054,10 +12005,11 @@ const insn_template i386_optab[] =
   { "cvttss2si", 2, 0xf30f2c, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -11067,10 +12019,11 @@ const insn_template i386_optab[] =
   { "divps", 2, 0x5e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -11080,10 +12033,11 @@ const insn_template i386_optab[] =
   { "divps", 2, 0xf5e, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -11093,10 +12047,11 @@ const insn_template i386_optab[] =
   { "divss", 2, 0xf35e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -11106,10 +12061,11 @@ const insn_template i386_optab[] =
   { "divss", 2, 0xf30f5e, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -11119,30 +12075,33 @@ const insn_template i386_optab[] =
   { "ldmxcsr", 1, 0xae, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "ldmxcsr", 1, 0xfae, 0x2, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "maskmovq", 2, 0xff7, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11152,10 +12111,11 @@ const insn_template i386_optab[] =
   { "maxps", 2, 0x5f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -11165,10 +12125,11 @@ const insn_template i386_optab[] =
   { "maxps", 2, 0xf5f, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -11178,10 +12139,11 @@ const insn_template i386_optab[] =
   { "maxss", 2, 0xf35f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -11191,10 +12153,11 @@ const insn_template i386_optab[] =
   { "maxss", 2, 0xf30f5f, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -11204,10 +12167,11 @@ const insn_template i386_optab[] =
   { "minps", 2, 0x5d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -11217,10 +12181,11 @@ const insn_template i386_optab[] =
   { "minps", 2, 0xf5d, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -11230,10 +12195,11 @@ const insn_template i386_optab[] =
   { "minss", 2, 0xf35d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -11243,10 +12209,11 @@ const insn_template i386_optab[] =
   { "minss", 2, 0xf30f5d, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -11256,10 +12223,11 @@ const insn_template i386_optab[] =
   { "movaps", 2, 0x28, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -11269,10 +12237,11 @@ const insn_template i386_optab[] =
   { "movaps", 2, 0x29, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11282,10 +12251,11 @@ const insn_template i386_optab[] =
   { "movaps", 2, 0xf28, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -11295,10 +12265,11 @@ const insn_template i386_optab[] =
   { "movaps", 2, 0xf29, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11308,10 +12279,11 @@ const insn_template i386_optab[] =
   { "movhlps", 2, 0x12, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11321,10 +12293,11 @@ const insn_template i386_optab[] =
   { "movhlps", 2, 0xf12, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11334,10 +12307,11 @@ const insn_template i386_optab[] =
   { "movhps", 2, 0x16, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -11347,10 +12321,11 @@ const insn_template i386_optab[] =
   { "movhps", 2, 0x17, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11360,10 +12335,11 @@ const insn_template i386_optab[] =
   { "movhps", 2, 0xf16, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -11373,10 +12349,11 @@ const insn_template i386_optab[] =
   { "movhps", 2, 0xf17, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11386,10 +12363,11 @@ const insn_template i386_optab[] =
   { "movlhps", 2, 0x16, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11399,10 +12377,11 @@ const insn_template i386_optab[] =
   { "movlhps", 2, 0xf16, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11412,10 +12391,11 @@ const insn_template i386_optab[] =
   { "movlps", 2, 0x12, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -11425,10 +12405,11 @@ const insn_template i386_optab[] =
   { "movlps", 2, 0x13, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11438,10 +12419,11 @@ const insn_template i386_optab[] =
   { "movlps", 2, 0xf12, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -11451,10 +12433,11 @@ const insn_template i386_optab[] =
   { "movlps", 2, 0xf13, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11464,10 +12447,11 @@ const insn_template i386_optab[] =
   { "movmskps", 2, 0x50, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11477,10 +12461,11 @@ const insn_template i386_optab[] =
   { "movmskps", 2, 0xf50, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11490,10 +12475,11 @@ const insn_template i386_optab[] =
   { "movntps", 2, 0x2b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11503,10 +12489,11 @@ const insn_template i386_optab[] =
   { "movntps", 2, 0xf2b, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11516,10 +12503,11 @@ const insn_template i386_optab[] =
   { "movntq", 2, 0xfe7, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11529,10 +12517,11 @@ const insn_template i386_optab[] =
   { "movntdq", 2, 0x66e7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11542,10 +12531,11 @@ const insn_template i386_optab[] =
   { "movntdq", 2, 0x660fe7, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11555,10 +12545,11 @@ const insn_template i386_optab[] =
   { "movss", 2, 0xf311, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11568,10 +12559,11 @@ const insn_template i386_optab[] =
   { "movss", 2, 0xf310, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -11581,10 +12573,11 @@ const insn_template i386_optab[] =
   { "movss", 2, 0xf310, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11594,10 +12587,11 @@ const insn_template i386_optab[] =
   { "movss", 2, 0xf311, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11607,10 +12601,11 @@ const insn_template i386_optab[] =
   { "movss", 2, 0xf30f10, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -11620,10 +12615,11 @@ const insn_template i386_optab[] =
   { "movss", 2, 0xf30f11, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11633,10 +12629,11 @@ const insn_template i386_optab[] =
   { "movups", 2, 0x10, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -11646,10 +12643,11 @@ const insn_template i386_optab[] =
   { "movups", 2, 0x11, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11659,10 +12657,11 @@ const insn_template i386_optab[] =
   { "movups", 2, 0xf10, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -11672,10 +12671,11 @@ const insn_template i386_optab[] =
   { "movups", 2, 0xf11, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11685,10 +12685,11 @@ const insn_template i386_optab[] =
   { "mulps", 2, 0x59, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -11698,10 +12699,11 @@ const insn_template i386_optab[] =
   { "mulps", 2, 0xf59, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -11711,10 +12713,11 @@ const insn_template i386_optab[] =
   { "mulss", 2, 0xf359, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -11724,10 +12727,11 @@ const insn_template i386_optab[] =
   { "mulss", 2, 0xf30f59, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -11737,10 +12741,11 @@ const insn_template i386_optab[] =
   { "orps", 2, 0x56, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -11750,10 +12755,11 @@ const insn_template i386_optab[] =
   { "orps", 2, 0xf56, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -11763,10 +12769,11 @@ const insn_template i386_optab[] =
   { "pavgb", 2, 0xfe0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -11776,10 +12783,11 @@ const insn_template i386_optab[] =
   { "pavgb", 2, 0x66e0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -11789,10 +12797,11 @@ const insn_template i386_optab[] =
   { "pavgb", 2, 0x660fe0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -11802,10 +12811,11 @@ const insn_template i386_optab[] =
   { "pavgw", 2, 0xfe3, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -11815,10 +12825,11 @@ const insn_template i386_optab[] =
   { "pavgw", 2, 0x66e3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -11828,10 +12839,11 @@ const insn_template i386_optab[] =
   { "pavgw", 2, 0x660fe3, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -11841,10 +12853,11 @@ const insn_template i386_optab[] =
   { "pextrw", 3, 0x66c5, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11857,10 +12870,11 @@ const insn_template i386_optab[] =
   { "pextrw", 3, 0x6615, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11873,10 +12887,11 @@ const insn_template i386_optab[] =
   { "pextrw", 3, 0x660fc5, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11889,10 +12904,11 @@ const insn_template i386_optab[] =
   { "pextrw", 3, 0x660f3a15, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11905,10 +12921,11 @@ const insn_template i386_optab[] =
   { "pextrw", 3, 0xfc5, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11921,10 +12938,11 @@ const insn_template i386_optab[] =
   { "pinsrw", 3, 0x66c4, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11937,10 +12955,11 @@ const insn_template i386_optab[] =
   { "pinsrw", 3, 0x660fc4, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11953,10 +12972,11 @@ const insn_template i386_optab[] =
   { "pinsrw", 3, 0xfc4, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -11969,10 +12989,11 @@ const insn_template i386_optab[] =
   { "pmaxsw", 2, 0x66ee, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -11982,10 +13003,11 @@ const insn_template i386_optab[] =
   { "pmaxsw", 2, 0x660fee, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -11995,10 +13017,11 @@ const insn_template i386_optab[] =
   { "pmaxsw", 2, 0xfee, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12008,10 +13031,11 @@ const insn_template i386_optab[] =
   { "pmaxub", 2, 0x66de, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12021,10 +13045,11 @@ const insn_template i386_optab[] =
   { "pmaxub", 2, 0x660fde, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12034,10 +13059,11 @@ const insn_template i386_optab[] =
   { "pmaxub", 2, 0xfde, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12047,10 +13073,11 @@ const insn_template i386_optab[] =
   { "pminsw", 2, 0x66ea, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12060,10 +13087,11 @@ const insn_template i386_optab[] =
   { "pminsw", 2, 0x660fea, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12073,10 +13101,11 @@ const insn_template i386_optab[] =
   { "pminsw", 2, 0xfea, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12086,10 +13115,11 @@ const insn_template i386_optab[] =
   { "pminub", 2, 0x66da, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12099,10 +13129,11 @@ const insn_template i386_optab[] =
   { "pminub", 2, 0x660fda, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12112,10 +13143,11 @@ const insn_template i386_optab[] =
   { "pminub", 2, 0xfda, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12125,10 +13157,11 @@ const insn_template i386_optab[] =
   { "pmovmskb", 2, 0x66d7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -12138,10 +13171,11 @@ const insn_template i386_optab[] =
   { "pmovmskb", 2, 0x660fd7, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -12151,10 +13185,11 @@ const insn_template i386_optab[] =
   { "pmovmskb", 2, 0xfd7, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -12164,10 +13199,11 @@ const insn_template i386_optab[] =
   { "pmulhuw", 2, 0x66e4, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12177,10 +13213,11 @@ const insn_template i386_optab[] =
   { "pmulhuw", 2, 0x660fe4, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12190,10 +13227,11 @@ const insn_template i386_optab[] =
   { "pmulhuw", 2, 0xfe4, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12203,50 +13241,55 @@ const insn_template i386_optab[] =
   { "prefetchnta", 1, 0xf18, 0x0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "prefetcht0", 1, 0xf18, 0x1, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "prefetcht1", 1, 0xf18, 0x2, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "prefetcht2", 1, 0xf18, 0x3, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "psadbw", 2, 0xff6, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12256,10 +13299,11 @@ const insn_template i386_optab[] =
   { "psadbw", 2, 0x66f6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12269,10 +13313,11 @@ const insn_template i386_optab[] =
   { "psadbw", 2, 0x660ff6, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12282,10 +13327,11 @@ const insn_template i386_optab[] =
   { "pshufw", 3, 0xf70, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -12298,10 +13344,11 @@ const insn_template i386_optab[] =
   { "rcpps", 2, 0x53, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12311,10 +13358,11 @@ const insn_template i386_optab[] =
   { "rcpps", 2, 0xf53, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12324,10 +13372,11 @@ const insn_template i386_optab[] =
   { "rcpss", 2, 0xf353, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12337,10 +13386,11 @@ const insn_template i386_optab[] =
   { "rcpss", 2, 0xf30f53, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12350,10 +13400,11 @@ const insn_template i386_optab[] =
   { "rsqrtps", 2, 0x52, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12363,10 +13414,11 @@ const insn_template i386_optab[] =
   { "rsqrtps", 2, 0xf52, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12376,10 +13428,11 @@ const insn_template i386_optab[] =
   { "rsqrtss", 2, 0xf352, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12389,10 +13442,11 @@ const insn_template i386_optab[] =
   { "rsqrtss", 2, 0xf30f52, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12402,20 +13456,22 @@ const insn_template i386_optab[] =
   { "sfence", 0, 0xfae, 0xf8, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "shufps", 3, 0xc6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -12428,10 +13484,11 @@ const insn_template i386_optab[] =
   { "shufps", 3, 0xfc6, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -12444,10 +13501,11 @@ const insn_template i386_optab[] =
   { "sqrtps", 2, 0x51, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12457,10 +13515,11 @@ const insn_template i386_optab[] =
   { "sqrtps", 2, 0xf51, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12470,10 +13529,11 @@ const insn_template i386_optab[] =
   { "sqrtss", 2, 0xf351, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12483,10 +13543,11 @@ const insn_template i386_optab[] =
   { "sqrtss", 2, 0xf30f51, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12496,30 +13557,33 @@ const insn_template i386_optab[] =
   { "stmxcsr", 1, 0xae, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "stmxcsr", 1, 0xfae, 0x3, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "subps", 2, 0x5c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12529,10 +13593,11 @@ const insn_template i386_optab[] =
   { "subps", 2, 0xf5c, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12542,10 +13607,11 @@ const insn_template i386_optab[] =
   { "subss", 2, 0xf35c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12555,10 +13621,11 @@ const insn_template i386_optab[] =
   { "subss", 2, 0xf30f5c, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12568,10 +13635,11 @@ const insn_template i386_optab[] =
   { "ucomiss", 2, 0x2e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12581,10 +13649,11 @@ const insn_template i386_optab[] =
   { "ucomiss", 2, 0xf2e, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12594,10 +13663,11 @@ const insn_template i386_optab[] =
   { "unpckhps", 2, 0x15, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12607,10 +13677,11 @@ const insn_template i386_optab[] =
   { "unpckhps", 2, 0xf15, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12620,10 +13691,11 @@ const insn_template i386_optab[] =
   { "unpcklps", 2, 0x14, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12633,10 +13705,11 @@ const insn_template i386_optab[] =
   { "unpcklps", 2, 0xf14, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12646,10 +13719,11 @@ const insn_template i386_optab[] =
   { "xorps", 2, 0x57, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12659,10 +13733,11 @@ const insn_template i386_optab[] =
   { "xorps", 2, 0xf57, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12672,10 +13747,11 @@ const insn_template i386_optab[] =
   { "addpd", 2, 0x6658, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12685,10 +13761,11 @@ const insn_template i386_optab[] =
   { "addpd", 2, 0x660f58, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12698,10 +13775,11 @@ const insn_template i386_optab[] =
   { "addsd", 2, 0xf258, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12711,10 +13789,11 @@ const insn_template i386_optab[] =
   { "addsd", 2, 0xf20f58, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12724,10 +13803,11 @@ const insn_template i386_optab[] =
   { "andnpd", 2, 0x6655, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12737,10 +13817,11 @@ const insn_template i386_optab[] =
   { "andnpd", 2, 0x660f55, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12750,10 +13831,11 @@ const insn_template i386_optab[] =
   { "andpd", 2, 0x6654, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12763,10 +13845,11 @@ const insn_template i386_optab[] =
   { "andpd", 2, 0x660f54, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12776,10 +13859,11 @@ const insn_template i386_optab[] =
   { "cmpeqpd", 2, 0x66c2, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12789,10 +13873,11 @@ const insn_template i386_optab[] =
   { "cmpeqpd", 2, 0x660fc2, 0x0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12802,10 +13887,11 @@ const insn_template i386_optab[] =
   { "cmpeqsd", 2, 0xf2c2, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12815,10 +13901,11 @@ const insn_template i386_optab[] =
   { "cmpeqsd", 2, 0xf20fc2, 0x0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12828,10 +13915,11 @@ const insn_template i386_optab[] =
   { "cmplepd", 2, 0x66c2, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12841,10 +13929,11 @@ const insn_template i386_optab[] =
   { "cmplepd", 2, 0x660fc2, 0x2, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12854,10 +13943,11 @@ const insn_template i386_optab[] =
   { "cmplesd", 2, 0xf2c2, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12867,10 +13957,11 @@ const insn_template i386_optab[] =
   { "cmplesd", 2, 0xf20fc2, 0x2, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12880,10 +13971,11 @@ const insn_template i386_optab[] =
   { "cmpltpd", 2, 0x66c2, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12893,10 +13985,11 @@ const insn_template i386_optab[] =
   { "cmpltpd", 2, 0x660fc2, 0x1, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12906,10 +13999,11 @@ const insn_template i386_optab[] =
   { "cmpltsd", 2, 0xf2c2, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12919,10 +14013,11 @@ const insn_template i386_optab[] =
   { "cmpltsd", 2, 0xf20fc2, 0x1, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12932,10 +14027,11 @@ const insn_template i386_optab[] =
   { "cmpneqpd", 2, 0x66c2, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12945,10 +14041,11 @@ const insn_template i386_optab[] =
   { "cmpneqpd", 2, 0x660fc2, 0x4, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12958,10 +14055,11 @@ const insn_template i386_optab[] =
   { "cmpneqsd", 2, 0xf2c2, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12971,10 +14069,11 @@ const insn_template i386_optab[] =
   { "cmpneqsd", 2, 0xf20fc2, 0x4, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -12984,10 +14083,11 @@ const insn_template i386_optab[] =
   { "cmpnlepd", 2, 0x66c2, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -12997,10 +14097,11 @@ const insn_template i386_optab[] =
   { "cmpnlepd", 2, 0x660fc2, 0x6, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -13010,10 +14111,11 @@ const insn_template i386_optab[] =
   { "cmpnlesd", 2, 0xf2c2, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13023,10 +14125,11 @@ const insn_template i386_optab[] =
   { "cmpnlesd", 2, 0xf20fc2, 0x6, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13036,10 +14139,11 @@ const insn_template i386_optab[] =
   { "cmpnltpd", 2, 0x66c2, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -13049,10 +14153,11 @@ const insn_template i386_optab[] =
   { "cmpnltpd", 2, 0x660fc2, 0x5, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -13062,10 +14167,11 @@ const insn_template i386_optab[] =
   { "cmpnltsd", 2, 0xf2c2, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13075,10 +14181,11 @@ const insn_template i386_optab[] =
   { "cmpnltsd", 2, 0xf20fc2, 0x5, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13088,10 +14195,11 @@ const insn_template i386_optab[] =
   { "cmpordpd", 2, 0x66c2, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -13101,10 +14209,11 @@ const insn_template i386_optab[] =
   { "cmpordpd", 2, 0x660fc2, 0x7, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -13114,10 +14223,11 @@ const insn_template i386_optab[] =
   { "cmpordsd", 2, 0xf2c2, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13127,10 +14237,11 @@ const insn_template i386_optab[] =
   { "cmpordsd", 2, 0xf20fc2, 0x7, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13140,10 +14251,11 @@ const insn_template i386_optab[] =
   { "cmpunordpd", 2, 0x66c2, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -13153,10 +14265,11 @@ const insn_template i386_optab[] =
   { "cmpunordpd", 2, 0x660fc2, 0x3, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -13166,10 +14279,11 @@ const insn_template i386_optab[] =
   { "cmpunordsd", 2, 0xf2c2, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13179,10 +14293,11 @@ const insn_template i386_optab[] =
   { "cmpunordsd", 2, 0xf20fc2, 0x3, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13192,10 +14307,11 @@ const insn_template i386_optab[] =
   { "cmppd", 3, 0x66c2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13208,10 +14324,11 @@ const insn_template i386_optab[] =
   { "cmppd", 3, 0x660fc2, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13224,20 +14341,22 @@ const insn_template i386_optab[] =
   { "cmpsd", 0, 0xa7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "cmpsd", 2, 0xa7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13247,10 +14366,11 @@ const insn_template i386_optab[] =
   { "cmpsd", 3, 0xf2c2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13263,10 +14383,11 @@ const insn_template i386_optab[] =
   { "cmpsd", 3, 0xf20fc2, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13279,10 +14400,11 @@ const insn_template i386_optab[] =
   { "comisd", 2, 0x662f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13292,10 +14414,11 @@ const insn_template i386_optab[] =
   { "comisd", 2, 0x660f2f, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13305,10 +14428,11 @@ const insn_template i386_optab[] =
   { "cvtpi2pd", 2, 0x660f2a, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13318,10 +14442,11 @@ const insn_template i386_optab[] =
   { "cvtsi2sd", 2, 0xf22a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13331,10 +14456,11 @@ const insn_template i386_optab[] =
   { "cvtsi2sd", 2, 0xf22a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13344,10 +14470,11 @@ const insn_template i386_optab[] =
   { "cvtsi2sd", 2, 0xf20f2a, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13357,10 +14484,11 @@ const insn_template i386_optab[] =
   { "cvtsi2sd", 2, 0xf20f2a, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13370,10 +14498,11 @@ const insn_template i386_optab[] =
   { "divpd", 2, 0x665e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -13383,10 +14512,11 @@ const insn_template i386_optab[] =
   { "divpd", 2, 0x660f5e, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -13396,10 +14526,11 @@ const insn_template i386_optab[] =
   { "divsd", 2, 0xf25e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13409,10 +14540,11 @@ const insn_template i386_optab[] =
   { "divsd", 2, 0xf20f5e, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13422,10 +14554,11 @@ const insn_template i386_optab[] =
   { "maxpd", 2, 0x665f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -13435,10 +14568,11 @@ const insn_template i386_optab[] =
   { "maxpd", 2, 0x660f5f, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -13448,10 +14582,11 @@ const insn_template i386_optab[] =
   { "maxsd", 2, 0xf25f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13461,10 +14596,11 @@ const insn_template i386_optab[] =
   { "maxsd", 2, 0xf20f5f, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13474,10 +14610,11 @@ const insn_template i386_optab[] =
   { "minpd", 2, 0x665d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -13487,10 +14624,11 @@ const insn_template i386_optab[] =
   { "minpd", 2, 0x660f5d, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -13500,10 +14638,11 @@ const insn_template i386_optab[] =
   { "minsd", 2, 0xf25d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13513,10 +14652,11 @@ const insn_template i386_optab[] =
   { "minsd", 2, 0xf20f5d, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13526,10 +14666,11 @@ const insn_template i386_optab[] =
   { "movapd", 2, 0x6628, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -13539,10 +14680,11 @@ const insn_template i386_optab[] =
   { "movapd", 2, 0x6629, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13552,10 +14694,11 @@ const insn_template i386_optab[] =
   { "movapd", 2, 0x660f28, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -13565,10 +14708,11 @@ const insn_template i386_optab[] =
   { "movapd", 2, 0x660f29, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13578,10 +14722,11 @@ const insn_template i386_optab[] =
   { "movhpd", 2, 0x6616, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13591,10 +14736,11 @@ const insn_template i386_optab[] =
   { "movhpd", 2, 0x6617, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13604,10 +14750,11 @@ const insn_template i386_optab[] =
   { "movhpd", 2, 0x660f16, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13617,10 +14764,11 @@ const insn_template i386_optab[] =
   { "movhpd", 2, 0x660f17, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13630,10 +14778,11 @@ const insn_template i386_optab[] =
   { "movlpd", 2, 0x6612, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13643,10 +14792,11 @@ const insn_template i386_optab[] =
   { "movlpd", 2, 0x6613, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13656,10 +14806,11 @@ const insn_template i386_optab[] =
   { "movlpd", 2, 0x660f12, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13669,10 +14820,11 @@ const insn_template i386_optab[] =
   { "movlpd", 2, 0x660f13, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13682,10 +14834,11 @@ const insn_template i386_optab[] =
   { "movmskpd", 2, 0x6650, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13695,10 +14848,11 @@ const insn_template i386_optab[] =
   { "movmskpd", 2, 0x660f50, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13708,10 +14862,11 @@ const insn_template i386_optab[] =
   { "movntpd", 2, 0x662b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13721,10 +14876,11 @@ const insn_template i386_optab[] =
   { "movntpd", 2, 0x660f2b, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13734,20 +14890,22 @@ const insn_template i386_optab[] =
   { "movsd", 0, 0xa5, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "movsd", 2, 0xa5, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13757,10 +14915,11 @@ const insn_template i386_optab[] =
   { "movsd", 2, 0xf211, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13770,10 +14929,11 @@ const insn_template i386_optab[] =
   { "movsd", 2, 0xf210, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13783,10 +14943,11 @@ const insn_template i386_optab[] =
   { "movsd", 2, 0xf210, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13796,10 +14957,11 @@ const insn_template i386_optab[] =
   { "movsd", 2, 0xf211, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13809,10 +14971,11 @@ const insn_template i386_optab[] =
   { "movsd", 2, 0xf20f10, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13822,10 +14985,11 @@ const insn_template i386_optab[] =
   { "movsd", 2, 0xf20f11, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13835,10 +14999,11 @@ const insn_template i386_optab[] =
   { "movupd", 2, 0x6610, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -13848,10 +15013,11 @@ const insn_template i386_optab[] =
   { "movupd", 2, 0x6611, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13861,10 +15027,11 @@ const insn_template i386_optab[] =
   { "movupd", 2, 0x660f10, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -13874,10 +15041,11 @@ const insn_template i386_optab[] =
   { "movupd", 2, 0x660f11, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13887,10 +15055,11 @@ const insn_template i386_optab[] =
   { "mulpd", 2, 0x6659, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -13900,10 +15069,11 @@ const insn_template i386_optab[] =
   { "mulpd", 2, 0x660f59, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -13913,10 +15083,11 @@ const insn_template i386_optab[] =
   { "mulsd", 2, 0xf259, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13926,10 +15097,11 @@ const insn_template i386_optab[] =
   { "mulsd", 2, 0xf20f59, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -13939,10 +15111,11 @@ const insn_template i386_optab[] =
   { "orpd", 2, 0x6656, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -13952,10 +15125,11 @@ const insn_template i386_optab[] =
   { "orpd", 2, 0x660f56, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -13965,10 +15139,11 @@ const insn_template i386_optab[] =
   { "shufpd", 3, 0x66c6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13981,10 +15156,11 @@ const insn_template i386_optab[] =
   { "shufpd", 3, 0x660fc6, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -13997,10 +15173,11 @@ const insn_template i386_optab[] =
   { "sqrtpd", 2, 0x6651, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14010,10 +15187,11 @@ const insn_template i386_optab[] =
   { "sqrtpd", 2, 0x660f51, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14023,10 +15201,11 @@ const insn_template i386_optab[] =
   { "sqrtsd", 2, 0xf251, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -14036,10 +15215,11 @@ const insn_template i386_optab[] =
   { "sqrtsd", 2, 0xf20f51, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -14049,10 +15229,11 @@ const insn_template i386_optab[] =
   { "subpd", 2, 0x665c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14062,10 +15243,11 @@ const insn_template i386_optab[] =
   { "subpd", 2, 0x660f5c, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14075,10 +15257,11 @@ const insn_template i386_optab[] =
   { "subsd", 2, 0xf25c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -14088,10 +15271,11 @@ const insn_template i386_optab[] =
   { "subsd", 2, 0xf20f5c, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -14101,10 +15285,11 @@ const insn_template i386_optab[] =
   { "ucomisd", 2, 0x662e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -14114,10 +15299,11 @@ const insn_template i386_optab[] =
   { "ucomisd", 2, 0x660f2e, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -14127,10 +15313,11 @@ const insn_template i386_optab[] =
   { "unpckhpd", 2, 0x6615, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14140,10 +15327,11 @@ const insn_template i386_optab[] =
   { "unpckhpd", 2, 0x660f15, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14153,10 +15341,11 @@ const insn_template i386_optab[] =
   { "unpcklpd", 2, 0x6614, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14166,10 +15355,11 @@ const insn_template i386_optab[] =
   { "unpcklpd", 2, 0x660f14, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14179,10 +15369,11 @@ const insn_template i386_optab[] =
   { "xorpd", 2, 0x6657, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14192,10 +15383,11 @@ const insn_template i386_optab[] =
   { "xorpd", 2, 0x660f57, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14205,10 +15397,11 @@ const insn_template i386_optab[] =
   { "cvtdq2pd", 2, 0xf3e6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -14218,10 +15411,11 @@ const insn_template i386_optab[] =
   { "cvtdq2pd", 2, 0xf30fe6, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -14231,10 +15425,11 @@ const insn_template i386_optab[] =
   { "cvtpd2dq", 2, 0xf2e6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14244,10 +15439,11 @@ const insn_template i386_optab[] =
   { "cvtpd2dq", 2, 0xf20fe6, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14257,10 +15453,11 @@ const insn_template i386_optab[] =
   { "cvtdq2ps", 2, 0x5b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14270,10 +15467,11 @@ const insn_template i386_optab[] =
   { "cvtdq2ps", 2, 0xf5b, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14283,10 +15481,11 @@ const insn_template i386_optab[] =
   { "cvtpd2pi", 2, 0x660f2d, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14296,10 +15495,11 @@ const insn_template i386_optab[] =
   { "cvtpd2ps", 2, 0x665a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14309,10 +15509,11 @@ const insn_template i386_optab[] =
   { "cvtpd2ps", 2, 0x660f5a, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14322,10 +15523,11 @@ const insn_template i386_optab[] =
   { "cvtps2pd", 2, 0x5a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -14335,10 +15537,11 @@ const insn_template i386_optab[] =
   { "cvtps2pd", 2, 0xf5a, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -14348,10 +15551,11 @@ const insn_template i386_optab[] =
   { "cvtps2dq", 2, 0x665b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14361,10 +15565,11 @@ const insn_template i386_optab[] =
   { "cvtps2dq", 2, 0x660f5b, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14374,10 +15579,11 @@ const insn_template i386_optab[] =
   { "cvtsd2si", 2, 0xf22d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -14387,10 +15593,11 @@ const insn_template i386_optab[] =
   { "cvtsd2si", 2, 0xf20f2d, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -14400,10 +15607,11 @@ const insn_template i386_optab[] =
   { "cvtsd2ss", 2, 0xf25a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -14413,10 +15621,11 @@ const insn_template i386_optab[] =
   { "cvtsd2ss", 2, 0xf20f5a, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -14426,10 +15635,11 @@ const insn_template i386_optab[] =
   { "cvtss2sd", 2, 0xf35a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -14439,10 +15649,11 @@ const insn_template i386_optab[] =
   { "cvtss2sd", 2, 0xf30f5a, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -14452,10 +15663,11 @@ const insn_template i386_optab[] =
   { "cvttpd2pi", 2, 0x660f2c, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14465,10 +15677,11 @@ const insn_template i386_optab[] =
   { "cvttsd2si", 2, 0xf22c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -14478,10 +15691,11 @@ const insn_template i386_optab[] =
   { "cvttsd2si", 2, 0xf20f2c, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -14491,10 +15705,11 @@ const insn_template i386_optab[] =
   { "cvttpd2dq", 2, 0x66e6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14504,10 +15719,11 @@ const insn_template i386_optab[] =
   { "cvttpd2dq", 2, 0x660fe6, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14517,10 +15733,11 @@ const insn_template i386_optab[] =
   { "cvttps2dq", 2, 0xf35b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14530,10 +15747,11 @@ const insn_template i386_optab[] =
   { "cvttps2dq", 2, 0xf30f5b, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14543,10 +15761,11 @@ const insn_template i386_optab[] =
   { "maskmovdqu", 2, 0x66f7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -14556,10 +15775,11 @@ const insn_template i386_optab[] =
   { "maskmovdqu", 2, 0x660ff7, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -14569,10 +15789,11 @@ const insn_template i386_optab[] =
   { "movdqa", 2, 0x666f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14582,10 +15803,11 @@ const insn_template i386_optab[] =
   { "movdqa", 2, 0x667f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -14595,10 +15817,11 @@ const insn_template i386_optab[] =
   { "movdqa", 2, 0x660f6f, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14608,10 +15831,11 @@ const insn_template i386_optab[] =
   { "movdqa", 2, 0x660f7f, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -14621,10 +15845,11 @@ const insn_template i386_optab[] =
   { "movdqu", 2, 0xf36f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14634,10 +15859,11 @@ const insn_template i386_optab[] =
   { "movdqu", 2, 0xf37f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -14647,10 +15873,11 @@ const insn_template i386_optab[] =
   { "movdqu", 2, 0xf30f6f, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14660,10 +15887,11 @@ const insn_template i386_optab[] =
   { "movdqu", 2, 0xf30f7f, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -14673,10 +15901,11 @@ const insn_template i386_optab[] =
   { "movdq2q", 2, 0xf20fd6, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -14686,10 +15915,11 @@ const insn_template i386_optab[] =
   { "movq2dq", 2, 0xf30fd6, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -14699,10 +15929,11 @@ const insn_template i386_optab[] =
   { "pmuludq", 2, 0x66f4, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14712,10 +15943,11 @@ const insn_template i386_optab[] =
   { "pmuludq", 2, 0x660ff4, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14725,10 +15957,11 @@ const insn_template i386_optab[] =
   { "pmuludq", 2, 0xff4, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -14738,10 +15971,11 @@ const insn_template i386_optab[] =
   { "pshufd", 3, 0x6670, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -14754,10 +15988,11 @@ const insn_template i386_optab[] =
   { "pshufd", 3, 0x660f70, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -14770,10 +16005,11 @@ const insn_template i386_optab[] =
   { "pshufhw", 3, 0xf370, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -14786,10 +16022,11 @@ const insn_template i386_optab[] =
   { "pshufhw", 3, 0xf30f70, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -14802,10 +16039,11 @@ const insn_template i386_optab[] =
   { "pshuflw", 3, 0xf270, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -14818,10 +16056,11 @@ const insn_template i386_optab[] =
   { "pshuflw", 3, 0xf20f70, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -14834,10 +16073,11 @@ const insn_template i386_optab[] =
   { "pslldq", 2, 0x6673, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 2, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -14847,10 +16087,11 @@ const insn_template i386_optab[] =
   { "pslldq", 2, 0x660f73, 0x7, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -14860,10 +16101,11 @@ const insn_template i386_optab[] =
   { "psrldq", 2, 0x6673, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 2, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -14873,10 +16115,11 @@ const insn_template i386_optab[] =
   { "psrldq", 2, 0x660f73, 0x3, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -14886,10 +16129,11 @@ const insn_template i386_optab[] =
   { "punpckhqdq", 2, 0x666d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14899,10 +16143,11 @@ const insn_template i386_optab[] =
   { "punpckhqdq", 2, 0x660f6d, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14912,10 +16157,11 @@ const insn_template i386_optab[] =
   { "punpcklqdq", 2, 0x666c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14925,10 +16171,11 @@ const insn_template i386_optab[] =
   { "punpcklqdq", 2, 0x660f6c, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14938,10 +16185,11 @@ const insn_template i386_optab[] =
   { "addsubpd", 2, 0x66d0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14951,10 +16199,11 @@ const insn_template i386_optab[] =
   { "addsubpd", 2, 0x660fd0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14964,10 +16213,11 @@ const insn_template i386_optab[] =
   { "addsubps", 2, 0xf2d0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14977,10 +16227,11 @@ const insn_template i386_optab[] =
   { "addsubps", 2, 0xf20fd0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -14990,50 +16241,55 @@ const insn_template i386_optab[] =
   { "cmpxchg16b", 1, 0xfc7, 0x1, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } } } },
   { "fisttp", 1, 0xdf, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fisttp", 1, 0xdd, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "fisttpll", 1, 0xdd, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "haddpd", 2, 0x667c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15043,10 +16299,11 @@ const insn_template i386_optab[] =
   { "haddpd", 2, 0x660f7c, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15056,10 +16313,11 @@ const insn_template i386_optab[] =
   { "haddps", 2, 0xf27c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15069,10 +16327,11 @@ const insn_template i386_optab[] =
   { "haddps", 2, 0xf20f7c, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15082,10 +16341,11 @@ const insn_template i386_optab[] =
   { "hsubpd", 2, 0x667d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15095,10 +16355,11 @@ const insn_template i386_optab[] =
   { "hsubpd", 2, 0x660f7d, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15108,10 +16369,11 @@ const insn_template i386_optab[] =
   { "hsubps", 2, 0xf27d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15121,10 +16383,11 @@ const insn_template i386_optab[] =
   { "hsubps", 2, 0xf20f7d, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15134,10 +16397,11 @@ const insn_template i386_optab[] =
   { "lddqu", 2, 0xf2f0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15147,10 +16411,11 @@ const insn_template i386_optab[] =
   { "lddqu", 2, 0xf20ff0, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15160,20 +16425,22 @@ const insn_template i386_optab[] =
   { "monitor", 0, 0xf01, 0xc8, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "monitor", 3, 0xf01, 0xc8, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -15186,10 +16453,11 @@ const insn_template i386_optab[] =
   { "monitor", 3, 0xf01, 0xc8, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -15202,10 +16470,11 @@ const insn_template i386_optab[] =
   { "movddup", 2, 0xf212, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -15215,10 +16484,11 @@ const insn_template i386_optab[] =
   { "movddup", 2, 0xf20f12, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -15228,10 +16498,11 @@ const insn_template i386_optab[] =
   { "movshdup", 2, 0xf316, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15241,10 +16512,11 @@ const insn_template i386_optab[] =
   { "movshdup", 2, 0xf30f16, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15254,10 +16526,11 @@ const insn_template i386_optab[] =
   { "movsldup", 2, 0xf312, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15267,10 +16540,11 @@ const insn_template i386_optab[] =
   { "movsldup", 2, 0xf30f12, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15280,20 +16554,22 @@ const insn_template i386_optab[] =
   { "mwait", 0, 0xf01, 0xc9, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "mwait", 2, 0xf01, 0xc9, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -15303,10 +16579,11 @@ const insn_template i386_optab[] =
   { "mwait", 2, 0xf01, 0xc9, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -15316,70 +16593,77 @@ const insn_template i386_optab[] =
   { "vmcall", 0, 0xf01, 0xc1, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "vmclear", 1, 0x660fc7, 0x6, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "vmlaunch", 0, 0xf01, 0xc2, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "vmresume", 0, 0xf01, 0xc3, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "vmptrld", 1, 0xfc7, 0x6, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "vmptrst", 1, 0xfc7, 0x7, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "vmread", 2, 0xf78, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -15389,10 +16673,11 @@ const insn_template i386_optab[] =
   { "vmread", 2, 0xf78, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -15402,10 +16687,11 @@ const insn_template i386_optab[] =
   { "vmwrite", 2, 0xf79, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -15415,10 +16701,11 @@ const insn_template i386_optab[] =
   { "vmwrite", 2, 0xf79, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -15428,40 +16715,55 @@ const insn_template i386_optab[] =
   { "vmxoff", 0, 0xf01, 0xc4, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "vmxon", 1, 0xf30fc7, 0x6, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
+  { "vmfunc", 0, 0xf01, 0xd4, 2,
+    { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
+        0, 0 } },
+    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  0, 0, 0, 0, 0, 0 } } } },
   { "getsec", 0, 0xf37, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "invept", 2, 0x660f3880, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15471,10 +16773,11 @@ const insn_template i386_optab[] =
   { "invept", 2, 0x660f3880, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15484,10 +16787,11 @@ const insn_template i386_optab[] =
   { "invvpid", 2, 0x660f3881, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15497,10 +16801,11 @@ const insn_template i386_optab[] =
   { "invvpid", 2, 0x660f3881, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15510,10 +16815,11 @@ const insn_template i386_optab[] =
   { "invpcid", 2, 0x660f3882, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -15523,10 +16829,11 @@ const insn_template i386_optab[] =
   { "invpcid", 2, 0x660f3882, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -15536,10 +16843,11 @@ const insn_template i386_optab[] =
   { "phaddw", 2, 0x6601, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15549,10 +16857,11 @@ const insn_template i386_optab[] =
   { "phaddw", 2, 0x660f3801, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15562,10 +16871,11 @@ const insn_template i386_optab[] =
   { "phaddw", 2, 0xf3801, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -15575,10 +16885,11 @@ const insn_template i386_optab[] =
   { "phaddd", 2, 0x6602, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15588,10 +16899,11 @@ const insn_template i386_optab[] =
   { "phaddd", 2, 0x660f3802, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15601,10 +16913,11 @@ const insn_template i386_optab[] =
   { "phaddd", 2, 0xf3802, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -15614,10 +16927,11 @@ const insn_template i386_optab[] =
   { "phaddsw", 2, 0x6603, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15627,10 +16941,11 @@ const insn_template i386_optab[] =
   { "phaddsw", 2, 0x660f3803, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15640,10 +16955,11 @@ const insn_template i386_optab[] =
   { "phaddsw", 2, 0xf3803, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -15653,10 +16969,11 @@ const insn_template i386_optab[] =
   { "phsubw", 2, 0x6605, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15666,10 +16983,11 @@ const insn_template i386_optab[] =
   { "phsubw", 2, 0x660f3805, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15679,10 +16997,11 @@ const insn_template i386_optab[] =
   { "phsubw", 2, 0xf3805, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -15692,10 +17011,11 @@ const insn_template i386_optab[] =
   { "phsubd", 2, 0x6606, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15705,10 +17025,11 @@ const insn_template i386_optab[] =
   { "phsubd", 2, 0x660f3806, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15718,10 +17039,11 @@ const insn_template i386_optab[] =
   { "phsubd", 2, 0xf3806, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -15731,10 +17053,11 @@ const insn_template i386_optab[] =
   { "phsubsw", 2, 0x6607, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15744,10 +17067,11 @@ const insn_template i386_optab[] =
   { "phsubsw", 2, 0x660f3807, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15757,10 +17081,11 @@ const insn_template i386_optab[] =
   { "phsubsw", 2, 0xf3807, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -15770,10 +17095,11 @@ const insn_template i386_optab[] =
   { "pmaddubsw", 2, 0x6604, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15783,10 +17109,11 @@ const insn_template i386_optab[] =
   { "pmaddubsw", 2, 0x660f3804, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15796,10 +17123,11 @@ const insn_template i386_optab[] =
   { "pmaddubsw", 2, 0xf3804, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -15809,10 +17137,11 @@ const insn_template i386_optab[] =
   { "pmulhrsw", 2, 0x660b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15822,10 +17151,11 @@ const insn_template i386_optab[] =
   { "pmulhrsw", 2, 0x660f380b, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15835,10 +17165,11 @@ const insn_template i386_optab[] =
   { "pmulhrsw", 2, 0xf380b, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -15848,10 +17179,11 @@ const insn_template i386_optab[] =
   { "pshufb", 2, 0x6600, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15861,10 +17193,11 @@ const insn_template i386_optab[] =
   { "pshufb", 2, 0x660f3800, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15874,10 +17207,11 @@ const insn_template i386_optab[] =
   { "pshufb", 2, 0xf3800, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -15887,10 +17221,11 @@ const insn_template i386_optab[] =
   { "psignb", 2, 0x6608, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15900,10 +17235,11 @@ const insn_template i386_optab[] =
   { "psignb", 2, 0x660f3808, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15913,10 +17249,11 @@ const insn_template i386_optab[] =
   { "psignb", 2, 0xf3808, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -15926,10 +17263,11 @@ const insn_template i386_optab[] =
   { "psignw", 2, 0x6609, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15939,10 +17277,11 @@ const insn_template i386_optab[] =
   { "psignw", 2, 0x660f3809, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15952,10 +17291,11 @@ const insn_template i386_optab[] =
   { "psignw", 2, 0xf3809, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -15965,10 +17305,11 @@ const insn_template i386_optab[] =
   { "psignd", 2, 0x660a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15978,10 +17319,11 @@ const insn_template i386_optab[] =
   { "psignd", 2, 0x660f380a, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -15991,10 +17333,11 @@ const insn_template i386_optab[] =
   { "psignd", 2, 0xf380a, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -16004,10 +17347,11 @@ const insn_template i386_optab[] =
   { "palignr", 3, 0x660f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16020,10 +17364,11 @@ const insn_template i386_optab[] =
   { "palignr", 3, 0x660f3a0f, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16036,10 +17381,11 @@ const insn_template i386_optab[] =
   { "palignr", 3, 0xf3a0f, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16052,10 +17398,11 @@ const insn_template i386_optab[] =
   { "pabsb", 2, 0x661c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16065,10 +17412,11 @@ const insn_template i386_optab[] =
   { "pabsb", 2, 0x660f381c, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16078,10 +17426,11 @@ const insn_template i386_optab[] =
   { "pabsb", 2, 0xf381c, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -16091,10 +17440,11 @@ const insn_template i386_optab[] =
   { "pabsw", 2, 0x661d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16104,10 +17454,11 @@ const insn_template i386_optab[] =
   { "pabsw", 2, 0x660f381d, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16117,10 +17468,11 @@ const insn_template i386_optab[] =
   { "pabsw", 2, 0xf381d, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -16130,10 +17482,11 @@ const insn_template i386_optab[] =
   { "pabsd", 2, 0x661e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16143,10 +17496,11 @@ const insn_template i386_optab[] =
   { "pabsd", 2, 0x660f381e, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16156,10 +17510,11 @@ const insn_template i386_optab[] =
   { "pabsd", 2, 0xf381e, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -16169,10 +17524,11 @@ const insn_template i386_optab[] =
   { "blendpd", 3, 0x660d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16185,10 +17541,11 @@ const insn_template i386_optab[] =
   { "blendpd", 3, 0x660f3a0d, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16201,10 +17558,11 @@ const insn_template i386_optab[] =
   { "blendps", 3, 0x660c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16217,10 +17575,11 @@ const insn_template i386_optab[] =
   { "blendps", 3, 0x660f3a0c, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16233,10 +17592,11 @@ const insn_template i386_optab[] =
   { "blendvpd", 3, 0x664b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16249,10 +17609,11 @@ const insn_template i386_optab[] =
   { "blendvpd", 2, 0x664b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16262,10 +17623,11 @@ const insn_template i386_optab[] =
   { "blendvpd", 3, 0x660f3815, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16278,10 +17640,11 @@ const insn_template i386_optab[] =
   { "blendvpd", 2, 0x660f3815, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16291,10 +17654,11 @@ const insn_template i386_optab[] =
   { "blendvps", 3, 0x664a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16307,10 +17671,11 @@ const insn_template i386_optab[] =
   { "blendvps", 2, 0x664a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16320,10 +17685,11 @@ const insn_template i386_optab[] =
   { "blendvps", 3, 0x660f3814, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16336,10 +17702,11 @@ const insn_template i386_optab[] =
   { "blendvps", 2, 0x660f3814, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16349,10 +17716,11 @@ const insn_template i386_optab[] =
   { "dppd", 3, 0x6641, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16365,10 +17733,11 @@ const insn_template i386_optab[] =
   { "dppd", 3, 0x660f3a41, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16381,10 +17750,11 @@ const insn_template i386_optab[] =
   { "dpps", 3, 0x6640, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16397,10 +17767,11 @@ const insn_template i386_optab[] =
   { "dpps", 3, 0x660f3a40, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16413,10 +17784,11 @@ const insn_template i386_optab[] =
   { "extractps", 3, 0x6617, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16429,10 +17801,11 @@ const insn_template i386_optab[] =
   { "extractps", 3, 0x660f3a17, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16445,10 +17818,11 @@ const insn_template i386_optab[] =
   { "insertps", 3, 0x6621, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16461,10 +17835,11 @@ const insn_template i386_optab[] =
   { "insertps", 3, 0x660f3a21, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16477,10 +17852,11 @@ const insn_template i386_optab[] =
   { "movntdqa", 2, 0x662a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16490,10 +17866,11 @@ const insn_template i386_optab[] =
   { "movntdqa", 2, 0x660f382a, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16503,10 +17880,11 @@ const insn_template i386_optab[] =
   { "mpsadbw", 3, 0x6642, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16519,10 +17897,11 @@ const insn_template i386_optab[] =
   { "mpsadbw", 3, 0x660f3a42, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16535,10 +17914,11 @@ const insn_template i386_optab[] =
   { "packusdw", 2, 0x662b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16548,10 +17928,11 @@ const insn_template i386_optab[] =
   { "packusdw", 2, 0x660f382b, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16561,10 +17942,11 @@ const insn_template i386_optab[] =
   { "pblendvb", 3, 0x664c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16577,10 +17959,11 @@ const insn_template i386_optab[] =
   { "pblendvb", 2, 0x664c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16590,10 +17973,11 @@ const insn_template i386_optab[] =
   { "pblendvb", 3, 0x660f3810, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16606,10 +17990,11 @@ const insn_template i386_optab[] =
   { "pblendvb", 2, 0x660f3810, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16619,10 +18004,11 @@ const insn_template i386_optab[] =
   { "pblendw", 3, 0x660e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16635,10 +18021,11 @@ const insn_template i386_optab[] =
   { "pblendw", 3, 0x660f3a0e, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16651,10 +18038,11 @@ const insn_template i386_optab[] =
   { "pcmpeqq", 2, 0x6629, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16664,10 +18052,11 @@ const insn_template i386_optab[] =
   { "pcmpeqq", 2, 0x660f3829, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16677,10 +18066,11 @@ const insn_template i386_optab[] =
   { "pextrb", 3, 0x6614, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16693,10 +18083,11 @@ const insn_template i386_optab[] =
   { "pextrb", 3, 0x660f3a14, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16709,10 +18100,11 @@ const insn_template i386_optab[] =
   { "pextrd", 3, 0x6616, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16725,10 +18117,11 @@ const insn_template i386_optab[] =
   { "pextrd", 3, 0x660f3a16, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16741,10 +18134,11 @@ const insn_template i386_optab[] =
   { "pextrq", 3, 0x6616, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16757,10 +18151,11 @@ const insn_template i386_optab[] =
   { "pextrq", 3, 0x660f3a16, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16773,10 +18168,11 @@ const insn_template i386_optab[] =
   { "phminposuw", 2, 0x6641, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16786,10 +18182,11 @@ const insn_template i386_optab[] =
   { "phminposuw", 2, 0x660f3841, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16799,10 +18196,11 @@ const insn_template i386_optab[] =
   { "pinsrb", 3, 0x6620, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16815,10 +18213,11 @@ const insn_template i386_optab[] =
   { "pinsrb", 3, 0x660f3a20, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16831,10 +18230,11 @@ const insn_template i386_optab[] =
   { "pinsrd", 3, 0x6622, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16847,10 +18247,11 @@ const insn_template i386_optab[] =
   { "pinsrd", 3, 0x660f3a22, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16863,10 +18264,11 @@ const insn_template i386_optab[] =
   { "pinsrq", 3, 0x6622, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16879,10 +18281,11 @@ const insn_template i386_optab[] =
   { "pinsrq", 3, 0x660f3a22, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -16895,10 +18298,11 @@ const insn_template i386_optab[] =
   { "pmaxsb", 2, 0x663c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16908,10 +18312,11 @@ const insn_template i386_optab[] =
   { "pmaxsb", 2, 0x660f383c, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16921,10 +18326,11 @@ const insn_template i386_optab[] =
   { "pmaxsd", 2, 0x663d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16934,10 +18340,11 @@ const insn_template i386_optab[] =
   { "pmaxsd", 2, 0x660f383d, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16947,10 +18354,11 @@ const insn_template i386_optab[] =
   { "pmaxud", 2, 0x663f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16960,10 +18368,11 @@ const insn_template i386_optab[] =
   { "pmaxud", 2, 0x660f383f, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16973,10 +18382,11 @@ const insn_template i386_optab[] =
   { "pmaxuw", 2, 0x663e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16986,10 +18396,11 @@ const insn_template i386_optab[] =
   { "pmaxuw", 2, 0x660f383e, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -16999,10 +18410,11 @@ const insn_template i386_optab[] =
   { "pminsb", 2, 0x6638, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17012,10 +18424,11 @@ const insn_template i386_optab[] =
   { "pminsb", 2, 0x660f3838, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17025,10 +18438,11 @@ const insn_template i386_optab[] =
   { "pminsd", 2, 0x6639, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17038,10 +18452,11 @@ const insn_template i386_optab[] =
   { "pminsd", 2, 0x660f3839, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17051,10 +18466,11 @@ const insn_template i386_optab[] =
   { "pminud", 2, 0x663b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17064,10 +18480,11 @@ const insn_template i386_optab[] =
   { "pminud", 2, 0x660f383b, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17077,10 +18494,11 @@ const insn_template i386_optab[] =
   { "pminuw", 2, 0x663a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17090,10 +18508,11 @@ const insn_template i386_optab[] =
   { "pminuw", 2, 0x660f383a, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17103,10 +18522,11 @@ const insn_template i386_optab[] =
   { "pmovsxbw", 2, 0x6620, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17116,10 +18536,11 @@ const insn_template i386_optab[] =
   { "pmovsxbw", 2, 0x660f3820, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17129,10 +18550,11 @@ const insn_template i386_optab[] =
   { "pmovsxbd", 2, 0x6621, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17142,10 +18564,11 @@ const insn_template i386_optab[] =
   { "pmovsxbd", 2, 0x660f3821, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17155,10 +18578,11 @@ const insn_template i386_optab[] =
   { "pmovsxbq", 2, 0x6622, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17168,10 +18592,11 @@ const insn_template i386_optab[] =
   { "pmovsxbq", 2, 0x660f3822, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17181,10 +18606,11 @@ const insn_template i386_optab[] =
   { "pmovsxwd", 2, 0x6623, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17194,10 +18620,11 @@ const insn_template i386_optab[] =
   { "pmovsxwd", 2, 0x660f3823, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17207,10 +18634,11 @@ const insn_template i386_optab[] =
   { "pmovsxwq", 2, 0x6624, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17220,10 +18648,11 @@ const insn_template i386_optab[] =
   { "pmovsxwq", 2, 0x660f3824, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17233,10 +18662,11 @@ const insn_template i386_optab[] =
   { "pmovsxdq", 2, 0x6625, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17246,10 +18676,11 @@ const insn_template i386_optab[] =
   { "pmovsxdq", 2, 0x660f3825, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17259,10 +18690,11 @@ const insn_template i386_optab[] =
   { "pmovzxbw", 2, 0x6630, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17272,10 +18704,11 @@ const insn_template i386_optab[] =
   { "pmovzxbw", 2, 0x660f3830, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17285,10 +18718,11 @@ const insn_template i386_optab[] =
   { "pmovzxbd", 2, 0x6631, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17298,10 +18732,11 @@ const insn_template i386_optab[] =
   { "pmovzxbd", 2, 0x660f3831, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17311,10 +18746,11 @@ const insn_template i386_optab[] =
   { "pmovzxbq", 2, 0x6632, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17324,10 +18760,11 @@ const insn_template i386_optab[] =
   { "pmovzxbq", 2, 0x660f3832, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17337,10 +18774,11 @@ const insn_template i386_optab[] =
   { "pmovzxwd", 2, 0x6633, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17350,10 +18788,11 @@ const insn_template i386_optab[] =
   { "pmovzxwd", 2, 0x660f3833, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17363,10 +18802,11 @@ const insn_template i386_optab[] =
   { "pmovzxwq", 2, 0x6634, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17376,10 +18816,11 @@ const insn_template i386_optab[] =
   { "pmovzxwq", 2, 0x660f3834, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17389,10 +18830,11 @@ const insn_template i386_optab[] =
   { "pmovzxdq", 2, 0x6635, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17402,10 +18844,11 @@ const insn_template i386_optab[] =
   { "pmovzxdq", 2, 0x660f3835, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17415,10 +18858,11 @@ const insn_template i386_optab[] =
   { "pmuldq", 2, 0x6628, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17428,10 +18872,11 @@ const insn_template i386_optab[] =
   { "pmuldq", 2, 0x660f3828, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17441,10 +18886,11 @@ const insn_template i386_optab[] =
   { "pmulld", 2, 0x6640, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17454,10 +18900,11 @@ const insn_template i386_optab[] =
   { "pmulld", 2, 0x660f3840, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17467,10 +18914,11 @@ const insn_template i386_optab[] =
   { "ptest", 2, 0x6617, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17480,10 +18928,11 @@ const insn_template i386_optab[] =
   { "ptest", 2, 0x660f3817, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17493,10 +18942,11 @@ const insn_template i386_optab[] =
   { "roundpd", 3, 0x6609, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -17509,10 +18959,11 @@ const insn_template i386_optab[] =
   { "roundpd", 3, 0x660f3a09, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -17525,10 +18976,11 @@ const insn_template i386_optab[] =
   { "roundps", 3, 0x6608, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -17541,10 +18993,11 @@ const insn_template i386_optab[] =
   { "roundps", 3, 0x660f3a08, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -17557,10 +19010,11 @@ const insn_template i386_optab[] =
   { "roundsd", 3, 0x660b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      3, 1, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -17573,10 +19027,11 @@ const insn_template i386_optab[] =
   { "roundsd", 3, 0x660f3a0b, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -17589,10 +19044,11 @@ const insn_template i386_optab[] =
   { "roundss", 3, 0x660a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -17605,10 +19061,11 @@ const insn_template i386_optab[] =
   { "roundss", 3, 0x660f3a0a, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -17621,10 +19078,11 @@ const insn_template i386_optab[] =
   { "pcmpgtq", 2, 0x6637, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17634,10 +19092,11 @@ const insn_template i386_optab[] =
   { "pcmpgtq", 2, 0x660f3837, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17647,10 +19106,11 @@ const insn_template i386_optab[] =
   { "pcmpestri", 3, 0x6661, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -17663,10 +19123,11 @@ const insn_template i386_optab[] =
   { "pcmpestri", 3, 0x660f3a61, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -17679,10 +19140,11 @@ const insn_template i386_optab[] =
   { "pcmpestrm", 3, 0x6660, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -17695,10 +19157,11 @@ const insn_template i386_optab[] =
   { "pcmpestrm", 3, 0x660f3a60, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -17711,10 +19174,11 @@ const insn_template i386_optab[] =
   { "pcmpistri", 3, 0x6663, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -17727,10 +19191,11 @@ const insn_template i386_optab[] =
   { "pcmpistri", 3, 0x660f3a63, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -17743,10 +19208,11 @@ const insn_template i386_optab[] =
   { "pcmpistrm", 3, 0x6662, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -17759,10 +19225,11 @@ const insn_template i386_optab[] =
   { "pcmpistrm", 3, 0x660f3a62, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -17775,10 +19242,11 @@ const insn_template i386_optab[] =
   { "crc32", 2, 0xf20f38f1, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
       0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17788,10 +19256,11 @@ const insn_template i386_optab[] =
   { "crc32", 2, 0xf20f38f1, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17801,10 +19270,11 @@ const insn_template i386_optab[] =
   { "crc32", 2, 0xf20f38f0, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17814,10 +19284,11 @@ const insn_template i386_optab[] =
   { "crc32", 2, 0xf20f38f0, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -17827,90 +19298,99 @@ const insn_template i386_optab[] =
   { "xsave", 1, 0xfae, 0x4, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "xsave64", 1, 0xfae, 0x4, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "xrstor", 1, 0xfae, 0x5, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "xrstor64", 1, 0xfae, 0x5, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "xgetbv", 0, 0xf01, 0xd0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "xsetbv", 0, 0xf01, 0xd1, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "xsaveopt", 1, 0xfae, 0x6, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "xsaveopt64", 1, 0xfae, 0x6, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "aesdec", 2, 0x66de, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17920,10 +19400,11 @@ const insn_template i386_optab[] =
   { "aesdec", 2, 0x660f38de, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17933,10 +19414,11 @@ const insn_template i386_optab[] =
   { "aesdeclast", 2, 0x66df, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17946,10 +19428,11 @@ const insn_template i386_optab[] =
   { "aesdeclast", 2, 0x660f38df, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17959,10 +19442,11 @@ const insn_template i386_optab[] =
   { "aesenc", 2, 0x66dc, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17972,10 +19456,11 @@ const insn_template i386_optab[] =
   { "aesenc", 2, 0x660f38dc, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17985,10 +19470,11 @@ const insn_template i386_optab[] =
   { "aesenclast", 2, 0x66dd, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -17998,10 +19484,11 @@ const insn_template i386_optab[] =
   { "aesenclast", 2, 0x660f38dd, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18011,10 +19498,11 @@ const insn_template i386_optab[] =
   { "aesimc", 2, 0x66db, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18024,10 +19512,11 @@ const insn_template i386_optab[] =
   { "aesimc", 2, 0x660f38db, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18037,10 +19526,11 @@ const insn_template i386_optab[] =
   { "aeskeygenassist", 3, 0x66df, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -18053,10 +19543,11 @@ const insn_template i386_optab[] =
   { "aeskeygenassist", 3, 0x660f3adf, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -18069,10 +19560,11 @@ const insn_template i386_optab[] =
   { "pclmulqdq", 3, 0x6644, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -18085,10 +19577,11 @@ const insn_template i386_optab[] =
   { "pclmulqdq", 3, 0x660f3a44, None, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -18101,10 +19594,11 @@ const insn_template i386_optab[] =
   { "pclmullqlqdq", 2, 0x6644, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18114,10 +19608,11 @@ const insn_template i386_optab[] =
   { "pclmullqlqdq", 2, 0x660f3a44, 0x0, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18127,10 +19622,11 @@ const insn_template i386_optab[] =
   { "pclmulhqlqdq", 2, 0x6644, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18140,10 +19636,11 @@ const insn_template i386_optab[] =
   { "pclmulhqlqdq", 2, 0x660f3a44, 0x1, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18153,10 +19650,11 @@ const insn_template i386_optab[] =
   { "pclmullqhqdq", 2, 0x6644, 0x10, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18166,10 +19664,11 @@ const insn_template i386_optab[] =
   { "pclmullqhqdq", 2, 0x660f3a44, 0x10, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18179,10 +19678,11 @@ const insn_template i386_optab[] =
   { "pclmulhqhqdq", 2, 0x6644, 0x11, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18192,10 +19692,11 @@ const insn_template i386_optab[] =
   { "pclmulhqhqdq", 2, 0x660f3a44, 0x11, 3,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18205,10 +19706,11 @@ const insn_template i386_optab[] =
   { "vaddpd", 3, 0x6658, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18221,10 +19723,11 @@ const insn_template i386_optab[] =
   { "vaddpd", 3, 0x6658, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -18237,10 +19740,11 @@ const insn_template i386_optab[] =
   { "vaddps", 3, 0x58, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18253,10 +19757,11 @@ const insn_template i386_optab[] =
   { "vaddps", 3, 0x58, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -18269,10 +19774,11 @@ const insn_template i386_optab[] =
   { "vaddsd", 3, 0xf258, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -18285,10 +19791,11 @@ const insn_template i386_optab[] =
   { "vaddss", 3, 0xf358, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -18301,10 +19808,11 @@ const insn_template i386_optab[] =
   { "vaddsubpd", 3, 0x66d0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18317,10 +19825,11 @@ const insn_template i386_optab[] =
   { "vaddsubpd", 3, 0x66d0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -18333,10 +19842,11 @@ const insn_template i386_optab[] =
   { "vaddsubps", 3, 0xf2d0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18349,10 +19859,11 @@ const insn_template i386_optab[] =
   { "vaddsubps", 3, 0xf2d0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -18365,10 +19876,11 @@ const insn_template i386_optab[] =
   { "vandnpd", 3, 0x6655, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18381,10 +19893,11 @@ const insn_template i386_optab[] =
   { "vandnpd", 3, 0x6655, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -18397,10 +19910,11 @@ const insn_template i386_optab[] =
   { "vandnps", 3, 0x55, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18413,10 +19927,11 @@ const insn_template i386_optab[] =
   { "vandnps", 3, 0x55, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -18429,10 +19944,11 @@ const insn_template i386_optab[] =
   { "vandpd", 3, 0x6654, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18445,10 +19961,11 @@ const insn_template i386_optab[] =
   { "vandpd", 3, 0x6654, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -18461,10 +19978,11 @@ const insn_template i386_optab[] =
   { "vandps", 3, 0x54, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18477,10 +19995,11 @@ const insn_template i386_optab[] =
   { "vandps", 3, 0x54, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -18493,10 +20012,11 @@ const insn_template i386_optab[] =
   { "vblendpd", 4, 0x660d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -18512,10 +20032,11 @@ const insn_template i386_optab[] =
   { "vblendpd", 4, 0x660d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -18531,10 +20052,11 @@ const insn_template i386_optab[] =
   { "vblendps", 4, 0x660c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -18550,10 +20072,11 @@ const insn_template i386_optab[] =
   { "vblendps", 4, 0x660c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -18569,10 +20092,11 @@ const insn_template i386_optab[] =
   { "vblendvpd", 4, 0x664b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -18588,10 +20112,11 @@ const insn_template i386_optab[] =
   { "vblendvpd", 4, 0x664b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -18607,10 +20132,11 @@ const insn_template i386_optab[] =
   { "vblendvps", 4, 0x664a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -18626,10 +20152,11 @@ const insn_template i386_optab[] =
   { "vblendvps", 4, 0x664a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -18645,10 +20172,11 @@ const insn_template i386_optab[] =
   { "vbroadcastf128", 2, 0x661a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18658,10 +20186,11 @@ const insn_template i386_optab[] =
   { "vbroadcastsd", 2, 0x6619, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -18671,10 +20200,11 @@ const insn_template i386_optab[] =
   { "vbroadcastsd", 2, 0x6619, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -18684,10 +20214,11 @@ const insn_template i386_optab[] =
   { "vbroadcastss", 2, 0x6618, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -18697,10 +20228,11 @@ const insn_template i386_optab[] =
   { "vbroadcastss", 2, 0x6618, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -18710,10 +20242,11 @@ const insn_template i386_optab[] =
   { "vbroadcastss", 2, 0x6618, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -18723,10 +20256,11 @@ const insn_template i386_optab[] =
   { "vbroadcastss", 2, 0x6618, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -18736,10 +20270,11 @@ const insn_template i386_optab[] =
   { "vcmpeq_ospd", 3, 0x66c2, 0x10, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18752,10 +20287,11 @@ const insn_template i386_optab[] =
   { "vcmpeq_ospd", 3, 0x66c2, 0x10, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -18768,10 +20304,11 @@ const insn_template i386_optab[] =
   { "vcmpeq_osps", 3, 0xc2, 0x10, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18784,10 +20321,11 @@ const insn_template i386_optab[] =
   { "vcmpeq_osps", 3, 0xc2, 0x10, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -18800,10 +20338,11 @@ const insn_template i386_optab[] =
   { "vcmpeq_ossd", 3, 0xf2c2, 0x10, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -18816,10 +20355,11 @@ const insn_template i386_optab[] =
   { "vcmpeq_osss", 3, 0xf3c2, 0x10, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -18832,10 +20372,11 @@ const insn_template i386_optab[] =
   { "vcmpeqpd", 3, 0x66c2, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18848,10 +20389,11 @@ const insn_template i386_optab[] =
   { "vcmpeqpd", 3, 0x66c2, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -18864,10 +20406,11 @@ const insn_template i386_optab[] =
   { "vcmpeqps", 3, 0xc2, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18880,10 +20423,11 @@ const insn_template i386_optab[] =
   { "vcmpeqps", 3, 0xc2, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -18896,10 +20440,11 @@ const insn_template i386_optab[] =
   { "vcmpeqsd", 3, 0xf2c2, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -18912,10 +20457,11 @@ const insn_template i386_optab[] =
   { "vcmpeqss", 3, 0xf3c2, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -18928,10 +20474,11 @@ const insn_template i386_optab[] =
   { "vcmpeq_uqpd", 3, 0x66c2, 0x8, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18944,10 +20491,11 @@ const insn_template i386_optab[] =
   { "vcmpeq_uqpd", 3, 0x66c2, 0x8, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -18960,10 +20508,11 @@ const insn_template i386_optab[] =
   { "vcmpeq_uqps", 3, 0xc2, 0x8, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -18976,10 +20525,11 @@ const insn_template i386_optab[] =
   { "vcmpeq_uqps", 3, 0xc2, 0x8, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -18992,10 +20542,11 @@ const insn_template i386_optab[] =
   { "vcmpeq_uqsd", 3, 0xf2c2, 0x8, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19008,10 +20559,11 @@ const insn_template i386_optab[] =
   { "vcmpeq_uqss", 3, 0xf3c2, 0x8, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19024,10 +20576,11 @@ const insn_template i386_optab[] =
   { "vcmpeq_uspd", 3, 0x66c2, 0x18, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -19040,10 +20593,11 @@ const insn_template i386_optab[] =
   { "vcmpeq_uspd", 3, 0x66c2, 0x18, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -19056,10 +20610,11 @@ const insn_template i386_optab[] =
   { "vcmpeq_usps", 3, 0xc2, 0x18, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -19072,10 +20627,11 @@ const insn_template i386_optab[] =
   { "vcmpeq_usps", 3, 0xc2, 0x18, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -19088,10 +20644,11 @@ const insn_template i386_optab[] =
   { "vcmpeq_ussd", 3, 0xf2c2, 0x18, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19104,10 +20661,11 @@ const insn_template i386_optab[] =
   { "vcmpeq_usss", 3, 0xf3c2, 0x18, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19120,10 +20678,11 @@ const insn_template i386_optab[] =
   { "vcmpfalse_ospd", 3, 0x66c2, 0x1b, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -19136,10 +20695,11 @@ const insn_template i386_optab[] =
   { "vcmpfalse_ospd", 3, 0x66c2, 0x1b, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -19152,10 +20712,11 @@ const insn_template i386_optab[] =
   { "vcmpfalse_osps", 3, 0xc2, 0x1b, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -19168,10 +20729,11 @@ const insn_template i386_optab[] =
   { "vcmpfalse_osps", 3, 0xc2, 0x1b, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -19184,10 +20746,11 @@ const insn_template i386_optab[] =
   { "vcmpfalse_ossd", 3, 0xf2c2, 0x1b, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19200,10 +20763,11 @@ const insn_template i386_optab[] =
   { "vcmpfalse_osss", 3, 0xf3c2, 0x1b, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19216,10 +20780,11 @@ const insn_template i386_optab[] =
   { "vcmpfalsepd", 3, 0x66c2, 0xb, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -19232,10 +20797,11 @@ const insn_template i386_optab[] =
   { "vcmpfalsepd", 3, 0x66c2, 0xb, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -19248,10 +20814,11 @@ const insn_template i386_optab[] =
   { "vcmpfalseps", 3, 0xc2, 0xb, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -19264,10 +20831,11 @@ const insn_template i386_optab[] =
   { "vcmpfalseps", 3, 0xc2, 0xb, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -19280,10 +20848,11 @@ const insn_template i386_optab[] =
   { "vcmpfalsesd", 3, 0xf2c2, 0xb, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19296,10 +20865,11 @@ const insn_template i386_optab[] =
   { "vcmpfalsess", 3, 0xf3c2, 0xb, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19312,10 +20882,11 @@ const insn_template i386_optab[] =
   { "vcmpge_oqpd", 3, 0x66c2, 0x1d, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -19328,10 +20899,11 @@ const insn_template i386_optab[] =
   { "vcmpge_oqpd", 3, 0x66c2, 0x1d, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -19344,10 +20916,11 @@ const insn_template i386_optab[] =
   { "vcmpge_oqps", 3, 0xc2, 0x1d, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -19360,10 +20933,11 @@ const insn_template i386_optab[] =
   { "vcmpge_oqps", 3, 0xc2, 0x1d, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -19376,10 +20950,11 @@ const insn_template i386_optab[] =
   { "vcmpge_oqsd", 3, 0xf2c2, 0x1d, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19392,10 +20967,11 @@ const insn_template i386_optab[] =
   { "vcmpge_oqss", 3, 0xf3c2, 0x1d, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19408,10 +20984,11 @@ const insn_template i386_optab[] =
   { "vcmpgepd", 3, 0x66c2, 0xd, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -19424,10 +21001,11 @@ const insn_template i386_optab[] =
   { "vcmpgepd", 3, 0x66c2, 0xd, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -19440,10 +21018,11 @@ const insn_template i386_optab[] =
   { "vcmpgeps", 3, 0xc2, 0xd, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -19456,10 +21035,11 @@ const insn_template i386_optab[] =
   { "vcmpgeps", 3, 0xc2, 0xd, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -19472,10 +21052,11 @@ const insn_template i386_optab[] =
   { "vcmpgesd", 3, 0xf2c2, 0xd, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19488,10 +21069,11 @@ const insn_template i386_optab[] =
   { "vcmpgess", 3, 0xf3c2, 0xd, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19504,10 +21086,11 @@ const insn_template i386_optab[] =
   { "vcmpgt_oqpd", 3, 0x66c2, 0x1e, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -19520,10 +21103,11 @@ const insn_template i386_optab[] =
   { "vcmpgt_oqpd", 3, 0x66c2, 0x1e, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -19536,10 +21120,11 @@ const insn_template i386_optab[] =
   { "vcmpgt_oqps", 3, 0xc2, 0x1e, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -19552,10 +21137,11 @@ const insn_template i386_optab[] =
   { "vcmpgt_oqps", 3, 0xc2, 0x1e, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -19568,10 +21154,11 @@ const insn_template i386_optab[] =
   { "vcmpgt_oqsd", 3, 0xf2c2, 0x1e, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19584,10 +21171,11 @@ const insn_template i386_optab[] =
   { "vcmpgt_oqss", 3, 0xf3c2, 0x1e, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19600,10 +21188,11 @@ const insn_template i386_optab[] =
   { "vcmpgtpd", 3, 0x66c2, 0xe, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -19616,10 +21205,11 @@ const insn_template i386_optab[] =
   { "vcmpgtpd", 3, 0x66c2, 0xe, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -19632,10 +21222,11 @@ const insn_template i386_optab[] =
   { "vcmpgtps", 3, 0xc2, 0xe, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -19648,10 +21239,11 @@ const insn_template i386_optab[] =
   { "vcmpgtps", 3, 0xc2, 0xe, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -19664,10 +21256,11 @@ const insn_template i386_optab[] =
   { "vcmpgtsd", 3, 0xf2c2, 0xe, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19680,10 +21273,11 @@ const insn_template i386_optab[] =
   { "vcmpgtss", 3, 0xf3c2, 0xe, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19696,10 +21290,11 @@ const insn_template i386_optab[] =
   { "vcmple_oqpd", 3, 0x66c2, 0x12, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -19712,10 +21307,11 @@ const insn_template i386_optab[] =
   { "vcmple_oqpd", 3, 0x66c2, 0x12, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -19728,10 +21324,11 @@ const insn_template i386_optab[] =
   { "vcmple_oqps", 3, 0xc2, 0x12, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -19744,10 +21341,11 @@ const insn_template i386_optab[] =
   { "vcmple_oqps", 3, 0xc2, 0x12, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -19760,10 +21358,11 @@ const insn_template i386_optab[] =
   { "vcmple_oqsd", 3, 0xf2c2, 0x12, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19776,10 +21375,11 @@ const insn_template i386_optab[] =
   { "vcmple_oqss", 3, 0xf3c2, 0x12, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19792,10 +21392,11 @@ const insn_template i386_optab[] =
   { "vcmplepd", 3, 0x66c2, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -19808,10 +21409,11 @@ const insn_template i386_optab[] =
   { "vcmplepd", 3, 0x66c2, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -19824,10 +21426,11 @@ const insn_template i386_optab[] =
   { "vcmpleps", 3, 0xc2, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -19840,10 +21443,11 @@ const insn_template i386_optab[] =
   { "vcmpleps", 3, 0xc2, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -19856,10 +21460,11 @@ const insn_template i386_optab[] =
   { "vcmplesd", 3, 0xf2c2, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19872,10 +21477,11 @@ const insn_template i386_optab[] =
   { "vcmpless", 3, 0xf3c2, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19888,10 +21494,11 @@ const insn_template i386_optab[] =
   { "vcmplt_oqpd", 3, 0x66c2, 0x11, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -19904,10 +21511,11 @@ const insn_template i386_optab[] =
   { "vcmplt_oqpd", 3, 0x66c2, 0x11, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -19920,10 +21528,11 @@ const insn_template i386_optab[] =
   { "vcmplt_oqps", 3, 0xc2, 0x11, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -19936,10 +21545,11 @@ const insn_template i386_optab[] =
   { "vcmplt_oqps", 3, 0xc2, 0x11, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -19952,10 +21562,11 @@ const insn_template i386_optab[] =
   { "vcmplt_oqsd", 3, 0xf2c2, 0x11, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19968,10 +21579,11 @@ const insn_template i386_optab[] =
   { "vcmplt_oqss", 3, 0xf3c2, 0x11, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -19984,10 +21596,11 @@ const insn_template i386_optab[] =
   { "vcmpltpd", 3, 0x66c2, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20000,10 +21613,11 @@ const insn_template i386_optab[] =
   { "vcmpltpd", 3, 0x66c2, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -20016,10 +21630,11 @@ const insn_template i386_optab[] =
   { "vcmpltps", 3, 0xc2, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20032,10 +21647,11 @@ const insn_template i386_optab[] =
   { "vcmpltps", 3, 0xc2, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -20048,10 +21664,11 @@ const insn_template i386_optab[] =
   { "vcmpltsd", 3, 0xf2c2, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -20064,10 +21681,11 @@ const insn_template i386_optab[] =
   { "vcmpltss", 3, 0xf3c2, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -20080,10 +21698,11 @@ const insn_template i386_optab[] =
   { "vcmpneq_oqpd", 3, 0x66c2, 0xc, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20096,10 +21715,11 @@ const insn_template i386_optab[] =
   { "vcmpneq_oqpd", 3, 0x66c2, 0xc, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -20112,10 +21732,11 @@ const insn_template i386_optab[] =
   { "vcmpneq_oqps", 3, 0xc2, 0xc, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20128,10 +21749,11 @@ const insn_template i386_optab[] =
   { "vcmpneq_oqps", 3, 0xc2, 0xc, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -20144,10 +21766,11 @@ const insn_template i386_optab[] =
   { "vcmpneq_oqsd", 3, 0xf2c2, 0xc, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -20160,10 +21783,11 @@ const insn_template i386_optab[] =
   { "vcmpneq_oqss", 3, 0xf3c2, 0xc, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -20176,10 +21800,11 @@ const insn_template i386_optab[] =
   { "vcmpneq_ospd", 3, 0x66c2, 0x1c, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20192,10 +21817,11 @@ const insn_template i386_optab[] =
   { "vcmpneq_ospd", 3, 0x66c2, 0x1c, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -20208,10 +21834,11 @@ const insn_template i386_optab[] =
   { "vcmpneq_osps", 3, 0xc2, 0x1c, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20224,10 +21851,11 @@ const insn_template i386_optab[] =
   { "vcmpneq_osps", 3, 0xc2, 0x1c, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -20240,10 +21868,11 @@ const insn_template i386_optab[] =
   { "vcmpneq_ossd", 3, 0xf2c2, 0x1c, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -20256,10 +21885,11 @@ const insn_template i386_optab[] =
   { "vcmpneq_osss", 3, 0xf3c2, 0x1c, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -20272,10 +21902,11 @@ const insn_template i386_optab[] =
   { "vcmpneqpd", 3, 0x66c2, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20288,10 +21919,11 @@ const insn_template i386_optab[] =
   { "vcmpneqpd", 3, 0x66c2, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -20304,10 +21936,11 @@ const insn_template i386_optab[] =
   { "vcmpneqps", 3, 0xc2, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20320,10 +21953,11 @@ const insn_template i386_optab[] =
   { "vcmpneqps", 3, 0xc2, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -20336,10 +21970,11 @@ const insn_template i386_optab[] =
   { "vcmpneqsd", 3, 0xf2c2, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -20352,10 +21987,11 @@ const insn_template i386_optab[] =
   { "vcmpneqss", 3, 0xf3c2, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -20368,10 +22004,11 @@ const insn_template i386_optab[] =
   { "vcmpneq_uspd", 3, 0x66c2, 0x14, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20384,10 +22021,11 @@ const insn_template i386_optab[] =
   { "vcmpneq_uspd", 3, 0x66c2, 0x14, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -20400,10 +22038,11 @@ const insn_template i386_optab[] =
   { "vcmpneq_usps", 3, 0xc2, 0x14, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20416,10 +22055,11 @@ const insn_template i386_optab[] =
   { "vcmpneq_usps", 3, 0xc2, 0x14, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -20432,10 +22072,11 @@ const insn_template i386_optab[] =
   { "vcmpneq_ussd", 3, 0xf2c2, 0x14, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -20448,10 +22089,11 @@ const insn_template i386_optab[] =
   { "vcmpneq_usss", 3, 0xf3c2, 0x14, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -20464,10 +22106,11 @@ const insn_template i386_optab[] =
   { "vcmpngepd", 3, 0x66c2, 0x9, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20480,10 +22123,11 @@ const insn_template i386_optab[] =
   { "vcmpngepd", 3, 0x66c2, 0x9, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -20496,10 +22140,11 @@ const insn_template i386_optab[] =
   { "vcmpngeps", 3, 0xc2, 0x9, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20512,10 +22157,11 @@ const insn_template i386_optab[] =
   { "vcmpngeps", 3, 0xc2, 0x9, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -20528,10 +22174,11 @@ const insn_template i386_optab[] =
   { "vcmpngesd", 3, 0xf2c2, 0x9, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -20544,10 +22191,11 @@ const insn_template i386_optab[] =
   { "vcmpngess", 3, 0xf3c2, 0x9, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -20560,10 +22208,11 @@ const insn_template i386_optab[] =
   { "vcmpnge_uqpd", 3, 0x66c2, 0x19, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20576,10 +22225,11 @@ const insn_template i386_optab[] =
   { "vcmpnge_uqpd", 3, 0x66c2, 0x19, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -20592,10 +22242,11 @@ const insn_template i386_optab[] =
   { "vcmpnge_uqps", 3, 0xc2, 0x19, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20608,10 +22259,11 @@ const insn_template i386_optab[] =
   { "vcmpnge_uqps", 3, 0xc2, 0x19, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -20624,10 +22276,11 @@ const insn_template i386_optab[] =
   { "vcmpnge_uqsd", 3, 0xf2c2, 0x19, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -20640,10 +22293,11 @@ const insn_template i386_optab[] =
   { "vcmpnge_uqss", 3, 0xf3c2, 0x19, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -20656,10 +22310,11 @@ const insn_template i386_optab[] =
   { "vcmpngtpd", 3, 0x66c2, 0xa, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20672,10 +22327,11 @@ const insn_template i386_optab[] =
   { "vcmpngtpd", 3, 0x66c2, 0xa, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -20688,10 +22344,11 @@ const insn_template i386_optab[] =
   { "vcmpngtps", 3, 0xc2, 0xa, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20704,10 +22361,11 @@ const insn_template i386_optab[] =
   { "vcmpngtps", 3, 0xc2, 0xa, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -20720,10 +22378,11 @@ const insn_template i386_optab[] =
   { "vcmpngtsd", 3, 0xf2c2, 0xa, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -20736,10 +22395,11 @@ const insn_template i386_optab[] =
   { "vcmpngtss", 3, 0xf3c2, 0xa, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -20752,10 +22412,11 @@ const insn_template i386_optab[] =
   { "vcmpngt_uqpd", 3, 0x66c2, 0x1a, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20768,10 +22429,11 @@ const insn_template i386_optab[] =
   { "vcmpngt_uqpd", 3, 0x66c2, 0x1a, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -20784,10 +22446,11 @@ const insn_template i386_optab[] =
   { "vcmpngt_uqps", 3, 0xc2, 0x1a, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20800,10 +22463,11 @@ const insn_template i386_optab[] =
   { "vcmpngt_uqps", 3, 0xc2, 0x1a, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -20816,10 +22480,11 @@ const insn_template i386_optab[] =
   { "vcmpngt_uqsd", 3, 0xf2c2, 0x1a, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -20832,10 +22497,11 @@ const insn_template i386_optab[] =
   { "vcmpngt_uqss", 3, 0xf3c2, 0x1a, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -20848,10 +22514,11 @@ const insn_template i386_optab[] =
   { "vcmpnlepd", 3, 0x66c2, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20864,10 +22531,11 @@ const insn_template i386_optab[] =
   { "vcmpnlepd", 3, 0x66c2, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -20880,10 +22548,11 @@ const insn_template i386_optab[] =
   { "vcmpnleps", 3, 0xc2, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20896,10 +22565,11 @@ const insn_template i386_optab[] =
   { "vcmpnleps", 3, 0xc2, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -20912,10 +22582,11 @@ const insn_template i386_optab[] =
   { "vcmpnlesd", 3, 0xf2c2, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -20928,10 +22599,11 @@ const insn_template i386_optab[] =
   { "vcmpnless", 3, 0xf3c2, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -20944,10 +22616,11 @@ const insn_template i386_optab[] =
   { "vcmpnle_uqpd", 3, 0x66c2, 0x16, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20960,10 +22633,11 @@ const insn_template i386_optab[] =
   { "vcmpnle_uqpd", 3, 0x66c2, 0x16, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -20976,10 +22650,11 @@ const insn_template i386_optab[] =
   { "vcmpnle_uqps", 3, 0xc2, 0x16, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -20992,10 +22667,11 @@ const insn_template i386_optab[] =
   { "vcmpnle_uqps", 3, 0xc2, 0x16, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -21008,10 +22684,11 @@ const insn_template i386_optab[] =
   { "vcmpnle_uqsd", 3, 0xf2c2, 0x16, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -21024,10 +22701,11 @@ const insn_template i386_optab[] =
   { "vcmpnle_uqss", 3, 0xf3c2, 0x16, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -21040,10 +22718,11 @@ const insn_template i386_optab[] =
   { "vcmpnltpd", 3, 0x66c2, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -21056,10 +22735,11 @@ const insn_template i386_optab[] =
   { "vcmpnltpd", 3, 0x66c2, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -21072,10 +22752,11 @@ const insn_template i386_optab[] =
   { "vcmpnltps", 3, 0xc2, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -21088,10 +22769,11 @@ const insn_template i386_optab[] =
   { "vcmpnltps", 3, 0xc2, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -21104,10 +22786,11 @@ const insn_template i386_optab[] =
   { "vcmpnltsd", 3, 0xf2c2, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -21120,10 +22803,11 @@ const insn_template i386_optab[] =
   { "vcmpnltss", 3, 0xf3c2, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -21136,10 +22820,11 @@ const insn_template i386_optab[] =
   { "vcmpnlt_uqpd", 3, 0x66c2, 0x15, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -21152,10 +22837,11 @@ const insn_template i386_optab[] =
   { "vcmpnlt_uqpd", 3, 0x66c2, 0x15, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -21168,10 +22854,11 @@ const insn_template i386_optab[] =
   { "vcmpnlt_uqps", 3, 0xc2, 0x15, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -21184,10 +22871,11 @@ const insn_template i386_optab[] =
   { "vcmpnlt_uqps", 3, 0xc2, 0x15, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -21200,10 +22888,11 @@ const insn_template i386_optab[] =
   { "vcmpnlt_uqsd", 3, 0xf2c2, 0x15, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -21216,10 +22905,11 @@ const insn_template i386_optab[] =
   { "vcmpnlt_uqss", 3, 0xf3c2, 0x15, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -21232,10 +22922,11 @@ const insn_template i386_optab[] =
   { "vcmpordpd", 3, 0x66c2, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -21248,10 +22939,11 @@ const insn_template i386_optab[] =
   { "vcmpordpd", 3, 0x66c2, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -21264,10 +22956,11 @@ const insn_template i386_optab[] =
   { "vcmpordps", 3, 0xc2, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -21280,10 +22973,11 @@ const insn_template i386_optab[] =
   { "vcmpordps", 3, 0xc2, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -21296,10 +22990,11 @@ const insn_template i386_optab[] =
   { "vcmpordsd", 3, 0xf2c2, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -21312,10 +23007,11 @@ const insn_template i386_optab[] =
   { "vcmpord_spd", 3, 0x66c2, 0x17, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -21328,10 +23024,11 @@ const insn_template i386_optab[] =
   { "vcmpord_spd", 3, 0x66c2, 0x17, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -21344,10 +23041,11 @@ const insn_template i386_optab[] =
   { "vcmpord_sps", 3, 0xc2, 0x17, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -21360,10 +23058,11 @@ const insn_template i386_optab[] =
   { "vcmpord_sps", 3, 0xc2, 0x17, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -21376,10 +23075,11 @@ const insn_template i386_optab[] =
   { "vcmpordss", 3, 0xf3c2, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -21392,10 +23092,11 @@ const insn_template i386_optab[] =
   { "vcmpord_ssd", 3, 0xf2c2, 0x17, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -21408,10 +23109,11 @@ const insn_template i386_optab[] =
   { "vcmpord_sss", 3, 0xf3c2, 0x17, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -21424,10 +23126,11 @@ const insn_template i386_optab[] =
   { "vcmppd", 4, 0x66c2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -21443,10 +23146,11 @@ const insn_template i386_optab[] =
   { "vcmppd", 4, 0x66c2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -21462,10 +23166,11 @@ const insn_template i386_optab[] =
   { "vcmpps", 4, 0xc2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -21481,10 +23186,11 @@ const insn_template i386_optab[] =
   { "vcmpps", 4, 0xc2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -21500,10 +23206,11 @@ const insn_template i386_optab[] =
   { "vcmpsd", 4, 0xf2c2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -21519,10 +23226,11 @@ const insn_template i386_optab[] =
   { "vcmpss", 4, 0xf3c2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -21538,10 +23246,11 @@ const insn_template i386_optab[] =
   { "vcmptruepd", 3, 0x66c2, 0xf, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -21554,10 +23263,11 @@ const insn_template i386_optab[] =
   { "vcmptruepd", 3, 0x66c2, 0xf, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -21570,10 +23280,11 @@ const insn_template i386_optab[] =
   { "vcmptrueps", 3, 0xc2, 0xf, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -21586,10 +23297,11 @@ const insn_template i386_optab[] =
   { "vcmptrueps", 3, 0xc2, 0xf, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -21602,10 +23314,11 @@ const insn_template i386_optab[] =
   { "vcmptruesd", 3, 0xf2c2, 0xf, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -21618,10 +23331,11 @@ const insn_template i386_optab[] =
   { "vcmptruess", 3, 0xf3c2, 0xf, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -21634,10 +23348,11 @@ const insn_template i386_optab[] =
   { "vcmptrue_uspd", 3, 0x66c2, 0x1f, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -21650,10 +23365,11 @@ const insn_template i386_optab[] =
   { "vcmptrue_uspd", 3, 0x66c2, 0x1f, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -21666,10 +23382,11 @@ const insn_template i386_optab[] =
   { "vcmptrue_usps", 3, 0xc2, 0x1f, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -21682,10 +23399,11 @@ const insn_template i386_optab[] =
   { "vcmptrue_usps", 3, 0xc2, 0x1f, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -21698,10 +23416,11 @@ const insn_template i386_optab[] =
   { "vcmptrue_ussd", 3, 0xf2c2, 0x1f, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -21714,10 +23433,11 @@ const insn_template i386_optab[] =
   { "vcmptrue_usss", 3, 0xf3c2, 0x1f, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -21730,10 +23450,11 @@ const insn_template i386_optab[] =
   { "vcmpunordpd", 3, 0x66c2, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -21746,10 +23467,11 @@ const insn_template i386_optab[] =
   { "vcmpunordpd", 3, 0x66c2, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -21762,10 +23484,11 @@ const insn_template i386_optab[] =
   { "vcmpunordps", 3, 0xc2, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -21778,10 +23501,11 @@ const insn_template i386_optab[] =
   { "vcmpunordps", 3, 0xc2, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -21794,10 +23518,11 @@ const insn_template i386_optab[] =
   { "vcmpunordsd", 3, 0xf2c2, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -21810,10 +23535,11 @@ const insn_template i386_optab[] =
   { "vcmpunord_spd", 3, 0x66c2, 0x13, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -21826,10 +23552,11 @@ const insn_template i386_optab[] =
   { "vcmpunord_spd", 3, 0x66c2, 0x13, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -21842,10 +23569,11 @@ const insn_template i386_optab[] =
   { "vcmpunord_sps", 3, 0xc2, 0x13, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -21858,10 +23586,11 @@ const insn_template i386_optab[] =
   { "vcmpunord_sps", 3, 0xc2, 0x13, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -21874,10 +23603,11 @@ const insn_template i386_optab[] =
   { "vcmpunordss", 3, 0xf3c2, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -21890,10 +23620,11 @@ const insn_template i386_optab[] =
   { "vcmpunord_ssd", 3, 0xf2c2, 0x13, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -21906,10 +23637,11 @@ const insn_template i386_optab[] =
   { "vcmpunord_sss", 3, 0xf3c2, 0x13, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -21922,10 +23654,11 @@ const insn_template i386_optab[] =
   { "vcomisd", 2, 0x662f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -21935,10 +23668,11 @@ const insn_template i386_optab[] =
   { "vcomiss", 2, 0x2f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -21948,10 +23682,11 @@ const insn_template i386_optab[] =
   { "vcvtdq2pd", 2, 0xf3e6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -21961,10 +23696,11 @@ const insn_template i386_optab[] =
   { "vcvtdq2pd", 2, 0xf3e6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -21974,10 +23710,11 @@ const insn_template i386_optab[] =
   { "vcvtdq2ps", 2, 0x5b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -21987,10 +23724,11 @@ const insn_template i386_optab[] =
   { "vcvtdq2ps", 2, 0x5b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -22000,10 +23738,11 @@ const insn_template i386_optab[] =
   { "vcvtpd2dq", 2, 0xf2e6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -22013,10 +23752,11 @@ const insn_template i386_optab[] =
   { "vcvtpd2dq", 2, 0xf2e6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 0, 0, 0, 0 } },
@@ -22026,10 +23766,11 @@ const insn_template i386_optab[] =
   { "vcvtpd2dq", 2, 0xf2e6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -22039,10 +23780,11 @@ const insn_template i386_optab[] =
   { "vcvtpd2dq", 2, 0xf2e6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 0, 0, 0, 0 } },
@@ -22052,10 +23794,11 @@ const insn_template i386_optab[] =
   { "vcvtpd2dqx", 2, 0xf2e6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -22065,10 +23808,11 @@ const insn_template i386_optab[] =
   { "vcvtpd2dqy", 2, 0xf2e6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -22078,10 +23822,11 @@ const insn_template i386_optab[] =
   { "vcvtpd2ps", 2, 0x665a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -22091,10 +23836,11 @@ const insn_template i386_optab[] =
   { "vcvtpd2ps", 2, 0x665a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 0, 0, 0, 0 } },
@@ -22104,10 +23850,11 @@ const insn_template i386_optab[] =
   { "vcvtpd2ps", 2, 0x665a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -22117,10 +23864,11 @@ const insn_template i386_optab[] =
   { "vcvtpd2ps", 2, 0x665a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 0, 0, 0, 0 } },
@@ -22130,10 +23878,11 @@ const insn_template i386_optab[] =
   { "vcvtpd2psx", 2, 0x665a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -22143,10 +23892,11 @@ const insn_template i386_optab[] =
   { "vcvtpd2psy", 2, 0x665a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -22156,10 +23906,11 @@ const insn_template i386_optab[] =
   { "vcvtps2dq", 2, 0x665b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -22169,10 +23920,11 @@ const insn_template i386_optab[] =
   { "vcvtps2dq", 2, 0x665b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -22182,10 +23934,11 @@ const insn_template i386_optab[] =
   { "vcvtps2pd", 2, 0x5a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -22195,10 +23948,11 @@ const insn_template i386_optab[] =
   { "vcvtps2pd", 2, 0x5a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -22208,10 +23962,11 @@ const insn_template i386_optab[] =
   { "vcvtsd2si", 2, 0xf22d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -22221,10 +23976,11 @@ const insn_template i386_optab[] =
   { "vcvtsd2ss", 3, 0xf25a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -22237,10 +23993,11 @@ const insn_template i386_optab[] =
   { "vcvtsi2sd", 3, 0xf22a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -22253,10 +24010,11 @@ const insn_template i386_optab[] =
   { "vcvtsi2sd", 3, 0xf22a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -22269,10 +24027,11 @@ const insn_template i386_optab[] =
   { "vcvtsi2ss", 3, 0xf32a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        1, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -22285,10 +24044,11 @@ const insn_template i386_optab[] =
   { "vcvtsi2ss", 3, 0xf32a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -22301,10 +24061,11 @@ const insn_template i386_optab[] =
   { "vcvtss2sd", 3, 0xf35a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -22317,10 +24078,11 @@ const insn_template i386_optab[] =
   { "vcvtss2si", 2, 0xf32d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
+      3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -22330,10 +24092,11 @@ const insn_template i386_optab[] =
   { "vcvttpd2dq", 2, 0x66e6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -22343,10 +24106,11 @@ const insn_template i386_optab[] =
   { "vcvttpd2dq", 2, 0x66e6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 0, 0, 0, 0 } },
@@ -22356,10 +24120,11 @@ const insn_template i386_optab[] =
   { "vcvttpd2dq", 2, 0x66e6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -22369,10 +24134,11 @@ const insn_template i386_optab[] =
   { "vcvttpd2dq", 2, 0x66e6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 0, 0, 0, 0 } },
@@ -22382,10 +24148,11 @@ const insn_template i386_optab[] =
   { "vcvttpd2dqx", 2, 0x66e6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -22395,10 +24162,11 @@ const insn_template i386_optab[] =
   { "vcvttpd2dqy", 2, 0x66e6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -22408,10 +24176,11 @@ const insn_template i386_optab[] =
   { "vcvttps2dq", 2, 0xf35b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -22421,10 +24190,11 @@ const insn_template i386_optab[] =
   { "vcvttps2dq", 2, 0xf35b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -22434,10 +24204,11 @@ const insn_template i386_optab[] =
   { "vcvttsd2si", 2, 0xf22c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -22447,10 +24218,11 @@ const insn_template i386_optab[] =
   { "vcvttss2si", 2, 0xf32c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
+      3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -22460,10 +24232,11 @@ const insn_template i386_optab[] =
   { "vdivpd", 3, 0x665e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -22476,10 +24249,11 @@ const insn_template i386_optab[] =
   { "vdivpd", 3, 0x665e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -22492,10 +24266,11 @@ const insn_template i386_optab[] =
   { "vdivps", 3, 0x5e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -22508,10 +24283,11 @@ const insn_template i386_optab[] =
   { "vdivps", 3, 0x5e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -22524,10 +24300,11 @@ const insn_template i386_optab[] =
   { "vdivsd", 3, 0xf25e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -22540,10 +24317,11 @@ const insn_template i386_optab[] =
   { "vdivss", 3, 0xf35e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -22556,10 +24334,11 @@ const insn_template i386_optab[] =
   { "vdppd", 4, 0x6641, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -22575,10 +24354,11 @@ const insn_template i386_optab[] =
   { "vdpps", 4, 0x6640, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -22594,10 +24374,11 @@ const insn_template i386_optab[] =
   { "vdpps", 4, 0x6640, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -22613,10 +24394,11 @@ const insn_template i386_optab[] =
   { "vextractf128", 3, 0x6619, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -22629,10 +24411,11 @@ const insn_template i386_optab[] =
   { "vextractps", 3, 0x6617, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -22645,10 +24428,11 @@ const insn_template i386_optab[] =
   { "vhaddpd", 3, 0x667c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -22661,10 +24445,11 @@ const insn_template i386_optab[] =
   { "vhaddpd", 3, 0x667c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -22677,10 +24462,11 @@ const insn_template i386_optab[] =
   { "vhaddps", 3, 0xf27c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -22693,10 +24479,11 @@ const insn_template i386_optab[] =
   { "vhaddps", 3, 0xf27c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -22709,10 +24496,11 @@ const insn_template i386_optab[] =
   { "vhsubpd", 3, 0x667d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -22725,10 +24513,11 @@ const insn_template i386_optab[] =
   { "vhsubpd", 3, 0x667d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -22741,10 +24530,11 @@ const insn_template i386_optab[] =
   { "vhsubps", 3, 0xf27d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -22757,10 +24547,11 @@ const insn_template i386_optab[] =
   { "vhsubps", 3, 0xf27d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -22773,10 +24564,11 @@ const insn_template i386_optab[] =
   { "vinsertf128", 4, 0x6618, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -22792,10 +24584,11 @@ const insn_template i386_optab[] =
   { "vinsertps", 4, 0x6621, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -22811,10 +24604,11 @@ const insn_template i386_optab[] =
   { "vlddqu", 2, 0xf2f0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -22824,10 +24618,11 @@ const insn_template i386_optab[] =
   { "vlddqu", 2, 0xf2f0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -22837,20 +24632,22 @@ const insn_template i386_optab[] =
   { "vldmxcsr", 1, 0xae, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "vmaskmovdqu", 2, 0x66f7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -22860,10 +24657,11 @@ const insn_template i386_optab[] =
   { "vmaskmovpd", 3, 0x662f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -22876,10 +24674,11 @@ const insn_template i386_optab[] =
   { "vmaskmovpd", 3, 0x662f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -22892,10 +24691,11 @@ const insn_template i386_optab[] =
   { "vmaskmovpd", 3, 0x662d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -22908,10 +24708,11 @@ const insn_template i386_optab[] =
   { "vmaskmovpd", 3, 0x662d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -22924,10 +24725,11 @@ const insn_template i386_optab[] =
   { "vmaskmovps", 3, 0x662e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -22940,10 +24742,11 @@ const insn_template i386_optab[] =
   { "vmaskmovps", 3, 0x662e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -22956,10 +24759,11 @@ const insn_template i386_optab[] =
   { "vmaskmovps", 3, 0x662c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -22972,10 +24776,11 @@ const insn_template i386_optab[] =
   { "vmaskmovps", 3, 0x662c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -22988,10 +24793,11 @@ const insn_template i386_optab[] =
   { "vmaxpd", 3, 0x665f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -23004,10 +24810,11 @@ const insn_template i386_optab[] =
   { "vmaxpd", 3, 0x665f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -23020,10 +24827,11 @@ const insn_template i386_optab[] =
   { "vmaxps", 3, 0x5f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -23036,10 +24844,11 @@ const insn_template i386_optab[] =
   { "vmaxps", 3, 0x5f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -23052,10 +24861,11 @@ const insn_template i386_optab[] =
   { "vmaxsd", 3, 0xf25f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -23068,10 +24878,11 @@ const insn_template i386_optab[] =
   { "vmaxss", 3, 0xf35f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -23084,10 +24895,11 @@ const insn_template i386_optab[] =
   { "vminpd", 3, 0x665d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -23100,10 +24912,11 @@ const insn_template i386_optab[] =
   { "vminpd", 3, 0x665d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -23116,10 +24929,11 @@ const insn_template i386_optab[] =
   { "vminps", 3, 0x5d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -23132,10 +24946,11 @@ const insn_template i386_optab[] =
   { "vminps", 3, 0x5d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -23148,10 +24963,11 @@ const insn_template i386_optab[] =
   { "vminsd", 3, 0xf25d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -23164,10 +24980,11 @@ const insn_template i386_optab[] =
   { "vminss", 3, 0xf35d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -23180,10 +24997,11 @@ const insn_template i386_optab[] =
   { "vmovapd", 2, 0x6628, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -23193,10 +25011,11 @@ const insn_template i386_optab[] =
   { "vmovapd", 2, 0x6629, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23206,10 +25025,11 @@ const insn_template i386_optab[] =
   { "vmovapd", 2, 0x6628, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -23219,10 +25039,11 @@ const insn_template i386_optab[] =
   { "vmovapd", 2, 0x6629, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23232,10 +25053,11 @@ const insn_template i386_optab[] =
   { "vmovaps", 2, 0x28, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -23245,10 +25067,11 @@ const insn_template i386_optab[] =
   { "vmovaps", 2, 0x29, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23258,10 +25081,11 @@ const insn_template i386_optab[] =
   { "vmovaps", 2, 0x28, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -23271,10 +25095,11 @@ const insn_template i386_optab[] =
   { "vmovaps", 2, 0x29, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23284,10 +25109,11 @@ const insn_template i386_optab[] =
   { "vmovd", 2, 0x666e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -23297,10 +25123,11 @@ const insn_template i386_optab[] =
   { "vmovd", 2, 0x666e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23310,10 +25137,11 @@ const insn_template i386_optab[] =
   { "vmovd", 2, 0x667e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23323,10 +25151,11 @@ const insn_template i386_optab[] =
   { "vmovd", 2, 0x667e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+      3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23336,10 +25165,11 @@ const insn_template i386_optab[] =
   { "vmovddup", 2, 0xf212, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -23349,10 +25179,11 @@ const insn_template i386_optab[] =
   { "vmovddup", 2, 0xf212, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -23362,10 +25193,11 @@ const insn_template i386_optab[] =
   { "vmovdqa", 2, 0x666f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -23375,10 +25207,11 @@ const insn_template i386_optab[] =
   { "vmovdqa", 2, 0x667f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23388,10 +25221,11 @@ const insn_template i386_optab[] =
   { "vmovdqa", 2, 0x666f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -23401,10 +25235,11 @@ const insn_template i386_optab[] =
   { "vmovdqa", 2, 0x667f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23414,10 +25249,11 @@ const insn_template i386_optab[] =
   { "vmovdqu", 2, 0xf36f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -23427,10 +25263,11 @@ const insn_template i386_optab[] =
   { "vmovdqu", 2, 0xf37f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23440,10 +25277,11 @@ const insn_template i386_optab[] =
   { "vmovdqu", 2, 0xf36f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -23453,10 +25291,11 @@ const insn_template i386_optab[] =
   { "vmovdqu", 2, 0xf37f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23466,10 +25305,11 @@ const insn_template i386_optab[] =
   { "vmovhlps", 3, 0x12, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23482,10 +25322,11 @@ const insn_template i386_optab[] =
   { "vmovhpd", 3, 0x6616, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -23498,10 +25339,11 @@ const insn_template i386_optab[] =
   { "vmovhpd", 2, 0x6617, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23511,10 +25353,11 @@ const insn_template i386_optab[] =
   { "vmovhps", 3, 0x16, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -23527,10 +25370,11 @@ const insn_template i386_optab[] =
   { "vmovhps", 2, 0x17, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23540,10 +25384,11 @@ const insn_template i386_optab[] =
   { "vmovlhps", 3, 0x16, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23556,10 +25401,11 @@ const insn_template i386_optab[] =
   { "vmovlpd", 3, 0x6612, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -23572,10 +25418,11 @@ const insn_template i386_optab[] =
   { "vmovlpd", 2, 0x6613, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23585,10 +25432,11 @@ const insn_template i386_optab[] =
   { "vmovlps", 3, 0x12, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -23601,10 +25449,11 @@ const insn_template i386_optab[] =
   { "vmovlps", 2, 0x13, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23614,10 +25463,11 @@ const insn_template i386_optab[] =
   { "vmovmskpd", 2, 0x6650, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23627,10 +25477,11 @@ const insn_template i386_optab[] =
   { "vmovmskpd", 2, 0x6650, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23640,10 +25491,11 @@ const insn_template i386_optab[] =
   { "vmovmskps", 2, 0x50, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23653,10 +25505,11 @@ const insn_template i386_optab[] =
   { "vmovmskps", 2, 0x50, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23666,10 +25519,11 @@ const insn_template i386_optab[] =
   { "vmovntdq", 2, 0x66e7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23679,10 +25533,11 @@ const insn_template i386_optab[] =
   { "vmovntdq", 2, 0x66e7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23692,10 +25547,11 @@ const insn_template i386_optab[] =
   { "vmovntdqa", 2, 0x662a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -23705,10 +25561,11 @@ const insn_template i386_optab[] =
   { "vmovntdqa", 2, 0x662a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -23718,10 +25575,11 @@ const insn_template i386_optab[] =
   { "vmovntpd", 2, 0x662b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23731,10 +25589,11 @@ const insn_template i386_optab[] =
   { "vmovntpd", 2, 0x662b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23744,10 +25603,11 @@ const insn_template i386_optab[] =
   { "vmovntps", 2, 0x2b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23757,10 +25617,11 @@ const insn_template i386_optab[] =
   { "vmovntps", 2, 0x2b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23770,10 +25631,11 @@ const insn_template i386_optab[] =
   { "vmovq", 2, 0xf37e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -23783,10 +25645,11 @@ const insn_template i386_optab[] =
   { "vmovq", 2, 0x66d6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23796,10 +25659,11 @@ const insn_template i386_optab[] =
   { "vmovq", 2, 0x666e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -23809,10 +25673,11 @@ const insn_template i386_optab[] =
   { "vmovq", 2, 0x667e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23822,10 +25687,11 @@ const insn_template i386_optab[] =
   { "vmovsd", 2, 0xf211, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23835,10 +25701,11 @@ const insn_template i386_optab[] =
   { "vmovsd", 2, 0xf210, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -23848,10 +25715,11 @@ const insn_template i386_optab[] =
   { "vmovsd", 3, 0xf210, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23864,10 +25732,11 @@ const insn_template i386_optab[] =
   { "vmovsd", 3, 0xf211, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23880,10 +25749,11 @@ const insn_template i386_optab[] =
   { "vmovshdup", 2, 0xf316, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -23893,10 +25763,11 @@ const insn_template i386_optab[] =
   { "vmovshdup", 2, 0xf316, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -23906,10 +25777,11 @@ const insn_template i386_optab[] =
   { "vmovsldup", 2, 0xf312, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -23919,10 +25791,11 @@ const insn_template i386_optab[] =
   { "vmovsldup", 2, 0xf312, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -23932,10 +25805,11 @@ const insn_template i386_optab[] =
   { "vmovss", 2, 0xf311, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23945,10 +25819,11 @@ const insn_template i386_optab[] =
   { "vmovss", 2, 0xf310, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -23958,10 +25833,11 @@ const insn_template i386_optab[] =
   { "vmovss", 3, 0xf310, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23974,10 +25850,11 @@ const insn_template i386_optab[] =
   { "vmovss", 3, 0xf311, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -23990,10 +25867,11 @@ const insn_template i386_optab[] =
   { "vmovupd", 2, 0x6610, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24003,10 +25881,11 @@ const insn_template i386_optab[] =
   { "vmovupd", 2, 0x6611, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -24016,10 +25895,11 @@ const insn_template i386_optab[] =
   { "vmovupd", 2, 0x6610, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24029,10 +25909,11 @@ const insn_template i386_optab[] =
   { "vmovupd", 2, 0x6611, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -24042,10 +25923,11 @@ const insn_template i386_optab[] =
   { "vmovups", 2, 0x10, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24055,10 +25937,11 @@ const insn_template i386_optab[] =
   { "vmovups", 2, 0x11, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -24068,10 +25951,11 @@ const insn_template i386_optab[] =
   { "vmovups", 2, 0x10, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24081,10 +25965,11 @@ const insn_template i386_optab[] =
   { "vmovups", 2, 0x11, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -24094,10 +25979,11 @@ const insn_template i386_optab[] =
   { "vmpsadbw", 4, 0x6642, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -24113,10 +25999,11 @@ const insn_template i386_optab[] =
   { "vmpsadbw", 4, 0x6642, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -24132,10 +26019,11 @@ const insn_template i386_optab[] =
   { "vmulpd", 3, 0x6659, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24148,10 +26036,11 @@ const insn_template i386_optab[] =
   { "vmulpd", 3, 0x6659, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24164,10 +26053,11 @@ const insn_template i386_optab[] =
   { "vmulps", 3, 0x59, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24180,10 +26070,11 @@ const insn_template i386_optab[] =
   { "vmulps", 3, 0x59, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24196,10 +26087,11 @@ const insn_template i386_optab[] =
   { "vmulsd", 3, 0xf259, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -24212,10 +26104,11 @@ const insn_template i386_optab[] =
   { "vmulss", 3, 0xf359, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -24228,10 +26121,11 @@ const insn_template i386_optab[] =
   { "vorpd", 3, 0x6656, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24244,10 +26138,11 @@ const insn_template i386_optab[] =
   { "vorpd", 3, 0x6656, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24260,10 +26155,11 @@ const insn_template i386_optab[] =
   { "vorps", 3, 0x56, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24276,10 +26172,11 @@ const insn_template i386_optab[] =
   { "vorps", 3, 0x56, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24292,10 +26189,11 @@ const insn_template i386_optab[] =
   { "vpabsb", 2, 0x661c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24305,10 +26203,11 @@ const insn_template i386_optab[] =
   { "vpabsb", 2, 0x661c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24318,10 +26217,11 @@ const insn_template i386_optab[] =
   { "vpabsd", 2, 0x661e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24331,10 +26231,11 @@ const insn_template i386_optab[] =
   { "vpabsd", 2, 0x661e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24344,10 +26245,11 @@ const insn_template i386_optab[] =
   { "vpabsw", 2, 0x661d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24357,10 +26259,11 @@ const insn_template i386_optab[] =
   { "vpabsw", 2, 0x661d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24370,10 +26273,11 @@ const insn_template i386_optab[] =
   { "vpackssdw", 3, 0x666b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24386,10 +26290,11 @@ const insn_template i386_optab[] =
   { "vpackssdw", 3, 0x666b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24402,10 +26307,11 @@ const insn_template i386_optab[] =
   { "vpacksswb", 3, 0x6663, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24418,10 +26324,11 @@ const insn_template i386_optab[] =
   { "vpacksswb", 3, 0x6663, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24434,10 +26341,11 @@ const insn_template i386_optab[] =
   { "vpackusdw", 3, 0x662b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24450,10 +26358,11 @@ const insn_template i386_optab[] =
   { "vpackusdw", 3, 0x662b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24466,10 +26375,11 @@ const insn_template i386_optab[] =
   { "vpackuswb", 3, 0x6667, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24482,10 +26392,11 @@ const insn_template i386_optab[] =
   { "vpackuswb", 3, 0x6667, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24498,10 +26409,11 @@ const insn_template i386_optab[] =
   { "vpaddsb", 3, 0x66ec, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24514,10 +26426,11 @@ const insn_template i386_optab[] =
   { "vpaddsb", 3, 0x66ec, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24530,10 +26443,11 @@ const insn_template i386_optab[] =
   { "vpaddsw", 3, 0x66ed, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24546,10 +26460,11 @@ const insn_template i386_optab[] =
   { "vpaddsw", 3, 0x66ed, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24562,10 +26477,11 @@ const insn_template i386_optab[] =
   { "vpaddb", 3, 0x66fc, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24578,10 +26494,11 @@ const insn_template i386_optab[] =
   { "vpaddb", 3, 0x66fc, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24594,10 +26511,11 @@ const insn_template i386_optab[] =
   { "vpaddd", 3, 0x66fe, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24610,10 +26528,11 @@ const insn_template i386_optab[] =
   { "vpaddd", 3, 0x66fe, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24626,10 +26545,11 @@ const insn_template i386_optab[] =
   { "vpaddq", 3, 0x66d4, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24642,10 +26562,11 @@ const insn_template i386_optab[] =
   { "vpaddq", 3, 0x66d4, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24658,10 +26579,11 @@ const insn_template i386_optab[] =
   { "vpaddw", 3, 0x66fd, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24674,10 +26596,11 @@ const insn_template i386_optab[] =
   { "vpaddw", 3, 0x66fd, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24690,10 +26613,11 @@ const insn_template i386_optab[] =
   { "vpaddusb", 3, 0x66dc, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24706,10 +26630,11 @@ const insn_template i386_optab[] =
   { "vpaddusb", 3, 0x66dc, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24722,10 +26647,11 @@ const insn_template i386_optab[] =
   { "vpaddusw", 3, 0x66dd, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24738,10 +26664,11 @@ const insn_template i386_optab[] =
   { "vpaddusw", 3, 0x66dd, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24754,10 +26681,11 @@ const insn_template i386_optab[] =
   { "vpalignr", 4, 0x660f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -24773,10 +26701,11 @@ const insn_template i386_optab[] =
   { "vpalignr", 4, 0x660f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -24792,10 +26721,11 @@ const insn_template i386_optab[] =
   { "vpand", 3, 0x66db, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24808,10 +26738,11 @@ const insn_template i386_optab[] =
   { "vpand", 3, 0x66db, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24824,10 +26755,11 @@ const insn_template i386_optab[] =
   { "vpandn", 3, 0x66df, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24840,10 +26772,11 @@ const insn_template i386_optab[] =
   { "vpandn", 3, 0x66df, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24856,10 +26789,11 @@ const insn_template i386_optab[] =
   { "vpavgb", 3, 0x66e0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24872,10 +26806,11 @@ const insn_template i386_optab[] =
   { "vpavgb", 3, 0x66e0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24888,10 +26823,11 @@ const insn_template i386_optab[] =
   { "vpavgw", 3, 0x66e3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -24904,10 +26840,11 @@ const insn_template i386_optab[] =
   { "vpavgw", 3, 0x66e3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -24920,10 +26857,11 @@ const insn_template i386_optab[] =
   { "vpblendvb", 4, 0x664c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -24939,10 +26877,11 @@ const insn_template i386_optab[] =
   { "vpblendvb", 4, 0x664c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -24958,10 +26897,11 @@ const insn_template i386_optab[] =
   { "vpblendw", 4, 0x660e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -24977,10 +26917,11 @@ const insn_template i386_optab[] =
   { "vpblendw", 4, 0x660e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -24996,10 +26937,11 @@ const insn_template i386_optab[] =
   { "vpcmpeqb", 3, 0x6674, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25012,10 +26954,11 @@ const insn_template i386_optab[] =
   { "vpcmpeqb", 3, 0x6674, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -25028,10 +26971,11 @@ const insn_template i386_optab[] =
   { "vpcmpeqd", 3, 0x6676, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25044,10 +26988,11 @@ const insn_template i386_optab[] =
   { "vpcmpeqd", 3, 0x6676, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -25060,10 +27005,11 @@ const insn_template i386_optab[] =
   { "vpcmpeqq", 3, 0x6629, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25076,10 +27022,11 @@ const insn_template i386_optab[] =
   { "vpcmpeqq", 3, 0x6629, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -25092,10 +27039,11 @@ const insn_template i386_optab[] =
   { "vpcmpeqw", 3, 0x6675, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25108,10 +27056,11 @@ const insn_template i386_optab[] =
   { "vpcmpeqw", 3, 0x6675, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -25124,10 +27073,11 @@ const insn_template i386_optab[] =
   { "vpcmpestri", 3, 0x6661, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -25140,10 +27090,11 @@ const insn_template i386_optab[] =
   { "vpcmpestrm", 3, 0x6660, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -25156,10 +27107,11 @@ const insn_template i386_optab[] =
   { "vpcmpgtb", 3, 0x6664, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25172,10 +27124,11 @@ const insn_template i386_optab[] =
   { "vpcmpgtb", 3, 0x6664, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -25188,10 +27141,11 @@ const insn_template i386_optab[] =
   { "vpcmpgtd", 3, 0x6666, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25204,10 +27158,11 @@ const insn_template i386_optab[] =
   { "vpcmpgtd", 3, 0x6666, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -25220,10 +27175,11 @@ const insn_template i386_optab[] =
   { "vpcmpgtq", 3, 0x6637, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25236,10 +27192,11 @@ const insn_template i386_optab[] =
   { "vpcmpgtq", 3, 0x6637, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -25252,10 +27209,11 @@ const insn_template i386_optab[] =
   { "vpcmpgtw", 3, 0x6665, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25268,10 +27226,11 @@ const insn_template i386_optab[] =
   { "vpcmpgtw", 3, 0x6665, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -25284,10 +27243,11 @@ const insn_template i386_optab[] =
   { "vpcmpistri", 3, 0x6663, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -25300,10 +27260,11 @@ const insn_template i386_optab[] =
   { "vpcmpistrm", 3, 0x6662, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -25316,10 +27277,11 @@ const insn_template i386_optab[] =
   { "vperm2f128", 4, 0x6606, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -25335,10 +27297,11 @@ const insn_template i386_optab[] =
   { "vpermilpd", 3, 0x660d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25351,10 +27314,11 @@ const insn_template i386_optab[] =
   { "vpermilpd", 3, 0x660d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -25367,10 +27331,11 @@ const insn_template i386_optab[] =
   { "vpermilpd", 3, 0x6605, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -25383,10 +27348,11 @@ const insn_template i386_optab[] =
   { "vpermilpd", 3, 0x6605, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -25399,10 +27365,11 @@ const insn_template i386_optab[] =
   { "vpermilps", 3, 0x660c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25415,10 +27382,11 @@ const insn_template i386_optab[] =
   { "vpermilps", 3, 0x660c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -25431,10 +27399,11 @@ const insn_template i386_optab[] =
   { "vpermilps", 3, 0x6604, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -25447,10 +27416,11 @@ const insn_template i386_optab[] =
   { "vpermilps", 3, 0x6604, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -25463,10 +27433,11 @@ const insn_template i386_optab[] =
   { "vpextrb", 3, 0x6614, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -25479,10 +27450,11 @@ const insn_template i386_optab[] =
   { "vpextrd", 3, 0x6616, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -25495,10 +27467,11 @@ const insn_template i386_optab[] =
   { "vpextrq", 3, 0x6616, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -25511,10 +27484,11 @@ const insn_template i386_optab[] =
   { "vpextrw", 3, 0x66c5, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -25527,10 +27501,11 @@ const insn_template i386_optab[] =
   { "vpextrw", 3, 0x6615, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -25543,10 +27518,11 @@ const insn_template i386_optab[] =
   { "vphaddd", 3, 0x6602, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25559,10 +27535,11 @@ const insn_template i386_optab[] =
   { "vphaddd", 3, 0x6602, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -25575,10 +27552,11 @@ const insn_template i386_optab[] =
   { "vphaddsw", 3, 0x6603, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25591,10 +27569,11 @@ const insn_template i386_optab[] =
   { "vphaddsw", 3, 0x6603, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -25607,10 +27586,11 @@ const insn_template i386_optab[] =
   { "vphaddw", 3, 0x6601, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25623,10 +27603,11 @@ const insn_template i386_optab[] =
   { "vphaddw", 3, 0x6601, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -25639,10 +27620,11 @@ const insn_template i386_optab[] =
   { "vphminposuw", 2, 0x6641, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25652,10 +27634,11 @@ const insn_template i386_optab[] =
   { "vphsubd", 3, 0x6606, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25668,10 +27651,11 @@ const insn_template i386_optab[] =
   { "vphsubd", 3, 0x6606, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -25684,10 +27668,11 @@ const insn_template i386_optab[] =
   { "vphsubsw", 3, 0x6607, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25700,10 +27685,11 @@ const insn_template i386_optab[] =
   { "vphsubsw", 3, 0x6607, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -25716,10 +27702,11 @@ const insn_template i386_optab[] =
   { "vphsubw", 3, 0x6605, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25732,10 +27719,11 @@ const insn_template i386_optab[] =
   { "vphsubw", 3, 0x6605, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -25748,10 +27736,11 @@ const insn_template i386_optab[] =
   { "vpinsrb", 4, 0x6620, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -25767,10 +27756,11 @@ const insn_template i386_optab[] =
   { "vpinsrd", 4, 0x6622, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -25786,10 +27776,11 @@ const insn_template i386_optab[] =
   { "vpinsrq", 4, 0x6622, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -25805,10 +27796,11 @@ const insn_template i386_optab[] =
   { "vpinsrw", 4, 0x66c4, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -25824,10 +27816,11 @@ const insn_template i386_optab[] =
   { "vpmaddubsw", 3, 0x6604, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25840,10 +27833,11 @@ const insn_template i386_optab[] =
   { "vpmaddubsw", 3, 0x6604, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -25856,10 +27850,11 @@ const insn_template i386_optab[] =
   { "vpmaddwd", 3, 0x66f5, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25872,10 +27867,11 @@ const insn_template i386_optab[] =
   { "vpmaddwd", 3, 0x66f5, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -25888,10 +27884,11 @@ const insn_template i386_optab[] =
   { "vpmaxsb", 3, 0x663c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25904,10 +27901,11 @@ const insn_template i386_optab[] =
   { "vpmaxsb", 3, 0x663c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -25920,10 +27918,11 @@ const insn_template i386_optab[] =
   { "vpmaxsd", 3, 0x663d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25936,10 +27935,11 @@ const insn_template i386_optab[] =
   { "vpmaxsd", 3, 0x663d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -25952,10 +27952,11 @@ const insn_template i386_optab[] =
   { "vpmaxsw", 3, 0x66ee, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -25968,10 +27969,11 @@ const insn_template i386_optab[] =
   { "vpmaxsw", 3, 0x66ee, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -25984,10 +27986,11 @@ const insn_template i386_optab[] =
   { "vpmaxub", 3, 0x66de, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26000,10 +28003,11 @@ const insn_template i386_optab[] =
   { "vpmaxub", 3, 0x66de, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -26016,10 +28020,11 @@ const insn_template i386_optab[] =
   { "vpmaxud", 3, 0x663f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26032,10 +28037,11 @@ const insn_template i386_optab[] =
   { "vpmaxud", 3, 0x663f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -26048,10 +28054,11 @@ const insn_template i386_optab[] =
   { "vpmaxuw", 3, 0x663e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26064,10 +28071,11 @@ const insn_template i386_optab[] =
   { "vpmaxuw", 3, 0x663e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -26080,10 +28088,11 @@ const insn_template i386_optab[] =
   { "vpminsb", 3, 0x6638, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26096,10 +28105,11 @@ const insn_template i386_optab[] =
   { "vpminsb", 3, 0x6638, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -26112,10 +28122,11 @@ const insn_template i386_optab[] =
   { "vpminsd", 3, 0x6639, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26128,10 +28139,11 @@ const insn_template i386_optab[] =
   { "vpminsd", 3, 0x6639, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -26144,10 +28156,11 @@ const insn_template i386_optab[] =
   { "vpminsw", 3, 0x66ea, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26160,10 +28173,11 @@ const insn_template i386_optab[] =
   { "vpminsw", 3, 0x66ea, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -26176,10 +28190,11 @@ const insn_template i386_optab[] =
   { "vpminub", 3, 0x66da, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26192,10 +28207,11 @@ const insn_template i386_optab[] =
   { "vpminub", 3, 0x66da, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -26208,10 +28224,11 @@ const insn_template i386_optab[] =
   { "vpminud", 3, 0x663b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26224,10 +28241,11 @@ const insn_template i386_optab[] =
   { "vpminud", 3, 0x663b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -26240,10 +28258,11 @@ const insn_template i386_optab[] =
   { "vpminuw", 3, 0x663a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26256,10 +28275,11 @@ const insn_template i386_optab[] =
   { "vpminuw", 3, 0x663a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -26272,10 +28292,11 @@ const insn_template i386_optab[] =
   { "vpmovmskb", 2, 0x66d7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -26285,10 +28306,11 @@ const insn_template i386_optab[] =
   { "vpmovmskb", 2, 0x66d7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -26298,10 +28320,11 @@ const insn_template i386_optab[] =
   { "vpmovsxbd", 2, 0x6621, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -26311,10 +28334,11 @@ const insn_template i386_optab[] =
   { "vpmovsxbd", 2, 0x6621, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -26324,10 +28348,11 @@ const insn_template i386_optab[] =
   { "vpmovsxbq", 2, 0x6622, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -26337,10 +28362,11 @@ const insn_template i386_optab[] =
   { "vpmovsxbq", 2, 0x6622, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -26350,10 +28376,11 @@ const insn_template i386_optab[] =
   { "vpmovsxbw", 2, 0x6620, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -26363,10 +28390,11 @@ const insn_template i386_optab[] =
   { "vpmovsxbw", 2, 0x6620, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26376,10 +28404,11 @@ const insn_template i386_optab[] =
   { "vpmovsxdq", 2, 0x6625, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -26389,10 +28418,11 @@ const insn_template i386_optab[] =
   { "vpmovsxdq", 2, 0x6625, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26402,10 +28432,11 @@ const insn_template i386_optab[] =
   { "vpmovsxwd", 2, 0x6623, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -26415,10 +28446,11 @@ const insn_template i386_optab[] =
   { "vpmovsxwd", 2, 0x6623, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26428,10 +28460,11 @@ const insn_template i386_optab[] =
   { "vpmovsxwq", 2, 0x6624, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -26441,10 +28474,11 @@ const insn_template i386_optab[] =
   { "vpmovsxwq", 2, 0x6624, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -26454,10 +28488,11 @@ const insn_template i386_optab[] =
   { "vpmovzxbd", 2, 0x6631, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -26467,10 +28502,11 @@ const insn_template i386_optab[] =
   { "vpmovzxbd", 2, 0x6631, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -26480,10 +28516,11 @@ const insn_template i386_optab[] =
   { "vpmovzxbq", 2, 0x6632, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -26493,10 +28530,11 @@ const insn_template i386_optab[] =
   { "vpmovzxbq", 2, 0x6632, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -26506,10 +28544,11 @@ const insn_template i386_optab[] =
   { "vpmovzxbw", 2, 0x6630, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -26519,10 +28558,11 @@ const insn_template i386_optab[] =
   { "vpmovzxbw", 2, 0x6630, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26532,10 +28572,11 @@ const insn_template i386_optab[] =
   { "vpmovzxdq", 2, 0x6635, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -26545,10 +28586,11 @@ const insn_template i386_optab[] =
   { "vpmovzxdq", 2, 0x6635, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26558,10 +28600,11 @@ const insn_template i386_optab[] =
   { "vpmovzxwd", 2, 0x6633, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -26571,10 +28614,11 @@ const insn_template i386_optab[] =
   { "vpmovzxwd", 2, 0x6633, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26584,10 +28628,11 @@ const insn_template i386_optab[] =
   { "vpmovzxwq", 2, 0x6634, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -26597,10 +28642,11 @@ const insn_template i386_optab[] =
   { "vpmovzxwq", 2, 0x6634, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -26610,10 +28656,11 @@ const insn_template i386_optab[] =
   { "vpmuldq", 3, 0x6628, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26626,10 +28673,11 @@ const insn_template i386_optab[] =
   { "vpmuldq", 3, 0x6628, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -26642,10 +28690,11 @@ const insn_template i386_optab[] =
   { "vpmulhrsw", 3, 0x660b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26658,10 +28707,11 @@ const insn_template i386_optab[] =
   { "vpmulhrsw", 3, 0x660b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -26674,10 +28724,11 @@ const insn_template i386_optab[] =
   { "vpmulhuw", 3, 0x66e4, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26690,10 +28741,11 @@ const insn_template i386_optab[] =
   { "vpmulhuw", 3, 0x66e4, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -26706,10 +28758,11 @@ const insn_template i386_optab[] =
   { "vpmulhw", 3, 0x66e5, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26722,10 +28775,11 @@ const insn_template i386_optab[] =
   { "vpmulhw", 3, 0x66e5, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -26738,10 +28792,11 @@ const insn_template i386_optab[] =
   { "vpmulld", 3, 0x6640, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26754,10 +28809,11 @@ const insn_template i386_optab[] =
   { "vpmulld", 3, 0x6640, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -26770,10 +28826,11 @@ const insn_template i386_optab[] =
   { "vpmullw", 3, 0x66d5, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26786,10 +28843,11 @@ const insn_template i386_optab[] =
   { "vpmullw", 3, 0x66d5, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -26802,10 +28860,11 @@ const insn_template i386_optab[] =
   { "vpmuludq", 3, 0x66f4, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26818,10 +28877,11 @@ const insn_template i386_optab[] =
   { "vpmuludq", 3, 0x66f4, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -26834,10 +28894,11 @@ const insn_template i386_optab[] =
   { "vpor", 3, 0x66eb, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26850,10 +28911,11 @@ const insn_template i386_optab[] =
   { "vpor", 3, 0x66eb, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -26866,10 +28928,11 @@ const insn_template i386_optab[] =
   { "vpsadbw", 3, 0x66f6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26882,10 +28945,11 @@ const insn_template i386_optab[] =
   { "vpsadbw", 3, 0x66f6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -26898,10 +28962,11 @@ const insn_template i386_optab[] =
   { "vpshufb", 3, 0x6600, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -26914,10 +28979,11 @@ const insn_template i386_optab[] =
   { "vpshufb", 3, 0x6600, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -26930,10 +28996,11 @@ const insn_template i386_optab[] =
   { "vpshufd", 3, 0x6670, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -26946,10 +29013,11 @@ const insn_template i386_optab[] =
   { "vpshufd", 3, 0x6670, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -26962,10 +29030,11 @@ const insn_template i386_optab[] =
   { "vpshufhw", 3, 0xf370, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -26978,10 +29047,11 @@ const insn_template i386_optab[] =
   { "vpshufhw", 3, 0xf370, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -26994,10 +29064,11 @@ const insn_template i386_optab[] =
   { "vpshuflw", 3, 0xf270, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27010,10 +29081,11 @@ const insn_template i386_optab[] =
   { "vpshuflw", 3, 0xf270, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27026,10 +29098,11 @@ const insn_template i386_optab[] =
   { "vpsignb", 3, 0x6608, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27042,10 +29115,11 @@ const insn_template i386_optab[] =
   { "vpsignb", 3, 0x6608, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -27058,10 +29132,11 @@ const insn_template i386_optab[] =
   { "vpsignd", 3, 0x660a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27074,10 +29149,11 @@ const insn_template i386_optab[] =
   { "vpsignd", 3, 0x660a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -27090,10 +29166,11 @@ const insn_template i386_optab[] =
   { "vpsignw", 3, 0x6609, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27106,10 +29183,11 @@ const insn_template i386_optab[] =
   { "vpsignw", 3, 0x6609, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -27122,10 +29200,11 @@ const insn_template i386_optab[] =
   { "vpslld", 3, 0x6672, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27138,10 +29217,11 @@ const insn_template i386_optab[] =
   { "vpslld", 3, 0x66f2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27154,10 +29234,11 @@ const insn_template i386_optab[] =
   { "vpslld", 3, 0x6672, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27170,10 +29251,11 @@ const insn_template i386_optab[] =
   { "vpslld", 3, 0x66f2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27186,10 +29268,11 @@ const insn_template i386_optab[] =
   { "vpslldq", 3, 0x6673, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27202,10 +29285,11 @@ const insn_template i386_optab[] =
   { "vpslldq", 3, 0x6673, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27218,10 +29302,11 @@ const insn_template i386_optab[] =
   { "vpsllq", 3, 0x6673, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27234,10 +29319,11 @@ const insn_template i386_optab[] =
   { "vpsllq", 3, 0x66f3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27250,10 +29336,11 @@ const insn_template i386_optab[] =
   { "vpsllq", 3, 0x6673, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27266,10 +29353,11 @@ const insn_template i386_optab[] =
   { "vpsllq", 3, 0x66f3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27282,10 +29370,11 @@ const insn_template i386_optab[] =
   { "vpsllw", 3, 0x6671, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27298,10 +29387,11 @@ const insn_template i386_optab[] =
   { "vpsllw", 3, 0x66f1, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27314,10 +29404,11 @@ const insn_template i386_optab[] =
   { "vpsllw", 3, 0x6671, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27330,10 +29421,11 @@ const insn_template i386_optab[] =
   { "vpsllw", 3, 0x66f1, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27346,10 +29438,11 @@ const insn_template i386_optab[] =
   { "vpsrad", 3, 0x6672, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27362,10 +29455,11 @@ const insn_template i386_optab[] =
   { "vpsrad", 3, 0x66e2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27378,10 +29472,11 @@ const insn_template i386_optab[] =
   { "vpsrad", 3, 0x6672, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27394,10 +29489,11 @@ const insn_template i386_optab[] =
   { "vpsrad", 3, 0x66e2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27410,10 +29506,11 @@ const insn_template i386_optab[] =
   { "vpsraw", 3, 0x6671, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27426,10 +29523,11 @@ const insn_template i386_optab[] =
   { "vpsraw", 3, 0x66e1, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27442,10 +29540,11 @@ const insn_template i386_optab[] =
   { "vpsraw", 3, 0x6671, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27458,10 +29557,11 @@ const insn_template i386_optab[] =
   { "vpsraw", 3, 0x66e1, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27474,10 +29574,11 @@ const insn_template i386_optab[] =
   { "vpsrld", 3, 0x6672, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27490,10 +29591,11 @@ const insn_template i386_optab[] =
   { "vpsrld", 3, 0x66d2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27506,10 +29608,11 @@ const insn_template i386_optab[] =
   { "vpsrld", 3, 0x6672, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27522,10 +29625,11 @@ const insn_template i386_optab[] =
   { "vpsrld", 3, 0x66d2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27538,10 +29642,11 @@ const insn_template i386_optab[] =
   { "vpsrldq", 3, 0x6673, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27554,10 +29659,11 @@ const insn_template i386_optab[] =
   { "vpsrldq", 3, 0x6673, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27570,10 +29676,11 @@ const insn_template i386_optab[] =
   { "vpsrlq", 3, 0x6673, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27586,10 +29693,11 @@ const insn_template i386_optab[] =
   { "vpsrlq", 3, 0x66d3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27602,10 +29710,11 @@ const insn_template i386_optab[] =
   { "vpsrlq", 3, 0x6673, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27618,10 +29727,11 @@ const insn_template i386_optab[] =
   { "vpsrlq", 3, 0x66d3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27634,10 +29744,11 @@ const insn_template i386_optab[] =
   { "vpsrlw", 3, 0x6671, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27650,10 +29761,11 @@ const insn_template i386_optab[] =
   { "vpsrlw", 3, 0x66d1, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27666,10 +29778,11 @@ const insn_template i386_optab[] =
   { "vpsrlw", 3, 0x6671, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -27682,10 +29795,11 @@ const insn_template i386_optab[] =
   { "vpsrlw", 3, 0x66d1, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27698,10 +29812,11 @@ const insn_template i386_optab[] =
   { "vpsubb", 3, 0x66f8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27714,10 +29829,11 @@ const insn_template i386_optab[] =
   { "vpsubb", 3, 0x66f8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -27730,10 +29846,11 @@ const insn_template i386_optab[] =
   { "vpsubd", 3, 0x66fa, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27746,10 +29863,11 @@ const insn_template i386_optab[] =
   { "vpsubd", 3, 0x66fa, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -27762,10 +29880,11 @@ const insn_template i386_optab[] =
   { "vpsubq", 3, 0x66fb, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27778,10 +29897,11 @@ const insn_template i386_optab[] =
   { "vpsubq", 3, 0x66fb, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -27794,10 +29914,11 @@ const insn_template i386_optab[] =
   { "vpsubsb", 3, 0x66e8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27810,10 +29931,11 @@ const insn_template i386_optab[] =
   { "vpsubsb", 3, 0x66e8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -27826,10 +29948,11 @@ const insn_template i386_optab[] =
   { "vpsubsw", 3, 0x66e9, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27842,10 +29965,11 @@ const insn_template i386_optab[] =
   { "vpsubsw", 3, 0x66e9, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -27858,10 +29982,11 @@ const insn_template i386_optab[] =
   { "vpsubusb", 3, 0x66d8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27874,10 +29999,11 @@ const insn_template i386_optab[] =
   { "vpsubusb", 3, 0x66d8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -27890,10 +30016,11 @@ const insn_template i386_optab[] =
   { "vpsubusw", 3, 0x66d9, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27906,10 +30033,11 @@ const insn_template i386_optab[] =
   { "vpsubusw", 3, 0x66d9, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -27922,10 +30050,11 @@ const insn_template i386_optab[] =
   { "vpsubw", 3, 0x66f9, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27938,10 +30067,11 @@ const insn_template i386_optab[] =
   { "vpsubw", 3, 0x66f9, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -27954,10 +30084,11 @@ const insn_template i386_optab[] =
   { "vptest", 2, 0x6617, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27967,10 +30098,11 @@ const insn_template i386_optab[] =
   { "vptest", 2, 0x6617, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -27980,10 +30112,11 @@ const insn_template i386_optab[] =
   { "vpunpckhbw", 3, 0x6668, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -27996,10 +30129,11 @@ const insn_template i386_optab[] =
   { "vpunpckhbw", 3, 0x6668, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28012,10 +30146,11 @@ const insn_template i386_optab[] =
   { "vpunpckhdq", 3, 0x666a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28028,10 +30163,11 @@ const insn_template i386_optab[] =
   { "vpunpckhdq", 3, 0x666a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28044,10 +30180,11 @@ const insn_template i386_optab[] =
   { "vpunpckhqdq", 3, 0x666d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28060,10 +30197,11 @@ const insn_template i386_optab[] =
   { "vpunpckhqdq", 3, 0x666d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28076,10 +30214,11 @@ const insn_template i386_optab[] =
   { "vpunpckhwd", 3, 0x6669, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28092,10 +30231,11 @@ const insn_template i386_optab[] =
   { "vpunpckhwd", 3, 0x6669, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28108,10 +30248,11 @@ const insn_template i386_optab[] =
   { "vpunpcklbw", 3, 0x6660, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28124,10 +30265,11 @@ const insn_template i386_optab[] =
   { "vpunpcklbw", 3, 0x6660, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28140,10 +30282,11 @@ const insn_template i386_optab[] =
   { "vpunpckldq", 3, 0x6662, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28156,10 +30299,11 @@ const insn_template i386_optab[] =
   { "vpunpckldq", 3, 0x6662, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28172,10 +30316,11 @@ const insn_template i386_optab[] =
   { "vpunpcklqdq", 3, 0x666c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28188,10 +30333,11 @@ const insn_template i386_optab[] =
   { "vpunpcklqdq", 3, 0x666c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28204,10 +30350,11 @@ const insn_template i386_optab[] =
   { "vpunpcklwd", 3, 0x6661, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28220,10 +30367,11 @@ const insn_template i386_optab[] =
   { "vpunpcklwd", 3, 0x6661, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28236,10 +30384,11 @@ const insn_template i386_optab[] =
   { "vpxor", 3, 0x66ef, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28252,10 +30401,11 @@ const insn_template i386_optab[] =
   { "vpxor", 3, 0x66ef, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28268,10 +30418,11 @@ const insn_template i386_optab[] =
   { "vrcpps", 2, 0x53, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28281,10 +30432,11 @@ const insn_template i386_optab[] =
   { "vrcpps", 2, 0x53, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28294,10 +30446,11 @@ const insn_template i386_optab[] =
   { "vrcpss", 3, 0xf353, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -28310,10 +30463,11 @@ const insn_template i386_optab[] =
   { "vroundpd", 3, 0x6609, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -28326,10 +30480,11 @@ const insn_template i386_optab[] =
   { "vroundpd", 3, 0x6609, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -28342,10 +30497,11 @@ const insn_template i386_optab[] =
   { "vroundps", 3, 0x6608, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -28358,10 +30514,11 @@ const insn_template i386_optab[] =
   { "vroundps", 3, 0x6608, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -28374,10 +30531,11 @@ const insn_template i386_optab[] =
   { "vroundsd", 4, 0x660b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      3, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -28393,10 +30551,11 @@ const insn_template i386_optab[] =
   { "vroundss", 4, 0x660a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -28412,10 +30571,11 @@ const insn_template i386_optab[] =
   { "vrsqrtps", 2, 0x52, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28425,10 +30585,11 @@ const insn_template i386_optab[] =
   { "vrsqrtps", 2, 0x52, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28438,10 +30599,11 @@ const insn_template i386_optab[] =
   { "vrsqrtss", 3, 0xf352, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -28454,10 +30616,11 @@ const insn_template i386_optab[] =
   { "vshufpd", 4, 0x66c6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -28473,10 +30636,11 @@ const insn_template i386_optab[] =
   { "vshufpd", 4, 0x66c6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -28492,10 +30656,11 @@ const insn_template i386_optab[] =
   { "vshufps", 4, 0xc6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -28511,10 +30676,11 @@ const insn_template i386_optab[] =
   { "vshufps", 4, 0xc6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -28530,10 +30696,11 @@ const insn_template i386_optab[] =
   { "vsqrtpd", 2, 0x6651, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28543,10 +30710,11 @@ const insn_template i386_optab[] =
   { "vsqrtpd", 2, 0x6651, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28556,10 +30724,11 @@ const insn_template i386_optab[] =
   { "vsqrtps", 2, 0x51, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28569,10 +30738,11 @@ const insn_template i386_optab[] =
   { "vsqrtps", 2, 0x51, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28582,10 +30752,11 @@ const insn_template i386_optab[] =
   { "vsqrtsd", 3, 0xf251, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -28598,10 +30769,11 @@ const insn_template i386_optab[] =
   { "vsqrtss", 3, 0xf351, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -28614,20 +30786,22 @@ const insn_template i386_optab[] =
   { "vstmxcsr", 1, 0xae, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "vsubpd", 3, 0x665c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28640,10 +30814,11 @@ const insn_template i386_optab[] =
   { "vsubpd", 3, 0x665c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28656,10 +30831,11 @@ const insn_template i386_optab[] =
   { "vsubps", 3, 0x5c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28672,10 +30848,11 @@ const insn_template i386_optab[] =
   { "vsubps", 3, 0x5c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28688,10 +30865,11 @@ const insn_template i386_optab[] =
   { "vsubsd", 3, 0xf25c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -28704,10 +30882,11 @@ const insn_template i386_optab[] =
   { "vsubss", 3, 0xf35c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -28720,10 +30899,11 @@ const insn_template i386_optab[] =
   { "vtestpd", 2, 0x660f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28733,10 +30913,11 @@ const insn_template i386_optab[] =
   { "vtestpd", 2, 0x660f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28746,10 +30927,11 @@ const insn_template i386_optab[] =
   { "vtestps", 2, 0x660e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28759,10 +30941,11 @@ const insn_template i386_optab[] =
   { "vtestps", 2, 0x660e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28772,10 +30955,11 @@ const insn_template i386_optab[] =
   { "vucomisd", 2, 0x662e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -28785,10 +30969,11 @@ const insn_template i386_optab[] =
   { "vucomiss", 2, 0x2e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -28798,10 +30983,11 @@ const insn_template i386_optab[] =
   { "vunpckhpd", 3, 0x6615, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28814,10 +31000,11 @@ const insn_template i386_optab[] =
   { "vunpckhpd", 3, 0x6615, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28830,10 +31017,11 @@ const insn_template i386_optab[] =
   { "vunpckhps", 3, 0x15, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28846,10 +31034,11 @@ const insn_template i386_optab[] =
   { "vunpckhps", 3, 0x15, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28862,10 +31051,11 @@ const insn_template i386_optab[] =
   { "vunpcklpd", 3, 0x6614, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28878,10 +31068,11 @@ const insn_template i386_optab[] =
   { "vunpcklpd", 3, 0x6614, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28894,10 +31085,11 @@ const insn_template i386_optab[] =
   { "vunpcklps", 3, 0x14, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28910,10 +31102,11 @@ const insn_template i386_optab[] =
   { "vunpcklps", 3, 0x14, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28926,10 +31119,11 @@ const insn_template i386_optab[] =
   { "vxorpd", 3, 0x6657, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28942,10 +31136,11 @@ const insn_template i386_optab[] =
   { "vxorpd", 3, 0x6657, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28958,10 +31153,11 @@ const insn_template i386_optab[] =
   { "vxorps", 3, 0x57, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -28974,10 +31170,11 @@ const insn_template i386_optab[] =
   { "vxorps", 3, 0x57, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -28990,30 +31187,33 @@ const insn_template i386_optab[] =
   { "vzeroall", 0, 0x77, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "vzeroupper", 0, 0x77, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "vbroadcasti128", 2, 0x665A, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -29023,10 +31223,11 @@ const insn_template i386_optab[] =
   { "vpblendd", 4, 0x6602, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29042,10 +31243,11 @@ const insn_template i386_optab[] =
   { "vpblendd", 4, 0x6602, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29061,10 +31263,11 @@ const insn_template i386_optab[] =
   { "vpbroadcastb", 2, 0x6678, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -29074,10 +31277,11 @@ const insn_template i386_optab[] =
   { "vpbroadcastb", 2, 0x6678, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -29087,10 +31291,11 @@ const insn_template i386_optab[] =
   { "vpbroadcastd", 2, 0x6658, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -29100,10 +31305,11 @@ const insn_template i386_optab[] =
   { "vpbroadcastd", 2, 0x6658, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -29113,10 +31319,11 @@ const insn_template i386_optab[] =
   { "vpbroadcastq", 2, 0x6659, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -29126,10 +31333,11 @@ const insn_template i386_optab[] =
   { "vpbroadcastq", 2, 0x6659, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -29139,10 +31347,11 @@ const insn_template i386_optab[] =
   { "vpbroadcastw", 2, 0x6679, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -29152,10 +31361,11 @@ const insn_template i386_optab[] =
   { "vpbroadcastw", 2, 0x6679, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -29165,10 +31375,11 @@ const insn_template i386_optab[] =
   { "vperm2i128", 4, 0x6646, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29184,10 +31395,11 @@ const insn_template i386_optab[] =
   { "vpermd", 3, 0x6636, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -29200,10 +31412,11 @@ const insn_template i386_optab[] =
   { "vpermpd", 3, 0x6601, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29216,10 +31429,11 @@ const insn_template i386_optab[] =
   { "vpermps", 3, 0x6616, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -29232,10 +31446,11 @@ const insn_template i386_optab[] =
   { "vpermq", 3, 0x6600, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29248,10 +31463,11 @@ const insn_template i386_optab[] =
   { "vextracti128", 3, 0x6639, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29264,10 +31480,11 @@ const insn_template i386_optab[] =
   { "vinserti128", 4, 0x6638, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29283,10 +31500,11 @@ const insn_template i386_optab[] =
   { "vpmaskmovd", 3, 0x668e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29299,10 +31517,11 @@ const insn_template i386_optab[] =
   { "vpmaskmovd", 3, 0x668e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29315,10 +31534,11 @@ const insn_template i386_optab[] =
   { "vpmaskmovd", 3, 0x668c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -29331,10 +31551,11 @@ const insn_template i386_optab[] =
   { "vpmaskmovd", 3, 0x668c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -29347,10 +31568,11 @@ const insn_template i386_optab[] =
   { "vpmaskmovq", 3, 0x668e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29363,10 +31585,11 @@ const insn_template i386_optab[] =
   { "vpmaskmovq", 3, 0x668e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29379,10 +31602,11 @@ const insn_template i386_optab[] =
   { "vpmaskmovq", 3, 0x668c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -29395,10 +31619,11 @@ const insn_template i386_optab[] =
   { "vpmaskmovq", 3, 0x668c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -29411,10 +31636,11 @@ const insn_template i386_optab[] =
   { "vpsllvd", 3, 0x6647, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -29427,10 +31653,11 @@ const insn_template i386_optab[] =
   { "vpsllvd", 3, 0x6647, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -29443,10 +31670,11 @@ const insn_template i386_optab[] =
   { "vpsllvq", 3, 0x6647, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -29459,10 +31687,11 @@ const insn_template i386_optab[] =
   { "vpsllvq", 3, 0x6647, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -29475,10 +31704,11 @@ const insn_template i386_optab[] =
   { "vpsravd", 3, 0x6646, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -29491,10 +31721,11 @@ const insn_template i386_optab[] =
   { "vpsravd", 3, 0x6646, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -29507,10 +31738,11 @@ const insn_template i386_optab[] =
   { "vpsrlvd", 3, 0x6645, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -29523,10 +31755,11 @@ const insn_template i386_optab[] =
   { "vpsrlvd", 3, 0x6645, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -29539,10 +31772,11 @@ const insn_template i386_optab[] =
   { "vpsrlvq", 3, 0x6645, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -29555,10 +31789,11 @@ const insn_template i386_optab[] =
   { "vpsrlvq", 3, 0x6645, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -29571,10 +31806,11 @@ const insn_template i386_optab[] =
   { "vgatherdpd", 3, 0x6692, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29587,10 +31823,11 @@ const insn_template i386_optab[] =
   { "vgatherdpd", 3, 0x6692, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29603,10 +31840,11 @@ const insn_template i386_optab[] =
   { "vgatherdps", 3, 0x6692, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29619,10 +31857,11 @@ const insn_template i386_optab[] =
   { "vgatherdps", 3, 0x6692, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29635,10 +31874,11 @@ const insn_template i386_optab[] =
   { "vgatherqpd", 3, 0x6693, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29651,10 +31891,11 @@ const insn_template i386_optab[] =
   { "vgatherqpd", 3, 0x6693, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29667,10 +31908,11 @@ const insn_template i386_optab[] =
   { "vgatherqps", 3, 0x6693, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29683,10 +31925,11 @@ const insn_template i386_optab[] =
   { "vgatherqps", 3, 0x6693, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29699,10 +31942,11 @@ const insn_template i386_optab[] =
   { "vpgatherdd", 3, 0x6690, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29715,10 +31959,11 @@ const insn_template i386_optab[] =
   { "vpgatherdd", 3, 0x6690, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29731,10 +31976,11 @@ const insn_template i386_optab[] =
   { "vpgatherdq", 3, 0x6690, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29747,10 +31993,11 @@ const insn_template i386_optab[] =
   { "vpgatherdq", 3, 0x6690, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29763,10 +32010,11 @@ const insn_template i386_optab[] =
   { "vpgatherqd", 3, 0x6691, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29779,10 +32027,11 @@ const insn_template i386_optab[] =
   { "vpgatherqd", 3, 0x6691, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29795,10 +32044,11 @@ const insn_template i386_optab[] =
   { "vpgatherqq", 3, 0x6691, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29811,10 +32061,11 @@ const insn_template i386_optab[] =
   { "vpgatherqq", 3, 0x6691, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29827,10 +32078,11 @@ const insn_template i386_optab[] =
   { "vaesdec", 3, 0x66de, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -29843,10 +32095,11 @@ const insn_template i386_optab[] =
   { "vaesdeclast", 3, 0x66df, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -29859,10 +32112,11 @@ const insn_template i386_optab[] =
   { "vaesenc", 3, 0x66dc, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -29875,10 +32129,11 @@ const insn_template i386_optab[] =
   { "vaesenclast", 3, 0x66dd, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -29891,10 +32146,11 @@ const insn_template i386_optab[] =
   { "vaesimc", 2, 0x66db, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -29904,10 +32160,11 @@ const insn_template i386_optab[] =
   { "vaeskeygenassist", 3, 0x66df, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29920,10 +32177,11 @@ const insn_template i386_optab[] =
   { "vpclmulqdq", 4, 0x6644, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -29939,10 +32197,11 @@ const insn_template i386_optab[] =
   { "vpclmullqlqdq", 3, 0x6644, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -29955,10 +32214,11 @@ const insn_template i386_optab[] =
   { "vpclmulhqlqdq", 3, 0x6644, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -29971,10 +32231,11 @@ const insn_template i386_optab[] =
   { "vpclmullqhqdq", 3, 0x6644, 0x10, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -29987,10 +32248,11 @@ const insn_template i386_optab[] =
   { "vpclmulhqhqdq", 3, 0x6644, 0x11, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30003,60 +32265,66 @@ const insn_template i386_optab[] =
   { "rdfsbase", 1, 0xf30fae, 0x0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rdgsbase", 1, 0xf30fae, 0x1, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rdrand", 1, 0xfc7, 0x6, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "wrfsbase", 1, 0xf30fae, 0x2, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "wrgsbase", 1, 0xf30fae, 0x3, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "vcvtph2ps", 2, 0x6613, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -30066,10 +32334,11 @@ const insn_template i386_optab[] =
   { "vcvtph2ps", 2, 0x6613, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30079,10 +32348,11 @@ const insn_template i386_optab[] =
   { "vcvtps2ph", 3, 0x661d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -30095,10 +32365,11 @@ const insn_template i386_optab[] =
   { "vcvtps2ph", 3, 0x661d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -30111,10 +32382,11 @@ const insn_template i386_optab[] =
   { "vfmadd132pd", 3, 0x6698, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30127,10 +32399,11 @@ const insn_template i386_optab[] =
   { "vfmadd132pd", 3, 0x6698, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30143,10 +32416,11 @@ const insn_template i386_optab[] =
   { "vfmadd132ps", 3, 0x6698, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30159,10 +32433,11 @@ const insn_template i386_optab[] =
   { "vfmadd132ps", 3, 0x6698, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30175,10 +32450,11 @@ const insn_template i386_optab[] =
   { "vfmadd213pd", 3, 0x66a8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30191,10 +32467,11 @@ const insn_template i386_optab[] =
   { "vfmadd213pd", 3, 0x66a8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30207,10 +32484,11 @@ const insn_template i386_optab[] =
   { "vfmadd213ps", 3, 0x66a8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30223,10 +32501,11 @@ const insn_template i386_optab[] =
   { "vfmadd213ps", 3, 0x66a8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30239,10 +32518,11 @@ const insn_template i386_optab[] =
   { "vfmadd231pd", 3, 0x66b8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30255,10 +32535,11 @@ const insn_template i386_optab[] =
   { "vfmadd231pd", 3, 0x66b8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30271,10 +32552,11 @@ const insn_template i386_optab[] =
   { "vfmadd231ps", 3, 0x66b8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30287,10 +32569,11 @@ const insn_template i386_optab[] =
   { "vfmadd231ps", 3, 0x66b8, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30303,10 +32586,11 @@ const insn_template i386_optab[] =
   { "vfmadd132sd", 3, 0x6699, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -30319,10 +32603,11 @@ const insn_template i386_optab[] =
   { "vfmadd132ss", 3, 0x6699, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -30335,10 +32620,11 @@ const insn_template i386_optab[] =
   { "vfmadd213sd", 3, 0x66a9, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -30351,10 +32637,11 @@ const insn_template i386_optab[] =
   { "vfmadd213ss", 3, 0x66a9, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -30367,10 +32654,11 @@ const insn_template i386_optab[] =
   { "vfmadd231sd", 3, 0x66b9, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -30383,10 +32671,11 @@ const insn_template i386_optab[] =
   { "vfmadd231ss", 3, 0x66b9, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -30399,10 +32688,11 @@ const insn_template i386_optab[] =
   { "vfmaddsub132pd", 3, 0x6696, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30415,10 +32705,11 @@ const insn_template i386_optab[] =
   { "vfmaddsub132pd", 3, 0x6696, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30431,10 +32722,11 @@ const insn_template i386_optab[] =
   { "vfmaddsub132ps", 3, 0x6696, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30447,10 +32739,11 @@ const insn_template i386_optab[] =
   { "vfmaddsub132ps", 3, 0x6696, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30463,10 +32756,11 @@ const insn_template i386_optab[] =
   { "vfmaddsub213pd", 3, 0x66a6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30479,10 +32773,11 @@ const insn_template i386_optab[] =
   { "vfmaddsub213pd", 3, 0x66a6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30495,10 +32790,11 @@ const insn_template i386_optab[] =
   { "vfmaddsub213ps", 3, 0x66a6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30511,10 +32807,11 @@ const insn_template i386_optab[] =
   { "vfmaddsub213ps", 3, 0x66a6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30527,10 +32824,11 @@ const insn_template i386_optab[] =
   { "vfmaddsub231pd", 3, 0x66b6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30543,10 +32841,11 @@ const insn_template i386_optab[] =
   { "vfmaddsub231pd", 3, 0x66b6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30559,10 +32858,11 @@ const insn_template i386_optab[] =
   { "vfmaddsub231ps", 3, 0x66b6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30575,10 +32875,11 @@ const insn_template i386_optab[] =
   { "vfmaddsub231ps", 3, 0x66b6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30591,10 +32892,11 @@ const insn_template i386_optab[] =
   { "vfmsubadd132pd", 3, 0x6697, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30607,10 +32909,11 @@ const insn_template i386_optab[] =
   { "vfmsubadd132pd", 3, 0x6697, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30623,10 +32926,11 @@ const insn_template i386_optab[] =
   { "vfmsubadd132ps", 3, 0x6697, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30639,10 +32943,11 @@ const insn_template i386_optab[] =
   { "vfmsubadd132ps", 3, 0x6697, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30655,10 +32960,11 @@ const insn_template i386_optab[] =
   { "vfmsubadd213pd", 3, 0x66a7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30671,10 +32977,11 @@ const insn_template i386_optab[] =
   { "vfmsubadd213pd", 3, 0x66a7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30687,10 +32994,11 @@ const insn_template i386_optab[] =
   { "vfmsubadd213ps", 3, 0x66a7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30703,10 +33011,11 @@ const insn_template i386_optab[] =
   { "vfmsubadd213ps", 3, 0x66a7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30719,10 +33028,11 @@ const insn_template i386_optab[] =
   { "vfmsubadd231pd", 3, 0x66b7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30735,10 +33045,11 @@ const insn_template i386_optab[] =
   { "vfmsubadd231pd", 3, 0x66b7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30751,10 +33062,11 @@ const insn_template i386_optab[] =
   { "vfmsubadd231ps", 3, 0x66b7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30767,10 +33079,11 @@ const insn_template i386_optab[] =
   { "vfmsubadd231ps", 3, 0x66b7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30783,10 +33096,11 @@ const insn_template i386_optab[] =
   { "vfmsub132pd", 3, 0x669a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30799,10 +33113,11 @@ const insn_template i386_optab[] =
   { "vfmsub132pd", 3, 0x669a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30815,10 +33130,11 @@ const insn_template i386_optab[] =
   { "vfmsub132ps", 3, 0x669a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30831,10 +33147,11 @@ const insn_template i386_optab[] =
   { "vfmsub132ps", 3, 0x669a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30847,10 +33164,11 @@ const insn_template i386_optab[] =
   { "vfmsub213pd", 3, 0x66aa, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30863,10 +33181,11 @@ const insn_template i386_optab[] =
   { "vfmsub213pd", 3, 0x66aa, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30879,10 +33198,11 @@ const insn_template i386_optab[] =
   { "vfmsub213ps", 3, 0x66aa, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30895,10 +33215,11 @@ const insn_template i386_optab[] =
   { "vfmsub213ps", 3, 0x66aa, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30911,10 +33232,11 @@ const insn_template i386_optab[] =
   { "vfmsub231pd", 3, 0x66ba, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30927,10 +33249,11 @@ const insn_template i386_optab[] =
   { "vfmsub231pd", 3, 0x66ba, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30943,10 +33266,11 @@ const insn_template i386_optab[] =
   { "vfmsub231ps", 3, 0x66ba, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -30959,10 +33283,11 @@ const insn_template i386_optab[] =
   { "vfmsub231ps", 3, 0x66ba, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -30975,10 +33300,11 @@ const insn_template i386_optab[] =
   { "vfmsub132sd", 3, 0x669b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -30991,10 +33317,11 @@ const insn_template i386_optab[] =
   { "vfmsub132ss", 3, 0x669b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31007,10 +33334,11 @@ const insn_template i386_optab[] =
   { "vfmsub213sd", 3, 0x66ab, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31023,10 +33351,11 @@ const insn_template i386_optab[] =
   { "vfmsub213ss", 3, 0x66ab, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31039,10 +33368,11 @@ const insn_template i386_optab[] =
   { "vfmsub231sd", 3, 0x66bb, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31055,10 +33385,11 @@ const insn_template i386_optab[] =
   { "vfmsub231ss", 3, 0x66bb, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31071,10 +33402,11 @@ const insn_template i386_optab[] =
   { "vfnmadd132pd", 3, 0x669c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -31087,10 +33419,11 @@ const insn_template i386_optab[] =
   { "vfnmadd132pd", 3, 0x669c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -31103,10 +33436,11 @@ const insn_template i386_optab[] =
   { "vfnmadd132ps", 3, 0x669c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -31119,10 +33453,11 @@ const insn_template i386_optab[] =
   { "vfnmadd132ps", 3, 0x669c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -31135,10 +33470,11 @@ const insn_template i386_optab[] =
   { "vfnmadd213pd", 3, 0x66ac, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -31151,10 +33487,11 @@ const insn_template i386_optab[] =
   { "vfnmadd213pd", 3, 0x66ac, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -31167,10 +33504,11 @@ const insn_template i386_optab[] =
   { "vfnmadd213ps", 3, 0x66ac, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -31183,10 +33521,11 @@ const insn_template i386_optab[] =
   { "vfnmadd213ps", 3, 0x66ac, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -31199,10 +33538,11 @@ const insn_template i386_optab[] =
   { "vfnmadd231pd", 3, 0x66bc, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -31215,10 +33555,11 @@ const insn_template i386_optab[] =
   { "vfnmadd231pd", 3, 0x66bc, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -31231,10 +33572,11 @@ const insn_template i386_optab[] =
   { "vfnmadd231ps", 3, 0x66bc, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -31247,10 +33589,11 @@ const insn_template i386_optab[] =
   { "vfnmadd231ps", 3, 0x66bc, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -31263,10 +33606,11 @@ const insn_template i386_optab[] =
   { "vfnmadd132sd", 3, 0x669d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31279,10 +33623,11 @@ const insn_template i386_optab[] =
   { "vfnmadd132ss", 3, 0x669d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31295,10 +33640,11 @@ const insn_template i386_optab[] =
   { "vfnmadd213sd", 3, 0x66ad, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31311,10 +33657,11 @@ const insn_template i386_optab[] =
   { "vfnmadd213ss", 3, 0x66ad, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31327,10 +33674,11 @@ const insn_template i386_optab[] =
   { "vfnmadd231sd", 3, 0x66bd, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31343,10 +33691,11 @@ const insn_template i386_optab[] =
   { "vfnmadd231ss", 3, 0x66bd, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31359,10 +33708,11 @@ const insn_template i386_optab[] =
   { "vfnmsub132pd", 3, 0x669e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -31375,10 +33725,11 @@ const insn_template i386_optab[] =
   { "vfnmsub132pd", 3, 0x669e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -31391,10 +33742,11 @@ const insn_template i386_optab[] =
   { "vfnmsub132ps", 3, 0x669e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -31407,10 +33759,11 @@ const insn_template i386_optab[] =
   { "vfnmsub132ps", 3, 0x669e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -31423,10 +33776,11 @@ const insn_template i386_optab[] =
   { "vfnmsub213pd", 3, 0x66ae, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -31439,10 +33793,11 @@ const insn_template i386_optab[] =
   { "vfnmsub213pd", 3, 0x66ae, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -31455,10 +33810,11 @@ const insn_template i386_optab[] =
   { "vfnmsub213ps", 3, 0x66ae, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -31471,10 +33827,11 @@ const insn_template i386_optab[] =
   { "vfnmsub213ps", 3, 0x66ae, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -31487,10 +33844,11 @@ const insn_template i386_optab[] =
   { "vfnmsub231pd", 3, 0x66be, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -31503,10 +33861,11 @@ const insn_template i386_optab[] =
   { "vfnmsub231pd", 3, 0x66be, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -31519,10 +33878,11 @@ const insn_template i386_optab[] =
   { "vfnmsub231ps", 3, 0x66be, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -31535,10 +33895,11 @@ const insn_template i386_optab[] =
   { "vfnmsub231ps", 3, 0x66be, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -31551,10 +33912,11 @@ const insn_template i386_optab[] =
   { "vfnmsub132sd", 3, 0x669f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31567,10 +33929,11 @@ const insn_template i386_optab[] =
   { "vfnmsub132ss", 3, 0x669f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31583,10 +33946,11 @@ const insn_template i386_optab[] =
   { "vfnmsub213sd", 3, 0x66af, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31599,10 +33963,11 @@ const insn_template i386_optab[] =
   { "vfnmsub213ss", 3, 0x66af, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31615,10 +33980,11 @@ const insn_template i386_optab[] =
   { "vfnmsub231sd", 3, 0x66bf, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31631,10 +33997,11 @@ const insn_template i386_optab[] =
   { "vfnmsub231ss", 3, 0x66bf, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31644,13 +34011,80 @@ const insn_template i386_optab[] =
       { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
+  { "xacquire", 0, 0xf2, None, 1,
+    { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
+    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  0, 0, 0, 0, 0, 0 } } } },
+  { "xrelease", 0, 0xf3, None, 1,
+    { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
+    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  0, 0, 0, 0, 0, 0 } } } },
+  { "xabort", 1, 0xc6f8, None, 2,
+    { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
+    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
+	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  0, 0, 0, 0, 0, 0 } } } },
+  { "xbegin", 1, 0xc7f8, None, 2,
+    { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
+    { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  0, 0, 0, 0, 0, 0 } } } },
+  { "xend", 0, 0xf01d5, None, 3,
+    { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
+    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  0, 0, 0, 0, 0, 0 } } } },
+  { "xtest", 0, 0xf01d6, None, 3,
+    { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
+    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  0, 0, 0, 0, 0, 0 } } } },
   { "bzhi", 3, 0xf5, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -31663,10 +34097,11 @@ const insn_template i386_optab[] =
   { "mulx", 3, 0xf2f6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31679,10 +34114,11 @@ const insn_template i386_optab[] =
   { "pdep", 3, 0xf2f5, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31695,10 +34131,11 @@ const insn_template i386_optab[] =
   { "pext", 3, 0xf3f5, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31711,10 +34148,11 @@ const insn_template i386_optab[] =
   { "rorx", 3, 0xf2f0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -31727,10 +34165,11 @@ const insn_template i386_optab[] =
   { "sarx", 3, 0xf3f7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -31743,10 +34182,11 @@ const insn_template i386_optab[] =
   { "shlx", 3, 0x66f7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -31759,10 +34199,11 @@ const insn_template i386_optab[] =
   { "shrx", 3, 0xf2f7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -31775,10 +34216,11 @@ const insn_template i386_optab[] =
   { "vfmaddpd", 4, 0x6669, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -31794,10 +34236,11 @@ const insn_template i386_optab[] =
   { "vfmaddpd", 4, 0x6669, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -31813,10 +34256,11 @@ const insn_template i386_optab[] =
   { "vfmaddpd", 4, 0x6669, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -31832,10 +34276,11 @@ const insn_template i386_optab[] =
   { "vfmaddpd", 4, 0x6669, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -31851,10 +34296,11 @@ const insn_template i386_optab[] =
   { "vfmaddps", 4, 0x6668, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -31870,10 +34316,11 @@ const insn_template i386_optab[] =
   { "vfmaddps", 4, 0x6668, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -31889,10 +34336,11 @@ const insn_template i386_optab[] =
   { "vfmaddps", 4, 0x6668, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -31908,10 +34356,11 @@ const insn_template i386_optab[] =
   { "vfmaddps", 4, 0x6668, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -31927,10 +34376,11 @@ const insn_template i386_optab[] =
   { "vfmaddsd", 4, 0x666b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31946,10 +34396,11 @@ const insn_template i386_optab[] =
   { "vfmaddsd", 4, 0x666b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -31965,10 +34416,11 @@ const insn_template i386_optab[] =
   { "vfmaddss", 4, 0x666a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -31984,10 +34436,11 @@ const insn_template i386_optab[] =
   { "vfmaddss", 4, 0x666a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32003,10 +34456,11 @@ const insn_template i386_optab[] =
   { "vfmaddsubpd", 4, 0x665d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -32022,10 +34476,11 @@ const insn_template i386_optab[] =
   { "vfmaddsubpd", 4, 0x665d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32041,10 +34496,11 @@ const insn_template i386_optab[] =
   { "vfmaddsubpd", 4, 0x665d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -32060,10 +34516,11 @@ const insn_template i386_optab[] =
   { "vfmaddsubpd", 4, 0x665d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32079,10 +34536,11 @@ const insn_template i386_optab[] =
   { "vfmaddsubps", 4, 0x665c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -32098,10 +34556,11 @@ const insn_template i386_optab[] =
   { "vfmaddsubps", 4, 0x665c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32117,10 +34576,11 @@ const insn_template i386_optab[] =
   { "vfmaddsubps", 4, 0x665c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -32136,10 +34596,11 @@ const insn_template i386_optab[] =
   { "vfmaddsubps", 4, 0x665c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32155,10 +34616,11 @@ const insn_template i386_optab[] =
   { "vfmsubaddpd", 4, 0x665f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -32174,10 +34636,11 @@ const insn_template i386_optab[] =
   { "vfmsubaddpd", 4, 0x665f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32193,10 +34656,11 @@ const insn_template i386_optab[] =
   { "vfmsubaddpd", 4, 0x665f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -32212,10 +34676,11 @@ const insn_template i386_optab[] =
   { "vfmsubaddpd", 4, 0x665f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32231,10 +34696,11 @@ const insn_template i386_optab[] =
   { "vfmsubaddps", 4, 0x665e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -32250,10 +34716,11 @@ const insn_template i386_optab[] =
   { "vfmsubaddps", 4, 0x665e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32269,10 +34736,11 @@ const insn_template i386_optab[] =
   { "vfmsubaddps", 4, 0x665e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -32288,10 +34756,11 @@ const insn_template i386_optab[] =
   { "vfmsubaddps", 4, 0x665e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32307,10 +34776,11 @@ const insn_template i386_optab[] =
   { "vfmsubpd", 4, 0x666d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -32326,10 +34796,11 @@ const insn_template i386_optab[] =
   { "vfmsubpd", 4, 0x666d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32345,10 +34816,11 @@ const insn_template i386_optab[] =
   { "vfmsubpd", 4, 0x666d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -32364,10 +34836,11 @@ const insn_template i386_optab[] =
   { "vfmsubpd", 4, 0x666d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32383,10 +34856,11 @@ const insn_template i386_optab[] =
   { "vfmsubps", 4, 0x666c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -32402,10 +34876,11 @@ const insn_template i386_optab[] =
   { "vfmsubps", 4, 0x666c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32421,10 +34896,11 @@ const insn_template i386_optab[] =
   { "vfmsubps", 4, 0x666c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -32440,10 +34916,11 @@ const insn_template i386_optab[] =
   { "vfmsubps", 4, 0x666c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32459,10 +34936,11 @@ const insn_template i386_optab[] =
   { "vfmsubsd", 4, 0x666f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -32478,10 +34956,11 @@ const insn_template i386_optab[] =
   { "vfmsubsd", 4, 0x666f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32497,10 +34976,11 @@ const insn_template i386_optab[] =
   { "vfmsubss", 4, 0x666e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -32516,10 +34996,11 @@ const insn_template i386_optab[] =
   { "vfmsubss", 4, 0x666e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32535,10 +35016,11 @@ const insn_template i386_optab[] =
   { "vfnmaddpd", 4, 0x6679, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -32554,10 +35036,11 @@ const insn_template i386_optab[] =
   { "vfnmaddpd", 4, 0x6679, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32573,10 +35056,11 @@ const insn_template i386_optab[] =
   { "vfnmaddpd", 4, 0x6679, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -32592,10 +35076,11 @@ const insn_template i386_optab[] =
   { "vfnmaddpd", 4, 0x6679, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32611,10 +35096,11 @@ const insn_template i386_optab[] =
   { "vfnmaddps", 4, 0x6678, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -32630,10 +35116,11 @@ const insn_template i386_optab[] =
   { "vfnmaddps", 4, 0x6678, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32649,10 +35136,11 @@ const insn_template i386_optab[] =
   { "vfnmaddps", 4, 0x6678, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -32668,10 +35156,11 @@ const insn_template i386_optab[] =
   { "vfnmaddps", 4, 0x6678, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32687,10 +35176,11 @@ const insn_template i386_optab[] =
   { "vfnmaddsd", 4, 0x667b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -32706,10 +35196,11 @@ const insn_template i386_optab[] =
   { "vfnmaddsd", 4, 0x667b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32725,10 +35216,11 @@ const insn_template i386_optab[] =
   { "vfnmaddss", 4, 0x667a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -32744,10 +35236,11 @@ const insn_template i386_optab[] =
   { "vfnmaddss", 4, 0x667a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32763,10 +35256,11 @@ const insn_template i386_optab[] =
   { "vfnmsubpd", 4, 0x667d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -32782,10 +35276,11 @@ const insn_template i386_optab[] =
   { "vfnmsubpd", 4, 0x667d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32801,10 +35296,11 @@ const insn_template i386_optab[] =
   { "vfnmsubpd", 4, 0x667d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -32820,10 +35316,11 @@ const insn_template i386_optab[] =
   { "vfnmsubpd", 4, 0x667d, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32839,10 +35336,11 @@ const insn_template i386_optab[] =
   { "vfnmsubps", 4, 0x667c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -32858,10 +35356,11 @@ const insn_template i386_optab[] =
   { "vfnmsubps", 4, 0x667c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32877,10 +35376,11 @@ const insn_template i386_optab[] =
   { "vfnmsubps", 4, 0x667c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -32896,10 +35396,11 @@ const insn_template i386_optab[] =
   { "vfnmsubps", 4, 0x667c, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32915,10 +35416,11 @@ const insn_template i386_optab[] =
   { "vfnmsubsd", 4, 0x667f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -32934,10 +35436,11 @@ const insn_template i386_optab[] =
   { "vfnmsubsd", 4, 0x667f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32953,10 +35456,11 @@ const insn_template i386_optab[] =
   { "vfnmsubss", 4, 0x667e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -32972,10 +35476,11 @@ const insn_template i386_optab[] =
   { "vfnmsubss", 4, 0x667e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -32991,10 +35496,11 @@ const insn_template i386_optab[] =
   { "vfrczpd", 2, 0x81, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33004,10 +35510,11 @@ const insn_template i386_optab[] =
   { "vfrczpd", 2, 0x81, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -33017,10 +35524,11 @@ const insn_template i386_optab[] =
   { "vfrczps", 2, 0x80, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33030,10 +35538,11 @@ const insn_template i386_optab[] =
   { "vfrczps", 2, 0x80, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 
-      1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -33043,10 +35552,11 @@ const insn_template i386_optab[] =
   { "vfrczsd", 2, 0x83, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -33056,10 +35566,11 @@ const insn_template i386_optab[] =
   { "vfrczss", 2, 0x82, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -33069,10 +35580,11 @@ const insn_template i386_optab[] =
   { "vpcmov", 4, 0xa2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -33088,10 +35600,11 @@ const insn_template i386_optab[] =
   { "vpcmov", 4, 0xa2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -33107,10 +35620,11 @@ const insn_template i386_optab[] =
   { "vpcmov", 4, 0xa2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33126,10 +35640,11 @@ const insn_template i386_optab[] =
   { "vpcmov", 4, 0xa2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 1, 1, 0, 0, 0 } },
@@ -33145,10 +35660,11 @@ const insn_template i386_optab[] =
   { "vpcomb", 4, 0xcc, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -33164,10 +35680,11 @@ const insn_template i386_optab[] =
   { "vpcomd", 4, 0xce, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -33183,10 +35700,11 @@ const insn_template i386_optab[] =
   { "vpcomq", 4, 0xcf, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -33202,10 +35720,11 @@ const insn_template i386_optab[] =
   { "vpcomub", 4, 0xec, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -33221,10 +35740,11 @@ const insn_template i386_optab[] =
   { "vpcomud", 4, 0xee, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -33240,10 +35760,11 @@ const insn_template i386_optab[] =
   { "vpcomuq", 4, 0xef, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -33259,10 +35780,11 @@ const insn_template i386_optab[] =
   { "vpcomuw", 4, 0xed, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -33278,10 +35800,11 @@ const insn_template i386_optab[] =
   { "vpcomw", 4, 0xcd, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -33297,10 +35820,11 @@ const insn_template i386_optab[] =
   { "vpermil2pd", 5, 0x6649, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 1, 0 } },
@@ -33319,10 +35843,11 @@ const insn_template i386_optab[] =
   { "vpermil2pd", 5, 0x6649, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 1, 0 } },
@@ -33341,10 +35866,11 @@ const insn_template i386_optab[] =
   { "vpermil2pd", 5, 0x6649, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 1, 0 } },
@@ -33363,10 +35889,11 @@ const insn_template i386_optab[] =
   { "vpermil2pd", 5, 0x6649, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 1, 0 } },
@@ -33385,10 +35912,11 @@ const insn_template i386_optab[] =
   { "vpermil2ps", 5, 0x6648, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 1, 0 } },
@@ -33407,10 +35935,11 @@ const insn_template i386_optab[] =
   { "vpermil2ps", 5, 0x6648, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 1, 0 } },
@@ -33429,10 +35958,11 @@ const insn_template i386_optab[] =
   { "vpermil2ps", 5, 0x6648, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 1, 0 } },
@@ -33451,10 +35981,11 @@ const insn_template i386_optab[] =
   { "vpermil2ps", 5, 0x6648, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 
-      2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      2, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 1, 0 } },
@@ -33473,10 +36004,11 @@ const insn_template i386_optab[] =
   { "vpcomltb", 3, 0xcc, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33489,10 +36021,11 @@ const insn_template i386_optab[] =
   { "vpcomltd", 3, 0xce, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33505,10 +36038,11 @@ const insn_template i386_optab[] =
   { "vpcomltq", 3, 0xcf, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33521,10 +36055,11 @@ const insn_template i386_optab[] =
   { "vpcomltub", 3, 0xec, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33537,10 +36072,11 @@ const insn_template i386_optab[] =
   { "vpcomltud", 3, 0xee, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33553,10 +36089,11 @@ const insn_template i386_optab[] =
   { "vpcomltuq", 3, 0xef, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33569,10 +36106,11 @@ const insn_template i386_optab[] =
   { "vpcomltuw", 3, 0xed, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33585,10 +36123,11 @@ const insn_template i386_optab[] =
   { "vpcomltw", 3, 0xcd, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33601,10 +36140,11 @@ const insn_template i386_optab[] =
   { "vpcomleb", 3, 0xcc, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33617,10 +36157,11 @@ const insn_template i386_optab[] =
   { "vpcomled", 3, 0xce, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33633,10 +36174,11 @@ const insn_template i386_optab[] =
   { "vpcomleq", 3, 0xcf, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33649,10 +36191,11 @@ const insn_template i386_optab[] =
   { "vpcomleub", 3, 0xec, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33665,10 +36208,11 @@ const insn_template i386_optab[] =
   { "vpcomleud", 3, 0xee, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33681,10 +36225,11 @@ const insn_template i386_optab[] =
   { "vpcomleuq", 3, 0xef, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33697,10 +36242,11 @@ const insn_template i386_optab[] =
   { "vpcomleuw", 3, 0xed, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33713,10 +36259,11 @@ const insn_template i386_optab[] =
   { "vpcomlew", 3, 0xcd, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33729,10 +36276,11 @@ const insn_template i386_optab[] =
   { "vpcomgtb", 3, 0xcc, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33745,10 +36293,11 @@ const insn_template i386_optab[] =
   { "vpcomgtd", 3, 0xce, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33761,10 +36310,11 @@ const insn_template i386_optab[] =
   { "vpcomgtq", 3, 0xcf, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33777,10 +36327,11 @@ const insn_template i386_optab[] =
   { "vpcomgtub", 3, 0xec, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33793,10 +36344,11 @@ const insn_template i386_optab[] =
   { "vpcomgtud", 3, 0xee, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33809,10 +36361,11 @@ const insn_template i386_optab[] =
   { "vpcomgtuq", 3, 0xef, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33825,10 +36378,11 @@ const insn_template i386_optab[] =
   { "vpcomgtuw", 3, 0xed, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33841,10 +36395,11 @@ const insn_template i386_optab[] =
   { "vpcomgtw", 3, 0xcd, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33857,10 +36412,11 @@ const insn_template i386_optab[] =
   { "vpcomgeb", 3, 0xcc, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33873,10 +36429,11 @@ const insn_template i386_optab[] =
   { "vpcomged", 3, 0xce, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33889,10 +36446,11 @@ const insn_template i386_optab[] =
   { "vpcomgeq", 3, 0xcf, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33905,10 +36463,11 @@ const insn_template i386_optab[] =
   { "vpcomgeub", 3, 0xec, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33921,10 +36480,11 @@ const insn_template i386_optab[] =
   { "vpcomgeud", 3, 0xee, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33937,10 +36497,11 @@ const insn_template i386_optab[] =
   { "vpcomgeuq", 3, 0xef, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33953,10 +36514,11 @@ const insn_template i386_optab[] =
   { "vpcomgeuw", 3, 0xed, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33969,10 +36531,11 @@ const insn_template i386_optab[] =
   { "vpcomgew", 3, 0xcd, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -33985,10 +36548,11 @@ const insn_template i386_optab[] =
   { "vpcomeqb", 3, 0xcc, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34001,10 +36565,11 @@ const insn_template i386_optab[] =
   { "vpcomeqd", 3, 0xce, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34017,10 +36582,11 @@ const insn_template i386_optab[] =
   { "vpcomeqq", 3, 0xcf, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34033,10 +36599,11 @@ const insn_template i386_optab[] =
   { "vpcomequb", 3, 0xec, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34049,10 +36616,11 @@ const insn_template i386_optab[] =
   { "vpcomequd", 3, 0xee, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34065,10 +36633,11 @@ const insn_template i386_optab[] =
   { "vpcomequq", 3, 0xef, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34081,10 +36650,11 @@ const insn_template i386_optab[] =
   { "vpcomequw", 3, 0xed, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34097,10 +36667,11 @@ const insn_template i386_optab[] =
   { "vpcomeqw", 3, 0xcd, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34113,10 +36684,11 @@ const insn_template i386_optab[] =
   { "vpcomneqb", 3, 0xcc, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34129,10 +36701,11 @@ const insn_template i386_optab[] =
   { "vpcomneqd", 3, 0xce, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34145,10 +36718,11 @@ const insn_template i386_optab[] =
   { "vpcomneqq", 3, 0xcf, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34161,10 +36735,11 @@ const insn_template i386_optab[] =
   { "vpcomnequb", 3, 0xec, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34177,10 +36752,11 @@ const insn_template i386_optab[] =
   { "vpcomnequd", 3, 0xee, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34193,10 +36769,11 @@ const insn_template i386_optab[] =
   { "vpcomnequq", 3, 0xef, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34209,10 +36786,11 @@ const insn_template i386_optab[] =
   { "vpcomnequw", 3, 0xed, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34225,10 +36803,11 @@ const insn_template i386_optab[] =
   { "vpcomneqw", 3, 0xcd, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34241,10 +36820,11 @@ const insn_template i386_optab[] =
   { "vpcomfalseb", 3, 0xcc, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34257,10 +36837,11 @@ const insn_template i386_optab[] =
   { "vpcomfalsed", 3, 0xce, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34273,10 +36854,11 @@ const insn_template i386_optab[] =
   { "vpcomfalseq", 3, 0xcf, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34289,10 +36871,11 @@ const insn_template i386_optab[] =
   { "vpcomfalseub", 3, 0xec, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34305,10 +36888,11 @@ const insn_template i386_optab[] =
   { "vpcomfalseud", 3, 0xee, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34321,10 +36905,11 @@ const insn_template i386_optab[] =
   { "vpcomfalseuq", 3, 0xef, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34337,10 +36922,11 @@ const insn_template i386_optab[] =
   { "vpcomfalseuw", 3, 0xed, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34353,10 +36939,11 @@ const insn_template i386_optab[] =
   { "vpcomfalsew", 3, 0xcd, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34369,10 +36956,11 @@ const insn_template i386_optab[] =
   { "vpcomtrueb", 3, 0xcc, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34385,10 +36973,11 @@ const insn_template i386_optab[] =
   { "vpcomtrued", 3, 0xce, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34401,10 +36990,11 @@ const insn_template i386_optab[] =
   { "vpcomtrueq", 3, 0xcf, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34417,10 +37007,11 @@ const insn_template i386_optab[] =
   { "vpcomtrueub", 3, 0xec, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34433,10 +37024,11 @@ const insn_template i386_optab[] =
   { "vpcomtrueud", 3, 0xee, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34449,10 +37041,11 @@ const insn_template i386_optab[] =
   { "vpcomtrueuq", 3, 0xef, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34465,10 +37058,11 @@ const insn_template i386_optab[] =
   { "vpcomtrueuw", 3, 0xed, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34481,10 +37075,11 @@ const insn_template i386_optab[] =
   { "vpcomtruew", 3, 0xcd, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 
-      1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34497,10 +37092,11 @@ const insn_template i386_optab[] =
   { "vphaddbd", 2, 0xc2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34510,10 +37106,11 @@ const insn_template i386_optab[] =
   { "vphaddbq", 2, 0xc3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34523,10 +37120,11 @@ const insn_template i386_optab[] =
   { "vphaddbw", 2, 0xc1, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34536,10 +37134,11 @@ const insn_template i386_optab[] =
   { "vphadddq", 2, 0xcb, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34549,10 +37148,11 @@ const insn_template i386_optab[] =
   { "vphaddubd", 2, 0xd2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34562,10 +37162,11 @@ const insn_template i386_optab[] =
   { "vphaddubq", 2, 0xd3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34575,10 +37176,11 @@ const insn_template i386_optab[] =
   { "vphaddubw", 2, 0xd1, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34588,10 +37190,11 @@ const insn_template i386_optab[] =
   { "vphaddudq", 2, 0xdb, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34601,10 +37204,11 @@ const insn_template i386_optab[] =
   { "vphadduwd", 2, 0xd6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34614,10 +37218,11 @@ const insn_template i386_optab[] =
   { "vphadduwq", 2, 0xd7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34627,10 +37232,11 @@ const insn_template i386_optab[] =
   { "vphaddwd", 2, 0xc6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34640,10 +37246,11 @@ const insn_template i386_optab[] =
   { "vphaddwq", 2, 0xc7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34653,10 +37260,11 @@ const insn_template i386_optab[] =
   { "vphsubbw", 2, 0xe1, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34666,10 +37274,11 @@ const insn_template i386_optab[] =
   { "vphsubdq", 2, 0xe3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34679,10 +37288,11 @@ const insn_template i386_optab[] =
   { "vphsubwd", 2, 0xe2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34692,10 +37302,11 @@ const insn_template i386_optab[] =
   { "vpmacsdd", 4, 0x9e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -34711,10 +37322,11 @@ const insn_template i386_optab[] =
   { "vpmacsdqh", 4, 0x9f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -34730,10 +37342,11 @@ const insn_template i386_optab[] =
   { "vpmacsdql", 4, 0x97, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -34749,10 +37362,11 @@ const insn_template i386_optab[] =
   { "vpmacssdd", 4, 0x8e, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -34768,10 +37382,11 @@ const insn_template i386_optab[] =
   { "vpmacssdqh", 4, 0x8f, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -34787,10 +37402,11 @@ const insn_template i386_optab[] =
   { "vpmacssdql", 4, 0x87, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -34806,10 +37422,11 @@ const insn_template i386_optab[] =
   { "vpmacsswd", 4, 0x86, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -34825,10 +37442,11 @@ const insn_template i386_optab[] =
   { "vpmacssww", 4, 0x85, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -34844,10 +37462,11 @@ const insn_template i386_optab[] =
   { "vpmacswd", 4, 0x96, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -34863,10 +37482,11 @@ const insn_template i386_optab[] =
   { "vpmacsww", 4, 0x95, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -34882,10 +37502,11 @@ const insn_template i386_optab[] =
   { "vpmadcsswd", 4, 0xa6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -34901,10 +37522,11 @@ const insn_template i386_optab[] =
   { "vpmadcswd", 4, 0xb6, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -34920,10 +37542,11 @@ const insn_template i386_optab[] =
   { "vpperm", 4, 0xa3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 1, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -34939,10 +37562,11 @@ const insn_template i386_optab[] =
   { "vpperm", 4, 0xa3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      2, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34958,10 +37582,11 @@ const insn_template i386_optab[] =
   { "vprotb", 3, 0x90, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -34974,10 +37599,11 @@ const insn_template i386_optab[] =
   { "vprotb", 3, 0x90, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -34990,10 +37616,11 @@ const insn_template i386_optab[] =
   { "vprotb", 3, 0xc0, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -35006,10 +37633,11 @@ const insn_template i386_optab[] =
   { "vprotd", 3, 0x92, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -35022,10 +37650,11 @@ const insn_template i386_optab[] =
   { "vprotd", 3, 0x92, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -35038,10 +37667,11 @@ const insn_template i386_optab[] =
   { "vprotd", 3, 0xc2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -35054,10 +37684,11 @@ const insn_template i386_optab[] =
   { "vprotq", 3, 0x93, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -35070,10 +37701,11 @@ const insn_template i386_optab[] =
   { "vprotq", 3, 0x93, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -35086,10 +37718,11 @@ const insn_template i386_optab[] =
   { "vprotq", 3, 0xc3, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -35102,10 +37735,11 @@ const insn_template i386_optab[] =
   { "vprotw", 3, 0x91, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -35118,10 +37752,11 @@ const insn_template i386_optab[] =
   { "vprotw", 3, 0x91, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -35134,10 +37769,11 @@ const insn_template i386_optab[] =
   { "vprotw", 3, 0xc1, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -35150,10 +37786,11 @@ const insn_template i386_optab[] =
   { "vpshab", 3, 0x98, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -35166,10 +37803,11 @@ const insn_template i386_optab[] =
   { "vpshab", 3, 0x98, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -35182,10 +37820,11 @@ const insn_template i386_optab[] =
   { "vpshad", 3, 0x9a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -35198,10 +37837,11 @@ const insn_template i386_optab[] =
   { "vpshad", 3, 0x9a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -35214,10 +37854,11 @@ const insn_template i386_optab[] =
   { "vpshaq", 3, 0x9b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -35230,10 +37871,11 @@ const insn_template i386_optab[] =
   { "vpshaq", 3, 0x9b, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -35246,10 +37888,11 @@ const insn_template i386_optab[] =
   { "vpshaw", 3, 0x99, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -35262,10 +37905,11 @@ const insn_template i386_optab[] =
   { "vpshaw", 3, 0x99, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -35278,10 +37922,11 @@ const insn_template i386_optab[] =
   { "vpshlb", 3, 0x94, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -35294,10 +37939,11 @@ const insn_template i386_optab[] =
   { "vpshlb", 3, 0x94, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -35310,10 +37956,11 @@ const insn_template i386_optab[] =
   { "vpshld", 3, 0x96, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -35326,10 +37973,11 @@ const insn_template i386_optab[] =
   { "vpshld", 3, 0x96, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -35342,10 +37990,11 @@ const insn_template i386_optab[] =
   { "vpshlq", 3, 0x97, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -35358,10 +38007,11 @@ const insn_template i386_optab[] =
   { "vpshlq", 3, 0x97, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -35374,10 +38024,11 @@ const insn_template i386_optab[] =
   { "vpshlw", 3, 0x95, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -35390,10 +38041,11 @@ const insn_template i386_optab[] =
   { "vpshlw", 3, 0x95, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 0, 1, 0, 0, 0 } },
@@ -35406,50 +38058,55 @@ const insn_template i386_optab[] =
   { "llwpcb", 1, 0x12, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "llwpcb", 1, 0x12, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "slwpcb", 1, 0x12, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
-      1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "slwpcb", 1, 0x12, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
-      2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "lwpval", 3, 0x12, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 
-      1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 3, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -35462,10 +38119,11 @@ const insn_template i386_optab[] =
   { "lwpval", 3, 0x12, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 3, 
-      2, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 3, 2, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -35478,10 +38136,11 @@ const insn_template i386_optab[] =
   { "lwpins", 3, 0x12, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 
-      1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      1, 3, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -35494,10 +38153,11 @@ const insn_template i386_optab[] =
   { "lwpins", 3, 0x12, 0x0, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 3, 
-      2, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      1, 3, 2, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -35510,10 +38170,11 @@ const insn_template i386_optab[] =
   { "andn", 3, 0xf2, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35526,10 +38187,11 @@ const insn_template i386_optab[] =
   { "bextr", 3, 0xf7, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 
-      0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -35542,10 +38204,11 @@ const insn_template i386_optab[] =
   { "bextr", 3, 0x10, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 
-      0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -35558,10 +38221,11 @@ const insn_template i386_optab[] =
   { "blsi", 2, 0xf3, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 
-      0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35571,10 +38235,11 @@ const insn_template i386_optab[] =
   { "blsmsk", 2, 0xf3, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 
-      0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35584,10 +38249,11 @@ const insn_template i386_optab[] =
   { "blsr", 2, 0xf3, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 
-      0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35597,10 +38263,11 @@ const insn_template i386_optab[] =
   { "tzcnt", 2, 0xf30fbc, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35610,10 +38277,11 @@ const insn_template i386_optab[] =
   { "blcfill", 2, 0x01, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35623,10 +38291,11 @@ const insn_template i386_optab[] =
   { "blci", 2, 0x02, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35636,10 +38305,11 @@ const insn_template i386_optab[] =
   { "blcic", 2, 0x01, 0x5, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35649,10 +38319,11 @@ const insn_template i386_optab[] =
   { "blcmsk", 2, 0x02, 0x1, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35662,10 +38333,11 @@ const insn_template i386_optab[] =
   { "blcs", 2, 0x01, 0x3, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35675,10 +38347,11 @@ const insn_template i386_optab[] =
   { "blsfill", 2, 0x01, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35688,10 +38361,11 @@ const insn_template i386_optab[] =
   { "blsic", 2, 0x01, 0x6, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35701,10 +38375,11 @@ const insn_template i386_optab[] =
   { "t1mskc", 2, 0x01, 0x7, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35714,10 +38389,11 @@ const insn_template i386_optab[] =
   { "tzmsk", 2, 0x01, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
-      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 
-      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      3, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35727,40 +38403,44 @@ const insn_template i386_optab[] =
   { "prefetch", 1, 0xf0d, 0x0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "prefetchw", 1, 0xf0d, 0x1, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 1, 0, 0, 0 } } } },
   { "femms", 0, 0xf0e, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "pavgusb", 2, 0xf0f, 0xbf, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35770,10 +38450,11 @@ const insn_template i386_optab[] =
   { "pf2id", 2, 0xf0f, 0x1d, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35783,10 +38464,11 @@ const insn_template i386_optab[] =
   { "pf2iw", 2, 0xf0f, 0x1c, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35796,10 +38478,11 @@ const insn_template i386_optab[] =
   { "pfacc", 2, 0xf0f, 0xae, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35809,10 +38492,11 @@ const insn_template i386_optab[] =
   { "pfadd", 2, 0xf0f, 0x9e, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35822,10 +38506,11 @@ const insn_template i386_optab[] =
   { "pfcmpeq", 2, 0xf0f, 0xb0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35835,10 +38520,11 @@ const insn_template i386_optab[] =
   { "pfcmpge", 2, 0xf0f, 0x90, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35848,10 +38534,11 @@ const insn_template i386_optab[] =
   { "pfcmpgt", 2, 0xf0f, 0xa0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35861,10 +38548,11 @@ const insn_template i386_optab[] =
   { "pfmax", 2, 0xf0f, 0xa4, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35874,10 +38562,11 @@ const insn_template i386_optab[] =
   { "pfmin", 2, 0xf0f, 0x94, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35887,10 +38576,11 @@ const insn_template i386_optab[] =
   { "pfmul", 2, 0xf0f, 0xb4, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35900,10 +38590,11 @@ const insn_template i386_optab[] =
   { "pfnacc", 2, 0xf0f, 0x8a, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35913,10 +38604,11 @@ const insn_template i386_optab[] =
   { "pfpnacc", 2, 0xf0f, 0x8e, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35926,10 +38618,11 @@ const insn_template i386_optab[] =
   { "pfrcp", 2, 0xf0f, 0x96, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35939,10 +38632,11 @@ const insn_template i386_optab[] =
   { "pfrcpit1", 2, 0xf0f, 0xa6, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35952,10 +38646,11 @@ const insn_template i386_optab[] =
   { "pfrcpit2", 2, 0xf0f, 0xb6, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35965,10 +38660,11 @@ const insn_template i386_optab[] =
   { "pfrsqit1", 2, 0xf0f, 0xa7, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35978,10 +38674,11 @@ const insn_template i386_optab[] =
   { "pfrsqrt", 2, 0xf0f, 0x97, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -35991,10 +38688,11 @@ const insn_template i386_optab[] =
   { "pfsub", 2, 0xf0f, 0x9a, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -36004,10 +38702,11 @@ const insn_template i386_optab[] =
   { "pfsubr", 2, 0xf0f, 0xaa, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -36017,10 +38716,11 @@ const insn_template i386_optab[] =
   { "pi2fd", 2, 0xf0f, 0xd, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -36030,10 +38730,11 @@ const insn_template i386_optab[] =
   { "pi2fw", 2, 0xf0f, 0xc, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -36043,10 +38744,11 @@ const insn_template i386_optab[] =
   { "pmulhrw", 2, 0xf0f, 0xb7, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -36056,10 +38758,11 @@ const insn_template i386_optab[] =
   { "pswapd", 2, 0xf0f, 0xbb, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -36069,90 +38772,99 @@ const insn_template i386_optab[] =
   { "syscall", 0, 0xf05, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "syscall", 0, 0xf05, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "sysret", 0, 0xf07, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "sysret", 0, 0xf07, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "swapgs", 0, 0xf01, 0xf8, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "rdtscp", 0, 0xf01, 0xf9, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "clgi", 0, 0xf01, 0xdd, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "invlpga", 0, 0xf01, 0xdf, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "invlpga", 2, 0xf01, 0xdf, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -36162,110 +38874,121 @@ const insn_template i386_optab[] =
   { "skinit", 0, 0xf01, 0xde, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "skinit", 1, 0xf01, 0xde, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "stgi", 0, 0xf01, 0xdc, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "vmload", 0, 0xf01, 0xda, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "vmload", 1, 0xf01, 0xda, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "vmmcall", 0, 0xf01, 0xd9, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "vmrun", 0, 0xf01, 0xd8, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "vmrun", 1, 0xf01, 0xd8, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "vmsave", 0, 0xf01, 0xdb, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "vmsave", 1, 0xf01, 0xdb, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "movntsd", 2, 0xf20f2b, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -36275,10 +38998,11 @@ const insn_template i386_optab[] =
   { "movntss", 2, 0xf30f2b, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -36288,10 +39012,11 @@ const insn_template i386_optab[] =
   { "extrq", 3, 0x660f78, 0x0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -36304,10 +39029,11 @@ const insn_template i386_optab[] =
   { "extrq", 2, 0x660f79, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -36317,10 +39043,11 @@ const insn_template i386_optab[] =
   { "insertq", 2, 0xf20f79, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -36330,10 +39057,11 @@ const insn_template i386_optab[] =
   { "insertq", 4, 0xf20f78, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } },
@@ -36349,10 +39077,11 @@ const insn_template i386_optab[] =
   { "popcnt", 2, 0xf30fb8, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -36362,10 +39091,11 @@ const insn_template i386_optab[] =
   { "lzcnt", 2, 0xf30fbd, None, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 
       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 
 	  0, 0, 1, 0, 0, 0 } },
@@ -36375,170 +39105,226 @@ const insn_template i386_optab[] =
   { "xstore-rng", 0, 0xfa7, 0xc0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "xcrypt-ecb", 0, 0xf30fa7, 0xc8, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "xcrypt-cbc", 0, 0xf30fa7, 0xd0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "xcrypt-ctr", 0, 0xf30fa7, 0xd8, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "xcrypt-cfb", 0, 0xf30fa7, 0xe0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "xcrypt-ofb", 0, 0xf30fa7, 0xe8, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "montmul", 0, 0xf30fa6, 0xc0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "xsha1", 0, 0xf30fa6, 0xc8, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "xsha256", 0, 0xf30fa6, 0xd0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "xstorerng", 0, 0xfa7, 0xc0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "xcryptecb", 0, 0xf30fa7, 0xc8, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "xcryptcbc", 0, 0xf30fa7, 0xd0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "xcryptctr", 0, 0xf30fa7, 0xd8, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "xcryptcfb", 0, 0xf30fa7, 0xe0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "xcryptofb", 0, 0xf30fa7, 0xe8, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
   { "xstore", 0, 0xfa7, 0xc0, 2,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
-      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } },
+  { "adcx", 2, 0x660f38f6, None, 3,
+    { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+        0, 0 } },
+    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
+	  0, 0, 1, 0, 0, 0 } },
+      { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  0, 0, 0, 0, 0, 0 } } } },
+  { "adox", 2, 0xf30f38f6, None, 3,
+    { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+        0, 0 } },
+    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 
+      0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 
+	  0, 0, 1, 0, 0, 0 } },
+      { { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  0, 0, 0, 0, 0, 0 } } } },
+  { "rdseed", 1, 0xfc7, 0x7, 2,
+    { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
+        0, 0 } },
+    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 
+      1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+    { { { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+	  0, 0, 0, 0, 0, 0 } } } },
   { NULL, 0, 0, 0, 0,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+        0, 0 } },
     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 	  0, 0, 0, 0, 0, 0 } } } }
diff --git a/opcodes/i860-dis.c b/opcodes/i860-dis.c
index 65b74af..e772641 100644
--- a/opcodes/i860-dis.c
+++ b/opcodes/i860-dis.c
@@ -1,5 +1,5 @@
 /* Disassembler for the i860.
-   Copyright 2000, 2003, 2005, 2007 Free Software Foundation, Inc.
+   Copyright 2000, 2003, 2005, 2007, 2012 Free Software Foundation, Inc.
 
    Contributed by Jason Eckhardt <jle at cygnus.com>.
 
@@ -20,6 +20,7 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include "dis-asm.h"
 #include "opcode/i860.h"
 
diff --git a/opcodes/ia64-dis.c b/opcodes/ia64-dis.c
index 13ee194..bae99f0 100644
--- a/opcodes/ia64-dis.c
+++ b/opcodes/ia64-dis.c
@@ -1,5 +1,5 @@
 /* ia64-dis.c -- Disassemble ia64 instructions
-   Copyright 1998, 1999, 2000, 2002, 2005, 2007, 2008, 2009
+   Copyright 1998, 1999, 2000, 2002, 2005, 2007, 2008, 2009, 2012
    Free Software Foundation, Inc.
    Contributed by David Mosberger-Tang <davidm at hpl.hp.com>
 
@@ -20,8 +20,8 @@
    Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
    02110-1301, USA.  */
 
+#include "sysdep.h"
 #include <assert.h>
-#include <string.h>
 
 #include "dis-asm.h"
 #include "opcode/ia64.h"
diff --git a/opcodes/ia64-gen.c b/opcodes/ia64-gen.c
index eefa81c..f6deca1 100644
--- a/opcodes/ia64-gen.c
+++ b/opcodes/ia64-gen.c
@@ -1,5 +1,5 @@
 /* ia64-gen.c -- Generate a shrunk set of opcode tables
-   Copyright 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009
+   Copyright 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009, 2012
    Free Software Foundation, Inc.
    Written by Bob Manson, Cygnus Solutions, <manson at cygnus.com>
 
@@ -34,14 +34,13 @@
    The resource table is constructed based on some text dependency tables, 
    which are also easier to maintain than the final representation.  */
 
+#include "sysdep.h"
 #include <stdio.h>
 #include <stdarg.h>
 #include <errno.h>
 
-#include "ansidecl.h"
 #include "libiberty.h"
 #include "safe-ctype.h"
-#include "sysdep.h"
 #include "getopt.h"
 #include "ia64-opc.h"
 #include "ia64-opc-a.c"
diff --git a/opcodes/ia64-opc.c b/opcodes/ia64-opc.c
index 539fa9b..359221b 100644
--- a/opcodes/ia64-opc.c
+++ b/opcodes/ia64-opc.c
@@ -1,5 +1,6 @@
 /* ia64-opc.c -- Functions to access the compacted opcode table
-   Copyright 1999, 2000, 2001, 2003, 2005, 2007, 2009 Free Software Foundation, Inc.
+   Copyright 1999, 2000, 2001, 2003, 2005, 2007, 2009, 2012
+   Free Software Foundation, Inc.
    Written by Bob Manson of Cygnus Solutions, <manson at cygnus.com>
 
    This file is part of the GNU opcodes library.
@@ -19,7 +20,6 @@
    Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include "ansidecl.h"
 #include "sysdep.h"
 #include "libiberty.h"
 #include "ia64-asmtab.h"
diff --git a/opcodes/m10200-dis.c b/opcodes/m10200-dis.c
index 6c69c00..3d2dd83 100644
--- a/opcodes/m10200-dis.c
+++ b/opcodes/m10200-dis.c
@@ -1,5 +1,6 @@
 /* Disassemble MN10200 instructions.
-   Copyright 1996, 1997, 1998, 2000, 2005, 2007 Free Software Foundation, Inc.
+   Copyright 1996, 1997, 1998, 2000, 2005, 2007, 2012
+   Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
 
@@ -18,9 +19,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <stdio.h>
-
 #include "sysdep.h"
+#include <stdio.h>
 #include "opcode/mn10200.h" 
 #include "dis-asm.h"
 #include "opintl.h"
diff --git a/opcodes/m10300-dis.c b/opcodes/m10300-dis.c
index 1ed50f1..3445fc2 100644
--- a/opcodes/m10300-dis.c
+++ b/opcodes/m10300-dis.c
@@ -1,5 +1,5 @@
 /* Disassemble MN10300 instructions.
-   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2005, 2007
+   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2005, 2007, 2012
    Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
@@ -19,9 +19,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <stdio.h>
-
 #include "sysdep.h"
+#include <stdio.h>
 #include "opcode/mn10300.h"
 #include "dis-asm.h"
 #include "opintl.h"
diff --git a/opcodes/m68hc11-dis.c b/opcodes/m68hc11-dis.c
index f6d6184..99b272b 100644
--- a/opcodes/m68hc11-dis.c
+++ b/opcodes/m68hc11-dis.c
@@ -1,7 +1,8 @@
 /* m68hc11-dis.c -- Motorola 68HC11 & 68HC12 disassembly
-   Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007
+   Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2012
    Free Software Foundation, Inc.
    Written by Stephane Carrez (stcarrez at nerim.fr)
+   XGATE and S12X added by James Murray (jsm at jsm-net.demon.co.uk)
 
    This file is part of the GNU opcodes library.
 
@@ -20,23 +21,26 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include <stdio.h>
 
-#include "ansidecl.h"
 #include "opcode/m68hc11.h"
 #include "dis-asm.h"
 
 #define PC_REGNUM 3
 
-static const char *const reg_name[] = {
+static const char *const reg_name[] =
+{
   "X", "Y", "SP", "PC"
 };
 
-static const char *const reg_src_table[] = {
+static const char *const reg_src_table[] =
+{
   "A", "B", "CCR", "TMP3", "D", "X", "Y", "SP"
 };
 
-static const char *const reg_dst_table[] = {
+static const char *const reg_dst_table[] =
+{
   "A", "B", "CCR", "TMP2", "D", "X", "Y", "SP"
 };
 
@@ -45,7 +49,7 @@ static const char *const reg_dst_table[] = {
 /* Prototypes for local functions.  */
 static int read_memory (bfd_vma, bfd_byte *, int, struct disassemble_info *);
 static int print_indexed_operand (bfd_vma, struct disassemble_info *,
-                                  int*, int, int, bfd_vma);
+                                  int*, int, int, bfd_vma, int);
 static int print_insn (bfd_vma, struct disassemble_info *, int);
 
 static int
@@ -71,7 +75,7 @@ read_memory (bfd_vma memaddr, bfd_byte* buffer, int size,
 static int
 print_indexed_operand (bfd_vma memaddr, struct disassemble_info* info,
                        int* indirect, int mov_insn, int pc_offset,
-                       bfd_vma endaddr)
+                       bfd_vma endaddr, int arch)
 {
   bfd_byte buffer[4];
   int reg;
@@ -98,12 +102,14 @@ print_indexed_operand (bfd_vma memaddr, struct disassemble_info* info,
       /* 68HC12 requires an adjustment for movb/movw pc relative modes.  */
       if (reg == PC_REGNUM && info->mach == bfd_mach_m6812 && mov_insn)
         sval += pc_offset;
-      (*info->fprintf_func) (info->stream, "%d,%s",
-			     (int) sval, reg_name[reg]);
+      (*info->fprintf_func) (info->stream, "0x%x,%s",
+			     (unsigned short) sval, reg_name[reg]);
 
       if (reg == PC_REGNUM)
         {
           (* info->fprintf_func) (info->stream, " {");
+	      if (info->symtab_size > 0) /* Avoid duplicate 0x from core binutils. */
+	        (*info->fprintf_func) (info->stream, "0x");
           (* info->print_address_func) (endaddr + sval, info);
           (* info->fprintf_func) (info->stream, "}");
         }
@@ -128,7 +134,7 @@ print_indexed_operand (bfd_vma memaddr, struct disassemble_info* info,
 	  mode = "+";
 	}
       (*info->fprintf_func) (info->stream, "%d,%s%s%s",
-			     (int) sval,
+			     (unsigned short) sval,
 			     (buffer[0] & 0x10 ? "" : mode),
 			     reg_name[reg], (buffer[0] & 0x10 ? mode : ""));
     }
@@ -136,12 +142,12 @@ print_indexed_operand (bfd_vma memaddr, struct disassemble_info* info,
   /* [n,r] 16-bits offset indexed indirect.  */
   else if ((buffer[0] & 0x07) == 3)
     {
-      if (mov_insn)
-	{
-	  (*info->fprintf_func) (info->stream, "<invalid op: 0x%x>",
-				 buffer[0] & 0x0ff);
-	  return 0;
-	}
+      if ((mov_insn) && (!(arch & cpu9s12x)))
+      	{
+      	  (*info->fprintf_func) (info->stream, "<invalid op: 0x%x>",
+    				 buffer[0] & 0x0ff);
+      	  return 0;
+      	}
       reg = (buffer[0] >> 3) & 0x03;
       status = read_memory (memaddr + pos, &buffer[0], 2, info);
       if (status != 0)
@@ -151,7 +157,7 @@ print_indexed_operand (bfd_vma memaddr, struct disassemble_info* info,
 
       pos += 2;
       sval = ((buffer[0] << 8) | (buffer[1] & 0x0FF));
-      (*info->fprintf_func) (info->stream, "[%u,%s]",
+      (*info->fprintf_func) (info->stream, "[0x%x,%s]",
 			     sval & 0x0ffff, reg_name[reg]);
       if (indirect)
         *indirect = 1;
@@ -160,12 +166,13 @@ print_indexed_operand (bfd_vma memaddr, struct disassemble_info* info,
   /* n,r with 9 and 16 bit signed constant.  */
   else if ((buffer[0] & 0x4) == 0)
     {
-      if (mov_insn)
-	{
-	  (*info->fprintf_func) (info->stream, "<invalid op: 0x%x>",
-				 buffer[0] & 0x0ff);
-	  return 0;
-	}
+      if ((mov_insn) && (!(arch & cpu9s12x)))
+      	{
+      	  (*info->fprintf_func) (info->stream, "<invalid op: 0x%x>",
+    				 buffer[0] & 0x0ff);
+      	  return 0;
+      	}
+
       reg = (buffer[0] >> 3) & 0x03;
       status = read_memory (memaddr + pos,
 			    &buffer[1], (buffer[0] & 0x2 ? 2 : 1), info);
@@ -188,11 +195,11 @@ print_indexed_operand (bfd_vma memaddr, struct disassemble_info* info,
 	  pos++;
           endaddr++;
 	}
-      (*info->fprintf_func) (info->stream, "%d,%s",
-			     (int) sval, reg_name[reg]);
+      (*info->fprintf_func) (info->stream, "0x%x,%s",
+			     (unsigned short) sval, reg_name[reg]);
       if (reg == PC_REGNUM)
         {
-          (* info->fprintf_func) (info->stream, " {");
+          (* info->fprintf_func) (info->stream, " {0x");
           (* info->print_address_func) (endaddr + sval, info);
           (* info->fprintf_func) (info->stream, "}");
         }
@@ -230,18 +237,114 @@ print_insn (bfd_vma memaddr, struct disassemble_info* info, int arch)
 {
   int status;
   bfd_byte buffer[4];
-  unsigned char code;
+  unsigned int code;
   long format, pos, i;
   short sval;
   const struct m68hc11_opcode *opcode;
 
+  if (arch & cpuxgate)
+    {
+      int val;
+      /* Get two bytes as all XGATE instructions are 16bit.  */
+      status = read_memory (memaddr, buffer, 2, info);
+      if (status != 0)
+	return status;
+
+      format = 0;
+      code = (buffer[0] << 8) + buffer[1];
+
+      /* Scan the opcode table until we find the opcode
+	 with the corresponding page.  */
+      opcode = m68hc11_opcodes;
+      for (i = 0; i < m68hc11_num_opcodes; i++, opcode++)
+	{
+	  if ((opcode->opcode != (code & opcode->xg_mask)) || (opcode->arch != cpuxgate))
+  	    continue;
+	  /* We have found the opcode.  Extract the operand and print it.  */
+	  (*info->fprintf_func) (info->stream, "%s", opcode->name);
+	  format = opcode->format;
+	  if (format & (M68XG_OP_NONE))
+	    {
+	      /* Nothing to print.  */
+	    }
+	  else if (format & M68XG_OP_IMM3)
+	    (*info->fprintf_func) (info->stream, " #0x%x", (code >> 8) & 0x7);
+	  else if (format & M68XG_OP_R_R)
+	    (*info->fprintf_func) (info->stream, " R%x, R%x",
+				   (code >> 8) & 0x7, (code >> 5) & 0x7);
+	  else if (format & M68XG_OP_R_R_R)
+	    (*info->fprintf_func) (info->stream, " R%x, R%x, R%x",
+				   (code >> 8) & 0x7, (code >> 5) & 0x7, (code >> 2) & 0x7);
+	  else if (format & M68XG_OP_RD_RB_RI)
+	    (*info->fprintf_func) (info->stream, " R%x, (R%x, R%x)",
+				   (code >> 8) & 0x7, (code >> 5) & 0x7, (code >> 2) & 0x7);
+	  else if (format & M68XG_OP_RD_RB_RIp)
+	    (*info->fprintf_func) (info->stream, " R%x, (R%x, R%x+)",
+				   (code >> 8) & 0x7, (code >> 5) & 0x7, (code >> 2) & 0x7);
+	  else if (format & M68XG_OP_RD_RB_mRI)
+	    (*info->fprintf_func) (info->stream, " R%x, (R%x, -R%x)",
+				   (code >> 8) & 0x7, (code >> 5) & 0x7, (code >> 2) & 0x7);
+	  else if (format & M68XG_OP_R_R_OFFS5)
+	    (*info->fprintf_func) (info->stream, " R%x, (R%x, #0x%x)",
+				   (code >> 8) & 0x7, (code >> 5) & 0x7, code & 0x1f);
+	  else if (format & M68XG_OP_R_IMM8)
+	    (*info->fprintf_func) (info->stream, " R%x, #0x%02x",
+				   (code >> 8) & 0x7, code & 0xff);
+	  else if (format & M68XG_OP_R_IMM4)
+	    (*info->fprintf_func) (info->stream, " R%x, #0x%x",
+				   (code >> 8) & 0x7, (code & 0xf0) >> 4);
+	  else if (format & M68XG_OP_REL9)
+	    {
+	      (*info->fprintf_func) (info->stream, " 0x");
+	      val = (buffer[0] & 0x1) ? buffer[1] | 0xFFFFFF00 : buffer[1];
+	      (*info->print_address_func) (memaddr + (val << 1) + 2, info);
+	    }
+	  else if (format & M68XG_OP_REL10)
+	    {
+	      (*info->fprintf_func) (info->stream, " 0x");
+	      val = (buffer[0] << 8) | (unsigned int) buffer[1];
+	      if (val & 0x200)
+		val |= 0xfffffc00;
+	      else
+		val &= 0x000001ff;
+	      (*info->print_address_func) (memaddr + (val << 1) + 2, info);
+	    }
+	  else if ((code & 0x00ff) == 0x00f8)
+  	    (*info->fprintf_func) (info->stream, " R%x, CCR", (code >> 8) & 0x7);
+	  else if ((code & 0x00ff) == 0x00f9)
+  	    (*info->fprintf_func) (info->stream, " CCR, R%x", (code >> 8) & 0x7);
+	  else if ((code & 0x00ff) == 0x0)
+  	    (*info->fprintf_func) (info->stream, " R%x, PC", (code >> 8) & 0x7);
+	  else if (format & M68XG_OP_R)
+  	    {
+	      /* Special cases for TFR.  */
+	      if ((code & 0xf8ff) == 0x00f8)
+		(*info->fprintf_func) (info->stream, " R%x, CCR", (code >> 8) & 0x7);
+	      else if ((code & 0xf8ff) == 0x00f9)
+		(*info->fprintf_func) (info->stream, " CCR, R%x", (code >> 8) & 0x7);
+	      else if ((code & 0xf8ff) == 0x00fa)
+		(*info->fprintf_func) (info->stream, " R%x, PC",  (code >> 8) & 0x7);
+	      else
+		(*info->fprintf_func) (info->stream, " R%x", (code >> 8) & 0x7);
+	    }
+	  else
+	    /* Opcode not recognized.  */
+	    (*info->fprintf_func) (info->stream, "Not yet handled TEST .byte\t0x%04x", code);
+	  return 2;
+	}
+
+      /* Opcode not recognized.  */
+      (*info->fprintf_func) (info->stream, ".byte\t0x%04x", code);
+      return 2; /* Everything is two bytes.  */
+    }
+
+  /* HC11 and HC12.  */
+
   /* Get first byte.  Only one at a time because we don't know the
      size of the insn.  */
   status = read_memory (memaddr, buffer, 1, info);
   if (status != 0)
-    {
-      return status;
-    }
+    return status;
 
   format = 0;
   code = buffer[0];
@@ -269,13 +372,11 @@ print_insn (bfd_vma memaddr, struct disassemble_info* info, int arch)
     {
       status = read_memory (memaddr + pos, &buffer[1], 1, info);
       if (status != 0)
-	{
-	  return status;
-	}
+	return status;
+
       code = buffer[1];
     }
 
-
   /* Look first for a 68HC12 alias.  All of them are 2-bytes long and
      in page 1.  There is no operand to print.  We read the second byte
      only when we have a possible match.  */
@@ -374,6 +475,10 @@ print_insn (bfd_vma memaddr, struct disassemble_info* info, int arch)
 		  && (((buffer[0] & 0x07) >= 3 && (buffer[0] & 7) <= 7))
 		  && ((buffer[0] & 0x0f0) <= 0x20))
 		break;
+	      if ((opcode[j].format & M6812_OP_SEX_MARKER)
+		  && (arch & cpu9s12x)
+		  && ((buffer[0] == 0x4d) || (buffer[0] == 0x4e)))
+		break;
 	      if (opcode[j].format & M6812_OP_TFR_MARKER
 		  && !(buffer[0] & 0x80))
 		break;
@@ -393,73 +498,107 @@ print_insn (bfd_vma memaddr, struct disassemble_info* info, int arch)
 	}
 
       /* The movb and movw must be handled in a special way...
-         The source constant 'ii' is not always at the same place.
-         This is the same for the destination for the post-indexed byte.
-         The 'offset' is used to do the appropriate correction.
-
-                                   offset          offset
-                              for constant     for destination
-         movb   18 OB ii hh ll       0          0
-                18 08 xb ii          1          -1
-                18 0C hh ll hh ll    0          0
-                18 09 xb hh ll       1          -1
-                18 0D xb hh ll       0          0
-                18 0A xb xb          0          0
-
-         movw   18 03 jj kk hh ll    0          0
-                18 00 xb jj kk       1          -1
-                18 04 hh ll hh ll    0          0
-                18 01 xb hh ll       1          -1
-                18 05 xb hh ll       0          0
-                18 02 xb xb          0          0
-
-         After the source operand is read, the position 'pos' is incremented
-         this explains the negative offset for destination.
-
-         movb/movw above are the only instructions with this matching
-         format.  */
+	 The source constant 'ii' is not always at the same place.
+	 This is the same for the destination for the post-indexed byte.
+	 The 'offset' is used to do the appropriate correction.
+
+	 offset          offset
+	 for constant     for destination
+	 movb   18 OB ii hh ll       0          0
+	 18 08 xb ii          1          -1
+	 18 08 xb ff ii       2          1  9 bit
+	 18 08 xb ee ff ii    3          1  16 bit
+	 18 0C hh ll hh ll    0          0
+	 18 09 xb hh ll       1          -1
+	 18 0D xb hh ll       0          0
+	 18 0A xb xb          0          0
+
+	 movw   18 03 jj kk hh ll    0          0
+	 18 00 xb jj kk       1          -1
+	 18 04 hh ll hh ll    0          0
+	 18 01 xb hh ll       1          -1
+	 18 05 xb hh ll       0          0
+	 18 02 xb xb          0          0
+
+	 After the source operand is read, the position 'pos' is incremented
+	 this explains the negative offset for destination.
+
+	 movb/movw above are the only instructions with this matching
+	 format.  */
       offset = ((format & M6812_OP_IDX_P2)
-                && (format & (M6811_OP_IMM8 | M6811_OP_IMM16 |
-                              M6811_OP_IND16)));
+		&& (format & (M6811_OP_IMM8 | M6811_OP_IMM16 |
+			      M6811_OP_IND16)));
+
+      if (offset)
+	{
+	  /* Check xb to see position of data.  */
+	  status = read_memory (memaddr + pos, &buffer[0], 1, info);
+	  if (status != 0)
+	    {
+	      return status;
+	    }
+
+	  if (((buffer[0] & 0xe0) == 0xe0) && ((buffer[0] & 0x04) == 0))
+	    {
+	      /* 9 or 16 bit.  */
+	      if ((buffer[0] & 0x02) == 0)
+		{
+		  /* 9 bit.  */
+		  offset = 2;
+		}
+	      else
+		{
+		  /* 16 bit.  */
+		  offset = 3;
+		}
+	    }
+	}
 
       /* Operand with one more byte: - immediate, offset,
-         direct-low address.  */
+	 direct-low address.  */
       if (format &
 	  (M6811_OP_IMM8 | M6811_OP_IX | M6811_OP_IY | M6811_OP_DIRECT))
 	{
 	  status = read_memory (memaddr + pos + offset, &buffer[0], 1, info);
 	  if (status != 0)
+	    return status;
+
+	  /* This movb/movw is special (see above).  */
+	  if (offset < 2)
 	    {
-	      return status;
+	      offset = -offset;
+	      pc_dst_offset = 2;
+	    }
+	  else
+	    {
+	      offset = -1;
+	      pc_dst_offset = 5;
 	    }
-
 	  pos++;
 
-          /* This movb/movw is special (see above).  */
-          offset = -offset;
-
-          pc_dst_offset = 2;
 	  if (format & M6811_OP_IMM8)
 	    {
-	      (*info->fprintf_func) (info->stream, "#%d", (int) buffer[0]);
+	      (*info->fprintf_func) (info->stream, "#0x%x", (int) buffer[0]);
 	      format &= ~M6811_OP_IMM8;
-              /* Set PC destination offset.  */
-              pc_dst_offset = 1;
+	      /* Set PC destination offset.  */
+	      pc_dst_offset = 1;
 	    }
 	  else if (format & M6811_OP_IX)
 	    {
 	      /* Offsets are in range 0..255, print them unsigned.  */
-	      (*info->fprintf_func) (info->stream, "%u,x", buffer[0] & 0x0FF);
+	      (*info->fprintf_func) (info->stream, "0x%x,x", buffer[0] & 0x0FF);
 	      format &= ~M6811_OP_IX;
 	    }
 	  else if (format & M6811_OP_IY)
 	    {
-	      (*info->fprintf_func) (info->stream, "%u,y", buffer[0] & 0x0FF);
+	      (*info->fprintf_func) (info->stream, "0x%x,y", buffer[0] & 0x0FF);
 	      format &= ~M6811_OP_IY;
 	    }
 	  else if (format & M6811_OP_DIRECT)
 	    {
 	      (*info->fprintf_func) (info->stream, "*");
+	      if (info->symtab_size > 0) /* Avoid duplicate 0x. */
+		(*info->fprintf_func) (info->stream, "0x");
 	      (*info->print_address_func) (buffer[0] & 0x0FF, info);
 	      format &= ~M6811_OP_DIRECT;
 	    }
@@ -470,27 +609,26 @@ print_insn (bfd_vma memaddr, struct disassemble_info* info, int arch)
       /* Analyze the 68HC12 indexed byte.  */
       if (format & M6812_INDEXED_FLAGS)
 	{
-          int indirect;
-          bfd_vma endaddr;
-
-          endaddr = memaddr + pos + 1;
-          if (format & M6811_OP_IND16)
-            endaddr += 2;
-          pc_src_offset = -1;
-          pc_dst_offset = 1;
+	  int indirect;
+	  bfd_vma endaddr;
+
+	  endaddr = memaddr + pos + 1;
+	  if (format & M6811_OP_IND16)
+	    endaddr += 2;
+	  pc_src_offset = -1;
+	  pc_dst_offset = 1;
 	  status = print_indexed_operand (memaddr + pos, info, &indirect,
-                                          (format & M6812_DST_MOVE),
-                                          pc_src_offset, endaddr);
+					  (format & M6812_DST_MOVE),
+					  pc_src_offset, endaddr, arch);
 	  if (status < 0)
-	    {
-	      return status;
-	    }
+	    return status;
+
 	  pos += status;
 
-          /* The indirect addressing mode of the call instruction does
-             not need the page code.  */
-          if ((format & M6812_OP_PAGE) && indirect)
-            format &= ~M6812_OP_PAGE;
+	  /* The indirect addressing mode of the call instruction does
+	     not need the page code.  */
+	  if ((format & M6812_OP_PAGE) && indirect)
+	    format &= ~M6812_OP_PAGE;
 	}
 
       /* 68HC12 dbcc/ibcc/tbcc operands.  */
@@ -498,9 +636,8 @@ print_insn (bfd_vma memaddr, struct disassemble_info* info, int arch)
 	{
 	  status = read_memory (memaddr + pos, &buffer[0], 2, info);
 	  if (status != 0)
-	    {
-	      return status;
-	    }
+	    return status;
+
 	  (*info->fprintf_func) (info->stream, "%s,",
 				 reg_src_table[buffer[0] & 0x07]);
 	  sval = buffer[1] & 0x0ff;
@@ -508,6 +645,7 @@ print_insn (bfd_vma memaddr, struct disassemble_info* info, int arch)
 	    sval |= 0xff00;
 
 	  pos += 2;
+	  (*info->fprintf_func) (info->stream, "0x");
 	  (*info->print_address_func) (memaddr + pos + sval, info);
 	  format &= ~(M6812_OP_REG | M6811_OP_JUMP_REL);
 	}
@@ -515,9 +653,7 @@ print_insn (bfd_vma memaddr, struct disassemble_info* info, int arch)
 	{
 	  status = read_memory (memaddr + pos, &buffer[0], 1, info);
 	  if (status != 0)
-	    {
-	      return status;
-	    }
+	    return status;
 
 	  pos++;
 	  (*info->fprintf_func) (info->stream, "%s,%s",
@@ -528,14 +664,13 @@ print_insn (bfd_vma memaddr, struct disassemble_info* info, int arch)
       if (format & (M6811_OP_IMM16 | M6811_OP_IND16))
 	{
 	  int val;
-          bfd_vma addr;
-          unsigned page = 0;
+	  bfd_vma addr;
+	  unsigned page = 0;
 
 	  status = read_memory (memaddr + pos + offset, &buffer[0], 2, info);
 	  if (status != 0)
-	    {
-	      return status;
-	    }
+	    return status;
+
 	  if (format & M6812_OP_IDX_P2)
 	    offset = -2;
 	  else
@@ -544,64 +679,71 @@ print_insn (bfd_vma memaddr, struct disassemble_info* info, int arch)
 
 	  val = ((buffer[0] << 8) | (buffer[1] & 0x0FF));
 	  val &= 0x0FFFF;
-          addr = val;
-          pc_dst_offset = 2;
-          if (format & M6812_OP_PAGE)
-            {
-              status = read_memory (memaddr + pos + offset, buffer, 1, info);
-              if (status != 0)
-                return status;
-
-              page = (unsigned) buffer[0];
-              if (addr >= M68HC12_BANK_BASE && addr < 0x0c000)
-                addr = ((val - M68HC12_BANK_BASE)
-                        | (page << M68HC12_BANK_SHIFT))
-                   + M68HC12_BANK_VIRT;
-            }
-          else if ((arch & cpu6812)
-                   && addr >= M68HC12_BANK_BASE && addr < 0x0c000)
-             {
-                int cur_page;
-                bfd_vma vaddr;
+	  addr = val;
+	  pc_dst_offset = 2;
+	  if (format & M6812_OP_PAGE)
+	    {
+	      status = read_memory (memaddr + pos + offset, buffer, 1, info);
+	      if (status != 0)
+		return status;
+
+	      page = (unsigned) buffer[0];
+	      if (addr >= M68HC12_BANK_BASE && addr < 0x0c000)
+		addr = ((val - M68HC12_BANK_BASE)
+			| (page << M68HC12_BANK_SHIFT))
+		  + M68HC12_BANK_VIRT;
+	    }
+	  else if ((arch & cpu6812)
+		   && addr >= M68HC12_BANK_BASE && addr < 0x0c000)
+	    {
+	      int cur_page;
+	      bfd_vma vaddr;
                 
-                if (memaddr >= M68HC12_BANK_VIRT)
-                   cur_page = ((memaddr - M68HC12_BANK_VIRT)
-                               >> M68HC12_BANK_SHIFT);
-                else
-                   cur_page = 0;
-
-                vaddr = ((addr - M68HC12_BANK_BASE)
-                         + (cur_page << M68HC12_BANK_SHIFT))
-                   + M68HC12_BANK_VIRT;
-                if (!info->symbol_at_address_func (addr, info)
-                    && info->symbol_at_address_func (vaddr, info))
-                   addr = vaddr;
-             }
+	      if (memaddr >= M68HC12_BANK_VIRT)
+		cur_page = ((memaddr - M68HC12_BANK_VIRT)
+			    >> M68HC12_BANK_SHIFT);
+	      else
+		cur_page = 0;
+
+	      vaddr = ((addr - M68HC12_BANK_BASE)
+		       + (cur_page << M68HC12_BANK_SHIFT))
+		+ M68HC12_BANK_VIRT;
+	      if (!info->symbol_at_address_func (addr, info)
+		  && info->symbol_at_address_func (vaddr, info))
+		addr = vaddr;
+	    }
 	  if (format & M6811_OP_IMM16)
 	    {
 	      format &= ~M6811_OP_IMM16;
 	      (*info->fprintf_func) (info->stream, "#");
 	    }
 	  else
-	    format &= ~M6811_OP_IND16;
+	    {
+	      format &= ~M6811_OP_IND16;
+	    }
+
+	  if (info->symtab_size > 0) /* Avoid duplicate 0x from core binutils. */
+	    (*info->fprintf_func) (info->stream, "0x");
 
 	  (*info->print_address_func) (addr, info);
-          if (format & M6812_OP_PAGE)
-            {
-              (* info->fprintf_func) (info->stream, " {");
-              (* info->print_address_func) (val, info);
-              (* info->fprintf_func) (info->stream, ", %d}", page);
-              format &= ~M6812_OP_PAGE;
-              pos += 1;
-            }
+	  if (format & M6812_OP_PAGE)
+	    {
+	      (* info->fprintf_func) (info->stream, " {");
+	      if (info->symtab_size > 0) /* Avoid duplicate 0x from core binutils. */
+		(*info->fprintf_func) (info->stream, "0x");
+	      (* info->print_address_func) (val, info);
+	      (* info->fprintf_func) (info->stream, ", 0x%x}", page);
+	      format &= ~M6812_OP_PAGE;
+	      pos += 1;
+	    }
 	}
 
       if (format & M6812_OP_IDX_P2)
 	{
 	  (*info->fprintf_func) (info->stream, ", ");
 	  status = print_indexed_operand (memaddr + pos + offset, info,
-                                          0, 1, pc_dst_offset,
-                                          memaddr + pos + offset + 1);
+					  0, 1, pc_dst_offset,
+					  memaddr + pos + offset + 1, arch);
 	  if (status < 0)
 	    return status;
 	  pos += status;
@@ -615,30 +757,30 @@ print_insn (bfd_vma memaddr, struct disassemble_info* info, int arch)
 
 	  status = read_memory (memaddr + pos + offset, &buffer[0], 2, info);
 	  if (status != 0)
-	    {
-	      return status;
-	    }
+	    return status;
+
 	  pos += 2;
 
 	  val = ((buffer[0] << 8) | (buffer[1] & 0x0FF));
 	  val &= 0x0FFFF;
+	  if (info->symtab_size > 0) /* Avoid duplicate 0x from core binutils. */
+	    (*info->fprintf_func) (info->stream, "0x");
 	  (*info->print_address_func) (val, info);
 	}
 
       /* M6811_OP_BITMASK and M6811_OP_JUMP_REL must be treated separately
-         and in that order.  The brset/brclr insn have a bitmask and then
-         a relative branch offset.  */
+	 and in that order.  The brset/brclr insn have a bitmask and then
+	 a relative branch offset.  */
       if (format & M6811_OP_BITMASK)
 	{
 	  status = read_memory (memaddr + pos, &buffer[0], 1, info);
 	  if (status != 0)
-	    {
-	      return status;
-	    }
+	    return status;
+
 	  pos++;
-	  (*info->fprintf_func) (info->stream, " #$%02x%s",
+	  (*info->fprintf_func) (info->stream, ", #0x%02x%s",
 				 buffer[0] & 0x0FF,
-				 (format & M6811_OP_JUMP_REL ? " " : ""));
+				 (format & M6811_OP_JUMP_REL ? ", " : ""));
 	  format &= ~M6811_OP_BITMASK;
 	}
       if (format & M6811_OP_JUMP_REL)
@@ -647,10 +789,9 @@ print_insn (bfd_vma memaddr, struct disassemble_info* info, int arch)
 
 	  status = read_memory (memaddr + pos, &buffer[0], 1, info);
 	  if (status != 0)
-	    {
-	      return status;
-	    }
+	    return status;
 
+	  (*info->fprintf_func) (info->stream, "0x");
 	  pos++;
 	  val = (buffer[0] & 0x80) ? buffer[0] | 0xFFFFFF00 : buffer[0];
 	  (*info->print_address_func) (memaddr + pos + val, info);
@@ -662,15 +803,14 @@ print_insn (bfd_vma memaddr, struct disassemble_info* info, int arch)
 
 	  status = read_memory (memaddr + pos, &buffer[0], 2, info);
 	  if (status != 0)
-	    {
-	      return status;
-	    }
+	    return status;
 
 	  pos += 2;
 	  val = ((buffer[0] << 8) | (buffer[1] & 0x0FF));
 	  if (val & 0x8000)
 	    val |= 0xffff0000;
 
+	  (*info->fprintf_func) (info->stream, "0x");
 	  (*info->print_address_func) (memaddr + pos + val, info);
 	  format &= ~M6812_OP_JUMP_REL16;
 	}
@@ -681,28 +821,24 @@ print_insn (bfd_vma memaddr, struct disassemble_info* info, int arch)
 
 	  status = read_memory (memaddr + pos + offset, &buffer[0], 1, info);
 	  if (status != 0)
-	    {
-	      return status;
-	    }
+	    return status;
+
 	  pos += 1;
 
 	  val = buffer[0] & 0x0ff;
-	  (*info->fprintf_func) (info->stream, ", %d", val);
+	  (*info->fprintf_func) (info->stream, ", 0x%x", val);
 	}
       
 #ifdef DEBUG
       /* Consistency check.  'format' must be 0, so that we have handled
-         all formats; and the computed size of the insn must match the
-         opcode table content.  */
+	 all formats; and the computed size of the insn must match the
+	 opcode table content.  */
       if (format & ~(M6811_OP_PAGE4 | M6811_OP_PAGE3 | M6811_OP_PAGE2))
-	{
-	  (*info->fprintf_func) (info->stream, "; Error, format: %lx", format);
-	}
+	(*info->fprintf_func) (info->stream, "; Error, format: %lx", format);
+
       if (pos != opcode->size)
-	{
-	  (*info->fprintf_func) (info->stream, "; Error, size: %ld expect %d",
-				 pos, opcode->size);
-	}
+	(*info->fprintf_func) (info->stream, "; Error, size: %ld expect %d",
+			       pos, opcode->size);
 #endif
       return pos;
     }
@@ -710,7 +846,7 @@ print_insn (bfd_vma memaddr, struct disassemble_info* info, int arch)
   /* Opcode not recognized.  */
   if (format == M6811_OP_PAGE2 && arch & cpu6812
       && ((code >= 0x30 && code <= 0x39) || (code >= 0x40)))
-    (*info->fprintf_func) (info->stream, "trap\t#%d", code & 0x0ff);
+    (*info->fprintf_func) (info->stream, "trap\t#0x%02x", code & 0x0ff);
 
   else if (format == M6811_OP_PAGE2)
     (*info->fprintf_func) (info->stream, ".byte\t0x%02x, 0x%02x",
@@ -740,3 +876,15 @@ print_insn_m68hc12 (bfd_vma memaddr, struct disassemble_info* info)
 {
   return print_insn (memaddr, info, cpu6812);
 }
+
+int
+print_insn_m9s12x (bfd_vma memaddr, struct disassemble_info* info)
+{
+  return print_insn (memaddr, info, cpu6812|cpu9s12x);
+}
+
+int
+print_insn_m9s12xg (bfd_vma memaddr, struct disassemble_info* info)
+{
+  return print_insn (memaddr, info, cpuxgate);
+}
diff --git a/opcodes/m68hc11-opc.c b/opcodes/m68hc11-opc.c
index ac6259d..79c1d27 100644
--- a/opcodes/m68hc11-opc.c
+++ b/opcodes/m68hc11-opc.c
@@ -1,6 +1,9 @@
-/* m68hc11-opc.c -- Motorola 68HC11 & 68HC12 opcode list
-   Copyright 1999, 2000, 2002, 2005, 2007 Free Software Foundation, Inc.
+/* m68hc11-opc.c -- Motorola 68HC11, 68HC12, 9S12X and XGATE opcode list
+   Copyright 1999, 2000, 2002, 2005, 2007, 2012
+   Free Software Foundation, Inc.
    Written by Stephane Carrez (stcarrez at nerim.fr)
+   XGATE and S12X added by James Murray (jsm at jsm-net.demon.co.uk)
+   Note: min/max cycles not updated for S12X opcodes.
 
    This file is part of the GNU opcodes library.
 
@@ -103,956 +106,1611 @@
 #define OP_IBNE_MARKER  (M6812_OP_IBCC_MARKER)
 
 /*
-   { "test", OP_NONE,          1, 0x00,  5, _M,  CHG_NONE,  cpu6811 },
-                                                            +-- cpu
+   { "test", OP_NONE,          1, 0x00,  5, _M,  CHG_NONE,  cpu6811, 0 },
+                                                            +-- cpu  +-- XGATE opcode mask
   Name -+                                        +------- Insn CCR changes
   Format  ------+                            +----------- Max # cycles
   Size     --------------------+         +--------------- Min # cycles
                                    +--------------------- Opcode
 */
 const struct m68hc11_opcode m68hc11_opcodes[] = {
-  { "aba",  OP_NONE,           1, 0x1b,  2,  2,  CHG_HNZVC, cpu6811 },
-  { "aba",  OP_NONE | OP_PAGE2,2, 0x06,  2,  2,  CHG_HNZVC, cpu6812 },
-  { "abx",  OP_NONE,           1, 0x3a,  3,  3,  CHG_NONE,  cpu6811 },
-  { "aby",  OP_NONE | OP_PAGE2,2, 0x3a,  4,  4,  CHG_NONE,  cpu6811 },
-
-  { "adca", OP_IMM8,           2, 0x89,  1,  1,  CHG_HNZVC, cpu6811|cpu6812 },
-  { "adca", OP_DIRECT,         2, 0x99,  3,  3,  CHG_HNZVC, cpu6811|cpu6812 },
-  { "adca", OP_IND16,          3, 0xb9,  3,  3,  CHG_HNZVC, cpu6811|cpu6812 },
-  { "adca", OP_IX,             2, 0xa9,  4,  4,  CHG_HNZVC, cpu6811 },
-  { "adca", OP_IY | OP_PAGE2,  3, 0xa9,  5,  5,  CHG_HNZVC, cpu6811 },
-  { "adca", OP_IDX,            2, 0xa9,  3,  3,  CHG_HNZVC, cpu6812 },
-  { "adca", OP_IDX_1,          3, 0xa9,  3,  3,  CHG_HNZVC, cpu6812 },
-  { "adca", OP_IDX_2,          4, 0xa9,  4,  4,  CHG_HNZVC, cpu6812 },
-  { "adca", OP_D_IDX,          2, 0xa9,  6,  6,  CHG_HNZVC, cpu6812 },
-  { "adca", OP_D_IDX_2,        4, 0xa9,  6,  6,  CHG_HNZVC, cpu6812 },
-
-  { "adcb", OP_IMM8,           2, 0xc9,  1,  1,  CHG_HNZVC, cpu6811|cpu6812 },
-  { "adcb", OP_DIRECT,         2, 0xd9,  3,  3,  CHG_HNZVC, cpu6811|cpu6812 },
-  { "adcb", OP_IND16,          3, 0xf9,  3,  3,  CHG_HNZVC, cpu6811|cpu6812 },
-  { "adcb", OP_IX,             2, 0xe9,  4,  4,  CHG_HNZVC, cpu6811 },
-  { "adcb", OP_IY | OP_PAGE2,  3, 0xe9,  5,  5,  CHG_HNZVC, cpu6811 },
-  { "adcb", OP_IDX,            2, 0xe9,  3,  3,  CHG_HNZVC, cpu6812 },
-  { "adcb", OP_IDX_1,          3, 0xe9,  3,  3,  CHG_HNZVC, cpu6812 },
-  { "adcb", OP_IDX_2,          4, 0xe9,  4,  4,  CHG_HNZVC, cpu6812 },
-  { "adcb", OP_D_IDX,          2, 0xe9,  6,  6,  CHG_HNZVC, cpu6812 },
-  { "adcb", OP_D_IDX_2,        4, 0xe9,  6,  6,  CHG_HNZVC, cpu6812 },
-
-  { "adda", OP_IMM8,           2, 0x8b,  1,  1,  CHG_HNZVC, cpu6811|cpu6812 },
-  { "adda", OP_DIRECT,         2, 0x9b,  3,  3,  CHG_HNZVC, cpu6811|cpu6812 },
-  { "adda", OP_IND16,          3, 0xbb,  3,  3,  CHG_HNZVC, cpu6811|cpu6812 },
-  { "adda", OP_IX,             2, 0xab,  4,  4,  CHG_HNZVC, cpu6811 },
-  { "adda", OP_IY | OP_PAGE2,  3, 0xab,  5,  5,  CHG_HNZVC, cpu6811 },
-  { "adda", OP_IDX,            2, 0xab,  3,  3,  CHG_HNZVC, cpu6812 },
-  { "adda", OP_IDX_1,          3, 0xab,  3,  3,  CHG_HNZVC, cpu6812 },
-  { "adda", OP_IDX_2,          4, 0xab,  4,  4,  CHG_HNZVC, cpu6812 },
-  { "adda", OP_D_IDX,          2, 0xab,  6,  6,  CHG_HNZVC, cpu6812 },
-  { "adda", OP_D_IDX_2,        4, 0xab,  6,  6,  CHG_HNZVC, cpu6812 },
-
-  { "addb", OP_IMM8,           2, 0xcb,  1,  1,  CHG_HNZVC, cpu6811|cpu6812 },
-  { "addb", OP_DIRECT,         2, 0xdb,  3,  3,  CHG_HNZVC, cpu6811|cpu6812 },
-  { "addb", OP_IND16,          3, 0xfb,  3,  3,  CHG_HNZVC, cpu6811|cpu6812 },
-  { "addb", OP_IX,             2, 0xeb,  4,  4,  CHG_HNZVC, cpu6811 },
-  { "addb", OP_IY | OP_PAGE2,  3, 0xeb,  5,  5,  CHG_HNZVC, cpu6811 },
-  { "addb", OP_IDX,            2, 0xeb,  3,  3,  CHG_HNZVC, cpu6812 },
-  { "addb", OP_IDX_1,          3, 0xeb,  3,  3,  CHG_HNZVC, cpu6812 },
-  { "addb", OP_IDX_2,          4, 0xeb,  4,  4,  CHG_HNZVC, cpu6812 },
-  { "addb", OP_D_IDX,          2, 0xeb,  6,  6,  CHG_HNZVC, cpu6812 },
-  { "addb", OP_D_IDX_2,        4, 0xeb,  6,  6,  CHG_HNZVC, cpu6812 },
-
-  { "addd", OP_IMM16,          3, 0xc3,  2,  2,  CHG_NZVC, cpu6811|cpu6812 },
-  { "addd", OP_DIRECT,         2, 0xd3,  3,  3,  CHG_NZVC, cpu6811|cpu6812 },
-  { "addd", OP_IND16,          3, 0xf3,  3,  3,  CHG_NZVC, cpu6811|cpu6812 },
-  { "addd", OP_IX,             2, 0xe3,  6,  6,  CHG_NZVC, cpu6811 },
-  { "addd", OP_IY | OP_PAGE2,  3, 0xe3,  7,  7,  CHG_NZVC, cpu6811 },
-  { "addd", OP_IDX,            2, 0xe3,  3,  3,  CHG_NZVC, cpu6812 },
-  { "addd", OP_IDX_1,          3, 0xe3,  3,  3,  CHG_NZVC, cpu6812 },
-  { "addd", OP_IDX_2,          4, 0xe3,  4,  4,  CHG_NZVC, cpu6812 },
-  { "addd", OP_D_IDX,          2, 0xe3,  6,  6,  CHG_NZVC, cpu6812 },
-  { "addd", OP_D_IDX_2,        4, 0xe3,  6,  6,  CHG_NZVC, cpu6812 },
-
-  { "anda", OP_IMM8,         2, 0x84,  1,  1,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "anda", OP_DIRECT,       2, 0x94,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "anda", OP_IND16,        3, 0xb4,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "anda", OP_IX,             2, 0xa4,  4,  4,  CLR_V_CHG_NZ, cpu6811 },
-  { "anda", OP_IY | OP_PAGE2,  3, 0xa4,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "anda", OP_IDX,            2, 0xa4,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "anda", OP_IDX_1,          3, 0xa4,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "anda", OP_IDX_2,          4, 0xa4,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "anda", OP_D_IDX,          2, 0xa4,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-  { "anda", OP_D_IDX_2,        4, 0xa4,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "andb", OP_IMM8,         2, 0xc4,  1,  1,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "andb", OP_DIRECT,       2, 0xd4,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "andb", OP_IND16,        3, 0xf4,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "andb", OP_IX,             2, 0xe4,  4,  4,  CLR_V_CHG_NZ, cpu6811 },
-  { "andb", OP_IY | OP_PAGE2,  3, 0xe4,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "andb", OP_IDX,            2, 0xe4,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "andb", OP_IDX_1,          3, 0xe4,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "andb", OP_IDX_2,          4, 0xe4,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "andb", OP_D_IDX,          2, 0xe4,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-  { "andb", OP_D_IDX_2,        4, 0xe4,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "andcc", OP_IMM8,          2, 0x10,  1,  1,  CHG_ALL,  cpu6812 },
-
-  { "asl",  OP_IND16,          3, 0x78,  4,  4,  CHG_NZVC, cpu6811|cpu6812 },
-  { "asl",  OP_IX,             2, 0x68,  6,  6,  CHG_NZVC, cpu6811 },
-  { "asl",  OP_IY | OP_PAGE2,  3, 0x68,  7,  7,  CHG_NZVC, cpu6811 },
-  { "asl",  OP_IDX,            2, 0x68,  3,  3,  CHG_NZVC, cpu6812 },
-  { "asl",  OP_IDX_1,          3, 0x68,  4,  4,  CHG_NZVC, cpu6812 },
-  { "asl",  OP_IDX_2,          4, 0x68,  5,  5,  CHG_NZVC, cpu6812 },
-  { "asl",  OP_D_IDX,          2, 0x68,  6,  6,  CHG_NZVC, cpu6812 },
-  { "asl",  OP_D_IDX_2,        4, 0x68,  6,  6,  CHG_NZVC, cpu6812 },
-
-  { "asla", OP_NONE,           1, 0x48,  1,  1,  CHG_NZVC, cpu6811|cpu6812 },
-  { "aslb", OP_NONE,           1, 0x58,  1,  1,  CHG_NZVC, cpu6811|cpu6812 },
-  { "asld", OP_NONE,           1, 0x05,  3,  3,  CHG_NZVC, cpu6811 },
-  { "asld", OP_NONE,           1, 0x59,  1,  1,  CHG_NZVC, cpu6812 },
-
-  { "asr",  OP_IND16,          3, 0x77,  4,  4,  CHG_NZVC, cpu6811|cpu6812 },
-  { "asr",  OP_IX,             2, 0x67,  6,  6,  CHG_NZVC, cpu6811 },
-  { "asr",  OP_IY | OP_PAGE2,  3, 0x67,  7,  7,  CHG_NZVC, cpu6811 },
-  { "asr",  OP_IDX,            2, 0x67,  3,  3,  CHG_NZVC, cpu6812 },
-  { "asr",  OP_IDX_1,          3, 0x67,  4,  4,  CHG_NZVC, cpu6812 },
-  { "asr",  OP_IDX_2,          4, 0x67,  5,  5,  CHG_NZVC, cpu6812 },
-  { "asr",  OP_D_IDX,          2, 0x67,  6,  6,  CHG_NZVC, cpu6812 },
-  { "asr",  OP_D_IDX_2,        4, 0x67,  6,  6,  CHG_NZVC, cpu6812 },
-
-  { "asra", OP_NONE,           1, 0x47,  1,  1,  CHG_NZVC, cpu6811|cpu6812 },
-  { "asrb", OP_NONE,           1, 0x57,  1,  1,  CHG_NZVC, cpu6811|cpu6812 },
-
-  { "bcc", OP_JUMP_REL,        2, 0x24,  1,  3,  CHG_NONE, cpu6811|cpu6812 },
-
-  { "bclr", OP_BITMASK|OP_DIRECT,  3, 0x15,  6,  6,  CLR_V_CHG_NZ, cpu6811 },
-  { "bclr", OP_BITMASK|OP_IX,       3, 0x1d,  7,  7,  CLR_V_CHG_NZ, cpu6811 },
-  { "bclr", OP_BITMASK|OP_IY|OP_PAGE2, 4, 0x1d, 8, 8, CLR_V_CHG_NZ, cpu6811},
-  { "bclr", OP_BITMASK|OP_DIRECT,   3, 0x4d,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "bclr", OP_BITMASK|OP_IND16,    4, 0x1d,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "bclr", OP_BITMASK|OP_IDX,      3, 0x0d,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "bclr", OP_BITMASK|OP_IDX_1,    4, 0x0d,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "bclr", OP_BITMASK|OP_IDX_2,    5, 0x0d,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "bcs", OP_JUMP_REL,        2, 0x25,  1,  3, CHG_NONE, cpu6811 | cpu6812 },
-  { "beq", OP_JUMP_REL,        2, 0x27,  1,  3, CHG_NONE, cpu6811 | cpu6812 },
-  { "bge", OP_JUMP_REL,        2, 0x2c,  1,  3, CHG_NONE, cpu6811 | cpu6812 },
-
-  { "bgnd", OP_NONE,           1, 0x00,  5,  5, CHG_NONE, cpu6811 | cpu6812 },
-
-  { "bgt", OP_JUMP_REL,        2, 0x2e,  1,  3, CHG_NONE, cpu6811 | cpu6812 },
-  { "bhi", OP_JUMP_REL,        2, 0x22,  1,  3, CHG_NONE, cpu6811 | cpu6812 },
-  { "bhs", OP_JUMP_REL,        2, 0x24,  1,  3, CHG_NONE, cpu6811 | cpu6812 },
+  { "aba",  OP_NONE,           1, 0x1b,  2,  2,  CHG_HNZVC, cpu6811, 0 },
+  { "aba",  OP_NONE | OP_PAGE2,2, 0x06,  2,  2,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+  { "abx",  OP_NONE,           1, 0x3a,  3,  3,  CHG_NONE,  cpu6811, 0 },
+  { "aby",  OP_NONE | OP_PAGE2,2, 0x3a,  4,  4,  CHG_NONE,  cpu6811, 0 },
+
+  { "adca", OP_IMM8,           2, 0x89,  1,  1,  CHG_HNZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "adca", OP_DIRECT,         2, 0x99,  3,  3,  CHG_HNZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "adca", OP_IND16,          3, 0xb9,  3,  3,  CHG_HNZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "adca", OP_IX,             2, 0xa9,  4,  4,  CHG_HNZVC, cpu6811, 0 },
+  { "adca", OP_IY | OP_PAGE2,  3, 0xa9,  5,  5,  CHG_HNZVC, cpu6811, 0 },
+  { "adca", OP_IDX,            2, 0xa9,  3,  3,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+  { "adca", OP_IDX_1,          3, 0xa9,  3,  3,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+  { "adca", OP_IDX_2,          4, 0xa9,  4,  4,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+  { "adca", OP_D_IDX,          2, 0xa9,  6,  6,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+  { "adca", OP_D_IDX_2,        4, 0xa9,  6,  6,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+
+  { "adcb", OP_IMM8,           2, 0xc9,  1,  1,  CHG_HNZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "adcb", OP_DIRECT,         2, 0xd9,  3,  3,  CHG_HNZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "adcb", OP_IND16,          3, 0xf9,  3,  3,  CHG_HNZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "adcb", OP_IX,             2, 0xe9,  4,  4,  CHG_HNZVC, cpu6811, 0 },
+  { "adcb", OP_IY | OP_PAGE2,  3, 0xe9,  5,  5,  CHG_HNZVC, cpu6811, 0 },
+  { "adcb", OP_IDX,            2, 0xe9,  3,  3,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+  { "adcb", OP_IDX_1,          3, 0xe9,  3,  3,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+  { "adcb", OP_IDX_2,          4, 0xe9,  4,  4,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+  { "adcb", OP_D_IDX,          2, 0xe9,  6,  6,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+  { "adcb", OP_D_IDX_2,        4, 0xe9,  6,  6,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+
+  { "adda", OP_IMM8,           2, 0x8b,  1,  1,  CHG_HNZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "adda", OP_DIRECT,         2, 0x9b,  3,  3,  CHG_HNZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "adda", OP_IND16,          3, 0xbb,  3,  3,  CHG_HNZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "adda", OP_IX,             2, 0xab,  4,  4,  CHG_HNZVC, cpu6811, 0 },
+  { "adda", OP_IY | OP_PAGE2,  3, 0xab,  5,  5,  CHG_HNZVC, cpu6811, 0 },
+  { "adda", OP_IDX,            2, 0xab,  3,  3,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+  { "adda", OP_IDX_1,          3, 0xab,  3,  3,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+  { "adda", OP_IDX_2,          4, 0xab,  4,  4,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+  { "adda", OP_D_IDX,          2, 0xab,  6,  6,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+  { "adda", OP_D_IDX_2,        4, 0xab,  6,  6,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+
+  { "addb", OP_IMM8,           2, 0xcb,  1,  1,  CHG_HNZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "addb", OP_DIRECT,         2, 0xdb,  3,  3,  CHG_HNZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "addb", OP_IND16,          3, 0xfb,  3,  3,  CHG_HNZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "addb", OP_IX,             2, 0xeb,  4,  4,  CHG_HNZVC, cpu6811, 0 },
+  { "addb", OP_IY | OP_PAGE2,  3, 0xeb,  5,  5,  CHG_HNZVC, cpu6811, 0 },
+  { "addb", OP_IDX,            2, 0xeb,  3,  3,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+  { "addb", OP_IDX_1,          3, 0xeb,  3,  3,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+  { "addb", OP_IDX_2,          4, 0xeb,  4,  4,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+  { "addb", OP_D_IDX,          2, 0xeb,  6,  6,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+  { "addb", OP_D_IDX_2,        4, 0xeb,  6,  6,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+
+  { "addd", OP_IMM16,          3, 0xc3,  2,  2,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "addd", OP_DIRECT,         2, 0xd3,  3,  3,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "addd", OP_IND16,          3, 0xf3,  3,  3,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "addd", OP_IX,             2, 0xe3,  6,  6,  CHG_NZVC, cpu6811, 0 },
+  { "addd", OP_IY | OP_PAGE2,  3, 0xe3,  7,  7,  CHG_NZVC, cpu6811, 0 },
+  { "addd", OP_IDX,            2, 0xe3,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "addd", OP_IDX_1,          3, 0xe3,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "addd", OP_IDX_2,          4, 0xe3,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "addd", OP_D_IDX,          2, 0xe3,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "addd", OP_D_IDX_2,        4, 0xe3,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "addx", OP_IMM16 | OP_PAGE2,          3, 0x8b,  2,  2,  CHG_NZVC, cpu9s12x, 0 },
+  { "addx", OP_DIRECT | OP_PAGE2,         2, 0x9b,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "addx", OP_IND16 | OP_PAGE2,          3, 0xbb,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "addx", OP_IDX | OP_PAGE2,            2, 0xab,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "addx", OP_IDX_1 | OP_PAGE2,          3, 0xab,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "addx", OP_IDX_2 | OP_PAGE2,          4, 0xab,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "addx", OP_D_IDX | OP_PAGE2,          2, 0xab,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+  { "addx", OP_D_IDX_2 | OP_PAGE2,        4, 0xab,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "addy", OP_IMM16 | OP_PAGE2,          3, 0xcb,  2,  2,  CHG_NZVC, cpu9s12x, 0 },
+  { "addy", OP_DIRECT | OP_PAGE2,         2, 0xdb,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "addy", OP_IND16 | OP_PAGE2,          3, 0xfb,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "addy", OP_IDX | OP_PAGE2,            2, 0xeb,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "addy", OP_IDX_1 | OP_PAGE2,          3, 0xeb,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "addy", OP_IDX_2 | OP_PAGE2,          4, 0xeb,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "addy", OP_D_IDX | OP_PAGE2,          2, 0xeb,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+  { "addy", OP_D_IDX_2 | OP_PAGE2,        4, 0xeb,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "aded", OP_IMM16 | OP_PAGE2,          3, 0xc3,  2,  2,  CHG_NZVC, cpu9s12x, 0 },
+  { "aded", OP_DIRECT | OP_PAGE2,         2, 0xd3,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "aded", OP_IND16 | OP_PAGE2,          3, 0xf3,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "aded", OP_IDX | OP_PAGE2,            2, 0xe3,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "aded", OP_IDX_1 | OP_PAGE2,          3, 0xe3,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "aded", OP_IDX_2 | OP_PAGE2,          4, 0xe3,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "aded", OP_D_IDX | OP_PAGE2,          2, 0xe3,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+  { "aded", OP_D_IDX_2 | OP_PAGE2,        4, 0xe3,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "adex", OP_IMM16 | OP_PAGE2,          3, 0x89,  2,  2,  CHG_NZVC, cpu9s12x, 0 },
+  { "adex", OP_DIRECT | OP_PAGE2,         2, 0x99,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "adex", OP_IND16 | OP_PAGE2,          3, 0xb9,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "adex", OP_IDX | OP_PAGE2,            2, 0xa9,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "adex", OP_IDX_1 | OP_PAGE2,          3, 0xa9,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "adex", OP_IDX_2 | OP_PAGE2,          4, 0xa9,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "adex", OP_D_IDX | OP_PAGE2,          2, 0xa9,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+  { "adex", OP_D_IDX_2 | OP_PAGE2,        4, 0xa9,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "adey", OP_IMM16 | OP_PAGE2,          3, 0xc9,  2,  2,  CHG_NZVC, cpu9s12x, 0 },
+  { "adey", OP_DIRECT | OP_PAGE2,         2, 0xd9,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "adey", OP_IND16 | OP_PAGE2,          3, 0xf9,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "adey", OP_IDX | OP_PAGE2,            2, 0xe9,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "adey", OP_IDX_1 | OP_PAGE2,          3, 0xe9,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "adey", OP_IDX_2 | OP_PAGE2,          4, 0xe9,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "adey", OP_D_IDX | OP_PAGE2,          2, 0xe9,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+  { "adey", OP_D_IDX_2 | OP_PAGE2,        4, 0xe9,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "anda", OP_IMM8,         2, 0x84,  1,  1,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "anda", OP_DIRECT,       2, 0x94,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "anda", OP_IND16,        3, 0xb4,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "anda", OP_IX,             2, 0xa4,  4,  4,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "anda", OP_IY | OP_PAGE2,  3, 0xa4,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "anda", OP_IDX,            2, 0xa4,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "anda", OP_IDX_1,          3, 0xa4,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "anda", OP_IDX_2,          4, 0xa4,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "anda", OP_D_IDX,          2, 0xa4,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "anda", OP_D_IDX_2,        4, 0xa4,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "andb", OP_IMM8,         2, 0xc4,  1,  1,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "andb", OP_DIRECT,       2, 0xd4,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "andb", OP_IND16,        3, 0xf4,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "andb", OP_IX,             2, 0xe4,  4,  4,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "andb", OP_IY | OP_PAGE2,  3, 0xe4,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "andb", OP_IDX,            2, 0xe4,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "andb", OP_IDX_1,          3, 0xe4,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "andb", OP_IDX_2,          4, 0xe4,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "andb", OP_D_IDX,          2, 0xe4,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "andb", OP_D_IDX_2,        4, 0xe4,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "andcc", OP_IMM8,          2, 0x10,  1,  1,  CHG_ALL,  cpu6812|cpu9s12x, 0 },
+
+  { "andx", OP_IMM16 | OP_PAGE2,         2, 0x84,  1,  1,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "andx", OP_DIRECT | OP_PAGE2,       2, 0x94,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "andx", OP_IND16 | OP_PAGE2,        3, 0xb4,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "andx", OP_IDX | OP_PAGE2,            2, 0xa4,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "andx", OP_IDX_1 | OP_PAGE2,          3, 0xa4,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "andx", OP_IDX_2 | OP_PAGE2,          4, 0xa4,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "andx", OP_D_IDX | OP_PAGE2,          2, 0xa4,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "andx", OP_D_IDX_2 | OP_PAGE2,        4, 0xa4,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "andy", OP_IMM16 | OP_PAGE2,         2, 0xc4,  1,  1,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "andy", OP_DIRECT | OP_PAGE2,       2, 0xd4,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "andy", OP_IND16 | OP_PAGE2,        3, 0xf4,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "andy", OP_IDX | OP_PAGE2,            2, 0xe4,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "andy", OP_IDX_1 | OP_PAGE2,          3, 0xe4,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "andy", OP_IDX_2 | OP_PAGE2,          4, 0xe4,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "andy", OP_D_IDX | OP_PAGE2,          2, 0xe4,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "andy", OP_D_IDX_2 | OP_PAGE2,        4, 0xe4,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "asl",  OP_IND16,          3, 0x78,  4,  4,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "asl",  OP_IX,             2, 0x68,  6,  6,  CHG_NZVC, cpu6811, 0 },
+  { "asl",  OP_IY | OP_PAGE2,  3, 0x68,  7,  7,  CHG_NZVC, cpu6811, 0 },
+  { "asl",  OP_IDX,            2, 0x68,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "asl",  OP_IDX_1,          3, 0x68,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "asl",  OP_IDX_2,          4, 0x68,  5,  5,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "asl",  OP_D_IDX,          2, 0x68,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "asl",  OP_D_IDX_2,        4, 0x68,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "asla", OP_NONE,           1, 0x48,  1,  1,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "aslb", OP_NONE,           1, 0x58,  1,  1,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "asld", OP_NONE,           1, 0x05,  3,  3,  CHG_NZVC, cpu6811, 0 },
+  { "asld", OP_NONE,           1, 0x59,  1,  1,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "aslw",  OP_IND16 | OP_PAGE2,          3, 0x78,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "aslw",  OP_IDX | OP_PAGE2,            2, 0x68,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "aslw",  OP_IDX_1 | OP_PAGE2,          3, 0x68,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "aslw",  OP_IDX_2 | OP_PAGE2,          4, 0x68,  5,  5,  CHG_NZVC, cpu9s12x, 0 },
+  { "aslw",  OP_D_IDX | OP_PAGE2,          2, 0x68,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+  { "aslw",  OP_D_IDX_2 | OP_PAGE2,        4, 0x68,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "aslx", OP_NONE | OP_PAGE2,           1, 0x48,  1,  1,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "asly", OP_NONE | OP_PAGE2,           1, 0x58,  1,  1,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "asr",  OP_IND16,          3, 0x77,  4,  4,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "asr",  OP_IX,             2, 0x67,  6,  6,  CHG_NZVC, cpu6811, 0 },
+  { "asr",  OP_IY | OP_PAGE2,  3, 0x67,  7,  7,  CHG_NZVC, cpu6811, 0 },
+  { "asr",  OP_IDX,            2, 0x67,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "asr",  OP_IDX_1,          3, 0x67,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "asr",  OP_IDX_2,          4, 0x67,  5,  5,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "asr",  OP_D_IDX,          2, 0x67,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "asr",  OP_D_IDX_2,        4, 0x67,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "asra", OP_NONE,           1, 0x47,  1,  1,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "asrb", OP_NONE,           1, 0x57,  1,  1,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+
+  { "asrw",  OP_IND16 | OP_PAGE2,          3, 0x77,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "asrw",  OP_IDX | OP_PAGE2,            2, 0x67,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "asrw",  OP_IDX_1 | OP_PAGE2,          3, 0x67,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "asrw",  OP_IDX_2 | OP_PAGE2,          4, 0x67,  5,  5,  CHG_NZVC, cpu9s12x, 0 },
+  { "asrw",  OP_D_IDX | OP_PAGE2,          2, 0x67,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+  { "asrw",  OP_D_IDX_2 | OP_PAGE2,        4, 0x67,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "asrx", OP_NONE | OP_PAGE2,           1, 0x47,  1,  1,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "asry", OP_NONE | OP_PAGE2,           1, 0x57,  1,  1,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "bcc", OP_JUMP_REL,        2, 0x24,  1,  3,  CHG_NONE, cpu6811|cpu6812|cpu9s12x, 0 },
+
+  { "bclr", OP_BITMASK|OP_DIRECT,  3, 0x15,  6,  6,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "bclr", OP_BITMASK|OP_IX,       3, 0x1d,  7,  7,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "bclr", OP_BITMASK|OP_IY|OP_PAGE2, 4, 0x1d, 8, 8, CLR_V_CHG_NZ, cpu6811, 0 },
+  { "bclr", OP_BITMASK|OP_DIRECT,   3, 0x4d,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "bclr", OP_BITMASK|OP_IND16,    4, 0x1d,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "bclr", OP_BITMASK|OP_IDX,      3, 0x0d,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "bclr", OP_BITMASK|OP_IDX_1,    4, 0x0d,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "bclr", OP_BITMASK|OP_IDX_2,    5, 0x0d,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "bcs", OP_JUMP_REL,        2, 0x25,  1,  3, CHG_NONE, cpu6811 | cpu6812|cpu9s12x, 0 },
+  { "beq", OP_JUMP_REL,        2, 0x27,  1,  3, CHG_NONE, cpu6811 | cpu6812|cpu9s12x, 0 },
+  { "bge", OP_JUMP_REL,        2, 0x2c,  1,  3, CHG_NONE, cpu6811 | cpu6812|cpu9s12x, 0 },
+
+  { "bgnd", OP_NONE,           1, 0x00,  5,  5, CHG_NONE, cpu6811 | cpu6812|cpu9s12x, 0 },
+
+  { "bgt", OP_JUMP_REL,        2, 0x2e,  1,  3, CHG_NONE, cpu6811 | cpu6812|cpu9s12x, 0 },
+  { "bhi", OP_JUMP_REL,        2, 0x22,  1,  3, CHG_NONE, cpu6811 | cpu6812|cpu9s12x, 0 },
+  { "bhs", OP_JUMP_REL,        2, 0x24,  1,  3, CHG_NONE, cpu6811 | cpu6812|cpu9s12x, 0 },
   
-  { "bita", OP_IMM8,          2, 0x85,  1,  1, CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "bita", OP_DIRECT,        2, 0x95,  3,  3, CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "bita", OP_IND16,         3, 0xb5,  3,  3, CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "bita", OP_IX,             2, 0xa5,  4,  4,  CLR_V_CHG_NZ, cpu6811 },
-  { "bita", OP_IY | OP_PAGE2,  3, 0xa5,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "bita", OP_IDX,            2, 0xa5,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "bita", OP_IDX_1,          3, 0xa5,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "bita", OP_IDX_2,          4, 0xa5,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "bita", OP_D_IDX,          2, 0xa5,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-  { "bita", OP_D_IDX_2,        4, 0xa5,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "bitb", OP_IMM8,          2, 0xc5,  1,  1, CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "bitb", OP_DIRECT,        2, 0xd5,  3,  3, CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "bitb", OP_IND16,         3, 0xf5,  3,  3, CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "bitb", OP_IX,             2, 0xe5,  4,  4,  CLR_V_CHG_NZ, cpu6811 },
-  { "bitb", OP_IY | OP_PAGE2,  3, 0xe5,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "bitb", OP_IDX,            2, 0xe5,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "bitb", OP_IDX_1,          3, 0xe5,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "bitb", OP_IDX_2,          4, 0xe5,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "bitb", OP_D_IDX,          2, 0xe5,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-  { "bitb", OP_D_IDX_2,        4, 0xe5,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "ble", OP_JUMP_REL,        2, 0x2f,  1,  3, CHG_NONE, cpu6811 | cpu6812 },
-  { "blo", OP_JUMP_REL,        2, 0x25,  1,  3, CHG_NONE, cpu6811 | cpu6812 },
-  { "bls", OP_JUMP_REL,        2, 0x23,  1,  3, CHG_NONE, cpu6811 | cpu6812 },
-  { "blt", OP_JUMP_REL,        2, 0x2d,  1,  3, CHG_NONE, cpu6811 | cpu6812 },
-  { "bmi", OP_JUMP_REL,        2, 0x2b,  1,  3, CHG_NONE, cpu6811 | cpu6812 },
-  { "bne", OP_JUMP_REL,        2, 0x26,  1,  3, CHG_NONE, cpu6811 | cpu6812 },
-  { "bpl", OP_JUMP_REL,        2, 0x2a,  1,  3, CHG_NONE, cpu6811 | cpu6812 },
-  { "bra", OP_JUMP_REL,        2, 0x20,  1,  3, CHG_NONE, cpu6811 | cpu6812 },
+  { "bita", OP_IMM8,          2, 0x85,  1,  1, CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "bita", OP_DIRECT,        2, 0x95,  3,  3, CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "bita", OP_IND16,         3, 0xb5,  3,  3, CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "bita", OP_IX,             2, 0xa5,  4,  4,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "bita", OP_IY | OP_PAGE2,  3, 0xa5,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "bita", OP_IDX,            2, 0xa5,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "bita", OP_IDX_1,          3, 0xa5,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "bita", OP_IDX_2,          4, 0xa5,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "bita", OP_D_IDX,          2, 0xa5,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "bita", OP_D_IDX_2,        4, 0xa5,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "bitb", OP_IMM8,          2, 0xc5,  1,  1, CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "bitb", OP_DIRECT,        2, 0xd5,  3,  3, CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "bitb", OP_IND16,         3, 0xf5,  3,  3, CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "bitb", OP_IX,             2, 0xe5,  4,  4,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "bitb", OP_IY | OP_PAGE2,  3, 0xe5,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "bitb", OP_IDX,            2, 0xe5,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "bitb", OP_IDX_1,          3, 0xe5,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "bitb", OP_IDX_2,          4, 0xe5,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "bitb", OP_D_IDX,          2, 0xe5,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "bitb", OP_D_IDX_2,        4, 0xe5,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "bitx", OP_IMM16 | OP_PAGE2,          2, 0x85,  1,  1, CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "bitx", OP_DIRECT | OP_PAGE2,        2, 0x95,  3,  3, CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "bitx", OP_IND16 | OP_PAGE2,         3, 0xb5,  3,  3, CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "bitx", OP_IDX | OP_PAGE2,            2, 0xa5,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "bitx", OP_IDX_1 | OP_PAGE2,          3, 0xa5,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "bitx", OP_IDX_2 | OP_PAGE2,          4, 0xa5,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "bitx", OP_D_IDX | OP_PAGE2,          2, 0xa5,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "bitx", OP_D_IDX_2 | OP_PAGE2,        4, 0xa5,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "bity", OP_IMM16 | OP_PAGE2,          2, 0xc5,  1,  1, CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "bity", OP_DIRECT | OP_PAGE2,        2, 0xd5,  3,  3, CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "bity", OP_IND16 | OP_PAGE2,         3, 0xf5,  3,  3, CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "bity", OP_IDX | OP_PAGE2,            2, 0xe5,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "bity", OP_IDX_1 | OP_PAGE2,          3, 0xe5,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "bity", OP_IDX_2 | OP_PAGE2,          4, 0xe5,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "bity", OP_D_IDX | OP_PAGE2,          2, 0xe5,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "bity", OP_D_IDX_2 | OP_PAGE2,        4, 0xe5,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "ble", OP_JUMP_REL,        2, 0x2f,  1,  3, CHG_NONE, cpu6811 | cpu6812|cpu9s12x, 0 },
+  { "blo", OP_JUMP_REL,        2, 0x25,  1,  3, CHG_NONE, cpu6811 | cpu6812|cpu9s12x, 0 },
+  { "bls", OP_JUMP_REL,        2, 0x23,  1,  3, CHG_NONE, cpu6811 | cpu6812|cpu9s12x, 0 },
+  { "blt", OP_JUMP_REL,        2, 0x2d,  1,  3, CHG_NONE, cpu6811 | cpu6812|cpu9s12x, 0 },
+  { "bmi", OP_JUMP_REL,        2, 0x2b,  1,  3, CHG_NONE, cpu6811 | cpu6812|cpu9s12x, 0 },
+  { "bne", OP_JUMP_REL,        2, 0x26,  1,  3, CHG_NONE, cpu6811 | cpu6812|cpu9s12x, 0 },
+  { "bpl", OP_JUMP_REL,        2, 0x2a,  1,  3, CHG_NONE, cpu6811 | cpu6812|cpu9s12x, 0 },
+  { "bra", OP_JUMP_REL,        2, 0x20,  1,  3, CHG_NONE, cpu6811 | cpu6812|cpu9s12x, 0 },
 
   { "brclr", OP_BITMASK | OP_JUMP_REL
-           | OP_DIRECT,         4, 0x13,  6,  6, CHG_NONE, cpu6811 },
+           | OP_DIRECT,         4, 0x13,  6,  6, CHG_NONE, cpu6811, 0 },
   { "brclr", OP_BITMASK | OP_JUMP_REL
-           | OP_IX,             4, 0x1f,  7,  7, CHG_NONE, cpu6811 },
+           | OP_IX,             4, 0x1f,  7,  7, CHG_NONE, cpu6811, 0 },
   { "brclr", OP_BITMASK | OP_JUMP_REL
-           | OP_IY | OP_PAGE2,  5, 0x1f,  8,  8, CHG_NONE, cpu6811 },
+           | OP_IY | OP_PAGE2,  5, 0x1f,  8,  8, CHG_NONE, cpu6811, 0 },
   { "brclr", OP_BITMASK | OP_JUMP_REL
-           | OP_DIRECT,         4, 0x4f,  4,  4,  CHG_NONE, cpu6812 },
+           | OP_DIRECT,         4, 0x4f,  4,  4,  CHG_NONE, cpu6812|cpu9s12x, 0 },
   { "brclr", OP_BITMASK | OP_JUMP_REL
-           | OP_IND16,          5, 0x1f,  5,  5,  CHG_NONE, cpu6812 },
+           | OP_IND16,          5, 0x1f,  5,  5,  CHG_NONE, cpu6812|cpu9s12x, 0 },
   { "brclr", OP_BITMASK | OP_JUMP_REL
-           | OP_IDX,            4, 0x0f,  4,  4,  CHG_NONE, cpu6812 },
+           | OP_IDX,            4, 0x0f,  4,  4,  CHG_NONE, cpu6812|cpu9s12x, 0 },
   { "brclr", OP_BITMASK | OP_JUMP_REL
-           | OP_IDX_1,          5, 0x0f,  6,  6,  CHG_NONE, cpu6812 },
+           | OP_IDX_1,          5, 0x0f,  6,  6,  CHG_NONE, cpu6812|cpu9s12x, 0 },
   { "brclr", OP_BITMASK
            | OP_JUMP_REL
-           | OP_IDX_2,          6, 0x0f,  8,  8,  CHG_NONE, cpu6812 },
+           | OP_IDX_2,          6, 0x0f,  8,  8,  CHG_NONE, cpu6812|cpu9s12x, 0 },
 
-  { "brn", OP_JUMP_REL,         2, 0x21,  1,  3,  CHG_NONE, cpu6811|cpu6812 },
+  { "brn", OP_JUMP_REL,         2, 0x21,  1,  3,  CHG_NONE, cpu6811|cpu6812|cpu9s12x, 0 },
 
   { "brset", OP_BITMASK | OP_JUMP_REL
-           | OP_DIRECT,         4, 0x12,  6,  6,  CHG_NONE, cpu6811 },
+           | OP_DIRECT,         4, 0x12,  6,  6,  CHG_NONE, cpu6811, 0 },
   { "brset", OP_BITMASK
            | OP_JUMP_REL
-           | OP_IX,             4, 0x1e,  7,  7,  CHG_NONE, cpu6811 },
+           | OP_IX,             4, 0x1e,  7,  7,  CHG_NONE, cpu6811, 0 },
   { "brset", OP_BITMASK | OP_JUMP_REL
-           | OP_IY | OP_PAGE2,  5, 0x1e,  8,  8,  CHG_NONE, cpu6811 },
+           | OP_IY | OP_PAGE2,  5, 0x1e,  8,  8,  CHG_NONE, cpu6811, 0 },
   { "brset", OP_BITMASK | OP_JUMP_REL
-           | OP_DIRECT,   4, 0x4e,  4,  4,  CHG_NONE, cpu6812 },
+           | OP_DIRECT,   4, 0x4e,  4,  4,  CHG_NONE, cpu6812|cpu9s12x, 0 },
   { "brset", OP_BITMASK | OP_JUMP_REL
-           | OP_IND16,    5, 0x1e,  5,  5,  CHG_NONE, cpu6812 },
+           | OP_IND16,    5, 0x1e,  5,  5,  CHG_NONE, cpu6812|cpu9s12x, 0 },
   { "brset", OP_BITMASK | OP_JUMP_REL
-           | OP_IDX,            4, 0x0e,  4,  4,  CHG_NONE, cpu6812 },
+           | OP_IDX,            4, 0x0e,  4,  4,  CHG_NONE, cpu6812|cpu9s12x, 0 },
   { "brset", OP_BITMASK | OP_JUMP_REL
-           | OP_IDX_1,          5, 0x0e,  6,  6,  CHG_NONE, cpu6812 },
+           | OP_IDX_1,          5, 0x0e,  6,  6,  CHG_NONE, cpu6812|cpu9s12x, 0 },
   { "brset", OP_BITMASK | OP_JUMP_REL
-           | OP_IDX_2,          6, 0x0e,  8,  8,  CHG_NONE, cpu6812 },
+           | OP_IDX_2,          6, 0x0e,  8,  8,  CHG_NONE, cpu6812|cpu9s12x, 0 },
 
 
-  { "bset", OP_BITMASK | OP_DIRECT,   3, 0x14,  6,  6, CLR_V_CHG_NZ, cpu6811 },
-  { "bset", OP_BITMASK | OP_IX,       3, 0x1c,  7,  7, CLR_V_CHG_NZ, cpu6811 },
-  { "bset", OP_BITMASK|OP_IY|OP_PAGE2, 4, 0x1c, 8, 8, CLR_V_CHG_NZ, cpu6811 },
-  { "bset", OP_BITMASK|OP_DIRECT,   3, 0x4c,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "bset", OP_BITMASK|OP_IND16,    4, 0x1c,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "bset", OP_BITMASK|OP_IDX,      3, 0x0c,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "bset", OP_BITMASK|OP_IDX_1,    4, 0x0c,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "bset", OP_BITMASK|OP_IDX_2,    5, 0x0c,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
+  { "bset", OP_BITMASK | OP_DIRECT,   3, 0x14,  6,  6, CLR_V_CHG_NZ, cpu6811, 0 },
+  { "bset", OP_BITMASK | OP_IX,       3, 0x1c,  7,  7, CLR_V_CHG_NZ, cpu6811, 0 },
+  { "bset", OP_BITMASK|OP_IY|OP_PAGE2, 4, 0x1c, 8, 8, CLR_V_CHG_NZ, cpu6811, 0 },
+  { "bset", OP_BITMASK|OP_DIRECT,   3, 0x4c,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "bset", OP_BITMASK|OP_IND16,    4, 0x1c,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "bset", OP_BITMASK|OP_IDX,      3, 0x0c,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "bset", OP_BITMASK|OP_IDX_1,    4, 0x0c,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "bset", OP_BITMASK|OP_IDX_2,    5, 0x0c,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
 
-  { "bsr",  OP_JUMP_REL,       2, 0x8d,  6,  6, CHG_NONE, cpu6811 },
-  { "bsr",  OP_JUMP_REL,       2, 0x07,  4,  4, CHG_NONE, cpu6812 },
+  { "bsr",  OP_JUMP_REL,       2, 0x8d,  6,  6, CHG_NONE, cpu6811, 0 },
+  { "bsr",  OP_JUMP_REL,       2, 0x07,  4,  4, CHG_NONE, cpu6812|cpu9s12x, 0 },
 
-  { "bvc",  OP_JUMP_REL,       2, 0x28,  1,  3, CHG_NONE, cpu6811 | cpu6812 },
-  { "bvs",  OP_JUMP_REL,       2, 0x29,  1,  3, CHG_NONE, cpu6811 | cpu6812 },
+  { "btas", OP_BITMASK|OP_DIRECT | OP_PAGE2,   3, 0x35,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "btas", OP_BITMASK|OP_IND16 | OP_PAGE2,    4, 0x36,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "btas", OP_BITMASK|OP_IDX | OP_PAGE2,      3, 0x37,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "btas", OP_BITMASK|OP_IDX_1 | OP_PAGE2,    4, 0x37,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "btas", OP_BITMASK|OP_IDX_2 | OP_PAGE2,    5, 0x37,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "bvc",  OP_JUMP_REL,       2, 0x28,  1,  3, CHG_NONE, cpu6811 | cpu6812|cpu9s12x, 0 },
+  { "bvs",  OP_JUMP_REL,       2, 0x29,  1,  3, CHG_NONE, cpu6811 | cpu6812|cpu9s12x, 0 },
 
   { "call", OP_IND16 | OP_PAGE
-          | OP_BRANCH,         4, 0x4a,  8,  8,  CHG_NONE, cpu6812 },
+          | OP_BRANCH,         4, 0x4a,  8,  8,  CHG_NONE, cpu6812|cpu9s12x, 0 },
   { "call", OP_IDX | OP_PAGE
-          | OP_BRANCH,         3, 0x4b,  8,  8,  CHG_NONE, cpu6812 },
+          | OP_BRANCH,         3, 0x4b,  8,  8,  CHG_NONE, cpu6812|cpu9s12x, 0 },
   { "call", OP_IDX_1 | OP_PAGE
-          | OP_BRANCH,         4, 0x4b,  8,  8,  CHG_NONE, cpu6812 },
+          | OP_BRANCH,         4, 0x4b,  8,  8,  CHG_NONE, cpu6812|cpu9s12x, 0 },
   { "call", OP_IDX_2 | OP_PAGE
-          | OP_BRANCH,         5, 0x4b,  9,  9,  CHG_NONE, cpu6812 },
+          | OP_BRANCH,         5, 0x4b,  9,  9,  CHG_NONE, cpu6812|cpu9s12x, 0 },
   { "call", OP_D_IDX
-          | OP_BRANCH,         2, 0x4b, 10, 10,  CHG_NONE, cpu6812 },
+          | OP_BRANCH,         2, 0x4b, 10, 10,  CHG_NONE, cpu6812|cpu9s12x, 0 },
   { "call", OP_D_IDX_2
-          | OP_BRANCH,         4, 0x4b, 10, 10,  CHG_NONE, cpu6812 },
-
-  { "cba",  OP_NONE,           1, 0x11,  2,  2,  CHG_NZVC, cpu6811 },
-  { "cba",  OP_NONE | OP_PAGE2,2, 0x17,  2,  2,  CHG_NZVC, cpu6812 },
-
-  { "clc",  OP_NONE,           1, 0x0c,  2,  2,  CLR_C, cpu6811 },
-  { "cli",  OP_NONE,           1, 0x0e,  2,  2,  CLR_I, cpu6811 },
-
-  { "clr", OP_IND16,           3, 0x7f,  6,  6,  SET_Z_CLR_NVC, cpu6811 },
-  { "clr", OP_IX,              2, 0x6f,  6,  6,  SET_Z_CLR_NVC, cpu6811 },
-  { "clr", OP_IY | OP_PAGE2,   3, 0x6f,  7,  7,  SET_Z_CLR_NVC, cpu6811 },
-  { "clr", OP_IND16,           3, 0x79,  3,  3,  SET_Z_CLR_NVC, cpu6812 },
-  { "clr", OP_IDX,             2, 0x69,  2,  2,  SET_Z_CLR_NVC, cpu6812 },
-  { "clr", OP_IDX_1,           3, 0x69,  3,  3,  SET_Z_CLR_NVC, cpu6812 },
-  { "clr", OP_IDX_2,           4, 0x69,  4,  4,  SET_Z_CLR_NVC, cpu6812 },
-  { "clr", OP_D_IDX,           2, 0x69,  5,  5,  SET_Z_CLR_NVC, cpu6812 },
-  { "clr", OP_D_IDX_2,         4, 0x69,  5,  5,  SET_Z_CLR_NVC, cpu6812 },
-
-  { "clra", OP_NONE,           1, 0x4f,  2,  2,  SET_Z_CLR_NVC, cpu6811 },
-  { "clrb", OP_NONE,           1, 0x5f,  2,  2,  SET_Z_CLR_NVC, cpu6811 },
-  { "clra", OP_NONE,           1, 0x87,  1,  1,  SET_Z_CLR_NVC, cpu6812 },
-  { "clrb", OP_NONE,           1, 0xc7,  1,  1,  SET_Z_CLR_NVC, cpu6812 },
-
-  { "clv",  OP_NONE,           1, 0x0a,  2,  2,  CLR_V, cpu6811 },
-
-  { "cmpa", OP_IMM8,           2, 0x81,  1,  1,  CHG_NZVC, cpu6811|cpu6812 },
-  { "cmpa", OP_DIRECT,         2, 0x91,  3,  3,  CHG_NZVC, cpu6811|cpu6812 },
-  { "cmpa", OP_IND16,          3, 0xb1,  3,  3,  CHG_NZVC, cpu6811|cpu6812 },
-  { "cmpa", OP_IX,             2, 0xa1,  4,  4,  CHG_NZVC, cpu6811 },
-  { "cmpa", OP_IY | OP_PAGE2,  3, 0xa1,  5,  5,  CHG_NZVC, cpu6811 },
-  { "cmpa", OP_IDX,            2, 0xa1,  3,  3,  CHG_NZVC, cpu6812 },
-  { "cmpa", OP_IDX_1,          3, 0xa1,  3,  3,  CHG_NZVC, cpu6812 },
-  { "cmpa", OP_IDX_2,          4, 0xa1,  4,  4,  CHG_NZVC, cpu6812 },
-  { "cmpa", OP_D_IDX,          2, 0xa1,  6,  6,  CHG_NZVC, cpu6812 },
-  { "cmpa", OP_D_IDX_2,        4, 0xa1,  6,  6,  CHG_NZVC, cpu6812 },
-
-  { "cmpb", OP_IMM8,           2, 0xc1,  1,  1,  CHG_NZVC, cpu6811|cpu6812 },
-  { "cmpb", OP_DIRECT,         2, 0xd1,  3,  3,  CHG_NZVC, cpu6811|cpu6812 },
-  { "cmpb", OP_IND16,          3, 0xf1,  3,  3,  CHG_NZVC, cpu6811|cpu6812 },
-  { "cmpb", OP_IX,             2, 0xe1,  4,  4,  CHG_NZVC, cpu6811 },
-  { "cmpb", OP_IY | OP_PAGE2,  3, 0xe1,  5,  5,  CHG_NZVC, cpu6811 },
-  { "cmpb", OP_IDX,            2, 0xe1,  3,  3,  CHG_NZVC, cpu6812 },
-  { "cmpb", OP_IDX_1,          3, 0xe1,  3,  3,  CHG_NZVC, cpu6812 },
-  { "cmpb", OP_IDX_2,          4, 0xe1,  4,  4,  CHG_NZVC, cpu6812 },
-  { "cmpb", OP_D_IDX,          2, 0xe1,  6,  6,  CHG_NZVC, cpu6812 },
-  { "cmpb", OP_D_IDX_2,        4, 0xe1,  6,  6,  CHG_NZVC, cpu6812 },
-
-  { "com", OP_IND16,           3, 0x73,  6,  6,  SET_C_CLR_V_CHG_NZ, cpu6811 },
-  { "com", OP_IX,              2, 0x63,  6,  6,  SET_C_CLR_V_CHG_NZ, cpu6811 },
-  { "com", OP_IY | OP_PAGE2,   3, 0x63,  7,  7,  SET_C_CLR_V_CHG_NZ, cpu6811 },
-  { "com", OP_IND16,           3, 0x71,  4,  4,  SET_C_CLR_V_CHG_NZ, cpu6812 },
-  { "com", OP_IDX,             2, 0x61,  3,  3,  SET_C_CLR_V_CHG_NZ, cpu6812 },
-  { "com", OP_IDX_1,           3, 0x61,  4,  4,  SET_C_CLR_V_CHG_NZ, cpu6812 },
-  { "com", OP_IDX_2,           4, 0x61,  5,  5,  SET_C_CLR_V_CHG_NZ, cpu6812 },
-  { "com", OP_D_IDX,           2, 0x61,  6,  6,  SET_C_CLR_V_CHG_NZ, cpu6812 },
-  { "com", OP_D_IDX_2,         4, 0x61,  6,  6,  SET_C_CLR_V_CHG_NZ, cpu6812 },
-
-  { "coma", OP_NONE,           1, 0x43,  2,  2,  SET_C_CLR_V_CHG_NZ, cpu6811 },
-  { "coma", OP_NONE,           1, 0x41,  1,  1,  SET_C_CLR_V_CHG_NZ, cpu6812 },
-  { "comb", OP_NONE,           1, 0x53,  2,  2,  SET_C_CLR_V_CHG_NZ, cpu6811 },
-  { "comb", OP_NONE,           1, 0x51,  1,  1,  SET_C_CLR_V_CHG_NZ, cpu6812 },
-
-  { "cpd", OP_IMM16 | OP_PAGE3,  4, 0x83,  5,  5,  CHG_NZVC, cpu6811 },
-  { "cpd", OP_DIRECT | OP_PAGE3, 3, 0x93,  6,  6,  CHG_NZVC, cpu6811 },
-  { "cpd", OP_IND16 | OP_PAGE3,  4, 0xb3,  7,  7,  CHG_NZVC, cpu6811 },
-  { "cpd", OP_IX | OP_PAGE3,     3, 0xa3,  7,  7,  CHG_NZVC, cpu6811 },
-  { "cpd", OP_IY | OP_PAGE4,     3, 0xa3,  7,  7,  CHG_NZVC, cpu6811 },
-  { "cpd", OP_IMM16,             3, 0x8c,  2,  2,  CHG_NZVC, cpu6812 },
-  { "cpd", OP_DIRECT,            2, 0x9c,  3,  3,  CHG_NZVC, cpu6812 },
-  { "cpd", OP_IND16,             3, 0xbc,  3,  3,  CHG_NZVC, cpu6812 },
-  { "cpd", OP_IDX,               2, 0xac,  3,  3,  CHG_NZVC, cpu6812 },
-  { "cpd", OP_IDX_1,             3, 0xac,  3,  3,  CHG_NZVC, cpu6812 },
-  { "cpd", OP_IDX_2,             4, 0xac,  4,  4,  CHG_NZVC, cpu6812 },
-  { "cpd", OP_D_IDX,             2, 0xac,  6,  6,  CHG_NZVC, cpu6812 },
-  { "cpd", OP_D_IDX_2,           4, 0xac,  6,  6,  CHG_NZVC, cpu6812 },
-
-  { "cps", OP_IMM16,             3, 0x8f,  2,  2,  CHG_NZVC, cpu6812 },
-  { "cps", OP_DIRECT,            2, 0x9f,  3,  3,  CHG_NZVC, cpu6812 },
-  { "cps", OP_IND16,             3, 0xbf,  3,  3,  CHG_NZVC, cpu6812 },
-  { "cps", OP_IDX,               2, 0xaf,  3,  3,  CHG_NZVC, cpu6812 },
-  { "cps", OP_IDX_1,             3, 0xaf,  3,  3,  CHG_NZVC, cpu6812 },
-  { "cps", OP_IDX_2,             4, 0xaf,  4,  4,  CHG_NZVC, cpu6812 },
-  { "cps", OP_D_IDX,             2, 0xaf,  6,  6,  CHG_NZVC, cpu6812 },
-  { "cps", OP_D_IDX_2,           4, 0xaf,  6,  6,  CHG_NZVC, cpu6812 },
-
-  { "cpx", OP_IMM16,             3, 0x8c,  4,  4,  CHG_NZVC, cpu6811 },
-  { "cpx", OP_DIRECT,            2, 0x9c,  5,  5,  CHG_NZVC, cpu6811 },
-  { "cpx", OP_IND16,             3, 0xbc,  5,  5,  CHG_NZVC, cpu6811 },
-  { "cpx", OP_IX,                2, 0xac,  6,  6,  CHG_NZVC, cpu6811 },
-  { "cpx", OP_IY | OP_PAGE4,     3, 0xac,  7,  7,  CHG_NZVC, cpu6811 },
-  { "cpx", OP_IMM16,             3, 0x8e,  2,  2,  CHG_NZVC, cpu6812 },
-  { "cpx", OP_DIRECT,            2, 0x9e,  3,  3,  CHG_NZVC, cpu6812 },
-  { "cpx", OP_IND16,             3, 0xbe,  3,  3,  CHG_NZVC, cpu6812 },
-  { "cpx", OP_IDX,               2, 0xae,  3,  3,  CHG_NZVC, cpu6812 },
-  { "cpx", OP_IDX_1,             3, 0xae,  3,  3,  CHG_NZVC, cpu6812 },
-  { "cpx", OP_IDX_2,             4, 0xae,  4,  4,  CHG_NZVC, cpu6812 },
-  { "cpx", OP_D_IDX,             2, 0xae,  6,  6,  CHG_NZVC, cpu6812 },
-  { "cpx", OP_D_IDX_2,           4, 0xae,  6,  6,  CHG_NZVC, cpu6812 },
-
-  { "cpy", OP_PAGE2 | OP_IMM16,  4, 0x8c,  5,  5,  CHG_NZVC, cpu6811 },
-  { "cpy", OP_PAGE2 | OP_DIRECT, 3, 0x9c,  6,  6,  CHG_NZVC, cpu6811 },
-  { "cpy", OP_PAGE2 | OP_IY,     3, 0xac,  7,  7,  CHG_NZVC, cpu6811 },
-  { "cpy", OP_PAGE2 | OP_IND16,  4, 0xbc,  7,  7,  CHG_NZVC, cpu6811 },
-  { "cpy", OP_PAGE3 | OP_IX,     3, 0xac,  7,  7,  CHG_NZVC, cpu6811 },
-  { "cpy", OP_IMM16,             3, 0x8d,  2,  2,  CHG_NZVC, cpu6812 },
-  { "cpy", OP_DIRECT,            2, 0x9d,  3,  3,  CHG_NZVC, cpu6812 },
-  { "cpy", OP_IND16,             3, 0xbd,  3,  3,  CHG_NZVC, cpu6812 },
-  { "cpy", OP_IDX,               2, 0xad,  3,  3,  CHG_NZVC, cpu6812 },
-  { "cpy", OP_IDX_1,             3, 0xad,  3,  3,  CHG_NZVC, cpu6812 },
-  { "cpy", OP_IDX_2,             4, 0xad,  4,  4,  CHG_NZVC, cpu6812 },
-  { "cpy", OP_D_IDX,             2, 0xad,  6,  6,  CHG_NZVC, cpu6812 },
-  { "cpy", OP_D_IDX_2,           4, 0xad,  6,  6,  CHG_NZVC, cpu6812 },
+          | OP_BRANCH,         4, 0x4b, 10, 10,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+
+  { "cba",  OP_NONE,           1, 0x11,  2,  2,  CHG_NZVC, cpu6811, 0 },
+  { "cba",  OP_NONE | OP_PAGE2,2, 0x17,  2,  2,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "clc",  OP_NONE,           1, 0x0c,  2,  2,  CLR_C, cpu6811, 0 },
+  { "cli",  OP_NONE,           1, 0x0e,  2,  2,  CLR_I, cpu6811, 0 },
+
+  { "clr", OP_IND16,           3, 0x7f,  6,  6,  SET_Z_CLR_NVC, cpu6811, 0 },
+  { "clr", OP_IX,              2, 0x6f,  6,  6,  SET_Z_CLR_NVC, cpu6811, 0 },
+  { "clr", OP_IY | OP_PAGE2,   3, 0x6f,  7,  7,  SET_Z_CLR_NVC, cpu6811, 0 },
+  { "clr", OP_IND16,           3, 0x79,  3,  3,  SET_Z_CLR_NVC, cpu6812|cpu9s12x, 0 },
+  { "clr", OP_IDX,             2, 0x69,  2,  2,  SET_Z_CLR_NVC, cpu6812|cpu9s12x, 0 },
+  { "clr", OP_IDX_1,           3, 0x69,  3,  3,  SET_Z_CLR_NVC, cpu6812|cpu9s12x, 0 },
+  { "clr", OP_IDX_2,           4, 0x69,  4,  4,  SET_Z_CLR_NVC, cpu6812|cpu9s12x, 0 },
+  { "clr", OP_D_IDX,           2, 0x69,  5,  5,  SET_Z_CLR_NVC, cpu6812|cpu9s12x, 0 },
+  { "clr", OP_D_IDX_2,         4, 0x69,  5,  5,  SET_Z_CLR_NVC, cpu6812|cpu9s12x, 0 },
+
+  { "clra", OP_NONE,           1, 0x4f,  2,  2,  SET_Z_CLR_NVC, cpu6811, 0 },
+  { "clrb", OP_NONE,           1, 0x5f,  2,  2,  SET_Z_CLR_NVC, cpu6811, 0 },
+  { "clra", OP_NONE,           1, 0x87,  1,  1,  SET_Z_CLR_NVC, cpu6812|cpu9s12x, 0 },
+  { "clrb", OP_NONE,           1, 0xc7,  1,  1,  SET_Z_CLR_NVC, cpu6812|cpu9s12x, 0 },
+
+  { "clrw",  OP_IND16 | OP_PAGE2,          3, 0x79,  4,  4,  SET_Z_CLR_NVC, cpu9s12x, 0 },
+  { "clrw",  OP_IDX | OP_PAGE2,            2, 0x69,  3,  3,  SET_Z_CLR_NVC, cpu9s12x, 0 },
+  { "clrw",  OP_IDX_1 | OP_PAGE2,          3, 0x69,  4,  4,  SET_Z_CLR_NVC, cpu9s12x, 0 },
+  { "clrw",  OP_IDX_2 | OP_PAGE2,          4, 0x69,  5,  5,  SET_Z_CLR_NVC, cpu9s12x, 0 },
+  { "clrw",  OP_D_IDX | OP_PAGE2,          2, 0x69,  6,  6,  SET_Z_CLR_NVC, cpu9s12x, 0 },
+  { "clrw",  OP_D_IDX_2 | OP_PAGE2,        4, 0x69,  6,  6,  SET_Z_CLR_NVC, cpu9s12x, 0 },
+
+  { "clrx",  OP_NONE | OP_PAGE2,          3, 0x87,  4,  4,  SET_Z_CLR_NVC, cpu9s12x, 0 },
+
+  { "clry",  OP_NONE | OP_PAGE2,          3, 0xc7,  4,  4,  SET_Z_CLR_NVC, cpu9s12x, 0 },
+
+  { "clv",  OP_NONE,           1, 0x0a,  2,  2,  CLR_V, cpu6811, 0 },
+
+  { "cmpa", OP_IMM8,           2, 0x81,  1,  1,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "cmpa", OP_DIRECT,         2, 0x91,  3,  3,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "cmpa", OP_IND16,          3, 0xb1,  3,  3,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "cmpa", OP_IX,             2, 0xa1,  4,  4,  CHG_NZVC, cpu6811, 0 },
+  { "cmpa", OP_IY | OP_PAGE2,  3, 0xa1,  5,  5,  CHG_NZVC, cpu6811, 0 },
+  { "cmpa", OP_IDX,            2, 0xa1,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cmpa", OP_IDX_1,          3, 0xa1,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cmpa", OP_IDX_2,          4, 0xa1,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cmpa", OP_D_IDX,          2, 0xa1,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cmpa", OP_D_IDX_2,        4, 0xa1,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "cmpb", OP_IMM8,           2, 0xc1,  1,  1,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "cmpb", OP_DIRECT,         2, 0xd1,  3,  3,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "cmpb", OP_IND16,          3, 0xf1,  3,  3,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "cmpb", OP_IX,             2, 0xe1,  4,  4,  CHG_NZVC, cpu6811, 0 },
+  { "cmpb", OP_IY | OP_PAGE2,  3, 0xe1,  5,  5,  CHG_NZVC, cpu6811, 0 },
+  { "cmpb", OP_IDX,            2, 0xe1,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cmpb", OP_IDX_1,          3, 0xe1,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cmpb", OP_IDX_2,          4, 0xe1,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cmpb", OP_D_IDX,          2, 0xe1,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cmpb", OP_D_IDX_2,        4, 0xe1,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "com", OP_IND16,           3, 0x73,  6,  6,  SET_C_CLR_V_CHG_NZ, cpu6811, 0 },
+  { "com", OP_IX,              2, 0x63,  6,  6,  SET_C_CLR_V_CHG_NZ, cpu6811, 0 },
+  { "com", OP_IY | OP_PAGE2,   3, 0x63,  7,  7,  SET_C_CLR_V_CHG_NZ, cpu6811, 0 },
+  { "com", OP_IND16,           3, 0x71,  4,  4,  SET_C_CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "com", OP_IDX,             2, 0x61,  3,  3,  SET_C_CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "com", OP_IDX_1,           3, 0x61,  4,  4,  SET_C_CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "com", OP_IDX_2,           4, 0x61,  5,  5,  SET_C_CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "com", OP_D_IDX,           2, 0x61,  6,  6,  SET_C_CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "com", OP_D_IDX_2,         4, 0x61,  6,  6,  SET_C_CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "coma", OP_NONE,           1, 0x43,  2,  2,  SET_C_CLR_V_CHG_NZ, cpu6811, 0 },
+  { "coma", OP_NONE,           1, 0x41,  1,  1,  SET_C_CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "comb", OP_NONE,           1, 0x53,  2,  2,  SET_C_CLR_V_CHG_NZ, cpu6811, 0 },
+  { "comb", OP_NONE,           1, 0x51,  1,  1,  SET_C_CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "comw",  OP_IND16 | OP_PAGE2,          3, 0x71,  4,  4,  SET_C_CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "comw",  OP_IDX | OP_PAGE2,            2, 0x61,  3,  3,  SET_C_CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "comw",  OP_IDX_1 | OP_PAGE2,          3, 0x61,  4,  4,  SET_C_CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "comw",  OP_IDX_2 | OP_PAGE2,          4, 0x61,  5,  5,  SET_C_CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "comw",  OP_D_IDX | OP_PAGE2,          2, 0x61,  6,  6,  SET_C_CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "comw",  OP_D_IDX_2 | OP_PAGE2,        4, 0x61,  6,  6,  SET_C_CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "comx", OP_NONE | OP_PAGE2,           1, 0x41,  2,  2,  SET_C_CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "comy", OP_NONE | OP_PAGE2,           1, 0x51,  2,  2,  SET_C_CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "cpd", OP_IMM16 | OP_PAGE3,  4, 0x83,  5,  5,  CHG_NZVC, cpu6811, 0 },
+  { "cpd", OP_DIRECT | OP_PAGE3, 3, 0x93,  6,  6,  CHG_NZVC, cpu6811, 0 },
+  { "cpd", OP_IND16 | OP_PAGE3,  4, 0xb3,  7,  7,  CHG_NZVC, cpu6811, 0 },
+  { "cpd", OP_IX | OP_PAGE3,     3, 0xa3,  7,  7,  CHG_NZVC, cpu6811, 0 },
+  { "cpd", OP_IY | OP_PAGE4,     3, 0xa3,  7,  7,  CHG_NZVC, cpu6811, 0 },
+  { "cpd", OP_IMM16,             3, 0x8c,  2,  2,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cpd", OP_DIRECT,            2, 0x9c,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cpd", OP_IND16,             3, 0xbc,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cpd", OP_IDX,               2, 0xac,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cpd", OP_IDX_1,             3, 0xac,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cpd", OP_IDX_2,             4, 0xac,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cpd", OP_D_IDX,             2, 0xac,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cpd", OP_D_IDX_2,           4, 0xac,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "cped", OP_IMM16 | OP_PAGE2,             3, 0x8c,  2,  2,  CHG_NZVC, cpu9s12x, 0 },
+  { "cped", OP_DIRECT | OP_PAGE2,            2, 0x9c,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "cped", OP_IND16 | OP_PAGE2,             3, 0xbc,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "cped", OP_IDX | OP_PAGE2,               2, 0xac,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "cped", OP_IDX_1 | OP_PAGE2,             3, 0xac,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "cped", OP_IDX_2 | OP_PAGE2,             4, 0xac,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "cped", OP_D_IDX | OP_PAGE2,             2, 0xac,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+  { "cped", OP_D_IDX_2 | OP_PAGE2,           4, 0xac,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "cpes", OP_IMM16 | OP_PAGE2,             3, 0x8f,  2,  2,  CHG_NZVC, cpu9s12x, 0 },
+  { "cpes", OP_DIRECT | OP_PAGE2,            2, 0x9f,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "cpes", OP_IND16 | OP_PAGE2,             3, 0xbf,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "cpes", OP_IDX | OP_PAGE2,               2, 0xaf,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "cpes", OP_IDX_1 | OP_PAGE2,             3, 0xaf,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "cpes", OP_IDX_2 | OP_PAGE2,             4, 0xaf,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "cpes", OP_D_IDX | OP_PAGE2,             2, 0xaf,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+  { "cpes", OP_D_IDX_2 | OP_PAGE2,           4, 0xaf,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "cpex", OP_IMM16 | OP_PAGE2,             3, 0x8e,  2,  2,  CHG_NZVC, cpu9s12x, 0 },
+  { "cpex", OP_DIRECT | OP_PAGE2,            2, 0x9e,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "cpex", OP_IND16 | OP_PAGE2,             3, 0xbe,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "cpex", OP_IDX | OP_PAGE2,               2, 0xae,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "cpex", OP_IDX_1 | OP_PAGE2,             3, 0xae,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "cpex", OP_IDX_2 | OP_PAGE2,             4, 0xae,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "cpex", OP_D_IDX | OP_PAGE2,             2, 0xae,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+  { "cpex", OP_D_IDX_2 | OP_PAGE2,           4, 0xae,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "cpey", OP_IMM16 | OP_PAGE2,             3, 0x8d,  2,  2,  CHG_NZVC, cpu9s12x, 0 },
+  { "cpey", OP_DIRECT | OP_PAGE2,            2, 0x9d,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "cpey", OP_IND16 | OP_PAGE2,             3, 0xbd,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "cpey", OP_IDX | OP_PAGE2,               2, 0xad,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "cpey", OP_IDX_1 | OP_PAGE2,             3, 0xad,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "cpey", OP_IDX_2 | OP_PAGE2,             4, 0xad,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "cpey", OP_D_IDX | OP_PAGE2,             2, 0xad,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+  { "cpey", OP_D_IDX_2 | OP_PAGE2,           4, 0xad,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "cps", OP_IMM16,             3, 0x8f,  2,  2,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cps", OP_DIRECT,            2, 0x9f,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cps", OP_IND16,             3, 0xbf,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cps", OP_IDX,               2, 0xaf,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cps", OP_IDX_1,             3, 0xaf,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cps", OP_IDX_2,             4, 0xaf,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cps", OP_D_IDX,             2, 0xaf,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cps", OP_D_IDX_2,           4, 0xaf,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "cpx", OP_IMM16,             3, 0x8c,  4,  4,  CHG_NZVC, cpu6811, 0 },
+  { "cpx", OP_DIRECT,            2, 0x9c,  5,  5,  CHG_NZVC, cpu6811, 0 },
+  { "cpx", OP_IND16,             3, 0xbc,  5,  5,  CHG_NZVC, cpu6811, 0 },
+  { "cpx", OP_IX,                2, 0xac,  6,  6,  CHG_NZVC, cpu6811, 0 },
+  { "cpx", OP_IY | OP_PAGE4,     3, 0xac,  7,  7,  CHG_NZVC, cpu6811, 0 },
+  { "cpx", OP_IMM16,             3, 0x8e,  2,  2,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cpx", OP_DIRECT,            2, 0x9e,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cpx", OP_IND16,             3, 0xbe,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cpx", OP_IDX,               2, 0xae,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cpx", OP_IDX_1,             3, 0xae,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cpx", OP_IDX_2,             4, 0xae,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cpx", OP_D_IDX,             2, 0xae,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cpx", OP_D_IDX_2,           4, 0xae,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "cpy", OP_PAGE2 | OP_IMM16,  4, 0x8c,  5,  5,  CHG_NZVC, cpu6811, 0 },
+  { "cpy", OP_PAGE2 | OP_DIRECT, 3, 0x9c,  6,  6,  CHG_NZVC, cpu6811, 0 },
+  { "cpy", OP_PAGE2 | OP_IY,     3, 0xac,  7,  7,  CHG_NZVC, cpu6811, 0 },
+  { "cpy", OP_PAGE2 | OP_IND16,  4, 0xbc,  7,  7,  CHG_NZVC, cpu6811, 0 },
+  { "cpy", OP_PAGE3 | OP_IX,     3, 0xac,  7,  7,  CHG_NZVC, cpu6811, 0 },
+  { "cpy", OP_IMM16,             3, 0x8d,  2,  2,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cpy", OP_DIRECT,            2, 0x9d,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cpy", OP_IND16,             3, 0xbd,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cpy", OP_IDX,               2, 0xad,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cpy", OP_IDX_1,             3, 0xad,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cpy", OP_IDX_2,             4, 0xad,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cpy", OP_D_IDX,             2, 0xad,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "cpy", OP_D_IDX_2,           4, 0xad,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
 
   /* After 'daa', the Z flag is undefined. Mark it as changed.  */
-  { "daa", OP_NONE,              1, 0x19,  2,  2,  CHG_NZVC, cpu6811 },
-  { "daa", OP_NONE | OP_PAGE2,  2, 0x07,  3,  3,  CHG_NZVC, cpu6812 },
+  { "daa", OP_NONE,              1, 0x19,  2,  2,  CHG_NZVC, cpu6811, 0 },
+  { "daa", OP_NONE | OP_PAGE2,  2, 0x07,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
 
   { "dbeq", OP_DBEQ_MARKER
-          | OP_REG | OP_JUMP_REL,3, 0x04,  3,  3, CHG_NONE, cpu6812 },
+          | OP_REG | OP_JUMP_REL,3, 0x04,  3,  3, CHG_NONE, cpu6812|cpu9s12x, 0 },
   { "dbne", OP_DBNE_MARKER
-          | OP_REG | OP_JUMP_REL,3, 0x04,  3,  3, CHG_NONE, cpu6812 },
-
-  { "dec", OP_IX,                2, 0x6a,  6,  6,  CHG_NZV, cpu6811 },
-  { "dec", OP_IND16,             3, 0x7a,  6,  6,  CHG_NZV, cpu6811 },
-  { "dec", OP_IY | OP_PAGE2,     3, 0x6a,  7,  7,  CHG_NZV, cpu6811 },
-  { "dec", OP_IND16,             3, 0x73,  4,  4,  CHG_NZV, cpu6812 },
-  { "dec", OP_IDX,               2, 0x63,  3,  3,  CHG_NZV, cpu6812 },
-  { "dec", OP_IDX_1,             3, 0x63,  4,  4,  CHG_NZV, cpu6812 },
-  { "dec", OP_IDX_2,             4, 0x63,  5,  5,  CHG_NZV, cpu6812 },
-  { "dec", OP_D_IDX,             2, 0x63,  6,  6,  CHG_NZV, cpu6812 },
-  { "dec", OP_D_IDX_2,           4, 0x63,  6,  6,  CHG_NZV, cpu6812 },
-
-  { "des",  OP_NONE,             1, 0x34,  3,  3,  CHG_NONE, cpu6811 },
-
-  { "deca", OP_NONE,             1, 0x4a,  2,  2,  CHG_NZV, cpu6811 },
-  { "deca", OP_NONE,             1, 0x43,  1,  1,  CHG_NZV, cpu6812 },
-  { "decb", OP_NONE,             1, 0x5a,  2,  2,  CHG_NZV, cpu6811 },
-  { "decb", OP_NONE,             1, 0x53,  1,  1,  CHG_NZV, cpu6812 },
-
-  { "dex",  OP_NONE,             1, 0x09,  1,  1,  CHG_Z, cpu6812|cpu6811 },
-  { "dey",  OP_NONE | OP_PAGE2,  2, 0x09,  4,  4,  CHG_Z, cpu6811 },
-  { "dey",  OP_NONE,             1, 0x03,  1,  1,  CHG_Z, cpu6812 },
-
-  { "ediv", OP_NONE,             1, 0x11,  11,  11,  CHG_NZVC, cpu6812 },
-  { "edivs", OP_NONE | OP_PAGE2, 2, 0x14,  12,  12,  CHG_NZVC, cpu6812 },
-  { "emacs", OP_IND16 | OP_PAGE2, 4, 0x12,  13,  13,  CHG_NZVC, cpu6812 },
-
-  { "emaxd", OP_IDX | OP_PAGE2,     3, 0x1a,  4,  4,  CHG_NZVC, cpu6812 },
-  { "emaxd", OP_IDX_1 | OP_PAGE2,   4, 0x1a,  4,  4,  CHG_NZVC, cpu6812 },
-  { "emaxd", OP_IDX_2 | OP_PAGE2,   5, 0x1a,  5,  5,  CHG_NZVC, cpu6812 },
-  { "emaxd", OP_D_IDX | OP_PAGE2,   3, 0x1a,  7,  7,  CHG_NZVC, cpu6812 },
-  { "emaxd", OP_D_IDX_2 | OP_PAGE2, 5, 0x1a,  7,  7,  CHG_NZVC, cpu6812 },
-
-  { "emaxm", OP_IDX | OP_PAGE2,     3, 0x1e,  4,  4,  CHG_NZVC, cpu6812 },
-  { "emaxm", OP_IDX_1 | OP_PAGE2,   4, 0x1e,  5,  5,  CHG_NZVC, cpu6812 },
-  { "emaxm", OP_IDX_2 | OP_PAGE2,   5, 0x1e,  6,  6,  CHG_NZVC, cpu6812 },
-  { "emaxm", OP_D_IDX | OP_PAGE2,   3, 0x1e,  7,  7,  CHG_NZVC, cpu6812 },
-  { "emaxm", OP_D_IDX_2 | OP_PAGE2, 5, 0x1e,  7,  7,  CHG_NZVC, cpu6812 },
-
-  { "emind", OP_IDX | OP_PAGE2,     3, 0x1b,  4,  4,  CHG_NZVC, cpu6812 },
-  { "emind", OP_IDX_1 | OP_PAGE2,   4, 0x1b,  4,  4,  CHG_NZVC, cpu6812 },
-  { "emind", OP_IDX_2 | OP_PAGE2,   5, 0x1b,  5,  5,  CHG_NZVC, cpu6812 },
-  { "emind", OP_D_IDX | OP_PAGE2,   3, 0x1b,  7,  7,  CHG_NZVC, cpu6812 },
-  { "emind", OP_D_IDX_2 | OP_PAGE2, 5, 0x1b,  7,  7,  CHG_NZVC, cpu6812 },
-
-  { "eminm", OP_IDX | OP_PAGE2,     3, 0x1f,  4,  4,  CHG_NZVC, cpu6812 },
-  { "eminm", OP_IDX_1 | OP_PAGE2,   4, 0x1f,  5,  5,  CHG_NZVC, cpu6812 },
-  { "eminm", OP_IDX_2 | OP_PAGE2,   5, 0x1f,  6,  6,  CHG_NZVC, cpu6812 },
-  { "eminm", OP_D_IDX | OP_PAGE2,   3, 0x1f,  7,  7,  CHG_NZVC, cpu6812 },
-  { "eminm", OP_D_IDX_2 | OP_PAGE2, 5, 0x1f,  7,  7,  CHG_NZVC, cpu6812 },
-
-  { "emul",  OP_NONE,               1, 0x13,  3,  3,  CHG_NZC, cpu6812 },
-  { "emuls", OP_NONE | OP_PAGE2,    2, 0x13,  3,  3,  CHG_NZC, cpu6812 },
-
-  { "eora", OP_IMM8,         2, 0x88,  1,  1,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "eora", OP_DIRECT,       2, 0x98,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "eora", OP_IND16,        3, 0xb8,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "eora", OP_IX,             2, 0xa8,  4,  4,  CLR_V_CHG_NZ, cpu6811 },
-  { "eora", OP_IY | OP_PAGE2,  3, 0xa8,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "eora", OP_IDX,            2, 0xa8,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "eora", OP_IDX_1,          3, 0xa8,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "eora", OP_IDX_2,          4, 0xa8,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "eora", OP_D_IDX,          2, 0xa8,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-  { "eora", OP_D_IDX_2,        4, 0xa8,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "eorb", OP_IMM8,         2, 0xc8,  1,  1,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "eorb", OP_DIRECT,       2, 0xd8,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "eorb", OP_IND16,        3, 0xf8,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "eorb", OP_IX,             2, 0xe8,  4,  4,  CLR_V_CHG_NZ, cpu6811 },
-  { "eorb", OP_IY | OP_PAGE2,  3, 0xe8,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "eorb", OP_IDX,            2, 0xe8,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "eorb", OP_IDX_1,          3, 0xe8,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "eorb", OP_IDX_2,          4, 0xe8,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "eorb", OP_D_IDX,          2, 0xe8,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-  { "eorb", OP_D_IDX_2,        4, 0xe8,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "etbl", OP_IDX | OP_PAGE2,3, 0x3f, 10, 10,  CHG_NZC, cpu6812 },
-
+          | OP_REG | OP_JUMP_REL,3, 0x04,  3,  3, CHG_NONE, cpu6812|cpu9s12x, 0 },
+
+  { "dec", OP_IX,                2, 0x6a,  6,  6,  CHG_NZV, cpu6811, 0 },
+  { "dec", OP_IND16,             3, 0x7a,  6,  6,  CHG_NZV, cpu6811, 0 },
+  { "dec", OP_IY | OP_PAGE2,     3, 0x6a,  7,  7,  CHG_NZV, cpu6811, 0 },
+  { "dec", OP_IND16,             3, 0x73,  4,  4,  CHG_NZV, cpu6812|cpu9s12x, 0 },
+  { "dec", OP_IDX,               2, 0x63,  3,  3,  CHG_NZV, cpu6812|cpu9s12x, 0 },
+  { "dec", OP_IDX_1,             3, 0x63,  4,  4,  CHG_NZV, cpu6812|cpu9s12x, 0 },
+  { "dec", OP_IDX_2,             4, 0x63,  5,  5,  CHG_NZV, cpu6812|cpu9s12x, 0 },
+  { "dec", OP_D_IDX,             2, 0x63,  6,  6,  CHG_NZV, cpu6812|cpu9s12x, 0 },
+  { "dec", OP_D_IDX_2,           4, 0x63,  6,  6,  CHG_NZV, cpu6812|cpu9s12x, 0 },
+
+  { "des",  OP_NONE,             1, 0x34,  3,  3,  CHG_NONE, cpu6811, 0 },
+
+  { "deca", OP_NONE,             1, 0x4a,  2,  2,  CHG_NZV, cpu6811, 0 },
+  { "deca", OP_NONE,             1, 0x43,  1,  1,  CHG_NZV, cpu6812|cpu9s12x, 0 },
+  { "decb", OP_NONE,             1, 0x5a,  2,  2,  CHG_NZV, cpu6811, 0 },
+  { "decb", OP_NONE,             1, 0x53,  1,  1,  CHG_NZV, cpu6812|cpu9s12x, 0 },
+
+  { "decw",  OP_IND16 | OP_PAGE2,          3, 0x73,  4,  4,  CHG_NZV, cpu9s12x, 0 },
+  { "decw",  OP_IDX | OP_PAGE2,            2, 0x63,  3,  3,  CHG_NZV, cpu9s12x, 0 },
+  { "decw",  OP_IDX_1 | OP_PAGE2,          3, 0x63,  4,  4,  CHG_NZV, cpu9s12x, 0 },
+  { "decw",  OP_IDX_2 | OP_PAGE2,          4, 0x63,  5,  5,  CHG_NZV, cpu9s12x, 0 },
+  { "decw",  OP_D_IDX | OP_PAGE2,          2, 0x63,  6,  6,  CHG_NZV, cpu9s12x, 0 },
+  { "decw",  OP_D_IDX_2 | OP_PAGE2,        4, 0x63,  6,  6,  CHG_NZV, cpu9s12x, 0 },
+
+  { "decx",  OP_NONE | OP_PAGE2,          3, 0x43,  4,  4,  CHG_NZV, cpu9s12x, 0 },
+
+  { "decy",  OP_NONE | OP_PAGE2,          3, 0x53,  4,  4,  CHG_NZV, cpu9s12x, 0 },
+
+  { "dex",  OP_NONE,             1, 0x09,  1,  1,  CHG_Z, cpu6812|cpu9s12x|cpu6811, 0 },
+  { "dey",  OP_NONE | OP_PAGE2,  2, 0x09,  4,  4,  CHG_Z, cpu6811, 0 },
+  { "dey",  OP_NONE,             1, 0x03,  1,  1,  CHG_Z, cpu6812|cpu9s12x, 0 },
+
+  { "ediv", OP_NONE,             1, 0x11,  11,  11,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "edivs", OP_NONE | OP_PAGE2, 2, 0x14,  12,  12,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "emacs", OP_IND16 | OP_PAGE2, 4, 0x12,  13,  13,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "emaxd", OP_IDX | OP_PAGE2,     3, 0x1a,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "emaxd", OP_IDX_1 | OP_PAGE2,   4, 0x1a,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "emaxd", OP_IDX_2 | OP_PAGE2,   5, 0x1a,  5,  5,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "emaxd", OP_D_IDX | OP_PAGE2,   3, 0x1a,  7,  7,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "emaxd", OP_D_IDX_2 | OP_PAGE2, 5, 0x1a,  7,  7,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "emaxm", OP_IDX | OP_PAGE2,     3, 0x1e,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "emaxm", OP_IDX_1 | OP_PAGE2,   4, 0x1e,  5,  5,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "emaxm", OP_IDX_2 | OP_PAGE2,   5, 0x1e,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "emaxm", OP_D_IDX | OP_PAGE2,   3, 0x1e,  7,  7,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "emaxm", OP_D_IDX_2 | OP_PAGE2, 5, 0x1e,  7,  7,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "emind", OP_IDX | OP_PAGE2,     3, 0x1b,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "emind", OP_IDX_1 | OP_PAGE2,   4, 0x1b,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "emind", OP_IDX_2 | OP_PAGE2,   5, 0x1b,  5,  5,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "emind", OP_D_IDX | OP_PAGE2,   3, 0x1b,  7,  7,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "emind", OP_D_IDX_2 | OP_PAGE2, 5, 0x1b,  7,  7,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "eminm", OP_IDX | OP_PAGE2,     3, 0x1f,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "eminm", OP_IDX_1 | OP_PAGE2,   4, 0x1f,  5,  5,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "eminm", OP_IDX_2 | OP_PAGE2,   5, 0x1f,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "eminm", OP_D_IDX | OP_PAGE2,   3, 0x1f,  7,  7,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "eminm", OP_D_IDX_2 | OP_PAGE2, 5, 0x1f,  7,  7,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "emul",  OP_NONE,               1, 0x13,  3,  3,  CHG_NZC, cpu6812|cpu9s12x, 0 },
+  { "emuls", OP_NONE | OP_PAGE2,    2, 0x13,  3,  3,  CHG_NZC, cpu6812|cpu9s12x, 0 },
+
+  { "eora", OP_IMM8,         2, 0x88,  1,  1,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "eora", OP_DIRECT,       2, 0x98,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "eora", OP_IND16,        3, 0xb8,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "eora", OP_IX,             2, 0xa8,  4,  4,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "eora", OP_IY | OP_PAGE2,  3, 0xa8,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "eora", OP_IDX,            2, 0xa8,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "eora", OP_IDX_1,          3, 0xa8,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "eora", OP_IDX_2,          4, 0xa8,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "eora", OP_D_IDX,          2, 0xa8,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "eora", OP_D_IDX_2,        4, 0xa8,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "eorb", OP_IMM8,         2, 0xc8,  1,  1,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "eorb", OP_DIRECT,       2, 0xd8,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "eorb", OP_IND16,        3, 0xf8,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "eorb", OP_IX,             2, 0xe8,  4,  4,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "eorb", OP_IY | OP_PAGE2,  3, 0xe8,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "eorb", OP_IDX,            2, 0xe8,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "eorb", OP_IDX_1,          3, 0xe8,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "eorb", OP_IDX_2,          4, 0xe8,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "eorb", OP_D_IDX,          2, 0xe8,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "eorb", OP_D_IDX_2,        4, 0xe8,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "eorx", OP_IMM16 | OP_PAGE2,         2, 0x88,  1,  1,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "eorx", OP_DIRECT | OP_PAGE2,       2, 0x98,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "eorx", OP_IND16 | OP_PAGE2,        3, 0xb8,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "eorx", OP_IDX | OP_PAGE2,            2, 0xa8,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "eorx", OP_IDX_1 | OP_PAGE2,          3, 0xa8,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "eorx", OP_IDX_2 | OP_PAGE2,          4, 0xa8,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "eorx", OP_D_IDX | OP_PAGE2,          2, 0xa8,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "eorx", OP_D_IDX_2 | OP_PAGE2,        4, 0xa8,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "eory", OP_IMM16 | OP_PAGE2,         2, 0xc8,  1,  1,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "eory", OP_DIRECT | OP_PAGE2,       2, 0xd8,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "eory", OP_IND16 | OP_PAGE2,        3, 0xf8,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "eory", OP_IDX | OP_PAGE2,            2, 0xe8,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "eory", OP_IDX_1 | OP_PAGE2,          3, 0xe8,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "eory", OP_IDX_2 | OP_PAGE2,          4, 0xe8,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "eory", OP_D_IDX | OP_PAGE2,          2, 0xe8,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "eory", OP_D_IDX_2 | OP_PAGE2,        4, 0xe8,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "etbl", OP_IDX | OP_PAGE2,3, 0x3f, 10, 10,  CHG_NZC, cpu6812|cpu9s12x, 0 },
+
+/* S12X has more exg variants, most are pointless so not supported */
   { "exg",  OP_EXG_MARKER
-          | OP_REG | OP_REG_2, 2, 0xb7, 1, 1,  CHG_NONE, cpu6812 },
-
-  { "fdiv", OP_NONE,             1, 0x03,  3, 41, CHG_ZVC, cpu6811},
-  { "fdiv", OP_NONE | OP_PAGE2, 2, 0x11, 12, 12, CHG_ZVC, cpu6812 },
+          | OP_REG | OP_REG_2, 2, 0xb7, 1, 1,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+
+  { "fdiv", OP_NONE,             1, 0x03,  3, 41, CHG_ZVC, cpu6811, 0 },
+  { "fdiv", OP_NONE | OP_PAGE2, 2, 0x11, 12, 12, CHG_ZVC, cpu6812|cpu9s12x, 0 },
+
+  { "gldaa", OP_DIRECT | OP_PAGE2,       2, 0x96,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldaa", OP_IND16 | OP_PAGE2,        3, 0xb6,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldaa", OP_IDX | OP_PAGE2,            2, 0xa6,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldaa", OP_IDX_1 | OP_PAGE2,          3, 0xa6,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldaa", OP_IDX_2 | OP_PAGE2,          4, 0xa6,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldaa", OP_D_IDX | OP_PAGE2,          2, 0xa6,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldaa", OP_D_IDX_2 | OP_PAGE2,        4, 0xa6,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "gldab", OP_DIRECT | OP_PAGE2,       2, 0xd6,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldab", OP_IND16 | OP_PAGE2,        3, 0xf6,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldab", OP_IDX | OP_PAGE2,            2, 0xe6,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldab", OP_IDX_1 | OP_PAGE2,          3, 0xe6,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldab", OP_IDX_2 | OP_PAGE2,          4, 0xe6,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldab", OP_D_IDX | OP_PAGE2,          2, 0xe6,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldab", OP_D_IDX_2 | OP_PAGE2,        4, 0xe6,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "gldd", OP_DIRECT | OP_PAGE2,       2, 0xdc,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldd", OP_IND16 | OP_PAGE2,        3, 0xfc,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldd", OP_IDX | OP_PAGE2,            2, 0xec,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldd", OP_IDX_1 | OP_PAGE2,          3, 0xec,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldd", OP_IDX_2 | OP_PAGE2,          4, 0xec,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldd", OP_D_IDX | OP_PAGE2,          2, 0xec,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldd", OP_D_IDX_2 | OP_PAGE2,        4, 0xec,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "glds", OP_DIRECT | OP_PAGE2,       2, 0xdf,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "glds", OP_IND16 | OP_PAGE2,        3, 0xff,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "glds", OP_IDX | OP_PAGE2,            2, 0xef,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "glds", OP_IDX_1 | OP_PAGE2,          3, 0xef,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "glds", OP_IDX_2 | OP_PAGE2,          4, 0xef,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "glds", OP_D_IDX | OP_PAGE2,          2, 0xef,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "glds", OP_D_IDX_2 | OP_PAGE2,        4, 0xef,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "gldx", OP_DIRECT | OP_PAGE2,       2, 0xde,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldx", OP_IND16 | OP_PAGE2,        3, 0xfe,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldx", OP_IDX | OP_PAGE2,            2, 0xee,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldx", OP_IDX_1 | OP_PAGE2,          3, 0xee,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldx", OP_IDX_2 | OP_PAGE2,          4, 0xee,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldx", OP_D_IDX | OP_PAGE2,          2, 0xee,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldx", OP_D_IDX_2 | OP_PAGE2,        4, 0xee,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "gldy", OP_DIRECT | OP_PAGE2,       2, 0xdd,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldy", OP_IND16 | OP_PAGE2,        3, 0xfd,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldy", OP_IDX | OP_PAGE2,            2, 0xed,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldy", OP_IDX_1 | OP_PAGE2,          3, 0xed,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldy", OP_IDX_2 | OP_PAGE2,          4, 0xed,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldy", OP_D_IDX | OP_PAGE2,          2, 0xed,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gldy", OP_D_IDX_2 | OP_PAGE2,        4, 0xed,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "gstaa", OP_DIRECT | OP_PAGE2,       2, 0x5a,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstaa", OP_IND16 | OP_PAGE2,        3, 0x7a,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstaa", OP_IDX | OP_PAGE2,            2, 0x6a,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstaa", OP_IDX_1 | OP_PAGE2,          3, 0x6a,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstaa", OP_IDX_2 | OP_PAGE2,          4, 0x6a,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstaa", OP_D_IDX | OP_PAGE2,          2, 0x6a,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstaa", OP_D_IDX_2 | OP_PAGE2,        4, 0x6a,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "gstab", OP_DIRECT | OP_PAGE2,       2, 0x5b,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstab", OP_IND16 | OP_PAGE2,        3, 0x7b,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstab", OP_IDX | OP_PAGE2,            2, 0x6b,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstab", OP_IDX_1 | OP_PAGE2,          3, 0x6b,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstab", OP_IDX_2 | OP_PAGE2,          4, 0x6b,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstab", OP_D_IDX | OP_PAGE2,          2, 0x6b,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstab", OP_D_IDX_2 | OP_PAGE2,        4, 0x6b,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "gstd", OP_DIRECT | OP_PAGE2,       2, 0x5c,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstd", OP_IND16 | OP_PAGE2,        3, 0x7c,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstd", OP_IDX | OP_PAGE2,            2, 0x6c,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstd", OP_IDX_1 | OP_PAGE2,          3, 0x6c,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstd", OP_IDX_2 | OP_PAGE2,          4, 0x6c,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstd", OP_D_IDX | OP_PAGE2,          2, 0x6c,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstd", OP_D_IDX_2 | OP_PAGE2,        4, 0x6c,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "gsts", OP_DIRECT | OP_PAGE2,       2, 0x5f,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gsts", OP_IND16 | OP_PAGE2,        3, 0x6f,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gsts", OP_IDX | OP_PAGE2,            2, 0x6f,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gsts", OP_IDX_1 | OP_PAGE2,          3, 0x6f,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gsts", OP_IDX_2 | OP_PAGE2,          4, 0x6f,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gsts", OP_D_IDX | OP_PAGE2,          2, 0x6f,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gsts", OP_D_IDX_2 | OP_PAGE2,        4, 0x6f,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "gstx", OP_DIRECT | OP_PAGE2,       2, 0x5e,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstx", OP_IND16 | OP_PAGE2,        3, 0x7e,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstx", OP_IDX | OP_PAGE2,            2, 0x6e,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstx", OP_IDX_1 | OP_PAGE2,          3, 0x6e,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstx", OP_IDX_2 | OP_PAGE2,          4, 0x6e,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstx", OP_D_IDX | OP_PAGE2,          2, 0x6e,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gstx", OP_D_IDX_2 | OP_PAGE2,        4, 0x6e,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "gsty", OP_DIRECT | OP_PAGE2,       2, 0x5d,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gsty", OP_IND16 | OP_PAGE2,        3, 0x7d,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gsty", OP_IDX | OP_PAGE2,            2, 0x6d,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gsty", OP_IDX_1 | OP_PAGE2,          3, 0x6d,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gsty", OP_IDX_2 | OP_PAGE2,          4, 0x6d,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gsty", OP_D_IDX | OP_PAGE2,          2, 0x6d,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "gsty", OP_D_IDX_2 | OP_PAGE2,        4, 0x6d,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
 
   { "ibeq", OP_IBEQ_MARKER
-          | OP_REG | OP_JUMP_REL,  3, 0x04,  3,  3, CHG_NONE, cpu6812 },
+          | OP_REG | OP_JUMP_REL,  3, 0x04,  3,  3, CHG_NONE, cpu6812|cpu9s12x, 0 },
   { "ibne", OP_IBNE_MARKER
-          | OP_REG | OP_JUMP_REL,  3, 0x04,  3,  3, CHG_NONE, cpu6812 },
-
-  { "idiv",  OP_NONE,              1, 0x02,  3, 41, CLR_V_CHG_ZC, cpu6811},
-  { "idiv",  OP_NONE | OP_PAGE2,  2, 0x10, 12, 12, CLR_V_CHG_ZC, cpu6812 },
-  { "idivs", OP_NONE | OP_PAGE2,  2, 0x15, 12, 12, CHG_NZVC, cpu6812 },
-
-  { "inc", OP_IX,                  2, 0x6c,  6,  6,  CHG_NZV, cpu6811 },
-  { "inc", OP_IND16,               3, 0x7c,  6,  6,  CHG_NZV, cpu6811 },
-  { "inc", OP_IY | OP_PAGE2,       3, 0x6c,  7,  7,  CHG_NZV, cpu6811 },
-  { "inc", OP_IND16,               3, 0x72,  4,  4,  CHG_NZV, cpu6812 },
-  { "inc", OP_IDX,                 2, 0x62,  3,  3,  CHG_NZV, cpu6812 },
-  { "inc", OP_IDX_1,               3, 0x62,  4,  4,  CHG_NZV, cpu6812 },
-  { "inc", OP_IDX_2,               4, 0x62,  5,  5,  CHG_NZV, cpu6812 },
-  { "inc", OP_D_IDX,               2, 0x62,  6,  6,  CHG_NZV, cpu6812 },
-  { "inc", OP_D_IDX_2,             4, 0x62,  6,  6,  CHG_NZV, cpu6812 },
-
-  { "inca", OP_NONE,               1, 0x4c,  2,  2,  CHG_NZV, cpu6811 },
-  { "inca", OP_NONE,               1, 0x42,  1,  1,  CHG_NZV, cpu6812 },
-  { "incb", OP_NONE,               1, 0x5c,  2,  2,  CHG_NZV, cpu6811 },
-  { "incb", OP_NONE,               1, 0x52,  1,  1,  CHG_NZV, cpu6812 },
-
-  { "ins",  OP_NONE,               1, 0x31,  3,  3,  CHG_NONE, cpu6811 },
-
-  { "inx",  OP_NONE,               1, 0x08,  1,  1,  CHG_Z, cpu6811|cpu6812 },
-  { "iny",  OP_NONE |OP_PAGE2,     2, 0x08,  4,  4,  CHG_Z, cpu6811 },
-  { "iny",  OP_NONE,               1, 0x02,  1,  1,  CHG_Z, cpu6812 },
-
-  { "jmp",  OP_IND16 | OP_BRANCH,  3, 0x7e,  3,  3,  CHG_NONE, cpu6811 },
-  { "jmp",  OP_IX,                 2, 0x6e,  3,  3,  CHG_NONE, cpu6811 },
-  { "jmp",  OP_IY | OP_PAGE2,      3, 0x6e,  4,  4,  CHG_NONE, cpu6811 },
-  { "jmp",  OP_IND16 | OP_BRANCH,  3, 0x06,  3,  3,  CHG_NONE, cpu6812 },
-  { "jmp",  OP_IDX,                2, 0x05,  3,  3,  CHG_NONE, cpu6812 },
-  { "jmp",  OP_IDX_1,              3, 0x05,  3,  3,  CHG_NONE, cpu6812 },
-  { "jmp",  OP_IDX_2,              4, 0x05,  4,  4,  CHG_NONE, cpu6812 },
-  { "jmp",  OP_D_IDX,              2, 0x05,  6,  6,  CHG_NONE, cpu6812 },
-  { "jmp",  OP_D_IDX_2,            4, 0x05,  6,  6,  CHG_NONE, cpu6812 },
-
-  { "jsr",  OP_DIRECT | OP_BRANCH, 2, 0x9d,  5,  5,  CHG_NONE, cpu6811 },
-  { "jsr",  OP_IND16 | OP_BRANCH,  3, 0xbd,  6,  6,  CHG_NONE, cpu6811 },
-  { "jsr",  OP_IX,                 2, 0xad,  6,  6,  CHG_NONE, cpu6811 },
-  { "jsr",  OP_IY | OP_PAGE2,      3, 0xad,  6,  6,  CHG_NONE, cpu6811 },
-  { "jsr",  OP_DIRECT | OP_BRANCH, 2, 0x17,  4,  4,  CHG_NONE, cpu6812 },
-  { "jsr",  OP_IND16 | OP_BRANCH,  3, 0x16,  4,  3,  CHG_NONE, cpu6812 },
-  { "jsr",  OP_IDX,                2, 0x15,  4,  4,  CHG_NONE, cpu6812 },
-  { "jsr",  OP_IDX_1,              3, 0x15,  4,  4,  CHG_NONE, cpu6812 },
-  { "jsr",  OP_IDX_2,              4, 0x15,  5,  5,  CHG_NONE, cpu6812 },
-  { "jsr",  OP_D_IDX,              2, 0x15,  7,  7,  CHG_NONE, cpu6812 },
-  { "jsr",  OP_D_IDX_2,            4, 0x15,  7,  7,  CHG_NONE, cpu6812 },
-
-  { "lbcc", OP_JUMP_REL16 | OP_PAGE2,  4, 0x24,  3,  4, CHG_NONE, cpu6812 },
-  { "lbcs", OP_JUMP_REL16 | OP_PAGE2,  4, 0x25,  3,  4, CHG_NONE, cpu6812 },
-  { "lbeq", OP_JUMP_REL16 | OP_PAGE2,  4, 0x27,  3,  4, CHG_NONE, cpu6812 },
-  { "lbge", OP_JUMP_REL16 | OP_PAGE2,  4, 0x2c,  3,  4, CHG_NONE, cpu6812 },
-  { "lbgt", OP_JUMP_REL16 | OP_PAGE2,  4, 0x2e,  3,  4, CHG_NONE, cpu6812 },
-  { "lbhi", OP_JUMP_REL16 | OP_PAGE2,  4, 0x22,  3,  4, CHG_NONE, cpu6812 },
-  { "lbhs", OP_JUMP_REL16 | OP_PAGE2,  4, 0x24,  3,  4, CHG_NONE, cpu6812 },
-  { "lble", OP_JUMP_REL16 | OP_PAGE2,  4, 0x2f,  3,  4, CHG_NONE, cpu6812 },
-  { "lblo", OP_JUMP_REL16 | OP_PAGE2,  4, 0x25,  3,  4, CHG_NONE, cpu6812 },
-  { "lbls", OP_JUMP_REL16 | OP_PAGE2,  4, 0x23,  3,  4, CHG_NONE, cpu6812 },
-  { "lblt", OP_JUMP_REL16 | OP_PAGE2,  4, 0x2d,  3,  4, CHG_NONE, cpu6812 },
-  { "lbmi", OP_JUMP_REL16 | OP_PAGE2,  4, 0x2b,  3,  4, CHG_NONE, cpu6812 },
-  { "lbne", OP_JUMP_REL16 | OP_PAGE2,  4, 0x26,  3,  4, CHG_NONE, cpu6812 },
-  { "lbpl", OP_JUMP_REL16 | OP_PAGE2,  4, 0x2a,  3,  4, CHG_NONE, cpu6812 },
-  { "lbra", OP_JUMP_REL16 | OP_PAGE2,  4, 0x20,  4,  4, CHG_NONE, cpu6812 },
-  { "lbrn", OP_JUMP_REL16 | OP_PAGE2,  4, 0x21,  3,  3, CHG_NONE, cpu6812 },
-  { "lbvc", OP_JUMP_REL16 | OP_PAGE2,  4, 0x28,  3,  4, CHG_NONE, cpu6812 },
-  { "lbvs", OP_JUMP_REL16 | OP_PAGE2,  4, 0x29,  3,  4, CHG_NONE, cpu6812 },
-
-  { "ldaa", OP_IMM8,         2, 0x86,  1,  1,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "ldaa", OP_DIRECT,       2, 0x96,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "ldaa", OP_IND16,        3, 0xb6,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "ldaa", OP_IX,             2, 0xa6,  4,  4,  CLR_V_CHG_NZ, cpu6811 },
-  { "ldaa", OP_IY | OP_PAGE2,  3, 0xa6,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "ldaa", OP_IDX,            2, 0xa6,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldaa", OP_IDX_1,          3, 0xa6,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldaa", OP_IDX_2,          4, 0xa6,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldaa", OP_D_IDX,          2, 0xa6,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldaa", OP_D_IDX_2,        4, 0xa6,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "ldab", OP_IMM8,         2, 0xc6,  1,  1,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "ldab", OP_DIRECT,       2, 0xd6,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "ldab", OP_IND16,        3, 0xf6,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "ldab", OP_IX,             2, 0xe6,  4,  4,  CLR_V_CHG_NZ, cpu6811 },
-  { "ldab", OP_IY | OP_PAGE2,  3, 0xe6,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "ldab", OP_IDX,            2, 0xe6,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldab", OP_IDX_1,          3, 0xe6,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldab", OP_IDX_2,          4, 0xe6,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldab", OP_D_IDX,          2, 0xe6,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldab", OP_D_IDX_2,        4, 0xe6,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "ldd", OP_IMM16,         3, 0xcc,  2,  2,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "ldd", OP_DIRECT,        2, 0xdc,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "ldd", OP_IND16,         3, 0xfc,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "ldd", OP_IX,              2, 0xec,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "ldd", OP_IY | OP_PAGE2,   3, 0xec,  6,  6,  CLR_V_CHG_NZ, cpu6811 },
-  { "ldd", OP_IDX,             2, 0xec,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldd", OP_IDX_1,           3, 0xec,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldd", OP_IDX_2,           4, 0xec,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldd", OP_D_IDX,           2, 0xec,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldd", OP_D_IDX_2,         4, 0xec,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "lds",  OP_IMM16,          3, 0x8e,  3,  3,  CLR_V_CHG_NZ, cpu6811 },
-  { "lds",  OP_DIRECT,         2, 0x9e,  4,  4,  CLR_V_CHG_NZ, cpu6811 },
-  { "lds",  OP_IND16,          3, 0xbe,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "lds",  OP_IX,             2, 0xae,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "lds",  OP_IY | OP_PAGE2,  3, 0xae,  6,  6,  CLR_V_CHG_NZ, cpu6811 },
-  { "lds",  OP_IMM16,          3, 0xcf,  2,  2,  CLR_V_CHG_NZ, cpu6812 },
-  { "lds",  OP_DIRECT,         2, 0xdf,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "lds",  OP_IND16,          3, 0xff,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "lds",  OP_IDX,            2, 0xef,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "lds",  OP_IDX_1,          3, 0xef,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "lds",  OP_IDX_2,          4, 0xef,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "lds",  OP_D_IDX,          2, 0xef,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-  { "lds",  OP_D_IDX_2,        4, 0xef,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "ldx",  OP_IMM16,        3, 0xce,  2,  2,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "ldx",  OP_DIRECT,       2, 0xde,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "ldx",  OP_IND16,        3, 0xfe,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "ldx",  OP_IX,             2, 0xee,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "ldx",  OP_IY | OP_PAGE4,  3, 0xee,  6,  6,  CLR_V_CHG_NZ, cpu6811 },
-  { "ldx",  OP_IDX,            2, 0xee,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldx",  OP_IDX_1,          3, 0xee,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldx",  OP_IDX_2,          4, 0xee,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldx",  OP_D_IDX,          2, 0xee,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldx",  OP_D_IDX_2,        4, 0xee,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "ldy",  OP_IMM16 | OP_PAGE2,  4, 0xce, 4, 4, CLR_V_CHG_NZ, cpu6811 },
-  { "ldy",  OP_DIRECT | OP_PAGE2, 3, 0xde, 5, 5, CLR_V_CHG_NZ, cpu6811 },
-  { "ldy",  OP_IND16 | OP_PAGE2,  4, 0xfe, 6, 6, CLR_V_CHG_NZ, cpu6811 },
-  { "ldy",  OP_IX | OP_PAGE3,     3, 0xee, 6, 6, CLR_V_CHG_NZ, cpu6811 },
-  { "ldy",  OP_IY | OP_PAGE2,     3, 0xee, 6, 6, CLR_V_CHG_NZ, cpu6811 },
-  { "ldy",  OP_IMM16,          3, 0xcd,  2,  2,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldy",  OP_DIRECT,         2, 0xdd,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldy",  OP_IND16,          3, 0xfd,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldy",  OP_IDX,            2, 0xed,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldy",  OP_IDX_1,          3, 0xed,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldy",  OP_IDX_2,          4, 0xed,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldy",  OP_D_IDX,          2, 0xed,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-  { "ldy",  OP_D_IDX_2,        4, 0xed,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "leas", OP_IDX,            2, 0x1b,  2,  2,  CHG_NONE, cpu6812 },
-  { "leas", OP_IDX_1,          3, 0x1b,  2,  2,  CHG_NONE, cpu6812 },
-  { "leas", OP_IDX_2,          4, 0x1b,  2,  2,  CHG_NONE, cpu6812 },
-
-  { "leax", OP_IDX,            2, 0x1a,  2,  2,  CHG_NONE, cpu6812 },
-  { "leax", OP_IDX_1,          3, 0x1a,  2,  2,  CHG_NONE, cpu6812 },
-  { "leax", OP_IDX_2,          4, 0x1a,  2,  2,  CHG_NONE, cpu6812 },
-
-  { "leay", OP_IDX,            2, 0x19,  2,  2,  CHG_NONE, cpu6812 },
-  { "leay", OP_IDX_1,          3, 0x19,  2,  2,  CHG_NONE, cpu6812 },
-  { "leay", OP_IDX_2,          4, 0x19,  2,  2,  CHG_NONE, cpu6812 },
-
-  { "lsl",  OP_IND16,          3, 0x78,  4,  4,  CHG_NZVC, cpu6811|cpu6812 },
-  { "lsl",  OP_IX,             2, 0x68,  6,  6,  CHG_NZVC, cpu6811 },
-  { "lsl",  OP_IY | OP_PAGE2,  3, 0x68,  7,  7,  CHG_NZVC, cpu6811 },
-  { "lsl",  OP_IDX,            2, 0x68,  3,  3,  CHG_NZVC, cpu6812 },
-  { "lsl",  OP_IDX_1,          3, 0x68,  4,  4,  CHG_NZVC, cpu6812 },
-  { "lsl",  OP_IDX_2,          4, 0x68,  5,  5,  CHG_NZVC, cpu6812 },
-  { "lsl",  OP_D_IDX,          2, 0x68,  6,  6,  CHG_NZVC, cpu6812 },
-  { "lsl",  OP_D_IDX_2,        4, 0x68,  6,  6,  CHG_NZVC, cpu6812 },
-
-  { "lsla", OP_NONE,           1, 0x48,  1,  1,  CHG_NZVC, cpu6811|cpu6812 },
-  { "lslb", OP_NONE,           1, 0x58,  1,  1,  CHG_NZVC, cpu6811|cpu6812 },
-  { "lsld", OP_NONE,           1, 0x05,  3,  3,  CHG_NZVC, cpu6811 },
-  { "lsld", OP_NONE,           1, 0x59,  1,  1,  CHG_NZVC, cpu6812 },
-
-  { "lsr",  OP_IND16,        3, 0x74,  4,  4,  CLR_N_CHG_ZVC, cpu6811|cpu6812},
-  { "lsr",  OP_IX,             2, 0x64,  6,  6,  CLR_N_CHG_ZVC, cpu6811 },
-  { "lsr",  OP_IY | OP_PAGE2,  3, 0x64,  7,  7,  CLR_V_CHG_ZVC, cpu6811 },
-  { "lsr",  OP_IDX,            2, 0x64,  3,  3,  CLR_N_CHG_ZVC, cpu6812 },
-  { "lsr",  OP_IDX_1,          3, 0x64,  4,  4,  CLR_N_CHG_ZVC, cpu6812 },
-  { "lsr",  OP_IDX_2,          4, 0x64,  5,  5,  CLR_N_CHG_ZVC, cpu6812 },
-  { "lsr",  OP_D_IDX,          2, 0x64,  6,  6,  CLR_N_CHG_ZVC, cpu6812 },
-  { "lsr",  OP_D_IDX_2,        4, 0x64,  6,  6,  CLR_N_CHG_ZVC, cpu6812 },
-
-  { "lsra", OP_NONE,         1, 0x44,  1,  1,  CLR_N_CHG_ZVC, cpu6811|cpu6812},
-  { "lsrb", OP_NONE,         1, 0x54,  1,  1,  CLR_N_CHG_ZVC, cpu6811|cpu6812},
-  { "lsrd", OP_NONE,           1, 0x04,  3,  3,  CLR_N_CHG_ZVC, cpu6811 },
-  { "lsrd", OP_NONE,           1, 0x49,  1,  1,  CLR_N_CHG_ZVC, cpu6812 },
-
-  { "maxa", OP_IDX | OP_PAGE2,     3, 0x18,  4,  4,  CHG_NZVC, cpu6812 },
-  { "maxa", OP_IDX_1 | OP_PAGE2,   4, 0x18,  4,  4,  CHG_NZVC, cpu6812 },
-  { "maxa", OP_IDX_2 | OP_PAGE2,   5, 0x18,  5,  5,  CHG_NZVC, cpu6812 },
-  { "maxa", OP_D_IDX | OP_PAGE2,   3, 0x18,  7,  7,  CHG_NZVC, cpu6812 },
-  { "maxa", OP_D_IDX_2 | OP_PAGE2, 5, 0x18,  7,  7,  CHG_NZVC, cpu6812 },
-
-  { "maxm", OP_IDX | OP_PAGE2,     3, 0x1c,  4,  4,  CHG_NZVC, cpu6812 },
-  { "maxm", OP_IDX_1 | OP_PAGE2,   4, 0x1c,  5,  5,  CHG_NZVC, cpu6812 },
-  { "maxm", OP_IDX_2 | OP_PAGE2,   5, 0x1c,  6,  6,  CHG_NZVC, cpu6812 },
-  { "maxm", OP_D_IDX | OP_PAGE2,   3, 0x1c,  7,  7,  CHG_NZVC, cpu6812 },
-  { "maxm", OP_D_IDX_2 | OP_PAGE2, 5, 0x1c,  7,  7,  CHG_NZVC, cpu6812 },
-
-  { "mem",  OP_NONE,                1, 0x01,  5,  5,  CHG_HNZVC, cpu6812 },
-
-  { "mina", OP_IDX | OP_PAGE2,     3, 0x19,  4,  4,  CHG_NZVC, cpu6812 },
-  { "mina", OP_IDX_1 | OP_PAGE2,   4, 0x19,  4,  4,  CHG_NZVC, cpu6812 },
-  { "mina", OP_IDX_2 | OP_PAGE2,   5, 0x19,  5,  5,  CHG_NZVC, cpu6812 },
-  { "mina", OP_D_IDX | OP_PAGE2,   3, 0x19,  7,  7,  CHG_NZVC, cpu6812 },
-  { "mina", OP_D_IDX_2 | OP_PAGE2, 5, 0x19,  7,  7,  CHG_NZVC, cpu6812 },
-
-  { "minm", OP_IDX | OP_PAGE2,     3, 0x1d,  4,  4,  CHG_NZVC, cpu6812 },
-  { "minm", OP_IDX_1 | OP_PAGE2,   4, 0x1d,  5,  5,  CHG_NZVC, cpu6812 },
-  { "minm", OP_IDX_2 | OP_PAGE2,   5, 0x1d,  6,  6,  CHG_NZVC, cpu6812 },
-  { "minm", OP_D_IDX | OP_PAGE2,   3, 0x1d,  7,  7,  CHG_NZVC, cpu6812 },
-  { "minm", OP_D_IDX_2 | OP_PAGE2, 5, 0x1d,  7,  7,  CHG_NZVC, cpu6812 },
-
-  { "movb", OP_IMM8|OP_IND16_p2|OP_PAGE2, 5, 0x0b, 4, 4,  CHG_NONE, cpu6812 },
-  { "movb", OP_IMM8|OP_IDX_p2|OP_PAGE2,     4, 0x08,  4,  4,  CHG_NONE, cpu6812 },
-  { "movb", OP_IND16|OP_IND16_p2|OP_PAGE2,  6, 0x0c,  6,  6,  CHG_NONE, cpu6812 },
-  { "movb", OP_IND16 | OP_IDX_p2 | OP_PAGE2,    5, 0x09,  5,  5,  CHG_NONE, cpu6812 },
-  { "movb", OP_IDX | OP_IND16_p2 | OP_PAGE2,    5, 0x0d,  5,  5,  CHG_NONE, cpu6812 },
-  { "movb", OP_IDX | OP_IDX_p2 | OP_PAGE2,      4, 0x0a,  5,  5,  CHG_NONE, cpu6812 },
-
-  { "movw", OP_IMM16 | OP_IND16_p2 | OP_PAGE2,  6, 0x03,  5,  5,  CHG_NONE, cpu6812 },
-  { "movw", OP_IMM16 | OP_IDX_p2 | OP_PAGE2,    5, 0x00,  4,  4,  CHG_NONE, cpu6812 },
-  { "movw", OP_IND16 | OP_IND16_p2 | OP_PAGE2,  6, 0x04,  6,  6,  CHG_NONE, cpu6812 },
-  { "movw", OP_IND16 | OP_IDX_p2 | OP_PAGE2,    5, 0x01,  5,  5,  CHG_NONE, cpu6812 },
-  { "movw", OP_IDX | OP_IND16_p2 | OP_PAGE2,    5, 0x05,  5,  5,  CHG_NONE, cpu6812 },
-  { "movw", OP_IDX | OP_IDX_p2 | OP_PAGE2,      4, 0x02,  5,  5,  CHG_NONE, cpu6812 },
-
-  { "mul",  OP_NONE,           1, 0x3d,  3, 10,  CHG_C, cpu6811 },
-  { "mul",  OP_NONE,           1, 0x12,  3,  3,  CHG_C, cpu6812 },
-
-  { "neg",  OP_IND16,          3, 0x70,  4,  4,  CHG_NZVC, cpu6811|cpu6812 },
-  { "neg",  OP_IX,             2, 0x60,  6,  6,  CHG_NZVC, cpu6811 },
-  { "neg",  OP_IY | OP_PAGE2,  3, 0x60,  7,  7,  CHG_NZVC, cpu6811 },
-  { "neg",  OP_IDX,            2, 0x60,  3,  3,  CHG_NZVC, cpu6812 },
-  { "neg",  OP_IDX_1,          3, 0x60,  4,  4,  CHG_NZVC, cpu6812 },
-  { "neg",  OP_IDX_2,          4, 0x60,  5,  5,  CHG_NZVC, cpu6812 },
-  { "neg",  OP_D_IDX,          2, 0x60,  6,  6,  CHG_NZVC, cpu6812 },
-  { "neg",  OP_D_IDX_2,        4, 0x60,  6,  6,  CHG_NZVC, cpu6812 },
-
-  { "nega", OP_NONE,           1, 0x40,  1,  1,  CHG_NZVC, cpu6811|cpu6812 },
-  { "negb", OP_NONE,           1, 0x50,  1,  1,  CHG_NZVC, cpu6811|cpu6812 },
-  { "nop",  OP_NONE,           1, 0x01,  2,  2,  CHG_NONE, cpu6811 },
-  { "nop",  OP_NONE,           1, 0xa7,  1,  1,  CHG_NONE, cpu6812 },
-
-  { "oraa", OP_IMM8,         2, 0x8a,  1,  1,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "oraa", OP_DIRECT,       2, 0x9a,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "oraa", OP_IND16,        3, 0xba,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "oraa", OP_IX,             2, 0xaa,  4,  4,  CLR_V_CHG_NZ, cpu6811 },
-  { "oraa", OP_IY | OP_PAGE2,  3, 0xaa,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "oraa", OP_IDX,            2, 0xaa,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "oraa", OP_IDX_1,          3, 0xaa,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "oraa", OP_IDX_2,          4, 0xaa,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "oraa", OP_D_IDX,          2, 0xaa,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-  { "oraa", OP_D_IDX_2,        4, 0xaa,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "orab", OP_IMM8,         2, 0xca,  1,  1,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "orab", OP_DIRECT,       2, 0xda,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "orab", OP_IND16,        3, 0xfa,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812 },
-  { "orab", OP_IX,             2, 0xea,  4,  4,  CLR_V_CHG_NZ, cpu6811 },
-  { "orab", OP_IY | OP_PAGE2,  3, 0xea,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "orab", OP_IDX,            2, 0xea,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "orab", OP_IDX_1,          3, 0xea,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "orab", OP_IDX_2,          4, 0xea,  4,  4,  CLR_V_CHG_NZ, cpu6812 },
-  { "orab", OP_D_IDX,          2, 0xea,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-  { "orab", OP_D_IDX_2,        4, 0xea,  6,  6,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "orcc", OP_IMM8,           2, 0x14,  1,  1,  CHG_ALL, cpu6812 },
-
-  { "psha", OP_NONE,           1, 0x36,  2,  2,  CHG_NONE, cpu6811|cpu6812 },
-  { "pshb", OP_NONE,           1, 0x37,  2,  2,  CHG_NONE, cpu6811|cpu6812 },
-  { "pshc", OP_NONE,           1, 0x39,  2,  2,  CHG_NONE, cpu6812 },
-  { "pshd", OP_NONE,           1, 0x3b,  2,  2,  CHG_NONE, cpu6812 },
-  { "pshx", OP_NONE,           1, 0x3c,  4,  4,  CHG_NONE, cpu6811 },
-  { "pshx", OP_NONE,           1, 0x34,  2,  2,  CHG_NONE, cpu6812 },
-  { "pshy", OP_NONE | OP_PAGE2,2, 0x3c,  5,  5,  CHG_NONE, cpu6811 },
-  { "pshy", OP_NONE,           1, 0x35,  2,  2,  CHG_NONE, cpu6812 },
-
-  { "pula", OP_NONE,           1, 0x32,  3,  3,  CHG_NONE, cpu6811|cpu6812 },
-  { "pulb", OP_NONE,           1, 0x33,  3,  3,  CHG_NONE, cpu6811|cpu6812 },
-  { "pulc", OP_NONE,           1, 0x38,  3,  3,  CHG_NONE, cpu6812 },
-  { "puld", OP_NONE,           1, 0x3a,  3,  3,  CHG_NONE, cpu6812 },
-  { "pulx", OP_NONE,           1, 0x38,  5,  5,  CHG_NONE, cpu6811 },
-  { "pulx", OP_NONE,           1, 0x30,  3,  3,  CHG_NONE, cpu6812 },
-  { "puly", OP_NONE | OP_PAGE2,2, 0x38,  6,  6,  CHG_NONE, cpu6811 },
-  { "puly", OP_NONE,           1, 0x31,  3,  3,  CHG_NONE, cpu6812 },
-
-  { "rev",  OP_NONE | OP_PAGE2, 2, 0x3a,  _M,  _M,  CHG_HNZVC, cpu6812 },
-  { "revw", OP_NONE | OP_PAGE2, 2, 0x3b,  _M,  _M,  CHG_HNZVC, cpu6812 },
-
-  { "rol",  OP_IND16,          3, 0x79,  6,  6,  CHG_NZVC, cpu6811 },
-  { "rol",  OP_IX,             2, 0x69,  6,  6,  CHG_NZVC, cpu6811 },
-  { "rol",  OP_IY | OP_PAGE2,  3, 0x69,  7,  7,  CHG_NZVC, cpu6811 },
-  { "rol",  OP_IND16,          3, 0x75,  4,  4,  CHG_NZVC, cpu6812 },
-  { "rol",  OP_IDX,            2, 0x65,  3,  3,  CHG_NZVC, cpu6812 },
-  { "rol",  OP_IDX_1,          3, 0x65,  4,  4,  CHG_NZVC, cpu6812 },
-  { "rol",  OP_IDX_2,          4, 0x65,  5,  5,  CHG_NZVC, cpu6812 },
-  { "rol",  OP_D_IDX,          2, 0x65,  6,  6,  CHG_NZVC, cpu6812 },
-  { "rol",  OP_D_IDX_2,        4, 0x65,  6,  6,  CHG_NZVC, cpu6812 },
-
-  { "rola", OP_NONE,           1, 0x49,  2,  2,  CHG_NZVC, cpu6811 },
-  { "rola", OP_NONE,           1, 0x45,  1,  1,  CHG_NZVC, cpu6812 },
-  { "rolb", OP_NONE,           1, 0x59,  2,  2,  CHG_NZVC, cpu6811 },
-  { "rolb", OP_NONE,           1, 0x55,  1,  1,  CHG_NZVC, cpu6812 },
-
-  { "ror",  OP_IND16,          3, 0x76,  4,  4,  CHG_NZVC, cpu6811|cpu6812 },
-  { "ror",  OP_IX,             2, 0x66,  6,  6,  CHG_NZVC, cpu6811 },
-  { "ror",  OP_IY | OP_PAGE2,  3, 0x66,  7,  7,  CHG_NZVC, cpu6811 },
-  { "ror",  OP_IDX,            2, 0x66,  3,  3,  CHG_NZVC, cpu6812 },
-  { "ror",  OP_IDX_1,          3, 0x66,  4,  4,  CHG_NZVC, cpu6812 },
-  { "ror",  OP_IDX_2,          4, 0x66,  5,  5,  CHG_NZVC, cpu6812 },
-  { "ror",  OP_D_IDX,          2, 0x66,  6,  6,  CHG_NZVC, cpu6812 },
-  { "ror",  OP_D_IDX_2,        4, 0x66,  6,  6,  CHG_NZVC, cpu6812 },
-
-  { "rora", OP_NONE,           1, 0x46,  1,  1,  CHG_NZVC, cpu6811|cpu6812 },
-  { "rorb", OP_NONE,           1, 0x56,  1,  1,  CHG_NZVC, cpu6811|cpu6812 },
-
-  { "rtc",  OP_NONE,           1, 0x0a,  6,  6,  CHG_NONE, cpu6812 },
-  { "rti",  OP_NONE,           1, 0x3b, 12, 12,  CHG_ALL, cpu6811},
-  { "rti",  OP_NONE,           1, 0x0b,  8, 10,  CHG_ALL, cpu6812},
-  { "rts",  OP_NONE,           1, 0x39,  5,  5,  CHG_NONE, cpu6811 },
-  { "rts",  OP_NONE,           1, 0x3d,  5,  5,  CHG_NONE, cpu6812 },
-
-  { "sba",  OP_NONE,             1, 0x10,  2,  2,  CHG_NZVC, cpu6811 },
-  { "sba",  OP_NONE | OP_PAGE2, 2, 0x16,  2,  2,  CHG_NZVC, cpu6812 },
-
-  { "sbca", OP_IMM8,           2, 0x82,  1,  1,  CHG_NZVC, cpu6811|cpu6812 },
-  { "sbca", OP_DIRECT,         2, 0x92,  3,  3,  CHG_NZVC, cpu6811|cpu6812 },
-  { "sbca", OP_IND16,          3, 0xb2,  3,  3,  CHG_NZVC, cpu6811|cpu6812 },
-  { "sbca", OP_IX,             2, 0xa2,  4,  4,  CHG_NZVC, cpu6811 },
-  { "sbca", OP_IY | OP_PAGE2,  3, 0xa2,  5,  5,  CHG_NZVC, cpu6811 },
-  { "sbca", OP_IDX,            2, 0xa2,  3,  3,  CHG_NZVC, cpu6812 },
-  { "sbca", OP_IDX_1,          3, 0xa2,  3,  3,  CHG_NZVC, cpu6812 },
-  { "sbca", OP_IDX_2,          4, 0xa2,  4,  4,  CHG_NZVC, cpu6812 },
-  { "sbca", OP_D_IDX,          2, 0xa2,  6,  6,  CHG_NZVC, cpu6812 },
-  { "sbca", OP_D_IDX_2,        4, 0xa2,  6,  6,  CHG_NZVC, cpu6812 },
-
-  { "sbcb", OP_IMM8,           2, 0xc2,  1,  1,  CHG_NZVC, cpu6811|cpu6812 },
-  { "sbcb", OP_DIRECT,         2, 0xd2,  3,  3,  CHG_NZVC, cpu6811|cpu6812 },
-  { "sbcb", OP_IND16,          3, 0xf2,  3,  3,  CHG_NZVC, cpu6811|cpu6812 },
-  { "sbcb", OP_IX,             2, 0xe2,  4,  4,  CHG_NZVC, cpu6811 },
-  { "sbcb", OP_IY | OP_PAGE2,  3, 0xe2,  5,  5,  CHG_NZVC, cpu6811 },
-  { "sbcb", OP_IDX,            2, 0xe2,  3,  3,  CHG_NZVC, cpu6812 },
-  { "sbcb", OP_IDX_1,          3, 0xe2,  3,  3,  CHG_NZVC, cpu6812 },
-  { "sbcb", OP_IDX_2,          4, 0xe2,  4,  4,  CHG_NZVC, cpu6812 },
-  { "sbcb", OP_D_IDX,          2, 0xe2,  6,  6,  CHG_NZVC, cpu6812 },
-  { "sbcb", OP_D_IDX_2,        4, 0xe2,  6,  6,  CHG_NZVC, cpu6812 },
-
-  { "sec",  OP_NONE,           1, 0x0d,  2,  2,  SET_C, cpu6811 },
-  { "sei",  OP_NONE,           1, 0x0f,  2,  2,  SET_I, cpu6811 },
-  { "sev",  OP_NONE,           1, 0x0b,  2,  2,  SET_V, cpu6811 },
-
+          | OP_REG | OP_JUMP_REL,  3, 0x04,  3,  3, CHG_NONE, cpu6812|cpu9s12x, 0 },
+
+  { "idiv",  OP_NONE,              1, 0x02,  3, 41, CLR_V_CHG_ZC, cpu6811, 0 },
+  { "idiv",  OP_NONE | OP_PAGE2,  2, 0x10, 12, 12, CLR_V_CHG_ZC, cpu6812|cpu9s12x, 0 },
+  { "idivs", OP_NONE | OP_PAGE2,  2, 0x15, 12, 12, CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "inc", OP_IX,                  2, 0x6c,  6,  6,  CHG_NZV, cpu6811, 0 },
+  { "inc", OP_IND16,               3, 0x7c,  6,  6,  CHG_NZV, cpu6811, 0 },
+  { "inc", OP_IY | OP_PAGE2,       3, 0x6c,  7,  7,  CHG_NZV, cpu6811, 0 },
+  { "inc", OP_IND16,               3, 0x72,  4,  4,  CHG_NZV, cpu6812|cpu9s12x, 0 },
+  { "inc", OP_IDX,                 2, 0x62,  3,  3,  CHG_NZV, cpu6812|cpu9s12x, 0 },
+  { "inc", OP_IDX_1,               3, 0x62,  4,  4,  CHG_NZV, cpu6812|cpu9s12x, 0 },
+  { "inc", OP_IDX_2,               4, 0x62,  5,  5,  CHG_NZV, cpu6812|cpu9s12x, 0 },
+  { "inc", OP_D_IDX,               2, 0x62,  6,  6,  CHG_NZV, cpu6812|cpu9s12x, 0 },
+  { "inc", OP_D_IDX_2,             4, 0x62,  6,  6,  CHG_NZV, cpu6812|cpu9s12x, 0 },
+
+  { "inca", OP_NONE,               1, 0x4c,  2,  2,  CHG_NZV, cpu6811, 0 },
+  { "inca", OP_NONE,               1, 0x42,  1,  1,  CHG_NZV, cpu6812|cpu9s12x, 0 },
+  { "incb", OP_NONE,               1, 0x5c,  2,  2,  CHG_NZV, cpu6811, 0 },
+  { "incb", OP_NONE,               1, 0x52,  1,  1,  CHG_NZV, cpu6812|cpu9s12x, 0 },
+
+  { "incw",  OP_IND16 | OP_PAGE2,          3, 0x72,  4,  4,  CHG_NZV, cpu9s12x, 0 },
+  { "incw",  OP_IDX | OP_PAGE2,            2, 0x62,  3,  3,  CHG_NZV, cpu9s12x, 0 },
+  { "incw",  OP_IDX_1 | OP_PAGE2,          3, 0x62,  4,  4,  CHG_NZV, cpu9s12x, 0 },
+  { "incw",  OP_IDX_2 | OP_PAGE2,          4, 0x62,  5,  5,  CHG_NZV, cpu9s12x, 0 },
+  { "incw",  OP_D_IDX | OP_PAGE2,          2, 0x62,  6,  6,  CHG_NZV, cpu9s12x, 0 },
+  { "incw",  OP_D_IDX_2 | OP_PAGE2,        4, 0x62,  6,  6,  CHG_NZV, cpu9s12x, 0 },
+
+  { "incx",  OP_NONE | OP_PAGE2,          3, 0x42,  4,  4,  CHG_NZV, cpu9s12x, 0 },
+
+  { "incy",  OP_NONE | OP_PAGE2,          3, 0x52,  4,  4,  CHG_NZV, cpu9s12x, 0 },
+
+  { "ins",  OP_NONE,               1, 0x31,  3,  3,  CHG_NONE, cpu6811, 0 },
+
+  { "inx",  OP_NONE,               1, 0x08,  1,  1,  CHG_Z, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "iny",  OP_NONE |OP_PAGE2,     2, 0x08,  4,  4,  CHG_Z, cpu6811, 0 },
+  { "iny",  OP_NONE,               1, 0x02,  1,  1,  CHG_Z, cpu6812|cpu9s12x, 0 },
+
+  { "jmp",  OP_IND16 | OP_BRANCH,  3, 0x7e,  3,  3,  CHG_NONE, cpu6811, 0 },
+  { "jmp",  OP_IX,                 2, 0x6e,  3,  3,  CHG_NONE, cpu6811, 0 },
+  { "jmp",  OP_IY | OP_PAGE2,      3, 0x6e,  4,  4,  CHG_NONE, cpu6811, 0 },
+  { "jmp",  OP_IND16 | OP_BRANCH,  3, 0x06,  3,  3,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "jmp",  OP_IDX,                2, 0x05,  3,  3,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "jmp",  OP_IDX_1,              3, 0x05,  3,  3,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "jmp",  OP_IDX_2,              4, 0x05,  4,  4,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "jmp",  OP_D_IDX,              2, 0x05,  6,  6,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "jmp",  OP_D_IDX_2,            4, 0x05,  6,  6,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+
+  { "jsr",  OP_DIRECT | OP_BRANCH, 2, 0x9d,  5,  5,  CHG_NONE, cpu6811, 0 },
+  { "jsr",  OP_IND16 | OP_BRANCH,  3, 0xbd,  6,  6,  CHG_NONE, cpu6811, 0 },
+  { "jsr",  OP_IX,                 2, 0xad,  6,  6,  CHG_NONE, cpu6811, 0 },
+  { "jsr",  OP_IY | OP_PAGE2,      3, 0xad,  6,  6,  CHG_NONE, cpu6811, 0 },
+  { "jsr",  OP_DIRECT | OP_BRANCH, 2, 0x17,  4,  4,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "jsr",  OP_IND16 | OP_BRANCH,  3, 0x16,  4,  3,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "jsr",  OP_IDX,                2, 0x15,  4,  4,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "jsr",  OP_IDX_1,              3, 0x15,  4,  4,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "jsr",  OP_IDX_2,              4, 0x15,  5,  5,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "jsr",  OP_D_IDX,              2, 0x15,  7,  7,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "jsr",  OP_D_IDX_2,            4, 0x15,  7,  7,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+
+  { "lbcc", OP_JUMP_REL16 | OP_PAGE2,  4, 0x24,  3,  4, CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "lbcs", OP_JUMP_REL16 | OP_PAGE2,  4, 0x25,  3,  4, CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "lbeq", OP_JUMP_REL16 | OP_PAGE2,  4, 0x27,  3,  4, CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "lbge", OP_JUMP_REL16 | OP_PAGE2,  4, 0x2c,  3,  4, CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "lbgt", OP_JUMP_REL16 | OP_PAGE2,  4, 0x2e,  3,  4, CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "lbhi", OP_JUMP_REL16 | OP_PAGE2,  4, 0x22,  3,  4, CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "lbhs", OP_JUMP_REL16 | OP_PAGE2,  4, 0x24,  3,  4, CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "lble", OP_JUMP_REL16 | OP_PAGE2,  4, 0x2f,  3,  4, CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "lblo", OP_JUMP_REL16 | OP_PAGE2,  4, 0x25,  3,  4, CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "lbls", OP_JUMP_REL16 | OP_PAGE2,  4, 0x23,  3,  4, CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "lblt", OP_JUMP_REL16 | OP_PAGE2,  4, 0x2d,  3,  4, CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "lbmi", OP_JUMP_REL16 | OP_PAGE2,  4, 0x2b,  3,  4, CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "lbne", OP_JUMP_REL16 | OP_PAGE2,  4, 0x26,  3,  4, CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "lbpl", OP_JUMP_REL16 | OP_PAGE2,  4, 0x2a,  3,  4, CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "lbra", OP_JUMP_REL16 | OP_PAGE2,  4, 0x20,  4,  4, CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "lbrn", OP_JUMP_REL16 | OP_PAGE2,  4, 0x21,  3,  3, CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "lbvc", OP_JUMP_REL16 | OP_PAGE2,  4, 0x28,  3,  4, CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "lbvs", OP_JUMP_REL16 | OP_PAGE2,  4, 0x29,  3,  4, CHG_NONE, cpu6812|cpu9s12x, 0 },
+
+  { "ldaa", OP_IMM8,         2, 0x86,  1,  1,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "ldaa", OP_DIRECT,       2, 0x96,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "ldaa", OP_IND16,        3, 0xb6,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "ldaa", OP_IX,             2, 0xa6,  4,  4,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "ldaa", OP_IY | OP_PAGE2,  3, 0xa6,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "ldaa", OP_IDX,            2, 0xa6,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldaa", OP_IDX_1,          3, 0xa6,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldaa", OP_IDX_2,          4, 0xa6,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldaa", OP_D_IDX,          2, 0xa6,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldaa", OP_D_IDX_2,        4, 0xa6,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "ldab", OP_IMM8,         2, 0xc6,  1,  1,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "ldab", OP_DIRECT,       2, 0xd6,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "ldab", OP_IND16,        3, 0xf6,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "ldab", OP_IX,             2, 0xe6,  4,  4,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "ldab", OP_IY | OP_PAGE2,  3, 0xe6,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "ldab", OP_IDX,            2, 0xe6,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldab", OP_IDX_1,          3, 0xe6,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldab", OP_IDX_2,          4, 0xe6,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldab", OP_D_IDX,          2, 0xe6,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldab", OP_D_IDX_2,        4, 0xe6,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "ldd", OP_IMM16,         3, 0xcc,  2,  2,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "ldd", OP_DIRECT,        2, 0xdc,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "ldd", OP_IND16,         3, 0xfc,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "ldd", OP_IX,              2, 0xec,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "ldd", OP_IY | OP_PAGE2,   3, 0xec,  6,  6,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "ldd", OP_IDX,             2, 0xec,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldd", OP_IDX_1,           3, 0xec,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldd", OP_IDX_2,           4, 0xec,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldd", OP_D_IDX,           2, 0xec,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldd", OP_D_IDX_2,         4, 0xec,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "lds",  OP_IMM16,          3, 0x8e,  3,  3,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "lds",  OP_DIRECT,         2, 0x9e,  4,  4,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "lds",  OP_IND16,          3, 0xbe,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "lds",  OP_IX,             2, 0xae,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "lds",  OP_IY | OP_PAGE2,  3, 0xae,  6,  6,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "lds",  OP_IMM16,          3, 0xcf,  2,  2,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "lds",  OP_DIRECT,         2, 0xdf,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "lds",  OP_IND16,          3, 0xff,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "lds",  OP_IDX,            2, 0xef,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "lds",  OP_IDX_1,          3, 0xef,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "lds",  OP_IDX_2,          4, 0xef,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "lds",  OP_D_IDX,          2, 0xef,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "lds",  OP_D_IDX_2,        4, 0xef,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "ldx",  OP_IMM16,        3, 0xce,  2,  2,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "ldx",  OP_DIRECT,       2, 0xde,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "ldx",  OP_IND16,        3, 0xfe,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "ldx",  OP_IX,             2, 0xee,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "ldx",  OP_IY | OP_PAGE4,  3, 0xee,  6,  6,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "ldx",  OP_IDX,            2, 0xee,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldx",  OP_IDX_1,          3, 0xee,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldx",  OP_IDX_2,          4, 0xee,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldx",  OP_D_IDX,          2, 0xee,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldx",  OP_D_IDX_2,        4, 0xee,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "ldy",  OP_IMM16 | OP_PAGE2,  4, 0xce, 4, 4, CLR_V_CHG_NZ, cpu6811, 0 },
+  { "ldy",  OP_DIRECT | OP_PAGE2, 3, 0xde, 5, 5, CLR_V_CHG_NZ, cpu6811, 0 },
+  { "ldy",  OP_IND16 | OP_PAGE2,  4, 0xfe, 6, 6, CLR_V_CHG_NZ, cpu6811, 0 },
+  { "ldy",  OP_IX | OP_PAGE3,     3, 0xee, 6, 6, CLR_V_CHG_NZ, cpu6811, 0 },
+  { "ldy",  OP_IY | OP_PAGE2,     3, 0xee, 6, 6, CLR_V_CHG_NZ, cpu6811, 0 },
+  { "ldy",  OP_IMM16,          3, 0xcd,  2,  2,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldy",  OP_DIRECT,         2, 0xdd,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldy",  OP_IND16,          3, 0xfd,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldy",  OP_IDX,            2, 0xed,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldy",  OP_IDX_1,          3, 0xed,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldy",  OP_IDX_2,          4, 0xed,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldy",  OP_D_IDX,          2, 0xed,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "ldy",  OP_D_IDX_2,        4, 0xed,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "leas", OP_IDX,            2, 0x1b,  2,  2,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "leas", OP_IDX_1,          3, 0x1b,  2,  2,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "leas", OP_IDX_2,          4, 0x1b,  2,  2,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+
+  { "leax", OP_IDX,            2, 0x1a,  2,  2,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "leax", OP_IDX_1,          3, 0x1a,  2,  2,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "leax", OP_IDX_2,          4, 0x1a,  2,  2,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+
+  { "leay", OP_IDX,            2, 0x19,  2,  2,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "leay", OP_IDX_1,          3, 0x19,  2,  2,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "leay", OP_IDX_2,          4, 0x19,  2,  2,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+
+  { "lsl",  OP_IND16,          3, 0x78,  4,  4,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "lsl",  OP_IX,             2, 0x68,  6,  6,  CHG_NZVC, cpu6811, 0 },
+  { "lsl",  OP_IY | OP_PAGE2,  3, 0x68,  7,  7,  CHG_NZVC, cpu6811, 0 },
+  { "lsl",  OP_IDX,            2, 0x68,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "lsl",  OP_IDX_1,          3, 0x68,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "lsl",  OP_IDX_2,          4, 0x68,  5,  5,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "lsl",  OP_D_IDX,          2, 0x68,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "lsl",  OP_D_IDX_2,        4, 0x68,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "lsla", OP_NONE,           1, 0x48,  1,  1,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "lslb", OP_NONE,           1, 0x58,  1,  1,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "lsld", OP_NONE,           1, 0x05,  3,  3,  CHG_NZVC, cpu6811, 0 },
+  { "lsld", OP_NONE,           1, 0x59,  1,  1,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+/* lslw is the same as aslw. */
+  { "lslw",  OP_IND16 | OP_PAGE2,          3, 0x78,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "lslw",  OP_IDX | OP_PAGE2,            2, 0x68,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "lslw",  OP_IDX_1 | OP_PAGE2,          3, 0x68,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "lslw",  OP_IDX_2 | OP_PAGE2,          4, 0x68,  5,  5,  CHG_NZVC, cpu9s12x, 0 },
+  { "lslw",  OP_D_IDX | OP_PAGE2,          2, 0x68,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+  { "lslw",  OP_D_IDX_2 | OP_PAGE2,        4, 0x68,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+/* lslx is same as aslx. */
+  { "lslx", OP_NONE | OP_PAGE2,           1, 0x48,  1,  1,  CHG_NZVC, cpu9s12x, 0 },
+/* lsly is the same as asly. */
+  { "lsly", OP_NONE | OP_PAGE2,           1, 0x58,  1,  1,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "lsr",  OP_IND16,        3, 0x74,  4,  4,  CLR_N_CHG_ZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "lsr",  OP_IX,             2, 0x64,  6,  6,  CLR_N_CHG_ZVC, cpu6811, 0 },
+  { "lsr",  OP_IY | OP_PAGE2,  3, 0x64,  7,  7,  CLR_V_CHG_ZVC, cpu6811, 0 },
+  { "lsr",  OP_IDX,            2, 0x64,  3,  3,  CLR_N_CHG_ZVC, cpu6812|cpu9s12x, 0 },
+  { "lsr",  OP_IDX_1,          3, 0x64,  4,  4,  CLR_N_CHG_ZVC, cpu6812|cpu9s12x, 0 },
+  { "lsr",  OP_IDX_2,          4, 0x64,  5,  5,  CLR_N_CHG_ZVC, cpu6812|cpu9s12x, 0 },
+  { "lsr",  OP_D_IDX,          2, 0x64,  6,  6,  CLR_N_CHG_ZVC, cpu6812|cpu9s12x, 0 },
+  { "lsr",  OP_D_IDX_2,        4, 0x64,  6,  6,  CLR_N_CHG_ZVC, cpu6812|cpu9s12x, 0 },
+
+  { "lsra", OP_NONE,         1, 0x44,  1,  1,  CLR_N_CHG_ZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "lsrb", OP_NONE,         1, 0x54,  1,  1,  CLR_N_CHG_ZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "lsrd", OP_NONE,           1, 0x04,  3,  3,  CLR_N_CHG_ZVC, cpu6811, 0 },
+  { "lsrd", OP_NONE,           1, 0x49,  1,  1,  CLR_N_CHG_ZVC, cpu6812|cpu9s12x, 0 },
+
+  { "lsrw",  OP_IND16 | OP_PAGE2,          3, 0x74,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "lsrw",  OP_IDX | OP_PAGE2,            2, 0x64,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "lsrw",  OP_IDX_1 | OP_PAGE2,          3, 0x64,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "lsrw",  OP_IDX_2 | OP_PAGE2,          4, 0x64,  5,  5,  CHG_NZVC, cpu9s12x, 0 },
+  { "lsrw",  OP_D_IDX | OP_PAGE2,          2, 0x64,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+  { "lsrw",  OP_D_IDX_2 | OP_PAGE2,        4, 0x64,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "lsrx", OP_NONE | OP_PAGE2,           1, 0x44,  1,  1,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "lsry", OP_NONE | OP_PAGE2,           1, 0x54,  1,  1,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "maxa", OP_IDX | OP_PAGE2,     3, 0x18,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "maxa", OP_IDX_1 | OP_PAGE2,   4, 0x18,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "maxa", OP_IDX_2 | OP_PAGE2,   5, 0x18,  5,  5,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "maxa", OP_D_IDX | OP_PAGE2,   3, 0x18,  7,  7,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "maxa", OP_D_IDX_2 | OP_PAGE2, 5, 0x18,  7,  7,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "maxm", OP_IDX | OP_PAGE2,     3, 0x1c,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "maxm", OP_IDX_1 | OP_PAGE2,   4, 0x1c,  5,  5,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "maxm", OP_IDX_2 | OP_PAGE2,   5, 0x1c,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "maxm", OP_D_IDX | OP_PAGE2,   3, 0x1c,  7,  7,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "maxm", OP_D_IDX_2 | OP_PAGE2, 5, 0x1c,  7,  7,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "mem",  OP_NONE,                1, 0x01,  5,  5,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+
+  { "mina", OP_IDX | OP_PAGE2,     3, 0x19,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "mina", OP_IDX_1 | OP_PAGE2,   4, 0x19,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "mina", OP_IDX_2 | OP_PAGE2,   5, 0x19,  5,  5,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "mina", OP_D_IDX | OP_PAGE2,   3, 0x19,  7,  7,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "mina", OP_D_IDX_2 | OP_PAGE2, 5, 0x19,  7,  7,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "minm", OP_IDX | OP_PAGE2,     3, 0x1d,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "minm", OP_IDX_1 | OP_PAGE2,   4, 0x1d,  5,  5,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "minm", OP_IDX_2 | OP_PAGE2,   5, 0x1d,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "minm", OP_D_IDX | OP_PAGE2,   3, 0x1d,  7,  7,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "minm", OP_D_IDX_2 | OP_PAGE2, 5, 0x1d,  7,  7,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+/* The S12X additional modes are implemented, but uncommenting here causes a problem */
+  { "movb", OP_IMM8|OP_IND16_p2|OP_PAGE2,       5, 0x0b,  4,  4,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "movb", OP_IMM8|OP_IDX_p2|OP_PAGE2,         4, 0x08,  4,  4,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+/*  { "movb", OP_IMM8|OP_IDX1_p2|OP_PAGE2,        5, 0x08,  4,  4,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_IMM8|OP_IDX2_p2|OP_PAGE2,        4, 0x08,  4,  4,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_IMM8|OP_D_IDX|OP_PAGE2,       5, 0x08,  4,  4,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_IMM8|OP_D_IDX2_p2|OP_PAGE2,      4, 0x08,  4,  4,  CHG_NONE, cpu9s12x, 0 },*/
+
+  { "movb", OP_IND16|OP_IND16_p2|OP_PAGE2,      6, 0x0c,  6,  6,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "movb", OP_IND16|OP_IDX_p2|OP_PAGE2,        5, 0x09,  5,  5,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+/*  { "movb", OP_IND16|OP_IDX1_p2|OP_PAGE2,       6, 0x09,  6,  6,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_IND16|OP_IDX2_p2|OP_PAGE2,       5, 0x09,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_IND16|OP_D_IDX_p2|OP_PAGE2,    6, 0x09,  6,  6,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_IND16|OP_D_IDX2_p2|OP_PAGE2,     5, 0x09,  5,  5,  CHG_NONE, cpu9s12x, 0 }, */
+
+  { "movb", OP_IDX|OP_IND16_p2|OP_PAGE2,        5, 0x0d,  5,  5,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "movb", OP_IDX|OP_IDX_p2|OP_PAGE2,          4, 0x0a,  5,  5,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+/*  { "movb", OP_IDX|OP_IDX1_p2|OP_PAGE2,         5, 0x0a,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_IDX|OP_IDX2_p2|OP_PAGE2,         4, 0x0a,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_IDX|OP_D_IDX_p2|OP_PAGE2,        5, 0x0d,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_IDX|OP_D_IDX2_p2|OP_PAGE2,       4, 0x0a,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+
+  { "movb", OP_IDX_1|OP_IND16_p2|OP_PAGE2,       5, 0x0d,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_IDX_1|OP_IDX_p2|OP_PAGE2,         4, 0x0a,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_IDX_1|OP_IDX1_p2|OP_PAGE2,        6, 0x0a,  6,  6,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_IDX_1|OP_IDX2_p2|OP_PAGE2,        5, 0x0a,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_IDX_1|OP_D_IDX_p2|OP_PAGE2,       6, 0x0a,  6,  6,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_IDX_1|OP_D_IDX2_p2|OP_PAGE2,      5, 0x0a,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+
+  { "movb", OP_IDX_2|OP_IND16_p2|OP_PAGE2,       5, 0x0d,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_IDX_2|OP_IDX_p2|OP_PAGE2,         4, 0x0a,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_IDX_2|OP_IDX1_p2|OP_PAGE2,        6, 0x0a,  6,  6,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_IDX_2|OP_IDX2_p2|OP_PAGE2,        5, 0x0a,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_IDX_2|OP_D_IDX_p2|OP_PAGE2,       6, 0x0a,  6,  6,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_IDX_2|OP_D_IDX2_p2|OP_PAGE2,      5, 0x0a,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+
+  { "movb", OP_D_IDX|OP_IND16_p2|OP_PAGE2,       5, 0x0d,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_D_IDX|OP_IDX_p2|OP_PAGE2,         4, 0x0a,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_D_IDX|OP_IDX1_p2|OP_PAGE2,        6, 0x0a,  6,  6,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_D_IDX|OP_IDX2_p2|OP_PAGE2,        5, 0x0a,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_D_IDX|OP_D_IDX_p2|OP_PAGE2,       6, 0x0a,  6,  6,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_D_IDX|OP_D_IDX2_p2|OP_PAGE2,      5, 0x0a,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+
+  { "movb", OP_D_IDX_2|OP_IND16_p2|OP_PAGE2,       5, 0x0d,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_D_IDX_2|OP_IDX_p2|OP_PAGE2,         4, 0x0a,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_D_IDX_2|OP_IDX1_p2|OP_PAGE2,        6, 0x0a,  6,  6,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_D_IDX_2|OP_IDX2_p2|OP_PAGE2,        5, 0x0a,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_D_IDX_2|OP_D_IDX_p2|OP_PAGE2,       6, 0x0a,  6,  6,  CHG_NONE, cpu9s12x, 0 },
+  { "movb", OP_D_IDX_2|OP_D_IDX2_p2|OP_PAGE2,      5, 0x0a,  5,  5,  CHG_NONE, cpu9s12x, 0 },*/
+
+  { "movw", OP_IMM16 | OP_IND16_p2 | OP_PAGE2,  6, 0x03,  5,  5,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "movw", OP_IMM16 | OP_IDX_p2 | OP_PAGE2,    5, 0x00,  4,  4,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+/*  { "movw", OP_IMM16|OP_IDX1_p2|OP_PAGE2,        5, 0x00,  4,  4,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_IMM16|OP_IDX2_p2|OP_PAGE2,        4, 0x00,  4,  4,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_IMM16|OP_D_IDX_p2|OP_PAGE2,       5, 0x00,  4,  4,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_IMM16|OP_D_IDX2_p2|OP_PAGE2,      4, 0x00,  4,  4,  CHG_NONE, cpu9s12x, 0 },*/
+
+  { "movw", OP_IND16 | OP_IND16_p2 | OP_PAGE2,  6, 0x04,  6,  6,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "movw", OP_IND16 | OP_IDX_p2 | OP_PAGE2,    5, 0x01,  5,  5,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+/*  { "movw", OP_IND16|OP_IDX1_p2|OP_PAGE2,       6, 0x01,  6,  6,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_IND16|OP_IDX2_p2|OP_PAGE2,       5, 0x01,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_IND16|OP_D_IDX_p2|OP_PAGE2,      6, 0x01,  6,  6,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_IND16|OP_D_IDX2_p2|OP_PAGE2,     5, 0x01,  5,  5,  CHG_NONE, cpu9s12x, 0 },*/
+
+  { "movw", OP_IDX | OP_IND16_p2 | OP_PAGE2,    5, 0x05,  5,  5,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "movw", OP_IDX | OP_IDX_p2 | OP_PAGE2,      4, 0x02,  5,  5,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+/*  { "movw", OP_IDX|OP_IDX1_p2|OP_PAGE2,         5, 0x02,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_IDX|OP_IDX2_p2|OP_PAGE2,         4, 0x02,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_IDX|OP_D_IDX_p2|OP_PAGE2,        5, 0x02,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_IDX|OP_D_IDX2_p2|OP_PAGE2,       4, 0x02,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+
+  { "movw", OP_IDX_1|OP_IND16_p2|OP_PAGE2,       5, 0x05,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_IDX_1|OP_IDX_p2|OP_PAGE2,         4, 0x02,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_IDX_1|OP_IDX1_p2|OP_PAGE2,        6, 0x02,  6,  6,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_IDX_1|OP_IDX2_p2|OP_PAGE2,        5, 0x02,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_IDX_1|OP_D_IDX_p2|OP_PAGE2,       6, 0x02,  6,  6,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_IDX_1|OP_D_IDX2_p2|OP_PAGE2,      5, 0x02,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+
+  { "movw", OP_IDX_2|OP_IND16_p2|OP_PAGE2,       5, 0x05,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_IDX_2|OP_IDX_p2|OP_PAGE2,         4, 0x02,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_IDX_2|OP_IDX1_p2|OP_PAGE2,        6, 0x02,  6,  6,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_IDX_2|OP_IDX2_p2|OP_PAGE2,        5, 0x02,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_IDX_2|OP_D_IDX_p2|OP_PAGE2,       6, 0x02,  6,  6,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_IDX_2|OP_D_IDX2_p2|OP_PAGE2,      5, 0x02,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+
+  { "movw", OP_D_IDX|OP_IND16_p2|OP_PAGE2,       5, 0x05,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_D_IDX|OP_IDX_p2|OP_PAGE2,         4, 0x02,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_D_IDX|OP_IDX1_p2|OP_PAGE2,        6, 0x02,  6,  6,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_D_IDX|OP_IDX2_p2|OP_PAGE2,        5, 0x02,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_D_IDX|OP_D_IDX_p2|OP_PAGE2,       6, 0x02,  6,  6,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_D_IDX|OP_D_IDX2_p2|OP_PAGE2,      5, 0x02,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+
+  { "movw", OP_D_IDX_2|OP_IND16_p2|OP_PAGE2,       5, 0x05,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_D_IDX_2|OP_IDX_p2|OP_PAGE2,         4, 0x02,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_D_IDX_2|OP_IDX1_p2|OP_PAGE2,        6, 0x02,  6,  6,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_D_IDX_2|OP_IDX2_p2|OP_PAGE2,        5, 0x02,  5,  5,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_D_IDX_2|OP_D_IDX_p2|OP_PAGE2,       6, 0x02,  6,  6,  CHG_NONE, cpu9s12x, 0 },
+  { "movw", OP_D_IDX_2|OP_D_IDX2_p2|OP_PAGE2,      5, 0x02,  5,  5,  CHG_NONE, cpu9s12x, 0 },*/
+
+  { "mul",  OP_NONE,           1, 0x3d,  3, 10,  CHG_C, cpu6811, 0 },
+  { "mul",  OP_NONE,           1, 0x12,  3,  3,  CHG_C, cpu6812|cpu9s12x, 0 },
+
+  { "neg",  OP_IND16,          3, 0x70,  4,  4,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "neg",  OP_IX,             2, 0x60,  6,  6,  CHG_NZVC, cpu6811, 0 },
+  { "neg",  OP_IY | OP_PAGE2,  3, 0x60,  7,  7,  CHG_NZVC, cpu6811, 0 },
+  { "neg",  OP_IDX,            2, 0x60,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "neg",  OP_IDX_1,          3, 0x60,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "neg",  OP_IDX_2,          4, 0x60,  5,  5,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "neg",  OP_D_IDX,          2, 0x60,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "neg",  OP_D_IDX_2,        4, 0x60,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "nega", OP_NONE,           1, 0x40,  1,  1,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "negb", OP_NONE,           1, 0x50,  1,  1,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+
+  { "negw",  OP_IND16| OP_PAGE2,          3, 0x70,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "negw",  OP_IDX| OP_PAGE2,            2, 0x60,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "negw",  OP_IDX_1| OP_PAGE2,          3, 0x60,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "negw",  OP_IDX_2| OP_PAGE2,          4, 0x60,  5,  5,  CHG_NZVC, cpu9s12x, 0 },
+  { "negw",  OP_D_IDX| OP_PAGE2,          2, 0x60,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+  { "negw",  OP_D_IDX_2| OP_PAGE2,        4, 0x60,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "negx", OP_NONE| OP_PAGE2,           1, 0x40,  1,  1,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "negy", OP_NONE| OP_PAGE2,           1, 0x50,  1,  1,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "nop",  OP_NONE,           1, 0x01,  2,  2,  CHG_NONE, cpu6811, 0 },
+  { "nop",  OP_NONE,           1, 0xa7,  1,  1,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+
+  { "oraa", OP_IMM8,         2, 0x8a,  1,  1,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "oraa", OP_DIRECT,       2, 0x9a,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "oraa", OP_IND16,        3, 0xba,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "oraa", OP_IX,             2, 0xaa,  4,  4,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "oraa", OP_IY | OP_PAGE2,  3, 0xaa,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "oraa", OP_IDX,            2, 0xaa,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "oraa", OP_IDX_1,          3, 0xaa,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "oraa", OP_IDX_2,          4, 0xaa,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "oraa", OP_D_IDX,          2, 0xaa,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "oraa", OP_D_IDX_2,        4, 0xaa,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "orab", OP_IMM8,         2, 0xca,  1,  1,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "orab", OP_DIRECT,       2, 0xda,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "orab", OP_IND16,        3, 0xfa,  3,  3,  CLR_V_CHG_NZ, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "orab", OP_IX,             2, 0xea,  4,  4,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "orab", OP_IY | OP_PAGE2,  3, 0xea,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "orab", OP_IDX,            2, 0xea,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "orab", OP_IDX_1,          3, 0xea,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "orab", OP_IDX_2,          4, 0xea,  4,  4,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "orab", OP_D_IDX,          2, 0xea,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "orab", OP_D_IDX_2,        4, 0xea,  6,  6,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "orcc", OP_IMM8,           2, 0x14,  1,  1,  CHG_ALL, cpu6812|cpu9s12x, 0 },
+
+  { "orx", OP_IMM16| OP_PAGE2,  2, 0x8a,  1,  1,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "orx", OP_DIRECT| OP_PAGE2, 2, 0x9a,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "orx", OP_IND16| OP_PAGE2,  3, 0xba,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "orx", OP_IDX| OP_PAGE2,    2, 0xaa,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "orx", OP_IDX_1| OP_PAGE2,  3, 0xaa,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "orx", OP_IDX_2| OP_PAGE2,  4, 0xaa,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "orx", OP_D_IDX| OP_PAGE2,  2, 0xaa,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "orx", OP_D_IDX_2| OP_PAGE2,4, 0xaa,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "ory", OP_IMM16| OP_PAGE2,  2, 0xca,  1,  1,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "ory", OP_DIRECT| OP_PAGE2, 2, 0xda,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "ory", OP_IND16| OP_PAGE2,  3, 0xfa,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "ory", OP_IDX| OP_PAGE2,    2, 0xea,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "ory", OP_IDX_1| OP_PAGE2,  3, 0xea,  3,  3,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "ory", OP_IDX_2| OP_PAGE2,  4, 0xea,  4,  4,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "ory", OP_D_IDX| OP_PAGE2,  2, 0xea,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+  { "ory", OP_D_IDX_2| OP_PAGE2,4, 0xea,  6,  6,  CLR_V_CHG_NZ, cpu9s12x, 0 },
+
+  { "psha", OP_NONE,           1, 0x36,  2,  2,  CHG_NONE, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "pshb", OP_NONE,           1, 0x37,  2,  2,  CHG_NONE, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "pshc", OP_NONE,           1, 0x39,  2,  2,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "pshcw", OP_NONE| OP_PAGE2,1, 0x39,  2,  2,  CHG_NONE, cpu9s12x, 0 },
+  { "pshd", OP_NONE,           1, 0x3b,  2,  2,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "pshx", OP_NONE,           1, 0x3c,  4,  4,  CHG_NONE, cpu6811, 0 },
+  { "pshx", OP_NONE,           1, 0x34,  2,  2,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "pshy", OP_NONE | OP_PAGE2,2, 0x3c,  5,  5,  CHG_NONE, cpu6811, 0 },
+  { "pshy", OP_NONE,           1, 0x35,  2,  2,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+
+  { "pula", OP_NONE,           1, 0x32,  3,  3,  CHG_NONE, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "pulb", OP_NONE,           1, 0x33,  3,  3,  CHG_NONE, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "pulc", OP_NONE,           1, 0x38,  3,  3,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "pulcw", OP_NONE| OP_PAGE2,1, 0x38,  2,  2,  CHG_NONE, cpu9s12x, 0 },
+  { "puld", OP_NONE,           1, 0x3a,  3,  3,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "pulx", OP_NONE,           1, 0x38,  5,  5,  CHG_NONE, cpu6811, 0 },
+  { "pulx", OP_NONE,           1, 0x30,  3,  3,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "puly", OP_NONE | OP_PAGE2,2, 0x38,  6,  6,  CHG_NONE, cpu6811, 0 },
+  { "puly", OP_NONE,           1, 0x31,  3,  3,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+
+  { "rev",  OP_NONE | OP_PAGE2, 2, 0x3a,  _M,  _M,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+  { "revw", OP_NONE | OP_PAGE2, 2, 0x3b,  _M,  _M,  CHG_HNZVC, cpu6812|cpu9s12x, 0 },
+
+  { "rol",  OP_IND16,          3, 0x79,  6,  6,  CHG_NZVC, cpu6811, 0 },
+  { "rol",  OP_IX,             2, 0x69,  6,  6,  CHG_NZVC, cpu6811, 0 },
+  { "rol",  OP_IY | OP_PAGE2,  3, 0x69,  7,  7,  CHG_NZVC, cpu6811, 0 },
+  { "rol",  OP_IND16,          3, 0x75,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "rol",  OP_IDX,            2, 0x65,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "rol",  OP_IDX_1,          3, 0x65,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "rol",  OP_IDX_2,          4, 0x65,  5,  5,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "rol",  OP_D_IDX,          2, 0x65,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "rol",  OP_D_IDX_2,        4, 0x65,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "rola", OP_NONE,           1, 0x49,  2,  2,  CHG_NZVC, cpu6811, 0 },
+  { "rola", OP_NONE,           1, 0x45,  1,  1,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "rolb", OP_NONE,           1, 0x59,  2,  2,  CHG_NZVC, cpu6811, 0 },
+  { "rolb", OP_NONE,           1, 0x55,  1,  1,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "rolw",  OP_IND16 | OP_PAGE2,          3, 0x75,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "rolw",  OP_IDX | OP_PAGE2,            2, 0x65,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "rolw",  OP_IDX_1 | OP_PAGE2,          3, 0x65,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "rolw",  OP_IDX_2 | OP_PAGE2,          4, 0x65,  5,  5,  CHG_NZVC, cpu9s12x, 0 },
+  { "rolw",  OP_D_IDX | OP_PAGE2,          2, 0x65,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+  { "rolw",  OP_D_IDX_2 | OP_PAGE2,        4, 0x65,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "rolx", OP_NONE | OP_PAGE2,           1, 0x45,  1,  1,  CHG_NZVC, cpu9s12x, 0 },
+  { "roly", OP_NONE | OP_PAGE2,           1, 0x55,  1,  1,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "ror",  OP_IND16,          3, 0x76,  4,  4,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "ror",  OP_IX,             2, 0x66,  6,  6,  CHG_NZVC, cpu6811, 0 },
+  { "ror",  OP_IY | OP_PAGE2,  3, 0x66,  7,  7,  CHG_NZVC, cpu6811, 0 },
+  { "ror",  OP_IDX,            2, 0x66,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "ror",  OP_IDX_1,          3, 0x66,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "ror",  OP_IDX_2,          4, 0x66,  5,  5,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "ror",  OP_D_IDX,          2, 0x66,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "ror",  OP_D_IDX_2,        4, 0x66,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "rora", OP_NONE,           1, 0x46,  1,  1,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "rorb", OP_NONE,           1, 0x56,  1,  1,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+
+  { "rorw",  OP_IND16 | OP_PAGE2,          3, 0x76,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "rorw",  OP_IDX | OP_PAGE2,            2, 0x66,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "rorw",  OP_IDX_1 | OP_PAGE2,          3, 0x66,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "rorw",  OP_IDX_2 | OP_PAGE2,          4, 0x66,  5,  5,  CHG_NZVC, cpu9s12x, 0 },
+  { "rorw",  OP_D_IDX | OP_PAGE2,          2, 0x66,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+  { "rorw",  OP_D_IDX_2 | OP_PAGE2,        4, 0x66,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "rorx", OP_NONE | OP_PAGE2,           1, 0x46,  1,  1,  CHG_NZVC, cpu9s12x, 0 },
+  { "rory", OP_NONE | OP_PAGE2,           1, 0x56,  1,  1,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "rtc",  OP_NONE,           1, 0x0a,  6,  6,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+  { "rti",  OP_NONE,           1, 0x3b, 12, 12,  CHG_ALL, cpu6811, 0 },
+  { "rti",  OP_NONE,           1, 0x0b,  8, 10,  CHG_ALL, cpu6812|cpu9s12x, 0 },
+  { "rts",  OP_NONE,           1, 0x39,  5,  5,  CHG_NONE, cpu6811, 0 },
+  { "rts",  OP_NONE,           1, 0x3d,  5,  5,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+
+  { "sba",  OP_NONE,             1, 0x10,  2,  2,  CHG_NZVC, cpu6811, 0 },
+  { "sba",  OP_NONE | OP_PAGE2, 2, 0x16,  2,  2,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "sbca", OP_IMM8,           2, 0x82,  1,  1,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "sbca", OP_DIRECT,         2, 0x92,  3,  3,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "sbca", OP_IND16,          3, 0xb2,  3,  3,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "sbca", OP_IX,             2, 0xa2,  4,  4,  CHG_NZVC, cpu6811, 0 },
+  { "sbca", OP_IY | OP_PAGE2,  3, 0xa2,  5,  5,  CHG_NZVC, cpu6811, 0 },
+  { "sbca", OP_IDX,            2, 0xa2,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "sbca", OP_IDX_1,          3, 0xa2,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "sbca", OP_IDX_2,          4, 0xa2,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "sbca", OP_D_IDX,          2, 0xa2,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "sbca", OP_D_IDX_2,        4, 0xa2,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "sbcb", OP_IMM8,           2, 0xc2,  1,  1,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "sbcb", OP_DIRECT,         2, 0xd2,  3,  3,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "sbcb", OP_IND16,          3, 0xf2,  3,  3,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "sbcb", OP_IX,             2, 0xe2,  4,  4,  CHG_NZVC, cpu6811, 0 },
+  { "sbcb", OP_IY | OP_PAGE2,  3, 0xe2,  5,  5,  CHG_NZVC, cpu6811, 0 },
+  { "sbcb", OP_IDX,            2, 0xe2,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "sbcb", OP_IDX_1,          3, 0xe2,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "sbcb", OP_IDX_2,          4, 0xe2,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "sbcb", OP_D_IDX,          2, 0xe2,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "sbcb", OP_D_IDX_2,        4, 0xe2,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "sbed", OP_IMM16 | OP_PAGE2,          3, 0x83,  2,  2,  CHG_NZVC, cpu9s12x, 0 },
+  { "sbed", OP_DIRECT | OP_PAGE2,         2, 0x93,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "sbed", OP_IND16 | OP_PAGE2,          3, 0xb3,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "sbed", OP_IDX | OP_PAGE2,            2, 0xa3,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "sbed", OP_IDX_1 | OP_PAGE2,          3, 0xa3,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "sbed", OP_IDX_2 | OP_PAGE2,          4, 0xa3,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "sbed", OP_D_IDX | OP_PAGE2,          2, 0xa3,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+  { "sbed", OP_D_IDX_2 | OP_PAGE2,        4, 0xa3,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "sbex", OP_IMM16 | OP_PAGE2,          3, 0x82,  2,  2,  CHG_NZVC, cpu9s12x, 0 },
+  { "sbex", OP_DIRECT | OP_PAGE2,         2, 0x92,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "sbex", OP_IND16 | OP_PAGE2,          3, 0xb2,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "sbex", OP_IDX | OP_PAGE2,            2, 0xa2,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "sbex", OP_IDX_1 | OP_PAGE2,          3, 0xa2,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "sbex", OP_IDX_2 | OP_PAGE2,          4, 0xa2,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "sbex", OP_D_IDX | OP_PAGE2,          2, 0xa2,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+  { "sbex", OP_D_IDX_2 | OP_PAGE2,        4, 0xa2,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "sbey", OP_IMM16 | OP_PAGE2,          3, 0xc2,  2,  2,  CHG_NZVC, cpu9s12x, 0 },
+  { "sbey", OP_DIRECT | OP_PAGE2,         2, 0xd2,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "sbey", OP_IND16 | OP_PAGE2,          3, 0xf2,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "sbey", OP_IDX | OP_PAGE2,            2, 0xe2,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "sbey", OP_IDX_1 | OP_PAGE2,          3, 0xe2,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "sbey", OP_IDX_2 | OP_PAGE2,          4, 0xe2,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "sbey", OP_D_IDX | OP_PAGE2,          2, 0xe2,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+  { "sbey", OP_D_IDX_2 | OP_PAGE2,        4, 0xe2,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "sec",  OP_NONE,           1, 0x0d,  2,  2,  SET_C, cpu6811, 0 },
+  { "sei",  OP_NONE,           1, 0x0f,  2,  2,  SET_I, cpu6811, 0 },
+  { "sev",  OP_NONE,           1, 0x0b,  2,  2,  SET_V, cpu6811, 0 },
+
+/* Some sex opcodes are synonyms for tfr. */
   { "sex",  M6812_OP_SEX_MARKER
-          | OP_REG | OP_REG_2, 2, 0xb7,  1,  1,  CHG_NONE, cpu6812 },
-
-  { "staa", OP_IND16,          3, 0xb7,  4,  4,  CLR_V_CHG_NZ, cpu6811 },
-  { "staa", OP_DIRECT,         2, 0x97,  3,  3,  CLR_V_CHG_NZ, cpu6811 },
-  { "staa", OP_IX,             2, 0xa7,  4,  4,  CLR_V_CHG_NZ, cpu6811 },
-  { "staa", OP_IY | OP_PAGE2,  3, 0xa7,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "staa", OP_DIRECT,         2, 0x5a,  2,  2,  CLR_V_CHG_NZ, cpu6812 },
-  { "staa", OP_IND16,          3, 0x7a,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "staa", OP_IDX,            2, 0x6a,  2,  2,  CLR_V_CHG_NZ, cpu6812 },
-  { "staa", OP_IDX_1,          3, 0x6a,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "staa", OP_IDX_2,          4, 0x6a,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "staa", OP_D_IDX,          2, 0x6a,  5,  5,  CLR_V_CHG_NZ, cpu6812 },
-  { "staa", OP_D_IDX_2,        4, 0x6a,  5,  5,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "stab", OP_IND16,          3, 0xf7,  4,  4,  CLR_V_CHG_NZ, cpu6811 },
-  { "stab", OP_DIRECT,         2, 0xd7,  3,  3,  CLR_V_CHG_NZ, cpu6811 },
-  { "stab", OP_IX,             2, 0xe7,  4,  4,  CLR_V_CHG_NZ, cpu6811 },
-  { "stab", OP_IY | OP_PAGE2,  3, 0xe7,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "stab", OP_DIRECT,         2, 0x5b,  2,  2,  CLR_V_CHG_NZ, cpu6812 },
-  { "stab", OP_IND16,          3, 0x7b,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "stab", OP_IDX,            2, 0x6b,  2,  2,  CLR_V_CHG_NZ, cpu6812 },
-  { "stab", OP_IDX_1,          3, 0x6b,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "stab", OP_IDX_2,          4, 0x6b,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "stab", OP_D_IDX,          2, 0x6b,  5,  5,  CLR_V_CHG_NZ, cpu6812 },
-  { "stab", OP_D_IDX_2,        4, 0x6b,  5,  5,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "std",  OP_IND16,          3, 0xfd,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "std",  OP_DIRECT,         2, 0xdd,  4,  4,  CLR_V_CHG_NZ, cpu6811 },
-  { "std",  OP_IX,             2, 0xed,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "std",  OP_IY | OP_PAGE2,  3, 0xed,  6,  6,  CLR_V_CHG_NZ, cpu6811 },
-  { "std",  OP_DIRECT,         2, 0x5c,  2,  2,  CLR_V_CHG_NZ, cpu6812 },
-  { "std",  OP_IND16,          3, 0x7c,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "std",  OP_IDX,            2, 0x6c,  2,  2,  CLR_V_CHG_NZ, cpu6812 },
-  { "std",  OP_IDX_1,          3, 0x6c,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "std",  OP_IDX_2,          4, 0x6c,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "std",  OP_D_IDX,          2, 0x6c,  5,  5,  CLR_V_CHG_NZ, cpu6812 },
-  { "std",  OP_D_IDX_2,        4, 0x6c,  5,  5,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "stop", OP_NONE,           1, 0xcf,  2,  2,  CHG_NONE, cpu6811 },
-  { "stop", OP_NONE | OP_PAGE2,2, 0x3e,  2,  9,  CHG_NONE, cpu6812 },
-
-  { "sts",  OP_IND16,          3, 0xbf,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "sts",  OP_DIRECT,         2, 0x9f,  4,  4,  CLR_V_CHG_NZ, cpu6811 },
-  { "sts",  OP_IX,             2, 0xaf,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "sts",  OP_IY | OP_PAGE2,  3, 0xaf,  6,  6,  CLR_V_CHG_NZ, cpu6811 },
-  { "sts",  OP_DIRECT,         2, 0x5f,  2,  2,  CLR_V_CHG_NZ, cpu6812 },
-  { "sts",  OP_IND16,          3, 0x7f,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "sts",  OP_IDX,            2, 0x6f,  2,  2,  CLR_V_CHG_NZ, cpu6812 },
-  { "sts",  OP_IDX_1,          3, 0x6f,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "sts",  OP_IDX_2,          4, 0x6f,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "sts",  OP_D_IDX,          2, 0x6f,  5,  5,  CLR_V_CHG_NZ, cpu6812 },
-  { "sts",  OP_D_IDX_2,        4, 0x6f,  5,  5,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "stx",  OP_IND16,          3, 0xff,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "stx",  OP_DIRECT,         2, 0xdf,  4,  4,  CLR_V_CHG_NZ, cpu6811 },
-  { "stx",  OP_IX,             2, 0xef,  5,  5,  CLR_V_CHG_NZ, cpu6811 },
-  { "stx",  OP_IY | OP_PAGE4,  3, 0xef,  6,  6,  CLR_V_CHG_NZ, cpu6811 },
-  { "stx",  OP_DIRECT,         2, 0x5e,  2,  2,  CLR_V_CHG_NZ, cpu6812 },
-  { "stx",  OP_IND16,          3, 0x7e,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "stx",  OP_IDX,            2, 0x6e,  2,  2,  CLR_V_CHG_NZ, cpu6812 },
-  { "stx",  OP_IDX_1,          3, 0x6e,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "stx",  OP_IDX_2,          4, 0x6e,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "stx",  OP_D_IDX,          2, 0x6e,  5,  5,  CLR_V_CHG_NZ, cpu6812 },
-  { "stx",  OP_D_IDX_2,        4, 0x6e,  5,  5,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "sty",  OP_IND16 | OP_PAGE2,  4, 0xff, 6, 6, CLR_V_CHG_NZ, cpu6811 },
-  { "sty",  OP_DIRECT | OP_PAGE2, 3, 0xdf, 5, 5, CLR_V_CHG_NZ, cpu6811 },
-  { "sty",  OP_IY | OP_PAGE2,     3, 0xef, 6, 6, CLR_V_CHG_NZ, cpu6811 },
-  { "sty",  OP_IX | OP_PAGE3,     3, 0xef, 6, 6, CLR_V_CHG_NZ, cpu6811 },
-  { "sty",  OP_DIRECT,         2, 0x5d,  2,  2,  CLR_V_CHG_NZ, cpu6812 },
-  { "sty",  OP_IND16,          3, 0x7d,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "sty",  OP_IDX,            2, 0x6d,  2,  2,  CLR_V_CHG_NZ, cpu6812 },
-  { "sty",  OP_IDX_1,          3, 0x6d,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "sty",  OP_IDX_2,          4, 0x6d,  3,  3,  CLR_V_CHG_NZ, cpu6812 },
-  { "sty",  OP_D_IDX,          2, 0x6d,  5,  5,  CLR_V_CHG_NZ, cpu6812 },
-  { "sty",  OP_D_IDX_2,        4, 0x6d,  5,  5,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "suba", OP_IMM8,           2, 0x80,  1,  1,  CHG_NZVC, cpu6811|cpu6812 },
-  { "suba", OP_DIRECT,         2, 0x90,  3,  3,  CHG_NZVC, cpu6811|cpu6812 },
-  { "suba", OP_IND16,          3, 0xb0,  3,  3,  CHG_NZVC, cpu6811|cpu6812 },
-  { "suba", OP_IX,             2, 0xa0,  4,  4,  CHG_NZVC, cpu6811 },
-  { "suba", OP_IY | OP_PAGE2,  3, 0xa0,  5,  5,  CHG_NZVC, cpu6811 },
-  { "suba", OP_IDX,            2, 0xa0,  3,  3,  CHG_NZVC, cpu6812 },
-  { "suba", OP_IDX_1,          3, 0xa0,  3,  3,  CHG_NZVC, cpu6812 },
-  { "suba", OP_IDX_2,          4, 0xa0,  4,  4,  CHG_NZVC, cpu6812 },
-  { "suba", OP_D_IDX,          2, 0xa0,  6,  6,  CHG_NZVC, cpu6812 },
-  { "suba", OP_D_IDX_2,        4, 0xa0,  6,  6,  CHG_NZVC, cpu6812 },
-
-  { "subb", OP_IMM8,           2, 0xc0,  1,  1,  CHG_NZVC, cpu6811|cpu6812 },
-  { "subb", OP_DIRECT,         2, 0xd0,  3,  3,  CHG_NZVC, cpu6811|cpu6812 },
-  { "subb", OP_IND16,          3, 0xf0,  3,  3,  CHG_NZVC, cpu6811|cpu6812 },
-  { "subb", OP_IX,             2, 0xe0,  4,  4,  CHG_NZVC, cpu6811 },
-  { "subb", OP_IY | OP_PAGE2,  3, 0xe0,  5,  5,  CHG_NZVC, cpu6811 },
-  { "subb", OP_IDX,            2, 0xe0,  3,  3,  CHG_NZVC, cpu6812 },
-  { "subb", OP_IDX_1,          3, 0xe0,  3,  3,  CHG_NZVC, cpu6812 },
-  { "subb", OP_IDX_2,          4, 0xe0,  4,  4,  CHG_NZVC, cpu6812 },
-  { "subb", OP_D_IDX,          2, 0xe0,  6,  6,  CHG_NZVC, cpu6812 },
-  { "subb", OP_D_IDX_2,        4, 0xe0,  6,  6,  CHG_NZVC, cpu6812 },
-
-  { "subd", OP_IMM16,          3, 0x83,  2,  2,  CHG_NZVC, cpu6811|cpu6812 },
-  { "subd", OP_DIRECT,         2, 0x93,  3,  3,  CHG_NZVC, cpu6811|cpu6812 },
-  { "subd", OP_IND16,          3, 0xb3,  3,  3,  CHG_NZVC, cpu6811|cpu6812 },
-  { "subd", OP_IX,             2, 0xa3,  6,  6,  CHG_NZVC, cpu6811 },
-  { "subd", OP_IY | OP_PAGE2,  3, 0xa3,  7,  7,  CHG_NZVC, cpu6811 },
-  { "subd", OP_IDX,            2, 0xa3,  3,  3,  CHG_NZVC, cpu6812 },
-  { "subd", OP_IDX_1,          3, 0xa3,  3,  3,  CHG_NZVC, cpu6812 },
-  { "subd", OP_IDX_2,          4, 0xa3,  4,  4,  CHG_NZVC, cpu6812 },
-  { "subd", OP_D_IDX,          2, 0xa3,  6,  6,  CHG_NZVC, cpu6812 },
-  { "subd", OP_D_IDX_2,        4, 0xa3,  6,  6,  CHG_NZVC, cpu6812 },
-
-  { "swi",  OP_NONE,           1, 0x3f,  9,  9,  CHG_NONE, cpu6811|cpu6812 },
-
-  { "tab",  OP_NONE,           1, 0x16,  2,  2,  CLR_V_CHG_NZ, cpu6811 },
-  { "tab",  OP_NONE | OP_PAGE2,2, 0x0e,  2,  2,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "tap",  OP_NONE,           1, 0x06,  2,  2,  CHG_ALL, cpu6811 },
-
-  { "tba",  OP_NONE,           1, 0x17,  2,  2,  CLR_V_CHG_NZ, cpu6811 },
-  { "tba",  OP_NONE | OP_PAGE2,2, 0x0f,  2,  2,  CLR_V_CHG_NZ, cpu6812 },
-
-  { "test", OP_NONE,           1, 0x00,  5, _M,  CHG_NONE, cpu6811 },
-
-  { "tpa",  OP_NONE,           1, 0x07,  2,  2,  CHG_NONE, cpu6811 },
+          | OP_REG | OP_REG_2, 2, 0xb7,  1,  1,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+
+  { "staa", OP_IND16,          3, 0xb7,  4,  4,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "staa", OP_DIRECT,         2, 0x97,  3,  3,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "staa", OP_IX,             2, 0xa7,  4,  4,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "staa", OP_IY | OP_PAGE2,  3, 0xa7,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "staa", OP_DIRECT,         2, 0x5a,  2,  2,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "staa", OP_IND16,          3, 0x7a,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "staa", OP_IDX,            2, 0x6a,  2,  2,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "staa", OP_IDX_1,          3, 0x6a,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "staa", OP_IDX_2,          4, 0x6a,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "staa", OP_D_IDX,          2, 0x6a,  5,  5,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "staa", OP_D_IDX_2,        4, 0x6a,  5,  5,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "stab", OP_IND16,          3, 0xf7,  4,  4,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "stab", OP_DIRECT,         2, 0xd7,  3,  3,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "stab", OP_IX,             2, 0xe7,  4,  4,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "stab", OP_IY | OP_PAGE2,  3, 0xe7,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "stab", OP_DIRECT,         2, 0x5b,  2,  2,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "stab", OP_IND16,          3, 0x7b,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "stab", OP_IDX,            2, 0x6b,  2,  2,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "stab", OP_IDX_1,          3, 0x6b,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "stab", OP_IDX_2,          4, 0x6b,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "stab", OP_D_IDX,          2, 0x6b,  5,  5,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "stab", OP_D_IDX_2,        4, 0x6b,  5,  5,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "std",  OP_IND16,          3, 0xfd,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "std",  OP_DIRECT,         2, 0xdd,  4,  4,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "std",  OP_IX,             2, 0xed,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "std",  OP_IY | OP_PAGE2,  3, 0xed,  6,  6,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "std",  OP_DIRECT,         2, 0x5c,  2,  2,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "std",  OP_IND16,          3, 0x7c,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "std",  OP_IDX,            2, 0x6c,  2,  2,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "std",  OP_IDX_1,          3, 0x6c,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "std",  OP_IDX_2,          4, 0x6c,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "std",  OP_D_IDX,          2, 0x6c,  5,  5,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "std",  OP_D_IDX_2,        4, 0x6c,  5,  5,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "stop", OP_NONE,           1, 0xcf,  2,  2,  CHG_NONE, cpu6811, 0 },
+  { "stop", OP_NONE | OP_PAGE2,2, 0x3e,  2,  9,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+
+  { "sts",  OP_IND16,          3, 0xbf,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "sts",  OP_DIRECT,         2, 0x9f,  4,  4,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "sts",  OP_IX,             2, 0xaf,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "sts",  OP_IY | OP_PAGE2,  3, 0xaf,  6,  6,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "sts",  OP_DIRECT,         2, 0x5f,  2,  2,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "sts",  OP_IND16,          3, 0x7f,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "sts",  OP_IDX,            2, 0x6f,  2,  2,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "sts",  OP_IDX_1,          3, 0x6f,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "sts",  OP_IDX_2,          4, 0x6f,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "sts",  OP_D_IDX,          2, 0x6f,  5,  5,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "sts",  OP_D_IDX_2,        4, 0x6f,  5,  5,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "stx",  OP_IND16,          3, 0xff,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "stx",  OP_DIRECT,         2, 0xdf,  4,  4,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "stx",  OP_IX,             2, 0xef,  5,  5,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "stx",  OP_IY | OP_PAGE4,  3, 0xef,  6,  6,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "stx",  OP_DIRECT,         2, 0x5e,  2,  2,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "stx",  OP_IND16,          3, 0x7e,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "stx",  OP_IDX,            2, 0x6e,  2,  2,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "stx",  OP_IDX_1,          3, 0x6e,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "stx",  OP_IDX_2,          4, 0x6e,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "stx",  OP_D_IDX,          2, 0x6e,  5,  5,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "stx",  OP_D_IDX_2,        4, 0x6e,  5,  5,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "sty",  OP_IND16 | OP_PAGE2,  4, 0xff, 6, 6, CLR_V_CHG_NZ, cpu6811, 0 },
+  { "sty",  OP_DIRECT | OP_PAGE2, 3, 0xdf, 5, 5, CLR_V_CHG_NZ, cpu6811, 0 },
+  { "sty",  OP_IY | OP_PAGE2,     3, 0xef, 6, 6, CLR_V_CHG_NZ, cpu6811, 0 },
+  { "sty",  OP_IX | OP_PAGE3,     3, 0xef, 6, 6, CLR_V_CHG_NZ, cpu6811, 0 },
+  { "sty",  OP_DIRECT,         2, 0x5d,  2,  2,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "sty",  OP_IND16,          3, 0x7d,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "sty",  OP_IDX,            2, 0x6d,  2,  2,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "sty",  OP_IDX_1,          3, 0x6d,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "sty",  OP_IDX_2,          4, 0x6d,  3,  3,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "sty",  OP_D_IDX,          2, 0x6d,  5,  5,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "sty",  OP_D_IDX_2,        4, 0x6d,  5,  5,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "suba", OP_IMM8,           2, 0x80,  1,  1,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "suba", OP_DIRECT,         2, 0x90,  3,  3,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "suba", OP_IND16,          3, 0xb0,  3,  3,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "suba", OP_IX,             2, 0xa0,  4,  4,  CHG_NZVC, cpu6811, 0 },
+  { "suba", OP_IY | OP_PAGE2,  3, 0xa0,  5,  5,  CHG_NZVC, cpu6811, 0 },
+  { "suba", OP_IDX,            2, 0xa0,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "suba", OP_IDX_1,          3, 0xa0,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "suba", OP_IDX_2,          4, 0xa0,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "suba", OP_D_IDX,          2, 0xa0,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "suba", OP_D_IDX_2,        4, 0xa0,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "subb", OP_IMM8,           2, 0xc0,  1,  1,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "subb", OP_DIRECT,         2, 0xd0,  3,  3,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "subb", OP_IND16,          3, 0xf0,  3,  3,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "subb", OP_IX,             2, 0xe0,  4,  4,  CHG_NZVC, cpu6811, 0 },
+  { "subb", OP_IY | OP_PAGE2,  3, 0xe0,  5,  5,  CHG_NZVC, cpu6811, 0 },
+  { "subb", OP_IDX,            2, 0xe0,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "subb", OP_IDX_1,          3, 0xe0,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "subb", OP_IDX_2,          4, 0xe0,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "subb", OP_D_IDX,          2, 0xe0,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "subb", OP_D_IDX_2,        4, 0xe0,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "subd", OP_IMM16,          3, 0x83,  2,  2,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "subd", OP_DIRECT,         2, 0x93,  3,  3,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "subd", OP_IND16,          3, 0xb3,  3,  3,  CHG_NZVC, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "subd", OP_IX,             2, 0xa3,  6,  6,  CHG_NZVC, cpu6811, 0 },
+  { "subd", OP_IY | OP_PAGE2,  3, 0xa3,  7,  7,  CHG_NZVC, cpu6811, 0 },
+  { "subd", OP_IDX,            2, 0xa3,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "subd", OP_IDX_1,          3, 0xa3,  3,  3,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "subd", OP_IDX_2,          4, 0xa3,  4,  4,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "subd", OP_D_IDX,          2, 0xa3,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+  { "subd", OP_D_IDX_2,        4, 0xa3,  6,  6,  CHG_NZVC, cpu6812|cpu9s12x, 0 },
+
+  { "subx", OP_IMM16 | OP_PAGE2,          3, 0x80,  2,  2,  CHG_NZVC, cpu9s12x, 0 },
+  { "subx", OP_DIRECT | OP_PAGE2,         2, 0x90,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "subx", OP_IND16 | OP_PAGE2,          3, 0xb0,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "subx", OP_IDX | OP_PAGE2,            2, 0xa0,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "subx", OP_IDX_1 | OP_PAGE2,          3, 0xa0,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "subx", OP_IDX_2 | OP_PAGE2,          4, 0xa0,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "subx", OP_D_IDX | OP_PAGE2,          2, 0xa0,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+  { "subx", OP_D_IDX_2 | OP_PAGE2,        4, 0xa0,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "suby", OP_IMM16 | OP_PAGE2,          3, 0xc0,  2,  2,  CHG_NZVC, cpu9s12x, 0 },
+  { "suby", OP_DIRECT | OP_PAGE2,         2, 0xd0,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "suby", OP_IND16 | OP_PAGE2,          3, 0xf0,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "suby", OP_IDX | OP_PAGE2,            2, 0xe0,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "suby", OP_IDX_1 | OP_PAGE2,          3, 0xe0,  3,  3,  CHG_NZVC, cpu9s12x, 0 },
+  { "suby", OP_IDX_2 | OP_PAGE2,          4, 0xe0,  4,  4,  CHG_NZVC, cpu9s12x, 0 },
+  { "suby", OP_D_IDX | OP_PAGE2,          2, 0xe0,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+  { "suby", OP_D_IDX_2 | OP_PAGE2,        4, 0xe0,  6,  6,  CHG_NZVC, cpu9s12x, 0 },
+
+  { "swi",  OP_NONE,           1, 0x3f,  9,  9,  CHG_NONE, cpu6811|cpu6812|cpu9s12x, 0 },
+  { "sys",  OP_NONE | OP_PAGE2,2, 0xa7,  9,  9,  SET_I, cpu9s12x, 0 },
+
+  { "tab",  OP_NONE,           1, 0x16,  2,  2,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "tab",  OP_NONE | OP_PAGE2,2, 0x0e,  2,  2,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "tap",  OP_NONE,           1, 0x06,  2,  2,  CHG_ALL, cpu6811, 0 },
+
+  { "tba",  OP_NONE,           1, 0x17,  2,  2,  CLR_V_CHG_NZ, cpu6811, 0 },
+  { "tba",  OP_NONE | OP_PAGE2,2, 0x0f,  2,  2,  CLR_V_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "test", OP_NONE,           1, 0x00,  5, _M,  CHG_NONE, cpu6811, 0 },
+
+  { "tpa",  OP_NONE,           1, 0x07,  2,  2,  CHG_NONE, cpu6811, 0 },
 
   { "tbeq", OP_TBEQ_MARKER
-          | OP_REG | OP_JUMP_REL,  3, 0x04,  3,  3, CHG_NONE, cpu6812 },
+          | OP_REG | OP_JUMP_REL,  3, 0x04,  3,  3, CHG_NONE, cpu6812|cpu9s12x, 0 },
 
-  { "tbl",  OP_IDX | OP_PAGE2,  3, 0x3d,  8,  8, CHG_NZC, cpu6812 },
+  { "tbl",  OP_IDX | OP_PAGE2,  3, 0x3d,  8,  8, CHG_NZC, cpu6812|cpu9s12x, 0 },
 
   { "tbne", OP_TBNE_MARKER
-          | OP_REG | OP_JUMP_REL,  3, 0x04,  3,  3, CHG_NONE, cpu6812 },
+          | OP_REG | OP_JUMP_REL,  3, 0x04,  3,  3, CHG_NONE, cpu6812|cpu9s12x, 0 },
 
+/* The S12X has more tfr variants, but most are pointless so not supported. */
   { "tfr",  OP_TFR_MARKER
-          | OP_REG_1 | OP_REG_2, 2, 0xb7, 1, 1,  CHG_NONE, cpu6812 },
-
-  { "trap", OP_IMM8 | OP_TRAP_ID, 2, 0x18,  11,  11,  SET_I, cpu6812 },
-
-  { "tst",  OP_IND16,          3, 0x7d,  6,  6,  CLR_VC_CHG_NZ, cpu6811 },
-  { "tst",  OP_IX,             2, 0x6d,  6,  6,  CLR_VC_CHG_NZ, cpu6811 },
-  { "tst",  OP_IY | OP_PAGE2,  3, 0x6d,  7,  7,  CLR_VC_CHG_NZ, cpu6811 },
-  { "tst",  OP_IND16,          3, 0xf7,  3,  3,  CLR_VC_CHG_NZ, cpu6812 },
-  { "tst",  OP_IDX,            2, 0xe7,  3,  3,  CLR_VC_CHG_NZ, cpu6812 },
-  { "tst",  OP_IDX_1,          3, 0xe7,  3,  3,  CLR_VC_CHG_NZ, cpu6812 },
-  { "tst",  OP_IDX_2,          4, 0xe7,  4,  4,  CLR_VC_CHG_NZ, cpu6812 },
-  { "tst",  OP_D_IDX,          2, 0xe7,  6,  6,  CLR_VC_CHG_NZ, cpu6812 },
-  { "tst",  OP_D_IDX_2,        4, 0xe7,  6,  6,  CLR_VC_CHG_NZ, cpu6812 },
-
-  { "tsta", OP_NONE,           1, 0x4d,  2,  2,  CLR_VC_CHG_NZ, cpu6811 },
-  { "tsta", OP_NONE,           1, 0x97,  1,  1,  CLR_VC_CHG_NZ, cpu6812 },
-  { "tstb", OP_NONE,           1, 0x5d,  2,  2,  CLR_VC_CHG_NZ, cpu6811 },
-  { "tstb", OP_NONE,           1, 0xd7,  1,  1,  CLR_VC_CHG_NZ, cpu6812 },
-
-  { "tsx",  OP_NONE,           1, 0x30,  3,  3,  CHG_NONE, cpu6811 },
-  { "tsy",  OP_NONE | OP_PAGE2,2, 0x30,  4,  4,  CHG_NONE, cpu6811 },
-  { "txs",  OP_NONE,           1, 0x35,  3,  3,  CHG_NONE, cpu6811 },
-  { "tys",  OP_NONE | OP_PAGE2,2, 0x35,  4,  4,  CHG_NONE, cpu6811 },
-
-  { "wai",  OP_NONE,           1, 0x3e,  5,  _M, CHG_NONE, cpu6811|cpu6812 },
-
-  { "wav",  OP_NONE | OP_PAGE2, 2, 0x3c,  8,  _M, SET_Z_CHG_HNVC, cpu6812 },
-
-  { "xgdx", OP_NONE,           1, 0x8f,  3,  3,  CHG_NONE, cpu6811 },
-  { "xgdy", OP_NONE | OP_PAGE2,2, 0x8f,  4,  4,  CHG_NONE, cpu6811 }
+          | OP_REG_1 | OP_REG_2, 2, 0xb7, 1, 1,  CHG_NONE, cpu6812|cpu9s12x, 0 },
+
+  { "trap", OP_IMM8 | OP_TRAP_ID, 2, 0x18,  11,  11,  SET_I, cpu6812|cpu9s12x, 0 },
+
+  { "tst",  OP_IND16,          3, 0x7d,  6,  6,  CLR_VC_CHG_NZ, cpu6811, 0 },
+  { "tst",  OP_IX,             2, 0x6d,  6,  6,  CLR_VC_CHG_NZ, cpu6811, 0 },
+  { "tst",  OP_IY | OP_PAGE2,  3, 0x6d,  7,  7,  CLR_VC_CHG_NZ, cpu6811, 0 },
+  { "tst",  OP_IND16,          3, 0xf7,  3,  3,  CLR_VC_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "tst",  OP_IDX,            2, 0xe7,  3,  3,  CLR_VC_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "tst",  OP_IDX_1,          3, 0xe7,  3,  3,  CLR_VC_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "tst",  OP_IDX_2,          4, 0xe7,  4,  4,  CLR_VC_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "tst",  OP_D_IDX,          2, 0xe7,  6,  6,  CLR_VC_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "tst",  OP_D_IDX_2,        4, 0xe7,  6,  6,  CLR_VC_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "tsta", OP_NONE,           1, 0x4d,  2,  2,  CLR_VC_CHG_NZ, cpu6811, 0 },
+  { "tsta", OP_NONE,           1, 0x97,  1,  1,  CLR_VC_CHG_NZ, cpu6812|cpu9s12x, 0 },
+  { "tstb", OP_NONE,           1, 0x5d,  2,  2,  CLR_VC_CHG_NZ, cpu6811, 0 },
+  { "tstb", OP_NONE,           1, 0xd7,  1,  1,  CLR_VC_CHG_NZ, cpu6812|cpu9s12x, 0 },
+
+  { "tstw",  OP_IND16| OP_PAGE2,          3, 0xf7,  3,  3,  CLR_VC_CHG_NZ, cpu9s12x, 0 },
+  { "tstw",  OP_IDX| OP_PAGE2,            2, 0xe7,  3,  3,  CLR_VC_CHG_NZ, cpu9s12x, 0 },
+  { "tstw",  OP_IDX_1| OP_PAGE2,          3, 0xe7,  3,  3,  CLR_VC_CHG_NZ, cpu9s12x, 0 },
+  { "tstw",  OP_IDX_2| OP_PAGE2,          4, 0xe7,  4,  4,  CLR_VC_CHG_NZ, cpu9s12x, 0 },
+  { "tstw",  OP_D_IDX| OP_PAGE2,          2, 0xe7,  6,  6,  CLR_VC_CHG_NZ, cpu9s12x, 0 },
+  { "tstw",  OP_D_IDX_2| OP_PAGE2,        4, 0xe7,  6,  6,  CLR_VC_CHG_NZ, cpu9s12x, 0 },
+
+  { "tstx", OP_NONE| OP_PAGE2,           1, 0x97,  1,  1,  CLR_VC_CHG_NZ, cpu9s12x, 0 },
+  { "tsty", OP_NONE| OP_PAGE2,           1, 0xd7,  1,  1,  CLR_VC_CHG_NZ, cpu9s12x, 0 },
+
+  { "tsx",  OP_NONE,           1, 0x30,  3,  3,  CHG_NONE, cpu6811, 0 },
+  { "tsy",  OP_NONE | OP_PAGE2,2, 0x30,  4,  4,  CHG_NONE, cpu6811, 0 },
+  { "txs",  OP_NONE,           1, 0x35,  3,  3,  CHG_NONE, cpu6811, 0 },
+  { "tys",  OP_NONE | OP_PAGE2,2, 0x35,  4,  4,  CHG_NONE, cpu6811, 0 },
+
+  { "wai",  OP_NONE,           1, 0x3e,  5,  _M, CHG_NONE, cpu6811|cpu6812|cpu9s12x, 0 },
+
+  { "wav",  OP_NONE | OP_PAGE2, 2, 0x3c,  8,  _M, SET_Z_CHG_HNVC, cpu6812|cpu9s12x, 0 },
+
+  { "xgdx", OP_NONE,           1, 0x8f,  3,  3,  CHG_NONE, cpu6811, 0 },
+  { "xgdy", OP_NONE | OP_PAGE2,2, 0x8f,  4,  4,  CHG_NONE, cpu6811, 0 },
+
+/* XGATE opcodes */
+/* Return to Scheduler and Others*/
+  { "brk",   M68XG_OP_NONE,           2, 0x0000, 0, 0, 0, 0, 0, cpuxgate, 0xffff },
+  { "nop",   M68XG_OP_NONE,           2, 0x0100, 0, 0, 0, 0, 0, cpuxgate, 0xffff },
+  { "rts",   M68XG_OP_NONE,           2, 0x0200, 0, 0, 0, 0, 0, cpuxgate, 0xffff },
+  { "sif",   M68XG_OP_NONE,           2, 0x0300, 0, 0, 0, 0, 0, cpuxgate, 0xffff },
+/* Semaphore Instructions */
+  { "csem",  M68XG_OP_IMM3,           2, 0x00f0, 0, 0, 0, 0, 0, cpuxgate, 0xf8ff },
+  { "csem",  M68XG_OP_R,              2, 0x00f1, 0, 0, 0, 0, 0, cpuxgate, 0xf8ff },
+  { "ssem",  M68XG_OP_IMM3,           2, 0x00f2, 0, 0, 0, 0, 0, cpuxgate, 0xf8ff },
+  { "ssem",  M68XG_OP_R,              2, 0x00f3, 0, 0, 0, 0, 0, cpuxgate, 0xf8ff },
+/* Single Register Instructions */
+  { "sex",   M68XG_OP_R,              2, 0x00f4, 0, 0, 0, 0, 0, cpuxgate, 0xf8ff },
+  { "par",   M68XG_OP_R,              2, 0x00f5, 0, 0, 0, 0, 0, cpuxgate, 0xf8ff },
+  { "jal",   M68XG_OP_R,              2, 0x00f6, 0, 0, 0, 0, 0, cpuxgate, 0xf8ff },
+  { "sif",   M68XG_OP_R,              2, 0x00f7, 0, 0, 0, 0, 0, cpuxgate, 0xf8ff },
+/* Special Move instructions */
+  { "tfr",   M68XG_OP_R,              2, 0x00f8, 0, 0, 0, 0, 0, cpuxgate, 0xf8ff }, /* RD,CCR */
+  { "tfr",   M68XG_OP_R,              2, 0x00f9, 0, 0, 0, 0, 0, cpuxgate, 0xf8ff }, /* CCR,RS */
+  { "tfr",   M68XG_OP_R,              2, 0x00fa, 0, 0, 0, 0, 0, cpuxgate, 0xf8ff }, /* RD,PC  */
+/* Shift instructions Dyadic */
+  { "bffo",  M68XG_OP_R_R,            2, 0x0810, 0, 0, 0, 0, 0, cpuxgate, 0xf81f },
+  { "asr",   M68XG_OP_R_R,            2, 0x0811, 0, 0, 0, 0, 0, cpuxgate, 0xf81f },
+  { "csl",   M68XG_OP_R_R,            2, 0x0812, 0, 0, 0, 0, 0, cpuxgate, 0xf81f },
+  { "csr",   M68XG_OP_R_R,            2, 0x0813, 0, 0, 0, 0, 0, cpuxgate, 0xf81f },
+  { "lsl",   M68XG_OP_R_R,            2, 0x0814, 0, 0, 0, 0, 0, cpuxgate, 0xf81f },
+  { "lsr",   M68XG_OP_R_R,            2, 0x0815, 0, 0, 0, 0, 0, cpuxgate, 0xf81f },
+  { "rol",   M68XG_OP_R_R,            2, 0x0816, 0, 0, 0, 0, 0, cpuxgate, 0xf81f },
+  { "ror",   M68XG_OP_R_R,            2, 0x0817, 0, 0, 0, 0, 0, cpuxgate, 0xf81f },
+/* Dyadic aliases */
+  { "cmp",   M68XG_OP_R_R,            2, 0x1800, 0, 0, 0, 0, 0, cpuxgate, 0x0000 },
+  { "com",   M68XG_OP_R_R,            2, 0x1003, 0, 0, 0, 0, 0, cpuxgate, 0x0000 },
+  { "cpc",   M68XG_OP_R_R,            2, 0x1801, 0, 0, 0, 0, 0, cpuxgate, 0x0000 },
+  { "mov",   M68XG_OP_R_R,            2, 0x1002, 0, 0, 0, 0, 0, cpuxgate, 0x0000 },
+  { "neg",   M68XG_OP_R_R,            2, 0x1800, 0, 0, 0, 0, 0, cpuxgate, 0x0000 },
+/* Monadic aliases */
+  { "com",   M68XG_OP_R,              2, 0x1003, 0, 0, 0, 0, 0, cpuxgate, 0x0000 },
+  { "neg",   M68XG_OP_R,              2, 0x1800, 0, 0, 0, 0, 0, cpuxgate, 0x0000 },
+  { "tst",   M68XG_OP_R,              2, 0x1800, 0, 0, 0, 0, 0, cpuxgate, 0x0000 },
+/* Shift instructions immediate */
+  { "asr",   M68XG_OP_R_IMM4,         2, 0x0809, 0, 0, 0, 0, 0, cpuxgate, 0xf80f },
+  { "csl",   M68XG_OP_R_IMM4,         2, 0x080a, 0, 0, 0, 0, 0, cpuxgate, 0xf80f },
+  { "csr",   M68XG_OP_R_IMM4,         2, 0x080b, 0, 0, 0, 0, 0, cpuxgate, 0xf80f },
+  { "lsl",   M68XG_OP_R_IMM4,         2, 0x080c, 0, 0, 0, 0, 0, cpuxgate, 0xf80f },
+  { "lsr",   M68XG_OP_R_IMM4,         2, 0x080d, 0, 0, 0, 0, 0, cpuxgate, 0xf80f },
+  { "rol",   M68XG_OP_R_IMM4,         2, 0x080e, 0, 0, 0, 0, 0, cpuxgate, 0xf80f },
+  { "ror",   M68XG_OP_R_IMM4,         2, 0x080f, 0, 0, 0, 0, 0, cpuxgate, 0xf80f },
+/* Logical Triadic */
+  { "and",   M68XG_OP_R_R_R,          2, 0x1000, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+  { "or",    M68XG_OP_R_R_R,          2, 0x1002, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+  { "xnor",  M68XG_OP_R_R_R,          2, 0x1003, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+/* Arithmetic Triadic */
+  { "sub",   M68XG_OP_R_R_R,          2, 0x1800, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+  { "sbc",   M68XG_OP_R_R_R,          2, 0x1801, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+  { "add",   M68XG_OP_R_R_R,          2, 0x1802, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+  { "adc",   M68XG_OP_R_R_R,          2, 0x1803, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+/* Branches */
+  { "bcc",   M68XG_OP_REL9,           2, 0x2000, 0, 0, 0, 0, 0, cpuxgate, 0xfe00 },
+  { "bhs",   M68XG_OP_REL9,           2, 0x2000, 0, 0, 0, 0, 0, cpuxgate, 0x0000 }, /* Synonym. */
+  { "bcs",   M68XG_OP_REL9,           2, 0x2200, 0, 0, 0, 0, 0, cpuxgate, 0xfe00 },
+  { "blo",   M68XG_OP_REL9,           2, 0x2200, 0, 0, 0, 0, 0, cpuxgate, 0xfe00 }, /* Synonym. */
+  { "bne",   M68XG_OP_REL9,           2, 0x2400, 0, 0, 0, 0, 0, cpuxgate, 0xfe00 },
+  { "beq",   M68XG_OP_REL9,           2, 0x2600, 0, 0, 0, 0, 0, cpuxgate, 0xfe00 },
+  { "bpl",   M68XG_OP_REL9,           2, 0x2800, 0, 0, 0, 0, 0, cpuxgate, 0xfe00 },
+  { "bmi",   M68XG_OP_REL9,           2, 0x2a00, 0, 0, 0, 0, 0, cpuxgate, 0xfe00 },
+  { "bvc",   M68XG_OP_REL9,           2, 0x2c00, 0, 0, 0, 0, 0, cpuxgate, 0xfe00 },
+  { "bvs",   M68XG_OP_REL9,           2, 0x2e00, 0, 0, 0, 0, 0, cpuxgate, 0xfe00 },
+  { "bhi",   M68XG_OP_REL9,           2, 0x3000, 0, 0, 0, 0, 0, cpuxgate, 0xfe00 },
+  { "bls",   M68XG_OP_REL9,           2, 0x3200, 0, 0, 0, 0, 0, cpuxgate, 0xfe00 },
+  { "bge",   M68XG_OP_REL9,           2, 0x3400, 0, 0, 0, 0, 0, cpuxgate, 0xfe00 },
+  { "blt",   M68XG_OP_REL9,           2, 0x3600, 0, 0, 0, 0, 0, cpuxgate, 0xfe00 },
+  { "bgt",   M68XG_OP_REL9,           2, 0x3800, 0, 0, 0, 0, 0, cpuxgate, 0xfe00 },
+  { "ble",   M68XG_OP_REL9,           2, 0x3a00, 0, 0, 0, 0, 0, cpuxgate, 0xfe00 },
+  { "bra",   M68XG_OP_REL10,          2, 0x3c00, 0, 0, 0, 0, 0, cpuxgate, 0xfc00 },
+/* Load and Store Instructions */
+  { "ldb",   M68XG_OP_R_R_OFFS5,      2, 0x4000, 0, 0, 0, 0, 0, cpuxgate, 0xf800 },
+  { "ldw",   M68XG_OP_R_R_OFFS5,      2, 0x4800, 0, 0, 0, 0, 0, cpuxgate, 0xf800 },
+  { "stb",   M68XG_OP_R_R_OFFS5,      2, 0x5000, 0, 0, 0, 0, 0, cpuxgate, 0xf800 },
+  { "stw",   M68XG_OP_R_R_OFFS5,      2, 0x5800, 0, 0, 0, 0, 0, cpuxgate, 0xf800 },
+
+  { "ldb",   M68XG_OP_RD_RB_RI,       2, 0x6000, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+  { "ldw",   M68XG_OP_RD_RB_RI,       2, 0x6800, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+  { "stb",   M68XG_OP_RD_RB_RI,       2, 0x7000, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+  { "stw",   M68XG_OP_RD_RB_RI,       2, 0x7800, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+
+  { "ldb",   M68XG_OP_RD_RB_RIp,      2, 0x6001, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+  { "ldw",   M68XG_OP_RD_RB_RIp,      2, 0x6801, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+  { "stb",   M68XG_OP_RD_RB_RIp,      2, 0x7001, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+  { "stw",   M68XG_OP_RD_RB_RIp,      2, 0x7801, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+
+  { "ldb",   M68XG_OP_RD_RB_mRI,      2, 0x6002, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+  { "ldw",   M68XG_OP_RD_RB_mRI,      2, 0x6802, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+  { "stb",   M68XG_OP_RD_RB_mRI,      2, 0x7002, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+  { "stw",   M68XG_OP_RD_RB_mRI,      2, 0x7802, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+/* Bit Field Instructions */
+  { "bfext", M68XG_OP_R_R_R,          2, 0x6003, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+  { "bfins", M68XG_OP_R_R_R,          2, 0x6803, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+  { "bfinsi",M68XG_OP_R_R_R,          2, 0x7003, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+  { "bfinsx",M68XG_OP_R_R_R,          2, 0x7803, 0, 0, 0, 0, 0, cpuxgate, 0xf803 },
+/* Logic Immediate Instructions */
+  { "andl",  M68XG_OP_R_IMM8,         2, 0x8000, 0, 0, 0, 0, 0, cpuxgate, 0xf800 },
+  { "andh",  M68XG_OP_R_IMM8,         2, 0x8800, 0, 0, 0, 0, 0, cpuxgate, 0xf800 },
+  { "bitl",  M68XG_OP_R_IMM8,         2, 0x9000, 0, 0, 0, 0, 0, cpuxgate, 0xf800 },
+  { "bith",  M68XG_OP_R_IMM8,         2, 0x9800, 0, 0, 0, 0, 0, cpuxgate, 0xf800 },
+  { "orl",   M68XG_OP_R_IMM8,         2, 0xa000, 0, 0, 0, 0, 0, cpuxgate, 0xf800 },
+  { "orh",   M68XG_OP_R_IMM8,         2, 0xa800, 0, 0, 0, 0, 0, cpuxgate, 0xf800 },
+  { "xnorl", M68XG_OP_R_IMM8,         2, 0xb000, 0, 0, 0, 0, 0, cpuxgate, 0xf800 },
+  { "xnorh", M68XG_OP_R_IMM8,         2, 0xb800, 0, 0, 0, 0, 0, cpuxgate, 0xf800 },
+/* Arithmetic Immediate Instructions */
+  { "subl",  M68XG_OP_R_IMM8,         2, 0xc000, 0, 0, 0, 0, 0, cpuxgate, 0xf800 },
+  { "subh",  M68XG_OP_R_IMM8,         2, 0xc800, 0, 0, 0, 0, 0, cpuxgate, 0xf800 },
+  { "cmpl",  M68XG_OP_R_IMM8,         2, 0xd000, 0, 0, 0, 0, 0, cpuxgate, 0xf800 },
+  { "cpch",  M68XG_OP_R_IMM8,         2, 0xd800, 0, 0, 0, 0, 0, cpuxgate, 0xf800 },
+  { "addl",  M68XG_OP_R_IMM8,         2, 0xe000, 0, 0, 0, 0, 0, cpuxgate, 0xf800 },
+  { "addh",  M68XG_OP_R_IMM8,         2, 0xe800, 0, 0, 0, 0, 0, cpuxgate, 0xf800 },
+  { "ldl",   M68XG_OP_R_IMM8,         2, 0xf000, 0, 0, 0, 0, 0, cpuxgate, 0xf800 },
+  { "ldh",   M68XG_OP_R_IMM8,         2, 0xf800, 0, 0, 0, 0, 0, cpuxgate, 0xf800 },
+/* 16 bit versions.
+ * These are pseudo opcodes to allow 16 bit addresses to be passed.
+ * The mask ensures that we will never disassemble to these instructions.
+ */
+/* Logic Immediate Instructions */
+  { "and",   M68XG_OP_R_IMM16,        2, 0x8000, 0, 0, 0, 0, 0, cpuxgate, 0x0000 },
+  { "bit",   M68XG_OP_R_IMM16,        2, 0x9000, 0, 0, 0, 0, 0, cpuxgate, 0x0000 },
+  { "or",    M68XG_OP_R_IMM16,        2, 0xa000, 0, 0, 0, 0, 0, cpuxgate, 0x0000 },
+  { "xnor",  M68XG_OP_R_IMM16,        2, 0xb000, 0, 0, 0, 0, 0, cpuxgate, 0x0000 },
+/* Arithmetic Immediate Instructions */
+  { "sub",   M68XG_OP_R_IMM16,        2, 0xc000, 0, 0, 0, 0, 0, cpuxgate, 0x0000 },
+  { "cmp",   M68XG_OP_R_IMM16,        2, 0xd000, 0, 0, 0, 0, 0, cpuxgate, 0x0000 },
+  { "add",   M68XG_OP_R_IMM16,        2, 0xe000, 0, 0, 0, 0, 0, cpuxgate, 0x0000 },
+ /* ld is for backwards compatability only, the correct opcode is ldw */
+  { "ld",    M68XG_OP_R_IMM16,        2, 0xf000, 0, 0, 0, 0, 0, cpuxgate, 0x0000 },
+  { "ldw",   M68XG_OP_R_IMM16,        2, 0xf000, 0, 0, 0, 0, 0, cpuxgate, 0x0000 }
 };
 
 const int m68hc11_num_opcodes = TABLE_SIZE (m68hc11_opcodes);
diff --git a/opcodes/m68k-opc.c b/opcodes/m68k-opc.c
index 3c8310a..8347ef1 100644
--- a/opcodes/m68k-opc.c
+++ b/opcodes/m68k-opc.c
@@ -1850,11 +1850,11 @@ const struct m68k_opcode m68k_opcodes[] =
 {"pmove", 4,    two(0xf000,0x4200), two(0xffc0,0xe3ff), "28%s", m68851 },
 {"pmove", 4,    two(0xf000,0x4000), two(0xffc0,0xe3ff), "|sW8", m68030|m68851 },
 {"pmove", 4,    two(0xf000,0x4200), two(0xffc0,0xe3ff), "W8~s", m68030|m68851 },
-{"pmove", 4,    two(0xf000,0x6200), two(0xffc0,0xe3e3), "*wX3", m68851 },
-{"pmove", 4,    two(0xf000,0x6000), two(0xffc0,0xe3e3), "X3%s", m68851 },
 {"pmove", 4,    two(0xf000,0x6000), two(0xffc0,0xffff), "*wY8", m68030|m68851 },
 {"pmove", 4,    two(0xf000,0x6200), two(0xffc0,0xffff), "Y8%s", m68030|m68851 },
 {"pmove", 4,    two(0xf000,0x6600), two(0xffc0,0xffff), "Z8%s", m68851 },
+{"pmove", 4,    two(0xf000,0x6000), two(0xffc0,0xe3e3), "*wX3", m68851 },
+{"pmove", 4,    two(0xf000,0x6200), two(0xffc0,0xe3e3), "X3%s", m68851 },
 {"pmove", 4,    two(0xf000,0x0800), two(0xffc0,0xfbff), "*l38", m68030 },
 {"pmove", 4,    two(0xf000,0x0a00), two(0xffc0,0xfbff), "38%s", m68030 },
 
diff --git a/opcodes/micromips-opc.c b/opcodes/micromips-opc.c
index 251d801..0f18c71 100644
--- a/opcodes/micromips-opc.c
+++ b/opcodes/micromips-opc.c
@@ -1,5 +1,5 @@
 /* micromips-opc.c.  microMIPS opcode table.
-   Copyright 2008 Free Software Foundation, Inc.
+   Copyright 2008, 2012 Free Software Foundation, Inc.
    Contributed by Chao-ying Fu, MIPS Technologies, Inc.
 
    This file is part of the GNU opcodes library.
@@ -19,8 +19,8 @@
    Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <stdio.h>
 #include "sysdep.h"
+#include <stdio.h>
 #include "opcode/mips.h"
 
 #define UBD	INSN_UNCOND_BRANCH_DELAY
diff --git a/opcodes/mips-dis.c b/opcodes/mips-dis.c
index 0d1de30..c15c6df 100644
--- a/opcodes/mips-dis.c
+++ b/opcodes/mips-dis.c
@@ -1,6 +1,6 @@
 /* Print mips instructions for GDB, the GNU debugger, or for objdump.
    Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009
+   2000, 2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2012
    Free Software Foundation, Inc.
    Contributed by Nobuyuki Hikichi(hikichi at sra.co.jp).
 
@@ -619,6 +619,14 @@ const struct mips_arch_choice mips_arch_choices[] =
     mips_cp0sel_names_xlr, ARRAY_SIZE (mips_cp0sel_names_xlr),
     mips_hwr_names_numeric },
 
+  /* XLP is mostly like XLR, with the prominent exception it is being
+     MIPS64R2.  */
+  { "xlp", 1, bfd_mach_mips_xlr, CPU_XLR,
+    ISA_MIPS64R2 | INSN_XLR,
+    mips_cp0_names_xlr,
+    mips_cp0sel_names_xlr, ARRAY_SIZE (mips_cp0sel_names_xlr),
+    mips_hwr_names_numeric },
+
   /* This entry, mips16, is here only for ISA/processor selection; do
      not print its name.  */
   { "",		1, bfd_mach_mips16, CPU_MIPS16, ISA_MIPS3,
@@ -1344,7 +1352,6 @@ print_insn_args (const char *d,
 
 	case 'B':
 	  (*info->fprintf_func) (info->stream, "0x%lx",
-
 				 (l >> OP_SH_CODE20) & OP_MASK_CODE20);
 	  break;
 
diff --git a/opcodes/mips-opc.c b/opcodes/mips-opc.c
index 4083c1a..93238d4 100644
--- a/opcodes/mips-opc.c
+++ b/opcodes/mips-opc.c
@@ -1,6 +1,7 @@
 /* mips-opc.c -- MIPS opcode list.
    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
-   2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2012
+   Free Software Foundation, Inc.
    Contributed by Ralph Campbell and OSF
    Commented and modified by Ian Lance Taylor, Cygnus Support
    Extended for MIPS32 support by Anders Norlander, and by SiByte, Inc.
@@ -24,8 +25,8 @@
    Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <stdio.h>
 #include "sysdep.h"
+#include <stdio.h>
 #include "opcode/mips.h"
 
 /* Short hand so the lines aren't too long.  */
diff --git a/opcodes/mips16-opc.c b/opcodes/mips16-opc.c
index f46cf28..01cbcde 100644
--- a/opcodes/mips16-opc.c
+++ b/opcodes/mips16-opc.c
@@ -1,5 +1,5 @@
 /* mips16-opc.c.  Mips16 opcode table.
-   Copyright 1996, 1997, 1998, 2000, 2005, 2006, 2007
+   Copyright 1996, 1997, 1998, 2000, 2005, 2006, 2007, 2012
    Free Software Foundation, Inc.
    Contributed by Ian Lance Taylor, Cygnus Support
 
@@ -20,8 +20,8 @@
    Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <stdio.h>
 #include "sysdep.h"
+#include <stdio.h>
 #include "opcode/mips.h"
 
 /* This is the opcodes table for the mips16 processor.  The format of
diff --git a/opcodes/mmix-dis.c b/opcodes/mmix-dis.c
index 22db268..d2ce581 100644
--- a/opcodes/mmix-dis.c
+++ b/opcodes/mmix-dis.c
@@ -1,5 +1,5 @@
 /* mmix-dis.c -- Disassemble MMIX instructions.
-   Copyright 2000, 2001, 2002, 2005, 2007 Free Software Foundation, Inc.
+   Copyright 2000, 2001, 2002, 2005, 2007, 2012 Free Software Foundation, Inc.
    Written by Hans-Peter Nilsson (hp at bitrange.com)
 
    This file is part of the GNU opcodes library.
@@ -19,9 +19,8 @@
    Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
 #include "opcode/mmix.h"
 #include "dis-asm.h"
 #include "libiberty.h"
diff --git a/opcodes/moxie-dis.c b/opcodes/moxie-dis.c
index 4e67e2c..79ef099 100644
--- a/opcodes/moxie-dis.c
+++ b/opcodes/moxie-dis.c
@@ -1,5 +1,5 @@
 /* Disassemble moxie instructions.
-   Copyright 2009
+   Copyright 2009, 2012
    Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
@@ -19,8 +19,9 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <stdio.h>
 #include "sysdep.h"
+#include <stdio.h>
+
 #define STATIC_TABLE
 #define DEFINE_TABLE
 
diff --git a/opcodes/msp430-dis.c b/opcodes/msp430-dis.c
index 9d7edbe..71690a3 100644
--- a/opcodes/msp430-dis.c
+++ b/opcodes/msp430-dis.c
@@ -1,5 +1,5 @@
 /* Disassemble MSP430 instructions.
-   Copyright (C) 2002, 2004, 2005, 2007, 2009, 2010
+   Copyright (C) 2002, 2004, 2005, 2007, 2009, 2010, 2012
    Free Software Foundation, Inc.
    
    Contributed by Dmitry Diky <diwil at mail.ru>
@@ -21,9 +21,9 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include <stdio.h>
 #include <ctype.h>
-#include <string.h>
 #include <sys/types.h>
 
 #include "dis-asm.h"
diff --git a/opcodes/mt-dis.c b/opcodes/mt-dis.c
index 28f4655..3767be2 100644
--- a/opcodes/mt-dis.c
+++ b/opcodes/mt-dis.c
@@ -72,7 +72,7 @@ print_dollarhex (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
 {
   disassemble_info *info = (disassemble_info *) dis_info;
 
-  info->fprintf_func (info->stream, "$%lx", value);
+  info->fprintf_func (info->stream, "$%lx", value & 0xffffffff);
 
   if (0)
     print_normal (cd, dis_info, value, attrs, pc, length);
diff --git a/opcodes/or32-dis.c b/opcodes/or32-dis.c
index a0dc92a..abb80bf 100644
--- a/opcodes/or32-dis.c
+++ b/opcodes/or32-dis.c
@@ -1,5 +1,5 @@
 /* Instruction printing code for the OpenRISC 1000
-   Copyright (C) 2002, 2005, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2005, 2007, 2012 Free Software Foundation, Inc.
    Contributed by Damjan Lampret <lampret at opencores.org>.
    Modified from a29k port.
 
@@ -24,11 +24,10 @@
 #define DEBUG 0
 #endif
 
+#include "sysdep.h"
 #include "dis-asm.h"
 #include "opcode/or32.h"
 #include "safe-ctype.h"
-#include <string.h>
-#include <stdlib.h>
 
 #define EXTEND29(x) ((x) & (unsigned long) 0x10000000 ? ((x) | (unsigned long) 0xf0000000) : ((x)))
 
diff --git a/opcodes/or32-opc.c b/opcodes/or32-opc.c
index 94a1ace..df99d56 100644
--- a/opcodes/or32-opc.c
+++ b/opcodes/or32-opc.c
@@ -1,5 +1,6 @@
 /* Table of opcodes for the OpenRISC 1000 ISA.
-   Copyright 2002, 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
+   Copyright 2002, 2004, 2005, 2007, 2008, 2009, 2012
+   Free Software Foundation, Inc.
    Contributed by Damjan Lampret (lampret at opencores.org).
    
    This file is part of the GNU opcodes library.
@@ -19,18 +20,17 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-/* We treat all letters the same in encode/decode routines so
-   we need to assign some characteristics to them like signess etc.  */
+#include "sysdep.h"
 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include "safe-ctype.h"
 #include "ansidecl.h"
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
 #include "opcode/or32.h"
 
+/* We treat all letters the same in encode/decode routines so
+   we need to assign some characteristics to them like signess etc.  */
+
 const struct or32_letter or32_letters[] =
 {
   { 'A', NUM_UNSIGNED },
diff --git a/opcodes/pj-dis.c b/opcodes/pj-dis.c
index 477f406..7bd868e 100644
--- a/opcodes/pj-dis.c
+++ b/opcodes/pj-dis.c
@@ -1,5 +1,6 @@
 /* pj-dis.c -- Disassemble picoJava instructions.
-   Copyright 1999, 2000, 2001, 2002, 2005, 2007 Free Software Foundation, Inc.
+   Copyright 1999, 2000, 2001, 2002, 2005, 2007, 2012
+   Free Software Foundation, Inc.
    Contributed by Steve Chamberlain, of Transmeta (sac at pobox.com).
 
    This file is part of the GNU opcodes library.
@@ -19,8 +20,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <stdio.h>
 #include "sysdep.h"
+#include <stdio.h>
 #include "opcode/pj.h"
 #include "dis-asm.h"
 
diff --git a/opcodes/po/vi.gmo b/opcodes/po/vi.gmo
index 28974e4..2f74f30 100644
Binary files a/opcodes/po/vi.gmo and b/opcodes/po/vi.gmo differ
diff --git a/opcodes/po/vi.po b/opcodes/po/vi.po
index deb3c8c..d2051e8 100644
--- a/opcodes/po/vi.po
+++ b/opcodes/po/vi.po
@@ -1,21 +1,26 @@
 # Vietnamese Translation for Opcodes.
-# Copyright © 2010 Free Software Foundation, Inc.
+# Copyright © 2012 Free Software Foundation, Inc.
 # This file is distributed under the same license as the binutils package.
 # Clytie Siddall <clytie at riverland.net.au>, 2005-2010.
+# Trần Ngọc Quân <vnwildman at gmail.com>, 2012.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: opcodes 2.20.1\n"
+"Project-Id-Version: opcodes-2.21.53\n"
 "Report-Msgid-Bugs-To: bug-binutils at gnu.org\n"
-"POT-Creation-Date: 2010-03-03 15:04+0100\n"
-"PO-Revision-Date: 2010-04-22 22:25+0930\n"
-"Last-Translator: Clytie Siddall <clytie at riverland.net.au>\n"
-"Language-Team: Vietnamese <vi-VN at googlegroups.com>\n"
+"POT-Creation-Date: 2011-06-02 14:30+0100\n"
+"PO-Revision-Date: 2012-06-05 09:13+0700\n"
+"Last-Translator: Trần Ngọc Quân <vnwildman at gmail.com>\n"
+"Language-Team: Vietnamese <translation-team-vi at lists.sourceforge.net>\n"
+"Language: vi\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 "X-Generator: LocFactoryEditor 1.8\n"
+"X-Poedit-Language: Vietnamese\n"
+"X-Poedit-Country: VIET NAM\n"
+"X-Poedit-SourceCharset: utf-8\n"
 
 #: alpha-opc.c:155
 msgid "branch operand unaligned"
@@ -35,7 +40,7 @@ msgstr "không thể vừa hằng số có giá trị khác nhau khít câu lệ
 
 #: arc-opc.c:395
 msgid "auxiliary register not allowed here"
-msgstr "ở đây không cho phép thanh ghi bổ sung"
+msgstr "ở đây không cho phép thanh ghi bổ trợ"
 
 #: arc-opc.c:401 arc-opc.c:418
 msgid "attempt to set readonly register"
@@ -43,12 +48,12 @@ msgstr "thử đặt thanh ghi chỉ đọc"
 
 #: arc-opc.c:406 arc-opc.c:423
 msgid "attempt to read writeonly register"
-msgstr "thử đọc thanh ghi chỉ ghi"
+msgstr "thử đọc thanh ghi chỉ cho phép ghi"
 
 #: arc-opc.c:428
 #, c-format
 msgid "invalid register number `%d'"
-msgstr "số hiệu thanh ghi không hợp lệ « %d »"
+msgstr "số hiệu thanh ghi không hợp lệ \"%d\""
 
 #: arc-opc.c:594 arc-opc.c:645 arc-opc.c:673
 msgid "too many long constants"
@@ -61,7 +66,7 @@ msgstr "quá nhiều shimm trong việc nạp"
 #. Do we have a limm already?
 #: arc-opc.c:781
 msgid "impossible store"
-msgstr "việc cất giữ không thể"
+msgstr "không thể lưu"
 
 #: arc-opc.c:814
 msgid "st operand error"
@@ -109,25 +114,25 @@ msgstr "địa chỉ nhánh không phải nằm trên ranh giới 4 byte"
 
 #: arc-opc.c:1024
 msgid "must specify .jd or no nullify suffix"
-msgstr "phải xác định .jd, không thì không hủy bỏ hậu phương"
+msgstr "phải xác định .jd, không thì không hủy bỏ hậu tố"
 
-#: arm-dis.c:1915
+#: arm-dis.c:1994
 msgid "<illegal precision>"
-msgstr "<độ chính xác cấm>"
+msgstr "<độ chính không hợp lệ>"
 
 #. XXX - should break 'option' at following delimiter.
-#: arm-dis.c:4018
+#: arm-dis.c:4376
 #, c-format
 msgid "Unrecognised register name set: %s\n"
 msgstr "Không nhận ra tập hợp tên thanh ghi: %s\n"
 
 #. XXX - should break 'option' at following delimiter.
-#: arm-dis.c:4026
+#: arm-dis.c:4384
 #, c-format
 msgid "Unrecognised disassembler option: %s\n"
 msgstr "Không nhận ra tùy chọn rã: %s\n"
 
-#: arm-dis.c:4522
+#: arm-dis.c:4976
 #, c-format
 msgid ""
 "\n"
@@ -135,35 +140,36 @@ msgid ""
 "the -M switch:\n"
 msgstr ""
 "\n"
-"Những tùy chọn rã đặc trưng cho ARM theo đây được hỗ trợ để sử dụng với đối số « -M »:\n"
+"Những tùy chọn rã đặc trưng cho ARM theo đây được hỗ trợ để sử dụng với\n"
+"đối số \"-M\":\n"
 
-#: avr-dis.c:115 avr-dis.c:125
+#: avr-dis.c:115 avr-dis.c:135
 #, c-format
 msgid "undefined"
-msgstr "chưa xác định"
+msgstr "chưa định nghĩa"
 
-#: avr-dis.c:187
+#: avr-dis.c:197
 #, c-format
 msgid "Internal disassembler error"
 msgstr "lỗi rã nội bộ"
 
-#: avr-dis.c:236
+#: avr-dis.c:250
 #, c-format
 msgid "unknown constraint `%c'"
-msgstr "không rõ ràng buộc « %c »"
+msgstr "không rõ ràng buộc \"%c\""
 
-#: cgen-asm.c:336 fr30-ibld.c:200 frv-ibld.c:200 ip2k-ibld.c:200
-#: iq2000-ibld.c:200 lm32-ibld.c:200 m32c-ibld.c:200 m32r-ibld.c:200
-#: mep-ibld.c:200 mt-ibld.c:200 openrisc-ibld.c:200 xc16x-ibld.c:200
-#: xstormy16-ibld.c:200
+#: cgen-asm.c:336 fr30-ibld.c:201 frv-ibld.c:201 ip2k-ibld.c:201
+#: iq2000-ibld.c:201 lm32-ibld.c:201 m32c-ibld.c:201 m32r-ibld.c:201
+#: mep-ibld.c:201 mt-ibld.c:201 openrisc-ibld.c:201 xc16x-ibld.c:201
+#: xstormy16-ibld.c:201
 #, c-format
 msgid "operand out of range (%ld not between %ld and %ld)"
-msgstr "tác tử ở ngoại phạm vi (%ld không nằm giữa %ld và %ld)"
+msgstr "tác tử nằm ngoài phạm vi (%ld không nằm giữa %ld và %ld)"
 
 #: cgen-asm.c:358
 #, c-format
 msgid "operand out of range (%lu not between %lu and %lu)"
-msgstr "tác tử ở ngoại phạm vi (%lu không nằm giữa %lu và %lu)"
+msgstr "tác tử nằm ngoài phạm vi (%lu không nằm giữa %lu và %lu)"
 
 #: d30v-dis.c:255
 #, c-format
@@ -171,17 +177,17 @@ msgid "<unknown register %d>"
 msgstr "<không rõ thanh ghi %d>"
 
 #. Can't happen.
-#: dis-buf.c:59
+#: dis-buf.c:60
 #, c-format
 msgid "Unknown error %d\n"
 msgstr "Lỗi không rõ %d\n"
 
-#: dis-buf.c:68
+#: dis-buf.c:69
 #, c-format
 msgid "Address 0x%s is out of bounds.\n"
-msgstr "Địa chỉ 0x%s ở ngoại phạm vi. \n"
+msgstr "Địa chỉ 0x%s nằm ngoài phạm vi. \n"
 
-#: fr30-asm.c:93 m32c-asm.c:877 m32c-asm.c:884
+#: fr30-asm.c:93 m32c-asm.c:872 m32c-asm.c:879
 msgid "Register number is not valid"
 msgstr "Số thanh ghi không hợp lệ"
 
@@ -193,156 +199,156 @@ msgstr "Thanh ghi phải nằm giữa r0 và r7"
 msgid "Register must be between r8 and r15"
 msgstr "Thanh ghi phải nằm giữa r8 và r15"
 
-#: fr30-asm.c:116 m32c-asm.c:915
+#: fr30-asm.c:116 m32c-asm.c:910
 msgid "Register list is not valid"
 msgstr "Danh sách thanh ghi không hợp lệ"
 
 #: fr30-asm.c:310 frv-asm.c:1263 ip2k-asm.c:511 iq2000-asm.c:459
-#: lm32-asm.c:349 m32c-asm.c:1589 m32r-asm.c:328 mep-asm.c:1287 mt-asm.c:595
+#: lm32-asm.c:349 m32c-asm.c:1584 m32r-asm.c:328 mep-asm.c:1286 mt-asm.c:595
 #: openrisc-asm.c:241 xc16x-asm.c:376 xstormy16-asm.c:276
 #, c-format
 msgid "Unrecognized field %d while parsing.\n"
 msgstr "Không nhận ra trường %d trong khi phân tách.\n"
 
 #: fr30-asm.c:361 frv-asm.c:1314 ip2k-asm.c:562 iq2000-asm.c:510
-#: lm32-asm.c:400 m32c-asm.c:1640 m32r-asm.c:379 mep-asm.c:1338 mt-asm.c:646
+#: lm32-asm.c:400 m32c-asm.c:1635 m32r-asm.c:379 mep-asm.c:1337 mt-asm.c:646
 #: openrisc-asm.c:292 xc16x-asm.c:427 xstormy16-asm.c:327
 msgid "missing mnemonic in syntax string"
 msgstr "thiếu điều giúp trí nhớ trong chuỗi cú pháp"
 
 #. We couldn't parse it.
-#: fr30-asm.c:496 fr30-asm.c:500 fr30-asm.c:587 fr30-asm.c:688 frv-asm.c:1449
-#: frv-asm.c:1453 frv-asm.c:1540 frv-asm.c:1641 ip2k-asm.c:697 ip2k-asm.c:701
-#: ip2k-asm.c:788 ip2k-asm.c:889 iq2000-asm.c:645 iq2000-asm.c:649
-#: iq2000-asm.c:736 iq2000-asm.c:837 lm32-asm.c:535 lm32-asm.c:539
-#: lm32-asm.c:626 lm32-asm.c:727 m32c-asm.c:1775 m32c-asm.c:1779
-#: m32c-asm.c:1866 m32c-asm.c:1967 m32r-asm.c:514 m32r-asm.c:518
-#: m32r-asm.c:605 m32r-asm.c:706 mep-asm.c:1473 mep-asm.c:1477 mep-asm.c:1564
-#: mep-asm.c:1665 mt-asm.c:781 mt-asm.c:785 mt-asm.c:872 mt-asm.c:973
-#: openrisc-asm.c:427 openrisc-asm.c:431 openrisc-asm.c:518 openrisc-asm.c:619
-#: xc16x-asm.c:562 xc16x-asm.c:566 xc16x-asm.c:653 xc16x-asm.c:754
-#: xstormy16-asm.c:462 xstormy16-asm.c:466 xstormy16-asm.c:553
-#: xstormy16-asm.c:654
+#: fr30-asm.c:496 fr30-asm.c:500 fr30-asm.c:589 fr30-asm.c:696 frv-asm.c:1449
+#: frv-asm.c:1453 frv-asm.c:1542 frv-asm.c:1649 ip2k-asm.c:697 ip2k-asm.c:701
+#: ip2k-asm.c:790 ip2k-asm.c:897 iq2000-asm.c:645 iq2000-asm.c:649
+#: iq2000-asm.c:738 iq2000-asm.c:845 lm32-asm.c:535 lm32-asm.c:539
+#: lm32-asm.c:628 lm32-asm.c:735 m32c-asm.c:1770 m32c-asm.c:1774
+#: m32c-asm.c:1863 m32c-asm.c:1970 m32r-asm.c:514 m32r-asm.c:518
+#: m32r-asm.c:607 m32r-asm.c:714 mep-asm.c:1472 mep-asm.c:1476 mep-asm.c:1565
+#: mep-asm.c:1672 mt-asm.c:781 mt-asm.c:785 mt-asm.c:874 mt-asm.c:981
+#: openrisc-asm.c:427 openrisc-asm.c:431 openrisc-asm.c:520 openrisc-asm.c:627
+#: xc16x-asm.c:562 xc16x-asm.c:566 xc16x-asm.c:655 xc16x-asm.c:762
+#: xstormy16-asm.c:462 xstormy16-asm.c:466 xstormy16-asm.c:555
+#: xstormy16-asm.c:662
 msgid "unrecognized instruction"
 msgstr "không nhận ra câu lệnh"
 
 #: fr30-asm.c:543 frv-asm.c:1496 ip2k-asm.c:744 iq2000-asm.c:692
-#: lm32-asm.c:582 m32c-asm.c:1822 m32r-asm.c:561 mep-asm.c:1520 mt-asm.c:828
+#: lm32-asm.c:582 m32c-asm.c:1817 m32r-asm.c:561 mep-asm.c:1519 mt-asm.c:828
 #: openrisc-asm.c:474 xc16x-asm.c:609 xstormy16-asm.c:509
 #, c-format
 msgid "syntax error (expected char `%c', found `%c')"
-msgstr "gặp lỗi cú pháp (mong đợi ký tự « %c », còn tìm « %c »)"
+msgstr "gặp lỗi cú pháp (mong đợi ký tự \"%c\", còn tìm \"%c\")"
 
 #: fr30-asm.c:553 frv-asm.c:1506 ip2k-asm.c:754 iq2000-asm.c:702
-#: lm32-asm.c:592 m32c-asm.c:1832 m32r-asm.c:571 mep-asm.c:1530 mt-asm.c:838
+#: lm32-asm.c:592 m32c-asm.c:1827 m32r-asm.c:571 mep-asm.c:1529 mt-asm.c:838
 #: openrisc-asm.c:484 xc16x-asm.c:619 xstormy16-asm.c:519
 #, c-format
 msgid "syntax error (expected char `%c', found end of instruction)"
-msgstr "gặp lỗi cú pháp (ngờ ký tự « %c », còn tìm kết thúc câu lệnh)"
+msgstr "gặp lỗi cú pháp (ngờ ký tự \"%c\", còn tìm kết thúc câu lệnh)"
 
-#: fr30-asm.c:581 frv-asm.c:1534 ip2k-asm.c:782 iq2000-asm.c:730
-#: lm32-asm.c:620 m32c-asm.c:1860 m32r-asm.c:599 mep-asm.c:1558 mt-asm.c:866
-#: openrisc-asm.c:512 xc16x-asm.c:647 xstormy16-asm.c:547
+#: fr30-asm.c:583 frv-asm.c:1536 ip2k-asm.c:784 iq2000-asm.c:732
+#: lm32-asm.c:622 m32c-asm.c:1857 m32r-asm.c:601 mep-asm.c:1559 mt-asm.c:868
+#: openrisc-asm.c:514 xc16x-asm.c:649 xstormy16-asm.c:549
 msgid "junk at end of line"
 msgstr "gặp rác tại kết thúc dòng"
 
-#: fr30-asm.c:687 frv-asm.c:1640 ip2k-asm.c:888 iq2000-asm.c:836
-#: lm32-asm.c:726 m32c-asm.c:1966 m32r-asm.c:705 mep-asm.c:1664 mt-asm.c:972
-#: openrisc-asm.c:618 xc16x-asm.c:753 xstormy16-asm.c:653
+#: fr30-asm.c:695 frv-asm.c:1648 ip2k-asm.c:896 iq2000-asm.c:844
+#: lm32-asm.c:734 m32c-asm.c:1969 m32r-asm.c:713 mep-asm.c:1671 mt-asm.c:980
+#: openrisc-asm.c:626 xc16x-asm.c:761 xstormy16-asm.c:661
 msgid "unrecognized form of instruction"
 msgstr "không nhận ra dạng câu lệnh"
 
-#: fr30-asm.c:699 frv-asm.c:1652 ip2k-asm.c:900 iq2000-asm.c:848
-#: lm32-asm.c:738 m32c-asm.c:1978 m32r-asm.c:717 mep-asm.c:1676 mt-asm.c:984
-#: openrisc-asm.c:630 xc16x-asm.c:765 xstormy16-asm.c:665
+#: fr30-asm.c:709 frv-asm.c:1662 ip2k-asm.c:910 iq2000-asm.c:858
+#: lm32-asm.c:748 m32c-asm.c:1983 m32r-asm.c:727 mep-asm.c:1685 mt-asm.c:994
+#: openrisc-asm.c:640 xc16x-asm.c:775 xstormy16-asm.c:675
 #, c-format
 msgid "bad instruction `%.50s...'"
-msgstr "câu lệnh sai « %.50s »"
+msgstr "câu lệnh sai \"%.50s...\""
 
-#: fr30-asm.c:702 frv-asm.c:1655 ip2k-asm.c:903 iq2000-asm.c:851
-#: lm32-asm.c:741 m32c-asm.c:1981 m32r-asm.c:720 mep-asm.c:1679 mt-asm.c:987
-#: openrisc-asm.c:633 xc16x-asm.c:768 xstormy16-asm.c:668
+#: fr30-asm.c:712 frv-asm.c:1665 ip2k-asm.c:913 iq2000-asm.c:861
+#: lm32-asm.c:751 m32c-asm.c:1986 m32r-asm.c:730 mep-asm.c:1688 mt-asm.c:997
+#: openrisc-asm.c:643 xc16x-asm.c:778 xstormy16-asm.c:678
 #, c-format
 msgid "bad instruction `%.50s'"
-msgstr "câu lệnh sai « %.50s »"
+msgstr "câu lệnh sai \"%.50s\""
 
 #. Default text to print if an instruction isn't recognized.
 #: fr30-dis.c:41 frv-dis.c:41 ip2k-dis.c:41 iq2000-dis.c:41 lm32-dis.c:41
-#: m32c-dis.c:41 m32r-dis.c:41 mep-dis.c:41 mmix-dis.c:278 mt-dis.c:41
+#: m32c-dis.c:41 m32r-dis.c:41 mep-dis.c:41 mmix-dis.c:277 mt-dis.c:41
 #: openrisc-dis.c:41 xc16x-dis.c:41 xstormy16-dis.c:41
 msgid "*unknown*"
 msgstr "• không rõ •"
 
 #: fr30-dis.c:299 frv-dis.c:396 ip2k-dis.c:288 iq2000-dis.c:189 lm32-dis.c:147
-#: m32c-dis.c:891 m32r-dis.c:256 mep-dis.c:1192 mt-dis.c:290
-#: openrisc-dis.c:135 xc16x-dis.c:375 xstormy16-dis.c:168
+#: m32c-dis.c:891 m32r-dis.c:279 mep-dis.c:1187 mt-dis.c:290
+#: openrisc-dis.c:135 xc16x-dis.c:420 xstormy16-dis.c:168
 #, c-format
 msgid "Unrecognized field %d while printing insn.\n"
 msgstr "Không nhận ra trường %d trong khi in ra câu lệnh.\n"
 
-#: fr30-ibld.c:163 frv-ibld.c:163 ip2k-ibld.c:163 iq2000-ibld.c:163
-#: lm32-ibld.c:163 m32c-ibld.c:163 m32r-ibld.c:163 mep-ibld.c:163
-#: mt-ibld.c:163 openrisc-ibld.c:163 xc16x-ibld.c:163 xstormy16-ibld.c:163
+#: fr30-ibld.c:164 frv-ibld.c:164 ip2k-ibld.c:164 iq2000-ibld.c:164
+#: lm32-ibld.c:164 m32c-ibld.c:164 m32r-ibld.c:164 mep-ibld.c:164
+#: mt-ibld.c:164 openrisc-ibld.c:164 xc16x-ibld.c:164 xstormy16-ibld.c:164
 #, c-format
 msgid "operand out of range (%ld not between %ld and %lu)"
-msgstr "tác tử ở ngoại phạm vi (%ld không nằm giữa %ld và %lu)"
+msgstr "tác tử nằm ngoài phạm vi (%ld không nằm giữa %ld và %lu)"
 
-#: fr30-ibld.c:184 frv-ibld.c:184 ip2k-ibld.c:184 iq2000-ibld.c:184
-#: lm32-ibld.c:184 m32c-ibld.c:184 m32r-ibld.c:184 mep-ibld.c:184
-#: mt-ibld.c:184 openrisc-ibld.c:184 xc16x-ibld.c:184 xstormy16-ibld.c:184
+#: fr30-ibld.c:185 frv-ibld.c:185 ip2k-ibld.c:185 iq2000-ibld.c:185
+#: lm32-ibld.c:185 m32c-ibld.c:185 m32r-ibld.c:185 mep-ibld.c:185
+#: mt-ibld.c:185 openrisc-ibld.c:185 xc16x-ibld.c:185 xstormy16-ibld.c:185
 #, c-format
 msgid "operand out of range (0x%lx not between 0 and 0x%lx)"
-msgstr "tác tử ở ngoại phạm vi (0x%lx không nằm giữa 0 và 0x%lx)"
+msgstr "tác tử nằm ngoài phạm vi (0x%lx không nằm giữa 0 và 0x%lx)"
 
-#: fr30-ibld.c:726 frv-ibld.c:852 ip2k-ibld.c:603 iq2000-ibld.c:709
-#: lm32-ibld.c:630 m32c-ibld.c:1727 m32r-ibld.c:661 mep-ibld.c:1204
-#: mt-ibld.c:745 openrisc-ibld.c:629 xc16x-ibld.c:748 xstormy16-ibld.c:674
+#: fr30-ibld.c:727 frv-ibld.c:853 ip2k-ibld.c:604 iq2000-ibld.c:710
+#: lm32-ibld.c:631 m32c-ibld.c:1728 m32r-ibld.c:662 mep-ibld.c:1205
+#: mt-ibld.c:746 openrisc-ibld.c:630 xc16x-ibld.c:749 xstormy16-ibld.c:675
 #, c-format
 msgid "Unrecognized field %d while building insn.\n"
 msgstr "Không nhận ra trường %d trong khi xây dựng câu lệnh.\n"
 
-#: fr30-ibld.c:931 frv-ibld.c:1169 ip2k-ibld.c:678 iq2000-ibld.c:884
-#: lm32-ibld.c:734 m32c-ibld.c:2888 m32r-ibld.c:798 mep-ibld.c:1803
-#: mt-ibld.c:965 openrisc-ibld.c:729 xc16x-ibld.c:968 xstormy16-ibld.c:820
+#: fr30-ibld.c:932 frv-ibld.c:1170 ip2k-ibld.c:679 iq2000-ibld.c:885
+#: lm32-ibld.c:735 m32c-ibld.c:2889 m32r-ibld.c:799 mep-ibld.c:1804
+#: mt-ibld.c:966 openrisc-ibld.c:730 xc16x-ibld.c:969 xstormy16-ibld.c:821
 #, c-format
 msgid "Unrecognized field %d while decoding insn.\n"
 msgstr "Không nhận ra trường %d trong khi giải mã câu lệnh.\n"
 
-#: fr30-ibld.c:1077 frv-ibld.c:1447 ip2k-ibld.c:752 iq2000-ibld.c:1015
-#: lm32-ibld.c:823 m32c-ibld.c:3505 m32r-ibld.c:911 mep-ibld.c:2273
-#: mt-ibld.c:1165 openrisc-ibld.c:806 xc16x-ibld.c:1189 xstormy16-ibld.c:930
+#: fr30-ibld.c:1078 frv-ibld.c:1448 ip2k-ibld.c:753 iq2000-ibld.c:1016
+#: lm32-ibld.c:824 m32c-ibld.c:3506 m32r-ibld.c:912 mep-ibld.c:2274
+#: mt-ibld.c:1166 openrisc-ibld.c:807 xc16x-ibld.c:1190 xstormy16-ibld.c:931
 #, c-format
 msgid "Unrecognized field %d while getting int operand.\n"
 msgstr "Không nhận ra trường %d trong khi lấy tác tử số nguyên.\n"
 
-#: fr30-ibld.c:1205 frv-ibld.c:1707 ip2k-ibld.c:808 iq2000-ibld.c:1128
-#: lm32-ibld.c:894 m32c-ibld.c:4104 m32r-ibld.c:1006 mep-ibld.c:2725
-#: mt-ibld.c:1347 openrisc-ibld.c:865 xc16x-ibld.c:1392 xstormy16-ibld.c:1022
+#: fr30-ibld.c:1206 frv-ibld.c:1708 ip2k-ibld.c:809 iq2000-ibld.c:1129
+#: lm32-ibld.c:895 m32c-ibld.c:4105 m32r-ibld.c:1007 mep-ibld.c:2726
+#: mt-ibld.c:1348 openrisc-ibld.c:866 xc16x-ibld.c:1393 xstormy16-ibld.c:1023
 #, c-format
 msgid "Unrecognized field %d while getting vma operand.\n"
 msgstr "Không nhận ra trường %d trong khi lấy tác tử vma.\n"
 
-#: fr30-ibld.c:1336 frv-ibld.c:1974 ip2k-ibld.c:867 iq2000-ibld.c:1248
-#: lm32-ibld.c:972 m32c-ibld.c:4691 m32r-ibld.c:1107 mep-ibld.c:3138
-#: mt-ibld.c:1536 openrisc-ibld.c:931 xc16x-ibld.c:1596 xstormy16-ibld.c:1121
+#: fr30-ibld.c:1337 frv-ibld.c:1975 ip2k-ibld.c:868 iq2000-ibld.c:1249
+#: lm32-ibld.c:973 m32c-ibld.c:4692 m32r-ibld.c:1108 mep-ibld.c:3139
+#: mt-ibld.c:1537 openrisc-ibld.c:932 xc16x-ibld.c:1597 xstormy16-ibld.c:1122
 #, c-format
 msgid "Unrecognized field %d while setting int operand.\n"
 msgstr "Không nhận ra trường %d trong khi đặt tác tử số nguyên.\n"
 
-#: fr30-ibld.c:1457 frv-ibld.c:2231 ip2k-ibld.c:916 iq2000-ibld.c:1358
-#: lm32-ibld.c:1040 m32c-ibld.c:5268 m32r-ibld.c:1198 mep-ibld.c:3541
-#: mt-ibld.c:1715 openrisc-ibld.c:987 xc16x-ibld.c:1790 xstormy16-ibld.c:1210
+#: fr30-ibld.c:1458 frv-ibld.c:2232 ip2k-ibld.c:917 iq2000-ibld.c:1359
+#: lm32-ibld.c:1041 m32c-ibld.c:5269 m32r-ibld.c:1199 mep-ibld.c:3542
+#: mt-ibld.c:1716 openrisc-ibld.c:988 xc16x-ibld.c:1791 xstormy16-ibld.c:1211
 #, c-format
 msgid "Unrecognized field %d while setting vma operand.\n"
 msgstr "Không nhận ra trường %d trong khi đặt tác tử vma.\n"
 
 #: frv-asm.c:608
 msgid "missing `]'"
-msgstr "thiếu dấu ngoặc vụ đóng « ] »"
+msgstr "thiếu dấu ngoặc vuông đóng \"]\""
 
 #: frv-asm.c:611 frv-asm.c:621
 msgid "Special purpose register number is out of range"
-msgstr "Số thanh ghi mục đích đặc biệt ở ngoại phạm vi"
+msgstr "Số thanh ghi mục đích đặc biệt nằm ngoài phạm vi"
 
 #: frv-asm.c:908
 msgid "Value of A operand must be 0 or 1"
@@ -350,23 +356,23 @@ msgstr "Giá trị của tác tử A phải là 0 hay 1"
 
 #: frv-asm.c:944
 msgid "register number must be even"
-msgstr "số thanh ghi phải là số chẵn"
+msgstr "số thanh ghi phải là chẵn"
 
 #. -- assembler routines inserted here.
 #. -- asm.c
 #: frv-asm.c:972 iq2000-asm.c:56 lm32-asm.c:95 lm32-asm.c:127 lm32-asm.c:157
-#: lm32-asm.c:187 lm32-asm.c:217 lm32-asm.c:247 m32c-asm.c:141 m32c-asm.c:237
-#: m32c-asm.c:279 m32c-asm.c:338 m32c-asm.c:360 m32r-asm.c:53 mep-asm.c:241
+#: lm32-asm.c:187 lm32-asm.c:217 lm32-asm.c:247 m32c-asm.c:140 m32c-asm.c:235
+#: m32c-asm.c:276 m32c-asm.c:334 m32c-asm.c:355 m32r-asm.c:53 mep-asm.c:241
 #: mep-asm.c:259 mep-asm.c:274 mep-asm.c:289 mep-asm.c:301 openrisc-asm.c:54
 msgid "missing `)'"
-msgstr "thiếu dấu ngoặc đóng « ) »"
+msgstr "thiếu dấu ngoặc đóng \")\""
 
-#: h8300-dis.c:327
+#: h8300-dis.c:314
 #, c-format
 msgid "Hmmmm 0x%x"
 msgstr "Ừm 0x%x"
 
-#: h8300-dis.c:708
+#: h8300-dis.c:695
 #, c-format
 msgid "Don't understand 0x%x \n"
 msgstr "Không hiểu 0x%x \n"
@@ -382,11 +388,11 @@ msgstr "không thể xử lý điều chèn %d\n"
 msgid "%02x\t\t*unknown*"
 msgstr "%02x\t\t • không rõ •"
 
-#: i386-dis.c:8924
+#: i386-dis.c:10774
 msgid "<internal disassembler error>"
 msgstr "<lỗi rã nội bộ>"
 
-#: i386-dis.c:9155
+#: i386-dis.c:11071
 #, c-format
 msgid ""
 "\n"
@@ -395,132 +401,132 @@ msgid ""
 msgstr ""
 "\n"
 "Những tùy chọn rã đặc trưng cho i386/x86-64 theo đây được hỗ trợ\n"
-"để sử dụng với đối số « -M » (phân cách nhiều tùy chọn bằng dấu phẩy):\n"
+"để sử dụng với đối số \"-M\" (phân cách nhiều tùy chọn bằng dấu phẩy):\n"
 
-#: i386-dis.c:9159
+#: i386-dis.c:11075
 #, c-format
 msgid "  x86-64      Disassemble in 64bit mode\n"
 msgstr "  x86-64      Rã trong chế độ 64-bit\n"
 
-#: i386-dis.c:9160
+#: i386-dis.c:11076
 #, c-format
 msgid "  i386        Disassemble in 32bit mode\n"
 msgstr "  i386        Rã trong chế độ 32-bit\n"
 
-#: i386-dis.c:9161
+#: i386-dis.c:11077
 #, c-format
 msgid "  i8086       Disassemble in 16bit mode\n"
 msgstr "  i8086       Rã trong chế độ 16-bit\n"
 
-#: i386-dis.c:9162
+#: i386-dis.c:11078
 #, c-format
 msgid "  att         Display instruction in AT&T syntax\n"
 msgstr "  att         Hiển thị câu lệnh theo cú pháp AT&T\n"
 
-#: i386-dis.c:9163
+#: i386-dis.c:11079
 #, c-format
 msgid "  intel       Display instruction in Intel syntax\n"
 msgstr "  intel       Hiển thị câu lệnh theo cú pháp Intel\n"
 
-#: i386-dis.c:9164
+#: i386-dis.c:11080
 #, c-format
 msgid ""
 "  att-mnemonic\n"
 "              Display instruction in AT&T mnemonic\n"
 msgstr ""
 "  att-mnemonic\n"
-"              Hiển thị câu lệnh theo điều giúp trí nhớ AT&T\n"
+"              Hiển thị câu lệnh theo mã lệnh AT&T\n"
 
-#: i386-dis.c:9166
+#: i386-dis.c:11082
 #, c-format
 msgid ""
 "  intel-mnemonic\n"
 "              Display instruction in Intel mnemonic\n"
 msgstr ""
 "  intel-mnemonic\n"
-"              Hiển thị câu lệnh theo điều giúp trí nhớ Intel\n"
+"              Hiển thị câu lệnh theo mã lệnh Intel\n"
 
-#: i386-dis.c:9168
+#: i386-dis.c:11084
 #, c-format
 msgid "  addr64      Assume 64bit address size\n"
 msgstr "  addr64      Giả sử kích cỡ địa chỉ 64-bit\n"
 
-#: i386-dis.c:9169
+#: i386-dis.c:11085
 #, c-format
 msgid "  addr32      Assume 32bit address size\n"
 msgstr "  addr32      Giả sử kích cỡ địa chỉ 32-bit\n"
 
-#: i386-dis.c:9170
+#: i386-dis.c:11086
 #, c-format
 msgid "  addr16      Assume 16bit address size\n"
 msgstr "  addr16     Giả sử kích cỡ địa chỉ 16-bit\n"
 
-#: i386-dis.c:9171
+#: i386-dis.c:11087
 #, c-format
 msgid "  data32      Assume 32bit data size\n"
 msgstr "  data32      Giả sử kích cỡ dữ liệu 32-bit\n"
 
-#: i386-dis.c:9172
+#: i386-dis.c:11088
 #, c-format
 msgid "  data16      Assume 16bit data size\n"
 msgstr "  data16      Giả sử kích cỡ dữ liệu 16-bit\n"
 
-#: i386-dis.c:9173
+#: i386-dis.c:11089
 #, c-format
 msgid "  suffix      Always display instruction suffix in AT&T syntax\n"
 msgstr "  suffix      Luôn luôn hiển thị hậu tố câu lệnh theo cú pháp AT&T\n"
 
-#: i386-gen.c:435 ia64-gen.c:307
+#: i386-gen.c:467 ia64-gen.c:307
 #, c-format
 msgid "%s: Error: "
 msgstr "%s: Lỗi: "
 
-#: i386-gen.c:544
+#: i386-gen.c:599
 #, c-format
 msgid "%s: %d: Unknown bitfield: %s\n"
 msgstr "%s: %d: Không rõ trường bit: %s\n"
 
-#: i386-gen.c:546
+#: i386-gen.c:601
 #, c-format
 msgid "Unknown bitfield: %s\n"
 msgstr "Không rõ trường bit: %s\n"
 
-#: i386-gen.c:602
+#: i386-gen.c:657
 #, c-format
 msgid "%s: %d: Missing `)' in bitfield: %s\n"
-msgstr "%s: %d: Thiếu « ) » trong trường bit: %s\n"
+msgstr "%s: %d: Thiếu \")\" trong trường bit: %s\n"
 
-#: i386-gen.c:867
+#: i386-gen.c:922
 #, c-format
 msgid "can't find i386-opc.tbl for reading, errno = %s\n"
 msgstr "không tìm thấy i386-opc.tbl để đọc; số thứ tự lỗi = %s\n"
 
-#: i386-gen.c:998
+#: i386-gen.c:1053
 #, c-format
 msgid "can't find i386-reg.tbl for reading, errno = %s\n"
 msgstr "không tìm thấy i386-reg.tbl để đọc; số thứ tự lỗi = %s\n"
 
-#: i386-gen.c:1075
+#: i386-gen.c:1130
 #, c-format
 msgid "can't create i386-init.h, errno = %s\n"
 msgstr "không thể tạo i386-init.h, số thứ tự lỗi = %s\n"
 
-#: i386-gen.c:1164 ia64-gen.c:2820
+#: i386-gen.c:1219 ia64-gen.c:2820
 #, c-format
 msgid "unable to change directory to \"%s\", errno = %s\n"
-msgstr "không thể chuyển đổi thư mục sang « %s », số lỗi = %s\n"
+msgstr "không thể chuyển đổi thư mục sang \"%s\", số lỗi = %s\n"
 
-#: i386-gen.c:1171
+#: i386-gen.c:1226
 #, c-format
 msgid "%d unused bits in i386_cpu_flags.\n"
 msgstr "%d bit chưa dùng trong i386_cpu_flags.\n"
 
-#: i386-gen.c:1178
+#: i386-gen.c:1233
 #, c-format
 msgid "%d unused bits in i386_operand_type.\n"
 msgstr "%d bit chưa dùng trong i386_operand_type.\n"
 
-#: i386-gen.c:1192
+#: i386-gen.c:1247
 #, c-format
 msgid "can't create i386-tbl.h, errno = %s\n"
 msgstr "không thể tạo i386-tbl.h, số thứ tự lỗi = %s\n"
@@ -528,7 +534,7 @@ msgstr "không thể tạo i386-tbl.h, số thứ tự lỗi = %s\n"
 #: ia64-gen.c:320
 #, c-format
 msgid "%s: Warning: "
-msgstr "%s: Cảnh báo : "
+msgstr "%s: Cảnh báo: "
 
 #: ia64-gen.c:506 ia64-gen.c:737
 #, c-format
@@ -550,8 +556,8 @@ msgid ""
 "most recent format '%s'\n"
 "appears more restrictive than '%s'\n"
 msgstr ""
-"định dạng vừa nhất « %s »\n"
-"có vẻ hạn hẹp hơn « %s »\n"
+"định dạng vừa nhất \"%s\"\n"
+"có vẻ hạn hẹp hơn \"%s\"\n"
 
 #: ia64-gen.c:1054
 #, c-format
@@ -596,17 +602,17 @@ msgstr "không có câu lệnh được ánh xạ trực tiếp vào IC mở r
 #: ia64-gen.c:1543
 #, c-format
 msgid "class %s is defined but not used\n"
-msgstr "hạng %s được xác định nhưng chưa được dùng\n"
+msgstr "hạng %s được định nghĩa nhưng chưa được dùng\n"
 
 #: ia64-gen.c:1556
 #, c-format
 msgid "Warning: rsrc %s (%s) has no chks\n"
-msgstr "Cảnh báo : rsrc %s (%s) không có chks\n"
+msgstr "Cảnh báo: rsrc %s (%s) không có chks\n"
 
 #: ia64-gen.c:1559
 #, c-format
 msgid "Warning: rsrc %s (%s) has no chks or regs\n"
-msgstr "Cảnh báo : rsrc %s (%s) không có chks hay regs\n"
+msgstr "Cảnh báo: rsrc %s (%s) không có chks hay regs\n"
 
 #: ia64-gen.c:1563
 #, c-format
@@ -643,13 +649,13 @@ msgstr "offset(IP) (hiệu số) không có dạng hợp lệ"
 #. of range.
 #: ip2k-asm.c:154
 msgid "(DP) offset out of range."
-msgstr "(DP) hiệu ở ngoại phạm vi."
+msgstr "(DP) hiệu nằm ngoài phạm vi."
 
 #. Found something there in front of (SP) but it's out
 #. of range.
 #: ip2k-asm.c:195
 msgid "(SP) offset out of range."
-msgstr "(SP) hiệu ở ngoại phạm vi."
+msgstr "(SP) hiệu nằm ngoài phạm vi."
 
 #: ip2k-asm.c:211
 msgid "illegal use of parentheses"
@@ -657,7 +663,7 @@ msgstr "không cho phép cách sử dụng dấu ngoặc"
 
 #: ip2k-asm.c:218
 msgid "operand out of range (not between 1 and 255)"
-msgstr "tác tử ở ngoại phạm vi (không nằm giữa 1 và 255)"
+msgstr "tác tử nằm ngoài phạm vi (không nằm giữa 1 và 255)"
 
 #. Something is very wrong. opindex has to be one of the above.
 #: ip2k-asm.c:242
@@ -670,7 +676,7 @@ msgstr "Cần thiết địa chỉ byte: phải là số chẵn."
 
 #: ip2k-asm.c:305
 msgid "cgen_parse_address returned a symbol. Literal required."
-msgstr "cgen_parse_address (địa chỉ phân tách cgen) đã trả lại một ký hiệu : còn cần thiết điều nghĩa chữ."
+msgstr "cgen_parse_address (địa chỉ phân tách cgen) đã trả lại một ký hiệu. Yêu cầu dạng văn bản."
 
 #: ip2k-asm.c:360
 msgid "percent-operator operand is not a symbol"
@@ -686,11 +692,11 @@ msgstr "giá trị trực tiếp không thể là thanh ghi"
 
 #: iq2000-asm.c:123 iq2000-asm.c:153 lm32-asm.c:70
 msgid "immediate value out of range"
-msgstr "giá trị trực tiếp ở ngoại pham vi"
+msgstr "giá trị trực tiếp nằm ngoài phạm vi"
 
 #: iq2000-asm.c:182
 msgid "21-bit offset out of range"
-msgstr "hiệu 21-bit ở ngoại phạm vi"
+msgstr "hiệu 21-bit nằm ngoài phạm vi"
 
 #: lm32-asm.c:166
 msgid "expecting gp relative address: gp(symbol)"
@@ -720,84 +726,84 @@ msgstr "không rõ\t0x%02lx"
 
 #: m32c-asm.c:117
 msgid "imm:6 immediate is out of range"
-msgstr "điều ngay « imm:6 » ở ngoại phạm vi"
+msgstr "địa chỉ nhảy gần \"imm:6\" nằm ngoài phạm vi"
 
-#: m32c-asm.c:147
+#: m32c-asm.c:145
 #, c-format
 msgid "%dsp8() takes a symbolic address, not a number"
 msgstr "%dsp8() chấp nhận địa chỉ tương trưng, không phải con số"
 
-#: m32c-asm.c:160 m32c-asm.c:164 m32c-asm.c:255
+#: m32c-asm.c:159 m32c-asm.c:163 m32c-asm.c:253
 msgid "dsp:8 immediate is out of range"
-msgstr "điều ngay « dsp:8 » ở ngoại phạm vi"
+msgstr "địa chỉ nhảy gần \"dsp:8\" nằm ngoài phạm vi"
 
-#: m32c-asm.c:185 m32c-asm.c:189
+#: m32c-asm.c:184 m32c-asm.c:188
 msgid "Immediate is out of range -8 to 7"
-msgstr "điều ngay ở ngoại phạm vi -8 đến +7"
+msgstr "Địa chỉ nhảy gần nằm ngoài phạm vi -8 đến +7"
 
-#: m32c-asm.c:210 m32c-asm.c:214
+#: m32c-asm.c:209 m32c-asm.c:213
 msgid "Immediate is out of range -7 to 8"
-msgstr "điều ngay ở ngoại phạm vi -7 đến +8"
+msgstr "địa chỉ nhảy gần nằm ngoài phạm vi -7 đến +8"
 
-#: m32c-asm.c:285
+#: m32c-asm.c:281
 #, c-format
 msgid "%dsp16() takes a symbolic address, not a number"
 msgstr "%dsp16() chấp nhận địa chỉ tương trưng, không phải con số"
 
-#: m32c-asm.c:308 m32c-asm.c:315 m32c-asm.c:378
+#: m32c-asm.c:305 m32c-asm.c:312 m32c-asm.c:373
 msgid "dsp:16 immediate is out of range"
-msgstr "điều ngay « dsp:16 » ở ngoại phạm vi"
+msgstr "địa chỉ nhảy gần \"dsp:16\" nằm ngoài phạm vi"
 
-#: m32c-asm.c:404
+#: m32c-asm.c:399
 msgid "dsp:20 immediate is out of range"
-msgstr "điều ngay « dsp:20 » ở ngoại phạm vi"
+msgstr "địa chỉ nhảy gần \"dsp:20\" nằm ngoài phạm vi"
 
-#: m32c-asm.c:430 m32c-asm.c:450
+#: m32c-asm.c:425 m32c-asm.c:445
 msgid "dsp:24 immediate is out of range"
-msgstr "điều ngay « dsp:24 » ở ngoại phạm vi"
+msgstr "địa chỉ nhảy gần \"dsp:24\" nằm ngoài phạm vi"
 
-#: m32c-asm.c:483
+#: m32c-asm.c:478
 msgid "immediate is out of range 1-2"
-msgstr "điều ngay ở ngoại phạm vi 1-2"
+msgstr "địa chỉ nhảy gần nằm ngoài phạm vi 1-2"
 
-#: m32c-asm.c:501
+#: m32c-asm.c:496
 msgid "immediate is out of range 1-8"
-msgstr "điều ngay ở ngoại phạm vi 1-8"
+msgstr "địa chỉ nhảy gần nằm ngoài phạm vi 1-8"
 
-#: m32c-asm.c:519
+#: m32c-asm.c:514
 msgid "immediate is out of range 0-7"
-msgstr "điều ngay ở ngoại phạm vi 0-7"
+msgstr "địa chỉ nhảy gần nằm ngoài phạm vi 0-7"
 
-#: m32c-asm.c:555
+#: m32c-asm.c:550
 msgid "immediate is out of range 2-9"
-msgstr "điều ngay ở ngoại phạm vi 2-9"
+msgstr "địa chỉ nhảy gần nằm ngoài phạm vi 2-9"
 
-#: m32c-asm.c:573
+#: m32c-asm.c:568
 msgid "Bit number for indexing general register is out of range 0-15"
-msgstr "Số bit để phụ lục thanh ghi chung nằm ở ngoại phạm vi 0-15"
+msgstr "Số bit để phụ lục thanh ghi chung nằm nằm ngoài phạm vi 0-15"
 
-#: m32c-asm.c:611 m32c-asm.c:667
+#: m32c-asm.c:606 m32c-asm.c:662
 msgid "bit,base is out of range"
-msgstr "« bit,base » ở ngoại phạm vi"
+msgstr "\"bit,base\" nằm ngoài phạm vi"
 
-#: m32c-asm.c:618 m32c-asm.c:623 m32c-asm.c:671
+#: m32c-asm.c:613 m32c-asm.c:618 m32c-asm.c:666
 msgid "bit,base out of range for symbol"
-msgstr "« bit,base » ở ngoại phạm vi đối với ký hiệu"
+msgstr "\"bit,base\" nằm ngoài phạm vi đối với ký hiệu"
 
-#: m32c-asm.c:807
+#: m32c-asm.c:802
 msgid "not a valid r0l/r0h pair"
-msgstr "không phải là một cặp « r0l/r0h » hợp lệ"
+msgstr "không phải là một cặp \"r0l/r0h\" hợp lệ"
 
-#: m32c-asm.c:837
+#: m32c-asm.c:832
 msgid "Invalid size specifier"
-msgstr "đặc tả kích cỡ không hợp lệ"
+msgstr "Đặc tả kích cỡ không hợp lệ"
 
-#: m68k-dis.c:1278
+#: m68k-dis.c:1281
 #, c-format
 msgid "<function code %d>"
 msgstr "<mã hàm %d>"
 
-#: m68k-dis.c:1437
+#: m68k-dis.c:1440
 #, c-format
 msgid "<internal error in opcode table: %s %s>\n"
 msgstr "<lỗi nội bộ trong bảng opcode (mã thao tác): %s %s>\n"
@@ -822,44 +828,44 @@ msgstr "hàm %function() không hợp lệ ở đây"
 
 #: mep-asm.c:336
 msgid "Immediate is out of range -32768 to 32767"
-msgstr "Điều ngay ở ngoại phạm vi -32768 đến 32767"
+msgstr "Địa chỉ nhảy gần nằm ngoài phạm vi -32768 đến 32767"
 
 #: mep-asm.c:356
 msgid "Immediate is out of range 0 to 65535"
-msgstr "Điều ngay ở ngoại phạm vi 0 đến 65535"
+msgstr "Địa chỉ nhảy gần nằm ngoài phạm vi 0 đến 65535"
 
 #: mep-asm.c:549 mep-asm.c:562
 msgid "Immediate is out of range -512 to 511"
-msgstr "Điều ngay ở ngoại phạm vi -512 đến 511"
+msgstr "Địa chỉ nhảy gần nằm ngoài phạm vi -512 đến 511"
 
 #: mep-asm.c:554 mep-asm.c:563
 msgid "Immediate is out of range -128 to 127"
-msgstr "Điều ngay ở ngoại phạm vi -128 đến 127"
+msgstr "Địa chỉ nhảy gần nằm ngoài phạm vi -128 đến 127"
 
 #: mep-asm.c:558
 msgid "Value is not aligned enough"
 msgstr "Giá trị chưa đủ sắp hàng"
 
-#: mips-dis.c:841
+#: mips-dis.c:845
 msgid "# internal error, incomplete extension sequence (+)"
 msgstr "# lỗi nội bộ, dãy mở rộng chưa hoàn thành (+)"
 
-#: mips-dis.c:975
+#: mips-dis.c:1011
 #, c-format
 msgid "# internal error, undefined extension sequence (+%c)"
-msgstr "# lỗi nội bộ, chưa xác định dãy mở rộng (+%c)"
+msgstr "# lỗi nội bộ, chưa định nghĩa dãy mở rộng (+%c)"
 
-#: mips-dis.c:1335
+#: mips-dis.c:1371
 #, c-format
 msgid "# internal error, undefined modifier (%c)"
-msgstr "# lỗi nội bộ, chưa xác định điều sửa đổi (%c)"
+msgstr "# lỗi nội bộ, chưa định nghĩa điều sửa đổi (%c)"
 
-#: mips-dis.c:1942
+#: mips-dis.c:1975
 #, c-format
 msgid "# internal disassembler error, unrecognised modifier (%c)"
 msgstr "# lỗi rã nội bộ, không nhận ra điều sửa đổi (%c)"
 
-#: mips-dis.c:2173
+#: mips-dis.c:2213
 #, c-format
 msgid ""
 "\n"
@@ -868,9 +874,9 @@ msgid ""
 msgstr ""
 "\n"
 "Nững tùy chọn rã đặc trưng cho MIPS theo đây được hỗ trợ để sử dụng\n"
-"với đối số « -M » (phân cách nhiều tùy chọn bằng dấu phẩy):\n"
+"với đối số \"-M\" (phân cách nhiều tùy chọn bằng dấu phẩy):\n"
 
-#: mips-dis.c:2177
+#: mips-dis.c:2217
 #, c-format
 msgid ""
 "\n"
@@ -881,7 +887,7 @@ msgstr ""
 "  gpr-names=ABI            In ra các tên GPR theo ABI đã ghi rõ.\n"
 "                           Mặc định: dựa vào mã nhi phân đang bị rã\n"
 
-#: mips-dis.c:2181
+#: mips-dis.c:2221
 #, c-format
 msgid ""
 "\n"
@@ -892,7 +898,7 @@ msgstr ""
 "  fpr-names=ABI            In ra các tên FPR theo ABI đã ghi rõ.\n"
 "                           Mặc định: thuộc số\n"
 
-#: mips-dis.c:2185
+#: mips-dis.c:2225
 #, c-format
 msgid ""
 "\n"
@@ -904,7 +910,7 @@ msgstr ""
 "  cp0-names=ARCH           In ra các tên CP0 theo kiến trúc đã ghi rõ\n"
 "                           Mặc định: dựa vào mã nhi phân đang bị rã.\n"
 
-#: mips-dis.c:2190
+#: mips-dis.c:2230
 #, c-format
 msgid ""
 "\n"
@@ -916,7 +922,7 @@ msgstr ""
 "  hwr-names=ARCH           In ra các tên HWR theo kiến trúc đã ghi rõ.\n"
 "                           Mặc định: dựa vào mã nhi phân đang bị rã.\n"
 
-#: mips-dis.c:2195
+#: mips-dis.c:2235
 #, c-format
 msgid ""
 "\n"
@@ -926,7 +932,7 @@ msgstr ""
 "\n"
 "  reg-names=ABI            In ra các tên GPR và FPR theo ABI đã ghi rõ.\n"
 
-#: mips-dis.c:2199
+#: mips-dis.c:2239
 #, c-format
 msgid ""
 "\n"
@@ -937,7 +943,7 @@ msgstr ""
 "  reg-names=ARCH\n"
 "\t In ra các tên HWR và thanh ghi CP0 theo kiến trúc đã ghi rõ.\n"
 
-#: mips-dis.c:2203
+#: mips-dis.c:2243
 #, c-format
 msgid ""
 "\n"
@@ -945,15 +951,15 @@ msgid ""
 "   "
 msgstr ""
 "\n"
-"  Đối với các tùy chọn trên, những giá trị theo đây được hỗ trợ cho « ABI »:\n"
+"  Đối với các tùy chọn trên, những giá trị theo đây được hỗ trợ cho \"ABI\":\n"
 "   "
 
-#: mips-dis.c:2208 mips-dis.c:2216 mips-dis.c:2218
+#: mips-dis.c:2248 mips-dis.c:2256 mips-dis.c:2258
 #, c-format
 msgid "\n"
 msgstr "\n"
 
-#: mips-dis.c:2210
+#: mips-dis.c:2250
 #, c-format
 msgid ""
 "\n"
@@ -961,7 +967,7 @@ msgid ""
 "   "
 msgstr ""
 "\n"
-"  Đối với các tùy chọn trên, những giá trị theo đây được hỗ trợ cho « ARCH »:\n"
+"  Đối với các tùy chọn trên, những giá trị theo đây được hỗ trợ cho \"ARCH\":\n"
 "   "
 
 #: mmix-dis.c:35
@@ -972,33 +978,33 @@ msgstr "Chữ hoa/thường sai %d (%s) trong %s:%d\n"
 #: mmix-dis.c:45
 #, c-format
 msgid "Internal: Non-debugged code (test-case missing): %s:%d"
-msgstr "Nội bộ : chưa gỡ lỗi mã (thiếu trường hợp thử): %s:%d"
+msgstr "Nội bộ: chưa gỡ lỗi mã (thiếu trường hợp thử): %s:%d"
 
 #: mmix-dis.c:54
 msgid "(unknown)"
 msgstr "(không rõ)"
 
-#: mmix-dis.c:513
+#: mmix-dis.c:512
 #, c-format
 msgid "*unknown operands type: %d*"
-msgstr "• không rõ kiểu tác tử : %d •"
+msgstr "• không rõ kiểu tác tử: %d •"
 
-#: msp430-dis.c:327
+#: msp430-dis.c:328
 msgid "Illegal as emulation instr"
 msgstr "Không được phép dưới dạng chỉ dẫn mô phỏng"
 
 #. R2/R3 are illegal as dest: may be data section.
-#: msp430-dis.c:378
+#: msp430-dis.c:379
 msgid "Illegal as 2-op instr"
 msgstr "Không được phép dưới dạng chỉ dẫn 2-op"
 
 #: mt-asm.c:110 mt-asm.c:190
 msgid "Operand out of range. Must be between -32768 and 32767."
-msgstr "Tác tử ở ngoại phạm vi (phải nằm giữa -32768 và +32767."
+msgstr "Tác tử nằm ngoài phạm vi (phải nằm giữa -32768 và +32767."
 
 #: mt-asm.c:149
 msgid "Biiiig Trouble in parse_imm16!"
-msgstr "Gặp lỗi nghiêm trọng trong « parse_imm16 »."
+msgstr "Gặp lỗi nghiêm trọng trong \"parse_imm16\"."
 
 #: mt-asm.c:157
 msgid "The percent-operator's operand is not a symbol"
@@ -1013,17 +1019,17 @@ msgstr "tác tử không hợp lệ. kiểu chỉ có thể có giá trị 0,1,2
 #. an immediate either. We don't know how much to increase
 #. aoffsetp by since whatever generated this is broken
 #. anyway!
-#: ns32k-dis.c:534
+#: ns32k-dis.c:533
 #, c-format
 msgid "$<undefined>"
-msgstr "$<chưa xác định>"
+msgstr "$<chưa định nghĩa>"
 
-#: ppc-dis.c:248
+#: ppc-dis.c:234
 #, c-format
 msgid "warning: ignoring unknown -M%s option\n"
-msgstr "cảnh báo : đang bở qua tuỳ chọn « -M%s » không rõ\n"
+msgstr "cảnh báo: đang bở qua tuỳ chọn \"-M%s\" không rõ\n"
 
-#: ppc-dis.c:537
+#: ppc-dis.c:523
 #, c-format
 msgid ""
 "\n"
@@ -1031,49 +1037,49 @@ msgid ""
 "the -M switch:\n"
 msgstr ""
 "\n"
-"Những tùy chọn rã đặc trưng cho PPC theo đây được hỗ trợ để sử dụng với đối số « -M »:\n"
+"Những tùy chọn rã đặc trưng cho PPC theo đây được hỗ trợ để sử dụng với đối số \"-M\":\n"
 
-#: ppc-opc.c:873 ppc-opc.c:901
+#: ppc-opc.c:879 ppc-opc.c:907
 msgid "invalid conditional option"
 msgstr "tùy chọn điều kiện không hợp lệ"
 
-#: ppc-opc.c:903
+#: ppc-opc.c:909
 msgid "attempt to set y bit when using + or - modifier"
-msgstr "thử đặt « bit y » khi sử dụng điều sửa đổi + hay -"
+msgstr "thử đặt \"bit y\" khi sử dụng điều sửa đổi + hay -"
 
-#: ppc-opc.c:935
+#: ppc-opc.c:941
 msgid "invalid mask field"
 msgstr "trường mặt nạ không hợp lệ"
 
-#: ppc-opc.c:961
+#: ppc-opc.c:967
 msgid "ignoring invalid mfcr mask"
 msgstr "đang bỏ qua mặt nạ mfcr không hợp lệ"
 
-#: ppc-opc.c:1011 ppc-opc.c:1046
+#: ppc-opc.c:1017 ppc-opc.c:1052
 msgid "illegal bitmask"
 msgstr "gặp mặt nặ bit cấm"
 
-#: ppc-opc.c:1166
+#: ppc-opc.c:1172
 msgid "index register in load range"
 msgstr "thanh ghi cơ số trong phạm vi nạp"
 
-#: ppc-opc.c:1182
+#: ppc-opc.c:1188
 msgid "source and target register operands must be different"
 msgstr "tác tử thanh ghi kiểu nguồn và đích phải là khác nhau"
 
-#: ppc-opc.c:1197
+#: ppc-opc.c:1203
 msgid "invalid register operand when updating"
 msgstr "gặp tác tử thanh ghi không hợp lệ khi cập nhật"
 
-#: ppc-opc.c:1276
+#: ppc-opc.c:1282
 msgid "invalid sprg number"
 msgstr "số sprg không hợp lệ"
 
-#: ppc-opc.c:1446
+#: ppc-opc.c:1452
 msgid "invalid constant"
 msgstr "hằng không hợp lệ"
 
-#: s390-dis.c:277
+#: s390-dis.c:301
 #, c-format
 msgid ""
 "\n"
@@ -1082,14 +1088,14 @@ msgid ""
 msgstr ""
 "\n"
 "Theo đây có những tùy chọn rã đặc trưng cho S/390 được hỗ trợ để sử dụng\n"
-"với đối số « -M » (phân cách nhiều tùy chọn bằng dấu phẩy):\n"
+"với đối số \"-M\" (phân cách nhiều tùy chọn bằng dấu phẩy):\n"
 
-#: s390-dis.c:281
+#: s390-dis.c:305
 #, c-format
 msgid "  esa         Disassemble in ESA architecture mode\n"
 msgstr "  esa         Rã ở chế độ kiến trúc ESA\n"
 
-#: s390-dis.c:282
+#: s390-dis.c:306
 #, c-format
 msgid "  zarch       Disassemble in z/Architecture mode\n"
 msgstr "  zarch       Rã ở chế độ z/kiến trúc\n"
@@ -1102,105 +1108,97 @@ msgstr "<độ chính xác cấm>"
 #: sparc-dis.c:283
 #, c-format
 msgid "Internal error:  bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n"
-msgstr "Lỗi nội bộ : sparc-opcode.h sai: « %s », %#.8lx, %#.8lx\n"
+msgstr "Lỗi nội bộ: sparc-opcode.h sai: \"%s\", %#.8lx, %#.8lx\n"
 
 #: sparc-dis.c:294
 #, c-format
 msgid "Internal error: bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n"
-msgstr "Lỗi nội bộ : sparc-opcode.h sai: « %s », %#.8lx, %#.8lx\n"
+msgstr "Lỗi nội bộ: sparc-opcode.h sai: \"%s\", %#.8lx, %#.8lx\n"
 
 #: sparc-dis.c:344
 #, c-format
 msgid "Internal error: bad sparc-opcode.h: \"%s\" == \"%s\"\n"
-msgstr "Lỗi nội bộ : sparc-opcode.h sai: « %s » == \"%s\"\n"
+msgstr "Lỗi nội bộ: sparc-opcode.h sai: \"%s\" == \"%s\"\n"
 
 #. Mark as non-valid instruction.
-#: sparc-dis.c:1014
+#: sparc-dis.c:1015
 msgid "unknown"
 msgstr "không rõ"
 
-#: v850-dis.c:239
+#: v850-dis.c:372
 #, c-format
 msgid "unknown operand shift: %x\n"
-msgstr "không rõ sự dịch tác tử : %x\n"
+msgstr "không rõ sự dịch tác tử: %x\n"
 
-#: v850-dis.c:253
+#: v850-dis.c:384
 #, c-format
-msgid "unknown pop reg: %d\n"
-msgstr "không rõ pop reg: %d\n"
+msgid "unknown reg: %d\n"
+msgstr "không rõ reg: %d\n"
 
 #. The functions used to insert and extract complicated operands.
 #. Note: There is a conspiracy between these functions and
 #. v850_insert_operand() in gas/config/tc-v850.c.  Error messages
 #. containing the string 'out of range' will be ignored unless a
 #. specific command line option is given to GAS.
-#: v850-opc.c:48
+#: v850-opc.c:55
 msgid "displacement value is not in range and is not aligned"
-msgstr "giá trị di chuyển ở ngoại phạm vi và chưa được chỉnh canh"
+msgstr "giá trị di chuyển nằm ngoài phạm vi và chưa được chỉnh canh"
 
-#: v850-opc.c:49
+#: v850-opc.c:56
 msgid "displacement value is out of range"
-msgstr "giá trị di chuyển ở ngoại phạm vi"
+msgstr "giá trị di chuyển nằm ngoài phạm vi"
 
-#: v850-opc.c:50
+#: v850-opc.c:57
 msgid "displacement value is not aligned"
 msgstr "chưa chỉnh canh giá trị di chuyển"
 
-#: v850-opc.c:52
+#: v850-opc.c:59
 msgid "immediate value is out of range"
-msgstr "giá trị trực tiếp ở ngoại phạm vi"
+msgstr "giá trị trực tiếp nằm ngoài phạm vi"
 
 #: v850-opc.c:60
-msgid "branch value not in range and to odd offset"
-msgstr "giá trị nhánh ở ngoại phạm vi và đối với hiệu số lẻ"
-
-#: v850-opc.c:62 v850-opc.c:89
 msgid "branch value out of range"
-msgstr "giá trị nhánh ở ngoại phạm vi"
+msgstr "giá trị nhánh nằm ngoài phạm vi"
+
+#: v850-opc.c:61
+msgid "branch value not in range and to odd offset"
+msgstr "giá trị nhánh nằm ngoài phạm vi và đối với hiệu số lẻ"
 
-#: v850-opc.c:65 v850-opc.c:92
+#: v850-opc.c:62
 msgid "branch to odd offset"
 msgstr "nhánh đối với hiệu số lẻ"
 
-#: v850-opc.c:87
-msgid "branch value not in range and to an odd offset"
-msgstr "giá trị nhánh ở ngoại phạm vi và đối với hiệu số lẻ"
-
-#: v850-opc.c:279
+#: v850-opc.c:497
 msgid "invalid register for stack adjustment"
 msgstr "thanh ghi không hợp lệ để điều chỉnh đống"
 
-#: v850-opc.c:299
-msgid "immediate value not in range and not even"
-msgstr "giá trị trực tiếp ở ngoạị phạm vi và không phải số chẵn"
-
-#: v850-opc.c:304
-msgid "immediate value must be even"
-msgstr "giá trị trực tiếp phải là số chẵn"
+#: v850-opc.c:518
+msgid "invalid register name"
+msgstr "tên thanh ghi sai"
 
 #: xc16x-asm.c:66
 msgid "Missing '#' prefix"
-msgstr "Thiếu tiền tố « # »"
+msgstr "Thiếu tiền tố \"#\""
 
 #: xc16x-asm.c:82
 msgid "Missing '.' prefix"
-msgstr "Thiếu tiền tố « . »"
+msgstr "Thiếu tiền tố \".\""
 
 #: xc16x-asm.c:98
 msgid "Missing 'pof:' prefix"
-msgstr "Thiếu tiền tố « pof: »"
+msgstr "Thiếu tiền tố \"pof:\""
 
 #: xc16x-asm.c:114
 msgid "Missing 'pag:' prefix"
-msgstr "Thiếu tiền tố « pag: »"
+msgstr "Thiếu tiền tố \"pag:\""
 
 #: xc16x-asm.c:130
 msgid "Missing 'sof:' prefix"
-msgstr "Thiếu tiền tố « sof: »"
+msgstr "Thiếu tiền tố \"sof:\""
 
 #: xc16x-asm.c:146
 msgid "Missing 'seg:' prefix"
-msgstr "Thiếu tiền tố « seg: »"
+msgstr "Thiếu tiền tố \"seg:\""
 
 #: xstormy16-asm.c:71
 msgid "Bad register in preincrement"
@@ -1220,7 +1218,7 @@ msgstr "Nhãn xung đột với tên thanh ghi"
 
 #: xstormy16-asm.c:86
 msgid "Label conflicts with `Rx'"
-msgstr "Nhãn xung đột với « Rx »"
+msgstr "Nhãn xung đột với \"Rx\""
 
 #: xstormy16-asm.c:88
 msgid "Bad immediate expression"
@@ -1232,7 +1230,7 @@ msgstr "Không có sự định vị lại cho điều nhỏ ngay"
 
 #: xstormy16-asm.c:119
 msgid "Small operand was not an immediate number"
-msgstr "Tác tử nhỏ không phải số ngay"
+msgstr "Tác tử nhỏ không phải số trực tiếp"
 
 #: xstormy16-asm.c:157
 msgid "Operand is not a symbol"
@@ -1240,4 +1238,13 @@ msgstr "Tác tử không phải ký hiệu"
 
 #: xstormy16-asm.c:165
 msgid "Syntax error: No trailing ')'"
-msgstr "Lỗi cú pháp: không có dấu ngoặc đóng « ) » đi theo"
+msgstr "Lỗi cú pháp: không có dấu ngoặc đóng \")\" đi theo"
+
+#~ msgid "branch value not in range and to an odd offset"
+#~ msgstr "giá trị nhánh nằm ngoài phạm vi và đối với hiệu số lẻ"
+
+#~ msgid "immediate value not in range and not even"
+#~ msgstr "giá trị trực tiếp ở ngoạị phạm vi và không phải số chẵn"
+
+#~ msgid "immediate value must be even"
+#~ msgstr "giá trị trực tiếp phải là số chẵn"
diff --git a/opcodes/ppc-dis.c b/opcodes/ppc-dis.c
index e011392..0905744 100644
--- a/opcodes/ppc-dis.c
+++ b/opcodes/ppc-dis.c
@@ -1,6 +1,6 @@
 /* ppc-dis.c -- Disassemble PowerPC instructions
    Copyright 1994, 1995, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
-   2008, 2009, 2010 Free Software Foundation, Inc.
+   2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support
 
    This file is part of the GNU opcodes library.
@@ -20,9 +20,11 @@
    Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <stdio.h>
 #include "sysdep.h"
+#include <stdio.h>
 #include "dis-asm.h"
+#include "elf-bfd.h"
+#include "elf/ppc.h"
 #include "opintl.h"
 #include "opcode/ppc.h"
 
@@ -38,7 +40,7 @@ struct dis_private
 {
   /* Stash the result of parsing disassembler_options here.  */
   ppc_cpu_t dialect;
-};
+} private;
 
 #define POWERPC_DIALECT(INFO) \
   (((struct dis_private *) ((INFO)->private_data))->dialect)
@@ -114,6 +116,18 @@ struct ppc_mopt ppc_opts[] = {
 		| PPC_OPCODE_E500MC | PPC_OPCODE_64 | PPC_OPCODE_POWER5
 		| PPC_OPCODE_POWER6 | PPC_OPCODE_POWER7),
     0 },
+  { "e5500",    (PPC_OPCODE_PPC | PPC_OPCODE_BOOKE | PPC_OPCODE_ISEL
+		| PPC_OPCODE_PMR | PPC_OPCODE_CACHELCK | PPC_OPCODE_RFMCI
+		| PPC_OPCODE_E500MC | PPC_OPCODE_64 | PPC_OPCODE_POWER4
+		| PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6
+		| PPC_OPCODE_POWER7),
+    0 },
+  { "e6500",   (PPC_OPCODE_PPC | PPC_OPCODE_BOOKE | PPC_OPCODE_ISEL
+		| PPC_OPCODE_PMR | PPC_OPCODE_CACHELCK | PPC_OPCODE_RFMCI
+		| PPC_OPCODE_E500MC | PPC_OPCODE_64 | PPC_OPCODE_ALTIVEC
+		| PPC_OPCODE_ALTIVEC2 | PPC_OPCODE_E6500 | PPC_OPCODE_POWER4
+		| PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6 | PPC_OPCODE_POWER7),
+    0 },
   { "e500x2",  (PPC_OPCODE_PPC | PPC_OPCODE_BOOKE | PPC_OPCODE_SPE
 		| PPC_OPCODE_ISEL | PPC_OPCODE_EFS | PPC_OPCODE_BRLOCK
 		| PPC_OPCODE_PMR | PPC_OPCODE_CACHELCK | PPC_OPCODE_RFMCI
@@ -169,18 +183,41 @@ struct ppc_mopt ppc_opts[] = {
   { "titan",   (PPC_OPCODE_PPC | PPC_OPCODE_BOOKE | PPC_OPCODE_PMR
 		| PPC_OPCODE_RFMCI | PPC_OPCODE_TITAN),
     0 },
+  { "vle",     (PPC_OPCODE_PPC | PPC_OPCODE_ISEL | PPC_OPCODE_VLE),
+    PPC_OPCODE_VLE },
   { "vsx",     (PPC_OPCODE_PPC),
     PPC_OPCODE_VSX },
 };
 
+/* Switch between Booke and VLE dialects for interlinked dumps.  */
+static ppc_cpu_t
+get_powerpc_dialect (struct disassemble_info *info)
+{
+  ppc_cpu_t dialect = 0;
+
+  dialect = POWERPC_DIALECT (info);
+
+  /* Disassemble according to the section headers flags for VLE-mode.  */
+  if (dialect & PPC_OPCODE_VLE
+      && info->section->owner != NULL
+      && bfd_get_flavour (info->section->owner) == bfd_target_elf_flavour
+      && elf_object_id (info->section->owner) == PPC32_ELF_DATA
+      && (elf_section_flags (info->section) & SHF_PPC_VLE) != 0)
+    return dialect;
+  else
+    return dialect & ~ PPC_OPCODE_VLE;
+}
+
 /* Handle -m and -M options that set cpu type, and .machine arg.  */
 
 ppc_cpu_t
 ppc_parse_cpu (ppc_cpu_t ppc_cpu, const char *arg)
 {
+  const ppc_cpu_t retain_mask = (PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX
+				 | PPC_OPCODE_SPE | PPC_OPCODE_ANY
+				 | PPC_OPCODE_VLE | PPC_OPCODE_PMR);
   /* Sticky bits.  */
-  ppc_cpu_t retain_flags = ppc_cpu & (PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX
-				      | PPC_OPCODE_SPE | PPC_OPCODE_ANY);
+  ppc_cpu_t retain_flags = ppc_cpu & retain_mask;
   unsigned int i;
 
   for (i = 0; i < sizeof (ppc_opts) / sizeof (ppc_opts[0]); i++)
@@ -189,8 +226,7 @@ ppc_parse_cpu (ppc_cpu_t ppc_cpu, const char *arg)
 	if (ppc_opts[i].sticky)
 	  {
 	    retain_flags |= ppc_opts[i].sticky;
-	    if ((ppc_cpu & ~(ppc_cpu_t) (PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX
-					 | PPC_OPCODE_SPE | PPC_OPCODE_ANY)) != 0)
+	    if ((ppc_cpu & ~retain_mask) != 0)
 	      break;
 	  }
 	ppc_cpu = ppc_opts[i].cpu;
@@ -205,7 +241,7 @@ ppc_parse_cpu (ppc_cpu_t ppc_cpu, const char *arg)
 
 /* Determine which set of machines to disassemble for.  */
 
-static int
+static void
 powerpc_init_dialect (struct disassemble_info *info)
 {
   ppc_cpu_t dialect = 0;
@@ -213,7 +249,7 @@ powerpc_init_dialect (struct disassemble_info *info)
   struct dis_private *priv = calloc (sizeof (*priv), 1);
 
   if (priv == NULL)
-    return FALSE;
+    priv = &private;
 
   arg = info->disassembler_options;
   while (arg != NULL)
@@ -244,15 +280,67 @@ powerpc_init_dialect (struct disassemble_info *info)
 	dialect |= PPC_OPCODE_64;
       else
 	dialect &= ~(ppc_cpu_t) PPC_OPCODE_64;
-      /* Choose a reasonable default.  */
-      dialect |= (PPC_OPCODE_PPC | PPC_OPCODE_COMMON | PPC_OPCODE_601
-		  | PPC_OPCODE_ALTIVEC);
+      if (info->mach == bfd_mach_ppc_vle)
+        dialect |= PPC_OPCODE_PPC | PPC_OPCODE_VLE;
+      else
+        /* Choose a reasonable default.  */
+        dialect |= (PPC_OPCODE_PPC | PPC_OPCODE_COMMON | PPC_OPCODE_601
+		    | PPC_OPCODE_ALTIVEC);
     }
 
   info->private_data = priv;
   POWERPC_DIALECT(info) = dialect;
+}
+
+#define PPC_OPCD_SEGS 64
+static unsigned short powerpc_opcd_indices[PPC_OPCD_SEGS+1];
+#define VLE_OPCD_SEGS 32
+static unsigned short vle_opcd_indices[VLE_OPCD_SEGS+1];
+
+/* Calculate opcode table indices to speed up disassembly,
+   and init dialect.  */
+
+void
+disassemble_init_powerpc (struct disassemble_info *info)
+{
+  int i;
+  unsigned short last;
+
+  i = powerpc_num_opcodes;
+  while (--i >= 0)
+    {
+      unsigned op = PPC_OP (powerpc_opcodes[i].opcode);
 
-  return TRUE;
+      powerpc_opcd_indices[op] = i;
+    }
+
+  last = powerpc_num_opcodes;
+  for (i = PPC_OPCD_SEGS; i > 0; --i)
+    {
+      if (powerpc_opcd_indices[i] == 0)
+	powerpc_opcd_indices[i] = last;
+      last = powerpc_opcd_indices[i];
+    }
+
+  i = vle_num_opcodes;
+  while (--i >= 0)
+    {
+      unsigned op = VLE_OP (vle_opcodes[i].opcode, vle_opcodes[i].mask);
+      unsigned seg = VLE_OP_TO_SEG (op);
+
+      vle_opcd_indices[seg] = i;
+    }
+
+  last = vle_num_opcodes;
+  for (i = VLE_OPCD_SEGS; i > 0; --i)
+    {
+      if (vle_opcd_indices[i] == 0)
+	vle_opcd_indices[i] = last;
+      last = vle_opcd_indices[i];
+    }
+
+  if (info->arch == bfd_arch_powerpc)
+    powerpc_init_dialect (info);
 }
 
 /* Print a big endian PowerPC instruction.  */
@@ -260,9 +348,7 @@ powerpc_init_dialect (struct disassemble_info *info)
 int
 print_insn_big_powerpc (bfd_vma memaddr, struct disassemble_info *info)
 {
-  if (info->private_data == NULL && !powerpc_init_dialect (info))
-    return -1;
-  return print_insn_powerpc (memaddr, info, 1, POWERPC_DIALECT(info));
+  return print_insn_powerpc (memaddr, info, 1, get_powerpc_dialect (info));
 }
 
 /* Print a little endian PowerPC instruction.  */
@@ -270,9 +356,7 @@ print_insn_big_powerpc (bfd_vma memaddr, struct disassemble_info *info)
 int
 print_insn_little_powerpc (bfd_vma memaddr, struct disassemble_info *info)
 {
-  if (info->private_data == NULL && !powerpc_init_dialect (info))
-    return -1;
-  return print_insn_powerpc (memaddr, info, 0, POWERPC_DIALECT(info));
+  return print_insn_powerpc (memaddr, info, 0, get_powerpc_dialect (info));
 }
 
 /* Print a POWER (RS/6000) instruction.  */
@@ -296,11 +380,14 @@ operand_value_powerpc (const struct powerpc_operand *operand,
     value = (*operand->extract) (insn, dialect, &invalid);
   else
     {
-      value = (insn >> operand->shift) & operand->bitm;
+      if (operand->shift >= 0)
+	value = (insn >> operand->shift) & operand->bitm;
+      else
+	value = (insn << -operand->shift) & operand->bitm;
       if ((operand->flags & PPC_OPERAND_SIGNED) != 0)
 	{
 	  /* BITM is always some number of zeros followed by some
-	     number of ones, followed by some numer of zeros.  */
+	     number of ones, followed by some number of zeros.  */
 	  unsigned long top = operand->bitm;
 	  /* top & -top gives the rightmost 1 bit, so this
 	     fills in any trailing zeros.  */
@@ -333,6 +420,106 @@ skip_optional_operands (const unsigned char *opindex,
   return 1;
 }
 
+/* Find a match for INSN in the opcode table, given machine DIALECT.
+   A DIALECT of -1 is special, matching all machine opcode variations.  */
+
+static const struct powerpc_opcode *
+lookup_powerpc (unsigned long insn, ppc_cpu_t dialect)
+{
+  const struct powerpc_opcode *opcode;
+  const struct powerpc_opcode *opcode_end;
+  unsigned long op;
+
+  /* Get the major opcode of the instruction.  */
+  op = PPC_OP (insn);
+
+  /* Find the first match in the opcode table for this major opcode.  */
+  opcode_end = powerpc_opcodes + powerpc_opcd_indices[op + 1];
+  for (opcode = powerpc_opcodes + powerpc_opcd_indices[op];
+       opcode < opcode_end;
+       ++opcode)
+    {
+      const unsigned char *opindex;
+      const struct powerpc_operand *operand;
+      int invalid;
+
+      if ((insn & opcode->mask) != opcode->opcode
+	  || (dialect != (ppc_cpu_t) -1
+	      && ((opcode->flags & dialect) == 0
+		  || (opcode->deprecated & dialect) != 0)))
+	continue;
+
+      /* Check validity of operands.  */
+      invalid = 0;
+      for (opindex = opcode->operands; *opindex != 0; opindex++)
+	{
+	  operand = powerpc_operands + *opindex;
+	  if (operand->extract)
+	    (*operand->extract) (insn, dialect, &invalid);
+	}
+      if (invalid)
+	continue;
+
+      return opcode;
+    }
+
+  return NULL;
+}
+
+/* Find a match for INSN in the VLE opcode table.  */
+
+static const struct powerpc_opcode *
+lookup_vle (unsigned long insn)
+{
+  const struct powerpc_opcode *opcode;
+  const struct powerpc_opcode *opcode_end;
+  unsigned op, seg;
+
+  op = PPC_OP (insn);
+  if (op >= 0x20 && op <= 0x37)
+    {
+      /* This insn has a 4-bit opcode.  */
+      op &= 0x3c;
+    }
+  seg = VLE_OP_TO_SEG (op);
+
+  /* Find the first match in the opcode table for this major opcode.  */
+  opcode_end = vle_opcodes + vle_opcd_indices[seg + 1];
+  for (opcode = vle_opcodes + vle_opcd_indices[seg];
+       opcode < opcode_end;
+       ++opcode)
+    {
+      unsigned long table_opcd = opcode->opcode;
+      unsigned long table_mask = opcode->mask;
+      bfd_boolean table_op_is_short = PPC_OP_SE_VLE(table_mask);
+      unsigned long insn2;
+      const unsigned char *opindex;
+      const struct powerpc_operand *operand;
+      int invalid;
+
+      insn2 = insn;
+      if (table_op_is_short)
+	insn2 >>= 16;
+      if ((insn2 & table_mask) != table_opcd)
+	continue;
+
+      /* Check validity of operands.  */
+      invalid = 0;
+      for (opindex = opcode->operands; *opindex != 0; ++opindex)
+	{
+	  operand = powerpc_operands + *opindex;
+	  if (operand->extract)
+	    (*operand->extract) (insn, (ppc_cpu_t)0, &invalid);
+	}
+      if (invalid)
+	continue;
+
+      return opcode;
+    }
+
+  return NULL;
+}
+
 /* Print a PowerPC or POWER instruction.  */
 
 static int
@@ -345,14 +532,28 @@ print_insn_powerpc (bfd_vma memaddr,
   int status;
   unsigned long insn;
   const struct powerpc_opcode *opcode;
-  const struct powerpc_opcode *opcode_end;
-  unsigned long op;
+  bfd_boolean insn_is_short;
 
   status = (*info->read_memory_func) (memaddr, buffer, 4, info);
   if (status != 0)
     {
-      (*info->memory_error_func) (status, memaddr, info);
-      return -1;
+      /* The final instruction may be a 2-byte VLE insn.  */
+      if ((dialect & PPC_OPCODE_VLE) != 0)
+        {
+          /* Clear buffer so unused bytes will not have garbage in them.  */
+          buffer[0] = buffer[1] = buffer[2] = buffer[3] = 0;
+          status = (*info->read_memory_func) (memaddr, buffer, 2, info);
+          if (status != 0)
+            {
+              (*info->memory_error_func) (status, memaddr, info);
+              return -1;
+            }
+        }
+      else
+        {
+          (*info->memory_error_func) (status, memaddr, info);
+          return -1;
+        }
     }
 
   if (bigendian)
@@ -360,54 +561,37 @@ print_insn_powerpc (bfd_vma memaddr,
   else
     insn = bfd_getl32 (buffer);
 
-  /* Get the major opcode of the instruction.  */
-  op = PPC_OP (insn);
+  /* Get the major opcode of the insn.  */
+  opcode = NULL;
+  insn_is_short = FALSE;
+  if ((dialect & PPC_OPCODE_VLE) != 0)
+    {
+      opcode = lookup_vle (insn);
+      if (opcode != NULL)
+	insn_is_short = PPC_OP_SE_VLE(opcode->mask);
+    }
+  if (opcode == NULL)
+    opcode = lookup_powerpc (insn, dialect);
+  if (opcode == NULL && (dialect & PPC_OPCODE_ANY) != 0)
+    opcode = lookup_powerpc (insn, (ppc_cpu_t) -1);
 
-  /* Find the first match in the opcode table.  We could speed this up
-     a bit by doing a binary search on the major opcode.  */
-  opcode_end = powerpc_opcodes + powerpc_num_opcodes;
- again:
-  for (opcode = powerpc_opcodes; opcode < opcode_end; opcode++)
+  if (opcode != NULL)
     {
-      unsigned long table_op;
       const unsigned char *opindex;
       const struct powerpc_operand *operand;
-      int invalid;
       int need_comma;
       int need_paren;
       int skip_optional;
 
-      table_op = PPC_OP (opcode->opcode);
-      if (op < table_op)
-	break;
-      if (op > table_op)
-	continue;
-
-      if ((insn & opcode->mask) != opcode->opcode
-	  || (opcode->flags & dialect) == 0
-	  || (dialect != ~(ppc_cpu_t) PPC_OPCODE_ANY
-	      && (opcode->deprecated & dialect) != 0))
-	continue;
-
-      /* Make two passes over the operands.  First see if any of them
-	 have extraction functions, and, if they do, make sure the
-	 instruction is valid.  */
-      invalid = 0;
-      for (opindex = opcode->operands; *opindex != 0; opindex++)
-	{
-	  operand = powerpc_operands + *opindex;
-	  if (operand->extract)
-	    (*operand->extract) (insn, dialect, &invalid);
-	}
-      if (invalid)
-	continue;
-
-      /* The instruction is valid.  */
       if (opcode->operands[0] != 0)
 	(*info->fprintf_func) (info->stream, "%-7s ", opcode->name);
       else
 	(*info->fprintf_func) (info->stream, "%s", opcode->name);
 
+      if (insn_is_short)
+        /* The operands will be fetched out of the 16-bit instruction.  */
+        insn >>= 16;
+
       /* Now extract and print the operands.  */
       need_comma = 0;
       need_paren = 0;
@@ -463,26 +647,26 @@ print_insn_powerpc (bfd_vma memaddr,
 	    (*info->fprintf_func) (info->stream, "fcr%ld", value);
 	  else if ((operand->flags & PPC_OPERAND_UDI) != 0)
 	    (*info->fprintf_func) (info->stream, "%ld", value);
-	  else if ((operand->flags & PPC_OPERAND_CR) != 0
-		   && (dialect & PPC_OPCODE_PPC) != 0)
+	  else if ((operand->flags & PPC_OPERAND_CR_REG) != 0
+		   && (((dialect & PPC_OPCODE_PPC) != 0)
+		       || ((dialect & PPC_OPCODE_VLE) != 0)))
+	    (*info->fprintf_func) (info->stream, "cr%ld", value);
+	  else if (((operand->flags & PPC_OPERAND_CR_BIT) != 0)
+		   && (((dialect & PPC_OPCODE_PPC) != 0)
+		       || ((dialect & PPC_OPCODE_VLE) != 0)))
 	    {
-	      if (operand->bitm == 7)
-		(*info->fprintf_func) (info->stream, "cr%ld", value);
-	      else
-		{
-		  static const char *cbnames[4] = { "lt", "gt", "eq", "so" };
-		  int cr;
-		  int cc;
-
-		  cr = value >> 2;
-		  if (cr != 0)
-		    (*info->fprintf_func) (info->stream, "4*cr%d+", cr);
-		  cc = value & 3;
-		  (*info->fprintf_func) (info->stream, "%s", cbnames[cc]);
-		}
+	      static const char *cbnames[4] = { "lt", "gt", "eq", "so" };
+	      int cr;
+	      int cc;
+
+	      cr = value >> 2;
+	      if (cr != 0)
+		(*info->fprintf_func) (info->stream, "4*cr%d+", cr);
+	      cc = value & 3;
+	      (*info->fprintf_func) (info->stream, "%s", cbnames[cc]);
 	    }
 	  else
-	    (*info->fprintf_func) (info->stream, "%ld", value);
+	    (*info->fprintf_func) (info->stream, "%d", value);
 
 	  if (need_paren)
 	    {
@@ -499,14 +683,16 @@ print_insn_powerpc (bfd_vma memaddr,
 	    }
 	}
 
-      /* We have found and printed an instruction; return.  */
-      return 4;
-    }
-
-  if ((dialect & PPC_OPCODE_ANY) != 0)
-    {
-      dialect = ~(ppc_cpu_t) PPC_OPCODE_ANY;
-      goto again;
+      /* We have found and printed an instruction.
+         If it was a short VLE instruction we have more to do.  */
+      if (insn_is_short)
+        {
+          memaddr += 2;
+          return 2;
+        }
+      else
+        /* Otherwise, return.  */
+        return 4;
     }
 
   /* We could not find a match.  */
diff --git a/opcodes/ppc-opc.c b/opcodes/ppc-opc.c
index f5c4616..f57526d 100644
--- a/opcodes/ppc-opc.c
+++ b/opcodes/ppc-opc.c
@@ -1,6 +1,6 @@
 /* ppc-opc.c -- PowerPC opcode list
    Copyright 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004,
-   2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support
 
@@ -21,8 +21,8 @@
    Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <stdio.h>
 #include "sysdep.h"
+#include <stdio.h>
 #include "opcode/ppc.h"
 #include "opintl.h"
 
@@ -39,6 +39,10 @@
 

 /* Local insertion and extraction functions.  */
 
+static unsigned long insert_arx (unsigned long, long, ppc_cpu_t, const char **);
+static long extract_arx (unsigned long, ppc_cpu_t, int *);
+static unsigned long insert_ary (unsigned long, long, ppc_cpu_t, const char **);
+static long extract_ary (unsigned long, ppc_cpu_t, int *);
 static unsigned long insert_bat (unsigned long, long, ppc_cpu_t, const char **);
 static long extract_bat (unsigned long, ppc_cpu_t, int *);
 static unsigned long insert_bba (unsigned long, long, ppc_cpu_t, const char **);
@@ -53,6 +57,9 @@ static unsigned long insert_boe (unsigned long, long, ppc_cpu_t, const char **);
 static long extract_boe (unsigned long, ppc_cpu_t, int *);
 static unsigned long insert_fxm (unsigned long, long, ppc_cpu_t, const char **);
 static long extract_fxm (unsigned long, ppc_cpu_t, int *);
+static unsigned long insert_li20 (unsigned long, long, ppc_cpu_t, const char **);
+static long extract_li20 (unsigned long, ppc_cpu_t, int *);
+static unsigned long insert_ls (unsigned long, long, ppc_cpu_t, const char **);
 static unsigned long insert_mbe (unsigned long, long, ppc_cpu_t, const char **);
 static long extract_mbe (unsigned long, ppc_cpu_t, int *);
 static unsigned long insert_mb6 (unsigned long, long, ppc_cpu_t, const char **);
@@ -61,6 +68,8 @@ static long extract_nb (unsigned long, ppc_cpu_t, int *);
 static unsigned long insert_nbi (unsigned long, long, ppc_cpu_t, const char **);
 static unsigned long insert_nsi (unsigned long, long, ppc_cpu_t, const char **);
 static long extract_nsi (unsigned long, ppc_cpu_t, int *);
+static unsigned long insert_oimm (unsigned long, long, ppc_cpu_t, const char **);
+static long extract_oimm (unsigned long, ppc_cpu_t, int *);
 static unsigned long insert_ral (unsigned long, long, ppc_cpu_t, const char **);
 static unsigned long insert_ram (unsigned long, long, ppc_cpu_t, const char **);
 static unsigned long insert_raq (unsigned long, long, ppc_cpu_t, const char **);
@@ -68,8 +77,20 @@ static unsigned long insert_ras (unsigned long, long, ppc_cpu_t, const char **);
 static unsigned long insert_rbs (unsigned long, long, ppc_cpu_t, const char **);
 static long extract_rbs (unsigned long, ppc_cpu_t, int *);
 static unsigned long insert_rbx (unsigned long, long, ppc_cpu_t, const char **);
+static unsigned long insert_rx (unsigned long, long, ppc_cpu_t, const char **);
+static long extract_rx (unsigned long, ppc_cpu_t, int *);
+static unsigned long insert_ry (unsigned long, long, ppc_cpu_t, const char **);
+static long extract_ry (unsigned long, ppc_cpu_t, int *);
 static unsigned long insert_sh6 (unsigned long, long, ppc_cpu_t, const char **);
 static long extract_sh6 (unsigned long, ppc_cpu_t, int *);
+static unsigned long insert_sci8 (unsigned long, long, ppc_cpu_t, const char **);
+static long extract_sci8 (unsigned long, ppc_cpu_t, int *);
+static unsigned long insert_sci8n (unsigned long, long, ppc_cpu_t, const char **);
+static long extract_sci8n (unsigned long, ppc_cpu_t, int *);
+static unsigned long insert_sd4h (unsigned long, long, ppc_cpu_t, const char **);
+static long extract_sd4h (unsigned long, ppc_cpu_t, int *);
+static unsigned long insert_sd4w (unsigned long, long, ppc_cpu_t, const char **);
+static long extract_sd4w (unsigned long, ppc_cpu_t, int *);
 static unsigned long insert_spr (unsigned long, long, ppc_cpu_t, const char **);
 static long extract_spr (unsigned long, ppc_cpu_t, int *);
 static unsigned long insert_sprg (unsigned long, long, ppc_cpu_t, const char **);
@@ -88,6 +109,14 @@ static unsigned long insert_xc6 (unsigned long, long, ppc_cpu_t, const char **);
 static long extract_xc6 (unsigned long, ppc_cpu_t, int *);
 static unsigned long insert_dm (unsigned long, long, ppc_cpu_t, const char **);
 static long extract_dm (unsigned long, ppc_cpu_t, int *);
+static unsigned long insert_vlesi (unsigned long, long, ppc_cpu_t, const char **);
+static long extract_vlesi (unsigned long, ppc_cpu_t, int *);
+static unsigned long insert_vlensi (unsigned long, long, ppc_cpu_t, const char **);
+static long extract_vlensi (unsigned long, ppc_cpu_t, int *);
+static unsigned long insert_vleui (unsigned long, long, ppc_cpu_t, const char **);
+static long extract_vleui (unsigned long, ppc_cpu_t, int *);
+static unsigned long insert_vleil (unsigned long, long, ppc_cpu_t, const char **);
+static long extract_vleil (unsigned long, ppc_cpu_t, int *);
 

 /* The operands table.
 
@@ -112,7 +141,7 @@ const struct powerpc_operand powerpc_operands[] =
   /* The BI field in a B form or XL form instruction.  */
 #define BI BA
 #define BI_MASK (0x1f << 16)
-  { 0x1f, 16, NULL, NULL, PPC_OPERAND_CR },
+  { 0x1f, 16, NULL, NULL, PPC_OPERAND_CR_BIT },
 
   /* The BA field in an XL form instruction when it must be the same
      as the BT field in the same instruction.  */
@@ -122,7 +151,7 @@ const struct powerpc_operand powerpc_operands[] =
   /* The BB field in an XL form instruction.  */
 #define BB BAT + 1
 #define BB_MASK (0x1f << 11)
-  { 0x1f, 11, NULL, NULL, PPC_OPERAND_CR },
+  { 0x1f, 11, NULL, NULL, PPC_OPERAND_CR_BIT },
 
   /* The BB field in an XL form instruction when it must be the same
      as the BA field in the same instruction.  */
@@ -167,7 +196,9 @@ const struct powerpc_operand powerpc_operands[] =
 #define BF BDPA + 1
   /* The CRFD field in an X form instruction.  */
 #define CRFD BF
-  { 0x7, 23, NULL, NULL, PPC_OPERAND_CR },
+  /* The CRD field in an XL form instruction.  */
+#define CRD BF
+  { 0x7, 23, NULL, NULL, PPC_OPERAND_CR_REG },
 
   /* The BF field in an X or XL form instruction.  */
 #define BFF BF + 1
@@ -176,11 +207,11 @@ const struct powerpc_operand powerpc_operands[] =
   /* An optional BF field.  This is used for comparison instructions,
      in which an omitted BF field is taken as zero.  */
 #define OBF BFF + 1
-  { 0x7, 23, NULL, NULL, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
+  { 0x7, 23, NULL, NULL, PPC_OPERAND_CR_REG | PPC_OPERAND_OPTIONAL },
 
   /* The BFA field in an X or XL form instruction.  */
 #define BFA OBF + 1
-  { 0x7, 18, NULL, NULL, PPC_OPERAND_CR },
+  { 0x7, 18, NULL, NULL, PPC_OPERAND_CR_REG },
 
   /* The BO field in a B form instruction.  Certain values are
      illegal.  */
@@ -198,14 +229,40 @@ const struct powerpc_operand powerpc_operands[] =
 
   /* The BT field in an X or XL form instruction.  */
 #define BT BH + 1
-  { 0x1f, 21, NULL, NULL, PPC_OPERAND_CR },
+  { 0x1f, 21, NULL, NULL, PPC_OPERAND_CR_BIT },
+
+  /* The BI16 field in a BD8 form instruction.  */
+#define BI16 BT + 1
+  { 0x3, 8, NULL, NULL, PPC_OPERAND_CR_BIT },
+
+  /* The BI32 field in a BD15 form instruction.  */
+#define BI32 BI16 + 1
+  { 0xf, 16, NULL, NULL, PPC_OPERAND_CR_BIT },
+
+  /* The BO32 field in a BD15 form instruction.  */
+#define BO32 BI32 + 1
+  { 0x3, 20, NULL, NULL, 0 },
+
+  /* The B8 field in a BD8 form instruction.  */
+#define B8 BO32 + 1
+  { 0x1fe, -1, NULL, NULL, PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
+
+  /* The B15 field in a BD15 form instruction.  The lowest bit is
+     forced to zero.  */
+#define B15 B8 + 1
+  { 0xfffe, 0, NULL, NULL, PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
+
+  /* The B24 field in a BD24 form instruction.  The lowest bit is
+     forced to zero.  */
+#define B24 B15 + 1
+  { 0x1fffffe, 0, NULL, NULL, PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
 
   /* The condition register number portion of the BI field in a B form
      or XL form instruction.  This is used for the extended
      conditional branch mnemonics, which set the lower two bits of the
      BI field.  This field is optional.  */
-#define CR BT + 1
-  { 0x7, 18, NULL, NULL, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
+#define CR B24 + 1
+  { 0x7, 18, NULL, NULL, PPC_OPERAND_CR_REG | PPC_OPERAND_OPTIONAL },
 
   /* The CRB field in an X form instruction.  */
 #define CRB CR + 1
@@ -214,12 +271,19 @@ const struct powerpc_operand powerpc_operands[] =
 #define MB_MASK (0x1f << 6)
   { 0x1f, 6, NULL, NULL, 0 },
 
+  /* The CRD32 field in an XL form instruction.  */
+#define CRD32 CRB + 1
+  { 0x3, 21, NULL, NULL, PPC_OPERAND_CR_REG },
+
   /* The CRFS field in an X form instruction.  */
-#define CRFS CRB + 1
-  { 0x7, 0, NULL, NULL, PPC_OPERAND_CR },
+#define CRFS CRD32 + 1
+  { 0x7, 0, NULL, NULL, PPC_OPERAND_CR_REG },
+
+#define CRS CRFS + 1
+  { 0x3, 18, NULL, NULL, PPC_OPERAND_CR_REG | PPC_OPERAND_OPTIONAL },
 
   /* The CT field in an X form instruction.  */
-#define CT CRFS + 1
+#define CT CRS + 1
   /* The MO field in an mbar instruction.  */
 #define MO CT
   { 0x1f, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
@@ -230,9 +294,15 @@ const struct powerpc_operand powerpc_operands[] =
 #define D CT + 1
   { 0xffff, 0, NULL, NULL, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
 
+  /* The D8 field in a D form instruction.  This is a displacement off
+     a register, and implies that the next operand is a register in
+     parentheses.  */
+#define D8 D + 1
+  { 0xff, 0, NULL, NULL, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
+
   /* The DQ field in a DQ form instruction.  This is like D, but the
      lower four bits are forced to zero. */
-#define DQ D + 1
+#define DQ D8 + 1
   { 0xfff0, 0, NULL, NULL,
     PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED | PPC_OPERAND_DQ },
 
@@ -309,8 +379,12 @@ const struct powerpc_operand powerpc_operands[] =
 #define FXM4 FXM + 1
   { 0xff, 12, insert_fxm, extract_fxm, PPC_OPERAND_OPTIONAL },
 
+  /* The IMM20 field in an LI instruction.  */
+#define IMM20 FXM4 + 1
+  { 0xfffff, PPC_OPSHIFT_INV, insert_li20, extract_li20, PPC_OPERAND_SIGNED},
+
   /* The L field in a D or X form instruction.  */
-#define L FXM4 + 1
+#define L IMM20 + 1
   { 0x1, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
 
   /* The LEV field in a POWER SVC form instruction.  */
@@ -435,6 +509,7 @@ const struct powerpc_operand powerpc_operands[] =
 #define RS RBOPT + 1
 #define RT RS
 #define RT_MASK (0x1f << 21)
+#define RD RS
   { 0x1f, 21, NULL, NULL, PPC_OPERAND_GPR },
 
   /* The RS and RT fields of the DS form stq instruction, which have
@@ -448,8 +523,47 @@ const struct powerpc_operand powerpc_operands[] =
 #define RTO RSO
   { 0x1f, 21, NULL, NULL, PPC_OPERAND_GPR | PPC_OPERAND_OPTIONAL },
 
+  /* The RX field of the SE_RR form instruction.  */
+#define RX RSO + 1
+  { 0x1f, PPC_OPSHIFT_INV, insert_rx, extract_rx, PPC_OPERAND_GPR },
+
+  /* The ARX field of the SE_RR form instruction.  */
+#define ARX RX + 1
+  { 0x1f, PPC_OPSHIFT_INV, insert_arx, extract_arx, PPC_OPERAND_GPR },
+
+  /* The RY field of the SE_RR form instruction.  */
+#define RY ARX + 1
+#define RZ RY
+  { 0x1f, PPC_OPSHIFT_INV, insert_ry, extract_ry, PPC_OPERAND_GPR },
+
+  /* The ARY field of the SE_RR form instruction.  */
+#define ARY RY + 1
+  { 0x1f, PPC_OPSHIFT_INV, insert_ary, extract_ary, PPC_OPERAND_GPR },
+
+  /* The SCLSCI8 field in a D form instruction.  */
+#define SCLSCI8 ARY + 1
+  { 0xffffffff, PPC_OPSHIFT_INV, insert_sci8, extract_sci8, 0 },
+
+  /* The SCLSCI8N field in a D form instruction.  This is the same as the
+     SCLSCI8 field, only negated.  */
+#define SCLSCI8N SCLSCI8 + 1
+  { 0xffffffff, PPC_OPSHIFT_INV, insert_sci8n, extract_sci8n,
+      PPC_OPERAND_NEGATIVE | PPC_OPERAND_SIGNED },
+
+  /* The SD field of the SD4 form instruction.  */
+#define SE_SD SCLSCI8N + 1
+  { 0xf, 8, NULL, NULL, PPC_OPERAND_PARENS },
+
+  /* The SD field of the SD4 form instruction, for halfword.  */
+#define SE_SDH SE_SD + 1
+  { 0x1e, PPC_OPSHIFT_INV, insert_sd4h, extract_sd4h, PPC_OPERAND_PARENS },
+
+  /* The SD field of the SD4 form instruction, for word.  */
+#define SE_SDW SE_SDH + 1
+  { 0x3c, PPC_OPSHIFT_INV, insert_sd4w, extract_sd4w, PPC_OPERAND_PARENS },
+
   /* The SH field in an X or M form instruction.  */
-#define SH RSO + 1
+#define SH SE_SDW + 1
 #define SH_MASK (0x1f << 11)
   /* The other UIMM field in a EVX form instruction.  */
 #define EVUIMM SH
@@ -458,7 +572,7 @@ const struct powerpc_operand powerpc_operands[] =
   /* The SH field in an MD form instruction.  This is split.  */
 #define SH6 SH + 1
 #define SH6_MASK ((0x1f << 11) | (1 << 1))
-  { 0x3f, -1, insert_sh6, extract_sh6, 0 },
+  { 0x3f, PPC_OPSHIFT_INV, insert_sh6, extract_sh6, 0 },
 
   /* The SH field of the tlbwe instruction, which is optional.  */
 #define SHO SH6 + 1
@@ -473,10 +587,15 @@ const struct powerpc_operand powerpc_operands[] =
 #define SISIGNOPT SI + 1
   { 0xffff, 0, NULL, NULL, PPC_OPERAND_SIGNED | PPC_OPERAND_SIGNOPT },
 
+  /* The SI8 field in a D form instruction.  */
+#define SI8 SISIGNOPT + 1
+  { 0xff, 0, NULL, NULL, PPC_OPERAND_SIGNED },
+
   /* The SPR field in an XFX form instruction.  This is flipped--the
      lower 5 bits are stored in the upper 5 and vice- versa.  */
-#define SPR SISIGNOPT + 1
+#define SPR SI8 + 1
 #define PMR SPR
+#define TMR SPR
 #define SPR_MASK (0x3ff << 11)
   { 0x3ff, 11, insert_spr, extract_spr, 0 },
 
@@ -499,8 +618,12 @@ const struct powerpc_operand powerpc_operands[] =
 #define T STRM
   { 0x3, 21, NULL, NULL, 0 },
 
+  /* The ESYNC field in an X (sync) form instruction.  */
+#define ESYNC STRM + 1
+  { 0xf, 16, insert_ls, NULL, PPC_OPERAND_OPTIONAL },
+
   /* The SV field in a POWER SC form instruction.  */
-#define SV STRM + 1
+#define SV ESYNC + 1
   { 0x3fff, 2, NULL, NULL, 0 },
 
   /* The TBR field in an XFX form instruction.  This is like the SPR
@@ -518,8 +641,20 @@ const struct powerpc_operand powerpc_operands[] =
 #define UI TO + 1
   { 0xffff, 0, NULL, NULL, 0 },
 
+  /* The IMM field in an SE_IM5 instruction.  */
+#define UI5 UI + 1
+  { 0x1f, 4, NULL, NULL, 0 },
+
+  /* The OIMM field in an SE_OIM5 instruction.  */
+#define OIMM5 UI5 + 1
+  { 0x1f, PPC_OPSHIFT_INV, insert_oimm, extract_oimm, PPC_OPERAND_PLUS1 },
+
+  /* The UI7 field in an SE_LI instruction.  */
+#define UI7 OIMM5 + 1
+  { 0x7f, 4, NULL, NULL, 0 },
+
   /* The VA field in a VA, VX or VXR form instruction.  */
-#define VA UI + 1
+#define VA UI7 + 1
   { 0x1f, 16, NULL, NULL, PPC_OPERAND_VR },
 
   /* The VB field in a VA, VX or VXR form instruction.  */
@@ -542,6 +677,7 @@ const struct powerpc_operand powerpc_operands[] =
 
   /* The UIMM field in a VX form instruction.  */
 #define UIMM SIMM + 1
+#define DCTL UIMM
   { 0x1f, 16, NULL, NULL, 0 },
 
   /* The SHB field in a VA form instruction.  */
@@ -567,6 +703,8 @@ const struct powerpc_operand powerpc_operands[] =
   /* PowerPC paired singles extensions.  */
   /* W bit in the pair singles instructions for x type instructions.  */
 #define PSWM WS + 1
+  /* The BO16 field in a BD8 form instruction.  */
+#define BO16 PSWM
   {  0x1, 10, 0, 0, 0 },
 
   /* IDX bits for quantization in the pair singles instructions.  */
@@ -636,28 +774,46 @@ const struct powerpc_operand powerpc_operands[] =
 #define URC URB + 1
   { 0x1f, 6, 0, 0, PPC_OPERAND_UDI },
 
+  /* The VLESIMM field in a D form instruction.  */
+#define VLESIMM URC + 1
+  { 0xffff, PPC_OPSHIFT_INV, insert_vlesi, extract_vlesi,
+      PPC_OPERAND_SIGNED | PPC_OPERAND_SIGNOPT },
+
+  /* The VLENSIMM field in a D form instruction.  */
+#define VLENSIMM VLESIMM + 1
+  { 0xffff, PPC_OPSHIFT_INV, insert_vlensi, extract_vlensi,
+      PPC_OPERAND_NEGATIVE | PPC_OPERAND_SIGNED | PPC_OPERAND_SIGNOPT },
+
+  /* The VLEUIMM field in a D form instruction.  */
+#define VLEUIMM VLENSIMM + 1
+  { 0xffff, PPC_OPSHIFT_INV, insert_vleui, extract_vleui, 0 },
+
+  /* The VLEUIMML field in a D form instruction.  */
+#define VLEUIMML VLEUIMM + 1
+  { 0xffff, PPC_OPSHIFT_INV, insert_vleil, extract_vleil, 0 },
+
   /* The XT and XS fields in an XX1 or XX3 form instruction.  This is split.  */
-#define XS6 URC + 1
+#define XS6 VLEUIMML + 1
 #define XT6 XS6
-  { 0x3f, -1, insert_xt6, extract_xt6, PPC_OPERAND_VSR },
+  { 0x3f, PPC_OPSHIFT_INV, insert_xt6, extract_xt6, PPC_OPERAND_VSR },
 
   /* The XA field in an XX3 form instruction.  This is split.  */
 #define XA6 XT6 + 1
-  { 0x3f, -1, insert_xa6, extract_xa6, PPC_OPERAND_VSR },
+  { 0x3f, PPC_OPSHIFT_INV, insert_xa6, extract_xa6, PPC_OPERAND_VSR },
 
   /* The XB field in an XX2 or XX3 form instruction.  This is split.  */
 #define XB6 XA6 + 1
-  { 0x3f, -1, insert_xb6, extract_xb6, PPC_OPERAND_VSR },
+  { 0x3f, PPC_OPSHIFT_INV, insert_xb6, extract_xb6, PPC_OPERAND_VSR },
 
   /* The XB field in an XX3 form instruction when it must be the same as
      the XA field in the instruction.  This is used in extended mnemonics
      like xvmovdp.  This is split.  */
 #define XB6S XB6 + 1
-  { 0x3f, -1, insert_xb6s, extract_xb6s, PPC_OPERAND_FAKE },
+  { 0x3f, PPC_OPSHIFT_INV, insert_xb6s, extract_xb6s, PPC_OPERAND_FAKE },
 
   /* The XC field in an XX4 form instruction.  This is split.  */
 #define XC6 XB6S + 1
-  { 0x3f, -1, insert_xc6, extract_xc6, PPC_OPERAND_VSR },
+  { 0x3f, PPC_OPSHIFT_INV, insert_xc6, extract_xc6, PPC_OPERAND_VSR },
 
   /* The DM or SHW field in an XX3 form instruction.  */
 #define DM XC6 + 1
@@ -681,6 +837,112 @@ const unsigned int num_powerpc_operands = (sizeof (powerpc_operands)
 
 /* The functions used to insert and extract complicated operands.  */
 
+/* The ARX, ARY, RX and RY operands are alternate encodings of GPRs.  */
+
+static unsigned long
+insert_arx (unsigned long insn,
+	    long value,
+	    ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+	    const char **errmsg ATTRIBUTE_UNUSED)
+{
+  if (value >= 8 && value < 24)
+    return insn | ((value - 8) & 0xf);
+  else
+    {
+      *errmsg = _("invalid register");
+      return 0;
+    }
+}
+
+static long
+extract_arx (unsigned long insn,
+	     ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+	     int *invalid ATTRIBUTE_UNUSED)
+{ 
+  return (insn & 0xf) + 8;
+}
+
+static unsigned long
+insert_ary (unsigned long insn,
+	    long value,
+	    ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+	    const char **errmsg ATTRIBUTE_UNUSED)
+{
+  if (value >= 8 && value < 24)
+    return insn | (((value - 8) & 0xf) << 4);
+  else
+    {
+      *errmsg = _("invalid register");
+      return 0;
+    }
+}
+
+static long
+extract_ary (unsigned long insn,
+	     ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+	     int *invalid ATTRIBUTE_UNUSED)
+{
+  return ((insn >> 4) & 0xf) + 8;
+}
+
+static unsigned long
+insert_rx (unsigned long insn,
+	   long value,
+	   ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+	   const char **errmsg)
+{
+  if (value >= 0 && value < 8)
+    return insn | value;
+  else if (value >= 24 && value <= 31)
+    return insn | (value - 16);
+  else
+    {
+      *errmsg = _("invalid register");
+      return 0;
+    }
+}
+
+static long
+extract_rx (unsigned long insn,
+	    ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+	    int *invalid ATTRIBUTE_UNUSED)
+{
+  int value = insn & 0xf;
+  if (value >= 0 && value < 8)
+    return value;
+  else
+    return value + 16;
+}
+
+static unsigned long
+insert_ry (unsigned long insn,
+	   long value,
+	   ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+	   const char **errmsg)
+{
+  if (value >= 0 && value < 8)
+    return insn | (value << 4);
+  else if (value >= 24 && value <= 31)
+    return insn | ((value - 16) << 4);
+  else
+    {
+      *errmsg = _("invalid register");
+      return 0;
+    }
+}
+
+static long
+extract_ry (unsigned long insn,
+	    ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+	    int *invalid ATTRIBUTE_UNUSED)
+{
+  int value = (insn >> 4) & 0xf;
+  if (value >= 0 && value < 8)
+    return value;
+  else
+    return value + 16;
+}
+
 /* The BA field in an XL form instruction when it must be the same as
    the BT field in the same instruction.  This operand is marked FAKE.
    The insertion function just copies the BT field into the BA field,
@@ -1036,6 +1298,55 @@ extract_fxm (unsigned long insn,
   return mask;
 }
 
+static unsigned long
+insert_li20 (unsigned long insn,
+	     long value,
+	     ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+	     const char **errmsg ATTRIBUTE_UNUSED)
+{
+  return insn | ((value & 0xf0000) >> 5) | ((value & 0x0f800) << 5) | (value & 0x7ff);
+}
+
+static long
+extract_li20 (unsigned long insn,
+	      ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+	      int *invalid ATTRIBUTE_UNUSED)
+{
+  long ext = ((insn & 0x4000) == 0x4000) ? 0xfff00000 : 0x00000000;
+
+  return ext
+         | (((insn >> 11) & 0xf) << 16)
+         | (((insn >> 17) & 0xf) << 12)
+         | (((insn >> 16) & 0x1) << 11)
+         | (insn & 0x7ff);
+}
+
+/* The LS field in a sync instruction that accepts 2 operands
+   Values 2 and 3 are reserved,
+     must be treated as 0 for future compatibility
+   Values 0 and 1 can be accepted, if field ESYNC is zero
+   Otherwise L = complement of ESYNC-bit2 (1<<18) */
+
+static unsigned long
+insert_ls (unsigned long insn,
+	   long value,
+	   ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+	   const char **errmsg ATTRIBUTE_UNUSED)
+{
+  unsigned long ls;
+
+  ls = (insn >> 21) & 0x03;
+  if (value == 0)
+    {
+      if (ls > 1)
+	return insn & ~(0x3 << 21);
+      return insn;
+    }
+  if ((value & 0x2) != 0)
+    return (insn & ~(0x3 << 21)) | ((value & 0xf) << 16);
+  return (insn & ~(0x3 << 21)) | (0x1 << 21) | ((value & 0xf) << 16);
+}
+
 /* The MB and ME fields in an M form instruction expressed as a single
    operand which is itself a bitmask.  The extraction function always
    marks it as invalid, since we never want to recognize an
@@ -1305,6 +1616,166 @@ insert_rbx (unsigned long insn,
   return insn | ((value & 0x1f) << 11);
 }
 
+/* The SCI8 field is made up of SCL and {U,N}I8 fields.  */
+static unsigned long
+insert_sci8 (unsigned long insn,
+	     long value,
+	     ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+	     const char **errmsg)
+{
+  int fill = 0;
+  int scale_factor = 0;
+  long ui8 = value;
+
+  if ((value & 0xff000000) == (unsigned int) value)
+    {
+      scale_factor = 3;
+      ui8 = value >> 24;
+      fill = 0;
+    }
+  else if ((value & 0xff0000) == (unsigned int) value)
+    {
+      scale_factor = 2;
+      ui8 = value >> 16;
+      fill = 0;
+    }
+  else if ((value & 0xff00) == (unsigned int) value)
+    {
+      scale_factor = 1;
+      ui8 = value >> 8;
+      fill = 0;
+    }
+  else if ((value & 0xff) == value)
+    {
+      scale_factor = 0;
+      ui8 = value;
+      fill = 0;
+    }
+  else if ((value & 0xffffff00) == 0xffffff00)
+    {
+      scale_factor = 0;
+      ui8 = (value & 0xff);
+      fill = 1;
+    }
+  else if ((value & 0xffff00ff) == 0xffff00ff)
+    {
+      scale_factor = 1;
+      ui8 = (value & 0xff00) >> 8;
+      fill = 1;
+    }
+  else if ((value & 0xff00ffff) == 0xff00ffff)
+    {
+      scale_factor = 2;
+      ui8 = (value & 0xff0000) >> 16;
+      fill = 1;
+    }
+  else if ((value & 0x00ffffff) == 0x00ffffff)
+    {
+      scale_factor = 3;
+      ui8 = (value & 0xff000000) >> 24;
+      fill = 1;
+    }
+  else
+    *errmsg = _("illegal immediate value");
+
+  return insn | (fill << 10) | (scale_factor << 8) | (ui8 & 0xff);
+}
+
+static long
+extract_sci8 (unsigned long insn,
+	      ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+	      int *invalid ATTRIBUTE_UNUSED)
+{
+  int scale_factor, fill;
+  scale_factor = (insn & 0x300) >> 8;
+  fill = (insn & 0x00000400) >> 10;
+
+  if (fill == 0)
+    return (insn & 0xff) << (scale_factor << 3);
+
+  /* Fill is one.  */
+  if (scale_factor == 0)
+    return (insn & 0xff) | 0xffffff00;
+  else if (scale_factor == 1)
+    return 0xffff00ff | ((insn & 0xff) << (scale_factor << 3));
+  else if (scale_factor == 2)
+    return 0xff00ffff | (insn & 0xff << (scale_factor << 3));
+  else /* scale_factor 3 */
+    return 0x00ffffff | (insn & 0xff << (scale_factor << 3));
+}
+
+static unsigned long
+insert_sci8n (unsigned long insn,
+	      long value,
+	      ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+	      const char **errmsg)
+{
+  insn = insert_sci8 (insn, -(value & 0xff) & 0xff, 0, errmsg);
+  /* Set the F bit.  */
+  return insn | 0x400;
+}
+
+static long
+extract_sci8n (unsigned long insn,
+	       ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+	       int *invalid ATTRIBUTE_UNUSED)
+{
+  int scale_factor;
+  scale_factor = (insn & 0x300) >> 8;
+  return -(((insn & 0xff) ^ 0x80) - 0x80) << (scale_factor << 3);
+}
+
+static unsigned long
+insert_sd4h (unsigned long insn,
+	     long value,
+	     ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+	     const char **errmsg ATTRIBUTE_UNUSED)
+{
+  return insn | ((value & 0x1e) << 7);
+}
+
+static long
+extract_sd4h (unsigned long insn,
+	      ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+	      int *invalid ATTRIBUTE_UNUSED)
+{
+  return ((insn >> 8) & 0xf) << 1;
+}
+
+static unsigned long
+insert_sd4w (unsigned long insn,
+	     long value,
+	     ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+	     const char **errmsg ATTRIBUTE_UNUSED)
+{
+  return insn | ((value & 0x3c) << 6);
+}
+
+static long
+extract_sd4w (unsigned long insn,
+	      ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+	      int *invalid ATTRIBUTE_UNUSED)
+{
+  return ((insn >> 8) & 0xf) << 2;
+}
+
+static unsigned long
+insert_oimm (unsigned long insn,
+	     long value,
+	     ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+	     const char **errmsg ATTRIBUTE_UNUSED)
+{
+  return insn | (((value - 1) & 0x1f) << 4);
+}
+
+static long
+extract_oimm (unsigned long insn,
+	      ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+	      int *invalid ATTRIBUTE_UNUSED)
+{
+  return ((insn >> 4) & 0x1f) + 1;
+}
+
 /* The SH field in an MD form instruction.  This is split.  */
 
 static unsigned long
@@ -1345,6 +1816,7 @@ extract_spr (unsigned long insn,
 }
 
 /* Some dialects have 8 SPRG registers instead of the standard 4.  */
+#define ALLOW8_SPRG (PPC_OPCODE_BOOKE | PPC_OPCODE_405 | PPC_OPCODE_VLE)
 
 static unsigned long
 insert_sprg (unsigned long insn,
@@ -1353,8 +1825,7 @@ insert_sprg (unsigned long insn,
 	     const char **errmsg)
 {
   if (value > 7
-      || (value > 3
-	  && (dialect & (PPC_OPCODE_BOOKE | PPC_OPCODE_405)) == 0))
+      || (value > 3 && (dialect & ALLOW8_SPRG) == 0))
     *errmsg = _("invalid sprg number");
 
   /* If this is mfsprg4..7 then use spr 260..263 which can be read in
@@ -1373,8 +1844,8 @@ extract_sprg (unsigned long insn,
   unsigned long val = (insn >> 16) & 0x1f;
 
   /* mfsprg can use 260..263 and 272..279.  mtsprg only uses spr 272..279
-     If not BOOKE or 405, then both use only 272..275.  */
-  if ((val - 0x10 > 3 && (dialect & (PPC_OPCODE_BOOKE | PPC_OPCODE_405)) == 0)
+     If not BOOKE, 405 or VLE, then both use only 272..275.  */
+  if ((val - 0x10 > 3 && (dialect & ALLOW8_SPRG) == 0)
       || (val - 0x10 > 7 && (insn & 0x100) != 0)
       || val <= 3
       || (val & 8) != 0)
@@ -1541,6 +2012,89 @@ extract_dm (unsigned long insn,
     *invalid = 1;
   return (value) ? 1 : 0;
 }
+/* The VLESIMM field in an I16A form instruction.  This is split.  */
+
+static unsigned long
+insert_vlesi (unsigned long insn,
+            long value,
+            ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+            const char **errmsg ATTRIBUTE_UNUSED)
+{
+  return insn | ((value & 0xf800) << 10) | (value & 0x7ff);
+}
+
+static long
+extract_vlesi (unsigned long insn,
+             ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+             int *invalid ATTRIBUTE_UNUSED)
+{
+  /* RWRW Because I don't know how to make int be 16 and long be 32 */
+  /* I can't rely on casting an int to long to get sign extension. */
+  long value = ((insn >> 10) & 0xf800) | (insn & 0x7ff);
+  if (value & 0x8000)
+    value |= 0xffff0000;
+  return value;
+}
+
+static unsigned long
+insert_vlensi (unsigned long insn,
+            long value,
+            ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+            const char **errmsg ATTRIBUTE_UNUSED)
+{
+  value = -value;
+  return insn | ((value & 0xf800) << 10) | (value & 0x7ff);
+}
+static long
+extract_vlensi (unsigned long insn,
+             ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+             int *invalid ATTRIBUTE_UNUSED)
+{
+  long value = ((insn >> 10) & 0xf800) | (insn & 0x7ff);
+  if (value & 0x8000)
+    value |= 0xffff0000;
+  *invalid = 1;
+  return -value;
+}
+
+/* The VLEUIMM field in an I16A form instruction.  This is split.  */
+
+static unsigned long
+insert_vleui (unsigned long insn,
+            long value,
+            ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+            const char **errmsg ATTRIBUTE_UNUSED)
+{
+  return insn | ((value & 0xf800) << 10) | (value & 0x7ff);
+}
+
+static long
+extract_vleui (unsigned long insn,
+             ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+             int *invalid ATTRIBUTE_UNUSED)
+{
+  return ((insn >> 10) & 0xf800) | (insn & 0x7ff);
+}
+
+/* The VLEUIMML field in an I16L form instruction.  This is split.  */
+
+static unsigned long
+insert_vleil (unsigned long insn,
+            long value,
+            ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+            const char **errmsg ATTRIBUTE_UNUSED)
+{
+  return insn | ((value & 0xf800) << 5) | (value & 0x7ff);
+}
+
+static long
+extract_vleil (unsigned long insn,
+             ppc_cpu_t dialect ATTRIBUTE_UNUSED,
+             int *invalid ATTRIBUTE_UNUSED)
+{
+  return ((insn >> 5) & 0xf800) | (insn & 0x7ff);
+}
+
 

 /* Macros used to form opcodes.  */
 
@@ -1560,6 +2114,11 @@ extract_dm (unsigned long insn,
 #define OPL(x,l) (OP (x) | ((((unsigned long)(l)) & 1) << 21))
 #define OPL_MASK OPL (0x3f,1)
 
+/* The main opcode combined with an update code in D form instruction.
+   Used for extended mnemonics for VLE memory instructions.  */
+#define OPVUP(x,vup) (OP (x) | ((((unsigned long)(vup)) & 0xff) << 8))
+#define OPVUP_MASK OPVUP (0x3f,  0xff)
+
 /* An A form instruction.  */
 #define A(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x1f) << 1) | (((unsigned long)(rc)) & 1))
 #define A_MASK A (0x3f, 0x1f, 1)
@@ -1580,6 +2139,43 @@ extract_dm (unsigned long insn,
 #define B(op, aa, lk) (OP (op) | ((((unsigned long)(aa)) & 1) << 1) | ((lk) & 1))
 #define B_MASK B (0x3f, 1, 1)
 
+/* A BD8 form instruction.  This is a 16-bit instruction.  */
+#define BD8(op, aa, lk) (((((unsigned long)(op)) & 0x3f) << 10) | (((aa) & 1) << 9) | (((lk) & 1) << 8))
+#define BD8_MASK BD8 (0x3f, 1, 1)
+
+/* Another BD8 form instruction.  This is a 16-bit instruction.  */
+#define BD8IO(op) ((((unsigned long)(op)) & 0x1f) << 11)
+#define BD8IO_MASK BD8IO (0x1f)
+
+/* A BD8 form instruction for simplified mnemonics.  */
+#define EBD8IO(op, bo, bi) (BD8IO ((op)) | ((bo) << 10) | ((bi) << 8))
+/* A mask that excludes BO32 and BI32.  */
+#define EBD8IO1_MASK 0xf800
+/* A mask that includes BO32 and excludes BI32.  */
+#define EBD8IO2_MASK 0xfc00
+/* A mask that include BO32 AND BI32.  */
+#define EBD8IO3_MASK 0xff00
+
+/* A BD15 form instruction.  */
+#define BD15(op, aa, lk) (OP (op) | ((((unsigned long)(aa)) & 0xf) << 22) | ((lk) & 1))
+#define BD15_MASK BD15 (0x3f, 0xf, 1)
+
+/* A BD15 form instruction for extended conditional branch mnemonics.  */
+#define EBD15(op, aa, bo, lk) (((op) & 0x3f) << 26) | (((aa) & 0xf) << 22) | (((bo) & 0x3) << 20) | ((lk) & 1)
+#define EBD15_MASK 0xfff00001
+
+/* A BD15 form instruction for extended conditional branch mnemonics with BI.  */
+#define EBD15BI(op, aa, bo, bi, lk) (((op) & 0x3f) << 26) \
+                                    | (((aa) & 0xf) << 22) \
+                                    | (((bo) & 0x3) << 20) \
+                                    | (((bi) & 0x3) << 16) \
+                                    | ((lk) & 1)
+#define EBD15BI_MASK  0xfff30001
+
+/* A BD24 form instruction.  */
+#define BD24(op, aa, lk) (OP (op) | ((((unsigned long)(aa)) & 1) << 25) | ((lk) & 1))
+#define BD24_MASK BD24 (0x3f, 1, 1)
+
 /* A B form instruction setting the BO field.  */
 #define BBO(op, bo, aa, lk) (B ((op), (aa), (lk)) | ((((unsigned long)(bo)) & 0x1f) << 21))
 #define BBO_MASK BBO (0x3f, 0x1f, 1, 1)
@@ -1608,6 +2204,12 @@ extract_dm (unsigned long insn,
 #define BBOYBI_MASK (BBOYCB_MASK | BI_MASK)
 #define BBOATBI_MASK (BBOAT2CB_MASK | BI_MASK)
 
+/* A VLE C form instruction.  */
+#define C_LK(x, lk) (((((unsigned long)(x)) & 0x7fff) << 1) | ((lk) & 1))
+#define C_LK_MASK C_LK(0x7fff, 1)
+#define C(x) ((((unsigned long)(x)) & 0xffff))
+#define C_MASK C(0xffff)
+
 /* An Context form instruction.  */
 #define CTX(op, xop)   (OP (op) | (((unsigned long)(xop)) & 0x7))
 #define CTX_MASK CTX(0x3f, 0x7)
@@ -1627,10 +2229,30 @@ extract_dm (unsigned long insn,
 #define EVSEL(op, xop) (OP (op) | (((unsigned long)(xop)) & 0xff) << 3)
 #define EVSEL_MASK EVSEL(0x3f, 0xff)
 
+/* An IA16 form instruction.  */
+#define IA16(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x1f) << 11)
+#define IA16_MASK IA16(0x3f, 0x1f)
+
+/* An I16A form instruction.  */
+#define I16A(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x1f) << 11)
+#define I16A_MASK I16A(0x3f, 0x1f)
+
+/* An I16L form instruction.  */
+#define I16L(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x1f) << 11)
+#define I16L_MASK I16L(0x3f, 0x1f)
+
+/* An IM7 form instruction.  */
+#define IM7(op) ((((unsigned long)(op)) & 0x1f) << 11)
+#define IM7_MASK IM7(0x1f)
+
 /* An M form instruction.  */
 #define M(op, rc) (OP (op) | ((rc) & 1))
 #define M_MASK M (0x3f, 1)
 
+/* An LI20 form instruction.  */
+#define LI20(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x1) << 15)
+#define LI20_MASK LI20(0x3f, 0x1)
+
 /* An M form instruction with the ME field specified.  */
 #define MME(op, me, rc) (M ((op), (rc)) | ((((unsigned long)(me)) & 0x1f) << 1))
 
@@ -1661,19 +2283,43 @@ extract_dm (unsigned long insn,
 #define SC(op, sa, lk) (OP (op) | ((((unsigned long)(sa)) & 1) << 1) | ((lk) & 1))
 #define SC_MASK (OP_MASK | (((unsigned long)0x3ff) << 16) | (((unsigned long)1) << 1) | 1)
 
-/* An VX form instruction.  */
+/* An SCI8 form instruction.  */
+#define SCI8(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x1f) << 11))
+#define SCI8_MASK SCI8(0x3f, 0x1f)
+
+/* An SCI8 form instruction.  */
+#define SCI8BF(op, fop, xop) (OP (op) | ((((unsigned long)(xop)) & 0x1f) << 11) | (((fop) & 7) << 23))
+#define SCI8BF_MASK SCI8BF(0x3f, 7, 0x1f)
+
+/* An SD4 form instruction.  This is a 16-bit instruction.  */
+#define SD4(op) ((((unsigned long)(op)) & 0xf) << 12) 
+#define SD4_MASK SD4(0xf)
+
+/* An SE_IM5 form instruction.  This is a 16-bit instruction.  */
+#define SE_IM5(op, xop) (((((unsigned long)(op)) & 0x3f) << 10) | (((xop) & 0x1) << 9))
+#define SE_IM5_MASK SE_IM5(0x3f, 1)
+
+/* An SE_R form instruction.  This is a 16-bit instruction.  */
+#define SE_R(op, xop) (((((unsigned long)(op)) & 0x3f) << 10) | (((xop) & 0x3f) << 4))
+#define SE_R_MASK SE_R(0x3f, 0x3f)
+
+/* An SE_RR form instruction.  This is a 16-bit instruction.  */
+#define SE_RR(op, xop) (((((unsigned long)(op)) & 0x3f) << 10) | (((xop) & 0x3) << 8))
+#define SE_RR_MASK SE_RR(0x3f, 3)
+
+/* A VX form instruction.  */
 #define VX(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x7ff))
 
 /* The mask for an VX form instruction.  */
 #define VX_MASK	VX(0x3f, 0x7ff)
 
-/* An VA form instruction.  */
+/* A VA form instruction.  */
 #define VXA(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x03f))
 
 /* The mask for an VA form instruction.  */
 #define VXA_MASK VXA(0x3f, 0x3f)
 
-/* An VXR form instruction.  */
+/* A VXR form instruction.  */
 #define VXR(op, xop, rc) (OP (op) | (((rc) & 1) << 10) | (((unsigned long)(xop)) & 0x3ff))
 
 /* The mask for a VXR form instruction.  */
@@ -1682,6 +2328,12 @@ extract_dm (unsigned long insn,
 /* An X form instruction.  */
 #define X(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x3ff) << 1))
 
+/* An EX form instruction.  */
+#define EX(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x7ff))
+
+/* The mask for an EX form instruction.  */
+#define EX_MASK EX (0x3f, 0x7ff)
+
 /* An XX2 form instruction.  */
 #define XX2(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x1ff) << 2))
 
@@ -1804,6 +2456,9 @@ extract_dm (unsigned long insn,
 /* An X form sync instruction with everything filled in except the LS field.  */
 #define XSYNC_MASK (0xff9fffff)
 
+/* An X form sync instruction with everything filled in except the L and E fields.  */
+#define XSYNCLE_MASK (0xff90ffff)
+
 /* An X_MASK, but with the EH bit clear.  */
 #define XEH_MASK (X_MASK & ~((unsigned long )1))
 
@@ -1950,6 +2605,16 @@ extract_dm (unsigned long insn,
 
 #define BOU	(0x14)
 
+/* The BO16 encodings used in extended VLE conditional branch mnemonics.  */
+#define BO16F   (0x0)
+#define BO16T   (0x1)
+
+/* The BO32 encodings used in extended VLE conditional branch mnemonics.  */
+#define BO32F   (0x0)
+#define BO32T   (0x1)
+#define BO32DNZ (0x2)
+#define BO32DZ  (0x3)
+
 /* The BI condition bit encodings used in extended conditional branch
    mnemonics.  */
 #define CBLT	(0)
@@ -1998,6 +2663,7 @@ extract_dm (unsigned long insn,
 #define PPC860	PPC
 #define PPCPS	PPC_OPCODE_PPCPS
 #define PPCVEC	PPC_OPCODE_ALTIVEC
+#define PPCVEC2	PPC_OPCODE_ALTIVEC2
 #define PPCVSX	PPC_OPCODE_VSX
 #define POWER	PPC_OPCODE_POWER
 #define POWER2	PPC_OPCODE_POWER | PPC_OPCODE_POWER2
@@ -2009,20 +2675,23 @@ extract_dm (unsigned long insn,
 #define MFDEC1	PPC_OPCODE_POWER
 #define MFDEC2	PPC_OPCODE_PPC | PPC_OPCODE_601 | PPC_OPCODE_BOOKE | PPC_OPCODE_TITAN
 #define BOOKE	PPC_OPCODE_BOOKE
-#define NO371	PPC_OPCODE_BOOKE | PPC_OPCODE_EFS
+#define NO371	PPC_OPCODE_BOOKE | PPC_OPCODE_PPCPS | PPC_OPCODE_EFS | PPC_OPCODE_VLE
 #define PPCE300 PPC_OPCODE_E300
-#define PPCSPE	PPC_OPCODE_SPE
-#define PPCISEL PPC_OPCODE_ISEL
-#define PPCEFS	PPC_OPCODE_EFS
+#define PPCSPE	PPC_OPCODE_SPE | PPC_OPCODE_VLE
+#define PPCISEL PPC_OPCODE_ISEL | PPC_OPCODE_VLE
+#define PPCEFS	PPC_OPCODE_EFS | PPC_OPCODE_VLE
 #define PPCBRLK PPC_OPCODE_BRLOCK
 #define PPCPMR	PPC_OPCODE_PMR
+#define PPCTMR  PPC_OPCODE_TMR
 #define PPCCHLK PPC_OPCODE_CACHELCK
 #define PPCRFMCI	PPC_OPCODE_RFMCI
 #define E500MC  PPC_OPCODE_E500MC
 #define PPCA2	PPC_OPCODE_A2
 #define TITAN   PPC_OPCODE_TITAN  
-#define MULHW   PPC_OPCODE_405 | PPC_OPCODE_440 | TITAN
+#define MULHW   PPC_OPCODE_405 | PPC_OPCODE_440 | TITAN | PPC_OPCODE_VLE
 #define E500	PPC_OPCODE_E500
+#define E6500	PPC_OPCODE_E6500
+#define PPCVLE  PPC_OPCODE_VLE
 

 /* The opcode table.
 
@@ -2096,54 +2765,54 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"ti",		OP(3),		OP_MASK,     PWRCOM,	PPCNONE,	{TO, RA, SI}},
 
 {"ps_cmpu0",	X  (4,	 0), X_MASK|(3<<21), PPCPS,	PPCNONE,	{BF, FRA, FRB}},
-{"vaddubm",	VX (4,	 0),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vmaxub",	VX (4,	 2),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vrlb",	VX (4,	 4),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vcmpequb",	VXR(4,	 6,0),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vmuloub",	VX (4,	 8),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vaddfp",	VX (4,	10),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
+{"vaddubm",	VX (4,	 0),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vmaxub",	VX (4,	 2),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vrlb",	VX (4,	 4),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vcmpequb",	VXR(4,	 6,0),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vmuloub",	VX (4,	 8),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vaddfp",	VX (4,	10),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
 {"psq_lx",	XW (4,	 6,0),	XW_MASK,     PPCPS,	PPCNONE,	{FRT,RA,RB,PSWM,PSQM}},
-{"vmrghb",	VX (4,	12),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
+{"vmrghb",	VX (4,	12),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
 {"psq_stx",	XW (4,	 7,0),	XW_MASK,     PPCPS,	PPCNONE,	{FRS,RA,RB,PSWM,PSQM}},
-{"vpkuhum",	VX (4,	14),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"mulhhwu",	XRC(4,	 8,0),	X_MASK,      MULHW,	PPCNONE,	{RT, RA, RB}},
-{"mulhhwu.",	XRC(4,	 8,1),	X_MASK,      MULHW, 	PPCNONE,	{RT, RA, RB}},
+{"vpkuhum",	VX (4,	14),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"mulhhwu",	XRC(4,	 8,0),	X_MASK,      MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"mulhhwu.",	XRC(4,	 8,1),	X_MASK,      MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"ps_sum0",	A  (4,	10,0),	A_MASK,      PPCPS,	PPCNONE,	{FRT, FRA, FRC, FRB}},
 {"ps_sum0.",	A  (4,	10,1),	A_MASK,      PPCPS,	PPCNONE,	{FRT, FRA, FRC, FRB}},
 {"ps_sum1",	A  (4,	11,0),	A_MASK,      PPCPS,	PPCNONE,	{FRT, FRA, FRC, FRB}},
 {"ps_sum1.",	A  (4,	11,1),	A_MASK,      PPCPS,	PPCNONE,	{FRT, FRA, FRC, FRB}},
 {"ps_muls0",	A  (4,	12,0),	AFRB_MASK,   PPCPS,	PPCNONE,	{FRT, FRA, FRC}},
-{"machhwu",	XO (4,	12,0,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
+{"machhwu",	XO (4,	12,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"ps_muls0.",	A  (4,	12,1),	AFRB_MASK,   PPCPS,	PPCNONE,	{FRT, FRA, FRC}},
-{"machhwu.",	XO (4,	12,0,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
+{"machhwu.",	XO (4,	12,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"ps_muls1",	A  (4,	13,0),	AFRB_MASK,   PPCPS,	PPCNONE,	{FRT, FRA, FRC}},
 {"ps_muls1.",	A  (4,	13,1),	AFRB_MASK,   PPCPS,	PPCNONE,	{FRT, FRA, FRC}},
 {"ps_madds0",	A  (4,	14,0),	A_MASK,      PPCPS,	PPCNONE,	{FRT, FRA, FRC, FRB}},
 {"ps_madds0.",	A  (4,	14,1),	A_MASK,      PPCPS,	PPCNONE,	{FRT, FRA, FRC, FRB}},
 {"ps_madds1",	A  (4,	15,0),	A_MASK,      PPCPS,	PPCNONE,	{FRT, FRA, FRC, FRB}},
 {"ps_madds1.",	A  (4,	15,1),	A_MASK,      PPCPS,	PPCNONE,	{FRT, FRA, FRC, FRB}},
-{"vmhaddshs",	VXA(4,	32),	VXA_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB, VC}},
-{"vmhraddshs",	VXA(4,	33),	VXA_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB, VC}},
-{"vmladduhm",	VXA(4,	34),	VXA_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB, VC}},
+{"vmhaddshs",	VXA(4,	32),	VXA_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB, VC}},
+{"vmhraddshs",	VXA(4,	33),	VXA_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB, VC}},
+{"vmladduhm",	VXA(4,	34),	VXA_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB, VC}},
 {"ps_div",	A  (4,	18,0),	AFRC_MASK,   PPCPS,	PPCNONE,	{FRT, FRA, FRB}},
-{"vmsumubm",	VXA(4,	36),	VXA_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB, VC}},
+{"vmsumubm",	VXA(4,	36),	VXA_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB, VC}},
 {"ps_div.",	A  (4,	18,1),	AFRC_MASK,   PPCPS,	PPCNONE,	{FRT, FRA, FRB}},
-{"vmsummbm",	VXA(4,	37),	VXA_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB, VC}},
-{"vmsumuhm",	VXA(4,	38),	VXA_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB, VC}},
-{"vmsumuhs",	VXA(4,	39),	VXA_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB, VC}},
+{"vmsummbm",	VXA(4,	37),	VXA_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB, VC}},
+{"vmsumuhm",	VXA(4,	38),	VXA_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB, VC}},
+{"vmsumuhs",	VXA(4,	39),	VXA_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB, VC}},
 {"ps_sub",	A  (4,	20,0),	AFRC_MASK,   PPCPS,	PPCNONE,	{FRT, FRA, FRB}},
-{"vmsumshm",	VXA(4,	40),	VXA_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB, VC}},
+{"vmsumshm",	VXA(4,	40),	VXA_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB, VC}},
 {"ps_sub.",	A  (4,	20,1),	AFRC_MASK,   PPCPS,	PPCNONE,	{FRT, FRA, FRB}},
-{"vmsumshs",	VXA(4,	41),	VXA_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB, VC}},
+{"vmsumshs",	VXA(4,	41),	VXA_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB, VC}},
 {"ps_add",	A  (4,	21,0),	AFRC_MASK,   PPCPS,	PPCNONE,	{FRT, FRA, FRB}},
-{"vsel",	VXA(4,	42),	VXA_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB, VC}},
+{"vsel",	VXA(4,	42),	VXA_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB, VC}},
 {"ps_add.",	A  (4,	21,1),	AFRC_MASK,   PPCPS,	PPCNONE,	{FRT, FRA, FRB}},
-{"vperm",	VXA(4,	43),	VXA_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB, VC}},
-{"vsldoi",	VXA(4,	44),	VXA_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB, SHB}},
+{"vperm",	VXA(4,	43),	VXA_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB, VC}},
+{"vsldoi",	VXA(4,	44),	VXA_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB, SHB}},
 {"ps_sel",	A  (4,	23,0),	A_MASK,      PPCPS,	PPCNONE,	{FRT, FRA, FRC, FRB}},
-{"vmaddfp",	VXA(4,	46),	VXA_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VC, VB}},
+{"vmaddfp",	VXA(4,	46),	VXA_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VC, VB}},
 {"ps_sel.",	A  (4,	23,1),	A_MASK,      PPCPS,	PPCNONE,	{FRT, FRA, FRC, FRB}},
-{"vnmsubfp",	VXA(4,	47),	VXA_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VC, VB}},
+{"vnmsubfp",	VXA(4,	47),	VXA_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VC, VB}},
 {"ps_res",	A  (4,	24,0), AFRAFRC_MASK, PPCPS,	PPCNONE,	{FRT, FRB}},
 {"ps_res.",	A  (4,	24,1), AFRAFRC_MASK, PPCPS,	PPCNONE,	{FRT, FRB}},
 {"ps_mul",	A  (4,	25,0), AFRB_MASK,    PPCPS,	PPCNONE,	{FRT, FRA, FRC}},
@@ -2159,533 +2828,536 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"ps_nmadd",	A  (4,	31,0),	A_MASK,      PPCPS,	PPCNONE,	{FRT, FRA, FRC, FRB}},
 {"ps_nmadd.",	A  (4,	31,1),	A_MASK,      PPCPS,	PPCNONE,	{FRT, FRA, FRC, FRB}},
 {"ps_cmpo0",	X  (4,	32), X_MASK|(3<<21), PPCPS,	PPCNONE,	{BF, FRA, FRB}},
-{"vadduhm",	VX (4,	64),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vmaxuh",	VX (4,	66),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vrlh",	VX (4,	68),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vcmpequh",	VXR(4,	70,0),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vmulouh",	VX (4,	72),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vsubfp",	VX (4,	74),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
+{"vadduhm",	VX (4,	64),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vmaxuh",	VX (4,	66),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vrlh",	VX (4,	68),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vcmpequh",	VXR(4,	70,0),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vmulouh",	VX (4,	72),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vsubfp",	VX (4,	74),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
 {"psq_lux",	XW (4,	38,0),	XW_MASK,     PPCPS,	PPCNONE,	{FRT,RA,RB,PSWM,PSQM}},
-{"vmrghh",	VX (4,	76),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
+{"vmrghh",	VX (4,	76),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
 {"psq_stux",	XW (4,	39,0),	XW_MASK,     PPCPS,	PPCNONE,	{FRS,RA,RB,PSWM,PSQM}},
-{"vpkuwum",	VX (4,	78),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
+{"vpkuwum",	VX (4,	78),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
 {"ps_neg",	XRC(4,	40,0),	XRA_MASK,    PPCPS,	PPCNONE,	{FRT, FRB}},
-{"mulhhw",	XRC(4,	40,0),	X_MASK,      MULHW, 	PPCNONE,	{RT, RA, RB}},
+{"mulhhw",	XRC(4,	40,0),	X_MASK,      MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"ps_neg.",	XRC(4,	40,1),	XRA_MASK,    PPCPS,	PPCNONE,	{FRT, FRB}},
-{"mulhhw.",	XRC(4,	40,1),	X_MASK,      MULHW, 	PPCNONE,	{RT, RA, RB}},
-{"machhw",	XO (4,	44,0,0),XO_MASK,     MULHW, 	PPCNONE,	{RT, RA, RB}},
-{"machhw.",	XO (4,	44,0,1),XO_MASK,     MULHW, 	PPCNONE,	{RT, RA, RB}},
-{"nmachhw",	XO (4,	46,0,0),XO_MASK,     MULHW, 	PPCNONE,	{RT, RA, RB}},
-{"nmachhw.",	XO (4,	46,0,1),XO_MASK,     MULHW, 	PPCNONE,	{RT, RA, RB}},
+{"mulhhw.",	XRC(4,	40,1),	X_MASK,      MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"machhw",	XO (4,	44,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"machhw.",	XO (4,	44,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"nmachhw",	XO (4,	46,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"nmachhw.",	XO (4,	46,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"ps_cmpu1",	X  (4,	64), X_MASK|(3<<21), PPCPS,	PPCNONE,	{BF, FRA, FRB}},
-{"vadduwm",	VX (4,	128),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vmaxuw",	VX (4,	130),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vrlw",	VX (4,	132),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vcmpequw",	VXR(4,	134,0), VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vmrghw",	VX (4,	140),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vpkuhus",	VX (4,	142),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
+{"vadduwm",	VX (4,	128),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vmaxuw",	VX (4,	130),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vrlw",	VX (4,	132),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vcmpequw",	VXR(4,	134,0), VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vmrghw",	VX (4,	140),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vpkuhus",	VX (4,	142),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
 {"ps_mr",	XRC(4,	72,0),	XRA_MASK,    PPCPS,	PPCNONE,	{FRT, FRB}},
 {"ps_mr.",	XRC(4,	72,1),	XRA_MASK,    PPCPS,	PPCNONE,	{FRT, FRB}},
-{"machhwsu",	XO (4,	76,0,0),XO_MASK,     MULHW, 	PPCNONE,	{RT, RA, RB}},
-{"machhwsu.",	XO (4,	76,0,1),XO_MASK,     MULHW, 	PPCNONE,	{RT, RA, RB}},
+{"machhwsu",	XO (4,	76,0,0),XO_MASK,     MULHW|PPCVLE,  PPCNONE,	{RT, RA, RB}},
+{"machhwsu.",	XO (4,	76,0,1),XO_MASK,     MULHW|PPCVLE,  PPCNONE,	{RT, RA, RB}},
 {"ps_cmpo1",	X  (4,	96), X_MASK|(3<<21), PPCPS,	PPCNONE,	{BF, FRA, FRB}},
-{"vcmpeqfp",	VXR(4, 198,0),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vpkuwus",	VX (4, 206),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"machhws",	XO (4, 108,0,0),XO_MASK,     MULHW, 	PPCNONE,	{RT, RA, RB}},
-{"machhws.",	XO (4, 108,0,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"nmachhws",	XO (4, 110,0,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"nmachhws.",	XO (4, 110,0,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"vmaxsb",	VX (4, 258),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vslb",	VX (4, 260),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vmulosb",	VX (4, 264),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vrefp",	VX (4, 266),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VB}},
-{"vmrglb",	VX (4, 268),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vpkshus",	VX (4, 270),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
+{"vabsdub",	VX (4, 192),	VX_MASK,     PPCVEC2,	PPCNONE,	{VD, VA, VB}},
+{"vcmpeqfp",	VXR(4, 198,0),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vpkuwus",	VX (4, 206),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"machhws",	XO (4, 108,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"machhws.",	XO (4, 108,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"nmachhws",	XO (4, 110,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"nmachhws.",	XO (4, 110,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"vabsduh",	VX (4, 256),	VX_MASK,     PPCVEC2,	PPCNONE,	{VD, VA, VB}},
+{"vmaxsb",	VX (4, 258),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vslb",	VX (4, 260),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vmulosb",	VX (4, 264),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vrefp",	VX (4, 266),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
+{"vmrglb",	VX (4, 268),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vpkshus",	VX (4, 270),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
 {"ps_nabs",	XRC(4, 136,0),	XRA_MASK,    PPCPS,	PPCNONE,	{FRT, FRB}},
-{"mulchwu",	XRC(4, 136,0),	X_MASK,      MULHW,	PPCNONE,	{RT, RA, RB}},
+{"mulchwu",	XRC(4, 136,0),	X_MASK,      MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"ps_nabs.",	XRC(4, 136,1),	XRA_MASK,    PPCPS,	PPCNONE,	{FRT, FRB}},
-{"mulchwu.",	XRC(4, 136,1),	X_MASK,      MULHW,	PPCNONE,	{RT, RA, RB}},
-{"macchwu",	XO (4, 140,0,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"macchwu.",	XO (4, 140,0,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"vmaxsh",	VX (4, 322),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vslh",	VX (4, 324),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vmulosh",	VX (4, 328),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vrsqrtefp",	VX (4, 330),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VB}},
-{"vmrglh",	VX (4, 332),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vpkswus",	VX (4, 334),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
+{"mulchwu.",	XRC(4, 136,1),	X_MASK,      MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"macchwu",	XO (4, 140,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"macchwu.",	XO (4, 140,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"vabsduw",	VX (4, 320),	VX_MASK,     PPCVEC2,	PPCNONE,	{VD, VA, VB}},
+{"vmaxsh",	VX (4, 322),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vslh",	VX (4, 324),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vmulosh",	VX (4, 328),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vrsqrtefp",	VX (4, 330),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
+{"vmrglh",	VX (4, 332),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vpkswus",	VX (4, 334),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
 {"mulchw",	XRC(4, 168,0),	X_MASK,      MULHW,	PPCNONE,	{RT, RA, RB}},
 {"mulchw.",	XRC(4, 168,1),	X_MASK,      MULHW,	PPCNONE,	{RT, RA, RB}},
 {"macchw",	XO (4, 172,0,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
 {"macchw.",	XO (4, 172,0,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
 {"nmacchw",	XO (4, 174,0,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
 {"nmacchw.",	XO (4, 174,0,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"vaddcuw",	VX (4, 384),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vmaxsw",	VX (4, 386),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vslw",	VX (4, 388),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vexptefp",	VX (4, 394),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VB}},
-{"vmrglw",	VX (4, 396),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vpkshss",	VX (4, 398),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"macchwsu",	XO (4, 204,0,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"macchwsu.",	XO (4, 204,0,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"vsl",		VX (4, 452),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vcmpgefp",	VXR(4, 454,0),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vlogefp",	VX (4, 458),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VB}},
-{"vpkswss",	VX (4, 462),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"macchws",	XO (4, 236,0,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"macchws.",	XO (4, 236,0,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"nmacchws",	XO (4, 238,0,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"nmacchws.",	XO (4, 238,0,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"evaddw",	VX (4, 512),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vaddubs",	VX (4, 512),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evaddiw",	VX (4, 514),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RB, UIMM}},
-{"vminub",	VX (4, 514),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evsubfw",	VX (4, 516),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
+{"vaddcuw",	VX (4, 384),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vmaxsw",	VX (4, 386),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vslw",	VX (4, 388),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vexptefp",	VX (4, 394),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
+{"vmrglw",	VX (4, 396),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vpkshss",	VX (4, 398),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"macchwsu",	XO (4, 204,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"macchwsu.",	XO (4, 204,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"vsl",		VX (4, 452),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vcmpgefp",	VXR(4, 454,0),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vlogefp",	VX (4, 458),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
+{"vpkswss",	VX (4, 462),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"macchws",	XO (4, 236,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"macchws.",	XO (4, 236,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"nmacchws",	XO (4, 238,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"nmacchws.",	XO (4, 238,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"evaddw",	VX (4, 512),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vaddubs",	VX (4, 512),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evaddiw",	VX (4, 514),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RB, UIMM}},
+{"vminub",	VX (4, 514),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evsubfw",	VX (4, 516),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
 {"evsubw",	VX (4, 516),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RB, RA}},
-{"vsrb",	VX (4, 516),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evsubifw",	VX (4, 518),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, UIMM, RB}},
+{"vsrb",	VX (4, 516),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evsubifw",	VX (4, 518),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, UIMM, RB}},
 {"evsubiw",	VX (4, 518),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RB, UIMM}},
-{"vcmpgtub",	VXR(4, 518,0),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evabs",	VX (4, 520),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA}},
-{"vmuleub",	VX (4, 520),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evneg",	VX (4, 521),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA}},
-{"evextsb",	VX (4, 522),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA}},
-{"vrfin",	VX (4, 522),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VB}},
-{"evextsh",	VX (4, 523),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA}},
-{"evrndw",	VX (4, 524),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA}},
-{"vspltb",	VX (4, 524),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VB, UIMM}},
-{"evcntlzw",	VX (4, 525),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA}},
-{"evcntlsw",	VX (4, 526),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA}},
-{"vupkhsb",	VX (4, 526),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VB}},
-{"brinc",	VX (4, 527),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
+{"vcmpgtub",	VXR(4, 518,0),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evabs",	VX (4, 520),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
+{"vmuleub",	VX (4, 520),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evneg",	VX (4, 521),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
+{"evextsb",	VX (4, 522),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
+{"vrfin",	VX (4, 522),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
+{"evextsh",	VX (4, 523),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
+{"evrndw",	VX (4, 524),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
+{"vspltb",	VX (4, 524),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB, UIMM}},
+{"evcntlzw",	VX (4, 525),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
+{"evcntlsw",	VX (4, 526),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
+{"vupkhsb",	VX (4, 526),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
+{"brinc",	VX (4, 527),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
 {"ps_abs",	XRC(4, 264,0),	XRA_MASK,    PPCPS,	PPCNONE,	{FRT, FRB}},
 {"ps_abs.",	XRC(4, 264,1),	XRA_MASK,    PPCPS,	PPCNONE,	{FRT, FRB}},
-{"evand",	VX (4, 529),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evandc",	VX (4, 530),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evxor",	VX (4, 534),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmr",	VX (4, 535),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, BBA}},
-{"evor",	VX (4, 535),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evnor",	VX (4, 536),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evnot",	VX (4, 536),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, BBA}},
+{"evand",	VX (4, 529),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evandc",	VX (4, 530),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evxor",	VX (4, 534),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmr",	VX (4, 535),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, BBA}},
+{"evor",	VX (4, 535),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evnor",	VX (4, 536),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evnot",	VX (4, 536),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, BBA}},
 {"get",		APU(4, 268,0),	APU_RA_MASK, PPC405,	PPCNONE,	{RT, FSL}},
-{"eveqv",	VX (4, 537),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evorc",	VX (4, 539),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evnand",	VX (4, 542),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evsrwu",	VX (4, 544),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evsrws",	VX (4, 545),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evsrwiu",	VX (4, 546),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, EVUIMM}},
-{"evsrwis",	VX (4, 547),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, EVUIMM}},
-{"evslw",	VX (4, 548),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evslwi",	VX (4, 550),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, EVUIMM}},
-{"evrlw",	VX (4, 552),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evsplati",	VX (4, 553),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, SIMM}},
-{"evrlwi",	VX (4, 554),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, EVUIMM}},
-{"evsplatfi",	VX (4, 555),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, SIMM}},
-{"evmergehi",	VX (4, 556),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmergelo",	VX (4, 557),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmergehilo",	VX (4, 558),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmergelohi",	VX (4, 559),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evcmpgtu",	VX (4, 560),	VX_MASK,     PPCSPE,	PPCNONE,	{CRFD, RA, RB}},
-{"evcmpgts",	VX (4, 561),	VX_MASK,     PPCSPE,	PPCNONE,	{CRFD, RA, RB}},
-{"evcmpltu",	VX (4, 562),	VX_MASK,     PPCSPE,	PPCNONE,	{CRFD, RA, RB}},
-{"evcmplts",	VX (4, 563),	VX_MASK,     PPCSPE,	PPCNONE,	{CRFD, RA, RB}},
-{"evcmpeq",	VX (4, 564),	VX_MASK,     PPCSPE,	PPCNONE,	{CRFD, RA, RB}},
+{"eveqv",	VX (4, 537),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evorc",	VX (4, 539),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evnand",	VX (4, 542),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evsrwu",	VX (4, 544),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evsrws",	VX (4, 545),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evsrwiu",	VX (4, 546),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, EVUIMM}},
+{"evsrwis",	VX (4, 547),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, EVUIMM}},
+{"evslw",	VX (4, 548),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evslwi",	VX (4, 550),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, EVUIMM}},
+{"evrlw",	VX (4, 552),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evsplati",	VX (4, 553),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, SIMM}},
+{"evrlwi",	VX (4, 554),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, EVUIMM}},
+{"evsplatfi",	VX (4, 555),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, SIMM}},
+{"evmergehi",	VX (4, 556),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmergelo",	VX (4, 557),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmergehilo",	VX (4, 558),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmergelohi",	VX (4, 559),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evcmpgtu",	VX (4, 560),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
+{"evcmpgts",	VX (4, 561),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
+{"evcmpltu",	VX (4, 562),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
+{"evcmplts",	VX (4, 563),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
+{"evcmpeq",	VX (4, 564),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
 {"cget",	APU(4, 284,0),	APU_RA_MASK, PPC405,	PPCNONE,	{RT, FSL}},
-{"vadduhs",	VX (4, 576),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vminuh",	VX (4, 578),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vsrh",	VX (4, 580),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vcmpgtuh",	VXR(4, 582,0),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vmuleuh",	VX (4, 584),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vrfiz",	VX (4, 586),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VB}},
-{"vsplth",	VX (4, 588),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VB, UIMM}},
-{"vupkhsh",	VX (4, 590),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VB}},
+{"vadduhs",	VX (4, 576),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vminuh",	VX (4, 578),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vsrh",	VX (4, 580),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vcmpgtuh",	VXR(4, 582,0),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vmuleuh",	VX (4, 584),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vrfiz",	VX (4, 586),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
+{"vsplth",	VX (4, 588),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB, UIMM}},
+{"vupkhsh",	VX (4, 590),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
 {"nget",	APU(4, 300,0),	APU_RA_MASK, PPC405,	PPCNONE,	{RT, FSL}},
-{"evsel",	EVSEL(4,79),	EVSEL_MASK,  PPCSPE,	PPCNONE,	{RS, RA, RB, CRFS}},
+{"evsel",	EVSEL(4,79),	EVSEL_MASK,  PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB, CRFS}},
 {"ncget",	APU(4, 316,0),	APU_RA_MASK, PPC405,	PPCNONE,	{RT, FSL}},
-{"evfsadd",	VX (4, 640),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vadduws",	VX (4, 640),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evfssub",	VX (4, 641),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vminuw",	VX (4, 642),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evfsabs",	VX (4, 644),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA}},
-{"vsrw",	VX (4, 644),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evfsnabs",	VX (4, 645),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA}},
-{"evfsneg",	VX (4, 646),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA}},
-{"vcmpgtuw",	VXR(4, 646,0),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evfsmul",	VX (4, 648),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evfsdiv",	VX (4, 649),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vrfip",	VX (4, 650),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VB}},
-{"evfscmpgt",	VX (4, 652),	VX_MASK,     PPCSPE,	PPCNONE,	{CRFD, RA, RB}},
-{"vspltw",	VX (4, 652),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VB, UIMM}},
-{"evfscmplt",	VX (4, 653),	VX_MASK,     PPCSPE,	PPCNONE,	{CRFD, RA, RB}},
-{"evfscmpeq",	VX (4, 654),	VX_MASK,     PPCSPE,	PPCNONE,	{CRFD, RA, RB}},
-{"vupklsb",	VX (4, 654),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VB}},
-{"evfscfui",	VX (4, 656),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RB}},
-{"evfscfsi",	VX (4, 657),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RB}},
-{"evfscfuf",	VX (4, 658),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RB}},
-{"evfscfsf",	VX (4, 659),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RB}},
-{"evfsctui",	VX (4, 660),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RB}},
-{"evfsctsi",	VX (4, 661),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RB}},
-{"evfsctuf",	VX (4, 662),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RB}},
-{"evfsctsf",	VX (4, 663),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RB}},
-{"evfsctuiz",	VX (4, 664),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RB}},
+{"evfsadd",	VX (4, 640),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vadduws",	VX (4, 640),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evfssub",	VX (4, 641),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vminuw",	VX (4, 642),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evfsabs",	VX (4, 644),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
+{"vsrw",	VX (4, 644),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evfsnabs",	VX (4, 645),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
+{"evfsneg",	VX (4, 646),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
+{"vcmpgtuw",	VXR(4, 646,0),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evfsmul",	VX (4, 648),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evfsdiv",	VX (4, 649),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vrfip",	VX (4, 650),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
+{"evfscmpgt",	VX (4, 652),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
+{"vspltw",	VX (4, 652),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB, UIMM}},
+{"evfscmplt",	VX (4, 653),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
+{"evfscmpeq",	VX (4, 654),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
+{"vupklsb",	VX (4, 654),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
+{"evfscfui",	VX (4, 656),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RB}},
+{"evfscfsi",	VX (4, 657),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RB}},
+{"evfscfuf",	VX (4, 658),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RB}},
+{"evfscfsf",	VX (4, 659),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RB}},
+{"evfsctui",	VX (4, 660),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RB}},
+{"evfsctsi",	VX (4, 661),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RB}},
+{"evfsctuf",	VX (4, 662),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RB}},
+{"evfsctsf",	VX (4, 663),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RB}},
+{"evfsctuiz",	VX (4, 664),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RB}},
 {"put",		APU(4, 332,0),	APU_RT_MASK, PPC405,	PPCNONE,	{RA, FSL}},
-{"evfsctsiz",	VX (4, 666),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RB}},
-{"evfststgt",	VX (4, 668),	VX_MASK,     PPCSPE,	PPCNONE,	{CRFD, RA, RB}},
-{"evfststlt",	VX (4, 669),	VX_MASK,     PPCSPE,	PPCNONE,	{CRFD, RA, RB}},
-{"evfststeq",	VX (4, 670),	VX_MASK,     PPCSPE,	PPCNONE,	{CRFD, RA, RB}},
+{"evfsctsiz",	VX (4, 666),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RB}},
+{"evfststgt",	VX (4, 668),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
+{"evfststlt",	VX (4, 669),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
+{"evfststeq",	VX (4, 670),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
 {"cput",	APU(4, 348,0),	APU_RT_MASK, PPC405,	PPCNONE,	{RA, FSL}},
-{"efsadd",	VX (4, 704),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RA, RB}},
-{"efssub",	VX (4, 705),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RA, RB}},
-{"efsabs",	VX (4, 708),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RA}},
-{"vsr",		VX (4, 708),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"efsnabs",	VX (4, 709),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RA}},
-{"efsneg",	VX (4, 710),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RA}},
-{"vcmpgtfp",	VXR(4, 710,0),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"efsmul",	VX (4, 712),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RA, RB}},
-{"efsdiv",	VX (4, 713),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RA, RB}},
-{"vrfim",	VX (4, 714),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VB}},
-{"efscmpgt",	VX (4, 716),	VX_MASK,     PPCEFS,	PPCNONE,	{CRFD, RA, RB}},
-{"efscmplt",	VX (4, 717),	VX_MASK,     PPCEFS,	PPCNONE,	{CRFD, RA, RB}},
-{"efscmpeq",	VX (4, 718),	VX_MASK,     PPCEFS,	PPCNONE,	{CRFD, RA, RB}},
-{"vupklsh",	VX (4, 718),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VB}},
-{"efscfd",	VX (4, 719),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efscfui",	VX (4, 720),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efscfsi",	VX (4, 721),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efscfuf",	VX (4, 722),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efscfsf",	VX (4, 723),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efsctui",	VX (4, 724),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efsctsi",	VX (4, 725),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efsctuf",	VX (4, 726),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efsctsf",	VX (4, 727),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efsctuiz",	VX (4, 728),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
+{"efsadd",	VX (4, 704),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"efssub",	VX (4, 705),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"efsabs",	VX (4, 708),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RA}},
+{"vsr",		VX (4, 708),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"efsnabs",	VX (4, 709),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RA}},
+{"efsneg",	VX (4, 710),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RA}},
+{"vcmpgtfp",	VXR(4, 710,0),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"efsmul",	VX (4, 712),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"efsdiv",	VX (4, 713),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vrfim",	VX (4, 714),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
+{"efscmpgt",	VX (4, 716),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
+{"efscmplt",	VX (4, 717),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
+{"efscmpeq",	VX (4, 718),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
+{"vupklsh",	VX (4, 718),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
+{"efscfd",	VX (4, 719),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efscfui",	VX (4, 720),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efscfsi",	VX (4, 721),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efscfuf",	VX (4, 722),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efscfsf",	VX (4, 723),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efsctui",	VX (4, 724),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efsctsi",	VX (4, 725),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efsctuf",	VX (4, 726),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efsctsf",	VX (4, 727),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efsctuiz",	VX (4, 728),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
 {"nput",	APU(4, 364,0),	APU_RT_MASK, PPC405,	PPCNONE,	{RA, FSL}},
-{"efsctsiz",	VX (4, 730),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efststgt",	VX (4, 732),	VX_MASK,     PPCEFS,	PPCNONE,	{CRFD, RA, RB}},
-{"efststlt",	VX (4, 733),	VX_MASK,     PPCEFS,	PPCNONE,	{CRFD, RA, RB}},
-{"efststeq",	VX (4, 734),	VX_MASK,     PPCEFS,	PPCNONE,	{CRFD, RA, RB}},
-{"efdadd",	VX (4, 736),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RA, RB}},
-{"efdsub",	VX (4, 737),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RA, RB}},
-{"efdcfuid",	VX (4, 738),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efdcfsid",	VX (4, 739),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efdabs",	VX (4, 740),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RA}},
-{"efdnabs",	VX (4, 741),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RA}},
-{"efdneg",	VX (4, 742),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RA}},
-{"efdmul",	VX (4, 744),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RA, RB}},
-{"efddiv",	VX (4, 745),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RA, RB}},
-{"efdctuidz",	VX (4, 746),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efdctsidz",	VX (4, 747),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efdcmpgt",	VX (4, 748),	VX_MASK,     PPCEFS,	PPCNONE,	{CRFD, RA, RB}},
-{"efdcmplt",	VX (4, 749),	VX_MASK,     PPCEFS,	PPCNONE,	{CRFD, RA, RB}},
-{"efdcmpeq",	VX (4, 750),	VX_MASK,     PPCEFS,	PPCNONE,	{CRFD, RA, RB}},
-{"efdcfs",	VX (4, 751),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efdcfui",	VX (4, 752),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efdcfsi",	VX (4, 753),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efdcfuf",	VX (4, 754),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efdcfsf",	VX (4, 755),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efdctui",	VX (4, 756),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efdctsi",	VX (4, 757),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efdctuf",	VX (4, 758),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efdctsf",	VX (4, 759),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efdctuiz",	VX (4, 760),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
+{"efsctsiz",	VX (4, 730),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efststgt",	VX (4, 732),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
+{"efststlt",	VX (4, 733),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
+{"efststeq",	VX (4, 734),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
+{"efdadd",	VX (4, 736),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"efdsub",	VX (4, 737),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"efdcfuid",	VX (4, 738),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efdcfsid",	VX (4, 739),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efdabs",	VX (4, 740),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RA}},
+{"efdnabs",	VX (4, 741),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RA}},
+{"efdneg",	VX (4, 742),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RA}},
+{"efdmul",	VX (4, 744),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"efddiv",	VX (4, 745),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"efdctuidz",	VX (4, 746),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efdctsidz",	VX (4, 747),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efdcmpgt",	VX (4, 748),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
+{"efdcmplt",	VX (4, 749),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
+{"efdcmpeq",	VX (4, 750),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
+{"efdcfs",	VX (4, 751),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efdcfui",	VX (4, 752),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efdcfsi",	VX (4, 753),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efdcfuf",	VX (4, 754),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efdcfsf",	VX (4, 755),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efdctui",	VX (4, 756),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efdctsi",	VX (4, 757),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efdctuf",	VX (4, 758),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efdctsf",	VX (4, 759),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efdctuiz",	VX (4, 760),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
 {"ncput",	APU(4, 380,0),	APU_RT_MASK, PPC405,	PPCNONE,	{RA, FSL}},
-{"efdctsiz",	VX (4, 762),	VX_MASK,     PPCEFS,	PPCNONE,	{RS, RB}},
-{"efdtstgt",	VX (4, 764),	VX_MASK,     PPCEFS,	PPCNONE,	{CRFD, RA, RB}},
-{"efdtstlt",	VX (4, 765),	VX_MASK,     PPCEFS,	PPCNONE,	{CRFD, RA, RB}},
-{"efdtsteq",	VX (4, 766),	VX_MASK,     PPCEFS,	PPCNONE,	{CRFD, RA, RB}},
-{"evlddx",	VX (4, 768),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vaddsbs",	VX (4, 768),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evldd",	VX (4, 769),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, EVUIMM_8, RA}},
-{"evldwx",	VX (4, 770),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vminsb",	VX (4, 770),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evldw",	VX (4, 771),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, EVUIMM_8, RA}},
-{"evldhx",	VX (4, 772),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vsrab",	VX (4, 772),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evldh",	VX (4, 773),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, EVUIMM_8, RA}},
-{"vcmpgtsb",	VXR(4, 774,0),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evlhhesplatx",VX (4, 776),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vmulesb",	VX (4, 776),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evlhhesplat",	VX (4, 777),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, EVUIMM_2, RA}},
-{"vcfux",	VX (4, 778),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VB, UIMM}},
-{"evlhhousplatx",VX(4, 780),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vspltisb",	VX (4, 780),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, SIMM}},
-{"evlhhousplat",VX (4, 781),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, EVUIMM_2, RA}},
-{"evlhhossplatx",VX(4, 782),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vpkpx",	VX (4, 782),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evlhhossplat",VX (4, 783),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, EVUIMM_2, RA}},
-{"mullhwu",	XRC(4, 392,0),	X_MASK,      MULHW,	PPCNONE,	{RT, RA, RB}},
-{"evlwhex",	VX (4, 784),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"mullhwu.",	XRC(4, 392,1),	X_MASK,      MULHW,	PPCNONE,	{RT, RA, RB}},
-{"evlwhe",	VX (4, 785),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, EVUIMM_4, RA}},
-{"evlwhoux",	VX (4, 788),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evlwhou",	VX (4, 789),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, EVUIMM_4, RA}},
-{"evlwhosx",	VX (4, 790),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evlwhos",	VX (4, 791),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, EVUIMM_4, RA}},
-{"maclhwu",	XO (4, 396,0,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"evlwwsplatx",	VX (4, 792),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"maclhwu.",	XO (4, 396,0,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"evlwwsplat",	VX (4, 793),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, EVUIMM_4, RA}},
-{"evlwhsplatx",	VX (4, 796),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evlwhsplat",	VX (4, 797),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, EVUIMM_4, RA}},
-{"evstddx",	VX (4, 800),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evstdd",	VX (4, 801),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, EVUIMM_8, RA}},
-{"evstdwx",	VX (4, 802),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evstdw",	VX (4, 803),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, EVUIMM_8, RA}},
-{"evstdhx",	VX (4, 804),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evstdh",	VX (4, 805),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, EVUIMM_8, RA}},
-{"evstwhex",	VX (4, 816),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evstwhe",	VX (4, 817),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, EVUIMM_4, RA}},
-{"evstwhox",	VX (4, 820),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evstwho",	VX (4, 821),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, EVUIMM_4, RA}},
-{"evstwwex",	VX (4, 824),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evstwwe",	VX (4, 825),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, EVUIMM_4, RA}},
-{"evstwwox",	VX (4, 828),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evstwwo",	VX (4, 829),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, EVUIMM_4, RA}},
-{"vaddshs",	VX (4, 832),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vminsh",	VX (4, 834),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vsrah",	VX (4, 836),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vcmpgtsh",	VXR(4, 838,0),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vmulesh",	VX (4, 840),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vcfsx",	VX (4, 842),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VB, UIMM}},
-{"vspltish",	VX (4, 844),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, SIMM}},
-{"vupkhpx",	VX (4, 846),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VB}},
-{"mullhw",	XRC(4, 424,0),	X_MASK,      MULHW,	PPCNONE,	{RT, RA, RB}},
-{"mullhw.",	XRC(4, 424,1),	X_MASK,      MULHW,	PPCNONE,	{RT, RA, RB}},
-{"maclhw",	XO (4, 428,0,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"maclhw.",	XO (4, 428,0,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"nmaclhw",	XO (4, 430,0,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"nmaclhw.",	XO (4, 430,0,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"vaddsws",	VX (4, 896),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vminsw",	VX (4, 898),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vsraw",	VX (4, 900),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vcmpgtsw",	VXR(4, 902,0),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vctuxs",	VX (4, 906),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VB, UIMM}},
-{"vspltisw",	VX (4, 908),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, SIMM}},
-{"maclhwsu",	XO (4, 460,0,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"maclhwsu.",	XO (4, 460,0,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"vcmpbfp",	VXR(4, 966,0),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vctsxs",	VX (4, 970),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VB, UIMM}},
-{"vupklpx",	VX (4, 974),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VB}},
-{"maclhws",	XO (4, 492,0,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"maclhws.",	XO (4, 492,0,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"nmaclhws",	XO (4, 494,0,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"nmaclhws.",	XO (4, 494,0,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"vsububm",	VX (4,1024),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vavgub",	VX (4,1026),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evmhessf",	VX (4,1027),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vand",	VX (4,1028),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vcmpequb.",	VXR(4,	 6,1),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
+{"efdctsiz",	VX (4, 762),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{RS, RB}},
+{"efdtstgt",	VX (4, 764),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
+{"efdtstlt",	VX (4, 765),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
+{"efdtsteq",	VX (4, 766),	VX_MASK,     PPCEFS|PPCVLE, PPCNONE,	{CRFD, RA, RB}},
+{"evlddx",	VX (4, 768),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vaddsbs",	VX (4, 768),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evldd",	VX (4, 769),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, EVUIMM_8, RA}},
+{"evldwx",	VX (4, 770),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vminsb",	VX (4, 770),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evldw",	VX (4, 771),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, EVUIMM_8, RA}},
+{"evldhx",	VX (4, 772),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vsrab",	VX (4, 772),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evldh",	VX (4, 773),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, EVUIMM_8, RA}},
+{"vcmpgtsb",	VXR(4, 774,0),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evlhhesplatx",VX (4, 776),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vmulesb",	VX (4, 776),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evlhhesplat",	VX (4, 777),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, EVUIMM_2, RA}},
+{"vcfux",	VX (4, 778),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB, UIMM}},
+{"evlhhousplatx",VX(4, 780),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vspltisb",	VX (4, 780),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, SIMM}},
+{"evlhhousplat",VX (4, 781),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, EVUIMM_2, RA}},
+{"evlhhossplatx",VX(4, 782),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vpkpx",	VX (4, 782),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evlhhossplat",VX (4, 783),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, EVUIMM_2, RA}},
+{"mullhwu",	XRC(4, 392,0),	X_MASK,      MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"evlwhex",	VX (4, 784),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"mullhwu.",	XRC(4, 392,1),	X_MASK,      MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"evlwhe",	VX (4, 785),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, EVUIMM_4, RA}},
+{"evlwhoux",	VX (4, 788),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evlwhou",	VX (4, 789),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, EVUIMM_4, RA}},
+{"evlwhosx",	VX (4, 790),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evlwhos",	VX (4, 791),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, EVUIMM_4, RA}},
+{"maclhwu",	XO (4, 396,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"evlwwsplatx",	VX (4, 792),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"maclhwu.",	XO (4, 396,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"evlwwsplat",	VX (4, 793),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, EVUIMM_4, RA}},
+{"evlwhsplatx",	VX (4, 796),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evlwhsplat",	VX (4, 797),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, EVUIMM_4, RA}},
+{"evstddx",	VX (4, 800),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evstdd",	VX (4, 801),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, EVUIMM_8, RA}},
+{"evstdwx",	VX (4, 802),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evstdw",	VX (4, 803),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, EVUIMM_8, RA}},
+{"evstdhx",	VX (4, 804),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evstdh",	VX (4, 805),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, EVUIMM_8, RA}},
+{"evstwhex",	VX (4, 816),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evstwhe",	VX (4, 817),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, EVUIMM_4, RA}},
+{"evstwhox",	VX (4, 820),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evstwho",	VX (4, 821),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, EVUIMM_4, RA}},
+{"evstwwex",	VX (4, 824),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evstwwe",	VX (4, 825),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, EVUIMM_4, RA}},
+{"evstwwox",	VX (4, 828),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evstwwo",	VX (4, 829),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, EVUIMM_4, RA}},
+{"vaddshs",	VX (4, 832),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vminsh",	VX (4, 834),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vsrah",	VX (4, 836),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vcmpgtsh",	VXR(4, 838,0),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vmulesh",	VX (4, 840),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vcfsx",	VX (4, 842),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB, UIMM}},
+{"vspltish",	VX (4, 844),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, SIMM}},
+{"vupkhpx",	VX (4, 846),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
+{"mullhw",	XRC(4, 424,0),	X_MASK,      MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"mullhw.",	XRC(4, 424,1),	X_MASK,      MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"maclhw",	XO (4, 428,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"maclhw.",	XO (4, 428,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"nmaclhw",	XO (4, 430,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"nmaclhw.",	XO (4, 430,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"vaddsws",	VX (4, 896),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vminsw",	VX (4, 898),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vsraw",	VX (4, 900),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vcmpgtsw",	VXR(4, 902,0),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vctuxs",	VX (4, 906),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB, UIMM}},
+{"vspltisw",	VX (4, 908),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, SIMM}},
+{"maclhwsu",	XO (4, 460,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"maclhwsu.",	XO (4, 460,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"vcmpbfp",	VXR(4, 966,0),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vctsxs",	VX (4, 970),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB, UIMM}},
+{"vupklpx",	VX (4, 974),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VB}},
+{"maclhws",	XO (4, 492,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"maclhws.",	XO (4, 492,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"nmaclhws",	XO (4, 494,0,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"nmaclhws.",	XO (4, 494,0,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"vsububm",	VX (4,1024),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vavgub",	VX (4,1026),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evmhessf",	VX (4,1027),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vand",	VX (4,1028),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vcmpequb.",	VXR(4,	 6,1),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
 {"udi0fcm.",	APU(4, 515,0), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
 {"udi0fcm",	APU(4, 515,1), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
-{"evmhossf",	VX (4,1031),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmheumi",	VX (4,1032),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhesmi",	VX (4,1033),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vmaxfp",	VX (4,1034),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evmhesmf",	VX (4,1035),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhoumi",	VX (4,1036),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vslo",	VX (4,1036),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evmhosmi",	VX (4,1037),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhosmf",	VX (4,1039),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"machhwuo",	XO (4,	12,1,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"machhwuo.",	XO (4,	12,1,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
+{"evmhossf",	VX (4,1031),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmheumi",	VX (4,1032),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhesmi",	VX (4,1033),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vmaxfp",	VX (4,1034),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evmhesmf",	VX (4,1035),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhoumi",	VX (4,1036),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vslo",	VX (4,1036),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evmhosmi",	VX (4,1037),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhosmf",	VX (4,1039),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"machhwuo",	XO (4,	12,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"machhwuo.",	XO (4,	12,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"ps_merge00",	XOPS(4,528,0),	XOPS_MASK,   PPCPS,	PPCNONE,	{FRT, FRA, FRB}},
 {"ps_merge00.",	XOPS(4,528,1),	XOPS_MASK,   PPCPS,	PPCNONE,	{FRT, FRA, FRB}},
-{"evmhessfa",	VX (4,1059),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhossfa",	VX (4,1063),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmheumia",	VX (4,1064),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhesmia",	VX (4,1065),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhesmfa",	VX (4,1067),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhoumia",	VX (4,1068),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhosmia",	VX (4,1069),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhosmfa",	VX (4,1071),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vsubuhm",	VX (4,1088),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vavguh",	VX (4,1090),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vandc",	VX (4,1092),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vcmpequh.",	VXR(4,	70,1),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
+{"evmhessfa",	VX (4,1059),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhossfa",	VX (4,1063),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmheumia",	VX (4,1064),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhesmia",	VX (4,1065),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhesmfa",	VX (4,1067),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhoumia",	VX (4,1068),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhosmia",	VX (4,1069),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhosmfa",	VX (4,1071),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vsubuhm",	VX (4,1088),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vavguh",	VX (4,1090),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vandc",	VX (4,1092),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vcmpequh.",	VXR(4,	70,1),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
 {"udi1fcm.",	APU(4, 547,0), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
 {"udi1fcm",	APU(4, 547,1), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},   
-{"evmwhssf",	VX (4,1095),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwlumi",	VX (4,1096),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vminfp",	VX (4,1098),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evmwhumi",	VX (4,1100),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vsro",	VX (4,1100),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evmwhsmi",	VX (4,1101),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwhsmf",	VX (4,1103),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwssf",	VX (4,1107),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"machhwo",	XO (4,	44,1,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"evmwumi",	VX (4,1112),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"machhwo.",	XO (4,	44,1,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"evmwsmi",	VX (4,1113),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwsmf",	VX (4,1115),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"nmachhwo",	XO (4,	46,1,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"nmachhwo.",	XO (4,	46,1,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
+{"evmwhssf",	VX (4,1095),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwlumi",	VX (4,1096),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vminfp",	VX (4,1098),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evmwhumi",	VX (4,1100),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vsro",	VX (4,1100),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evmwhsmi",	VX (4,1101),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwhsmf",	VX (4,1103),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwssf",	VX (4,1107),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"machhwo",	XO (4,	44,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"evmwumi",	VX (4,1112),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"machhwo.",	XO (4,	44,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"evmwsmi",	VX (4,1113),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwsmf",	VX (4,1115),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"nmachhwo",	XO (4,	46,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"nmachhwo.",	XO (4,	46,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"ps_merge01",	XOPS(4,560,0),	XOPS_MASK,   PPCPS,	PPCNONE,	{FRT, FRA, FRB}},
 {"ps_merge01.",	XOPS(4,560,1),	XOPS_MASK,   PPCPS,	PPCNONE,	{FRT, FRA, FRB}},
-{"evmwhssfa",	VX (4,1127),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwlumia",	VX (4,1128),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwhumia",	VX (4,1132),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwhsmia",	VX (4,1133),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwhsmfa",	VX (4,1135),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwssfa",	VX (4,1139),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwumia",	VX (4,1144),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwsmia",	VX (4,1145),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwsmfa",	VX (4,1147),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vsubuwm",	VX (4,1152),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vavguw",	VX (4,1154),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vor",		VX (4,1156),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vcmpequw.",	VXR(4, 134,1),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
+{"evmwhssfa",	VX (4,1127),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwlumia",	VX (4,1128),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwhumia",	VX (4,1132),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwhsmia",	VX (4,1133),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwhsmfa",	VX (4,1135),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwssfa",	VX (4,1139),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwumia",	VX (4,1144),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwsmia",	VX (4,1145),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwsmfa",	VX (4,1147),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vsubuwm",	VX (4,1152),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vavguw",	VX (4,1154),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vor",		VX (4,1156),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vcmpequw.",	VXR(4, 134,1),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
 {"udi2fcm.",	APU(4, 579,0), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
 {"udi2fcm",	APU(4, 579,1), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},   
-{"machhwsuo",	XO (4,	76,1,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"machhwsuo.",	XO (4,	76,1,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
+{"machhwsuo",	XO (4,	76,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"machhwsuo.",	XO (4,	76,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"ps_merge10",	XOPS(4,592,0),	XOPS_MASK,   PPCPS,	PPCNONE,	{FRT, FRA, FRB}},
 {"ps_merge10.",	XOPS(4,592,1),	XOPS_MASK,   PPCPS,	PPCNONE,	{FRT, FRA, FRB}},
-{"evaddusiaaw",	VX (4,1216),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA}},
-{"evaddssiaaw",	VX (4,1217),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA}},
-{"evsubfusiaaw",VX (4,1218),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA}},
-{"evsubfssiaaw",VX (4,1219),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA}},
-{"evmra",	VX (4,1220),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA}},
-{"vxor",	VX (4,1220),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evdivws",	VX (4,1222),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vcmpeqfp.",	VXR(4, 198,1),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
+{"evaddusiaaw",	VX (4,1216),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
+{"evaddssiaaw",	VX (4,1217),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
+{"evsubfusiaaw",VX (4,1218),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
+{"evsubfssiaaw",VX (4,1219),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
+{"evmra",	VX (4,1220),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
+{"vxor",	VX (4,1220),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evdivws",	VX (4,1222),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vcmpeqfp.",	VXR(4, 198,1),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
 {"udi3fcm.",	APU(4, 611,0), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
 {"udi3fcm",	APU(4, 611,1), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},   
-{"evdivwu",	VX (4,1223),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evaddumiaaw",	VX (4,1224),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA}},
-{"evaddsmiaaw",	VX (4,1225),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA}},
-{"evsubfumiaaw",VX (4,1226),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA}},
-{"evsubfsmiaaw",VX (4,1227),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA}},
-{"machhwso",	XO (4, 108,1,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"machhwso.",	XO (4, 108,1,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"nmachhwso",	XO (4, 110,1,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"nmachhwso.",	XO (4, 110,1,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
+{"evdivwu",	VX (4,1223),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evaddumiaaw",	VX (4,1224),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
+{"evaddsmiaaw",	VX (4,1225),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
+{"evsubfumiaaw",VX (4,1226),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
+{"evsubfsmiaaw",VX (4,1227),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA}},
+{"machhwso",	XO (4, 108,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"machhwso.",	XO (4, 108,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"nmachhwso",	XO (4, 110,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"nmachhwso.",	XO (4, 110,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"ps_merge11",	XOPS(4,624,0),	XOPS_MASK,   PPCPS,	PPCNONE,	{FRT, FRA, FRB}},
 {"ps_merge11.",	XOPS(4,624,1),	XOPS_MASK,   PPCPS,	PPCNONE,	{FRT, FRA, FRB}},
-{"evmheusiaaw",	VX (4,1280),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhessiaaw",	VX (4,1281),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vavgsb",	VX (4,1282),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evmhessfaaw",	VX (4,1283),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhousiaaw",	VX (4,1284),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vnor",	VX (4,1284),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evmhossiaaw",	VX (4,1285),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
+{"evmheusiaaw",	VX (4,1280),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhessiaaw",	VX (4,1281),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vavgsb",	VX (4,1282),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evmhessfaaw",	VX (4,1283),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhousiaaw",	VX (4,1284),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vnor",	VX (4,1284),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evmhossiaaw",	VX (4,1285),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
 {"udi4fcm.",	APU(4, 643,0), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
 {"udi4fcm",	APU(4, 643,1), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
-{"evmhossfaaw",	VX (4,1287),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmheumiaaw",	VX (4,1288),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhesmiaaw",	VX (4,1289),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhesmfaaw",	VX (4,1291),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhoumiaaw",	VX (4,1292),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhosmiaaw",	VX (4,1293),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhosmfaaw",	VX (4,1295),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"macchwuo",	XO (4, 140,1,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"macchwuo.",	XO (4, 140,1,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"evmhegumiaa",	VX (4,1320),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhegsmiaa",	VX (4,1321),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhegsmfaa",	VX (4,1323),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhogumiaa",	VX (4,1324),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhogsmiaa",	VX (4,1325),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhogsmfaa",	VX (4,1327),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwlusiaaw",	VX (4,1344),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwlssiaaw",	VX (4,1345),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vavgsh",	VX (4,1346),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
+{"evmhossfaaw",	VX (4,1287),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmheumiaaw",	VX (4,1288),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhesmiaaw",	VX (4,1289),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhesmfaaw",	VX (4,1291),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhoumiaaw",	VX (4,1292),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhosmiaaw",	VX (4,1293),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhosmfaaw",	VX (4,1295),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"macchwuo",	XO (4, 140,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"macchwuo.",	XO (4, 140,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"evmhegumiaa",	VX (4,1320),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhegsmiaa",	VX (4,1321),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhegsmfaa",	VX (4,1323),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhogumiaa",	VX (4,1324),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhogsmiaa",	VX (4,1325),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhogsmfaa",	VX (4,1327),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwlusiaaw",	VX (4,1344),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwlssiaaw",	VX (4,1345),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vavgsh",	VX (4,1346),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
 {"udi5fcm.",	APU(4, 675,0), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
 {"udi5fcm",	APU(4, 675,1), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
-{"evmwlumiaaw",	VX (4,1352),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwlsmiaaw",	VX (4,1353),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwssfaa",	VX (4,1363),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"macchwo",	XO (4, 172,1,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"evmwumiaa",	VX (4,1368),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"macchwo.",	XO (4, 172,1,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"evmwsmiaa",	VX (4,1369),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwsmfaa",	VX (4,1371),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"nmacchwo",	XO (4, 174,1,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"nmacchwo.",	XO (4, 174,1,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"evmheusianw",	VX (4,1408),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vsubcuw",	VX (4,1408),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evmhessianw",	VX (4,1409),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vavgsw",	VX (4,1410),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"evmhessfanw",	VX (4,1411),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhousianw",	VX (4,1412),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhossianw",	VX (4,1413),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
+{"evmwlumiaaw",	VX (4,1352),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwlsmiaaw",	VX (4,1353),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwssfaa",	VX (4,1363),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"macchwo",	XO (4, 172,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"evmwumiaa",	VX (4,1368),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"macchwo.",	XO (4, 172,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"evmwsmiaa",	VX (4,1369),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwsmfaa",	VX (4,1371),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"nmacchwo",	XO (4, 174,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"nmacchwo.",	XO (4, 174,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"evmheusianw",	VX (4,1408),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vsubcuw",	VX (4,1408),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evmhessianw",	VX (4,1409),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vavgsw",	VX (4,1410),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"evmhessfanw",	VX (4,1411),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhousianw",	VX (4,1412),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhossianw",	VX (4,1413),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
 {"udi6fcm.",	APU(4, 707,0), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
 {"udi6fcm",	APU(4, 707,1), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
-{"evmhossfanw",	VX (4,1415),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmheumianw",	VX (4,1416),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhesmianw",	VX (4,1417),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhesmfanw",	VX (4,1419),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhoumianw",	VX (4,1420),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhosmianw",	VX (4,1421),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhosmfanw",	VX (4,1423),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"macchwsuo",	XO (4, 204,1,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"macchwsuo.",	XO (4, 204,1,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"evmhegumian",	VX (4,1448),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhegsmian",	VX (4,1449),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhegsmfan",	VX (4,1451),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhogumian",	VX (4,1452),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhogsmian",	VX (4,1453),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmhogsmfan",	VX (4,1455),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwlusianw",	VX (4,1472),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwlssianw",	VX (4,1473),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"vcmpgefp.",	VXR(4, 454,1),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
+{"evmhossfanw",	VX (4,1415),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmheumianw",	VX (4,1416),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhesmianw",	VX (4,1417),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhesmfanw",	VX (4,1419),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhoumianw",	VX (4,1420),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhosmianw",	VX (4,1421),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhosmfanw",	VX (4,1423),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"macchwsuo",	XO (4, 204,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"macchwsuo.",	XO (4, 204,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"evmhegumian",	VX (4,1448),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhegsmian",	VX (4,1449),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhegsmfan",	VX (4,1451),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhogumian",	VX (4,1452),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhogsmian",	VX (4,1453),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmhogsmfan",	VX (4,1455),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwlusianw",	VX (4,1472),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwlssianw",	VX (4,1473),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"vcmpgefp.",	VXR(4, 454,1),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
 {"udi7fcm.",	APU(4, 739,0), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
 {"udi7fcm",	APU(4, 739,1), APU_MASK, PPC405|PPC440, PPC476,		{URT, URA, URB}},
-{"evmwlumianw",	VX (4,1480),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwlsmianw",	VX (4,1481),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwssfan",	VX (4,1491),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"macchwso",	XO (4, 236,1,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"evmwumian",	VX (4,1496),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"macchwso.",	XO (4, 236,1,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"evmwsmian",	VX (4,1497),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"evmwsmfan",	VX (4,1499),	VX_MASK,     PPCSPE,	PPCNONE,	{RS, RA, RB}},
-{"nmacchwso",	XO (4, 238,1,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"nmacchwso.",	XO (4, 238,1,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"vsububs",	VX (4,1536),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"mfvscr",	VX (4,1540),	VX_MASK,     PPCVEC,	PPCNONE,	{VD}},
-{"vcmpgtub.",	VXR(4, 518,1),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
+{"evmwlumianw",	VX (4,1480),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwlsmianw",	VX (4,1481),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwssfan",	VX (4,1491),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"macchwso",	XO (4, 236,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"evmwumian",	VX (4,1496),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"macchwso.",	XO (4, 236,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"evmwsmian",	VX (4,1497),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"evmwsmfan",	VX (4,1499),	VX_MASK,     PPCSPE|PPCVLE, PPCNONE,	{RS, RA, RB}},
+{"nmacchwso",	XO (4, 238,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"nmacchwso.",	XO (4, 238,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"vsububs",	VX (4,1536),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"mfvscr",	VX (4,1540),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD}},
+{"vcmpgtub.",	VXR(4, 518,1),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
 {"udi8fcm.",	APU(4, 771,0),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
 {"udi8fcm",	APU(4, 771,1),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
-{"vsum4ubs",	VX (4,1544),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vsubuhs",	VX (4,1600),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"mtvscr",	VX (4,1604),	VX_MASK,     PPCVEC,	PPCNONE,	{VB}},
-{"vcmpgtuh.",	VXR(4, 582,1),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vsum4shs",	VX (4,1608),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
+{"vsum4ubs",	VX (4,1544),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vsubuhs",	VX (4,1600),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"mtvscr",	VX (4,1604),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VB}},
+{"vcmpgtuh.",	VXR(4, 582,1),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vsum4shs",	VX (4,1608),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
 {"udi9fcm.",	APU(4, 804,0),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
 {"udi9fcm",	APU(4, 804,1),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
-{"vsubuws",	VX (4,1664),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vcmpgtuw.",	VXR(4, 646,1),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
+{"vsubuws",	VX (4,1664),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vcmpgtuw.",	VXR(4, 646,1),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
 {"udi10fcm.",	APU(4, 835,0),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
 {"udi10fcm",	APU(4, 835,1),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
-{"vsum2sws",	VX (4,1672),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vcmpgtfp.",	VXR(4, 710,1),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
+{"vsum2sws",	VX (4,1672),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vcmpgtfp.",	VXR(4, 710,1),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
 {"udi11fcm.",	APU(4, 867,0),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
 {"udi11fcm",	APU(4, 867,1),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
-{"vsubsbs",	VX (4,1792),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vcmpgtsb.",	VXR(4, 774,1),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
+{"vsubsbs",	VX (4,1792),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vcmpgtsb.",	VXR(4, 774,1),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
 {"udi12fcm.",	APU(4, 899,0),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
 {"udi12fcm",	APU(4, 899,1),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
-{"vsum4sbs",	VX (4,1800),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"maclhwuo",	XO (4, 396,1,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"maclhwuo.",	XO (4, 396,1,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"vsubshs",	VX (4,1856),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vcmpgtsh.",	VXR(4, 838,1),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
+{"vsum4sbs",	VX (4,1800),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"maclhwuo",	XO (4, 396,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"maclhwuo.",	XO (4, 396,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"vsubshs",	VX (4,1856),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vcmpgtsh.",	VXR(4, 838,1),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
 {"udi13fcm.",	APU(4, 931,0),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
 {"udi13fcm",	APU(4, 931,1),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
-{"maclhwo",	XO (4, 428,1,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"maclhwo.",	XO (4, 428,1,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"nmaclhwo",	XO (4, 430,1,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"nmaclhwo.",	XO (4, 430,1,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"vsubsws",	VX (4,1920),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"vcmpgtsw.",	VXR(4, 902,1),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
+{"maclhwo",	XO (4, 428,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"maclhwo.",	XO (4, 428,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"nmaclhwo",	XO (4, 430,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"nmaclhwo.",	XO (4, 430,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"vsubsws",	VX (4,1920),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"vcmpgtsw.",	VXR(4, 902,1),	VXR_MASK,    PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
 {"udi14fcm.",	APU(4, 963,0),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
 {"udi14fcm",	APU(4, 963,1),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
-{"vsumsws",	VX (4,1928),	VX_MASK,     PPCVEC,	PPCNONE,	{VD, VA, VB}},
-{"maclhwsuo",	XO (4, 460,1,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"maclhwsuo.",	XO (4, 460,1,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
+{"vsumsws",	VX (4,1928),	VX_MASK,     PPCVEC|PPCVLE, PPCNONE,	{VD, VA, VB}},
+{"maclhwsuo",	XO (4, 460,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"maclhwsuo.",	XO (4, 460,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"vcmpbfp.",	VXR(4, 966,1),	VXR_MASK,    PPCVEC,	PPCNONE,	{VD, VA, VB}},
 {"udi15fcm.",	APU(4, 995,0),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
 {"udi15fcm",	APU(4, 995,1),	APU_MASK,    PPC440,	PPC476,		{URT, URA, URB}},
-{"maclhwso",	XO (4, 492,1,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"maclhwso.",	XO (4, 492,1,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"nmaclhwso",	XO (4, 494,1,0),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
-{"nmaclhwso.",	XO (4, 494,1,1),XO_MASK,     MULHW,	PPCNONE,	{RT, RA, RB}},
+{"maclhwso",	XO (4, 492,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"maclhwso.",	XO (4, 492,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"nmaclhwso",	XO (4, 494,1,0),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"nmaclhwso.",	XO (4, 494,1,1),XO_MASK,     MULHW|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"dcbz_l",	X  (4,1014),	XRT_MASK,    PPCPS,	PPCNONE,	{RA, RB}},
 
 {"mulli",	OP(7),		OP_MASK,     PPCCOM,	PPCNONE,	{RT, RA, SI}},
@@ -3505,64 +4177,64 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"cmpw",	XOPL(31,0,0),	XCMPL_MASK,  PPCCOM,	PPCNONE,	{OBF, RA, RB}},
 {"cmpd",	XOPL(31,0,1),	XCMPL_MASK,  PPC64,	PPCNONE,	{OBF, RA, RB}},
-{"cmp",		X(31,0),	XCMP_MASK,   PPC,	PPCNONE,	{BF, L, RA, RB}},
+{"cmp",		X(31,0),	XCMP_MASK,   PPC|PPCVLE, PPCNONE,	{BF, L, RA, RB}},
 {"cmp",		X(31,0),	XCMPL_MASK,  PWRCOM,	PPC,		{BF, RA, RB}},
 
-{"twlgt",	XTO(31,4,TOLGT), XTO_MASK,   PPCCOM,	PPCNONE,	{RA, RB}},
+{"twlgt",	XTO(31,4,TOLGT), XTO_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RA, RB}},
 {"tlgt",	XTO(31,4,TOLGT), XTO_MASK,   PWRCOM,	PPCNONE,	{RA, RB}},
-{"twllt",	XTO(31,4,TOLLT), XTO_MASK,   PPCCOM,	PPCNONE,	{RA, RB}},
+{"twllt",	XTO(31,4,TOLLT), XTO_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RA, RB}},
 {"tllt",	XTO(31,4,TOLLT), XTO_MASK,   PWRCOM,	PPCNONE,	{RA, RB}},
-{"tweq",	XTO(31,4,TOEQ),	 XTO_MASK,   PPCCOM,	PPCNONE,	{RA, RB}},
+{"tweq",	XTO(31,4,TOEQ),	 XTO_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RA, RB}},
 {"teq",		XTO(31,4,TOEQ),	 XTO_MASK,   PWRCOM,	PPCNONE,	{RA, RB}},
-{"twlge",	XTO(31,4,TOLGE), XTO_MASK,   PPCCOM,	PPCNONE,	{RA, RB}},
+{"twlge",	XTO(31,4,TOLGE), XTO_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RA, RB}},
 {"tlge",	XTO(31,4,TOLGE), XTO_MASK,   PWRCOM,	PPCNONE,	{RA, RB}},
-{"twlnl",	XTO(31,4,TOLNL), XTO_MASK,   PPCCOM,	PPCNONE,	{RA, RB}},
+{"twlnl",	XTO(31,4,TOLNL), XTO_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RA, RB}},
 {"tlnl",	XTO(31,4,TOLNL), XTO_MASK,   PWRCOM,	PPCNONE,	{RA, RB}},
-{"twlle",	XTO(31,4,TOLLE), XTO_MASK,   PPCCOM,	PPCNONE,	{RA, RB}},
+{"twlle",	XTO(31,4,TOLLE), XTO_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RA, RB}},
 {"tlle",	XTO(31,4,TOLLE), XTO_MASK,   PWRCOM,	PPCNONE,	{RA, RB}},
-{"twlng",	XTO(31,4,TOLNG), XTO_MASK,   PPCCOM,	PPCNONE,	{RA, RB}},
+{"twlng",	XTO(31,4,TOLNG), XTO_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RA, RB}},
 {"tlng",	XTO(31,4,TOLNG), XTO_MASK,   PWRCOM,	PPCNONE,	{RA, RB}},
-{"twgt",	XTO(31,4,TOGT),	 XTO_MASK,   PPCCOM,	PPCNONE,	{RA, RB}},
+{"twgt",	XTO(31,4,TOGT),	 XTO_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RA, RB}},
 {"tgt",		XTO(31,4,TOGT),	 XTO_MASK,   PWRCOM,	PPCNONE,	{RA, RB}},
-{"twge",	XTO(31,4,TOGE),	 XTO_MASK,   PPCCOM,	PPCNONE,	{RA, RB}},
+{"twge",	XTO(31,4,TOGE),	 XTO_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RA, RB}},
 {"tge",		XTO(31,4,TOGE),	 XTO_MASK,   PWRCOM,	PPCNONE,	{RA, RB}},
-{"twnl",	XTO(31,4,TONL),	 XTO_MASK,   PPCCOM,	PPCNONE,	{RA, RB}},
+{"twnl",	XTO(31,4,TONL),	 XTO_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RA, RB}},
 {"tnl",		XTO(31,4,TONL),	 XTO_MASK,   PWRCOM,	PPCNONE,	{RA, RB}},
-{"twlt",	XTO(31,4,TOLT),	 XTO_MASK,   PPCCOM,	PPCNONE,	{RA, RB}},
+{"twlt",	XTO(31,4,TOLT),	 XTO_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RA, RB}},
 {"tlt",		XTO(31,4,TOLT),	 XTO_MASK,   PWRCOM,	PPCNONE,	{RA, RB}},
-{"twle",	XTO(31,4,TOLE),	 XTO_MASK,   PPCCOM,	PPCNONE,	{RA, RB}},
+{"twle",	XTO(31,4,TOLE),	 XTO_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RA, RB}},
 {"tle",		XTO(31,4,TOLE),	 XTO_MASK,   PWRCOM,	PPCNONE,	{RA, RB}},
-{"twng",	XTO(31,4,TONG),	 XTO_MASK,   PPCCOM,	PPCNONE,	{RA, RB}},
+{"twng",	XTO(31,4,TONG),	 XTO_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RA, RB}},
 {"tng",		XTO(31,4,TONG),	 XTO_MASK,   PWRCOM,	PPCNONE,	{RA, RB}},
-{"twne",	XTO(31,4,TONE),	 XTO_MASK,   PPCCOM,	PPCNONE,	{RA, RB}},
+{"twne",	XTO(31,4,TONE),	 XTO_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RA, RB}},
 {"tne",		XTO(31,4,TONE),	 XTO_MASK,   PWRCOM,	PPCNONE,	{RA, RB}},
-{"trap",	XTO(31,4,TOU),	 0xffffffff, PPCCOM,	PPCNONE,	{0}},
-{"tw",		X(31,4),	 X_MASK,     PPCCOM,	PPCNONE,	{TO, RA, RB}},
+{"trap",	XTO(31,4,TOU),	 0xffffffff, PPCCOM|PPCVLE, PPCNONE,	{0}},
+{"tw",		X(31,4),	 X_MASK, PPCCOM|PPCVLE, PPCNONE,	{TO, RA, RB}},
 {"t",		X(31,4),	 X_MASK,     PWRCOM,	PPCNONE,	{TO, RA, RB}},
 
-{"lvsl",	X(31,6),	X_MASK,      PPCVEC,	PPCNONE,	{VD, RA, RB}},
-{"lvebx",	X(31,7),	X_MASK,      PPCVEC,	PPCNONE,	{VD, RA, RB}},
+{"lvsl",	X(31,6),	X_MASK,      PPCVEC,	PPCNONE,	{VD, RA0, RB}},
+{"lvebx",	X(31,7),	X_MASK,      PPCVEC,	PPCNONE,	{VD, RA0, RB}},
 {"lbfcmx",	APU(31,7,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
 
-{"subfc",	XO(31,8,0,0),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"subfc",	XO(31,8,0,0),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"sf",		XO(31,8,0,0),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
-{"subc",	XO(31,8,0,0),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RB, RA}},
-{"subfc.",	XO(31,8,0,1),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"subc",	XO(31,8,0,0),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RB, RA}},
+{"subfc.",	XO(31,8,0,1),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"sf.",		XO(31,8,0,1),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
-{"subc.",	XO(31,8,0,1),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RB, RA}},
-
-{"mulhdu",	XO(31,9,0,0),	XO_MASK,     PPC64,	PPCNONE,	{RT, RA, RB}},
-{"mulhdu.",	XO(31,9,0,1),	XO_MASK,     PPC64,	PPCNONE,	{RT, RA, RB}},
-
-{"addc",	XO(31,10,0,0),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"subc.",	XO(31,8,0,1),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RB, RA}},
+ 
+{"mulhdu",	XO(31,9,0,0),	XO_MASK,     PPC64|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"mulhdu.",	XO(31,9,0,1),	XO_MASK,     PPC64|PPCVLE, PPCNONE,	{RT, RA, RB}},
+ 
+{"addc",	XO(31,10,0,0),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"a",		XO(31,10,0,0),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
-{"addc.",	XO(31,10,0,1),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"addc.",	XO(31,10,0,1),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"a.",		XO(31,10,0,1),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
 
-{"mulhwu",	XO(31,11,0,0),	XO_MASK,     PPC,	PPCNONE,	{RT, RA, RB}},
-{"mulhwu.",	XO(31,11,0,1),	XO_MASK,     PPC,	PPCNONE,	{RT, RA, RB}},
+{"mulhwu",	XO(31,11,0,0),	XO_MASK,     PPC|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"mulhwu.",	XO(31,11,0,1),	XO_MASK,     PPC|PPCVLE, PPCNONE,	{RT, RA, RB}},
 
-{"isellt",	X(31,15),	X_MASK,      PPCISEL,	PPCNONE,	{RT, RA, RB}},
+{"isellt",	X(31,15),	X_MASK,      PPCISEL,	PPCNONE,	{RT, RA0, RB}},
 
 {"tlbilxlpid",	XTO(31,18,0),	XTO_MASK, E500MC|PPCA2,	PPCNONE,	{0}},
 {"tlbilxpid",	XTO(31,18,1),	XTO_MASK, E500MC|PPCA2,	PPCNONE,	{0}},
@@ -3570,86 +4242,86 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"tlbilx",	X(31,18),	X_MASK,   E500MC|PPCA2,	PPCNONE,	{T, RA0, RB}},
 
 {"mfcr",	XFXM(31,19,0,0), XFXFXM_MASK, POWER4,	PPCNONE,	{RT, FXM4}},
-{"mfcr",	XFXM(31,19,0,0), XRARB_MASK, COM,	POWER4,		{RT}},
+{"mfcr",	XFXM(31,19,0,0), XRARB_MASK, COM|PPCVLE, POWER4,	{RT}},
 {"mfocrf",	XFXM(31,19,0,1), XFXFXM_MASK, COM,	PPCNONE,	{RT, FXM}},
 
-{"lwarx",	X(31,20),	XEH_MASK,    PPC,	PPCNONE,	{RT, RA0, RB, EH}},
-
-{"ldx",		X(31,21),	X_MASK,      PPC64,	PPCNONE,	{RT, RA0, RB}},
-
-{"icbt",	X(31,22),	X_MASK, BOOKE|PPCE300|PPCA2|PPC476, PPCNONE, {CT, RA, RB}},
-
-{"lwzx",	X(31,23),	X_MASK,      PPCCOM,	PPCNONE,	{RT, RA0, RB}},
+{"lwarx",	X(31,20),	XEH_MASK,    PPC|PPCVLE, PPCNONE,	{RT, RA0, RB, EH}},
+ 
+{"ldx",		X(31,21),	X_MASK,	     PPC64|PPCVLE, PPCNONE,	{RT, RA0, RB}},
+ 
+{"icbt",	X(31,22),	X_MASK,	     BOOKE|PPCE300|PPCA2|PPC476|PPCVLE, PPCNONE, {CT, RA0, RB}},
+ 
+{"lwzx",	X(31,23),	X_MASK,	     PPCCOM|PPCVLE, PPCNONE,	{RT, RA0, RB}},
 {"lx",		X(31,23),	X_MASK,      PWRCOM,	PPCNONE,	{RT, RA, RB}},
 
-{"slw",		XRC(31,24,0),	X_MASK,      PPCCOM,	PPCNONE,	{RA, RS, RB}},
+{"slw",		XRC(31,24,0),	X_MASK,	     PPCCOM|PPCVLE, PPCNONE,	{RA, RS, RB}},
 {"sl",		XRC(31,24,0),	X_MASK,      PWRCOM,	PPCNONE,	{RA, RS, RB}},
-{"slw.",	XRC(31,24,1),	X_MASK,      PPCCOM,	PPCNONE,	{RA, RS, RB}},
+{"slw.",	XRC(31,24,1),	X_MASK,	     PPCCOM|PPCVLE, PPCNONE,	{RA, RS, RB}},
 {"sl.",		XRC(31,24,1),	X_MASK,      PWRCOM,	PPCNONE,	{RA, RS, RB}},
 
-{"cntlzw",	XRC(31,26,0),	XRB_MASK,    PPCCOM,	PPCNONE,	{RA, RS}},
+{"cntlzw",	XRC(31,26,0),	XRB_MASK,    PPCCOM|PPCVLE, PPCNONE,	{RA, RS}},
 {"cntlz",	XRC(31,26,0),	XRB_MASK,    PWRCOM,	PPCNONE,	{RA, RS}},
-{"cntlzw.",	XRC(31,26,1),	XRB_MASK,    PPCCOM,	PPCNONE,	{RA, RS}},
+{"cntlzw.",	XRC(31,26,1),	XRB_MASK,    PPCCOM|PPCVLE, PPCNONE,	{RA, RS}},
 {"cntlz.",	XRC(31,26,1),	XRB_MASK,    PWRCOM,	PPCNONE,	{RA, RS}},
 
 {"sld",		XRC(31,27,0),	X_MASK,      PPC64,	PPCNONE,	{RA, RS, RB}},
 {"sld.",	XRC(31,27,1),	X_MASK,      PPC64,	PPCNONE,	{RA, RS, RB}},
 
-{"and",		XRC(31,28,0),	X_MASK,      COM,	PPCNONE,	{RA, RS, RB}},
-{"and.",	XRC(31,28,1),	X_MASK,      COM,	PPCNONE,	{RA, RS, RB}},
+{"and",		XRC(31,28,0),	X_MASK,      COM|PPCVLE, PPCNONE,	{RA, RS, RB}},
+{"and.",	XRC(31,28,1),	X_MASK,	     COM|PPCVLE, PPCNONE,	{RA, RS, RB}},
 
 {"maskg",	XRC(31,29,0),	X_MASK,      M601,	PPCA2,		{RA, RS, RB}},
 {"maskg.",	XRC(31,29,1),	X_MASK,      M601,	PPCA2,		{RA, RS, RB}},
 
-{"ldepx",	X(31,29),	X_MASK,   E500MC|PPCA2,	PPCNONE,	{RT, RA, RB}},
-{"lwepx",	X(31,31),	X_MASK,   E500MC|PPCA2,	PPCNONE,	{RT, RA, RB}},
+{"ldepx",	X(31,29),	X_MASK,      E500MC|PPCA2|PPCVLE, PPCNONE, {RT, RA0, RB}},
+{"lwepx",	X(31,31),	X_MASK,	     E500MC|PPCA2|PPCVLE, PPCNONE, {RT, RA0, RB}},
 
-{"cmplw",	XOPL(31,32,0),	XCMPL_MASK,  PPCCOM,	PPCNONE,	{OBF, RA, RB}},
+{"cmplw",	XOPL(31,32,0),	XCMPL_MASK,  PPCCOM|PPCVLE, PPCNONE,	{OBF, RA, RB}},
 {"cmpld",	XOPL(31,32,1),	XCMPL_MASK,  PPC64,	PPCNONE,	{OBF, RA, RB}},
-{"cmpl",	X(31,32),	XCMP_MASK,   PPC,	PPCNONE,	{BF, L, RA, RB}},
+{"cmpl",	X(31,32),	XCMP_MASK,   PPC|PPCVLE, PPCNONE,	{BF, L, RA, RB}},
 {"cmpl",	X(31,32),	XCMPL_MASK,  PWRCOM,	PPC,		{BF, RA, RB}},
 
-{"lvsr",	X(31,38),	X_MASK,      PPCVEC,	PPCNONE,	{VD, RA, RB}},
-{"lvehx",	X(31,39),	X_MASK,      PPCVEC,	PPCNONE,	{VD, RA, RB}},
+{"lvsr",	X(31,38),	X_MASK,      PPCVEC,	PPCNONE,	{VD, RA0, RB}},
+{"lvehx",	X(31,39),	X_MASK,      PPCVEC,	PPCNONE,	{VD, RA0, RB}},
 {"lhfcmx",	APU(31,39,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
 
-{"iselgt",	X(31,47),	X_MASK,      PPCISEL,	PPCNONE,	{RT, RA, RB}},
+{"iselgt",	X(31,47),	X_MASK,      PPCISEL,	PPCNONE,	{RT, RA0, RB}},
 
-{"lvewx",	X(31,71),	X_MASK,      PPCVEC,	PPCNONE,	{VD, RA, RB}},
+{"lvewx",	X(31,71),	X_MASK,      PPCVEC,	PPCNONE,	{VD, RA0, RB}},
 
 {"addg6s",	XO(31,74,0,0),	XO_MASK,     POWER6,	PPCNONE,	{RT, RA, RB}},
 
-{"iseleq",	X(31,79),	X_MASK,      PPCISEL,	PPCNONE,	{RT, RA, RB}},
+{"iseleq",	X(31,79),	X_MASK,      PPCISEL,	PPCNONE,	{RT, RA0, RB}},
 
-{"isel",	XISEL(31,15), XISEL_MASK, PPCISEL|TITAN, PPCNONE,	{RT, RA, RB, CRB}},
+{"isel",	XISEL(31,15), XISEL_MASK, PPCISEL|TITAN, PPCNONE,	{RT, RA0, RB, CRB}},
 
-{"subf",	XO(31,40,0,0),	XO_MASK,     PPC,	PPCNONE,	{RT, RA, RB}},
-{"sub",		XO(31,40,0,0),	XO_MASK,     PPC,	PPCNONE,	{RT, RB, RA}},
-{"subf.",	XO(31,40,0,1),	XO_MASK,     PPC,	PPCNONE,	{RT, RA, RB}},
-{"sub.",	XO(31,40,0,1),	XO_MASK,     PPC,	PPCNONE,	{RT, RB, RA}},
+{"subf",	XO(31,40,0,0),	XO_MASK,     PPC|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"sub",		XO(31,40,0,0),	XO_MASK,     PPC|PPCVLE, PPCNONE,	{RT, RB, RA}},
+{"subf.",	XO(31,40,0,1),	XO_MASK,     PPC|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"sub.",	XO(31,40,0,1),	XO_MASK,     PPC|PPCVLE, PPCNONE,	{RT, RB, RA}},
 
 {"eratilx",	X(31,51),	X_MASK,	     PPCA2,	PPCNONE,	{ERAT_T, RA, RB}},
 
 {"lbarx",	X(31,52),	XEH_MASK,    POWER7,	PPCNONE,	{RT, RA0, RB, EH}},
 
-{"ldux",	X(31,53),	X_MASK,      PPC64,	PPCNONE,	{RT, RAL, RB}},
-
-{"dcbst",	X(31,54),	XRT_MASK,    PPC,	PPCNONE,	{RA, RB}},
-
-{"lwzux",	X(31,55),	X_MASK,      PPCCOM,	PPCNONE,	{RT, RAL, RB}},
+{"ldux",	X(31,53),	X_MASK,      PPC64|PPCVLE, PPCNONE,	{RT, RAL, RB}},
+ 
+{"dcbst",	X(31,54),	XRT_MASK,    PPC|PPCVLE, PPCNONE,	{RA0, RB}},
+ 
+{"lwzux",	X(31,55),	X_MASK,	     PPCCOM|PPCVLE, PPCNONE,	{RT, RAL, RB}},
 {"lux",		X(31,55),	X_MASK,      PWRCOM,	PPCNONE,	{RT, RA, RB}},
 
-{"cntlzd",	XRC(31,58,0),	XRB_MASK,    PPC64,	PPCNONE,	{RA, RS}},
-{"cntlzd.",	XRC(31,58,1),	XRB_MASK,    PPC64,	PPCNONE,	{RA, RS}},
+{"cntlzd",	XRC(31,58,0),	XRB_MASK,    PPC64|PPCVLE, PPCNONE,	{RA, RS}},
+{"cntlzd.",	XRC(31,58,1),	XRB_MASK,    PPC64|PPCVLE, PPCNONE,	{RA, RS}},
 
-{"andc",	XRC(31,60,0),	X_MASK,      COM,	PPCNONE,	{RA, RS, RB}},
-{"andc.",	XRC(31,60,1),	X_MASK,      COM,	PPCNONE,	{RA, RS, RB}},
+{"andc",	XRC(31,60,0),	X_MASK,	     COM|PPCVLE, PPCNONE,	{RA, RS, RB}},
+{"andc.",	XRC(31,60,1),	X_MASK,	     COM|PPCVLE, PPCNONE,	{RA, RS, RB}},
 
 {"waitrsv",	X(31,62)|(1<<21), 0xffffffff, POWER7|E500MC|PPCA2, PPCNONE, {0}},
 {"waitimpl",	X(31,62)|(2<<21), 0xffffffff, POWER7|E500MC|PPCA2, PPCNONE, {0}},
-{"wait",	X(31,62),	  XWC_MASK,   POWER7|E500MC|PPCA2, PPCNONE, {WC}},
-
-{"dcbstep",	XRT(31,63,0),	XRT_MASK, E500MC|PPCA2,	PPCNONE,	{RA, RB}},
+{"wait",	X(31,62),	XWC_MASK,    POWER7|E500MC|PPCA2|PPCVLE, PPCNONE, {WC}},
+ 
+{"dcbstep",	XRT(31,63,0),	XRT_MASK,    E500MC|PPCA2|PPCVLE, PPCNONE, {RA0, RB}},
 
 {"tdlgt",	XTO(31,68,TOLGT), XTO_MASK,  PPC64,	PPCNONE,	{RA, RB}},
 {"tdllt",	XTO(31,68,TOLLT), XTO_MASK,  PPC64,	PPCNONE,	{RA, RB}},
@@ -3665,90 +4337,96 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"tdle",	XTO(31,68,TOLE),  XTO_MASK,  PPC64,	PPCNONE,	{RA, RB}},
 {"tdng",	XTO(31,68,TONG),  XTO_MASK,  PPC64,	PPCNONE,	{RA, RB}},
 {"tdne",	XTO(31,68,TONE),  XTO_MASK,  PPC64,	PPCNONE,	{RA, RB}},
-{"td",		X(31,68),	X_MASK,      PPC64,	PPCNONE,	{TO, RA, RB}},
+{"td",		X(31,68),	X_MASK,      PPC64|PPCVLE, PPCNONE,	{TO, RA, RB}},
 
 {"lwfcmx",	APU(31,71,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
-{"mulhd",	XO(31,73,0,0),	XO_MASK,     PPC64,	PPCNONE,	{RT, RA, RB}},
-{"mulhd.",	XO(31,73,0,1),	XO_MASK,     PPC64,	PPCNONE,	{RT, RA, RB}},
-
-{"mulhw",	XO(31,75,0,0),	XO_MASK,     PPC,	PPCNONE,	{RT, RA, RB}},
-{"mulhw.",	XO(31,75,0,1),	XO_MASK,     PPC,	PPCNONE,	{RT, RA, RB}},
+{"mulhd",	XO(31,73,0,0),	XO_MASK,     PPC64|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"mulhd.",	XO(31,73,0,1),	XO_MASK,     PPC64|PPCVLE, PPCNONE,	{RT, RA, RB}},
+ 
+{"mulhw",	XO(31,75,0,0),	XO_MASK,     PPC|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"mulhw.",	XO(31,75,0,1),	XO_MASK,     PPC|PPCVLE, PPCNONE,	{RT, RA, RB}},
 
 {"dlmzb",	XRC(31,78,0), X_MASK, PPC403|PPC440|TITAN, PPCNONE,	{RA, RS, RB}},
 {"dlmzb.",	XRC(31,78,1), X_MASK, PPC403|PPC440|TITAN, PPCNONE,	{RA, RS, RB}},
 
 {"mtsrd",	X(31,82),  XRB_MASK|(1<<20), PPC64,	PPCNONE,	{SR, RS}},
 
-{"mfmsr",	X(31,83),	XRARB_MASK,  COM,	PPCNONE,	{RT}},
-
-{"ldarx",	X(31,84),	XEH_MASK,    PPC64,	PPCNONE,	{RT, RA0, RB, EH}},
+{"mfmsr",	X(31,83),	XRARB_MASK,  COM|PPCVLE, PPCNONE,	{RT}},
+ 
+{"ldarx",	X(31,84),	XEH_MASK,    PPC64|PPCVLE, PPCNONE,	{RT, RA0, RB, EH}},
 
-{"dcbfl",	XOPL(31,86,1),	XRT_MASK,    POWER5,	PPC476,		{RA, RB}},
-{"dcbf",	X(31,86),	XLRT_MASK,   PPC,	PPCNONE,	{RA, RB, L}},
+{"dcbfl",	XOPL(31,86,1),	XRT_MASK,    POWER5,	PPC476,		{RA0, RB}},
+{"dcbf",	X(31,86),	XLRT_MASK,   PPC|PPCVLE, PPCNONE,	{RA0, RB, L}},
 
-{"lbzx",	X(31,87),	X_MASK,      COM,	PPCNONE,	{RT, RA0, RB}},
+{"lbzx",	X(31,87),	X_MASK,	     COM|PPCVLE, PPCNONE,	{RT, RA0, RB}},
+ 
+{"lbepx",	X(31,95),	X_MASK,	     E500MC|PPCA2|PPCVLE, PPCNONE, {RT, RA0, RB}},
 
-{"lbepx",	X(31,95),	X_MASK,   E500MC|PPCA2,	PPCNONE,	{RT, RA, RB}},
+{"dni",		XRC(31,97,1),	XRB_MASK,    E6500,	PPCNONE,	{DUI, DCTL}},
 
-{"lvx",		X(31,103),	X_MASK,      PPCVEC,	PPCNONE,	{VD, RA, RB}},
+{"lvx",		X(31,103),	X_MASK,      PPCVEC,	PPCNONE,	{VD, RA0, RB}},
 {"lqfcmx",	APU(31,103,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
 
-{"neg",		XO(31,104,0,0),	XORB_MASK,   COM,	PPCNONE,	{RT, RA}},
-{"neg.",	XO(31,104,0,1),	XORB_MASK,   COM,	PPCNONE,	{RT, RA}},
+{"neg",		XO(31,104,0,0),	XORB_MASK,   COM|PPCVLE, PPCNONE,	{RT, RA}},
+{"neg.",	XO(31,104,0,1),	XORB_MASK,   COM|PPCVLE, PPCNONE,	{RT, RA}},
 
 {"mul",		XO(31,107,0,0),	XO_MASK,     M601,	PPCNONE,	{RT, RA, RB}},
 {"mul.",	XO(31,107,0,1),	XO_MASK,     M601,	PPCNONE,	{RT, RA, RB}},
 
+{"mvidsplt",	X(31,110),	X_MASK,      PPCVEC2,	PPCNONE,	{VD, RA, RB}},
+
 {"mtsrdin",	X(31,114),	XRA_MASK,    PPC64,	PPCNONE,	{RS, RB}},
 
 {"lharx",	X(31,116),	XEH_MASK,    POWER7,	PPCNONE,	{RT, RA0, RB, EH}},
 
 {"clf",		X(31,118),	XTO_MASK,    POWER,	PPCNONE,	{RA, RB}},
 
-{"lbzux",	X(31,119),	X_MASK,      COM,	PPCNONE,	{RT, RAL, RB}},
-
-{"popcntb",	X(31,122),	XRB_MASK,    POWER5,	PPCNONE,	{RA, RS}},
+{"lbzux",	X(31,119),	X_MASK,	     COM|PPCVLE, PPCNONE,	{RT, RAL, RB}},
+ 
+{"popcntb",	X(31,122),	XRB_MASK,    POWER5|PPCVLE, PPCNONE,	{RA, RS}},
 
 {"not",		XRC(31,124,0),	X_MASK,      COM,	PPCNONE,	{RA, RS, RBS}},
-{"nor",		XRC(31,124,0),	X_MASK,      COM,	PPCNONE,	{RA, RS, RB}},
+{"nor",		XRC(31,124,0),	X_MASK,	     COM|PPCVLE, PPCNONE,	{RA, RS, RB}},
 {"not.",	XRC(31,124,1),	X_MASK,      COM,	PPCNONE,	{RA, RS, RBS}},
-{"nor.",	XRC(31,124,1),	X_MASK,      COM,	PPCNONE,	{RA, RS, RB}},
-
-{"dcbfep",	XRT(31,127,0),	XRT_MASK, E500MC|PPCA2,	PPCNONE,	{RA, RB}},
+{"nor.",	XRC(31,124,1),	X_MASK,      COM|PPCVLE, PPCNONE,	{RA, RS, RB}},
 
-{"wrtee",	X(31,131), XRARB_MASK, PPC403|BOOKE|PPCA2|PPC476, PPCNONE, {RS}},
+{"dcbfep",	XRT(31,127,0),	XRT_MASK,    E500MC|PPCA2|PPCVLE, PPCNONE, {RA0, RB}},
+ 
+{"wrtee",	X(31,131),	XRARB_MASK,  PPC403|BOOKE|PPCA2|PPC476|PPCVLE, PPCNONE, {RS}},
+ 
+{"dcbtstls",	X(31,134),	X_MASK,	     PPCCHLK|PPC476|TITAN|PPCVLE, PPCNONE, {CT, RA0, RB}},
 
-{"dcbtstls",	X(31,134), X_MASK, PPCCHLK|PPC476|TITAN, PPCNONE,	{CT, RA, RB}},
-
-{"stvebx",	X(31,135),	X_MASK,      PPCVEC,	PPCNONE,	{VS, RA, RB}},
+{"stvebx",	X(31,135),	X_MASK,      PPCVEC,	PPCNONE,	{VS, RA0, RB}},
 {"stbfcmx",	APU(31,135,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
 
-{"subfe",	XO(31,136,0,0),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"subfe",	XO(31,136,0,0),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"sfe",		XO(31,136,0,0),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
-{"subfe.",	XO(31,136,0,1),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"subfe.",	XO(31,136,0,1),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"sfe.",	XO(31,136,0,1),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
 
-{"adde",	XO(31,138,0,0),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"adde",	XO(31,138,0,0),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"ae",		XO(31,138,0,0),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
-{"adde.",	XO(31,138,0,1),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"adde.",	XO(31,138,0,1),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"ae.",		XO(31,138,0,1),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
 
-{"dcbtstlse",	X(31,142),	X_MASK,      PPCCHLK,	PPCNONE,	{CT, RA, RB}},
+{"mviwsplt",	X(31,142),	X_MASK,      PPCVEC2,	PPCNONE,	{VD, RA, RB}},
+
+{"dcbtstlse",	X(31,142),	X_MASK,      PPCCHLK,	E500MC,		{CT, RA0, RB}},
 
 {"mtcr",	XFXM(31,144,0xff,0), XRARB_MASK, COM,	PPCNONE,	{RS}},
 {"mtcrf",	XFXM(31,144,0,0), XFXFXM_MASK, COM,	PPCNONE,	{FXM, RS}},
 {"mtocrf",	XFXM(31,144,0,1), XFXFXM_MASK, COM,	PPCNONE,	{FXM, RS}},
 
-{"mtmsr",	X(31,146),	XRLARB_MASK, COM,	PPCNONE,	{RS, A_L}},
+{"mtmsr",	X(31,146),	XRLARB_MASK, COM|PPCVLE, PPCNONE,	{RS, A_L}},
 
 {"eratsx",	XRC(31,147,0),	X_MASK,	     PPCA2,	PPCNONE,	{RT, RA0, RB}},
 {"eratsx.",	XRC(31,147,1),	X_MASK,	     PPCA2,	PPCNONE,	{RT, RA0, RB}},
 
-{"stdx",	X(31,149),	X_MASK,      PPC64,	PPCNONE,	{RS, RA0, RB}},
-
-{"stwcx.",	XRC(31,150,1),	X_MASK,      PPC,	PPCNONE,	{RS, RA0, RB}},
-
-{"stwx",	X(31,151),	X_MASK,      PPCCOM,	PPCNONE,	{RS, RA0, RB}},
+{"stdx",	X(31,149),	X_MASK,      PPC64|PPCVLE, PPCNONE,	{RS, RA0, RB}},
+ 
+{"stwcx.",	XRC(31,150,1),	X_MASK,	     PPC|PPCVLE, PPCNONE,	{RS, RA0, RB}},
+ 
+{"stwx",	X(31,151),	X_MASK,      PPCCOM|PPCVLE, PPCNONE,	{RS, RA0, RB}},
 {"stx",		X(31,151),	X_MASK,      PWRCOM,	PPCNONE,	{RS, RA, RB}},
 
 {"slq",		XRC(31,152,0),	X_MASK,      M601,	PPCNONE,	{RA, RS, RB}},
@@ -3759,28 +4437,28 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"prtyw",	X(31,154),	XRB_MASK, POWER6|PPCA2|PPC476, PPCNONE,	{RA, RS}},
 
-{"stdepx",	X(31,157),	X_MASK,   E500MC|PPCA2,	PPCNONE,	{RS, RA, RB}},
-
-{"stwepx",	X(31,159),	X_MASK,   E500MC|PPCA2,	PPCNONE,	{RS, RA, RB}},
-
-{"wrteei",	X(31,163), XE_MASK, PPC403|BOOKE|PPCA2|PPC476, PPCNONE,	{E}},
+{"stdepx",	X(31,157),	X_MASK,	     E500MC|PPCA2|PPCVLE, PPCNONE, {RS, RA0, RB}},
+ 
+{"stwepx",	X(31,159),	X_MASK,	     E500MC|PPCA2|PPCVLE, PPCNONE, {RS, RA0, RB}},
+ 
+{"wrteei",	X(31,163),	XE_MASK,     PPC403|BOOKE|PPCA2|PPC476|PPCVLE, PPCNONE, {E}},
+ 
+{"dcbtls",	X(31,166),	X_MASK,	     PPCCHLK|PPC476|TITAN|PPCVLE, PPCNONE, {CT, RA0, RB}},
 
-{"dcbtls",	X(31,166), X_MASK, PPCCHLK|PPC476|TITAN, PPCNONE,	{CT, RA, RB}},
-
-{"stvehx",	X(31,167),	X_MASK,      PPCVEC,	PPCNONE,	{VS, RA, RB}},
+{"stvehx",	X(31,167),	X_MASK,      PPCVEC,	PPCNONE,	{VS, RA0, RB}},
 {"sthfcmx",	APU(31,167,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
 
-{"dcbtlse",	X(31,174),	X_MASK,      PPCCHLK,	PPCNONE,	{CT, RA, RB}},
+{"dcbtlse",	X(31,174),	X_MASK,      PPCCHLK,	E500MC,		{CT, RA0, RB}},
 
 {"mtmsrd",	X(31,178),	XRLARB_MASK, PPC64,	PPCNONE,	{RS, A_L}},
 
 {"eratre",	X(31,179),	X_MASK,	     PPCA2,	PPCNONE,	{RT, RA, WS}},
 
-{"stdux",	X(31,181),	X_MASK,      PPC64,	PPCNONE,	{RS, RAS, RB}},
+{"stdux",	X(31,181),	X_MASK,      PPC64|PPCVLE, PPCNONE,	{RS, RAS, RB}},
 
 {"wchkall",	X(31,182),	X_MASK,      PPCA2,	PPCNONE,	{OBF}},
 
-{"stwux",	X(31,183),	X_MASK,      PPCCOM,	PPCNONE,	{RS, RAS, RB}},
+{"stwux",	X(31,183),	X_MASK,      PPCCOM|PPCVLE, PPCNONE,	{RS, RAS, RB}},
 {"stux",	X(31,183),	X_MASK,      PWRCOM,	PPCNONE,	{RS, RA0, RB}},
 
 {"sliq",	XRC(31,184,0),	X_MASK,      M601,	PPCNONE,	{RA, RS, SH}},
@@ -3788,20 +4466,22 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"prtyd",	X(31,186),	XRB_MASK, POWER6|PPCA2,	PPCNONE,	{RA, RS}},
 
-{"stvewx",	X(31,199),	X_MASK,      PPCVEC,	PPCNONE,	{VS, RA, RB}},
+{"icblq.",	XRC(31,198,1),	X_MASK,      E6500,	PPCNONE,	{CT, RA0, RB}},
+
+{"stvewx",	X(31,199),	X_MASK,      PPCVEC,	PPCNONE,	{VS, RA0, RB}},
 {"stwfcmx",	APU(31,199,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
 
-{"subfze",	XO(31,200,0,0),	XORB_MASK,   PPCCOM,	PPCNONE,	{RT, RA}},
+{"subfze",	XO(31,200,0,0),	XORB_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RT, RA}},
 {"sfze",	XO(31,200,0,0),	XORB_MASK,   PWRCOM,	PPCNONE,	{RT, RA}},
-{"subfze.",	XO(31,200,0,1),	XORB_MASK,   PPCCOM,	PPCNONE,	{RT, RA}},
+{"subfze.",	XO(31,200,0,1),	XORB_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RT, RA}},
 {"sfze.",	XO(31,200,0,1),	XORB_MASK,   PWRCOM,	PPCNONE,	{RT, RA}},
 
-{"addze",	XO(31,202,0,0),	XORB_MASK,   PPCCOM,	PPCNONE,	{RT, RA}},
+{"addze",	XO(31,202,0,0),	XORB_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RT, RA}},
 {"aze",		XO(31,202,0,0),	XORB_MASK,   PWRCOM,	PPCNONE,	{RT, RA}},
-{"addze.",	XO(31,202,0,1),	XORB_MASK,   PPCCOM,	PPCNONE,	{RT, RA}},
+{"addze.",	XO(31,202,0,1),	XORB_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RT, RA}},
 {"aze.",	XO(31,202,0,1),	XORB_MASK,   PWRCOM,	PPCNONE,	{RT, RA}},
 
-{"msgsnd",	XRTRA(31,206,0,0), XRTRA_MASK, E500MC|PPCA2, PPCNONE,	{RB}},
+{"msgsnd",	XRTRA(31,206,0,0), XRTRA_MASK, E500MC|PPCA2|PPCVLE, PPCNONE, {RB}},
 
 {"mtsr",	X(31,210), XRB_MASK|(1<<20), COM,	NON32,  	{SR, RS}},
 
@@ -3809,9 +4489,9 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"ldawx.",	XRC(31,212,1),	X_MASK,	     PPCA2,	PPCNONE,	{RT, RA0, RB}},
 
-{"stdcx.",	XRC(31,214,1),	X_MASK,      PPC64,	PPCNONE,	{RS, RA0, RB}},
-
-{"stbx",	X(31,215),	X_MASK,      COM,	PPCNONE,	{RS, RA0, RB}},
+{"stdcx.",	XRC(31,214,1),	X_MASK,      PPC64|PPCVLE, PPCNONE,	{RS, RA0, RB}},
+ 
+{"stbx",	X(31,215),	X_MASK,	     COM|PPCVLE, PPCNONE,	{RS, RA0, RB}},
 
 {"sllq",	XRC(31,216,0),	X_MASK,      M601,	PPCNONE,	{RA, RS, RB}},
 {"sllq.",	XRC(31,216,1),	X_MASK,      M601,	PPCNONE,	{RA, RS, RB}},
@@ -3819,61 +4499,65 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"sleq",	XRC(31,217,0),	X_MASK,      M601,	PPCNONE,	{RA, RS, RB}},
 {"sleq.",	XRC(31,217,1),	X_MASK,      M601,	PPCNONE,	{RA, RS, RB}},
 
-{"stbepx",	X(31,223),	X_MASK,   E500MC|PPCA2,	PPCNONE,	{RS, RA, RB}},
+{"stbepx",	X(31,223),	X_MASK,      E500MC|PPCA2|PPCVLE, PPCNONE, {RS, RA0, RB}},
+ 
+{"icblc",	X(31,230),	X_MASK,	PPCCHLK|PPC476|TITAN|PPCVLE, PPCNONE, {CT, RA0, RB}},
 
-{"icblc",	X(31,230), X_MASK, PPCCHLK|PPC476|TITAN, PPCNONE,	{CT, RA, RB}},
-
-{"stvx",	X(31,231),	X_MASK,      PPCVEC,	PPCNONE,	{VS, RA, RB}},
+{"stvx",	X(31,231),	X_MASK,      PPCVEC,	PPCNONE,	{VS, RA0, RB}},
 {"stqfcmx",	APU(31,231,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
 
-{"subfme",	XO(31,232,0,0),	XORB_MASK,   PPCCOM,	PPCNONE,	{RT, RA}},
+{"subfme",	XO(31,232,0,0),	XORB_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RT, RA}},
 {"sfme",	XO(31,232,0,0),	XORB_MASK,   PWRCOM,	PPCNONE,	{RT, RA}},
-{"subfme.",	XO(31,232,0,1),	XORB_MASK,   PPCCOM,	PPCNONE,	{RT, RA}},
+{"subfme.",	XO(31,232,0,1),	XORB_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RT, RA}},
 {"sfme.",	XO(31,232,0,1),	XORB_MASK,   PWRCOM,	PPCNONE,	{RT, RA}},
 
-{"mulld",	XO(31,233,0,0),	XO_MASK,     PPC64,	PPCNONE,	{RT, RA, RB}},
-{"mulld.",	XO(31,233,0,1),	XO_MASK,     PPC64,	PPCNONE,	{RT, RA, RB}},
-
-{"addme",	XO(31,234,0,0),	XORB_MASK,   PPCCOM,	PPCNONE,	{RT, RA}},
+{"mulld",	XO(31,233,0,0),	XO_MASK,     PPC64|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"mulld.",	XO(31,233,0,1),	XO_MASK,     PPC64|PPCVLE, PPCNONE,	{RT, RA, RB}},
+ 
+{"addme",	XO(31,234,0,0),	XORB_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RT, RA}},
 {"ame",		XO(31,234,0,0),	XORB_MASK,   PWRCOM,	PPCNONE,	{RT, RA}},
-{"addme.",	XO(31,234,0,1),	XORB_MASK,   PPCCOM,	PPCNONE,	{RT, RA}},
+{"addme.",	XO(31,234,0,1),	XORB_MASK,   PPCCOM|PPCVLE, PPCNONE,	{RT, RA}},
 {"ame.",	XO(31,234,0,1),	XORB_MASK,   PWRCOM,	PPCNONE,	{RT, RA}},
 
-{"mullw",	XO(31,235,0,0),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"mullw",	XO(31,235,0,0),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"muls",	XO(31,235,0,0),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
-{"mullw.",	XO(31,235,0,1),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"mullw.",	XO(31,235,0,1),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"muls.",	XO(31,235,0,1),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
 
 {"icblce",	X(31,238),	X_MASK,      PPCCHLK,	E500MC|PPCA2,	{CT, RA, RB}},
-{"msgclr",	XRTRA(31,238,0,0),XRTRA_MASK,E500MC|PPCA2, PPCNONE,	{RB}},
+{"msgclr",	XRTRA(31,238,0,0),XRTRA_MASK, E500MC|PPCA2|PPCVLE, PPCNONE, {RB}},
 {"mtsrin",	X(31,242),	XRA_MASK,    PPC,	NON32,  	{RS, RB}},
 {"mtsri",	X(31,242),	XRA_MASK,    POWER,	NON32,		{RS, RB}},
 
-{"dcbtstt",	XRT(31,246,0x10), XRT_MASK,  POWER7,	PPCNONE,	{RA, RB}},
-{"dcbtst",	X(31,246),	X_MASK,      POWER4,	PPCNONE,	{RA, RB, CT}},
-{"dcbtst",	X(31,246),	X_MASK,      PPC,	POWER4,		{CT, RA, RB}},
-
-{"stbux",	X(31,247),	X_MASK,      COM,	PPCNONE,	{RS, RAS, RB}},
+{"dcbtstt",	XRT(31,246,0x10), XRT_MASK,  POWER7,	PPCNONE,	{RA0, RB}},
+{"dcbtst",	X(31,246),	X_MASK,      POWER4,	PPCNONE,	{RA0, RB, CT}},
+{"dcbtst",	X(31,246),	X_MASK,      PPC|PPCVLE, POWER4,	{CT, RA0, RB}},
+ 
+{"stbux",	X(31,247),	X_MASK,	     COM|PPCVLE, PPCNONE,	{RS, RAS, RB}},
 
 {"slliq",	XRC(31,248,0),	X_MASK,      M601,	PPCNONE,	{RA, RS, SH}},
 {"slliq.",	XRC(31,248,1),	X_MASK,      M601,	PPCNONE,	{RA, RS, SH}},
 
 {"bpermd",	X(31,252),	X_MASK,   POWER7|PPCA2,	PPCNONE,	{RA, RS, RB}},
 
-{"dcbtstep",	XRT(31,255,0),	X_MASK,   E500MC|PPCA2,	PPCNONE,	{RT, RA, RB}},
+{"dcbtstep",	XRT(31,255,0),	X_MASK,   E500MC|PPCA2,	PPCNONE,	{RT, RA0, RB}},
 
-{"mfdcrx",	X(31,259),	X_MASK, BOOKE|PPCA2|PPC476, TITAN,	{RS, RA}},
+{"mfdcrx",	X(31,259),	X_MASK, BOOKE|PPCA2|PPC476|PPCVLE, TITAN, {RS, RA}},
 {"mfdcrx.",	XRC(31,259,1),	X_MASK,      PPCA2,	PPCNONE,	{RS, RA}},
 
+{"lvexbx",	X(31,261),	X_MASK,      PPCVEC2,	PPCNONE,	{VD, RA0, RB}},
+
 {"icbt",	X(31,262),	XRT_MASK,    PPC403,	PPCNONE,	{RA, RB}},
 
+{"lvepxl",	X(31,263),	X_MASK,      PPCVEC2,   PPCNONE,	{VD, RA0, RB}},
+
 {"ldfcmx",	APU(31,263,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
 {"doz",		XO(31,264,0,0),	XO_MASK,     M601,	PPCNONE,	{RT, RA, RB}},
 {"doz.",	XO(31,264,0,1),	XO_MASK,     M601,	PPCNONE,	{RT, RA, RB}},
 
-{"add",		XO(31,266,0,0),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"add",		XO(31,266,0,0),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"cax",		XO(31,266,0,0),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
-{"add.",	XO(31,266,0,1),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"add.",	XO(31,266,0,1),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"cax.",	XO(31,266,0,1),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
 
 {"ehpriv",	X(31,270),	0xffffffff, E500MC|PPCA2, PPCNONE,	{0}},
@@ -3885,34 +4569,37 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"lscbx",	XRC(31,277,0),	X_MASK,      M601,	PPCNONE,	{RT, RA, RB}},
 {"lscbx.",	XRC(31,277,1),	X_MASK,      M601,	PPCNONE,	{RT, RA, RB}},
 
-{"dcbtt",	XRT(31,278,0x10), XRT_MASK,  POWER7,	PPCNONE,	{RA, RB}},
-{"dcbt",	X(31,278),	X_MASK,      POWER4,	PPCNONE,	{RA, RB, CT}},
-{"dcbt",	X(31,278),	X_MASK,      PPC,	POWER4,		{CT, RA, RB}},
-
-{"lhzx",	X(31,279),	X_MASK,      COM,	PPCNONE,	{RT, RA0, RB}},
+{"dcbtt",	XRT(31,278,0x10), XRT_MASK,  POWER7,	PPCNONE,	{RA0, RB}},
+{"dcbt",	X(31,278),	X_MASK,      POWER4,	PPCNONE,	{RA0, RB, CT}},
+{"dcbt",	X(31,278),	X_MASK,      PPC|PPCVLE, POWER4,	{CT, RA0, RB}},
+ 
+{"lhzx",	X(31,279),	X_MASK,      COM|PPCVLE, PPCNONE,	{RT, RA0, RB}},
 
 {"cdtbcd",	X(31,282),	XRB_MASK,    POWER6,	PPCNONE,	{RA, RS}},
 
-{"eqv",		XRC(31,284,0),	X_MASK,      COM,	PPCNONE,	{RA, RS, RB}},
-{"eqv.",	XRC(31,284,1),	X_MASK,      COM,	PPCNONE,	{RA, RS, RB}},
+{"eqv",		XRC(31,284,0),	X_MASK,      COM|PPCVLE, PPCNONE,	{RA, RS, RB}},
+{"eqv.",	XRC(31,284,1),	X_MASK,	     COM|PPCVLE, PPCNONE,	{RA, RS, RB}},
+
+{"lhepx",	X(31,287),	X_MASK,   E500MC|PPCA2,	PPCNONE,	{RT, RA0, RB}},
 
-{"lhepx",	X(31,287),	X_MASK,   E500MC|PPCA2,	PPCNONE,	{RT, RA, RB}},
+{"mfdcrux",	X(31,291),	X_MASK,      PPC464|PPCVLE, PPCNONE,	{RS, RA}},
 
-{"mfdcrux",	X(31,291),	X_MASK,      PPC464,	PPCNONE,	{RS, RA}},
+{"lvexhx",	X(31,293),	X_MASK,      PPCVEC2,	PPCNONE,	{VD, RA0, RB}},
+{"lvepx",	X(31,295),	X_MASK,      PPCVEC2,   PPCNONE,	{VD, RA0, RB}},
 
 {"tlbie",	X(31,306),	XRTLRA_MASK, PPC,	TITAN,  	{RB, L}},
 {"tlbi",	X(31,306),	XRT_MASK,    POWER,	PPCNONE,	{RA0, RB}},
 
-{"eciwx",	X(31,310),	X_MASK,      PPC,	TITAN,  	{RT, RA, RB}},
+{"eciwx",	X(31,310),	X_MASK,      PPC,	TITAN,  	{RT, RA0, RB}},
 
-{"lhzux",	X(31,311),	X_MASK,      COM,	PPCNONE,	{RT, RAL, RB}},
+{"lhzux",	X(31,311),	X_MASK,      COM|PPCVLE, PPCNONE,	{RT, RAL, RB}},
 
 {"cbcdtd",	X(31,314),	XRB_MASK,    POWER6,	PPCNONE,	{RA, RS}},
 
-{"xor",		XRC(31,316,0),	X_MASK,      COM,	PPCNONE,	{RA, RS, RB}},
-{"xor.",	XRC(31,316,1),	X_MASK,      COM,	PPCNONE,	{RA, RS, RB}},
+{"xor",		XRC(31,316,0),	X_MASK,      COM|PPCVLE, PPCNONE,	{RA, RS, RB}},
+{"xor.",	XRC(31,316,1),	X_MASK,	     COM|PPCVLE, PPCNONE,	{RA, RS, RB}},
 
-{"dcbtep",	XRT(31,319,0),	X_MASK,   E500MC|PPCA2,	PPCNONE,	{RT, RA, RB}},
+{"dcbtep",	XRT(31,319,0),	X_MASK,   E500MC|PPCA2,	PPCNONE,	{RT, RA0, RB}},
 
 {"mfexisr",	XSPR(31,323, 64), XSPR_MASK, PPC403,	PPCNONE,	{RT}},
 {"mfexier",	XSPR(31,323, 66), XSPR_MASK, PPC403,	PPCNONE,	{RT}},
@@ -3948,25 +4635,28 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mfdmasa3",	XSPR(31,323,219), XSPR_MASK, PPC403,	PPCNONE,	{RT}},
 {"mfdmacc3",	XSPR(31,323,220), XSPR_MASK, PPC403,	PPCNONE,	{RT}},
 {"mfdmasr",	XSPR(31,323,224), XSPR_MASK, PPC403,	PPCNONE,	{RT}},
-{"mfdcr",	X(31,323), X_MASK, PPC403|BOOKE|PPCA2|PPC476, TITAN,	{RT, SPR}},
+{"mfdcr",	X(31,323), X_MASK, PPC403|BOOKE|PPCA2|PPC476|PPCVLE, TITAN, {RT, SPR}},
 {"mfdcr.",	XRC(31,323,1),	X_MASK,      PPCA2,	PPCNONE,	{RT, SPR}},
 
-{"dcread",	X(31,326),	X_MASK,  PPC476|TITAN,	PPCNONE,	{RT, RA, RB}},
+{"lvexwx",	X(31,325),	X_MASK,      PPCVEC2,	PPCNONE,	{VD, RA0, RB}},
+
+{"dcread",	X(31,326),	X_MASK,  PPC476|TITAN,	PPCNONE,	{RT, RA0, RB}},
 
 {"div",		XO(31,331,0,0),	XO_MASK,     M601,	PPCNONE,	{RT, RA, RB}},
 {"div.",	XO(31,331,0,1),	XO_MASK,     M601,	PPCNONE,	{RT, RA, RB}},
 
-{"lxvdsx",	X(31,332),	XX1_MASK,    PPCVSX,	PPCNONE,	{XT6, RA, RB}},
+{"lxvdsx",	X(31,332),	XX1_MASK,    PPCVSX,	PPCNONE,	{XT6, RA0, RB}},
 
-{"mfpmr",	X(31,334),	X_MASK, PPCPMR|PPCE300,	PPCNONE,	{RT, PMR}},
+{"mfpmr",	X(31,334),	X_MASK, PPCPMR|PPCE300|PPCVLE, PPCNONE,	{RT, PMR}},
+{"mftmr",	X(31,366),	X_MASK,	PPCTMR|E6500,	PPCNONE,	{RT, TMR}},
 
 {"mfmq",	XSPR(31,339,  0), XSPR_MASK, M601,	PPCNONE,	{RT}},
-{"mfxer",	XSPR(31,339,  1), XSPR_MASK, COM,	PPCNONE,	{RT}},
+{"mfxer",	XSPR(31,339,  1), XSPR_MASK, COM|PPCVLE, PPCNONE,	{RT}},
 {"mfrtcu",	XSPR(31,339,  4), XSPR_MASK, COM,	TITAN,  	{RT}},
 {"mfrtcl",	XSPR(31,339,  5), XSPR_MASK, COM,	TITAN,  	{RT}},
 {"mfdec",	XSPR(31,339,  6), XSPR_MASK, MFDEC1,	PPCNONE,	{RT}},
-{"mflr",	XSPR(31,339,  8), XSPR_MASK, COM,	PPCNONE,	{RT}},
-{"mfctr",	XSPR(31,339,  9), XSPR_MASK, COM,	PPCNONE,	{RT}},
+{"mflr",	XSPR(31,339,  8), XSPR_MASK, COM|PPCVLE, PPCNONE,	{RT}},
+{"mfctr",	XSPR(31,339,  9), XSPR_MASK, COM|PPCVLE, PPCNONE,	{RT}},
 {"mftid",	XSPR(31,339, 17), XSPR_MASK, POWER,	PPCNONE,	{RT}},
 {"mfdsisr",	XSPR(31,339, 18), XSPR_MASK, COM,	TITAN,  	{RT}},
 {"mfdar",	XSPR(31,339, 19), XSPR_MASK, COM,	TITAN,  	{RT}},
@@ -3976,12 +4666,12 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mfsrr0",	XSPR(31,339, 26), XSPR_MASK, COM,	PPCNONE,	{RT}},
 {"mfsrr1",	XSPR(31,339, 27), XSPR_MASK, COM,	PPCNONE,	{RT}},
 {"mfcfar",	XSPR(31,339, 28), XSPR_MASK, POWER6,	PPCNONE,	{RT}},
-{"mfpid",	XSPR(31,339, 48), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfcsrr0",	XSPR(31,339, 58), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfcsrr1",	XSPR(31,339, 59), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfdear",	XSPR(31,339, 61), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfesr",	XSPR(31,339, 62), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfivpr",	XSPR(31,339, 63), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
+{"mfpid",	XSPR(31,339, 48), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfcsrr0",	XSPR(31,339, 58), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfcsrr1",	XSPR(31,339, 59), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfdear",	XSPR(31,339, 61), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfesr",	XSPR(31,339, 62), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfivpr",	XSPR(31,339, 63), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
 {"mfcmpa",	XSPR(31,339,144), XSPR_MASK, PPC860,	PPCNONE,	{RT}},
 {"mfcmpb",	XSPR(31,339,145), XSPR_MASK, PPC860,	PPCNONE,	{RT}},
 {"mfcmpc",	XSPR(31,339,146), XSPR_MASK, PPC860,	PPCNONE,	{RT}},
@@ -3999,53 +4689,53 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mfictrl",	XSPR(31,339,158), XSPR_MASK, PPC860,	PPCNONE,	{RT}},
 {"mfbar",	XSPR(31,339,159), XSPR_MASK, PPC860,	PPCNONE,	{RT}},
 {"mfvrsave",	XSPR(31,339,256), XSPR_MASK, PPCVEC,	PPCNONE,	{RT}},
-{"mfusprg0",	XSPR(31,339,256), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfsprg",	XSPR(31,339,256), XSPRG_MASK, PPC,	PPCNONE,	{RT, SPRG}},
-{"mfsprg4",	XSPR(31,339,260), XSPR_MASK, PPC405|BOOKE, PPCNONE,	{RT}},
-{"mfsprg5",	XSPR(31,339,261), XSPR_MASK, PPC405|BOOKE, PPCNONE,	{RT}},
-{"mfsprg6",	XSPR(31,339,262), XSPR_MASK, PPC405|BOOKE, PPCNONE,	{RT}},
-{"mfsprg7",	XSPR(31,339,263), XSPR_MASK, PPC405|BOOKE, PPCNONE,	{RT}},
-{"mftb",	XSPR(31,339,268), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mftbl",	XSPR(31,339,268), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mftbu",	XSPR(31,339,269), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfsprg0",	XSPR(31,339,272), XSPR_MASK, PPC,	PPCNONE,	{RT}},
-{"mfsprg1",	XSPR(31,339,273), XSPR_MASK, PPC,	PPCNONE,	{RT}},
-{"mfsprg2",	XSPR(31,339,274), XSPR_MASK, PPC,	PPCNONE,	{RT}},
-{"mfsprg3",	XSPR(31,339,275), XSPR_MASK, PPC,	PPCNONE,	{RT}},
+{"mfusprg0",	XSPR(31,339,256), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfsprg",	XSPR(31,339,256), XSPRG_MASK, PPC|PPCVLE, PPCNONE,	{RT, SPRG}},
+{"mfsprg4",	XSPR(31,339,260), XSPR_MASK, PPC405|BOOKE|PPCVLE, PPCNONE, {RT}},
+{"mfsprg5",	XSPR(31,339,261), XSPR_MASK, PPC405|BOOKE|PPCVLE, PPCNONE, {RT}},
+{"mfsprg6",	XSPR(31,339,262), XSPR_MASK, PPC405|BOOKE|PPCVLE, PPCNONE, {RT}},
+{"mfsprg7",	XSPR(31,339,263), XSPR_MASK, PPC405|BOOKE|PPCVLE, PPCNONE, {RT}},
+{"mftb",	XSPR(31,339,268), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mftbl",	XSPR(31,339,268), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mftbu",	XSPR(31,339,269), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfsprg0",	XSPR(31,339,272), XSPR_MASK, PPC|PPCVLE, PPCNONE,	{RT}},
+{"mfsprg1",	XSPR(31,339,273), XSPR_MASK, PPC|PPCVLE, PPCNONE,	{RT}},
+{"mfsprg2",	XSPR(31,339,274), XSPR_MASK, PPC|PPCVLE, PPCNONE,	{RT}},
+{"mfsprg3",	XSPR(31,339,275), XSPR_MASK, PPC|PPCVLE, PPCNONE,	{RT}},
 {"mfasr",	XSPR(31,339,280), XSPR_MASK, PPC64,	PPCNONE,	{RT}},
 {"mfear",	XSPR(31,339,282), XSPR_MASK, PPC,	TITAN,  	{RT}},
-{"mfpir",	XSPR(31,339,286), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfpvr",	XSPR(31,339,287), XSPR_MASK, PPC,	PPCNONE,	{RT}},
-{"mfdbsr",	XSPR(31,339,304), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfdbcr0",	XSPR(31,339,308), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfdbcr1",	XSPR(31,339,309), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfdbcr2",	XSPR(31,339,310), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfiac1",	XSPR(31,339,312), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfiac2",	XSPR(31,339,313), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfiac3",	XSPR(31,339,314), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfiac4",	XSPR(31,339,315), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfdac1",	XSPR(31,339,316), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfdac2",	XSPR(31,339,317), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfdvc1",	XSPR(31,339,318), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfdvc2",	XSPR(31,339,319), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mftsr",	XSPR(31,339,336), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mftcr",	XSPR(31,339,340), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfivor0",	XSPR(31,339,400), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfivor1",	XSPR(31,339,401), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfivor2",	XSPR(31,339,402), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfivor3",	XSPR(31,339,403), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfivor4",	XSPR(31,339,404), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfivor5",	XSPR(31,339,405), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfivor6",	XSPR(31,339,406), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfivor7",	XSPR(31,339,407), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfivor8",	XSPR(31,339,408), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfivor9",	XSPR(31,339,409), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfivor10",	XSPR(31,339,410), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfivor11",	XSPR(31,339,411), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfivor12",	XSPR(31,339,412), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfivor13",	XSPR(31,339,413), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfivor14",	XSPR(31,339,414), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
-{"mfivor15",	XSPR(31,339,415), XSPR_MASK, BOOKE,	PPCNONE,	{RT}},
+{"mfpir",	XSPR(31,339,286), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfpvr",	XSPR(31,339,287), XSPR_MASK, PPC|PPCVLE, PPCNONE,	{RT}},
+{"mfdbsr",	XSPR(31,339,304), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfdbcr0",	XSPR(31,339,308), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfdbcr1",	XSPR(31,339,309), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfdbcr2",	XSPR(31,339,310), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfiac1",	XSPR(31,339,312), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfiac2",	XSPR(31,339,313), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfiac3",	XSPR(31,339,314), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfiac4",	XSPR(31,339,315), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfdac1",	XSPR(31,339,316), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfdac2",	XSPR(31,339,317), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfdvc1",	XSPR(31,339,318), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfdvc2",	XSPR(31,339,319), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mftsr",	XSPR(31,339,336), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mftcr",	XSPR(31,339,340), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfivor0",	XSPR(31,339,400), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfivor1",	XSPR(31,339,401), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfivor2",	XSPR(31,339,402), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfivor3",	XSPR(31,339,403), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfivor4",	XSPR(31,339,404), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfivor5",	XSPR(31,339,405), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfivor6",	XSPR(31,339,406), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfivor7",	XSPR(31,339,407), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfivor8",	XSPR(31,339,408), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfivor9",	XSPR(31,339,409), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfivor10",	XSPR(31,339,410), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfivor11",	XSPR(31,339,411), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfivor12",	XSPR(31,339,412), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfivor13",	XSPR(31,339,413), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfivor14",	XSPR(31,339,414), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
+{"mfivor15",	XSPR(31,339,415), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RT}},
 {"mfspefscr",	XSPR(31,339,512), XSPR_MASK, PPCSPE,	PPCNONE,	{RT}},
 {"mfbbear",	XSPR(31,339,513), XSPR_MASK, PPCBRLK,	PPCNONE,	{RT}},
 {"mfbbtar",	XSPR(31,339,514), XSPR_MASK, PPCBRLK,	PPCNONE,	{RT}},
@@ -4156,15 +4846,15 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mfpbl2",	XSPR(31,339,1022), XSPR_MASK, PPC403,	PPCNONE,	{RT}},
 {"mfthrm3",	XSPR(31,339,1022), XSPR_MASK, PPC750,	PPCNONE,	{RT}},
 {"mfpbu2",	XSPR(31,339,1023), XSPR_MASK, PPC403,	PPCNONE,	{RT}},
-{"mfspr",	X(31,339),	X_MASK,      COM,	PPCNONE,	{RT, SPR}},
-
-{"lwax",	X(31,341),	X_MASK,      PPC64,	PPCNONE,	{RT, RA0, RB}},
+{"mfspr",	X(31,339),	X_MASK,      COM|PPCVLE, PPCNONE,	{RT, SPR}},
+ 
+{"lwax",	X(31,341),	X_MASK,      PPC64|PPCVLE, PPCNONE,	{RT, RA0, RB}},
 
 {"dst",		XDSS(31,342,0),	XDSS_MASK,   PPCVEC,	PPCNONE,	{RA, RB, STRM}},
 
-{"lhax",	X(31,343),	X_MASK,      COM,	PPCNONE,	{RT, RA0, RB}},
+{"lhax",	X(31,343),	X_MASK,      COM|PPCVLE, PPCNONE,	{RT, RA0, RB}},
 
-{"lvxl",	X(31,359),	X_MASK,      PPCVEC,	PPCNONE,	{VD, RA, RB}},
+{"lvxl",	X(31,359),	X_MASK,      PPCVEC,	PPCNONE,	{VD, RA0, RB}},
 
 {"abs",		XO(31,360,0,0),	XORB_MASK,   M601,	PPCNONE,	{RT, RA}},
 {"abs.",	XO(31,360,0,1),	XORB_MASK,   M601,	PPCNONE,	{RT, RA}},
@@ -4178,18 +4868,20 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mftbu",	XSPR(31,371,269), XSPR_MASK, PPC,	NO371,		{RT}},
 {"mftb",	X(31,371),	X_MASK,      PPC|PPCA2,	NO371|POWER7,	{RT, TBR}},
 
-{"lwaux",	X(31,373),	X_MASK,      PPC64,	PPCNONE,	{RT, RAL, RB}},
+{"lwaux",	X(31,373),	X_MASK,      PPC64|PPCVLE, PPCNONE,	{RT, RAL, RB}},
 
 {"dstst",	XDSS(31,374,0),	XDSS_MASK,   PPCVEC,	PPCNONE,	{RA, RB, STRM}},
 
-{"lhaux",	X(31,375),	X_MASK,      COM,	PPCNONE,	{RT, RAL, RB}},
+{"lhaux",	X(31,375),	X_MASK,      COM|PPCVLE, PPCNONE,	{RT, RAL, RB}},
 
 {"popcntw",	X(31,378),	XRB_MASK, POWER7|PPCA2,	PPCNONE,	{RA, RS}},
 
 {"mtdcrx",	X(31,387),	X_MASK, BOOKE|PPCA2|PPC476, TITAN,	{RA, RS}},
-{"mtdcrx.",	XRC(31,387,1),	X_MASK,      PPCA2,	PPCNONE,	{RA, RS}},
+{"mtdcrx.",	XRC(31,387,1),	X_MASK,	     PPCA2|PPCVLE, PPCNONE,	{RA, RS}},
+
+{"stvexbx",	X(31,389),	X_MASK,      PPCVEC2,	PPCNONE,	{VS, RA0, RB}},
 
-{"dcblc",	X(31,390),	X_MASK, PPCCHLK|PPC476|TITAN, PPCNONE,	{CT, RA, RB}},
+{"dcblc",	X(31,390),	X_MASK, PPCCHLK|PPC476|TITAN|PPCVLE, PPCNONE, {CT, RA0, RB}},
 {"stdfcmx",	APU(31,391,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
 
 {"divdeu",	XO(31,393,0,0),	XO_MASK,  POWER7|PPCA2,	PPCNONE,	{RT, RA, RB}},
@@ -4197,21 +4889,25 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"divweu",	XO(31,395,0,0),	XO_MASK,  POWER7|PPCA2,	PPCNONE,	{RT, RA, RB}},
 {"divweu.",	XO(31,395,0,1),	XO_MASK,  POWER7|PPCA2,	PPCNONE,	{RT, RA, RB}},
 
-{"dcblce",	X(31,398),	X_MASK,      PPCCHLK,	PPCNONE,	{CT, RA, RB}},
+{"dcblce",	X(31,398),	X_MASK,      PPCCHLK,	E500MC,		{CT, RA, RB}},
 
 {"slbmte",	X(31,402),	XRA_MASK,    PPC64,	PPCNONE,	{RS, RB}},
 
 {"icswx",	XRC(31,406,0),	X_MASK,   POWER7|PPCA2,	PPCNONE,	{RS, RA, RB}},
 {"icswx.",	XRC(31,406,1),	X_MASK,   POWER7|PPCA2,	PPCNONE,	{RS, RA, RB}},
 
-{"sthx",	X(31,407),	X_MASK,      COM,	PPCNONE,	{RS, RA0, RB}},
+{"sthx",	X(31,407),	X_MASK,      COM|PPCVLE, PPCNONE,	{RS, RA0, RB}},
+
+{"orc",		XRC(31,412,0),	X_MASK,      COM|PPCVLE, PPCNONE,	{RA, RS, RB}},
+{"orc.",	XRC(31,412,1),	X_MASK,      COM|PPCVLE, PPCNONE,	{RA, RS, RB}},
+
+{"sthepx",	X(31,415),	X_MASK,      E500MC|PPCA2|PPCVLE, PPCNONE, {RS, RA0, RB}},
 
-{"orc",		XRC(31,412,0),	X_MASK,      COM,	PPCNONE,	{RA, RS, RB}},
-{"orc.",	XRC(31,412,1),	X_MASK,      COM,	PPCNONE,	{RA, RS, RB}},
+{"mtdcrux",	X(31,419),	X_MASK,      PPC464|PPCVLE, PPCNONE,	{RA, RS}},
 
-{"sthepx",	X(31,415),	X_MASK,   E500MC|PPCA2,	PPCNONE,	{RS, RA, RB}},
+{"stvexhx",	X(31,421),	X_MASK,      PPCVEC2,	PPCNONE,	{VS, RA0, RB}},
 
-{"mtdcrux",	X(31,419),	X_MASK,      PPC464,	PPCNONE,	{RA, RS}},
+{"dcblq.",	XRC(31,422,1),	X_MASK,      E6500,	PPCNONE,	{CT, RA0, RB}},
 
 {"divde",	XO(31,425,0,0),	XO_MASK,  POWER7|PPCA2,	PPCNONE,	{RT, RA, RB}},
 {"divde.",	XO(31,425,0,1),	XO_MASK,  POWER7|PPCA2,	PPCNONE,	{RT, RA, RB}},
@@ -4220,16 +4916,18 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"slbie",	X(31,434),	XRTRA_MASK,  PPC64,	PPCNONE,	{RB}},
 
-{"ecowx",	X(31,438),	X_MASK,      PPC,	TITAN,  	{RT, RA, RB}},
+{"ecowx",	X(31,438),	X_MASK,      PPC,	TITAN,  	{RT, RA0, RB}},
 
-{"sthux",	X(31,439),	X_MASK,      COM,	PPCNONE,	{RS, RAS, RB}},
+{"sthux",	X(31,439),	X_MASK,      COM|PPCVLE, PPCNONE,	{RS, RAS, RB}},
 
 {"mdors",	0x7f9ce378,	0xffffffff,  E500MC,	PPCNONE,	{0}},
 
-{"mr",		XRC(31,444,0),	X_MASK,      COM,	PPCNONE,	{RA, RS, RBS}},
-{"or",		XRC(31,444,0),	X_MASK,      COM,	PPCNONE,	{RA, RS, RB}},
-{"mr.",		XRC(31,444,1),	X_MASK,      COM,	PPCNONE,	{RA, RS, RBS}},
-{"or.",		XRC(31,444,1),	X_MASK,      COM,	PPCNONE,	{RA, RS, RB}},
+{"miso",	0x7f5ad378,	0xffffffff,  E6500,	PPCNONE,	{0}},
+
+{"mr",		XRC(31,444,0),	X_MASK,      COM|PPCVLE, PPCNONE,	{RA, RS, RBS}},
+{"or",		XRC(31,444,0),	X_MASK,      COM|PPCVLE, PPCNONE,	{RA, RS, RB}},
+{"mr.",		XRC(31,444,1),	X_MASK,      COM|PPCVLE, PPCNONE,	{RA, RS, RBS}},
+{"or.",		XRC(31,444,1),	X_MASK,      COM|PPCVLE, PPCNONE,	{RA, RS, RB}},
 
 {"mtexisr",	XSPR(31,451, 64), XSPR_MASK, PPC403,	PPCNONE,	{RS}},
 {"mtexier",	XSPR(31,451, 66), XSPR_MASK, PPC403,	PPCNONE,	{RS}},
@@ -4265,24 +4963,27 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mtdmasa3",	XSPR(31,451,219), XSPR_MASK, PPC403,	PPCNONE,	{RS}},
 {"mtdmacc3",	XSPR(31,451,220), XSPR_MASK, PPC403,	PPCNONE,	{RS}},
 {"mtdmasr",	XSPR(31,451,224), XSPR_MASK, PPC403,	PPCNONE,	{RS}},
-{"mtdcr",	X(31,451), X_MASK, PPC403|BOOKE|PPCA2|PPC476, TITAN,	{SPR, RS}},
+{"mtdcr",	X(31,451), X_MASK, PPC403|BOOKE|PPCA2|PPC476|PPCVLE, TITAN, {SPR, RS}},
 {"mtdcr.",	XRC(31,451,1), X_MASK,       PPCA2,	PPCNONE,	{SPR, RS}},
 
-{"dccci",	X(31,454), XRT_MASK, PPC403|PPC440|TITAN|PPCA2, PPCNONE, {RAOPT, RBOPT}},
-{"dci",		X(31,454),	XRARB_MASK, PPCA2|PPC476, PPCNONE,	{CT}},
+{"stvexwx",	X(31,453),	X_MASK,      PPCVEC2,	PPCNONE,	{VS, RA0, RB}},
 
-{"divdu",	XO(31,457,0,0),	XO_MASK,     PPC64,	PPCNONE,	{RT, RA, RB}},
-{"divdu.",	XO(31,457,0,1),	XO_MASK,     PPC64,	PPCNONE,	{RT, RA, RB}},
+{"dccci",	X(31,454), XRT_MASK, PPC403|PPC440|TITAN|PPCA2, PPCNONE, {RAOPT, RBOPT}},
+{"dci",		X(31,454),	XRARB_MASK, PPCA2|PPC476|PPCVLE, PPCNONE, {CT}},
+ 
+{"divdu",	XO(31,457,0,0),	XO_MASK,  PPC64|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"divdu.",	XO(31,457,0,1),	XO_MASK,  PPC64|PPCVLE, PPCNONE,	{RT, RA, RB}},
 
 {"divwu",	XO(31,459,0,0),	XO_MASK,     PPC,	PPCNONE,	{RT, RA, RB}},
 {"divwu.",	XO(31,459,0,1),	XO_MASK,     PPC,	PPCNONE,	{RT, RA, RB}},
 
 {"mtpmr",	X(31,462),	X_MASK, PPCPMR|PPCE300,	PPCNONE,	{PMR, RS}},
+{"mttmr",	X(31,494),	X_MASK,	PPCTMR|E6500,	PPCNONE,	{TMR, RS}},
 
 {"mtmq",	XSPR(31,467,  0), XSPR_MASK, M601,	PPCNONE,	{RS}},
-{"mtxer",	XSPR(31,467,  1), XSPR_MASK, COM,	PPCNONE,	{RS}},
-{"mtlr",	XSPR(31,467,  8), XSPR_MASK, COM,	PPCNONE,	{RS}},
-{"mtctr", 	XSPR(31,467,  9), XSPR_MASK, COM,	PPCNONE,	{RS}},
+{"mtxer",	XSPR(31,467,  1), XSPR_MASK, COM|PPCVLE, PPCNONE,	{RS}},
+{"mtlr",	XSPR(31,467,  8), XSPR_MASK, COM|PPCVLE, PPCNONE,	{RS}},
+{"mtctr", 	XSPR(31,467,  9), XSPR_MASK, COM|PPCVLE, PPCNONE,	{RS}},
 {"mttid",	XSPR(31,467, 17), XSPR_MASK, POWER,	PPCNONE,	{RS}},
 {"mtdsisr",	XSPR(31,467, 18), XSPR_MASK, COM,	TITAN,  	{RS}},
 {"mtdar",	XSPR(31,467, 19), XSPR_MASK, COM,	TITAN,  	{RS}},
@@ -4291,16 +4992,16 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mtdec",	XSPR(31,467, 22), XSPR_MASK, COM,	PPCNONE,	{RS}},
 {"mtsdr0",	XSPR(31,467, 24), XSPR_MASK, POWER,	PPCNONE,	{RS}},
 {"mtsdr1",	XSPR(31,467, 25), XSPR_MASK, COM,	TITAN,  	{RS}},
-{"mtsrr0",	XSPR(31,467, 26), XSPR_MASK, COM,	PPCNONE,	{RS}},
-{"mtsrr1",	XSPR(31,467, 27), XSPR_MASK, COM,	PPCNONE,	{RS}},
+{"mtsrr0",	XSPR(31,467, 26), XSPR_MASK, COM|PPCVLE, PPCNONE,	{RS}},
+{"mtsrr1",	XSPR(31,467, 27), XSPR_MASK, COM|PPCVLE, PPCNONE,	{RS}},
 {"mtcfar",	XSPR(31,467, 28), XSPR_MASK, POWER6,	PPCNONE,	{RS}},
-{"mtpid",	XSPR(31,467, 48), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtdecar",	XSPR(31,467, 54), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtcsrr0",	XSPR(31,467, 58), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtcsrr1",	XSPR(31,467, 59), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtdear",	XSPR(31,467, 61), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtesr",	XSPR(31,467, 62), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtivpr",	XSPR(31,467, 63), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
+{"mtpid",	XSPR(31,467, 48), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtdecar",	XSPR(31,467, 54), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtcsrr0",	XSPR(31,467, 58), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtcsrr1",	XSPR(31,467, 59), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtdear",	XSPR(31,467, 61), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtesr",	XSPR(31,467, 62), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtivpr",	XSPR(31,467, 63), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
 {"mtcmpa",	XSPR(31,467,144), XSPR_MASK, PPC860,	PPCNONE,	{RS}},
 {"mtcmpb",	XSPR(31,467,145), XSPR_MASK, PPC860,	PPCNONE,	{RS}},
 {"mtcmpc",	XSPR(31,467,146), XSPR_MASK, PPC860,	PPCNONE,	{RS}},
@@ -4318,50 +5019,50 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mtictrl",	XSPR(31,467,158), XSPR_MASK, PPC860,	PPCNONE,	{RS}},
 {"mtbar",	XSPR(31,467,159), XSPR_MASK, PPC860,	PPCNONE,	{RS}},
 {"mtvrsave",	XSPR(31,467,256), XSPR_MASK, PPCVEC,	PPCNONE,	{RS}},
-{"mtusprg0",	XSPR(31,467,256), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtsprg",	XSPR(31,467,256), XSPRG_MASK,PPC,	PPCNONE,	{SPRG, RS}},
-{"mtsprg0",	XSPR(31,467,272), XSPR_MASK, PPC,	PPCNONE,	{RS}},
-{"mtsprg1",	XSPR(31,467,273), XSPR_MASK, PPC,	PPCNONE,	{RS}},
-{"mtsprg2",	XSPR(31,467,274), XSPR_MASK, PPC,	PPCNONE,	{RS}},
-{"mtsprg3",	XSPR(31,467,275), XSPR_MASK, PPC,	PPCNONE,	{RS}},
-{"mtsprg4",	XSPR(31,467,276), XSPR_MASK, PPC405|BOOKE, PPCNONE,	{RS}},
-{"mtsprg5",	XSPR(31,467,277), XSPR_MASK, PPC405|BOOKE, PPCNONE,	{RS}},
-{"mtsprg6",	XSPR(31,467,278), XSPR_MASK, PPC405|BOOKE, PPCNONE,	{RS}},
-{"mtsprg7",	XSPR(31,467,279), XSPR_MASK, PPC405|BOOKE, PPCNONE,	{RS}},
+{"mtusprg0",	XSPR(31,467,256), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtsprg",	XSPR(31,467,256), XSPRG_MASK, PPC|PPCVLE, PPCNONE,	{SPRG, RS}},
+{"mtsprg0",	XSPR(31,467,272), XSPR_MASK, PPC|PPCVLE, PPCNONE,	{RS}},
+{"mtsprg1",	XSPR(31,467,273), XSPR_MASK, PPC|PPCVLE, PPCNONE,	{RS}},
+{"mtsprg2",	XSPR(31,467,274), XSPR_MASK, PPC|PPCVLE, PPCNONE,	{RS}},
+{"mtsprg3",	XSPR(31,467,275), XSPR_MASK, PPC|PPCVLE, PPCNONE,	{RS}},
+{"mtsprg4",	XSPR(31,467,276), XSPR_MASK, PPC405|BOOKE|PPCVLE, PPCNONE, {RS}},
+{"mtsprg5",	XSPR(31,467,277), XSPR_MASK, PPC405|BOOKE|PPCVLE, PPCNONE, {RS}},
+{"mtsprg6",	XSPR(31,467,278), XSPR_MASK, PPC405|BOOKE|PPCVLE, PPCNONE, {RS}},
+{"mtsprg7",	XSPR(31,467,279), XSPR_MASK, PPC405|BOOKE|PPCVLE, PPCNONE, {RS}},
 {"mtasr",	XSPR(31,467,280), XSPR_MASK, PPC64,	PPCNONE,	{RS}},
 {"mtear",	XSPR(31,467,282), XSPR_MASK, PPC,	TITAN,  	{RS}},
 {"mttbl",	XSPR(31,467,284), XSPR_MASK, PPC,	PPCNONE,	{RS}},
 {"mttbu",	XSPR(31,467,285), XSPR_MASK, PPC,	PPCNONE,	{RS}},
-{"mtdbsr",	XSPR(31,467,304), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtdbcr0",	XSPR(31,467,308), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtdbcr1",	XSPR(31,467,309), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtdbcr2",	XSPR(31,467,310), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtiac1",	XSPR(31,467,312), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtiac2",	XSPR(31,467,313), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtiac3",	XSPR(31,467,314), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtiac4",	XSPR(31,467,315), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtdac1",	XSPR(31,467,316), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtdac2",	XSPR(31,467,317), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtdvc1",	XSPR(31,467,318), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtdvc2",	XSPR(31,467,319), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mttsr",	XSPR(31,467,336), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mttcr",	XSPR(31,467,340), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtivor0",	XSPR(31,467,400), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtivor1",	XSPR(31,467,401), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtivor2",	XSPR(31,467,402), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtivor3",	XSPR(31,467,403), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtivor4",	XSPR(31,467,404), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtivor5",	XSPR(31,467,405), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtivor6",	XSPR(31,467,406), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtivor7",	XSPR(31,467,407), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtivor8",	XSPR(31,467,408), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtivor9",	XSPR(31,467,409), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtivor10",	XSPR(31,467,410), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtivor11",	XSPR(31,467,411), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtivor12",	XSPR(31,467,412), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtivor13",	XSPR(31,467,413), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtivor14",	XSPR(31,467,414), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
-{"mtivor15",	XSPR(31,467,415), XSPR_MASK, BOOKE,	PPCNONE,	{RS}},
+{"mtdbsr",	XSPR(31,467,304), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtdbcr0",	XSPR(31,467,308), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtdbcr1",	XSPR(31,467,309), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtdbcr2",	XSPR(31,467,310), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtiac1",	XSPR(31,467,312), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtiac2",	XSPR(31,467,313), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtiac3",	XSPR(31,467,314), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtiac4",	XSPR(31,467,315), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtdac1",	XSPR(31,467,316), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtdac2",	XSPR(31,467,317), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtdvc1",	XSPR(31,467,318), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtdvc2",	XSPR(31,467,319), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mttsr",	XSPR(31,467,336), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mttcr",	XSPR(31,467,340), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtivor0",	XSPR(31,467,400), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtivor1",	XSPR(31,467,401), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtivor2",	XSPR(31,467,402), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtivor3",	XSPR(31,467,403), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtivor4",	XSPR(31,467,404), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtivor5",	XSPR(31,467,405), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtivor6",	XSPR(31,467,406), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtivor7",	XSPR(31,467,407), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtivor8",	XSPR(31,467,408), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtivor9",	XSPR(31,467,409), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtivor10",	XSPR(31,467,410), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtivor11",	XSPR(31,467,411), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtivor12",	XSPR(31,467,412), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtivor13",	XSPR(31,467,413), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtivor14",	XSPR(31,467,414), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
+{"mtivor15",	XSPR(31,467,415), XSPR_MASK, BOOKE|PPCVLE, PPCNONE,	{RS}},
 {"mtspefscr",	XSPR(31,467,512), XSPR_MASK, PPCSPE,	PPCNONE,	{RS}},
 {"mtbbear",	XSPR(31,467,513), XSPR_MASK, PPCBRLK,	PPCNONE,	{RS}},
 {"mtbbtar",	XSPR(31,467,514), XSPR_MASK, PPCBRLK,	PPCNONE,	{RS}},
@@ -4373,8 +5074,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mtivor35",	XSPR(31,467,531), XSPR_MASK, PPCPMR,	PPCNONE,	{RS}},
 {"mtdbatu",	XSPR(31,467,536), XSPRBAT_MASK, PPC,	TITAN,  	{SPRBAT, RS}},
 {"mtdbatl",	XSPR(31,467,537), XSPRBAT_MASK, PPC,	TITAN,  	{SPRBAT, RS}},
-{"mtmcsrr0",	XSPR(31,467,570), XSPR_MASK, PPCRFMCI,	PPCNONE,	{RS}},
-{"mtmcsrr1",	XSPR(31,467,571), XSPR_MASK, PPCRFMCI,	PPCNONE,	{RS}},
+{"mtmcsrr0",	XSPR(31,467,570), XSPR_MASK, PPCRFMCI|PPCVLE, PPCNONE,	{RS}},
+{"mtmcsrr1",	XSPR(31,467,571), XSPR_MASK, PPCRFMCI|PPCVLE, PPCNONE,	{RS}},
 {"mtmcsr",	XSPR(31,467,572), XSPR_MASK, PPCRFMCI,	PPCNONE,	{RS}},
 {"mtivndx",	XSPR(31,467,880), XSPR_MASK, TITAN,	PPCNONE,	{RS}},
 {"mtdvndx",	XSPR(31,467,881), XSPR_MASK, TITAN,	PPCNONE,	{RS}},
@@ -4439,20 +5140,20 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mtpbl2",	XSPR(31,467,1022), XSPR_MASK, PPC403,	PPCNONE,	{RS}},
 {"mtthrm3",	XSPR(31,467,1022), XSPR_MASK, PPC750,	PPCNONE,	{RS}},
 {"mtpbu2",	XSPR(31,467,1023), XSPR_MASK, PPC403,	PPCNONE,	{RS}},
-{"mtspr",	X(31,467),	  X_MASK,    COM,	PPCNONE,	{SPR, RS}},
-
-{"dcbi",	X(31,470),	XRT_MASK,    PPC,	PPCNONE,	{RA, RB}},
+{"mtspr",	X(31,467),	X_MASK,      COM|PPCVLE, PPCNONE,	{SPR, RS}},
+ 
+{"dcbi",	X(31,470),	XRT_MASK,    PPC|PPCVLE, PPCNONE,	{RA0, RB}},
 
-{"nand",	XRC(31,476,0),	X_MASK,      COM,	PPCNONE,	{RA, RS, RB}},
-{"nand.",	XRC(31,476,1),	X_MASK,      COM,	PPCNONE,	{RA, RS, RB}},
+{"nand",	XRC(31,476,0),	X_MASK,      COM|PPCVLE, PPCNONE,	{RA, RS, RB}},
+{"nand.",	XRC(31,476,1),	X_MASK,      COM|PPCVLE, PPCNONE,	{RA, RS, RB}},
 
 {"dsn", 	X(31,483),	XRT_MASK,    E500MC,	PPCNONE,	{RA, RB}},
 
-{"dcread",	X(31,486),	X_MASK,  PPC403|PPC440,	PPCA2|PPC476,	{RT, RA, RB}},
+{"dcread",	X(31,486),	X_MASK,  PPC403|PPC440,	PPCA2|PPC476,	{RT, RA0, RB}},
 
-{"icbtls",	X(31,486),	X_MASK, PPCCHLK|PPC476|TITAN, PPCNONE,	{CT, RA, RB}},
+{"icbtls",	X(31,486),	X_MASK, PPCCHLK|PPC476|TITAN|PPCVLE, PPCNONE, {CT, RA0, RB}},
 
-{"stvxl",	X(31,487),	X_MASK,      PPCVEC,	PPCNONE,	{VS, RA, RB}},
+{"stvxl",	X(31,487),	X_MASK,      PPCVEC,	PPCNONE,	{VS, RA0, RB}},
 
 {"nabs",	XO(31,488,0,0),	XORB_MASK,   M601,	PPCNONE,	{RT, RA}},
 {"nabs.",	XO(31,488,0,1),	XORB_MASK,   M601,	PPCNONE,	{RT, RA}},
@@ -4463,7 +5164,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"divw",	XO(31,491,0,0),	XO_MASK,     PPC,	PPCNONE,	{RT, RA, RB}},
 {"divw.",	XO(31,491,0,1),	XO_MASK,     PPC,	PPCNONE,	{RT, RA, RB}},
 
-{"icbtlse",	X(31,494),	X_MASK,      PPCCHLK,	PPCNONE,	{CT, RA, RB}},
+{"icbtlse",	X(31,494),	X_MASK,      PPCCHLK,	E500MC,		{CT, RA, RB}},
 
 {"slbia",	X(31,498),	0xffffffff,  PPC64,	PPCNONE,	{0}},
 
@@ -4482,33 +5183,33 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"lvlx",	X(31,519),	X_MASK,      CELL,	PPCNONE,	{VD, RA0, RB}},
 {"lbfcmux",	APU(31,519,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
 
-{"subfco",	XO(31,8,1,0),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"subfco",	XO(31,8,1,0),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"sfo",		XO(31,8,1,0),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
-{"subco",	XO(31,8,1,0),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RB, RA}},
-{"subfco.",	XO(31,8,1,1),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"subco",	XO(31,8,1,0),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RB, RA}},
+{"subfco.",	XO(31,8,1,1),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"sfo.",	XO(31,8,1,1),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
-{"subco.",	XO(31,8,1,1),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RB, RA}},
-
-{"addco",	XO(31,10,1,0),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"subco.",	XO(31,8,1,1),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RB, RA}},
+ 
+{"addco",	XO(31,10,1,0),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"ao",		XO(31,10,1,0),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
-{"addco.",	XO(31,10,1,1),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"addco.",	XO(31,10,1,1),	XO_MASK,     PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"ao.",		XO(31,10,1,1),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
 
 {"clcs",	X(31,531),	XRB_MASK,    M601,	PPCNONE,	{RT, RA}},
 
 {"ldbrx",	X(31,532),	X_MASK, CELL|POWER7|PPCA2, PPCNONE,	{RT, RA0, RB}},
 
-{"lswx",	X(31,533),	X_MASK,      PPCCOM,	E500|E500MC,	{RT, RAX, RBX}},
+{"lswx",	X(31,533),	X_MASK,  PPCCOM|PPCVLE, E500|E500MC,	{RT, RA0, RB}},
 {"lsx",		X(31,533),	X_MASK,      PWRCOM,	PPCNONE,	{RT, RA, RB}},
 
-{"lwbrx",	X(31,534),	X_MASK,      PPCCOM,	PPCNONE,	{RT, RA0, RB}},
+{"lwbrx",	X(31,534),	X_MASK,  PPCCOM|PPCVLE, PPCNONE,	{RT, RA0, RB}},
 {"lbrx",	X(31,534),	X_MASK,      PWRCOM,	PPCNONE,	{RT, RA, RB}},
 
 {"lfsx",	X(31,535),	X_MASK,      COM,	PPCEFS,		{FRT, RA0, RB}},
 
-{"srw",		XRC(31,536,0),	X_MASK,      PPCCOM,	PPCNONE,	{RA, RS, RB}},
+{"srw",		XRC(31,536,0),	X_MASK,  PPCCOM|PPCVLE, PPCNONE,	{RA, RS, RB}},
 {"sr",		XRC(31,536,0),	X_MASK,      PWRCOM,	PPCNONE,	{RA, RS, RB}},
-{"srw.",	XRC(31,536,1),	X_MASK,      PPCCOM,	PPCNONE,	{RA, RS, RB}},
+{"srw.",	XRC(31,536,1),	X_MASK,  PPCCOM|PPCVLE, PPCNONE,	{RA, RS, RB}},
 {"sr.",		XRC(31,536,1),	X_MASK,      PWRCOM,	PPCNONE,	{RA, RS, RB}},
 
 {"rrib",	XRC(31,537,0),	X_MASK,      M601,	PPCNONE,	{RA, RS, RB}},
@@ -4522,6 +5223,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"lhdx",	X(31,547),	X_MASK,      E500MC,	PPCNONE,	{RT, RA, RB}},
 
+{"lvtrx",	X(31,549),	X_MASK,      PPCVEC2,	PPCNONE,	{VD, RA0, RB}},
+
 {"bbelr",	X(31,550),	X_MASK,      PPCBRLK,	PPCNONE,	{0}},
 
 {"lvrx",	X(31,551),	X_MASK,      CELL,	PPCNONE,	{VD, RA0, RB}},
@@ -4532,36 +5235,41 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"subfo.",	XO(31,40,1,1),	XO_MASK,     PPC,	PPCNONE,	{RT, RA, RB}},
 {"subo.",	XO(31,40,1,1),	XO_MASK,     PPC,	PPCNONE,	{RT, RB, RA}},
 
-{"tlbsync",	X(31,566),	0xffffffff,  PPC,	PPCNONE,	{0}},
+{"tlbsync",	X(31,566),	0xffffffff, PPC|PPCVLE, PPCNONE,	{0}},
 
 {"lfsux",	X(31,567),	X_MASK,      COM,	PPCEFS,		{FRT, RAS, RB}},
 
 {"lwdx",	X(31,579),	X_MASK,      E500MC,	PPCNONE,	{RT, RA, RB}},
 
+{"lvtlx",	X(31,581),	X_MASK,      PPCVEC2,	PPCNONE,	{VD, RA0, RB}},
+
 {"lwfcmux",	APU(31,583,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
 
-{"lxsdx",	X(31,588),	XX1_MASK,    PPCVSX,	PPCNONE,	{XT6, RA, RB}},
+{"lxsdx",	X(31,588),	XX1_MASK,    PPCVSX,	PPCNONE,	{XT6, RA0, RB}},
 
 {"mfsr",	X(31,595), XRB_MASK|(1<<20), COM,	NON32,  	{RT, SR}},
 
-{"lswi",	X(31,597),	X_MASK,      PPCCOM,	E500|E500MC,	{RT, RA0, NBI}},
+{"lswi",	X(31,597),	X_MASK,  PPCCOM|PPCVLE, E500|E500MC,	{RT, RA0, NB}},
 {"lsi",		X(31,597),	X_MASK,      PWRCOM,	PPCNONE,	{RT, RA0, NB}},
 
 {"lwsync",	XSYNC(31,598,1), 0xffffffff, PPC,	E500,		{0}},
 {"ptesync",	XSYNC(31,598,2), 0xffffffff, PPC64,	PPCNONE,	{0}},
-{"sync",	X(31,598),	XSYNC_MASK,  PPCCOM,	BOOKE|PPC476,	{LS}},
+{"sync",	X(31,598),	XSYNCLE_MASK,E6500,	PPCNONE,	{LS, ESYNC}},
+{"sync",	X(31,598),	XSYNC_MASK, PPCCOM|PPCVLE, BOOKE|PPC476, {LS}},
 {"msync",	X(31,598),	0xffffffff, BOOKE|PPCA2|PPC476, PPCNONE, {0}},
-{"sync",	X(31,598),	0xffffffff, BOOKE|PPC476, PPCNONE, {0}},
+{"sync",	X(31,598),	0xffffffff, BOOKE|PPC476, E6500,	{0}},
 {"lwsync",	X(31,598),	0xffffffff, E500,	PPCNONE,	{0}},
 {"dcs",		X(31,598),	0xffffffff,  PWRCOM,	PPCNONE,	{0}},
 
 {"lfdx",	X(31,599),	X_MASK,      COM,	PPCEFS,		{FRT, RA0, RB}},
 
 {"mffgpr",	XRC(31,607,0),	XRA_MASK,    POWER6,	POWER7,		{FRT, RB}},
-{"lfdepx",	X(31,607),	X_MASK,   E500MC|PPCA2,	PPCNONE,	{FRT, RA, RB}},
+{"lfdepx",	X(31,607),	X_MASK,   E500MC|PPCA2|PPCVLE, PPCNONE, {FRT, RA0, RB}},
 
 {"lddx",	X(31,611),	X_MASK,      E500MC,	PPCNONE,	{RT, RA, RB}},
 
+{"lvswx",	X(31,613),	X_MASK,      PPCVEC2,	PPCNONE,	{VD, RA0, RB}},
+
 {"lqfcmux",	APU(31,615,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
 
 {"nego",	XO(31,104,1,0),	XORB_MASK,   COM,	PPCNONE,	{RT, RA}},
@@ -4581,24 +5289,24 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"stvlx",	X(31,647),	X_MASK,      CELL,	PPCNONE,	{VS, RA0, RB}},
 {"stbfcmux",	APU(31,647,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
 
-{"subfeo",	XO(31,136,1,0),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"subfeo",	XO(31,136,1,0),	XO_MASK, PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"sfeo",	XO(31,136,1,0),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
-{"subfeo.",	XO(31,136,1,1),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"subfeo.",	XO(31,136,1,1),	XO_MASK, PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"sfeo.",	XO(31,136,1,1),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
 
-{"addeo",	XO(31,138,1,0),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"addeo",	XO(31,138,1,0),	XO_MASK, PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"aeo",		XO(31,138,1,0),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
-{"addeo.",	XO(31,138,1,1),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"addeo.",	XO(31,138,1,1),	XO_MASK, PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"aeo.",	XO(31,138,1,1),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
 
 {"mfsrin",	X(31,659),	XRA_MASK,    PPC,	NON32,  	{RT, RB}},
 
 {"stdbrx",	X(31,660),	X_MASK, CELL|POWER7|PPCA2, PPCNONE,	{RS, RA0, RB}},
 
-{"stswx",	X(31,661),	X_MASK,      PPCCOM,	E500|E500MC,	{RS, RA0, RB}},
+{"stswx",	X(31,661),	X_MASK, PPCCOM|PPCVLE,	E500|E500MC,	{RS, RA0, RB}},
 {"stsx",	X(31,661),	X_MASK,      PWRCOM,	PPCNONE,	{RS, RA0, RB}},
 
-{"stwbrx",	X(31,662),	X_MASK,      PPCCOM,	PPCNONE,	{RS, RA0, RB}},
+{"stwbrx",	X(31,662),	X_MASK, PPCCOM|PPCVLE,	PPCNONE,	{RS, RA0, RB}},
 {"stbrx",	X(31,662),	X_MASK,      PWRCOM,	PPCNONE,	{RS, RA0, RB}},
 
 {"stfsx",	X(31,663),	X_MASK,      COM,	PPCEFS,		{FRS, RA0, RB}},
@@ -4611,6 +5319,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"sthdx",	X(31,675),	X_MASK,      E500MC,	PPCNONE,	{RS, RA, RB}},
 
+{"stvfrx",	X(31,677),	X_MASK,      PPCVEC2,	PPCNONE,	{VS, RA0, RB}},
+
 {"stvrx",	X(31,679),	X_MASK,      CELL,	PPCNONE,	{VS, RA0, RB}},
 {"sthfcmux",	APU(31,679,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
 
@@ -4623,21 +5333,23 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"stwdx",	X(31,707),	X_MASK,      E500MC,	PPCNONE,	{RS, RA, RB}},
 
+{"stvflx",	X(31,709),	X_MASK,      PPCVEC2,	PPCNONE,	{VS, RA0, RB}},
+
 {"stwfcmux",	APU(31,711,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
 
-{"stxsdx",	X(31,716),	XX1_MASK,    PPCVSX,	PPCNONE,	{XS6, RA, RB}},
+{"stxsdx",	X(31,716),	XX1_MASK,    PPCVSX,	PPCNONE,	{XS6, RA0, RB}},
 
-{"subfzeo",	XO(31,200,1,0),	XORB_MASK,   PPCCOM,	PPCNONE,	{RT, RA}},
+{"subfzeo",	XO(31,200,1,0),	XORB_MASK, PPCCOM|PPCVLE, PPCNONE,	{RT, RA}},
 {"sfzeo",	XO(31,200,1,0),	XORB_MASK,   PWRCOM,	PPCNONE,	{RT, RA}},
-{"subfzeo.",	XO(31,200,1,1),	XORB_MASK,   PPCCOM,	PPCNONE,	{RT, RA}},
+{"subfzeo.",	XO(31,200,1,1),	XORB_MASK, PPCCOM|PPCVLE, PPCNONE,	{RT, RA}},
 {"sfzeo.",	XO(31,200,1,1),	XORB_MASK,   PWRCOM,	PPCNONE,	{RT, RA}},
 
-{"addzeo",	XO(31,202,1,0),	XORB_MASK,   PPCCOM,	PPCNONE,	{RT, RA}},
+{"addzeo",	XO(31,202,1,0),	XORB_MASK, PPCCOM|PPCVLE, PPCNONE,	{RT, RA}},
 {"azeo",	XO(31,202,1,0),	XORB_MASK,   PWRCOM,	PPCNONE,	{RT, RA}},
-{"addzeo.",	XO(31,202,1,1),	XORB_MASK,   PPCCOM,	PPCNONE,	{RT, RA}},
+{"addzeo.",	XO(31,202,1,1),	XORB_MASK, PPCCOM|PPCVLE, PPCNONE,	{RT, RA}},
 {"azeo.",	XO(31,202,1,1),	XORB_MASK,   PWRCOM,	PPCNONE,	{RT, RA}},
 
-{"stswi",	X(31,725),	X_MASK,      PPCCOM,	E500|E500MC,	{RS, RA0, NB}},
+{"stswi",	X(31,725),	X_MASK, PPCCOM|PPCVLE,	E500|E500MC,	{RS, RA0, NB}},
 {"stsi",	X(31,725),	X_MASK,      PWRCOM,	PPCNONE,	{RS, RA0, NB}},
 
 {"sthcx.",	XRC(31,726,1),	X_MASK,      POWER7,	PPCNONE,	{RS, RA0, RB}},
@@ -4651,10 +5363,12 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"sreq.",	XRC(31,729,1),	X_MASK,      M601,	PPCNONE,	{RA, RS, RB}},
 
 {"mftgpr",	XRC(31,735,0),	XRA_MASK,    POWER6,	POWER7,		{RT, FRB}},
-{"stfdepx",	X(31,735),	X_MASK,   E500MC|PPCA2,	PPCNONE,	{FRS, RA, RB}},
+{"stfdepx",	X(31,735),	X_MASK, E500MC|PPCA2|PPCVLE, PPCNONE,	{FRS, RA0, RB}},
 
 {"stddx",	X(31,739),	X_MASK,      E500MC,	PPCNONE,	{RS, RA, RB}},
 
+{"stvswx",	X(31,741),	X_MASK,      PPCVEC2,	PPCNONE,	{VS, RA0, RB}},
+
 {"stqfcmux",	APU(31,743,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
 
 {"subfmeo",	XO(31,232,1,0),	XORB_MASK,   PPCCOM,	PPCNONE,	{RT, RA}},
@@ -4662,8 +5376,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"subfmeo.",	XO(31,232,1,1),	XORB_MASK,   PPCCOM,	PPCNONE,	{RT, RA}},
 {"sfmeo.",	XO(31,232,1,1),	XORB_MASK,   PWRCOM,	PPCNONE,	{RT, RA}},
 
-{"mulldo",	XO(31,233,1,0),	XO_MASK,     PPC64,	PPCNONE,	{RT, RA, RB}},
-{"mulldo.",	XO(31,233,1,1),	XO_MASK,     PPC64,	PPCNONE,	{RT, RA, RB}},
+{"mulldo",	XO(31,233,1,0),	XO_MASK,  PPC64|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"mulldo.",	XO(31,233,1,1),	XO_MASK,  PPC64|PPCVLE, PPCNONE,	{RT, RA, RB}},
 
 {"addmeo",	XO(31,234,1,0),	XORB_MASK,   PPCCOM,	PPCNONE,	{RT, RA}},
 {"ameo",	XO(31,234,1,0),	XORB_MASK,   PWRCOM,	PPCNONE,	{RT, RA}},
@@ -4675,39 +5389,41 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"mullwo.",	XO(31,235,1,1),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
 {"mulso.",	XO(31,235,1,1),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
 
-{"dcba",	X(31,758), XRT_MASK, PPC405|PPC7450|BOOKE|PPCA2|PPC476, PPCNONE, {RA, RB}},
-{"dcbal",	XOPL(31,758,1), XRT_MASK,    E500MC,	PPCNONE,	{RA, RB}},
+{"dcba",	X(31,758), XRT_MASK, PPC405|PPC7450|BOOKE|PPCA2|PPC476, PPCNONE, {RA0, RB}},
+{"dcbal",	XOPL(31,758,1), XRT_MASK,    E500MC,	PPCNONE,	{RA0, RB}},
 
 {"stfdux",	X(31,759),	X_MASK,      COM,	PPCEFS,		{FRS, RAS, RB}},
 
 {"srliq",	XRC(31,760,0),	X_MASK,      M601,	PPCNONE,	{RA, RS, SH}},
 {"srliq.",	XRC(31,760,1),	X_MASK,      M601,	PPCNONE,	{RA, RS, SH}},
 
+{"lvsm",	X(31,773),	X_MASK,      PPCVEC2,	PPCNONE,	{VD, RA0, RB}},
+{"stvepxl",	X(31,775),	X_MASK,      PPCVEC2,	PPCNONE,	{VS, RA0, RB}},
 {"lvlxl",	X(31,775),	X_MASK,      CELL,	PPCNONE,	{VD, RA0, RB}},
 {"ldfcmux",	APU(31,775,0), 	APU_MASK,    PPC405,	PPCNONE,	{FCRT, RA, RB}},
 
 {"dozo",	XO(31,264,1,0),	XO_MASK,     M601,	PPCNONE,	{RT, RA, RB}},
 {"dozo.",	XO(31,264,1,1),	XO_MASK,     M601,	PPCNONE,	{RT, RA, RB}},
 
-{"addo",	XO(31,266,1,0),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"addo",	XO(31,266,1,0),	XO_MASK, PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"caxo",	XO(31,266,1,0),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
-{"addo.",	XO(31,266,1,1),	XO_MASK,     PPCCOM,	PPCNONE,	{RT, RA, RB}},
+{"addo.",	XO(31,266,1,1),	XO_MASK, PPCCOM|PPCVLE, PPCNONE,	{RT, RA, RB}},
 {"caxo.",	XO(31,266,1,1),	XO_MASK,     PWRCOM,	PPCNONE,	{RT, RA, RB}},
 
-{"lxvw4x",	X(31,780),	XX1_MASK,    PPCVSX,	PPCNONE,	{XT6, RA, RB}},
+{"lxvw4x",	X(31,780),	XX1_MASK,    PPCVSX,	PPCNONE,	{XT6, RA0, RB}},
 
-{"tlbivax",	X(31,786),	XRT_MASK,  BOOKE|PPCA2|PPC476, PPCNONE,	{RA, RB}},
+{"tlbivax",	X(31,786),	XRT_MASK, BOOKE|PPCA2|PPC476|PPCVLE, PPCNONE, {RA0, RB}},
 
 {"lwzcix",	X(31,789),	X_MASK,      POWER6,	PPCNONE,	{RT, RA0, RB}},
 
 {"lhbrx",	X(31,790),	X_MASK,      COM,	PPCNONE,	{RT, RA0, RB}},
 
-{"lfdpx",	X(31,791),	X_MASK,      POWER6,	POWER7,		{FRTp, RA, RB}},
+{"lfdpx",	X(31,791),	X_MASK,      POWER6,	POWER7,		{FRTp, RA0, RB}},
 {"lfqx",	X(31,791),	X_MASK,      POWER2,	PPCNONE,	{FRT, RA, RB}},
 
-{"sraw",	XRC(31,792,0),	X_MASK,      PPCCOM,	PPCNONE,	{RA, RS, RB}},
+{"sraw",	XRC(31,792,0),	X_MASK,  PPCCOM|PPCVLE, PPCNONE,	{RA, RS, RB}},
 {"sra",		XRC(31,792,0),	X_MASK,      PWRCOM,	PPCNONE,	{RA, RS, RB}},
-{"sraw.",	XRC(31,792,1),	X_MASK,      PPCCOM,	PPCNONE,	{RA, RS, RB}},
+{"sraw.",	XRC(31,792,1),	X_MASK,	 PPCCOM|PPCVLE, PPCNONE,	{RA, RS, RB}},
 {"sra.",	XRC(31,792,1),	X_MASK,      PWRCOM,	PPCNONE,	{RA, RS, RB}},
 
 {"srad",	XRC(31,794,0),	X_MASK,      PPC64,	PPCNONE,	{RA, RS, RB}},
@@ -4715,6 +5431,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"lfddx",	X(31,803),	X_MASK,      E500MC,	PPCNONE,	{FRT, RA, RB}},
 
+{"lvtrxl",	X(31,805),	X_MASK,      PPCVEC2,	PPCNONE,	{VD, RA0, RB}},
+{"stvepx",	X(31,807),	X_MASK,      PPCVEC2,	PPCNONE,	{VS, RA0, RB}},
 {"lvrxl",	X(31,807),	X_MASK,      CELL,	PPCNONE,	{VD, RA0, RB}},
 
 {"rac",		X(31,818),	X_MASK,      M601,	PPCNONE,	{RT, RA, RB}},
@@ -4727,32 +5445,36 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"lfqux",	X(31,823),	X_MASK,      POWER2,	PPCNONE,	{FRT, RA, RB}},
 
-{"srawi",	XRC(31,824,0),	X_MASK,      PPCCOM,	PPCNONE,	{RA, RS, SH}},
+{"srawi",	XRC(31,824,0),	X_MASK,  PPCCOM|PPCVLE, PPCNONE,	{RA, RS, SH}},
 {"srai",	XRC(31,824,0),	X_MASK,      PWRCOM,	PPCNONE,	{RA, RS, SH}},
-{"srawi.",	XRC(31,824,1),	X_MASK,      PPCCOM,	PPCNONE,	{RA, RS, SH}},
+{"srawi.",	XRC(31,824,1),	X_MASK,	 PPCCOM|PPCVLE, PPCNONE,	{RA, RS, SH}},
 {"srai.",	XRC(31,824,1),	X_MASK,      PWRCOM,	PPCNONE,	{RA, RS, SH}},
 
-{"sradi",	XS(31,413,0),	XS_MASK,     PPC64,	PPCNONE,	{RA, RS, SH6}},
-{"sradi.",	XS(31,413,1),	XS_MASK,     PPC64,	PPCNONE,	{RA, RS, SH6}},
+{"sradi",	XS(31,413,0),	XS_MASK,     PPC64|PPCVLE, PPCNONE,	{RA, RS, SH6}},
+{"sradi.",	XS(31,413,1),	XS_MASK,     PPC64|PPCVLE, PPCNONE,	{RA, RS, SH6}},
+
+{"lvtlxl",	X(31,837),	X_MASK,      PPCVEC2,	PPCNONE,	{VD, RA0, RB}},
 
 {"divo",	XO(31,331,1,0),	XO_MASK,     M601,	PPCNONE,	{RT, RA, RB}},
 {"divo.",	XO(31,331,1,1),	XO_MASK,     M601,	PPCNONE,	{RT, RA, RB}},
 
-{"lxvd2x",	X(31,844),	XX1_MASK,    PPCVSX,	PPCNONE,	{XT6, RA, RB}},
+{"lxvd2x",	X(31,844),	XX1_MASK,    PPCVSX,	PPCNONE,	{XT6, RA0, RB}},
 
-{"tlbsrx.",	XRC(31,850,1),	XRT_MASK,    PPCA2,	PPCNONE,	{RA, RB}},
+{"tlbsrx.",	XRC(31,850,1),	XRT_MASK,    PPCA2,	PPCNONE,	{RA0, RB}},
 
 {"slbmfev",	X(31,851),	XRA_MASK,    PPC64,	PPCNONE,	{RT, RB}},
 
 {"lbzcix",	X(31,853),	X_MASK,      POWER6,	PPCNONE,	{RT, RA0, RB}},
 
 {"eieio",	X(31,854),	0xffffffff,  PPC,   BOOKE|PPCA2|PPC476,	{0}},
-{"mbar",	X(31,854),	X_MASK, BOOKE|PPCA2|PPC476, PPCNONE,	{MO}},
-{"eieio",	XMBAR(31,854,1),0xffffffff,  E500,   PPCNONE,	{0}},
+{"mbar",	X(31,854),	X_MASK, BOOKE|PPCA2|PPC476|PPCVLE, PPCNONE, {MO}},
+{"eieio",	XMBAR(31,854,1),0xffffffff,  E500,	PPCNONE,	{0}},
 {"eieio",	X(31,854),	0xffffffff, PPCA2|PPC476, PPCNONE,	{0}},
 
 {"lfiwax",	X(31,855),	X_MASK, POWER6|PPCA2|PPC476, PPCNONE,	{FRT, RA0, RB}},
 
+{"lvswxl",	X(31,869),	X_MASK,      PPCVEC2,	PPCNONE,	{VD, RA0, RB}},
+
 {"abso",	XO(31,360,1,0),	XORB_MASK,   M601,	PPCNONE,	{RT, RA}},
 {"abso.",	XO(31,360,1,1),	XORB_MASK,   M601,	PPCNONE,	{RT, RA}},
 
@@ -4771,10 +5493,10 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"divweuo",	XO(31,395,1,0),	XO_MASK,  POWER7|PPCA2,	PPCNONE,	{RT, RA, RB}},
 {"divweuo.",	XO(31,395,1,1),	XO_MASK,  POWER7|PPCA2,	PPCNONE,	{RT, RA, RB}},
 
-{"stxvw4x",	X(31,908),	XX1_MASK,    PPCVSX,	PPCNONE,	{XS6, RA, RB}},
+{"stxvw4x",	X(31,908),	XX1_MASK,    PPCVSX,	PPCNONE,	{XS6, RA0, RB}},
 
-{"tlbsx",	XRC(31,914,0),	X_MASK, PPC403|BOOKE|PPCA2|PPC476, PPCNONE, {RTO, RA, RB}},
-{"tlbsx.",	XRC(31,914,1),	X_MASK, PPC403|BOOKE|PPCA2|PPC476, PPCNONE, {RTO, RA, RB}},
+{"tlbsx",	XRC(31,914,0),	X_MASK, PPC403|BOOKE|PPCA2|PPC476, PPCNONE, {RTO, RA0, RB}},
+{"tlbsx.",	XRC(31,914,1),	X_MASK, PPC403|BOOKE|PPCA2|PPC476, PPCNONE, {RTO, RA0, RB}},
 
 {"slbmfee",	X(31,915),	XRA_MASK,    PPC64,	PPCNONE,	{RT, RB}},
 
@@ -4782,8 +5504,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"sthbrx",	X(31,918),	X_MASK,      COM,	PPCNONE,	{RS, RA0, RB}},
 
-{"stfdpx",	X(31,919),	X_MASK,      POWER6,	POWER7,		{FRSp, RA, RB}},
-{"stfqx",	X(31,919),	X_MASK,      POWER2,	PPCNONE,	{FRS, RA, RB}},
+{"stfdpx",	X(31,919),	X_MASK,      POWER6,	POWER7,		{FRSp, RA0, RB}},
+{"stfqx",	X(31,919),	X_MASK,      POWER2,	PPCNONE,	{FRS, RA0, RB}},
 
 {"sraq",	XRC(31,920,0),	X_MASK,      M601,	PPCNONE,	{RA, RS, RB}},
 {"sraq.",	XRC(31,920,1),	X_MASK,      M601,	PPCNONE,	{RA, RS, RB}},
@@ -4791,13 +5513,15 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"srea",	XRC(31,921,0),	X_MASK,      M601,	PPCNONE,	{RA, RS, RB}},
 {"srea.",	XRC(31,921,1),	X_MASK,      M601,	PPCNONE,	{RA, RS, RB}},
 
-{"extsh",	XRC(31,922,0),	XRB_MASK,    PPCCOM,	PPCNONE,	{RA, RS}},
+{"extsh",	XRC(31,922,0),	XRB_MASK,    PPCCOM|PPCVLE, PPCNONE,	{RA, RS}},
 {"exts",	XRC(31,922,0),	XRB_MASK,    PWRCOM,	PPCNONE,	{RA, RS}},
-{"extsh.",	XRC(31,922,1),	XRB_MASK,    PPCCOM,	PPCNONE,	{RA, RS}},
+{"extsh.",	XRC(31,922,1),	XRB_MASK,    PPCCOM|PPCVLE, PPCNONE,	{RA, RS}},
 {"exts.",	XRC(31,922,1),	XRB_MASK,    PWRCOM,	PPCNONE,	{RA, RS}},
 
 {"stfddx",	X(31,931),	X_MASK,      E500MC,	PPCNONE,	{FRS, RA, RB}},
 
+{"stvfrxl",	X(31,933),	X_MASK,      PPCVEC2,	PPCNONE,	{VS, RA0, RB}},
+
 {"wclrone",	XOPL2(31,934,2),XRT_MASK,    PPCA2,	PPCNONE,	{RA0, RB}},
 {"wclrall",	X(31,934),	XRARB_MASK,  PPCA2,	PPCNONE,	{L}},
 {"wclr",	X(31,934),	X_MASK,	     PPCA2,	PPCNONE,	{L, RA0, RB}},
@@ -4823,19 +5547,21 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 {"sraiq",	XRC(31,952,0),	X_MASK,      M601,	PPCNONE,	{RA, RS, SH}},
 {"sraiq.",	XRC(31,952,1),	X_MASK,      M601,	PPCNONE,	{RA, RS, SH}},
 
-{"extsb",	XRC(31,954,0),	XRB_MASK,    PPC,	PPCNONE,	{RA, RS}},
-{"extsb.",	XRC(31,954,1),	XRB_MASK,    PPC,	PPCNONE,	{RA, RS}},
-
-{"iccci",	X(31,966), XRT_MASK, PPC403|PPC440|TITAN|PPCA2, PPCNONE, {RAOPT, RBOPT}},
-{"ici",		X(31,966),	XRARB_MASK,  PPCA2|PPC476, PPCNONE,	{CT}},
+{"extsb",	XRC(31,954,0),	XRB_MASK, PPC|PPCVLE,	PPCNONE,	{RA, RS}},
+{"extsb.",	XRC(31,954,1),	XRB_MASK, PPC|PPCVLE,	PPCNONE,	{RA, RS}},
 
-{"divduo",	XO(31,457,1,0),	XO_MASK,     PPC64,	PPCNONE,	{RT, RA, RB}},
-{"divduo.",	XO(31,457,1,1),	XO_MASK,     PPC64,	PPCNONE,	{RT, RA, RB}},
+{"stvflxl",	X(31,965),	X_MASK,      PPCVEC2,	PPCNONE,	{VS, RA0, RB}},
 
-{"divwuo",	XO(31,459,1,0),	XO_MASK,     PPC,	PPCNONE,	{RT, RA, RB}},
-{"divwuo.",	XO(31,459,1,1),	XO_MASK,     PPC,	PPCNONE,	{RT, RA, RB}},
+{"iccci",	X(31,966), XRT_MASK, PPC403|PPC440|TITAN|PPCA2, PPCNONE, {RAOPT, RBOPT}},
+{"ici",		X(31,966),	XRARB_MASK,  PPCA2|PPC476|PPCVLE, PPCNONE, {CT}},
+ 
+{"divduo",	XO(31,457,1,0),	XO_MASK,     PPC64|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"divduo.",	XO(31,457,1,1),	XO_MASK,     PPC64|PPCVLE, PPCNONE,	{RT, RA, RB}},
+ 
+{"divwuo",	XO(31,459,1,0),	XO_MASK,     PPC|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"divwuo.",	XO(31,459,1,1),	XO_MASK,     PPC|PPCVLE, PPCNONE,	{RT, RA, RB}},
 
-{"stxvd2x",	X(31,972),	XX1_MASK,    PPCVSX,	PPCNONE,	{XS6, RA, RB}},
+{"stxvd2x",	X(31,972),	XX1_MASK,    PPCVSX,	PPCNONE,	{XS6, RA0, RB}},
 
 {"tlbld",	X(31,978),	XRTRA_MASK,  PPC, PPC403|BOOKE|PPCA2|PPC476, {RB}},
 {"tlbwehi",	XTLB(31,978,0),	XTLB_MASK,   PPC403,	PPCNONE,	{RT, RA}},
@@ -4844,36 +5570,39 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 
 {"stbcix",	X(31,981),	X_MASK,      POWER6,	PPCNONE,	{RS, RA0, RB}},
 
-{"icbi",	X(31,982),	XRT_MASK,    PPC,	PPCNONE,	{RA, RB}},
+{"icbi",	X(31,982),	XRT_MASK,    PPC,	PPCNONE,	{RA0, RB}},
 
 {"stfiwx",	X(31,983),	X_MASK,      PPC,	PPCEFS,		{FRS, RA0, RB}},
 
-{"extsw",	XRC(31,986,0),  XRB_MASK,    PPC64,	PPCNONE,	{RA, RS}},
-{"extsw.",	XRC(31,986,1),	XRB_MASK,    PPC64,	PPCNONE,	{RA, RS}},
+{"extsw",	XRC(31,986,0),  XRB_MASK, PPC64|PPCVLE, PPCNONE,	{RA, RS}},
+{"extsw.",	XRC(31,986,1),	XRB_MASK, PPC64|PPCVLE, PPCNONE,	{RA, RS}},
+
+{"icbiep",	XRT(31,991,0),	XRT_MASK, E500MC|PPCA2|PPCVLE, PPCNONE, {RA0, RB}},
 
-{"icbiep",	XRT(31,991,0),	XRT_MASK, E500MC|PPCA2,	PPCNONE,	{RA, RB}},
+{"stvswxl",	X(31,997),	X_MASK,      PPCVEC2,	PPCNONE,	{VS, RA0, RB}},
 
-{"icread",	X(31,998), XRT_MASK, PPC403|PPC440|PPC476|TITAN, PPCNONE, {RA, RB}},
+{"icread",	X(31,998), XRT_MASK, PPC403|PPC440|PPC476|TITAN|PPCVLE, PPCNONE, {RA0, RB}},
 
 {"nabso",	XO(31,488,1,0),	XORB_MASK,   M601,	PPCNONE,	{RT, RA}},
 {"nabso.",	XO(31,488,1,1),	XORB_MASK,   M601,	PPCNONE,	{RT, RA}},
 
-{"divdo",	XO(31,489,1,0),	XO_MASK,     PPC64,	PPCNONE,	{RT, RA, RB}},
-{"divdo.",	XO(31,489,1,1),	XO_MASK,     PPC64,	PPCNONE,	{RT, RA, RB}},
+{"divdo",	XO(31,489,1,0),	XO_MASK,  PPC64|PPCVLE, PPCNONE,	{RT, RA, RB}},
+{"divdo.",	XO(31,489,1,1),	XO_MASK,  PPC64|PPCVLE, PPCNONE,	{RT, RA, RB}},
+ 
+{"divwo",	XO(31,491,1,0),	XO_MASK,   PPC|PPCVLE,	PPCNONE,	{RT, RA, RB}},
+{"divwo.",	XO(31,491,1,1),	XO_MASK,   PPC|PPCVLE,	PPCNONE,	{RT, RA, RB}},
 
-{"divwo",	XO(31,491,1,0),	XO_MASK,     PPC,	PPCNONE,	{RT, RA, RB}},
-{"divwo.",	XO(31,491,1,1),	XO_MASK,     PPC,	PPCNONE,	{RT, RA, RB}},
 
 {"tlbli",	X(31,1010),	XRTRA_MASK,  PPC,	TITAN,  	{RB}},
 
 {"stdcix",	X(31,1013),	X_MASK,      POWER6,	PPCNONE,	{RS, RA0, RB}},
 
-{"dcbz",	X(31,1014),	XRT_MASK,    PPC,	PPCNONE,	{RA, RB}},
-{"dclz",	X(31,1014),	XRT_MASK,    PPC,	PPCNONE,	{RA, RB}},
+{"dcbz",	X(31,1014),	XRT_MASK,    PPC,	PPCNONE,	{RA0, RB}},
+{"dclz",	X(31,1014),	XRT_MASK,    PPC,	PPCNONE,	{RA0, RB}},
 
-{"dcbzep",	XRT(31,1023,0),	XRT_MASK, E500MC|PPCA2,	PPCNONE,	{RA, RB}},
+{"dcbzep",	XRT(31,1023,0),	XRT_MASK, E500MC|PPCA2|PPCVLE, PPCNONE,	{RA0, RB}},
 
-{"dcbzl",	XOPL(31,1014,1), XRT_MASK, POWER4|E500MC, PPC476,	{RA, RB}},
+{"dcbzl",	XOPL(31,1014,1), XRT_MASK, POWER4|E500MC, PPC476,	{RA0, RB}},
 
 {"cctpl",	0x7c210b78,	0xffffffff,  CELL,	PPCNONE,	{0}},
 {"cctpm",	0x7c421378,	0xffffffff,  CELL,	PPCNONE,	{0}},
@@ -5439,6 +6168,236 @@ const struct powerpc_opcode powerpc_opcodes[] = {
 const int powerpc_num_opcodes =
   sizeof (powerpc_opcodes) / sizeof (powerpc_opcodes[0]);
 

+/* The VLE opcode table.
+
+   The format of this opcode table is the same as the main opcode table.  */
+
+const struct powerpc_opcode vle_opcodes[] = {
+
+{"se_illegal",	C(0),		C_MASK,		PPCVLE,	PPCNONE,	{}},
+{"se_isync",	C(1),		C_MASK,		PPCVLE,	PPCNONE,	{}},
+{"se_sc",	C(2),		C_MASK,		PPCVLE,	PPCNONE,	{}},
+{"se_blr",	C_LK(2,0),	C_LK_MASK,	PPCVLE,	PPCNONE,	{}},
+{"se_blrl",	C_LK(2,1),	C_LK_MASK,	PPCVLE,	PPCNONE,	{}},
+{"se_bctr",	C_LK(3,0),	C_LK_MASK,	PPCVLE,	PPCNONE,	{}},
+{"se_bctrl",	C_LK(3,1),	C_LK_MASK,	PPCVLE,	PPCNONE,	{}},
+{"se_rfi",	C(8),		C_MASK,		PPCVLE,	PPCNONE,	{}},
+{"se_rfci",	C(9),		C_MASK,		PPCVLE,	PPCNONE,	{}},
+{"se_rfdi",	C(10),		C_MASK,		PPCVLE,	PPCNONE,	{}},
+{"se_rfmci",	C(11),		C_MASK,		PPCVLE,	PPCNONE,	{}},
+{"se_not",	SE_R(0,2),	SE_R_MASK,	PPCVLE,	PPCNONE,	{RX}},
+{"se_neg",	SE_R(0,3),	SE_R_MASK,	PPCVLE,	PPCNONE,	{RX}},
+{"se_mflr",	SE_R(0,8),	SE_R_MASK,	PPCVLE,	PPCNONE,	{RX}},
+{"se_mtlr",	SE_R(0,9),	SE_R_MASK,	PPCVLE,	PPCNONE,	{RX}},
+{"se_mfctr",	SE_R(0,10),	SE_R_MASK,	PPCVLE,	PPCNONE,	{RX}},
+{"se_mtctr",	SE_R(0,11),	SE_R_MASK,	PPCVLE,	PPCNONE,	{RX}},
+{"se_extzb",	SE_R(0,12),	SE_R_MASK,	PPCVLE,	PPCNONE,	{RX}},
+{"se_extsb",	SE_R(0,13),	SE_R_MASK,	PPCVLE,	PPCNONE,	{RX}},
+{"se_extzh",	SE_R(0,14),	SE_R_MASK,	PPCVLE,	PPCNONE,	{RX}},
+{"se_extsh",	SE_R(0,15),	SE_R_MASK,	PPCVLE,	PPCNONE,	{RX}},
+{"se_mr",	SE_RR(0,1),	SE_RR_MASK,	PPCVLE,	PPCNONE,	{RX, RY}},
+{"se_mtar",	SE_RR(0,2),	SE_RR_MASK,	PPCVLE,	PPCNONE,	{ARX, RY}},
+{"se_mfar",	SE_RR(0,3),	SE_RR_MASK,	PPCVLE,	PPCNONE,	{RX, ARY}},
+{"se_add",	SE_RR(1,0),	SE_RR_MASK,	PPCVLE,	PPCNONE,	{RX, RY}},
+{"se_mullw",	SE_RR(1,1),	SE_RR_MASK,	PPCVLE,	PPCNONE,	{RX, RY}},
+{"se_sub",	SE_RR(1,2),	SE_RR_MASK,	PPCVLE,	PPCNONE,	{RX, RY}},
+{"se_subf",	SE_RR(1,3),	SE_RR_MASK,	PPCVLE,	PPCNONE,	{RX, RY}},
+{"se_cmp",	SE_RR(3,0),	SE_RR_MASK,	PPCVLE,	PPCNONE,	{RX, RY}},
+{"se_cmpl",	SE_RR(3,1),	SE_RR_MASK,	PPCVLE,	PPCNONE,	{RX, RY}},
+{"se_cmph",	SE_RR(3,2),	SE_RR_MASK,	PPCVLE,	PPCNONE,	{RX, RY}},
+{"se_cmphl",	SE_RR(3,3),	SE_RR_MASK,	PPCVLE,	PPCNONE,	{RX, RY}},
+ 
+{"e_cmpi",	SCI8BF(6,0,21),	SCI8BF_MASK,	PPCVLE,	PPCNONE,	{CRD32, RA, SCLSCI8}},
+{"e_cmpli",	SCI8BF(6,1,21),	SCI8BF_MASK,	PPCVLE,	PPCNONE,	{CRD32, RA, SCLSCI8}},
+{"e_addi",	SCI8(6,16),	SCI8_MASK,	PPCVLE,	PPCNONE,	{RT, RA, SCLSCI8}},
+{"e_subi",	SCI8(6,16),	SCI8_MASK,	PPCVLE,	PPCNONE,	{RT, RA, SCLSCI8N}},
+{"e_addi.",	SCI8(6,17),	SCI8_MASK,	PPCVLE,	PPCNONE,	{RT, RA, SCLSCI8}},
+{"e_addic",	SCI8(6,18),	SCI8_MASK,	PPCVLE,	PPCNONE,	{RT, RA, SCLSCI8}},
+{"e_subic",	SCI8(6,18),	SCI8_MASK,	PPCVLE,	PPCNONE,	{RT, RA, SCLSCI8N}},
+{"e_addic.",	SCI8(6,19),	SCI8_MASK,	PPCVLE,	PPCNONE,	{RT, RA, SCLSCI8}},
+{"e_subic.",	SCI8(6,19),	SCI8_MASK,	PPCVLE,	PPCNONE,	{RT, RA, SCLSCI8N}},
+{"e_mulli",	SCI8(6,20),	SCI8_MASK,	PPCVLE,	PPCNONE,	{RT, RA, SCLSCI8}},
+{"e_subfic",	SCI8(6,22),	SCI8_MASK,	PPCVLE,	PPCNONE,	{RT, RA, SCLSCI8}},
+{"e_subfic.",	SCI8(6,23),	SCI8_MASK,	PPCVLE,	PPCNONE,	{RT, RA, SCLSCI8}},
+{"e_andi",	SCI8(6,24),	SCI8_MASK,	PPCVLE,	PPCNONE,	{RA, RS, SCLSCI8}},
+{"e_andi.",	SCI8(6,25),	SCI8_MASK,	PPCVLE,	PPCNONE,	{RA, RS, SCLSCI8}},
+{"e_nop",	SCI8(6,26),	0xffffffff,	PPCVLE,	PPCNONE,	{0}},
+{"e_ori",	SCI8(6,26),	SCI8_MASK,	PPCVLE,	PPCNONE,	{RA, RS, SCLSCI8}},
+{"e_ori.",	SCI8(6,27),	SCI8_MASK,	PPCVLE,	PPCNONE,	{RA, RS, SCLSCI8}},
+{"e_xori",	SCI8(6,28),	SCI8_MASK,	PPCVLE,	PPCNONE,	{RA, RS, SCLSCI8}},
+{"e_xori.",	SCI8(6,29),	SCI8_MASK,	PPCVLE,	PPCNONE,	{RA, RS, SCLSCI8}},
+{"e_lbzu",	OPVUP(6,0),	OPVUP_MASK,	PPCVLE,	PPCNONE,	{RT, D8, RA0}},
+{"e_lhau",	OPVUP(6,3),	OPVUP_MASK,	PPCVLE,	PPCNONE,	{RT, D8, RA0}},
+{"e_lhzu",	OPVUP(6,1),	OPVUP_MASK,	PPCVLE,	PPCNONE,	{RT, D8, RA0}},
+{"e_lmw",	OPVUP(6,8),	OPVUP_MASK,	PPCVLE,	PPCNONE,	{RT, D8, RA0}},
+{"e_lwzu",	OPVUP(6,2),	OPVUP_MASK,	PPCVLE,	PPCNONE,	{RT, D8, RA0}},
+{"e_stbu",	OPVUP(6,4),	OPVUP_MASK,	PPCVLE,	PPCNONE,	{RT, D8, RA0}},
+{"e_sthu",	OPVUP(6,5),	OPVUP_MASK,	PPCVLE,	PPCNONE,	{RT, D8, RA0}},
+{"e_stwu",	OPVUP(6,6),	OPVUP_MASK,	PPCVLE,	PPCNONE,	{RT, D8, RA0}},
+{"e_stmw",	OPVUP(6,9),	OPVUP_MASK,	PPCVLE,	PPCNONE,	{RT, D8, RA0}},
+{"e_add16i",	OP(7),		OP_MASK,	PPCVLE,	PPCNONE,	{RT, RA, SI}},
+{"e_la",	OP(7),		OP_MASK,    	PPCVLE,	PPCNONE,	{RT, D, RA0}},
+{"e_sub16i",	OP(7),		OP_MASK,	PPCVLE,	PPCNONE,	{RT, RA, NSI}},
+
+{"se_addi",	SE_IM5(8,0),	SE_IM5_MASK,	PPCVLE,	PPCNONE,	{RX, OIMM5}},
+{"se_cmpli",	SE_IM5(8,1),	SE_IM5_MASK,	PPCVLE,	PPCNONE,	{RX, OIMM5}},
+{"se_subi",	SE_IM5(9,0),	SE_IM5_MASK,	PPCVLE,	PPCNONE,	{RX, OIMM5}},
+{"se_subi.",	SE_IM5(9,1),	SE_IM5_MASK,	PPCVLE,	PPCNONE,	{RX, OIMM5}},
+{"se_cmpi",	SE_IM5(10,1),	SE_IM5_MASK,	PPCVLE,	PPCNONE,	{RX, UI5}},
+{"se_bmaski",	SE_IM5(11,0),	SE_IM5_MASK,	PPCVLE,	PPCNONE,	{RX, UI5}},
+{"se_andi",	SE_IM5(11,1),	SE_IM5_MASK,	PPCVLE,	PPCNONE,	{RX, UI5}},
+ 
+{"e_lbz",	OP(12),		OP_MASK,	PPCVLE,	PPCNONE,	{RT, D, RA0}},
+{"e_stb",	OP(13),		OP_MASK,	PPCVLE,	PPCNONE,	{RT, D, RA0}},
+{"e_lha",	OP(14),		OP_MASK,	PPCVLE,	PPCNONE,	{RT, D, RA0}},
+
+{"se_srw",	SE_RR(16,0),	SE_RR_MASK,	PPCVLE,	PPCNONE,	{RX, RY}},
+{"se_sraw",	SE_RR(16,1),	SE_RR_MASK,	PPCVLE,	PPCNONE,	{RX, RY}},
+{"se_slw",	SE_RR(16,2),	SE_RR_MASK,	PPCVLE,	PPCNONE,	{RX, RY}},
+{"se_nop",	SE_RR(17,0),	0xffff,		PPCVLE,	PPCNONE,	{0}},
+{"se_or",	SE_RR(17,0),	SE_RR_MASK,	PPCVLE,	PPCNONE,	{RX, RY}},
+{"se_andc",	SE_RR(17,1),	SE_RR_MASK,	PPCVLE,	PPCNONE,	{RX, RY}},
+{"se_and",	SE_RR(17,2),	SE_RR_MASK,	PPCVLE,	PPCNONE,	{RX, RY}},
+{"se_and.",	SE_RR(17,3),	SE_RR_MASK,	PPCVLE,	PPCNONE,	{RX, RY}},
+{"se_li",	IM7(9),		IM7_MASK,	PPCVLE,	PPCNONE,	{RX, UI7}},
+ 
+{"e_lwz",	OP(20),		OP_MASK,	PPCVLE,	PPCNONE,	{RT, D, RA0}},
+{"e_stw",	OP(21),		OP_MASK,	PPCVLE,	PPCNONE,	{RT, D, RA0}},
+{"e_lhz",	OP(22),		OP_MASK,	PPCVLE,	PPCNONE,	{RT, D, RA0}},
+{"e_sth",	OP(23),		OP_MASK,	PPCVLE,	PPCNONE,	{RT, D, RA0}},
+
+{"se_bclri",	SE_IM5(24,0),	SE_IM5_MASK,	PPCVLE,	PPCNONE,	{RX, UI5}},
+{"se_bgeni",	SE_IM5(24,1),	SE_IM5_MASK,	PPCVLE,	PPCNONE,	{RX, UI5}},
+{"se_bseti",	SE_IM5(25,0),	SE_IM5_MASK,	PPCVLE,	PPCNONE,	{RX, UI5}},
+{"se_btsti",	SE_IM5(25,1),	SE_IM5_MASK,	PPCVLE,	PPCNONE,	{RX, UI5}},
+{"se_srwi",	SE_IM5(26,0),	SE_IM5_MASK,	PPCVLE,	PPCNONE,	{RX, UI5}},
+{"se_srawi",	SE_IM5(26,1),	SE_IM5_MASK,	PPCVLE,	PPCNONE,	{RX, UI5}},
+{"se_slwi",	SE_IM5(27,0),	SE_IM5_MASK,	PPCVLE,	PPCNONE,	{RX, UI5}},
+
+{"e_lis",	I16L(28,28),	I16L_MASK,	PPCVLE,	PPCNONE,	{RD, VLEUIMML}},
+{"e_and2is.",	I16L(28,29),	I16L_MASK,	PPCVLE,	PPCNONE,	{RD, VLEUIMML}},
+{"e_or2is",	I16L(28,26),	I16L_MASK,	PPCVLE,	PPCNONE,	{RD, VLEUIMML}},
+{"e_and2i.",	I16L(28,25),	I16L_MASK,	PPCVLE,	PPCNONE,	{RD, VLEUIMML}},
+{"e_or2i",	I16L(28,24),	I16L_MASK,	PPCVLE,	PPCNONE,	{RD, VLEUIMML}},
+{"e_cmphl16i",	IA16(28,23),	IA16_MASK,	PPCVLE,	PPCNONE,	{RA, VLEUIMM}},
+{"e_cmph16i",	IA16(28,22),	IA16_MASK,	PPCVLE,	PPCNONE,	{RA, VLESIMM}},
+{"e_cmpl16i",	I16A(28,21),	I16A_MASK,	PPCVLE,	PPCNONE,	{RA, VLEUIMM}},
+{"e_cmplwi",	I16A(28,21),	I16A_MASK,	PPCVLE,	PPCNONE,	{RA, VLESIMM}},
+{"e_mull2i",	I16A(28,20),	I16A_MASK,	PPCVLE,	PPCNONE,	{RA, VLESIMM}},
+{"e_cmp16i",	IA16(28,19),	IA16_MASK,	PPCVLE,	PPCNONE,	{RA, VLESIMM}},
+{"e_cmpwi",	IA16(28,19),	IA16_MASK,	PPCVLE,	PPCNONE,	{RA, VLESIMM}},
+{"e_sub2is",	I16A(28,18),	I16A_MASK,	PPCVLE,	PPCNONE,	{RA, VLENSIMM}},
+{"e_add2is",	I16A(28,18),	I16A_MASK,	PPCVLE,	PPCNONE,	{RA, VLESIMM}},
+{"e_sub2i.",	I16A(28,17),	I16A_MASK,	PPCVLE,	PPCNONE,	{RA, VLENSIMM}},
+{"e_add2i.",	I16A(28,17),	I16A_MASK,	PPCVLE,	PPCNONE,	{RA, VLESIMM}},
+{"e_li",	LI20(28,0),	LI20_MASK,	PPCVLE,	PPCNONE,	{RT, IMM20}},
+{"e_rlwimi",	M(29,0),	M_MASK,		PPCVLE,	PPCNONE,	{RA, RS, SH, MB, ME}},
+{"e_rlwinm",	M(29,1),	M_MASK,		PPCVLE,	PPCNONE,	{RA, RT, SH, MBE, ME}},
+{"e_b",		BD24(30,0,0),	BD24_MASK,	PPCVLE,	PPCNONE,	{B24}},
+{"e_bl",	BD24(30,0,1),	BD24_MASK,	PPCVLE,	PPCNONE,	{B24}},
+{"e_bdnz",	EBD15(30,8,BO32DNZ,0),	EBD15_MASK, PPCVLE, PPCNONE,	{B15}},
+{"e_bdnzl",	EBD15(30,8,BO32DNZ,1),	EBD15_MASK, PPCVLE, PPCNONE,	{B15}},
+{"e_bdz",	EBD15(30,8,BO32DZ,0),	EBD15_MASK, PPCVLE, PPCNONE,	{B15}},
+{"e_bdzl",	EBD15(30,8,BO32DZ,1),	EBD15_MASK, PPCVLE, PPCNONE,	{B15}},
+{"e_bge",	EBD15BI(30,8,BO32F,CBLT,0), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_bgel",	EBD15BI(30,8,BO32F,CBLT,1), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_bnl",	EBD15BI(30,8,BO32F,CBLT,0), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_bnll",	EBD15BI(30,8,BO32F,CBLT,1), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_blt",	EBD15BI(30,8,BO32T,CBLT,0), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_bltl",	EBD15BI(30,8,BO32T,CBLT,1), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_bgt",	EBD15BI(30,8,BO32T,CBGT,0), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_bgtl",	EBD15BI(30,8,BO32T,CBGT,1), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_ble",	EBD15BI(30,8,BO32F,CBGT,0), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_blel",	EBD15BI(30,8,BO32F,CBGT,1), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_bng",	EBD15BI(30,8,BO32F,CBGT,0), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_bngl",	EBD15BI(30,8,BO32F,CBGT,1), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_bne",	EBD15BI(30,8,BO32F,CBEQ,0), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_bnel",	EBD15BI(30,8,BO32F,CBEQ,1), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_beq",	EBD15BI(30,8,BO32T,CBEQ,0), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_beql",	EBD15BI(30,8,BO32T,CBEQ,1), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_bso",	EBD15BI(30,8,BO32T,CBSO,0), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_bsol",	EBD15BI(30,8,BO32T,CBSO,1), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_bun",	EBD15BI(30,8,BO32T,CBSO,0), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_bunl",	EBD15BI(30,8,BO32T,CBSO,1), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_bns",	EBD15BI(30,8,BO32F,CBSO,0), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_bnsl",	EBD15BI(30,8,BO32F,CBSO,1), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_bnu",	EBD15BI(30,8,BO32F,CBSO,0), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_bnul",	EBD15BI(30,8,BO32F,CBSO,1), EBD15BI_MASK, PPCVLE, PPCNONE, {CRS,B15}},
+{"e_bc",	BD15(30,8,0),	BD15_MASK,	PPCVLE,	PPCNONE,	{BO32, BI32, B15}},
+{"e_bcl",	BD15(30,8,1),	BD15_MASK,	PPCVLE,	PPCNONE,	{BO32, BI32, B15}},
+
+{"e_bf",	EBD15(30,8,BO32F,0), EBD15_MASK, PPCVLE, PPCNONE,	{BI32,B15}},
+{"e_bfl",	EBD15(30,8,BO32F,1), EBD15_MASK, PPCVLE, PPCNONE,	{BI32,B15}},
+{"e_bt",	EBD15(30,8,BO32T,0), EBD15_MASK, PPCVLE, PPCNONE,	{BI32,B15}},
+{"e_btl",	EBD15(30,8,BO32T,1), EBD15_MASK, PPCVLE, PPCNONE,	{BI32,B15}},
+ 
+{"e_cmph",	X(31,14),	X_MASK,		PPCVLE,	PPCNONE,	{CRD, RA, RB}},
+{"e_cmphl",	X(31,46),	X_MASK,		PPCVLE,	PPCNONE,	{CRD, RA, RB}},
+{"e_crandc",	XL(31,129),	XL_MASK,	PPCVLE,	PPCNONE,	{BT, BA, BB}},
+{"e_crnand",	XL(31,225),	XL_MASK,	PPCVLE,	PPCNONE,	{BT, BA, BB}},
+{"e_crnot",	XL(31,33),	XL_MASK,	PPCVLE,	PPCNONE,	{BT, BA, BBA}},
+{"e_crnor",	XL(31,33),	XL_MASK,	PPCVLE,	PPCNONE,	{BT, BA, BB}},
+{"e_crclr",	XL(31,193),	XL_MASK,	PPCVLE,	PPCNONE,	{BT, BAT, BBA}},
+{"e_crxor",	XL(31,193),	XL_MASK,	PPCVLE,	PPCNONE,	{BT, BA, BB}},
+{"e_mcrf",	XL(31,16),	XL_MASK,	PPCVLE,	PPCNONE,	{CRD, CR}},
+{"e_slwi",	EX(31,112),	EX_MASK,	PPCVLE,	PPCNONE,	{RA, RS, SH}},
+{"e_slwi.",	EX(31,113),	EX_MASK,	PPCVLE,	PPCNONE,	{RA, RS, SH}},
+ 
+{"e_crand",	XL(31,257),	XL_MASK,	PPCVLE,	PPCNONE,	{BT, BA, BB}},
+ 
+{"e_rlw",	EX(31,560),	EX_MASK,	PPCVLE,	PPCNONE,	{RA, RS, RB}},
+{"e_rlw.",	EX(31,561),	EX_MASK,	PPCVLE,	PPCNONE,	{RA, RS, RB}},
+ 
+{"e_crset",	XL(31,289),	XL_MASK,	PPCVLE,	PPCNONE,	{BT, BAT, BBA}},
+{"e_creqv",	XL(31,289),	XL_MASK,	PPCVLE,	PPCNONE,	{BT, BA, BB}},
+ 
+{"e_rlwi",	EX(31,624),	EX_MASK,	PPCVLE,	PPCNONE,	{RA, RS, SH}},
+{"e_rlwi.",	EX(31,625),	EX_MASK,	PPCVLE,	PPCNONE,	{RA, RS, SH}},
+ 
+{"e_crorc",	XL(31,417),	XL_MASK,	PPCVLE,	PPCNONE,	{BT, BA, BB}},
+
+{"e_crmove",	XL(31,449),	XL_MASK,	PPCVLE,	PPCNONE,	{BT, BA, BBA}},
+{"e_cror",	XL(31,449),	XL_MASK,	PPCVLE,	PPCNONE,	{BT, BA, BB}},
+
+{"mtmas1",	XSPR(31,467,625), XSPR_MASK,	PPCVLE,	PPCNONE,	{RS}},
+
+{"e_srwi",	EX(31,1136),	EX_MASK,	PPCVLE,	PPCNONE,	{RA, RS, SH}},
+{"e_srwi.",	EX(31,1137),	EX_MASK,	PPCVLE,	PPCNONE,	{RA, RS, SH}},
+ 
+{"se_lbz",	SD4(8),		SD4_MASK,	PPCVLE,	PPCNONE,	{RZ, SE_SD, RX}},
+ 
+{"se_stb",	SD4(9),		SD4_MASK,	PPCVLE,	PPCNONE,	{RZ, SE_SD, RX}},
+ 
+{"se_lhz",	SD4(10),	SD4_MASK,	PPCVLE,	PPCNONE,	{RZ, SE_SDH, RX}},
+ 
+{"se_sth",	SD4(11),	SD4_MASK,	PPCVLE,	PPCNONE,	{RZ, SE_SDH, RX}},
+ 
+{"se_lwz",	SD4(12),	SD4_MASK,	PPCVLE,	PPCNONE,	{RZ, SE_SDW, RX}},
+ 
+{"se_stw",	SD4(13),	SD4_MASK,	PPCVLE,	PPCNONE,	{RZ, SE_SDW, RX}},
+ 
+{"se_bge",	EBD8IO(28,0,0),	EBD8IO3_MASK,	PPCVLE,	PPCNONE,	{B8}},
+{"se_bnl",	EBD8IO(28,0,0),	EBD8IO3_MASK,	PPCVLE,	PPCNONE,	{B8}},
+{"se_ble",	EBD8IO(28,0,1),	EBD8IO3_MASK,	PPCVLE,	PPCNONE,	{B8}},
+{"se_bng",	EBD8IO(28,0,1),	EBD8IO3_MASK,	PPCVLE,	PPCNONE,	{B8}},
+{"se_bne",	EBD8IO(28,0,2),	EBD8IO3_MASK,	PPCVLE,	PPCNONE,	{B8}},
+{"se_bns",	EBD8IO(28,0,3),	EBD8IO3_MASK,	PPCVLE,	PPCNONE,	{B8}},
+{"se_bnu",	EBD8IO(28,0,3),	EBD8IO3_MASK,	PPCVLE,	PPCNONE,	{B8}},
+{"se_bf",	EBD8IO(28,0,0),	EBD8IO2_MASK,	PPCVLE,	PPCNONE,	{BI16, B8}},
+{"se_blt",	EBD8IO(28,1,0),	EBD8IO3_MASK,	PPCVLE,	PPCNONE,	{B8}},
+{"se_bgt",	EBD8IO(28,1,1),	EBD8IO3_MASK,	PPCVLE,	PPCNONE,	{B8}},
+{"se_beq",	EBD8IO(28,1,2),	EBD8IO3_MASK,	PPCVLE,	PPCNONE,	{B8}},
+{"se_bso",	EBD8IO(28,1,3),	EBD8IO3_MASK,	PPCVLE,	PPCNONE,	{B8}},
+{"se_bun",	EBD8IO(28,1,3),	EBD8IO3_MASK,	PPCVLE,	PPCNONE,	{B8}},
+{"se_bt",	EBD8IO(28,1,0),	EBD8IO2_MASK,	PPCVLE,	PPCNONE,	{BI16, B8}},
+{"se_bc",	BD8IO(28),	BD8IO_MASK,	PPCVLE,	PPCNONE,	{BO16, BI16, B8}},
+{"se_b",	BD8(58,0,0),	BD8_MASK,	PPCVLE,	PPCNONE,	{B8}},
+{"se_bl",	BD8(58,0,1),	BD8_MASK,	PPCVLE,	PPCNONE,	{B8}},
+};
+
+const int vle_num_opcodes =
+  sizeof (vle_opcodes) / sizeof (vle_opcodes[0]);
+

 /* The macro table.  This is only used by the assembler.  */
 
 /* The expressions of the form (-x ! 31) & (x | 31) have the value 0
@@ -5491,6 +6450,18 @@ const struct powerpc_macro powerpc_macros[] = {
 {"clrrwi.",  3,	PPCCOM,	"rlwinm. %0,%1,0,0,31-(%2)"},
 {"clrlslwi", 4,	PPCCOM,	"rlwinm %0,%1,%3,(%2)-(%3),31-(%3)"},
 {"clrlslwi.",4, PPCCOM,	"rlwinm. %0,%1,%3,(%2)-(%3),31-(%3)"},
+
+{"e_extlwi", 4,	PPCVLE, "e_rlwinm %0,%1,%3,0,(%2)-1"},
+{"e_extrwi", 4,	PPCVLE, "e_rlwinm %0,%1,((%2)+(%3))&((%2)+(%3)<>32),32-(%2),31"},
+{"e_inslwi", 4,	PPCVLE, "e_rlwimi %0,%1,(-(%3)!31)&((%3)|31),%3,(%2)+(%3)-1"},
+{"e_insrwi", 4,	PPCVLE, "e_rlwimi %0,%1,32-((%2)+(%3)),%3,(%2)+(%3)-1"},
+{"e_rotlwi", 3,	PPCVLE, "e_rlwinm %0,%1,%2,0,31"},
+{"e_rotrwi", 3,	PPCVLE, "e_rlwinm %0,%1,(-(%2)!31)&((%2)|31),0,31"},
+{"e_slwi",   3,	PPCVLE, "e_rlwinm %0,%1,%2,0,31-(%2)"},
+{"e_srwi",   3,	PPCVLE, "e_rlwinm %0,%1,(-(%2)!31)&((%2)|31),%2,31"},
+{"e_clrlwi", 3,	PPCVLE, "e_rlwinm %0,%1,0,%2,31"},
+{"e_clrrwi", 3,	PPCVLE, "e_rlwinm %0,%1,0,0,31-(%2)"},
+{"e_clrlslwi",4, PPCVLE, "e_rlwinm %0,%1,%3,(%2)-(%3),31-(%3)"},
 };
 
 const int powerpc_num_macros =
diff --git a/opcodes/rl78-decode.c b/opcodes/rl78-decode.c
index d6e2339..7fb2519 100644
--- a/opcodes/rl78-decode.c
+++ b/opcodes/rl78-decode.c
@@ -1,10 +1,9 @@
 #line 1 "rl78-decode.opc"
 /* -*- c -*- */
+#include "sysdep.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-
-#include "config.h"
 #include "ansidecl.h"
 #include "opcode/rl78.h"
 
@@ -263,7 +262,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("xch	a, x");
-#line 1205 "rl78-decode.opc"
+#line 1210 "rl78-decode.opc"
           ID(xch); DR(A); SR(X);
         
         /*----------------------------------------------------------------------*/
@@ -586,7 +585,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("subw	%0, #%1");
-#line 1169 "rl78-decode.opc"
+#line 1174 "rl78-decode.opc"
           ID(sub); W(); DR(SP); SC(IMMU(1)); Fzac;
         
         /*----------------------------------------------------------------------*/
@@ -599,7 +598,7 @@ rl78_decode_opcode (unsigned long pc AU,
     case 0x27:
         {
           /** 0010 0rw1			subw	%0, %1				*/
-#line 1163 "rl78-decode.opc"
+#line 1168 "rl78-decode.opc"
           int rw AU = (op[0] >> 1) & 0x03;
           if (trace)
             {
@@ -609,7 +608,7 @@ rl78_decode_opcode (unsigned long pc AU,
               printf ("  rw = 0x%x\n", rw);
             }
           SYNTAX("subw	%0, %1");
-#line 1163 "rl78-decode.opc"
+#line 1168 "rl78-decode.opc"
           ID(sub); W(); DR(AX); SRW(rw); Fzac;
         
         }
@@ -624,7 +623,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("subw	%0, %e1%!1");
-#line 1154 "rl78-decode.opc"
+#line 1159 "rl78-decode.opc"
           ID(sub); W(); DR(AX); SM(None, IMMU(2)); Fzac;
         
         }
@@ -639,7 +638,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("subw	%0, #%1");
-#line 1160 "rl78-decode.opc"
+#line 1165 "rl78-decode.opc"
           ID(sub); W(); DR(AX); SC(IMMU(2)); Fzac;
         
         }
@@ -654,7 +653,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("subw	%0, %1");
-#line 1166 "rl78-decode.opc"
+#line 1171 "rl78-decode.opc"
           ID(sub); W(); DR(AX); SM(None, SADDR); Fzac;
         
         }
@@ -699,7 +698,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("sub	%0, #%1");
-#line 1117 "rl78-decode.opc"
+#line 1122 "rl78-decode.opc"
           ID(sub); DM(None, SADDR); SC(IMMU(1)); Fzac;
         
         /*----------------------------------------------------------------------*/
@@ -716,7 +715,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("sub	%0, %1");
-#line 1111 "rl78-decode.opc"
+#line 1116 "rl78-decode.opc"
           ID(sub); DR(A); SM(None, SADDR); Fzac;
         
         }
@@ -731,7 +730,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("sub	%0, #%1");
-#line 1105 "rl78-decode.opc"
+#line 1110 "rl78-decode.opc"
           ID(sub); DR(A); SC(IMMU(1)); Fzac;
         
         }
@@ -746,7 +745,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("sub	%0, %e1%1");
-#line 1093 "rl78-decode.opc"
+#line 1098 "rl78-decode.opc"
           ID(sub); DR(A); SM(HL, 0); Fzac;
         
         }
@@ -761,7 +760,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("sub	%0, %e1%1");
-#line 1099 "rl78-decode.opc"
+#line 1104 "rl78-decode.opc"
           ID(sub); DR(A); SM(HL, IMMU(1)); Fzac;
         
         }
@@ -776,7 +775,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("sub	%0, %e1%!1");
-#line 1090 "rl78-decode.opc"
+#line 1095 "rl78-decode.opc"
           ID(sub); DR(A); SM(None, IMMU(2)); Fzac;
         
         }
@@ -923,7 +922,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x07:
               {
                 /** 0011 0001 0cnt 0111		shl	%0, %1				*/
-#line 1046 "rl78-decode.opc"
+#line 1051 "rl78-decode.opc"
                 int cnt AU = (op[1] >> 4) & 0x07;
                 if (trace)
                   {
@@ -933,7 +932,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  cnt = 0x%x\n", cnt);
                   }
                 SYNTAX("shl	%0, %1");
-#line 1046 "rl78-decode.opc"
+#line 1051 "rl78-decode.opc"
                 ID(shl); DR(C); SC(cnt);
               
               }
@@ -941,7 +940,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x08:
               {
                 /** 0011 0001 0cnt 1000		shl	%0, %1				*/
-#line 1043 "rl78-decode.opc"
+#line 1048 "rl78-decode.opc"
                 int cnt AU = (op[1] >> 4) & 0x07;
                 if (trace)
                   {
@@ -951,7 +950,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  cnt = 0x%x\n", cnt);
                   }
                 SYNTAX("shl	%0, %1");
-#line 1043 "rl78-decode.opc"
+#line 1048 "rl78-decode.opc"
                 ID(shl); DR(B); SC(cnt);
               
               }
@@ -959,7 +958,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x09:
               {
                 /** 0011 0001 0cnt 1001		shl	%0, %1				*/
-#line 1040 "rl78-decode.opc"
+#line 1045 "rl78-decode.opc"
                 int cnt AU = (op[1] >> 4) & 0x07;
                 if (trace)
                   {
@@ -969,7 +968,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  cnt = 0x%x\n", cnt);
                   }
                 SYNTAX("shl	%0, %1");
-#line 1040 "rl78-decode.opc"
+#line 1045 "rl78-decode.opc"
                 ID(shl); DR(A); SC(cnt);
               
               }
@@ -977,7 +976,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x0a:
               {
                 /** 0011 0001 0cnt 1010		shr	%0, %1				*/
-#line 1057 "rl78-decode.opc"
+#line 1062 "rl78-decode.opc"
                 int cnt AU = (op[1] >> 4) & 0x07;
                 if (trace)
                   {
@@ -987,7 +986,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  cnt = 0x%x\n", cnt);
                   }
                 SYNTAX("shr	%0, %1");
-#line 1057 "rl78-decode.opc"
+#line 1062 "rl78-decode.opc"
                 ID(shr); DR(A); SC(cnt);
               
               }
@@ -995,7 +994,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x0b:
               {
                 /** 0011 0001 0cnt 1011		sar	%0, %1				*/
-#line 1004 "rl78-decode.opc"
+#line 1009 "rl78-decode.opc"
                 int cnt AU = (op[1] >> 4) & 0x07;
                 if (trace)
                   {
@@ -1005,7 +1004,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  cnt = 0x%x\n", cnt);
                   }
                 SYNTAX("sar	%0, %1");
-#line 1004 "rl78-decode.opc"
+#line 1009 "rl78-decode.opc"
                 ID(sar); DR(A); SC(cnt);
               
               }
@@ -1014,7 +1013,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x8c:
               {
                 /** 0011 0001 wcnt 1100		shlw	%0, %1				*/
-#line 1052 "rl78-decode.opc"
+#line 1057 "rl78-decode.opc"
                 int wcnt AU = (op[1] >> 4) & 0x0f;
                 if (trace)
                   {
@@ -1024,7 +1023,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  wcnt = 0x%x\n", wcnt);
                   }
                 SYNTAX("shlw	%0, %1");
-#line 1052 "rl78-decode.opc"
+#line 1057 "rl78-decode.opc"
                 ID(shl); W(); DR(BC); SC(wcnt);
               
               /*----------------------------------------------------------------------*/
@@ -1035,7 +1034,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x8d:
               {
                 /** 0011 0001 wcnt 1101		shlw	%0, %1				*/
-#line 1049 "rl78-decode.opc"
+#line 1054 "rl78-decode.opc"
                 int wcnt AU = (op[1] >> 4) & 0x0f;
                 if (trace)
                   {
@@ -1045,7 +1044,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  wcnt = 0x%x\n", wcnt);
                   }
                 SYNTAX("shlw	%0, %1");
-#line 1049 "rl78-decode.opc"
+#line 1054 "rl78-decode.opc"
                 ID(shl); W(); DR(AX); SC(wcnt);
               
               }
@@ -1054,7 +1053,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x8e:
               {
                 /** 0011 0001 wcnt 1110		shrw	%0, %1				*/
-#line 1060 "rl78-decode.opc"
+#line 1065 "rl78-decode.opc"
                 int wcnt AU = (op[1] >> 4) & 0x0f;
                 if (trace)
                   {
@@ -1064,7 +1063,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  wcnt = 0x%x\n", wcnt);
                   }
                 SYNTAX("shrw	%0, %1");
-#line 1060 "rl78-decode.opc"
+#line 1065 "rl78-decode.opc"
                 ID(shr); W(); DR(AX); SC(wcnt);
               
               /*----------------------------------------------------------------------*/
@@ -1075,7 +1074,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x8f:
               {
                 /** 0011 0001 wcnt 1111		sarw	%0, %1				*/
-#line 1007 "rl78-decode.opc"
+#line 1012 "rl78-decode.opc"
                 int wcnt AU = (op[1] >> 4) & 0x0f;
                 if (trace)
                   {
@@ -1085,7 +1084,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  wcnt = 0x%x\n", wcnt);
                   }
                 SYNTAX("sarw	%0, %1");
-#line 1007 "rl78-decode.opc"
+#line 1012 "rl78-decode.opc"
                 ID(sar); W(); DR(AX); SC(wcnt);
               
               /*----------------------------------------------------------------------*/
@@ -1208,7 +1207,7 @@ rl78_decode_opcode (unsigned long pc AU,
     case 0x37:
         {
           /** 0011 0ra1			xchw	%0, %1				*/
-#line 1210 "rl78-decode.opc"
+#line 1215 "rl78-decode.opc"
           int ra AU = (op[0] >> 1) & 0x03;
           if (trace)
             {
@@ -1218,7 +1217,7 @@ rl78_decode_opcode (unsigned long pc AU,
               printf ("  ra = 0x%x\n", ra);
             }
           SYNTAX("xchw	%0, %1");
-#line 1210 "rl78-decode.opc"
+#line 1215 "rl78-decode.opc"
           ID(xch); W(); DR(AX); SRW(ra);
         
         /*----------------------------------------------------------------------*/
@@ -1265,7 +1264,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("subc	%0, #%1");
-#line 1149 "rl78-decode.opc"
+#line 1154 "rl78-decode.opc"
           ID(subc); DM(None, SADDR); SC(IMMU(1)); Fzac;
         
         /*----------------------------------------------------------------------*/
@@ -1282,7 +1281,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("subc	%0, %1");
-#line 1146 "rl78-decode.opc"
+#line 1151 "rl78-decode.opc"
           ID(subc); DR(A); SM(None, SADDR); Fzac;
         
         }
@@ -1297,7 +1296,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("subc	%0, #%1");
-#line 1137 "rl78-decode.opc"
+#line 1142 "rl78-decode.opc"
           ID(subc); DR(A); SC(IMMU(1)); Fzac;
         
         }
@@ -1312,7 +1311,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("subc	%0, %e1%1");
-#line 1125 "rl78-decode.opc"
+#line 1130 "rl78-decode.opc"
           ID(subc); DR(A); SM(HL, 0); Fzac;
         
         }
@@ -1327,7 +1326,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("subc	%0, %e1%1");
-#line 1134 "rl78-decode.opc"
+#line 1139 "rl78-decode.opc"
           ID(subc); DR(A); SM(HL, IMMU(1)); Fzac;
         
         }
@@ -1342,7 +1341,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("subc	%0, %e1%!1");
-#line 1122 "rl78-decode.opc"
+#line 1127 "rl78-decode.opc"
           ID(subc); DR(A); SM(None, IMMU(2)); Fzac;
         
         }
@@ -1864,7 +1863,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x27:
               {
                 /** 0110 0001 0010 0reg		sub	%0, %1				*/
-#line 1114 "rl78-decode.opc"
+#line 1119 "rl78-decode.opc"
                 int reg AU = op[1] & 0x07;
                 if (trace)
                   {
@@ -1874,7 +1873,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  reg = 0x%x\n", reg);
                   }
                 SYNTAX("sub	%0, %1");
-#line 1114 "rl78-decode.opc"
+#line 1119 "rl78-decode.opc"
                 ID(sub); DRB(reg); SR(A); Fzac;
               
               }
@@ -1888,7 +1887,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x2f:
               {
                 /** 0110 0001 0010 1rba		sub	%0, %1				*/
-#line 1108 "rl78-decode.opc"
+#line 1113 "rl78-decode.opc"
                 int rba AU = op[1] & 0x07;
                 if (trace)
                   {
@@ -1898,7 +1897,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  rba = 0x%x\n", rba);
                   }
                 SYNTAX("sub	%0, %1");
-#line 1108 "rl78-decode.opc"
+#line 1113 "rl78-decode.opc"
                 ID(sub); DR(A); SRB(rba); Fzac;
               
               }
@@ -1913,7 +1912,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("subw	%0, %e1%1");
-#line 1157 "rl78-decode.opc"
+#line 1162 "rl78-decode.opc"
                 ID(sub); W(); DR(AX); SM(HL, IMMU(1)); Fzac;
               
               }
@@ -1928,7 +1927,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x37:
               {
                 /** 0110 0001 0011 0reg		subc	%0, %1				*/
-#line 1143 "rl78-decode.opc"
+#line 1148 "rl78-decode.opc"
                 int reg AU = op[1] & 0x07;
                 if (trace)
                   {
@@ -1938,7 +1937,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  reg = 0x%x\n", reg);
                   }
                 SYNTAX("subc	%0, %1");
-#line 1143 "rl78-decode.opc"
+#line 1148 "rl78-decode.opc"
                 ID(subc); DRB(reg); SR(A); Fzac;
               
               }
@@ -1952,7 +1951,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x3f:
               {
                 /** 0110 0001 0011 1rba		subc	%0, %1				*/
-#line 1140 "rl78-decode.opc"
+#line 1145 "rl78-decode.opc"
                 int rba AU = op[1] & 0x07;
                 if (trace)
                   {
@@ -1962,7 +1961,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  rba = 0x%x\n", rba);
                   }
                 SYNTAX("subc	%0, %1");
-#line 1140 "rl78-decode.opc"
+#line 1145 "rl78-decode.opc"
                 ID(subc); DR(A); SRB(rba); Fzac;
               
               }
@@ -2105,7 +2104,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x67:
               {
                 /** 0110 0001 0110 0reg		or	%0, %1				*/
-#line 932 "rl78-decode.opc"
+#line 937 "rl78-decode.opc"
                 int reg AU = op[1] & 0x07;
                 if (trace)
                   {
@@ -2115,7 +2114,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  reg = 0x%x\n", reg);
                   }
                 SYNTAX("or	%0, %1");
-#line 932 "rl78-decode.opc"
+#line 937 "rl78-decode.opc"
                 ID(or); DRB(reg); SR(A); Fz;
               
               }
@@ -2129,7 +2128,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x6f:
               {
                 /** 0110 0001 0110 1rba		or	%0, %1				*/
-#line 929 "rl78-decode.opc"
+#line 934 "rl78-decode.opc"
                 int rba AU = op[1] & 0x07;
                 if (trace)
                   {
@@ -2139,7 +2138,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  rba = 0x%x\n", rba);
                   }
                 SYNTAX("or	%0, %1");
-#line 929 "rl78-decode.opc"
+#line 934 "rl78-decode.opc"
                 ID(or); DR(A); SRB(rba); Fz;
               
               }
@@ -2169,7 +2168,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x77:
               {
                 /** 0110 0001 0111 0reg		xor	%0, %1				*/
-#line 1236 "rl78-decode.opc"
+#line 1241 "rl78-decode.opc"
                 int reg AU = op[1] & 0x07;
                 if (trace)
                   {
@@ -2179,7 +2178,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  reg = 0x%x\n", reg);
                   }
                 SYNTAX("xor	%0, %1");
-#line 1236 "rl78-decode.opc"
+#line 1241 "rl78-decode.opc"
                 ID(xor); DRB(reg); SR(A); Fz;
               
               }
@@ -2193,7 +2192,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x7f:
               {
                 /** 0110 0001 0111 1rba		xor	%0, %1				*/
-#line 1233 "rl78-decode.opc"
+#line 1238 "rl78-decode.opc"
                 int rba AU = op[1] & 0x07;
                 if (trace)
                   {
@@ -2203,7 +2202,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  rba = 0x%x\n", rba);
                   }
                 SYNTAX("xor	%0, %1");
-#line 1233 "rl78-decode.opc"
+#line 1238 "rl78-decode.opc"
                 ID(xor); DR(A); SRB(rba); Fz;
               
               }
@@ -2317,7 +2316,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x8f:
               {
                 /** 0110 0001 1000 1reg		xch	%0, %1				*/
-#line 1195 "rl78-decode.opc"
+#line 1200 "rl78-decode.opc"
                 int reg AU = op[1] & 0x07;
                 if (trace)
                   {
@@ -2327,7 +2326,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  reg = 0x%x\n", reg);
                   }
                 SYNTAX("xch	%0, %1");
-#line 1195 "rl78-decode.opc"
+#line 1200 "rl78-decode.opc"
                 /* Note: DECW uses reg == X, so this must follow DECW */
                 ID(xch); DR(A); SRB(reg);
               
@@ -2389,7 +2388,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("sub	%0, %e1%1");
-#line 1096 "rl78-decode.opc"
+#line 1101 "rl78-decode.opc"
                 ID(sub); DR(A); SM2(HL, B, 0); Fzac;
               
               }
@@ -2404,7 +2403,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("sub	%0, %e1%1");
-#line 1102 "rl78-decode.opc"
+#line 1107 "rl78-decode.opc"
                 ID(sub); DR(A); SM2(HL, C, 0); Fzac;
               
               }
@@ -2419,7 +2418,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("xch	%0, %1");
-#line 1199 "rl78-decode.opc"
+#line 1204 "rl78-decode.opc"
                 ID(xch); DR(A); SM(None, SADDR);
               
               }
@@ -2434,7 +2433,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("xch	%0, %e1%1");
-#line 1192 "rl78-decode.opc"
+#line 1197 "rl78-decode.opc"
                 ID(xch); DR(A); SM2(HL, C, 0);
               
               }
@@ -2449,7 +2448,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("xch	%0, %e1%!1");
-#line 1174 "rl78-decode.opc"
+#line 1179 "rl78-decode.opc"
                 ID(xch); DR(A); SM(None, IMMU(2));
               
               }
@@ -2464,7 +2463,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("xch	%0, %1");
-#line 1202 "rl78-decode.opc"
+#line 1207 "rl78-decode.opc"
                 ID(xch); DR(A); SM(None, SFR);
               
               }
@@ -2479,7 +2478,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("xch	%0, %e1%1");
-#line 1183 "rl78-decode.opc"
+#line 1188 "rl78-decode.opc"
                 ID(xch); DR(A); SM(HL, 0);
               
               }
@@ -2494,7 +2493,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("xch	%0, %e1%1");
-#line 1189 "rl78-decode.opc"
+#line 1194 "rl78-decode.opc"
                 ID(xch); DR(A); SM(HL, IMMU(1));
               
               }
@@ -2509,7 +2508,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("xch	%0, %e1%1");
-#line 1177 "rl78-decode.opc"
+#line 1182 "rl78-decode.opc"
                 ID(xch); DR(A); SM(DE, 0);
               
               }
@@ -2524,7 +2523,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("xch	%0, %e1%1");
-#line 1180 "rl78-decode.opc"
+#line 1185 "rl78-decode.opc"
                 ID(xch); DR(A); SM(DE, IMMU(1));
               
               }
@@ -2539,7 +2538,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("subc	%0, %e1%1");
-#line 1128 "rl78-decode.opc"
+#line 1133 "rl78-decode.opc"
                 ID(subc); DR(A); SM2(HL, B, 0); Fzac;
               
               }
@@ -2554,7 +2553,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("subc	%0, %e1%1");
-#line 1131 "rl78-decode.opc"
+#line 1136 "rl78-decode.opc"
                 ID(subc); DR(A); SM2(HL, C, 0); Fzac;
               
               }
@@ -2584,7 +2583,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("xch	%0, %e1%1");
-#line 1186 "rl78-decode.opc"
+#line 1191 "rl78-decode.opc"
                 ID(xch); DR(A); SM2(HL, B, 0);
               
               }
@@ -2644,7 +2643,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("sk%c1");
-#line 1065 "rl78-decode.opc"
+#line 1070 "rl78-decode.opc"
                 ID(skip); COND(C);
               
               }
@@ -2729,7 +2728,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("pop	%s0");
-#line 960 "rl78-decode.opc"
+#line 965 "rl78-decode.opc"
                 ID(mov); W(); DR(PSW); SPOP();
               
               /*----------------------------------------------------------------------*/
@@ -2759,7 +2758,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0xff:
               {
                 /** 0110 0001 11rb 1111		sel	rb%1				*/
-#line 1012 "rl78-decode.opc"
+#line 1017 "rl78-decode.opc"
                 int rb AU = (op[1] >> 4) & 0x03;
                 if (trace)
                   {
@@ -2769,7 +2768,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  rb = 0x%x\n", rb);
                   }
                 SYNTAX("sel	rb%1");
-#line 1012 "rl78-decode.opc"
+#line 1017 "rl78-decode.opc"
                 ID(sel); SC(rb);
               
               /*----------------------------------------------------------------------*/
@@ -2831,7 +2830,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("sk%c1");
-#line 1071 "rl78-decode.opc"
+#line 1076 "rl78-decode.opc"
                 ID(skip); COND(NC);
               
               }
@@ -2861,7 +2860,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("ror	%0, %1");
-#line 993 "rl78-decode.opc"
+#line 998 "rl78-decode.opc"
                 ID(ror); DR(A); SC(1);
               
               }
@@ -2876,7 +2875,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("rolc	%0, %1");
-#line 987 "rl78-decode.opc"
+#line 992 "rl78-decode.opc"
                 ID(rolc); DR(A); SC(1);
               
               }
@@ -2891,7 +2890,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("push	%s1");
-#line 968 "rl78-decode.opc"
+#line 973 "rl78-decode.opc"
                 ID(mov); W(); DPUSH(); SR(PSW);
               
               /*----------------------------------------------------------------------*/
@@ -2925,7 +2924,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("or	%0, %e1%1");
-#line 917 "rl78-decode.opc"
+#line 922 "rl78-decode.opc"
                 ID(or); DR(A); SM2(HL, B, 0); Fz;
               
               }
@@ -2940,7 +2939,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("or	%0, %e1%1");
-#line 923 "rl78-decode.opc"
+#line 928 "rl78-decode.opc"
                 ID(or); DR(A); SM2(HL, C, 0); Fz;
               
               }
@@ -2955,7 +2954,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("sk%c1");
-#line 1068 "rl78-decode.opc"
+#line 1073 "rl78-decode.opc"
                 ID(skip); COND(H);
               
               }
@@ -2970,7 +2969,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("sk%c1");
-#line 1080 "rl78-decode.opc"
+#line 1085 "rl78-decode.opc"
                 ID(skip); COND(Z);
               
               /*----------------------------------------------------------------------*/
@@ -3002,7 +3001,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("rol	%0, %1");
-#line 984 "rl78-decode.opc"
+#line 989 "rl78-decode.opc"
                 ID(rol); DR(A); SC(1);
               
               }
@@ -3017,7 +3016,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("retb");
-#line 979 "rl78-decode.opc"
+#line 984 "rl78-decode.opc"
                 ID(reti);
               
               /*----------------------------------------------------------------------*/
@@ -3045,7 +3044,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0xfe:
               {
                 /** 0110 0001 111r 1110		rolwc	%0, %1				*/
-#line 990 "rl78-decode.opc"
+#line 995 "rl78-decode.opc"
                 int r AU = (op[1] >> 4) & 0x01;
                 if (trace)
                   {
@@ -3055,7 +3054,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  r = 0x%x\n", r);
                   }
                 SYNTAX("rolwc	%0, %1");
-#line 990 "rl78-decode.opc"
+#line 995 "rl78-decode.opc"
                 ID(rolc); W(); DRW(r); SC(1);
               
               }
@@ -3070,7 +3069,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("xor	%0, %e1%1");
-#line 1221 "rl78-decode.opc"
+#line 1226 "rl78-decode.opc"
                 ID(xor); DR(A); SM2(HL, B, 0); Fz;
               
               }
@@ -3085,7 +3084,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("xor	%0, %e1%1");
-#line 1227 "rl78-decode.opc"
+#line 1232 "rl78-decode.opc"
                 ID(xor); DR(A); SM2(HL, C, 0); Fz;
               
               }
@@ -3100,7 +3099,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("sk%c1");
-#line 1074 "rl78-decode.opc"
+#line 1079 "rl78-decode.opc"
                 ID(skip); COND(NH);
               
               }
@@ -3115,7 +3114,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("sk%c1");
-#line 1077 "rl78-decode.opc"
+#line 1082 "rl78-decode.opc"
                 ID(skip); COND(NZ);
               
               }
@@ -3145,7 +3144,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("rorc	%0, %1");
-#line 996 "rl78-decode.opc"
+#line 1001 "rl78-decode.opc"
                 ID(rorc); DR(A); SC(1);
               
               /*----------------------------------------------------------------------*/
@@ -3165,7 +3164,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("reti");
-#line 976 "rl78-decode.opc"
+#line 981 "rl78-decode.opc"
                 ID(reti);
               
               }
@@ -3180,7 +3179,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("stop");
-#line 1085 "rl78-decode.opc"
+#line 1090 "rl78-decode.opc"
                 ID(stop);
               
               /*----------------------------------------------------------------------*/
@@ -3230,7 +3229,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("or	%0, #%1");
-#line 938 "rl78-decode.opc"
+#line 943 "rl78-decode.opc"
           ID(or); DM(None, SADDR); SC(IMMU(1)); Fz;
         
         /*----------------------------------------------------------------------*/
@@ -3247,7 +3246,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("or	%0, %1");
-#line 935 "rl78-decode.opc"
+#line 940 "rl78-decode.opc"
           ID(or); DR(A); SM(None, SADDR); Fz;
         
         }
@@ -3262,7 +3261,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("or	%0, #%1");
-#line 926 "rl78-decode.opc"
+#line 931 "rl78-decode.opc"
           ID(or); DR(A); SC(IMMU(1)); Fz;
         
         }
@@ -3277,7 +3276,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("or	%0, %e1%1");
-#line 914 "rl78-decode.opc"
+#line 919 "rl78-decode.opc"
           ID(or); DR(A); SM(HL, 0); Fz;
         
         }
@@ -3292,7 +3291,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("or	%0, %e1%1");
-#line 920 "rl78-decode.opc"
+#line 925 "rl78-decode.opc"
           ID(or); DR(A); SM(HL, IMMU(1)); Fz;
         
         }
@@ -3307,7 +3306,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("or	%0, %e1%!1");
-#line 911 "rl78-decode.opc"
+#line 916 "rl78-decode.opc"
           ID(or); DR(A); SM(None, IMMU(2)); Fz;
         
         }
@@ -3350,7 +3349,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x70:
               {
                 /** 0111 0001 0bit 0000		set1	%e0%!0				*/
-#line 1017 "rl78-decode.opc"
+#line 1022 "rl78-decode.opc"
                 int bit AU = (op[1] >> 4) & 0x07;
                 if (trace)
                   {
@@ -3360,7 +3359,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  bit = 0x%x\n", bit);
                   }
                 SYNTAX("set1	%e0%!0");
-#line 1017 "rl78-decode.opc"
+#line 1022 "rl78-decode.opc"
                 ID(mov); DM(None, IMMU(2)); DB(bit); SC(1);
               
               }
@@ -3400,7 +3399,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x72:
               {
                 /** 0111 0001 0bit 0010		set1	%0				*/
-#line 1035 "rl78-decode.opc"
+#line 1040 "rl78-decode.opc"
                 int bit AU = (op[1] >> 4) & 0x07;
                 if (trace)
                   {
@@ -3410,7 +3409,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  bit = 0x%x\n", bit);
                   }
                 SYNTAX("set1	%0");
-#line 1035 "rl78-decode.opc"
+#line 1040 "rl78-decode.opc"
                 ID(mov); DM(None, SADDR); DB(bit); SC(1);
               
               /*----------------------------------------------------------------------*/
@@ -3509,7 +3508,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x76:
               {
                 /** 0111 0001 0bit 0110		or1	cy, %s1				*/
-#line 952 "rl78-decode.opc"
+#line 957 "rl78-decode.opc"
                 int bit AU = (op[1] >> 4) & 0x07;
                 if (trace)
                   {
@@ -3519,7 +3518,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  bit = 0x%x\n", bit);
                   }
                 SYNTAX("or1	cy, %s1");
-#line 952 "rl78-decode.opc"
+#line 957 "rl78-decode.opc"
                 ID(or); DCY(); SM(None, SADDR); SB(bit);
               
               /*----------------------------------------------------------------------*/
@@ -3536,7 +3535,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x77:
               {
                 /** 0111 0001 0bit 0111		xor1	cy, %s1				*/
-#line 1256 "rl78-decode.opc"
+#line 1261 "rl78-decode.opc"
                 int bit AU = (op[1] >> 4) & 0x07;
                 if (trace)
                   {
@@ -3546,7 +3545,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  bit = 0x%x\n", bit);
                   }
                 SYNTAX("xor1	cy, %s1");
-#line 1256 "rl78-decode.opc"
+#line 1261 "rl78-decode.opc"
                 ID(xor); DCY(); SM(None, SADDR); SB(bit);
               
               /*----------------------------------------------------------------------*/
@@ -3615,7 +3614,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x7a:
               {
                 /** 0111 0001 0bit 1010		set1	%s0				*/
-#line 1029 "rl78-decode.opc"
+#line 1034 "rl78-decode.opc"
                 int bit AU = (op[1] >> 4) & 0x07;
                 if (trace)
                   {
@@ -3625,7 +3624,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  bit = 0x%x\n", bit);
                   }
                 SYNTAX("set1	%s0");
-#line 1029 "rl78-decode.opc"
+#line 1034 "rl78-decode.opc"
                 op0 = SFR;
                 ID(mov); DM(None, op0); DB(bit); SC(1);
                 if (op0 == RL78_SFR_PSW && bit == 7)
@@ -3721,7 +3720,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x7e:
               {
                 /** 0111 0001 0bit 1110		or1	cy, %s1				*/
-#line 949 "rl78-decode.opc"
+#line 954 "rl78-decode.opc"
                 int bit AU = (op[1] >> 4) & 0x07;
                 if (trace)
                   {
@@ -3731,7 +3730,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  bit = 0x%x\n", bit);
                   }
                 SYNTAX("or1	cy, %s1");
-#line 949 "rl78-decode.opc"
+#line 954 "rl78-decode.opc"
                 ID(or); DCY(); SM(None, SFR); SB(bit);
               
               }
@@ -3746,7 +3745,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0x7f:
               {
                 /** 0111 0001 0bit 1111		xor1	cy, %s1				*/
-#line 1253 "rl78-decode.opc"
+#line 1258 "rl78-decode.opc"
                 int bit AU = (op[1] >> 4) & 0x07;
                 if (trace)
                   {
@@ -3756,7 +3755,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  bit = 0x%x\n", bit);
                   }
                 SYNTAX("xor1	cy, %s1");
-#line 1253 "rl78-decode.opc"
+#line 1258 "rl78-decode.opc"
                 ID(xor); DCY(); SM(None, SFR); SB(bit);
               
               }
@@ -3771,7 +3770,7 @@ rl78_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("set1	cy");
-#line 1026 "rl78-decode.opc"
+#line 1031 "rl78-decode.opc"
                 ID(mov); DCY(); SC(1);
               
               }
@@ -3811,7 +3810,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0xf2:
               {
                 /** 0111 0001 1bit 0010		set1	%e0%0				*/
-#line 1020 "rl78-decode.opc"
+#line 1025 "rl78-decode.opc"
                 int bit AU = (op[1] >> 4) & 0x07;
                 if (trace)
                   {
@@ -3821,7 +3820,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  bit = 0x%x\n", bit);
                   }
                 SYNTAX("set1	%e0%0");
-#line 1020 "rl78-decode.opc"
+#line 1025 "rl78-decode.opc"
                 ID(mov); DM(HL, 0); DB(bit); SC(1);
               
               }
@@ -3911,7 +3910,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0xf6:
               {
                 /** 0111 0001 1bit 0110		or1	cy, %e1%1			*/
-#line 943 "rl78-decode.opc"
+#line 948 "rl78-decode.opc"
                 int bit AU = (op[1] >> 4) & 0x07;
                 if (trace)
                   {
@@ -3921,7 +3920,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  bit = 0x%x\n", bit);
                   }
                 SYNTAX("or1	cy, %e1%1");
-#line 943 "rl78-decode.opc"
+#line 948 "rl78-decode.opc"
                 ID(or); DCY(); SM(HL, 0); SB(bit);
               
               }
@@ -3936,7 +3935,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0xf7:
               {
                 /** 0111 0001 1bit 0111		xor1	cy, %e1%1			*/
-#line 1247 "rl78-decode.opc"
+#line 1252 "rl78-decode.opc"
                 int bit AU = (op[1] >> 4) & 0x07;
                 if (trace)
                   {
@@ -3946,7 +3945,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  bit = 0x%x\n", bit);
                   }
                 SYNTAX("xor1	cy, %e1%1");
-#line 1247 "rl78-decode.opc"
+#line 1252 "rl78-decode.opc"
                 ID(xor); DCY(); SM(HL, 0); SB(bit);
               
               }
@@ -4001,7 +4000,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0xfa:
               {
                 /** 0111 0001 1bit 1010		set1	%0				*/
-#line 1023 "rl78-decode.opc"
+#line 1028 "rl78-decode.opc"
                 int bit AU = (op[1] >> 4) & 0x07;
                 if (trace)
                   {
@@ -4011,7 +4010,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  bit = 0x%x\n", bit);
                   }
                 SYNTAX("set1	%0");
-#line 1023 "rl78-decode.opc"
+#line 1028 "rl78-decode.opc"
                 ID(mov); DR(A); DB(bit); SC(1);
               
               }
@@ -4101,7 +4100,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0xfe:
               {
                 /** 0111 0001 1bit 1110		or1	cy, %1				*/
-#line 946 "rl78-decode.opc"
+#line 951 "rl78-decode.opc"
                 int bit AU = (op[1] >> 4) & 0x07;
                 if (trace)
                   {
@@ -4111,7 +4110,7 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  bit = 0x%x\n", bit);
                   }
                 SYNTAX("or1	cy, %1");
-#line 946 "rl78-decode.opc"
+#line 951 "rl78-decode.opc"
                 ID(or); DCY(); SR(A); SB(bit);
               
               }
@@ -4126,7 +4125,7 @@ rl78_decode_opcode (unsigned long pc AU,
           case 0xff:
               {
                 /** 0111 0001 1bit 1111		xor1	cy, %1				*/
-#line 1250 "rl78-decode.opc"
+#line 1255 "rl78-decode.opc"
                 int bit AU = (op[1] >> 4) & 0x07;
                 if (trace)
                   {
@@ -4136,11 +4135,28 @@ rl78_decode_opcode (unsigned long pc AU,
                     printf ("  bit = 0x%x\n", bit);
                   }
                 SYNTAX("xor1	cy, %1");
-#line 1250 "rl78-decode.opc"
+#line 1255 "rl78-decode.opc"
                 ID(xor); DCY(); SR(A); SB(bit);
               
               }
             break;
+          case 0xc0:
+              {
+                /** 0111 0001 1100 0000		not1	cy				*/
+                if (trace)
+                  {
+                    printf ("\033[33m%s\033[0m  %02x %02x\n",
+                           "/** 0111 0001 1100 0000		not1	cy				*/",
+                           op[0], op[1]);
+                  }
+                SYNTAX("not1	cy");
+#line 892 "rl78-decode.opc"
+                ID(xor); DCY(); SC(1);
+              
+              /*----------------------------------------------------------------------*/
+              
+              }
+            break;
           default: UNSUPPORTED(); break;
         }
       break;
@@ -4184,7 +4200,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("xor	%0, #%1");
-#line 1242 "rl78-decode.opc"
+#line 1247 "rl78-decode.opc"
           ID(xor); DM(None, SADDR); SC(IMMU(1)); Fz;
         
         /*----------------------------------------------------------------------*/
@@ -4201,7 +4217,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("xor	%0, %1");
-#line 1239 "rl78-decode.opc"
+#line 1244 "rl78-decode.opc"
           ID(xor); DR(A); SM(None, SADDR); Fz;
         
         }
@@ -4216,7 +4232,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("xor	%0, #%1");
-#line 1230 "rl78-decode.opc"
+#line 1235 "rl78-decode.opc"
           ID(xor); DR(A); SC(IMMU(1)); Fz;
         
         }
@@ -4231,7 +4247,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("xor	%0, %e1%1");
-#line 1218 "rl78-decode.opc"
+#line 1223 "rl78-decode.opc"
           ID(xor); DR(A); SM(HL, 0); Fz;
         
         }
@@ -4246,7 +4262,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("xor	%0, %e1%1");
-#line 1224 "rl78-decode.opc"
+#line 1229 "rl78-decode.opc"
           ID(xor); DR(A); SM(HL, IMMU(1)); Fz;
         
         }
@@ -4261,7 +4277,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("xor	%0, %e1%!1");
-#line 1215 "rl78-decode.opc"
+#line 1220 "rl78-decode.opc"
           ID(xor); DR(A); SM(None, IMMU(2)); Fz;
         
         }
@@ -4977,7 +4993,7 @@ rl78_decode_opcode (unsigned long pc AU,
     case 0xc6:
         {
           /** 1100 0rg0			pop	%0				*/
-#line 957 "rl78-decode.opc"
+#line 962 "rl78-decode.opc"
           int rg AU = (op[0] >> 1) & 0x03;
           if (trace)
             {
@@ -4987,7 +5003,7 @@ rl78_decode_opcode (unsigned long pc AU,
               printf ("  rg = 0x%x\n", rg);
             }
           SYNTAX("pop	%0");
-#line 957 "rl78-decode.opc"
+#line 962 "rl78-decode.opc"
           ID(mov); W(); DRW(rg); SPOP();
         
         }
@@ -4998,7 +5014,7 @@ rl78_decode_opcode (unsigned long pc AU,
     case 0xc7:
         {
           /** 1100 0rg1			push	%1				*/
-#line 965 "rl78-decode.opc"
+#line 970 "rl78-decode.opc"
           int rg AU = (op[0] >> 1) & 0x03;
           if (trace)
             {
@@ -5008,7 +5024,7 @@ rl78_decode_opcode (unsigned long pc AU,
               printf ("  rg = 0x%x\n", rg);
             }
           SYNTAX("push	%1");
-#line 965 "rl78-decode.opc"
+#line 970 "rl78-decode.opc"
           ID(mov); W(); DPUSH(); SRW(rg);
         
         }
@@ -5237,7 +5253,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("ret");
-#line 973 "rl78-decode.opc"
+#line 978 "rl78-decode.opc"
           ID(ret);
         
         }
@@ -5380,7 +5396,7 @@ rl78_decode_opcode (unsigned long pc AU,
     case 0xe3:
         {
           /** 1110 00rg			oneb	%0				*/
-#line 895 "rl78-decode.opc"
+#line 900 "rl78-decode.opc"
           int rg AU = op[0] & 0x03;
           if (trace)
             {
@@ -5390,7 +5406,7 @@ rl78_decode_opcode (unsigned long pc AU,
               printf ("  rg = 0x%x\n", rg);
             }
           SYNTAX("oneb	%0");
-#line 895 "rl78-decode.opc"
+#line 900 "rl78-decode.opc"
           ID(mov); DRB(rg); SC(1);
         
         }
@@ -5405,7 +5421,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("oneb	%0");
-#line 898 "rl78-decode.opc"
+#line 903 "rl78-decode.opc"
           ID(mov); DM(None, SADDR); SC(1);
         
         /*----------------------------------------------------------------------*/
@@ -5422,7 +5438,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("oneb	%e0%!0");
-#line 892 "rl78-decode.opc"
+#line 897 "rl78-decode.opc"
           ID(mov); DM(None, IMMU(2)); SC(1);
         
         }
@@ -5437,7 +5453,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("onew	%0");
-#line 903 "rl78-decode.opc"
+#line 908 "rl78-decode.opc"
           ID(mov); DR(AX); SC(1);
         
         }
@@ -5452,7 +5468,7 @@ rl78_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("onew	%0");
-#line 906 "rl78-decode.opc"
+#line 911 "rl78-decode.opc"
           ID(mov); DR(BC); SC(1);
         
         /*----------------------------------------------------------------------*/
@@ -5725,7 +5741,7 @@ rl78_decode_opcode (unsigned long pc AU,
         }
       break;
   }
-#line 1261 "rl78-decode.opc"
+#line 1266 "rl78-decode.opc"
 
   return rl78->n_bytes;
 }
diff --git a/opcodes/rl78-decode.opc b/opcodes/rl78-decode.opc
index c5cdf29..1fe84a6 100644
--- a/opcodes/rl78-decode.opc
+++ b/opcodes/rl78-decode.opc
@@ -1,9 +1,8 @@
 /* -*- c -*- */
+#include "sysdep.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-
-#include "config.h"
 #include "ansidecl.h"
 #include "opcode/rl78.h"
 
@@ -888,6 +887,11 @@ rl78_decode_opcode (unsigned long pc AU,
 
 /*----------------------------------------------------------------------*/
 
+/** 0111 0001 1100 0000		not1	cy				*/
+  ID(xor); DCY(); SC(1);
+
+/*----------------------------------------------------------------------*/
+
 /** 1110 0101			oneb	%e0%!0				*/
   ID(mov); DM(None, IMMU(2)); SC(1);
 
diff --git a/opcodes/rl78-dis.c b/opcodes/rl78-dis.c
index 826235a..3c365ad 100644
--- a/opcodes/rl78-dis.c
+++ b/opcodes/rl78-dis.c
@@ -1,5 +1,5 @@
 /* Disassembler code for Renesas RL78.
-   Copyright 2011 Free Software Foundation, Inc.
+   Copyright 2011, 2012 Free Software Foundation, Inc.
    Contributed by Red Hat.
    Written by DJ Delorie.
 
@@ -20,6 +20,7 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include <stdio.h>
 
 #include "bfd.h"
diff --git a/opcodes/rx-decode.c b/opcodes/rx-decode.c
index 8f047c9..00d61e6 100644
--- a/opcodes/rx-decode.c
+++ b/opcodes/rx-decode.c
@@ -1,10 +1,9 @@
 #line 1 "rx-decode.opc"
 /* -*- c -*- */
+#include "sysdep.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-
-#include "config.h"
 #include "ansidecl.h"
 #include "opcode/rx.h"
 
@@ -271,7 +270,7 @@ rx_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("brk");
-#line 943 "rx-decode.opc"
+#line 955 "rx-decode.opc"
           ID(brk);
         
         }
@@ -286,7 +285,7 @@ rx_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("dbt");
-#line 946 "rx-decode.opc"
+#line 958 "rx-decode.opc"
           ID(dbt);
         
         }
@@ -301,7 +300,7 @@ rx_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("rts");
-#line 732 "rx-decode.opc"
+#line 744 "rx-decode.opc"
           ID(rts);
         
         /*----------------------------------------------------------------------*/
@@ -319,7 +318,7 @@ rx_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("nop");
-#line 738 "rx-decode.opc"
+#line 750 "rx-decode.opc"
           ID(nop);
         
         /*----------------------------------------------------------------------*/
@@ -337,7 +336,7 @@ rx_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("bra.a	%a0");
-#line 710 "rx-decode.opc"
+#line 722 "rx-decode.opc"
           ID(branch); DC(pc + IMMex(3));
         
         }
@@ -352,7 +351,7 @@ rx_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("bsr.a	%a0");
-#line 726 "rx-decode.opc"
+#line 738 "rx-decode.opc"
           ID(jsr); DC(pc + IMMex(3));
         
         }
@@ -369,13 +368,13 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_1:
                     {
                       /** 0000 0110 mx00 00ss rsrc rdst			sub	%2%S2, %1 */
-#line 506 "rx-decode.opc"
+#line 518 "rx-decode.opc"
                       int mx AU = (op[1] >> 6) & 0x03;
-#line 506 "rx-decode.opc"
+#line 518 "rx-decode.opc"
                       int ss AU = op[1] & 0x03;
-#line 506 "rx-decode.opc"
+#line 518 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 506 "rx-decode.opc"
+#line 518 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -388,7 +387,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("sub	%2%S2, %1");
-#line 506 "rx-decode.opc"
+#line 518 "rx-decode.opc"
                       ID(sub); S2Pm(ss, rsrc, mx); SR(rdst); DR(rdst); F_OSZC;
                     
                     }
@@ -430,13 +429,13 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_2:
                     {
                       /** 0000 0110 mx00 01ss rsrc rdst		cmp	%2%S2, %1 */
-#line 494 "rx-decode.opc"
+#line 506 "rx-decode.opc"
                       int mx AU = (op[1] >> 6) & 0x03;
-#line 494 "rx-decode.opc"
+#line 506 "rx-decode.opc"
                       int ss AU = op[1] & 0x03;
-#line 494 "rx-decode.opc"
+#line 506 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 494 "rx-decode.opc"
+#line 506 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -449,7 +448,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("cmp	%2%S2, %1");
-#line 494 "rx-decode.opc"
+#line 506 "rx-decode.opc"
                       ID(sub); S2Pm(ss, rsrc, mx); SR(rdst); F_OSZC;
                     
                     /*----------------------------------------------------------------------*/
@@ -494,13 +493,13 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_3:
                     {
                       /** 0000 0110 mx00 10ss rsrc rdst	add	%1%S1, %0 */
-#line 470 "rx-decode.opc"
+#line 482 "rx-decode.opc"
                       int mx AU = (op[1] >> 6) & 0x03;
-#line 470 "rx-decode.opc"
+#line 482 "rx-decode.opc"
                       int ss AU = op[1] & 0x03;
-#line 470 "rx-decode.opc"
+#line 482 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 470 "rx-decode.opc"
+#line 482 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -513,7 +512,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("add	%1%S1, %0");
-#line 470 "rx-decode.opc"
+#line 482 "rx-decode.opc"
                       ID(add); SPm(ss, rsrc, mx); DR(rdst); F_OSZC;
                     
                     }
@@ -555,13 +554,13 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_4:
                     {
                       /** 0000 0110 mx00 11ss rsrc rdst	mul	%1%S1, %0 */
-#line 575 "rx-decode.opc"
+#line 587 "rx-decode.opc"
                       int mx AU = (op[1] >> 6) & 0x03;
-#line 575 "rx-decode.opc"
+#line 587 "rx-decode.opc"
                       int ss AU = op[1] & 0x03;
-#line 575 "rx-decode.opc"
+#line 587 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 575 "rx-decode.opc"
+#line 587 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -574,7 +573,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("mul	%1%S1, %0");
-#line 575 "rx-decode.opc"
+#line 587 "rx-decode.opc"
                       ID(mul); SPm(ss, rsrc, mx); DR(rdst); F_____;
                     
                     }
@@ -616,13 +615,13 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_5:
                     {
                       /** 0000 0110 mx01 00ss rsrc rdst	and	%1%S1, %0 */
-#line 383 "rx-decode.opc"
+#line 395 "rx-decode.opc"
                       int mx AU = (op[1] >> 6) & 0x03;
-#line 383 "rx-decode.opc"
+#line 395 "rx-decode.opc"
                       int ss AU = op[1] & 0x03;
-#line 383 "rx-decode.opc"
+#line 395 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 383 "rx-decode.opc"
+#line 395 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -635,7 +634,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("and	%1%S1, %0");
-#line 383 "rx-decode.opc"
+#line 395 "rx-decode.opc"
                       ID(and); SPm(ss, rsrc, mx); DR(rdst); F__SZ_;
                     
                     }
@@ -677,13 +676,13 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_6:
                     {
                       /** 0000 0110 mx01 01ss rsrc rdst			or	%1%S1, %0 */
-#line 401 "rx-decode.opc"
+#line 413 "rx-decode.opc"
                       int mx AU = (op[1] >> 6) & 0x03;
-#line 401 "rx-decode.opc"
+#line 413 "rx-decode.opc"
                       int ss AU = op[1] & 0x03;
-#line 401 "rx-decode.opc"
+#line 413 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 401 "rx-decode.opc"
+#line 413 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -696,7 +695,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("or	%1%S1, %0");
-#line 401 "rx-decode.opc"
+#line 413 "rx-decode.opc"
                       ID(or); SPm(ss, rsrc, mx); DR(rdst); F__SZ_;
                     
                     }
@@ -742,13 +741,13 @@ rx_decode_opcode (unsigned long pc AU,
                         op_semantics_7:
                           {
                             /** 0000 0110 mx10 00sp 0000 0000 rsrc rdst	sbb	%1%S1, %0 */
-#line 519 "rx-decode.opc"
+#line 531 "rx-decode.opc"
                             int mx AU = (op[1] >> 6) & 0x03;
-#line 519 "rx-decode.opc"
+#line 531 "rx-decode.opc"
                             int sp AU = op[1] & 0x03;
-#line 519 "rx-decode.opc"
+#line 531 "rx-decode.opc"
                             int rsrc AU = (op[3] >> 4) & 0x0f;
-#line 519 "rx-decode.opc"
+#line 531 "rx-decode.opc"
                             int rdst AU = op[3] & 0x0f;
                             if (trace)
                               {
@@ -761,7 +760,7 @@ rx_decode_opcode (unsigned long pc AU,
                                 printf ("  rdst = 0x%x\n", rdst);
                               }
                             SYNTAX("sbb	%1%S1, %0");
-#line 519 "rx-decode.opc"
+#line 531 "rx-decode.opc"
                             ID(sbb); SPm(sp, rsrc, mx); DR(rdst); F_OSZC;
                           
                           /*----------------------------------------------------------------------*/
@@ -779,13 +778,13 @@ rx_decode_opcode (unsigned long pc AU,
                         op_semantics_8:
                           {
                             /** 0000 0110 mx10 00ss 0000 0100 rsrc rdst	max	%1%S1, %0 */
-#line 548 "rx-decode.opc"
+#line 560 "rx-decode.opc"
                             int mx AU = (op[1] >> 6) & 0x03;
-#line 548 "rx-decode.opc"
+#line 560 "rx-decode.opc"
                             int ss AU = op[1] & 0x03;
-#line 548 "rx-decode.opc"
+#line 560 "rx-decode.opc"
                             int rsrc AU = (op[3] >> 4) & 0x0f;
-#line 548 "rx-decode.opc"
+#line 560 "rx-decode.opc"
                             int rdst AU = op[3] & 0x0f;
                             if (trace)
                               {
@@ -798,7 +797,7 @@ rx_decode_opcode (unsigned long pc AU,
                                 printf ("  rdst = 0x%x\n", rdst);
                               }
                             SYNTAX("max	%1%S1, %0");
-#line 548 "rx-decode.opc"
+#line 560 "rx-decode.opc"
                             ID(max); SPm(ss, rsrc, mx); DR(rdst);
                           
                           /*----------------------------------------------------------------------*/
@@ -816,13 +815,13 @@ rx_decode_opcode (unsigned long pc AU,
                         op_semantics_9:
                           {
                             /** 0000 0110 mx10 00ss 0000 0101 rsrc rdst	min	%1%S1, %0 */
-#line 560 "rx-decode.opc"
+#line 572 "rx-decode.opc"
                             int mx AU = (op[1] >> 6) & 0x03;
-#line 560 "rx-decode.opc"
+#line 572 "rx-decode.opc"
                             int ss AU = op[1] & 0x03;
-#line 560 "rx-decode.opc"
+#line 572 "rx-decode.opc"
                             int rsrc AU = (op[3] >> 4) & 0x0f;
-#line 560 "rx-decode.opc"
+#line 572 "rx-decode.opc"
                             int rdst AU = op[3] & 0x0f;
                             if (trace)
                               {
@@ -835,7 +834,7 @@ rx_decode_opcode (unsigned long pc AU,
                                 printf ("  rdst = 0x%x\n", rdst);
                               }
                             SYNTAX("min	%1%S1, %0");
-#line 560 "rx-decode.opc"
+#line 572 "rx-decode.opc"
                             ID(min); SPm(ss, rsrc, mx); DR(rdst);
                           
                           /*----------------------------------------------------------------------*/
@@ -853,13 +852,13 @@ rx_decode_opcode (unsigned long pc AU,
                         op_semantics_10:
                           {
                             /** 0000 0110 mx10 00ss 0000 0110 rsrc rdst	emul	%1%S1, %0 */
-#line 590 "rx-decode.opc"
+#line 602 "rx-decode.opc"
                             int mx AU = (op[1] >> 6) & 0x03;
-#line 590 "rx-decode.opc"
+#line 602 "rx-decode.opc"
                             int ss AU = op[1] & 0x03;
-#line 590 "rx-decode.opc"
+#line 602 "rx-decode.opc"
                             int rsrc AU = (op[3] >> 4) & 0x0f;
-#line 590 "rx-decode.opc"
+#line 602 "rx-decode.opc"
                             int rdst AU = op[3] & 0x0f;
                             if (trace)
                               {
@@ -872,7 +871,7 @@ rx_decode_opcode (unsigned long pc AU,
                                 printf ("  rdst = 0x%x\n", rdst);
                               }
                             SYNTAX("emul	%1%S1, %0");
-#line 590 "rx-decode.opc"
+#line 602 "rx-decode.opc"
                             ID(emul); SPm(ss, rsrc, mx); DR(rdst);
                           
                           /*----------------------------------------------------------------------*/
@@ -890,13 +889,13 @@ rx_decode_opcode (unsigned long pc AU,
                         op_semantics_11:
                           {
                             /** 0000 0110 mx10 00ss 0000 0111 rsrc rdst	emulu	%1%S1, %0 */
-#line 602 "rx-decode.opc"
+#line 614 "rx-decode.opc"
                             int mx AU = (op[1] >> 6) & 0x03;
-#line 602 "rx-decode.opc"
+#line 614 "rx-decode.opc"
                             int ss AU = op[1] & 0x03;
-#line 602 "rx-decode.opc"
+#line 614 "rx-decode.opc"
                             int rsrc AU = (op[3] >> 4) & 0x0f;
-#line 602 "rx-decode.opc"
+#line 614 "rx-decode.opc"
                             int rdst AU = op[3] & 0x0f;
                             if (trace)
                               {
@@ -909,7 +908,7 @@ rx_decode_opcode (unsigned long pc AU,
                                 printf ("  rdst = 0x%x\n", rdst);
                               }
                             SYNTAX("emulu	%1%S1, %0");
-#line 602 "rx-decode.opc"
+#line 614 "rx-decode.opc"
                             ID(emulu); SPm(ss, rsrc, mx); DR(rdst);
                           
                           /*----------------------------------------------------------------------*/
@@ -927,13 +926,13 @@ rx_decode_opcode (unsigned long pc AU,
                         op_semantics_12:
                           {
                             /** 0000 0110 mx10 00ss 0000 1000 rsrc rdst	div	%1%S1, %0 */
-#line 614 "rx-decode.opc"
+#line 626 "rx-decode.opc"
                             int mx AU = (op[1] >> 6) & 0x03;
-#line 614 "rx-decode.opc"
+#line 626 "rx-decode.opc"
                             int ss AU = op[1] & 0x03;
-#line 614 "rx-decode.opc"
+#line 626 "rx-decode.opc"
                             int rsrc AU = (op[3] >> 4) & 0x0f;
-#line 614 "rx-decode.opc"
+#line 626 "rx-decode.opc"
                             int rdst AU = op[3] & 0x0f;
                             if (trace)
                               {
@@ -946,7 +945,7 @@ rx_decode_opcode (unsigned long pc AU,
                                 printf ("  rdst = 0x%x\n", rdst);
                               }
                             SYNTAX("div	%1%S1, %0");
-#line 614 "rx-decode.opc"
+#line 626 "rx-decode.opc"
                             ID(div); SPm(ss, rsrc, mx); DR(rdst); F_O___;
                           
                           /*----------------------------------------------------------------------*/
@@ -964,13 +963,13 @@ rx_decode_opcode (unsigned long pc AU,
                         op_semantics_13:
                           {
                             /** 0000 0110 mx10 00ss 0000 1001 rsrc rdst	divu	%1%S1, %0 */
-#line 626 "rx-decode.opc"
+#line 638 "rx-decode.opc"
                             int mx AU = (op[1] >> 6) & 0x03;
-#line 626 "rx-decode.opc"
+#line 638 "rx-decode.opc"
                             int ss AU = op[1] & 0x03;
-#line 626 "rx-decode.opc"
+#line 638 "rx-decode.opc"
                             int rsrc AU = (op[3] >> 4) & 0x0f;
-#line 626 "rx-decode.opc"
+#line 638 "rx-decode.opc"
                             int rdst AU = op[3] & 0x0f;
                             if (trace)
                               {
@@ -983,7 +982,7 @@ rx_decode_opcode (unsigned long pc AU,
                                 printf ("  rdst = 0x%x\n", rdst);
                               }
                             SYNTAX("divu	%1%S1, %0");
-#line 626 "rx-decode.opc"
+#line 638 "rx-decode.opc"
                             ID(divu); SPm(ss, rsrc, mx); DR(rdst); F_O___;
                           
                           /*----------------------------------------------------------------------*/
@@ -1001,13 +1000,13 @@ rx_decode_opcode (unsigned long pc AU,
                         op_semantics_14:
                           {
                             /** 0000 0110 mx10 00ss 0000 1100 rsrc rdst	tst	%1%S1, %2 */
-#line 437 "rx-decode.opc"
+#line 449 "rx-decode.opc"
                             int mx AU = (op[1] >> 6) & 0x03;
-#line 437 "rx-decode.opc"
+#line 449 "rx-decode.opc"
                             int ss AU = op[1] & 0x03;
-#line 437 "rx-decode.opc"
+#line 449 "rx-decode.opc"
                             int rsrc AU = (op[3] >> 4) & 0x0f;
-#line 437 "rx-decode.opc"
+#line 449 "rx-decode.opc"
                             int rdst AU = op[3] & 0x0f;
                             if (trace)
                               {
@@ -1020,7 +1019,7 @@ rx_decode_opcode (unsigned long pc AU,
                                 printf ("  rdst = 0x%x\n", rdst);
                               }
                             SYNTAX("tst	%1%S1, %2");
-#line 437 "rx-decode.opc"
+#line 449 "rx-decode.opc"
                             ID(and); SPm(ss, rsrc, mx); S2R(rdst); F__SZ_;
                           
                           /*----------------------------------------------------------------------*/
@@ -1038,13 +1037,13 @@ rx_decode_opcode (unsigned long pc AU,
                         op_semantics_15:
                           {
                             /** 0000 0110 mx10 00ss 0000 1101 rsrc rdst	xor	%1%S1, %0 */
-#line 416 "rx-decode.opc"
+#line 428 "rx-decode.opc"
                             int mx AU = (op[1] >> 6) & 0x03;
-#line 416 "rx-decode.opc"
+#line 428 "rx-decode.opc"
                             int ss AU = op[1] & 0x03;
-#line 416 "rx-decode.opc"
+#line 428 "rx-decode.opc"
                             int rsrc AU = (op[3] >> 4) & 0x0f;
-#line 416 "rx-decode.opc"
+#line 428 "rx-decode.opc"
                             int rdst AU = op[3] & 0x0f;
                             if (trace)
                               {
@@ -1057,7 +1056,7 @@ rx_decode_opcode (unsigned long pc AU,
                                 printf ("  rdst = 0x%x\n", rdst);
                               }
                             SYNTAX("xor	%1%S1, %0");
-#line 416 "rx-decode.opc"
+#line 428 "rx-decode.opc"
                             ID(xor); SPm(ss, rsrc, mx); DR(rdst); F__SZ_;
                           
                           /*----------------------------------------------------------------------*/
@@ -1075,13 +1074,13 @@ rx_decode_opcode (unsigned long pc AU,
                         op_semantics_16:
                           {
                             /** 0000 0110 mx10 00ss 0001 0000 rsrc rdst	xchg	%1%S1, %0 */
-#line 350 "rx-decode.opc"
+#line 362 "rx-decode.opc"
                             int mx AU = (op[1] >> 6) & 0x03;
-#line 350 "rx-decode.opc"
+#line 362 "rx-decode.opc"
                             int ss AU = op[1] & 0x03;
-#line 350 "rx-decode.opc"
+#line 362 "rx-decode.opc"
                             int rsrc AU = (op[3] >> 4) & 0x0f;
-#line 350 "rx-decode.opc"
+#line 362 "rx-decode.opc"
                             int rdst AU = op[3] & 0x0f;
                             if (trace)
                               {
@@ -1094,7 +1093,7 @@ rx_decode_opcode (unsigned long pc AU,
                                 printf ("  rdst = 0x%x\n", rdst);
                               }
                             SYNTAX("xchg	%1%S1, %0");
-#line 350 "rx-decode.opc"
+#line 362 "rx-decode.opc"
                             ID(xchg); DR(rdst); SPm(ss, rsrc, mx);
                           
                           /*----------------------------------------------------------------------*/
@@ -1112,13 +1111,13 @@ rx_decode_opcode (unsigned long pc AU,
                         op_semantics_17:
                           {
                             /** 0000 0110 mx10 00sd 0001 0001 rsrc rdst	itof	%1%S1, %0 */
-#line 855 "rx-decode.opc"
+#line 867 "rx-decode.opc"
                             int mx AU = (op[1] >> 6) & 0x03;
-#line 855 "rx-decode.opc"
+#line 867 "rx-decode.opc"
                             int sd AU = op[1] & 0x03;
-#line 855 "rx-decode.opc"
+#line 867 "rx-decode.opc"
                             int rsrc AU = (op[3] >> 4) & 0x0f;
-#line 855 "rx-decode.opc"
+#line 867 "rx-decode.opc"
                             int rdst AU = op[3] & 0x0f;
                             if (trace)
                               {
@@ -1131,7 +1130,7 @@ rx_decode_opcode (unsigned long pc AU,
                                 printf ("  rdst = 0x%x\n", rdst);
                               }
                             SYNTAX("itof	%1%S1, %0");
-#line 855 "rx-decode.opc"
+#line 867 "rx-decode.opc"
                             ID(itof); DR (rdst); SPm(sd, rsrc, mx); F__SZ_;
                           
                           /*----------------------------------------------------------------------*/
@@ -2339,11 +2338,11 @@ rx_decode_opcode (unsigned long pc AU,
                         op_semantics_18:
                           {
                             /** 0000 0110 1010 00ss 0000 0010 rsrc rdst	adc	%1%S1, %0 */
-#line 458 "rx-decode.opc"
+#line 470 "rx-decode.opc"
                             int ss AU = op[1] & 0x03;
-#line 458 "rx-decode.opc"
+#line 470 "rx-decode.opc"
                             int rsrc AU = (op[3] >> 4) & 0x0f;
-#line 458 "rx-decode.opc"
+#line 470 "rx-decode.opc"
                             int rdst AU = op[3] & 0x0f;
                             if (trace)
                               {
@@ -2355,7 +2354,7 @@ rx_decode_opcode (unsigned long pc AU,
                                 printf ("  rdst = 0x%x\n", rdst);
                               }
                             SYNTAX("adc	%1%S1, %0");
-#line 458 "rx-decode.opc"
+#line 470 "rx-decode.opc"
                             ID(adc); SPm(ss, rsrc, 2); DR(rdst); F_OSZC;
                           
                           /*----------------------------------------------------------------------*/
@@ -3456,7 +3455,7 @@ rx_decode_opcode (unsigned long pc AU,
     case 0x0f:
         {
           /** 0000 1dsp			bra.s	%a0 */
-#line 701 "rx-decode.opc"
+#line 713 "rx-decode.opc"
           int dsp AU = op[0] & 0x07;
           if (trace)
             {
@@ -3466,7 +3465,7 @@ rx_decode_opcode (unsigned long pc AU,
               printf ("  dsp = 0x%x\n", dsp);
             }
           SYNTAX("bra.s	%a0");
-#line 701 "rx-decode.opc"
+#line 713 "rx-decode.opc"
           ID(branch); DC(pc + dsp3map[dsp]);
         
         }
@@ -3489,9 +3488,9 @@ rx_decode_opcode (unsigned long pc AU,
     case 0x1f:
         {
           /** 0001 n dsp			b%1.s	%a0 */
-#line 691 "rx-decode.opc"
+#line 703 "rx-decode.opc"
           int n AU = (op[0] >> 3) & 0x01;
-#line 691 "rx-decode.opc"
+#line 703 "rx-decode.opc"
           int dsp AU = op[0] & 0x07;
           if (trace)
             {
@@ -3502,7 +3501,7 @@ rx_decode_opcode (unsigned long pc AU,
               printf ("  dsp = 0x%x\n", dsp);
             }
           SYNTAX("b%1.s	%a0");
-#line 691 "rx-decode.opc"
+#line 703 "rx-decode.opc"
           ID(branch); Scc(n); DC(pc + dsp3map[dsp]);
         
         }
@@ -3524,7 +3523,7 @@ rx_decode_opcode (unsigned long pc AU,
     case 0x2f:
         {
           /** 0010 cond			b%1.b	%a0 */
-#line 694 "rx-decode.opc"
+#line 706 "rx-decode.opc"
           int cond AU = op[0] & 0x0f;
           if (trace)
             {
@@ -3534,7 +3533,7 @@ rx_decode_opcode (unsigned long pc AU,
               printf ("  cond = 0x%x\n", cond);
             }
           SYNTAX("b%1.b	%a0");
-#line 694 "rx-decode.opc"
+#line 706 "rx-decode.opc"
           ID(branch); Scc(cond); DC(pc + IMMex (1));
         
         }
@@ -3549,7 +3548,7 @@ rx_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("bra.b	%a0");
-#line 704 "rx-decode.opc"
+#line 716 "rx-decode.opc"
           ID(branch); DC(pc + IMMex(1));
         
         }
@@ -3564,7 +3563,7 @@ rx_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("bra.w	%a0");
-#line 707 "rx-decode.opc"
+#line 719 "rx-decode.opc"
           ID(branch); DC(pc + IMMex(2));
         
         }
@@ -3579,7 +3578,7 @@ rx_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("bsr.w	%a0");
-#line 723 "rx-decode.opc"
+#line 735 "rx-decode.opc"
           ID(jsr); DC(pc + IMMex(2));
         
         }
@@ -3588,7 +3587,7 @@ rx_decode_opcode (unsigned long pc AU,
     case 0x3b:
         {
           /** 0011 101c			b%1.w	%a0 */
-#line 697 "rx-decode.opc"
+#line 709 "rx-decode.opc"
           int c AU = op[0] & 0x01;
           if (trace)
             {
@@ -3598,7 +3597,7 @@ rx_decode_opcode (unsigned long pc AU,
               printf ("  c = 0x%x\n", c);
             }
           SYNTAX("b%1.w	%a0");
-#line 697 "rx-decode.opc"
+#line 709 "rx-decode.opc"
           ID(branch); Scc(c); DC(pc + IMMex (2));
         
         
@@ -3612,13 +3611,13 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_19:
               {
                 /** 0011 11sz d dst sppp		mov%s	#%1, %0 */
-#line 271 "rx-decode.opc"
+#line 283 "rx-decode.opc"
                 int sz AU = op[0] & 0x03;
-#line 271 "rx-decode.opc"
+#line 283 "rx-decode.opc"
                 int d AU = (op[1] >> 7) & 0x01;
-#line 271 "rx-decode.opc"
+#line 283 "rx-decode.opc"
                 int dst AU = (op[1] >> 4) & 0x07;
-#line 271 "rx-decode.opc"
+#line 283 "rx-decode.opc"
                 int sppp AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -3631,7 +3630,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  sppp = 0x%x\n", sppp);
                   }
                 SYNTAX("mov%s	#%1, %0");
-#line 271 "rx-decode.opc"
+#line 283 "rx-decode.opc"
                 ID(mov); sBWL (sz); DIs(dst, d*16+sppp, sz); SC(IMM(1)); F_____;
               
               }
@@ -3663,9 +3662,9 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x00:
               {
                 /** 0011 1111 rega regb		rtsd	#%1, %2-%0 */
-#line 368 "rx-decode.opc"
+#line 380 "rx-decode.opc"
                 int rega AU = (op[1] >> 4) & 0x0f;
-#line 368 "rx-decode.opc"
+#line 380 "rx-decode.opc"
                 int regb AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -3676,7 +3675,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  regb = 0x%x\n", regb);
                   }
                 SYNTAX("rtsd	#%1, %2-%0");
-#line 368 "rx-decode.opc"
+#line 380 "rx-decode.opc"
                 ID(rtsd); SC(IMM(1) * 4); S2R(rega); DR(regb);
               
               /*----------------------------------------------------------------------*/
@@ -3694,11 +3693,11 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_20:
               {
                 /** 0100 00ss rsrc rdst			sub	%2%S2, %1 */
-#line 503 "rx-decode.opc"
+#line 515 "rx-decode.opc"
                 int ss AU = op[0] & 0x03;
-#line 503 "rx-decode.opc"
+#line 515 "rx-decode.opc"
                 int rsrc AU = (op[1] >> 4) & 0x0f;
-#line 503 "rx-decode.opc"
+#line 515 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -3710,7 +3709,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("sub	%2%S2, %1");
-#line 503 "rx-decode.opc"
+#line 515 "rx-decode.opc"
                 ID(sub); S2P(ss, rsrc); SR(rdst); DR(rdst); F_OSZC;
               
               }
@@ -3752,11 +3751,11 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_21:
               {
                 /** 0100 01ss rsrc rdst		cmp	%2%S2, %1 */
-#line 491 "rx-decode.opc"
+#line 503 "rx-decode.opc"
                 int ss AU = op[0] & 0x03;
-#line 491 "rx-decode.opc"
+#line 503 "rx-decode.opc"
                 int rsrc AU = (op[1] >> 4) & 0x0f;
-#line 491 "rx-decode.opc"
+#line 503 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -3768,7 +3767,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("cmp	%2%S2, %1");
-#line 491 "rx-decode.opc"
+#line 503 "rx-decode.opc"
                 ID(sub); S2P(ss, rsrc); SR(rdst); F_OSZC;
               
               }
@@ -3810,11 +3809,11 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_22:
               {
                 /** 0100 10ss rsrc rdst			add	%1%S1, %0 */
-#line 467 "rx-decode.opc"
+#line 479 "rx-decode.opc"
                 int ss AU = op[0] & 0x03;
-#line 467 "rx-decode.opc"
+#line 479 "rx-decode.opc"
                 int rsrc AU = (op[1] >> 4) & 0x0f;
-#line 467 "rx-decode.opc"
+#line 479 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -3826,7 +3825,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("add	%1%S1, %0");
-#line 467 "rx-decode.opc"
+#line 479 "rx-decode.opc"
                 ID(add); SP(ss, rsrc); DR(rdst); F_OSZC;
               
               }
@@ -3868,11 +3867,11 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_23:
               {
                 /** 0100 11ss rsrc rdst			mul	%1%S1, %0 */
-#line 572 "rx-decode.opc"
+#line 584 "rx-decode.opc"
                 int ss AU = op[0] & 0x03;
-#line 572 "rx-decode.opc"
+#line 584 "rx-decode.opc"
                 int rsrc AU = (op[1] >> 4) & 0x0f;
-#line 572 "rx-decode.opc"
+#line 584 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -3884,7 +3883,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("mul	%1%S1, %0");
-#line 572 "rx-decode.opc"
+#line 584 "rx-decode.opc"
                 ID(mul); SP(ss, rsrc); DR(rdst); F_____;
               
               }
@@ -3926,11 +3925,11 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_24:
               {
                 /** 0101 00ss rsrc rdst			and	%1%S1, %0 */
-#line 380 "rx-decode.opc"
+#line 392 "rx-decode.opc"
                 int ss AU = op[0] & 0x03;
-#line 380 "rx-decode.opc"
+#line 392 "rx-decode.opc"
                 int rsrc AU = (op[1] >> 4) & 0x0f;
-#line 380 "rx-decode.opc"
+#line 392 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -3942,7 +3941,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("and	%1%S1, %0");
-#line 380 "rx-decode.opc"
+#line 392 "rx-decode.opc"
                 ID(and); SP(ss, rsrc); DR(rdst); F__SZ_;
               
               }
@@ -3984,11 +3983,11 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_25:
               {
                 /** 0101 01ss rsrc rdst			or	%1%S1, %0 */
-#line 398 "rx-decode.opc"
+#line 410 "rx-decode.opc"
                 int ss AU = op[0] & 0x03;
-#line 398 "rx-decode.opc"
+#line 410 "rx-decode.opc"
                 int rsrc AU = (op[1] >> 4) & 0x0f;
-#line 398 "rx-decode.opc"
+#line 410 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4000,7 +3999,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("or	%1%S1, %0");
-#line 398 "rx-decode.opc"
+#line 410 "rx-decode.opc"
                 ID(or); SP(ss, rsrc); DR(rdst); F__SZ_;
               
               }
@@ -4042,13 +4041,13 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_26:
               {
                 /** 0101 1 s ss rsrc rdst	movu%s	%1, %0 */
-#line 319 "rx-decode.opc"
+#line 331 "rx-decode.opc"
                 int s AU = (op[0] >> 2) & 0x01;
-#line 319 "rx-decode.opc"
+#line 331 "rx-decode.opc"
                 int ss AU = op[0] & 0x03;
-#line 319 "rx-decode.opc"
+#line 331 "rx-decode.opc"
                 int rsrc AU = (op[1] >> 4) & 0x0f;
-#line 319 "rx-decode.opc"
+#line 331 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4061,7 +4060,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("movu%s	%1, %0");
-#line 319 "rx-decode.opc"
+#line 331 "rx-decode.opc"
                 ID(mov); uBWL(s); SD(ss, rsrc, s); DR(rdst); F_____;
               
               }
@@ -4138,9 +4137,9 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x00:
               {
                 /** 0110 0000 immm rdst			sub	#%2, %0 */
-#line 500 "rx-decode.opc"
+#line 512 "rx-decode.opc"
                 int immm AU = (op[1] >> 4) & 0x0f;
-#line 500 "rx-decode.opc"
+#line 512 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4151,7 +4150,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("sub	#%2, %0");
-#line 500 "rx-decode.opc"
+#line 512 "rx-decode.opc"
                 ID(sub); S2C(immm); SR(rdst); DR(rdst); F_OSZC;
               
               }
@@ -4165,9 +4164,9 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x00:
               {
                 /** 0110 0001 immm rdst			cmp	#%2, %1 */
-#line 482 "rx-decode.opc"
+#line 494 "rx-decode.opc"
                 int immm AU = (op[1] >> 4) & 0x0f;
-#line 482 "rx-decode.opc"
+#line 494 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4178,7 +4177,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("cmp	#%2, %1");
-#line 482 "rx-decode.opc"
+#line 494 "rx-decode.opc"
                 ID(sub); S2C(immm); SR(rdst); F_OSZC;
               
               }
@@ -4192,9 +4191,9 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x00:
               {
                 /** 0110 0010 immm rdst			add	#%1, %0 */
-#line 464 "rx-decode.opc"
+#line 476 "rx-decode.opc"
                 int immm AU = (op[1] >> 4) & 0x0f;
-#line 464 "rx-decode.opc"
+#line 476 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4205,7 +4204,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("add	#%1, %0");
-#line 464 "rx-decode.opc"
+#line 476 "rx-decode.opc"
                 ID(add); SC(immm); DR(rdst); F_OSZC;
               
               }
@@ -4219,9 +4218,9 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x00:
               {
                 /** 0110 0011 immm rdst			mul	#%1, %0 */
-#line 566 "rx-decode.opc"
+#line 578 "rx-decode.opc"
                 int immm AU = (op[1] >> 4) & 0x0f;
-#line 566 "rx-decode.opc"
+#line 578 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4232,7 +4231,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("mul	#%1, %0");
-#line 566 "rx-decode.opc"
+#line 578 "rx-decode.opc"
                 ID(mul); DR(rdst); SC(immm); F_____;
               
               }
@@ -4246,9 +4245,9 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x00:
               {
                 /** 0110 0100 immm rdst			and	#%1, %0 */
-#line 374 "rx-decode.opc"
+#line 386 "rx-decode.opc"
                 int immm AU = (op[1] >> 4) & 0x0f;
-#line 374 "rx-decode.opc"
+#line 386 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4259,7 +4258,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("and	#%1, %0");
-#line 374 "rx-decode.opc"
+#line 386 "rx-decode.opc"
                 ID(and); SC(immm); DR(rdst); F__SZ_;
               
               }
@@ -4273,9 +4272,9 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x00:
               {
                 /** 0110 0101 immm rdst			or	#%1, %0 */
-#line 392 "rx-decode.opc"
+#line 404 "rx-decode.opc"
                 int immm AU = (op[1] >> 4) & 0x0f;
-#line 392 "rx-decode.opc"
+#line 404 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4286,7 +4285,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("or	#%1, %0");
-#line 392 "rx-decode.opc"
+#line 404 "rx-decode.opc"
                 ID(or); SC(immm); DR(rdst); F__SZ_;
               
               }
@@ -4300,9 +4299,9 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x00:
               {
                 /** 0110 0110 immm rdst		mov%s	#%1, %0 */
-#line 268 "rx-decode.opc"
+#line 280 "rx-decode.opc"
                 int immm AU = (op[1] >> 4) & 0x0f;
-#line 268 "rx-decode.opc"
+#line 280 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4313,7 +4312,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("mov%s	#%1, %0");
-#line 268 "rx-decode.opc"
+#line 280 "rx-decode.opc"
                 ID(mov); DR(rdst); SC(immm); F_____;
               
               }
@@ -4330,7 +4329,7 @@ rx_decode_opcode (unsigned long pc AU,
                      op[0]);
             }
           SYNTAX("rtsd	#%1");
-#line 365 "rx-decode.opc"
+#line 377 "rx-decode.opc"
           ID(rtsd); SC(IMM(1) * 4);
         
         }
@@ -4343,11 +4342,11 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_27:
               {
                 /** 0110 100i mmmm rdst			shlr	#%2, %0 */
-#line 652 "rx-decode.opc"
+#line 664 "rx-decode.opc"
                 int i AU = op[0] & 0x01;
-#line 652 "rx-decode.opc"
+#line 664 "rx-decode.opc"
                 int mmmm AU = (op[1] >> 4) & 0x0f;
-#line 652 "rx-decode.opc"
+#line 664 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4359,7 +4358,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("shlr	#%2, %0");
-#line 652 "rx-decode.opc"
+#line 664 "rx-decode.opc"
                 ID(shlr); S2C(i*16+mmmm); SR(rdst); DR(rdst); F__SZC;
               
               }
@@ -4383,11 +4382,11 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_28:
               {
                 /** 0110 101i mmmm rdst			shar	#%2, %0 */
-#line 642 "rx-decode.opc"
+#line 654 "rx-decode.opc"
                 int i AU = op[0] & 0x01;
-#line 642 "rx-decode.opc"
+#line 654 "rx-decode.opc"
                 int mmmm AU = (op[1] >> 4) & 0x0f;
-#line 642 "rx-decode.opc"
+#line 654 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4399,7 +4398,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("shar	#%2, %0");
-#line 642 "rx-decode.opc"
+#line 654 "rx-decode.opc"
                 ID(shar); S2C(i*16+mmmm); SR(rdst); DR(rdst); F_0SZC;
               
               }
@@ -4423,11 +4422,11 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_29:
               {
                 /** 0110 110i mmmm rdst			shll	#%2, %0 */
-#line 632 "rx-decode.opc"
+#line 644 "rx-decode.opc"
                 int i AU = op[0] & 0x01;
-#line 632 "rx-decode.opc"
+#line 644 "rx-decode.opc"
                 int mmmm AU = (op[1] >> 4) & 0x0f;
-#line 632 "rx-decode.opc"
+#line 644 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4439,7 +4438,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("shll	#%2, %0");
-#line 632 "rx-decode.opc"
+#line 644 "rx-decode.opc"
                 ID(shll); S2C(i*16+mmmm); SR(rdst); DR(rdst); F_OSZC;
               
               }
@@ -4462,9 +4461,9 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x00:
               {
                 /** 0110 1110 dsta dstb		pushm	%1-%2 */
-#line 332 "rx-decode.opc"
+#line 344 "rx-decode.opc"
                 int dsta AU = (op[1] >> 4) & 0x0f;
-#line 332 "rx-decode.opc"
+#line 344 "rx-decode.opc"
                 int dstb AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4475,7 +4474,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  dstb = 0x%x\n", dstb);
                   }
                 SYNTAX("pushm	%1-%2");
-#line 332 "rx-decode.opc"
+#line 344 "rx-decode.opc"
                 ID(pushm); SR(dsta); S2R(dstb); F_____;
                 
               }
@@ -4489,9 +4488,9 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x00:
               {
                 /** 0110 1111 dsta dstb		popm	%1-%2 */
-#line 329 "rx-decode.opc"
+#line 341 "rx-decode.opc"
                 int dsta AU = (op[1] >> 4) & 0x0f;
-#line 329 "rx-decode.opc"
+#line 341 "rx-decode.opc"
                 int dstb AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4502,7 +4501,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  dstb = 0x%x\n", dstb);
                   }
                 SYNTAX("popm	%1-%2");
-#line 329 "rx-decode.opc"
+#line 341 "rx-decode.opc"
                 ID(popm); SR(dsta); S2R(dstb); F_____;
               
               }
@@ -4517,11 +4516,11 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_30:
               {
                 /** 0111 00im rsrc rdst			add	#%1, %2, %0 */
-#line 473 "rx-decode.opc"
+#line 485 "rx-decode.opc"
                 int im AU = op[0] & 0x03;
-#line 473 "rx-decode.opc"
+#line 485 "rx-decode.opc"
                 int rsrc AU = (op[1] >> 4) & 0x0f;
-#line 473 "rx-decode.opc"
+#line 485 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4533,7 +4532,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("add	#%1, %2, %0");
-#line 473 "rx-decode.opc"
+#line 485 "rx-decode.opc"
                 ID(add); SC(IMMex(im)); S2R(rsrc); DR(rdst); F_OSZC;
               
               }
@@ -4575,9 +4574,9 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_31:
               {
                 /** 0111 01im 0000 rsrc		cmp	#%2, %1%S1 */
-#line 485 "rx-decode.opc"
+#line 497 "rx-decode.opc"
                 int im AU = op[0] & 0x03;
-#line 485 "rx-decode.opc"
+#line 497 "rx-decode.opc"
                 int rsrc AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4588,7 +4587,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rsrc = 0x%x\n", rsrc);
                   }
                 SYNTAX("cmp	#%2, %1%S1");
-#line 485 "rx-decode.opc"
+#line 497 "rx-decode.opc"
                 ID(sub); SR(rsrc); S2C(IMMex(im)); F_OSZC;
               
               }
@@ -4597,9 +4596,9 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_32:
               {
                 /** 0111 01im 0001rdst			mul	#%1, %0 */
-#line 569 "rx-decode.opc"
+#line 581 "rx-decode.opc"
                 int im AU = op[0] & 0x03;
-#line 569 "rx-decode.opc"
+#line 581 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4610,7 +4609,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("mul	#%1, %0");
-#line 569 "rx-decode.opc"
+#line 581 "rx-decode.opc"
                 ID(mul); DR(rdst); SC(IMMex(im)); F_____;
               
               }
@@ -4619,9 +4618,9 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_33:
               {
                 /** 0111 01im 0010 rdst			and	#%1, %0 */
-#line 377 "rx-decode.opc"
+#line 389 "rx-decode.opc"
                 int im AU = op[0] & 0x03;
-#line 377 "rx-decode.opc"
+#line 389 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4632,7 +4631,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("and	#%1, %0");
-#line 377 "rx-decode.opc"
+#line 389 "rx-decode.opc"
                 ID(and); SC(IMMex(im)); DR(rdst); F__SZ_;
               
               }
@@ -4641,9 +4640,9 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_34:
               {
                 /** 0111 01im 0011 rdst			or	#%1, %0 */
-#line 395 "rx-decode.opc"
+#line 407 "rx-decode.opc"
                 int im AU = op[0] & 0x03;
-#line 395 "rx-decode.opc"
+#line 407 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4654,7 +4653,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("or	#%1, %0");
-#line 395 "rx-decode.opc"
+#line 407 "rx-decode.opc"
                 ID(or); SC(IMMex(im)); DR(rdst); F__SZ_;
               
               }
@@ -4756,7 +4755,7 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x4f:
               {
                 /** 0111 0101 0100 rdst		mov%s	#%1, %0 */
-#line 262 "rx-decode.opc"
+#line 261 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4766,7 +4765,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("mov%s	#%1, %0");
-#line 262 "rx-decode.opc"
+#line 261 "rx-decode.opc"
                 ID(mov); DR(rdst); SC(IMM (1)); F_____;
               
               }
@@ -4789,7 +4788,7 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x5f:
               {
                 /** 0111 0101 0101 rsrc			cmp	#%2, %1 */
-#line 488 "rx-decode.opc"
+#line 500 "rx-decode.opc"
                 int rsrc AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4799,7 +4798,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rsrc = 0x%x\n", rsrc);
                   }
                 SYNTAX("cmp	#%2, %1");
-#line 488 "rx-decode.opc"
+#line 500 "rx-decode.opc"
                 ID(sub); SR(rsrc); S2C(IMM(1)); F_OSZC;
               
               }
@@ -4814,7 +4813,7 @@ rx_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("int #%1");
-#line 949 "rx-decode.opc"
+#line 961 "rx-decode.opc"
                 ID(int); SC(IMM(1));
               
               }
@@ -4826,7 +4825,7 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x00:
                     {
                       /** 0111 0101 0111 0000 0000 immm	mvtipl	#%1 */
-#line 916 "rx-decode.opc"
+#line 928 "rx-decode.opc"
                       int immm AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -4836,7 +4835,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  immm = 0x%x\n", immm);
                         }
                       SYNTAX("mvtipl	#%1");
-#line 916 "rx-decode.opc"
+#line 928 "rx-decode.opc"
                       ID(mvtipl); SC(immm);
                     
                     }
@@ -4893,11 +4892,11 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_35:
               {
                 /** 0111 100b ittt rdst			bset	#%1, %0 */
-#line 867 "rx-decode.opc"
+#line 879 "rx-decode.opc"
                 int b AU = op[0] & 0x01;
-#line 867 "rx-decode.opc"
+#line 879 "rx-decode.opc"
                 int ittt AU = (op[1] >> 4) & 0x0f;
-#line 867 "rx-decode.opc"
+#line 879 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4909,7 +4908,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("bset	#%1, %0");
-#line 867 "rx-decode.opc"
+#line 879 "rx-decode.opc"
                 ID(bset); BWL(LSIZE); SC(b*16+ittt); DR(rdst); F_____;
               
               
@@ -4934,11 +4933,11 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_36:
               {
                 /** 0111 101b ittt rdst			bclr	#%1, %0 */
-#line 877 "rx-decode.opc"
+#line 889 "rx-decode.opc"
                 int b AU = op[0] & 0x01;
-#line 877 "rx-decode.opc"
+#line 889 "rx-decode.opc"
                 int ittt AU = (op[1] >> 4) & 0x0f;
-#line 877 "rx-decode.opc"
+#line 889 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4950,7 +4949,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("bclr	#%1, %0");
-#line 877 "rx-decode.opc"
+#line 889 "rx-decode.opc"
                 ID(bclr); BWL(LSIZE); SC(b*16+ittt); DR(rdst); F_____;
               
               
@@ -4975,11 +4974,11 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_37:
               {
                 /** 0111 110b ittt rdst			btst	#%2, %1 */
-#line 887 "rx-decode.opc"
+#line 899 "rx-decode.opc"
                 int b AU = op[0] & 0x01;
-#line 887 "rx-decode.opc"
+#line 899 "rx-decode.opc"
                 int ittt AU = (op[1] >> 4) & 0x0f;
-#line 887 "rx-decode.opc"
+#line 899 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -4991,7 +4990,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("btst	#%2, %1");
-#line 887 "rx-decode.opc"
+#line 899 "rx-decode.opc"
                 ID(btst); BWL(LSIZE); S2C(b*16+ittt); SR(rdst); F___ZC;
               
               
@@ -5015,7 +5014,7 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x00:
               {
                 /** 0111 1110 0000 rdst			not	%0 */
-#line 422 "rx-decode.opc"
+#line 434 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -5025,7 +5024,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("not	%0");
-#line 422 "rx-decode.opc"
+#line 434 "rx-decode.opc"
                 ID(xor); DR(rdst); SR(rdst); S2C(~0); F__SZ_;
               
               }
@@ -5033,7 +5032,7 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x10:
               {
                 /** 0111 1110 0001 rdst			neg	%0 */
-#line 443 "rx-decode.opc"
+#line 455 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -5043,7 +5042,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("neg	%0");
-#line 443 "rx-decode.opc"
+#line 455 "rx-decode.opc"
                 ID(sub); DR(rdst); SC(0); S2R(rdst); F_OSZC;
               
               }
@@ -5051,7 +5050,7 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x20:
               {
                 /** 0111 1110 0010 rdst			abs	%0 */
-#line 525 "rx-decode.opc"
+#line 537 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -5061,7 +5060,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("abs	%0");
-#line 525 "rx-decode.opc"
+#line 537 "rx-decode.opc"
                 ID(abs); DR(rdst); SR(rdst); F_OSZ_;
               
               }
@@ -5069,7 +5068,7 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x30:
               {
                 /** 0111 1110 0011 rdst		sat	%0 */
-#line 807 "rx-decode.opc"
+#line 819 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -5079,7 +5078,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("sat	%0");
-#line 807 "rx-decode.opc"
+#line 819 "rx-decode.opc"
                 ID(sat); DR (rdst);
               
               }
@@ -5087,7 +5086,7 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x40:
               {
                 /** 0111 1110 0100 rdst			rorc	%0 */
-#line 667 "rx-decode.opc"
+#line 679 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -5097,7 +5096,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("rorc	%0");
-#line 667 "rx-decode.opc"
+#line 679 "rx-decode.opc"
                 ID(rorc); DR(rdst); F__SZC;
               
               }
@@ -5105,7 +5104,7 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x50:
               {
                 /** 0111 1110 0101 rdst			rolc	%0 */
-#line 664 "rx-decode.opc"
+#line 676 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -5115,7 +5114,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("rolc	%0");
-#line 664 "rx-decode.opc"
+#line 676 "rx-decode.opc"
                 ID(rolc); DR(rdst); F__SZC;
               
               }
@@ -5125,9 +5124,9 @@ rx_decode_opcode (unsigned long pc AU,
           case 0xa0:
               {
                 /** 0111 1110 10sz rsrc		push%s	%1 */
-#line 338 "rx-decode.opc"
+#line 350 "rx-decode.opc"
                 int sz AU = (op[1] >> 4) & 0x03;
-#line 338 "rx-decode.opc"
+#line 350 "rx-decode.opc"
                 int rsrc AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -5138,7 +5137,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rsrc = 0x%x\n", rsrc);
                   }
                 SYNTAX("push%s	%1");
-#line 338 "rx-decode.opc"
+#line 350 "rx-decode.opc"
                 ID(mov); BWL(sz); OP(0, RX_Operand_Predec, 0, 0); SR(rsrc); F_____;
               
               }
@@ -5146,7 +5145,7 @@ rx_decode_opcode (unsigned long pc AU,
           case 0xb0:
               {
                 /** 0111 1110 1011 rdst		pop	%0 */
-#line 335 "rx-decode.opc"
+#line 347 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -5156,7 +5155,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("pop	%0");
-#line 335 "rx-decode.opc"
+#line 347 "rx-decode.opc"
                 ID(mov); OP(1, RX_Operand_Postinc, 0, 0); DR(rdst); F_____;
                 
               }
@@ -5165,7 +5164,7 @@ rx_decode_opcode (unsigned long pc AU,
           case 0xd0:
               {
                 /** 0111 1110 110 crsrc			pushc	%1 */
-#line 922 "rx-decode.opc"
+#line 934 "rx-decode.opc"
                 int crsrc AU = op[1] & 0x1f;
                 if (trace)
                   {
@@ -5175,7 +5174,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  crsrc = 0x%x\n", crsrc);
                   }
                 SYNTAX("pushc	%1");
-#line 922 "rx-decode.opc"
+#line 934 "rx-decode.opc"
                 ID(mov); OP(0, RX_Operand_Predec, 0, 0); SR(crsrc + 16);
               
               }
@@ -5184,7 +5183,7 @@ rx_decode_opcode (unsigned long pc AU,
           case 0xf0:
               {
                 /** 0111 1110 111 crdst			popc	%0 */
-#line 919 "rx-decode.opc"
+#line 931 "rx-decode.opc"
                 int crdst AU = op[1] & 0x1f;
                 if (trace)
                   {
@@ -5194,7 +5193,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  crdst = 0x%x\n", crdst);
                   }
                 SYNTAX("popc	%0");
-#line 919 "rx-decode.opc"
+#line 931 "rx-decode.opc"
                 ID(mov); OP(1, RX_Operand_Postinc, 0, 0); DR(crdst + 16);
               
               }
@@ -5224,7 +5223,7 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x0f:
               {
                 /** 0111 1111 0000 rsrc		jmp	%0 */
-#line 717 "rx-decode.opc"
+#line 729 "rx-decode.opc"
                 int rsrc AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -5234,7 +5233,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rsrc = 0x%x\n", rsrc);
                   }
                 SYNTAX("jmp	%0");
-#line 717 "rx-decode.opc"
+#line 729 "rx-decode.opc"
                 ID(branch); DR(rsrc);
               
               }
@@ -5257,7 +5256,7 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x1f:
               {
                 /** 0111 1111 0001 rsrc		jsr	%0 */
-#line 720 "rx-decode.opc"
+#line 732 "rx-decode.opc"
                 int rsrc AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -5267,7 +5266,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rsrc = 0x%x\n", rsrc);
                   }
                 SYNTAX("jsr	%0");
-#line 720 "rx-decode.opc"
+#line 732 "rx-decode.opc"
                 ID(jsr); DR(rsrc);
               
               }
@@ -5290,7 +5289,7 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x4f:
               {
                 /** 0111 1111 0100 rsrc		bra.l	%0 */
-#line 713 "rx-decode.opc"
+#line 725 "rx-decode.opc"
                 int rsrc AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -5300,7 +5299,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rsrc = 0x%x\n", rsrc);
                   }
                 SYNTAX("bra.l	%0");
-#line 713 "rx-decode.opc"
+#line 725 "rx-decode.opc"
                 ID(branchrel); DR(rsrc);
               
               
@@ -5324,7 +5323,7 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x5f:
               {
                 /** 0111 1111 0101 rsrc		bsr.l	%0 */
-#line 729 "rx-decode.opc"
+#line 741 "rx-decode.opc"
                 int rsrc AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -5334,7 +5333,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rsrc = 0x%x\n", rsrc);
                   }
                 SYNTAX("bsr.l	%0");
-#line 729 "rx-decode.opc"
+#line 741 "rx-decode.opc"
                 ID(jsrrel); DR(rsrc);
               
               }
@@ -5344,7 +5343,7 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x82:
               {
                 /** 0111 1111 1000 00sz		suntil%s */
-#line 753 "rx-decode.opc"
+#line 765 "rx-decode.opc"
                 int sz AU = op[1] & 0x03;
                 if (trace)
                   {
@@ -5354,7 +5353,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  sz = 0x%x\n", sz);
                   }
                 SYNTAX("suntil%s");
-#line 753 "rx-decode.opc"
+#line 765 "rx-decode.opc"
                 ID(suntil); BWL(sz); F___ZC;
               
               }
@@ -5369,7 +5368,7 @@ rx_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("scmpu");
-#line 744 "rx-decode.opc"
+#line 756 "rx-decode.opc"
                 ID(scmpu); F___ZC;
               
               }
@@ -5379,7 +5378,7 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x86:
               {
                 /** 0111 1111 1000 01sz		swhile%s */
-#line 756 "rx-decode.opc"
+#line 768 "rx-decode.opc"
                 int sz AU = op[1] & 0x03;
                 if (trace)
                   {
@@ -5389,7 +5388,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  sz = 0x%x\n", sz);
                   }
                 SYNTAX("swhile%s");
-#line 756 "rx-decode.opc"
+#line 768 "rx-decode.opc"
                 ID(swhile); BWL(sz); F___ZC;
               
               }
@@ -5404,7 +5403,7 @@ rx_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("smovu");
-#line 747 "rx-decode.opc"
+#line 759 "rx-decode.opc"
                 ID(smovu);
               
               }
@@ -5414,7 +5413,7 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x8a:
               {
                 /** 0111 1111 1000 10sz		sstr%s */
-#line 762 "rx-decode.opc"
+#line 774 "rx-decode.opc"
                 int sz AU = op[1] & 0x03;
                 if (trace)
                   {
@@ -5424,7 +5423,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  sz = 0x%x\n", sz);
                   }
                 SYNTAX("sstr%s");
-#line 762 "rx-decode.opc"
+#line 774 "rx-decode.opc"
                 ID(sstr); BWL(sz);
               
               /*----------------------------------------------------------------------*/
@@ -5442,7 +5441,7 @@ rx_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("smovb");
-#line 750 "rx-decode.opc"
+#line 762 "rx-decode.opc"
                 ID(smovb);
               
               }
@@ -5452,7 +5451,7 @@ rx_decode_opcode (unsigned long pc AU,
           case 0x8e:
               {
                 /** 0111 1111 1000 11sz		rmpa%s */
-#line 768 "rx-decode.opc"
+#line 780 "rx-decode.opc"
                 int sz AU = op[1] & 0x03;
                 if (trace)
                   {
@@ -5462,7 +5461,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  sz = 0x%x\n", sz);
                   }
                 SYNTAX("rmpa%s");
-#line 768 "rx-decode.opc"
+#line 780 "rx-decode.opc"
                 ID(rmpa); BWL(sz); F_OS__;
               
               /*----------------------------------------------------------------------*/
@@ -5480,7 +5479,7 @@ rx_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("smovf");
-#line 759 "rx-decode.opc"
+#line 771 "rx-decode.opc"
                 ID(smovf);
               
               }
@@ -5495,7 +5494,7 @@ rx_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("satr");
-#line 810 "rx-decode.opc"
+#line 822 "rx-decode.opc"
                 ID(satr);
               
               /*----------------------------------------------------------------------*/
@@ -5513,7 +5512,7 @@ rx_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("rtfi");
-#line 937 "rx-decode.opc"
+#line 949 "rx-decode.opc"
                 ID(rtfi);
               
               }
@@ -5528,7 +5527,7 @@ rx_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("rte");
-#line 940 "rx-decode.opc"
+#line 952 "rx-decode.opc"
                 ID(rte);
               
               }
@@ -5543,7 +5542,7 @@ rx_decode_opcode (unsigned long pc AU,
                            op[0], op[1]);
                   }
                 SYNTAX("wait");
-#line 952 "rx-decode.opc"
+#line 964 "rx-decode.opc"
                 ID(wait);
               
               /*----------------------------------------------------------------------*/
@@ -5569,7 +5568,7 @@ rx_decode_opcode (unsigned long pc AU,
           case 0xaf:
               {
                 /** 0111 1111 1010 rdst			setpsw	%0 */
-#line 913 "rx-decode.opc"
+#line 925 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -5579,7 +5578,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("setpsw	%0");
-#line 913 "rx-decode.opc"
+#line 925 "rx-decode.opc"
                 ID(setpsw); DF(rdst);
               
               }
@@ -5602,7 +5601,7 @@ rx_decode_opcode (unsigned long pc AU,
           case 0xbf:
               {
                 /** 0111 1111 1011 rdst			clrpsw	%0 */
-#line 910 "rx-decode.opc"
+#line 922 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -5612,7 +5611,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("clrpsw	%0");
-#line 910 "rx-decode.opc"
+#line 922 "rx-decode.opc"
                 ID(clrpsw); DF(rdst);
               
               }
@@ -5628,17 +5627,17 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_38:
               {
                 /** 10sz 0dsp a dst b src	mov%s	%1, %0 */
-#line 296 "rx-decode.opc"
+#line 308 "rx-decode.opc"
                 int sz AU = (op[0] >> 4) & 0x03;
-#line 296 "rx-decode.opc"
+#line 308 "rx-decode.opc"
                 int dsp AU = op[0] & 0x07;
-#line 296 "rx-decode.opc"
+#line 308 "rx-decode.opc"
                 int a AU = (op[1] >> 7) & 0x01;
-#line 296 "rx-decode.opc"
+#line 308 "rx-decode.opc"
                 int dst AU = (op[1] >> 4) & 0x07;
-#line 296 "rx-decode.opc"
+#line 308 "rx-decode.opc"
                 int b AU = (op[1] >> 3) & 0x01;
-#line 296 "rx-decode.opc"
+#line 308 "rx-decode.opc"
                 int src AU = op[1] & 0x07;
                 if (trace)
                   {
@@ -5653,7 +5652,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  src = 0x%x\n", src);
                   }
                 SYNTAX("mov%s	%1, %0");
-#line 296 "rx-decode.opc"
+#line 308 "rx-decode.opc"
                 ID(mov); sBWL(sz); DIs(dst, dsp*4+a*2+b, sz); SR(src); F_____;
               
               }
@@ -5731,17 +5730,17 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_39:
               {
                 /** 10sz 1dsp a src b dst	mov%s	%1, %0 */
-#line 293 "rx-decode.opc"
+#line 305 "rx-decode.opc"
                 int sz AU = (op[0] >> 4) & 0x03;
-#line 293 "rx-decode.opc"
+#line 305 "rx-decode.opc"
                 int dsp AU = op[0] & 0x07;
-#line 293 "rx-decode.opc"
+#line 305 "rx-decode.opc"
                 int a AU = (op[1] >> 7) & 0x01;
-#line 293 "rx-decode.opc"
+#line 305 "rx-decode.opc"
                 int src AU = (op[1] >> 4) & 0x07;
-#line 293 "rx-decode.opc"
+#line 305 "rx-decode.opc"
                 int b AU = (op[1] >> 3) & 0x01;
-#line 293 "rx-decode.opc"
+#line 305 "rx-decode.opc"
                 int dst AU = op[1] & 0x07;
                 if (trace)
                   {
@@ -5756,7 +5755,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  dst = 0x%x\n", dst);
                   }
                 SYNTAX("mov%s	%1, %0");
-#line 293 "rx-decode.opc"
+#line 305 "rx-decode.opc"
                 ID(mov); sBWL(sz); DR(dst); SIs(src, dsp*4+a*2+b, sz); F_____;
               
               }
@@ -6122,17 +6121,17 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_40:
               {
                 /** 1011 w dsp a src b dst	movu%s	%1, %0 */
-#line 316 "rx-decode.opc"
+#line 328 "rx-decode.opc"
                 int w AU = (op[0] >> 3) & 0x01;
-#line 316 "rx-decode.opc"
+#line 328 "rx-decode.opc"
                 int dsp AU = op[0] & 0x07;
-#line 316 "rx-decode.opc"
+#line 328 "rx-decode.opc"
                 int a AU = (op[1] >> 7) & 0x01;
-#line 316 "rx-decode.opc"
+#line 328 "rx-decode.opc"
                 int src AU = (op[1] >> 4) & 0x07;
-#line 316 "rx-decode.opc"
+#line 328 "rx-decode.opc"
                 int b AU = (op[1] >> 3) & 0x01;
-#line 316 "rx-decode.opc"
+#line 328 "rx-decode.opc"
                 int dst AU = op[1] & 0x07;
                 if (trace)
                   {
@@ -6147,7 +6146,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  dst = 0x%x\n", dst);
                   }
                 SYNTAX("movu%s	%1, %0");
-#line 316 "rx-decode.opc"
+#line 328 "rx-decode.opc"
                 ID(mov); uBWL(w); DR(dst); SIs(src, dsp*4+a*2+b, w); F_____;
               
               }
@@ -6297,15 +6296,15 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_41:
               {
                 /** 11sz sd ss rsrc rdst	mov%s	%1, %0 */
-#line 274 "rx-decode.opc"
+#line 286 "rx-decode.opc"
                 int sz AU = (op[0] >> 4) & 0x03;
-#line 274 "rx-decode.opc"
+#line 286 "rx-decode.opc"
                 int sd AU = (op[0] >> 2) & 0x03;
-#line 274 "rx-decode.opc"
+#line 286 "rx-decode.opc"
                 int ss AU = op[0] & 0x03;
-#line 274 "rx-decode.opc"
+#line 286 "rx-decode.opc"
                 int rsrc AU = (op[1] >> 4) & 0x0f;
-#line 274 "rx-decode.opc"
+#line 286 "rx-decode.opc"
                 int rdst AU = op[1] & 0x0f;
                 if (trace)
                   {
@@ -6319,7 +6318,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  rdst = 0x%x\n", rdst);
                   }
                 SYNTAX("mov%s	%1, %0");
-#line 274 "rx-decode.opc"
+#line 286 "rx-decode.opc"
                 if (ss == 3 && sz == 2 && rsrc == 0 && rdst == 0)
                   {
                     ID(nop2);
@@ -6773,11 +6772,11 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_42:
               {
                 /** 1111 00sd rdst 0bit			bset	#%1, %0%S0 */
-#line 861 "rx-decode.opc"
+#line 873 "rx-decode.opc"
                 int sd AU = op[0] & 0x03;
-#line 861 "rx-decode.opc"
+#line 873 "rx-decode.opc"
                 int rdst AU = (op[1] >> 4) & 0x0f;
-#line 861 "rx-decode.opc"
+#line 873 "rx-decode.opc"
                 int bit AU = op[1] & 0x07;
                 if (trace)
                   {
@@ -6789,7 +6788,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  bit = 0x%x\n", bit);
                   }
                 SYNTAX("bset	#%1, %0%S0");
-#line 861 "rx-decode.opc"
+#line 873 "rx-decode.opc"
                 ID(bset); BWL(BSIZE); SC(bit); DD(sd, rdst, BSIZE); F_____;
               
               }
@@ -6798,11 +6797,11 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_43:
               {
                 /** 1111 00sd rdst 1bit			bclr	#%1, %0%S0 */
-#line 871 "rx-decode.opc"
+#line 883 "rx-decode.opc"
                 int sd AU = op[0] & 0x03;
-#line 871 "rx-decode.opc"
+#line 883 "rx-decode.opc"
                 int rdst AU = (op[1] >> 4) & 0x0f;
-#line 871 "rx-decode.opc"
+#line 883 "rx-decode.opc"
                 int bit AU = op[1] & 0x07;
                 if (trace)
                   {
@@ -6814,7 +6813,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  bit = 0x%x\n", bit);
                   }
                 SYNTAX("bclr	#%1, %0%S0");
-#line 871 "rx-decode.opc"
+#line 883 "rx-decode.opc"
                 ID(bclr); BWL(BSIZE); SC(bit); DD(sd, rdst, BSIZE); F_____;
               
               }
@@ -6866,11 +6865,11 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_44:
               {
                 /** 1111 01sd rdst 0bit			btst	#%2, %1%S1 */
-#line 881 "rx-decode.opc"
+#line 893 "rx-decode.opc"
                 int sd AU = op[0] & 0x03;
-#line 881 "rx-decode.opc"
+#line 893 "rx-decode.opc"
                 int rdst AU = (op[1] >> 4) & 0x0f;
-#line 881 "rx-decode.opc"
+#line 893 "rx-decode.opc"
                 int bit AU = op[1] & 0x07;
                 if (trace)
                   {
@@ -6882,7 +6881,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  bit = 0x%x\n", bit);
                   }
                 SYNTAX("btst	#%2, %1%S1");
-#line 881 "rx-decode.opc"
+#line 893 "rx-decode.opc"
                 ID(btst); BWL(BSIZE); S2C(bit); SD(sd, rdst, BSIZE); F___ZC;
               
               }
@@ -6891,11 +6890,11 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_45:
               {
                 /** 1111 01ss rsrc 10sz		push%s	%1 */
-#line 341 "rx-decode.opc"
+#line 353 "rx-decode.opc"
                 int ss AU = op[0] & 0x03;
-#line 341 "rx-decode.opc"
+#line 353 "rx-decode.opc"
                 int rsrc AU = (op[1] >> 4) & 0x0f;
-#line 341 "rx-decode.opc"
+#line 353 "rx-decode.opc"
                 int sz AU = op[1] & 0x03;
                 if (trace)
                   {
@@ -6907,7 +6906,7 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  sz = 0x%x\n", sz);
                   }
                 SYNTAX("push%s	%1");
-#line 341 "rx-decode.opc"
+#line 353 "rx-decode.opc"
                 ID(mov); BWL(sz); OP(0, RX_Operand_Predec, 0, 0); SD(ss, rsrc, sz); F_____;
               
               /*----------------------------------------------------------------------*/
@@ -6968,13 +6967,13 @@ rx_decode_opcode (unsigned long pc AU,
             op_semantics_46:
               {
                 /** 1111 10sd rdst im sz	mov%s	#%1, %0 */
-#line 265 "rx-decode.opc"
+#line 264 "rx-decode.opc"
                 int sd AU = op[0] & 0x03;
-#line 265 "rx-decode.opc"
+#line 264 "rx-decode.opc"
                 int rdst AU = (op[1] >> 4) & 0x0f;
-#line 265 "rx-decode.opc"
+#line 264 "rx-decode.opc"
                 int im AU = (op[1] >> 2) & 0x03;
-#line 265 "rx-decode.opc"
+#line 264 "rx-decode.opc"
                 int sz AU = op[1] & 0x03;
                 if (trace)
                   {
@@ -6987,8 +6986,21 @@ rx_decode_opcode (unsigned long pc AU,
                     printf ("  sz = 0x%x\n", sz);
                   }
                 SYNTAX("mov%s	#%1, %0");
-#line 265 "rx-decode.opc"
-                ID(mov); sBWL (sz); DD(sd, rdst, sz); SC(IMMex(im)); F_____;
+#line 264 "rx-decode.opc"
+                ID(mov); DD(sd, rdst, sz);
+                if ((im == 1 && sz == 0)
+                    || (im == 2 && sz == 1)
+                    || (im == 0 && sz == 2))
+                  {
+                    BWL (sz);
+                    SC(IMM(im));
+                  }
+                else
+                  {
+                    sBWL (sz);
+                    SC(IMMex(im));
+                  }
+                 F_____;
               
               }
             break;
@@ -7032,9 +7044,9 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x00:
                     {
                       /** 1111 1100 0000 0011 rsrc rdst	sbb	%1, %0 */
-#line 515 "rx-decode.opc"
+#line 527 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 515 "rx-decode.opc"
+#line 527 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -7045,7 +7057,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("sbb	%1, %0");
-#line 515 "rx-decode.opc"
+#line 527 "rx-decode.opc"
                       ID(sbb); SR (rsrc); DR(rdst); F_OSZC;
                     
                       /* FIXME: only supports .L */
@@ -7060,9 +7072,9 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x00:
                     {
                       /** 1111 1100 0000 0111 rsrc rdst	neg	%2, %0 */
-#line 446 "rx-decode.opc"
+#line 458 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 446 "rx-decode.opc"
+#line 458 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -7073,7 +7085,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("neg	%2, %0");
-#line 446 "rx-decode.opc"
+#line 458 "rx-decode.opc"
                       ID(sub); DR(rdst); SC(0); S2R(rsrc); F_OSZC;
                     
                     /*----------------------------------------------------------------------*/
@@ -7090,9 +7102,9 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x00:
                     {
                       /** 1111 1100 0000 1011 rsrc rdst	adc	%1, %0 */
-#line 455 "rx-decode.opc"
+#line 467 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 455 "rx-decode.opc"
+#line 467 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -7103,7 +7115,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("adc	%1, %0");
-#line 455 "rx-decode.opc"
+#line 467 "rx-decode.opc"
                       ID(adc); SR(rsrc); DR(rdst); F_OSZC;
                     
                     }
@@ -7117,9 +7129,9 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x00:
                     {
                       /** 1111 1100 0000 1111 rsrc rdst	abs	%1, %0 */
-#line 528 "rx-decode.opc"
+#line 540 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 528 "rx-decode.opc"
+#line 540 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -7130,7 +7142,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("abs	%1, %0");
-#line 528 "rx-decode.opc"
+#line 540 "rx-decode.opc"
                       ID(abs); DR(rdst); SR(rsrc); F_OSZ_;
                     
                     /*----------------------------------------------------------------------*/
@@ -7148,11 +7160,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_47:
                     {
                       /** 1111 1100 0001 00ss rsrc rdst	max	%1%S1, %0 */
-#line 537 "rx-decode.opc"
+#line 549 "rx-decode.opc"
                       int ss AU = op[1] & 0x03;
-#line 537 "rx-decode.opc"
+#line 549 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 537 "rx-decode.opc"
+#line 549 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -7164,7 +7176,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("max	%1%S1, %0");
-#line 537 "rx-decode.opc"
+#line 549 "rx-decode.opc"
                       if (ss == 3 && rsrc == 0 && rdst == 0)
                         {
                           ID(nop3);
@@ -7214,11 +7226,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_48:
                     {
                       /** 1111 1100 0001 01ss rsrc rdst	min	%1%S1, %0 */
-#line 557 "rx-decode.opc"
+#line 569 "rx-decode.opc"
                       int ss AU = op[1] & 0x03;
-#line 557 "rx-decode.opc"
+#line 569 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 557 "rx-decode.opc"
+#line 569 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -7230,7 +7242,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("min	%1%S1, %0");
-#line 557 "rx-decode.opc"
+#line 569 "rx-decode.opc"
                       ID(min); SP(ss, rsrc); DR(rdst);
                     
                     }
@@ -7272,11 +7284,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_49:
                     {
                       /** 1111 1100 0001 10ss rsrc rdst	emul	%1%S1, %0 */
-#line 587 "rx-decode.opc"
+#line 599 "rx-decode.opc"
                       int ss AU = op[1] & 0x03;
-#line 587 "rx-decode.opc"
+#line 599 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 587 "rx-decode.opc"
+#line 599 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -7288,7 +7300,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("emul	%1%S1, %0");
-#line 587 "rx-decode.opc"
+#line 599 "rx-decode.opc"
                       ID(emul); SP(ss, rsrc); DR(rdst);
                     
                     }
@@ -7330,11 +7342,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_50:
                     {
                       /** 1111 1100 0001 11ss rsrc rdst	emulu	%1%S1, %0 */
-#line 599 "rx-decode.opc"
+#line 611 "rx-decode.opc"
                       int ss AU = op[1] & 0x03;
-#line 599 "rx-decode.opc"
+#line 611 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 599 "rx-decode.opc"
+#line 611 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -7346,7 +7358,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("emulu	%1%S1, %0");
-#line 599 "rx-decode.opc"
+#line 611 "rx-decode.opc"
                       ID(emulu); SP(ss, rsrc); DR(rdst);
                     
                     }
@@ -7388,11 +7400,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_51:
                     {
                       /** 1111 1100 0010 00ss rsrc rdst	div	%1%S1, %0 */
-#line 611 "rx-decode.opc"
+#line 623 "rx-decode.opc"
                       int ss AU = op[1] & 0x03;
-#line 611 "rx-decode.opc"
+#line 623 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 611 "rx-decode.opc"
+#line 623 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -7404,7 +7416,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("div	%1%S1, %0");
-#line 611 "rx-decode.opc"
+#line 623 "rx-decode.opc"
                       ID(div); SP(ss, rsrc); DR(rdst); F_O___;
                     
                     }
@@ -7446,11 +7458,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_52:
                     {
                       /** 1111 1100 0010 01ss rsrc rdst	divu	%1%S1, %0 */
-#line 623 "rx-decode.opc"
+#line 635 "rx-decode.opc"
                       int ss AU = op[1] & 0x03;
-#line 623 "rx-decode.opc"
+#line 635 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 623 "rx-decode.opc"
+#line 635 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -7462,7 +7474,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("divu	%1%S1, %0");
-#line 623 "rx-decode.opc"
+#line 635 "rx-decode.opc"
                       ID(divu); SP(ss, rsrc); DR(rdst); F_O___;
                     
                     }
@@ -7504,11 +7516,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_53:
                     {
                       /** 1111 1100 0011 00ss rsrc rdst	tst	%1%S1, %2 */
-#line 434 "rx-decode.opc"
+#line 446 "rx-decode.opc"
                       int ss AU = op[1] & 0x03;
-#line 434 "rx-decode.opc"
+#line 446 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 434 "rx-decode.opc"
+#line 446 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -7520,7 +7532,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("tst	%1%S1, %2");
-#line 434 "rx-decode.opc"
+#line 446 "rx-decode.opc"
                       ID(and); SP(ss, rsrc); S2R(rdst); F__SZ_;
                     
                     }
@@ -7562,11 +7574,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_54:
                     {
                       /** 1111 1100 0011 01ss rsrc rdst	xor	%1%S1, %0 */
-#line 413 "rx-decode.opc"
+#line 425 "rx-decode.opc"
                       int ss AU = op[1] & 0x03;
-#line 413 "rx-decode.opc"
+#line 425 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 413 "rx-decode.opc"
+#line 425 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -7578,7 +7590,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("xor	%1%S1, %0");
-#line 413 "rx-decode.opc"
+#line 425 "rx-decode.opc"
                       ID(xor); SP(ss, rsrc); DR(rdst); F__SZ_;
                     
                     }
@@ -7619,9 +7631,9 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x00:
                     {
                       /** 1111 1100 0011 1011 rsrc rdst	not	%1, %0 */
-#line 425 "rx-decode.opc"
+#line 437 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 425 "rx-decode.opc"
+#line 437 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -7632,7 +7644,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("not	%1, %0");
-#line 425 "rx-decode.opc"
+#line 437 "rx-decode.opc"
                       ID(xor); DR(rdst); SR(rsrc); S2C(~0); F__SZ_;
                     
                     /*----------------------------------------------------------------------*/
@@ -7650,11 +7662,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_55:
                     {
                       /** 1111 1100 0100 00ss rsrc rdst	xchg	%1%S1, %0 */
-#line 347 "rx-decode.opc"
+#line 359 "rx-decode.opc"
                       int ss AU = op[1] & 0x03;
-#line 347 "rx-decode.opc"
+#line 359 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 347 "rx-decode.opc"
+#line 359 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -7666,7 +7678,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("xchg	%1%S1, %0");
-#line 347 "rx-decode.opc"
+#line 359 "rx-decode.opc"
                       ID(xchg); DR(rdst); SP(ss, rsrc);
                     
                     }
@@ -7708,11 +7720,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_56:
                     {
                       /** 1111 1100 0100 01sd rsrc rdst	itof	%1%S1, %0 */
-#line 852 "rx-decode.opc"
+#line 864 "rx-decode.opc"
                       int sd AU = op[1] & 0x03;
-#line 852 "rx-decode.opc"
+#line 864 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 852 "rx-decode.opc"
+#line 864 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -7724,7 +7736,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("itof	%1%S1, %0");
-#line 852 "rx-decode.opc"
+#line 864 "rx-decode.opc"
                       ID(itof); DR (rdst); SP(sd, rsrc); F__SZ_;
                     
                     }
@@ -7766,11 +7778,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_57:
                     {
                       /** 1111 1100 0110 00sd rdst rsrc	bset	%1, %0%S0 */
-#line 864 "rx-decode.opc"
+#line 876 "rx-decode.opc"
                       int sd AU = op[1] & 0x03;
-#line 864 "rx-decode.opc"
+#line 876 "rx-decode.opc"
                       int rdst AU = (op[2] >> 4) & 0x0f;
-#line 864 "rx-decode.opc"
+#line 876 "rx-decode.opc"
                       int rsrc AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -7782,7 +7794,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rsrc = 0x%x\n", rsrc);
                         }
                       SYNTAX("bset	%1, %0%S0");
-#line 864 "rx-decode.opc"
+#line 876 "rx-decode.opc"
                       ID(bset); BWL(BSIZE); SR(rsrc); DD(sd, rdst, BSIZE); F_____;
                     
                     }
@@ -7824,11 +7836,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_58:
                     {
                       /** 1111 1100 0110 01sd rdst rsrc	bclr	%1, %0%S0 */
-#line 874 "rx-decode.opc"
+#line 886 "rx-decode.opc"
                       int sd AU = op[1] & 0x03;
-#line 874 "rx-decode.opc"
+#line 886 "rx-decode.opc"
                       int rdst AU = (op[2] >> 4) & 0x0f;
-#line 874 "rx-decode.opc"
+#line 886 "rx-decode.opc"
                       int rsrc AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -7840,7 +7852,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rsrc = 0x%x\n", rsrc);
                         }
                       SYNTAX("bclr	%1, %0%S0");
-#line 874 "rx-decode.opc"
+#line 886 "rx-decode.opc"
                       ID(bclr); BWL(BSIZE); SR(rsrc); DD(sd, rdst, BSIZE); F_____;
                     
                     }
@@ -7882,11 +7894,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_59:
                     {
                       /** 1111 1100 0110 10sd rdst rsrc	btst	%2, %1%S1 */
-#line 884 "rx-decode.opc"
+#line 896 "rx-decode.opc"
                       int sd AU = op[1] & 0x03;
-#line 884 "rx-decode.opc"
+#line 896 "rx-decode.opc"
                       int rdst AU = (op[2] >> 4) & 0x0f;
-#line 884 "rx-decode.opc"
+#line 896 "rx-decode.opc"
                       int rsrc AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -7898,7 +7910,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rsrc = 0x%x\n", rsrc);
                         }
                       SYNTAX("btst	%2, %1%S1");
-#line 884 "rx-decode.opc"
+#line 896 "rx-decode.opc"
                       ID(btst); BWL(BSIZE); S2R(rsrc); SD(sd, rdst, BSIZE); F___ZC;
                     
                     }
@@ -7940,11 +7952,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_60:
                     {
                       /** 1111 1100 0110 11sd rdst rsrc	bnot	%1, %0%S0 */
-#line 894 "rx-decode.opc"
+#line 906 "rx-decode.opc"
                       int sd AU = op[1] & 0x03;
-#line 894 "rx-decode.opc"
+#line 906 "rx-decode.opc"
                       int rdst AU = (op[2] >> 4) & 0x0f;
-#line 894 "rx-decode.opc"
+#line 906 "rx-decode.opc"
                       int rsrc AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -7956,7 +7968,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rsrc = 0x%x\n", rsrc);
                         }
                       SYNTAX("bnot	%1, %0%S0");
-#line 894 "rx-decode.opc"
+#line 906 "rx-decode.opc"
                       ID(bnot); BWL(BSIZE); SR(rsrc); DD(sd, rdst, BSIZE);
                     
                     }
@@ -7998,11 +8010,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_61:
                     {
                       /** 1111 1100 1000 00sd rsrc rdst	fsub	%1%S1, %0 */
-#line 831 "rx-decode.opc"
+#line 843 "rx-decode.opc"
                       int sd AU = op[1] & 0x03;
-#line 831 "rx-decode.opc"
+#line 843 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 831 "rx-decode.opc"
+#line 843 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -8014,7 +8026,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("fsub	%1%S1, %0");
-#line 831 "rx-decode.opc"
+#line 843 "rx-decode.opc"
                       ID(fsub); DR(rdst); SD(sd, rsrc, LSIZE); F__SZ_;
                     
                     }
@@ -8056,11 +8068,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_62:
                     {
                       /** 1111 1100 1000 01sd rsrc rdst	fcmp	%1%S1, %0 */
-#line 825 "rx-decode.opc"
+#line 837 "rx-decode.opc"
                       int sd AU = op[1] & 0x03;
-#line 825 "rx-decode.opc"
+#line 837 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 825 "rx-decode.opc"
+#line 837 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -8072,7 +8084,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("fcmp	%1%S1, %0");
-#line 825 "rx-decode.opc"
+#line 837 "rx-decode.opc"
                       ID(fcmp); DR(rdst); SD(sd, rsrc, LSIZE); F_OSZ_;
                     
                     }
@@ -8114,11 +8126,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_63:
                     {
                       /** 1111 1100 1000 10sd rsrc rdst	fadd	%1%S1, %0 */
-#line 819 "rx-decode.opc"
+#line 831 "rx-decode.opc"
                       int sd AU = op[1] & 0x03;
-#line 819 "rx-decode.opc"
+#line 831 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 819 "rx-decode.opc"
+#line 831 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -8130,7 +8142,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("fadd	%1%S1, %0");
-#line 819 "rx-decode.opc"
+#line 831 "rx-decode.opc"
                       ID(fadd); DR(rdst); SD(sd, rsrc, LSIZE); F__SZ_;
                     
                     }
@@ -8172,11 +8184,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_64:
                     {
                       /** 1111 1100 1000 11sd rsrc rdst	fmul	%1%S1, %0 */
-#line 840 "rx-decode.opc"
+#line 852 "rx-decode.opc"
                       int sd AU = op[1] & 0x03;
-#line 840 "rx-decode.opc"
+#line 852 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 840 "rx-decode.opc"
+#line 852 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -8188,7 +8200,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("fmul	%1%S1, %0");
-#line 840 "rx-decode.opc"
+#line 852 "rx-decode.opc"
                       ID(fmul); DR(rdst); SD(sd, rsrc, LSIZE); F__SZ_;
                     
                     }
@@ -8230,11 +8242,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_65:
                     {
                       /** 1111 1100 1001 00sd rsrc rdst	fdiv	%1%S1, %0 */
-#line 846 "rx-decode.opc"
+#line 858 "rx-decode.opc"
                       int sd AU = op[1] & 0x03;
-#line 846 "rx-decode.opc"
+#line 858 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 846 "rx-decode.opc"
+#line 858 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -8246,7 +8258,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("fdiv	%1%S1, %0");
-#line 846 "rx-decode.opc"
+#line 858 "rx-decode.opc"
                       ID(fdiv); DR(rdst); SD(sd, rsrc, LSIZE); F__SZ_;
                     
                     }
@@ -8288,11 +8300,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_66:
                     {
                       /** 1111 1100 1001 01sd rsrc rdst	ftoi	%1%S1, %0 */
-#line 834 "rx-decode.opc"
+#line 846 "rx-decode.opc"
                       int sd AU = op[1] & 0x03;
-#line 834 "rx-decode.opc"
+#line 846 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 834 "rx-decode.opc"
+#line 846 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -8304,7 +8316,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("ftoi	%1%S1, %0");
-#line 834 "rx-decode.opc"
+#line 846 "rx-decode.opc"
                       ID(ftoi); DR(rdst); SD(sd, rsrc, LSIZE); F__SZ_;
                     
                     }
@@ -8346,11 +8358,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_67:
                     {
                       /** 1111 1100 1001 10sd rsrc rdst	round	%1%S1, %0 */
-#line 849 "rx-decode.opc"
+#line 861 "rx-decode.opc"
                       int sd AU = op[1] & 0x03;
-#line 849 "rx-decode.opc"
+#line 861 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 849 "rx-decode.opc"
+#line 861 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -8362,7 +8374,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("round	%1%S1, %0");
-#line 849 "rx-decode.opc"
+#line 861 "rx-decode.opc"
                       ID(round); DR(rdst); SD(sd, rsrc, LSIZE); F__SZ_;
                     
                     }
@@ -8404,13 +8416,13 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_68:
                     {
                       /** 1111 1100 1101 sz sd rdst cond	sc%1%s	%0 */
-#line 958 "rx-decode.opc"
+#line 970 "rx-decode.opc"
                       int sz AU = (op[1] >> 2) & 0x03;
-#line 958 "rx-decode.opc"
+#line 970 "rx-decode.opc"
                       int sd AU = op[1] & 0x03;
-#line 958 "rx-decode.opc"
+#line 970 "rx-decode.opc"
                       int rdst AU = (op[2] >> 4) & 0x0f;
-#line 958 "rx-decode.opc"
+#line 970 "rx-decode.opc"
                       int cond AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -8423,7 +8435,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  cond = 0x%x\n", cond);
                         }
                       SYNTAX("sc%1%s	%0");
-#line 958 "rx-decode.opc"
+#line 970 "rx-decode.opc"
                       ID(sccnd); BWL(sz); DD (sd, rdst, sz); Scc(cond);
                     
                     }
@@ -8551,13 +8563,13 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_69:
                     {
                       /** 1111 1100 111bit sd rdst cond	bm%2	#%1, %0%S0 */
-#line 901 "rx-decode.opc"
+#line 913 "rx-decode.opc"
                       int bit AU = (op[1] >> 2) & 0x07;
-#line 901 "rx-decode.opc"
+#line 913 "rx-decode.opc"
                       int sd AU = op[1] & 0x03;
-#line 901 "rx-decode.opc"
+#line 913 "rx-decode.opc"
                       int rdst AU = (op[2] >> 4) & 0x0f;
-#line 901 "rx-decode.opc"
+#line 913 "rx-decode.opc"
                       int cond AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -8570,7 +8582,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  cond = 0x%x\n", cond);
                         }
                       SYNTAX("bm%2	#%1, %0%S0");
-#line 901 "rx-decode.opc"
+#line 913 "rx-decode.opc"
                       ID(bmcc); BWL(BSIZE); S2cc(cond); SC(bit); DD(sd, rdst, BSIZE);
                     
                     }
@@ -8579,11 +8591,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_70:
                     {
                       /** 1111 1100 111bit sd rdst 1111	bnot	#%1, %0%S0 */
-#line 891 "rx-decode.opc"
+#line 903 "rx-decode.opc"
                       int bit AU = (op[1] >> 2) & 0x07;
-#line 891 "rx-decode.opc"
+#line 903 "rx-decode.opc"
                       int sd AU = op[1] & 0x03;
-#line 891 "rx-decode.opc"
+#line 903 "rx-decode.opc"
                       int rdst AU = (op[2] >> 4) & 0x0f;
                       if (trace)
                         {
@@ -8595,7 +8607,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("bnot	#%1, %0%S0");
-#line 891 "rx-decode.opc"
+#line 903 "rx-decode.opc"
                       ID(bnot); BWL(BSIZE); SC(bit); DD(sd, rdst, BSIZE);
                     
                     }
@@ -9422,9 +9434,9 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x00:
                     {
                       /** 1111 1101 0000 0000 srca srcb	mulhi	%1, %2 */
-#line 774 "rx-decode.opc"
+#line 786 "rx-decode.opc"
                       int srca AU = (op[2] >> 4) & 0x0f;
-#line 774 "rx-decode.opc"
+#line 786 "rx-decode.opc"
                       int srcb AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -9435,7 +9447,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  srcb = 0x%x\n", srcb);
                         }
                       SYNTAX("mulhi	%1, %2");
-#line 774 "rx-decode.opc"
+#line 786 "rx-decode.opc"
                       ID(mulhi); SR(srca); S2R(srcb); F_____;
                     
                     }
@@ -9449,9 +9461,9 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x00:
                     {
                       /** 1111 1101 0000 0001 srca srcb	mullo	%1, %2 */
-#line 777 "rx-decode.opc"
+#line 789 "rx-decode.opc"
                       int srca AU = (op[2] >> 4) & 0x0f;
-#line 777 "rx-decode.opc"
+#line 789 "rx-decode.opc"
                       int srcb AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -9462,7 +9474,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  srcb = 0x%x\n", srcb);
                         }
                       SYNTAX("mullo	%1, %2");
-#line 777 "rx-decode.opc"
+#line 789 "rx-decode.opc"
                       ID(mullo); SR(srca); S2R(srcb); F_____;
                     
                     }
@@ -9476,9 +9488,9 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x00:
                     {
                       /** 1111 1101 0000 0100 srca srcb	machi	%1, %2 */
-#line 780 "rx-decode.opc"
+#line 792 "rx-decode.opc"
                       int srca AU = (op[2] >> 4) & 0x0f;
-#line 780 "rx-decode.opc"
+#line 792 "rx-decode.opc"
                       int srcb AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -9489,7 +9501,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  srcb = 0x%x\n", srcb);
                         }
                       SYNTAX("machi	%1, %2");
-#line 780 "rx-decode.opc"
+#line 792 "rx-decode.opc"
                       ID(machi); SR(srca); S2R(srcb); F_____;
                     
                     }
@@ -9503,9 +9515,9 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x00:
                     {
                       /** 1111 1101 0000 0101 srca srcb	maclo	%1, %2 */
-#line 783 "rx-decode.opc"
+#line 795 "rx-decode.opc"
                       int srca AU = (op[2] >> 4) & 0x0f;
-#line 783 "rx-decode.opc"
+#line 795 "rx-decode.opc"
                       int srcb AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -9516,7 +9528,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  srcb = 0x%x\n", srcb);
                         }
                       SYNTAX("maclo	%1, %2");
-#line 783 "rx-decode.opc"
+#line 795 "rx-decode.opc"
                       ID(maclo); SR(srca); S2R(srcb); F_____;
                     
                     }
@@ -9530,7 +9542,7 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x00:
                     {
                       /** 1111 1101 0001 0111 0000 rsrc	mvtachi	%1 */
-#line 786 "rx-decode.opc"
+#line 798 "rx-decode.opc"
                       int rsrc AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -9540,7 +9552,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rsrc = 0x%x\n", rsrc);
                         }
                       SYNTAX("mvtachi	%1");
-#line 786 "rx-decode.opc"
+#line 798 "rx-decode.opc"
                       ID(mvtachi); SR(rsrc); F_____;
                     
                     }
@@ -9548,7 +9560,7 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x10:
                     {
                       /** 1111 1101 0001 0111 0001 rsrc	mvtaclo	%1 */
-#line 789 "rx-decode.opc"
+#line 801 "rx-decode.opc"
                       int rsrc AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -9558,7 +9570,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rsrc = 0x%x\n", rsrc);
                         }
                       SYNTAX("mvtaclo	%1");
-#line 789 "rx-decode.opc"
+#line 801 "rx-decode.opc"
                       ID(mvtaclo); SR(rsrc); F_____;
                     
                     }
@@ -9573,7 +9585,7 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x00:
                     {
                       /** 1111 1101 0001 1000 000i 0000	racw	#%1 */
-#line 801 "rx-decode.opc"
+#line 813 "rx-decode.opc"
                       int i AU = (op[2] >> 4) & 0x01;
                       if (trace)
                         {
@@ -9583,7 +9595,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  i = 0x%x\n", i);
                         }
                       SYNTAX("racw	#%1");
-#line 801 "rx-decode.opc"
+#line 813 "rx-decode.opc"
                       ID(racw); SC(i+1); F_____;
                     
                     /*----------------------------------------------------------------------*/
@@ -9601,7 +9613,7 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x00:
                     {
                       /** 1111 1101 0001 1111 0000 rdst	mvfachi	%0 */
-#line 792 "rx-decode.opc"
+#line 804 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -9611,7 +9623,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("mvfachi	%0");
-#line 792 "rx-decode.opc"
+#line 804 "rx-decode.opc"
                       ID(mvfachi); DR(rdst); F_____;
                     
                     }
@@ -9619,7 +9631,7 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x10:
                     {
                       /** 1111 1101 0001 1111 0001 rdst	mvfaclo	%0 */
-#line 798 "rx-decode.opc"
+#line 810 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -9629,7 +9641,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("mvfaclo	%0");
-#line 798 "rx-decode.opc"
+#line 810 "rx-decode.opc"
                       ID(mvfaclo); DR(rdst); F_____;
                     
                     }
@@ -9637,7 +9649,7 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x20:
                     {
                       /** 1111 1101 0001 1111 0010 rdst	mvfacmi	%0 */
-#line 795 "rx-decode.opc"
+#line 807 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -9647,7 +9659,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("mvfacmi	%0");
-#line 795 "rx-decode.opc"
+#line 807 "rx-decode.opc"
                       ID(mvfacmi); DR(rdst); F_____;
                     
                     }
@@ -9663,13 +9675,13 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_71:
                     {
                       /** 1111 1101 0010 0p sz rdst rsrc	mov%s	%1, %0 */
-#line 308 "rx-decode.opc"
+#line 320 "rx-decode.opc"
                       int p AU = (op[1] >> 2) & 0x01;
-#line 308 "rx-decode.opc"
+#line 320 "rx-decode.opc"
                       int sz AU = op[1] & 0x03;
-#line 308 "rx-decode.opc"
+#line 320 "rx-decode.opc"
                       int rdst AU = (op[2] >> 4) & 0x0f;
-#line 308 "rx-decode.opc"
+#line 320 "rx-decode.opc"
                       int rsrc AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -9682,7 +9694,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rsrc = 0x%x\n", rsrc);
                         }
                       SYNTAX("mov%s	%1, %0");
-#line 308 "rx-decode.opc"
+#line 320 "rx-decode.opc"
                       ID(mov); sBWL (sz); SR(rsrc); F_____;
                       OP(0, p ? RX_Operand_Predec : RX_Operand_Postinc, rdst, 0);
                     
@@ -9743,13 +9755,13 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_72:
                     {
                       /** 1111 1101 0010 1p sz rsrc rdst	mov%s	%1, %0 */
-#line 312 "rx-decode.opc"
+#line 324 "rx-decode.opc"
                       int p AU = (op[1] >> 2) & 0x01;
-#line 312 "rx-decode.opc"
+#line 324 "rx-decode.opc"
                       int sz AU = op[1] & 0x03;
-#line 312 "rx-decode.opc"
+#line 324 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 312 "rx-decode.opc"
+#line 324 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -9762,7 +9774,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("mov%s	%1, %0");
-#line 312 "rx-decode.opc"
+#line 324 "rx-decode.opc"
                       ID(mov); sBWL (sz); DR(rdst); F_____;
                       OP(1, p ? RX_Operand_Predec : RX_Operand_Postinc, rsrc, 0);
                     
@@ -9823,13 +9835,13 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_73:
                     {
                       /** 1111 1101 0011 1p sz rsrc rdst	movu%s	%1, %0 */
-#line 322 "rx-decode.opc"
+#line 334 "rx-decode.opc"
                       int p AU = (op[1] >> 2) & 0x01;
-#line 322 "rx-decode.opc"
+#line 334 "rx-decode.opc"
                       int sz AU = op[1] & 0x03;
-#line 322 "rx-decode.opc"
+#line 334 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 322 "rx-decode.opc"
+#line 334 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -9842,7 +9854,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("movu%s	%1, %0");
-#line 322 "rx-decode.opc"
+#line 334 "rx-decode.opc"
                       ID(mov); uBWL (sz); DR(rdst); F_____;
                        OP(1, p ? RX_Operand_Predec : RX_Operand_Postinc, rsrc, 0);
                     
@@ -9905,9 +9917,9 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x00:
                     {
                       /** 1111 1101 0110 0000 rsrc rdst	shlr	%2, %0 */
-#line 655 "rx-decode.opc"
+#line 667 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 655 "rx-decode.opc"
+#line 667 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -9918,7 +9930,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("shlr	%2, %0");
-#line 655 "rx-decode.opc"
+#line 667 "rx-decode.opc"
                       ID(shlr); S2R(rsrc); SR(rdst); DR(rdst); F__SZC;
                     
                     }
@@ -9932,9 +9944,9 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x00:
                     {
                       /** 1111 1101 0110 0001 rsrc rdst	shar	%2, %0 */
-#line 645 "rx-decode.opc"
+#line 657 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 645 "rx-decode.opc"
+#line 657 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -9945,7 +9957,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("shar	%2, %0");
-#line 645 "rx-decode.opc"
+#line 657 "rx-decode.opc"
                       ID(shar); S2R(rsrc); SR(rdst); DR(rdst); F_0SZC;
                     
                     }
@@ -9959,9 +9971,9 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x00:
                     {
                       /** 1111 1101 0110 0010 rsrc rdst	shll	%2, %0 */
-#line 635 "rx-decode.opc"
+#line 647 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 635 "rx-decode.opc"
+#line 647 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -9972,7 +9984,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("shll	%2, %0");
-#line 635 "rx-decode.opc"
+#line 647 "rx-decode.opc"
                       ID(shll); S2R(rsrc); SR(rdst); DR(rdst); F_OSZC;
                     
                     }
@@ -9986,9 +9998,9 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x00:
                     {
                       /** 1111 1101 0110 0100 rsrc rdst	rotr	%1, %0 */
-#line 679 "rx-decode.opc"
+#line 691 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 679 "rx-decode.opc"
+#line 691 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -9999,7 +10011,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("rotr	%1, %0");
-#line 679 "rx-decode.opc"
+#line 691 "rx-decode.opc"
                       ID(rotr); SR(rsrc); DR(rdst); F__SZC;
                     
                     }
@@ -10013,9 +10025,9 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x00:
                     {
                       /** 1111 1101 0110 0101 rsrc rdst	revw	%1, %0 */
-#line 682 "rx-decode.opc"
+#line 694 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 682 "rx-decode.opc"
+#line 694 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10026,7 +10038,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("revw	%1, %0");
-#line 682 "rx-decode.opc"
+#line 694 "rx-decode.opc"
                       ID(revw); SR(rsrc); DR(rdst);
                     
                     }
@@ -10040,9 +10052,9 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x00:
                     {
                       /** 1111 1101 0110 0110 rsrc rdst	rotl	%1, %0 */
-#line 673 "rx-decode.opc"
+#line 685 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 673 "rx-decode.opc"
+#line 685 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10053,7 +10065,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("rotl	%1, %0");
-#line 673 "rx-decode.opc"
+#line 685 "rx-decode.opc"
                       ID(rotl); SR(rsrc); DR(rdst); F__SZC;
                     
                     }
@@ -10067,9 +10079,9 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x00:
                     {
                       /** 1111 1101 0110 0111 rsrc rdst	revl	%1, %0 */
-#line 685 "rx-decode.opc"
+#line 697 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 685 "rx-decode.opc"
+#line 697 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10080,7 +10092,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("revl	%1, %0");
-#line 685 "rx-decode.opc"
+#line 697 "rx-decode.opc"
                       ID(revl); SR(rsrc); DR(rdst);
                     
                     /*----------------------------------------------------------------------*/
@@ -10098,11 +10110,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_74:
                     {
                       /** 1111 1101 0110 100c rsrc rdst	mvtc	%1, %0 */
-#line 928 "rx-decode.opc"
+#line 940 "rx-decode.opc"
                       int c AU = op[1] & 0x01;
-#line 928 "rx-decode.opc"
+#line 940 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 928 "rx-decode.opc"
+#line 940 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10114,7 +10126,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("mvtc	%1, %0");
-#line 928 "rx-decode.opc"
+#line 940 "rx-decode.opc"
                       ID(mov); SR(rsrc); DR(c*16+rdst + 16);
                     
                     }
@@ -10138,11 +10150,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_75:
                     {
                       /** 1111 1101 0110 101s rsrc rdst	mvfc	%1, %0 */
-#line 931 "rx-decode.opc"
+#line 943 "rx-decode.opc"
                       int s AU = op[1] & 0x01;
-#line 931 "rx-decode.opc"
+#line 943 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 931 "rx-decode.opc"
+#line 943 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10154,7 +10166,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("mvfc	%1, %0");
-#line 931 "rx-decode.opc"
+#line 943 "rx-decode.opc"
                       ID(mov); SR((s*16+rsrc) + 16); DR(rdst);
                     
                     /*----------------------------------------------------------------------*/
@@ -10181,11 +10193,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_76:
                     {
                       /** 1111 1101 0110 110i mmmm rdst	rotr	#%1, %0 */
-#line 676 "rx-decode.opc"
+#line 688 "rx-decode.opc"
                       int i AU = op[1] & 0x01;
-#line 676 "rx-decode.opc"
+#line 688 "rx-decode.opc"
                       int mmmm AU = (op[2] >> 4) & 0x0f;
-#line 676 "rx-decode.opc"
+#line 688 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10197,7 +10209,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("rotr	#%1, %0");
-#line 676 "rx-decode.opc"
+#line 688 "rx-decode.opc"
                       ID(rotr); SC(i*16+mmmm); DR(rdst); F__SZC;
                     
                     }
@@ -10221,11 +10233,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_77:
                     {
                       /** 1111 1101 0110 111i mmmm rdst	rotl	#%1, %0 */
-#line 670 "rx-decode.opc"
+#line 682 "rx-decode.opc"
                       int i AU = op[1] & 0x01;
-#line 670 "rx-decode.opc"
+#line 682 "rx-decode.opc"
                       int mmmm AU = (op[2] >> 4) & 0x0f;
-#line 670 "rx-decode.opc"
+#line 682 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10237,7 +10249,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("rotl	#%1, %0");
-#line 670 "rx-decode.opc"
+#line 682 "rx-decode.opc"
                       ID(rotl); SC(i*16+mmmm); DR(rdst); F__SZC;
                     
                     }
@@ -10261,9 +10273,9 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_78:
                     {
                       /** 1111 1101 0111 im00 0010rdst	adc	#%1, %0 */
-#line 452 "rx-decode.opc"
+#line 464 "rx-decode.opc"
                       int im AU = (op[1] >> 2) & 0x03;
-#line 452 "rx-decode.opc"
+#line 464 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10274,7 +10286,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("adc	#%1, %0");
-#line 452 "rx-decode.opc"
+#line 464 "rx-decode.opc"
                       ID(adc); SC(IMMex(im)); DR(rdst); F_OSZC;
                     
                     }
@@ -10283,9 +10295,9 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_79:
                     {
                       /** 1111 1101 0111 im00 0100rdst	max	#%1, %0 */
-#line 534 "rx-decode.opc"
+#line 546 "rx-decode.opc"
                       int im AU = (op[1] >> 2) & 0x03;
-#line 534 "rx-decode.opc"
+#line 546 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10296,7 +10308,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("max	#%1, %0");
-#line 534 "rx-decode.opc"
+#line 546 "rx-decode.opc"
                       ID(max); DR(rdst); SC(IMMex(im));
                     
                     }
@@ -10305,9 +10317,9 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_80:
                     {
                       /** 1111 1101 0111 im00 0101rdst	min	#%1, %0 */
-#line 554 "rx-decode.opc"
+#line 566 "rx-decode.opc"
                       int im AU = (op[1] >> 2) & 0x03;
-#line 554 "rx-decode.opc"
+#line 566 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10318,7 +10330,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("min	#%1, %0");
-#line 554 "rx-decode.opc"
+#line 566 "rx-decode.opc"
                       ID(min); DR(rdst); SC(IMMex(im));
                     
                     }
@@ -10327,9 +10339,9 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_81:
                     {
                       /** 1111 1101 0111 im00 0110rdst	emul	#%1, %0 */
-#line 584 "rx-decode.opc"
+#line 596 "rx-decode.opc"
                       int im AU = (op[1] >> 2) & 0x03;
-#line 584 "rx-decode.opc"
+#line 596 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10340,7 +10352,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("emul	#%1, %0");
-#line 584 "rx-decode.opc"
+#line 596 "rx-decode.opc"
                       ID(emul); DR(rdst); SC(IMMex(im));
                     
                     }
@@ -10349,9 +10361,9 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_82:
                     {
                       /** 1111 1101 0111 im00 0111rdst	emulu	#%1, %0 */
-#line 596 "rx-decode.opc"
+#line 608 "rx-decode.opc"
                       int im AU = (op[1] >> 2) & 0x03;
-#line 596 "rx-decode.opc"
+#line 608 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10362,7 +10374,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("emulu	#%1, %0");
-#line 596 "rx-decode.opc"
+#line 608 "rx-decode.opc"
                       ID(emulu); DR(rdst); SC(IMMex(im));
                     
                     }
@@ -10371,9 +10383,9 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_83:
                     {
                       /** 1111 1101 0111 im00 1000rdst	div	#%1, %0 */
-#line 608 "rx-decode.opc"
+#line 620 "rx-decode.opc"
                       int im AU = (op[1] >> 2) & 0x03;
-#line 608 "rx-decode.opc"
+#line 620 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10384,7 +10396,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("div	#%1, %0");
-#line 608 "rx-decode.opc"
+#line 620 "rx-decode.opc"
                       ID(div); DR(rdst); SC(IMMex(im)); F_O___;
                     
                     }
@@ -10393,9 +10405,9 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_84:
                     {
                       /** 1111 1101 0111 im00 1001rdst	divu	#%1, %0 */
-#line 620 "rx-decode.opc"
+#line 632 "rx-decode.opc"
                       int im AU = (op[1] >> 2) & 0x03;
-#line 620 "rx-decode.opc"
+#line 632 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10406,7 +10418,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("divu	#%1, %0");
-#line 620 "rx-decode.opc"
+#line 632 "rx-decode.opc"
                       ID(divu); DR(rdst); SC(IMMex(im)); F_O___;
                     
                     }
@@ -10415,9 +10427,9 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_85:
                     {
                       /** 1111 1101 0111 im00 1100rdst	tst	#%1, %2 */
-#line 431 "rx-decode.opc"
+#line 443 "rx-decode.opc"
                       int im AU = (op[1] >> 2) & 0x03;
-#line 431 "rx-decode.opc"
+#line 443 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10428,7 +10440,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("tst	#%1, %2");
-#line 431 "rx-decode.opc"
+#line 443 "rx-decode.opc"
                       ID(and); SC(IMMex(im)); S2R(rdst); F__SZ_;
                     
                     }
@@ -10437,9 +10449,9 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_86:
                     {
                       /** 1111 1101 0111 im00 1101rdst	xor	#%1, %0 */
-#line 410 "rx-decode.opc"
+#line 422 "rx-decode.opc"
                       int im AU = (op[1] >> 2) & 0x03;
-#line 410 "rx-decode.opc"
+#line 422 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10450,7 +10462,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("xor	#%1, %0");
-#line 410 "rx-decode.opc"
+#line 422 "rx-decode.opc"
                       ID(xor); SC(IMMex(im)); DR(rdst); F__SZ_;
                     
                     }
@@ -10459,9 +10471,9 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_87:
                     {
                       /** 1111 1101 0111 im00 1110rdst	stz	#%1, %0 */
-#line 356 "rx-decode.opc"
+#line 368 "rx-decode.opc"
                       int im AU = (op[1] >> 2) & 0x03;
-#line 356 "rx-decode.opc"
+#line 368 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10472,7 +10484,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("stz	#%1, %0");
-#line 356 "rx-decode.opc"
+#line 368 "rx-decode.opc"
                       ID(stcc); SC(IMMex(im)); DR(rdst); S2cc(RXC_z);
                     
                     }
@@ -10481,9 +10493,9 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_88:
                     {
                       /** 1111 1101 0111 im00 1111rdst	stnz	#%1, %0 */
-#line 359 "rx-decode.opc"
+#line 371 "rx-decode.opc"
                       int im AU = (op[1] >> 2) & 0x03;
-#line 359 "rx-decode.opc"
+#line 371 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10494,7 +10506,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("stnz	#%1, %0");
-#line 359 "rx-decode.opc"
+#line 371 "rx-decode.opc"
                       ID(stcc); SC(IMMex(im)); DR(rdst); S2cc(RXC_nz);
                     
                     /*----------------------------------------------------------------------*/
@@ -10512,7 +10524,7 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x00:
                     {
                       /** 1111 1101 0111 0010 0000 rdst	fsub	#%1, %0 */
-#line 828 "rx-decode.opc"
+#line 840 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10522,7 +10534,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("fsub	#%1, %0");
-#line 828 "rx-decode.opc"
+#line 840 "rx-decode.opc"
                       ID(fsub); DR(rdst); SC(IMM(0)); F__SZ_;
                     
                     }
@@ -10530,7 +10542,7 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x10:
                     {
                       /** 1111 1101 0111 0010 0001 rdst	fcmp	#%1, %0 */
-#line 822 "rx-decode.opc"
+#line 834 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10540,7 +10552,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("fcmp	#%1, %0");
-#line 822 "rx-decode.opc"
+#line 834 "rx-decode.opc"
                       ID(fcmp); DR(rdst); SC(IMM(0)); F_OSZ_;
                     
                     }
@@ -10548,7 +10560,7 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x20:
                     {
                       /** 1111 1101 0111 0010 0010 rdst	fadd	#%1, %0 */
-#line 816 "rx-decode.opc"
+#line 828 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10558,7 +10570,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("fadd	#%1, %0");
-#line 816 "rx-decode.opc"
+#line 828 "rx-decode.opc"
                       ID(fadd); DR(rdst); SC(IMM(0)); F__SZ_;
                     
                     }
@@ -10566,7 +10578,7 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x30:
                     {
                       /** 1111 1101 0111 0010 0011 rdst	fmul	#%1, %0 */
-#line 837 "rx-decode.opc"
+#line 849 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10576,7 +10588,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("fmul	#%1, %0");
-#line 837 "rx-decode.opc"
+#line 849 "rx-decode.opc"
                       ID(fmul); DR(rdst); SC(IMM(0)); F__SZ_;
                     
                     }
@@ -10584,7 +10596,7 @@ rx_decode_opcode (unsigned long pc AU,
                 case 0x40:
                     {
                       /** 1111 1101 0111 0010 0100 rdst	fdiv	#%1, %0 */
-#line 843 "rx-decode.opc"
+#line 855 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10594,7 +10606,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("fdiv	#%1, %0");
-#line 843 "rx-decode.opc"
+#line 855 "rx-decode.opc"
                       ID(fdiv); DR(rdst); SC(IMM(0)); F__SZ_;
                     
                     }
@@ -10610,9 +10622,9 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_89:
                     {
                       /** 1111 1101 0111 im11 000crdst	mvtc	#%1, %0 */
-#line 925 "rx-decode.opc"
+#line 937 "rx-decode.opc"
                       int im AU = (op[1] >> 2) & 0x03;
-#line 925 "rx-decode.opc"
+#line 937 "rx-decode.opc"
                       int crdst AU = op[2] & 0x1f;
                       if (trace)
                         {
@@ -10623,7 +10635,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  crdst = 0x%x\n", crdst);
                         }
                       SYNTAX("mvtc	#%1, %0");
-#line 925 "rx-decode.opc"
+#line 937 "rx-decode.opc"
                       ID(mov); SC(IMMex(im)); DR(crdst + 16);
                     
                     }
@@ -10789,11 +10801,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_90:
                     {
                       /** 1111 1101 100immmm rsrc rdst	shlr	#%2, %1, %0 */
-#line 658 "rx-decode.opc"
+#line 670 "rx-decode.opc"
                       int immmm AU = op[1] & 0x1f;
-#line 658 "rx-decode.opc"
+#line 670 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 658 "rx-decode.opc"
+#line 670 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -10805,7 +10817,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("shlr	#%2, %1, %0");
-#line 658 "rx-decode.opc"
+#line 670 "rx-decode.opc"
                       ID(shlr); S2C(immmm); SR(rsrc); DR(rdst); F__SZC;
                     
                     /*----------------------------------------------------------------------*/
@@ -11102,11 +11114,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_91:
                     {
                       /** 1111 1101 101immmm rsrc rdst	shar	#%2, %1, %0 */
-#line 648 "rx-decode.opc"
+#line 660 "rx-decode.opc"
                       int immmm AU = op[1] & 0x1f;
-#line 648 "rx-decode.opc"
+#line 660 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 648 "rx-decode.opc"
+#line 660 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -11118,7 +11130,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("shar	#%2, %1, %0");
-#line 648 "rx-decode.opc"
+#line 660 "rx-decode.opc"
                       ID(shar); S2C(immmm); SR(rsrc); DR(rdst); F_0SZC;
                     
                     
@@ -11413,11 +11425,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_92:
                     {
                       /** 1111 1101 110immmm rsrc rdst	shll	#%2, %1, %0 */
-#line 638 "rx-decode.opc"
+#line 650 "rx-decode.opc"
                       int immmm AU = op[1] & 0x1f;
-#line 638 "rx-decode.opc"
+#line 650 "rx-decode.opc"
                       int rsrc AU = (op[2] >> 4) & 0x0f;
-#line 638 "rx-decode.opc"
+#line 650 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -11429,7 +11441,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("shll	#%2, %1, %0");
-#line 638 "rx-decode.opc"
+#line 650 "rx-decode.opc"
                       ID(shll); S2C(immmm); SR(rsrc); DR(rdst); F_OSZC;
                     
                     
@@ -11738,11 +11750,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_93:
                     {
                       /** 1111 1101 111 bittt cond rdst	bm%2	#%1, %0%S0 */
-#line 904 "rx-decode.opc"
+#line 916 "rx-decode.opc"
                       int bittt AU = op[1] & 0x1f;
-#line 904 "rx-decode.opc"
+#line 916 "rx-decode.opc"
                       int cond AU = (op[2] >> 4) & 0x0f;
-#line 904 "rx-decode.opc"
+#line 916 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -11754,7 +11766,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("bm%2	#%1, %0%S0");
-#line 904 "rx-decode.opc"
+#line 916 "rx-decode.opc"
                       ID(bmcc); BWL(LSIZE); S2cc(cond); SC(bittt); DR(rdst);
                     
                     /*----------------------------------------------------------------------*/
@@ -11766,9 +11778,9 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_94:
                     {
                       /** 1111 1101 111bittt 1111 rdst	bnot	#%1, %0 */
-#line 897 "rx-decode.opc"
+#line 909 "rx-decode.opc"
                       int bittt AU = op[1] & 0x1f;
-#line 897 "rx-decode.opc"
+#line 909 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -11779,7 +11791,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("bnot	#%1, %0");
-#line 897 "rx-decode.opc"
+#line 909 "rx-decode.opc"
                       ID(bnot); BWL(LSIZE); SC(bittt); DR(rdst);
                     
                     
@@ -12608,13 +12620,13 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_95:
                     {
                       /** 1111 1110 00sz isrc bsrc rdst	mov%s	%0, [%1, %2] */
-#line 302 "rx-decode.opc"
+#line 314 "rx-decode.opc"
                       int sz AU = (op[1] >> 4) & 0x03;
-#line 302 "rx-decode.opc"
+#line 314 "rx-decode.opc"
                       int isrc AU = op[1] & 0x0f;
-#line 302 "rx-decode.opc"
+#line 314 "rx-decode.opc"
                       int bsrc AU = (op[2] >> 4) & 0x0f;
-#line 302 "rx-decode.opc"
+#line 314 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -12627,7 +12639,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("mov%s	%0, [%1, %2]");
-#line 302 "rx-decode.opc"
+#line 314 "rx-decode.opc"
                       ID(movbir); sBWL(sz); DR(rdst); SRR(isrc); S2R(bsrc); F_____;
                     
                     }
@@ -13065,13 +13077,13 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_96:
                     {
                       /** 1111 1110 01sz isrc bsrc rdst	mov%s	[%1, %2], %0 */
-#line 299 "rx-decode.opc"
+#line 311 "rx-decode.opc"
                       int sz AU = (op[1] >> 4) & 0x03;
-#line 299 "rx-decode.opc"
+#line 311 "rx-decode.opc"
                       int isrc AU = op[1] & 0x0f;
-#line 299 "rx-decode.opc"
+#line 311 "rx-decode.opc"
                       int bsrc AU = (op[2] >> 4) & 0x0f;
-#line 299 "rx-decode.opc"
+#line 311 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -13084,7 +13096,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("mov%s	[%1, %2], %0");
-#line 299 "rx-decode.opc"
+#line 311 "rx-decode.opc"
                       ID(movbi); sBWL(sz); DR(rdst); SRR(isrc); S2R(bsrc); F_____;
                     
                     }
@@ -13522,13 +13534,13 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_97:
                     {
                       /** 1111 1110 11sz isrc bsrc rdst	movu%s	[%1, %2], %0 */
-#line 305 "rx-decode.opc"
+#line 317 "rx-decode.opc"
                       int sz AU = (op[1] >> 4) & 0x03;
-#line 305 "rx-decode.opc"
+#line 317 "rx-decode.opc"
                       int isrc AU = op[1] & 0x0f;
-#line 305 "rx-decode.opc"
+#line 317 "rx-decode.opc"
                       int bsrc AU = (op[2] >> 4) & 0x0f;
-#line 305 "rx-decode.opc"
+#line 317 "rx-decode.opc"
                       int rdst AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -13541,7 +13553,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  rdst = 0x%x\n", rdst);
                         }
                       SYNTAX("movu%s	[%1, %2], %0");
-#line 305 "rx-decode.opc"
+#line 317 "rx-decode.opc"
                       ID(movbi); uBWL(sz); DR(rdst); SRR(isrc); S2R(bsrc); F_____;
                     
                     }
@@ -13986,11 +13998,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_98:
                     {
                       /** 1111 1111 0000 rdst srca srcb	sub	%2, %1, %0 */
-#line 509 "rx-decode.opc"
+#line 521 "rx-decode.opc"
                       int rdst AU = op[1] & 0x0f;
-#line 509 "rx-decode.opc"
+#line 521 "rx-decode.opc"
                       int srca AU = (op[2] >> 4) & 0x0f;
-#line 509 "rx-decode.opc"
+#line 521 "rx-decode.opc"
                       int srcb AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -14002,7 +14014,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  srcb = 0x%x\n", srcb);
                         }
                       SYNTAX("sub	%2, %1, %0");
-#line 509 "rx-decode.opc"
+#line 521 "rx-decode.opc"
                       ID(sub); DR(rdst); SR(srcb); S2R(srca); F_OSZC;
                     
                     /*----------------------------------------------------------------------*/
@@ -14155,11 +14167,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_99:
                     {
                       /** 1111 1111 0010 rdst srca srcb	add	%2, %1, %0 */
-#line 476 "rx-decode.opc"
+#line 488 "rx-decode.opc"
                       int rdst AU = op[1] & 0x0f;
-#line 476 "rx-decode.opc"
+#line 488 "rx-decode.opc"
                       int srca AU = (op[2] >> 4) & 0x0f;
-#line 476 "rx-decode.opc"
+#line 488 "rx-decode.opc"
                       int srcb AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -14171,7 +14183,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  srcb = 0x%x\n", srcb);
                         }
                       SYNTAX("add	%2, %1, %0");
-#line 476 "rx-decode.opc"
+#line 488 "rx-decode.opc"
                       ID(add); DR(rdst); SR(srcb); S2R(srca); F_OSZC;
                     
                     /*----------------------------------------------------------------------*/
@@ -14324,11 +14336,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_100:
                     {
                       /** 1111 1111 0011 rdst srca srcb	mul 	%2, %1, %0 */
-#line 578 "rx-decode.opc"
+#line 590 "rx-decode.opc"
                       int rdst AU = op[1] & 0x0f;
-#line 578 "rx-decode.opc"
+#line 590 "rx-decode.opc"
                       int srca AU = (op[2] >> 4) & 0x0f;
-#line 578 "rx-decode.opc"
+#line 590 "rx-decode.opc"
                       int srcb AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -14340,7 +14352,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  srcb = 0x%x\n", srcb);
                         }
                       SYNTAX("mul 	%2, %1, %0");
-#line 578 "rx-decode.opc"
+#line 590 "rx-decode.opc"
                       ID(mul); DR(rdst); SR(srcb); S2R(srca); F_____;
                     
                     /*----------------------------------------------------------------------*/
@@ -14493,11 +14505,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_101:
                     {
                       /** 1111 1111 0100 rdst srca srcb	and	%2, %1, %0 */
-#line 386 "rx-decode.opc"
+#line 398 "rx-decode.opc"
                       int rdst AU = op[1] & 0x0f;
-#line 386 "rx-decode.opc"
+#line 398 "rx-decode.opc"
                       int srca AU = (op[2] >> 4) & 0x0f;
-#line 386 "rx-decode.opc"
+#line 398 "rx-decode.opc"
                       int srcb AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -14509,7 +14521,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  srcb = 0x%x\n", srcb);
                         }
                       SYNTAX("and	%2, %1, %0");
-#line 386 "rx-decode.opc"
+#line 398 "rx-decode.opc"
                       ID(and); DR(rdst); SR(srcb); S2R(srca); F__SZ_;
                     
                     /*----------------------------------------------------------------------*/
@@ -14662,11 +14674,11 @@ rx_decode_opcode (unsigned long pc AU,
                   op_semantics_102:
                     {
                       /** 1111 1111 0101 rdst srca srcb	or	%2, %1, %0 */
-#line 404 "rx-decode.opc"
+#line 416 "rx-decode.opc"
                       int rdst AU = op[1] & 0x0f;
-#line 404 "rx-decode.opc"
+#line 416 "rx-decode.opc"
                       int srca AU = (op[2] >> 4) & 0x0f;
-#line 404 "rx-decode.opc"
+#line 416 "rx-decode.opc"
                       int srcb AU = op[2] & 0x0f;
                       if (trace)
                         {
@@ -14678,7 +14690,7 @@ rx_decode_opcode (unsigned long pc AU,
                           printf ("  srcb = 0x%x\n", srcb);
                         }
                       SYNTAX("or	%2, %1, %0");
-#line 404 "rx-decode.opc"
+#line 416 "rx-decode.opc"
                       ID(or); DR(rdst); SR(srcb); S2R(srca); F__SZ_;
                     
                     /*----------------------------------------------------------------------*/
@@ -14828,7 +14840,7 @@ rx_decode_opcode (unsigned long pc AU,
       break;
     default: UNSUPPORTED(); break;
   }
-#line 961 "rx-decode.opc"
+#line 973 "rx-decode.opc"
 
   return rx->n_bytes;
 }
diff --git a/opcodes/rx-decode.opc b/opcodes/rx-decode.opc
index a426b86..27ff5d4 100644
--- a/opcodes/rx-decode.opc
+++ b/opcodes/rx-decode.opc
@@ -1,9 +1,8 @@
 /* -*- c -*- */
+#include "sysdep.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-
-#include "config.h"
 #include "ansidecl.h"
 #include "opcode/rx.h"
 
@@ -262,7 +261,20 @@ rx_decode_opcode (unsigned long pc AU,
   ID(mov); DR(rdst); SC(IMM (1)); F_____;
 
 /** 1111 10sd rdst im sz	mov%s	#%1, %0 */
-  ID(mov); sBWL (sz); DD(sd, rdst, sz); SC(IMMex(im)); F_____;
+  ID(mov); DD(sd, rdst, sz);
+  if ((im == 1 && sz == 0)
+      || (im == 2 && sz == 1)
+      || (im == 0 && sz == 2))
+    {
+      BWL (sz);
+      SC(IMM(im));
+    }
+  else
+    {
+      sBWL (sz);
+      SC(IMMex(im));
+    }
+   F_____;
 
 /** 0110 0110 immm rdst		mov%s	#%1, %0 */
   ID(mov); DR(rdst); SC(immm); F_____;
diff --git a/opcodes/rx-dis.c b/opcodes/rx-dis.c
index 1cdb710..e771612 100644
--- a/opcodes/rx-dis.c
+++ b/opcodes/rx-dis.c
@@ -1,5 +1,5 @@
 /* Disassembler code for Renesas RX.
-   Copyright 2008, 2009 Free Software Foundation, Inc.
+   Copyright 2008, 2009, 2012 Free Software Foundation, Inc.
    Contributed by Red Hat.
    Written by DJ Delorie.
 
@@ -20,6 +20,7 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include <stdio.h>
 
 #include "bfd.h"
diff --git a/opcodes/s390-dis.c b/opcodes/s390-dis.c
index 37ed2e7..ef73d85 100644
--- a/opcodes/s390-dis.c
+++ b/opcodes/s390-dis.c
@@ -1,5 +1,5 @@
 /* s390-dis.c -- Disassemble S390 instructions
-   Copyright 2000, 2001, 2002, 2003, 2005, 2007, 2008
+   Copyright 2000, 2001, 2002, 2003, 2005, 2007, 2008, 2012
    Free Software Foundation, Inc.
    Contributed by Martin Schwidefsky (schwidefsky at de.ibm.com).
 
@@ -20,9 +20,9 @@
    Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include <stdio.h>
 #include "ansidecl.h"
-#include "sysdep.h"
 #include "dis-asm.h"
 #include "opintl.h"
 #include "opcode/s390.h"
diff --git a/opcodes/s390-opc.txt b/opcodes/s390-opc.txt
index 1943fd6..58b54d1 100644
--- a/opcodes/s390-opc.txt
+++ b/opcodes/s390-opc.txt
@@ -372,7 +372,7 @@ b278 stcke S_RD "store clock extended" g5 esa,zarch
 b2a5 tre RRE_RER "translate extended" g5 esa,zarch
 eb000000008e mvclu RSE_RERERD "move long unicode" g5 esa,zarch
 e9 pka SS_L2RDRD "pack ascii" g5 esa,zarch
-e1 pku SS_L0RDRD "pack unicode" g5 esa,zarch
+e1 pku SS_L2RDRD "pack unicode" g5 esa,zarch
 b993 troo RRE_RER "translate one to one" g5 esa,zarch
 b992 trot RRE_RER "translate one to two" g5 esa,zarch
 b991 trto RRE_RER "translate two to one" g5 esa,zarch
diff --git a/opcodes/sh-dis.c b/opcodes/sh-dis.c
index 76d1233..e531558 100644
--- a/opcodes/sh-dis.c
+++ b/opcodes/sh-dis.c
@@ -1,6 +1,6 @@
 /* Disassemble SH instructions.
    Copyright 1993, 1994, 1995, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005,
-   2006, 2007  Free Software Foundation, Inc.
+   2006, 2007, 2012  Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
 
@@ -19,8 +19,9 @@
    Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <stdio.h>
 #include "sysdep.h"
+#include <stdio.h>
+
 #define STATIC_TABLE
 #define DEFINE_TABLE
 
diff --git a/opcodes/sh64-dis.c b/opcodes/sh64-dis.c
index 60963e7..1480a3d 100644
--- a/opcodes/sh64-dis.c
+++ b/opcodes/sh64-dis.c
@@ -1,5 +1,6 @@
 /* Disassemble SH64 instructions.
-   Copyright 2000, 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
+   Copyright 2000, 2001, 2002, 2003, 2005, 2007, 2012
+   Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
 
@@ -18,10 +19,9 @@
    Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include <stdio.h>
-
 #include "dis-asm.h"
-#include "sysdep.h"
 #include "sh64-opc.h"
 #include "libiberty.h"
 /* We need to refer to the ELF header structure.  */
diff --git a/opcodes/sparc-dis.c b/opcodes/sparc-dis.c
index b7f0cc2..73f01d3 100644
--- a/opcodes/sparc-dis.c
+++ b/opcodes/sparc-dis.c
@@ -1,6 +1,6 @@
 /* Print SPARC instructions.
    Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010
+   2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2012
    Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
@@ -20,9 +20,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <stdio.h>
-
 #include "sysdep.h"
+#include <stdio.h>
 #include "opcode/sparc.h"
 #include "dis-asm.h"
 #include "libiberty.h"
@@ -108,8 +107,8 @@ static char *v9_hpriv_reg_names[] =
 static char *v9a_asr_reg_names[] =
 {
   "pcr", "pic", "dcr", "gsr", "set_softint", "clear_softint",
-  "softint", "tick_cmpr", "stick", "stick_cmpr", "resv26",
-  "resv27", "cps"
+  "softint", "tick_cmpr", "stick", "stick_cmpr", "cfr",
+  "pause", "cps"
 };
 
 /* Macros used to extract instruction fields.  Not all fields have
@@ -129,6 +128,7 @@ static char *v9a_asr_reg_names[] =
 
 /* These are for v9.  */
 #define X_DISP16(i)  (((((i) >> 20) & 3) << 14) | (((i) >> 0) & 0x3fff))
+#define X_DISP10(i)  (((((i) >> 19) & 3) << 8) | (((i) >> 5) & 0xff))
 #define X_DISP19(i)  (((i) >> 0) & 0x7ffff)
 #define X_MEMBAR(i)  ((i) & 0x7f)
 
@@ -703,6 +703,10 @@ print_insn_sparc (bfd_vma memaddr, disassemble_info *info)
 		    }
 		    break;
 
+		  case ')':	/* 5 bit unsigned immediate from RS3.  */
+		    (info->fprintf_func) (stream, "%#x", X_RS3 (insn));
+		    break;
+
 		  case 'X':	/* 5 bit unsigned immediate.  */
 		  case 'Y':	/* 6 bit unsigned immediate.  */
 		    {
@@ -743,6 +747,11 @@ print_insn_sparc (bfd_vma memaddr, disassemble_info *info)
 		      break;
 		    }
 
+		  case '=':
+		    info->target = memaddr + SEX (X_DISP10 (insn), 10) * 4;
+		    (*info->print_address_func) (info->target, info);
+		    break;
+
 		  case 'k':
 		    info->target = memaddr + SEX (X_DISP16 (insn), 16) * 4;
 		    (*info->print_address_func) (info->target, info);
diff --git a/opcodes/sparc-opc.c b/opcodes/sparc-opc.c
index a2096c5..b2e5344 100644
--- a/opcodes/sparc-opc.c
+++ b/opcodes/sparc-opc.c
@@ -1,6 +1,6 @@
 /* Table of opcodes for the sparc.
    Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2002, 2004, 2005, 2006, 2007, 2008, 2011
+   2000, 2002, 2004, 2005, 2006, 2007, 2008, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
@@ -25,8 +25,8 @@
    instruction's name rather than the args.  This would make gas faster, pinsn
    slower, but would mess up some macros a bit.  xoxorich. */
 
-#include <stdio.h>
 #include "sysdep.h"
+#include <stdio.h>
 #include "opcode/sparc.h"
 
 /* Some defines to make life easy.  */
@@ -104,6 +104,9 @@ sparc_opcode_lookup_arch (const char *name)
 /* Branch condition field.  */
 #define COND(x)		(((x) & 0xf) << 25)
 
+/* Compare And Branch condition field.  */
+#define CBCOND(x)	(((x) & 0x1f) << 25)
+
 /* v9: Move (MOVcc and FMOVcc) condition field.  */
 #define MCOND(x,i_or_f)	((((i_or_f) & 1) << 18) | (((x) >> 11) & (0xf << 14))) /* v9 */
 
@@ -154,6 +157,7 @@ sparc_opcode_lookup_arch (const char *name)
 
 #define ICC 		(0)	/* v9 */
 #define XCC 		(1 << 12) /* v9 */
+#define CBCOND_XCC	(1 << 21)
 #define FCC(x)		(((x) & 0x3) << 11) /* v9 */
 #define FBFCC(x)	(((x) & 0x3) << 20)	/* v9 */
 

@@ -167,924 +171,931 @@ sparc_opcode_lookup_arch (const char *name)
 /* Entries for commutative arithmetic operations.  */
 /* ??? More entries can make use of this.  */
 #define COMMUTEOP(opcode, op3, arch_mask) \
-{ opcode,	F3(2, op3, 0), F3(~2, ~op3, ~0)|ASI(~0),	"1,2,d", 0, arch_mask }, \
-{ opcode,	F3(2, op3, 1), F3(~2, ~op3, ~1),		"1,i,d", 0, arch_mask }, \
-{ opcode,	F3(2, op3, 1), F3(~2, ~op3, ~1),		"i,1,d", 0, arch_mask }
+{ opcode,	F3(2, op3, 0), F3(~2, ~op3, ~0)|ASI(~0),	"1,2,d", 0, 0, arch_mask }, \
+{ opcode,	F3(2, op3, 1), F3(~2, ~op3, ~1),		"1,i,d", 0, 0, arch_mask }, \
+{ opcode,	F3(2, op3, 1), F3(~2, ~op3, ~1),		"i,1,d", 0, 0, arch_mask }
 
 const struct sparc_opcode sparc_opcodes[] = {
 
-{ "ld",	F3(3, 0x00, 0), F3(~3, ~0x00, ~0),		"[1+2],d", 0, v6 },
-{ "ld",	F3(3, 0x00, 0), F3(~3, ~0x00, ~0)|RS2_G0,	"[1],d", 0, v6 }, /* ld [rs1+%g0],d */
-{ "ld",	F3(3, 0x00, 1), F3(~3, ~0x00, ~1),		"[1+i],d", 0, v6 },
-{ "ld",	F3(3, 0x00, 1), F3(~3, ~0x00, ~1),		"[i+1],d", 0, v6 },
-{ "ld",	F3(3, 0x00, 1), F3(~3, ~0x00, ~1)|RS1_G0,	"[i],d", 0, v6 },
-{ "ld",	F3(3, 0x00, 1), F3(~3, ~0x00, ~1)|SIMM13(~0),	"[1],d", 0, v6 }, /* ld [rs1+0],d */
-{ "ld",	F3(3, 0x20, 0), F3(~3, ~0x20, ~0),		"[1+2],g", 0, v6 },
-{ "ld",	F3(3, 0x20, 0), F3(~3, ~0x20, ~0)|RS2_G0,	"[1],g", 0, v6 }, /* ld [rs1+%g0],d */
-{ "ld",	F3(3, 0x20, 1), F3(~3, ~0x20, ~1),		"[1+i],g", 0, v6 },
-{ "ld",	F3(3, 0x20, 1), F3(~3, ~0x20, ~1),		"[i+1],g", 0, v6 },
-{ "ld",	F3(3, 0x20, 1), F3(~3, ~0x20, ~1)|RS1_G0,	"[i],g", 0, v6 },
-{ "ld",	F3(3, 0x20, 1), F3(~3, ~0x20, ~1)|SIMM13(~0),	"[1],g", 0, v6 }, /* ld [rs1+0],d */
-
-{ "ld",	F3(3, 0x21, 0), F3(~3, ~0x21, ~0)|RD(~0),	"[1+2],F", 0, v6 },
-{ "ld",	F3(3, 0x21, 0), F3(~3, ~0x21, ~0)|RS2_G0|RD(~0),"[1],F", 0, v6 }, /* ld [rs1+%g0],d */
-{ "ld",	F3(3, 0x21, 1), F3(~3, ~0x21, ~1)|RD(~0),	"[1+i],F", 0, v6 },
-{ "ld",	F3(3, 0x21, 1), F3(~3, ~0x21, ~1)|RD(~0),	"[i+1],F", 0, v6 },
-{ "ld",	F3(3, 0x21, 1), F3(~3, ~0x21, ~1)|RS1_G0|RD(~0),"[i],F", 0, v6 },
-{ "ld",	F3(3, 0x21, 1), F3(~3, ~0x21, ~1)|SIMM13(~0)|RD(~0),"[1],F", 0, v6 }, /* ld [rs1+0],d */
-
-{ "ld",	F3(3, 0x30, 0), F3(~3, ~0x30, ~0),		"[1+2],D", 0, v6notv9 },
-{ "ld",	F3(3, 0x30, 0), F3(~3, ~0x30, ~0)|RS2_G0,	"[1],D", 0, v6notv9 }, /* ld [rs1+%g0],d */
-{ "ld",	F3(3, 0x30, 1), F3(~3, ~0x30, ~1),		"[1+i],D", 0, v6notv9 },
-{ "ld",	F3(3, 0x30, 1), F3(~3, ~0x30, ~1),		"[i+1],D", 0, v6notv9 },
-{ "ld",	F3(3, 0x30, 1), F3(~3, ~0x30, ~1)|RS1_G0,	"[i],D", 0, v6notv9 },
-{ "ld",	F3(3, 0x30, 1), F3(~3, ~0x30, ~1)|SIMM13(~0),	"[1],D", 0, v6notv9 }, /* ld [rs1+0],d */
-{ "ld",	F3(3, 0x31, 0), F3(~3, ~0x31, ~0),		"[1+2],C", 0, v6notv9 },
-{ "ld",	F3(3, 0x31, 0), F3(~3, ~0x31, ~0)|RS2_G0,	"[1],C", 0, v6notv9 }, /* ld [rs1+%g0],d */
-{ "ld",	F3(3, 0x31, 1), F3(~3, ~0x31, ~1),		"[1+i],C", 0, v6notv9 },
-{ "ld",	F3(3, 0x31, 1), F3(~3, ~0x31, ~1),		"[i+1],C", 0, v6notv9 },
-{ "ld",	F3(3, 0x31, 1), F3(~3, ~0x31, ~1)|RS1_G0,	"[i],C", 0, v6notv9 },
-{ "ld",	F3(3, 0x31, 1), F3(~3, ~0x31, ~1)|SIMM13(~0),	"[1],C", 0, v6notv9 }, /* ld [rs1+0],d */
+{ "ld",	F3(3, 0x00, 0), F3(~3, ~0x00, ~0),		"[1+2],d", 0, 0, v6 },
+{ "ld",	F3(3, 0x00, 0), F3(~3, ~0x00, ~0)|RS2_G0,	"[1],d", 0, 0, v6 }, /* ld [rs1+%g0],d */
+{ "ld",	F3(3, 0x00, 1), F3(~3, ~0x00, ~1),		"[1+i],d", 0, 0, v6 },
+{ "ld",	F3(3, 0x00, 1), F3(~3, ~0x00, ~1),		"[i+1],d", 0, 0, v6 },
+{ "ld",	F3(3, 0x00, 1), F3(~3, ~0x00, ~1)|RS1_G0,	"[i],d", 0, 0, v6 },
+{ "ld",	F3(3, 0x00, 1), F3(~3, ~0x00, ~1)|SIMM13(~0),	"[1],d", 0, 0, v6 }, /* ld [rs1+0],d */
+{ "ld",	F3(3, 0x20, 0), F3(~3, ~0x20, ~0),		"[1+2],g", 0, 0, v6 },
+{ "ld",	F3(3, 0x20, 0), F3(~3, ~0x20, ~0)|RS2_G0,	"[1],g", 0, 0, v6 }, /* ld [rs1+%g0],d */
+{ "ld",	F3(3, 0x20, 1), F3(~3, ~0x20, ~1),		"[1+i],g", 0, 0, v6 },
+{ "ld",	F3(3, 0x20, 1), F3(~3, ~0x20, ~1),		"[i+1],g", 0, 0, v6 },
+{ "ld",	F3(3, 0x20, 1), F3(~3, ~0x20, ~1)|RS1_G0,	"[i],g", 0, 0, v6 },
+{ "ld",	F3(3, 0x20, 1), F3(~3, ~0x20, ~1)|SIMM13(~0),	"[1],g", 0, 0, v6 }, /* ld [rs1+0],d */
+
+{ "ld",	F3(3, 0x21, 0), F3(~3, ~0x21, ~0)|RD(~0),	"[1+2],F", 0, 0, v6 },
+{ "ld",	F3(3, 0x21, 0), F3(~3, ~0x21, ~0)|RS2_G0|RD(~0),"[1],F", 0, 0, v6 }, /* ld [rs1+%g0],d */
+{ "ld",	F3(3, 0x21, 1), F3(~3, ~0x21, ~1)|RD(~0),	"[1+i],F", 0, 0, v6 },
+{ "ld",	F3(3, 0x21, 1), F3(~3, ~0x21, ~1)|RD(~0),	"[i+1],F", 0, 0, v6 },
+{ "ld",	F3(3, 0x21, 1), F3(~3, ~0x21, ~1)|RS1_G0|RD(~0),"[i],F", 0, 0, v6 },
+{ "ld",	F3(3, 0x21, 1), F3(~3, ~0x21, ~1)|SIMM13(~0)|RD(~0),"[1],F", 0, 0, v6 }, /* ld [rs1+0],d */
+
+{ "ld",	F3(3, 0x30, 0), F3(~3, ~0x30, ~0),		"[1+2],D", 0, 0, v6notv9 },
+{ "ld",	F3(3, 0x30, 0), F3(~3, ~0x30, ~0)|RS2_G0,	"[1],D", 0, 0, v6notv9 }, /* ld [rs1+%g0],d */
+{ "ld",	F3(3, 0x30, 1), F3(~3, ~0x30, ~1),		"[1+i],D", 0, 0, v6notv9 },
+{ "ld",	F3(3, 0x30, 1), F3(~3, ~0x30, ~1),		"[i+1],D", 0, 0, v6notv9 },
+{ "ld",	F3(3, 0x30, 1), F3(~3, ~0x30, ~1)|RS1_G0,	"[i],D", 0, 0, v6notv9 },
+{ "ld",	F3(3, 0x30, 1), F3(~3, ~0x30, ~1)|SIMM13(~0),	"[1],D", 0, 0, v6notv9 }, /* ld [rs1+0],d */
+{ "ld",	F3(3, 0x31, 0), F3(~3, ~0x31, ~0),		"[1+2],C", 0, 0, v6notv9 },
+{ "ld",	F3(3, 0x31, 0), F3(~3, ~0x31, ~0)|RS2_G0,	"[1],C", 0, 0, v6notv9 }, /* ld [rs1+%g0],d */
+{ "ld",	F3(3, 0x31, 1), F3(~3, ~0x31, ~1),		"[1+i],C", 0, 0, v6notv9 },
+{ "ld",	F3(3, 0x31, 1), F3(~3, ~0x31, ~1),		"[i+1],C", 0, 0, v6notv9 },
+{ "ld",	F3(3, 0x31, 1), F3(~3, ~0x31, ~1)|RS1_G0,	"[i],C", 0, 0, v6notv9 },
+{ "ld",	F3(3, 0x31, 1), F3(~3, ~0x31, ~1)|SIMM13(~0),	"[1],C", 0, 0, v6notv9 }, /* ld [rs1+0],d */
 
 /* The v9 LDUW is the same as the old 'ld' opcode, it is not the same as the
    'ld' pseudo-op in v9.  */
-{ "lduw",	F3(3, 0x00, 0), F3(~3, ~0x00, ~0),		"[1+2],d", F_ALIAS, v9 },
-{ "lduw",	F3(3, 0x00, 0), F3(~3, ~0x00, ~0)|RS2_G0,	"[1],d", F_ALIAS, v9 }, /* ld [rs1+%g0],d */
-{ "lduw",	F3(3, 0x00, 1), F3(~3, ~0x00, ~1),		"[1+i],d", F_ALIAS, v9 },
-{ "lduw",	F3(3, 0x00, 1), F3(~3, ~0x00, ~1),		"[i+1],d", F_ALIAS, v9 },
-{ "lduw",	F3(3, 0x00, 1), F3(~3, ~0x00, ~1)|RS1_G0,	"[i],d", F_ALIAS, v9 },
-{ "lduw",	F3(3, 0x00, 1), F3(~3, ~0x00, ~1)|SIMM13(~0),	"[1],d", F_ALIAS, v9 }, /* ld [rs1+0],d */
-
-{ "ldd",	F3(3, 0x03, 0), F3(~3, ~0x03, ~0)|ASI(~0),	"[1+2],d", 0, v6 },
-{ "ldd",	F3(3, 0x03, 0), F3(~3, ~0x03, ~0)|ASI_RS2(~0),	"[1],d", 0, v6 }, /* ldd [rs1+%g0],d */
-{ "ldd",	F3(3, 0x03, 1), F3(~3, ~0x03, ~1),		"[1+i],d", 0, v6 },
-{ "ldd",	F3(3, 0x03, 1), F3(~3, ~0x03, ~1),		"[i+1],d", 0, v6 },
-{ "ldd",	F3(3, 0x03, 1), F3(~3, ~0x03, ~1)|RS1_G0,	"[i],d", 0, v6 },
-{ "ldd",	F3(3, 0x03, 1), F3(~3, ~0x03, ~1)|SIMM13(~0),	"[1],d", 0, v6 }, /* ldd [rs1+0],d */
-{ "ldd",	F3(3, 0x23, 0), F3(~3, ~0x23, ~0)|ASI(~0),	"[1+2],H", 0, v6 },
-{ "ldd",	F3(3, 0x23, 0), F3(~3, ~0x23, ~0)|ASI_RS2(~0),	"[1],H", 0, v6 }, /* ldd [rs1+%g0],d */
-{ "ldd",	F3(3, 0x23, 1), F3(~3, ~0x23, ~1),		"[1+i],H", 0, v6 },
-{ "ldd",	F3(3, 0x23, 1), F3(~3, ~0x23, ~1),		"[i+1],H", 0, v6 },
-{ "ldd",	F3(3, 0x23, 1), F3(~3, ~0x23, ~1)|RS1_G0,	"[i],H", 0, v6 },
-{ "ldd",	F3(3, 0x23, 1), F3(~3, ~0x23, ~1)|SIMM13(~0),	"[1],H", 0, v6 }, /* ldd [rs1+0],d */
-
-{ "ldd",	F3(3, 0x33, 0), F3(~3, ~0x33, ~0)|ASI(~0),	"[1+2],D", 0, v6notv9 },
-{ "ldd",	F3(3, 0x33, 0), F3(~3, ~0x33, ~0)|ASI_RS2(~0),	"[1],D", 0, v6notv9 }, /* ldd [rs1+%g0],d */
-{ "ldd",	F3(3, 0x33, 1), F3(~3, ~0x33, ~1),		"[1+i],D", 0, v6notv9 },
-{ "ldd",	F3(3, 0x33, 1), F3(~3, ~0x33, ~1),		"[i+1],D", 0, v6notv9 },
-{ "ldd",	F3(3, 0x33, 1), F3(~3, ~0x33, ~1)|RS1_G0,	"[i],D", 0, v6notv9 },
-{ "ldd",	F3(3, 0x33, 1), F3(~3, ~0x33, ~1)|SIMM13(~0),	"[1],D", 0, v6notv9 }, /* ldd [rs1+0],d */
-
-{ "ldq",	F3(3, 0x22, 0), F3(~3, ~0x22, ~0)|ASI(~0),	"[1+2],J", 0, v9 },
-{ "ldq",	F3(3, 0x22, 0), F3(~3, ~0x22, ~0)|ASI_RS2(~0),	"[1],J", 0, v9 }, /* ldd [rs1+%g0],d */
-{ "ldq",	F3(3, 0x22, 1), F3(~3, ~0x22, ~1),		"[1+i],J", 0, v9 },
-{ "ldq",	F3(3, 0x22, 1), F3(~3, ~0x22, ~1),		"[i+1],J", 0, v9 },
-{ "ldq",	F3(3, 0x22, 1), F3(~3, ~0x22, ~1)|RS1_G0,	"[i],J", 0, v9 },
-{ "ldq",	F3(3, 0x22, 1), F3(~3, ~0x22, ~1)|SIMM13(~0),	"[1],J", 0, v9 }, /* ldd [rs1+0],d */
-
-{ "ldsb",	F3(3, 0x09, 0), F3(~3, ~0x09, ~0)|ASI(~0),	"[1+2],d", 0, v6 },
-{ "ldsb",	F3(3, 0x09, 0), F3(~3, ~0x09, ~0)|ASI_RS2(~0),	"[1],d", 0, v6 }, /* ldsb [rs1+%g0],d */
-{ "ldsb",	F3(3, 0x09, 1), F3(~3, ~0x09, ~1),		"[1+i],d", 0, v6 },
-{ "ldsb",	F3(3, 0x09, 1), F3(~3, ~0x09, ~1),		"[i+1],d", 0, v6 },
-{ "ldsb",	F3(3, 0x09, 1), F3(~3, ~0x09, ~1)|RS1_G0,	"[i],d", 0, v6 },
-{ "ldsb",	F3(3, 0x09, 1), F3(~3, ~0x09, ~1)|SIMM13(~0),	"[1],d", 0, v6 }, /* ldsb [rs1+0],d */
-
-{ "ldsh",	F3(3, 0x0a, 0), F3(~3, ~0x0a, ~0)|ASI_RS2(~0),	"[1],d", 0, v6 }, /* ldsh [rs1+%g0],d */
-{ "ldsh",	F3(3, 0x0a, 0), F3(~3, ~0x0a, ~0)|ASI(~0),	"[1+2],d", 0, v6 },
-{ "ldsh",	F3(3, 0x0a, 1), F3(~3, ~0x0a, ~1),		"[1+i],d", 0, v6 },
-{ "ldsh",	F3(3, 0x0a, 1), F3(~3, ~0x0a, ~1),		"[i+1],d", 0, v6 },
-{ "ldsh",	F3(3, 0x0a, 1), F3(~3, ~0x0a, ~1)|RS1_G0,	"[i],d", 0, v6 },
-{ "ldsh",	F3(3, 0x0a, 1), F3(~3, ~0x0a, ~1)|SIMM13(~0),	"[1],d", 0, v6 }, /* ldsh [rs1+0],d */
-
-{ "ldstub",	F3(3, 0x0d, 0), F3(~3, ~0x0d, ~0)|ASI(~0),	"[1+2],d", 0, v6 },
-{ "ldstub",	F3(3, 0x0d, 0), F3(~3, ~0x0d, ~0)|ASI_RS2(~0),	"[1],d", 0, v6 }, /* ldstub [rs1+%g0],d */
-{ "ldstub",	F3(3, 0x0d, 1), F3(~3, ~0x0d, ~1),		"[1+i],d", 0, v6 },
-{ "ldstub",	F3(3, 0x0d, 1), F3(~3, ~0x0d, ~1),		"[i+1],d", 0, v6 },
-{ "ldstub",	F3(3, 0x0d, 1), F3(~3, ~0x0d, ~1)|RS1_G0,	"[i],d", 0, v6 },
-{ "ldstub",	F3(3, 0x0d, 1), F3(~3, ~0x0d, ~1)|SIMM13(~0),	"[1],d", 0, v6 }, /* ldstub [rs1+0],d */
-
-{ "ldsw",	F3(3, 0x08, 0), F3(~3, ~0x08, ~0)|ASI(~0),	"[1+2],d", 0, v9 },
-{ "ldsw",	F3(3, 0x08, 0), F3(~3, ~0x08, ~0)|ASI_RS2(~0),	"[1],d", 0, v9 }, /* ldsw [rs1+%g0],d */
-{ "ldsw",	F3(3, 0x08, 1), F3(~3, ~0x08, ~1),		"[1+i],d", 0, v9 },
-{ "ldsw",	F3(3, 0x08, 1), F3(~3, ~0x08, ~1),		"[i+1],d", 0, v9 },
-{ "ldsw",	F3(3, 0x08, 1), F3(~3, ~0x08, ~1)|RS1_G0,	"[i],d", 0, v9 },
-{ "ldsw",	F3(3, 0x08, 1), F3(~3, ~0x08, ~1)|SIMM13(~0),	"[1],d", 0, v9 }, /* ldsw [rs1+0],d */
-
-{ "ldub",	F3(3, 0x01, 0), F3(~3, ~0x01, ~0)|ASI(~0),	"[1+2],d", 0, v6 },
-{ "ldub",	F3(3, 0x01, 0), F3(~3, ~0x01, ~0)|ASI_RS2(~0),	"[1],d", 0, v6 }, /* ldub [rs1+%g0],d */
-{ "ldub",	F3(3, 0x01, 1), F3(~3, ~0x01, ~1),		"[1+i],d", 0, v6 },
-{ "ldub",	F3(3, 0x01, 1), F3(~3, ~0x01, ~1),		"[i+1],d", 0, v6 },
-{ "ldub",	F3(3, 0x01, 1), F3(~3, ~0x01, ~1)|RS1_G0,	"[i],d", 0, v6 },
-{ "ldub",	F3(3, 0x01, 1), F3(~3, ~0x01, ~1)|SIMM13(~0),	"[1],d", 0, v6 }, /* ldub [rs1+0],d */
-
-{ "lduh",	F3(3, 0x02, 0), F3(~3, ~0x02, ~0)|ASI(~0),	"[1+2],d", 0, v6 },
-{ "lduh",	F3(3, 0x02, 0), F3(~3, ~0x02, ~0)|ASI_RS2(~0),	"[1],d", 0, v6 }, /* lduh [rs1+%g0],d */
-{ "lduh",	F3(3, 0x02, 1), F3(~3, ~0x02, ~1),		"[1+i],d", 0, v6 },
-{ "lduh",	F3(3, 0x02, 1), F3(~3, ~0x02, ~1),		"[i+1],d", 0, v6 },
-{ "lduh",	F3(3, 0x02, 1), F3(~3, ~0x02, ~1)|RS1_G0,	"[i],d", 0, v6 },
-{ "lduh",	F3(3, 0x02, 1), F3(~3, ~0x02, ~1)|SIMM13(~0),	"[1],d", 0, v6 }, /* lduh [rs1+0],d */
-
-{ "ldx",	F3(3, 0x0b, 0), F3(~3, ~0x0b, ~0)|ASI(~0),	"[1+2],d", 0, v9 },
-{ "ldx",	F3(3, 0x0b, 0), F3(~3, ~0x0b, ~0)|ASI_RS2(~0),	"[1],d", 0, v9 }, /* ldx [rs1+%g0],d */
-{ "ldx",	F3(3, 0x0b, 1), F3(~3, ~0x0b, ~1),		"[1+i],d", 0, v9 },
-{ "ldx",	F3(3, 0x0b, 1), F3(~3, ~0x0b, ~1),		"[i+1],d", 0, v9 },
-{ "ldx",	F3(3, 0x0b, 1), F3(~3, ~0x0b, ~1)|RS1_G0,	"[i],d", 0, v9 },
-{ "ldx",	F3(3, 0x0b, 1), F3(~3, ~0x0b, ~1)|SIMM13(~0),	"[1],d", 0, v9 }, /* ldx [rs1+0],d */
-
-{ "ldx",	F3(3, 0x21, 0)|RD(1), F3(~3, ~0x21, ~0)|RD(~1),	"[1+2],F", 0, v9 },
-{ "ldx",	F3(3, 0x21, 0)|RD(1), F3(~3, ~0x21, ~0)|RS2_G0|RD(~1),	"[1],F", 0, v9 }, /* ld [rs1+%g0],d */
-{ "ldx",	F3(3, 0x21, 1)|RD(1), F3(~3, ~0x21, ~1)|RD(~1),	"[1+i],F", 0, v9 },
-{ "ldx",	F3(3, 0x21, 1)|RD(1), F3(~3, ~0x21, ~1)|RD(~1),	"[i+1],F", 0, v9 },
-{ "ldx",	F3(3, 0x21, 1)|RD(1), F3(~3, ~0x21, ~1)|RS1_G0|RD(~1),	"[i],F", 0, v9 },
-{ "ldx",	F3(3, 0x21, 1)|RD(1), F3(~3, ~0x21, ~1)|SIMM13(~0)|RD(~1),"[1],F", 0, v9 }, /* ld [rs1+0],d */
-
-{ "ldx", F3(3, 0x21, 0)|RD(3), F3(~3, ~0x21, ~0)|RD(~3), "[1+2],(", 0, v9b },
-{ "ldx", F3(3, 0x21, 0)|RD(3), F3(~3, ~0x21, ~0)|RS2_G0|RD(~3),"[1],(", 0, v9b },
-{ "ldx", F3(3, 0x21, 1)|RD(3), F3(~3, ~0x21, ~1)|RD(~3), "[1+i],(", 0, v9b },
-{ "ldx", F3(3, 0x21, 1)|RD(3), F3(~3, ~0x21, ~1)|RD(~3), "[i+1],(", 0, v9b },
-{ "ldx", F3(3, 0x21, 1)|RD(3), F3(~3, ~0x21, ~1)|RS1_G0|RD(~3),"[i],(", 0, v9b },
-{ "ldx", F3(3, 0x21, 1)|RD(3), F3(~3, ~0x21, ~1)|SIMM13(~0)|RD(~3),"[1],(", 0, v9b },
-
-{ "lda",	F3(3, 0x10, 0), F3(~3, ~0x10, ~0),		"[1+2]A,d", 0, v6 },
-{ "lda",	F3(3, 0x10, 0), F3(~3, ~0x10, ~0)|RS2_G0,	"[1]A,d", 0, v6 }, /* lda [rs1+%g0],d */
-{ "lda",	F3(3, 0x10, 1), F3(~3, ~0x10, ~1),		"[1+i]o,d", 0, v9 },
-{ "lda",	F3(3, 0x10, 1), F3(~3, ~0x10, ~1),		"[i+1]o,d", 0, v9 },
-{ "lda",	F3(3, 0x10, 1), F3(~3, ~0x10, ~1)|RS1_G0,	"[i]o,d", 0, v9 },
-{ "lda",	F3(3, 0x10, 1), F3(~3, ~0x10, ~1)|SIMM13(~0),	"[1]o,d", 0, v9 }, /* ld [rs1+0],d */
-{ "lda",	F3(3, 0x30, 0), F3(~3, ~0x30, ~0),		"[1+2]A,g", 0, v9 },
-{ "lda",	F3(3, 0x30, 0), F3(~3, ~0x30, ~0)|RS2_G0,	"[1]A,g", 0, v9 }, /* lda [rs1+%g0],d */
-{ "lda",	F3(3, 0x30, 1), F3(~3, ~0x30, ~1),		"[1+i]o,g", 0, v9 },
-{ "lda",	F3(3, 0x30, 1), F3(~3, ~0x30, ~1),		"[i+1]o,g", 0, v9 },
-{ "lda",	F3(3, 0x30, 1), F3(~3, ~0x30, ~1)|RS1_G0,	"[i]o,g", 0, v9 },
-{ "lda",	F3(3, 0x30, 1), F3(~3, ~0x30, ~1)|SIMM13(~0),	"[1]o,g", 0, v9 }, /* ld [rs1+0],d */
-
-{ "ldda",	F3(3, 0x13, 0), F3(~3, ~0x13, ~0),		"[1+2]A,d", 0, v6 },
-{ "ldda",	F3(3, 0x13, 0), F3(~3, ~0x13, ~0)|RS2_G0,	"[1]A,d", 0, v6 }, /* ldda [rs1+%g0],d */
-{ "ldda",	F3(3, 0x13, 1), F3(~3, ~0x13, ~1),		"[1+i]o,d", 0, v9 },
-{ "ldda",	F3(3, 0x13, 1), F3(~3, ~0x13, ~1),		"[i+1]o,d", 0, v9 },
-{ "ldda",	F3(3, 0x13, 1), F3(~3, ~0x13, ~1)|RS1_G0,	"[i]o,d", 0, v9 },
-{ "ldda",	F3(3, 0x13, 1), F3(~3, ~0x13, ~1)|SIMM13(~0),	"[1]o,d", 0, v9 }, /* ld [rs1+0],d */
-
-{ "ldda",	F3(3, 0x33, 0), F3(~3, ~0x33, ~0),		"[1+2]A,H", 0, v9 },
-{ "ldda",	F3(3, 0x33, 0), F3(~3, ~0x33, ~0)|RS2_G0,	"[1]A,H", 0, v9 }, /* ldda [rs1+%g0],d */
-{ "ldda",	F3(3, 0x33, 1), F3(~3, ~0x33, ~1),		"[1+i]o,H", 0, v9 },
-{ "ldda",	F3(3, 0x33, 1), F3(~3, ~0x33, ~1),		"[i+1]o,H", 0, v9 },
-{ "ldda",	F3(3, 0x33, 1), F3(~3, ~0x33, ~1)|RS1_G0,	"[i]o,H", 0, v9 },
-{ "ldda",	F3(3, 0x33, 1), F3(~3, ~0x33, ~1)|SIMM13(~0),	"[1]o,H", 0, v9 }, /* ld [rs1+0],d */
-
-{ "ldqa",	F3(3, 0x32, 0), F3(~3, ~0x32, ~0),		"[1+2]A,J", 0, v9 },
-{ "ldqa",	F3(3, 0x32, 0), F3(~3, ~0x32, ~0)|RS2_G0,	"[1]A,J", 0, v9 }, /* ldd [rs1+%g0],d */
-{ "ldqa",	F3(3, 0x32, 1), F3(~3, ~0x32, ~1),		"[1+i]o,J", 0, v9 },
-{ "ldqa",	F3(3, 0x32, 1), F3(~3, ~0x32, ~1),		"[i+1]o,J", 0, v9 },
-{ "ldqa",	F3(3, 0x32, 1), F3(~3, ~0x32, ~1)|RS1_G0,	"[i]o,J", 0, v9 },
-{ "ldqa",	F3(3, 0x32, 1), F3(~3, ~0x32, ~1)|SIMM13(~0),	"[1]o,J", 0, v9 }, /* ldd [rs1+0],d */
-
-{ "ldsba",	F3(3, 0x19, 0), F3(~3, ~0x19, ~0),		"[1+2]A,d", 0, v6 },
-{ "ldsba",	F3(3, 0x19, 0), F3(~3, ~0x19, ~0)|RS2_G0,	"[1]A,d", 0, v6 }, /* ldsba [rs1+%g0],d */
-{ "ldsba",	F3(3, 0x19, 1), F3(~3, ~0x19, ~1),		"[1+i]o,d", 0, v9 },
-{ "ldsba",	F3(3, 0x19, 1), F3(~3, ~0x19, ~1),		"[i+1]o,d", 0, v9 },
-{ "ldsba",	F3(3, 0x19, 1), F3(~3, ~0x19, ~1)|RS1_G0,	"[i]o,d", 0, v9 },
-{ "ldsba",	F3(3, 0x19, 1), F3(~3, ~0x19, ~1)|SIMM13(~0),	"[1]o,d", 0, v9 }, /* ld [rs1+0],d */
-
-{ "ldsha",	F3(3, 0x1a, 0), F3(~3, ~0x1a, ~0),		"[1+2]A,d", 0, v6 },
-{ "ldsha",	F3(3, 0x1a, 0), F3(~3, ~0x1a, ~0)|RS2_G0,	"[1]A,d", 0, v6 }, /* ldsha [rs1+%g0],d */
-{ "ldsha",	F3(3, 0x1a, 1), F3(~3, ~0x1a, ~1),		"[1+i]o,d", 0, v9 },
-{ "ldsha",	F3(3, 0x1a, 1), F3(~3, ~0x1a, ~1),		"[i+1]o,d", 0, v9 },
-{ "ldsha",	F3(3, 0x1a, 1), F3(~3, ~0x1a, ~1)|RS1_G0,	"[i]o,d", 0, v9 },
-{ "ldsha",	F3(3, 0x1a, 1), F3(~3, ~0x1a, ~1)|SIMM13(~0),	"[1]o,d", 0, v9 }, /* ld [rs1+0],d */
-
-{ "ldstuba",	F3(3, 0x1d, 0), F3(~3, ~0x1d, ~0),		"[1+2]A,d", 0, v6 },
-{ "ldstuba",	F3(3, 0x1d, 0), F3(~3, ~0x1d, ~0)|RS2_G0,	"[1]A,d", 0, v6 }, /* ldstuba [rs1+%g0],d */
-{ "ldstuba",	F3(3, 0x1d, 1), F3(~3, ~0x1d, ~1),		"[1+i]o,d", 0, v9 },
-{ "ldstuba",	F3(3, 0x1d, 1), F3(~3, ~0x1d, ~1),		"[i+1]o,d", 0, v9 },
-{ "ldstuba",	F3(3, 0x1d, 1), F3(~3, ~0x1d, ~1)|RS1_G0,	"[i]o,d", 0, v9 },
-{ "ldstuba",	F3(3, 0x1d, 1), F3(~3, ~0x1d, ~1)|SIMM13(~0),	"[1]o,d", 0, v9 }, /* ld [rs1+0],d */
-
-{ "ldswa",	F3(3, 0x18, 0), F3(~3, ~0x18, ~0),		"[1+2]A,d", 0, v9 },
-{ "ldswa",	F3(3, 0x18, 0), F3(~3, ~0x18, ~0)|RS2_G0,	"[1]A,d", 0, v9 }, /* lda [rs1+%g0],d */
-{ "ldswa",	F3(3, 0x18, 1), F3(~3, ~0x18, ~1),		"[1+i]o,d", 0, v9 },
-{ "ldswa",	F3(3, 0x18, 1), F3(~3, ~0x18, ~1),		"[i+1]o,d", 0, v9 },
-{ "ldswa",	F3(3, 0x18, 1), F3(~3, ~0x18, ~1)|RS1_G0,	"[i]o,d", 0, v9 },
-{ "ldswa",	F3(3, 0x18, 1), F3(~3, ~0x18, ~1)|SIMM13(~0),	"[1]o,d", 0, v9 }, /* ld [rs1+0],d */
-
-{ "lduba",	F3(3, 0x11, 0), F3(~3, ~0x11, ~0),		"[1+2]A,d", 0, v6 },
-{ "lduba",	F3(3, 0x11, 0), F3(~3, ~0x11, ~0)|RS2_G0,	"[1]A,d", 0, v6 }, /* lduba [rs1+%g0],d */
-{ "lduba",	F3(3, 0x11, 1), F3(~3, ~0x11, ~1),		"[1+i]o,d", 0, v9 },
-{ "lduba",	F3(3, 0x11, 1), F3(~3, ~0x11, ~1),		"[i+1]o,d", 0, v9 },
-{ "lduba",	F3(3, 0x11, 1), F3(~3, ~0x11, ~1)|RS1_G0,	"[i]o,d", 0, v9 },
-{ "lduba",	F3(3, 0x11, 1), F3(~3, ~0x11, ~1)|SIMM13(~0),	"[1]o,d", 0, v9 }, /* ld [rs1+0],d */
-
-{ "lduha",	F3(3, 0x12, 0), F3(~3, ~0x12, ~0),		"[1+2]A,d", 0, v6 },
-{ "lduha",	F3(3, 0x12, 0), F3(~3, ~0x12, ~0)|RS2_G0,	"[1]A,d", 0, v6 }, /* lduha [rs1+%g0],d */
-{ "lduha",	F3(3, 0x12, 1), F3(~3, ~0x12, ~1),		"[1+i]o,d", 0, v9 },
-{ "lduha",	F3(3, 0x12, 1), F3(~3, ~0x12, ~1),		"[i+1]o,d", 0, v9 },
-{ "lduha",	F3(3, 0x12, 1), F3(~3, ~0x12, ~1)|RS1_G0,	"[i]o,d", 0, v9 },
-{ "lduha",	F3(3, 0x12, 1), F3(~3, ~0x12, ~1)|SIMM13(~0),	"[1]o,d", 0, v9 }, /* ld [rs1+0],d */
-
-{ "lduwa",	F3(3, 0x10, 0), F3(~3, ~0x10, ~0),		"[1+2]A,d", F_ALIAS, v9 }, /* lduwa === lda */
-{ "lduwa",	F3(3, 0x10, 0), F3(~3, ~0x10, ~0)|RS2_G0,	"[1]A,d", F_ALIAS, v9 }, /* lda [rs1+%g0],d */
-{ "lduwa",	F3(3, 0x10, 1), F3(~3, ~0x10, ~1),		"[1+i]o,d", F_ALIAS, v9 },
-{ "lduwa",	F3(3, 0x10, 1), F3(~3, ~0x10, ~1),		"[i+1]o,d", F_ALIAS, v9 },
-{ "lduwa",	F3(3, 0x10, 1), F3(~3, ~0x10, ~1)|RS1_G0,	"[i]o,d", F_ALIAS, v9 },
-{ "lduwa",	F3(3, 0x10, 1), F3(~3, ~0x10, ~1)|SIMM13(~0),	"[1]o,d", F_ALIAS, v9 }, /* ld [rs1+0],d */
-
-{ "ldxa",	F3(3, 0x1b, 0), F3(~3, ~0x1b, ~0),		"[1+2]A,d", 0, v9 },
-{ "ldxa",	F3(3, 0x1b, 0), F3(~3, ~0x1b, ~0)|RS2_G0,	"[1]A,d", 0, v9 }, /* lda [rs1+%g0],d */
-{ "ldxa",	F3(3, 0x1b, 1), F3(~3, ~0x1b, ~1),		"[1+i]o,d", 0, v9 },
-{ "ldxa",	F3(3, 0x1b, 1), F3(~3, ~0x1b, ~1),		"[i+1]o,d", 0, v9 },
-{ "ldxa",	F3(3, 0x1b, 1), F3(~3, ~0x1b, ~1)|RS1_G0,	"[i]o,d", 0, v9 },
-{ "ldxa",	F3(3, 0x1b, 1), F3(~3, ~0x1b, ~1)|SIMM13(~0),	"[1]o,d", 0, v9 }, /* ld [rs1+0],d */
-
-{ "st",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI(~0),		"d,[1+2]", 0, v6 },
-{ "st",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI_RS2(~0),		"d,[1]", 0, v6 }, /* st d,[rs1+%g0] */
-{ "st",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1),			"d,[1+i]", 0, v6 },
-{ "st",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1),			"d,[i+1]", 0, v6 },
-{ "st",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RS1_G0,		"d,[i]", 0, v6 },
-{ "st",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|SIMM13(~0),		"d,[1]", 0, v6 }, /* st d,[rs1+0] */
-{ "st",	F3(3, 0x24, 0), F3(~3, ~0x24, ~0)|ASI(~0),		"g,[1+2]", 0, v6 },
-{ "st",	F3(3, 0x24, 0), F3(~3, ~0x24, ~0)|ASI_RS2(~0),		"g,[1]", 0, v6 }, /* st d[rs1+%g0] */
-{ "st",	F3(3, 0x24, 1), F3(~3, ~0x24, ~1),			"g,[1+i]", 0, v6 },
-{ "st",	F3(3, 0x24, 1), F3(~3, ~0x24, ~1),			"g,[i+1]", 0, v6 },
-{ "st",	F3(3, 0x24, 1), F3(~3, ~0x24, ~1)|RS1_G0,		"g,[i]", 0, v6 },
-{ "st",	F3(3, 0x24, 1), F3(~3, ~0x24, ~1)|SIMM13(~0),		"g,[1]", 0, v6 }, /* st d,[rs1+0] */
-
-{ "st",	F3(3, 0x34, 0), F3(~3, ~0x34, ~0)|ASI(~0),		"D,[1+2]", 0, v6notv9 },
-{ "st",	F3(3, 0x34, 0), F3(~3, ~0x34, ~0)|ASI_RS2(~0),		"D,[1]", 0, v6notv9 }, /* st d,[rs1+%g0] */
-{ "st",	F3(3, 0x34, 1), F3(~3, ~0x34, ~1),			"D,[1+i]", 0, v6notv9 },
-{ "st",	F3(3, 0x34, 1), F3(~3, ~0x34, ~1),			"D,[i+1]", 0, v6notv9 },
-{ "st",	F3(3, 0x34, 1), F3(~3, ~0x34, ~1)|RS1_G0,		"D,[i]", 0, v6notv9 },
-{ "st",	F3(3, 0x34, 1), F3(~3, ~0x34, ~1)|SIMM13(~0),		"D,[1]", 0, v6notv9 }, /* st d,[rs1+0] */
-{ "st",	F3(3, 0x35, 0), F3(~3, ~0x35, ~0)|ASI(~0),		"C,[1+2]", 0, v6notv9 },
-{ "st",	F3(3, 0x35, 0), F3(~3, ~0x35, ~0)|ASI_RS2(~0),		"C,[1]", 0, v6notv9 }, /* st d,[rs1+%g0] */
-{ "st",	F3(3, 0x35, 1), F3(~3, ~0x35, ~1),			"C,[1+i]", 0, v6notv9 },
-{ "st",	F3(3, 0x35, 1), F3(~3, ~0x35, ~1),			"C,[i+1]", 0, v6notv9 },
-{ "st",	F3(3, 0x35, 1), F3(~3, ~0x35, ~1)|RS1_G0,		"C,[i]", 0, v6notv9 },
-{ "st",	F3(3, 0x35, 1), F3(~3, ~0x35, ~1)|SIMM13(~0),		"C,[1]", 0, v6notv9 }, /* st d,[rs1+0] */
-
-{ "st",	F3(3, 0x25, 0), F3(~3, ~0x25, ~0)|RD_G0|ASI(~0),	"F,[1+2]", 0, v6 },
-{ "st",	F3(3, 0x25, 0), F3(~3, ~0x25, ~0)|RD_G0|ASI_RS2(~0),	"F,[1]", 0, v6 }, /* st d,[rs1+%g0] */
-{ "st",	F3(3, 0x25, 1), F3(~3, ~0x25, ~1)|RD_G0,		"F,[1+i]", 0, v6 },
-{ "st",	F3(3, 0x25, 1), F3(~3, ~0x25, ~1)|RD_G0,		"F,[i+1]", 0, v6 },
-{ "st",	F3(3, 0x25, 1), F3(~3, ~0x25, ~1)|RD_G0|RS1_G0,		"F,[i]", 0, v6 },
-{ "st",	F3(3, 0x25, 1), F3(~3, ~0x25, ~1)|RD_G0|SIMM13(~0),	"F,[1]", 0, v6 }, /* st d,[rs1+0] */
-
-{ "stw",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI(~0),	"d,[1+2]", F_ALIAS, v9 },
-{ "stw",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI_RS2(~0),	"d,[1]", F_ALIAS, v9 }, /* st d,[rs1+%g0] */
-{ "stw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1),		"d,[1+i]", F_ALIAS, v9 },
-{ "stw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1),		"d,[i+1]", F_ALIAS, v9 },
-{ "stw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RS1_G0,	"d,[i]", F_ALIAS, v9 },
-{ "stw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|SIMM13(~0),	"d,[1]", F_ALIAS, v9 }, /* st d,[rs1+0] */
-{ "stsw",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI(~0),	"d,[1+2]", F_ALIAS, v9 },
-{ "stsw",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI_RS2(~0),	"d,[1]", F_ALIAS, v9 }, /* st d,[rs1+%g0] */
-{ "stsw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1),		"d,[1+i]", F_ALIAS, v9 },
-{ "stsw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1),		"d,[i+1]", F_ALIAS, v9 },
-{ "stsw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RS1_G0,	"d,[i]", F_ALIAS, v9 },
-{ "stsw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|SIMM13(~0),	"d,[1]", F_ALIAS, v9 }, /* st d,[rs1+0] */
-{ "stuw",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI(~0),	"d,[1+2]", F_ALIAS, v9 },
-{ "stuw",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI_RS2(~0),	"d,[1]", F_ALIAS, v9 }, /* st d,[rs1+%g0] */
-{ "stuw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1),		"d,[1+i]", F_ALIAS, v9 },
-{ "stuw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1),		"d,[i+1]", F_ALIAS, v9 },
-{ "stuw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RS1_G0,	"d,[i]", F_ALIAS, v9 },
-{ "stuw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|SIMM13(~0),	"d,[1]", F_ALIAS, v9 }, /* st d,[rs1+0] */
-
-{ "spill",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI(~0),	"d,[1+2]", F_ALIAS, v6 },
-{ "spill",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI_RS2(~0),	"d,[1]", F_ALIAS, v6 }, /* st d,[rs1+%g0] */
-{ "spill",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1),		"d,[1+i]", F_ALIAS, v6 },
-{ "spill",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1),		"d,[i+1]", F_ALIAS, v6 },
-{ "spill",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RS1_G0,	"d,[i]", F_ALIAS, v6 },
-{ "spill",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|SIMM13(~0),	"d,[1]", F_ALIAS, v6 }, /* st d,[rs1+0] */
-
-{ "sta",	F3(3, 0x14, 0), F3(~3, ~0x14, ~0),		"d,[1+2]A", 0, v6 },
-{ "sta",	F3(3, 0x14, 0), F3(~3, ~0x14, ~0)|RS2(~0),	"d,[1]A", 0, v6 }, /* sta d,[rs1+%g0] */
-{ "sta",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1),		"d,[1+i]o", 0, v9 },
-{ "sta",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1),		"d,[i+1]o", 0, v9 },
-{ "sta",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|RS1_G0,	"d,[i]o", 0, v9 },
-{ "sta",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|SIMM13(~0),	"d,[1]o", 0, v9 }, /* st d,[rs1+0] */
-
-{ "sta",	F3(3, 0x34, 0), F3(~3, ~0x34, ~0),		"g,[1+2]A", 0, v9 },
-{ "sta",	F3(3, 0x34, 0), F3(~3, ~0x34, ~0)|RS2(~0),	"g,[1]A", 0, v9 }, /* sta d,[rs1+%g0] */
-{ "sta",	F3(3, 0x34, 1), F3(~3, ~0x34, ~1),		"g,[1+i]o", 0, v9 },
-{ "sta",	F3(3, 0x34, 1), F3(~3, ~0x34, ~1),		"g,[i+1]o", 0, v9 },
-{ "sta",	F3(3, 0x34, 1), F3(~3, ~0x34, ~1)|RS1_G0,	"g,[i]o", 0, v9 },
-{ "sta",	F3(3, 0x34, 1), F3(~3, ~0x34, ~1)|SIMM13(~0),	"g,[1]o", 0, v9 }, /* st d,[rs1+0] */
-
-{ "stwa",	F3(3, 0x14, 0), F3(~3, ~0x14, ~0),		"d,[1+2]A", F_ALIAS, v9 },
-{ "stwa",	F3(3, 0x14, 0), F3(~3, ~0x14, ~0)|RS2(~0),	"d,[1]A", F_ALIAS, v9 }, /* sta d,[rs1+%g0] */
-{ "stwa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1),		"d,[1+i]o", F_ALIAS, v9 },
-{ "stwa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1),		"d,[i+1]o", F_ALIAS, v9 },
-{ "stwa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|RS1_G0,	"d,[i]o", F_ALIAS, v9 },
-{ "stwa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|SIMM13(~0),	"d,[1]o", F_ALIAS, v9 }, /* st d,[rs1+0] */
-{ "stswa",	F3(3, 0x14, 0), F3(~3, ~0x14, ~0),		"d,[1+2]A", F_ALIAS, v9 },
-{ "stswa",	F3(3, 0x14, 0), F3(~3, ~0x14, ~0)|RS2(~0),	"d,[1]A", F_ALIAS, v9 }, /* sta d,[rs1+%g0] */
-{ "stswa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1),		"d,[1+i]o", F_ALIAS, v9 },
-{ "stswa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1),		"d,[i+1]o", F_ALIAS, v9 },
-{ "stswa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|RS1_G0,	"d,[i]o", F_ALIAS, v9 },
-{ "stswa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|SIMM13(~0),	"d,[1]o", F_ALIAS, v9 }, /* st d,[rs1+0] */
-{ "stuwa",	F3(3, 0x14, 0), F3(~3, ~0x14, ~0),		"d,[1+2]A", F_ALIAS, v9 },
-{ "stuwa",	F3(3, 0x14, 0), F3(~3, ~0x14, ~0)|RS2(~0),	"d,[1]A", F_ALIAS, v9 }, /* sta d,[rs1+%g0] */
-{ "stuwa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1),		"d,[1+i]o", F_ALIAS, v9 },
-{ "stuwa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1),		"d,[i+1]o", F_ALIAS, v9 },
-{ "stuwa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|RS1_G0,	"d,[i]o", F_ALIAS, v9 },
-{ "stuwa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|SIMM13(~0),	"d,[1]o", F_ALIAS, v9 }, /* st d,[rs1+0] */
-
-{ "stb",	F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI(~0),	"d,[1+2]", 0, v6 },
-{ "stb",	F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI_RS2(~0),	"d,[1]", 0, v6 }, /* stb d,[rs1+%g0] */
-{ "stb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1),		"d,[1+i]", 0, v6 },
-{ "stb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1),		"d,[i+1]", 0, v6 },
-{ "stb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RS1_G0,	"d,[i]", 0, v6 },
-{ "stb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|SIMM13(~0),	"d,[1]", 0, v6 }, /* stb d,[rs1+0] */
-
-{ "stsb",	F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI(~0),	"d,[1+2]", F_ALIAS, v6 },
-{ "stsb",	F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI_RS2(~0),	"d,[1]", F_ALIAS, v6 }, /* stb d,[rs1+%g0] */
-{ "stsb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1),		"d,[1+i]", F_ALIAS, v6 },
-{ "stsb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1),		"d,[i+1]", F_ALIAS, v6 },
-{ "stsb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RS1_G0,	"d,[i]", F_ALIAS, v6 },
-{ "stsb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|SIMM13(~0),	"d,[1]", F_ALIAS, v6 }, /* stb d,[rs1+0] */
-{ "stub",	F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI(~0),	"d,[1+2]", F_ALIAS, v6 },
-{ "stub",	F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI_RS2(~0),	"d,[1]", F_ALIAS, v6 }, /* stb d,[rs1+%g0] */
-{ "stub",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1),		"d,[1+i]", F_ALIAS, v6 },
-{ "stub",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1),		"d,[i+1]", F_ALIAS, v6 },
-{ "stub",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RS1_G0,	"d,[i]", F_ALIAS, v6 },
-{ "stub",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|SIMM13(~0),	"d,[1]", F_ALIAS, v6 }, /* stb d,[rs1+0] */
-
-{ "stba",	F3(3, 0x15, 0), F3(~3, ~0x15, ~0),		"d,[1+2]A", 0, v6 },
-{ "stba",	F3(3, 0x15, 0), F3(~3, ~0x15, ~0)|RS2(~0),	"d,[1]A", 0, v6 }, /* stba d,[rs1+%g0] */
-{ "stba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1),		"d,[1+i]o", 0, v9 },
-{ "stba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1),		"d,[i+1]o", 0, v9 },
-{ "stba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|RS1_G0,	"d,[i]o", 0, v9 },
-{ "stba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|SIMM13(~0),	"d,[1]o", 0, v9 }, /* stb d,[rs1+0] */
-
-{ "stsba",	F3(3, 0x15, 0), F3(~3, ~0x15, ~0),		"d,[1+2]A", F_ALIAS, v6 },
-{ "stsba",	F3(3, 0x15, 0), F3(~3, ~0x15, ~0)|RS2(~0),	"d,[1]A", F_ALIAS, v6 }, /* stba d,[rs1+%g0] */
-{ "stsba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1),		"d,[1+i]o", F_ALIAS, v9 },
-{ "stsba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1),		"d,[i+1]o", F_ALIAS, v9 },
-{ "stsba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|RS1_G0,	"d,[i]o", F_ALIAS, v9 },
-{ "stsba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|SIMM13(~0),	"d,[1]o", F_ALIAS, v9 }, /* stb d,[rs1+0] */
-{ "stuba",	F3(3, 0x15, 0), F3(~3, ~0x15, ~0),		"d,[1+2]A", F_ALIAS, v6 },
-{ "stuba",	F3(3, 0x15, 0), F3(~3, ~0x15, ~0)|RS2(~0),	"d,[1]A", F_ALIAS, v6 }, /* stba d,[rs1+%g0] */
-{ "stuba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1),		"d,[1+i]o", F_ALIAS, v9 },
-{ "stuba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1),		"d,[i+1]o", F_ALIAS, v9 },
-{ "stuba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|RS1_G0,	"d,[i]o", F_ALIAS, v9 },
-{ "stuba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|SIMM13(~0),	"d,[1]o", F_ALIAS, v9 }, /* stb d,[rs1+0] */
-
-{ "std",	F3(3, 0x07, 0), F3(~3, ~0x07, ~0)|ASI(~0),	"d,[1+2]", 0, v6 },
-{ "std",	F3(3, 0x07, 0), F3(~3, ~0x07, ~0)|ASI_RS2(~0),	"d,[1]", 0, v6 }, /* std d,[rs1+%g0] */
-{ "std",	F3(3, 0x07, 1), F3(~3, ~0x07, ~1),		"d,[1+i]", 0, v6 },
-{ "std",	F3(3, 0x07, 1), F3(~3, ~0x07, ~1),		"d,[i+1]", 0, v6 },
-{ "std",	F3(3, 0x07, 1), F3(~3, ~0x07, ~1)|RS1_G0,	"d,[i]", 0, v6 },
-{ "std",	F3(3, 0x07, 1), F3(~3, ~0x07, ~1)|SIMM13(~0),	"d,[1]", 0, v6 }, /* std d,[rs1+0] */
-
-{ "std",	F3(3, 0x26, 0), F3(~3, ~0x26, ~0)|ASI(~0),	"q,[1+2]", 0, v6notv9 },
-{ "std",	F3(3, 0x26, 0), F3(~3, ~0x26, ~0)|ASI_RS2(~0),	"q,[1]", 0, v6notv9 }, /* std d,[rs1+%g0] */
-{ "std",	F3(3, 0x26, 1), F3(~3, ~0x26, ~1),		"q,[1+i]", 0, v6notv9 },
-{ "std",	F3(3, 0x26, 1), F3(~3, ~0x26, ~1),		"q,[i+1]", 0, v6notv9 },
-{ "std",	F3(3, 0x26, 1), F3(~3, ~0x26, ~1)|RS1_G0,	"q,[i]", 0, v6notv9 },
-{ "std",	F3(3, 0x26, 1), F3(~3, ~0x26, ~1)|SIMM13(~0),	"q,[1]", 0, v6notv9 }, /* std d,[rs1+0] */
-{ "std",	F3(3, 0x27, 0), F3(~3, ~0x27, ~0)|ASI(~0),	"H,[1+2]", 0, v6 },
-{ "std",	F3(3, 0x27, 0), F3(~3, ~0x27, ~0)|ASI_RS2(~0),	"H,[1]", 0, v6 }, /* std d,[rs1+%g0] */
-{ "std",	F3(3, 0x27, 1), F3(~3, ~0x27, ~1),		"H,[1+i]", 0, v6 },
-{ "std",	F3(3, 0x27, 1), F3(~3, ~0x27, ~1),		"H,[i+1]", 0, v6 },
-{ "std",	F3(3, 0x27, 1), F3(~3, ~0x27, ~1)|RS1_G0,	"H,[i]", 0, v6 },
-{ "std",	F3(3, 0x27, 1), F3(~3, ~0x27, ~1)|SIMM13(~0),	"H,[1]", 0, v6 }, /* std d,[rs1+0] */
-
-{ "std",	F3(3, 0x36, 0), F3(~3, ~0x36, ~0)|ASI(~0),	"Q,[1+2]", 0, v6notv9 },
-{ "std",	F3(3, 0x36, 0), F3(~3, ~0x36, ~0)|ASI_RS2(~0),	"Q,[1]", 0, v6notv9 }, /* std d,[rs1+%g0] */
-{ "std",	F3(3, 0x36, 1), F3(~3, ~0x36, ~1),		"Q,[1+i]", 0, v6notv9 },
-{ "std",	F3(3, 0x36, 1), F3(~3, ~0x36, ~1),		"Q,[i+1]", 0, v6notv9 },
-{ "std",	F3(3, 0x36, 1), F3(~3, ~0x36, ~1)|RS1_G0,	"Q,[i]", 0, v6notv9 },
-{ "std",	F3(3, 0x36, 1), F3(~3, ~0x36, ~1)|SIMM13(~0),	"Q,[1]", 0, v6notv9 }, /* std d,[rs1+0] */
-{ "std",	F3(3, 0x37, 0), F3(~3, ~0x37, ~0)|ASI(~0),	"D,[1+2]", 0, v6notv9 },
-{ "std",	F3(3, 0x37, 0), F3(~3, ~0x37, ~0)|ASI_RS2(~0),	"D,[1]", 0, v6notv9 }, /* std d,[rs1+%g0] */
-{ "std",	F3(3, 0x37, 1), F3(~3, ~0x37, ~1),		"D,[1+i]", 0, v6notv9 },
-{ "std",	F3(3, 0x37, 1), F3(~3, ~0x37, ~1),		"D,[i+1]", 0, v6notv9 },
-{ "std",	F3(3, 0x37, 1), F3(~3, ~0x37, ~1)|RS1_G0,	"D,[i]", 0, v6notv9 },
-{ "std",	F3(3, 0x37, 1), F3(~3, ~0x37, ~1)|SIMM13(~0),	"D,[1]", 0, v6notv9 }, /* std d,[rs1+0] */
-
-{ "spilld",	F3(3, 0x07, 0), F3(~3, ~0x07, ~0)|ASI(~0),	"d,[1+2]", F_ALIAS, v6 },
-{ "spilld",	F3(3, 0x07, 0), F3(~3, ~0x07, ~0)|ASI_RS2(~0),	"d,[1]", F_ALIAS, v6 }, /* std d,[rs1+%g0] */
-{ "spilld",	F3(3, 0x07, 1), F3(~3, ~0x07, ~1),		"d,[1+i]", F_ALIAS, v6 },
-{ "spilld",	F3(3, 0x07, 1), F3(~3, ~0x07, ~1),		"d,[i+1]", F_ALIAS, v6 },
-{ "spilld",	F3(3, 0x07, 1), F3(~3, ~0x07, ~1)|RS1_G0,	"d,[i]", F_ALIAS, v6 },
-{ "spilld",	F3(3, 0x07, 1), F3(~3, ~0x07, ~1)|SIMM13(~0),	"d,[1]", F_ALIAS, v6 }, /* std d,[rs1+0] */
-
-{ "stda",	F3(3, 0x17, 0), F3(~3, ~0x17, ~0),		"d,[1+2]A", 0, v6 },
-{ "stda",	F3(3, 0x17, 0), F3(~3, ~0x17, ~0)|RS2(~0),	"d,[1]A", 0, v6 }, /* stda d,[rs1+%g0] */
-{ "stda",	F3(3, 0x17, 1), F3(~3, ~0x17, ~1),		"d,[1+i]o", 0, v9 },
-{ "stda",	F3(3, 0x17, 1), F3(~3, ~0x17, ~1),		"d,[i+1]o", 0, v9 },
-{ "stda",	F3(3, 0x17, 1), F3(~3, ~0x17, ~1)|RS1_G0,	"d,[i]o", 0, v9 },
-{ "stda",	F3(3, 0x17, 1), F3(~3, ~0x17, ~1)|SIMM13(~0),	"d,[1]o", 0, v9 }, /* std d,[rs1+0] */
-{ "stda",	F3(3, 0x37, 0), F3(~3, ~0x37, ~0),		"H,[1+2]A", 0, v9 },
-{ "stda",	F3(3, 0x37, 0), F3(~3, ~0x37, ~0)|RS2(~0),	"H,[1]A", 0, v9 }, /* stda d,[rs1+%g0] */
-{ "stda",	F3(3, 0x37, 1), F3(~3, ~0x37, ~1),		"H,[1+i]o", 0, v9 },
-{ "stda",	F3(3, 0x37, 1), F3(~3, ~0x37, ~1),		"H,[i+1]o", 0, v9 },
-{ "stda",	F3(3, 0x37, 1), F3(~3, ~0x37, ~1)|RS1_G0,	"H,[i]o", 0, v9 },
-{ "stda",	F3(3, 0x37, 1), F3(~3, ~0x37, ~1)|SIMM13(~0),	"H,[1]o", 0, v9 }, /* std d,[rs1+0] */
-
-{ "sth",	F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI(~0),	"d,[1+2]", 0, v6 },
-{ "sth",	F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI_RS2(~0),	"d,[1]", 0, v6 }, /* sth d,[rs1+%g0] */
-{ "sth",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1),		"d,[1+i]", 0, v6 },
-{ "sth",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1),		"d,[i+1]", 0, v6 },
-{ "sth",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RS1_G0,	"d,[i]", 0, v6 },
-{ "sth",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|SIMM13(~0),	"d,[1]", 0, v6 }, /* sth d,[rs1+0] */
-
-{ "stsh",	F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI(~0),	"d,[1+2]", F_ALIAS, v6 },
-{ "stsh",	F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI_RS2(~0),	"d,[1]", F_ALIAS, v6 }, /* sth d,[rs1+%g0] */
-{ "stsh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1),		"d,[1+i]", F_ALIAS, v6 },
-{ "stsh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1),		"d,[i+1]", F_ALIAS, v6 },
-{ "stsh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RS1_G0,	"d,[i]", F_ALIAS, v6 },
-{ "stsh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|SIMM13(~0),	"d,[1]", F_ALIAS, v6 }, /* sth d,[rs1+0] */
-{ "stuh",	F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI(~0),	"d,[1+2]", F_ALIAS, v6 },
-{ "stuh",	F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI_RS2(~0),	"d,[1]", F_ALIAS, v6 }, /* sth d,[rs1+%g0] */
-{ "stuh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1),		"d,[1+i]", F_ALIAS, v6 },
-{ "stuh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1),		"d,[i+1]", F_ALIAS, v6 },
-{ "stuh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RS1_G0,	"d,[i]", F_ALIAS, v6 },
-{ "stuh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|SIMM13(~0),	"d,[1]", F_ALIAS, v6 }, /* sth d,[rs1+0] */
-
-{ "stha",	F3(3, 0x16, 0), F3(~3, ~0x16, ~0),		"d,[1+2]A", 0, v6 },
-{ "stha",	F3(3, 0x16, 0), F3(~3, ~0x16, ~0)|RS2(~0),	"d,[1]A", 0, v6 }, /* stha ,[rs1+%g0] */
-{ "stha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1),		"d,[1+i]o", 0, v9 },
-{ "stha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1),		"d,[i+1]o", 0, v9 },
-{ "stha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|RS1_G0,	"d,[i]o", 0, v9 },
-{ "stha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|SIMM13(~0),	"d,[1]o", 0, v9 }, /* sth d,[rs1+0] */
-
-{ "stsha",	F3(3, 0x16, 0), F3(~3, ~0x16, ~0),		"d,[1+2]A", F_ALIAS, v6 },
-{ "stsha",	F3(3, 0x16, 0), F3(~3, ~0x16, ~0)|RS2(~0),	"d,[1]A", F_ALIAS, v6 }, /* stha ,[rs1+%g0] */
-{ "stsha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1),		"d,[1+i]o", F_ALIAS, v9 },
-{ "stsha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1),		"d,[i+1]o", F_ALIAS, v9 },
-{ "stsha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|RS1_G0,	"d,[i]o", F_ALIAS, v9 },
-{ "stsha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|SIMM13(~0),	"d,[1]o", F_ALIAS, v9 }, /* sth d,[rs1+0] */
-{ "stuha",	F3(3, 0x16, 0), F3(~3, ~0x16, ~0),		"d,[1+2]A", F_ALIAS, v6 },
-{ "stuha",	F3(3, 0x16, 0), F3(~3, ~0x16, ~0)|RS2(~0),	"d,[1]A", F_ALIAS, v6 }, /* stha ,[rs1+%g0] */
-{ "stuha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1),		"d,[1+i]o", F_ALIAS, v9 },
-{ "stuha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1),		"d,[i+1]o", F_ALIAS, v9 },
-{ "stuha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|RS1_G0,	"d,[i]o", F_ALIAS, v9 },
-{ "stuha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|SIMM13(~0),	"d,[1]o", F_ALIAS, v9 }, /* sth d,[rs1+0] */
-
-{ "stx",	F3(3, 0x0e, 0), F3(~3, ~0x0e, ~0)|ASI(~0),	"d,[1+2]", 0, v9 },
-{ "stx",	F3(3, 0x0e, 0), F3(~3, ~0x0e, ~0)|ASI_RS2(~0),	"d,[1]", 0, v9 }, /* stx d,[rs1+%g0] */
-{ "stx",	F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1),		"d,[1+i]", 0, v9 },
-{ "stx",	F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1),		"d,[i+1]", 0, v9 },
-{ "stx",	F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RS1_G0,	"d,[i]", 0, v9 },
-{ "stx",	F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|SIMM13(~0),	"d,[1]", 0, v9 }, /* stx d,[rs1+0] */
-
-{ "stx",	F3(3, 0x25, 0)|RD(1), F3(~3, ~0x25, ~0)|ASI(~0)|RD(~1),	"F,[1+2]", 0, v9 },
-{ "stx",	F3(3, 0x25, 0)|RD(1), F3(~3, ~0x25, ~0)|ASI_RS2(~0)|RD(~1),"F,[1]", 0, v9 }, /* stx d,[rs1+%g0] */
-{ "stx",	F3(3, 0x25, 1)|RD(1), F3(~3, ~0x25, ~1)|RD(~1),		"F,[1+i]", 0, v9 },
-{ "stx",	F3(3, 0x25, 1)|RD(1), F3(~3, ~0x25, ~1)|RD(~1),		"F,[i+1]", 0, v9 },
-{ "stx",	F3(3, 0x25, 1)|RD(1), F3(~3, ~0x25, ~1)|RS1_G0|RD(~1),	"F,[i]", 0, v9 },
-{ "stx",	F3(3, 0x25, 1)|RD(1), F3(~3, ~0x25, ~1)|SIMM13(~0)|RD(~1),"F,[1]", 0, v9 }, /* stx d,[rs1+0] */
-
-{ "stxa",	F3(3, 0x1e, 0), F3(~3, ~0x1e, ~0),		"d,[1+2]A", 0, v9 },
-{ "stxa",	F3(3, 0x1e, 0), F3(~3, ~0x1e, ~0)|RS2(~0),	"d,[1]A", 0, v9 }, /* stxa d,[rs1+%g0] */
-{ "stxa",	F3(3, 0x1e, 1), F3(~3, ~0x1e, ~1),		"d,[1+i]o", 0, v9 },
-{ "stxa",	F3(3, 0x1e, 1), F3(~3, ~0x1e, ~1),		"d,[i+1]o", 0, v9 },
-{ "stxa",	F3(3, 0x1e, 1), F3(~3, ~0x1e, ~1)|RS1_G0,	"d,[i]o", 0, v9 },
-{ "stxa",	F3(3, 0x1e, 1), F3(~3, ~0x1e, ~1)|SIMM13(~0),	"d,[1]o", 0, v9 }, /* stx d,[rs1+0] */
-
-{ "stq",	F3(3, 0x26, 0), F3(~3, ~0x26, ~0)|ASI(~0),	"J,[1+2]", 0, v9 },
-{ "stq",	F3(3, 0x26, 0), F3(~3, ~0x26, ~0)|ASI_RS2(~0),	"J,[1]", 0, v9 }, /* stq [rs1+%g0] */
-{ "stq",	F3(3, 0x26, 1), F3(~3, ~0x26, ~1),		"J,[1+i]", 0, v9 },
-{ "stq",	F3(3, 0x26, 1), F3(~3, ~0x26, ~1),		"J,[i+1]", 0, v9 },
-{ "stq",	F3(3, 0x26, 1), F3(~3, ~0x26, ~1)|RS1_G0,	"J,[i]", 0, v9 },
-{ "stq",	F3(3, 0x26, 1), F3(~3, ~0x26, ~1)|SIMM13(~0),	"J,[1]", 0, v9 }, /* stq [rs1+0] */
-
-{ "stqa",	F3(3, 0x36, 0), F3(~3, ~0x36, ~0)|ASI(~0),	"J,[1+2]A", 0, v9 },
-{ "stqa",	F3(3, 0x36, 0), F3(~3, ~0x36, ~0)|ASI_RS2(~0),	"J,[1]A", 0, v9 }, /* stqa [rs1+%g0] */
-{ "stqa",	F3(3, 0x36, 1), F3(~3, ~0x36, ~1),		"J,[1+i]o", 0, v9 },
-{ "stqa",	F3(3, 0x36, 1), F3(~3, ~0x36, ~1),		"J,[i+1]o", 0, v9 },
-{ "stqa",	F3(3, 0x36, 1), F3(~3, ~0x36, ~1)|RS1_G0,	"J,[i]o", 0, v9 },
-{ "stqa",	F3(3, 0x36, 1), F3(~3, ~0x36, ~1)|SIMM13(~0),	"J,[1]o", 0, v9 }, /* stqa [rs1+0] */
-
-{ "swap",	F3(3, 0x0f, 0), F3(~3, ~0x0f, ~0)|ASI(~0),	"[1+2],d", 0, v7 },
-{ "swap",	F3(3, 0x0f, 0), F3(~3, ~0x0f, ~0)|ASI_RS2(~0),	"[1],d", 0, v7 }, /* swap [rs1+%g0],d */
-{ "swap",	F3(3, 0x0f, 1), F3(~3, ~0x0f, ~1),		"[1+i],d", 0, v7 },
-{ "swap",	F3(3, 0x0f, 1), F3(~3, ~0x0f, ~1),		"[i+1],d", 0, v7 },
-{ "swap",	F3(3, 0x0f, 1), F3(~3, ~0x0f, ~1)|RS1_G0,	"[i],d", 0, v7 },
-{ "swap",	F3(3, 0x0f, 1), F3(~3, ~0x0f, ~1)|SIMM13(~0),	"[1],d", 0, v7 }, /* swap [rs1+0],d */
-
-{ "swapa",	F3(3, 0x1f, 0), F3(~3, ~0x1f, ~0),		"[1+2]A,d", 0, v7 },
-{ "swapa",	F3(3, 0x1f, 0), F3(~3, ~0x1f, ~0)|RS2(~0),	"[1]A,d", 0, v7 }, /* swapa [rs1+%g0],d */
-{ "swapa",	F3(3, 0x1f, 1), F3(~3, ~0x1f, ~1),		"[1+i]o,d", 0, v9 },
-{ "swapa",	F3(3, 0x1f, 1), F3(~3, ~0x1f, ~1),		"[i+1]o,d", 0, v9 },
-{ "swapa",	F3(3, 0x1f, 1), F3(~3, ~0x1f, ~1)|RS1_G0,	"[i]o,d", 0, v9 },
-{ "swapa",	F3(3, 0x1f, 1), F3(~3, ~0x1f, ~1)|SIMM13(~0),	"[1]o,d", 0, v9 }, /* swap [rs1+0],d */
-
-{ "restore",	F3(2, 0x3d, 0), F3(~2, ~0x3d, ~0)|ASI(~0),			"1,2,d", 0, v6 },
-{ "restore",	F3(2, 0x3d, 0), F3(~2, ~0x3d, ~0)|RD_G0|RS1_G0|ASI_RS2(~0),	"", 0, v6 }, /* restore %g0,%g0,%g0 */
-{ "restore",	F3(2, 0x3d, 1), F3(~2, ~0x3d, ~1),				"1,i,d", 0, v6 },
-{ "restore",	F3(2, 0x3d, 1), F3(~2, ~0x3d, ~1)|RD_G0|RS1_G0|SIMM13(~0),	"", 0, v6 }, /* restore %g0,0,%g0 */
-
-{ "rett",	F3(2, 0x39, 0), F3(~2, ~0x39, ~0)|RD_G0|ASI(~0),	"1+2", F_UNBR|F_DELAYED, v6 }, /* rett rs1+rs2 */
-{ "rett",	F3(2, 0x39, 0), F3(~2, ~0x39, ~0)|RD_G0|ASI_RS2(~0),	"1", F_UNBR|F_DELAYED, v6 },	/* rett rs1,%g0 */
-{ "rett",	F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0,		"1+i", F_UNBR|F_DELAYED, v6 }, /* rett rs1+X */
-{ "rett",	F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0,		"i+1", F_UNBR|F_DELAYED, v6 }, /* rett X+rs1 */
-{ "rett",	F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0|RS1_G0,		"i", F_UNBR|F_DELAYED, v6 }, /* rett X+rs1 */
-{ "rett",	F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0|RS1_G0,		"i", F_UNBR|F_DELAYED, v6 },	/* rett X */
-{ "rett",	F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0|SIMM13(~0),	"1", F_UNBR|F_DELAYED, v6 },	/* rett rs1+0 */
-
-{ "save",	F3(2, 0x3c, 0), F3(~2, ~0x3c, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "save",	F3(2, 0x3c, 1), F3(~2, ~0x3c, ~1),		"1,i,d", 0, v6 },
-{ "save",	F3(2, 0x3c, 1), F3(~2, ~0x3c, ~1),		"i,1,d", 0, v6 }, /* Sun assembler compatibility */
-{ "save",	0x81e00000,	~0x81e00000,			"", F_ALIAS, v6 },
-
-{ "ret",  F3(2, 0x38, 1)|RS1(0x1f)|SIMM13(8), F3(~2, ~0x38, ~1)|SIMM13(~8),	       "", F_UNBR|F_DELAYED, v6 }, /* jmpl %i7+8,%g0 */
-{ "retl", F3(2, 0x38, 1)|RS1(0x0f)|SIMM13(8), F3(~2, ~0x38, ~1)|RS1(~0x0f)|SIMM13(~8), "", F_UNBR|F_DELAYED, v6 }, /* jmpl %o7+8,%g0 */
-
-{ "jmpl",	F3(2, 0x38, 0), F3(~2, ~0x38, ~0)|ASI(~0),	"1+2,d", F_JSR|F_DELAYED, v6 },
-{ "jmpl",	F3(2, 0x38, 0), F3(~2, ~0x38, ~0)|ASI_RS2(~0),	"1,d", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+%g0,d */
-{ "jmpl",	F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|SIMM13(~0),	"1,d", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+0,d */
-{ "jmpl",	F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RS1_G0,	"i,d", F_JSR|F_DELAYED, v6 }, /* jmpl %g0+i,d */
-{ "jmpl",	F3(2, 0x38, 1), F3(~2, ~0x38, ~1),		"1+i,d", F_JSR|F_DELAYED, v6 },
-{ "jmpl",	F3(2, 0x38, 1), F3(~2, ~0x38, ~1),		"i+1,d", F_JSR|F_DELAYED, v6 },
-
-{ "done",	F3(2, 0x3e, 0)|RD(0), F3(~2, ~0x3e, ~0)|RD(~0)|RS1_G0|SIMM13(~0),	"", 0, v9 },
-{ "retry",	F3(2, 0x3e, 0)|RD(1), F3(~2, ~0x3e, ~0)|RD(~1)|RS1_G0|SIMM13(~0),	"", 0, v9 },
-{ "saved",	F3(2, 0x31, 0)|RD(0), F3(~2, ~0x31, ~0)|RD(~0)|RS1_G0|SIMM13(~0),	"", 0, v9 },
-{ "restored",	F3(2, 0x31, 0)|RD(1), F3(~2, ~0x31, ~0)|RD(~1)|RS1_G0|SIMM13(~0),	"", 0, v9 },
-{ "allclean",	F3(2, 0x31, 0)|RD(2), F3(~2, ~0x31, ~0)|RD(~2)|RS1_G0|SIMM13(~0),	"", 0, v9 },
-{ "otherw",	F3(2, 0x31, 0)|RD(3), F3(~2, ~0x31, ~0)|RD(~3)|RS1_G0|SIMM13(~0),	"", 0, v9 },
-{ "normalw",	F3(2, 0x31, 0)|RD(4), F3(~2, ~0x31, ~0)|RD(~4)|RS1_G0|SIMM13(~0),	"", 0, v9 },
-{ "invalw",	F3(2, 0x31, 0)|RD(5), F3(~2, ~0x31, ~0)|RD(~5)|RS1_G0|SIMM13(~0),	"", 0, v9 },
-{ "sir",	F3(2, 0x30, 1)|RD(0xf), F3(~2, ~0x30, ~1)|RD(~0xf)|RS1_G0,		"i", 0, v9 },
-
-{ "flush",	F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|ASI(~0),	"1+2", 0, v8 },
-{ "flush",	F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|ASI_RS2(~0),	"1", 0, v8 }, /* flush rs1+%g0 */
-{ "flush",	F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1)|SIMM13(~0),	"1", 0, v8 }, /* flush rs1+0 */
-{ "flush",	F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1)|RS1_G0,	"i", 0, v8 }, /* flush %g0+i */
-{ "flush",	F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1),		"1+i", 0, v8 },
-{ "flush",	F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1),		"i+1", 0, v8 },
+{ "lduw",	F3(3, 0x00, 0), F3(~3, ~0x00, ~0),		"[1+2],d", F_ALIAS, 0, v9 },
+{ "lduw",	F3(3, 0x00, 0), F3(~3, ~0x00, ~0)|RS2_G0,	"[1],d", F_ALIAS, 0, v9 }, /* ld [rs1+%g0],d */
+{ "lduw",	F3(3, 0x00, 1), F3(~3, ~0x00, ~1),		"[1+i],d", F_ALIAS, 0, v9 },
+{ "lduw",	F3(3, 0x00, 1), F3(~3, ~0x00, ~1),		"[i+1],d", F_ALIAS, 0, v9 },
+{ "lduw",	F3(3, 0x00, 1), F3(~3, ~0x00, ~1)|RS1_G0,	"[i],d", F_ALIAS, 0, v9 },
+{ "lduw",	F3(3, 0x00, 1), F3(~3, ~0x00, ~1)|SIMM13(~0),	"[1],d", F_ALIAS, 0, v9 }, /* ld [rs1+0],d */
+
+{ "ldd",	F3(3, 0x03, 0), F3(~3, ~0x03, ~0)|ASI(~0),	"[1+2],d", 0, 0, v6 },
+{ "ldd",	F3(3, 0x03, 0), F3(~3, ~0x03, ~0)|ASI_RS2(~0),	"[1],d", 0, 0, v6 }, /* ldd [rs1+%g0],d */
+{ "ldd",	F3(3, 0x03, 1), F3(~3, ~0x03, ~1),		"[1+i],d", 0, 0, v6 },
+{ "ldd",	F3(3, 0x03, 1), F3(~3, ~0x03, ~1),		"[i+1],d", 0, 0, v6 },
+{ "ldd",	F3(3, 0x03, 1), F3(~3, ~0x03, ~1)|RS1_G0,	"[i],d", 0, 0, v6 },
+{ "ldd",	F3(3, 0x03, 1), F3(~3, ~0x03, ~1)|SIMM13(~0),	"[1],d", 0, 0, v6 }, /* ldd [rs1+0],d */
+{ "ldd",	F3(3, 0x23, 0), F3(~3, ~0x23, ~0)|ASI(~0),	"[1+2],H", 0, 0, v6 },
+{ "ldd",	F3(3, 0x23, 0), F3(~3, ~0x23, ~0)|ASI_RS2(~0),	"[1],H", 0, 0, v6 }, /* ldd [rs1+%g0],d */
+{ "ldd",	F3(3, 0x23, 1), F3(~3, ~0x23, ~1),		"[1+i],H", 0, 0, v6 },
+{ "ldd",	F3(3, 0x23, 1), F3(~3, ~0x23, ~1),		"[i+1],H", 0, 0, v6 },
+{ "ldd",	F3(3, 0x23, 1), F3(~3, ~0x23, ~1)|RS1_G0,	"[i],H", 0, 0, v6 },
+{ "ldd",	F3(3, 0x23, 1), F3(~3, ~0x23, ~1)|SIMM13(~0),	"[1],H", 0, 0, v6 }, /* ldd [rs1+0],d */
+
+{ "ldd",	F3(3, 0x33, 0), F3(~3, ~0x33, ~0)|ASI(~0),	"[1+2],D", 0, 0, v6notv9 },
+{ "ldd",	F3(3, 0x33, 0), F3(~3, ~0x33, ~0)|ASI_RS2(~0),	"[1],D", 0, 0, v6notv9 }, /* ldd [rs1+%g0],d */
+{ "ldd",	F3(3, 0x33, 1), F3(~3, ~0x33, ~1),		"[1+i],D", 0, 0, v6notv9 },
+{ "ldd",	F3(3, 0x33, 1), F3(~3, ~0x33, ~1),		"[i+1],D", 0, 0, v6notv9 },
+{ "ldd",	F3(3, 0x33, 1), F3(~3, ~0x33, ~1)|RS1_G0,	"[i],D", 0, 0, v6notv9 },
+{ "ldd",	F3(3, 0x33, 1), F3(~3, ~0x33, ~1)|SIMM13(~0),	"[1],D", 0, 0, v6notv9 }, /* ldd [rs1+0],d */
+
+{ "ldq",	F3(3, 0x22, 0), F3(~3, ~0x22, ~0)|ASI(~0),	"[1+2],J", 0, 0, v9 },
+{ "ldq",	F3(3, 0x22, 0), F3(~3, ~0x22, ~0)|ASI_RS2(~0),	"[1],J", 0, 0, v9 }, /* ldd [rs1+%g0],d */
+{ "ldq",	F3(3, 0x22, 1), F3(~3, ~0x22, ~1),		"[1+i],J", 0, 0, v9 },
+{ "ldq",	F3(3, 0x22, 1), F3(~3, ~0x22, ~1),		"[i+1],J", 0, 0, v9 },
+{ "ldq",	F3(3, 0x22, 1), F3(~3, ~0x22, ~1)|RS1_G0,	"[i],J", 0, 0, v9 },
+{ "ldq",	F3(3, 0x22, 1), F3(~3, ~0x22, ~1)|SIMM13(~0),	"[1],J", 0, 0, v9 }, /* ldd [rs1+0],d */
+
+{ "ldsb",	F3(3, 0x09, 0), F3(~3, ~0x09, ~0)|ASI(~0),	"[1+2],d", 0, 0, v6 },
+{ "ldsb",	F3(3, 0x09, 0), F3(~3, ~0x09, ~0)|ASI_RS2(~0),	"[1],d", 0, 0, v6 }, /* ldsb [rs1+%g0],d */
+{ "ldsb",	F3(3, 0x09, 1), F3(~3, ~0x09, ~1),		"[1+i],d", 0, 0, v6 },
+{ "ldsb",	F3(3, 0x09, 1), F3(~3, ~0x09, ~1),		"[i+1],d", 0, 0, v6 },
+{ "ldsb",	F3(3, 0x09, 1), F3(~3, ~0x09, ~1)|RS1_G0,	"[i],d", 0, 0, v6 },
+{ "ldsb",	F3(3, 0x09, 1), F3(~3, ~0x09, ~1)|SIMM13(~0),	"[1],d", 0, 0, v6 }, /* ldsb [rs1+0],d */
+
+{ "ldsh",	F3(3, 0x0a, 0), F3(~3, ~0x0a, ~0)|ASI_RS2(~0),	"[1],d", 0, 0, v6 }, /* ldsh [rs1+%g0],d */
+{ "ldsh",	F3(3, 0x0a, 0), F3(~3, ~0x0a, ~0)|ASI(~0),	"[1+2],d", 0, 0, v6 },
+{ "ldsh",	F3(3, 0x0a, 1), F3(~3, ~0x0a, ~1),		"[1+i],d", 0, 0, v6 },
+{ "ldsh",	F3(3, 0x0a, 1), F3(~3, ~0x0a, ~1),		"[i+1],d", 0, 0, v6 },
+{ "ldsh",	F3(3, 0x0a, 1), F3(~3, ~0x0a, ~1)|RS1_G0,	"[i],d", 0, 0, v6 },
+{ "ldsh",	F3(3, 0x0a, 1), F3(~3, ~0x0a, ~1)|SIMM13(~0),	"[1],d", 0, 0, v6 }, /* ldsh [rs1+0],d */
+
+{ "ldstub",	F3(3, 0x0d, 0), F3(~3, ~0x0d, ~0)|ASI(~0),	"[1+2],d", 0, 0, v6 },
+{ "ldstub",	F3(3, 0x0d, 0), F3(~3, ~0x0d, ~0)|ASI_RS2(~0),	"[1],d", 0, 0, v6 }, /* ldstub [rs1+%g0],d */
+{ "ldstub",	F3(3, 0x0d, 1), F3(~3, ~0x0d, ~1),		"[1+i],d", 0, 0, v6 },
+{ "ldstub",	F3(3, 0x0d, 1), F3(~3, ~0x0d, ~1),		"[i+1],d", 0, 0, v6 },
+{ "ldstub",	F3(3, 0x0d, 1), F3(~3, ~0x0d, ~1)|RS1_G0,	"[i],d", 0, 0, v6 },
+{ "ldstub",	F3(3, 0x0d, 1), F3(~3, ~0x0d, ~1)|SIMM13(~0),	"[1],d", 0, 0, v6 }, /* ldstub [rs1+0],d */
+
+{ "ldsw",	F3(3, 0x08, 0), F3(~3, ~0x08, ~0)|ASI(~0),	"[1+2],d", 0, 0, v9 },
+{ "ldsw",	F3(3, 0x08, 0), F3(~3, ~0x08, ~0)|ASI_RS2(~0),	"[1],d", 0, 0, v9 }, /* ldsw [rs1+%g0],d */
+{ "ldsw",	F3(3, 0x08, 1), F3(~3, ~0x08, ~1),		"[1+i],d", 0, 0, v9 },
+{ "ldsw",	F3(3, 0x08, 1), F3(~3, ~0x08, ~1),		"[i+1],d", 0, 0, v9 },
+{ "ldsw",	F3(3, 0x08, 1), F3(~3, ~0x08, ~1)|RS1_G0,	"[i],d", 0, 0, v9 },
+{ "ldsw",	F3(3, 0x08, 1), F3(~3, ~0x08, ~1)|SIMM13(~0),	"[1],d", 0, 0, v9 }, /* ldsw [rs1+0],d */
+
+{ "ldub",	F3(3, 0x01, 0), F3(~3, ~0x01, ~0)|ASI(~0),	"[1+2],d", 0, 0, v6 },
+{ "ldub",	F3(3, 0x01, 0), F3(~3, ~0x01, ~0)|ASI_RS2(~0),	"[1],d", 0, 0, v6 }, /* ldub [rs1+%g0],d */
+{ "ldub",	F3(3, 0x01, 1), F3(~3, ~0x01, ~1),		"[1+i],d", 0, 0, v6 },
+{ "ldub",	F3(3, 0x01, 1), F3(~3, ~0x01, ~1),		"[i+1],d", 0, 0, v6 },
+{ "ldub",	F3(3, 0x01, 1), F3(~3, ~0x01, ~1)|RS1_G0,	"[i],d", 0, 0, v6 },
+{ "ldub",	F3(3, 0x01, 1), F3(~3, ~0x01, ~1)|SIMM13(~0),	"[1],d", 0, 0, v6 }, /* ldub [rs1+0],d */
+
+{ "lduh",	F3(3, 0x02, 0), F3(~3, ~0x02, ~0)|ASI(~0),	"[1+2],d", 0, 0, v6 },
+{ "lduh",	F3(3, 0x02, 0), F3(~3, ~0x02, ~0)|ASI_RS2(~0),	"[1],d", 0, 0, v6 }, /* lduh [rs1+%g0],d */
+{ "lduh",	F3(3, 0x02, 1), F3(~3, ~0x02, ~1),		"[1+i],d", 0, 0, v6 },
+{ "lduh",	F3(3, 0x02, 1), F3(~3, ~0x02, ~1),		"[i+1],d", 0, 0, v6 },
+{ "lduh",	F3(3, 0x02, 1), F3(~3, ~0x02, ~1)|RS1_G0,	"[i],d", 0, 0, v6 },
+{ "lduh",	F3(3, 0x02, 1), F3(~3, ~0x02, ~1)|SIMM13(~0),	"[1],d", 0, 0, v6 }, /* lduh [rs1+0],d */
+
+{ "ldx",	F3(3, 0x0b, 0), F3(~3, ~0x0b, ~0)|ASI(~0),	"[1+2],d", 0, 0, v9 },
+{ "ldx",	F3(3, 0x0b, 0), F3(~3, ~0x0b, ~0)|ASI_RS2(~0),	"[1],d", 0, 0, v9 }, /* ldx [rs1+%g0],d */
+{ "ldx",	F3(3, 0x0b, 1), F3(~3, ~0x0b, ~1),		"[1+i],d", 0, 0, v9 },
+{ "ldx",	F3(3, 0x0b, 1), F3(~3, ~0x0b, ~1),		"[i+1],d", 0, 0, v9 },
+{ "ldx",	F3(3, 0x0b, 1), F3(~3, ~0x0b, ~1)|RS1_G0,	"[i],d", 0, 0, v9 },
+{ "ldx",	F3(3, 0x0b, 1), F3(~3, ~0x0b, ~1)|SIMM13(~0),	"[1],d", 0, 0, v9 }, /* ldx [rs1+0],d */
+
+{ "ldx",	F3(3, 0x21, 0)|RD(1), F3(~3, ~0x21, ~0)|RD(~1),	"[1+2],F", 0, 0, v9 },
+{ "ldx",	F3(3, 0x21, 0)|RD(1), F3(~3, ~0x21, ~0)|RS2_G0|RD(~1),	"[1],F", 0, 0, v9 }, /* ld [rs1+%g0],d */
+{ "ldx",	F3(3, 0x21, 1)|RD(1), F3(~3, ~0x21, ~1)|RD(~1),	"[1+i],F", 0, 0, v9 },
+{ "ldx",	F3(3, 0x21, 1)|RD(1), F3(~3, ~0x21, ~1)|RD(~1),	"[i+1],F", 0, 0, v9 },
+{ "ldx",	F3(3, 0x21, 1)|RD(1), F3(~3, ~0x21, ~1)|RS1_G0|RD(~1),	"[i],F", 0, 0, v9 },
+{ "ldx",	F3(3, 0x21, 1)|RD(1), F3(~3, ~0x21, ~1)|SIMM13(~0)|RD(~1),"[1],F", 0, 0, v9 }, /* ld [rs1+0],d */
+
+{ "ldx", F3(3, 0x21, 0)|RD(3), F3(~3, ~0x21, ~0)|RD(~3), "[1+2],(", 0, 0, v9b },
+{ "ldx", F3(3, 0x21, 0)|RD(3), F3(~3, ~0x21, ~0)|RS2_G0|RD(~3),"[1],(", 0, 0, v9b },
+{ "ldx", F3(3, 0x21, 1)|RD(3), F3(~3, ~0x21, ~1)|RD(~3), "[1+i],(", 0, 0, v9b },
+{ "ldx", F3(3, 0x21, 1)|RD(3), F3(~3, ~0x21, ~1)|RD(~3), "[i+1],(", 0, 0, v9b },
+{ "ldx", F3(3, 0x21, 1)|RD(3), F3(~3, ~0x21, ~1)|RS1_G0|RD(~3),"[i],(", 0, 0, v9b },
+{ "ldx", F3(3, 0x21, 1)|RD(3), F3(~3, ~0x21, ~1)|SIMM13(~0)|RD(~3),"[1],(", 0, 0, v9b },
+
+{ "lda",	F3(3, 0x10, 0), F3(~3, ~0x10, ~0),		"[1+2]A,d", 0, 0, v6 },
+{ "lda",	F3(3, 0x10, 0), F3(~3, ~0x10, ~0)|RS2_G0,	"[1]A,d", 0, 0, v6 }, /* lda [rs1+%g0],d */
+{ "lda",	F3(3, 0x10, 1), F3(~3, ~0x10, ~1),		"[1+i]o,d", 0, 0, v9 },
+{ "lda",	F3(3, 0x10, 1), F3(~3, ~0x10, ~1),		"[i+1]o,d", 0, 0, v9 },
+{ "lda",	F3(3, 0x10, 1), F3(~3, ~0x10, ~1)|RS1_G0,	"[i]o,d", 0, 0, v9 },
+{ "lda",	F3(3, 0x10, 1), F3(~3, ~0x10, ~1)|SIMM13(~0),	"[1]o,d", 0, 0, v9 }, /* ld [rs1+0],d */
+{ "lda",	F3(3, 0x30, 0), F3(~3, ~0x30, ~0),		"[1+2]A,g", 0, 0, v9 },
+{ "lda",	F3(3, 0x30, 0), F3(~3, ~0x30, ~0)|RS2_G0,	"[1]A,g", 0, 0, v9 }, /* lda [rs1+%g0],d */
+{ "lda",	F3(3, 0x30, 1), F3(~3, ~0x30, ~1),		"[1+i]o,g", 0, 0, v9 },
+{ "lda",	F3(3, 0x30, 1), F3(~3, ~0x30, ~1),		"[i+1]o,g", 0, 0, v9 },
+{ "lda",	F3(3, 0x30, 1), F3(~3, ~0x30, ~1)|RS1_G0,	"[i]o,g", 0, 0, v9 },
+{ "lda",	F3(3, 0x30, 1), F3(~3, ~0x30, ~1)|SIMM13(~0),	"[1]o,g", 0, 0, v9 }, /* ld [rs1+0],d */
+
+{ "ldda",	F3(3, 0x13, 0), F3(~3, ~0x13, ~0),		"[1+2]A,d", 0, 0, v6 },
+{ "ldda",	F3(3, 0x13, 0), F3(~3, ~0x13, ~0)|RS2_G0,	"[1]A,d", 0, 0, v6 }, /* ldda [rs1+%g0],d */
+{ "ldda",	F3(3, 0x13, 1), F3(~3, ~0x13, ~1),		"[1+i]o,d", 0, 0, v9 },
+{ "ldda",	F3(3, 0x13, 1), F3(~3, ~0x13, ~1),		"[i+1]o,d", 0, 0, v9 },
+{ "ldda",	F3(3, 0x13, 1), F3(~3, ~0x13, ~1)|RS1_G0,	"[i]o,d", 0, 0, v9 },
+{ "ldda",	F3(3, 0x13, 1), F3(~3, ~0x13, ~1)|SIMM13(~0),	"[1]o,d", 0, 0, v9 }, /* ld [rs1+0],d */
+
+{ "ldda",	F3(3, 0x33, 0), F3(~3, ~0x33, ~0),		"[1+2]A,H", 0, 0, v9 },
+{ "ldda",	F3(3, 0x33, 0), F3(~3, ~0x33, ~0)|RS2_G0,	"[1]A,H", 0, 0, v9 }, /* ldda [rs1+%g0],d */
+{ "ldda",	F3(3, 0x33, 1), F3(~3, ~0x33, ~1),		"[1+i]o,H", 0, 0, v9 },
+{ "ldda",	F3(3, 0x33, 1), F3(~3, ~0x33, ~1),		"[i+1]o,H", 0, 0, v9 },
+{ "ldda",	F3(3, 0x33, 1), F3(~3, ~0x33, ~1)|RS1_G0,	"[i]o,H", 0, 0, v9 },
+{ "ldda",	F3(3, 0x33, 1), F3(~3, ~0x33, ~1)|SIMM13(~0),	"[1]o,H", 0, 0, v9 }, /* ld [rs1+0],d */
+
+{ "ldqa",	F3(3, 0x32, 0), F3(~3, ~0x32, ~0),		"[1+2]A,J", 0, 0, v9 },
+{ "ldqa",	F3(3, 0x32, 0), F3(~3, ~0x32, ~0)|RS2_G0,	"[1]A,J", 0, 0, v9 }, /* ldd [rs1+%g0],d */
+{ "ldqa",	F3(3, 0x32, 1), F3(~3, ~0x32, ~1),		"[1+i]o,J", 0, 0, v9 },
+{ "ldqa",	F3(3, 0x32, 1), F3(~3, ~0x32, ~1),		"[i+1]o,J", 0, 0, v9 },
+{ "ldqa",	F3(3, 0x32, 1), F3(~3, ~0x32, ~1)|RS1_G0,	"[i]o,J", 0, 0, v9 },
+{ "ldqa",	F3(3, 0x32, 1), F3(~3, ~0x32, ~1)|SIMM13(~0),	"[1]o,J", 0, 0, v9 }, /* ldd [rs1+0],d */
+
+{ "ldsba",	F3(3, 0x19, 0), F3(~3, ~0x19, ~0),		"[1+2]A,d", 0, 0, v6 },
+{ "ldsba",	F3(3, 0x19, 0), F3(~3, ~0x19, ~0)|RS2_G0,	"[1]A,d", 0, 0, v6 }, /* ldsba [rs1+%g0],d */
+{ "ldsba",	F3(3, 0x19, 1), F3(~3, ~0x19, ~1),		"[1+i]o,d", 0, 0, v9 },
+{ "ldsba",	F3(3, 0x19, 1), F3(~3, ~0x19, ~1),		"[i+1]o,d", 0, 0, v9 },
+{ "ldsba",	F3(3, 0x19, 1), F3(~3, ~0x19, ~1)|RS1_G0,	"[i]o,d", 0, 0, v9 },
+{ "ldsba",	F3(3, 0x19, 1), F3(~3, ~0x19, ~1)|SIMM13(~0),	"[1]o,d", 0, 0, v9 }, /* ld [rs1+0],d */
+
+{ "ldsha",	F3(3, 0x1a, 0), F3(~3, ~0x1a, ~0),		"[1+2]A,d", 0, 0, v6 },
+{ "ldsha",	F3(3, 0x1a, 0), F3(~3, ~0x1a, ~0)|RS2_G0,	"[1]A,d", 0, 0, v6 }, /* ldsha [rs1+%g0],d */
+{ "ldsha",	F3(3, 0x1a, 1), F3(~3, ~0x1a, ~1),		"[1+i]o,d", 0, 0, v9 },
+{ "ldsha",	F3(3, 0x1a, 1), F3(~3, ~0x1a, ~1),		"[i+1]o,d", 0, 0, v9 },
+{ "ldsha",	F3(3, 0x1a, 1), F3(~3, ~0x1a, ~1)|RS1_G0,	"[i]o,d", 0, 0, v9 },
+{ "ldsha",	F3(3, 0x1a, 1), F3(~3, ~0x1a, ~1)|SIMM13(~0),	"[1]o,d", 0, 0, v9 }, /* ld [rs1+0],d */
+
+{ "ldstuba",	F3(3, 0x1d, 0), F3(~3, ~0x1d, ~0),		"[1+2]A,d", 0, 0, v6 },
+{ "ldstuba",	F3(3, 0x1d, 0), F3(~3, ~0x1d, ~0)|RS2_G0,	"[1]A,d", 0, 0, v6 }, /* ldstuba [rs1+%g0],d */
+{ "ldstuba",	F3(3, 0x1d, 1), F3(~3, ~0x1d, ~1),		"[1+i]o,d", 0, 0, v9 },
+{ "ldstuba",	F3(3, 0x1d, 1), F3(~3, ~0x1d, ~1),		"[i+1]o,d", 0, 0, v9 },
+{ "ldstuba",	F3(3, 0x1d, 1), F3(~3, ~0x1d, ~1)|RS1_G0,	"[i]o,d", 0, 0, v9 },
+{ "ldstuba",	F3(3, 0x1d, 1), F3(~3, ~0x1d, ~1)|SIMM13(~0),	"[1]o,d", 0, 0, v9 }, /* ld [rs1+0],d */
+
+{ "ldswa",	F3(3, 0x18, 0), F3(~3, ~0x18, ~0),		"[1+2]A,d", 0, 0, v9 },
+{ "ldswa",	F3(3, 0x18, 0), F3(~3, ~0x18, ~0)|RS2_G0,	"[1]A,d", 0, 0, v9 }, /* lda [rs1+%g0],d */
+{ "ldswa",	F3(3, 0x18, 1), F3(~3, ~0x18, ~1),		"[1+i]o,d", 0, 0, v9 },
+{ "ldswa",	F3(3, 0x18, 1), F3(~3, ~0x18, ~1),		"[i+1]o,d", 0, 0, v9 },
+{ "ldswa",	F3(3, 0x18, 1), F3(~3, ~0x18, ~1)|RS1_G0,	"[i]o,d", 0, 0, v9 },
+{ "ldswa",	F3(3, 0x18, 1), F3(~3, ~0x18, ~1)|SIMM13(~0),	"[1]o,d", 0, 0, v9 }, /* ld [rs1+0],d */
+
+{ "lduba",	F3(3, 0x11, 0), F3(~3, ~0x11, ~0),		"[1+2]A,d", 0, 0, v6 },
+{ "lduba",	F3(3, 0x11, 0), F3(~3, ~0x11, ~0)|RS2_G0,	"[1]A,d", 0, 0, v6 }, /* lduba [rs1+%g0],d */
+{ "lduba",	F3(3, 0x11, 1), F3(~3, ~0x11, ~1),		"[1+i]o,d", 0, 0, v9 },
+{ "lduba",	F3(3, 0x11, 1), F3(~3, ~0x11, ~1),		"[i+1]o,d", 0, 0, v9 },
+{ "lduba",	F3(3, 0x11, 1), F3(~3, ~0x11, ~1)|RS1_G0,	"[i]o,d", 0, 0, v9 },
+{ "lduba",	F3(3, 0x11, 1), F3(~3, ~0x11, ~1)|SIMM13(~0),	"[1]o,d", 0, 0, v9 }, /* ld [rs1+0],d */
+
+{ "lduha",	F3(3, 0x12, 0), F3(~3, ~0x12, ~0),		"[1+2]A,d", 0, 0, v6 },
+{ "lduha",	F3(3, 0x12, 0), F3(~3, ~0x12, ~0)|RS2_G0,	"[1]A,d", 0, 0, v6 }, /* lduha [rs1+%g0],d */
+{ "lduha",	F3(3, 0x12, 1), F3(~3, ~0x12, ~1),		"[1+i]o,d", 0, 0, v9 },
+{ "lduha",	F3(3, 0x12, 1), F3(~3, ~0x12, ~1),		"[i+1]o,d", 0, 0, v9 },
+{ "lduha",	F3(3, 0x12, 1), F3(~3, ~0x12, ~1)|RS1_G0,	"[i]o,d", 0, 0, v9 },
+{ "lduha",	F3(3, 0x12, 1), F3(~3, ~0x12, ~1)|SIMM13(~0),	"[1]o,d", 0, 0, v9 }, /* ld [rs1+0],d */
+
+{ "lduwa",	F3(3, 0x10, 0), F3(~3, ~0x10, ~0),		"[1+2]A,d", F_ALIAS, 0, v9 }, /* lduwa === lda */
+{ "lduwa",	F3(3, 0x10, 0), F3(~3, ~0x10, ~0)|RS2_G0,	"[1]A,d", F_ALIAS, 0, v9 }, /* lda [rs1+%g0],d */
+{ "lduwa",	F3(3, 0x10, 1), F3(~3, ~0x10, ~1),		"[1+i]o,d", F_ALIAS, 0, v9 },
+{ "lduwa",	F3(3, 0x10, 1), F3(~3, ~0x10, ~1),		"[i+1]o,d", F_ALIAS, 0, v9 },
+{ "lduwa",	F3(3, 0x10, 1), F3(~3, ~0x10, ~1)|RS1_G0,	"[i]o,d", F_ALIAS, 0, v9 },
+{ "lduwa",	F3(3, 0x10, 1), F3(~3, ~0x10, ~1)|SIMM13(~0),	"[1]o,d", F_ALIAS, 0, v9 }, /* ld [rs1+0],d */
+
+{ "ldxa",	F3(3, 0x1b, 0), F3(~3, ~0x1b, ~0),		"[1+2]A,d", 0, 0, v9 },
+{ "ldxa",	F3(3, 0x1b, 0), F3(~3, ~0x1b, ~0)|RS2_G0,	"[1]A,d", 0, 0, v9 }, /* lda [rs1+%g0],d */
+{ "ldxa",	F3(3, 0x1b, 1), F3(~3, ~0x1b, ~1),		"[1+i]o,d", 0, 0, v9 },
+{ "ldxa",	F3(3, 0x1b, 1), F3(~3, ~0x1b, ~1),		"[i+1]o,d", 0, 0, v9 },
+{ "ldxa",	F3(3, 0x1b, 1), F3(~3, ~0x1b, ~1)|RS1_G0,	"[i]o,d", 0, 0, v9 },
+{ "ldxa",	F3(3, 0x1b, 1), F3(~3, ~0x1b, ~1)|SIMM13(~0),	"[1]o,d", 0, 0, v9 }, /* ld [rs1+0],d */
+
+{ "st",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI(~0),		"d,[1+2]", 0, 0, v6 },
+{ "st",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI_RS2(~0),		"d,[1]", 0, 0, v6 }, /* st d,[rs1+%g0] */
+{ "st",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1),			"d,[1+i]", 0, 0, v6 },
+{ "st",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1),			"d,[i+1]", 0, 0, v6 },
+{ "st",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RS1_G0,		"d,[i]", 0, 0, v6 },
+{ "st",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|SIMM13(~0),		"d,[1]", 0, 0, v6 }, /* st d,[rs1+0] */
+{ "st",	F3(3, 0x24, 0), F3(~3, ~0x24, ~0)|ASI(~0),		"g,[1+2]", 0, 0, v6 },
+{ "st",	F3(3, 0x24, 0), F3(~3, ~0x24, ~0)|ASI_RS2(~0),		"g,[1]", 0, 0, v6 }, /* st d[rs1+%g0] */
+{ "st",	F3(3, 0x24, 1), F3(~3, ~0x24, ~1),			"g,[1+i]", 0, 0, v6 },
+{ "st",	F3(3, 0x24, 1), F3(~3, ~0x24, ~1),			"g,[i+1]", 0, 0, v6 },
+{ "st",	F3(3, 0x24, 1), F3(~3, ~0x24, ~1)|RS1_G0,		"g,[i]", 0, 0, v6 },
+{ "st",	F3(3, 0x24, 1), F3(~3, ~0x24, ~1)|SIMM13(~0),		"g,[1]", 0, 0, v6 }, /* st d,[rs1+0] */
+
+{ "st",	F3(3, 0x34, 0), F3(~3, ~0x34, ~0)|ASI(~0),		"D,[1+2]", 0, 0, v6notv9 },
+{ "st",	F3(3, 0x34, 0), F3(~3, ~0x34, ~0)|ASI_RS2(~0),		"D,[1]", 0, 0, v6notv9 }, /* st d,[rs1+%g0] */
+{ "st",	F3(3, 0x34, 1), F3(~3, ~0x34, ~1),			"D,[1+i]", 0, 0, v6notv9 },
+{ "st",	F3(3, 0x34, 1), F3(~3, ~0x34, ~1),			"D,[i+1]", 0, 0, v6notv9 },
+{ "st",	F3(3, 0x34, 1), F3(~3, ~0x34, ~1)|RS1_G0,		"D,[i]", 0, 0, v6notv9 },
+{ "st",	F3(3, 0x34, 1), F3(~3, ~0x34, ~1)|SIMM13(~0),		"D,[1]", 0, 0, v6notv9 }, /* st d,[rs1+0] */
+{ "st",	F3(3, 0x35, 0), F3(~3, ~0x35, ~0)|ASI(~0),		"C,[1+2]", 0, 0, v6notv9 },
+{ "st",	F3(3, 0x35, 0), F3(~3, ~0x35, ~0)|ASI_RS2(~0),		"C,[1]", 0, 0, v6notv9 }, /* st d,[rs1+%g0] */
+{ "st",	F3(3, 0x35, 1), F3(~3, ~0x35, ~1),			"C,[1+i]", 0, 0, v6notv9 },
+{ "st",	F3(3, 0x35, 1), F3(~3, ~0x35, ~1),			"C,[i+1]", 0, 0, v6notv9 },
+{ "st",	F3(3, 0x35, 1), F3(~3, ~0x35, ~1)|RS1_G0,		"C,[i]", 0, 0, v6notv9 },
+{ "st",	F3(3, 0x35, 1), F3(~3, ~0x35, ~1)|SIMM13(~0),		"C,[1]", 0, 0, v6notv9 }, /* st d,[rs1+0] */
+
+{ "st",	F3(3, 0x25, 0), F3(~3, ~0x25, ~0)|RD_G0|ASI(~0),	"F,[1+2]", 0, 0, v6 },
+{ "st",	F3(3, 0x25, 0), F3(~3, ~0x25, ~0)|RD_G0|ASI_RS2(~0),	"F,[1]", 0, 0, v6 }, /* st d,[rs1+%g0] */
+{ "st",	F3(3, 0x25, 1), F3(~3, ~0x25, ~1)|RD_G0,		"F,[1+i]", 0, 0, v6 },
+{ "st",	F3(3, 0x25, 1), F3(~3, ~0x25, ~1)|RD_G0,		"F,[i+1]", 0, 0, v6 },
+{ "st",	F3(3, 0x25, 1), F3(~3, ~0x25, ~1)|RD_G0|RS1_G0,		"F,[i]", 0, 0, v6 },
+{ "st",	F3(3, 0x25, 1), F3(~3, ~0x25, ~1)|RD_G0|SIMM13(~0),	"F,[1]", 0, 0, v6 }, /* st d,[rs1+0] */
+
+{ "stw",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI(~0),	"d,[1+2]", F_ALIAS, 0, v9 },
+{ "stw",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI_RS2(~0),	"d,[1]", F_ALIAS, 0, v9 }, /* st d,[rs1+%g0] */
+{ "stw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1),		"d,[1+i]", F_ALIAS, 0, v9 },
+{ "stw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1),		"d,[i+1]", F_ALIAS, 0, v9 },
+{ "stw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RS1_G0,	"d,[i]", F_ALIAS, 0, v9 },
+{ "stw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|SIMM13(~0),	"d,[1]", F_ALIAS, 0, v9 }, /* st d,[rs1+0] */
+{ "stsw",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI(~0),	"d,[1+2]", F_ALIAS, 0, v9 },
+{ "stsw",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI_RS2(~0),	"d,[1]", F_ALIAS, 0, v9 }, /* st d,[rs1+%g0] */
+{ "stsw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1),		"d,[1+i]", F_ALIAS, 0, v9 },
+{ "stsw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1),		"d,[i+1]", F_ALIAS, 0, v9 },
+{ "stsw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RS1_G0,	"d,[i]", F_ALIAS, 0, v9 },
+{ "stsw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|SIMM13(~0),	"d,[1]", F_ALIAS, 0, v9 }, /* st d,[rs1+0] */
+{ "stuw",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI(~0),	"d,[1+2]", F_ALIAS, 0, v9 },
+{ "stuw",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI_RS2(~0),	"d,[1]", F_ALIAS, 0, v9 }, /* st d,[rs1+%g0] */
+{ "stuw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1),		"d,[1+i]", F_ALIAS, 0, v9 },
+{ "stuw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1),		"d,[i+1]", F_ALIAS, 0, v9 },
+{ "stuw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RS1_G0,	"d,[i]", F_ALIAS, 0, v9 },
+{ "stuw",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|SIMM13(~0),	"d,[1]", F_ALIAS, 0, v9 }, /* st d,[rs1+0] */
+
+{ "spill",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI(~0),	"d,[1+2]", F_ALIAS, 0, v6 },
+{ "spill",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI_RS2(~0),	"d,[1]", F_ALIAS, 0, v6 }, /* st d,[rs1+%g0] */
+{ "spill",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1),		"d,[1+i]", F_ALIAS, 0, v6 },
+{ "spill",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1),		"d,[i+1]", F_ALIAS, 0, v6 },
+{ "spill",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RS1_G0,	"d,[i]", F_ALIAS, 0, v6 },
+{ "spill",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|SIMM13(~0),	"d,[1]", F_ALIAS, 0, v6 }, /* st d,[rs1+0] */
+
+{ "sta",	F3(3, 0x14, 0), F3(~3, ~0x14, ~0),		"d,[1+2]A", 0, 0, v6 },
+{ "sta",	F3(3, 0x14, 0), F3(~3, ~0x14, ~0)|RS2(~0),	"d,[1]A", 0, 0, v6 }, /* sta d,[rs1+%g0] */
+{ "sta",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1),		"d,[1+i]o", 0, 0, v9 },
+{ "sta",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1),		"d,[i+1]o", 0, 0, v9 },
+{ "sta",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|RS1_G0,	"d,[i]o", 0, 0, v9 },
+{ "sta",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|SIMM13(~0),	"d,[1]o", 0, 0, v9 }, /* st d,[rs1+0] */
+
+{ "sta",	F3(3, 0x34, 0), F3(~3, ~0x34, ~0),		"g,[1+2]A", 0, 0, v9 },
+{ "sta",	F3(3, 0x34, 0), F3(~3, ~0x34, ~0)|RS2(~0),	"g,[1]A", 0, 0, v9 }, /* sta d,[rs1+%g0] */
+{ "sta",	F3(3, 0x34, 1), F3(~3, ~0x34, ~1),		"g,[1+i]o", 0, 0, v9 },
+{ "sta",	F3(3, 0x34, 1), F3(~3, ~0x34, ~1),		"g,[i+1]o", 0, 0, v9 },
+{ "sta",	F3(3, 0x34, 1), F3(~3, ~0x34, ~1)|RS1_G0,	"g,[i]o", 0, 0, v9 },
+{ "sta",	F3(3, 0x34, 1), F3(~3, ~0x34, ~1)|SIMM13(~0),	"g,[1]o", 0, 0, v9 }, /* st d,[rs1+0] */
+
+{ "stwa",	F3(3, 0x14, 0), F3(~3, ~0x14, ~0),		"d,[1+2]A", F_ALIAS, 0, v9 },
+{ "stwa",	F3(3, 0x14, 0), F3(~3, ~0x14, ~0)|RS2(~0),	"d,[1]A", F_ALIAS, 0, v9 }, /* sta d,[rs1+%g0] */
+{ "stwa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1),		"d,[1+i]o", F_ALIAS, 0, v9 },
+{ "stwa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1),		"d,[i+1]o", F_ALIAS, 0, v9 },
+{ "stwa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|RS1_G0,	"d,[i]o", F_ALIAS, 0, v9 },
+{ "stwa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|SIMM13(~0),	"d,[1]o", F_ALIAS, 0, v9 }, /* st d,[rs1+0] */
+{ "stswa",	F3(3, 0x14, 0), F3(~3, ~0x14, ~0),		"d,[1+2]A", F_ALIAS, 0, v9 },
+{ "stswa",	F3(3, 0x14, 0), F3(~3, ~0x14, ~0)|RS2(~0),	"d,[1]A", F_ALIAS, 0, v9 }, /* sta d,[rs1+%g0] */
+{ "stswa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1),		"d,[1+i]o", F_ALIAS, 0, v9 },
+{ "stswa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1),		"d,[i+1]o", F_ALIAS, 0, v9 },
+{ "stswa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|RS1_G0,	"d,[i]o", F_ALIAS, 0, v9 },
+{ "stswa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|SIMM13(~0),	"d,[1]o", F_ALIAS, 0, v9 }, /* st d,[rs1+0] */
+{ "stuwa",	F3(3, 0x14, 0), F3(~3, ~0x14, ~0),		"d,[1+2]A", F_ALIAS, 0, v9 },
+{ "stuwa",	F3(3, 0x14, 0), F3(~3, ~0x14, ~0)|RS2(~0),	"d,[1]A", F_ALIAS, 0, v9 }, /* sta d,[rs1+%g0] */
+{ "stuwa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1),		"d,[1+i]o", F_ALIAS, 0, v9 },
+{ "stuwa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1),		"d,[i+1]o", F_ALIAS, 0, v9 },
+{ "stuwa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|RS1_G0,	"d,[i]o", F_ALIAS, 0, v9 },
+{ "stuwa",	F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|SIMM13(~0),	"d,[1]o", F_ALIAS, 0, v9 }, /* st d,[rs1+0] */
+
+{ "stb",	F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI(~0),	"d,[1+2]", 0, 0, v6 },
+{ "stb",	F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI_RS2(~0),	"d,[1]", 0, 0, v6 }, /* stb d,[rs1+%g0] */
+{ "stb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1),		"d,[1+i]", 0, 0, v6 },
+{ "stb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1),		"d,[i+1]", 0, 0, v6 },
+{ "stb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RS1_G0,	"d,[i]", 0, 0, v6 },
+{ "stb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|SIMM13(~0),	"d,[1]", 0, 0, v6 }, /* stb d,[rs1+0] */
+
+{ "stsb",	F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI(~0),	"d,[1+2]", F_ALIAS, 0, v6 },
+{ "stsb",	F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI_RS2(~0),	"d,[1]", F_ALIAS, 0, v6 }, /* stb d,[rs1+%g0] */
+{ "stsb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1),		"d,[1+i]", F_ALIAS, 0, v6 },
+{ "stsb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1),		"d,[i+1]", F_ALIAS, 0, v6 },
+{ "stsb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RS1_G0,	"d,[i]", F_ALIAS, 0, v6 },
+{ "stsb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|SIMM13(~0),	"d,[1]", F_ALIAS, 0, v6 }, /* stb d,[rs1+0] */
+{ "stub",	F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI(~0),	"d,[1+2]", F_ALIAS, 0, v6 },
+{ "stub",	F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI_RS2(~0),	"d,[1]", F_ALIAS, 0, v6 }, /* stb d,[rs1+%g0] */
+{ "stub",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1),		"d,[1+i]", F_ALIAS, 0, v6 },
+{ "stub",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1),		"d,[i+1]", F_ALIAS, 0, v6 },
+{ "stub",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RS1_G0,	"d,[i]", F_ALIAS, 0, v6 },
+{ "stub",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|SIMM13(~0),	"d,[1]", F_ALIAS, 0, v6 }, /* stb d,[rs1+0] */
+
+{ "stba",	F3(3, 0x15, 0), F3(~3, ~0x15, ~0),		"d,[1+2]A", 0, 0, v6 },
+{ "stba",	F3(3, 0x15, 0), F3(~3, ~0x15, ~0)|RS2(~0),	"d,[1]A", 0, 0, v6 }, /* stba d,[rs1+%g0] */
+{ "stba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1),		"d,[1+i]o", 0, 0, v9 },
+{ "stba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1),		"d,[i+1]o", 0, 0, v9 },
+{ "stba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|RS1_G0,	"d,[i]o", 0, 0, v9 },
+{ "stba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|SIMM13(~0),	"d,[1]o", 0, 0, v9 }, /* stb d,[rs1+0] */
+
+{ "stsba",	F3(3, 0x15, 0), F3(~3, ~0x15, ~0),		"d,[1+2]A", F_ALIAS, 0, v6 },
+{ "stsba",	F3(3, 0x15, 0), F3(~3, ~0x15, ~0)|RS2(~0),	"d,[1]A", F_ALIAS, 0, v6 }, /* stba d,[rs1+%g0] */
+{ "stsba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1),		"d,[1+i]o", F_ALIAS, 0, v9 },
+{ "stsba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1),		"d,[i+1]o", F_ALIAS, 0, v9 },
+{ "stsba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|RS1_G0,	"d,[i]o", F_ALIAS, 0, v9 },
+{ "stsba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|SIMM13(~0),	"d,[1]o", F_ALIAS, 0, v9 }, /* stb d,[rs1+0] */
+{ "stuba",	F3(3, 0x15, 0), F3(~3, ~0x15, ~0),		"d,[1+2]A", F_ALIAS, 0, v6 },
+{ "stuba",	F3(3, 0x15, 0), F3(~3, ~0x15, ~0)|RS2(~0),	"d,[1]A", F_ALIAS, 0, v6 }, /* stba d,[rs1+%g0] */
+{ "stuba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1),		"d,[1+i]o", F_ALIAS, 0, v9 },
+{ "stuba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1),		"d,[i+1]o", F_ALIAS, 0, v9 },
+{ "stuba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|RS1_G0,	"d,[i]o", F_ALIAS, 0, v9 },
+{ "stuba",	F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|SIMM13(~0),	"d,[1]o", F_ALIAS, 0, v9 }, /* stb d,[rs1+0] */
+
+{ "std",	F3(3, 0x07, 0), F3(~3, ~0x07, ~0)|ASI(~0),	"d,[1+2]", 0, 0, v6 },
+{ "std",	F3(3, 0x07, 0), F3(~3, ~0x07, ~0)|ASI_RS2(~0),	"d,[1]", 0, 0, v6 }, /* std d,[rs1+%g0] */
+{ "std",	F3(3, 0x07, 1), F3(~3, ~0x07, ~1),		"d,[1+i]", 0, 0, v6 },
+{ "std",	F3(3, 0x07, 1), F3(~3, ~0x07, ~1),		"d,[i+1]", 0, 0, v6 },
+{ "std",	F3(3, 0x07, 1), F3(~3, ~0x07, ~1)|RS1_G0,	"d,[i]", 0, 0, v6 },
+{ "std",	F3(3, 0x07, 1), F3(~3, ~0x07, ~1)|SIMM13(~0),	"d,[1]", 0, 0, v6 }, /* std d,[rs1+0] */
+
+{ "std",	F3(3, 0x26, 0), F3(~3, ~0x26, ~0)|ASI(~0),	"q,[1+2]", 0, 0, v6notv9 },
+{ "std",	F3(3, 0x26, 0), F3(~3, ~0x26, ~0)|ASI_RS2(~0),	"q,[1]", 0, 0, v6notv9 }, /* std d,[rs1+%g0] */
+{ "std",	F3(3, 0x26, 1), F3(~3, ~0x26, ~1),		"q,[1+i]", 0, 0, v6notv9 },
+{ "std",	F3(3, 0x26, 1), F3(~3, ~0x26, ~1),		"q,[i+1]", 0, 0, v6notv9 },
+{ "std",	F3(3, 0x26, 1), F3(~3, ~0x26, ~1)|RS1_G0,	"q,[i]", 0, 0, v6notv9 },
+{ "std",	F3(3, 0x26, 1), F3(~3, ~0x26, ~1)|SIMM13(~0),	"q,[1]", 0, 0, v6notv9 }, /* std d,[rs1+0] */
+{ "std",	F3(3, 0x27, 0), F3(~3, ~0x27, ~0)|ASI(~0),	"H,[1+2]", 0, 0, v6 },
+{ "std",	F3(3, 0x27, 0), F3(~3, ~0x27, ~0)|ASI_RS2(~0),	"H,[1]", 0, 0, v6 }, /* std d,[rs1+%g0] */
+{ "std",	F3(3, 0x27, 1), F3(~3, ~0x27, ~1),		"H,[1+i]", 0, 0, v6 },
+{ "std",	F3(3, 0x27, 1), F3(~3, ~0x27, ~1),		"H,[i+1]", 0, 0, v6 },
+{ "std",	F3(3, 0x27, 1), F3(~3, ~0x27, ~1)|RS1_G0,	"H,[i]", 0, 0, v6 },
+{ "std",	F3(3, 0x27, 1), F3(~3, ~0x27, ~1)|SIMM13(~0),	"H,[1]", 0, 0, v6 }, /* std d,[rs1+0] */
+
+{ "std",	F3(3, 0x36, 0), F3(~3, ~0x36, ~0)|ASI(~0),	"Q,[1+2]", 0, 0, v6notv9 },
+{ "std",	F3(3, 0x36, 0), F3(~3, ~0x36, ~0)|ASI_RS2(~0),	"Q,[1]", 0, 0, v6notv9 }, /* std d,[rs1+%g0] */
+{ "std",	F3(3, 0x36, 1), F3(~3, ~0x36, ~1),		"Q,[1+i]", 0, 0, v6notv9 },
+{ "std",	F3(3, 0x36, 1), F3(~3, ~0x36, ~1),		"Q,[i+1]", 0, 0, v6notv9 },
+{ "std",	F3(3, 0x36, 1), F3(~3, ~0x36, ~1)|RS1_G0,	"Q,[i]", 0, 0, v6notv9 },
+{ "std",	F3(3, 0x36, 1), F3(~3, ~0x36, ~1)|SIMM13(~0),	"Q,[1]", 0, 0, v6notv9 }, /* std d,[rs1+0] */
+{ "std",	F3(3, 0x37, 0), F3(~3, ~0x37, ~0)|ASI(~0),	"D,[1+2]", 0, 0, v6notv9 },
+{ "std",	F3(3, 0x37, 0), F3(~3, ~0x37, ~0)|ASI_RS2(~0),	"D,[1]", 0, 0, v6notv9 }, /* std d,[rs1+%g0] */
+{ "std",	F3(3, 0x37, 1), F3(~3, ~0x37, ~1),		"D,[1+i]", 0, 0, v6notv9 },
+{ "std",	F3(3, 0x37, 1), F3(~3, ~0x37, ~1),		"D,[i+1]", 0, 0, v6notv9 },
+{ "std",	F3(3, 0x37, 1), F3(~3, ~0x37, ~1)|RS1_G0,	"D,[i]", 0, 0, v6notv9 },
+{ "std",	F3(3, 0x37, 1), F3(~3, ~0x37, ~1)|SIMM13(~0),	"D,[1]", 0, 0, v6notv9 }, /* std d,[rs1+0] */
+
+{ "spilld",	F3(3, 0x07, 0), F3(~3, ~0x07, ~0)|ASI(~0),	"d,[1+2]", F_ALIAS, 0, v6 },
+{ "spilld",	F3(3, 0x07, 0), F3(~3, ~0x07, ~0)|ASI_RS2(~0),	"d,[1]", F_ALIAS, 0, v6 }, /* std d,[rs1+%g0] */
+{ "spilld",	F3(3, 0x07, 1), F3(~3, ~0x07, ~1),		"d,[1+i]", F_ALIAS, 0, v6 },
+{ "spilld",	F3(3, 0x07, 1), F3(~3, ~0x07, ~1),		"d,[i+1]", F_ALIAS, 0, v6 },
+{ "spilld",	F3(3, 0x07, 1), F3(~3, ~0x07, ~1)|RS1_G0,	"d,[i]", F_ALIAS, 0, v6 },
+{ "spilld",	F3(3, 0x07, 1), F3(~3, ~0x07, ~1)|SIMM13(~0),	"d,[1]", F_ALIAS, 0, v6 }, /* std d,[rs1+0] */
+
+{ "stda",	F3(3, 0x17, 0), F3(~3, ~0x17, ~0),		"d,[1+2]A", 0, 0, v6 },
+{ "stda",	F3(3, 0x17, 0), F3(~3, ~0x17, ~0)|RS2(~0),	"d,[1]A", 0, 0, v6 }, /* stda d,[rs1+%g0] */
+{ "stda",	F3(3, 0x17, 1), F3(~3, ~0x17, ~1),		"d,[1+i]o", 0, 0, v9 },
+{ "stda",	F3(3, 0x17, 1), F3(~3, ~0x17, ~1),		"d,[i+1]o", 0, 0, v9 },
+{ "stda",	F3(3, 0x17, 1), F3(~3, ~0x17, ~1)|RS1_G0,	"d,[i]o", 0, 0, v9 },
+{ "stda",	F3(3, 0x17, 1), F3(~3, ~0x17, ~1)|SIMM13(~0),	"d,[1]o", 0, 0, v9 }, /* std d,[rs1+0] */
+{ "stda",	F3(3, 0x37, 0), F3(~3, ~0x37, ~0),		"H,[1+2]A", 0, 0, v9 },
+{ "stda",	F3(3, 0x37, 0), F3(~3, ~0x37, ~0)|RS2(~0),	"H,[1]A", 0, 0, v9 }, /* stda d,[rs1+%g0] */
+{ "stda",	F3(3, 0x37, 1), F3(~3, ~0x37, ~1),		"H,[1+i]o", 0, 0, v9 },
+{ "stda",	F3(3, 0x37, 1), F3(~3, ~0x37, ~1),		"H,[i+1]o", 0, 0, v9 },
+{ "stda",	F3(3, 0x37, 1), F3(~3, ~0x37, ~1)|RS1_G0,	"H,[i]o", 0, 0, v9 },
+{ "stda",	F3(3, 0x37, 1), F3(~3, ~0x37, ~1)|SIMM13(~0),	"H,[1]o", 0, 0, v9 }, /* std d,[rs1+0] */
+
+{ "sth",	F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI(~0),	"d,[1+2]", 0, 0, v6 },
+{ "sth",	F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI_RS2(~0),	"d,[1]", 0, 0, v6 }, /* sth d,[rs1+%g0] */
+{ "sth",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1),		"d,[1+i]", 0, 0, v6 },
+{ "sth",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1),		"d,[i+1]", 0, 0, v6 },
+{ "sth",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RS1_G0,	"d,[i]", 0, 0, v6 },
+{ "sth",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|SIMM13(~0),	"d,[1]", 0, 0, v6 }, /* sth d,[rs1+0] */
+
+{ "stsh",	F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI(~0),	"d,[1+2]", F_ALIAS, 0, v6 },
+{ "stsh",	F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI_RS2(~0),	"d,[1]", F_ALIAS, 0, v6 }, /* sth d,[rs1+%g0] */
+{ "stsh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1),		"d,[1+i]", F_ALIAS, 0, v6 },
+{ "stsh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1),		"d,[i+1]", F_ALIAS, 0, v6 },
+{ "stsh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RS1_G0,	"d,[i]", F_ALIAS, 0, v6 },
+{ "stsh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|SIMM13(~0),	"d,[1]", F_ALIAS, 0, v6 }, /* sth d,[rs1+0] */
+{ "stuh",	F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI(~0),	"d,[1+2]", F_ALIAS, 0, v6 },
+{ "stuh",	F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI_RS2(~0),	"d,[1]", F_ALIAS, 0, v6 }, /* sth d,[rs1+%g0] */
+{ "stuh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1),		"d,[1+i]", F_ALIAS, 0, v6 },
+{ "stuh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1),		"d,[i+1]", F_ALIAS, 0, v6 },
+{ "stuh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RS1_G0,	"d,[i]", F_ALIAS, 0, v6 },
+{ "stuh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|SIMM13(~0),	"d,[1]", F_ALIAS, 0, v6 }, /* sth d,[rs1+0] */
+
+{ "stha",	F3(3, 0x16, 0), F3(~3, ~0x16, ~0),		"d,[1+2]A", 0, 0, v6 },
+{ "stha",	F3(3, 0x16, 0), F3(~3, ~0x16, ~0)|RS2(~0),	"d,[1]A", 0, 0, v6 }, /* stha ,[rs1+%g0] */
+{ "stha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1),		"d,[1+i]o", 0, 0, v9 },
+{ "stha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1),		"d,[i+1]o", 0, 0, v9 },
+{ "stha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|RS1_G0,	"d,[i]o", 0, 0, v9 },
+{ "stha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|SIMM13(~0),	"d,[1]o", 0, 0, v9 }, /* sth d,[rs1+0] */
+
+{ "stsha",	F3(3, 0x16, 0), F3(~3, ~0x16, ~0),		"d,[1+2]A", F_ALIAS, 0, v6 },
+{ "stsha",	F3(3, 0x16, 0), F3(~3, ~0x16, ~0)|RS2(~0),	"d,[1]A", F_ALIAS, 0, v6 }, /* stha ,[rs1+%g0] */
+{ "stsha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1),		"d,[1+i]o", F_ALIAS, 0, v9 },
+{ "stsha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1),		"d,[i+1]o", F_ALIAS, 0, v9 },
+{ "stsha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|RS1_G0,	"d,[i]o", F_ALIAS, 0, v9 },
+{ "stsha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|SIMM13(~0),	"d,[1]o", F_ALIAS, 0, v9 }, /* sth d,[rs1+0] */
+{ "stuha",	F3(3, 0x16, 0), F3(~3, ~0x16, ~0),		"d,[1+2]A", F_ALIAS, 0, v6 },
+{ "stuha",	F3(3, 0x16, 0), F3(~3, ~0x16, ~0)|RS2(~0),	"d,[1]A", F_ALIAS, 0, v6 }, /* stha ,[rs1+%g0] */
+{ "stuha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1),		"d,[1+i]o", F_ALIAS, 0, v9 },
+{ "stuha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1),		"d,[i+1]o", F_ALIAS, 0, v9 },
+{ "stuha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|RS1_G0,	"d,[i]o", F_ALIAS, 0, v9 },
+{ "stuha",	F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|SIMM13(~0),	"d,[1]o", F_ALIAS, 0, v9 }, /* sth d,[rs1+0] */
+
+{ "stx",	F3(3, 0x0e, 0), F3(~3, ~0x0e, ~0)|ASI(~0),	"d,[1+2]", 0, 0, v9 },
+{ "stx",	F3(3, 0x0e, 0), F3(~3, ~0x0e, ~0)|ASI_RS2(~0),	"d,[1]", 0, 0, v9 }, /* stx d,[rs1+%g0] */
+{ "stx",	F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1),		"d,[1+i]", 0, 0, v9 },
+{ "stx",	F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1),		"d,[i+1]", 0, 0, v9 },
+{ "stx",	F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RS1_G0,	"d,[i]", 0, 0, v9 },
+{ "stx",	F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|SIMM13(~0),	"d,[1]", 0, 0, v9 }, /* stx d,[rs1+0] */
+
+{ "stx",	F3(3, 0x25, 0)|RD(1), F3(~3, ~0x25, ~0)|ASI(~0)|RD(~1),	"F,[1+2]", 0, 0, v9 },
+{ "stx",	F3(3, 0x25, 0)|RD(1), F3(~3, ~0x25, ~0)|ASI_RS2(~0)|RD(~1),"F,[1]", 0, 0, v9 }, /* stx d,[rs1+%g0] */
+{ "stx",	F3(3, 0x25, 1)|RD(1), F3(~3, ~0x25, ~1)|RD(~1),		"F,[1+i]", 0, 0, v9 },
+{ "stx",	F3(3, 0x25, 1)|RD(1), F3(~3, ~0x25, ~1)|RD(~1),		"F,[i+1]", 0, 0, v9 },
+{ "stx",	F3(3, 0x25, 1)|RD(1), F3(~3, ~0x25, ~1)|RS1_G0|RD(~1),	"F,[i]", 0, 0, v9 },
+{ "stx",	F3(3, 0x25, 1)|RD(1), F3(~3, ~0x25, ~1)|SIMM13(~0)|RD(~1),"F,[1]", 0, 0, v9 }, /* stx d,[rs1+0] */
+
+{ "stxa",	F3(3, 0x1e, 0), F3(~3, ~0x1e, ~0),		"d,[1+2]A", 0, 0, v9 },
+{ "stxa",	F3(3, 0x1e, 0), F3(~3, ~0x1e, ~0)|RS2(~0),	"d,[1]A", 0, 0, v9 }, /* stxa d,[rs1+%g0] */
+{ "stxa",	F3(3, 0x1e, 1), F3(~3, ~0x1e, ~1),		"d,[1+i]o", 0, 0, v9 },
+{ "stxa",	F3(3, 0x1e, 1), F3(~3, ~0x1e, ~1),		"d,[i+1]o", 0, 0, v9 },
+{ "stxa",	F3(3, 0x1e, 1), F3(~3, ~0x1e, ~1)|RS1_G0,	"d,[i]o", 0, 0, v9 },
+{ "stxa",	F3(3, 0x1e, 1), F3(~3, ~0x1e, ~1)|SIMM13(~0),	"d,[1]o", 0, 0, v9 }, /* stx d,[rs1+0] */
+
+{ "stq",	F3(3, 0x26, 0), F3(~3, ~0x26, ~0)|ASI(~0),	"J,[1+2]", 0, 0, v9 },
+{ "stq",	F3(3, 0x26, 0), F3(~3, ~0x26, ~0)|ASI_RS2(~0),	"J,[1]", 0, 0, v9 }, /* stq [rs1+%g0] */
+{ "stq",	F3(3, 0x26, 1), F3(~3, ~0x26, ~1),		"J,[1+i]", 0, 0, v9 },
+{ "stq",	F3(3, 0x26, 1), F3(~3, ~0x26, ~1),		"J,[i+1]", 0, 0, v9 },
+{ "stq",	F3(3, 0x26, 1), F3(~3, ~0x26, ~1)|RS1_G0,	"J,[i]", 0, 0, v9 },
+{ "stq",	F3(3, 0x26, 1), F3(~3, ~0x26, ~1)|SIMM13(~0),	"J,[1]", 0, 0, v9 }, /* stq [rs1+0] */
+
+{ "stqa",	F3(3, 0x36, 0), F3(~3, ~0x36, ~0)|ASI(~0),	"J,[1+2]A", 0, 0, v9 },
+{ "stqa",	F3(3, 0x36, 0), F3(~3, ~0x36, ~0)|ASI_RS2(~0),	"J,[1]A", 0, 0, v9 }, /* stqa [rs1+%g0] */
+{ "stqa",	F3(3, 0x36, 1), F3(~3, ~0x36, ~1),		"J,[1+i]o", 0, 0, v9 },
+{ "stqa",	F3(3, 0x36, 1), F3(~3, ~0x36, ~1),		"J,[i+1]o", 0, 0, v9 },
+{ "stqa",	F3(3, 0x36, 1), F3(~3, ~0x36, ~1)|RS1_G0,	"J,[i]o", 0, 0, v9 },
+{ "stqa",	F3(3, 0x36, 1), F3(~3, ~0x36, ~1)|SIMM13(~0),	"J,[1]o", 0, 0, v9 }, /* stqa [rs1+0] */
+
+{ "swap",	F3(3, 0x0f, 0), F3(~3, ~0x0f, ~0)|ASI(~0),	"[1+2],d", 0, 0, v7 },
+{ "swap",	F3(3, 0x0f, 0), F3(~3, ~0x0f, ~0)|ASI_RS2(~0),	"[1],d", 0, 0, v7 }, /* swap [rs1+%g0],d */
+{ "swap",	F3(3, 0x0f, 1), F3(~3, ~0x0f, ~1),		"[1+i],d", 0, 0, v7 },
+{ "swap",	F3(3, 0x0f, 1), F3(~3, ~0x0f, ~1),		"[i+1],d", 0, 0, v7 },
+{ "swap",	F3(3, 0x0f, 1), F3(~3, ~0x0f, ~1)|RS1_G0,	"[i],d", 0, 0, v7 },
+{ "swap",	F3(3, 0x0f, 1), F3(~3, ~0x0f, ~1)|SIMM13(~0),	"[1],d", 0, 0, v7 }, /* swap [rs1+0],d */
+
+{ "swapa",	F3(3, 0x1f, 0), F3(~3, ~0x1f, ~0),		"[1+2]A,d", 0, 0, v7 },
+{ "swapa",	F3(3, 0x1f, 0), F3(~3, ~0x1f, ~0)|RS2(~0),	"[1]A,d", 0, 0, v7 }, /* swapa [rs1+%g0],d */
+{ "swapa",	F3(3, 0x1f, 1), F3(~3, ~0x1f, ~1),		"[1+i]o,d", 0, 0, v9 },
+{ "swapa",	F3(3, 0x1f, 1), F3(~3, ~0x1f, ~1),		"[i+1]o,d", 0, 0, v9 },
+{ "swapa",	F3(3, 0x1f, 1), F3(~3, ~0x1f, ~1)|RS1_G0,	"[i]o,d", 0, 0, v9 },
+{ "swapa",	F3(3, 0x1f, 1), F3(~3, ~0x1f, ~1)|SIMM13(~0),	"[1]o,d", 0, 0, v9 }, /* swap [rs1+0],d */
+
+{ "restore",	F3(2, 0x3d, 0), F3(~2, ~0x3d, ~0)|ASI(~0),			"1,2,d", 0, 0, v6 },
+{ "restore",	F3(2, 0x3d, 0), F3(~2, ~0x3d, ~0)|RD_G0|RS1_G0|ASI_RS2(~0),	"", 0, 0, v6 }, /* restore %g0,%g0,%g0 */
+{ "restore",	F3(2, 0x3d, 1), F3(~2, ~0x3d, ~1),				"1,i,d", 0, 0, v6 },
+{ "restore",	F3(2, 0x3d, 1), F3(~2, ~0x3d, ~1)|RD_G0|RS1_G0|SIMM13(~0),	"", 0, 0, v6 }, /* restore %g0,0,%g0 */
+
+{ "rett",	F3(2, 0x39, 0), F3(~2, ~0x39, ~0)|RD_G0|ASI(~0),	"1+2", F_UNBR|F_DELAYED, 0, v6 }, /* rett rs1+rs2 */
+{ "rett",	F3(2, 0x39, 0), F3(~2, ~0x39, ~0)|RD_G0|ASI_RS2(~0),	"1", F_UNBR|F_DELAYED, 0, v6 },	/* rett rs1,%g0 */
+{ "rett",	F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0,		"1+i", F_UNBR|F_DELAYED, 0, v6 }, /* rett rs1+X */
+{ "rett",	F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0,		"i+1", F_UNBR|F_DELAYED, 0, v6 }, /* rett X+rs1 */
+{ "rett",	F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0|RS1_G0,		"i", F_UNBR|F_DELAYED, 0, v6 }, /* rett X+rs1 */
+{ "rett",	F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0|RS1_G0,		"i", F_UNBR|F_DELAYED, 0, v6 },	/* rett X */
+{ "rett",	F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0|SIMM13(~0),	"1", F_UNBR|F_DELAYED, 0, v6 },	/* rett rs1+0 */
+
+{ "save",	F3(2, 0x3c, 0), F3(~2, ~0x3c, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "save",	F3(2, 0x3c, 1), F3(~2, ~0x3c, ~1),		"1,i,d", 0, 0, v6 },
+{ "save",	F3(2, 0x3c, 1), F3(~2, ~0x3c, ~1),		"i,1,d", 0, 0, v6 }, /* Sun assembler compatibility */
+{ "save",	0x81e00000,	~0x81e00000,			"", F_ALIAS, 0, v6 },
+
+{ "ret",  F3(2, 0x38, 1)|RS1(0x1f)|SIMM13(8), F3(~2, ~0x38, ~1)|SIMM13(~8),	       "", F_UNBR|F_DELAYED, 0, v6 }, /* jmpl %i7+8,%g0 */
+{ "retl", F3(2, 0x38, 1)|RS1(0x0f)|SIMM13(8), F3(~2, ~0x38, ~1)|RS1(~0x0f)|SIMM13(~8), "", F_UNBR|F_DELAYED, 0, v6 }, /* jmpl %o7+8,%g0 */
+
+{ "jmpl",	F3(2, 0x38, 0), F3(~2, ~0x38, ~0)|ASI(~0),	"1+2,d", F_JSR|F_DELAYED, 0, v6 },
+{ "jmpl",	F3(2, 0x38, 0), F3(~2, ~0x38, ~0)|ASI_RS2(~0),	"1,d", F_JSR|F_DELAYED, 0, v6 }, /* jmpl rs1+%g0,d */
+{ "jmpl",	F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|SIMM13(~0),	"1,d", F_JSR|F_DELAYED, 0, v6 }, /* jmpl rs1+0,d */
+{ "jmpl",	F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RS1_G0,	"i,d", F_JSR|F_DELAYED, 0, v6 }, /* jmpl %g0+i,d */
+{ "jmpl",	F3(2, 0x38, 1), F3(~2, ~0x38, ~1),		"1+i,d", F_JSR|F_DELAYED, 0, v6 },
+{ "jmpl",	F3(2, 0x38, 1), F3(~2, ~0x38, ~1),		"i+1,d", F_JSR|F_DELAYED, 0, v6 },
+
+{ "done",	F3(2, 0x3e, 0)|RD(0), F3(~2, ~0x3e, ~0)|RD(~0)|RS1_G0|SIMM13(~0),	"", 0, 0, v9 },
+{ "retry",	F3(2, 0x3e, 0)|RD(1), F3(~2, ~0x3e, ~0)|RD(~1)|RS1_G0|SIMM13(~0),	"", 0, 0, v9 },
+{ "saved",	F3(2, 0x31, 0)|RD(0), F3(~2, ~0x31, ~0)|RD(~0)|RS1_G0|SIMM13(~0),	"", 0, 0, v9 },
+{ "restored",	F3(2, 0x31, 0)|RD(1), F3(~2, ~0x31, ~0)|RD(~1)|RS1_G0|SIMM13(~0),	"", 0, 0, v9 },
+{ "allclean",	F3(2, 0x31, 0)|RD(2), F3(~2, ~0x31, ~0)|RD(~2)|RS1_G0|SIMM13(~0),	"", 0, 0, v9 },
+{ "otherw",	F3(2, 0x31, 0)|RD(3), F3(~2, ~0x31, ~0)|RD(~3)|RS1_G0|SIMM13(~0),	"", 0, 0, v9 },
+{ "normalw",	F3(2, 0x31, 0)|RD(4), F3(~2, ~0x31, ~0)|RD(~4)|RS1_G0|SIMM13(~0),	"", 0, 0, v9 },
+{ "invalw",	F3(2, 0x31, 0)|RD(5), F3(~2, ~0x31, ~0)|RD(~5)|RS1_G0|SIMM13(~0),	"", 0, 0, v9 },
+{ "sir",	F3(2, 0x30, 1)|RD(0xf), F3(~2, ~0x30, ~1)|RD(~0xf)|RS1_G0,		"i", 0, 0, v9 },
+
+{ "flush",	F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|ASI(~0),	"1+2", 0, 0, v8 },
+{ "flush",	F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|ASI_RS2(~0),	"1", 0, 0, v8 }, /* flush rs1+%g0 */
+{ "flush",	F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1)|SIMM13(~0),	"1", 0, 0, v8 }, /* flush rs1+0 */
+{ "flush",	F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1)|RS1_G0,	"i", 0, 0, v8 }, /* flush %g0+i */
+{ "flush",	F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1),		"1+i", 0, 0, v8 },
+{ "flush",	F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1),		"i+1", 0, 0, v8 },
 
 /* IFLUSH was renamed to FLUSH in v8.  */
-{ "iflush",	F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|ASI(~0),	"1+2", F_ALIAS, v6 },
-{ "iflush",	F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|ASI_RS2(~0),	"1", F_ALIAS, v6 }, /* flush rs1+%g0 */
-{ "iflush",	F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1)|SIMM13(~0),	"1", F_ALIAS, v6 }, /* flush rs1+0 */
-{ "iflush",	F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1)|RS1_G0,	"i", F_ALIAS, v6 },
-{ "iflush",	F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1),		"1+i", F_ALIAS, v6 },
-{ "iflush",	F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1),		"i+1", F_ALIAS, v6 },
-
-{ "return",	F3(2, 0x39, 0), F3(~2, ~0x39, ~0)|ASI(~0),	"1+2", 0, v9 },
-{ "return",	F3(2, 0x39, 0), F3(~2, ~0x39, ~0)|ASI_RS2(~0),	"1", 0, v9 }, /* return rs1+%g0 */
-{ "return",	F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|SIMM13(~0),	"1", 0, v9 }, /* return rs1+0 */
-{ "return",	F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RS1_G0,	"i", 0, v9 }, /* return %g0+i */
-{ "return",	F3(2, 0x39, 1), F3(~2, ~0x39, ~1),		"1+i", 0, v9 },
-{ "return",	F3(2, 0x39, 1), F3(~2, ~0x39, ~1),		"i+1", 0, v9 },
-
-{ "flushw",	F3(2, 0x2b, 0), F3(~2, ~0x2b, ~0)|RD_G0|RS1_G0|ASI_RS2(~0),	"", 0, v9 },
-
-{ "membar",	F3(2, 0x28, 1)|RS1(0xf), F3(~2, ~0x28, ~1)|RD_G0|RS1(~0xf)|SIMM13(~127), "K", 0, v9 },
-{ "stbar",	F3(2, 0x28, 0)|RS1(0xf), F3(~2, ~0x28, ~0)|RD_G0|RS1(~0xf)|SIMM13(~0), "", 0, v8 },
-
-{ "prefetch",	F3(3, 0x2d, 0), F3(~3, ~0x2d, ~0),		"[1+2],*", 0, v9 },
-{ "prefetch",	F3(3, 0x2d, 0), F3(~3, ~0x2d, ~0)|RS2_G0,	"[1],*", 0, v9 }, /* prefetch [rs1+%g0],prefetch_fcn */
-{ "prefetch",	F3(3, 0x2d, 1), F3(~3, ~0x2d, ~1),		"[1+i],*", 0, v9 },
-{ "prefetch",	F3(3, 0x2d, 1), F3(~3, ~0x2d, ~1),		"[i+1],*", 0, v9 },
-{ "prefetch",	F3(3, 0x2d, 1), F3(~3, ~0x2d, ~1)|RS1_G0,	"[i],*", 0, v9 },
-{ "prefetch",	F3(3, 0x2d, 1), F3(~3, ~0x2d, ~1)|SIMM13(~0),	"[1],*", 0, v9 }, /* prefetch [rs1+0],prefetch_fcn */
-{ "prefetcha",	F3(3, 0x3d, 0), F3(~3, ~0x3d, ~0),		"[1+2]A,*", 0, v9 },
-{ "prefetcha",	F3(3, 0x3d, 0), F3(~3, ~0x3d, ~0)|RS2_G0,	"[1]A,*", 0, v9 }, /* prefetcha [rs1+%g0],prefetch_fcn */
-{ "prefetcha",	F3(3, 0x3d, 1), F3(~3, ~0x3d, ~1),		"[1+i]o,*", 0, v9 },
-{ "prefetcha",	F3(3, 0x3d, 1), F3(~3, ~0x3d, ~1),		"[i+1]o,*", 0, v9 },
-{ "prefetcha",	F3(3, 0x3d, 1), F3(~3, ~0x3d, ~1)|RS1_G0,	"[i]o,*", 0, v9 },
-{ "prefetcha",	F3(3, 0x3d, 1), F3(~3, ~0x3d, ~1)|SIMM13(~0),	"[1]o,*", 0, v9 }, /* prefetcha [rs1+0],d */
-
-{ "sll",	F3(2, 0x25, 0), F3(~2, ~0x25, ~0)|(1<<12)|(0x7f<<5),	"1,2,d", 0, v6 },
-{ "sll",	F3(2, 0x25, 1), F3(~2, ~0x25, ~1)|(1<<12)|(0x7f<<5),	"1,X,d", 0, v6 },
-{ "sra",	F3(2, 0x27, 0), F3(~2, ~0x27, ~0)|(1<<12)|(0x7f<<5),	"1,2,d", 0, v6 },
-{ "sra",	F3(2, 0x27, 1), F3(~2, ~0x27, ~1)|(1<<12)|(0x7f<<5),	"1,X,d", 0, v6 },
-{ "srl",	F3(2, 0x26, 0), F3(~2, ~0x26, ~0)|(1<<12)|(0x7f<<5),	"1,2,d", 0, v6 },
-{ "srl",	F3(2, 0x26, 1), F3(~2, ~0x26, ~1)|(1<<12)|(0x7f<<5),	"1,X,d", 0, v6 },
-
-{ "sllx",	F3(2, 0x25, 0)|(1<<12), F3(~2, ~0x25, ~0)|(0x7f<<5),	"1,2,d", 0, v9 },
-{ "sllx",	F3(2, 0x25, 1)|(1<<12), F3(~2, ~0x25, ~1)|(0x3f<<6),	"1,Y,d", 0, v9 },
-{ "srax",	F3(2, 0x27, 0)|(1<<12), F3(~2, ~0x27, ~0)|(0x7f<<5),	"1,2,d", 0, v9 },
-{ "srax",	F3(2, 0x27, 1)|(1<<12), F3(~2, ~0x27, ~1)|(0x3f<<6),	"1,Y,d", 0, v9 },
-{ "srlx",	F3(2, 0x26, 0)|(1<<12), F3(~2, ~0x26, ~0)|(0x7f<<5),	"1,2,d", 0, v9 },
-{ "srlx",	F3(2, 0x26, 1)|(1<<12), F3(~2, ~0x26, ~1)|(0x3f<<6),	"1,Y,d", 0, v9 },
-
-{ "mulscc",	F3(2, 0x24, 0), F3(~2, ~0x24, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "mulscc",	F3(2, 0x24, 1), F3(~2, ~0x24, ~1),		"1,i,d", 0, v6 },
-
-{ "divscc",	F3(2, 0x1d, 0), F3(~2, ~0x1d, ~0)|ASI(~0),	"1,2,d", 0, sparclite },
-{ "divscc",	F3(2, 0x1d, 1), F3(~2, ~0x1d, ~1),		"1,i,d", 0, sparclite },
-
-{ "scan",	F3(2, 0x2c, 0), F3(~2, ~0x2c, ~0)|ASI(~0),	"1,2,d", 0, sparclet|sparclite },
-{ "scan",	F3(2, 0x2c, 1), F3(~2, ~0x2c, ~1),		"1,i,d", 0, sparclet|sparclite },
-
-{ "popc",	F3(2, 0x2e, 0), F3(~2, ~0x2e, ~0)|RS1_G0|ASI(~0),"2,d", F_POPC, v9 },
-{ "popc",	F3(2, 0x2e, 1), F3(~2, ~0x2e, ~1)|RS1_G0,	"i,d", F_POPC, v9 },
-
-{ "clr",	F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|RD_G0|RS1_G0|ASI_RS2(~0),	"d", F_ALIAS, v6 }, /* or %g0,%g0,d */
-{ "clr",	F3(2, 0x02, 1), F3(~2, ~0x02, ~1)|RS1_G0|SIMM13(~0),		"d", F_ALIAS, v6 }, /* or %g0,0,d	*/
-{ "clr",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|RD_G0|ASI(~0),		"[1+2]", F_ALIAS, v6 },
-{ "clr",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|RD_G0|ASI_RS2(~0),		"[1]", F_ALIAS, v6 }, /* st %g0,[rs1+%g0] */
-{ "clr",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RD_G0,			"[1+i]", F_ALIAS, v6 },
-{ "clr",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RD_G0,			"[i+1]", F_ALIAS, v6 },
-{ "clr",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RD_G0|RS1_G0,			"[i]", F_ALIAS, v6 },
-{ "clr",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RD_G0|SIMM13(~0),		"[1]", F_ALIAS, v6 }, /* st %g0,[rs1+0] */
-
-{ "clrb",	F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|RD_G0|ASI(~0),	"[1+2]", F_ALIAS, v6 },
-{ "clrb",	F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|RD_G0|ASI_RS2(~0),	"[1]", F_ALIAS, v6 }, /* stb %g0,[rs1+%g0] */
-{ "clrb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RD_G0,		"[1+i]", F_ALIAS, v6 },
-{ "clrb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RD_G0,		"[i+1]", F_ALIAS, v6 },
-{ "clrb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RD_G0|RS1_G0,		"[i]", F_ALIAS, v6 },
-{ "clrb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RD_G0|SIMM13(~0),	"[1]", F_ALIAS, v6 }, /* stb %g0,[rs1+0] */
-
-{ "clrh",	F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|RD_G0|ASI(~0),	"[1+2]", F_ALIAS, v6 },
-{ "clrh",	F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|RD_G0|ASI_RS2(~0),	"[1]", F_ALIAS, v6 }, /* sth %g0,[rs1+%g0] */
-{ "clrh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RD_G0,		"[1+i]", F_ALIAS, v6 },
-{ "clrh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RD_G0,		"[i+1]", F_ALIAS, v6 },
-{ "clrh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RD_G0|RS1_G0,		"[i]", F_ALIAS, v6 },
-{ "clrh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RD_G0|SIMM13(~0),	"[1]", F_ALIAS, v6 }, /* sth %g0,[rs1+0] */
-
-{ "clrx",	F3(3, 0x0e, 0), F3(~3, ~0x0e, ~0)|RD_G0|ASI(~0),	"[1+2]", F_ALIAS, v9 },
-{ "clrx",	F3(3, 0x0e, 0), F3(~3, ~0x0e, ~0)|RD_G0|ASI_RS2(~0),	"[1]", F_ALIAS, v9 }, /* stx %g0,[rs1+%g0] */
-{ "clrx",	F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RD_G0,		"[1+i]", F_ALIAS, v9 },
-{ "clrx",	F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RD_G0,		"[i+1]", F_ALIAS, v9 },
-{ "clrx",	F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RD_G0|RS1_G0,		"[i]", F_ALIAS, v9 },
-{ "clrx",	F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RD_G0|SIMM13(~0),	"[1]", F_ALIAS, v9 }, /* stx %g0,[rs1+0] */
-
-{ "orcc",	F3(2, 0x12, 0), F3(~2, ~0x12, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "orcc",	F3(2, 0x12, 1), F3(~2, ~0x12, ~1),		"1,i,d", 0, v6 },
-{ "orcc",	F3(2, 0x12, 1), F3(~2, ~0x12, ~1),		"i,1,d", 0, v6 },
+{ "iflush",	F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|ASI(~0),	"1+2", F_ALIAS, 0, v6 },
+{ "iflush",	F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|ASI_RS2(~0),	"1", F_ALIAS, 0, v6 }, /* flush rs1+%g0 */
+{ "iflush",	F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1)|SIMM13(~0),	"1", F_ALIAS, 0, v6 }, /* flush rs1+0 */
+{ "iflush",	F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1)|RS1_G0,	"i", F_ALIAS, 0, v6 },
+{ "iflush",	F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1),		"1+i", F_ALIAS, 0, v6 },
+{ "iflush",	F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1),		"i+1", F_ALIAS, 0, v6 },
+
+{ "return",	F3(2, 0x39, 0), F3(~2, ~0x39, ~0)|ASI(~0),	"1+2", 0, 0, v9 },
+{ "return",	F3(2, 0x39, 0), F3(~2, ~0x39, ~0)|ASI_RS2(~0),	"1", 0, 0, v9 }, /* return rs1+%g0 */
+{ "return",	F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|SIMM13(~0),	"1", 0, 0, v9 }, /* return rs1+0 */
+{ "return",	F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RS1_G0,	"i", 0, 0, v9 }, /* return %g0+i */
+{ "return",	F3(2, 0x39, 1), F3(~2, ~0x39, ~1),		"1+i", 0, 0, v9 },
+{ "return",	F3(2, 0x39, 1), F3(~2, ~0x39, ~1),		"i+1", 0, 0, v9 },
+
+{ "flushw",	F3(2, 0x2b, 0), F3(~2, ~0x2b, ~0)|RD_G0|RS1_G0|ASI_RS2(~0),	"", 0, 0, v9 },
+
+{ "membar",	F3(2, 0x28, 1)|RS1(0xf), F3(~2, ~0x28, ~1)|RD_G0|RS1(~0xf)|SIMM13(~127), "K", 0, 0, v9 },
+{ "stbar",	F3(2, 0x28, 0)|RS1(0xf), F3(~2, ~0x28, ~0)|RD_G0|RS1(~0xf)|SIMM13(~0), "", 0, 0, v8 },
+
+{ "prefetch",	F3(3, 0x2d, 0), F3(~3, ~0x2d, ~0),		"[1+2],*", 0, 0, v9 },
+{ "prefetch",	F3(3, 0x2d, 0), F3(~3, ~0x2d, ~0)|RS2_G0,	"[1],*", 0, 0, v9 }, /* prefetch [rs1+%g0],prefetch_fcn */
+{ "prefetch",	F3(3, 0x2d, 1), F3(~3, ~0x2d, ~1),		"[1+i],*", 0, 0, v9 },
+{ "prefetch",	F3(3, 0x2d, 1), F3(~3, ~0x2d, ~1),		"[i+1],*", 0, 0, v9 },
+{ "prefetch",	F3(3, 0x2d, 1), F3(~3, ~0x2d, ~1)|RS1_G0,	"[i],*", 0, 0, v9 },
+{ "prefetch",	F3(3, 0x2d, 1), F3(~3, ~0x2d, ~1)|SIMM13(~0),	"[1],*", 0, 0, v9 }, /* prefetch [rs1+0],prefetch_fcn */
+{ "prefetcha",	F3(3, 0x3d, 0), F3(~3, ~0x3d, ~0),		"[1+2]A,*", 0, 0, v9 },
+{ "prefetcha",	F3(3, 0x3d, 0), F3(~3, ~0x3d, ~0)|RS2_G0,	"[1]A,*", 0, 0, v9 }, /* prefetcha [rs1+%g0],prefetch_fcn */
+{ "prefetcha",	F3(3, 0x3d, 1), F3(~3, ~0x3d, ~1),		"[1+i]o,*", 0, 0, v9 },
+{ "prefetcha",	F3(3, 0x3d, 1), F3(~3, ~0x3d, ~1),		"[i+1]o,*", 0, 0, v9 },
+{ "prefetcha",	F3(3, 0x3d, 1), F3(~3, ~0x3d, ~1)|RS1_G0,	"[i]o,*", 0, 0, v9 },
+{ "prefetcha",	F3(3, 0x3d, 1), F3(~3, ~0x3d, ~1)|SIMM13(~0),	"[1]o,*", 0, 0, v9 }, /* prefetcha [rs1+0],d */
+
+{ "sll",	F3(2, 0x25, 0), F3(~2, ~0x25, ~0)|(1<<12)|(0x7f<<5),	"1,2,d", 0, 0, v6 },
+{ "sll",	F3(2, 0x25, 1), F3(~2, ~0x25, ~1)|(1<<12)|(0x7f<<5),	"1,X,d", 0, 0, v6 },
+{ "sra",	F3(2, 0x27, 0), F3(~2, ~0x27, ~0)|(1<<12)|(0x7f<<5),	"1,2,d", 0, 0, v6 },
+{ "sra",	F3(2, 0x27, 1), F3(~2, ~0x27, ~1)|(1<<12)|(0x7f<<5),	"1,X,d", 0, 0, v6 },
+{ "srl",	F3(2, 0x26, 0), F3(~2, ~0x26, ~0)|(1<<12)|(0x7f<<5),	"1,2,d", 0, 0, v6 },
+{ "srl",	F3(2, 0x26, 1), F3(~2, ~0x26, ~1)|(1<<12)|(0x7f<<5),	"1,X,d", 0, 0, v6 },
+
+{ "sllx",	F3(2, 0x25, 0)|(1<<12), F3(~2, ~0x25, ~0)|(0x7f<<5),	"1,2,d", 0, 0, v9 },
+{ "sllx",	F3(2, 0x25, 1)|(1<<12), F3(~2, ~0x25, ~1)|(0x3f<<6),	"1,Y,d", 0, 0, v9 },
+{ "srax",	F3(2, 0x27, 0)|(1<<12), F3(~2, ~0x27, ~0)|(0x7f<<5),	"1,2,d", 0, 0, v9 },
+{ "srax",	F3(2, 0x27, 1)|(1<<12), F3(~2, ~0x27, ~1)|(0x3f<<6),	"1,Y,d", 0, 0, v9 },
+{ "srlx",	F3(2, 0x26, 0)|(1<<12), F3(~2, ~0x26, ~0)|(0x7f<<5),	"1,2,d", 0, 0, v9 },
+{ "srlx",	F3(2, 0x26, 1)|(1<<12), F3(~2, ~0x26, ~1)|(0x3f<<6),	"1,Y,d", 0, 0, v9 },
+
+{ "mulscc",	F3(2, 0x24, 0), F3(~2, ~0x24, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "mulscc",	F3(2, 0x24, 1), F3(~2, ~0x24, ~1),		"1,i,d", 0, 0, v6 },
+
+{ "divscc",	F3(2, 0x1d, 0), F3(~2, ~0x1d, ~0)|ASI(~0),	"1,2,d", 0, 0, sparclite },
+{ "divscc",	F3(2, 0x1d, 1), F3(~2, ~0x1d, ~1),		"1,i,d", 0, 0, sparclite },
+
+{ "scan",	F3(2, 0x2c, 0), F3(~2, ~0x2c, ~0)|ASI(~0),	"1,2,d", 0, 0, sparclet|sparclite },
+{ "scan",	F3(2, 0x2c, 1), F3(~2, ~0x2c, ~1),		"1,i,d", 0, 0, sparclet|sparclite },
+
+{ "popc",	F3(2, 0x2e, 0), F3(~2, ~0x2e, ~0)|RS1_G0|ASI(~0),"2,d", 0, HWCAP_POPC, v9 },
+{ "popc",	F3(2, 0x2e, 1), F3(~2, ~0x2e, ~1)|RS1_G0,	"i,d", 0, HWCAP_POPC, v9 },
+
+{ "clr",	F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|RD_G0|RS1_G0|ASI_RS2(~0),	"d", F_ALIAS, 0, v6 }, /* or %g0,%g0,d */
+{ "clr",	F3(2, 0x02, 1), F3(~2, ~0x02, ~1)|RS1_G0|SIMM13(~0),		"d", F_ALIAS, 0, v6 }, /* or %g0,0,d	*/
+{ "clr",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|RD_G0|ASI(~0),		"[1+2]", F_ALIAS, 0, v6 },
+{ "clr",	F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|RD_G0|ASI_RS2(~0),		"[1]", F_ALIAS, 0, v6 }, /* st %g0,[rs1+%g0] */
+{ "clr",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RD_G0,			"[1+i]", F_ALIAS, 0, v6 },
+{ "clr",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RD_G0,			"[i+1]", F_ALIAS, 0, v6 },
+{ "clr",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RD_G0|RS1_G0,			"[i]", F_ALIAS, 0, v6 },
+{ "clr",	F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RD_G0|SIMM13(~0),		"[1]", F_ALIAS, 0, v6 }, /* st %g0,[rs1+0] */
+
+{ "clrb",	F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|RD_G0|ASI(~0),	"[1+2]", F_ALIAS, 0, v6 },
+{ "clrb",	F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|RD_G0|ASI_RS2(~0),	"[1]", F_ALIAS, 0, v6 }, /* stb %g0,[rs1+%g0] */
+{ "clrb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RD_G0,		"[1+i]", F_ALIAS, 0, v6 },
+{ "clrb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RD_G0,		"[i+1]", F_ALIAS, 0, v6 },
+{ "clrb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RD_G0|RS1_G0,		"[i]", F_ALIAS, 0, v6 },
+{ "clrb",	F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RD_G0|SIMM13(~0),	"[1]", F_ALIAS, 0, v6 }, /* stb %g0,[rs1+0] */
+
+{ "clrh",	F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|RD_G0|ASI(~0),	"[1+2]", F_ALIAS, 0, v6 },
+{ "clrh",	F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|RD_G0|ASI_RS2(~0),	"[1]", F_ALIAS, 0, v6 }, /* sth %g0,[rs1+%g0] */
+{ "clrh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RD_G0,		"[1+i]", F_ALIAS, 0, v6 },
+{ "clrh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RD_G0,		"[i+1]", F_ALIAS, 0, v6 },
+{ "clrh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RD_G0|RS1_G0,		"[i]", F_ALIAS, 0, v6 },
+{ "clrh",	F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RD_G0|SIMM13(~0),	"[1]", F_ALIAS, 0, v6 }, /* sth %g0,[rs1+0] */
+
+{ "clrx",	F3(3, 0x0e, 0), F3(~3, ~0x0e, ~0)|RD_G0|ASI(~0),	"[1+2]", F_ALIAS, 0, v9 },
+{ "clrx",	F3(3, 0x0e, 0), F3(~3, ~0x0e, ~0)|RD_G0|ASI_RS2(~0),	"[1]", F_ALIAS, 0, v9 }, /* stx %g0,[rs1+%g0] */
+{ "clrx",	F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RD_G0,		"[1+i]", F_ALIAS, 0, v9 },
+{ "clrx",	F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RD_G0,		"[i+1]", F_ALIAS, 0, v9 },
+{ "clrx",	F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RD_G0|RS1_G0,		"[i]", F_ALIAS, 0, v9 },
+{ "clrx",	F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RD_G0|SIMM13(~0),	"[1]", F_ALIAS, 0, v9 }, /* stx %g0,[rs1+0] */
+
+{ "orcc",	F3(2, 0x12, 0), F3(~2, ~0x12, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "orcc",	F3(2, 0x12, 1), F3(~2, ~0x12, ~1),		"1,i,d", 0, 0, v6 },
+{ "orcc",	F3(2, 0x12, 1), F3(~2, ~0x12, ~1),		"i,1,d", 0, 0, v6 },
 
 /* This is not a commutative instruction.  */
-{ "orncc",	F3(2, 0x16, 0), F3(~2, ~0x16, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "orncc",	F3(2, 0x16, 1), F3(~2, ~0x16, ~1),		"1,i,d", 0, v6 },
+{ "orncc",	F3(2, 0x16, 0), F3(~2, ~0x16, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "orncc",	F3(2, 0x16, 1), F3(~2, ~0x16, ~1),		"1,i,d", 0, 0, v6 },
 
 /* This is not a commutative instruction.  */
-{ "orn",	F3(2, 0x06, 0), F3(~2, ~0x06, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "orn",	F3(2, 0x06, 1), F3(~2, ~0x06, ~1),		"1,i,d", 0, v6 },
-
-{ "tst",	F3(2, 0x12, 0), F3(~2, ~0x12, ~0)|RD_G0|ASI_RS2(~0),	"1", 0, v6 }, /* orcc rs1, %g0, %g0 */
-{ "tst",	F3(2, 0x12, 0), F3(~2, ~0x12, ~0)|RD_G0|RS1_G0|ASI(~0),	"2", 0, v6 }, /* orcc %g0, rs2, %g0 */
-{ "tst",	F3(2, 0x12, 1), F3(~2, ~0x12, ~1)|RD_G0|SIMM13(~0),	"1", 0, v6 }, /* orcc rs1, 0, %g0 */
-
-{ "wr",	F3(2, 0x30, 0),		F3(~2, ~0x30, ~0)|ASI(~0),		"1,2,m", 0, v8 }, /* wr r,r,%asrX */
-{ "wr",	F3(2, 0x30, 1),		F3(~2, ~0x30, ~1),			"1,i,m", 0, v8 }, /* wr r,i,%asrX */
-{ "wr",	F3(2, 0x30, 0),		F3(~2, ~0x30, ~0)|RS1_G0|ASI(~0),	"2,m", F_ALIAS, v8 }, /* wr %g0,rs2,%asrX */
-{ "wr",	F3(2, 0x30, 1),		F3(~2, ~0x30, ~1)|RS1_G0,		"i,m", F_ALIAS, v8 }, /* wr %g0,i,%asrX */
-{ "wr",	F3(2, 0x30, 0),		F3(~2, ~0x30, ~0)|ASI_RS2(~0),		"1,m", F_ALIAS, v8 }, /* wr rs1,%g0,%asrX */
-{ "wr",	F3(2, 0x30, 0),		F3(~2, ~0x30, ~0)|RD_G0|ASI(~0),	"1,2,y", 0, v6 }, /* wr r,r,%y */
-{ "wr",	F3(2, 0x30, 1),		F3(~2, ~0x30, ~1)|RD_G0,		"1,i,y", 0, v6 }, /* wr r,i,%y */
-{ "wr",	F3(2, 0x30, 0),		F3(~2, ~0x30, ~0)|RD_G0|RS1_G0|ASI(~0),	"2,y", F_ALIAS, v6 }, /* wr %g0,rs2,%y */
-{ "wr",	F3(2, 0x30, 1),		F3(~2, ~0x30, ~1)|RD_G0|RS1_G0,		"i,y", F_ALIAS, v6 }, /* wr %g0,i,%y */
-{ "wr",	F3(2, 0x30, 0),		F3(~2, ~0x30, ~0)|RD_G0|ASI_RS2(~0),	"1,y", F_ALIAS, v6 }, /* wr rs1,%g0,%y */
-{ "wr",	F3(2, 0x31, 0),		F3(~2, ~0x31, ~0)|RD_G0|ASI(~0),	"1,2,p", 0, v6notv9 }, /* wr r,r,%psr */
-{ "wr",	F3(2, 0x31, 1),		F3(~2, ~0x31, ~1)|RD_G0,		"1,i,p", 0, v6notv9 }, /* wr r,i,%psr */
-{ "wr",	F3(2, 0x31, 0),		F3(~2, ~0x31, ~0)|RD_G0|RS1_G0|ASI(~0),	"2,p", F_ALIAS, v6notv9 }, /* wr %g0,rs2,%psr */
-{ "wr",	F3(2, 0x31, 1),		F3(~2, ~0x31, ~1)|RD_G0|RS1_G0,		"i,p", F_ALIAS, v6notv9 }, /* wr %g0,i,%psr */
-{ "wr",	F3(2, 0x31, 0),		F3(~2, ~0x31, ~0)|RD_G0|ASI_RS2(~0),	"1,p", F_ALIAS, v6notv9 }, /* wr rs1,%g0,%psr */
-{ "wr",	F3(2, 0x32, 0),		F3(~2, ~0x32, ~0)|RD_G0|ASI(~0),	"1,2,w", 0, v6notv9 }, /* wr r,r,%wim */
-{ "wr",	F3(2, 0x32, 1),		F3(~2, ~0x32, ~1)|RD_G0,		"1,i,w", 0, v6notv9 }, /* wr r,i,%wim */
-{ "wr",	F3(2, 0x32, 0),		F3(~2, ~0x32, ~0)|RD_G0|RS1_G0|ASI(~0),	"2,w", F_ALIAS, v6notv9 }, /* wr %g0,rs2,%wim */
-{ "wr",	F3(2, 0x32, 1),		F3(~2, ~0x32, ~1)|RD_G0|RS1_G0,		"i,w", F_ALIAS, v6notv9 }, /* wr %g0,i,%wim */
-{ "wr",	F3(2, 0x32, 0),		F3(~2, ~0x32, ~0)|RD_G0|ASI_RS2(~0),	"1,w", F_ALIAS, v6notv9 }, /* wr rs1,%g0,%wim */
-{ "wr",	F3(2, 0x33, 0),		F3(~2, ~0x33, ~0)|RD_G0|ASI(~0),	"1,2,t", 0, v6notv9 }, /* wr r,r,%tbr */
-{ "wr",	F3(2, 0x33, 1),		F3(~2, ~0x33, ~1)|RD_G0,		"1,i,t", 0, v6notv9 }, /* wr r,i,%tbr */
-{ "wr",	F3(2, 0x33, 0),		F3(~2, ~0x33, ~0)|RD_G0|RS1_G0|ASI(~0),	"2,t", F_ALIAS, v6notv9 }, /* wr %g0,rs2,%tbr */
-{ "wr",	F3(2, 0x33, 1),		F3(~2, ~0x33, ~1)|RD_G0|RS1_G0,		"i,t", F_ALIAS, v6notv9 }, /* wr %g0,i,%tbr */
-{ "wr",	F3(2, 0x33, 0),		F3(~2, ~0x33, ~0)|RD_G0|ASI_RS2(~0),	"1,t", F_ALIAS, v6notv9 }, /* wr rs1,%g0,%tbr */
-
-{ "wr", F3(2, 0x30, 0)|RD(2),	F3(~2, ~0x30, ~0)|RD(~2)|ASI(~0),	"1,2,E", 0, v9 }, /* wr r,r,%ccr */
-{ "wr", F3(2, 0x30, 1)|RD(2),	F3(~2, ~0x30, ~1)|RD(~2),		"1,i,E", 0, v9 }, /* wr r,i,%ccr */
-{ "wr", F3(2, 0x30, 0)|RD(3),	F3(~2, ~0x30, ~0)|RD(~3)|ASI(~0),	"1,2,o", 0, v9 }, /* wr r,r,%asi */
-{ "wr", F3(2, 0x30, 1)|RD(3),	F3(~2, ~0x30, ~1)|RD(~3),		"1,i,o", 0, v9 }, /* wr r,i,%asi */
-{ "wr", F3(2, 0x30, 0)|RD(6),	F3(~2, ~0x30, ~0)|RD(~6)|ASI(~0),	"1,2,s", 0, v9 }, /* wr r,r,%fprs */
-{ "wr", F3(2, 0x30, 1)|RD(6),	F3(~2, ~0x30, ~1)|RD(~6),		"1,i,s", 0, v9 }, /* wr r,i,%fprs */
-
-{ "wr", F3(2, 0x30, 0)|RD(16),	F3(~2, ~0x30, ~0)|RD(~16)|ASI(~0),	"1,2,_", F_VIS, v9a }, /* wr r,r,%pcr */
-{ "wr", F3(2, 0x30, 1)|RD(16),	F3(~2, ~0x30, ~1)|RD(~16),		"1,i,_", F_VIS, v9a }, /* wr r,i,%pcr */
-{ "wr", F3(2, 0x30, 0)|RD(17),	F3(~2, ~0x30, ~0)|RD(~17)|ASI(~0),	"1,2,_", F_VIS, v9a }, /* wr r,r,%pic */
-{ "wr", F3(2, 0x30, 1)|RD(17),	F3(~2, ~0x30, ~1)|RD(~17),		"1,i,_", F_VIS, v9a }, /* wr r,i,%pic */
-{ "wr", F3(2, 0x30, 0)|RD(18),	F3(~2, ~0x30, ~0)|RD(~18)|ASI(~0),	"1,2,_", F_VIS, v9a }, /* wr r,r,%dcr */
-{ "wr", F3(2, 0x30, 1)|RD(18),	F3(~2, ~0x30, ~1)|RD(~18),		"1,i,_", F_VIS, v9a }, /* wr r,i,%dcr */
-{ "wr", F3(2, 0x30, 0)|RD(19),	F3(~2, ~0x30, ~0)|RD(~19)|ASI(~0),	"1,2,_", F_VIS, v9a }, /* wr r,r,%gsr */
-{ "wr", F3(2, 0x30, 1)|RD(19),	F3(~2, ~0x30, ~1)|RD(~19),		"1,i,_", F_VIS, v9a }, /* wr r,i,%gsr */
-{ "wr", F3(2, 0x30, 0)|RD(20),	F3(~2, ~0x30, ~0)|RD(~20)|ASI(~0),	"1,2,_", F_VIS, v9a }, /* wr r,r,%set_softint */
-{ "wr", F3(2, 0x30, 1)|RD(20),	F3(~2, ~0x30, ~1)|RD(~20),		"1,i,_", F_VIS, v9a }, /* wr r,i,%set_softint */
-{ "wr", F3(2, 0x30, 0)|RD(21),	F3(~2, ~0x30, ~0)|RD(~21)|ASI(~0),	"1,2,_", F_VIS, v9a }, /* wr r,r,%clear_softint */
-{ "wr", F3(2, 0x30, 1)|RD(21),	F3(~2, ~0x30, ~1)|RD(~21),		"1,i,_", F_VIS, v9a }, /* wr r,i,%clear_softint */
-{ "wr", F3(2, 0x30, 0)|RD(22),	F3(~2, ~0x30, ~0)|RD(~22)|ASI(~0),	"1,2,_", F_VIS, v9a }, /* wr r,r,%softint */
-{ "wr", F3(2, 0x30, 1)|RD(22),	F3(~2, ~0x30, ~1)|RD(~22),		"1,i,_", F_VIS, v9a }, /* wr r,i,%softint */
-{ "wr", F3(2, 0x30, 0)|RD(23),	F3(~2, ~0x30, ~0)|RD(~23)|ASI(~0),	"1,2,_", F_VIS, v9a }, /* wr r,r,%tick_cmpr */
-{ "wr", F3(2, 0x30, 1)|RD(23),	F3(~2, ~0x30, ~1)|RD(~23),		"1,i,_", F_VIS, v9a }, /* wr r,i,%tick_cmpr */
-{ "wr", F3(2, 0x30, 0)|RD(24),	F3(~2, ~0x30, ~0)|RD(~24)|ASI(~0),	"1,2,_", F_VIS2, v9b }, /* wr r,r,%sys_tick */
-{ "wr", F3(2, 0x30, 1)|RD(24),	F3(~2, ~0x30, ~1)|RD(~24),		"1,i,_", F_VIS2, v9b }, /* wr r,i,%sys_tick */
-{ "wr", F3(2, 0x30, 0)|RD(25),	F3(~2, ~0x30, ~0)|RD(~25)|ASI(~0),	"1,2,_", F_VIS2, v9b }, /* wr r,r,%sys_tick_cmpr */
-{ "wr", F3(2, 0x30, 1)|RD(25),	F3(~2, ~0x30, ~1)|RD(~25),		"1,i,_", F_VIS2, v9b }, /* wr r,i,%sys_tick_cmpr */
-{ "wr", F3(2, 0x30, 0)|RD(28),	F3(~2, ~0x30, ~0)|RD(~28)|ASI(~0),	"1,2,_", F_VIS3, v9b }, /* wr r,r,%cps */
-{ "wr", F3(2, 0x30, 1)|RD(28),	F3(~2, ~0x30, ~1)|RD(~28),		"1,i,_", F_VIS3, v9b }, /* wr r,i,%cps */
-
-{ "rd",	F3(2, 0x28, 0),			F3(~2, ~0x28, ~0)|SIMM13(~0),		"M,d", 0, v8 }, /* rd %asrX,r */
-{ "rd",	F3(2, 0x28, 0),			F3(~2, ~0x28, ~0)|RS1_G0|SIMM13(~0),	"y,d", 0, v6 }, /* rd %y,r */
-{ "rd",	F3(2, 0x29, 0),			F3(~2, ~0x29, ~0)|RS1_G0|SIMM13(~0),	"p,d", 0, v6notv9 }, /* rd %psr,r */
-{ "rd",	F3(2, 0x2a, 0),			F3(~2, ~0x2a, ~0)|RS1_G0|SIMM13(~0),	"w,d", 0, v6notv9 }, /* rd %wim,r */
-{ "rd",	F3(2, 0x2b, 0),			F3(~2, ~0x2b, ~0)|RS1_G0|SIMM13(~0),	"t,d", 0, v6notv9 }, /* rd %tbr,r */
-
-{ "rd",	F3(2, 0x28, 0)|RS1(2),		F3(~2, ~0x28, ~0)|RS1(~2)|SIMM13(~0),	"E,d", 0, v9 }, /* rd %ccr,r */
-{ "rd",	F3(2, 0x28, 0)|RS1(3),		F3(~2, ~0x28, ~0)|RS1(~3)|SIMM13(~0),	"o,d", 0, v9 }, /* rd %asi,r */
-{ "rd",	F3(2, 0x28, 0)|RS1(4),		F3(~2, ~0x28, ~0)|RS1(~4)|SIMM13(~0),	"W,d", 0, v9 }, /* rd %tick,r */
-{ "rd",	F3(2, 0x28, 0)|RS1(5),		F3(~2, ~0x28, ~0)|RS1(~5)|SIMM13(~0),	"P,d", 0, v9 }, /* rd %pc,r */
-{ "rd",	F3(2, 0x28, 0)|RS1(6),		F3(~2, ~0x28, ~0)|RS1(~6)|SIMM13(~0),	"s,d", 0, v9 }, /* rd %fprs,r */
-
-{ "rd",	F3(2, 0x28, 0)|RS1(16),		F3(~2, ~0x28, ~0)|RS1(~16)|SIMM13(~0),	"/,d", F_VIS, v9a }, /* rd %pcr,r */
-{ "rd",	F3(2, 0x28, 0)|RS1(17),		F3(~2, ~0x28, ~0)|RS1(~17)|SIMM13(~0),	"/,d", F_VIS, v9a }, /* rd %pic,r */
-{ "rd",	F3(2, 0x28, 0)|RS1(18),		F3(~2, ~0x28, ~0)|RS1(~18)|SIMM13(~0),	"/,d", F_VIS, v9a }, /* rd %dcr,r */
-{ "rd",	F3(2, 0x28, 0)|RS1(19),		F3(~2, ~0x28, ~0)|RS1(~19)|SIMM13(~0),	"/,d", F_VIS, v9a }, /* rd %gsr,r */
-{ "rd",	F3(2, 0x28, 0)|RS1(22),		F3(~2, ~0x28, ~0)|RS1(~22)|SIMM13(~0),	"/,d", F_VIS, v9a }, /* rd %softint,r */
-{ "rd",	F3(2, 0x28, 0)|RS1(23),		F3(~2, ~0x28, ~0)|RS1(~23)|SIMM13(~0),	"/,d", F_VIS, v9a }, /* rd %tick_cmpr,r */
-{ "rd",	F3(2, 0x28, 0)|RS1(24),		F3(~2, ~0x28, ~0)|RS1(~24)|SIMM13(~0),	"/,d", F_VIS2, v9b }, /* rd %sys_tick,r */
-{ "rd",	F3(2, 0x28, 0)|RS1(25),		F3(~2, ~0x28, ~0)|RS1(~25)|SIMM13(~0),	"/,d", F_VIS2, v9b }, /* rd %sys_tick_cmpr,r */
-{ "rd",	F3(2, 0x28, 0)|RS1(28),		F3(~2, ~0x28, ~0)|RS1(~28)|SIMM13(~0),	"/,d", F_VIS3, v9b }, /* rd %cps,r */
-
-{ "rdpr",	F3(2, 0x2a, 0),		F3(~2, ~0x2a, ~0)|SIMM13(~0),	"?,d", 0, v9 },   /* rdpr %priv,r */
-{ "wrpr",	F3(2, 0x32, 0),		F3(~2, ~0x32, ~0),		"1,2,!", 0, v9 }, /* wrpr r1,r2,%priv */
-{ "wrpr",	F3(2, 0x32, 0),		F3(~2, ~0x32, ~0)|SIMM13(~0),	"1,!", 0, v9 },   /* wrpr r1,%priv */
-{ "wrpr",	F3(2, 0x32, 1),		F3(~2, ~0x32, ~1),		"1,i,!", 0, v9 }, /* wrpr r1,i,%priv */
-{ "wrpr",	F3(2, 0x32, 1),		F3(~2, ~0x32, ~1),		"i,1,!", F_ALIAS, v9 }, /* wrpr i,r1,%priv */
-{ "wrpr",	F3(2, 0x32, 1),		F3(~2, ~0x32, ~1)|RS1(~0),	"i,!", 0, v9 },   /* wrpr i,%priv */
-
-{ "rdhpr",	F3(2, 0x29, 0),		F3(~2, ~0x29, ~0)|SIMM13(~0),	"$,d", 0, v9 },   /* rdhpr %hpriv,r */
-{ "wrhpr",	F3(2, 0x33, 0),		F3(~2, ~0x33, ~0),		"1,2,%", 0, v9 }, /* wrhpr r1,r2,%hpriv */
-{ "wrhpr",	F3(2, 0x33, 0),		F3(~2, ~0x33, ~0)|SIMM13(~0),	"1,%", 0, v9 },   /* wrhpr r1,%hpriv */
-{ "wrhpr",	F3(2, 0x33, 1),		F3(~2, ~0x33, ~1),		"1,i,%", 0, v9 }, /* wrhpr r1,i,%hpriv */
-{ "wrhpr",	F3(2, 0x33, 1),		F3(~2, ~0x33, ~1),		"i,1,%", F_ALIAS, v9 }, /* wrhpr i,r1,%hpriv */
-{ "wrhpr",	F3(2, 0x33, 1),		F3(~2, ~0x33, ~1)|RS1(~0),	"i,%", 0, v9 },   /* wrhpr i,%hpriv */
+{ "orn",	F3(2, 0x06, 0), F3(~2, ~0x06, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "orn",	F3(2, 0x06, 1), F3(~2, ~0x06, ~1),		"1,i,d", 0, 0, v6 },
+
+{ "tst",	F3(2, 0x12, 0), F3(~2, ~0x12, ~0)|RD_G0|ASI_RS2(~0),	"1", 0, 0, v6 }, /* orcc rs1, %g0, %g0 */
+{ "tst",	F3(2, 0x12, 0), F3(~2, ~0x12, ~0)|RD_G0|RS1_G0|ASI(~0),	"2", 0, 0, v6 }, /* orcc %g0, rs2, %g0 */
+{ "tst",	F3(2, 0x12, 1), F3(~2, ~0x12, ~1)|RD_G0|SIMM13(~0),	"1", 0, 0, v6 }, /* orcc rs1, 0, %g0 */
+
+{ "wr",	F3(2, 0x30, 0),		F3(~2, ~0x30, ~0)|ASI(~0),		"1,2,m", 0, 0, v8 }, /* wr r,r,%asrX */
+{ "wr",	F3(2, 0x30, 1),		F3(~2, ~0x30, ~1),			"1,i,m", 0, 0, v8 }, /* wr r,i,%asrX */
+{ "wr",	F3(2, 0x30, 0),		F3(~2, ~0x30, ~0)|RS1_G0|ASI(~0),	"2,m", F_ALIAS, 0, v8 }, /* wr %g0,rs2,%asrX */
+{ "wr",	F3(2, 0x30, 1),		F3(~2, ~0x30, ~1)|RS1_G0,		"i,m", F_ALIAS, 0, v8 }, /* wr %g0,i,%asrX */
+{ "wr",	F3(2, 0x30, 0),		F3(~2, ~0x30, ~0)|ASI_RS2(~0),		"1,m", F_ALIAS, 0, v8 }, /* wr rs1,%g0,%asrX */
+{ "wr",	F3(2, 0x30, 0),		F3(~2, ~0x30, ~0)|RD_G0|ASI(~0),	"1,2,y", 0, 0, v6 }, /* wr r,r,%y */
+{ "wr",	F3(2, 0x30, 1),		F3(~2, ~0x30, ~1)|RD_G0,		"1,i,y", 0, 0, v6 }, /* wr r,i,%y */
+{ "wr",	F3(2, 0x30, 0),		F3(~2, ~0x30, ~0)|RD_G0|RS1_G0|ASI(~0),	"2,y", F_ALIAS, 0, v6 }, /* wr %g0,rs2,%y */
+{ "wr",	F3(2, 0x30, 1),		F3(~2, ~0x30, ~1)|RD_G0|RS1_G0,		"i,y", F_ALIAS, 0, v6 }, /* wr %g0,i,%y */
+{ "wr",	F3(2, 0x30, 0),		F3(~2, ~0x30, ~0)|RD_G0|ASI_RS2(~0),	"1,y", F_ALIAS, 0, v6 }, /* wr rs1,%g0,%y */
+{ "wr",	F3(2, 0x31, 0),		F3(~2, ~0x31, ~0)|RD_G0|ASI(~0),	"1,2,p", 0, 0, v6notv9 }, /* wr r,r,%psr */
+{ "wr",	F3(2, 0x31, 1),		F3(~2, ~0x31, ~1)|RD_G0,		"1,i,p", 0, 0, v6notv9 }, /* wr r,i,%psr */
+{ "wr",	F3(2, 0x31, 0),		F3(~2, ~0x31, ~0)|RD_G0|RS1_G0|ASI(~0),	"2,p", F_ALIAS, 0, v6notv9 }, /* wr %g0,rs2,%psr */
+{ "wr",	F3(2, 0x31, 1),		F3(~2, ~0x31, ~1)|RD_G0|RS1_G0,		"i,p", F_ALIAS, 0, v6notv9 }, /* wr %g0,i,%psr */
+{ "wr",	F3(2, 0x31, 0),		F3(~2, ~0x31, ~0)|RD_G0|ASI_RS2(~0),	"1,p", F_ALIAS, 0, v6notv9 }, /* wr rs1,%g0,%psr */
+{ "wr",	F3(2, 0x32, 0),		F3(~2, ~0x32, ~0)|RD_G0|ASI(~0),	"1,2,w", 0, 0, v6notv9 }, /* wr r,r,%wim */
+{ "wr",	F3(2, 0x32, 1),		F3(~2, ~0x32, ~1)|RD_G0,		"1,i,w", 0, 0, v6notv9 }, /* wr r,i,%wim */
+{ "wr",	F3(2, 0x32, 0),		F3(~2, ~0x32, ~0)|RD_G0|RS1_G0|ASI(~0),	"2,w", F_ALIAS, 0, v6notv9 }, /* wr %g0,rs2,%wim */
+{ "wr",	F3(2, 0x32, 1),		F3(~2, ~0x32, ~1)|RD_G0|RS1_G0,		"i,w", F_ALIAS, 0, v6notv9 }, /* wr %g0,i,%wim */
+{ "wr",	F3(2, 0x32, 0),		F3(~2, ~0x32, ~0)|RD_G0|ASI_RS2(~0),	"1,w", F_ALIAS, 0, v6notv9 }, /* wr rs1,%g0,%wim */
+{ "wr",	F3(2, 0x33, 0),		F3(~2, ~0x33, ~0)|RD_G0|ASI(~0),	"1,2,t", 0, 0, v6notv9 }, /* wr r,r,%tbr */
+{ "wr",	F3(2, 0x33, 1),		F3(~2, ~0x33, ~1)|RD_G0,		"1,i,t", 0, 0, v6notv9 }, /* wr r,i,%tbr */
+{ "wr",	F3(2, 0x33, 0),		F3(~2, ~0x33, ~0)|RD_G0|RS1_G0|ASI(~0),	"2,t", F_ALIAS, 0, v6notv9 }, /* wr %g0,rs2,%tbr */
+{ "wr",	F3(2, 0x33, 1),		F3(~2, ~0x33, ~1)|RD_G0|RS1_G0,		"i,t", F_ALIAS, 0, v6notv9 }, /* wr %g0,i,%tbr */
+{ "wr",	F3(2, 0x33, 0),		F3(~2, ~0x33, ~0)|RD_G0|ASI_RS2(~0),	"1,t", F_ALIAS, 0, v6notv9 }, /* wr rs1,%g0,%tbr */
+
+{ "wr", F3(2, 0x30, 0)|RD(2),	F3(~2, ~0x30, ~0)|RD(~2)|ASI(~0),	"1,2,E", 0, 0, v9 }, /* wr r,r,%ccr */
+{ "wr", F3(2, 0x30, 1)|RD(2),	F3(~2, ~0x30, ~1)|RD(~2),		"1,i,E", 0, 0, v9 }, /* wr r,i,%ccr */
+{ "wr", F3(2, 0x30, 0)|RD(3),	F3(~2, ~0x30, ~0)|RD(~3)|ASI(~0),	"1,2,o", 0, 0, v9 }, /* wr r,r,%asi */
+{ "wr", F3(2, 0x30, 1)|RD(3),	F3(~2, ~0x30, ~1)|RD(~3),		"1,i,o", 0, 0, v9 }, /* wr r,i,%asi */
+{ "wr", F3(2, 0x30, 0)|RD(6),	F3(~2, ~0x30, ~0)|RD(~6)|ASI(~0),	"1,2,s", 0, 0, v9 }, /* wr r,r,%fprs */
+{ "wr", F3(2, 0x30, 1)|RD(6),	F3(~2, ~0x30, ~1)|RD(~6),		"1,i,s", 0, 0, v9 }, /* wr r,i,%fprs */
+
+{ "wr", F3(2, 0x30, 0)|RD(16),	F3(~2, ~0x30, ~0)|RD(~16)|ASI(~0),	"1,2,_", 0, HWCAP_VIS, v9a }, /* wr r,r,%pcr */
+{ "wr", F3(2, 0x30, 1)|RD(16),	F3(~2, ~0x30, ~1)|RD(~16),		"1,i,_", 0, HWCAP_VIS, v9a }, /* wr r,i,%pcr */
+{ "wr", F3(2, 0x30, 0)|RD(17),	F3(~2, ~0x30, ~0)|RD(~17)|ASI(~0),	"1,2,_", 0, HWCAP_VIS, v9a }, /* wr r,r,%pic */
+{ "wr", F3(2, 0x30, 1)|RD(17),	F3(~2, ~0x30, ~1)|RD(~17),		"1,i,_", 0, HWCAP_VIS, v9a }, /* wr r,i,%pic */
+{ "wr", F3(2, 0x30, 0)|RD(18),	F3(~2, ~0x30, ~0)|RD(~18)|ASI(~0),	"1,2,_", 0, HWCAP_VIS, v9a }, /* wr r,r,%dcr */
+{ "wr", F3(2, 0x30, 1)|RD(18),	F3(~2, ~0x30, ~1)|RD(~18),		"1,i,_", 0, HWCAP_VIS, v9a }, /* wr r,i,%dcr */
+{ "wr", F3(2, 0x30, 0)|RD(19),	F3(~2, ~0x30, ~0)|RD(~19)|ASI(~0),	"1,2,_", 0, HWCAP_VIS, v9a }, /* wr r,r,%gsr */
+{ "wr", F3(2, 0x30, 1)|RD(19),	F3(~2, ~0x30, ~1)|RD(~19),		"1,i,_", 0, HWCAP_VIS, v9a }, /* wr r,i,%gsr */
+{ "wr", F3(2, 0x30, 0)|RD(20),	F3(~2, ~0x30, ~0)|RD(~20)|ASI(~0),	"1,2,_", 0, HWCAP_VIS, v9a }, /* wr r,r,%set_softint */
+{ "wr", F3(2, 0x30, 1)|RD(20),	F3(~2, ~0x30, ~1)|RD(~20),		"1,i,_", 0, HWCAP_VIS, v9a }, /* wr r,i,%set_softint */
+{ "wr", F3(2, 0x30, 0)|RD(21),	F3(~2, ~0x30, ~0)|RD(~21)|ASI(~0),	"1,2,_", 0, HWCAP_VIS, v9a }, /* wr r,r,%clear_softint */
+{ "wr", F3(2, 0x30, 1)|RD(21),	F3(~2, ~0x30, ~1)|RD(~21),		"1,i,_", 0, HWCAP_VIS, v9a }, /* wr r,i,%clear_softint */
+{ "wr", F3(2, 0x30, 0)|RD(22),	F3(~2, ~0x30, ~0)|RD(~22)|ASI(~0),	"1,2,_", 0, HWCAP_VIS, v9a }, /* wr r,r,%softint */
+{ "wr", F3(2, 0x30, 1)|RD(22),	F3(~2, ~0x30, ~1)|RD(~22),		"1,i,_", 0, HWCAP_VIS, v9a }, /* wr r,i,%softint */
+{ "wr", F3(2, 0x30, 0)|RD(23),	F3(~2, ~0x30, ~0)|RD(~23)|ASI(~0),	"1,2,_", 0, HWCAP_VIS, v9a }, /* wr r,r,%tick_cmpr */
+{ "wr", F3(2, 0x30, 1)|RD(23),	F3(~2, ~0x30, ~1)|RD(~23),		"1,i,_", 0, HWCAP_VIS, v9a }, /* wr r,i,%tick_cmpr */
+{ "wr", F3(2, 0x30, 0)|RD(24),	F3(~2, ~0x30, ~0)|RD(~24)|ASI(~0),	"1,2,_", HWCAP_VIS2, 0, v9b }, /* wr r,r,%sys_tick */
+{ "wr", F3(2, 0x30, 1)|RD(24),	F3(~2, ~0x30, ~1)|RD(~24),		"1,i,_", HWCAP_VIS2, 0, v9b }, /* wr r,i,%sys_tick */
+{ "wr", F3(2, 0x30, 0)|RD(25),	F3(~2, ~0x30, ~0)|RD(~25)|ASI(~0),	"1,2,_", HWCAP_VIS2, 0, v9b }, /* wr r,r,%sys_tick_cmpr */
+{ "wr", F3(2, 0x30, 1)|RD(25),	F3(~2, ~0x30, ~1)|RD(~25),		"1,i,_", HWCAP_VIS2, 0, v9b }, /* wr r,i,%sys_tick_cmpr */
+{ "wr", F3(2, 0x30, 0)|RD(26),	F3(~2, ~0x30, ~0)|RD(~26)|ASI(~0),	"1,2,_", 0, HWCAP_CBCOND, v9b }, /* wr r,r,%cfr */
+{ "wr", F3(2, 0x30, 1)|RD(26),	F3(~2, ~0x30, ~1)|RD(~26),		"1,i,_", 0, HWCAP_CBCOND, v9b }, /* wr r,i,%cfr */
+{ "wr", F3(2, 0x30, 0)|RD(27),	F3(~2, ~0x30, ~0)|RD(~27)|ASI(~0),	"1,2,_", 0, HWCAP_PAUSE, v9b }, /* wr r,r,%pause */
+{ "wr", F3(2, 0x30, 1)|RD(27),	F3(~2, ~0x30, ~1)|RD(~27),		"1,i,_", 0, HWCAP_PAUSE, v9b }, /* wr r,i,%pause */
+{ "wr", F3(2, 0x30, 0)|RD(28),	F3(~2, ~0x30, ~0)|RD(~28)|ASI(~0),	"1,2,_", 0, HWCAP_VIS3, v9b }, /* wr r,r,%cps */
+{ "wr", F3(2, 0x30, 1)|RD(28),	F3(~2, ~0x30, ~1)|RD(~28),		"1,i,_", 0, HWCAP_VIS3, v9b }, /* wr r,i,%cps */
+
+{ "pause", F3(2, 0x30, 1)|RD(27)|RS1(0), F3(~2, ~0x30, ~1)|RD(~27)|RS1(~0), "i", 0, HWCAP_PAUSE, v9b }, /* wr %g0,i,%pause */
+
+{ "rd",	F3(2, 0x28, 0),			F3(~2, ~0x28, ~0)|SIMM13(~0),		"M,d", 0, 0, v8 }, /* rd %asrX,r */
+{ "rd",	F3(2, 0x28, 0),			F3(~2, ~0x28, ~0)|RS1_G0|SIMM13(~0),	"y,d", 0, 0, v6 }, /* rd %y,r */
+{ "rd",	F3(2, 0x29, 0),			F3(~2, ~0x29, ~0)|RS1_G0|SIMM13(~0),	"p,d", 0, 0, v6notv9 }, /* rd %psr,r */
+{ "rd",	F3(2, 0x2a, 0),			F3(~2, ~0x2a, ~0)|RS1_G0|SIMM13(~0),	"w,d", 0, 0, v6notv9 }, /* rd %wim,r */
+{ "rd",	F3(2, 0x2b, 0),			F3(~2, ~0x2b, ~0)|RS1_G0|SIMM13(~0),	"t,d", 0, 0, v6notv9 }, /* rd %tbr,r */
+
+{ "rd",	F3(2, 0x28, 0)|RS1(2),		F3(~2, ~0x28, ~0)|RS1(~2)|SIMM13(~0),	"E,d", 0, 0, v9 }, /* rd %ccr,r */
+{ "rd",	F3(2, 0x28, 0)|RS1(3),		F3(~2, ~0x28, ~0)|RS1(~3)|SIMM13(~0),	"o,d", 0, 0, v9 }, /* rd %asi,r */
+{ "rd",	F3(2, 0x28, 0)|RS1(4),		F3(~2, ~0x28, ~0)|RS1(~4)|SIMM13(~0),	"W,d", 0, 0, v9 }, /* rd %tick,r */
+{ "rd",	F3(2, 0x28, 0)|RS1(5),		F3(~2, ~0x28, ~0)|RS1(~5)|SIMM13(~0),	"P,d", 0, 0, v9 }, /* rd %pc,r */
+{ "rd",	F3(2, 0x28, 0)|RS1(6),		F3(~2, ~0x28, ~0)|RS1(~6)|SIMM13(~0),	"s,d", 0, 0, v9 }, /* rd %fprs,r */
+
+{ "rd",	F3(2, 0x28, 0)|RS1(16),		F3(~2, ~0x28, ~0)|RS1(~16)|SIMM13(~0),	"/,d", 0, HWCAP_VIS, v9a }, /* rd %pcr,r */
+{ "rd",	F3(2, 0x28, 0)|RS1(17),		F3(~2, ~0x28, ~0)|RS1(~17)|SIMM13(~0),	"/,d", 0, HWCAP_VIS, v9a }, /* rd %pic,r */
+{ "rd",	F3(2, 0x28, 0)|RS1(18),		F3(~2, ~0x28, ~0)|RS1(~18)|SIMM13(~0),	"/,d", 0, HWCAP_VIS, v9a }, /* rd %dcr,r */
+{ "rd",	F3(2, 0x28, 0)|RS1(19),		F3(~2, ~0x28, ~0)|RS1(~19)|SIMM13(~0),	"/,d", 0, HWCAP_VIS, v9a }, /* rd %gsr,r */
+{ "rd",	F3(2, 0x28, 0)|RS1(22),		F3(~2, ~0x28, ~0)|RS1(~22)|SIMM13(~0),	"/,d", 0, HWCAP_VIS, v9a }, /* rd %softint,r */
+{ "rd",	F3(2, 0x28, 0)|RS1(23),		F3(~2, ~0x28, ~0)|RS1(~23)|SIMM13(~0),	"/,d", 0, HWCAP_VIS, v9a }, /* rd %tick_cmpr,r */
+{ "rd",	F3(2, 0x28, 0)|RS1(24),		F3(~2, ~0x28, ~0)|RS1(~24)|SIMM13(~0),	"/,d", HWCAP_VIS2, 0, v9b }, /* rd %sys_tick,r */
+{ "rd",	F3(2, 0x28, 0)|RS1(25),		F3(~2, ~0x28, ~0)|RS1(~25)|SIMM13(~0),	"/,d", HWCAP_VIS2, 0, v9b }, /* rd %sys_tick_cmpr,r */
+{ "rd",	F3(2, 0x28, 0)|RS1(26),		F3(~2, ~0x28, ~0)|RS1(~26)|SIMM13(~0),	"/,d", HWCAP_CBCOND, 0, v9b }, /* rd %cfr,r */
+{ "rd",	F3(2, 0x28, 0)|RS1(28),		F3(~2, ~0x28, ~0)|RS1(~28)|SIMM13(~0),	"/,d", 0, HWCAP_VIS3, v9b }, /* rd %cps,r */
+
+{ "rdpr",	F3(2, 0x2a, 0),		F3(~2, ~0x2a, ~0)|SIMM13(~0),	"?,d", 0, 0, v9 },   /* rdpr %priv,r */
+{ "wrpr",	F3(2, 0x32, 0),		F3(~2, ~0x32, ~0),		"1,2,!", 0, 0, v9 }, /* wrpr r1,r2,%priv */
+{ "wrpr",	F3(2, 0x32, 0),		F3(~2, ~0x32, ~0)|SIMM13(~0),	"1,!", 0, 0, v9 },   /* wrpr r1,%priv */
+{ "wrpr",	F3(2, 0x32, 1),		F3(~2, ~0x32, ~1),		"1,i,!", 0, 0, v9 }, /* wrpr r1,i,%priv */
+{ "wrpr",	F3(2, 0x32, 1),		F3(~2, ~0x32, ~1),		"i,1,!", F_ALIAS, 0, v9 }, /* wrpr i,r1,%priv */
+{ "wrpr",	F3(2, 0x32, 1),		F3(~2, ~0x32, ~1)|RS1(~0),	"i,!", 0, 0, v9 },   /* wrpr i,%priv */
+
+{ "rdhpr",	F3(2, 0x29, 0),		F3(~2, ~0x29, ~0)|SIMM13(~0),	"$,d", 0, 0, v9 },   /* rdhpr %hpriv,r */
+{ "wrhpr",	F3(2, 0x33, 0),		F3(~2, ~0x33, ~0),		"1,2,%", 0, 0, v9 }, /* wrhpr r1,r2,%hpriv */
+{ "wrhpr",	F3(2, 0x33, 0),		F3(~2, ~0x33, ~0)|SIMM13(~0),	"1,%", 0, 0, v9 },   /* wrhpr r1,%hpriv */
+{ "wrhpr",	F3(2, 0x33, 1),		F3(~2, ~0x33, ~1),		"1,i,%", 0, 0, v9 }, /* wrhpr r1,i,%hpriv */
+{ "wrhpr",	F3(2, 0x33, 1),		F3(~2, ~0x33, ~1),		"i,1,%", F_ALIAS, 0, v9 }, /* wrhpr i,r1,%hpriv */
+{ "wrhpr",	F3(2, 0x33, 1),		F3(~2, ~0x33, ~1)|RS1(~0),	"i,%", 0, 0, v9 },   /* wrhpr i,%hpriv */
 
 /* ??? This group seems wrong.  A three operand move?  */
-{ "mov",	F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|ASI(~0),		"1,2,m", F_ALIAS, v8 }, /* wr r,r,%asrX */
-{ "mov",	F3(2, 0x30, 1), F3(~2, ~0x30, ~1),			"1,i,m", F_ALIAS, v8 }, /* wr r,i,%asrX */
-{ "mov",	F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|RD_G0|ASI(~0),	"1,2,y", F_ALIAS, v6 }, /* wr r,r,%y */
-{ "mov",	F3(2, 0x30, 1), F3(~2, ~0x30, ~1)|RD_G0,		"1,i,y", F_ALIAS, v6 }, /* wr r,i,%y */
-{ "mov",	F3(2, 0x31, 0), F3(~2, ~0x31, ~0)|RD_G0|ASI(~0),	"1,2,p", F_ALIAS, v6notv9 }, /* wr r,r,%psr */
-{ "mov",	F3(2, 0x31, 1), F3(~2, ~0x31, ~1)|RD_G0,		"1,i,p", F_ALIAS, v6notv9 }, /* wr r,i,%psr */
-{ "mov",	F3(2, 0x32, 0), F3(~2, ~0x32, ~0)|RD_G0|ASI(~0),	"1,2,w", F_ALIAS, v6notv9 }, /* wr r,r,%wim */
-{ "mov",	F3(2, 0x32, 1), F3(~2, ~0x32, ~1)|RD_G0,		"1,i,w", F_ALIAS, v6notv9 }, /* wr r,i,%wim */
-{ "mov",	F3(2, 0x33, 0), F3(~2, ~0x33, ~0)|RD_G0|ASI(~0),	"1,2,t", F_ALIAS, v6notv9 }, /* wr r,r,%tbr */
-{ "mov",	F3(2, 0x33, 1), F3(~2, ~0x33, ~1)|RD_G0,		"1,i,t", F_ALIAS, v6notv9 }, /* wr r,i,%tbr */
-
-{ "mov",	F3(2, 0x28, 0), F3(~2, ~0x28, ~0)|SIMM13(~0),		"M,d", F_ALIAS, v8 }, /* rd %asr1,r */
-{ "mov",	F3(2, 0x28, 0), F3(~2, ~0x28, ~0)|RS1_G0|SIMM13(~0),	"y,d", F_ALIAS, v6 }, /* rd %y,r */
-{ "mov",	F3(2, 0x29, 0), F3(~2, ~0x29, ~0)|RS1_G0|SIMM13(~0),	"p,d", F_ALIAS, v6notv9 }, /* rd %psr,r */
-{ "mov",	F3(2, 0x2a, 0), F3(~2, ~0x2a, ~0)|RS1_G0|SIMM13(~0),	"w,d", F_ALIAS, v6notv9 }, /* rd %wim,r */
-{ "mov",	F3(2, 0x2b, 0), F3(~2, ~0x2b, ~0)|RS1_G0|SIMM13(~0),	"t,d", F_ALIAS, v6notv9 }, /* rd %tbr,r */
-
-{ "mov",	F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|RS1_G0|ASI(~0),	"2,m", F_ALIAS, v8 }, /* wr %g0,rs2,%asrX */
-{ "mov",	F3(2, 0x30, 1), F3(~2, ~0x30, ~1)|RS1_G0,		"i,m", F_ALIAS, v8 }, /* wr %g0,i,%asrX */
-{ "mov",	F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|ASI_RS2(~0),		"1,m", F_ALIAS, v8 }, /* wr rs1,%g0,%asrX */
-{ "mov",	F3(2, 0x30, 1), F3(~2, ~0x30, ~1)|SIMM13(~0),		"1,m", F_ALIAS, v8 }, /* wr rs1,0,%asrX */
-{ "mov",	F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|RD_G0|RS1_G0|ASI(~0),	"2,y", F_ALIAS, v6 }, /* wr %g0,rs2,%y */
-{ "mov",	F3(2, 0x30, 1), F3(~2, ~0x30, ~1)|RD_G0|RS1_G0,		"i,y", F_ALIAS, v6 }, /* wr %g0,i,%y */
-{ "mov",	F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|RD_G0|ASI_RS2(~0),	"1,y", F_ALIAS, v6 }, /* wr rs1,%g0,%y */
-{ "mov",	F3(2, 0x30, 1), F3(~2, ~0x30, ~1)|RD_G0|SIMM13(~0),	"1,y", F_ALIAS, v6 }, /* wr rs1,0,%y */
-{ "mov",	F3(2, 0x31, 0), F3(~2, ~0x31, ~0)|RD_G0|RS1_G0|ASI(~0),	"2,p", F_ALIAS, v6notv9 }, /* wr %g0,rs2,%psr */
-{ "mov",	F3(2, 0x31, 1), F3(~2, ~0x31, ~1)|RD_G0|RS1_G0,		"i,p", F_ALIAS, v6notv9 }, /* wr %g0,i,%psr */
-{ "mov",	F3(2, 0x31, 0), F3(~2, ~0x31, ~0)|RD_G0|ASI_RS2(~0),	"1,p", F_ALIAS, v6notv9 }, /* wr rs1,%g0,%psr */
-{ "mov",	F3(2, 0x31, 1), F3(~2, ~0x31, ~1)|RD_G0|SIMM13(~0),	"1,p", F_ALIAS, v6notv9 }, /* wr rs1,0,%psr */
-{ "mov",	F3(2, 0x32, 0), F3(~2, ~0x32, ~0)|RD_G0|RS1_G0|ASI(~0),	"2,w", F_ALIAS, v6notv9 }, /* wr %g0,rs2,%wim */
-{ "mov",	F3(2, 0x32, 1), F3(~2, ~0x32, ~1)|RD_G0|RS1_G0,		"i,w", F_ALIAS, v6notv9 }, /* wr %g0,i,%wim */
-{ "mov",	F3(2, 0x32, 0), F3(~2, ~0x32, ~0)|RD_G0|ASI_RS2(~0),	"1,w", F_ALIAS, v6notv9 }, /* wr rs1,%g0,%wim */
-{ "mov",	F3(2, 0x32, 1), F3(~2, ~0x32, ~1)|RD_G0|SIMM13(~0),	"1,w", F_ALIAS, v6notv9 }, /* wr rs1,0,%wim */
-{ "mov",	F3(2, 0x33, 0), F3(~2, ~0x33, ~0)|RD_G0|RS1_G0|ASI(~0),	"2,t", F_ALIAS, v6notv9 }, /* wr %g0,rs2,%tbr */
-{ "mov",	F3(2, 0x33, 1), F3(~2, ~0x33, ~1)|RD_G0|RS1_G0,		"i,t", F_ALIAS, v6notv9 }, /* wr %g0,i,%tbr */
-{ "mov",	F3(2, 0x33, 0), F3(~2, ~0x33, ~0)|RD_G0|ASI_RS2(~0),	"1,t", F_ALIAS, v6notv9 }, /* wr rs1,%g0,%tbr */
-{ "mov",	F3(2, 0x33, 1), F3(~2, ~0x33, ~1)|RD_G0|SIMM13(~0),	"1,t", F_ALIAS, v6notv9 }, /* wr rs1,0,%tbr */
-
-{ "mov",	F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|RS1_G0|ASI(~0),	"2,d", 0, v6 }, /* or %g0,rs2,d */
-{ "mov",	F3(2, 0x02, 1), F3(~2, ~0x02, ~1)|RS1_G0,		"i,d", 0, v6 }, /* or %g0,i,d	*/
-{ "mov",        F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|ASI_RS2(~0),		"1,d", 0, v6 }, /* or rs1,%g0,d   */
-{ "mov",        F3(2, 0x02, 1), F3(~2, ~0x02, ~1)|SIMM13(~0),		"1,d", 0, v6 }, /* or rs1,0,d */
-
-{ "or",	F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "or",	F3(2, 0x02, 1), F3(~2, ~0x02, ~1),		"1,i,d", 0, v6 },
-{ "or",	F3(2, 0x02, 1), F3(~2, ~0x02, ~1),		"i,1,d", 0, v6 },
-
-{ "bset",	F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|ASI(~0),	"2,r", F_ALIAS, v6 },	/* or rd,rs2,rd */
-{ "bset",	F3(2, 0x02, 1), F3(~2, ~0x02, ~1),		"i,r", F_ALIAS, v6 },	/* or rd,i,rd */
+{ "mov",	F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|ASI(~0),		"1,2,m", F_ALIAS, 0, v8 }, /* wr r,r,%asrX */
+{ "mov",	F3(2, 0x30, 1), F3(~2, ~0x30, ~1),			"1,i,m", F_ALIAS, 0, v8 }, /* wr r,i,%asrX */
+{ "mov",	F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|RD_G0|ASI(~0),	"1,2,y", F_ALIAS, 0, v6 }, /* wr r,r,%y */
+{ "mov",	F3(2, 0x30, 1), F3(~2, ~0x30, ~1)|RD_G0,		"1,i,y", F_ALIAS, 0, v6 }, /* wr r,i,%y */
+{ "mov",	F3(2, 0x31, 0), F3(~2, ~0x31, ~0)|RD_G0|ASI(~0),	"1,2,p", F_ALIAS, 0, v6notv9 }, /* wr r,r,%psr */
+{ "mov",	F3(2, 0x31, 1), F3(~2, ~0x31, ~1)|RD_G0,		"1,i,p", F_ALIAS, 0, v6notv9 }, /* wr r,i,%psr */
+{ "mov",	F3(2, 0x32, 0), F3(~2, ~0x32, ~0)|RD_G0|ASI(~0),	"1,2,w", F_ALIAS, 0, v6notv9 }, /* wr r,r,%wim */
+{ "mov",	F3(2, 0x32, 1), F3(~2, ~0x32, ~1)|RD_G0,		"1,i,w", F_ALIAS, 0, v6notv9 }, /* wr r,i,%wim */
+{ "mov",	F3(2, 0x33, 0), F3(~2, ~0x33, ~0)|RD_G0|ASI(~0),	"1,2,t", F_ALIAS, 0, v6notv9 }, /* wr r,r,%tbr */
+{ "mov",	F3(2, 0x33, 1), F3(~2, ~0x33, ~1)|RD_G0,		"1,i,t", F_ALIAS, 0, v6notv9 }, /* wr r,i,%tbr */
+
+{ "mov",	F3(2, 0x28, 0), F3(~2, ~0x28, ~0)|SIMM13(~0),		"M,d", F_ALIAS, 0, v8 }, /* rd %asr1,r */
+{ "mov",	F3(2, 0x28, 0), F3(~2, ~0x28, ~0)|RS1_G0|SIMM13(~0),	"y,d", F_ALIAS, 0, v6 }, /* rd %y,r */
+{ "mov",	F3(2, 0x29, 0), F3(~2, ~0x29, ~0)|RS1_G0|SIMM13(~0),	"p,d", F_ALIAS, 0, v6notv9 }, /* rd %psr,r */
+{ "mov",	F3(2, 0x2a, 0), F3(~2, ~0x2a, ~0)|RS1_G0|SIMM13(~0),	"w,d", F_ALIAS, 0, v6notv9 }, /* rd %wim,r */
+{ "mov",	F3(2, 0x2b, 0), F3(~2, ~0x2b, ~0)|RS1_G0|SIMM13(~0),	"t,d", F_ALIAS, 0, v6notv9 }, /* rd %tbr,r */
+
+{ "mov",	F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|RS1_G0|ASI(~0),	"2,m", F_ALIAS, 0, v8 }, /* wr %g0,rs2,%asrX */
+{ "mov",	F3(2, 0x30, 1), F3(~2, ~0x30, ~1)|RS1_G0,		"i,m", F_ALIAS, 0, v8 }, /* wr %g0,i,%asrX */
+{ "mov",	F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|ASI_RS2(~0),		"1,m", F_ALIAS, 0, v8 }, /* wr rs1,%g0,%asrX */
+{ "mov",	F3(2, 0x30, 1), F3(~2, ~0x30, ~1)|SIMM13(~0),		"1,m", F_ALIAS, 0, v8 }, /* wr rs1,0,%asrX */
+{ "mov",	F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|RD_G0|RS1_G0|ASI(~0),	"2,y", F_ALIAS, 0, v6 }, /* wr %g0,rs2,%y */
+{ "mov",	F3(2, 0x30, 1), F3(~2, ~0x30, ~1)|RD_G0|RS1_G0,		"i,y", F_ALIAS, 0, v6 }, /* wr %g0,i,%y */
+{ "mov",	F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|RD_G0|ASI_RS2(~0),	"1,y", F_ALIAS, 0, v6 }, /* wr rs1,%g0,%y */
+{ "mov",	F3(2, 0x30, 1), F3(~2, ~0x30, ~1)|RD_G0|SIMM13(~0),	"1,y", F_ALIAS, 0, v6 }, /* wr rs1,0,%y */
+{ "mov",	F3(2, 0x31, 0), F3(~2, ~0x31, ~0)|RD_G0|RS1_G0|ASI(~0),	"2,p", F_ALIAS, 0, v6notv9 }, /* wr %g0,rs2,%psr */
+{ "mov",	F3(2, 0x31, 1), F3(~2, ~0x31, ~1)|RD_G0|RS1_G0,		"i,p", F_ALIAS, 0, v6notv9 }, /* wr %g0,i,%psr */
+{ "mov",	F3(2, 0x31, 0), F3(~2, ~0x31, ~0)|RD_G0|ASI_RS2(~0),	"1,p", F_ALIAS, 0, v6notv9 }, /* wr rs1,%g0,%psr */
+{ "mov",	F3(2, 0x31, 1), F3(~2, ~0x31, ~1)|RD_G0|SIMM13(~0),	"1,p", F_ALIAS, 0, v6notv9 }, /* wr rs1,0,%psr */
+{ "mov",	F3(2, 0x32, 0), F3(~2, ~0x32, ~0)|RD_G0|RS1_G0|ASI(~0),	"2,w", F_ALIAS, 0, v6notv9 }, /* wr %g0,rs2,%wim */
+{ "mov",	F3(2, 0x32, 1), F3(~2, ~0x32, ~1)|RD_G0|RS1_G0,		"i,w", F_ALIAS, 0, v6notv9 }, /* wr %g0,i,%wim */
+{ "mov",	F3(2, 0x32, 0), F3(~2, ~0x32, ~0)|RD_G0|ASI_RS2(~0),	"1,w", F_ALIAS, 0, v6notv9 }, /* wr rs1,%g0,%wim */
+{ "mov",	F3(2, 0x32, 1), F3(~2, ~0x32, ~1)|RD_G0|SIMM13(~0),	"1,w", F_ALIAS, 0, v6notv9 }, /* wr rs1,0,%wim */
+{ "mov",	F3(2, 0x33, 0), F3(~2, ~0x33, ~0)|RD_G0|RS1_G0|ASI(~0),	"2,t", F_ALIAS, 0, v6notv9 }, /* wr %g0,rs2,%tbr */
+{ "mov",	F3(2, 0x33, 1), F3(~2, ~0x33, ~1)|RD_G0|RS1_G0,		"i,t", F_ALIAS, 0, v6notv9 }, /* wr %g0,i,%tbr */
+{ "mov",	F3(2, 0x33, 0), F3(~2, ~0x33, ~0)|RD_G0|ASI_RS2(~0),	"1,t", F_ALIAS, 0, v6notv9 }, /* wr rs1,%g0,%tbr */
+{ "mov",	F3(2, 0x33, 1), F3(~2, ~0x33, ~1)|RD_G0|SIMM13(~0),	"1,t", F_ALIAS, 0, v6notv9 }, /* wr rs1,0,%tbr */
+
+{ "mov",	F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|RS1_G0|ASI(~0),	"2,d", 0, 0, v6 }, /* or %g0,rs2,d */
+{ "mov",	F3(2, 0x02, 1), F3(~2, ~0x02, ~1)|RS1_G0,		"i,d", 0, 0, v6 }, /* or %g0,i,d	*/
+{ "mov",        F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|ASI_RS2(~0),		"1,d", 0, 0, v6 }, /* or rs1,%g0,d   */
+{ "mov",        F3(2, 0x02, 1), F3(~2, ~0x02, ~1)|SIMM13(~0),		"1,d", 0, 0, v6 }, /* or rs1,0,d */
+
+{ "or",	F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "or",	F3(2, 0x02, 1), F3(~2, ~0x02, ~1),		"1,i,d", 0, 0, v6 },
+{ "or",	F3(2, 0x02, 1), F3(~2, ~0x02, ~1),		"i,1,d", 0, 0, v6 },
+
+{ "bset",	F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|ASI(~0),	"2,r", F_ALIAS, 0, v6 },	/* or rd,rs2,rd */
+{ "bset",	F3(2, 0x02, 1), F3(~2, ~0x02, ~1),		"i,r", F_ALIAS, 0, v6 },	/* or rd,i,rd */
 
 /* This is not a commutative instruction.  */
-{ "andn",	F3(2, 0x05, 0), F3(~2, ~0x05, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "andn",	F3(2, 0x05, 1), F3(~2, ~0x05, ~1),		"1,i,d", 0, v6 },
+{ "andn",	F3(2, 0x05, 0), F3(~2, ~0x05, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "andn",	F3(2, 0x05, 1), F3(~2, ~0x05, ~1),		"1,i,d", 0, 0, v6 },
 
 /* This is not a commutative instruction.  */
-{ "andncc",	F3(2, 0x15, 0), F3(~2, ~0x15, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "andncc",	F3(2, 0x15, 1), F3(~2, ~0x15, ~1),		"1,i,d", 0, v6 },
-
-{ "bclr",	F3(2, 0x05, 0), F3(~2, ~0x05, ~0)|ASI(~0),	"2,r", F_ALIAS, v6 },	/* andn rd,rs2,rd */
-{ "bclr",	F3(2, 0x05, 1), F3(~2, ~0x05, ~1),		"i,r", F_ALIAS, v6 },	/* andn rd,i,rd */
-
-{ "cmp",	F3(2, 0x14, 0), F3(~2, ~0x14, ~0)|RD_G0|ASI(~0),	"1,2", 0, v6 },	/* subcc rs1,rs2,%g0 */
-{ "cmp",	F3(2, 0x14, 1), F3(~2, ~0x14, ~1)|RD_G0,		"1,i", 0, v6 },	/* subcc rs1,i,%g0 */
-
-{ "sub",	F3(2, 0x04, 0), F3(~2, ~0x04, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "sub",	F3(2, 0x04, 1), F3(~2, ~0x04, ~1),		"1,i,d", 0, v6 },
-
-{ "subcc",	F3(2, 0x14, 0), F3(~2, ~0x14, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "subcc",	F3(2, 0x14, 1), F3(~2, ~0x14, ~1),		"1,i,d", 0, v6 },
-
-{ "subx",	F3(2, 0x0c, 0), F3(~2, ~0x0c, ~0)|ASI(~0),	"1,2,d", 0, v6notv9 },
-{ "subx",	F3(2, 0x0c, 1), F3(~2, ~0x0c, ~1),		"1,i,d", 0, v6notv9 },
-{ "subc",	F3(2, 0x0c, 0), F3(~2, ~0x0c, ~0)|ASI(~0),	"1,2,d", 0, v9 },
-{ "subc",	F3(2, 0x0c, 1), F3(~2, ~0x0c, ~1),		"1,i,d", 0, v9 },
-
-{ "subxcc",	F3(2, 0x1c, 0), F3(~2, ~0x1c, ~0)|ASI(~0),	"1,2,d", 0, v6notv9 },
-{ "subxcc",	F3(2, 0x1c, 1), F3(~2, ~0x1c, ~1),		"1,i,d", 0, v6notv9 },
-{ "subccc",	F3(2, 0x1c, 0), F3(~2, ~0x1c, ~0)|ASI(~0),	"1,2,d", 0, v9 },
-{ "subccc",	F3(2, 0x1c, 1), F3(~2, ~0x1c, ~1),		"1,i,d", 0, v9 },
-
-{ "and",	F3(2, 0x01, 0), F3(~2, ~0x01, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "and",	F3(2, 0x01, 1), F3(~2, ~0x01, ~1),		"1,i,d", 0, v6 },
-{ "and",	F3(2, 0x01, 1), F3(~2, ~0x01, ~1),		"i,1,d", 0, v6 },
-
-{ "andcc",	F3(2, 0x11, 0), F3(~2, ~0x11, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "andcc",	F3(2, 0x11, 1), F3(~2, ~0x11, ~1),		"1,i,d", 0, v6 },
-{ "andcc",	F3(2, 0x11, 1), F3(~2, ~0x11, ~1),		"i,1,d", 0, v6 },
-
-{ "dec",	F3(2, 0x04, 1)|SIMM13(0x1), F3(~2, ~0x04, ~1)|SIMM13(~0x0001), "r", F_ALIAS, v6 },	/* sub rd,1,rd */
-{ "dec",	F3(2, 0x04, 1),		    F3(~2, ~0x04, ~1),		       "i,r", F_ALIAS, v8 },	/* sub rd,imm,rd */
-{ "deccc",	F3(2, 0x14, 1)|SIMM13(0x1), F3(~2, ~0x14, ~1)|SIMM13(~0x0001), "r", F_ALIAS, v6 },	/* subcc rd,1,rd */
-{ "deccc",	F3(2, 0x14, 1),		    F3(~2, ~0x14, ~1),		       "i,r", F_ALIAS, v8 },	/* subcc rd,imm,rd */
-{ "inc",	F3(2, 0x00, 1)|SIMM13(0x1), F3(~2, ~0x00, ~1)|SIMM13(~0x0001), "r", F_ALIAS, v6 },	/* add rd,1,rd */
-{ "inc",	F3(2, 0x00, 1),		    F3(~2, ~0x00, ~1),		       "i,r", F_ALIAS, v8 },	/* add rd,imm,rd */
-{ "inccc",	F3(2, 0x10, 1)|SIMM13(0x1), F3(~2, ~0x10, ~1)|SIMM13(~0x0001), "r", F_ALIAS, v6 },	/* addcc rd,1,rd */
-{ "inccc",	F3(2, 0x10, 1),		    F3(~2, ~0x10, ~1),		       "i,r", F_ALIAS, v8 },	/* addcc rd,imm,rd */
-
-{ "btst",	F3(2, 0x11, 0), F3(~2, ~0x11, ~0)|RD_G0|ASI(~0), "1,2", F_ALIAS, v6 },	/* andcc rs1,rs2,%g0 */
-{ "btst",	F3(2, 0x11, 1), F3(~2, ~0x11, ~1)|RD_G0, "i,1", F_ALIAS, v6 },	/* andcc rs1,i,%g0 */
-
-{ "neg",	F3(2, 0x04, 0), F3(~2, ~0x04, ~0)|RS1_G0|ASI(~0), "2,d", F_ALIAS, v6 }, /* sub %g0,rs2,rd */
-{ "neg",	F3(2, 0x04, 0), F3(~2, ~0x04, ~0)|RS1_G0|ASI(~0), "O", F_ALIAS, v6 }, /* sub %g0,rd,rd */
-
-{ "add",	F3(2, 0x00, 0), F3(~2, ~0x00, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "add",	F3(2, 0x00, 1), F3(~2, ~0x00, ~1),		"1,i,d", 0, v6 },
-{ "add",	F3(2, 0x00, 1), F3(~2, ~0x00, ~1),		"i,1,d", 0, v6 },
-{ "addcc",	F3(2, 0x10, 0), F3(~2, ~0x10, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "addcc",	F3(2, 0x10, 1), F3(~2, ~0x10, ~1),		"1,i,d", 0, v6 },
-{ "addcc",	F3(2, 0x10, 1), F3(~2, ~0x10, ~1),		"i,1,d", 0, v6 },
-
-{ "addx",	F3(2, 0x08, 0), F3(~2, ~0x08, ~0)|ASI(~0),	"1,2,d", 0, v6notv9 },
-{ "addx",	F3(2, 0x08, 1), F3(~2, ~0x08, ~1),		"1,i,d", 0, v6notv9 },
-{ "addx",	F3(2, 0x08, 1), F3(~2, ~0x08, ~1),		"i,1,d", 0, v6notv9 },
-{ "addc",	F3(2, 0x08, 0), F3(~2, ~0x08, ~0)|ASI(~0),	"1,2,d", 0, v9 },
-{ "addc",	F3(2, 0x08, 1), F3(~2, ~0x08, ~1),		"1,i,d", 0, v9 },
-{ "addc",	F3(2, 0x08, 1), F3(~2, ~0x08, ~1),		"i,1,d", 0, v9 },
-
-{ "addxcc",	F3(2, 0x18, 0), F3(~2, ~0x18, ~0)|ASI(~0),	"1,2,d", 0, v6notv9 },
-{ "addxcc",	F3(2, 0x18, 1), F3(~2, ~0x18, ~1),		"1,i,d", 0, v6notv9 },
-{ "addxcc",	F3(2, 0x18, 1), F3(~2, ~0x18, ~1),		"i,1,d", 0, v6notv9 },
-{ "addccc",	F3(2, 0x18, 0), F3(~2, ~0x18, ~0)|ASI(~0),	"1,2,d", 0, v9 },
-{ "addccc",	F3(2, 0x18, 1), F3(~2, ~0x18, ~1),		"1,i,d", 0, v9 },
-{ "addccc",	F3(2, 0x18, 1), F3(~2, ~0x18, ~1),		"i,1,d", 0, v9 },
-
-{ "smul",	F3(2, 0x0b, 0), F3(~2, ~0x0b, ~0)|ASI(~0),	"1,2,d", F_MUL32, v8 },
-{ "smul",	F3(2, 0x0b, 1), F3(~2, ~0x0b, ~1),		"1,i,d", F_MUL32, v8 },
-{ "smul",	F3(2, 0x0b, 1), F3(~2, ~0x0b, ~1),		"i,1,d", F_MUL32, v8 },
-{ "smulcc",	F3(2, 0x1b, 0), F3(~2, ~0x1b, ~0)|ASI(~0),	"1,2,d", F_MUL32, v8 },
-{ "smulcc",	F3(2, 0x1b, 1), F3(~2, ~0x1b, ~1),		"1,i,d", F_MUL32, v8 },
-{ "smulcc",	F3(2, 0x1b, 1), F3(~2, ~0x1b, ~1),		"i,1,d", F_MUL32, v8 },
-{ "umul",	F3(2, 0x0a, 0), F3(~2, ~0x0a, ~0)|ASI(~0),	"1,2,d", F_MUL32, v8 },
-{ "umul",	F3(2, 0x0a, 1), F3(~2, ~0x0a, ~1),		"1,i,d", F_MUL32, v8 },
-{ "umul",	F3(2, 0x0a, 1), F3(~2, ~0x0a, ~1),		"i,1,d", F_MUL32, v8 },
-{ "umulcc",	F3(2, 0x1a, 0), F3(~2, ~0x1a, ~0)|ASI(~0),	"1,2,d", F_MUL32, v8 },
-{ "umulcc",	F3(2, 0x1a, 1), F3(~2, ~0x1a, ~1),		"1,i,d", F_MUL32, v8 },
-{ "umulcc",	F3(2, 0x1a, 1), F3(~2, ~0x1a, ~1),		"i,1,d", F_MUL32, v8 },
-{ "sdiv",	F3(2, 0x0f, 0), F3(~2, ~0x0f, ~0)|ASI(~0),	"1,2,d", F_DIV32, v8 },
-{ "sdiv",	F3(2, 0x0f, 1), F3(~2, ~0x0f, ~1),		"1,i,d", F_DIV32, v8 },
-{ "sdiv",	F3(2, 0x0f, 1), F3(~2, ~0x0f, ~1),		"i,1,d", F_DIV32, v8 },
-{ "sdivcc",	F3(2, 0x1f, 0), F3(~2, ~0x1f, ~0)|ASI(~0),	"1,2,d", F_DIV32, v8 },
-{ "sdivcc",	F3(2, 0x1f, 1), F3(~2, ~0x1f, ~1),		"1,i,d", F_DIV32, v8 },
-{ "sdivcc",	F3(2, 0x1f, 1), F3(~2, ~0x1f, ~1),		"i,1,d", F_DIV32, v8 },
-{ "udiv",	F3(2, 0x0e, 0), F3(~2, ~0x0e, ~0)|ASI(~0),	"1,2,d", F_DIV32, v8 },
-{ "udiv",	F3(2, 0x0e, 1), F3(~2, ~0x0e, ~1),		"1,i,d", F_DIV32, v8 },
-{ "udiv",	F3(2, 0x0e, 1), F3(~2, ~0x0e, ~1),		"i,1,d", F_DIV32, v8 },
-{ "udivcc",	F3(2, 0x1e, 0), F3(~2, ~0x1e, ~0)|ASI(~0),	"1,2,d", F_DIV32, v8 },
-{ "udivcc",	F3(2, 0x1e, 1), F3(~2, ~0x1e, ~1),		"1,i,d", F_DIV32, v8 },
-{ "udivcc",	F3(2, 0x1e, 1), F3(~2, ~0x1e, ~1),		"i,1,d", F_DIV32, v8 },
-
-{ "mulx",	F3(2, 0x09, 0), F3(~2, ~0x09, ~0)|ASI(~0),	"1,2,d", 0, v9 },
-{ "mulx",	F3(2, 0x09, 1), F3(~2, ~0x09, ~1),		"1,i,d", 0, v9 },
-{ "sdivx",	F3(2, 0x2d, 0), F3(~2, ~0x2d, ~0)|ASI(~0),	"1,2,d", 0, v9 },
-{ "sdivx",	F3(2, 0x2d, 1), F3(~2, ~0x2d, ~1),		"1,i,d", 0, v9 },
-{ "udivx",	F3(2, 0x0d, 0), F3(~2, ~0x0d, ~0)|ASI(~0),	"1,2,d", 0, v9 },
-{ "udivx",	F3(2, 0x0d, 1), F3(~2, ~0x0d, ~1),		"1,i,d", 0, v9 },
-
-{ "call",	F1(0x1), F1(~0x1), "L", F_JSR|F_DELAYED, v6 },
-{ "call",	F1(0x1), F1(~0x1), "L,#", F_JSR|F_DELAYED, v6 },
-
-{ "call",	F3(2, 0x38, 0)|RD(0xf), F3(~2, ~0x38, ~0)|RD(~0xf)|ASI(~0),	"1+2", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+rs2,%o7 */
-{ "call",	F3(2, 0x38, 0)|RD(0xf), F3(~2, ~0x38, ~0)|RD(~0xf)|ASI(~0),	"1+2,#", F_JSR|F_DELAYED, v6 },
-{ "call",	F3(2, 0x38, 0)|RD(0xf), F3(~2, ~0x38, ~0)|RD(~0xf)|ASI_RS2(~0),	"1", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+%g0,%o7 */
-{ "call",	F3(2, 0x38, 0)|RD(0xf), F3(~2, ~0x38, ~0)|RD(~0xf)|ASI_RS2(~0),	"1,#", F_JSR|F_DELAYED, v6 },
-{ "call",	F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf),		"1+i", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+i,%o7 */
-{ "call",	F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf),		"1+i,#", F_JSR|F_DELAYED, v6 },
-{ "call",	F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf),		"i+1", F_JSR|F_DELAYED, v6 }, /* jmpl i+rs1,%o7 */
-{ "call",	F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf),		"i+1,#", F_JSR|F_DELAYED, v6 },
-{ "call",	F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf)|RS1_G0,	"i", F_JSR|F_DELAYED, v6 }, /* jmpl %g0+i,%o7 */
-{ "call",	F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf)|RS1_G0,	"i,#", F_JSR|F_DELAYED, v6 },
-{ "call",	F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf)|SIMM13(~0),	"1", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+0,%o7 */
-{ "call",	F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf)|SIMM13(~0),	"1,#", F_JSR|F_DELAYED, v6 },
-
-{ "chkpt",	F2(0, 1)|CONDA|ANNUL|(1<<20), F2(~0, ~1)|((~CONDA)&COND(~0)), "G", F_TRANS, v9b },
+{ "andncc",	F3(2, 0x15, 0), F3(~2, ~0x15, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "andncc",	F3(2, 0x15, 1), F3(~2, ~0x15, ~1),		"1,i,d", 0, 0, v6 },
+
+{ "bclr",	F3(2, 0x05, 0), F3(~2, ~0x05, ~0)|ASI(~0),	"2,r", F_ALIAS, 0, v6 },	/* andn rd,rs2,rd */
+{ "bclr",	F3(2, 0x05, 1), F3(~2, ~0x05, ~1),		"i,r", F_ALIAS, 0, v6 },	/* andn rd,i,rd */
+
+{ "cmp",	F3(2, 0x14, 0), F3(~2, ~0x14, ~0)|RD_G0|ASI(~0),	"1,2", 0, 0, v6 },	/* subcc rs1,rs2,%g0 */
+{ "cmp",	F3(2, 0x14, 1), F3(~2, ~0x14, ~1)|RD_G0,		"1,i", 0, 0, v6 },	/* subcc rs1,i,%g0 */
+
+{ "sub",	F3(2, 0x04, 0), F3(~2, ~0x04, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "sub",	F3(2, 0x04, 1), F3(~2, ~0x04, ~1),		"1,i,d", 0, 0, v6 },
+
+{ "subcc",	F3(2, 0x14, 0), F3(~2, ~0x14, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "subcc",	F3(2, 0x14, 1), F3(~2, ~0x14, ~1),		"1,i,d", 0, 0, v6 },
+
+{ "subx",	F3(2, 0x0c, 0), F3(~2, ~0x0c, ~0)|ASI(~0),	"1,2,d", 0, 0, v6notv9 },
+{ "subx",	F3(2, 0x0c, 1), F3(~2, ~0x0c, ~1),		"1,i,d", 0, 0, v6notv9 },
+{ "subc",	F3(2, 0x0c, 0), F3(~2, ~0x0c, ~0)|ASI(~0),	"1,2,d", 0, 0, v9 },
+{ "subc",	F3(2, 0x0c, 1), F3(~2, ~0x0c, ~1),		"1,i,d", 0, 0, v9 },
+
+{ "subxcc",	F3(2, 0x1c, 0), F3(~2, ~0x1c, ~0)|ASI(~0),	"1,2,d", 0, 0, v6notv9 },
+{ "subxcc",	F3(2, 0x1c, 1), F3(~2, ~0x1c, ~1),		"1,i,d", 0, 0, v6notv9 },
+{ "subccc",	F3(2, 0x1c, 0), F3(~2, ~0x1c, ~0)|ASI(~0),	"1,2,d", 0, 0, v9 },
+{ "subccc",	F3(2, 0x1c, 1), F3(~2, ~0x1c, ~1),		"1,i,d", 0, 0, v9 },
+
+{ "and",	F3(2, 0x01, 0), F3(~2, ~0x01, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "and",	F3(2, 0x01, 1), F3(~2, ~0x01, ~1),		"1,i,d", 0, 0, v6 },
+{ "and",	F3(2, 0x01, 1), F3(~2, ~0x01, ~1),		"i,1,d", 0, 0, v6 },
+
+{ "andcc",	F3(2, 0x11, 0), F3(~2, ~0x11, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "andcc",	F3(2, 0x11, 1), F3(~2, ~0x11, ~1),		"1,i,d", 0, 0, v6 },
+{ "andcc",	F3(2, 0x11, 1), F3(~2, ~0x11, ~1),		"i,1,d", 0, 0, v6 },
+
+{ "dec",	F3(2, 0x04, 1)|SIMM13(0x1), F3(~2, ~0x04, ~1)|SIMM13(~0x0001), "r", F_ALIAS, 0, v6 },	/* sub rd,1,rd */
+{ "dec",	F3(2, 0x04, 1),		    F3(~2, ~0x04, ~1),		       "i,r", F_ALIAS, 0, v8 },	/* sub rd,imm,rd */
+{ "deccc",	F3(2, 0x14, 1)|SIMM13(0x1), F3(~2, ~0x14, ~1)|SIMM13(~0x0001), "r", F_ALIAS, 0, v6 },	/* subcc rd,1,rd */
+{ "deccc",	F3(2, 0x14, 1),		    F3(~2, ~0x14, ~1),		       "i,r", F_ALIAS, 0, v8 },	/* subcc rd,imm,rd */
+{ "inc",	F3(2, 0x00, 1)|SIMM13(0x1), F3(~2, ~0x00, ~1)|SIMM13(~0x0001), "r", F_ALIAS, 0, v6 },	/* add rd,1,rd */
+{ "inc",	F3(2, 0x00, 1),		    F3(~2, ~0x00, ~1),		       "i,r", F_ALIAS, 0, v8 },	/* add rd,imm,rd */
+{ "inccc",	F3(2, 0x10, 1)|SIMM13(0x1), F3(~2, ~0x10, ~1)|SIMM13(~0x0001), "r", F_ALIAS, 0, v6 },	/* addcc rd,1,rd */
+{ "inccc",	F3(2, 0x10, 1),		    F3(~2, ~0x10, ~1),		       "i,r", F_ALIAS, 0, v8 },	/* addcc rd,imm,rd */
+
+{ "btst",	F3(2, 0x11, 0), F3(~2, ~0x11, ~0)|RD_G0|ASI(~0), "1,2", F_ALIAS, 0, v6 },	/* andcc rs1,rs2,%g0 */
+{ "btst",	F3(2, 0x11, 1), F3(~2, ~0x11, ~1)|RD_G0, "i,1", F_ALIAS, 0, v6 },	/* andcc rs1,i,%g0 */
+
+{ "neg",	F3(2, 0x04, 0), F3(~2, ~0x04, ~0)|RS1_G0|ASI(~0), "2,d", F_ALIAS, 0, v6 }, /* sub %g0,rs2,rd */
+{ "neg",	F3(2, 0x04, 0), F3(~2, ~0x04, ~0)|RS1_G0|ASI(~0), "O", F_ALIAS, 0, v6 }, /* sub %g0,rd,rd */
+
+{ "add",	F3(2, 0x00, 0), F3(~2, ~0x00, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "add",	F3(2, 0x00, 1), F3(~2, ~0x00, ~1),		"1,i,d", 0, 0, v6 },
+{ "add",	F3(2, 0x00, 1), F3(~2, ~0x00, ~1),		"i,1,d", 0, 0, v6 },
+{ "addcc",	F3(2, 0x10, 0), F3(~2, ~0x10, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "addcc",	F3(2, 0x10, 1), F3(~2, ~0x10, ~1),		"1,i,d", 0, 0, v6 },
+{ "addcc",	F3(2, 0x10, 1), F3(~2, ~0x10, ~1),		"i,1,d", 0, 0, v6 },
+
+{ "addx",	F3(2, 0x08, 0), F3(~2, ~0x08, ~0)|ASI(~0),	"1,2,d", 0, 0, v6notv9 },
+{ "addx",	F3(2, 0x08, 1), F3(~2, ~0x08, ~1),		"1,i,d", 0, 0, v6notv9 },
+{ "addx",	F3(2, 0x08, 1), F3(~2, ~0x08, ~1),		"i,1,d", 0, 0, v6notv9 },
+{ "addc",	F3(2, 0x08, 0), F3(~2, ~0x08, ~0)|ASI(~0),	"1,2,d", 0, 0, v9 },
+{ "addc",	F3(2, 0x08, 1), F3(~2, ~0x08, ~1),		"1,i,d", 0, 0, v9 },
+{ "addc",	F3(2, 0x08, 1), F3(~2, ~0x08, ~1),		"i,1,d", 0, 0, v9 },
+
+{ "addxcc",	F3(2, 0x18, 0), F3(~2, ~0x18, ~0)|ASI(~0),	"1,2,d", 0, 0, v6notv9 },
+{ "addxcc",	F3(2, 0x18, 1), F3(~2, ~0x18, ~1),		"1,i,d", 0, 0, v6notv9 },
+{ "addxcc",	F3(2, 0x18, 1), F3(~2, ~0x18, ~1),		"i,1,d", 0, 0, v6notv9 },
+{ "addccc",	F3(2, 0x18, 0), F3(~2, ~0x18, ~0)|ASI(~0),	"1,2,d", 0, 0, v9 },
+{ "addccc",	F3(2, 0x18, 1), F3(~2, ~0x18, ~1),		"1,i,d", 0, 0, v9 },
+{ "addccc",	F3(2, 0x18, 1), F3(~2, ~0x18, ~1),		"i,1,d", 0, 0, v9 },
+
+{ "smul",	F3(2, 0x0b, 0), F3(~2, ~0x0b, ~0)|ASI(~0),	"1,2,d", 0, HWCAP_MUL32, v8 },
+{ "smul",	F3(2, 0x0b, 1), F3(~2, ~0x0b, ~1),		"1,i,d", 0, HWCAP_MUL32, v8 },
+{ "smul",	F3(2, 0x0b, 1), F3(~2, ~0x0b, ~1),		"i,1,d", 0, HWCAP_MUL32, v8 },
+{ "smulcc",	F3(2, 0x1b, 0), F3(~2, ~0x1b, ~0)|ASI(~0),	"1,2,d", 0, HWCAP_MUL32, v8 },
+{ "smulcc",	F3(2, 0x1b, 1), F3(~2, ~0x1b, ~1),		"1,i,d", 0, HWCAP_MUL32, v8 },
+{ "smulcc",	F3(2, 0x1b, 1), F3(~2, ~0x1b, ~1),		"i,1,d", 0, HWCAP_MUL32, v8 },
+{ "umul",	F3(2, 0x0a, 0), F3(~2, ~0x0a, ~0)|ASI(~0),	"1,2,d", 0, HWCAP_MUL32, v8 },
+{ "umul",	F3(2, 0x0a, 1), F3(~2, ~0x0a, ~1),		"1,i,d", 0, HWCAP_MUL32, v8 },
+{ "umul",	F3(2, 0x0a, 1), F3(~2, ~0x0a, ~1),		"i,1,d", 0, HWCAP_MUL32, v8 },
+{ "umulcc",	F3(2, 0x1a, 0), F3(~2, ~0x1a, ~0)|ASI(~0),	"1,2,d", 0, HWCAP_MUL32, v8 },
+{ "umulcc",	F3(2, 0x1a, 1), F3(~2, ~0x1a, ~1),		"1,i,d", 0, HWCAP_MUL32, v8 },
+{ "umulcc",	F3(2, 0x1a, 1), F3(~2, ~0x1a, ~1),		"i,1,d", 0, HWCAP_MUL32, v8 },
+{ "sdiv",	F3(2, 0x0f, 0), F3(~2, ~0x0f, ~0)|ASI(~0),	"1,2,d", 0, HWCAP_DIV32, v8 },
+{ "sdiv",	F3(2, 0x0f, 1), F3(~2, ~0x0f, ~1),		"1,i,d", 0, HWCAP_DIV32, v8 },
+{ "sdiv",	F3(2, 0x0f, 1), F3(~2, ~0x0f, ~1),		"i,1,d", 0, HWCAP_DIV32, v8 },
+{ "sdivcc",	F3(2, 0x1f, 0), F3(~2, ~0x1f, ~0)|ASI(~0),	"1,2,d", 0, HWCAP_DIV32, v8 },
+{ "sdivcc",	F3(2, 0x1f, 1), F3(~2, ~0x1f, ~1),		"1,i,d", 0, HWCAP_DIV32, v8 },
+{ "sdivcc",	F3(2, 0x1f, 1), F3(~2, ~0x1f, ~1),		"i,1,d", 0, HWCAP_DIV32, v8 },
+{ "udiv",	F3(2, 0x0e, 0), F3(~2, ~0x0e, ~0)|ASI(~0),	"1,2,d", 0, HWCAP_DIV32, v8 },
+{ "udiv",	F3(2, 0x0e, 1), F3(~2, ~0x0e, ~1),		"1,i,d", 0, HWCAP_DIV32, v8 },
+{ "udiv",	F3(2, 0x0e, 1), F3(~2, ~0x0e, ~1),		"i,1,d", 0, HWCAP_DIV32, v8 },
+{ "udivcc",	F3(2, 0x1e, 0), F3(~2, ~0x1e, ~0)|ASI(~0),	"1,2,d", 0, HWCAP_DIV32, v8 },
+{ "udivcc",	F3(2, 0x1e, 1), F3(~2, ~0x1e, ~1),		"1,i,d", 0, HWCAP_DIV32, v8 },
+{ "udivcc",	F3(2, 0x1e, 1), F3(~2, ~0x1e, ~1),		"i,1,d", 0, HWCAP_DIV32, v8 },
+
+{ "mulx",	F3(2, 0x09, 0), F3(~2, ~0x09, ~0)|ASI(~0),	"1,2,d", 0, 0, v9 },
+{ "mulx",	F3(2, 0x09, 1), F3(~2, ~0x09, ~1),		"1,i,d", 0, 0, v9 },
+{ "sdivx",	F3(2, 0x2d, 0), F3(~2, ~0x2d, ~0)|ASI(~0),	"1,2,d", 0, 0, v9 },
+{ "sdivx",	F3(2, 0x2d, 1), F3(~2, ~0x2d, ~1),		"1,i,d", 0, 0, v9 },
+{ "udivx",	F3(2, 0x0d, 0), F3(~2, ~0x0d, ~0)|ASI(~0),	"1,2,d", 0, 0, v9 },
+{ "udivx",	F3(2, 0x0d, 1), F3(~2, ~0x0d, ~1),		"1,i,d", 0, 0, v9 },
+
+{ "call",	F1(0x1), F1(~0x1), "L", F_JSR|F_DELAYED, 0, v6 },
+{ "call",	F1(0x1), F1(~0x1), "L,#", F_JSR|F_DELAYED, 0, v6 },
+
+{ "call",	F3(2, 0x38, 0)|RD(0xf), F3(~2, ~0x38, ~0)|RD(~0xf)|ASI(~0),	"1+2", F_JSR|F_DELAYED, 0, v6 }, /* jmpl rs1+rs2,%o7 */
+{ "call",	F3(2, 0x38, 0)|RD(0xf), F3(~2, ~0x38, ~0)|RD(~0xf)|ASI(~0),	"1+2,#", F_JSR|F_DELAYED, 0, v6 },
+{ "call",	F3(2, 0x38, 0)|RD(0xf), F3(~2, ~0x38, ~0)|RD(~0xf)|ASI_RS2(~0),	"1", F_JSR|F_DELAYED, 0, v6 }, /* jmpl rs1+%g0,%o7 */
+{ "call",	F3(2, 0x38, 0)|RD(0xf), F3(~2, ~0x38, ~0)|RD(~0xf)|ASI_RS2(~0),	"1,#", F_JSR|F_DELAYED, 0, v6 },
+{ "call",	F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf),		"1+i", F_JSR|F_DELAYED, 0, v6 }, /* jmpl rs1+i,%o7 */
+{ "call",	F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf),		"1+i,#", F_JSR|F_DELAYED, 0, v6 },
+{ "call",	F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf),		"i+1", F_JSR|F_DELAYED, 0, v6 }, /* jmpl i+rs1,%o7 */
+{ "call",	F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf),		"i+1,#", F_JSR|F_DELAYED, 0, v6 },
+{ "call",	F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf)|RS1_G0,	"i", F_JSR|F_DELAYED, 0, v6 }, /* jmpl %g0+i,%o7 */
+{ "call",	F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf)|RS1_G0,	"i,#", F_JSR|F_DELAYED, 0, v6 },
+{ "call",	F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf)|SIMM13(~0),	"1", F_JSR|F_DELAYED, 0, v6 }, /* jmpl rs1+0,%o7 */
+{ "call",	F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf)|SIMM13(~0),	"1,#", F_JSR|F_DELAYED, 0, v6 },
+
+{ "chkpt",	F2(0, 1)|CONDA|ANNUL|(1<<20), F2(~0, ~1)|((~CONDA)&COND(~0)), "G", 0, HWCAP_TRANS, v9b },
 
 /* Conditional instructions.
 
@@ -1094,38 +1105,38 @@ const struct sparc_opcode sparc_opcodes[] = {
 
 /* Define branches -- one annulled, one without, etc. */
 #define br(opcode, mask, lose, flags) \
- { opcode, (mask)|ANNUL, (lose),       ",a l",   (flags), v6 }, \
- { opcode, (mask)      , (lose)|ANNUL, "l",     (flags), v6 }
+ { opcode, (mask)|ANNUL, (lose),       ",a l",   (flags), 0, v6 }, \
+ { opcode, (mask)      , (lose)|ANNUL, "l",     (flags), 0, v6 }
 
 #define brx(opcode, mask, lose, flags) /* v9 */ \
- { opcode, (mask)|(2<<20)|BPRED, ANNUL|(lose), "Z,G",      (flags), v9 }, \
- { opcode, (mask)|(2<<20)|BPRED, ANNUL|(lose), ",T Z,G",   (flags), v9 }, \
- { opcode, (mask)|(2<<20)|BPRED|ANNUL, (lose), ",a Z,G",   (flags), v9 }, \
- { opcode, (mask)|(2<<20)|BPRED|ANNUL, (lose), ",a,T Z,G", (flags), v9 }, \
- { opcode, (mask)|(2<<20), ANNUL|BPRED|(lose), ",N Z,G",   (flags), v9 }, \
- { opcode, (mask)|(2<<20)|ANNUL, BPRED|(lose), ",a,N Z,G", (flags), v9 }, \
- { opcode, (mask)|BPRED, ANNUL|(lose)|(2<<20), "z,G",      (flags), v9 }, \
- { opcode, (mask)|BPRED, ANNUL|(lose)|(2<<20), ",T z,G",   (flags), v9 }, \
- { opcode, (mask)|BPRED|ANNUL, (lose)|(2<<20), ",a z,G",   (flags), v9 }, \
- { opcode, (mask)|BPRED|ANNUL, (lose)|(2<<20), ",a,T z,G", (flags), v9 }, \
- { opcode, (mask), ANNUL|BPRED|(lose)|(2<<20), ",N z,G",   (flags), v9 }, \
- { opcode, (mask)|ANNUL, BPRED|(lose)|(2<<20), ",a,N z,G", (flags), v9 }
+ { opcode, (mask)|(2<<20)|BPRED, ANNUL|(lose), "Z,G",      (flags), 0, v9 }, \
+ { opcode, (mask)|(2<<20)|BPRED, ANNUL|(lose), ",T Z,G",   (flags), 0, v9 }, \
+ { opcode, (mask)|(2<<20)|BPRED|ANNUL, (lose), ",a Z,G",   (flags), 0, v9 }, \
+ { opcode, (mask)|(2<<20)|BPRED|ANNUL, (lose), ",a,T Z,G", (flags), 0, v9 }, \
+ { opcode, (mask)|(2<<20), ANNUL|BPRED|(lose), ",N Z,G",   (flags), 0, v9 }, \
+ { opcode, (mask)|(2<<20)|ANNUL, BPRED|(lose), ",a,N Z,G", (flags), 0, v9 }, \
+ { opcode, (mask)|BPRED, ANNUL|(lose)|(2<<20), "z,G",      (flags), 0, v9 }, \
+ { opcode, (mask)|BPRED, ANNUL|(lose)|(2<<20), ",T z,G",   (flags), 0, v9 }, \
+ { opcode, (mask)|BPRED|ANNUL, (lose)|(2<<20), ",a z,G",   (flags), 0, v9 }, \
+ { opcode, (mask)|BPRED|ANNUL, (lose)|(2<<20), ",a,T z,G", (flags), 0, v9 }, \
+ { opcode, (mask), ANNUL|BPRED|(lose)|(2<<20), ",N z,G",   (flags), 0, v9 }, \
+ { opcode, (mask)|ANNUL, BPRED|(lose)|(2<<20), ",a,N z,G", (flags), 0, v9 }
 
 /* Define four traps: reg+reg, reg + immediate, immediate alone, reg alone. */
 #define tr(opcode, mask, lose, flags) \
- { opcode, (mask)|(2<<11)|IMMED, (lose)|RS1_G0,	"Z,i",   (flags), v9 }, /* %g0 + imm */ \
- { opcode, (mask)|(2<<11)|IMMED, (lose),	"Z,1+i", (flags), v9 }, /* rs1 + imm */ \
- { opcode, (mask)|(2<<11), IMMED|(lose),	"Z,1+2", (flags), v9 }, /* rs1 + rs2 */ \
- { opcode, (mask)|(2<<11), IMMED|(lose)|RS2_G0,	"Z,1",   (flags), v9 }, /* rs1 + %g0 */ \
- { opcode, (mask)|IMMED, (lose)|RS1_G0,	"z,i",   (flags)|F_ALIAS, v9 }, /* %g0 + imm */ \
- { opcode, (mask)|IMMED, (lose),	"z,1+i", (flags)|F_ALIAS, v9 }, /* rs1 + imm */ \
- { opcode, (mask), IMMED|(lose),	"z,1+2", (flags)|F_ALIAS, v9 }, /* rs1 + rs2 */ \
- { opcode, (mask), IMMED|(lose)|RS2_G0,	"z,1",   (flags)|F_ALIAS, v9 }, /* rs1 + %g0 */ \
- { opcode, (mask)|IMMED, (lose)|RS1_G0,		"i",     (flags), v6 }, /* %g0 + imm */ \
- { opcode, (mask)|IMMED, (lose),		"1+i",   (flags), v6 }, /* rs1 + imm */ \
- { opcode, (mask)|IMMED, (lose),		"i+1",   (flags), v6 }, /* imm + rs1 */ \
- { opcode, (mask), IMMED|(lose),		"1+2",   (flags), v6 }, /* rs1 + rs2 */ \
- { opcode, (mask), IMMED|(lose)|RS2_G0,		"1",     (flags), v6 } /* rs1 + %g0 */
+ { opcode, (mask)|(2<<11)|IMMED, (lose)|RS1_G0,	"Z,i",   (flags), 0, v9 }, /* %g0 + imm */ \
+ { opcode, (mask)|(2<<11)|IMMED, (lose),	"Z,1+i", (flags), 0, v9 }, /* rs1 + imm */ \
+ { opcode, (mask)|(2<<11), IMMED|(lose),	"Z,1+2", (flags), 0, v9 }, /* rs1 + rs2 */ \
+ { opcode, (mask)|(2<<11), IMMED|(lose)|RS2_G0,	"Z,1",   (flags), 0, v9 }, /* rs1 + %g0 */ \
+ { opcode, (mask)|IMMED, (lose)|RS1_G0,	"z,i",   (flags)|F_ALIAS, 0, v9 }, /* %g0 + imm */ \
+ { opcode, (mask)|IMMED, (lose),	"z,1+i", (flags)|F_ALIAS, 0, v9 }, /* rs1 + imm */ \
+ { opcode, (mask), IMMED|(lose),	"z,1+2", (flags)|F_ALIAS, 0, v9 }, /* rs1 + rs2 */ \
+ { opcode, (mask), IMMED|(lose)|RS2_G0,	"z,1",   (flags)|F_ALIAS, 0, v9 }, /* rs1 + %g0 */ \
+ { opcode, (mask)|IMMED, (lose)|RS1_G0,		"i",     (flags), 0, v6 }, /* %g0 + imm */ \
+ { opcode, (mask)|IMMED, (lose),		"1+i",   (flags), 0, v6 }, /* rs1 + imm */ \
+ { opcode, (mask)|IMMED, (lose),		"i+1",   (flags), 0, v6 }, /* imm + rs1 */ \
+ { opcode, (mask), IMMED|(lose),		"1+2",   (flags), 0, v6 }, /* rs1 + rs2 */ \
+ { opcode, (mask), IMMED|(lose)|RS2_G0,		"1",     (flags), 0, v6 } /* rs1 + %g0 */
 
 /* v9: We must put `brx' before `br', to ensure that we never match something
    v9: against an expression unless it is an expression.  Otherwise, we end
@@ -1174,12 +1185,12 @@ cond ("bz",	"tz",   CONDZ, F_CONDBR|F_ALIAS), /* for e */
 #undef tr
 
 #define brr(opcode, mask, lose, flags) /* v9 */ \
- { opcode, (mask)|BPRED, ANNUL|(lose), "1,k",      F_DELAYED|(flags), v9 }, \
- { opcode, (mask)|BPRED, ANNUL|(lose), ",T 1,k",   F_DELAYED|(flags), v9 }, \
- { opcode, (mask)|BPRED|ANNUL, (lose), ",a 1,k",   F_DELAYED|(flags), v9 }, \
- { opcode, (mask)|BPRED|ANNUL, (lose), ",a,T 1,k", F_DELAYED|(flags), v9 }, \
- { opcode, (mask), ANNUL|BPRED|(lose), ",N 1,k",   F_DELAYED|(flags), v9 }, \
- { opcode, (mask)|ANNUL, BPRED|(lose), ",a,N 1,k", F_DELAYED|(flags), v9 }
+ { opcode, (mask)|BPRED, ANNUL|(lose), "1,k",      F_DELAYED|(flags), 0, v9 }, \
+ { opcode, (mask)|BPRED, ANNUL|(lose), ",T 1,k",   F_DELAYED|(flags), 0, v9 }, \
+ { opcode, (mask)|BPRED|ANNUL, (lose), ",a 1,k",   F_DELAYED|(flags), 0, v9 }, \
+ { opcode, (mask)|BPRED|ANNUL, (lose), ",a,T 1,k", F_DELAYED|(flags), 0, v9 }, \
+ { opcode, (mask), ANNUL|BPRED|(lose), ",N 1,k",   F_DELAYED|(flags), 0, v9 }, \
+ { opcode, (mask)|ANNUL, BPRED|(lose), ",a,N 1,k", F_DELAYED|(flags), 0, v9 }
 
 #define condr(bop, mask, flags) /* v9 */ \
   brr(bop, F2(0, 3)|COND(mask), F2(~0, ~3)|COND(~(mask)), (flags)) /* v9 */
@@ -1191,19 +1202,45 @@ cond ("bz",	"tz",   CONDZ, F_CONDBR|F_ALIAS), /* for e */
 /* v9 */ condr("brlez", 0x2, F_CONDBR),
 /* v9 */ condr("brgz", 0x6, F_CONDBR),
 
+#define cbcond(cop, cmask) \
+  { "cw" cop, F2(0, 3)|CBCOND(cmask)|F3I(0),F2(~0,~3)|CBCOND(~(cmask))|F3I(~0)|CBCOND_XCC, \
+    "1,2,=", F_CONDBR, HWCAP_CBCOND, v9}, \
+  { "cw" cop, F2(0, 3)|CBCOND(cmask)|F3I(1),F2(~0,~3)|CBCOND(~(cmask))|F3I(~1)|CBCOND_XCC, \
+    "1,X,=", F_CONDBR, HWCAP_CBCOND, v9}, \
+  { "cx" cop, F2(0, 3)|CBCOND(cmask)|F3I(0)|CBCOND_XCC,F2(~0,~3)|CBCOND(~(cmask))|F3I(~0), \
+    "1,2,=", F_CONDBR, HWCAP_CBCOND, v9}, \
+  { "cx" cop, F2(0, 3)|CBCOND(cmask)|F3I(1)|CBCOND_XCC,F2(~0,~3)|CBCOND(~(cmask))|F3I(~1), \
+    "1,X,=", F_CONDBR, HWCAP_CBCOND, v9},
+
+cbcond("be",   0x09)
+cbcond("ble",  0x0a)
+cbcond("bl",   0x0b)
+cbcond("bleu", 0x0c)
+cbcond("bcs",  0x0d)
+cbcond("bneg", 0x0e)
+cbcond("bvs",  0x0f)
+cbcond("bne",  0x19)
+cbcond("bg",   0x1a)
+cbcond("bge",  0x1b)
+cbcond("bgu",  0x1c)
+cbcond("bcc",  0x1d)
+cbcond("bpos", 0x1e)
+cbcond("bvc",  0x1f)
+
+#undef cbcond
 #undef condr /* v9 */
 #undef brr /* v9 */
 
 #define movr(opcode, mask, flags) /* v9 */ \
- { opcode, F3(2, 0x2f, 0)|RCOND(mask), F3(~2, ~0x2f, ~0)|RCOND(~(mask)), "1,2,d", (flags), v9 }, \
- { opcode, F3(2, 0x2f, 1)|RCOND(mask), F3(~2, ~0x2f, ~1)|RCOND(~(mask)), "1,j,d", (flags), v9 }
+ { opcode, F3(2, 0x2f, 0)|RCOND(mask), F3(~2, ~0x2f, ~0)|RCOND(~(mask)), "1,2,d", (flags), 0, v9 }, \
+ { opcode, F3(2, 0x2f, 1)|RCOND(mask), F3(~2, ~0x2f, ~1)|RCOND(~(mask)), "1,j,d", (flags), 0, v9 }
 
 #define fmrrs(opcode, mask, lose, flags) /* v9 */ \
- { opcode, (mask), (lose), "1,f,g", (flags) | F_FLOAT, v9 }
+ { opcode, (mask), (lose), "1,f,g", (flags) | F_FLOAT, 0, v9 }
 #define fmrrd(opcode, mask, lose, flags) /* v9 */ \
- { opcode, (mask), (lose), "1,B,H", (flags) | F_FLOAT, v9 }
+ { opcode, (mask), (lose), "1,B,H", (flags) | F_FLOAT, 0, v9 }
 #define fmrrq(opcode, mask, lose, flags) /* v9 */ \
- { opcode, (mask), (lose), "1,R,J", (flags) | F_FLOAT, v9 }
+ { opcode, (mask), (lose), "1,R,J", (flags) | F_FLOAT, 0, v9 }
 
 #define fmovrs(mop, mask, flags) /* v9 */ \
   fmrrs(mop, F3(2, 0x35, 0)|OPF_LOW5(5)|RCOND(mask), F3(~2, ~0x35, 0)|OPF_LOW5(~5)|RCOND(~(mask)), (flags)) /* v9 */
@@ -1253,20 +1290,20 @@ cond ("bz",	"tz",   CONDZ, F_CONDBR|F_ALIAS), /* for e */
 #undef fmrr /* v9 */
 
 #define movicc(opcode, cond, flags) /* v9 */ \
-  { opcode, F3(2, 0x2c, 0)|MCOND(cond,1)|ICC, F3(~2, ~0x2c, ~0)|MCOND(~cond,~1)|XCC|(1<<11), "z,2,d", flags, v9 }, \
-  { opcode, F3(2, 0x2c, 1)|MCOND(cond,1)|ICC, F3(~2, ~0x2c, ~1)|MCOND(~cond,~1)|XCC|(1<<11), "z,I,d", flags, v9 }, \
-  { opcode, F3(2, 0x2c, 0)|MCOND(cond,1)|XCC, F3(~2, ~0x2c, ~0)|MCOND(~cond,~1)|(1<<11),     "Z,2,d", flags, v9 }, \
-  { opcode, F3(2, 0x2c, 1)|MCOND(cond,1)|XCC, F3(~2, ~0x2c, ~1)|MCOND(~cond,~1)|(1<<11),     "Z,I,d", flags, v9 }
+  { opcode, F3(2, 0x2c, 0)|MCOND(cond,1)|ICC, F3(~2, ~0x2c, ~0)|MCOND(~cond,~1)|XCC|(1<<11), "z,2,d", flags, 0, v9 }, \
+  { opcode, F3(2, 0x2c, 1)|MCOND(cond,1)|ICC, F3(~2, ~0x2c, ~1)|MCOND(~cond,~1)|XCC|(1<<11), "z,I,d", flags, 0, v9 }, \
+  { opcode, F3(2, 0x2c, 0)|MCOND(cond,1)|XCC, F3(~2, ~0x2c, ~0)|MCOND(~cond,~1)|(1<<11),     "Z,2,d", flags, 0, v9 }, \
+  { opcode, F3(2, 0x2c, 1)|MCOND(cond,1)|XCC, F3(~2, ~0x2c, ~1)|MCOND(~cond,~1)|(1<<11),     "Z,I,d", flags, 0, v9 }
 
 #define movfcc(opcode, fcond, flags) /* v9 */ \
-  { opcode, F3(2, 0x2c, 0)|FCC(0)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~0)|F3(~2, ~0x2c, ~0), "6,2,d", flags, v9 }, \
-  { opcode, F3(2, 0x2c, 1)|FCC(0)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~0)|F3(~2, ~0x2c, ~1), "6,I,d", flags, v9 }, \
-  { opcode, F3(2, 0x2c, 0)|FCC(1)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~1)|F3(~2, ~0x2c, ~0), "7,2,d", flags, v9 }, \
-  { opcode, F3(2, 0x2c, 1)|FCC(1)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~1)|F3(~2, ~0x2c, ~1), "7,I,d", flags, v9 }, \
-  { opcode, F3(2, 0x2c, 0)|FCC(2)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~2)|F3(~2, ~0x2c, ~0), "8,2,d", flags, v9 }, \
-  { opcode, F3(2, 0x2c, 1)|FCC(2)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~2)|F3(~2, ~0x2c, ~1), "8,I,d", flags, v9 }, \
-  { opcode, F3(2, 0x2c, 0)|FCC(3)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~3)|F3(~2, ~0x2c, ~0), "9,2,d", flags, v9 }, \
-  { opcode, F3(2, 0x2c, 1)|FCC(3)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~3)|F3(~2, ~0x2c, ~1), "9,I,d", flags, v9 }
+  { opcode, F3(2, 0x2c, 0)|FCC(0)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~0)|F3(~2, ~0x2c, ~0), "6,2,d", flags, 0, v9 }, \
+  { opcode, F3(2, 0x2c, 1)|FCC(0)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~0)|F3(~2, ~0x2c, ~1), "6,I,d", flags, 0, v9 }, \
+  { opcode, F3(2, 0x2c, 0)|FCC(1)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~1)|F3(~2, ~0x2c, ~0), "7,2,d", flags, 0, v9 }, \
+  { opcode, F3(2, 0x2c, 1)|FCC(1)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~1)|F3(~2, ~0x2c, ~1), "7,I,d", flags, 0, v9 }, \
+  { opcode, F3(2, 0x2c, 0)|FCC(2)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~2)|F3(~2, ~0x2c, ~0), "8,2,d", flags, 0, v9 }, \
+  { opcode, F3(2, 0x2c, 1)|FCC(2)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~2)|F3(~2, ~0x2c, ~1), "8,I,d", flags, 0, v9 }, \
+  { opcode, F3(2, 0x2c, 0)|FCC(3)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~3)|F3(~2, ~0x2c, ~0), "9,2,d", flags, 0, v9 }, \
+  { opcode, F3(2, 0x2c, 1)|FCC(3)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~3)|F3(~2, ~0x2c, ~1), "9,I,d", flags, 0, v9 }
 
 #define movcc(opcode, cond, fcond, flags) /* v9 */ \
   movfcc (opcode, fcond, flags), /* v9 */ \
@@ -1310,23 +1347,23 @@ cond ("bz",	"tz",   CONDZ, F_CONDBR|F_ALIAS), /* for e */
 #define FM_QF 3		/* v9 */
 
 #define fmoviccx(opcode, fpsize, args, cond, flags) /* v9 */ \
-{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0),  F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0),  "z," args, flags, v9 }, \
-{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0),  F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0),  "Z," args, flags, v9 }
+{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0),  F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0),  "z," args, flags, 0, v9 }, \
+{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0),  F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0),  "Z," args, flags, 0, v9 }
 
 #define fmovfccx(opcode, fpsize, args, fcond, flags) /* v9 */ \
-{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6," args, flags, v9 }, \
-{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7," args, flags, v9 }, \
-{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8," args, flags, v9 }, \
-{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9," args, flags, v9 }
+{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6," args, flags, 0, v9 }, \
+{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7," args, flags, 0, v9 }, \
+{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8," args, flags, 0, v9 }, \
+{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9," args, flags, 0, v9 }
 
 /* FIXME: use fmovicc/fmovfcc? */ /* v9 */
 #define fmovccx(opcode, fpsize, args, cond, fcond, flags) /* v9 */ \
-{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0),  F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0),  "z," args, flags | F_FLOAT, v9 }, \
-{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6," args, flags | F_FLOAT, v9 }, \
-{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0),  F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0),  "Z," args, flags | F_FLOAT, v9 }, \
-{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7," args, flags | F_FLOAT, v9 }, \
-{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8," args, flags | F_FLOAT, v9 }, \
-{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9," args, flags | F_FLOAT, v9 }
+{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0),  F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0),  "z," args, flags | F_FLOAT, 0, v9 }, \
+{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6," args, flags | F_FLOAT, 0, v9 }, \
+{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0),  F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0),  "Z," args, flags | F_FLOAT, 0, v9 }, \
+{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7," args, flags | F_FLOAT, 0, v9 }, \
+{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8," args, flags | F_FLOAT, 0, v9 }, \
+{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9," args, flags | F_FLOAT, 0, v9 }
 
 #define fmovicc(suffix, cond, flags) /* v9 */ \
 fmoviccx("fmovd" suffix, FM_DF, "B,H", cond, flags),		\
@@ -1384,40 +1421,40 @@ fmovccx("fmovs" suffix, FM_SF, "f,g", cond, fcond, flags)
 
 /* Coprocessor branches.  */
 #define CBR(opcode, mask, lose, flags, arch) \
- { opcode, (mask), ANNUL | (lose), "l",    flags | F_DELAYED, arch }, \
- { opcode, (mask) | ANNUL, (lose), ",a l", flags | F_DELAYED, arch }
+ { opcode, (mask), ANNUL | (lose), "l",    flags | F_DELAYED, 0, arch }, \
+ { opcode, (mask) | ANNUL, (lose), ",a l", flags | F_DELAYED, 0, arch }
 
 /* Floating point branches.  */
 #define FBR(opcode, mask, lose, flags) \
- { opcode, (mask), ANNUL | (lose), "l",    flags | F_DELAYED | F_FBR, v6 }, \
- { opcode, (mask) | ANNUL, (lose), ",a l", flags | F_DELAYED | F_FBR, v6 }
+ { opcode, (mask), ANNUL | (lose), "l",    flags | F_DELAYED | F_FBR, 0, v6 }, \
+ { opcode, (mask) | ANNUL, (lose), ",a l", flags | F_DELAYED | F_FBR, 0, v6 }
 
 /* V9 extended floating point branches.  */
 #define FBRX(opcode, mask, lose, flags) /* v9 */ \
- { opcode, FBFCC(0)|(mask)|BPRED, ANNUL|FBFCC(~0)|(lose), "6,G",      flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(0)|(mask)|BPRED, ANNUL|FBFCC(~0)|(lose), ",T 6,G",   flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(0)|(mask)|BPRED|ANNUL, FBFCC(~0)|(lose), ",a 6,G",   flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(0)|(mask)|BPRED|ANNUL, FBFCC(~0)|(lose), ",a,T 6,G", flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(0)|(mask), ANNUL|BPRED|FBFCC(~0)|(lose), ",N 6,G",   flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(0)|(mask)|ANNUL, BPRED|FBFCC(~0)|(lose), ",a,N 6,G", flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(1)|(mask)|BPRED, ANNUL|FBFCC(~1)|(lose), "7,G",      flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(1)|(mask)|BPRED, ANNUL|FBFCC(~1)|(lose), ",T 7,G",   flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(1)|(mask)|BPRED|ANNUL, FBFCC(~1)|(lose), ",a 7,G",   flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(1)|(mask)|BPRED|ANNUL, FBFCC(~1)|(lose), ",a,T 7,G", flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(1)|(mask), ANNUL|BPRED|FBFCC(~1)|(lose), ",N 7,G",   flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(1)|(mask)|ANNUL, BPRED|FBFCC(~1)|(lose), ",a,N 7,G", flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(2)|(mask)|BPRED, ANNUL|FBFCC(~2)|(lose), "8,G",      flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(2)|(mask)|BPRED, ANNUL|FBFCC(~2)|(lose), ",T 8,G",   flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(2)|(mask)|BPRED|ANNUL, FBFCC(~2)|(lose), ",a 8,G",   flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(2)|(mask)|BPRED|ANNUL, FBFCC(~2)|(lose), ",a,T 8,G", flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(2)|(mask), ANNUL|BPRED|FBFCC(~2)|(lose), ",N 8,G",   flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(2)|(mask)|ANNUL, BPRED|FBFCC(~2)|(lose), ",a,N 8,G", flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(3)|(mask)|BPRED, ANNUL|FBFCC(~3)|(lose), "9,G",      flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(3)|(mask)|BPRED, ANNUL|FBFCC(~3)|(lose), ",T 9,G",   flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(3)|(mask)|BPRED|ANNUL, FBFCC(~3)|(lose), ",a 9,G",   flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(3)|(mask)|BPRED|ANNUL, FBFCC(~3)|(lose), ",a,T 9,G", flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(3)|(mask), ANNUL|BPRED|FBFCC(~3)|(lose), ",N 9,G",   flags|F_DELAYED|F_FBR, v9 }, \
- { opcode, FBFCC(3)|(mask)|ANNUL, BPRED|FBFCC(~3)|(lose), ",a,N 9,G", flags|F_DELAYED|F_FBR, v9 }
+ { opcode, FBFCC(0)|(mask)|BPRED, ANNUL|FBFCC(~0)|(lose), "6,G",      flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(0)|(mask)|BPRED, ANNUL|FBFCC(~0)|(lose), ",T 6,G",   flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(0)|(mask)|BPRED|ANNUL, FBFCC(~0)|(lose), ",a 6,G",   flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(0)|(mask)|BPRED|ANNUL, FBFCC(~0)|(lose), ",a,T 6,G", flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(0)|(mask), ANNUL|BPRED|FBFCC(~0)|(lose), ",N 6,G",   flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(0)|(mask)|ANNUL, BPRED|FBFCC(~0)|(lose), ",a,N 6,G", flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(1)|(mask)|BPRED, ANNUL|FBFCC(~1)|(lose), "7,G",      flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(1)|(mask)|BPRED, ANNUL|FBFCC(~1)|(lose), ",T 7,G",   flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(1)|(mask)|BPRED|ANNUL, FBFCC(~1)|(lose), ",a 7,G",   flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(1)|(mask)|BPRED|ANNUL, FBFCC(~1)|(lose), ",a,T 7,G", flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(1)|(mask), ANNUL|BPRED|FBFCC(~1)|(lose), ",N 7,G",   flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(1)|(mask)|ANNUL, BPRED|FBFCC(~1)|(lose), ",a,N 7,G", flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(2)|(mask)|BPRED, ANNUL|FBFCC(~2)|(lose), "8,G",      flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(2)|(mask)|BPRED, ANNUL|FBFCC(~2)|(lose), ",T 8,G",   flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(2)|(mask)|BPRED|ANNUL, FBFCC(~2)|(lose), ",a 8,G",   flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(2)|(mask)|BPRED|ANNUL, FBFCC(~2)|(lose), ",a,T 8,G", flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(2)|(mask), ANNUL|BPRED|FBFCC(~2)|(lose), ",N 8,G",   flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(2)|(mask)|ANNUL, BPRED|FBFCC(~2)|(lose), ",a,N 8,G", flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(3)|(mask)|BPRED, ANNUL|FBFCC(~3)|(lose), "9,G",      flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(3)|(mask)|BPRED, ANNUL|FBFCC(~3)|(lose), ",T 9,G",   flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(3)|(mask)|BPRED|ANNUL, FBFCC(~3)|(lose), ",a 9,G",   flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(3)|(mask)|BPRED|ANNUL, FBFCC(~3)|(lose), ",a,T 9,G", flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(3)|(mask), ANNUL|BPRED|FBFCC(~3)|(lose), ",N 9,G",   flags|F_DELAYED|F_FBR, 0, v9 }, \
+ { opcode, FBFCC(3)|(mask)|ANNUL, BPRED|FBFCC(~3)|(lose), ",a,N 9,G", flags|F_DELAYED|F_FBR, 0, v9 }
 
 /* v9: We must put `FBRX' before `FBR', to ensure that we never match
    v9: something against an expression unless it is an expression.  Otherwise,
@@ -1465,173 +1502,173 @@ CONDFC  ("fbule", "cb013", 0xe, F_CONDBR),
 #undef FBR
 #undef FBRX	/* v9 */
 
-{ "jmp",	F3(2, 0x38, 0), F3(~2, ~0x38, ~0)|RD_G0|ASI(~0),	"1+2", F_UNBR|F_DELAYED, v6 }, /* jmpl rs1+rs2,%g0 */
-{ "jmp",	F3(2, 0x38, 0), F3(~2, ~0x38, ~0)|RD_G0|ASI_RS2(~0),	"1", F_UNBR|F_DELAYED, v6 }, /* jmpl rs1+%g0,%g0 */
-{ "jmp",	F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RD_G0,		"1+i", F_UNBR|F_DELAYED, v6 }, /* jmpl rs1+i,%g0 */
-{ "jmp",	F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RD_G0,		"i+1", F_UNBR|F_DELAYED, v6 }, /* jmpl i+rs1,%g0 */
-{ "jmp",	F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RD_G0|RS1_G0,		"i", F_UNBR|F_DELAYED, v6 }, /* jmpl %g0+i,%g0 */
-{ "jmp",	F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RD_G0|SIMM13(~0),	"1", F_UNBR|F_DELAYED, v6 }, /* jmpl rs1+0,%g0 */
+{ "jmp",	F3(2, 0x38, 0), F3(~2, ~0x38, ~0)|RD_G0|ASI(~0),	"1+2", F_UNBR|F_DELAYED, 0, v6 }, /* jmpl rs1+rs2,%g0 */
+{ "jmp",	F3(2, 0x38, 0), F3(~2, ~0x38, ~0)|RD_G0|ASI_RS2(~0),	"1", F_UNBR|F_DELAYED, 0, v6 }, /* jmpl rs1+%g0,%g0 */
+{ "jmp",	F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RD_G0,		"1+i", F_UNBR|F_DELAYED, 0, v6 }, /* jmpl rs1+i,%g0 */
+{ "jmp",	F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RD_G0,		"i+1", F_UNBR|F_DELAYED, 0, v6 }, /* jmpl i+rs1,%g0 */
+{ "jmp",	F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RD_G0|RS1_G0,		"i", F_UNBR|F_DELAYED, 0, v6 }, /* jmpl %g0+i,%g0 */
+{ "jmp",	F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RD_G0|SIMM13(~0),	"1", F_UNBR|F_DELAYED, 0, v6 }, /* jmpl rs1+0,%g0 */
 
-{ "nop",	F2(0, 4), 0xfeffffff, "", 0, v6 }, /* sethi 0, %g0 */
+{ "nop",	F2(0, 4), 0xfeffffff, "", 0, 0, v6 }, /* sethi 0, %g0 */
 
-{ "set",	F2(0x0, 0x4), F2(~0x0, ~0x4), "S0,d", F_ALIAS, v6 },
-{ "setuw",	F2(0x0, 0x4), F2(~0x0, ~0x4), "S0,d", F_ALIAS, v9 },
-{ "setsw",	F2(0x0, 0x4), F2(~0x0, ~0x4), "S0,d", F_ALIAS, v9 },
-{ "setx",	F2(0x0, 0x4), F2(~0x0, ~0x4), "S0,1,d", F_ALIAS, v9 },
+{ "set",	F2(0x0, 0x4), F2(~0x0, ~0x4), "S0,d", F_ALIAS, 0, v6 },
+{ "setuw",	F2(0x0, 0x4), F2(~0x0, ~0x4), "S0,d", F_ALIAS, 0, v9 },
+{ "setsw",	F2(0x0, 0x4), F2(~0x0, ~0x4), "S0,d", F_ALIAS, 0, v9 },
+{ "setx",	F2(0x0, 0x4), F2(~0x0, ~0x4), "S0,1,d", F_ALIAS, 0, v9 },
 
-{ "sethi",	F2(0x0, 0x4), F2(~0x0, ~0x4), "h,d", 0, v6 },
+{ "sethi",	F2(0x0, 0x4), F2(~0x0, ~0x4), "h,d", 0, 0, v6 },
 
-{ "taddcc",	F3(2, 0x20, 0), F3(~2, ~0x20, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "taddcc",	F3(2, 0x20, 1), F3(~2, ~0x20, ~1),		"1,i,d", 0, v6 },
-{ "taddcc",	F3(2, 0x20, 1), F3(~2, ~0x20, ~1),		"i,1,d", 0, v6 },
-{ "taddcctv",	F3(2, 0x22, 0), F3(~2, ~0x22, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "taddcctv",	F3(2, 0x22, 1), F3(~2, ~0x22, ~1),		"1,i,d", 0, v6 },
-{ "taddcctv",	F3(2, 0x22, 1), F3(~2, ~0x22, ~1),		"i,1,d", 0, v6 },
+{ "taddcc",	F3(2, 0x20, 0), F3(~2, ~0x20, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "taddcc",	F3(2, 0x20, 1), F3(~2, ~0x20, ~1),		"1,i,d", 0, 0, v6 },
+{ "taddcc",	F3(2, 0x20, 1), F3(~2, ~0x20, ~1),		"i,1,d", 0, 0, v6 },
+{ "taddcctv",	F3(2, 0x22, 0), F3(~2, ~0x22, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "taddcctv",	F3(2, 0x22, 1), F3(~2, ~0x22, ~1),		"1,i,d", 0, 0, v6 },
+{ "taddcctv",	F3(2, 0x22, 1), F3(~2, ~0x22, ~1),		"i,1,d", 0, 0, v6 },
 
-{ "tsubcc",	F3(2, 0x21, 0), F3(~2, ~0x21, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "tsubcc",	F3(2, 0x21, 1), F3(~2, ~0x21, ~1),		"1,i,d", 0, v6 },
-{ "tsubcctv",	F3(2, 0x23, 0), F3(~2, ~0x23, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "tsubcctv",	F3(2, 0x23, 1), F3(~2, ~0x23, ~1),		"1,i,d", 0, v6 },
+{ "tsubcc",	F3(2, 0x21, 0), F3(~2, ~0x21, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "tsubcc",	F3(2, 0x21, 1), F3(~2, ~0x21, ~1),		"1,i,d", 0, 0, v6 },
+{ "tsubcctv",	F3(2, 0x23, 0), F3(~2, ~0x23, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "tsubcctv",	F3(2, 0x23, 1), F3(~2, ~0x23, ~1),		"1,i,d", 0, 0, v6 },
 
-{ "unimp",	F2(0x0, 0x0), 0xffc00000, "n", 0, v6notv9 },
-{ "illtrap",	F2(0, 0), F2(~0, ~0)|RD_G0, "n", 0, v9 },
+{ "unimp",	F2(0x0, 0x0), 0xffc00000, "n", 0, 0, v6notv9 },
+{ "illtrap",	F2(0, 0), F2(~0, ~0)|RD_G0, "n", 0, 0, v9 },
 
 /* This *is* a commutative instruction.  */
-{ "xnor",	F3(2, 0x07, 0), F3(~2, ~0x07, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "xnor",	F3(2, 0x07, 1), F3(~2, ~0x07, ~1),		"1,i,d", 0, v6 },
-{ "xnor",	F3(2, 0x07, 1), F3(~2, ~0x07, ~1),		"i,1,d", 0, v6 },
+{ "xnor",	F3(2, 0x07, 0), F3(~2, ~0x07, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "xnor",	F3(2, 0x07, 1), F3(~2, ~0x07, ~1),		"1,i,d", 0, 0, v6 },
+{ "xnor",	F3(2, 0x07, 1), F3(~2, ~0x07, ~1),		"i,1,d", 0, 0, v6 },
 /* This *is* a commutative instruction.  */
-{ "xnorcc",	F3(2, 0x17, 0), F3(~2, ~0x17, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "xnorcc",	F3(2, 0x17, 1), F3(~2, ~0x17, ~1),		"1,i,d", 0, v6 },
-{ "xnorcc",	F3(2, 0x17, 1), F3(~2, ~0x17, ~1),		"i,1,d", 0, v6 },
-{ "xor",	F3(2, 0x03, 0), F3(~2, ~0x03, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "xor",	F3(2, 0x03, 1), F3(~2, ~0x03, ~1),		"1,i,d", 0, v6 },
-{ "xor",	F3(2, 0x03, 1), F3(~2, ~0x03, ~1),		"i,1,d", 0, v6 },
-{ "xorcc",	F3(2, 0x13, 0), F3(~2, ~0x13, ~0)|ASI(~0),	"1,2,d", 0, v6 },
-{ "xorcc",	F3(2, 0x13, 1), F3(~2, ~0x13, ~1),		"1,i,d", 0, v6 },
-{ "xorcc",	F3(2, 0x13, 1), F3(~2, ~0x13, ~1),		"i,1,d", 0, v6 },
-
-{ "not",	F3(2, 0x07, 0), F3(~2, ~0x07, ~0)|ASI(~0), "1,d", F_ALIAS, v6 }, /* xnor rs1,%0,rd */
-{ "not",	F3(2, 0x07, 0), F3(~2, ~0x07, ~0)|ASI(~0), "r", F_ALIAS, v6 }, /* xnor rd,%0,rd */
-
-{ "btog",	F3(2, 0x03, 0), F3(~2, ~0x03, ~0)|ASI(~0),	"2,r", F_ALIAS, v6 }, /* xor rd,rs2,rd */
-{ "btog",	F3(2, 0x03, 1), F3(~2, ~0x03, ~1),		"i,r", F_ALIAS, v6 }, /* xor rd,i,rd */
+{ "xnorcc",	F3(2, 0x17, 0), F3(~2, ~0x17, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "xnorcc",	F3(2, 0x17, 1), F3(~2, ~0x17, ~1),		"1,i,d", 0, 0, v6 },
+{ "xnorcc",	F3(2, 0x17, 1), F3(~2, ~0x17, ~1),		"i,1,d", 0, 0, v6 },
+{ "xor",	F3(2, 0x03, 0), F3(~2, ~0x03, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "xor",	F3(2, 0x03, 1), F3(~2, ~0x03, ~1),		"1,i,d", 0, 0, v6 },
+{ "xor",	F3(2, 0x03, 1), F3(~2, ~0x03, ~1),		"i,1,d", 0, 0, v6 },
+{ "xorcc",	F3(2, 0x13, 0), F3(~2, ~0x13, ~0)|ASI(~0),	"1,2,d", 0, 0, v6 },
+{ "xorcc",	F3(2, 0x13, 1), F3(~2, ~0x13, ~1),		"1,i,d", 0, 0, v6 },
+{ "xorcc",	F3(2, 0x13, 1), F3(~2, ~0x13, ~1),		"i,1,d", 0, 0, v6 },
+
+{ "not",	F3(2, 0x07, 0), F3(~2, ~0x07, ~0)|ASI(~0), "1,d", F_ALIAS, 0, v6 }, /* xnor rs1,%0,rd */
+{ "not",	F3(2, 0x07, 0), F3(~2, ~0x07, ~0)|ASI(~0), "r", F_ALIAS, 0, v6 }, /* xnor rd,%0,rd */
+
+{ "btog",	F3(2, 0x03, 0), F3(~2, ~0x03, ~0)|ASI(~0),	"2,r", F_ALIAS, 0, v6 }, /* xor rd,rs2,rd */
+{ "btog",	F3(2, 0x03, 1), F3(~2, ~0x03, ~1),		"i,r", F_ALIAS, 0, v6 }, /* xor rd,i,rd */
 
 /* FPop1 and FPop2 are not instructions.  Don't accept them.  */
 
-{ "fdtoi",	F3F(2, 0x34, 0x0d2), F3F(~2, ~0x34, ~0x0d2)|RS1_G0, "B,g", F_FLOAT, v6 },
-{ "fstoi",	F3F(2, 0x34, 0x0d1), F3F(~2, ~0x34, ~0x0d1)|RS1_G0, "f,g", F_FLOAT, v6 },
-{ "fqtoi",	F3F(2, 0x34, 0x0d3), F3F(~2, ~0x34, ~0x0d3)|RS1_G0, "R,g", F_FLOAT, v8 },
-
-{ "fdtox",	F3F(2, 0x34, 0x082), F3F(~2, ~0x34, ~0x082)|RS1_G0, "B,H", F_FLOAT, v9 },
-{ "fstox",	F3F(2, 0x34, 0x081), F3F(~2, ~0x34, ~0x081)|RS1_G0, "f,H", F_FLOAT, v9 },
-{ "fqtox",	F3F(2, 0x34, 0x083), F3F(~2, ~0x34, ~0x083)|RS1_G0, "R,H", F_FLOAT, v9 },
-
-{ "fitod",	F3F(2, 0x34, 0x0c8), F3F(~2, ~0x34, ~0x0c8)|RS1_G0, "f,H", F_FLOAT, v6 },
-{ "fitos",	F3F(2, 0x34, 0x0c4), F3F(~2, ~0x34, ~0x0c4)|RS1_G0, "f,g", F_FLOAT, v6 },
-{ "fitoq",	F3F(2, 0x34, 0x0cc), F3F(~2, ~0x34, ~0x0cc)|RS1_G0, "f,J", F_FLOAT, v8 },
-
-{ "fxtod",	F3F(2, 0x34, 0x088), F3F(~2, ~0x34, ~0x088)|RS1_G0, "B,H", F_FLOAT, v9 },
-{ "fxtos",	F3F(2, 0x34, 0x084), F3F(~2, ~0x34, ~0x084)|RS1_G0, "B,g", F_FLOAT, v9 },
-{ "fxtoq",	F3F(2, 0x34, 0x08c), F3F(~2, ~0x34, ~0x08c)|RS1_G0, "B,J", F_FLOAT, v9 },
-
-{ "fdtoq",	F3F(2, 0x34, 0x0ce), F3F(~2, ~0x34, ~0x0ce)|RS1_G0, "B,J", F_FLOAT, v8 },
-{ "fdtos",	F3F(2, 0x34, 0x0c6), F3F(~2, ~0x34, ~0x0c6)|RS1_G0, "B,g", F_FLOAT, v6 },
-{ "fqtod",	F3F(2, 0x34, 0x0cb), F3F(~2, ~0x34, ~0x0cb)|RS1_G0, "R,H", F_FLOAT, v8 },
-{ "fqtos",	F3F(2, 0x34, 0x0c7), F3F(~2, ~0x34, ~0x0c7)|RS1_G0, "R,g", F_FLOAT, v8 },
-{ "fstod",	F3F(2, 0x34, 0x0c9), F3F(~2, ~0x34, ~0x0c9)|RS1_G0, "f,H", F_FLOAT, v6 },
-{ "fstoq",	F3F(2, 0x34, 0x0cd), F3F(~2, ~0x34, ~0x0cd)|RS1_G0, "f,J", F_FLOAT, v8 },
-
-{ "fdivd",	F3F(2, 0x34, 0x04e), F3F(~2, ~0x34, ~0x04e), "v,B,H", F_FLOAT, v6 },
-{ "fdivq",	F3F(2, 0x34, 0x04f), F3F(~2, ~0x34, ~0x04f), "V,R,J", F_FLOAT, v8 },
-{ "fdivx",	F3F(2, 0x34, 0x04f), F3F(~2, ~0x34, ~0x04f), "V,R,J", F_FLOAT|F_ALIAS, v8 },
-{ "fdivs",	F3F(2, 0x34, 0x04d), F3F(~2, ~0x34, ~0x04d), "e,f,g", F_FLOAT, v6 },
-{ "fmuld",	F3F(2, 0x34, 0x04a), F3F(~2, ~0x34, ~0x04a), "v,B,H", F_FLOAT, v6 },
-{ "fmulq",	F3F(2, 0x34, 0x04b), F3F(~2, ~0x34, ~0x04b), "V,R,J", F_FLOAT, v8 },
-{ "fmulx",	F3F(2, 0x34, 0x04b), F3F(~2, ~0x34, ~0x04b), "V,R,J", F_FLOAT|F_ALIAS, v8 },
-{ "fmuls",	F3F(2, 0x34, 0x049), F3F(~2, ~0x34, ~0x049), "e,f,g", F_FLOAT, v6 },
-
-{ "fdmulq",	F3F(2, 0x34, 0x06e), F3F(~2, ~0x34, ~0x06e), "v,B,J", F_FLOAT, v8 },
-{ "fdmulx",	F3F(2, 0x34, 0x06e), F3F(~2, ~0x34, ~0x06e), "v,B,J", F_FLOAT|F_ALIAS, v8 },
-{ "fsmuld",	F3F(2, 0x34, 0x069), F3F(~2, ~0x34, ~0x069), "e,f,H", F_FLOAT|F_FSMULD, v8 },
-
-{ "fsqrtd",	F3F(2, 0x34, 0x02a), F3F(~2, ~0x34, ~0x02a)|RS1_G0, "B,H", F_FLOAT, v7 },
-{ "fsqrtq",	F3F(2, 0x34, 0x02b), F3F(~2, ~0x34, ~0x02b)|RS1_G0, "R,J", F_FLOAT, v8 },
-{ "fsqrtx",	F3F(2, 0x34, 0x02b), F3F(~2, ~0x34, ~0x02b)|RS1_G0, "R,J", F_FLOAT|F_ALIAS, v8 },
-{ "fsqrts",	F3F(2, 0x34, 0x029), F3F(~2, ~0x34, ~0x029)|RS1_G0, "f,g", F_FLOAT, v7 },
-
-{ "fabsd",	F3F(2, 0x34, 0x00a), F3F(~2, ~0x34, ~0x00a)|RS1_G0, "B,H", F_FLOAT, v9 },
-{ "fabsq",	F3F(2, 0x34, 0x00b), F3F(~2, ~0x34, ~0x00b)|RS1_G0, "R,J", F_FLOAT, v9 },
-{ "fabsx",	F3F(2, 0x34, 0x00b), F3F(~2, ~0x34, ~0x00b)|RS1_G0, "R,J", F_FLOAT|F_ALIAS, v9 },
-{ "fabss",	F3F(2, 0x34, 0x009), F3F(~2, ~0x34, ~0x009)|RS1_G0, "f,g", F_FLOAT, v6 },
-{ "fmovd",	F3F(2, 0x34, 0x002), F3F(~2, ~0x34, ~0x002)|RS1_G0, "B,H", F_FLOAT, v9 },
-{ "fmovq",	F3F(2, 0x34, 0x003), F3F(~2, ~0x34, ~0x003)|RS1_G0, "R,J", F_FLOAT, v9 },
-{ "fmovx",	F3F(2, 0x34, 0x003), F3F(~2, ~0x34, ~0x003)|RS1_G0, "R,J", F_FLOAT|F_ALIAS, v9 },
-{ "fmovs",	F3F(2, 0x34, 0x001), F3F(~2, ~0x34, ~0x001)|RS1_G0, "f,g", F_FLOAT, v6 },
-{ "fnegd",	F3F(2, 0x34, 0x006), F3F(~2, ~0x34, ~0x006)|RS1_G0, "B,H", F_FLOAT, v9 },
-{ "fnegq",	F3F(2, 0x34, 0x007), F3F(~2, ~0x34, ~0x007)|RS1_G0, "R,J", F_FLOAT, v9 },
-{ "fnegx",	F3F(2, 0x34, 0x007), F3F(~2, ~0x34, ~0x007)|RS1_G0, "R,J", F_FLOAT|F_ALIAS, v9 },
-{ "fnegs",	F3F(2, 0x34, 0x005), F3F(~2, ~0x34, ~0x005)|RS1_G0, "f,g", F_FLOAT, v6 },
-
-{ "faddd",	F3F(2, 0x34, 0x042), F3F(~2, ~0x34, ~0x042), "v,B,H", F_FLOAT, v6 },
-{ "faddq",	F3F(2, 0x34, 0x043), F3F(~2, ~0x34, ~0x043), "V,R,J", F_FLOAT, v8 },
-{ "faddx",	F3F(2, 0x34, 0x043), F3F(~2, ~0x34, ~0x043), "V,R,J", F_FLOAT|F_ALIAS, v8 },
-{ "fadds",	F3F(2, 0x34, 0x041), F3F(~2, ~0x34, ~0x041), "e,f,g", F_FLOAT, v6 },
-{ "fsubd",	F3F(2, 0x34, 0x046), F3F(~2, ~0x34, ~0x046), "v,B,H", F_FLOAT, v6 },
-{ "fsubq",	F3F(2, 0x34, 0x047), F3F(~2, ~0x34, ~0x047), "V,R,J", F_FLOAT, v8 },
-{ "fsubx",	F3F(2, 0x34, 0x047), F3F(~2, ~0x34, ~0x047), "V,R,J", F_FLOAT|F_ALIAS, v8 },
-{ "fsubs",	F3F(2, 0x34, 0x045), F3F(~2, ~0x34, ~0x045), "e,f,g", F_FLOAT, v6 },
+{ "fdtoi",	F3F(2, 0x34, 0x0d2), F3F(~2, ~0x34, ~0x0d2)|RS1_G0, "B,g", F_FLOAT, 0, v6 },
+{ "fstoi",	F3F(2, 0x34, 0x0d1), F3F(~2, ~0x34, ~0x0d1)|RS1_G0, "f,g", F_FLOAT, 0, v6 },
+{ "fqtoi",	F3F(2, 0x34, 0x0d3), F3F(~2, ~0x34, ~0x0d3)|RS1_G0, "R,g", F_FLOAT, 0, v8 },
+
+{ "fdtox",	F3F(2, 0x34, 0x082), F3F(~2, ~0x34, ~0x082)|RS1_G0, "B,H", F_FLOAT, 0, v9 },
+{ "fstox",	F3F(2, 0x34, 0x081), F3F(~2, ~0x34, ~0x081)|RS1_G0, "f,H", F_FLOAT, 0, v9 },
+{ "fqtox",	F3F(2, 0x34, 0x083), F3F(~2, ~0x34, ~0x083)|RS1_G0, "R,H", F_FLOAT, 0, v9 },
+
+{ "fitod",	F3F(2, 0x34, 0x0c8), F3F(~2, ~0x34, ~0x0c8)|RS1_G0, "f,H", F_FLOAT, 0, v6 },
+{ "fitos",	F3F(2, 0x34, 0x0c4), F3F(~2, ~0x34, ~0x0c4)|RS1_G0, "f,g", F_FLOAT, 0, v6 },
+{ "fitoq",	F3F(2, 0x34, 0x0cc), F3F(~2, ~0x34, ~0x0cc)|RS1_G0, "f,J", F_FLOAT, 0, v8 },
+
+{ "fxtod",	F3F(2, 0x34, 0x088), F3F(~2, ~0x34, ~0x088)|RS1_G0, "B,H", F_FLOAT, 0, v9 },
+{ "fxtos",	F3F(2, 0x34, 0x084), F3F(~2, ~0x34, ~0x084)|RS1_G0, "B,g", F_FLOAT, 0, v9 },
+{ "fxtoq",	F3F(2, 0x34, 0x08c), F3F(~2, ~0x34, ~0x08c)|RS1_G0, "B,J", F_FLOAT, 0, v9 },
+
+{ "fdtoq",	F3F(2, 0x34, 0x0ce), F3F(~2, ~0x34, ~0x0ce)|RS1_G0, "B,J", F_FLOAT, 0, v8 },
+{ "fdtos",	F3F(2, 0x34, 0x0c6), F3F(~2, ~0x34, ~0x0c6)|RS1_G0, "B,g", F_FLOAT, 0, v6 },
+{ "fqtod",	F3F(2, 0x34, 0x0cb), F3F(~2, ~0x34, ~0x0cb)|RS1_G0, "R,H", F_FLOAT, 0, v8 },
+{ "fqtos",	F3F(2, 0x34, 0x0c7), F3F(~2, ~0x34, ~0x0c7)|RS1_G0, "R,g", F_FLOAT, 0, v8 },
+{ "fstod",	F3F(2, 0x34, 0x0c9), F3F(~2, ~0x34, ~0x0c9)|RS1_G0, "f,H", F_FLOAT, 0, v6 },
+{ "fstoq",	F3F(2, 0x34, 0x0cd), F3F(~2, ~0x34, ~0x0cd)|RS1_G0, "f,J", F_FLOAT, 0, v8 },
+
+{ "fdivd",	F3F(2, 0x34, 0x04e), F3F(~2, ~0x34, ~0x04e), "v,B,H", F_FLOAT, 0, v6 },
+{ "fdivq",	F3F(2, 0x34, 0x04f), F3F(~2, ~0x34, ~0x04f), "V,R,J", F_FLOAT, 0, v8 },
+{ "fdivx",	F3F(2, 0x34, 0x04f), F3F(~2, ~0x34, ~0x04f), "V,R,J", F_FLOAT|F_ALIAS, 0, v8 },
+{ "fdivs",	F3F(2, 0x34, 0x04d), F3F(~2, ~0x34, ~0x04d), "e,f,g", F_FLOAT, 0, v6 },
+{ "fmuld",	F3F(2, 0x34, 0x04a), F3F(~2, ~0x34, ~0x04a), "v,B,H", F_FLOAT, 0, v6 },
+{ "fmulq",	F3F(2, 0x34, 0x04b), F3F(~2, ~0x34, ~0x04b), "V,R,J", F_FLOAT, 0, v8 },
+{ "fmulx",	F3F(2, 0x34, 0x04b), F3F(~2, ~0x34, ~0x04b), "V,R,J", F_FLOAT|F_ALIAS, 0, v8 },
+{ "fmuls",	F3F(2, 0x34, 0x049), F3F(~2, ~0x34, ~0x049), "e,f,g", F_FLOAT, 0, v6 },
+
+{ "fdmulq",	F3F(2, 0x34, 0x06e), F3F(~2, ~0x34, ~0x06e), "v,B,J", F_FLOAT, 0, v8 },
+{ "fdmulx",	F3F(2, 0x34, 0x06e), F3F(~2, ~0x34, ~0x06e), "v,B,J", F_FLOAT|F_ALIAS, 0, v8 },
+{ "fsmuld",	F3F(2, 0x34, 0x069), F3F(~2, ~0x34, ~0x069), "e,f,H", F_FLOAT, HWCAP_FSMULD, v8 },
+
+{ "fsqrtd",	F3F(2, 0x34, 0x02a), F3F(~2, ~0x34, ~0x02a)|RS1_G0, "B,H", F_FLOAT, 0, v7 },
+{ "fsqrtq",	F3F(2, 0x34, 0x02b), F3F(~2, ~0x34, ~0x02b)|RS1_G0, "R,J", F_FLOAT, 0, v8 },
+{ "fsqrtx",	F3F(2, 0x34, 0x02b), F3F(~2, ~0x34, ~0x02b)|RS1_G0, "R,J", F_FLOAT|F_ALIAS, 0, v8 },
+{ "fsqrts",	F3F(2, 0x34, 0x029), F3F(~2, ~0x34, ~0x029)|RS1_G0, "f,g", F_FLOAT, 0, v7 },
+
+{ "fabsd",	F3F(2, 0x34, 0x00a), F3F(~2, ~0x34, ~0x00a)|RS1_G0, "B,H", F_FLOAT, 0, v9 },
+{ "fabsq",	F3F(2, 0x34, 0x00b), F3F(~2, ~0x34, ~0x00b)|RS1_G0, "R,J", F_FLOAT, 0, v9 },
+{ "fabsx",	F3F(2, 0x34, 0x00b), F3F(~2, ~0x34, ~0x00b)|RS1_G0, "R,J", F_FLOAT|F_ALIAS, 0, v9 },
+{ "fabss",	F3F(2, 0x34, 0x009), F3F(~2, ~0x34, ~0x009)|RS1_G0, "f,g", F_FLOAT, 0, v6 },
+{ "fmovd",	F3F(2, 0x34, 0x002), F3F(~2, ~0x34, ~0x002)|RS1_G0, "B,H", F_FLOAT, 0, v9 },
+{ "fmovq",	F3F(2, 0x34, 0x003), F3F(~2, ~0x34, ~0x003)|RS1_G0, "R,J", F_FLOAT, 0, v9 },
+{ "fmovx",	F3F(2, 0x34, 0x003), F3F(~2, ~0x34, ~0x003)|RS1_G0, "R,J", F_FLOAT|F_ALIAS, 0, v9 },
+{ "fmovs",	F3F(2, 0x34, 0x001), F3F(~2, ~0x34, ~0x001)|RS1_G0, "f,g", F_FLOAT, 0, v6 },
+{ "fnegd",	F3F(2, 0x34, 0x006), F3F(~2, ~0x34, ~0x006)|RS1_G0, "B,H", F_FLOAT, 0, v9 },
+{ "fnegq",	F3F(2, 0x34, 0x007), F3F(~2, ~0x34, ~0x007)|RS1_G0, "R,J", F_FLOAT, 0, v9 },
+{ "fnegx",	F3F(2, 0x34, 0x007), F3F(~2, ~0x34, ~0x007)|RS1_G0, "R,J", F_FLOAT|F_ALIAS, 0, v9 },
+{ "fnegs",	F3F(2, 0x34, 0x005), F3F(~2, ~0x34, ~0x005)|RS1_G0, "f,g", F_FLOAT, 0, v6 },
+
+{ "faddd",	F3F(2, 0x34, 0x042), F3F(~2, ~0x34, ~0x042), "v,B,H", F_FLOAT, 0, v6 },
+{ "faddq",	F3F(2, 0x34, 0x043), F3F(~2, ~0x34, ~0x043), "V,R,J", F_FLOAT, 0, v8 },
+{ "faddx",	F3F(2, 0x34, 0x043), F3F(~2, ~0x34, ~0x043), "V,R,J", F_FLOAT|F_ALIAS, 0, v8 },
+{ "fadds",	F3F(2, 0x34, 0x041), F3F(~2, ~0x34, ~0x041), "e,f,g", F_FLOAT, 0, v6 },
+{ "fsubd",	F3F(2, 0x34, 0x046), F3F(~2, ~0x34, ~0x046), "v,B,H", F_FLOAT, 0, v6 },
+{ "fsubq",	F3F(2, 0x34, 0x047), F3F(~2, ~0x34, ~0x047), "V,R,J", F_FLOAT, 0, v8 },
+{ "fsubx",	F3F(2, 0x34, 0x047), F3F(~2, ~0x34, ~0x047), "V,R,J", F_FLOAT|F_ALIAS, 0, v8 },
+{ "fsubs",	F3F(2, 0x34, 0x045), F3F(~2, ~0x34, ~0x045), "e,f,g", F_FLOAT, 0, v6 },
 
 #define CMPFCC(x)	(((x)&0x3)<<25)
 
-{ "fcmpd",	          F3F(2, 0x35, 0x052),            F3F(~2, ~0x35, ~0x052)|RD_G0,  "v,B",   F_FLOAT, v6 },
-{ "fcmpd",	CMPFCC(0)|F3F(2, 0x35, 0x052), CMPFCC(~0)|F3F(~2, ~0x35, ~0x052),	 "6,v,B", F_FLOAT, v9 },
-{ "fcmpd",	CMPFCC(1)|F3F(2, 0x35, 0x052), CMPFCC(~1)|F3F(~2, ~0x35, ~0x052),	 "7,v,B", F_FLOAT, v9 },
-{ "fcmpd",	CMPFCC(2)|F3F(2, 0x35, 0x052), CMPFCC(~2)|F3F(~2, ~0x35, ~0x052),	 "8,v,B", F_FLOAT, v9 },
-{ "fcmpd",	CMPFCC(3)|F3F(2, 0x35, 0x052), CMPFCC(~3)|F3F(~2, ~0x35, ~0x052),	 "9,v,B", F_FLOAT, v9 },
-{ "fcmped",	          F3F(2, 0x35, 0x056),            F3F(~2, ~0x35, ~0x056)|RD_G0,  "v,B",   F_FLOAT, v6 },
-{ "fcmped",	CMPFCC(0)|F3F(2, 0x35, 0x056), CMPFCC(~0)|F3F(~2, ~0x35, ~0x056),	 "6,v,B", F_FLOAT, v9 },
-{ "fcmped",	CMPFCC(1)|F3F(2, 0x35, 0x056), CMPFCC(~1)|F3F(~2, ~0x35, ~0x056),	 "7,v,B", F_FLOAT, v9 },
-{ "fcmped",	CMPFCC(2)|F3F(2, 0x35, 0x056), CMPFCC(~2)|F3F(~2, ~0x35, ~0x056),	 "8,v,B", F_FLOAT, v9 },
-{ "fcmped",	CMPFCC(3)|F3F(2, 0x35, 0x056), CMPFCC(~3)|F3F(~2, ~0x35, ~0x056),	 "9,v,B", F_FLOAT, v9 },
-{ "fcmpq",	          F3F(2, 0x35, 0x053),            F3F(~2, ~0x35, ~0x053)|RD_G0,	 "V,R", F_FLOAT, v8 },
-{ "fcmpq",	CMPFCC(0)|F3F(2, 0x35, 0x053), CMPFCC(~0)|F3F(~2, ~0x35, ~0x053),	 "6,V,R", F_FLOAT, v9 },
-{ "fcmpq",	CMPFCC(1)|F3F(2, 0x35, 0x053), CMPFCC(~1)|F3F(~2, ~0x35, ~0x053),	 "7,V,R", F_FLOAT, v9 },
-{ "fcmpq",	CMPFCC(2)|F3F(2, 0x35, 0x053), CMPFCC(~2)|F3F(~2, ~0x35, ~0x053),	 "8,V,R", F_FLOAT, v9 },
-{ "fcmpq",	CMPFCC(3)|F3F(2, 0x35, 0x053), CMPFCC(~3)|F3F(~2, ~0x35, ~0x053),	 "9,V,R", F_FLOAT, v9 },
-{ "fcmpeq",	          F3F(2, 0x35, 0x057),            F3F(~2, ~0x35, ~0x057)|RD_G0,	 "V,R", F_FLOAT, v8 },
-{ "fcmpeq",	CMPFCC(0)|F3F(2, 0x35, 0x057), CMPFCC(~0)|F3F(~2, ~0x35, ~0x057),	 "6,V,R", F_FLOAT, v9 },
-{ "fcmpeq",	CMPFCC(1)|F3F(2, 0x35, 0x057), CMPFCC(~1)|F3F(~2, ~0x35, ~0x057),	 "7,V,R", F_FLOAT, v9 },
-{ "fcmpeq",	CMPFCC(2)|F3F(2, 0x35, 0x057), CMPFCC(~2)|F3F(~2, ~0x35, ~0x057),	 "8,V,R", F_FLOAT, v9 },
-{ "fcmpeq",	CMPFCC(3)|F3F(2, 0x35, 0x057), CMPFCC(~3)|F3F(~2, ~0x35, ~0x057),	 "9,V,R", F_FLOAT, v9 },
-{ "fcmpx",	          F3F(2, 0x35, 0x053),            F3F(~2, ~0x35, ~0x053)|RD_G0,	 "V,R", F_FLOAT|F_ALIAS, v8 },
-{ "fcmpx",	CMPFCC(0)|F3F(2, 0x35, 0x053), CMPFCC(~0)|F3F(~2, ~0x35, ~0x053),	 "6,V,R", F_FLOAT|F_ALIAS, v9 },
-{ "fcmpx",	CMPFCC(1)|F3F(2, 0x35, 0x053), CMPFCC(~1)|F3F(~2, ~0x35, ~0x053),	 "7,V,R", F_FLOAT|F_ALIAS, v9 },
-{ "fcmpx",	CMPFCC(2)|F3F(2, 0x35, 0x053), CMPFCC(~2)|F3F(~2, ~0x35, ~0x053),	 "8,V,R", F_FLOAT|F_ALIAS, v9 },
-{ "fcmpx",	CMPFCC(3)|F3F(2, 0x35, 0x053), CMPFCC(~3)|F3F(~2, ~0x35, ~0x053),	 "9,V,R", F_FLOAT|F_ALIAS, v9 },
-{ "fcmpex",	          F3F(2, 0x35, 0x057),            F3F(~2, ~0x35, ~0x057)|RD_G0,	 "V,R", F_FLOAT|F_ALIAS, v8 },
-{ "fcmpex",	CMPFCC(0)|F3F(2, 0x35, 0x057), CMPFCC(~0)|F3F(~2, ~0x35, ~0x057),	 "6,V,R", F_FLOAT|F_ALIAS, v9 },
-{ "fcmpex",	CMPFCC(1)|F3F(2, 0x35, 0x057), CMPFCC(~1)|F3F(~2, ~0x35, ~0x057),	 "7,V,R", F_FLOAT|F_ALIAS, v9 },
-{ "fcmpex",	CMPFCC(2)|F3F(2, 0x35, 0x057), CMPFCC(~2)|F3F(~2, ~0x35, ~0x057),	 "8,V,R", F_FLOAT|F_ALIAS, v9 },
-{ "fcmpex",	CMPFCC(3)|F3F(2, 0x35, 0x057), CMPFCC(~3)|F3F(~2, ~0x35, ~0x057),	 "9,V,R", F_FLOAT|F_ALIAS, v9 },
-{ "fcmps",	          F3F(2, 0x35, 0x051),            F3F(~2, ~0x35, ~0x051)|RD_G0, "e,f",   F_FLOAT, v6 },
-{ "fcmps",	CMPFCC(0)|F3F(2, 0x35, 0x051), CMPFCC(~0)|F3F(~2, ~0x35, ~0x051),	 "6,e,f", F_FLOAT, v9 },
-{ "fcmps",	CMPFCC(1)|F3F(2, 0x35, 0x051), CMPFCC(~1)|F3F(~2, ~0x35, ~0x051),	 "7,e,f", F_FLOAT, v9 },
-{ "fcmps",	CMPFCC(2)|F3F(2, 0x35, 0x051), CMPFCC(~2)|F3F(~2, ~0x35, ~0x051),	 "8,e,f", F_FLOAT, v9 },
-{ "fcmps",	CMPFCC(3)|F3F(2, 0x35, 0x051), CMPFCC(~3)|F3F(~2, ~0x35, ~0x051),	 "9,e,f", F_FLOAT, v9 },
-{ "fcmpes",	          F3F(2, 0x35, 0x055),            F3F(~2, ~0x35, ~0x055)|RD_G0, "e,f",   F_FLOAT, v6 },
-{ "fcmpes",	CMPFCC(0)|F3F(2, 0x35, 0x055), CMPFCC(~0)|F3F(~2, ~0x35, ~0x055),	 "6,e,f", F_FLOAT, v9 },
-{ "fcmpes",	CMPFCC(1)|F3F(2, 0x35, 0x055), CMPFCC(~1)|F3F(~2, ~0x35, ~0x055),	 "7,e,f", F_FLOAT, v9 },
-{ "fcmpes",	CMPFCC(2)|F3F(2, 0x35, 0x055), CMPFCC(~2)|F3F(~2, ~0x35, ~0x055),	 "8,e,f", F_FLOAT, v9 },
-{ "fcmpes",	CMPFCC(3)|F3F(2, 0x35, 0x055), CMPFCC(~3)|F3F(~2, ~0x35, ~0x055),	 "9,e,f", F_FLOAT, v9 },
+{ "fcmpd",	          F3F(2, 0x35, 0x052),            F3F(~2, ~0x35, ~0x052)|RD_G0,  "v,B",   F_FLOAT, 0, v6 },
+{ "fcmpd",	CMPFCC(0)|F3F(2, 0x35, 0x052), CMPFCC(~0)|F3F(~2, ~0x35, ~0x052),	 "6,v,B", F_FLOAT, 0, v9 },
+{ "fcmpd",	CMPFCC(1)|F3F(2, 0x35, 0x052), CMPFCC(~1)|F3F(~2, ~0x35, ~0x052),	 "7,v,B", F_FLOAT, 0, v9 },
+{ "fcmpd",	CMPFCC(2)|F3F(2, 0x35, 0x052), CMPFCC(~2)|F3F(~2, ~0x35, ~0x052),	 "8,v,B", F_FLOAT, 0, v9 },
+{ "fcmpd",	CMPFCC(3)|F3F(2, 0x35, 0x052), CMPFCC(~3)|F3F(~2, ~0x35, ~0x052),	 "9,v,B", F_FLOAT, 0, v9 },
+{ "fcmped",	          F3F(2, 0x35, 0x056),            F3F(~2, ~0x35, ~0x056)|RD_G0,  "v,B",   F_FLOAT, 0, v6 },
+{ "fcmped",	CMPFCC(0)|F3F(2, 0x35, 0x056), CMPFCC(~0)|F3F(~2, ~0x35, ~0x056),	 "6,v,B", F_FLOAT, 0, v9 },
+{ "fcmped",	CMPFCC(1)|F3F(2, 0x35, 0x056), CMPFCC(~1)|F3F(~2, ~0x35, ~0x056),	 "7,v,B", F_FLOAT, 0, v9 },
+{ "fcmped",	CMPFCC(2)|F3F(2, 0x35, 0x056), CMPFCC(~2)|F3F(~2, ~0x35, ~0x056),	 "8,v,B", F_FLOAT, 0, v9 },
+{ "fcmped",	CMPFCC(3)|F3F(2, 0x35, 0x056), CMPFCC(~3)|F3F(~2, ~0x35, ~0x056),	 "9,v,B", F_FLOAT, 0, v9 },
+{ "fcmpq",	          F3F(2, 0x35, 0x053),            F3F(~2, ~0x35, ~0x053)|RD_G0,	 "V,R", F_FLOAT, 0, v8 },
+{ "fcmpq",	CMPFCC(0)|F3F(2, 0x35, 0x053), CMPFCC(~0)|F3F(~2, ~0x35, ~0x053),	 "6,V,R", F_FLOAT, 0, v9 },
+{ "fcmpq",	CMPFCC(1)|F3F(2, 0x35, 0x053), CMPFCC(~1)|F3F(~2, ~0x35, ~0x053),	 "7,V,R", F_FLOAT, 0, v9 },
+{ "fcmpq",	CMPFCC(2)|F3F(2, 0x35, 0x053), CMPFCC(~2)|F3F(~2, ~0x35, ~0x053),	 "8,V,R", F_FLOAT, 0, v9 },
+{ "fcmpq",	CMPFCC(3)|F3F(2, 0x35, 0x053), CMPFCC(~3)|F3F(~2, ~0x35, ~0x053),	 "9,V,R", F_FLOAT, 0, v9 },
+{ "fcmpeq",	          F3F(2, 0x35, 0x057),            F3F(~2, ~0x35, ~0x057)|RD_G0,	 "V,R", F_FLOAT, 0, v8 },
+{ "fcmpeq",	CMPFCC(0)|F3F(2, 0x35, 0x057), CMPFCC(~0)|F3F(~2, ~0x35, ~0x057),	 "6,V,R", F_FLOAT, 0, v9 },
+{ "fcmpeq",	CMPFCC(1)|F3F(2, 0x35, 0x057), CMPFCC(~1)|F3F(~2, ~0x35, ~0x057),	 "7,V,R", F_FLOAT, 0, v9 },
+{ "fcmpeq",	CMPFCC(2)|F3F(2, 0x35, 0x057), CMPFCC(~2)|F3F(~2, ~0x35, ~0x057),	 "8,V,R", F_FLOAT, 0, v9 },
+{ "fcmpeq",	CMPFCC(3)|F3F(2, 0x35, 0x057), CMPFCC(~3)|F3F(~2, ~0x35, ~0x057),	 "9,V,R", F_FLOAT, 0, v9 },
+{ "fcmpx",	          F3F(2, 0x35, 0x053),            F3F(~2, ~0x35, ~0x053)|RD_G0,	 "V,R", F_FLOAT|F_ALIAS, 0, v8 },
+{ "fcmpx",	CMPFCC(0)|F3F(2, 0x35, 0x053), CMPFCC(~0)|F3F(~2, ~0x35, ~0x053),	 "6,V,R", F_FLOAT|F_ALIAS, 0, v9 },
+{ "fcmpx",	CMPFCC(1)|F3F(2, 0x35, 0x053), CMPFCC(~1)|F3F(~2, ~0x35, ~0x053),	 "7,V,R", F_FLOAT|F_ALIAS, 0, v9 },
+{ "fcmpx",	CMPFCC(2)|F3F(2, 0x35, 0x053), CMPFCC(~2)|F3F(~2, ~0x35, ~0x053),	 "8,V,R", F_FLOAT|F_ALIAS, 0, v9 },
+{ "fcmpx",	CMPFCC(3)|F3F(2, 0x35, 0x053), CMPFCC(~3)|F3F(~2, ~0x35, ~0x053),	 "9,V,R", F_FLOAT|F_ALIAS, 0, v9 },
+{ "fcmpex",	          F3F(2, 0x35, 0x057),            F3F(~2, ~0x35, ~0x057)|RD_G0,	 "V,R", F_FLOAT|F_ALIAS, 0, v8 },
+{ "fcmpex",	CMPFCC(0)|F3F(2, 0x35, 0x057), CMPFCC(~0)|F3F(~2, ~0x35, ~0x057),	 "6,V,R", F_FLOAT|F_ALIAS, 0, v9 },
+{ "fcmpex",	CMPFCC(1)|F3F(2, 0x35, 0x057), CMPFCC(~1)|F3F(~2, ~0x35, ~0x057),	 "7,V,R", F_FLOAT|F_ALIAS, 0, v9 },
+{ "fcmpex",	CMPFCC(2)|F3F(2, 0x35, 0x057), CMPFCC(~2)|F3F(~2, ~0x35, ~0x057),	 "8,V,R", F_FLOAT|F_ALIAS, 0, v9 },
+{ "fcmpex",	CMPFCC(3)|F3F(2, 0x35, 0x057), CMPFCC(~3)|F3F(~2, ~0x35, ~0x057),	 "9,V,R", F_FLOAT|F_ALIAS, 0, v9 },
+{ "fcmps",	          F3F(2, 0x35, 0x051),            F3F(~2, ~0x35, ~0x051)|RD_G0, "e,f",   F_FLOAT, 0, v6 },
+{ "fcmps",	CMPFCC(0)|F3F(2, 0x35, 0x051), CMPFCC(~0)|F3F(~2, ~0x35, ~0x051),	 "6,e,f", F_FLOAT, 0, v9 },
+{ "fcmps",	CMPFCC(1)|F3F(2, 0x35, 0x051), CMPFCC(~1)|F3F(~2, ~0x35, ~0x051),	 "7,e,f", F_FLOAT, 0, v9 },
+{ "fcmps",	CMPFCC(2)|F3F(2, 0x35, 0x051), CMPFCC(~2)|F3F(~2, ~0x35, ~0x051),	 "8,e,f", F_FLOAT, 0, v9 },
+{ "fcmps",	CMPFCC(3)|F3F(2, 0x35, 0x051), CMPFCC(~3)|F3F(~2, ~0x35, ~0x051),	 "9,e,f", F_FLOAT, 0, v9 },
+{ "fcmpes",	          F3F(2, 0x35, 0x055),            F3F(~2, ~0x35, ~0x055)|RD_G0, "e,f",   F_FLOAT, 0, v6 },
+{ "fcmpes",	CMPFCC(0)|F3F(2, 0x35, 0x055), CMPFCC(~0)|F3F(~2, ~0x35, ~0x055),	 "6,e,f", F_FLOAT, 0, v9 },
+{ "fcmpes",	CMPFCC(1)|F3F(2, 0x35, 0x055), CMPFCC(~1)|F3F(~2, ~0x35, ~0x055),	 "7,e,f", F_FLOAT, 0, v9 },
+{ "fcmpes",	CMPFCC(2)|F3F(2, 0x35, 0x055), CMPFCC(~2)|F3F(~2, ~0x35, ~0x055),	 "8,e,f", F_FLOAT, 0, v9 },
+{ "fcmpes",	CMPFCC(3)|F3F(2, 0x35, 0x055), CMPFCC(~3)|F3F(~2, ~0x35, ~0x055),	 "9,e,f", F_FLOAT, 0, v9 },
 
 /* These Extended FPop (FIFO) instructions are new in the Fujitsu
    MB86934, replacing the CPop instructions from v6 and later
    processors.  */
 
-#define EFPOP1_2(name, op, args) { name, F3F(2, 0x36, op), F3F(~2, ~0x36, ~op)|RS1_G0, args, 0, sparclite }
-#define EFPOP1_3(name, op, args) { name, F3F(2, 0x36, op), F3F(~2, ~0x36, ~op),        args, 0, sparclite }
-#define EFPOP2_2(name, op, args) { name, F3F(2, 0x37, op), F3F(~2, ~0x37, ~op)|RD_G0,  args, 0, sparclite }
+#define EFPOP1_2(name, op, args) { name, F3F(2, 0x36, op), F3F(~2, ~0x36, ~op)|RS1_G0, args, 0, 0, sparclite }
+#define EFPOP1_3(name, op, args) { name, F3F(2, 0x36, op), F3F(~2, ~0x36, ~op),        args, 0, 0, sparclite }
+#define EFPOP2_2(name, op, args) { name, F3F(2, 0x37, op), F3F(~2, ~0x37, ~op)|RD_G0,  args, 0, 0, sparclite }
 
 EFPOP1_2 ("efitod",	0x0c8, "f,H"),
 EFPOP1_2 ("efitos",	0x0c4, "f,g"),
@@ -1664,8 +1701,8 @@ EFPOP2_2 ("efcmpes",	0x055, "e,f"),
 
 /* These are marked F_ALIAS, so that they won't conflict with sparclite insns
    present.  Otherwise, the F_ALIAS flag is ignored.  */
-{ "cpop1",	F3(2, 0x36, 0), F3(~2, ~0x36, ~1), "[1+2],d", F_ALIAS, v6notv9 },
-{ "cpop2",	F3(2, 0x37, 0), F3(~2, ~0x37, ~1), "[1+2],d", F_ALIAS, v6notv9 },
+{ "cpop1",	F3(2, 0x36, 0), F3(~2, ~0x36, ~1), "[1+2],d", F_ALIAS, 0, v6notv9 },
+{ "cpop2",	F3(2, 0x37, 0), F3(~2, ~0x37, ~1), "[1+2],d", F_ALIAS, 0, v6notv9 },
 
 /* sparclet specific insns */
 
@@ -1676,26 +1713,26 @@ COMMUTEOP ("smacd", 0x2f, sparclet),
 COMMUTEOP ("umuld", 0x09, sparclet),
 COMMUTEOP ("smuld", 0x0d, sparclet),
 
-{ "shuffle",	F3(2, 0x2d, 0), F3(~2, ~0x2d, ~0)|ASI(~0),	"1,2,d", 0, sparclet },
-{ "shuffle",	F3(2, 0x2d, 1), F3(~2, ~0x2d, ~1),		"1,i,d", 0, sparclet },
+{ "shuffle",	F3(2, 0x2d, 0), F3(~2, ~0x2d, ~0)|ASI(~0),	"1,2,d", 0, 0, sparclet },
+{ "shuffle",	F3(2, 0x2d, 1), F3(~2, ~0x2d, ~1),		"1,i,d", 0, 0, sparclet },
 
 /* The manual isn't completely accurate on these insns.  The `rs2' field is
    treated as being 6 bits to account for 6 bit immediates to cpush.  It is
    assumed that it is intended that bit 5 is 0 when rs2 contains a reg.  */
 #define BIT5 (1<<5)
-{ "crdcxt",	F3(2, 0x36, 0)|SLCPOP(4), F3(~2, ~0x36, ~0)|SLCPOP(~4)|BIT5|RS2(~0),	"U,d", 0, sparclet },
-{ "cwrcxt",	F3(2, 0x36, 0)|SLCPOP(3), F3(~2, ~0x36, ~0)|SLCPOP(~3)|BIT5|RS2(~0),	"1,u", 0, sparclet },
-{ "cpush",	F3(2, 0x36, 0)|SLCPOP(0), F3(~2, ~0x36, ~0)|SLCPOP(~0)|BIT5|RD(~0),	"1,2", 0, sparclet },
-{ "cpush",	F3(2, 0x36, 1)|SLCPOP(0), F3(~2, ~0x36, ~1)|SLCPOP(~0)|RD(~0),		"1,Y", 0, sparclet },
-{ "cpusha",	F3(2, 0x36, 0)|SLCPOP(1), F3(~2, ~0x36, ~0)|SLCPOP(~1)|BIT5|RD(~0),	"1,2", 0, sparclet },
-{ "cpusha",	F3(2, 0x36, 1)|SLCPOP(1), F3(~2, ~0x36, ~1)|SLCPOP(~1)|RD(~0),		"1,Y", 0, sparclet },
-{ "cpull",	F3(2, 0x36, 0)|SLCPOP(2), F3(~2, ~0x36, ~0)|SLCPOP(~2)|BIT5|RS1(~0)|RS2(~0), "d", 0, sparclet },
+{ "crdcxt",	F3(2, 0x36, 0)|SLCPOP(4), F3(~2, ~0x36, ~0)|SLCPOP(~4)|BIT5|RS2(~0),	"U,d", 0, 0, sparclet },
+{ "cwrcxt",	F3(2, 0x36, 0)|SLCPOP(3), F3(~2, ~0x36, ~0)|SLCPOP(~3)|BIT5|RS2(~0),	"1,u", 0, 0, sparclet },
+{ "cpush",	F3(2, 0x36, 0)|SLCPOP(0), F3(~2, ~0x36, ~0)|SLCPOP(~0)|BIT5|RD(~0),	"1,2", 0, 0, sparclet },
+{ "cpush",	F3(2, 0x36, 1)|SLCPOP(0), F3(~2, ~0x36, ~1)|SLCPOP(~0)|RD(~0),		"1,Y", 0, 0, sparclet },
+{ "cpusha",	F3(2, 0x36, 0)|SLCPOP(1), F3(~2, ~0x36, ~0)|SLCPOP(~1)|BIT5|RD(~0),	"1,2", 0, 0, sparclet },
+{ "cpusha",	F3(2, 0x36, 1)|SLCPOP(1), F3(~2, ~0x36, ~1)|SLCPOP(~1)|RD(~0),		"1,Y", 0, 0, sparclet },
+{ "cpull",	F3(2, 0x36, 0)|SLCPOP(2), F3(~2, ~0x36, ~0)|SLCPOP(~2)|BIT5|RS1(~0)|RS2(~0), "d", 0, 0, sparclet },
 #undef BIT5
 
 /* sparclet coprocessor branch insns */
 #define SLCBCC2(opcode, mask, lose) \
- { opcode, (mask), ANNUL|(lose), "l",    F_DELAYED|F_CONDBR, sparclet }, \
- { opcode, (mask)|ANNUL, (lose), ",a l", F_DELAYED|F_CONDBR, sparclet }
+ { opcode, (mask), ANNUL|(lose), "l",    F_DELAYED|F_CONDBR, 0, sparclet }, \
+ { opcode, (mask)|ANNUL, (lose), ",a l", F_DELAYED|F_CONDBR, 0, sparclet }
 #define SLCBCC(opcode, mask) \
   SLCBCC2(opcode, F2(0, 7)|COND(mask), F2(~0, ~7)|COND(~(mask)))
 
@@ -1721,209 +1758,238 @@ SLCBCC("cbnefr", 15),
 #undef SLCBCC2
 #undef SLCBCC
 
-{ "casa",	F3(3, 0x3c, 0), F3(~3, ~0x3c, ~0), "[1]A,2,d", 0, v9 },
-{ "casa",	F3(3, 0x3c, 1), F3(~3, ~0x3c, ~1), "[1]o,2,d", 0, v9 },
-{ "casxa",	F3(3, 0x3e, 0), F3(~3, ~0x3e, ~0), "[1]A,2,d", 0, v9 },
-{ "casxa",	F3(3, 0x3e, 1), F3(~3, ~0x3e, ~1), "[1]o,2,d", 0, v9 },
+{ "casa",	F3(3, 0x3c, 0), F3(~3, ~0x3c, ~0), "[1]A,2,d", 0, 0, v9 },
+{ "casa",	F3(3, 0x3c, 1), F3(~3, ~0x3c, ~1), "[1]o,2,d", 0, 0, v9 },
+{ "casxa",	F3(3, 0x3e, 0), F3(~3, ~0x3e, ~0), "[1]A,2,d", 0, 0, v9 },
+{ "casxa",	F3(3, 0x3e, 1), F3(~3, ~0x3e, ~1), "[1]o,2,d", 0, 0, v9 },
 
 /* v9 synthetic insns */
-{ "iprefetch",	F2(0, 1)|(2<<20)|BPRED, F2(~0, ~1)|(1<<20)|ANNUL|COND(~0), "G", 0, v9 }, /* bn,a,pt %xcc,label */
-{ "signx",	F3(2, 0x27, 0), F3(~2, ~0x27, ~0)|(1<<12)|ASI(~0)|RS2_G0, "1,d", F_ALIAS, v9 }, /* sra rs1,%g0,rd */
-{ "signx",	F3(2, 0x27, 0), F3(~2, ~0x27, ~0)|(1<<12)|ASI(~0)|RS2_G0, "r", F_ALIAS, v9 }, /* sra rd,%g0,rd */
-{ "clruw",	F3(2, 0x26, 0), F3(~2, ~0x26, ~0)|(1<<12)|ASI(~0)|RS2_G0, "1,d", F_ALIAS, v9 }, /* srl rs1,%g0,rd */
-{ "clruw",	F3(2, 0x26, 0), F3(~2, ~0x26, ~0)|(1<<12)|ASI(~0)|RS2_G0, "r", F_ALIAS, v9 }, /* srl rd,%g0,rd */
-{ "cas",	F3(3, 0x3c, 0)|ASI(0x80), F3(~3, ~0x3c, ~0)|ASI(~0x80), "[1],2,d", F_ALIAS, v9 }, /* casa [rs1]ASI_P,rs2,rd */
-{ "casl",	F3(3, 0x3c, 0)|ASI(0x88), F3(~3, ~0x3c, ~0)|ASI(~0x88), "[1],2,d", F_ALIAS, v9 }, /* casa [rs1]ASI_P_L,rs2,rd */
-{ "casx",	F3(3, 0x3e, 0)|ASI(0x80), F3(~3, ~0x3e, ~0)|ASI(~0x80), "[1],2,d", F_ALIAS, v9 }, /* casxa [rs1]ASI_P,rs2,rd */
-{ "casxl",	F3(3, 0x3e, 0)|ASI(0x88), F3(~3, ~0x3e, ~0)|ASI(~0x88), "[1],2,d", F_ALIAS, v9 }, /* casxa [rs1]ASI_P_L,rs2,rd */
+{ "iprefetch",	F2(0, 1)|(2<<20)|BPRED, F2(~0, ~1)|(1<<20)|ANNUL|COND(~0), "G", 0, 0, v9 }, /* bn,a,pt %xcc,label */
+{ "signx",	F3(2, 0x27, 0), F3(~2, ~0x27, ~0)|(1<<12)|ASI(~0)|RS2_G0, "1,d", F_ALIAS, 0, v9 }, /* sra rs1,%g0,rd */
+{ "signx",	F3(2, 0x27, 0), F3(~2, ~0x27, ~0)|(1<<12)|ASI(~0)|RS2_G0, "r", F_ALIAS, 0, v9 }, /* sra rd,%g0,rd */
+{ "clruw",	F3(2, 0x26, 0), F3(~2, ~0x26, ~0)|(1<<12)|ASI(~0)|RS2_G0, "1,d", F_ALIAS, 0, v9 }, /* srl rs1,%g0,rd */
+{ "clruw",	F3(2, 0x26, 0), F3(~2, ~0x26, ~0)|(1<<12)|ASI(~0)|RS2_G0, "r", F_ALIAS, 0, v9 }, /* srl rd,%g0,rd */
+{ "cas",	F3(3, 0x3c, 0)|ASI(0x80), F3(~3, ~0x3c, ~0)|ASI(~0x80), "[1],2,d", F_ALIAS, 0, v9 }, /* casa [rs1]ASI_P,rs2,rd */
+{ "casl",	F3(3, 0x3c, 0)|ASI(0x88), F3(~3, ~0x3c, ~0)|ASI(~0x88), "[1],2,d", F_ALIAS, 0, v9 }, /* casa [rs1]ASI_P_L,rs2,rd */
+{ "casx",	F3(3, 0x3e, 0)|ASI(0x80), F3(~3, ~0x3e, ~0)|ASI(~0x80), "[1],2,d", F_ALIAS, 0, v9 }, /* casxa [rs1]ASI_P,rs2,rd */
+{ "casxl",	F3(3, 0x3e, 0)|ASI(0x88), F3(~3, ~0x3e, ~0)|ASI(~0x88), "[1],2,d", F_ALIAS, 0, v9 }, /* casxa [rs1]ASI_P_L,rs2,rd */
 
 /* Ultrasparc extensions */
-{ "shutdown",	F3F(2, 0x36, 0x080), F3F(~2, ~0x36, ~0x080)|RD_G0|RS1_G0|RS2_G0, "", F_VIS, v9a },
+{ "shutdown",	F3F(2, 0x36, 0x080), F3F(~2, ~0x36, ~0x080)|RD_G0|RS1_G0|RS2_G0, "", 0, HWCAP_VIS, v9a },
 
 /* FIXME: Do we want to mark these as F_FLOAT, or something similar?  */
-{ "fpadd16",	F3F(2, 0x36, 0x050), F3F(~2, ~0x36, ~0x050), "v,B,H", F_VIS, v9a },
-{ "fpadd16s",	F3F(2, 0x36, 0x051), F3F(~2, ~0x36, ~0x051), "e,f,g", F_VIS, v9a },
-{ "fpadd32",	F3F(2, 0x36, 0x052), F3F(~2, ~0x36, ~0x052), "v,B,H", F_VIS, v9a },
-{ "fpadd32s",	F3F(2, 0x36, 0x053), F3F(~2, ~0x36, ~0x053), "e,f,g", F_VIS, v9a },
-{ "fpsub16",	F3F(2, 0x36, 0x054), F3F(~2, ~0x36, ~0x054), "v,B,H", F_VIS, v9a },
-{ "fpsub16s",	F3F(2, 0x36, 0x055), F3F(~2, ~0x36, ~0x055), "e,f,g", F_VIS, v9a },
-{ "fpsub32",	F3F(2, 0x36, 0x056), F3F(~2, ~0x36, ~0x056), "v,B,H", F_VIS, v9a },
-{ "fpsub32s",	F3F(2, 0x36, 0x057), F3F(~2, ~0x36, ~0x057), "e,f,g", F_VIS, v9a },
-
-{ "fpack32",	F3F(2, 0x36, 0x03a), F3F(~2, ~0x36, ~0x03a), "v,B,H", F_VIS, v9a },
-{ "fpack16",	F3F(2, 0x36, 0x03b), F3F(~2, ~0x36, ~0x03b)|RS1_G0, "B,g", F_VIS, v9a },
-{ "fpackfix",	F3F(2, 0x36, 0x03d), F3F(~2, ~0x36, ~0x03d)|RS1_G0, "B,g", F_VIS, v9a },
-{ "fexpand",	F3F(2, 0x36, 0x04d), F3F(~2, ~0x36, ~0x04d)|RS1_G0, "f,H", F_VIS, v9a },
-{ "fpmerge",	F3F(2, 0x36, 0x04b), F3F(~2, ~0x36, ~0x04b), "e,f,H", F_VIS, v9a },
+{ "fpadd16",	F3F(2, 0x36, 0x050), F3F(~2, ~0x36, ~0x050), "v,B,H", 0, HWCAP_VIS, v9a },
+{ "fpadd16s",	F3F(2, 0x36, 0x051), F3F(~2, ~0x36, ~0x051), "e,f,g", 0, HWCAP_VIS, v9a },
+{ "fpadd32",	F3F(2, 0x36, 0x052), F3F(~2, ~0x36, ~0x052), "v,B,H", 0, HWCAP_VIS, v9a },
+{ "fpadd32s",	F3F(2, 0x36, 0x053), F3F(~2, ~0x36, ~0x053), "e,f,g", 0, HWCAP_VIS, v9a },
+{ "fpsub16",	F3F(2, 0x36, 0x054), F3F(~2, ~0x36, ~0x054), "v,B,H", 0, HWCAP_VIS, v9a },
+{ "fpsub16s",	F3F(2, 0x36, 0x055), F3F(~2, ~0x36, ~0x055), "e,f,g", 0, HWCAP_VIS, v9a },
+{ "fpsub32",	F3F(2, 0x36, 0x056), F3F(~2, ~0x36, ~0x056), "v,B,H", 0, HWCAP_VIS, v9a },
+{ "fpsub32s",	F3F(2, 0x36, 0x057), F3F(~2, ~0x36, ~0x057), "e,f,g", 0, HWCAP_VIS, v9a },
+
+{ "fpack32",	F3F(2, 0x36, 0x03a), F3F(~2, ~0x36, ~0x03a), "v,B,H", 0, HWCAP_VIS, v9a },
+{ "fpack16",	F3F(2, 0x36, 0x03b), F3F(~2, ~0x36, ~0x03b)|RS1_G0, "B,g", 0, HWCAP_VIS, v9a },
+{ "fpackfix",	F3F(2, 0x36, 0x03d), F3F(~2, ~0x36, ~0x03d)|RS1_G0, "B,g", 0, HWCAP_VIS, v9a },
+{ "fexpand",	F3F(2, 0x36, 0x04d), F3F(~2, ~0x36, ~0x04d)|RS1_G0, "f,H", 0, HWCAP_VIS, v9a },
+{ "fpmerge",	F3F(2, 0x36, 0x04b), F3F(~2, ~0x36, ~0x04b), "e,f,H", 0, HWCAP_VIS, v9a },
 
 /* Note that the mixing of 32/64 bit regs is intentional.  */
-{ "fmul8x16",		F3F(2, 0x36, 0x031), F3F(~2, ~0x36, ~0x031), "e,B,H", F_VIS, v9a },
-{ "fmul8x16au",		F3F(2, 0x36, 0x033), F3F(~2, ~0x36, ~0x033), "e,f,H", F_VIS, v9a },
-{ "fmul8x16al",		F3F(2, 0x36, 0x035), F3F(~2, ~0x36, ~0x035), "e,f,H", F_VIS, v9a },
-{ "fmul8sux16",		F3F(2, 0x36, 0x036), F3F(~2, ~0x36, ~0x036), "v,B,H", F_VIS, v9a },
-{ "fmul8ulx16",		F3F(2, 0x36, 0x037), F3F(~2, ~0x36, ~0x037), "v,B,H", F_VIS, v9a },
-{ "fmuld8sux16",	F3F(2, 0x36, 0x038), F3F(~2, ~0x36, ~0x038), "e,f,H", F_VIS, v9a },
-{ "fmuld8ulx16",	F3F(2, 0x36, 0x039), F3F(~2, ~0x36, ~0x039), "e,f,H", F_VIS, v9a },
-
-{ "alignaddr",	F3F(2, 0x36, 0x018), F3F(~2, ~0x36, ~0x018), "1,2,d", F_VIS, v9a },
-{ "alignaddrl",	F3F(2, 0x36, 0x01a), F3F(~2, ~0x36, ~0x01a), "1,2,d", F_VIS, v9a },
-{ "faligndata",	F3F(2, 0x36, 0x048), F3F(~2, ~0x36, ~0x048), "v,B,H", F_VIS, v9a },
-
-{ "fzero",	F3F(2, 0x36, 0x060), F3F(~2, ~0x36, ~0x060), "H", F_VIS, v9a },
-{ "fzeros",	F3F(2, 0x36, 0x061), F3F(~2, ~0x36, ~0x061), "g", F_VIS, v9a },
-{ "fone",	F3F(2, 0x36, 0x07e), F3F(~2, ~0x36, ~0x07e), "H", F_VIS, v9a },
-{ "fones",	F3F(2, 0x36, 0x07f), F3F(~2, ~0x36, ~0x07f), "g", F_VIS, v9a },
-{ "fsrc1",	F3F(2, 0x36, 0x074), F3F(~2, ~0x36, ~0x074), "v,H", F_VIS, v9a },
-{ "fsrc1s",	F3F(2, 0x36, 0x075), F3F(~2, ~0x36, ~0x075), "e,g", F_VIS, v9a },
-{ "fsrc2",	F3F(2, 0x36, 0x078), F3F(~2, ~0x36, ~0x078), "B,H", F_VIS, v9a },
-{ "fsrc2s",	F3F(2, 0x36, 0x079), F3F(~2, ~0x36, ~0x079), "f,g", F_VIS, v9a },
-{ "fnot1",	F3F(2, 0x36, 0x06a), F3F(~2, ~0x36, ~0x06a), "v,H", F_VIS, v9a },
-{ "fnot1s",	F3F(2, 0x36, 0x06b), F3F(~2, ~0x36, ~0x06b), "e,g", F_VIS, v9a },
-{ "fnot2",	F3F(2, 0x36, 0x066), F3F(~2, ~0x36, ~0x066), "B,H", F_VIS, v9a },
-{ "fnot2s",	F3F(2, 0x36, 0x067), F3F(~2, ~0x36, ~0x067), "f,g", F_VIS, v9a },
-{ "for",	F3F(2, 0x36, 0x07c), F3F(~2, ~0x36, ~0x07c), "v,B,H", F_VIS, v9a },
-{ "fors",	F3F(2, 0x36, 0x07d), F3F(~2, ~0x36, ~0x07d), "e,f,g", F_VIS, v9a },
-{ "fnor",	F3F(2, 0x36, 0x062), F3F(~2, ~0x36, ~0x062), "v,B,H", F_VIS, v9a },
-{ "fnors",	F3F(2, 0x36, 0x063), F3F(~2, ~0x36, ~0x063), "e,f,g", F_VIS, v9a },
-{ "fand",	F3F(2, 0x36, 0x070), F3F(~2, ~0x36, ~0x070), "v,B,H", F_VIS, v9a },
-{ "fands",	F3F(2, 0x36, 0x071), F3F(~2, ~0x36, ~0x071), "e,f,g", F_VIS, v9a },
-{ "fnand",	F3F(2, 0x36, 0x06e), F3F(~2, ~0x36, ~0x06e), "v,B,H", F_VIS, v9a },
-{ "fnands",	F3F(2, 0x36, 0x06f), F3F(~2, ~0x36, ~0x06f), "e,f,g", F_VIS, v9a },
-{ "fxor",	F3F(2, 0x36, 0x06c), F3F(~2, ~0x36, ~0x06c), "v,B,H", F_VIS, v9a },
-{ "fxors",	F3F(2, 0x36, 0x06d), F3F(~2, ~0x36, ~0x06d), "e,f,g", F_VIS, v9a },
-{ "fxnor",	F3F(2, 0x36, 0x072), F3F(~2, ~0x36, ~0x072), "v,B,H", F_VIS, v9a },
-{ "fxnors",	F3F(2, 0x36, 0x073), F3F(~2, ~0x36, ~0x073), "e,f,g", F_VIS, v9a },
-{ "fornot1",	F3F(2, 0x36, 0x07a), F3F(~2, ~0x36, ~0x07a), "v,B,H", F_VIS, v9a },
-{ "fornot1s",	F3F(2, 0x36, 0x07b), F3F(~2, ~0x36, ~0x07b), "e,f,g", F_VIS, v9a },
-{ "fornot2",	F3F(2, 0x36, 0x076), F3F(~2, ~0x36, ~0x076), "v,B,H", F_VIS, v9a },
-{ "fornot2s",	F3F(2, 0x36, 0x077), F3F(~2, ~0x36, ~0x077), "e,f,g", F_VIS, v9a },
-{ "fandnot1",	F3F(2, 0x36, 0x068), F3F(~2, ~0x36, ~0x068), "v,B,H", F_VIS, v9a },
-{ "fandnot1s",	F3F(2, 0x36, 0x069), F3F(~2, ~0x36, ~0x069), "e,f,g", F_VIS, v9a },
-{ "fandnot2",	F3F(2, 0x36, 0x064), F3F(~2, ~0x36, ~0x064), "v,B,H", F_VIS, v9a },
-{ "fandnot2s",	F3F(2, 0x36, 0x065), F3F(~2, ~0x36, ~0x065), "e,f,g", F_VIS, v9a },
-
-{ "fcmpgt16",	F3F(2, 0x36, 0x028), F3F(~2, ~0x36, ~0x028), "v,B,d", F_VIS, v9a },
-{ "fcmpgt32",	F3F(2, 0x36, 0x02c), F3F(~2, ~0x36, ~0x02c), "v,B,d", F_VIS, v9a },
-{ "fcmple16",	F3F(2, 0x36, 0x020), F3F(~2, ~0x36, ~0x020), "v,B,d", F_VIS, v9a },
-{ "fcmple32",	F3F(2, 0x36, 0x024), F3F(~2, ~0x36, ~0x024), "v,B,d", F_VIS, v9a },
-{ "fcmpne16",	F3F(2, 0x36, 0x022), F3F(~2, ~0x36, ~0x022), "v,B,d", F_VIS, v9a },
-{ "fcmpne32",	F3F(2, 0x36, 0x026), F3F(~2, ~0x36, ~0x026), "v,B,d", F_VIS, v9a },
-{ "fcmpeq16",	F3F(2, 0x36, 0x02a), F3F(~2, ~0x36, ~0x02a), "v,B,d", F_VIS, v9a },
-{ "fcmpeq32",	F3F(2, 0x36, 0x02e), F3F(~2, ~0x36, ~0x02e), "v,B,d", F_VIS, v9a },
-
-{ "edge8",	F3F(2, 0x36, 0x000), F3F(~2, ~0x36, ~0x000), "1,2,d", F_VIS, v9a },
-{ "edge8l",	F3F(2, 0x36, 0x002), F3F(~2, ~0x36, ~0x002), "1,2,d", F_VIS, v9a },
-{ "edge16",	F3F(2, 0x36, 0x004), F3F(~2, ~0x36, ~0x004), "1,2,d", F_VIS, v9a },
-{ "edge16l",	F3F(2, 0x36, 0x006), F3F(~2, ~0x36, ~0x006), "1,2,d", F_VIS, v9a },
-{ "edge32",	F3F(2, 0x36, 0x008), F3F(~2, ~0x36, ~0x008), "1,2,d", F_VIS, v9a },
-{ "edge32l",	F3F(2, 0x36, 0x00a), F3F(~2, ~0x36, ~0x00a), "1,2,d", F_VIS, v9a },
-
-{ "pdist",	F3F(2, 0x36, 0x03e), F3F(~2, ~0x36, ~0x03e), "v,B,H", F_VIS, v9a },
-
-{ "array8",	F3F(2, 0x36, 0x010), F3F(~2, ~0x36, ~0x010), "1,2,d", F_VIS, v9a },
-{ "array16",	F3F(2, 0x36, 0x012), F3F(~2, ~0x36, ~0x012), "1,2,d", F_VIS, v9a },
-{ "array32",	F3F(2, 0x36, 0x014), F3F(~2, ~0x36, ~0x014), "1,2,d", F_VIS, v9a },
+{ "fmul8x16",		F3F(2, 0x36, 0x031), F3F(~2, ~0x36, ~0x031), "e,B,H", 0, HWCAP_VIS, v9a },
+{ "fmul8x16au",		F3F(2, 0x36, 0x033), F3F(~2, ~0x36, ~0x033), "e,f,H", 0, HWCAP_VIS, v9a },
+{ "fmul8x16al",		F3F(2, 0x36, 0x035), F3F(~2, ~0x36, ~0x035), "e,f,H", 0, HWCAP_VIS, v9a },
+{ "fmul8sux16",		F3F(2, 0x36, 0x036), F3F(~2, ~0x36, ~0x036), "v,B,H", 0, HWCAP_VIS, v9a },
+{ "fmul8ulx16",		F3F(2, 0x36, 0x037), F3F(~2, ~0x36, ~0x037), "v,B,H", 0, HWCAP_VIS, v9a },
+{ "fmuld8sux16",	F3F(2, 0x36, 0x038), F3F(~2, ~0x36, ~0x038), "e,f,H", 0, HWCAP_VIS, v9a },
+{ "fmuld8ulx16",	F3F(2, 0x36, 0x039), F3F(~2, ~0x36, ~0x039), "e,f,H", 0, HWCAP_VIS, v9a },
+
+{ "alignaddr",	F3F(2, 0x36, 0x018), F3F(~2, ~0x36, ~0x018), "1,2,d", 0, HWCAP_VIS, v9a },
+{ "alignaddrl",	F3F(2, 0x36, 0x01a), F3F(~2, ~0x36, ~0x01a), "1,2,d", 0, HWCAP_VIS, v9a },
+{ "faligndata",	F3F(2, 0x36, 0x048), F3F(~2, ~0x36, ~0x048), "v,B,H", 0, HWCAP_VIS, v9a },
+
+{ "fzero",	F3F(2, 0x36, 0x060), F3F(~2, ~0x36, ~0x060), "H", 0, HWCAP_VIS, v9a },
+{ "fzeros",	F3F(2, 0x36, 0x061), F3F(~2, ~0x36, ~0x061), "g", 0, HWCAP_VIS, v9a },
+{ "fone",	F3F(2, 0x36, 0x07e), F3F(~2, ~0x36, ~0x07e), "H", 0, HWCAP_VIS, v9a },
+{ "fones",	F3F(2, 0x36, 0x07f), F3F(~2, ~0x36, ~0x07f), "g", 0, HWCAP_VIS, v9a },
+{ "fsrc1",	F3F(2, 0x36, 0x074), F3F(~2, ~0x36, ~0x074), "v,H", 0, HWCAP_VIS, v9a },
+{ "fsrc1s",	F3F(2, 0x36, 0x075), F3F(~2, ~0x36, ~0x075), "e,g", 0, HWCAP_VIS, v9a },
+{ "fsrc2",	F3F(2, 0x36, 0x078), F3F(~2, ~0x36, ~0x078), "B,H", 0, HWCAP_VIS, v9a },
+{ "fsrc2s",	F3F(2, 0x36, 0x079), F3F(~2, ~0x36, ~0x079), "f,g", 0, HWCAP_VIS, v9a },
+{ "fnot1",	F3F(2, 0x36, 0x06a), F3F(~2, ~0x36, ~0x06a), "v,H", 0, HWCAP_VIS, v9a },
+{ "fnot1s",	F3F(2, 0x36, 0x06b), F3F(~2, ~0x36, ~0x06b), "e,g", 0, HWCAP_VIS, v9a },
+{ "fnot2",	F3F(2, 0x36, 0x066), F3F(~2, ~0x36, ~0x066), "B,H", 0, HWCAP_VIS, v9a },
+{ "fnot2s",	F3F(2, 0x36, 0x067), F3F(~2, ~0x36, ~0x067), "f,g", 0, HWCAP_VIS, v9a },
+{ "for",	F3F(2, 0x36, 0x07c), F3F(~2, ~0x36, ~0x07c), "v,B,H", 0, HWCAP_VIS, v9a },
+{ "fors",	F3F(2, 0x36, 0x07d), F3F(~2, ~0x36, ~0x07d), "e,f,g", 0, HWCAP_VIS, v9a },
+{ "fnor",	F3F(2, 0x36, 0x062), F3F(~2, ~0x36, ~0x062), "v,B,H", 0, HWCAP_VIS, v9a },
+{ "fnors",	F3F(2, 0x36, 0x063), F3F(~2, ~0x36, ~0x063), "e,f,g", 0, HWCAP_VIS, v9a },
+{ "fand",	F3F(2, 0x36, 0x070), F3F(~2, ~0x36, ~0x070), "v,B,H", 0, HWCAP_VIS, v9a },
+{ "fands",	F3F(2, 0x36, 0x071), F3F(~2, ~0x36, ~0x071), "e,f,g", 0, HWCAP_VIS, v9a },
+{ "fnand",	F3F(2, 0x36, 0x06e), F3F(~2, ~0x36, ~0x06e), "v,B,H", 0, HWCAP_VIS, v9a },
+{ "fnands",	F3F(2, 0x36, 0x06f), F3F(~2, ~0x36, ~0x06f), "e,f,g", 0, HWCAP_VIS, v9a },
+{ "fxor",	F3F(2, 0x36, 0x06c), F3F(~2, ~0x36, ~0x06c), "v,B,H", 0, HWCAP_VIS, v9a },
+{ "fxors",	F3F(2, 0x36, 0x06d), F3F(~2, ~0x36, ~0x06d), "e,f,g", 0, HWCAP_VIS, v9a },
+{ "fxnor",	F3F(2, 0x36, 0x072), F3F(~2, ~0x36, ~0x072), "v,B,H", 0, HWCAP_VIS, v9a },
+{ "fxnors",	F3F(2, 0x36, 0x073), F3F(~2, ~0x36, ~0x073), "e,f,g", 0, HWCAP_VIS, v9a },
+{ "fornot1",	F3F(2, 0x36, 0x07a), F3F(~2, ~0x36, ~0x07a), "v,B,H", 0, HWCAP_VIS, v9a },
+{ "fornot1s",	F3F(2, 0x36, 0x07b), F3F(~2, ~0x36, ~0x07b), "e,f,g", 0, HWCAP_VIS, v9a },
+{ "fornot2",	F3F(2, 0x36, 0x076), F3F(~2, ~0x36, ~0x076), "v,B,H", 0, HWCAP_VIS, v9a },
+{ "fornot2s",	F3F(2, 0x36, 0x077), F3F(~2, ~0x36, ~0x077), "e,f,g", 0, HWCAP_VIS, v9a },
+{ "fandnot1",	F3F(2, 0x36, 0x068), F3F(~2, ~0x36, ~0x068), "v,B,H", 0, HWCAP_VIS, v9a },
+{ "fandnot1s",	F3F(2, 0x36, 0x069), F3F(~2, ~0x36, ~0x069), "e,f,g", 0, HWCAP_VIS, v9a },
+{ "fandnot2",	F3F(2, 0x36, 0x064), F3F(~2, ~0x36, ~0x064), "v,B,H", 0, HWCAP_VIS, v9a },
+{ "fandnot2s",	F3F(2, 0x36, 0x065), F3F(~2, ~0x36, ~0x065), "e,f,g", 0, HWCAP_VIS, v9a },
+
+{ "fcmpgt16",	F3F(2, 0x36, 0x028), F3F(~2, ~0x36, ~0x028), "v,B,d", 0, HWCAP_VIS, v9a },
+{ "fcmpgt32",	F3F(2, 0x36, 0x02c), F3F(~2, ~0x36, ~0x02c), "v,B,d", 0, HWCAP_VIS, v9a },
+{ "fcmple16",	F3F(2, 0x36, 0x020), F3F(~2, ~0x36, ~0x020), "v,B,d", 0, HWCAP_VIS, v9a },
+{ "fcmple32",	F3F(2, 0x36, 0x024), F3F(~2, ~0x36, ~0x024), "v,B,d", 0, HWCAP_VIS, v9a },
+{ "fcmpne16",	F3F(2, 0x36, 0x022), F3F(~2, ~0x36, ~0x022), "v,B,d", 0, HWCAP_VIS, v9a },
+{ "fcmpne32",	F3F(2, 0x36, 0x026), F3F(~2, ~0x36, ~0x026), "v,B,d", 0, HWCAP_VIS, v9a },
+{ "fcmpeq16",	F3F(2, 0x36, 0x02a), F3F(~2, ~0x36, ~0x02a), "v,B,d", 0, HWCAP_VIS, v9a },
+{ "fcmpeq32",	F3F(2, 0x36, 0x02e), F3F(~2, ~0x36, ~0x02e), "v,B,d", 0, HWCAP_VIS, v9a },
+
+{ "edge8",	F3F(2, 0x36, 0x000), F3F(~2, ~0x36, ~0x000), "1,2,d", 0, HWCAP_VIS, v9a },
+{ "edge8l",	F3F(2, 0x36, 0x002), F3F(~2, ~0x36, ~0x002), "1,2,d", 0, HWCAP_VIS, v9a },
+{ "edge16",	F3F(2, 0x36, 0x004), F3F(~2, ~0x36, ~0x004), "1,2,d", 0, HWCAP_VIS, v9a },
+{ "edge16l",	F3F(2, 0x36, 0x006), F3F(~2, ~0x36, ~0x006), "1,2,d", 0, HWCAP_VIS, v9a },
+{ "edge32",	F3F(2, 0x36, 0x008), F3F(~2, ~0x36, ~0x008), "1,2,d", 0, HWCAP_VIS, v9a },
+{ "edge32l",	F3F(2, 0x36, 0x00a), F3F(~2, ~0x36, ~0x00a), "1,2,d", 0, HWCAP_VIS, v9a },
+
+{ "pdist",	F3F(2, 0x36, 0x03e), F3F(~2, ~0x36, ~0x03e), "v,B,H", 0, HWCAP_VIS, v9a },
+
+{ "array8",	F3F(2, 0x36, 0x010), F3F(~2, ~0x36, ~0x010), "1,2,d", 0, HWCAP_VIS, v9a },
+{ "array16",	F3F(2, 0x36, 0x012), F3F(~2, ~0x36, ~0x012), "1,2,d", 0, HWCAP_VIS, v9a },
+{ "array32",	F3F(2, 0x36, 0x014), F3F(~2, ~0x36, ~0x014), "1,2,d", 0, HWCAP_VIS, v9a },
 
 /* Cheetah instructions */
-{ "edge8n",    F3F(2, 0x36, 0x001), F3F(~2, ~0x36, ~0x001), "1,2,d", F_VIS2, v9b },
-{ "edge8ln",   F3F(2, 0x36, 0x003), F3F(~2, ~0x36, ~0x003), "1,2,d", F_VIS2, v9b },
-{ "edge16n",   F3F(2, 0x36, 0x005), F3F(~2, ~0x36, ~0x005), "1,2,d", F_VIS2, v9b },
-{ "edge16ln",  F3F(2, 0x36, 0x007), F3F(~2, ~0x36, ~0x007), "1,2,d", F_VIS2, v9b },
-{ "edge32n",   F3F(2, 0x36, 0x009), F3F(~2, ~0x36, ~0x009), "1,2,d", F_VIS2, v9b },
-{ "edge32ln",  F3F(2, 0x36, 0x00b), F3F(~2, ~0x36, ~0x00b), "1,2,d", F_VIS2, v9b },
-
-{ "bmask",     F3F(2, 0x36, 0x019), F3F(~2, ~0x36, ~0x019), "1,2,d", F_VIS2, v9b },
-{ "bshuffle",  F3F(2, 0x36, 0x04c), F3F(~2, ~0x36, ~0x04c), "v,B,H", F_VIS2, v9b },
-
-{ "siam",      F3F(2, 0x36, 0x081), F3F(~2, ~0x36, ~0x081)|RD_G0|RS1_G0|RS2(~7), "3", F_VIS2, v9b },
-
-{ "commit",	F3(2, 0x3e, 0)|RD(30), F3(~2, ~0x3e, ~0)|RD(~30)|RS1_G0|SIMM13(~0), "", F_TRANS, v9b },
-{ "fnadds",	F3F(2, 0x34, 0x051), F3F(~2, ~0x34, ~0x051), "e,f,g", F_FLOAT|F_HPC, v9b },
-{ "fnaddd",	F3F(2, 0x34, 0x052), F3F(~2, ~0x34, ~0x052), "v,B,H", F_FLOAT|F_HPC, v9b },
-{ "fnmuls",	F3F(2, 0x34, 0x059), F3F(~2, ~0x34, ~0x059), "e,f,g", F_FLOAT|F_HPC, v9b },
-{ "fnmuld",	F3F(2, 0x34, 0x05a), F3F(~2, ~0x34, ~0x05a), "v,B,H", F_FLOAT|F_HPC, v9b },
-{ "fhadds",	F3F(2, 0x34, 0x061), F3F(~2, ~0x34, ~0x061), "e,f,g", F_FLOAT|F_HPC, v9b },
-{ "fhaddd",	F3F(2, 0x34, 0x062), F3F(~2, ~0x34, ~0x062), "v,B,H", F_FLOAT|F_HPC, v9b },
-{ "fhsubs",	F3F(2, 0x34, 0x065), F3F(~2, ~0x34, ~0x065), "e,f,g", F_FLOAT|F_HPC, v9b },
-{ "fhsubd",	F3F(2, 0x34, 0x066), F3F(~2, ~0x34, ~0x066), "v,B,H", F_FLOAT|F_HPC, v9b },
-{ "fnhadds",	F3F(2, 0x34, 0x071), F3F(~2, ~0x34, ~0x071), "e,f,g", F_FLOAT|F_HPC, v9b },
-{ "fnhaddd",	F3F(2, 0x34, 0x072), F3F(~2, ~0x34, ~0x072), "v,B,H", F_FLOAT|F_HPC, v9b },
-{ "fnsmuld",	F3F(2, 0x34, 0x079), F3F(~2, ~0x34, ~0x079), "e,f,H", F_FLOAT|F_HPC, v9b },
-{ "fpmaddx",	F3(2, 0x37, 0)|OPF_LOW4(0), F3(~2, ~0x37, 0)|OPF_LOW4(~0), "v,B,5,H", F_FLOAT|F_IMA, v9b },
-{ "fmadds",	F3(2, 0x37, 0)|OPF_LOW4(1), F3(~2, ~0x37, 0)|OPF_LOW4(~1), "e,f,4,g", F_FLOAT|F_FMAF, v9b },
-{ "fmaddd",	F3(2, 0x37, 0)|OPF_LOW4(2), F3(~2, ~0x37, 0)|OPF_LOW4(~2), "v,B,5,H", F_FLOAT|F_FMAF, v9b },
-{ "fpmaddxhi",	F3(2, 0x37, 0)|OPF_LOW4(4), F3(~2, ~0x37, 0)|OPF_LOW4(~4), "v,B,5,H", F_FLOAT|F_IMA, v9b },
-{ "fmsubs",	F3(2, 0x37, 0)|OPF_LOW4(5), F3(~2, ~0x37, 0)|OPF_LOW4(~5), "e,f,4,g", F_FLOAT|F_FMAF, v9b },
-{ "fmsubd",	F3(2, 0x37, 0)|OPF_LOW4(6), F3(~2, ~0x37, 0)|OPF_LOW4(~6), "v,B,5,H", F_FLOAT|F_FMAF, v9b },
-{ "fnmsubs",	F3(2, 0x37, 0)|OPF_LOW4(9), F3(~2, ~0x37, 0)|OPF_LOW4(~9), "e,f,4,g", F_FLOAT|F_FMAF, v9b },
-{ "fnmsubd",	F3(2, 0x37, 0)|OPF_LOW4(10), F3(~2, ~0x37, 0)|OPF_LOW4(~10), "v,B,5,H", F_FLOAT|F_FMAF, v9b },
-{ "fnmadds",	F3(2, 0x37, 0)|OPF_LOW4(13), F3(~2, ~0x37, 0)|OPF_LOW4(~13), "e,f,4,g", F_FLOAT|F_FMAF, v9b },
-{ "fnmaddd",	F3(2, 0x37, 0)|OPF_LOW4(14), F3(~2, ~0x37, 0)|OPF_LOW4(~14), "v,B,5,H", F_FLOAT|F_FMAF, v9b },
-{ "fumadds",	F3(2, 0x3f, 0)|OPF_LOW4(1), F3(~2, ~0x3f, 0)|OPF_LOW4(~1), "e,f,4,g", F_FLOAT|F_FJFMAU, v9b },
-{ "fumaddd",	F3(2, 0x3f, 0)|OPF_LOW4(2), F3(~2, ~0x3f, 0)|OPF_LOW4(~2), "v,B,5,H", F_FLOAT|F_FJFMAU, v9b },
-{ "fumsubs",	F3(2, 0x3f, 0)|OPF_LOW4(5), F3(~2, ~0x3f, 0)|OPF_LOW4(~5), "e,f,4,g", F_FLOAT|F_FJFMAU, v9b },
-{ "fumsubd",	F3(2, 0x3f, 0)|OPF_LOW4(6), F3(~2, ~0x3f, 0)|OPF_LOW4(~6), "v,B,5,H", F_FLOAT|F_FJFMAU, v9b },
-{ "fnumsubs",	F3(2, 0x3f, 0)|OPF_LOW4(9), F3(~2, ~0x3f, 0)|OPF_LOW4(~9), "e,f,4,g", F_FLOAT|F_FJFMAU, v9b },
-{ "fnumsubd",	F3(2, 0x3f, 0)|OPF_LOW4(10), F3(~2, ~0x3f, 0)|OPF_LOW4(~10), "v,B,5,H", F_FLOAT|F_FJFMAU, v9b },
-{ "fnumadds",	F3(2, 0x3f, 0)|OPF_LOW4(13), F3(~2, ~0x3f, 0)|OPF_LOW4(~13), "e,f,4,g", F_FLOAT|F_FJFMAU, v9b },
-{ "fnumaddd",	F3(2, 0x3f, 0)|OPF_LOW4(14), F3(~2, ~0x3f, 0)|OPF_LOW4(~14), "v,B,5,H", F_FLOAT|F_FJFMAU, v9b },
-{ "addxc",	F3F(2, 0x36, 0x011), F3F(~2, ~0x36, ~0x011), "1,2,d", F_VIS3, v9b },
-{ "addxccc",	F3F(2, 0x36, 0x013), F3F(~2, ~0x36, ~0x013), "1,2,d", F_VIS3, v9b },
-{ "random",	F3F(2, 0x36, 0x015), F3F(~2, ~0x36, ~0x015), "H", F_FLOAT|F_RANDOM, v9b },
-{ "umulxhi",	F3F(2, 0x36, 0x016), F3F(~2, ~0x36, ~0x016), "1,2,d", F_VIS3, v9b },
-{ "lzd",	F3F(2, 0x36, 0x017), F3F(~2, ~0x36, ~0x017), "2,d", F_VIS3, v9b },
-{ "cmask8",	F3F(2, 0x36, 0x01b), F3F(~2, ~0x36, ~0x01b), "2", F_VIS3, v9b },
-{ "cmask16",	F3F(2, 0x36, 0x01d), F3F(~2, ~0x36, ~0x01d), "2", F_VIS3, v9b },
-{ "cmask32",	F3F(2, 0x36, 0x01f), F3F(~2, ~0x36, ~0x01f), "2", F_VIS3, v9b },
-{ "fsll16",	F3F(2, 0x36, 0x021), F3F(~2, ~0x36, ~0x021), "v,B,H", F_VIS3, v9b },
-{ "fsrl16",	F3F(2, 0x36, 0x023), F3F(~2, ~0x36, ~0x023), "v,B,H", F_VIS3, v9b },
-{ "fsll32",	F3F(2, 0x36, 0x025), F3F(~2, ~0x36, ~0x025), "v,B,H", F_VIS3, v9b },
-{ "fsrl32",	F3F(2, 0x36, 0x027), F3F(~2, ~0x36, ~0x027), "v,B,H", F_VIS3, v9b },
-{ "fslas16",	F3F(2, 0x36, 0x029), F3F(~2, ~0x36, ~0x029), "v,B,H", F_VIS3, v9b },
-{ "fsra16",	F3F(2, 0x36, 0x02b), F3F(~2, ~0x36, ~0x02b), "v,B,H", F_VIS3, v9b },
-{ "fslas32",	F3F(2, 0x36, 0x02d), F3F(~2, ~0x36, ~0x02d), "v,B,H", F_VIS3, v9b },
-{ "fsra32",	F3F(2, 0x36, 0x02f), F3F(~2, ~0x36, ~0x02f), "v,B,H", F_VIS3, v9b },
-{ "pdistn",	F3F(2, 0x36, 0x03f), F3F(~2, ~0x36, ~0x03f), "v,B,d", F_VIS3, v9b },
-{ "fmean16",	F3F(2, 0x36, 0x040), F3F(~2, ~0x36, ~0x040), "v,B,H", F_VIS3, v9b },
-{ "fpadd64",	F3F(2, 0x36, 0x042), F3F(~2, ~0x36, ~0x042), "v,B,H", F_VIS3, v9b },
-{ "fchksm16",	F3F(2, 0x36, 0x044), F3F(~2, ~0x36, ~0x044), "v,B,H", F_VIS3, v9b },
-{ "fpsub64",	F3F(2, 0x36, 0x046), F3F(~2, ~0x36, ~0x046), "v,B,H", F_VIS3, v9b },
-{ "fpadds16",	F3F(2, 0x36, 0x058), F3F(~2, ~0x36, ~0x058), "v,B,H", F_VIS3, v9b },
-{ "fpadds16s",	F3F(2, 0x36, 0x059), F3F(~2, ~0x36, ~0x059), "e,f,g", F_VIS3, v9b },
-{ "fpadds32",	F3F(2, 0x36, 0x05a), F3F(~2, ~0x36, ~0x05a), "v,B,H", F_VIS3, v9b },
-{ "fpadds32s",	F3F(2, 0x36, 0x05b), F3F(~2, ~0x36, ~0x05b), "e,f,g", F_VIS3, v9b },
-{ "fpsubs16",	F3F(2, 0x36, 0x05c), F3F(~2, ~0x36, ~0x05c), "v,B,H", F_VIS3, v9b },
-{ "fpsubs16s",	F3F(2, 0x36, 0x05d), F3F(~2, ~0x36, ~0x05d), "e,f,g", F_VIS3, v9b },
-{ "fpsubs32",	F3F(2, 0x36, 0x05e), F3F(~2, ~0x36, ~0x05e), "v,B,H", F_VIS3, v9b },
-{ "fpsubs32s",	F3F(2, 0x36, 0x05f), F3F(~2, ~0x36, ~0x05f), "e,f,g", F_VIS3, v9b },
-{ "movdtox",	F3F(2, 0x36, 0x110), F3F(~2, ~0x36, ~0x110), "B,d", F_FLOAT|F_VIS3, v9b },
-{ "movstouw",	F3F(2, 0x36, 0x111), F3F(~2, ~0x36, ~0x111), "f,d", F_FLOAT|F_VIS3, v9b },
-{ "movstosw",	F3F(2, 0x36, 0x113), F3F(~2, ~0x36, ~0x113), "f,d", F_FLOAT|F_VIS3, v9b },
-{ "movxtod",	F3F(2, 0x36, 0x118), F3F(~2, ~0x36, ~0x118), "2,H", F_FLOAT|F_VIS3, v9b },
-{ "movwtos",	F3F(2, 0x36, 0x119), F3F(~2, ~0x36, ~0x119), "2,g", F_FLOAT|F_VIS3, v9b },
-{ "xmulx",	F3F(2, 0x36, 0x115), F3F(~2, ~0x36, ~0x115), "1,2,d", F_VIS3, v9b },
-{ "xmulxhi",	F3F(2, 0x36, 0x116), F3F(~2, ~0x36, ~0x116), "1,2,d", F_VIS3, v9b },
-{ "fucmple8",	F3F(2, 0x36, 0x120), F3F(~2, ~0x36, ~0x120), "v,B,d", F_VIS3, v9b },
-{ "fucmpne8",	F3F(2, 0x36, 0x122), F3F(~2, ~0x36, ~0x122), "v,B,d", F_VIS3, v9b },
-{ "fucmpgt8",	F3F(2, 0x36, 0x128), F3F(~2, ~0x36, ~0x128), "v,B,d", F_VIS3, v9b },
-{ "fucmpeq8",	F3F(2, 0x36, 0x12a), F3F(~2, ~0x36, ~0x12a), "v,B,d", F_VIS3, v9b },
-{ "flcmps",	CMPFCC(0)|F3F(2, 0x36, 0x151), CMPFCC(~0)|F3F(~2, ~0x36, ~0x151), "6,e,f", F_FLOAT|F_HPC, v9b },
-{ "flcmps",	CMPFCC(1)|F3F(2, 0x36, 0x151), CMPFCC(~1)|F3F(~2, ~0x36, ~0x151), "7,e,f", F_FLOAT|F_HPC, v9b },
-{ "flcmps",	CMPFCC(2)|F3F(2, 0x36, 0x151), CMPFCC(~2)|F3F(~2, ~0x36, ~0x151), "8,e,f", F_FLOAT|F_HPC, v9b },
-{ "flcmps",	CMPFCC(3)|F3F(2, 0x36, 0x151), CMPFCC(~3)|F3F(~2, ~0x36, ~0x151), "9,e,f", F_FLOAT|F_HPC, v9b },
-{ "flcmpd",	CMPFCC(0)|F3F(2, 0x36, 0x152), CMPFCC(~0)|F3F(~2, ~0x36, ~0x152), "6,v,B", F_FLOAT|F_HPC, v9b },
-{ "flcmpd",	CMPFCC(1)|F3F(2, 0x36, 0x152), CMPFCC(~1)|F3F(~2, ~0x36, ~0x152), "7,v,B", F_FLOAT|F_HPC, v9b },
-{ "flcmpd",	CMPFCC(2)|F3F(2, 0x36, 0x152), CMPFCC(~2)|F3F(~2, ~0x36, ~0x152), "8,v,B", F_FLOAT|F_HPC, v9b },
-{ "flcmpd",	CMPFCC(3)|F3F(2, 0x36, 0x152), CMPFCC(~3)|F3F(~2, ~0x36, ~0x152), "9,v,B", F_FLOAT|F_HPC, v9b },
+{ "edge8n",    F3F(2, 0x36, 0x001), F3F(~2, ~0x36, ~0x001), "1,2,d", HWCAP_VIS2, 0, v9b },
+{ "edge8ln",   F3F(2, 0x36, 0x003), F3F(~2, ~0x36, ~0x003), "1,2,d", HWCAP_VIS2, 0, v9b },
+{ "edge16n",   F3F(2, 0x36, 0x005), F3F(~2, ~0x36, ~0x005), "1,2,d", HWCAP_VIS2, 0, v9b },
+{ "edge16ln",  F3F(2, 0x36, 0x007), F3F(~2, ~0x36, ~0x007), "1,2,d", HWCAP_VIS2, 0, v9b },
+{ "edge32n",   F3F(2, 0x36, 0x009), F3F(~2, ~0x36, ~0x009), "1,2,d", HWCAP_VIS2, 0, v9b },
+{ "edge32ln",  F3F(2, 0x36, 0x00b), F3F(~2, ~0x36, ~0x00b), "1,2,d", HWCAP_VIS2, 0, v9b },
+
+{ "bmask",     F3F(2, 0x36, 0x019), F3F(~2, ~0x36, ~0x019), "1,2,d", HWCAP_VIS2, 0, v9b },
+{ "bshuffle",  F3F(2, 0x36, 0x04c), F3F(~2, ~0x36, ~0x04c), "v,B,H", HWCAP_VIS2, 0, v9b },
+
+{ "siam",      F3F(2, 0x36, 0x081), F3F(~2, ~0x36, ~0x081)|RD_G0|RS1_G0|RS2(~7), "3", HWCAP_VIS2, 0, v9b },
+
+{ "commit",	F3(2, 0x3e, 0)|RD(30), F3(~2, ~0x3e, ~0)|RD(~30)|RS1_G0|SIMM13(~0), "", 0, HWCAP_TRANS, v9b },
+{ "fnadds",	F3F(2, 0x34, 0x051), F3F(~2, ~0x34, ~0x051), "e,f,g", F_FLOAT, HWCAP_HPC, v9b },
+{ "fnaddd",	F3F(2, 0x34, 0x052), F3F(~2, ~0x34, ~0x052), "v,B,H", F_FLOAT, HWCAP_HPC, v9b },
+{ "fnmuls",	F3F(2, 0x34, 0x059), F3F(~2, ~0x34, ~0x059), "e,f,g", F_FLOAT, HWCAP_HPC, v9b },
+{ "fnmuld",	F3F(2, 0x34, 0x05a), F3F(~2, ~0x34, ~0x05a), "v,B,H", F_FLOAT, HWCAP_HPC, v9b },
+{ "fhadds",	F3F(2, 0x34, 0x061), F3F(~2, ~0x34, ~0x061), "e,f,g", F_FLOAT, HWCAP_HPC, v9b },
+{ "fhaddd",	F3F(2, 0x34, 0x062), F3F(~2, ~0x34, ~0x062), "v,B,H", F_FLOAT, HWCAP_HPC, v9b },
+{ "fhsubs",	F3F(2, 0x34, 0x065), F3F(~2, ~0x34, ~0x065), "e,f,g", F_FLOAT, HWCAP_HPC, v9b },
+{ "fhsubd",	F3F(2, 0x34, 0x066), F3F(~2, ~0x34, ~0x066), "v,B,H", F_FLOAT, HWCAP_HPC, v9b },
+{ "fnhadds",	F3F(2, 0x34, 0x071), F3F(~2, ~0x34, ~0x071), "e,f,g", F_FLOAT, HWCAP_HPC, v9b },
+{ "fnhaddd",	F3F(2, 0x34, 0x072), F3F(~2, ~0x34, ~0x072), "v,B,H", F_FLOAT, HWCAP_HPC, v9b },
+{ "fnsmuld",	F3F(2, 0x34, 0x079), F3F(~2, ~0x34, ~0x079), "e,f,H", F_FLOAT, HWCAP_HPC, v9b },
+{ "fpmaddx",	F3(2, 0x37, 0)|OPF_LOW4(0), F3(~2, ~0x37, 0)|OPF_LOW4(~0), "v,B,5,H", F_FLOAT, HWCAP_IMA, v9b },
+{ "fmadds",	F3(2, 0x37, 0)|OPF_LOW4(1), F3(~2, ~0x37, 0)|OPF_LOW4(~1), "e,f,4,g", F_FLOAT, HWCAP_FMAF, v9b },
+{ "fmaddd",	F3(2, 0x37, 0)|OPF_LOW4(2), F3(~2, ~0x37, 0)|OPF_LOW4(~2), "v,B,5,H", F_FLOAT, HWCAP_FMAF, v9b },
+{ "fpmaddxhi",	F3(2, 0x37, 0)|OPF_LOW4(4), F3(~2, ~0x37, 0)|OPF_LOW4(~4), "v,B,5,H", F_FLOAT, HWCAP_IMA, v9b },
+{ "fmsubs",	F3(2, 0x37, 0)|OPF_LOW4(5), F3(~2, ~0x37, 0)|OPF_LOW4(~5), "e,f,4,g", F_FLOAT, HWCAP_FMAF, v9b },
+{ "fmsubd",	F3(2, 0x37, 0)|OPF_LOW4(6), F3(~2, ~0x37, 0)|OPF_LOW4(~6), "v,B,5,H", F_FLOAT, HWCAP_FMAF, v9b },
+{ "fnmsubs",	F3(2, 0x37, 0)|OPF_LOW4(9), F3(~2, ~0x37, 0)|OPF_LOW4(~9), "e,f,4,g", F_FLOAT, HWCAP_FMAF, v9b },
+{ "fnmsubd",	F3(2, 0x37, 0)|OPF_LOW4(10), F3(~2, ~0x37, 0)|OPF_LOW4(~10), "v,B,5,H", F_FLOAT, HWCAP_FMAF, v9b },
+{ "fnmadds",	F3(2, 0x37, 0)|OPF_LOW4(13), F3(~2, ~0x37, 0)|OPF_LOW4(~13), "e,f,4,g", F_FLOAT, HWCAP_FMAF, v9b },
+{ "fnmaddd",	F3(2, 0x37, 0)|OPF_LOW4(14), F3(~2, ~0x37, 0)|OPF_LOW4(~14), "v,B,5,H", F_FLOAT, HWCAP_FMAF, v9b },
+{ "fumadds",	F3(2, 0x3f, 0)|OPF_LOW4(1), F3(~2, ~0x3f, 0)|OPF_LOW4(~1), "e,f,4,g", F_FLOAT, HWCAP_FJFMAU, v9b },
+{ "fumaddd",	F3(2, 0x3f, 0)|OPF_LOW4(2), F3(~2, ~0x3f, 0)|OPF_LOW4(~2), "v,B,5,H", F_FLOAT, HWCAP_FJFMAU, v9b },
+{ "fumsubs",	F3(2, 0x3f, 0)|OPF_LOW4(5), F3(~2, ~0x3f, 0)|OPF_LOW4(~5), "e,f,4,g", F_FLOAT, HWCAP_FJFMAU, v9b },
+{ "fumsubd",	F3(2, 0x3f, 0)|OPF_LOW4(6), F3(~2, ~0x3f, 0)|OPF_LOW4(~6), "v,B,5,H", F_FLOAT, HWCAP_FJFMAU, v9b },
+{ "fnumsubs",	F3(2, 0x3f, 0)|OPF_LOW4(9), F3(~2, ~0x3f, 0)|OPF_LOW4(~9), "e,f,4,g", F_FLOAT, HWCAP_FJFMAU, v9b },
+{ "fnumsubd",	F3(2, 0x3f, 0)|OPF_LOW4(10), F3(~2, ~0x3f, 0)|OPF_LOW4(~10), "v,B,5,H", F_FLOAT, HWCAP_FJFMAU, v9b },
+{ "fnumadds",	F3(2, 0x3f, 0)|OPF_LOW4(13), F3(~2, ~0x3f, 0)|OPF_LOW4(~13), "e,f,4,g", F_FLOAT, HWCAP_FJFMAU, v9b },
+{ "fnumaddd",	F3(2, 0x3f, 0)|OPF_LOW4(14), F3(~2, ~0x3f, 0)|OPF_LOW4(~14), "v,B,5,H", F_FLOAT, HWCAP_FJFMAU, v9b },
+{ "addxc",	F3F(2, 0x36, 0x011), F3F(~2, ~0x36, ~0x011), "1,2,d", 0, HWCAP_VIS3, v9b },
+{ "addxccc",	F3F(2, 0x36, 0x013), F3F(~2, ~0x36, ~0x013), "1,2,d", 0, HWCAP_VIS3, v9b },
+{ "random",	F3F(2, 0x36, 0x015), F3F(~2, ~0x36, ~0x015), "H", F_FLOAT, HWCAP_RANDOM, v9b },
+{ "umulxhi",	F3F(2, 0x36, 0x016), F3F(~2, ~0x36, ~0x016), "1,2,d", 0, HWCAP_VIS3, v9b },
+{ "lzd",	F3F(2, 0x36, 0x017), F3F(~2, ~0x36, ~0x017), "2,d", 0, HWCAP_VIS3, v9b },
+{ "cmask8",	F3F(2, 0x36, 0x01b), F3F(~2, ~0x36, ~0x01b), "2", 0, HWCAP_VIS3, v9b },
+{ "cmask16",	F3F(2, 0x36, 0x01d), F3F(~2, ~0x36, ~0x01d), "2", 0, HWCAP_VIS3, v9b },
+{ "cmask32",	F3F(2, 0x36, 0x01f), F3F(~2, ~0x36, ~0x01f), "2", 0, HWCAP_VIS3, v9b },
+{ "fsll16",	F3F(2, 0x36, 0x021), F3F(~2, ~0x36, ~0x021), "v,B,H", 0, HWCAP_VIS3, v9b },
+{ "fsrl16",	F3F(2, 0x36, 0x023), F3F(~2, ~0x36, ~0x023), "v,B,H", 0, HWCAP_VIS3, v9b },
+{ "fsll32",	F3F(2, 0x36, 0x025), F3F(~2, ~0x36, ~0x025), "v,B,H", 0, HWCAP_VIS3, v9b },
+{ "fsrl32",	F3F(2, 0x36, 0x027), F3F(~2, ~0x36, ~0x027), "v,B,H", 0, HWCAP_VIS3, v9b },
+{ "fslas16",	F3F(2, 0x36, 0x029), F3F(~2, ~0x36, ~0x029), "v,B,H", 0, HWCAP_VIS3, v9b },
+{ "fsra16",	F3F(2, 0x36, 0x02b), F3F(~2, ~0x36, ~0x02b), "v,B,H", 0, HWCAP_VIS3, v9b },
+{ "fslas32",	F3F(2, 0x36, 0x02d), F3F(~2, ~0x36, ~0x02d), "v,B,H", 0, HWCAP_VIS3, v9b },
+{ "fsra32",	F3F(2, 0x36, 0x02f), F3F(~2, ~0x36, ~0x02f), "v,B,H", 0, HWCAP_VIS3, v9b },
+{ "pdistn",	F3F(2, 0x36, 0x03f), F3F(~2, ~0x36, ~0x03f), "v,B,d", 0, HWCAP_VIS3, v9b },
+{ "fmean16",	F3F(2, 0x36, 0x040), F3F(~2, ~0x36, ~0x040), "v,B,H", 0, HWCAP_VIS3, v9b },
+{ "fpadd64",	F3F(2, 0x36, 0x042), F3F(~2, ~0x36, ~0x042), "v,B,H", 0, HWCAP_VIS3, v9b },
+{ "fchksm16",	F3F(2, 0x36, 0x044), F3F(~2, ~0x36, ~0x044), "v,B,H", 0, HWCAP_VIS3, v9b },
+{ "fpsub64",	F3F(2, 0x36, 0x046), F3F(~2, ~0x36, ~0x046), "v,B,H", 0, HWCAP_VIS3, v9b },
+{ "fpadds16",	F3F(2, 0x36, 0x058), F3F(~2, ~0x36, ~0x058), "v,B,H", 0, HWCAP_VIS3, v9b },
+{ "fpadds16s",	F3F(2, 0x36, 0x059), F3F(~2, ~0x36, ~0x059), "e,f,g", 0, HWCAP_VIS3, v9b },
+{ "fpadds32",	F3F(2, 0x36, 0x05a), F3F(~2, ~0x36, ~0x05a), "v,B,H", 0, HWCAP_VIS3, v9b },
+{ "fpadds32s",	F3F(2, 0x36, 0x05b), F3F(~2, ~0x36, ~0x05b), "e,f,g", 0, HWCAP_VIS3, v9b },
+{ "fpsubs16",	F3F(2, 0x36, 0x05c), F3F(~2, ~0x36, ~0x05c), "v,B,H", 0, HWCAP_VIS3, v9b },
+{ "fpsubs16s",	F3F(2, 0x36, 0x05d), F3F(~2, ~0x36, ~0x05d), "e,f,g", 0, HWCAP_VIS3, v9b },
+{ "fpsubs32",	F3F(2, 0x36, 0x05e), F3F(~2, ~0x36, ~0x05e), "v,B,H", 0, HWCAP_VIS3, v9b },
+{ "fpsubs32s",	F3F(2, 0x36, 0x05f), F3F(~2, ~0x36, ~0x05f), "e,f,g", 0, HWCAP_VIS3, v9b },
+{ "movdtox",	F3F(2, 0x36, 0x110), F3F(~2, ~0x36, ~0x110), "B,d", F_FLOAT, HWCAP_VIS3, v9b },
+{ "movstouw",	F3F(2, 0x36, 0x111), F3F(~2, ~0x36, ~0x111), "f,d", F_FLOAT, HWCAP_VIS3, v9b },
+{ "movstosw",	F3F(2, 0x36, 0x113), F3F(~2, ~0x36, ~0x113), "f,d", F_FLOAT, HWCAP_VIS3, v9b },
+{ "movxtod",	F3F(2, 0x36, 0x118), F3F(~2, ~0x36, ~0x118), "2,H", F_FLOAT, HWCAP_VIS3, v9b },
+{ "movwtos",	F3F(2, 0x36, 0x119), F3F(~2, ~0x36, ~0x119), "2,g", F_FLOAT, HWCAP_VIS3, v9b },
+{ "xmulx",	F3F(2, 0x36, 0x115), F3F(~2, ~0x36, ~0x115), "1,2,d", 0, HWCAP_VIS3, v9b },
+{ "xmulxhi",	F3F(2, 0x36, 0x116), F3F(~2, ~0x36, ~0x116), "1,2,d", 0, HWCAP_VIS3, v9b },
+{ "fucmple8",	F3F(2, 0x36, 0x120), F3F(~2, ~0x36, ~0x120), "v,B,d", 0, HWCAP_VIS3, v9b },
+{ "fucmpne8",	F3F(2, 0x36, 0x122), F3F(~2, ~0x36, ~0x122), "v,B,d", 0, HWCAP_VIS3, v9b },
+{ "fucmpgt8",	F3F(2, 0x36, 0x128), F3F(~2, ~0x36, ~0x128), "v,B,d", 0, HWCAP_VIS3, v9b },
+{ "fucmpeq8",	F3F(2, 0x36, 0x12a), F3F(~2, ~0x36, ~0x12a), "v,B,d", 0, HWCAP_VIS3, v9b },
+{"aes_kexpand0",F3F(2, 0x36, 0x130), F3F(~2, ~0x36, ~0x130), "v,B,H", F_FLOAT, HWCAP_AES, v9b },
+{"aes_kexpand2",F3F(2, 0x36, 0x131), F3F(~2, ~0x36, ~0x131), "v,B,H", F_FLOAT, HWCAP_AES, v9b },
+{ "des_ip",     F3F(2, 0x36, 0x134), F3F(~2, ~0x36, ~0x134), "v,H", F_FLOAT, HWCAP_DES, v9b },
+{ "des_iip",    F3F(2, 0x36, 0x135), F3F(~2, ~0x36, ~0x135), "v,H", F_FLOAT, HWCAP_DES, v9b },
+{ "des_kexpand",F3F(2, 0x36, 0x136), F3F(~2, ~0x36, ~0x136), "v,X,H", F_FLOAT, HWCAP_DES, v9b },
+{"kasumi_fi_fi",F3F(2, 0x36, 0x138), F3F(~2, ~0x36, ~0x138), "v,B,H", F_FLOAT, HWCAP_KASUMI, v9b },
+{ "camellia_fi",F3F(2, 0x36, 0x13c), F3F(~2, ~0x36, ~0x13c), "v,B,H", F_FLOAT, HWCAP_CAMELLIA, v9b },
+{"camellia_fli",F3F(2, 0x36, 0x13d), F3F(~2, ~0x36, ~0x13d), "v,B,H", F_FLOAT, HWCAP_CAMELLIA, v9b },
+{ "md5",        F3F(2, 0x36, 0x140), F3F(~2, ~0x36, ~0x140), "", F_FLOAT, HWCAP_MD5, v9b },
+{ "sha1",       F3F(2, 0x36, 0x141), F3F(~2, ~0x36, ~0x141), "", F_FLOAT, HWCAP_SHA1, v9b },
+{ "sha256",     F3F(2, 0x36, 0x142), F3F(~2, ~0x36, ~0x142), "", F_FLOAT, HWCAP_SHA256, v9b },
+{ "sha512",     F3F(2, 0x36, 0x143), F3F(~2, ~0x36, ~0x143), "", F_FLOAT, HWCAP_SHA512, v9b },
+{ "crc32c",     F3F(2, 0x36, 0x147), F3F(~2, ~0x36, ~0x147), "v,B,H", F_FLOAT, HWCAP_CRC32C, v9b },
+{ "mpmul",      F3F(2, 0x36, 0x148), F3F(~2, ~0x36, ~0x148), "X", F_FLOAT, HWCAP_MPMUL, v9b },
+{ "montmul",    F3F(2, 0x36, 0x149), F3F(~2, ~0x36, ~0x149), "X", F_FLOAT, HWCAP_MONT, v9b },
+{ "montsqr",    F3F(2, 0x36, 0x14a), F3F(~2, ~0x36, ~0x14a), "X", F_FLOAT, HWCAP_MONT, v9b },
+{"aes_eround01",  F2(2, 0x19)|OPF_LOW4(0), F2(~2, ~0x19)|OPF_LOW4(~0), "v,B,5,H", F_FLOAT, HWCAP_AES, v9b },
+{"aes_eround23",  F2(2, 0x19)|OPF_LOW4(1), F2(~2, ~0x19)|OPF_LOW4(~1), "v,B,5,H", F_FLOAT, HWCAP_AES, v9b },
+{"aes_dround01",  F2(2, 0x19)|OPF_LOW4(2), F2(~2, ~0x19)|OPF_LOW4(~2), "v,B,5,H", F_FLOAT, HWCAP_AES, v9b },
+{"aes_dround23",  F2(2, 0x19)|OPF_LOW4(3), F2(~2, ~0x19)|OPF_LOW4(~3), "v,B,5,H", F_FLOAT, HWCAP_AES, v9b },
+{"aes_eround01_l",F2(2, 0x19)|OPF_LOW4(4), F2(~2, ~0x19)|OPF_LOW4(~4), "v,B,5,H", F_FLOAT, HWCAP_AES, v9b },
+{"aes_eround23_l",F2(2, 0x19)|OPF_LOW4(5), F2(~2, ~0x19)|OPF_LOW4(~5), "v,B,5,H", F_FLOAT, HWCAP_AES, v9b },
+{"aes_dround01_l",F2(2, 0x19)|OPF_LOW4(6), F2(~2, ~0x19)|OPF_LOW4(~6), "v,B,5,H", F_FLOAT, HWCAP_AES, v9b },
+{"aes_dround23_l",F2(2, 0x19)|OPF_LOW4(7), F2(~2, ~0x19)|OPF_LOW4(~7), "v,B,5,H", F_FLOAT, HWCAP_AES, v9b },
+{"aes_kexpand1",  F2(2, 0x19)|OPF_LOW4(8), F2(~2, ~0x19)|OPF_LOW4(~8), "v,B,),H", F_FLOAT, HWCAP_AES, v9b },
+{"des_round",     F2(2, 0x19)|OPF_LOW4(9), F2(~2, ~0x19)|OPF_LOW4(~9), "v,B,5,H", F_FLOAT, HWCAP_DES, v9b },
+{"kasumi_fl_xor", F2(2, 0x19)|OPF_LOW4(10), F2(~2, ~0x19)|OPF_LOW4(~10), "v,B,5,H", F_FLOAT, HWCAP_KASUMI, v9b },
+{"kasumi_fi_xor", F2(2, 0x19)|OPF_LOW4(11), F2(~2, ~0x19)|OPF_LOW4(~11), "v,B,5,H", F_FLOAT, HWCAP_KASUMI, v9b },
+{"camellia_f",    F2(2, 0x19)|OPF_LOW4(12), F2(~2, ~0x19)|OPF_LOW4(~12), "v,B,5,H", F_FLOAT, HWCAP_CAMELLIA, v9b },
+{ "flcmps",	CMPFCC(0)|F3F(2, 0x36, 0x151), CMPFCC(~0)|F3F(~2, ~0x36, ~0x151), "6,e,f", F_FLOAT, HWCAP_HPC, v9b },
+{ "flcmps",	CMPFCC(1)|F3F(2, 0x36, 0x151), CMPFCC(~1)|F3F(~2, ~0x36, ~0x151), "7,e,f", F_FLOAT, HWCAP_HPC, v9b },
+{ "flcmps",	CMPFCC(2)|F3F(2, 0x36, 0x151), CMPFCC(~2)|F3F(~2, ~0x36, ~0x151), "8,e,f", F_FLOAT, HWCAP_HPC, v9b },
+{ "flcmps",	CMPFCC(3)|F3F(2, 0x36, 0x151), CMPFCC(~3)|F3F(~2, ~0x36, ~0x151), "9,e,f", F_FLOAT, HWCAP_HPC, v9b },
+{ "flcmpd",	CMPFCC(0)|F3F(2, 0x36, 0x152), CMPFCC(~0)|F3F(~2, ~0x36, ~0x152), "6,v,B", F_FLOAT, HWCAP_HPC, v9b },
+{ "flcmpd",	CMPFCC(1)|F3F(2, 0x36, 0x152), CMPFCC(~1)|F3F(~2, ~0x36, ~0x152), "7,v,B", F_FLOAT, HWCAP_HPC, v9b },
+{ "flcmpd",	CMPFCC(2)|F3F(2, 0x36, 0x152), CMPFCC(~2)|F3F(~2, ~0x36, ~0x152), "8,v,B", F_FLOAT, HWCAP_HPC, v9b },
+{ "flcmpd",	CMPFCC(3)|F3F(2, 0x36, 0x152), CMPFCC(~3)|F3F(~2, ~0x36, ~0x152), "9,v,B", F_FLOAT, HWCAP_HPC, v9b },
 
 /* More v9 specific insns, these need to come last so they do not clash
    with v9a instructions such as "edge8" which looks like impdep1. */
 
 #define IMPDEP(name, code) \
-{ name,	F3(2, code, 0), F3(~2, ~code, ~0)|ASI(~0), "1,2,d", 0, v9notv9a }, \
-{ name,	F3(2, code, 1), F3(~2, ~code, ~1),	   "1,i,d", 0, v9notv9a }, \
-{ name, F3(2, code, 0), F3(~2, ~code, ~0),         "x,1,2,d", 0, v9notv9a }, \
-{ name, F3(2, code, 0), F3(~2, ~code, ~0),         "x,e,f,g", 0, v9notv9a }
+{ name,	F3(2, code, 0), F3(~2, ~code, ~0)|ASI(~0), "1,2,d", 0, 0, v9notv9a }, \
+{ name,	F3(2, code, 1), F3(~2, ~code, ~1),	   "1,i,d", 0, 0, v9notv9a }, \
+{ name, F3(2, code, 0), F3(~2, ~code, ~0),         "x,1,2,d", 0, 0, v9notv9a }, \
+{ name, F3(2, code, 0), F3(~2, ~code, ~0),         "x,e,f,g", 0, 0, v9notv9a }
 
 IMPDEP ("impdep1", 0x36),
 IMPDEP ("impdep2", 0x37),
diff --git a/opcodes/spu-dis.c b/opcodes/spu-dis.c
index 3e6a762..717daab 100644
--- a/opcodes/spu-dis.c
+++ b/opcodes/spu-dis.c
@@ -1,6 +1,6 @@
 /* Disassemble SPU instructions
 
-   Copyright 2006, 2007 Free Software Foundation, Inc.
+   Copyright 2006, 2007, 2012  Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
 
@@ -19,8 +19,8 @@
    Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <stdio.h>
 #include "sysdep.h"
+#include <stdio.h>
 #include "dis-asm.h"
 #include "opcode/spu.h"
 
diff --git a/opcodes/sysdep.h b/opcodes/sysdep.h
index 2ca3935..b09d19e 100644
--- a/opcodes/sysdep.h
+++ b/opcodes/sysdep.h
@@ -1,5 +1,5 @@
 /* Random host-dependent support code.
-   Copyright 1995, 1997, 2000, 2005, 2007 Free Software Foundation, Inc.
+   Copyright 1995, 1997, 2000, 2005, 2007, 2012 Free Software Foundation, Inc.
    Written by Ken Raeburn.
 
    This file is part of the GNU opcodes library.
@@ -27,6 +27,10 @@
    trying to replace often did that.  If it can be dropped from this
    file (check in a non-ANSI environment!), it should be.  */
 
+#ifdef PACKAGE
+#error sysdep.h must be included in lieu of config.h
+#endif
+
 #include "config.h"
 
 #include "ansidecl.h"
@@ -35,6 +39,10 @@
 #include <stdlib.h>
 #endif
 
+#ifdef STRING_WITH_STRINGS
+#include <string.h>
+#include <strings.h>
+#else
 #ifdef HAVE_STRING_H
 #include <string.h>
 #else
@@ -42,6 +50,7 @@
 #include <strings.h>
 #endif
 #endif
+#endif
 
 #if !HAVE_DECL_STPCPY
 extern char *stpcpy (char *__dest, const char *__src);
diff --git a/opcodes/tic30-dis.c b/opcodes/tic30-dis.c
index c6d0e3e..e2a5e6b 100644
--- a/opcodes/tic30-dis.c
+++ b/opcodes/tic30-dis.c
@@ -1,5 +1,5 @@
 /* Disassembly routines for TMS320C30 architecture
-   Copyright 1998, 1999, 2000, 2002, 2005, 2007, 2009
+   Copyright 1998, 1999, 2000, 2002, 2005, 2007, 2009, 2012
    Free Software Foundation, Inc.
    Contributed by Steven Haworth (steve at pm.cse.rmit.edu.au)
 
@@ -20,9 +20,9 @@
    Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include <errno.h>
 #include <math.h>
-#include "sysdep.h"
 #include "dis-asm.h"
 #include "opcode/tic30.h"
 
diff --git a/opcodes/tic4x-dis.c b/opcodes/tic4x-dis.c
index 4e15070..e07434b 100644
--- a/opcodes/tic4x-dis.c
+++ b/opcodes/tic4x-dis.c
@@ -1,6 +1,6 @@
 /* Print instructions for the Texas TMS320C[34]X, for GDB and GNU Binutils.
 
-   Copyright 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
+   Copyright 2002, 2003, 2005, 2007, 2012 Free Software Foundation, Inc.
 
    Contributed by Michael P. Hayes (m.hayes at elec.canterbury.ac.nz)
 
@@ -21,6 +21,7 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include <math.h>
 #include "libiberty.h"
 #include "dis-asm.h"
diff --git a/opcodes/tic54x-dis.c b/opcodes/tic54x-dis.c
index 578af10..ba33d5e 100644
--- a/opcodes/tic54x-dis.c
+++ b/opcodes/tic54x-dis.c
@@ -1,5 +1,6 @@
 /* Disassembly routines for TMS320C54X architecture
-   Copyright 1999, 2000, 2001, 2005, 2007, 2009 Free Software Foundation, Inc.
+   Copyright 1999, 2000, 2001, 2005, 2007, 2009, 2012
+   Free Software Foundation, Inc.
    Contributed by Timothy Wall (twall at cygnus.com)
 
    This file is part of the GNU opcodes library.
@@ -19,10 +20,10 @@
    Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include <errno.h>
 #include <math.h>
 #include <stdlib.h>
-#include "sysdep.h"
 #include "dis-asm.h"
 #include "opcode/tic54x.h"
 #include "coff/tic54x.h"
diff --git a/opcodes/tic80-dis.c b/opcodes/tic80-dis.c
index 3089acc..a2f3ae6 100644
--- a/opcodes/tic80-dis.c
+++ b/opcodes/tic80-dis.c
@@ -1,5 +1,6 @@
 /* Print TI TMS320C80 (MVP) instructions
-   Copyright 1996, 1997, 1998, 2000, 2005, 2007 Free Software Foundation, Inc.
+   Copyright 1996, 1997, 1998, 2000, 2005, 2007, 2012
+   Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
 
@@ -18,9 +19,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <stdio.h>
-
 #include "sysdep.h"
+#include <stdio.h>
 #include "opcode/tic80.h"
 #include "dis-asm.h"
 
diff --git a/opcodes/tic80-opc.c b/opcodes/tic80-opc.c
index 70e38ec..b4ac198 100644
--- a/opcodes/tic80-opc.c
+++ b/opcodes/tic80-opc.c
@@ -1,5 +1,6 @@
 /* Opcode table for TI TMS320C80 (MVP).
-   Copyright 1996, 1997, 2000, 2005, 2007 Free Software Foundation, Inc.
+   Copyright 1996, 1997, 2000, 2005, 2007, 2012
+   Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
 
@@ -18,8 +19,8 @@
    Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <stdio.h>
 #include "sysdep.h"
+#include <stdio.h>
 #include "opcode/tic80.h"
 
 /* This file holds various tables for the TMS320C80 (MVP).
diff --git a/opcodes/tilegx-dis.c b/opcodes/tilegx-dis.c
index 3754756..fb713c1 100644
--- a/opcodes/tilegx-dis.c
+++ b/opcodes/tilegx-dis.c
@@ -1,5 +1,5 @@
 /* tilegx-dis.c.  Disassembly routines for the TILE-Gx architecture.
-   Copyright 2011 Free Software Foundation, Inc.
+   Copyright 2011, 2012 Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
 
@@ -18,12 +18,12 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include <stddef.h>
 #include <assert.h>
 #include "bfd.h"
 #include "elf/tilegx.h"
 #include "elf-bfd.h"
-#include "sysdep.h"
 #include "dis-asm.h"
 #include "opcode/tilegx.h"
 
diff --git a/opcodes/tilegx-opc.c b/opcodes/tilegx-opc.c
index 4f97019..b900cd1 100644
--- a/opcodes/tilegx-opc.c
+++ b/opcodes/tilegx-opc.c
@@ -17,9 +17,10 @@
     Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     MA 02110-1301, USA.  */
 
+#include "sysdep.h"
+
 /* This define is BFD_RELOC_##x for real bfd, or -1 for everyone else.  */
 #define BFD_RELOC(x) BFD_RELOC_##x
-
 #include "bfd.h"
 
 /* Special registers.  */
@@ -41,7 +42,7 @@
 #include <stddef.h>
 #endif
 
-const struct tilegx_opcode tilegx_opcodes[334] =
+const struct tilegx_opcode tilegx_opcodes[336] =
 {
  { "bpt", TILEGX_OPC_BPT, 0x2, 0, TREG_ZERO, 0,
     { { 0, }, {  }, { 0, }, { 0, }, { 0, } },
@@ -100,8 +101,46 @@ const struct tilegx_opcode tilegx_opcodes[334] =
     }
 #endif
   },
+  { "ld4s_tls", TILEGX_OPC_LD4S_TLS, 0x2, 3, TREG_ZERO, 1,
+    { { 0, }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
+#ifndef DISASM_ONLY
+    {
+      0ULL,
+      0xfffff80000000000ULL,
+      0ULL,
+      0ULL,
+      0ULL
+    },
+    {
+      -1ULL,
+      0x1858000000000000ULL,
+      -1ULL,
+      -1ULL,
+      -1ULL
+    }
+#endif
+  },
+  { "ld_tls", TILEGX_OPC_LD_TLS, 0x2, 3, TREG_ZERO, 1,
+    { { 0, }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
+#ifndef DISASM_ONLY
+    {
+      0ULL,
+      0xfffff80000000000ULL,
+      0ULL,
+      0ULL,
+      0ULL
+    },
+    {
+      -1ULL,
+      0x18a0000000000000ULL,
+      -1ULL,
+      -1ULL,
+      -1ULL
+    }
+#endif
+  },
   { "move", TILEGX_OPC_MOVE, 0xf, 2, TREG_ZERO, 1,
-    { { 6, 7 }, { 8, 9 }, { 10, 11 }, { 12, 13 }, { 0, } },
+    { { 8, 9 }, { 6, 7 }, { 10, 11 }, { 12, 13 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -120,7 +159,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "movei", TILEGX_OPC_MOVEI, 0xf, 2, TREG_ZERO, 1,
-    { { 6, 0 }, { 8, 1 }, { 10, 2 }, { 12, 3 }, { 0, } },
+    { { 8, 0 }, { 6, 1 }, { 10, 2 }, { 12, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00fc0ULL,
@@ -139,7 +178,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "moveli", TILEGX_OPC_MOVELI, 0x3, 2, TREG_ZERO, 1,
-    { { 6, 4 }, { 8, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 4 }, { 6, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc000000070000fc0ULL,
@@ -158,7 +197,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "prefetch", TILEGX_OPC_PREFETCH, 0x12, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 14 } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -291,7 +330,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "prefetch_l1", TILEGX_OPC_PREFETCH_L1, 0x12, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 14 } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -310,7 +349,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "prefetch_l1_fault", TILEGX_OPC_PREFETCH_L1_FAULT, 0x12, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 14 } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -329,7 +368,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "prefetch_l2", TILEGX_OPC_PREFETCH_L2, 0x12, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 14 } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -348,7 +387,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "prefetch_l2_fault", TILEGX_OPC_PREFETCH_L2_FAULT, 0x12, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 14 } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -367,7 +406,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "prefetch_l3", TILEGX_OPC_PREFETCH_L3, 0x12, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 14 } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -386,7 +425,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "prefetch_l3_fault", TILEGX_OPC_PREFETCH_L3_FAULT, 0x12, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 14 } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -424,7 +463,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "add", TILEGX_OPC_ADD, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -443,7 +482,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "addi", TILEGX_OPC_ADDI, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -462,7 +501,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "addli", TILEGX_OPC_ADDLI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 4 }, { 8, 9, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 4 }, { 6, 7, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc000000070000000ULL,
@@ -481,7 +520,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "addx", TILEGX_OPC_ADDX, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -500,7 +539,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "addxi", TILEGX_OPC_ADDXI, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -519,7 +558,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "addxli", TILEGX_OPC_ADDXLI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 4 }, { 8, 9, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 4 }, { 6, 7, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc000000070000000ULL,
@@ -538,7 +577,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "addxsc", TILEGX_OPC_ADDXSC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -557,7 +596,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "and", TILEGX_OPC_AND, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -576,7 +615,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "andi", TILEGX_OPC_ANDI, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -595,7 +634,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "beqz", TILEGX_OPC_BEQZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -614,7 +653,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "beqzt", TILEGX_OPC_BEQZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -633,7 +672,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bfexts", TILEGX_OPC_BFEXTS, 0x1, 4, TREG_ZERO, 1,
-    { { 6, 7, 21, 22 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 21, 22 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007f000000ULL,
@@ -652,7 +691,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bfextu", TILEGX_OPC_BFEXTU, 0x1, 4, TREG_ZERO, 1,
-    { { 6, 7, 21, 22 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 21, 22 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007f000000ULL,
@@ -671,7 +710,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bfins", TILEGX_OPC_BFINS, 0x1, 4, TREG_ZERO, 1,
-    { { 23, 7, 21, 22 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 21, 22 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007f000000ULL,
@@ -690,7 +729,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bgez", TILEGX_OPC_BGEZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -709,7 +748,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bgezt", TILEGX_OPC_BGEZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -728,7 +767,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bgtz", TILEGX_OPC_BGTZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -747,7 +786,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bgtzt", TILEGX_OPC_BGTZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -766,7 +805,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "blbc", TILEGX_OPC_BLBC, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -785,7 +824,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "blbct", TILEGX_OPC_BLBCT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -804,7 +843,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "blbs", TILEGX_OPC_BLBS, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -823,7 +862,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "blbst", TILEGX_OPC_BLBST, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -842,7 +881,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "blez", TILEGX_OPC_BLEZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -861,7 +900,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "blezt", TILEGX_OPC_BLEZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -880,7 +919,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bltz", TILEGX_OPC_BLTZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -899,7 +938,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bltzt", TILEGX_OPC_BLTZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -918,7 +957,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bnez", TILEGX_OPC_BNEZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -937,7 +976,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "bnezt", TILEGX_OPC_BNEZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -956,7 +995,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "clz", TILEGX_OPC_CLZ, 0x5, 2, TREG_ZERO, 1,
-    { { 6, 7 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
+    { { 8, 9 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -975,7 +1014,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmoveqz", TILEGX_OPC_CMOVEQZ, 0x5, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -994,7 +1033,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmovnez", TILEGX_OPC_CMOVNEZ, 0x5, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1013,7 +1052,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmpeq", TILEGX_OPC_CMPEQ, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1032,7 +1071,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmpeqi", TILEGX_OPC_CMPEQI, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -1051,7 +1090,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmpexch", TILEGX_OPC_CMPEXCH, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1070,7 +1109,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmpexch4", TILEGX_OPC_CMPEXCH4, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1089,7 +1128,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmples", TILEGX_OPC_CMPLES, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1108,7 +1147,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmpleu", TILEGX_OPC_CMPLEU, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1127,7 +1166,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmplts", TILEGX_OPC_CMPLTS, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1146,7 +1185,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmpltsi", TILEGX_OPC_CMPLTSI, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -1165,7 +1204,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmpltu", TILEGX_OPC_CMPLTU, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1184,7 +1223,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmpltui", TILEGX_OPC_CMPLTUI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -1203,7 +1242,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmpne", TILEGX_OPC_CMPNE, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1222,7 +1261,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmul", TILEGX_OPC_CMUL, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1241,7 +1280,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmula", TILEGX_OPC_CMULA, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1260,7 +1299,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmulaf", TILEGX_OPC_CMULAF, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1279,7 +1318,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmulf", TILEGX_OPC_CMULF, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1298,7 +1337,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmulfr", TILEGX_OPC_CMULFR, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1317,7 +1356,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmulh", TILEGX_OPC_CMULH, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1336,7 +1375,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "cmulhr", TILEGX_OPC_CMULHR, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1355,7 +1394,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "crc32_32", TILEGX_OPC_CRC32_32, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1374,7 +1413,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "crc32_8", TILEGX_OPC_CRC32_8, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1393,7 +1432,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ctz", TILEGX_OPC_CTZ, 0x5, 2, TREG_ZERO, 1,
-    { { 6, 7 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
+    { { 8, 9 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -1412,7 +1451,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "dblalign", TILEGX_OPC_DBLALIGN, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1431,7 +1470,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "dblalign2", TILEGX_OPC_DBLALIGN2, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1450,7 +1489,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "dblalign4", TILEGX_OPC_DBLALIGN4, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1469,7 +1508,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "dblalign6", TILEGX_OPC_DBLALIGN6, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1507,7 +1546,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "dtlbpr", TILEGX_OPC_DTLBPR, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1526,7 +1565,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "exch", TILEGX_OPC_EXCH, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1545,7 +1584,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "exch4", TILEGX_OPC_EXCH4, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1564,7 +1603,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fdouble_add_flags", TILEGX_OPC_FDOUBLE_ADD_FLAGS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1583,7 +1622,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fdouble_addsub", TILEGX_OPC_FDOUBLE_ADDSUB, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1602,7 +1641,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fdouble_mul_flags", TILEGX_OPC_FDOUBLE_MUL_FLAGS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1621,7 +1660,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fdouble_pack1", TILEGX_OPC_FDOUBLE_PACK1, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1640,7 +1679,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fdouble_pack2", TILEGX_OPC_FDOUBLE_PACK2, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1659,7 +1698,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fdouble_sub_flags", TILEGX_OPC_FDOUBLE_SUB_FLAGS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1678,7 +1717,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fdouble_unpack_max", TILEGX_OPC_FDOUBLE_UNPACK_MAX, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1697,7 +1736,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fdouble_unpack_min", TILEGX_OPC_FDOUBLE_UNPACK_MIN, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1716,7 +1755,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fetchadd", TILEGX_OPC_FETCHADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1735,7 +1774,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fetchadd4", TILEGX_OPC_FETCHADD4, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1754,7 +1793,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fetchaddgez", TILEGX_OPC_FETCHADDGEZ, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1773,7 +1812,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fetchaddgez4", TILEGX_OPC_FETCHADDGEZ4, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1792,7 +1831,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fetchand", TILEGX_OPC_FETCHAND, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1811,7 +1850,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fetchand4", TILEGX_OPC_FETCHAND4, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1830,7 +1869,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fetchor", TILEGX_OPC_FETCHOR, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1849,7 +1888,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fetchor4", TILEGX_OPC_FETCHOR4, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1868,7 +1907,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "finv", TILEGX_OPC_FINV, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1887,7 +1926,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "flush", TILEGX_OPC_FLUSH, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1944,7 +1983,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fsingle_add1", TILEGX_OPC_FSINGLE_ADD1, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1963,7 +2002,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fsingle_addsub2", TILEGX_OPC_FSINGLE_ADDSUB2, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -1982,7 +2021,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fsingle_mul1", TILEGX_OPC_FSINGLE_MUL1, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -2001,7 +2040,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fsingle_mul2", TILEGX_OPC_FSINGLE_MUL2, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -2020,7 +2059,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fsingle_pack1", TILEGX_OPC_FSINGLE_PACK1, 0x5, 2, TREG_ZERO, 1,
-    { { 6, 7 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
+    { { 8, 9 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -2039,7 +2078,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fsingle_pack2", TILEGX_OPC_FSINGLE_PACK2, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -2058,7 +2097,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "fsingle_sub1", TILEGX_OPC_FSINGLE_SUB1, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -2077,7 +2116,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "icoh", TILEGX_OPC_ICOH, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2115,7 +2154,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "inv", TILEGX_OPC_INV, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2191,7 +2230,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "jalr", TILEGX_OPC_JALR, 0xa, 1, TREG_LR, 1,
-    { { 0, }, { 9 }, { 0, }, { 13 }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 13 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2210,7 +2249,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "jalrp", TILEGX_OPC_JALRP, 0xa, 1, TREG_LR, 1,
-    { { 0, }, { 9 }, { 0, }, { 13 }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 13 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2229,7 +2268,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "jr", TILEGX_OPC_JR, 0xa, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 13 }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 13 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2248,7 +2287,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "jrp", TILEGX_OPC_JRP, 0xa, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 13 }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 13 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2267,7 +2306,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld", TILEGX_OPC_LD, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 26, 14 } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 26, 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2286,7 +2325,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld1s", TILEGX_OPC_LD1S, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 26, 14 } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 26, 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2305,7 +2344,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld1s_add", TILEGX_OPC_LD1S_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2324,7 +2363,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld1u", TILEGX_OPC_LD1U, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 26, 14 } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 26, 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2343,7 +2382,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld1u_add", TILEGX_OPC_LD1U_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2362,7 +2401,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld2s", TILEGX_OPC_LD2S, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 26, 14 } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 26, 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2381,7 +2420,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld2s_add", TILEGX_OPC_LD2S_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2400,7 +2439,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld2u", TILEGX_OPC_LD2U, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 26, 14 } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 26, 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2419,7 +2458,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld2u_add", TILEGX_OPC_LD2U_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2438,7 +2477,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld4s", TILEGX_OPC_LD4S, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 26, 14 } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 26, 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2457,7 +2496,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld4s_add", TILEGX_OPC_LD4S_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2476,7 +2515,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld4u", TILEGX_OPC_LD4U, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 26, 14 } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 26, 14 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2495,7 +2534,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld4u_add", TILEGX_OPC_LD4U_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2514,7 +2553,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ld_add", TILEGX_OPC_LD_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2533,7 +2572,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldna", TILEGX_OPC_LDNA, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2552,7 +2591,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldna_add", TILEGX_OPC_LDNA_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2571,7 +2610,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt", TILEGX_OPC_LDNT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2590,7 +2629,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt1s", TILEGX_OPC_LDNT1S, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2609,7 +2648,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt1s_add", TILEGX_OPC_LDNT1S_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2628,7 +2667,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt1u", TILEGX_OPC_LDNT1U, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2647,7 +2686,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt1u_add", TILEGX_OPC_LDNT1U_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2666,7 +2705,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt2s", TILEGX_OPC_LDNT2S, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2685,7 +2724,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt2s_add", TILEGX_OPC_LDNT2S_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2704,7 +2743,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt2u", TILEGX_OPC_LDNT2U, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2723,7 +2762,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt2u_add", TILEGX_OPC_LDNT2U_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2742,7 +2781,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt4s", TILEGX_OPC_LDNT4S, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2761,7 +2800,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt4s_add", TILEGX_OPC_LDNT4S_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2780,7 +2819,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt4u", TILEGX_OPC_LDNT4U, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2799,7 +2838,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt4u_add", TILEGX_OPC_LDNT4U_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2818,7 +2857,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ldnt_add", TILEGX_OPC_LDNT_ADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 15, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2837,7 +2876,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "lnk", TILEGX_OPC_LNK, 0xa, 1, TREG_ZERO, 1,
-    { { 0, }, { 8 }, { 0, }, { 12 }, { 0, } },
+    { { 0, }, { 6 }, { 0, }, { 12 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2875,7 +2914,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mfspr", TILEGX_OPC_MFSPR, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 8, 27 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 6, 27 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2894,7 +2933,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mm", TILEGX_OPC_MM, 0x1, 4, TREG_ZERO, 1,
-    { { 23, 7, 21, 22 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 21, 22 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007f000000ULL,
@@ -2913,7 +2952,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mnz", TILEGX_OPC_MNZ, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -2932,7 +2971,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mtspr", TILEGX_OPC_MTSPR, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 28, 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 28, 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2951,7 +2990,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mul_hs_hs", TILEGX_OPC_MUL_HS_HS, 0x5, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -2970,7 +3009,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mul_hs_hu", TILEGX_OPC_MUL_HS_HU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -2989,7 +3028,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mul_hs_ls", TILEGX_OPC_MUL_HS_LS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3008,7 +3047,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mul_hs_lu", TILEGX_OPC_MUL_HS_LU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3027,7 +3066,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mul_hu_hu", TILEGX_OPC_MUL_HU_HU, 0x5, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3046,7 +3085,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mul_hu_ls", TILEGX_OPC_MUL_HU_LS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3065,7 +3104,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mul_hu_lu", TILEGX_OPC_MUL_HU_LU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3084,7 +3123,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mul_ls_ls", TILEGX_OPC_MUL_LS_LS, 0x5, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3103,7 +3142,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mul_ls_lu", TILEGX_OPC_MUL_LS_LU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3122,7 +3161,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mul_lu_lu", TILEGX_OPC_MUL_LU_LU, 0x5, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3141,7 +3180,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mula_hs_hs", TILEGX_OPC_MULA_HS_HS, 0x5, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3160,7 +3199,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mula_hs_hu", TILEGX_OPC_MULA_HS_HU, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3179,7 +3218,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mula_hs_ls", TILEGX_OPC_MULA_HS_LS, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3198,7 +3237,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mula_hs_lu", TILEGX_OPC_MULA_HS_LU, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3217,7 +3256,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mula_hu_hu", TILEGX_OPC_MULA_HU_HU, 0x5, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3236,7 +3275,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mula_hu_ls", TILEGX_OPC_MULA_HU_LS, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3255,7 +3294,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mula_hu_lu", TILEGX_OPC_MULA_HU_LU, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3274,7 +3313,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mula_ls_ls", TILEGX_OPC_MULA_LS_LS, 0x5, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3293,7 +3332,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mula_ls_lu", TILEGX_OPC_MULA_LS_LU, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3312,7 +3351,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mula_lu_lu", TILEGX_OPC_MULA_LU_LU, 0x5, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3331,7 +3370,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mulax", TILEGX_OPC_MULAX, 0x5, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3350,7 +3389,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mulx", TILEGX_OPC_MULX, 0x5, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3369,7 +3408,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "mz", TILEGX_OPC_MZ, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3426,7 +3465,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "nor", TILEGX_OPC_NOR, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3445,7 +3484,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "or", TILEGX_OPC_OR, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3464,7 +3503,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "ori", TILEGX_OPC_ORI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -3483,7 +3522,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "pcnt", TILEGX_OPC_PCNT, 0x5, 2, TREG_ZERO, 1,
-    { { 6, 7 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
+    { { 8, 9 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -3502,7 +3541,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "revbits", TILEGX_OPC_REVBITS, 0x5, 2, TREG_ZERO, 1,
-    { { 6, 7 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
+    { { 8, 9 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -3521,7 +3560,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "revbytes", TILEGX_OPC_REVBYTES, 0x5, 2, TREG_ZERO, 1,
-    { { 6, 7 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
+    { { 8, 9 }, { 0, }, { 10, 11 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -3540,7 +3579,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "rotl", TILEGX_OPC_ROTL, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3559,7 +3598,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "rotli", TILEGX_OPC_ROTLI, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 10, 11, 31 }, { 12, 13, 32 }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 10, 11, 31 }, { 12, 13, 32 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3578,7 +3617,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shl", TILEGX_OPC_SHL, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3597,7 +3636,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shl16insli", TILEGX_OPC_SHL16INSLI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 4 }, { 8, 9, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 4 }, { 6, 7, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc000000070000000ULL,
@@ -3616,7 +3655,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shl1add", TILEGX_OPC_SHL1ADD, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3635,7 +3674,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shl1addx", TILEGX_OPC_SHL1ADDX, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3654,7 +3693,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shl2add", TILEGX_OPC_SHL2ADD, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3673,7 +3712,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shl2addx", TILEGX_OPC_SHL2ADDX, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3692,7 +3731,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shl3add", TILEGX_OPC_SHL3ADD, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3711,7 +3750,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shl3addx", TILEGX_OPC_SHL3ADDX, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3730,7 +3769,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shli", TILEGX_OPC_SHLI, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 10, 11, 31 }, { 12, 13, 32 }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 10, 11, 31 }, { 12, 13, 32 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3749,7 +3788,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shlx", TILEGX_OPC_SHLX, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3768,7 +3807,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shlxi", TILEGX_OPC_SHLXI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3787,7 +3826,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shrs", TILEGX_OPC_SHRS, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3806,7 +3845,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shrsi", TILEGX_OPC_SHRSI, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 10, 11, 31 }, { 12, 13, 32 }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 10, 11, 31 }, { 12, 13, 32 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3825,7 +3864,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shru", TILEGX_OPC_SHRU, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3844,7 +3883,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shrui", TILEGX_OPC_SHRUI, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 10, 11, 31 }, { 12, 13, 32 }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 10, 11, 31 }, { 12, 13, 32 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3863,7 +3902,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shrux", TILEGX_OPC_SHRUX, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3882,7 +3921,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shruxi", TILEGX_OPC_SHRUXI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3901,7 +3940,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "shufflebytes", TILEGX_OPC_SHUFFLEBYTES, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -3920,7 +3959,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "st", TILEGX_OPC_ST, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 14, 33 } },
+    { { 0, }, { 7, 17 }, { 0, }, { 0, }, { 14, 33 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -3939,7 +3978,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "st1", TILEGX_OPC_ST1, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 14, 33 } },
+    { { 0, }, { 7, 17 }, { 0, }, { 0, }, { 14, 33 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -3977,7 +4016,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "st2", TILEGX_OPC_ST2, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 14, 33 } },
+    { { 0, }, { 7, 17 }, { 0, }, { 0, }, { 14, 33 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -4015,7 +4054,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "st4", TILEGX_OPC_ST4, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 14, 33 } },
+    { { 0, }, { 7, 17 }, { 0, }, { 0, }, { 14, 33 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -4072,7 +4111,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "stnt", TILEGX_OPC_STNT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -4091,7 +4130,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "stnt1", TILEGX_OPC_STNT1, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -4129,7 +4168,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "stnt2", TILEGX_OPC_STNT2, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -4167,7 +4206,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "stnt4", TILEGX_OPC_STNT4, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -4224,7 +4263,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "sub", TILEGX_OPC_SUB, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4243,7 +4282,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "subx", TILEGX_OPC_SUBX, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4262,7 +4301,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "subxsc", TILEGX_OPC_SUBXSC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4357,7 +4396,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "tblidxb0", TILEGX_OPC_TBLIDXB0, 0x5, 2, TREG_ZERO, 1,
-    { { 23, 7 }, { 0, }, { 24, 11 }, { 0, }, { 0, } },
+    { { 23, 9 }, { 0, }, { 24, 11 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -4376,7 +4415,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "tblidxb1", TILEGX_OPC_TBLIDXB1, 0x5, 2, TREG_ZERO, 1,
-    { { 23, 7 }, { 0, }, { 24, 11 }, { 0, }, { 0, } },
+    { { 23, 9 }, { 0, }, { 24, 11 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -4395,7 +4434,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "tblidxb2", TILEGX_OPC_TBLIDXB2, 0x5, 2, TREG_ZERO, 1,
-    { { 23, 7 }, { 0, }, { 24, 11 }, { 0, }, { 0, } },
+    { { 23, 9 }, { 0, }, { 24, 11 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -4414,7 +4453,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "tblidxb3", TILEGX_OPC_TBLIDXB3, 0x5, 2, TREG_ZERO, 1,
-    { { 23, 7 }, { 0, }, { 24, 11 }, { 0, }, { 0, } },
+    { { 23, 9 }, { 0, }, { 24, 11 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffff000ULL,
@@ -4433,7 +4472,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1add", TILEGX_OPC_V1ADD, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4452,7 +4491,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1addi", TILEGX_OPC_V1ADDI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -4471,7 +4510,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1adduc", TILEGX_OPC_V1ADDUC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4490,7 +4529,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1adiffu", TILEGX_OPC_V1ADIFFU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4509,7 +4548,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1avgu", TILEGX_OPC_V1AVGU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4528,7 +4567,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1cmpeq", TILEGX_OPC_V1CMPEQ, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4547,7 +4586,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1cmpeqi", TILEGX_OPC_V1CMPEQI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -4566,7 +4605,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1cmples", TILEGX_OPC_V1CMPLES, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4585,7 +4624,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1cmpleu", TILEGX_OPC_V1CMPLEU, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4604,7 +4643,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1cmplts", TILEGX_OPC_V1CMPLTS, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4623,7 +4662,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1cmpltsi", TILEGX_OPC_V1CMPLTSI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -4642,7 +4681,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1cmpltu", TILEGX_OPC_V1CMPLTU, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4661,7 +4700,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1cmpltui", TILEGX_OPC_V1CMPLTUI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -4680,7 +4719,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1cmpne", TILEGX_OPC_V1CMPNE, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4699,7 +4738,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1ddotpu", TILEGX_OPC_V1DDOTPU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4718,7 +4757,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1ddotpua", TILEGX_OPC_V1DDOTPUA, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4737,7 +4776,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1ddotpus", TILEGX_OPC_V1DDOTPUS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4756,7 +4795,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1ddotpusa", TILEGX_OPC_V1DDOTPUSA, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4775,7 +4814,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1dotp", TILEGX_OPC_V1DOTP, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4794,7 +4833,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1dotpa", TILEGX_OPC_V1DOTPA, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4813,7 +4852,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1dotpu", TILEGX_OPC_V1DOTPU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4832,7 +4871,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1dotpua", TILEGX_OPC_V1DOTPUA, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4851,7 +4890,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1dotpus", TILEGX_OPC_V1DOTPUS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4870,7 +4909,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1dotpusa", TILEGX_OPC_V1DOTPUSA, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4889,7 +4928,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1int_h", TILEGX_OPC_V1INT_H, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4908,7 +4947,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1int_l", TILEGX_OPC_V1INT_L, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4927,7 +4966,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1maxu", TILEGX_OPC_V1MAXU, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4946,7 +4985,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1maxui", TILEGX_OPC_V1MAXUI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -4965,7 +5004,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1minu", TILEGX_OPC_V1MINU, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -4984,7 +5023,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1minui", TILEGX_OPC_V1MINUI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -5003,7 +5042,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1mnz", TILEGX_OPC_V1MNZ, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5022,7 +5061,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1multu", TILEGX_OPC_V1MULTU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5041,7 +5080,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1mulu", TILEGX_OPC_V1MULU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5060,7 +5099,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1mulus", TILEGX_OPC_V1MULUS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5079,7 +5118,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1mz", TILEGX_OPC_V1MZ, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5098,7 +5137,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1sadau", TILEGX_OPC_V1SADAU, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5117,7 +5156,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1sadu", TILEGX_OPC_V1SADU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5136,7 +5175,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1shl", TILEGX_OPC_V1SHL, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5155,7 +5194,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1shli", TILEGX_OPC_V1SHLI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5174,7 +5213,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1shrs", TILEGX_OPC_V1SHRS, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5193,7 +5232,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1shrsi", TILEGX_OPC_V1SHRSI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5212,7 +5251,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1shru", TILEGX_OPC_V1SHRU, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5231,7 +5270,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1shrui", TILEGX_OPC_V1SHRUI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5250,7 +5289,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1sub", TILEGX_OPC_V1SUB, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5269,7 +5308,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v1subuc", TILEGX_OPC_V1SUBUC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5288,7 +5327,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2add", TILEGX_OPC_V2ADD, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5307,7 +5346,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2addi", TILEGX_OPC_V2ADDI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -5326,7 +5365,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2addsc", TILEGX_OPC_V2ADDSC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5345,7 +5384,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2adiffs", TILEGX_OPC_V2ADIFFS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5364,7 +5403,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2avgs", TILEGX_OPC_V2AVGS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5383,7 +5422,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2cmpeq", TILEGX_OPC_V2CMPEQ, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5402,7 +5441,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2cmpeqi", TILEGX_OPC_V2CMPEQI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -5421,7 +5460,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2cmples", TILEGX_OPC_V2CMPLES, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5440,7 +5479,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2cmpleu", TILEGX_OPC_V2CMPLEU, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5459,7 +5498,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2cmplts", TILEGX_OPC_V2CMPLTS, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5478,7 +5517,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2cmpltsi", TILEGX_OPC_V2CMPLTSI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -5497,7 +5536,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2cmpltu", TILEGX_OPC_V2CMPLTU, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5516,7 +5555,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2cmpltui", TILEGX_OPC_V2CMPLTUI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -5535,7 +5574,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2cmpne", TILEGX_OPC_V2CMPNE, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5554,7 +5593,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2dotp", TILEGX_OPC_V2DOTP, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5573,7 +5612,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2dotpa", TILEGX_OPC_V2DOTPA, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5592,7 +5631,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2int_h", TILEGX_OPC_V2INT_H, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5611,7 +5650,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2int_l", TILEGX_OPC_V2INT_L, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5630,7 +5669,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2maxs", TILEGX_OPC_V2MAXS, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5649,7 +5688,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2maxsi", TILEGX_OPC_V2MAXSI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -5668,7 +5707,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2mins", TILEGX_OPC_V2MINS, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5687,7 +5726,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2minsi", TILEGX_OPC_V2MINSI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -5706,7 +5745,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2mnz", TILEGX_OPC_V2MNZ, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5725,7 +5764,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2mulfsc", TILEGX_OPC_V2MULFSC, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5744,7 +5783,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2muls", TILEGX_OPC_V2MULS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5763,7 +5802,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2mults", TILEGX_OPC_V2MULTS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5782,7 +5821,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2mz", TILEGX_OPC_V2MZ, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5801,7 +5840,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2packh", TILEGX_OPC_V2PACKH, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5820,7 +5859,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2packl", TILEGX_OPC_V2PACKL, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5839,7 +5878,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2packuc", TILEGX_OPC_V2PACKUC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5858,7 +5897,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2sadas", TILEGX_OPC_V2SADAS, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5877,7 +5916,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2sadau", TILEGX_OPC_V2SADAU, 0x1, 3, TREG_ZERO, 1,
-    { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 23, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5896,7 +5935,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2sads", TILEGX_OPC_V2SADS, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5915,7 +5954,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2sadu", TILEGX_OPC_V2SADU, 0x1, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5934,7 +5973,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2shl", TILEGX_OPC_V2SHL, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5953,7 +5992,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2shli", TILEGX_OPC_V2SHLI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5972,7 +6011,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2shlsc", TILEGX_OPC_V2SHLSC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -5991,7 +6030,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2shrs", TILEGX_OPC_V2SHRS, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6010,7 +6049,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2shrsi", TILEGX_OPC_V2SHRSI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6029,7 +6068,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2shru", TILEGX_OPC_V2SHRU, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6048,7 +6087,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2shrui", TILEGX_OPC_V2SHRUI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 29 }, { 6, 7, 30 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6067,7 +6106,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2sub", TILEGX_OPC_V2SUB, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6086,7 +6125,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v2subsc", TILEGX_OPC_V2SUBSC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6105,7 +6144,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4add", TILEGX_OPC_V4ADD, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6124,7 +6163,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4addsc", TILEGX_OPC_V4ADDSC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6143,7 +6182,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4int_h", TILEGX_OPC_V4INT_H, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6162,7 +6201,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4int_l", TILEGX_OPC_V4INT_L, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6181,7 +6220,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4packsc", TILEGX_OPC_V4PACKSC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6200,7 +6239,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4shl", TILEGX_OPC_V4SHL, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6219,7 +6258,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4shlsc", TILEGX_OPC_V4SHLSC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6238,7 +6277,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4shrs", TILEGX_OPC_V4SHRS, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6257,7 +6296,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4shru", TILEGX_OPC_V4SHRU, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6276,7 +6315,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4sub", TILEGX_OPC_V4SUB, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6295,7 +6334,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "v4subsc", TILEGX_OPC_V4SUBSC, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6314,7 +6353,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "wh64", TILEGX_OPC_WH64, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -6333,7 +6372,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "xor", TILEGX_OPC_XOR, 0xf, 3, TREG_ZERO, 1,
-    { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
+    { { 8, 9, 16 }, { 6, 7, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ffc0000ULL,
@@ -6352,7 +6391,7 @@ const struct tilegx_opcode tilegx_opcodes[334] =
 #endif
   },
   { "xori", TILEGX_OPC_XORI, 0x3, 3, TREG_ZERO, 1,
-    { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 8, 9, 0 }, { 6, 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0xc00000007ff00000ULL,
@@ -6672,7 +6711,7 @@ static const unsigned short decode_X0_fsm[936] =
   TILEGX_OPC_INFOL,
 };
 
-static const unsigned short decode_X1_fsm[1206] =
+static const unsigned short decode_X1_fsm[1266] =
 {
   BITFIELD(53, 9) /* index 0 */,
   CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513),
@@ -6718,8 +6757,8 @@ static const unsigned short decode_X1_fsm[1206] =
   TILEGX_OPC_BLEZT, TILEGX_OPC_BLEZ, TILEGX_OPC_BLEZ, TILEGX_OPC_BLTZT,
   TILEGX_OPC_BLTZT, TILEGX_OPC_BLTZ, TILEGX_OPC_BLTZ, TILEGX_OPC_BNEZT,
   TILEGX_OPC_BNEZT, TILEGX_OPC_BNEZ, TILEGX_OPC_BNEZ, CHILD(528), CHILD(578),
-  CHILD(598), CHILD(663), CHILD(683), CHILD(688), CHILD(693), CHILD(698),
-  CHILD(703), CHILD(708), CHILD(713), CHILD(718), TILEGX_OPC_NONE,
+  CHILD(598), CHILD(703), CHILD(723), CHILD(728), CHILD(753), CHILD(758),
+  CHILD(763), CHILD(768), CHILD(773), CHILD(778), TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
@@ -6747,8 +6786,8 @@ static const unsigned short decode_X1_fsm[1206] =
   TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J,
   TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J,
   TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J,
-  CHILD(723), CHILD(740), CHILD(772), CHILD(789), CHILD(1108), CHILD(1125),
-  CHILD(1142), TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
+  CHILD(783), CHILD(800), CHILD(832), CHILD(849), CHILD(1168), CHILD(1185),
+  CHILD(1202), TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
@@ -6762,7 +6801,7 @@ static const unsigned short decode_X1_fsm[1206] =
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
-  TILEGX_OPC_NONE, TILEGX_OPC_NONE, CHILD(1159), TILEGX_OPC_NONE,
+  TILEGX_OPC_NONE, TILEGX_OPC_NONE, CHILD(1219), TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
@@ -6778,20 +6817,20 @@ static const unsigned short decode_X1_fsm[1206] =
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
-  TILEGX_OPC_NONE, TILEGX_OPC_NONE, CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176),
-  CHILD(1176),
+  TILEGX_OPC_NONE, TILEGX_OPC_NONE, CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236), CHILD(1236),
+  CHILD(1236),
   BITFIELD(37, 2) /* index 513 */,
   TILEGX_OPC_ADDLI, TILEGX_OPC_ADDLI, TILEGX_OPC_ADDLI, CHILD(518),
   BITFIELD(39, 2) /* index 518 */,
@@ -6851,68 +6890,96 @@ static const unsigned short decode_X1_fsm[1206] =
   TILEGX_OPC_LD2U_ADD, TILEGX_OPC_LD2U_ADD, TILEGX_OPC_LD2U_ADD,
   TILEGX_OPC_PREFETCH_ADD_L2,
   BITFIELD(31, 2) /* index 648 */,
-  TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, CHILD(653),
-  BITFIELD(33, 2) /* index 653 */,
-  TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, CHILD(658),
-  BITFIELD(35, 2) /* index 658 */,
-  TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD,
-  TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
-  BITFIELD(51, 2) /* index 663 */,
-  CHILD(668), TILEGX_OPC_LDNT1S_ADD, TILEGX_OPC_LDNT1U_ADD,
-  TILEGX_OPC_LDNT2S_ADD,
-  BITFIELD(31, 2) /* index 668 */,
-  TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, CHILD(673),
+  CHILD(653), CHILD(653), CHILD(653), CHILD(673),
+  BITFIELD(43, 2) /* index 653 */,
+  CHILD(658), TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD,
+  BITFIELD(45, 2) /* index 658 */,
+  CHILD(663), TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD,
+  BITFIELD(47, 2) /* index 663 */,
+  CHILD(668), TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD,
+  BITFIELD(49, 2) /* index 668 */,
+  TILEGX_OPC_LD4S_TLS, TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD,
+  TILEGX_OPC_LD4S_ADD,
   BITFIELD(33, 2) /* index 673 */,
-  TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, CHILD(678),
+  CHILD(653), CHILD(653), CHILD(653), CHILD(678),
   BITFIELD(35, 2) /* index 678 */,
+  CHILD(653), CHILD(653), CHILD(653), CHILD(683),
+  BITFIELD(43, 2) /* index 683 */,
+  CHILD(688), TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
+  TILEGX_OPC_PREFETCH_ADD_L3_FAULT, TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
+  BITFIELD(45, 2) /* index 688 */,
+  CHILD(693), TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
+  TILEGX_OPC_PREFETCH_ADD_L3_FAULT, TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
+  BITFIELD(47, 2) /* index 693 */,
+  CHILD(698), TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
+  TILEGX_OPC_PREFETCH_ADD_L3_FAULT, TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
+  BITFIELD(49, 2) /* index 698 */,
+  TILEGX_OPC_LD4S_TLS, TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
+  TILEGX_OPC_PREFETCH_ADD_L3_FAULT, TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
+  BITFIELD(51, 2) /* index 703 */,
+  CHILD(708), TILEGX_OPC_LDNT1S_ADD, TILEGX_OPC_LDNT1U_ADD,
+  TILEGX_OPC_LDNT2S_ADD,
+  BITFIELD(31, 2) /* index 708 */,
+  TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, CHILD(713),
+  BITFIELD(33, 2) /* index 713 */,
+  TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, CHILD(718),
+  BITFIELD(35, 2) /* index 718 */,
   TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD,
   TILEGX_OPC_PREFETCH_ADD_L3,
-  BITFIELD(51, 2) /* index 683 */,
+  BITFIELD(51, 2) /* index 723 */,
   TILEGX_OPC_LDNT2U_ADD, TILEGX_OPC_LDNT4S_ADD, TILEGX_OPC_LDNT4U_ADD,
   TILEGX_OPC_LDNT_ADD,
-  BITFIELD(51, 2) /* index 688 */,
-  TILEGX_OPC_LD_ADD, TILEGX_OPC_LDNA_ADD, TILEGX_OPC_MFSPR, TILEGX_OPC_MTSPR,
-  BITFIELD(51, 2) /* index 693 */,
+  BITFIELD(51, 2) /* index 728 */,
+  CHILD(733), TILEGX_OPC_LDNA_ADD, TILEGX_OPC_MFSPR, TILEGX_OPC_MTSPR,
+  BITFIELD(43, 2) /* index 733 */,
+  CHILD(738), TILEGX_OPC_LD_ADD, TILEGX_OPC_LD_ADD, TILEGX_OPC_LD_ADD,
+  BITFIELD(45, 2) /* index 738 */,
+  CHILD(743), TILEGX_OPC_LD_ADD, TILEGX_OPC_LD_ADD, TILEGX_OPC_LD_ADD,
+  BITFIELD(47, 2) /* index 743 */,
+  CHILD(748), TILEGX_OPC_LD_ADD, TILEGX_OPC_LD_ADD, TILEGX_OPC_LD_ADD,
+  BITFIELD(49, 2) /* index 748 */,
+  TILEGX_OPC_LD_TLS, TILEGX_OPC_LD_ADD, TILEGX_OPC_LD_ADD, TILEGX_OPC_LD_ADD,
+  BITFIELD(51, 2) /* index 753 */,
   TILEGX_OPC_ORI, TILEGX_OPC_ST1_ADD, TILEGX_OPC_ST2_ADD, TILEGX_OPC_ST4_ADD,
-  BITFIELD(51, 2) /* index 698 */,
+  BITFIELD(51, 2) /* index 758 */,
   TILEGX_OPC_STNT1_ADD, TILEGX_OPC_STNT2_ADD, TILEGX_OPC_STNT4_ADD,
   TILEGX_OPC_STNT_ADD,
-  BITFIELD(51, 2) /* index 703 */,
+  BITFIELD(51, 2) /* index 763 */,
   TILEGX_OPC_ST_ADD, TILEGX_OPC_V1ADDI, TILEGX_OPC_V1CMPEQI,
   TILEGX_OPC_V1CMPLTSI,
-  BITFIELD(51, 2) /* index 708 */,
+  BITFIELD(51, 2) /* index 768 */,
   TILEGX_OPC_V1CMPLTUI, TILEGX_OPC_V1MAXUI, TILEGX_OPC_V1MINUI,
   TILEGX_OPC_V2ADDI,
-  BITFIELD(51, 2) /* index 713 */,
+  BITFIELD(51, 2) /* index 773 */,
   TILEGX_OPC_V2CMPEQI, TILEGX_OPC_V2CMPLTSI, TILEGX_OPC_V2CMPLTUI,
   TILEGX_OPC_V2MAXSI,
-  BITFIELD(51, 2) /* index 718 */,
+  BITFIELD(51, 2) /* index 778 */,
   TILEGX_OPC_V2MINSI, TILEGX_OPC_XORI, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
-  BITFIELD(49, 4) /* index 723 */,
+  BITFIELD(49, 4) /* index 783 */,
   TILEGX_OPC_NONE, TILEGX_OPC_ADDXSC, TILEGX_OPC_ADDX, TILEGX_OPC_ADD,
   TILEGX_OPC_AND, TILEGX_OPC_CMPEQ, TILEGX_OPC_CMPEXCH4, TILEGX_OPC_CMPEXCH,
   TILEGX_OPC_CMPLES, TILEGX_OPC_CMPLEU, TILEGX_OPC_CMPLTS, TILEGX_OPC_CMPLTU,
   TILEGX_OPC_CMPNE, TILEGX_OPC_DBLALIGN2, TILEGX_OPC_DBLALIGN4,
   TILEGX_OPC_DBLALIGN6,
-  BITFIELD(49, 4) /* index 740 */,
+  BITFIELD(49, 4) /* index 800 */,
   TILEGX_OPC_EXCH4, TILEGX_OPC_EXCH, TILEGX_OPC_FETCHADD4,
   TILEGX_OPC_FETCHADDGEZ4, TILEGX_OPC_FETCHADDGEZ, TILEGX_OPC_FETCHADD,
   TILEGX_OPC_FETCHAND4, TILEGX_OPC_FETCHAND, TILEGX_OPC_FETCHOR4,
   TILEGX_OPC_FETCHOR, TILEGX_OPC_MNZ, TILEGX_OPC_MZ, TILEGX_OPC_NOR,
-  CHILD(757), TILEGX_OPC_ROTL, TILEGX_OPC_SHL1ADDX,
-  BITFIELD(43, 2) /* index 757 */,
-  TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, CHILD(762),
-  BITFIELD(45, 2) /* index 762 */,
-  TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, CHILD(767),
-  BITFIELD(47, 2) /* index 767 */,
+  CHILD(817), TILEGX_OPC_ROTL, TILEGX_OPC_SHL1ADDX,
+  BITFIELD(43, 2) /* index 817 */,
+  TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, CHILD(822),
+  BITFIELD(45, 2) /* index 822 */,
+  TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, CHILD(827),
+  BITFIELD(47, 2) /* index 827 */,
   TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_MOVE,
-  BITFIELD(49, 4) /* index 772 */,
+  BITFIELD(49, 4) /* index 832 */,
   TILEGX_OPC_SHL1ADD, TILEGX_OPC_SHL2ADDX, TILEGX_OPC_SHL2ADD,
   TILEGX_OPC_SHL3ADDX, TILEGX_OPC_SHL3ADD, TILEGX_OPC_SHLX, TILEGX_OPC_SHL,
   TILEGX_OPC_SHRS, TILEGX_OPC_SHRUX, TILEGX_OPC_SHRU, TILEGX_OPC_ST1,
   TILEGX_OPC_ST2, TILEGX_OPC_ST4, TILEGX_OPC_STNT1, TILEGX_OPC_STNT2,
   TILEGX_OPC_STNT4,
-  BITFIELD(46, 7) /* index 789 */,
+  BITFIELD(46, 7) /* index 849 */,
   TILEGX_OPC_STNT, TILEGX_OPC_STNT, TILEGX_OPC_STNT, TILEGX_OPC_STNT,
   TILEGX_OPC_STNT, TILEGX_OPC_STNT, TILEGX_OPC_STNT, TILEGX_OPC_STNT,
   TILEGX_OPC_ST, TILEGX_OPC_ST, TILEGX_OPC_ST, TILEGX_OPC_ST, TILEGX_OPC_ST,
@@ -6922,8 +6989,8 @@ static const unsigned short decode_X1_fsm[1206] =
   TILEGX_OPC_SUBX, TILEGX_OPC_SUBX, TILEGX_OPC_SUBX, TILEGX_OPC_SUBX,
   TILEGX_OPC_SUBX, TILEGX_OPC_SUBX, TILEGX_OPC_SUBX, TILEGX_OPC_SUB,
   TILEGX_OPC_SUB, TILEGX_OPC_SUB, TILEGX_OPC_SUB, TILEGX_OPC_SUB,
-  TILEGX_OPC_SUB, TILEGX_OPC_SUB, TILEGX_OPC_SUB, CHILD(918), CHILD(927),
-  CHILD(1006), CHILD(1090), CHILD(1099), TILEGX_OPC_NONE, TILEGX_OPC_NONE,
+  TILEGX_OPC_SUB, TILEGX_OPC_SUB, TILEGX_OPC_SUB, CHILD(978), CHILD(987),
+  CHILD(1066), CHILD(1150), CHILD(1159), TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_V1ADDUC, TILEGX_OPC_V1ADDUC, TILEGX_OPC_V1ADDUC,
   TILEGX_OPC_V1ADDUC, TILEGX_OPC_V1ADDUC, TILEGX_OPC_V1ADDUC,
   TILEGX_OPC_V1ADDUC, TILEGX_OPC_V1ADDUC, TILEGX_OPC_V1ADD, TILEGX_OPC_V1ADD,
@@ -6950,122 +7017,122 @@ static const unsigned short decode_X1_fsm[1206] =
   TILEGX_OPC_V1INT_L, TILEGX_OPC_V1INT_L, TILEGX_OPC_V1INT_L,
   TILEGX_OPC_V1INT_L, TILEGX_OPC_V1INT_L, TILEGX_OPC_V1INT_L,
   TILEGX_OPC_V1INT_L, TILEGX_OPC_V1INT_L,
-  BITFIELD(43, 3) /* index 918 */,
+  BITFIELD(43, 3) /* index 978 */,
   TILEGX_OPC_NONE, TILEGX_OPC_DRAIN, TILEGX_OPC_DTLBPR, TILEGX_OPC_FINV,
   TILEGX_OPC_FLUSHWB, TILEGX_OPC_FLUSH, TILEGX_OPC_FNOP, TILEGX_OPC_ICOH,
-  BITFIELD(43, 3) /* index 927 */,
-  CHILD(936), TILEGX_OPC_INV, TILEGX_OPC_IRET, TILEGX_OPC_JALRP,
-  TILEGX_OPC_JALR, TILEGX_OPC_JRP, TILEGX_OPC_JR, CHILD(991),
-  BITFIELD(31, 2) /* index 936 */,
-  CHILD(941), CHILD(966), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
-  BITFIELD(33, 2) /* index 941 */,
-  TILEGX_OPC_ILL, TILEGX_OPC_ILL, TILEGX_OPC_ILL, CHILD(946),
-  BITFIELD(35, 2) /* index 946 */,
-  TILEGX_OPC_ILL, CHILD(951), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
-  BITFIELD(37, 2) /* index 951 */,
-  TILEGX_OPC_ILL, CHILD(956), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
-  BITFIELD(39, 2) /* index 956 */,
-  TILEGX_OPC_ILL, CHILD(961), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
-  BITFIELD(41, 2) /* index 961 */,
+  BITFIELD(43, 3) /* index 987 */,
+  CHILD(996), TILEGX_OPC_INV, TILEGX_OPC_IRET, TILEGX_OPC_JALRP,
+  TILEGX_OPC_JALR, TILEGX_OPC_JRP, TILEGX_OPC_JR, CHILD(1051),
+  BITFIELD(31, 2) /* index 996 */,
+  CHILD(1001), CHILD(1026), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
+  BITFIELD(33, 2) /* index 1001 */,
+  TILEGX_OPC_ILL, TILEGX_OPC_ILL, TILEGX_OPC_ILL, CHILD(1006),
+  BITFIELD(35, 2) /* index 1006 */,
+  TILEGX_OPC_ILL, CHILD(1011), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
+  BITFIELD(37, 2) /* index 1011 */,
+  TILEGX_OPC_ILL, CHILD(1016), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
+  BITFIELD(39, 2) /* index 1016 */,
+  TILEGX_OPC_ILL, CHILD(1021), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
+  BITFIELD(41, 2) /* index 1021 */,
   TILEGX_OPC_ILL, TILEGX_OPC_ILL, TILEGX_OPC_BPT, TILEGX_OPC_ILL,
-  BITFIELD(33, 2) /* index 966 */,
-  TILEGX_OPC_ILL, TILEGX_OPC_ILL, TILEGX_OPC_ILL, CHILD(971),
-  BITFIELD(35, 2) /* index 971 */,
-  TILEGX_OPC_ILL, CHILD(976), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
-  BITFIELD(37, 2) /* index 976 */,
-  TILEGX_OPC_ILL, CHILD(981), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
-  BITFIELD(39, 2) /* index 981 */,
-  TILEGX_OPC_ILL, CHILD(986), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
-  BITFIELD(41, 2) /* index 986 */,
+  BITFIELD(33, 2) /* index 1026 */,
+  TILEGX_OPC_ILL, TILEGX_OPC_ILL, TILEGX_OPC_ILL, CHILD(1031),
+  BITFIELD(35, 2) /* index 1031 */,
+  TILEGX_OPC_ILL, CHILD(1036), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
+  BITFIELD(37, 2) /* index 1036 */,
+  TILEGX_OPC_ILL, CHILD(1041), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
+  BITFIELD(39, 2) /* index 1041 */,
+  TILEGX_OPC_ILL, CHILD(1046), TILEGX_OPC_ILL, TILEGX_OPC_ILL,
+  BITFIELD(41, 2) /* index 1046 */,
   TILEGX_OPC_ILL, TILEGX_OPC_ILL, TILEGX_OPC_RAISE, TILEGX_OPC_ILL,
-  BITFIELD(31, 2) /* index 991 */,
-  TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, CHILD(996),
-  BITFIELD(33, 2) /* index 996 */,
-  TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, CHILD(1001),
-  BITFIELD(35, 2) /* index 1001 */,
+  BITFIELD(31, 2) /* index 1051 */,
+  TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, CHILD(1056),
+  BITFIELD(33, 2) /* index 1056 */,
+  TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, CHILD(1061),
+  BITFIELD(35, 2) /* index 1061 */,
   TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, TILEGX_OPC_LD1S,
   TILEGX_OPC_PREFETCH_L1_FAULT,
-  BITFIELD(43, 3) /* index 1006 */,
-  CHILD(1015), CHILD(1030), CHILD(1045), CHILD(1060), CHILD(1075),
+  BITFIELD(43, 3) /* index 1066 */,
+  CHILD(1075), CHILD(1090), CHILD(1105), CHILD(1120), CHILD(1135),
   TILEGX_OPC_LDNA, TILEGX_OPC_LDNT1S, TILEGX_OPC_LDNT1U,
-  BITFIELD(31, 2) /* index 1015 */,
-  TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, CHILD(1020),
-  BITFIELD(33, 2) /* index 1020 */,
-  TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, CHILD(1025),
-  BITFIELD(35, 2) /* index 1025 */,
+  BITFIELD(31, 2) /* index 1075 */,
+  TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, CHILD(1080),
+  BITFIELD(33, 2) /* index 1080 */,
+  TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, CHILD(1085),
+  BITFIELD(35, 2) /* index 1085 */,
   TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, TILEGX_OPC_PREFETCH,
-  BITFIELD(31, 2) /* index 1030 */,
-  TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, CHILD(1035),
-  BITFIELD(33, 2) /* index 1035 */,
-  TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, CHILD(1040),
-  BITFIELD(35, 2) /* index 1040 */,
+  BITFIELD(31, 2) /* index 1090 */,
+  TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, CHILD(1095),
+  BITFIELD(33, 2) /* index 1095 */,
+  TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, CHILD(1100),
+  BITFIELD(35, 2) /* index 1100 */,
   TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, TILEGX_OPC_LD2S,
   TILEGX_OPC_PREFETCH_L2_FAULT,
-  BITFIELD(31, 2) /* index 1045 */,
-  TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, CHILD(1050),
-  BITFIELD(33, 2) /* index 1050 */,
-  TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, CHILD(1055),
-  BITFIELD(35, 2) /* index 1055 */,
+  BITFIELD(31, 2) /* index 1105 */,
+  TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, CHILD(1110),
+  BITFIELD(33, 2) /* index 1110 */,
+  TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, CHILD(1115),
+  BITFIELD(35, 2) /* index 1115 */,
   TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, TILEGX_OPC_PREFETCH_L2,
-  BITFIELD(31, 2) /* index 1060 */,
-  TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, CHILD(1065),
-  BITFIELD(33, 2) /* index 1065 */,
-  TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, CHILD(1070),
-  BITFIELD(35, 2) /* index 1070 */,
+  BITFIELD(31, 2) /* index 1120 */,
+  TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, CHILD(1125),
+  BITFIELD(33, 2) /* index 1125 */,
+  TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, CHILD(1130),
+  BITFIELD(35, 2) /* index 1130 */,
   TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, TILEGX_OPC_LD4S,
   TILEGX_OPC_PREFETCH_L3_FAULT,
-  BITFIELD(31, 2) /* index 1075 */,
-  TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, CHILD(1080),
-  BITFIELD(33, 2) /* index 1080 */,
-  TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, CHILD(1085),
-  BITFIELD(35, 2) /* index 1085 */,
+  BITFIELD(31, 2) /* index 1135 */,
+  TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, CHILD(1140),
+  BITFIELD(33, 2) /* index 1140 */,
+  TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, CHILD(1145),
+  BITFIELD(35, 2) /* index 1145 */,
   TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, TILEGX_OPC_PREFETCH_L3,
-  BITFIELD(43, 3) /* index 1090 */,
+  BITFIELD(43, 3) /* index 1150 */,
   TILEGX_OPC_LDNT2S, TILEGX_OPC_LDNT2U, TILEGX_OPC_LDNT4S, TILEGX_OPC_LDNT4U,
   TILEGX_OPC_LDNT, TILEGX_OPC_LD, TILEGX_OPC_LNK, TILEGX_OPC_MF,
-  BITFIELD(43, 3) /* index 1099 */,
+  BITFIELD(43, 3) /* index 1159 */,
   TILEGX_OPC_NAP, TILEGX_OPC_NOP, TILEGX_OPC_SWINT0, TILEGX_OPC_SWINT1,
   TILEGX_OPC_SWINT2, TILEGX_OPC_SWINT3, TILEGX_OPC_WH64, TILEGX_OPC_NONE,
-  BITFIELD(49, 4) /* index 1108 */,
+  BITFIELD(49, 4) /* index 1168 */,
   TILEGX_OPC_V1MAXU, TILEGX_OPC_V1MINU, TILEGX_OPC_V1MNZ, TILEGX_OPC_V1MZ,
   TILEGX_OPC_V1SHL, TILEGX_OPC_V1SHRS, TILEGX_OPC_V1SHRU, TILEGX_OPC_V1SUBUC,
   TILEGX_OPC_V1SUB, TILEGX_OPC_V2ADDSC, TILEGX_OPC_V2ADD, TILEGX_OPC_V2CMPEQ,
   TILEGX_OPC_V2CMPLES, TILEGX_OPC_V2CMPLEU, TILEGX_OPC_V2CMPLTS,
   TILEGX_OPC_V2CMPLTU,
-  BITFIELD(49, 4) /* index 1125 */,
+  BITFIELD(49, 4) /* index 1185 */,
   TILEGX_OPC_V2CMPNE, TILEGX_OPC_V2INT_H, TILEGX_OPC_V2INT_L,
   TILEGX_OPC_V2MAXS, TILEGX_OPC_V2MINS, TILEGX_OPC_V2MNZ, TILEGX_OPC_V2MZ,
   TILEGX_OPC_V2PACKH, TILEGX_OPC_V2PACKL, TILEGX_OPC_V2PACKUC,
   TILEGX_OPC_V2SHLSC, TILEGX_OPC_V2SHL, TILEGX_OPC_V2SHRS, TILEGX_OPC_V2SHRU,
   TILEGX_OPC_V2SUBSC, TILEGX_OPC_V2SUB,
-  BITFIELD(49, 4) /* index 1142 */,
+  BITFIELD(49, 4) /* index 1202 */,
   TILEGX_OPC_V4ADDSC, TILEGX_OPC_V4ADD, TILEGX_OPC_V4INT_H,
   TILEGX_OPC_V4INT_L, TILEGX_OPC_V4PACKSC, TILEGX_OPC_V4SHLSC,
   TILEGX_OPC_V4SHL, TILEGX_OPC_V4SHRS, TILEGX_OPC_V4SHRU, TILEGX_OPC_V4SUBSC,
   TILEGX_OPC_V4SUB, TILEGX_OPC_XOR, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE, TILEGX_OPC_NONE,
-  BITFIELD(49, 4) /* index 1159 */,
+  BITFIELD(49, 4) /* index 1219 */,
   TILEGX_OPC_NONE, TILEGX_OPC_ROTLI, TILEGX_OPC_SHLI, TILEGX_OPC_SHLXI,
   TILEGX_OPC_SHRSI, TILEGX_OPC_SHRUI, TILEGX_OPC_SHRUXI, TILEGX_OPC_V1SHLI,
   TILEGX_OPC_V1SHRSI, TILEGX_OPC_V1SHRUI, TILEGX_OPC_V2SHLI,
   TILEGX_OPC_V2SHRSI, TILEGX_OPC_V2SHRUI, TILEGX_OPC_NONE, TILEGX_OPC_NONE,
   TILEGX_OPC_NONE,
-  BITFIELD(31, 2) /* index 1176 */,
+  BITFIELD(31, 2) /* index 1236 */,
   TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI,
-  CHILD(1181),
-  BITFIELD(33, 2) /* index 1181 */,
+  CHILD(1241),
+  BITFIELD(33, 2) /* index 1241 */,
   TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI,
-  CHILD(1186),
-  BITFIELD(35, 2) /* index 1186 */,
+  CHILD(1246),
+  BITFIELD(35, 2) /* index 1246 */,
   TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI,
-  CHILD(1191),
-  BITFIELD(37, 2) /* index 1191 */,
+  CHILD(1251),
+  BITFIELD(37, 2) /* index 1251 */,
   TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI,
-  CHILD(1196),
-  BITFIELD(39, 2) /* index 1196 */,
+  CHILD(1256),
+  BITFIELD(39, 2) /* index 1256 */,
   TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI,
-  CHILD(1201),
-  BITFIELD(41, 2) /* index 1201 */,
+  CHILD(1261),
+  BITFIELD(41, 2) /* index 1261 */,
   TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI,
   TILEGX_OPC_INFOL,
 };
@@ -7328,22 +7395,22 @@ const struct tilegx_operand tilegx_operands[35] =
   {
     TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE),
     6, 0, 0, 1, 0, 0,
-    create_Dest_X0, get_Dest_X0
+    create_Dest_X1, get_Dest_X1
   },
   {
     TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE),
     6, 0, 1, 0, 0, 0,
-    create_SrcA_X0, get_SrcA_X0
+    create_SrcA_X1, get_SrcA_X1
   },
   {
     TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE),
     6, 0, 0, 1, 0, 0,
-    create_Dest_X1, get_Dest_X1
+    create_Dest_X0, get_Dest_X0
   },
   {
     TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE),
     6, 0, 1, 0, 0, 0,
-    create_SrcA_X1, get_SrcA_X1
+    create_SrcA_X0, get_SrcA_X0
   },
   {
     TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE),
diff --git a/opcodes/tilepro-dis.c b/opcodes/tilepro-dis.c
index bf9910c..a0a8c9a 100644
--- a/opcodes/tilepro-dis.c
+++ b/opcodes/tilepro-dis.c
@@ -1,5 +1,5 @@
 /* tilepro-dis.c.  Disassembly routines for the TILEPro architecture.
-   Copyright 2011 Free Software Foundation, Inc.
+   Copyright 2011, 2012  Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
 
@@ -18,12 +18,12 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include <stddef.h>
 #include <assert.h>
 #include "bfd.h"
 #include "elf/tilepro.h"
 #include "elf-bfd.h"
-#include "sysdep.h"
 #include "dis-asm.h"
 #include "opcode/tilepro.h"
 
diff --git a/opcodes/tilepro-opc.c b/opcodes/tilepro-opc.c
index c3f6be4..eca7280 100644
--- a/opcodes/tilepro-opc.c
+++ b/opcodes/tilepro-opc.c
@@ -17,9 +17,10 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
+
 /* This define is BFD_RELOC_##x for real bfd, or -1 for everyone else.  */
 #define BFD_RELOC(x) BFD_RELOC_##x
-
 #include "bfd.h"
 
 /* Special registers.  */
@@ -41,7 +42,7 @@
 #include <stddef.h>
 #endif
 
-const struct tilepro_opcode tilepro_opcodes[395] =
+const struct tilepro_opcode tilepro_opcodes[397] =
 {
  { "bpt", TILEPRO_OPC_BPT, 0x2, 0, TREG_ZERO, 0,
     { { 0, }, {  }, { 0, }, { 0, }, { 0, } },
@@ -138,8 +139,46 @@ const struct tilepro_opcode tilepro_opcodes[395] =
     }
 #endif
   },
+  { "lw_tls", TILEPRO_OPC_LW_TLS, 0x2, 3, TREG_ZERO, 1,
+    { { 0, }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
+#ifndef DISASM_ONLY
+    {
+      0ULL,
+      0xfffff80000000000ULL,
+      0ULL,
+      0ULL,
+      0ULL
+    },
+    {
+      -1ULL,
+      0x30d0000000000000ULL,
+      -1ULL,
+      -1ULL,
+      -1ULL
+    }
+#endif
+  },
+  { "lw_tls.sn", TILEPRO_OPC_LW_TLS_SN, 0x2, 3, TREG_SN, 1,
+    { { 0, }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
+#ifndef DISASM_ONLY
+    {
+      0ULL,
+      0xfffff80000000000ULL,
+      0ULL,
+      0ULL,
+      0ULL
+    },
+    {
+      -1ULL,
+      0x34d0000000000000ULL,
+      -1ULL,
+      -1ULL,
+      -1ULL
+    }
+#endif
+  },
   { "move", TILEPRO_OPC_MOVE, 0xf, 2, TREG_ZERO, 1,
-    { { 7, 8 }, { 9, 10 }, { 11, 12 }, { 13, 14 }, { 0, } },
+    { { 9, 10 }, { 7, 8 }, { 11, 12 }, { 13, 14 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -158,7 +197,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "move.sn", TILEPRO_OPC_MOVE_SN, 0x3, 2, TREG_SN, 1,
-    { { 7, 8 }, { 9, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10 }, { 7, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -177,7 +216,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "movei", TILEPRO_OPC_MOVEI, 0xf, 2, TREG_ZERO, 1,
-    { { 7, 0 }, { 9, 1 }, { 11, 2 }, { 13, 3 }, { 0, } },
+    { { 9, 0 }, { 7, 1 }, { 11, 2 }, { 13, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00fc0ULL,
@@ -196,7 +235,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "movei.sn", TILEPRO_OPC_MOVEI_SN, 0x3, 2, TREG_SN, 1,
-    { { 7, 0 }, { 9, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 0 }, { 7, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00fc0ULL,
@@ -215,7 +254,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "moveli", TILEPRO_OPC_MOVELI, 0x3, 2, TREG_ZERO, 1,
-    { { 7, 4 }, { 9, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 4 }, { 7, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x8000000070000fc0ULL,
@@ -234,7 +273,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "moveli.sn", TILEPRO_OPC_MOVELI_SN, 0x3, 2, TREG_SN, 1,
-    { { 7, 4 }, { 9, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 4 }, { 7, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x8000000070000fc0ULL,
@@ -253,7 +292,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "movelis", TILEPRO_OPC_MOVELIS, 0x3, 2, TREG_SN, 1,
-    { { 7, 4 }, { 9, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 4 }, { 7, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x8000000070000fc0ULL,
@@ -272,7 +311,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "prefetch", TILEPRO_OPC_PREFETCH, 0x12, 1, TREG_ZERO, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 15 } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 15 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -310,7 +349,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "add", TILEPRO_OPC_ADD, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -329,7 +368,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "add.sn", TILEPRO_OPC_ADD_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -348,7 +387,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addb", TILEPRO_OPC_ADDB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -367,7 +406,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addb.sn", TILEPRO_OPC_ADDB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -386,7 +425,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addbs_u", TILEPRO_OPC_ADDBS_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -405,7 +444,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addbs_u.sn", TILEPRO_OPC_ADDBS_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -424,7 +463,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addh", TILEPRO_OPC_ADDH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -443,7 +482,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addh.sn", TILEPRO_OPC_ADDH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -462,7 +501,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addhs", TILEPRO_OPC_ADDHS, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -481,7 +520,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addhs.sn", TILEPRO_OPC_ADDHS_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -500,7 +539,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addi", TILEPRO_OPC_ADDI, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -519,7 +558,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addi.sn", TILEPRO_OPC_ADDI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -538,7 +577,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addib", TILEPRO_OPC_ADDIB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -557,7 +596,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addib.sn", TILEPRO_OPC_ADDIB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -576,7 +615,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addih", TILEPRO_OPC_ADDIH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -595,7 +634,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addih.sn", TILEPRO_OPC_ADDIH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -614,7 +653,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addli", TILEPRO_OPC_ADDLI, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 4 }, { 9, 10, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 4 }, { 7, 8, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x8000000070000000ULL,
@@ -633,7 +672,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addli.sn", TILEPRO_OPC_ADDLI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 4 }, { 9, 10, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 4 }, { 7, 8, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x8000000070000000ULL,
@@ -652,7 +691,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "addlis", TILEPRO_OPC_ADDLIS, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 4 }, { 9, 10, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 4 }, { 7, 8, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x8000000070000000ULL,
@@ -671,7 +710,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "adds", TILEPRO_OPC_ADDS, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -690,7 +729,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "adds.sn", TILEPRO_OPC_ADDS_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -709,7 +748,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "adiffb_u", TILEPRO_OPC_ADIFFB_U, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -728,7 +767,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "adiffb_u.sn", TILEPRO_OPC_ADIFFB_U_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -747,7 +786,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "adiffh", TILEPRO_OPC_ADIFFH, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -766,7 +805,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "adiffh.sn", TILEPRO_OPC_ADIFFH_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -785,7 +824,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "and", TILEPRO_OPC_AND, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -804,7 +843,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "and.sn", TILEPRO_OPC_AND_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -823,7 +862,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "andi", TILEPRO_OPC_ANDI, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -842,7 +881,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "andi.sn", TILEPRO_OPC_ANDI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -861,7 +900,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "auli", TILEPRO_OPC_AULI, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 4 }, { 9, 10, 5 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 4 }, { 7, 8, 5 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x8000000070000000ULL,
@@ -880,7 +919,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "avgb_u", TILEPRO_OPC_AVGB_U, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -899,7 +938,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "avgb_u.sn", TILEPRO_OPC_AVGB_U_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -918,7 +957,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "avgh", TILEPRO_OPC_AVGH, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -937,7 +976,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "avgh.sn", TILEPRO_OPC_AVGH_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -956,7 +995,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bbns", TILEPRO_OPC_BBNS, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -975,7 +1014,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bbns.sn", TILEPRO_OPC_BBNS_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -994,7 +1033,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bbnst", TILEPRO_OPC_BBNST, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1013,7 +1052,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bbnst.sn", TILEPRO_OPC_BBNST_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1032,7 +1071,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bbs", TILEPRO_OPC_BBS, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1051,7 +1090,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bbs.sn", TILEPRO_OPC_BBS_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1070,7 +1109,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bbst", TILEPRO_OPC_BBST, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1089,7 +1128,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bbst.sn", TILEPRO_OPC_BBST_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1108,7 +1147,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bgez", TILEPRO_OPC_BGEZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1127,7 +1166,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bgez.sn", TILEPRO_OPC_BGEZ_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1146,7 +1185,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bgezt", TILEPRO_OPC_BGEZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1165,7 +1204,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bgezt.sn", TILEPRO_OPC_BGEZT_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1184,7 +1223,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bgz", TILEPRO_OPC_BGZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1203,7 +1242,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bgz.sn", TILEPRO_OPC_BGZ_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1222,7 +1261,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bgzt", TILEPRO_OPC_BGZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1241,7 +1280,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bgzt.sn", TILEPRO_OPC_BGZT_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1260,7 +1299,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bitx", TILEPRO_OPC_BITX, 0x5, 2, TREG_ZERO, 1,
-    { { 7, 8 }, { 0, }, { 11, 12 }, { 0, }, { 0, } },
+    { { 9, 10 }, { 0, }, { 11, 12 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -1279,7 +1318,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bitx.sn", TILEPRO_OPC_BITX_SN, 0x1, 2, TREG_SN, 1,
-    { { 7, 8 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -1298,7 +1337,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "blez", TILEPRO_OPC_BLEZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1317,7 +1356,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "blez.sn", TILEPRO_OPC_BLEZ_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1336,7 +1375,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "blezt", TILEPRO_OPC_BLEZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1355,7 +1394,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "blezt.sn", TILEPRO_OPC_BLEZT_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1374,7 +1413,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "blz", TILEPRO_OPC_BLZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1393,7 +1432,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "blz.sn", TILEPRO_OPC_BLZ_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1412,7 +1451,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "blzt", TILEPRO_OPC_BLZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1431,7 +1470,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "blzt.sn", TILEPRO_OPC_BLZT_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1450,7 +1489,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bnz", TILEPRO_OPC_BNZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1469,7 +1508,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bnz.sn", TILEPRO_OPC_BNZ_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1488,7 +1527,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bnzt", TILEPRO_OPC_BNZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1507,7 +1546,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bnzt.sn", TILEPRO_OPC_BNZT_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1526,7 +1565,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bytex", TILEPRO_OPC_BYTEX, 0x5, 2, TREG_ZERO, 1,
-    { { 7, 8 }, { 0, }, { 11, 12 }, { 0, }, { 0, } },
+    { { 9, 10 }, { 0, }, { 11, 12 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -1545,7 +1584,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bytex.sn", TILEPRO_OPC_BYTEX_SN, 0x1, 2, TREG_SN, 1,
-    { { 7, 8 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -1564,7 +1603,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bz", TILEPRO_OPC_BZ, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1583,7 +1622,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bz.sn", TILEPRO_OPC_BZ_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1602,7 +1641,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bzt", TILEPRO_OPC_BZT, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1621,7 +1660,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "bzt.sn", TILEPRO_OPC_BZT_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 10, 20 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8, 20 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1640,7 +1679,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "clz", TILEPRO_OPC_CLZ, 0x5, 2, TREG_ZERO, 1,
-    { { 7, 8 }, { 0, }, { 11, 12 }, { 0, }, { 0, } },
+    { { 9, 10 }, { 0, }, { 11, 12 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -1659,7 +1698,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "clz.sn", TILEPRO_OPC_CLZ_SN, 0x1, 2, TREG_SN, 1,
-    { { 7, 8 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -1678,7 +1717,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "crc32_32", TILEPRO_OPC_CRC32_32, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -1697,7 +1736,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "crc32_32.sn", TILEPRO_OPC_CRC32_32_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -1716,7 +1755,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "crc32_8", TILEPRO_OPC_CRC32_8, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -1735,7 +1774,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "crc32_8.sn", TILEPRO_OPC_CRC32_8_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -1754,7 +1793,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "ctz", TILEPRO_OPC_CTZ, 0x5, 2, TREG_ZERO, 1,
-    { { 7, 8 }, { 0, }, { 11, 12 }, { 0, }, { 0, } },
+    { { 9, 10 }, { 0, }, { 11, 12 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -1773,7 +1812,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "ctz.sn", TILEPRO_OPC_CTZ_SN, 0x1, 2, TREG_SN, 1,
-    { { 7, 8 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -1811,7 +1850,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "dtlbpr", TILEPRO_OPC_DTLBPR, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1830,7 +1869,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "dword_align", TILEPRO_OPC_DWORD_ALIGN, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -1849,7 +1888,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "dword_align.sn", TILEPRO_OPC_DWORD_ALIGN_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -1868,7 +1907,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "finv", TILEPRO_OPC_FINV, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1887,7 +1926,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "flush", TILEPRO_OPC_FLUSH, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1925,7 +1964,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "icoh", TILEPRO_OPC_ICOH, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -1963,7 +2002,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "inthb", TILEPRO_OPC_INTHB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -1982,7 +2021,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "inthb.sn", TILEPRO_OPC_INTHB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2001,7 +2040,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "inthh", TILEPRO_OPC_INTHH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2020,7 +2059,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "inthh.sn", TILEPRO_OPC_INTHH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2039,7 +2078,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "intlb", TILEPRO_OPC_INTLB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2058,7 +2097,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "intlb.sn", TILEPRO_OPC_INTLB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2077,7 +2116,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "intlh", TILEPRO_OPC_INTLH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2096,7 +2135,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "intlh.sn", TILEPRO_OPC_INTLH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2115,7 +2154,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "inv", TILEPRO_OPC_INV, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2191,7 +2230,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "jalr", TILEPRO_OPC_JALR, 0x2, 1, TREG_LR, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2210,7 +2249,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "jalrp", TILEPRO_OPC_JALRP, 0x2, 1, TREG_LR, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2267,7 +2306,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "jr", TILEPRO_OPC_JR, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2286,7 +2325,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "jrp", TILEPRO_OPC_JRP, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2305,7 +2344,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lb", TILEPRO_OPC_LB, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 23, 15 } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 23, 15 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2324,7 +2363,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lb.sn", TILEPRO_OPC_LB_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2343,7 +2382,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lb_u", TILEPRO_OPC_LB_U, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 23, 15 } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 23, 15 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2362,7 +2401,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lb_u.sn", TILEPRO_OPC_LB_U_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2381,7 +2420,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lbadd", TILEPRO_OPC_LBADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2400,7 +2439,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lbadd.sn", TILEPRO_OPC_LBADD_SN, 0x2, 3, TREG_SN, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2419,7 +2458,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lbadd_u", TILEPRO_OPC_LBADD_U, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2438,7 +2477,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lbadd_u.sn", TILEPRO_OPC_LBADD_U_SN, 0x2, 3, TREG_SN, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2457,7 +2496,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lh", TILEPRO_OPC_LH, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 23, 15 } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 23, 15 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2476,7 +2515,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lh.sn", TILEPRO_OPC_LH_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2495,7 +2534,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lh_u", TILEPRO_OPC_LH_U, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 23, 15 } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 23, 15 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2514,7 +2553,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lh_u.sn", TILEPRO_OPC_LH_U_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2533,7 +2572,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lhadd", TILEPRO_OPC_LHADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2552,7 +2591,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lhadd.sn", TILEPRO_OPC_LHADD_SN, 0x2, 3, TREG_SN, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2571,7 +2610,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lhadd_u", TILEPRO_OPC_LHADD_U, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2590,7 +2629,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lhadd_u.sn", TILEPRO_OPC_LHADD_U_SN, 0x2, 3, TREG_SN, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2609,7 +2648,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lnk", TILEPRO_OPC_LNK, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2628,7 +2667,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lnk.sn", TILEPRO_OPC_LNK_SN, 0x2, 1, TREG_SN, 1,
-    { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2647,7 +2686,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lw", TILEPRO_OPC_LW, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 23, 15 } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 23, 15 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2666,7 +2705,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lw.sn", TILEPRO_OPC_LW_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2685,7 +2724,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lw_na", TILEPRO_OPC_LW_NA, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2704,7 +2743,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lw_na.sn", TILEPRO_OPC_LW_NA_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2723,7 +2762,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lwadd", TILEPRO_OPC_LWADD, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2742,7 +2781,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lwadd.sn", TILEPRO_OPC_LWADD_SN, 0x2, 3, TREG_SN, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2761,7 +2800,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lwadd_na", TILEPRO_OPC_LWADD_NA, 0x2, 3, TREG_ZERO, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2780,7 +2819,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "lwadd_na.sn", TILEPRO_OPC_LWADD_NA_SN, 0x2, 3, TREG_SN, 1,
-    { { 0, }, { 9, 24, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 24, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2799,7 +2838,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "maxb_u", TILEPRO_OPC_MAXB_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2818,7 +2857,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "maxb_u.sn", TILEPRO_OPC_MAXB_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2837,7 +2876,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "maxh", TILEPRO_OPC_MAXH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2856,7 +2895,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "maxh.sn", TILEPRO_OPC_MAXH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -2875,7 +2914,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "maxib_u", TILEPRO_OPC_MAXIB_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -2894,7 +2933,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "maxib_u.sn", TILEPRO_OPC_MAXIB_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -2913,7 +2952,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "maxih", TILEPRO_OPC_MAXIH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -2932,7 +2971,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "maxih.sn", TILEPRO_OPC_MAXIH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -2970,7 +3009,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mfspr", TILEPRO_OPC_MFSPR, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 25 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 25 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -2989,7 +3028,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "minb_u", TILEPRO_OPC_MINB_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3008,7 +3047,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "minb_u.sn", TILEPRO_OPC_MINB_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3027,7 +3066,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "minh", TILEPRO_OPC_MINH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3046,7 +3085,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "minh.sn", TILEPRO_OPC_MINH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3065,7 +3104,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "minib_u", TILEPRO_OPC_MINIB_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -3084,7 +3123,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "minib_u.sn", TILEPRO_OPC_MINIB_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -3103,7 +3142,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "minih", TILEPRO_OPC_MINIH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -3122,7 +3161,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "minih.sn", TILEPRO_OPC_MINIH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -3141,7 +3180,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mm", TILEPRO_OPC_MM, 0x3, 5, TREG_ZERO, 1,
-    { { 7, 8, 16, 26, 27 }, { 9, 10, 17, 28, 29 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16, 26, 27 }, { 7, 8, 17, 28, 29 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x8000000070000000ULL,
@@ -3160,7 +3199,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mnz", TILEPRO_OPC_MNZ, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3179,7 +3218,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mnz.sn", TILEPRO_OPC_MNZ_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3198,7 +3237,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mnzb", TILEPRO_OPC_MNZB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3217,7 +3256,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mnzb.sn", TILEPRO_OPC_MNZB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3236,7 +3275,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mnzh", TILEPRO_OPC_MNZH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3255,7 +3294,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mnzh.sn", TILEPRO_OPC_MNZH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3274,7 +3313,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mtspr", TILEPRO_OPC_MTSPR, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 30, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 30, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -3293,7 +3332,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhh_ss", TILEPRO_OPC_MULHH_SS, 0x5, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 11, 12, 18 }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 11, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3312,7 +3351,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhh_ss.sn", TILEPRO_OPC_MULHH_SS_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3331,7 +3370,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhh_su", TILEPRO_OPC_MULHH_SU, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3350,7 +3389,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhh_su.sn", TILEPRO_OPC_MULHH_SU_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3369,7 +3408,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhh_uu", TILEPRO_OPC_MULHH_UU, 0x5, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 11, 12, 18 }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 11, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3388,7 +3427,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhh_uu.sn", TILEPRO_OPC_MULHH_UU_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3407,7 +3446,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhha_ss", TILEPRO_OPC_MULHHA_SS, 0x5, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3426,7 +3465,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhha_ss.sn", TILEPRO_OPC_MULHHA_SS_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3445,7 +3484,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhha_su", TILEPRO_OPC_MULHHA_SU, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3464,7 +3503,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhha_su.sn", TILEPRO_OPC_MULHHA_SU_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3483,7 +3522,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhha_uu", TILEPRO_OPC_MULHHA_UU, 0x5, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3502,7 +3541,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhha_uu.sn", TILEPRO_OPC_MULHHA_UU_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3521,7 +3560,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhhsa_uu", TILEPRO_OPC_MULHHSA_UU, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3540,7 +3579,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhhsa_uu.sn", TILEPRO_OPC_MULHHSA_UU_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3559,7 +3598,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhl_ss", TILEPRO_OPC_MULHL_SS, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3578,7 +3617,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhl_ss.sn", TILEPRO_OPC_MULHL_SS_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3597,7 +3636,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhl_su", TILEPRO_OPC_MULHL_SU, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3616,7 +3655,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhl_su.sn", TILEPRO_OPC_MULHL_SU_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3635,7 +3674,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhl_us", TILEPRO_OPC_MULHL_US, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3654,7 +3693,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhl_us.sn", TILEPRO_OPC_MULHL_US_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3673,7 +3712,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhl_uu", TILEPRO_OPC_MULHL_UU, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3692,7 +3731,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhl_uu.sn", TILEPRO_OPC_MULHL_UU_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3711,7 +3750,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhla_ss", TILEPRO_OPC_MULHLA_SS, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3730,7 +3769,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhla_ss.sn", TILEPRO_OPC_MULHLA_SS_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3749,7 +3788,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhla_su", TILEPRO_OPC_MULHLA_SU, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3768,7 +3807,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhla_su.sn", TILEPRO_OPC_MULHLA_SU_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3787,7 +3826,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhla_us", TILEPRO_OPC_MULHLA_US, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3806,7 +3845,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhla_us.sn", TILEPRO_OPC_MULHLA_US_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3825,7 +3864,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhla_uu", TILEPRO_OPC_MULHLA_UU, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3844,7 +3883,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhla_uu.sn", TILEPRO_OPC_MULHLA_UU_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3863,7 +3902,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhlsa_uu", TILEPRO_OPC_MULHLSA_UU, 0x5, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3882,7 +3921,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulhlsa_uu.sn", TILEPRO_OPC_MULHLSA_UU_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3901,7 +3940,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulll_ss", TILEPRO_OPC_MULLL_SS, 0x5, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 11, 12, 18 }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 11, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3920,7 +3959,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulll_ss.sn", TILEPRO_OPC_MULLL_SS_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3939,7 +3978,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulll_su", TILEPRO_OPC_MULLL_SU, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3958,7 +3997,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulll_su.sn", TILEPRO_OPC_MULLL_SU_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3977,7 +4016,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulll_uu", TILEPRO_OPC_MULLL_UU, 0x5, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 11, 12, 18 }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 11, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -3996,7 +4035,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulll_uu.sn", TILEPRO_OPC_MULLL_UU_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4015,7 +4054,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mullla_ss", TILEPRO_OPC_MULLLA_SS, 0x5, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4034,7 +4073,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mullla_ss.sn", TILEPRO_OPC_MULLLA_SS_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4053,7 +4092,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mullla_su", TILEPRO_OPC_MULLLA_SU, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4072,7 +4111,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mullla_su.sn", TILEPRO_OPC_MULLLA_SU_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4091,7 +4130,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mullla_uu", TILEPRO_OPC_MULLLA_UU, 0x5, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4110,7 +4149,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mullla_uu.sn", TILEPRO_OPC_MULLLA_UU_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4129,7 +4168,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulllsa_uu", TILEPRO_OPC_MULLLSA_UU, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4148,7 +4187,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mulllsa_uu.sn", TILEPRO_OPC_MULLLSA_UU_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4167,7 +4206,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mvnz", TILEPRO_OPC_MVNZ, 0x5, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4186,7 +4225,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mvnz.sn", TILEPRO_OPC_MVNZ_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4205,7 +4244,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mvz", TILEPRO_OPC_MVZ, 0x5, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 31, 12, 18 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4224,7 +4263,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mvz.sn", TILEPRO_OPC_MVZ_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4243,7 +4282,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mz", TILEPRO_OPC_MZ, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4262,7 +4301,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mz.sn", TILEPRO_OPC_MZ_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4281,7 +4320,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mzb", TILEPRO_OPC_MZB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4300,7 +4339,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mzb.sn", TILEPRO_OPC_MZB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4319,7 +4358,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mzh", TILEPRO_OPC_MZH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4338,7 +4377,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "mzh.sn", TILEPRO_OPC_MZH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4395,7 +4434,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "nor", TILEPRO_OPC_NOR, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4414,7 +4453,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "nor.sn", TILEPRO_OPC_NOR_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4433,7 +4472,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "or", TILEPRO_OPC_OR, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4452,7 +4491,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "or.sn", TILEPRO_OPC_OR_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4471,7 +4510,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "ori", TILEPRO_OPC_ORI, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -4490,7 +4529,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "ori.sn", TILEPRO_OPC_ORI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -4509,7 +4548,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "packbs_u", TILEPRO_OPC_PACKBS_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4528,7 +4567,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "packbs_u.sn", TILEPRO_OPC_PACKBS_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4547,7 +4586,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "packhb", TILEPRO_OPC_PACKHB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4566,7 +4605,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "packhb.sn", TILEPRO_OPC_PACKHB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4585,7 +4624,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "packhs", TILEPRO_OPC_PACKHS, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4604,7 +4643,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "packhs.sn", TILEPRO_OPC_PACKHS_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4623,7 +4662,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "packlb", TILEPRO_OPC_PACKLB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4642,7 +4681,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "packlb.sn", TILEPRO_OPC_PACKLB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4661,7 +4700,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "pcnt", TILEPRO_OPC_PCNT, 0x5, 2, TREG_ZERO, 1,
-    { { 7, 8 }, { 0, }, { 11, 12 }, { 0, }, { 0, } },
+    { { 9, 10 }, { 0, }, { 11, 12 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -4680,7 +4719,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "pcnt.sn", TILEPRO_OPC_PCNT_SN, 0x1, 2, TREG_SN, 1,
-    { { 7, 8 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -4699,7 +4738,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "rl", TILEPRO_OPC_RL, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4718,7 +4757,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "rl.sn", TILEPRO_OPC_RL_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4737,7 +4776,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "rli", TILEPRO_OPC_RLI, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 11, 12, 34 }, { 13, 14, 35 }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 11, 12, 34 }, { 13, 14, 35 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -4756,7 +4795,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "rli.sn", TILEPRO_OPC_RLI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -4775,7 +4814,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "s1a", TILEPRO_OPC_S1A, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4794,7 +4833,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "s1a.sn", TILEPRO_OPC_S1A_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4813,7 +4852,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "s2a", TILEPRO_OPC_S2A, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4832,7 +4871,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "s2a.sn", TILEPRO_OPC_S2A_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4851,7 +4890,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "s3a", TILEPRO_OPC_S3A, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4870,7 +4909,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "s3a.sn", TILEPRO_OPC_S3A_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4889,7 +4928,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadab_u", TILEPRO_OPC_SADAB_U, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4908,7 +4947,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadab_u.sn", TILEPRO_OPC_SADAB_U_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4927,7 +4966,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadah", TILEPRO_OPC_SADAH, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4946,7 +4985,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadah.sn", TILEPRO_OPC_SADAH_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4965,7 +5004,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadah_u", TILEPRO_OPC_SADAH_U, 0x1, 3, TREG_ZERO, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -4984,7 +5023,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadah_u.sn", TILEPRO_OPC_SADAH_U_SN, 0x1, 3, TREG_SN, 1,
-    { { 21, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5003,7 +5042,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadb_u", TILEPRO_OPC_SADB_U, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5022,7 +5061,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadb_u.sn", TILEPRO_OPC_SADB_U_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5041,7 +5080,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadh", TILEPRO_OPC_SADH, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5060,7 +5099,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadh.sn", TILEPRO_OPC_SADH_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5079,7 +5118,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadh_u", TILEPRO_OPC_SADH_U, 0x1, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5098,7 +5137,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sadh_u.sn", TILEPRO_OPC_SADH_U_SN, 0x1, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5117,7 +5156,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sb", TILEPRO_OPC_SB, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 17 }, { 0, }, { 0, }, { 15, 36 } },
+    { { 0, }, { 8, 17 }, { 0, }, { 0, }, { 15, 36 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -5155,7 +5194,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seq", TILEPRO_OPC_SEQ, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5174,7 +5213,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seq.sn", TILEPRO_OPC_SEQ_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5193,7 +5232,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seqb", TILEPRO_OPC_SEQB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5212,7 +5251,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seqb.sn", TILEPRO_OPC_SEQB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5231,7 +5270,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seqh", TILEPRO_OPC_SEQH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5250,7 +5289,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seqh.sn", TILEPRO_OPC_SEQH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5269,7 +5308,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seqi", TILEPRO_OPC_SEQI, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -5288,7 +5327,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seqi.sn", TILEPRO_OPC_SEQI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -5307,7 +5346,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seqib", TILEPRO_OPC_SEQIB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -5326,7 +5365,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seqib.sn", TILEPRO_OPC_SEQIB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -5345,7 +5384,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seqih", TILEPRO_OPC_SEQIH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -5364,7 +5403,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "seqih.sn", TILEPRO_OPC_SEQIH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -5383,7 +5422,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sh", TILEPRO_OPC_SH, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 17 }, { 0, }, { 0, }, { 15, 36 } },
+    { { 0, }, { 8, 17 }, { 0, }, { 0, }, { 15, 36 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -5421,7 +5460,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shl", TILEPRO_OPC_SHL, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5440,7 +5479,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shl.sn", TILEPRO_OPC_SHL_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5459,7 +5498,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shlb", TILEPRO_OPC_SHLB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5478,7 +5517,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shlb.sn", TILEPRO_OPC_SHLB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5497,7 +5536,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shlh", TILEPRO_OPC_SHLH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5516,7 +5555,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shlh.sn", TILEPRO_OPC_SHLH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5535,7 +5574,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shli", TILEPRO_OPC_SHLI, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 11, 12, 34 }, { 13, 14, 35 }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 11, 12, 34 }, { 13, 14, 35 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5554,7 +5593,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shli.sn", TILEPRO_OPC_SHLI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5573,7 +5612,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shlib", TILEPRO_OPC_SHLIB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5592,7 +5631,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shlib.sn", TILEPRO_OPC_SHLIB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5611,7 +5650,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shlih", TILEPRO_OPC_SHLIH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5630,7 +5669,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shlih.sn", TILEPRO_OPC_SHLIH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5649,7 +5688,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shr", TILEPRO_OPC_SHR, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5668,7 +5707,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shr.sn", TILEPRO_OPC_SHR_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5687,7 +5726,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shrb", TILEPRO_OPC_SHRB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5706,7 +5745,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shrb.sn", TILEPRO_OPC_SHRB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5725,7 +5764,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shrh", TILEPRO_OPC_SHRH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5744,7 +5783,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shrh.sn", TILEPRO_OPC_SHRH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5763,7 +5802,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shri", TILEPRO_OPC_SHRI, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 11, 12, 34 }, { 13, 14, 35 }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 11, 12, 34 }, { 13, 14, 35 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5782,7 +5821,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shri.sn", TILEPRO_OPC_SHRI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5801,7 +5840,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shrib", TILEPRO_OPC_SHRIB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5820,7 +5859,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shrib.sn", TILEPRO_OPC_SHRIB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5839,7 +5878,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shrih", TILEPRO_OPC_SHRIH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5858,7 +5897,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "shrih.sn", TILEPRO_OPC_SHRIH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -5877,7 +5916,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slt", TILEPRO_OPC_SLT, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5896,7 +5935,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slt.sn", TILEPRO_OPC_SLT_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5915,7 +5954,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slt_u", TILEPRO_OPC_SLT_U, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5934,7 +5973,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slt_u.sn", TILEPRO_OPC_SLT_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5953,7 +5992,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltb", TILEPRO_OPC_SLTB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5972,7 +6011,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltb.sn", TILEPRO_OPC_SLTB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -5991,7 +6030,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltb_u", TILEPRO_OPC_SLTB_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6010,7 +6049,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltb_u.sn", TILEPRO_OPC_SLTB_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6029,7 +6068,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slte", TILEPRO_OPC_SLTE, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6048,7 +6087,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slte.sn", TILEPRO_OPC_SLTE_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6067,7 +6106,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slte_u", TILEPRO_OPC_SLTE_U, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6086,7 +6125,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slte_u.sn", TILEPRO_OPC_SLTE_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6105,7 +6144,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slteb", TILEPRO_OPC_SLTEB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6124,7 +6163,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slteb.sn", TILEPRO_OPC_SLTEB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6143,7 +6182,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slteb_u", TILEPRO_OPC_SLTEB_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6162,7 +6201,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slteb_u.sn", TILEPRO_OPC_SLTEB_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6181,7 +6220,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slteh", TILEPRO_OPC_SLTEH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6200,7 +6239,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slteh.sn", TILEPRO_OPC_SLTEH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6219,7 +6258,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slteh_u", TILEPRO_OPC_SLTEH_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6238,7 +6277,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slteh_u.sn", TILEPRO_OPC_SLTEH_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6257,7 +6296,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slth", TILEPRO_OPC_SLTH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6276,7 +6315,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slth.sn", TILEPRO_OPC_SLTH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6295,7 +6334,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slth_u", TILEPRO_OPC_SLTH_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6314,7 +6353,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slth_u.sn", TILEPRO_OPC_SLTH_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6333,7 +6372,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slti", TILEPRO_OPC_SLTI, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6352,7 +6391,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slti.sn", TILEPRO_OPC_SLTI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6371,7 +6410,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slti_u", TILEPRO_OPC_SLTI_U, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 11, 12, 2 }, { 13, 14, 3 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6390,7 +6429,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "slti_u.sn", TILEPRO_OPC_SLTI_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6409,7 +6448,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltib", TILEPRO_OPC_SLTIB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6428,7 +6467,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltib.sn", TILEPRO_OPC_SLTIB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6447,7 +6486,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltib_u", TILEPRO_OPC_SLTIB_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6466,7 +6505,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltib_u.sn", TILEPRO_OPC_SLTIB_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6485,7 +6524,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltih", TILEPRO_OPC_SLTIH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6504,7 +6543,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltih.sn", TILEPRO_OPC_SLTIH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6523,7 +6562,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltih_u", TILEPRO_OPC_SLTIH_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6542,7 +6581,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sltih_u.sn", TILEPRO_OPC_SLTIH_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -6561,7 +6600,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sne", TILEPRO_OPC_SNE, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6580,7 +6619,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sne.sn", TILEPRO_OPC_SNE_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6599,7 +6638,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sneb", TILEPRO_OPC_SNEB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6618,7 +6657,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sneb.sn", TILEPRO_OPC_SNEB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6637,7 +6676,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sneh", TILEPRO_OPC_SNEH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6656,7 +6695,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sneh.sn", TILEPRO_OPC_SNEH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6675,7 +6714,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sra", TILEPRO_OPC_SRA, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6694,7 +6733,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sra.sn", TILEPRO_OPC_SRA_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6713,7 +6752,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "srab", TILEPRO_OPC_SRAB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6732,7 +6771,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "srab.sn", TILEPRO_OPC_SRAB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6751,7 +6790,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "srah", TILEPRO_OPC_SRAH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6770,7 +6809,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "srah.sn", TILEPRO_OPC_SRAH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6789,7 +6828,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "srai", TILEPRO_OPC_SRAI, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 11, 12, 34 }, { 13, 14, 35 }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 11, 12, 34 }, { 13, 14, 35 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -6808,7 +6847,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "srai.sn", TILEPRO_OPC_SRAI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -6827,7 +6866,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sraib", TILEPRO_OPC_SRAIB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -6846,7 +6885,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sraib.sn", TILEPRO_OPC_SRAIB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -6865,7 +6904,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sraih", TILEPRO_OPC_SRAIH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -6884,7 +6923,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sraih.sn", TILEPRO_OPC_SRAIH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 32 }, { 9, 10, 33 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 32 }, { 7, 8, 33 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffe0000ULL,
@@ -6903,7 +6942,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sub", TILEPRO_OPC_SUB, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6922,7 +6961,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sub.sn", TILEPRO_OPC_SUB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6941,7 +6980,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "subb", TILEPRO_OPC_SUBB, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6960,7 +6999,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "subb.sn", TILEPRO_OPC_SUBB_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6979,7 +7018,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "subbs_u", TILEPRO_OPC_SUBBS_U, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -6998,7 +7037,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "subbs_u.sn", TILEPRO_OPC_SUBBS_U_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -7017,7 +7056,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "subh", TILEPRO_OPC_SUBH, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -7036,7 +7075,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "subh.sn", TILEPRO_OPC_SUBH_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -7055,7 +7094,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "subhs", TILEPRO_OPC_SUBHS, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -7074,7 +7113,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "subhs.sn", TILEPRO_OPC_SUBHS_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -7093,7 +7132,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "subs", TILEPRO_OPC_SUBS, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -7112,7 +7151,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "subs.sn", TILEPRO_OPC_SUBS_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -7131,7 +7170,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "sw", TILEPRO_OPC_SW, 0x12, 2, TREG_ZERO, 1,
-    { { 0, }, { 10, 17 }, { 0, }, { 0, }, { 15, 36 } },
+    { { 0, }, { 8, 17 }, { 0, }, { 0, }, { 15, 36 } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -7245,7 +7284,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "tblidxb0", TILEPRO_OPC_TBLIDXB0, 0x5, 2, TREG_ZERO, 1,
-    { { 21, 8 }, { 0, }, { 31, 12 }, { 0, }, { 0, } },
+    { { 21, 10 }, { 0, }, { 31, 12 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -7264,7 +7303,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "tblidxb0.sn", TILEPRO_OPC_TBLIDXB0_SN, 0x1, 2, TREG_SN, 1,
-    { { 21, 8 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -7283,7 +7322,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "tblidxb1", TILEPRO_OPC_TBLIDXB1, 0x5, 2, TREG_ZERO, 1,
-    { { 21, 8 }, { 0, }, { 31, 12 }, { 0, }, { 0, } },
+    { { 21, 10 }, { 0, }, { 31, 12 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -7302,7 +7341,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "tblidxb1.sn", TILEPRO_OPC_TBLIDXB1_SN, 0x1, 2, TREG_SN, 1,
-    { { 21, 8 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -7321,7 +7360,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "tblidxb2", TILEPRO_OPC_TBLIDXB2, 0x5, 2, TREG_ZERO, 1,
-    { { 21, 8 }, { 0, }, { 31, 12 }, { 0, }, { 0, } },
+    { { 21, 10 }, { 0, }, { 31, 12 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -7340,7 +7379,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "tblidxb2.sn", TILEPRO_OPC_TBLIDXB2_SN, 0x1, 2, TREG_SN, 1,
-    { { 21, 8 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -7359,7 +7398,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "tblidxb3", TILEPRO_OPC_TBLIDXB3, 0x5, 2, TREG_ZERO, 1,
-    { { 21, 8 }, { 0, }, { 31, 12 }, { 0, }, { 0, } },
+    { { 21, 10 }, { 0, }, { 31, 12 }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -7378,7 +7417,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "tblidxb3.sn", TILEPRO_OPC_TBLIDXB3_SN, 0x1, 2, TREG_SN, 1,
-    { { 21, 8 }, { 0, }, { 0, }, { 0, }, { 0, } },
+    { { 21, 10 }, { 0, }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffff000ULL,
@@ -7397,7 +7436,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "tns", TILEPRO_OPC_TNS, 0x2, 2, TREG_ZERO, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -7416,7 +7455,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "tns.sn", TILEPRO_OPC_TNS_SN, 0x2, 2, TREG_SN, 1,
-    { { 0, }, { 9, 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 7, 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -7435,7 +7474,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "wh64", TILEPRO_OPC_WH64, 0x2, 1, TREG_ZERO, 1,
-    { { 0, }, { 10 }, { 0, }, { 0, }, { 0, } },
+    { { 0, }, { 8 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0ULL,
@@ -7454,7 +7493,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "xor", TILEPRO_OPC_XOR, 0xf, 3, TREG_ZERO, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 11, 12, 18 }, { 13, 14, 19 }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -7473,7 +7512,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "xor.sn", TILEPRO_OPC_XOR_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 16 }, { 9, 10, 17 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 16 }, { 7, 8, 17 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ffc0000ULL,
@@ -7492,7 +7531,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "xori", TILEPRO_OPC_XORI, 0x3, 3, TREG_ZERO, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -7511,7 +7550,7 @@ const struct tilepro_opcode tilepro_opcodes[395] =
 #endif
   },
   { "xori.sn", TILEPRO_OPC_XORI_SN, 0x3, 3, TREG_SN, 1,
-    { { 7, 8, 0 }, { 9, 10, 1 }, { 0, }, { 0, }, { 0, } },
+    { { 9, 10, 0 }, { 7, 8, 1 }, { 0, }, { 0, }, { 0, } },
 #ifndef DISASM_ONLY
     {
       0x800000007ff00000ULL,
@@ -7935,7 +7974,7 @@ static const unsigned short decode_X0_fsm[1153] =
   TILEPRO_OPC_TBLIDXB3_SN, TILEPRO_OPC_NONE,
 };
 
-static const unsigned short decode_X1_fsm[1540] =
+static const unsigned short decode_X1_fsm[1580] =
 {
   BITFIELD(54, 9) /* index 0 */,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
@@ -7979,7 +8018,7 @@ static const unsigned short decode_X1_fsm[1540] =
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
-  CHILD(941), CHILD(950), CHILD(974), CHILD(983), TILEPRO_OPC_NONE,
+  CHILD(961), CHILD(970), CHILD(994), CHILD(1003), TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_MM,
@@ -7990,11 +8029,11 @@ static const unsigned short decode_X1_fsm[1540] =
   TILEPRO_OPC_MM, TILEPRO_OPC_MM, TILEPRO_OPC_MM, TILEPRO_OPC_MM,
   TILEPRO_OPC_MM, TILEPRO_OPC_MM, TILEPRO_OPC_MM, TILEPRO_OPC_MM,
   TILEPRO_OPC_MM, TILEPRO_OPC_MM, TILEPRO_OPC_MM, TILEPRO_OPC_MM,
-  TILEPRO_OPC_MM, TILEPRO_OPC_MM, TILEPRO_OPC_MM, CHILD(992),
+  TILEPRO_OPC_MM, TILEPRO_OPC_MM, TILEPRO_OPC_MM, CHILD(1032),
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
-  TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, CHILD(1334),
+  TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, CHILD(1374),
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
@@ -8223,43 +8262,62 @@ static const unsigned short decode_X1_fsm[1540] =
   TILEPRO_OPC_SLTI, TILEPRO_OPC_SLTI_U, TILEPRO_OPC_XORI, TILEPRO_OPC_LBADD,
   TILEPRO_OPC_LBADD_U,
   BITFIELD(51, 3) /* index 932 */,
-  TILEPRO_OPC_LHADD, TILEPRO_OPC_LHADD_U, TILEPRO_OPC_LWADD,
-  TILEPRO_OPC_LWADD_NA, TILEPRO_OPC_SBADD, TILEPRO_OPC_SHADD,
-  TILEPRO_OPC_SWADD, TILEPRO_OPC_NONE,
-  BITFIELD(51, 3) /* index 941 */,
+  TILEPRO_OPC_LHADD, TILEPRO_OPC_LHADD_U, CHILD(941), TILEPRO_OPC_LWADD_NA,
+  TILEPRO_OPC_SBADD, TILEPRO_OPC_SHADD, TILEPRO_OPC_SWADD, TILEPRO_OPC_NONE,
+  BITFIELD(43, 2) /* index 941 */,
+  CHILD(946), TILEPRO_OPC_LWADD, TILEPRO_OPC_LWADD, TILEPRO_OPC_LWADD,
+  BITFIELD(45, 2) /* index 946 */,
+  CHILD(951), TILEPRO_OPC_LWADD, TILEPRO_OPC_LWADD, TILEPRO_OPC_LWADD,
+  BITFIELD(47, 2) /* index 951 */,
+  CHILD(956), TILEPRO_OPC_LWADD, TILEPRO_OPC_LWADD, TILEPRO_OPC_LWADD,
+  BITFIELD(49, 2) /* index 956 */,
+  TILEPRO_OPC_LW_TLS, TILEPRO_OPC_LWADD, TILEPRO_OPC_LWADD, TILEPRO_OPC_LWADD,
+  BITFIELD(51, 3) /* index 961 */,
   TILEPRO_OPC_NONE, TILEPRO_OPC_ADDIB_SN, TILEPRO_OPC_ADDIH_SN,
   TILEPRO_OPC_ADDI_SN, TILEPRO_OPC_ANDI_SN, TILEPRO_OPC_MAXIB_U_SN,
   TILEPRO_OPC_MAXIH_SN, TILEPRO_OPC_MFSPR,
-  BITFIELD(51, 3) /* index 950 */,
-  TILEPRO_OPC_MINIB_U_SN, TILEPRO_OPC_MINIH_SN, TILEPRO_OPC_MTSPR, CHILD(959),
+  BITFIELD(51, 3) /* index 970 */,
+  TILEPRO_OPC_MINIB_U_SN, TILEPRO_OPC_MINIH_SN, TILEPRO_OPC_MTSPR, CHILD(979),
   TILEPRO_OPC_SEQIB_SN, TILEPRO_OPC_SEQIH_SN, TILEPRO_OPC_SEQI_SN,
   TILEPRO_OPC_SLTIB_SN,
-  BITFIELD(37, 2) /* index 959 */,
-  TILEPRO_OPC_ORI_SN, TILEPRO_OPC_ORI_SN, TILEPRO_OPC_ORI_SN, CHILD(964),
-  BITFIELD(39, 2) /* index 964 */,
-  TILEPRO_OPC_ORI_SN, TILEPRO_OPC_ORI_SN, TILEPRO_OPC_ORI_SN, CHILD(969),
-  BITFIELD(41, 2) /* index 969 */,
+  BITFIELD(37, 2) /* index 979 */,
+  TILEPRO_OPC_ORI_SN, TILEPRO_OPC_ORI_SN, TILEPRO_OPC_ORI_SN, CHILD(984),
+  BITFIELD(39, 2) /* index 984 */,
+  TILEPRO_OPC_ORI_SN, TILEPRO_OPC_ORI_SN, TILEPRO_OPC_ORI_SN, CHILD(989),
+  BITFIELD(41, 2) /* index 989 */,
   TILEPRO_OPC_ORI_SN, TILEPRO_OPC_ORI_SN, TILEPRO_OPC_ORI_SN,
   TILEPRO_OPC_MOVEI_SN,
-  BITFIELD(51, 3) /* index 974 */,
+  BITFIELD(51, 3) /* index 994 */,
   TILEPRO_OPC_SLTIB_U_SN, TILEPRO_OPC_SLTIH_SN, TILEPRO_OPC_SLTIH_U_SN,
   TILEPRO_OPC_SLTI_SN, TILEPRO_OPC_SLTI_U_SN, TILEPRO_OPC_XORI_SN,
   TILEPRO_OPC_LBADD_SN, TILEPRO_OPC_LBADD_U_SN,
-  BITFIELD(51, 3) /* index 983 */,
-  TILEPRO_OPC_LHADD_SN, TILEPRO_OPC_LHADD_U_SN, TILEPRO_OPC_LWADD_SN,
+  BITFIELD(51, 3) /* index 1003 */,
+  TILEPRO_OPC_LHADD_SN, TILEPRO_OPC_LHADD_U_SN, CHILD(1012),
   TILEPRO_OPC_LWADD_NA_SN, TILEPRO_OPC_SBADD, TILEPRO_OPC_SHADD,
   TILEPRO_OPC_SWADD, TILEPRO_OPC_NONE,
-  BITFIELD(46, 7) /* index 992 */,
+  BITFIELD(43, 2) /* index 1012 */,
+  CHILD(1017), TILEPRO_OPC_LWADD_SN, TILEPRO_OPC_LWADD_SN,
+  TILEPRO_OPC_LWADD_SN,
+  BITFIELD(45, 2) /* index 1017 */,
+  CHILD(1022), TILEPRO_OPC_LWADD_SN, TILEPRO_OPC_LWADD_SN,
+  TILEPRO_OPC_LWADD_SN,
+  BITFIELD(47, 2) /* index 1022 */,
+  CHILD(1027), TILEPRO_OPC_LWADD_SN, TILEPRO_OPC_LWADD_SN,
+  TILEPRO_OPC_LWADD_SN,
+  BITFIELD(49, 2) /* index 1027 */,
+  TILEPRO_OPC_LW_TLS_SN, TILEPRO_OPC_LWADD_SN, TILEPRO_OPC_LWADD_SN,
+  TILEPRO_OPC_LWADD_SN,
+  BITFIELD(46, 7) /* index 1032 */,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
-  CHILD(1121), CHILD(1121), CHILD(1121), CHILD(1121), CHILD(1124),
-  CHILD(1124), CHILD(1124), CHILD(1124), CHILD(1127), CHILD(1127),
-  CHILD(1127), CHILD(1127), CHILD(1130), CHILD(1130), CHILD(1130),
-  CHILD(1130), CHILD(1133), CHILD(1133), CHILD(1133), CHILD(1133),
-  CHILD(1136), CHILD(1136), CHILD(1136), CHILD(1136), CHILD(1139),
-  CHILD(1139), CHILD(1139), CHILD(1139), CHILD(1142), CHILD(1142),
-  CHILD(1142), CHILD(1142), CHILD(1145), CHILD(1145), CHILD(1145),
-  CHILD(1145), CHILD(1148), CHILD(1148), CHILD(1148), CHILD(1148),
-  CHILD(1151), CHILD(1242), CHILD(1290), CHILD(1323), TILEPRO_OPC_NONE,
+  CHILD(1161), CHILD(1161), CHILD(1161), CHILD(1161), CHILD(1164),
+  CHILD(1164), CHILD(1164), CHILD(1164), CHILD(1167), CHILD(1167),
+  CHILD(1167), CHILD(1167), CHILD(1170), CHILD(1170), CHILD(1170),
+  CHILD(1170), CHILD(1173), CHILD(1173), CHILD(1173), CHILD(1173),
+  CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1179),
+  CHILD(1179), CHILD(1179), CHILD(1179), CHILD(1182), CHILD(1182),
+  CHILD(1182), CHILD(1182), CHILD(1185), CHILD(1185), CHILD(1185),
+  CHILD(1185), CHILD(1188), CHILD(1188), CHILD(1188), CHILD(1188),
+  CHILD(1191), CHILD(1282), CHILD(1330), CHILD(1363), TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
@@ -8280,130 +8338,130 @@ static const unsigned short decode_X1_fsm[1540] =
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1121 */,
+  BITFIELD(53, 1) /* index 1161 */,
   TILEPRO_OPC_RLI, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1124 */,
+  BITFIELD(53, 1) /* index 1164 */,
   TILEPRO_OPC_SHLIB, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1127 */,
+  BITFIELD(53, 1) /* index 1167 */,
   TILEPRO_OPC_SHLIH, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1130 */,
+  BITFIELD(53, 1) /* index 1170 */,
   TILEPRO_OPC_SHLI, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1133 */,
+  BITFIELD(53, 1) /* index 1173 */,
   TILEPRO_OPC_SHRIB, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1136 */,
+  BITFIELD(53, 1) /* index 1176 */,
   TILEPRO_OPC_SHRIH, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1139 */,
+  BITFIELD(53, 1) /* index 1179 */,
   TILEPRO_OPC_SHRI, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1142 */,
+  BITFIELD(53, 1) /* index 1182 */,
   TILEPRO_OPC_SRAIB, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1145 */,
+  BITFIELD(53, 1) /* index 1185 */,
   TILEPRO_OPC_SRAIH, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1148 */,
+  BITFIELD(53, 1) /* index 1188 */,
   TILEPRO_OPC_SRAI, TILEPRO_OPC_NONE,
-  BITFIELD(43, 3) /* index 1151 */,
-  TILEPRO_OPC_NONE, CHILD(1160), CHILD(1163), CHILD(1166), CHILD(1169),
-  CHILD(1172), CHILD(1175), CHILD(1178),
-  BITFIELD(53, 1) /* index 1160 */,
+  BITFIELD(43, 3) /* index 1191 */,
+  TILEPRO_OPC_NONE, CHILD(1200), CHILD(1203), CHILD(1206), CHILD(1209),
+  CHILD(1212), CHILD(1215), CHILD(1218),
+  BITFIELD(53, 1) /* index 1200 */,
   TILEPRO_OPC_DRAIN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1163 */,
+  BITFIELD(53, 1) /* index 1203 */,
   TILEPRO_OPC_DTLBPR, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1166 */,
+  BITFIELD(53, 1) /* index 1206 */,
   TILEPRO_OPC_FINV, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1169 */,
+  BITFIELD(53, 1) /* index 1209 */,
   TILEPRO_OPC_FLUSH, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1172 */,
+  BITFIELD(53, 1) /* index 1212 */,
   TILEPRO_OPC_FNOP, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1175 */,
+  BITFIELD(53, 1) /* index 1215 */,
   TILEPRO_OPC_ICOH, TILEPRO_OPC_NONE,
-  BITFIELD(31, 2) /* index 1178 */,
-  CHILD(1183), CHILD(1211), CHILD(1239), CHILD(1239),
-  BITFIELD(53, 1) /* index 1183 */,
-  CHILD(1186), TILEPRO_OPC_NONE,
-  BITFIELD(33, 2) /* index 1186 */,
-  TILEPRO_OPC_ILL, TILEPRO_OPC_ILL, TILEPRO_OPC_ILL, CHILD(1191),
-  BITFIELD(35, 2) /* index 1191 */,
-  TILEPRO_OPC_ILL, CHILD(1196), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
-  BITFIELD(37, 2) /* index 1196 */,
-  TILEPRO_OPC_ILL, CHILD(1201), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
-  BITFIELD(39, 2) /* index 1201 */,
-  TILEPRO_OPC_ILL, CHILD(1206), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
-  BITFIELD(41, 2) /* index 1206 */,
+  BITFIELD(31, 2) /* index 1218 */,
+  CHILD(1223), CHILD(1251), CHILD(1279), CHILD(1279),
+  BITFIELD(53, 1) /* index 1223 */,
+  CHILD(1226), TILEPRO_OPC_NONE,
+  BITFIELD(33, 2) /* index 1226 */,
+  TILEPRO_OPC_ILL, TILEPRO_OPC_ILL, TILEPRO_OPC_ILL, CHILD(1231),
+  BITFIELD(35, 2) /* index 1231 */,
+  TILEPRO_OPC_ILL, CHILD(1236), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
+  BITFIELD(37, 2) /* index 1236 */,
+  TILEPRO_OPC_ILL, CHILD(1241), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
+  BITFIELD(39, 2) /* index 1241 */,
+  TILEPRO_OPC_ILL, CHILD(1246), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
+  BITFIELD(41, 2) /* index 1246 */,
   TILEPRO_OPC_ILL, TILEPRO_OPC_ILL, TILEPRO_OPC_BPT, TILEPRO_OPC_ILL,
-  BITFIELD(53, 1) /* index 1211 */,
-  CHILD(1214), TILEPRO_OPC_NONE,
-  BITFIELD(33, 2) /* index 1214 */,
-  TILEPRO_OPC_ILL, TILEPRO_OPC_ILL, TILEPRO_OPC_ILL, CHILD(1219),
-  BITFIELD(35, 2) /* index 1219 */,
-  TILEPRO_OPC_ILL, CHILD(1224), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
-  BITFIELD(37, 2) /* index 1224 */,
-  TILEPRO_OPC_ILL, CHILD(1229), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
-  BITFIELD(39, 2) /* index 1229 */,
-  TILEPRO_OPC_ILL, CHILD(1234), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
-  BITFIELD(41, 2) /* index 1234 */,
+  BITFIELD(53, 1) /* index 1251 */,
+  CHILD(1254), TILEPRO_OPC_NONE,
+  BITFIELD(33, 2) /* index 1254 */,
+  TILEPRO_OPC_ILL, TILEPRO_OPC_ILL, TILEPRO_OPC_ILL, CHILD(1259),
+  BITFIELD(35, 2) /* index 1259 */,
+  TILEPRO_OPC_ILL, CHILD(1264), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
+  BITFIELD(37, 2) /* index 1264 */,
+  TILEPRO_OPC_ILL, CHILD(1269), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
+  BITFIELD(39, 2) /* index 1269 */,
+  TILEPRO_OPC_ILL, CHILD(1274), TILEPRO_OPC_ILL, TILEPRO_OPC_ILL,
+  BITFIELD(41, 2) /* index 1274 */,
   TILEPRO_OPC_ILL, TILEPRO_OPC_ILL, TILEPRO_OPC_RAISE, TILEPRO_OPC_ILL,
-  BITFIELD(53, 1) /* index 1239 */,
+  BITFIELD(53, 1) /* index 1279 */,
   TILEPRO_OPC_ILL, TILEPRO_OPC_NONE,
-  BITFIELD(43, 3) /* index 1242 */,
-  CHILD(1251), CHILD(1254), CHILD(1257), CHILD(1275), CHILD(1278),
-  CHILD(1281), CHILD(1284), CHILD(1287),
-  BITFIELD(53, 1) /* index 1251 */,
+  BITFIELD(43, 3) /* index 1282 */,
+  CHILD(1291), CHILD(1294), CHILD(1297), CHILD(1315), CHILD(1318),
+  CHILD(1321), CHILD(1324), CHILD(1327),
+  BITFIELD(53, 1) /* index 1291 */,
   TILEPRO_OPC_INV, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1254 */,
+  BITFIELD(53, 1) /* index 1294 */,
   TILEPRO_OPC_IRET, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1257 */,
-  CHILD(1260), TILEPRO_OPC_NONE,
-  BITFIELD(31, 2) /* index 1260 */,
-  TILEPRO_OPC_LB, TILEPRO_OPC_LB, TILEPRO_OPC_LB, CHILD(1265),
-  BITFIELD(33, 2) /* index 1265 */,
-  TILEPRO_OPC_LB, TILEPRO_OPC_LB, TILEPRO_OPC_LB, CHILD(1270),
-  BITFIELD(35, 2) /* index 1270 */,
+  BITFIELD(53, 1) /* index 1297 */,
+  CHILD(1300), TILEPRO_OPC_NONE,
+  BITFIELD(31, 2) /* index 1300 */,
+  TILEPRO_OPC_LB, TILEPRO_OPC_LB, TILEPRO_OPC_LB, CHILD(1305),
+  BITFIELD(33, 2) /* index 1305 */,
+  TILEPRO_OPC_LB, TILEPRO_OPC_LB, TILEPRO_OPC_LB, CHILD(1310),
+  BITFIELD(35, 2) /* index 1310 */,
   TILEPRO_OPC_LB, TILEPRO_OPC_LB, TILEPRO_OPC_LB, TILEPRO_OPC_PREFETCH,
-  BITFIELD(53, 1) /* index 1275 */,
+  BITFIELD(53, 1) /* index 1315 */,
   TILEPRO_OPC_LB_U, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1278 */,
+  BITFIELD(53, 1) /* index 1318 */,
   TILEPRO_OPC_LH, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1281 */,
+  BITFIELD(53, 1) /* index 1321 */,
   TILEPRO_OPC_LH_U, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1284 */,
+  BITFIELD(53, 1) /* index 1324 */,
   TILEPRO_OPC_LW, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1287 */,
+  BITFIELD(53, 1) /* index 1327 */,
   TILEPRO_OPC_MF, TILEPRO_OPC_NONE,
-  BITFIELD(43, 3) /* index 1290 */,
-  CHILD(1299), CHILD(1302), CHILD(1305), CHILD(1308), CHILD(1311),
-  CHILD(1314), CHILD(1317), CHILD(1320),
-  BITFIELD(53, 1) /* index 1299 */,
+  BITFIELD(43, 3) /* index 1330 */,
+  CHILD(1339), CHILD(1342), CHILD(1345), CHILD(1348), CHILD(1351),
+  CHILD(1354), CHILD(1357), CHILD(1360),
+  BITFIELD(53, 1) /* index 1339 */,
   TILEPRO_OPC_NAP, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1302 */,
+  BITFIELD(53, 1) /* index 1342 */,
   TILEPRO_OPC_NOP, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1305 */,
+  BITFIELD(53, 1) /* index 1345 */,
   TILEPRO_OPC_SWINT0, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1308 */,
+  BITFIELD(53, 1) /* index 1348 */,
   TILEPRO_OPC_SWINT1, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1311 */,
+  BITFIELD(53, 1) /* index 1351 */,
   TILEPRO_OPC_SWINT2, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1314 */,
+  BITFIELD(53, 1) /* index 1354 */,
   TILEPRO_OPC_SWINT3, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1317 */,
+  BITFIELD(53, 1) /* index 1357 */,
   TILEPRO_OPC_TNS, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1320 */,
+  BITFIELD(53, 1) /* index 1360 */,
   TILEPRO_OPC_WH64, TILEPRO_OPC_NONE,
-  BITFIELD(43, 2) /* index 1323 */,
-  CHILD(1328), TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
-  BITFIELD(45, 1) /* index 1328 */,
-  CHILD(1331), TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1331 */,
+  BITFIELD(43, 2) /* index 1363 */,
+  CHILD(1368), TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
+  BITFIELD(45, 1) /* index 1368 */,
+  CHILD(1371), TILEPRO_OPC_NONE,
+  BITFIELD(53, 1) /* index 1371 */,
   TILEPRO_OPC_LW_NA, TILEPRO_OPC_NONE,
-  BITFIELD(46, 7) /* index 1334 */,
+  BITFIELD(46, 7) /* index 1374 */,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
-  CHILD(1463), CHILD(1463), CHILD(1463), CHILD(1463), CHILD(1466),
-  CHILD(1466), CHILD(1466), CHILD(1466), CHILD(1469), CHILD(1469),
-  CHILD(1469), CHILD(1469), CHILD(1472), CHILD(1472), CHILD(1472),
-  CHILD(1472), CHILD(1475), CHILD(1475), CHILD(1475), CHILD(1475),
-  CHILD(1478), CHILD(1478), CHILD(1478), CHILD(1478), CHILD(1481),
-  CHILD(1481), CHILD(1481), CHILD(1481), CHILD(1484), CHILD(1484),
-  CHILD(1484), CHILD(1484), CHILD(1487), CHILD(1487), CHILD(1487),
-  CHILD(1487), CHILD(1490), CHILD(1490), CHILD(1490), CHILD(1490),
-  CHILD(1151), CHILD(1493), CHILD(1517), CHILD(1529), TILEPRO_OPC_NONE,
+  CHILD(1503), CHILD(1503), CHILD(1503), CHILD(1503), CHILD(1506),
+  CHILD(1506), CHILD(1506), CHILD(1506), CHILD(1509), CHILD(1509),
+  CHILD(1509), CHILD(1509), CHILD(1512), CHILD(1512), CHILD(1512),
+  CHILD(1512), CHILD(1515), CHILD(1515), CHILD(1515), CHILD(1515),
+  CHILD(1518), CHILD(1518), CHILD(1518), CHILD(1518), CHILD(1521),
+  CHILD(1521), CHILD(1521), CHILD(1521), CHILD(1524), CHILD(1524),
+  CHILD(1524), CHILD(1524), CHILD(1527), CHILD(1527), CHILD(1527),
+  CHILD(1527), CHILD(1530), CHILD(1530), CHILD(1530), CHILD(1530),
+  CHILD(1191), CHILD(1533), CHILD(1557), CHILD(1569), TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
@@ -8424,49 +8482,49 @@ static const unsigned short decode_X1_fsm[1540] =
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
   TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1463 */,
+  BITFIELD(53, 1) /* index 1503 */,
   TILEPRO_OPC_RLI_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1466 */,
+  BITFIELD(53, 1) /* index 1506 */,
   TILEPRO_OPC_SHLIB_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1469 */,
+  BITFIELD(53, 1) /* index 1509 */,
   TILEPRO_OPC_SHLIH_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1472 */,
+  BITFIELD(53, 1) /* index 1512 */,
   TILEPRO_OPC_SHLI_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1475 */,
+  BITFIELD(53, 1) /* index 1515 */,
   TILEPRO_OPC_SHRIB_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1478 */,
+  BITFIELD(53, 1) /* index 1518 */,
   TILEPRO_OPC_SHRIH_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1481 */,
+  BITFIELD(53, 1) /* index 1521 */,
   TILEPRO_OPC_SHRI_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1484 */,
+  BITFIELD(53, 1) /* index 1524 */,
   TILEPRO_OPC_SRAIB_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1487 */,
+  BITFIELD(53, 1) /* index 1527 */,
   TILEPRO_OPC_SRAIH_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1490 */,
+  BITFIELD(53, 1) /* index 1530 */,
   TILEPRO_OPC_SRAI_SN, TILEPRO_OPC_NONE,
-  BITFIELD(43, 3) /* index 1493 */,
-  CHILD(1251), CHILD(1254), CHILD(1502), CHILD(1505), CHILD(1508),
-  CHILD(1511), CHILD(1514), CHILD(1287),
-  BITFIELD(53, 1) /* index 1502 */,
+  BITFIELD(43, 3) /* index 1533 */,
+  CHILD(1291), CHILD(1294), CHILD(1542), CHILD(1545), CHILD(1548),
+  CHILD(1551), CHILD(1554), CHILD(1327),
+  BITFIELD(53, 1) /* index 1542 */,
   TILEPRO_OPC_LB_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1505 */,
+  BITFIELD(53, 1) /* index 1545 */,
   TILEPRO_OPC_LB_U_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1508 */,
+  BITFIELD(53, 1) /* index 1548 */,
   TILEPRO_OPC_LH_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1511 */,
+  BITFIELD(53, 1) /* index 1551 */,
   TILEPRO_OPC_LH_U_SN, TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1514 */,
+  BITFIELD(53, 1) /* index 1554 */,
   TILEPRO_OPC_LW_SN, TILEPRO_OPC_NONE,
-  BITFIELD(43, 3) /* index 1517 */,
-  CHILD(1299), CHILD(1302), CHILD(1305), CHILD(1308), CHILD(1311),
-  CHILD(1314), CHILD(1526), CHILD(1320),
-  BITFIELD(53, 1) /* index 1526 */,
+  BITFIELD(43, 3) /* index 1557 */,
+  CHILD(1339), CHILD(1342), CHILD(1345), CHILD(1348), CHILD(1351),
+  CHILD(1354), CHILD(1566), CHILD(1360),
+  BITFIELD(53, 1) /* index 1566 */,
   TILEPRO_OPC_TNS_SN, TILEPRO_OPC_NONE,
-  BITFIELD(43, 2) /* index 1529 */,
-  CHILD(1534), TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
-  BITFIELD(45, 1) /* index 1534 */,
-  CHILD(1537), TILEPRO_OPC_NONE,
-  BITFIELD(53, 1) /* index 1537 */,
+  BITFIELD(43, 2) /* index 1569 */,
+  CHILD(1574), TILEPRO_OPC_NONE, TILEPRO_OPC_NONE, TILEPRO_OPC_NONE,
+  BITFIELD(45, 1) /* index 1574 */,
+  CHILD(1577), TILEPRO_OPC_NONE,
+  BITFIELD(53, 1) /* index 1577 */,
   TILEPRO_OPC_LW_NA_SN, TILEPRO_OPC_NONE,
 };
 
@@ -9358,22 +9416,22 @@ const struct tilepro_operand tilepro_operands[43] =
   {
     TILEPRO_OP_TYPE_REGISTER, BFD_RELOC(NONE),
     6, 0, 0, 1, 0, 0,
-    create_Dest_X0, get_Dest_X0
+    create_Dest_X1, get_Dest_X1
   },
   {
     TILEPRO_OP_TYPE_REGISTER, BFD_RELOC(NONE),
     6, 0, 1, 0, 0, 0,
-    create_SrcA_X0, get_SrcA_X0
+    create_SrcA_X1, get_SrcA_X1
   },
   {
     TILEPRO_OP_TYPE_REGISTER, BFD_RELOC(NONE),
     6, 0, 0, 1, 0, 0,
-    create_Dest_X1, get_Dest_X1
+    create_Dest_X0, get_Dest_X0
   },
   {
     TILEPRO_OP_TYPE_REGISTER, BFD_RELOC(NONE),
     6, 0, 1, 0, 0, 0,
-    create_SrcA_X1, get_SrcA_X1
+    create_SrcA_X0, get_SrcA_X0
   },
   {
     TILEPRO_OP_TYPE_REGISTER, BFD_RELOC(NONE),
diff --git a/opcodes/v850-dis.c b/opcodes/v850-dis.c
index cf0d386..b4e786e 100644
--- a/opcodes/v850-dis.c
+++ b/opcodes/v850-dis.c
@@ -1,6 +1,6 @@
 /* Disassemble V850 instructions.
-   Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2007, 2010
-   Free Software Foundation, Inc.
+   Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2007, 2010,
+   2012  Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
 
@@ -20,9 +20,8 @@
    MA 02110-1301, USA.  */
 
 
-#include <stdio.h>
-
 #include "sysdep.h"
+#include <stdio.h>
 #include "opcode/v850.h"
 #include "dis-asm.h"
 #include "opintl.h"
diff --git a/opcodes/v850-opc.c b/opcodes/v850-opc.c
index 67ba562..0867d43 100644
--- a/opcodes/v850-opc.c
+++ b/opcodes/v850-opc.c
@@ -1,6 +1,6 @@
 /* Assemble V850 instructions.
-   Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2007, 2010
-   Free Software Foundation, Inc.
+   Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2007, 2010,
+   2012 Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
 
@@ -19,8 +19,8 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <stdio.h>
 #include "sysdep.h"
+#include <stdio.h>
 #include "opcode/v850.h"
 #include "bfd.h"
 #include "opintl.h"
@@ -259,7 +259,7 @@ insert_v8 (unsigned long insn, long value, const char ** errmsg)
 static unsigned long
 extract_v8 (unsigned long insn, int * invalid)
 {
-  unsigned long ret = (insn & 0x1f) | ((insn & 0x38000000) >> (27-5));
+  unsigned long ret = (insn & 0x1f) | ((insn >> (27-5)) & 0xe0);
 
   if (invalid != 0)
     *invalid = 0;
@@ -285,10 +285,9 @@ insert_d9 (unsigned long insn, long value, const char ** errmsg)
 static unsigned long
 extract_d9 (unsigned long insn, int * invalid)
 {
-  unsigned long ret = ((insn & 0xf800) >> 7) | ((insn & 0x0070) >> 3);
+  signed long ret = ((insn >> 7) & 0x1f0) | ((insn >> 3) & 0x0e);
 
-  if ((insn & 0x8000) != 0)
-    ret -= 0x0200;
+  ret = (ret ^ 0x100) - 0x100;
 
   if (invalid != 0)
     *invalid = 0;
@@ -341,8 +340,9 @@ insert_d16_15 (unsigned long insn, long value, const char ** errmsg)
 static unsigned long
 extract_d16_15 (unsigned long insn, int * invalid)
 {
-  signed long ret = (insn & 0xfffe0000);
-  ret >>= 16;
+  signed long ret = (insn >> 16) & 0xfffe;
+
+  ret = (ret ^ 0x8000) - 0x8000;
 
   if (invalid != 0)
     *invalid = 0;
@@ -361,9 +361,9 @@ insert_d16_16 (unsigned long insn, signed long value, const char ** errmsg)
 static unsigned long
 extract_d16_16 (unsigned long insn, int * invalid)
 {
-  signed long ret = insn & 0xfffe0000;
-  ret >>= 16;
-  ret |= ((insn & 0x20) >> 5);
+  signed long ret = ((insn >> 16) & 0xfffe) | ((insn >> 5) & 1);
+
+  ret = (ret ^ 0x8000) - 0x8000;
 
   if (invalid != 0)
     *invalid = 0;
@@ -382,9 +382,9 @@ insert_d17_16 (unsigned long insn, long value, const char ** errmsg)
 static unsigned long
 extract_d17_16 (unsigned long insn, int * invalid)
 {
-  signed long ret = (insn >> 16) & 0xfffe;
-  ret |= (insn << (16 - 4)) & 0x10000;
-  ret = (ret << ((sizeof ret)*8 - 17)) >> ((sizeof ret)*8 - 17);
+  signed long ret = ((insn >> 16) & 0xfffe) | ((insn << (16 - 4)) & 0x10000);
+
+  ret = (ret ^ 0x10000) - 0x10000;
 
   if (invalid != 0)
     *invalid = 0;
@@ -410,9 +410,9 @@ insert_d22 (unsigned long insn, long value, const char ** errmsg)
 static unsigned long
 extract_d22 (unsigned long insn, int * invalid)
 {
-  signed long ret = ((insn & 0xfffe0000) >> 16) | ((insn & 0x3f) << 16);
+  signed long ret = ((insn >> 16) & 0xfffe) | ((insn << 16) & 0x3f0000);
 
-  ret = (ret << ((sizeof ret)*8 - 22)) >> ((sizeof ret)*8 - 22);
+  ret = (ret ^ 0x200000) - 0x200000;
 
   if (invalid != 0)
     *invalid = 0;
@@ -423,7 +423,7 @@ static unsigned long
 insert_d23 (unsigned long insn, long value, const char ** errmsg)
 {
   if (value > 0x3fffff || value < -0x400000)
-	* errmsg = out_of_range;
+    * errmsg = out_of_range;
 
   return insn | ((value & 0x7f) << 4) | ((value & 0x7fff80) << (16-7));
 }
@@ -431,9 +431,9 @@ insert_d23 (unsigned long insn, long value, const char ** errmsg)
 static unsigned long
 extract_d23 (unsigned long insn, int * invalid)
 {
-  signed long ret = ((insn >> 4) & 0x7f) | ((insn >> (16-7)) & 0x7fffff80);
+  signed long ret = ((insn >> 4) & 0x7f) | ((insn >> (16-7)) & 0x7fff80);
 
-  ret = ((ret << ((sizeof ret)*8 - 23)) >> ((sizeof ret)*8 - 23));
+  ret = (ret ^ 0x400000) - 0x400000;
 
   if (invalid != 0)
     *invalid = 0;
@@ -452,11 +452,9 @@ insert_i9 (unsigned long insn, signed long value, const char ** errmsg)
 static unsigned long
 extract_i9 (unsigned long insn, int * invalid)
 {
-  signed long ret = insn & 0x003c0000;
+  signed long ret = ((insn >> 13) & 0x1e0) | (insn & 0x1f);
 
-  ret <<= 10;
-  ret >>= 23;
-  ret |= (insn & 0x1f);
+  ret = (ret ^ 0x100) - 0x100;
 
   if (invalid != 0)
     *invalid = 0;
@@ -477,11 +475,7 @@ insert_u9 (unsigned long insn, long v, const char ** errmsg)
 static unsigned long
 extract_u9 (unsigned long insn, int * invalid)
 {
-  unsigned long ret = insn & 0x003c0000;
-
-  ret >>= 13;
-
-  ret |= (insn & 0x1f);
+  unsigned long ret = ((insn >> 13) & 0x1e0) | (insn & 0x1f);
 
   if (invalid != 0)
     *invalid = 0;
@@ -496,7 +490,7 @@ insert_spe (unsigned long insn, long v, const char ** errmsg)
   if (value != 3)
     * errmsg = _("invalid register for stack adjustment");
 
-  return insn & (~ 0x180000);
+  return insn & ~0x180000;
 }
 
 static unsigned long
@@ -524,9 +518,7 @@ insert_r4 (unsigned long insn, long v, const char ** errmsg)
 static unsigned long
 extract_r4 (unsigned long insn, int * invalid)
 {
-  unsigned long ret;
-  ret = (insn >> 17) & 0xf;
-  ret |= (insn >> (23-4)) & 0x10;
+  unsigned long ret = ((insn >> (23-4)) & 0x10) | ((insn >> 17) & 0x0f);
 
   if (invalid != 0)
     *invalid = 0;
diff --git a/opcodes/vax-dis.c b/opcodes/vax-dis.c
index a119f05..818b41a 100644
--- a/opcodes/vax-dis.c
+++ b/opcodes/vax-dis.c
@@ -1,5 +1,5 @@
 /* Print VAX instructions.
-   Copyright 1995, 1998, 2000, 2001, 2002, 2005, 2007, 2009
+   Copyright 1995, 1998, 2000, 2001, 2002, 2005, 2007, 2009, 2012
    Free Software Foundation, Inc.
    Contributed by Pauline Middelink <middelin at polyware.iaf.nl>
 
@@ -20,9 +20,9 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include <setjmp.h>
 #include <string.h>
-#include "sysdep.h"
 #include "opcode/vax.h"
 #include "dis-asm.h"
 
diff --git a/opcodes/w65-dis.c b/opcodes/w65-dis.c
index 60d9b04..943e432 100644
--- a/opcodes/w65-dis.c
+++ b/opcodes/w65-dis.c
@@ -1,5 +1,5 @@
 /* Disassemble WDC 65816 instructions.
-   Copyright 1995, 1998, 2000, 2001, 2002, 2005, 2007
+   Copyright 1995, 1998, 2000, 2001, 2002, 2005, 2007, 2012
    Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
@@ -19,8 +19,9 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include <stdio.h>
 #include "sysdep.h"
+#include <stdio.h>
+
 #define STATIC_TABLE
 #define DEFINE_TABLE
 
diff --git a/opcodes/xgate-dis.c b/opcodes/xgate-dis.c
new file mode 100644
index 0000000..31f44d6
--- /dev/null
+++ b/opcodes/xgate-dis.c
@@ -0,0 +1,396 @@
+/* xgate-dis.c -- Freescale XGATE disassembly
+   Copyright 2009, 2010, 2011, 2012
+   Free Software Foundation, Inc.
+   Written by Sean Keys (skeys at ipdatasys.com)
+
+   This file is part of the GNU opcodes library.
+
+   This library 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 3, or (at your option)
+   any later version.
+
+   It 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., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+#include "sysdep.h"
+#include <assert.h>
+#include "dis-asm.h"
+#include "opintl.h"
+#include "libiberty.h"
+#include "ansidecl.h"
+#include "opcode/xgate.h"
+
+#define XGATE_TWO_BYTES      0x02
+#define XGATE_NINE_BITS      0x1FF
+#define XGATE_TEN_BITS       0x3FF
+#define XGATE_NINE_SIGNBIT   0x100
+#define XGATE_TEN_SIGNBIT    0x200
+
+/* Structures.  */
+struct decodeInfo
+{
+  unsigned int operMask;
+  unsigned int operMasksRegisterBits;
+  struct xgate_opcode *opcodePTR;
+};
+
+/* Prototypes for local functions.  */
+static int print_insn (bfd_vma, struct disassemble_info *);
+static int read_memory (bfd_vma, bfd_byte*, int, struct disassemble_info *);
+static int ripBits (unsigned int *, int,
+		    struct xgate_opcode *, unsigned int);
+static int macro_search (char *, char *);
+static struct decodeInfo * find_match (unsigned int);
+
+/* Statics.  */
+static struct decodeInfo *decodeTable;
+static int initialized;
+static char previousOpName[10];
+static unsigned int perviousBin;
+
+/* Disassemble one instruction at address 'memaddr'.  Returns the number
+   of bytes used by that instruction.  */
+
+static int
+print_insn (bfd_vma memaddr, struct disassemble_info* info)
+{
+  int status;
+  unsigned int raw_code;
+  char *s = 0;
+  long bytesRead = 0;
+  int i = 0;
+  struct xgate_opcode *opcodePTR = (struct xgate_opcode*) xgate_opcodes;
+  struct decodeInfo *decodeTablePTR = 0;
+  struct decodeInfo *decodePTR = 0;
+  unsigned int operandRegisterBits = 0;
+  signed int relAddr = 0;
+  signed int operandOne = 0;
+  signed int operandTwo = 0;
+  bfd_byte buffer[4];
+  bfd_vma absAddress;
+
+  unsigned int operMaskReg = 0;
+  /* Initialize our array of opcode masks and check them against our constant
+     table.  */
+  if (!initialized)
+    {
+      decodeTable = xmalloc (sizeof (struct decodeInfo) * xgate_num_opcodes);
+      for (i = 0, decodeTablePTR = decodeTable; i < xgate_num_opcodes;
+          i++, decodeTablePTR++, opcodePTR++)
+        {
+          unsigned int bin = 0;
+          unsigned int mask = 0;
+          for (s = opcodePTR->format; *s; s++)
+            {
+              bin <<= 1;
+              mask <<= 1;
+              operandRegisterBits <<= 1;
+              bin |= (*s == '1');
+              mask |= (*s == '0' || *s == '1');
+              operandRegisterBits |= (*s == 'r');
+            }
+          /* Asserting will uncover inconsistencies in our table.  */
+          assert ((s - opcodePTR->format) == 16 || (s - opcodePTR->format) == 32);
+          assert (opcodePTR->bin_opcode == bin);
+
+          decodeTablePTR->operMask = mask;
+          decodeTablePTR->operMasksRegisterBits = operandRegisterBits;
+          decodeTablePTR->opcodePTR = opcodePTR;
+        }
+      initialized = 1;
+    }
+
+  /* Read 16 bits.  */
+  bytesRead += XGATE_TWO_BYTES;
+  status = read_memory (memaddr, buffer, XGATE_TWO_BYTES, info);
+  if (status == 0)
+    {
+      raw_code = buffer[0];
+      raw_code <<= 8;
+      raw_code += buffer[1];
+
+      decodePTR = find_match (raw_code);
+      if (decodePTR)
+        {
+          operMaskReg = decodePTR->operMasksRegisterBits;
+          (*info->fprintf_func)(info->stream, "%s", decodePTR->opcodePTR->name);
+
+          /* First we compare the shorthand format of the constraints. If we
+	     still are unable to pinpoint the operands
+	     we analyze the opcodes constraint string.  */
+          switch (decodePTR->opcodePTR->sh_format)
+          {
+          case XG_R_C:
+            (*info->fprintf_func)(info->stream, " R%x, CCR",
+                (raw_code >> 8) & 0x7);
+            break;
+          case XG_C_R:
+            (*info->fprintf_func)(info->stream, " CCR, R%x",
+                (raw_code >> 8) & 0x7);
+            break;
+          case XG_R_P:
+            (*info->fprintf_func)(info->stream, " R%x, PC",
+                (raw_code >> 8) & 0x7);
+            break;
+          case XG_INH:
+            break;
+          case XG_R_R_R:
+            if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_TRI))
+              {
+                (*info->fprintf_func)(info->stream, " R%x, R%x, R%x",
+                    (raw_code >> 8) & 0x7, (raw_code >> 5) & 0x7,
+                    (raw_code >> 2) & 0x7);
+              }
+            else if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_IDR))
+              {
+                if (raw_code & 0x01)
+                  {
+                    (*info->fprintf_func)(info->stream, " R%x, (R%x, R%x+)",
+                        (raw_code >> 8) & 0x7, (raw_code >> 5) & 0x7,
+                        (raw_code >> 2) & 0x7);
+                  }
+                else if (raw_code & 0x02)
+                  {
+                    (*info->fprintf_func)(info->stream, " R%x, (R%x, -R%x)",
+                        (raw_code >> 8) & 0x7, (raw_code >> 5) & 0x7,
+                        (raw_code >> 2) & 0x7);
+                  }
+                else
+                  {
+                    (*info->fprintf_func)(info->stream, " R%x, (R%x, R%x)",
+                        (raw_code >> 8) & 0x7, (raw_code >> 5) & 0x7,
+                        (raw_code >> 2) & 0x7);
+                  }
+              }
+            else
+              {
+                (*info->fprintf_func)(info->stream, " unhandled mode %s",
+                    decodePTR->opcodePTR->constraints);
+              }
+            break;
+          case XG_R_R:
+            if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_DYA))
+              {
+                operandOne = ripBits (&operMaskReg, 3, opcodePTR, raw_code);
+                operandTwo = ripBits (&operMaskReg, 3, opcodePTR, raw_code);
+                (*info->fprintf_func)(info->stream, " R%x, R%x", operandOne,
+                    operandTwo);
+              }
+            else
+              {
+                (*info->fprintf_func)(info->stream, " unhandled mode %s",
+                    opcodePTR->constraints);
+              }
+            break;
+          case XG_R_R_I:
+            (*info->fprintf_func)(info->stream, " R%x, (R%x, #0x%x)",
+                (raw_code >> 8) & 0x7, (raw_code >> 5) & 0x7, raw_code & 0x1f);
+            break;
+          case XG_R:
+            operandOne = ripBits (&operMaskReg, 3, decodePTR->opcodePTR,
+                raw_code);
+            (*info->fprintf_func)(info->stream, " R%x", operandOne);
+            break;
+          case XG_I | XG_PCREL:
+          if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_REL9))
+            {
+              /* If address is negative handle it accordingly.  */
+              if (raw_code & XGATE_NINE_SIGNBIT)
+                {
+                  relAddr = XGATE_NINE_BITS >> 1; /* Clip sign bit.  */
+                  relAddr = ~relAddr; /* Make signed.  */
+                  relAddr |= (raw_code & 0xFF) + 1; /* Apply our value.  */
+                  relAddr <<= 1; /* Multiply by two as per processor docs.  */
+                }
+              else
+                {
+                  relAddr = raw_code & 0xff;
+                  relAddr = (relAddr << 1) + 2;
+                }
+              (*info->fprintf_func)(info->stream, " *%d", relAddr);
+              (*info->fprintf_func)(info->stream, "  Abs* 0x");
+              (*info->print_address_func)(memaddr + relAddr, info);
+            }
+          else if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_REL10))
+            {
+              /* If address is negative handle it accordingly.  */
+              if (raw_code & XGATE_TEN_SIGNBIT)
+                {
+                  relAddr = XGATE_TEN_BITS >> 1; /* Clip sign bit.  */
+                  relAddr = ~relAddr; /* Make signed.  */
+                  relAddr |= (raw_code & 0x1FF) + 1; /* Apply our value.  */
+                  relAddr <<= 1; /* Multiply by two as per processor docs.  */
+                }
+              else
+                {
+                  relAddr = raw_code & 0x1FF;
+                  relAddr = (relAddr << 1) + 2;
+                }
+              (*info->fprintf_func)(info->stream, " *%d", relAddr);
+              (*info->fprintf_func)(info->stream, "  Abs* 0x");
+              (*info->print_address_func)(memaddr + relAddr, info);
+            }
+          else
+            {
+              (*info->fprintf_func)(info->stream,
+                  " Can't disassemble for mode) %s",
+                  decodePTR->opcodePTR->constraints);
+            }
+          break;
+          case XG_R_I:
+            if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_IMM4))
+              {
+                (*info->fprintf_func)(info->stream, " R%x, #0x%02x",
+                    (raw_code >> 8) & 0x7, (raw_code >> 4) & 0xF);
+              }
+            else if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_IMM8))
+              {
+                if (macro_search (decodePTR->opcodePTR->name, previousOpName) &&
+                    previousOpName[0])
+                  {
+                    absAddress = (0xFF & raw_code) << 8;
+                    absAddress |= perviousBin & 0xFF;
+                    (*info->fprintf_func)(info->stream, " R%x, #0x%02x Abs* 0x",
+                        (raw_code >> 8) & 0x7, raw_code & 0xff);
+                    (*info->print_address_func)(absAddress, info);
+                    previousOpName[0] = 0;
+                  }
+                else
+                  {
+                    strcpy (previousOpName, decodePTR->opcodePTR->name);
+                    (*info->fprintf_func)(info->stream, " R%x, #0x%02x",
+                        (raw_code >> 8) & 0x7, raw_code & 0xff);
+                  }
+              }
+            else
+              {
+                (*info->fprintf_func)(info->stream,
+                    " Can't disassemble for mode %s",
+                    decodePTR->opcodePTR->constraints);
+              }
+            break;
+          case XG_I:
+            (*info->fprintf_func)(info->stream, " #0x%x",
+                (raw_code >> 8) & 0x7);
+            break;
+          default:
+            (*info->fprintf_func)(info->stream, "address mode not found\t %x",
+                opcodePTR->bin_opcode);
+            break;
+          }
+          perviousBin = raw_code;
+        }
+      else
+        {
+          (*info->fprintf_func)(info->stream,
+				" unable to find opcode match #0%x", raw_code);
+        }
+    }
+  return bytesRead;
+}
+
+int
+print_insn_xgate (bfd_vma memaddr, struct disassemble_info* info)
+{
+  return print_insn (memaddr, info);
+}
+
+static int
+read_memory (bfd_vma memaddr, bfd_byte* buffer, int size,
+    struct disassemble_info* info)
+{
+  int status;
+  status = (*info->read_memory_func) (memaddr, buffer, size, info);
+  if (status != 0)
+    {
+      (*info->memory_error_func) (status, memaddr, info);
+      return -1;
+    }
+  return 0;
+}
+
+static int
+ripBits (unsigned int *operandBitsRemaining,
+	 int numBitsRequested,
+	 struct xgate_opcode *opcodePTR,
+	 unsigned int memory)
+{
+  unsigned int currentBit;
+  int operand;
+  int numBitsFound;
+
+  for (operand = 0, numBitsFound = 0, currentBit = 1
+	 << ((opcodePTR->size * 8) - 1);
+       (numBitsFound < numBitsRequested) && currentBit; currentBit >>= 1)
+    {
+      if (currentBit & *operandBitsRemaining)
+	{
+	  *operandBitsRemaining &= ~(currentBit); /* Consume the current bit.  */
+	  operand <<= 1; /* Make room for our next bit.  */
+	  numBitsFound++;
+	  operand |= (currentBit & memory) > 0;
+	}
+    }
+  return operand;
+}
+
+static int
+macro_search (char *currentName, char *lastName)
+{
+  int i;
+  int length = 0;
+  char *where;
+
+  for (i = 0; i < xgate_num_opcodes; i++)
+    {
+      where = strstr (xgate_opcodes[i].constraints, lastName);
+
+      if (where)
+        {
+          length = strlen (where);
+        }
+      if (length)
+        {
+          where = strstr (xgate_opcodes[i].constraints, currentName);
+          if (where)
+            {
+              length = strlen (where);
+              return 1;
+            }
+        }
+    }
+  return 0;
+}
+
+static struct decodeInfo *
+find_match (unsigned int raw_code)
+{
+  struct decodeInfo *decodeTablePTR = 0;
+  int i;
+
+  for (i = 0, decodeTablePTR = decodeTable; i < xgate_num_opcodes;
+      i++, decodeTablePTR++)
+    {
+      if ((raw_code & decodeTablePTR->operMask)
+          == decodeTablePTR->opcodePTR->bin_opcode)
+        {
+          /* Make sure we didn't run into a macro or alias.  */
+          if (decodeTablePTR->opcodePTR->cycles_min != 0)
+            {
+              return decodeTablePTR;
+              break;
+            }
+          else
+	    continue;
+        }
+    }
+  return 0;
+}
diff --git a/opcodes/xgate-opc.c b/opcodes/xgate-opc.c
new file mode 100644
index 0000000..76321e6
--- /dev/null
+++ b/opcodes/xgate-opc.c
@@ -0,0 +1,204 @@
+/* mc9xgate-opc.c -- Freescale XGATE opcode list
+   Copyright 1999, 2000, 2002, 2005, 2007 Free Software Foundation, Inc.
+   Written by Sean Keys (skeys at ipdatasys.com)
+
+   This file is part of the GNU opcodes library.
+
+   This library 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 3, or (at your option)
+   any later version.
+
+   It 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 file; see the file COPYING.  If not, write to the
+   Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.
+*/
+
+#include <stdio.h>
+#include "ansidecl.h"
+#include "opcode/xgate.h"
+
+#define TABLE_SIZE(X)       (sizeof(X) / sizeof(X[0]))
+
+/* Combination of CCR flags.  */
+/* ORDER HI TO LOW NZVC */
+#define XGATE_NZ_BIT	XGATE_N_BIT|XGATE_Z_BIT
+#define XGATE_NV_BIT	XGATE_N_BIT|XGATE_V_BIT
+#define XGATE_NC_BIT	XGATE_N_BIT|XGATE_C_BIT
+#define XGATE_ZV_BIT	XGATE_Z_BIT|XGATE_V_BIT
+#define XGATE_ZC_BIT	XGATE_Z_BIT|XGATE_C_BIT
+#define XGATE_VC_BIT	XGATE_V_BIT|XGATE_C_BIT
+#define XGATE_NVC_BIT	XGATE_NV_BIT|XGATE_C_BIT
+#define XGATE_NZC_BIT	XGATE_NZ_BIT|XGATE_C_BIT
+#define XGATE_NZV_BIT	XGATE_N_BIT|XGATE_Z_BIT|XGATE_V_BIT
+#define XGATE_ZVC_BIT	XGATE_VC_BIT|XGATE_Z_BIT
+#define XGATE_NZVC_BIT	XGATE_NZV_BIT|XGATE_C_BIT
+
+/* Flags when the insn only changes some CCR flags.  */
+#define CHG_NONE        0,0,0
+#define CHG_Z           0,0,XGATE_Z_BIT
+#define CHG_C           0,0,XGATE_C_BIT
+#define CHG_ZVC         0,0,XGATE_ZVC_BIT
+#define CHG_NZC         0,0,XGATE_NZC_BIT
+#define CHG_NZV         0,0,XGATE_NZV_BIT
+#define CHG_NZVC        0,0,(XGATE_NZVC_BIT)
+#define CHG_HNZVC       0,0,XGATE_HNZVC_BIT  // TODO DELETE
+#define CHG_ALL         0,0,0xff
+
+/* The insn clears and changes some flags.  */
+#define CLR_I           0,XG_I_BIT,0
+#define CLR_C           0,XGATE_C_BIT,0
+#define CLR_V           0,XGATE_V_BIT,0
+#define CLR_V_CHG_ZC    0,XGATE_V_BIT,XGATE_ZC_BIT
+#define CLR_V_CHG_NZ    0,XGATE_V_BIT,XGATE_NZ_BIT
+#define CLR_V_CHG_ZVC   0,XGATE_V_BIT,XGATE_ZVC_BIT
+#define CLR_N_CHG_ZVC   0,XGATE_N_BIT,XGATE_ZVC_BIT /* Used by lsr */
+#define CLR_VC_CHG_NZ   0,XGATE_VC_BIT,XGATE_NZ_BIT
+
+/* The insn sets some flags.  */
+#define SET_I                   XGATE_I_BIT,0,0
+#define SET_C                   XGATE_C_BIT,0,0
+#define SET_V                   XGATE_V_BIT,0,0
+#define SET_Z_CLR_NVC           XGATE_Z_BIT,XGATE_NVC_BIT,0
+#define SET_C_CLR_V_CHG_NZ      XGATE_C_BIT,XGATE_V_BIT,XGATE_NZ_BIT
+#define SET_Z_CHG_HNVC          XGATE_Z_BIT,0,XGATE_HNVC_BIT
+
+/* operand modes */
+#define OP_NONE         XGATE_OP_NONE
+#define OP_INH		XGATE_OP_INH
+#define OP_TRI		XGATE_OP_TRI
+#define OP_DYA		XGATE_OP_DYA
+#define OP_IMM3		XGATE_OP_IMM3
+#define OP_IMM4		XGATE_OP_IMM4
+#define OP_IMM8		XGATE_OP_IMM8
+#define OP_IMM16	XGATE_OP_IMM16
+#define OP_MON		XGATE_OP_MON
+#define OP_MON_R_C	XGATE_OP_MON_R_C
+#define OP_MON_C_R	XGATE_OP_MON_C_R
+#define OP_MON_R_P	XGATE_OP_MON_R_P
+#define OP_IDR	        XGATE_OP_IDR
+#define OP_IDO5		XGATE_OP_IDO5
+#define OP_REL9		XGATE_OP_REL9
+#define OP_REL10    	XGATE_OP_REL10
+#define OP_DM          XGATE_OP_DYA_MON
+/* macro operand modes */
+#define OP_mADD         XGATE_OP_IMM16mADD
+#define OP_mAND         XGATE_OP_IMM16mAND
+#define OP_mCPC         XGATE_OP_IMM16mCPC
+#define OP_mLDW         XGATE_OP_IMM16mLDW
+#define OP_mSUB         XGATE_OP_IMM16mSUB
+
+#define ALL       XGATE_V1|XGATE_V2|XGATE_V3
+#define XG_IP        XG_I|XG_PCREL
+
+const struct xgate_opcode xgate_opcodes[] = {
+/* Name -+                                                                         +-- CPU
+   Constraints --+                                                       +------------ CCR changes
+   Format ----------------+                                          +---------------- Max # cycles
+   Short Hand Format-------------------------+                    +------------------- Min # cycles
+   Size -----------------------------------------------+   +-------------------------- Opcode */
+    {   "adc",   OP_TRI, "00011rrrrrrrrr11", XG_R_R_R, 2, 0x1803, 1, 1, CHG_NZVC, ALL},
+    {   "add",   OP_TRI, "00011rrrrrrrrr10", XG_R_R_R, 2, 0x1802, 1, 1, CHG_NZVC, ALL},
+    {  "addh",  OP_IMM8, "11101rrriiiiiiii",   XG_R_I, 2, 0xE800, 1, 1, CHG_NZVC, ALL},
+    {  "addl",  OP_IMM8, "11100rrriiiiiiii",   XG_R_I, 2, 0xE000, 1, 1, CHG_NZVC, ALL},
+    {   "and",   OP_TRI, "00010rrrrrrrrr00", XG_R_R_R, 2, 0x1000, 1, 1,  CHG_NZV, ALL},
+    {  "andh",  OP_IMM8, "10001rrriiiiiiii",   XG_R_I, 2, 0x8800, 1, 1,  CHG_NZV, ALL},
+    {  "andl",  OP_IMM8, "10000rrriiiiiiii",   XG_R_I, 2, 0x8000, 1, 1,  CHG_NZV, ALL},
+    {   "asr",  OP_IMM4, "00001rrriiii1001",   XG_R_I, 2, 0x0809, 1, 1, CHG_NZVC, ALL},
+    {   "asr",   OP_DYA, "00001rrrrrr10001",   XG_R_R, 2, 0x0811, 1, 1, CHG_NZVC, ALL},
+    {   "bcc",  OP_REL9, "0010000iiiiiiiii",   XG_IP,  2, 0x2000, 1, 2, CHG_NONE, ALL},
+    {   "bcs",  OP_REL9, "0010001iiiiiiiii",   XG_IP,  2, 0x2200, 1, 2, CHG_NONE, ALL},
+    {   "beq",  OP_REL9, "0010011iiiiiiiii",   XG_IP,  2, 0x2600, 1, 2, CHG_NONE, ALL},
+    { "bfext",   OP_TRI, "01100rrrrrrrrr11", XG_R_R_R, 2, 0x6003, 1, 1,  CHG_NZV, ALL},
+    {  "bffo",   OP_DYA, "00001rrrrrr10000",   XG_R_R, 2, 0x0810, 1, 1, CHG_NZVC, ALL},
+    { "bfins",   OP_TRI, "01101rrrrrrrrr11", XG_R_R_R, 2, 0x6803, 1, 1,  CHG_NZV, ALL},
+    {"bfinsi",   OP_TRI, "01110rrrrrrrrr11", XG_R_R_R, 2, 0x7003, 1, 1,  CHG_NZV, ALL},
+    {"bfinsx",   OP_TRI, "01111rrrrrrrrr11", XG_R_R_R, 2, 0x7803, 1, 1,  CHG_NZV, ALL},
+    {   "bge",  OP_REL9, "0011010iiiiiiiii",   XG_IP,  2, 0x3400, 1, 2, CHG_NONE, ALL},
+    {   "bgt",  OP_REL9, "0011100iiiiiiiii",   XG_IP,  2, 0x3800, 1, 2, CHG_NONE, ALL},
+    {   "bhi",  OP_REL9, "0011000iiiiiiiii",   XG_IP,  2, 0x3000, 1, 2, CHG_NONE, ALL},
+    {  "bith",  OP_IMM8, "10011rrriiiiiiii",   XG_R_I, 2, 0x9800, 1, 1,  CHG_NZV, ALL},
+    {  "bitl",  OP_IMM8, "10010rrriiiiiiii",   XG_R_I, 2, 0x9000, 1, 1,  CHG_NZV, ALL},
+    {   "ble",  OP_REL9, "0011101iiiiiiiii",   XG_IP,  2, 0x3A00, 1, 2, CHG_NONE, ALL},
+    {   "bls",  OP_REL9, "0011001iiiiiiiii",   XG_IP,  2, 0x3200, 1, 2, CHG_NONE, ALL},
+    {   "blt",  OP_REL9, "0011011iiiiiiiii",   XG_IP,  2, 0x3600, 1, 2, CHG_NONE, ALL},
+    {   "bmi",  OP_REL9, "0010101iiiiiiiii",   XG_IP,  2, 0x2A00, 1, 2, CHG_NONE, ALL},
+    {   "bne",  OP_REL9, "0010010iiiiiiiii",   XG_IP,  2, 0x2400, 1, 2, CHG_NONE, ALL},
+    {   "bpl",  OP_REL9, "0010100iiiiiiiii",   XG_IP,  2, 0x2800, 1, 2, CHG_NONE, ALL},
+    {   "bra", OP_REL10, "001111iiiiiiiiii",   XG_IP,  2, 0x3C00, 2, 2, CHG_NONE, ALL},
+    {   "brk",   OP_INH, "0000000000000000",   XG_INH, 2, 0x0000, 1, 1, CHG_NONE, ALL},
+    {   "bvc",  OP_REL9, "0010110iiiiiiiii",   XG_IP,  2, 0x2C00, 1, 2, CHG_NONE, ALL},
+    {   "bvs",  OP_REL9, "0010111iiiiiiiii",   XG_IP,  2, 0x2E00, 1, 2, CHG_NONE, ALL},
+    {  "cmpl",  OP_IMM8, "11010rrriiiiiiii",   XG_R_I, 2, 0xD000, 1, 1, CHG_NZVC, ALL},
+    {  "cpch",  OP_IMM8, "11011rrriiiiiiii",   XG_R_I, 2, 0xD800, 1, 1, CHG_NZVC, ALL},
+    {  "csem",  OP_IMM3, "00000iii11110000",    XG_I , 2, 0x00F0, 1, 1, CHG_NONE, ALL},
+    {  "csem",   OP_MON, "00000rrr11110001",     XG_R, 2, 0x00F1, 1, 1, CHG_NONE, ALL},
+    {   "csl",  OP_IMM4, "00001rrriiii1010",   XG_R_I, 2, 0x080A, 1, 1, CHG_NZVC, ALL},
+    {   "csl",   OP_DYA, "00001rrrrrr10010",   XG_R_R, 2, 0x0812, 1, 1, CHG_NZVC, ALL},
+    {   "csr",  OP_IMM4, "00001rrriiii1011",   XG_R_I, 2, 0x080B, 1, 1, CHG_NZVC, ALL},
+    {   "csr",   OP_DYA, "00001rrrrrr10011",   XG_R_R, 2, 0x0813, 1, 1, CHG_NZVC, ALL},
+    {   "jal",   OP_MON, "00000rrr11110110",     XG_R, 2, 0x00F6, 2, 2, CHG_NONE, ALL},
+    {   "ldb",  OP_IDO5, "01000rrrrrriiiii", XG_R_R_I, 2, 0x4000, 2, 2, CHG_NONE, ALL},
+    {   "ldb",   OP_IDR, "01100rrrrrrrrrrr", XG_R_R_R, 2, 0x6000, 2, 2, CHG_NONE, ALL},
+    {   "ldh",  OP_IMM8, "11111rrriiiiiiii",   XG_R_I, 2, 0xF800, 1, 1, CHG_NONE, ALL},
+    {   "ldl",  OP_IMM8, "11110rrriiiiiiii",   XG_R_I, 2, 0xF000, 1, 1, CHG_NONE, ALL},
+    {   "ldw",  OP_IDO5, "01001rrrrrriiiii", XG_R_R_I, 2, 0x4800, 2, 2, CHG_NONE, ALL},
+    {   "ldw",   OP_IDR, "01101rrrrrrrrrrr", XG_R_R_R, 2, 0x6800, 2, 2, CHG_NONE, ALL},
+    {   "lsl",  OP_IMM4, "00001rrriiii1100",   XG_R_I, 2, 0x080C, 1, 1, CHG_NZVC, ALL},
+    {   "lsl",   OP_DYA, "00001rrrrrr10100",   XG_R_R, 2, 0x0814, 1, 1, CHG_NZVC, ALL},
+    {   "lsr",  OP_IMM4, "00001rrriiii1101",   XG_R_I, 2, 0x080D, 1, 1, CHG_NZVC, ALL},
+    {   "lsr",   OP_DYA, "00001rrrrrr10101",   XG_R_R, 2, 0x0815, 1, 1, CHG_NZVC, ALL},
+    {   "nop",   OP_INH, "0000000100000000",   XG_INH, 2, 0x0100, 1, 1, CHG_NONE, ALL},
+    {    "or",   OP_TRI, "00010rrrrrrrrr10", XG_R_R_R, 2, 0x1002, 1, 1,  CHG_NZV, ALL},
+    {   "orh",  OP_IMM8, "10101rrriiiiiiii",   XG_R_I, 2, 0xA800, 1, 1,  CHG_NZV, ALL},
+    {   "orl",  OP_IMM8, "10100rrriiiiiiii",   XG_R_I, 2, 0xA000, 1, 1,  CHG_NZV, ALL},
+    {   "par",   OP_MON, "00000rrr11110101",     XG_R, 2, 0x00F5, 1, 1,  CHG_NZV, ALL},
+    {   "rol",  OP_IMM4, "00001rrriiii1110",   XG_R_I, 2, 0x080E, 1, 1,  CHG_NZV, ALL},
+    {   "rol",   OP_DYA, "00001rrrrrr10110",   XG_R_R, 2, 0x0816, 1, 1,  CHG_NZV, ALL},
+    {   "ror",  OP_IMM4, "00001rrriiii1111",   XG_R_I, 2, 0x080F, 1, 1,  CHG_NZV, ALL},
+    {   "ror",   OP_DYA, "00001rrrrrr10111",   XG_R_R, 2, 0x0817, 1, 1,  CHG_NZV, ALL},
+    {   "rts",   OP_INH, "0000001000000000",   XG_INH, 2, 0x0200, 2, 2, CHG_NONE, ALL},
+    {   "sbc",   OP_TRI, "00011rrrrrrrrr01", XG_R_R_R, 2, 0x1801, 1, 1,  CHG_NZV, ALL},
+    {  "ssem",  OP_IMM3, "00000iii11110010",    XG_I , 2, 0x00F2, 2, 2,    CHG_C, ALL},
+    {  "ssem",   OP_MON, "00000rrr11110011",     XG_R, 2, 0x00F3, 2, 2,    CHG_C, ALL},
+    {   "sex",   OP_MON, "00000rrr11110100",     XG_R, 2, 0x00F4, 1, 1,  CHG_NZV, ALL},
+    {   "sif",   OP_INH, "0000001100000000",   XG_INH, 2, 0x0300, 2, 2, CHG_NONE, ALL},
+    {   "sif",   OP_MON, "00000rrr11110111",     XG_R, 2, 0x00F7, 2, 2, CHG_NONE, ALL},
+    {   "stb",  OP_IDO5, "01010rrrrrriiiii", XG_R_R_I, 2, 0x5000, 2, 2, CHG_NONE, ALL},
+    {   "stb",   OP_IDR, "01110rrrrrrrrrrr", XG_R_R_R, 2, 0x7000, 2, 2, CHG_NONE, ALL},
+    {   "stw",  OP_IDO5, "01011rrrrrriiiii", XG_R_R_I, 2, 0x5800, 2, 2, CHG_NONE, ALL},
+    {   "stw",   OP_IDR, "01111rrrrrrrrrrr", XG_R_R_R, 2, 0x7800, 2, 2, CHG_NONE, ALL},
+    {   "sub",   OP_TRI, "00011rrrrrrrrr00", XG_R_R_R, 2, 0x1800, 1, 1, CHG_NZVC, ALL},
+    {  "subh",  OP_IMM8, "11001rrriiiiiiii",   XG_R_I, 2, 0xC800, 1, 1, CHG_NZVC, ALL},
+    {  "subl",  OP_IMM8, "11000rrriiiiiiii",   XG_R_I, 2, 0xC000, 1, 1, CHG_NZVC, ALL},
+    {   "tfr",  OP_MON_R_C, "00000rrr11111000",XG_R_C, 2, 0x00F8, 1, 1, CHG_NONE, ALL},
+    {   "tfr",  OP_MON_C_R, "00000rrr11111001",XG_C_R, 2, 0x00F9, 1, 1, CHG_NONE, ALL},
+    {   "tfr",  OP_MON_R_P, "00000rrr11111010",XG_R_P, 2, 0x00FA, 1, 1, CHG_NONE, ALL},
+    {  "xnor",   OP_TRI, "00010rrrrrrrrr11", XG_R_R_R, 2, 0x1003, 1, 1,  CHG_NZV, ALL},
+    { "xnorh",  OP_IMM8, "10111rrriiiiiiii",   XG_R_I, 2, 0xB800, 1, 1,  CHG_NZV, ALL},
+    { "xnorl",  OP_IMM8, "10110rrriiiiiiii",   XG_R_I, 2, 0xB000, 1, 1,  CHG_NZV, ALL},
+    /*  macro and alias codes  */
+    {   "add", OP_mADD,  "----------------",   XG_R_I, 4,      0, 0, 0, CHG_NONE, ALL},
+    {   "and", OP_mAND,  "----------------",   XG_R_I, 4,      0, 0, 0, CHG_NONE, ALL},
+    {   "bhs",  OP_REL9, "0010000iiiiiiiii",   XG_IP,  2, 0x2000, 0, 0, CHG_NONE, ALL},
+    {   "blo",  OP_REL9, "0010001iiiiiiiii",   XG_IP,  2, 0x2200, 0, 0, CHG_NONE, ALL},
+    {   "cmp",  OP_mCPC, "----------------",   XG_R_I, 4,      0, 0, 0, CHG_NONE, ALL},
+    {   "cmp",   OP_DYA, "00011sssrrrrrr00",   XG_R_R, 2, 0x1800, 0, 0, CHG_NZVC, ALL},
+    {   "com",   OP_DM,  "00010rrrsssrrr11",   XG_R,   2, 0x1003, 0, 0, CHG_NZVC, ALL},
+    {   "com",   OP_DYA, "00010rrrsssrrr11",   XG_R_R, 2, 0x1003, 0, 0,  CHG_NZV, ALL},
+    {   "cpc",   OP_DYA, "00011sssrrrrrr01",   XG_R_R, 2, 0x1801, 0, 0, CHG_NZVC, ALL},
+    {   "ldd",  OP_mLDW, "----------------",   XG_R_I, 4,      0, 0, 0, CHG_NONE, ALL},
+    {   "ldw",  OP_mLDW, "----------------",   XG_R_I, 4,      0, 0, 0, CHG_NONE, ALL},
+    {   "mov",   OP_DYA, "00010rrrsssrrr10",   XG_R_R, 2, 0x1002, 0, 0, CHG_NZVC, ALL},
+    {   "neg",   OP_DYA, "00011rrrsssrrr00",   XG_R_R, 2, 0x1800, 0, 0, CHG_NZVC, ALL},
+    {   "sub",  OP_mSUB, "----------------",   XG_R_I, 4,      0, 0, 0, CHG_NONE, ALL},
+    {   "tst",   OP_MON, "00011sssrrrsss00",     XG_R, 2, 0x1800, 0, 0,  CHG_NZV, ALL}
+};
+
+const int xgate_num_opcodes = TABLE_SIZE (xgate_opcodes);
diff --git a/opcodes/xtensa-dis.c b/opcodes/xtensa-dis.c
index 768d8f3..c21024e 100644
--- a/opcodes/xtensa-dis.c
+++ b/opcodes/xtensa-dis.c
@@ -1,5 +1,5 @@
 /* xtensa-dis.c.  Disassembly functions for Xtensa.
-   Copyright 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+   Copyright 2003, 2004, 2005, 2007, 2012 Free Software Foundation, Inc.
    Contributed by Bob Wilson at Tensilica, Inc. (bwilson at tensilica.com)
 
    This file is part of the GNU opcodes library.
@@ -19,6 +19,7 @@
    Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include <stdlib.h>
 #include <stdio.h>
 #include <sys/types.h>
@@ -26,7 +27,6 @@
 #include "xtensa-isa.h"
 #include "ansidecl.h"
 #include "libiberty.h"
-#include "sysdep.h"
 #include "dis-asm.h"
 
 #include <setjmp.h>
diff --git a/opcodes/z8kgen.c b/opcodes/z8kgen.c
index ecb56b7..8f22efd 100644
--- a/opcodes/z8kgen.c
+++ b/opcodes/z8kgen.c
@@ -1,4 +1,5 @@
-/* Copyright 2001, 2002, 2003, 2005, 2007, 2009 Free Software Foundation, Inc.
+/* Copyright 2001, 2002, 2003, 2005, 2007, 2009, 2012
+   Free Software Foundation, Inc.
 
    This file is part of the GNU opcodes library.
 
@@ -19,8 +20,8 @@
 
 /* This program generates z8k-opc.h.  */
 
-#include <stdio.h>
 #include "sysdep.h"
+#include <stdio.h>
 #include "libiberty.h"
 
 #define BYTE_INFO_LEN 10
diff --git a/readline/ChangeLog.gdb b/readline/ChangeLog.gdb
index afc1e49..276b1c8 100644
--- a/readline/ChangeLog.gdb
+++ b/readline/ChangeLog.gdb
@@ -1,3 +1,8 @@
+2012-02-24  Pierre Muller  <muller at ics.u-strasbg.fr>
+
+	* signals.c (_rl_block_sigwinch, _rl_release_sigwinch): Add
+	conditional SIGWINCH around functions.
+
 2011-05-11  Sterling Augustine  <saugustine at google.com>
 
 	* complete.c (rl_completion_matches): Undo inadvertant checkin.
diff --git a/readline/doc/fdl.texi b/readline/doc/fdl.texi
index 8b13789..8805f1a 100644
--- a/readline/doc/fdl.texi
+++ b/readline/doc/fdl.texi
@@ -1 +1,506 @@
+ at c The GNU Free Documentation License.
+ at center Version 1.3, 3 November 2008
+
+ at c This file is intended to be included within another document,
+ at c hence no sectioning command or @node.
+
+ at display
+Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ at uref{http://fsf.org/}
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+ at end display
+
+ at enumerate 0
+ at item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{free} in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense.  It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does.  But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book.  We recommend this License
+principally for works whose purpose is instruction or reference.
+
+ at item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License.  Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein.  The ``Document'', below,
+refers to any such manual or work.  Any member of the public is a
+licensee, and is addressed as ``you''.  You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject.  (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.)  The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.  If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant.  The Document may contain zero
+Invariant Sections.  If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.  A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters.  A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text.  A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+ at sc{ascii} without markup, Texinfo input format, La at TeX{} input
+format, @acronym{SGML} or @acronym{XML} using a publicly available
+ at acronym{DTD}, and standard-conforming simple @acronym{HTML},
+PostScript or @acronym{PDF} designed for human modification.  Examples
+of transparent image formats include @acronym{PNG}, @acronym{XCF} and
+ at acronym{JPG}.  Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, @acronym{SGML} or
+ at acronym{XML} for which the @acronym{DTD} and/or processing tools are
+not generally available, and the machine-generated @acronym{HTML},
+PostScript or @acronym{PDF} produced by some word processors for
+output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page.  For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+The ``publisher'' means any person or entity that distributes copies
+of the Document to the public.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language.  (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.)  To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document.  These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+ at item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License.  You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute.  However, you may accept
+compensation in exchange for copies.  If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+ at item
+COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover.  Both covers must also clearly and legibly identify
+you as the publisher of these copies.  The front cover must present
+the full title with all words of the title equally prominent and
+visible.  You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+ at item
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it.  In addition, you must do these things in the Modified Version:
+
+ at enumerate A
+ at item
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document).  You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
+ at item
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
+ at item
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+ at item
+Preserve all the copyright notices of the Document.
+
+ at item
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+ at item
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
+ at item
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+ at item
+Include an unaltered copy of this License.
+
+ at item
+Preserve the section Entitled ``History'', Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page.  If
+there is no section Entitled ``History'' in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
+ at item
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on.  These may be placed in the ``History'' section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
+ at item
+For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
+ at item
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles.  Section numbers
+or the equivalent are not considered part of the section titles.
+
+ at item
+Delete any section Entitled ``Endorsements''.  Such a section
+may not be included in the Modified Version.
+
+ at item
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
+ at item
+Preserve any Warranty Disclaimers.
+ at end enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant.  To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version.  Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity.  If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+ at item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy.  If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''.  You must delete all
+sections Entitled ``Endorsements.''
+
+ at item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+ at item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+ at item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections.  You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers.  In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+ at item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
+ at item
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation 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.  See
+ at uref{http://www.gnu.org/copyleft/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation.  If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.  If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+ at item
+RELICENSING
+
+``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works.  A
+public wiki that anybody can edit is an example of such a server.  A
+``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
+site means any set of copyrightable works thus published on the MMC
+site.
+
+``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+
+``Incorporate'' means to publish or republish a Document, in whole or
+in part, as part of another Document.
+
+An MMC is ``eligible for relicensing'' if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole
+or in part into the MMC, (1) had no cover texts or invariant sections,
+and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
+ at end enumerate
+
+ at page
+ at heading ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+ at smallexample
+ at group
+  Copyright (C)  @var{year}  @var{your name}.
+  Permission is granted to copy, distribute and/or modify this document
+  under the terms of the GNU Free Documentation License, Version 1.3
+  or any later version published by the Free Software Foundation;
+  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+  Texts.  A copy of the license is included in the section entitled ``GNU
+  Free Documentation License''.
+ at end group
+ at end smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with at dots{}Texts.'' line with this:
+
+ at smallexample
+ at group
+    with the Invariant Sections being @var{list their titles}, with
+    the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+    being @var{list}.
+ at end group
+ at end smallexample
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+ at c Local Variables:
+ at c ispell-local-pdict: "ispell-dict"
+ at c End:
 
diff --git a/readline/doc/history.texi b/readline/doc/history.texi
index 8b13789..64945d8 100644
--- a/readline/doc/history.texi
+++ b/readline/doc/history.texi
@@ -1 +1,99 @@
+\input texinfo    @c -*-texinfo-*-
+ at c %**start of header (This is for running Texinfo on a region.)
+ at setfilename history.info
+ at settitle GNU History Library
+ at c %**end of header (This is for running Texinfo on a region.)
 
+ at include version.texi
+
+ at copying
+This document describes the GNU History library
+(version @value{VERSION}, @value{UPDATED}),
+a programming tool that provides a consistent user interface for
+recalling lines of previously typed input.
+
+Copyright @copyright{} 1988--2011 Free Software Foundation, Inc.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+ at quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU Manual'',
+and with the Back-Cover Texts as in (a) below.  A copy of the license is
+included in the section entitled ``GNU Free Documentation License''.
+
+(a) The FSF's Back-Cover Text is: You are free to copy and modify
+this GNU manual.  Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom.''
+
+ at end quotation
+ at end copying
+
+ at dircategory Libraries
+ at direntry
+* History: (history).       The GNU history library API.
+ at end direntry
+
+ at titlepage
+ at title GNU History Library
+ at subtitle Edition @value{EDITION}, for @code{History Library} Version @value{VERSION}.
+ at subtitle @value{UPDATED-MONTH}
+ at author Chet Ramey, Case Western Reserve University
+ at author Brian Fox, Free Software Foundation
+
+ at page
+
+ at vskip 0pt plus 1filll
+ at insertcopying
+
+ at sp 1
+Published by the Free Software Foundation @*
+59 Temple Place, Suite 330, @*
+Boston, MA 02111-1307 @*
+USA @*
+
+ at end titlepage
+
+ at contents
+
+ at ifnottex
+ at node Top
+ at top GNU History Library
+
+This document describes the GNU History library, a programming tool that
+provides a consistent user interface for recalling lines of previously
+typed input.
+
+ at menu
+* Using History Interactively::	  GNU History User's Manual.
+* Programming with GNU History::  GNU History Programmer's Manual.
+* GNU Free Documentation License::	License for copying this manual.
+* Concept Index::		  Index of concepts described in this manual.
+* Function and Variable Index::	  Index of externally visible functions
+				  and variables.
+ at end menu
+ at end ifnottex
+
+ at syncodeindex fn vr
+
+ at include hsuser.texi
+ at include hstech.texi
+
+ at node GNU Free Documentation License
+ at appendix GNU Free Documentation License
+
+ at include fdl.texi
+
+ at node Concept Index
+ at appendix Concept Index
+ at printindex cp
+
+ at node Function and Variable Index
+ at appendix Function and Variable Index
+ at printindex vr
+
+ at bye
diff --git a/readline/doc/hstech.texi b/readline/doc/hstech.texi
index 8b13789..4fc9e8e 100644
--- a/readline/doc/hstech.texi
+++ b/readline/doc/hstech.texi
@@ -1 +1,577 @@
+ at ignore
+This file documents the user interface to the GNU History library.
 
+Copyright (C) 1988-2011 Free Software Foundation, Inc.
+Authored by Brian Fox and Chet Ramey.
+
+Permission is granted to make and distribute verbatim copies of this manual
+provided the copyright notice and this permission notice are preserved on
+all copies.
+
+Permission is granted to process this file through Tex and print the
+results, provided the printed document carries copying permission notice
+identical to this one except for the removal of this paragraph (this
+paragraph not being relevant to the printed manual).
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that the
+GNU Copyright statement is available to the distributee, and provided that
+the entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+ at end ignore
+
+ at node Programming with GNU History
+ at chapter Programming with GNU History
+
+This chapter describes how to interface programs that you write
+with the @sc{gnu} History Library.
+It should be considered a technical guide.
+For information on the interactive use of @sc{gnu} History, @pxref{Using
+History Interactively}.
+
+ at menu
+* Introduction to History::	What is the GNU History library for?
+* History Storage::		How information is stored.
+* History Functions::		Functions that you can use.
+* History Variables::		Variables that control behaviour.
+* History Programming Example::	Example of using the GNU History Library.
+ at end menu
+
+ at node Introduction to History
+ at section Introduction to History
+
+Many programs read input from the user a line at a time.  The @sc{gnu}
+History library is able to keep track of those lines, associate arbitrary
+data with each line, and utilize information from previous lines in
+composing new ones. 
+
+The programmer using the History library has available functions
+for remembering lines on a history list, associating arbitrary data
+with a line, removing lines from the list, searching through the list
+for a line containing an arbitrary text string, and referencing any line
+in the list directly.  In addition, a history @dfn{expansion} function
+is available which provides for a consistent user interface across
+different programs.
+
+The user using programs written with the History library has the
+benefit of a consistent user interface with a set of well-known
+commands for manipulating the text of previous lines and using that text
+in new commands.  The basic history manipulation commands are similar to
+the history substitution provided by @code{csh}.
+
+If the programmer desires, he can use the Readline library, which
+includes some history manipulation by default, and has the added
+advantage of command line editing.
+
+Before declaring any functions using any functionality the History
+library provides in other code, an application writer should include
+the file @code{<readline/history.h>} in any file that uses the
+History library's features.  It supplies extern declarations for all
+of the library's public functions and variables, and declares all of
+the public data structures.
+
+ at node History Storage
+ at section History Storage
+
+The history list is an array of history entries.  A history entry is
+declared as follows:
+
+ at example
+typedef void *histdata_t;
+
+typedef struct _hist_entry @{
+  char *line;
+  char *timestamp;
+  histdata_t data;
+@} HIST_ENTRY;
+ at end example
+
+The history list itself might therefore be declared as
+
+ at example
+HIST_ENTRY **the_history_list;
+ at end example
+
+The state of the History library is encapsulated into a single structure:
+
+ at example
+/*
+ * A structure used to pass around the current state of the history.
+ */
+typedef struct _hist_state @{
+  HIST_ENTRY **entries; /* Pointer to the entries themselves. */
+  int offset;           /* The location pointer within this array. */
+  int length;           /* Number of elements within this array. */
+  int size;             /* Number of slots allocated to this array. */
+  int flags;
+@} HISTORY_STATE;
+ at end example
+
+If the flags member includes @code{HS_STIFLED}, the history has been
+stifled.
+
+ at node History Functions
+ at section History Functions
+
+This section describes the calling sequence for the various functions
+exported by the @sc{gnu} History library.
+
+ at menu
+* Initializing History and State Management::	Functions to call when you
+						want to use history in a
+						program.
+* History List Management::		Functions used to manage the list
+					of history entries.
+* Information About the History List::	Functions returning information about
+					the history list.
+* Moving Around the History List::	Functions used to change the position
+					in the history list.
+* Searching the History List::		Functions to search the history list
+					for entries containing a string.
+* Managing the History File::		Functions that read and write a file
+					containing the history list.
+* History Expansion::			Functions to perform csh-like history
+					expansion.
+ at end menu
+
+ at node Initializing History and State Management
+ at subsection Initializing History and State Management
+
+This section describes functions used to initialize and manage
+the state of the History library when you want to use the history
+functions in your program.
+
+ at deftypefun void using_history (void)
+Begin a session in which the history functions might be used.  This
+initializes the interactive variables.
+ at end deftypefun
+
+ at deftypefun {HISTORY_STATE *} history_get_history_state (void)
+Return a structure describing the current state of the input history.
+ at end deftypefun
+
+ at deftypefun void history_set_history_state (HISTORY_STATE *state)
+Set the state of the history list according to @var{state}.
+ at end deftypefun
+
+ at node History List Management
+ at subsection History List Management
+
+These functions manage individual entries on the history list, or set
+parameters managing the list itself.
+
+ at deftypefun void add_history (const char *string)
+Place @var{string} at the end of the history list.  The associated data
+field (if any) is set to @code{NULL}.
+ at end deftypefun
+
+ at deftypefun void add_history_time (const char *string)
+Change the time stamp associated with the most recent history entry to
+ at var{string}.
+ at end deftypefun
+
+ at deftypefun {HIST_ENTRY *} remove_history (int which)
+Remove history entry at offset @var{which} from the history.  The
+removed element is returned so you can free the line, data,
+and containing structure.
+ at end deftypefun
+
+ at deftypefun {histdata_t} free_history_entry (HIST_ENTRY *histent)
+Free the history entry @var{histent} and any history library private
+data associated with it.  Returns the application-specific data
+so the caller can dispose of it.
+ at end deftypefun
+
+ at deftypefun {HIST_ENTRY *} replace_history_entry (int which, const char *line, histdata_t data)
+Make the history entry at offset @var{which} have @var{line} and @var{data}.
+This returns the old entry so the caller can dispose of any
+application-specific data.  In the case
+of an invalid @var{which}, a @code{NULL} pointer is returned.
+ at end deftypefun
+
+ at deftypefun void clear_history (void)
+Clear the history list by deleting all the entries.
+ at end deftypefun
+
+ at deftypefun void stifle_history (int max)
+Stifle the history list, remembering only the last @var{max} entries.
+ at end deftypefun
+
+ at deftypefun int unstifle_history (void)
+Stop stifling the history.  This returns the previously-set
+maximum number of history entries (as set by @code{stifle_history()}).
+The value is positive if the history was
+stifled, negative if it wasn't.
+ at end deftypefun
+
+ at deftypefun int history_is_stifled (void)
+Returns non-zero if the history is stifled, zero if it is not.
+ at end deftypefun
+
+ at node Information About the History List
+ at subsection Information About the History List
+
+These functions return information about the entire history list or
+individual list entries.
+
+ at deftypefun {HIST_ENTRY **} history_list (void)
+Return a @code{NULL} terminated array of @code{HIST_ENTRY *} which is the
+current input history.  Element 0 of this list is the beginning of time.
+If there is no history, return @code{NULL}.
+ at end deftypefun
+
+ at deftypefun int where_history (void)
+Returns the offset of the current history element.
+ at end deftypefun
+
+ at deftypefun {HIST_ENTRY *} current_history (void)
+Return the history entry at the current position, as determined by
+ at code{where_history()}.  If there is no entry there, return a @code{NULL}
+pointer.
+ at end deftypefun
+
+ at deftypefun {HIST_ENTRY *} history_get (int offset)
+Return the history entry at position @var{offset}, starting from
+ at code{history_base} (@pxref{History Variables}).
+If there is no entry there, or if @var{offset}
+is greater than the history length, return a @code{NULL} pointer.
+ at end deftypefun
+
+ at deftypefun time_t history_get_time (HIST_ENTRY *entry)
+Return the time stamp associated with the history entry @var{entry}.
+ at end deftypefun
+
+ at deftypefun int history_total_bytes (void)
+Return the number of bytes that the primary history entries are using.
+This function returns the sum of the lengths of all the lines in the
+history.
+ at end deftypefun
+
+ at node Moving Around the History List
+ at subsection Moving Around the History List
+
+These functions allow the current index into the history list to be
+set or changed.
+
+ at deftypefun int history_set_pos (int pos)
+Set the current history offset to @var{pos}, an absolute index
+into the list.
+Returns 1 on success, 0 if @var{pos} is less than zero or greater
+than the number of history entries.
+ at end deftypefun
+
+ at deftypefun {HIST_ENTRY *} previous_history (void)
+Back up the current history offset to the previous history entry, and
+return a pointer to that entry.  If there is no previous entry, return
+a @code{NULL} pointer.
+ at end deftypefun
+
+ at deftypefun {HIST_ENTRY *} next_history (void)
+Move the current history offset forward to the next history entry, and
+return the a pointer to that entry.  If there is no next entry, return
+a @code{NULL} pointer.
+ at end deftypefun
+
+ at node Searching the History List
+ at subsection Searching the History List
+ at cindex History Searching
+
+These functions allow searching of the history list for entries containing
+a specific string.  Searching may be performed both forward and backward
+from the current history position.  The search may be @dfn{anchored},
+meaning that the string must match at the beginning of the history entry.
+ at cindex anchored search
+
+ at deftypefun int history_search (const char *string, int direction)
+Search the history for @var{string}, starting at the current history offset.
+If @var{direction} is less than 0, then the search is through
+previous entries, otherwise through subsequent entries.
+If @var{string} is found, then
+the current history index is set to that history entry, and the value
+returned is the offset in the line of the entry where
+ at var{string} was found.  Otherwise, nothing is changed, and a -1 is
+returned.
+ at end deftypefun
+
+ at deftypefun int history_search_prefix (const char *string, int direction)
+Search the history for @var{string}, starting at the current history
+offset.  The search is anchored: matching lines must begin with
+ at var{string}.  If @var{direction} is less than 0, then the search is
+through previous entries, otherwise through subsequent entries.
+If @var{string} is found, then the
+current history index is set to that entry, and the return value is 0. 
+Otherwise, nothing is changed, and a -1 is returned. 
+ at end deftypefun
+
+ at deftypefun int history_search_pos (const char *string, int direction, int pos)
+Search for @var{string} in the history list, starting at @var{pos}, an
+absolute index into the list.  If @var{direction} is negative, the search
+proceeds backward from @var{pos}, otherwise forward.  Returns the absolute
+index of the history element where @var{string} was found, or -1 otherwise.
+ at end deftypefun
+
+ at node Managing the History File
+ at subsection Managing the History File
+
+The History library can read the history from and write it to a file.
+This section documents the functions for managing a history file.
+
+ at deftypefun int read_history (const char *filename)
+Add the contents of @var{filename} to the history list, a line at a time.
+If @var{filename} is @code{NULL}, then read from @file{~/.history}.
+Returns 0 if successful, or @code{errno} if not.
+ at end deftypefun
+
+ at deftypefun int read_history_range (const char *filename, int from, int to)
+Read a range of lines from @var{filename}, adding them to the history list.
+Start reading at line @var{from} and end at @var{to}.
+If @var{from} is zero, start at the beginning.  If @var{to} is less than
+ at var{from}, then read until the end of the file.  If @var{filename} is
+ at code{NULL}, then read from @file{~/.history}.  Returns 0 if successful,
+or @code{errno} if not.
+ at end deftypefun
+
+ at deftypefun int write_history (const char *filename)
+Write the current history to @var{filename}, overwriting @var{filename}
+if necessary.
+If @var{filename} is @code{NULL}, then write the history list to
+ at file{~/.history}.
+Returns 0 on success, or @code{errno} on a read or write error.
+ at end deftypefun
+
+ at deftypefun int append_history (int nelements, const char *filename)
+Append the last @var{nelements} of the history list to @var{filename}.
+If @var{filename} is @code{NULL}, then append to @file{~/.history}.
+Returns 0 on success, or @code{errno} on a read or write error.
+ at end deftypefun
+
+ at deftypefun int history_truncate_file (const char *filename, int nlines)
+Truncate the history file @var{filename}, leaving only the last
+ at var{nlines} lines.
+If @var{filename} is @code{NULL}, then @file{~/.history} is truncated.
+Returns 0 on success, or @code{errno} on failure.
+ at end deftypefun
+
+ at node History Expansion
+ at subsection History Expansion
+
+These functions implement history expansion.
+
+ at deftypefun int history_expand (char *string, char **output)
+Expand @var{string}, placing the result into @var{output}, a pointer
+to a string (@pxref{History Interaction}).  Returns:
+ at table @code
+ at item 0
+If no expansions took place (or, if the only change in
+the text was the removal of escape characters preceding the history expansion
+character);
+ at item 1
+if expansions did take place;
+ at item -1
+if there was an error in expansion;
+ at item 2
+if the returned line should be displayed, but not executed,
+as with the @code{:p} modifier (@pxref{Modifiers}).
+ at end table
+
+If an error ocurred in expansion, then @var{output} contains a descriptive
+error message.
+ at end deftypefun
+
+ at deftypefun {char *} get_history_event (const char *string, int *cindex, int qchar)
+Returns the text of the history event beginning at @var{string} +
+ at var{*cindex}.  @var{*cindex} is modified to point to after the event
+specifier.  At function entry, @var{cindex} points to the index into
+ at var{string} where the history event specification begins.  @var{qchar}
+is a character that is allowed to end the event specification in addition
+to the ``normal'' terminating characters.
+ at end deftypefun
+
+ at deftypefun {char **} history_tokenize (const char *string)
+Return an array of tokens parsed out of @var{string}, much as the
+shell might.  The tokens are split on the characters in the
+ at var{history_word_delimiters} variable,
+and shell quoting conventions are obeyed.
+ at end deftypefun
+
+ at deftypefun {char *} history_arg_extract (int first, int last, const char *string)
+Extract a string segment consisting of the @var{first} through @var{last}
+arguments present in @var{string}.  Arguments are split using
+ at code{history_tokenize}.
+ at end deftypefun
+
+ at node History Variables
+ at section History Variables
+
+This section describes the externally-visible variables exported by
+the @sc{gnu} History Library.
+
+ at deftypevar int history_base
+The logical offset of the first entry in the history list.
+ at end deftypevar
+
+ at deftypevar int history_length
+The number of entries currently stored in the history list.
+ at end deftypevar
+
+ at deftypevar int history_max_entries
+The maximum number of history entries.  This must be changed using
+ at code{stifle_history()}.
+ at end deftypevar
+
+ at deftypevar int history_write_timestamps
+If non-zero, timestamps are written to the history file, so they can be
+preserved between sessions.  The default value is 0, meaning that
+timestamps are not saved.
+
+The current timestamp format uses the value of @var{history_comment_char}
+to delimit timestamp entries in the history file.  If that variable does
+not have a value (the default), timestamps will not be written.
+ at end deftypevar
+
+ at deftypevar char history_expansion_char
+The character that introduces a history event.  The default is @samp{!}.
+Setting this to 0 inhibits history expansion.
+ at end deftypevar
+
+ at deftypevar char history_subst_char
+The character that invokes word substitution if found at the start of
+a line.  The default is @samp{^}.
+ at end deftypevar
+
+ at deftypevar char history_comment_char
+During tokenization, if this character is seen as the first character
+of a word, then it and all subsequent characters up to a newline are
+ignored, suppressing history expansion for the remainder of the line.
+This is disabled by default.
+ at end deftypevar
+
+ at deftypevar {char *} history_word_delimiters
+The characters that separate tokens for @code{history_tokenize()}.
+The default value is @code{" \t\n()<>;&|"}.
+ at end deftypevar
+
+ at deftypevar {char *} history_search_delimiter_chars
+The list of additional characters which can delimit a history search
+string, in addition to space, TAB, @samp{:} and @samp{?} in the case of
+a substring search.  The default is empty.
+ at end deftypevar
+
+ at deftypevar {char *} history_no_expand_chars
+The list of characters which inhibit history expansion if found immediately
+following @var{history_expansion_char}.  The default is space, tab, newline,
+carriage return, and @samp{=}.
+ at end deftypevar
+
+ at deftypevar int history_quotes_inhibit_expansion
+If non-zero, single-quoted words are not scanned for the history expansion
+character.  The default value is 0.
+ at end deftypevar
+
+ at deftypevar {rl_linebuf_func_t *} history_inhibit_expansion_function
+This should be set to the address of a function that takes two arguments:
+a @code{char *} (@var{string})
+and an @code{int} index into that string (@var{i}).
+It should return a non-zero value if the history expansion starting at
+ at var{string[i]} should not be performed; zero if the expansion should
+be done.
+It is intended for use by applications like Bash that use the history
+expansion character for additional purposes.
+By default, this variable is set to @code{NULL}.
+ at end deftypevar
+
+ at node History Programming Example
+ at section History Programming Example
+
+The following program demonstrates simple use of the @sc{gnu} History Library.
+
+ at smallexample
+#include <stdio.h>
+#include <readline/history.h>
+
+main (argc, argv)
+     int argc;
+     char **argv;
+@{
+  char line[1024], *t;
+  int len, done = 0;
+
+  line[0] = 0;
+
+  using_history ();
+  while (!done)
+    @{
+      printf ("history$ ");
+      fflush (stdout);
+      t = fgets (line, sizeof (line) - 1, stdin);
+      if (t && *t)
+        @{
+          len = strlen (t);
+          if (t[len - 1] == '\n')
+            t[len - 1] = '\0';
+        @}
+
+      if (!t)
+        strcpy (line, "quit");
+
+      if (line[0])
+        @{
+          char *expansion;
+          int result;
+
+          result = history_expand (line, &expansion);
+          if (result)
+            fprintf (stderr, "%s\n", expansion);
+
+          if (result < 0 || result == 2)
+            @{
+              free (expansion);
+              continue;
+            @}
+
+          add_history (expansion);
+          strncpy (line, expansion, sizeof (line) - 1);
+          free (expansion);
+        @}
+
+      if (strcmp (line, "quit") == 0)
+        done = 1;
+      else if (strcmp (line, "save") == 0)
+        write_history ("history_file");
+      else if (strcmp (line, "read") == 0)
+        read_history ("history_file");
+      else if (strcmp (line, "list") == 0)
+        @{
+          register HIST_ENTRY **the_list;
+          register int i;
+
+          the_list = history_list ();
+          if (the_list)
+            for (i = 0; the_list[i]; i++)
+              printf ("%d: %s\n", i + history_base, the_list[i]->line);
+        @}
+      else if (strncmp (line, "delete", 6) == 0)
+        @{
+          int which;
+          if ((sscanf (line + 6, "%d", &which)) == 1)
+            @{
+              HIST_ENTRY *entry = remove_history (which);
+              if (!entry)
+                fprintf (stderr, "No such entry %d\n", which);
+              else
+                @{
+                  free (entry->line);
+                  free (entry);
+                @}
+            @}
+          else
+            @{
+              fprintf (stderr, "non-numeric arg given to `delete'\n");
+            @}
+        @}
+    @}
+@}
+ at end smallexample
diff --git a/readline/doc/hsuser.texi b/readline/doc/hsuser.texi
index 8b13789..9aa6c35 100644
--- a/readline/doc/hsuser.texi
+++ b/readline/doc/hsuser.texi
@@ -1 +1,473 @@
+ at ignore
+This file documents the user interface to the GNU History library.
 
+Copyright (C) 1988--2011 Free Software Foundation, Inc.
+Authored by Brian Fox and Chet Ramey.
+
+Permission is granted to make and distribute verbatim copies of this manual
+provided the copyright notice and this permission notice are preserved on
+all copies.
+
+Permission is granted to process this file through Tex and print the
+results, provided the printed document carries copying permission notice
+identical to this one except for the removal of this paragraph (this
+paragraph not being relevant to the printed manual).
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that the
+GNU Copyright statement is available to the distributee, and provided that
+the entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+ at end ignore
+
+ at node Using History Interactively
+ at chapter Using History Interactively
+
+ at c GDB bundling modification:
+ at c @ifclear BashFeatures
+ at c @defcodeindex bt
+ at c @end ifclear
+
+ at ifset BashFeatures
+This chapter describes how to use the @sc{gnu} History Library
+interactively, from a user's standpoint.
+It should be considered a user's guide.
+For information on using the @sc{gnu} History Library in other programs,
+see the @sc{gnu} Readline Library Manual.
+ at end ifset
+ at ifclear BashFeatures
+This chapter describes how to use the @sc{gnu} History Library interactively,
+from a user's standpoint.  It should be considered a user's guide.  For
+information on using the @sc{gnu} History Library in your own programs,
+ at c GDB bundling modification:
+ at pxref{Programming with GNU History, , , history, GNU History Library}.
+ at end ifclear
+
+ at ifset BashFeatures
+ at menu
+* Bash History Facilities::	How Bash lets you manipulate your command
+				history.
+* Bash History Builtins::	The Bash builtin commands that manipulate
+				the command history.
+* History Interaction::		What it feels like using History as a user.
+ at end menu
+ at end ifset
+ at ifclear BashFeatures
+ at menu
+* History Interaction::		What it feels like using History as a user.
+ at end menu
+ at end ifclear
+
+ at ifset BashFeatures
+ at node Bash History Facilities
+ at section Bash History Facilities
+ at cindex command history
+ at cindex history list
+
+When the @option{-o history} option to the @code{set} builtin
+is enabled (@pxref{The Set Builtin}),
+the shell provides access to the @dfn{command history},
+the list of commands previously typed.
+The value of the @env{HISTSIZE} shell variable is used as the
+number of commands to save in a history list.
+The text of the last @env{$HISTSIZE}
+commands (default 500) is saved.
+The shell stores each command in the history list prior to
+parameter and variable expansion
+but after history expansion is performed, subject to the
+values of the shell variables
+ at env{HISTIGNORE} and @env{HISTCONTROL}.
+
+When the shell starts up, the history is initialized from the
+file named by the @env{HISTFILE} variable (default @file{~/.bash_history}).
+The file named by the value of @env{HISTFILE} is truncated, if
+necessary, to contain no more than the number of lines specified by
+the value of the @env{HISTFILESIZE} variable.
+When an interactive shell exits, the last
+ at env{$HISTSIZE} lines are copied from the history list to the file
+named by @env{$HISTFILE}.
+If the @code{histappend} shell option is set (@pxref{Bash Builtins}),
+the lines are appended to the history file,
+otherwise the history file is overwritten.
+If @env{HISTFILE}
+is unset, or if the history file is unwritable, the history is
+not saved.  After saving the history, the history file is truncated
+to contain no more than @env{$HISTFILESIZE}
+lines.  If @env{HISTFILESIZE} is not set, no truncation is performed.
+
+If the @env{HISTTIMEFORMAT} is set, the time stamp information
+associated with each history entry is written to the history file,
+marked with the history comment character.
+When the history file is read, lines beginning with the history
+comment character followed immediately by a digit are interpreted
+as timestamps for the previous history line.
+
+The builtin command @code{fc} may be used to list or edit and re-execute
+a portion of the history list.
+The @code{history} builtin may be used to display or modify the history
+list and manipulate the history file.
+When using command-line editing, search commands
+are available in each editing mode that provide access to the
+history list (@pxref{Commands For History}).
+
+The shell allows control over which commands are saved on the history
+list.  The @env{HISTCONTROL} and @env{HISTIGNORE}
+variables may be set to cause the shell to save only a subset of the
+commands entered.
+The @code{cmdhist}
+shell option, if enabled, causes the shell to attempt to save each
+line of a multi-line command in the same history entry, adding
+semicolons where necessary to preserve syntactic correctness.
+The @code{lithist}
+shell option causes the shell to save the command with embedded newlines
+instead of semicolons.
+The @code{shopt} builtin is used to set these options.
+ at xref{Bash Builtins}, for a description of @code{shopt}.
+
+ at node Bash History Builtins
+ at section Bash History Builtins
+ at cindex history builtins
+
+Bash provides two builtin commands which manipulate the
+history list and history file.
+
+ at table @code
+
+ at item fc
+ at btindex fc
+ at example
+ at code{fc [-e @var{ename}] [-lnr] [@var{first}] [@var{last}]}
+ at code{fc -s [@var{pat}=@var{rep}] [@var{command}]}
+ at end example
+
+Fix Command.  In the first form, a range of commands from @var{first} to
+ at var{last} is selected from the history list.  Both @var{first} and
+ at var{last} may be specified as a string (to locate the most recent
+command beginning with that string) or as a number (an index into the
+history list, where a negative number is used as an offset from the
+current command number).  If @var{last} is not specified it is set to
+ at var{first}.  If @var{first} is not specified it is set to the previous
+command for editing and @minus{}16 for listing.  If the @option{-l} flag is
+given, the commands are listed on standard output.  The @option{-n} flag
+suppresses the command numbers when listing.  The @option{-r} flag
+reverses the order of the listing.  Otherwise, the editor given by
+ at var{ename} is invoked on a file containing those commands.  If
+ at var{ename} is not given, the value of the following variable expansion
+is used: @code{$@{FCEDIT:-$@{EDITOR:-vi@}@}}.  This says to use the
+value of the @env{FCEDIT} variable if set, or the value of the
+ at env{EDITOR} variable if that is set, or @code{vi} if neither is set.
+When editing is complete, the edited commands are echoed and executed.
+
+In the second form, @var{command} is re-executed after each instance
+of @var{pat} in the selected command is replaced by @var{rep}.
+
+A useful alias to use with the @code{fc} command is @code{r='fc -s'}, so
+that typing @samp{r cc} runs the last command beginning with @code{cc}
+and typing @samp{r} re-executes the last command (@pxref{Aliases}).
+
+ at item history
+ at btindex history
+ at example
+history [@var{n}]
+history -c
+history -d @var{offset}
+history [-anrw] [@var{filename}]
+history -ps @var{arg}
+ at end example
+
+With no options, display the history list with line numbers.
+Lines prefixed with a @samp{*} have been modified.
+An argument of @var{n} lists only the last @var{n} lines.
+If the shell variable @env{HISTTIMEFORMAT} is set and not null,
+it is used as a format string for @var{strftime} to display
+the time stamp associated with each displayed history entry.
+No intervening blank is printed between the formatted time stamp
+and the history line.
+
+Options, if supplied, have the following meanings:
+
+ at table @code
+ at item -c
+Clear the history list.  This may be combined
+with the other options to replace the history list completely.
+
+ at item -d @var{offset}
+Delete the history entry at position @var{offset}.
+ at var{offset} should be specified as it appears when the history is
+displayed.
+
+ at item -a
+Append the new
+history lines (history lines entered since the beginning of the
+current Bash session) to the history file.
+
+ at item -n
+Append the history lines not already read from the history file
+to the current history list.  These are lines appended to the history
+file since the beginning of the current Bash session.
+
+ at item -r
+Read the current history file and append its contents to
+the history list.
+
+ at item -w
+Write out the current history to the history file.
+
+ at item -p
+Perform history substitution on the @var{arg}s and display the result
+on the standard output, without storing the results in the history list.
+
+ at item -s
+The @var{arg}s are added to the end of
+the history list as a single entry.
+
+ at end table
+
+When any of the @option{-w}, @option{-r}, @option{-a}, or @option{-n} options is
+used, if @var{filename}
+is given, then it is used as the history file.  If not, then
+the value of the @env{HISTFILE} variable is used.
+
+ at end table
+ at end ifset
+
+ at node History Interaction
+ at section History Expansion
+ at cindex history expansion
+
+The History library provides a history expansion feature that is similar
+to the history expansion provided by @code{csh}.  This section
+describes the syntax used to manipulate the history information.
+
+History expansions introduce words from the history list into
+the input stream, making it easy to repeat commands, insert the
+arguments to a previous command into the current input line, or
+fix errors in previous commands quickly.
+
+History expansion takes place in two parts.  The first is to determine
+which line from the history list should be used during substitution.
+The second is to select portions of that line for inclusion into the
+current one.  The line selected from the history is called the
+ at dfn{event}, and the portions of that line that are acted upon are
+called @dfn{words}.  Various @dfn{modifiers} are available to manipulate
+the selected words.  The line is broken into words in the same fashion
+that Bash does, so that several words
+surrounded by quotes are considered one word.
+History expansions are introduced by the appearance of the
+history expansion character, which is @samp{!} by default.
+ at ifset BashFeatures
+Only @samp{\} and @samp{'} may be used to escape the history expansion
+character.
+ at end ifset
+
+ at ifset BashFeatures
+Several shell options settable with the @code{shopt}
+builtin (@pxref{Bash Builtins}) may be used to tailor
+the behavior of history expansion.  If the
+ at code{histverify} shell option is enabled, and Readline
+is being used, history substitutions are not immediately passed to
+the shell parser.
+Instead, the expanded line is reloaded into the Readline
+editing buffer for further modification.
+If Readline is being used, and the @code{histreedit}
+shell option is enabled, a failed history expansion will be
+reloaded into the Readline editing buffer for correction.
+The @option{-p} option to the @code{history} builtin command
+may be used to see what a history expansion will do before using it.
+The @option{-s} option to the @code{history} builtin may be used to
+add commands to the end of the history list without actually executing
+them, so that they are available for subsequent recall.
+This is most useful in conjunction with Readline.
+
+The shell allows control of the various characters used by the
+history expansion mechanism with the @code{histchars} variable,
+as explained above (@pxref{Bash Variables}).  The shell uses
+the history comment character to mark history timestamps when
+writing the history file.
+ at end ifset
+
+ at menu
+* Event Designators::	How to specify which history line to use.
+* Word Designators::	Specifying which words are of interest.
+* Modifiers::		Modifying the results of substitution.
+ at end menu
+
+ at node Event Designators
+ at subsection Event Designators
+ at cindex event designators
+
+An event designator is a reference to a command line entry in the
+history list.
+Unless the reference is absolute, events are relative to the current
+position in the history list.
+ at cindex history events
+
+ at table @asis
+
+ at item @code{!}
+ at ifset BashFeatures
+Start a history substitution, except when followed by a space, tab,
+the end of the line, @samp{=} or @samp{(} (when the
+ at code{extglob} shell option is enabled using the @code{shopt} builtin).
+ at end ifset
+ at ifclear BashFeatures
+Start a history substitution, except when followed by a space, tab,
+the end of the line, or @samp{=}.
+ at end ifclear
+
+ at item @code{!@var{n}}
+Refer to command line @var{n}.
+
+ at item @code{!- at var{n}}
+Refer to the command @var{n} lines back.
+
+ at item @code{!!}
+Refer to the previous command.  This is a synonym for @samp{!-1}.
+
+ at item @code{!@var{string}}
+Refer to the most recent command
+preceding the current position in the history list
+starting with @var{string}.
+
+ at item @code{!?@var{string}[?]}
+Refer to the most recent command
+preceding the current position in the history list
+containing @var{string}.
+The trailing
+ at samp{?} may be omitted if the @var{string} is followed immediately by
+a newline.
+
+ at item @code{^@var{string1}^@var{string2}^}
+Quick Substitution.  Repeat the last command, replacing @var{string1}
+with @var{string2}.  Equivalent to
+ at code{!!:s/@var{string1}/@var{string2}/}.
+
+ at item @code{!#}
+The entire command line typed so far.
+
+ at end table
+
+ at node Word Designators
+ at subsection Word Designators
+
+Word designators are used to select desired words from the event.
+A @samp{:} separates the event specification from the word designator.  It
+may be omitted if the word designator begins with a @samp{^}, @samp{$},
+ at samp{*}, @samp{-}, or @samp{%}.  Words are numbered from the beginning
+of the line, with the first word being denoted by 0 (zero).  Words are
+inserted into the current line separated by single spaces.
+
+ at need 0.75
+For example,
+
+ at table @code
+ at item !!
+designates the preceding command.  When you type this, the preceding
+command is repeated in toto.
+
+ at item !!:$
+designates the last argument of the preceding command.  This may be
+shortened to @code{!$}.
+
+ at item !fi:2
+designates the second argument of the most recent command starting with
+the letters @code{fi}.
+ at end table
+
+ at need 0.75
+Here are the word designators:
+ 
+ at table @code
+
+ at item 0 (zero)
+The @code{0}th word.  For many applications, this is the command word.
+
+ at item @var{n}
+The @var{n}th word.
+
+ at item ^
+The first argument; that is, word 1.
+
+ at item $
+The last argument.
+
+ at item %
+The word matched by the most recent @samp{?@var{string}?} search.
+
+ at item @var{x}- at var{y}
+A range of words; @samp{- at var{y}} abbreviates @samp{0- at var{y}}.
+
+ at item *
+All of the words, except the @code{0}th.  This is a synonym for @samp{1-$}.
+It is not an error to use @samp{*} if there is just one word in the event;
+the empty string is returned in that case.
+
+ at item @var{x}*
+Abbreviates @samp{@var{x}-$}
+
+ at item @var{x}-
+Abbreviates @samp{@var{x}-$} like @samp{@var{x}*}, but omits the last word.
+
+ at end table
+
+If a word designator is supplied without an event specification, the
+previous command is used as the event.
+
+ at node Modifiers
+ at subsection Modifiers
+
+After the optional word designator, you can add a sequence of one or more
+of the following modifiers, each preceded by a @samp{:}.
+
+ at table @code
+
+ at item h
+Remove a trailing pathname component, leaving only the head.
+
+ at item t
+Remove all leading pathname components, leaving the tail.
+
+ at item r
+Remove a trailing suffix of the form @samp{. at var{suffix}}, leaving
+the basename.
+
+ at item e
+Remove all but the trailing suffix.
+
+ at item p
+Print the new command but do not execute it.
+
+ at ifset BashFeatures
+ at item q
+Quote the substituted words, escaping further substitutions.
+
+ at item x
+Quote the substituted words as with @samp{q},
+but break into words at spaces, tabs, and newlines.
+ at end ifset
+
+ at item s/@var{old}/@var{new}/
+Substitute @var{new} for the first occurrence of @var{old} in the
+event line.  Any delimiter may be used in place of @samp{/}.
+The delimiter may be quoted in @var{old} and @var{new}
+with a single backslash.  If @samp{&} appears in @var{new},
+it is replaced by @var{old}.  A single backslash will quote
+the @samp{&}.  The final delimiter is optional if it is the last
+character on the input line.
+
+ at item &
+Repeat the previous substitution.
+
+ at item g
+ at itemx a
+Cause changes to be applied over the entire event line.  Used in
+conjunction with @samp{s}, as in @code{gs/@var{old}/@var{new}/},
+or with @samp{&}.
+
+ at item G
+Apply the following @samp{s} modifier once to each word in the event.
+
+ at end table
diff --git a/readline/doc/rlman.texi b/readline/doc/rlman.texi
index 8b13789..1c9ac13 100644
--- a/readline/doc/rlman.texi
+++ b/readline/doc/rlman.texi
@@ -1 +1,97 @@
+\input texinfo    @c -*-texinfo-*-
+ at comment %**start of header (This is for running Texinfo on a region.)
+ at setfilename readline.info
+ at settitle GNU Readline Library
+ at comment %**end of header (This is for running Texinfo on a region.)
+ at synindex vr fn
 
+ at include version.texi
+
+ at copying
+This manual describes the GNU Readline Library
+(version @value{VERSION}, @value{UPDATED}), a library which aids in the
+consistency of user interface across discrete programs which provide
+a command line interface.
+
+Copyright @copyright{} 1988--2011 Free Software Foundation, Inc.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+ at quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU Manual'',
+and with the Back-Cover Texts as in (a) below.  A copy of the license is
+included in the section entitled ``GNU Free Documentation License''.
+
+(a) The FSF's Back-Cover Text is: You are free to copy and modify
+this GNU manual.  Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom.''
+
+ at end quotation
+ at end copying
+
+ at dircategory Libraries
+ at direntry
+* Readline: (readline).       The GNU readline library API.
+ at end direntry
+
+ at titlepage  
+ at title GNU Readline Library
+ at subtitle Edition @value{EDITION}, for @code{Readline Library} Version @value{VERSION}.
+ at subtitle @value{UPDATED-MONTH}
+ at author Chet Ramey, Case Western Reserve University
+ at author Brian Fox, Free Software Foundation
+
+ at page
+ at vskip 0pt plus 1filll
+ at insertcopying
+
+ at sp 1
+Published by the Free Software Foundation @*
+59 Temple Place, Suite 330, @*
+Boston, MA 02111-1307 @*
+USA @*
+
+ at end titlepage
+
+ at contents
+
+ at ifnottex
+ at node Top
+ at top GNU Readline Library
+
+This document describes the GNU Readline Library, a utility which aids
+in the consistency of user interface across discrete programs which
+provide a command line interface.
+
+ at menu
+* Command Line Editing::	   GNU Readline User's Manual.
+* Programming with GNU Readline::  GNU Readline Programmer's Manual.
+* GNU Free Documentation License::	License for copying this manual.
+* Concept Index::		   Index of concepts described in this manual.
+* Function and Variable Index::	   Index of externally visible functions
+				   and variables.
+ at end menu
+ at end ifnottex
+
+ at include rluser.texi
+ at include rltech.texi
+
+ at node GNU Free Documentation License
+ at appendix GNU Free Documentation License
+
+ at include fdl.texi
+
+ at node Concept Index
+ at unnumbered Concept Index
+ at printindex cp
+
+ at node Function and Variable Index
+ at unnumbered Function and Variable Index
+ at printindex fn
+
+ at bye
diff --git a/readline/doc/rltech.texi b/readline/doc/rltech.texi
index 8b13789..dc272a2 100644
--- a/readline/doc/rltech.texi
+++ b/readline/doc/rltech.texi
@@ -1 +1,2420 @@
+ at comment %**start of header (This is for running Texinfo on a region.)
+ at setfilename rltech.info
+ at comment %**end of header (This is for running Texinfo on a region.)
 
+ at ifinfo
+This document describes the GNU Readline Library, a utility for aiding
+in the consistency of user interface across discrete programs that need
+to provide a command line interface.
+
+Copyright (C) 1988--2011 Free Software Foundation, Inc.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+pare preserved on all copies.
+
+ at ignore
+Permission is granted to process this file through TeX and print the
+results, provided the printed document carries copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+ at end ignore
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that this permission notice may be stated in a translation approved
+by the Foundation.
+ at end ifinfo
+
+ at node Programming with GNU Readline
+ at chapter Programming with GNU Readline
+
+This chapter describes the interface between the @sc{gnu} Readline Library and
+other programs.  If you are a programmer, and you wish to include the
+features found in @sc{gnu} Readline
+such as completion, line editing, and interactive history manipulation
+in your own programs, this section is for you.
+
+ at menu
+* Basic Behavior::	Using the default behavior of Readline.
+* Custom Functions::	Adding your own functions to Readline.
+* Readline Variables::			Variables accessible to custom
+					functions.
+* Readline Convenience Functions::	Functions which Readline supplies to
+					aid in writing your own custom
+					functions.
+* Readline Signal Handling::	How Readline behaves when it receives signals.
+* Custom Completers::	Supplanting or supplementing Readline's
+			completion functions.
+ at end menu
+
+ at node Basic Behavior
+ at section Basic Behavior
+
+Many programs provide a command line interface, such as @code{mail},
+ at code{ftp}, and @code{sh}.  For such programs, the default behaviour of
+Readline is sufficient.  This section describes how to use Readline in
+the simplest way possible, perhaps to replace calls in your code to
+ at code{gets()} or @code{fgets()}.
+
+ at findex readline
+ at cindex readline, function
+
+The function @code{readline()} prints a prompt @var{prompt}
+and then reads and returns a single line of text from the user.
+If @var{prompt} is @code{NULL} or the empty string, no prompt is displayed.
+The line @code{readline} returns is allocated with @code{malloc()};
+the caller should @code{free()} the line when it has finished with it.
+The declaration for @code{readline} in ANSI C is
+
+ at example
+ at code{char *readline (const char *@var{prompt});}
+ at end example
+
+ at noindent
+So, one might say
+ at example
+ at code{char *line = readline ("Enter a line: ");}
+ at end example
+ at noindent
+in order to read a line of text from the user.
+The line returned has the final newline removed, so only the
+text remains.
+
+If @code{readline} encounters an @code{EOF} while reading the line, and the
+line is empty at that point, then @code{(char *)NULL} is returned.
+Otherwise, the line is ended just as if a newline had been typed.
+
+If you want the user to be able to get at the line later, (with
+ at key{C-p} for example), you must call @code{add_history()} to save the
+line away in a @dfn{history} list of such lines.
+
+ at example
+ at code{add_history (line)};
+ at end example
+
+ at noindent
+For full details on the GNU History Library, see the associated manual.
+
+It is preferable to avoid saving empty lines on the history list, since
+users rarely have a burning need to reuse a blank line.  Here is
+a function which usefully replaces the standard @code{gets()} library
+function, and has the advantage of no static buffer to overflow:
+
+ at example
+/* A static variable for holding the line. */
+static char *line_read = (char *)NULL;
+
+/* Read a string, and return a pointer to it.
+   Returns NULL on EOF. */
+char *
+rl_gets ()
+@{
+  /* If the buffer has already been allocated,
+     return the memory to the free pool. */
+  if (line_read)
+    @{
+      free (line_read);
+      line_read = (char *)NULL;
+    @}
+
+  /* Get a line from the user. */
+  line_read = readline ("");
+
+  /* If the line has any text in it,
+     save it on the history. */
+  if (line_read && *line_read)
+    add_history (line_read);
+
+  return (line_read);
+@}
+ at end example
+
+This function gives the user the default behaviour of @key{TAB}
+completion: completion on file names.  If you do not want Readline to
+complete on filenames, you can change the binding of the @key{TAB} key
+with @code{rl_bind_key()}.
+
+ at example
+ at code{int rl_bind_key (int @var{key}, rl_command_func_t *@var{function});}
+ at end example
+
+ at code{rl_bind_key()} takes two arguments: @var{key} is the character that
+you want to bind, and @var{function} is the address of the function to
+call when @var{key} is pressed.  Binding @key{TAB} to @code{rl_insert()}
+makes @key{TAB} insert itself.
+ at code{rl_bind_key()} returns non-zero if @var{key} is not a valid
+ASCII character code (between 0 and 255).
+
+Thus, to disable the default @key{TAB} behavior, the following suffices:
+ at example
+ at code{rl_bind_key ('\t', rl_insert);}
+ at end example
+
+This code should be executed once at the start of your program; you
+might write a function called @code{initialize_readline()} which
+performs this and other desired initializations, such as installing
+custom completers (@pxref{Custom Completers}).
+
+ at node Custom Functions
+ at section Custom Functions
+
+Readline provides many functions for manipulating the text of
+the line, but it isn't possible to anticipate the needs of all
+programs.  This section describes the various functions and variables
+defined within the Readline library which allow a user program to add
+customized functionality to Readline.
+
+Before declaring any functions that customize Readline's behavior, or
+using any functionality Readline provides in other code, an
+application writer should include the file @code{<readline/readline.h>}
+in any file that uses Readline's features.  Since some of the definitions
+in @code{readline.h} use the @code{stdio} library, the file
+ at code{<stdio.h>} should be included before @code{readline.h}.
+
+ at code{readline.h} defines a C preprocessor variable that should
+be treated as an integer, @code{RL_READLINE_VERSION}, which may
+be used to conditionally compile application code depending on
+the installed Readline version.  The value is a hexadecimal
+encoding of the major and minor version numbers of the library,
+of the form 0x at var{MMmm}.  @var{MM} is the two-digit major
+version number; @var{mm} is the two-digit minor version number. 
+For Readline 4.2, for example, the value of
+ at code{RL_READLINE_VERSION} would be @code{0x0402}. 
+
+ at menu
+* Readline Typedefs::	C declarations to make code readable.
+* Function Writing::	Variables and calling conventions.
+ at end menu
+
+ at node Readline Typedefs
+ at subsection Readline Typedefs
+
+For readabilty, we declare a number of new object types, all pointers
+to functions.
+
+The reason for declaring these new types is to make it easier to write
+code describing pointers to C functions with appropriately prototyped
+arguments and return values.
+
+For instance, say we want to declare a variable @var{func} as a pointer
+to a function which takes two @code{int} arguments and returns an
+ at code{int} (this is the type of all of the Readline bindable functions).
+Instead of the classic C declaration
+
+ at code{int (*func)();}
+
+ at noindent
+or the ANSI-C style declaration
+
+ at code{int (*func)(int, int);}
+
+ at noindent
+we may write
+
+ at code{rl_command_func_t *func;}
+
+The full list of function pointer types available is
+
+ at table @code
+ at item typedef int rl_command_func_t (int, int);
+
+ at item typedef char *rl_compentry_func_t (const char *, int);
+
+ at item typedef char **rl_completion_func_t (const char *, int, int);
+
+ at item typedef char *rl_quote_func_t (char *, int, char *);
+
+ at item typedef char *rl_dequote_func_t (char *, int);
+
+ at item typedef int rl_compignore_func_t (char **);
+
+ at item typedef void rl_compdisp_func_t (char **, int, int);
+
+ at item typedef int rl_hook_func_t (void);
+
+ at item typedef int rl_getc_func_t (FILE *);
+
+ at item typedef int rl_linebuf_func_t (char *, int);
+
+ at item typedef int rl_intfunc_t (int);
+ at item #define rl_ivoidfunc_t rl_hook_func_t
+ at item typedef int rl_icpfunc_t (char *);
+ at item typedef int rl_icppfunc_t (char **);
+
+ at item typedef void rl_voidfunc_t (void);
+ at item typedef void rl_vintfunc_t (int);
+ at item typedef void rl_vcpfunc_t (char *);
+ at item typedef void rl_vcppfunc_t (char **);
+
+ at end table
+
+ at node Function Writing
+ at subsection Writing a New Function
+
+In order to write new functions for Readline, you need to know the
+calling conventions for keyboard-invoked functions, and the names of the
+variables that describe the current state of the line read so far.
+
+The calling sequence for a command @code{foo} looks like
+
+ at example
+ at code{int foo (int count, int key)}
+ at end example
+
+ at noindent
+where @var{count} is the numeric argument (or 1 if defaulted) and
+ at var{key} is the key that invoked this function.
+
+It is completely up to the function as to what should be done with the
+numeric argument.  Some functions use it as a repeat count, some
+as a flag, and others to choose alternate behavior (refreshing the current
+line as opposed to refreshing the screen, for example).  Some choose to
+ignore it.  In general, if a
+function uses the numeric argument as a repeat count, it should be able
+to do something useful with both negative and positive arguments.
+At the very least, it should be aware that it can be passed a
+negative argument.
+
+A command function should return 0 if its action completes successfully,
+and a non-zero value if some error occurs.
+This is the convention obeyed by all of the builtin Readline bindable
+command functions.
+
+ at node Readline Variables
+ at section Readline Variables
+
+These variables are available to function writers.
+
+ at deftypevar {char *} rl_line_buffer
+This is the line gathered so far.  You are welcome to modify the
+contents of the line, but see @ref{Allowing Undoing}.  The
+function @code{rl_extend_line_buffer} is available to increase
+the memory allocated to @code{rl_line_buffer}.
+ at end deftypevar
+
+ at deftypevar int rl_point
+The offset of the current cursor position in @code{rl_line_buffer}
+(the @emph{point}).
+ at end deftypevar
+
+ at deftypevar int rl_end
+The number of characters present in @code{rl_line_buffer}.  When
+ at code{rl_point} is at the end of the line, @code{rl_point} and
+ at code{rl_end} are equal.
+ at end deftypevar
+
+ at deftypevar int rl_mark
+The @var{mark} (saved position) in the current line.  If set, the mark
+and point define a @emph{region}.
+ at end deftypevar
+
+ at deftypevar int rl_done
+Setting this to a non-zero value causes Readline to return the current
+line immediately.
+ at end deftypevar
+
+ at deftypevar int rl_num_chars_to_read
+Setting this to a positive value before calling @code{readline()} causes
+Readline to return after accepting that many characters, rather
+than reading up to a character bound to @code{accept-line}.
+ at end deftypevar
+
+ at deftypevar int rl_pending_input
+Setting this to a value makes it the next keystroke read.  This is a
+way to stuff a single character into the input stream.
+ at end deftypevar
+
+ at deftypevar int rl_dispatching
+Set to a non-zero value if a function is being called from a key binding;
+zero otherwise.  Application functions can test this to discover whether
+they were called directly or by Readline's dispatching mechanism.
+ at end deftypevar
+
+ at deftypevar int rl_erase_empty_line
+Setting this to a non-zero value causes Readline to completely erase
+the current line, including any prompt, any time a newline is typed as
+the only character on an otherwise-empty line.  The cursor is moved to
+the beginning of the newly-blank line.
+ at end deftypevar
+
+ at deftypevar {char *} rl_prompt
+The prompt Readline uses.  This is set from the argument to
+ at code{readline()}, and should not be assigned to directly.
+The @code{rl_set_prompt()} function (@pxref{Redisplay}) may
+be used to modify the prompt string after calling @code{readline()}.
+ at end deftypevar
+
+ at deftypevar {char *} rl_display_prompt
+The string displayed as the prompt.  This is usually identical to
+ at var{rl_prompt}, but may be changed temporarily by functions that
+use the prompt string as a message area, such as incremental search.
+ at end deftypevar
+
+ at deftypevar int rl_already_prompted
+If an application wishes to display the prompt itself, rather than have
+Readline do it the first time @code{readline()} is called, it should set
+this variable to a non-zero value after displaying the prompt.
+The prompt must also be passed as the argument to @code{readline()} so
+the redisplay functions can update the display properly.
+The calling application is responsible for managing the value; Readline
+never sets it.
+ at end deftypevar
+
+ at deftypevar {const char *} rl_library_version
+The version number of this revision of the library.
+ at end deftypevar
+
+ at deftypevar int rl_readline_version
+An integer encoding the current version of the library.  The encoding is
+of the form 0x at var{MMmm}, where @var{MM} is the two-digit major version
+number, and @var{mm} is the two-digit minor version number.
+For example, for Readline-4.2, @code{rl_readline_version} would have the
+value 0x0402.
+ at end deftypevar
+
+ at deftypevar {int} rl_gnu_readline_p
+Always set to 1, denoting that this is @sc{gnu} readline rather than some
+emulation.
+ at end deftypevar
+
+ at deftypevar {const char *} rl_terminal_name
+The terminal type, used for initialization.  If not set by the application,
+Readline sets this to the value of the @env{TERM} environment variable
+the first time it is called.
+ at end deftypevar
+
+ at deftypevar {const char *} rl_readline_name
+This variable is set to a unique name by each application using Readline.
+The value allows conditional parsing of the inputrc file
+(@pxref{Conditional Init Constructs}).
+ at end deftypevar
+
+ at deftypevar {FILE *} rl_instream
+The stdio stream from which Readline reads input.
+If @code{NULL}, Readline defaults to @var{stdin}.
+ at end deftypevar
+
+ at deftypevar {FILE *} rl_outstream
+The stdio stream to which Readline performs output.
+If @code{NULL}, Readline defaults to @var{stdout}.
+ at end deftypevar
+
+ at deftypevar int rl_prefer_env_winsize
+If non-zero, Readline gives values found in the @env{LINES} and
+ at env{COLUMNS} environment variables greater precedence than values fetched
+from the kernel when computing the screen dimensions.
+ at end deftypevar
+
+ at deftypevar {rl_command_func_t *} rl_last_func
+The address of the last command function Readline executed.  May be used to
+test whether or not a function is being executed twice in succession, for
+example.
+ at end deftypevar
+
+ at deftypevar {rl_hook_func_t *} rl_startup_hook
+If non-zero, this is the address of a function to call just
+before @code{readline} prints the first prompt.
+ at end deftypevar
+
+ at deftypevar {rl_hook_func_t *} rl_pre_input_hook
+If non-zero, this is the address of a function to call after
+the first prompt has been printed and just before @code{readline}
+starts reading input characters.
+ at end deftypevar
+
+ at deftypevar {rl_hook_func_t *} rl_event_hook
+If non-zero, this is the address of a function to call periodically
+when Readline is waiting for terminal input.
+By default, this will be called at most ten times a second if there
+is no keyboard input.
+ at end deftypevar
+
+ at deftypevar {rl_getc_func_t *} rl_getc_function
+If non-zero, Readline will call indirectly through this pointer
+to get a character from the input stream.  By default, it is set to
+ at code{rl_getc}, the default Readline character input function
+(@pxref{Character Input}).
+ at end deftypevar
+
+ at deftypevar {rl_voidfunc_t *} rl_redisplay_function
+If non-zero, Readline will call indirectly through this pointer
+to update the display with the current contents of the editing buffer.
+By default, it is set to @code{rl_redisplay}, the default Readline
+redisplay function (@pxref{Redisplay}).
+ at end deftypevar
+
+ at deftypevar {rl_vintfunc_t *} rl_prep_term_function
+If non-zero, Readline will call indirectly through this pointer
+to initialize the terminal.  The function takes a single argument, an
+ at code{int} flag that says whether or not to use eight-bit characters.
+By default, this is set to @code{rl_prep_terminal}
+(@pxref{Terminal Management}).
+ at end deftypevar
+
+ at deftypevar {rl_voidfunc_t *} rl_deprep_term_function
+If non-zero, Readline will call indirectly through this pointer
+to reset the terminal.  This function should undo the effects of
+ at code{rl_prep_term_function}.
+By default, this is set to @code{rl_deprep_terminal}
+(@pxref{Terminal Management}).
+ at end deftypevar
+
+ at deftypevar {Keymap} rl_executing_keymap
+This variable is set to the keymap (@pxref{Keymaps}) in which the
+currently executing readline function was found.
+ at end deftypevar 
+
+ at deftypevar {Keymap} rl_binding_keymap
+This variable is set to the keymap (@pxref{Keymaps}) in which the
+last key binding occurred.
+ at end deftypevar 
+
+ at deftypevar {char *} rl_executing_macro
+This variable is set to the text of any currently-executing macro.
+ at end deftypevar
+
+ at deftypevar {int} rl_readline_state
+A variable with bit values that encapsulate the current Readline state.
+A bit is set with the @code{RL_SETSTATE} macro, and unset with the
+ at code{RL_UNSETSTATE} macro.  Use the @code{RL_ISSTATE} macro to test
+whether a particular state bit is set.  Current state bits include:
+
+ at table @code
+ at item RL_STATE_NONE
+Readline has not yet been called, nor has it begun to intialize.
+ at item RL_STATE_INITIALIZING
+Readline is initializing its internal data structures.
+ at item RL_STATE_INITIALIZED
+Readline has completed its initialization.
+ at item RL_STATE_TERMPREPPED
+Readline has modified the terminal modes to do its own input and redisplay.
+ at item RL_STATE_READCMD
+Readline is reading a command from the keyboard.
+ at item RL_STATE_METANEXT
+Readline is reading more input after reading the meta-prefix character.
+ at item RL_STATE_DISPATCHING
+Readline is dispatching to a command.
+ at item RL_STATE_MOREINPUT
+Readline is reading more input while executing an editing command.
+ at item RL_STATE_ISEARCH
+Readline is performing an incremental history search.
+ at item RL_STATE_NSEARCH
+Readline is performing a non-incremental history search.
+ at item RL_STATE_SEARCH
+Readline is searching backward or forward through the history for a string.
+ at item RL_STATE_NUMERICARG
+Readline is reading a numeric argument.
+ at item RL_STATE_MACROINPUT
+Readline is currently getting its input from a previously-defined keyboard
+macro.
+ at item RL_STATE_MACRODEF
+Readline is currently reading characters defining a keyboard macro.
+ at item RL_STATE_OVERWRITE
+Readline is in overwrite mode.
+ at item RL_STATE_COMPLETING
+Readline is performing word completion.
+ at item RL_STATE_SIGHANDLER
+Readline is currently executing the readline signal handler.
+ at item RL_STATE_UNDOING
+Readline is performing an undo.
+ at item RL_STATE_INPUTPENDING
+Readline has input pending due to a call to @code{rl_execute_next()}.
+ at item RL_STATE_TTYCSAVED
+Readline has saved the values of the terminal's special characters.
+ at item RL_STATE_CALLBACK
+Readline is currently using the alternate (callback) interface
+(@pxref{Alternate Interface}).
+ at item RL_STATE_VIMOTION
+Readline is reading the argument to a vi-mode "motion" command.
+ at item RL_STATE_MULTIKEY
+Readline is reading a multiple-keystroke command.
+ at item RL_STATE_VICMDONCE
+Readline has entered vi command (movement) mode at least one time during
+the current call to @code{readline()}.
+ at item RL_STATE_DONE
+Readline has read a key sequence bound to @code{accept-line}
+and is about to return the line to the caller.
+ at end table
+
+ at end deftypevar
+
+ at deftypevar {int} rl_explicit_arg
+Set to a non-zero value if an explicit numeric argument was specified by
+the user.  Only valid in a bindable command function.
+ at end deftypevar
+
+ at deftypevar {int} rl_numeric_arg
+Set to the value of any numeric argument explicitly specified by the user
+before executing the current Readline function.  Only valid in a bindable
+command function.
+ at end deftypevar
+
+ at deftypevar {int} rl_editing_mode
+Set to a value denoting Readline's current editing mode.  A value of
+ at var{1} means Readline is currently in emacs mode; @var{0}
+means that vi mode is active.
+ at end deftypevar
+
+
+ at node Readline Convenience Functions
+ at section Readline Convenience Functions
+
+ at menu
+* Function Naming::	How to give a function you write a name.
+* Keymaps::		Making keymaps.
+* Binding Keys::	Changing Keymaps.
+* Associating Function Names and Bindings::	Translate function names to
+						key sequences.
+* Allowing Undoing::	How to make your functions undoable.
+* Redisplay::		Functions to control line display.
+* Modifying Text::	Functions to modify @code{rl_line_buffer}.
+* Character Input::	Functions to read keyboard input.
+* Terminal Management::	Functions to manage terminal settings.
+* Utility Functions::	Generally useful functions and hooks.
+* Miscellaneous Functions::	Functions that don't fall into any category.
+* Alternate Interface::	Using Readline in a `callback' fashion.
+* A Readline Example::		An example Readline function.
+ at end menu
+
+ at node Function Naming
+ at subsection Naming a Function
+
+The user can dynamically change the bindings of keys while using
+Readline.  This is done by representing the function with a descriptive
+name.  The user is able to type the descriptive name when referring to
+the function.  Thus, in an init file, one might find
+
+ at example
+Meta-Rubout:	backward-kill-word
+ at end example
+
+This binds the keystroke @key{Meta-Rubout} to the function
+ at emph{descriptively} named @code{backward-kill-word}.  You, as the
+programmer, should bind the functions you write to descriptive names as
+well.  Readline provides a function for doing that:
+
+ at deftypefun int rl_add_defun (const char *name, rl_command_func_t *function, int key)
+Add @var{name} to the list of named functions.  Make @var{function} be
+the function that gets called.  If @var{key} is not -1, then bind it to
+ at var{function} using @code{rl_bind_key()}.
+ at end deftypefun
+
+Using this function alone is sufficient for most applications.
+It is the recommended way to add a few functions to the default
+functions that Readline has built in.
+If you need to do something other than adding a function to Readline,
+you may need to use the underlying functions described below.
+
+ at node Keymaps
+ at subsection Selecting a Keymap
+
+Key bindings take place on a @dfn{keymap}.  The keymap is the
+association between the keys that the user types and the functions that
+get run.  You can make your own keymaps, copy existing keymaps, and tell
+Readline which keymap to use.
+
+ at deftypefun Keymap rl_make_bare_keymap (void)
+Returns a new, empty keymap.  The space for the keymap is allocated with
+ at code{malloc()}; the caller should free it by calling
+ at code{rl_free_keymap()} when done.
+ at end deftypefun
+
+ at deftypefun Keymap rl_copy_keymap (Keymap map)
+Return a new keymap which is a copy of @var{map}.
+ at end deftypefun
+
+ at deftypefun Keymap rl_make_keymap (void)
+Return a new keymap with the printing characters bound to rl_insert,
+the lowercase Meta characters bound to run their equivalents, and
+the Meta digits bound to produce numeric arguments.
+ at end deftypefun
+
+ at deftypefun void rl_discard_keymap (Keymap keymap)
+Free the storage associated with the data in @var{keymap}.
+The caller should free @var{keymap}.
+ at end deftypefun
+
+ at deftypefun void rl_free_keymap (Keymap keymap)
+Free all storage associated with @var{keymap}.  This calls
+ at code{rl_discard_keymap} to free subordindate keymaps and macros.
+ at end deftypefun
+
+Readline has several internal keymaps.  These functions allow you to
+change which keymap is active.
+
+ at deftypefun Keymap rl_get_keymap (void)
+Returns the currently active keymap.
+ at end deftypefun
+
+ at deftypefun void rl_set_keymap (Keymap keymap)
+Makes @var{keymap} the currently active keymap.
+ at end deftypefun
+
+ at deftypefun Keymap rl_get_keymap_by_name (const char *name)
+Return the keymap matching @var{name}.  @var{name} is one which would
+be supplied in a @code{set keymap} inputrc line (@pxref{Readline Init File}).
+ at end deftypefun
+
+ at deftypefun {char *} rl_get_keymap_name (Keymap keymap)
+Return the name matching @var{keymap}.  @var{name} is one which would
+be supplied in a @code{set keymap} inputrc line (@pxref{Readline Init File}).
+ at end deftypefun
+
+ at node Binding Keys
+ at subsection Binding Keys
+
+Key sequences are associate with functions through the keymap.
+Readline has several internal keymaps: @code{emacs_standard_keymap},
+ at code{emacs_meta_keymap}, @code{emacs_ctlx_keymap},
+ at code{vi_movement_keymap}, and @code{vi_insertion_keymap}.
+ at code{emacs_standard_keymap} is the default, and the examples in
+this manual assume that.
+
+Since @code{readline()} installs a set of default key bindings the first
+time it is called, there is always the danger that a custom binding
+installed before the first call to @code{readline()} will be overridden.
+An alternate mechanism is to install custom key bindings in an
+initialization function assigned to the @code{rl_startup_hook} variable
+(@pxref{Readline Variables}).
+
+These functions manage key bindings.
+
+ at deftypefun int rl_bind_key (int key, rl_command_func_t *function)
+Binds @var{key} to @var{function} in the currently active keymap.
+Returns non-zero in the case of an invalid @var{key}.
+ at end deftypefun
+
+ at deftypefun int rl_bind_key_in_map (int key, rl_command_func_t *function, Keymap map)
+Bind @var{key} to @var{function} in @var{map}.
+Returns non-zero in the case of an invalid @var{key}.
+ at end deftypefun
+
+ at deftypefun int rl_bind_key_if_unbound (int key, rl_command_func_t *function)
+Binds @var{key} to @var{function} if it is not already bound in the
+currently active keymap.
+Returns non-zero in the case of an invalid @var{key} or if @var{key} is
+already bound.
+ at end deftypefun
+
+ at deftypefun int rl_bind_key_if_unbound_in_map (int key, rl_command_func_t *function, Keymap map)
+Binds @var{key} to @var{function} if it is not already bound in @var{map}.
+Returns non-zero in the case of an invalid @var{key} or if @var{key} is
+already bound.
+ at end deftypefun
+
+ at deftypefun int rl_unbind_key (int key)
+Bind @var{key} to the null function in the currently active keymap.
+Returns non-zero in case of error.
+ at end deftypefun
+
+ at deftypefun int rl_unbind_key_in_map (int key, Keymap map)
+Bind @var{key} to the null function in @var{map}.
+Returns non-zero in case of error.
+ at end deftypefun
+
+ at deftypefun int rl_unbind_function_in_map (rl_command_func_t *function, Keymap map)
+Unbind all keys that execute @var{function} in @var{map}.
+ at end deftypefun
+
+ at deftypefun int rl_unbind_command_in_map (const char *command, Keymap map)
+Unbind all keys that are bound to @var{command} in @var{map}.
+ at end deftypefun
+
+ at deftypefun int rl_bind_keyseq (const char *keyseq, rl_command_func_t *function)
+Bind the key sequence represented by the string @var{keyseq} to the function
+ at var{function}, beginning in the current keymap.
+This makes new keymaps as necessary.
+The return value is non-zero if @var{keyseq} is invalid.
+ at end deftypefun
+
+ at deftypefun int rl_bind_keyseq_in_map (const char *keyseq, rl_command_func_t *function, Keymap map)
+Bind the key sequence represented by the string @var{keyseq} to the function
+ at var{function}.  This makes new keymaps as necessary.
+Initial bindings are performed in @var{map}.
+The return value is non-zero if @var{keyseq} is invalid.
+ at end deftypefun
+
+ at deftypefun int rl_set_key (const char *keyseq, rl_command_func_t *function, Keymap map)
+Equivalent to @code{rl_bind_keyseq_in_map}.
+ at end deftypefun
+
+ at deftypefun int rl_bind_keyseq_if_unbound (const char *keyseq, rl_command_func_t *function)
+Binds @var{keyseq} to @var{function} if it is not already bound in the
+currently active keymap.
+Returns non-zero in the case of an invalid @var{keyseq} or if @var{keyseq} is
+already bound.
+ at end deftypefun
+
+ at deftypefun int rl_bind_keyseq_if_unbound_in_map (const char *keyseq, rl_command_func_t *function, Keymap map)
+Binds @var{keyseq} to @var{function} if it is not already bound in @var{map}.
+Returns non-zero in the case of an invalid @var{keyseq} or if @var{keyseq} is
+already bound.
+ at end deftypefun
+
+ at deftypefun int rl_generic_bind (int type, const char *keyseq, char *data, Keymap map)
+Bind the key sequence represented by the string @var{keyseq} to the arbitrary
+pointer @var{data}.  @var{type} says what kind of data is pointed to by
+ at var{data}; this can be a function (@code{ISFUNC}), a macro
+(@code{ISMACR}), or a keymap (@code{ISKMAP}).  This makes new keymaps as
+necessary.  The initial keymap in which to do bindings is @var{map}.
+ at end deftypefun
+
+ at deftypefun int rl_parse_and_bind (char *line)
+Parse @var{line} as if it had been read from the @code{inputrc} file and
+perform any key bindings and variable assignments found
+(@pxref{Readline Init File}).
+ at end deftypefun
+
+ at deftypefun int rl_read_init_file (const char *filename)
+Read keybindings and variable assignments from @var{filename}
+(@pxref{Readline Init File}).
+ at end deftypefun
+
+ at node Associating Function Names and Bindings
+ at subsection Associating Function Names and Bindings
+
+These functions allow you to find out what keys invoke named functions
+and the functions invoked by a particular key sequence.  You may also
+associate a new function name with an arbitrary function.
+
+ at deftypefun {rl_command_func_t *} rl_named_function (const char *name)
+Return the function with name @var{name}.
+ at end deftypefun
+
+ at deftypefun {rl_command_func_t *} rl_function_of_keyseq (const char *keyseq, Keymap map, int *type)
+Return the function invoked by @var{keyseq} in keymap @var{map}.
+If @var{map} is @code{NULL}, the current keymap is used.  If @var{type} is
+not @code{NULL}, the type of the object is returned in the @code{int} variable
+it points to (one of @code{ISFUNC}, @code{ISKMAP}, or @code{ISMACR}).
+ at end deftypefun
+
+ at deftypefun {char **} rl_invoking_keyseqs (rl_command_func_t *function)
+Return an array of strings representing the key sequences used to
+invoke @var{function} in the current keymap.
+ at end deftypefun
+
+ at deftypefun {char **} rl_invoking_keyseqs_in_map (rl_command_func_t *function, Keymap map)
+Return an array of strings representing the key sequences used to
+invoke @var{function} in the keymap @var{map}.
+ at end deftypefun
+
+ at deftypefun void rl_function_dumper (int readable)
+Print the readline function names and the key sequences currently
+bound to them to @code{rl_outstream}.  If @var{readable} is non-zero,
+the list is formatted in such a way that it can be made part of an
+ at code{inputrc} file and re-read.
+ at end deftypefun
+
+ at deftypefun void rl_list_funmap_names (void)
+Print the names of all bindable Readline functions to @code{rl_outstream}.
+ at end deftypefun
+
+ at deftypefun {const char **} rl_funmap_names (void)
+Return a NULL terminated array of known function names.  The array is
+sorted.  The array itself is allocated, but not the strings inside.  You
+should free the array, but not the pointers, using @code{free} or
+ at code{rl_free} when you are done.
+ at end deftypefun
+
+ at deftypefun int rl_add_funmap_entry (const char *name, rl_command_func_t *function)
+Add @var{name} to the list of bindable Readline command names, and make
+ at var{function} the function to be called when @var{name} is invoked.
+ at end deftypefun
+
+ at node Allowing Undoing
+ at subsection Allowing Undoing
+
+Supporting the undo command is a painless thing, and makes your
+functions much more useful.  It is certainly easy to try
+something if you know you can undo it.
+
+If your function simply inserts text once, or deletes text once, and
+uses @code{rl_insert_text()} or @code{rl_delete_text()} to do it, then
+undoing is already done for you automatically.
+
+If you do multiple insertions or multiple deletions, or any combination
+of these operations, you should group them together into one operation.
+This is done with @code{rl_begin_undo_group()} and
+ at code{rl_end_undo_group()}.
+
+The types of events that can be undone are:
+
+ at smallexample
+enum undo_code @{ UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END @}; 
+ at end smallexample
+
+Notice that @code{UNDO_DELETE} means to insert some text, and
+ at code{UNDO_INSERT} means to delete some text.  That is, the undo code
+tells what to undo, not how to undo it.  @code{UNDO_BEGIN} and
+ at code{UNDO_END} are tags added by @code{rl_begin_undo_group()} and
+ at code{rl_end_undo_group()}.
+
+ at deftypefun int rl_begin_undo_group (void)
+Begins saving undo information in a group construct.  The undo
+information usually comes from calls to @code{rl_insert_text()} and
+ at code{rl_delete_text()}, but could be the result of calls to
+ at code{rl_add_undo()}.
+ at end deftypefun
+
+ at deftypefun int rl_end_undo_group (void)
+Closes the current undo group started with @code{rl_begin_undo_group
+()}.  There should be one call to @code{rl_end_undo_group()}
+for each call to @code{rl_begin_undo_group()}.
+ at end deftypefun
+
+ at deftypefun void rl_add_undo (enum undo_code what, int start, int end, char *text)
+Remember how to undo an event (according to @var{what}).  The affected
+text runs from @var{start} to @var{end}, and encompasses @var{text}.
+ at end deftypefun
+
+ at deftypefun void rl_free_undo_list (void)
+Free the existing undo list.
+ at end deftypefun
+
+ at deftypefun int rl_do_undo (void)
+Undo the first thing on the undo list.  Returns @code{0} if there was
+nothing to undo, non-zero if something was undone.
+ at end deftypefun
+
+Finally, if you neither insert nor delete text, but directly modify the
+existing text (e.g., change its case), call @code{rl_modifying()}
+once, just before you modify the text.  You must supply the indices of
+the text range that you are going to modify.
+
+ at deftypefun int rl_modifying (int start, int end)
+Tell Readline to save the text between @var{start} and @var{end} as a
+single undo unit.  It is assumed that you will subsequently modify
+that text.
+ at end deftypefun
+
+ at node Redisplay
+ at subsection Redisplay
+
+ at deftypefun void rl_redisplay (void)
+Change what's displayed on the screen to reflect the current contents
+of @code{rl_line_buffer}.
+ at end deftypefun
+
+ at deftypefun int rl_forced_update_display (void)
+Force the line to be updated and redisplayed, whether or not
+Readline thinks the screen display is correct.
+ at end deftypefun
+
+ at deftypefun int rl_on_new_line (void)
+Tell the update functions that we have moved onto a new (empty) line,
+usually after ouputting a newline.
+ at end deftypefun
+
+ at deftypefun int rl_on_new_line_with_prompt (void)
+Tell the update functions that we have moved onto a new line, with
+ at var{rl_prompt} already displayed.
+This could be used by applications that want to output the prompt string
+themselves, but still need Readline to know the prompt string length for
+redisplay.
+It should be used after setting @var{rl_already_prompted}.
+ at end deftypefun
+
+ at deftypefun int rl_reset_line_state (void)
+Reset the display state to a clean state and redisplay the current line
+starting on a new line.
+ at end deftypefun
+
+ at deftypefun int rl_crlf (void)
+Move the cursor to the start of the next screen line.
+ at end deftypefun
+
+ at deftypefun int rl_show_char (int c)
+Display character @var{c} on @code{rl_outstream}.
+If Readline has not been set to display meta characters directly, this
+will convert meta characters to a meta-prefixed key sequence.
+This is intended for use by applications which wish to do their own
+redisplay.
+ at end deftypefun
+
+ at deftypefun int rl_message (const char *, @dots{})
+The arguments are a format string as would be supplied to @code{printf},
+possibly containing conversion specifications such as @samp{%d}, and
+any additional arguments necessary to satisfy the conversion specifications.
+The resulting string is displayed in the @dfn{echo area}.  The echo area
+is also used to display numeric arguments and search strings.
+You should call @code{rl_save_prompt} to save the prompt information
+before calling this function.
+ at end deftypefun
+
+ at deftypefun int rl_clear_message (void)
+Clear the message in the echo area.  If the prompt was saved with a call to
+ at code{rl_save_prompt} before the last call to @code{rl_message},
+call @code{rl_restore_prompt} before calling this function.
+ at end deftypefun
+
+ at deftypefun void rl_save_prompt (void)
+Save the local Readline prompt display state in preparation for
+displaying a new message in the message area with @code{rl_message()}.
+ at end deftypefun
+
+ at deftypefun void rl_restore_prompt (void)
+Restore the local Readline prompt display state saved by the most
+recent call to @code{rl_save_prompt}.
+if @code{rl_save_prompt} was called to save the prompt before a call
+to @code{rl_message}, this function should be called before the
+corresponding call to @code{rl_clear_message}.
+ at end deftypefun
+
+ at deftypefun int rl_expand_prompt (char *prompt)
+Expand any special character sequences in @var{prompt} and set up the
+local Readline prompt redisplay variables.
+This function is called by @code{readline()}.  It may also be called to
+expand the primary prompt if the @code{rl_on_new_line_with_prompt()}
+function or @code{rl_already_prompted} variable is used.
+It returns the number of visible characters on the last line of the
+(possibly multi-line) prompt.
+Applications may indicate that the prompt contains characters that take
+up no physical screen space when displayed by bracketing a sequence of
+such characters with the special markers @code{RL_PROMPT_START_IGNORE}
+and @code{RL_PROMPT_END_IGNORE} (declared in @file{readline.h}.  This may
+be used to embed terminal-specific escape sequences in prompts.
+ at end deftypefun
+
+ at deftypefun int rl_set_prompt (const char *prompt)
+Make Readline use @var{prompt} for subsequent redisplay.  This calls
+ at code{rl_expand_prompt()} to expand the prompt and sets @code{rl_prompt}
+to the result.
+ at end deftypefun
+
+ at node Modifying Text
+ at subsection Modifying Text
+
+ at deftypefun int rl_insert_text (const char *text)
+Insert @var{text} into the line at the current cursor position.
+Returns the number of characters inserted.
+ at end deftypefun
+
+ at deftypefun int rl_delete_text (int start, int end)
+Delete the text between @var{start} and @var{end} in the current line.
+Returns the number of characters deleted.
+ at end deftypefun
+
+ at deftypefun {char *} rl_copy_text (int start, int end)
+Return a copy of the text between @var{start} and @var{end} in
+the current line.
+ at end deftypefun
+
+ at deftypefun int rl_kill_text (int start, int end)
+Copy the text between @var{start} and @var{end} in the current line
+to the kill ring, appending or prepending to the last kill if the
+last command was a kill command.  The text is deleted.
+If @var{start} is less than @var{end},
+the text is appended, otherwise prepended.  If the last command was
+not a kill, a new kill ring slot is used.
+ at end deftypefun
+
+ at deftypefun int rl_push_macro_input (char *macro)
+Cause @var{macro} to be inserted into the line, as if it had been invoked
+by a key bound to a macro.  Not especially useful; use
+ at code{rl_insert_text()} instead.
+ at end deftypefun
+
+ at node Character Input
+ at subsection Character Input
+
+ at deftypefun int rl_read_key (void)
+Return the next character available from Readline's current input stream.
+This handles input inserted into
+the input stream via @var{rl_pending_input} (@pxref{Readline Variables})
+and @code{rl_stuff_char()}, macros, and characters read from the keyboard.
+While waiting for input, this function will call any function assigned to
+the @code{rl_event_hook} variable.
+ at end deftypefun
+
+ at deftypefun int rl_getc (FILE *stream)
+Return the next character available from @var{stream}, which is assumed to
+be the keyboard.
+ at end deftypefun
+
+ at deftypefun int rl_stuff_char (int c)
+Insert @var{c} into the Readline input stream.  It will be "read"
+before Readline attempts to read characters from the terminal with
+ at code{rl_read_key()}.  Up to 512 characters may be pushed back.
+ at code{rl_stuff_char} returns 1 if the character was successfully inserted;
+0 otherwise.
+ at end deftypefun
+
+ at deftypefun int rl_execute_next (int c)
+Make @var{c} be the next command to be executed when @code{rl_read_key()}
+is called.  This sets @var{rl_pending_input}.
+ at end deftypefun
+
+ at deftypefun int rl_clear_pending_input (void)
+Unset @var{rl_pending_input}, effectively negating the effect of any
+previous call to @code{rl_execute_next()}.  This works only if the
+pending input has not already been read with @code{rl_read_key()}.
+ at end deftypefun
+
+ at deftypefun int rl_set_keyboard_input_timeout (int u)
+While waiting for keyboard input in @code{rl_read_key()}, Readline will
+wait for @var{u} microseconds for input before calling any function
+assigned to @code{rl_event_hook}.  @var{u} must be greater than or equal
+to zero (a zero-length timeout is equivalent to a poll).
+The default waiting period is one-tenth of a second.
+Returns the old timeout value.
+ at end deftypefun
+
+ at node Terminal Management
+ at subsection Terminal Management
+
+ at deftypefun void rl_prep_terminal (int meta_flag)
+Modify the terminal settings for Readline's use, so @code{readline()}
+can read a single character at a time from the keyboard.
+The @var{meta_flag} argument should be non-zero if Readline should
+read eight-bit input.
+ at end deftypefun
+
+ at deftypefun void rl_deprep_terminal (void)
+Undo the effects of @code{rl_prep_terminal()}, leaving the terminal in
+the state in which it was before the most recent call to
+ at code{rl_prep_terminal()}.
+ at end deftypefun
+
+ at deftypefun void rl_tty_set_default_bindings (Keymap kmap)
+Read the operating system's terminal editing characters (as would be
+displayed by @code{stty}) to their Readline equivalents.
+The bindings are performed in @var{kmap}.
+ at end deftypefun
+
+ at deftypefun void rl_tty_unset_default_bindings (Keymap kmap)
+Reset the bindings manipulated by @code{rl_tty_set_default_bindings} so
+that the terminal editing characters are bound to @code{rl_insert}.
+The bindings are performed in @var{kmap}.
+ at end deftypefun
+
+ at deftypefun int rl_reset_terminal (const char *terminal_name)
+Reinitialize Readline's idea of the terminal settings using
+ at var{terminal_name} as the terminal type (e.g., @code{vt100}).
+If @var{terminal_name} is @code{NULL}, the value of the @code{TERM}
+environment variable is used.
+ at end deftypefun
+
+ at node Utility Functions
+ at subsection Utility Functions
+
+ at deftypefun int rl_save_state (struct readline_state *sp)
+Save a snapshot of Readline's internal state to @var{sp}.
+The contents of the @var{readline_state} structure are documented
+in @file{readline.h}.
+The caller is responsible for allocating the structure.
+ at end deftypefun
+
+ at deftypefun int rl_restore_state (struct readline_state *sp)
+Restore Readline's internal state to that stored in @var{sp}, which must
+have been saved by a call to @code{rl_save_state}.
+The contents of the @var{readline_state} structure are documented
+in @file{readline.h}.
+The caller is responsible for freeing the structure.
+ at end deftypefun
+
+ at deftypefun void rl_free (void *mem)
+Deallocate the memory pointed to by @var{mem}.  @var{mem} must have been
+allocated by @code{malloc}.
+ at end deftypefun
+
+ at deftypefun void rl_replace_line (const char *text, int clear_undo)
+Replace the contents of @code{rl_line_buffer} with @var{text}.
+The point and mark are preserved, if possible.
+If @var{clear_undo} is non-zero, the undo list associated with the
+current line is cleared.
+ at end deftypefun
+
+ at deftypefun void rl_extend_line_buffer (int len)
+Ensure that @code{rl_line_buffer} has enough space to hold @var{len}
+characters, possibly reallocating it if necessary.
+ at end deftypefun
+
+ at deftypefun int rl_initialize (void)
+Initialize or re-initialize Readline's internal state.
+It's not strictly necessary to call this; @code{readline()} calls it before
+reading any input.
+ at end deftypefun
+
+ at deftypefun int rl_ding (void)
+Ring the terminal bell, obeying the setting of @code{bell-style}.
+ at end deftypefun
+
+ at deftypefun int rl_alphabetic (int c)
+Return 1 if @var{c} is an alphabetic character.
+ at end deftypefun
+
+ at deftypefun void rl_display_match_list (char **matches, int len, int max)
+A convenience function for displaying a list of strings in
+columnar format on Readline's output stream.  @code{matches} is the list
+of strings, in argv format, such as a list of completion matches.
+ at code{len} is the number of strings in @code{matches}, and @code{max}
+is the length of the longest string in @code{matches}.  This function uses
+the setting of @code{print-completions-horizontally} to select how the
+matches are displayed (@pxref{Readline Init File Syntax}).
+When displaying completions, this function sets the number of columns used
+for display to the value of @code{completion-display-width}, the value of
+the environment variable @env{COLUMNS}, or the screen width, in that order.
+ at end deftypefun
+
+The following are implemented as macros, defined in @code{chardefs.h}.
+Applications should refrain from using them.
+
+ at deftypefun int _rl_uppercase_p (int c)
+Return 1 if @var{c} is an uppercase alphabetic character.
+ at end deftypefun
+
+ at deftypefun int _rl_lowercase_p (int c)
+Return 1 if @var{c} is a lowercase alphabetic character.
+ at end deftypefun
+
+ at deftypefun int _rl_digit_p (int c)
+Return 1 if @var{c} is a numeric character.
+ at end deftypefun
+
+ at deftypefun int _rl_to_upper (int c)
+If @var{c} is a lowercase alphabetic character, return the corresponding
+uppercase character.
+ at end deftypefun
+
+ at deftypefun int _rl_to_lower (int c)
+If @var{c} is an uppercase alphabetic character, return the corresponding
+lowercase character.
+ at end deftypefun
+
+ at deftypefun int _rl_digit_value (int c)
+If @var{c} is a number, return the value it represents.
+ at end deftypefun
+
+ at node Miscellaneous Functions
+ at subsection Miscellaneous Functions
+
+ at deftypefun int rl_macro_bind (const char *keyseq, const char *macro, Keymap map)
+Bind the key sequence @var{keyseq} to invoke the macro @var{macro}.
+The binding is performed in @var{map}.  When @var{keyseq} is invoked, the
+ at var{macro} will be inserted into the line.  This function is deprecated;
+use @code{rl_generic_bind()} instead.
+ at end deftypefun
+
+ at deftypefun void rl_macro_dumper (int readable)
+Print the key sequences bound to macros and their values, using
+the current keymap, to @code{rl_outstream}.
+If @var{readable} is non-zero, the list is formatted in such a way
+that it can be made part of an @code{inputrc} file and re-read.
+ at end deftypefun
+
+ at deftypefun int rl_variable_bind (const char *variable, const char *value)
+Make the Readline variable @var{variable} have @var{value}.
+This behaves as if the readline command
+ at samp{set @var{variable} @var{value}} had been executed in an @code{inputrc}
+file (@pxref{Readline Init File Syntax}).
+ at end deftypefun
+
+ at deftypefun {char *} rl_variable_value (const char *variable)
+Return a string representing the value of the Readline variable @var{variable}.
+For boolean variables, this string is either @samp{on} or @samp{off}.
+ at end deftypefun
+
+ at deftypefun void rl_variable_dumper (int readable)
+Print the readline variable names and their current values
+to @code{rl_outstream}.
+If @var{readable} is non-zero, the list is formatted in such a way
+that it can be made part of an @code{inputrc} file and re-read.
+ at end deftypefun
+
+ at deftypefun int rl_set_paren_blink_timeout (int u)
+Set the time interval (in microseconds) that Readline waits when showing
+a balancing character when @code{blink-matching-paren} has been enabled.
+ at end deftypefun
+
+ at deftypefun {char *} rl_get_termcap (const char *cap)
+Retrieve the string value of the termcap capability @var{cap}.
+Readline fetches the termcap entry for the current terminal name and
+uses those capabilities to move around the screen line and perform other
+terminal-specific operations, like erasing a line.  Readline does not
+use all of a terminal's capabilities, and this function will return
+values for only those capabilities Readline uses.
+ at end deftypefun
+
+ at node Alternate Interface
+ at subsection Alternate Interface
+
+An alternate interface is available to plain @code{readline()}.  Some
+applications need to interleave keyboard I/O with file, device, or
+window system I/O, typically by using a main loop to @code{select()}
+on various file descriptors.  To accomodate this need, readline can
+also be invoked as a `callback' function from an event loop.  There
+are functions available to make this easy.
+
+ at deftypefun void rl_callback_handler_install (const char *prompt, rl_vcpfunc_t *lhandler)
+Set up the terminal for readline I/O and display the initial
+expanded value of @var{prompt}.  Save the value of @var{lhandler} to
+use as a function to call when a complete line of input has been entered.
+The function takes the text of the line as an argument.
+ at end deftypefun
+
+ at deftypefun void rl_callback_read_char (void)
+Whenever an application determines that keyboard input is available, it
+should call @code{rl_callback_read_char()}, which will read the next
+character from the current input source.
+If that character completes the line, @code{rl_callback_read_char} will
+invoke the @var{lhandler} function saved by @code{rl_callback_handler_install}
+to process the line.
+Before calling the @var{lhandler} function, the terminal settings are
+reset to the values they had before calling
+ at code{rl_callback_handler_install}.
+If the @var{lhandler} function returns,
+the terminal settings are modified for Readline's use again.
+ at code{EOF} is  indicated by calling @var{lhandler} with a
+ at code{NULL} line.
+ at end deftypefun
+
+ at deftypefun void rl_callback_handler_remove (void)
+Restore the terminal to its initial state and remove the line handler.
+This may be called from within a callback as well as independently.
+If the @var{lhandler} installed by @code{rl_callback_handler_install}
+does not exit the program, either this function or the function referred
+to by the value of @code{rl_deprep_term_function} should be called before
+the program exits to reset the terminal settings.
+ at end deftypefun
+
+ at node A Readline Example
+ at subsection A Readline Example
+
+Here is a function which changes lowercase characters to their uppercase
+equivalents, and uppercase characters to lowercase.  If
+this function was bound to @samp{M-c}, then typing @samp{M-c} would
+change the case of the character under point.  Typing @samp{M-1 0 M-c}
+would change the case of the following 10 characters, leaving the cursor on
+the last character changed.
+
+ at example
+/* Invert the case of the COUNT following characters. */
+int
+invert_case_line (count, key)
+     int count, key;
+@{
+  register int start, end, i;
+
+  start = rl_point;
+
+  if (rl_point >= rl_end)
+    return (0);
+
+  if (count < 0)
+    @{
+      direction = -1;
+      count = -count;
+    @}
+  else
+    direction = 1;
+      
+  /* Find the end of the range to modify. */
+  end = start + (count * direction);
+
+  /* Force it to be within range. */
+  if (end > rl_end)
+    end = rl_end;
+  else if (end < 0)
+    end = 0;
+
+  if (start == end)
+    return (0);
+
+  if (start > end)
+    @{
+      int temp = start;
+      start = end;
+      end = temp;
+    @}
+
+  /* Tell readline that we are modifying the line,
+     so it will save the undo information. */
+  rl_modifying (start, end);
+
+  for (i = start; i != end; i++)
+    @{
+      if (_rl_uppercase_p (rl_line_buffer[i]))
+        rl_line_buffer[i] = _rl_to_lower (rl_line_buffer[i]);
+      else if (_rl_lowercase_p (rl_line_buffer[i]))
+        rl_line_buffer[i] = _rl_to_upper (rl_line_buffer[i]);
+    @}
+  /* Move point to on top of the last character changed. */
+  rl_point = (direction == 1) ? end - 1 : start;
+  return (0);
+@}
+ at end example
+
+ at node Readline Signal Handling
+ at section Readline Signal Handling
+
+Signals are asynchronous events sent to a process by the Unix kernel,
+sometimes on behalf of another process.  They are intended to indicate
+exceptional events, like a user pressing the interrupt key on his terminal,
+or a network connection being broken.  There is a class of signals that can
+be sent to the process currently reading input from the keyboard.  Since
+Readline changes the terminal attributes when it is called, it needs to
+perform special processing when such a signal is received in order to
+restore the terminal to a sane state, or provide application writers with
+functions to do so manually. 
+
+Readline contains an internal signal handler that is installed for a
+number of signals (@code{SIGINT}, @code{SIGQUIT}, @code{SIGTERM},
+ at code{SIGALRM}, @code{SIGTSTP}, @code{SIGTTIN}, and @code{SIGTTOU}).
+When one of these signals is received, the signal handler
+will reset the terminal attributes to those that were in effect before
+ at code{readline()} was called, reset the signal handling to what it was
+before @code{readline()} was called, and resend the signal to the calling
+application.
+If and when the calling application's signal handler returns, Readline
+will reinitialize the terminal and continue to accept input.
+When a @code{SIGINT} is received, the Readline signal handler performs
+some additional work, which will cause any partially-entered line to be
+aborted (see the description of @code{rl_free_line_state()} below).
+
+There is an additional Readline signal handler, for @code{SIGWINCH}, which
+the kernel sends to a process whenever the terminal's size changes (for
+example, if a user resizes an @code{xterm}).  The Readline @code{SIGWINCH}
+handler updates Readline's internal screen size information, and then calls
+any @code{SIGWINCH} signal handler the calling application has installed. 
+Readline calls the application's @code{SIGWINCH} signal handler without
+resetting the terminal to its original state.  If the application's signal
+handler does more than update its idea of the terminal size and return (for
+example, a @code{longjmp} back to a main processing loop), it @emph{must}
+call @code{rl_cleanup_after_signal()} (described below), to restore the
+terminal state. 
+
+Readline provides two variables that allow application writers to
+control whether or not it will catch certain signals and act on them
+when they are received.  It is important that applications change the
+values of these variables only when calling @code{readline()}, not in
+a signal handler, so Readline's internal signal state is not corrupted.
+
+ at deftypevar int rl_catch_signals
+If this variable is non-zero, Readline will install signal handlers for
+ at code{SIGINT}, @code{SIGQUIT}, @code{SIGTERM}, @code{SIGALRM},
+ at code{SIGTSTP}, @code{SIGTTIN}, and @code{SIGTTOU}.
+
+The default value of @code{rl_catch_signals} is 1.
+ at end deftypevar
+
+ at deftypevar int rl_catch_sigwinch
+If this variable is non-zero, Readline will install a signal handler for
+ at code{SIGWINCH}.
+
+The default value of @code{rl_catch_sigwinch} is 1.
+ at end deftypevar
+
+If an application does not wish to have Readline catch any signals, or
+to handle signals other than those Readline catches (@code{SIGHUP},
+for example), 
+Readline provides convenience functions to do the necessary terminal
+and internal state cleanup upon receipt of a signal.
+
+ at deftypefun void rl_cleanup_after_signal (void)
+This function will reset the state of the terminal to what it was before
+ at code{readline()} was called, and remove the Readline signal handlers for
+all signals, depending on the values of @code{rl_catch_signals} and
+ at code{rl_catch_sigwinch}.
+ at end deftypefun
+
+ at deftypefun void rl_free_line_state (void)
+This will free any partial state associated with the current input line
+(undo information, any partial history entry, any partially-entered
+keyboard macro, and any partially-entered numeric argument).  This
+should be called before @code{rl_cleanup_after_signal()}.  The
+Readline signal handler for @code{SIGINT} calls this to abort the
+current input line.
+ at end deftypefun
+
+ at deftypefun void rl_reset_after_signal (void)
+This will reinitialize the terminal and reinstall any Readline signal
+handlers, depending on the values of @code{rl_catch_signals} and
+ at code{rl_catch_sigwinch}.
+ at end deftypefun
+
+If an application does not wish Readline to catch @code{SIGWINCH}, it may
+call @code{rl_resize_terminal()} or @code{rl_set_screen_size()} to force
+Readline to update its idea of the terminal size when a @code{SIGWINCH}
+is received.
+
+ at deftypefun void rl_echo_signal_char (int sig)
+If an application wishes to install its own signal handlers, but still
+have readline display characters that generate signals, calling this
+function with @var{sig} set to @code{SIGINT}, @code{SIGQUIT}, or
+ at code{SIGTSTP} will display the character generating that signal.
+ at end deftypefun
+
+ at deftypefun void rl_resize_terminal (void)
+Update Readline's internal screen size by reading values from the kernel.
+ at end deftypefun
+
+ at deftypefun void rl_set_screen_size (int rows, int cols)
+Set Readline's idea of the terminal size to @var{rows} rows and
+ at var{cols} columns.  If either @var{rows} or @var{columns} is less than
+or equal to 0, Readline's idea of that terminal dimension is unchanged.
+ at end deftypefun
+
+If an application does not want to install a @code{SIGWINCH} handler, but
+is still interested in the screen dimensions, Readline's idea of the screen
+size may be queried.
+
+ at deftypefun void rl_get_screen_size (int *rows, int *cols)
+Return Readline's idea of the terminal's size in the
+variables pointed to by the arguments.
+ at end deftypefun
+
+ at deftypefun void rl_reset_screen_size (void)
+Cause Readline to reobtain the screen size and recalculate its dimensions.
+ at end deftypefun
+
+The following functions install and remove Readline's signal handlers.
+
+ at deftypefun int rl_set_signals (void)
+Install Readline's signal handler for @code{SIGINT}, @code{SIGQUIT},
+ at code{SIGTERM}, @code{SIGALRM}, @code{SIGTSTP}, @code{SIGTTIN},
+ at code{SIGTTOU}, and @code{SIGWINCH}, depending on the values of
+ at code{rl_catch_signals} and @code{rl_catch_sigwinch}.
+ at end deftypefun
+
+ at deftypefun int rl_clear_signals (void)
+Remove all of the Readline signal handlers installed by
+ at code{rl_set_signals()}.
+ at end deftypefun
+
+ at node Custom Completers
+ at section Custom Completers
+ at cindex application-specific completion functions
+
+Typically, a program that reads commands from the user has a way of
+disambiguating commands and data.  If your program is one of these, then
+it can provide completion for commands, data, or both.
+The following sections describe how your program and Readline
+cooperate to provide this service.
+
+ at menu
+* How Completing Works::	The logic used to do completion.
+* Completion Functions::	Functions provided by Readline.
+* Completion Variables::	Variables which control completion.
+* A Short Completion Example::	An example of writing completer subroutines.
+ at end menu
+
+ at node How Completing Works
+ at subsection How Completing Works
+
+In order to complete some text, the full list of possible completions
+must be available.  That is, it is not possible to accurately
+expand a partial word without knowing all of the possible words
+which make sense in that context.  The Readline library provides
+the user interface to completion, and two of the most common
+completion functions:  filename and username.  For completing other types
+of text, you must write your own completion function.  This section
+describes exactly what such functions must do, and provides an example.
+
+There are three major functions used to perform completion:
+
+ at enumerate
+ at item
+The user-interface function @code{rl_complete()}.  This function is
+called with the same arguments as other bindable Readline functions:
+ at var{count} and @var{invoking_key}.
+It isolates the word to be completed and calls
+ at code{rl_completion_matches()} to generate a list of possible completions.
+It then either lists the possible completions, inserts the possible
+completions, or actually performs the
+completion, depending on which behavior is desired.
+
+ at item
+The internal function @code{rl_completion_matches()} uses an
+application-supplied @dfn{generator} function to generate the list of
+possible matches, and then returns the array of these matches.
+The caller should place the address of its generator function in
+ at code{rl_completion_entry_function}.
+
+ at item
+The generator function is called repeatedly from
+ at code{rl_completion_matches()}, returning a string each time.  The
+arguments to the generator function are @var{text} and @var{state}.
+ at var{text} is the partial word to be completed.  @var{state} is zero the
+first time the function is called, allowing the generator to perform
+any necessary initialization, and a positive non-zero integer for
+each subsequent call.  The generator function returns
+ at code{(char *)NULL} to inform @code{rl_completion_matches()} that there are
+no more possibilities left.  Usually the generator function computes the
+list of possible completions when @var{state} is zero, and returns them
+one at a time on subsequent calls.  Each string the generator function
+returns as a match must be allocated with @code{malloc()}; Readline
+frees the strings when it has finished with them.
+Such a generator function is referred to as an
+ at dfn{application-specific completion function}.
+
+ at end enumerate
+
+ at deftypefun int rl_complete (int ignore, int invoking_key)
+Complete the word at or before point.  You have supplied the function
+that does the initial simple matching selection algorithm (see
+ at code{rl_completion_matches()}).  The default is to do filename completion.
+ at end deftypefun
+
+ at deftypevar {rl_compentry_func_t *} rl_completion_entry_function
+This is a pointer to the generator function for
+ at code{rl_completion_matches()}.
+If the value of @code{rl_completion_entry_function} is
+ at code{NULL} then the default filename generator
+function, @code{rl_filename_completion_function()}, is used.
+An @dfn{application-specific completion function} is a function whose
+address is assigned to @code{rl_completion_entry_function} and whose
+return values are used to  generate possible completions.
+ at end deftypevar
+
+ at node Completion Functions
+ at subsection Completion Functions
+
+Here is the complete list of callable completion functions present in
+Readline.
+
+ at deftypefun int rl_complete_internal (int what_to_do)
+Complete the word at or before point.  @var{what_to_do} says what to do
+with the completion.  A value of @samp{?} means list the possible
+completions.  @samp{TAB} means do standard completion.  @samp{*} means
+insert all of the possible completions.  @samp{!} means to display
+all of the possible completions, if there is more than one, as well as
+performing partial completion.  @samp{@@} is similar to @samp{!}, but
+possible completions are not listed if the possible completions share
+a common prefix.
+ at end deftypefun
+
+ at deftypefun int rl_complete (int ignore, int invoking_key)
+Complete the word at or before point.  You have supplied the function
+that does the initial simple matching selection algorithm (see
+ at code{rl_completion_matches()} and @code{rl_completion_entry_function}).
+The default is to do filename
+completion.  This calls @code{rl_complete_internal()} with an
+argument depending on @var{invoking_key}.
+ at end deftypefun
+
+ at deftypefun int rl_possible_completions (int count, int invoking_key)
+List the possible completions.  See description of @code{rl_complete
+()}.  This calls @code{rl_complete_internal()} with an argument of
+ at samp{?}.
+ at end deftypefun
+
+ at deftypefun int rl_insert_completions (int count, int invoking_key)
+Insert the list of possible completions into the line, deleting the
+partially-completed word.  See description of @code{rl_complete()}.
+This calls @code{rl_complete_internal()} with an argument of @samp{*}.
+ at end deftypefun
+
+ at deftypefun int rl_completion_mode (rl_command_func_t *cfunc)
+Returns the apppriate value to pass to @code{rl_complete_internal()}
+depending on whether @var{cfunc} was called twice in succession and
+the values of the @code{show-all-if-ambiguous} and
+ at code{show-all-if-unmodified} variables.
+Application-specific completion functions may use this function to present
+the same interface as @code{rl_complete()}.
+ at end deftypefun
+
+ at deftypefun {char **} rl_completion_matches (const char *text, rl_compentry_func_t *entry_func)
+Returns an array of strings which is a list of completions for
+ at var{text}.  If there are no completions, returns @code{NULL}.
+The first entry in the returned array is the substitution for @var{text}.
+The remaining entries are the possible completions.  The array is
+terminated with a @code{NULL} pointer.
+
+ at var{entry_func} is a function of two args, and returns a
+ at code{char *}.  The first argument is @var{text}.  The second is a
+state argument; it is zero on the first call, and non-zero on subsequent
+calls.  @var{entry_func} returns a @code{NULL}  pointer to the caller
+when there are no more matches.
+ at end deftypefun
+
+ at deftypefun {char *} rl_filename_completion_function (const char *text, int state)
+A generator function for filename completion in the general case.
+ at var{text} is a partial filename.
+The Bash source is a useful reference for writing application-specific
+completion functions (the Bash completion functions call this and other
+Readline functions).
+ at end deftypefun
+
+ at deftypefun {char *} rl_username_completion_function (const char *text, int state)
+A completion generator for usernames.  @var{text} contains a partial
+username preceded by a random character (usually @samp{~}).  As with all
+completion generators, @var{state} is zero on the first call and non-zero
+for subsequent calls.
+ at end deftypefun
+
+ at node Completion Variables
+ at subsection Completion Variables
+
+ at deftypevar {rl_compentry_func_t *} rl_completion_entry_function
+A pointer to the generator function for @code{rl_completion_matches()}.
+ at code{NULL} means to use @code{rl_filename_completion_function()},
+the default filename completer.
+ at end deftypevar
+
+ at deftypevar {rl_completion_func_t *} rl_attempted_completion_function
+A pointer to an alternative function to create matches.
+The function is called with @var{text}, @var{start}, and @var{end}.
+ at var{start} and @var{end} are indices in @code{rl_line_buffer} defining
+the boundaries of @var{text}, which is a character string.
+If this function exists and returns @code{NULL}, or if this variable is
+set to @code{NULL}, then @code{rl_complete()} will call the value of
+ at code{rl_completion_entry_function} to generate matches, otherwise the
+array of strings returned will be used.
+If this function sets the @code{rl_attempted_completion_over}
+variable to a non-zero value, Readline will not perform its default
+completion even if this function returns no matches.
+ at end deftypevar
+
+ at deftypevar {rl_quote_func_t *} rl_filename_quoting_function
+A pointer to a function that will quote a filename in an
+application-specific fashion.  This is called if filename completion is being
+attempted and one of the characters in @code{rl_filename_quote_characters}
+appears in a completed filename.  The function is called with
+ at var{text}, @var{match_type}, and @var{quote_pointer}.  The @var{text}
+is the filename to be quoted.  The @var{match_type} is either
+ at code{SINGLE_MATCH}, if there is only one completion match, or
+ at code{MULT_MATCH}.  Some functions use this to decide whether or not to
+insert a closing quote character.  The @var{quote_pointer} is a pointer
+to any opening quote character the user typed.  Some functions choose
+to reset this character.
+ at end deftypevar
+
+ at deftypevar {rl_dequote_func_t *} rl_filename_dequoting_function
+A pointer to a function that will remove application-specific quoting
+characters from a filename before completion is attempted, so those
+characters do not interfere with matching the text against names in
+the filesystem.  It is called with @var{text}, the text of the word
+to be dequoted, and @var{quote_char}, which is the quoting character 
+that delimits the filename (usually @samp{'} or @samp{"}).  If
+ at var{quote_char} is zero, the filename was not in an embedded string.
+ at end deftypevar
+
+ at deftypevar {rl_linebuf_func_t *} rl_char_is_quoted_p
+A pointer to a function to call that determines whether or not a specific
+character in the line buffer is quoted, according to whatever quoting
+mechanism the program calling Readline uses.  The function is called with
+two arguments: @var{text}, the text of the line, and @var{index}, the
+index of the character in the line.  It is used to decide whether a
+character found in @code{rl_completer_word_break_characters} should be
+used to break words for the completer.
+ at end deftypevar
+
+ at deftypevar {rl_compignore_func_t *} rl_ignore_some_completions_function
+This function, if defined, is called by the completer when real filename
+completion is done, after all the matching names have been generated.
+It is passed a @code{NULL} terminated array of matches.
+The first element (@code{matches[0]}) is the
+maximal substring common to all matches. This function can
+re-arrange the list of matches as required, but each element deleted
+from the array must be freed.
+ at end deftypevar
+
+ at deftypevar {rl_icppfunc_t *} rl_directory_completion_hook
+This function, if defined, is allowed to modify the directory portion
+of filenames Readline completes.
+It could be used to expand symbolic links or shell variables in pathnames.
+It is called with the address of a string (the current directory name) as an
+argument, and may modify that string.
+If the string is replaced with a new string, the old value should be freed.
+Any modified directory name should have a trailing slash.
+The modified value will be used as part of the completion, replacing
+the directory portion of the pathname the user typed.
+At the least, even if no other expansion is performed, this function should
+remove any quote characters from the directory name, because its result will
+be passed directly to @code{opendir()}.
+The directory completion hook returns an integer that should be non-zero if
+the function modifies its directory argument.
+The function should not modify the directory argument if it returns 0.
+ at end deftypevar
+
+ at ignore
+ at deftypevar extern rl_icppfunc_t *rl_directory_rewrite_hook;
+If non-zero, this is the address of a function to call when completing
+a directory name.  This function takes the address of the directory name
+to be modified as an argument.  Unlike @code{rl_directory_completion_hook},
+it only modifies the directory name used in @code{opendir}, not what is
+displayed when the possible completions are printed or inserted.  It is
+called before rl_directory_completion_hook.
+
+I'm not happy with how this works yet, so it's undocumented.
+ at end deftypevar
+ at end ignore
+
+ at deftypevar {rl_dequote_func_t *} rl_filename_rewrite_hook
+If non-zero, this is the address of a function called when reading
+directory entries from the filesystem for completion and comparing
+them to the partial word to be completed.  The function should
+perform any necesary application or system-specific conversion on
+the filename, such as converting between character sets or converting
+from a filesystem format to a character input format.
+The function takes two arguments: @var{fname}, the filename to be converted,
+and @var{fnlen}, its length in bytes.
+It must either return its first argument (if no conversion takes place)
+or the converted filename in newly-allocated memory.  The converted
+form is used to compare against the word to be completed, and, if it
+matches, is added to the list of matches.  Readline will free the
+allocated string.
+ at end deftypevar
+
+ at deftypevar {rl_compdisp_func_t *} rl_completion_display_matches_hook
+If non-zero, then this is the address of a function to call when
+completing a word would normally display the list of possible matches.
+This function is called in lieu of Readline displaying the list.
+It takes three arguments:
+(@code{char **}@var{matches}, @code{int} @var{num_matches}, @code{int} @var{max_length})
+where @var{matches} is the array of matching strings,
+ at var{num_matches} is the number of strings in that array, and
+ at var{max_length} is the length of the longest string in that array.
+Readline provides a convenience function, @code{rl_display_match_list},
+that takes care of doing the display to Readline's output stream.  That
+function may be called from this hook.
+ at end deftypevar
+
+ at deftypevar {const char *} rl_basic_word_break_characters
+The basic list of characters that signal a break between words for the
+completer routine.  The default value of this variable is the characters
+which break words for completion in Bash:
+ at code{" \t\n\"\\'`@@$><=;|&@{("}.
+ at end deftypevar
+
+ at deftypevar {const char *} rl_basic_quote_characters
+A list of quote characters which can cause a word break.
+ at end deftypevar
+
+ at deftypevar {const char *} rl_completer_word_break_characters
+The list of characters that signal a break between words for
+ at code{rl_complete_internal()}.  The default list is the value of
+ at code{rl_basic_word_break_characters}.
+ at end deftypevar
+
+ at deftypevar {rl_cpvfunc_t *} rl_completion_word_break_hook
+If non-zero, this is the address of a function to call when Readline is
+deciding where to separate words for word completion.  It should return
+a character string like @code{rl_completer_word_break_characters} to be
+used to perform the current completion.  The function may choose to set
+ at code{rl_completer_word_break_characters} itself.  If the function
+returns @code{NULL}, @code{rl_completer_word_break_characters} is used.
+ at end deftypevar
+
+ at deftypevar {const char *} rl_completer_quote_characters
+A list of characters which can be used to quote a substring of the line.
+Completion occurs on the entire substring, and within the substring
+ at code{rl_completer_word_break_characters} are treated as any other character,
+unless they also appear within this list.
+ at end deftypevar
+
+ at deftypevar {const char *} rl_filename_quote_characters
+A list of characters that cause a filename to be quoted by the completer
+when they appear in a completed filename.  The default is the null string.
+ at end deftypevar
+
+ at deftypevar {const char *} rl_special_prefixes
+The list of characters that are word break characters, but should be
+left in @var{text} when it is passed to the completion function.
+Programs can use this to help determine what kind of completing to do.
+For instance, Bash sets this variable to "$@@" so that it can complete
+shell variables and hostnames.
+ at end deftypevar
+
+ at deftypevar int rl_completion_query_items
+Up to this many items will be displayed in response to a
+possible-completions call.  After that, readline asks the user if she is sure
+she wants to see them all.  The default value is 100.  A negative value 
+indicates that Readline should never ask the user.
+ at end deftypevar
+
+ at deftypevar {int} rl_completion_append_character
+When a single completion alternative matches at the end of the command
+line, this character is appended to the inserted completion text.  The
+default is a space character (@samp{ }).  Setting this to the null
+character (@samp{\0}) prevents anything being appended automatically.
+This can be changed in application-specific completion functions to
+provide the ``most sensible word separator character'' according to
+an application-specific command line syntax specification.
+ at end deftypevar
+
+ at deftypevar int rl_completion_suppress_append
+If non-zero, @var{rl_completion_append_character} is not appended to
+matches at the end of the command line, as described above.
+It is set to 0 before any application-specific completion function
+is called, and may only be changed within such a function.
+ at end deftypevar
+
+ at deftypevar int rl_completion_quote_character
+When Readline is completing quoted text, as delimited by one of the
+characters in @var{rl_completer_quote_characters}, it sets this variable
+to the quoting character found.
+This is set before any application-specific completion function is called.
+ at end deftypevar
+
+ at deftypevar int rl_completion_suppress_quote
+If non-zero, Readline does not append a matching quote character when
+performing completion on a quoted string.
+It is set to 0 before any application-specific completion function
+is called, and may only be changed within such a function.
+ at end deftypevar
+
+ at deftypevar int rl_completion_found_quote
+When Readline is completing quoted text, it sets this variable
+to a non-zero value if the word being completed contains or is delimited
+by any quoting characters, including backslashes.
+This is set before any application-specific completion function is called.
+ at end deftypevar
+
+ at deftypevar int rl_completion_mark_symlink_dirs
+If non-zero, a slash will be appended to completed filenames that are
+symbolic links to directory names, subject to the value of the
+user-settable @var{mark-directories} variable.
+This variable exists so that application-specific completion functions
+can override the user's global preference (set via the
+ at var{mark-symlinked-directories} Readline variable) if appropriate.
+This variable is set to the user's preference before any
+application-specific completion function is called, so unless that
+function modifies the value, the user's preferences are honored.
+ at end deftypevar
+
+ at deftypevar int rl_ignore_completion_duplicates
+If non-zero, then duplicates in the matches are removed.
+The default is 1.
+ at end deftypevar
+
+ at deftypevar int rl_filename_completion_desired
+Non-zero means that the results of the matches are to be treated as
+filenames.  This is @emph{always} zero when completion is attempted,
+and can only be changed
+within an application-specific completion function.  If it is set to a
+non-zero value by such a function, directory names have a slash appended
+and Readline attempts to quote completed filenames if they contain any
+characters in @code{rl_filename_quote_characters} and
+ at code{rl_filename_quoting_desired} is set to a non-zero value.
+ at end deftypevar
+
+ at deftypevar int rl_filename_quoting_desired
+Non-zero means that the results of the matches are to be quoted using
+double quotes (or an application-specific quoting mechanism) if the
+completed filename contains any characters in
+ at code{rl_filename_quote_chars}.  This is @emph{always} non-zero
+when completion is attempted, and can only be changed within an
+application-specific completion function.
+The quoting is effected via a call to the function pointed to
+by @code{rl_filename_quoting_function}.
+ at end deftypevar
+
+ at deftypevar int rl_attempted_completion_over
+If an application-specific completion function assigned to
+ at code{rl_attempted_completion_function} sets this variable to a non-zero
+value, Readline will not perform its default filename completion even
+if the application's completion function returns no matches.
+It should be set only by an application's completion function.
+ at end deftypevar
+
+ at deftypevar int rl_sort_completion_matches
+If an application sets this variable to 0, Readline will not sort the
+list of completions (which implies that it cannot remove any duplicate
+completions).  The default value is 1, which means that Readline will
+sort the completions and, depending on the value of
+ at code{rl_ignore_completion_duplicates}, will attempt to remove duplicate
+matches.
+ at end deftypevar
+
+ at deftypevar int rl_completion_type
+Set to a character describing the type of completion Readline is currently
+attempting; see the description of @code{rl_complete_internal()}
+(@pxref{Completion Functions}) for the list of characters.
+This is set to the appropriate value before any application-specific
+completion function is called, allowing such functions to present
+the same interface as @code{rl_complete()}.
+ at end deftypevar
+
+ at deftypevar int rl_completion_invoking_key
+Set to the final character in the key sequence that invoked one of the
+completion functions that call @code{rl_complete_internal()}.  This is
+set to the appropriate value before any application-specific completion
+function is called.
+ at end deftypevar
+
+ at deftypevar int rl_inhibit_completion
+If this variable is non-zero, completion is inhibited.  The completion
+character will be inserted as any other bound to @code{self-insert}.
+ at end deftypevar
+
+ at node A Short Completion Example
+ at subsection A Short Completion Example
+
+Here is a small application demonstrating the use of the GNU Readline
+library.  It is called @code{fileman}, and the source code resides in
+ at file{examples/fileman.c}.  This sample application provides
+completion of command names, line editing features, and access to the
+history list.
+
+ at page
+ at smallexample
+/* fileman.c -- A tiny application which demonstrates how to use the
+   GNU Readline library.  This application interactively allows users
+   to manipulate files and their modes. */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <sys/types.h>
+#ifdef HAVE_SYS_FILE_H
+#  include <sys/file.h>
+#endif
+#include <sys/stat.h>
+
+#ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+#endif
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <errno.h>
+
+#if defined (HAVE_STRING_H)
+#  include <string.h>
+#else /* !HAVE_STRING_H */
+#  include <strings.h>
+#endif /* !HAVE_STRING_H */
+
+#ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+#endif
+
+#include <time.h>
+
+#include <readline/readline.h>
+#include <readline/history.h>
+
+extern char *xmalloc PARAMS((size_t));
+
+/* The names of functions that actually do the manipulation. */
+int com_list PARAMS((char *));
+int com_view PARAMS((char *));
+int com_rename PARAMS((char *));
+int com_stat PARAMS((char *));
+int com_pwd PARAMS((char *));
+int com_delete PARAMS((char *));
+int com_help PARAMS((char *));
+int com_cd PARAMS((char *));
+int com_quit PARAMS((char *));
+
+/* A structure which contains information on the commands this program
+   can understand. */
+
+typedef struct @{
+  char *name;			/* User printable name of the function. */
+  rl_icpfunc_t *func;		/* Function to call to do the job. */
+  char *doc;			/* Documentation for this function.  */
+@} COMMAND;
+
+COMMAND commands[] = @{
+  @{ "cd", com_cd, "Change to directory DIR" @},
+  @{ "delete", com_delete, "Delete FILE" @},
+  @{ "help", com_help, "Display this text" @},
+  @{ "?", com_help, "Synonym for `help'" @},
+  @{ "list", com_list, "List files in DIR" @},
+  @{ "ls", com_list, "Synonym for `list'" @},
+  @{ "pwd", com_pwd, "Print the current working directory" @},
+  @{ "quit", com_quit, "Quit using Fileman" @},
+  @{ "rename", com_rename, "Rename FILE to NEWNAME" @},
+  @{ "stat", com_stat, "Print out statistics on FILE" @},
+  @{ "view", com_view, "View the contents of FILE" @},
+  @{ (char *)NULL, (rl_icpfunc_t *)NULL, (char *)NULL @}
+@};
+
+/* Forward declarations. */
+char *stripwhite ();
+COMMAND *find_command ();
+
+/* The name of this program, as taken from argv[0]. */
+char *progname;
+
+/* When non-zero, this global means the user is done using this program. */
+int done;
+
+char *
+dupstr (s)
+     char *s;
+@{
+  char *r;
+
+  r = xmalloc (strlen (s) + 1);
+  strcpy (r, s);
+  return (r);
+@}
+
+main (argc, argv)
+     int argc;
+     char **argv;
+@{
+  char *line, *s;
+
+  progname = argv[0];
+
+  initialize_readline ();	/* Bind our completer. */
+
+  /* Loop reading and executing lines until the user quits. */
+  for ( ; done == 0; )
+    @{
+      line = readline ("FileMan: ");
+
+      if (!line)
+        break;
+
+      /* Remove leading and trailing whitespace from the line.
+         Then, if there is anything left, add it to the history list
+         and execute it. */
+      s = stripwhite (line);
+
+      if (*s)
+        @{
+          add_history (s);
+          execute_line (s);
+        @}
+
+      free (line);
+    @}
+  exit (0);
+@}
+
+/* Execute a command line. */
+int
+execute_line (line)
+     char *line;
+@{
+  register int i;
+  COMMAND *command;
+  char *word;
+
+  /* Isolate the command word. */
+  i = 0;
+  while (line[i] && whitespace (line[i]))
+    i++;
+  word = line + i;
+
+  while (line[i] && !whitespace (line[i]))
+    i++;
+
+  if (line[i])
+    line[i++] = '\0';
+
+  command = find_command (word);
+
+  if (!command)
+    @{
+      fprintf (stderr, "%s: No such command for FileMan.\n", word);
+      return (-1);
+    @}
+
+  /* Get argument to command, if any. */
+  while (whitespace (line[i]))
+    i++;
+
+  word = line + i;
+
+  /* Call the function. */
+  return ((*(command->func)) (word));
+@}
+
+/* Look up NAME as the name of a command, and return a pointer to that
+   command.  Return a NULL pointer if NAME isn't a command name. */
+COMMAND *
+find_command (name)
+     char *name;
+@{
+  register int i;
+
+  for (i = 0; commands[i].name; i++)
+    if (strcmp (name, commands[i].name) == 0)
+      return (&commands[i]);
+
+  return ((COMMAND *)NULL);
+@}
+
+/* Strip whitespace from the start and end of STRING.  Return a pointer
+   into STRING. */
+char *
+stripwhite (string)
+     char *string;
+@{
+  register char *s, *t;
+
+  for (s = string; whitespace (*s); s++)
+    ;
+    
+  if (*s == 0)
+    return (s);
+
+  t = s + strlen (s) - 1;
+  while (t > s && whitespace (*t))
+    t--;
+  *++t = '\0';
+
+  return s;
+@}
+
+/* **************************************************************** */
+/*                                                                  */
+/*                  Interface to Readline Completion                */
+/*                                                                  */
+/* **************************************************************** */
+
+char *command_generator PARAMS((const char *, int));
+char **fileman_completion PARAMS((const char *, int, int));
+
+/* Tell the GNU Readline library how to complete.  We want to try to complete
+   on command names if this is the first word in the line, or on filenames
+   if not. */
+initialize_readline ()
+@{
+  /* Allow conditional parsing of the ~/.inputrc file. */
+  rl_readline_name = "FileMan";
+
+  /* Tell the completer that we want a crack first. */
+  rl_attempted_completion_function = fileman_completion;
+@}
+
+/* Attempt to complete on the contents of TEXT.  START and END bound the
+   region of rl_line_buffer that contains the word to complete.  TEXT is
+   the word to complete.  We can use the entire contents of rl_line_buffer
+   in case we want to do some simple parsing.  Return the array of matches,
+   or NULL if there aren't any. */
+char **
+fileman_completion (text, start, end)
+     const char *text;
+     int start, end;
+@{
+  char **matches;
+
+  matches = (char **)NULL;
+
+  /* If this word is at the start of the line, then it is a command
+     to complete.  Otherwise it is the name of a file in the current
+     directory. */
+  if (start == 0)
+    matches = rl_completion_matches (text, command_generator);
+
+  return (matches);
+@}
+
+/* Generator function for command completion.  STATE lets us know whether
+   to start from scratch; without any state (i.e. STATE == 0), then we
+   start at the top of the list. */
+char *
+command_generator (text, state)
+     const char *text;
+     int state;
+@{
+  static int list_index, len;
+  char *name;
+
+  /* If this is a new word to complete, initialize now.  This includes
+     saving the length of TEXT for efficiency, and initializing the index
+     variable to 0. */
+  if (!state)
+    @{
+      list_index = 0;
+      len = strlen (text);
+    @}
+
+  /* Return the next name which partially matches from the command list. */
+  while (name = commands[list_index].name)
+    @{
+      list_index++;
+
+      if (strncmp (name, text, len) == 0)
+        return (dupstr(name));
+    @}
+
+  /* If no names matched, then return NULL. */
+  return ((char *)NULL);
+@}
+
+/* **************************************************************** */
+/*                                                                  */
+/*                       FileMan Commands                           */
+/*                                                                  */
+/* **************************************************************** */
+
+/* String to pass to system ().  This is for the LIST, VIEW and RENAME
+   commands. */
+static char syscom[1024];
+
+/* List the file(s) named in arg. */
+com_list (arg)
+     char *arg;
+@{
+  if (!arg)
+    arg = "";
+
+  sprintf (syscom, "ls -FClg %s", arg);
+  return (system (syscom));
+@}
+
+com_view (arg)
+     char *arg;
+@{
+  if (!valid_argument ("view", arg))
+    return 1;
+
+#if defined (__MSDOS__)
+  /* more.com doesn't grok slashes in pathnames */
+  sprintf (syscom, "less %s", arg);
+#else
+  sprintf (syscom, "more %s", arg);
+#endif
+  return (system (syscom));
+@}
+
+com_rename (arg)
+     char *arg;
+@{
+  too_dangerous ("rename");
+  return (1);
+@}
+
+com_stat (arg)
+     char *arg;
+@{
+  struct stat finfo;
+
+  if (!valid_argument ("stat", arg))
+    return (1);
+
+  if (stat (arg, &finfo) == -1)
+    @{
+      perror (arg);
+      return (1);
+    @}
+
+  printf ("Statistics for `%s':\n", arg);
+
+  printf ("%s has %d link%s, and is %d byte%s in length.\n",
+	  arg,
+          finfo.st_nlink,
+          (finfo.st_nlink == 1) ? "" : "s",
+          finfo.st_size,
+          (finfo.st_size == 1) ? "" : "s");
+  printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime));
+  printf ("      Last access at: %s", ctime (&finfo.st_atime));
+  printf ("    Last modified at: %s", ctime (&finfo.st_mtime));
+  return (0);
+@}
+
+com_delete (arg)
+     char *arg;
+@{
+  too_dangerous ("delete");
+  return (1);
+@}
+
+/* Print out help for ARG, or for all of the commands if ARG is
+   not present. */
+com_help (arg)
+     char *arg;
+@{
+  register int i;
+  int printed = 0;
+
+  for (i = 0; commands[i].name; i++)
+    @{
+      if (!*arg || (strcmp (arg, commands[i].name) == 0))
+        @{
+          printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc);
+          printed++;
+        @}
+    @}
+
+  if (!printed)
+    @{
+      printf ("No commands match `%s'.  Possibilties are:\n", arg);
+
+      for (i = 0; commands[i].name; i++)
+        @{
+          /* Print in six columns. */
+          if (printed == 6)
+            @{
+              printed = 0;
+              printf ("\n");
+            @}
+
+          printf ("%s\t", commands[i].name);
+          printed++;
+        @}
+
+      if (printed)
+        printf ("\n");
+    @}
+  return (0);
+@}
+
+/* Change to the directory ARG. */
+com_cd (arg)
+     char *arg;
+@{
+  if (chdir (arg) == -1)
+    @{
+      perror (arg);
+      return 1;
+    @}
+
+  com_pwd ("");
+  return (0);
+@}
+
+/* Print out the current working directory. */
+com_pwd (ignore)
+     char *ignore;
+@{
+  char dir[1024], *s;
+
+  s = getcwd (dir, sizeof(dir) - 1);
+  if (s == 0)
+    @{
+      printf ("Error getting pwd: %s\n", dir);
+      return 1;
+    @}
+
+  printf ("Current directory is %s\n", dir);
+  return 0;
+@}
+
+/* The user wishes to quit using this program.  Just set DONE non-zero. */
+com_quit (arg)
+     char *arg;
+@{
+  done = 1;
+  return (0);
+@}
+
+/* Function which tells you that you can't do this. */
+too_dangerous (caller)
+     char *caller;
+@{
+  fprintf (stderr,
+           "%s: Too dangerous for me to distribute.  Write it yourself.\n",
+           caller);
+@}
+
+/* Return non-zero if ARG is a valid argument for CALLER, else print
+   an error message and return zero. */
+int
+valid_argument (caller, arg)
+     char *caller, *arg;
+@{
+  if (!arg || !*arg)
+    @{
+      fprintf (stderr, "%s: Argument required.\n", caller);
+      return (0);
+    @}
+
+  return (1);
+@}
+ at end smallexample
diff --git a/readline/doc/rluser.texi b/readline/doc/rluser.texi
index 8b13789..8a69c99 100644
--- a/readline/doc/rluser.texi
+++ b/readline/doc/rluser.texi
@@ -1 +1,2037 @@
+ at comment %**start of header (This is for running Texinfo on a region.)
+ at setfilename rluser.info
+ at comment %**end of header (This is for running Texinfo on a region.)
 
+ at ignore
+This file documents the end user interface to the GNU command line
+editing features.  It is to be an appendix to manuals for programs which
+use these features.  There is a document entitled "readline.texinfo"
+which contains both end-user and programmer documentation for the
+GNU Readline Library.
+
+Copyright (C) 1988--2011 Free Software Foundation, Inc.
+
+Authored by Brian Fox and Chet Ramey.
+
+Permission is granted to process this file through Tex and print the
+results, provided the printed document carries copying permission notice
+identical to this one except for the removal of this paragraph (this
+paragraph not being relevant to the printed manual).
+
+Permission is granted to make and distribute verbatim copies of this manual
+provided the copyright notice and this permission notice are preserved on
+all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that the
+GNU Copyright statement is available to the distributee, and provided that
+the entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+ at end ignore
+
+ at comment If you are including this manual as an appendix, then set the
+ at comment variable readline-appendix.
+
+ at ifclear BashFeatures
+ at defcodeindex bt
+ at end ifclear
+
+ at node Command Line Editing
+ at chapter Command Line Editing
+
+This chapter describes the basic features of the @sc{gnu}
+command line editing interface.
+ at ifset BashFeatures
+Command line editing is provided by the Readline library, which is
+used by several different programs, including Bash.
+Command line editing is enabled by default when using an interactive shell,
+unless the @option{--noediting} option is supplied at shell invocation.
+Line editing is also used when using the @option{-e} option to the
+ at code{read} builtin command (@pxref{Bash Builtins}).
+By default, the line editing commands are similar to those of Emacs.
+A vi-style line editing interface is also available.
+Line editing can be enabled at any time using the @option{-o emacs} or
+ at option{-o vi} options to the @code{set} builtin command
+(@pxref{The Set Builtin}), or disabled using the @option{+o emacs} or 
+ at option{+o vi} options to @code{set}.
+ at end ifset
+
+ at menu
+* Introduction and Notation::	Notation used in this text.
+* Readline Interaction::	The minimum set of commands for editing a line.
+* Readline Init File::		Customizing Readline from a user's view.
+* Bindable Readline Commands::	A description of most of the Readline commands
+				available for binding
+* Readline vi Mode::		A short description of how to make Readline
+				behave like the vi editor.
+ at ifset BashFeatures
+* Programmable Completion::	How to specify the possible completions for
+				a specific command.
+* Programmable Completion Builtins::	Builtin commands to specify how to
+				complete arguments for a particular command.
+ at end ifset
+ at end menu
+
+ at node Introduction and Notation
+ at section Introduction to Line Editing
+
+The following paragraphs describe the notation used to represent
+keystrokes.
+
+The text @kbd{C-k} is read as `Control-K' and describes the character
+produced when the @key{k} key is pressed while the Control key
+is depressed.
+
+The text @kbd{M-k} is read as `Meta-K' and describes the character
+produced when the Meta key (if you have one) is depressed, and the @key{k}
+key is pressed.
+The Meta key is labeled @key{ALT} on many keyboards.
+On keyboards with two keys labeled @key{ALT} (usually to either side of
+the space bar), the @key{ALT} on the left side is generally set to
+work as a Meta key.
+The @key{ALT} key on the right may also be configured to work as a
+Meta key or may be configured as some other modifier, such as a
+Compose key for typing accented characters.
+
+If you do not have a Meta or @key{ALT} key, or another key working as
+a Meta key, the identical keystroke can be generated by typing @key{ESC}
+ at emph{first}, and then typing @key{k}.
+Either process is known as @dfn{metafying} the @key{k} key.
+
+The text @kbd{M-C-k} is read as `Meta-Control-k' and describes the
+character produced by @dfn{metafying} @kbd{C-k}.
+
+In addition, several keys have their own names.  Specifically,
+ at key{DEL}, @key{ESC}, @key{LFD}, @key{SPC}, @key{RET}, and @key{TAB} all
+stand for themselves when seen in this text, or in an init file
+(@pxref{Readline Init File}).
+If your keyboard lacks a @key{LFD} key, typing @key{C-j} will
+produce the desired character.
+The @key{RET} key may be labeled @key{Return} or @key{Enter} on
+some keyboards.
+
+ at node Readline Interaction
+ at section Readline Interaction
+ at cindex interaction, readline
+
+Often during an interactive session you type in a long line of text,
+only to notice that the first word on the line is misspelled.  The
+Readline library gives you a set of commands for manipulating the text
+as you type it in, allowing you to just fix your typo, and not forcing
+you to retype the majority of the line.  Using these editing commands,
+you move the cursor to the place that needs correction, and delete or
+insert the text of the corrections.  Then, when you are satisfied with
+the line, you simply press @key{RET}.  You do not have to be at the
+end of the line to press @key{RET}; the entire line is accepted
+regardless of the location of the cursor within the line.
+
+ at menu
+* Readline Bare Essentials::	The least you need to know about Readline.
+* Readline Movement Commands::	Moving about the input line.
+* Readline Killing Commands::	How to delete text, and how to get it back!
+* Readline Arguments::		Giving numeric arguments to commands.
+* Searching::			Searching through previous lines.
+ at end menu
+
+ at node Readline Bare Essentials
+ at subsection Readline Bare Essentials
+ at cindex notation, readline
+ at cindex command editing
+ at cindex editing command lines
+
+In order to enter characters into the line, simply type them.  The typed
+character appears where the cursor was, and then the cursor moves one
+space to the right.  If you mistype a character, you can use your
+erase character to back up and delete the mistyped character.
+
+Sometimes you may mistype a character, and
+not notice the error until you have typed several other characters.  In
+that case, you can type @kbd{C-b} to move the cursor to the left, and then
+correct your mistake.  Afterwards, you can move the cursor to the right
+with @kbd{C-f}.
+
+When you add text in the middle of a line, you will notice that characters
+to the right of the cursor are `pushed over' to make room for the text
+that you have inserted.  Likewise, when you delete text behind the cursor,
+characters to the right of the cursor are `pulled back' to fill in the
+blank space created by the removal of the text.  A list of the bare
+essentials for editing the text of an input line follows.
+
+ at table @asis
+ at item @kbd{C-b}
+Move back one character.
+ at item @kbd{C-f}
+Move forward one character.
+ at item @key{DEL} or @key{Backspace}
+Delete the character to the left of the cursor.
+ at item @kbd{C-d}
+Delete the character underneath the cursor.
+ at item @w{Printing characters}
+Insert the character into the line at the cursor.
+ at item @kbd{C-_} or @kbd{C-x C-u}
+Undo the last editing command.  You can undo all the way back to an
+empty line.
+ at end table
+
+ at noindent
+(Depending on your configuration, the @key{Backspace} key be set to
+delete the character to the left of the cursor and the @key{DEL} key set
+to delete the character underneath the cursor, like @kbd{C-d}, rather
+than the character to the left of the cursor.)
+
+ at node Readline Movement Commands
+ at subsection Readline Movement Commands
+
+
+The above table describes the most basic keystrokes that you need
+in order to do editing of the input line.  For your convenience, many
+other commands have been added in addition to @kbd{C-b}, @kbd{C-f},
+ at kbd{C-d}, and @key{DEL}.  Here are some commands for moving more rapidly
+about the line.
+
+ at table @kbd
+ at item C-a
+Move to the start of the line.
+ at item C-e
+Move to the end of the line.
+ at item M-f
+Move forward a word, where a word is composed of letters and digits.
+ at item M-b
+Move backward a word.
+ at item C-l
+Clear the screen, reprinting the current line at the top.
+ at end table
+
+Notice how @kbd{C-f} moves forward a character, while @kbd{M-f} moves
+forward a word.  It is a loose convention that control keystrokes
+operate on characters while meta keystrokes operate on words.
+
+ at node Readline Killing Commands
+ at subsection Readline Killing Commands
+
+ at cindex killing text
+ at cindex yanking text
+
+ at dfn{Killing} text means to delete the text from the line, but to save
+it away for later use, usually by @dfn{yanking} (re-inserting)
+it back into the line.
+(`Cut' and `paste' are more recent jargon for `kill' and `yank'.)
+
+If the description for a command says that it `kills' text, then you can
+be sure that you can get the text back in a different (or the same)
+place later.
+
+When you use a kill command, the text is saved in a @dfn{kill-ring}.
+Any number of consecutive kills save all of the killed text together, so
+that when you yank it back, you get it all.  The kill
+ring is not line specific; the text that you killed on a previously
+typed line is available to be yanked back later, when you are typing
+another line.
+ at cindex kill ring
+
+Here is the list of commands for killing text.
+
+ at table @kbd
+ at item C-k
+Kill the text from the current cursor position to the end of the line.
+
+ at item M-d
+Kill from the cursor to the end of the current word, or, if between
+words, to the end of the next word.
+Word boundaries are the same as those used by @kbd{M-f}.
+
+ at item M- at key{DEL}
+Kill from the cursor the start of the current word, or, if between
+words, to the start of the previous word.
+Word boundaries are the same as those used by @kbd{M-b}.
+
+ at item C-w
+Kill from the cursor to the previous whitespace.  This is different than
+ at kbd{M- at key{DEL}} because the word boundaries differ.
+
+ at end table
+
+Here is how to @dfn{yank} the text back into the line.  Yanking
+means to copy the most-recently-killed text from the kill buffer.
+
+ at table @kbd
+ at item C-y
+Yank the most recently killed text back into the buffer at the cursor.
+
+ at item M-y
+Rotate the kill-ring, and yank the new top.  You can only do this if
+the prior command is @kbd{C-y} or @kbd{M-y}.
+ at end table
+
+ at node Readline Arguments
+ at subsection Readline Arguments
+
+You can pass numeric arguments to Readline commands.  Sometimes the
+argument acts as a repeat count, other times it is the @i{sign} of the
+argument that is significant.  If you pass a negative argument to a
+command which normally acts in a forward direction, that command will
+act in a backward direction.  For example, to kill text back to the
+start of the line, you might type @samp{M-- C-k}.
+
+The general way to pass numeric arguments to a command is to type meta
+digits before the command.  If the first `digit' typed is a minus
+sign (@samp{-}), then the sign of the argument will be negative.  Once
+you have typed one meta digit to get the argument started, you can type
+the remainder of the digits, and then the command.  For example, to give
+the @kbd{C-d} command an argument of 10, you could type @samp{M-1 0 C-d},
+which will delete the next ten characters on the input line.
+
+ at node Searching
+ at subsection Searching for Commands in the History
+
+Readline provides commands for searching through the command history
+ at ifset BashFeatures
+(@pxref{Bash History Facilities})
+ at end ifset
+for lines containing a specified string.
+There are two search modes:  @dfn{incremental} and @dfn{non-incremental}.
+
+Incremental searches begin before the user has finished typing the
+search string.
+As each character of the search string is typed, Readline displays
+the next entry from the history matching the string typed so far.
+An incremental search requires only as many characters as needed to
+find the desired history entry.
+To search backward in the history for a particular string, type
+ at kbd{C-r}.  Typing @kbd{C-s} searches forward through the history.
+The characters present in the value of the @code{isearch-terminators} variable
+are used to terminate an incremental search.
+If that variable has not been assigned a value, the @key{ESC} and
+ at kbd{C-J} characters will terminate an incremental search.
+ at kbd{C-g} will abort an incremental search and restore the original line.
+When the search is terminated, the history entry containing the
+search string becomes the current line.
+
+To find other matching entries in the history list, type @kbd{C-r} or
+ at kbd{C-s} as appropriate.
+This will search backward or forward in the history for the next
+entry matching the search string typed so far.
+Any other key sequence bound to a Readline command will terminate
+the search and execute that command.
+For instance, a @key{RET} will terminate the search and accept
+the line, thereby executing the command from the history list.
+A movement command will terminate the search, make the last line found
+the current line, and begin editing.
+
+Readline remembers the last incremental search string.  If two
+ at kbd{C-r}s are typed without any intervening characters defining a new
+search string, any remembered search string is used.
+
+Non-incremental searches read the entire search string before starting
+to search for matching history lines.  The search string may be
+typed by the user or be part of the contents of the current line.
+
+ at node Readline Init File
+ at section Readline Init File
+ at cindex initialization file, readline
+
+Although the Readline library comes with a set of Emacs-like
+keybindings installed by default, it is possible to use a different set
+of keybindings.
+Any user can customize programs that use Readline by putting
+commands in an @dfn{inputrc} file, conventionally in his home directory.
+The name of this
+ at ifset BashFeatures
+file is taken from the value of the shell variable @env{INPUTRC}.  If
+ at end ifset
+ at ifclear BashFeatures
+file is taken from the value of the environment variable @env{INPUTRC}.  If
+ at end ifclear
+that variable is unset, the default is @file{~/.inputrc}.  If that
+file does not exist or cannot be read, the ultimate default is
+ at file{/etc/inputrc}.
+
+When a program which uses the Readline library starts up, the
+init file is read, and the key bindings are set.
+
+In addition, the @code{C-x C-r} command re-reads this init file, thus
+incorporating any changes that you might have made to it.
+
+ at menu
+* Readline Init File Syntax::	Syntax for the commands in the inputrc file.
+
+* Conditional Init Constructs::	Conditional key bindings in the inputrc file.
+
+* Sample Init File::		An example inputrc file.
+ at end menu
+
+ at node Readline Init File Syntax
+ at subsection Readline Init File Syntax
+
+There are only a few basic constructs allowed in the
+Readline init file.  Blank lines are ignored.
+Lines beginning with a @samp{#} are comments.
+Lines beginning with a @samp{$} indicate conditional
+constructs (@pxref{Conditional Init Constructs}).  Other lines
+denote variable settings and key bindings.
+
+ at table @asis
+ at item Variable Settings
+You can modify the run-time behavior of Readline by
+altering the values of variables in Readline
+using the @code{set} command within the init file.
+The syntax is simple:
+
+ at example
+set @var{variable} @var{value}
+ at end example
+
+ at noindent
+Here, for example, is how to
+change from the default Emacs-like key binding to use
+ at code{vi} line editing commands:
+
+ at example
+set editing-mode vi
+ at end example
+
+Variable names and values, where appropriate, are recognized without regard
+to case.  Unrecognized variable names are ignored.
+
+Boolean variables (those that can be set to on or off) are set to on if
+the value is null or empty, @var{on} (case-insensitive), or 1.  Any other
+value results in the variable being set to off.
+
+ at ifset BashFeatures
+The @w{@code{bind -V}} command lists the current Readline variable names
+and values.  @xref{Bash Builtins}.
+ at end ifset
+
+A great deal of run-time behavior is changeable with the following
+variables.
+
+ at cindex variables, readline
+ at table @code
+
+ at item bell-style
+ at vindex bell-style
+Controls what happens when Readline wants to ring the terminal bell.
+If set to @samp{none}, Readline never rings the bell.  If set to
+ at samp{visible}, Readline uses a visible bell if one is available.
+If set to @samp{audible} (the default), Readline attempts to ring
+the terminal's bell.
+
+ at item bind-tty-special-chars
+ at vindex bind-tty-special-chars
+If set to @samp{on}, Readline attempts to bind the control characters  
+treated specially by the kernel's terminal driver to their Readline
+equivalents.
+
+ at item comment-begin
+ at vindex comment-begin
+The string to insert at the beginning of the line when the
+ at code{insert-comment} command is executed.  The default value
+is @code{"#"}.
+
+ at item completion-display-width
+ at vindex completion-display-width
+The number of screen columns used to display possible matches
+when performing completion.
+The value is ignored if it is less than 0 or greater than the terminal
+screen width.
+A value of 0 will cause matches to be displayed one per line.
+The default value is -1.
+
+ at item completion-ignore-case
+ at vindex completion-ignore-case
+If set to @samp{on}, Readline performs filename matching and completion
+in a case-insensitive fashion.
+The default value is @samp{off}.
+
+ at item completion-map-case
+ at vindex completion-map-case
+If set to @samp{on}, and @var{completion-ignore-case} is enabled, Readline
+treats hyphens (@samp{-}) and underscores (@samp{_}) as equivalent when
+performing case-insensitive filename matching and completion.
+
+ at item completion-prefix-display-length
+ at vindex completion-prefix-display-length
+The length in characters of the common prefix of a list of possible
+completions that is displayed without modification.  When set to a
+value greater than zero, common prefixes longer than this value are
+replaced with an ellipsis when displaying possible completions.
+
+ at item completion-query-items
+ at vindex completion-query-items
+The number of possible completions that determines when the user is
+asked whether the list of possibilities should be displayed.
+If the number of possible completions is greater than this value,
+Readline will ask the user whether or not he wishes to view
+them; otherwise, they are simply listed.
+This variable must be set to an integer value greater than or equal to 0.
+A negative value means Readline should never ask.
+The default limit is @code{100}.
+
+ at item convert-meta
+ at vindex convert-meta
+If set to @samp{on}, Readline will convert characters with the
+eighth bit set to an @sc{ascii} key sequence by stripping the eighth
+bit and prefixing an @key{ESC} character, converting them to a
+meta-prefixed key sequence.  The default value is @samp{on}.
+
+ at item disable-completion
+ at vindex disable-completion
+If set to @samp{On}, Readline will inhibit word completion.
+Completion  characters will be inserted into the line as if they had
+been mapped to @code{self-insert}.  The default is @samp{off}.
+
+ at item editing-mode
+ at vindex editing-mode
+The @code{editing-mode} variable controls which default set of
+key bindings is used.  By default, Readline starts up in Emacs editing
+mode, where the keystrokes are most similar to Emacs.  This variable can be
+set to either @samp{emacs} or @samp{vi}.
+
+ at item echo-control-characters
+When set to @samp{on}, on operating systems that indicate they support it,
+readline echoes a character corresponding to a signal generated from the
+keyboard.  The default is @samp{on}.
+
+ at item enable-keypad
+ at vindex enable-keypad
+When set to @samp{on}, Readline will try to enable the application
+keypad when it is called.  Some systems need this to enable the
+arrow keys.  The default is @samp{off}.
+
+ at item enable-meta-key
+When set to @samp{on}, Readline will try to enable any meta modifier
+key the terminal claims to support when it is called.  On many terminals,
+the meta key is used to send eight-bit characters.
+The default is @samp{on}.
+
+ at item expand-tilde
+ at vindex expand-tilde
+If set to @samp{on}, tilde expansion is performed when Readline
+attempts word completion.  The default is @samp{off}.
+
+ at item history-preserve-point
+ at vindex history-preserve-point
+If set to @samp{on}, the history code attempts to place the point (the
+current cursor position) at the
+same location on each history line retrieved with @code{previous-history}
+or @code{next-history}.  The default is @samp{off}.
+
+ at item history-size
+ at vindex history-size
+Set the maximum number of history entries saved in the history list.  If
+set to zero, the number of entries in the history list is not limited.
+
+ at item horizontal-scroll-mode
+ at vindex horizontal-scroll-mode
+This variable can be set to either @samp{on} or @samp{off}.  Setting it
+to @samp{on} means that the text of the lines being edited will scroll
+horizontally on a single screen line when they are longer than the width
+of the screen, instead of wrapping onto a new screen line.  By default,
+this variable is set to @samp{off}.
+
+ at item input-meta
+ at vindex input-meta
+ at vindex meta-flag
+If set to @samp{on}, Readline will enable eight-bit input (it
+will not clear the eighth bit in the characters it reads),
+regardless of what the terminal claims it can support.  The
+default value is @samp{off}.  The name @code{meta-flag} is a
+synonym for this variable.
+
+ at item isearch-terminators
+ at vindex isearch-terminators
+The string of characters that should terminate an incremental search without
+subsequently executing the character as a command (@pxref{Searching}).
+If this variable has not been given a value, the characters @key{ESC} and
+ at kbd{C-J} will terminate an incremental search.
+
+ at item keymap
+ at vindex keymap
+Sets Readline's idea of the current keymap for key binding commands.
+Acceptable @code{keymap} names are
+ at code{emacs},
+ at code{emacs-standard},
+ at code{emacs-meta},
+ at code{emacs-ctlx},
+ at code{vi},
+ at code{vi-move},
+ at code{vi-command}, and
+ at code{vi-insert}.
+ at code{vi} is equivalent to @code{vi-command}; @code{emacs} is
+equivalent to @code{emacs-standard}.  The default value is @code{emacs}.
+The value of the @code{editing-mode} variable also affects the
+default keymap.
+
+ at item mark-directories
+If set to @samp{on}, completed directory names have a slash
+appended.  The default is @samp{on}.
+
+ at item mark-modified-lines
+ at vindex mark-modified-lines
+This variable, when set to @samp{on}, causes Readline to display an
+asterisk (@samp{*}) at the start of history lines which have been modified.
+This variable is @samp{off} by default.
+
+ at item mark-symlinked-directories
+ at vindex mark-symlinked-directories
+If set to @samp{on}, completed names which are symbolic links
+to directories have a slash appended (subject to the value of
+ at code{mark-directories}).
+The default is @samp{off}.
+
+ at item match-hidden-files
+ at vindex match-hidden-files
+This variable, when set to @samp{on}, causes Readline to match files whose
+names begin with a @samp{.} (hidden files) when performing filename
+completion.
+If set to @samp{off}, the leading @samp{.} must be
+supplied by the user in the filename to be completed.
+This variable is @samp{on} by default.
+
+ at item menu-complete-display-prefix
+ at vindex menu-complete-display-prefix
+If set to @samp{on}, menu completion displays the common prefix of the
+list of possible completions (which may be empty) before cycling through
+the list.  The default is @samp{off}.
+
+ at item output-meta
+ at vindex output-meta
+If set to @samp{on}, Readline will display characters with the
+eighth bit set directly rather than as a meta-prefixed escape
+sequence.  The default is @samp{off}.
+
+ at item page-completions
+ at vindex page-completions
+If set to @samp{on}, Readline uses an internal @code{more}-like pager
+to display a screenful of possible completions at a time.
+This variable is @samp{on} by default.
+
+ at item print-completions-horizontally
+If set to @samp{on}, Readline will display completions with matches
+sorted horizontally in alphabetical order, rather than down the screen.
+The default is @samp{off}.
+
+ at item revert-all-at-newline
+ at vindex revert-all-at-newline
+If set to @samp{on}, Readline will undo all changes to history lines
+before returning when @code{accept-line} is executed.  By default,
+history lines may be modified and retain individual undo lists across
+calls to @code{readline}.  The default is @samp{off}.
+
+ at item show-all-if-ambiguous
+ at vindex show-all-if-ambiguous
+This alters the default behavior of the completion functions.  If
+set to @samp{on}, 
+words which have more than one possible completion cause the
+matches to be listed immediately instead of ringing the bell.
+The default value is @samp{off}.
+
+ at item show-all-if-unmodified
+ at vindex show-all-if-unmodified
+This alters the default behavior of the completion functions in
+a fashion similar to @var{show-all-if-ambiguous}.
+If set to @samp{on}, 
+words which have more than one possible completion without any
+possible partial completion (the possible completions don't share
+a common prefix) cause the matches to be listed immediately instead
+of ringing the bell.
+The default value is @samp{off}.
+
+ at item skip-completed-text
+ at vindex skip-completed-text
+If set to @samp{on}, this alters the default completion behavior when
+inserting a single match into the line.  It's only active when
+performing completion in the middle of a word.  If enabled, readline
+does not insert characters from the completion that match characters
+after point in the word being completed, so portions of the word
+following the cursor are not duplicated.
+For instance, if this is enabled, attempting completion when the cursor
+is after the @samp{e} in @samp{Makefile} will result in @samp{Makefile}
+rather than @samp{Makefilefile}, assuming there is a single possible
+completion.
+The default value is @samp{off}.
+
+ at item visible-stats
+ at vindex visible-stats
+If set to @samp{on}, a character denoting a file's type
+is appended to the filename when listing possible
+completions.  The default is @samp{off}.
+
+ at end table
+
+ at item Key Bindings
+The syntax for controlling key bindings in the init file is
+simple.  First you need to find the name of the command that you
+want to change.  The following sections contain tables of the command
+name, the default keybinding, if any, and a short description of what
+the command does.
+
+Once you know the name of the command, simply place on a line
+in the init file the name of the key
+you wish to bind the command to, a colon, and then the name of the
+command.
+There can be no space between the key name and the colon -- that will be
+interpreted as part of the key name.
+The name of the key can be expressed in different ways, depending on
+what you find most comfortable.
+
+In addition to command names, readline allows keys to be bound
+to a string that is inserted when the key is pressed (a @var{macro}).
+
+ at ifset BashFeatures
+The @w{@code{bind -p}} command displays Readline function names and
+bindings in a format that can put directly into an initialization file.
+ at xref{Bash Builtins}.
+ at end ifset
+
+ at table @asis
+ at item @w{@var{keyname}: @var{function-name} or @var{macro}}
+ at var{keyname} is the name of a key spelled out in English.  For example:
+ at example
+Control-u: universal-argument
+Meta-Rubout: backward-kill-word
+Control-o: "> output"
+ at end example
+
+In the above example, @kbd{C-u} is bound to the function
+ at code{universal-argument},
+ at kbd{M-DEL} is bound to the function @code{backward-kill-word}, and
+ at kbd{C-o} is bound to run the macro
+expressed on the right hand side (that is, to insert the text
+ at samp{> output} into the line).
+
+A number of symbolic character names are recognized while
+processing this key binding syntax:
+ at var{DEL},
+ at var{ESC},
+ at var{ESCAPE},
+ at var{LFD},
+ at var{NEWLINE},
+ at var{RET},
+ at var{RETURN},
+ at var{RUBOUT},
+ at var{SPACE},
+ at var{SPC},
+and
+ at var{TAB}.
+
+ at item @w{"@var{keyseq}": @var{function-name} or @var{macro}}
+ at var{keyseq} differs from @var{keyname} above in that strings
+denoting an entire key sequence can be specified, by placing
+the key sequence in double quotes.  Some @sc{gnu} Emacs style key
+escapes can be used, as in the following example, but the
+special character names are not recognized.
+
+ at example
+"\C-u": universal-argument
+"\C-x\C-r": re-read-init-file
+"\e[11~": "Function Key 1"
+ at end example
+
+In the above example, @kbd{C-u} is again bound to the function
+ at code{universal-argument} (just as it was in the first example),
+ at samp{@kbd{C-x} @kbd{C-r}} is bound to the function @code{re-read-init-file},
+and @samp{@key{ESC} @key{[} @key{1} @key{1} @key{~}} is bound to insert
+the text @samp{Function Key 1}.
+
+ at end table
+
+The following @sc{gnu} Emacs style escape sequences are available when
+specifying key sequences:
+
+ at table @code
+ at item @kbd{\C-}
+control prefix
+ at item @kbd{\M-}
+meta prefix
+ at item @kbd{\e}
+an escape character
+ at item @kbd{\\}
+backslash
+ at item @kbd{\"}
+ at key{"}, a double quotation mark
+ at item @kbd{\'}
+ at key{'}, a single quote or apostrophe
+ at end table
+
+In addition to the @sc{gnu} Emacs style escape sequences, a second
+set of backslash escapes is available:
+
+ at table @code
+ at item \a
+alert (bell)
+ at item \b
+backspace
+ at item \d
+delete
+ at item \f
+form feed
+ at item \n
+newline
+ at item \r
+carriage return
+ at item \t
+horizontal tab
+ at item \v
+vertical tab
+ at item \@var{nnn}
+the eight-bit character whose value is the octal value @var{nnn}
+(one to three digits)
+ at item \x at var{HH}
+the eight-bit character whose value is the hexadecimal value @var{HH}
+(one or two hex digits)
+ at end table
+
+When entering the text of a macro, single or double quotes must
+be used to indicate a macro definition.
+Unquoted text is assumed to be a function name.
+In the macro body, the backslash escapes described above are expanded.
+Backslash will quote any other character in the macro text,
+including @samp{"} and @samp{'}.
+For example, the following binding will make @samp{@kbd{C-x} \}
+insert a single @samp{\} into the line:
+ at example
+"\C-x\\": "\\"
+ at end example
+
+ at end table
+
+ at node Conditional Init Constructs
+ at subsection Conditional Init Constructs
+
+Readline implements a facility similar in spirit to the conditional
+compilation features of the C preprocessor which allows key
+bindings and variable settings to be performed as the result
+of tests.  There are four parser directives used.
+
+ at table @code
+ at item $if
+The @code{$if} construct allows bindings to be made based on the
+editing mode, the terminal being used, or the application using
+Readline.  The text of the test extends to the end of the line;
+no characters are required to isolate it.
+
+ at table @code
+ at item mode
+The @code{mode=} form of the @code{$if} directive is used to test
+whether Readline is in @code{emacs} or @code{vi} mode.
+This may be used in conjunction
+with the @samp{set keymap} command, for instance, to set bindings in
+the @code{emacs-standard} and @code{emacs-ctlx} keymaps only if
+Readline is starting out in @code{emacs} mode.
+
+ at item term
+The @code{term=} form may be used to include terminal-specific
+key bindings, perhaps to bind the key sequences output by the
+terminal's function keys.  The word on the right side of the
+ at samp{=} is tested against both the full name of the terminal and
+the portion of the terminal name before the first @samp{-}.  This
+allows @code{sun} to match both @code{sun} and @code{sun-cmd},
+for instance.
+
+ at item application
+The @var{application} construct is used to include
+application-specific settings.  Each program using the Readline
+library sets the @var{application name}, and you can test for
+a particular value. 
+This could be used to bind key sequences to functions useful for
+a specific program.  For instance, the following command adds a
+key sequence that quotes the current or previous word in Bash:
+ at example
+$if Bash
+# Quote the current or previous word
+"\C-xq": "\eb\"\ef\""
+$endif
+ at end example
+ at end table
+
+ at item $endif
+This command, as seen in the previous example, terminates an
+ at code{$if} command.
+
+ at item $else
+Commands in this branch of the @code{$if} directive are executed if
+the test fails.
+
+ at item $include
+This directive takes a single filename as an argument and reads commands
+and bindings from that file.
+For example, the following directive reads from @file{/etc/inputrc}:
+ at example
+$include /etc/inputrc
+ at end example
+ at end table
+
+ at node Sample Init File
+ at subsection Sample Init File
+
+Here is an example of an @var{inputrc} file.  This illustrates key
+binding, variable assignment, and conditional syntax.
+
+ at example
+ at page
+# This file controls the behaviour of line input editing for
+# programs that use the GNU Readline library.  Existing
+# programs include FTP, Bash, and GDB.
+#
+# You can re-read the inputrc file with C-x C-r.
+# Lines beginning with '#' are comments.
+#
+# First, include any systemwide bindings and variable
+# assignments from /etc/Inputrc
+$include /etc/Inputrc
+
+#
+# Set various bindings for emacs mode.
+
+set editing-mode emacs 
+
+$if mode=emacs
+
+Meta-Control-h:	backward-kill-word	Text after the function name is ignored
+
+#
+# Arrow keys in keypad mode
+#
+#"\M-OD":        backward-char
+#"\M-OC":        forward-char
+#"\M-OA":        previous-history
+#"\M-OB":        next-history
+#
+# Arrow keys in ANSI mode
+#
+"\M-[D":        backward-char
+"\M-[C":        forward-char
+"\M-[A":        previous-history
+"\M-[B":        next-history
+#
+# Arrow keys in 8 bit keypad mode
+#
+#"\M-\C-OD":       backward-char
+#"\M-\C-OC":       forward-char
+#"\M-\C-OA":       previous-history
+#"\M-\C-OB":       next-history
+#
+# Arrow keys in 8 bit ANSI mode
+#
+#"\M-\C-[D":       backward-char
+#"\M-\C-[C":       forward-char
+#"\M-\C-[A":       previous-history
+#"\M-\C-[B":       next-history
+
+C-q: quoted-insert
+
+$endif
+
+# An old-style binding.  This happens to be the default.
+TAB: complete
+
+# Macros that are convenient for shell interaction
+$if Bash
+# edit the path
+"\C-xp": "PATH=$@{PATH@}\e\C-e\C-a\ef\C-f"
+# prepare to type a quoted word --
+# insert open and close double quotes
+# and move to just after the open quote
+"\C-x\"": "\"\"\C-b"
+# insert a backslash (testing backslash escapes
+# in sequences and macros)
+"\C-x\\": "\\"
+# Quote the current or previous word
+"\C-xq": "\eb\"\ef\""
+# Add a binding to refresh the line, which is unbound
+"\C-xr": redraw-current-line
+# Edit variable on current line.
+"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
+$endif
+
+# use a visible bell if one is available
+set bell-style visible
+
+# don't strip characters to 7 bits when reading
+set input-meta on
+
+# allow iso-latin1 characters to be inserted rather
+# than converted to prefix-meta sequences
+set convert-meta off
+
+# display characters with the eighth bit set directly
+# rather than as meta-prefixed characters
+set output-meta on
+
+# if there are more than 150 possible completions for
+# a word, ask the user if he wants to see all of them
+set completion-query-items 150
+
+# For FTP
+$if Ftp
+"\C-xg": "get \M-?"
+"\C-xt": "put \M-?"
+"\M-.": yank-last-arg
+$endif
+ at end example
+
+ at node Bindable Readline Commands
+ at section Bindable Readline Commands
+
+ at menu
+* Commands For Moving::		Moving about the line.
+* Commands For History::	Getting at previous lines.
+* Commands For Text::		Commands for changing text.
+* Commands For Killing::	Commands for killing and yanking.
+* Numeric Arguments::		Specifying numeric arguments, repeat counts.
+* Commands For Completion::	Getting Readline to do the typing for you.
+* Keyboard Macros::		Saving and re-executing typed characters
+* Miscellaneous Commands::	Other miscellaneous commands.
+ at end menu
+
+This section describes Readline commands that may be bound to key
+sequences.
+ at ifset BashFeatures
+You can list your key bindings by executing
+ at w{@code{bind -P}} or, for a more terse format, suitable for an
+ at var{inputrc} file, @w{@code{bind -p}}.  (@xref{Bash Builtins}.)
+ at end ifset
+Command names without an accompanying key sequence are unbound by default.
+
+In the following descriptions, @dfn{point} refers to the current cursor
+position, and @dfn{mark} refers to a cursor position saved by the
+ at code{set-mark} command.
+The text between the point and mark is referred to as the @dfn{region}.
+
+ at node Commands For Moving
+ at subsection Commands For Moving
+ at ftable @code
+ at item beginning-of-line (C-a)
+Move to the start of the current line.
+
+ at item end-of-line (C-e)
+Move to the end of the line.
+
+ at item forward-char (C-f)
+Move forward a character.
+
+ at item backward-char (C-b)
+Move back a character.
+
+ at item forward-word (M-f)
+Move forward to the end of the next word.
+Words are composed of letters and digits.
+
+ at item backward-word (M-b)
+Move back to the start of the current or previous word.
+Words are composed of letters and digits.
+
+ at ifset BashFeatures
+ at item shell-forward-word ()
+Move forward to the end of the next word.
+Words are delimited by non-quoted shell metacharacters.
+
+ at item shell-backward-word ()
+Move back to the start of the current or previous word.
+Words are delimited by non-quoted shell metacharacters.
+ at end ifset
+
+ at item clear-screen (C-l)
+Clear the screen and redraw the current line,
+leaving the current line at the top of the screen.
+
+ at item redraw-current-line ()
+Refresh the current line.  By default, this is unbound.
+
+ at end ftable
+
+ at node Commands For History
+ at subsection Commands For Manipulating The History
+
+ at ftable @code
+ at item accept-line (Newline or Return)
+ at ifset BashFeatures
+Accept the line regardless of where the cursor is.
+If this line is
+non-empty, add it to the history list according to the setting of
+the @env{HISTCONTROL} and @env{HISTIGNORE} variables.
+If this line is a modified history line, then restore the history line
+to its original state.
+ at end ifset
+ at ifclear BashFeatures
+Accept the line regardless of where the cursor is.
+If this line is
+non-empty, it may be added to the history list for future recall with
+ at code{add_history()}.
+If this line is a modified history line, the history line is restored
+to its original state.
+ at end ifclear
+
+ at item previous-history (C-p)
+Move `back' through the history list, fetching the previous command.
+
+ at item next-history (C-n)
+Move `forward' through the history list, fetching the next command.
+
+ at item beginning-of-history (M-<)
+Move to the first line in the history.
+
+ at item end-of-history (M->)
+Move to the end of the input history, i.e., the line currently
+being entered.
+
+ at item reverse-search-history (C-r)
+Search backward starting at the current line and moving `up' through
+the history as necessary.  This is an incremental search.
+
+ at item forward-search-history (C-s)
+Search forward starting at the current line and moving `down' through
+the the history as necessary.  This is an incremental search.
+
+ at item non-incremental-reverse-search-history (M-p)
+Search backward starting at the current line and moving `up'
+through the history as necessary using a non-incremental search
+for a string supplied by the user.
+
+ at item non-incremental-forward-search-history (M-n)
+Search forward starting at the current line and moving `down'
+through the the history as necessary using a non-incremental search
+for a string supplied by the user.
+
+ at item history-search-forward ()
+Search forward through the history for the string of characters
+between the start of the current line and the point.
+This is a non-incremental search.
+By default, this command is unbound.
+
+ at item history-search-backward ()
+Search backward through the history for the string of characters
+between the start of the current line and the point.  This
+is a non-incremental search.  By default, this command is unbound.
+
+ at item yank-nth-arg (M-C-y)
+Insert the first argument to the previous command (usually
+the second word on the previous line) at point.
+With an argument @var{n},
+insert the @var{n}th word from the previous command (the words
+in the previous command begin with word 0).  A negative argument
+inserts the @var{n}th word from the end of the previous command.
+Once the argument @var{n} is computed, the argument is extracted
+as if the @samp{!@var{n}} history expansion had been specified.
+
+ at item yank-last-arg (M-. or M-_)
+Insert last argument to the previous command (the last word of the
+previous history entry).
+With a numeric argument, behave exactly like @code{yank-nth-arg}.
+Successive calls to @code{yank-last-arg} move back through the history
+list, inserting the last word (or the word specified by the argument to
+the first call) of each line in turn.
+Any numeric argument supplied to these successive calls determines
+the direction to move through the history.  A negative argument switches
+the direction through the history (back or forward).
+The history expansion facilities are used to extract the last argument,
+as if the @samp{!$} history expansion had been specified.
+
+ at end ftable
+
+ at node Commands For Text
+ at subsection Commands For Changing Text
+
+ at ftable @code
+ at item delete-char (C-d)
+Delete the character at point.  If point is at the
+beginning of the line, there are no characters in the line, and
+the last character typed was not bound to @code{delete-char}, then
+return @sc{eof}.
+
+ at item backward-delete-char (Rubout)
+Delete the character behind the cursor.  A numeric argument means
+to kill the characters instead of deleting them.
+
+ at item forward-backward-delete-char ()
+Delete the character under the cursor, unless the cursor is at the
+end of the line, in which case the character behind the cursor is
+deleted.  By default, this is not bound to a key.
+
+ at item quoted-insert (C-q or C-v)
+Add the next character typed to the line verbatim.  This is
+how to insert key sequences like @kbd{C-q}, for example.
+
+ at ifclear BashFeatures
+ at item tab-insert (M- at key{TAB})
+Insert a tab character.
+ at end ifclear
+
+ at item self-insert (a, b, A, 1, !, @dots{})
+Insert yourself.
+
+ at item transpose-chars (C-t)
+Drag the character before the cursor forward over
+the character at the cursor, moving the
+cursor forward as well.  If the insertion point
+is at the end of the line, then this
+transposes the last two characters of the line.
+Negative arguments have no effect.
+
+ at item transpose-words (M-t)
+Drag the word before point past the word after point,
+moving point past that word as well.
+If the insertion point is at the end of the line, this transposes
+the last two words on the line.
+
+ at item upcase-word (M-u)
+Uppercase the current (or following) word.  With a negative argument,
+uppercase the previous word, but do not move the cursor.
+
+ at item downcase-word (M-l)
+Lowercase the current (or following) word.  With a negative argument,
+lowercase the previous word, but do not move the cursor.
+
+ at item capitalize-word (M-c)
+Capitalize the current (or following) word.  With a negative argument,
+capitalize the previous word, but do not move the cursor.
+
+ at item overwrite-mode ()
+Toggle overwrite mode.  With an explicit positive numeric argument,
+switches to overwrite mode.  With an explicit non-positive numeric
+argument, switches to insert mode.  This command affects only
+ at code{emacs} mode; @code{vi} mode does overwrite differently.
+Each call to @code{readline()} starts in insert mode.
+
+In overwrite mode, characters bound to @code{self-insert} replace
+the text at point rather than pushing the text to the right.
+Characters bound to @code{backward-delete-char} replace the character
+before point with a space.
+
+By default, this command is unbound.
+
+ at end ftable
+
+ at node Commands For Killing
+ at subsection Killing And Yanking
+
+ at ftable @code
+
+ at item kill-line (C-k)
+Kill the text from point to the end of the line.
+
+ at item backward-kill-line (C-x Rubout)
+Kill backward to the beginning of the line.
+
+ at item unix-line-discard (C-u)
+Kill backward from the cursor to the beginning of the current line.
+
+ at item kill-whole-line ()
+Kill all characters on the current line, no matter where point is.
+By default, this is unbound.
+
+ at item kill-word (M-d)
+Kill from point to the end of the current word, or if between
+words, to the end of the next word.
+Word boundaries are the same as @code{forward-word}.
+
+ at item backward-kill-word (M- at key{DEL})
+Kill the word behind point.
+Word boundaries are the same as @code{backward-word}.
+
+ at ifset BashFeatures
+ at item shell-kill-word ()
+Kill from point to the end of the current word, or if between
+words, to the end of the next word.
+Word boundaries are the same as @code{shell-forward-word}.
+
+ at item shell-backward-kill-word ()
+Kill the word behind point.
+Word boundaries are the same as @code{shell-backward-word}.
+ at end ifset
+
+ at item unix-word-rubout (C-w)
+Kill the word behind point, using white space as a word boundary.
+The killed text is saved on the kill-ring.
+
+ at item unix-filename-rubout ()
+Kill the word behind point, using white space and the slash character
+as the word boundaries.
+The killed text is saved on the kill-ring.
+
+ at item delete-horizontal-space ()
+Delete all spaces and tabs around point.  By default, this is unbound.
+
+ at item kill-region ()
+Kill the text in the current region.
+By default, this command is unbound.
+
+ at item copy-region-as-kill ()
+Copy the text in the region to the kill buffer, so it can be yanked
+right away.  By default, this command is unbound.
+
+ at item copy-backward-word ()
+Copy the word before point to the kill buffer.
+The word boundaries are the same as @code{backward-word}.
+By default, this command is unbound.
+
+ at item copy-forward-word ()
+Copy the word following point to the kill buffer.
+The word boundaries are the same as @code{forward-word}.
+By default, this command is unbound.
+
+ at item yank (C-y)
+Yank the top of the kill ring into the buffer at point.
+
+ at item yank-pop (M-y)
+Rotate the kill-ring, and yank the new top.  You can only do this if
+the prior command is @code{yank} or @code{yank-pop}.
+ at end ftable
+
+ at node Numeric Arguments
+ at subsection Specifying Numeric Arguments
+ at ftable @code
+
+ at item digit-argument (@kbd{M-0}, @kbd{M-1}, @dots{} @kbd{M--})
+Add this digit to the argument already accumulating, or start a new
+argument.  @kbd{M--} starts a negative argument.
+
+ at item universal-argument ()
+This is another way to specify an argument.
+If this command is followed by one or more digits, optionally with a
+leading minus sign, those digits define the argument.
+If the command is followed by digits, executing @code{universal-argument}
+again ends the numeric argument, but is otherwise ignored.
+As a special case, if this command is immediately followed by a
+character that is neither a digit or minus sign, the argument count
+for the next command is multiplied by four.
+The argument count is initially one, so executing this function the
+first time makes the argument count four, a second time makes the
+argument count sixteen, and so on.
+By default, this is not bound to a key.
+ at end ftable
+
+ at node Commands For Completion
+ at subsection Letting Readline Type For You
+
+ at ftable @code
+ at item complete (@key{TAB})
+Attempt to perform completion on the text before point.
+The actual completion performed is application-specific.
+ at ifset BashFeatures
+Bash attempts completion treating the text as a variable (if the
+text begins with @samp{$}), username (if the text begins with
+ at samp{~}), hostname (if the text begins with @samp{@@}), or
+command (including aliases and functions) in turn.  If none 
+of these produces a match, filename completion is attempted.
+ at end ifset
+ at ifclear BashFeatures
+The default is filename completion.
+ at end ifclear
+
+ at item possible-completions (M-?)
+List the possible completions of the text before point.
+When displaying completions, Readline sets the number of columns used
+for display to the value of @code{completion-display-width}, the value of
+the environment variable @env{COLUMNS}, or the screen width, in that order.
+
+ at item insert-completions (M-*)
+Insert all completions of the text before point that would have
+been generated by @code{possible-completions}.
+
+ at item menu-complete ()
+Similar to @code{complete}, but replaces the word to be completed
+with a single match from the list of possible completions.
+Repeated execution of @code{menu-complete} steps through the list
+of possible completions, inserting each match in turn.
+At the end of the list of completions, the bell is rung
+(subject to the setting of @code{bell-style})
+and the original text is restored.
+An argument of @var{n} moves @var{n} positions forward in the list
+of matches; a negative argument may be used to move backward
+through the list.
+This command is intended to be bound to @key{TAB}, but is unbound
+by default.
+
+ at item menu-complete-backward ()
+Identical to @code{menu-complete}, but moves backward through the list
+of possible completions, as if @code{menu-complete} had been given a
+negative argument.
+
+ at item delete-char-or-list ()
+Deletes the character under the cursor if not at the beginning or
+end of the line (like @code{delete-char}).
+If at the end of the line, behaves identically to
+ at code{possible-completions}.
+This command is unbound by default.
+
+ at ifset BashFeatures
+ at item complete-filename (M-/)
+Attempt filename completion on the text before point.
+
+ at item possible-filename-completions (C-x /)
+List the possible completions of the text before point,
+treating it as a filename.
+
+ at item complete-username (M-~)
+Attempt completion on the text before point, treating
+it as a username.
+
+ at item possible-username-completions (C-x ~)
+List the possible completions of the text before point,
+treating it as a username.
+
+ at item complete-variable (M-$)
+Attempt completion on the text before point, treating
+it as a shell variable.
+
+ at item possible-variable-completions (C-x $)
+List the possible completions of the text before point,
+treating it as a shell variable.
+
+ at item complete-hostname (M-@@)
+Attempt completion on the text before point, treating
+it as a hostname.
+
+ at item possible-hostname-completions (C-x @@)
+List the possible completions of the text before point,
+treating it as a hostname.
+
+ at item complete-command (M-!)
+Attempt completion on the text before point, treating
+it as a command name.  Command completion attempts to
+match the text against aliases, reserved words, shell
+functions, shell builtins, and finally executable filenames,
+in that order.
+
+ at item possible-command-completions (C-x !)
+List the possible completions of the text before point,
+treating it as a command name.
+
+ at item dynamic-complete-history (M- at key{TAB})
+Attempt completion on the text before point, comparing
+the text against lines from the history list for possible
+completion matches.
+
+ at item dabbrev-expand ()
+Attempt menu completion on the text before point, comparing
+the text against lines from the history list for possible
+completion matches.
+
+ at item complete-into-braces (M-@{)
+Perform filename completion and insert the list of possible completions
+enclosed within braces so the list is available to the shell
+(@pxref{Brace Expansion}).
+
+ at end ifset
+ at end ftable
+
+ at node Keyboard Macros
+ at subsection Keyboard Macros
+ at ftable @code
+
+ at item start-kbd-macro (C-x ()
+Begin saving the characters typed into the current keyboard macro.
+
+ at item end-kbd-macro (C-x ))
+Stop saving the characters typed into the current keyboard macro
+and save the definition.
+
+ at item call-last-kbd-macro (C-x e)
+Re-execute the last keyboard macro defined, by making the characters
+in the macro appear as if typed at the keyboard.
+
+ at end ftable
+
+ at node Miscellaneous Commands
+ at subsection Some Miscellaneous Commands
+ at ftable @code
+
+ at item re-read-init-file (C-x C-r)
+Read in the contents of the @var{inputrc} file, and incorporate
+any bindings or variable assignments found there.
+
+ at item abort (C-g)
+Abort the current editing command and
+ring the terminal's bell (subject to the setting of
+ at code{bell-style}).
+
+ at item do-uppercase-version (M-a, M-b, M- at var{x}, @dots{})
+If the metafied character @var{x} is lowercase, run the command
+that is bound to the corresponding uppercase character.
+
+ at item prefix-meta (@key{ESC})
+Metafy the next character typed.  This is for keyboards
+without a meta key.  Typing @samp{@key{ESC} f} is equivalent to typing
+ at kbd{M-f}.
+
+ at item undo (C-_ or C-x C-u)
+Incremental undo, separately remembered for each line.
+
+ at item revert-line (M-r)
+Undo all changes made to this line.  This is like executing the @code{undo}
+command enough times to get back to the beginning.
+
+ at ifset BashFeatures
+ at item tilde-expand (M-&)
+ at end ifset
+ at ifclear BashFeatures
+ at item tilde-expand (M-~)
+ at end ifclear
+Perform tilde expansion on the current word.
+
+ at item set-mark (C-@@)
+Set the mark to the point.  If a
+numeric argument is supplied, the mark is set to that position.
+
+ at item exchange-point-and-mark (C-x C-x)
+Swap the point with the mark.  The current cursor position is set to
+the saved position, and the old cursor position is saved as the mark.
+
+ at item character-search (C-])
+A character is read and point is moved to the next occurrence of that
+character.  A negative count searches for previous occurrences.
+
+ at item character-search-backward (M-C-])
+A character is read and point is moved to the previous occurrence
+of that character.  A negative count searches for subsequent
+occurrences.
+
+ at item skip-csi-sequence ()
+Read enough characters to consume a multi-key sequence such as those
+defined for keys like Home and End.  Such sequences begin with a
+Control Sequence Indicator (CSI), usually ESC-[.  If this sequence is
+bound to "\e[", keys producing such sequences will have no effect
+unless explicitly bound to a readline command, instead of inserting
+stray characters into the editing buffer.  This is unbound by default,
+but usually bound to ESC-[.
+
+ at item insert-comment (M-#)
+Without a numeric argument, the value of the @code{comment-begin}
+variable is inserted at the beginning of the current line.
+If a numeric argument is supplied, this command acts as a toggle:  if
+the characters at the beginning of the line do not match the value
+of @code{comment-begin}, the value is inserted, otherwise
+the characters in @code{comment-begin} are deleted from the beginning of
+the line.
+In either case, the line is accepted as if a newline had been typed.
+ at ifset BashFeatures
+The default value of @code{comment-begin} causes this command
+to make the current line a shell comment.
+If a numeric argument causes the comment character to be removed, the line
+will be executed by the shell.
+ at end ifset
+
+ at item dump-functions ()
+Print all of the functions and their key bindings to the
+Readline output stream.  If a numeric argument is supplied,
+the output is formatted in such a way that it can be made part
+of an @var{inputrc} file.  This command is unbound by default.
+
+ at item dump-variables ()
+Print all of the settable variables and their values to the
+Readline output stream.  If a numeric argument is supplied,
+the output is formatted in such a way that it can be made part
+of an @var{inputrc} file.  This command is unbound by default.
+
+ at item dump-macros ()
+Print all of the Readline key sequences bound to macros and the
+strings they output.  If a numeric argument is supplied,
+the output is formatted in such a way that it can be made part
+of an @var{inputrc} file.  This command is unbound by default.
+
+ at ifset BashFeatures
+ at item glob-complete-word (M-g)
+The word before point is treated as a pattern for pathname expansion,
+with an asterisk implicitly appended.  This pattern is used to
+generate a list of matching file names for possible completions.
+
+ at item glob-expand-word (C-x *)
+The word before point is treated as a pattern for pathname expansion,
+and the list of matching file names is inserted, replacing the word.
+If a numeric argument is supplied, a @samp{*} is appended before
+pathname expansion.
+
+ at item glob-list-expansions (C-x g)
+The list of expansions that would have been generated by
+ at code{glob-expand-word} is displayed, and the line is redrawn.
+If a numeric argument is supplied, a @samp{*} is appended before
+pathname expansion.
+
+ at item display-shell-version (C-x C-v)
+Display version information about the current instance of Bash.
+
+ at item shell-expand-line (M-C-e)
+Expand the line as the shell does.
+This performs alias and history expansion as well as all of the shell
+word expansions (@pxref{Shell Expansions}).
+
+ at item history-expand-line (M-^)
+Perform history expansion on the current line.
+
+ at item magic-space ()
+Perform history expansion on the current line and insert a space
+(@pxref{History Interaction}).
+
+ at item alias-expand-line ()
+Perform alias expansion on the current line (@pxref{Aliases}).
+
+ at item history-and-alias-expand-line ()
+Perform history and alias expansion on the current line.
+
+ at item insert-last-argument (M-. or M-_)
+A synonym for @code{yank-last-arg}.
+
+ at item operate-and-get-next (C-o)
+Accept the current line for execution and fetch the next line
+relative to the current line from the history for editing.  Any
+argument is ignored.
+
+ at item edit-and-execute-command (C-xC-e)
+Invoke an editor on the current command line, and execute the result as shell
+commands.
+Bash attempts to invoke
+ at code{$VISUAL}, @code{$EDITOR}, and @code{emacs}
+as the editor, in that order.
+
+ at end ifset
+
+ at ifclear BashFeatures
+ at item emacs-editing-mode (C-e)
+When in @code{vi} command mode, this causes a switch to @code{emacs}
+editing mode.
+
+ at item vi-editing-mode (M-C-j)
+When in @code{emacs} editing mode, this causes a switch to @code{vi}
+editing mode.
+
+ at end ifclear
+
+ at end ftable
+
+ at node Readline vi Mode
+ at section Readline vi Mode
+
+While the Readline library does not have a full set of @code{vi}
+editing functions, it does contain enough to allow simple editing
+of the line.  The Readline @code{vi} mode behaves as specified in
+the @sc{posix} standard.
+
+ at ifset BashFeatures
+In order to switch interactively between @code{emacs} and @code{vi}
+editing modes, use the @samp{set -o emacs} and @samp{set -o vi}
+commands (@pxref{The Set Builtin}).
+ at end ifset
+ at ifclear BashFeatures
+In order to switch interactively between @code{emacs} and @code{vi}
+editing modes, use the command @kbd{M-C-j} (bound to emacs-editing-mode
+when in @code{vi} mode and to vi-editing-mode in @code{emacs} mode).
+ at end ifclear
+The Readline default is @code{emacs} mode.
+
+When you enter a line in @code{vi} mode, you are already placed in
+`insertion' mode, as if you had typed an @samp{i}.  Pressing @key{ESC}
+switches you into `command' mode, where you can edit the text of the
+line with the standard @code{vi} movement keys, move to previous
+history lines with @samp{k} and subsequent lines with @samp{j}, and
+so forth.
+
+ at ifset BashFeatures
+ at node Programmable Completion
+ at section Programmable Completion
+ at cindex programmable completion
+
+When word completion is attempted for an argument to a command for
+which a completion specification (a @var{compspec}) has been defined
+using the @code{complete} builtin (@pxref{Programmable Completion Builtins}),
+the programmable completion facilities are invoked. 
+
+First, the command name is identified.
+If a compspec has been defined for that command, the
+compspec is used to generate the list of possible completions for the word.
+If the command word is the empty string (completion attempted at the
+beginning of an empty line), any compspec defined with
+the @option{-E} option to @code{complete} is used.
+If the command word is a full pathname, a compspec for the full
+pathname is searched for first.
+If no compspec is found for the full pathname, an attempt is made to
+find a compspec for the portion following the final slash.
+If those searches do not result in a compspec, any compspec defined with
+the @option{-D} option to @code{complete} is used as the default.
+
+Once a compspec has been found, it is used to generate the list of
+matching words.
+If a compspec is not found, the default Bash completion
+described above (@pxref{Commands For Completion}) is performed.
+
+First, the actions specified by the compspec are used.
+Only matches which are prefixed by the word being completed are
+returned.
+When the @option{-f} or @option{-d} option is used for filename or
+directory name completion, the shell variable @env{FIGNORE} is
+used to filter the matches.
+ at xref{Bash Variables}, for a description of @env{FIGNORE}.
+
+Any completions specified by a filename expansion pattern to the
+ at option{-G} option are generated next.
+The words generated by the pattern need not match the word being completed.
+The @env{GLOBIGNORE} shell variable is not used to filter the matches,
+but the @env{FIGNORE} shell variable is used.
+
+Next, the string specified as the argument to the @option{-W} option
+is considered.
+The string is first split using the characters in the @env{IFS}
+special variable as delimiters.
+Shell quoting is honored.
+Each word is then expanded using
+brace expansion, tilde expansion, parameter and variable expansion,
+command substitution, and arithmetic expansion,
+as described above (@pxref{Shell Expansions}).
+The results are split using the rules described above
+(@pxref{Word Splitting}).
+The results of the expansion are prefix-matched against the word being
+completed, and the matching words become the possible completions.
+
+After these matches have been generated, any shell function or command
+specified with the @option{-F} and @option{-C} options is invoked.
+When the command or function is invoked, the @env{COMP_LINE},
+ at env{COMP_POINT}, @env{COMP_KEY}, and @env{COMP_TYPE} variables are
+assigned values as described above (@pxref{Bash Variables}).
+If a shell function is being invoked, the @env{COMP_WORDS} and
+ at env{COMP_CWORD} variables are also set.
+When the function or command is invoked, the first argument is the
+name of the command whose arguments are being completed, the
+second argument is the word being completed, and the third argument
+is the word preceding the word being completed on the current command line.
+No filtering of the generated completions against the word being completed
+is performed; the function or command has complete freedom in generating
+the matches.
+
+Any function specified with @option{-F} is invoked first.
+The function may use any of the shell facilities, including the
+ at code{compgen} and @code{compopt} builtins described below
+(@pxref{Programmable Completion Builtins}), to generate the matches.
+It must put the possible completions in the @env{COMPREPLY} array
+variable.
+
+Next, any command specified with the @option{-C} option is invoked
+in an environment equivalent to command substitution.
+It should print a list of completions, one per line, to
+the standard output.
+Backslash may be used to escape a newline, if necessary.
+
+After all of the possible completions are generated, any filter
+specified with the @option{-X} option is applied to the list.
+The filter is a pattern as used for pathname expansion; a @samp{&}
+in the pattern is replaced with the text of the word being completed.
+A literal @samp{&} may be escaped with a backslash; the backslash
+is removed before attempting a match.
+Any completion that matches the pattern will be removed from the list.
+A leading @samp{!} negates the pattern; in this case any completion
+not matching the pattern will be removed.
+
+Finally, any prefix and suffix specified with the @option{-P} and @option{-S}
+options are added to each member of the completion list, and the result is
+returned to the Readline completion code as the list of possible
+completions.
+
+If the previously-applied actions do not generate any matches, and the
+ at option{-o dirnames} option was supplied to @code{complete} when the
+compspec was defined, directory name completion is attempted. 
+
+If the @option{-o plusdirs} option was supplied to @code{complete} when
+the compspec was defined, directory name completion is attempted and any
+matches are added to the results of the other actions.
+
+By default, if a compspec is found, whatever it generates is returned to
+the completion code as the full set of possible completions.
+The default Bash completions are not attempted, and the Readline default
+of filename completion is disabled.
+If the @option{-o bashdefault} option was supplied to @code{complete} when
+the compspec was defined, the default Bash completions are attempted
+if the compspec generates no matches.
+If the @option{-o default} option was supplied to @code{complete} when the
+compspec was defined, Readline's default completion will be performed
+if the compspec (and, if attempted, the default Bash completions)
+generate no matches.
+
+When a compspec indicates that directory name completion is desired,
+the programmable completion functions force Readline to append a slash
+to completed names which are symbolic links to directories, subject to
+the value of the @var{mark-directories} Readline variable, regardless
+of the setting of the @var{mark-symlinked-directories} Readline variable.
+
+There is some support for dynamically modifying completions.  This is
+most useful when used in combination with a default completion specified
+with @option{-D}.  It's possible for shell functions executed as completion
+handlers to indicate that completion should be retried by returning an
+exit status of 124.  If a shell function returns 124, and changes
+the compspec associated with the command on which completion is being
+attempted (supplied as the first argument when the function is executed),
+programmable completion restarts from the beginning, with an
+attempt to find a new compspec for that command.  This allows a set of
+completions to be built dynamically as completion is attempted, rather than
+being loaded all at once.
+
+For instance, assuming that there is a library of compspecs, each kept in a
+file corresponding to the name of the command, the following default
+completion function would load completions dynamically:
+
+ at example
+_completion_loader()
+@{
+	. "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124
+@}
+complete -D -F _completion_loader
+ at end example
+
+ at node Programmable Completion Builtins
+ at section Programmable Completion Builtins
+ at cindex completion builtins
+
+Two builtin commands are available to manipulate the programmable completion
+facilities.
+
+ at table @code
+ at item compgen
+ at btindex compgen
+ at example
+ at code{compgen [@var{option}] [@var{word}]}
+ at end example
+
+Generate possible completion matches for @var{word} according to
+the @var{option}s, which may be any option accepted by the
+ at code{complete}
+builtin with the exception of @option{-p} and @option{-r}, and write
+the matches to the standard output.
+When using the @option{-F} or @option{-C} options, the various shell variables
+set by the programmable completion facilities, while available, will not
+have useful values.
+
+The matches will be generated in the same way as if the programmable
+completion code had generated them directly from a completion specification
+with the same flags.
+If @var{word} is specified, only those completions matching @var{word}
+will be displayed.
+
+The return value is true unless an invalid option is supplied, or no
+matches were generated.
+
+ at item complete
+ at btindex complete
+ at example
+ at code{complete [-abcdefgjksuv] [-o @var{comp-option}] [-DE] [-A @var{action}] [-G @var{globpat}] [-W @var{wordlist}]
+[-F @var{function}] [-C @var{command}] [-X @var{filterpat}]
+[-P @var{prefix}] [-S @var{suffix}] @var{name} [@var{name} @dots{}]}
+ at code{complete -pr [-DE] [@var{name} @dots{}]}
+ at end example
+
+Specify how arguments to each @var{name} should be completed.
+If the @option{-p} option is supplied, or if no options are supplied, existing
+completion specifications are printed in a way that allows them to be
+reused as input.
+The @option{-r} option removes a completion specification for
+each @var{name}, or, if no @var{name}s are supplied, all
+completion specifications.
+The @option{-D} option indicates that the remaining options and actions should
+apply to the ``default'' command completion; that is, completion attempted
+on a command for which no completion has previously been defined.
+The @option{-E} option indicates that the remaining options and actions should
+apply to ``empty'' command completion; that is, completion attempted on a 
+blank line.
+
+The process of applying these completion specifications when word completion
+is attempted is described above (@pxref{Programmable Completion}).  The
+ at option{-D} option takes precedence over @option{-E}.
+
+Other options, if specified, have the following meanings.
+The arguments to the @option{-G}, @option{-W}, and @option{-X} options
+(and, if necessary, the @option{-P} and @option{-S} options)
+should be quoted to protect them from expansion before the
+ at code{complete} builtin is invoked.
+
+
+ at table @code
+ at item -o @var{comp-option}
+The @var{comp-option} controls several aspects of the compspec's behavior
+beyond the simple generation of completions.
+ at var{comp-option} may be one of: 
+
+ at table @code
+
+ at item bashdefault
+Perform the rest of the default Bash completions if the compspec
+generates no matches.
+
+ at item default
+Use Readline's default filename completion if the compspec generates
+no matches.
+
+ at item dirnames
+Perform directory name completion if the compspec generates no matches.
+
+ at item filenames
+Tell Readline that the compspec generates filenames, so it can perform any
+filename-specific processing (like adding a slash to directory names
+quoting special characters, or suppressing trailing spaces).
+This option is intended to be used with shell functions specified
+with @option{-F}.
+
+ at item nospace
+Tell Readline not to append a space (the default) to words completed at
+the end of the line.
+
+ at item plusdirs
+After any matches defined by the compspec are generated, 
+directory name completion is attempted and any
+matches are added to the results of the other actions.
+
+ at end table
+
+ at item -A @var{action}
+The @var{action} may be one of the following to generate a list of possible
+completions:
+
+ at table @code
+ at item alias
+Alias names.  May also be specified as @option{-a}.
+
+ at item arrayvar
+Array variable names.
+
+ at item binding
+Readline key binding names (@pxref{Bindable Readline Commands}).
+
+ at item builtin
+Names of shell builtin commands.  May also be specified as @option{-b}.
+
+ at item command
+Command names.  May also be specified as @option{-c}.
+
+ at item directory
+Directory names.  May also be specified as @option{-d}.
+
+ at item disabled
+Names of disabled shell builtins.
+
+ at item enabled
+Names of enabled shell builtins.
+
+ at item export
+Names of exported shell variables.  May also be specified as @option{-e}.
+
+ at item file
+File names.  May also be specified as @option{-f}.
+
+ at item function
+Names of shell functions.
+
+ at item group
+Group names.  May also be specified as @option{-g}.
+
+ at item helptopic
+Help topics as accepted by the @code{help} builtin (@pxref{Bash Builtins}).
+
+ at item hostname
+Hostnames, as taken from the file specified by the
+ at env{HOSTFILE} shell variable (@pxref{Bash Variables}).
+
+ at item job
+Job names, if job control is active.  May also be specified as @option{-j}.
+
+ at item keyword
+Shell reserved words.  May also be specified as @option{-k}.
+
+ at item running
+Names of running jobs, if job control is active.
+
+ at item service
+Service names.  May also be specified as @option{-s}.
+
+ at item setopt
+Valid arguments for the @option{-o} option to the @code{set} builtin
+(@pxref{The Set Builtin}).
+
+ at item shopt
+Shell option names as accepted by the @code{shopt} builtin
+(@pxref{Bash Builtins}).
+
+ at item signal
+Signal names.
+
+ at item stopped
+Names of stopped jobs, if job control is active.
+
+ at item user
+User names.  May also be specified as @option{-u}.
+
+ at item variable
+Names of all shell variables.  May also be specified as @option{-v}.
+ at end table
+
+ at item -C @var{command}
+ at var{command} is executed in a subshell environment, and its output is
+used as the possible completions.
+
+ at item -F @var{function}
+The shell function @var{function} is executed in the current shell
+environment.
+When it finishes, the possible completions are retrieved from the value
+of the @env{COMPREPLY} array variable.
+
+ at item -G @var{globpat}
+The filename expansion pattern @var{globpat} is expanded to generate
+the possible completions.
+
+ at item -P @var{prefix}
+ at var{prefix} is added at the beginning of each possible completion
+after all other options have been applied.
+
+ at item -S @var{suffix}
+ at var{suffix} is appended to each possible completion
+after all other options have been applied.
+
+ at item -W @var{wordlist}
+The @var{wordlist} is split using the characters in the
+ at env{IFS} special variable as delimiters, and each resultant word
+is expanded.
+The possible completions are the members of the resultant list which
+match the word being completed.
+
+ at item -X @var{filterpat}
+ at var{filterpat} is a pattern as used for filename expansion.
+It is applied to the list of possible completions generated by the
+preceding options and arguments, and each completion matching
+ at var{filterpat} is removed from the list.
+A leading @samp{!} in @var{filterpat} negates the pattern; in this
+case, any completion not matching @var{filterpat} is removed.
+ at end table
+
+The return value is true unless an invalid option is supplied, an option
+other than @option{-p} or @option{-r} is supplied without a @var{name}
+argument, an attempt is made to remove a completion specification for
+a @var{name} for which no specification exists, or
+an error occurs adding a completion specification.
+
+ at item compopt
+ at btindex compopt
+ at example
+ at code{compopt} [-o @var{option}] [-DE] [+o @var{option}] [@var{name}]
+ at end example
+Modify completion options for each @var{name} according to the
+ at var{option}s, or for the currently-executing completion if no @var{name}s
+are supplied.
+If no @var{option}s are given, display the completion options for each
+ at var{name} or the current completion.
+The possible values of @var{option} are those valid for the @code{complete}
+builtin described above.
+The @option{-D} option indicates that the remaining options should
+apply to the ``default'' command completion; that is, completion attempted
+on a command for which no completion has previously been defined.
+The @option{-E} option indicates that the remaining options should
+apply to ``empty'' command completion; that is, completion attempted on a 
+blank line.
+
+The @option{-D} option takes precedence over @option{-E}.
+
+The return value is true unless an invalid option is supplied, an attempt
+is made to modify the options for a @var{name} for which no completion
+specification exists, or an output error occurs.
+
+ at end table
+
+ at end ifset
diff --git a/readline/doc/rluserman.texi b/readline/doc/rluserman.texi
index 8b13789..3d54520 100644
--- a/readline/doc/rluserman.texi
+++ b/readline/doc/rluserman.texi
@@ -1 +1,83 @@
+\input texinfo    @c -*-texinfo-*-
+ at comment %**start of header (This is for running Texinfo on a region.)
+ at setfilename rluserman.info
+ at settitle GNU Readline Library
+ at comment %**end of header (This is for running Texinfo on a region.)
 
+ at include version.texi
+
+ at copying
+This manual describes the end user interface of the GNU Readline Library
+(version @value{VERSION}, @value{UPDATED}), a library which aids in the
+consistency of user interface across discrete programs which provide
+a command line interface.
+
+Copyright @copyright{} 1988--2011 Free Software Foundation, Inc.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+ at quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU Manual'',
+and with the Back-Cover Texts as in (a) below.  A copy of the license is
+included in the section entitled ``GNU Free Documentation License''.
+
+(a) The FSF's Back-Cover Text is: You are free to copy and modify
+this GNU manual.  Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom.''
+
+ at end quotation
+ at end copying
+
+ at dircategory Libraries
+ at direntry
+* RLuserman: (rluserman).       The GNU readline library User's Manual.
+ at end direntry
+
+ at titlepage
+ at title GNU Readline Library User Interface
+ at subtitle Edition @value{EDITION}, for @code{Readline Library} Version @value{VERSION}.
+ at subtitle @value{UPDATED-MONTH}
+ at author Chet Ramey, Case Western Reserve University
+ at author Brian Fox, Free Software Foundation
+
+ at page
+ at vskip 0pt plus 1filll
+ at insertcopying
+
+ at sp 1
+Published by the Free Software Foundation @*
+59 Temple Place, Suite 330, @*
+Boston, MA 02111-1307 @*
+USA @*
+
+ at end titlepage
+
+ at contents
+
+ at ifnottex
+ at node Top
+ at top GNU Readline Library
+
+This document describes the end user interface of the GNU Readline Library,
+a utility which aids in the consistency of user interface across discrete
+programs which provide a command line interface.
+
+ at menu
+* Command Line Editing::	   GNU Readline User's Manual.
+* GNU Free Documentation License::	License for copying this manual.
+ at end menu
+ at end ifnottex
+
+ at include rluser.texi
+
+ at node GNU Free Documentation License
+ at appendix GNU Free Documentation License
+
+ at include fdl.texi
+
+ at bye
diff --git a/readline/doc/version.texi b/readline/doc/version.texi
index 8b13789..3ee1c10 100644
--- a/readline/doc/version.texi
+++ b/readline/doc/version.texi
@@ -1 +1,10 @@
+ at ignore
+Copyright (C) 1988-2011 Free Software Foundation, Inc. 
+ at end ignore
 
+ at set EDITION 6.2
+ at set VERSION 6.2
+ at set UPDATED September 6 2010
+ at set UPDATED-MONTH September 2010
+
+ at set LASTCHANGE Mon Sep  6 22:07:10 EDT 2010
diff --git a/readline/signals.c b/readline/signals.c
index 6a68d78..f119691 100644
--- a/readline/signals.c
+++ b/readline/signals.c
@@ -580,6 +580,7 @@ _rl_release_sigint ()
   sigint_blocked = 0;
 }
 
+#ifdef SIGWINCH
 /* Cause SIGWINCH to not be delivered until the corresponding call to
    release_sigwinch(). */
 void
@@ -627,6 +628,7 @@ _rl_release_sigwinch ()
 
   sigwinch_blocked = 0;
 }
+#endif /* SIGWINCH */
 
 /* **************************************************************** */
 /*								    */
diff --git a/sim/ChangeLog b/sim/ChangeLog
index ea6f3bc..638a5ce 100644
--- a/sim/ChangeLog
+++ b/sim/ChangeLog
@@ -1,3 +1,11 @@
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* configure: Regenerate.
+
+2012-06-06  Michael Eager  <eager at eagercon.com>
+
+	* microblaze/interp.c (config.h): Add #include.
+
 2011-11-29  Joel Brobecker  <brobecker at adacore.com>
 
 	* MAINTAINERS (Global Maintainers): New section.  Add Mike
diff --git a/sim/arm/ChangeLog b/sim/arm/ChangeLog
index d312bd5..7757c8c 100644
--- a/sim/arm/ChangeLog
+++ b/sim/arm/ChangeLog
@@ -1,3 +1,27 @@
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-06-13  Nick Clifton  <nickc at redhat.com>
+
+	* wrapper.c (sim_create_inferior): Treat WMMX2 binaries as iWMMXt
+	binaries (for now).
+
+2012-05-24  Pedro Alves  <palves at redhat.com>
+
+	PR gdb/7205
+
+        Replace TARGET_SIGNAL_ with GDB_SIGNAL_ throughout.
+
+2012-05-18  Nick Clifton  <nickc at redhat.com>
+
+	PR 14072
+	* wrapper.c: Include config.h before system header files.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* aclocal.m4: New file.
diff --git a/sim/arm/aclocal.m4 b/sim/arm/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/arm/aclocal.m4
+++ b/sim/arm/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/arm/config.in b/sim/arm/config.in
index f29d045..0db6f1e 100644
--- a/sim/arm/config.in
+++ b/sim/arm/config.in
@@ -73,6 +73,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -102,3 +105,35 @@
 
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/arm/configure b/sim/arm/configure
index e5f8e1f..48cfa9a 100755
--- a/sim/arm/configure
+++ b/sim/arm/configure
@@ -602,9 +602,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -623,6 +620,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -630,6 +628,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -2433,9 +2434,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3362,120 +3363,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3876,6 +3763,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3884,6 +3946,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -3989,6 +4052,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4565,7 +4639,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
diff --git a/sim/arm/wrapper.c b/sim/arm/wrapper.c
index 3f185f0..f4348b9 100644
--- a/sim/arm/wrapper.c
+++ b/sim/arm/wrapper.c
@@ -21,6 +21,7 @@
    run.c and gdb (when the simulator is linked with gdb).
    All simulator interaction should go through this file.  */
 
+#include "config.h"
 #include <stdio.h>
 #include <stdarg.h>
 #include <string.h>
@@ -269,6 +270,7 @@ sim_create_inferior (sd, abfd, argv, env)
       ARMul_SelectProcessor (state, ARM_v5_Prop | ARM_v5e_Prop | ARM_XScale_Prop | ARM_v6_Prop);
       break;
 
+    case bfd_mach_arm_iWMMXt2:
     case bfd_mach_arm_iWMMXt:
       {
 	extern int SWI_vector_installed;
@@ -904,7 +906,7 @@ sim_stop_reason (sd, reason, sigrc)
   if (stop_simulator)
     {
       *reason = sim_stopped;
-      *sigrc = TARGET_SIGNAL_INT;
+      *sigrc = GDB_SIGNAL_INT;
     }
   else if (state->EndCondition == 0)
     {
@@ -915,10 +917,10 @@ sim_stop_reason (sd, reason, sigrc)
     {
       *reason = sim_stopped;
       if (state->EndCondition == RDIError_BreakpointReached)
-	*sigrc = TARGET_SIGNAL_TRAP;
+	*sigrc = GDB_SIGNAL_TRAP;
       else if (   state->EndCondition == RDIError_DataAbort
 	       || state->EndCondition == RDIError_AddressException)
-	*sigrc = TARGET_SIGNAL_BUS;
+	*sigrc = GDB_SIGNAL_BUS;
       else
 	*sigrc = 0;
     }
diff --git a/sim/avr/ChangeLog b/sim/avr/ChangeLog
index 331ee62..15c2876 100644
--- a/sim/avr/ChangeLog
+++ b/sim/avr/ChangeLog
@@ -1,3 +1,17 @@
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-05-24  Pedro Alves  <palves at redhat.com>
+
+	PR gdb/7205
+
+        Replace TARGET_SIGNAL_ with GDB_SIGNAL_ throughout.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* aclocal.m4: New file.
diff --git a/sim/avr/aclocal.m4 b/sim/avr/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/avr/aclocal.m4
+++ b/sim/avr/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/avr/config.in b/sim/avr/config.in
index f29d045..0db6f1e 100644
--- a/sim/avr/config.in
+++ b/sim/avr/config.in
@@ -73,6 +73,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -102,3 +105,35 @@
 
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/avr/configure b/sim/avr/configure
index cafc883..a6af470 100755
--- a/sim/avr/configure
+++ b/sim/avr/configure
@@ -601,9 +601,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -622,6 +619,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -629,6 +627,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -2432,9 +2433,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3361,120 +3362,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3875,6 +3762,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3883,6 +3945,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -3988,6 +4051,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4564,7 +4638,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
diff --git a/sim/avr/interp.c b/sim/avr/interp.c
index 8b61af8..941aea7 100644
--- a/sim/avr/interp.c
+++ b/sim/avr/interp.c
@@ -870,7 +870,7 @@ sim_resume (SIM_DESC sd, int step, int signal)
   if (step)
     {
       cpu_exception = sim_stopped;
-      cpu_signal = TARGET_SIGNAL_TRAP;
+      cpu_signal = GDB_SIGNAL_TRAP;
     }
   else
     cpu_exception = sim_running;
@@ -1000,7 +1000,7 @@ sim_resume (SIM_DESC sd, int step, int signal)
 	case OP_break:
 	  /* Stop on this address.  */
 	  cpu_exception = sim_stopped;
-	  cpu_signal = TARGET_SIGNAL_TRAP;
+	  cpu_signal = GDB_SIGNAL_TRAP;
 	  pc = ipc;
 	  break;
 
@@ -1763,7 +1763,7 @@ int
 sim_stop (SIM_DESC sd)
 {
   cpu_exception = sim_stopped;
-  cpu_signal = TARGET_SIGNAL_INT;
+  cpu_signal = GDB_SIGNAL_INT;
   return 1;
 }
 
diff --git a/sim/bfin/ChangeLog b/sim/bfin/ChangeLog
index c79accf..8283086 100644
--- a/sim/bfin/ChangeLog
+++ b/sim/bfin/ChangeLog
@@ -1,4 +1,145 @@
-2012-04-12  Mike Frysinger  <vapier at gentoo.org>
+2012-07-31  Mike Frysinger  <vapier at gentoo.org>
+
+	* machs.c (bf54x_roms): Pass 0x1000 to alias field of BFROM, and
+	0x10000 to the alias field of BFROMA.
+	(bf561_roms): Pass 0x1000 to alias field of BFROM.
+	(bf59x_roms): Pass 0x10000 to alias field of BFROMA.
+
+2012-07-31  Mike Frysinger  <vapier at gentoo.org>
+
+	* machs.c (bfin_reg_fetch): Change return 0 to return -1, and
+	return -1 to return 4.
+	(bfin_reg_store): Likewise.
+
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-04-09  Mike Frysinger  <vapier at gentoo.org>
+
+	* configure.ac (SIM_AC_OPTION_HARDWARE): Add bfin_pint.
+	* configure: Regenerate.
+	* dv-bfin_pint.c, dv-bfin_pint.h: New device model.
+	* machs.c (bf542_dev): Add PINT register blocks.
+	(bf544_dev, bf547_dev): Likewise.
+	(PINT_PIQS): Define.
+	(bf54x_port): Add pint/gpio routing.
+	* machs.h (BFIN_MMR_PINT_SIZE): Define.
+
+2012-04-09  Mike Frysinger  <vapier at gentoo.org>
+
+	* configure.ac (SIM_AC_OPTION_HARDWARE): Add bfin_gpio2.
+	* configure: Regenerate.
+	* dv-bfin_gpio2.c, dv-bfin_gpio2.h: New device model.
+	* machs.c (bf54x_mem): Delete GPIO mem stub.
+	(bf542_dev): Add GPIO register blocks.
+	(bf544_dev, bf547_dev): Likewise.
+	* machs.h (BFIN_MMR_GPIO2_SIZE): Define.
+
+2012-04-09  Robin Getz  <robin.getz at analog.com>
+
+	* bfin-sim.c (decode_dsp32shift_0): Extract the sign for ASHIFT
+	and LSHIFT, and set ASTAT based on the before/after values.
+	Rename "val" to "acc" to be consistent with other code branches.
+
+2012-04-09  Robin Getz  <robin.getz at analog.com>
+
+	* bfin-sim.c (sgn_extend): New helper.
+	(decode_dsp32shiftimm_0): Call lshift when newimmag is more
+	than 16, otherwise call ashiftrt.  Set ASTAT fields as needed.
+	For accumulator shifts, call new sgn_extend helper.
+
+2012-04-08  Mike Frysinger  <vapier at gentoo.org>
+
+	* bfin-sim.c (illegal_instruction_or_combination): New helper.
+	(decode_ProgCtrl_0): Call illegal_instruction_or_combination instead
+	of illegal_instruction.
+	(decode_PushPopReg_0, decode_CCflag_0, decode_CC2dreg_0,
+	decode_LDSTpmod_0, decode_dagMODim_0, decode_dagMODik_0,
+	decode_dspLDST_0, decode_LDST_0, _interp_insn_bfin): Likewise.
+	(decode_PushPopMultiple_0): Call illegal_instruction_combination when
+	PARALLEL_GROUP is not BFIN_PARALLEL_NONE.
+	(decode_CCflag_0, decode_REGMV_0, decode_ALU2op_0, decode_PTR2op_0,
+	decode_COMPI2opD_0, decode_COMPI2opP_0): Likewise.
+	(decode_CC2stat_0): Check PARALLEL_GROUP before cbit.
+	(decode_LDSTpmod_0): Call illegal_instruction_combination when
+	PARALLEL_GROUP is BFIN_PARALLEL_GROUP2.
+	(decode_dagMODim_0, decode_dagMODik_0, decode_LDST_0,
+	decode_LDSTiiFP_0, decode_LDSTii_0): Likewise.
+
+2012-04-08  Mike Frysinger  <vapier at gentoo.org>
+
+	* bfin-sim.h (bfin_parallel_group): New enum.
+	(bfin_cpu_state): Add new "group" member.
+	(PARALLEL_GROUP): Define.
+	* bfin-sim.c (decode_ProgCtrl_0): Change INSN_LEN check to
+	PARALLEL_GROUP.
+	(decode_CaCTRL_0, decode_PushPopReg_0, decode_ccMV_0, decode_CCflag_0,
+	decode_CC2dreg_0, decode_CC2stat_0, decode_BRCC_0, decode_UJUMP_0,
+	decode_LOGI2op_0, decode_LoopSetup_0, decode_LDIMMhalf_0,
+	decode_CALLa_0, decode_linkage_0): Likewise.
+	(_interp_insn_bfin): Set PARALLEL_GROUP.
+	(interp_insn_bfin): Likewise.
+
+2012-04-08  Mike Frysinger  <vapier at gentoo.org>
+
+	* bfin-sim.c (decode_dsp32alu_0): Delete extra space in TRACE_INSN.
+
+2012-04-01  Mike Frysinger  <vapier at gentoo.org>
+
+	* bfin-sim.c (_interp_insn_bfin): Call illegal_instruction_combination
+	when INSN_LEN is non-zero before 32bit decode.
+
+2012-04-01  Mike Frysinger  <vapier at gentoo.org>
+
+	* bfin-dis.c (fmtconst): Replace decimal handling with a single
+	sprintf call and the '*' field width.
+
+2012-04-01  Mike Frysinger  <vapier at gentoo.org>
+
+	* machs.c (bfin_model_map_bfrom): Return when mnum is 535.
+
+2012-04-01  Mike Frysinger  <vapier at gentoo.org>
+
+	* interp.c (bfin_user_init): Move auxvt_size decl from top to
+	inside of auxvt check.
+
+2012-03-31  Mike Frysinger  <vapier at gentoo.org>
+
+	* dv-bfin_sic.c (bfin_sic_finish): Change iwr1 to iwr2.
+
+2012-03-31  Mike Frysinger  <vapier at gentoo.org>
+
+	* devices.c: Include devices.h.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
+2012-03-19  Robin Getz  <robin.getz at analog.com>
+	    Mike Frysinger  <vapier at gentoo.org>
+
+	* bfin-sim.c (lshift): Add an overflow flag.  Delete now unused
+	i, j, and tmp vars.  Add a new v_i var.  Split the overflow logic
+	out from the saturate logic.  Do not set V ASTAT bits when working
+	with accumulators.
+	(decode_ALU2op_0): Add new argument to lshift call.
+	(decode_LOGI2op_0, decode_dsp32shift_0, decode_dsp32shiftimm_0):
+	Likewise.
+
+2012-03-18  Mike Frysinger  <vapier at gentoo.org>
+
+	* dv-bfin_ebiu_amc.c (struct bfin_ebiu_amc): Add bank_base.
+	(bfin_ebiu_amc_write_amgctl): Replace BFIN_EBIU_AMC_BASE with
+	amc->bank_base.
+	(bfin_ebiu_amc_finish): Assign BFIN_EBIU_AMC_BASE to amc->bank_base.
+
+2012-03-18  Mike Frysinger  <vapier at gentoo.org>
+
+	* dv-bfin_ebiu_amc.c (bfin_ebiu_amc_attach_address_callback): Use
+	ARRAY_SIZE rather than hardcoded constant.
+
+2012-02-04  Mike Frysinger  <vapier at gentoo.org>
 
 	* config.in: Regenerate.
 	* configure: Likewise.
diff --git a/sim/bfin/aclocal.m4 b/sim/bfin/aclocal.m4
index 28aa237..9a24208 100644
--- a/sim/bfin/aclocal.m4
+++ b/sim/bfin/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -228,13 +229,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -243,7 +244,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/bfin/bfin-sim.c b/sim/bfin/bfin-sim.c
index ef7362b..169079b 100644
--- a/sim/bfin/bfin-sim.c
+++ b/sim/bfin/bfin-sim.c
@@ -52,6 +52,15 @@ illegal_instruction_combination (SIM_CPU *cpu)
 }
 
 static __attribute__ ((noreturn)) void
+illegal_instruction_or_combination (SIM_CPU *cpu)
+{
+  if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
+    illegal_instruction_combination (cpu);
+  else
+    illegal_instruction (cpu);
+}
+
+static __attribute__ ((noreturn)) void
 unhandled_instruction (SIM_CPU *cpu, const char *insn)
 {
   SIM_DESC sd = CPU_STATE (cpu);
@@ -223,16 +232,7 @@ fmtconst_str (const_forms_t cf, bs32 x, bu32 pc)
     x <<= constant_formats[cf].scale;
 
   if (constant_formats[cf].decimal)
-    {
-      if (constant_formats[cf].leading)
-	{
-	  char ps[10];
-	  sprintf (ps, "%%%ii", constant_formats[cf].leading);
-	  sprintf (buf, ps, x);
-	}
-      else
-	sprintf (buf, "%i", x);
-    }
+    sprintf (buf, "%*i", constant_formats[cf].leading, x);
   else
     {
       if (constant_formats[cf].issigned && x < 0)
@@ -748,12 +748,12 @@ lshiftrt (SIM_CPU *cpu, bu64 val, int cnt, int size)
 }
 
 static bu64
-lshift (SIM_CPU *cpu, bu64 val, int cnt, int size, bool saturate)
+lshift (SIM_CPU *cpu, bu64 val, int cnt, int size, bool saturate, bool overflow)
 {
-  int i, j, real_cnt = cnt > size ? size : cnt;
+  int v_i, real_cnt = cnt > size ? size : cnt;
   bu64 sgn = ~((val >> (size - 1)) - 1);
   int mask_cnt = size - 1;
-  bu64 masked, new_val = val, tmp;
+  bu64 masked, new_val = val;
   bu64 mask = ~0;
 
   mask <<= mask_cnt;
@@ -777,31 +777,35 @@ lshift (SIM_CPU *cpu, bu64 val, int cnt, int size, bool saturate)
 
      However, it's a little more complex than looking at sign bits, we need
      to see if we are shifting the sign information away...  */
-  tmp = val & ((~mask << 1) | 1);
-
-  j = 0;
-  for (i = 1; i <= real_cnt && saturate; i++)
-    {
-      if ((tmp & ((bu64)1 << (size - 1))) !=
-	  (((val >> mask_cnt) & 0x1) << mask_cnt))
-	j++;
-      tmp <<= 1;
-    }
-  saturate &= (!sgn && (new_val & (1 << mask_cnt)))
-	      || (sgn && !(new_val & (1 << mask_cnt)));
+  if (((val << cnt) >> size) == 0
+      || (((val << cnt) >> size) == ~(~0 << cnt)
+	  && ((new_val >> (size - 1)) & 0x1)))
+    v_i = 0;
+  else
+    v_i = 1;
 
   switch (size)
     {
     case 16:
-      if (j || (saturate && (new_val & mask)))
-	new_val = sgn == 0 ? 0x7fff : 0x8000, saturate = 1;
       new_val &= 0xFFFF;
+      if (saturate && (v_i || ((val >> (size - 1)) != (new_val >> (size - 1)))))
+	{
+	  new_val = (val >> (size - 1)) == 0 ? 0x7fff : 0x8000;
+	  v_i = 1;
+	}
       break;
     case 32:
       new_val &= 0xFFFFFFFF;
       masked &= 0xFFFFFFFF;
-      if (j || (saturate && ((sgn != masked) || (!sgn && new_val == 0))))
-	new_val = sgn == 0 ? 0x7fffffff : 0x80000000, saturate = 1;
+      sgn &= 0xFFFFFFFF;
+      if (saturate
+	  && (v_i
+	      || (sgn != masked)
+	      || (!sgn && new_val == 0 && val != 0)))
+	{
+	  new_val = sgn == 0 ? 0x7fffffff : 0x80000000;
+	  v_i = 1;
+	}
       break;
     case 40:
       new_val &= 0xFFFFFFFFFFull;
@@ -814,9 +818,13 @@ lshift (SIM_CPU *cpu, bu64 val, int cnt, int size, bool saturate)
 
   SET_ASTATREG (an, new_val >> (size - 1));
   SET_ASTATREG (az, new_val == 0);
-  SET_ASTATREG (v, !!(saturate || j));
-  if (saturate || j)
-    SET_ASTATREG (vs, 1);
+  if (size != 40)
+    {
+      SET_ASTATREG (v, overflow && v_i);
+      if (overflow && v_i)
+	SET_ASTATREG (vs, 1);
+    }
+
   return new_val;
 }
 
@@ -1763,7 +1771,7 @@ decode_ProgCtrl_0 (SIM_CPU *cpu, bu16 iw0, bu32 pc)
       PROFILE_COUNT_INSN (cpu, pc, BFIN_INSN_ProgCtrl_branch);
       TRACE_INSN (cpu, "RTS;");
       IFETCH_CHECK (newpc);
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       TRACE_BRANCH (cpu, pc, newpc, -1, "RTS");
       SET_PCREG (newpc);
@@ -1775,7 +1783,7 @@ decode_ProgCtrl_0 (SIM_CPU *cpu, bu16 iw0, bu32 pc)
       PROFILE_COUNT_INSN (cpu, pc, BFIN_INSN_ProgCtrl_branch);
       TRACE_INSN (cpu, "RTI;");
       /* Do not do IFETCH_CHECK here -- LSB has special meaning.  */
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       cec_return (cpu, -1);
       CYCLE_DELAY = 5;
@@ -1787,7 +1795,7 @@ decode_ProgCtrl_0 (SIM_CPU *cpu, bu16 iw0, bu32 pc)
       TRACE_INSN (cpu, "RTX;");
       /* XXX: Not sure if this is what the hardware does.  */
       IFETCH_CHECK (newpc);
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       cec_return (cpu, IVG_EVX);
       CYCLE_DELAY = 5;
@@ -1799,7 +1807,7 @@ decode_ProgCtrl_0 (SIM_CPU *cpu, bu16 iw0, bu32 pc)
       TRACE_INSN (cpu, "RTN;");
       /* XXX: Not sure if this is what the hardware does.  */
       IFETCH_CHECK (newpc);
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       cec_return (cpu, IVG_NMI);
       CYCLE_DELAY = 5;
@@ -1808,7 +1816,7 @@ decode_ProgCtrl_0 (SIM_CPU *cpu, bu16 iw0, bu32 pc)
     {
       PROFILE_COUNT_INSN (cpu, pc, BFIN_INSN_ProgCtrl_branch);
       TRACE_INSN (cpu, "RTE;");
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       cec_return (cpu, IVG_EMU);
       CYCLE_DELAY = 5;
@@ -1823,7 +1831,7 @@ decode_ProgCtrl_0 (SIM_CPU *cpu, bu16 iw0, bu32 pc)
          in user mode, it's a NOP ...  */
       TRACE_INSN (cpu, "IDLE;");
 
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
 
       /* Timewarp !  */
@@ -1837,7 +1845,7 @@ decode_ProgCtrl_0 (SIM_CPU *cpu, bu16 iw0, bu32 pc)
       PROFILE_COUNT_INSN (cpu, pc, BFIN_INSN_ProgCtrl_sync);
       /* Just NOP it.  */
       TRACE_INSN (cpu, "CSYNC;");
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       CYCLE_DELAY = 10;
     }
@@ -1846,7 +1854,7 @@ decode_ProgCtrl_0 (SIM_CPU *cpu, bu16 iw0, bu32 pc)
       PROFILE_COUNT_INSN (cpu, pc, BFIN_INSN_ProgCtrl_sync);
       /* Just NOP it.  */
       TRACE_INSN (cpu, "SSYNC;");
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
 
       /* Really 10+, but no model info for this.  */
@@ -1856,7 +1864,7 @@ decode_ProgCtrl_0 (SIM_CPU *cpu, bu16 iw0, bu32 pc)
     {
       PROFILE_COUNT_INSN (cpu, pc, BFIN_INSN_ProgCtrl_cec);
       TRACE_INSN (cpu, "EMUEXCPT;");
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       cec_exception (cpu, VEC_SIM_TRAP);
     }
@@ -1864,7 +1872,7 @@ decode_ProgCtrl_0 (SIM_CPU *cpu, bu16 iw0, bu32 pc)
     {
       PROFILE_COUNT_INSN (cpu, pc, BFIN_INSN_ProgCtrl_cec);
       TRACE_INSN (cpu, "CLI R%i;", poprnd);
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       SET_DREG (poprnd, cec_cli (cpu));
     }
@@ -1872,7 +1880,7 @@ decode_ProgCtrl_0 (SIM_CPU *cpu, bu16 iw0, bu32 pc)
     {
       PROFILE_COUNT_INSN (cpu, pc, BFIN_INSN_ProgCtrl_cec);
       TRACE_INSN (cpu, "STI R%i;", poprnd);
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       cec_sti (cpu, DREG (poprnd));
       CYCLE_DELAY = 3;
@@ -1883,7 +1891,7 @@ decode_ProgCtrl_0 (SIM_CPU *cpu, bu16 iw0, bu32 pc)
       PROFILE_COUNT_INSN (cpu, pc, BFIN_INSN_ProgCtrl_branch);
       TRACE_INSN (cpu, "JUMP (%s);", get_preg_name (poprnd));
       IFETCH_CHECK (newpc);
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       TRACE_BRANCH (cpu, pc, newpc, -1, "JUMP (Preg)");
       SET_PCREG (newpc);
@@ -1897,7 +1905,7 @@ decode_ProgCtrl_0 (SIM_CPU *cpu, bu16 iw0, bu32 pc)
       PROFILE_COUNT_INSN (cpu, pc, BFIN_INSN_ProgCtrl_branch);
       TRACE_INSN (cpu, "CALL (%s);", get_preg_name (poprnd));
       IFETCH_CHECK (newpc);
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       TRACE_BRANCH (cpu, pc, newpc, -1, "CALL (Preg)");
       /* If we're at the end of a hardware loop, RETS is going to be
@@ -1914,7 +1922,7 @@ decode_ProgCtrl_0 (SIM_CPU *cpu, bu16 iw0, bu32 pc)
       PROFILE_COUNT_INSN (cpu, pc, BFIN_INSN_ProgCtrl_branch);
       TRACE_INSN (cpu, "CALL (PC + %s);", get_preg_name (poprnd));
       IFETCH_CHECK (newpc);
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       TRACE_BRANCH (cpu, pc, newpc, -1, "CALL (PC + Preg)");
       SET_RETSREG (hwloop_get_next_pc (cpu, pc, 2));
@@ -1929,7 +1937,7 @@ decode_ProgCtrl_0 (SIM_CPU *cpu, bu16 iw0, bu32 pc)
       PROFILE_COUNT_INSN (cpu, pc, BFIN_INSN_ProgCtrl_branch);
       TRACE_INSN (cpu, "JUMP (PC + %s);", get_preg_name (poprnd));
       IFETCH_CHECK (newpc);
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       TRACE_BRANCH (cpu, pc, newpc, -1, "JUMP (PC + Preg)");
       SET_PCREG (newpc);
@@ -1942,7 +1950,7 @@ decode_ProgCtrl_0 (SIM_CPU *cpu, bu16 iw0, bu32 pc)
       int raise = uimm4 (poprnd);
       PROFILE_COUNT_INSN (cpu, pc, BFIN_INSN_ProgCtrl_cec);
       TRACE_INSN (cpu, "RAISE %s;", uimm4_str (raise));
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       cec_require_supervisor (cpu);
       if (raise == IVG_IVHW)
@@ -1956,7 +1964,7 @@ decode_ProgCtrl_0 (SIM_CPU *cpu, bu16 iw0, bu32 pc)
       int excpt = uimm4 (poprnd);
       PROFILE_COUNT_INSN (cpu, pc, BFIN_INSN_ProgCtrl_cec);
       TRACE_INSN (cpu, "EXCPT %s;", uimm4_str (excpt));
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       cec_exception (cpu, excpt);
       CYCLE_DELAY = 3;
@@ -1967,7 +1975,7 @@ decode_ProgCtrl_0 (SIM_CPU *cpu, bu16 iw0, bu32 pc)
       bu8 byte;
       PROFILE_COUNT_INSN (cpu, pc, BFIN_INSN_ProgCtrl_atomic);
       TRACE_INSN (cpu, "TESTSET (%s);", get_preg_name (poprnd));
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       byte = GET_WORD (addr);
       SET_CCREG (byte == 0);
@@ -1976,7 +1984,7 @@ decode_ProgCtrl_0 (SIM_CPU *cpu, bu16 iw0, bu32 pc)
       CYCLE_DELAY = 2;
     }
   else
-    illegal_instruction (cpu);
+    illegal_instruction_or_combination (cpu);
 }
 
 static void
@@ -1996,7 +2004,7 @@ decode_CaCTRL_0 (SIM_CPU *cpu, bu16 iw0)
   TRACE_EXTRACT (cpu, "%s: a:%i op:%i reg:%i", __func__, a, op, reg);
   TRACE_INSN (cpu, "%s [%s%s];", sinsn[op], get_preg_name (reg), a ? "++" : "");
 
-  if (INSN_LEN == 8)
+  if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
     /* None of these can be part of a parallel instruction.  */
     illegal_instruction_combination (cpu);
 
@@ -2046,16 +2054,17 @@ decode_PushPopReg_0 (SIM_CPU *cpu, bu16 iw0)
 
   /* Can't push/pop reserved registers  */
   if (reg_is_reserved (grp, reg))
-    illegal_instruction (cpu);
+    illegal_instruction_or_combination (cpu);
 
   if (W == 0)
     {
       /* Dreg and Preg are not supported by this instruction.  */
       if (grp == 0 || grp == 1)
-	illegal_instruction (cpu);
+	illegal_instruction_or_combination (cpu);
       TRACE_INSN (cpu, "%s = [SP++];", reg_name);
       /* Can't pop USP while in userspace.  */
-      if (INSN_LEN == 8 || (grp == 7 && reg == 0 && cec_is_user_mode(cpu)))
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE
+	  || (grp == 7 && reg == 0 && cec_is_user_mode(cpu)))
 	illegal_instruction_combination (cpu);
       /* XXX: The valid register check is in reg_write(), so we might
               incorrectly do a GET_LONG() here ...  */
@@ -2069,7 +2078,7 @@ decode_PushPopReg_0 (SIM_CPU *cpu, bu16 iw0)
   else
     {
       TRACE_INSN (cpu, "[--SP] = %s;", reg_name);
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
 
       sp -= 4;
@@ -2104,6 +2113,9 @@ decode_PushPopMultiple_0 (SIM_CPU *cpu, bu16 iw0)
   TRACE_EXTRACT (cpu, "%s: d:%i p:%i W:%i dr:%i pr:%i",
 		 __func__, d, p, W, dr, pr);
 
+  if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
+    illegal_instruction_combination (cpu);
+
   if ((d == 0 && p == 0) || (p && imm5 (pr) > 5)
       || (d && !p && pr) || (p && !d && dr))
     illegal_instruction (cpu);
@@ -2184,7 +2196,7 @@ decode_ccMV_0 (SIM_CPU *cpu, bu16 iw0)
   TRACE_INSN (cpu, "IF %sCC %s = %s;", T ? "" : "! ",
 	      get_allreg_name (d, dst),
 	      get_allreg_name (s, src));
-  if (INSN_LEN == 8)
+  if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
     illegal_instruction_combination (cpu);
 
   if (cond)
@@ -2215,31 +2227,31 @@ decode_CCflag_0 (SIM_CPU *cpu, bu16 iw0)
       bs64 diff = acc0 - acc1;
 
       if (x != 0 || y != 0)
-	illegal_instruction (cpu);
+	illegal_instruction_or_combination (cpu);
 
       if (opc == 5 && I == 0 && G == 0)
 	{
 	  TRACE_INSN (cpu, "CC = A0 == A1;");
-	  if (INSN_LEN == 8)
+	  if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	    illegal_instruction_combination (cpu);
 	  SET_CCREG (acc0 == acc1);
 	}
       else if (opc == 6 && I == 0 && G == 0)
 	{
 	  TRACE_INSN (cpu, "CC = A0 < A1");
-	  if (INSN_LEN == 8)
+	  if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	    illegal_instruction_combination (cpu);
 	  SET_CCREG (acc0 < acc1);
 	}
       else if (opc == 7 && I == 0 && G == 0)
 	{
 	  TRACE_INSN (cpu, "CC = A0 <= A1");
-	  if (INSN_LEN == 8)
+	  if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	    illegal_instruction_combination (cpu);
 	  SET_CCREG (acc0 <= acc1);
 	}
       else
-	illegal_instruction (cpu);
+	illegal_instruction_or_combination (cpu);
 
       SET_ASTATREG (az, diff == 0);
       SET_ASTATREG (an, diff < 0);
@@ -2304,6 +2316,9 @@ decode_CCflag_0 (SIM_CPU *cpu, bu16 iw0)
 	  TRACE_INSN (cpu, "CC = %c%i %s %c%i%s;", s, x, op, d, y, sign);
 	}
 
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
+	illegal_instruction_combination (cpu);
+
       SET_CCREG (cc);
       /* Pointer compares only touch CC.  */
       if (!G)
@@ -2331,26 +2346,26 @@ decode_CC2dreg_0 (SIM_CPU *cpu, bu16 iw0)
   if (op == 0)
     {
       TRACE_INSN (cpu, "R%i = CC;", reg);
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       SET_DREG (reg, CCREG);
     }
   else if (op == 1)
     {
       TRACE_INSN (cpu, "CC = R%i;", reg);
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       SET_CCREG (DREG (reg) != 0);
     }
   else if (op == 3 && reg == 0)
     {
       TRACE_INSN (cpu, "CC = !CC;");
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       SET_CCREG (!CCREG);
     }
   else
-    illegal_instruction (cpu);
+    illegal_instruction_or_combination (cpu);
 }
 
 static void
@@ -2373,13 +2388,13 @@ decode_CC2stat_0 (SIM_CPU *cpu, bu16 iw0)
   TRACE_INSN (cpu, "%s %s= %s;", D ? astat_names[cbit] : "CC",
 	      op_names[op], D ? "CC" : astat_names[cbit]);
 
+  if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
+    illegal_instruction_combination (cpu);
+
   /* CC = CC; is invalid.  */
   if (cbit == 5)
     illegal_instruction (cpu);
 
-  if (INSN_LEN == 8)
-    illegal_instruction_combination (cpu);
-
   pval = !!(ASTAT & (1 << cbit));
   if (D == 0)
     switch (op)
@@ -2423,7 +2438,7 @@ decode_BRCC_0 (SIM_CPU *cpu, bu16 iw0, bu32 pc)
   TRACE_INSN (cpu, "IF %sCC JUMP %#x%s;", T ? "" : "! ",
 	      pcrel, B ? " (bp)" : "");
 
-  if (INSN_LEN == 8)
+  if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
     illegal_instruction_combination (cpu);
 
   if (cond)
@@ -2459,7 +2474,7 @@ decode_UJUMP_0 (SIM_CPU *cpu, bu16 iw0, bu32 pc)
 
   TRACE_INSN (cpu, "JUMP.S %#x;", pcrel);
 
-  if (INSN_LEN == 8)
+  if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
     illegal_instruction_combination (cpu);
 
   TRACE_BRANCH (cpu, pc, newpc, -1, "JUMP.S");
@@ -2491,6 +2506,9 @@ decode_REGMV_0 (SIM_CPU *cpu, bu16 iw0)
 
   TRACE_INSN (cpu, "%s = %s;", dstreg_name, srcreg_name);
 
+  if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
+    illegal_instruction_combination (cpu);
+
   /* Reserved slots cannot be a src/dst.  */
   if (reg_is_reserved (gs, src) || reg_is_reserved (gd, dst))
     goto invalid_move;
@@ -2539,6 +2557,9 @@ decode_ALU2op_0 (SIM_CPU *cpu, bu16 iw0)
   PROFILE_COUNT_INSN (cpu, pc, BFIN_INSN_ALU2op);
   TRACE_EXTRACT (cpu, "%s: opc:%i src:%i dst:%i", __func__, opc, src, dst);
 
+  if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
+    illegal_instruction_combination (cpu);
+
   if (opc == 0)
     {
       TRACE_INSN (cpu, "R%i >>>= R%i;", dst, src);
@@ -2557,7 +2578,7 @@ decode_ALU2op_0 (SIM_CPU *cpu, bu16 iw0)
   else if (opc == 2)
     {
       TRACE_INSN (cpu, "R%i <<= R%i;", dst, src);
-      SET_DREG (dst, lshift (cpu, DREG (dst), DREG (src), 32, 0));
+      SET_DREG (dst, lshift (cpu, DREG (dst), DREG (src), 32, 0, 0));
     }
   else if (opc == 3)
     {
@@ -2647,6 +2668,9 @@ decode_PTR2op_0 (SIM_CPU *cpu, bu16 iw0)
   PROFILE_COUNT_INSN (cpu, pc, BFIN_INSN_PTR2op);
   TRACE_EXTRACT (cpu, "%s: opc:%i src:%i dst:%i", __func__, opc, src, dst);
 
+  if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
+    illegal_instruction_combination (cpu);
+
   if (opc == 0)
     {
       TRACE_INSN (cpu, "%s -= %s", dst_name, src_name);
@@ -2706,21 +2730,21 @@ decode_LOGI2op_0 (SIM_CPU *cpu, bu16 iw0)
   if (opc == 0)
     {
       TRACE_INSN (cpu, "CC = ! BITTST (R%i, %s);", dst, uimm_str);
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       SET_CCREG ((~DREG (dst) >> uimm) & 1);
     }
   else if (opc == 1)
     {
       TRACE_INSN (cpu, "CC = BITTST (R%i, %s);", dst, uimm_str);
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       SET_CCREG ((DREG (dst) >> uimm) & 1);
     }
   else if (opc == 2)
     {
       TRACE_INSN (cpu, "BITSET (R%i, %s);", dst, uimm_str);
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       SET_DREG (dst, DREG (dst) | (1 << uimm));
       setflags_logical (cpu, DREG (dst));
@@ -2728,7 +2752,7 @@ decode_LOGI2op_0 (SIM_CPU *cpu, bu16 iw0)
   else if (opc == 3)
     {
       TRACE_INSN (cpu, "BITTGL (R%i, %s);", dst, uimm_str);
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       SET_DREG (dst, DREG (dst) ^ (1 << uimm));
       setflags_logical (cpu, DREG (dst));
@@ -2736,7 +2760,7 @@ decode_LOGI2op_0 (SIM_CPU *cpu, bu16 iw0)
   else if (opc == 4)
     {
       TRACE_INSN (cpu, "BITCLR (R%i, %s);", dst, uimm_str);
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       SET_DREG (dst, DREG (dst) & ~(1 << uimm));
       setflags_logical (cpu, DREG (dst));
@@ -2744,23 +2768,23 @@ decode_LOGI2op_0 (SIM_CPU *cpu, bu16 iw0)
   else if (opc == 5)
     {
       TRACE_INSN (cpu, "R%i >>>= %s;", dst, uimm_str);
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       SET_DREG (dst, ashiftrt (cpu, DREG (dst), uimm, 32));
     }
   else if (opc == 6)
     {
       TRACE_INSN (cpu, "R%i >>= %s;", dst, uimm_str);
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       SET_DREG (dst, lshiftrt (cpu, DREG (dst), uimm, 32));
     }
   else if (opc == 7)
     {
       TRACE_INSN (cpu, "R%i <<= %s;", dst, uimm_str);
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
-      SET_DREG (dst, lshift (cpu, DREG (dst), uimm, 32, 0));
+      SET_DREG (dst, lshift (cpu, DREG (dst), uimm, 32, 0, 0));
     }
 }
 
@@ -2780,6 +2804,9 @@ decode_COMP3op_0 (SIM_CPU *cpu, bu16 iw0)
   TRACE_EXTRACT (cpu, "%s: opc:%i dst:%i src1:%i src0:%i",
 		 __func__, opc, dst, src1, src0);
 
+  if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
+    illegal_instruction_combination (cpu);
+
   if (opc == 0)
     {
       TRACE_INSN (cpu, "R%i = R%i + R%i;", dst, src0, src1);
@@ -2843,6 +2870,9 @@ decode_COMPI2opD_0 (SIM_CPU *cpu, bu16 iw0)
   TRACE_EXTRACT (cpu, "%s: op:%i src:%i dst:%i", __func__, op, src, dst);
   TRACE_DECODE (cpu, "%s: imm7:%#x", __func__, imm);
 
+  if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
+    illegal_instruction_combination (cpu);
+
   if (op == 0)
     {
       TRACE_INSN (cpu, "R%i = %s (X);", dst, imm7_str (imm));
@@ -2872,6 +2902,9 @@ decode_COMPI2opP_0 (SIM_CPU *cpu, bu16 iw0)
   TRACE_EXTRACT (cpu, "%s: op:%i src:%i dst:%i", __func__, op, src, dst);
   TRACE_DECODE (cpu, "%s: imm:%#x", __func__, imm);
 
+  if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
+    illegal_instruction_combination (cpu);
+
   if (op == 0)
     {
       TRACE_INSN (cpu, "%s = %s;", dst_name, imm7_str (imm));
@@ -2904,6 +2937,9 @@ decode_LDSTpmod_0 (SIM_CPU *cpu, bu16 iw0)
   TRACE_EXTRACT (cpu, "%s: W:%i aop:%i reg:%i idx:%i ptr:%i",
 		 __func__, W, aop, reg, idx, ptr);
 
+  if (PARALLEL_GROUP == BFIN_PARALLEL_GROUP2)
+    illegal_instruction_combination (cpu);
+
   if (aop == 1 && W == 0 && idx == ptr)
     {
       TRACE_INSN (cpu, "R%i.L = W[%s];", reg, ptr_name);
@@ -3000,7 +3036,7 @@ decode_LDSTpmod_0 (SIM_CPU *cpu, bu16 iw0)
 	STORE (PREG (ptr), addr + PREG (idx));
     }
   else
-    illegal_instruction (cpu);
+    illegal_instruction_or_combination (cpu);
 }
 
 static void
@@ -3018,6 +3054,9 @@ decode_dagMODim_0 (SIM_CPU *cpu, bu16 iw0)
   PROFILE_COUNT_INSN (cpu, pc, BFIN_INSN_dagMODim);
   TRACE_EXTRACT (cpu, "%s: br:%i op:%i m:%i i:%i", __func__, br, op, m, i);
 
+  if (PARALLEL_GROUP == BFIN_PARALLEL_GROUP2)
+    illegal_instruction_combination (cpu);
+
   if (op == 0 && br == 1)
     {
       TRACE_INSN (cpu, "I%i += M%i (BREV);", i, m);
@@ -3034,7 +3073,7 @@ decode_dagMODim_0 (SIM_CPU *cpu, bu16 iw0)
       dagsub (cpu, i, MREG (m));
     }
   else
-    illegal_instruction (cpu);
+    illegal_instruction_or_combination (cpu);
 }
 
 static void
@@ -3050,6 +3089,9 @@ decode_dagMODik_0 (SIM_CPU *cpu, bu16 iw0)
   PROFILE_COUNT_INSN (cpu, pc, BFIN_INSN_dagMODik);
   TRACE_EXTRACT (cpu, "%s: op:%i i:%i", __func__, op, i);
 
+  if (PARALLEL_GROUP == BFIN_PARALLEL_GROUP2)
+    illegal_instruction_combination (cpu);
+
   if (op == 0)
     {
       TRACE_INSN (cpu, "I%i += 2;", i);
@@ -3071,7 +3113,7 @@ decode_dagMODik_0 (SIM_CPU *cpu, bu16 iw0)
       dagsub (cpu, i, 4);
     }
   else
-    illegal_instruction (cpu);
+    illegal_instruction_or_combination (cpu);
 }
 
 static void
@@ -3234,7 +3276,7 @@ decode_dspLDST_0 (SIM_CPU *cpu, bu16 iw0)
       PUT_LONG (addr, DREG (reg));
     }
   else
-    illegal_instruction (cpu);
+    illegal_instruction_or_combination (cpu);
 }
 
 static void
@@ -3258,8 +3300,8 @@ decode_LDST_0 (SIM_CPU *cpu, bu16 iw0)
   TRACE_EXTRACT (cpu, "%s: sz:%i W:%i aop:%i Z:%i ptr:%i reg:%i",
 		 __func__, sz, W, aop, Z, ptr, reg);
 
-  if (aop == 3)
-    illegal_instruction (cpu);
+  if (aop == 3 || PARALLEL_GROUP == BFIN_PARALLEL_GROUP2)
+    illegal_instruction_or_combination (cpu);
 
   if (W == 0)
     {
@@ -3296,7 +3338,7 @@ decode_LDST_0 (SIM_CPU *cpu, bu16 iw0)
 	  SET_DREG (reg, (bs32) (bs8) GET_BYTE (PREG (ptr)));
 	}
       else
-	illegal_instruction (cpu);
+	illegal_instruction_or_combination (cpu);
     }
   else
     {
@@ -3321,7 +3363,7 @@ decode_LDST_0 (SIM_CPU *cpu, bu16 iw0)
 	  PUT_BYTE (PREG (ptr), DREG (reg));
 	}
       else
-	illegal_instruction (cpu);
+	illegal_instruction_or_combination (cpu);
     }
 
   if (aop == 0)
@@ -3353,6 +3395,9 @@ decode_LDSTiiFP_0 (SIM_CPU *cpu, bu16 iw0)
 		 W, offset, grp, reg);
   TRACE_DECODE (cpu, "%s: negimm5s4:%#x", __func__, imm);
 
+  if (PARALLEL_GROUP == BFIN_PARALLEL_GROUP2)
+    illegal_instruction_or_combination (cpu);
+
   if (W == 0)
     {
       TRACE_INSN (cpu, "%s = [FP + %s];", reg_name, imm_str);
@@ -3393,6 +3438,9 @@ decode_LDSTii_0 (SIM_CPU *cpu, bu16 iw0)
 
   TRACE_DECODE (cpu, "%s: uimm4s4/uimm4s2:%#x", __func__, imm);
 
+  if (PARALLEL_GROUP == BFIN_PARALLEL_GROUP2)
+    illegal_instruction_combination (cpu);
+
   if (W == 1 && op == 2)
     illegal_instruction (cpu);
 
@@ -3466,7 +3514,7 @@ decode_LoopSetup_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1, bu32 pc)
   if (reg > 7)
     illegal_instruction (cpu);
 
-  if (INSN_LEN == 8)
+  if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
     illegal_instruction_combination (cpu);
 
   if (rop == 0)
@@ -3514,7 +3562,7 @@ decode_LDIMMhalf_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
   TRACE_EXTRACT (cpu, "%s: Z:%i H:%i S:%i grp:%i reg:%i hword:%#x",
 		 __func__, Z, H, S, grp, reg, hword);
 
-  if (INSN_LEN == 8)
+  if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
     illegal_instruction_combination (cpu);
 
   if (S == 1)
@@ -3566,7 +3614,7 @@ decode_CALLa_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1, bu32 pc)
 
   TRACE_INSN (cpu, "%s %#x;", S ? "CALL" : "JUMP.L", pcrel);
 
-  if (INSN_LEN == 8)
+  if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
     illegal_instruction_combination (cpu);
 
   if (S == 1)
@@ -3700,7 +3748,7 @@ decode_linkage_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
       int size = uimm16s4 (framesize);
       sp = SPREG;
       TRACE_INSN (cpu, "LINK %s;", uimm16s4_str (framesize));
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       sp -= 4;
       PUT_LONG (sp, RETSREG);
@@ -3715,7 +3763,7 @@ decode_linkage_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
       /* Restore SP from FP.  */
       sp = FPREG;
       TRACE_INSN (cpu, "UNLINK;");
-      if (INSN_LEN == 8)
+      if (PARALLEL_GROUP != BFIN_PARALLEL_NONE)
 	illegal_instruction_combination (cpu);
       SET_FPREG (GET_LONG (sp));
       sp += 4;
@@ -4966,7 +5014,7 @@ decode_dsp32alu_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
     {
       bu32 val = DREG (src0);
 
-      TRACE_INSN (cpu, "R%i = - R%i %s;", dst0, src0, amod1 (s, 0));
+      TRACE_INSN (cpu, "R%i = - R%i%s;", dst0, src0, amod1 (s, 0));
 
       if (s && val == 0x80000000)
 	{
@@ -5158,7 +5206,16 @@ decode_dsp32shift_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
       if (shft <= 0)
 	val = ashiftrt (cpu, val, -shft, 16);
       else
-	val = lshift (cpu, val, shft, 16, sop == 1);
+	{
+	  int sgn = (val >> 15) & 0x1;
+
+	  val = lshift (cpu, val, shft, 16, sop == 1, 1);
+	  if (((val >> 15) & 0x1) != sgn)
+	    {
+	      SET_ASTATREG (v, 1);
+	      SET_ASTATREG (vs, 1);
+	    }
+	}
 
       if ((HLs & 2) == 0)
 	STORE (DREG (dst0), REG_H_L (DREG (dst0), val));
@@ -5210,42 +5267,40 @@ decode_dsp32shift_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
   else if (sop == 0 && sopcde == 3 && (HLs == 0 || HLs == 1))
     {
       bs32 shft = (bs8)(DREG (src0) << 2) >> 2;
-      bu64 val = get_extended_acc (cpu, HLs);
+      bu64 acc = get_extended_acc (cpu, HLs);
+      bu64 val;
 
       HLs = !!HLs;
       TRACE_INSN (cpu, "A%i = ASHIFT A%i BY R%i.L;", HLs, HLs, src0);
-      TRACE_DECODE (cpu, "A%i:%#"PRIx64" shift:%i", HLs, val, shft);
+      TRACE_DECODE (cpu, "A%i:%#"PRIx64" shift:%i", HLs, acc, shft);
 
       if (shft <= 0)
-	val = ashiftrt (cpu, val, -shft, 40);
+	val = ashiftrt (cpu, acc, -shft, 40);
       else
-	val = lshift (cpu, val, shft, 40, 0);
+	val = lshift (cpu, acc, shft, 40, 0, 0);
 
       STORE (AXREG (HLs), (val >> 32) & 0xff);
       STORE (AWREG (HLs), (val & 0xffffffff));
-      STORE (ASTATREG (av[HLs]), val == 0);
-      if (val == 0)
-	STORE (ASTATREG (avs[HLs]), 1);
+      STORE (ASTATREG (av[HLs]), 0);
     }
   else if (sop == 1 && sopcde == 3 && (HLs == 0 || HLs == 1))
     {
       bs32 shft = (bs8)(DREG (src0) << 2) >> 2;
+      bu64 acc = get_unextended_acc (cpu, HLs);
       bu64 val;
 
       HLs = !!HLs;
       TRACE_INSN (cpu, "A%i = LSHIFT A%i BY R%i.L;", HLs, HLs, src0);
-      val = get_unextended_acc (cpu, HLs);
+      TRACE_DECODE (cpu, "A%i:%#"PRIx64" shift:%i", HLs, acc, shft);
 
       if (shft <= 0)
-	val = lshiftrt (cpu, val, -shft, 40);
+	val = lshiftrt (cpu, acc, -shft, 40);
       else
-	val = lshift (cpu, val, shft, 40, 0);
+	val = lshift (cpu, acc, shft, 40, 0, 0);
 
       STORE (AXREG (HLs), (val >> 32) & 0xff);
       STORE (AWREG (HLs), (val & 0xffffffff));
-      STORE (ASTATREG (av[HLs]), val == 0);
-      if (val == 0)
-	STORE (ASTATREG (avs[HLs]), 1);
+      STORE (ASTATREG (av[HLs]), 0);
     }
   else if ((sop == 0 || sop == 1) && sopcde == 1)
     {
@@ -5267,9 +5322,18 @@ decode_dsp32shift_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
 	}
       else
 	{
-	  val0 = lshift (cpu, val0, shft, 16, sop == 1);
+	  int sgn0 = (val0 >> 15) & 0x1;
+	  int sgn1 = (val1 >> 15) & 0x1;
+
+	  val0 = lshift (cpu, val0, shft, 16, sop == 1, 1);
 	  astat = ASTAT;
-	  val1 = lshift (cpu, val1, shft, 16, sop == 1);
+	  val1 = lshift (cpu, val1, shft, 16, sop == 1, 1);
+
+	  if ((sgn0 != ((val0 >> 15) & 0x1)) || (sgn1 != ((val1 >> 15) & 0x1)))
+	    {
+	      SET_ASTATREG (v, 1);
+	      SET_ASTATREG (vs, 1);
+	    }
 	}
       SET_ASTAT (ASTAT | astat);
       STORE (DREG (dst0), (val1 << 16) | val0);
@@ -5294,7 +5358,16 @@ decode_dsp32shift_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
 	    STORE (DREG (dst0), ashiftrt (cpu, v, -shft, 32));
 	}
       else
-	STORE (DREG (dst0), lshift (cpu, v, shft, 32, sop == 1));
+	{
+	  bu32 val = lshift (cpu, v, shft, 32, sop == 1, 1);
+
+	  STORE (DREG (dst0), val);
+	  if (((v >> 31) & 0x1) != ((val >> 31) & 0x1))
+	    {
+	      SET_ASTATREG (v, 1);
+	      SET_ASTATREG (vs, 1);
+	    }
+	}
     }
   else if (sop == 3 && sopcde == 2)
     {
@@ -5330,9 +5403,9 @@ decode_dsp32shift_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
 	}
       else
 	{
-	  val0 = lshift (cpu, val0, shft, 16, 0);
+	  val0 = lshift (cpu, val0, shft, 16, 0, 0);
 	  astat = ASTAT;
-	  val1 = lshift (cpu, val1, shft, 16, 0);
+	  val1 = lshift (cpu, val1, shft, 16, 0, 0);
 	}
       SET_ASTAT (ASTAT | astat);
       STORE (DREG (dst0), (val1 << 16) | val0);
@@ -5668,6 +5741,26 @@ decode_dsp32shift_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
     illegal_instruction (cpu);
 }
 
+static bu64
+sgn_extend (bu40 org, bu40 val, int size)
+{
+  bu64 ret = val;
+
+  if (org & (1ULL << (size - 1)))
+    {
+      /* We need to shift in to the MSB which is set.  */
+      int n;
+
+      for (n = 40; n >= 0; n--)
+	if (ret & (1ULL << n))
+	  break;
+      ret |= (-1ULL << n);
+    }
+  else
+    ret &= ~(-1ULL << 39);
+
+  return ret;
+}
 static void
 decode_dsp32shiftimm_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
 {
@@ -5702,7 +5795,14 @@ decode_dsp32shiftimm_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
 		      dst0, (HLs & 2) ? 'H' : 'L',
 		      src1, (HLs & 1) ? 'H' : 'L', newimmag);
 	  if (newimmag > 16)
-	    result = lshift (cpu, in, 16 - (newimmag & 0xF), 16, 0);
+	    {
+	      result = lshift (cpu, in, 16 - (newimmag & 0xF), 16, 0, 1);
+	      if (((result >> 15) & 0x1) != ((in >> 15) & 0x1))
+		{
+		  SET_ASTATREG (v, 1);
+		  SET_ASTATREG (vs, 1);
+		}
+	    }
 	  else
 	    result = ashiftrt (cpu, in, newimmag, 16);
 	}
@@ -5711,14 +5811,43 @@ decode_dsp32shiftimm_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
 	  TRACE_INSN (cpu, "R%i.%c = R%i.%c << %i (S);",
 		      dst0, (HLs & 2) ? 'H' : 'L',
 		      src1, (HLs & 1) ? 'H' : 'L', immag);
-	  result = lshift (cpu, in, immag, 16, 1);
+	  result = lshift (cpu, in, immag, 16, 1, 1);
 	}
       else if (sop == 1 && bit8)
 	{
 	  TRACE_INSN (cpu, "R%i.%c = R%i.%c >>> %i (S);",
 		      dst0, (HLs & 2) ? 'H' : 'L',
-		      src1, (HLs & 1) ? 'H' : 'L', immag);
-	  result = lshift (cpu, in, immag, 16, 1);
+		      src1, (HLs & 1) ? 'H' : 'L', newimmag);
+	  if (newimmag > 16)
+	    {
+	      int shift = 32 - newimmag;
+	      bu16 inshift = in << shift;
+
+	      if (((inshift & ~0xFFFF)
+		   && ((inshift & ~0xFFFF) >> 16) != ~(~0 << shift))
+		  || (inshift & 0x8000) != (in & 0x8000))
+		{
+		  if (in & 0x8000)
+		    result = 0x8000;
+		  else
+		    result = 0x7fff;
+		  SET_ASTATREG (v, 1);
+		  SET_ASTATREG (vs, 1);
+		}
+	      else
+		{
+		  result = inshift;
+		  SET_ASTATREG (v, 0);
+		}
+
+	      SET_ASTATREG (az, !result);
+	      SET_ASTATREG (an, !!(result & 0x8000));
+	    }
+	  else
+	    {
+	      result = ashiftrt (cpu, in, newimmag, 16);
+	      result = sgn_extend (in, result, 16);
+	    }
 	}
       else if (sop == 2 && bit8)
 	{
@@ -5732,7 +5861,7 @@ decode_dsp32shiftimm_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
 	  TRACE_INSN (cpu, "R%i.%c = R%i.%c << %i;",
 		      dst0, (HLs & 2) ? 'H' : 'L',
 		      src1, (HLs & 1) ? 'H' : 'L', immag);
-	  result = lshift (cpu, in, immag, 16, 0);
+	  result = lshift (cpu, in, immag, 16, 0, 1);
 	}
       else
 	illegal_instruction (cpu);
@@ -5760,22 +5889,23 @@ decode_dsp32shiftimm_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
   else if (sop == 0 && sopcde == 3 && bit8 == 1)
     {
       /* Arithmetic shift, so shift in sign bit copies.  */
-      bu64 acc;
+      bu64 acc, val;
       int shift = uimm5 (newimmag);
       HLs = !!HLs;
 
       TRACE_INSN (cpu, "A%i = A%i >>> %i;", HLs, HLs, shift);
 
       acc = get_extended_acc (cpu, HLs);
-      acc >>= shift;
+      val = acc >> shift;
+
       /* Sign extend again.  */
-      if (acc & (1ULL << 39))
-	acc |= -(1ULL << 39);
-      else
-	acc &= ~(-(1ULL << 39));
+      val = sgn_extend (acc, val, 40);
 
-      STORE (AXREG (HLs), (acc >> 32) & 0xFF);
-      STORE (AWREG (HLs), acc & 0xFFFFFFFF);
+      STORE (AXREG (HLs), (val >> 32) & 0xFF);
+      STORE (AWREG (HLs), val & 0xFFFFFFFF);
+      STORE (ASTATREG (an), !!(val & (1ULL << 39)));
+      STORE (ASTATREG (az), !val);
+      STORE (ASTATREG (av[HLs]), 0);
     }
   else if ((sop == 0 && sopcde == 3 && bit8 == 0)
 	   || (sop == 1 && sopcde == 3))
@@ -5820,9 +5950,9 @@ decode_dsp32shiftimm_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
       TRACE_INSN (cpu, "R%i = R%i << %i (V,S);", dst0, src1, count);
       if (count >= 0)
 	{
-	  val0 = lshift (cpu, val0, count, 16, 1);
+	  val0 = lshift (cpu, val0, count, 16, 1, 1);
 	  astat = ASTAT;
-	  val1 = lshift (cpu, val1, count, 16, 1);
+	  val1 = lshift (cpu, val1, count, 16, 1, 1);
 	}
       else
 	{
@@ -5857,9 +5987,9 @@ decode_dsp32shiftimm_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
       bu32 astat;
 
       TRACE_INSN (cpu, "R%i = R%i << %i (V);", dst0, src1, count);
-      val0 = lshift (cpu, val0, count, 16, 0);
+      val0 = lshift (cpu, val0, count, 16, 0, 1);
       astat = ASTAT;
-      val1 = lshift (cpu, val1, count, 16, 0);
+      val1 = lshift (cpu, val1, count, 16, 0, 1);
       SET_ASTAT (ASTAT | astat);
 
       STORE (DREG (dst0), val0 | (val1 << 16));
@@ -5874,11 +6004,20 @@ decode_dsp32shiftimm_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
       TRACE_INSN (cpu, "R%i = R%i >>> %i %s;", dst0, src1, count,
 		  sop == 0 ? "(V)" : "(V,S)");
 
-      if (count & 0x10)
+      if (count > 16)
 	{
-	  val0 = lshift (cpu, val0, 16 - (count & 0xF), 16, 0);
+	  int sgn0 = (val0 >> 15) & 0x1;
+	  int sgn1 = (val1 >> 15) & 0x1;
+
+	  val0 = lshift (cpu, val0, 16 - (count & 0xF), 16, 0, 1);
 	  astat = ASTAT;
-	  val1 = lshift (cpu, val1, 16 - (count & 0xF), 16, 0);
+	  val1 = lshift (cpu, val1, 16 - (count & 0xF), 16, 0, 1);
+
+	  if ((sgn0 != ((val0 >> 15) & 0x1)) || (sgn1 != ((val1 >> 15) & 0x1)))
+	    {
+	      SET_ASTATREG (v, 1);
+	      SET_ASTATREG (vs, 1);
+	    }
 	}
       else
 	{
@@ -5896,7 +6035,7 @@ decode_dsp32shiftimm_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
       int count = imm6 (immag);
 
       TRACE_INSN (cpu, "R%i = R%i << %i (S);", dst0, src1, count);
-      STORE (DREG (dst0), lshift (cpu, DREG (src1), count, 32, 1));
+      STORE (DREG (dst0), lshift (cpu, DREG (src1), count, 32, 1, 1));
     }
   else if (sop == 2 && sopcde == 2)
     {
@@ -5905,7 +6044,7 @@ decode_dsp32shiftimm_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
       TRACE_INSN (cpu, "R%i = R%i >> %i;", dst0, src1, count);
 
       if (count < 0)
-	STORE (DREG (dst0), lshift (cpu, DREG (src1), -count, 32, 0));
+	STORE (DREG (dst0), lshift (cpu, DREG (src1), -count, 32, 0, 1));
       else
 	STORE (DREG (dst0), lshiftrt (cpu, DREG (src1), count, 32));
     }
@@ -5931,7 +6070,7 @@ decode_dsp32shiftimm_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
       TRACE_INSN (cpu, "R%i = R%i >>> %i;", dst0, src1, count);
 
       if (count < 0)
-	STORE (DREG (dst0), lshift (cpu, DREG (src1), -count, 32, 0));
+	STORE (DREG (dst0), lshift (cpu, DREG (src1), -count, 32, 0, 1));
       else
 	STORE (DREG (dst0), ashiftrt (cpu, DREG (src1), count, 32));
     }
@@ -6165,7 +6304,7 @@ _interp_insn_bfin (SIM_CPU *cpu, bu32 pc)
       else
 	{
 	  TRACE_EXTRACT (cpu, "%s: no matching 16-bit pattern", __func__);
-	  illegal_instruction (cpu);
+	  illegal_instruction_or_combination (cpu);
 	}
       return insn_len;
     }
@@ -6178,6 +6317,7 @@ _interp_insn_bfin (SIM_CPU *cpu, bu32 pc)
       trace_prefix (sd, cpu, NULL_CIA, pc, TRACE_LINENUM_P (cpu),
 			NULL, 0, "|| %#"PRIx64, sim_events_time (sd));
       insn_len = 8;
+      PARALLEL_GROUP = BFIN_PARALLEL_GROUP0;
     }
   else
     insn_len = 4;
@@ -6188,6 +6328,9 @@ _interp_insn_bfin (SIM_CPU *cpu, bu32 pc)
   /* Only cache on first run through (in case of parallel insns).  */
   if (INSN_LEN == 0)
     INSN_LEN = insn_len;
+  else
+    /* Once you're past the first slot, only 16bit insns are valid.  */
+    illegal_instruction_combination (cpu);
 
   if ((iw0 & 0xf7ff) == 0xc003 && (iw1 & 0xfe00) == 0x1800)
     {
@@ -6236,6 +6379,7 @@ interp_insn_bfin (SIM_CPU *cpu, bu32 pc)
   bu32 insn_len;
 
   BFIN_CPU_STATE.n_stores = 0;
+  PARALLEL_GROUP = BFIN_PARALLEL_NONE;
   DIS_ALGN_EXPT &= ~1;
   CYCLE_DELAY = 1;
   INSN_LEN = 0;
@@ -6245,7 +6389,9 @@ interp_insn_bfin (SIM_CPU *cpu, bu32 pc)
   /* Proper display of multiple issue instructions.  */
   if (insn_len == 8)
     {
+      PARALLEL_GROUP = BFIN_PARALLEL_GROUP1;
       _interp_insn_bfin (cpu, pc + 4);
+      PARALLEL_GROUP = BFIN_PARALLEL_GROUP2;
       _interp_insn_bfin (cpu, pc + 6);
     }
   for (i = 0; i < BFIN_CPU_STATE.n_stores; i++)
diff --git a/sim/bfin/bfin-sim.h b/sim/bfin/bfin-sim.h
index 17bcdeb..9dadcd9 100644
--- a/sim/bfin/bfin-sim.h
+++ b/sim/bfin/bfin-sim.h
@@ -44,6 +44,13 @@ struct store {
   bu32 val;
 };
 
+enum bfin_parallel_group {
+  BFIN_PARALLEL_NONE,
+  BFIN_PARALLEL_GROUP0,	/* 32bit slot.  */
+  BFIN_PARALLEL_GROUP1,	/* 16bit group1.  */
+  BFIN_PARALLEL_GROUP2,	/* 16bit group2.  */
+};
+
 /* The KSP/USP handling wrt SP may not follow the hardware exactly (the hw
    looks at current mode and uses either SP or USP based on that.  We instead
    always operate on SP and mirror things in KSP and USP.  During a CEC
@@ -78,6 +85,10 @@ struct bfin_cpu_state
   /* The pc currently being interpreted in parallel insns.  */
   bu32 multi_pc;
 
+  /* Some insns are valid in group1, and others in group2, so we
+     need to keep track of the exact slot we're processing.  */
+  enum bfin_parallel_group group;
+
   /* Needed for supporting the DISALGNEXCPT instruction */
   int dis_algn_expt;
 
@@ -126,6 +137,7 @@ struct bfin_cpu_state
 #define EMUDAT_INREG	(BFIN_CPU_STATE.emudat[0])
 #define EMUDAT_OUTREG	(BFIN_CPU_STATE.emudat[1])
 #define INSN_LEN	(BFIN_CPU_STATE.insn_len)
+#define PARALLEL_GROUP	(BFIN_CPU_STATE.group)
 #define CYCLE_DELAY	(BFIN_CPU_STATE.cycle_delay)
 #define DIS_ALGN_EXPT	(BFIN_CPU_STATE.dis_algn_expt)
 
diff --git a/sim/bfin/config.in b/sim/bfin/config.in
index 4175dad..04d1e5d 100644
--- a/sim/bfin/config.in
+++ b/sim/bfin/config.in
@@ -130,6 +130,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -160,6 +163,28 @@
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
 #if defined AC_APPLE_UNIVERSAL_BUILD
@@ -171,3 +196,13 @@
 #  undef WORDS_BIGENDIAN
 # endif
 #endif
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/bfin/configure b/sim/bfin/configure
index fe1fc7c..c36fa89 100755
--- a/sim/bfin/configure
+++ b/sim/bfin/configure
@@ -607,9 +607,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -628,6 +625,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -635,6 +633,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -732,6 +733,7 @@ enable_sim_hostendian
 enable_sim_default_model
 enable_sim_environment
 enable_sim_inline
+enable_werror
 enable_build_warnings
 enable_sim_build_warnings
 enable_sim_hardware
@@ -1381,8 +1383,11 @@ Optional Features:
   --enable-sim-default-model=model	Specify default model to simulate.
   --enable-sim-environment=environment	Specify mixed, user, virtual or operating environment.
   --enable-sim-inline=inlines		Specify which functions should be inlined.
-  --enable-build-warnings Enable build-time compiler warnings if gcc is used
-  --enable-gdb-build-warnings Enable SIM specific build-time compiler warnings if gcc is used
+  --enable-werror         treat compile warnings as errors
+  --enable-build-warnings enable build-time compiler warnings if gcc is used
+  --enable-sim-build-warnings
+                          enable SIM specific build-time compiler warnings if
+                          gcc is used
   --enable-sim-hardware=LIST		Specify the hardware to be included in the build.
 
 Optional Packages:
@@ -3397,120 +3402,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3911,6 +3802,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3919,6 +3985,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -4024,6 +4091,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4600,7 +4678,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
@@ -5177,29 +5255,44 @@ fi
 fi
 
 
-# NOTE: Don't add -Wall or -Wunused, they both include
-# -Wunused-parameter which reports bogus warnings.
-# NOTE: If you add to this list, remember to update
-# gdb/doc/gdbint.texinfo.
-build_warnings="-Wimplicit -Wreturn-type -Wcomment -Wtrigraphs \
--Wformat -Wparentheses -Wpointer-arith"
-# GCC supports -Wuninitialized only with -O or -On, n != 0.
-if test x${CFLAGS+set} = xset; then
-  case "${CFLAGS}" in
-    *"-O0"* ) ;;
-    *"-O"* )
-      build_warnings="${build_warnings} -Wuninitialized"
-    ;;
-  esac
-else
-  build_warnings="${build_warnings} -Wuninitialized"
+# Check whether --enable-werror was given.
+if test "${enable_werror+set}" = set; then :
+  enableval=$enable_werror; case "${enableval}" in
+     yes | y) ERROR_ON_WARNING="yes" ;;
+     no | n)  ERROR_ON_WARNING="no" ;;
+     *) as_fn_error "bad value ${enableval} for --enable-werror" "$LINENO" 5 ;;
+   esac
+fi
+
+
+# Enable -Werror by default when using gcc
+if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
+    ERROR_ON_WARNING=yes
 fi
-# Up for debate: -Wswitch -Wcomment -trigraphs -Wtrigraphs
-# -Wunused-function -Wunused-label -Wunused-variable -Wunused-value
-# -Wchar-subscripts -Wtraditional -Wshadow -Wcast-qual
-# -Wcast-align -Wwrite-strings -Wconversion -Wstrict-prototypes
-# -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls
-# -Woverloaded-virtual -Winline -Werror"
+
+WERROR_CFLAGS=""
+if test "${ERROR_ON_WARNING}" = yes ; then
+# NOTE: Disabled in the sim dir due to most sims generating warnings.
+#    WERROR_CFLAGS="-Werror"
+     true
+fi
+
+# The entries after -Wno-pointer-sign are disabled warnings which may
+# be enabled in the future, which can not currently be used to build
+# GDB.
+# NOTE: If you change this list, remember to update
+# gdb/doc/gdbint.texinfo.
+build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \
+-Wformat-nonliteral -Wno-pointer-sign \
+-Wno-unused -Wunused-value -Wunused-function \
+-Wno-switch -Wno-char-subscripts -Wmissing-prototypes"
+
+# Enable -Wno-format by default when using gcc on mingw since many
+# GCC versions complain about %I64.
+case "${host}" in
+  *-*-mingw32*) build_warnings="$build_warnings -Wno-format" ;;
+esac
+
 # Check whether --enable-build-warnings was given.
 if test "${enable_build_warnings+set}" = set; then :
   enableval=$enable_build_warnings; case "${enableval}" in
@@ -5231,7 +5324,6 @@ if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
 fi
 fi
 WARN_CFLAGS=""
-WERROR_CFLAGS=""
 if test "x${build_warnings}" != x -a "x$GCC" = xyes
 then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler warning flags" >&5
@@ -5262,8 +5354,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 	    CFLAGS="$saved_CFLAGS"
 	esac
     done
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS}${WERROR_CFLAGS}" >&5
-$as_echo "${WARN_CFLAGS}${WERROR_CFLAGS}" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS} ${WERROR_CFLAGS}" >&5
+$as_echo "${WARN_CFLAGS} ${WERROR_CFLAGS}" >&6; }
 fi
 
 
@@ -5289,12 +5381,14 @@ hardware="$hardware \
 	bfin_eppi \
 	bfin_evt \
 	bfin_gpio \
+	bfin_gpio2 \
 	bfin_gptimer \
 	bfin_jtag \
 	bfin_mmu \
 	bfin_nfc \
 	bfin_otp \
 	bfin_pfmon \
+	bfin_pint \
 	bfin_pll \
 	bfin_ppi \
 	bfin_rtc \
diff --git a/sim/bfin/configure.ac b/sim/bfin/configure.ac
index cda3ac9..edf09ba 100644
--- a/sim/bfin/configure.ac
+++ b/sim/bfin/configure.ac
@@ -24,12 +24,14 @@ SIM_AC_OPTION_HARDWARE(yes,,\
 	bfin_eppi \
 	bfin_evt \
 	bfin_gpio \
+	bfin_gpio2 \
 	bfin_gptimer \
 	bfin_jtag \
 	bfin_mmu \
 	bfin_nfc \
 	bfin_otp \
 	bfin_pfmon \
+	bfin_pint \
 	bfin_pll \
 	bfin_ppi \
 	bfin_rtc \
diff --git a/sim/bfin/devices.c b/sim/bfin/devices.c
index d3fa95f..b18f1b6 100644
--- a/sim/bfin/devices.c
+++ b/sim/bfin/devices.c
@@ -23,6 +23,7 @@
 #include "sim-main.h"
 #include "sim-hw.h"
 #include "hw-device.h"
+#include "devices.h"
 #include "dv-bfin_cec.h"
 #include "dv-bfin_mmu.h"
 
diff --git a/sim/bfin/dv-bfin_ebiu_amc.c b/sim/bfin/dv-bfin_ebiu_amc.c
index 2e372f7..280cce4 100644
--- a/sim/bfin/dv-bfin_ebiu_amc.c
+++ b/sim/bfin/dv-bfin_ebiu_amc.c
@@ -29,7 +29,7 @@ struct bfin_ebiu_amc
 {
   bu32 base;
   int type;
-  bu32 bank_size;
+  bu32 bank_base, bank_size;
   unsigned (*io_write) (struct hw *, const void *, int, address_word,
 			unsigned, struct bfin_ebiu_amc *, bu32, bu32);
   unsigned (*io_read) (struct hw *, void *, int, address_word, unsigned,
@@ -89,7 +89,7 @@ bfin_ebiu_amc_write_amgctl (struct hw *me, struct bfin_ebiu_amc *amc,
 
   for (i = 0; i < 4; ++i)
     {
-      addr = BFIN_EBIU_AMC_BASE + i * amc->bank_size;
+      addr = amc->bank_base + i * amc->bank_size;
 
       if (i < amben_old)
 	{
@@ -335,7 +335,7 @@ bfin_ebiu_amc_attach_address_callback (struct hw *me,
   HW_TRACE ((me, "attach - level=%d, space=%d, addr=0x%lx, nr_bytes=%lu, client=%s",
 	     level, space, (unsigned long) addr, (unsigned long) nr_bytes, hw_path (client)));
 
-  if (addr + nr_bytes > 4)
+  if (addr + nr_bytes > ARRAY_SIZE (amc->slaves))
     hw_abort (me, "ebiu amc attaches are done in terms of banks");
 
   while (nr_bytes--)
@@ -401,6 +401,7 @@ bfin_ebiu_amc_finish (struct hw *me)
       reg_size = sizeof (amc->bf50x) + 4;
 
       /* Initialize the AMC.  */
+      amc->bank_base     = BFIN_EBIU_AMC_BASE;
       amc->bank_size     = 1 * 1024 * 1024;
       amgctl             = 0x00F3;
       amc->bf50x.ambctl0 = 0x0000FFC2;
@@ -415,6 +416,7 @@ bfin_ebiu_amc_finish (struct hw *me)
       reg_size = sizeof (amc->bf54x) + 4;
 
       /* Initialize the AMC.  */
+      amc->bank_base     = BFIN_EBIU_AMC_BASE;
       amc->bank_size     = 64 * 1024 * 1024;
       amgctl             = 0x0002;
       amc->bf54x.ambctl0 = 0xFFC2FFC2;
@@ -435,6 +437,7 @@ bfin_ebiu_amc_finish (struct hw *me)
       reg_size = sizeof (amc->bf53x) + 4;
 
       /* Initialize the AMC.  */
+      amc->bank_base     = BFIN_EBIU_AMC_BASE;
       if (amc->type == 561)
 	amc->bank_size   = 64 * 1024 * 1024;
       else
diff --git a/sim/bfin/dv-bfin_gpio2.c b/sim/bfin/dv-bfin_gpio2.c
new file mode 100644
index 0000000..0e8787e
--- /dev/null
+++ b/sim/bfin/dv-bfin_gpio2.c
@@ -0,0 +1,284 @@
+/* Blackfin General Purpose Ports (GPIO) model
+   For "new style" GPIOs on BF54x parts.
+
+   Copyright (C) 2010-2012 Free Software Foundation, Inc.
+   Contributed by Analog Devices, Inc. and Mike Frysinger.
+
+   This file is part of simulators.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+
+#include "sim-main.h"
+#include "devices.h"
+#include "dv-bfin_gpio2.h"
+
+struct bfin_gpio
+{
+  bu32 base;
+
+  /* Only accessed indirectly via dir_{set,clear}.  */
+  bu16 dir;
+
+  /* Make sure hardware MMRs are aligned.  */
+  bu16 _pad;
+
+  /* Order after here is important -- matches hardware MMR layout.  */
+  bu16 BFIN_MMR_16(fer);
+  bu16 BFIN_MMR_16(data);
+  bu16 BFIN_MMR_16(set);
+  bu16 BFIN_MMR_16(clear);
+  bu16 BFIN_MMR_16(dir_set);
+  bu16 BFIN_MMR_16(dir_clear);
+  bu16 BFIN_MMR_16(inen);
+  bu32 mux;
+};
+#define mmr_base()      offsetof(struct bfin_gpio, fer)
+#define mmr_offset(mmr) (offsetof(struct bfin_gpio, mmr) - mmr_base())
+
+static const char * const mmr_names[] =
+{
+  "PORTIO_FER", "PORTIO", "PORTIO_SET", "PORTIO_CLEAR", "PORTIO_DIR_SET",
+  "PORTIO_DIR_CLEAR", "PORTIO_INEN", "PORTIO_MUX",
+};
+#define mmr_name(off) mmr_names[(off) / 4]
+
+static unsigned
+bfin_gpio_io_write_buffer (struct hw *me, const void *source, int space,
+			   address_word addr, unsigned nr_bytes)
+{
+  struct bfin_gpio *port = hw_data (me);
+  bu32 mmr_off;
+  bu32 value;
+  bu16 *value16p;
+  bu32 *value32p;
+  void *valuep;
+
+  if (nr_bytes == 4)
+    value = dv_load_4 (source);
+  else
+    value = dv_load_2 (source);
+  mmr_off = addr - port->base;
+  valuep = (void *)((unsigned long)port + mmr_base() + mmr_off);
+  value16p = valuep;
+  value32p = valuep;
+
+  HW_TRACE_WRITE ();
+
+  if (mmr_off == mmr_offset (mux))
+    dv_bfin_mmr_require_32 (me, addr, nr_bytes, true);
+  else
+    dv_bfin_mmr_require_16 (me, addr, nr_bytes, true);
+
+  switch (mmr_off)
+    {
+    case mmr_offset(fer):
+    case mmr_offset(data):
+    case mmr_offset(inen):
+      *value16p = value;
+      break;
+    case mmr_offset(clear):
+      /* We want to clear the related data MMR.  */
+      dv_w1c_2 (&port->data, value, -1);
+      break;
+    case mmr_offset(set):
+      /* We want to set the related data MMR.  */
+      port->data |= value;
+      break;
+    case mmr_offset(dir_clear):
+      dv_w1c_2 (&port->dir, value, -1);
+      break;
+    case mmr_offset(dir_set):
+      port->dir |= value;
+      break;
+    case mmr_offset(mux):
+      *value32p = value;
+      break;
+    default:
+      dv_bfin_mmr_invalid (me, addr, nr_bytes, true);
+      break;
+    }
+
+  /* If tweaking output pins, make sure we send updated port info.  */
+  switch (mmr_off)
+    {
+    case mmr_offset(data):
+    case mmr_offset(set):
+    case mmr_offset(clear):
+    case mmr_offset(dir_set):
+      {
+	int i;
+	bu32 bit;
+
+	for (i = 0; i < 16; ++i)
+	  {
+	    bit = (1 << i);
+
+	    if (!(port->inen & bit))
+	      hw_port_event (me, i, !!(port->data & bit));
+	  }
+
+	break;
+      }
+    }
+
+  return nr_bytes;
+}
+
+static unsigned
+bfin_gpio_io_read_buffer (struct hw *me, void *dest, int space,
+			  address_word addr, unsigned nr_bytes)
+{
+  struct bfin_gpio *port = hw_data (me);
+  bu32 mmr_off;
+  bu16 *value16p;
+  bu32 *value32p;
+  void *valuep;
+
+  mmr_off = addr - port->base;
+  valuep = (void *)((unsigned long)port + mmr_base() + mmr_off);
+  value16p = valuep;
+  value32p = valuep;
+
+  HW_TRACE_READ ();
+
+  if (mmr_off == mmr_offset (mux))
+    dv_bfin_mmr_require_32 (me, addr, nr_bytes, false);
+  else
+    dv_bfin_mmr_require_16 (me, addr, nr_bytes, false);
+
+  switch (mmr_off)
+    {
+    case mmr_offset(data):
+    case mmr_offset(clear):
+    case mmr_offset(set):
+      dv_store_2 (dest, port->data);
+      break;
+    case mmr_offset(dir_clear):
+    case mmr_offset(dir_set):
+      dv_store_2 (dest, port->dir);
+      break;
+    case mmr_offset(fer):
+    case mmr_offset(inen):
+      dv_store_2 (dest, *value16p);
+      break;
+    case mmr_offset(mux):
+      dv_store_4 (dest, *value32p);
+      break;
+    default:
+      dv_bfin_mmr_invalid (me, addr, nr_bytes, false);
+      break;
+    }
+
+  return nr_bytes;
+}
+
+static const struct hw_port_descriptor bfin_gpio_ports[] =
+{
+  { "p0",     0, 0, bidirect_port, },
+  { "p1",     1, 0, bidirect_port, },
+  { "p2",     2, 0, bidirect_port, },
+  { "p3",     3, 0, bidirect_port, },
+  { "p4",     4, 0, bidirect_port, },
+  { "p5",     5, 0, bidirect_port, },
+  { "p6",     6, 0, bidirect_port, },
+  { "p7",     7, 0, bidirect_port, },
+  { "p8",     8, 0, bidirect_port, },
+  { "p9",     9, 0, bidirect_port, },
+  { "p10",   10, 0, bidirect_port, },
+  { "p11",   11, 0, bidirect_port, },
+  { "p12",   12, 0, bidirect_port, },
+  { "p13",   13, 0, bidirect_port, },
+  { "p14",   14, 0, bidirect_port, },
+  { "p15",   15, 0, bidirect_port, },
+  { NULL, 0, 0, 0, },
+};
+
+static void
+bfin_gpio_port_event (struct hw *me, int my_port, struct hw *source,
+		      int source_port, int level)
+{
+  struct bfin_gpio *port = hw_data (me);
+  bu32 bit = (1 << my_port);
+
+  /* Normalize the level value.  A simulated device can send any value
+     it likes to us, but in reality we only care about 0 and 1.  This
+     lets us assume only those two values below.  */
+  level = !!level;
+
+  HW_TRACE ((me, "pin %i set to %i", my_port, level));
+
+  /* Only screw with state if this pin is set as an input, and the
+     input is actually enabled, and it isn't in peripheral mode.  */
+  if ((port->dir & bit) || !(port->inen & bit) || !(port->fer & bit))
+    {
+      HW_TRACE ((me, "ignoring level due to DIR=%i INEN=%i FER=%i",
+		 !!(port->dir & bit), !!(port->inen & bit),
+		 !!(port->fer & bit)));
+      return;
+    }
+
+  hw_port_event (me, my_port, level);
+}
+
+static void
+attach_bfin_gpio_regs (struct hw *me, struct bfin_gpio *port)
+{
+  address_word attach_address;
+  int attach_space;
+  unsigned attach_size;
+  reg_property_spec reg;
+
+  if (hw_find_property (me, "reg") == NULL)
+    hw_abort (me, "Missing \"reg\" property");
+
+  if (!hw_find_reg_array_property (me, "reg", 0, &reg))
+    hw_abort (me, "\"reg\" property must contain three addr/size entries");
+
+  hw_unit_address_to_attach_address (hw_parent (me),
+				     &reg.address,
+				     &attach_space, &attach_address, me);
+  hw_unit_size_to_attach_size (hw_parent (me), &reg.size, &attach_size, me);
+
+  if (attach_size != BFIN_MMR_GPIO2_SIZE)
+    hw_abort (me, "\"reg\" size must be %#x", BFIN_MMR_GPIO2_SIZE);
+
+  hw_attach_address (hw_parent (me),
+		     0, attach_space, attach_address, attach_size, me);
+
+  port->base = attach_address;
+}
+
+static void
+bfin_gpio_finish (struct hw *me)
+{
+  struct bfin_gpio *port;
+
+  port = HW_ZALLOC (me, struct bfin_gpio);
+
+  set_hw_data (me, port);
+  set_hw_io_read_buffer (me, bfin_gpio_io_read_buffer);
+  set_hw_io_write_buffer (me, bfin_gpio_io_write_buffer);
+  set_hw_ports (me, bfin_gpio_ports);
+  set_hw_port_event (me, bfin_gpio_port_event);
+
+  attach_bfin_gpio_regs (me, port);
+}
+
+const struct hw_descriptor dv_bfin_gpio2_descriptor[] =
+{
+  {"bfin_gpio2", bfin_gpio_finish,},
+  {NULL, NULL},
+};
diff --git a/sim/bfin/dv-bfin_gpio2.h b/sim/bfin/dv-bfin_gpio2.h
new file mode 100644
index 0000000..7e9e94e
--- /dev/null
+++ b/sim/bfin/dv-bfin_gpio2.h
@@ -0,0 +1,25 @@
+/* Blackfin General Purpose Ports (GPIO) model
+   For "new style" GPIOs on BF54x parts.
+
+   Copyright (C) 2010-2012 Free Software Foundation, Inc.
+   Contributed by Analog Devices, Inc. and Mike Frysinger.
+
+   This file is part of simulators.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef DV_BFIN_GPIO2_H
+#define DV_BFIN_GPIO2_H
+
+#endif
diff --git a/sim/bfin/dv-bfin_pint.c b/sim/bfin/dv-bfin_pint.c
new file mode 100644
index 0000000..0fa3c7e
--- /dev/null
+++ b/sim/bfin/dv-bfin_pint.c
@@ -0,0 +1,298 @@
+/* Blackfin Pin Interrupt (PINT) model
+
+   Copyright (C) 2010-2012 Free Software Foundation, Inc.
+   Contributed by Analog Devices, Inc. and Mike Frysinger.
+
+   This file is part of simulators.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+
+#include "sim-main.h"
+#include "devices.h"
+#include "dv-bfin_pint.h"
+
+struct bfin_pint
+{
+  bu32 base;
+
+  /* Only accessed indirectly via the associated set/clear MMRs.  */
+  bu32 mask, edge, invert;
+
+  /* Order after here is important -- matches hardware MMR layout.  */
+  bu32 mask_set;
+  bu32 mask_clear;
+  bu32 request;
+  bu32 assign;
+  bu32 edge_set;
+  bu32 edge_clear;
+  bu32 invert_set;
+  bu32 invert_clear;
+  bu32 pinstate;
+  bu32 latch;
+};
+#define mmr_base()      offsetof(struct bfin_pint, mask_set)
+#define mmr_offset(mmr) (offsetof(struct bfin_pint, mmr) - mmr_base())
+
+static const char * const mmr_names[] =
+{
+  "PINT_MASK_SET", "PINT_MASK_CLEAR", "PINT_REQUEST", "PINT_ASSIGN",
+  "PINT_EDGE_SET", "PINT_EDGE_CLEAR", "PINT_INVERT_SET",
+  "PINT_INVERT_CLEAR", "PINT_PINSTATE", "PINT_LATCH",
+};
+#define mmr_name(off) mmr_names[(off) / 4]
+
+static unsigned
+bfin_pint_io_write_buffer (struct hw *me, const void *source, int space,
+			   address_word addr, unsigned nr_bytes)
+{
+  struct bfin_pint *pint = hw_data (me);
+  bu32 mmr_off;
+  bu32 value;
+  bu32 *valuep;
+
+  if (nr_bytes == 4)
+    value = dv_load_4 (source);
+  else
+    value = dv_load_2 (source);
+  mmr_off = addr - pint->base;
+  valuep = (void *)((unsigned long)pint + mmr_base() + mmr_off);
+
+  HW_TRACE_WRITE ();
+
+  /* XXX: The hardware allows 16 or 32 bit accesses ...  */
+  dv_bfin_mmr_require_32 (me, addr, nr_bytes, true);
+
+  switch (mmr_off)
+    {
+    case mmr_offset(request):
+    case mmr_offset(assign):
+    case mmr_offset(pinstate):
+    case mmr_offset(latch):
+      *valuep = value;
+      break;
+    case mmr_offset(mask_set):
+      dv_w1c_4 (&pint->mask, value, -1);
+      break;
+    case mmr_offset(mask_clear):
+      pint->mask |= value;
+      break;
+    case mmr_offset(edge_set):
+      dv_w1c_4 (&pint->edge, value, -1);
+      break;
+    case mmr_offset(edge_clear):
+      pint->edge |= value;
+      break;
+    case mmr_offset(invert_set):
+      dv_w1c_4 (&pint->invert, value, -1);
+      break;
+    case mmr_offset(invert_clear):
+      pint->invert |= value;
+      break;
+    default:
+      dv_bfin_mmr_invalid (me, addr, nr_bytes, true);
+      break;
+    }
+
+#if 0
+  /* If updating masks, make sure we send updated port info.  */
+  switch (mmr_off)
+    {
+    case mmr_offset(dir):
+    case mmr_offset(data) ... mmr_offset(toggle):
+      bfin_pint_forward_ouput (me, pint, data);
+      break;
+    case mmr_offset(maska) ... mmr_offset(maska_toggle):
+      bfin_pint_forward_int (me, pint, pint->maska, 0);
+      break;
+    case mmr_offset(maskb) ... mmr_offset(maskb_toggle):
+      bfin_pint_forward_int (me, pint, pint->maskb, 1);
+      break;
+    }
+#endif
+
+  return nr_bytes;
+}
+
+static unsigned
+bfin_pint_io_read_buffer (struct hw *me, void *dest, int space,
+			  address_word addr, unsigned nr_bytes)
+{
+  struct bfin_pint *pint = hw_data (me);
+  bu32 mmr_off;
+  bu32 *valuep;
+
+  mmr_off = addr - pint->base;
+  valuep = (void *)((unsigned long)pint + mmr_base() + mmr_off);
+
+  HW_TRACE_READ ();
+
+  /* XXX: The hardware allows 16 or 32 bit accesses ...  */
+  dv_bfin_mmr_require_32 (me, addr, nr_bytes, false);
+
+  switch (mmr_off)
+    {
+    case mmr_offset(request):
+    case mmr_offset(assign):
+    case mmr_offset(pinstate):
+    case mmr_offset(latch):
+      dv_store_4 (dest, *valuep);
+      break;
+    case mmr_offset(mask_set):
+    case mmr_offset(mask_clear):
+      dv_store_4 (dest, pint->mask);
+      break;
+    case mmr_offset(edge_set):
+    case mmr_offset(edge_clear):
+      dv_store_4 (dest, pint->edge);
+      break;
+    case mmr_offset(invert_set):
+    case mmr_offset(invert_clear):
+      dv_store_4 (dest, pint->invert);
+      break;
+    default:
+      dv_bfin_mmr_invalid (me, addr, nr_bytes, false);
+      break;
+    }
+
+  return nr_bytes;
+}
+
+#define ENC(bmap, piq) (((bmap) << 8) + (piq))
+
+#define PIQ_PORTS(n) \
+  { "piq0@"#n,   ENC(n,  0), 0, input_port, }, \
+  { "piq1@"#n,   ENC(n,  1), 0, input_port, }, \
+  { "piq2@"#n,   ENC(n,  2), 0, input_port, }, \
+  { "piq3@"#n,   ENC(n,  3), 0, input_port, }, \
+  { "piq4@"#n,   ENC(n,  4), 0, input_port, }, \
+  { "piq5@"#n,   ENC(n,  5), 0, input_port, }, \
+  { "piq6@"#n,   ENC(n,  6), 0, input_port, }, \
+  { "piq7@"#n,   ENC(n,  7), 0, input_port, }, \
+  { "piq8@"#n,   ENC(n,  8), 0, input_port, }, \
+  { "piq9@"#n,   ENC(n,  9), 0, input_port, }, \
+  { "piq10@"#n,  ENC(n, 10), 0, input_port, }, \
+  { "piq11@"#n,  ENC(n, 11), 0, input_port, }, \
+  { "piq12@"#n,  ENC(n, 12), 0, input_port, }, \
+  { "piq13@"#n,  ENC(n, 13), 0, input_port, }, \
+  { "piq14@"#n,  ENC(n, 14), 0, input_port, }, \
+  { "piq15@"#n,  ENC(n, 15), 0, input_port, }, \
+  { "piq16@"#n,  ENC(n, 16), 0, input_port, }, \
+  { "piq17@"#n,  ENC(n, 17), 0, input_port, }, \
+  { "piq18@"#n,  ENC(n, 18), 0, input_port, }, \
+  { "piq19@"#n,  ENC(n, 19), 0, input_port, }, \
+  { "piq20@"#n,  ENC(n, 20), 0, input_port, }, \
+  { "piq21@"#n,  ENC(n, 21), 0, input_port, }, \
+  { "piq22@"#n,  ENC(n, 22), 0, input_port, }, \
+  { "piq23@"#n,  ENC(n, 23), 0, input_port, }, \
+  { "piq24@"#n,  ENC(n, 24), 0, input_port, }, \
+  { "piq25@"#n,  ENC(n, 25), 0, input_port, }, \
+  { "piq26@"#n,  ENC(n, 26), 0, input_port, }, \
+  { "piq27@"#n,  ENC(n, 27), 0, input_port, }, \
+  { "piq28@"#n,  ENC(n, 28), 0, input_port, }, \
+  { "piq29@"#n,  ENC(n, 29), 0, input_port, }, \
+  { "piq30@"#n,  ENC(n, 30), 0, input_port, }, \
+  { "piq31@"#n,  ENC(n, 31), 0, input_port, },
+
+static const struct hw_port_descriptor bfin_pint_ports[] =
+{
+  { "stat", 0, 0, output_port, },
+  PIQ_PORTS(0)
+  PIQ_PORTS(1)
+  PIQ_PORTS(2)
+  PIQ_PORTS(3)
+  PIQ_PORTS(4)
+  PIQ_PORTS(5)
+  PIQ_PORTS(6)
+  PIQ_PORTS(7)
+  { NULL, 0, 0, 0, },
+};
+
+static void
+bfin_pint_port_event (struct hw *me, int my_port, struct hw *source,
+		      int source_port, int level)
+{
+  /* XXX: TODO.  */
+}
+
+static void
+attach_bfin_pint_regs (struct hw *me, struct bfin_pint *pint)
+{
+  address_word attach_address;
+  int attach_space;
+  unsigned attach_size;
+  reg_property_spec reg;
+
+  if (hw_find_property (me, "reg") == NULL)
+    hw_abort (me, "Missing \"reg\" property");
+
+  if (!hw_find_reg_array_property (me, "reg", 0, &reg))
+    hw_abort (me, "\"reg\" property must contain three addr/size entries");
+
+  hw_unit_address_to_attach_address (hw_parent (me),
+				     &reg.address,
+				     &attach_space, &attach_address, me);
+  hw_unit_size_to_attach_size (hw_parent (me), &reg.size, &attach_size, me);
+
+  if (attach_size != BFIN_MMR_PINT_SIZE)
+    hw_abort (me, "\"reg\" size must be %#x", BFIN_MMR_PINT_SIZE);
+
+  hw_attach_address (hw_parent (me),
+		     0, attach_space, attach_address, attach_size, me);
+
+  pint->base = attach_address;
+}
+
+static void
+bfin_pint_finish (struct hw *me)
+{
+  struct bfin_pint *pint;
+
+  pint = HW_ZALLOC (me, struct bfin_pint);
+
+  set_hw_data (me, pint);
+  set_hw_io_read_buffer (me, bfin_pint_io_read_buffer);
+  set_hw_io_write_buffer (me, bfin_pint_io_write_buffer);
+  set_hw_ports (me, bfin_pint_ports);
+  set_hw_port_event (me, bfin_pint_port_event);
+
+  /* Initialize the PINT.  */
+  switch (dv_get_bus_num (me))
+    {
+    case 0:
+      pint->assign = 0x00000101;
+      break;
+    case 1:
+      pint->assign = 0x01010000;
+      break;
+    case 2:
+      pint->assign = 0x00000101;
+      break;
+    case 3:
+      pint->assign = 0x02020303;
+      break;
+    default:
+      /* XXX: Should move this default into device tree.  */
+      hw_abort (me, "no support for PINT at this address yet");
+    }
+
+  attach_bfin_pint_regs (me, pint);
+}
+
+const struct hw_descriptor dv_bfin_pint_descriptor[] =
+{
+  {"bfin_pint", bfin_pint_finish,},
+  {NULL, NULL},
+};
diff --git a/sim/bfin/dv-bfin_pint.h b/sim/bfin/dv-bfin_pint.h
new file mode 100644
index 0000000..4966d12
--- /dev/null
+++ b/sim/bfin/dv-bfin_pint.h
@@ -0,0 +1,24 @@
+/* Blackfin Pin Interrupt (PINT) model
+
+   Copyright (C) 2010-2012 Free Software Foundation, Inc.
+   Contributed by Analog Devices, Inc. and Mike Frysinger.
+
+   This file is part of simulators.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef DV_BFIN_PINT_H
+#define DV_BFIN_PINT_H
+
+#endif
diff --git a/sim/bfin/dv-bfin_sic.c b/sim/bfin/dv-bfin_sic.c
index 277e4e1..a565575 100644
--- a/sim/bfin/dv-bfin_sic.c
+++ b/sim/bfin/dv-bfin_sic.c
@@ -926,7 +926,7 @@ bfin_sic_finish (struct hw *me)
       /* Initialize the SIC.  */
       sic->bf54x.imask0 = sic->bf54x.imask1 = sic->bf54x.imask2 = 0;
       sic->bf54x.isr0 = sic->bf54x.isr1 = sic->bf54x.isr2 = 0;
-      sic->bf54x.iwr0 = sic->bf54x.iwr1 = sic->bf54x.iwr1 = 0xFFFFFFFF;
+      sic->bf54x.iwr0 = sic->bf54x.iwr1 = sic->bf54x.iwr2 = 0xFFFFFFFF;
       sic->bf54x.iar0 = 0x10000000;
       sic->bf54x.iar1 = 0x33322221;
       sic->bf54x.iar2 = 0x66655444;
diff --git a/sim/bfin/interp.c b/sim/bfin/interp.c
index f82e737..a367195 100644
--- a/sim/bfin/interp.c
+++ b/sim/bfin/interp.c
@@ -1051,7 +1051,7 @@ bfin_user_init (SIM_DESC sd, SIM_CPU *cpu, struct bfd *abfd,
 
   /* start, at_phdr, at_phnum, at_base, at_entry, pt_dynamic  */
   bu32 elf_addrs[6];
-  bu32 auxvt, auxvt_size;
+  bu32 auxvt;
   bu32 exec_loadmap, ldso_loadmap;
   char *ldso_path;
 
@@ -1144,9 +1144,9 @@ bfin_user_init (SIM_DESC sd, SIM_CPU *cpu, struct bfd *abfd,
   sp -= 4; \
   auxvt = (at); \
   sim_write (sd, sp, (void *)&auxvt, 4)
-  auxvt_size = 0;
       unsigned int egid = getegid (), gid = getgid ();
       unsigned int euid = geteuid (), uid = getuid ();
+      bu32 auxvt_size = 0;
       AT_PUSH (AT_NULL, 0);
       AT_PUSH (AT_SECURE, egid != gid || euid != uid);
       AT_PUSH (AT_EGID, egid);
diff --git a/sim/bfin/machs.c b/sim/bfin/machs.c
index ed6b0b1..4e5a694 100644
--- a/sim/bfin/machs.c
+++ b/sim/bfin/machs.c
@@ -1,7 +1,7 @@
 /* Simulator for Analog Devices Blackfin processors.
 
    Copyright (C) 2005-2012 Free Software Foundation, Inc.
-   Contributed by Analog Devices, Inc.
+   Contributed by Analog Devices, Inc. and Mike Frysinger.
 
    This file is part of simulators.
 
@@ -885,7 +885,6 @@ static const struct bfin_memory_layout bf54x_mem[] =
 {
   LAYOUT (0xFFC00800, 0x60, read_write),	/* SPORT0 stub XXX: not on BF542/4 */
   LAYOUT (0xFFC00900, 0x60, read_write),	/* SPORT1 stub */
-  LAYOUT (0xFFC01400, 0x200, read_write),	/* PORT/GPIO stub */
   LAYOUT (0xFFC02500, 0x60, read_write),	/* SPORT2 stub */
   LAYOUT (0xFFC02600, 0x60, read_write),	/* SPORT3 stub */
   LAYOUT (0xFFC03800, 0x70, read_write),	/* ATAPI stub */
@@ -915,6 +914,20 @@ static const struct bfin_dev_layout bf542_dev[] =
   DEVICE (0xFFC00A00, BF54X_MMR_EBIU_AMC_SIZE, "bfin_ebiu_amc"),
   DEVICE (0xFFC00A20, BFIN_MMR_EBIU_DDRC_SIZE, "bfin_ebiu_ddrc"),
  _DEVICE (0xFFC01300, BFIN_MMR_EPPI_SIZE,      "bfin_eppi at 1", 1),
+  DEVICE (0xFFC01400, BFIN_MMR_PINT_SIZE,      "bfin_pint at 0"),
+  DEVICE (0xFFC01430, BFIN_MMR_PINT_SIZE,      "bfin_pint at 1"),
+ _DEVICE (0xFFC01460, BFIN_MMR_PINT_SIZE,      "bfin_pint at 2", 2),
+ _DEVICE (0xFFC01490, BFIN_MMR_PINT_SIZE,      "bfin_pint at 3", 2),
+  DEVICE (0xFFC014C0, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 0"),
+  DEVICE (0xFFC014E0, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 1"),
+  DEVICE (0xFFC01500, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 2"),
+  DEVICE (0xFFC01520, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 3"),
+  DEVICE (0xFFC01540, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 4"),
+  DEVICE (0xFFC01560, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 5"),
+  DEVICE (0xFFC01580, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 6"),
+  DEVICE (0xFFC015A0, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 7"),
+  DEVICE (0xFFC015C0, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 8"),
+  DEVICE (0xFFC015E0, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 9"),
   DEVICE (0xFFC01600, BFIN_MMR_GPTIMER_SIZE,   "bfin_gptimer at 0"),
   DEVICE (0xFFC01610, BFIN_MMR_GPTIMER_SIZE,   "bfin_gptimer at 1"),
   DEVICE (0xFFC01620, BFIN_MMR_GPTIMER_SIZE,   "bfin_gptimer at 2"),
@@ -945,6 +958,20 @@ static const struct bfin_dev_layout bf544_dev[] =
   DEVICE (0xFFC00A20, BFIN_MMR_EBIU_DDRC_SIZE, "bfin_ebiu_ddrc"),
  _DEVICE (0xFFC01000, BFIN_MMR_EPPI_SIZE,      "bfin_eppi at 0", 1),
  _DEVICE (0xFFC01300, BFIN_MMR_EPPI_SIZE,      "bfin_eppi at 1", 1),
+  DEVICE (0xFFC01400, BFIN_MMR_PINT_SIZE,      "bfin_pint at 0"),
+  DEVICE (0xFFC01430, BFIN_MMR_PINT_SIZE,      "bfin_pint at 1"),
+ _DEVICE (0xFFC01460, BFIN_MMR_PINT_SIZE,      "bfin_pint at 2", 2),
+ _DEVICE (0xFFC01490, BFIN_MMR_PINT_SIZE,      "bfin_pint at 3", 2),
+  DEVICE (0xFFC014C0, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 0"),
+  DEVICE (0xFFC014E0, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 1"),
+  DEVICE (0xFFC01500, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 2"),
+  DEVICE (0xFFC01520, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 3"),
+  DEVICE (0xFFC01540, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 4"),
+  DEVICE (0xFFC01560, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 5"),
+  DEVICE (0xFFC01580, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 6"),
+  DEVICE (0xFFC015A0, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 7"),
+  DEVICE (0xFFC015C0, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 8"),
+  DEVICE (0xFFC015E0, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 9"),
   DEVICE (0xFFC01600, BFIN_MMR_GPTIMER_SIZE,   "bfin_gptimer at 0"),
   DEVICE (0xFFC01610, BFIN_MMR_GPTIMER_SIZE,   "bfin_gptimer at 1"),
   DEVICE (0xFFC01620, BFIN_MMR_GPTIMER_SIZE,   "bfin_gptimer at 2"),
@@ -976,6 +1003,20 @@ static const struct bfin_dev_layout bf547_dev[] =
   DEVICE (0xFFC00A20, BFIN_MMR_EBIU_DDRC_SIZE, "bfin_ebiu_ddrc"),
  _DEVICE (0xFFC01000, BFIN_MMR_EPPI_SIZE,      "bfin_eppi at 0", 1),
  _DEVICE (0xFFC01300, BFIN_MMR_EPPI_SIZE,      "bfin_eppi at 1", 1),
+  DEVICE (0xFFC01400, BFIN_MMR_PINT_SIZE,      "bfin_pint at 0"),
+  DEVICE (0xFFC01430, BFIN_MMR_PINT_SIZE,      "bfin_pint at 1"),
+ _DEVICE (0xFFC01460, BFIN_MMR_PINT_SIZE,      "bfin_pint at 2", 2),
+ _DEVICE (0xFFC01490, BFIN_MMR_PINT_SIZE,      "bfin_pint at 3", 2),
+  DEVICE (0xFFC014C0, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 0"),
+  DEVICE (0xFFC014E0, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 1"),
+  DEVICE (0xFFC01500, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 2"),
+  DEVICE (0xFFC01520, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 3"),
+  DEVICE (0xFFC01540, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 4"),
+  DEVICE (0xFFC01560, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 5"),
+  DEVICE (0xFFC01580, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 6"),
+  DEVICE (0xFFC015A0, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 7"),
+  DEVICE (0xFFC015C0, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 8"),
+  DEVICE (0xFFC015E0, BFIN_MMR_GPIO2_SIZE,     "bfin_gpio2 at 9"),
   DEVICE (0xFFC01600, BFIN_MMR_GPTIMER_SIZE,   "bfin_gptimer at 0"),
   DEVICE (0xFFC01610, BFIN_MMR_GPTIMER_SIZE,   "bfin_gptimer at 1"),
   DEVICE (0xFFC01620, BFIN_MMR_GPTIMER_SIZE,   "bfin_gptimer at 2"),
@@ -1005,6 +1046,23 @@ static const struct bfin_dmac_layout bf54x_dmac[] =
 #define bf547_dmac bf54x_dmac
 #define bf548_dmac bf54x_dmac
 #define bf549_dmac bf54x_dmac
+#define PINT_PIQS(p, b, g) \
+  PORT (p, "piq0@"#b,  g, "p0"), \
+  PORT (p, "piq1@"#b,  g, "p1"), \
+  PORT (p, "piq2@"#b,  g, "p2"), \
+  PORT (p, "piq3@"#b,  g, "p3"), \
+  PORT (p, "piq4@"#b,  g, "p4"), \
+  PORT (p, "piq5@"#b,  g, "p5"), \
+  PORT (p, "piq6@"#b,  g, "p6"), \
+  PORT (p, "piq7@"#b,  g, "p7"), \
+  PORT (p, "piq8@"#b,  g, "p8"), \
+  PORT (p, "piq9@"#b,  g, "p9"), \
+  PORT (p, "piq10@"#b, g, "p10"), \
+  PORT (p, "piq11@"#b, g, "p11"), \
+  PORT (p, "piq12@"#b, g, "p12"), \
+  PORT (p, "piq13@"#b, g, "p13"), \
+  PORT (p, "piq14@"#b, g, "p14"), \
+  PORT (p, "piq15@"#b, g, "p15")
 static const struct bfin_port_layout bf54x_port[] =
 {
   SIC (0,  0, "bfin_pll",          "pll"),
@@ -1027,7 +1085,11 @@ static const struct bfin_port_layout bf54x_port[] =
   SIC (0, 17, "bfin_gptimer at 9",    "stat"),
   SIC (0, 18, "bfin_gptimer at 10",   "stat"),
   SIC (0, 19, "bfin_pint at 0",       "stat"),
+  PINT_PIQS ("bfin_pint at 0", 0, "bfin_gpio2 at 0"),
+  PINT_PIQS ("bfin_pint at 0", 1, "bfin_gpio2 at 1"),
   SIC (0, 20, "bfin_pint at 1",       "stat"),
+  PINT_PIQS ("bfin_pint at 1", 0, "bfin_gpio2 at 0"),
+  PINT_PIQS ("bfin_pint at 1", 1, "bfin_gpio2 at 1"),
   SIC (0, 21, "bfin_dma at 256",      "di"),	/* mdma0 */
   SIC (0, 21, "bfin_dma at 257",      "di"),	/* mdma0 */
   SIC (0, 22, "bfin_dma at 258",      "di"),	/* mdma1 */
@@ -1109,7 +1171,23 @@ static const struct bfin_port_layout bf54x_port[] =
   SIC (2, 28, "bfin_gptimer at 6",    "stat"),
   SIC (2, 29, "bfin_gptimer at 7",    "stat"),
   SIC (2, 30, "bfin_pint at 2",       "stat"),
+  PINT_PIQS ("bfin_pint at 2", 0, "bfin_gpio2 at 2"),
+  PINT_PIQS ("bfin_pint at 2", 1, "bfin_gpio2 at 3"),
+  PINT_PIQS ("bfin_pint at 2", 2, "bfin_gpio2 at 4"),
+  PINT_PIQS ("bfin_pint at 2", 3, "bfin_gpio2 at 5"),
+  PINT_PIQS ("bfin_pint at 2", 4, "bfin_gpio2 at 6"),
+  PINT_PIQS ("bfin_pint at 2", 5, "bfin_gpio2 at 7"),
+  PINT_PIQS ("bfin_pint at 2", 6, "bfin_gpio2 at 8"),
+  PINT_PIQS ("bfin_pint at 2", 7, "bfin_gpio2 at 9"),
   SIC (2, 31, "bfin_pint at 3",       "stat"),
+  PINT_PIQS ("bfin_pint at 3", 0, "bfin_gpio2 at 2"),
+  PINT_PIQS ("bfin_pint at 3", 1, "bfin_gpio2 at 3"),
+  PINT_PIQS ("bfin_pint at 3", 2, "bfin_gpio2 at 4"),
+  PINT_PIQS ("bfin_pint at 3", 3, "bfin_gpio2 at 5"),
+  PINT_PIQS ("bfin_pint at 3", 4, "bfin_gpio2 at 6"),
+  PINT_PIQS ("bfin_pint at 3", 5, "bfin_gpio2 at 7"),
+  PINT_PIQS ("bfin_pint at 3", 6, "bfin_gpio2 at 8"),
+  PINT_PIQS ("bfin_pint at 3", 7, "bfin_gpio2 at 9"),
 };
 #define bf542_port bf54x_port
 #define bf544_port bf54x_port
@@ -1541,27 +1619,27 @@ static const struct bfrom bf538_roms[] =
 };
 static const struct bfrom bf54x_roms[] =
 {
-  BFROM (54x, 4, 0),
-  BFROM (54x, 2, 0),
-  BFROM (54x, 1, 0),
-  BFROM (54x, 0, 0),
-  BFROMA (0xffa14000, 54x_l1, 4, 0),
-  BFROMA (0xffa14000, 54x_l1, 2, 0),
-  BFROMA (0xffa14000, 54x_l1, 1, 0),
-  BFROMA (0xffa14000, 54x_l1, 0, 0),
+  BFROM (54x, 4, 0x1000),
+  BFROM (54x, 2, 0x1000),
+  BFROM (54x, 1, 0x1000),
+  BFROM (54x, 0, 0x1000),
+  BFROMA (0xffa14000, 54x_l1, 4, 0x10000),
+  BFROMA (0xffa14000, 54x_l1, 2, 0x10000),
+  BFROMA (0xffa14000, 54x_l1, 1, 0x10000),
+  BFROMA (0xffa14000, 54x_l1, 0, 0x10000),
   BFROM_STUB,
 };
 static const struct bfrom bf561_roms[] =
 {
   /* XXX: No idea what the actual wrap limit is here.  */
-  BFROM (561, 5, 0),
+  BFROM (561, 5, 0x1000),
   BFROM_STUB,
 };
 static const struct bfrom bf59x_roms[] =
 {
   BFROM (59x, 1, 0x1000000),
   BFROM (59x, 0, 0x1000000),
-  BFROMA (0xffa10000, 59x_l1, 1, 0),
+  BFROMA (0xffa10000, 59x_l1, 1, 0x10000),
   BFROM_STUB,
 };
 
@@ -1583,7 +1661,7 @@ bfin_model_map_bfrom (SIM_DESC sd, SIM_CPU *cpu)
   else if (mnum >= 531 && mnum <= 533)
     bfrom = bf533_roms;
   else if (mnum == 535)
-    /* Stub.  */;
+    return; /* Stub.  */
   else if (mnum >= 534 && mnum <= 537)
     bfrom = bf537_roms;
   else if (mnum >= 538 && mnum <= 539)
@@ -1781,7 +1859,7 @@ bfin_reg_fetch (SIM_CPU *cpu, int rn, unsigned char *buf, int len)
   else if (rn == SIM_BFIN_CC_REGNUM)
     value = CCREG;
   else
-    return 0; // will be an error in gdb
+    return -1;
 
   /* Handle our KSP/USP shadowing in SP.  While in supervisor mode, we
      have the normal SP/USP behavior.  User mode is tricky though.  */
@@ -1796,7 +1874,7 @@ bfin_reg_fetch (SIM_CPU *cpu, int rn, unsigned char *buf, int len)
 
   bfin_store_unsigned_integer (buf, 4, value);
 
-  return -1; // disables size checking in gdb
+  return 4;
 }
 
 static int
@@ -1815,9 +1893,9 @@ bfin_reg_store (SIM_CPU *cpu, int rn, unsigned char *buf, int len)
   else if (rn == SIM_BFIN_CC_REGNUM)
     SET_CCREG (value);
   else
-    return 0; // will be an error in gdb
+    return -1;
 
-  return -1; // disables size checking in gdb
+  return 4;
 }
 
 static sim_cia
diff --git a/sim/bfin/machs.h b/sim/bfin/machs.h
index 1338827..27a8656 100644
--- a/sim/bfin/machs.h
+++ b/sim/bfin/machs.h
@@ -82,12 +82,14 @@ enum {
 #define BFIN_MMR_EMAC_SIZE		0x200
 #define BFIN_MMR_EPPI_SIZE		0x40
 #define BFIN_MMR_GPIO_SIZE		(17 * 4)
+#define BFIN_MMR_GPIO2_SIZE		(8 * 4)
 #define BFIN_MMR_GPTIMER_SIZE		(4 * 4)
 #define BFIN_MMR_NFC_SIZE		0x50
 /* XXX: Not exactly true; it's two sets of 4 regs near each other:
           0xFFC03600 0x10 - Control
           0xFFC03680 0x10 - Data  */
 #define BFIN_MMR_OTP_SIZE		0xa0
+#define BFIN_MMR_PINT_SIZE		0x28
 #define BFIN_MMR_PLL_BASE		0xFFC00000
 #define BFIN_MMR_PLL_SIZE		(4 * 6)
 #define BFIN_MMR_PPI_SIZE		(4 * 5)
diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
index e2259e9..75afcc1 100644
--- a/sim/common/ChangeLog
+++ b/sim/common/ChangeLog
@@ -1,3 +1,85 @@
+2012-06-16  Joel Brobecker  <brobecker at adacore.com>
+
+	* acinclude.m4 (SIM_AC_COMMON): Define PACKAGE.
+	* config.in, configure: Regenerate.
+
+2012-05-24  Pedro Alves  <palves at redhat.com>
+
+	* sim-signal.h (sim_signal_to_target): Rename to ...
+	(sim_signal_to_gdb_signal): ... this.
+	* sim-signal.c (sim_signal_to_target): Rename to ...
+	(sim_signal_to_gdb_signal): ... this.
+	* sim-reason.c (sim_stop_reason): Adjust to rename.
+
+2012-05-24  Pedro Alves  <palves at redhat.com>
+
+	PR gdb/7205
+
+        Replace TARGET_SIGNAL_ with GDB_SIGNAL_ throughout.
+
+2012-05-24  Pedro Alves  <palves at redhat.com>
+
+	PR gdb/7205
+
+	Replace target_signal with gdb_signal throughout.
+
+2012-05-18  Nick Clifton  <nickc at redhat.com>
+
+	PR 14072
+	* callback.c: Include config.h before system header files.
+	* cgen-trace.c: Likewise.
+	* cgen-utils.c: Likewise.
+	* gentmap.c: Likewise.
+
+2012-04-02  Mike Frysinger  <vapier at gentoo.org>
+
+	* hw-ports.c (hw_port_decode): Change "Unreconized" to "Unrecognized".
+
+2012-03-28  Rathish C  <rathish.c at kpitcummins.com>
+
+	* sim-trace.c: Update the function prototype of save_data_size.
+	Move the enum data_fmt from here...
+	* sim-trace.h: ...to here.
+	Add function prototype of save_data.
+
+2012-03-25  Mike Frysinger  <vapier at gentoo.org>
+
+	* sim-core.h (sim_core_trans_addr): Add prototype.
+
+2012-03-24  Hans-Peter Nilsson  <hp at axis.com>
+
+	* nrun.c: Add #ifdef HAVE_CONFIG_H and associated includes stanza
+	missing in last change.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* acinclude.m4 (SIM_AC_COMMON): Call AC_USE_SYSTEM_EXTENSIONS.
+	* nrun.c: Include string.h/strings.h.
+	* aclocal.m4, config.in, configure: Regenerate.
+
+2012-03-22  Mike Frysinger  <vapier at gentoo.org>
+
+	* acinclude.m4 (SIM_AC_OPTION_WARNINGS): Copy AC_ARG_ENABLE(werror),
+	WERROR_CFLAGS, and build_warnings from gdb/configure.ac.  Comment
+	out -Werror initialization.
+
+2012-03-19  Mike Frysinger  <vapier at gentoo.org>
+
+	* Make-common.in (TAGS): Change a-z to [:lower:].
+	* acinclude.m4 (sim-trace): Likewise.
+	* gennltvals.sh: Change A-Z0-9 to [:upper:][:digit:].
+	Change A-Za-z0-9 to [:alnum:].
+
+2012-03-18  Mike Frysinger  <vapier at gentoo.org>
+
+	* nrun.c (main): Display strsignal of sigrc.
+
+2012-01-06  Mike Frysinger  <vapier at gentoo.org>
+
+	* Makefile.in (abs_srcdir): Declare.
+	(srcroot): Define in terms of abs_srcdir.
+	(headers): Change srcdir to abs_srcdir.
+
 2012-01-02  Joel Brobecker  <brobecker at adacore.com>
 
 	* dv-sockser.h, sim-assert.h, sim-fpu.c: Reformat the copyright
diff --git a/sim/common/Make-common.in b/sim/common/Make-common.in
index c11e51e..1a3a6b6 100644
--- a/sim/common/Make-common.in
+++ b/sim/common/Make-common.in
@@ -518,7 +518,7 @@ tags etags: TAGS
 # And the sim-n-foo.h files create functions that can't be found either.
 TAGS: force
 	cd $(srcdir) && \
-	etags --regex '/^\([a-z_]+\) (/\1/' --regex '/^\/[*] TAGS: .*/' \
+	etags --regex '/^\([[:lower:]_]+\) (/\1/' --regex '/^\/[*] TAGS: .*/' \
 		*.[ch] ../common/*.[ch]
 
 clean: $(SIM_EXTRA_CLEAN)
diff --git a/sim/common/Makefile.in b/sim/common/Makefile.in
index 214b658..2929b38 100644
--- a/sim/common/Makefile.in
+++ b/sim/common/Makefile.in
@@ -18,7 +18,8 @@ default: all
 
 VPATH = @srcdir@
 srcdir = @srcdir@
-srcroot = $(srcdir)/../..
+abs_srcdir = @abs_srcdir@
+srcroot = $(abs_srcdir)/../..
 
 prefix = @prefix@
 exec_prefix = @exec_prefix@
@@ -82,7 +83,7 @@ headers:
 	rootme=`pwd` ; \
 	cd $(srcdir) ; \
 	rm -f nltvals.new ; \
-	$(SHELL) $(srcdir)/gennltvals.sh $(SHELL) $(srcroot) "$(CPP_FOR_TARGET)" > nltvals.new ; \
+	$(SHELL) $(abs_srcdir)/gennltvals.sh $(SHELL) $(srcroot) "$(CPP_FOR_TARGET)" > nltvals.new ; \
 	$(SHELL) $(srcroot)/move-if-change nltvals.new nltvals.def
 
 .c.o:
diff --git a/sim/common/acinclude.m4 b/sim/common/acinclude.m4
index efb1a29..fe0a5b7 100644
--- a/sim/common/acinclude.m4
+++ b/sim/common/acinclude.m4
@@ -29,6 +29,7 @@ AC_REQUIRE([AC_PROG_CC])
 # autoconf.info says this should be called right after AC_INIT.
 AC_CONFIG_HEADER(ifelse([$1],,config.h,[$1]):config.in)
 AC_CANONICAL_SYSTEM
+AC_USE_SYSTEM_EXTENSIONS
 AC_ARG_PROGRAM
 AC_PROG_INSTALL
 
@@ -46,6 +47,13 @@ AR=${AR-ar}
 AC_SUBST(AR)
 AC_PROG_RANLIB
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package. ])
+AC_SUBST(PACKAGE)
+
 # Dependency checking.
 ZW_CREATE_DEPDIR
 ZW_PROG_COMPILER_DEPENDENCIES([CC])
@@ -178,7 +186,7 @@ AC_ARG_ENABLE(sim-trace,
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [[-0-9]]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [[a-z]]*)
+  [[[:lower:]]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
@@ -816,31 +824,44 @@ dnl --enable-build-warnings is for developers of the simulator.
 dnl it enables extra GCC specific warnings.
 AC_DEFUN([SIM_AC_OPTION_WARNINGS],
 [
-# NOTE: Don't add -Wall or -Wunused, they both include
-# -Wunused-parameter which reports bogus warnings.
-# NOTE: If you add to this list, remember to update
-# gdb/doc/gdbint.texinfo.
-build_warnings="-Wimplicit -Wreturn-type -Wcomment -Wtrigraphs \
--Wformat -Wparentheses -Wpointer-arith"
-# GCC supports -Wuninitialized only with -O or -On, n != 0.
-if test x${CFLAGS+set} = xset; then
-  case "${CFLAGS}" in
-    *"-O0"* ) ;;
-    *"-O"* )
-      build_warnings="${build_warnings} -Wuninitialized"
-    ;;
-  esac
-else
-  build_warnings="${build_warnings} -Wuninitialized"
+AC_ARG_ENABLE(werror,
+  AS_HELP_STRING([--enable-werror], [treat compile warnings as errors]),
+  [case "${enableval}" in
+     yes | y) ERROR_ON_WARNING="yes" ;;
+     no | n)  ERROR_ON_WARNING="no" ;;
+     *) AC_MSG_ERROR(bad value ${enableval} for --enable-werror) ;;
+   esac])
+
+# Enable -Werror by default when using gcc
+if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
+    ERROR_ON_WARNING=yes
 fi
-# Up for debate: -Wswitch -Wcomment -trigraphs -Wtrigraphs
-# -Wunused-function -Wunused-label -Wunused-variable -Wunused-value
-# -Wchar-subscripts -Wtraditional -Wshadow -Wcast-qual
-# -Wcast-align -Wwrite-strings -Wconversion -Wstrict-prototypes
-# -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls
-# -Woverloaded-virtual -Winline -Werror"
+
+WERROR_CFLAGS=""
+if test "${ERROR_ON_WARNING}" = yes ; then
+# NOTE: Disabled in the sim dir due to most sims generating warnings.
+#    WERROR_CFLAGS="-Werror"
+     true
+fi
+
+# The entries after -Wno-pointer-sign are disabled warnings which may
+# be enabled in the future, which can not currently be used to build
+# GDB.
+# NOTE: If you change this list, remember to update
+# gdb/doc/gdbint.texinfo.
+build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \
+-Wformat-nonliteral -Wno-pointer-sign \
+-Wno-unused -Wunused-value -Wunused-function \
+-Wno-switch -Wno-char-subscripts -Wmissing-prototypes"
+
+# Enable -Wno-format by default when using gcc on mingw since many
+# GCC versions complain about %I64.
+case "${host}" in
+  *-*-mingw32*) build_warnings="$build_warnings -Wno-format" ;;
+esac
+
 AC_ARG_ENABLE(build-warnings,
-[  --enable-build-warnings Enable build-time compiler warnings if gcc is used],
+AS_HELP_STRING([--enable-build-warnings], [enable build-time compiler warnings if gcc is used]),
 [case "${enableval}" in
   yes)	;;
   no)	build_warnings="-w";;
@@ -854,7 +875,7 @@ if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
   echo "Setting compiler warning flags = $build_warnings" 6>&1
 fi])dnl
 AC_ARG_ENABLE(sim-build-warnings,
-[  --enable-gdb-build-warnings Enable SIM specific build-time compiler warnings if gcc is used],
+AS_HELP_STRING([--enable-sim-build-warnings], [enable SIM specific build-time compiler warnings if gcc is used]),
 [case "${enableval}" in
   yes)	;;
   no)	build_warnings="-w";;
@@ -868,7 +889,6 @@ if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
   echo "Setting GDB specific compiler warning flags = $build_warnings" 6>&1
 fi])dnl
 WARN_CFLAGS=""
-WERROR_CFLAGS=""
 if test "x${build_warnings}" != x -a "x$GCC" = xyes
 then
     AC_MSG_CHECKING(compiler warning flags)
@@ -884,7 +904,7 @@ then
 	    CFLAGS="$saved_CFLAGS"
 	esac
     done
-    AC_MSG_RESULT(${WARN_CFLAGS}${WERROR_CFLAGS})
+    AC_MSG_RESULT(${WARN_CFLAGS} ${WERROR_CFLAGS})
 fi
 ])
 AC_SUBST(WARN_CFLAGS)
diff --git a/sim/common/aclocal.m4 b/sim/common/aclocal.m4
index cd3c9dc..a2aacaf 100644
--- a/sim/common/aclocal.m4
+++ b/sim/common/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/common/callback.c b/sim/common/callback.c
index 8a2abd0..7779489 100644
--- a/sim/common/callback.c
+++ b/sim/common/callback.c
@@ -24,6 +24,7 @@
 #ifdef HAVE_CONFIG_H
 #include "cconfig.h"
 #endif
+#include "config.h"
 #include "ansidecl.h"
 #include <stdarg.h>
 #include <stdio.h>
diff --git a/sim/common/cgen-trace.c b/sim/common/cgen-trace.c
index ea71ecf..754038d 100644
--- a/sim/common/cgen-trace.c
+++ b/sim/common/cgen-trace.c
@@ -17,6 +17,7 @@ GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
+#include "config.h"
 #include <errno.h>
 #include "dis-asm.h"
 #include "bfd.h"
diff --git a/sim/common/cgen-utils.c b/sim/common/cgen-utils.c
index 2c84c5a..daeb181 100644
--- a/sim/common/cgen-utils.c
+++ b/sim/common/cgen-utils.c
@@ -17,6 +17,7 @@ GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
+#include "config.h"
 #include "bfd.h"
 #include "sim-main.h"
 #include "dis-asm.h"
diff --git a/sim/common/config.in b/sim/common/config.in
index 5792785..db15bcc 100644
--- a/sim/common/config.in
+++ b/sim/common/config.in
@@ -139,6 +139,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -168,3 +171,35 @@
 
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/common/configure b/sim/common/configure
index d48f709..d6ad959 100755
--- a/sim/common/configure
+++ b/sim/common/configure
@@ -602,9 +602,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -623,6 +620,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -630,6 +628,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -3165,120 +3166,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3679,6 +3566,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers cconfig.h:config.in"
@@ -3687,6 +3749,7 @@ ac_config_headers="$ac_config_headers cconfig.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -3792,6 +3855,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4368,7 +4442,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
diff --git a/sim/common/gennltvals.sh b/sim/common/gennltvals.sh
index bbab145..9036cf3 100644
--- a/sim/common/gennltvals.sh
+++ b/sim/common/gennltvals.sh
@@ -14,13 +14,13 @@ echo '/* Newlib/libgloss macro values needed by remote target support.  */'
 echo '/* This file is machine generated by gennltvals.sh.  */'
 
 $shell ${srccom}/gentvals.sh "" errno ${srcroot}/newlib/libc/include \
-	"errno.h sys/errno.h" 'E[A-Z0-9]*' "${cpp}"
+	"errno.h sys/errno.h" 'E[[:upper:][:digit:]]*' "${cpp}"
 
 $shell ${srccom}/gentvals.sh "" signal ${srcroot}/newlib/libc/include \
-	"signal.h sys/signal.h" 'SIG[A-Z0-9]*' "${cpp}"
+	"signal.h sys/signal.h" 'SIG[[:upper:][:digit:]]*' "${cpp}"
 
 $shell ${srccom}/gentvals.sh "" open ${srcroot}/newlib/libc/include \
-	"fcntl.h sys/fcntl.h sys/_default_fcntl.h" 'O_[A-Z0-9]*' "${cpp}"
+	"fcntl.h sys/fcntl.h sys/_default_fcntl.h" 'O_[[:upper:][:digit:]]*' "${cpp}"
 
 # Unfortunately, each newlib/libgloss port has seen fit to define their own
 # syscall.h file.  This means that system call numbers can vary for each port.
@@ -31,52 +31,52 @@ $shell ${srccom}/gentvals.sh "" open ${srcroot}/newlib/libc/include \
 
 dir=libgloss target=bfin
 $shell ${srccom}/gentvals.sh $target sys ${srcroot}/$dir \
-	"syscall.h" 'SYS_[_A-Za-z0-9]*' "${cpp}"
+	"syscall.h" 'SYS_[_[:alnum:]]*' "${cpp}"
 
 dir=newlib/libc/sys/d10v/sys target=d10v
 $shell ${srccom}/gentvals.sh $target sys ${srcroot}/$dir \
-	"syscall.h" 'SYS_[_A-Za-z0-9]*' "${cpp}"
+	"syscall.h" 'SYS_[_[:alnum:]]*' "${cpp}"
 
 # OBSOLETE dir=libgloss target=d30v
 # OBSOLETE $shell ${srccom}/gentvals.sh $target sys ${srcroot}/$dir \
-# OBSOLETE 	"syscall.h" 'SYS_[_A-Za-z0-9]*' "${cpp}"
+# OBSOLETE 	"syscall.h" 'SYS_[_[:alnum:]]*' "${cpp}"
 
 dir=libgloss target=cr16
 $shell ${srccom}/gentvals.sh $target sys ${srcroot}/$dir \
-	"syscall.h" 'SYS_[_A-Za-z0-9]*' "${cpp}"
+	"syscall.h" 'SYS_[_[:alnum:]]*' "${cpp}"
 
 dir=libgloss target=fr30
 $shell ${srccom}/gentvals.sh $target sys ${srcroot}/$dir \
-	"syscall.h" 'SYS_[_A-Za-z0-9]*' "${cpp}"
+	"syscall.h" 'SYS_[_[:alnum:]]*' "${cpp}"
 
 dir=libgloss target=frv
 $shell ${srccom}/gentvals.sh $target sys ${srcroot}/$dir \
-        "syscall.h" 'SYS_[_A-Za-z0-9]*' "${cpp}"
+	"syscall.h" 'SYS_[_[:alnum:]]*' "${cpp}"
 
 dir=libgloss/i960 target=i960
 $shell ${srccom}/gentvals.sh $target sys ${srcroot}/$dir \
-	"syscall.h" 'SYS_[_A-Za-z0-9]*' "${cpp}"
+	"syscall.h" 'SYS_[_[:alnum:]]*' "${cpp}"
 
 dir=libgloss target=m32r
 $shell ${srccom}/gentvals.sh $target sys ${srcroot}/$dir \
-	"syscall.h" 'SYS_[_A-Za-z0-9]*' "${cpp}"
+	"syscall.h" 'SYS_[_[:alnum:]]*' "${cpp}"
 
 dir=libgloss target=mn10200
 $shell ${srccom}/gentvals.sh $target sys ${srcroot}/$dir \
-	"syscall.h" 'SYS_[_A-Za-z0-9]*' "${cpp}"
+	"syscall.h" 'SYS_[_[:alnum:]]*' "${cpp}"
 
 dir=libgloss target=mn10300
 $shell ${srccom}/gentvals.sh $target sys ${srcroot}/$dir \
-	"syscall.h" 'SYS_[_A-Za-z0-9]*' "${cpp}"
+	"syscall.h" 'SYS_[_[:alnum:]]*' "${cpp}"
 
 dir=libgloss target=sparc
 $shell ${srccom}/gentvals.sh $target sys ${srcroot}/$dir \
-	"syscall.h" 'SYS_[_A-Za-z0-9]*' "${cpp}"
+	"syscall.h" 'SYS_[_[:alnum:]]*' "${cpp}"
 
 dir=libgloss/v850/sys target=v850
 $shell ${srccom}/gentvals.sh $target sys ${srcroot}/$dir \
-	"syscall.h" 'SYS_[_A-Za-z0-9]*' "${cpp}"
+	"syscall.h" 'SYS_[_[:alnum:]]*' "${cpp}"
 
 dir=libgloss target=lm32
 $shell ${srccom}/gentvals.sh $target sys ${srcroot}/$dir \
-        "syscall.h" 'SYS_[_A-Za-z0-9]*' "${cpp}"
+	"syscall.h" 'SYS_[_[:alnum:]]*' "${cpp}"
diff --git a/sim/common/gentmap.c b/sim/common/gentmap.c
index a4d3713..7efc6d3 100644
--- a/sim/common/gentmap.c
+++ b/sim/common/gentmap.c
@@ -66,6 +66,7 @@ gen_targ_map_c ()
   printf ("/* Target value mapping utilities needed by the simulator and gdb.  */\n");
   printf ("/* This file is machine generated by gentmap.c.  */\n\n");
 
+  printf ("#include \"config.h\"\n");
   printf ("#include <errno.h>\n");
   printf ("#include <fcntl.h>\n");
   printf ("#include \"ansidecl.h\"\n");
diff --git a/sim/common/hw-ports.c b/sim/common/hw-ports.c
index 1089969..ffc48ad 100644
--- a/sim/common/hw-ports.c
+++ b/sim/common/hw-ports.c
@@ -286,7 +286,7 @@ hw_port_decode (struct hw *me,
 	    }
 	}
     }
-  hw_abort (me, "Unreconized port %s", port_name);
+  hw_abort (me, "Unrecognized port %s", port_name);
   return 0;
 }
 
diff --git a/sim/common/nrun.c b/sim/common/nrun.c
index b7dbbcf..aa60c42 100644
--- a/sim/common/nrun.c
+++ b/sim/common/nrun.c
@@ -14,7 +14,23 @@ 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, see <http://www.gnu.org/licenses/>.  */
 
+/* Need to be before general includes, to pick up e.g. _GNU_SOURCE.  */
+#ifdef HAVE_CONFIG_H
+#include "cconfig.h"
+#include "tconfig.h"
+#endif
+
 #include <signal.h>
+
+/* For strsignal.  */
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#endif
+
 #include "sim-main.h"
 
 #include "bfd.h"
@@ -202,7 +218,8 @@ main (int argc, char **argv)
     case sim_signalled:
     case sim_stopped:
       if (sigrc != 0)
-        fprintf (stderr, "program stopped with signal %d.\n", sigrc);
+	fprintf (stderr, "program stopped with signal %d (%s).\n", sigrc,
+		 strsignal (sigrc));
       break;
 
     case sim_exited:
diff --git a/sim/common/run.1 b/sim/common/run.1
index 8b13789..d72b239 100644
--- a/sim/common/run.1
+++ b/sim/common/run.1
@@ -1 +1,475 @@
+.\" Copyright (c) 1993, 2004, 2010, 2011 Free Software Foundation
+.\" See section COPYING for conditions for redistribution
+.TH run 1 "13oct1993" "GNU Tools" "GNU Tools"
+.de BP
+.sp
+.ti -.2i
+\(**
+..
 
+.SH NAME
+run\(em\&Simulator front-end
+
+.SH SYNOPSIS
+.hy 0
+.na
+.TP
+.B run
+.RB "[\|" \-v "\|]"
+." .RB "[\|" \-t "\|]"
+.RB "[\|" \-p
+.IR freq "\|]"
+.RB "[\|" \-m
+.IR memory "\|]"
+.RB "[\|" \--sysroot
+.IR filepath "\|]"
+.I program
+.ad b
+.hy 1
+.SH DESCRIPTION
+
+Use `\|\c
+.BI run " program"\c
+\&\|' to execute a binary by interpreting machine instructions on your
+host computer.
+
+.B run
+is the same emulator used by GDB's `\|\c
+.B target sim\c
+\&\|' command.  You can run it directly by executing
+.B run
+if you just want to see your program execute, and do not need any
+debugger functionality.  You can also use
+.B run
+to generate profiling information for analysis with
+.BR gprof .
+
+.SH OPTIONS
+
+.TP
+.B \-v
+Verbose output.  Display the name of the program to run before
+execution; after execution, display the number of instructions
+executed, the number of machine cycles emulated, the number of
+pipeline stalls, the real time taken, the emulated execution time
+taken, and a summary of how much profiling information was generated.
+."
+." .TP
+." .B \-t
+." `trace', calls a sim_trace routine that does nothing.
+
+.TP
+.BI \-p " freq"
+Generate profile information (for use with
+.B gprof\c
+\&).
+.I freq
+is the profiling frequency.  Write the profiling information to a file called
+.BR gmon.out .
+
+.TP
+.BI \-m " memory"
+Set the memory size for the emulated machine to two to the power
+.IR memory .
+The default value is 19, emulating a board with 524288 bytes of memory.
+
+.TP
+.BI \--sysroot " filepath"
+Prepend
+.IR filepath
+to all simulator system calls that pass absolute file paths.
+Change working directory to
+.IR filepath
+at program start.  Not all simulators support this option; those
+that don't, will ignore it.
+
+.PP
+
+.SH "SEE ALSO"
+.RB "`\|" gprof "\|'"
+entry in
+.B info\c
+\&;
+.RB "`\|" gdb "\|'"
+entry in
+.B info\c
+\&;
+.I 
+Using GDB: A Guide to the GNU Source-Level Debugger\c
+, Richard M. Stallman and Roland H. Pesch.
+
+.SH COPYING
+Copyright (c) 1993, 2000, 2012 Free Software Foundation, Inc.
+.PP
+This document is distributed under the terms of the GNU Free
+Documentation License, version 1.1.  That license is described in the
+sources for this manual page, but it is not displayed here in order to
+make this manual more consise.  Copies of this license can also be
+obtained from: http://www.gnu.org/copyleft/.
+
+\"  GNU Free Documentation License
+\"    Version 1.1, March 2000
+
+\"    Copyright (C) 2000  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.
+\"  .PP
+\"  0. PREAMBLE
+\"  .PP
+\"  The purpose of this License is to make a manual, textbook, or other
+\"  written document "free" in the sense of freedom: to assure everyone
+\"  the effective freedom to copy and redistribute it, with or without
+\"  modifying it, either commercially or noncommercially.  Secondarily,
+\"  this License preserves for the author and publisher a way to get
+\"  credit for their work, while not being considered responsible for
+\"  modifications made by others.
+\"  .PP
+\"  This License is a kind of "copyleft", which means that derivative
+\"  works of the document must themselves be free in the same sense.  It
+\"  complements the GNU General Public License, which is a copyleft
+\"  license designed for free software.
+\"  .PP
+\"  We have designed this License in order to use it for manuals for free
+\"  software, because free software needs free documentation: a free
+\"  program should come with manuals providing the same freedoms that the
+\"  software does.  But this License is not limited to software manuals;
+\"  it can be used for any textual work, regardless of subject matter or
+\"  whether it is published as a printed book.  We recommend this License
+\"  principally for works whose purpose is instruction or reference.
+\"  .PP
+\"  1. APPLICABILITY AND DEFINITIONS
+\"  .PP
+\"  This License applies to any manual or other work that contains a
+\"  notice placed by the copyright holder saying it can be distributed
+\"  under the terms of this License.  The "Document", below, refers to any
+\"  such manual or work.  Any member of the public is a licensee, and is
+\"  addressed as "you".
+\"  .PP
+\"  A "Modified Version" of the Document means any work containing the
+\"  Document or a portion of it, either copied verbatim, or with
+\"  modifications and/or translated into another language.
+\"  .PP
+\"  A "Secondary Section" is a named appendix or a front-matter section of
+\"  the Document that deals exclusively with the relationship of the
+\"  publishers or authors of the Document to the Document's overall subject
+\"  (or to related matters) and contains nothing that could fall directly
+\"  within that overall subject.  (For example, if the Document is in part a
+\"  textbook of mathematics, a Secondary Section may not explain any
+\"  mathematics.)  The relationship could be a matter of historical
+\"  connection with the subject or with related matters, or of legal,
+\"  commercial, philosophical, ethical or political position regarding
+\"  them.
+\"  .PP
+\"  The "Invariant Sections" are certain Secondary Sections whose titles
+\"  are designated, as being those of Invariant Sections, in the notice
+\"  that says that the Document is released under this License.
+\"  .PP
+\"  The "Cover Texts" are certain short passages of text that are listed,
+\"  as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+\"  the Document is released under this License.
+\"  .PP
+\"  A "Transparent" copy of the Document means a machine-readable copy,
+\"  represented in a format whose specification is available to the
+\"  general public, whose contents can be viewed and edited directly and
+\"  straightforwardly with generic text editors or (for images composed of
+\"  pixels) generic paint programs or (for drawings) some widely available
+\"  drawing editor, and that is suitable for input to text formatters or
+\"  for automatic translation to a variety of formats suitable for input
+\"  to text formatters.  A copy made in an otherwise Transparent file
+\"  format whose markup has been designed to thwart or discourage
+\"  subsequent modification by readers is not Transparent.  A copy that is
+\"  not "Transparent" is called "Opaque".
+\"  .PP
+\"  Examples of suitable formats for Transparent copies include plain
+\"  ASCII without markup, Texinfo input format, LaTeX input format, SGML
+\"  or XML using a publicly available DTD, and standard-conforming simple
+\"  HTML designed for human modification.  Opaque formats include
+\"  PostScript, PDF, proprietary formats that can be read and edited only
+\"  by proprietary word processors, SGML or XML for which the DTD and/or
+\"  processing tools are not generally available, and the
+\"  machine-generated HTML produced by some word processors for output
+\"  purposes only.
+\"  .PP
+\"  The "Title Page" means, for a printed book, the title page itself,
+\"  plus such following pages as are needed to hold, legibly, the material
+\"  this License requires to appear in the title page.  For works in
+\"  formats which do not have any title page as such, "Title Page" means
+\"  the text near the most prominent appearance of the work's title,
+\"  preceding the beginning of the body of the text.
+\"  .PP
+\"  2. VERBATIM COPYING
+\"  .PP
+\"  You may copy and distribute the Document in any medium, either
+\"  commercially or noncommercially, provided that this License, the
+\"  copyright notices, and the license notice saying this License applies
+\"  to the Document are reproduced in all copies, and that you add no other
+\"  conditions whatsoever to those of this License.  You may not use
+\"  technical measures to obstruct or control the reading or further
+\"  copying of the copies you make or distribute.  However, you may accept
+\"  compensation in exchange for copies.  If you distribute a large enough
+\"  number of copies you must also follow the conditions in section 3.
+\"  .PP
+\"  You may also lend copies, under the same conditions stated above, and
+\"  you may publicly display copies.
+\"  .PP
+\"  3. COPYING IN QUANTITY
+\"  .PP
+\"  If you publish printed copies of the Document numbering more than 100,
+\"  and the Document's license notice requires Cover Texts, you must enclose
+\"  the copies in covers that carry, clearly and legibly, all these Cover
+\"  Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+\"  the back cover.  Both covers must also clearly and legibly identify
+\"  you as the publisher of these copies.  The front cover must present
+\"  the full title with all words of the title equally prominent and
+\"  visible.  You may add other material on the covers in addition.
+\"  Copying with changes limited to the covers, as long as they preserve
+\"  the title of the Document and satisfy these conditions, can be treated
+\"  as verbatim copying in other respects.
+\"  .PP
+\"  If the required texts for either cover are too voluminous to fit
+\"  legibly, you should put the first ones listed (as many as fit
+\"  reasonably) on the actual cover, and continue the rest onto adjacent
+\"  pages.
+\"  .PP
+\"  If you publish or distribute Opaque copies of the Document numbering
+\"  more than 100, you must either include a machine-readable Transparent
+\"  copy along with each Opaque copy, or state in or with each Opaque copy
+\"  a publicly-accessible computer-network location containing a complete
+\"  Transparent copy of the Document, free of added material, which the
+\"  general network-using public has access to download anonymously at no
+\"  charge using public-standard network protocols.  If you use the latter
+\"  option, you must take reasonably prudent steps, when you begin
+\"  distribution of Opaque copies in quantity, to ensure that this
+\"  Transparent copy will remain thus accessible at the stated location
+\"  until at least one year after the last time you distribute an Opaque
+\"  copy (directly or through your agents or retailers) of that edition to
+\"  the public.
+\"  .PP
+\"  It is requested, but not required, that you contact the authors of the
+\"  Document well before redistributing any large number of copies, to give
+\"  them a chance to provide you with an updated version of the Document.
+\"  .PP
+\"  4. MODIFICATIONS
+\"  .PP
+\"  You may copy and distribute a Modified Version of the Document under
+\"  the conditions of sections 2 and 3 above, provided that you release
+\"  the Modified Version under precisely this License, with the Modified
+\"  Version filling the role of the Document, thus licensing distribution
+\"  and modification of the Modified Version to whoever possesses a copy
+\"  of it.  In addition, you must do these things in the Modified Version:
+\"  .PP
+\"  A. Use in the Title Page (and on the covers, if any) a title distinct
+\"  from that of the Document, and from those of previous versions
+\"  (which should, if there were any, be listed in the History section
+\"  of the Document).  You may use the same title as a previous version
+\"  if the original publisher of that version gives permission.
+\"  .PP
+\"  B. List on the Title Page, as authors, one or more persons or entities
+\"  responsible for authorship of the modifications in the Modified
+\"  Version, together with at least five of the principal authors of the
+\"  Document (all of its principal authors, if it has less than five).
+\"  .PP
+\"  C. State on the Title page the name of the publisher of the
+\"  Modified Version, as the publisher.
+\"  .PP
+\"  D. Preserve all the copyright notices of the Document.
+\"  .PP
+\"  E. Add an appropriate copyright notice for your modifications
+\"  adjacent to the other copyright notices.
+\"  .PP
+\"  F. Include, immediately after the copyright notices, a license notice
+\"  giving the public permission to use the Modified Version under the
+\"  terms of this License, in the form shown in the Addendum below.
+\"  Preserve in that license notice the full lists of Invariant Sections
+\"  and required Cover Texts given in the Document's license notice.
+\"  .PP
+\"  H. Include an unaltered copy of this License.
+\"  .PP
+\"  I. Preserve the section entitled "History", and its title, and add to
+\"  it an item stating at least the title, year, new authors, and
+\"  publisher of the Modified Version as given on the Title Page.  If
+\"  there is no section entitled "History" in the Document, create one
+\"  stating the title, year, authors, and publisher of the Document as
+\"  given on its Title Page, then add an item describing the Modified
+\"  Version as stated in the previous sentence.
+\"  .PP
+\"  J. Preserve the network location, if any, given in the Document for
+\"  public access to a Transparent copy of the Document, and likewise
+\"  the network locations given in the Document for previous versions
+\"  it was based on.  These may be placed in the "History" section.
+\"  You may omit a network location for a work that was published at
+\"  least four years before the Document itself, or if the original
+\"  publisher of the version it refers to gives permission.
+\"  .PP
+\"  K. In any section entitled "Acknowledgements" or "Dedications",
+\"  preserve the section's title, and preserve in the section all the
+\"  substance and tone of each of the contributor acknowledgements
+\"  and/or dedications given therein.
+\"  .PP
+\"  L. Preserve all the Invariant Sections of the Document,
+\"  unaltered in their text and in their titles.  Section numbers
+\"  or the equivalent are not considered part of the section titles.
+\"  .PP
+\"  M. Delete any section entitled "Endorsements".  Such a section
+\"  may not be included in the Modified Version.
+\"  .PP
+\"  N. Do not retitle any existing section as "Endorsements"
+\"  or to conflict in title with any Invariant Section.
+\"  .PP
+\"  If the Modified Version includes new front-matter sections or
+\"  appendices that qualify as Secondary Sections and contain no material
+\"  copied from the Document, you may at your option designate some or all
+\"  of these sections as invariant.  To do this, add their titles to the
+\"  list of Invariant Sections in the Modified Version's license notice.
+\"  These titles must be distinct from any other section titles.
+\"  .PP
+\"  You may add a section entitled "Endorsements", provided it contains
+\"  nothing but endorsements of your Modified Version by various
+\"  parties--for example, statements of peer review or that the text has
+\"  been approved by an organization as the authoritative definition of a
+\"  standard.
+\"  .PP
+\"  You may add a passage of up to five words as a Front-Cover Text, and a
+\"  passage of up to 25 words as a Back-Cover Text, to the end of the list
+\"  of Cover Texts in the Modified Version.  Only one passage of
+\"  Front-Cover Text and one of Back-Cover Text may be added by (or
+\"  through arrangements made by) any one entity.  If the Document already
+\"  includes a cover text for the same cover, previously added by you or
+\"  by arrangement made by the same entity you are acting on behalf of,
+\"  you may not add another; but you may replace the old one, on explicit
+\"  permission from the previous publisher that added the old one.
+\"  .PP
+\"  The author(s) and publisher(s) of the Document do not by this License
+\"  give permission to use their names for publicity for or to assert or
+\"  imply endorsement of any Modified Version.
+\"  .PP
+
+\"  5. COMBINING DOCUMENTS
+\"  .PP
+\"  You may combine the Document with other documents released under this
+\"  License, under the terms defined in section 4 above for modified
+\"  versions, provided that you include in the combination all of the
+\"  Invariant Sections of all of the original documents, unmodified, and
+\"  list them all as Invariant Sections of your combined work in its
+\"  license notice.
+\"  .PP
+\"  The combined work need only contain one copy of this License, and
+\"  multiple identical Invariant Sections may be replaced with a single
+\"  copy.  If there are multiple Invariant Sections with the same name but
+\"  different contents, make the title of each such section unique by
+\"  adding at the end of it, in parentheses, the name of the original
+\"  author or publisher of that section if known, or else a unique number.
+\"  Make the same adjustment to the section titles in the list of
+\"  Invariant Sections in the license notice of the combined work.
+\"  .PP
+\"  In the combination, you must combine any sections entitled "History"
+\"  in the various original documents, forming one section entitled
+\"  "History"; likewise combine any sections entitled "Acknowledgements",
+\"  and any sections entitled "Dedications".  You must delete all sections
+\"  entitled "Endorsements."
+\"  .PP
+
+\"  6. COLLECTIONS OF DOCUMENTS
+\"  .PP
+\"  You may make a collection consisting of the Document and other documents
+\"  released under this License, and replace the individual copies of this
+\"  License in the various documents with a single copy that is included in
+\"  the collection, provided that you follow the rules of this License for
+\"  verbatim copying of each of the documents in all other respects.
+\"  .PP
+\"  You may extract a single document from such a collection, and distribute
+\"  it individually under this License, provided you insert a copy of this
+\"  License into the extracted document, and follow this License in all
+\"  other respects regarding verbatim copying of that document.
+\"  .PP
+
+\"  7. AGGREGATION WITH INDEPENDENT WORKS
+\"  .PP
+\"  A compilation of the Document or its derivatives with other separate
+\"  and independent documents or works, in or on a volume of a storage or
+\"  distribution medium, does not as a whole count as a Modified Version
+\"  of the Document, provided no compilation copyright is claimed for the
+\"  compilation.  Such a compilation is called an "aggregate", and this
+\"  License does not apply to the other self-contained works thus compiled
+\"  with the Document, on account of their being thus compiled, if they
+\"  are not themselves derivative works of the Document.
+\"  .PP
+\"  If the Cover Text requirement of section 3 is applicable to these
+\"  copies of the Document, then if the Document is less than one quarter
+\"  of the entire aggregate, the Document's Cover Texts may be placed on
+\"  covers that surround only the Document within the aggregate.
+\"  Otherwise they must appear on covers around the whole aggregate.
+\"  .PP
+
+\"  8. TRANSLATION
+\"  .PP
+\"  Translation is considered a kind of modification, so you may
+\"  distribute translations of the Document under the terms of section 4.
+\"  Replacing Invariant Sections with translations requires special
+\"  permission from their copyright holders, but you may include
+\"  translations of some or all Invariant Sections in addition to the
+\"  original versions of these Invariant Sections.  You may include a
+\"  translation of this License provided that you also include the
+\"  original English version of this License.  In case of a disagreement
+\"  between the translation and the original English version of this
+\"  License, the original English version will prevail.
+\"  .PP
+
+\"  9. TERMINATION
+\"  .PP
+\"  You may not copy, modify, sublicense, or distribute the Document except
+\"  as expressly provided for under this License.  Any other attempt to
+\"  copy, modify, sublicense or distribute the Document is void, and will
+\"  automatically terminate your rights under this License.  However,
+\"  parties who have received copies, or rights, from you under this
+\"  License will not have their licenses terminated so long as such
+\"  parties remain in full compliance.
+\"  .PP
+
+\"  10. FUTURE REVISIONS OF THIS LICENSE
+\"  .PP
+\"  The Free Software Foundation may publish new, revised versions
+\"  of the GNU Free Documentation 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.  See
+\"  http://www.gnu.org/copyleft/.
+\"  .PP
+\"  Each version of the License is given a distinguishing version number.
+\"  If the Document specifies that a particular numbered version of this
+\"  License "or any later version" applies to it, you have the option of
+\"  following the terms and conditions either of that specified version or
+\"  of any later version that has been published (not as a draft) by the
+\"  Free Software Foundation.  If the Document does not specify a version
+\"  number of this License, you may choose any version ever published (not
+\"  as a draft) by the Free Software Foundation.
+\"  .PP
+
+\"  ADDENDUM: How to use this License for your documents
+\"  .PP
+\"  To use this License in a document you have written, include a copy of
+\"  the License in the document and put the following copyright and
+\"  license notices just after the title page:
+\"  .PP
+\"      Copyright (c)  YEAR  YOUR NAME.
+\"      Permission is granted to copy, distribute and/or
+\"      modify this document under the terms of the GNU
+\"      Free Documentation License, Version 1.1 or any later
+\"      version published by the Free Software Foundation;
+\"      with the Invariant Sections being LIST THEIR TITLES,
+\"      with the Front-Cover Texts being LIST, and with the
+\"      Back-Cover Texts being LIST.  A copy of the license
+\"      is included in the section entitled "GNU Free
+\"      Documentation License".
+\"  .PP
+\"  If you have no Invariant Sections, write "with no Invariant Sections"
+\"  instead of saying which ones are invariant.  If you have no
+\"  Front-Cover Texts, write "no Front-Cover Texts" instead of
+\"  "Front-Cover Texts being LIST"; likewise for Back-Cover Texts.
+\"  .PP
+\"  If your document contains nontrivial examples of program code, we
+\"  recommend releasing these examples in parallel under your choice of
+\"  free software license, such as the GNU General Public License,
+\"  to permit their use in free software.
diff --git a/sim/common/sim-core.h b/sim/common/sim-core.h
index 5797be0..9607b60 100644
--- a/sim/common/sim-core.h
+++ b/sim/common/sim-core.h
@@ -241,6 +241,14 @@ extern unsigned sim_core_xor_write_buffer
  unsigned nr_bytes);
 
 
+/* Translate an address based on a map.  */
+
+extern void *sim_core_trans_addr
+(SIM_DESC sd,
+ sim_cpu *cpu,
+ unsigned map,
+ address_word addr);
+
 
 /* Fixed sized, processor oriented, read/write.
 
diff --git a/sim/common/sim-reason.c b/sim/common/sim-reason.c
index 93d5c7c..f24161d 100644
--- a/sim/common/sim-reason.c
+++ b/sim/common/sim-reason.c
@@ -36,7 +36,7 @@ sim_stop_reason (SIM_DESC sd, enum sim_stop *reason, int *sigrc)
       break;
     case sim_stopped :
     case sim_signalled :
-      *sigrc = sim_signal_to_target (sd, engine->sigrc);
+      *sigrc = sim_signal_to_gdb_signal (sd, engine->sigrc);
       break;
     default :
       abort ();
diff --git a/sim/common/sim-signal.c b/sim/common/sim-signal.c
index df0a371..5aff15f 100644
--- a/sim/common/sim-signal.c
+++ b/sim/common/sim-signal.c
@@ -94,41 +94,41 @@ sim_signal_to_host (SIM_DESC sd, SIM_SIGNAL sig)
 #endif
 }
 
-enum target_signal
-sim_signal_to_target (SIM_DESC sd, SIM_SIGNAL sig)
+enum gdb_signal
+sim_signal_to_gdb_signal (SIM_DESC sd, SIM_SIGNAL sig)
 {
   switch (sig)
     {
     case SIM_SIGINT :
-      return TARGET_SIGNAL_INT;
+      return GDB_SIGNAL_INT;
 
     case SIM_SIGABRT :
-      return TARGET_SIGNAL_ABRT;
+      return GDB_SIGNAL_ABRT;
 
     case SIM_SIGILL :
-      return TARGET_SIGNAL_ILL;
+      return GDB_SIGNAL_ILL;
 
     case SIM_SIGTRAP :
-      return TARGET_SIGNAL_TRAP;
+      return GDB_SIGNAL_TRAP;
 
     case SIM_SIGBUS :
-      return TARGET_SIGNAL_BUS;
+      return GDB_SIGNAL_BUS;
 
     case SIM_SIGSEGV :
-      return TARGET_SIGNAL_SEGV;
+      return GDB_SIGNAL_SEGV;
 
     case SIM_SIGXCPU :
-      return TARGET_SIGNAL_XCPU;
+      return GDB_SIGNAL_XCPU;
 
     case SIM_SIGFPE:
-      return TARGET_SIGNAL_FPE;
+      return GDB_SIGNAL_FPE;
       break;
 
     case SIM_SIGNONE:
-      return TARGET_SIGNAL_0;
+      return GDB_SIGNAL_0;
       break;
     }
 
   sim_io_eprintf (sd, "sim_signal_to_host: unknown signal: %d\n", sig);
-  return TARGET_SIGNAL_HUP;
+  return GDB_SIGNAL_HUP;
 }
diff --git a/sim/common/sim-signal.h b/sim/common/sim-signal.h
index b4ff409..13cbe5b 100644
--- a/sim/common/sim-signal.h
+++ b/sim/common/sim-signal.h
@@ -46,6 +46,6 @@ typedef enum {
 } SIM_SIGNAL;
 
 int sim_signal_to_host (SIM_DESC sd, SIM_SIGNAL);
-enum target_signal sim_signal_to_target (SIM_DESC sd, SIM_SIGNAL);
+enum gdb_signal sim_signal_to_gdb_signal (SIM_DESC sd, SIM_SIGNAL);
 
 #endif /* SIM_SIGNAL_H */
diff --git a/sim/common/sim-trace.c b/sim/common/sim-trace.c
index fc20d00..6b5d067 100644
--- a/sim/common/sim-trace.c
+++ b/sim/common/sim-trace.c
@@ -497,17 +497,6 @@ trace_uninstall (SIM_DESC sd)
     }
 }
 

-typedef enum {
-  trace_fmt_invalid,
-  trace_fmt_word,
-  trace_fmt_fp,
-  trace_fmt_fpu,
-  trace_fmt_string,
-  trace_fmt_bool,
-  trace_fmt_addr,
-  trace_fmt_instruction_incomplete,
-} data_fmt;
-
 /* compute the nr of trace data units consumed by data */
 static int
 save_data_size (TRACE_DATA *data,
@@ -519,7 +508,7 @@ save_data_size (TRACE_DATA *data,
 
 
 /* Archive DATA into the trace buffer */
-static void
+void
 save_data (SIM_DESC sd,
 	   TRACE_DATA *data,
 	   data_fmt fmt,
diff --git a/sim/common/sim-trace.h b/sim/common/sim-trace.h
index e824fc3..1ba6019 100644
--- a/sim/common/sim-trace.h
+++ b/sim/common/sim-trace.h
@@ -249,9 +249,26 @@ extern void trace_generic PARAMS ((SIM_DESC sd,
 				   ...))
      __attribute__((format (printf, 4, 5)));
 
+typedef enum {
+  trace_fmt_invalid,
+  trace_fmt_word,
+  trace_fmt_fp,
+  trace_fmt_fpu,
+  trace_fmt_string,
+  trace_fmt_bool,
+  trace_fmt_addr,
+  trace_fmt_instruction_incomplete,
+} data_fmt;
+
 /* Trace a varying number of word sized inputs/outputs.  trace_result*
    must be called to close the trace operation. */
 
+extern void save_data PARAMS ((SIM_DESC sd,
+                               TRACE_DATA *data,
+                               data_fmt fmt,
+                               long size,
+                               const void *buf));
+
 extern void trace_input0 PARAMS ((SIM_DESC sd,
 				  sim_cpu *cpu,
 				  int trace_idx));
diff --git a/sim/configure b/sim/configure
index 8fb62cb..7fd0fd8 100755
--- a/sim/configure
+++ b/sim/configure
@@ -3768,17 +3768,17 @@ subdirs="$subdirs arm"
 
        sim_testsuite=yes
        ;;
-   rx-*-*)
+   rl78-*-*)
 
-  sim_arch=rx
-  subdirs="$subdirs rx"
+  sim_arch=rl78
+  subdirs="$subdirs rl78"
 
 
        ;;
-   rl78-*-*)
+   rx-*-*)
 
-  sim_arch=rl78
-  subdirs="$subdirs rl78"
+  sim_arch=rx
+  subdirs="$subdirs rx"
 
 
        ;;
diff --git a/sim/cr16/ChangeLog b/sim/cr16/ChangeLog
index 266c5a4..ca3f5b1 100644
--- a/sim/cr16/ChangeLog
+++ b/sim/cr16/ChangeLog
@@ -1,3 +1,29 @@
+2012-06-17  Mike Frysinger  <vapier at gentoo.org>
+
+	* interp.c: Include config.h first.  Also include stdlib.h and
+	string.h so we can drop the sysdep.h include.
+
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-05-24  Pedro Alves  <palves at redhat.com>
+
+	PR gdb/7205
+
+        Replace TARGET_SIGNAL_ with GDB_SIGNAL_ throughout.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
+2011-12-30  Mike Frysinger  <vapier at gentoo.org>
+
+	PR sim/12862
+	* simops.c (OP_C_C): Only handle TARGET_SYS_fork, TARGET_SYS_execve,
+	TARGET_SYS_pipe, TARGET_SYS_rename, and TARGET_SYS_chown when they
+	are defined.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* aclocal.m4: New file.
diff --git a/sim/cr16/aclocal.m4 b/sim/cr16/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/cr16/aclocal.m4
+++ b/sim/cr16/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/cr16/config.in b/sim/cr16/config.in
index f29d045..0db6f1e 100644
--- a/sim/cr16/config.in
+++ b/sim/cr16/config.in
@@ -73,6 +73,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -102,3 +105,35 @@
 
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/cr16/configure b/sim/cr16/configure
index 1acae65..cb3a339 100644
--- a/sim/cr16/configure
+++ b/sim/cr16/configure
@@ -601,9 +601,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -622,6 +619,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -629,6 +627,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -720,6 +721,7 @@ enable_sim_trace
 enable_sim_profile
 with_pkgversion
 with_bugurl
+enable_werror
 enable_build_warnings
 enable_sim_build_warnings
 '
@@ -1357,8 +1359,11 @@ Optional Features:
   --enable-sim-stdio			Specify whether to use stdio for console input/output.
   --enable-sim-trace=opts		Enable tracing flags
   --enable-sim-profile=opts		Enable profiling flags
-  --enable-build-warnings Enable build-time compiler warnings if gcc is used
-  --enable-gdb-build-warnings Enable SIM specific build-time compiler warnings if gcc is used
+  --enable-werror         treat compile warnings as errors
+  --enable-build-warnings enable build-time compiler warnings if gcc is used
+  --enable-sim-build-warnings
+                          enable SIM specific build-time compiler warnings if
+                          gcc is used
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -2436,9 +2441,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3365,120 +3370,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3879,6 +3770,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3887,6 +3953,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -3992,6 +4059,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4568,7 +4646,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
@@ -4727,29 +4805,44 @@ sim_link_links="${sim_link_links} targ-vals.def"
 
 
 
-# NOTE: Don't add -Wall or -Wunused, they both include
-# -Wunused-parameter which reports bogus warnings.
-# NOTE: If you add to this list, remember to update
-# gdb/doc/gdbint.texinfo.
-build_warnings="-Wimplicit -Wreturn-type -Wcomment -Wtrigraphs \
--Wformat -Wparentheses -Wpointer-arith"
-# GCC supports -Wuninitialized only with -O or -On, n != 0.
-if test x${CFLAGS+set} = xset; then
-  case "${CFLAGS}" in
-    *"-O0"* ) ;;
-    *"-O"* )
-      build_warnings="${build_warnings} -Wuninitialized"
-    ;;
-  esac
-else
-  build_warnings="${build_warnings} -Wuninitialized"
+# Check whether --enable-werror was given.
+if test "${enable_werror+set}" = set; then :
+  enableval=$enable_werror; case "${enableval}" in
+     yes | y) ERROR_ON_WARNING="yes" ;;
+     no | n)  ERROR_ON_WARNING="no" ;;
+     *) as_fn_error "bad value ${enableval} for --enable-werror" "$LINENO" 5 ;;
+   esac
+fi
+
+
+# Enable -Werror by default when using gcc
+if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
+    ERROR_ON_WARNING=yes
 fi
-# Up for debate: -Wswitch -Wcomment -trigraphs -Wtrigraphs
-# -Wunused-function -Wunused-label -Wunused-variable -Wunused-value
-# -Wchar-subscripts -Wtraditional -Wshadow -Wcast-qual
-# -Wcast-align -Wwrite-strings -Wconversion -Wstrict-prototypes
-# -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls
-# -Woverloaded-virtual -Winline -Werror"
+
+WERROR_CFLAGS=""
+if test "${ERROR_ON_WARNING}" = yes ; then
+# NOTE: Disabled in the sim dir due to most sims generating warnings.
+#    WERROR_CFLAGS="-Werror"
+     true
+fi
+
+# The entries after -Wno-pointer-sign are disabled warnings which may
+# be enabled in the future, which can not currently be used to build
+# GDB.
+# NOTE: If you change this list, remember to update
+# gdb/doc/gdbint.texinfo.
+build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \
+-Wformat-nonliteral -Wno-pointer-sign \
+-Wno-unused -Wunused-value -Wunused-function \
+-Wno-switch -Wno-char-subscripts -Wmissing-prototypes"
+
+# Enable -Wno-format by default when using gcc on mingw since many
+# GCC versions complain about %I64.
+case "${host}" in
+  *-*-mingw32*) build_warnings="$build_warnings -Wno-format" ;;
+esac
+
 # Check whether --enable-build-warnings was given.
 if test "${enable_build_warnings+set}" = set; then :
   enableval=$enable_build_warnings; case "${enableval}" in
@@ -4781,7 +4874,6 @@ if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
 fi
 fi
 WARN_CFLAGS=""
-WERROR_CFLAGS=""
 if test "x${build_warnings}" != x -a "x$GCC" = xyes
 then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler warning flags" >&5
@@ -4812,8 +4904,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 	    CFLAGS="$saved_CFLAGS"
 	esac
     done
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS}${WERROR_CFLAGS}" >&5
-$as_echo "${WARN_CFLAGS}${WERROR_CFLAGS}" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS} ${WERROR_CFLAGS}" >&5
+$as_echo "${WARN_CFLAGS} ${WERROR_CFLAGS}" >&6; }
 fi
 
 
diff --git a/sim/cr16/interp.c b/sim/cr16/interp.c
index cdbbb2a..606a161 100644
--- a/sim/cr16/interp.c
+++ b/sim/cr16/interp.c
@@ -17,8 +17,10 @@
    You should have received a copy of the GNU General Public License 
    along with this program. If not, see <http://www.gnu.org/licenses/>.  */
 
+#include "config.h"
 #include <signal.h>
-#include "sysdep.h"
+#include <stdlib.h>
+#include <string.h>
 #include "bfd.h"
 #include "gdb/callback.h"
 #include "gdb/remote-sim.h"
@@ -1417,18 +1419,18 @@ sim_stop_reason (sd, reason, sigrc)
 
     case SIG_CR16_BUS:
       *reason = sim_stopped;
-      *sigrc = TARGET_SIGNAL_BUS;
+      *sigrc = GDB_SIGNAL_BUS;
       break;
 //
 //    case SIG_CR16_IAD:
 //      *reason = sim_stopped;
-//      *sigrc = TARGET_SIGNAL_IAD;
+//      *sigrc = GDB_SIGNAL_IAD;
 //      break;
 
     default:                                /* some signal */
       *reason = sim_stopped;
       if (stop_simulator && !State.exception)
-        *sigrc = TARGET_SIGNAL_INT;
+        *sigrc = GDB_SIGNAL_INT;
       else
         *sigrc = State.exception;
       break;
diff --git a/sim/cr16/simops.c b/sim/cr16/simops.c
index 23f0311..f8fee8a 100644
--- a/sim/cr16/simops.c
+++ b/sim/cr16/simops.c
@@ -5131,11 +5131,13 @@ OP_C_C ()
 	switch (FUNC)
 	  {
 #if !defined(__GO32__) && !defined(_WIN32)
+#ifdef TARGET_SYS_fork
 	  case TARGET_SYS_fork:
 	    trace_input ("<fork>", OP_VOID, OP_VOID, OP_VOID);
 	    RETVAL (fork ());
 	    trace_output_16 (result);
 	    break;
+#endif
 
 #define getpid() 47
 	  case TARGET_SYS_getpid:
@@ -5272,12 +5274,14 @@ OP_C_C ()
 	      }
 	    break;
 
+#ifdef TARGET_SYS_execve
 	  case TARGET_SYS_execve:
 	    trace_input ("<execve>", OP_VOID, OP_VOID, OP_VOID);
 	    RETVAL (execve (MEMPTR (PARM1), (char **) MEMPTR (PARM2<<16|PARM3),
 			     (char **)MEMPTR (PARM4)));
 	    trace_output_16 (result);
 	    break;
+#endif
 
 #ifdef TARGET_SYS_execv
 	  case TARGET_SYS_execv:
@@ -5287,6 +5291,7 @@ OP_C_C ()
 	    break;
 #endif
 
+#ifdef TARGET_SYS_pipe
 	  case TARGET_SYS_pipe:
 	    {
 	      reg_t buf;
@@ -5301,6 +5306,7 @@ OP_C_C ()
 	      trace_output_16 (result);
 	    }
 	  break;
+#endif
 
 #ifdef TARGET_SYS_wait
 	  case TARGET_SYS_wait:
@@ -5365,6 +5371,7 @@ OP_C_C ()
 	    trace_output_32 (result);
 	    break;
 
+#ifdef TARGET_SYS_rename
 	  case TARGET_SYS_rename:
 	    trace_input ("<rename>", OP_MEMREF, OP_MEMREF, OP_VOID);
 	    RETVAL (cr16_callback->rename (cr16_callback, 
@@ -5372,6 +5379,7 @@ OP_C_C ()
 				   MEMPTR ((((unsigned long)PARM4)<<16) |PARM3)));
 	    trace_output_16 (result);
 	    break;
+#endif
 
 	  case 0x408: /* REVISIT: Added a dummy getenv call. */
 	    trace_input ("<getenv>", OP_MEMREF, OP_MEMREF, OP_VOID);
@@ -5424,11 +5432,13 @@ OP_C_C ()
 	    break;
 #endif
 
+#ifdef TARGET_SYS_chown
 	  case TARGET_SYS_chown:
 	    trace_input ("<chown>", OP_VOID, OP_VOID, OP_VOID);
 	    RETVAL (chown (MEMPTR (PARM1), PARM2, PARM3));
 	    trace_output_16 (result);
 	    break;
+#endif
 
 	  case TARGET_SYS_chmod:
 	    trace_input ("<chmod>", OP_VOID, OP_VOID, OP_VOID);
diff --git a/sim/cris/ChangeLog b/sim/cris/ChangeLog
index 553dfd2..a14285c 100644
--- a/sim/cris/ChangeLog
+++ b/sim/cris/ChangeLog
@@ -1,3 +1,16 @@
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-05-18  Nick Clifton  <nickc at redhat.com>
+
+	PR 14072
+	* sim-if.c: Include config.h before system header files.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* aclocal.m4: New file.
diff --git a/sim/cris/aclocal.m4 b/sim/cris/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/cris/aclocal.m4
+++ b/sim/cris/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/cris/config.in b/sim/cris/config.in
index 7a7d555..a00564c 100644
--- a/sim/cris/config.in
+++ b/sim/cris/config.in
@@ -25,6 +25,9 @@
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
+/* Define to 1 if you have the `m' library (-lm). */
+#undef HAVE_LIBM
+
 /* Define to 1 if you have the `nsl' library (-lnsl). */
 #undef HAVE_LIBNSL
 
@@ -88,6 +91,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -118,6 +124,28 @@
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
 #if defined AC_APPLE_UNIVERSAL_BUILD
@@ -129,3 +157,13 @@
 #  undef WORDS_BIGENDIAN
 # endif
 #endif
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/cris/configure b/sim/cris/configure
index b106fef..153be18 100755
--- a/sim/cris/configure
+++ b/sim/cris/configure
@@ -604,9 +604,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -625,6 +622,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -632,6 +630,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -726,6 +727,7 @@ with_bugurl
 enable_sim_alignment
 enable_sim_hostendian
 enable_sim_scache
+enable_werror
 enable_build_warnings
 enable_sim_build_warnings
 enable_sim_hardware
@@ -1371,8 +1373,11 @@ Optional Features:
   --enable-sim-alignment=align		Specify strict,  nonstrict or forced alignment of memory accesses.
   --enable-sim-hostendian=end		Specify host byte endian orientation.
   --enable-sim-scache=size		Specify simulator execution cache size.
-  --enable-build-warnings Enable build-time compiler warnings if gcc is used
-  --enable-gdb-build-warnings Enable SIM specific build-time compiler warnings if gcc is used
+  --enable-werror         treat compile warnings as errors
+  --enable-build-warnings enable build-time compiler warnings if gcc is used
+  --enable-sim-build-warnings
+                          enable SIM specific build-time compiler warnings if
+                          gcc is used
   --enable-sim-hardware=LIST		Specify the hardware to be included in the build.
   --enable-sim-default-model=model	Specify default model to simulate.
   --enable-sim-environment=environment	Specify mixed, user, virtual or operating environment.
@@ -2455,9 +2460,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3384,120 +3389,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3898,6 +3789,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3906,6 +3972,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -4011,6 +4078,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4587,7 +4665,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
@@ -5076,29 +5154,44 @@ fi
 
 
 
-# NOTE: Don't add -Wall or -Wunused, they both include
-# -Wunused-parameter which reports bogus warnings.
-# NOTE: If you add to this list, remember to update
-# gdb/doc/gdbint.texinfo.
-build_warnings="-Wimplicit -Wreturn-type -Wcomment -Wtrigraphs \
--Wformat -Wparentheses -Wpointer-arith"
-# GCC supports -Wuninitialized only with -O or -On, n != 0.
-if test x${CFLAGS+set} = xset; then
-  case "${CFLAGS}" in
-    *"-O0"* ) ;;
-    *"-O"* )
-      build_warnings="${build_warnings} -Wuninitialized"
-    ;;
-  esac
-else
-  build_warnings="${build_warnings} -Wuninitialized"
+# Check whether --enable-werror was given.
+if test "${enable_werror+set}" = set; then :
+  enableval=$enable_werror; case "${enableval}" in
+     yes | y) ERROR_ON_WARNING="yes" ;;
+     no | n)  ERROR_ON_WARNING="no" ;;
+     *) as_fn_error "bad value ${enableval} for --enable-werror" "$LINENO" 5 ;;
+   esac
+fi
+
+
+# Enable -Werror by default when using gcc
+if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
+    ERROR_ON_WARNING=yes
 fi
-# Up for debate: -Wswitch -Wcomment -trigraphs -Wtrigraphs
-# -Wunused-function -Wunused-label -Wunused-variable -Wunused-value
-# -Wchar-subscripts -Wtraditional -Wshadow -Wcast-qual
-# -Wcast-align -Wwrite-strings -Wconversion -Wstrict-prototypes
-# -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls
-# -Woverloaded-virtual -Winline -Werror"
+
+WERROR_CFLAGS=""
+if test "${ERROR_ON_WARNING}" = yes ; then
+# NOTE: Disabled in the sim dir due to most sims generating warnings.
+#    WERROR_CFLAGS="-Werror"
+     true
+fi
+
+# The entries after -Wno-pointer-sign are disabled warnings which may
+# be enabled in the future, which can not currently be used to build
+# GDB.
+# NOTE: If you change this list, remember to update
+# gdb/doc/gdbint.texinfo.
+build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \
+-Wformat-nonliteral -Wno-pointer-sign \
+-Wno-unused -Wunused-value -Wunused-function \
+-Wno-switch -Wno-char-subscripts -Wmissing-prototypes"
+
+# Enable -Wno-format by default when using gcc on mingw since many
+# GCC versions complain about %I64.
+case "${host}" in
+  *-*-mingw32*) build_warnings="$build_warnings -Wno-format" ;;
+esac
+
 # Check whether --enable-build-warnings was given.
 if test "${enable_build_warnings+set}" = set; then :
   enableval=$enable_build_warnings; case "${enableval}" in
@@ -5130,7 +5223,6 @@ if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
 fi
 fi
 WARN_CFLAGS=""
-WERROR_CFLAGS=""
 if test "x${build_warnings}" != x -a "x$GCC" = xyes
 then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler warning flags" >&5
@@ -5161,8 +5253,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 	    CFLAGS="$saved_CFLAGS"
 	esac
     done
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS}${WERROR_CFLAGS}" >&5
-$as_echo "${WARN_CFLAGS}${WERROR_CFLAGS}" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS} ${WERROR_CFLAGS}" >&5
+$as_echo "${WARN_CFLAGS} ${WERROR_CFLAGS}" >&6; }
 fi
 
 
diff --git a/sim/cris/sim-if.c b/sim/cris/sim-if.c
index 56f8d42..19999e2 100644
--- a/sim/cris/sim-if.c
+++ b/sim/cris/sim-if.c
@@ -20,6 +20,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 /* Based on the fr30 file, mixing in bits from the i960 and pruning of
    dead code.  */
 
+#include "config.h"
 #include "libiberty.h"
 #include "bfd.h"
 #include "elf-bfd.h"
diff --git a/sim/d10v/ChangeLog b/sim/d10v/ChangeLog
index 6bafb39..107befc 100644
--- a/sim/d10v/ChangeLog
+++ b/sim/d10v/ChangeLog
@@ -1,3 +1,23 @@
+2012-06-19  Joel Brobecker  <brobecker at adacore.com>
+
+	* interp.c: #include "config.h" instead of "sysdep.h".
+	Add conditional include of string.h or strings.h, as well as
+	conditional include of stdlib.h.
+
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-05-24  Pedro Alves  <palves at redhat.com>
+
+	PR gdb/7205
+
+        Replace TARGET_SIGNAL_ with GDB_SIGNAL_ throughout.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* aclocal.m4: New file.
diff --git a/sim/d10v/aclocal.m4 b/sim/d10v/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/d10v/aclocal.m4
+++ b/sim/d10v/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/d10v/config.in b/sim/d10v/config.in
index f29d045..0db6f1e 100644
--- a/sim/d10v/config.in
+++ b/sim/d10v/config.in
@@ -73,6 +73,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -102,3 +105,35 @@
 
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/d10v/configure b/sim/d10v/configure
index 1acae65..cb3a339 100755
--- a/sim/d10v/configure
+++ b/sim/d10v/configure
@@ -601,9 +601,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -622,6 +619,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -629,6 +627,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -720,6 +721,7 @@ enable_sim_trace
 enable_sim_profile
 with_pkgversion
 with_bugurl
+enable_werror
 enable_build_warnings
 enable_sim_build_warnings
 '
@@ -1357,8 +1359,11 @@ Optional Features:
   --enable-sim-stdio			Specify whether to use stdio for console input/output.
   --enable-sim-trace=opts		Enable tracing flags
   --enable-sim-profile=opts		Enable profiling flags
-  --enable-build-warnings Enable build-time compiler warnings if gcc is used
-  --enable-gdb-build-warnings Enable SIM specific build-time compiler warnings if gcc is used
+  --enable-werror         treat compile warnings as errors
+  --enable-build-warnings enable build-time compiler warnings if gcc is used
+  --enable-sim-build-warnings
+                          enable SIM specific build-time compiler warnings if
+                          gcc is used
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -2436,9 +2441,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3365,120 +3370,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3879,6 +3770,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3887,6 +3953,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -3992,6 +4059,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4568,7 +4646,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
@@ -4727,29 +4805,44 @@ sim_link_links="${sim_link_links} targ-vals.def"
 
 
 
-# NOTE: Don't add -Wall or -Wunused, they both include
-# -Wunused-parameter which reports bogus warnings.
-# NOTE: If you add to this list, remember to update
-# gdb/doc/gdbint.texinfo.
-build_warnings="-Wimplicit -Wreturn-type -Wcomment -Wtrigraphs \
--Wformat -Wparentheses -Wpointer-arith"
-# GCC supports -Wuninitialized only with -O or -On, n != 0.
-if test x${CFLAGS+set} = xset; then
-  case "${CFLAGS}" in
-    *"-O0"* ) ;;
-    *"-O"* )
-      build_warnings="${build_warnings} -Wuninitialized"
-    ;;
-  esac
-else
-  build_warnings="${build_warnings} -Wuninitialized"
+# Check whether --enable-werror was given.
+if test "${enable_werror+set}" = set; then :
+  enableval=$enable_werror; case "${enableval}" in
+     yes | y) ERROR_ON_WARNING="yes" ;;
+     no | n)  ERROR_ON_WARNING="no" ;;
+     *) as_fn_error "bad value ${enableval} for --enable-werror" "$LINENO" 5 ;;
+   esac
+fi
+
+
+# Enable -Werror by default when using gcc
+if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
+    ERROR_ON_WARNING=yes
 fi
-# Up for debate: -Wswitch -Wcomment -trigraphs -Wtrigraphs
-# -Wunused-function -Wunused-label -Wunused-variable -Wunused-value
-# -Wchar-subscripts -Wtraditional -Wshadow -Wcast-qual
-# -Wcast-align -Wwrite-strings -Wconversion -Wstrict-prototypes
-# -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls
-# -Woverloaded-virtual -Winline -Werror"
+
+WERROR_CFLAGS=""
+if test "${ERROR_ON_WARNING}" = yes ; then
+# NOTE: Disabled in the sim dir due to most sims generating warnings.
+#    WERROR_CFLAGS="-Werror"
+     true
+fi
+
+# The entries after -Wno-pointer-sign are disabled warnings which may
+# be enabled in the future, which can not currently be used to build
+# GDB.
+# NOTE: If you change this list, remember to update
+# gdb/doc/gdbint.texinfo.
+build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \
+-Wformat-nonliteral -Wno-pointer-sign \
+-Wno-unused -Wunused-value -Wunused-function \
+-Wno-switch -Wno-char-subscripts -Wmissing-prototypes"
+
+# Enable -Wno-format by default when using gcc on mingw since many
+# GCC versions complain about %I64.
+case "${host}" in
+  *-*-mingw32*) build_warnings="$build_warnings -Wno-format" ;;
+esac
+
 # Check whether --enable-build-warnings was given.
 if test "${enable_build_warnings+set}" = set; then :
   enableval=$enable_build_warnings; case "${enableval}" in
@@ -4781,7 +4874,6 @@ if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
 fi
 fi
 WARN_CFLAGS=""
-WERROR_CFLAGS=""
 if test "x${build_warnings}" != x -a "x$GCC" = xyes
 then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler warning flags" >&5
@@ -4812,8 +4904,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 	    CFLAGS="$saved_CFLAGS"
 	esac
     done
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS}${WERROR_CFLAGS}" >&5
-$as_echo "${WARN_CFLAGS}${WERROR_CFLAGS}" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS} ${WERROR_CFLAGS}" >&5
+$as_echo "${WARN_CFLAGS} ${WERROR_CFLAGS}" >&6; }
 fi
 
 
diff --git a/sim/d10v/interp.c b/sim/d10v/interp.c
index cd18ead..23db647 100644
--- a/sim/d10v/interp.c
+++ b/sim/d10v/interp.c
@@ -1,5 +1,5 @@
+#include "config.h"
 #include <signal.h>
-#include "sysdep.h"
 #include "bfd.h"
 #include "gdb/callback.h"
 #include "gdb/remote-sim.h"
@@ -8,6 +8,18 @@
 #include "gdb/sim-d10v.h"
 #include "gdb/signals.h"
 
+#ifdef HAVE_STRING_H
+#include <string.h>
+#else
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif /* HAVE_STRING_H */
+#endif /* HAVE_STRINGS_H */
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
 enum _leftright { LEFT_FIRST, RIGHT_FIRST };
 
 static char *myname;
@@ -1278,13 +1290,13 @@ sim_stop_reason (sd, reason, sigrc)
 
     case SIG_D10V_BUS:
       *reason = sim_stopped;
-      *sigrc = TARGET_SIGNAL_BUS;
+      *sigrc = GDB_SIGNAL_BUS;
       break;
 
     default:				/* some signal */
       *reason = sim_stopped;
       if (stop_simulator && !State.exception)
-	*sigrc = TARGET_SIGNAL_INT;
+	*sigrc = GDB_SIGNAL_INT;
       else
 	*sigrc = State.exception;
       break;
diff --git a/sim/erc32/ChangeLog b/sim/erc32/ChangeLog
index eacec76..e5d3179 100644
--- a/sim/erc32/ChangeLog
+++ b/sim/erc32/ChangeLog
@@ -1,3 +1,28 @@
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* sys.h: Include "config.h".
+
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-05-24  Pedro Alves  <palves at redhat.com>
+
+	PR gdb/7205
+
+        Replace TARGET_SIGNAL_ with GDB_SIGNAL_ throughout.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
+2011-12-31  Mike Frysinger  <vapier at gentoo.org>
+
+	PR sim/9971:
+	* configure.ac: Change AC_CHECK_LIB to AC_SEARCH_LIBS to match
+	the code in gdb's configure.ac with $TERMCAP.
+	* configure: Regenerated.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* aclocal.m4: New file.
diff --git a/sim/erc32/aclocal.m4 b/sim/erc32/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/erc32/aclocal.m4
+++ b/sim/erc32/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/erc32/config.in b/sim/erc32/config.in
index f29d045..0db6f1e 100644
--- a/sim/erc32/config.in
+++ b/sim/erc32/config.in
@@ -73,6 +73,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -102,3 +105,35 @@
 
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/erc32/configure b/sim/erc32/configure
index 7a74c47..dfab09d 100755
--- a/sim/erc32/configure
+++ b/sim/erc32/configure
@@ -603,9 +603,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -624,6 +621,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -631,6 +629,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -2434,9 +2435,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3363,120 +3364,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3877,6 +3764,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3885,6 +3947,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -3990,6 +4053,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4566,7 +4640,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
@@ -4765,38 +4839,61 @@ $as_echo "$sim_cv_os_cygwin" >&6; }
 if test x$sim_cv_os_cygwin = xyes; then
   TERMCAP='`if test -r ../../libtermcap/libtermcap.a; then echo ../../libtermcap/libtermcap.a; else echo -ltermcap; fi` -luser32'
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ltermcap" >&5
-$as_echo_n "checking for main in -ltermcap... " >&6; }
-if test "${ac_cv_lib_termcap_main+set}" = set; then :
+  # Keep in sync with gdb's configure.ac list.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing tgetent" >&5
+$as_echo_n "checking for library containing tgetent... " >&6; }
+if test "${ac_cv_search_tgetent+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ltermcap  $LIBS"
+  ac_func_search_save_LIBS=$LIBS
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char tgetent ();
 int
 main ()
 {
-return main ();
+return tgetent ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_termcap_main=yes
-else
-  ac_cv_lib_termcap_main=no
+for ac_lib in '' termcap tinfo curses ncurses; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_tgetent=$ac_res
 fi
 rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+    conftest$ac_exeext
+  if test "${ac_cv_search_tgetent+set}" = set; then :
+  break
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_termcap_main" >&5
-$as_echo "$ac_cv_lib_termcap_main" >&6; }
-if test "x$ac_cv_lib_termcap_main" = x""yes; then :
-  TERMCAP=-ltermcap
+done
+if test "${ac_cv_search_tgetent+set}" = set; then :
+
+else
+  ac_cv_search_tgetent=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_tgetent" >&5
+$as_echo "$ac_cv_search_tgetent" >&6; }
+ac_res=$ac_cv_search_tgetent
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+  TERMCAP=$ac_cv_search_tgetent
 else
   TERMCAP=""
 fi
diff --git a/sim/erc32/configure.ac b/sim/erc32/configure.ac
index 5a43b5e..bc46091 100644
--- a/sim/erc32/configure.ac
+++ b/sim/erc32/configure.ac
@@ -17,7 +17,9 @@ lose
 if test x$sim_cv_os_cygwin = xyes; then
   TERMCAP='`if test -r ../../libtermcap/libtermcap.a; then echo ../../libtermcap/libtermcap.a; else echo -ltermcap; fi` -luser32'
 else
-  AC_CHECK_LIB(termcap, main, TERMCAP=-ltermcap, TERMCAP="")
+  # Keep in sync with gdb's configure.ac list.
+  AC_SEARCH_LIBS(tgetent, [termcap tinfo curses ncurses],
+    [TERMCAP=$ac_cv_search_tgetent], [TERMCAP=""])
 fi
 AC_SUBST(TERMCAP)
 
diff --git a/sim/erc32/interf.c b/sim/erc32/interf.c
index d94201a..d869cd5 100644
--- a/sim/erc32/interf.c
+++ b/sim/erc32/interf.c
@@ -388,13 +388,13 @@ sim_stop_reason(sd, reason, sigrc)
     switch (simstat) {
 	case CTRL_C:
 	*reason = sim_stopped;
-	*sigrc = TARGET_SIGNAL_INT;
+	*sigrc = GDB_SIGNAL_INT;
 	break;
     case OK:
     case TIME_OUT:
     case BPT_HIT:
 	*reason = sim_stopped;
-	*sigrc = TARGET_SIGNAL_TRAP;
+	*sigrc = GDB_SIGNAL_TRAP;
 	break;
     case ERROR:
 	*sigrc = 0;
diff --git a/sim/erc32/sis.h b/sim/erc32/sis.h
index fcabf9d..606f450 100644
--- a/sim/erc32/sis.h
+++ b/sim/erc32/sis.h
@@ -20,6 +20,7 @@
  * 
  */
 
+#include "config.h"
 #include "ansidecl.h"
 #include "gdb/callback.h"
 #include "gdb/remote-sim.h"
diff --git a/sim/frv/ChangeLog b/sim/frv/ChangeLog
index f230732..c9af6e8 100644
--- a/sim/frv/ChangeLog
+++ b/sim/frv/ChangeLog
@@ -1,3 +1,11 @@
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* aclocal.m4: New file.
diff --git a/sim/frv/aclocal.m4 b/sim/frv/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/frv/aclocal.m4
+++ b/sim/frv/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/frv/config.in b/sim/frv/config.in
index 21082c5..8de933c 100644
--- a/sim/frv/config.in
+++ b/sim/frv/config.in
@@ -76,6 +76,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -106,6 +109,28 @@
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
 #if defined AC_APPLE_UNIVERSAL_BUILD
@@ -117,3 +142,13 @@
 #  undef WORDS_BIGENDIAN
 # endif
 #endif
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/frv/configure b/sim/frv/configure
index db65ec3..cc027a1 100755
--- a/sim/frv/configure
+++ b/sim/frv/configure
@@ -605,9 +605,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -626,6 +623,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -633,6 +631,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -2452,9 +2453,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3381,120 +3382,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3895,6 +3782,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3903,6 +3965,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -4008,6 +4071,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4584,7 +4658,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
diff --git a/sim/h8300/ChangeLog b/sim/h8300/ChangeLog
index 1d03e99..9317b17 100644
--- a/sim/h8300/ChangeLog
+++ b/sim/h8300/ChangeLog
@@ -1,3 +1,17 @@
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-05-18  Nick Clifton  <nickc at redhat.com>
+
+	PR 14072
+	* compile.c: Include config.h before system header files.
+	* sim-main.h: Likewise.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* aclocal.m4: New file.
diff --git a/sim/h8300/aclocal.m4 b/sim/h8300/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/h8300/aclocal.m4
+++ b/sim/h8300/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/h8300/compile.c b/sim/h8300/compile.c
index 7b4a5fa..13d5cae 100644
--- a/sim/h8300/compile.c
+++ b/sim/h8300/compile.c
@@ -17,6 +17,7 @@
  * AND FITNESS FOR A PARTICULAR PURPOSE.
  */
 
+#include "config.h"
 #include <signal.h>
 #ifdef HAVE_TIME_H
 #include <time.h>
diff --git a/sim/h8300/config.in b/sim/h8300/config.in
index 80ae158..23e3b04 100644
--- a/sim/h8300/config.in
+++ b/sim/h8300/config.in
@@ -76,6 +76,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -105,3 +108,35 @@
 
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/h8300/configure b/sim/h8300/configure
index c42f7a2..7aa66b9 100755
--- a/sim/h8300/configure
+++ b/sim/h8300/configure
@@ -601,9 +601,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -622,6 +619,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -629,6 +627,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -2432,9 +2433,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3361,120 +3362,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3875,6 +3762,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3883,6 +3945,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -3988,6 +4051,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4564,7 +4638,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
diff --git a/sim/h8300/sim-main.h b/sim/h8300/sim-main.h
index 65cc999..964388a 100644
--- a/sim/h8300/sim-main.h
+++ b/sim/h8300/sim-main.h
@@ -1,5 +1,6 @@
 /* Main header for the Hitachi h8/300 architecture.  */
 
+#include "config.h"
 #include "bfd.h"
 
 #ifndef SIM_MAIN_H
diff --git a/sim/igen/ChangeLog b/sim/igen/ChangeLog
index fbd36cb..431d167 100644
--- a/sim/igen/ChangeLog
+++ b/sim/igen/ChangeLog
@@ -1,3 +1,7 @@
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* configure: Regenerate.
+
 2011-10-17  Mike Frysinger  <vapier at gentoo.org>
 
 	* configure.ac: Change include to common/acinclude.m4.
diff --git a/sim/igen/configure b/sim/igen/configure
index ae35d57..ddb7f75 100755
--- a/sim/igen/configure
+++ b/sim/igen/configure
@@ -685,6 +685,7 @@ SHELL'
 ac_subst_files=''
 ac_user_opts='
 enable_option_checking
+enable_werror
 enable_build_warnings
 enable_sim_build_warnings
 '
@@ -1315,8 +1316,11 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-build-warnings Enable build-time compiler warnings if gcc is used
-  --enable-gdb-build-warnings Enable SIM specific build-time compiler warnings if gcc is used
+  --enable-werror         treat compile warnings as errors
+  --enable-build-warnings enable build-time compiler warnings if gcc is used
+  --enable-sim-build-warnings
+                          enable SIM specific build-time compiler warnings if
+                          gcc is used
 
 Some influential environment variables:
   CC          C compiler command
@@ -2107,6 +2111,44 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
+##                                                          -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# Based on depend.m4 from automake 1.9, modified for standalone use in
+# an environment where GNU make is required.
+
+# ZW_PROG_COMPILER_DEPENDENCIES
+# -----------------------------
+# Variant of _AM_DEPENDENCIES which just does the dependency probe and
+# sets fooDEPMODE accordingly.  Cache-variable compatible with
+# original; not side-effect compatible.  As the users of this macro
+# may require accurate dependencies for correct builds, it does *not*
+# honor --disable-dependency-checking, and failure to detect a usable
+# method is an error.  depcomp is assumed to be located in
+# $ac_aux_dir.
+#
+# FIXME: Should use the Autoconf 2.5x language-selection mechanism.
+
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+
+
+# ZW_CREATE_DEPDIR
+# ----------------
+# As AM_SET_DEPDIR, but also create the directory at config.status time.
+
+
 
 
 
@@ -2282,9 +2324,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3197,29 +3239,44 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
-# NOTE: Don't add -Wall or -Wunused, they both include
-# -Wunused-parameter which reports bogus warnings.
-# NOTE: If you add to this list, remember to update
+# Check whether --enable-werror was given.
+if test "${enable_werror+set}" = set; then :
+  enableval=$enable_werror; case "${enableval}" in
+     yes | y) ERROR_ON_WARNING="yes" ;;
+     no | n)  ERROR_ON_WARNING="no" ;;
+     *) as_fn_error "bad value ${enableval} for --enable-werror" "$LINENO" 5 ;;
+   esac
+fi
+
+
+# Enable -Werror by default when using gcc
+if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
+    ERROR_ON_WARNING=yes
+fi
+
+WERROR_CFLAGS=""
+if test "${ERROR_ON_WARNING}" = yes ; then
+# NOTE: Disabled in the sim dir due to most sims generating warnings.
+#    WERROR_CFLAGS="-Werror"
+     true
+fi
+
+# The entries after -Wno-pointer-sign are disabled warnings which may
+# be enabled in the future, which can not currently be used to build
+# GDB.
+# NOTE: If you change this list, remember to update
 # gdb/doc/gdbint.texinfo.
-build_warnings="-Wimplicit -Wreturn-type -Wcomment -Wtrigraphs \
--Wformat -Wparentheses -Wpointer-arith"
-# GCC supports -Wuninitialized only with -O or -On, n != 0.
-if test x${CFLAGS+set} = xset; then
-  case "${CFLAGS}" in
-    *"-O0"* ) ;;
-    *"-O"* )
-      build_warnings="${build_warnings} -Wuninitialized"
-    ;;
-  esac
-else
-  build_warnings="${build_warnings} -Wuninitialized"
-fi
-# Up for debate: -Wswitch -Wcomment -trigraphs -Wtrigraphs
-# -Wunused-function -Wunused-label -Wunused-variable -Wunused-value
-# -Wchar-subscripts -Wtraditional -Wshadow -Wcast-qual
-# -Wcast-align -Wwrite-strings -Wconversion -Wstrict-prototypes
-# -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls
-# -Woverloaded-virtual -Winline -Werror"
+build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \
+-Wformat-nonliteral -Wno-pointer-sign \
+-Wno-unused -Wunused-value -Wunused-function \
+-Wno-switch -Wno-char-subscripts -Wmissing-prototypes"
+
+# Enable -Wno-format by default when using gcc on mingw since many
+# GCC versions complain about %I64.
+case "${host}" in
+  *-*-mingw32*) build_warnings="$build_warnings -Wno-format" ;;
+esac
+
 # Check whether --enable-build-warnings was given.
 if test "${enable_build_warnings+set}" = set; then :
   enableval=$enable_build_warnings; case "${enableval}" in
@@ -3251,7 +3308,6 @@ if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
 fi
 fi
 WARN_CFLAGS=""
-WERROR_CFLAGS=""
 if test "x${build_warnings}" != x -a "x$GCC" = xyes
 then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler warning flags" >&5
@@ -3282,8 +3338,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 	    CFLAGS="$saved_CFLAGS"
 	esac
     done
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS}${WERROR_CFLAGS}" >&5
-$as_echo "${WARN_CFLAGS}${WERROR_CFLAGS}" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS} ${WERROR_CFLAGS}" >&5
+$as_echo "${WARN_CFLAGS} ${WERROR_CFLAGS}" >&6; }
 fi
 
 
diff --git a/sim/iq2000/ChangeLog b/sim/iq2000/ChangeLog
index edaac95..553c8ef 100644
--- a/sim/iq2000/ChangeLog
+++ b/sim/iq2000/ChangeLog
@@ -1,3 +1,11 @@
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* aclocal.m4: New file.
diff --git a/sim/iq2000/aclocal.m4 b/sim/iq2000/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/iq2000/aclocal.m4
+++ b/sim/iq2000/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/iq2000/config.in b/sim/iq2000/config.in
index 21082c5..8de933c 100644
--- a/sim/iq2000/config.in
+++ b/sim/iq2000/config.in
@@ -76,6 +76,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -106,6 +109,28 @@
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
 #if defined AC_APPLE_UNIVERSAL_BUILD
@@ -117,3 +142,13 @@
 #  undef WORDS_BIGENDIAN
 # endif
 #endif
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/iq2000/configure b/sim/iq2000/configure
index 28bb4b8..13a8648 100755
--- a/sim/iq2000/configure
+++ b/sim/iq2000/configure
@@ -604,9 +604,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -625,6 +622,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -632,6 +630,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -2451,9 +2452,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3380,120 +3381,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3894,6 +3781,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3902,6 +3964,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -4007,6 +4070,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4583,7 +4657,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
diff --git a/sim/lm32/ChangeLog b/sim/lm32/ChangeLog
index 02934a9..df256ec 100755
--- a/sim/lm32/ChangeLog
+++ b/sim/lm32/ChangeLog
@@ -1,3 +1,11 @@
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* aclocal.m4: New file.
diff --git a/sim/lm32/aclocal.m4 b/sim/lm32/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/lm32/aclocal.m4
+++ b/sim/lm32/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/lm32/config.in b/sim/lm32/config.in
index 21082c5..faafaf4 100644
--- a/sim/lm32/config.in
+++ b/sim/lm32/config.in
@@ -25,6 +25,9 @@
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
+/* Define to 1 if you have the `m' library (-lm). */
+#undef HAVE_LIBM
+
 /* Define to 1 if you have the `nsl' library (-lnsl). */
 #undef HAVE_LIBNSL
 
@@ -76,6 +79,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -106,6 +112,28 @@
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
 #if defined AC_APPLE_UNIVERSAL_BUILD
@@ -117,3 +145,13 @@
 #  undef WORDS_BIGENDIAN
 # endif
 #endif
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/lm32/configure b/sim/lm32/configure
index c0c2a52..b4826ca 100755
--- a/sim/lm32/configure
+++ b/sim/lm32/configure
@@ -604,9 +604,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -625,6 +622,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -632,6 +630,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -2451,9 +2452,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3380,120 +3381,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3894,6 +3781,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3902,6 +3964,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -4007,6 +4070,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4583,7 +4657,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
diff --git a/sim/m32c/ChangeLog b/sim/m32c/ChangeLog
index fce8381..3293da0 100644
--- a/sim/m32c/ChangeLog
+++ b/sim/m32c/ChangeLog
@@ -1,3 +1,25 @@
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-05-24  Pedro Alves  <palves at redhat.com>
+
+	PR gdb/7205
+
+        Replace TARGET_SIGNAL_ with GDB_SIGNAL_ throughout.
+
+2012-05-18  Nick Clifton  <nickc at redhat.com>
+
+	PR 14072
+	* gdb-if.c: Include config.h before system header files.
+	* load.c: Likewise.
+	* syscalls.c: Likewise.
+	* trace.c: Likewise.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
 2012-01-02  Joel Brobecker  <brobecker at adacore.com>
 
 	* blinky.S, gloss.S, sample.S: Reformat copyright header.
diff --git a/sim/m32c/aclocal.m4 b/sim/m32c/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/m32c/aclocal.m4
+++ b/sim/m32c/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/m32c/config.in b/sim/m32c/config.in
index c481493..5de3b5e 100644
--- a/sim/m32c/config.in
+++ b/sim/m32c/config.in
@@ -1,4 +1,4 @@
-/* config.in.  Generated from configure.in by autoheader.  */
+/* config.in.  Generated from configure.ac by autoheader.  */
 
 /* Define to 1 if translation of program messages to the user's native
    language is requested. */
@@ -88,6 +88,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -117,3 +120,35 @@
 
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/m32c/configure b/sim/m32c/configure
index 0f1fa6c..1b01ae3 100755
--- a/sim/m32c/configure
+++ b/sim/m32c/configure
@@ -601,9 +601,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -622,6 +619,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -629,6 +627,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -2432,9 +2433,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3361,120 +3362,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3875,6 +3762,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3883,6 +3945,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -3988,6 +4051,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4564,7 +4638,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
diff --git a/sim/m32c/gdb-if.c b/sim/m32c/gdb-if.c
index c18f0c7..bf84903 100644
--- a/sim/m32c/gdb-if.c
+++ b/sim/m32c/gdb-if.c
@@ -18,7 +18,7 @@ GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-
+#include "config.h"
 #include <stdio.h>
 #include <assert.h>
 #include <signal.h>
@@ -530,28 +530,28 @@ m32c_signal_to_target (int m32c)
   switch (m32c)
     {
     case 4:
-      return TARGET_SIGNAL_ILL;
+      return GDB_SIGNAL_ILL;
 
     case 5:
-      return TARGET_SIGNAL_TRAP;
+      return GDB_SIGNAL_TRAP;
 
     case 10:
-      return TARGET_SIGNAL_BUS;
+      return GDB_SIGNAL_BUS;
 
     case 11:
-      return TARGET_SIGNAL_SEGV;
+      return GDB_SIGNAL_SEGV;
 
     case 24:
-      return TARGET_SIGNAL_XCPU;
+      return GDB_SIGNAL_XCPU;
 
     case 2:
-      return TARGET_SIGNAL_INT;
+      return GDB_SIGNAL_INT;
 
     case 8:
-      return TARGET_SIGNAL_FPE;
+      return GDB_SIGNAL_FPE;
 
     case 6:
-      return TARGET_SIGNAL_ABRT;
+      return GDB_SIGNAL_ABRT;
     }
 
   return 0;
@@ -566,7 +566,7 @@ handle_step (int rc)
   if (M32C_STEPPED (rc) || M32C_HIT_BREAK (rc))
     {
       reason = sim_stopped;
-      siggnal = TARGET_SIGNAL_TRAP;
+      siggnal = GDB_SIGNAL_TRAP;
     }
   else if (M32C_STOPPED (rc))
     {
@@ -613,7 +613,7 @@ sim_resume (SIM_DESC sd, int step, int sig_to_deliver)
 	    {
 	      stop = 0;
 	      reason = sim_stopped;
-	      siggnal = TARGET_SIGNAL_INT;
+	      siggnal = GDB_SIGNAL_INT;
 	      break;
 	    }
 
diff --git a/sim/m32c/load.c b/sim/m32c/load.c
index 8b3545c..8050d65 100644
--- a/sim/m32c/load.c
+++ b/sim/m32c/load.c
@@ -18,7 +18,7 @@ GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-
+#include "config.h"
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
diff --git a/sim/m32c/syscalls.c b/sim/m32c/syscalls.c
index c5a72c1..82658ad 100644
--- a/sim/m32c/syscalls.c
+++ b/sim/m32c/syscalls.c
@@ -18,7 +18,7 @@ GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-
+#include "config.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <fcntl.h>
diff --git a/sim/m32c/trace.c b/sim/m32c/trace.c
index 4b2b386..64084ed 100644
--- a/sim/m32c/trace.c
+++ b/sim/m32c/trace.c
@@ -18,7 +18,7 @@ GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-
+#include "config.h"
 #include <stdio.h>
 #include <stdarg.h>
 #include <string.h>
diff --git a/sim/m32r/ChangeLog b/sim/m32r/ChangeLog
index 0736889..e0cf491 100644
--- a/sim/m32r/ChangeLog
+++ b/sim/m32r/ChangeLog
@@ -1,3 +1,15 @@
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-03-25  Mike Frysinger  <vapier at gentoo.org>
+
+	* traps-linux.c (sim_core_trans_addr): Delete prototype.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* aclocal.m4: New file.
diff --git a/sim/m32r/aclocal.m4 b/sim/m32r/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/m32r/aclocal.m4
+++ b/sim/m32r/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/m32r/config.in b/sim/m32r/config.in
index 21082c5..8de933c 100644
--- a/sim/m32r/config.in
+++ b/sim/m32r/config.in
@@ -76,6 +76,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -106,6 +109,28 @@
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
 #if defined AC_APPLE_UNIVERSAL_BUILD
@@ -117,3 +142,13 @@
 #  undef WORDS_BIGENDIAN
 # endif
 #endif
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/m32r/configure b/sim/m32r/configure
index 115496f..382a4b2 100755
--- a/sim/m32r/configure
+++ b/sim/m32r/configure
@@ -606,9 +606,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -627,6 +624,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -634,6 +632,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -2453,9 +2454,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3382,120 +3383,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3896,6 +3783,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3904,6 +3966,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -4009,6 +4072,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4585,7 +4659,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
diff --git a/sim/m32r/traps-linux.c b/sim/m32r/traps-linux.c
index 0138a4e..d7d552b 100644
--- a/sim/m32r/traps-linux.c
+++ b/sim/m32r/traps-linux.c
@@ -141,7 +141,6 @@ static void *
 t2h_addr (host_callback *cb, struct cb_syscall *sc,
           unsigned long taddr)
 {
-  extern sim_core_trans_addr (SIM_DESC, sim_cpu *, unsigned, address_word);
   void *addr;
   SIM_DESC sd = (SIM_DESC) sc->p1;
   SIM_CPU *cpu = (SIM_CPU *) sc->p2;
diff --git a/sim/m68hc11/ChangeLog b/sim/m68hc11/ChangeLog
index 4fdc42f..645bd8b 100644
--- a/sim/m68hc11/ChangeLog
+++ b/sim/m68hc11/ChangeLog
@@ -1,3 +1,11 @@
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* aclocal.m4: New file.
diff --git a/sim/m68hc11/aclocal.m4 b/sim/m68hc11/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/m68hc11/aclocal.m4
+++ b/sim/m68hc11/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/m68hc11/config.in b/sim/m68hc11/config.in
index 21082c5..faafaf4 100644
--- a/sim/m68hc11/config.in
+++ b/sim/m68hc11/config.in
@@ -25,6 +25,9 @@
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
+/* Define to 1 if you have the `m' library (-lm). */
+#undef HAVE_LIBM
+
 /* Define to 1 if you have the `nsl' library (-lnsl). */
 #undef HAVE_LIBNSL
 
@@ -76,6 +79,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -106,6 +112,28 @@
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
 #if defined AC_APPLE_UNIVERSAL_BUILD
@@ -117,3 +145,13 @@
 #  undef WORDS_BIGENDIAN
 # endif
 #endif
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/m68hc11/configure b/sim/m68hc11/configure
index d94148d..c7eaea0 100755
--- a/sim/m68hc11/configure
+++ b/sim/m68hc11/configure
@@ -602,9 +602,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -623,6 +620,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -630,6 +628,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -724,6 +725,7 @@ with_bugurl
 enable_sim_inline
 enable_sim_alignment
 enable_sim_hostendian
+enable_werror
 enable_build_warnings
 enable_sim_build_warnings
 enable_sim_hardware
@@ -1365,8 +1367,11 @@ Optional Features:
   --enable-sim-inline=inlines		Specify which functions should be inlined.
   --enable-sim-alignment=align		Specify strict,  nonstrict or forced alignment of memory accesses.
   --enable-sim-hostendian=end		Specify host byte endian orientation.
-  --enable-build-warnings Enable build-time compiler warnings if gcc is used
-  --enable-gdb-build-warnings Enable SIM specific build-time compiler warnings if gcc is used
+  --enable-werror         treat compile warnings as errors
+  --enable-build-warnings enable build-time compiler warnings if gcc is used
+  --enable-sim-build-warnings
+                          enable SIM specific build-time compiler warnings if
+                          gcc is used
   --enable-sim-hardware=LIST		Specify the hardware to be included in the build.
 
 Optional Packages:
@@ -2445,9 +2450,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3374,120 +3379,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3888,6 +3779,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3896,6 +3962,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -4001,6 +4068,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4577,7 +4655,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
@@ -5075,29 +5153,44 @@ fi
 fi
 
 
-# NOTE: Don't add -Wall or -Wunused, they both include
-# -Wunused-parameter which reports bogus warnings.
-# NOTE: If you add to this list, remember to update
-# gdb/doc/gdbint.texinfo.
-build_warnings="-Wimplicit -Wreturn-type -Wcomment -Wtrigraphs \
--Wformat -Wparentheses -Wpointer-arith"
-# GCC supports -Wuninitialized only with -O or -On, n != 0.
-if test x${CFLAGS+set} = xset; then
-  case "${CFLAGS}" in
-    *"-O0"* ) ;;
-    *"-O"* )
-      build_warnings="${build_warnings} -Wuninitialized"
-    ;;
-  esac
-else
-  build_warnings="${build_warnings} -Wuninitialized"
+# Check whether --enable-werror was given.
+if test "${enable_werror+set}" = set; then :
+  enableval=$enable_werror; case "${enableval}" in
+     yes | y) ERROR_ON_WARNING="yes" ;;
+     no | n)  ERROR_ON_WARNING="no" ;;
+     *) as_fn_error "bad value ${enableval} for --enable-werror" "$LINENO" 5 ;;
+   esac
+fi
+
+
+# Enable -Werror by default when using gcc
+if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
+    ERROR_ON_WARNING=yes
 fi
-# Up for debate: -Wswitch -Wcomment -trigraphs -Wtrigraphs
-# -Wunused-function -Wunused-label -Wunused-variable -Wunused-value
-# -Wchar-subscripts -Wtraditional -Wshadow -Wcast-qual
-# -Wcast-align -Wwrite-strings -Wconversion -Wstrict-prototypes
-# -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls
-# -Woverloaded-virtual -Winline -Werror"
+
+WERROR_CFLAGS=""
+if test "${ERROR_ON_WARNING}" = yes ; then
+# NOTE: Disabled in the sim dir due to most sims generating warnings.
+#    WERROR_CFLAGS="-Werror"
+     true
+fi
+
+# The entries after -Wno-pointer-sign are disabled warnings which may
+# be enabled in the future, which can not currently be used to build
+# GDB.
+# NOTE: If you change this list, remember to update
+# gdb/doc/gdbint.texinfo.
+build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \
+-Wformat-nonliteral -Wno-pointer-sign \
+-Wno-unused -Wunused-value -Wunused-function \
+-Wno-switch -Wno-char-subscripts -Wmissing-prototypes"
+
+# Enable -Wno-format by default when using gcc on mingw since many
+# GCC versions complain about %I64.
+case "${host}" in
+  *-*-mingw32*) build_warnings="$build_warnings -Wno-format" ;;
+esac
+
 # Check whether --enable-build-warnings was given.
 if test "${enable_build_warnings+set}" = set; then :
   enableval=$enable_build_warnings; case "${enableval}" in
@@ -5129,7 +5222,6 @@ if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
 fi
 fi
 WARN_CFLAGS=""
-WERROR_CFLAGS=""
 if test "x${build_warnings}" != x -a "x$GCC" = xyes
 then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler warning flags" >&5
@@ -5160,8 +5252,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 	    CFLAGS="$saved_CFLAGS"
 	esac
     done
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS}${WERROR_CFLAGS}" >&5
-$as_echo "${WARN_CFLAGS}${WERROR_CFLAGS}" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS} ${WERROR_CFLAGS}" >&5
+$as_echo "${WARN_CFLAGS} ${WERROR_CFLAGS}" >&6; }
 fi
 
 
diff --git a/sim/mcore/ChangeLog b/sim/mcore/ChangeLog
index ccada3b..c81a80c 100644
--- a/sim/mcore/ChangeLog
+++ b/sim/mcore/ChangeLog
@@ -1,3 +1,16 @@
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-05-20  Hans-Peter Nilsson  <hp at axis.com>
+
+	PR 14072
+	* interp.c: Include config.h before system header files.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* aclocal.m4: New file.
diff --git a/sim/mcore/aclocal.m4 b/sim/mcore/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/mcore/aclocal.m4
+++ b/sim/mcore/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/mcore/config.in b/sim/mcore/config.in
index f29d045..0db6f1e 100644
--- a/sim/mcore/config.in
+++ b/sim/mcore/config.in
@@ -73,6 +73,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -102,3 +105,35 @@
 
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/mcore/configure b/sim/mcore/configure
index e3e28f9..e9a1003 100755
--- a/sim/mcore/configure
+++ b/sim/mcore/configure
@@ -601,9 +601,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -622,6 +619,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -629,6 +627,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -2432,9 +2433,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3361,120 +3362,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3875,6 +3762,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3883,6 +3945,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -3988,6 +4051,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4564,7 +4638,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
diff --git a/sim/mcore/interp.c b/sim/mcore/interp.c
index 5a4ccc2..8249b5a 100644
--- a/sim/mcore/interp.c
+++ b/sim/mcore/interp.c
@@ -18,6 +18,7 @@ GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
+#include "config.h"
 #include <signal.h>
 #include "sysdep.h"
 #include <sys/times.h>
diff --git a/sim/microblaze/ChangeLog b/sim/microblaze/ChangeLog
index 331ee62..b36edef 100644
--- a/sim/microblaze/ChangeLog
+++ b/sim/microblaze/ChangeLog
@@ -1,3 +1,11 @@
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* aclocal.m4: New file.
diff --git a/sim/microblaze/aclocal.m4 b/sim/microblaze/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/microblaze/aclocal.m4
+++ b/sim/microblaze/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/microblaze/config.in b/sim/microblaze/config.in
index f29d045..0db6f1e 100644
--- a/sim/microblaze/config.in
+++ b/sim/microblaze/config.in
@@ -73,6 +73,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -102,3 +105,35 @@
 
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/microblaze/configure b/sim/microblaze/configure
index e3e28f9..e9a1003 100644
--- a/sim/microblaze/configure
+++ b/sim/microblaze/configure
@@ -601,9 +601,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -622,6 +619,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -629,6 +627,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -2432,9 +2433,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3361,120 +3362,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3875,6 +3762,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3883,6 +3945,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -3988,6 +4051,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4564,7 +4638,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
diff --git a/sim/microblaze/interp.c b/sim/microblaze/interp.c
index bddbf7e..8e838db 100644
--- a/sim/microblaze/interp.c
+++ b/sim/microblaze/interp.c
@@ -18,6 +18,7 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
    02110-1301, USA.  */
 
+#include "config.h"
 #include <signal.h>
 #include "sysdep.h"
 #include <sys/times.h>
diff --git a/sim/mips/ChangeLog b/sim/mips/ChangeLog
index 0ffd129..39830b1 100644
--- a/sim/mips/ChangeLog
+++ b/sim/mips/ChangeLog
@@ -1,3 +1,16 @@
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-05-18  Nick Clifton  <nickc at redhat.com>
+
+	PR 14072
+	* interp.c: Include config.h before system header files.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* aclocal.m4: New file.
diff --git a/sim/mips/aclocal.m4 b/sim/mips/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/mips/aclocal.m4
+++ b/sim/mips/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/mips/config.in b/sim/mips/config.in
index f13ec1c..9f71eb8 100644
--- a/sim/mips/config.in
+++ b/sim/mips/config.in
@@ -88,6 +88,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -118,6 +121,28 @@
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
 #if defined AC_APPLE_UNIVERSAL_BUILD
@@ -129,3 +154,13 @@
 #  undef WORDS_BIGENDIAN
 # endif
 #endif
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/mips/configure b/sim/mips/configure
index c8f0c2d..1986f33 100755
--- a/sim/mips/configure
+++ b/sim/mips/configure
@@ -613,9 +613,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -634,6 +631,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -641,6 +639,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -735,6 +736,7 @@ with_bugurl
 enable_sim_inline
 enable_sim_alignment
 enable_sim_hostendian
+enable_werror
 enable_build_warnings
 enable_sim_build_warnings
 enable_sim_reserved_bits
@@ -1387,8 +1389,11 @@ Optional Features:
   --enable-sim-inline=inlines		Specify which functions should be inlined.
   --enable-sim-alignment=align		Specify strict,  nonstrict or forced alignment of memory accesses.
   --enable-sim-hostendian=end		Specify host byte endian orientation.
-  --enable-build-warnings Enable build-time compiler warnings if gcc is used
-  --enable-gdb-build-warnings Enable SIM specific build-time compiler warnings if gcc is used
+  --enable-werror         treat compile warnings as errors
+  --enable-build-warnings enable build-time compiler warnings if gcc is used
+  --enable-sim-build-warnings
+                          enable SIM specific build-time compiler warnings if
+                          gcc is used
   --enable-sim-reserved-bits		Specify whether to check reserved bits in instruction.
   --enable-sim-endian=endian		Specify target byte endian orientation.
   --enable-sim-bitsize=N		Specify target bitsize (32 or 64).
@@ -2474,9 +2479,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3403,120 +3408,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3917,6 +3808,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3925,6 +3991,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -4030,6 +4097,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4606,7 +4684,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
@@ -5104,29 +5182,44 @@ fi
 fi
 
 
-# NOTE: Don't add -Wall or -Wunused, they both include
-# -Wunused-parameter which reports bogus warnings.
-# NOTE: If you add to this list, remember to update
-# gdb/doc/gdbint.texinfo.
-build_warnings="-Wimplicit -Wreturn-type -Wcomment -Wtrigraphs \
--Wformat -Wparentheses -Wpointer-arith"
-# GCC supports -Wuninitialized only with -O or -On, n != 0.
-if test x${CFLAGS+set} = xset; then
-  case "${CFLAGS}" in
-    *"-O0"* ) ;;
-    *"-O"* )
-      build_warnings="${build_warnings} -Wuninitialized"
-    ;;
-  esac
-else
-  build_warnings="${build_warnings} -Wuninitialized"
+# Check whether --enable-werror was given.
+if test "${enable_werror+set}" = set; then :
+  enableval=$enable_werror; case "${enableval}" in
+     yes | y) ERROR_ON_WARNING="yes" ;;
+     no | n)  ERROR_ON_WARNING="no" ;;
+     *) as_fn_error "bad value ${enableval} for --enable-werror" "$LINENO" 5 ;;
+   esac
+fi
+
+
+# Enable -Werror by default when using gcc
+if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
+    ERROR_ON_WARNING=yes
 fi
-# Up for debate: -Wswitch -Wcomment -trigraphs -Wtrigraphs
-# -Wunused-function -Wunused-label -Wunused-variable -Wunused-value
-# -Wchar-subscripts -Wtraditional -Wshadow -Wcast-qual
-# -Wcast-align -Wwrite-strings -Wconversion -Wstrict-prototypes
-# -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls
-# -Woverloaded-virtual -Winline -Werror"
+
+WERROR_CFLAGS=""
+if test "${ERROR_ON_WARNING}" = yes ; then
+# NOTE: Disabled in the sim dir due to most sims generating warnings.
+#    WERROR_CFLAGS="-Werror"
+     true
+fi
+
+# The entries after -Wno-pointer-sign are disabled warnings which may
+# be enabled in the future, which can not currently be used to build
+# GDB.
+# NOTE: If you change this list, remember to update
+# gdb/doc/gdbint.texinfo.
+build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \
+-Wformat-nonliteral -Wno-pointer-sign \
+-Wno-unused -Wunused-value -Wunused-function \
+-Wno-switch -Wno-char-subscripts -Wmissing-prototypes"
+
+# Enable -Wno-format by default when using gcc on mingw since many
+# GCC versions complain about %I64.
+case "${host}" in
+  *-*-mingw32*) build_warnings="$build_warnings -Wno-format" ;;
+esac
+
 # Check whether --enable-build-warnings was given.
 if test "${enable_build_warnings+set}" = set; then :
   enableval=$enable_build_warnings; case "${enableval}" in
@@ -5158,7 +5251,6 @@ if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
 fi
 fi
 WARN_CFLAGS=""
-WERROR_CFLAGS=""
 if test "x${build_warnings}" != x -a "x$GCC" = xyes
 then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler warning flags" >&5
@@ -5189,8 +5281,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 	    CFLAGS="$saved_CFLAGS"
 	esac
     done
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS}${WERROR_CFLAGS}" >&5
-$as_echo "${WARN_CFLAGS}${WERROR_CFLAGS}" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS} ${WERROR_CFLAGS}" >&5
+$as_echo "${WARN_CFLAGS} ${WERROR_CFLAGS}" >&6; }
 fi
 
 
@@ -5574,7 +5666,7 @@ if test ${sim_gen} = MULTI; then
 
   cat << __EOF__ > multi-run.c
 /* Main entry point for MULTI simulators.
-   Copyright (C) 2003, 2007, 2010 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2007, 2010, 2012 Free Software Foundation, Inc.
 
    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
diff --git a/sim/mips/interp.c b/sim/mips/interp.c
index edd4250..032570a 100644
--- a/sim/mips/interp.c
+++ b/sim/mips/interp.c
@@ -29,6 +29,7 @@ code on the hardware.
 #define TRACE (1)
 #endif
 
+#include "config.h"
 #include "bfd.h"
 #include "sim-main.h"
 #include "sim-utils.h"
diff --git a/sim/mn10300/ChangeLog b/sim/mn10300/ChangeLog
index e8c845d..3649622 100644
--- a/sim/mn10300/ChangeLog
+++ b/sim/mn10300/ChangeLog
@@ -1,3 +1,19 @@
+2012-06-17  Hans-Peter Nilsson  <hp at axis.com>
+
+	* interp.c: Include config.h first.  Do not include sysdep.h.
+
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
+2012-02-16  Kevin Buettner  <kevinb at redhat.com>
+
+	* interp.c (sim_fetch_register): Return length, not -1.
+
 2012-01-02  Joel Brobecker  <brobecker at adacore.com>
 
 	* sim-main.h: Reformat copyright header.
diff --git a/sim/mn10300/aclocal.m4 b/sim/mn10300/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/mn10300/aclocal.m4
+++ b/sim/mn10300/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/mn10300/config.in b/sim/mn10300/config.in
index 3055da5..94d0403 100644
--- a/sim/mn10300/config.in
+++ b/sim/mn10300/config.in
@@ -40,6 +40,9 @@
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
+/* Define to 1 if you have the `m' library (-lm). */
+#undef HAVE_LIBM
+
 /* Define to 1 if you have the `nsl' library (-lnsl). */
 #undef HAVE_LIBNSL
 
@@ -97,6 +100,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -127,6 +133,28 @@
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
 #if defined AC_APPLE_UNIVERSAL_BUILD
@@ -138,3 +166,13 @@
 #  undef WORDS_BIGENDIAN
 # endif
 #endif
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/mn10300/configure b/sim/mn10300/configure
index eab6edd..1529ac3 100755
--- a/sim/mn10300/configure
+++ b/sim/mn10300/configure
@@ -601,9 +601,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -622,6 +619,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -629,6 +627,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -723,6 +724,7 @@ with_bugurl
 enable_sim_endian
 enable_sim_alignment
 enable_sim_hostendian
+enable_werror
 enable_build_warnings
 enable_sim_build_warnings
 enable_sim_reserved_bits
@@ -1367,8 +1369,11 @@ Optional Features:
   --enable-sim-endian=endian		Specify target byte endian orientation.
   --enable-sim-alignment=align		Specify strict,  nonstrict or forced alignment of memory accesses.
   --enable-sim-hostendian=end		Specify host byte endian orientation.
-  --enable-build-warnings Enable build-time compiler warnings if gcc is used
-  --enable-gdb-build-warnings Enable SIM specific build-time compiler warnings if gcc is used
+  --enable-werror         treat compile warnings as errors
+  --enable-build-warnings enable build-time compiler warnings if gcc is used
+  --enable-sim-build-warnings
+                          enable SIM specific build-time compiler warnings if
+                          gcc is used
   --enable-sim-reserved-bits		Specify whether to check reserved bits in instruction.
   --enable-sim-bitsize=N		Specify target bitsize (32 or 64).
   --enable-sim-inline=inlines		Specify which functions should be inlined.
@@ -2450,9 +2455,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3379,120 +3384,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3893,6 +3784,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3901,6 +3967,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -4006,6 +4073,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4582,7 +4660,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
@@ -5081,29 +5159,44 @@ fi
 fi
 
 
-# NOTE: Don't add -Wall or -Wunused, they both include
-# -Wunused-parameter which reports bogus warnings.
-# NOTE: If you add to this list, remember to update
-# gdb/doc/gdbint.texinfo.
-build_warnings="-Wimplicit -Wreturn-type -Wcomment -Wtrigraphs \
--Wformat -Wparentheses -Wpointer-arith"
-# GCC supports -Wuninitialized only with -O or -On, n != 0.
-if test x${CFLAGS+set} = xset; then
-  case "${CFLAGS}" in
-    *"-O0"* ) ;;
-    *"-O"* )
-      build_warnings="${build_warnings} -Wuninitialized"
-    ;;
-  esac
-else
-  build_warnings="${build_warnings} -Wuninitialized"
+# Check whether --enable-werror was given.
+if test "${enable_werror+set}" = set; then :
+  enableval=$enable_werror; case "${enableval}" in
+     yes | y) ERROR_ON_WARNING="yes" ;;
+     no | n)  ERROR_ON_WARNING="no" ;;
+     *) as_fn_error "bad value ${enableval} for --enable-werror" "$LINENO" 5 ;;
+   esac
+fi
+
+
+# Enable -Werror by default when using gcc
+if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
+    ERROR_ON_WARNING=yes
 fi
-# Up for debate: -Wswitch -Wcomment -trigraphs -Wtrigraphs
-# -Wunused-function -Wunused-label -Wunused-variable -Wunused-value
-# -Wchar-subscripts -Wtraditional -Wshadow -Wcast-qual
-# -Wcast-align -Wwrite-strings -Wconversion -Wstrict-prototypes
-# -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls
-# -Woverloaded-virtual -Winline -Werror"
+
+WERROR_CFLAGS=""
+if test "${ERROR_ON_WARNING}" = yes ; then
+# NOTE: Disabled in the sim dir due to most sims generating warnings.
+#    WERROR_CFLAGS="-Werror"
+     true
+fi
+
+# The entries after -Wno-pointer-sign are disabled warnings which may
+# be enabled in the future, which can not currently be used to build
+# GDB.
+# NOTE: If you change this list, remember to update
+# gdb/doc/gdbint.texinfo.
+build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \
+-Wformat-nonliteral -Wno-pointer-sign \
+-Wno-unused -Wunused-value -Wunused-function \
+-Wno-switch -Wno-char-subscripts -Wmissing-prototypes"
+
+# Enable -Wno-format by default when using gcc on mingw since many
+# GCC versions complain about %I64.
+case "${host}" in
+  *-*-mingw32*) build_warnings="$build_warnings -Wno-format" ;;
+esac
+
 # Check whether --enable-build-warnings was given.
 if test "${enable_build_warnings+set}" = set; then :
   enableval=$enable_build_warnings; case "${enableval}" in
@@ -5135,7 +5228,6 @@ if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
 fi
 fi
 WARN_CFLAGS=""
-WERROR_CFLAGS=""
 if test "x${build_warnings}" != x -a "x$GCC" = xyes
 then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler warning flags" >&5
@@ -5166,8 +5258,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 	    CFLAGS="$saved_CFLAGS"
 	esac
     done
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS}${WERROR_CFLAGS}" >&5
-$as_echo "${WARN_CFLAGS}${WERROR_CFLAGS}" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS} ${WERROR_CFLAGS}" >&5
+$as_echo "${WARN_CFLAGS} ${WERROR_CFLAGS}" >&6; }
 fi
 
 
diff --git a/sim/mn10300/interp.c b/sim/mn10300/interp.c
index e06ae59..577cc7a 100644
--- a/sim/mn10300/interp.c
+++ b/sim/mn10300/interp.c
@@ -1,10 +1,10 @@
+#include "config.h"
 #include <signal.h>
 
 #include "sim-main.h"
 #include "sim-options.h"
 #include "sim-hw.h"
 
-#include "sysdep.h"
 #include "bfd.h"
 #include "sim-assert.h"
 
@@ -383,7 +383,7 @@ sim_fetch_register (SIM_DESC sd,
 		    int length)
 {
   put_word (memory, State.regs[rn]);
-  return -1;
+  return length;
 }
  
 int
diff --git a/sim/moxie/ChangeLog b/sim/moxie/ChangeLog
index d05f1e0..d4f1e24 100644
--- a/sim/moxie/ChangeLog
+++ b/sim/moxie/ChangeLog
@@ -1,3 +1,15 @@
+2012-06-17  Mike Frysinger  <vapier at gentoo.org>
+
+	* interp.c: Include config.h first.  Also include fcntl.h directly.
+
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* aclocal.m4: New file.
diff --git a/sim/moxie/aclocal.m4 b/sim/moxie/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/moxie/aclocal.m4
+++ b/sim/moxie/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/moxie/config.in b/sim/moxie/config.in
index f29d045..8de933c 100644
--- a/sim/moxie/config.in
+++ b/sim/moxie/config.in
@@ -1,5 +1,8 @@
 /* config.in.  Generated from configure.ac by autoheader.  */
 
+/* Define if building universal (internal helper macro) */
+#undef AC_APPLE_UNIVERSAL_BUILD
+
 /* Define to 1 if translation of program messages to the user's native
    language is requested. */
 #undef ENABLE_NLS
@@ -73,6 +76,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -102,3 +108,47 @@
 
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+   significant byte first (like Motorola and SPARC, unlike Intel). */
+#if defined AC_APPLE_UNIVERSAL_BUILD
+# if defined __BIG_ENDIAN__
+#  define WORDS_BIGENDIAN 1
+# endif
+#else
+# ifndef WORDS_BIGENDIAN
+#  undef WORDS_BIGENDIAN
+# endif
+#endif
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/moxie/configure b/sim/moxie/configure
index f81665c..5659a75 100644
--- a/sim/moxie/configure
+++ b/sim/moxie/configure
@@ -602,9 +602,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -623,6 +620,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -630,6 +628,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -2443,9 +2444,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3372,120 +3373,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3886,6 +3773,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3894,6 +3956,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -3999,6 +4062,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4575,7 +4649,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
diff --git a/sim/moxie/interp.c b/sim/moxie/interp.c
index 9c98021..c16c34f 100644
--- a/sim/moxie/interp.c
+++ b/sim/moxie/interp.c
@@ -17,6 +17,8 @@ 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, see <http://www.gnu.org/licenses/>.  */
 
+#include "config.h"
+#include <fcntl.h>
 #include <signal.h>
 #include <stdlib.h>
 #include "sysdep.h"
diff --git a/sim/ppc/ChangeLog b/sim/ppc/ChangeLog
index 769b299..9d5be6f 100644
--- a/sim/ppc/ChangeLog
+++ b/sim/ppc/ChangeLog
@@ -1,3 +1,17 @@
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* configure: Regenerate.
+
+2012-05-24  Pedro Alves  <palves at redhat.com>
+
+	PR gdb/7205
+
+        Replace TARGET_SIGNAL_ with GDB_SIGNAL_ throughout.
+
+2012-03-14  Michael Haubenwallner  <michael.haubenwallner at salomon.at>
+
+	* emul_unix.c (st_pad1, st_pad2, st_pad3): Undefine.
+
 2012-01-02  Joel Brobecker  <brobecker at adacore.com>
 
 	* dp-bit.c: Reformat copyright header.
diff --git a/sim/ppc/configure b/sim/ppc/configure
index d0604d2..fd89cb6 100755
--- a/sim/ppc/configure
+++ b/sim/ppc/configure
@@ -2450,6 +2450,44 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
+##                                                          -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# Based on depend.m4 from automake 1.9, modified for standalone use in
+# an environment where GNU make is required.
+
+# ZW_PROG_COMPILER_DEPENDENCIES
+# -----------------------------
+# Variant of _AM_DEPENDENCIES which just does the dependency probe and
+# sets fooDEPMODE accordingly.  Cache-variable compatible with
+# original; not side-effect compatible.  As the users of this macro
+# may require accurate dependencies for correct builds, it does *not*
+# honor --disable-dependency-checking, and failure to detect a usable
+# method is an error.  depcomp is assumed to be located in
+# $ac_aux_dir.
+#
+# FIXME: Should use the Autoconf 2.5x language-selection mechanism.
+
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+
+
+# ZW_CREATE_DEPDIR
+# ----------------
+# As AM_SET_DEPDIR, but also create the directory at config.status time.
+
+
 
 
 
@@ -2625,9 +2663,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
diff --git a/sim/ppc/emul_unix.c b/sim/ppc/emul_unix.c
index 36738c4..e66d23f 100644
--- a/sim/ppc/emul_unix.c
+++ b/sim/ppc/emul_unix.c
@@ -1034,6 +1034,11 @@ typedef	unsigned32	solaris_nlink_t;
 #ifdef HAVE_SYS_STAT_H
 #define	SOLARIS_ST_FSTYPSZ 16		/* array size for file system type name */
 
+/* AIX 7.1 defines st_pad[123] to st_[amc]tim.tv_pad, respectively */
+#undef st_pad1
+#undef st_pad2
+#undef st_pad3
+
 struct solaris_stat {
   solaris_dev_t		st_dev;
   signed32		st_pad1[3];	/* reserved for network id */
diff --git a/sim/ppc/psim.c b/sim/ppc/psim.c
index 3e76386..7378b9b 100644
--- a/sim/ppc/psim.c
+++ b/sim/ppc/psim.c
@@ -592,7 +592,7 @@ cntrl_c_simulation(void *data)
   psim_halt(system,
 	    psim_nr_cpus(system),
 	    was_continuing,
-	    TARGET_SIGNAL_INT);
+	    GDB_SIGNAL_INT);
 }
 
 INLINE_PSIM\
diff --git a/sim/ppc/psim.texinfo b/sim/ppc/psim.texinfo
index 8b13789..6a7b4f1 100644
--- a/sim/ppc/psim.texinfo
+++ b/sim/ppc/psim.texinfo
@@ -1 +1,1107 @@
+\input texinfo.tex    @c -*-texinfo-*-
+ at comment %**start of header
+ at setfilename texinfo
+ at settitle Texinfo @value{edition}
+ at syncodeindex vr fn
+ at footnotestyle separate
+ at paragraphindent 2
+ at smallbook
+ at comment %**end of header
+
+ at c Set smallbook if printing in smallbook format so the example of the
+ at c smallbook font is actually written using smallbook; in bigbook, a kludge
+ at c is used for TeX output.
+ at set smallbook
+ at c @@clear smallbook
+
+ at ignore
+ at ifinfo
+ at format
+START-INFO-DIR-ENTRY
+* Texinfo: (texinfo).           The documentation format for the GNU Project.
+END-INFO-DIR-ENTRY
+ at end format
+ at end ifinfo
+ at end ignore
+
+ at set edition 2.21
+ at set update-date 7 June 1995
+ at set update-month June 1995
+
+ at c Experiment with smaller amounts of whitespace between chapters
+ at c and sections.
+ at tex
+\global\chapheadingskip = 15pt plus 4pt minus 2pt 
+\global\secheadingskip = 12pt plus 3pt minus 2pt
+\global\subsecheadingskip = 9pt plus 2pt minus 2pt
+ at end tex
+
+ at c Experiment with smaller amounts of whitespace between paragraphs in
+ at c the 8.5 by 11 inch format.
+ at ifclear smallbook
+ at tex
+\global\parskip 6pt plus 1pt
+ at end tex
+ at end ifclear
+
+ at finalout
+
+ at c Currently undocumented command, 5 December 1993:
+ at c
+ at c nwnode          (Same as node, but no warnings; for `makeinfo'.)
+
+ at ifinfo
+This file documents Texinfo, a documentation system that uses a single
+source file to produce both on-line information and a printed manual.
+
+Copyright (C) 1988, 1990-1993, 1995, 2010-2012 Free Software Foundation,
+Inc.
+
+This is the second edition of the Texinfo documentation,@*
+and is consistent with version 2 of @file{texinfo.tex}.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+ at ignore
+Permission is granted to process this file through TeX and print the
+results, provided the printed document carries copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+
+ at end ignore
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that this permission notice may be stated in a translation approved
+by the Free Software Foundation.
+ at end ifinfo
+
+ at setchapternewpage odd
+
+ at shorttitlepage Texinfo
+
+ at titlepage
+ at c use the new format for titles
+ at title Texinfo
+ at subtitle The GNU Documentation Format
+ at subtitle Edition @value{edition}, for Texinfo Version Three
+ at subtitle @value{update-month}
+
+ at author by Robert J. Chassell and Richard M. Stallman
+
+ at comment   Include the Distribution inside the titlepage so
+ at c that headings are turned off. 
+
+ at page
+ at vskip 0pt plus 1filll
+Copyright @copyright{} 1988, 1990, 1991, 1992, 1993, 1995, 2010, 2011
+Free Software Foundation, Inc.
+
+ at sp 2
+This is the second edition of the Texinfo documentation,@*
+and is consistent with version 2 of @file{texinfo.tex}.
+ at sp 2
+
+Published by the Free Software Foundation @*
+59 Temple Place Suite 330, @*
+Boston, MA 02111-1307 USA @*
+Printed copies are available for $15 each.@*
+ISBN 1-882114-63-9
+ at c ISBN number 1-882114-63-9 is for edition 2.20 of 28 February 1995
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that this permission notice may be stated in a translation approved
+by the Free Software Foundation.
+ at sp 2
+Cover art by Etienne Suvasa.
+ at end titlepage
+
+ at ifinfo
+ at node Top, Copying, (dir), (dir)
+ at top Texinfo
+
+Texinfo is a documentation system that uses a single source file to
+produce both on-line information and printed output. at refill
+
+The first part of this master menu lists the major nodes in this Info
+document, including the @@-command and concept indices.  The rest of
+the menu lists all the lower level nodes in the document. at refill
+
+This is Edition @value{edition} of the Texinfo documentation, 
+ at w{@value{update-date},} for Texinfo Version Three.
+ at end ifinfo
+
+ at c Here is a spare copy of the chapter menu entry descriptions,
+ at c in case they are accidently deleted 
+ at ignore
+Your rights.
+Texinfo in brief.
+How to use Texinfo mode.
+What is at the beginning of a Texinfo file?
+What is at the end of a Texinfo file?
+How to create chapters, sections, subsections,
+  appendices, and other parts.
+How to provide structure for a document.
+How to write nodes.
+How to write menus.
+How to write cross references.
+How to mark words and phrases as code,
+  keyboard input, meta-syntactic
+  variables, and the like.
+How to write quotations, examples, etc.
+How to write lists and tables.
+How to create indices.
+How to insert @@-signs, braces, etc.
+How to indicate results of evaluation,
+  expansion of macros, errors, etc.
+How to force and prevent line and page breaks.
+How to describe functions and the like in a uniform manner.
+How to write footnotes.
+How to specify text for either @TeX{} or Info.
+How to print hardcopy.
+How to create an Info file.
+How to install an Info file
+A list of all the Texinfo @@-commands.
+Hints on how to write a Texinfo document.
+A sample Texinfo file to look at.
+Tell readers they have the right to copy
+  and distribute.
+How to incorporate other Texinfo files.
+How to write page headings and footings.
+How to find formatting mistakes.
+All about paragraph refilling.
+A description of @@-Command syntax.
+Texinfo second edition features.
+A menu containing commands and variables.
+A menu covering many topics.
+ at end ignore
+
+ at menu
+* Copying::                     Your rights. 
+* Overview::                    Texinfo in brief.
+* Texinfo Mode::                How to use Texinfo mode.
+* Beginning a File::            What is at the beginning of a Texinfo file?
+* Ending a File::               What is at the end of a Texinfo file?
+* Structuring::                 How to create chapters, sections, subsections,
+                                  appendices, and other parts.
+* Nodes::                       How to write nodes.
+* Menus::                       How to write menus.
+* Cross References::            How to write cross references.
+* Marking Text::                How to mark words and phrases as code,
+                                  keyboard input, meta-syntactic
+                                  variables, and the like.
+* Quotations and Examples::     How to write quotations, examples, etc.
+* Lists and Tables::            How to write lists and tables.
+* Indices::                     How to create indices.
+* Insertions::                  How to insert @@-signs, braces, etc.
+* Glyphs::                      How to indicate results of evaluation,
+                                  expansion of macros, errors, etc.
+* Breaks::                      How to force and prevent line and page breaks.
+* Definition Commands::         How to describe functions and the like 
+                                  in a uniform manner.
+* Footnotes::                   How to write footnotes.
+* Conditionals::                How to specify text for either @TeX{} or Info.
+* Format/Print Hardcopy::       How to convert a Texinfo file to a file
+                                  for printing and how to print that file.
+* Create an Info File::         Convert a Texinfo file into an Info file.
+* Install an Info File::        Make an Info file accessible to users.
+* Command List::                All the Texinfo @@-commands.
+* Tips::                        Hints on how to write a Texinfo document.
+* Sample Texinfo File::         A sample Texinfo file to look at.
+* Sample Permissions::          Tell readers they have the right to copy
+                                  and distribute.
+* Include Files::               How to incorporate other Texinfo files.
+* Headings::                    How to write page headings and footings.
+* Catching Mistakes::           How to find formatting mistakes.
+* Refilling Paragraphs::        All about paragraph refilling.
+* Command Syntax::              A description of @@-Command syntax.
+* Obtaining TeX::               How to Obtain @TeX{}.
+* New Features::                Texinfo second edition features.
+* Command and Variable Index::  A menu containing commands and variables.
+* Concept Index::               A menu covering many topics.
+
+ --- The Detailed Node Listing ---
+
+Overview of Texinfo
+
+* Using Texinfo::               Create a conventional printed book 
+                                  or an Info file.
+* Info Files::                  What is an Info file?
+* Printed Books::               Characteristics of a printed book or manual.
+* Formatting Commands::         @@-commands are used for formatting.
+* Conventions::                 General rules for writing a Texinfo file.
+* Comments::                    How to write comments and mark regions that
+                                  the formatting commands will ignore.
+* Minimum::                     What a Texinfo file must have.
+* Six Parts::                   Usually, a Texinfo file has six parts.
+* Short Sample::                A short sample Texinfo file.
+* Acknowledgements::            
+
+Using Texinfo Mode
+
+* Texinfo Mode Overview::       How Texinfo mode can help you.
+* Emacs Editing::               Texinfo mode adds to GNU Emacs' general
+                                  purpose editing features.
+* Inserting::                   How to insert frequently used @@-commands. 
+* Showing the Structure::       How to show the structure of a file.
+* Updating Nodes and Menus::    How to update or create new nodes and menus.
+* Info Formatting::             How to format for Info.
+* Printing::                    How to format and print part or all of a file.
+* Texinfo Mode Summary::        Summary of all the Texinfo mode commands.
+
+Updating Nodes and Menus
+
+* Updating Commands::           Five major updating commands.
+* Updating Requirements::       How to structure a Texinfo file for
+                                  using the updating command.
+* Other Updating Commands::     How to indent descriptions, insert
+                                  missing nodes lines, and update
+                                  nodes in sequence.
+
+Beginning a Texinfo File
+
+* Four Parts::                  Four parts begin a Texinfo file.
+* Sample Beginning::            Here is a sample beginning for a Texinfo file.
+* Header::                      The very beginning of a Texinfo file.
+* Info Summary and Permissions::  Summary and copying permissions for Info.
+* Titlepage & Copyright Page::  Creating the title and copyright pages.
+* The Top Node::                Creating the `Top' node and master menu.
+* Software Copying Permissions::  Ensure that you and others continue to
+                                  have the right to use and share software.
+
+The Texinfo File Header
+
+* First Line::                  The first line of a Texinfo file.  
+* Start of Header::             Formatting a region requires this.
+* setfilename::                 Tell Info the name of the Info file.
+* settitle::                    Create a title for the printed work.
+* setchapternewpage::           Start chapters on right-hand pages.
+* paragraphindent::             An option to specify paragraph indentation.
+* End of Header::               Formatting a region requires this.
+
+The Title and Copyright Pages
+
+* titlepage::                   Create a title for the printed document.
+* titlefont center sp::         The @code{@@titlefont}, @code{@@center},
+                                  and @code{@@sp} commands.
+* title subtitle author::       The @code{@@title}, @code{@@subtitle},
+                                  and @code{@@author} commands.
+* Copyright & Permissions::     How to write the copyright notice and
+                                  include copying permissions.
+* end titlepage::               Turn on page headings after the title and
+                                  copyright pages.
+* headings on off::             An option for turning headings on and off
+                                  and double or single sided printing.
+
+The `Top' Node and Master Menu
+
+* Title of Top Node::           Sketch what the file is about.
+* Master Menu Parts::           A master menu has three or more parts.
+
+Ending a Texinfo File
+
+* Printing Indices & Menus::    How to print an index in hardcopy and 
+                                  generate index menus in Info.
+* Contents::                    How to create a table of contents.
+* File End::                    How to mark the end of a file.
+
+Chapter Structuring
+
+* Tree Structuring::            A manual is like an upside down tree @dots{}
+* Structuring Command Types::   How to divide a manual into parts.
+* makeinfo top::                The @code{@@top} command, part of the `Top' node.
+* chapter::                     
+* unnumbered & appendix::       
+* majorheading & chapheading::  
+* section::                     
+* unnumberedsec appendixsec heading::  
+* subsection::                  
+* unnumberedsubsec appendixsubsec subheading::  
+* subsubsection::               Commands for the lowest level sections.
+* Raise/lower sections::        How to change commands' hierarchical level.
+
+Nodes
+
+* Two Paths::                   Different commands to structure 
+                                  Info output and printed output.
+* Node Menu Illustration::      A diagram, and sample nodes and menus.
+* node::                        How to write a node, in detail.
+* makeinfo Pointer Creation::   How to create node pointers with @code{makeinfo}.
+
+The @code{@@node} Command
+
+* Node Names::                  How to choose node and pointer names.
+* Writing a Node::              How to write an @code{@@node} line.
+* Node Line Tips::              Keep names short.
+* Node Line Requirements::      Keep names unique, without @@-commands.
+* First Node::                  How to write a `Top' node.
+* makeinfo top command::        How to use the @code{@@top} command. 
+* Top Node Summary::            Write a brief description for readers.
+
+Menus
+
+* Menu Location::               Put a menu in a short node.
+* Writing a Menu::              What is a menu?
+* Menu Parts::                  A menu entry has three parts.
+* Less Cluttered Menu Entry::   Two part menu entry.
+* Menu Example::                Two and three part menu entries.
+* Other Info Files::            How to refer to a different Info file.
+
+Cross References
+
+* References::                  What cross references are for.
+* Cross Reference Commands::    A summary of the different commands.
+* Cross Reference Parts::       A cross reference has several parts.
+* xref::                        Begin a reference with `See' @dots{}
+* Top Node Naming::             How to refer to the beginning of another file.
+* ref::                         A reference for the last part of a sentence.
+* pxref::                       How to write a parenthetical cross reference.
+* inforef::                     How to refer to an Info-only file.
+
+ at code{@@xref}
+
+* Reference Syntax::            What a reference looks like and requires.
+* One Argument::                @code{@@xref} with one argument.
+* Two Arguments::               @code{@@xref} with two arguments.
+* Three Arguments::             @code{@@xref} with three arguments.
+* Four and Five Arguments::     @code{@@xref} with four and five arguments.
+
+Marking Words and Phrases
+
+* Indicating::                  How to indicate definitions, files, etc.
+* Emphasis::                    How to emphasize text.
+
+Indicating Definitions, Commands, etc.
+
+* Useful Highlighting::         Highlighting provides useful information.
+* code::                        How to indicate code.
+* kbd::                         How to show keyboard input.
+* key::                         How to specify keys.
+* samp::                        How to show a literal sequence of characters.
+* var::                         How to indicate a metasyntactic variable.
+* file::                        How to indicate the name of a file.
+* dfn::                         How to specify a definition.
+* cite::                        How to refer to a book that is not in Info.
+
+Emphasizing Text
+
+* emph & strong::               How to emphasize text in Texinfo.
+* Smallcaps::                   How to use the small caps font.
+* Fonts::                       Various font commands for printed output.
+* Customized Highlighting::     How to define highlighting commands.
+
+Quotations and Examples
+
+* Block Enclosing Commands::    Use different constructs for 
+                                  different purposes.
+* quotation::                   How to write a quotation.
+* example::                     How to write an example in a fixed-width font.
+* noindent::                    How to prevent paragraph indentation.
+* Lisp Example::                How to illustrate Lisp code.
+* smallexample & smalllisp::    Forms for the @code{@@smallbook} option.
+* display::                     How to write an example in the current font.
+* format::                      How to write an example that does not narrow
+                                  the margins.
+* exdent::                      How to undo the indentation of a line.
+* flushleft & flushright::      How to push text flushleft or flushright.
+* cartouche::                   How to draw cartouches around examples.
+
+Making Lists and Tables
+
+* Introducing Lists::           Texinfo formats lists for you.
+* itemize::                     How to construct a simple list.
+* enumerate::                   How to construct a numbered list.
+* Two-column Tables::           How to construct a two-column table.
+
+Making a Two-column Table
+
+* table::                       How to construct a two-column table.
+* ftable vtable::               How to construct a two-column table
+                                  with automatic indexing.
+* itemx::                       How to put more entries in the first column.
+
+Creating Indices
+
+* Index Entries::               Choose different words for index entries.
+* Predefined Indices::          Use different indices for different kinds
+                                  of entry.
+* Indexing Commands::           How to make an index entry.
+* Combining Indices::           How to combine indices.
+* New Indices::                 How to define your own indices.
+
+Combining Indices
+
+* syncodeindex::                How to merge two indices, using @code{@@code}
+                                  font for the merged-from index.
+* synindex::                    How to merge two indices, using the
+                                  default font of the merged-to index.
+
+Special Insertions
+
+* Braces Atsigns Periods::      How to insert braces, @samp{@@} and periods.
+* dmn::                         How to format a dimension.
+* Dots Bullets::                How to insert dots and bullets.
+* TeX and copyright::           How to insert the @TeX{} logo 
+                                  and the copyright symbol.
+* minus::                       How to insert a minus sign.
+* math::                        How to format a mathematical expression.
+
+Inserting @samp{@@}, Braces, and Periods
+
+* Inserting An Atsign::         
+* Inserting Braces::            How to insert @samp{@{} and @samp{@}}
+* Controlling Spacing::         How to insert the right amount of space
+                                  after punctuation within a sentence.
+
+Inserting Ellipsis, Dots, and Bullets
+
+* dots::                        How to insert dots @dots{}
+* bullet::                      How to insert a bullet.
+
+Inserting @TeX{} and the Copyright Symbol
+
+* tex::                         How to insert the @TeX{} logo.
+* copyright symbol::            How to use @code{@@copyright}@{@}.
+
+Glyphs for Examples 
+
+* Glyphs Summary::              
+* result::                      How to show the result of expression.
+* expansion::                   How to indicate an expansion.
+* Print Glyph::                 How to indicate printed output.
+* Error Glyph::                 How to indicate an error message.
+* Equivalence::                 How to indicate equivalence.
+* Point Glyph::                 How to indicate the location of point.
+
+Making and Preventing Breaks
+
+* Break Commands::              Cause and prevent splits.
+* Line Breaks::                 How to force a single line to use two lines.
+* w::                           How to prevent unwanted line breaks. 
+* sp::                          How to insert blank lines.
+* page::                        How to force the start of a new page.
+* group::                       How to prevent unwanted page breaks.
+* need::                        Another way to prevent unwanted page breaks.
+
+Definition Commands
+
+* Def Cmd Template::            How to structure a description using a
+                                  definition command.
+* Optional Arguments::          How to handle optional and repeated arguments.
+* deffnx::                      How to group two or more `first' lines.
+* Def Cmds in Detail::          All the definition commands.
+* Def Cmd Conventions::         Conventions for writing definitions.
+* Sample Function Definition::  
+
+The Definition Commands
+
+* Functions Commands::          Commands for functions and similar entities.
+* Variables Commands::          Commands for variables and similar entities.
+* Typed Functions::             Commands for functions in typed languages.
+* Typed Variables::             Commands for variables in typed languages.
+* Abstract Objects::            Commands for object-oriented programming.
+* Data Types::                  The definition command for data types.
+
+Footnotes
+
+* Footnote Commands::           How to write a footnote in Texinfo.
+* Footnote Styles::             Controlling how footnotes appear in Info.
+
+Conditionally Visible Text
+
+* Conditional Commands::        How to specify text for Info or @TeX{}.
+* Using Ordinary TeX Commands::  You can use any and all @TeX{} commands.
+* set clear value::             How to designate which text to format (for
+                                  both Info and @TeX{}); and how to set a
+                                  flag to a string that you can insert.
+
+ at code{@@set}, @code{@@clear}, and @code{@@value}
+
+* ifset ifclear::               Format a region if a flag is set.
+* value::                       Replace a flag with a string. 
+* value Example::               An easy way to update edition information.
+
+Format and Print Hardcopy
+
+* Use TeX::                     Use @TeX{} to format for hardcopy.
+* Format with tex/texindex::    How to format in a shell.
+* Format with texi2dvi::        A simpler way to use the shell.
+* Print with lpr::              How to print.
+* Within Emacs::                How to format and print from an Emacs shell.
+* Texinfo Mode Printing::       How to format and print in Texinfo mode.
+* Compile-Command::             How to print using Emacs's compile command.
+* Requirements Summary::        @TeX{} formatting requirements summary.
+* Preparing for TeX::           What you need to do to use @TeX{}.
+* Overfull hboxes::             What are and what to do with overfull hboxes.
+* smallbook::                   How to print small format books and manuals.
+* A4 Paper::                    How to print on European A4 paper.
+* Cropmarks and Magnification::  How to print marks to indicate the size
+                                of pages and how to print scaled up output.
+
+Creating an Info File
+
+* makeinfo advantages::         @code{makeinfo} provides better error checking.
+* Invoking makeinfo::           How to run @code{makeinfo} from a shell.
+* makeinfo options::            Specify fill-column and other options.
+* Pointer Validation::          How to check that pointers point somewhere.
+* makeinfo in Emacs::           How to run @code{makeinfo} from Emacs.
+* texinfo-format commands::     Two Info formatting commands written
+                                  in Emacs Lisp are an alternative 
+                                  to @code{makeinfo}.
+* Batch Formatting::            How to format for Info in Emacs Batch mode.
+* Tag and Split Files::         How tagged and split files help Info 
+                                  to run better.
+
+Installing an Info File
+
+* Directory file::              The top level menu for all Info files.
+* New Info File::               Listing a new info file.
+* Other Info Directories::      How to specify Info files that are 
+                                  located in other directories.
+
+Sample Permissions
+
+* Inserting Permissions::       How to put permissions in your document.
+* ifinfo Permissions::          Sample @samp{ifinfo} copying permissions.
+* Titlepage Permissions::       Sample Titlepage copying permissions.
+
+Include Files
+
+* Using Include Files::         How to use the @code{@@include} command.
+* texinfo-multiple-files-update::  How to create and update nodes and
+                                  menus when using included files.
+* Include File Requirements::   What @code{texinfo-multiple-files-update} expects.
+* Sample Include File::         A sample outer file with included files
+                                  within it; and a sample included file.
+* Include Files Evolution::     How use of the @code{@@include} command
+                                  has changed over time.
+
+Page Headings
+
+* Headings Introduced::         Conventions for using page headings.
+* Heading Format::              Standard page heading formats.
+* Heading Choice::              How to specify the type of page heading.
+* Custom Headings::             How to create your own headings and footings.
+
+Formatting Mistakes
+
+* makeinfo preferred::          @code{makeinfo} finds errors.
+* Debugging with Info::         How to catch errors with Info formatting.
+* Debugging with TeX::          How to catch errors with @TeX{} formatting.
+* Using texinfo-show-structure::  How to use @code{texinfo-show-structure}.
+* Using occur::                 How to list all lines containing a pattern.
+* Running Info-Validate::       How to find badly referenced nodes.
+
+Finding Badly Referenced Nodes
+
+* Using Info-validate::         How to run @code{Info-validate}.
+* Unsplit::                     How to create an unsplit file.
+* Tagifying::                   How to tagify a file.
+* Splitting::                   How to split a file manually.
+
+Second Edition Features
+
+* New Texinfo Mode Commands::   The updating commands are especially useful.
+* New Commands::                Many newly described @@-commands.
+ at end menu
+
+ at node Copying, Overview, Top, Top
+ at comment  node-name, next, previous,  up
+ at unnumbered Texinfo Copying Conditions
+ at cindex Copying conditions
+ at cindex Conditions for copying Texinfo
+
+The programs currently being distributed that relate to Texinfo include
+portions of GNU Emacs, plus other separate programs (including
+ at code{makeinfo}, @code{info}, @code{texindex}, and @file{texinfo.tex}).
+These programs are @dfn{free}; this means that everyone is free to use
+them and free to redistribute them on a free basis.  The Texinfo-related
+programs are not in the public domain; they are copyrighted and there
+are restrictions on their distribution, but these restrictions are
+designed to permit everything that a good cooperating citizen would want
+to do.  What is not allowed is to try to prevent others from further
+sharing any version of these programs that they might get from
+you. at refill
+
+  Specifically, we want to make sure that you have the right to give
+away copies of the programs that relate to Texinfo, that you receive
+source code or else can get it if you want it, that you can change these
+programs or use pieces of them in new free programs, and that you know
+you can do these things. at refill
+
+  To make sure that everyone has such rights, we have to forbid you to
+deprive anyone else of these rights.  For example, if you distribute
+copies of the Texinfo related programs, you must give the recipients all
+the rights that you have.  You must make sure that they, too, receive or
+can get the source code.  And you must tell them their rights. at refill
+
+  Also, for our own protection, we must make certain that everyone finds
+out that there is no warranty for the programs that relate to Texinfo.
+If these programs are modified by someone else and passed on, we want
+their recipients to know that what they have is not what we distributed,
+so that any problems introduced by others will not reflect on our
+reputation. at refill
+
+  The precise conditions of the licenses for the programs currently
+being distributed that relate to Texinfo are found in the General Public
+Licenses that accompany them. at refill
+
+ at node Overview, Texinfo Mode, Copying, Top
+ at comment  node-name,  next,  previous,  up
+ at chapter Overview of Texinfo
+ at cindex Overview of Texinfo
+ at cindex Texinfo overview
+
+ at dfn{Texinfo}@footnote{Note that the first syllable of ``Texinfo'' is
+pronounced like ``speck'', not ``hex''.  This odd pronunciation is
+derived from, but is not the same as, the pronunciation of @TeX{}.  In
+the word @TeX{}, the @samp{X} is actually the Greek letter ``chi''
+rather than the English letter ``ex''.  Pronounce @TeX{} as if the
+ at samp{X} were the last sound in the name `Bach'; but pronounce Texinfo
+as if the @samp{x} were a `k'.  Spell ``Texinfo'' with a capital ``T''
+and write the other letters in lower case.} 
+is a documentation system that uses a single source file to produce both
+on-line information and printed output.  This means that instead of
+writing two different documents, one for the on-line help or other on-line
+information and the other for a typeset manual or other printed work, you
+need write only one document.  When the work is revised, you need revise
+only one document.  (You can read the on-line information, known as an
+ at dfn{Info file}, with an Info documentation-reading program.)@refill
+
+ at menu
+* Using Texinfo::               Create a conventional printed book 
+                                  or an Info file.
+* Info Files::                  What is an Info file?
+* Printed Books::               Characteristics of a printed book or manual.
+* Formatting Commands::         @@-commands are used for formatting.
+* Conventions::                 General rules for writing a Texinfo file.
+* Comments::                    How to write comments and mark regions that
+                                  the formatting commands will ignore.
+* Minimum::                     What a Texinfo file must have.
+* Six Parts::                   Usually, a Texinfo file has six parts.
+* Short Sample::                A short sample Texinfo file.
+* Acknowledgements::            
+ at end menu
+
+ at c ************************************************************************
+
+
+
+\input texinfo  @c -*-texinfo-*-
+ at c %**start of header
+ at setfilename psim.info
+ at settitle PSIM
+ at setchapternewpage odd
+ at c %**end of header
+
+
+
+ at ifinfo
+This file documents the program PSIM.
+
+Copyright (C) 1994-1996, Andrew Cagney.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+ at ignore
+Permission is granted to process this file through Tex and print the
+results, provided the printed document carries copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+
+ at end ignore
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, subject to the terms
+of the GNU General Public License, which includes the provision that the
+entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+ at end ifinfo
+
+
+ at titlepage
+ at title PSIM
+ at subtitle Model of the PowerPC Environments
+ at author Andrew Cagney
+
+ at page
+ at vskip Opt plus ifill
+Copyright @copyright{} 1994-1996, Andrew Cagney
+
+This is the first edition of the PSIM manual and is consistent with PSIM
+version 1.0.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, subject to the terms
+of the GNU General Public License, which includes the provision that the
+entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+ at end titlepage
+
+
+
+ at menu
+
+* Copying::             Your rights and freedoms.
+* First Chappeter::     Getting started ....
+* Second Chapter::      Getting finished ....
+
+
+ at end menu
+
+
+PSIM is a program written in extended ANSI-C that implements an
+instruction level simulation of the PowerPC environment.  It is freely
+available in source code form under the terms of the GNU General
+Public License (version 2 or later).
+
+The PowerPC Architecture is described as having three levels of
+compliance:
+
+	UEA - User Environment Architecture
+	VEA - Virtual Environment Architecture
+	OEA - Operating Environment Architecture
+
+PSIM both implements all three levels of the PowerPC and includes (for
+each level) a corresponding simulated run-time environment.
+
+In addition, PSIM, to the execution unit level, models the performance
+of most of the current PowerPC implementations (contributed by Michael
+Meissner).  This detailed performance monitoring (unlike many other
+simulators) resulting in only a relatively marginal reduction in the
+simulators performance.
+
+
+A description of how to build PSIM is contained in the file:
+
+		ftp://ftp.ci.com.au/pub/psim/INSTALL
+	or	ftp://cambridge.cygnus.com/pub/psim/INSTALL
+
+while an overview of how to use PSIM is in:
+
+	ftp://ftp.ci.com.au/pub/psim/RUN
+or	ftp://cambridge.cygnus.com/pub/psim/RUN
+
+This file is found in:
+
+	ftp://ftp.ci.com.au/pub/psim/README
+or	ftp://cambridge.cygnus.com/pub/psim/README
+
+
+Thanks goes firstly to:
+
+	Corinthian Engineering Pty Ltd
+	Cygnus Support
+	Highland Logic Pty Ltd
+
+who provided the resources needed for making this software available
+on the Internet.
+
+More importantly I'd like to thank the following individuals who each
+contributed in their own unique way:
+
+	Allen Briggs, Bett Koch, David Edelsohn, Gordon Irlam,
+	Michael Meissner, Bob Mercier, Richard Perini, Dale Rahn,
+	Richard Stallman, Mitchele Walker
+
+
+				Andrew Cagney
+				Feb, 1995
+
+
+    ----------------------------------------------------------------------
+
+
+    What features does PSIM include?
+
+	Monitoring and modeling
+
+		PSIM includes (thanks to Michael Meissner)
+		a detailed model of most of the PowerPC
+		implementations to the functional unit level.
+
+
+	SMP
+		
+		The PowerPC ISA defines SMP synchronizing instructions.
+		This simulator implements a limited, but functional,
+		subset of the PowerPC synchronization instructions
+		behaviour.  Programs that restrict their synchronization
+		primitives to those that work with this functional
+		sub-set (eg P() and V()) are able to run on the SMP
+		version of PSIM.
+
+		People intending to use this system should study
+		the code implementing the lwarx instruction.
+		
+	ENDIAN SUPPORT
+
+		PSIM implements the PowerPC's big and little (xor
+		endian) modes and correctly simulates code that
+		switches between these two modes.
+
+		In addition, psim can model a true little-endian
+		machine.
+
+	ISA (Instruction Set Architecture) models
+
+		PSIM includes a model of the UEA, VEA and OEA.  This
+		includes the time base registers (VEA) and HTAB
+		and BATS (OEA).
+
+		In addition, a preliminary model of the 64 bit
+		PowerPC architecture is implemented.
+
+	IO Hardware
+
+		PSIM's internals are based around the concept
+		of a Device Tree.  This tree intentionally
+		resembles that of the Device Tree found in
+		OpenBoot firmware.  PSIM is flexible enough
+		to allow the user to fully configure this device
+		tree (and consequently the hardware model) at
+		run time.
+
+	Run-time environments:
+
+		PSIM's UEA model includes emulation for BSD
+		based UNIX system calls.
+
+		PSIM's OEA model includes emulation of either:
+
+			o	OpenBoot client interface
+
+			o	MOTO's BUG interface.
+
+
+	Floating point
+
+		Preliminary support for floating point is included.
+
+
+    Who would be interested in PSIM?
+
+	o	the curious
+
+		Using psim, gdb, gcc and binutils the curious
+		user can construct an environment that allows
+		them to play with PowerPC Environment without
+		the need for real hardware.
+
+
+	o	the analyst
+
+		PSIM includes many (contributed) monitoring
+		features which (unlike many other simulators)
+		do not come with a great penalty in performance.
+
+		Thus the performance analyst is able to use
+		this simulator to analyse the performance of
+		the system under test.
+
+		If PSIM doesn't monitor a components of interest,
+		the source code is freely available, and hence
+		there is no hinderance to changing things
+		to meet a specific analysts needs.
+
+
+	o	the serious SW developer
+
+		PSIM models all three levels of the PowerPC
+		Architecture: UEA, VEA and OEA.  Further,
+		the internal design is such that PSIM can
+		be extended to support additional requirements.
+
+
+    What performance analysis measurements can PSIM perform?
+
+	Below is the output from a recent analysis run
+	(contributed by Michael Meissner):
+
+	For the following program:
+
+	long
+	simple_rand ()
+	{
+	  static unsigned long seed = 47114711;
+	  unsigned long this = seed * 1103515245 + 12345;
+	  seed = this;
+	/* cut-cut-cut - see the file RUN.psim */
+	}
+
+	Here is the current output generated with the -I switch on a P90
+	(the compiler used is the development version of GCC with a new
+	scheduler replacing the old one):
+	
+	CPU #1 executed     41,994 AND instructions.
+	CPU #1 executed    519,785 AND Immediate instructions.
+	.
+	.
+	.
+	CPU #1 executed          1 System Call instruction.
+	CPU #1 executed    207,746 XOR instructions.
+	
+	CPU #1 executed 23,740,856 cycles.
+	CPU #1 executed 10,242,780 stalls waiting for data.
+	CPU #1 executed          1 stall waiting for a function unit.
+	.
+	.
+	.
+	CPU #1 executed  3,136,229 branch functional unit instructions.
+	CPU #1 executed 16,949,396 instructions that were accounted for in timing info.
+	CPU #1 executed    871,920 data reads.
+	CPU #1 executed    971,926 data writes.
+	CPU #1 executed        221 icache misses.
+	CPU #1 executed 16,949,396 instructions in total.
+	
+	Simulator speed was 250,731 instructions/second
+
+
+    What motivated PSIM?
+
+	As an idea, psim was first discussed seriously during mid
+	1994.  At that time its main objectives were:
+
+
+		o	good performance
+
+			Many simulators loose out by only providing
+			a binary interface to the internals.  This
+			interface eventually becomes a bottle neck
+			in the simulators performance.
+
+			It was intended that PSIM would avoid this
+			problem by giving the user access to the
+			full source code.
+
+			Further, by exploiting the power of modern
+			compilers it was hoped that PSIM would achieve
+			good performance with out having to compromise
+			its internal design.
+
+
+		o	practical portability
+
+			Rather than try to be portable to every
+			C compiler on every platform, it was decided
+			that PSIM would restrict its self to supporting
+			ANSI compilers that included the extension
+			of a long long type.
+
+			GCC is one such compiler, consequently PSIM
+			should be portable to any machine running GCC.
+
+
+		o	flexibility in its design
+
+			PSIM should allow the user to select the
+			features required and customise the build
+			accordingly.  By having the source code,
+			the compiler is able to eliminate any un
+			used features of the simulator.
+
+			After all, let the compiler do the work.
+
+
+		o	SMP
+
+			A model that allowed the simulation of
+			SMP platforms with out the large overhead
+			often encountered with such models.
+
+
+	PSIM achieves each of these objectives.
+
+
+    Is PSIM PowerPC Platform (PPCP) (nee CHRP) Compliant?
+
+	No.
+
+	Among other things it does not have an Apple ROM socket.
+
+
+    Could PSIM be extended so that it models a CHRP machine?
+
+	Yes.
+
+	PSIM has been designed with the CHRP spec in mind. To model
+	a CHRP desktop the following would need to be added:
+
+		o	An apple ROM socket :-)
+
+		o	Model of each of the desktop IO devices
+
+		o	An OpenPIC device.
+
+		o	RTAS (Run Time Abstraction Services).
+
+		o	A fully populated device tree.
+
+
+    Is the source code available?
+
+	Yes.
+
+	The source code to PSIM is available under the terms of
+	the GNU Public Licence.  This allows you to distribute
+	the source code for free but with certain conditions.
+
+	See the file:
+
+		ftp://archie.au/gnu/COPYING
+
+	For details of the terms and conditions.
+
+
+    Where do I send bugs or report problems?
+
+	There is a mailing list (subscribe through majordomo at ci.com.au) at:
+
+	powerpc-psim at ci.com.au
+
+	If I get the ftp archive updated I post a note to that mailing list.
+	In addition your welcome to send bugs or problems either to me or to
+	that e-mail list.
+
+	This list currently averages zero articles a day.
+
+
+     Does PSIM have any limitations or problems?
+
+	PSIM can't run rs6000/AIX binaries - At present PSIM can only
+	simulate static executables.  Since an AIX executable is
+	never static, PSIM is unable to simulate its execution.
+
+	PSIM is still under development - consequently there are going
+	to be bugs.
+
+	See the file BUGS (included in the distribution) for any
+	other outstanding issues.
 
diff --git a/sim/ppc/sim_calls.c b/sim/ppc/sim_calls.c
index e80db88..66d7f03 100644
--- a/sim/ppc/sim_calls.c
+++ b/sim/ppc/sim_calls.c
@@ -198,13 +198,13 @@ sim_stop_reason (SIM_DESC sd, enum sim_stop *reason, int *sigrc)
   case was_continuing:
     *reason = sim_stopped;
     if (status.signal == 0)
-      *sigrc = TARGET_SIGNAL_TRAP;
+      *sigrc = GDB_SIGNAL_TRAP;
     else
       *sigrc = status.signal;
     break;
   case was_trap:
     *reason = sim_stopped;
-    *sigrc = TARGET_SIGNAL_TRAP;
+    *sigrc = GDB_SIGNAL_TRAP;
     break;
   case was_exited:
     *reason = sim_exited;
diff --git a/sim/rl78/ChangeLog b/sim/rl78/ChangeLog
index ad557fb..b3bddf7 100644
--- a/sim/rl78/ChangeLog
+++ b/sim/rl78/ChangeLog
@@ -1,3 +1,22 @@
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-05-24  Pedro Alves  <palves at redhat.com>
+
+	PR gdb/7205
+
+        Replace TARGET_SIGNAL_ with GDB_SIGNAL_ throughout.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
+2012-02-03  Kevin Buettner  <kevinb at redhat.com>
+
+	* Makefile.in (SIM_OBJS): Add gdb-if.o.
+	* gdb-if.c: New file.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* aclocal.m4: New file.
diff --git a/sim/rl78/Makefile.in b/sim/rl78/Makefile.in
index 47c59c1..70c767b 100644
--- a/sim/rl78/Makefile.in
+++ b/sim/rl78/Makefile.in
@@ -32,6 +32,7 @@ SIM_OBJS = \
 	mem.o \
 	cpu.o \
 	rl78.o \
+	gdb-if.o \
 	trace.o
 
 ## COMMON_POST_CONFIG_FRAG
diff --git a/sim/rl78/aclocal.m4 b/sim/rl78/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/rl78/aclocal.m4
+++ b/sim/rl78/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/rl78/config.in b/sim/rl78/config.in
index 7263de3..f7b31b1 100644
--- a/sim/rl78/config.in
+++ b/sim/rl78/config.in
@@ -1,4 +1,4 @@
-/* config.in.  Generated from configure.in by autoheader.  */
+/* config.in.  Generated from configure.ac by autoheader.  */
 
 /* Define to 1 if translation of program messages to the user's native
    language is requested. */
@@ -76,6 +76,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -106,8 +109,34 @@
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
-/* --enable-cycle-accurate */
-#undef CYCLE_ACCURATE
-
-/* --enable-cycle-stats */
-#undef CYCLE_STATS
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/rl78/configure b/sim/rl78/configure
index 9fe8f08..55cd484 100755
--- a/sim/rl78/configure
+++ b/sim/rl78/configure
@@ -601,9 +601,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -622,6 +619,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -629,6 +627,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -2432,9 +2433,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3361,120 +3362,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3875,6 +3762,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3883,6 +3945,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -3988,6 +4051,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4564,7 +4638,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
diff --git a/sim/rl78/gdb-if.c b/sim/rl78/gdb-if.c
new file mode 100644
index 0000000..e2a5ea0
--- /dev/null
+++ b/sim/rl78/gdb-if.c
@@ -0,0 +1,573 @@
+/* gdb-if.c -- sim interface to GDB.
+
+Copyright (C) 2011-2012 Free Software Foundation, Inc.
+Contributed by Red Hat, Inc.
+
+This file is part of the GNU simulators.
+
+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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include <stdio.h>
+#include <assert.h>
+#include <signal.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+
+#include "ansidecl.h"
+#include "gdb/callback.h"
+#include "gdb/remote-sim.h"
+#include "gdb/signals.h"
+#include "gdb/sim-rl78.h"
+
+#include "cpu.h"
+#include "mem.h"
+#include "load.h"
+#include "trace.h"
+
+/* Ideally, we'd wrap up all the minisim's data structures in an
+   object and pass that around.  However, neither GDB nor run needs
+   that ability.
+
+   So we just have one instance, that lives in global variables, and
+   each time we open it, we re-initialize it.  */
+
+struct sim_state
+{
+  const char *message;
+};
+
+static struct sim_state the_minisim = {
+  "This is the sole rl78 minisim instance."
+};
+
+static int open;
+
+static unsigned char hw_breakpoints[MEM_SIZE/8];
+
+static struct host_callback_struct *host_callbacks;
+
+/* Open an instance of the sim.  For this sim, only one instance
+   is permitted.  If sim_open() is called multiple times, the sim
+   will be reset.  */
+
+SIM_DESC
+sim_open (SIM_OPEN_KIND kind,
+	  struct host_callback_struct *callback,
+	  struct bfd *abfd, char **argv)
+{
+  if (open)
+    fprintf (stderr, "rl78 minisim: re-opened sim\n");
+
+  /* The 'run' interface doesn't use this function, so we don't care
+     about KIND; it's always SIM_OPEN_DEBUG.  */
+  if (kind != SIM_OPEN_DEBUG)
+    fprintf (stderr, "rl78 minisim: sim_open KIND != SIM_OPEN_DEBUG: %d\n",
+	     kind);
+
+  /* We use this for the load command.  Perhaps someday, it'll be used
+     for syscalls too.  */
+  host_callbacks = callback;
+
+  /* We don't expect any command-line arguments.  */
+
+  init_cpu ();
+  trace = 0;
+
+  sim_disasm_init (abfd);
+  open = 1;
+  return &the_minisim;
+}
+
+/* Verify the sim descriptor.  Just print a message if the descriptor
+   doesn't match.  Nothing bad will happen if the descriptor doesn't
+   match because all of the state is global.  But if it doesn't
+   match, that means there's a problem with the caller.  */
+
+static void
+check_desc (SIM_DESC sd)
+{
+  if (sd != &the_minisim)
+    fprintf (stderr, "rl78 minisim: desc != &the_minisim\n");
+}
+
+/* Close the sim.  */
+
+void
+sim_close (SIM_DESC sd, int quitting)
+{
+  check_desc (sd);
+
+  /* Not much to do.  At least free up our memory.  */
+  init_mem ();
+
+  open = 0;
+}
+
+/* Open the program to run; print a message if the program cannot
+   be opened.  */
+
+static bfd *
+open_objfile (const char *filename)
+{
+  bfd *prog = bfd_openr (filename, 0);
+
+  if (!prog)
+    {
+      fprintf (stderr, "Can't read %s\n", filename);
+      return 0;
+    }
+
+  if (!bfd_check_format (prog, bfd_object))
+    {
+      fprintf (stderr, "%s not a rl78 program\n", filename);
+      return 0;
+    }
+
+  return prog;
+}
+
+/* Load a program.  */
+
+SIM_RC
+sim_load (SIM_DESC sd, char *prog, struct bfd *abfd, int from_tty)
+{
+  check_desc (sd);
+
+  if (!abfd)
+    abfd = open_objfile (prog);
+  if (!abfd)
+    return SIM_RC_FAIL;
+
+  rl78_load (abfd, host_callbacks, "sim");
+
+  return SIM_RC_OK;
+}
+
+/* Create inferior.  */
+
+SIM_RC
+sim_create_inferior (SIM_DESC sd, struct bfd *abfd, char **argv, char **env)
+{
+  check_desc (sd);
+
+  if (abfd)
+    rl78_load (abfd, 0, "sim");
+
+  return SIM_RC_OK;
+}
+
+/* Read memory.  */
+
+int
+sim_read (SIM_DESC sd, SIM_ADDR mem, unsigned char *buf, int length)
+{
+  check_desc (sd);
+
+  if (mem >= MEM_SIZE)
+    return 0;
+  else if (mem + length > MEM_SIZE)
+    length = MEM_SIZE - mem;
+
+  mem_get_blk (mem, buf, length);
+  return length;
+}
+
+/* Write memory.  */
+
+int
+sim_write (SIM_DESC sd, SIM_ADDR mem, const unsigned char *buf, int length)
+{
+  check_desc (sd);
+
+  if (mem >= MEM_SIZE)
+    return 0;
+  else if (mem + length > MEM_SIZE)
+    length = MEM_SIZE - mem;
+
+  mem_put_blk (mem, buf, length);
+  return length;
+}
+
+/* Read the LENGTH bytes at BUF as an little-endian value.  */
+
+static SI
+get_le (unsigned char *buf, int length)
+{
+  SI acc = 0;
+
+  while (--length >= 0)
+    acc = (acc << 8) + buf[length];
+
+  return acc;
+}
+
+/* Store VAL as a little-endian value in the LENGTH bytes at BUF.  */
+
+static void
+put_le (unsigned char *buf, int length, SI val)
+{
+  int i;
+
+  for (i = 0; i < length; i++)
+    {
+      buf[i] = val & 0xff;
+      val >>= 8;
+    }
+}
+
+/* Verify that REGNO is in the proper range.  Return 0 if not and
+   something non-zero if so.  */
+
+static int
+check_regno (enum sim_rl78_regnum regno)
+{
+  return 0 <= regno && regno < sim_rl78_num_regs;
+}
+
+/* Return the size of the register REGNO.  */
+
+static size_t
+reg_size (enum sim_rl78_regnum regno)
+{
+  size_t size;
+
+  if (regno == sim_rl78_pc_regnum)
+    size = 4;
+  else
+    size = 1;
+
+  return size;
+}
+
+/* Return the register address associated with the register specified by
+   REGNO.  */
+
+static unsigned long
+reg_addr (enum sim_rl78_regnum regno)
+{
+  if (sim_rl78_bank0_r0_regnum <= regno
+      && regno <= sim_rl78_bank0_r7_regnum)
+    return 0xffef8 + (regno - sim_rl78_bank0_r0_regnum);
+  else if (sim_rl78_bank1_r0_regnum <= regno
+           && regno <= sim_rl78_bank1_r7_regnum)
+    return 0xffef0 + (regno - sim_rl78_bank1_r0_regnum);
+  else if (sim_rl78_bank2_r0_regnum <= regno
+           && regno <= sim_rl78_bank2_r7_regnum)
+    return 0xffee8 + (regno - sim_rl78_bank2_r0_regnum);
+  else if (sim_rl78_bank3_r0_regnum <= regno
+           && regno <= sim_rl78_bank3_r7_regnum)
+    return 0xffee0 + (regno - sim_rl78_bank3_r0_regnum);
+  else if (regno == sim_rl78_psw_regnum)
+    return 0xffffa;
+  else if (regno == sim_rl78_es_regnum)
+    return 0xffffd;
+  else if (regno == sim_rl78_cs_regnum)
+    return 0xffffc;
+  /* Note: We can't handle PC here because it's not memory mapped.  */
+  else if (regno == sim_rl78_spl_regnum)
+    return 0xffff8;
+  else if (regno == sim_rl78_sph_regnum)
+    return 0xffff9;
+  else if (regno == sim_rl78_pmc_regnum)
+    return 0xffffe;
+  else if (regno == sim_rl78_mem_regnum)
+    return 0xfffff;
+
+  return 0;
+}
+
+/* Fetch the contents of the register specified by REGNO, placing the
+   contents in BUF.  The length LENGTH must match the sim's internal
+   notion of the register's size.  */
+
+int
+sim_fetch_register (SIM_DESC sd, int regno, unsigned char *buf, int length)
+{
+  size_t size;
+  SI val;
+
+  check_desc (sd);
+
+  if (!check_regno (regno))
+    return 0;
+
+  size = reg_size (regno);
+
+  if (length != size)
+    return 0;
+
+  if (regno == sim_rl78_pc_regnum)
+    val = pc;
+  else
+    val = memory[reg_addr (regno)];
+
+  put_le (buf, length, val);
+
+  return size;
+}
+
+/* Store the value stored in BUF to the register REGNO.  The length
+   LENGTH must match the sim's internal notion of the register size.  */
+
+int
+sim_store_register (SIM_DESC sd, int regno, unsigned char *buf, int length)
+{
+  size_t size;
+  SI val;
+
+  check_desc (sd);
+
+  if (!check_regno (regno))
+    return -1;
+
+  size = reg_size (regno);
+
+  if (length != size)
+    return -1;
+
+  val = get_le (buf, length);
+
+  if (regno == sim_rl78_pc_regnum)
+    pc = val;
+  else
+    memory[reg_addr (regno)] = val;
+  return size;
+}
+
+/* Print out message associated with "info target".  */
+
+void
+sim_info (SIM_DESC sd, int verbose)
+{
+  check_desc (sd);
+
+  printf ("The rl78 minisim doesn't collect any statistics.\n");
+}
+
+static volatile int stop;
+static enum sim_stop reason;
+int siggnal;
+
+
+/* Given a signal number used by the rl78 bsp (that is, newlib),
+   return the corresponding signal numbers.  */
+
+int
+rl78_signal_to_target (int sig)
+{
+  switch (sig)
+    {
+    case 4:
+      return GDB_SIGNAL_ILL;
+
+    case 5:
+      return GDB_SIGNAL_TRAP;
+
+    case 10:
+      return GDB_SIGNAL_BUS;
+
+    case 11:
+      return GDB_SIGNAL_SEGV;
+
+    case 24:
+      return GDB_SIGNAL_XCPU;
+      break;
+
+    case 2:
+      return GDB_SIGNAL_INT;
+
+    case 8:
+      return GDB_SIGNAL_FPE;
+      break;
+
+    case 6:
+      return GDB_SIGNAL_ABRT;
+    }
+
+  return 0;
+}
+
+
+/* Take a step return code RC and set up the variables consulted by
+   sim_stop_reason appropriately.  */
+
+void
+handle_step (int rc)
+{
+  if (RL78_STEPPED (rc) || RL78_HIT_BREAK (rc))
+    {
+      reason = sim_stopped;
+      siggnal = GDB_SIGNAL_TRAP;
+    }
+  else if (RL78_STOPPED (rc))
+    {
+      reason = sim_stopped;
+      siggnal = rl78_signal_to_target (RL78_STOP_SIG (rc));
+    }
+  else
+    {
+      assert (RL78_EXITED (rc));
+      reason = sim_exited;
+      siggnal = RL78_EXIT_STATUS (rc);
+    }
+}
+
+
+/* Resume execution after a stop.  */
+
+void
+sim_resume (SIM_DESC sd, int step, int sig_to_deliver)
+{
+  int rc;
+
+  check_desc (sd);
+
+  if (sig_to_deliver != 0)
+    {
+      fprintf (stderr,
+	       "Warning: the rl78 minisim does not implement "
+	       "signal delivery yet.\n" "Resuming with no signal.\n");
+    }
+
+      /* We don't clear 'stop' here, because then we would miss
+         interrupts that arrived on the way here.  Instead, we clear
+         the flag in sim_stop_reason, after GDB has disabled the
+         interrupt signal handler.  */
+  for (;;)
+    {
+      if (stop)
+	{
+	  stop = 0;
+	  reason = sim_stopped;
+	  siggnal = GDB_SIGNAL_INT;
+	  break;
+	}
+
+      if (hw_breakpoints[pc >> 3]
+          && (hw_breakpoints[pc >> 3] & (1 << (pc & 0x7))))
+	{
+	  reason = sim_stopped;
+	  siggnal = GDB_SIGNAL_TRAP;
+	  break;
+	}
+      rc = setjmp (decode_jmp_buf);
+      if (rc == 0)
+	rc = decode_opcode ();
+
+      if (!RL78_STEPPED (rc) || step)
+	{
+	  handle_step (rc);
+	  break;
+	}
+    }
+}
+
+/* Stop the sim.  */
+
+int
+sim_stop (SIM_DESC sd)
+{
+  stop = 1;
+
+  return 1;
+}
+
+/* Fetch the stop reason and signal.  */
+
+void
+sim_stop_reason (SIM_DESC sd, enum sim_stop *reason_p, int *sigrc_p)
+{
+  check_desc (sd);
+
+  *reason_p = reason;
+  *sigrc_p = siggnal;
+}
+
+/* Execute the sim-specific command associated with GDB's "sim ..."
+   command.  */
+
+void
+sim_do_command (SIM_DESC sd, char *cmd)
+{
+  char *args;
+
+  check_desc (sd);
+
+  if (cmd == NULL)
+    {
+      cmd = "";
+      args = "";
+    }
+  else
+    {
+      char *p = cmd;
+
+      /* Skip leading whitespace.  */
+      while (isspace (*p))
+	p++;
+
+      /* Find the extent of the command word.  */
+      for (p = cmd; *p; p++)
+	if (isspace (*p))
+	  break;
+
+      /* Null-terminate the command word, and record the start of any
+	 further arguments.  */
+      if (*p)
+	{
+	  *p = '\0';
+	  args = p + 1;
+	  while (isspace (*args))
+	    args++;
+	}
+      else
+	args = p;
+    }
+
+  if (strcmp (cmd, "trace") == 0)
+    {
+      if (strcmp (args, "on") == 0)
+	trace = 1;
+      else if (strcmp (args, "off") == 0)
+	trace = 0;
+      else
+	printf ("The 'sim trace' command expects 'on' or 'off' "
+		"as an argument.\n");
+    }
+  else if (strcmp (cmd, "verbose") == 0)
+    {
+      if (strcmp (args, "on") == 0)
+	verbose = 1;
+      else if (strcmp (args, "noisy") == 0)
+	verbose = 2;
+      else if (strcmp (args, "off") == 0)
+	verbose = 0;
+      else
+	printf ("The 'sim verbose' command expects 'on', 'noisy', or 'off'"
+		" as an argument.\n");
+    }
+  else
+    printf ("The 'sim' command expects either 'trace' or 'verbose'"
+	    " as a subcommand.\n");
+}
+
+/* Stub for command completion.  */
+
+char **
+sim_complete_command (SIM_DESC sd, char *text, char *word)
+{
+    return NULL;
+}
diff --git a/sim/rx/ChangeLog b/sim/rx/ChangeLog
index d9c2264..e5cb451 100644
--- a/sim/rx/ChangeLog
+++ b/sim/rx/ChangeLog
@@ -1,3 +1,35 @@
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-05-24  Pedro Alves  <palves at redhat.com>
+
+	PR gdb/7205
+
+        Replace TARGET_SIGNAL_ with GDB_SIGNAL_ throughout.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
+2012-03-22  Mike Frysinger  <vapier at gentoo.org>
+
+	* configure.ac (CYCLE_ACCURATE): Add template with AC_DEFINE call.
+	(CYCLE_STATS): Likewise.
+
+2012-03-02  Kevin Buettner  <kevinb at redhat.com>
+
+	* load.h (rx_load): Add `callback' parameter to function prototype.
+	(gdb/callback.h): Include.
+	* load.c (load.h): Include.
+	(xprintf, find_section_name_by_offset): New functions.
+	(rx_load): Add `callback' parameter.  Add code for printing
+	section loaded using GDB's printf facilities.
+	* gdb-if.c (sim_load, sim_create_inferior): Update calls to
+	rx_load().
+	* main.c (main): Likewise.
+	* syscalls.c, syscalls.h (get_callbacks): New function.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* aclocal.m4: New file.
diff --git a/sim/rx/aclocal.m4 b/sim/rx/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/rx/aclocal.m4
+++ b/sim/rx/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/rx/config.in b/sim/rx/config.in
index 7263de3..8af1fff 100644
--- a/sim/rx/config.in
+++ b/sim/rx/config.in
@@ -1,4 +1,10 @@
-/* config.in.  Generated from configure.in by autoheader.  */
+/* config.in.  Generated from configure.ac by autoheader.  */
+
+/* --enable-cycle-accurate */
+#undef CYCLE_ACCURATE
+
+/* --enable-cycle-stats */
+#undef CYCLE_STATS
 
 /* Define to 1 if translation of program messages to the user's native
    language is requested. */
@@ -76,6 +82,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -106,8 +115,34 @@
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
-/* --enable-cycle-accurate */
-#undef CYCLE_ACCURATE
-
-/* --enable-cycle-stats */
-#undef CYCLE_STATS
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/rx/configure b/sim/rx/configure
index 370c459..933f61d 100755
--- a/sim/rx/configure
+++ b/sim/rx/configure
@@ -601,9 +601,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -622,6 +619,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -629,6 +627,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -2436,9 +2437,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3365,120 +3366,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3879,6 +3766,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3887,6 +3949,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -3992,6 +4055,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4568,7 +4642,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
@@ -4761,16 +4835,18 @@ echo enable_cycle_accurate is $enable_cycle_accurate
 echo enable_cycle_stats is $enable_cycle_stats
 
 if test "x${enable_cycle_accurate}" != xno; then
+
 $as_echo "#define CYCLE_ACCURATE 1" >>confdefs.h
 
 
   if test "x${enable_cycle_stats}" != xno; then
-  $as_echo "#define CYCLE_STATS 1" >>confdefs.h
+
+$as_echo "#define CYCLE_STATS 1" >>confdefs.h
 
   fi
 else
   if test "x${enable_cycle_stats}" != xno; then
-  as_fn_error "cycle-stats not available without cycle-accurate" "$LINENO" 5
+    as_fn_error "cycle-stats not available without cycle-accurate" "$LINENO" 5
   fi
 fi
 
diff --git a/sim/rx/configure.ac b/sim/rx/configure.ac
index aebad94..1857063 100644
--- a/sim/rx/configure.ac
+++ b/sim/rx/configure.ac
@@ -44,14 +44,14 @@ echo enable_cycle_accurate is $enable_cycle_accurate
 echo enable_cycle_stats is $enable_cycle_stats
 
 if test "x${enable_cycle_accurate}" != xno; then
-AC_DEFINE([CYCLE_ACCURATE])
+  AC_DEFINE([CYCLE_ACCURATE], 1, [--enable-cycle-accurate])
 
   if test "x${enable_cycle_stats}" != xno; then
-  AC_DEFINE([CYCLE_STATS])
+    AC_DEFINE([CYCLE_STATS], 1, [--enable-cycle-stats])
   fi
 else
   if test "x${enable_cycle_stats}" != xno; then
-  AC_ERROR([cycle-stats not available without cycle-accurate])
+    AC_ERROR([cycle-stats not available without cycle-accurate])
   fi
 fi
 
diff --git a/sim/rx/gdb-if.c b/sim/rx/gdb-if.c
index 6f882d6..a9903e5 100644
--- a/sim/rx/gdb-if.c
+++ b/sim/rx/gdb-if.c
@@ -201,7 +201,7 @@ sim_load (SIM_DESC sd, char *prog, struct bfd *abfd, int from_tty)
   if (!abfd)
     return SIM_RC_FAIL;
 
-  rx_load (abfd);
+  rx_load (abfd, get_callbacks ());
   build_swap_list (abfd);
 
   return SIM_RC_OK;
@@ -214,7 +214,7 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd, char **argv, char **env)
 
   if (abfd)
     {
-      rx_load (abfd);
+      rx_load (abfd, NULL);
       build_swap_list (abfd);
     }
 
@@ -710,12 +710,12 @@ handle_step (int rc)
   if (execution_error_get_last_error () != SIM_ERR_NONE)
     {
       reason = sim_stopped;
-      siggnal = TARGET_SIGNAL_SEGV;
+      siggnal = GDB_SIGNAL_SEGV;
     }
   if (RX_STEPPED (rc) || RX_HIT_BREAK (rc))
     {
       reason = sim_stopped;
-      siggnal = TARGET_SIGNAL_TRAP;
+      siggnal = GDB_SIGNAL_TRAP;
     }
   else if (RX_STOPPED (rc))
     {
@@ -766,7 +766,7 @@ sim_resume (SIM_DESC sd, int step, int sig_to_deliver)
 	    {
 	      stop = 0;
 	      reason = sim_stopped;
-	      siggnal = TARGET_SIGNAL_INT;
+	      siggnal = GDB_SIGNAL_INT;
 	      break;
 	    }
 
@@ -777,7 +777,7 @@ sim_resume (SIM_DESC sd, int step, int sig_to_deliver)
 	  if (execution_error_get_last_error () != SIM_ERR_NONE)
 	    {
 	      reason = sim_stopped;
-	      siggnal = TARGET_SIGNAL_SEGV;
+	      siggnal = GDB_SIGNAL_SEGV;
 	      break;
 	    }
 
diff --git a/sim/rx/load.c b/sim/rx/load.c
index 39eb261..f6fc56e 100644
--- a/sim/rx/load.c
+++ b/sim/rx/load.c
@@ -28,9 +28,36 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #include "libbfd.h"
 #include "cpu.h"
 #include "mem.h"
+#include "load.h"
 #include "elf/internal.h"
 #include "elf/common.h"
 
+/* Helper function for invoking a GDB-specified printf.  */
+static void
+xprintf (host_callback *callback, const char *fmt, ...)
+{
+  va_list ap;
+
+  va_start (ap, fmt);
+
+  (*callback->vprintf_filtered) (callback, fmt, ap);
+
+  va_end (ap);
+}
+
+/* Given a file offset, look up the section name.  */
+static const char *
+find_section_name_by_offset (bfd *abfd, file_ptr filepos)
+{
+  asection *s;
+
+  for (s = abfd->sections; s; s = s->next)
+    if (s->filepos == filepos)
+      return bfd_get_section_name (abfd, s);
+
+  return "(unknown)";
+}
+
 /* A note about endianness and swapping...
 
    The RX chip is CISC-like in that the opcodes are variable length
@@ -56,7 +83,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
    encoded in little-endian format.  */
 
 void
-rx_load (bfd *prog)
+rx_load (bfd *prog, host_callback *callback)
 {
   unsigned long highest_addr_loaded = 0;
   Elf_Internal_Phdr * phdrs;
@@ -105,6 +132,11 @@ rx_load (bfd *prog)
       if (verbose > 1)
 	fprintf (stderr, "[load segment: lma=%08x vma=%08x size=%08x]\n",
 		 (int) base, (int) p->p_vaddr, (int) size);
+      if (callback)
+	xprintf (callback,
+	         "Loading section %s, size %#lx lma %08lx vma %08lx\n",
+	         find_section_name_by_offset (prog, p->p_offset),
+		 size, base, p->p_vaddr);
 
       buf = malloc (size);
       if (buf == NULL)
diff --git a/sim/rx/load.h b/sim/rx/load.h
index b9c63d3..ef78814 100644
--- a/sim/rx/load.h
+++ b/sim/rx/load.h
@@ -20,8 +20,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 
 #include "bfd.h"
+#include "gdb/callback.h"
 
 extern int default_machine;
 
 void rx_set_mach (int mach);
-void rx_load (bfd *);
+void rx_load (bfd *, host_callback *callback);
diff --git a/sim/rx/main.c b/sim/rx/main.c
index 6f43c9f..594c6c8 100644
--- a/sim/rx/main.c
+++ b/sim/rx/main.c
@@ -174,7 +174,7 @@ main (int argc, char **argv)
   rx_in_gdb = 0;
   save_trace = trace;
   trace = 0;
-  rx_load (prog);
+  rx_load (prog, NULL);
   trace = save_trace;
 
   sim_disasm_init (prog);
diff --git a/sim/rx/syscalls.c b/sim/rx/syscalls.c
index 6d2f163..9263257 100644
--- a/sim/rx/syscalls.c
+++ b/sim/rx/syscalls.c
@@ -43,6 +43,12 @@ set_callbacks (struct host_callback_struct *cb)
   callbacks = cb;
 }
 
+struct host_callback_struct *
+get_callbacks (void)
+{
+  return callbacks;
+}
+
 
 /* Arguments 1..4 are in R1..R4, remainder on stack.
 
diff --git a/sim/rx/syscalls.h b/sim/rx/syscalls.h
index b1521ad..73bdef6 100644
--- a/sim/rx/syscalls.h
+++ b/sim/rx/syscalls.h
@@ -21,4 +21,5 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 struct host_callback_struct;
 extern void set_callbacks (struct host_callback_struct *);
+extern struct host_callback_struct * get_callbacks (void);
 extern int rx_syscall (int id);
diff --git a/sim/sh/ChangeLog b/sim/sh/ChangeLog
index a5f530c..44f3513 100644
--- a/sim/sh/ChangeLog
+++ b/sim/sh/ChangeLog
@@ -1,3 +1,18 @@
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
+2012-02-16  Kevin Buettner  <kevinb at redhat.com>
+
+	* interp.c (MA): Adjust cast to avoid warning on 64-bit hosts.
+
+	* interp.c (sim_store_register, sim_fetch_register): Return
+	length, not -1.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* aclocal.m4: New file.
diff --git a/sim/sh/aclocal.m4 b/sim/sh/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/sh/aclocal.m4
+++ b/sim/sh/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/sh/config.in b/sim/sh/config.in
index f29d045..0db6f1e 100644
--- a/sim/sh/config.in
+++ b/sim/sh/config.in
@@ -73,6 +73,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -102,3 +105,35 @@
 
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/sh/configure b/sim/sh/configure
index e3e28f9..e9a1003 100755
--- a/sim/sh/configure
+++ b/sim/sh/configure
@@ -601,9 +601,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -622,6 +619,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -629,6 +627,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -2432,9 +2433,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3361,120 +3362,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3875,6 +3762,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3883,6 +3945,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -3988,6 +4051,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4564,7 +4638,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
diff --git a/sim/sh/interp.c b/sim/sh/interp.c
index 20239de..e9313c7 100644
--- a/sim/sh/interp.c
+++ b/sim/sh/interp.c
@@ -862,7 +862,7 @@ do { \
 #else
 
 #define MA(n) \
-  do { memstalls += ((((int) PC & 3) != 0) ? (n) : ((n) - 1)); } while (0)
+  do { memstalls += ((((long) PC & 3) != 0) ? (n) : ((n) - 1)); } while (0)
 
 #define L(x)   thislock = x;
 #define TL(x)  if ((x) == prevlock) stalls++;
@@ -2356,7 +2356,7 @@ sim_store_register (sd, rn, memory, length)
     default:
       return 0;
     }
-  return -1;
+  return length;
 }
 
 int
@@ -2531,7 +2531,7 @@ sim_fetch_register (sd, rn, memory, length)
       return 0;
     }
   * (int *) memory = swap (val);
-  return -1;
+  return length;
 }
 
 int
diff --git a/sim/sh64/ChangeLog b/sim/sh64/ChangeLog
index 42f294f..25751be 100644
--- a/sim/sh64/ChangeLog
+++ b/sim/sh64/ChangeLog
@@ -1,3 +1,16 @@
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-05-18  Nick Clifton  <nickc at redhat.com>
+
+	PR 14072
+	* interp.c: Include config.h before system header files.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* aclocal.m4: New file.
diff --git a/sim/sh64/aclocal.m4 b/sim/sh64/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/sh64/aclocal.m4
+++ b/sim/sh64/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/sh64/config.in b/sim/sh64/config.in
index 21082c5..8de933c 100644
--- a/sim/sh64/config.in
+++ b/sim/sh64/config.in
@@ -76,6 +76,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -106,6 +109,28 @@
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
 #if defined AC_APPLE_UNIVERSAL_BUILD
@@ -117,3 +142,13 @@
 #  undef WORDS_BIGENDIAN
 # endif
 #endif
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/sh64/configure b/sim/sh64/configure
index e9ad7be..69e74f6 100755
--- a/sim/sh64/configure
+++ b/sim/sh64/configure
@@ -604,9 +604,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -625,6 +622,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -632,6 +630,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -2451,9 +2452,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3380,120 +3381,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3894,6 +3781,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3902,6 +3964,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -4007,6 +4070,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4583,7 +4657,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
diff --git a/sim/sh64/sim-if.c b/sim/sh64/sim-if.c
index f9982bd..bb988ca 100644
--- a/sim/sh64/sim-if.c
+++ b/sim/sh64/sim-if.c
@@ -17,6 +17,7 @@ GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
+#include "config.h"
 #include "libiberty.h"
 #include "bfd.h"
 #include "sim-main.h"
diff --git a/sim/testsuite/.gitignore b/sim/testsuite/.gitignore
new file mode 100644
index 0000000..37a28a8
--- /dev/null
+++ b/sim/testsuite/.gitignore
@@ -0,0 +1 @@
+*.x
diff --git a/sim/testsuite/ChangeLog b/sim/testsuite/ChangeLog
index 361e914..4eae80d 100644
--- a/sim/testsuite/ChangeLog
+++ b/sim/testsuite/ChangeLog
@@ -1,14 +1,18 @@
-2011-10-17  Mike Frysinger  <vapier at gentoo.org>
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
 
-	* configure: Regenerate after bfin testsuite update.
+	* configure: Regenerate.
 
-2011-07-01  Nick Clifton  <nickc at redhat.com>
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* configure: Regenerate.
+
+2012-03-18  Mike Frysinger  <vapier at gentoo.org>
+
+	* .gitignore: New file.
+
+2011-10-17  Mike Frysinger  <vapier at gentoo.org>
 
-	PR sim/12737
-	* sim/arm/iwmmxt/wcmpgt.cgs: Remove expectation of failure.
-	* sim/arm/iwmmxt/wmac.cgs: Remove expectation of failure.
-	* sim/arm/iwmmxt/wsra.cgs: Remove expectation of failure.
-	* sim/arm/xscale/blx.cgs: Remove expectation of failure.
+	* configure: Regenerate after bfin testsuite update.
 
 2011-05-16  Mike Frysinger  <vapier at gentoo.org>
 
@@ -18,32 +22,9 @@
 	Convert linker options into compiler options (c_ld_options) with -Wl.
 	Compile .c and .S files into .x programs.
 
-2011-05-11  Joseph Myers  <joseph at codesourcery.com>
-	    Hans-Peter Nilsson  <hp at axis.com>
-
-	PR sim/12737
-	* sim/arm/iwmmxt/wcmpgt.cgs, sim/arm/iwmmxt/wmac.cgs,
-	sim/arm/iwmmxt/wsra.cgs, sim/arm/xscale/blx.cgs: Kfail.
-
 2011-05-04  Joseph Myers  <joseph at codesourcery.com>
 
 	* configure: Regenerate.
-	* sim/arm/allinsn.exp (xscale*-*-*): Don't handle target.
-	* sim/arm/misc.exp (thumb*-*-*, xscale*-*-*): Don't handle
-	targets.
-	* sim/arm/iwmmxt/iwmmxt.exp: Test for arm*-*-* instead of
-	xscale*-*-*.
-	* sim/arm/thumb/allthumb.exp (thumb*-*-*): Don't handle target.
-	* sim/arm/xscale/xscale.exp: Test for arm*-*-* instead of
-	xscale*-*-*.
-
-2010-10-07  Hans-Peter Nilsson  <hp at axis.com>
-
-	* sim/cris/c/seek3.c, sim/cris/c/seek4.c: New tests.
-
-2010-08-24  Hans-Peter Nilsson  <hp at axis.com>
-
-	* sim/cris/asm/nonvcv32.ms: Neutralize changed &&-in-macro gas syntax.
 
 2010-04-26  Mike Frysinger  <vapier at gentoo.org>
 
@@ -58,202 +39,8 @@
 
 2009-01-18  Hans-Peter Nilsson  <hp at axis.com>
 
-	* sim/cris/asm/opterr5.ms, sim/cris/asm/opterr4.ms,
-	sim/cris/asm/opterr3.ms, sim/cris/asm/bare3.ms: New tests.
 	* lib/sim-defs.exp (run_sim_test): New option progopts.
 
-2009-01-06  Hans-Peter Nilsson  <hp at axis.com>
-
-	* sim/cris/c/mmap5.c, sim/cris/c/mmap6.c, sim/cris/c/mmap7.c,
-	sim/cris/c/mmap8.c, sim/cris/c/hellodyn3.c: New tests.
-
-2009-01-03  Hans-Peter Nilsson  <hp at axis.com>
-
-	* sim/cris/c/settls1.c: New test.
-	* sim/cris/c/exitg1.c, sim/cris/c/exitg2.c: New tests.
-	* sim/cris/c/uname1.c: New test.
-	* sim/cris/c/mmap1.c (MMAP_FLAGS): Default-define to
-	MAP_PRIVATE and use this macro in the mmap call.
-	* sim/cris/c/mmap4.c: New test.
-	* sim/cris/c/access1.c: New test.
-	* sim/cris/asm/pid1.ms: New test.
-
-2008-12-30  Hans-Peter Nilsson  <hp at axis.com>
-
-	* sim/cris/asm/badarch1.ms: Tweak error message match.
-
-	* sim/cris/asm/badarch1.ms, sim/cris/c/badldso1.c,
-	sim/cris/c/badldso2.c, sim/cris/c/badldso3.c,
-	sim/cris/c/helloaout.c, sim/cris/c/hellodyn.c,
-	sim/cris/c/hellodyn2.c, sim/cris/c/writev1.c,
-	sim/cris/c/writev2.c: New tests.
-	* sim/cris/c/c.exp: If compiler links libc.so when attempting to
-	link dynamically, create symlink named "lib" to the directory
-	where it is found.  Handle new test-case option "dynamic".
-
-	* sim/cris/asm/opterr1.ms, sim/cris/asm/opterr2.ms: Adjust for
-	differences in getopt_long error message quoting.
-
-2008-02-12  M Ranga Swami Reddy <MR.Swami.Reddy at nsc.com>
-
-	* sim/cr16/: New directory. Tests for CR16 simulator.
-	sim/cr16/allinsn.exp and sim/cr16/misc.exp: New files: Test scripts.
-	sim/cr16/testutils.inc: New file: Test macros.
-	sim/cr16/addb.cgs, sim/cr16/addd.cgs, sim/cr16/addi.cgs, 
-	sim/cr16/addw.cgs, sim/cr16/andb.cgs, sim/cr16/andd.cgs,
-	sim/cr16/andw.cgs, sim/cr16/ashub.cgs, sim/cr16/ashub_i.cgs,
-	sim/cr16/ashud.cgs, sim/cr16/ashud_i.cgs, sim/cr16/ashuw.cgs, 
-	sim/cr16/ashuw_i.cgs, sim/cr16/lshb.cgs, sim/cr16/lshb_i.cgs,
-	sim/cr16/lshd.cgs, sim/cr16/lshd_i.cgs, sim/cr16/lshw.cgs, 
-	sim/cr16/lshw_i.cgs, sim/cr16/bal1_24.cgs, sim/cr16/bal2_24.cgs,
-	sim/cr16/bcc.cgs, sim/cr16/bcs.cgs, sim/cr16/beq.cgs, sim/cr16/bne.cgs
-	sim/cr16/bge.cgs, sim/cr16/bgt.cgs, sim/cr16/bhi.cgs, sim/cr16/bhs.cgs,
-	sim/cr16/br.cgs, sim/cr16/beq0b.cgs, sim/cr16/beq0w.cgs, 
-	sim/cr16/bne0b.cgs, sim/cr16/bne0w.cgs, sim/cr16/cmpb.cgs, 
-	sim/cr16/cmpb_i.cgs, sim/cr16/cmpd.cgs, sim/cr16/cmpd_i.cgs, 
-	sim/cr16/cmpw.cgs, sim/cr16/cmpw_i.cgs, sim/cr16/cmpi.cgs,
-	sim/cr16/excp.cgs, sim/cr16/hello.ms, sim/cr16/jal.cgs,
-	sim/cr16/jeq.cgs, sim/cr16/jcc.cgs, sim/cr16/jcs.cgs, sim/cr16/jfc.cgs,
-	sim/cr16/jfs.cgs sim/cr16/jge.cgs, sim/cr16/jgt.cgs, sim/cr16/jhi.cgs,
-	sim/cr16/jhs.cgs sim/cr16/jlo.cgs, sim/cr16/jls.cgs, sim/cr16/jlt.cgs,
-	sim/cr16/jne.cgs, sim/cr16/jump.cgs, sim/cr16/loadb.cgs,
-	sim/cr16/loadd.cgs, sim/cr16/loadw.cgs, sim/cr16/loadm.cgs, 
-	sim/cr16/loadmp.cgs, sim/cr16/lprd-sprd.cgs, sim/cr16/lpr-spr.cgs,
-	sim/cr16/macqw.cgs, sim/cr16/macsw.cgs, sim/cr16/macuw.cgs,
-	sim/cr16/movb.cgs, sim/cr16/movd.cgs, sim/cr16/movw.cgs,
-	sim/cr16/movxb.cgs, sim/cr16/movxw.cgs, sim/cr16/movzb.cgs, 
-	sim/cr16/movzw.cgs, sim/cr16/mulb.cgs, sim/cr16/mulsb.cgs,
-	sim/cr16/mulsw.cgs, sim/cr16/muluw.cgs, sim/cr16/mulw.cgs,
-	sim/cr16/orb.cgs, sim/cr16/ord.cgs, sim/cr16/orw.cgs,
-	sim/cr16/pop1.cgs, sim/cr16/pop2.cgs, sim/cr16/pop3.cgs,
-	sim/cr16/popret1.cgs, sim/cr16/popret2.cgs, sim/cr16/popret3.cgs,
-	sim/cr16/push1.cgs, sim/cr16/push2.cgs, sim/cr16/push3.cgs,
-	sim/cr16/nop.cgs, sim/cr16/ret.cgs, sim/cr16/scc.cgs, sim/cr16/scs.cgs,
-	sim/cr16/seq.cgs, sim/cr16/sfc.cgs, sim/cr16/sfs.cgs, sim/cr16/sge.cgs,
-	sim/cr16/sgt.cgs, sim/cr16/shi.cgs, sim/cr16/shs.cgs, sim/cr16/slo.cgs,
-	sim/cr16/sls.cgs, sim/cr16/slt.cgs, sim/cr16/sne.cgs,
-	sim/cr16/storb.cgs, sim/cr16/stord.cgs, sim/cr16/storw.cgs, 
-	sim/cr16/subb.cgs, sim/cr16/subd.cgs, sim/cr16/subi.cgs,
-	sim/cr16/subw.cgs, sim/cr16/xorb.cgs, sim/cr16/xord.cgs,
-	sim/cr16/xorw.cgs: New files: CR16 simulator tests.
-
-2008-02-05  DJ Delorie  <dj at redhat.com>
-
-	* sim/v850/: New directory.
-	* sim/v850/allinsns.exp: New.
-	* sim/v850/bsh.cgs: New.
-	* sim/v850/div.cgs: New.
-	* sim/v850/divh.cgs: New.
-	* sim/v850/divh_3.cgs: New.
-	* sim/v850/divhu.cgs: New.
-	* sim/v850/divu.cgs: New.
-	* sim/v850/sar.cgs: New.
-	* sim/v850/satadd.cgs: New.
-	* sim/v850/satsub.cgs: New.
-	* sim/v850/satsubi.cgs: New.
-	* sim/v850/satsubr.cgs: New.
-	* sim/v850/shl.cgs: New.
-	* sim/v850/shr.cgs: New.
-	* sim/v850/testutils.cgs: New.
-	* sim/v850/testutils.inc: New.
-
-2007-11-08  Hans-Peter Nilsson  <hp at axis.com>
-
-	* sim/cris/asm/x0-v10.ms, sim/cris/asm/x0-v32.ms: Tweak
-	stack-pointer match pattern for 4K host environment.
-
-2007-10-22  Edgar E. Iglesias <edgar at axis.com>
-	    Hans-Peter Nilsson  <hp at axis.com>
-
-	* sim/cris/asm/testutils.inc (test_move_cc): Add missing call to
-	test_cc.
-	* sim/cris/asm/asr.ms: Correct expected condition code flags.
-	* sim/cris/asm/boundr.ms: Ditto.
-	* sim/cris/asm/dstep.ms: Ditto.
-	* sim/cris/asm/lsr.ms: Ditto.
-	* sim/cris/asm/movecr.ms: Ditto.
-	* sim/cris/asm/mover.ms: Ditto.
-	* sim/cris/asm/neg.ms: Ditto.  Use test_cc, not test_move_cc.
-	* sim/cris/asm/op3.ms: Check the condition code flags after the insn
-	under test.
-	* sim/cris/asm/movecrt10.ms: Update expected number of simulated
-	cycles.
-	* sim/cris/asm/movecrt32.ms: Ditto.
-	* sim/cris/asm/jsr.ms: Don't use local label 8.
-	* sim/cris/asm/nonvcv32.ms: New test.
-
-2007-10-11  Jesper Nilsson  <jesper.nilsson at axis.com>
-
-	* sim/cris/c/freopen2.c: Added testcase.
-
-2006-10-02  Hans-Peter Nilsson  <hp at axis.com>
-	    Edgar E. Iglesias  <edgar at axis.com>
-
-	* sim/cris/c/clone5.c, sim/cris/c/mprotect1.c,
-	sim/cris/c/rtsigprocmask1.c, sim/cris/c/rtsigsuspend1.c,
-	sim/cris/c/sig7.c, sim/cris/c/sigreturn1.c,
-	sim/cris/c/sigreturn2.c, sim/cris/c/syscall1.c,
-	sim/cris/c/syscall2.c, sim/cris/c/sysctl2.c, sim/cris/c/fcntl1.c,
-	sim/cris/c/readlink2.c: Add code to print ENOSYS if syscall being
-	tested returns ENOSYS.  Add early exit where needed.  Change any
-	existing code to print "xyzzy", not "pass".
-	* sim/cris/asm/option3.ms, sim/cris/asm/option4.ms,
-	sim/cris/c/clone6.c, sim/cris/c/fcntl2.c,
-	sim/cris/c/mprotect2.c, sim/cris/c/readlink11.c,
-	sim/cris/c/rtsigprocmask2.c, sim/cris/c/rtsigsuspend2.c,
-	sim/cris/c/sig13.c, sim/cris/c/sigreturn3.c,
-	sim/cris/c/sigreturn4.c, sim/cris/c/syscall3.c,
-	sim/cris/c/syscall4.c, sim/cris/c/syscall5.c,
-	sim/cris/c/syscall6.c, sim/cris/c/syscall7.c,
-	sim/cris/c/syscall8.c, sim/cris/c/sysctl3.c: New tests.
-
-2006-09-30  Hans-Peter Nilsson  <hp at axis.com>
-
-        * sim/cris/c/pipe2.c: Adjust expected output.
-	(process): Don't write as much to the pipe as to trig the
-	inordinate-amount test in the sim pipe machinery.  Correct test of
-	write return-value; check only that pipemax bytes were
-	successfully written.  For error-case, emit strerror as well.
-	(main): Add a second read.
-	
-2006-04-08  Hans-Peter Nilsson  <hp at axis.com>
-
-	* sim/cris/hw/rv-n-cris/irq6.ms: New test.
-
-2006-04-03  Hans-Peter Nilsson  <hp at axis.com>
-
-	* sim/cris/hw: New directory for subdirectories with tests.
-	* sim/cris/hw/rv-n-cris: New directory with tests.
-
-2006-04-02  Hans-Peter Nilsson  <hp at axis.com>
-
-	* sim/cris/asm/testutils.inc (test_h_mem): Use register prefix.
-	(testr_h_dr, test_h_dr, ldmem_h_gr, mvr_h_mem): Ditto.  Correct
-	syntax.
-
-	* sim/cris/asm/x0-v10.ms, sim/cris/asm/x0-v32.ms: Widen regexp for
-	stack pointer values.
-
-2006-02-23  Hans-Peter Nilsson  <hp at axis.com>
-
-	* sim/cris/c/time2.c: New test.
-
-2006-01-10  Hans-Peter Nilsson  <hp at axis.com>
-
-	* sim/cris/asm/x1-v10.ms, sim/cris/asm/x3-v10.ms,
-	sim/cris/asm/x7-v10.ms: Update expected cycle output.
-
-2005-12-06  Hans-Peter Nilsson  <hp at axis.com>
-
-	* sim/cris/asm/movmp8.ms, sim/cris/asm/pcplus.ms: New tests.
-	* sim/cris/asm/movmp.ms: Do not write to P0, P4 or P8.
-	* sim/cris/asm/raw13.ms: Write to MOF instead of WZ (P4).
-
-2005-11-21  Hans-Peter Nilsson  <hp at axis.com>
-
-	* sim/cris: New directory with C and assembly tests for the CRIS
-	simulator.
-
 2005-01-11  Andrew Cagney  <cagney at localhost.localdomain>
 
 	* configure: Regenerated to track ../common/aclocal.m4 changes.
@@ -289,34 +76,6 @@
 
 	* lib/sim-defs.exp: Remove stray semicolons.
 
-2004-03-01  Richard Sandiford  <rsandifo at redhat.com>
-
-	* sim/frv/allinsn.exp (all_machs): Add fr405 and fr450.
-	* sim/fr400/allinsn.exp (all_machs): Likewise.
-	* sim/fr400/addss.cgs (mach): Change to "fr405 fr450".
-	* sim/fr400/scutss.cgs (mach): Likewise.
-	* sim/fr400/slass.cgs (mach): Likewise.
-	* sim/fr400/smass.cgs (mach): Likewise.
-	* sim/fr400/smsss.cgs (mach): Likewise.
-	* sim/fr400/smu.cgs (mach): Likewise.
-	* sim/fr400/subss.cgs (mach): Likewise.
-	* sim/interrupts/fp_exception.cgs: Replace fmadds with .word.
-	* sim/interrupts/fp_exception-fr550.cgs: Likewise.
-	* sim/frv/mqlclrhs.cgs: New test.
-	* sim/frv/mqlmths.cgs: New test.
-	* sim/frv/mqsllhi.cgs: New test.
-	* sim/frv/mqsrahi.cgs: New test.
-
-2004-03-01  Richard Sandiford  <rsandifo at redhat.com>
-
-	* sim/frv/fr400/scutss.cgs: Fix tests to account for rounding.
-	Add some new ones.
-
-2004-03-01  Richard Sandiford  <rsandifo at redhat.com>
-
-	* sim/frv/{rstb,rsth,rst,rstd,rstq}.cgs: Delete.
-	* sim/frv/{rstbf,rsthf,rstf,rstdf,rstqf}.cgs: Delete.
-
 2004-01-26  Chris Demetriou  <cgd at broadcom.com>
 
 	* sim/mips: New directory.  Tests for the MIPS simulator.
@@ -326,55 +85,6 @@
 	* lib/sim-defs.exp (run_sim_test): Delete the .o and .x files if a
 	test passes.
 
-2003-10-10  Dave Brolley  <brolley at redhat.com>
-
-	* sim/frv/testutils.inc (or_gr_immed): New macro.
-	* sim/frv/fp_exception-fr550.cgs: Write insns using
-	unaligned registers into the program in order to
-	cause the required exceptions.
-	* sim/frv/fp_exception.cgs: Ditto.
-	* sim/frv/regalign.cgs: Ditto.
-
-2003-10-06  Dave Brolley  <brolley at redhat.com>
-
-	* sim/frv/fr550: New subdirectory.
-	* sim/frv/fr400/*.cgs: Add fr550 as appropriate.
-	* sim/frv/fr500/*.cgs: Add fr550 as appropriate.
-	* sim/frv/interrupts/*.cgs: Add fr550 as appropriate.
-	* sim/frv/interrupts/*-fr550.cgs: New test cases for fr550.
-
-2003-09-19  Michael Snyder  <msnyder at redhat.com>
-
-	* sim/frv/nldqi.cgs: Remove.  This insn was never implemented
-	by Fujitsu.
-
-2003-09-19  Dave Brolley  <brolley at redhat.com>
-
-	* sim/frv/rstqf.cgs: Use nldq instead of nldqi.
-	* sim/frv/rstq.cgs: Use nldq instead of nldqi.
-
-2003-09-11  Michael Snyder  <msnyder at redhat.com>
-
-	* sim/testsuite/sim/frv/movgs.cgs: Change lcr to spr[273],
-	which according to the comments seems to be the intent.
-
-2003-09-09  Dave Brolley  <brolley at redhat.com>
-
-	* sim/frv/maddaccs.cgs: move to fr400 subdirectory.
-	* sim/frv/msubaccs.cgs: move to fr400 subdirectory.
-	* sim/frv/masaccs.cgs: move to fr400 subdirectory.
-
-2003-09-03  Michael Snyder  <msnyder at redhat.com>
-
-	* sim/frv/fr500/mclracc.cgs: Change mach to 'all', to be
-	consistent with other tests in the directory.
-
-2003-09-03  Michael Snyder  <msnyder at redhat.com>
-
-	* sim/frv/interrupts/Ipipe-fr400.cgs: New file.
-	* sim/frv/interrupts/Ipipe-fr500.cgs: New file.
-	* sim/frv/interrupts/Ipipe.cgs: Remove (replaced by above).
-
 2003-08-20  Michael Snyder  <msnyder at redhat.com>
             On behalf of Dave Brolley
   
@@ -389,98 +99,6 @@
 
 	* sim/h8300: New directory.  Tests for Renesas h8/300 family.
 
-2003-04-01  Nick Clifton  <nickc at redhat.com>
-
-	* sim/arm: New directory: Tests for ARM simulator.
-	* sim/arm/allinsn.exp: New file: Test script.
-	* sim/arm/testutils.inc: New file: Test macros.
-	* sim/arm/adc.cgs, sim/arm/add.cgs, sim/arm/and.cgs,
-	sim/arm/b.cgs, sim/arm/bic.cgs, sim/arm/bl.cgs, sim/arm/bx.cgs,
-	sim/arm/cmn.cgs, sim/arm/cmp.cgs, sim/arm/eor.cgs,
-	sim/arm/hello.ms, sim/arm/ldm.cgs, sim/arm/ldr.cgs,
-	sim/arm/ldrb.cgs, sim/arm/ldrh.cgs, sim/arm/ldrsb.cgs,
-	sim/arm/ldrsh.cgs, sim/arm/misaligned1.ms, sim/arm/misaligned2.ms,
-	sim/arm/misaligned3.ms, sim/arm/misc.exp, sim/arm/mla.cgs,
-	sim/arm/mov.cgs, sim/arm/mrs.cgs, sim/arm/msr.cgs,
-	sim/arm/mul.cgs, sim/arm/mvn.cgs, sim/arm/orr.cgs,
-	sim/arm/rsb.cgs, sim/arm/rsc.cgs, sim/arm/sbc.cgs,
-	sim/arm/smlal.cgs, sim/arm/smull.cgs, sim/arm/stm.cgs,
-	sim/arm/str.cgs, sim/arm/strb.cgs, sim/arm/strh.cgs,
-	sim/arm/sub.cgs, sim/arm/swi.cgs, sim/arm/swp.cgs,
-	sim/arm/swpb.cgs, sim/arm/teq.cgs,  sim/arm/tst.cgs,
-	sim/arm/umlal.cgs, sim/arm/umull.cgs: New files: ARM tests.
-	* sim/arm/iwmmxt: New Directory: Tests for iWMMXt.
-	* sim/arm/iwmmxt/iwmmxt.exp: New file: Test script.
-	* sim/arm/iwmmxt/testutils.inc: New file: Test macros.
-	* sim/arm/iwmmxt/tbcst.cgs, sim/arm/iwmmxt/textrm.cgs,
-	sim/arm/iwmmxt/tinsr.cgs, sim/arm/iwmmxt/tmia.cgs,
-	sim/arm/iwmmxt/tmiaph.cgs, sim/arm/iwmmxt/tmiaxy.cgs,
-	sim/arm/iwmmxt/tmovmsk.cgss, sim/arm/iwmmxt/wacc.cgs,
-	sim/arm/iwmmxt/wadd.cgs, sim/arm/iwmmxt/waligni.cgs,
-	sim/arm/iwmmxt/walignr.cgs, sim/arm/iwmmxt/wand.cgs,
-	sim/arm/iwmmxt/wandn.cgs, sim/arm/iwmmxt/wavg2.cgs,
-	sim/arm/iwmmxt/wcmpeq.cgs, sim/arm/iwmmxt/wcmpgt.cgs,
-	sim/arm/iwmmxt/wmac.cgs, sim/arm/iwmmxt/wmadd.cgs,
-	sim/arm/iwmmxt/wmax.cgs, sim/arm/iwmmxt/wmin.cgs,
-	sim/arm/iwmmxt/wmov.cgs, sim/arm/iwmmxt/wmul.cgs,
-	sim/arm/iwmmxt/wor.cgs, sim/arm/iwmmxt/wpack.cgs,
-	sim/arm/iwmmxt/wror.cgs, sim/arm/iwmmxt/wsad.cgs,
-	sim/arm/iwmmxt/wshufh.cgs, sim/arm/iwmmxt/wsll.cgs,
-	sim/arm/iwmmxt/wsra.cgs, sim/arm/iwmmxt/wsrl.cgs,
-	sim/arm/iwmmxt/wsub.cgs, sim/arm/iwmmxt/wunpckeh.cgs,
-	sim/arm/iwmmxt/wunpckel.cgs, sim/arm/iwmmxt/wunpckih.cgs,
-	sim/arm/iwmmxt/wunpckil.cgs, sim/arm/iwmmxt/wxor.cgs,
-	sim/arm/iwmmxt/wzero.cgs: New files: iWMMXt tests.
-	* sim/arm/thumb: New Directory: Thumb tests.
-	* sim/arm/thumb/allthumb.exp: New file: Test script.
-	* sim/arm/thumb/testutils.inc: New file: Test macros.
-	* sim/arm/thumb/adc.cgs, sim/arm/thumb/add-hd-hs.cgs,
-	sim/arm/thumb/add-hd-rs.cgs, sim/arm/thumb/add-rd-hs.cgs,
-	sim/arm/thumb/add-sp.cgs, sim/arm/thumb/add.cgs,
-	sim/arm/thumb/addi.cgs, sim/arm/thumb/addi8.cgs,
-	sim/arm/thumb/and.cgs, sim/arm/thumb/asr.cgs, sim/arm/thumb/b.cgs,
-	sim/arm/thumb/bcc.cgs, sim/arm/thumb/bcs.cgs,
-	sim/arm/thumb/beq.cgs, sim/arm/thumb/bge.cgs,
-	sim/arm/thumb/bgt.cgs, sim/arm/thumb/bhi.cgs,
-	sim/arm/thumb/bic.cgs, sim/arm/thumb/bl-hi.cgs,
-	sim/arm/thumb/bl-lo.cgs, sim/arm/thumb/ble.cgs,
-	sim/arm/thumb/bls.cgs, sim/arm/thumb/blt.cgs,
-	sim/arm/thumb/bmi.cgs, sim/arm/thumb/bne.cgs,
-	sim/arm/thumb/bpl.cgs, sim/arm/thumb/bvc.cgs,
-	sim/arm/thumb/bvs.cgs, sim/arm/thumb/bx-hs.cgs,
-	sim/arm/thumb/bx-rs.cgs, sim/arm/thumb/cmn.cgs,
-	sim/arm/thumb/cmp-hd-hs.cgs, sim/arm/thumb/cmp-hd-rs.cgs,
-	sim/arm/thumb/cmp-rd-hs.cgs, sim/arm/thumb/cmp.cgs,
-	sim/arm/thumb/eor.cgs, sim/arm/thumb/lda-pc.cgs,
-	sim/arm/thumb/lda-sp.cgs, sim/arm/thumb/ldmia.cgs,
-	sim/arm/thumb/ldr-imm.cgs, sim/arm/thumb/ldr-pc.cgs,
-	sim/arm/thumb/ldr-sprel.cgs, sim/arm/thumb/ldr.cgs,
-	sim/arm/thumb/ldrb-imm.cgs, sim/arm/thumb/ldrb.cgs,
-	sim/arm/thumb/ldrh-imm.cgs, sim/arm/thumb/ldrh.cgs,
-	sim/arm/thumb/ldsb.cgs, sim/arm/thumb/ldsh.cgs,
-	sim/arm/thumb/lsl.cgs, sim/arm/thumb/lsr.cgs,
-	sim/arm/thumb/mov-hd-hs.cgs, sim/arm/thumb/mov-hd-rs.cgs,
-	sim/arm/thumb/mov-rd-hs.cgs, sim/arm/thumb/mov.cgs,
-	sim/arm/thumb/mul.cgs, sim/arm/thumb/mvn.cgs,
-	sim/arm/thumb/neg.cgs, sim/arm/thumb/orr.cgs,
-	sim/arm/thumb/pop-pc.cgs, sim/arm/thumb/pop.cgs,
-	sim/arm/thumb/push-lr.cgs, sim/arm/thumb/push.cgs,
-	sim/arm/thumb/ror.cgs, sim/arm/thumb/sbc.cgs,
-	sim/arm/thumb/stmia.cgs, sim/arm/thumb/str-imm.cgs,
-	sim/arm/thumb/str-sprel.cgs, sim/arm/thumb/str.cgs,
-	sim/arm/thumb/strb-imm.cgs, sim/arm/thumb/strb.cgs,
-	sim/arm/thumb/strh-imm.cgs, sim/arm/thumb/strh.cgs,
-	sim/arm/thumb/sub-sp.cgs, sim/arm/thumb/sub.cgs,
-	sim/arm/thumb/subi.cgs, sim/arm/thumb/subi8.cgs,
-	sim/arm/thumb/swi.cgs, sim/arm/thumb/tst.cgs: New files: Thumb
-	tests.
-	* sim/arm/xscale: New directory.
-	* sim/arm/xscale/xscale.exp: New file: Test script.
-	* sim/arm/xscale/testutils.inc: New file: Test macros.
-	* sim/arm/xscale/blx.cgs, sim/arm/xscale/mia.cgs,
-	sim/arm/xscale/miaph.cgs, sim/arm/xscale/miaxy.cgs,
-	sim/arm/xscale/mra.cgs: New files: XScale tests.
-
 2002-06-16  Andrew Cagney  <ac131313 at redhat.com>
 
 	* configure: Regenerated to track ../common/aclocal.m4 changes.
@@ -519,18 +137,6 @@ Thu Sep  2 18:15:53 1999  Andrew Cagney  <cagney at b1.cygnus.com>
 	Delete locals AS,ASFLAGS,LD,LDFLAGS.  Use target_assemble
 	and target_link instead.
 
-1999-04-21  Doug Evans  <devans at casey.cygnus.com>
-
-	* sim/m32r/nop.cgs: Add missing nop insn.
-
-Mon Mar 22 13:28:56 1999  Dave Brolley  <brolley at cygnus.com>
-
-	* sim/fr30/stb.cgs: Correct for unaligned access.
-	* sim/fr30/sth.cgs: Correct for unaligned access.
-	* sim/fr30/ldub.cgs: Fix typo: lduh->ldub. Correct
-	for unaligned access.
-	* sim/fr30/and.cgs: Test unaligned access.
-
 Fri Feb  5 12:41:11 1999  Doug Evans  <devans at canuck.cygnus.com>
 
 	* lib/sim-defs.exp (sim_run): Print simulator arguments log message.
@@ -538,62 +144,6 @@ Fri Feb  5 12:41:11 1999  Doug Evans  <devans at canuck.cygnus.com>
 1999-01-05  Doug Evans  <devans at casey.cygnus.com>
 
 	* lib/sim-defs.exp (run_sim_test): New arg all_machs.
-	* sim/fr30/allinsn.exp: Update.
-	* sim/fr30/misc.exp: Update.
-	* sim/m32r/allinsn.exp: Update.
-	* sim/m32r/misc.exp: Update.
-
-Fri Dec 18 17:19:34 1998  Dave Brolley  <brolley at cygnus.com>
-
-	* sim/fr30/ldres.cgs: New testcase.
-	* sim/fr30/copld.cgs: New testcase.
-	* sim/fr30/copst.cgs: New testcase.
-	* sim/fr30/copsv.cgs: New testcase.
-	* sim/fr30/nop.cgs: New testcase.
-	* sim/fr30/andccr.cgs: New testcase.
-	* sim/fr30/orccr.cgs: New testcase.
-	* sim/fr30/addsp.cgs: New testcase.
-	* sim/fr30/stilm.cgs: New testcase.
-	* sim/fr30/extsb.cgs: New testcase.
-	* sim/fr30/extub.cgs: New testcase.
-	* sim/fr30/extsh.cgs: New testcase.
-	* sim/fr30/extuh.cgs: New testcase.
-	* sim/fr30/enter.cgs: New testcase.
-	* sim/fr30/leave.cgs: New testcase.
-	* sim/fr30/xchb.cgs: New testcase.
-	* sim/fr30/dmovb.cgs: New testcase.
-	* sim/fr30/dmov.cgs: New testcase.
-	* sim/fr30/dmovh.cgs: New testcase.
-
-Thu Dec 17 17:18:43 1998  Dave Brolley  <brolley at cygnus.com>
-
-	* sim/fr30/testutils.inc (take_branch{_d},no_branch{_d}): New macros.
-	* sim/fr30/ret.cgs: Add tests fir ret:d.
-	* sim/fr30/inte.cgs: New testcase.
-	* sim/fr30/reti.cgs: New testcase.
-	* sim/fr30/bra.cgs: New testcase.
-	* sim/fr30/bno.cgs: New testcase.
-	* sim/fr30/beq.cgs: New testcase.
-	* sim/fr30/bne.cgs: New testcase.
-	* sim/fr30/bc.cgs: New testcase.
-	* sim/fr30/bnc.cgs: New testcase.
-	* sim/fr30/bn.cgs: New testcase.
-	* sim/fr30/bp.cgs: New testcase.
-	* sim/fr30/bv.cgs: New testcase.
-	* sim/fr30/bnv.cgs: New testcase.
-	* sim/fr30/blt.cgs: New testcase.
-	* sim/fr30/bge.cgs: New testcase.
-	* sim/fr30/ble.cgs: New testcase.
-	* sim/fr30/bgt.cgs: New testcase.
-	* sim/fr30/bls.cgs: New testcase.
-	* sim/fr30/bhi.cgs: New testcase.
-
-Tue Dec 15 17:47:13 1998  Dave Brolley  <brolley at cygnus.com>
-
-	* sim/fr30/div.cgs (int): Add signed division scenario.
-	* sim/fr30/int.cgs (int): Complete testcase.
-	* sim/fr30/testutils.inc (_start): Initialize tbr.
-	(test_s_user,test_s_system,set_i,test_i): New macros.
 
 1998-12-14  Doug Evans  <devans at casey.cygnus.com>
 
@@ -601,60 +151,6 @@ Tue Dec 15 17:47:13 1998  Dave Brolley  <brolley at cygnus.com>
 	errors.  Translate \n sequences in expected output to newline char.
 	(slurp_options): Make parentheses optional.
 	(sim_run): Look for board_info sim,options.
-	* sim/fr30/hello.ms: Add trailing \n to expected output.
-	* sim/m32r/hello.ms: Ditto.
-	* sim/m32r/hw-trap.ms: Ditto.
-
-	* sim/m32r/trap.cgs: Properly align trap2_handler.
-
-	* sim/m32r/uread16.ms: New testcase.
-	* sim/m32r/uread32.ms: New testcase.
-	* sim/m32r/uwrite16.ms: New testcase.
-	* sim/m32r/uwrite32.ms: New testcase.
-
-1998-12-14  Dave Brolley  <brolley at cygnus.com>
-
-	* sim/fr30/call.cgs: Test ret here as well.
-	* sim/fr30/ld.cgs: Remove bogus comment.
-	* sim/fr30/testutils.inc (save_rp,restore_rp): New macros.
-	* sim/fr30/div.ms: New testcase.
-	* sim/fr30/st.cgs: New testcase.
-	* sim/fr30/sth.cgs: New testcase.
-	* sim/fr30/stb.cgs: New testcase.
-	* sim/fr30/mov.cgs: New testcase.
-	* sim/fr30/jmp.cgs: New testcase.
-	* sim/fr30/ret.cgs: New testcase.
-	* sim/fr30/int.cgs: New testcase.
-
-Thu Dec 10 18:46:25 1998  Dave Brolley  <brolley at cygnus.com>
-
-	* sim/fr30/div0s.cgs: New testcase.
-	* sim/fr30/div0u.cgs: New testcase.
-	* sim/fr30/div1.cgs: New testcase.
-	* sim/fr30/div2.cgs: New testcase.
-	* sim/fr30/div3.cgs: New testcase.
-	* sim/fr30/div4s.cgs: New testcase.
-	* sim/fr30/testutils.inc (mvi_h_dr,set_dbits,test_dbits): New Macros.
-
-Tue Dec  8 13:16:53 1998  Dave Brolley  <brolley at cygnus.com>
-
-	* sim/fr30/testutils.inc (set_s_user): Correct Mask.
-	(set_s_system): Correct Mask.
-	* sim/fr30/ld.cgs (ld): Move previously failing test back
-	into place.
-	* sim/fr30/ldm0.cgs: New testcase.
-	* sim/fr30/ldm1.cgs: New testcase.
-	* sim/fr30/stm0.cgs: New testcase.
-	* sim/fr30/stm1.cgs: New testcase.
-
-Thu Dec  3 14:20:03 1998  Dave Brolley  <brolley at cygnus.com>
-
-	* sim/fr30/ld.cgs: Implement more loads.
-	* sim/fr30/call.cgs: New testcase.
-	* sim/fr30/testutils.inc (testr_h_dr): New macro.
-	(set_s_user,set_s_system): New macros.
-
-	* sim/fr30: New Directory.
 
 Wed Nov 18 10:50:19 1998  Andrew Cagney  <cagney at b1.cygnus.com>
 
@@ -667,12 +163,6 @@ Fri Oct 30 00:37:31 1998  Felix Lee  <flee at cygnus.com>
 	* lib/sim-defs.exp (sim_run): download target program to remote
  	host, if necessary.  for unix-driven win32 testing.
 
-Tue Sep 15 14:56:22 1998  Doug Evans  <devans at canuck.cygnus.com>
-
-	* sim/m32r/testutils.inc (test_h_gr): Use mvaddr_h_gr.
-	* sim/m32r/rte.cgs: Test bbpc,bbpsw.
-	* sim/m32r/trap.cgs: Test bbpc,bbpsw.
-
 Fri Jul 31 17:49:13 1998  Felix Lee  <flee at cygnus.com>
 
 	* lib/sim-defs.exp (sim_run): remote_spawn, use writeto instead of
@@ -682,10 +172,6 @@ Fri Jul 24 09:40:34 1998  Doug Evans  <devans at canuck.cygnus.com>
 
 	* Makefile.in (clean,mostlyclean): Change leading spaces to a tab.
 
-Wed Jul  1 15:57:54 1998  Doug Evans  <devans at seba.cygnus.com>
-
-	* sim/m32r/hw-trap.ms: New testcase.
-
 Tue Jun 16 15:44:01 1998 Jillian Ye <jillian at cygnus.com>
 
 	* lib/sim-defs.exp: Print out timeout setting info when "-v" is used.
@@ -695,15 +181,6 @@ Thu Jun 11 15:24:53 1998  Doug Evans  <devans at canuck.cygnus.com>
 	* lib/sim-defs.exp (sim_run): Argument env_vals renamed to options,
 	which is now a list of options controlling the behaviour of sim_run.
 
-Wed Jun 10 10:53:20 1998  Doug Evans  <devans at seba.cygnus.com>
-
-	* sim/m32r/addx.cgs: Add another test.
-	* sim/m32r/jmp.cgs: Add another test.
-
-Mon Jun  8 16:08:27 1998  Doug Evans  <devans at canuck.cygnus.com>
-
-	* sim/m32r/trap.cgs: Test trap 2.
-
 Mon Jun  1 18:54:22 1998  Frank Ch. Eigler  <fche at cygnus.com>
 
 	* lib/sim-defs.exp (sim_run): Add possible environment variable
@@ -747,92 +224,14 @@ Tue Apr 21 10:49:03 1998  Doug Evans  <devans at canuck.cygnus.com>
 	* lib/sim-defs.exp (run_sim_test): Don't exit early if one mach fails,
 	try all machs.
 
-	* sim/m32r/addx.cgs: Test (-1)+(-1)+1.
-
-Fri Apr 17 16:00:52 1998  Doug Evans  <devans at canuck.cygnus.com>
-
-	* sim/m32r/mv[ft]achi.cgs: Fix expected result
-	(sign extension of top 8 bits).
-
 Wed Feb 25 11:01:17 1998  Doug Evans  <devans at canuck.cygnus.com>
 
 	* Makefile.in (RUNTEST): Fix path to runtest.
 
-Fri Feb 20 11:00:02 1998  Nick Clifton  <nickc at cygnus.com>
-
-	* sim/m32r/unlock.cgs: Fixed test.
-	* sim/m32r/mvfc.cgs: Fixed test.
-	* sim/m32r/remu.cgs: Fixed test.
-	* sim/m32r/bnc24.cgs: Test long BNC instruction.
-	* sim/m32r/bnc8.cgs: Test short BNC instruction.
-	* sim/m32r/ld-plus.cgs: Test LD instruction.
-	* sim/m32r/macwhi.cgs: Test MACWHI instruction.
-	* sim/m32r/macwlo.cgs: Test MACWLO instruction.
-	* sim/m32r/mulwhi.cgs: Test MULWHI instruction.
-	* sim/m32r/mulwlo.cgs: Test MULWLO instruction.
-	* sim/m32r/mvfachi.cgs: Test MVFACHI instruction.
-	* sim/m32r/mvfaclo.cgs: Test MVFACLO instruction.
-	* sim/m32r/mvtaclo.cgs: Test MVTACLO instruction.
-	* sim/m32r/addv.cgs: Test ADDV instruction.
-	* sim/m32r/addv3.cgs: Test ADDV3 instruction.
-	* sim/m32r/addx.cgs: Test ADDX instruction.
-	* sim/m32r/lock.cgs: Test LOCK instruction.
-	* sim/m32r/neg.cgs: Test NEG instruction.
-	* sim/m32r/not.cgs: Test NOT instruction.
-	* sim/m32r/unlock.cgs: Test UNLOCK instruction.
-
-Thu Feb 19 11:15:45 1998  Nick Clifton  <nickc at cygnus.com>
-
-	* sim/m32r/testutils.inc (mvaddr_h_gr): new macro to load an
-	address into a general register.
-
-	* sim/m32r/or3.cgs: Test OR3 instruction.
-	* sim/m32r/rach.cgs: Test RACH instruction.
-	* sim/m32r/rem.cgs: Test REM instruction.
-	* sim/m32r/sub.cgs: Test SUB instruction.
-	* sim/m32r/mv.cgs: Test MV instruction.
-	* sim/m32r/mul.cgs: Test MUL instruction.
-	* sim/m32r/bl24.cgs: Test long BL instruction.
-	* sim/m32r/bl8.cgs: Test short BL instruction.
-	* sim/m32r/blez.cgs: Test BLEZ instruction.
-	* sim/m32r/bltz.cgs: Test BLTZ instruction.
-	* sim/m32r/bne.cgs: Test BNE instruction.
-	* sim/m32r/bnez.cgs: Test BNEZ instruction.
-	* sim/m32r/bra24.cgs: Test long BRA instruction.
-	* sim/m32r/bra8.cgs: Test short BRA instruction.
-	* sim/m32r/jl.cgs: Test JL instruction.
-	* sim/m32r/or.cgs: Test OR instruction.
-	* sim/m32r/jmp.cgs: Test JMP instruction.
-	* sim/m32r/and.cgs: Test AND instruction.
-	* sim/m32r/and3.cgs: Test AND3 instruction.
-	* sim/m32r/beq.cgs: Test BEQ instruction.
-	* sim/m32r/beqz.cgs: Test BEQZ instruction.
-	* sim/m32r/bgez.cgs: Test BGEZ instruction.
-	* sim/m32r/bgtz.cgs: Test BGTZ instruction.
-	* sim/m32r/cmp.cgs: Test CMP instruction.
-	* sim/m32r/cmpi.cgs: Test CMPI instruction.
-	* sim/m32r/cmpu.cgs: Test CMPU instruction.
-	* sim/m32r/cmpui.cgs: Test CMPUI instruction.
-	* sim/m32r/div.cgs: Test DIV instruction.
-	* sim/m32r/divu.cgs: Test DIVU instruction.
-	* sim/m32r/cmpeq.cgs: Test CMPEQ instruction.
-	* sim/m32r/sll.cgs: Test SLL instruction.
-	* sim/m32r/sll3.cgs: Test SLL3 instruction.
-	* sim/m32r/slli.cgs: Test SLLI instruction.
-	* sim/m32r/sra.cgs: Test SRA instruction.
-	* sim/m32r/sra3.cgs: Test SRA3 instruction.
-	* sim/m32r/srai.cgs: Test SRAI instruction.
-	* sim/m32r/srl.cgs: Test SRL instruction.
-	* sim/m32r/srl3.cgs: Test SRL3 instruction.
-	* sim/m32r/srli.cgs: Test SRLI instruction.
-	* sim/m32r/xor3.cgs: Test XOR3 instruction.
-	* sim/m32r/xor.cgs: Test XOR instruction.
-
 Tue Feb 17 12:46:05 1998  Doug Evans  <devans at seba.cygnus.com>
 
 	* config/default.exp: New file.
 	* lib/sim-defs.exp: New file.
-	* sim/m32r/*: m32r dejagnu simulator testsuite.
 
 	* Makefile.in (build_alias): Define.
 	(arch): Define.
diff --git a/sim/testsuite/configure b/sim/testsuite/configure
index 88a0517..f03443b 100755
--- a/sim/testsuite/configure
+++ b/sim/testsuite/configure
@@ -1893,6 +1893,9 @@ case "${target}" in
        sim_arch=moxie
        sim_testsuite=yes
        ;;
+   rl78-*-*)
+       sim_arch=rl78
+       ;;
    rx-*-*)
        sim_arch=rx
        ;;
@@ -1904,7 +1907,7 @@ case "${target}" in
        sim_arch=sh
        sim_testsuite=yes
        ;;
-   sparc-*-rtems*|sparc-*-elf*)
+   sparc-*-rtems*|sparc-*-elf*|erc32*-*-*)
        sim_arch=erc32
        sim_testsuite=yes
        ;;
diff --git a/sim/testsuite/sim/arm/ChangeLog b/sim/testsuite/sim/arm/ChangeLog
new file mode 100644
index 0000000..6b909ba
--- /dev/null
+++ b/sim/testsuite/sim/arm/ChangeLog
@@ -0,0 +1,117 @@
+2011-07-01  Nick Clifton  <nickc at redhat.com>
+
+	PR sim/12737
+	* iwmmxt/wcmpgt.cgs: Remove expectation of failure.
+	* iwmmxt/wmac.cgs: Remove expectation of failure.
+	* iwmmxt/wsra.cgs: Remove expectation of failure.
+	* xscale/blx.cgs: Remove expectation of failure.
+
+2011-05-11  Joseph Myers  <joseph at codesourcery.com>
+	    Hans-Peter Nilsson  <hp at axis.com>
+
+	PR sim/12737
+	* iwmmxt/wcmpgt.cgs, iwmmxt/wmac.cgs,
+	iwmmxt/wsra.cgs, xscale/blx.cgs: Kfail.
+
+2011-05-04  Joseph Myers  <joseph at codesourcery.com>
+
+	* allinsn.exp (xscale*-*-*): Don't handle target.
+	* misc.exp (thumb*-*-*, xscale*-*-*): Don't handle
+	targets.
+	* iwmmxt/iwmmxt.exp: Test for arm*-*-* instead of
+	xscale*-*-*.
+	* thumb/allthumb.exp (thumb*-*-*): Don't handle target.
+	* xscale/xscale.exp: Test for arm*-*-* instead of
+	xscale*-*-*.
+
+2003-04-01  Nick Clifton  <nickc at redhat.com>
+
+	* .: New directory: Tests for ARM simulator.
+	* allinsn.exp: New file: Test script.
+	* testutils.inc: New file: Test macros.
+	* adc.cgs, add.cgs, and.cgs,
+	b.cgs, bic.cgs, bl.cgs, bx.cgs,
+	cmn.cgs, cmp.cgs, eor.cgs,
+	hello.ms, ldm.cgs, ldr.cgs,
+	ldrb.cgs, ldrh.cgs, ldrsb.cgs,
+	ldrsh.cgs, misaligned1.ms, misaligned2.ms,
+	misaligned3.ms, misc.exp, mla.cgs,
+	mov.cgs, mrs.cgs, msr.cgs,
+	mul.cgs, mvn.cgs, orr.cgs,
+	rsb.cgs, rsc.cgs, sbc.cgs,
+	smlal.cgs, smull.cgs, stm.cgs,
+	str.cgs, strb.cgs, strh.cgs,
+	sub.cgs, swi.cgs, swp.cgs,
+	swpb.cgs, teq.cgs,  tst.cgs,
+	umlal.cgs, umull.cgs: New files: ARM tests.
+	* iwmmxt: New Directory: Tests for iWMMXt.
+	* iwmmxt/iwmmxt.exp: New file: Test script.
+	* iwmmxt/testutils.inc: New file: Test macros.
+	* iwmmxt/tbcst.cgs, iwmmxt/textrm.cgs,
+	iwmmxt/tinsr.cgs, iwmmxt/tmia.cgs,
+	iwmmxt/tmiaph.cgs, iwmmxt/tmiaxy.cgs,
+	iwmmxt/tmovmsk.cgss, iwmmxt/wacc.cgs,
+	iwmmxt/wadd.cgs, iwmmxt/waligni.cgs,
+	iwmmxt/walignr.cgs, iwmmxt/wand.cgs,
+	iwmmxt/wandn.cgs, iwmmxt/wavg2.cgs,
+	iwmmxt/wcmpeq.cgs, iwmmxt/wcmpgt.cgs,
+	iwmmxt/wmac.cgs, iwmmxt/wmadd.cgs,
+	iwmmxt/wmax.cgs, iwmmxt/wmin.cgs,
+	iwmmxt/wmov.cgs, iwmmxt/wmul.cgs,
+	iwmmxt/wor.cgs, iwmmxt/wpack.cgs,
+	iwmmxt/wror.cgs, iwmmxt/wsad.cgs,
+	iwmmxt/wshufh.cgs, iwmmxt/wsll.cgs,
+	iwmmxt/wsra.cgs, iwmmxt/wsrl.cgs,
+	iwmmxt/wsub.cgs, iwmmxt/wunpckeh.cgs,
+	iwmmxt/wunpckel.cgs, iwmmxt/wunpckih.cgs,
+	iwmmxt/wunpckil.cgs, iwmmxt/wxor.cgs,
+	iwmmxt/wzero.cgs: New files: iWMMXt tests.
+	* thumb: New Directory: Thumb tests.
+	* thumb/allthumb.exp: New file: Test script.
+	* thumb/testutils.inc: New file: Test macros.
+	* thumb/adc.cgs, thumb/add-hd-hs.cgs,
+	thumb/add-hd-rs.cgs, thumb/add-rd-hs.cgs,
+	thumb/add-sp.cgs, thumb/add.cgs,
+	thumb/addi.cgs, thumb/addi8.cgs,
+	thumb/and.cgs, thumb/asr.cgs, thumb/b.cgs,
+	thumb/bcc.cgs, thumb/bcs.cgs,
+	thumb/beq.cgs, thumb/bge.cgs,
+	thumb/bgt.cgs, thumb/bhi.cgs,
+	thumb/bic.cgs, thumb/bl-hi.cgs,
+	thumb/bl-lo.cgs, thumb/ble.cgs,
+	thumb/bls.cgs, thumb/blt.cgs,
+	thumb/bmi.cgs, thumb/bne.cgs,
+	thumb/bpl.cgs, thumb/bvc.cgs,
+	thumb/bvs.cgs, thumb/bx-hs.cgs,
+	thumb/bx-rs.cgs, thumb/cmn.cgs,
+	thumb/cmp-hd-hs.cgs, thumb/cmp-hd-rs.cgs,
+	thumb/cmp-rd-hs.cgs, thumb/cmp.cgs,
+	thumb/eor.cgs, thumb/lda-pc.cgs,
+	thumb/lda-sp.cgs, thumb/ldmia.cgs,
+	thumb/ldr-imm.cgs, thumb/ldr-pc.cgs,
+	thumb/ldr-sprel.cgs, thumb/ldr.cgs,
+	thumb/ldrb-imm.cgs, thumb/ldrb.cgs,
+	thumb/ldrh-imm.cgs, thumb/ldrh.cgs,
+	thumb/ldsb.cgs, thumb/ldsh.cgs,
+	thumb/lsl.cgs, thumb/lsr.cgs,
+	thumb/mov-hd-hs.cgs, thumb/mov-hd-rs.cgs,
+	thumb/mov-rd-hs.cgs, thumb/mov.cgs,
+	thumb/mul.cgs, thumb/mvn.cgs,
+	thumb/neg.cgs, thumb/orr.cgs,
+	thumb/pop-pc.cgs, thumb/pop.cgs,
+	thumb/push-lr.cgs, thumb/push.cgs,
+	thumb/ror.cgs, thumb/sbc.cgs,
+	thumb/stmia.cgs, thumb/str-imm.cgs,
+	thumb/str-sprel.cgs, thumb/str.cgs,
+	thumb/strb-imm.cgs, thumb/strb.cgs,
+	thumb/strh-imm.cgs, thumb/strh.cgs,
+	thumb/sub-sp.cgs, thumb/sub.cgs,
+	thumb/subi.cgs, thumb/subi8.cgs,
+	thumb/swi.cgs, thumb/tst.cgs: New files: Thumb
+	tests.
+	* xscale: New directory.
+	* xscale/xscale.exp: New file: Test script.
+	* xscale/testutils.inc: New file: Test macros.
+	* xscale/blx.cgs, xscale/mia.cgs,
+	xscale/miaph.cgs, xscale/miaxy.cgs,
+	xscale/mra.cgs: New files: XScale tests.
diff --git a/sim/testsuite/sim/bfin/ChangeLog b/sim/testsuite/sim/bfin/ChangeLog
index 72c47e0..03a9844 100644
--- a/sim/testsuite/sim/bfin/ChangeLog
+++ b/sim/testsuite/sim/bfin/ChangeLog
@@ -1,3 +1,77 @@
+2012-04-09  Robin Getz  <robin.getz at analog.com>
+
+	* random_0017.S, random_0018.S, random_0025.S: New ASTAT shift tests.
+
+2012-04-09  Robin Getz  <robin.getz at analog.com>
+
+	* random_0036.S, random_0037.S: New astat tests.
+
+2012-04-09  Mike Frysinger  <vapier at gentoo.org>
+
+	* se_all64bitg1opcodes.S: Delete xfail line.
+	* se_all64bitg2opcodes.S: Likewise.
+
+2012-04-08  Mike Frysinger  <vapier at gentoo.org>
+
+	* se_all16bitopcodes.S (SE_ALL_BITS): Define to 16.
+	(SE_ALL_NEW_INSN_STUB): Define.
+	(se_all_load_table): Delete.
+	(se_all_new_insn_log): Likewise.
+	* se_all32bitopcodes.S: Add more details on slowness.
+	(SE_ALL_BITS): Define to 13.
+	(se_all_load_table): Delete.
+	(se_all_new_insn_stub, se_all_new_insn_log): Likewise.
+	* se_all64bitg0opcodes.S: Add more details on slowness.
+	(se_all_new_insn_stub): Delete.
+	* se_all64bitg1opcodes.S: See mach to bfin.
+	(se_all_new_insn_stub): Delete.
+	* se_all64bitg2opcodes.S: See mach to bfin.
+	(se_all_new_insn_stub): Delete.
+	* se_allopcodes.h (LOAD_PFX): Define based on SE_ALL_BITS.
+	(se_all_new_16bit_insn_log, se_all_new_32bit_insn_log): Unify
+	into new se_all_new_insn_log helper.
+	(se_all_load_table): New helper.
+	(se_all_new_insn_stub): Likewise.
+
+2012-03-25  Mike Frysinger  <vapier at gentoo.org>
+
+	* c_dsp32mac_dr_a1a0.s: Change 0x12efbc5569 to 0xefbc5569.
+	* c_dsp32mac_dr_a1a0_iutsh.s: Change 0x12efbc556 to 0x2efbc556.
+	* c_dsp32mac_dr_a1a0_m.s: Change 0x12efbc5569 to 0xefbc5569.
+	* c_dsp32shift_vmaxvmax.s: Change 0xa11002001 to 0x11002001.
+	* c_dsp32shiftim_af_s.s: Change 0x3a1230001 to 0xa1230001.
+
+	* fact.s: Comment out test with too large a number (6227020800).
+
+	* allinsn.exp: If preprocessing usp.S fails, set has_cpp to 0,
+	else set it to 1.  If compiling argc.c fails, set has_cc to 0,
+	else set it to 1.  When processing each src file, if has_ccp is
+	0 and the file ends in .S, skip it; if it has_cc is 0 and the
+	file ends in .c, skip it.
+
+2012-03-19  Mike Frysinger  <vapier at gentoo.org>
+
+	* se_all64bitg0opcodes.S, se_all64bitg1opcodes.S,
+	se_all64bitg2opcodes.S: New exhaustive parallel insn tests.
+
+2012-03-19  Mike Frysinger  <vapier at gentoo.org>
+
+	* se_allopcodes.h: New framework for testing opcode regions.
+	* se_all16bitopcodes.S: Convert over to se_allopcodes.h.
+	* se_all32bitopcodes.S: Likewise.
+
+2012-03-19  Stuart Henderson  <stuart.henderson at analog.com>
+
+	* c_dsp32shiftim_amix.s: Check edge cases in shift behavior.
+
+2012-03-19  Robin Getz  <robin.getz at analog.com>
+
+	* random_0014.S, random_0015.S, random_0016.S: New tests for shifts.
+
+2012-03-18  Mike Frysinger  <vapier at gentoo.org>
+
+	* se_all16bitopcodes.S: Merge code from se_all32bitopcodes.S.
+
 2011-09-28  Mike Frysinger  <vapier at gentoo.org>
 
 	* vit_max2.s: New tests for parallel VIT_MAX insns.
diff --git a/sim/testsuite/sim/bfin/allinsn.exp b/sim/testsuite/sim/bfin/allinsn.exp
index 49c868a..aa304ea 100644
--- a/sim/testsuite/sim/bfin/allinsn.exp
+++ b/sim/testsuite/sim/bfin/allinsn.exp
@@ -4,7 +4,35 @@ if [istarget bfin-*-elf] {
     # all machines
     set all_machs "bfin"
 
+    # See if we have a preprocessor available.
+    if { [target_compile $srcdir/$subdir/usp.S compilercheck.x "preprocess" \
+	  [list "incdir=$srcdir/$subdir"]] == "" } {
+	set has_cpp 1
+    } {
+	verbose -log "Can't execute preprocessor"
+	set has_cpp 0
+    }
+
+    # See if we have a compiler available.
+    if { [target_compile $srcdir/$subdir/argc.c compilercheck.x "executable" \
+	  [list "incdir=$srcdir/$subdir" "additional_flags=-msim"]] == "" } {
+	set has_cc 1
+    } {
+	verbose -log "Can't execute C compiler"
+	set has_cc 0
+    }
+
     foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.\[csS\]]] {
+	# If we don't have a compiler available, skip tests :(.
+	if { $has_cpp == 0 && [string match "*.S" $src] } {
+	    untested $src
+	    continue
+	}
+	if { $has_cc == 0 && [string match "*.c" $src] } {
+	    untested $src
+	    continue
+	}
+
 	# If we're only testing specific files and this isn't one of them,
 	# skip it.
 	if ![runtest_file_p $runtests $src] {
diff --git a/sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0.s b/sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0.s
index 700cbdf..e84f3d5 100644
--- a/sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0.s
+++ b/sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0.s
@@ -14,7 +14,7 @@
 	imm32 r1, 0xb2bcfec7;
 	imm32 r2, 0xc1348679;
 	imm32 r3, 0xd0049007;
-	imm32 r4, 0x12efbc5569;
+	imm32 r4, 0xefbc5569;
 	imm32 r5, 0xcd35560b;
 	imm32 r6, 0xe00c807d;
 	imm32 r7, 0xf78e9008;
diff --git a/sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0_iutsh.s b/sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0_iutsh.s
index 8d4232e..8f9e70c 100644
--- a/sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0_iutsh.s
+++ b/sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0_iutsh.s
@@ -14,7 +14,7 @@
 	imm32 r1, 0xb2bcfec7;
 	imm32 r2, 0xc1348679;
 	imm32 r3, 0xd0049007;
-	imm32 r4, 0x12efbc556;
+	imm32 r4, 0x2efbc556;
 	imm32 r5, 0xcd35560b;
 	imm32 r6, 0xe00c807d;
 	imm32 r7, 0xf78e9008;
diff --git a/sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0_m.s b/sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0_m.s
index 75fcc43..2b6f741 100644
--- a/sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0_m.s
+++ b/sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0_m.s
@@ -14,7 +14,7 @@
 	imm32 r1, 0xb2bcfec7;
 	imm32 r2, 0xc1348679;
 	imm32 r3, 0xd0049007;
-	imm32 r4, 0x12efbc5569;
+	imm32 r4, 0xefbc5569;
 	imm32 r5, 0xcd35560b;
 	imm32 r6, 0xe00c807d;
 	imm32 r7, 0xf78e9008;
diff --git a/sim/testsuite/sim/bfin/c_dsp32shift_vmaxvmax.s b/sim/testsuite/sim/bfin/c_dsp32shift_vmaxvmax.s
index 48e8d4b..0d4722a 100644
--- a/sim/testsuite/sim/bfin/c_dsp32shift_vmaxvmax.s
+++ b/sim/testsuite/sim/bfin/c_dsp32shift_vmaxvmax.s
@@ -33,7 +33,7 @@ CHECKREG r5, 0x71004300;
 CHECKREG r6, 0x81007100;
 CHECKREG r7, 0x19008100;
 
-imm32 r0, 0xa11002001;
+imm32 r0, 0x11002001;
 imm32 r1, 0xd2001001;
 imm32 r2, 0x14301302;
 imm32 r3, 0x43001003;
diff --git a/sim/testsuite/sim/bfin/c_dsp32shiftim_af_s.s b/sim/testsuite/sim/bfin/c_dsp32shiftim_af_s.s
index 748d8c9..5fdf02a 100644
--- a/sim/testsuite/sim/bfin/c_dsp32shiftim_af_s.s
+++ b/sim/testsuite/sim/bfin/c_dsp32shiftim_af_s.s
@@ -33,7 +33,7 @@ CHECKREG r5, 0x80000000;
 CHECKREG r6, 0x80000000;
 CHECKREG r7, 0x80000000;
 
-imm32 r0, 0x3a1230001;
+imm32 r0, 0xa1230001;
 imm32 r1, 0x1e345678;
 imm32 r2, 0x23f56789;
 imm32 r3, 0x34db789a;
diff --git a/sim/testsuite/sim/bfin/c_dsp32shiftim_amix.s b/sim/testsuite/sim/bfin/c_dsp32shiftim_amix.s
index 1bf9178..d1c0c20 100644
--- a/sim/testsuite/sim/bfin/c_dsp32shiftim_amix.s
+++ b/sim/testsuite/sim/bfin/c_dsp32shiftim_amix.s
@@ -114,6 +114,13 @@ R7 = R2 << 5 (S); /* r7 = 0x80000000 */
 CHECKREG r6, 0x80000000;
 CHECKREG r7, 0x80000000;
 
+imm32 r0, 0xFFFFFFF4;
+imm32 r2, 0xFFF00001;
+R6 = R0 << 31 (S); /* r6 = 0x80000000 */
+R7 = R2 << 31 (S); /* r7 = 0x80000000 */
+CHECKREG r6, 0x80000000;
+CHECKREG r7, 0x80000000;
+
 
 // Ashift : NEGATIVE data, count (-)=right (half reg) Working ok
 imm32 r0, 0x80f080f0;
diff --git a/sim/testsuite/sim/bfin/fact.s b/sim/testsuite/sim/bfin/fact.s
index 38e756c..aed8153 100644
--- a/sim/testsuite/sim/bfin/fact.s
+++ b/sim/testsuite/sim/bfin/fact.s
@@ -28,7 +28,11 @@ _test:
 	factorial 10 3628800
 	factorial 11 39916800
 	factorial 12 479001600
-	factorial 13 6227020800
+# This is the real answer, but it overflows 32bits.  Since gas itself
+# likes to choke on 64bit values when compiled for 32bit systems, just
+# specify the truncated 32bit value since that's what the Blackfin will
+# come up with too.
+#	factorial 13 6227020800
 	factorial 13 1932053504
 	pass
 
diff --git a/sim/testsuite/sim/bfin/random_0014.S b/sim/testsuite/sim/bfin/random_0014.S
new file mode 100644
index 0000000..c77b305
--- /dev/null
+++ b/sim/testsuite/sim/bfin/random_0014.S
@@ -0,0 +1,82 @@
+# Test a few corner cases with various shift insns
+# mach: bfin
+#include "test.h"
+.include "testutils.inc"
+
+	start
+
+	dmm32 ASTAT, (0x38404290 | _VS | _V | _AC1 | _AC0 | _V_COPY | _AC0_COPY | _AN);
+	dmm32 A0.w, 0xf53d356e;
+	dmm32 A0.x, 0xffffffff;
+	imm32 R5, 0xaa156b54;
+	A0 = ASHIFT A0 BY R5.L;
+	checkreg A0.w, 0x56e00000;
+	checkreg A0.x, 0xffffffd3;
+	checkreg ASTAT, (0x38404290 | _VS | _V | _AC1 | _AC0 | _V_COPY | _AC0_COPY | _AN);
+
+	dmm32 ASTAT, (0x28e00410 | _VS | _V | _AV1S | _AV1 | _AC1 | _V_COPY);
+	dmm32 A0.w, 0x1dfd2a85;
+	dmm32 A0.x, 0xffffffbe;
+	imm32 R2, 0x4b7cf707;
+	A0 = LSHIFT A0 BY R2.L;
+	checkreg A0.w, 0xfe954280;
+	checkreg A0.x, 0x0000000e;
+	checkreg ASTAT, (0x28e00410 | _VS | _V | _AV1S | _AV1 | _AC1 | _V_COPY);
+
+	dmm32 ASTAT, (0x60404e00 | _VS | _V | _AV1S | _AV0S | _AC0 | _AQ | _V_COPY | _AC0_COPY | _AN);
+	dmm32 A1.w, 0xd4aa6e10;
+	dmm32 A1.x, 0xffffffff;
+	imm32 R4, 0xb4bb3054;
+	A1 = ASHIFT A1 BY R4.L;
+	checkreg A1.w, 0xe1000000;
+	checkreg A1.x, 0xffffffa6;
+	checkreg ASTAT, (0x60404e00 | _VS | _V | _AV1S | _AV0S | _AC0 | _AQ | _V_COPY | _AC0_COPY | _AN);
+
+	dmm32 ASTAT, (0x00608810 | _V | _AV1S | _AV0S | _V_COPY | _AC0_COPY | _AN);
+	dmm32 A1.w, 0x0dbadb4f;
+	dmm32 A1.x, 0x00000035;
+	imm32 R3, 0x3cc3f7db;
+	A1 = LSHIFT A1 BY R3.L;
+	checkreg A1.w, 0x78000000;
+	checkreg A1.x, 0xffffffda;
+	checkreg ASTAT, (0x00608810 | _V | _AV1S | _AV0S | _V_COPY | _AC0_COPY | _AN);
+
+	dmm32 ASTAT, (0x14900e10 | _VS | _AC0 | _CC | _AC0_COPY);
+	imm32 R0, 0x6286ee56;
+	imm32 R7, 0x5cd969c5;
+	R0 = ASHIFT R0 BY R7.L;
+	checkreg R0, 0x50ddcac0;
+	checkreg ASTAT, (0x14900e10 | _VS | _V | _AC0 | _CC | _V_COPY | _AC0_COPY);
+
+	dmm32 ASTAT, (0x28904a90 | _VS | _V | _AV0S | _V_COPY | _AZ);
+	imm32 R0, 0x00000000;
+	imm32 R5, 0x00008000;
+	imm32 R6, 0x03488f9a;
+	R0.L = ASHIFT R5.L BY R6.L;
+	checkreg ASTAT, (0x28904a90 | _VS | _V | _AV0S | _V_COPY | _AZ);
+
+	dmm32 ASTAT, (0x3c10c890 | _VS | _AV1S | _AV0S | _AC0 | _AQ | _AC0_COPY);
+	imm32 R1, 0x29162006;
+	imm32 R3, 0xffff0345;
+	imm32 R4, 0x8ff5e6bb;
+	R1.H = ASHIFT R4.H BY R3.L;
+	checkreg R1, 0xfea02006;
+	checkreg ASTAT, (0x3c10c890 | _VS | _V | _AV1S | _AV0S | _AC0 | _AQ | _V_COPY | _AC0_COPY | _AN);
+
+	dmm32 ASTAT, (0x78600e00 | _VS | _AV1S | _AV0S | _AC0 | _AQ | _CC);
+	imm32 R0, 0xd5b1804d;
+	imm32 R1, 0x522c817d;
+	imm32 R5, 0xfca6f990;
+	R1.H = ASHIFT R5.H BY R0.L;
+	checkreg R1, 0xc000817d;
+	checkreg ASTAT, (0x78600e00 | _VS | _V | _AV1S | _AV0S | _AC0 | _AQ | _CC | _V_COPY | _AN);
+
+	dmm32 ASTAT, (0x64b04890 | _VS | _V | _AV0S | _AV0 | _AC1 | _AQ | _CC | _V_COPY | _AC0_COPY | _AN);
+	imm32 R4, 0x80000000;
+	imm32 R6, 0x4e840a3e;
+	imm32 R7, 0x20102e48;
+	R6.L = ASHIFT R4.H BY R7.L;
+	checkreg R6, 0x4e840000;
+	checkreg ASTAT, (0x64b04890 | _VS | _V | _AV0S | _AV0 | _AC1 | _AQ | _CC | _V_COPY | _AC0_COPY | _AZ);
+
+	pass
diff --git a/sim/testsuite/sim/bfin/random_0015.S b/sim/testsuite/sim/bfin/random_0015.S
new file mode 100644
index 0000000..60d6317
--- /dev/null
+++ b/sim/testsuite/sim/bfin/random_0015.S
@@ -0,0 +1,25 @@
+# mach: bfin
+#include "test.h"
+.include "testutils.inc"
+
+	start
+
+	dmm32 ASTAT, (0x5c70c410 | _VS | _V | _AV0S | _AV0 | _AC1 | _V_COPY | _AN);
+	dmm32 A1.w, 0xb7cc6ddd;
+	dmm32 A1.x, 0x00000004;
+	imm32 R3, 0x3f225ae3;
+	A1 = ASHIFT A1 BY R3.L;
+	checkreg A1.w, 0x00000025;
+	checkreg A1.x, 0x00000000;
+	checkreg ASTAT, (0x5c70c410 | _VS | _V | _AV0S | _AV0 | _AC1 | _V_COPY);
+
+	dmm32 ASTAT, (0x4810ca80 | _AV1S | _AV1 | _AV0S | _AV0 | _AC1 | _AC0 | _V_COPY | _AN);
+	dmm32 A1.w, 0x7396e11c;
+	dmm32 A1.x, 0xffffffba;
+	imm32 R3, 0x6e5f9f48;
+	A1 = ASHIFT A1 BY R3.L;
+	checkreg A1.w, 0x96e11c00;
+	checkreg A1.x, 0x00000073;
+	checkreg ASTAT, (0x4810ca80 | _AV1S | _AV0S | _AV0 | _AC1 | _AC0 | _V_COPY);
+
+	pass
diff --git a/sim/testsuite/sim/bfin/random_0016.S b/sim/testsuite/sim/bfin/random_0016.S
new file mode 100644
index 0000000..0b45074
--- /dev/null
+++ b/sim/testsuite/sim/bfin/random_0016.S
@@ -0,0 +1,26 @@
+# Test LSHIFT values and ASTAT flags
+# mach: bfin
+#include "test.h"
+.include "testutils.inc"
+
+	start
+
+	dmm32 ASTAT, (0x7ce00000 | _VS | _V | _AV0S | _AQ | _CC | _V_COPY | _AN);
+	dmm32 A0.w, 0xe1a3909e;
+	dmm32 A0.x, 0xffffffff;
+	imm32 R2, 0x214a26f6;
+	A0 = LSHIFT A0 BY R2.L;
+	checkreg A0.w, 0x3ff868e4;
+	checkreg A0.x, 0x00000000;
+	checkreg ASTAT, (0x7ce00000 | _VS | _V | _AV0S | _AQ | _CC | _V_COPY);
+
+	dmm32 ASTAT, (0x64008a00 | _AV1 | _AV0S | _AV0 | _AC0 | _AQ | _CC | _AN);
+	dmm32 A0.w, 0x72af1593;
+	dmm32 A0.x, 0xfffffffd;
+	imm32 R2, 0x6505b40c;
+	A0 = LSHIFT A0 BY R2.L;
+	checkreg A0.w, 0xf1593000;
+	checkreg A0.x, 0x0000002a;
+	checkreg ASTAT, (0x64008a00 | _AV1 | _AV0S | _AC0 | _AQ | _CC);
+
+	pass
diff --git a/sim/testsuite/sim/bfin/random_0017.S b/sim/testsuite/sim/bfin/random_0017.S
new file mode 100644
index 0000000..edfb650
--- /dev/null
+++ b/sim/testsuite/sim/bfin/random_0017.S
@@ -0,0 +1,23 @@
+# mach: bfin
+#include "test.h"
+.include "testutils.inc"
+
+	start
+
+	dmm32 ASTAT, (0x68000a10 | _VS | _V | _AV0S | _V_COPY | _AC0_COPY);
+	dmm32 A0.w, 0x2771851d;
+	dmm32 A0.x, 0xffffffc9;
+	A0 = A0 >>> 0x1b;
+	checkreg A0.w, 0xfffff924;
+	checkreg A0.x, 0xffffffff;
+	checkreg ASTAT, (0x68000a10 | _VS | _V | _AV0S | _V_COPY | _AC0_COPY | _AN);
+
+	dmm32 ASTAT, (0x74804c10 | _VS | _AC1 | _AC0 | _CC | _AN | _AZ);
+	dmm32 A1.w, 0xda2eb5c0;
+	dmm32 A1.x, 0xffffffff;
+	A1 = A1 >>> 0x11;
+	checkreg A1.w, 0xffffed17;
+	checkreg A1.x, 0xffffffff;
+	checkreg ASTAT, (0x74804c10 | _VS | _AC1 | _AC0 | _CC | _AN);
+
+	pass
diff --git a/sim/testsuite/sim/bfin/random_0018.S b/sim/testsuite/sim/bfin/random_0018.S
new file mode 100644
index 0000000..f6ec033
--- /dev/null
+++ b/sim/testsuite/sim/bfin/random_0018.S
@@ -0,0 +1,69 @@
+# mach: bfin
+#include "test.h"
+.include "testutils.inc"
+
+	start
+
+	dmm32 ASTAT, (0x40204090 | _AV1S | _AV0S | _AV0 | _AQ | _AN | _AZ);
+	imm32 R1, 0x33e91405;
+	imm32 R4, 0x3fa1377c;
+	R4.H = R1.H >>> 0x1d;
+	checkreg R4, 0x9f48377c;
+	checkreg ASTAT, (0x40204090 | _VS | _V | _AV1S | _AV0S | _AV0 | _AQ | _V_COPY | _AN);
+
+	dmm32 ASTAT, (0x64800010 | _VS | _AV1S | _AV0S | _AQ | _CC | _AC0_COPY);
+	imm32 R0, 0xf64722bc;
+	R0.L = R0.L >>> 0xd (S);
+	checkreg R0, 0xf6470001;
+	checkreg ASTAT, (0x64800010 | _VS | _AV1S | _AV0S | _AQ | _CC | _AC0_COPY);
+
+	dmm32 ASTAT, (0x70300e10 | _VS | _AQ | _AC0_COPY | _AN);
+	imm32 R5, 0x2a8771ff;
+	R5 = R5 >>> 0x1d (V);
+	checkreg R5, 0x54388ff8;
+	checkreg ASTAT, (0x70300e10 | _VS | _V | _AQ | _V_COPY | _AC0_COPY | _AN);
+
+	dmm32 ASTAT, (0x04600000 | _VS | _AV1S | _AC0 | _AQ | _CC | _AC0_COPY);
+	imm32 R6, 0x0c3a7fff;
+	imm32 R7, 0x03460f23;
+	R6.H = R7.L >>> 0x1f (S);
+	checkreg R6, 0x1e467fff;
+	checkreg ASTAT, (0x04600000 | _VS | _AV1S | _AC0 | _AQ | _CC | _AC0_COPY);
+
+	dmm32 ASTAT, (0x40704010 | _VS | _V | _AV1S | _AV0S | _AC0 | _CC | _V_COPY | _AC0_COPY | _AN);
+	imm32 R3, 0xfa2cee19;
+	imm32 R5, 0xfa2cee17;
+	R3.L = R5.H >>> 0xd (S);
+	checkreg R3, 0xfa2cffff;
+	checkreg ASTAT, (0x40704010 | _VS | _AV1S | _AV0S | _AC0 | _CC | _AC0_COPY | _AN);
+
+	dmm32 ASTAT, (0x20308c90 | _VS | _AV1S | _AV0S | _CC | _AN);
+	imm32 R2, 0xd4b70c2f;
+	imm32 R5, 0x0279838b;
+	R5.H = R2.H >>> 0x1f (S);
+	checkreg R5, 0xa96e838b;
+	checkreg ASTAT, (0x20308c90 | _VS | _AV1S | _AV0S | _CC | _AN);
+
+	dmm32 ASTAT, (0x10a08690 | _VS | _V | _AV0S | _AC1 | _AC0 | _AQ | _V_COPY | _AC0_COPY | _AN);
+	imm32 R4, 0x5cae64fc;
+	imm32 R6, 0x288e1461;
+	R4.H = R6.L >>> 0x1e (S);
+	checkreg R4, 0x518464fc;
+	checkreg ASTAT, (0x10a08690 | _VS | _AV0S | _AC1 | _AC0 | _AQ | _AC0_COPY);
+
+	dmm32 ASTAT, (0x48908010 | _VS | _AV1S | _AV0S | _AC1 | _AC0 | _AQ | _CC);
+	imm32 R1, 0x4f8f004a;
+	imm32 R5, 0x7fff70c1;
+	R5.L = R1.L >>> 0x1e (S);
+	checkreg R5, 0x7fff0128;
+	checkreg ASTAT, (0x48908010 | _VS | _AV1S | _AV0S | _AC1 | _AC0 | _AQ | _CC);
+
+	dmm32 ASTAT, (0x00f00490 | _VS | _AV0S | _AV0 | _AQ | _CC | _AC0_COPY | _AN);
+	dmm32 A0.w, 0x32b127c8;
+	dmm32 A0.x, 0x0000001a;
+	A0 = A0 >>> 0x6;
+	checkreg A0.w, 0x68cac49f;
+	checkreg A0.x, 0x00000000;
+	checkreg ASTAT, (0x00f00490 | _VS | _AV0S | _AQ | _CC | _AC0_COPY);
+
+	pass
diff --git a/sim/testsuite/sim/bfin/random_0025.S b/sim/testsuite/sim/bfin/random_0025.S
new file mode 100644
index 0000000..14cf049
--- /dev/null
+++ b/sim/testsuite/sim/bfin/random_0025.S
@@ -0,0 +1,681 @@
+# mach: bfin
+#include "test.h"
+.include "testutils.inc"
+
+	start
+
+	dmm32 ASTAT, (0x74f00490 | _VS | _V | _AQ | _CC | _V_COPY | _AC0_COPY | _AN);
+	imm32 R0, 0x10cfffff;
+	imm32 R6, 0x06a1ea20;
+	R0.H = R6.H >>> 0x1b;
+	checkreg R0, 0xd420ffff;
+	checkreg ASTAT, (0x74f00490 | _VS | _V | _AQ | _CC | _V_COPY | _AC0_COPY | _AN);
+
+	dmm32 ASTAT, (0x78704000 | _VS | _V | _AC0 | _V_COPY);
+	imm32 R3, 0x80007fff;
+	R3.L = R3.L >>> 0x1f;
+	checkreg R3, 0x8000fffe;
+	checkreg ASTAT, (0x78704000 | _VS | _V | _AC0 | _V_COPY | _AN);
+
+	dmm32 ASTAT, (0x5ce08c00 | _VS | _AV1S | _AQ | _CC | _AC0_COPY | _AN);
+	imm32 R3, 0xef9f04f4;
+	imm32 R6, 0x11037fff;
+	R3.L = R6.H >>> 0x1d;
+	checkreg R3, 0xef9f8818;
+	checkreg ASTAT, (0x5ce08c00 | _VS | _V | _AV1S | _AQ | _CC | _V_COPY | _AC0_COPY | _AN);
+
+	dmm32 ASTAT, (0x14904890 | _VS | _V | _AV1S | _AV0S | _AC1 | _AC0 | _AQ | _CC | _V_COPY | _AC0_COPY | _AN);
+	imm32 R2, 0x00af03a2;
+	imm32 R7, 0x0b470440;
+	R7.L = R2.L >>> 0x1a;
+	checkreg R7, 0x0b47e880;
+	checkreg ASTAT, (0x14904890 | _VS | _V | _AV1S | _AV0S | _AC1 | _AC0 | _AQ | _CC | _V_COPY | _AC0_COPY | _AN);
+
+	dmm32 ASTAT, (0x3040ca00 | _VS | _AV1S | _AV0S | _AC0 | _CC | _AN);
+	imm32 R1, 0x3bd8d8ef;
+	imm32 R7, 0x7b15ffff;
+	R1.H = R7.H >>> 0x1f;
+	checkreg R1, 0xf62ad8ef;
+	checkreg ASTAT, (0x3040ca00 | _VS | _V | _AV1S | _AV0S | _AC0 | _CC | _V_COPY | _AN);
+
+	dmm32 ASTAT, (0x68404600 | _VS | _V | _AV0S | _AV0 | _V_COPY | _AZ);
+	imm32 R0, 0xfffffffc;
+	imm32 R1, 0x7ffffffe;
+	R0.H = R1.H >>> 0x1f;
+	checkreg R0, 0xfffefffc;
+	checkreg ASTAT, (0x68404600 | _VS | _V | _AV0S | _AV0 | _V_COPY | _AN);
+
+	dmm32 ASTAT, (0x54108890 | _VS | _V | _AV1S | _AC0 | _AQ | _CC | _V_COPY | _AC0_COPY | _AN);
+	imm32 R1, 0x30b38b8d;
+	imm32 R3, 0x1c830bb1;
+	R1.H = R3.L >>> 0x1c;
+	checkreg R1, 0xbb108b8d;
+	checkreg ASTAT, (0x54108890 | _VS | _V | _AV1S | _AC0 | _AQ | _CC | _V_COPY | _AC0_COPY | _AN);
+
+	dmm32 ASTAT, (0x3cc00e80 | _VS | _AV1S | _AC0);
+	imm32 R6, 0x1b42549c;
+	R6.L = R6.L >>> 0x1f;
+	checkreg R6, 0x1b42a938;
+	checkreg ASTAT, (0x3cc00e80 | _VS | _V | _AV1S | _AC0 | _V_COPY | _AN);
+
+	dmm32 ASTAT, (0x1ca04490 | _VS | _V | _AV0S | _AC1 | _CC | _V_COPY);
+	imm32 R0, 0x0b040a99;
+	imm32 R6, 0x2716ffff;
+	R6.H = R0.L >>> 0x1c;
+	checkreg R6, 0xa990ffff;
+	checkreg ASTAT, (0x1ca04490 | _VS | _V | _AV0S | _AC1 | _CC | _V_COPY | _AN);
+
+	dmm32 ASTAT, (0x14800880 | _VS | _AC0 | _AN | _AZ);
+	imm32 R2, 0x7fff7fff;
+	imm32 R7, 0x0a014f10;
+	R7 = R2 >>> 0x1f (V);
+	checkreg R7, 0xfffefffe;
+	checkreg ASTAT, (0x14800880 | _VS | _V | _AC0 | _V_COPY | _AN);
+
+	dmm32 ASTAT, (0x04a08000 | _VS | _AV1S | _AV0S | _AC1 | _AC0 | _CC | _AC0_COPY | _AZ);
+	imm32 R7, 0x7fffffff;
+	R7 = R7 >>> 0x10 (V);
+	checkreg R7, 0x0000ffff;
+	checkreg ASTAT, (0x04a08000 | _VS | _AV1S | _AV0S | _AC1 | _AC0 | _CC | _AC0_COPY | _AN | _AZ);
+
+	dmm32 ASTAT, (0x4c204090 | _VS | _AC1 | _AC0 | _AQ | _AC0_COPY);
+	imm32 R2, 0x00030003;
+	imm32 R6, 0x2c962c96;
+	R6 = R2 >>> 0x10 (V);
+	checkreg R6, 0x00000000;
+	checkreg ASTAT, (0x4c204090 | _VS | _AC1 | _AC0 | _AQ | _AC0_COPY | _AZ);
+
+	dmm32 ASTAT, (0x14400e00 | _AV1S | _AV1 | _AV0S | _AV0 | _AC1 | _AQ | _AC0_COPY);
+	imm32 R0, 0x3a567ee8;
+	imm32 R4, 0x7e163337;
+	R0 = R4 >>> 0x10 (V);
+	checkreg R0, 0x00000000;
+	checkreg ASTAT, (0x14400e00 | _AV1S | _AV1 | _AV0S | _AV0 | _AC1 | _AQ | _AC0_COPY | _AZ);
+
+	dmm32 ASTAT, (0x30200a10 | _VS | _AN);
+	imm32 R2, 0xffff0f44;
+	R2 = R2 >>> 0x1c (V);
+	checkreg R2, 0xfff0f440;
+	checkreg ASTAT, (0x30200a10 | _VS | _V | _V_COPY | _AN);
+
+	dmm32 ASTAT, (0x10c0c080 | _VS | _V | _AV1S | _AV0S | _AC1 | _AC0 | _AQ | _CC | _V_COPY | _AC0_COPY | _AZ);
+	imm32 R1, 0x1d4571f3;
+	imm32 R2, 0x1d45ffff;
+	R2 = R1 >>> 0x10 (V);
+	checkreg R2, 0x00000000;
+	checkreg ASTAT, (0x10c0c080 | _VS | _AV1S | _AV0S | _AC1 | _AC0 | _AQ | _CC | _AC0_COPY | _AZ);
+
+	dmm32 ASTAT, (0x4cd08c90 | _VS | _AV1S | _AV0S | _CC);
+	imm32 R2, 0x8000ffff;
+	imm32 R3, 0x0f757fff;
+	R3 = R2 >>> 0x10 (V);
+	checkreg R3, 0xffffffff;
+	checkreg ASTAT, (0x4cd08c90 | _VS | _AV1S | _AV0S | _CC | _AN);
+
+	dmm32 ASTAT, (0x68004a00 | _VS | _AV0S | _AQ | _AN);
+	imm32 R6, 0x366a7fff;
+	imm32 R7, 0xe4ca366a;
+	R7 = R6 >>> 0x1f (V);
+	checkreg R7, 0x6cd4fffe;
+	checkreg ASTAT, (0x68004a00 | _VS | _V | _AV0S | _AQ | _V_COPY | _AN);
+
+	dmm32 ASTAT, (0x14c0ca80 | _VS | _AV1S | _AV0S | _AC0 | _AQ | _CC | _AC0_COPY);
+	imm32 R6, 0x3468e405;
+	imm32 R7, 0x0fd2ee59;
+	R7 = R6 >>> 0x10 (V);
+	checkreg R7, 0x0000ffff;
+	checkreg ASTAT, (0x14c0ca80 | _VS | _AV1S | _AV0S | _AC0 | _AQ | _CC | _AC0_COPY | _AN | _AZ);
+
+	dmm32 ASTAT, (0x1460cc90 | _VS | _V | _AV0S | _AV0 | _AC1 | _AC0 | _AQ | _CC | _V_COPY | _AC0_COPY | _AN | _AZ);
+	imm32 R3, 0x2b8ffe22;
+	imm32 R4, 0x2f17d9d2;
+	R4 = R3 >>> 0x1e (V);
+	checkreg R4, 0xae3cf888;
+	checkreg ASTAT, (0x1460cc90 | _VS | _V | _AV0S | _AV0 | _AC1 | _AC0 | _AQ | _CC | _V_COPY | _AC0_COPY | _AN);
+
+	dmm32 ASTAT, (0x30d04290 | _VS | _AC1 | _AQ | _CC);
+	imm32 R1, 0x3afe2bd0;
+	imm32 R4, 0x57e37450;
+	R4 = R1 >>> 0x10 (V);
+	checkreg R4, 0x00000000;
+	checkreg ASTAT, (0x30d04290 | _VS | _AC1 | _AQ | _CC | _AZ);
+
+	dmm32 ASTAT, (0x04600600 | _VS | _AV1S | _AV0S | _AC1 | _AC0 | _AN);
+	imm32 R0, 0xedbbfffe;
+	imm32 R4, 0x169330ac;
+	R0 = R4 >>> 0x1e (V);
+	checkreg R0, 0x5a4cc2b0;
+	checkreg ASTAT, (0x04600600 | _VS | _V | _AV1S | _AV0S | _AC1 | _AC0 | _V_COPY | _AN);
+
+	dmm32 ASTAT, (0x64c0c290 | _VS | _AV1 | _AV0S | _AV0 | _AC0 | _CC | _AN);
+	imm32 R1, 0x788b2d30;
+	imm32 R6, 0x78f61ce9;
+	R6 = R1 >>> 0x10 (V);
+	checkreg R6, 0x00000000;
+	checkreg ASTAT, (0x64c0c290 | _VS | _AV1 | _AV0S | _AV0 | _AC0 | _CC | _AZ);
+
+	dmm32 ASTAT, (0x74d04680 | _VS | _AV0S | _AC0 | _CC | _AC0_COPY);
+	imm32 R0, 0x0b7d1dc6;
+	imm32 R7, 0x3d27f3e5;
+	R7 = R0 >>> 0x10 (V);
+	checkreg R7, 0x00000000;
+	checkreg ASTAT, (0x74d04680 | _VS | _AV0S | _AC0 | _CC | _AC0_COPY | _AZ);
+
+	dmm32 ASTAT, (0x74900000 | _VS | _AV1S | _AV0S | _AC0 | _AQ | _CC);
+	imm32 R5, 0xffc70074;
+	imm32 R7, 0xf49916ce;
+	R5 = R7 >>> 0x10 (V);
+	checkreg R5, 0xffff0000;
+	checkreg ASTAT, (0x74900000 | _VS | _AV1S | _AV0S | _AC0 | _AQ | _CC | _AN | _AZ);
+
+	dmm32 ASTAT, (0x6ca0c400 | _VS | _AV0S | _AV0 | _AC0 | _AC0_COPY | _AN);
+	imm32 R0, 0x1e0287a7;
+	imm32 R4, 0x30aa2286;
+	R0 = R4 >>> 0x10 (V);
+	checkreg R0, 0x00000000;
+	checkreg ASTAT, (0x6ca0c400 | _VS | _AV0S | _AV0 | _AC0 | _AC0_COPY | _AZ);
+
+	dmm32 ASTAT, (0x10204a00 | _VS | _CC | _AN);
+	imm32 R5, 0xa6b04dd0;
+	imm32 R6, 0xfedb4cd8;
+	R5 = R6 >>> 0x1f (V);
+	checkreg R5, 0xfdb699b0;
+	checkreg ASTAT, (0x10204a00 | _VS | _V | _CC | _V_COPY | _AN);
+
+	dmm32 ASTAT, (0x30e04290 | _VS | _V | _AV1S | _AV0S | _AC1 | _V_COPY);
+	imm32 R2, 0x0c55766f;
+	imm32 R3, 0x28c00004;
+	R2 = R3 >>> 0x10 (V);
+	checkreg R2, 0x00000000;
+	checkreg ASTAT, (0x30e04290 | _VS | _AV1S | _AV0S | _AC1 | _AZ);
+
+	dmm32 ASTAT, (0x34b0c410 | _VS | _AQ | _CC);
+	imm32 R7, 0x0f7b2928;
+	R7 = R7 >>> 0x1e (V);
+	checkreg R7, 0x3deca4a0;
+	checkreg ASTAT, (0x34b0c410 | _VS | _V | _AQ | _CC | _V_COPY | _AN);
+
+	dmm32 ASTAT, (0x18504800 | _VS | _AV1S | _AC1 | _AC0_COPY);
+	imm32 R4, 0x0baad54f;
+	imm32 R7, 0x05bf0c50;
+	R4 = R7 >>> 0x10 (V);
+	checkreg R4, 0x00000000;
+	checkreg ASTAT, (0x18504800 | _VS | _AV1S | _AC1 | _AC0_COPY | _AZ);
+
+	dmm32 ASTAT, (0x2cd04290 | _VS | _V | _AV1S | _AV0S | _AV0 | _AC0 | _V_COPY | _AC0_COPY);
+	imm32 R0, 0x1199ca48;
+	imm32 R7, 0x4ee24366;
+	R7 = R0 >>> 0x10 (V);
+	checkreg R7, 0x0000ffff;
+	checkreg ASTAT, (0x2cd04290 | _VS | _AV1S | _AV0S | _AV0 | _AC0 | _AC0_COPY | _AN | _AZ);
+
+	dmm32 ASTAT, (0x24304c90 | _VS | _AV0S | _AC1 | _AC0 | _CC);
+	imm32 R3, 0x528af4b6;
+	imm32 R6, 0x18d26b4a;
+	R3 = R6 >>> 0x10 (V);
+	checkreg R3, 0x00000000;
+	checkreg ASTAT, (0x24304c90 | _VS | _AV0S | _AC1 | _AC0 | _CC | _AZ);
+
+	dmm32 ASTAT, (0x70504200 | _VS | _AV1S | _AV0S | _AC0 | _CC | _AC0_COPY | _AZ);
+	imm32 R1, 0x255f0000;
+	imm32 R4, 0x96e0e654;
+	imm32 R6, 0x255fd442;
+	R4 = ASHIFT R1 BY R6.L;
+	checkreg R4, 0x957c0000;
+	checkreg ASTAT, (0x70504200 | _VS | _V | _AV1S | _AV0S | _AC0 | _CC | _V_COPY | _AC0_COPY | _AN);
+
+	dmm32 ASTAT, (0x10004210 | _VS | _AV1S | _AC1 | _AQ);
+	dmm32 A1.w, 0x00000000;
+	dmm32 A1.x, 0x00000000;
+	imm32 R3, 0x13f865f4;
+	A1 = ASHIFT A1 BY R3.L;
+	checkreg ASTAT, (0x10004210 | _VS | _AV1S | _AC1 | _AQ | _AZ);
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0x00000000;
+	checkreg R3, 0x13f865f4;
+
+	dmm32 ASTAT, (0x1c90c400 | _VS | _AV0S | _AC1 | _AZ);
+	dmm32 A0.w, 0x00000000;
+	dmm32 A0.x, 0x00000000;
+	imm32 R3, 0x00000000;
+	A0 = ASHIFT A0 BY R3.L;
+	checkreg ASTAT, (0x1c90c400 | _VS | _AV0S | _AC1 | _AZ);
+	checkreg A0.w, 0x00000000;
+	checkreg A0.x, 0x00000000;
+	checkreg R3, 0x00000000;
+
+	dmm32 ASTAT, (0x4820c280 | _VS | _AV1S | _AV0S | _AC0 | _CC | _AN);
+	dmm32 A1.w, 0x00000001;
+	dmm32 A1.x, 0x00000000;
+	imm32 R3, 0x4a4a7fff;
+	A1 = LSHIFT A1 BY R3.L;
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0x00000000;
+	checkreg ASTAT, (0x4820c280 | _VS | _AV1S | _AV0S | _AC0 | _CC | _AZ);
+
+	dmm32 ASTAT, (0x1c20cc10 | _VS | _AC1 | _AN);
+	dmm32 A1.w, 0x00000000;
+	dmm32 A1.x, 0x00000000;
+	imm32 R0, 0x00000000;
+	A1 = LSHIFT A1 BY R0.L;
+	checkreg ASTAT, (0x1c20cc10 | _VS | _AC1 | _AZ);
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0x00000000;
+	checkreg R0, 0x00000000;
+
+	dmm32 ASTAT, (0x1c608e90 | _VS | _AV1S | _AV0S | _AV0 | _AC1 | _AC0 | _AC0_COPY | _AZ);
+	dmm32 A0.w, 0x00000000;
+	dmm32 A0.x, 0x00000000;
+	imm32 R4, 0x10cb0000;
+	A0 = ASHIFT A0 BY R4.L;
+	checkreg ASTAT, (0x1c608e90 | _VS | _AV1S | _AV0S | _AC1 | _AC0 | _AC0_COPY | _AZ);
+	checkreg A0.w, 0x00000000;
+	checkreg A0.x, 0x00000000;
+	checkreg R4, 0x10cb0000;
+
+	dmm32 ASTAT, (0x6870ce00 | _VS | _AC1 | _AC0_COPY | _AZ);
+	dmm32 A1.w, 0x00000000;
+	dmm32 A1.x, 0x00000000;
+	imm32 R4, 0x00000000;
+	A1 = LSHIFT A1 BY R4.L;
+	checkreg ASTAT, (0x6870ce00 | _VS | _AC1 | _AC0_COPY | _AZ);
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0x00000000;
+	checkreg R4, 0x00000000;
+
+	dmm32 ASTAT, (0x04200290 | _VS | _AV1S | _AV0S | _AC0 | _CC | _AZ);
+	dmm32 A0.w, 0x00000000;
+	dmm32 A0.x, 0x00000000;
+	imm32 R2, 0x00000000;
+	A0 = LSHIFT A0 BY R2.L;
+	checkreg ASTAT, (0x04200290 | _VS | _AV1S | _AV0S | _AC0 | _CC | _AZ);
+	checkreg A0.w, 0x00000000;
+	checkreg A0.x, 0x00000000;
+	checkreg R2, 0x00000000;
+
+	dmm32 ASTAT, (0x0c404e80 | _VS | _V | _V_COPY);
+	dmm32 A0.w, 0x00000000;
+	dmm32 A0.x, 0x00000000;
+	imm32 R7, 0xc400e200;
+	A0 = ASHIFT A0 BY R7.L;
+	checkreg ASTAT, (0x0c404e80 | _VS | _V | _V_COPY | _AZ);
+	checkreg A0.w, 0x00000000;
+	checkreg A0.x, 0x00000000;
+	checkreg R7, 0xc400e200;
+
+	dmm32 ASTAT, (0x04e00800 | _VS | _AV1S | _AV0S);
+	dmm32 A0.w, 0x00000000;
+	dmm32 A0.x, 0x00000000;
+	imm32 R0, 0xe603ffff;
+	A0 = LSHIFT A0 BY R0.L;
+	checkreg ASTAT, (0x04e00800 | _VS | _AV1S | _AV0S | _AZ);
+	checkreg A0.w, 0x00000000;
+	checkreg A0.x, 0x00000000;
+	checkreg R0, 0xe603ffff;
+
+	dmm32 ASTAT, (0x40904090 | _VS | _AV0S | _AC1 | _CC | _AZ);
+	dmm32 A1.w, 0x00000000;
+	dmm32 A1.x, 0x00000000;
+	imm32 R6, 0x00000000;
+	A1 = LSHIFT A1 BY R6.L;
+	checkreg ASTAT, (0x40904090 | _VS | _AV0S | _AC1 | _CC | _AZ);
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0x00000000;
+	checkreg R6, 0x00000000;
+
+	dmm32 ASTAT, (0x24f04c10 | _VS | _V | _AC1 | _V_COPY | _AC0_COPY | _AN);
+	dmm32 A0.w, 0x023d0ac0;
+	dmm32 A0.x, 0x00000000;
+	imm32 R2, 0xfffe05e0;
+	A0 = ASHIFT A0 BY R2.L;
+	checkreg A0.w, 0x00000000;
+	checkreg A0.x, 0x00000000;
+	checkreg ASTAT, (0x24f04c10 | _VS | _V | _AC1 | _V_COPY | _AC0_COPY | _AZ);
+
+	dmm32 ASTAT, (0x2860c410 | _VS | _AV1S | _AV0S | _AC1 | _AQ | _AC0_COPY);
+	dmm32 A1.w, 0x00000000;
+	dmm32 A1.x, 0x00000000;
+	imm32 R4, 0x00000000;
+	A1 = ASHIFT A1 BY R4.L;
+	checkreg ASTAT, (0x2860c410 | _VS | _AV1S | _AV0S | _AC1 | _AQ | _AC0_COPY | _AZ);
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0x00000000;
+	checkreg R4, 0x00000000;
+
+	dmm32 ASTAT, (0x40000a00 | _VS | _V | _AV0S | _AV0 | _AQ | _CC | _V_COPY | _AN);
+	imm32 R2, 0x4e59ffff;
+	imm32 R6, 0x2c450001;
+	R6 = ASHIFT R2 BY R6.L (V);
+	checkreg R6, 0x9cb2fffe;
+	checkreg ASTAT, (0x40000a00 | _VS | _V | _AV0S | _AV0 | _AQ | _CC | _V_COPY | _AN);
+
+	dmm32 ASTAT, (0x3c700410 | _VS | _V | _AV0S | _AV0 | _V_COPY | _AC0_COPY | _AZ);
+	dmm32 A0.w, 0x00000000;
+	dmm32 A0.x, 0x00000000;
+	imm32 R6, 0x0d1144c0;
+	A0 = LSHIFT A0 BY R6.L;
+	checkreg ASTAT, (0x3c700410 | _VS | _V | _AV0S | _V_COPY | _AC0_COPY | _AZ);
+	checkreg A0.w, 0x00000000;
+	checkreg A0.x, 0x00000000;
+	checkreg R6, 0x0d1144c0;
+
+	dmm32 ASTAT, (0x5c10ca80 | _VS | _AV1S | _AV0S | _AC0 | _CC | _AC0_COPY | _AN | _AZ);
+	dmm32 A1.w, 0x80000000;
+	dmm32 A1.x, 0x00000000;
+	imm32 R7, 0x472d2397;
+	A1 = LSHIFT A1 BY R7.L;
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0x00000000;
+	checkreg ASTAT, (0x5c10ca80 | _VS | _AV1S | _AV0S | _AC0 | _CC | _AC0_COPY | _AZ);
+
+	dmm32 ASTAT, (0x10004c00 | _VS | _AQ | _AZ);
+	dmm32 A1.w, 0x00000000;
+	dmm32 A1.x, 0x00000000;
+	imm32 R2, 0x80000000;
+	A1 = LSHIFT A1 BY R2.L;
+	checkreg ASTAT, (0x10004c00 | _VS | _AQ | _AZ);
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0x00000000;
+	checkreg R2, 0x80000000;
+
+	dmm32 ASTAT, (0x30308480 | _VS | _AV0S | _AQ);
+	dmm32 A0.w, 0x19b289d0;
+	dmm32 A0.x, 0x00000000;
+	imm32 R6, 0xffff0ce2;
+	A0 = LSHIFT A0 BY R6.L;
+	checkreg A0.w, 0x00000000;
+	checkreg A0.x, 0x00000000;
+	checkreg ASTAT, (0x30308480 | _VS | _AV0S | _AQ | _AZ);
+
+	dmm32 ASTAT, (0x28708280 | _VS | _AV1S | _AC1 | _AQ | _CC | _AC0_COPY);
+	dmm32 A0.w, 0x3f050000;
+	dmm32 A0.x, 0x00000000;
+	imm32 R6, 0xc0fb081a;
+	A0 = LSHIFT A0 BY R6.L;
+	checkreg A0.w, 0x00000000;
+	checkreg A0.x, 0x00000000;
+	checkreg ASTAT, (0x28708280 | _VS | _AV1S | _AC1 | _AQ | _CC | _AC0_COPY | _AZ);
+
+	dmm32 ASTAT, (0x18708280 | _VS | _AV1S | _AV0S | _AV0 | _AC1 | _AQ | _CC | _AN);
+	dmm32 A0.w, 0x00000000;
+	dmm32 A0.x, 0x00000000;
+	imm32 R3, 0xeca83337;
+	A0 = LSHIFT A0 BY R3.L;
+	checkreg ASTAT, (0x18708280 | _VS | _AV1S | _AV0S | _AC1 | _AQ | _CC | _AZ);
+	checkreg A0.w, 0x00000000;
+	checkreg A0.x, 0x00000000;
+	checkreg R3, 0xeca83337;
+
+	dmm32 ASTAT, (0x78b0c010 | _VS | _AV1S | _AC1 | _AC0 | _AN);
+	dmm32 A1.w, 0x00000000;
+	dmm32 A1.x, 0x00000000;
+	imm32 R5, 0x00000000;
+	A1 = ASHIFT A1 BY R5.L;
+	checkreg ASTAT, (0x78b0c010 | _VS | _AV1S | _AC1 | _AC0 | _AZ);
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0x00000000;
+	checkreg R5, 0x00000000;
+
+	dmm32 ASTAT, (0x50d00680 | _VS | _AV1S | _AV0S | _AC1 | _AQ);
+	dmm32 A1.w, 0x00000000;
+	dmm32 A1.x, 0x00000000;
+	imm32 R3, 0x05600000;
+	A1 = LSHIFT A1 BY R3.L;
+	checkreg ASTAT, (0x50d00680 | _VS | _AV1S | _AV0S | _AC1 | _AQ | _AZ);
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0x00000000;
+	checkreg R3, 0x05600000;
+
+	dmm32 ASTAT, (0x04108880 | _VS | _AV1S | _AV0S | _AC1 | _AC0 | _AQ | _CC);
+	dmm32 A0.w, 0x046b40e7;
+	dmm32 A0.x, 0x00000000;
+	imm32 R3, 0x20a220a2;
+	A0 = ASHIFT A0 BY R3.L;
+	checkreg A0.w, 0x00000000;
+	checkreg A0.x, 0x00000000;
+	checkreg ASTAT, (0x04108880 | _VS | _AV1S | _AV0S | _AC1 | _AC0 | _AQ | _CC | _AZ);
+
+	dmm32 ASTAT, (0x6850cc80 | _VS | _AV1S | _AV0S | _AV0 | _AC0_COPY | _AN);
+	dmm32 A0.w, 0x00000000;
+	dmm32 A0.x, 0x00000000;
+	imm32 R1, 0x623d1bad;
+	A0 = ASHIFT A0 BY R1.L;
+	checkreg ASTAT, (0x6850cc80 | _VS | _AV1S | _AV0S | _AC0_COPY | _AZ);
+	checkreg A0.w, 0x00000000;
+	checkreg A0.x, 0x00000000;
+	checkreg R1, 0x623d1bad;
+
+	dmm32 ASTAT, (0x44d04a80 | _VS | _AC1 | _AC0 | _AQ | _AC0_COPY | _AN);
+	dmm32 A1.w, 0x00000000;
+	dmm32 A1.x, 0x00000000;
+	imm32 R4, 0x211b1629;
+	A1 = LSHIFT A1 BY R4.L;
+	checkreg ASTAT, (0x44d04a80 | _VS | _AC1 | _AC0 | _AQ | _AC0_COPY | _AZ);
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0x00000000;
+	checkreg R4, 0x211b1629;
+
+	dmm32 ASTAT, (0x1c304480 | _VS | _AV1S | _AV0S | _AV0 | _AC1 | _AQ | _AZ);
+	dmm32 A0.w, 0x00000000;
+	dmm32 A0.x, 0x00000000;
+	imm32 R1, 0xffffa0e5;
+	A0 = ASHIFT A0 BY R1.L;
+	checkreg ASTAT, (0x1c304480 | _VS | _AV1S | _AV0S | _AC1 | _AQ | _AZ);
+	checkreg A0.w, 0x00000000;
+	checkreg A0.x, 0x00000000;
+	checkreg R1, 0xffffa0e5;
+
+	dmm32 ASTAT, (0x54c00c90 | _VS | _AV0S | _AC1 | _CC | _AZ);
+	dmm32 A1.w, 0x01cdbb21;
+	dmm32 A1.x, 0x00000000;
+	imm32 R7, 0x696f3de3;
+	A1 = ASHIFT A1 BY R7.L;
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0x00000000;
+	checkreg ASTAT, (0x54c00c90 | _VS | _AV0S | _AC1 | _CC | _AZ);
+
+	dmm32 ASTAT, (0x7c30c690 | _VS | _AV1S | _AV0S | _AC1 | _AC0_COPY | _AN);
+	dmm32 A1.w, 0x00007400;
+	dmm32 A1.x, 0x00000000;
+	imm32 R4, 0x6fc3cc21;
+	A1 = LSHIFT A1 BY R4.L;
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0x00000000;
+	checkreg ASTAT, (0x7c30c690 | _VS | _AV1S | _AV0S | _AC1 | _AC0_COPY | _AZ);
+
+	dmm32 ASTAT, (0x1c404200 | _VS | _AV1S | _AV0S | _AC0 | _CC | _AN);
+	imm32 R2, 0x1e000001;
+	imm32 R4, 0x037b7038;
+	imm32 R5, 0x57beffff;
+	R4.L = ASHIFT R5.H BY R2.L;
+	checkreg R4, 0x037baf7c;
+	checkreg ASTAT, (0x1c404200 | _VS | _V | _AV1S | _AV0S | _AC0 | _CC | _V_COPY | _AN);
+
+	dmm32 ASTAT, (0x24e08c80 | _VS | _AV1S | _CC);
+	dmm32 A0.w, 0x00000000;
+	dmm32 A0.x, 0x00000000;
+	imm32 R6, 0x11f23024;
+	A0 = LSHIFT A0 BY R6.L;
+	checkreg ASTAT, (0x24e08c80 | _VS | _AV1S | _CC | _AZ);
+	checkreg A0.w, 0x00000000;
+	checkreg A0.x, 0x00000000;
+	checkreg R6, 0x11f23024;
+
+	dmm32 ASTAT, (0x3ce04080 | _VS | _AV1S | _AV0S | _AC1 | _AC0 | _AQ | _CC | _AC0_COPY | _AZ);
+	dmm32 A0.w, 0x00000000;
+	dmm32 A0.x, 0x00000000;
+	imm32 R2, 0x00000000;
+	A0 = ASHIFT A0 BY R2.L;
+	checkreg ASTAT, (0x3ce04080 | _VS | _AV1S | _AV0S | _AC1 | _AC0 | _AQ | _CC | _AC0_COPY | _AZ);
+	checkreg A0.w, 0x00000000;
+	checkreg A0.x, 0x00000000;
+	checkreg R2, 0x00000000;
+
+	dmm32 ASTAT, (0x28800280 | _VS | _AV1S | _AV0S | _CC | _AZ);
+	dmm32 A0.w, 0x00000000;
+	dmm32 A0.x, 0x00000000;
+	imm32 R0, 0x00000000;
+	A0 = LSHIFT A0 BY R0.L;
+	checkreg A0.w, 0x00000000;
+	checkreg A0.x, 0x00000000;
+	checkreg ASTAT, (0x28800280 | _VS | _AV1S | _AV0S | _CC | _AZ);
+
+	dmm32 ASTAT, (0x68708810 | _VS | _V | _AV1S | _AV0S | _AV1 | _AV0 | _AC1 | _AQ | _V_COPY | _AC0_COPY | _AN);
+	dmm32 A1.w, 0x80000000;
+	dmm32 A1.x, 0xffffffea;
+	imm32 R2, 0x0121e8d9;
+	A1 = ASHIFT A1 BY R2.L;
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0x00000000;
+	checkreg ASTAT, (0x68708810 | _VS | _V | _AV1S | _AV0S | _AV0 | _AC1 | _AQ | _V_COPY | _AC0_COPY | _AZ);
+
+	dmm32 ASTAT, (0x24c00890 | _VS | _V | _AV1S | _AC1 | _AC0 | _AQ | _CC | _V_COPY | _AC0_COPY | _AZ);
+	dmm32 A1.w, 0x00000000;
+	dmm32 A1.x, 0x00000000;
+	imm32 R0, 0x1b9411f4;
+	A1 = LSHIFT A1 BY R0.L;
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0x00000000;
+	checkreg ASTAT, (0x24c00890 | _VS | _V | _AV1S | _AC1 | _AC0 | _AQ | _CC | _V_COPY | _AC0_COPY | _AZ);
+
+	dmm32 ASTAT, (0x4480ce00 | _VS | _AC1);
+	dmm32 A1.w, 0x00000000;
+	dmm32 A1.x, 0x00000000;
+	A1 = A1 << 0x5;
+	checkreg ASTAT, (0x4480ce00 | _VS | _AC1 | _AZ);
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0x00000000;
+
+	dmm32 ASTAT, (0x6cf0cc10 | _VS | _AC0 | _AQ | _CC | _AC0_COPY | _AN);
+	dmm32 A1.w, 0x00000000;
+	dmm32 A1.x, 0x00000000;
+	A1 = A1 >> 0x3b;
+	checkreg ASTAT, (0x6cf0cc10 | _VS | _AC0 | _AQ | _CC | _AC0_COPY | _AZ);
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0x00000000;
+
+	dmm32 ASTAT, (0x50d00a80 | _VS | _AV1S | _AV0S | _AC1 | _AN);
+	dmm32 A1.w, 0x028ab5f4;
+	dmm32 A1.x, 0x00000000;
+	A1 = A1 >> 0x1f;
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0x00000000;
+	checkreg ASTAT, (0x50d00a80 | _VS | _AV1S | _AV0S | _AC1 | _AZ);
+
+	dmm32 ASTAT, (0x14c00490 | _VS | _V | _AV1S | _AV0S | _AC1 | _CC | _V_COPY | _AC0_COPY);
+	dmm32 A1.w, 0x0001f0f0;
+	dmm32 A1.x, 0x00000000;
+	A1 = A1 >> 0x14;
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0x00000000;
+	checkreg ASTAT, (0x14c00490 | _VS | _V | _AV1S | _AV0S | _AC1 | _CC | _V_COPY | _AC0_COPY | _AZ);
+
+	dmm32 ASTAT, (0x14808a80 | _VS | _AV1S | _AV0S | _AC1 | _AN);
+	dmm32 A0.w, 0x000fc1a6;
+	dmm32 A0.x, 0x00000000;
+	A0 = A0 >> 0x1f;
+	checkreg A0.w, 0x00000000;
+	checkreg A0.x, 0x00000000;
+	checkreg ASTAT, (0x14808a80 | _VS | _AV1S | _AV0S | _AC1 | _AZ);
+
+	dmm32 ASTAT, (0x3c80ca90 | _VS | _AV0S | _AC0 | _AQ | _CC | _AZ);
+	dmm32 A1.w, 0x00000000;
+	dmm32 A1.x, 0x00000000;
+	A1 = A1 >>> 0x1e;
+	checkreg ASTAT, (0x3c80ca90 | _VS | _AV0S | _AC0 | _AQ | _CC | _AZ);
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0x00000000;
+
+	dmm32 ASTAT, (0x4c200c90 | _VS | _AV1S | _AV0S | _AV0 | _AC1 | _AQ);
+	imm32 R2, 0xf1815f1a;
+	imm32 R7, 0x0a917fff;
+	R7.L = R2.L >>> 0x13;
+	checkreg R7, 0x0a914000;
+	checkreg ASTAT, (0x4c200c90 | _VS | _V | _AV1S | _AV0S | _AV0 | _AC1 | _AQ | _V_COPY);
+
+	dmm32 ASTAT, (0x0cf0cc80 | _VS | _AV0S | _AC0_COPY | _AZ);
+	imm32 R0, 0x000081ad;
+	imm32 R2, 0x00000000;
+	R2.H = R0.L >>> 0x19;
+	checkreg R2, 0xd6800000;
+	checkreg ASTAT, (0x0cf0cc80 | _VS | _V | _AV0S | _V_COPY | _AC0_COPY | _AN);
+
+	dmm32 ASTAT, (0x04304c10 | _VS | _AV0S | _AC0 | _CC | _AC0_COPY | _AN);
+	imm32 R1, 0x33dd7fff;
+	imm32 R7, 0xae86a2f4;
+	R1 = R7 >>> 0x13 (V);
+	checkreg R1, 0xc0008000;
+	checkreg ASTAT, (0x04304c10 | _VS | _V | _AV0S | _AC0 | _CC | _V_COPY | _AC0_COPY | _AN);
+
+	dmm32 ASTAT, (0x7850c800 | _VS | _AV1S | _AV0S | _AC1 | _AC0 | _AN);
+	imm32 R4, 0x0000fffe;
+	imm32 R7, 0x5906fc4f;
+	R4.L = R7.H >>> 0x15;
+	checkreg R4, 0x00003000;
+	checkreg ASTAT, (0x7850c800 | _VS | _V | _AV1S | _AV0S | _AC1 | _AC0 | _V_COPY);
+
+	dmm32 ASTAT, (0x64804c90 | _VS | _AV1S | _AV0S | _AC0 | _CC | _AC0_COPY | _AN);
+	imm32 R1, 0x000009e3;
+	imm32 R4, 0x44418b70;
+	R1.H = R4.L >>> 0x17;
+	checkreg R1, 0xe00009e3;
+	checkreg ASTAT, (0x64804c90 | _VS | _V | _AV1S | _AV0S | _AC0 | _CC | _V_COPY | _AC0_COPY | _AN);
+
+	dmm32 ASTAT, (0x2c508410 | _VS | _AV1 | _AV0S | _AC0 | _AQ | _AC0_COPY | _AZ);
+	imm32 R0, 0x43d731e2;
+	imm32 R4, 0x60995f48;
+	R0.L = R4.H >>> 0x17;
+	checkreg R0, 0x43d73200;
+	checkreg ASTAT, (0x2c508410 | _VS | _V | _AV1 | _AV0S | _AC0 | _AQ | _V_COPY | _AC0_COPY);
+
+	dmm32 ASTAT, (0x0c900010 | _VS | _AV1S | _AV0S | _AC1 | _CC | _AN);
+	dmm32 A0.w, 0x00000000;
+	dmm32 A0.x, 0x00000000;
+	A0 = A0 >>> 0xc;
+	checkreg ASTAT, (0x0c900010 | _VS | _AV1S | _AV0S | _AC1 | _CC | _AZ);
+	checkreg A0.w, 0x00000000;
+	checkreg A0.x, 0x00000000;
+
+	dmm32 ASTAT, (0x40c00e80 | _VS | _AV1 | _AV0S | _CC | _AN | _AZ);
+	imm32 R1, 0x0bf14680;
+	imm32 R3, 0x1875266d;
+	R3.H = R1.L >>> 0x1d;
+	checkreg R3, 0x3400266d;
+	checkreg ASTAT, (0x40c00e80 | _VS | _V | _AV1 | _AV0S | _CC | _V_COPY);
+
+	dmm32 ASTAT, (0x78100a00 | _VS | _AV1S | _AV0S | _AC1 | _CC | _AC0_COPY | _AN);
+	imm32 R4, 0x67c0a470;
+	imm32 R7, 0x000026c0;
+	R4 = R7 >>> 0x1d (V);
+	checkreg R4, 0x00003600;
+	checkreg ASTAT, (0x78100a00 | _VS | _V | _AV1S | _AV0S | _AC1 | _CC | _V_COPY | _AC0_COPY | _AZ);
+
+	dmm32 ASTAT, (0x6cd04610 | _VS | _AV1S | _AV0S | _AC1 | _AC0 | _AQ | _CC | _AC0_COPY);
+	imm32 R0, 0x0f9535a6;
+	imm32 R5, 0x31018b62;
+	R0 = R5 >>> 0x12 (V);
+	checkreg R0, 0x40008000;
+	checkreg ASTAT, (0x6cd04610 | _VS | _V | _AV1S | _AV0S | _AC1 | _AC0 | _AQ | _CC | _V_COPY | _AC0_COPY | _AN);
+
+	dmm32 ASTAT, (0x58a08800 | _VS | _V | _AC1 | _AC0 | _CC | _V_COPY | _AC0_COPY | _AN);
+	imm32 R2, 0x023cffff;
+	imm32 R6, 0x0d6d8000;
+	R6.L = R2.H >>> 0x18;
+	checkreg R6, 0x0d6d3c00;
+	checkreg ASTAT, (0x58a08800 | _VS | _V | _AC1 | _AC0 | _CC | _V_COPY | _AC0_COPY);
+
+	dmm32 ASTAT, (0x5cc00600 | _VS | _V | _AV0S | _AC1 | _AC0 | _CC | _V_COPY | _AC0_COPY);
+	imm32 R2, 0xa9d7c2fd;
+	imm32 R4, 0xfffed266;
+	R2.L = R4.L >>> 0x12;
+	checkreg R2, 0xa9d78000;
+	checkreg ASTAT, (0x5cc00600 | _VS | _V | _AV0S | _AC1 | _AC0 | _CC | _V_COPY | _AC0_COPY | _AN);
+
+	dmm32 ASTAT, (0x5c900400 | _VS | _AV0S | _AC0 | _CC | _AC0_COPY | _AN);
+	imm32 R1, 0xf37e61a8;
+	imm32 R4, 0x5522a41c;
+	R4 = R1 >>> 0x12 (V);
+	checkreg R4, 0x80000000;
+	checkreg ASTAT, (0x5c900400 | _VS | _V | _AV0S | _AC0 | _CC | _V_COPY | _AC0_COPY | _AN | _AZ);
+
+	pass
diff --git a/sim/testsuite/sim/bfin/random_0036.S b/sim/testsuite/sim/bfin/random_0036.S
new file mode 100644
index 0000000..7e75da9
--- /dev/null
+++ b/sim/testsuite/sim/bfin/random_0036.S
@@ -0,0 +1,309 @@
+# mach: bfin
+#include "test.h"
+.include "testutils.inc"
+
+	start
+
+	dmm32 ASTAT, (0x3ce04490 | _VS | _AV1S | _AV0S | _AC1 | _AC0 | _AQ | _AC0_COPY);
+	dmm32 A0.w, 0x7d8d8272;
+	dmm32 A0.x, 0x00000000;
+	dmm32 A1.w, 0xe0004138;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R0, 0x7d8e7fff;
+	imm32 R2, 0xffff8001;
+	A1 -= R2.L * R0.L (M), A0 += R2.H * R0.L (FU);
+	checkreg A0.w, 0xfd8c0273;
+	checkreg A0.x, 0x00000000;
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg ASTAT, (0x3ce04490 | _VS | _AV1S | _AV1 | _AV0S | _AC1 | _AC0 | _AQ | _AC0_COPY);
+
+	dmm32 ASTAT, (0x70b0c800 | _VS | _V | _AV1S | _AV0S | _AC1 | _AC0 | _V_COPY | _AC0_COPY);
+	dmm32 A0.w, 0x53931540;
+	dmm32 A0.x, 0x00000000;
+	dmm32 A1.w, 0xf07795da;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R2, 0x8931da0a;
+	imm32 R4, 0xffff41eb;
+	imm32 R5, 0x7fff41eb;
+	A1 += R5.L * R4.H (M), R2 = (A0 -= R5.L * R4.H) (FU);
+	checkreg R2, 0x11a8572b;
+	checkreg A0.w, 0x11a8572b;
+	checkreg A0.x, 0x00000000;
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg ASTAT, (0x70b0c800 | _VS | _AV1S | _AV1 | _AV0S | _AC1 | _AC0 | _AC0_COPY);
+
+	dmm32 ASTAT, (0x58100410 | _VS | _V | _AV1S | _AC0 | _CC | _V_COPY | _AC0_COPY);
+	dmm32 A0.w, 0xaeba0d61;
+	dmm32 A0.x, 0x00000041;
+	dmm32 A1.w, 0xbb313d2f;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R4, 0x1ea2588d;
+	imm32 R7, 0xffffffff;
+	A1 += R4.L * R7.H (M), A0 += R4.L * R7.L (FU);
+	checkreg A0.w, 0x0746b4d4;
+	checkreg A0.x, 0x00000042;
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg ASTAT, (0x58100410 | _VS | _V | _AV1S | _AV1 | _AC0 | _CC | _V_COPY | _AC0_COPY);
+
+	dmm32 ASTAT, (0x58704200 | _VS | _AV1S | _AV0S);
+	dmm32 A0.w, 0xb7ab4854;
+	dmm32 A0.x, 0x00000000;
+	dmm32 A1.w, 0xe0002429;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R0, 0xb7ac8000;
+	imm32 R2, 0x80008001;
+	A1 -= R2.L * R0.L (M), A0 += R2.H * R0.L (FU);
+	checkreg A0.w, 0xf7ab4854;
+	checkreg A0.x, 0x00000000;
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg ASTAT, (0x58704200 | _VS | _AV1S | _AV1 | _AV0S);
+
+	dmm32 ASTAT, (0x38d0c800 | _VS | _AV1S | _AV0S);
+	dmm32 A0.w, 0xfffe0001;
+	dmm32 A0.x, 0x00000000;
+	dmm32 A1.w, 0xffff4001;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R0, 0xffffffff;
+	imm32 R2, 0xffffffff;
+	A1 -= R2.L * R0.L (M), A0 += R2.H * R0.L (FU);
+	checkreg A0.w, 0xfffc0002;
+	checkreg A0.x, 0x00000001;
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg ASTAT, (0x38d0c800 | _VS | _AV1S | _AV1 | _AV0S);
+
+	dmm32 ASTAT, (0x24e0ca80 | _VS | _V | _AV0S | _AC0 | _AQ | _V_COPY);
+	dmm32 A0.w, 0x0000000a;
+	dmm32 A0.x, 0x00000000;
+	dmm32 A1.w, 0xff5439dc;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R0, 0x3ea961c5;
+	imm32 R6, 0xffff0510;
+	A1 += R0.L * R6.H (M), A0 -= R0.H * R6.H (FU);
+	checkreg A0.w, 0x00000000;
+	checkreg A0.x, 0x00000000;
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg ASTAT, (0x24e0ca80 | _VS | _V | _AV1S | _AV1 | _AV0S | _AV0 | _AC0 | _AQ | _V_COPY);
+
+	dmm32 ASTAT, (0x7800cc80 | _VS | _AC1 | _AC0 | _CC | _AC0_COPY);
+	dmm32 A0.w, 0xfffe0001;
+	dmm32 A0.x, 0x00000000;
+	dmm32 A1.w, 0xffff4001;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R0, 0xffffffff;
+	imm32 R2, 0x0000ffff;
+	A1 -= R2.L * R0.L (M), A0 += R2.H * R0.L (FU);
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg ASTAT, (0x7800cc80 | _VS | _AV1S | _AV1 | _AC1 | _AC0 | _CC | _AC0_COPY);
+
+	dmm32 ASTAT, (0x50200800 | _VS | _AV1S | _AV0S | _AC1 | _AC0 | _AC0_COPY);
+	dmm32 A0.w, 0x6970968f;
+	dmm32 A0.x, 0x00000000;
+	dmm32 A1.w, 0xe0004b47;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R0, 0x69717fff;
+	imm32 R2, 0xffff8001;
+	A1 -= R2.L * R0.L (M), A0 += R2.H * R0.L (FU);
+	checkreg A0.w, 0xe96f1690;
+	checkreg A0.x, 0x00000000;
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg ASTAT, (0x50200800 | _VS | _AV1S | _AV1 | _AV0S | _AC1 | _AC0 | _AC0_COPY);
+
+	dmm32 ASTAT, (0x34704080 | _VS | _AV1S | _AV1 | _AV0S | _AQ | _CC | _AC0_COPY);
+	dmm32 A0.w, 0x0839a708;
+	dmm32 A0.x, 0xffffff80;
+	dmm32 A1.w, 0xffffffff;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R0, 0x0c8c109a;
+	imm32 R2, 0x109a0c8c;
+	imm32 R5, 0x006dd6ac;
+	A1 -= R5.L * R0.L (M), R2.L = (A0 += R5.H * R0.L) (FU);
+	checkreg R2, 0x109affff;
+	checkreg A0.w, 0x0840b89a;
+	checkreg A0.x, 0xffffff80;
+	checkreg ASTAT, (0x34704080 | _VS | _V | _AV1S | _AV1 | _AV0S | _AQ | _CC | _V_COPY | _AC0_COPY);
+
+	dmm32 ASTAT, (0x78108090 | _VS | _AV1S | _AV0S | _AC0 | _AQ | _AC0_COPY);
+	dmm32 A0.w, 0x21edde12;
+	dmm32 A0.x, 0x00000000;
+	dmm32 A1.w, 0xe0006f08;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R0, 0x21ee7fff;
+	imm32 R2, 0xffff8001;
+	A1 -= R2.L * R0.L (M), A0 += R2.H * R0.L (FU);
+	checkreg A0.w, 0xa1ec5e13;
+	checkreg A0.x, 0x00000000;
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg ASTAT, (0x78108090 | _VS | _AV1S | _AV1 | _AV0S | _AC0 | _AQ | _AC0_COPY);
+
+	dmm32 ASTAT, (0x50b08a10 | _VS | _V | _AV1S | _AV0S | _AC1 | _AC0 | _V_COPY | _AC0_COPY);
+	dmm32 A0.w, 0x00000007;
+	dmm32 A0.x, 0x00000000;
+	dmm32 A1.w, 0xf8b109fc;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R0, 0x27827703;
+	imm32 R6, 0xffff03ca;
+	A1 += R0.L * R6.H (M), A0 -= R0.H * R6.H (FU);
+	checkreg A0.w, 0x00000000;
+	checkreg A0.x, 0x00000000;
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg ASTAT, (0x50b08a10 | _VS | _V | _AV1S | _AV1 | _AV0S | _AV0 | _AC1 | _AC0 | _V_COPY | _AC0_COPY);
+
+	dmm32 ASTAT, (0x34e0c800 | _VS | _V | _AV1S | _AV0S | _AQ | _V_COPY);
+	dmm32 A0.w, 0xffffffff;
+	dmm32 A0.x, 0xffffffff;
+	dmm32 A1.w, 0xefc2be42;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R0, 0x53574850;
+	imm32 R6, 0xffff1400;
+	A1 += R0.L * R6.H (M), A0 -= R0.H * R6.H (FU);
+	checkreg A0.w, 0xaca95356;
+	checkreg A0.x, 0xffffffff;
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg ASTAT, (0x34e0c800 | _VS | _V | _AV1S | _AV1 | _AV0S | _AQ | _V_COPY);
+
+	dmm32 ASTAT, (0x24608c80 | _VS | _AV1S | _AV0S | _AC0 | _AQ | _AC0_COPY);
+	dmm32 A0.w, 0x0f03f0fc;
+	dmm32 A0.x, 0x00000000;
+	dmm32 A1.w, 0xe000787d;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R0, 0x0f04ffff;
+	imm32 R2, 0xffff8001;
+	A1 -= R2.L * R0.L (M), A0 += R2.H * R0.L (FU);
+	checkreg A0.w, 0x0f01f0fd;
+	checkreg A0.x, 0x00000001;
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg ASTAT, (0x24608c80 | _VS | _AV1S | _AV1 | _AV0S | _AC0 | _AQ | _AC0_COPY);
+
+	dmm32 ASTAT, (0x58404690 | _VS | _AV0S | _AC0 | _AQ | _CC | _AC0_COPY);
+	dmm32 A0.w, 0x1e65e19a;
+	dmm32 A0.x, 0x00000000;
+	dmm32 A1.w, 0xe00070cc;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R0, 0x1e66ffff;
+	imm32 R2, 0xffff8001;
+	A1 -= R2.L * R0.L (M), A0 += R2.H * R0.L (FU);
+	checkreg A0.w, 0x1e63e19b;
+	checkreg A0.x, 0x00000001;
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg ASTAT, (0x58404690 | _VS | _AV1S | _AV1 | _AV0S | _AC0 | _AQ | _CC | _AC0_COPY);
+
+	dmm32 ASTAT, (0x08004a10 | _VS | _AV1S | _AV1 | _AC0 | _CC | _AC0_COPY);
+	dmm32 A1.w, 0xffffffff;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R0, 0x293a8000;
+	imm32 R3, 0xd0e6382b;
+	A1 += R3.L * R0.H (M, FU);
+	checkreg ASTAT, (0x08004a10 | _VS | _AV1S | _AV1 | _AC0 | _CC | _AC0_COPY);
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg R0, 0x293a8000;
+	checkreg R3, 0xd0e6382b;
+
+	dmm32 ASTAT, (0x28e00e00 | _VS | _AV1S | _AV0S | _AC0 | _AQ | _AC0_COPY);
+	dmm32 A0.w, 0xfffe0001;
+	dmm32 A0.x, 0x00000000;
+	dmm32 A1.w, 0xffff4001;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R0, 0xffffffff;
+	imm32 R2, 0x0000ffff;
+	A1 -= R2.L * R0.L (M), A0 += R2.H * R0.L (FU);
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg ASTAT, (0x28e00e00 | _VS | _AV1S | _AV1 | _AV0S | _AC0 | _AQ | _AC0_COPY);
+
+	dmm32 ASTAT, (0x14004690 | _VS | _AV1S | _AV1 | _AV0S | _AC1 | _AC0 | _AQ | _AC0_COPY | _AN);
+	dmm32 A1.w, 0xffffffff;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R0, 0x369a8000;
+	imm32 R3, 0xf023457e;
+	A1 += R3.L * R0.H (M, FU);
+	checkreg ASTAT, (0x14004690 | _VS | _AV1S | _AV1 | _AV0S | _AC1 | _AC0 | _AQ | _AC0_COPY | _AN);
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg R0, 0x369a8000;
+	checkreg R3, 0xf023457e;
+
+	dmm32 ASTAT, (0x5c600680 | _VS | _AV1S | _AQ | _CC);
+	dmm32 A0.w, 0xfffe0001;
+	dmm32 A0.x, 0x00000000;
+	dmm32 A1.w, 0xffff4001;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R0, 0xffffffff;
+	imm32 R2, 0xffffffff;
+	A1 -= R2.L * R0.L (M), A0 += R2.H * R0.L (FU);
+	checkreg A0.w, 0xfffc0002;
+	checkreg A0.x, 0x00000001;
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg ASTAT, (0x5c600680 | _VS | _AV1S | _AV1 | _AQ | _CC);
+
+	dmm32 ASTAT, (0x7cd00800 | _VS | _AV1S | _AV0S | _AC1 | _AC0 | _AC0_COPY);
+	dmm32 A0.w, 0xfffe0001;
+	dmm32 A0.x, 0x00000000;
+	dmm32 A1.w, 0xffff4001;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R0, 0xffffffff;
+	imm32 R2, 0x0000ffff;
+	A1 -= R2.L * R0.L (M), A0 += R2.H * R0.L (FU);
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg ASTAT, (0x7cd00800 | _VS | _AV1S | _AV1 | _AV0S | _AC1 | _AC0 | _AC0_COPY);
+
+	dmm32 ASTAT, (0x78e0cc10 | _VS | _AV1S | _AV0S | _AC1);
+	dmm32 A0.w, 0xfffe0001;
+	dmm32 A0.x, 0x00000000;
+	dmm32 A1.w, 0xffff4001;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R0, 0xffffffff;
+	imm32 R2, 0xffffffff;
+	A1 -= R2.L * R0.L (M), A0 += R2.H * R0.L (FU);
+	checkreg A0.w, 0xfffc0002;
+	checkreg A0.x, 0x00000001;
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg ASTAT, (0x78e0cc10 | _VS | _AV1S | _AV1 | _AV0S | _AC1);
+
+	dmm32 ASTAT, (0x1cd04c80 | _VS | _V | _AV0S | _AC1 | _V_COPY | _AC0_COPY);
+	dmm32 A0.w, 0x00000015;
+	dmm32 A0.x, 0x00000000;
+	dmm32 A1.w, 0xfeeaa91d;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R0, 0x50246875;
+	imm32 R6, 0xffff0aab;
+	A1 += R0.L * R6.H (M), A0 -= R0.H * R6.H (FU);
+	checkreg A0.w, 0x00000000;
+	checkreg A0.x, 0x00000000;
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg ASTAT, (0x1cd04c80 | _VS | _V | _AV1S | _AV1 | _AV0S | _AV0 | _AC1 | _V_COPY | _AC0_COPY);
+
+	dmm32 ASTAT, (0x18304890 | _VS | _AV1S | _AV0S | _AC0 | _AQ | _CC | _AC0_COPY);
+	dmm32 A0.w, 0xfffffffe;
+	dmm32 A0.x, 0xffffffff;
+	dmm32 A1.w, 0xffffca85;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R0, 0xffffffff;
+	imm32 R3, 0xffffdc58;
+	imm32 R7, 0xffff950a;
+	A1 -= R7.L * R0.H (M), R3.L = (A0 -= R7.L * R0.H) (FU);
+	checkreg R3, 0xffffffff;
+	checkreg A0.w, 0x6af69508;
+	checkreg A0.x, 0xffffffff;
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg ASTAT, (0x18304890 | _VS | _V | _AV1S | _AV1 | _AV0S | _AC0 | _AQ | _CC | _V_COPY | _AC0_COPY);
+
+	pass
diff --git a/sim/testsuite/sim/bfin/random_0037.S b/sim/testsuite/sim/bfin/random_0037.S
new file mode 100644
index 0000000..05eae8a
--- /dev/null
+++ b/sim/testsuite/sim/bfin/random_0037.S
@@ -0,0 +1,84 @@
+# mach: bfin
+#include "test.h"
+.include "testutils.inc"
+
+	start
+
+	dmm32 ASTAT, (0x1880c200 | _VS | _AV1S | _AV0S | _AC1);
+	dmm32 A0.w, 0x2b9a5661;
+	dmm32 A0.x, 0x00000032;
+	dmm32 A1.w, 0x1a0c4c8c;
+	dmm32 A1.x, 0xffffff80;
+	imm32 R0, 0x694a9cb0;
+	imm32 R6, 0x651cc0dd;
+	A1 += R0.L * R0.H (M), R6.L = (A0 += R0.L * R0.H) (TFU);
+	checkreg R6, 0x651cffff;
+	checkreg A0.w, 0x6c0bd141;
+	checkreg A0.x, 0x00000032;
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0xffffff80;
+	checkreg ASTAT, (0x1880c200 | _VS | _V | _AV1S | _AV1 | _AV0S | _AC1 | _V_COPY);
+
+	dmm32 ASTAT, (0x14104490 | _VS | _AV1S | _AZ);
+	dmm32 A0.w, 0x6ec017a0;
+	dmm32 A0.x, 0x00000000;
+	dmm32 A1.w, 0xff6f5846;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R3, 0x256a8306;
+	imm32 R6, 0x6a8ca1e4;
+	imm32 R7, 0x2e579ce0;
+	R6.H = (A1 -= R3.L * R7.L) (M), A0 = R3.L * R7.L (TFU);
+	checkreg R6, 0x7fffa1e4;
+	checkreg A0.w, 0x504a4d40;
+	checkreg A0.x, 0x00000000;
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg ASTAT, (0x14104490 | _VS | _V | _AV1S | _AV1 | _V_COPY | _AZ);
+
+	dmm32 ASTAT, (0x20008080 | _VS | _V | _AV1S | _AV0 | _AC1 | _AC0 | _AQ);
+	dmm32 A0.w, 0x58b9bdf1;
+	dmm32 A0.x, 0xffffffe2;
+	dmm32 A1.w, 0x42c9fae8;
+	dmm32 A1.x, 0xffffff80;
+	imm32 R1, 0x68df1898;
+	imm32 R2, 0x3ae1b1f0;
+	imm32 R5, 0x61c3f5ef;
+	A1 += R2.L * R5.L (M), R1.L = (A0 -= R2.L * R5.L) (TFU);
+	checkreg R1, 0x68dfffff;
+	checkreg A0.w, 0xadc8eee1;
+	checkreg A0.x, 0xffffffe1;
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0xffffff80;
+	checkreg ASTAT, (0x20008080 | _VS | _V | _AV1S | _AV1 | _AC1 | _AC0 | _AQ | _V_COPY);
+
+	dmm32 ASTAT, (0x1c70ca90 | _VS | _V | _AV1S | _AV0S | _CC | _V_COPY | _AC0_COPY);
+	dmm32 A0.w, 0x082c2157;
+	dmm32 A0.x, 0xffffff9f;
+	dmm32 A1.w, 0x275e1474;
+	dmm32 A1.x, 0xffffff80;
+	imm32 R1, 0x7d3179fd;
+	imm32 R2, 0x5b41566f;
+	R2.H = (A1 -= R1.L * R1.H) (M), R2.L = (A0 = R1.L * R1.L) (TFU);
+	checkreg R2, 0x80003a21;
+	checkreg A0.w, 0x3a212409;
+	checkreg A0.x, 0x00000000;
+	checkreg A1.w, 0x00000000;
+	checkreg A1.x, 0xffffff80;
+	checkreg ASTAT, (0x1c70ca90 | _VS | _V | _AV1S | _AV1 | _AV0S | _CC | _V_COPY | _AC0_COPY);
+
+	dmm32 ASTAT, (0x7460cc10 | _VS | _V | _AV1S | _AV0S | _AV0 | _AQ | _CC | _V_COPY);
+	dmm32 A0.w, 0x7fffffff;
+	dmm32 A0.x, 0x00000000;
+	dmm32 A1.w, 0xf20b4000;
+	dmm32 A1.x, 0x0000007f;
+	imm32 R1, 0x2ca2d045;
+	imm32 R6, 0x6e516a3c;
+	R1.H = (A1 -= R1.L * R6.H) (M), A0 = R1.L * R6.H (TFU);
+	checkreg R1, 0x7fffd045;
+	checkreg A0.w, 0x59bf8bd5;
+	checkreg A0.x, 0x00000000;
+	checkreg A1.w, 0xffffffff;
+	checkreg A1.x, 0x0000007f;
+	checkreg ASTAT, (0x7460cc10 | _VS | _V | _AV1S | _AV1 | _AV0S | _AQ | _CC | _V_COPY);
+
+	pass
diff --git a/sim/testsuite/sim/bfin/se_all16bitopcodes.S b/sim/testsuite/sim/bfin/se_all16bitopcodes.S
index a87d287..042621e 100644
--- a/sim/testsuite/sim/bfin/se_all16bitopcodes.S
+++ b/sim/testsuite/sim/bfin/se_all16bitopcodes.S
@@ -12,137 +12,39 @@
 # sim: --environment operating
 
 #include "test.h"
-	.include "testutils.inc"
-
-	start
-
-	/* Set up exception handler */
-	imm32 P4, EVT3;
-	loadsym R1, _evx;
-	[P4] = R1;
-
-	/* set up the _location */
-	loadsym P0, _location
-	loadsym P1, _table;
-	[P0] = P1;
-
-	/* Enable single stepping */
-	R0 = 1;
-	SYSCFG = R0;
-
-	/* Lower to the code we want to single step through */
-	loadsym R1, _usr;
-	RETI = R1;
-
-	/* set up pointers to valid data (32Meg), to reduce address violations */
-	init_p_regs 0x2000000;
-	init_i_regs 0x2000000;
-	init_b_regs 0x2000000;
-	init_l_regs 0;
-	imm32 fp, 0x2000000;
-	usp = p0;
-
-	RTI;
-
-	.align 4;
-_usr:
-	.dd 0x0000;
-	jump fail_lvl;
-
-_evx:
-	/* Make sure exception reason is single step */
-	R3 = SEQSTAT;
-	R4 = 0x3f;
-	R3 = R3 & R4;
-
-	/* find a match */
-	loadsym P0, _usr;
-	loadsym P2, _location;
-	P1 = [P2];
-	R0 = W[P0];
-
-_match:
-	R7 = W[P1++];
-	R6 = W[P1++];
-	R5 = W[P1++];
 
-	/* is this the end of the table? */
-	R4 = 0;
-	CC = R4 == R7;
-	IF CC jump _legal_instruction;
-
-	/* is the opcode (R0) greater than the 2nd entry in the table (R6) */
-	/* if so look at the next line in the table */
-	CC = R6 < R0;
-	if CC jump _match;
-
-	/* is the opcode (R0) smaller than the first entry in the table (R7) */
-	/* this means it's somewhere between the two lines, and should be legal */
-	CC = R7 <= R0;
-	if !CC jump _legal_instruction;
-
-	/* is the current EXCAUSE (R3), the same as the table (R5) */
-	/* if not, fail */
-	CC = R3 == R5
-	if !CC jump fail_lvl;
-
-_match_done:
-	/* back up, and store the location to search next */
-	R0 = P1;
-	/* 3 back, * word/byte) */
-	R0 += (-3 * 2);
-	[P2] = R0;
-
-	/* it matches, so fall through */
-	jump _next_instruction;
+#define SE_ALL_BITS 16
+#define SE_ALL_NEW_INSN_STUB
+#include "se_allopcodes.h"
+	.include "testutils.inc"
 
-_legal_instruction:
-	R4 = 0x10;
-	CC = R3 == R4;
-	IF !CC JUMP fail_lvl;
-	/* it wasn't in the list, and was a single step, so fall through */
+.macro se_all_load_insn
+	R2 = W[P5];
+	R0 = R2;
+.endm
 
-_next_instruction:
+.macro se_all_next_insn
 	/* increment, and go again. */
-	loadsym P0, _usr;
-	R0 = W[P0];
+	R0 = R2;
+
 	R0 += 1;
-	W[P0] = R0;
+	/* finish once we hit the 32bit limit */
 	R1 = 0xC000 (Z);
 	CC = R1 == R0;
 	IF CC JUMP pass_lvl;
 
-	/* Make sure the opcode isn't in a write buffer */
-	SSYNC;
-
-	loadsym R1, _usr
-	RETX = R1;
-
-	/* set up pointers to valid data (32Meg), to reduce address violations */
-	init_p_regs 0x2000000;
-	init_i_regs 0x2000000;
-	init_b_regs 0x2000000;
-	init_l_regs 0;
-	imm32 fp, 0x2000000;
-	usp = p0;
-	RETS = p0;
-	RETN = p0;
-	RETE = p0;
-	RETI = p0;
-	RTX;
-
-pass_lvl:
-	dbg_pass;
-fail_lvl:
-	dbg_fail;
+	W[P5] = R0;
+.endm
 
+.macro se_all_new_insn_stub
+	jump _legal_instruction;
+.endm
 
+.macro se_all_insn_init
+	.dw 0x0000;
+.endm
+.macro se_all_insn_table
 	/* this table must be sorted, and end with zero */
-	.data
-	.align 4;
-_location:
-	.dd 0
-_table:
 	/* start	end		SEQSTAT */
 	.dw 0x0001,	0x000f,		0x21
 	.dw 0x0011,	0x0013,		0x2e
@@ -442,3 +344,6 @@ _table:
 	.dw 0x9ef0,	0x9eff,		0x21
 	.dw 0x9f70,	0x9f7f,		0x21
 	.dw 0x0000,	0x0000,		0x00
+.endm
+
+	se_all_test
diff --git a/sim/testsuite/sim/bfin/se_all32bitopcodes.S b/sim/testsuite/sim/bfin/se_all32bitopcodes.S
index be3b395..f8664e6 100644
--- a/sim/testsuite/sim/bfin/se_all32bitopcodes.S
+++ b/sim/testsuite/sim/bfin/se_all32bitopcodes.S
@@ -8,131 +8,27 @@
  * and walk every instruction from 0x00000000 to 0xffffffff (and have 0xc000 set)
  */
 
-# don't try to run normally as it takes way too long in sim
+# Don't want to enable for normal `make check` as it takes way too long in
+# the sim -- executes over 3 billion insns, and even at 10 MIPS, that's 10+
+# minutes.  Useful for directed testing, but that's about it.
 # mach: none
 # sim: --environment operating
 # xfail: too many invalid insns are decoded as valid
 
 #include "test.h"
-	.include "testutils.inc"
-
-	start
-
-	/* Set up exception handler */
-	imm32 P4, EVT3;
-	loadsym R1, _evx;
-	[P4] = R1;
-
-	/* set up the _location */
-	loadsym P0, _location
-	loadsym P1, _table;
-	[P0] = P1;
-
-	/* Enable single stepping */
-	R0 = 1;
-	SYSCFG = R0;
-
-	/* Lower to the code we want to single step through */
-	loadsym P1, _usr;
-	RETI = P1;
-
-	/* set up pointers to valid data (32Meg), to reduce address violations */
-	.macro reset_regs
-	imm32 r0, 0x2000000;
-	l0 = 0; l1 = 0; l2 = 0; l3 = 0;
-	p0 = r0; p1 = r0; p2 = r0; p3 = r0; p4 = r0; p5 = r0;
-	usp = r0; fp = r0;
-	i0 = r0; i1 = r0; i2 = r0; i3 = r0;
-	b0 = r0; b1 = r0; b2 = r0; b3 = r0;
-	.endm
-	reset_regs
-
-	RTI;
 
-	.align 4;
-_evx:
-	/* Make sure exception reason is single step */
-	R3 = SEQSTAT;
-	R4 = 0x3f;
-	R3 = R3 & R4;
+#define SE_ALL_BITS 32
+#include "se_allopcodes.h"
+	.include "testutils.inc"
 
-	/* find a match */
-	loadsym P5, _usr;
-	loadsym P4, _location;
+.macro se_all_load_insn
 	R2 = [P5];
-	P1 = [P4];
 	R0 = R2 << 16;
 	R1 = R2 >> 16;
 	R0 = R0 | R1;
+.endm
 
-_match:
-	P2 = P1;
-	R7 = [P1++];
-	R6 = [P1++];
-	R5 = [P1++];
-
-	/* is this the end of the table? */
-	R4 = 0;
-	CC = R4 == R7;
-	IF CC jump _new_instruction;
-
-	/* is the opcode (R0) greater than the 2nd entry in the table (R6) */
-	/* if so look at the next line in the table */
-	CC = R6 < R0;
-	if CC jump _match;
-
-	/* is the opcode (R0) smaller than the first entry in the table (R7) */
-	/* this means it's somewhere between the two lines, and should be legal */
-	CC = R7 <= R0;
-	if !CC jump _legal_instruction;
-
-	/* is the current EXCAUSE (R3), the same as the table (R5) */
-	/* if not, fail */
-	CC = R3 == R5
-	if !CC jump fail_lvl;
-
-_match_done:
-	/* back up, and store the location to search next */
-	[P4] = P2;
-
-	/* it matches, so fall through */
-	jump _next_instruction;
-
-_new_instruction:
-	jump fail_lvl;
-
-	/* output the insn (R0) and excause (R3) if diff from last */
-	loadsym P0, _last_excause;
-	R2 = [P0];
-	CC = R2 == R3;
-	IF CC jump _next_instruction;
-	[P0] = R3;
-
-.ifdef BFIN_JTAG_xxxxx
-	R1 = R0;
-	R0 = 0x8;
-	call __emu_out;
-	R0 = R1;
-	call __emu_out;
-	R0 = R3;
-	call __emu_out;
-.else
-	loadsym P0, _next_location;
-	P1 = [P0];
-	[P1++] = R0;
-	[P1++] = R3;
-	[P0] = P1;
-.endif
-
-	jump _next_instruction;
-
-_legal_instruction:
-	R4 = 0x10;
-	CC = R3 == R4;
-	IF !CC JUMP fail_lvl;
-	/* it wasn't in the list, and was a single step, so fall through */
-
-_next_instruction:
+.macro se_all_next_insn
 	/* increment, and go again. */
 	R0 = R2;
 
@@ -169,45 +65,14 @@ _next_instruction:
 1:
 
 	[P5] = R0;
+.endm
 
-	/* Make sure the opcode isn't in a write buffer */
-	SSYNC;
-
-	R1 = P5;
-	RETX = R1;
-
-	/* set up pointers to valid data (32Meg), to reduce address violations */
-	reset_regs
-	RETS = r0;
-	RETN = r0;
-	RETE = r0;
-	RETI = r0;
-
-	RTX;
-
-pass_lvl:
-	dbg_pass;
-fail_lvl:
-	dbg_fail;
-
-	.section .text.usr
-	.align 4
-_usr:
+.macro se_all_insn_init
 	.dw 0xc000;
 	.dw 0x0000;
-	loadsym P0, fail_lvl;
-	JUMP (P0);
-
+.endm
+.macro se_all_insn_table
 	/* this table must be sorted, and end with zero */
-	.data
-	.align 4;
-_last_excause:
-	.dd 0xffff
-_next_location:
-	.dd _table_end
-_location:
-	.dd 0
-_table:
 	/* start		end			SEQSTAT */
 	.dw 0x1a00, 0xc000,	0x1fff, 0xc000,		0x21, 0
 	.dw 0x3a00, 0xc000,	0x3fff, 0xc000,		0x21, 0
@@ -34301,4 +34166,6 @@ _table:
 	.dw 0x0000, 0xe740,	0xffff, 0xe7ff,		0x21, 0
 	.dw 0x0000, 0xf001, 0xffff, 0xffff,		0x21, 0
 	.dw 0x0000, 0x0000,	0x0000, 0x0000,		0x00, 0
-_table_end:
+.endm
+
+	se_all_test
diff --git a/sim/testsuite/sim/bfin/se_all64bitg0opcodes.S b/sim/testsuite/sim/bfin/se_all64bitg0opcodes.S
new file mode 100644
index 0000000..516583b
--- /dev/null
+++ b/sim/testsuite/sim/bfin/se_all64bitg0opcodes.S
@@ -0,0 +1,33369 @@
+/*
+ * Blackfin testcase for testing illegal/legal 64-bit opcodes (group 0)
+ * from userspace.  we track all instructions which cause some sort of
+ * exception when run from userspace, this is normally EXCAUSE :
+ *  - 0x22 : illegal instruction combination
+ * and walk every instruction from 0xC0000000 to 0xffffffff
+ * (and have 0x8000000 set)
+ */
+
+# Don't want to enable for normal `make check` as it takes way too long in
+# the sim -- executes over 3 billion insns, and even at 10 MIPS, that's 10+
+# minutes.  Useful for directed testing, but that's about it.
+# mach: none
+# sim: --environment operating
+# xfail: too many invalid insns are decoded as valid
+
+#include "test.h"
+	.include "testutils.inc"
+
+#define SE_ALL_BITS 32
+#include "se_allopcodes.h"
+
+.macro se_all_load_insn
+	R2 = [P5];
+	R0 = R2 << 16;
+	R1 = R2 >> 16;
+	R0 = R0 | R1;
+.endm
+
+.macro se_all_next_insn
+	/* increment, and go again. */
+	R0 = R2;
+
+	/* Is this the last insn we'll execute ? */
+	R1 = -1 (x);
+	CC = R1 == R0;
+	IF CC JUMP pass_lvl;
+
+	/* cut across the opcode space in an efficient manner:
+	 * increment the high 16bits first since the low 16bits encode
+	 * the type of insn ... */
+	imm32 R1, 0x10000;
+	R0 = R1 + R0;
+	CC = R1 < R0 (IU);
+	IF CC jump 1f (bp);
+
+	R0 += 1;
+	/* skip any 16bit insn chunks */
+	R1 = R0;
+	R1.L = 0xC800;
+	CC = R0 < R1 (IU);
+	IF CC R0 = R1;
+1:
+
+	/* force parallel insns */
+	BITSET (R0, 11);
+
+	/* skip linkage insns */
+	R1 = R0;
+	R2 = R0;
+	R1.L = 0xe800;
+	R2.L = 0xe802;
+	CC = R0 == R1;
+	IF CC R0 = R2;
+
+	[P5] = R0;
+.endm
+
+.macro se_all_insn_init
+	.dw 0xc800;	/* 32bit */
+	.dw 0x0000;	/* insn */
+	.dw 0x0000;	/* || group1 */
+	.dw 0x0000;	/* || group2; */
+.endm
+.macro se_all_insn_table
+	/* this table must be sorted, and end with zero */
+	/* start		end			SEQSTAT */
+	.dw 0x1a00, 0xc800,	0x1fff, 0xc800,		0x21, 0
+	.dw 0x3a00, 0xc800,	0x3fff, 0xc800,		0x21, 0
+	.dw 0x5a00, 0xc800,	0x5fff, 0xc800,		0x21, 0
+	.dw 0x7a00, 0xc800,	0x7fff, 0xc800,		0x21, 0
+	.dw 0x9a00, 0xc800,	0x9fff, 0xc800,		0x21, 0
+	.dw 0xba00, 0xc800,	0xbfff, 0xc800,		0x21, 0
+	.dw 0xda00, 0xc800,	0xdfff, 0xc800,		0x21, 0
+	.dw 0xfa00, 0xc800,	0xffff, 0xc800,		0x21, 0
+	.dw 0x1a00, 0xc801,	0x1fff, 0xc801,		0x21, 0
+	.dw 0x3a00, 0xc801,	0x3fff, 0xc801,		0x21, 0
+	.dw 0x5a00, 0xc801,	0x5fff, 0xc801,		0x21, 0
+	.dw 0x7a00, 0xc801,	0x7fff, 0xc801,		0x21, 0
+	.dw 0x9a00, 0xc801,	0x9fff, 0xc801,		0x21, 0
+	.dw 0xba00, 0xc801,	0xbfff, 0xc801,		0x21, 0
+	.dw 0xda00, 0xc801,	0xdfff, 0xc801,		0x21, 0
+	.dw 0xfa00, 0xc801,	0xffff, 0xc801,		0x21, 0
+	.dw 0x1a00, 0xc802,	0x1fff, 0xc802,		0x21, 0
+	.dw 0x3a00, 0xc802,	0x3fff, 0xc802,		0x21, 0
+	.dw 0x5a00, 0xc802,	0x5fff, 0xc802,		0x21, 0
+	.dw 0x7a00, 0xc802,	0x7fff, 0xc802,		0x21, 0
+	.dw 0x9a00, 0xc802,	0x9fff, 0xc802,		0x21, 0
+	.dw 0xba00, 0xc802,	0xbfff, 0xc802,		0x21, 0
+	.dw 0xda00, 0xc802,	0xdfff, 0xc802,		0x21, 0
+	.dw 0xfa00, 0xc802,	0xffff, 0xc802,		0x21, 0
+	.dw 0x1a00, 0xc803,	0x1fff, 0xc803,		0x21, 0
+	.dw 0x3a00, 0xc803,	0xffff, 0xc803,		0x21, 0
+	.dw 0x1a00, 0xc804,	0x1fff, 0xc804,		0x21, 0
+	.dw 0x3a00, 0xc804,	0x3fff, 0xc804,		0x21, 0
+	.dw 0x5a00, 0xc804,	0x5fff, 0xc804,		0x21, 0
+	.dw 0x7a00, 0xc804,	0x7fff, 0xc804,		0x21, 0
+	.dw 0x9a00, 0xc804,	0x9fff, 0xc804,		0x21, 0
+	.dw 0xba00, 0xc804,	0xbfff, 0xc804,		0x21, 0
+	.dw 0xda00, 0xc804,	0xdfff, 0xc804,		0x21, 0
+	.dw 0xfa00, 0xc804,	0xffff, 0xc804,		0x21, 0
+	.dw 0x1a00, 0xc805,	0x1fff, 0xc805,		0x21, 0
+	.dw 0x3a00, 0xc805,	0x3fff, 0xc805,		0x21, 0
+	.dw 0x5a00, 0xc805,	0x5fff, 0xc805,		0x21, 0
+	.dw 0x7a00, 0xc805,	0x7fff, 0xc805,		0x21, 0
+	.dw 0x9a00, 0xc805,	0x9fff, 0xc805,		0x21, 0
+	.dw 0xba00, 0xc805,	0xbfff, 0xc805,		0x21, 0
+	.dw 0xda00, 0xc805,	0xdfff, 0xc805,		0x21, 0
+	.dw 0xfa00, 0xc805,	0xffff, 0xc805,		0x21, 0
+	.dw 0x1a00, 0xc806,	0x1fff, 0xc806,		0x21, 0
+	.dw 0x3a00, 0xc806,	0x3fff, 0xc806,		0x21, 0
+	.dw 0x5a00, 0xc806,	0x5fff, 0xc806,		0x21, 0
+	.dw 0x7a00, 0xc806,	0x7fff, 0xc806,		0x21, 0
+	.dw 0x9a00, 0xc806,	0x9fff, 0xc806,		0x21, 0
+	.dw 0xba00, 0xc806,	0xbfff, 0xc806,		0x21, 0
+	.dw 0xda00, 0xc806,	0xdfff, 0xc806,		0x21, 0
+	.dw 0xfa00, 0xc806,	0xffff, 0xc806,		0x21, 0
+	.dw 0x1a00, 0xc807,	0x1fff, 0xc807,		0x21, 0
+	.dw 0x3a00, 0xc807,	0x1fff, 0xc808,		0x21, 0
+	.dw 0x2040, 0xc808,	0x207f, 0xc808,		0x21, 0
+	.dw 0x20c0, 0xc808,	0x20ff, 0xc808,		0x21, 0
+	.dw 0x2140, 0xc808,	0x217f, 0xc808,		0x21, 0
+	.dw 0x21c0, 0xc808,	0x21ff, 0xc808,		0x21, 0
+	.dw 0x2240, 0xc808,	0x227f, 0xc808,		0x21, 0
+	.dw 0x22c0, 0xc808,	0x22ff, 0xc808,		0x21, 0
+	.dw 0x2340, 0xc808,	0x237f, 0xc808,		0x21, 0
+	.dw 0x23c0, 0xc808,	0x23ff, 0xc808,		0x21, 0
+	.dw 0x2440, 0xc808,	0x247f, 0xc808,		0x21, 0
+	.dw 0x24c0, 0xc808,	0x24ff, 0xc808,		0x21, 0
+	.dw 0x2540, 0xc808,	0x257f, 0xc808,		0x21, 0
+	.dw 0x25c0, 0xc808,	0x25ff, 0xc808,		0x21, 0
+	.dw 0x2640, 0xc808,	0x267f, 0xc808,		0x21, 0
+	.dw 0x26c0, 0xc808,	0x26ff, 0xc808,		0x21, 0
+	.dw 0x2740, 0xc808,	0x277f, 0xc808,		0x21, 0
+	.dw 0x27c0, 0xc808,	0x27ff, 0xc808,		0x21, 0
+	.dw 0x2840, 0xc808,	0x287f, 0xc808,		0x21, 0
+	.dw 0x28c0, 0xc808,	0x28ff, 0xc808,		0x21, 0
+	.dw 0x2940, 0xc808,	0x297f, 0xc808,		0x21, 0
+	.dw 0x29c0, 0xc808,	0x29ff, 0xc808,		0x21, 0
+	.dw 0x2a40, 0xc808,	0x2a7f, 0xc808,		0x21, 0
+	.dw 0x2ac0, 0xc808,	0x2aff, 0xc808,		0x21, 0
+	.dw 0x2b40, 0xc808,	0x2b7f, 0xc808,		0x21, 0
+	.dw 0x2bc0, 0xc808,	0x2bff, 0xc808,		0x21, 0
+	.dw 0x2c40, 0xc808,	0x2c7f, 0xc808,		0x21, 0
+	.dw 0x2cc0, 0xc808,	0x2cff, 0xc808,		0x21, 0
+	.dw 0x2d40, 0xc808,	0x2d7f, 0xc808,		0x21, 0
+	.dw 0x2dc0, 0xc808,	0x2dff, 0xc808,		0x21, 0
+	.dw 0x2e40, 0xc808,	0x2e7f, 0xc808,		0x21, 0
+	.dw 0x2ec0, 0xc808,	0x2eff, 0xc808,		0x21, 0
+	.dw 0x2f40, 0xc808,	0x2f7f, 0xc808,		0x21, 0
+	.dw 0x2fc0, 0xc808,	0x2fff, 0xc808,		0x21, 0
+	.dw 0x3040, 0xc808,	0x307f, 0xc808,		0x21, 0
+	.dw 0x30c0, 0xc808,	0x30ff, 0xc808,		0x21, 0
+	.dw 0x3140, 0xc808,	0x317f, 0xc808,		0x21, 0
+	.dw 0x31c0, 0xc808,	0x31ff, 0xc808,		0x21, 0
+	.dw 0x3240, 0xc808,	0x327f, 0xc808,		0x21, 0
+	.dw 0x32c0, 0xc808,	0x32ff, 0xc808,		0x21, 0
+	.dw 0x3340, 0xc808,	0x337f, 0xc808,		0x21, 0
+	.dw 0x33c0, 0xc808,	0x33ff, 0xc808,		0x21, 0
+	.dw 0x3440, 0xc808,	0x347f, 0xc808,		0x21, 0
+	.dw 0x34c0, 0xc808,	0x34ff, 0xc808,		0x21, 0
+	.dw 0x3540, 0xc808,	0x357f, 0xc808,		0x21, 0
+	.dw 0x35c0, 0xc808,	0x35ff, 0xc808,		0x21, 0
+	.dw 0x3640, 0xc808,	0x367f, 0xc808,		0x21, 0
+	.dw 0x36c0, 0xc808,	0x36ff, 0xc808,		0x21, 0
+	.dw 0x3740, 0xc808,	0x377f, 0xc808,		0x21, 0
+	.dw 0x37c0, 0xc808,	0x37ff, 0xc808,		0x21, 0
+	.dw 0x3840, 0xc808,	0x387f, 0xc808,		0x21, 0
+	.dw 0x38c0, 0xc808,	0x38ff, 0xc808,		0x21, 0
+	.dw 0x3940, 0xc808,	0x397f, 0xc808,		0x21, 0
+	.dw 0x39c0, 0xc808,	0x5fff, 0xc808,		0x21, 0
+	.dw 0x6040, 0xc808,	0x607f, 0xc808,		0x21, 0
+	.dw 0x60c0, 0xc808,	0x60ff, 0xc808,		0x21, 0
+	.dw 0x6140, 0xc808,	0x617f, 0xc808,		0x21, 0
+	.dw 0x61c0, 0xc808,	0x61ff, 0xc808,		0x21, 0
+	.dw 0x6240, 0xc808,	0x627f, 0xc808,		0x21, 0
+	.dw 0x62c0, 0xc808,	0x62ff, 0xc808,		0x21, 0
+	.dw 0x6340, 0xc808,	0x637f, 0xc808,		0x21, 0
+	.dw 0x63c0, 0xc808,	0x63ff, 0xc808,		0x21, 0
+	.dw 0x6440, 0xc808,	0x647f, 0xc808,		0x21, 0
+	.dw 0x64c0, 0xc808,	0x64ff, 0xc808,		0x21, 0
+	.dw 0x6540, 0xc808,	0x657f, 0xc808,		0x21, 0
+	.dw 0x65c0, 0xc808,	0x65ff, 0xc808,		0x21, 0
+	.dw 0x6640, 0xc808,	0x667f, 0xc808,		0x21, 0
+	.dw 0x66c0, 0xc808,	0x66ff, 0xc808,		0x21, 0
+	.dw 0x6740, 0xc808,	0x677f, 0xc808,		0x21, 0
+	.dw 0x67c0, 0xc808,	0x67ff, 0xc808,		0x21, 0
+	.dw 0x6840, 0xc808,	0x687f, 0xc808,		0x21, 0
+	.dw 0x68c0, 0xc808,	0x68ff, 0xc808,		0x21, 0
+	.dw 0x6940, 0xc808,	0x697f, 0xc808,		0x21, 0
+	.dw 0x69c0, 0xc808,	0x69ff, 0xc808,		0x21, 0
+	.dw 0x6a40, 0xc808,	0x6a7f, 0xc808,		0x21, 0
+	.dw 0x6ac0, 0xc808,	0x6aff, 0xc808,		0x21, 0
+	.dw 0x6b40, 0xc808,	0x6b7f, 0xc808,		0x21, 0
+	.dw 0x6bc0, 0xc808,	0x6bff, 0xc808,		0x21, 0
+	.dw 0x6c40, 0xc808,	0x6c7f, 0xc808,		0x21, 0
+	.dw 0x6cc0, 0xc808,	0x6cff, 0xc808,		0x21, 0
+	.dw 0x6d40, 0xc808,	0x6d7f, 0xc808,		0x21, 0
+	.dw 0x6dc0, 0xc808,	0x6dff, 0xc808,		0x21, 0
+	.dw 0x6e40, 0xc808,	0x6e7f, 0xc808,		0x21, 0
+	.dw 0x6ec0, 0xc808,	0x6eff, 0xc808,		0x21, 0
+	.dw 0x6f40, 0xc808,	0x6f7f, 0xc808,		0x21, 0
+	.dw 0x6fc0, 0xc808,	0x6fff, 0xc808,		0x21, 0
+	.dw 0x7040, 0xc808,	0x707f, 0xc808,		0x21, 0
+	.dw 0x70c0, 0xc808,	0x70ff, 0xc808,		0x21, 0
+	.dw 0x7140, 0xc808,	0x717f, 0xc808,		0x21, 0
+	.dw 0x71c0, 0xc808,	0x71ff, 0xc808,		0x21, 0
+	.dw 0x7240, 0xc808,	0x727f, 0xc808,		0x21, 0
+	.dw 0x72c0, 0xc808,	0x72ff, 0xc808,		0x21, 0
+	.dw 0x7340, 0xc808,	0x737f, 0xc808,		0x21, 0
+	.dw 0x73c0, 0xc808,	0x73ff, 0xc808,		0x21, 0
+	.dw 0x7440, 0xc808,	0x747f, 0xc808,		0x21, 0
+	.dw 0x74c0, 0xc808,	0x74ff, 0xc808,		0x21, 0
+	.dw 0x7540, 0xc808,	0x757f, 0xc808,		0x21, 0
+	.dw 0x75c0, 0xc808,	0x75ff, 0xc808,		0x21, 0
+	.dw 0x7640, 0xc808,	0x767f, 0xc808,		0x21, 0
+	.dw 0x76c0, 0xc808,	0x76ff, 0xc808,		0x21, 0
+	.dw 0x7740, 0xc808,	0x777f, 0xc808,		0x21, 0
+	.dw 0x77c0, 0xc808,	0x77ff, 0xc808,		0x21, 0
+	.dw 0x7840, 0xc808,	0x787f, 0xc808,		0x21, 0
+	.dw 0x78c0, 0xc808,	0x78ff, 0xc808,		0x21, 0
+	.dw 0x7940, 0xc808,	0x797f, 0xc808,		0x21, 0
+	.dw 0x79c0, 0xc808,	0x9fff, 0xc808,		0x21, 0
+	.dw 0xa040, 0xc808,	0xa07f, 0xc808,		0x21, 0
+	.dw 0xa0c0, 0xc808,	0xa0ff, 0xc808,		0x21, 0
+	.dw 0xa140, 0xc808,	0xa17f, 0xc808,		0x21, 0
+	.dw 0xa1c0, 0xc808,	0xa1ff, 0xc808,		0x21, 0
+	.dw 0xa240, 0xc808,	0xa27f, 0xc808,		0x21, 0
+	.dw 0xa2c0, 0xc808,	0xa2ff, 0xc808,		0x21, 0
+	.dw 0xa340, 0xc808,	0xa37f, 0xc808,		0x21, 0
+	.dw 0xa3c0, 0xc808,	0xa3ff, 0xc808,		0x21, 0
+	.dw 0xa440, 0xc808,	0xa47f, 0xc808,		0x21, 0
+	.dw 0xa4c0, 0xc808,	0xa4ff, 0xc808,		0x21, 0
+	.dw 0xa540, 0xc808,	0xa57f, 0xc808,		0x21, 0
+	.dw 0xa5c0, 0xc808,	0xa5ff, 0xc808,		0x21, 0
+	.dw 0xa640, 0xc808,	0xa67f, 0xc808,		0x21, 0
+	.dw 0xa6c0, 0xc808,	0xa6ff, 0xc808,		0x21, 0
+	.dw 0xa740, 0xc808,	0xa77f, 0xc808,		0x21, 0
+	.dw 0xa7c0, 0xc808,	0xa7ff, 0xc808,		0x21, 0
+	.dw 0xa840, 0xc808,	0xa87f, 0xc808,		0x21, 0
+	.dw 0xa8c0, 0xc808,	0xa8ff, 0xc808,		0x21, 0
+	.dw 0xa940, 0xc808,	0xa97f, 0xc808,		0x21, 0
+	.dw 0xa9c0, 0xc808,	0xa9ff, 0xc808,		0x21, 0
+	.dw 0xaa40, 0xc808,	0xaa7f, 0xc808,		0x21, 0
+	.dw 0xaac0, 0xc808,	0xaaff, 0xc808,		0x21, 0
+	.dw 0xab40, 0xc808,	0xab7f, 0xc808,		0x21, 0
+	.dw 0xabc0, 0xc808,	0xabff, 0xc808,		0x21, 0
+	.dw 0xac40, 0xc808,	0xac7f, 0xc808,		0x21, 0
+	.dw 0xacc0, 0xc808,	0xacff, 0xc808,		0x21, 0
+	.dw 0xad40, 0xc808,	0xad7f, 0xc808,		0x21, 0
+	.dw 0xadc0, 0xc808,	0xadff, 0xc808,		0x21, 0
+	.dw 0xae40, 0xc808,	0xae7f, 0xc808,		0x21, 0
+	.dw 0xaec0, 0xc808,	0xaeff, 0xc808,		0x21, 0
+	.dw 0xaf40, 0xc808,	0xaf7f, 0xc808,		0x21, 0
+	.dw 0xafc0, 0xc808,	0xafff, 0xc808,		0x21, 0
+	.dw 0xb040, 0xc808,	0xb07f, 0xc808,		0x21, 0
+	.dw 0xb0c0, 0xc808,	0xb0ff, 0xc808,		0x21, 0
+	.dw 0xb140, 0xc808,	0xb17f, 0xc808,		0x21, 0
+	.dw 0xb1c0, 0xc808,	0xb1ff, 0xc808,		0x21, 0
+	.dw 0xb240, 0xc808,	0xb27f, 0xc808,		0x21, 0
+	.dw 0xb2c0, 0xc808,	0xb2ff, 0xc808,		0x21, 0
+	.dw 0xb340, 0xc808,	0xb37f, 0xc808,		0x21, 0
+	.dw 0xb3c0, 0xc808,	0xb3ff, 0xc808,		0x21, 0
+	.dw 0xb440, 0xc808,	0xb47f, 0xc808,		0x21, 0
+	.dw 0xb4c0, 0xc808,	0xb4ff, 0xc808,		0x21, 0
+	.dw 0xb540, 0xc808,	0xb57f, 0xc808,		0x21, 0
+	.dw 0xb5c0, 0xc808,	0xb5ff, 0xc808,		0x21, 0
+	.dw 0xb640, 0xc808,	0xb67f, 0xc808,		0x21, 0
+	.dw 0xb6c0, 0xc808,	0xb6ff, 0xc808,		0x21, 0
+	.dw 0xb740, 0xc808,	0xb77f, 0xc808,		0x21, 0
+	.dw 0xb7c0, 0xc808,	0xb7ff, 0xc808,		0x21, 0
+	.dw 0xb840, 0xc808,	0xb87f, 0xc808,		0x21, 0
+	.dw 0xb8c0, 0xc808,	0xb8ff, 0xc808,		0x21, 0
+	.dw 0xb940, 0xc808,	0xb97f, 0xc808,		0x21, 0
+	.dw 0xb9c0, 0xc808,	0xdfff, 0xc808,		0x21, 0
+	.dw 0xe040, 0xc808,	0xe07f, 0xc808,		0x21, 0
+	.dw 0xe0c0, 0xc808,	0xe0ff, 0xc808,		0x21, 0
+	.dw 0xe140, 0xc808,	0xe17f, 0xc808,		0x21, 0
+	.dw 0xe1c0, 0xc808,	0xe1ff, 0xc808,		0x21, 0
+	.dw 0xe240, 0xc808,	0xe27f, 0xc808,		0x21, 0
+	.dw 0xe2c0, 0xc808,	0xe2ff, 0xc808,		0x21, 0
+	.dw 0xe340, 0xc808,	0xe37f, 0xc808,		0x21, 0
+	.dw 0xe3c0, 0xc808,	0xe3ff, 0xc808,		0x21, 0
+	.dw 0xe440, 0xc808,	0xe47f, 0xc808,		0x21, 0
+	.dw 0xe4c0, 0xc808,	0xe4ff, 0xc808,		0x21, 0
+	.dw 0xe540, 0xc808,	0xe57f, 0xc808,		0x21, 0
+	.dw 0xe5c0, 0xc808,	0xe5ff, 0xc808,		0x21, 0
+	.dw 0xe640, 0xc808,	0xe67f, 0xc808,		0x21, 0
+	.dw 0xe6c0, 0xc808,	0xe6ff, 0xc808,		0x21, 0
+	.dw 0xe740, 0xc808,	0xe77f, 0xc808,		0x21, 0
+	.dw 0xe7c0, 0xc808,	0xe7ff, 0xc808,		0x21, 0
+	.dw 0xe840, 0xc808,	0xe87f, 0xc808,		0x21, 0
+	.dw 0xe8c0, 0xc808,	0xe8ff, 0xc808,		0x21, 0
+	.dw 0xe940, 0xc808,	0xe97f, 0xc808,		0x21, 0
+	.dw 0xe9c0, 0xc808,	0xe9ff, 0xc808,		0x21, 0
+	.dw 0xea40, 0xc808,	0xea7f, 0xc808,		0x21, 0
+	.dw 0xeac0, 0xc808,	0xeaff, 0xc808,		0x21, 0
+	.dw 0xeb40, 0xc808,	0xeb7f, 0xc808,		0x21, 0
+	.dw 0xebc0, 0xc808,	0xebff, 0xc808,		0x21, 0
+	.dw 0xec40, 0xc808,	0xec7f, 0xc808,		0x21, 0
+	.dw 0xecc0, 0xc808,	0xecff, 0xc808,		0x21, 0
+	.dw 0xed40, 0xc808,	0xed7f, 0xc808,		0x21, 0
+	.dw 0xedc0, 0xc808,	0xedff, 0xc808,		0x21, 0
+	.dw 0xee40, 0xc808,	0xee7f, 0xc808,		0x21, 0
+	.dw 0xeec0, 0xc808,	0xeeff, 0xc808,		0x21, 0
+	.dw 0xef40, 0xc808,	0xef7f, 0xc808,		0x21, 0
+	.dw 0xefc0, 0xc808,	0xefff, 0xc808,		0x21, 0
+	.dw 0xf040, 0xc808,	0xf07f, 0xc808,		0x21, 0
+	.dw 0xf0c0, 0xc808,	0xf0ff, 0xc808,		0x21, 0
+	.dw 0xf140, 0xc808,	0xf17f, 0xc808,		0x21, 0
+	.dw 0xf1c0, 0xc808,	0xf1ff, 0xc808,		0x21, 0
+	.dw 0xf240, 0xc808,	0xf27f, 0xc808,		0x21, 0
+	.dw 0xf2c0, 0xc808,	0xf2ff, 0xc808,		0x21, 0
+	.dw 0xf340, 0xc808,	0xf37f, 0xc808,		0x21, 0
+	.dw 0xf3c0, 0xc808,	0xf3ff, 0xc808,		0x21, 0
+	.dw 0xf440, 0xc808,	0xf47f, 0xc808,		0x21, 0
+	.dw 0xf4c0, 0xc808,	0xf4ff, 0xc808,		0x21, 0
+	.dw 0xf540, 0xc808,	0xf57f, 0xc808,		0x21, 0
+	.dw 0xf5c0, 0xc808,	0xf5ff, 0xc808,		0x21, 0
+	.dw 0xf640, 0xc808,	0xf67f, 0xc808,		0x21, 0
+	.dw 0xf6c0, 0xc808,	0xf6ff, 0xc808,		0x21, 0
+	.dw 0xf740, 0xc808,	0xf77f, 0xc808,		0x21, 0
+	.dw 0xf7c0, 0xc808,	0xf7ff, 0xc808,		0x21, 0
+	.dw 0xf840, 0xc808,	0xf87f, 0xc808,		0x21, 0
+	.dw 0xf8c0, 0xc808,	0xf8ff, 0xc808,		0x21, 0
+	.dw 0xf940, 0xc808,	0xf97f, 0xc808,		0x21, 0
+	.dw 0xf9c0, 0xc808,	0x1fff, 0xc809,		0x21, 0
+	.dw 0x2040, 0xc809,	0x207f, 0xc809,		0x21, 0
+	.dw 0x20c0, 0xc809,	0x20ff, 0xc809,		0x21, 0
+	.dw 0x2140, 0xc809,	0x217f, 0xc809,		0x21, 0
+	.dw 0x21c0, 0xc809,	0x21ff, 0xc809,		0x21, 0
+	.dw 0x2240, 0xc809,	0x227f, 0xc809,		0x21, 0
+	.dw 0x22c0, 0xc809,	0x22ff, 0xc809,		0x21, 0
+	.dw 0x2340, 0xc809,	0x237f, 0xc809,		0x21, 0
+	.dw 0x23c0, 0xc809,	0x23ff, 0xc809,		0x21, 0
+	.dw 0x2440, 0xc809,	0x247f, 0xc809,		0x21, 0
+	.dw 0x24c0, 0xc809,	0x24ff, 0xc809,		0x21, 0
+	.dw 0x2540, 0xc809,	0x257f, 0xc809,		0x21, 0
+	.dw 0x25c0, 0xc809,	0x25ff, 0xc809,		0x21, 0
+	.dw 0x2640, 0xc809,	0x267f, 0xc809,		0x21, 0
+	.dw 0x26c0, 0xc809,	0x26ff, 0xc809,		0x21, 0
+	.dw 0x2740, 0xc809,	0x277f, 0xc809,		0x21, 0
+	.dw 0x27c0, 0xc809,	0x27ff, 0xc809,		0x21, 0
+	.dw 0x2840, 0xc809,	0x287f, 0xc809,		0x21, 0
+	.dw 0x28c0, 0xc809,	0x28ff, 0xc809,		0x21, 0
+	.dw 0x2940, 0xc809,	0x297f, 0xc809,		0x21, 0
+	.dw 0x29c0, 0xc809,	0x29ff, 0xc809,		0x21, 0
+	.dw 0x2a40, 0xc809,	0x2a7f, 0xc809,		0x21, 0
+	.dw 0x2ac0, 0xc809,	0x2aff, 0xc809,		0x21, 0
+	.dw 0x2b40, 0xc809,	0x2b7f, 0xc809,		0x21, 0
+	.dw 0x2bc0, 0xc809,	0x2bff, 0xc809,		0x21, 0
+	.dw 0x2c40, 0xc809,	0x2c7f, 0xc809,		0x21, 0
+	.dw 0x2cc0, 0xc809,	0x2cff, 0xc809,		0x21, 0
+	.dw 0x2d40, 0xc809,	0x2d7f, 0xc809,		0x21, 0
+	.dw 0x2dc0, 0xc809,	0x2dff, 0xc809,		0x21, 0
+	.dw 0x2e40, 0xc809,	0x2e7f, 0xc809,		0x21, 0
+	.dw 0x2ec0, 0xc809,	0x2eff, 0xc809,		0x21, 0
+	.dw 0x2f40, 0xc809,	0x2f7f, 0xc809,		0x21, 0
+	.dw 0x2fc0, 0xc809,	0x2fff, 0xc809,		0x21, 0
+	.dw 0x3040, 0xc809,	0x307f, 0xc809,		0x21, 0
+	.dw 0x30c0, 0xc809,	0x30ff, 0xc809,		0x21, 0
+	.dw 0x3140, 0xc809,	0x317f, 0xc809,		0x21, 0
+	.dw 0x31c0, 0xc809,	0x31ff, 0xc809,		0x21, 0
+	.dw 0x3240, 0xc809,	0x327f, 0xc809,		0x21, 0
+	.dw 0x32c0, 0xc809,	0x32ff, 0xc809,		0x21, 0
+	.dw 0x3340, 0xc809,	0x337f, 0xc809,		0x21, 0
+	.dw 0x33c0, 0xc809,	0x33ff, 0xc809,		0x21, 0
+	.dw 0x3440, 0xc809,	0x347f, 0xc809,		0x21, 0
+	.dw 0x34c0, 0xc809,	0x34ff, 0xc809,		0x21, 0
+	.dw 0x3540, 0xc809,	0x357f, 0xc809,		0x21, 0
+	.dw 0x35c0, 0xc809,	0x35ff, 0xc809,		0x21, 0
+	.dw 0x3640, 0xc809,	0x367f, 0xc809,		0x21, 0
+	.dw 0x36c0, 0xc809,	0x36ff, 0xc809,		0x21, 0
+	.dw 0x3740, 0xc809,	0x377f, 0xc809,		0x21, 0
+	.dw 0x37c0, 0xc809,	0x37ff, 0xc809,		0x21, 0
+	.dw 0x3840, 0xc809,	0x387f, 0xc809,		0x21, 0
+	.dw 0x38c0, 0xc809,	0x38ff, 0xc809,		0x21, 0
+	.dw 0x3940, 0xc809,	0x397f, 0xc809,		0x21, 0
+	.dw 0x39c0, 0xc809,	0x5fff, 0xc809,		0x21, 0
+	.dw 0x6040, 0xc809,	0x607f, 0xc809,		0x21, 0
+	.dw 0x60c0, 0xc809,	0x60ff, 0xc809,		0x21, 0
+	.dw 0x6140, 0xc809,	0x617f, 0xc809,		0x21, 0
+	.dw 0x61c0, 0xc809,	0x61ff, 0xc809,		0x21, 0
+	.dw 0x6240, 0xc809,	0x627f, 0xc809,		0x21, 0
+	.dw 0x62c0, 0xc809,	0x62ff, 0xc809,		0x21, 0
+	.dw 0x6340, 0xc809,	0x637f, 0xc809,		0x21, 0
+	.dw 0x63c0, 0xc809,	0x63ff, 0xc809,		0x21, 0
+	.dw 0x6440, 0xc809,	0x647f, 0xc809,		0x21, 0
+	.dw 0x64c0, 0xc809,	0x64ff, 0xc809,		0x21, 0
+	.dw 0x6540, 0xc809,	0x657f, 0xc809,		0x21, 0
+	.dw 0x65c0, 0xc809,	0x65ff, 0xc809,		0x21, 0
+	.dw 0x6640, 0xc809,	0x667f, 0xc809,		0x21, 0
+	.dw 0x66c0, 0xc809,	0x66ff, 0xc809,		0x21, 0
+	.dw 0x6740, 0xc809,	0x677f, 0xc809,		0x21, 0
+	.dw 0x67c0, 0xc809,	0x67ff, 0xc809,		0x21, 0
+	.dw 0x6840, 0xc809,	0x687f, 0xc809,		0x21, 0
+	.dw 0x68c0, 0xc809,	0x68ff, 0xc809,		0x21, 0
+	.dw 0x6940, 0xc809,	0x697f, 0xc809,		0x21, 0
+	.dw 0x69c0, 0xc809,	0x69ff, 0xc809,		0x21, 0
+	.dw 0x6a40, 0xc809,	0x6a7f, 0xc809,		0x21, 0
+	.dw 0x6ac0, 0xc809,	0x6aff, 0xc809,		0x21, 0
+	.dw 0x6b40, 0xc809,	0x6b7f, 0xc809,		0x21, 0
+	.dw 0x6bc0, 0xc809,	0x6bff, 0xc809,		0x21, 0
+	.dw 0x6c40, 0xc809,	0x6c7f, 0xc809,		0x21, 0
+	.dw 0x6cc0, 0xc809,	0x6cff, 0xc809,		0x21, 0
+	.dw 0x6d40, 0xc809,	0x6d7f, 0xc809,		0x21, 0
+	.dw 0x6dc0, 0xc809,	0x6dff, 0xc809,		0x21, 0
+	.dw 0x6e40, 0xc809,	0x6e7f, 0xc809,		0x21, 0
+	.dw 0x6ec0, 0xc809,	0x6eff, 0xc809,		0x21, 0
+	.dw 0x6f40, 0xc809,	0x6f7f, 0xc809,		0x21, 0
+	.dw 0x6fc0, 0xc809,	0x6fff, 0xc809,		0x21, 0
+	.dw 0x7040, 0xc809,	0x707f, 0xc809,		0x21, 0
+	.dw 0x70c0, 0xc809,	0x70ff, 0xc809,		0x21, 0
+	.dw 0x7140, 0xc809,	0x717f, 0xc809,		0x21, 0
+	.dw 0x71c0, 0xc809,	0x71ff, 0xc809,		0x21, 0
+	.dw 0x7240, 0xc809,	0x727f, 0xc809,		0x21, 0
+	.dw 0x72c0, 0xc809,	0x72ff, 0xc809,		0x21, 0
+	.dw 0x7340, 0xc809,	0x737f, 0xc809,		0x21, 0
+	.dw 0x73c0, 0xc809,	0x73ff, 0xc809,		0x21, 0
+	.dw 0x7440, 0xc809,	0x747f, 0xc809,		0x21, 0
+	.dw 0x74c0, 0xc809,	0x74ff, 0xc809,		0x21, 0
+	.dw 0x7540, 0xc809,	0x757f, 0xc809,		0x21, 0
+	.dw 0x75c0, 0xc809,	0x75ff, 0xc809,		0x21, 0
+	.dw 0x7640, 0xc809,	0x767f, 0xc809,		0x21, 0
+	.dw 0x76c0, 0xc809,	0x76ff, 0xc809,		0x21, 0
+	.dw 0x7740, 0xc809,	0x777f, 0xc809,		0x21, 0
+	.dw 0x77c0, 0xc809,	0x77ff, 0xc809,		0x21, 0
+	.dw 0x7840, 0xc809,	0x787f, 0xc809,		0x21, 0
+	.dw 0x78c0, 0xc809,	0x78ff, 0xc809,		0x21, 0
+	.dw 0x7940, 0xc809,	0x797f, 0xc809,		0x21, 0
+	.dw 0x79c0, 0xc809,	0x9fff, 0xc809,		0x21, 0
+	.dw 0xa040, 0xc809,	0xa07f, 0xc809,		0x21, 0
+	.dw 0xa0c0, 0xc809,	0xa0ff, 0xc809,		0x21, 0
+	.dw 0xa140, 0xc809,	0xa17f, 0xc809,		0x21, 0
+	.dw 0xa1c0, 0xc809,	0xa1ff, 0xc809,		0x21, 0
+	.dw 0xa240, 0xc809,	0xa27f, 0xc809,		0x21, 0
+	.dw 0xa2c0, 0xc809,	0xa2ff, 0xc809,		0x21, 0
+	.dw 0xa340, 0xc809,	0xa37f, 0xc809,		0x21, 0
+	.dw 0xa3c0, 0xc809,	0xa3ff, 0xc809,		0x21, 0
+	.dw 0xa440, 0xc809,	0xa47f, 0xc809,		0x21, 0
+	.dw 0xa4c0, 0xc809,	0xa4ff, 0xc809,		0x21, 0
+	.dw 0xa540, 0xc809,	0xa57f, 0xc809,		0x21, 0
+	.dw 0xa5c0, 0xc809,	0xa5ff, 0xc809,		0x21, 0
+	.dw 0xa640, 0xc809,	0xa67f, 0xc809,		0x21, 0
+	.dw 0xa6c0, 0xc809,	0xa6ff, 0xc809,		0x21, 0
+	.dw 0xa740, 0xc809,	0xa77f, 0xc809,		0x21, 0
+	.dw 0xa7c0, 0xc809,	0xa7ff, 0xc809,		0x21, 0
+	.dw 0xa840, 0xc809,	0xa87f, 0xc809,		0x21, 0
+	.dw 0xa8c0, 0xc809,	0xa8ff, 0xc809,		0x21, 0
+	.dw 0xa940, 0xc809,	0xa97f, 0xc809,		0x21, 0
+	.dw 0xa9c0, 0xc809,	0xa9ff, 0xc809,		0x21, 0
+	.dw 0xaa40, 0xc809,	0xaa7f, 0xc809,		0x21, 0
+	.dw 0xaac0, 0xc809,	0xaaff, 0xc809,		0x21, 0
+	.dw 0xab40, 0xc809,	0xab7f, 0xc809,		0x21, 0
+	.dw 0xabc0, 0xc809,	0xabff, 0xc809,		0x21, 0
+	.dw 0xac40, 0xc809,	0xac7f, 0xc809,		0x21, 0
+	.dw 0xacc0, 0xc809,	0xacff, 0xc809,		0x21, 0
+	.dw 0xad40, 0xc809,	0xad7f, 0xc809,		0x21, 0
+	.dw 0xadc0, 0xc809,	0xadff, 0xc809,		0x21, 0
+	.dw 0xae40, 0xc809,	0xae7f, 0xc809,		0x21, 0
+	.dw 0xaec0, 0xc809,	0xaeff, 0xc809,		0x21, 0
+	.dw 0xaf40, 0xc809,	0xaf7f, 0xc809,		0x21, 0
+	.dw 0xafc0, 0xc809,	0xafff, 0xc809,		0x21, 0
+	.dw 0xb040, 0xc809,	0xb07f, 0xc809,		0x21, 0
+	.dw 0xb0c0, 0xc809,	0xb0ff, 0xc809,		0x21, 0
+	.dw 0xb140, 0xc809,	0xb17f, 0xc809,		0x21, 0
+	.dw 0xb1c0, 0xc809,	0xb1ff, 0xc809,		0x21, 0
+	.dw 0xb240, 0xc809,	0xb27f, 0xc809,		0x21, 0
+	.dw 0xb2c0, 0xc809,	0xb2ff, 0xc809,		0x21, 0
+	.dw 0xb340, 0xc809,	0xb37f, 0xc809,		0x21, 0
+	.dw 0xb3c0, 0xc809,	0xb3ff, 0xc809,		0x21, 0
+	.dw 0xb440, 0xc809,	0xb47f, 0xc809,		0x21, 0
+	.dw 0xb4c0, 0xc809,	0xb4ff, 0xc809,		0x21, 0
+	.dw 0xb540, 0xc809,	0xb57f, 0xc809,		0x21, 0
+	.dw 0xb5c0, 0xc809,	0xb5ff, 0xc809,		0x21, 0
+	.dw 0xb640, 0xc809,	0xb67f, 0xc809,		0x21, 0
+	.dw 0xb6c0, 0xc809,	0xb6ff, 0xc809,		0x21, 0
+	.dw 0xb740, 0xc809,	0xb77f, 0xc809,		0x21, 0
+	.dw 0xb7c0, 0xc809,	0xb7ff, 0xc809,		0x21, 0
+	.dw 0xb840, 0xc809,	0xb87f, 0xc809,		0x21, 0
+	.dw 0xb8c0, 0xc809,	0xb8ff, 0xc809,		0x21, 0
+	.dw 0xb940, 0xc809,	0xb97f, 0xc809,		0x21, 0
+	.dw 0xb9c0, 0xc809,	0xdfff, 0xc809,		0x21, 0
+	.dw 0xe040, 0xc809,	0xe07f, 0xc809,		0x21, 0
+	.dw 0xe0c0, 0xc809,	0xe0ff, 0xc809,		0x21, 0
+	.dw 0xe140, 0xc809,	0xe17f, 0xc809,		0x21, 0
+	.dw 0xe1c0, 0xc809,	0xe1ff, 0xc809,		0x21, 0
+	.dw 0xe240, 0xc809,	0xe27f, 0xc809,		0x21, 0
+	.dw 0xe2c0, 0xc809,	0xe2ff, 0xc809,		0x21, 0
+	.dw 0xe340, 0xc809,	0xe37f, 0xc809,		0x21, 0
+	.dw 0xe3c0, 0xc809,	0xe3ff, 0xc809,		0x21, 0
+	.dw 0xe440, 0xc809,	0xe47f, 0xc809,		0x21, 0
+	.dw 0xe4c0, 0xc809,	0xe4ff, 0xc809,		0x21, 0
+	.dw 0xe540, 0xc809,	0xe57f, 0xc809,		0x21, 0
+	.dw 0xe5c0, 0xc809,	0xe5ff, 0xc809,		0x21, 0
+	.dw 0xe640, 0xc809,	0xe67f, 0xc809,		0x21, 0
+	.dw 0xe6c0, 0xc809,	0xe6ff, 0xc809,		0x21, 0
+	.dw 0xe740, 0xc809,	0xe77f, 0xc809,		0x21, 0
+	.dw 0xe7c0, 0xc809,	0xe7ff, 0xc809,		0x21, 0
+	.dw 0xe840, 0xc809,	0xe87f, 0xc809,		0x21, 0
+	.dw 0xe8c0, 0xc809,	0xe8ff, 0xc809,		0x21, 0
+	.dw 0xe940, 0xc809,	0xe97f, 0xc809,		0x21, 0
+	.dw 0xe9c0, 0xc809,	0xe9ff, 0xc809,		0x21, 0
+	.dw 0xea40, 0xc809,	0xea7f, 0xc809,		0x21, 0
+	.dw 0xeac0, 0xc809,	0xeaff, 0xc809,		0x21, 0
+	.dw 0xeb40, 0xc809,	0xeb7f, 0xc809,		0x21, 0
+	.dw 0xebc0, 0xc809,	0xebff, 0xc809,		0x21, 0
+	.dw 0xec40, 0xc809,	0xec7f, 0xc809,		0x21, 0
+	.dw 0xecc0, 0xc809,	0xecff, 0xc809,		0x21, 0
+	.dw 0xed40, 0xc809,	0xed7f, 0xc809,		0x21, 0
+	.dw 0xedc0, 0xc809,	0xedff, 0xc809,		0x21, 0
+	.dw 0xee40, 0xc809,	0xee7f, 0xc809,		0x21, 0
+	.dw 0xeec0, 0xc809,	0xeeff, 0xc809,		0x21, 0
+	.dw 0xef40, 0xc809,	0xef7f, 0xc809,		0x21, 0
+	.dw 0xefc0, 0xc809,	0xefff, 0xc809,		0x21, 0
+	.dw 0xf040, 0xc809,	0xf07f, 0xc809,		0x21, 0
+	.dw 0xf0c0, 0xc809,	0xf0ff, 0xc809,		0x21, 0
+	.dw 0xf140, 0xc809,	0xf17f, 0xc809,		0x21, 0
+	.dw 0xf1c0, 0xc809,	0xf1ff, 0xc809,		0x21, 0
+	.dw 0xf240, 0xc809,	0xf27f, 0xc809,		0x21, 0
+	.dw 0xf2c0, 0xc809,	0xf2ff, 0xc809,		0x21, 0
+	.dw 0xf340, 0xc809,	0xf37f, 0xc809,		0x21, 0
+	.dw 0xf3c0, 0xc809,	0xf3ff, 0xc809,		0x21, 0
+	.dw 0xf440, 0xc809,	0xf47f, 0xc809,		0x21, 0
+	.dw 0xf4c0, 0xc809,	0xf4ff, 0xc809,		0x21, 0
+	.dw 0xf540, 0xc809,	0xf57f, 0xc809,		0x21, 0
+	.dw 0xf5c0, 0xc809,	0xf5ff, 0xc809,		0x21, 0
+	.dw 0xf640, 0xc809,	0xf67f, 0xc809,		0x21, 0
+	.dw 0xf6c0, 0xc809,	0xf6ff, 0xc809,		0x21, 0
+	.dw 0xf740, 0xc809,	0xf77f, 0xc809,		0x21, 0
+	.dw 0xf7c0, 0xc809,	0xf7ff, 0xc809,		0x21, 0
+	.dw 0xf840, 0xc809,	0xf87f, 0xc809,		0x21, 0
+	.dw 0xf8c0, 0xc809,	0xf8ff, 0xc809,		0x21, 0
+	.dw 0xf940, 0xc809,	0xf97f, 0xc809,		0x21, 0
+	.dw 0xf9c0, 0xc809,	0x1fff, 0xc80a,		0x21, 0
+	.dw 0x2040, 0xc80a,	0x207f, 0xc80a,		0x21, 0
+	.dw 0x20c0, 0xc80a,	0x20ff, 0xc80a,		0x21, 0
+	.dw 0x2140, 0xc80a,	0x217f, 0xc80a,		0x21, 0
+	.dw 0x21c0, 0xc80a,	0x21ff, 0xc80a,		0x21, 0
+	.dw 0x2240, 0xc80a,	0x227f, 0xc80a,		0x21, 0
+	.dw 0x22c0, 0xc80a,	0x22ff, 0xc80a,		0x21, 0
+	.dw 0x2340, 0xc80a,	0x237f, 0xc80a,		0x21, 0
+	.dw 0x23c0, 0xc80a,	0x23ff, 0xc80a,		0x21, 0
+	.dw 0x2440, 0xc80a,	0x247f, 0xc80a,		0x21, 0
+	.dw 0x24c0, 0xc80a,	0x24ff, 0xc80a,		0x21, 0
+	.dw 0x2540, 0xc80a,	0x257f, 0xc80a,		0x21, 0
+	.dw 0x25c0, 0xc80a,	0x25ff, 0xc80a,		0x21, 0
+	.dw 0x2640, 0xc80a,	0x267f, 0xc80a,		0x21, 0
+	.dw 0x26c0, 0xc80a,	0x26ff, 0xc80a,		0x21, 0
+	.dw 0x2740, 0xc80a,	0x277f, 0xc80a,		0x21, 0
+	.dw 0x27c0, 0xc80a,	0x27ff, 0xc80a,		0x21, 0
+	.dw 0x2840, 0xc80a,	0x287f, 0xc80a,		0x21, 0
+	.dw 0x28c0, 0xc80a,	0x28ff, 0xc80a,		0x21, 0
+	.dw 0x2940, 0xc80a,	0x297f, 0xc80a,		0x21, 0
+	.dw 0x29c0, 0xc80a,	0x29ff, 0xc80a,		0x21, 0
+	.dw 0x2a40, 0xc80a,	0x2a7f, 0xc80a,		0x21, 0
+	.dw 0x2ac0, 0xc80a,	0x2aff, 0xc80a,		0x21, 0
+	.dw 0x2b40, 0xc80a,	0x2b7f, 0xc80a,		0x21, 0
+	.dw 0x2bc0, 0xc80a,	0x2bff, 0xc80a,		0x21, 0
+	.dw 0x2c40, 0xc80a,	0x2c7f, 0xc80a,		0x21, 0
+	.dw 0x2cc0, 0xc80a,	0x2cff, 0xc80a,		0x21, 0
+	.dw 0x2d40, 0xc80a,	0x2d7f, 0xc80a,		0x21, 0
+	.dw 0x2dc0, 0xc80a,	0x2dff, 0xc80a,		0x21, 0
+	.dw 0x2e40, 0xc80a,	0x2e7f, 0xc80a,		0x21, 0
+	.dw 0x2ec0, 0xc80a,	0x2eff, 0xc80a,		0x21, 0
+	.dw 0x2f40, 0xc80a,	0x2f7f, 0xc80a,		0x21, 0
+	.dw 0x2fc0, 0xc80a,	0x2fff, 0xc80a,		0x21, 0
+	.dw 0x3040, 0xc80a,	0x307f, 0xc80a,		0x21, 0
+	.dw 0x30c0, 0xc80a,	0x30ff, 0xc80a,		0x21, 0
+	.dw 0x3140, 0xc80a,	0x317f, 0xc80a,		0x21, 0
+	.dw 0x31c0, 0xc80a,	0x31ff, 0xc80a,		0x21, 0
+	.dw 0x3240, 0xc80a,	0x327f, 0xc80a,		0x21, 0
+	.dw 0x32c0, 0xc80a,	0x32ff, 0xc80a,		0x21, 0
+	.dw 0x3340, 0xc80a,	0x337f, 0xc80a,		0x21, 0
+	.dw 0x33c0, 0xc80a,	0x33ff, 0xc80a,		0x21, 0
+	.dw 0x3440, 0xc80a,	0x347f, 0xc80a,		0x21, 0
+	.dw 0x34c0, 0xc80a,	0x34ff, 0xc80a,		0x21, 0
+	.dw 0x3540, 0xc80a,	0x357f, 0xc80a,		0x21, 0
+	.dw 0x35c0, 0xc80a,	0x35ff, 0xc80a,		0x21, 0
+	.dw 0x3640, 0xc80a,	0x367f, 0xc80a,		0x21, 0
+	.dw 0x36c0, 0xc80a,	0x36ff, 0xc80a,		0x21, 0
+	.dw 0x3740, 0xc80a,	0x377f, 0xc80a,		0x21, 0
+	.dw 0x37c0, 0xc80a,	0x37ff, 0xc80a,		0x21, 0
+	.dw 0x3840, 0xc80a,	0x387f, 0xc80a,		0x21, 0
+	.dw 0x38c0, 0xc80a,	0x38ff, 0xc80a,		0x21, 0
+	.dw 0x3940, 0xc80a,	0x397f, 0xc80a,		0x21, 0
+	.dw 0x39c0, 0xc80a,	0x5fff, 0xc80a,		0x21, 0
+	.dw 0x6040, 0xc80a,	0x607f, 0xc80a,		0x21, 0
+	.dw 0x60c0, 0xc80a,	0x60ff, 0xc80a,		0x21, 0
+	.dw 0x6140, 0xc80a,	0x617f, 0xc80a,		0x21, 0
+	.dw 0x61c0, 0xc80a,	0x61ff, 0xc80a,		0x21, 0
+	.dw 0x6240, 0xc80a,	0x627f, 0xc80a,		0x21, 0
+	.dw 0x62c0, 0xc80a,	0x62ff, 0xc80a,		0x21, 0
+	.dw 0x6340, 0xc80a,	0x637f, 0xc80a,		0x21, 0
+	.dw 0x63c0, 0xc80a,	0x63ff, 0xc80a,		0x21, 0
+	.dw 0x6440, 0xc80a,	0x647f, 0xc80a,		0x21, 0
+	.dw 0x64c0, 0xc80a,	0x64ff, 0xc80a,		0x21, 0
+	.dw 0x6540, 0xc80a,	0x657f, 0xc80a,		0x21, 0
+	.dw 0x65c0, 0xc80a,	0x65ff, 0xc80a,		0x21, 0
+	.dw 0x6640, 0xc80a,	0x667f, 0xc80a,		0x21, 0
+	.dw 0x66c0, 0xc80a,	0x66ff, 0xc80a,		0x21, 0
+	.dw 0x6740, 0xc80a,	0x677f, 0xc80a,		0x21, 0
+	.dw 0x67c0, 0xc80a,	0x67ff, 0xc80a,		0x21, 0
+	.dw 0x6840, 0xc80a,	0x687f, 0xc80a,		0x21, 0
+	.dw 0x68c0, 0xc80a,	0x68ff, 0xc80a,		0x21, 0
+	.dw 0x6940, 0xc80a,	0x697f, 0xc80a,		0x21, 0
+	.dw 0x69c0, 0xc80a,	0x69ff, 0xc80a,		0x21, 0
+	.dw 0x6a40, 0xc80a,	0x6a7f, 0xc80a,		0x21, 0
+	.dw 0x6ac0, 0xc80a,	0x6aff, 0xc80a,		0x21, 0
+	.dw 0x6b40, 0xc80a,	0x6b7f, 0xc80a,		0x21, 0
+	.dw 0x6bc0, 0xc80a,	0x6bff, 0xc80a,		0x21, 0
+	.dw 0x6c40, 0xc80a,	0x6c7f, 0xc80a,		0x21, 0
+	.dw 0x6cc0, 0xc80a,	0x6cff, 0xc80a,		0x21, 0
+	.dw 0x6d40, 0xc80a,	0x6d7f, 0xc80a,		0x21, 0
+	.dw 0x6dc0, 0xc80a,	0x6dff, 0xc80a,		0x21, 0
+	.dw 0x6e40, 0xc80a,	0x6e7f, 0xc80a,		0x21, 0
+	.dw 0x6ec0, 0xc80a,	0x6eff, 0xc80a,		0x21, 0
+	.dw 0x6f40, 0xc80a,	0x6f7f, 0xc80a,		0x21, 0
+	.dw 0x6fc0, 0xc80a,	0x6fff, 0xc80a,		0x21, 0
+	.dw 0x7040, 0xc80a,	0x707f, 0xc80a,		0x21, 0
+	.dw 0x70c0, 0xc80a,	0x70ff, 0xc80a,		0x21, 0
+	.dw 0x7140, 0xc80a,	0x717f, 0xc80a,		0x21, 0
+	.dw 0x71c0, 0xc80a,	0x71ff, 0xc80a,		0x21, 0
+	.dw 0x7240, 0xc80a,	0x727f, 0xc80a,		0x21, 0
+	.dw 0x72c0, 0xc80a,	0x72ff, 0xc80a,		0x21, 0
+	.dw 0x7340, 0xc80a,	0x737f, 0xc80a,		0x21, 0
+	.dw 0x73c0, 0xc80a,	0x73ff, 0xc80a,		0x21, 0
+	.dw 0x7440, 0xc80a,	0x747f, 0xc80a,		0x21, 0
+	.dw 0x74c0, 0xc80a,	0x74ff, 0xc80a,		0x21, 0
+	.dw 0x7540, 0xc80a,	0x757f, 0xc80a,		0x21, 0
+	.dw 0x75c0, 0xc80a,	0x75ff, 0xc80a,		0x21, 0
+	.dw 0x7640, 0xc80a,	0x767f, 0xc80a,		0x21, 0
+	.dw 0x76c0, 0xc80a,	0x76ff, 0xc80a,		0x21, 0
+	.dw 0x7740, 0xc80a,	0x777f, 0xc80a,		0x21, 0
+	.dw 0x77c0, 0xc80a,	0x77ff, 0xc80a,		0x21, 0
+	.dw 0x7840, 0xc80a,	0x787f, 0xc80a,		0x21, 0
+	.dw 0x78c0, 0xc80a,	0x78ff, 0xc80a,		0x21, 0
+	.dw 0x7940, 0xc80a,	0x797f, 0xc80a,		0x21, 0
+	.dw 0x79c0, 0xc80a,	0x9fff, 0xc80a,		0x21, 0
+	.dw 0xa040, 0xc80a,	0xa07f, 0xc80a,		0x21, 0
+	.dw 0xa0c0, 0xc80a,	0xa0ff, 0xc80a,		0x21, 0
+	.dw 0xa140, 0xc80a,	0xa17f, 0xc80a,		0x21, 0
+	.dw 0xa1c0, 0xc80a,	0xa1ff, 0xc80a,		0x21, 0
+	.dw 0xa240, 0xc80a,	0xa27f, 0xc80a,		0x21, 0
+	.dw 0xa2c0, 0xc80a,	0xa2ff, 0xc80a,		0x21, 0
+	.dw 0xa340, 0xc80a,	0xa37f, 0xc80a,		0x21, 0
+	.dw 0xa3c0, 0xc80a,	0xa3ff, 0xc80a,		0x21, 0
+	.dw 0xa440, 0xc80a,	0xa47f, 0xc80a,		0x21, 0
+	.dw 0xa4c0, 0xc80a,	0xa4ff, 0xc80a,		0x21, 0
+	.dw 0xa540, 0xc80a,	0xa57f, 0xc80a,		0x21, 0
+	.dw 0xa5c0, 0xc80a,	0xa5ff, 0xc80a,		0x21, 0
+	.dw 0xa640, 0xc80a,	0xa67f, 0xc80a,		0x21, 0
+	.dw 0xa6c0, 0xc80a,	0xa6ff, 0xc80a,		0x21, 0
+	.dw 0xa740, 0xc80a,	0xa77f, 0xc80a,		0x21, 0
+	.dw 0xa7c0, 0xc80a,	0xa7ff, 0xc80a,		0x21, 0
+	.dw 0xa840, 0xc80a,	0xa87f, 0xc80a,		0x21, 0
+	.dw 0xa8c0, 0xc80a,	0xa8ff, 0xc80a,		0x21, 0
+	.dw 0xa940, 0xc80a,	0xa97f, 0xc80a,		0x21, 0
+	.dw 0xa9c0, 0xc80a,	0xa9ff, 0xc80a,		0x21, 0
+	.dw 0xaa40, 0xc80a,	0xaa7f, 0xc80a,		0x21, 0
+	.dw 0xaac0, 0xc80a,	0xaaff, 0xc80a,		0x21, 0
+	.dw 0xab40, 0xc80a,	0xab7f, 0xc80a,		0x21, 0
+	.dw 0xabc0, 0xc80a,	0xabff, 0xc80a,		0x21, 0
+	.dw 0xac40, 0xc80a,	0xac7f, 0xc80a,		0x21, 0
+	.dw 0xacc0, 0xc80a,	0xacff, 0xc80a,		0x21, 0
+	.dw 0xad40, 0xc80a,	0xad7f, 0xc80a,		0x21, 0
+	.dw 0xadc0, 0xc80a,	0xadff, 0xc80a,		0x21, 0
+	.dw 0xae40, 0xc80a,	0xae7f, 0xc80a,		0x21, 0
+	.dw 0xaec0, 0xc80a,	0xaeff, 0xc80a,		0x21, 0
+	.dw 0xaf40, 0xc80a,	0xaf7f, 0xc80a,		0x21, 0
+	.dw 0xafc0, 0xc80a,	0xafff, 0xc80a,		0x21, 0
+	.dw 0xb040, 0xc80a,	0xb07f, 0xc80a,		0x21, 0
+	.dw 0xb0c0, 0xc80a,	0xb0ff, 0xc80a,		0x21, 0
+	.dw 0xb140, 0xc80a,	0xb17f, 0xc80a,		0x21, 0
+	.dw 0xb1c0, 0xc80a,	0xb1ff, 0xc80a,		0x21, 0
+	.dw 0xb240, 0xc80a,	0xb27f, 0xc80a,		0x21, 0
+	.dw 0xb2c0, 0xc80a,	0xb2ff, 0xc80a,		0x21, 0
+	.dw 0xb340, 0xc80a,	0xb37f, 0xc80a,		0x21, 0
+	.dw 0xb3c0, 0xc80a,	0xb3ff, 0xc80a,		0x21, 0
+	.dw 0xb440, 0xc80a,	0xb47f, 0xc80a,		0x21, 0
+	.dw 0xb4c0, 0xc80a,	0xb4ff, 0xc80a,		0x21, 0
+	.dw 0xb540, 0xc80a,	0xb57f, 0xc80a,		0x21, 0
+	.dw 0xb5c0, 0xc80a,	0xb5ff, 0xc80a,		0x21, 0
+	.dw 0xb640, 0xc80a,	0xb67f, 0xc80a,		0x21, 0
+	.dw 0xb6c0, 0xc80a,	0xb6ff, 0xc80a,		0x21, 0
+	.dw 0xb740, 0xc80a,	0xb77f, 0xc80a,		0x21, 0
+	.dw 0xb7c0, 0xc80a,	0xb7ff, 0xc80a,		0x21, 0
+	.dw 0xb840, 0xc80a,	0xb87f, 0xc80a,		0x21, 0
+	.dw 0xb8c0, 0xc80a,	0xb8ff, 0xc80a,		0x21, 0
+	.dw 0xb940, 0xc80a,	0xb97f, 0xc80a,		0x21, 0
+	.dw 0xb9c0, 0xc80a,	0xdfff, 0xc80a,		0x21, 0
+	.dw 0xe040, 0xc80a,	0xe07f, 0xc80a,		0x21, 0
+	.dw 0xe0c0, 0xc80a,	0xe0ff, 0xc80a,		0x21, 0
+	.dw 0xe140, 0xc80a,	0xe17f, 0xc80a,		0x21, 0
+	.dw 0xe1c0, 0xc80a,	0xe1ff, 0xc80a,		0x21, 0
+	.dw 0xe240, 0xc80a,	0xe27f, 0xc80a,		0x21, 0
+	.dw 0xe2c0, 0xc80a,	0xe2ff, 0xc80a,		0x21, 0
+	.dw 0xe340, 0xc80a,	0xe37f, 0xc80a,		0x21, 0
+	.dw 0xe3c0, 0xc80a,	0xe3ff, 0xc80a,		0x21, 0
+	.dw 0xe440, 0xc80a,	0xe47f, 0xc80a,		0x21, 0
+	.dw 0xe4c0, 0xc80a,	0xe4ff, 0xc80a,		0x21, 0
+	.dw 0xe540, 0xc80a,	0xe57f, 0xc80a,		0x21, 0
+	.dw 0xe5c0, 0xc80a,	0xe5ff, 0xc80a,		0x21, 0
+	.dw 0xe640, 0xc80a,	0xe67f, 0xc80a,		0x21, 0
+	.dw 0xe6c0, 0xc80a,	0xe6ff, 0xc80a,		0x21, 0
+	.dw 0xe740, 0xc80a,	0xe77f, 0xc80a,		0x21, 0
+	.dw 0xe7c0, 0xc80a,	0xe7ff, 0xc80a,		0x21, 0
+	.dw 0xe840, 0xc80a,	0xe87f, 0xc80a,		0x21, 0
+	.dw 0xe8c0, 0xc80a,	0xe8ff, 0xc80a,		0x21, 0
+	.dw 0xe940, 0xc80a,	0xe97f, 0xc80a,		0x21, 0
+	.dw 0xe9c0, 0xc80a,	0xe9ff, 0xc80a,		0x21, 0
+	.dw 0xea40, 0xc80a,	0xea7f, 0xc80a,		0x21, 0
+	.dw 0xeac0, 0xc80a,	0xeaff, 0xc80a,		0x21, 0
+	.dw 0xeb40, 0xc80a,	0xeb7f, 0xc80a,		0x21, 0
+	.dw 0xebc0, 0xc80a,	0xebff, 0xc80a,		0x21, 0
+	.dw 0xec40, 0xc80a,	0xec7f, 0xc80a,		0x21, 0
+	.dw 0xecc0, 0xc80a,	0xecff, 0xc80a,		0x21, 0
+	.dw 0xed40, 0xc80a,	0xed7f, 0xc80a,		0x21, 0
+	.dw 0xedc0, 0xc80a,	0xedff, 0xc80a,		0x21, 0
+	.dw 0xee40, 0xc80a,	0xee7f, 0xc80a,		0x21, 0
+	.dw 0xeec0, 0xc80a,	0xeeff, 0xc80a,		0x21, 0
+	.dw 0xef40, 0xc80a,	0xef7f, 0xc80a,		0x21, 0
+	.dw 0xefc0, 0xc80a,	0xefff, 0xc80a,		0x21, 0
+	.dw 0xf040, 0xc80a,	0xf07f, 0xc80a,		0x21, 0
+	.dw 0xf0c0, 0xc80a,	0xf0ff, 0xc80a,		0x21, 0
+	.dw 0xf140, 0xc80a,	0xf17f, 0xc80a,		0x21, 0
+	.dw 0xf1c0, 0xc80a,	0xf1ff, 0xc80a,		0x21, 0
+	.dw 0xf240, 0xc80a,	0xf27f, 0xc80a,		0x21, 0
+	.dw 0xf2c0, 0xc80a,	0xf2ff, 0xc80a,		0x21, 0
+	.dw 0xf340, 0xc80a,	0xf37f, 0xc80a,		0x21, 0
+	.dw 0xf3c0, 0xc80a,	0xf3ff, 0xc80a,		0x21, 0
+	.dw 0xf440, 0xc80a,	0xf47f, 0xc80a,		0x21, 0
+	.dw 0xf4c0, 0xc80a,	0xf4ff, 0xc80a,		0x21, 0
+	.dw 0xf540, 0xc80a,	0xf57f, 0xc80a,		0x21, 0
+	.dw 0xf5c0, 0xc80a,	0xf5ff, 0xc80a,		0x21, 0
+	.dw 0xf640, 0xc80a,	0xf67f, 0xc80a,		0x21, 0
+	.dw 0xf6c0, 0xc80a,	0xf6ff, 0xc80a,		0x21, 0
+	.dw 0xf740, 0xc80a,	0xf77f, 0xc80a,		0x21, 0
+	.dw 0xf7c0, 0xc80a,	0xf7ff, 0xc80a,		0x21, 0
+	.dw 0xf840, 0xc80a,	0xf87f, 0xc80a,		0x21, 0
+	.dw 0xf8c0, 0xc80a,	0xf8ff, 0xc80a,		0x21, 0
+	.dw 0xf940, 0xc80a,	0xf97f, 0xc80a,		0x21, 0
+	.dw 0xf9c0, 0xc80a,	0x1fff, 0xc80b,		0x21, 0
+	.dw 0x2040, 0xc80b,	0x207f, 0xc80b,		0x21, 0
+	.dw 0x20c0, 0xc80b,	0x20ff, 0xc80b,		0x21, 0
+	.dw 0x2140, 0xc80b,	0x217f, 0xc80b,		0x21, 0
+	.dw 0x21c0, 0xc80b,	0x21ff, 0xc80b,		0x21, 0
+	.dw 0x2240, 0xc80b,	0x227f, 0xc80b,		0x21, 0
+	.dw 0x22c0, 0xc80b,	0x22ff, 0xc80b,		0x21, 0
+	.dw 0x2340, 0xc80b,	0x237f, 0xc80b,		0x21, 0
+	.dw 0x23c0, 0xc80b,	0x23ff, 0xc80b,		0x21, 0
+	.dw 0x2440, 0xc80b,	0x247f, 0xc80b,		0x21, 0
+	.dw 0x24c0, 0xc80b,	0x24ff, 0xc80b,		0x21, 0
+	.dw 0x2540, 0xc80b,	0x257f, 0xc80b,		0x21, 0
+	.dw 0x25c0, 0xc80b,	0x25ff, 0xc80b,		0x21, 0
+	.dw 0x2640, 0xc80b,	0x267f, 0xc80b,		0x21, 0
+	.dw 0x26c0, 0xc80b,	0x26ff, 0xc80b,		0x21, 0
+	.dw 0x2740, 0xc80b,	0x277f, 0xc80b,		0x21, 0
+	.dw 0x27c0, 0xc80b,	0x27ff, 0xc80b,		0x21, 0
+	.dw 0x2840, 0xc80b,	0x287f, 0xc80b,		0x21, 0
+	.dw 0x28c0, 0xc80b,	0x28ff, 0xc80b,		0x21, 0
+	.dw 0x2940, 0xc80b,	0x297f, 0xc80b,		0x21, 0
+	.dw 0x29c0, 0xc80b,	0x29ff, 0xc80b,		0x21, 0
+	.dw 0x2a40, 0xc80b,	0x2a7f, 0xc80b,		0x21, 0
+	.dw 0x2ac0, 0xc80b,	0x2aff, 0xc80b,		0x21, 0
+	.dw 0x2b40, 0xc80b,	0x2b7f, 0xc80b,		0x21, 0
+	.dw 0x2bc0, 0xc80b,	0x2bff, 0xc80b,		0x21, 0
+	.dw 0x2c40, 0xc80b,	0x2c7f, 0xc80b,		0x21, 0
+	.dw 0x2cc0, 0xc80b,	0x2cff, 0xc80b,		0x21, 0
+	.dw 0x2d40, 0xc80b,	0x2d7f, 0xc80b,		0x21, 0
+	.dw 0x2dc0, 0xc80b,	0x2dff, 0xc80b,		0x21, 0
+	.dw 0x2e40, 0xc80b,	0x2e7f, 0xc80b,		0x21, 0
+	.dw 0x2ec0, 0xc80b,	0x2eff, 0xc80b,		0x21, 0
+	.dw 0x2f40, 0xc80b,	0x2f7f, 0xc80b,		0x21, 0
+	.dw 0x2fc0, 0xc80b,	0x2fff, 0xc80b,		0x21, 0
+	.dw 0x3040, 0xc80b,	0x307f, 0xc80b,		0x21, 0
+	.dw 0x30c0, 0xc80b,	0x30ff, 0xc80b,		0x21, 0
+	.dw 0x3140, 0xc80b,	0x317f, 0xc80b,		0x21, 0
+	.dw 0x31c0, 0xc80b,	0x31ff, 0xc80b,		0x21, 0
+	.dw 0x3240, 0xc80b,	0x327f, 0xc80b,		0x21, 0
+	.dw 0x32c0, 0xc80b,	0x32ff, 0xc80b,		0x21, 0
+	.dw 0x3340, 0xc80b,	0x337f, 0xc80b,		0x21, 0
+	.dw 0x33c0, 0xc80b,	0x33ff, 0xc80b,		0x21, 0
+	.dw 0x3440, 0xc80b,	0x347f, 0xc80b,		0x21, 0
+	.dw 0x34c0, 0xc80b,	0x34ff, 0xc80b,		0x21, 0
+	.dw 0x3540, 0xc80b,	0x357f, 0xc80b,		0x21, 0
+	.dw 0x35c0, 0xc80b,	0x35ff, 0xc80b,		0x21, 0
+	.dw 0x3640, 0xc80b,	0x367f, 0xc80b,		0x21, 0
+	.dw 0x36c0, 0xc80b,	0x36ff, 0xc80b,		0x21, 0
+	.dw 0x3740, 0xc80b,	0x377f, 0xc80b,		0x21, 0
+	.dw 0x37c0, 0xc80b,	0x37ff, 0xc80b,		0x21, 0
+	.dw 0x3840, 0xc80b,	0x387f, 0xc80b,		0x21, 0
+	.dw 0x38c0, 0xc80b,	0x38ff, 0xc80b,		0x21, 0
+	.dw 0x3940, 0xc80b,	0x397f, 0xc80b,		0x21, 0
+	.dw 0x39c0, 0xc80b,	0xffff, 0xc80b,		0x21, 0
+	.dw 0x0040, 0xc80c,	0x007f, 0xc80c,		0x21, 0
+	.dw 0x00c0, 0xc80c,	0x00ff, 0xc80c,		0x21, 0
+	.dw 0x0140, 0xc80c,	0x017f, 0xc80c,		0x21, 0
+	.dw 0x01c0, 0xc80c,	0x01ff, 0xc80c,		0x21, 0
+	.dw 0x0240, 0xc80c,	0x027f, 0xc80c,		0x21, 0
+	.dw 0x02c0, 0xc80c,	0x02ff, 0xc80c,		0x21, 0
+	.dw 0x0340, 0xc80c,	0x037f, 0xc80c,		0x21, 0
+	.dw 0x03c0, 0xc80c,	0x03ff, 0xc80c,		0x21, 0
+	.dw 0x0440, 0xc80c,	0x047f, 0xc80c,		0x21, 0
+	.dw 0x04c0, 0xc80c,	0x04ff, 0xc80c,		0x21, 0
+	.dw 0x0540, 0xc80c,	0x057f, 0xc80c,		0x21, 0
+	.dw 0x05c0, 0xc80c,	0x05ff, 0xc80c,		0x21, 0
+	.dw 0x0640, 0xc80c,	0x067f, 0xc80c,		0x21, 0
+	.dw 0x06c0, 0xc80c,	0x06ff, 0xc80c,		0x21, 0
+	.dw 0x0740, 0xc80c,	0x077f, 0xc80c,		0x21, 0
+	.dw 0x07c0, 0xc80c,	0x07ff, 0xc80c,		0x21, 0
+	.dw 0x0840, 0xc80c,	0x087f, 0xc80c,		0x21, 0
+	.dw 0x08c0, 0xc80c,	0x08ff, 0xc80c,		0x21, 0
+	.dw 0x0940, 0xc80c,	0x097f, 0xc80c,		0x21, 0
+	.dw 0x09c0, 0xc80c,	0x09ff, 0xc80c,		0x21, 0
+	.dw 0x0a40, 0xc80c,	0x0a7f, 0xc80c,		0x21, 0
+	.dw 0x0ac0, 0xc80c,	0x0aff, 0xc80c,		0x21, 0
+	.dw 0x0b40, 0xc80c,	0x0b7f, 0xc80c,		0x21, 0
+	.dw 0x0bc0, 0xc80c,	0x0bff, 0xc80c,		0x21, 0
+	.dw 0x0c40, 0xc80c,	0x0c7f, 0xc80c,		0x21, 0
+	.dw 0x0cc0, 0xc80c,	0x0cff, 0xc80c,		0x21, 0
+	.dw 0x0d40, 0xc80c,	0x0d7f, 0xc80c,		0x21, 0
+	.dw 0x0dc0, 0xc80c,	0x0dff, 0xc80c,		0x21, 0
+	.dw 0x0e40, 0xc80c,	0x0e7f, 0xc80c,		0x21, 0
+	.dw 0x0ec0, 0xc80c,	0x0eff, 0xc80c,		0x21, 0
+	.dw 0x0f40, 0xc80c,	0x0f7f, 0xc80c,		0x21, 0
+	.dw 0x0fc0, 0xc80c,	0x0fff, 0xc80c,		0x21, 0
+	.dw 0x1040, 0xc80c,	0x107f, 0xc80c,		0x21, 0
+	.dw 0x10c0, 0xc80c,	0x10ff, 0xc80c,		0x21, 0
+	.dw 0x1140, 0xc80c,	0x117f, 0xc80c,		0x21, 0
+	.dw 0x11c0, 0xc80c,	0x11ff, 0xc80c,		0x21, 0
+	.dw 0x1240, 0xc80c,	0x127f, 0xc80c,		0x21, 0
+	.dw 0x12c0, 0xc80c,	0x12ff, 0xc80c,		0x21, 0
+	.dw 0x1340, 0xc80c,	0x137f, 0xc80c,		0x21, 0
+	.dw 0x13c0, 0xc80c,	0x13ff, 0xc80c,		0x21, 0
+	.dw 0x1440, 0xc80c,	0x147f, 0xc80c,		0x21, 0
+	.dw 0x14c0, 0xc80c,	0x14ff, 0xc80c,		0x21, 0
+	.dw 0x1540, 0xc80c,	0x157f, 0xc80c,		0x21, 0
+	.dw 0x15c0, 0xc80c,	0x15ff, 0xc80c,		0x21, 0
+	.dw 0x1640, 0xc80c,	0x167f, 0xc80c,		0x21, 0
+	.dw 0x16c0, 0xc80c,	0x16ff, 0xc80c,		0x21, 0
+	.dw 0x1740, 0xc80c,	0x177f, 0xc80c,		0x21, 0
+	.dw 0x17c0, 0xc80c,	0x17ff, 0xc80c,		0x21, 0
+	.dw 0x1840, 0xc80c,	0x187f, 0xc80c,		0x21, 0
+	.dw 0x18c0, 0xc80c,	0x18ff, 0xc80c,		0x21, 0
+	.dw 0x1940, 0xc80c,	0x197f, 0xc80c,		0x21, 0
+	.dw 0x19c0, 0xc80c,	0x1fff, 0xc80c,		0x21, 0
+	.dw 0x2040, 0xc80c,	0x207f, 0xc80c,		0x21, 0
+	.dw 0x20c0, 0xc80c,	0x20ff, 0xc80c,		0x21, 0
+	.dw 0x2140, 0xc80c,	0x217f, 0xc80c,		0x21, 0
+	.dw 0x21c0, 0xc80c,	0x21ff, 0xc80c,		0x21, 0
+	.dw 0x2240, 0xc80c,	0x227f, 0xc80c,		0x21, 0
+	.dw 0x22c0, 0xc80c,	0x22ff, 0xc80c,		0x21, 0
+	.dw 0x2340, 0xc80c,	0x237f, 0xc80c,		0x21, 0
+	.dw 0x23c0, 0xc80c,	0x23ff, 0xc80c,		0x21, 0
+	.dw 0x2440, 0xc80c,	0x247f, 0xc80c,		0x21, 0
+	.dw 0x24c0, 0xc80c,	0x24ff, 0xc80c,		0x21, 0
+	.dw 0x2540, 0xc80c,	0x257f, 0xc80c,		0x21, 0
+	.dw 0x25c0, 0xc80c,	0x25ff, 0xc80c,		0x21, 0
+	.dw 0x2640, 0xc80c,	0x267f, 0xc80c,		0x21, 0
+	.dw 0x26c0, 0xc80c,	0x26ff, 0xc80c,		0x21, 0
+	.dw 0x2740, 0xc80c,	0x277f, 0xc80c,		0x21, 0
+	.dw 0x27c0, 0xc80c,	0x27ff, 0xc80c,		0x21, 0
+	.dw 0x2840, 0xc80c,	0x287f, 0xc80c,		0x21, 0
+	.dw 0x28c0, 0xc80c,	0x28ff, 0xc80c,		0x21, 0
+	.dw 0x2940, 0xc80c,	0x297f, 0xc80c,		0x21, 0
+	.dw 0x29c0, 0xc80c,	0x29ff, 0xc80c,		0x21, 0
+	.dw 0x2a40, 0xc80c,	0x2a7f, 0xc80c,		0x21, 0
+	.dw 0x2ac0, 0xc80c,	0x2aff, 0xc80c,		0x21, 0
+	.dw 0x2b40, 0xc80c,	0x2b7f, 0xc80c,		0x21, 0
+	.dw 0x2bc0, 0xc80c,	0x2bff, 0xc80c,		0x21, 0
+	.dw 0x2c40, 0xc80c,	0x2c7f, 0xc80c,		0x21, 0
+	.dw 0x2cc0, 0xc80c,	0x2cff, 0xc80c,		0x21, 0
+	.dw 0x2d40, 0xc80c,	0x2d7f, 0xc80c,		0x21, 0
+	.dw 0x2dc0, 0xc80c,	0x2dff, 0xc80c,		0x21, 0
+	.dw 0x2e40, 0xc80c,	0x2e7f, 0xc80c,		0x21, 0
+	.dw 0x2ec0, 0xc80c,	0x2eff, 0xc80c,		0x21, 0
+	.dw 0x2f40, 0xc80c,	0x2f7f, 0xc80c,		0x21, 0
+	.dw 0x2fc0, 0xc80c,	0x2fff, 0xc80c,		0x21, 0
+	.dw 0x3040, 0xc80c,	0x307f, 0xc80c,		0x21, 0
+	.dw 0x30c0, 0xc80c,	0x30ff, 0xc80c,		0x21, 0
+	.dw 0x3140, 0xc80c,	0x317f, 0xc80c,		0x21, 0
+	.dw 0x31c0, 0xc80c,	0x31ff, 0xc80c,		0x21, 0
+	.dw 0x3240, 0xc80c,	0x327f, 0xc80c,		0x21, 0
+	.dw 0x32c0, 0xc80c,	0x32ff, 0xc80c,		0x21, 0
+	.dw 0x3340, 0xc80c,	0x337f, 0xc80c,		0x21, 0
+	.dw 0x33c0, 0xc80c,	0x33ff, 0xc80c,		0x21, 0
+	.dw 0x3440, 0xc80c,	0x347f, 0xc80c,		0x21, 0
+	.dw 0x34c0, 0xc80c,	0x34ff, 0xc80c,		0x21, 0
+	.dw 0x3540, 0xc80c,	0x357f, 0xc80c,		0x21, 0
+	.dw 0x35c0, 0xc80c,	0x35ff, 0xc80c,		0x21, 0
+	.dw 0x3640, 0xc80c,	0x367f, 0xc80c,		0x21, 0
+	.dw 0x36c0, 0xc80c,	0x36ff, 0xc80c,		0x21, 0
+	.dw 0x3740, 0xc80c,	0x377f, 0xc80c,		0x21, 0
+	.dw 0x37c0, 0xc80c,	0x37ff, 0xc80c,		0x21, 0
+	.dw 0x3840, 0xc80c,	0x387f, 0xc80c,		0x21, 0
+	.dw 0x38c0, 0xc80c,	0x38ff, 0xc80c,		0x21, 0
+	.dw 0x3940, 0xc80c,	0x397f, 0xc80c,		0x21, 0
+	.dw 0x39c0, 0xc80c,	0x3fff, 0xc80c,		0x21, 0
+	.dw 0x4040, 0xc80c,	0x407f, 0xc80c,		0x21, 0
+	.dw 0x40c0, 0xc80c,	0x40ff, 0xc80c,		0x21, 0
+	.dw 0x4140, 0xc80c,	0x417f, 0xc80c,		0x21, 0
+	.dw 0x41c0, 0xc80c,	0x41ff, 0xc80c,		0x21, 0
+	.dw 0x4240, 0xc80c,	0x427f, 0xc80c,		0x21, 0
+	.dw 0x42c0, 0xc80c,	0x42ff, 0xc80c,		0x21, 0
+	.dw 0x4340, 0xc80c,	0x437f, 0xc80c,		0x21, 0
+	.dw 0x43c0, 0xc80c,	0x43ff, 0xc80c,		0x21, 0
+	.dw 0x4440, 0xc80c,	0x447f, 0xc80c,		0x21, 0
+	.dw 0x44c0, 0xc80c,	0x44ff, 0xc80c,		0x21, 0
+	.dw 0x4540, 0xc80c,	0x457f, 0xc80c,		0x21, 0
+	.dw 0x45c0, 0xc80c,	0x45ff, 0xc80c,		0x21, 0
+	.dw 0x4640, 0xc80c,	0x467f, 0xc80c,		0x21, 0
+	.dw 0x46c0, 0xc80c,	0x46ff, 0xc80c,		0x21, 0
+	.dw 0x4740, 0xc80c,	0x477f, 0xc80c,		0x21, 0
+	.dw 0x47c0, 0xc80c,	0x47ff, 0xc80c,		0x21, 0
+	.dw 0x4840, 0xc80c,	0x487f, 0xc80c,		0x21, 0
+	.dw 0x48c0, 0xc80c,	0x48ff, 0xc80c,		0x21, 0
+	.dw 0x4940, 0xc80c,	0x497f, 0xc80c,		0x21, 0
+	.dw 0x49c0, 0xc80c,	0x49ff, 0xc80c,		0x21, 0
+	.dw 0x4a40, 0xc80c,	0x4a7f, 0xc80c,		0x21, 0
+	.dw 0x4ac0, 0xc80c,	0x4aff, 0xc80c,		0x21, 0
+	.dw 0x4b40, 0xc80c,	0x4b7f, 0xc80c,		0x21, 0
+	.dw 0x4bc0, 0xc80c,	0x4bff, 0xc80c,		0x21, 0
+	.dw 0x4c40, 0xc80c,	0x4c7f, 0xc80c,		0x21, 0
+	.dw 0x4cc0, 0xc80c,	0x4cff, 0xc80c,		0x21, 0
+	.dw 0x4d40, 0xc80c,	0x4d7f, 0xc80c,		0x21, 0
+	.dw 0x4dc0, 0xc80c,	0x4dff, 0xc80c,		0x21, 0
+	.dw 0x4e40, 0xc80c,	0x4e7f, 0xc80c,		0x21, 0
+	.dw 0x4ec0, 0xc80c,	0x4eff, 0xc80c,		0x21, 0
+	.dw 0x4f40, 0xc80c,	0x4f7f, 0xc80c,		0x21, 0
+	.dw 0x4fc0, 0xc80c,	0x4fff, 0xc80c,		0x21, 0
+	.dw 0x5040, 0xc80c,	0x507f, 0xc80c,		0x21, 0
+	.dw 0x50c0, 0xc80c,	0x50ff, 0xc80c,		0x21, 0
+	.dw 0x5140, 0xc80c,	0x517f, 0xc80c,		0x21, 0
+	.dw 0x51c0, 0xc80c,	0x51ff, 0xc80c,		0x21, 0
+	.dw 0x5240, 0xc80c,	0x527f, 0xc80c,		0x21, 0
+	.dw 0x52c0, 0xc80c,	0x52ff, 0xc80c,		0x21, 0
+	.dw 0x5340, 0xc80c,	0x537f, 0xc80c,		0x21, 0
+	.dw 0x53c0, 0xc80c,	0x53ff, 0xc80c,		0x21, 0
+	.dw 0x5440, 0xc80c,	0x547f, 0xc80c,		0x21, 0
+	.dw 0x54c0, 0xc80c,	0x54ff, 0xc80c,		0x21, 0
+	.dw 0x5540, 0xc80c,	0x557f, 0xc80c,		0x21, 0
+	.dw 0x55c0, 0xc80c,	0x55ff, 0xc80c,		0x21, 0
+	.dw 0x5640, 0xc80c,	0x567f, 0xc80c,		0x21, 0
+	.dw 0x56c0, 0xc80c,	0x56ff, 0xc80c,		0x21, 0
+	.dw 0x5740, 0xc80c,	0x577f, 0xc80c,		0x21, 0
+	.dw 0x57c0, 0xc80c,	0x57ff, 0xc80c,		0x21, 0
+	.dw 0x5840, 0xc80c,	0x587f, 0xc80c,		0x21, 0
+	.dw 0x58c0, 0xc80c,	0x58ff, 0xc80c,		0x21, 0
+	.dw 0x5940, 0xc80c,	0x597f, 0xc80c,		0x21, 0
+	.dw 0x59c0, 0xc80c,	0x5fff, 0xc80c,		0x21, 0
+	.dw 0x6040, 0xc80c,	0x607f, 0xc80c,		0x21, 0
+	.dw 0x60c0, 0xc80c,	0x60ff, 0xc80c,		0x21, 0
+	.dw 0x6140, 0xc80c,	0x617f, 0xc80c,		0x21, 0
+	.dw 0x61c0, 0xc80c,	0x61ff, 0xc80c,		0x21, 0
+	.dw 0x6240, 0xc80c,	0x627f, 0xc80c,		0x21, 0
+	.dw 0x62c0, 0xc80c,	0x62ff, 0xc80c,		0x21, 0
+	.dw 0x6340, 0xc80c,	0x637f, 0xc80c,		0x21, 0
+	.dw 0x63c0, 0xc80c,	0x63ff, 0xc80c,		0x21, 0
+	.dw 0x6440, 0xc80c,	0x647f, 0xc80c,		0x21, 0
+	.dw 0x64c0, 0xc80c,	0x64ff, 0xc80c,		0x21, 0
+	.dw 0x6540, 0xc80c,	0x657f, 0xc80c,		0x21, 0
+	.dw 0x65c0, 0xc80c,	0x65ff, 0xc80c,		0x21, 0
+	.dw 0x6640, 0xc80c,	0x667f, 0xc80c,		0x21, 0
+	.dw 0x66c0, 0xc80c,	0x66ff, 0xc80c,		0x21, 0
+	.dw 0x6740, 0xc80c,	0x677f, 0xc80c,		0x21, 0
+	.dw 0x67c0, 0xc80c,	0x67ff, 0xc80c,		0x21, 0
+	.dw 0x6840, 0xc80c,	0x687f, 0xc80c,		0x21, 0
+	.dw 0x68c0, 0xc80c,	0x68ff, 0xc80c,		0x21, 0
+	.dw 0x6940, 0xc80c,	0x697f, 0xc80c,		0x21, 0
+	.dw 0x69c0, 0xc80c,	0x69ff, 0xc80c,		0x21, 0
+	.dw 0x6a40, 0xc80c,	0x6a7f, 0xc80c,		0x21, 0
+	.dw 0x6ac0, 0xc80c,	0x6aff, 0xc80c,		0x21, 0
+	.dw 0x6b40, 0xc80c,	0x6b7f, 0xc80c,		0x21, 0
+	.dw 0x6bc0, 0xc80c,	0x6bff, 0xc80c,		0x21, 0
+	.dw 0x6c40, 0xc80c,	0x6c7f, 0xc80c,		0x21, 0
+	.dw 0x6cc0, 0xc80c,	0x6cff, 0xc80c,		0x21, 0
+	.dw 0x6d40, 0xc80c,	0x6d7f, 0xc80c,		0x21, 0
+	.dw 0x6dc0, 0xc80c,	0x6dff, 0xc80c,		0x21, 0
+	.dw 0x6e40, 0xc80c,	0x6e7f, 0xc80c,		0x21, 0
+	.dw 0x6ec0, 0xc80c,	0x6eff, 0xc80c,		0x21, 0
+	.dw 0x6f40, 0xc80c,	0x6f7f, 0xc80c,		0x21, 0
+	.dw 0x6fc0, 0xc80c,	0x6fff, 0xc80c,		0x21, 0
+	.dw 0x7040, 0xc80c,	0x707f, 0xc80c,		0x21, 0
+	.dw 0x70c0, 0xc80c,	0x70ff, 0xc80c,		0x21, 0
+	.dw 0x7140, 0xc80c,	0x717f, 0xc80c,		0x21, 0
+	.dw 0x71c0, 0xc80c,	0x71ff, 0xc80c,		0x21, 0
+	.dw 0x7240, 0xc80c,	0x727f, 0xc80c,		0x21, 0
+	.dw 0x72c0, 0xc80c,	0x72ff, 0xc80c,		0x21, 0
+	.dw 0x7340, 0xc80c,	0x737f, 0xc80c,		0x21, 0
+	.dw 0x73c0, 0xc80c,	0x73ff, 0xc80c,		0x21, 0
+	.dw 0x7440, 0xc80c,	0x747f, 0xc80c,		0x21, 0
+	.dw 0x74c0, 0xc80c,	0x74ff, 0xc80c,		0x21, 0
+	.dw 0x7540, 0xc80c,	0x757f, 0xc80c,		0x21, 0
+	.dw 0x75c0, 0xc80c,	0x75ff, 0xc80c,		0x21, 0
+	.dw 0x7640, 0xc80c,	0x767f, 0xc80c,		0x21, 0
+	.dw 0x76c0, 0xc80c,	0x76ff, 0xc80c,		0x21, 0
+	.dw 0x7740, 0xc80c,	0x777f, 0xc80c,		0x21, 0
+	.dw 0x77c0, 0xc80c,	0x77ff, 0xc80c,		0x21, 0
+	.dw 0x7840, 0xc80c,	0x787f, 0xc80c,		0x21, 0
+	.dw 0x78c0, 0xc80c,	0x78ff, 0xc80c,		0x21, 0
+	.dw 0x7940, 0xc80c,	0x797f, 0xc80c,		0x21, 0
+	.dw 0x79c0, 0xc80c,	0x7fff, 0xc80c,		0x21, 0
+	.dw 0x8040, 0xc80c,	0x807f, 0xc80c,		0x21, 0
+	.dw 0x80c0, 0xc80c,	0x80ff, 0xc80c,		0x21, 0
+	.dw 0x8140, 0xc80c,	0x817f, 0xc80c,		0x21, 0
+	.dw 0x81c0, 0xc80c,	0x81ff, 0xc80c,		0x21, 0
+	.dw 0x8240, 0xc80c,	0x827f, 0xc80c,		0x21, 0
+	.dw 0x82c0, 0xc80c,	0x82ff, 0xc80c,		0x21, 0
+	.dw 0x8340, 0xc80c,	0x837f, 0xc80c,		0x21, 0
+	.dw 0x83c0, 0xc80c,	0x83ff, 0xc80c,		0x21, 0
+	.dw 0x8440, 0xc80c,	0x847f, 0xc80c,		0x21, 0
+	.dw 0x84c0, 0xc80c,	0x84ff, 0xc80c,		0x21, 0
+	.dw 0x8540, 0xc80c,	0x857f, 0xc80c,		0x21, 0
+	.dw 0x85c0, 0xc80c,	0x85ff, 0xc80c,		0x21, 0
+	.dw 0x8640, 0xc80c,	0x867f, 0xc80c,		0x21, 0
+	.dw 0x86c0, 0xc80c,	0x86ff, 0xc80c,		0x21, 0
+	.dw 0x8740, 0xc80c,	0x877f, 0xc80c,		0x21, 0
+	.dw 0x87c0, 0xc80c,	0x87ff, 0xc80c,		0x21, 0
+	.dw 0x8840, 0xc80c,	0x887f, 0xc80c,		0x21, 0
+	.dw 0x88c0, 0xc80c,	0x88ff, 0xc80c,		0x21, 0
+	.dw 0x8940, 0xc80c,	0x897f, 0xc80c,		0x21, 0
+	.dw 0x89c0, 0xc80c,	0x89ff, 0xc80c,		0x21, 0
+	.dw 0x8a40, 0xc80c,	0x8a7f, 0xc80c,		0x21, 0
+	.dw 0x8ac0, 0xc80c,	0x8aff, 0xc80c,		0x21, 0
+	.dw 0x8b40, 0xc80c,	0x8b7f, 0xc80c,		0x21, 0
+	.dw 0x8bc0, 0xc80c,	0x8bff, 0xc80c,		0x21, 0
+	.dw 0x8c40, 0xc80c,	0x8c7f, 0xc80c,		0x21, 0
+	.dw 0x8cc0, 0xc80c,	0x8cff, 0xc80c,		0x21, 0
+	.dw 0x8d40, 0xc80c,	0x8d7f, 0xc80c,		0x21, 0
+	.dw 0x8dc0, 0xc80c,	0x8dff, 0xc80c,		0x21, 0
+	.dw 0x8e40, 0xc80c,	0x8e7f, 0xc80c,		0x21, 0
+	.dw 0x8ec0, 0xc80c,	0x8eff, 0xc80c,		0x21, 0
+	.dw 0x8f40, 0xc80c,	0x8f7f, 0xc80c,		0x21, 0
+	.dw 0x8fc0, 0xc80c,	0x8fff, 0xc80c,		0x21, 0
+	.dw 0x9040, 0xc80c,	0x907f, 0xc80c,		0x21, 0
+	.dw 0x90c0, 0xc80c,	0x90ff, 0xc80c,		0x21, 0
+	.dw 0x9140, 0xc80c,	0x917f, 0xc80c,		0x21, 0
+	.dw 0x91c0, 0xc80c,	0x91ff, 0xc80c,		0x21, 0
+	.dw 0x9240, 0xc80c,	0x927f, 0xc80c,		0x21, 0
+	.dw 0x92c0, 0xc80c,	0x92ff, 0xc80c,		0x21, 0
+	.dw 0x9340, 0xc80c,	0x937f, 0xc80c,		0x21, 0
+	.dw 0x93c0, 0xc80c,	0x93ff, 0xc80c,		0x21, 0
+	.dw 0x9440, 0xc80c,	0x947f, 0xc80c,		0x21, 0
+	.dw 0x94c0, 0xc80c,	0x94ff, 0xc80c,		0x21, 0
+	.dw 0x9540, 0xc80c,	0x957f, 0xc80c,		0x21, 0
+	.dw 0x95c0, 0xc80c,	0x95ff, 0xc80c,		0x21, 0
+	.dw 0x9640, 0xc80c,	0x967f, 0xc80c,		0x21, 0
+	.dw 0x96c0, 0xc80c,	0x96ff, 0xc80c,		0x21, 0
+	.dw 0x9740, 0xc80c,	0x977f, 0xc80c,		0x21, 0
+	.dw 0x97c0, 0xc80c,	0x97ff, 0xc80c,		0x21, 0
+	.dw 0x9840, 0xc80c,	0x987f, 0xc80c,		0x21, 0
+	.dw 0x98c0, 0xc80c,	0x98ff, 0xc80c,		0x21, 0
+	.dw 0x9940, 0xc80c,	0x997f, 0xc80c,		0x21, 0
+	.dw 0x99c0, 0xc80c,	0x9fff, 0xc80c,		0x21, 0
+	.dw 0xa040, 0xc80c,	0xa07f, 0xc80c,		0x21, 0
+	.dw 0xa0c0, 0xc80c,	0xa0ff, 0xc80c,		0x21, 0
+	.dw 0xa140, 0xc80c,	0xa17f, 0xc80c,		0x21, 0
+	.dw 0xa1c0, 0xc80c,	0xa1ff, 0xc80c,		0x21, 0
+	.dw 0xa240, 0xc80c,	0xa27f, 0xc80c,		0x21, 0
+	.dw 0xa2c0, 0xc80c,	0xa2ff, 0xc80c,		0x21, 0
+	.dw 0xa340, 0xc80c,	0xa37f, 0xc80c,		0x21, 0
+	.dw 0xa3c0, 0xc80c,	0xa3ff, 0xc80c,		0x21, 0
+	.dw 0xa440, 0xc80c,	0xa47f, 0xc80c,		0x21, 0
+	.dw 0xa4c0, 0xc80c,	0xa4ff, 0xc80c,		0x21, 0
+	.dw 0xa540, 0xc80c,	0xa57f, 0xc80c,		0x21, 0
+	.dw 0xa5c0, 0xc80c,	0xa5ff, 0xc80c,		0x21, 0
+	.dw 0xa640, 0xc80c,	0xa67f, 0xc80c,		0x21, 0
+	.dw 0xa6c0, 0xc80c,	0xa6ff, 0xc80c,		0x21, 0
+	.dw 0xa740, 0xc80c,	0xa77f, 0xc80c,		0x21, 0
+	.dw 0xa7c0, 0xc80c,	0xa7ff, 0xc80c,		0x21, 0
+	.dw 0xa840, 0xc80c,	0xa87f, 0xc80c,		0x21, 0
+	.dw 0xa8c0, 0xc80c,	0xa8ff, 0xc80c,		0x21, 0
+	.dw 0xa940, 0xc80c,	0xa97f, 0xc80c,		0x21, 0
+	.dw 0xa9c0, 0xc80c,	0xa9ff, 0xc80c,		0x21, 0
+	.dw 0xaa40, 0xc80c,	0xaa7f, 0xc80c,		0x21, 0
+	.dw 0xaac0, 0xc80c,	0xaaff, 0xc80c,		0x21, 0
+	.dw 0xab40, 0xc80c,	0xab7f, 0xc80c,		0x21, 0
+	.dw 0xabc0, 0xc80c,	0xabff, 0xc80c,		0x21, 0
+	.dw 0xac40, 0xc80c,	0xac7f, 0xc80c,		0x21, 0
+	.dw 0xacc0, 0xc80c,	0xacff, 0xc80c,		0x21, 0
+	.dw 0xad40, 0xc80c,	0xad7f, 0xc80c,		0x21, 0
+	.dw 0xadc0, 0xc80c,	0xadff, 0xc80c,		0x21, 0
+	.dw 0xae40, 0xc80c,	0xae7f, 0xc80c,		0x21, 0
+	.dw 0xaec0, 0xc80c,	0xaeff, 0xc80c,		0x21, 0
+	.dw 0xaf40, 0xc80c,	0xaf7f, 0xc80c,		0x21, 0
+	.dw 0xafc0, 0xc80c,	0xafff, 0xc80c,		0x21, 0
+	.dw 0xb040, 0xc80c,	0xb07f, 0xc80c,		0x21, 0
+	.dw 0xb0c0, 0xc80c,	0xb0ff, 0xc80c,		0x21, 0
+	.dw 0xb140, 0xc80c,	0xb17f, 0xc80c,		0x21, 0
+	.dw 0xb1c0, 0xc80c,	0xb1ff, 0xc80c,		0x21, 0
+	.dw 0xb240, 0xc80c,	0xb27f, 0xc80c,		0x21, 0
+	.dw 0xb2c0, 0xc80c,	0xb2ff, 0xc80c,		0x21, 0
+	.dw 0xb340, 0xc80c,	0xb37f, 0xc80c,		0x21, 0
+	.dw 0xb3c0, 0xc80c,	0xb3ff, 0xc80c,		0x21, 0
+	.dw 0xb440, 0xc80c,	0xb47f, 0xc80c,		0x21, 0
+	.dw 0xb4c0, 0xc80c,	0xb4ff, 0xc80c,		0x21, 0
+	.dw 0xb540, 0xc80c,	0xb57f, 0xc80c,		0x21, 0
+	.dw 0xb5c0, 0xc80c,	0xb5ff, 0xc80c,		0x21, 0
+	.dw 0xb640, 0xc80c,	0xb67f, 0xc80c,		0x21, 0
+	.dw 0xb6c0, 0xc80c,	0xb6ff, 0xc80c,		0x21, 0
+	.dw 0xb740, 0xc80c,	0xb77f, 0xc80c,		0x21, 0
+	.dw 0xb7c0, 0xc80c,	0xb7ff, 0xc80c,		0x21, 0
+	.dw 0xb840, 0xc80c,	0xb87f, 0xc80c,		0x21, 0
+	.dw 0xb8c0, 0xc80c,	0xb8ff, 0xc80c,		0x21, 0
+	.dw 0xb940, 0xc80c,	0xb97f, 0xc80c,		0x21, 0
+	.dw 0xb9c0, 0xc80c,	0xbfff, 0xc80c,		0x21, 0
+	.dw 0xc040, 0xc80c,	0xc07f, 0xc80c,		0x21, 0
+	.dw 0xc0c0, 0xc80c,	0xc0ff, 0xc80c,		0x21, 0
+	.dw 0xc140, 0xc80c,	0xc17f, 0xc80c,		0x21, 0
+	.dw 0xc1c0, 0xc80c,	0xc1ff, 0xc80c,		0x21, 0
+	.dw 0xc240, 0xc80c,	0xc27f, 0xc80c,		0x21, 0
+	.dw 0xc2c0, 0xc80c,	0xc2ff, 0xc80c,		0x21, 0
+	.dw 0xc340, 0xc80c,	0xc37f, 0xc80c,		0x21, 0
+	.dw 0xc3c0, 0xc80c,	0xc3ff, 0xc80c,		0x21, 0
+	.dw 0xc440, 0xc80c,	0xc47f, 0xc80c,		0x21, 0
+	.dw 0xc4c0, 0xc80c,	0xc4ff, 0xc80c,		0x21, 0
+	.dw 0xc540, 0xc80c,	0xc57f, 0xc80c,		0x21, 0
+	.dw 0xc5c0, 0xc80c,	0xc5ff, 0xc80c,		0x21, 0
+	.dw 0xc640, 0xc80c,	0xc67f, 0xc80c,		0x21, 0
+	.dw 0xc6c0, 0xc80c,	0xc6ff, 0xc80c,		0x21, 0
+	.dw 0xc740, 0xc80c,	0xc77f, 0xc80c,		0x21, 0
+	.dw 0xc7c0, 0xc80c,	0xc7ff, 0xc80c,		0x21, 0
+	.dw 0xc840, 0xc80c,	0xc87f, 0xc80c,		0x21, 0
+	.dw 0xc8c0, 0xc80c,	0xc8ff, 0xc80c,		0x21, 0
+	.dw 0xc940, 0xc80c,	0xc97f, 0xc80c,		0x21, 0
+	.dw 0xc9c0, 0xc80c,	0xc9ff, 0xc80c,		0x21, 0
+	.dw 0xca40, 0xc80c,	0xca7f, 0xc80c,		0x21, 0
+	.dw 0xcac0, 0xc80c,	0xcaff, 0xc80c,		0x21, 0
+	.dw 0xcb40, 0xc80c,	0xcb7f, 0xc80c,		0x21, 0
+	.dw 0xcbc0, 0xc80c,	0xcbff, 0xc80c,		0x21, 0
+	.dw 0xcc40, 0xc80c,	0xcc7f, 0xc80c,		0x21, 0
+	.dw 0xccc0, 0xc80c,	0xccff, 0xc80c,		0x21, 0
+	.dw 0xcd40, 0xc80c,	0xcd7f, 0xc80c,		0x21, 0
+	.dw 0xcdc0, 0xc80c,	0xcdff, 0xc80c,		0x21, 0
+	.dw 0xce40, 0xc80c,	0xce7f, 0xc80c,		0x21, 0
+	.dw 0xcec0, 0xc80c,	0xceff, 0xc80c,		0x21, 0
+	.dw 0xcf40, 0xc80c,	0xcf7f, 0xc80c,		0x21, 0
+	.dw 0xcfc0, 0xc80c,	0xcfff, 0xc80c,		0x21, 0
+	.dw 0xd040, 0xc80c,	0xd07f, 0xc80c,		0x21, 0
+	.dw 0xd0c0, 0xc80c,	0xd0ff, 0xc80c,		0x21, 0
+	.dw 0xd140, 0xc80c,	0xd17f, 0xc80c,		0x21, 0
+	.dw 0xd1c0, 0xc80c,	0xd1ff, 0xc80c,		0x21, 0
+	.dw 0xd240, 0xc80c,	0xd27f, 0xc80c,		0x21, 0
+	.dw 0xd2c0, 0xc80c,	0xd2ff, 0xc80c,		0x21, 0
+	.dw 0xd340, 0xc80c,	0xd37f, 0xc80c,		0x21, 0
+	.dw 0xd3c0, 0xc80c,	0xd3ff, 0xc80c,		0x21, 0
+	.dw 0xd440, 0xc80c,	0xd47f, 0xc80c,		0x21, 0
+	.dw 0xd4c0, 0xc80c,	0xd4ff, 0xc80c,		0x21, 0
+	.dw 0xd540, 0xc80c,	0xd57f, 0xc80c,		0x21, 0
+	.dw 0xd5c0, 0xc80c,	0xd5ff, 0xc80c,		0x21, 0
+	.dw 0xd640, 0xc80c,	0xd67f, 0xc80c,		0x21, 0
+	.dw 0xd6c0, 0xc80c,	0xd6ff, 0xc80c,		0x21, 0
+	.dw 0xd740, 0xc80c,	0xd77f, 0xc80c,		0x21, 0
+	.dw 0xd7c0, 0xc80c,	0xd7ff, 0xc80c,		0x21, 0
+	.dw 0xd840, 0xc80c,	0xd87f, 0xc80c,		0x21, 0
+	.dw 0xd8c0, 0xc80c,	0xd8ff, 0xc80c,		0x21, 0
+	.dw 0xd940, 0xc80c,	0xd97f, 0xc80c,		0x21, 0
+	.dw 0xd9c0, 0xc80c,	0xdfff, 0xc80c,		0x21, 0
+	.dw 0xe040, 0xc80c,	0xe07f, 0xc80c,		0x21, 0
+	.dw 0xe0c0, 0xc80c,	0xe0ff, 0xc80c,		0x21, 0
+	.dw 0xe140, 0xc80c,	0xe17f, 0xc80c,		0x21, 0
+	.dw 0xe1c0, 0xc80c,	0xe1ff, 0xc80c,		0x21, 0
+	.dw 0xe240, 0xc80c,	0xe27f, 0xc80c,		0x21, 0
+	.dw 0xe2c0, 0xc80c,	0xe2ff, 0xc80c,		0x21, 0
+	.dw 0xe340, 0xc80c,	0xe37f, 0xc80c,		0x21, 0
+	.dw 0xe3c0, 0xc80c,	0xe3ff, 0xc80c,		0x21, 0
+	.dw 0xe440, 0xc80c,	0xe47f, 0xc80c,		0x21, 0
+	.dw 0xe4c0, 0xc80c,	0xe4ff, 0xc80c,		0x21, 0
+	.dw 0xe540, 0xc80c,	0xe57f, 0xc80c,		0x21, 0
+	.dw 0xe5c0, 0xc80c,	0xe5ff, 0xc80c,		0x21, 0
+	.dw 0xe640, 0xc80c,	0xe67f, 0xc80c,		0x21, 0
+	.dw 0xe6c0, 0xc80c,	0xe6ff, 0xc80c,		0x21, 0
+	.dw 0xe740, 0xc80c,	0xe77f, 0xc80c,		0x21, 0
+	.dw 0xe7c0, 0xc80c,	0xe7ff, 0xc80c,		0x21, 0
+	.dw 0xe840, 0xc80c,	0xe87f, 0xc80c,		0x21, 0
+	.dw 0xe8c0, 0xc80c,	0xe8ff, 0xc80c,		0x21, 0
+	.dw 0xe940, 0xc80c,	0xe97f, 0xc80c,		0x21, 0
+	.dw 0xe9c0, 0xc80c,	0xe9ff, 0xc80c,		0x21, 0
+	.dw 0xea40, 0xc80c,	0xea7f, 0xc80c,		0x21, 0
+	.dw 0xeac0, 0xc80c,	0xeaff, 0xc80c,		0x21, 0
+	.dw 0xeb40, 0xc80c,	0xeb7f, 0xc80c,		0x21, 0
+	.dw 0xebc0, 0xc80c,	0xebff, 0xc80c,		0x21, 0
+	.dw 0xec40, 0xc80c,	0xec7f, 0xc80c,		0x21, 0
+	.dw 0xecc0, 0xc80c,	0xecff, 0xc80c,		0x21, 0
+	.dw 0xed40, 0xc80c,	0xed7f, 0xc80c,		0x21, 0
+	.dw 0xedc0, 0xc80c,	0xedff, 0xc80c,		0x21, 0
+	.dw 0xee40, 0xc80c,	0xee7f, 0xc80c,		0x21, 0
+	.dw 0xeec0, 0xc80c,	0xeeff, 0xc80c,		0x21, 0
+	.dw 0xef40, 0xc80c,	0xef7f, 0xc80c,		0x21, 0
+	.dw 0xefc0, 0xc80c,	0xefff, 0xc80c,		0x21, 0
+	.dw 0xf040, 0xc80c,	0xf07f, 0xc80c,		0x21, 0
+	.dw 0xf0c0, 0xc80c,	0xf0ff, 0xc80c,		0x21, 0
+	.dw 0xf140, 0xc80c,	0xf17f, 0xc80c,		0x21, 0
+	.dw 0xf1c0, 0xc80c,	0xf1ff, 0xc80c,		0x21, 0
+	.dw 0xf240, 0xc80c,	0xf27f, 0xc80c,		0x21, 0
+	.dw 0xf2c0, 0xc80c,	0xf2ff, 0xc80c,		0x21, 0
+	.dw 0xf340, 0xc80c,	0xf37f, 0xc80c,		0x21, 0
+	.dw 0xf3c0, 0xc80c,	0xf3ff, 0xc80c,		0x21, 0
+	.dw 0xf440, 0xc80c,	0xf47f, 0xc80c,		0x21, 0
+	.dw 0xf4c0, 0xc80c,	0xf4ff, 0xc80c,		0x21, 0
+	.dw 0xf540, 0xc80c,	0xf57f, 0xc80c,		0x21, 0
+	.dw 0xf5c0, 0xc80c,	0xf5ff, 0xc80c,		0x21, 0
+	.dw 0xf640, 0xc80c,	0xf67f, 0xc80c,		0x21, 0
+	.dw 0xf6c0, 0xc80c,	0xf6ff, 0xc80c,		0x21, 0
+	.dw 0xf740, 0xc80c,	0xf77f, 0xc80c,		0x21, 0
+	.dw 0xf7c0, 0xc80c,	0xf7ff, 0xc80c,		0x21, 0
+	.dw 0xf840, 0xc80c,	0xf87f, 0xc80c,		0x21, 0
+	.dw 0xf8c0, 0xc80c,	0xf8ff, 0xc80c,		0x21, 0
+	.dw 0xf940, 0xc80c,	0xf97f, 0xc80c,		0x21, 0
+	.dw 0xf9c0, 0xc80c,	0xffff, 0xc80c,		0x21, 0
+	.dw 0x0040, 0xc80d,	0x007f, 0xc80d,		0x21, 0
+	.dw 0x00c0, 0xc80d,	0x00ff, 0xc80d,		0x21, 0
+	.dw 0x0140, 0xc80d,	0x017f, 0xc80d,		0x21, 0
+	.dw 0x01c0, 0xc80d,	0x01ff, 0xc80d,		0x21, 0
+	.dw 0x0240, 0xc80d,	0x027f, 0xc80d,		0x21, 0
+	.dw 0x02c0, 0xc80d,	0x02ff, 0xc80d,		0x21, 0
+	.dw 0x0340, 0xc80d,	0x037f, 0xc80d,		0x21, 0
+	.dw 0x03c0, 0xc80d,	0x03ff, 0xc80d,		0x21, 0
+	.dw 0x0440, 0xc80d,	0x047f, 0xc80d,		0x21, 0
+	.dw 0x04c0, 0xc80d,	0x04ff, 0xc80d,		0x21, 0
+	.dw 0x0540, 0xc80d,	0x057f, 0xc80d,		0x21, 0
+	.dw 0x05c0, 0xc80d,	0x05ff, 0xc80d,		0x21, 0
+	.dw 0x0640, 0xc80d,	0x067f, 0xc80d,		0x21, 0
+	.dw 0x06c0, 0xc80d,	0x06ff, 0xc80d,		0x21, 0
+	.dw 0x0740, 0xc80d,	0x077f, 0xc80d,		0x21, 0
+	.dw 0x07c0, 0xc80d,	0x07ff, 0xc80d,		0x21, 0
+	.dw 0x0840, 0xc80d,	0x087f, 0xc80d,		0x21, 0
+	.dw 0x08c0, 0xc80d,	0x08ff, 0xc80d,		0x21, 0
+	.dw 0x0940, 0xc80d,	0x097f, 0xc80d,		0x21, 0
+	.dw 0x09c0, 0xc80d,	0x09ff, 0xc80d,		0x21, 0
+	.dw 0x0a40, 0xc80d,	0x0a7f, 0xc80d,		0x21, 0
+	.dw 0x0ac0, 0xc80d,	0x0aff, 0xc80d,		0x21, 0
+	.dw 0x0b40, 0xc80d,	0x0b7f, 0xc80d,		0x21, 0
+	.dw 0x0bc0, 0xc80d,	0x0bff, 0xc80d,		0x21, 0
+	.dw 0x0c40, 0xc80d,	0x0c7f, 0xc80d,		0x21, 0
+	.dw 0x0cc0, 0xc80d,	0x0cff, 0xc80d,		0x21, 0
+	.dw 0x0d40, 0xc80d,	0x0d7f, 0xc80d,		0x21, 0
+	.dw 0x0dc0, 0xc80d,	0x0dff, 0xc80d,		0x21, 0
+	.dw 0x0e40, 0xc80d,	0x0e7f, 0xc80d,		0x21, 0
+	.dw 0x0ec0, 0xc80d,	0x0eff, 0xc80d,		0x21, 0
+	.dw 0x0f40, 0xc80d,	0x0f7f, 0xc80d,		0x21, 0
+	.dw 0x0fc0, 0xc80d,	0x0fff, 0xc80d,		0x21, 0
+	.dw 0x1040, 0xc80d,	0x107f, 0xc80d,		0x21, 0
+	.dw 0x10c0, 0xc80d,	0x10ff, 0xc80d,		0x21, 0
+	.dw 0x1140, 0xc80d,	0x117f, 0xc80d,		0x21, 0
+	.dw 0x11c0, 0xc80d,	0x11ff, 0xc80d,		0x21, 0
+	.dw 0x1240, 0xc80d,	0x127f, 0xc80d,		0x21, 0
+	.dw 0x12c0, 0xc80d,	0x12ff, 0xc80d,		0x21, 0
+	.dw 0x1340, 0xc80d,	0x137f, 0xc80d,		0x21, 0
+	.dw 0x13c0, 0xc80d,	0x13ff, 0xc80d,		0x21, 0
+	.dw 0x1440, 0xc80d,	0x147f, 0xc80d,		0x21, 0
+	.dw 0x14c0, 0xc80d,	0x14ff, 0xc80d,		0x21, 0
+	.dw 0x1540, 0xc80d,	0x157f, 0xc80d,		0x21, 0
+	.dw 0x15c0, 0xc80d,	0x15ff, 0xc80d,		0x21, 0
+	.dw 0x1640, 0xc80d,	0x167f, 0xc80d,		0x21, 0
+	.dw 0x16c0, 0xc80d,	0x16ff, 0xc80d,		0x21, 0
+	.dw 0x1740, 0xc80d,	0x177f, 0xc80d,		0x21, 0
+	.dw 0x17c0, 0xc80d,	0x17ff, 0xc80d,		0x21, 0
+	.dw 0x1840, 0xc80d,	0x187f, 0xc80d,		0x21, 0
+	.dw 0x18c0, 0xc80d,	0x18ff, 0xc80d,		0x21, 0
+	.dw 0x1940, 0xc80d,	0x197f, 0xc80d,		0x21, 0
+	.dw 0x19c0, 0xc80d,	0x1fff, 0xc80d,		0x21, 0
+	.dw 0x2040, 0xc80d,	0x207f, 0xc80d,		0x21, 0
+	.dw 0x20c0, 0xc80d,	0x20ff, 0xc80d,		0x21, 0
+	.dw 0x2140, 0xc80d,	0x217f, 0xc80d,		0x21, 0
+	.dw 0x21c0, 0xc80d,	0x21ff, 0xc80d,		0x21, 0
+	.dw 0x2240, 0xc80d,	0x227f, 0xc80d,		0x21, 0
+	.dw 0x22c0, 0xc80d,	0x22ff, 0xc80d,		0x21, 0
+	.dw 0x2340, 0xc80d,	0x237f, 0xc80d,		0x21, 0
+	.dw 0x23c0, 0xc80d,	0x23ff, 0xc80d,		0x21, 0
+	.dw 0x2440, 0xc80d,	0x247f, 0xc80d,		0x21, 0
+	.dw 0x24c0, 0xc80d,	0x24ff, 0xc80d,		0x21, 0
+	.dw 0x2540, 0xc80d,	0x257f, 0xc80d,		0x21, 0
+	.dw 0x25c0, 0xc80d,	0x25ff, 0xc80d,		0x21, 0
+	.dw 0x2640, 0xc80d,	0x267f, 0xc80d,		0x21, 0
+	.dw 0x26c0, 0xc80d,	0x26ff, 0xc80d,		0x21, 0
+	.dw 0x2740, 0xc80d,	0x277f, 0xc80d,		0x21, 0
+	.dw 0x27c0, 0xc80d,	0x27ff, 0xc80d,		0x21, 0
+	.dw 0x2840, 0xc80d,	0x287f, 0xc80d,		0x21, 0
+	.dw 0x28c0, 0xc80d,	0x28ff, 0xc80d,		0x21, 0
+	.dw 0x2940, 0xc80d,	0x297f, 0xc80d,		0x21, 0
+	.dw 0x29c0, 0xc80d,	0x29ff, 0xc80d,		0x21, 0
+	.dw 0x2a40, 0xc80d,	0x2a7f, 0xc80d,		0x21, 0
+	.dw 0x2ac0, 0xc80d,	0x2aff, 0xc80d,		0x21, 0
+	.dw 0x2b40, 0xc80d,	0x2b7f, 0xc80d,		0x21, 0
+	.dw 0x2bc0, 0xc80d,	0x2bff, 0xc80d,		0x21, 0
+	.dw 0x2c40, 0xc80d,	0x2c7f, 0xc80d,		0x21, 0
+	.dw 0x2cc0, 0xc80d,	0x2cff, 0xc80d,		0x21, 0
+	.dw 0x2d40, 0xc80d,	0x2d7f, 0xc80d,		0x21, 0
+	.dw 0x2dc0, 0xc80d,	0x2dff, 0xc80d,		0x21, 0
+	.dw 0x2e40, 0xc80d,	0x2e7f, 0xc80d,		0x21, 0
+	.dw 0x2ec0, 0xc80d,	0x2eff, 0xc80d,		0x21, 0
+	.dw 0x2f40, 0xc80d,	0x2f7f, 0xc80d,		0x21, 0
+	.dw 0x2fc0, 0xc80d,	0x2fff, 0xc80d,		0x21, 0
+	.dw 0x3040, 0xc80d,	0x307f, 0xc80d,		0x21, 0
+	.dw 0x30c0, 0xc80d,	0x30ff, 0xc80d,		0x21, 0
+	.dw 0x3140, 0xc80d,	0x317f, 0xc80d,		0x21, 0
+	.dw 0x31c0, 0xc80d,	0x31ff, 0xc80d,		0x21, 0
+	.dw 0x3240, 0xc80d,	0x327f, 0xc80d,		0x21, 0
+	.dw 0x32c0, 0xc80d,	0x32ff, 0xc80d,		0x21, 0
+	.dw 0x3340, 0xc80d,	0x337f, 0xc80d,		0x21, 0
+	.dw 0x33c0, 0xc80d,	0x33ff, 0xc80d,		0x21, 0
+	.dw 0x3440, 0xc80d,	0x347f, 0xc80d,		0x21, 0
+	.dw 0x34c0, 0xc80d,	0x34ff, 0xc80d,		0x21, 0
+	.dw 0x3540, 0xc80d,	0x357f, 0xc80d,		0x21, 0
+	.dw 0x35c0, 0xc80d,	0x35ff, 0xc80d,		0x21, 0
+	.dw 0x3640, 0xc80d,	0x367f, 0xc80d,		0x21, 0
+	.dw 0x36c0, 0xc80d,	0x36ff, 0xc80d,		0x21, 0
+	.dw 0x3740, 0xc80d,	0x377f, 0xc80d,		0x21, 0
+	.dw 0x37c0, 0xc80d,	0x37ff, 0xc80d,		0x21, 0
+	.dw 0x3840, 0xc80d,	0x387f, 0xc80d,		0x21, 0
+	.dw 0x38c0, 0xc80d,	0x38ff, 0xc80d,		0x21, 0
+	.dw 0x3940, 0xc80d,	0x397f, 0xc80d,		0x21, 0
+	.dw 0x39c0, 0xc80d,	0x3fff, 0xc80d,		0x21, 0
+	.dw 0x4040, 0xc80d,	0x407f, 0xc80d,		0x21, 0
+	.dw 0x40c0, 0xc80d,	0x40ff, 0xc80d,		0x21, 0
+	.dw 0x4140, 0xc80d,	0x417f, 0xc80d,		0x21, 0
+	.dw 0x41c0, 0xc80d,	0x41ff, 0xc80d,		0x21, 0
+	.dw 0x4240, 0xc80d,	0x427f, 0xc80d,		0x21, 0
+	.dw 0x42c0, 0xc80d,	0x42ff, 0xc80d,		0x21, 0
+	.dw 0x4340, 0xc80d,	0x437f, 0xc80d,		0x21, 0
+	.dw 0x43c0, 0xc80d,	0x43ff, 0xc80d,		0x21, 0
+	.dw 0x4440, 0xc80d,	0x447f, 0xc80d,		0x21, 0
+	.dw 0x44c0, 0xc80d,	0x44ff, 0xc80d,		0x21, 0
+	.dw 0x4540, 0xc80d,	0x457f, 0xc80d,		0x21, 0
+	.dw 0x45c0, 0xc80d,	0x45ff, 0xc80d,		0x21, 0
+	.dw 0x4640, 0xc80d,	0x467f, 0xc80d,		0x21, 0
+	.dw 0x46c0, 0xc80d,	0x46ff, 0xc80d,		0x21, 0
+	.dw 0x4740, 0xc80d,	0x477f, 0xc80d,		0x21, 0
+	.dw 0x47c0, 0xc80d,	0x47ff, 0xc80d,		0x21, 0
+	.dw 0x4840, 0xc80d,	0x487f, 0xc80d,		0x21, 0
+	.dw 0x48c0, 0xc80d,	0x48ff, 0xc80d,		0x21, 0
+	.dw 0x4940, 0xc80d,	0x497f, 0xc80d,		0x21, 0
+	.dw 0x49c0, 0xc80d,	0x49ff, 0xc80d,		0x21, 0
+	.dw 0x4a40, 0xc80d,	0x4a7f, 0xc80d,		0x21, 0
+	.dw 0x4ac0, 0xc80d,	0x4aff, 0xc80d,		0x21, 0
+	.dw 0x4b40, 0xc80d,	0x4b7f, 0xc80d,		0x21, 0
+	.dw 0x4bc0, 0xc80d,	0x4bff, 0xc80d,		0x21, 0
+	.dw 0x4c40, 0xc80d,	0x4c7f, 0xc80d,		0x21, 0
+	.dw 0x4cc0, 0xc80d,	0x4cff, 0xc80d,		0x21, 0
+	.dw 0x4d40, 0xc80d,	0x4d7f, 0xc80d,		0x21, 0
+	.dw 0x4dc0, 0xc80d,	0x4dff, 0xc80d,		0x21, 0
+	.dw 0x4e40, 0xc80d,	0x4e7f, 0xc80d,		0x21, 0
+	.dw 0x4ec0, 0xc80d,	0x4eff, 0xc80d,		0x21, 0
+	.dw 0x4f40, 0xc80d,	0x4f7f, 0xc80d,		0x21, 0
+	.dw 0x4fc0, 0xc80d,	0x4fff, 0xc80d,		0x21, 0
+	.dw 0x5040, 0xc80d,	0x507f, 0xc80d,		0x21, 0
+	.dw 0x50c0, 0xc80d,	0x50ff, 0xc80d,		0x21, 0
+	.dw 0x5140, 0xc80d,	0x517f, 0xc80d,		0x21, 0
+	.dw 0x51c0, 0xc80d,	0x51ff, 0xc80d,		0x21, 0
+	.dw 0x5240, 0xc80d,	0x527f, 0xc80d,		0x21, 0
+	.dw 0x52c0, 0xc80d,	0x52ff, 0xc80d,		0x21, 0
+	.dw 0x5340, 0xc80d,	0x537f, 0xc80d,		0x21, 0
+	.dw 0x53c0, 0xc80d,	0x53ff, 0xc80d,		0x21, 0
+	.dw 0x5440, 0xc80d,	0x547f, 0xc80d,		0x21, 0
+	.dw 0x54c0, 0xc80d,	0x54ff, 0xc80d,		0x21, 0
+	.dw 0x5540, 0xc80d,	0x557f, 0xc80d,		0x21, 0
+	.dw 0x55c0, 0xc80d,	0x55ff, 0xc80d,		0x21, 0
+	.dw 0x5640, 0xc80d,	0x567f, 0xc80d,		0x21, 0
+	.dw 0x56c0, 0xc80d,	0x56ff, 0xc80d,		0x21, 0
+	.dw 0x5740, 0xc80d,	0x577f, 0xc80d,		0x21, 0
+	.dw 0x57c0, 0xc80d,	0x57ff, 0xc80d,		0x21, 0
+	.dw 0x5840, 0xc80d,	0x587f, 0xc80d,		0x21, 0
+	.dw 0x58c0, 0xc80d,	0x58ff, 0xc80d,		0x21, 0
+	.dw 0x5940, 0xc80d,	0x597f, 0xc80d,		0x21, 0
+	.dw 0x59c0, 0xc80d,	0x5fff, 0xc80d,		0x21, 0
+	.dw 0x6040, 0xc80d,	0x607f, 0xc80d,		0x21, 0
+	.dw 0x60c0, 0xc80d,	0x60ff, 0xc80d,		0x21, 0
+	.dw 0x6140, 0xc80d,	0x617f, 0xc80d,		0x21, 0
+	.dw 0x61c0, 0xc80d,	0x61ff, 0xc80d,		0x21, 0
+	.dw 0x6240, 0xc80d,	0x627f, 0xc80d,		0x21, 0
+	.dw 0x62c0, 0xc80d,	0x62ff, 0xc80d,		0x21, 0
+	.dw 0x6340, 0xc80d,	0x637f, 0xc80d,		0x21, 0
+	.dw 0x63c0, 0xc80d,	0x63ff, 0xc80d,		0x21, 0
+	.dw 0x6440, 0xc80d,	0x647f, 0xc80d,		0x21, 0
+	.dw 0x64c0, 0xc80d,	0x64ff, 0xc80d,		0x21, 0
+	.dw 0x6540, 0xc80d,	0x657f, 0xc80d,		0x21, 0
+	.dw 0x65c0, 0xc80d,	0x65ff, 0xc80d,		0x21, 0
+	.dw 0x6640, 0xc80d,	0x667f, 0xc80d,		0x21, 0
+	.dw 0x66c0, 0xc80d,	0x66ff, 0xc80d,		0x21, 0
+	.dw 0x6740, 0xc80d,	0x677f, 0xc80d,		0x21, 0
+	.dw 0x67c0, 0xc80d,	0x67ff, 0xc80d,		0x21, 0
+	.dw 0x6840, 0xc80d,	0x687f, 0xc80d,		0x21, 0
+	.dw 0x68c0, 0xc80d,	0x68ff, 0xc80d,		0x21, 0
+	.dw 0x6940, 0xc80d,	0x697f, 0xc80d,		0x21, 0
+	.dw 0x69c0, 0xc80d,	0x69ff, 0xc80d,		0x21, 0
+	.dw 0x6a40, 0xc80d,	0x6a7f, 0xc80d,		0x21, 0
+	.dw 0x6ac0, 0xc80d,	0x6aff, 0xc80d,		0x21, 0
+	.dw 0x6b40, 0xc80d,	0x6b7f, 0xc80d,		0x21, 0
+	.dw 0x6bc0, 0xc80d,	0x6bff, 0xc80d,		0x21, 0
+	.dw 0x6c40, 0xc80d,	0x6c7f, 0xc80d,		0x21, 0
+	.dw 0x6cc0, 0xc80d,	0x6cff, 0xc80d,		0x21, 0
+	.dw 0x6d40, 0xc80d,	0x6d7f, 0xc80d,		0x21, 0
+	.dw 0x6dc0, 0xc80d,	0x6dff, 0xc80d,		0x21, 0
+	.dw 0x6e40, 0xc80d,	0x6e7f, 0xc80d,		0x21, 0
+	.dw 0x6ec0, 0xc80d,	0x6eff, 0xc80d,		0x21, 0
+	.dw 0x6f40, 0xc80d,	0x6f7f, 0xc80d,		0x21, 0
+	.dw 0x6fc0, 0xc80d,	0x6fff, 0xc80d,		0x21, 0
+	.dw 0x7040, 0xc80d,	0x707f, 0xc80d,		0x21, 0
+	.dw 0x70c0, 0xc80d,	0x70ff, 0xc80d,		0x21, 0
+	.dw 0x7140, 0xc80d,	0x717f, 0xc80d,		0x21, 0
+	.dw 0x71c0, 0xc80d,	0x71ff, 0xc80d,		0x21, 0
+	.dw 0x7240, 0xc80d,	0x727f, 0xc80d,		0x21, 0
+	.dw 0x72c0, 0xc80d,	0x72ff, 0xc80d,		0x21, 0
+	.dw 0x7340, 0xc80d,	0x737f, 0xc80d,		0x21, 0
+	.dw 0x73c0, 0xc80d,	0x73ff, 0xc80d,		0x21, 0
+	.dw 0x7440, 0xc80d,	0x747f, 0xc80d,		0x21, 0
+	.dw 0x74c0, 0xc80d,	0x74ff, 0xc80d,		0x21, 0
+	.dw 0x7540, 0xc80d,	0x757f, 0xc80d,		0x21, 0
+	.dw 0x75c0, 0xc80d,	0x75ff, 0xc80d,		0x21, 0
+	.dw 0x7640, 0xc80d,	0x767f, 0xc80d,		0x21, 0
+	.dw 0x76c0, 0xc80d,	0x76ff, 0xc80d,		0x21, 0
+	.dw 0x7740, 0xc80d,	0x777f, 0xc80d,		0x21, 0
+	.dw 0x77c0, 0xc80d,	0x77ff, 0xc80d,		0x21, 0
+	.dw 0x7840, 0xc80d,	0x787f, 0xc80d,		0x21, 0
+	.dw 0x78c0, 0xc80d,	0x78ff, 0xc80d,		0x21, 0
+	.dw 0x7940, 0xc80d,	0x797f, 0xc80d,		0x21, 0
+	.dw 0x79c0, 0xc80d,	0x7fff, 0xc80d,		0x21, 0
+	.dw 0x8040, 0xc80d,	0x807f, 0xc80d,		0x21, 0
+	.dw 0x80c0, 0xc80d,	0x80ff, 0xc80d,		0x21, 0
+	.dw 0x8140, 0xc80d,	0x817f, 0xc80d,		0x21, 0
+	.dw 0x81c0, 0xc80d,	0x81ff, 0xc80d,		0x21, 0
+	.dw 0x8240, 0xc80d,	0x827f, 0xc80d,		0x21, 0
+	.dw 0x82c0, 0xc80d,	0x82ff, 0xc80d,		0x21, 0
+	.dw 0x8340, 0xc80d,	0x837f, 0xc80d,		0x21, 0
+	.dw 0x83c0, 0xc80d,	0x83ff, 0xc80d,		0x21, 0
+	.dw 0x8440, 0xc80d,	0x847f, 0xc80d,		0x21, 0
+	.dw 0x84c0, 0xc80d,	0x84ff, 0xc80d,		0x21, 0
+	.dw 0x8540, 0xc80d,	0x857f, 0xc80d,		0x21, 0
+	.dw 0x85c0, 0xc80d,	0x85ff, 0xc80d,		0x21, 0
+	.dw 0x8640, 0xc80d,	0x867f, 0xc80d,		0x21, 0
+	.dw 0x86c0, 0xc80d,	0x86ff, 0xc80d,		0x21, 0
+	.dw 0x8740, 0xc80d,	0x877f, 0xc80d,		0x21, 0
+	.dw 0x87c0, 0xc80d,	0x87ff, 0xc80d,		0x21, 0
+	.dw 0x8840, 0xc80d,	0x887f, 0xc80d,		0x21, 0
+	.dw 0x88c0, 0xc80d,	0x88ff, 0xc80d,		0x21, 0
+	.dw 0x8940, 0xc80d,	0x897f, 0xc80d,		0x21, 0
+	.dw 0x89c0, 0xc80d,	0x89ff, 0xc80d,		0x21, 0
+	.dw 0x8a40, 0xc80d,	0x8a7f, 0xc80d,		0x21, 0
+	.dw 0x8ac0, 0xc80d,	0x8aff, 0xc80d,		0x21, 0
+	.dw 0x8b40, 0xc80d,	0x8b7f, 0xc80d,		0x21, 0
+	.dw 0x8bc0, 0xc80d,	0x8bff, 0xc80d,		0x21, 0
+	.dw 0x8c40, 0xc80d,	0x8c7f, 0xc80d,		0x21, 0
+	.dw 0x8cc0, 0xc80d,	0x8cff, 0xc80d,		0x21, 0
+	.dw 0x8d40, 0xc80d,	0x8d7f, 0xc80d,		0x21, 0
+	.dw 0x8dc0, 0xc80d,	0x8dff, 0xc80d,		0x21, 0
+	.dw 0x8e40, 0xc80d,	0x8e7f, 0xc80d,		0x21, 0
+	.dw 0x8ec0, 0xc80d,	0x8eff, 0xc80d,		0x21, 0
+	.dw 0x8f40, 0xc80d,	0x8f7f, 0xc80d,		0x21, 0
+	.dw 0x8fc0, 0xc80d,	0x8fff, 0xc80d,		0x21, 0
+	.dw 0x9040, 0xc80d,	0x907f, 0xc80d,		0x21, 0
+	.dw 0x90c0, 0xc80d,	0x90ff, 0xc80d,		0x21, 0
+	.dw 0x9140, 0xc80d,	0x917f, 0xc80d,		0x21, 0
+	.dw 0x91c0, 0xc80d,	0x91ff, 0xc80d,		0x21, 0
+	.dw 0x9240, 0xc80d,	0x927f, 0xc80d,		0x21, 0
+	.dw 0x92c0, 0xc80d,	0x92ff, 0xc80d,		0x21, 0
+	.dw 0x9340, 0xc80d,	0x937f, 0xc80d,		0x21, 0
+	.dw 0x93c0, 0xc80d,	0x93ff, 0xc80d,		0x21, 0
+	.dw 0x9440, 0xc80d,	0x947f, 0xc80d,		0x21, 0
+	.dw 0x94c0, 0xc80d,	0x94ff, 0xc80d,		0x21, 0
+	.dw 0x9540, 0xc80d,	0x957f, 0xc80d,		0x21, 0
+	.dw 0x95c0, 0xc80d,	0x95ff, 0xc80d,		0x21, 0
+	.dw 0x9640, 0xc80d,	0x967f, 0xc80d,		0x21, 0
+	.dw 0x96c0, 0xc80d,	0x96ff, 0xc80d,		0x21, 0
+	.dw 0x9740, 0xc80d,	0x977f, 0xc80d,		0x21, 0
+	.dw 0x97c0, 0xc80d,	0x97ff, 0xc80d,		0x21, 0
+	.dw 0x9840, 0xc80d,	0x987f, 0xc80d,		0x21, 0
+	.dw 0x98c0, 0xc80d,	0x98ff, 0xc80d,		0x21, 0
+	.dw 0x9940, 0xc80d,	0x997f, 0xc80d,		0x21, 0
+	.dw 0x99c0, 0xc80d,	0x9fff, 0xc80d,		0x21, 0
+	.dw 0xa040, 0xc80d,	0xa07f, 0xc80d,		0x21, 0
+	.dw 0xa0c0, 0xc80d,	0xa0ff, 0xc80d,		0x21, 0
+	.dw 0xa140, 0xc80d,	0xa17f, 0xc80d,		0x21, 0
+	.dw 0xa1c0, 0xc80d,	0xa1ff, 0xc80d,		0x21, 0
+	.dw 0xa240, 0xc80d,	0xa27f, 0xc80d,		0x21, 0
+	.dw 0xa2c0, 0xc80d,	0xa2ff, 0xc80d,		0x21, 0
+	.dw 0xa340, 0xc80d,	0xa37f, 0xc80d,		0x21, 0
+	.dw 0xa3c0, 0xc80d,	0xa3ff, 0xc80d,		0x21, 0
+	.dw 0xa440, 0xc80d,	0xa47f, 0xc80d,		0x21, 0
+	.dw 0xa4c0, 0xc80d,	0xa4ff, 0xc80d,		0x21, 0
+	.dw 0xa540, 0xc80d,	0xa57f, 0xc80d,		0x21, 0
+	.dw 0xa5c0, 0xc80d,	0xa5ff, 0xc80d,		0x21, 0
+	.dw 0xa640, 0xc80d,	0xa67f, 0xc80d,		0x21, 0
+	.dw 0xa6c0, 0xc80d,	0xa6ff, 0xc80d,		0x21, 0
+	.dw 0xa740, 0xc80d,	0xa77f, 0xc80d,		0x21, 0
+	.dw 0xa7c0, 0xc80d,	0xa7ff, 0xc80d,		0x21, 0
+	.dw 0xa840, 0xc80d,	0xa87f, 0xc80d,		0x21, 0
+	.dw 0xa8c0, 0xc80d,	0xa8ff, 0xc80d,		0x21, 0
+	.dw 0xa940, 0xc80d,	0xa97f, 0xc80d,		0x21, 0
+	.dw 0xa9c0, 0xc80d,	0xa9ff, 0xc80d,		0x21, 0
+	.dw 0xaa40, 0xc80d,	0xaa7f, 0xc80d,		0x21, 0
+	.dw 0xaac0, 0xc80d,	0xaaff, 0xc80d,		0x21, 0
+	.dw 0xab40, 0xc80d,	0xab7f, 0xc80d,		0x21, 0
+	.dw 0xabc0, 0xc80d,	0xabff, 0xc80d,		0x21, 0
+	.dw 0xac40, 0xc80d,	0xac7f, 0xc80d,		0x21, 0
+	.dw 0xacc0, 0xc80d,	0xacff, 0xc80d,		0x21, 0
+	.dw 0xad40, 0xc80d,	0xad7f, 0xc80d,		0x21, 0
+	.dw 0xadc0, 0xc80d,	0xadff, 0xc80d,		0x21, 0
+	.dw 0xae40, 0xc80d,	0xae7f, 0xc80d,		0x21, 0
+	.dw 0xaec0, 0xc80d,	0xaeff, 0xc80d,		0x21, 0
+	.dw 0xaf40, 0xc80d,	0xaf7f, 0xc80d,		0x21, 0
+	.dw 0xafc0, 0xc80d,	0xafff, 0xc80d,		0x21, 0
+	.dw 0xb040, 0xc80d,	0xb07f, 0xc80d,		0x21, 0
+	.dw 0xb0c0, 0xc80d,	0xb0ff, 0xc80d,		0x21, 0
+	.dw 0xb140, 0xc80d,	0xb17f, 0xc80d,		0x21, 0
+	.dw 0xb1c0, 0xc80d,	0xb1ff, 0xc80d,		0x21, 0
+	.dw 0xb240, 0xc80d,	0xb27f, 0xc80d,		0x21, 0
+	.dw 0xb2c0, 0xc80d,	0xb2ff, 0xc80d,		0x21, 0
+	.dw 0xb340, 0xc80d,	0xb37f, 0xc80d,		0x21, 0
+	.dw 0xb3c0, 0xc80d,	0xb3ff, 0xc80d,		0x21, 0
+	.dw 0xb440, 0xc80d,	0xb47f, 0xc80d,		0x21, 0
+	.dw 0xb4c0, 0xc80d,	0xb4ff, 0xc80d,		0x21, 0
+	.dw 0xb540, 0xc80d,	0xb57f, 0xc80d,		0x21, 0
+	.dw 0xb5c0, 0xc80d,	0xb5ff, 0xc80d,		0x21, 0
+	.dw 0xb640, 0xc80d,	0xb67f, 0xc80d,		0x21, 0
+	.dw 0xb6c0, 0xc80d,	0xb6ff, 0xc80d,		0x21, 0
+	.dw 0xb740, 0xc80d,	0xb77f, 0xc80d,		0x21, 0
+	.dw 0xb7c0, 0xc80d,	0xb7ff, 0xc80d,		0x21, 0
+	.dw 0xb840, 0xc80d,	0xb87f, 0xc80d,		0x21, 0
+	.dw 0xb8c0, 0xc80d,	0xb8ff, 0xc80d,		0x21, 0
+	.dw 0xb940, 0xc80d,	0xb97f, 0xc80d,		0x21, 0
+	.dw 0xb9c0, 0xc80d,	0xbfff, 0xc80d,		0x21, 0
+	.dw 0xc040, 0xc80d,	0xc07f, 0xc80d,		0x21, 0
+	.dw 0xc0c0, 0xc80d,	0xc0ff, 0xc80d,		0x21, 0
+	.dw 0xc140, 0xc80d,	0xc17f, 0xc80d,		0x21, 0
+	.dw 0xc1c0, 0xc80d,	0xc1ff, 0xc80d,		0x21, 0
+	.dw 0xc240, 0xc80d,	0xc27f, 0xc80d,		0x21, 0
+	.dw 0xc2c0, 0xc80d,	0xc2ff, 0xc80d,		0x21, 0
+	.dw 0xc340, 0xc80d,	0xc37f, 0xc80d,		0x21, 0
+	.dw 0xc3c0, 0xc80d,	0xc3ff, 0xc80d,		0x21, 0
+	.dw 0xc440, 0xc80d,	0xc47f, 0xc80d,		0x21, 0
+	.dw 0xc4c0, 0xc80d,	0xc4ff, 0xc80d,		0x21, 0
+	.dw 0xc540, 0xc80d,	0xc57f, 0xc80d,		0x21, 0
+	.dw 0xc5c0, 0xc80d,	0xc5ff, 0xc80d,		0x21, 0
+	.dw 0xc640, 0xc80d,	0xc67f, 0xc80d,		0x21, 0
+	.dw 0xc6c0, 0xc80d,	0xc6ff, 0xc80d,		0x21, 0
+	.dw 0xc740, 0xc80d,	0xc77f, 0xc80d,		0x21, 0
+	.dw 0xc7c0, 0xc80d,	0xc7ff, 0xc80d,		0x21, 0
+	.dw 0xc840, 0xc80d,	0xc87f, 0xc80d,		0x21, 0
+	.dw 0xc8c0, 0xc80d,	0xc8ff, 0xc80d,		0x21, 0
+	.dw 0xc940, 0xc80d,	0xc97f, 0xc80d,		0x21, 0
+	.dw 0xc9c0, 0xc80d,	0xc9ff, 0xc80d,		0x21, 0
+	.dw 0xca40, 0xc80d,	0xca7f, 0xc80d,		0x21, 0
+	.dw 0xcac0, 0xc80d,	0xcaff, 0xc80d,		0x21, 0
+	.dw 0xcb40, 0xc80d,	0xcb7f, 0xc80d,		0x21, 0
+	.dw 0xcbc0, 0xc80d,	0xcbff, 0xc80d,		0x21, 0
+	.dw 0xcc40, 0xc80d,	0xcc7f, 0xc80d,		0x21, 0
+	.dw 0xccc0, 0xc80d,	0xccff, 0xc80d,		0x21, 0
+	.dw 0xcd40, 0xc80d,	0xcd7f, 0xc80d,		0x21, 0
+	.dw 0xcdc0, 0xc80d,	0xcdff, 0xc80d,		0x21, 0
+	.dw 0xce40, 0xc80d,	0xce7f, 0xc80d,		0x21, 0
+	.dw 0xcec0, 0xc80d,	0xceff, 0xc80d,		0x21, 0
+	.dw 0xcf40, 0xc80d,	0xcf7f, 0xc80d,		0x21, 0
+	.dw 0xcfc0, 0xc80d,	0xcfff, 0xc80d,		0x21, 0
+	.dw 0xd040, 0xc80d,	0xd07f, 0xc80d,		0x21, 0
+	.dw 0xd0c0, 0xc80d,	0xd0ff, 0xc80d,		0x21, 0
+	.dw 0xd140, 0xc80d,	0xd17f, 0xc80d,		0x21, 0
+	.dw 0xd1c0, 0xc80d,	0xd1ff, 0xc80d,		0x21, 0
+	.dw 0xd240, 0xc80d,	0xd27f, 0xc80d,		0x21, 0
+	.dw 0xd2c0, 0xc80d,	0xd2ff, 0xc80d,		0x21, 0
+	.dw 0xd340, 0xc80d,	0xd37f, 0xc80d,		0x21, 0
+	.dw 0xd3c0, 0xc80d,	0xd3ff, 0xc80d,		0x21, 0
+	.dw 0xd440, 0xc80d,	0xd47f, 0xc80d,		0x21, 0
+	.dw 0xd4c0, 0xc80d,	0xd4ff, 0xc80d,		0x21, 0
+	.dw 0xd540, 0xc80d,	0xd57f, 0xc80d,		0x21, 0
+	.dw 0xd5c0, 0xc80d,	0xd5ff, 0xc80d,		0x21, 0
+	.dw 0xd640, 0xc80d,	0xd67f, 0xc80d,		0x21, 0
+	.dw 0xd6c0, 0xc80d,	0xd6ff, 0xc80d,		0x21, 0
+	.dw 0xd740, 0xc80d,	0xd77f, 0xc80d,		0x21, 0
+	.dw 0xd7c0, 0xc80d,	0xd7ff, 0xc80d,		0x21, 0
+	.dw 0xd840, 0xc80d,	0xd87f, 0xc80d,		0x21, 0
+	.dw 0xd8c0, 0xc80d,	0xd8ff, 0xc80d,		0x21, 0
+	.dw 0xd940, 0xc80d,	0xd97f, 0xc80d,		0x21, 0
+	.dw 0xd9c0, 0xc80d,	0xdfff, 0xc80d,		0x21, 0
+	.dw 0xe040, 0xc80d,	0xe07f, 0xc80d,		0x21, 0
+	.dw 0xe0c0, 0xc80d,	0xe0ff, 0xc80d,		0x21, 0
+	.dw 0xe140, 0xc80d,	0xe17f, 0xc80d,		0x21, 0
+	.dw 0xe1c0, 0xc80d,	0xe1ff, 0xc80d,		0x21, 0
+	.dw 0xe240, 0xc80d,	0xe27f, 0xc80d,		0x21, 0
+	.dw 0xe2c0, 0xc80d,	0xe2ff, 0xc80d,		0x21, 0
+	.dw 0xe340, 0xc80d,	0xe37f, 0xc80d,		0x21, 0
+	.dw 0xe3c0, 0xc80d,	0xe3ff, 0xc80d,		0x21, 0
+	.dw 0xe440, 0xc80d,	0xe47f, 0xc80d,		0x21, 0
+	.dw 0xe4c0, 0xc80d,	0xe4ff, 0xc80d,		0x21, 0
+	.dw 0xe540, 0xc80d,	0xe57f, 0xc80d,		0x21, 0
+	.dw 0xe5c0, 0xc80d,	0xe5ff, 0xc80d,		0x21, 0
+	.dw 0xe640, 0xc80d,	0xe67f, 0xc80d,		0x21, 0
+	.dw 0xe6c0, 0xc80d,	0xe6ff, 0xc80d,		0x21, 0
+	.dw 0xe740, 0xc80d,	0xe77f, 0xc80d,		0x21, 0
+	.dw 0xe7c0, 0xc80d,	0xe7ff, 0xc80d,		0x21, 0
+	.dw 0xe840, 0xc80d,	0xe87f, 0xc80d,		0x21, 0
+	.dw 0xe8c0, 0xc80d,	0xe8ff, 0xc80d,		0x21, 0
+	.dw 0xe940, 0xc80d,	0xe97f, 0xc80d,		0x21, 0
+	.dw 0xe9c0, 0xc80d,	0xe9ff, 0xc80d,		0x21, 0
+	.dw 0xea40, 0xc80d,	0xea7f, 0xc80d,		0x21, 0
+	.dw 0xeac0, 0xc80d,	0xeaff, 0xc80d,		0x21, 0
+	.dw 0xeb40, 0xc80d,	0xeb7f, 0xc80d,		0x21, 0
+	.dw 0xebc0, 0xc80d,	0xebff, 0xc80d,		0x21, 0
+	.dw 0xec40, 0xc80d,	0xec7f, 0xc80d,		0x21, 0
+	.dw 0xecc0, 0xc80d,	0xecff, 0xc80d,		0x21, 0
+	.dw 0xed40, 0xc80d,	0xed7f, 0xc80d,		0x21, 0
+	.dw 0xedc0, 0xc80d,	0xedff, 0xc80d,		0x21, 0
+	.dw 0xee40, 0xc80d,	0xee7f, 0xc80d,		0x21, 0
+	.dw 0xeec0, 0xc80d,	0xeeff, 0xc80d,		0x21, 0
+	.dw 0xef40, 0xc80d,	0xef7f, 0xc80d,		0x21, 0
+	.dw 0xefc0, 0xc80d,	0xefff, 0xc80d,		0x21, 0
+	.dw 0xf040, 0xc80d,	0xf07f, 0xc80d,		0x21, 0
+	.dw 0xf0c0, 0xc80d,	0xf0ff, 0xc80d,		0x21, 0
+	.dw 0xf140, 0xc80d,	0xf17f, 0xc80d,		0x21, 0
+	.dw 0xf1c0, 0xc80d,	0xf1ff, 0xc80d,		0x21, 0
+	.dw 0xf240, 0xc80d,	0xf27f, 0xc80d,		0x21, 0
+	.dw 0xf2c0, 0xc80d,	0xf2ff, 0xc80d,		0x21, 0
+	.dw 0xf340, 0xc80d,	0xf37f, 0xc80d,		0x21, 0
+	.dw 0xf3c0, 0xc80d,	0xf3ff, 0xc80d,		0x21, 0
+	.dw 0xf440, 0xc80d,	0xf47f, 0xc80d,		0x21, 0
+	.dw 0xf4c0, 0xc80d,	0xf4ff, 0xc80d,		0x21, 0
+	.dw 0xf540, 0xc80d,	0xf57f, 0xc80d,		0x21, 0
+	.dw 0xf5c0, 0xc80d,	0xf5ff, 0xc80d,		0x21, 0
+	.dw 0xf640, 0xc80d,	0xf67f, 0xc80d,		0x21, 0
+	.dw 0xf6c0, 0xc80d,	0xf6ff, 0xc80d,		0x21, 0
+	.dw 0xf740, 0xc80d,	0xf77f, 0xc80d,		0x21, 0
+	.dw 0xf7c0, 0xc80d,	0xf7ff, 0xc80d,		0x21, 0
+	.dw 0xf840, 0xc80d,	0xf87f, 0xc80d,		0x21, 0
+	.dw 0xf8c0, 0xc80d,	0xf8ff, 0xc80d,		0x21, 0
+	.dw 0xf940, 0xc80d,	0xf97f, 0xc80d,		0x21, 0
+	.dw 0xf9c0, 0xc80d,	0xffff, 0xc80d,		0x21, 0
+	.dw 0x0040, 0xc80e,	0x007f, 0xc80e,		0x21, 0
+	.dw 0x00c0, 0xc80e,	0x00ff, 0xc80e,		0x21, 0
+	.dw 0x0140, 0xc80e,	0x017f, 0xc80e,		0x21, 0
+	.dw 0x01c0, 0xc80e,	0x01ff, 0xc80e,		0x21, 0
+	.dw 0x0240, 0xc80e,	0x027f, 0xc80e,		0x21, 0
+	.dw 0x02c0, 0xc80e,	0x02ff, 0xc80e,		0x21, 0
+	.dw 0x0340, 0xc80e,	0x037f, 0xc80e,		0x21, 0
+	.dw 0x03c0, 0xc80e,	0x03ff, 0xc80e,		0x21, 0
+	.dw 0x0440, 0xc80e,	0x047f, 0xc80e,		0x21, 0
+	.dw 0x04c0, 0xc80e,	0x04ff, 0xc80e,		0x21, 0
+	.dw 0x0540, 0xc80e,	0x057f, 0xc80e,		0x21, 0
+	.dw 0x05c0, 0xc80e,	0x05ff, 0xc80e,		0x21, 0
+	.dw 0x0640, 0xc80e,	0x067f, 0xc80e,		0x21, 0
+	.dw 0x06c0, 0xc80e,	0x06ff, 0xc80e,		0x21, 0
+	.dw 0x0740, 0xc80e,	0x077f, 0xc80e,		0x21, 0
+	.dw 0x07c0, 0xc80e,	0x07ff, 0xc80e,		0x21, 0
+	.dw 0x0840, 0xc80e,	0x087f, 0xc80e,		0x21, 0
+	.dw 0x08c0, 0xc80e,	0x08ff, 0xc80e,		0x21, 0
+	.dw 0x0940, 0xc80e,	0x097f, 0xc80e,		0x21, 0
+	.dw 0x09c0, 0xc80e,	0x09ff, 0xc80e,		0x21, 0
+	.dw 0x0a40, 0xc80e,	0x0a7f, 0xc80e,		0x21, 0
+	.dw 0x0ac0, 0xc80e,	0x0aff, 0xc80e,		0x21, 0
+	.dw 0x0b40, 0xc80e,	0x0b7f, 0xc80e,		0x21, 0
+	.dw 0x0bc0, 0xc80e,	0x0bff, 0xc80e,		0x21, 0
+	.dw 0x0c40, 0xc80e,	0x0c7f, 0xc80e,		0x21, 0
+	.dw 0x0cc0, 0xc80e,	0x0cff, 0xc80e,		0x21, 0
+	.dw 0x0d40, 0xc80e,	0x0d7f, 0xc80e,		0x21, 0
+	.dw 0x0dc0, 0xc80e,	0x0dff, 0xc80e,		0x21, 0
+	.dw 0x0e40, 0xc80e,	0x0e7f, 0xc80e,		0x21, 0
+	.dw 0x0ec0, 0xc80e,	0x0eff, 0xc80e,		0x21, 0
+	.dw 0x0f40, 0xc80e,	0x0f7f, 0xc80e,		0x21, 0
+	.dw 0x0fc0, 0xc80e,	0x0fff, 0xc80e,		0x21, 0
+	.dw 0x1040, 0xc80e,	0x107f, 0xc80e,		0x21, 0
+	.dw 0x10c0, 0xc80e,	0x10ff, 0xc80e,		0x21, 0
+	.dw 0x1140, 0xc80e,	0x117f, 0xc80e,		0x21, 0
+	.dw 0x11c0, 0xc80e,	0x11ff, 0xc80e,		0x21, 0
+	.dw 0x1240, 0xc80e,	0x127f, 0xc80e,		0x21, 0
+	.dw 0x12c0, 0xc80e,	0x12ff, 0xc80e,		0x21, 0
+	.dw 0x1340, 0xc80e,	0x137f, 0xc80e,		0x21, 0
+	.dw 0x13c0, 0xc80e,	0x13ff, 0xc80e,		0x21, 0
+	.dw 0x1440, 0xc80e,	0x147f, 0xc80e,		0x21, 0
+	.dw 0x14c0, 0xc80e,	0x14ff, 0xc80e,		0x21, 0
+	.dw 0x1540, 0xc80e,	0x157f, 0xc80e,		0x21, 0
+	.dw 0x15c0, 0xc80e,	0x15ff, 0xc80e,		0x21, 0
+	.dw 0x1640, 0xc80e,	0x167f, 0xc80e,		0x21, 0
+	.dw 0x16c0, 0xc80e,	0x16ff, 0xc80e,		0x21, 0
+	.dw 0x1740, 0xc80e,	0x177f, 0xc80e,		0x21, 0
+	.dw 0x17c0, 0xc80e,	0x17ff, 0xc80e,		0x21, 0
+	.dw 0x1840, 0xc80e,	0x187f, 0xc80e,		0x21, 0
+	.dw 0x18c0, 0xc80e,	0x18ff, 0xc80e,		0x21, 0
+	.dw 0x1940, 0xc80e,	0x197f, 0xc80e,		0x21, 0
+	.dw 0x19c0, 0xc80e,	0x1fff, 0xc80e,		0x21, 0
+	.dw 0x2040, 0xc80e,	0x207f, 0xc80e,		0x21, 0
+	.dw 0x20c0, 0xc80e,	0x20ff, 0xc80e,		0x21, 0
+	.dw 0x2140, 0xc80e,	0x217f, 0xc80e,		0x21, 0
+	.dw 0x21c0, 0xc80e,	0x21ff, 0xc80e,		0x21, 0
+	.dw 0x2240, 0xc80e,	0x227f, 0xc80e,		0x21, 0
+	.dw 0x22c0, 0xc80e,	0x22ff, 0xc80e,		0x21, 0
+	.dw 0x2340, 0xc80e,	0x237f, 0xc80e,		0x21, 0
+	.dw 0x23c0, 0xc80e,	0x23ff, 0xc80e,		0x21, 0
+	.dw 0x2440, 0xc80e,	0x247f, 0xc80e,		0x21, 0
+	.dw 0x24c0, 0xc80e,	0x24ff, 0xc80e,		0x21, 0
+	.dw 0x2540, 0xc80e,	0x257f, 0xc80e,		0x21, 0
+	.dw 0x25c0, 0xc80e,	0x25ff, 0xc80e,		0x21, 0
+	.dw 0x2640, 0xc80e,	0x267f, 0xc80e,		0x21, 0
+	.dw 0x26c0, 0xc80e,	0x26ff, 0xc80e,		0x21, 0
+	.dw 0x2740, 0xc80e,	0x277f, 0xc80e,		0x21, 0
+	.dw 0x27c0, 0xc80e,	0x27ff, 0xc80e,		0x21, 0
+	.dw 0x2840, 0xc80e,	0x287f, 0xc80e,		0x21, 0
+	.dw 0x28c0, 0xc80e,	0x28ff, 0xc80e,		0x21, 0
+	.dw 0x2940, 0xc80e,	0x297f, 0xc80e,		0x21, 0
+	.dw 0x29c0, 0xc80e,	0x29ff, 0xc80e,		0x21, 0
+	.dw 0x2a40, 0xc80e,	0x2a7f, 0xc80e,		0x21, 0
+	.dw 0x2ac0, 0xc80e,	0x2aff, 0xc80e,		0x21, 0
+	.dw 0x2b40, 0xc80e,	0x2b7f, 0xc80e,		0x21, 0
+	.dw 0x2bc0, 0xc80e,	0x2bff, 0xc80e,		0x21, 0
+	.dw 0x2c40, 0xc80e,	0x2c7f, 0xc80e,		0x21, 0
+	.dw 0x2cc0, 0xc80e,	0x2cff, 0xc80e,		0x21, 0
+	.dw 0x2d40, 0xc80e,	0x2d7f, 0xc80e,		0x21, 0
+	.dw 0x2dc0, 0xc80e,	0x2dff, 0xc80e,		0x21, 0
+	.dw 0x2e40, 0xc80e,	0x2e7f, 0xc80e,		0x21, 0
+	.dw 0x2ec0, 0xc80e,	0x2eff, 0xc80e,		0x21, 0
+	.dw 0x2f40, 0xc80e,	0x2f7f, 0xc80e,		0x21, 0
+	.dw 0x2fc0, 0xc80e,	0x2fff, 0xc80e,		0x21, 0
+	.dw 0x3040, 0xc80e,	0x307f, 0xc80e,		0x21, 0
+	.dw 0x30c0, 0xc80e,	0x30ff, 0xc80e,		0x21, 0
+	.dw 0x3140, 0xc80e,	0x317f, 0xc80e,		0x21, 0
+	.dw 0x31c0, 0xc80e,	0x31ff, 0xc80e,		0x21, 0
+	.dw 0x3240, 0xc80e,	0x327f, 0xc80e,		0x21, 0
+	.dw 0x32c0, 0xc80e,	0x32ff, 0xc80e,		0x21, 0
+	.dw 0x3340, 0xc80e,	0x337f, 0xc80e,		0x21, 0
+	.dw 0x33c0, 0xc80e,	0x33ff, 0xc80e,		0x21, 0
+	.dw 0x3440, 0xc80e,	0x347f, 0xc80e,		0x21, 0
+	.dw 0x34c0, 0xc80e,	0x34ff, 0xc80e,		0x21, 0
+	.dw 0x3540, 0xc80e,	0x357f, 0xc80e,		0x21, 0
+	.dw 0x35c0, 0xc80e,	0x35ff, 0xc80e,		0x21, 0
+	.dw 0x3640, 0xc80e,	0x367f, 0xc80e,		0x21, 0
+	.dw 0x36c0, 0xc80e,	0x36ff, 0xc80e,		0x21, 0
+	.dw 0x3740, 0xc80e,	0x377f, 0xc80e,		0x21, 0
+	.dw 0x37c0, 0xc80e,	0x37ff, 0xc80e,		0x21, 0
+	.dw 0x3840, 0xc80e,	0x387f, 0xc80e,		0x21, 0
+	.dw 0x38c0, 0xc80e,	0x38ff, 0xc80e,		0x21, 0
+	.dw 0x3940, 0xc80e,	0x397f, 0xc80e,		0x21, 0
+	.dw 0x39c0, 0xc80e,	0x3fff, 0xc80e,		0x21, 0
+	.dw 0x4040, 0xc80e,	0x407f, 0xc80e,		0x21, 0
+	.dw 0x40c0, 0xc80e,	0x40ff, 0xc80e,		0x21, 0
+	.dw 0x4140, 0xc80e,	0x417f, 0xc80e,		0x21, 0
+	.dw 0x41c0, 0xc80e,	0x41ff, 0xc80e,		0x21, 0
+	.dw 0x4240, 0xc80e,	0x427f, 0xc80e,		0x21, 0
+	.dw 0x42c0, 0xc80e,	0x42ff, 0xc80e,		0x21, 0
+	.dw 0x4340, 0xc80e,	0x437f, 0xc80e,		0x21, 0
+	.dw 0x43c0, 0xc80e,	0x43ff, 0xc80e,		0x21, 0
+	.dw 0x4440, 0xc80e,	0x447f, 0xc80e,		0x21, 0
+	.dw 0x44c0, 0xc80e,	0x44ff, 0xc80e,		0x21, 0
+	.dw 0x4540, 0xc80e,	0x457f, 0xc80e,		0x21, 0
+	.dw 0x45c0, 0xc80e,	0x45ff, 0xc80e,		0x21, 0
+	.dw 0x4640, 0xc80e,	0x467f, 0xc80e,		0x21, 0
+	.dw 0x46c0, 0xc80e,	0x46ff, 0xc80e,		0x21, 0
+	.dw 0x4740, 0xc80e,	0x477f, 0xc80e,		0x21, 0
+	.dw 0x47c0, 0xc80e,	0x47ff, 0xc80e,		0x21, 0
+	.dw 0x4840, 0xc80e,	0x487f, 0xc80e,		0x21, 0
+	.dw 0x48c0, 0xc80e,	0x48ff, 0xc80e,		0x21, 0
+	.dw 0x4940, 0xc80e,	0x497f, 0xc80e,		0x21, 0
+	.dw 0x49c0, 0xc80e,	0x49ff, 0xc80e,		0x21, 0
+	.dw 0x4a40, 0xc80e,	0x4a7f, 0xc80e,		0x21, 0
+	.dw 0x4ac0, 0xc80e,	0x4aff, 0xc80e,		0x21, 0
+	.dw 0x4b40, 0xc80e,	0x4b7f, 0xc80e,		0x21, 0
+	.dw 0x4bc0, 0xc80e,	0x4bff, 0xc80e,		0x21, 0
+	.dw 0x4c40, 0xc80e,	0x4c7f, 0xc80e,		0x21, 0
+	.dw 0x4cc0, 0xc80e,	0x4cff, 0xc80e,		0x21, 0
+	.dw 0x4d40, 0xc80e,	0x4d7f, 0xc80e,		0x21, 0
+	.dw 0x4dc0, 0xc80e,	0x4dff, 0xc80e,		0x21, 0
+	.dw 0x4e40, 0xc80e,	0x4e7f, 0xc80e,		0x21, 0
+	.dw 0x4ec0, 0xc80e,	0x4eff, 0xc80e,		0x21, 0
+	.dw 0x4f40, 0xc80e,	0x4f7f, 0xc80e,		0x21, 0
+	.dw 0x4fc0, 0xc80e,	0x4fff, 0xc80e,		0x21, 0
+	.dw 0x5040, 0xc80e,	0x507f, 0xc80e,		0x21, 0
+	.dw 0x50c0, 0xc80e,	0x50ff, 0xc80e,		0x21, 0
+	.dw 0x5140, 0xc80e,	0x517f, 0xc80e,		0x21, 0
+	.dw 0x51c0, 0xc80e,	0x51ff, 0xc80e,		0x21, 0
+	.dw 0x5240, 0xc80e,	0x527f, 0xc80e,		0x21, 0
+	.dw 0x52c0, 0xc80e,	0x52ff, 0xc80e,		0x21, 0
+	.dw 0x5340, 0xc80e,	0x537f, 0xc80e,		0x21, 0
+	.dw 0x53c0, 0xc80e,	0x53ff, 0xc80e,		0x21, 0
+	.dw 0x5440, 0xc80e,	0x547f, 0xc80e,		0x21, 0
+	.dw 0x54c0, 0xc80e,	0x54ff, 0xc80e,		0x21, 0
+	.dw 0x5540, 0xc80e,	0x557f, 0xc80e,		0x21, 0
+	.dw 0x55c0, 0xc80e,	0x55ff, 0xc80e,		0x21, 0
+	.dw 0x5640, 0xc80e,	0x567f, 0xc80e,		0x21, 0
+	.dw 0x56c0, 0xc80e,	0x56ff, 0xc80e,		0x21, 0
+	.dw 0x5740, 0xc80e,	0x577f, 0xc80e,		0x21, 0
+	.dw 0x57c0, 0xc80e,	0x57ff, 0xc80e,		0x21, 0
+	.dw 0x5840, 0xc80e,	0x587f, 0xc80e,		0x21, 0
+	.dw 0x58c0, 0xc80e,	0x58ff, 0xc80e,		0x21, 0
+	.dw 0x5940, 0xc80e,	0x597f, 0xc80e,		0x21, 0
+	.dw 0x59c0, 0xc80e,	0x5fff, 0xc80e,		0x21, 0
+	.dw 0x6040, 0xc80e,	0x607f, 0xc80e,		0x21, 0
+	.dw 0x60c0, 0xc80e,	0x60ff, 0xc80e,		0x21, 0
+	.dw 0x6140, 0xc80e,	0x617f, 0xc80e,		0x21, 0
+	.dw 0x61c0, 0xc80e,	0x61ff, 0xc80e,		0x21, 0
+	.dw 0x6240, 0xc80e,	0x627f, 0xc80e,		0x21, 0
+	.dw 0x62c0, 0xc80e,	0x62ff, 0xc80e,		0x21, 0
+	.dw 0x6340, 0xc80e,	0x637f, 0xc80e,		0x21, 0
+	.dw 0x63c0, 0xc80e,	0x63ff, 0xc80e,		0x21, 0
+	.dw 0x6440, 0xc80e,	0x647f, 0xc80e,		0x21, 0
+	.dw 0x64c0, 0xc80e,	0x64ff, 0xc80e,		0x21, 0
+	.dw 0x6540, 0xc80e,	0x657f, 0xc80e,		0x21, 0
+	.dw 0x65c0, 0xc80e,	0x65ff, 0xc80e,		0x21, 0
+	.dw 0x6640, 0xc80e,	0x667f, 0xc80e,		0x21, 0
+	.dw 0x66c0, 0xc80e,	0x66ff, 0xc80e,		0x21, 0
+	.dw 0x6740, 0xc80e,	0x677f, 0xc80e,		0x21, 0
+	.dw 0x67c0, 0xc80e,	0x67ff, 0xc80e,		0x21, 0
+	.dw 0x6840, 0xc80e,	0x687f, 0xc80e,		0x21, 0
+	.dw 0x68c0, 0xc80e,	0x68ff, 0xc80e,		0x21, 0
+	.dw 0x6940, 0xc80e,	0x697f, 0xc80e,		0x21, 0
+	.dw 0x69c0, 0xc80e,	0x69ff, 0xc80e,		0x21, 0
+	.dw 0x6a40, 0xc80e,	0x6a7f, 0xc80e,		0x21, 0
+	.dw 0x6ac0, 0xc80e,	0x6aff, 0xc80e,		0x21, 0
+	.dw 0x6b40, 0xc80e,	0x6b7f, 0xc80e,		0x21, 0
+	.dw 0x6bc0, 0xc80e,	0x6bff, 0xc80e,		0x21, 0
+	.dw 0x6c40, 0xc80e,	0x6c7f, 0xc80e,		0x21, 0
+	.dw 0x6cc0, 0xc80e,	0x6cff, 0xc80e,		0x21, 0
+	.dw 0x6d40, 0xc80e,	0x6d7f, 0xc80e,		0x21, 0
+	.dw 0x6dc0, 0xc80e,	0x6dff, 0xc80e,		0x21, 0
+	.dw 0x6e40, 0xc80e,	0x6e7f, 0xc80e,		0x21, 0
+	.dw 0x6ec0, 0xc80e,	0x6eff, 0xc80e,		0x21, 0
+	.dw 0x6f40, 0xc80e,	0x6f7f, 0xc80e,		0x21, 0
+	.dw 0x6fc0, 0xc80e,	0x6fff, 0xc80e,		0x21, 0
+	.dw 0x7040, 0xc80e,	0x707f, 0xc80e,		0x21, 0
+	.dw 0x70c0, 0xc80e,	0x70ff, 0xc80e,		0x21, 0
+	.dw 0x7140, 0xc80e,	0x717f, 0xc80e,		0x21, 0
+	.dw 0x71c0, 0xc80e,	0x71ff, 0xc80e,		0x21, 0
+	.dw 0x7240, 0xc80e,	0x727f, 0xc80e,		0x21, 0
+	.dw 0x72c0, 0xc80e,	0x72ff, 0xc80e,		0x21, 0
+	.dw 0x7340, 0xc80e,	0x737f, 0xc80e,		0x21, 0
+	.dw 0x73c0, 0xc80e,	0x73ff, 0xc80e,		0x21, 0
+	.dw 0x7440, 0xc80e,	0x747f, 0xc80e,		0x21, 0
+	.dw 0x74c0, 0xc80e,	0x74ff, 0xc80e,		0x21, 0
+	.dw 0x7540, 0xc80e,	0x757f, 0xc80e,		0x21, 0
+	.dw 0x75c0, 0xc80e,	0x75ff, 0xc80e,		0x21, 0
+	.dw 0x7640, 0xc80e,	0x767f, 0xc80e,		0x21, 0
+	.dw 0x76c0, 0xc80e,	0x76ff, 0xc80e,		0x21, 0
+	.dw 0x7740, 0xc80e,	0x777f, 0xc80e,		0x21, 0
+	.dw 0x77c0, 0xc80e,	0x77ff, 0xc80e,		0x21, 0
+	.dw 0x7840, 0xc80e,	0x787f, 0xc80e,		0x21, 0
+	.dw 0x78c0, 0xc80e,	0x78ff, 0xc80e,		0x21, 0
+	.dw 0x7940, 0xc80e,	0x797f, 0xc80e,		0x21, 0
+	.dw 0x79c0, 0xc80e,	0x7fff, 0xc80e,		0x21, 0
+	.dw 0x8040, 0xc80e,	0x807f, 0xc80e,		0x21, 0
+	.dw 0x80c0, 0xc80e,	0x80ff, 0xc80e,		0x21, 0
+	.dw 0x8140, 0xc80e,	0x817f, 0xc80e,		0x21, 0
+	.dw 0x81c0, 0xc80e,	0x81ff, 0xc80e,		0x21, 0
+	.dw 0x8240, 0xc80e,	0x827f, 0xc80e,		0x21, 0
+	.dw 0x82c0, 0xc80e,	0x82ff, 0xc80e,		0x21, 0
+	.dw 0x8340, 0xc80e,	0x837f, 0xc80e,		0x21, 0
+	.dw 0x83c0, 0xc80e,	0x83ff, 0xc80e,		0x21, 0
+	.dw 0x8440, 0xc80e,	0x847f, 0xc80e,		0x21, 0
+	.dw 0x84c0, 0xc80e,	0x84ff, 0xc80e,		0x21, 0
+	.dw 0x8540, 0xc80e,	0x857f, 0xc80e,		0x21, 0
+	.dw 0x85c0, 0xc80e,	0x85ff, 0xc80e,		0x21, 0
+	.dw 0x8640, 0xc80e,	0x867f, 0xc80e,		0x21, 0
+	.dw 0x86c0, 0xc80e,	0x86ff, 0xc80e,		0x21, 0
+	.dw 0x8740, 0xc80e,	0x877f, 0xc80e,		0x21, 0
+	.dw 0x87c0, 0xc80e,	0x87ff, 0xc80e,		0x21, 0
+	.dw 0x8840, 0xc80e,	0x887f, 0xc80e,		0x21, 0
+	.dw 0x88c0, 0xc80e,	0x88ff, 0xc80e,		0x21, 0
+	.dw 0x8940, 0xc80e,	0x897f, 0xc80e,		0x21, 0
+	.dw 0x89c0, 0xc80e,	0x89ff, 0xc80e,		0x21, 0
+	.dw 0x8a40, 0xc80e,	0x8a7f, 0xc80e,		0x21, 0
+	.dw 0x8ac0, 0xc80e,	0x8aff, 0xc80e,		0x21, 0
+	.dw 0x8b40, 0xc80e,	0x8b7f, 0xc80e,		0x21, 0
+	.dw 0x8bc0, 0xc80e,	0x8bff, 0xc80e,		0x21, 0
+	.dw 0x8c40, 0xc80e,	0x8c7f, 0xc80e,		0x21, 0
+	.dw 0x8cc0, 0xc80e,	0x8cff, 0xc80e,		0x21, 0
+	.dw 0x8d40, 0xc80e,	0x8d7f, 0xc80e,		0x21, 0
+	.dw 0x8dc0, 0xc80e,	0x8dff, 0xc80e,		0x21, 0
+	.dw 0x8e40, 0xc80e,	0x8e7f, 0xc80e,		0x21, 0
+	.dw 0x8ec0, 0xc80e,	0x8eff, 0xc80e,		0x21, 0
+	.dw 0x8f40, 0xc80e,	0x8f7f, 0xc80e,		0x21, 0
+	.dw 0x8fc0, 0xc80e,	0x8fff, 0xc80e,		0x21, 0
+	.dw 0x9040, 0xc80e,	0x907f, 0xc80e,		0x21, 0
+	.dw 0x90c0, 0xc80e,	0x90ff, 0xc80e,		0x21, 0
+	.dw 0x9140, 0xc80e,	0x917f, 0xc80e,		0x21, 0
+	.dw 0x91c0, 0xc80e,	0x91ff, 0xc80e,		0x21, 0
+	.dw 0x9240, 0xc80e,	0x927f, 0xc80e,		0x21, 0
+	.dw 0x92c0, 0xc80e,	0x92ff, 0xc80e,		0x21, 0
+	.dw 0x9340, 0xc80e,	0x937f, 0xc80e,		0x21, 0
+	.dw 0x93c0, 0xc80e,	0x93ff, 0xc80e,		0x21, 0
+	.dw 0x9440, 0xc80e,	0x947f, 0xc80e,		0x21, 0
+	.dw 0x94c0, 0xc80e,	0x94ff, 0xc80e,		0x21, 0
+	.dw 0x9540, 0xc80e,	0x957f, 0xc80e,		0x21, 0
+	.dw 0x95c0, 0xc80e,	0x95ff, 0xc80e,		0x21, 0
+	.dw 0x9640, 0xc80e,	0x967f, 0xc80e,		0x21, 0
+	.dw 0x96c0, 0xc80e,	0x96ff, 0xc80e,		0x21, 0
+	.dw 0x9740, 0xc80e,	0x977f, 0xc80e,		0x21, 0
+	.dw 0x97c0, 0xc80e,	0x97ff, 0xc80e,		0x21, 0
+	.dw 0x9840, 0xc80e,	0x987f, 0xc80e,		0x21, 0
+	.dw 0x98c0, 0xc80e,	0x98ff, 0xc80e,		0x21, 0
+	.dw 0x9940, 0xc80e,	0x997f, 0xc80e,		0x21, 0
+	.dw 0x99c0, 0xc80e,	0x9fff, 0xc80e,		0x21, 0
+	.dw 0xa040, 0xc80e,	0xa07f, 0xc80e,		0x21, 0
+	.dw 0xa0c0, 0xc80e,	0xa0ff, 0xc80e,		0x21, 0
+	.dw 0xa140, 0xc80e,	0xa17f, 0xc80e,		0x21, 0
+	.dw 0xa1c0, 0xc80e,	0xa1ff, 0xc80e,		0x21, 0
+	.dw 0xa240, 0xc80e,	0xa27f, 0xc80e,		0x21, 0
+	.dw 0xa2c0, 0xc80e,	0xa2ff, 0xc80e,		0x21, 0
+	.dw 0xa340, 0xc80e,	0xa37f, 0xc80e,		0x21, 0
+	.dw 0xa3c0, 0xc80e,	0xa3ff, 0xc80e,		0x21, 0
+	.dw 0xa440, 0xc80e,	0xa47f, 0xc80e,		0x21, 0
+	.dw 0xa4c0, 0xc80e,	0xa4ff, 0xc80e,		0x21, 0
+	.dw 0xa540, 0xc80e,	0xa57f, 0xc80e,		0x21, 0
+	.dw 0xa5c0, 0xc80e,	0xa5ff, 0xc80e,		0x21, 0
+	.dw 0xa640, 0xc80e,	0xa67f, 0xc80e,		0x21, 0
+	.dw 0xa6c0, 0xc80e,	0xa6ff, 0xc80e,		0x21, 0
+	.dw 0xa740, 0xc80e,	0xa77f, 0xc80e,		0x21, 0
+	.dw 0xa7c0, 0xc80e,	0xa7ff, 0xc80e,		0x21, 0
+	.dw 0xa840, 0xc80e,	0xa87f, 0xc80e,		0x21, 0
+	.dw 0xa8c0, 0xc80e,	0xa8ff, 0xc80e,		0x21, 0
+	.dw 0xa940, 0xc80e,	0xa97f, 0xc80e,		0x21, 0
+	.dw 0xa9c0, 0xc80e,	0xa9ff, 0xc80e,		0x21, 0
+	.dw 0xaa40, 0xc80e,	0xaa7f, 0xc80e,		0x21, 0
+	.dw 0xaac0, 0xc80e,	0xaaff, 0xc80e,		0x21, 0
+	.dw 0xab40, 0xc80e,	0xab7f, 0xc80e,		0x21, 0
+	.dw 0xabc0, 0xc80e,	0xabff, 0xc80e,		0x21, 0
+	.dw 0xac40, 0xc80e,	0xac7f, 0xc80e,		0x21, 0
+	.dw 0xacc0, 0xc80e,	0xacff, 0xc80e,		0x21, 0
+	.dw 0xad40, 0xc80e,	0xad7f, 0xc80e,		0x21, 0
+	.dw 0xadc0, 0xc80e,	0xadff, 0xc80e,		0x21, 0
+	.dw 0xae40, 0xc80e,	0xae7f, 0xc80e,		0x21, 0
+	.dw 0xaec0, 0xc80e,	0xaeff, 0xc80e,		0x21, 0
+	.dw 0xaf40, 0xc80e,	0xaf7f, 0xc80e,		0x21, 0
+	.dw 0xafc0, 0xc80e,	0xafff, 0xc80e,		0x21, 0
+	.dw 0xb040, 0xc80e,	0xb07f, 0xc80e,		0x21, 0
+	.dw 0xb0c0, 0xc80e,	0xb0ff, 0xc80e,		0x21, 0
+	.dw 0xb140, 0xc80e,	0xb17f, 0xc80e,		0x21, 0
+	.dw 0xb1c0, 0xc80e,	0xb1ff, 0xc80e,		0x21, 0
+	.dw 0xb240, 0xc80e,	0xb27f, 0xc80e,		0x21, 0
+	.dw 0xb2c0, 0xc80e,	0xb2ff, 0xc80e,		0x21, 0
+	.dw 0xb340, 0xc80e,	0xb37f, 0xc80e,		0x21, 0
+	.dw 0xb3c0, 0xc80e,	0xb3ff, 0xc80e,		0x21, 0
+	.dw 0xb440, 0xc80e,	0xb47f, 0xc80e,		0x21, 0
+	.dw 0xb4c0, 0xc80e,	0xb4ff, 0xc80e,		0x21, 0
+	.dw 0xb540, 0xc80e,	0xb57f, 0xc80e,		0x21, 0
+	.dw 0xb5c0, 0xc80e,	0xb5ff, 0xc80e,		0x21, 0
+	.dw 0xb640, 0xc80e,	0xb67f, 0xc80e,		0x21, 0
+	.dw 0xb6c0, 0xc80e,	0xb6ff, 0xc80e,		0x21, 0
+	.dw 0xb740, 0xc80e,	0xb77f, 0xc80e,		0x21, 0
+	.dw 0xb7c0, 0xc80e,	0xb7ff, 0xc80e,		0x21, 0
+	.dw 0xb840, 0xc80e,	0xb87f, 0xc80e,		0x21, 0
+	.dw 0xb8c0, 0xc80e,	0xb8ff, 0xc80e,		0x21, 0
+	.dw 0xb940, 0xc80e,	0xb97f, 0xc80e,		0x21, 0
+	.dw 0xb9c0, 0xc80e,	0xbfff, 0xc80e,		0x21, 0
+	.dw 0xc040, 0xc80e,	0xc07f, 0xc80e,		0x21, 0
+	.dw 0xc0c0, 0xc80e,	0xc0ff, 0xc80e,		0x21, 0
+	.dw 0xc140, 0xc80e,	0xc17f, 0xc80e,		0x21, 0
+	.dw 0xc1c0, 0xc80e,	0xc1ff, 0xc80e,		0x21, 0
+	.dw 0xc240, 0xc80e,	0xc27f, 0xc80e,		0x21, 0
+	.dw 0xc2c0, 0xc80e,	0xc2ff, 0xc80e,		0x21, 0
+	.dw 0xc340, 0xc80e,	0xc37f, 0xc80e,		0x21, 0
+	.dw 0xc3c0, 0xc80e,	0xc3ff, 0xc80e,		0x21, 0
+	.dw 0xc440, 0xc80e,	0xc47f, 0xc80e,		0x21, 0
+	.dw 0xc4c0, 0xc80e,	0xc4ff, 0xc80e,		0x21, 0
+	.dw 0xc540, 0xc80e,	0xc57f, 0xc80e,		0x21, 0
+	.dw 0xc5c0, 0xc80e,	0xc5ff, 0xc80e,		0x21, 0
+	.dw 0xc640, 0xc80e,	0xc67f, 0xc80e,		0x21, 0
+	.dw 0xc6c0, 0xc80e,	0xc6ff, 0xc80e,		0x21, 0
+	.dw 0xc740, 0xc80e,	0xc77f, 0xc80e,		0x21, 0
+	.dw 0xc7c0, 0xc80e,	0xc7ff, 0xc80e,		0x21, 0
+	.dw 0xc840, 0xc80e,	0xc87f, 0xc80e,		0x21, 0
+	.dw 0xc8c0, 0xc80e,	0xc8ff, 0xc80e,		0x21, 0
+	.dw 0xc940, 0xc80e,	0xc97f, 0xc80e,		0x21, 0
+	.dw 0xc9c0, 0xc80e,	0xc9ff, 0xc80e,		0x21, 0
+	.dw 0xca40, 0xc80e,	0xca7f, 0xc80e,		0x21, 0
+	.dw 0xcac0, 0xc80e,	0xcaff, 0xc80e,		0x21, 0
+	.dw 0xcb40, 0xc80e,	0xcb7f, 0xc80e,		0x21, 0
+	.dw 0xcbc0, 0xc80e,	0xcbff, 0xc80e,		0x21, 0
+	.dw 0xcc40, 0xc80e,	0xcc7f, 0xc80e,		0x21, 0
+	.dw 0xccc0, 0xc80e,	0xccff, 0xc80e,		0x21, 0
+	.dw 0xcd40, 0xc80e,	0xcd7f, 0xc80e,		0x21, 0
+	.dw 0xcdc0, 0xc80e,	0xcdff, 0xc80e,		0x21, 0
+	.dw 0xce40, 0xc80e,	0xce7f, 0xc80e,		0x21, 0
+	.dw 0xcec0, 0xc80e,	0xceff, 0xc80e,		0x21, 0
+	.dw 0xcf40, 0xc80e,	0xcf7f, 0xc80e,		0x21, 0
+	.dw 0xcfc0, 0xc80e,	0xcfff, 0xc80e,		0x21, 0
+	.dw 0xd040, 0xc80e,	0xd07f, 0xc80e,		0x21, 0
+	.dw 0xd0c0, 0xc80e,	0xd0ff, 0xc80e,		0x21, 0
+	.dw 0xd140, 0xc80e,	0xd17f, 0xc80e,		0x21, 0
+	.dw 0xd1c0, 0xc80e,	0xd1ff, 0xc80e,		0x21, 0
+	.dw 0xd240, 0xc80e,	0xd27f, 0xc80e,		0x21, 0
+	.dw 0xd2c0, 0xc80e,	0xd2ff, 0xc80e,		0x21, 0
+	.dw 0xd340, 0xc80e,	0xd37f, 0xc80e,		0x21, 0
+	.dw 0xd3c0, 0xc80e,	0xd3ff, 0xc80e,		0x21, 0
+	.dw 0xd440, 0xc80e,	0xd47f, 0xc80e,		0x21, 0
+	.dw 0xd4c0, 0xc80e,	0xd4ff, 0xc80e,		0x21, 0
+	.dw 0xd540, 0xc80e,	0xd57f, 0xc80e,		0x21, 0
+	.dw 0xd5c0, 0xc80e,	0xd5ff, 0xc80e,		0x21, 0
+	.dw 0xd640, 0xc80e,	0xd67f, 0xc80e,		0x21, 0
+	.dw 0xd6c0, 0xc80e,	0xd6ff, 0xc80e,		0x21, 0
+	.dw 0xd740, 0xc80e,	0xd77f, 0xc80e,		0x21, 0
+	.dw 0xd7c0, 0xc80e,	0xd7ff, 0xc80e,		0x21, 0
+	.dw 0xd840, 0xc80e,	0xd87f, 0xc80e,		0x21, 0
+	.dw 0xd8c0, 0xc80e,	0xd8ff, 0xc80e,		0x21, 0
+	.dw 0xd940, 0xc80e,	0xd97f, 0xc80e,		0x21, 0
+	.dw 0xd9c0, 0xc80e,	0xdfff, 0xc80e,		0x21, 0
+	.dw 0xe040, 0xc80e,	0xe07f, 0xc80e,		0x21, 0
+	.dw 0xe0c0, 0xc80e,	0xe0ff, 0xc80e,		0x21, 0
+	.dw 0xe140, 0xc80e,	0xe17f, 0xc80e,		0x21, 0
+	.dw 0xe1c0, 0xc80e,	0xe1ff, 0xc80e,		0x21, 0
+	.dw 0xe240, 0xc80e,	0xe27f, 0xc80e,		0x21, 0
+	.dw 0xe2c0, 0xc80e,	0xe2ff, 0xc80e,		0x21, 0
+	.dw 0xe340, 0xc80e,	0xe37f, 0xc80e,		0x21, 0
+	.dw 0xe3c0, 0xc80e,	0xe3ff, 0xc80e,		0x21, 0
+	.dw 0xe440, 0xc80e,	0xe47f, 0xc80e,		0x21, 0
+	.dw 0xe4c0, 0xc80e,	0xe4ff, 0xc80e,		0x21, 0
+	.dw 0xe540, 0xc80e,	0xe57f, 0xc80e,		0x21, 0
+	.dw 0xe5c0, 0xc80e,	0xe5ff, 0xc80e,		0x21, 0
+	.dw 0xe640, 0xc80e,	0xe67f, 0xc80e,		0x21, 0
+	.dw 0xe6c0, 0xc80e,	0xe6ff, 0xc80e,		0x21, 0
+	.dw 0xe740, 0xc80e,	0xe77f, 0xc80e,		0x21, 0
+	.dw 0xe7c0, 0xc80e,	0xe7ff, 0xc80e,		0x21, 0
+	.dw 0xe840, 0xc80e,	0xe87f, 0xc80e,		0x21, 0
+	.dw 0xe8c0, 0xc80e,	0xe8ff, 0xc80e,		0x21, 0
+	.dw 0xe940, 0xc80e,	0xe97f, 0xc80e,		0x21, 0
+	.dw 0xe9c0, 0xc80e,	0xe9ff, 0xc80e,		0x21, 0
+	.dw 0xea40, 0xc80e,	0xea7f, 0xc80e,		0x21, 0
+	.dw 0xeac0, 0xc80e,	0xeaff, 0xc80e,		0x21, 0
+	.dw 0xeb40, 0xc80e,	0xeb7f, 0xc80e,		0x21, 0
+	.dw 0xebc0, 0xc80e,	0xebff, 0xc80e,		0x21, 0
+	.dw 0xec40, 0xc80e,	0xec7f, 0xc80e,		0x21, 0
+	.dw 0xecc0, 0xc80e,	0xecff, 0xc80e,		0x21, 0
+	.dw 0xed40, 0xc80e,	0xed7f, 0xc80e,		0x21, 0
+	.dw 0xedc0, 0xc80e,	0xedff, 0xc80e,		0x21, 0
+	.dw 0xee40, 0xc80e,	0xee7f, 0xc80e,		0x21, 0
+	.dw 0xeec0, 0xc80e,	0xeeff, 0xc80e,		0x21, 0
+	.dw 0xef40, 0xc80e,	0xef7f, 0xc80e,		0x21, 0
+	.dw 0xefc0, 0xc80e,	0xefff, 0xc80e,		0x21, 0
+	.dw 0xf040, 0xc80e,	0xf07f, 0xc80e,		0x21, 0
+	.dw 0xf0c0, 0xc80e,	0xf0ff, 0xc80e,		0x21, 0
+	.dw 0xf140, 0xc80e,	0xf17f, 0xc80e,		0x21, 0
+	.dw 0xf1c0, 0xc80e,	0xf1ff, 0xc80e,		0x21, 0
+	.dw 0xf240, 0xc80e,	0xf27f, 0xc80e,		0x21, 0
+	.dw 0xf2c0, 0xc80e,	0xf2ff, 0xc80e,		0x21, 0
+	.dw 0xf340, 0xc80e,	0xf37f, 0xc80e,		0x21, 0
+	.dw 0xf3c0, 0xc80e,	0xf3ff, 0xc80e,		0x21, 0
+	.dw 0xf440, 0xc80e,	0xf47f, 0xc80e,		0x21, 0
+	.dw 0xf4c0, 0xc80e,	0xf4ff, 0xc80e,		0x21, 0
+	.dw 0xf540, 0xc80e,	0xf57f, 0xc80e,		0x21, 0
+	.dw 0xf5c0, 0xc80e,	0xf5ff, 0xc80e,		0x21, 0
+	.dw 0xf640, 0xc80e,	0xf67f, 0xc80e,		0x21, 0
+	.dw 0xf6c0, 0xc80e,	0xf6ff, 0xc80e,		0x21, 0
+	.dw 0xf740, 0xc80e,	0xf77f, 0xc80e,		0x21, 0
+	.dw 0xf7c0, 0xc80e,	0xf7ff, 0xc80e,		0x21, 0
+	.dw 0xf840, 0xc80e,	0xf87f, 0xc80e,		0x21, 0
+	.dw 0xf8c0, 0xc80e,	0xf8ff, 0xc80e,		0x21, 0
+	.dw 0xf940, 0xc80e,	0xf97f, 0xc80e,		0x21, 0
+	.dw 0xf9c0, 0xc80e,	0xffff, 0xc80e,		0x21, 0
+	.dw 0x0040, 0xc80f,	0x007f, 0xc80f,		0x21, 0
+	.dw 0x00c0, 0xc80f,	0x00ff, 0xc80f,		0x21, 0
+	.dw 0x0140, 0xc80f,	0x017f, 0xc80f,		0x21, 0
+	.dw 0x01c0, 0xc80f,	0x01ff, 0xc80f,		0x21, 0
+	.dw 0x0240, 0xc80f,	0x027f, 0xc80f,		0x21, 0
+	.dw 0x02c0, 0xc80f,	0x02ff, 0xc80f,		0x21, 0
+	.dw 0x0340, 0xc80f,	0x037f, 0xc80f,		0x21, 0
+	.dw 0x03c0, 0xc80f,	0x03ff, 0xc80f,		0x21, 0
+	.dw 0x0440, 0xc80f,	0x047f, 0xc80f,		0x21, 0
+	.dw 0x04c0, 0xc80f,	0x04ff, 0xc80f,		0x21, 0
+	.dw 0x0540, 0xc80f,	0x057f, 0xc80f,		0x21, 0
+	.dw 0x05c0, 0xc80f,	0x05ff, 0xc80f,		0x21, 0
+	.dw 0x0640, 0xc80f,	0x067f, 0xc80f,		0x21, 0
+	.dw 0x06c0, 0xc80f,	0x06ff, 0xc80f,		0x21, 0
+	.dw 0x0740, 0xc80f,	0x077f, 0xc80f,		0x21, 0
+	.dw 0x07c0, 0xc80f,	0x07ff, 0xc80f,		0x21, 0
+	.dw 0x0840, 0xc80f,	0x087f, 0xc80f,		0x21, 0
+	.dw 0x08c0, 0xc80f,	0x08ff, 0xc80f,		0x21, 0
+	.dw 0x0940, 0xc80f,	0x097f, 0xc80f,		0x21, 0
+	.dw 0x09c0, 0xc80f,	0x09ff, 0xc80f,		0x21, 0
+	.dw 0x0a40, 0xc80f,	0x0a7f, 0xc80f,		0x21, 0
+	.dw 0x0ac0, 0xc80f,	0x0aff, 0xc80f,		0x21, 0
+	.dw 0x0b40, 0xc80f,	0x0b7f, 0xc80f,		0x21, 0
+	.dw 0x0bc0, 0xc80f,	0x0bff, 0xc80f,		0x21, 0
+	.dw 0x0c40, 0xc80f,	0x0c7f, 0xc80f,		0x21, 0
+	.dw 0x0cc0, 0xc80f,	0x0cff, 0xc80f,		0x21, 0
+	.dw 0x0d40, 0xc80f,	0x0d7f, 0xc80f,		0x21, 0
+	.dw 0x0dc0, 0xc80f,	0x0dff, 0xc80f,		0x21, 0
+	.dw 0x0e40, 0xc80f,	0x0e7f, 0xc80f,		0x21, 0
+	.dw 0x0ec0, 0xc80f,	0x0eff, 0xc80f,		0x21, 0
+	.dw 0x0f40, 0xc80f,	0x0f7f, 0xc80f,		0x21, 0
+	.dw 0x0fc0, 0xc80f,	0x0fff, 0xc80f,		0x21, 0
+	.dw 0x1040, 0xc80f,	0x107f, 0xc80f,		0x21, 0
+	.dw 0x10c0, 0xc80f,	0x10ff, 0xc80f,		0x21, 0
+	.dw 0x1140, 0xc80f,	0x117f, 0xc80f,		0x21, 0
+	.dw 0x11c0, 0xc80f,	0x11ff, 0xc80f,		0x21, 0
+	.dw 0x1240, 0xc80f,	0x127f, 0xc80f,		0x21, 0
+	.dw 0x12c0, 0xc80f,	0x12ff, 0xc80f,		0x21, 0
+	.dw 0x1340, 0xc80f,	0x137f, 0xc80f,		0x21, 0
+	.dw 0x13c0, 0xc80f,	0x13ff, 0xc80f,		0x21, 0
+	.dw 0x1440, 0xc80f,	0x147f, 0xc80f,		0x21, 0
+	.dw 0x14c0, 0xc80f,	0x14ff, 0xc80f,		0x21, 0
+	.dw 0x1540, 0xc80f,	0x157f, 0xc80f,		0x21, 0
+	.dw 0x15c0, 0xc80f,	0x15ff, 0xc80f,		0x21, 0
+	.dw 0x1640, 0xc80f,	0x167f, 0xc80f,		0x21, 0
+	.dw 0x16c0, 0xc80f,	0x16ff, 0xc80f,		0x21, 0
+	.dw 0x1740, 0xc80f,	0x177f, 0xc80f,		0x21, 0
+	.dw 0x17c0, 0xc80f,	0x17ff, 0xc80f,		0x21, 0
+	.dw 0x1840, 0xc80f,	0x187f, 0xc80f,		0x21, 0
+	.dw 0x18c0, 0xc80f,	0x18ff, 0xc80f,		0x21, 0
+	.dw 0x1940, 0xc80f,	0x197f, 0xc80f,		0x21, 0
+	.dw 0x19c0, 0xc80f,	0x1fff, 0xc80f,		0x21, 0
+	.dw 0x2040, 0xc80f,	0x207f, 0xc80f,		0x21, 0
+	.dw 0x20c0, 0xc80f,	0x20ff, 0xc80f,		0x21, 0
+	.dw 0x2140, 0xc80f,	0x217f, 0xc80f,		0x21, 0
+	.dw 0x21c0, 0xc80f,	0x21ff, 0xc80f,		0x21, 0
+	.dw 0x2240, 0xc80f,	0x227f, 0xc80f,		0x21, 0
+	.dw 0x22c0, 0xc80f,	0x22ff, 0xc80f,		0x21, 0
+	.dw 0x2340, 0xc80f,	0x237f, 0xc80f,		0x21, 0
+	.dw 0x23c0, 0xc80f,	0x23ff, 0xc80f,		0x21, 0
+	.dw 0x2440, 0xc80f,	0x247f, 0xc80f,		0x21, 0
+	.dw 0x24c0, 0xc80f,	0x24ff, 0xc80f,		0x21, 0
+	.dw 0x2540, 0xc80f,	0x257f, 0xc80f,		0x21, 0
+	.dw 0x25c0, 0xc80f,	0x25ff, 0xc80f,		0x21, 0
+	.dw 0x2640, 0xc80f,	0x267f, 0xc80f,		0x21, 0
+	.dw 0x26c0, 0xc80f,	0x26ff, 0xc80f,		0x21, 0
+	.dw 0x2740, 0xc80f,	0x277f, 0xc80f,		0x21, 0
+	.dw 0x27c0, 0xc80f,	0x27ff, 0xc80f,		0x21, 0
+	.dw 0x2840, 0xc80f,	0x287f, 0xc80f,		0x21, 0
+	.dw 0x28c0, 0xc80f,	0x28ff, 0xc80f,		0x21, 0
+	.dw 0x2940, 0xc80f,	0x297f, 0xc80f,		0x21, 0
+	.dw 0x29c0, 0xc80f,	0x29ff, 0xc80f,		0x21, 0
+	.dw 0x2a40, 0xc80f,	0x2a7f, 0xc80f,		0x21, 0
+	.dw 0x2ac0, 0xc80f,	0x2aff, 0xc80f,		0x21, 0
+	.dw 0x2b40, 0xc80f,	0x2b7f, 0xc80f,		0x21, 0
+	.dw 0x2bc0, 0xc80f,	0x2bff, 0xc80f,		0x21, 0
+	.dw 0x2c40, 0xc80f,	0x2c7f, 0xc80f,		0x21, 0
+	.dw 0x2cc0, 0xc80f,	0x2cff, 0xc80f,		0x21, 0
+	.dw 0x2d40, 0xc80f,	0x2d7f, 0xc80f,		0x21, 0
+	.dw 0x2dc0, 0xc80f,	0x2dff, 0xc80f,		0x21, 0
+	.dw 0x2e40, 0xc80f,	0x2e7f, 0xc80f,		0x21, 0
+	.dw 0x2ec0, 0xc80f,	0x2eff, 0xc80f,		0x21, 0
+	.dw 0x2f40, 0xc80f,	0x2f7f, 0xc80f,		0x21, 0
+	.dw 0x2fc0, 0xc80f,	0x2fff, 0xc80f,		0x21, 0
+	.dw 0x3040, 0xc80f,	0x307f, 0xc80f,		0x21, 0
+	.dw 0x30c0, 0xc80f,	0x30ff, 0xc80f,		0x21, 0
+	.dw 0x3140, 0xc80f,	0x317f, 0xc80f,		0x21, 0
+	.dw 0x31c0, 0xc80f,	0x31ff, 0xc80f,		0x21, 0
+	.dw 0x3240, 0xc80f,	0x327f, 0xc80f,		0x21, 0
+	.dw 0x32c0, 0xc80f,	0x32ff, 0xc80f,		0x21, 0
+	.dw 0x3340, 0xc80f,	0x337f, 0xc80f,		0x21, 0
+	.dw 0x33c0, 0xc80f,	0x33ff, 0xc80f,		0x21, 0
+	.dw 0x3440, 0xc80f,	0x347f, 0xc80f,		0x21, 0
+	.dw 0x34c0, 0xc80f,	0x34ff, 0xc80f,		0x21, 0
+	.dw 0x3540, 0xc80f,	0x357f, 0xc80f,		0x21, 0
+	.dw 0x35c0, 0xc80f,	0x35ff, 0xc80f,		0x21, 0
+	.dw 0x3640, 0xc80f,	0x367f, 0xc80f,		0x21, 0
+	.dw 0x36c0, 0xc80f,	0x36ff, 0xc80f,		0x21, 0
+	.dw 0x3740, 0xc80f,	0x377f, 0xc80f,		0x21, 0
+	.dw 0x37c0, 0xc80f,	0x37ff, 0xc80f,		0x21, 0
+	.dw 0x3840, 0xc80f,	0x387f, 0xc80f,		0x21, 0
+	.dw 0x38c0, 0xc80f,	0x38ff, 0xc80f,		0x21, 0
+	.dw 0x3940, 0xc80f,	0x397f, 0xc80f,		0x21, 0
+	.dw 0x39c0, 0xc80f,	0xffff, 0xc80f,		0x21, 0
+	.dw 0x1a00, 0xc810,	0x1fff, 0xc810,		0x21, 0
+	.dw 0x3a00, 0xc810,	0x3fff, 0xc810,		0x21, 0
+	.dw 0x5a00, 0xc810,	0x5fff, 0xc810,		0x21, 0
+	.dw 0x7a00, 0xc810,	0x7fff, 0xc810,		0x21, 0
+	.dw 0x9a00, 0xc810,	0x9fff, 0xc810,		0x21, 0
+	.dw 0xba00, 0xc810,	0xbfff, 0xc810,		0x21, 0
+	.dw 0xda00, 0xc810,	0xdfff, 0xc810,		0x21, 0
+	.dw 0xfa00, 0xc810,	0xffff, 0xc810,		0x21, 0
+	.dw 0x1a00, 0xc811,	0x1fff, 0xc811,		0x21, 0
+	.dw 0x3a00, 0xc811,	0x3fff, 0xc811,		0x21, 0
+	.dw 0x5a00, 0xc811,	0x5fff, 0xc811,		0x21, 0
+	.dw 0x7a00, 0xc811,	0x7fff, 0xc811,		0x21, 0
+	.dw 0x9a00, 0xc811,	0x9fff, 0xc811,		0x21, 0
+	.dw 0xba00, 0xc811,	0xbfff, 0xc811,		0x21, 0
+	.dw 0xda00, 0xc811,	0xdfff, 0xc811,		0x21, 0
+	.dw 0xfa00, 0xc811,	0xffff, 0xc811,		0x21, 0
+	.dw 0x1a00, 0xc812,	0x1fff, 0xc812,		0x21, 0
+	.dw 0x3a00, 0xc812,	0x3fff, 0xc812,		0x21, 0
+	.dw 0x5a00, 0xc812,	0x5fff, 0xc812,		0x21, 0
+	.dw 0x7a00, 0xc812,	0x7fff, 0xc812,		0x21, 0
+	.dw 0x9a00, 0xc812,	0x9fff, 0xc812,		0x21, 0
+	.dw 0xba00, 0xc812,	0xbfff, 0xc812,		0x21, 0
+	.dw 0xda00, 0xc812,	0xdfff, 0xc812,		0x21, 0
+	.dw 0xfa00, 0xc812,	0xffff, 0xc813,		0x21, 0
+	.dw 0x1a00, 0xc814,	0x1fff, 0xc814,		0x21, 0
+	.dw 0x3a00, 0xc814,	0x3fff, 0xc814,		0x21, 0
+	.dw 0x5a00, 0xc814,	0x5fff, 0xc814,		0x21, 0
+	.dw 0x7a00, 0xc814,	0x7fff, 0xc814,		0x21, 0
+	.dw 0x9a00, 0xc814,	0x9fff, 0xc814,		0x21, 0
+	.dw 0xba00, 0xc814,	0xbfff, 0xc814,		0x21, 0
+	.dw 0xda00, 0xc814,	0xdfff, 0xc814,		0x21, 0
+	.dw 0xfa00, 0xc814,	0xffff, 0xc814,		0x21, 0
+	.dw 0x1a00, 0xc815,	0x1fff, 0xc815,		0x21, 0
+	.dw 0x3a00, 0xc815,	0x3fff, 0xc815,		0x21, 0
+	.dw 0x5a00, 0xc815,	0x5fff, 0xc815,		0x21, 0
+	.dw 0x7a00, 0xc815,	0x7fff, 0xc815,		0x21, 0
+	.dw 0x9a00, 0xc815,	0x9fff, 0xc815,		0x21, 0
+	.dw 0xba00, 0xc815,	0xbfff, 0xc815,		0x21, 0
+	.dw 0xda00, 0xc815,	0xdfff, 0xc815,		0x21, 0
+	.dw 0xfa00, 0xc815,	0xffff, 0xc815,		0x21, 0
+	.dw 0x1a00, 0xc816,	0x1fff, 0xc816,		0x21, 0
+	.dw 0x3a00, 0xc816,	0x3fff, 0xc816,		0x21, 0
+	.dw 0x5a00, 0xc816,	0x5fff, 0xc816,		0x21, 0
+	.dw 0x7a00, 0xc816,	0x7fff, 0xc816,		0x21, 0
+	.dw 0x9a00, 0xc816,	0x9fff, 0xc816,		0x21, 0
+	.dw 0xba00, 0xc816,	0xbfff, 0xc816,		0x21, 0
+	.dw 0xda00, 0xc816,	0xdfff, 0xc816,		0x21, 0
+	.dw 0xfa00, 0xc816,	0xffff, 0xc816,		0x21, 0
+	.dw 0x1a00, 0xc817,	0x1fff, 0xc817,		0x21, 0
+	.dw 0x3a00, 0xc817,	0x1fff, 0xc818,		0x21, 0
+	.dw 0x2040, 0xc818,	0x207f, 0xc818,		0x21, 0
+	.dw 0x20c0, 0xc818,	0x20ff, 0xc818,		0x21, 0
+	.dw 0x2140, 0xc818,	0x217f, 0xc818,		0x21, 0
+	.dw 0x21c0, 0xc818,	0x21ff, 0xc818,		0x21, 0
+	.dw 0x2240, 0xc818,	0x227f, 0xc818,		0x21, 0
+	.dw 0x22c0, 0xc818,	0x22ff, 0xc818,		0x21, 0
+	.dw 0x2340, 0xc818,	0x237f, 0xc818,		0x21, 0
+	.dw 0x23c0, 0xc818,	0x23ff, 0xc818,		0x21, 0
+	.dw 0x2440, 0xc818,	0x247f, 0xc818,		0x21, 0
+	.dw 0x24c0, 0xc818,	0x24ff, 0xc818,		0x21, 0
+	.dw 0x2540, 0xc818,	0x257f, 0xc818,		0x21, 0
+	.dw 0x25c0, 0xc818,	0x25ff, 0xc818,		0x21, 0
+	.dw 0x2640, 0xc818,	0x267f, 0xc818,		0x21, 0
+	.dw 0x26c0, 0xc818,	0x26ff, 0xc818,		0x21, 0
+	.dw 0x2740, 0xc818,	0x277f, 0xc818,		0x21, 0
+	.dw 0x27c0, 0xc818,	0x27ff, 0xc818,		0x21, 0
+	.dw 0x2840, 0xc818,	0x287f, 0xc818,		0x21, 0
+	.dw 0x28c0, 0xc818,	0x28ff, 0xc818,		0x21, 0
+	.dw 0x2940, 0xc818,	0x297f, 0xc818,		0x21, 0
+	.dw 0x29c0, 0xc818,	0x29ff, 0xc818,		0x21, 0
+	.dw 0x2a40, 0xc818,	0x2a7f, 0xc818,		0x21, 0
+	.dw 0x2ac0, 0xc818,	0x2aff, 0xc818,		0x21, 0
+	.dw 0x2b40, 0xc818,	0x2b7f, 0xc818,		0x21, 0
+	.dw 0x2bc0, 0xc818,	0x2bff, 0xc818,		0x21, 0
+	.dw 0x2c40, 0xc818,	0x2c7f, 0xc818,		0x21, 0
+	.dw 0x2cc0, 0xc818,	0x2cff, 0xc818,		0x21, 0
+	.dw 0x2d40, 0xc818,	0x2d7f, 0xc818,		0x21, 0
+	.dw 0x2dc0, 0xc818,	0x2dff, 0xc818,		0x21, 0
+	.dw 0x2e40, 0xc818,	0x2e7f, 0xc818,		0x21, 0
+	.dw 0x2ec0, 0xc818,	0x2eff, 0xc818,		0x21, 0
+	.dw 0x2f40, 0xc818,	0x2f7f, 0xc818,		0x21, 0
+	.dw 0x2fc0, 0xc818,	0x2fff, 0xc818,		0x21, 0
+	.dw 0x3040, 0xc818,	0x307f, 0xc818,		0x21, 0
+	.dw 0x30c0, 0xc818,	0x30ff, 0xc818,		0x21, 0
+	.dw 0x3140, 0xc818,	0x317f, 0xc818,		0x21, 0
+	.dw 0x31c0, 0xc818,	0x31ff, 0xc818,		0x21, 0
+	.dw 0x3240, 0xc818,	0x327f, 0xc818,		0x21, 0
+	.dw 0x32c0, 0xc818,	0x32ff, 0xc818,		0x21, 0
+	.dw 0x3340, 0xc818,	0x337f, 0xc818,		0x21, 0
+	.dw 0x33c0, 0xc818,	0x33ff, 0xc818,		0x21, 0
+	.dw 0x3440, 0xc818,	0x347f, 0xc818,		0x21, 0
+	.dw 0x34c0, 0xc818,	0x34ff, 0xc818,		0x21, 0
+	.dw 0x3540, 0xc818,	0x357f, 0xc818,		0x21, 0
+	.dw 0x35c0, 0xc818,	0x35ff, 0xc818,		0x21, 0
+	.dw 0x3640, 0xc818,	0x367f, 0xc818,		0x21, 0
+	.dw 0x36c0, 0xc818,	0x36ff, 0xc818,		0x21, 0
+	.dw 0x3740, 0xc818,	0x377f, 0xc818,		0x21, 0
+	.dw 0x37c0, 0xc818,	0x37ff, 0xc818,		0x21, 0
+	.dw 0x3840, 0xc818,	0x387f, 0xc818,		0x21, 0
+	.dw 0x38c0, 0xc818,	0x38ff, 0xc818,		0x21, 0
+	.dw 0x3940, 0xc818,	0x397f, 0xc818,		0x21, 0
+	.dw 0x39c0, 0xc818,	0x5fff, 0xc818,		0x21, 0
+	.dw 0x6040, 0xc818,	0x607f, 0xc818,		0x21, 0
+	.dw 0x60c0, 0xc818,	0x60ff, 0xc818,		0x21, 0
+	.dw 0x6140, 0xc818,	0x617f, 0xc818,		0x21, 0
+	.dw 0x61c0, 0xc818,	0x61ff, 0xc818,		0x21, 0
+	.dw 0x6240, 0xc818,	0x627f, 0xc818,		0x21, 0
+	.dw 0x62c0, 0xc818,	0x62ff, 0xc818,		0x21, 0
+	.dw 0x6340, 0xc818,	0x637f, 0xc818,		0x21, 0
+	.dw 0x63c0, 0xc818,	0x63ff, 0xc818,		0x21, 0
+	.dw 0x6440, 0xc818,	0x647f, 0xc818,		0x21, 0
+	.dw 0x64c0, 0xc818,	0x64ff, 0xc818,		0x21, 0
+	.dw 0x6540, 0xc818,	0x657f, 0xc818,		0x21, 0
+	.dw 0x65c0, 0xc818,	0x65ff, 0xc818,		0x21, 0
+	.dw 0x6640, 0xc818,	0x667f, 0xc818,		0x21, 0
+	.dw 0x66c0, 0xc818,	0x66ff, 0xc818,		0x21, 0
+	.dw 0x6740, 0xc818,	0x677f, 0xc818,		0x21, 0
+	.dw 0x67c0, 0xc818,	0x67ff, 0xc818,		0x21, 0
+	.dw 0x6840, 0xc818,	0x687f, 0xc818,		0x21, 0
+	.dw 0x68c0, 0xc818,	0x68ff, 0xc818,		0x21, 0
+	.dw 0x6940, 0xc818,	0x697f, 0xc818,		0x21, 0
+	.dw 0x69c0, 0xc818,	0x69ff, 0xc818,		0x21, 0
+	.dw 0x6a40, 0xc818,	0x6a7f, 0xc818,		0x21, 0
+	.dw 0x6ac0, 0xc818,	0x6aff, 0xc818,		0x21, 0
+	.dw 0x6b40, 0xc818,	0x6b7f, 0xc818,		0x21, 0
+	.dw 0x6bc0, 0xc818,	0x6bff, 0xc818,		0x21, 0
+	.dw 0x6c40, 0xc818,	0x6c7f, 0xc818,		0x21, 0
+	.dw 0x6cc0, 0xc818,	0x6cff, 0xc818,		0x21, 0
+	.dw 0x6d40, 0xc818,	0x6d7f, 0xc818,		0x21, 0
+	.dw 0x6dc0, 0xc818,	0x6dff, 0xc818,		0x21, 0
+	.dw 0x6e40, 0xc818,	0x6e7f, 0xc818,		0x21, 0
+	.dw 0x6ec0, 0xc818,	0x6eff, 0xc818,		0x21, 0
+	.dw 0x6f40, 0xc818,	0x6f7f, 0xc818,		0x21, 0
+	.dw 0x6fc0, 0xc818,	0x6fff, 0xc818,		0x21, 0
+	.dw 0x7040, 0xc818,	0x707f, 0xc818,		0x21, 0
+	.dw 0x70c0, 0xc818,	0x70ff, 0xc818,		0x21, 0
+	.dw 0x7140, 0xc818,	0x717f, 0xc818,		0x21, 0
+	.dw 0x71c0, 0xc818,	0x71ff, 0xc818,		0x21, 0
+	.dw 0x7240, 0xc818,	0x727f, 0xc818,		0x21, 0
+	.dw 0x72c0, 0xc818,	0x72ff, 0xc818,		0x21, 0
+	.dw 0x7340, 0xc818,	0x737f, 0xc818,		0x21, 0
+	.dw 0x73c0, 0xc818,	0x73ff, 0xc818,		0x21, 0
+	.dw 0x7440, 0xc818,	0x747f, 0xc818,		0x21, 0
+	.dw 0x74c0, 0xc818,	0x74ff, 0xc818,		0x21, 0
+	.dw 0x7540, 0xc818,	0x757f, 0xc818,		0x21, 0
+	.dw 0x75c0, 0xc818,	0x75ff, 0xc818,		0x21, 0
+	.dw 0x7640, 0xc818,	0x767f, 0xc818,		0x21, 0
+	.dw 0x76c0, 0xc818,	0x76ff, 0xc818,		0x21, 0
+	.dw 0x7740, 0xc818,	0x777f, 0xc818,		0x21, 0
+	.dw 0x77c0, 0xc818,	0x77ff, 0xc818,		0x21, 0
+	.dw 0x7840, 0xc818,	0x787f, 0xc818,		0x21, 0
+	.dw 0x78c0, 0xc818,	0x78ff, 0xc818,		0x21, 0
+	.dw 0x7940, 0xc818,	0x797f, 0xc818,		0x21, 0
+	.dw 0x79c0, 0xc818,	0x9fff, 0xc818,		0x21, 0
+	.dw 0xa040, 0xc818,	0xa07f, 0xc818,		0x21, 0
+	.dw 0xa0c0, 0xc818,	0xa0ff, 0xc818,		0x21, 0
+	.dw 0xa140, 0xc818,	0xa17f, 0xc818,		0x21, 0
+	.dw 0xa1c0, 0xc818,	0xa1ff, 0xc818,		0x21, 0
+	.dw 0xa240, 0xc818,	0xa27f, 0xc818,		0x21, 0
+	.dw 0xa2c0, 0xc818,	0xa2ff, 0xc818,		0x21, 0
+	.dw 0xa340, 0xc818,	0xa37f, 0xc818,		0x21, 0
+	.dw 0xa3c0, 0xc818,	0xa3ff, 0xc818,		0x21, 0
+	.dw 0xa440, 0xc818,	0xa47f, 0xc818,		0x21, 0
+	.dw 0xa4c0, 0xc818,	0xa4ff, 0xc818,		0x21, 0
+	.dw 0xa540, 0xc818,	0xa57f, 0xc818,		0x21, 0
+	.dw 0xa5c0, 0xc818,	0xa5ff, 0xc818,		0x21, 0
+	.dw 0xa640, 0xc818,	0xa67f, 0xc818,		0x21, 0
+	.dw 0xa6c0, 0xc818,	0xa6ff, 0xc818,		0x21, 0
+	.dw 0xa740, 0xc818,	0xa77f, 0xc818,		0x21, 0
+	.dw 0xa7c0, 0xc818,	0xa7ff, 0xc818,		0x21, 0
+	.dw 0xa840, 0xc818,	0xa87f, 0xc818,		0x21, 0
+	.dw 0xa8c0, 0xc818,	0xa8ff, 0xc818,		0x21, 0
+	.dw 0xa940, 0xc818,	0xa97f, 0xc818,		0x21, 0
+	.dw 0xa9c0, 0xc818,	0xa9ff, 0xc818,		0x21, 0
+	.dw 0xaa40, 0xc818,	0xaa7f, 0xc818,		0x21, 0
+	.dw 0xaac0, 0xc818,	0xaaff, 0xc818,		0x21, 0
+	.dw 0xab40, 0xc818,	0xab7f, 0xc818,		0x21, 0
+	.dw 0xabc0, 0xc818,	0xabff, 0xc818,		0x21, 0
+	.dw 0xac40, 0xc818,	0xac7f, 0xc818,		0x21, 0
+	.dw 0xacc0, 0xc818,	0xacff, 0xc818,		0x21, 0
+	.dw 0xad40, 0xc818,	0xad7f, 0xc818,		0x21, 0
+	.dw 0xadc0, 0xc818,	0xadff, 0xc818,		0x21, 0
+	.dw 0xae40, 0xc818,	0xae7f, 0xc818,		0x21, 0
+	.dw 0xaec0, 0xc818,	0xaeff, 0xc818,		0x21, 0
+	.dw 0xaf40, 0xc818,	0xaf7f, 0xc818,		0x21, 0
+	.dw 0xafc0, 0xc818,	0xafff, 0xc818,		0x21, 0
+	.dw 0xb040, 0xc818,	0xb07f, 0xc818,		0x21, 0
+	.dw 0xb0c0, 0xc818,	0xb0ff, 0xc818,		0x21, 0
+	.dw 0xb140, 0xc818,	0xb17f, 0xc818,		0x21, 0
+	.dw 0xb1c0, 0xc818,	0xb1ff, 0xc818,		0x21, 0
+	.dw 0xb240, 0xc818,	0xb27f, 0xc818,		0x21, 0
+	.dw 0xb2c0, 0xc818,	0xb2ff, 0xc818,		0x21, 0
+	.dw 0xb340, 0xc818,	0xb37f, 0xc818,		0x21, 0
+	.dw 0xb3c0, 0xc818,	0xb3ff, 0xc818,		0x21, 0
+	.dw 0xb440, 0xc818,	0xb47f, 0xc818,		0x21, 0
+	.dw 0xb4c0, 0xc818,	0xb4ff, 0xc818,		0x21, 0
+	.dw 0xb540, 0xc818,	0xb57f, 0xc818,		0x21, 0
+	.dw 0xb5c0, 0xc818,	0xb5ff, 0xc818,		0x21, 0
+	.dw 0xb640, 0xc818,	0xb67f, 0xc818,		0x21, 0
+	.dw 0xb6c0, 0xc818,	0xb6ff, 0xc818,		0x21, 0
+	.dw 0xb740, 0xc818,	0xb77f, 0xc818,		0x21, 0
+	.dw 0xb7c0, 0xc818,	0xb7ff, 0xc818,		0x21, 0
+	.dw 0xb840, 0xc818,	0xb87f, 0xc818,		0x21, 0
+	.dw 0xb8c0, 0xc818,	0xb8ff, 0xc818,		0x21, 0
+	.dw 0xb940, 0xc818,	0xb97f, 0xc818,		0x21, 0
+	.dw 0xb9c0, 0xc818,	0xdfff, 0xc818,		0x21, 0
+	.dw 0xe040, 0xc818,	0xe07f, 0xc818,		0x21, 0
+	.dw 0xe0c0, 0xc818,	0xe0ff, 0xc818,		0x21, 0
+	.dw 0xe140, 0xc818,	0xe17f, 0xc818,		0x21, 0
+	.dw 0xe1c0, 0xc818,	0xe1ff, 0xc818,		0x21, 0
+	.dw 0xe240, 0xc818,	0xe27f, 0xc818,		0x21, 0
+	.dw 0xe2c0, 0xc818,	0xe2ff, 0xc818,		0x21, 0
+	.dw 0xe340, 0xc818,	0xe37f, 0xc818,		0x21, 0
+	.dw 0xe3c0, 0xc818,	0xe3ff, 0xc818,		0x21, 0
+	.dw 0xe440, 0xc818,	0xe47f, 0xc818,		0x21, 0
+	.dw 0xe4c0, 0xc818,	0xe4ff, 0xc818,		0x21, 0
+	.dw 0xe540, 0xc818,	0xe57f, 0xc818,		0x21, 0
+	.dw 0xe5c0, 0xc818,	0xe5ff, 0xc818,		0x21, 0
+	.dw 0xe640, 0xc818,	0xe67f, 0xc818,		0x21, 0
+	.dw 0xe6c0, 0xc818,	0xe6ff, 0xc818,		0x21, 0
+	.dw 0xe740, 0xc818,	0xe77f, 0xc818,		0x21, 0
+	.dw 0xe7c0, 0xc818,	0xe7ff, 0xc818,		0x21, 0
+	.dw 0xe840, 0xc818,	0xe87f, 0xc818,		0x21, 0
+	.dw 0xe8c0, 0xc818,	0xe8ff, 0xc818,		0x21, 0
+	.dw 0xe940, 0xc818,	0xe97f, 0xc818,		0x21, 0
+	.dw 0xe9c0, 0xc818,	0xe9ff, 0xc818,		0x21, 0
+	.dw 0xea40, 0xc818,	0xea7f, 0xc818,		0x21, 0
+	.dw 0xeac0, 0xc818,	0xeaff, 0xc818,		0x21, 0
+	.dw 0xeb40, 0xc818,	0xeb7f, 0xc818,		0x21, 0
+	.dw 0xebc0, 0xc818,	0xebff, 0xc818,		0x21, 0
+	.dw 0xec40, 0xc818,	0xec7f, 0xc818,		0x21, 0
+	.dw 0xecc0, 0xc818,	0xecff, 0xc818,		0x21, 0
+	.dw 0xed40, 0xc818,	0xed7f, 0xc818,		0x21, 0
+	.dw 0xedc0, 0xc818,	0xedff, 0xc818,		0x21, 0
+	.dw 0xee40, 0xc818,	0xee7f, 0xc818,		0x21, 0
+	.dw 0xeec0, 0xc818,	0xeeff, 0xc818,		0x21, 0
+	.dw 0xef40, 0xc818,	0xef7f, 0xc818,		0x21, 0
+	.dw 0xefc0, 0xc818,	0xefff, 0xc818,		0x21, 0
+	.dw 0xf040, 0xc818,	0xf07f, 0xc818,		0x21, 0
+	.dw 0xf0c0, 0xc818,	0xf0ff, 0xc818,		0x21, 0
+	.dw 0xf140, 0xc818,	0xf17f, 0xc818,		0x21, 0
+	.dw 0xf1c0, 0xc818,	0xf1ff, 0xc818,		0x21, 0
+	.dw 0xf240, 0xc818,	0xf27f, 0xc818,		0x21, 0
+	.dw 0xf2c0, 0xc818,	0xf2ff, 0xc818,		0x21, 0
+	.dw 0xf340, 0xc818,	0xf37f, 0xc818,		0x21, 0
+	.dw 0xf3c0, 0xc818,	0xf3ff, 0xc818,		0x21, 0
+	.dw 0xf440, 0xc818,	0xf47f, 0xc818,		0x21, 0
+	.dw 0xf4c0, 0xc818,	0xf4ff, 0xc818,		0x21, 0
+	.dw 0xf540, 0xc818,	0xf57f, 0xc818,		0x21, 0
+	.dw 0xf5c0, 0xc818,	0xf5ff, 0xc818,		0x21, 0
+	.dw 0xf640, 0xc818,	0xf67f, 0xc818,		0x21, 0
+	.dw 0xf6c0, 0xc818,	0xf6ff, 0xc818,		0x21, 0
+	.dw 0xf740, 0xc818,	0xf77f, 0xc818,		0x21, 0
+	.dw 0xf7c0, 0xc818,	0xf7ff, 0xc818,		0x21, 0
+	.dw 0xf840, 0xc818,	0xf87f, 0xc818,		0x21, 0
+	.dw 0xf8c0, 0xc818,	0xf8ff, 0xc818,		0x21, 0
+	.dw 0xf940, 0xc818,	0xf97f, 0xc818,		0x21, 0
+	.dw 0xf9c0, 0xc818,	0x1fff, 0xc819,		0x21, 0
+	.dw 0x2040, 0xc819,	0x207f, 0xc819,		0x21, 0
+	.dw 0x20c0, 0xc819,	0x20ff, 0xc819,		0x21, 0
+	.dw 0x2140, 0xc819,	0x217f, 0xc819,		0x21, 0
+	.dw 0x21c0, 0xc819,	0x21ff, 0xc819,		0x21, 0
+	.dw 0x2240, 0xc819,	0x227f, 0xc819,		0x21, 0
+	.dw 0x22c0, 0xc819,	0x22ff, 0xc819,		0x21, 0
+	.dw 0x2340, 0xc819,	0x237f, 0xc819,		0x21, 0
+	.dw 0x23c0, 0xc819,	0x23ff, 0xc819,		0x21, 0
+	.dw 0x2440, 0xc819,	0x247f, 0xc819,		0x21, 0
+	.dw 0x24c0, 0xc819,	0x24ff, 0xc819,		0x21, 0
+	.dw 0x2540, 0xc819,	0x257f, 0xc819,		0x21, 0
+	.dw 0x25c0, 0xc819,	0x25ff, 0xc819,		0x21, 0
+	.dw 0x2640, 0xc819,	0x267f, 0xc819,		0x21, 0
+	.dw 0x26c0, 0xc819,	0x26ff, 0xc819,		0x21, 0
+	.dw 0x2740, 0xc819,	0x277f, 0xc819,		0x21, 0
+	.dw 0x27c0, 0xc819,	0x27ff, 0xc819,		0x21, 0
+	.dw 0x2840, 0xc819,	0x287f, 0xc819,		0x21, 0
+	.dw 0x28c0, 0xc819,	0x28ff, 0xc819,		0x21, 0
+	.dw 0x2940, 0xc819,	0x297f, 0xc819,		0x21, 0
+	.dw 0x29c0, 0xc819,	0x29ff, 0xc819,		0x21, 0
+	.dw 0x2a40, 0xc819,	0x2a7f, 0xc819,		0x21, 0
+	.dw 0x2ac0, 0xc819,	0x2aff, 0xc819,		0x21, 0
+	.dw 0x2b40, 0xc819,	0x2b7f, 0xc819,		0x21, 0
+	.dw 0x2bc0, 0xc819,	0x2bff, 0xc819,		0x21, 0
+	.dw 0x2c40, 0xc819,	0x2c7f, 0xc819,		0x21, 0
+	.dw 0x2cc0, 0xc819,	0x2cff, 0xc819,		0x21, 0
+	.dw 0x2d40, 0xc819,	0x2d7f, 0xc819,		0x21, 0
+	.dw 0x2dc0, 0xc819,	0x2dff, 0xc819,		0x21, 0
+	.dw 0x2e40, 0xc819,	0x2e7f, 0xc819,		0x21, 0
+	.dw 0x2ec0, 0xc819,	0x2eff, 0xc819,		0x21, 0
+	.dw 0x2f40, 0xc819,	0x2f7f, 0xc819,		0x21, 0
+	.dw 0x2fc0, 0xc819,	0x2fff, 0xc819,		0x21, 0
+	.dw 0x3040, 0xc819,	0x307f, 0xc819,		0x21, 0
+	.dw 0x30c0, 0xc819,	0x30ff, 0xc819,		0x21, 0
+	.dw 0x3140, 0xc819,	0x317f, 0xc819,		0x21, 0
+	.dw 0x31c0, 0xc819,	0x31ff, 0xc819,		0x21, 0
+	.dw 0x3240, 0xc819,	0x327f, 0xc819,		0x21, 0
+	.dw 0x32c0, 0xc819,	0x32ff, 0xc819,		0x21, 0
+	.dw 0x3340, 0xc819,	0x337f, 0xc819,		0x21, 0
+	.dw 0x33c0, 0xc819,	0x33ff, 0xc819,		0x21, 0
+	.dw 0x3440, 0xc819,	0x347f, 0xc819,		0x21, 0
+	.dw 0x34c0, 0xc819,	0x34ff, 0xc819,		0x21, 0
+	.dw 0x3540, 0xc819,	0x357f, 0xc819,		0x21, 0
+	.dw 0x35c0, 0xc819,	0x35ff, 0xc819,		0x21, 0
+	.dw 0x3640, 0xc819,	0x367f, 0xc819,		0x21, 0
+	.dw 0x36c0, 0xc819,	0x36ff, 0xc819,		0x21, 0
+	.dw 0x3740, 0xc819,	0x377f, 0xc819,		0x21, 0
+	.dw 0x37c0, 0xc819,	0x37ff, 0xc819,		0x21, 0
+	.dw 0x3840, 0xc819,	0x387f, 0xc819,		0x21, 0
+	.dw 0x38c0, 0xc819,	0x38ff, 0xc819,		0x21, 0
+	.dw 0x3940, 0xc819,	0x397f, 0xc819,		0x21, 0
+	.dw 0x39c0, 0xc819,	0x5fff, 0xc819,		0x21, 0
+	.dw 0x6040, 0xc819,	0x607f, 0xc819,		0x21, 0
+	.dw 0x60c0, 0xc819,	0x60ff, 0xc819,		0x21, 0
+	.dw 0x6140, 0xc819,	0x617f, 0xc819,		0x21, 0
+	.dw 0x61c0, 0xc819,	0x61ff, 0xc819,		0x21, 0
+	.dw 0x6240, 0xc819,	0x627f, 0xc819,		0x21, 0
+	.dw 0x62c0, 0xc819,	0x62ff, 0xc819,		0x21, 0
+	.dw 0x6340, 0xc819,	0x637f, 0xc819,		0x21, 0
+	.dw 0x63c0, 0xc819,	0x63ff, 0xc819,		0x21, 0
+	.dw 0x6440, 0xc819,	0x647f, 0xc819,		0x21, 0
+	.dw 0x64c0, 0xc819,	0x64ff, 0xc819,		0x21, 0
+	.dw 0x6540, 0xc819,	0x657f, 0xc819,		0x21, 0
+	.dw 0x65c0, 0xc819,	0x65ff, 0xc819,		0x21, 0
+	.dw 0x6640, 0xc819,	0x667f, 0xc819,		0x21, 0
+	.dw 0x66c0, 0xc819,	0x66ff, 0xc819,		0x21, 0
+	.dw 0x6740, 0xc819,	0x677f, 0xc819,		0x21, 0
+	.dw 0x67c0, 0xc819,	0x67ff, 0xc819,		0x21, 0
+	.dw 0x6840, 0xc819,	0x687f, 0xc819,		0x21, 0
+	.dw 0x68c0, 0xc819,	0x68ff, 0xc819,		0x21, 0
+	.dw 0x6940, 0xc819,	0x697f, 0xc819,		0x21, 0
+	.dw 0x69c0, 0xc819,	0x69ff, 0xc819,		0x21, 0
+	.dw 0x6a40, 0xc819,	0x6a7f, 0xc819,		0x21, 0
+	.dw 0x6ac0, 0xc819,	0x6aff, 0xc819,		0x21, 0
+	.dw 0x6b40, 0xc819,	0x6b7f, 0xc819,		0x21, 0
+	.dw 0x6bc0, 0xc819,	0x6bff, 0xc819,		0x21, 0
+	.dw 0x6c40, 0xc819,	0x6c7f, 0xc819,		0x21, 0
+	.dw 0x6cc0, 0xc819,	0x6cff, 0xc819,		0x21, 0
+	.dw 0x6d40, 0xc819,	0x6d7f, 0xc819,		0x21, 0
+	.dw 0x6dc0, 0xc819,	0x6dff, 0xc819,		0x21, 0
+	.dw 0x6e40, 0xc819,	0x6e7f, 0xc819,		0x21, 0
+	.dw 0x6ec0, 0xc819,	0x6eff, 0xc819,		0x21, 0
+	.dw 0x6f40, 0xc819,	0x6f7f, 0xc819,		0x21, 0
+	.dw 0x6fc0, 0xc819,	0x6fff, 0xc819,		0x21, 0
+	.dw 0x7040, 0xc819,	0x707f, 0xc819,		0x21, 0
+	.dw 0x70c0, 0xc819,	0x70ff, 0xc819,		0x21, 0
+	.dw 0x7140, 0xc819,	0x717f, 0xc819,		0x21, 0
+	.dw 0x71c0, 0xc819,	0x71ff, 0xc819,		0x21, 0
+	.dw 0x7240, 0xc819,	0x727f, 0xc819,		0x21, 0
+	.dw 0x72c0, 0xc819,	0x72ff, 0xc819,		0x21, 0
+	.dw 0x7340, 0xc819,	0x737f, 0xc819,		0x21, 0
+	.dw 0x73c0, 0xc819,	0x73ff, 0xc819,		0x21, 0
+	.dw 0x7440, 0xc819,	0x747f, 0xc819,		0x21, 0
+	.dw 0x74c0, 0xc819,	0x74ff, 0xc819,		0x21, 0
+	.dw 0x7540, 0xc819,	0x757f, 0xc819,		0x21, 0
+	.dw 0x75c0, 0xc819,	0x75ff, 0xc819,		0x21, 0
+	.dw 0x7640, 0xc819,	0x767f, 0xc819,		0x21, 0
+	.dw 0x76c0, 0xc819,	0x76ff, 0xc819,		0x21, 0
+	.dw 0x7740, 0xc819,	0x777f, 0xc819,		0x21, 0
+	.dw 0x77c0, 0xc819,	0x77ff, 0xc819,		0x21, 0
+	.dw 0x7840, 0xc819,	0x787f, 0xc819,		0x21, 0
+	.dw 0x78c0, 0xc819,	0x78ff, 0xc819,		0x21, 0
+	.dw 0x7940, 0xc819,	0x797f, 0xc819,		0x21, 0
+	.dw 0x79c0, 0xc819,	0x9fff, 0xc819,		0x21, 0
+	.dw 0xa040, 0xc819,	0xa07f, 0xc819,		0x21, 0
+	.dw 0xa0c0, 0xc819,	0xa0ff, 0xc819,		0x21, 0
+	.dw 0xa140, 0xc819,	0xa17f, 0xc819,		0x21, 0
+	.dw 0xa1c0, 0xc819,	0xa1ff, 0xc819,		0x21, 0
+	.dw 0xa240, 0xc819,	0xa27f, 0xc819,		0x21, 0
+	.dw 0xa2c0, 0xc819,	0xa2ff, 0xc819,		0x21, 0
+	.dw 0xa340, 0xc819,	0xa37f, 0xc819,		0x21, 0
+	.dw 0xa3c0, 0xc819,	0xa3ff, 0xc819,		0x21, 0
+	.dw 0xa440, 0xc819,	0xa47f, 0xc819,		0x21, 0
+	.dw 0xa4c0, 0xc819,	0xa4ff, 0xc819,		0x21, 0
+	.dw 0xa540, 0xc819,	0xa57f, 0xc819,		0x21, 0
+	.dw 0xa5c0, 0xc819,	0xa5ff, 0xc819,		0x21, 0
+	.dw 0xa640, 0xc819,	0xa67f, 0xc819,		0x21, 0
+	.dw 0xa6c0, 0xc819,	0xa6ff, 0xc819,		0x21, 0
+	.dw 0xa740, 0xc819,	0xa77f, 0xc819,		0x21, 0
+	.dw 0xa7c0, 0xc819,	0xa7ff, 0xc819,		0x21, 0
+	.dw 0xa840, 0xc819,	0xa87f, 0xc819,		0x21, 0
+	.dw 0xa8c0, 0xc819,	0xa8ff, 0xc819,		0x21, 0
+	.dw 0xa940, 0xc819,	0xa97f, 0xc819,		0x21, 0
+	.dw 0xa9c0, 0xc819,	0xa9ff, 0xc819,		0x21, 0
+	.dw 0xaa40, 0xc819,	0xaa7f, 0xc819,		0x21, 0
+	.dw 0xaac0, 0xc819,	0xaaff, 0xc819,		0x21, 0
+	.dw 0xab40, 0xc819,	0xab7f, 0xc819,		0x21, 0
+	.dw 0xabc0, 0xc819,	0xabff, 0xc819,		0x21, 0
+	.dw 0xac40, 0xc819,	0xac7f, 0xc819,		0x21, 0
+	.dw 0xacc0, 0xc819,	0xacff, 0xc819,		0x21, 0
+	.dw 0xad40, 0xc819,	0xad7f, 0xc819,		0x21, 0
+	.dw 0xadc0, 0xc819,	0xadff, 0xc819,		0x21, 0
+	.dw 0xae40, 0xc819,	0xae7f, 0xc819,		0x21, 0
+	.dw 0xaec0, 0xc819,	0xaeff, 0xc819,		0x21, 0
+	.dw 0xaf40, 0xc819,	0xaf7f, 0xc819,		0x21, 0
+	.dw 0xafc0, 0xc819,	0xafff, 0xc819,		0x21, 0
+	.dw 0xb040, 0xc819,	0xb07f, 0xc819,		0x21, 0
+	.dw 0xb0c0, 0xc819,	0xb0ff, 0xc819,		0x21, 0
+	.dw 0xb140, 0xc819,	0xb17f, 0xc819,		0x21, 0
+	.dw 0xb1c0, 0xc819,	0xb1ff, 0xc819,		0x21, 0
+	.dw 0xb240, 0xc819,	0xb27f, 0xc819,		0x21, 0
+	.dw 0xb2c0, 0xc819,	0xb2ff, 0xc819,		0x21, 0
+	.dw 0xb340, 0xc819,	0xb37f, 0xc819,		0x21, 0
+	.dw 0xb3c0, 0xc819,	0xb3ff, 0xc819,		0x21, 0
+	.dw 0xb440, 0xc819,	0xb47f, 0xc819,		0x21, 0
+	.dw 0xb4c0, 0xc819,	0xb4ff, 0xc819,		0x21, 0
+	.dw 0xb540, 0xc819,	0xb57f, 0xc819,		0x21, 0
+	.dw 0xb5c0, 0xc819,	0xb5ff, 0xc819,		0x21, 0
+	.dw 0xb640, 0xc819,	0xb67f, 0xc819,		0x21, 0
+	.dw 0xb6c0, 0xc819,	0xb6ff, 0xc819,		0x21, 0
+	.dw 0xb740, 0xc819,	0xb77f, 0xc819,		0x21, 0
+	.dw 0xb7c0, 0xc819,	0xb7ff, 0xc819,		0x21, 0
+	.dw 0xb840, 0xc819,	0xb87f, 0xc819,		0x21, 0
+	.dw 0xb8c0, 0xc819,	0xb8ff, 0xc819,		0x21, 0
+	.dw 0xb940, 0xc819,	0xb97f, 0xc819,		0x21, 0
+	.dw 0xb9c0, 0xc819,	0xdfff, 0xc819,		0x21, 0
+	.dw 0xe040, 0xc819,	0xe07f, 0xc819,		0x21, 0
+	.dw 0xe0c0, 0xc819,	0xe0ff, 0xc819,		0x21, 0
+	.dw 0xe140, 0xc819,	0xe17f, 0xc819,		0x21, 0
+	.dw 0xe1c0, 0xc819,	0xe1ff, 0xc819,		0x21, 0
+	.dw 0xe240, 0xc819,	0xe27f, 0xc819,		0x21, 0
+	.dw 0xe2c0, 0xc819,	0xe2ff, 0xc819,		0x21, 0
+	.dw 0xe340, 0xc819,	0xe37f, 0xc819,		0x21, 0
+	.dw 0xe3c0, 0xc819,	0xe3ff, 0xc819,		0x21, 0
+	.dw 0xe440, 0xc819,	0xe47f, 0xc819,		0x21, 0
+	.dw 0xe4c0, 0xc819,	0xe4ff, 0xc819,		0x21, 0
+	.dw 0xe540, 0xc819,	0xe57f, 0xc819,		0x21, 0
+	.dw 0xe5c0, 0xc819,	0xe5ff, 0xc819,		0x21, 0
+	.dw 0xe640, 0xc819,	0xe67f, 0xc819,		0x21, 0
+	.dw 0xe6c0, 0xc819,	0xe6ff, 0xc819,		0x21, 0
+	.dw 0xe740, 0xc819,	0xe77f, 0xc819,		0x21, 0
+	.dw 0xe7c0, 0xc819,	0xe7ff, 0xc819,		0x21, 0
+	.dw 0xe840, 0xc819,	0xe87f, 0xc819,		0x21, 0
+	.dw 0xe8c0, 0xc819,	0xe8ff, 0xc819,		0x21, 0
+	.dw 0xe940, 0xc819,	0xe97f, 0xc819,		0x21, 0
+	.dw 0xe9c0, 0xc819,	0xe9ff, 0xc819,		0x21, 0
+	.dw 0xea40, 0xc819,	0xea7f, 0xc819,		0x21, 0
+	.dw 0xeac0, 0xc819,	0xeaff, 0xc819,		0x21, 0
+	.dw 0xeb40, 0xc819,	0xeb7f, 0xc819,		0x21, 0
+	.dw 0xebc0, 0xc819,	0xebff, 0xc819,		0x21, 0
+	.dw 0xec40, 0xc819,	0xec7f, 0xc819,		0x21, 0
+	.dw 0xecc0, 0xc819,	0xecff, 0xc819,		0x21, 0
+	.dw 0xed40, 0xc819,	0xed7f, 0xc819,		0x21, 0
+	.dw 0xedc0, 0xc819,	0xedff, 0xc819,		0x21, 0
+	.dw 0xee40, 0xc819,	0xee7f, 0xc819,		0x21, 0
+	.dw 0xeec0, 0xc819,	0xeeff, 0xc819,		0x21, 0
+	.dw 0xef40, 0xc819,	0xef7f, 0xc819,		0x21, 0
+	.dw 0xefc0, 0xc819,	0xefff, 0xc819,		0x21, 0
+	.dw 0xf040, 0xc819,	0xf07f, 0xc819,		0x21, 0
+	.dw 0xf0c0, 0xc819,	0xf0ff, 0xc819,		0x21, 0
+	.dw 0xf140, 0xc819,	0xf17f, 0xc819,		0x21, 0
+	.dw 0xf1c0, 0xc819,	0xf1ff, 0xc819,		0x21, 0
+	.dw 0xf240, 0xc819,	0xf27f, 0xc819,		0x21, 0
+	.dw 0xf2c0, 0xc819,	0xf2ff, 0xc819,		0x21, 0
+	.dw 0xf340, 0xc819,	0xf37f, 0xc819,		0x21, 0
+	.dw 0xf3c0, 0xc819,	0xf3ff, 0xc819,		0x21, 0
+	.dw 0xf440, 0xc819,	0xf47f, 0xc819,		0x21, 0
+	.dw 0xf4c0, 0xc819,	0xf4ff, 0xc819,		0x21, 0
+	.dw 0xf540, 0xc819,	0xf57f, 0xc819,		0x21, 0
+	.dw 0xf5c0, 0xc819,	0xf5ff, 0xc819,		0x21, 0
+	.dw 0xf640, 0xc819,	0xf67f, 0xc819,		0x21, 0
+	.dw 0xf6c0, 0xc819,	0xf6ff, 0xc819,		0x21, 0
+	.dw 0xf740, 0xc819,	0xf77f, 0xc819,		0x21, 0
+	.dw 0xf7c0, 0xc819,	0xf7ff, 0xc819,		0x21, 0
+	.dw 0xf840, 0xc819,	0xf87f, 0xc819,		0x21, 0
+	.dw 0xf8c0, 0xc819,	0xf8ff, 0xc819,		0x21, 0
+	.dw 0xf940, 0xc819,	0xf97f, 0xc819,		0x21, 0
+	.dw 0xf9c0, 0xc819,	0x1fff, 0xc81a,		0x21, 0
+	.dw 0x2040, 0xc81a,	0x207f, 0xc81a,		0x21, 0
+	.dw 0x20c0, 0xc81a,	0x20ff, 0xc81a,		0x21, 0
+	.dw 0x2140, 0xc81a,	0x217f, 0xc81a,		0x21, 0
+	.dw 0x21c0, 0xc81a,	0x21ff, 0xc81a,		0x21, 0
+	.dw 0x2240, 0xc81a,	0x227f, 0xc81a,		0x21, 0
+	.dw 0x22c0, 0xc81a,	0x22ff, 0xc81a,		0x21, 0
+	.dw 0x2340, 0xc81a,	0x237f, 0xc81a,		0x21, 0
+	.dw 0x23c0, 0xc81a,	0x23ff, 0xc81a,		0x21, 0
+	.dw 0x2440, 0xc81a,	0x247f, 0xc81a,		0x21, 0
+	.dw 0x24c0, 0xc81a,	0x24ff, 0xc81a,		0x21, 0
+	.dw 0x2540, 0xc81a,	0x257f, 0xc81a,		0x21, 0
+	.dw 0x25c0, 0xc81a,	0x25ff, 0xc81a,		0x21, 0
+	.dw 0x2640, 0xc81a,	0x267f, 0xc81a,		0x21, 0
+	.dw 0x26c0, 0xc81a,	0x26ff, 0xc81a,		0x21, 0
+	.dw 0x2740, 0xc81a,	0x277f, 0xc81a,		0x21, 0
+	.dw 0x27c0, 0xc81a,	0x27ff, 0xc81a,		0x21, 0
+	.dw 0x2840, 0xc81a,	0x287f, 0xc81a,		0x21, 0
+	.dw 0x28c0, 0xc81a,	0x28ff, 0xc81a,		0x21, 0
+	.dw 0x2940, 0xc81a,	0x297f, 0xc81a,		0x21, 0
+	.dw 0x29c0, 0xc81a,	0x29ff, 0xc81a,		0x21, 0
+	.dw 0x2a40, 0xc81a,	0x2a7f, 0xc81a,		0x21, 0
+	.dw 0x2ac0, 0xc81a,	0x2aff, 0xc81a,		0x21, 0
+	.dw 0x2b40, 0xc81a,	0x2b7f, 0xc81a,		0x21, 0
+	.dw 0x2bc0, 0xc81a,	0x2bff, 0xc81a,		0x21, 0
+	.dw 0x2c40, 0xc81a,	0x2c7f, 0xc81a,		0x21, 0
+	.dw 0x2cc0, 0xc81a,	0x2cff, 0xc81a,		0x21, 0
+	.dw 0x2d40, 0xc81a,	0x2d7f, 0xc81a,		0x21, 0
+	.dw 0x2dc0, 0xc81a,	0x2dff, 0xc81a,		0x21, 0
+	.dw 0x2e40, 0xc81a,	0x2e7f, 0xc81a,		0x21, 0
+	.dw 0x2ec0, 0xc81a,	0x2eff, 0xc81a,		0x21, 0
+	.dw 0x2f40, 0xc81a,	0x2f7f, 0xc81a,		0x21, 0
+	.dw 0x2fc0, 0xc81a,	0x2fff, 0xc81a,		0x21, 0
+	.dw 0x3040, 0xc81a,	0x307f, 0xc81a,		0x21, 0
+	.dw 0x30c0, 0xc81a,	0x30ff, 0xc81a,		0x21, 0
+	.dw 0x3140, 0xc81a,	0x317f, 0xc81a,		0x21, 0
+	.dw 0x31c0, 0xc81a,	0x31ff, 0xc81a,		0x21, 0
+	.dw 0x3240, 0xc81a,	0x327f, 0xc81a,		0x21, 0
+	.dw 0x32c0, 0xc81a,	0x32ff, 0xc81a,		0x21, 0
+	.dw 0x3340, 0xc81a,	0x337f, 0xc81a,		0x21, 0
+	.dw 0x33c0, 0xc81a,	0x33ff, 0xc81a,		0x21, 0
+	.dw 0x3440, 0xc81a,	0x347f, 0xc81a,		0x21, 0
+	.dw 0x34c0, 0xc81a,	0x34ff, 0xc81a,		0x21, 0
+	.dw 0x3540, 0xc81a,	0x357f, 0xc81a,		0x21, 0
+	.dw 0x35c0, 0xc81a,	0x35ff, 0xc81a,		0x21, 0
+	.dw 0x3640, 0xc81a,	0x367f, 0xc81a,		0x21, 0
+	.dw 0x36c0, 0xc81a,	0x36ff, 0xc81a,		0x21, 0
+	.dw 0x3740, 0xc81a,	0x377f, 0xc81a,		0x21, 0
+	.dw 0x37c0, 0xc81a,	0x37ff, 0xc81a,		0x21, 0
+	.dw 0x3840, 0xc81a,	0x387f, 0xc81a,		0x21, 0
+	.dw 0x38c0, 0xc81a,	0x38ff, 0xc81a,		0x21, 0
+	.dw 0x3940, 0xc81a,	0x397f, 0xc81a,		0x21, 0
+	.dw 0x39c0, 0xc81a,	0x5fff, 0xc81a,		0x21, 0
+	.dw 0x6040, 0xc81a,	0x607f, 0xc81a,		0x21, 0
+	.dw 0x60c0, 0xc81a,	0x60ff, 0xc81a,		0x21, 0
+	.dw 0x6140, 0xc81a,	0x617f, 0xc81a,		0x21, 0
+	.dw 0x61c0, 0xc81a,	0x61ff, 0xc81a,		0x21, 0
+	.dw 0x6240, 0xc81a,	0x627f, 0xc81a,		0x21, 0
+	.dw 0x62c0, 0xc81a,	0x62ff, 0xc81a,		0x21, 0
+	.dw 0x6340, 0xc81a,	0x637f, 0xc81a,		0x21, 0
+	.dw 0x63c0, 0xc81a,	0x63ff, 0xc81a,		0x21, 0
+	.dw 0x6440, 0xc81a,	0x647f, 0xc81a,		0x21, 0
+	.dw 0x64c0, 0xc81a,	0x64ff, 0xc81a,		0x21, 0
+	.dw 0x6540, 0xc81a,	0x657f, 0xc81a,		0x21, 0
+	.dw 0x65c0, 0xc81a,	0x65ff, 0xc81a,		0x21, 0
+	.dw 0x6640, 0xc81a,	0x667f, 0xc81a,		0x21, 0
+	.dw 0x66c0, 0xc81a,	0x66ff, 0xc81a,		0x21, 0
+	.dw 0x6740, 0xc81a,	0x677f, 0xc81a,		0x21, 0
+	.dw 0x67c0, 0xc81a,	0x67ff, 0xc81a,		0x21, 0
+	.dw 0x6840, 0xc81a,	0x687f, 0xc81a,		0x21, 0
+	.dw 0x68c0, 0xc81a,	0x68ff, 0xc81a,		0x21, 0
+	.dw 0x6940, 0xc81a,	0x697f, 0xc81a,		0x21, 0
+	.dw 0x69c0, 0xc81a,	0x69ff, 0xc81a,		0x21, 0
+	.dw 0x6a40, 0xc81a,	0x6a7f, 0xc81a,		0x21, 0
+	.dw 0x6ac0, 0xc81a,	0x6aff, 0xc81a,		0x21, 0
+	.dw 0x6b40, 0xc81a,	0x6b7f, 0xc81a,		0x21, 0
+	.dw 0x6bc0, 0xc81a,	0x6bff, 0xc81a,		0x21, 0
+	.dw 0x6c40, 0xc81a,	0x6c7f, 0xc81a,		0x21, 0
+	.dw 0x6cc0, 0xc81a,	0x6cff, 0xc81a,		0x21, 0
+	.dw 0x6d40, 0xc81a,	0x6d7f, 0xc81a,		0x21, 0
+	.dw 0x6dc0, 0xc81a,	0x6dff, 0xc81a,		0x21, 0
+	.dw 0x6e40, 0xc81a,	0x6e7f, 0xc81a,		0x21, 0
+	.dw 0x6ec0, 0xc81a,	0x6eff, 0xc81a,		0x21, 0
+	.dw 0x6f40, 0xc81a,	0x6f7f, 0xc81a,		0x21, 0
+	.dw 0x6fc0, 0xc81a,	0x6fff, 0xc81a,		0x21, 0
+	.dw 0x7040, 0xc81a,	0x707f, 0xc81a,		0x21, 0
+	.dw 0x70c0, 0xc81a,	0x70ff, 0xc81a,		0x21, 0
+	.dw 0x7140, 0xc81a,	0x717f, 0xc81a,		0x21, 0
+	.dw 0x71c0, 0xc81a,	0x71ff, 0xc81a,		0x21, 0
+	.dw 0x7240, 0xc81a,	0x727f, 0xc81a,		0x21, 0
+	.dw 0x72c0, 0xc81a,	0x72ff, 0xc81a,		0x21, 0
+	.dw 0x7340, 0xc81a,	0x737f, 0xc81a,		0x21, 0
+	.dw 0x73c0, 0xc81a,	0x73ff, 0xc81a,		0x21, 0
+	.dw 0x7440, 0xc81a,	0x747f, 0xc81a,		0x21, 0
+	.dw 0x74c0, 0xc81a,	0x74ff, 0xc81a,		0x21, 0
+	.dw 0x7540, 0xc81a,	0x757f, 0xc81a,		0x21, 0
+	.dw 0x75c0, 0xc81a,	0x75ff, 0xc81a,		0x21, 0
+	.dw 0x7640, 0xc81a,	0x767f, 0xc81a,		0x21, 0
+	.dw 0x76c0, 0xc81a,	0x76ff, 0xc81a,		0x21, 0
+	.dw 0x7740, 0xc81a,	0x777f, 0xc81a,		0x21, 0
+	.dw 0x77c0, 0xc81a,	0x77ff, 0xc81a,		0x21, 0
+	.dw 0x7840, 0xc81a,	0x787f, 0xc81a,		0x21, 0
+	.dw 0x78c0, 0xc81a,	0x78ff, 0xc81a,		0x21, 0
+	.dw 0x7940, 0xc81a,	0x797f, 0xc81a,		0x21, 0
+	.dw 0x79c0, 0xc81a,	0x9fff, 0xc81a,		0x21, 0
+	.dw 0xa040, 0xc81a,	0xa07f, 0xc81a,		0x21, 0
+	.dw 0xa0c0, 0xc81a,	0xa0ff, 0xc81a,		0x21, 0
+	.dw 0xa140, 0xc81a,	0xa17f, 0xc81a,		0x21, 0
+	.dw 0xa1c0, 0xc81a,	0xa1ff, 0xc81a,		0x21, 0
+	.dw 0xa240, 0xc81a,	0xa27f, 0xc81a,		0x21, 0
+	.dw 0xa2c0, 0xc81a,	0xa2ff, 0xc81a,		0x21, 0
+	.dw 0xa340, 0xc81a,	0xa37f, 0xc81a,		0x21, 0
+	.dw 0xa3c0, 0xc81a,	0xa3ff, 0xc81a,		0x21, 0
+	.dw 0xa440, 0xc81a,	0xa47f, 0xc81a,		0x21, 0
+	.dw 0xa4c0, 0xc81a,	0xa4ff, 0xc81a,		0x21, 0
+	.dw 0xa540, 0xc81a,	0xa57f, 0xc81a,		0x21, 0
+	.dw 0xa5c0, 0xc81a,	0xa5ff, 0xc81a,		0x21, 0
+	.dw 0xa640, 0xc81a,	0xa67f, 0xc81a,		0x21, 0
+	.dw 0xa6c0, 0xc81a,	0xa6ff, 0xc81a,		0x21, 0
+	.dw 0xa740, 0xc81a,	0xa77f, 0xc81a,		0x21, 0
+	.dw 0xa7c0, 0xc81a,	0xa7ff, 0xc81a,		0x21, 0
+	.dw 0xa840, 0xc81a,	0xa87f, 0xc81a,		0x21, 0
+	.dw 0xa8c0, 0xc81a,	0xa8ff, 0xc81a,		0x21, 0
+	.dw 0xa940, 0xc81a,	0xa97f, 0xc81a,		0x21, 0
+	.dw 0xa9c0, 0xc81a,	0xa9ff, 0xc81a,		0x21, 0
+	.dw 0xaa40, 0xc81a,	0xaa7f, 0xc81a,		0x21, 0
+	.dw 0xaac0, 0xc81a,	0xaaff, 0xc81a,		0x21, 0
+	.dw 0xab40, 0xc81a,	0xab7f, 0xc81a,		0x21, 0
+	.dw 0xabc0, 0xc81a,	0xabff, 0xc81a,		0x21, 0
+	.dw 0xac40, 0xc81a,	0xac7f, 0xc81a,		0x21, 0
+	.dw 0xacc0, 0xc81a,	0xacff, 0xc81a,		0x21, 0
+	.dw 0xad40, 0xc81a,	0xad7f, 0xc81a,		0x21, 0
+	.dw 0xadc0, 0xc81a,	0xadff, 0xc81a,		0x21, 0
+	.dw 0xae40, 0xc81a,	0xae7f, 0xc81a,		0x21, 0
+	.dw 0xaec0, 0xc81a,	0xaeff, 0xc81a,		0x21, 0
+	.dw 0xaf40, 0xc81a,	0xaf7f, 0xc81a,		0x21, 0
+	.dw 0xafc0, 0xc81a,	0xafff, 0xc81a,		0x21, 0
+	.dw 0xb040, 0xc81a,	0xb07f, 0xc81a,		0x21, 0
+	.dw 0xb0c0, 0xc81a,	0xb0ff, 0xc81a,		0x21, 0
+	.dw 0xb140, 0xc81a,	0xb17f, 0xc81a,		0x21, 0
+	.dw 0xb1c0, 0xc81a,	0xb1ff, 0xc81a,		0x21, 0
+	.dw 0xb240, 0xc81a,	0xb27f, 0xc81a,		0x21, 0
+	.dw 0xb2c0, 0xc81a,	0xb2ff, 0xc81a,		0x21, 0
+	.dw 0xb340, 0xc81a,	0xb37f, 0xc81a,		0x21, 0
+	.dw 0xb3c0, 0xc81a,	0xb3ff, 0xc81a,		0x21, 0
+	.dw 0xb440, 0xc81a,	0xb47f, 0xc81a,		0x21, 0
+	.dw 0xb4c0, 0xc81a,	0xb4ff, 0xc81a,		0x21, 0
+	.dw 0xb540, 0xc81a,	0xb57f, 0xc81a,		0x21, 0
+	.dw 0xb5c0, 0xc81a,	0xb5ff, 0xc81a,		0x21, 0
+	.dw 0xb640, 0xc81a,	0xb67f, 0xc81a,		0x21, 0
+	.dw 0xb6c0, 0xc81a,	0xb6ff, 0xc81a,		0x21, 0
+	.dw 0xb740, 0xc81a,	0xb77f, 0xc81a,		0x21, 0
+	.dw 0xb7c0, 0xc81a,	0xb7ff, 0xc81a,		0x21, 0
+	.dw 0xb840, 0xc81a,	0xb87f, 0xc81a,		0x21, 0
+	.dw 0xb8c0, 0xc81a,	0xb8ff, 0xc81a,		0x21, 0
+	.dw 0xb940, 0xc81a,	0xb97f, 0xc81a,		0x21, 0
+	.dw 0xb9c0, 0xc81a,	0xdfff, 0xc81a,		0x21, 0
+	.dw 0xe040, 0xc81a,	0xe07f, 0xc81a,		0x21, 0
+	.dw 0xe0c0, 0xc81a,	0xe0ff, 0xc81a,		0x21, 0
+	.dw 0xe140, 0xc81a,	0xe17f, 0xc81a,		0x21, 0
+	.dw 0xe1c0, 0xc81a,	0xe1ff, 0xc81a,		0x21, 0
+	.dw 0xe240, 0xc81a,	0xe27f, 0xc81a,		0x21, 0
+	.dw 0xe2c0, 0xc81a,	0xe2ff, 0xc81a,		0x21, 0
+	.dw 0xe340, 0xc81a,	0xe37f, 0xc81a,		0x21, 0
+	.dw 0xe3c0, 0xc81a,	0xe3ff, 0xc81a,		0x21, 0
+	.dw 0xe440, 0xc81a,	0xe47f, 0xc81a,		0x21, 0
+	.dw 0xe4c0, 0xc81a,	0xe4ff, 0xc81a,		0x21, 0
+	.dw 0xe540, 0xc81a,	0xe57f, 0xc81a,		0x21, 0
+	.dw 0xe5c0, 0xc81a,	0xe5ff, 0xc81a,		0x21, 0
+	.dw 0xe640, 0xc81a,	0xe67f, 0xc81a,		0x21, 0
+	.dw 0xe6c0, 0xc81a,	0xe6ff, 0xc81a,		0x21, 0
+	.dw 0xe740, 0xc81a,	0xe77f, 0xc81a,		0x21, 0
+	.dw 0xe7c0, 0xc81a,	0xe7ff, 0xc81a,		0x21, 0
+	.dw 0xe840, 0xc81a,	0xe87f, 0xc81a,		0x21, 0
+	.dw 0xe8c0, 0xc81a,	0xe8ff, 0xc81a,		0x21, 0
+	.dw 0xe940, 0xc81a,	0xe97f, 0xc81a,		0x21, 0
+	.dw 0xe9c0, 0xc81a,	0xe9ff, 0xc81a,		0x21, 0
+	.dw 0xea40, 0xc81a,	0xea7f, 0xc81a,		0x21, 0
+	.dw 0xeac0, 0xc81a,	0xeaff, 0xc81a,		0x21, 0
+	.dw 0xeb40, 0xc81a,	0xeb7f, 0xc81a,		0x21, 0
+	.dw 0xebc0, 0xc81a,	0xebff, 0xc81a,		0x21, 0
+	.dw 0xec40, 0xc81a,	0xec7f, 0xc81a,		0x21, 0
+	.dw 0xecc0, 0xc81a,	0xecff, 0xc81a,		0x21, 0
+	.dw 0xed40, 0xc81a,	0xed7f, 0xc81a,		0x21, 0
+	.dw 0xedc0, 0xc81a,	0xedff, 0xc81a,		0x21, 0
+	.dw 0xee40, 0xc81a,	0xee7f, 0xc81a,		0x21, 0
+	.dw 0xeec0, 0xc81a,	0xeeff, 0xc81a,		0x21, 0
+	.dw 0xef40, 0xc81a,	0xef7f, 0xc81a,		0x21, 0
+	.dw 0xefc0, 0xc81a,	0xefff, 0xc81a,		0x21, 0
+	.dw 0xf040, 0xc81a,	0xf07f, 0xc81a,		0x21, 0
+	.dw 0xf0c0, 0xc81a,	0xf0ff, 0xc81a,		0x21, 0
+	.dw 0xf140, 0xc81a,	0xf17f, 0xc81a,		0x21, 0
+	.dw 0xf1c0, 0xc81a,	0xf1ff, 0xc81a,		0x21, 0
+	.dw 0xf240, 0xc81a,	0xf27f, 0xc81a,		0x21, 0
+	.dw 0xf2c0, 0xc81a,	0xf2ff, 0xc81a,		0x21, 0
+	.dw 0xf340, 0xc81a,	0xf37f, 0xc81a,		0x21, 0
+	.dw 0xf3c0, 0xc81a,	0xf3ff, 0xc81a,		0x21, 0
+	.dw 0xf440, 0xc81a,	0xf47f, 0xc81a,		0x21, 0
+	.dw 0xf4c0, 0xc81a,	0xf4ff, 0xc81a,		0x21, 0
+	.dw 0xf540, 0xc81a,	0xf57f, 0xc81a,		0x21, 0
+	.dw 0xf5c0, 0xc81a,	0xf5ff, 0xc81a,		0x21, 0
+	.dw 0xf640, 0xc81a,	0xf67f, 0xc81a,		0x21, 0
+	.dw 0xf6c0, 0xc81a,	0xf6ff, 0xc81a,		0x21, 0
+	.dw 0xf740, 0xc81a,	0xf77f, 0xc81a,		0x21, 0
+	.dw 0xf7c0, 0xc81a,	0xf7ff, 0xc81a,		0x21, 0
+	.dw 0xf840, 0xc81a,	0xf87f, 0xc81a,		0x21, 0
+	.dw 0xf8c0, 0xc81a,	0xf8ff, 0xc81a,		0x21, 0
+	.dw 0xf940, 0xc81a,	0xf97f, 0xc81a,		0x21, 0
+	.dw 0xf9c0, 0xc81a,	0xffff, 0xc81b,		0x21, 0
+	.dw 0x0040, 0xc81c,	0x007f, 0xc81c,		0x21, 0
+	.dw 0x00c0, 0xc81c,	0x00ff, 0xc81c,		0x21, 0
+	.dw 0x0140, 0xc81c,	0x017f, 0xc81c,		0x21, 0
+	.dw 0x01c0, 0xc81c,	0x01ff, 0xc81c,		0x21, 0
+	.dw 0x0240, 0xc81c,	0x027f, 0xc81c,		0x21, 0
+	.dw 0x02c0, 0xc81c,	0x02ff, 0xc81c,		0x21, 0
+	.dw 0x0340, 0xc81c,	0x037f, 0xc81c,		0x21, 0
+	.dw 0x03c0, 0xc81c,	0x03ff, 0xc81c,		0x21, 0
+	.dw 0x0440, 0xc81c,	0x047f, 0xc81c,		0x21, 0
+	.dw 0x04c0, 0xc81c,	0x04ff, 0xc81c,		0x21, 0
+	.dw 0x0540, 0xc81c,	0x057f, 0xc81c,		0x21, 0
+	.dw 0x05c0, 0xc81c,	0x05ff, 0xc81c,		0x21, 0
+	.dw 0x0640, 0xc81c,	0x067f, 0xc81c,		0x21, 0
+	.dw 0x06c0, 0xc81c,	0x06ff, 0xc81c,		0x21, 0
+	.dw 0x0740, 0xc81c,	0x077f, 0xc81c,		0x21, 0
+	.dw 0x07c0, 0xc81c,	0x07ff, 0xc81c,		0x21, 0
+	.dw 0x0840, 0xc81c,	0x087f, 0xc81c,		0x21, 0
+	.dw 0x08c0, 0xc81c,	0x08ff, 0xc81c,		0x21, 0
+	.dw 0x0940, 0xc81c,	0x097f, 0xc81c,		0x21, 0
+	.dw 0x09c0, 0xc81c,	0x09ff, 0xc81c,		0x21, 0
+	.dw 0x0a40, 0xc81c,	0x0a7f, 0xc81c,		0x21, 0
+	.dw 0x0ac0, 0xc81c,	0x0aff, 0xc81c,		0x21, 0
+	.dw 0x0b40, 0xc81c,	0x0b7f, 0xc81c,		0x21, 0
+	.dw 0x0bc0, 0xc81c,	0x0bff, 0xc81c,		0x21, 0
+	.dw 0x0c40, 0xc81c,	0x0c7f, 0xc81c,		0x21, 0
+	.dw 0x0cc0, 0xc81c,	0x0cff, 0xc81c,		0x21, 0
+	.dw 0x0d40, 0xc81c,	0x0d7f, 0xc81c,		0x21, 0
+	.dw 0x0dc0, 0xc81c,	0x0dff, 0xc81c,		0x21, 0
+	.dw 0x0e40, 0xc81c,	0x0e7f, 0xc81c,		0x21, 0
+	.dw 0x0ec0, 0xc81c,	0x0eff, 0xc81c,		0x21, 0
+	.dw 0x0f40, 0xc81c,	0x0f7f, 0xc81c,		0x21, 0
+	.dw 0x0fc0, 0xc81c,	0x0fff, 0xc81c,		0x21, 0
+	.dw 0x1040, 0xc81c,	0x107f, 0xc81c,		0x21, 0
+	.dw 0x10c0, 0xc81c,	0x10ff, 0xc81c,		0x21, 0
+	.dw 0x1140, 0xc81c,	0x117f, 0xc81c,		0x21, 0
+	.dw 0x11c0, 0xc81c,	0x11ff, 0xc81c,		0x21, 0
+	.dw 0x1240, 0xc81c,	0x127f, 0xc81c,		0x21, 0
+	.dw 0x12c0, 0xc81c,	0x12ff, 0xc81c,		0x21, 0
+	.dw 0x1340, 0xc81c,	0x137f, 0xc81c,		0x21, 0
+	.dw 0x13c0, 0xc81c,	0x13ff, 0xc81c,		0x21, 0
+	.dw 0x1440, 0xc81c,	0x147f, 0xc81c,		0x21, 0
+	.dw 0x14c0, 0xc81c,	0x14ff, 0xc81c,		0x21, 0
+	.dw 0x1540, 0xc81c,	0x157f, 0xc81c,		0x21, 0
+	.dw 0x15c0, 0xc81c,	0x15ff, 0xc81c,		0x21, 0
+	.dw 0x1640, 0xc81c,	0x167f, 0xc81c,		0x21, 0
+	.dw 0x16c0, 0xc81c,	0x16ff, 0xc81c,		0x21, 0
+	.dw 0x1740, 0xc81c,	0x177f, 0xc81c,		0x21, 0
+	.dw 0x17c0, 0xc81c,	0x17ff, 0xc81c,		0x21, 0
+	.dw 0x1840, 0xc81c,	0x187f, 0xc81c,		0x21, 0
+	.dw 0x18c0, 0xc81c,	0x18ff, 0xc81c,		0x21, 0
+	.dw 0x1940, 0xc81c,	0x197f, 0xc81c,		0x21, 0
+	.dw 0x19c0, 0xc81c,	0x1fff, 0xc81c,		0x21, 0
+	.dw 0x2040, 0xc81c,	0x207f, 0xc81c,		0x21, 0
+	.dw 0x20c0, 0xc81c,	0x20ff, 0xc81c,		0x21, 0
+	.dw 0x2140, 0xc81c,	0x217f, 0xc81c,		0x21, 0
+	.dw 0x21c0, 0xc81c,	0x21ff, 0xc81c,		0x21, 0
+	.dw 0x2240, 0xc81c,	0x227f, 0xc81c,		0x21, 0
+	.dw 0x22c0, 0xc81c,	0x22ff, 0xc81c,		0x21, 0
+	.dw 0x2340, 0xc81c,	0x237f, 0xc81c,		0x21, 0
+	.dw 0x23c0, 0xc81c,	0x23ff, 0xc81c,		0x21, 0
+	.dw 0x2440, 0xc81c,	0x247f, 0xc81c,		0x21, 0
+	.dw 0x24c0, 0xc81c,	0x24ff, 0xc81c,		0x21, 0
+	.dw 0x2540, 0xc81c,	0x257f, 0xc81c,		0x21, 0
+	.dw 0x25c0, 0xc81c,	0x25ff, 0xc81c,		0x21, 0
+	.dw 0x2640, 0xc81c,	0x267f, 0xc81c,		0x21, 0
+	.dw 0x26c0, 0xc81c,	0x26ff, 0xc81c,		0x21, 0
+	.dw 0x2740, 0xc81c,	0x277f, 0xc81c,		0x21, 0
+	.dw 0x27c0, 0xc81c,	0x27ff, 0xc81c,		0x21, 0
+	.dw 0x2840, 0xc81c,	0x287f, 0xc81c,		0x21, 0
+	.dw 0x28c0, 0xc81c,	0x28ff, 0xc81c,		0x21, 0
+	.dw 0x2940, 0xc81c,	0x297f, 0xc81c,		0x21, 0
+	.dw 0x29c0, 0xc81c,	0x29ff, 0xc81c,		0x21, 0
+	.dw 0x2a40, 0xc81c,	0x2a7f, 0xc81c,		0x21, 0
+	.dw 0x2ac0, 0xc81c,	0x2aff, 0xc81c,		0x21, 0
+	.dw 0x2b40, 0xc81c,	0x2b7f, 0xc81c,		0x21, 0
+	.dw 0x2bc0, 0xc81c,	0x2bff, 0xc81c,		0x21, 0
+	.dw 0x2c40, 0xc81c,	0x2c7f, 0xc81c,		0x21, 0
+	.dw 0x2cc0, 0xc81c,	0x2cff, 0xc81c,		0x21, 0
+	.dw 0x2d40, 0xc81c,	0x2d7f, 0xc81c,		0x21, 0
+	.dw 0x2dc0, 0xc81c,	0x2dff, 0xc81c,		0x21, 0
+	.dw 0x2e40, 0xc81c,	0x2e7f, 0xc81c,		0x21, 0
+	.dw 0x2ec0, 0xc81c,	0x2eff, 0xc81c,		0x21, 0
+	.dw 0x2f40, 0xc81c,	0x2f7f, 0xc81c,		0x21, 0
+	.dw 0x2fc0, 0xc81c,	0x2fff, 0xc81c,		0x21, 0
+	.dw 0x3040, 0xc81c,	0x307f, 0xc81c,		0x21, 0
+	.dw 0x30c0, 0xc81c,	0x30ff, 0xc81c,		0x21, 0
+	.dw 0x3140, 0xc81c,	0x317f, 0xc81c,		0x21, 0
+	.dw 0x31c0, 0xc81c,	0x31ff, 0xc81c,		0x21, 0
+	.dw 0x3240, 0xc81c,	0x327f, 0xc81c,		0x21, 0
+	.dw 0x32c0, 0xc81c,	0x32ff, 0xc81c,		0x21, 0
+	.dw 0x3340, 0xc81c,	0x337f, 0xc81c,		0x21, 0
+	.dw 0x33c0, 0xc81c,	0x33ff, 0xc81c,		0x21, 0
+	.dw 0x3440, 0xc81c,	0x347f, 0xc81c,		0x21, 0
+	.dw 0x34c0, 0xc81c,	0x34ff, 0xc81c,		0x21, 0
+	.dw 0x3540, 0xc81c,	0x357f, 0xc81c,		0x21, 0
+	.dw 0x35c0, 0xc81c,	0x35ff, 0xc81c,		0x21, 0
+	.dw 0x3640, 0xc81c,	0x367f, 0xc81c,		0x21, 0
+	.dw 0x36c0, 0xc81c,	0x36ff, 0xc81c,		0x21, 0
+	.dw 0x3740, 0xc81c,	0x377f, 0xc81c,		0x21, 0
+	.dw 0x37c0, 0xc81c,	0x37ff, 0xc81c,		0x21, 0
+	.dw 0x3840, 0xc81c,	0x387f, 0xc81c,		0x21, 0
+	.dw 0x38c0, 0xc81c,	0x38ff, 0xc81c,		0x21, 0
+	.dw 0x3940, 0xc81c,	0x397f, 0xc81c,		0x21, 0
+	.dw 0x39c0, 0xc81c,	0x3fff, 0xc81c,		0x21, 0
+	.dw 0x4040, 0xc81c,	0x407f, 0xc81c,		0x21, 0
+	.dw 0x40c0, 0xc81c,	0x40ff, 0xc81c,		0x21, 0
+	.dw 0x4140, 0xc81c,	0x417f, 0xc81c,		0x21, 0
+	.dw 0x41c0, 0xc81c,	0x41ff, 0xc81c,		0x21, 0
+	.dw 0x4240, 0xc81c,	0x427f, 0xc81c,		0x21, 0
+	.dw 0x42c0, 0xc81c,	0x42ff, 0xc81c,		0x21, 0
+	.dw 0x4340, 0xc81c,	0x437f, 0xc81c,		0x21, 0
+	.dw 0x43c0, 0xc81c,	0x43ff, 0xc81c,		0x21, 0
+	.dw 0x4440, 0xc81c,	0x447f, 0xc81c,		0x21, 0
+	.dw 0x44c0, 0xc81c,	0x44ff, 0xc81c,		0x21, 0
+	.dw 0x4540, 0xc81c,	0x457f, 0xc81c,		0x21, 0
+	.dw 0x45c0, 0xc81c,	0x45ff, 0xc81c,		0x21, 0
+	.dw 0x4640, 0xc81c,	0x467f, 0xc81c,		0x21, 0
+	.dw 0x46c0, 0xc81c,	0x46ff, 0xc81c,		0x21, 0
+	.dw 0x4740, 0xc81c,	0x477f, 0xc81c,		0x21, 0
+	.dw 0x47c0, 0xc81c,	0x47ff, 0xc81c,		0x21, 0
+	.dw 0x4840, 0xc81c,	0x487f, 0xc81c,		0x21, 0
+	.dw 0x48c0, 0xc81c,	0x48ff, 0xc81c,		0x21, 0
+	.dw 0x4940, 0xc81c,	0x497f, 0xc81c,		0x21, 0
+	.dw 0x49c0, 0xc81c,	0x49ff, 0xc81c,		0x21, 0
+	.dw 0x4a40, 0xc81c,	0x4a7f, 0xc81c,		0x21, 0
+	.dw 0x4ac0, 0xc81c,	0x4aff, 0xc81c,		0x21, 0
+	.dw 0x4b40, 0xc81c,	0x4b7f, 0xc81c,		0x21, 0
+	.dw 0x4bc0, 0xc81c,	0x4bff, 0xc81c,		0x21, 0
+	.dw 0x4c40, 0xc81c,	0x4c7f, 0xc81c,		0x21, 0
+	.dw 0x4cc0, 0xc81c,	0x4cff, 0xc81c,		0x21, 0
+	.dw 0x4d40, 0xc81c,	0x4d7f, 0xc81c,		0x21, 0
+	.dw 0x4dc0, 0xc81c,	0x4dff, 0xc81c,		0x21, 0
+	.dw 0x4e40, 0xc81c,	0x4e7f, 0xc81c,		0x21, 0
+	.dw 0x4ec0, 0xc81c,	0x4eff, 0xc81c,		0x21, 0
+	.dw 0x4f40, 0xc81c,	0x4f7f, 0xc81c,		0x21, 0
+	.dw 0x4fc0, 0xc81c,	0x4fff, 0xc81c,		0x21, 0
+	.dw 0x5040, 0xc81c,	0x507f, 0xc81c,		0x21, 0
+	.dw 0x50c0, 0xc81c,	0x50ff, 0xc81c,		0x21, 0
+	.dw 0x5140, 0xc81c,	0x517f, 0xc81c,		0x21, 0
+	.dw 0x51c0, 0xc81c,	0x51ff, 0xc81c,		0x21, 0
+	.dw 0x5240, 0xc81c,	0x527f, 0xc81c,		0x21, 0
+	.dw 0x52c0, 0xc81c,	0x52ff, 0xc81c,		0x21, 0
+	.dw 0x5340, 0xc81c,	0x537f, 0xc81c,		0x21, 0
+	.dw 0x53c0, 0xc81c,	0x53ff, 0xc81c,		0x21, 0
+	.dw 0x5440, 0xc81c,	0x547f, 0xc81c,		0x21, 0
+	.dw 0x54c0, 0xc81c,	0x54ff, 0xc81c,		0x21, 0
+	.dw 0x5540, 0xc81c,	0x557f, 0xc81c,		0x21, 0
+	.dw 0x55c0, 0xc81c,	0x55ff, 0xc81c,		0x21, 0
+	.dw 0x5640, 0xc81c,	0x567f, 0xc81c,		0x21, 0
+	.dw 0x56c0, 0xc81c,	0x56ff, 0xc81c,		0x21, 0
+	.dw 0x5740, 0xc81c,	0x577f, 0xc81c,		0x21, 0
+	.dw 0x57c0, 0xc81c,	0x57ff, 0xc81c,		0x21, 0
+	.dw 0x5840, 0xc81c,	0x587f, 0xc81c,		0x21, 0
+	.dw 0x58c0, 0xc81c,	0x58ff, 0xc81c,		0x21, 0
+	.dw 0x5940, 0xc81c,	0x597f, 0xc81c,		0x21, 0
+	.dw 0x59c0, 0xc81c,	0x5fff, 0xc81c,		0x21, 0
+	.dw 0x6040, 0xc81c,	0x607f, 0xc81c,		0x21, 0
+	.dw 0x60c0, 0xc81c,	0x60ff, 0xc81c,		0x21, 0
+	.dw 0x6140, 0xc81c,	0x617f, 0xc81c,		0x21, 0
+	.dw 0x61c0, 0xc81c,	0x61ff, 0xc81c,		0x21, 0
+	.dw 0x6240, 0xc81c,	0x627f, 0xc81c,		0x21, 0
+	.dw 0x62c0, 0xc81c,	0x62ff, 0xc81c,		0x21, 0
+	.dw 0x6340, 0xc81c,	0x637f, 0xc81c,		0x21, 0
+	.dw 0x63c0, 0xc81c,	0x63ff, 0xc81c,		0x21, 0
+	.dw 0x6440, 0xc81c,	0x647f, 0xc81c,		0x21, 0
+	.dw 0x64c0, 0xc81c,	0x64ff, 0xc81c,		0x21, 0
+	.dw 0x6540, 0xc81c,	0x657f, 0xc81c,		0x21, 0
+	.dw 0x65c0, 0xc81c,	0x65ff, 0xc81c,		0x21, 0
+	.dw 0x6640, 0xc81c,	0x667f, 0xc81c,		0x21, 0
+	.dw 0x66c0, 0xc81c,	0x66ff, 0xc81c,		0x21, 0
+	.dw 0x6740, 0xc81c,	0x677f, 0xc81c,		0x21, 0
+	.dw 0x67c0, 0xc81c,	0x67ff, 0xc81c,		0x21, 0
+	.dw 0x6840, 0xc81c,	0x687f, 0xc81c,		0x21, 0
+	.dw 0x68c0, 0xc81c,	0x68ff, 0xc81c,		0x21, 0
+	.dw 0x6940, 0xc81c,	0x697f, 0xc81c,		0x21, 0
+	.dw 0x69c0, 0xc81c,	0x69ff, 0xc81c,		0x21, 0
+	.dw 0x6a40, 0xc81c,	0x6a7f, 0xc81c,		0x21, 0
+	.dw 0x6ac0, 0xc81c,	0x6aff, 0xc81c,		0x21, 0
+	.dw 0x6b40, 0xc81c,	0x6b7f, 0xc81c,		0x21, 0
+	.dw 0x6bc0, 0xc81c,	0x6bff, 0xc81c,		0x21, 0
+	.dw 0x6c40, 0xc81c,	0x6c7f, 0xc81c,		0x21, 0
+	.dw 0x6cc0, 0xc81c,	0x6cff, 0xc81c,		0x21, 0
+	.dw 0x6d40, 0xc81c,	0x6d7f, 0xc81c,		0x21, 0
+	.dw 0x6dc0, 0xc81c,	0x6dff, 0xc81c,		0x21, 0
+	.dw 0x6e40, 0xc81c,	0x6e7f, 0xc81c,		0x21, 0
+	.dw 0x6ec0, 0xc81c,	0x6eff, 0xc81c,		0x21, 0
+	.dw 0x6f40, 0xc81c,	0x6f7f, 0xc81c,		0x21, 0
+	.dw 0x6fc0, 0xc81c,	0x6fff, 0xc81c,		0x21, 0
+	.dw 0x7040, 0xc81c,	0x707f, 0xc81c,		0x21, 0
+	.dw 0x70c0, 0xc81c,	0x70ff, 0xc81c,		0x21, 0
+	.dw 0x7140, 0xc81c,	0x717f, 0xc81c,		0x21, 0
+	.dw 0x71c0, 0xc81c,	0x71ff, 0xc81c,		0x21, 0
+	.dw 0x7240, 0xc81c,	0x727f, 0xc81c,		0x21, 0
+	.dw 0x72c0, 0xc81c,	0x72ff, 0xc81c,		0x21, 0
+	.dw 0x7340, 0xc81c,	0x737f, 0xc81c,		0x21, 0
+	.dw 0x73c0, 0xc81c,	0x73ff, 0xc81c,		0x21, 0
+	.dw 0x7440, 0xc81c,	0x747f, 0xc81c,		0x21, 0
+	.dw 0x74c0, 0xc81c,	0x74ff, 0xc81c,		0x21, 0
+	.dw 0x7540, 0xc81c,	0x757f, 0xc81c,		0x21, 0
+	.dw 0x75c0, 0xc81c,	0x75ff, 0xc81c,		0x21, 0
+	.dw 0x7640, 0xc81c,	0x767f, 0xc81c,		0x21, 0
+	.dw 0x76c0, 0xc81c,	0x76ff, 0xc81c,		0x21, 0
+	.dw 0x7740, 0xc81c,	0x777f, 0xc81c,		0x21, 0
+	.dw 0x77c0, 0xc81c,	0x77ff, 0xc81c,		0x21, 0
+	.dw 0x7840, 0xc81c,	0x787f, 0xc81c,		0x21, 0
+	.dw 0x78c0, 0xc81c,	0x78ff, 0xc81c,		0x21, 0
+	.dw 0x7940, 0xc81c,	0x797f, 0xc81c,		0x21, 0
+	.dw 0x79c0, 0xc81c,	0x7fff, 0xc81c,		0x21, 0
+	.dw 0x8040, 0xc81c,	0x807f, 0xc81c,		0x21, 0
+	.dw 0x80c0, 0xc81c,	0x80ff, 0xc81c,		0x21, 0
+	.dw 0x8140, 0xc81c,	0x817f, 0xc81c,		0x21, 0
+	.dw 0x81c0, 0xc81c,	0x81ff, 0xc81c,		0x21, 0
+	.dw 0x8240, 0xc81c,	0x827f, 0xc81c,		0x21, 0
+	.dw 0x82c0, 0xc81c,	0x82ff, 0xc81c,		0x21, 0
+	.dw 0x8340, 0xc81c,	0x837f, 0xc81c,		0x21, 0
+	.dw 0x83c0, 0xc81c,	0x83ff, 0xc81c,		0x21, 0
+	.dw 0x8440, 0xc81c,	0x847f, 0xc81c,		0x21, 0
+	.dw 0x84c0, 0xc81c,	0x84ff, 0xc81c,		0x21, 0
+	.dw 0x8540, 0xc81c,	0x857f, 0xc81c,		0x21, 0
+	.dw 0x85c0, 0xc81c,	0x85ff, 0xc81c,		0x21, 0
+	.dw 0x8640, 0xc81c,	0x867f, 0xc81c,		0x21, 0
+	.dw 0x86c0, 0xc81c,	0x86ff, 0xc81c,		0x21, 0
+	.dw 0x8740, 0xc81c,	0x877f, 0xc81c,		0x21, 0
+	.dw 0x87c0, 0xc81c,	0x87ff, 0xc81c,		0x21, 0
+	.dw 0x8840, 0xc81c,	0x887f, 0xc81c,		0x21, 0
+	.dw 0x88c0, 0xc81c,	0x88ff, 0xc81c,		0x21, 0
+	.dw 0x8940, 0xc81c,	0x897f, 0xc81c,		0x21, 0
+	.dw 0x89c0, 0xc81c,	0x89ff, 0xc81c,		0x21, 0
+	.dw 0x8a40, 0xc81c,	0x8a7f, 0xc81c,		0x21, 0
+	.dw 0x8ac0, 0xc81c,	0x8aff, 0xc81c,		0x21, 0
+	.dw 0x8b40, 0xc81c,	0x8b7f, 0xc81c,		0x21, 0
+	.dw 0x8bc0, 0xc81c,	0x8bff, 0xc81c,		0x21, 0
+	.dw 0x8c40, 0xc81c,	0x8c7f, 0xc81c,		0x21, 0
+	.dw 0x8cc0, 0xc81c,	0x8cff, 0xc81c,		0x21, 0
+	.dw 0x8d40, 0xc81c,	0x8d7f, 0xc81c,		0x21, 0
+	.dw 0x8dc0, 0xc81c,	0x8dff, 0xc81c,		0x21, 0
+	.dw 0x8e40, 0xc81c,	0x8e7f, 0xc81c,		0x21, 0
+	.dw 0x8ec0, 0xc81c,	0x8eff, 0xc81c,		0x21, 0
+	.dw 0x8f40, 0xc81c,	0x8f7f, 0xc81c,		0x21, 0
+	.dw 0x8fc0, 0xc81c,	0x8fff, 0xc81c,		0x21, 0
+	.dw 0x9040, 0xc81c,	0x907f, 0xc81c,		0x21, 0
+	.dw 0x90c0, 0xc81c,	0x90ff, 0xc81c,		0x21, 0
+	.dw 0x9140, 0xc81c,	0x917f, 0xc81c,		0x21, 0
+	.dw 0x91c0, 0xc81c,	0x91ff, 0xc81c,		0x21, 0
+	.dw 0x9240, 0xc81c,	0x927f, 0xc81c,		0x21, 0
+	.dw 0x92c0, 0xc81c,	0x92ff, 0xc81c,		0x21, 0
+	.dw 0x9340, 0xc81c,	0x937f, 0xc81c,		0x21, 0
+	.dw 0x93c0, 0xc81c,	0x93ff, 0xc81c,		0x21, 0
+	.dw 0x9440, 0xc81c,	0x947f, 0xc81c,		0x21, 0
+	.dw 0x94c0, 0xc81c,	0x94ff, 0xc81c,		0x21, 0
+	.dw 0x9540, 0xc81c,	0x957f, 0xc81c,		0x21, 0
+	.dw 0x95c0, 0xc81c,	0x95ff, 0xc81c,		0x21, 0
+	.dw 0x9640, 0xc81c,	0x967f, 0xc81c,		0x21, 0
+	.dw 0x96c0, 0xc81c,	0x96ff, 0xc81c,		0x21, 0
+	.dw 0x9740, 0xc81c,	0x977f, 0xc81c,		0x21, 0
+	.dw 0x97c0, 0xc81c,	0x97ff, 0xc81c,		0x21, 0
+	.dw 0x9840, 0xc81c,	0x987f, 0xc81c,		0x21, 0
+	.dw 0x98c0, 0xc81c,	0x98ff, 0xc81c,		0x21, 0
+	.dw 0x9940, 0xc81c,	0x997f, 0xc81c,		0x21, 0
+	.dw 0x99c0, 0xc81c,	0x9fff, 0xc81c,		0x21, 0
+	.dw 0xa040, 0xc81c,	0xa07f, 0xc81c,		0x21, 0
+	.dw 0xa0c0, 0xc81c,	0xa0ff, 0xc81c,		0x21, 0
+	.dw 0xa140, 0xc81c,	0xa17f, 0xc81c,		0x21, 0
+	.dw 0xa1c0, 0xc81c,	0xa1ff, 0xc81c,		0x21, 0
+	.dw 0xa240, 0xc81c,	0xa27f, 0xc81c,		0x21, 0
+	.dw 0xa2c0, 0xc81c,	0xa2ff, 0xc81c,		0x21, 0
+	.dw 0xa340, 0xc81c,	0xa37f, 0xc81c,		0x21, 0
+	.dw 0xa3c0, 0xc81c,	0xa3ff, 0xc81c,		0x21, 0
+	.dw 0xa440, 0xc81c,	0xa47f, 0xc81c,		0x21, 0
+	.dw 0xa4c0, 0xc81c,	0xa4ff, 0xc81c,		0x21, 0
+	.dw 0xa540, 0xc81c,	0xa57f, 0xc81c,		0x21, 0
+	.dw 0xa5c0, 0xc81c,	0xa5ff, 0xc81c,		0x21, 0
+	.dw 0xa640, 0xc81c,	0xa67f, 0xc81c,		0x21, 0
+	.dw 0xa6c0, 0xc81c,	0xa6ff, 0xc81c,		0x21, 0
+	.dw 0xa740, 0xc81c,	0xa77f, 0xc81c,		0x21, 0
+	.dw 0xa7c0, 0xc81c,	0xa7ff, 0xc81c,		0x21, 0
+	.dw 0xa840, 0xc81c,	0xa87f, 0xc81c,		0x21, 0
+	.dw 0xa8c0, 0xc81c,	0xa8ff, 0xc81c,		0x21, 0
+	.dw 0xa940, 0xc81c,	0xa97f, 0xc81c,		0x21, 0
+	.dw 0xa9c0, 0xc81c,	0xa9ff, 0xc81c,		0x21, 0
+	.dw 0xaa40, 0xc81c,	0xaa7f, 0xc81c,		0x21, 0
+	.dw 0xaac0, 0xc81c,	0xaaff, 0xc81c,		0x21, 0
+	.dw 0xab40, 0xc81c,	0xab7f, 0xc81c,		0x21, 0
+	.dw 0xabc0, 0xc81c,	0xabff, 0xc81c,		0x21, 0
+	.dw 0xac40, 0xc81c,	0xac7f, 0xc81c,		0x21, 0
+	.dw 0xacc0, 0xc81c,	0xacff, 0xc81c,		0x21, 0
+	.dw 0xad40, 0xc81c,	0xad7f, 0xc81c,		0x21, 0
+	.dw 0xadc0, 0xc81c,	0xadff, 0xc81c,		0x21, 0
+	.dw 0xae40, 0xc81c,	0xae7f, 0xc81c,		0x21, 0
+	.dw 0xaec0, 0xc81c,	0xaeff, 0xc81c,		0x21, 0
+	.dw 0xaf40, 0xc81c,	0xaf7f, 0xc81c,		0x21, 0
+	.dw 0xafc0, 0xc81c,	0xafff, 0xc81c,		0x21, 0
+	.dw 0xb040, 0xc81c,	0xb07f, 0xc81c,		0x21, 0
+	.dw 0xb0c0, 0xc81c,	0xb0ff, 0xc81c,		0x21, 0
+	.dw 0xb140, 0xc81c,	0xb17f, 0xc81c,		0x21, 0
+	.dw 0xb1c0, 0xc81c,	0xb1ff, 0xc81c,		0x21, 0
+	.dw 0xb240, 0xc81c,	0xb27f, 0xc81c,		0x21, 0
+	.dw 0xb2c0, 0xc81c,	0xb2ff, 0xc81c,		0x21, 0
+	.dw 0xb340, 0xc81c,	0xb37f, 0xc81c,		0x21, 0
+	.dw 0xb3c0, 0xc81c,	0xb3ff, 0xc81c,		0x21, 0
+	.dw 0xb440, 0xc81c,	0xb47f, 0xc81c,		0x21, 0
+	.dw 0xb4c0, 0xc81c,	0xb4ff, 0xc81c,		0x21, 0
+	.dw 0xb540, 0xc81c,	0xb57f, 0xc81c,		0x21, 0
+	.dw 0xb5c0, 0xc81c,	0xb5ff, 0xc81c,		0x21, 0
+	.dw 0xb640, 0xc81c,	0xb67f, 0xc81c,		0x21, 0
+	.dw 0xb6c0, 0xc81c,	0xb6ff, 0xc81c,		0x21, 0
+	.dw 0xb740, 0xc81c,	0xb77f, 0xc81c,		0x21, 0
+	.dw 0xb7c0, 0xc81c,	0xb7ff, 0xc81c,		0x21, 0
+	.dw 0xb840, 0xc81c,	0xb87f, 0xc81c,		0x21, 0
+	.dw 0xb8c0, 0xc81c,	0xb8ff, 0xc81c,		0x21, 0
+	.dw 0xb940, 0xc81c,	0xb97f, 0xc81c,		0x21, 0
+	.dw 0xb9c0, 0xc81c,	0xbfff, 0xc81c,		0x21, 0
+	.dw 0xc040, 0xc81c,	0xc07f, 0xc81c,		0x21, 0
+	.dw 0xc0c0, 0xc81c,	0xc0ff, 0xc81c,		0x21, 0
+	.dw 0xc140, 0xc81c,	0xc17f, 0xc81c,		0x21, 0
+	.dw 0xc1c0, 0xc81c,	0xc1ff, 0xc81c,		0x21, 0
+	.dw 0xc240, 0xc81c,	0xc27f, 0xc81c,		0x21, 0
+	.dw 0xc2c0, 0xc81c,	0xc2ff, 0xc81c,		0x21, 0
+	.dw 0xc340, 0xc81c,	0xc37f, 0xc81c,		0x21, 0
+	.dw 0xc3c0, 0xc81c,	0xc3ff, 0xc81c,		0x21, 0
+	.dw 0xc440, 0xc81c,	0xc47f, 0xc81c,		0x21, 0
+	.dw 0xc4c0, 0xc81c,	0xc4ff, 0xc81c,		0x21, 0
+	.dw 0xc540, 0xc81c,	0xc57f, 0xc81c,		0x21, 0
+	.dw 0xc5c0, 0xc81c,	0xc5ff, 0xc81c,		0x21, 0
+	.dw 0xc640, 0xc81c,	0xc67f, 0xc81c,		0x21, 0
+	.dw 0xc6c0, 0xc81c,	0xc6ff, 0xc81c,		0x21, 0
+	.dw 0xc740, 0xc81c,	0xc77f, 0xc81c,		0x21, 0
+	.dw 0xc7c0, 0xc81c,	0xc7ff, 0xc81c,		0x21, 0
+	.dw 0xc840, 0xc81c,	0xc87f, 0xc81c,		0x21, 0
+	.dw 0xc8c0, 0xc81c,	0xc8ff, 0xc81c,		0x21, 0
+	.dw 0xc940, 0xc81c,	0xc97f, 0xc81c,		0x21, 0
+	.dw 0xc9c0, 0xc81c,	0xc9ff, 0xc81c,		0x21, 0
+	.dw 0xca40, 0xc81c,	0xca7f, 0xc81c,		0x21, 0
+	.dw 0xcac0, 0xc81c,	0xcaff, 0xc81c,		0x21, 0
+	.dw 0xcb40, 0xc81c,	0xcb7f, 0xc81c,		0x21, 0
+	.dw 0xcbc0, 0xc81c,	0xcbff, 0xc81c,		0x21, 0
+	.dw 0xcc40, 0xc81c,	0xcc7f, 0xc81c,		0x21, 0
+	.dw 0xccc0, 0xc81c,	0xccff, 0xc81c,		0x21, 0
+	.dw 0xcd40, 0xc81c,	0xcd7f, 0xc81c,		0x21, 0
+	.dw 0xcdc0, 0xc81c,	0xcdff, 0xc81c,		0x21, 0
+	.dw 0xce40, 0xc81c,	0xce7f, 0xc81c,		0x21, 0
+	.dw 0xcec0, 0xc81c,	0xceff, 0xc81c,		0x21, 0
+	.dw 0xcf40, 0xc81c,	0xcf7f, 0xc81c,		0x21, 0
+	.dw 0xcfc0, 0xc81c,	0xcfff, 0xc81c,		0x21, 0
+	.dw 0xd040, 0xc81c,	0xd07f, 0xc81c,		0x21, 0
+	.dw 0xd0c0, 0xc81c,	0xd0ff, 0xc81c,		0x21, 0
+	.dw 0xd140, 0xc81c,	0xd17f, 0xc81c,		0x21, 0
+	.dw 0xd1c0, 0xc81c,	0xd1ff, 0xc81c,		0x21, 0
+	.dw 0xd240, 0xc81c,	0xd27f, 0xc81c,		0x21, 0
+	.dw 0xd2c0, 0xc81c,	0xd2ff, 0xc81c,		0x21, 0
+	.dw 0xd340, 0xc81c,	0xd37f, 0xc81c,		0x21, 0
+	.dw 0xd3c0, 0xc81c,	0xd3ff, 0xc81c,		0x21, 0
+	.dw 0xd440, 0xc81c,	0xd47f, 0xc81c,		0x21, 0
+	.dw 0xd4c0, 0xc81c,	0xd4ff, 0xc81c,		0x21, 0
+	.dw 0xd540, 0xc81c,	0xd57f, 0xc81c,		0x21, 0
+	.dw 0xd5c0, 0xc81c,	0xd5ff, 0xc81c,		0x21, 0
+	.dw 0xd640, 0xc81c,	0xd67f, 0xc81c,		0x21, 0
+	.dw 0xd6c0, 0xc81c,	0xd6ff, 0xc81c,		0x21, 0
+	.dw 0xd740, 0xc81c,	0xd77f, 0xc81c,		0x21, 0
+	.dw 0xd7c0, 0xc81c,	0xd7ff, 0xc81c,		0x21, 0
+	.dw 0xd840, 0xc81c,	0xd87f, 0xc81c,		0x21, 0
+	.dw 0xd8c0, 0xc81c,	0xd8ff, 0xc81c,		0x21, 0
+	.dw 0xd940, 0xc81c,	0xd97f, 0xc81c,		0x21, 0
+	.dw 0xd9c0, 0xc81c,	0xdfff, 0xc81c,		0x21, 0
+	.dw 0xe040, 0xc81c,	0xe07f, 0xc81c,		0x21, 0
+	.dw 0xe0c0, 0xc81c,	0xe0ff, 0xc81c,		0x21, 0
+	.dw 0xe140, 0xc81c,	0xe17f, 0xc81c,		0x21, 0
+	.dw 0xe1c0, 0xc81c,	0xe1ff, 0xc81c,		0x21, 0
+	.dw 0xe240, 0xc81c,	0xe27f, 0xc81c,		0x21, 0
+	.dw 0xe2c0, 0xc81c,	0xe2ff, 0xc81c,		0x21, 0
+	.dw 0xe340, 0xc81c,	0xe37f, 0xc81c,		0x21, 0
+	.dw 0xe3c0, 0xc81c,	0xe3ff, 0xc81c,		0x21, 0
+	.dw 0xe440, 0xc81c,	0xe47f, 0xc81c,		0x21, 0
+	.dw 0xe4c0, 0xc81c,	0xe4ff, 0xc81c,		0x21, 0
+	.dw 0xe540, 0xc81c,	0xe57f, 0xc81c,		0x21, 0
+	.dw 0xe5c0, 0xc81c,	0xe5ff, 0xc81c,		0x21, 0
+	.dw 0xe640, 0xc81c,	0xe67f, 0xc81c,		0x21, 0
+	.dw 0xe6c0, 0xc81c,	0xe6ff, 0xc81c,		0x21, 0
+	.dw 0xe740, 0xc81c,	0xe77f, 0xc81c,		0x21, 0
+	.dw 0xe7c0, 0xc81c,	0xe7ff, 0xc81c,		0x21, 0
+	.dw 0xe840, 0xc81c,	0xe87f, 0xc81c,		0x21, 0
+	.dw 0xe8c0, 0xc81c,	0xe8ff, 0xc81c,		0x21, 0
+	.dw 0xe940, 0xc81c,	0xe97f, 0xc81c,		0x21, 0
+	.dw 0xe9c0, 0xc81c,	0xe9ff, 0xc81c,		0x21, 0
+	.dw 0xea40, 0xc81c,	0xea7f, 0xc81c,		0x21, 0
+	.dw 0xeac0, 0xc81c,	0xeaff, 0xc81c,		0x21, 0
+	.dw 0xeb40, 0xc81c,	0xeb7f, 0xc81c,		0x21, 0
+	.dw 0xebc0, 0xc81c,	0xebff, 0xc81c,		0x21, 0
+	.dw 0xec40, 0xc81c,	0xec7f, 0xc81c,		0x21, 0
+	.dw 0xecc0, 0xc81c,	0xecff, 0xc81c,		0x21, 0
+	.dw 0xed40, 0xc81c,	0xed7f, 0xc81c,		0x21, 0
+	.dw 0xedc0, 0xc81c,	0xedff, 0xc81c,		0x21, 0
+	.dw 0xee40, 0xc81c,	0xee7f, 0xc81c,		0x21, 0
+	.dw 0xeec0, 0xc81c,	0xeeff, 0xc81c,		0x21, 0
+	.dw 0xef40, 0xc81c,	0xef7f, 0xc81c,		0x21, 0
+	.dw 0xefc0, 0xc81c,	0xefff, 0xc81c,		0x21, 0
+	.dw 0xf040, 0xc81c,	0xf07f, 0xc81c,		0x21, 0
+	.dw 0xf0c0, 0xc81c,	0xf0ff, 0xc81c,		0x21, 0
+	.dw 0xf140, 0xc81c,	0xf17f, 0xc81c,		0x21, 0
+	.dw 0xf1c0, 0xc81c,	0xf1ff, 0xc81c,		0x21, 0
+	.dw 0xf240, 0xc81c,	0xf27f, 0xc81c,		0x21, 0
+	.dw 0xf2c0, 0xc81c,	0xf2ff, 0xc81c,		0x21, 0
+	.dw 0xf340, 0xc81c,	0xf37f, 0xc81c,		0x21, 0
+	.dw 0xf3c0, 0xc81c,	0xf3ff, 0xc81c,		0x21, 0
+	.dw 0xf440, 0xc81c,	0xf47f, 0xc81c,		0x21, 0
+	.dw 0xf4c0, 0xc81c,	0xf4ff, 0xc81c,		0x21, 0
+	.dw 0xf540, 0xc81c,	0xf57f, 0xc81c,		0x21, 0
+	.dw 0xf5c0, 0xc81c,	0xf5ff, 0xc81c,		0x21, 0
+	.dw 0xf640, 0xc81c,	0xf67f, 0xc81c,		0x21, 0
+	.dw 0xf6c0, 0xc81c,	0xf6ff, 0xc81c,		0x21, 0
+	.dw 0xf740, 0xc81c,	0xf77f, 0xc81c,		0x21, 0
+	.dw 0xf7c0, 0xc81c,	0xf7ff, 0xc81c,		0x21, 0
+	.dw 0xf840, 0xc81c,	0xf87f, 0xc81c,		0x21, 0
+	.dw 0xf8c0, 0xc81c,	0xf8ff, 0xc81c,		0x21, 0
+	.dw 0xf940, 0xc81c,	0xf97f, 0xc81c,		0x21, 0
+	.dw 0xf9c0, 0xc81c,	0xffff, 0xc81c,		0x21, 0
+	.dw 0x0040, 0xc81d,	0x007f, 0xc81d,		0x21, 0
+	.dw 0x00c0, 0xc81d,	0x00ff, 0xc81d,		0x21, 0
+	.dw 0x0140, 0xc81d,	0x017f, 0xc81d,		0x21, 0
+	.dw 0x01c0, 0xc81d,	0x01ff, 0xc81d,		0x21, 0
+	.dw 0x0240, 0xc81d,	0x027f, 0xc81d,		0x21, 0
+	.dw 0x02c0, 0xc81d,	0x02ff, 0xc81d,		0x21, 0
+	.dw 0x0340, 0xc81d,	0x037f, 0xc81d,		0x21, 0
+	.dw 0x03c0, 0xc81d,	0x03ff, 0xc81d,		0x21, 0
+	.dw 0x0440, 0xc81d,	0x047f, 0xc81d,		0x21, 0
+	.dw 0x04c0, 0xc81d,	0x04ff, 0xc81d,		0x21, 0
+	.dw 0x0540, 0xc81d,	0x057f, 0xc81d,		0x21, 0
+	.dw 0x05c0, 0xc81d,	0x05ff, 0xc81d,		0x21, 0
+	.dw 0x0640, 0xc81d,	0x067f, 0xc81d,		0x21, 0
+	.dw 0x06c0, 0xc81d,	0x06ff, 0xc81d,		0x21, 0
+	.dw 0x0740, 0xc81d,	0x077f, 0xc81d,		0x21, 0
+	.dw 0x07c0, 0xc81d,	0x07ff, 0xc81d,		0x21, 0
+	.dw 0x0840, 0xc81d,	0x087f, 0xc81d,		0x21, 0
+	.dw 0x08c0, 0xc81d,	0x08ff, 0xc81d,		0x21, 0
+	.dw 0x0940, 0xc81d,	0x097f, 0xc81d,		0x21, 0
+	.dw 0x09c0, 0xc81d,	0x09ff, 0xc81d,		0x21, 0
+	.dw 0x0a40, 0xc81d,	0x0a7f, 0xc81d,		0x21, 0
+	.dw 0x0ac0, 0xc81d,	0x0aff, 0xc81d,		0x21, 0
+	.dw 0x0b40, 0xc81d,	0x0b7f, 0xc81d,		0x21, 0
+	.dw 0x0bc0, 0xc81d,	0x0bff, 0xc81d,		0x21, 0
+	.dw 0x0c40, 0xc81d,	0x0c7f, 0xc81d,		0x21, 0
+	.dw 0x0cc0, 0xc81d,	0x0cff, 0xc81d,		0x21, 0
+	.dw 0x0d40, 0xc81d,	0x0d7f, 0xc81d,		0x21, 0
+	.dw 0x0dc0, 0xc81d,	0x0dff, 0xc81d,		0x21, 0
+	.dw 0x0e40, 0xc81d,	0x0e7f, 0xc81d,		0x21, 0
+	.dw 0x0ec0, 0xc81d,	0x0eff, 0xc81d,		0x21, 0
+	.dw 0x0f40, 0xc81d,	0x0f7f, 0xc81d,		0x21, 0
+	.dw 0x0fc0, 0xc81d,	0x0fff, 0xc81d,		0x21, 0
+	.dw 0x1040, 0xc81d,	0x107f, 0xc81d,		0x21, 0
+	.dw 0x10c0, 0xc81d,	0x10ff, 0xc81d,		0x21, 0
+	.dw 0x1140, 0xc81d,	0x117f, 0xc81d,		0x21, 0
+	.dw 0x11c0, 0xc81d,	0x11ff, 0xc81d,		0x21, 0
+	.dw 0x1240, 0xc81d,	0x127f, 0xc81d,		0x21, 0
+	.dw 0x12c0, 0xc81d,	0x12ff, 0xc81d,		0x21, 0
+	.dw 0x1340, 0xc81d,	0x137f, 0xc81d,		0x21, 0
+	.dw 0x13c0, 0xc81d,	0x13ff, 0xc81d,		0x21, 0
+	.dw 0x1440, 0xc81d,	0x147f, 0xc81d,		0x21, 0
+	.dw 0x14c0, 0xc81d,	0x14ff, 0xc81d,		0x21, 0
+	.dw 0x1540, 0xc81d,	0x157f, 0xc81d,		0x21, 0
+	.dw 0x15c0, 0xc81d,	0x15ff, 0xc81d,		0x21, 0
+	.dw 0x1640, 0xc81d,	0x167f, 0xc81d,		0x21, 0
+	.dw 0x16c0, 0xc81d,	0x16ff, 0xc81d,		0x21, 0
+	.dw 0x1740, 0xc81d,	0x177f, 0xc81d,		0x21, 0
+	.dw 0x17c0, 0xc81d,	0x17ff, 0xc81d,		0x21, 0
+	.dw 0x1840, 0xc81d,	0x187f, 0xc81d,		0x21, 0
+	.dw 0x18c0, 0xc81d,	0x18ff, 0xc81d,		0x21, 0
+	.dw 0x1940, 0xc81d,	0x197f, 0xc81d,		0x21, 0
+	.dw 0x19c0, 0xc81d,	0x1fff, 0xc81d,		0x21, 0
+	.dw 0x2040, 0xc81d,	0x207f, 0xc81d,		0x21, 0
+	.dw 0x20c0, 0xc81d,	0x20ff, 0xc81d,		0x21, 0
+	.dw 0x2140, 0xc81d,	0x217f, 0xc81d,		0x21, 0
+	.dw 0x21c0, 0xc81d,	0x21ff, 0xc81d,		0x21, 0
+	.dw 0x2240, 0xc81d,	0x227f, 0xc81d,		0x21, 0
+	.dw 0x22c0, 0xc81d,	0x22ff, 0xc81d,		0x21, 0
+	.dw 0x2340, 0xc81d,	0x237f, 0xc81d,		0x21, 0
+	.dw 0x23c0, 0xc81d,	0x23ff, 0xc81d,		0x21, 0
+	.dw 0x2440, 0xc81d,	0x247f, 0xc81d,		0x21, 0
+	.dw 0x24c0, 0xc81d,	0x24ff, 0xc81d,		0x21, 0
+	.dw 0x2540, 0xc81d,	0x257f, 0xc81d,		0x21, 0
+	.dw 0x25c0, 0xc81d,	0x25ff, 0xc81d,		0x21, 0
+	.dw 0x2640, 0xc81d,	0x267f, 0xc81d,		0x21, 0
+	.dw 0x26c0, 0xc81d,	0x26ff, 0xc81d,		0x21, 0
+	.dw 0x2740, 0xc81d,	0x277f, 0xc81d,		0x21, 0
+	.dw 0x27c0, 0xc81d,	0x27ff, 0xc81d,		0x21, 0
+	.dw 0x2840, 0xc81d,	0x287f, 0xc81d,		0x21, 0
+	.dw 0x28c0, 0xc81d,	0x28ff, 0xc81d,		0x21, 0
+	.dw 0x2940, 0xc81d,	0x297f, 0xc81d,		0x21, 0
+	.dw 0x29c0, 0xc81d,	0x29ff, 0xc81d,		0x21, 0
+	.dw 0x2a40, 0xc81d,	0x2a7f, 0xc81d,		0x21, 0
+	.dw 0x2ac0, 0xc81d,	0x2aff, 0xc81d,		0x21, 0
+	.dw 0x2b40, 0xc81d,	0x2b7f, 0xc81d,		0x21, 0
+	.dw 0x2bc0, 0xc81d,	0x2bff, 0xc81d,		0x21, 0
+	.dw 0x2c40, 0xc81d,	0x2c7f, 0xc81d,		0x21, 0
+	.dw 0x2cc0, 0xc81d,	0x2cff, 0xc81d,		0x21, 0
+	.dw 0x2d40, 0xc81d,	0x2d7f, 0xc81d,		0x21, 0
+	.dw 0x2dc0, 0xc81d,	0x2dff, 0xc81d,		0x21, 0
+	.dw 0x2e40, 0xc81d,	0x2e7f, 0xc81d,		0x21, 0
+	.dw 0x2ec0, 0xc81d,	0x2eff, 0xc81d,		0x21, 0
+	.dw 0x2f40, 0xc81d,	0x2f7f, 0xc81d,		0x21, 0
+	.dw 0x2fc0, 0xc81d,	0x2fff, 0xc81d,		0x21, 0
+	.dw 0x3040, 0xc81d,	0x307f, 0xc81d,		0x21, 0
+	.dw 0x30c0, 0xc81d,	0x30ff, 0xc81d,		0x21, 0
+	.dw 0x3140, 0xc81d,	0x317f, 0xc81d,		0x21, 0
+	.dw 0x31c0, 0xc81d,	0x31ff, 0xc81d,		0x21, 0
+	.dw 0x3240, 0xc81d,	0x327f, 0xc81d,		0x21, 0
+	.dw 0x32c0, 0xc81d,	0x32ff, 0xc81d,		0x21, 0
+	.dw 0x3340, 0xc81d,	0x337f, 0xc81d,		0x21, 0
+	.dw 0x33c0, 0xc81d,	0x33ff, 0xc81d,		0x21, 0
+	.dw 0x3440, 0xc81d,	0x347f, 0xc81d,		0x21, 0
+	.dw 0x34c0, 0xc81d,	0x34ff, 0xc81d,		0x21, 0
+	.dw 0x3540, 0xc81d,	0x357f, 0xc81d,		0x21, 0
+	.dw 0x35c0, 0xc81d,	0x35ff, 0xc81d,		0x21, 0
+	.dw 0x3640, 0xc81d,	0x367f, 0xc81d,		0x21, 0
+	.dw 0x36c0, 0xc81d,	0x36ff, 0xc81d,		0x21, 0
+	.dw 0x3740, 0xc81d,	0x377f, 0xc81d,		0x21, 0
+	.dw 0x37c0, 0xc81d,	0x37ff, 0xc81d,		0x21, 0
+	.dw 0x3840, 0xc81d,	0x387f, 0xc81d,		0x21, 0
+	.dw 0x38c0, 0xc81d,	0x38ff, 0xc81d,		0x21, 0
+	.dw 0x3940, 0xc81d,	0x397f, 0xc81d,		0x21, 0
+	.dw 0x39c0, 0xc81d,	0x3fff, 0xc81d,		0x21, 0
+	.dw 0x4040, 0xc81d,	0x407f, 0xc81d,		0x21, 0
+	.dw 0x40c0, 0xc81d,	0x40ff, 0xc81d,		0x21, 0
+	.dw 0x4140, 0xc81d,	0x417f, 0xc81d,		0x21, 0
+	.dw 0x41c0, 0xc81d,	0x41ff, 0xc81d,		0x21, 0
+	.dw 0x4240, 0xc81d,	0x427f, 0xc81d,		0x21, 0
+	.dw 0x42c0, 0xc81d,	0x42ff, 0xc81d,		0x21, 0
+	.dw 0x4340, 0xc81d,	0x437f, 0xc81d,		0x21, 0
+	.dw 0x43c0, 0xc81d,	0x43ff, 0xc81d,		0x21, 0
+	.dw 0x4440, 0xc81d,	0x447f, 0xc81d,		0x21, 0
+	.dw 0x44c0, 0xc81d,	0x44ff, 0xc81d,		0x21, 0
+	.dw 0x4540, 0xc81d,	0x457f, 0xc81d,		0x21, 0
+	.dw 0x45c0, 0xc81d,	0x45ff, 0xc81d,		0x21, 0
+	.dw 0x4640, 0xc81d,	0x467f, 0xc81d,		0x21, 0
+	.dw 0x46c0, 0xc81d,	0x46ff, 0xc81d,		0x21, 0
+	.dw 0x4740, 0xc81d,	0x477f, 0xc81d,		0x21, 0
+	.dw 0x47c0, 0xc81d,	0x47ff, 0xc81d,		0x21, 0
+	.dw 0x4840, 0xc81d,	0x487f, 0xc81d,		0x21, 0
+	.dw 0x48c0, 0xc81d,	0x48ff, 0xc81d,		0x21, 0
+	.dw 0x4940, 0xc81d,	0x497f, 0xc81d,		0x21, 0
+	.dw 0x49c0, 0xc81d,	0x49ff, 0xc81d,		0x21, 0
+	.dw 0x4a40, 0xc81d,	0x4a7f, 0xc81d,		0x21, 0
+	.dw 0x4ac0, 0xc81d,	0x4aff, 0xc81d,		0x21, 0
+	.dw 0x4b40, 0xc81d,	0x4b7f, 0xc81d,		0x21, 0
+	.dw 0x4bc0, 0xc81d,	0x4bff, 0xc81d,		0x21, 0
+	.dw 0x4c40, 0xc81d,	0x4c7f, 0xc81d,		0x21, 0
+	.dw 0x4cc0, 0xc81d,	0x4cff, 0xc81d,		0x21, 0
+	.dw 0x4d40, 0xc81d,	0x4d7f, 0xc81d,		0x21, 0
+	.dw 0x4dc0, 0xc81d,	0x4dff, 0xc81d,		0x21, 0
+	.dw 0x4e40, 0xc81d,	0x4e7f, 0xc81d,		0x21, 0
+	.dw 0x4ec0, 0xc81d,	0x4eff, 0xc81d,		0x21, 0
+	.dw 0x4f40, 0xc81d,	0x4f7f, 0xc81d,		0x21, 0
+	.dw 0x4fc0, 0xc81d,	0x4fff, 0xc81d,		0x21, 0
+	.dw 0x5040, 0xc81d,	0x507f, 0xc81d,		0x21, 0
+	.dw 0x50c0, 0xc81d,	0x50ff, 0xc81d,		0x21, 0
+	.dw 0x5140, 0xc81d,	0x517f, 0xc81d,		0x21, 0
+	.dw 0x51c0, 0xc81d,	0x51ff, 0xc81d,		0x21, 0
+	.dw 0x5240, 0xc81d,	0x527f, 0xc81d,		0x21, 0
+	.dw 0x52c0, 0xc81d,	0x52ff, 0xc81d,		0x21, 0
+	.dw 0x5340, 0xc81d,	0x537f, 0xc81d,		0x21, 0
+	.dw 0x53c0, 0xc81d,	0x53ff, 0xc81d,		0x21, 0
+	.dw 0x5440, 0xc81d,	0x547f, 0xc81d,		0x21, 0
+	.dw 0x54c0, 0xc81d,	0x54ff, 0xc81d,		0x21, 0
+	.dw 0x5540, 0xc81d,	0x557f, 0xc81d,		0x21, 0
+	.dw 0x55c0, 0xc81d,	0x55ff, 0xc81d,		0x21, 0
+	.dw 0x5640, 0xc81d,	0x567f, 0xc81d,		0x21, 0
+	.dw 0x56c0, 0xc81d,	0x56ff, 0xc81d,		0x21, 0
+	.dw 0x5740, 0xc81d,	0x577f, 0xc81d,		0x21, 0
+	.dw 0x57c0, 0xc81d,	0x57ff, 0xc81d,		0x21, 0
+	.dw 0x5840, 0xc81d,	0x587f, 0xc81d,		0x21, 0
+	.dw 0x58c0, 0xc81d,	0x58ff, 0xc81d,		0x21, 0
+	.dw 0x5940, 0xc81d,	0x597f, 0xc81d,		0x21, 0
+	.dw 0x59c0, 0xc81d,	0x5fff, 0xc81d,		0x21, 0
+	.dw 0x6040, 0xc81d,	0x607f, 0xc81d,		0x21, 0
+	.dw 0x60c0, 0xc81d,	0x60ff, 0xc81d,		0x21, 0
+	.dw 0x6140, 0xc81d,	0x617f, 0xc81d,		0x21, 0
+	.dw 0x61c0, 0xc81d,	0x61ff, 0xc81d,		0x21, 0
+	.dw 0x6240, 0xc81d,	0x627f, 0xc81d,		0x21, 0
+	.dw 0x62c0, 0xc81d,	0x62ff, 0xc81d,		0x21, 0
+	.dw 0x6340, 0xc81d,	0x637f, 0xc81d,		0x21, 0
+	.dw 0x63c0, 0xc81d,	0x63ff, 0xc81d,		0x21, 0
+	.dw 0x6440, 0xc81d,	0x647f, 0xc81d,		0x21, 0
+	.dw 0x64c0, 0xc81d,	0x64ff, 0xc81d,		0x21, 0
+	.dw 0x6540, 0xc81d,	0x657f, 0xc81d,		0x21, 0
+	.dw 0x65c0, 0xc81d,	0x65ff, 0xc81d,		0x21, 0
+	.dw 0x6640, 0xc81d,	0x667f, 0xc81d,		0x21, 0
+	.dw 0x66c0, 0xc81d,	0x66ff, 0xc81d,		0x21, 0
+	.dw 0x6740, 0xc81d,	0x677f, 0xc81d,		0x21, 0
+	.dw 0x67c0, 0xc81d,	0x67ff, 0xc81d,		0x21, 0
+	.dw 0x6840, 0xc81d,	0x687f, 0xc81d,		0x21, 0
+	.dw 0x68c0, 0xc81d,	0x68ff, 0xc81d,		0x21, 0
+	.dw 0x6940, 0xc81d,	0x697f, 0xc81d,		0x21, 0
+	.dw 0x69c0, 0xc81d,	0x69ff, 0xc81d,		0x21, 0
+	.dw 0x6a40, 0xc81d,	0x6a7f, 0xc81d,		0x21, 0
+	.dw 0x6ac0, 0xc81d,	0x6aff, 0xc81d,		0x21, 0
+	.dw 0x6b40, 0xc81d,	0x6b7f, 0xc81d,		0x21, 0
+	.dw 0x6bc0, 0xc81d,	0x6bff, 0xc81d,		0x21, 0
+	.dw 0x6c40, 0xc81d,	0x6c7f, 0xc81d,		0x21, 0
+	.dw 0x6cc0, 0xc81d,	0x6cff, 0xc81d,		0x21, 0
+	.dw 0x6d40, 0xc81d,	0x6d7f, 0xc81d,		0x21, 0
+	.dw 0x6dc0, 0xc81d,	0x6dff, 0xc81d,		0x21, 0
+	.dw 0x6e40, 0xc81d,	0x6e7f, 0xc81d,		0x21, 0
+	.dw 0x6ec0, 0xc81d,	0x6eff, 0xc81d,		0x21, 0
+	.dw 0x6f40, 0xc81d,	0x6f7f, 0xc81d,		0x21, 0
+	.dw 0x6fc0, 0xc81d,	0x6fff, 0xc81d,		0x21, 0
+	.dw 0x7040, 0xc81d,	0x707f, 0xc81d,		0x21, 0
+	.dw 0x70c0, 0xc81d,	0x70ff, 0xc81d,		0x21, 0
+	.dw 0x7140, 0xc81d,	0x717f, 0xc81d,		0x21, 0
+	.dw 0x71c0, 0xc81d,	0x71ff, 0xc81d,		0x21, 0
+	.dw 0x7240, 0xc81d,	0x727f, 0xc81d,		0x21, 0
+	.dw 0x72c0, 0xc81d,	0x72ff, 0xc81d,		0x21, 0
+	.dw 0x7340, 0xc81d,	0x737f, 0xc81d,		0x21, 0
+	.dw 0x73c0, 0xc81d,	0x73ff, 0xc81d,		0x21, 0
+	.dw 0x7440, 0xc81d,	0x747f, 0xc81d,		0x21, 0
+	.dw 0x74c0, 0xc81d,	0x74ff, 0xc81d,		0x21, 0
+	.dw 0x7540, 0xc81d,	0x757f, 0xc81d,		0x21, 0
+	.dw 0x75c0, 0xc81d,	0x75ff, 0xc81d,		0x21, 0
+	.dw 0x7640, 0xc81d,	0x767f, 0xc81d,		0x21, 0
+	.dw 0x76c0, 0xc81d,	0x76ff, 0xc81d,		0x21, 0
+	.dw 0x7740, 0xc81d,	0x777f, 0xc81d,		0x21, 0
+	.dw 0x77c0, 0xc81d,	0x77ff, 0xc81d,		0x21, 0
+	.dw 0x7840, 0xc81d,	0x787f, 0xc81d,		0x21, 0
+	.dw 0x78c0, 0xc81d,	0x78ff, 0xc81d,		0x21, 0
+	.dw 0x7940, 0xc81d,	0x797f, 0xc81d,		0x21, 0
+	.dw 0x79c0, 0xc81d,	0x7fff, 0xc81d,		0x21, 0
+	.dw 0x8040, 0xc81d,	0x807f, 0xc81d,		0x21, 0
+	.dw 0x80c0, 0xc81d,	0x80ff, 0xc81d,		0x21, 0
+	.dw 0x8140, 0xc81d,	0x817f, 0xc81d,		0x21, 0
+	.dw 0x81c0, 0xc81d,	0x81ff, 0xc81d,		0x21, 0
+	.dw 0x8240, 0xc81d,	0x827f, 0xc81d,		0x21, 0
+	.dw 0x82c0, 0xc81d,	0x82ff, 0xc81d,		0x21, 0
+	.dw 0x8340, 0xc81d,	0x837f, 0xc81d,		0x21, 0
+	.dw 0x83c0, 0xc81d,	0x83ff, 0xc81d,		0x21, 0
+	.dw 0x8440, 0xc81d,	0x847f, 0xc81d,		0x21, 0
+	.dw 0x84c0, 0xc81d,	0x84ff, 0xc81d,		0x21, 0
+	.dw 0x8540, 0xc81d,	0x857f, 0xc81d,		0x21, 0
+	.dw 0x85c0, 0xc81d,	0x85ff, 0xc81d,		0x21, 0
+	.dw 0x8640, 0xc81d,	0x867f, 0xc81d,		0x21, 0
+	.dw 0x86c0, 0xc81d,	0x86ff, 0xc81d,		0x21, 0
+	.dw 0x8740, 0xc81d,	0x877f, 0xc81d,		0x21, 0
+	.dw 0x87c0, 0xc81d,	0x87ff, 0xc81d,		0x21, 0
+	.dw 0x8840, 0xc81d,	0x887f, 0xc81d,		0x21, 0
+	.dw 0x88c0, 0xc81d,	0x88ff, 0xc81d,		0x21, 0
+	.dw 0x8940, 0xc81d,	0x897f, 0xc81d,		0x21, 0
+	.dw 0x89c0, 0xc81d,	0x89ff, 0xc81d,		0x21, 0
+	.dw 0x8a40, 0xc81d,	0x8a7f, 0xc81d,		0x21, 0
+	.dw 0x8ac0, 0xc81d,	0x8aff, 0xc81d,		0x21, 0
+	.dw 0x8b40, 0xc81d,	0x8b7f, 0xc81d,		0x21, 0
+	.dw 0x8bc0, 0xc81d,	0x8bff, 0xc81d,		0x21, 0
+	.dw 0x8c40, 0xc81d,	0x8c7f, 0xc81d,		0x21, 0
+	.dw 0x8cc0, 0xc81d,	0x8cff, 0xc81d,		0x21, 0
+	.dw 0x8d40, 0xc81d,	0x8d7f, 0xc81d,		0x21, 0
+	.dw 0x8dc0, 0xc81d,	0x8dff, 0xc81d,		0x21, 0
+	.dw 0x8e40, 0xc81d,	0x8e7f, 0xc81d,		0x21, 0
+	.dw 0x8ec0, 0xc81d,	0x8eff, 0xc81d,		0x21, 0
+	.dw 0x8f40, 0xc81d,	0x8f7f, 0xc81d,		0x21, 0
+	.dw 0x8fc0, 0xc81d,	0x8fff, 0xc81d,		0x21, 0
+	.dw 0x9040, 0xc81d,	0x907f, 0xc81d,		0x21, 0
+	.dw 0x90c0, 0xc81d,	0x90ff, 0xc81d,		0x21, 0
+	.dw 0x9140, 0xc81d,	0x917f, 0xc81d,		0x21, 0
+	.dw 0x91c0, 0xc81d,	0x91ff, 0xc81d,		0x21, 0
+	.dw 0x9240, 0xc81d,	0x927f, 0xc81d,		0x21, 0
+	.dw 0x92c0, 0xc81d,	0x92ff, 0xc81d,		0x21, 0
+	.dw 0x9340, 0xc81d,	0x937f, 0xc81d,		0x21, 0
+	.dw 0x93c0, 0xc81d,	0x93ff, 0xc81d,		0x21, 0
+	.dw 0x9440, 0xc81d,	0x947f, 0xc81d,		0x21, 0
+	.dw 0x94c0, 0xc81d,	0x94ff, 0xc81d,		0x21, 0
+	.dw 0x9540, 0xc81d,	0x957f, 0xc81d,		0x21, 0
+	.dw 0x95c0, 0xc81d,	0x95ff, 0xc81d,		0x21, 0
+	.dw 0x9640, 0xc81d,	0x967f, 0xc81d,		0x21, 0
+	.dw 0x96c0, 0xc81d,	0x96ff, 0xc81d,		0x21, 0
+	.dw 0x9740, 0xc81d,	0x977f, 0xc81d,		0x21, 0
+	.dw 0x97c0, 0xc81d,	0x97ff, 0xc81d,		0x21, 0
+	.dw 0x9840, 0xc81d,	0x987f, 0xc81d,		0x21, 0
+	.dw 0x98c0, 0xc81d,	0x98ff, 0xc81d,		0x21, 0
+	.dw 0x9940, 0xc81d,	0x997f, 0xc81d,		0x21, 0
+	.dw 0x99c0, 0xc81d,	0x9fff, 0xc81d,		0x21, 0
+	.dw 0xa040, 0xc81d,	0xa07f, 0xc81d,		0x21, 0
+	.dw 0xa0c0, 0xc81d,	0xa0ff, 0xc81d,		0x21, 0
+	.dw 0xa140, 0xc81d,	0xa17f, 0xc81d,		0x21, 0
+	.dw 0xa1c0, 0xc81d,	0xa1ff, 0xc81d,		0x21, 0
+	.dw 0xa240, 0xc81d,	0xa27f, 0xc81d,		0x21, 0
+	.dw 0xa2c0, 0xc81d,	0xa2ff, 0xc81d,		0x21, 0
+	.dw 0xa340, 0xc81d,	0xa37f, 0xc81d,		0x21, 0
+	.dw 0xa3c0, 0xc81d,	0xa3ff, 0xc81d,		0x21, 0
+	.dw 0xa440, 0xc81d,	0xa47f, 0xc81d,		0x21, 0
+	.dw 0xa4c0, 0xc81d,	0xa4ff, 0xc81d,		0x21, 0
+	.dw 0xa540, 0xc81d,	0xa57f, 0xc81d,		0x21, 0
+	.dw 0xa5c0, 0xc81d,	0xa5ff, 0xc81d,		0x21, 0
+	.dw 0xa640, 0xc81d,	0xa67f, 0xc81d,		0x21, 0
+	.dw 0xa6c0, 0xc81d,	0xa6ff, 0xc81d,		0x21, 0
+	.dw 0xa740, 0xc81d,	0xa77f, 0xc81d,		0x21, 0
+	.dw 0xa7c0, 0xc81d,	0xa7ff, 0xc81d,		0x21, 0
+	.dw 0xa840, 0xc81d,	0xa87f, 0xc81d,		0x21, 0
+	.dw 0xa8c0, 0xc81d,	0xa8ff, 0xc81d,		0x21, 0
+	.dw 0xa940, 0xc81d,	0xa97f, 0xc81d,		0x21, 0
+	.dw 0xa9c0, 0xc81d,	0xa9ff, 0xc81d,		0x21, 0
+	.dw 0xaa40, 0xc81d,	0xaa7f, 0xc81d,		0x21, 0
+	.dw 0xaac0, 0xc81d,	0xaaff, 0xc81d,		0x21, 0
+	.dw 0xab40, 0xc81d,	0xab7f, 0xc81d,		0x21, 0
+	.dw 0xabc0, 0xc81d,	0xabff, 0xc81d,		0x21, 0
+	.dw 0xac40, 0xc81d,	0xac7f, 0xc81d,		0x21, 0
+	.dw 0xacc0, 0xc81d,	0xacff, 0xc81d,		0x21, 0
+	.dw 0xad40, 0xc81d,	0xad7f, 0xc81d,		0x21, 0
+	.dw 0xadc0, 0xc81d,	0xadff, 0xc81d,		0x21, 0
+	.dw 0xae40, 0xc81d,	0xae7f, 0xc81d,		0x21, 0
+	.dw 0xaec0, 0xc81d,	0xaeff, 0xc81d,		0x21, 0
+	.dw 0xaf40, 0xc81d,	0xaf7f, 0xc81d,		0x21, 0
+	.dw 0xafc0, 0xc81d,	0xafff, 0xc81d,		0x21, 0
+	.dw 0xb040, 0xc81d,	0xb07f, 0xc81d,		0x21, 0
+	.dw 0xb0c0, 0xc81d,	0xb0ff, 0xc81d,		0x21, 0
+	.dw 0xb140, 0xc81d,	0xb17f, 0xc81d,		0x21, 0
+	.dw 0xb1c0, 0xc81d,	0xb1ff, 0xc81d,		0x21, 0
+	.dw 0xb240, 0xc81d,	0xb27f, 0xc81d,		0x21, 0
+	.dw 0xb2c0, 0xc81d,	0xb2ff, 0xc81d,		0x21, 0
+	.dw 0xb340, 0xc81d,	0xb37f, 0xc81d,		0x21, 0
+	.dw 0xb3c0, 0xc81d,	0xb3ff, 0xc81d,		0x21, 0
+	.dw 0xb440, 0xc81d,	0xb47f, 0xc81d,		0x21, 0
+	.dw 0xb4c0, 0xc81d,	0xb4ff, 0xc81d,		0x21, 0
+	.dw 0xb540, 0xc81d,	0xb57f, 0xc81d,		0x21, 0
+	.dw 0xb5c0, 0xc81d,	0xb5ff, 0xc81d,		0x21, 0
+	.dw 0xb640, 0xc81d,	0xb67f, 0xc81d,		0x21, 0
+	.dw 0xb6c0, 0xc81d,	0xb6ff, 0xc81d,		0x21, 0
+	.dw 0xb740, 0xc81d,	0xb77f, 0xc81d,		0x21, 0
+	.dw 0xb7c0, 0xc81d,	0xb7ff, 0xc81d,		0x21, 0
+	.dw 0xb840, 0xc81d,	0xb87f, 0xc81d,		0x21, 0
+	.dw 0xb8c0, 0xc81d,	0xb8ff, 0xc81d,		0x21, 0
+	.dw 0xb940, 0xc81d,	0xb97f, 0xc81d,		0x21, 0
+	.dw 0xb9c0, 0xc81d,	0xbfff, 0xc81d,		0x21, 0
+	.dw 0xc040, 0xc81d,	0xc07f, 0xc81d,		0x21, 0
+	.dw 0xc0c0, 0xc81d,	0xc0ff, 0xc81d,		0x21, 0
+	.dw 0xc140, 0xc81d,	0xc17f, 0xc81d,		0x21, 0
+	.dw 0xc1c0, 0xc81d,	0xc1ff, 0xc81d,		0x21, 0
+	.dw 0xc240, 0xc81d,	0xc27f, 0xc81d,		0x21, 0
+	.dw 0xc2c0, 0xc81d,	0xc2ff, 0xc81d,		0x21, 0
+	.dw 0xc340, 0xc81d,	0xc37f, 0xc81d,		0x21, 0
+	.dw 0xc3c0, 0xc81d,	0xc3ff, 0xc81d,		0x21, 0
+	.dw 0xc440, 0xc81d,	0xc47f, 0xc81d,		0x21, 0
+	.dw 0xc4c0, 0xc81d,	0xc4ff, 0xc81d,		0x21, 0
+	.dw 0xc540, 0xc81d,	0xc57f, 0xc81d,		0x21, 0
+	.dw 0xc5c0, 0xc81d,	0xc5ff, 0xc81d,		0x21, 0
+	.dw 0xc640, 0xc81d,	0xc67f, 0xc81d,		0x21, 0
+	.dw 0xc6c0, 0xc81d,	0xc6ff, 0xc81d,		0x21, 0
+	.dw 0xc740, 0xc81d,	0xc77f, 0xc81d,		0x21, 0
+	.dw 0xc7c0, 0xc81d,	0xc7ff, 0xc81d,		0x21, 0
+	.dw 0xc840, 0xc81d,	0xc87f, 0xc81d,		0x21, 0
+	.dw 0xc8c0, 0xc81d,	0xc8ff, 0xc81d,		0x21, 0
+	.dw 0xc940, 0xc81d,	0xc97f, 0xc81d,		0x21, 0
+	.dw 0xc9c0, 0xc81d,	0xc9ff, 0xc81d,		0x21, 0
+	.dw 0xca40, 0xc81d,	0xca7f, 0xc81d,		0x21, 0
+	.dw 0xcac0, 0xc81d,	0xcaff, 0xc81d,		0x21, 0
+	.dw 0xcb40, 0xc81d,	0xcb7f, 0xc81d,		0x21, 0
+	.dw 0xcbc0, 0xc81d,	0xcbff, 0xc81d,		0x21, 0
+	.dw 0xcc40, 0xc81d,	0xcc7f, 0xc81d,		0x21, 0
+	.dw 0xccc0, 0xc81d,	0xccff, 0xc81d,		0x21, 0
+	.dw 0xcd40, 0xc81d,	0xcd7f, 0xc81d,		0x21, 0
+	.dw 0xcdc0, 0xc81d,	0xcdff, 0xc81d,		0x21, 0
+	.dw 0xce40, 0xc81d,	0xce7f, 0xc81d,		0x21, 0
+	.dw 0xcec0, 0xc81d,	0xceff, 0xc81d,		0x21, 0
+	.dw 0xcf40, 0xc81d,	0xcf7f, 0xc81d,		0x21, 0
+	.dw 0xcfc0, 0xc81d,	0xcfff, 0xc81d,		0x21, 0
+	.dw 0xd040, 0xc81d,	0xd07f, 0xc81d,		0x21, 0
+	.dw 0xd0c0, 0xc81d,	0xd0ff, 0xc81d,		0x21, 0
+	.dw 0xd140, 0xc81d,	0xd17f, 0xc81d,		0x21, 0
+	.dw 0xd1c0, 0xc81d,	0xd1ff, 0xc81d,		0x21, 0
+	.dw 0xd240, 0xc81d,	0xd27f, 0xc81d,		0x21, 0
+	.dw 0xd2c0, 0xc81d,	0xd2ff, 0xc81d,		0x21, 0
+	.dw 0xd340, 0xc81d,	0xd37f, 0xc81d,		0x21, 0
+	.dw 0xd3c0, 0xc81d,	0xd3ff, 0xc81d,		0x21, 0
+	.dw 0xd440, 0xc81d,	0xd47f, 0xc81d,		0x21, 0
+	.dw 0xd4c0, 0xc81d,	0xd4ff, 0xc81d,		0x21, 0
+	.dw 0xd540, 0xc81d,	0xd57f, 0xc81d,		0x21, 0
+	.dw 0xd5c0, 0xc81d,	0xd5ff, 0xc81d,		0x21, 0
+	.dw 0xd640, 0xc81d,	0xd67f, 0xc81d,		0x21, 0
+	.dw 0xd6c0, 0xc81d,	0xd6ff, 0xc81d,		0x21, 0
+	.dw 0xd740, 0xc81d,	0xd77f, 0xc81d,		0x21, 0
+	.dw 0xd7c0, 0xc81d,	0xd7ff, 0xc81d,		0x21, 0
+	.dw 0xd840, 0xc81d,	0xd87f, 0xc81d,		0x21, 0
+	.dw 0xd8c0, 0xc81d,	0xd8ff, 0xc81d,		0x21, 0
+	.dw 0xd940, 0xc81d,	0xd97f, 0xc81d,		0x21, 0
+	.dw 0xd9c0, 0xc81d,	0xdfff, 0xc81d,		0x21, 0
+	.dw 0xe040, 0xc81d,	0xe07f, 0xc81d,		0x21, 0
+	.dw 0xe0c0, 0xc81d,	0xe0ff, 0xc81d,		0x21, 0
+	.dw 0xe140, 0xc81d,	0xe17f, 0xc81d,		0x21, 0
+	.dw 0xe1c0, 0xc81d,	0xe1ff, 0xc81d,		0x21, 0
+	.dw 0xe240, 0xc81d,	0xe27f, 0xc81d,		0x21, 0
+	.dw 0xe2c0, 0xc81d,	0xe2ff, 0xc81d,		0x21, 0
+	.dw 0xe340, 0xc81d,	0xe37f, 0xc81d,		0x21, 0
+	.dw 0xe3c0, 0xc81d,	0xe3ff, 0xc81d,		0x21, 0
+	.dw 0xe440, 0xc81d,	0xe47f, 0xc81d,		0x21, 0
+	.dw 0xe4c0, 0xc81d,	0xe4ff, 0xc81d,		0x21, 0
+	.dw 0xe540, 0xc81d,	0xe57f, 0xc81d,		0x21, 0
+	.dw 0xe5c0, 0xc81d,	0xe5ff, 0xc81d,		0x21, 0
+	.dw 0xe640, 0xc81d,	0xe67f, 0xc81d,		0x21, 0
+	.dw 0xe6c0, 0xc81d,	0xe6ff, 0xc81d,		0x21, 0
+	.dw 0xe740, 0xc81d,	0xe77f, 0xc81d,		0x21, 0
+	.dw 0xe7c0, 0xc81d,	0xe7ff, 0xc81d,		0x21, 0
+	.dw 0xe840, 0xc81d,	0xe87f, 0xc81d,		0x21, 0
+	.dw 0xe8c0, 0xc81d,	0xe8ff, 0xc81d,		0x21, 0
+	.dw 0xe940, 0xc81d,	0xe97f, 0xc81d,		0x21, 0
+	.dw 0xe9c0, 0xc81d,	0xe9ff, 0xc81d,		0x21, 0
+	.dw 0xea40, 0xc81d,	0xea7f, 0xc81d,		0x21, 0
+	.dw 0xeac0, 0xc81d,	0xeaff, 0xc81d,		0x21, 0
+	.dw 0xeb40, 0xc81d,	0xeb7f, 0xc81d,		0x21, 0
+	.dw 0xebc0, 0xc81d,	0xebff, 0xc81d,		0x21, 0
+	.dw 0xec40, 0xc81d,	0xec7f, 0xc81d,		0x21, 0
+	.dw 0xecc0, 0xc81d,	0xecff, 0xc81d,		0x21, 0
+	.dw 0xed40, 0xc81d,	0xed7f, 0xc81d,		0x21, 0
+	.dw 0xedc0, 0xc81d,	0xedff, 0xc81d,		0x21, 0
+	.dw 0xee40, 0xc81d,	0xee7f, 0xc81d,		0x21, 0
+	.dw 0xeec0, 0xc81d,	0xeeff, 0xc81d,		0x21, 0
+	.dw 0xef40, 0xc81d,	0xef7f, 0xc81d,		0x21, 0
+	.dw 0xefc0, 0xc81d,	0xefff, 0xc81d,		0x21, 0
+	.dw 0xf040, 0xc81d,	0xf07f, 0xc81d,		0x21, 0
+	.dw 0xf0c0, 0xc81d,	0xf0ff, 0xc81d,		0x21, 0
+	.dw 0xf140, 0xc81d,	0xf17f, 0xc81d,		0x21, 0
+	.dw 0xf1c0, 0xc81d,	0xf1ff, 0xc81d,		0x21, 0
+	.dw 0xf240, 0xc81d,	0xf27f, 0xc81d,		0x21, 0
+	.dw 0xf2c0, 0xc81d,	0xf2ff, 0xc81d,		0x21, 0
+	.dw 0xf340, 0xc81d,	0xf37f, 0xc81d,		0x21, 0
+	.dw 0xf3c0, 0xc81d,	0xf3ff, 0xc81d,		0x21, 0
+	.dw 0xf440, 0xc81d,	0xf47f, 0xc81d,		0x21, 0
+	.dw 0xf4c0, 0xc81d,	0xf4ff, 0xc81d,		0x21, 0
+	.dw 0xf540, 0xc81d,	0xf57f, 0xc81d,		0x21, 0
+	.dw 0xf5c0, 0xc81d,	0xf5ff, 0xc81d,		0x21, 0
+	.dw 0xf640, 0xc81d,	0xf67f, 0xc81d,		0x21, 0
+	.dw 0xf6c0, 0xc81d,	0xf6ff, 0xc81d,		0x21, 0
+	.dw 0xf740, 0xc81d,	0xf77f, 0xc81d,		0x21, 0
+	.dw 0xf7c0, 0xc81d,	0xf7ff, 0xc81d,		0x21, 0
+	.dw 0xf840, 0xc81d,	0xf87f, 0xc81d,		0x21, 0
+	.dw 0xf8c0, 0xc81d,	0xf8ff, 0xc81d,		0x21, 0
+	.dw 0xf940, 0xc81d,	0xf97f, 0xc81d,		0x21, 0
+	.dw 0xf9c0, 0xc81d,	0xffff, 0xc81d,		0x21, 0
+	.dw 0x0040, 0xc81e,	0x007f, 0xc81e,		0x21, 0
+	.dw 0x00c0, 0xc81e,	0x00ff, 0xc81e,		0x21, 0
+	.dw 0x0140, 0xc81e,	0x017f, 0xc81e,		0x21, 0
+	.dw 0x01c0, 0xc81e,	0x01ff, 0xc81e,		0x21, 0
+	.dw 0x0240, 0xc81e,	0x027f, 0xc81e,		0x21, 0
+	.dw 0x02c0, 0xc81e,	0x02ff, 0xc81e,		0x21, 0
+	.dw 0x0340, 0xc81e,	0x037f, 0xc81e,		0x21, 0
+	.dw 0x03c0, 0xc81e,	0x03ff, 0xc81e,		0x21, 0
+	.dw 0x0440, 0xc81e,	0x047f, 0xc81e,		0x21, 0
+	.dw 0x04c0, 0xc81e,	0x04ff, 0xc81e,		0x21, 0
+	.dw 0x0540, 0xc81e,	0x057f, 0xc81e,		0x21, 0
+	.dw 0x05c0, 0xc81e,	0x05ff, 0xc81e,		0x21, 0
+	.dw 0x0640, 0xc81e,	0x067f, 0xc81e,		0x21, 0
+	.dw 0x06c0, 0xc81e,	0x06ff, 0xc81e,		0x21, 0
+	.dw 0x0740, 0xc81e,	0x077f, 0xc81e,		0x21, 0
+	.dw 0x07c0, 0xc81e,	0x07ff, 0xc81e,		0x21, 0
+	.dw 0x0840, 0xc81e,	0x087f, 0xc81e,		0x21, 0
+	.dw 0x08c0, 0xc81e,	0x08ff, 0xc81e,		0x21, 0
+	.dw 0x0940, 0xc81e,	0x097f, 0xc81e,		0x21, 0
+	.dw 0x09c0, 0xc81e,	0x09ff, 0xc81e,		0x21, 0
+	.dw 0x0a40, 0xc81e,	0x0a7f, 0xc81e,		0x21, 0
+	.dw 0x0ac0, 0xc81e,	0x0aff, 0xc81e,		0x21, 0
+	.dw 0x0b40, 0xc81e,	0x0b7f, 0xc81e,		0x21, 0
+	.dw 0x0bc0, 0xc81e,	0x0bff, 0xc81e,		0x21, 0
+	.dw 0x0c40, 0xc81e,	0x0c7f, 0xc81e,		0x21, 0
+	.dw 0x0cc0, 0xc81e,	0x0cff, 0xc81e,		0x21, 0
+	.dw 0x0d40, 0xc81e,	0x0d7f, 0xc81e,		0x21, 0
+	.dw 0x0dc0, 0xc81e,	0x0dff, 0xc81e,		0x21, 0
+	.dw 0x0e40, 0xc81e,	0x0e7f, 0xc81e,		0x21, 0
+	.dw 0x0ec0, 0xc81e,	0x0eff, 0xc81e,		0x21, 0
+	.dw 0x0f40, 0xc81e,	0x0f7f, 0xc81e,		0x21, 0
+	.dw 0x0fc0, 0xc81e,	0x0fff, 0xc81e,		0x21, 0
+	.dw 0x1040, 0xc81e,	0x107f, 0xc81e,		0x21, 0
+	.dw 0x10c0, 0xc81e,	0x10ff, 0xc81e,		0x21, 0
+	.dw 0x1140, 0xc81e,	0x117f, 0xc81e,		0x21, 0
+	.dw 0x11c0, 0xc81e,	0x11ff, 0xc81e,		0x21, 0
+	.dw 0x1240, 0xc81e,	0x127f, 0xc81e,		0x21, 0
+	.dw 0x12c0, 0xc81e,	0x12ff, 0xc81e,		0x21, 0
+	.dw 0x1340, 0xc81e,	0x137f, 0xc81e,		0x21, 0
+	.dw 0x13c0, 0xc81e,	0x13ff, 0xc81e,		0x21, 0
+	.dw 0x1440, 0xc81e,	0x147f, 0xc81e,		0x21, 0
+	.dw 0x14c0, 0xc81e,	0x14ff, 0xc81e,		0x21, 0
+	.dw 0x1540, 0xc81e,	0x157f, 0xc81e,		0x21, 0
+	.dw 0x15c0, 0xc81e,	0x15ff, 0xc81e,		0x21, 0
+	.dw 0x1640, 0xc81e,	0x167f, 0xc81e,		0x21, 0
+	.dw 0x16c0, 0xc81e,	0x16ff, 0xc81e,		0x21, 0
+	.dw 0x1740, 0xc81e,	0x177f, 0xc81e,		0x21, 0
+	.dw 0x17c0, 0xc81e,	0x17ff, 0xc81e,		0x21, 0
+	.dw 0x1840, 0xc81e,	0x187f, 0xc81e,		0x21, 0
+	.dw 0x18c0, 0xc81e,	0x18ff, 0xc81e,		0x21, 0
+	.dw 0x1940, 0xc81e,	0x197f, 0xc81e,		0x21, 0
+	.dw 0x19c0, 0xc81e,	0x1fff, 0xc81e,		0x21, 0
+	.dw 0x2040, 0xc81e,	0x207f, 0xc81e,		0x21, 0
+	.dw 0x20c0, 0xc81e,	0x20ff, 0xc81e,		0x21, 0
+	.dw 0x2140, 0xc81e,	0x217f, 0xc81e,		0x21, 0
+	.dw 0x21c0, 0xc81e,	0x21ff, 0xc81e,		0x21, 0
+	.dw 0x2240, 0xc81e,	0x227f, 0xc81e,		0x21, 0
+	.dw 0x22c0, 0xc81e,	0x22ff, 0xc81e,		0x21, 0
+	.dw 0x2340, 0xc81e,	0x237f, 0xc81e,		0x21, 0
+	.dw 0x23c0, 0xc81e,	0x23ff, 0xc81e,		0x21, 0
+	.dw 0x2440, 0xc81e,	0x247f, 0xc81e,		0x21, 0
+	.dw 0x24c0, 0xc81e,	0x24ff, 0xc81e,		0x21, 0
+	.dw 0x2540, 0xc81e,	0x257f, 0xc81e,		0x21, 0
+	.dw 0x25c0, 0xc81e,	0x25ff, 0xc81e,		0x21, 0
+	.dw 0x2640, 0xc81e,	0x267f, 0xc81e,		0x21, 0
+	.dw 0x26c0, 0xc81e,	0x26ff, 0xc81e,		0x21, 0
+	.dw 0x2740, 0xc81e,	0x277f, 0xc81e,		0x21, 0
+	.dw 0x27c0, 0xc81e,	0x27ff, 0xc81e,		0x21, 0
+	.dw 0x2840, 0xc81e,	0x287f, 0xc81e,		0x21, 0
+	.dw 0x28c0, 0xc81e,	0x28ff, 0xc81e,		0x21, 0
+	.dw 0x2940, 0xc81e,	0x297f, 0xc81e,		0x21, 0
+	.dw 0x29c0, 0xc81e,	0x29ff, 0xc81e,		0x21, 0
+	.dw 0x2a40, 0xc81e,	0x2a7f, 0xc81e,		0x21, 0
+	.dw 0x2ac0, 0xc81e,	0x2aff, 0xc81e,		0x21, 0
+	.dw 0x2b40, 0xc81e,	0x2b7f, 0xc81e,		0x21, 0
+	.dw 0x2bc0, 0xc81e,	0x2bff, 0xc81e,		0x21, 0
+	.dw 0x2c40, 0xc81e,	0x2c7f, 0xc81e,		0x21, 0
+	.dw 0x2cc0, 0xc81e,	0x2cff, 0xc81e,		0x21, 0
+	.dw 0x2d40, 0xc81e,	0x2d7f, 0xc81e,		0x21, 0
+	.dw 0x2dc0, 0xc81e,	0x2dff, 0xc81e,		0x21, 0
+	.dw 0x2e40, 0xc81e,	0x2e7f, 0xc81e,		0x21, 0
+	.dw 0x2ec0, 0xc81e,	0x2eff, 0xc81e,		0x21, 0
+	.dw 0x2f40, 0xc81e,	0x2f7f, 0xc81e,		0x21, 0
+	.dw 0x2fc0, 0xc81e,	0x2fff, 0xc81e,		0x21, 0
+	.dw 0x3040, 0xc81e,	0x307f, 0xc81e,		0x21, 0
+	.dw 0x30c0, 0xc81e,	0x30ff, 0xc81e,		0x21, 0
+	.dw 0x3140, 0xc81e,	0x317f, 0xc81e,		0x21, 0
+	.dw 0x31c0, 0xc81e,	0x31ff, 0xc81e,		0x21, 0
+	.dw 0x3240, 0xc81e,	0x327f, 0xc81e,		0x21, 0
+	.dw 0x32c0, 0xc81e,	0x32ff, 0xc81e,		0x21, 0
+	.dw 0x3340, 0xc81e,	0x337f, 0xc81e,		0x21, 0
+	.dw 0x33c0, 0xc81e,	0x33ff, 0xc81e,		0x21, 0
+	.dw 0x3440, 0xc81e,	0x347f, 0xc81e,		0x21, 0
+	.dw 0x34c0, 0xc81e,	0x34ff, 0xc81e,		0x21, 0
+	.dw 0x3540, 0xc81e,	0x357f, 0xc81e,		0x21, 0
+	.dw 0x35c0, 0xc81e,	0x35ff, 0xc81e,		0x21, 0
+	.dw 0x3640, 0xc81e,	0x367f, 0xc81e,		0x21, 0
+	.dw 0x36c0, 0xc81e,	0x36ff, 0xc81e,		0x21, 0
+	.dw 0x3740, 0xc81e,	0x377f, 0xc81e,		0x21, 0
+	.dw 0x37c0, 0xc81e,	0x37ff, 0xc81e,		0x21, 0
+	.dw 0x3840, 0xc81e,	0x387f, 0xc81e,		0x21, 0
+	.dw 0x38c0, 0xc81e,	0x38ff, 0xc81e,		0x21, 0
+	.dw 0x3940, 0xc81e,	0x397f, 0xc81e,		0x21, 0
+	.dw 0x39c0, 0xc81e,	0x3fff, 0xc81e,		0x21, 0
+	.dw 0x4040, 0xc81e,	0x407f, 0xc81e,		0x21, 0
+	.dw 0x40c0, 0xc81e,	0x40ff, 0xc81e,		0x21, 0
+	.dw 0x4140, 0xc81e,	0x417f, 0xc81e,		0x21, 0
+	.dw 0x41c0, 0xc81e,	0x41ff, 0xc81e,		0x21, 0
+	.dw 0x4240, 0xc81e,	0x427f, 0xc81e,		0x21, 0
+	.dw 0x42c0, 0xc81e,	0x42ff, 0xc81e,		0x21, 0
+	.dw 0x4340, 0xc81e,	0x437f, 0xc81e,		0x21, 0
+	.dw 0x43c0, 0xc81e,	0x43ff, 0xc81e,		0x21, 0
+	.dw 0x4440, 0xc81e,	0x447f, 0xc81e,		0x21, 0
+	.dw 0x44c0, 0xc81e,	0x44ff, 0xc81e,		0x21, 0
+	.dw 0x4540, 0xc81e,	0x457f, 0xc81e,		0x21, 0
+	.dw 0x45c0, 0xc81e,	0x45ff, 0xc81e,		0x21, 0
+	.dw 0x4640, 0xc81e,	0x467f, 0xc81e,		0x21, 0
+	.dw 0x46c0, 0xc81e,	0x46ff, 0xc81e,		0x21, 0
+	.dw 0x4740, 0xc81e,	0x477f, 0xc81e,		0x21, 0
+	.dw 0x47c0, 0xc81e,	0x47ff, 0xc81e,		0x21, 0
+	.dw 0x4840, 0xc81e,	0x487f, 0xc81e,		0x21, 0
+	.dw 0x48c0, 0xc81e,	0x48ff, 0xc81e,		0x21, 0
+	.dw 0x4940, 0xc81e,	0x497f, 0xc81e,		0x21, 0
+	.dw 0x49c0, 0xc81e,	0x49ff, 0xc81e,		0x21, 0
+	.dw 0x4a40, 0xc81e,	0x4a7f, 0xc81e,		0x21, 0
+	.dw 0x4ac0, 0xc81e,	0x4aff, 0xc81e,		0x21, 0
+	.dw 0x4b40, 0xc81e,	0x4b7f, 0xc81e,		0x21, 0
+	.dw 0x4bc0, 0xc81e,	0x4bff, 0xc81e,		0x21, 0
+	.dw 0x4c40, 0xc81e,	0x4c7f, 0xc81e,		0x21, 0
+	.dw 0x4cc0, 0xc81e,	0x4cff, 0xc81e,		0x21, 0
+	.dw 0x4d40, 0xc81e,	0x4d7f, 0xc81e,		0x21, 0
+	.dw 0x4dc0, 0xc81e,	0x4dff, 0xc81e,		0x21, 0
+	.dw 0x4e40, 0xc81e,	0x4e7f, 0xc81e,		0x21, 0
+	.dw 0x4ec0, 0xc81e,	0x4eff, 0xc81e,		0x21, 0
+	.dw 0x4f40, 0xc81e,	0x4f7f, 0xc81e,		0x21, 0
+	.dw 0x4fc0, 0xc81e,	0x4fff, 0xc81e,		0x21, 0
+	.dw 0x5040, 0xc81e,	0x507f, 0xc81e,		0x21, 0
+	.dw 0x50c0, 0xc81e,	0x50ff, 0xc81e,		0x21, 0
+	.dw 0x5140, 0xc81e,	0x517f, 0xc81e,		0x21, 0
+	.dw 0x51c0, 0xc81e,	0x51ff, 0xc81e,		0x21, 0
+	.dw 0x5240, 0xc81e,	0x527f, 0xc81e,		0x21, 0
+	.dw 0x52c0, 0xc81e,	0x52ff, 0xc81e,		0x21, 0
+	.dw 0x5340, 0xc81e,	0x537f, 0xc81e,		0x21, 0
+	.dw 0x53c0, 0xc81e,	0x53ff, 0xc81e,		0x21, 0
+	.dw 0x5440, 0xc81e,	0x547f, 0xc81e,		0x21, 0
+	.dw 0x54c0, 0xc81e,	0x54ff, 0xc81e,		0x21, 0
+	.dw 0x5540, 0xc81e,	0x557f, 0xc81e,		0x21, 0
+	.dw 0x55c0, 0xc81e,	0x55ff, 0xc81e,		0x21, 0
+	.dw 0x5640, 0xc81e,	0x567f, 0xc81e,		0x21, 0
+	.dw 0x56c0, 0xc81e,	0x56ff, 0xc81e,		0x21, 0
+	.dw 0x5740, 0xc81e,	0x577f, 0xc81e,		0x21, 0
+	.dw 0x57c0, 0xc81e,	0x57ff, 0xc81e,		0x21, 0
+	.dw 0x5840, 0xc81e,	0x587f, 0xc81e,		0x21, 0
+	.dw 0x58c0, 0xc81e,	0x58ff, 0xc81e,		0x21, 0
+	.dw 0x5940, 0xc81e,	0x597f, 0xc81e,		0x21, 0
+	.dw 0x59c0, 0xc81e,	0x5fff, 0xc81e,		0x21, 0
+	.dw 0x6040, 0xc81e,	0x607f, 0xc81e,		0x21, 0
+	.dw 0x60c0, 0xc81e,	0x60ff, 0xc81e,		0x21, 0
+	.dw 0x6140, 0xc81e,	0x617f, 0xc81e,		0x21, 0
+	.dw 0x61c0, 0xc81e,	0x61ff, 0xc81e,		0x21, 0
+	.dw 0x6240, 0xc81e,	0x627f, 0xc81e,		0x21, 0
+	.dw 0x62c0, 0xc81e,	0x62ff, 0xc81e,		0x21, 0
+	.dw 0x6340, 0xc81e,	0x637f, 0xc81e,		0x21, 0
+	.dw 0x63c0, 0xc81e,	0x63ff, 0xc81e,		0x21, 0
+	.dw 0x6440, 0xc81e,	0x647f, 0xc81e,		0x21, 0
+	.dw 0x64c0, 0xc81e,	0x64ff, 0xc81e,		0x21, 0
+	.dw 0x6540, 0xc81e,	0x657f, 0xc81e,		0x21, 0
+	.dw 0x65c0, 0xc81e,	0x65ff, 0xc81e,		0x21, 0
+	.dw 0x6640, 0xc81e,	0x667f, 0xc81e,		0x21, 0
+	.dw 0x66c0, 0xc81e,	0x66ff, 0xc81e,		0x21, 0
+	.dw 0x6740, 0xc81e,	0x677f, 0xc81e,		0x21, 0
+	.dw 0x67c0, 0xc81e,	0x67ff, 0xc81e,		0x21, 0
+	.dw 0x6840, 0xc81e,	0x687f, 0xc81e,		0x21, 0
+	.dw 0x68c0, 0xc81e,	0x68ff, 0xc81e,		0x21, 0
+	.dw 0x6940, 0xc81e,	0x697f, 0xc81e,		0x21, 0
+	.dw 0x69c0, 0xc81e,	0x69ff, 0xc81e,		0x21, 0
+	.dw 0x6a40, 0xc81e,	0x6a7f, 0xc81e,		0x21, 0
+	.dw 0x6ac0, 0xc81e,	0x6aff, 0xc81e,		0x21, 0
+	.dw 0x6b40, 0xc81e,	0x6b7f, 0xc81e,		0x21, 0
+	.dw 0x6bc0, 0xc81e,	0x6bff, 0xc81e,		0x21, 0
+	.dw 0x6c40, 0xc81e,	0x6c7f, 0xc81e,		0x21, 0
+	.dw 0x6cc0, 0xc81e,	0x6cff, 0xc81e,		0x21, 0
+	.dw 0x6d40, 0xc81e,	0x6d7f, 0xc81e,		0x21, 0
+	.dw 0x6dc0, 0xc81e,	0x6dff, 0xc81e,		0x21, 0
+	.dw 0x6e40, 0xc81e,	0x6e7f, 0xc81e,		0x21, 0
+	.dw 0x6ec0, 0xc81e,	0x6eff, 0xc81e,		0x21, 0
+	.dw 0x6f40, 0xc81e,	0x6f7f, 0xc81e,		0x21, 0
+	.dw 0x6fc0, 0xc81e,	0x6fff, 0xc81e,		0x21, 0
+	.dw 0x7040, 0xc81e,	0x707f, 0xc81e,		0x21, 0
+	.dw 0x70c0, 0xc81e,	0x70ff, 0xc81e,		0x21, 0
+	.dw 0x7140, 0xc81e,	0x717f, 0xc81e,		0x21, 0
+	.dw 0x71c0, 0xc81e,	0x71ff, 0xc81e,		0x21, 0
+	.dw 0x7240, 0xc81e,	0x727f, 0xc81e,		0x21, 0
+	.dw 0x72c0, 0xc81e,	0x72ff, 0xc81e,		0x21, 0
+	.dw 0x7340, 0xc81e,	0x737f, 0xc81e,		0x21, 0
+	.dw 0x73c0, 0xc81e,	0x73ff, 0xc81e,		0x21, 0
+	.dw 0x7440, 0xc81e,	0x747f, 0xc81e,		0x21, 0
+	.dw 0x74c0, 0xc81e,	0x74ff, 0xc81e,		0x21, 0
+	.dw 0x7540, 0xc81e,	0x757f, 0xc81e,		0x21, 0
+	.dw 0x75c0, 0xc81e,	0x75ff, 0xc81e,		0x21, 0
+	.dw 0x7640, 0xc81e,	0x767f, 0xc81e,		0x21, 0
+	.dw 0x76c0, 0xc81e,	0x76ff, 0xc81e,		0x21, 0
+	.dw 0x7740, 0xc81e,	0x777f, 0xc81e,		0x21, 0
+	.dw 0x77c0, 0xc81e,	0x77ff, 0xc81e,		0x21, 0
+	.dw 0x7840, 0xc81e,	0x787f, 0xc81e,		0x21, 0
+	.dw 0x78c0, 0xc81e,	0x78ff, 0xc81e,		0x21, 0
+	.dw 0x7940, 0xc81e,	0x797f, 0xc81e,		0x21, 0
+	.dw 0x79c0, 0xc81e,	0x7fff, 0xc81e,		0x21, 0
+	.dw 0x8040, 0xc81e,	0x807f, 0xc81e,		0x21, 0
+	.dw 0x80c0, 0xc81e,	0x80ff, 0xc81e,		0x21, 0
+	.dw 0x8140, 0xc81e,	0x817f, 0xc81e,		0x21, 0
+	.dw 0x81c0, 0xc81e,	0x81ff, 0xc81e,		0x21, 0
+	.dw 0x8240, 0xc81e,	0x827f, 0xc81e,		0x21, 0
+	.dw 0x82c0, 0xc81e,	0x82ff, 0xc81e,		0x21, 0
+	.dw 0x8340, 0xc81e,	0x837f, 0xc81e,		0x21, 0
+	.dw 0x83c0, 0xc81e,	0x83ff, 0xc81e,		0x21, 0
+	.dw 0x8440, 0xc81e,	0x847f, 0xc81e,		0x21, 0
+	.dw 0x84c0, 0xc81e,	0x84ff, 0xc81e,		0x21, 0
+	.dw 0x8540, 0xc81e,	0x857f, 0xc81e,		0x21, 0
+	.dw 0x85c0, 0xc81e,	0x85ff, 0xc81e,		0x21, 0
+	.dw 0x8640, 0xc81e,	0x867f, 0xc81e,		0x21, 0
+	.dw 0x86c0, 0xc81e,	0x86ff, 0xc81e,		0x21, 0
+	.dw 0x8740, 0xc81e,	0x877f, 0xc81e,		0x21, 0
+	.dw 0x87c0, 0xc81e,	0x87ff, 0xc81e,		0x21, 0
+	.dw 0x8840, 0xc81e,	0x887f, 0xc81e,		0x21, 0
+	.dw 0x88c0, 0xc81e,	0x88ff, 0xc81e,		0x21, 0
+	.dw 0x8940, 0xc81e,	0x897f, 0xc81e,		0x21, 0
+	.dw 0x89c0, 0xc81e,	0x89ff, 0xc81e,		0x21, 0
+	.dw 0x8a40, 0xc81e,	0x8a7f, 0xc81e,		0x21, 0
+	.dw 0x8ac0, 0xc81e,	0x8aff, 0xc81e,		0x21, 0
+	.dw 0x8b40, 0xc81e,	0x8b7f, 0xc81e,		0x21, 0
+	.dw 0x8bc0, 0xc81e,	0x8bff, 0xc81e,		0x21, 0
+	.dw 0x8c40, 0xc81e,	0x8c7f, 0xc81e,		0x21, 0
+	.dw 0x8cc0, 0xc81e,	0x8cff, 0xc81e,		0x21, 0
+	.dw 0x8d40, 0xc81e,	0x8d7f, 0xc81e,		0x21, 0
+	.dw 0x8dc0, 0xc81e,	0x8dff, 0xc81e,		0x21, 0
+	.dw 0x8e40, 0xc81e,	0x8e7f, 0xc81e,		0x21, 0
+	.dw 0x8ec0, 0xc81e,	0x8eff, 0xc81e,		0x21, 0
+	.dw 0x8f40, 0xc81e,	0x8f7f, 0xc81e,		0x21, 0
+	.dw 0x8fc0, 0xc81e,	0x8fff, 0xc81e,		0x21, 0
+	.dw 0x9040, 0xc81e,	0x907f, 0xc81e,		0x21, 0
+	.dw 0x90c0, 0xc81e,	0x90ff, 0xc81e,		0x21, 0
+	.dw 0x9140, 0xc81e,	0x917f, 0xc81e,		0x21, 0
+	.dw 0x91c0, 0xc81e,	0x91ff, 0xc81e,		0x21, 0
+	.dw 0x9240, 0xc81e,	0x927f, 0xc81e,		0x21, 0
+	.dw 0x92c0, 0xc81e,	0x92ff, 0xc81e,		0x21, 0
+	.dw 0x9340, 0xc81e,	0x937f, 0xc81e,		0x21, 0
+	.dw 0x93c0, 0xc81e,	0x93ff, 0xc81e,		0x21, 0
+	.dw 0x9440, 0xc81e,	0x947f, 0xc81e,		0x21, 0
+	.dw 0x94c0, 0xc81e,	0x94ff, 0xc81e,		0x21, 0
+	.dw 0x9540, 0xc81e,	0x957f, 0xc81e,		0x21, 0
+	.dw 0x95c0, 0xc81e,	0x95ff, 0xc81e,		0x21, 0
+	.dw 0x9640, 0xc81e,	0x967f, 0xc81e,		0x21, 0
+	.dw 0x96c0, 0xc81e,	0x96ff, 0xc81e,		0x21, 0
+	.dw 0x9740, 0xc81e,	0x977f, 0xc81e,		0x21, 0
+	.dw 0x97c0, 0xc81e,	0x97ff, 0xc81e,		0x21, 0
+	.dw 0x9840, 0xc81e,	0x987f, 0xc81e,		0x21, 0
+	.dw 0x98c0, 0xc81e,	0x98ff, 0xc81e,		0x21, 0
+	.dw 0x9940, 0xc81e,	0x997f, 0xc81e,		0x21, 0
+	.dw 0x99c0, 0xc81e,	0x9fff, 0xc81e,		0x21, 0
+	.dw 0xa040, 0xc81e,	0xa07f, 0xc81e,		0x21, 0
+	.dw 0xa0c0, 0xc81e,	0xa0ff, 0xc81e,		0x21, 0
+	.dw 0xa140, 0xc81e,	0xa17f, 0xc81e,		0x21, 0
+	.dw 0xa1c0, 0xc81e,	0xa1ff, 0xc81e,		0x21, 0
+	.dw 0xa240, 0xc81e,	0xa27f, 0xc81e,		0x21, 0
+	.dw 0xa2c0, 0xc81e,	0xa2ff, 0xc81e,		0x21, 0
+	.dw 0xa340, 0xc81e,	0xa37f, 0xc81e,		0x21, 0
+	.dw 0xa3c0, 0xc81e,	0xa3ff, 0xc81e,		0x21, 0
+	.dw 0xa440, 0xc81e,	0xa47f, 0xc81e,		0x21, 0
+	.dw 0xa4c0, 0xc81e,	0xa4ff, 0xc81e,		0x21, 0
+	.dw 0xa540, 0xc81e,	0xa57f, 0xc81e,		0x21, 0
+	.dw 0xa5c0, 0xc81e,	0xa5ff, 0xc81e,		0x21, 0
+	.dw 0xa640, 0xc81e,	0xa67f, 0xc81e,		0x21, 0
+	.dw 0xa6c0, 0xc81e,	0xa6ff, 0xc81e,		0x21, 0
+	.dw 0xa740, 0xc81e,	0xa77f, 0xc81e,		0x21, 0
+	.dw 0xa7c0, 0xc81e,	0xa7ff, 0xc81e,		0x21, 0
+	.dw 0xa840, 0xc81e,	0xa87f, 0xc81e,		0x21, 0
+	.dw 0xa8c0, 0xc81e,	0xa8ff, 0xc81e,		0x21, 0
+	.dw 0xa940, 0xc81e,	0xa97f, 0xc81e,		0x21, 0
+	.dw 0xa9c0, 0xc81e,	0xa9ff, 0xc81e,		0x21, 0
+	.dw 0xaa40, 0xc81e,	0xaa7f, 0xc81e,		0x21, 0
+	.dw 0xaac0, 0xc81e,	0xaaff, 0xc81e,		0x21, 0
+	.dw 0xab40, 0xc81e,	0xab7f, 0xc81e,		0x21, 0
+	.dw 0xabc0, 0xc81e,	0xabff, 0xc81e,		0x21, 0
+	.dw 0xac40, 0xc81e,	0xac7f, 0xc81e,		0x21, 0
+	.dw 0xacc0, 0xc81e,	0xacff, 0xc81e,		0x21, 0
+	.dw 0xad40, 0xc81e,	0xad7f, 0xc81e,		0x21, 0
+	.dw 0xadc0, 0xc81e,	0xadff, 0xc81e,		0x21, 0
+	.dw 0xae40, 0xc81e,	0xae7f, 0xc81e,		0x21, 0
+	.dw 0xaec0, 0xc81e,	0xaeff, 0xc81e,		0x21, 0
+	.dw 0xaf40, 0xc81e,	0xaf7f, 0xc81e,		0x21, 0
+	.dw 0xafc0, 0xc81e,	0xafff, 0xc81e,		0x21, 0
+	.dw 0xb040, 0xc81e,	0xb07f, 0xc81e,		0x21, 0
+	.dw 0xb0c0, 0xc81e,	0xb0ff, 0xc81e,		0x21, 0
+	.dw 0xb140, 0xc81e,	0xb17f, 0xc81e,		0x21, 0
+	.dw 0xb1c0, 0xc81e,	0xb1ff, 0xc81e,		0x21, 0
+	.dw 0xb240, 0xc81e,	0xb27f, 0xc81e,		0x21, 0
+	.dw 0xb2c0, 0xc81e,	0xb2ff, 0xc81e,		0x21, 0
+	.dw 0xb340, 0xc81e,	0xb37f, 0xc81e,		0x21, 0
+	.dw 0xb3c0, 0xc81e,	0xb3ff, 0xc81e,		0x21, 0
+	.dw 0xb440, 0xc81e,	0xb47f, 0xc81e,		0x21, 0
+	.dw 0xb4c0, 0xc81e,	0xb4ff, 0xc81e,		0x21, 0
+	.dw 0xb540, 0xc81e,	0xb57f, 0xc81e,		0x21, 0
+	.dw 0xb5c0, 0xc81e,	0xb5ff, 0xc81e,		0x21, 0
+	.dw 0xb640, 0xc81e,	0xb67f, 0xc81e,		0x21, 0
+	.dw 0xb6c0, 0xc81e,	0xb6ff, 0xc81e,		0x21, 0
+	.dw 0xb740, 0xc81e,	0xb77f, 0xc81e,		0x21, 0
+	.dw 0xb7c0, 0xc81e,	0xb7ff, 0xc81e,		0x21, 0
+	.dw 0xb840, 0xc81e,	0xb87f, 0xc81e,		0x21, 0
+	.dw 0xb8c0, 0xc81e,	0xb8ff, 0xc81e,		0x21, 0
+	.dw 0xb940, 0xc81e,	0xb97f, 0xc81e,		0x21, 0
+	.dw 0xb9c0, 0xc81e,	0xbfff, 0xc81e,		0x21, 0
+	.dw 0xc040, 0xc81e,	0xc07f, 0xc81e,		0x21, 0
+	.dw 0xc0c0, 0xc81e,	0xc0ff, 0xc81e,		0x21, 0
+	.dw 0xc140, 0xc81e,	0xc17f, 0xc81e,		0x21, 0
+	.dw 0xc1c0, 0xc81e,	0xc1ff, 0xc81e,		0x21, 0
+	.dw 0xc240, 0xc81e,	0xc27f, 0xc81e,		0x21, 0
+	.dw 0xc2c0, 0xc81e,	0xc2ff, 0xc81e,		0x21, 0
+	.dw 0xc340, 0xc81e,	0xc37f, 0xc81e,		0x21, 0
+	.dw 0xc3c0, 0xc81e,	0xc3ff, 0xc81e,		0x21, 0
+	.dw 0xc440, 0xc81e,	0xc47f, 0xc81e,		0x21, 0
+	.dw 0xc4c0, 0xc81e,	0xc4ff, 0xc81e,		0x21, 0
+	.dw 0xc540, 0xc81e,	0xc57f, 0xc81e,		0x21, 0
+	.dw 0xc5c0, 0xc81e,	0xc5ff, 0xc81e,		0x21, 0
+	.dw 0xc640, 0xc81e,	0xc67f, 0xc81e,		0x21, 0
+	.dw 0xc6c0, 0xc81e,	0xc6ff, 0xc81e,		0x21, 0
+	.dw 0xc740, 0xc81e,	0xc77f, 0xc81e,		0x21, 0
+	.dw 0xc7c0, 0xc81e,	0xc7ff, 0xc81e,		0x21, 0
+	.dw 0xc840, 0xc81e,	0xc87f, 0xc81e,		0x21, 0
+	.dw 0xc8c0, 0xc81e,	0xc8ff, 0xc81e,		0x21, 0
+	.dw 0xc940, 0xc81e,	0xc97f, 0xc81e,		0x21, 0
+	.dw 0xc9c0, 0xc81e,	0xc9ff, 0xc81e,		0x21, 0
+	.dw 0xca40, 0xc81e,	0xca7f, 0xc81e,		0x21, 0
+	.dw 0xcac0, 0xc81e,	0xcaff, 0xc81e,		0x21, 0
+	.dw 0xcb40, 0xc81e,	0xcb7f, 0xc81e,		0x21, 0
+	.dw 0xcbc0, 0xc81e,	0xcbff, 0xc81e,		0x21, 0
+	.dw 0xcc40, 0xc81e,	0xcc7f, 0xc81e,		0x21, 0
+	.dw 0xccc0, 0xc81e,	0xccff, 0xc81e,		0x21, 0
+	.dw 0xcd40, 0xc81e,	0xcd7f, 0xc81e,		0x21, 0
+	.dw 0xcdc0, 0xc81e,	0xcdff, 0xc81e,		0x21, 0
+	.dw 0xce40, 0xc81e,	0xce7f, 0xc81e,		0x21, 0
+	.dw 0xcec0, 0xc81e,	0xceff, 0xc81e,		0x21, 0
+	.dw 0xcf40, 0xc81e,	0xcf7f, 0xc81e,		0x21, 0
+	.dw 0xcfc0, 0xc81e,	0xcfff, 0xc81e,		0x21, 0
+	.dw 0xd040, 0xc81e,	0xd07f, 0xc81e,		0x21, 0
+	.dw 0xd0c0, 0xc81e,	0xd0ff, 0xc81e,		0x21, 0
+	.dw 0xd140, 0xc81e,	0xd17f, 0xc81e,		0x21, 0
+	.dw 0xd1c0, 0xc81e,	0xd1ff, 0xc81e,		0x21, 0
+	.dw 0xd240, 0xc81e,	0xd27f, 0xc81e,		0x21, 0
+	.dw 0xd2c0, 0xc81e,	0xd2ff, 0xc81e,		0x21, 0
+	.dw 0xd340, 0xc81e,	0xd37f, 0xc81e,		0x21, 0
+	.dw 0xd3c0, 0xc81e,	0xd3ff, 0xc81e,		0x21, 0
+	.dw 0xd440, 0xc81e,	0xd47f, 0xc81e,		0x21, 0
+	.dw 0xd4c0, 0xc81e,	0xd4ff, 0xc81e,		0x21, 0
+	.dw 0xd540, 0xc81e,	0xd57f, 0xc81e,		0x21, 0
+	.dw 0xd5c0, 0xc81e,	0xd5ff, 0xc81e,		0x21, 0
+	.dw 0xd640, 0xc81e,	0xd67f, 0xc81e,		0x21, 0
+	.dw 0xd6c0, 0xc81e,	0xd6ff, 0xc81e,		0x21, 0
+	.dw 0xd740, 0xc81e,	0xd77f, 0xc81e,		0x21, 0
+	.dw 0xd7c0, 0xc81e,	0xd7ff, 0xc81e,		0x21, 0
+	.dw 0xd840, 0xc81e,	0xd87f, 0xc81e,		0x21, 0
+	.dw 0xd8c0, 0xc81e,	0xd8ff, 0xc81e,		0x21, 0
+	.dw 0xd940, 0xc81e,	0xd97f, 0xc81e,		0x21, 0
+	.dw 0xd9c0, 0xc81e,	0xdfff, 0xc81e,		0x21, 0
+	.dw 0xe040, 0xc81e,	0xe07f, 0xc81e,		0x21, 0
+	.dw 0xe0c0, 0xc81e,	0xe0ff, 0xc81e,		0x21, 0
+	.dw 0xe140, 0xc81e,	0xe17f, 0xc81e,		0x21, 0
+	.dw 0xe1c0, 0xc81e,	0xe1ff, 0xc81e,		0x21, 0
+	.dw 0xe240, 0xc81e,	0xe27f, 0xc81e,		0x21, 0
+	.dw 0xe2c0, 0xc81e,	0xe2ff, 0xc81e,		0x21, 0
+	.dw 0xe340, 0xc81e,	0xe37f, 0xc81e,		0x21, 0
+	.dw 0xe3c0, 0xc81e,	0xe3ff, 0xc81e,		0x21, 0
+	.dw 0xe440, 0xc81e,	0xe47f, 0xc81e,		0x21, 0
+	.dw 0xe4c0, 0xc81e,	0xe4ff, 0xc81e,		0x21, 0
+	.dw 0xe540, 0xc81e,	0xe57f, 0xc81e,		0x21, 0
+	.dw 0xe5c0, 0xc81e,	0xe5ff, 0xc81e,		0x21, 0
+	.dw 0xe640, 0xc81e,	0xe67f, 0xc81e,		0x21, 0
+	.dw 0xe6c0, 0xc81e,	0xe6ff, 0xc81e,		0x21, 0
+	.dw 0xe740, 0xc81e,	0xe77f, 0xc81e,		0x21, 0
+	.dw 0xe7c0, 0xc81e,	0xe7ff, 0xc81e,		0x21, 0
+	.dw 0xe840, 0xc81e,	0xe87f, 0xc81e,		0x21, 0
+	.dw 0xe8c0, 0xc81e,	0xe8ff, 0xc81e,		0x21, 0
+	.dw 0xe940, 0xc81e,	0xe97f, 0xc81e,		0x21, 0
+	.dw 0xe9c0, 0xc81e,	0xe9ff, 0xc81e,		0x21, 0
+	.dw 0xea40, 0xc81e,	0xea7f, 0xc81e,		0x21, 0
+	.dw 0xeac0, 0xc81e,	0xeaff, 0xc81e,		0x21, 0
+	.dw 0xeb40, 0xc81e,	0xeb7f, 0xc81e,		0x21, 0
+	.dw 0xebc0, 0xc81e,	0xebff, 0xc81e,		0x21, 0
+	.dw 0xec40, 0xc81e,	0xec7f, 0xc81e,		0x21, 0
+	.dw 0xecc0, 0xc81e,	0xecff, 0xc81e,		0x21, 0
+	.dw 0xed40, 0xc81e,	0xed7f, 0xc81e,		0x21, 0
+	.dw 0xedc0, 0xc81e,	0xedff, 0xc81e,		0x21, 0
+	.dw 0xee40, 0xc81e,	0xee7f, 0xc81e,		0x21, 0
+	.dw 0xeec0, 0xc81e,	0xeeff, 0xc81e,		0x21, 0
+	.dw 0xef40, 0xc81e,	0xef7f, 0xc81e,		0x21, 0
+	.dw 0xefc0, 0xc81e,	0xefff, 0xc81e,		0x21, 0
+	.dw 0xf040, 0xc81e,	0xf07f, 0xc81e,		0x21, 0
+	.dw 0xf0c0, 0xc81e,	0xf0ff, 0xc81e,		0x21, 0
+	.dw 0xf140, 0xc81e,	0xf17f, 0xc81e,		0x21, 0
+	.dw 0xf1c0, 0xc81e,	0xf1ff, 0xc81e,		0x21, 0
+	.dw 0xf240, 0xc81e,	0xf27f, 0xc81e,		0x21, 0
+	.dw 0xf2c0, 0xc81e,	0xf2ff, 0xc81e,		0x21, 0
+	.dw 0xf340, 0xc81e,	0xf37f, 0xc81e,		0x21, 0
+	.dw 0xf3c0, 0xc81e,	0xf3ff, 0xc81e,		0x21, 0
+	.dw 0xf440, 0xc81e,	0xf47f, 0xc81e,		0x21, 0
+	.dw 0xf4c0, 0xc81e,	0xf4ff, 0xc81e,		0x21, 0
+	.dw 0xf540, 0xc81e,	0xf57f, 0xc81e,		0x21, 0
+	.dw 0xf5c0, 0xc81e,	0xf5ff, 0xc81e,		0x21, 0
+	.dw 0xf640, 0xc81e,	0xf67f, 0xc81e,		0x21, 0
+	.dw 0xf6c0, 0xc81e,	0xf6ff, 0xc81e,		0x21, 0
+	.dw 0xf740, 0xc81e,	0xf77f, 0xc81e,		0x21, 0
+	.dw 0xf7c0, 0xc81e,	0xf7ff, 0xc81e,		0x21, 0
+	.dw 0xf840, 0xc81e,	0xf87f, 0xc81e,		0x21, 0
+	.dw 0xf8c0, 0xc81e,	0xf8ff, 0xc81e,		0x21, 0
+	.dw 0xf940, 0xc81e,	0xf97f, 0xc81e,		0x21, 0
+	.dw 0xf9c0, 0xc81e,	0xffff, 0xc81e,		0x21, 0
+	.dw 0x0040, 0xc81f,	0x007f, 0xc81f,		0x21, 0
+	.dw 0x00c0, 0xc81f,	0x00ff, 0xc81f,		0x21, 0
+	.dw 0x0140, 0xc81f,	0x017f, 0xc81f,		0x21, 0
+	.dw 0x01c0, 0xc81f,	0x01ff, 0xc81f,		0x21, 0
+	.dw 0x0240, 0xc81f,	0x027f, 0xc81f,		0x21, 0
+	.dw 0x02c0, 0xc81f,	0x02ff, 0xc81f,		0x21, 0
+	.dw 0x0340, 0xc81f,	0x037f, 0xc81f,		0x21, 0
+	.dw 0x03c0, 0xc81f,	0x03ff, 0xc81f,		0x21, 0
+	.dw 0x0440, 0xc81f,	0x047f, 0xc81f,		0x21, 0
+	.dw 0x04c0, 0xc81f,	0x04ff, 0xc81f,		0x21, 0
+	.dw 0x0540, 0xc81f,	0x057f, 0xc81f,		0x21, 0
+	.dw 0x05c0, 0xc81f,	0x05ff, 0xc81f,		0x21, 0
+	.dw 0x0640, 0xc81f,	0x067f, 0xc81f,		0x21, 0
+	.dw 0x06c0, 0xc81f,	0x06ff, 0xc81f,		0x21, 0
+	.dw 0x0740, 0xc81f,	0x077f, 0xc81f,		0x21, 0
+	.dw 0x07c0, 0xc81f,	0x07ff, 0xc81f,		0x21, 0
+	.dw 0x0840, 0xc81f,	0x087f, 0xc81f,		0x21, 0
+	.dw 0x08c0, 0xc81f,	0x08ff, 0xc81f,		0x21, 0
+	.dw 0x0940, 0xc81f,	0x097f, 0xc81f,		0x21, 0
+	.dw 0x09c0, 0xc81f,	0x09ff, 0xc81f,		0x21, 0
+	.dw 0x0a40, 0xc81f,	0x0a7f, 0xc81f,		0x21, 0
+	.dw 0x0ac0, 0xc81f,	0x0aff, 0xc81f,		0x21, 0
+	.dw 0x0b40, 0xc81f,	0x0b7f, 0xc81f,		0x21, 0
+	.dw 0x0bc0, 0xc81f,	0x0bff, 0xc81f,		0x21, 0
+	.dw 0x0c40, 0xc81f,	0x0c7f, 0xc81f,		0x21, 0
+	.dw 0x0cc0, 0xc81f,	0x0cff, 0xc81f,		0x21, 0
+	.dw 0x0d40, 0xc81f,	0x0d7f, 0xc81f,		0x21, 0
+	.dw 0x0dc0, 0xc81f,	0x0dff, 0xc81f,		0x21, 0
+	.dw 0x0e40, 0xc81f,	0x0e7f, 0xc81f,		0x21, 0
+	.dw 0x0ec0, 0xc81f,	0x0eff, 0xc81f,		0x21, 0
+	.dw 0x0f40, 0xc81f,	0x0f7f, 0xc81f,		0x21, 0
+	.dw 0x0fc0, 0xc81f,	0x0fff, 0xc81f,		0x21, 0
+	.dw 0x1040, 0xc81f,	0x107f, 0xc81f,		0x21, 0
+	.dw 0x10c0, 0xc81f,	0x10ff, 0xc81f,		0x21, 0
+	.dw 0x1140, 0xc81f,	0x117f, 0xc81f,		0x21, 0
+	.dw 0x11c0, 0xc81f,	0x11ff, 0xc81f,		0x21, 0
+	.dw 0x1240, 0xc81f,	0x127f, 0xc81f,		0x21, 0
+	.dw 0x12c0, 0xc81f,	0x12ff, 0xc81f,		0x21, 0
+	.dw 0x1340, 0xc81f,	0x137f, 0xc81f,		0x21, 0
+	.dw 0x13c0, 0xc81f,	0x13ff, 0xc81f,		0x21, 0
+	.dw 0x1440, 0xc81f,	0x147f, 0xc81f,		0x21, 0
+	.dw 0x14c0, 0xc81f,	0x14ff, 0xc81f,		0x21, 0
+	.dw 0x1540, 0xc81f,	0x157f, 0xc81f,		0x21, 0
+	.dw 0x15c0, 0xc81f,	0x15ff, 0xc81f,		0x21, 0
+	.dw 0x1640, 0xc81f,	0x167f, 0xc81f,		0x21, 0
+	.dw 0x16c0, 0xc81f,	0x16ff, 0xc81f,		0x21, 0
+	.dw 0x1740, 0xc81f,	0x177f, 0xc81f,		0x21, 0
+	.dw 0x17c0, 0xc81f,	0x17ff, 0xc81f,		0x21, 0
+	.dw 0x1840, 0xc81f,	0x187f, 0xc81f,		0x21, 0
+	.dw 0x18c0, 0xc81f,	0x18ff, 0xc81f,		0x21, 0
+	.dw 0x1940, 0xc81f,	0x197f, 0xc81f,		0x21, 0
+	.dw 0x19c0, 0xc81f,	0x1fff, 0xc81f,		0x21, 0
+	.dw 0x2040, 0xc81f,	0x207f, 0xc81f,		0x21, 0
+	.dw 0x20c0, 0xc81f,	0x20ff, 0xc81f,		0x21, 0
+	.dw 0x2140, 0xc81f,	0x217f, 0xc81f,		0x21, 0
+	.dw 0x21c0, 0xc81f,	0x21ff, 0xc81f,		0x21, 0
+	.dw 0x2240, 0xc81f,	0x227f, 0xc81f,		0x21, 0
+	.dw 0x22c0, 0xc81f,	0x22ff, 0xc81f,		0x21, 0
+	.dw 0x2340, 0xc81f,	0x237f, 0xc81f,		0x21, 0
+	.dw 0x23c0, 0xc81f,	0x23ff, 0xc81f,		0x21, 0
+	.dw 0x2440, 0xc81f,	0x247f, 0xc81f,		0x21, 0
+	.dw 0x24c0, 0xc81f,	0x24ff, 0xc81f,		0x21, 0
+	.dw 0x2540, 0xc81f,	0x257f, 0xc81f,		0x21, 0
+	.dw 0x25c0, 0xc81f,	0x25ff, 0xc81f,		0x21, 0
+	.dw 0x2640, 0xc81f,	0x267f, 0xc81f,		0x21, 0
+	.dw 0x26c0, 0xc81f,	0x26ff, 0xc81f,		0x21, 0
+	.dw 0x2740, 0xc81f,	0x277f, 0xc81f,		0x21, 0
+	.dw 0x27c0, 0xc81f,	0x27ff, 0xc81f,		0x21, 0
+	.dw 0x2840, 0xc81f,	0x287f, 0xc81f,		0x21, 0
+	.dw 0x28c0, 0xc81f,	0x28ff, 0xc81f,		0x21, 0
+	.dw 0x2940, 0xc81f,	0x297f, 0xc81f,		0x21, 0
+	.dw 0x29c0, 0xc81f,	0x29ff, 0xc81f,		0x21, 0
+	.dw 0x2a40, 0xc81f,	0x2a7f, 0xc81f,		0x21, 0
+	.dw 0x2ac0, 0xc81f,	0x2aff, 0xc81f,		0x21, 0
+	.dw 0x2b40, 0xc81f,	0x2b7f, 0xc81f,		0x21, 0
+	.dw 0x2bc0, 0xc81f,	0x2bff, 0xc81f,		0x21, 0
+	.dw 0x2c40, 0xc81f,	0x2c7f, 0xc81f,		0x21, 0
+	.dw 0x2cc0, 0xc81f,	0x2cff, 0xc81f,		0x21, 0
+	.dw 0x2d40, 0xc81f,	0x2d7f, 0xc81f,		0x21, 0
+	.dw 0x2dc0, 0xc81f,	0x2dff, 0xc81f,		0x21, 0
+	.dw 0x2e40, 0xc81f,	0x2e7f, 0xc81f,		0x21, 0
+	.dw 0x2ec0, 0xc81f,	0x2eff, 0xc81f,		0x21, 0
+	.dw 0x2f40, 0xc81f,	0x2f7f, 0xc81f,		0x21, 0
+	.dw 0x2fc0, 0xc81f,	0x2fff, 0xc81f,		0x21, 0
+	.dw 0x3040, 0xc81f,	0x307f, 0xc81f,		0x21, 0
+	.dw 0x30c0, 0xc81f,	0x30ff, 0xc81f,		0x21, 0
+	.dw 0x3140, 0xc81f,	0x317f, 0xc81f,		0x21, 0
+	.dw 0x31c0, 0xc81f,	0x31ff, 0xc81f,		0x21, 0
+	.dw 0x3240, 0xc81f,	0x327f, 0xc81f,		0x21, 0
+	.dw 0x32c0, 0xc81f,	0x32ff, 0xc81f,		0x21, 0
+	.dw 0x3340, 0xc81f,	0x337f, 0xc81f,		0x21, 0
+	.dw 0x33c0, 0xc81f,	0x33ff, 0xc81f,		0x21, 0
+	.dw 0x3440, 0xc81f,	0x347f, 0xc81f,		0x21, 0
+	.dw 0x34c0, 0xc81f,	0x34ff, 0xc81f,		0x21, 0
+	.dw 0x3540, 0xc81f,	0x357f, 0xc81f,		0x21, 0
+	.dw 0x35c0, 0xc81f,	0x35ff, 0xc81f,		0x21, 0
+	.dw 0x3640, 0xc81f,	0x367f, 0xc81f,		0x21, 0
+	.dw 0x36c0, 0xc81f,	0x36ff, 0xc81f,		0x21, 0
+	.dw 0x3740, 0xc81f,	0x377f, 0xc81f,		0x21, 0
+	.dw 0x37c0, 0xc81f,	0x37ff, 0xc81f,		0x21, 0
+	.dw 0x3840, 0xc81f,	0x387f, 0xc81f,		0x21, 0
+	.dw 0x38c0, 0xc81f,	0x38ff, 0xc81f,		0x21, 0
+	.dw 0x3940, 0xc81f,	0x397f, 0xc81f,		0x21, 0
+	.dw 0x39c0, 0xc81f,	0x1fff, 0xc820,		0x21, 0
+	.dw 0x3a00, 0xc820,	0x5fff, 0xc820,		0x21, 0
+	.dw 0x7a00, 0xc820,	0x9fff, 0xc820,		0x21, 0
+	.dw 0xba00, 0xc820,	0xdfff, 0xc820,		0x21, 0
+	.dw 0xfa00, 0xc820,	0x1fff, 0xc821,		0x21, 0
+	.dw 0x3a00, 0xc821,	0x5fff, 0xc821,		0x21, 0
+	.dw 0x7a00, 0xc821,	0x9fff, 0xc821,		0x21, 0
+	.dw 0xba00, 0xc821,	0xdfff, 0xc821,		0x21, 0
+	.dw 0xfa00, 0xc821,	0x1fff, 0xc822,		0x21, 0
+	.dw 0x3a00, 0xc822,	0x5fff, 0xc822,		0x21, 0
+	.dw 0x7a00, 0xc822,	0x9fff, 0xc822,		0x21, 0
+	.dw 0xba00, 0xc822,	0xdfff, 0xc822,		0x21, 0
+	.dw 0xfa00, 0xc822,	0x1fff, 0xc823,		0x21, 0
+	.dw 0x3a00, 0xc823,	0xffff, 0xc823,		0x21, 0
+	.dw 0x1a00, 0xc824,	0x1fff, 0xc824,		0x21, 0
+	.dw 0x3a00, 0xc824,	0x3fff, 0xc824,		0x21, 0
+	.dw 0x5a00, 0xc824,	0x5fff, 0xc824,		0x21, 0
+	.dw 0x7a00, 0xc824,	0x7fff, 0xc824,		0x21, 0
+	.dw 0x9a00, 0xc824,	0x9fff, 0xc824,		0x21, 0
+	.dw 0xba00, 0xc824,	0xbfff, 0xc824,		0x21, 0
+	.dw 0xda00, 0xc824,	0xdfff, 0xc824,		0x21, 0
+	.dw 0xfa00, 0xc824,	0xffff, 0xc824,		0x21, 0
+	.dw 0x1a00, 0xc825,	0x1fff, 0xc825,		0x21, 0
+	.dw 0x3a00, 0xc825,	0x3fff, 0xc825,		0x21, 0
+	.dw 0x5a00, 0xc825,	0x5fff, 0xc825,		0x21, 0
+	.dw 0x7a00, 0xc825,	0x7fff, 0xc825,		0x21, 0
+	.dw 0x9a00, 0xc825,	0x9fff, 0xc825,		0x21, 0
+	.dw 0xba00, 0xc825,	0xbfff, 0xc825,		0x21, 0
+	.dw 0xda00, 0xc825,	0xdfff, 0xc825,		0x21, 0
+	.dw 0xfa00, 0xc825,	0xffff, 0xc825,		0x21, 0
+	.dw 0x1a00, 0xc826,	0x1fff, 0xc826,		0x21, 0
+	.dw 0x3a00, 0xc826,	0x3fff, 0xc826,		0x21, 0
+	.dw 0x5a00, 0xc826,	0x5fff, 0xc826,		0x21, 0
+	.dw 0x7a00, 0xc826,	0x7fff, 0xc826,		0x21, 0
+	.dw 0x9a00, 0xc826,	0x9fff, 0xc826,		0x21, 0
+	.dw 0xba00, 0xc826,	0xbfff, 0xc826,		0x21, 0
+	.dw 0xda00, 0xc826,	0xdfff, 0xc826,		0x21, 0
+	.dw 0xfa00, 0xc826,	0xffff, 0xc826,		0x21, 0
+	.dw 0x1a00, 0xc827,	0x1fff, 0xc827,		0x21, 0
+	.dw 0x3a00, 0xc827,	0x1fff, 0xc828,		0x21, 0
+	.dw 0x2040, 0xc828,	0x207f, 0xc828,		0x21, 0
+	.dw 0x20c0, 0xc828,	0x20ff, 0xc828,		0x21, 0
+	.dw 0x2140, 0xc828,	0x217f, 0xc828,		0x21, 0
+	.dw 0x21c0, 0xc828,	0x21ff, 0xc828,		0x21, 0
+	.dw 0x2240, 0xc828,	0x227f, 0xc828,		0x21, 0
+	.dw 0x22c0, 0xc828,	0x22ff, 0xc828,		0x21, 0
+	.dw 0x2340, 0xc828,	0x237f, 0xc828,		0x21, 0
+	.dw 0x23c0, 0xc828,	0x23ff, 0xc828,		0x21, 0
+	.dw 0x2440, 0xc828,	0x247f, 0xc828,		0x21, 0
+	.dw 0x24c0, 0xc828,	0x24ff, 0xc828,		0x21, 0
+	.dw 0x2540, 0xc828,	0x257f, 0xc828,		0x21, 0
+	.dw 0x25c0, 0xc828,	0x25ff, 0xc828,		0x21, 0
+	.dw 0x2640, 0xc828,	0x267f, 0xc828,		0x21, 0
+	.dw 0x26c0, 0xc828,	0x26ff, 0xc828,		0x21, 0
+	.dw 0x2740, 0xc828,	0x277f, 0xc828,		0x21, 0
+	.dw 0x27c0, 0xc828,	0x27ff, 0xc828,		0x21, 0
+	.dw 0x2840, 0xc828,	0x287f, 0xc828,		0x21, 0
+	.dw 0x28c0, 0xc828,	0x28ff, 0xc828,		0x21, 0
+	.dw 0x2940, 0xc828,	0x297f, 0xc828,		0x21, 0
+	.dw 0x29c0, 0xc828,	0x29ff, 0xc828,		0x21, 0
+	.dw 0x2a40, 0xc828,	0x2a7f, 0xc828,		0x21, 0
+	.dw 0x2ac0, 0xc828,	0x2aff, 0xc828,		0x21, 0
+	.dw 0x2b40, 0xc828,	0x2b7f, 0xc828,		0x21, 0
+	.dw 0x2bc0, 0xc828,	0x2bff, 0xc828,		0x21, 0
+	.dw 0x2c40, 0xc828,	0x2c7f, 0xc828,		0x21, 0
+	.dw 0x2cc0, 0xc828,	0x2cff, 0xc828,		0x21, 0
+	.dw 0x2d40, 0xc828,	0x2d7f, 0xc828,		0x21, 0
+	.dw 0x2dc0, 0xc828,	0x2dff, 0xc828,		0x21, 0
+	.dw 0x2e40, 0xc828,	0x2e7f, 0xc828,		0x21, 0
+	.dw 0x2ec0, 0xc828,	0x2eff, 0xc828,		0x21, 0
+	.dw 0x2f40, 0xc828,	0x2f7f, 0xc828,		0x21, 0
+	.dw 0x2fc0, 0xc828,	0x2fff, 0xc828,		0x21, 0
+	.dw 0x3040, 0xc828,	0x307f, 0xc828,		0x21, 0
+	.dw 0x30c0, 0xc828,	0x30ff, 0xc828,		0x21, 0
+	.dw 0x3140, 0xc828,	0x317f, 0xc828,		0x21, 0
+	.dw 0x31c0, 0xc828,	0x31ff, 0xc828,		0x21, 0
+	.dw 0x3240, 0xc828,	0x327f, 0xc828,		0x21, 0
+	.dw 0x32c0, 0xc828,	0x32ff, 0xc828,		0x21, 0
+	.dw 0x3340, 0xc828,	0x337f, 0xc828,		0x21, 0
+	.dw 0x33c0, 0xc828,	0x33ff, 0xc828,		0x21, 0
+	.dw 0x3440, 0xc828,	0x347f, 0xc828,		0x21, 0
+	.dw 0x34c0, 0xc828,	0x34ff, 0xc828,		0x21, 0
+	.dw 0x3540, 0xc828,	0x357f, 0xc828,		0x21, 0
+	.dw 0x35c0, 0xc828,	0x35ff, 0xc828,		0x21, 0
+	.dw 0x3640, 0xc828,	0x367f, 0xc828,		0x21, 0
+	.dw 0x36c0, 0xc828,	0x36ff, 0xc828,		0x21, 0
+	.dw 0x3740, 0xc828,	0x377f, 0xc828,		0x21, 0
+	.dw 0x37c0, 0xc828,	0x37ff, 0xc828,		0x21, 0
+	.dw 0x3840, 0xc828,	0x387f, 0xc828,		0x21, 0
+	.dw 0x38c0, 0xc828,	0x38ff, 0xc828,		0x21, 0
+	.dw 0x3940, 0xc828,	0x397f, 0xc828,		0x21, 0
+	.dw 0x39c0, 0xc828,	0x5fff, 0xc828,		0x21, 0
+	.dw 0x6040, 0xc828,	0x607f, 0xc828,		0x21, 0
+	.dw 0x60c0, 0xc828,	0x60ff, 0xc828,		0x21, 0
+	.dw 0x6140, 0xc828,	0x617f, 0xc828,		0x21, 0
+	.dw 0x61c0, 0xc828,	0x61ff, 0xc828,		0x21, 0
+	.dw 0x6240, 0xc828,	0x627f, 0xc828,		0x21, 0
+	.dw 0x62c0, 0xc828,	0x62ff, 0xc828,		0x21, 0
+	.dw 0x6340, 0xc828,	0x637f, 0xc828,		0x21, 0
+	.dw 0x63c0, 0xc828,	0x63ff, 0xc828,		0x21, 0
+	.dw 0x6440, 0xc828,	0x647f, 0xc828,		0x21, 0
+	.dw 0x64c0, 0xc828,	0x64ff, 0xc828,		0x21, 0
+	.dw 0x6540, 0xc828,	0x657f, 0xc828,		0x21, 0
+	.dw 0x65c0, 0xc828,	0x65ff, 0xc828,		0x21, 0
+	.dw 0x6640, 0xc828,	0x667f, 0xc828,		0x21, 0
+	.dw 0x66c0, 0xc828,	0x66ff, 0xc828,		0x21, 0
+	.dw 0x6740, 0xc828,	0x677f, 0xc828,		0x21, 0
+	.dw 0x67c0, 0xc828,	0x67ff, 0xc828,		0x21, 0
+	.dw 0x6840, 0xc828,	0x687f, 0xc828,		0x21, 0
+	.dw 0x68c0, 0xc828,	0x68ff, 0xc828,		0x21, 0
+	.dw 0x6940, 0xc828,	0x697f, 0xc828,		0x21, 0
+	.dw 0x69c0, 0xc828,	0x69ff, 0xc828,		0x21, 0
+	.dw 0x6a40, 0xc828,	0x6a7f, 0xc828,		0x21, 0
+	.dw 0x6ac0, 0xc828,	0x6aff, 0xc828,		0x21, 0
+	.dw 0x6b40, 0xc828,	0x6b7f, 0xc828,		0x21, 0
+	.dw 0x6bc0, 0xc828,	0x6bff, 0xc828,		0x21, 0
+	.dw 0x6c40, 0xc828,	0x6c7f, 0xc828,		0x21, 0
+	.dw 0x6cc0, 0xc828,	0x6cff, 0xc828,		0x21, 0
+	.dw 0x6d40, 0xc828,	0x6d7f, 0xc828,		0x21, 0
+	.dw 0x6dc0, 0xc828,	0x6dff, 0xc828,		0x21, 0
+	.dw 0x6e40, 0xc828,	0x6e7f, 0xc828,		0x21, 0
+	.dw 0x6ec0, 0xc828,	0x6eff, 0xc828,		0x21, 0
+	.dw 0x6f40, 0xc828,	0x6f7f, 0xc828,		0x21, 0
+	.dw 0x6fc0, 0xc828,	0x6fff, 0xc828,		0x21, 0
+	.dw 0x7040, 0xc828,	0x707f, 0xc828,		0x21, 0
+	.dw 0x70c0, 0xc828,	0x70ff, 0xc828,		0x21, 0
+	.dw 0x7140, 0xc828,	0x717f, 0xc828,		0x21, 0
+	.dw 0x71c0, 0xc828,	0x71ff, 0xc828,		0x21, 0
+	.dw 0x7240, 0xc828,	0x727f, 0xc828,		0x21, 0
+	.dw 0x72c0, 0xc828,	0x72ff, 0xc828,		0x21, 0
+	.dw 0x7340, 0xc828,	0x737f, 0xc828,		0x21, 0
+	.dw 0x73c0, 0xc828,	0x73ff, 0xc828,		0x21, 0
+	.dw 0x7440, 0xc828,	0x747f, 0xc828,		0x21, 0
+	.dw 0x74c0, 0xc828,	0x74ff, 0xc828,		0x21, 0
+	.dw 0x7540, 0xc828,	0x757f, 0xc828,		0x21, 0
+	.dw 0x75c0, 0xc828,	0x75ff, 0xc828,		0x21, 0
+	.dw 0x7640, 0xc828,	0x767f, 0xc828,		0x21, 0
+	.dw 0x76c0, 0xc828,	0x76ff, 0xc828,		0x21, 0
+	.dw 0x7740, 0xc828,	0x777f, 0xc828,		0x21, 0
+	.dw 0x77c0, 0xc828,	0x77ff, 0xc828,		0x21, 0
+	.dw 0x7840, 0xc828,	0x787f, 0xc828,		0x21, 0
+	.dw 0x78c0, 0xc828,	0x78ff, 0xc828,		0x21, 0
+	.dw 0x7940, 0xc828,	0x797f, 0xc828,		0x21, 0
+	.dw 0x79c0, 0xc828,	0x9fff, 0xc828,		0x21, 0
+	.dw 0xa040, 0xc828,	0xa07f, 0xc828,		0x21, 0
+	.dw 0xa0c0, 0xc828,	0xa0ff, 0xc828,		0x21, 0
+	.dw 0xa140, 0xc828,	0xa17f, 0xc828,		0x21, 0
+	.dw 0xa1c0, 0xc828,	0xa1ff, 0xc828,		0x21, 0
+	.dw 0xa240, 0xc828,	0xa27f, 0xc828,		0x21, 0
+	.dw 0xa2c0, 0xc828,	0xa2ff, 0xc828,		0x21, 0
+	.dw 0xa340, 0xc828,	0xa37f, 0xc828,		0x21, 0
+	.dw 0xa3c0, 0xc828,	0xa3ff, 0xc828,		0x21, 0
+	.dw 0xa440, 0xc828,	0xa47f, 0xc828,		0x21, 0
+	.dw 0xa4c0, 0xc828,	0xa4ff, 0xc828,		0x21, 0
+	.dw 0xa540, 0xc828,	0xa57f, 0xc828,		0x21, 0
+	.dw 0xa5c0, 0xc828,	0xa5ff, 0xc828,		0x21, 0
+	.dw 0xa640, 0xc828,	0xa67f, 0xc828,		0x21, 0
+	.dw 0xa6c0, 0xc828,	0xa6ff, 0xc828,		0x21, 0
+	.dw 0xa740, 0xc828,	0xa77f, 0xc828,		0x21, 0
+	.dw 0xa7c0, 0xc828,	0xa7ff, 0xc828,		0x21, 0
+	.dw 0xa840, 0xc828,	0xa87f, 0xc828,		0x21, 0
+	.dw 0xa8c0, 0xc828,	0xa8ff, 0xc828,		0x21, 0
+	.dw 0xa940, 0xc828,	0xa97f, 0xc828,		0x21, 0
+	.dw 0xa9c0, 0xc828,	0xa9ff, 0xc828,		0x21, 0
+	.dw 0xaa40, 0xc828,	0xaa7f, 0xc828,		0x21, 0
+	.dw 0xaac0, 0xc828,	0xaaff, 0xc828,		0x21, 0
+	.dw 0xab40, 0xc828,	0xab7f, 0xc828,		0x21, 0
+	.dw 0xabc0, 0xc828,	0xabff, 0xc828,		0x21, 0
+	.dw 0xac40, 0xc828,	0xac7f, 0xc828,		0x21, 0
+	.dw 0xacc0, 0xc828,	0xacff, 0xc828,		0x21, 0
+	.dw 0xad40, 0xc828,	0xad7f, 0xc828,		0x21, 0
+	.dw 0xadc0, 0xc828,	0xadff, 0xc828,		0x21, 0
+	.dw 0xae40, 0xc828,	0xae7f, 0xc828,		0x21, 0
+	.dw 0xaec0, 0xc828,	0xaeff, 0xc828,		0x21, 0
+	.dw 0xaf40, 0xc828,	0xaf7f, 0xc828,		0x21, 0
+	.dw 0xafc0, 0xc828,	0xafff, 0xc828,		0x21, 0
+	.dw 0xb040, 0xc828,	0xb07f, 0xc828,		0x21, 0
+	.dw 0xb0c0, 0xc828,	0xb0ff, 0xc828,		0x21, 0
+	.dw 0xb140, 0xc828,	0xb17f, 0xc828,		0x21, 0
+	.dw 0xb1c0, 0xc828,	0xb1ff, 0xc828,		0x21, 0
+	.dw 0xb240, 0xc828,	0xb27f, 0xc828,		0x21, 0
+	.dw 0xb2c0, 0xc828,	0xb2ff, 0xc828,		0x21, 0
+	.dw 0xb340, 0xc828,	0xb37f, 0xc828,		0x21, 0
+	.dw 0xb3c0, 0xc828,	0xb3ff, 0xc828,		0x21, 0
+	.dw 0xb440, 0xc828,	0xb47f, 0xc828,		0x21, 0
+	.dw 0xb4c0, 0xc828,	0xb4ff, 0xc828,		0x21, 0
+	.dw 0xb540, 0xc828,	0xb57f, 0xc828,		0x21, 0
+	.dw 0xb5c0, 0xc828,	0xb5ff, 0xc828,		0x21, 0
+	.dw 0xb640, 0xc828,	0xb67f, 0xc828,		0x21, 0
+	.dw 0xb6c0, 0xc828,	0xb6ff, 0xc828,		0x21, 0
+	.dw 0xb740, 0xc828,	0xb77f, 0xc828,		0x21, 0
+	.dw 0xb7c0, 0xc828,	0xb7ff, 0xc828,		0x21, 0
+	.dw 0xb840, 0xc828,	0xb87f, 0xc828,		0x21, 0
+	.dw 0xb8c0, 0xc828,	0xb8ff, 0xc828,		0x21, 0
+	.dw 0xb940, 0xc828,	0xb97f, 0xc828,		0x21, 0
+	.dw 0xb9c0, 0xc828,	0xdfff, 0xc828,		0x21, 0
+	.dw 0xe040, 0xc828,	0xe07f, 0xc828,		0x21, 0
+	.dw 0xe0c0, 0xc828,	0xe0ff, 0xc828,		0x21, 0
+	.dw 0xe140, 0xc828,	0xe17f, 0xc828,		0x21, 0
+	.dw 0xe1c0, 0xc828,	0xe1ff, 0xc828,		0x21, 0
+	.dw 0xe240, 0xc828,	0xe27f, 0xc828,		0x21, 0
+	.dw 0xe2c0, 0xc828,	0xe2ff, 0xc828,		0x21, 0
+	.dw 0xe340, 0xc828,	0xe37f, 0xc828,		0x21, 0
+	.dw 0xe3c0, 0xc828,	0xe3ff, 0xc828,		0x21, 0
+	.dw 0xe440, 0xc828,	0xe47f, 0xc828,		0x21, 0
+	.dw 0xe4c0, 0xc828,	0xe4ff, 0xc828,		0x21, 0
+	.dw 0xe540, 0xc828,	0xe57f, 0xc828,		0x21, 0
+	.dw 0xe5c0, 0xc828,	0xe5ff, 0xc828,		0x21, 0
+	.dw 0xe640, 0xc828,	0xe67f, 0xc828,		0x21, 0
+	.dw 0xe6c0, 0xc828,	0xe6ff, 0xc828,		0x21, 0
+	.dw 0xe740, 0xc828,	0xe77f, 0xc828,		0x21, 0
+	.dw 0xe7c0, 0xc828,	0xe7ff, 0xc828,		0x21, 0
+	.dw 0xe840, 0xc828,	0xe87f, 0xc828,		0x21, 0
+	.dw 0xe8c0, 0xc828,	0xe8ff, 0xc828,		0x21, 0
+	.dw 0xe940, 0xc828,	0xe97f, 0xc828,		0x21, 0
+	.dw 0xe9c0, 0xc828,	0xe9ff, 0xc828,		0x21, 0
+	.dw 0xea40, 0xc828,	0xea7f, 0xc828,		0x21, 0
+	.dw 0xeac0, 0xc828,	0xeaff, 0xc828,		0x21, 0
+	.dw 0xeb40, 0xc828,	0xeb7f, 0xc828,		0x21, 0
+	.dw 0xebc0, 0xc828,	0xebff, 0xc828,		0x21, 0
+	.dw 0xec40, 0xc828,	0xec7f, 0xc828,		0x21, 0
+	.dw 0xecc0, 0xc828,	0xecff, 0xc828,		0x21, 0
+	.dw 0xed40, 0xc828,	0xed7f, 0xc828,		0x21, 0
+	.dw 0xedc0, 0xc828,	0xedff, 0xc828,		0x21, 0
+	.dw 0xee40, 0xc828,	0xee7f, 0xc828,		0x21, 0
+	.dw 0xeec0, 0xc828,	0xeeff, 0xc828,		0x21, 0
+	.dw 0xef40, 0xc828,	0xef7f, 0xc828,		0x21, 0
+	.dw 0xefc0, 0xc828,	0xefff, 0xc828,		0x21, 0
+	.dw 0xf040, 0xc828,	0xf07f, 0xc828,		0x21, 0
+	.dw 0xf0c0, 0xc828,	0xf0ff, 0xc828,		0x21, 0
+	.dw 0xf140, 0xc828,	0xf17f, 0xc828,		0x21, 0
+	.dw 0xf1c0, 0xc828,	0xf1ff, 0xc828,		0x21, 0
+	.dw 0xf240, 0xc828,	0xf27f, 0xc828,		0x21, 0
+	.dw 0xf2c0, 0xc828,	0xf2ff, 0xc828,		0x21, 0
+	.dw 0xf340, 0xc828,	0xf37f, 0xc828,		0x21, 0
+	.dw 0xf3c0, 0xc828,	0xf3ff, 0xc828,		0x21, 0
+	.dw 0xf440, 0xc828,	0xf47f, 0xc828,		0x21, 0
+	.dw 0xf4c0, 0xc828,	0xf4ff, 0xc828,		0x21, 0
+	.dw 0xf540, 0xc828,	0xf57f, 0xc828,		0x21, 0
+	.dw 0xf5c0, 0xc828,	0xf5ff, 0xc828,		0x21, 0
+	.dw 0xf640, 0xc828,	0xf67f, 0xc828,		0x21, 0
+	.dw 0xf6c0, 0xc828,	0xf6ff, 0xc828,		0x21, 0
+	.dw 0xf740, 0xc828,	0xf77f, 0xc828,		0x21, 0
+	.dw 0xf7c0, 0xc828,	0xf7ff, 0xc828,		0x21, 0
+	.dw 0xf840, 0xc828,	0xf87f, 0xc828,		0x21, 0
+	.dw 0xf8c0, 0xc828,	0xf8ff, 0xc828,		0x21, 0
+	.dw 0xf940, 0xc828,	0xf97f, 0xc828,		0x21, 0
+	.dw 0xf9c0, 0xc828,	0x1fff, 0xc829,		0x21, 0
+	.dw 0x2040, 0xc829,	0x207f, 0xc829,		0x21, 0
+	.dw 0x20c0, 0xc829,	0x20ff, 0xc829,		0x21, 0
+	.dw 0x2140, 0xc829,	0x217f, 0xc829,		0x21, 0
+	.dw 0x21c0, 0xc829,	0x21ff, 0xc829,		0x21, 0
+	.dw 0x2240, 0xc829,	0x227f, 0xc829,		0x21, 0
+	.dw 0x22c0, 0xc829,	0x22ff, 0xc829,		0x21, 0
+	.dw 0x2340, 0xc829,	0x237f, 0xc829,		0x21, 0
+	.dw 0x23c0, 0xc829,	0x23ff, 0xc829,		0x21, 0
+	.dw 0x2440, 0xc829,	0x247f, 0xc829,		0x21, 0
+	.dw 0x24c0, 0xc829,	0x24ff, 0xc829,		0x21, 0
+	.dw 0x2540, 0xc829,	0x257f, 0xc829,		0x21, 0
+	.dw 0x25c0, 0xc829,	0x25ff, 0xc829,		0x21, 0
+	.dw 0x2640, 0xc829,	0x267f, 0xc829,		0x21, 0
+	.dw 0x26c0, 0xc829,	0x26ff, 0xc829,		0x21, 0
+	.dw 0x2740, 0xc829,	0x277f, 0xc829,		0x21, 0
+	.dw 0x27c0, 0xc829,	0x27ff, 0xc829,		0x21, 0
+	.dw 0x2840, 0xc829,	0x287f, 0xc829,		0x21, 0
+	.dw 0x28c0, 0xc829,	0x28ff, 0xc829,		0x21, 0
+	.dw 0x2940, 0xc829,	0x297f, 0xc829,		0x21, 0
+	.dw 0x29c0, 0xc829,	0x29ff, 0xc829,		0x21, 0
+	.dw 0x2a40, 0xc829,	0x2a7f, 0xc829,		0x21, 0
+	.dw 0x2ac0, 0xc829,	0x2aff, 0xc829,		0x21, 0
+	.dw 0x2b40, 0xc829,	0x2b7f, 0xc829,		0x21, 0
+	.dw 0x2bc0, 0xc829,	0x2bff, 0xc829,		0x21, 0
+	.dw 0x2c40, 0xc829,	0x2c7f, 0xc829,		0x21, 0
+	.dw 0x2cc0, 0xc829,	0x2cff, 0xc829,		0x21, 0
+	.dw 0x2d40, 0xc829,	0x2d7f, 0xc829,		0x21, 0
+	.dw 0x2dc0, 0xc829,	0x2dff, 0xc829,		0x21, 0
+	.dw 0x2e40, 0xc829,	0x2e7f, 0xc829,		0x21, 0
+	.dw 0x2ec0, 0xc829,	0x2eff, 0xc829,		0x21, 0
+	.dw 0x2f40, 0xc829,	0x2f7f, 0xc829,		0x21, 0
+	.dw 0x2fc0, 0xc829,	0x2fff, 0xc829,		0x21, 0
+	.dw 0x3040, 0xc829,	0x307f, 0xc829,		0x21, 0
+	.dw 0x30c0, 0xc829,	0x30ff, 0xc829,		0x21, 0
+	.dw 0x3140, 0xc829,	0x317f, 0xc829,		0x21, 0
+	.dw 0x31c0, 0xc829,	0x31ff, 0xc829,		0x21, 0
+	.dw 0x3240, 0xc829,	0x327f, 0xc829,		0x21, 0
+	.dw 0x32c0, 0xc829,	0x32ff, 0xc829,		0x21, 0
+	.dw 0x3340, 0xc829,	0x337f, 0xc829,		0x21, 0
+	.dw 0x33c0, 0xc829,	0x33ff, 0xc829,		0x21, 0
+	.dw 0x3440, 0xc829,	0x347f, 0xc829,		0x21, 0
+	.dw 0x34c0, 0xc829,	0x34ff, 0xc829,		0x21, 0
+	.dw 0x3540, 0xc829,	0x357f, 0xc829,		0x21, 0
+	.dw 0x35c0, 0xc829,	0x35ff, 0xc829,		0x21, 0
+	.dw 0x3640, 0xc829,	0x367f, 0xc829,		0x21, 0
+	.dw 0x36c0, 0xc829,	0x36ff, 0xc829,		0x21, 0
+	.dw 0x3740, 0xc829,	0x377f, 0xc829,		0x21, 0
+	.dw 0x37c0, 0xc829,	0x37ff, 0xc829,		0x21, 0
+	.dw 0x3840, 0xc829,	0x387f, 0xc829,		0x21, 0
+	.dw 0x38c0, 0xc829,	0x38ff, 0xc829,		0x21, 0
+	.dw 0x3940, 0xc829,	0x397f, 0xc829,		0x21, 0
+	.dw 0x39c0, 0xc829,	0x5fff, 0xc829,		0x21, 0
+	.dw 0x6040, 0xc829,	0x607f, 0xc829,		0x21, 0
+	.dw 0x60c0, 0xc829,	0x60ff, 0xc829,		0x21, 0
+	.dw 0x6140, 0xc829,	0x617f, 0xc829,		0x21, 0
+	.dw 0x61c0, 0xc829,	0x61ff, 0xc829,		0x21, 0
+	.dw 0x6240, 0xc829,	0x627f, 0xc829,		0x21, 0
+	.dw 0x62c0, 0xc829,	0x62ff, 0xc829,		0x21, 0
+	.dw 0x6340, 0xc829,	0x637f, 0xc829,		0x21, 0
+	.dw 0x63c0, 0xc829,	0x63ff, 0xc829,		0x21, 0
+	.dw 0x6440, 0xc829,	0x647f, 0xc829,		0x21, 0
+	.dw 0x64c0, 0xc829,	0x64ff, 0xc829,		0x21, 0
+	.dw 0x6540, 0xc829,	0x657f, 0xc829,		0x21, 0
+	.dw 0x65c0, 0xc829,	0x65ff, 0xc829,		0x21, 0
+	.dw 0x6640, 0xc829,	0x667f, 0xc829,		0x21, 0
+	.dw 0x66c0, 0xc829,	0x66ff, 0xc829,		0x21, 0
+	.dw 0x6740, 0xc829,	0x677f, 0xc829,		0x21, 0
+	.dw 0x67c0, 0xc829,	0x67ff, 0xc829,		0x21, 0
+	.dw 0x6840, 0xc829,	0x687f, 0xc829,		0x21, 0
+	.dw 0x68c0, 0xc829,	0x68ff, 0xc829,		0x21, 0
+	.dw 0x6940, 0xc829,	0x697f, 0xc829,		0x21, 0
+	.dw 0x69c0, 0xc829,	0x69ff, 0xc829,		0x21, 0
+	.dw 0x6a40, 0xc829,	0x6a7f, 0xc829,		0x21, 0
+	.dw 0x6ac0, 0xc829,	0x6aff, 0xc829,		0x21, 0
+	.dw 0x6b40, 0xc829,	0x6b7f, 0xc829,		0x21, 0
+	.dw 0x6bc0, 0xc829,	0x6bff, 0xc829,		0x21, 0
+	.dw 0x6c40, 0xc829,	0x6c7f, 0xc829,		0x21, 0
+	.dw 0x6cc0, 0xc829,	0x6cff, 0xc829,		0x21, 0
+	.dw 0x6d40, 0xc829,	0x6d7f, 0xc829,		0x21, 0
+	.dw 0x6dc0, 0xc829,	0x6dff, 0xc829,		0x21, 0
+	.dw 0x6e40, 0xc829,	0x6e7f, 0xc829,		0x21, 0
+	.dw 0x6ec0, 0xc829,	0x6eff, 0xc829,		0x21, 0
+	.dw 0x6f40, 0xc829,	0x6f7f, 0xc829,		0x21, 0
+	.dw 0x6fc0, 0xc829,	0x6fff, 0xc829,		0x21, 0
+	.dw 0x7040, 0xc829,	0x707f, 0xc829,		0x21, 0
+	.dw 0x70c0, 0xc829,	0x70ff, 0xc829,		0x21, 0
+	.dw 0x7140, 0xc829,	0x717f, 0xc829,		0x21, 0
+	.dw 0x71c0, 0xc829,	0x71ff, 0xc829,		0x21, 0
+	.dw 0x7240, 0xc829,	0x727f, 0xc829,		0x21, 0
+	.dw 0x72c0, 0xc829,	0x72ff, 0xc829,		0x21, 0
+	.dw 0x7340, 0xc829,	0x737f, 0xc829,		0x21, 0
+	.dw 0x73c0, 0xc829,	0x73ff, 0xc829,		0x21, 0
+	.dw 0x7440, 0xc829,	0x747f, 0xc829,		0x21, 0
+	.dw 0x74c0, 0xc829,	0x74ff, 0xc829,		0x21, 0
+	.dw 0x7540, 0xc829,	0x757f, 0xc829,		0x21, 0
+	.dw 0x75c0, 0xc829,	0x75ff, 0xc829,		0x21, 0
+	.dw 0x7640, 0xc829,	0x767f, 0xc829,		0x21, 0
+	.dw 0x76c0, 0xc829,	0x76ff, 0xc829,		0x21, 0
+	.dw 0x7740, 0xc829,	0x777f, 0xc829,		0x21, 0
+	.dw 0x77c0, 0xc829,	0x77ff, 0xc829,		0x21, 0
+	.dw 0x7840, 0xc829,	0x787f, 0xc829,		0x21, 0
+	.dw 0x78c0, 0xc829,	0x78ff, 0xc829,		0x21, 0
+	.dw 0x7940, 0xc829,	0x797f, 0xc829,		0x21, 0
+	.dw 0x79c0, 0xc829,	0x9fff, 0xc829,		0x21, 0
+	.dw 0xa040, 0xc829,	0xa07f, 0xc829,		0x21, 0
+	.dw 0xa0c0, 0xc829,	0xa0ff, 0xc829,		0x21, 0
+	.dw 0xa140, 0xc829,	0xa17f, 0xc829,		0x21, 0
+	.dw 0xa1c0, 0xc829,	0xa1ff, 0xc829,		0x21, 0
+	.dw 0xa240, 0xc829,	0xa27f, 0xc829,		0x21, 0
+	.dw 0xa2c0, 0xc829,	0xa2ff, 0xc829,		0x21, 0
+	.dw 0xa340, 0xc829,	0xa37f, 0xc829,		0x21, 0
+	.dw 0xa3c0, 0xc829,	0xa3ff, 0xc829,		0x21, 0
+	.dw 0xa440, 0xc829,	0xa47f, 0xc829,		0x21, 0
+	.dw 0xa4c0, 0xc829,	0xa4ff, 0xc829,		0x21, 0
+	.dw 0xa540, 0xc829,	0xa57f, 0xc829,		0x21, 0
+	.dw 0xa5c0, 0xc829,	0xa5ff, 0xc829,		0x21, 0
+	.dw 0xa640, 0xc829,	0xa67f, 0xc829,		0x21, 0
+	.dw 0xa6c0, 0xc829,	0xa6ff, 0xc829,		0x21, 0
+	.dw 0xa740, 0xc829,	0xa77f, 0xc829,		0x21, 0
+	.dw 0xa7c0, 0xc829,	0xa7ff, 0xc829,		0x21, 0
+	.dw 0xa840, 0xc829,	0xa87f, 0xc829,		0x21, 0
+	.dw 0xa8c0, 0xc829,	0xa8ff, 0xc829,		0x21, 0
+	.dw 0xa940, 0xc829,	0xa97f, 0xc829,		0x21, 0
+	.dw 0xa9c0, 0xc829,	0xa9ff, 0xc829,		0x21, 0
+	.dw 0xaa40, 0xc829,	0xaa7f, 0xc829,		0x21, 0
+	.dw 0xaac0, 0xc829,	0xaaff, 0xc829,		0x21, 0
+	.dw 0xab40, 0xc829,	0xab7f, 0xc829,		0x21, 0
+	.dw 0xabc0, 0xc829,	0xabff, 0xc829,		0x21, 0
+	.dw 0xac40, 0xc829,	0xac7f, 0xc829,		0x21, 0
+	.dw 0xacc0, 0xc829,	0xacff, 0xc829,		0x21, 0
+	.dw 0xad40, 0xc829,	0xad7f, 0xc829,		0x21, 0
+	.dw 0xadc0, 0xc829,	0xadff, 0xc829,		0x21, 0
+	.dw 0xae40, 0xc829,	0xae7f, 0xc829,		0x21, 0
+	.dw 0xaec0, 0xc829,	0xaeff, 0xc829,		0x21, 0
+	.dw 0xaf40, 0xc829,	0xaf7f, 0xc829,		0x21, 0
+	.dw 0xafc0, 0xc829,	0xafff, 0xc829,		0x21, 0
+	.dw 0xb040, 0xc829,	0xb07f, 0xc829,		0x21, 0
+	.dw 0xb0c0, 0xc829,	0xb0ff, 0xc829,		0x21, 0
+	.dw 0xb140, 0xc829,	0xb17f, 0xc829,		0x21, 0
+	.dw 0xb1c0, 0xc829,	0xb1ff, 0xc829,		0x21, 0
+	.dw 0xb240, 0xc829,	0xb27f, 0xc829,		0x21, 0
+	.dw 0xb2c0, 0xc829,	0xb2ff, 0xc829,		0x21, 0
+	.dw 0xb340, 0xc829,	0xb37f, 0xc829,		0x21, 0
+	.dw 0xb3c0, 0xc829,	0xb3ff, 0xc829,		0x21, 0
+	.dw 0xb440, 0xc829,	0xb47f, 0xc829,		0x21, 0
+	.dw 0xb4c0, 0xc829,	0xb4ff, 0xc829,		0x21, 0
+	.dw 0xb540, 0xc829,	0xb57f, 0xc829,		0x21, 0
+	.dw 0xb5c0, 0xc829,	0xb5ff, 0xc829,		0x21, 0
+	.dw 0xb640, 0xc829,	0xb67f, 0xc829,		0x21, 0
+	.dw 0xb6c0, 0xc829,	0xb6ff, 0xc829,		0x21, 0
+	.dw 0xb740, 0xc829,	0xb77f, 0xc829,		0x21, 0
+	.dw 0xb7c0, 0xc829,	0xb7ff, 0xc829,		0x21, 0
+	.dw 0xb840, 0xc829,	0xb87f, 0xc829,		0x21, 0
+	.dw 0xb8c0, 0xc829,	0xb8ff, 0xc829,		0x21, 0
+	.dw 0xb940, 0xc829,	0xb97f, 0xc829,		0x21, 0
+	.dw 0xb9c0, 0xc829,	0xdfff, 0xc829,		0x21, 0
+	.dw 0xe040, 0xc829,	0xe07f, 0xc829,		0x21, 0
+	.dw 0xe0c0, 0xc829,	0xe0ff, 0xc829,		0x21, 0
+	.dw 0xe140, 0xc829,	0xe17f, 0xc829,		0x21, 0
+	.dw 0xe1c0, 0xc829,	0xe1ff, 0xc829,		0x21, 0
+	.dw 0xe240, 0xc829,	0xe27f, 0xc829,		0x21, 0
+	.dw 0xe2c0, 0xc829,	0xe2ff, 0xc829,		0x21, 0
+	.dw 0xe340, 0xc829,	0xe37f, 0xc829,		0x21, 0
+	.dw 0xe3c0, 0xc829,	0xe3ff, 0xc829,		0x21, 0
+	.dw 0xe440, 0xc829,	0xe47f, 0xc829,		0x21, 0
+	.dw 0xe4c0, 0xc829,	0xe4ff, 0xc829,		0x21, 0
+	.dw 0xe540, 0xc829,	0xe57f, 0xc829,		0x21, 0
+	.dw 0xe5c0, 0xc829,	0xe5ff, 0xc829,		0x21, 0
+	.dw 0xe640, 0xc829,	0xe67f, 0xc829,		0x21, 0
+	.dw 0xe6c0, 0xc829,	0xe6ff, 0xc829,		0x21, 0
+	.dw 0xe740, 0xc829,	0xe77f, 0xc829,		0x21, 0
+	.dw 0xe7c0, 0xc829,	0xe7ff, 0xc829,		0x21, 0
+	.dw 0xe840, 0xc829,	0xe87f, 0xc829,		0x21, 0
+	.dw 0xe8c0, 0xc829,	0xe8ff, 0xc829,		0x21, 0
+	.dw 0xe940, 0xc829,	0xe97f, 0xc829,		0x21, 0
+	.dw 0xe9c0, 0xc829,	0xe9ff, 0xc829,		0x21, 0
+	.dw 0xea40, 0xc829,	0xea7f, 0xc829,		0x21, 0
+	.dw 0xeac0, 0xc829,	0xeaff, 0xc829,		0x21, 0
+	.dw 0xeb40, 0xc829,	0xeb7f, 0xc829,		0x21, 0
+	.dw 0xebc0, 0xc829,	0xebff, 0xc829,		0x21, 0
+	.dw 0xec40, 0xc829,	0xec7f, 0xc829,		0x21, 0
+	.dw 0xecc0, 0xc829,	0xecff, 0xc829,		0x21, 0
+	.dw 0xed40, 0xc829,	0xed7f, 0xc829,		0x21, 0
+	.dw 0xedc0, 0xc829,	0xedff, 0xc829,		0x21, 0
+	.dw 0xee40, 0xc829,	0xee7f, 0xc829,		0x21, 0
+	.dw 0xeec0, 0xc829,	0xeeff, 0xc829,		0x21, 0
+	.dw 0xef40, 0xc829,	0xef7f, 0xc829,		0x21, 0
+	.dw 0xefc0, 0xc829,	0xefff, 0xc829,		0x21, 0
+	.dw 0xf040, 0xc829,	0xf07f, 0xc829,		0x21, 0
+	.dw 0xf0c0, 0xc829,	0xf0ff, 0xc829,		0x21, 0
+	.dw 0xf140, 0xc829,	0xf17f, 0xc829,		0x21, 0
+	.dw 0xf1c0, 0xc829,	0xf1ff, 0xc829,		0x21, 0
+	.dw 0xf240, 0xc829,	0xf27f, 0xc829,		0x21, 0
+	.dw 0xf2c0, 0xc829,	0xf2ff, 0xc829,		0x21, 0
+	.dw 0xf340, 0xc829,	0xf37f, 0xc829,		0x21, 0
+	.dw 0xf3c0, 0xc829,	0xf3ff, 0xc829,		0x21, 0
+	.dw 0xf440, 0xc829,	0xf47f, 0xc829,		0x21, 0
+	.dw 0xf4c0, 0xc829,	0xf4ff, 0xc829,		0x21, 0
+	.dw 0xf540, 0xc829,	0xf57f, 0xc829,		0x21, 0
+	.dw 0xf5c0, 0xc829,	0xf5ff, 0xc829,		0x21, 0
+	.dw 0xf640, 0xc829,	0xf67f, 0xc829,		0x21, 0
+	.dw 0xf6c0, 0xc829,	0xf6ff, 0xc829,		0x21, 0
+	.dw 0xf740, 0xc829,	0xf77f, 0xc829,		0x21, 0
+	.dw 0xf7c0, 0xc829,	0xf7ff, 0xc829,		0x21, 0
+	.dw 0xf840, 0xc829,	0xf87f, 0xc829,		0x21, 0
+	.dw 0xf8c0, 0xc829,	0xf8ff, 0xc829,		0x21, 0
+	.dw 0xf940, 0xc829,	0xf97f, 0xc829,		0x21, 0
+	.dw 0xf9c0, 0xc829,	0x1fff, 0xc82a,		0x21, 0
+	.dw 0x2040, 0xc82a,	0x207f, 0xc82a,		0x21, 0
+	.dw 0x20c0, 0xc82a,	0x20ff, 0xc82a,		0x21, 0
+	.dw 0x2140, 0xc82a,	0x217f, 0xc82a,		0x21, 0
+	.dw 0x21c0, 0xc82a,	0x21ff, 0xc82a,		0x21, 0
+	.dw 0x2240, 0xc82a,	0x227f, 0xc82a,		0x21, 0
+	.dw 0x22c0, 0xc82a,	0x22ff, 0xc82a,		0x21, 0
+	.dw 0x2340, 0xc82a,	0x237f, 0xc82a,		0x21, 0
+	.dw 0x23c0, 0xc82a,	0x23ff, 0xc82a,		0x21, 0
+	.dw 0x2440, 0xc82a,	0x247f, 0xc82a,		0x21, 0
+	.dw 0x24c0, 0xc82a,	0x24ff, 0xc82a,		0x21, 0
+	.dw 0x2540, 0xc82a,	0x257f, 0xc82a,		0x21, 0
+	.dw 0x25c0, 0xc82a,	0x25ff, 0xc82a,		0x21, 0
+	.dw 0x2640, 0xc82a,	0x267f, 0xc82a,		0x21, 0
+	.dw 0x26c0, 0xc82a,	0x26ff, 0xc82a,		0x21, 0
+	.dw 0x2740, 0xc82a,	0x277f, 0xc82a,		0x21, 0
+	.dw 0x27c0, 0xc82a,	0x27ff, 0xc82a,		0x21, 0
+	.dw 0x2840, 0xc82a,	0x287f, 0xc82a,		0x21, 0
+	.dw 0x28c0, 0xc82a,	0x28ff, 0xc82a,		0x21, 0
+	.dw 0x2940, 0xc82a,	0x297f, 0xc82a,		0x21, 0
+	.dw 0x29c0, 0xc82a,	0x29ff, 0xc82a,		0x21, 0
+	.dw 0x2a40, 0xc82a,	0x2a7f, 0xc82a,		0x21, 0
+	.dw 0x2ac0, 0xc82a,	0x2aff, 0xc82a,		0x21, 0
+	.dw 0x2b40, 0xc82a,	0x2b7f, 0xc82a,		0x21, 0
+	.dw 0x2bc0, 0xc82a,	0x2bff, 0xc82a,		0x21, 0
+	.dw 0x2c40, 0xc82a,	0x2c7f, 0xc82a,		0x21, 0
+	.dw 0x2cc0, 0xc82a,	0x2cff, 0xc82a,		0x21, 0
+	.dw 0x2d40, 0xc82a,	0x2d7f, 0xc82a,		0x21, 0
+	.dw 0x2dc0, 0xc82a,	0x2dff, 0xc82a,		0x21, 0
+	.dw 0x2e40, 0xc82a,	0x2e7f, 0xc82a,		0x21, 0
+	.dw 0x2ec0, 0xc82a,	0x2eff, 0xc82a,		0x21, 0
+	.dw 0x2f40, 0xc82a,	0x2f7f, 0xc82a,		0x21, 0
+	.dw 0x2fc0, 0xc82a,	0x2fff, 0xc82a,		0x21, 0
+	.dw 0x3040, 0xc82a,	0x307f, 0xc82a,		0x21, 0
+	.dw 0x30c0, 0xc82a,	0x30ff, 0xc82a,		0x21, 0
+	.dw 0x3140, 0xc82a,	0x317f, 0xc82a,		0x21, 0
+	.dw 0x31c0, 0xc82a,	0x31ff, 0xc82a,		0x21, 0
+	.dw 0x3240, 0xc82a,	0x327f, 0xc82a,		0x21, 0
+	.dw 0x32c0, 0xc82a,	0x32ff, 0xc82a,		0x21, 0
+	.dw 0x3340, 0xc82a,	0x337f, 0xc82a,		0x21, 0
+	.dw 0x33c0, 0xc82a,	0x33ff, 0xc82a,		0x21, 0
+	.dw 0x3440, 0xc82a,	0x347f, 0xc82a,		0x21, 0
+	.dw 0x34c0, 0xc82a,	0x34ff, 0xc82a,		0x21, 0
+	.dw 0x3540, 0xc82a,	0x357f, 0xc82a,		0x21, 0
+	.dw 0x35c0, 0xc82a,	0x35ff, 0xc82a,		0x21, 0
+	.dw 0x3640, 0xc82a,	0x367f, 0xc82a,		0x21, 0
+	.dw 0x36c0, 0xc82a,	0x36ff, 0xc82a,		0x21, 0
+	.dw 0x3740, 0xc82a,	0x377f, 0xc82a,		0x21, 0
+	.dw 0x37c0, 0xc82a,	0x37ff, 0xc82a,		0x21, 0
+	.dw 0x3840, 0xc82a,	0x387f, 0xc82a,		0x21, 0
+	.dw 0x38c0, 0xc82a,	0x38ff, 0xc82a,		0x21, 0
+	.dw 0x3940, 0xc82a,	0x397f, 0xc82a,		0x21, 0
+	.dw 0x39c0, 0xc82a,	0x5fff, 0xc82a,		0x21, 0
+	.dw 0x6040, 0xc82a,	0x607f, 0xc82a,		0x21, 0
+	.dw 0x60c0, 0xc82a,	0x60ff, 0xc82a,		0x21, 0
+	.dw 0x6140, 0xc82a,	0x617f, 0xc82a,		0x21, 0
+	.dw 0x61c0, 0xc82a,	0x61ff, 0xc82a,		0x21, 0
+	.dw 0x6240, 0xc82a,	0x627f, 0xc82a,		0x21, 0
+	.dw 0x62c0, 0xc82a,	0x62ff, 0xc82a,		0x21, 0
+	.dw 0x6340, 0xc82a,	0x637f, 0xc82a,		0x21, 0
+	.dw 0x63c0, 0xc82a,	0x63ff, 0xc82a,		0x21, 0
+	.dw 0x6440, 0xc82a,	0x647f, 0xc82a,		0x21, 0
+	.dw 0x64c0, 0xc82a,	0x64ff, 0xc82a,		0x21, 0
+	.dw 0x6540, 0xc82a,	0x657f, 0xc82a,		0x21, 0
+	.dw 0x65c0, 0xc82a,	0x65ff, 0xc82a,		0x21, 0
+	.dw 0x6640, 0xc82a,	0x667f, 0xc82a,		0x21, 0
+	.dw 0x66c0, 0xc82a,	0x66ff, 0xc82a,		0x21, 0
+	.dw 0x6740, 0xc82a,	0x677f, 0xc82a,		0x21, 0
+	.dw 0x67c0, 0xc82a,	0x67ff, 0xc82a,		0x21, 0
+	.dw 0x6840, 0xc82a,	0x687f, 0xc82a,		0x21, 0
+	.dw 0x68c0, 0xc82a,	0x68ff, 0xc82a,		0x21, 0
+	.dw 0x6940, 0xc82a,	0x697f, 0xc82a,		0x21, 0
+	.dw 0x69c0, 0xc82a,	0x69ff, 0xc82a,		0x21, 0
+	.dw 0x6a40, 0xc82a,	0x6a7f, 0xc82a,		0x21, 0
+	.dw 0x6ac0, 0xc82a,	0x6aff, 0xc82a,		0x21, 0
+	.dw 0x6b40, 0xc82a,	0x6b7f, 0xc82a,		0x21, 0
+	.dw 0x6bc0, 0xc82a,	0x6bff, 0xc82a,		0x21, 0
+	.dw 0x6c40, 0xc82a,	0x6c7f, 0xc82a,		0x21, 0
+	.dw 0x6cc0, 0xc82a,	0x6cff, 0xc82a,		0x21, 0
+	.dw 0x6d40, 0xc82a,	0x6d7f, 0xc82a,		0x21, 0
+	.dw 0x6dc0, 0xc82a,	0x6dff, 0xc82a,		0x21, 0
+	.dw 0x6e40, 0xc82a,	0x6e7f, 0xc82a,		0x21, 0
+	.dw 0x6ec0, 0xc82a,	0x6eff, 0xc82a,		0x21, 0
+	.dw 0x6f40, 0xc82a,	0x6f7f, 0xc82a,		0x21, 0
+	.dw 0x6fc0, 0xc82a,	0x6fff, 0xc82a,		0x21, 0
+	.dw 0x7040, 0xc82a,	0x707f, 0xc82a,		0x21, 0
+	.dw 0x70c0, 0xc82a,	0x70ff, 0xc82a,		0x21, 0
+	.dw 0x7140, 0xc82a,	0x717f, 0xc82a,		0x21, 0
+	.dw 0x71c0, 0xc82a,	0x71ff, 0xc82a,		0x21, 0
+	.dw 0x7240, 0xc82a,	0x727f, 0xc82a,		0x21, 0
+	.dw 0x72c0, 0xc82a,	0x72ff, 0xc82a,		0x21, 0
+	.dw 0x7340, 0xc82a,	0x737f, 0xc82a,		0x21, 0
+	.dw 0x73c0, 0xc82a,	0x73ff, 0xc82a,		0x21, 0
+	.dw 0x7440, 0xc82a,	0x747f, 0xc82a,		0x21, 0
+	.dw 0x74c0, 0xc82a,	0x74ff, 0xc82a,		0x21, 0
+	.dw 0x7540, 0xc82a,	0x757f, 0xc82a,		0x21, 0
+	.dw 0x75c0, 0xc82a,	0x75ff, 0xc82a,		0x21, 0
+	.dw 0x7640, 0xc82a,	0x767f, 0xc82a,		0x21, 0
+	.dw 0x76c0, 0xc82a,	0x76ff, 0xc82a,		0x21, 0
+	.dw 0x7740, 0xc82a,	0x777f, 0xc82a,		0x21, 0
+	.dw 0x77c0, 0xc82a,	0x77ff, 0xc82a,		0x21, 0
+	.dw 0x7840, 0xc82a,	0x787f, 0xc82a,		0x21, 0
+	.dw 0x78c0, 0xc82a,	0x78ff, 0xc82a,		0x21, 0
+	.dw 0x7940, 0xc82a,	0x797f, 0xc82a,		0x21, 0
+	.dw 0x79c0, 0xc82a,	0x9fff, 0xc82a,		0x21, 0
+	.dw 0xa040, 0xc82a,	0xa07f, 0xc82a,		0x21, 0
+	.dw 0xa0c0, 0xc82a,	0xa0ff, 0xc82a,		0x21, 0
+	.dw 0xa140, 0xc82a,	0xa17f, 0xc82a,		0x21, 0
+	.dw 0xa1c0, 0xc82a,	0xa1ff, 0xc82a,		0x21, 0
+	.dw 0xa240, 0xc82a,	0xa27f, 0xc82a,		0x21, 0
+	.dw 0xa2c0, 0xc82a,	0xa2ff, 0xc82a,		0x21, 0
+	.dw 0xa340, 0xc82a,	0xa37f, 0xc82a,		0x21, 0
+	.dw 0xa3c0, 0xc82a,	0xa3ff, 0xc82a,		0x21, 0
+	.dw 0xa440, 0xc82a,	0xa47f, 0xc82a,		0x21, 0
+	.dw 0xa4c0, 0xc82a,	0xa4ff, 0xc82a,		0x21, 0
+	.dw 0xa540, 0xc82a,	0xa57f, 0xc82a,		0x21, 0
+	.dw 0xa5c0, 0xc82a,	0xa5ff, 0xc82a,		0x21, 0
+	.dw 0xa640, 0xc82a,	0xa67f, 0xc82a,		0x21, 0
+	.dw 0xa6c0, 0xc82a,	0xa6ff, 0xc82a,		0x21, 0
+	.dw 0xa740, 0xc82a,	0xa77f, 0xc82a,		0x21, 0
+	.dw 0xa7c0, 0xc82a,	0xa7ff, 0xc82a,		0x21, 0
+	.dw 0xa840, 0xc82a,	0xa87f, 0xc82a,		0x21, 0
+	.dw 0xa8c0, 0xc82a,	0xa8ff, 0xc82a,		0x21, 0
+	.dw 0xa940, 0xc82a,	0xa97f, 0xc82a,		0x21, 0
+	.dw 0xa9c0, 0xc82a,	0xa9ff, 0xc82a,		0x21, 0
+	.dw 0xaa40, 0xc82a,	0xaa7f, 0xc82a,		0x21, 0
+	.dw 0xaac0, 0xc82a,	0xaaff, 0xc82a,		0x21, 0
+	.dw 0xab40, 0xc82a,	0xab7f, 0xc82a,		0x21, 0
+	.dw 0xabc0, 0xc82a,	0xabff, 0xc82a,		0x21, 0
+	.dw 0xac40, 0xc82a,	0xac7f, 0xc82a,		0x21, 0
+	.dw 0xacc0, 0xc82a,	0xacff, 0xc82a,		0x21, 0
+	.dw 0xad40, 0xc82a,	0xad7f, 0xc82a,		0x21, 0
+	.dw 0xadc0, 0xc82a,	0xadff, 0xc82a,		0x21, 0
+	.dw 0xae40, 0xc82a,	0xae7f, 0xc82a,		0x21, 0
+	.dw 0xaec0, 0xc82a,	0xaeff, 0xc82a,		0x21, 0
+	.dw 0xaf40, 0xc82a,	0xaf7f, 0xc82a,		0x21, 0
+	.dw 0xafc0, 0xc82a,	0xafff, 0xc82a,		0x21, 0
+	.dw 0xb040, 0xc82a,	0xb07f, 0xc82a,		0x21, 0
+	.dw 0xb0c0, 0xc82a,	0xb0ff, 0xc82a,		0x21, 0
+	.dw 0xb140, 0xc82a,	0xb17f, 0xc82a,		0x21, 0
+	.dw 0xb1c0, 0xc82a,	0xb1ff, 0xc82a,		0x21, 0
+	.dw 0xb240, 0xc82a,	0xb27f, 0xc82a,		0x21, 0
+	.dw 0xb2c0, 0xc82a,	0xb2ff, 0xc82a,		0x21, 0
+	.dw 0xb340, 0xc82a,	0xb37f, 0xc82a,		0x21, 0
+	.dw 0xb3c0, 0xc82a,	0xb3ff, 0xc82a,		0x21, 0
+	.dw 0xb440, 0xc82a,	0xb47f, 0xc82a,		0x21, 0
+	.dw 0xb4c0, 0xc82a,	0xb4ff, 0xc82a,		0x21, 0
+	.dw 0xb540, 0xc82a,	0xb57f, 0xc82a,		0x21, 0
+	.dw 0xb5c0, 0xc82a,	0xb5ff, 0xc82a,		0x21, 0
+	.dw 0xb640, 0xc82a,	0xb67f, 0xc82a,		0x21, 0
+	.dw 0xb6c0, 0xc82a,	0xb6ff, 0xc82a,		0x21, 0
+	.dw 0xb740, 0xc82a,	0xb77f, 0xc82a,		0x21, 0
+	.dw 0xb7c0, 0xc82a,	0xb7ff, 0xc82a,		0x21, 0
+	.dw 0xb840, 0xc82a,	0xb87f, 0xc82a,		0x21, 0
+	.dw 0xb8c0, 0xc82a,	0xb8ff, 0xc82a,		0x21, 0
+	.dw 0xb940, 0xc82a,	0xb97f, 0xc82a,		0x21, 0
+	.dw 0xb9c0, 0xc82a,	0xdfff, 0xc82a,		0x21, 0
+	.dw 0xe040, 0xc82a,	0xe07f, 0xc82a,		0x21, 0
+	.dw 0xe0c0, 0xc82a,	0xe0ff, 0xc82a,		0x21, 0
+	.dw 0xe140, 0xc82a,	0xe17f, 0xc82a,		0x21, 0
+	.dw 0xe1c0, 0xc82a,	0xe1ff, 0xc82a,		0x21, 0
+	.dw 0xe240, 0xc82a,	0xe27f, 0xc82a,		0x21, 0
+	.dw 0xe2c0, 0xc82a,	0xe2ff, 0xc82a,		0x21, 0
+	.dw 0xe340, 0xc82a,	0xe37f, 0xc82a,		0x21, 0
+	.dw 0xe3c0, 0xc82a,	0xe3ff, 0xc82a,		0x21, 0
+	.dw 0xe440, 0xc82a,	0xe47f, 0xc82a,		0x21, 0
+	.dw 0xe4c0, 0xc82a,	0xe4ff, 0xc82a,		0x21, 0
+	.dw 0xe540, 0xc82a,	0xe57f, 0xc82a,		0x21, 0
+	.dw 0xe5c0, 0xc82a,	0xe5ff, 0xc82a,		0x21, 0
+	.dw 0xe640, 0xc82a,	0xe67f, 0xc82a,		0x21, 0
+	.dw 0xe6c0, 0xc82a,	0xe6ff, 0xc82a,		0x21, 0
+	.dw 0xe740, 0xc82a,	0xe77f, 0xc82a,		0x21, 0
+	.dw 0xe7c0, 0xc82a,	0xe7ff, 0xc82a,		0x21, 0
+	.dw 0xe840, 0xc82a,	0xe87f, 0xc82a,		0x21, 0
+	.dw 0xe8c0, 0xc82a,	0xe8ff, 0xc82a,		0x21, 0
+	.dw 0xe940, 0xc82a,	0xe97f, 0xc82a,		0x21, 0
+	.dw 0xe9c0, 0xc82a,	0xe9ff, 0xc82a,		0x21, 0
+	.dw 0xea40, 0xc82a,	0xea7f, 0xc82a,		0x21, 0
+	.dw 0xeac0, 0xc82a,	0xeaff, 0xc82a,		0x21, 0
+	.dw 0xeb40, 0xc82a,	0xeb7f, 0xc82a,		0x21, 0
+	.dw 0xebc0, 0xc82a,	0xebff, 0xc82a,		0x21, 0
+	.dw 0xec40, 0xc82a,	0xec7f, 0xc82a,		0x21, 0
+	.dw 0xecc0, 0xc82a,	0xecff, 0xc82a,		0x21, 0
+	.dw 0xed40, 0xc82a,	0xed7f, 0xc82a,		0x21, 0
+	.dw 0xedc0, 0xc82a,	0xedff, 0xc82a,		0x21, 0
+	.dw 0xee40, 0xc82a,	0xee7f, 0xc82a,		0x21, 0
+	.dw 0xeec0, 0xc82a,	0xeeff, 0xc82a,		0x21, 0
+	.dw 0xef40, 0xc82a,	0xef7f, 0xc82a,		0x21, 0
+	.dw 0xefc0, 0xc82a,	0xefff, 0xc82a,		0x21, 0
+	.dw 0xf040, 0xc82a,	0xf07f, 0xc82a,		0x21, 0
+	.dw 0xf0c0, 0xc82a,	0xf0ff, 0xc82a,		0x21, 0
+	.dw 0xf140, 0xc82a,	0xf17f, 0xc82a,		0x21, 0
+	.dw 0xf1c0, 0xc82a,	0xf1ff, 0xc82a,		0x21, 0
+	.dw 0xf240, 0xc82a,	0xf27f, 0xc82a,		0x21, 0
+	.dw 0xf2c0, 0xc82a,	0xf2ff, 0xc82a,		0x21, 0
+	.dw 0xf340, 0xc82a,	0xf37f, 0xc82a,		0x21, 0
+	.dw 0xf3c0, 0xc82a,	0xf3ff, 0xc82a,		0x21, 0
+	.dw 0xf440, 0xc82a,	0xf47f, 0xc82a,		0x21, 0
+	.dw 0xf4c0, 0xc82a,	0xf4ff, 0xc82a,		0x21, 0
+	.dw 0xf540, 0xc82a,	0xf57f, 0xc82a,		0x21, 0
+	.dw 0xf5c0, 0xc82a,	0xf5ff, 0xc82a,		0x21, 0
+	.dw 0xf640, 0xc82a,	0xf67f, 0xc82a,		0x21, 0
+	.dw 0xf6c0, 0xc82a,	0xf6ff, 0xc82a,		0x21, 0
+	.dw 0xf740, 0xc82a,	0xf77f, 0xc82a,		0x21, 0
+	.dw 0xf7c0, 0xc82a,	0xf7ff, 0xc82a,		0x21, 0
+	.dw 0xf840, 0xc82a,	0xf87f, 0xc82a,		0x21, 0
+	.dw 0xf8c0, 0xc82a,	0xf8ff, 0xc82a,		0x21, 0
+	.dw 0xf940, 0xc82a,	0xf97f, 0xc82a,		0x21, 0
+	.dw 0xf9c0, 0xc82a,	0x1fff, 0xc82b,		0x21, 0
+	.dw 0x2040, 0xc82b,	0x207f, 0xc82b,		0x21, 0
+	.dw 0x20c0, 0xc82b,	0x20ff, 0xc82b,		0x21, 0
+	.dw 0x2140, 0xc82b,	0x217f, 0xc82b,		0x21, 0
+	.dw 0x21c0, 0xc82b,	0x21ff, 0xc82b,		0x21, 0
+	.dw 0x2240, 0xc82b,	0x227f, 0xc82b,		0x21, 0
+	.dw 0x22c0, 0xc82b,	0x22ff, 0xc82b,		0x21, 0
+	.dw 0x2340, 0xc82b,	0x237f, 0xc82b,		0x21, 0
+	.dw 0x23c0, 0xc82b,	0x23ff, 0xc82b,		0x21, 0
+	.dw 0x2440, 0xc82b,	0x247f, 0xc82b,		0x21, 0
+	.dw 0x24c0, 0xc82b,	0x24ff, 0xc82b,		0x21, 0
+	.dw 0x2540, 0xc82b,	0x257f, 0xc82b,		0x21, 0
+	.dw 0x25c0, 0xc82b,	0x25ff, 0xc82b,		0x21, 0
+	.dw 0x2640, 0xc82b,	0x267f, 0xc82b,		0x21, 0
+	.dw 0x26c0, 0xc82b,	0x26ff, 0xc82b,		0x21, 0
+	.dw 0x2740, 0xc82b,	0x277f, 0xc82b,		0x21, 0
+	.dw 0x27c0, 0xc82b,	0x27ff, 0xc82b,		0x21, 0
+	.dw 0x2840, 0xc82b,	0x287f, 0xc82b,		0x21, 0
+	.dw 0x28c0, 0xc82b,	0x28ff, 0xc82b,		0x21, 0
+	.dw 0x2940, 0xc82b,	0x297f, 0xc82b,		0x21, 0
+	.dw 0x29c0, 0xc82b,	0x29ff, 0xc82b,		0x21, 0
+	.dw 0x2a40, 0xc82b,	0x2a7f, 0xc82b,		0x21, 0
+	.dw 0x2ac0, 0xc82b,	0x2aff, 0xc82b,		0x21, 0
+	.dw 0x2b40, 0xc82b,	0x2b7f, 0xc82b,		0x21, 0
+	.dw 0x2bc0, 0xc82b,	0x2bff, 0xc82b,		0x21, 0
+	.dw 0x2c40, 0xc82b,	0x2c7f, 0xc82b,		0x21, 0
+	.dw 0x2cc0, 0xc82b,	0x2cff, 0xc82b,		0x21, 0
+	.dw 0x2d40, 0xc82b,	0x2d7f, 0xc82b,		0x21, 0
+	.dw 0x2dc0, 0xc82b,	0x2dff, 0xc82b,		0x21, 0
+	.dw 0x2e40, 0xc82b,	0x2e7f, 0xc82b,		0x21, 0
+	.dw 0x2ec0, 0xc82b,	0x2eff, 0xc82b,		0x21, 0
+	.dw 0x2f40, 0xc82b,	0x2f7f, 0xc82b,		0x21, 0
+	.dw 0x2fc0, 0xc82b,	0x2fff, 0xc82b,		0x21, 0
+	.dw 0x3040, 0xc82b,	0x307f, 0xc82b,		0x21, 0
+	.dw 0x30c0, 0xc82b,	0x30ff, 0xc82b,		0x21, 0
+	.dw 0x3140, 0xc82b,	0x317f, 0xc82b,		0x21, 0
+	.dw 0x31c0, 0xc82b,	0x31ff, 0xc82b,		0x21, 0
+	.dw 0x3240, 0xc82b,	0x327f, 0xc82b,		0x21, 0
+	.dw 0x32c0, 0xc82b,	0x32ff, 0xc82b,		0x21, 0
+	.dw 0x3340, 0xc82b,	0x337f, 0xc82b,		0x21, 0
+	.dw 0x33c0, 0xc82b,	0x33ff, 0xc82b,		0x21, 0
+	.dw 0x3440, 0xc82b,	0x347f, 0xc82b,		0x21, 0
+	.dw 0x34c0, 0xc82b,	0x34ff, 0xc82b,		0x21, 0
+	.dw 0x3540, 0xc82b,	0x357f, 0xc82b,		0x21, 0
+	.dw 0x35c0, 0xc82b,	0x35ff, 0xc82b,		0x21, 0
+	.dw 0x3640, 0xc82b,	0x367f, 0xc82b,		0x21, 0
+	.dw 0x36c0, 0xc82b,	0x36ff, 0xc82b,		0x21, 0
+	.dw 0x3740, 0xc82b,	0x377f, 0xc82b,		0x21, 0
+	.dw 0x37c0, 0xc82b,	0x37ff, 0xc82b,		0x21, 0
+	.dw 0x3840, 0xc82b,	0x387f, 0xc82b,		0x21, 0
+	.dw 0x38c0, 0xc82b,	0x38ff, 0xc82b,		0x21, 0
+	.dw 0x3940, 0xc82b,	0x397f, 0xc82b,		0x21, 0
+	.dw 0x39c0, 0xc82b,	0xffff, 0xc82b,		0x21, 0
+	.dw 0x0040, 0xc82c,	0x007f, 0xc82c,		0x21, 0
+	.dw 0x00c0, 0xc82c,	0x00ff, 0xc82c,		0x21, 0
+	.dw 0x0140, 0xc82c,	0x017f, 0xc82c,		0x21, 0
+	.dw 0x01c0, 0xc82c,	0x01ff, 0xc82c,		0x21, 0
+	.dw 0x0240, 0xc82c,	0x027f, 0xc82c,		0x21, 0
+	.dw 0x02c0, 0xc82c,	0x02ff, 0xc82c,		0x21, 0
+	.dw 0x0340, 0xc82c,	0x037f, 0xc82c,		0x21, 0
+	.dw 0x03c0, 0xc82c,	0x03ff, 0xc82c,		0x21, 0
+	.dw 0x0440, 0xc82c,	0x047f, 0xc82c,		0x21, 0
+	.dw 0x04c0, 0xc82c,	0x04ff, 0xc82c,		0x21, 0
+	.dw 0x0540, 0xc82c,	0x057f, 0xc82c,		0x21, 0
+	.dw 0x05c0, 0xc82c,	0x05ff, 0xc82c,		0x21, 0
+	.dw 0x0640, 0xc82c,	0x067f, 0xc82c,		0x21, 0
+	.dw 0x06c0, 0xc82c,	0x06ff, 0xc82c,		0x21, 0
+	.dw 0x0740, 0xc82c,	0x077f, 0xc82c,		0x21, 0
+	.dw 0x07c0, 0xc82c,	0x07ff, 0xc82c,		0x21, 0
+	.dw 0x0840, 0xc82c,	0x087f, 0xc82c,		0x21, 0
+	.dw 0x08c0, 0xc82c,	0x08ff, 0xc82c,		0x21, 0
+	.dw 0x0940, 0xc82c,	0x097f, 0xc82c,		0x21, 0
+	.dw 0x09c0, 0xc82c,	0x09ff, 0xc82c,		0x21, 0
+	.dw 0x0a40, 0xc82c,	0x0a7f, 0xc82c,		0x21, 0
+	.dw 0x0ac0, 0xc82c,	0x0aff, 0xc82c,		0x21, 0
+	.dw 0x0b40, 0xc82c,	0x0b7f, 0xc82c,		0x21, 0
+	.dw 0x0bc0, 0xc82c,	0x0bff, 0xc82c,		0x21, 0
+	.dw 0x0c40, 0xc82c,	0x0c7f, 0xc82c,		0x21, 0
+	.dw 0x0cc0, 0xc82c,	0x0cff, 0xc82c,		0x21, 0
+	.dw 0x0d40, 0xc82c,	0x0d7f, 0xc82c,		0x21, 0
+	.dw 0x0dc0, 0xc82c,	0x0dff, 0xc82c,		0x21, 0
+	.dw 0x0e40, 0xc82c,	0x0e7f, 0xc82c,		0x21, 0
+	.dw 0x0ec0, 0xc82c,	0x0eff, 0xc82c,		0x21, 0
+	.dw 0x0f40, 0xc82c,	0x0f7f, 0xc82c,		0x21, 0
+	.dw 0x0fc0, 0xc82c,	0x0fff, 0xc82c,		0x21, 0
+	.dw 0x1040, 0xc82c,	0x107f, 0xc82c,		0x21, 0
+	.dw 0x10c0, 0xc82c,	0x10ff, 0xc82c,		0x21, 0
+	.dw 0x1140, 0xc82c,	0x117f, 0xc82c,		0x21, 0
+	.dw 0x11c0, 0xc82c,	0x11ff, 0xc82c,		0x21, 0
+	.dw 0x1240, 0xc82c,	0x127f, 0xc82c,		0x21, 0
+	.dw 0x12c0, 0xc82c,	0x12ff, 0xc82c,		0x21, 0
+	.dw 0x1340, 0xc82c,	0x137f, 0xc82c,		0x21, 0
+	.dw 0x13c0, 0xc82c,	0x13ff, 0xc82c,		0x21, 0
+	.dw 0x1440, 0xc82c,	0x147f, 0xc82c,		0x21, 0
+	.dw 0x14c0, 0xc82c,	0x14ff, 0xc82c,		0x21, 0
+	.dw 0x1540, 0xc82c,	0x157f, 0xc82c,		0x21, 0
+	.dw 0x15c0, 0xc82c,	0x15ff, 0xc82c,		0x21, 0
+	.dw 0x1640, 0xc82c,	0x167f, 0xc82c,		0x21, 0
+	.dw 0x16c0, 0xc82c,	0x16ff, 0xc82c,		0x21, 0
+	.dw 0x1740, 0xc82c,	0x177f, 0xc82c,		0x21, 0
+	.dw 0x17c0, 0xc82c,	0x17ff, 0xc82c,		0x21, 0
+	.dw 0x1840, 0xc82c,	0x187f, 0xc82c,		0x21, 0
+	.dw 0x18c0, 0xc82c,	0x18ff, 0xc82c,		0x21, 0
+	.dw 0x1940, 0xc82c,	0x197f, 0xc82c,		0x21, 0
+	.dw 0x19c0, 0xc82c,	0x1fff, 0xc82c,		0x21, 0
+	.dw 0x2040, 0xc82c,	0x207f, 0xc82c,		0x21, 0
+	.dw 0x20c0, 0xc82c,	0x20ff, 0xc82c,		0x21, 0
+	.dw 0x2140, 0xc82c,	0x217f, 0xc82c,		0x21, 0
+	.dw 0x21c0, 0xc82c,	0x21ff, 0xc82c,		0x21, 0
+	.dw 0x2240, 0xc82c,	0x227f, 0xc82c,		0x21, 0
+	.dw 0x22c0, 0xc82c,	0x22ff, 0xc82c,		0x21, 0
+	.dw 0x2340, 0xc82c,	0x237f, 0xc82c,		0x21, 0
+	.dw 0x23c0, 0xc82c,	0x23ff, 0xc82c,		0x21, 0
+	.dw 0x2440, 0xc82c,	0x247f, 0xc82c,		0x21, 0
+	.dw 0x24c0, 0xc82c,	0x24ff, 0xc82c,		0x21, 0
+	.dw 0x2540, 0xc82c,	0x257f, 0xc82c,		0x21, 0
+	.dw 0x25c0, 0xc82c,	0x25ff, 0xc82c,		0x21, 0
+	.dw 0x2640, 0xc82c,	0x267f, 0xc82c,		0x21, 0
+	.dw 0x26c0, 0xc82c,	0x26ff, 0xc82c,		0x21, 0
+	.dw 0x2740, 0xc82c,	0x277f, 0xc82c,		0x21, 0
+	.dw 0x27c0, 0xc82c,	0x27ff, 0xc82c,		0x21, 0
+	.dw 0x2840, 0xc82c,	0x287f, 0xc82c,		0x21, 0
+	.dw 0x28c0, 0xc82c,	0x28ff, 0xc82c,		0x21, 0
+	.dw 0x2940, 0xc82c,	0x297f, 0xc82c,		0x21, 0
+	.dw 0x29c0, 0xc82c,	0x29ff, 0xc82c,		0x21, 0
+	.dw 0x2a40, 0xc82c,	0x2a7f, 0xc82c,		0x21, 0
+	.dw 0x2ac0, 0xc82c,	0x2aff, 0xc82c,		0x21, 0
+	.dw 0x2b40, 0xc82c,	0x2b7f, 0xc82c,		0x21, 0
+	.dw 0x2bc0, 0xc82c,	0x2bff, 0xc82c,		0x21, 0
+	.dw 0x2c40, 0xc82c,	0x2c7f, 0xc82c,		0x21, 0
+	.dw 0x2cc0, 0xc82c,	0x2cff, 0xc82c,		0x21, 0
+	.dw 0x2d40, 0xc82c,	0x2d7f, 0xc82c,		0x21, 0
+	.dw 0x2dc0, 0xc82c,	0x2dff, 0xc82c,		0x21, 0
+	.dw 0x2e40, 0xc82c,	0x2e7f, 0xc82c,		0x21, 0
+	.dw 0x2ec0, 0xc82c,	0x2eff, 0xc82c,		0x21, 0
+	.dw 0x2f40, 0xc82c,	0x2f7f, 0xc82c,		0x21, 0
+	.dw 0x2fc0, 0xc82c,	0x2fff, 0xc82c,		0x21, 0
+	.dw 0x3040, 0xc82c,	0x307f, 0xc82c,		0x21, 0
+	.dw 0x30c0, 0xc82c,	0x30ff, 0xc82c,		0x21, 0
+	.dw 0x3140, 0xc82c,	0x317f, 0xc82c,		0x21, 0
+	.dw 0x31c0, 0xc82c,	0x31ff, 0xc82c,		0x21, 0
+	.dw 0x3240, 0xc82c,	0x327f, 0xc82c,		0x21, 0
+	.dw 0x32c0, 0xc82c,	0x32ff, 0xc82c,		0x21, 0
+	.dw 0x3340, 0xc82c,	0x337f, 0xc82c,		0x21, 0
+	.dw 0x33c0, 0xc82c,	0x33ff, 0xc82c,		0x21, 0
+	.dw 0x3440, 0xc82c,	0x347f, 0xc82c,		0x21, 0
+	.dw 0x34c0, 0xc82c,	0x34ff, 0xc82c,		0x21, 0
+	.dw 0x3540, 0xc82c,	0x357f, 0xc82c,		0x21, 0
+	.dw 0x35c0, 0xc82c,	0x35ff, 0xc82c,		0x21, 0
+	.dw 0x3640, 0xc82c,	0x367f, 0xc82c,		0x21, 0
+	.dw 0x36c0, 0xc82c,	0x36ff, 0xc82c,		0x21, 0
+	.dw 0x3740, 0xc82c,	0x377f, 0xc82c,		0x21, 0
+	.dw 0x37c0, 0xc82c,	0x37ff, 0xc82c,		0x21, 0
+	.dw 0x3840, 0xc82c,	0x387f, 0xc82c,		0x21, 0
+	.dw 0x38c0, 0xc82c,	0x38ff, 0xc82c,		0x21, 0
+	.dw 0x3940, 0xc82c,	0x397f, 0xc82c,		0x21, 0
+	.dw 0x39c0, 0xc82c,	0x3fff, 0xc82c,		0x21, 0
+	.dw 0x4040, 0xc82c,	0x407f, 0xc82c,		0x21, 0
+	.dw 0x40c0, 0xc82c,	0x40ff, 0xc82c,		0x21, 0
+	.dw 0x4140, 0xc82c,	0x417f, 0xc82c,		0x21, 0
+	.dw 0x41c0, 0xc82c,	0x41ff, 0xc82c,		0x21, 0
+	.dw 0x4240, 0xc82c,	0x427f, 0xc82c,		0x21, 0
+	.dw 0x42c0, 0xc82c,	0x42ff, 0xc82c,		0x21, 0
+	.dw 0x4340, 0xc82c,	0x437f, 0xc82c,		0x21, 0
+	.dw 0x43c0, 0xc82c,	0x43ff, 0xc82c,		0x21, 0
+	.dw 0x4440, 0xc82c,	0x447f, 0xc82c,		0x21, 0
+	.dw 0x44c0, 0xc82c,	0x44ff, 0xc82c,		0x21, 0
+	.dw 0x4540, 0xc82c,	0x457f, 0xc82c,		0x21, 0
+	.dw 0x45c0, 0xc82c,	0x45ff, 0xc82c,		0x21, 0
+	.dw 0x4640, 0xc82c,	0x467f, 0xc82c,		0x21, 0
+	.dw 0x46c0, 0xc82c,	0x46ff, 0xc82c,		0x21, 0
+	.dw 0x4740, 0xc82c,	0x477f, 0xc82c,		0x21, 0
+	.dw 0x47c0, 0xc82c,	0x47ff, 0xc82c,		0x21, 0
+	.dw 0x4840, 0xc82c,	0x487f, 0xc82c,		0x21, 0
+	.dw 0x48c0, 0xc82c,	0x48ff, 0xc82c,		0x21, 0
+	.dw 0x4940, 0xc82c,	0x497f, 0xc82c,		0x21, 0
+	.dw 0x49c0, 0xc82c,	0x49ff, 0xc82c,		0x21, 0
+	.dw 0x4a40, 0xc82c,	0x4a7f, 0xc82c,		0x21, 0
+	.dw 0x4ac0, 0xc82c,	0x4aff, 0xc82c,		0x21, 0
+	.dw 0x4b40, 0xc82c,	0x4b7f, 0xc82c,		0x21, 0
+	.dw 0x4bc0, 0xc82c,	0x4bff, 0xc82c,		0x21, 0
+	.dw 0x4c40, 0xc82c,	0x4c7f, 0xc82c,		0x21, 0
+	.dw 0x4cc0, 0xc82c,	0x4cff, 0xc82c,		0x21, 0
+	.dw 0x4d40, 0xc82c,	0x4d7f, 0xc82c,		0x21, 0
+	.dw 0x4dc0, 0xc82c,	0x4dff, 0xc82c,		0x21, 0
+	.dw 0x4e40, 0xc82c,	0x4e7f, 0xc82c,		0x21, 0
+	.dw 0x4ec0, 0xc82c,	0x4eff, 0xc82c,		0x21, 0
+	.dw 0x4f40, 0xc82c,	0x4f7f, 0xc82c,		0x21, 0
+	.dw 0x4fc0, 0xc82c,	0x4fff, 0xc82c,		0x21, 0
+	.dw 0x5040, 0xc82c,	0x507f, 0xc82c,		0x21, 0
+	.dw 0x50c0, 0xc82c,	0x50ff, 0xc82c,		0x21, 0
+	.dw 0x5140, 0xc82c,	0x517f, 0xc82c,		0x21, 0
+	.dw 0x51c0, 0xc82c,	0x51ff, 0xc82c,		0x21, 0
+	.dw 0x5240, 0xc82c,	0x527f, 0xc82c,		0x21, 0
+	.dw 0x52c0, 0xc82c,	0x52ff, 0xc82c,		0x21, 0
+	.dw 0x5340, 0xc82c,	0x537f, 0xc82c,		0x21, 0
+	.dw 0x53c0, 0xc82c,	0x53ff, 0xc82c,		0x21, 0
+	.dw 0x5440, 0xc82c,	0x547f, 0xc82c,		0x21, 0
+	.dw 0x54c0, 0xc82c,	0x54ff, 0xc82c,		0x21, 0
+	.dw 0x5540, 0xc82c,	0x557f, 0xc82c,		0x21, 0
+	.dw 0x55c0, 0xc82c,	0x55ff, 0xc82c,		0x21, 0
+	.dw 0x5640, 0xc82c,	0x567f, 0xc82c,		0x21, 0
+	.dw 0x56c0, 0xc82c,	0x56ff, 0xc82c,		0x21, 0
+	.dw 0x5740, 0xc82c,	0x577f, 0xc82c,		0x21, 0
+	.dw 0x57c0, 0xc82c,	0x57ff, 0xc82c,		0x21, 0
+	.dw 0x5840, 0xc82c,	0x587f, 0xc82c,		0x21, 0
+	.dw 0x58c0, 0xc82c,	0x58ff, 0xc82c,		0x21, 0
+	.dw 0x5940, 0xc82c,	0x597f, 0xc82c,		0x21, 0
+	.dw 0x59c0, 0xc82c,	0x5fff, 0xc82c,		0x21, 0
+	.dw 0x6040, 0xc82c,	0x607f, 0xc82c,		0x21, 0
+	.dw 0x60c0, 0xc82c,	0x60ff, 0xc82c,		0x21, 0
+	.dw 0x6140, 0xc82c,	0x617f, 0xc82c,		0x21, 0
+	.dw 0x61c0, 0xc82c,	0x61ff, 0xc82c,		0x21, 0
+	.dw 0x6240, 0xc82c,	0x627f, 0xc82c,		0x21, 0
+	.dw 0x62c0, 0xc82c,	0x62ff, 0xc82c,		0x21, 0
+	.dw 0x6340, 0xc82c,	0x637f, 0xc82c,		0x21, 0
+	.dw 0x63c0, 0xc82c,	0x63ff, 0xc82c,		0x21, 0
+	.dw 0x6440, 0xc82c,	0x647f, 0xc82c,		0x21, 0
+	.dw 0x64c0, 0xc82c,	0x64ff, 0xc82c,		0x21, 0
+	.dw 0x6540, 0xc82c,	0x657f, 0xc82c,		0x21, 0
+	.dw 0x65c0, 0xc82c,	0x65ff, 0xc82c,		0x21, 0
+	.dw 0x6640, 0xc82c,	0x667f, 0xc82c,		0x21, 0
+	.dw 0x66c0, 0xc82c,	0x66ff, 0xc82c,		0x21, 0
+	.dw 0x6740, 0xc82c,	0x677f, 0xc82c,		0x21, 0
+	.dw 0x67c0, 0xc82c,	0x67ff, 0xc82c,		0x21, 0
+	.dw 0x6840, 0xc82c,	0x687f, 0xc82c,		0x21, 0
+	.dw 0x68c0, 0xc82c,	0x68ff, 0xc82c,		0x21, 0
+	.dw 0x6940, 0xc82c,	0x697f, 0xc82c,		0x21, 0
+	.dw 0x69c0, 0xc82c,	0x69ff, 0xc82c,		0x21, 0
+	.dw 0x6a40, 0xc82c,	0x6a7f, 0xc82c,		0x21, 0
+	.dw 0x6ac0, 0xc82c,	0x6aff, 0xc82c,		0x21, 0
+	.dw 0x6b40, 0xc82c,	0x6b7f, 0xc82c,		0x21, 0
+	.dw 0x6bc0, 0xc82c,	0x6bff, 0xc82c,		0x21, 0
+	.dw 0x6c40, 0xc82c,	0x6c7f, 0xc82c,		0x21, 0
+	.dw 0x6cc0, 0xc82c,	0x6cff, 0xc82c,		0x21, 0
+	.dw 0x6d40, 0xc82c,	0x6d7f, 0xc82c,		0x21, 0
+	.dw 0x6dc0, 0xc82c,	0x6dff, 0xc82c,		0x21, 0
+	.dw 0x6e40, 0xc82c,	0x6e7f, 0xc82c,		0x21, 0
+	.dw 0x6ec0, 0xc82c,	0x6eff, 0xc82c,		0x21, 0
+	.dw 0x6f40, 0xc82c,	0x6f7f, 0xc82c,		0x21, 0
+	.dw 0x6fc0, 0xc82c,	0x6fff, 0xc82c,		0x21, 0
+	.dw 0x7040, 0xc82c,	0x707f, 0xc82c,		0x21, 0
+	.dw 0x70c0, 0xc82c,	0x70ff, 0xc82c,		0x21, 0
+	.dw 0x7140, 0xc82c,	0x717f, 0xc82c,		0x21, 0
+	.dw 0x71c0, 0xc82c,	0x71ff, 0xc82c,		0x21, 0
+	.dw 0x7240, 0xc82c,	0x727f, 0xc82c,		0x21, 0
+	.dw 0x72c0, 0xc82c,	0x72ff, 0xc82c,		0x21, 0
+	.dw 0x7340, 0xc82c,	0x737f, 0xc82c,		0x21, 0
+	.dw 0x73c0, 0xc82c,	0x73ff, 0xc82c,		0x21, 0
+	.dw 0x7440, 0xc82c,	0x747f, 0xc82c,		0x21, 0
+	.dw 0x74c0, 0xc82c,	0x74ff, 0xc82c,		0x21, 0
+	.dw 0x7540, 0xc82c,	0x757f, 0xc82c,		0x21, 0
+	.dw 0x75c0, 0xc82c,	0x75ff, 0xc82c,		0x21, 0
+	.dw 0x7640, 0xc82c,	0x767f, 0xc82c,		0x21, 0
+	.dw 0x76c0, 0xc82c,	0x76ff, 0xc82c,		0x21, 0
+	.dw 0x7740, 0xc82c,	0x777f, 0xc82c,		0x21, 0
+	.dw 0x77c0, 0xc82c,	0x77ff, 0xc82c,		0x21, 0
+	.dw 0x7840, 0xc82c,	0x787f, 0xc82c,		0x21, 0
+	.dw 0x78c0, 0xc82c,	0x78ff, 0xc82c,		0x21, 0
+	.dw 0x7940, 0xc82c,	0x797f, 0xc82c,		0x21, 0
+	.dw 0x79c0, 0xc82c,	0x7fff, 0xc82c,		0x21, 0
+	.dw 0x8040, 0xc82c,	0x807f, 0xc82c,		0x21, 0
+	.dw 0x80c0, 0xc82c,	0x80ff, 0xc82c,		0x21, 0
+	.dw 0x8140, 0xc82c,	0x817f, 0xc82c,		0x21, 0
+	.dw 0x81c0, 0xc82c,	0x81ff, 0xc82c,		0x21, 0
+	.dw 0x8240, 0xc82c,	0x827f, 0xc82c,		0x21, 0
+	.dw 0x82c0, 0xc82c,	0x82ff, 0xc82c,		0x21, 0
+	.dw 0x8340, 0xc82c,	0x837f, 0xc82c,		0x21, 0
+	.dw 0x83c0, 0xc82c,	0x83ff, 0xc82c,		0x21, 0
+	.dw 0x8440, 0xc82c,	0x847f, 0xc82c,		0x21, 0
+	.dw 0x84c0, 0xc82c,	0x84ff, 0xc82c,		0x21, 0
+	.dw 0x8540, 0xc82c,	0x857f, 0xc82c,		0x21, 0
+	.dw 0x85c0, 0xc82c,	0x85ff, 0xc82c,		0x21, 0
+	.dw 0x8640, 0xc82c,	0x867f, 0xc82c,		0x21, 0
+	.dw 0x86c0, 0xc82c,	0x86ff, 0xc82c,		0x21, 0
+	.dw 0x8740, 0xc82c,	0x877f, 0xc82c,		0x21, 0
+	.dw 0x87c0, 0xc82c,	0x87ff, 0xc82c,		0x21, 0
+	.dw 0x8840, 0xc82c,	0x887f, 0xc82c,		0x21, 0
+	.dw 0x88c0, 0xc82c,	0x88ff, 0xc82c,		0x21, 0
+	.dw 0x8940, 0xc82c,	0x897f, 0xc82c,		0x21, 0
+	.dw 0x89c0, 0xc82c,	0x89ff, 0xc82c,		0x21, 0
+	.dw 0x8a40, 0xc82c,	0x8a7f, 0xc82c,		0x21, 0
+	.dw 0x8ac0, 0xc82c,	0x8aff, 0xc82c,		0x21, 0
+	.dw 0x8b40, 0xc82c,	0x8b7f, 0xc82c,		0x21, 0
+	.dw 0x8bc0, 0xc82c,	0x8bff, 0xc82c,		0x21, 0
+	.dw 0x8c40, 0xc82c,	0x8c7f, 0xc82c,		0x21, 0
+	.dw 0x8cc0, 0xc82c,	0x8cff, 0xc82c,		0x21, 0
+	.dw 0x8d40, 0xc82c,	0x8d7f, 0xc82c,		0x21, 0
+	.dw 0x8dc0, 0xc82c,	0x8dff, 0xc82c,		0x21, 0
+	.dw 0x8e40, 0xc82c,	0x8e7f, 0xc82c,		0x21, 0
+	.dw 0x8ec0, 0xc82c,	0x8eff, 0xc82c,		0x21, 0
+	.dw 0x8f40, 0xc82c,	0x8f7f, 0xc82c,		0x21, 0
+	.dw 0x8fc0, 0xc82c,	0x8fff, 0xc82c,		0x21, 0
+	.dw 0x9040, 0xc82c,	0x907f, 0xc82c,		0x21, 0
+	.dw 0x90c0, 0xc82c,	0x90ff, 0xc82c,		0x21, 0
+	.dw 0x9140, 0xc82c,	0x917f, 0xc82c,		0x21, 0
+	.dw 0x91c0, 0xc82c,	0x91ff, 0xc82c,		0x21, 0
+	.dw 0x9240, 0xc82c,	0x927f, 0xc82c,		0x21, 0
+	.dw 0x92c0, 0xc82c,	0x92ff, 0xc82c,		0x21, 0
+	.dw 0x9340, 0xc82c,	0x937f, 0xc82c,		0x21, 0
+	.dw 0x93c0, 0xc82c,	0x93ff, 0xc82c,		0x21, 0
+	.dw 0x9440, 0xc82c,	0x947f, 0xc82c,		0x21, 0
+	.dw 0x94c0, 0xc82c,	0x94ff, 0xc82c,		0x21, 0
+	.dw 0x9540, 0xc82c,	0x957f, 0xc82c,		0x21, 0
+	.dw 0x95c0, 0xc82c,	0x95ff, 0xc82c,		0x21, 0
+	.dw 0x9640, 0xc82c,	0x967f, 0xc82c,		0x21, 0
+	.dw 0x96c0, 0xc82c,	0x96ff, 0xc82c,		0x21, 0
+	.dw 0x9740, 0xc82c,	0x977f, 0xc82c,		0x21, 0
+	.dw 0x97c0, 0xc82c,	0x97ff, 0xc82c,		0x21, 0
+	.dw 0x9840, 0xc82c,	0x987f, 0xc82c,		0x21, 0
+	.dw 0x98c0, 0xc82c,	0x98ff, 0xc82c,		0x21, 0
+	.dw 0x9940, 0xc82c,	0x997f, 0xc82c,		0x21, 0
+	.dw 0x99c0, 0xc82c,	0x9fff, 0xc82c,		0x21, 0
+	.dw 0xa040, 0xc82c,	0xa07f, 0xc82c,		0x21, 0
+	.dw 0xa0c0, 0xc82c,	0xa0ff, 0xc82c,		0x21, 0
+	.dw 0xa140, 0xc82c,	0xa17f, 0xc82c,		0x21, 0
+	.dw 0xa1c0, 0xc82c,	0xa1ff, 0xc82c,		0x21, 0
+	.dw 0xa240, 0xc82c,	0xa27f, 0xc82c,		0x21, 0
+	.dw 0xa2c0, 0xc82c,	0xa2ff, 0xc82c,		0x21, 0
+	.dw 0xa340, 0xc82c,	0xa37f, 0xc82c,		0x21, 0
+	.dw 0xa3c0, 0xc82c,	0xa3ff, 0xc82c,		0x21, 0
+	.dw 0xa440, 0xc82c,	0xa47f, 0xc82c,		0x21, 0
+	.dw 0xa4c0, 0xc82c,	0xa4ff, 0xc82c,		0x21, 0
+	.dw 0xa540, 0xc82c,	0xa57f, 0xc82c,		0x21, 0
+	.dw 0xa5c0, 0xc82c,	0xa5ff, 0xc82c,		0x21, 0
+	.dw 0xa640, 0xc82c,	0xa67f, 0xc82c,		0x21, 0
+	.dw 0xa6c0, 0xc82c,	0xa6ff, 0xc82c,		0x21, 0
+	.dw 0xa740, 0xc82c,	0xa77f, 0xc82c,		0x21, 0
+	.dw 0xa7c0, 0xc82c,	0xa7ff, 0xc82c,		0x21, 0
+	.dw 0xa840, 0xc82c,	0xa87f, 0xc82c,		0x21, 0
+	.dw 0xa8c0, 0xc82c,	0xa8ff, 0xc82c,		0x21, 0
+	.dw 0xa940, 0xc82c,	0xa97f, 0xc82c,		0x21, 0
+	.dw 0xa9c0, 0xc82c,	0xa9ff, 0xc82c,		0x21, 0
+	.dw 0xaa40, 0xc82c,	0xaa7f, 0xc82c,		0x21, 0
+	.dw 0xaac0, 0xc82c,	0xaaff, 0xc82c,		0x21, 0
+	.dw 0xab40, 0xc82c,	0xab7f, 0xc82c,		0x21, 0
+	.dw 0xabc0, 0xc82c,	0xabff, 0xc82c,		0x21, 0
+	.dw 0xac40, 0xc82c,	0xac7f, 0xc82c,		0x21, 0
+	.dw 0xacc0, 0xc82c,	0xacff, 0xc82c,		0x21, 0
+	.dw 0xad40, 0xc82c,	0xad7f, 0xc82c,		0x21, 0
+	.dw 0xadc0, 0xc82c,	0xadff, 0xc82c,		0x21, 0
+	.dw 0xae40, 0xc82c,	0xae7f, 0xc82c,		0x21, 0
+	.dw 0xaec0, 0xc82c,	0xaeff, 0xc82c,		0x21, 0
+	.dw 0xaf40, 0xc82c,	0xaf7f, 0xc82c,		0x21, 0
+	.dw 0xafc0, 0xc82c,	0xafff, 0xc82c,		0x21, 0
+	.dw 0xb040, 0xc82c,	0xb07f, 0xc82c,		0x21, 0
+	.dw 0xb0c0, 0xc82c,	0xb0ff, 0xc82c,		0x21, 0
+	.dw 0xb140, 0xc82c,	0xb17f, 0xc82c,		0x21, 0
+	.dw 0xb1c0, 0xc82c,	0xb1ff, 0xc82c,		0x21, 0
+	.dw 0xb240, 0xc82c,	0xb27f, 0xc82c,		0x21, 0
+	.dw 0xb2c0, 0xc82c,	0xb2ff, 0xc82c,		0x21, 0
+	.dw 0xb340, 0xc82c,	0xb37f, 0xc82c,		0x21, 0
+	.dw 0xb3c0, 0xc82c,	0xb3ff, 0xc82c,		0x21, 0
+	.dw 0xb440, 0xc82c,	0xb47f, 0xc82c,		0x21, 0
+	.dw 0xb4c0, 0xc82c,	0xb4ff, 0xc82c,		0x21, 0
+	.dw 0xb540, 0xc82c,	0xb57f, 0xc82c,		0x21, 0
+	.dw 0xb5c0, 0xc82c,	0xb5ff, 0xc82c,		0x21, 0
+	.dw 0xb640, 0xc82c,	0xb67f, 0xc82c,		0x21, 0
+	.dw 0xb6c0, 0xc82c,	0xb6ff, 0xc82c,		0x21, 0
+	.dw 0xb740, 0xc82c,	0xb77f, 0xc82c,		0x21, 0
+	.dw 0xb7c0, 0xc82c,	0xb7ff, 0xc82c,		0x21, 0
+	.dw 0xb840, 0xc82c,	0xb87f, 0xc82c,		0x21, 0
+	.dw 0xb8c0, 0xc82c,	0xb8ff, 0xc82c,		0x21, 0
+	.dw 0xb940, 0xc82c,	0xb97f, 0xc82c,		0x21, 0
+	.dw 0xb9c0, 0xc82c,	0xbfff, 0xc82c,		0x21, 0
+	.dw 0xc040, 0xc82c,	0xc07f, 0xc82c,		0x21, 0
+	.dw 0xc0c0, 0xc82c,	0xc0ff, 0xc82c,		0x21, 0
+	.dw 0xc140, 0xc82c,	0xc17f, 0xc82c,		0x21, 0
+	.dw 0xc1c0, 0xc82c,	0xc1ff, 0xc82c,		0x21, 0
+	.dw 0xc240, 0xc82c,	0xc27f, 0xc82c,		0x21, 0
+	.dw 0xc2c0, 0xc82c,	0xc2ff, 0xc82c,		0x21, 0
+	.dw 0xc340, 0xc82c,	0xc37f, 0xc82c,		0x21, 0
+	.dw 0xc3c0, 0xc82c,	0xc3ff, 0xc82c,		0x21, 0
+	.dw 0xc440, 0xc82c,	0xc47f, 0xc82c,		0x21, 0
+	.dw 0xc4c0, 0xc82c,	0xc4ff, 0xc82c,		0x21, 0
+	.dw 0xc540, 0xc82c,	0xc57f, 0xc82c,		0x21, 0
+	.dw 0xc5c0, 0xc82c,	0xc5ff, 0xc82c,		0x21, 0
+	.dw 0xc640, 0xc82c,	0xc67f, 0xc82c,		0x21, 0
+	.dw 0xc6c0, 0xc82c,	0xc6ff, 0xc82c,		0x21, 0
+	.dw 0xc740, 0xc82c,	0xc77f, 0xc82c,		0x21, 0
+	.dw 0xc7c0, 0xc82c,	0xc7ff, 0xc82c,		0x21, 0
+	.dw 0xc840, 0xc82c,	0xc87f, 0xc82c,		0x21, 0
+	.dw 0xc8c0, 0xc82c,	0xc8ff, 0xc82c,		0x21, 0
+	.dw 0xc940, 0xc82c,	0xc97f, 0xc82c,		0x21, 0
+	.dw 0xc9c0, 0xc82c,	0xc9ff, 0xc82c,		0x21, 0
+	.dw 0xca40, 0xc82c,	0xca7f, 0xc82c,		0x21, 0
+	.dw 0xcac0, 0xc82c,	0xcaff, 0xc82c,		0x21, 0
+	.dw 0xcb40, 0xc82c,	0xcb7f, 0xc82c,		0x21, 0
+	.dw 0xcbc0, 0xc82c,	0xcbff, 0xc82c,		0x21, 0
+	.dw 0xcc40, 0xc82c,	0xcc7f, 0xc82c,		0x21, 0
+	.dw 0xccc0, 0xc82c,	0xccff, 0xc82c,		0x21, 0
+	.dw 0xcd40, 0xc82c,	0xcd7f, 0xc82c,		0x21, 0
+	.dw 0xcdc0, 0xc82c,	0xcdff, 0xc82c,		0x21, 0
+	.dw 0xce40, 0xc82c,	0xce7f, 0xc82c,		0x21, 0
+	.dw 0xcec0, 0xc82c,	0xceff, 0xc82c,		0x21, 0
+	.dw 0xcf40, 0xc82c,	0xcf7f, 0xc82c,		0x21, 0
+	.dw 0xcfc0, 0xc82c,	0xcfff, 0xc82c,		0x21, 0
+	.dw 0xd040, 0xc82c,	0xd07f, 0xc82c,		0x21, 0
+	.dw 0xd0c0, 0xc82c,	0xd0ff, 0xc82c,		0x21, 0
+	.dw 0xd140, 0xc82c,	0xd17f, 0xc82c,		0x21, 0
+	.dw 0xd1c0, 0xc82c,	0xd1ff, 0xc82c,		0x21, 0
+	.dw 0xd240, 0xc82c,	0xd27f, 0xc82c,		0x21, 0
+	.dw 0xd2c0, 0xc82c,	0xd2ff, 0xc82c,		0x21, 0
+	.dw 0xd340, 0xc82c,	0xd37f, 0xc82c,		0x21, 0
+	.dw 0xd3c0, 0xc82c,	0xd3ff, 0xc82c,		0x21, 0
+	.dw 0xd440, 0xc82c,	0xd47f, 0xc82c,		0x21, 0
+	.dw 0xd4c0, 0xc82c,	0xd4ff, 0xc82c,		0x21, 0
+	.dw 0xd540, 0xc82c,	0xd57f, 0xc82c,		0x21, 0
+	.dw 0xd5c0, 0xc82c,	0xd5ff, 0xc82c,		0x21, 0
+	.dw 0xd640, 0xc82c,	0xd67f, 0xc82c,		0x21, 0
+	.dw 0xd6c0, 0xc82c,	0xd6ff, 0xc82c,		0x21, 0
+	.dw 0xd740, 0xc82c,	0xd77f, 0xc82c,		0x21, 0
+	.dw 0xd7c0, 0xc82c,	0xd7ff, 0xc82c,		0x21, 0
+	.dw 0xd840, 0xc82c,	0xd87f, 0xc82c,		0x21, 0
+	.dw 0xd8c0, 0xc82c,	0xd8ff, 0xc82c,		0x21, 0
+	.dw 0xd940, 0xc82c,	0xd97f, 0xc82c,		0x21, 0
+	.dw 0xd9c0, 0xc82c,	0xdfff, 0xc82c,		0x21, 0
+	.dw 0xe040, 0xc82c,	0xe07f, 0xc82c,		0x21, 0
+	.dw 0xe0c0, 0xc82c,	0xe0ff, 0xc82c,		0x21, 0
+	.dw 0xe140, 0xc82c,	0xe17f, 0xc82c,		0x21, 0
+	.dw 0xe1c0, 0xc82c,	0xe1ff, 0xc82c,		0x21, 0
+	.dw 0xe240, 0xc82c,	0xe27f, 0xc82c,		0x21, 0
+	.dw 0xe2c0, 0xc82c,	0xe2ff, 0xc82c,		0x21, 0
+	.dw 0xe340, 0xc82c,	0xe37f, 0xc82c,		0x21, 0
+	.dw 0xe3c0, 0xc82c,	0xe3ff, 0xc82c,		0x21, 0
+	.dw 0xe440, 0xc82c,	0xe47f, 0xc82c,		0x21, 0
+	.dw 0xe4c0, 0xc82c,	0xe4ff, 0xc82c,		0x21, 0
+	.dw 0xe540, 0xc82c,	0xe57f, 0xc82c,		0x21, 0
+	.dw 0xe5c0, 0xc82c,	0xe5ff, 0xc82c,		0x21, 0
+	.dw 0xe640, 0xc82c,	0xe67f, 0xc82c,		0x21, 0
+	.dw 0xe6c0, 0xc82c,	0xe6ff, 0xc82c,		0x21, 0
+	.dw 0xe740, 0xc82c,	0xe77f, 0xc82c,		0x21, 0
+	.dw 0xe7c0, 0xc82c,	0xe7ff, 0xc82c,		0x21, 0
+	.dw 0xe840, 0xc82c,	0xe87f, 0xc82c,		0x21, 0
+	.dw 0xe8c0, 0xc82c,	0xe8ff, 0xc82c,		0x21, 0
+	.dw 0xe940, 0xc82c,	0xe97f, 0xc82c,		0x21, 0
+	.dw 0xe9c0, 0xc82c,	0xe9ff, 0xc82c,		0x21, 0
+	.dw 0xea40, 0xc82c,	0xea7f, 0xc82c,		0x21, 0
+	.dw 0xeac0, 0xc82c,	0xeaff, 0xc82c,		0x21, 0
+	.dw 0xeb40, 0xc82c,	0xeb7f, 0xc82c,		0x21, 0
+	.dw 0xebc0, 0xc82c,	0xebff, 0xc82c,		0x21, 0
+	.dw 0xec40, 0xc82c,	0xec7f, 0xc82c,		0x21, 0
+	.dw 0xecc0, 0xc82c,	0xecff, 0xc82c,		0x21, 0
+	.dw 0xed40, 0xc82c,	0xed7f, 0xc82c,		0x21, 0
+	.dw 0xedc0, 0xc82c,	0xedff, 0xc82c,		0x21, 0
+	.dw 0xee40, 0xc82c,	0xee7f, 0xc82c,		0x21, 0
+	.dw 0xeec0, 0xc82c,	0xeeff, 0xc82c,		0x21, 0
+	.dw 0xef40, 0xc82c,	0xef7f, 0xc82c,		0x21, 0
+	.dw 0xefc0, 0xc82c,	0xefff, 0xc82c,		0x21, 0
+	.dw 0xf040, 0xc82c,	0xf07f, 0xc82c,		0x21, 0
+	.dw 0xf0c0, 0xc82c,	0xf0ff, 0xc82c,		0x21, 0
+	.dw 0xf140, 0xc82c,	0xf17f, 0xc82c,		0x21, 0
+	.dw 0xf1c0, 0xc82c,	0xf1ff, 0xc82c,		0x21, 0
+	.dw 0xf240, 0xc82c,	0xf27f, 0xc82c,		0x21, 0
+	.dw 0xf2c0, 0xc82c,	0xf2ff, 0xc82c,		0x21, 0
+	.dw 0xf340, 0xc82c,	0xf37f, 0xc82c,		0x21, 0
+	.dw 0xf3c0, 0xc82c,	0xf3ff, 0xc82c,		0x21, 0
+	.dw 0xf440, 0xc82c,	0xf47f, 0xc82c,		0x21, 0
+	.dw 0xf4c0, 0xc82c,	0xf4ff, 0xc82c,		0x21, 0
+	.dw 0xf540, 0xc82c,	0xf57f, 0xc82c,		0x21, 0
+	.dw 0xf5c0, 0xc82c,	0xf5ff, 0xc82c,		0x21, 0
+	.dw 0xf640, 0xc82c,	0xf67f, 0xc82c,		0x21, 0
+	.dw 0xf6c0, 0xc82c,	0xf6ff, 0xc82c,		0x21, 0
+	.dw 0xf740, 0xc82c,	0xf77f, 0xc82c,		0x21, 0
+	.dw 0xf7c0, 0xc82c,	0xf7ff, 0xc82c,		0x21, 0
+	.dw 0xf840, 0xc82c,	0xf87f, 0xc82c,		0x21, 0
+	.dw 0xf8c0, 0xc82c,	0xf8ff, 0xc82c,		0x21, 0
+	.dw 0xf940, 0xc82c,	0xf97f, 0xc82c,		0x21, 0
+	.dw 0xf9c0, 0xc82c,	0xffff, 0xc82c,		0x21, 0
+	.dw 0x0040, 0xc82d,	0x007f, 0xc82d,		0x21, 0
+	.dw 0x00c0, 0xc82d,	0x00ff, 0xc82d,		0x21, 0
+	.dw 0x0140, 0xc82d,	0x017f, 0xc82d,		0x21, 0
+	.dw 0x01c0, 0xc82d,	0x01ff, 0xc82d,		0x21, 0
+	.dw 0x0240, 0xc82d,	0x027f, 0xc82d,		0x21, 0
+	.dw 0x02c0, 0xc82d,	0x02ff, 0xc82d,		0x21, 0
+	.dw 0x0340, 0xc82d,	0x037f, 0xc82d,		0x21, 0
+	.dw 0x03c0, 0xc82d,	0x03ff, 0xc82d,		0x21, 0
+	.dw 0x0440, 0xc82d,	0x047f, 0xc82d,		0x21, 0
+	.dw 0x04c0, 0xc82d,	0x04ff, 0xc82d,		0x21, 0
+	.dw 0x0540, 0xc82d,	0x057f, 0xc82d,		0x21, 0
+	.dw 0x05c0, 0xc82d,	0x05ff, 0xc82d,		0x21, 0
+	.dw 0x0640, 0xc82d,	0x067f, 0xc82d,		0x21, 0
+	.dw 0x06c0, 0xc82d,	0x06ff, 0xc82d,		0x21, 0
+	.dw 0x0740, 0xc82d,	0x077f, 0xc82d,		0x21, 0
+	.dw 0x07c0, 0xc82d,	0x07ff, 0xc82d,		0x21, 0
+	.dw 0x0840, 0xc82d,	0x087f, 0xc82d,		0x21, 0
+	.dw 0x08c0, 0xc82d,	0x08ff, 0xc82d,		0x21, 0
+	.dw 0x0940, 0xc82d,	0x097f, 0xc82d,		0x21, 0
+	.dw 0x09c0, 0xc82d,	0x09ff, 0xc82d,		0x21, 0
+	.dw 0x0a40, 0xc82d,	0x0a7f, 0xc82d,		0x21, 0
+	.dw 0x0ac0, 0xc82d,	0x0aff, 0xc82d,		0x21, 0
+	.dw 0x0b40, 0xc82d,	0x0b7f, 0xc82d,		0x21, 0
+	.dw 0x0bc0, 0xc82d,	0x0bff, 0xc82d,		0x21, 0
+	.dw 0x0c40, 0xc82d,	0x0c7f, 0xc82d,		0x21, 0
+	.dw 0x0cc0, 0xc82d,	0x0cff, 0xc82d,		0x21, 0
+	.dw 0x0d40, 0xc82d,	0x0d7f, 0xc82d,		0x21, 0
+	.dw 0x0dc0, 0xc82d,	0x0dff, 0xc82d,		0x21, 0
+	.dw 0x0e40, 0xc82d,	0x0e7f, 0xc82d,		0x21, 0
+	.dw 0x0ec0, 0xc82d,	0x0eff, 0xc82d,		0x21, 0
+	.dw 0x0f40, 0xc82d,	0x0f7f, 0xc82d,		0x21, 0
+	.dw 0x0fc0, 0xc82d,	0x0fff, 0xc82d,		0x21, 0
+	.dw 0x1040, 0xc82d,	0x107f, 0xc82d,		0x21, 0
+	.dw 0x10c0, 0xc82d,	0x10ff, 0xc82d,		0x21, 0
+	.dw 0x1140, 0xc82d,	0x117f, 0xc82d,		0x21, 0
+	.dw 0x11c0, 0xc82d,	0x11ff, 0xc82d,		0x21, 0
+	.dw 0x1240, 0xc82d,	0x127f, 0xc82d,		0x21, 0
+	.dw 0x12c0, 0xc82d,	0x12ff, 0xc82d,		0x21, 0
+	.dw 0x1340, 0xc82d,	0x137f, 0xc82d,		0x21, 0
+	.dw 0x13c0, 0xc82d,	0x13ff, 0xc82d,		0x21, 0
+	.dw 0x1440, 0xc82d,	0x147f, 0xc82d,		0x21, 0
+	.dw 0x14c0, 0xc82d,	0x14ff, 0xc82d,		0x21, 0
+	.dw 0x1540, 0xc82d,	0x157f, 0xc82d,		0x21, 0
+	.dw 0x15c0, 0xc82d,	0x15ff, 0xc82d,		0x21, 0
+	.dw 0x1640, 0xc82d,	0x167f, 0xc82d,		0x21, 0
+	.dw 0x16c0, 0xc82d,	0x16ff, 0xc82d,		0x21, 0
+	.dw 0x1740, 0xc82d,	0x177f, 0xc82d,		0x21, 0
+	.dw 0x17c0, 0xc82d,	0x17ff, 0xc82d,		0x21, 0
+	.dw 0x1840, 0xc82d,	0x187f, 0xc82d,		0x21, 0
+	.dw 0x18c0, 0xc82d,	0x18ff, 0xc82d,		0x21, 0
+	.dw 0x1940, 0xc82d,	0x197f, 0xc82d,		0x21, 0
+	.dw 0x19c0, 0xc82d,	0x1fff, 0xc82d,		0x21, 0
+	.dw 0x2040, 0xc82d,	0x207f, 0xc82d,		0x21, 0
+	.dw 0x20c0, 0xc82d,	0x20ff, 0xc82d,		0x21, 0
+	.dw 0x2140, 0xc82d,	0x217f, 0xc82d,		0x21, 0
+	.dw 0x21c0, 0xc82d,	0x21ff, 0xc82d,		0x21, 0
+	.dw 0x2240, 0xc82d,	0x227f, 0xc82d,		0x21, 0
+	.dw 0x22c0, 0xc82d,	0x22ff, 0xc82d,		0x21, 0
+	.dw 0x2340, 0xc82d,	0x237f, 0xc82d,		0x21, 0
+	.dw 0x23c0, 0xc82d,	0x23ff, 0xc82d,		0x21, 0
+	.dw 0x2440, 0xc82d,	0x247f, 0xc82d,		0x21, 0
+	.dw 0x24c0, 0xc82d,	0x24ff, 0xc82d,		0x21, 0
+	.dw 0x2540, 0xc82d,	0x257f, 0xc82d,		0x21, 0
+	.dw 0x25c0, 0xc82d,	0x25ff, 0xc82d,		0x21, 0
+	.dw 0x2640, 0xc82d,	0x267f, 0xc82d,		0x21, 0
+	.dw 0x26c0, 0xc82d,	0x26ff, 0xc82d,		0x21, 0
+	.dw 0x2740, 0xc82d,	0x277f, 0xc82d,		0x21, 0
+	.dw 0x27c0, 0xc82d,	0x27ff, 0xc82d,		0x21, 0
+	.dw 0x2840, 0xc82d,	0x287f, 0xc82d,		0x21, 0
+	.dw 0x28c0, 0xc82d,	0x28ff, 0xc82d,		0x21, 0
+	.dw 0x2940, 0xc82d,	0x297f, 0xc82d,		0x21, 0
+	.dw 0x29c0, 0xc82d,	0x29ff, 0xc82d,		0x21, 0
+	.dw 0x2a40, 0xc82d,	0x2a7f, 0xc82d,		0x21, 0
+	.dw 0x2ac0, 0xc82d,	0x2aff, 0xc82d,		0x21, 0
+	.dw 0x2b40, 0xc82d,	0x2b7f, 0xc82d,		0x21, 0
+	.dw 0x2bc0, 0xc82d,	0x2bff, 0xc82d,		0x21, 0
+	.dw 0x2c40, 0xc82d,	0x2c7f, 0xc82d,		0x21, 0
+	.dw 0x2cc0, 0xc82d,	0x2cff, 0xc82d,		0x21, 0
+	.dw 0x2d40, 0xc82d,	0x2d7f, 0xc82d,		0x21, 0
+	.dw 0x2dc0, 0xc82d,	0x2dff, 0xc82d,		0x21, 0
+	.dw 0x2e40, 0xc82d,	0x2e7f, 0xc82d,		0x21, 0
+	.dw 0x2ec0, 0xc82d,	0x2eff, 0xc82d,		0x21, 0
+	.dw 0x2f40, 0xc82d,	0x2f7f, 0xc82d,		0x21, 0
+	.dw 0x2fc0, 0xc82d,	0x2fff, 0xc82d,		0x21, 0
+	.dw 0x3040, 0xc82d,	0x307f, 0xc82d,		0x21, 0
+	.dw 0x30c0, 0xc82d,	0x30ff, 0xc82d,		0x21, 0
+	.dw 0x3140, 0xc82d,	0x317f, 0xc82d,		0x21, 0
+	.dw 0x31c0, 0xc82d,	0x31ff, 0xc82d,		0x21, 0
+	.dw 0x3240, 0xc82d,	0x327f, 0xc82d,		0x21, 0
+	.dw 0x32c0, 0xc82d,	0x32ff, 0xc82d,		0x21, 0
+	.dw 0x3340, 0xc82d,	0x337f, 0xc82d,		0x21, 0
+	.dw 0x33c0, 0xc82d,	0x33ff, 0xc82d,		0x21, 0
+	.dw 0x3440, 0xc82d,	0x347f, 0xc82d,		0x21, 0
+	.dw 0x34c0, 0xc82d,	0x34ff, 0xc82d,		0x21, 0
+	.dw 0x3540, 0xc82d,	0x357f, 0xc82d,		0x21, 0
+	.dw 0x35c0, 0xc82d,	0x35ff, 0xc82d,		0x21, 0
+	.dw 0x3640, 0xc82d,	0x367f, 0xc82d,		0x21, 0
+	.dw 0x36c0, 0xc82d,	0x36ff, 0xc82d,		0x21, 0
+	.dw 0x3740, 0xc82d,	0x377f, 0xc82d,		0x21, 0
+	.dw 0x37c0, 0xc82d,	0x37ff, 0xc82d,		0x21, 0
+	.dw 0x3840, 0xc82d,	0x387f, 0xc82d,		0x21, 0
+	.dw 0x38c0, 0xc82d,	0x38ff, 0xc82d,		0x21, 0
+	.dw 0x3940, 0xc82d,	0x397f, 0xc82d,		0x21, 0
+	.dw 0x39c0, 0xc82d,	0x3fff, 0xc82d,		0x21, 0
+	.dw 0x4040, 0xc82d,	0x407f, 0xc82d,		0x21, 0
+	.dw 0x40c0, 0xc82d,	0x40ff, 0xc82d,		0x21, 0
+	.dw 0x4140, 0xc82d,	0x417f, 0xc82d,		0x21, 0
+	.dw 0x41c0, 0xc82d,	0x41ff, 0xc82d,		0x21, 0
+	.dw 0x4240, 0xc82d,	0x427f, 0xc82d,		0x21, 0
+	.dw 0x42c0, 0xc82d,	0x42ff, 0xc82d,		0x21, 0
+	.dw 0x4340, 0xc82d,	0x437f, 0xc82d,		0x21, 0
+	.dw 0x43c0, 0xc82d,	0x43ff, 0xc82d,		0x21, 0
+	.dw 0x4440, 0xc82d,	0x447f, 0xc82d,		0x21, 0
+	.dw 0x44c0, 0xc82d,	0x44ff, 0xc82d,		0x21, 0
+	.dw 0x4540, 0xc82d,	0x457f, 0xc82d,		0x21, 0
+	.dw 0x45c0, 0xc82d,	0x45ff, 0xc82d,		0x21, 0
+	.dw 0x4640, 0xc82d,	0x467f, 0xc82d,		0x21, 0
+	.dw 0x46c0, 0xc82d,	0x46ff, 0xc82d,		0x21, 0
+	.dw 0x4740, 0xc82d,	0x477f, 0xc82d,		0x21, 0
+	.dw 0x47c0, 0xc82d,	0x47ff, 0xc82d,		0x21, 0
+	.dw 0x4840, 0xc82d,	0x487f, 0xc82d,		0x21, 0
+	.dw 0x48c0, 0xc82d,	0x48ff, 0xc82d,		0x21, 0
+	.dw 0x4940, 0xc82d,	0x497f, 0xc82d,		0x21, 0
+	.dw 0x49c0, 0xc82d,	0x49ff, 0xc82d,		0x21, 0
+	.dw 0x4a40, 0xc82d,	0x4a7f, 0xc82d,		0x21, 0
+	.dw 0x4ac0, 0xc82d,	0x4aff, 0xc82d,		0x21, 0
+	.dw 0x4b40, 0xc82d,	0x4b7f, 0xc82d,		0x21, 0
+	.dw 0x4bc0, 0xc82d,	0x4bff, 0xc82d,		0x21, 0
+	.dw 0x4c40, 0xc82d,	0x4c7f, 0xc82d,		0x21, 0
+	.dw 0x4cc0, 0xc82d,	0x4cff, 0xc82d,		0x21, 0
+	.dw 0x4d40, 0xc82d,	0x4d7f, 0xc82d,		0x21, 0
+	.dw 0x4dc0, 0xc82d,	0x4dff, 0xc82d,		0x21, 0
+	.dw 0x4e40, 0xc82d,	0x4e7f, 0xc82d,		0x21, 0
+	.dw 0x4ec0, 0xc82d,	0x4eff, 0xc82d,		0x21, 0
+	.dw 0x4f40, 0xc82d,	0x4f7f, 0xc82d,		0x21, 0
+	.dw 0x4fc0, 0xc82d,	0x4fff, 0xc82d,		0x21, 0
+	.dw 0x5040, 0xc82d,	0x507f, 0xc82d,		0x21, 0
+	.dw 0x50c0, 0xc82d,	0x50ff, 0xc82d,		0x21, 0
+	.dw 0x5140, 0xc82d,	0x517f, 0xc82d,		0x21, 0
+	.dw 0x51c0, 0xc82d,	0x51ff, 0xc82d,		0x21, 0
+	.dw 0x5240, 0xc82d,	0x527f, 0xc82d,		0x21, 0
+	.dw 0x52c0, 0xc82d,	0x52ff, 0xc82d,		0x21, 0
+	.dw 0x5340, 0xc82d,	0x537f, 0xc82d,		0x21, 0
+	.dw 0x53c0, 0xc82d,	0x53ff, 0xc82d,		0x21, 0
+	.dw 0x5440, 0xc82d,	0x547f, 0xc82d,		0x21, 0
+	.dw 0x54c0, 0xc82d,	0x54ff, 0xc82d,		0x21, 0
+	.dw 0x5540, 0xc82d,	0x557f, 0xc82d,		0x21, 0
+	.dw 0x55c0, 0xc82d,	0x55ff, 0xc82d,		0x21, 0
+	.dw 0x5640, 0xc82d,	0x567f, 0xc82d,		0x21, 0
+	.dw 0x56c0, 0xc82d,	0x56ff, 0xc82d,		0x21, 0
+	.dw 0x5740, 0xc82d,	0x577f, 0xc82d,		0x21, 0
+	.dw 0x57c0, 0xc82d,	0x57ff, 0xc82d,		0x21, 0
+	.dw 0x5840, 0xc82d,	0x587f, 0xc82d,		0x21, 0
+	.dw 0x58c0, 0xc82d,	0x58ff, 0xc82d,		0x21, 0
+	.dw 0x5940, 0xc82d,	0x597f, 0xc82d,		0x21, 0
+	.dw 0x59c0, 0xc82d,	0x5fff, 0xc82d,		0x21, 0
+	.dw 0x6040, 0xc82d,	0x607f, 0xc82d,		0x21, 0
+	.dw 0x60c0, 0xc82d,	0x60ff, 0xc82d,		0x21, 0
+	.dw 0x6140, 0xc82d,	0x617f, 0xc82d,		0x21, 0
+	.dw 0x61c0, 0xc82d,	0x61ff, 0xc82d,		0x21, 0
+	.dw 0x6240, 0xc82d,	0x627f, 0xc82d,		0x21, 0
+	.dw 0x62c0, 0xc82d,	0x62ff, 0xc82d,		0x21, 0
+	.dw 0x6340, 0xc82d,	0x637f, 0xc82d,		0x21, 0
+	.dw 0x63c0, 0xc82d,	0x63ff, 0xc82d,		0x21, 0
+	.dw 0x6440, 0xc82d,	0x647f, 0xc82d,		0x21, 0
+	.dw 0x64c0, 0xc82d,	0x64ff, 0xc82d,		0x21, 0
+	.dw 0x6540, 0xc82d,	0x657f, 0xc82d,		0x21, 0
+	.dw 0x65c0, 0xc82d,	0x65ff, 0xc82d,		0x21, 0
+	.dw 0x6640, 0xc82d,	0x667f, 0xc82d,		0x21, 0
+	.dw 0x66c0, 0xc82d,	0x66ff, 0xc82d,		0x21, 0
+	.dw 0x6740, 0xc82d,	0x677f, 0xc82d,		0x21, 0
+	.dw 0x67c0, 0xc82d,	0x67ff, 0xc82d,		0x21, 0
+	.dw 0x6840, 0xc82d,	0x687f, 0xc82d,		0x21, 0
+	.dw 0x68c0, 0xc82d,	0x68ff, 0xc82d,		0x21, 0
+	.dw 0x6940, 0xc82d,	0x697f, 0xc82d,		0x21, 0
+	.dw 0x69c0, 0xc82d,	0x69ff, 0xc82d,		0x21, 0
+	.dw 0x6a40, 0xc82d,	0x6a7f, 0xc82d,		0x21, 0
+	.dw 0x6ac0, 0xc82d,	0x6aff, 0xc82d,		0x21, 0
+	.dw 0x6b40, 0xc82d,	0x6b7f, 0xc82d,		0x21, 0
+	.dw 0x6bc0, 0xc82d,	0x6bff, 0xc82d,		0x21, 0
+	.dw 0x6c40, 0xc82d,	0x6c7f, 0xc82d,		0x21, 0
+	.dw 0x6cc0, 0xc82d,	0x6cff, 0xc82d,		0x21, 0
+	.dw 0x6d40, 0xc82d,	0x6d7f, 0xc82d,		0x21, 0
+	.dw 0x6dc0, 0xc82d,	0x6dff, 0xc82d,		0x21, 0
+	.dw 0x6e40, 0xc82d,	0x6e7f, 0xc82d,		0x21, 0
+	.dw 0x6ec0, 0xc82d,	0x6eff, 0xc82d,		0x21, 0
+	.dw 0x6f40, 0xc82d,	0x6f7f, 0xc82d,		0x21, 0
+	.dw 0x6fc0, 0xc82d,	0x6fff, 0xc82d,		0x21, 0
+	.dw 0x7040, 0xc82d,	0x707f, 0xc82d,		0x21, 0
+	.dw 0x70c0, 0xc82d,	0x70ff, 0xc82d,		0x21, 0
+	.dw 0x7140, 0xc82d,	0x717f, 0xc82d,		0x21, 0
+	.dw 0x71c0, 0xc82d,	0x71ff, 0xc82d,		0x21, 0
+	.dw 0x7240, 0xc82d,	0x727f, 0xc82d,		0x21, 0
+	.dw 0x72c0, 0xc82d,	0x72ff, 0xc82d,		0x21, 0
+	.dw 0x7340, 0xc82d,	0x737f, 0xc82d,		0x21, 0
+	.dw 0x73c0, 0xc82d,	0x73ff, 0xc82d,		0x21, 0
+	.dw 0x7440, 0xc82d,	0x747f, 0xc82d,		0x21, 0
+	.dw 0x74c0, 0xc82d,	0x74ff, 0xc82d,		0x21, 0
+	.dw 0x7540, 0xc82d,	0x757f, 0xc82d,		0x21, 0
+	.dw 0x75c0, 0xc82d,	0x75ff, 0xc82d,		0x21, 0
+	.dw 0x7640, 0xc82d,	0x767f, 0xc82d,		0x21, 0
+	.dw 0x76c0, 0xc82d,	0x76ff, 0xc82d,		0x21, 0
+	.dw 0x7740, 0xc82d,	0x777f, 0xc82d,		0x21, 0
+	.dw 0x77c0, 0xc82d,	0x77ff, 0xc82d,		0x21, 0
+	.dw 0x7840, 0xc82d,	0x787f, 0xc82d,		0x21, 0
+	.dw 0x78c0, 0xc82d,	0x78ff, 0xc82d,		0x21, 0
+	.dw 0x7940, 0xc82d,	0x797f, 0xc82d,		0x21, 0
+	.dw 0x79c0, 0xc82d,	0x7fff, 0xc82d,		0x21, 0
+	.dw 0x8040, 0xc82d,	0x807f, 0xc82d,		0x21, 0
+	.dw 0x80c0, 0xc82d,	0x80ff, 0xc82d,		0x21, 0
+	.dw 0x8140, 0xc82d,	0x817f, 0xc82d,		0x21, 0
+	.dw 0x81c0, 0xc82d,	0x81ff, 0xc82d,		0x21, 0
+	.dw 0x8240, 0xc82d,	0x827f, 0xc82d,		0x21, 0
+	.dw 0x82c0, 0xc82d,	0x82ff, 0xc82d,		0x21, 0
+	.dw 0x8340, 0xc82d,	0x837f, 0xc82d,		0x21, 0
+	.dw 0x83c0, 0xc82d,	0x83ff, 0xc82d,		0x21, 0
+	.dw 0x8440, 0xc82d,	0x847f, 0xc82d,		0x21, 0
+	.dw 0x84c0, 0xc82d,	0x84ff, 0xc82d,		0x21, 0
+	.dw 0x8540, 0xc82d,	0x857f, 0xc82d,		0x21, 0
+	.dw 0x85c0, 0xc82d,	0x85ff, 0xc82d,		0x21, 0
+	.dw 0x8640, 0xc82d,	0x867f, 0xc82d,		0x21, 0
+	.dw 0x86c0, 0xc82d,	0x86ff, 0xc82d,		0x21, 0
+	.dw 0x8740, 0xc82d,	0x877f, 0xc82d,		0x21, 0
+	.dw 0x87c0, 0xc82d,	0x87ff, 0xc82d,		0x21, 0
+	.dw 0x8840, 0xc82d,	0x887f, 0xc82d,		0x21, 0
+	.dw 0x88c0, 0xc82d,	0x88ff, 0xc82d,		0x21, 0
+	.dw 0x8940, 0xc82d,	0x897f, 0xc82d,		0x21, 0
+	.dw 0x89c0, 0xc82d,	0x89ff, 0xc82d,		0x21, 0
+	.dw 0x8a40, 0xc82d,	0x8a7f, 0xc82d,		0x21, 0
+	.dw 0x8ac0, 0xc82d,	0x8aff, 0xc82d,		0x21, 0
+	.dw 0x8b40, 0xc82d,	0x8b7f, 0xc82d,		0x21, 0
+	.dw 0x8bc0, 0xc82d,	0x8bff, 0xc82d,		0x21, 0
+	.dw 0x8c40, 0xc82d,	0x8c7f, 0xc82d,		0x21, 0
+	.dw 0x8cc0, 0xc82d,	0x8cff, 0xc82d,		0x21, 0
+	.dw 0x8d40, 0xc82d,	0x8d7f, 0xc82d,		0x21, 0
+	.dw 0x8dc0, 0xc82d,	0x8dff, 0xc82d,		0x21, 0
+	.dw 0x8e40, 0xc82d,	0x8e7f, 0xc82d,		0x21, 0
+	.dw 0x8ec0, 0xc82d,	0x8eff, 0xc82d,		0x21, 0
+	.dw 0x8f40, 0xc82d,	0x8f7f, 0xc82d,		0x21, 0
+	.dw 0x8fc0, 0xc82d,	0x8fff, 0xc82d,		0x21, 0
+	.dw 0x9040, 0xc82d,	0x907f, 0xc82d,		0x21, 0
+	.dw 0x90c0, 0xc82d,	0x90ff, 0xc82d,		0x21, 0
+	.dw 0x9140, 0xc82d,	0x917f, 0xc82d,		0x21, 0
+	.dw 0x91c0, 0xc82d,	0x91ff, 0xc82d,		0x21, 0
+	.dw 0x9240, 0xc82d,	0x927f, 0xc82d,		0x21, 0
+	.dw 0x92c0, 0xc82d,	0x92ff, 0xc82d,		0x21, 0
+	.dw 0x9340, 0xc82d,	0x937f, 0xc82d,		0x21, 0
+	.dw 0x93c0, 0xc82d,	0x93ff, 0xc82d,		0x21, 0
+	.dw 0x9440, 0xc82d,	0x947f, 0xc82d,		0x21, 0
+	.dw 0x94c0, 0xc82d,	0x94ff, 0xc82d,		0x21, 0
+	.dw 0x9540, 0xc82d,	0x957f, 0xc82d,		0x21, 0
+	.dw 0x95c0, 0xc82d,	0x95ff, 0xc82d,		0x21, 0
+	.dw 0x9640, 0xc82d,	0x967f, 0xc82d,		0x21, 0
+	.dw 0x96c0, 0xc82d,	0x96ff, 0xc82d,		0x21, 0
+	.dw 0x9740, 0xc82d,	0x977f, 0xc82d,		0x21, 0
+	.dw 0x97c0, 0xc82d,	0x97ff, 0xc82d,		0x21, 0
+	.dw 0x9840, 0xc82d,	0x987f, 0xc82d,		0x21, 0
+	.dw 0x98c0, 0xc82d,	0x98ff, 0xc82d,		0x21, 0
+	.dw 0x9940, 0xc82d,	0x997f, 0xc82d,		0x21, 0
+	.dw 0x99c0, 0xc82d,	0x9fff, 0xc82d,		0x21, 0
+	.dw 0xa040, 0xc82d,	0xa07f, 0xc82d,		0x21, 0
+	.dw 0xa0c0, 0xc82d,	0xa0ff, 0xc82d,		0x21, 0
+	.dw 0xa140, 0xc82d,	0xa17f, 0xc82d,		0x21, 0
+	.dw 0xa1c0, 0xc82d,	0xa1ff, 0xc82d,		0x21, 0
+	.dw 0xa240, 0xc82d,	0xa27f, 0xc82d,		0x21, 0
+	.dw 0xa2c0, 0xc82d,	0xa2ff, 0xc82d,		0x21, 0
+	.dw 0xa340, 0xc82d,	0xa37f, 0xc82d,		0x21, 0
+	.dw 0xa3c0, 0xc82d,	0xa3ff, 0xc82d,		0x21, 0
+	.dw 0xa440, 0xc82d,	0xa47f, 0xc82d,		0x21, 0
+	.dw 0xa4c0, 0xc82d,	0xa4ff, 0xc82d,		0x21, 0
+	.dw 0xa540, 0xc82d,	0xa57f, 0xc82d,		0x21, 0
+	.dw 0xa5c0, 0xc82d,	0xa5ff, 0xc82d,		0x21, 0
+	.dw 0xa640, 0xc82d,	0xa67f, 0xc82d,		0x21, 0
+	.dw 0xa6c0, 0xc82d,	0xa6ff, 0xc82d,		0x21, 0
+	.dw 0xa740, 0xc82d,	0xa77f, 0xc82d,		0x21, 0
+	.dw 0xa7c0, 0xc82d,	0xa7ff, 0xc82d,		0x21, 0
+	.dw 0xa840, 0xc82d,	0xa87f, 0xc82d,		0x21, 0
+	.dw 0xa8c0, 0xc82d,	0xa8ff, 0xc82d,		0x21, 0
+	.dw 0xa940, 0xc82d,	0xa97f, 0xc82d,		0x21, 0
+	.dw 0xa9c0, 0xc82d,	0xa9ff, 0xc82d,		0x21, 0
+	.dw 0xaa40, 0xc82d,	0xaa7f, 0xc82d,		0x21, 0
+	.dw 0xaac0, 0xc82d,	0xaaff, 0xc82d,		0x21, 0
+	.dw 0xab40, 0xc82d,	0xab7f, 0xc82d,		0x21, 0
+	.dw 0xabc0, 0xc82d,	0xabff, 0xc82d,		0x21, 0
+	.dw 0xac40, 0xc82d,	0xac7f, 0xc82d,		0x21, 0
+	.dw 0xacc0, 0xc82d,	0xacff, 0xc82d,		0x21, 0
+	.dw 0xad40, 0xc82d,	0xad7f, 0xc82d,		0x21, 0
+	.dw 0xadc0, 0xc82d,	0xadff, 0xc82d,		0x21, 0
+	.dw 0xae40, 0xc82d,	0xae7f, 0xc82d,		0x21, 0
+	.dw 0xaec0, 0xc82d,	0xaeff, 0xc82d,		0x21, 0
+	.dw 0xaf40, 0xc82d,	0xaf7f, 0xc82d,		0x21, 0
+	.dw 0xafc0, 0xc82d,	0xafff, 0xc82d,		0x21, 0
+	.dw 0xb040, 0xc82d,	0xb07f, 0xc82d,		0x21, 0
+	.dw 0xb0c0, 0xc82d,	0xb0ff, 0xc82d,		0x21, 0
+	.dw 0xb140, 0xc82d,	0xb17f, 0xc82d,		0x21, 0
+	.dw 0xb1c0, 0xc82d,	0xb1ff, 0xc82d,		0x21, 0
+	.dw 0xb240, 0xc82d,	0xb27f, 0xc82d,		0x21, 0
+	.dw 0xb2c0, 0xc82d,	0xb2ff, 0xc82d,		0x21, 0
+	.dw 0xb340, 0xc82d,	0xb37f, 0xc82d,		0x21, 0
+	.dw 0xb3c0, 0xc82d,	0xb3ff, 0xc82d,		0x21, 0
+	.dw 0xb440, 0xc82d,	0xb47f, 0xc82d,		0x21, 0
+	.dw 0xb4c0, 0xc82d,	0xb4ff, 0xc82d,		0x21, 0
+	.dw 0xb540, 0xc82d,	0xb57f, 0xc82d,		0x21, 0
+	.dw 0xb5c0, 0xc82d,	0xb5ff, 0xc82d,		0x21, 0
+	.dw 0xb640, 0xc82d,	0xb67f, 0xc82d,		0x21, 0
+	.dw 0xb6c0, 0xc82d,	0xb6ff, 0xc82d,		0x21, 0
+	.dw 0xb740, 0xc82d,	0xb77f, 0xc82d,		0x21, 0
+	.dw 0xb7c0, 0xc82d,	0xb7ff, 0xc82d,		0x21, 0
+	.dw 0xb840, 0xc82d,	0xb87f, 0xc82d,		0x21, 0
+	.dw 0xb8c0, 0xc82d,	0xb8ff, 0xc82d,		0x21, 0
+	.dw 0xb940, 0xc82d,	0xb97f, 0xc82d,		0x21, 0
+	.dw 0xb9c0, 0xc82d,	0xbfff, 0xc82d,		0x21, 0
+	.dw 0xc040, 0xc82d,	0xc07f, 0xc82d,		0x21, 0
+	.dw 0xc0c0, 0xc82d,	0xc0ff, 0xc82d,		0x21, 0
+	.dw 0xc140, 0xc82d,	0xc17f, 0xc82d,		0x21, 0
+	.dw 0xc1c0, 0xc82d,	0xc1ff, 0xc82d,		0x21, 0
+	.dw 0xc240, 0xc82d,	0xc27f, 0xc82d,		0x21, 0
+	.dw 0xc2c0, 0xc82d,	0xc2ff, 0xc82d,		0x21, 0
+	.dw 0xc340, 0xc82d,	0xc37f, 0xc82d,		0x21, 0
+	.dw 0xc3c0, 0xc82d,	0xc3ff, 0xc82d,		0x21, 0
+	.dw 0xc440, 0xc82d,	0xc47f, 0xc82d,		0x21, 0
+	.dw 0xc4c0, 0xc82d,	0xc4ff, 0xc82d,		0x21, 0
+	.dw 0xc540, 0xc82d,	0xc57f, 0xc82d,		0x21, 0
+	.dw 0xc5c0, 0xc82d,	0xc5ff, 0xc82d,		0x21, 0
+	.dw 0xc640, 0xc82d,	0xc67f, 0xc82d,		0x21, 0
+	.dw 0xc6c0, 0xc82d,	0xc6ff, 0xc82d,		0x21, 0
+	.dw 0xc740, 0xc82d,	0xc77f, 0xc82d,		0x21, 0
+	.dw 0xc7c0, 0xc82d,	0xc7ff, 0xc82d,		0x21, 0
+	.dw 0xc840, 0xc82d,	0xc87f, 0xc82d,		0x21, 0
+	.dw 0xc8c0, 0xc82d,	0xc8ff, 0xc82d,		0x21, 0
+	.dw 0xc940, 0xc82d,	0xc97f, 0xc82d,		0x21, 0
+	.dw 0xc9c0, 0xc82d,	0xc9ff, 0xc82d,		0x21, 0
+	.dw 0xca40, 0xc82d,	0xca7f, 0xc82d,		0x21, 0
+	.dw 0xcac0, 0xc82d,	0xcaff, 0xc82d,		0x21, 0
+	.dw 0xcb40, 0xc82d,	0xcb7f, 0xc82d,		0x21, 0
+	.dw 0xcbc0, 0xc82d,	0xcbff, 0xc82d,		0x21, 0
+	.dw 0xcc40, 0xc82d,	0xcc7f, 0xc82d,		0x21, 0
+	.dw 0xccc0, 0xc82d,	0xccff, 0xc82d,		0x21, 0
+	.dw 0xcd40, 0xc82d,	0xcd7f, 0xc82d,		0x21, 0
+	.dw 0xcdc0, 0xc82d,	0xcdff, 0xc82d,		0x21, 0
+	.dw 0xce40, 0xc82d,	0xce7f, 0xc82d,		0x21, 0
+	.dw 0xcec0, 0xc82d,	0xceff, 0xc82d,		0x21, 0
+	.dw 0xcf40, 0xc82d,	0xcf7f, 0xc82d,		0x21, 0
+	.dw 0xcfc0, 0xc82d,	0xcfff, 0xc82d,		0x21, 0
+	.dw 0xd040, 0xc82d,	0xd07f, 0xc82d,		0x21, 0
+	.dw 0xd0c0, 0xc82d,	0xd0ff, 0xc82d,		0x21, 0
+	.dw 0xd140, 0xc82d,	0xd17f, 0xc82d,		0x21, 0
+	.dw 0xd1c0, 0xc82d,	0xd1ff, 0xc82d,		0x21, 0
+	.dw 0xd240, 0xc82d,	0xd27f, 0xc82d,		0x21, 0
+	.dw 0xd2c0, 0xc82d,	0xd2ff, 0xc82d,		0x21, 0
+	.dw 0xd340, 0xc82d,	0xd37f, 0xc82d,		0x21, 0
+	.dw 0xd3c0, 0xc82d,	0xd3ff, 0xc82d,		0x21, 0
+	.dw 0xd440, 0xc82d,	0xd47f, 0xc82d,		0x21, 0
+	.dw 0xd4c0, 0xc82d,	0xd4ff, 0xc82d,		0x21, 0
+	.dw 0xd540, 0xc82d,	0xd57f, 0xc82d,		0x21, 0
+	.dw 0xd5c0, 0xc82d,	0xd5ff, 0xc82d,		0x21, 0
+	.dw 0xd640, 0xc82d,	0xd67f, 0xc82d,		0x21, 0
+	.dw 0xd6c0, 0xc82d,	0xd6ff, 0xc82d,		0x21, 0
+	.dw 0xd740, 0xc82d,	0xd77f, 0xc82d,		0x21, 0
+	.dw 0xd7c0, 0xc82d,	0xd7ff, 0xc82d,		0x21, 0
+	.dw 0xd840, 0xc82d,	0xd87f, 0xc82d,		0x21, 0
+	.dw 0xd8c0, 0xc82d,	0xd8ff, 0xc82d,		0x21, 0
+	.dw 0xd940, 0xc82d,	0xd97f, 0xc82d,		0x21, 0
+	.dw 0xd9c0, 0xc82d,	0xdfff, 0xc82d,		0x21, 0
+	.dw 0xe040, 0xc82d,	0xe07f, 0xc82d,		0x21, 0
+	.dw 0xe0c0, 0xc82d,	0xe0ff, 0xc82d,		0x21, 0
+	.dw 0xe140, 0xc82d,	0xe17f, 0xc82d,		0x21, 0
+	.dw 0xe1c0, 0xc82d,	0xe1ff, 0xc82d,		0x21, 0
+	.dw 0xe240, 0xc82d,	0xe27f, 0xc82d,		0x21, 0
+	.dw 0xe2c0, 0xc82d,	0xe2ff, 0xc82d,		0x21, 0
+	.dw 0xe340, 0xc82d,	0xe37f, 0xc82d,		0x21, 0
+	.dw 0xe3c0, 0xc82d,	0xe3ff, 0xc82d,		0x21, 0
+	.dw 0xe440, 0xc82d,	0xe47f, 0xc82d,		0x21, 0
+	.dw 0xe4c0, 0xc82d,	0xe4ff, 0xc82d,		0x21, 0
+	.dw 0xe540, 0xc82d,	0xe57f, 0xc82d,		0x21, 0
+	.dw 0xe5c0, 0xc82d,	0xe5ff, 0xc82d,		0x21, 0
+	.dw 0xe640, 0xc82d,	0xe67f, 0xc82d,		0x21, 0
+	.dw 0xe6c0, 0xc82d,	0xe6ff, 0xc82d,		0x21, 0
+	.dw 0xe740, 0xc82d,	0xe77f, 0xc82d,		0x21, 0
+	.dw 0xe7c0, 0xc82d,	0xe7ff, 0xc82d,		0x21, 0
+	.dw 0xe840, 0xc82d,	0xe87f, 0xc82d,		0x21, 0
+	.dw 0xe8c0, 0xc82d,	0xe8ff, 0xc82d,		0x21, 0
+	.dw 0xe940, 0xc82d,	0xe97f, 0xc82d,		0x21, 0
+	.dw 0xe9c0, 0xc82d,	0xe9ff, 0xc82d,		0x21, 0
+	.dw 0xea40, 0xc82d,	0xea7f, 0xc82d,		0x21, 0
+	.dw 0xeac0, 0xc82d,	0xeaff, 0xc82d,		0x21, 0
+	.dw 0xeb40, 0xc82d,	0xeb7f, 0xc82d,		0x21, 0
+	.dw 0xebc0, 0xc82d,	0xebff, 0xc82d,		0x21, 0
+	.dw 0xec40, 0xc82d,	0xec7f, 0xc82d,		0x21, 0
+	.dw 0xecc0, 0xc82d,	0xecff, 0xc82d,		0x21, 0
+	.dw 0xed40, 0xc82d,	0xed7f, 0xc82d,		0x21, 0
+	.dw 0xedc0, 0xc82d,	0xedff, 0xc82d,		0x21, 0
+	.dw 0xee40, 0xc82d,	0xee7f, 0xc82d,		0x21, 0
+	.dw 0xeec0, 0xc82d,	0xeeff, 0xc82d,		0x21, 0
+	.dw 0xef40, 0xc82d,	0xef7f, 0xc82d,		0x21, 0
+	.dw 0xefc0, 0xc82d,	0xefff, 0xc82d,		0x21, 0
+	.dw 0xf040, 0xc82d,	0xf07f, 0xc82d,		0x21, 0
+	.dw 0xf0c0, 0xc82d,	0xf0ff, 0xc82d,		0x21, 0
+	.dw 0xf140, 0xc82d,	0xf17f, 0xc82d,		0x21, 0
+	.dw 0xf1c0, 0xc82d,	0xf1ff, 0xc82d,		0x21, 0
+	.dw 0xf240, 0xc82d,	0xf27f, 0xc82d,		0x21, 0
+	.dw 0xf2c0, 0xc82d,	0xf2ff, 0xc82d,		0x21, 0
+	.dw 0xf340, 0xc82d,	0xf37f, 0xc82d,		0x21, 0
+	.dw 0xf3c0, 0xc82d,	0xf3ff, 0xc82d,		0x21, 0
+	.dw 0xf440, 0xc82d,	0xf47f, 0xc82d,		0x21, 0
+	.dw 0xf4c0, 0xc82d,	0xf4ff, 0xc82d,		0x21, 0
+	.dw 0xf540, 0xc82d,	0xf57f, 0xc82d,		0x21, 0
+	.dw 0xf5c0, 0xc82d,	0xf5ff, 0xc82d,		0x21, 0
+	.dw 0xf640, 0xc82d,	0xf67f, 0xc82d,		0x21, 0
+	.dw 0xf6c0, 0xc82d,	0xf6ff, 0xc82d,		0x21, 0
+	.dw 0xf740, 0xc82d,	0xf77f, 0xc82d,		0x21, 0
+	.dw 0xf7c0, 0xc82d,	0xf7ff, 0xc82d,		0x21, 0
+	.dw 0xf840, 0xc82d,	0xf87f, 0xc82d,		0x21, 0
+	.dw 0xf8c0, 0xc82d,	0xf8ff, 0xc82d,		0x21, 0
+	.dw 0xf940, 0xc82d,	0xf97f, 0xc82d,		0x21, 0
+	.dw 0xf9c0, 0xc82d,	0xffff, 0xc82d,		0x21, 0
+	.dw 0x0040, 0xc82e,	0x007f, 0xc82e,		0x21, 0
+	.dw 0x00c0, 0xc82e,	0x00ff, 0xc82e,		0x21, 0
+	.dw 0x0140, 0xc82e,	0x017f, 0xc82e,		0x21, 0
+	.dw 0x01c0, 0xc82e,	0x01ff, 0xc82e,		0x21, 0
+	.dw 0x0240, 0xc82e,	0x027f, 0xc82e,		0x21, 0
+	.dw 0x02c0, 0xc82e,	0x02ff, 0xc82e,		0x21, 0
+	.dw 0x0340, 0xc82e,	0x037f, 0xc82e,		0x21, 0
+	.dw 0x03c0, 0xc82e,	0x03ff, 0xc82e,		0x21, 0
+	.dw 0x0440, 0xc82e,	0x047f, 0xc82e,		0x21, 0
+	.dw 0x04c0, 0xc82e,	0x04ff, 0xc82e,		0x21, 0
+	.dw 0x0540, 0xc82e,	0x057f, 0xc82e,		0x21, 0
+	.dw 0x05c0, 0xc82e,	0x05ff, 0xc82e,		0x21, 0
+	.dw 0x0640, 0xc82e,	0x067f, 0xc82e,		0x21, 0
+	.dw 0x06c0, 0xc82e,	0x06ff, 0xc82e,		0x21, 0
+	.dw 0x0740, 0xc82e,	0x077f, 0xc82e,		0x21, 0
+	.dw 0x07c0, 0xc82e,	0x07ff, 0xc82e,		0x21, 0
+	.dw 0x0840, 0xc82e,	0x087f, 0xc82e,		0x21, 0
+	.dw 0x08c0, 0xc82e,	0x08ff, 0xc82e,		0x21, 0
+	.dw 0x0940, 0xc82e,	0x097f, 0xc82e,		0x21, 0
+	.dw 0x09c0, 0xc82e,	0x09ff, 0xc82e,		0x21, 0
+	.dw 0x0a40, 0xc82e,	0x0a7f, 0xc82e,		0x21, 0
+	.dw 0x0ac0, 0xc82e,	0x0aff, 0xc82e,		0x21, 0
+	.dw 0x0b40, 0xc82e,	0x0b7f, 0xc82e,		0x21, 0
+	.dw 0x0bc0, 0xc82e,	0x0bff, 0xc82e,		0x21, 0
+	.dw 0x0c40, 0xc82e,	0x0c7f, 0xc82e,		0x21, 0
+	.dw 0x0cc0, 0xc82e,	0x0cff, 0xc82e,		0x21, 0
+	.dw 0x0d40, 0xc82e,	0x0d7f, 0xc82e,		0x21, 0
+	.dw 0x0dc0, 0xc82e,	0x0dff, 0xc82e,		0x21, 0
+	.dw 0x0e40, 0xc82e,	0x0e7f, 0xc82e,		0x21, 0
+	.dw 0x0ec0, 0xc82e,	0x0eff, 0xc82e,		0x21, 0
+	.dw 0x0f40, 0xc82e,	0x0f7f, 0xc82e,		0x21, 0
+	.dw 0x0fc0, 0xc82e,	0x0fff, 0xc82e,		0x21, 0
+	.dw 0x1040, 0xc82e,	0x107f, 0xc82e,		0x21, 0
+	.dw 0x10c0, 0xc82e,	0x10ff, 0xc82e,		0x21, 0
+	.dw 0x1140, 0xc82e,	0x117f, 0xc82e,		0x21, 0
+	.dw 0x11c0, 0xc82e,	0x11ff, 0xc82e,		0x21, 0
+	.dw 0x1240, 0xc82e,	0x127f, 0xc82e,		0x21, 0
+	.dw 0x12c0, 0xc82e,	0x12ff, 0xc82e,		0x21, 0
+	.dw 0x1340, 0xc82e,	0x137f, 0xc82e,		0x21, 0
+	.dw 0x13c0, 0xc82e,	0x13ff, 0xc82e,		0x21, 0
+	.dw 0x1440, 0xc82e,	0x147f, 0xc82e,		0x21, 0
+	.dw 0x14c0, 0xc82e,	0x14ff, 0xc82e,		0x21, 0
+	.dw 0x1540, 0xc82e,	0x157f, 0xc82e,		0x21, 0
+	.dw 0x15c0, 0xc82e,	0x15ff, 0xc82e,		0x21, 0
+	.dw 0x1640, 0xc82e,	0x167f, 0xc82e,		0x21, 0
+	.dw 0x16c0, 0xc82e,	0x16ff, 0xc82e,		0x21, 0
+	.dw 0x1740, 0xc82e,	0x177f, 0xc82e,		0x21, 0
+	.dw 0x17c0, 0xc82e,	0x17ff, 0xc82e,		0x21, 0
+	.dw 0x1840, 0xc82e,	0x187f, 0xc82e,		0x21, 0
+	.dw 0x18c0, 0xc82e,	0x18ff, 0xc82e,		0x21, 0
+	.dw 0x1940, 0xc82e,	0x197f, 0xc82e,		0x21, 0
+	.dw 0x19c0, 0xc82e,	0x1fff, 0xc82e,		0x21, 0
+	.dw 0x2040, 0xc82e,	0x207f, 0xc82e,		0x21, 0
+	.dw 0x20c0, 0xc82e,	0x20ff, 0xc82e,		0x21, 0
+	.dw 0x2140, 0xc82e,	0x217f, 0xc82e,		0x21, 0
+	.dw 0x21c0, 0xc82e,	0x21ff, 0xc82e,		0x21, 0
+	.dw 0x2240, 0xc82e,	0x227f, 0xc82e,		0x21, 0
+	.dw 0x22c0, 0xc82e,	0x22ff, 0xc82e,		0x21, 0
+	.dw 0x2340, 0xc82e,	0x237f, 0xc82e,		0x21, 0
+	.dw 0x23c0, 0xc82e,	0x23ff, 0xc82e,		0x21, 0
+	.dw 0x2440, 0xc82e,	0x247f, 0xc82e,		0x21, 0
+	.dw 0x24c0, 0xc82e,	0x24ff, 0xc82e,		0x21, 0
+	.dw 0x2540, 0xc82e,	0x257f, 0xc82e,		0x21, 0
+	.dw 0x25c0, 0xc82e,	0x25ff, 0xc82e,		0x21, 0
+	.dw 0x2640, 0xc82e,	0x267f, 0xc82e,		0x21, 0
+	.dw 0x26c0, 0xc82e,	0x26ff, 0xc82e,		0x21, 0
+	.dw 0x2740, 0xc82e,	0x277f, 0xc82e,		0x21, 0
+	.dw 0x27c0, 0xc82e,	0x27ff, 0xc82e,		0x21, 0
+	.dw 0x2840, 0xc82e,	0x287f, 0xc82e,		0x21, 0
+	.dw 0x28c0, 0xc82e,	0x28ff, 0xc82e,		0x21, 0
+	.dw 0x2940, 0xc82e,	0x297f, 0xc82e,		0x21, 0
+	.dw 0x29c0, 0xc82e,	0x29ff, 0xc82e,		0x21, 0
+	.dw 0x2a40, 0xc82e,	0x2a7f, 0xc82e,		0x21, 0
+	.dw 0x2ac0, 0xc82e,	0x2aff, 0xc82e,		0x21, 0
+	.dw 0x2b40, 0xc82e,	0x2b7f, 0xc82e,		0x21, 0
+	.dw 0x2bc0, 0xc82e,	0x2bff, 0xc82e,		0x21, 0
+	.dw 0x2c40, 0xc82e,	0x2c7f, 0xc82e,		0x21, 0
+	.dw 0x2cc0, 0xc82e,	0x2cff, 0xc82e,		0x21, 0
+	.dw 0x2d40, 0xc82e,	0x2d7f, 0xc82e,		0x21, 0
+	.dw 0x2dc0, 0xc82e,	0x2dff, 0xc82e,		0x21, 0
+	.dw 0x2e40, 0xc82e,	0x2e7f, 0xc82e,		0x21, 0
+	.dw 0x2ec0, 0xc82e,	0x2eff, 0xc82e,		0x21, 0
+	.dw 0x2f40, 0xc82e,	0x2f7f, 0xc82e,		0x21, 0
+	.dw 0x2fc0, 0xc82e,	0x2fff, 0xc82e,		0x21, 0
+	.dw 0x3040, 0xc82e,	0x307f, 0xc82e,		0x21, 0
+	.dw 0x30c0, 0xc82e,	0x30ff, 0xc82e,		0x21, 0
+	.dw 0x3140, 0xc82e,	0x317f, 0xc82e,		0x21, 0
+	.dw 0x31c0, 0xc82e,	0x31ff, 0xc82e,		0x21, 0
+	.dw 0x3240, 0xc82e,	0x327f, 0xc82e,		0x21, 0
+	.dw 0x32c0, 0xc82e,	0x32ff, 0xc82e,		0x21, 0
+	.dw 0x3340, 0xc82e,	0x337f, 0xc82e,		0x21, 0
+	.dw 0x33c0, 0xc82e,	0x33ff, 0xc82e,		0x21, 0
+	.dw 0x3440, 0xc82e,	0x347f, 0xc82e,		0x21, 0
+	.dw 0x34c0, 0xc82e,	0x34ff, 0xc82e,		0x21, 0
+	.dw 0x3540, 0xc82e,	0x357f, 0xc82e,		0x21, 0
+	.dw 0x35c0, 0xc82e,	0x35ff, 0xc82e,		0x21, 0
+	.dw 0x3640, 0xc82e,	0x367f, 0xc82e,		0x21, 0
+	.dw 0x36c0, 0xc82e,	0x36ff, 0xc82e,		0x21, 0
+	.dw 0x3740, 0xc82e,	0x377f, 0xc82e,		0x21, 0
+	.dw 0x37c0, 0xc82e,	0x37ff, 0xc82e,		0x21, 0
+	.dw 0x3840, 0xc82e,	0x387f, 0xc82e,		0x21, 0
+	.dw 0x38c0, 0xc82e,	0x38ff, 0xc82e,		0x21, 0
+	.dw 0x3940, 0xc82e,	0x397f, 0xc82e,		0x21, 0
+	.dw 0x39c0, 0xc82e,	0x3fff, 0xc82e,		0x21, 0
+	.dw 0x4040, 0xc82e,	0x407f, 0xc82e,		0x21, 0
+	.dw 0x40c0, 0xc82e,	0x40ff, 0xc82e,		0x21, 0
+	.dw 0x4140, 0xc82e,	0x417f, 0xc82e,		0x21, 0
+	.dw 0x41c0, 0xc82e,	0x41ff, 0xc82e,		0x21, 0
+	.dw 0x4240, 0xc82e,	0x427f, 0xc82e,		0x21, 0
+	.dw 0x42c0, 0xc82e,	0x42ff, 0xc82e,		0x21, 0
+	.dw 0x4340, 0xc82e,	0x437f, 0xc82e,		0x21, 0
+	.dw 0x43c0, 0xc82e,	0x43ff, 0xc82e,		0x21, 0
+	.dw 0x4440, 0xc82e,	0x447f, 0xc82e,		0x21, 0
+	.dw 0x44c0, 0xc82e,	0x44ff, 0xc82e,		0x21, 0
+	.dw 0x4540, 0xc82e,	0x457f, 0xc82e,		0x21, 0
+	.dw 0x45c0, 0xc82e,	0x45ff, 0xc82e,		0x21, 0
+	.dw 0x4640, 0xc82e,	0x467f, 0xc82e,		0x21, 0
+	.dw 0x46c0, 0xc82e,	0x46ff, 0xc82e,		0x21, 0
+	.dw 0x4740, 0xc82e,	0x477f, 0xc82e,		0x21, 0
+	.dw 0x47c0, 0xc82e,	0x47ff, 0xc82e,		0x21, 0
+	.dw 0x4840, 0xc82e,	0x487f, 0xc82e,		0x21, 0
+	.dw 0x48c0, 0xc82e,	0x48ff, 0xc82e,		0x21, 0
+	.dw 0x4940, 0xc82e,	0x497f, 0xc82e,		0x21, 0
+	.dw 0x49c0, 0xc82e,	0x49ff, 0xc82e,		0x21, 0
+	.dw 0x4a40, 0xc82e,	0x4a7f, 0xc82e,		0x21, 0
+	.dw 0x4ac0, 0xc82e,	0x4aff, 0xc82e,		0x21, 0
+	.dw 0x4b40, 0xc82e,	0x4b7f, 0xc82e,		0x21, 0
+	.dw 0x4bc0, 0xc82e,	0x4bff, 0xc82e,		0x21, 0
+	.dw 0x4c40, 0xc82e,	0x4c7f, 0xc82e,		0x21, 0
+	.dw 0x4cc0, 0xc82e,	0x4cff, 0xc82e,		0x21, 0
+	.dw 0x4d40, 0xc82e,	0x4d7f, 0xc82e,		0x21, 0
+	.dw 0x4dc0, 0xc82e,	0x4dff, 0xc82e,		0x21, 0
+	.dw 0x4e40, 0xc82e,	0x4e7f, 0xc82e,		0x21, 0
+	.dw 0x4ec0, 0xc82e,	0x4eff, 0xc82e,		0x21, 0
+	.dw 0x4f40, 0xc82e,	0x4f7f, 0xc82e,		0x21, 0
+	.dw 0x4fc0, 0xc82e,	0x4fff, 0xc82e,		0x21, 0
+	.dw 0x5040, 0xc82e,	0x507f, 0xc82e,		0x21, 0
+	.dw 0x50c0, 0xc82e,	0x50ff, 0xc82e,		0x21, 0
+	.dw 0x5140, 0xc82e,	0x517f, 0xc82e,		0x21, 0
+	.dw 0x51c0, 0xc82e,	0x51ff, 0xc82e,		0x21, 0
+	.dw 0x5240, 0xc82e,	0x527f, 0xc82e,		0x21, 0
+	.dw 0x52c0, 0xc82e,	0x52ff, 0xc82e,		0x21, 0
+	.dw 0x5340, 0xc82e,	0x537f, 0xc82e,		0x21, 0
+	.dw 0x53c0, 0xc82e,	0x53ff, 0xc82e,		0x21, 0
+	.dw 0x5440, 0xc82e,	0x547f, 0xc82e,		0x21, 0
+	.dw 0x54c0, 0xc82e,	0x54ff, 0xc82e,		0x21, 0
+	.dw 0x5540, 0xc82e,	0x557f, 0xc82e,		0x21, 0
+	.dw 0x55c0, 0xc82e,	0x55ff, 0xc82e,		0x21, 0
+	.dw 0x5640, 0xc82e,	0x567f, 0xc82e,		0x21, 0
+	.dw 0x56c0, 0xc82e,	0x56ff, 0xc82e,		0x21, 0
+	.dw 0x5740, 0xc82e,	0x577f, 0xc82e,		0x21, 0
+	.dw 0x57c0, 0xc82e,	0x57ff, 0xc82e,		0x21, 0
+	.dw 0x5840, 0xc82e,	0x587f, 0xc82e,		0x21, 0
+	.dw 0x58c0, 0xc82e,	0x58ff, 0xc82e,		0x21, 0
+	.dw 0x5940, 0xc82e,	0x597f, 0xc82e,		0x21, 0
+	.dw 0x59c0, 0xc82e,	0x5fff, 0xc82e,		0x21, 0
+	.dw 0x6040, 0xc82e,	0x607f, 0xc82e,		0x21, 0
+	.dw 0x60c0, 0xc82e,	0x60ff, 0xc82e,		0x21, 0
+	.dw 0x6140, 0xc82e,	0x617f, 0xc82e,		0x21, 0
+	.dw 0x61c0, 0xc82e,	0x61ff, 0xc82e,		0x21, 0
+	.dw 0x6240, 0xc82e,	0x627f, 0xc82e,		0x21, 0
+	.dw 0x62c0, 0xc82e,	0x62ff, 0xc82e,		0x21, 0
+	.dw 0x6340, 0xc82e,	0x637f, 0xc82e,		0x21, 0
+	.dw 0x63c0, 0xc82e,	0x63ff, 0xc82e,		0x21, 0
+	.dw 0x6440, 0xc82e,	0x647f, 0xc82e,		0x21, 0
+	.dw 0x64c0, 0xc82e,	0x64ff, 0xc82e,		0x21, 0
+	.dw 0x6540, 0xc82e,	0x657f, 0xc82e,		0x21, 0
+	.dw 0x65c0, 0xc82e,	0x65ff, 0xc82e,		0x21, 0
+	.dw 0x6640, 0xc82e,	0x667f, 0xc82e,		0x21, 0
+	.dw 0x66c0, 0xc82e,	0x66ff, 0xc82e,		0x21, 0
+	.dw 0x6740, 0xc82e,	0x677f, 0xc82e,		0x21, 0
+	.dw 0x67c0, 0xc82e,	0x67ff, 0xc82e,		0x21, 0
+	.dw 0x6840, 0xc82e,	0x687f, 0xc82e,		0x21, 0
+	.dw 0x68c0, 0xc82e,	0x68ff, 0xc82e,		0x21, 0
+	.dw 0x6940, 0xc82e,	0x697f, 0xc82e,		0x21, 0
+	.dw 0x69c0, 0xc82e,	0x69ff, 0xc82e,		0x21, 0
+	.dw 0x6a40, 0xc82e,	0x6a7f, 0xc82e,		0x21, 0
+	.dw 0x6ac0, 0xc82e,	0x6aff, 0xc82e,		0x21, 0
+	.dw 0x6b40, 0xc82e,	0x6b7f, 0xc82e,		0x21, 0
+	.dw 0x6bc0, 0xc82e,	0x6bff, 0xc82e,		0x21, 0
+	.dw 0x6c40, 0xc82e,	0x6c7f, 0xc82e,		0x21, 0
+	.dw 0x6cc0, 0xc82e,	0x6cff, 0xc82e,		0x21, 0
+	.dw 0x6d40, 0xc82e,	0x6d7f, 0xc82e,		0x21, 0
+	.dw 0x6dc0, 0xc82e,	0x6dff, 0xc82e,		0x21, 0
+	.dw 0x6e40, 0xc82e,	0x6e7f, 0xc82e,		0x21, 0
+	.dw 0x6ec0, 0xc82e,	0x6eff, 0xc82e,		0x21, 0
+	.dw 0x6f40, 0xc82e,	0x6f7f, 0xc82e,		0x21, 0
+	.dw 0x6fc0, 0xc82e,	0x6fff, 0xc82e,		0x21, 0
+	.dw 0x7040, 0xc82e,	0x707f, 0xc82e,		0x21, 0
+	.dw 0x70c0, 0xc82e,	0x70ff, 0xc82e,		0x21, 0
+	.dw 0x7140, 0xc82e,	0x717f, 0xc82e,		0x21, 0
+	.dw 0x71c0, 0xc82e,	0x71ff, 0xc82e,		0x21, 0
+	.dw 0x7240, 0xc82e,	0x727f, 0xc82e,		0x21, 0
+	.dw 0x72c0, 0xc82e,	0x72ff, 0xc82e,		0x21, 0
+	.dw 0x7340, 0xc82e,	0x737f, 0xc82e,		0x21, 0
+	.dw 0x73c0, 0xc82e,	0x73ff, 0xc82e,		0x21, 0
+	.dw 0x7440, 0xc82e,	0x747f, 0xc82e,		0x21, 0
+	.dw 0x74c0, 0xc82e,	0x74ff, 0xc82e,		0x21, 0
+	.dw 0x7540, 0xc82e,	0x757f, 0xc82e,		0x21, 0
+	.dw 0x75c0, 0xc82e,	0x75ff, 0xc82e,		0x21, 0
+	.dw 0x7640, 0xc82e,	0x767f, 0xc82e,		0x21, 0
+	.dw 0x76c0, 0xc82e,	0x76ff, 0xc82e,		0x21, 0
+	.dw 0x7740, 0xc82e,	0x777f, 0xc82e,		0x21, 0
+	.dw 0x77c0, 0xc82e,	0x77ff, 0xc82e,		0x21, 0
+	.dw 0x7840, 0xc82e,	0x787f, 0xc82e,		0x21, 0
+	.dw 0x78c0, 0xc82e,	0x78ff, 0xc82e,		0x21, 0
+	.dw 0x7940, 0xc82e,	0x797f, 0xc82e,		0x21, 0
+	.dw 0x79c0, 0xc82e,	0x7fff, 0xc82e,		0x21, 0
+	.dw 0x8040, 0xc82e,	0x807f, 0xc82e,		0x21, 0
+	.dw 0x80c0, 0xc82e,	0x80ff, 0xc82e,		0x21, 0
+	.dw 0x8140, 0xc82e,	0x817f, 0xc82e,		0x21, 0
+	.dw 0x81c0, 0xc82e,	0x81ff, 0xc82e,		0x21, 0
+	.dw 0x8240, 0xc82e,	0x827f, 0xc82e,		0x21, 0
+	.dw 0x82c0, 0xc82e,	0x82ff, 0xc82e,		0x21, 0
+	.dw 0x8340, 0xc82e,	0x837f, 0xc82e,		0x21, 0
+	.dw 0x83c0, 0xc82e,	0x83ff, 0xc82e,		0x21, 0
+	.dw 0x8440, 0xc82e,	0x847f, 0xc82e,		0x21, 0
+	.dw 0x84c0, 0xc82e,	0x84ff, 0xc82e,		0x21, 0
+	.dw 0x8540, 0xc82e,	0x857f, 0xc82e,		0x21, 0
+	.dw 0x85c0, 0xc82e,	0x85ff, 0xc82e,		0x21, 0
+	.dw 0x8640, 0xc82e,	0x867f, 0xc82e,		0x21, 0
+	.dw 0x86c0, 0xc82e,	0x86ff, 0xc82e,		0x21, 0
+	.dw 0x8740, 0xc82e,	0x877f, 0xc82e,		0x21, 0
+	.dw 0x87c0, 0xc82e,	0x87ff, 0xc82e,		0x21, 0
+	.dw 0x8840, 0xc82e,	0x887f, 0xc82e,		0x21, 0
+	.dw 0x88c0, 0xc82e,	0x88ff, 0xc82e,		0x21, 0
+	.dw 0x8940, 0xc82e,	0x897f, 0xc82e,		0x21, 0
+	.dw 0x89c0, 0xc82e,	0x89ff, 0xc82e,		0x21, 0
+	.dw 0x8a40, 0xc82e,	0x8a7f, 0xc82e,		0x21, 0
+	.dw 0x8ac0, 0xc82e,	0x8aff, 0xc82e,		0x21, 0
+	.dw 0x8b40, 0xc82e,	0x8b7f, 0xc82e,		0x21, 0
+	.dw 0x8bc0, 0xc82e,	0x8bff, 0xc82e,		0x21, 0
+	.dw 0x8c40, 0xc82e,	0x8c7f, 0xc82e,		0x21, 0
+	.dw 0x8cc0, 0xc82e,	0x8cff, 0xc82e,		0x21, 0
+	.dw 0x8d40, 0xc82e,	0x8d7f, 0xc82e,		0x21, 0
+	.dw 0x8dc0, 0xc82e,	0x8dff, 0xc82e,		0x21, 0
+	.dw 0x8e40, 0xc82e,	0x8e7f, 0xc82e,		0x21, 0
+	.dw 0x8ec0, 0xc82e,	0x8eff, 0xc82e,		0x21, 0
+	.dw 0x8f40, 0xc82e,	0x8f7f, 0xc82e,		0x21, 0
+	.dw 0x8fc0, 0xc82e,	0x8fff, 0xc82e,		0x21, 0
+	.dw 0x9040, 0xc82e,	0x907f, 0xc82e,		0x21, 0
+	.dw 0x90c0, 0xc82e,	0x90ff, 0xc82e,		0x21, 0
+	.dw 0x9140, 0xc82e,	0x917f, 0xc82e,		0x21, 0
+	.dw 0x91c0, 0xc82e,	0x91ff, 0xc82e,		0x21, 0
+	.dw 0x9240, 0xc82e,	0x927f, 0xc82e,		0x21, 0
+	.dw 0x92c0, 0xc82e,	0x92ff, 0xc82e,		0x21, 0
+	.dw 0x9340, 0xc82e,	0x937f, 0xc82e,		0x21, 0
+	.dw 0x93c0, 0xc82e,	0x93ff, 0xc82e,		0x21, 0
+	.dw 0x9440, 0xc82e,	0x947f, 0xc82e,		0x21, 0
+	.dw 0x94c0, 0xc82e,	0x94ff, 0xc82e,		0x21, 0
+	.dw 0x9540, 0xc82e,	0x957f, 0xc82e,		0x21, 0
+	.dw 0x95c0, 0xc82e,	0x95ff, 0xc82e,		0x21, 0
+	.dw 0x9640, 0xc82e,	0x967f, 0xc82e,		0x21, 0
+	.dw 0x96c0, 0xc82e,	0x96ff, 0xc82e,		0x21, 0
+	.dw 0x9740, 0xc82e,	0x977f, 0xc82e,		0x21, 0
+	.dw 0x97c0, 0xc82e,	0x97ff, 0xc82e,		0x21, 0
+	.dw 0x9840, 0xc82e,	0x987f, 0xc82e,		0x21, 0
+	.dw 0x98c0, 0xc82e,	0x98ff, 0xc82e,		0x21, 0
+	.dw 0x9940, 0xc82e,	0x997f, 0xc82e,		0x21, 0
+	.dw 0x99c0, 0xc82e,	0x9fff, 0xc82e,		0x21, 0
+	.dw 0xa040, 0xc82e,	0xa07f, 0xc82e,		0x21, 0
+	.dw 0xa0c0, 0xc82e,	0xa0ff, 0xc82e,		0x21, 0
+	.dw 0xa140, 0xc82e,	0xa17f, 0xc82e,		0x21, 0
+	.dw 0xa1c0, 0xc82e,	0xa1ff, 0xc82e,		0x21, 0
+	.dw 0xa240, 0xc82e,	0xa27f, 0xc82e,		0x21, 0
+	.dw 0xa2c0, 0xc82e,	0xa2ff, 0xc82e,		0x21, 0
+	.dw 0xa340, 0xc82e,	0xa37f, 0xc82e,		0x21, 0
+	.dw 0xa3c0, 0xc82e,	0xa3ff, 0xc82e,		0x21, 0
+	.dw 0xa440, 0xc82e,	0xa47f, 0xc82e,		0x21, 0
+	.dw 0xa4c0, 0xc82e,	0xa4ff, 0xc82e,		0x21, 0
+	.dw 0xa540, 0xc82e,	0xa57f, 0xc82e,		0x21, 0
+	.dw 0xa5c0, 0xc82e,	0xa5ff, 0xc82e,		0x21, 0
+	.dw 0xa640, 0xc82e,	0xa67f, 0xc82e,		0x21, 0
+	.dw 0xa6c0, 0xc82e,	0xa6ff, 0xc82e,		0x21, 0
+	.dw 0xa740, 0xc82e,	0xa77f, 0xc82e,		0x21, 0
+	.dw 0xa7c0, 0xc82e,	0xa7ff, 0xc82e,		0x21, 0
+	.dw 0xa840, 0xc82e,	0xa87f, 0xc82e,		0x21, 0
+	.dw 0xa8c0, 0xc82e,	0xa8ff, 0xc82e,		0x21, 0
+	.dw 0xa940, 0xc82e,	0xa97f, 0xc82e,		0x21, 0
+	.dw 0xa9c0, 0xc82e,	0xa9ff, 0xc82e,		0x21, 0
+	.dw 0xaa40, 0xc82e,	0xaa7f, 0xc82e,		0x21, 0
+	.dw 0xaac0, 0xc82e,	0xaaff, 0xc82e,		0x21, 0
+	.dw 0xab40, 0xc82e,	0xab7f, 0xc82e,		0x21, 0
+	.dw 0xabc0, 0xc82e,	0xabff, 0xc82e,		0x21, 0
+	.dw 0xac40, 0xc82e,	0xac7f, 0xc82e,		0x21, 0
+	.dw 0xacc0, 0xc82e,	0xacff, 0xc82e,		0x21, 0
+	.dw 0xad40, 0xc82e,	0xad7f, 0xc82e,		0x21, 0
+	.dw 0xadc0, 0xc82e,	0xadff, 0xc82e,		0x21, 0
+	.dw 0xae40, 0xc82e,	0xae7f, 0xc82e,		0x21, 0
+	.dw 0xaec0, 0xc82e,	0xaeff, 0xc82e,		0x21, 0
+	.dw 0xaf40, 0xc82e,	0xaf7f, 0xc82e,		0x21, 0
+	.dw 0xafc0, 0xc82e,	0xafff, 0xc82e,		0x21, 0
+	.dw 0xb040, 0xc82e,	0xb07f, 0xc82e,		0x21, 0
+	.dw 0xb0c0, 0xc82e,	0xb0ff, 0xc82e,		0x21, 0
+	.dw 0xb140, 0xc82e,	0xb17f, 0xc82e,		0x21, 0
+	.dw 0xb1c0, 0xc82e,	0xb1ff, 0xc82e,		0x21, 0
+	.dw 0xb240, 0xc82e,	0xb27f, 0xc82e,		0x21, 0
+	.dw 0xb2c0, 0xc82e,	0xb2ff, 0xc82e,		0x21, 0
+	.dw 0xb340, 0xc82e,	0xb37f, 0xc82e,		0x21, 0
+	.dw 0xb3c0, 0xc82e,	0xb3ff, 0xc82e,		0x21, 0
+	.dw 0xb440, 0xc82e,	0xb47f, 0xc82e,		0x21, 0
+	.dw 0xb4c0, 0xc82e,	0xb4ff, 0xc82e,		0x21, 0
+	.dw 0xb540, 0xc82e,	0xb57f, 0xc82e,		0x21, 0
+	.dw 0xb5c0, 0xc82e,	0xb5ff, 0xc82e,		0x21, 0
+	.dw 0xb640, 0xc82e,	0xb67f, 0xc82e,		0x21, 0
+	.dw 0xb6c0, 0xc82e,	0xb6ff, 0xc82e,		0x21, 0
+	.dw 0xb740, 0xc82e,	0xb77f, 0xc82e,		0x21, 0
+	.dw 0xb7c0, 0xc82e,	0xb7ff, 0xc82e,		0x21, 0
+	.dw 0xb840, 0xc82e,	0xb87f, 0xc82e,		0x21, 0
+	.dw 0xb8c0, 0xc82e,	0xb8ff, 0xc82e,		0x21, 0
+	.dw 0xb940, 0xc82e,	0xb97f, 0xc82e,		0x21, 0
+	.dw 0xb9c0, 0xc82e,	0xbfff, 0xc82e,		0x21, 0
+	.dw 0xc040, 0xc82e,	0xc07f, 0xc82e,		0x21, 0
+	.dw 0xc0c0, 0xc82e,	0xc0ff, 0xc82e,		0x21, 0
+	.dw 0xc140, 0xc82e,	0xc17f, 0xc82e,		0x21, 0
+	.dw 0xc1c0, 0xc82e,	0xc1ff, 0xc82e,		0x21, 0
+	.dw 0xc240, 0xc82e,	0xc27f, 0xc82e,		0x21, 0
+	.dw 0xc2c0, 0xc82e,	0xc2ff, 0xc82e,		0x21, 0
+	.dw 0xc340, 0xc82e,	0xc37f, 0xc82e,		0x21, 0
+	.dw 0xc3c0, 0xc82e,	0xc3ff, 0xc82e,		0x21, 0
+	.dw 0xc440, 0xc82e,	0xc47f, 0xc82e,		0x21, 0
+	.dw 0xc4c0, 0xc82e,	0xc4ff, 0xc82e,		0x21, 0
+	.dw 0xc540, 0xc82e,	0xc57f, 0xc82e,		0x21, 0
+	.dw 0xc5c0, 0xc82e,	0xc5ff, 0xc82e,		0x21, 0
+	.dw 0xc640, 0xc82e,	0xc67f, 0xc82e,		0x21, 0
+	.dw 0xc6c0, 0xc82e,	0xc6ff, 0xc82e,		0x21, 0
+	.dw 0xc740, 0xc82e,	0xc77f, 0xc82e,		0x21, 0
+	.dw 0xc7c0, 0xc82e,	0xc7ff, 0xc82e,		0x21, 0
+	.dw 0xc840, 0xc82e,	0xc87f, 0xc82e,		0x21, 0
+	.dw 0xc8c0, 0xc82e,	0xc8ff, 0xc82e,		0x21, 0
+	.dw 0xc940, 0xc82e,	0xc97f, 0xc82e,		0x21, 0
+	.dw 0xc9c0, 0xc82e,	0xc9ff, 0xc82e,		0x21, 0
+	.dw 0xca40, 0xc82e,	0xca7f, 0xc82e,		0x21, 0
+	.dw 0xcac0, 0xc82e,	0xcaff, 0xc82e,		0x21, 0
+	.dw 0xcb40, 0xc82e,	0xcb7f, 0xc82e,		0x21, 0
+	.dw 0xcbc0, 0xc82e,	0xcbff, 0xc82e,		0x21, 0
+	.dw 0xcc40, 0xc82e,	0xcc7f, 0xc82e,		0x21, 0
+	.dw 0xccc0, 0xc82e,	0xccff, 0xc82e,		0x21, 0
+	.dw 0xcd40, 0xc82e,	0xcd7f, 0xc82e,		0x21, 0
+	.dw 0xcdc0, 0xc82e,	0xcdff, 0xc82e,		0x21, 0
+	.dw 0xce40, 0xc82e,	0xce7f, 0xc82e,		0x21, 0
+	.dw 0xcec0, 0xc82e,	0xceff, 0xc82e,		0x21, 0
+	.dw 0xcf40, 0xc82e,	0xcf7f, 0xc82e,		0x21, 0
+	.dw 0xcfc0, 0xc82e,	0xcfff, 0xc82e,		0x21, 0
+	.dw 0xd040, 0xc82e,	0xd07f, 0xc82e,		0x21, 0
+	.dw 0xd0c0, 0xc82e,	0xd0ff, 0xc82e,		0x21, 0
+	.dw 0xd140, 0xc82e,	0xd17f, 0xc82e,		0x21, 0
+	.dw 0xd1c0, 0xc82e,	0xd1ff, 0xc82e,		0x21, 0
+	.dw 0xd240, 0xc82e,	0xd27f, 0xc82e,		0x21, 0
+	.dw 0xd2c0, 0xc82e,	0xd2ff, 0xc82e,		0x21, 0
+	.dw 0xd340, 0xc82e,	0xd37f, 0xc82e,		0x21, 0
+	.dw 0xd3c0, 0xc82e,	0xd3ff, 0xc82e,		0x21, 0
+	.dw 0xd440, 0xc82e,	0xd47f, 0xc82e,		0x21, 0
+	.dw 0xd4c0, 0xc82e,	0xd4ff, 0xc82e,		0x21, 0
+	.dw 0xd540, 0xc82e,	0xd57f, 0xc82e,		0x21, 0
+	.dw 0xd5c0, 0xc82e,	0xd5ff, 0xc82e,		0x21, 0
+	.dw 0xd640, 0xc82e,	0xd67f, 0xc82e,		0x21, 0
+	.dw 0xd6c0, 0xc82e,	0xd6ff, 0xc82e,		0x21, 0
+	.dw 0xd740, 0xc82e,	0xd77f, 0xc82e,		0x21, 0
+	.dw 0xd7c0, 0xc82e,	0xd7ff, 0xc82e,		0x21, 0
+	.dw 0xd840, 0xc82e,	0xd87f, 0xc82e,		0x21, 0
+	.dw 0xd8c0, 0xc82e,	0xd8ff, 0xc82e,		0x21, 0
+	.dw 0xd940, 0xc82e,	0xd97f, 0xc82e,		0x21, 0
+	.dw 0xd9c0, 0xc82e,	0xdfff, 0xc82e,		0x21, 0
+	.dw 0xe040, 0xc82e,	0xe07f, 0xc82e,		0x21, 0
+	.dw 0xe0c0, 0xc82e,	0xe0ff, 0xc82e,		0x21, 0
+	.dw 0xe140, 0xc82e,	0xe17f, 0xc82e,		0x21, 0
+	.dw 0xe1c0, 0xc82e,	0xe1ff, 0xc82e,		0x21, 0
+	.dw 0xe240, 0xc82e,	0xe27f, 0xc82e,		0x21, 0
+	.dw 0xe2c0, 0xc82e,	0xe2ff, 0xc82e,		0x21, 0
+	.dw 0xe340, 0xc82e,	0xe37f, 0xc82e,		0x21, 0
+	.dw 0xe3c0, 0xc82e,	0xe3ff, 0xc82e,		0x21, 0
+	.dw 0xe440, 0xc82e,	0xe47f, 0xc82e,		0x21, 0
+	.dw 0xe4c0, 0xc82e,	0xe4ff, 0xc82e,		0x21, 0
+	.dw 0xe540, 0xc82e,	0xe57f, 0xc82e,		0x21, 0
+	.dw 0xe5c0, 0xc82e,	0xe5ff, 0xc82e,		0x21, 0
+	.dw 0xe640, 0xc82e,	0xe67f, 0xc82e,		0x21, 0
+	.dw 0xe6c0, 0xc82e,	0xe6ff, 0xc82e,		0x21, 0
+	.dw 0xe740, 0xc82e,	0xe77f, 0xc82e,		0x21, 0
+	.dw 0xe7c0, 0xc82e,	0xe7ff, 0xc82e,		0x21, 0
+	.dw 0xe840, 0xc82e,	0xe87f, 0xc82e,		0x21, 0
+	.dw 0xe8c0, 0xc82e,	0xe8ff, 0xc82e,		0x21, 0
+	.dw 0xe940, 0xc82e,	0xe97f, 0xc82e,		0x21, 0
+	.dw 0xe9c0, 0xc82e,	0xe9ff, 0xc82e,		0x21, 0
+	.dw 0xea40, 0xc82e,	0xea7f, 0xc82e,		0x21, 0
+	.dw 0xeac0, 0xc82e,	0xeaff, 0xc82e,		0x21, 0
+	.dw 0xeb40, 0xc82e,	0xeb7f, 0xc82e,		0x21, 0
+	.dw 0xebc0, 0xc82e,	0xebff, 0xc82e,		0x21, 0
+	.dw 0xec40, 0xc82e,	0xec7f, 0xc82e,		0x21, 0
+	.dw 0xecc0, 0xc82e,	0xecff, 0xc82e,		0x21, 0
+	.dw 0xed40, 0xc82e,	0xed7f, 0xc82e,		0x21, 0
+	.dw 0xedc0, 0xc82e,	0xedff, 0xc82e,		0x21, 0
+	.dw 0xee40, 0xc82e,	0xee7f, 0xc82e,		0x21, 0
+	.dw 0xeec0, 0xc82e,	0xeeff, 0xc82e,		0x21, 0
+	.dw 0xef40, 0xc82e,	0xef7f, 0xc82e,		0x21, 0
+	.dw 0xefc0, 0xc82e,	0xefff, 0xc82e,		0x21, 0
+	.dw 0xf040, 0xc82e,	0xf07f, 0xc82e,		0x21, 0
+	.dw 0xf0c0, 0xc82e,	0xf0ff, 0xc82e,		0x21, 0
+	.dw 0xf140, 0xc82e,	0xf17f, 0xc82e,		0x21, 0
+	.dw 0xf1c0, 0xc82e,	0xf1ff, 0xc82e,		0x21, 0
+	.dw 0xf240, 0xc82e,	0xf27f, 0xc82e,		0x21, 0
+	.dw 0xf2c0, 0xc82e,	0xf2ff, 0xc82e,		0x21, 0
+	.dw 0xf340, 0xc82e,	0xf37f, 0xc82e,		0x21, 0
+	.dw 0xf3c0, 0xc82e,	0xf3ff, 0xc82e,		0x21, 0
+	.dw 0xf440, 0xc82e,	0xf47f, 0xc82e,		0x21, 0
+	.dw 0xf4c0, 0xc82e,	0xf4ff, 0xc82e,		0x21, 0
+	.dw 0xf540, 0xc82e,	0xf57f, 0xc82e,		0x21, 0
+	.dw 0xf5c0, 0xc82e,	0xf5ff, 0xc82e,		0x21, 0
+	.dw 0xf640, 0xc82e,	0xf67f, 0xc82e,		0x21, 0
+	.dw 0xf6c0, 0xc82e,	0xf6ff, 0xc82e,		0x21, 0
+	.dw 0xf740, 0xc82e,	0xf77f, 0xc82e,		0x21, 0
+	.dw 0xf7c0, 0xc82e,	0xf7ff, 0xc82e,		0x21, 0
+	.dw 0xf840, 0xc82e,	0xf87f, 0xc82e,		0x21, 0
+	.dw 0xf8c0, 0xc82e,	0xf8ff, 0xc82e,		0x21, 0
+	.dw 0xf940, 0xc82e,	0xf97f, 0xc82e,		0x21, 0
+	.dw 0xf9c0, 0xc82e,	0xffff, 0xc82e,		0x21, 0
+	.dw 0x0040, 0xc82f,	0x007f, 0xc82f,		0x21, 0
+	.dw 0x00c0, 0xc82f,	0x00ff, 0xc82f,		0x21, 0
+	.dw 0x0140, 0xc82f,	0x017f, 0xc82f,		0x21, 0
+	.dw 0x01c0, 0xc82f,	0x01ff, 0xc82f,		0x21, 0
+	.dw 0x0240, 0xc82f,	0x027f, 0xc82f,		0x21, 0
+	.dw 0x02c0, 0xc82f,	0x02ff, 0xc82f,		0x21, 0
+	.dw 0x0340, 0xc82f,	0x037f, 0xc82f,		0x21, 0
+	.dw 0x03c0, 0xc82f,	0x03ff, 0xc82f,		0x21, 0
+	.dw 0x0440, 0xc82f,	0x047f, 0xc82f,		0x21, 0
+	.dw 0x04c0, 0xc82f,	0x04ff, 0xc82f,		0x21, 0
+	.dw 0x0540, 0xc82f,	0x057f, 0xc82f,		0x21, 0
+	.dw 0x05c0, 0xc82f,	0x05ff, 0xc82f,		0x21, 0
+	.dw 0x0640, 0xc82f,	0x067f, 0xc82f,		0x21, 0
+	.dw 0x06c0, 0xc82f,	0x06ff, 0xc82f,		0x21, 0
+	.dw 0x0740, 0xc82f,	0x077f, 0xc82f,		0x21, 0
+	.dw 0x07c0, 0xc82f,	0x07ff, 0xc82f,		0x21, 0
+	.dw 0x0840, 0xc82f,	0x087f, 0xc82f,		0x21, 0
+	.dw 0x08c0, 0xc82f,	0x08ff, 0xc82f,		0x21, 0
+	.dw 0x0940, 0xc82f,	0x097f, 0xc82f,		0x21, 0
+	.dw 0x09c0, 0xc82f,	0x09ff, 0xc82f,		0x21, 0
+	.dw 0x0a40, 0xc82f,	0x0a7f, 0xc82f,		0x21, 0
+	.dw 0x0ac0, 0xc82f,	0x0aff, 0xc82f,		0x21, 0
+	.dw 0x0b40, 0xc82f,	0x0b7f, 0xc82f,		0x21, 0
+	.dw 0x0bc0, 0xc82f,	0x0bff, 0xc82f,		0x21, 0
+	.dw 0x0c40, 0xc82f,	0x0c7f, 0xc82f,		0x21, 0
+	.dw 0x0cc0, 0xc82f,	0x0cff, 0xc82f,		0x21, 0
+	.dw 0x0d40, 0xc82f,	0x0d7f, 0xc82f,		0x21, 0
+	.dw 0x0dc0, 0xc82f,	0x0dff, 0xc82f,		0x21, 0
+	.dw 0x0e40, 0xc82f,	0x0e7f, 0xc82f,		0x21, 0
+	.dw 0x0ec0, 0xc82f,	0x0eff, 0xc82f,		0x21, 0
+	.dw 0x0f40, 0xc82f,	0x0f7f, 0xc82f,		0x21, 0
+	.dw 0x0fc0, 0xc82f,	0x0fff, 0xc82f,		0x21, 0
+	.dw 0x1040, 0xc82f,	0x107f, 0xc82f,		0x21, 0
+	.dw 0x10c0, 0xc82f,	0x10ff, 0xc82f,		0x21, 0
+	.dw 0x1140, 0xc82f,	0x117f, 0xc82f,		0x21, 0
+	.dw 0x11c0, 0xc82f,	0x11ff, 0xc82f,		0x21, 0
+	.dw 0x1240, 0xc82f,	0x127f, 0xc82f,		0x21, 0
+	.dw 0x12c0, 0xc82f,	0x12ff, 0xc82f,		0x21, 0
+	.dw 0x1340, 0xc82f,	0x137f, 0xc82f,		0x21, 0
+	.dw 0x13c0, 0xc82f,	0x13ff, 0xc82f,		0x21, 0
+	.dw 0x1440, 0xc82f,	0x147f, 0xc82f,		0x21, 0
+	.dw 0x14c0, 0xc82f,	0x14ff, 0xc82f,		0x21, 0
+	.dw 0x1540, 0xc82f,	0x157f, 0xc82f,		0x21, 0
+	.dw 0x15c0, 0xc82f,	0x15ff, 0xc82f,		0x21, 0
+	.dw 0x1640, 0xc82f,	0x167f, 0xc82f,		0x21, 0
+	.dw 0x16c0, 0xc82f,	0x16ff, 0xc82f,		0x21, 0
+	.dw 0x1740, 0xc82f,	0x177f, 0xc82f,		0x21, 0
+	.dw 0x17c0, 0xc82f,	0x17ff, 0xc82f,		0x21, 0
+	.dw 0x1840, 0xc82f,	0x187f, 0xc82f,		0x21, 0
+	.dw 0x18c0, 0xc82f,	0x18ff, 0xc82f,		0x21, 0
+	.dw 0x1940, 0xc82f,	0x197f, 0xc82f,		0x21, 0
+	.dw 0x19c0, 0xc82f,	0x1fff, 0xc82f,		0x21, 0
+	.dw 0x2040, 0xc82f,	0x207f, 0xc82f,		0x21, 0
+	.dw 0x20c0, 0xc82f,	0x20ff, 0xc82f,		0x21, 0
+	.dw 0x2140, 0xc82f,	0x217f, 0xc82f,		0x21, 0
+	.dw 0x21c0, 0xc82f,	0x21ff, 0xc82f,		0x21, 0
+	.dw 0x2240, 0xc82f,	0x227f, 0xc82f,		0x21, 0
+	.dw 0x22c0, 0xc82f,	0x22ff, 0xc82f,		0x21, 0
+	.dw 0x2340, 0xc82f,	0x237f, 0xc82f,		0x21, 0
+	.dw 0x23c0, 0xc82f,	0x23ff, 0xc82f,		0x21, 0
+	.dw 0x2440, 0xc82f,	0x247f, 0xc82f,		0x21, 0
+	.dw 0x24c0, 0xc82f,	0x24ff, 0xc82f,		0x21, 0
+	.dw 0x2540, 0xc82f,	0x257f, 0xc82f,		0x21, 0
+	.dw 0x25c0, 0xc82f,	0x25ff, 0xc82f,		0x21, 0
+	.dw 0x2640, 0xc82f,	0x267f, 0xc82f,		0x21, 0
+	.dw 0x26c0, 0xc82f,	0x26ff, 0xc82f,		0x21, 0
+	.dw 0x2740, 0xc82f,	0x277f, 0xc82f,		0x21, 0
+	.dw 0x27c0, 0xc82f,	0x27ff, 0xc82f,		0x21, 0
+	.dw 0x2840, 0xc82f,	0x287f, 0xc82f,		0x21, 0
+	.dw 0x28c0, 0xc82f,	0x28ff, 0xc82f,		0x21, 0
+	.dw 0x2940, 0xc82f,	0x297f, 0xc82f,		0x21, 0
+	.dw 0x29c0, 0xc82f,	0x29ff, 0xc82f,		0x21, 0
+	.dw 0x2a40, 0xc82f,	0x2a7f, 0xc82f,		0x21, 0
+	.dw 0x2ac0, 0xc82f,	0x2aff, 0xc82f,		0x21, 0
+	.dw 0x2b40, 0xc82f,	0x2b7f, 0xc82f,		0x21, 0
+	.dw 0x2bc0, 0xc82f,	0x2bff, 0xc82f,		0x21, 0
+	.dw 0x2c40, 0xc82f,	0x2c7f, 0xc82f,		0x21, 0
+	.dw 0x2cc0, 0xc82f,	0x2cff, 0xc82f,		0x21, 0
+	.dw 0x2d40, 0xc82f,	0x2d7f, 0xc82f,		0x21, 0
+	.dw 0x2dc0, 0xc82f,	0x2dff, 0xc82f,		0x21, 0
+	.dw 0x2e40, 0xc82f,	0x2e7f, 0xc82f,		0x21, 0
+	.dw 0x2ec0, 0xc82f,	0x2eff, 0xc82f,		0x21, 0
+	.dw 0x2f40, 0xc82f,	0x2f7f, 0xc82f,		0x21, 0
+	.dw 0x2fc0, 0xc82f,	0x2fff, 0xc82f,		0x21, 0
+	.dw 0x3040, 0xc82f,	0x307f, 0xc82f,		0x21, 0
+	.dw 0x30c0, 0xc82f,	0x30ff, 0xc82f,		0x21, 0
+	.dw 0x3140, 0xc82f,	0x317f, 0xc82f,		0x21, 0
+	.dw 0x31c0, 0xc82f,	0x31ff, 0xc82f,		0x21, 0
+	.dw 0x3240, 0xc82f,	0x327f, 0xc82f,		0x21, 0
+	.dw 0x32c0, 0xc82f,	0x32ff, 0xc82f,		0x21, 0
+	.dw 0x3340, 0xc82f,	0x337f, 0xc82f,		0x21, 0
+	.dw 0x33c0, 0xc82f,	0x33ff, 0xc82f,		0x21, 0
+	.dw 0x3440, 0xc82f,	0x347f, 0xc82f,		0x21, 0
+	.dw 0x34c0, 0xc82f,	0x34ff, 0xc82f,		0x21, 0
+	.dw 0x3540, 0xc82f,	0x357f, 0xc82f,		0x21, 0
+	.dw 0x35c0, 0xc82f,	0x35ff, 0xc82f,		0x21, 0
+	.dw 0x3640, 0xc82f,	0x367f, 0xc82f,		0x21, 0
+	.dw 0x36c0, 0xc82f,	0x36ff, 0xc82f,		0x21, 0
+	.dw 0x3740, 0xc82f,	0x377f, 0xc82f,		0x21, 0
+	.dw 0x37c0, 0xc82f,	0x37ff, 0xc82f,		0x21, 0
+	.dw 0x3840, 0xc82f,	0x387f, 0xc82f,		0x21, 0
+	.dw 0x38c0, 0xc82f,	0x38ff, 0xc82f,		0x21, 0
+	.dw 0x3940, 0xc82f,	0x397f, 0xc82f,		0x21, 0
+	.dw 0x39c0, 0xc82f,	0x1fff, 0xc830,		0x21, 0
+	.dw 0x3a00, 0xc830,	0x5fff, 0xc830,		0x21, 0
+	.dw 0x7a00, 0xc830,	0x9fff, 0xc830,		0x21, 0
+	.dw 0xba00, 0xc830,	0xdfff, 0xc830,		0x21, 0
+	.dw 0xfa00, 0xc830,	0x1fff, 0xc831,		0x21, 0
+	.dw 0x3a00, 0xc831,	0x5fff, 0xc831,		0x21, 0
+	.dw 0x7a00, 0xc831,	0x9fff, 0xc831,		0x21, 0
+	.dw 0xba00, 0xc831,	0xdfff, 0xc831,		0x21, 0
+	.dw 0xfa00, 0xc831,	0x1fff, 0xc832,		0x21, 0
+	.dw 0x3a00, 0xc832,	0x5fff, 0xc832,		0x21, 0
+	.dw 0x7a00, 0xc832,	0x9fff, 0xc832,		0x21, 0
+	.dw 0xba00, 0xc832,	0xdfff, 0xc832,		0x21, 0
+	.dw 0xfa00, 0xc832,	0xffff, 0xc833,		0x21, 0
+	.dw 0x1a00, 0xc834,	0x1fff, 0xc834,		0x21, 0
+	.dw 0x3a00, 0xc834,	0x3fff, 0xc834,		0x21, 0
+	.dw 0x5a00, 0xc834,	0x5fff, 0xc834,		0x21, 0
+	.dw 0x7a00, 0xc834,	0x7fff, 0xc834,		0x21, 0
+	.dw 0x9a00, 0xc834,	0x9fff, 0xc834,		0x21, 0
+	.dw 0xba00, 0xc834,	0xbfff, 0xc834,		0x21, 0
+	.dw 0xda00, 0xc834,	0xdfff, 0xc834,		0x21, 0
+	.dw 0xfa00, 0xc834,	0xffff, 0xc834,		0x21, 0
+	.dw 0x1a00, 0xc835,	0x1fff, 0xc835,		0x21, 0
+	.dw 0x3a00, 0xc835,	0x3fff, 0xc835,		0x21, 0
+	.dw 0x5a00, 0xc835,	0x5fff, 0xc835,		0x21, 0
+	.dw 0x7a00, 0xc835,	0x7fff, 0xc835,		0x21, 0
+	.dw 0x9a00, 0xc835,	0x9fff, 0xc835,		0x21, 0
+	.dw 0xba00, 0xc835,	0xbfff, 0xc835,		0x21, 0
+	.dw 0xda00, 0xc835,	0xdfff, 0xc835,		0x21, 0
+	.dw 0xfa00, 0xc835,	0xffff, 0xc835,		0x21, 0
+	.dw 0x1a00, 0xc836,	0x1fff, 0xc836,		0x21, 0
+	.dw 0x3a00, 0xc836,	0x3fff, 0xc836,		0x21, 0
+	.dw 0x5a00, 0xc836,	0x5fff, 0xc836,		0x21, 0
+	.dw 0x7a00, 0xc836,	0x7fff, 0xc836,		0x21, 0
+	.dw 0x9a00, 0xc836,	0x9fff, 0xc836,		0x21, 0
+	.dw 0xba00, 0xc836,	0xbfff, 0xc836,		0x21, 0
+	.dw 0xda00, 0xc836,	0xdfff, 0xc836,		0x21, 0
+	.dw 0xfa00, 0xc836,	0xffff, 0xc836,		0x21, 0
+	.dw 0x1a00, 0xc837,	0x1fff, 0xc837,		0x21, 0
+	.dw 0x3a00, 0xc837,	0x1fff, 0xc838,		0x21, 0
+	.dw 0x2040, 0xc838,	0x207f, 0xc838,		0x21, 0
+	.dw 0x20c0, 0xc838,	0x20ff, 0xc838,		0x21, 0
+	.dw 0x2140, 0xc838,	0x217f, 0xc838,		0x21, 0
+	.dw 0x21c0, 0xc838,	0x21ff, 0xc838,		0x21, 0
+	.dw 0x2240, 0xc838,	0x227f, 0xc838,		0x21, 0
+	.dw 0x22c0, 0xc838,	0x22ff, 0xc838,		0x21, 0
+	.dw 0x2340, 0xc838,	0x237f, 0xc838,		0x21, 0
+	.dw 0x23c0, 0xc838,	0x23ff, 0xc838,		0x21, 0
+	.dw 0x2440, 0xc838,	0x247f, 0xc838,		0x21, 0
+	.dw 0x24c0, 0xc838,	0x24ff, 0xc838,		0x21, 0
+	.dw 0x2540, 0xc838,	0x257f, 0xc838,		0x21, 0
+	.dw 0x25c0, 0xc838,	0x25ff, 0xc838,		0x21, 0
+	.dw 0x2640, 0xc838,	0x267f, 0xc838,		0x21, 0
+	.dw 0x26c0, 0xc838,	0x26ff, 0xc838,		0x21, 0
+	.dw 0x2740, 0xc838,	0x277f, 0xc838,		0x21, 0
+	.dw 0x27c0, 0xc838,	0x27ff, 0xc838,		0x21, 0
+	.dw 0x2840, 0xc838,	0x287f, 0xc838,		0x21, 0
+	.dw 0x28c0, 0xc838,	0x28ff, 0xc838,		0x21, 0
+	.dw 0x2940, 0xc838,	0x297f, 0xc838,		0x21, 0
+	.dw 0x29c0, 0xc838,	0x29ff, 0xc838,		0x21, 0
+	.dw 0x2a40, 0xc838,	0x2a7f, 0xc838,		0x21, 0
+	.dw 0x2ac0, 0xc838,	0x2aff, 0xc838,		0x21, 0
+	.dw 0x2b40, 0xc838,	0x2b7f, 0xc838,		0x21, 0
+	.dw 0x2bc0, 0xc838,	0x2bff, 0xc838,		0x21, 0
+	.dw 0x2c40, 0xc838,	0x2c7f, 0xc838,		0x21, 0
+	.dw 0x2cc0, 0xc838,	0x2cff, 0xc838,		0x21, 0
+	.dw 0x2d40, 0xc838,	0x2d7f, 0xc838,		0x21, 0
+	.dw 0x2dc0, 0xc838,	0x2dff, 0xc838,		0x21, 0
+	.dw 0x2e40, 0xc838,	0x2e7f, 0xc838,		0x21, 0
+	.dw 0x2ec0, 0xc838,	0x2eff, 0xc838,		0x21, 0
+	.dw 0x2f40, 0xc838,	0x2f7f, 0xc838,		0x21, 0
+	.dw 0x2fc0, 0xc838,	0x2fff, 0xc838,		0x21, 0
+	.dw 0x3040, 0xc838,	0x307f, 0xc838,		0x21, 0
+	.dw 0x30c0, 0xc838,	0x30ff, 0xc838,		0x21, 0
+	.dw 0x3140, 0xc838,	0x317f, 0xc838,		0x21, 0
+	.dw 0x31c0, 0xc838,	0x31ff, 0xc838,		0x21, 0
+	.dw 0x3240, 0xc838,	0x327f, 0xc838,		0x21, 0
+	.dw 0x32c0, 0xc838,	0x32ff, 0xc838,		0x21, 0
+	.dw 0x3340, 0xc838,	0x337f, 0xc838,		0x21, 0
+	.dw 0x33c0, 0xc838,	0x33ff, 0xc838,		0x21, 0
+	.dw 0x3440, 0xc838,	0x347f, 0xc838,		0x21, 0
+	.dw 0x34c0, 0xc838,	0x34ff, 0xc838,		0x21, 0
+	.dw 0x3540, 0xc838,	0x357f, 0xc838,		0x21, 0
+	.dw 0x35c0, 0xc838,	0x35ff, 0xc838,		0x21, 0
+	.dw 0x3640, 0xc838,	0x367f, 0xc838,		0x21, 0
+	.dw 0x36c0, 0xc838,	0x36ff, 0xc838,		0x21, 0
+	.dw 0x3740, 0xc838,	0x377f, 0xc838,		0x21, 0
+	.dw 0x37c0, 0xc838,	0x37ff, 0xc838,		0x21, 0
+	.dw 0x3840, 0xc838,	0x387f, 0xc838,		0x21, 0
+	.dw 0x38c0, 0xc838,	0x38ff, 0xc838,		0x21, 0
+	.dw 0x3940, 0xc838,	0x397f, 0xc838,		0x21, 0
+	.dw 0x39c0, 0xc838,	0x5fff, 0xc838,		0x21, 0
+	.dw 0x6040, 0xc838,	0x607f, 0xc838,		0x21, 0
+	.dw 0x60c0, 0xc838,	0x60ff, 0xc838,		0x21, 0
+	.dw 0x6140, 0xc838,	0x617f, 0xc838,		0x21, 0
+	.dw 0x61c0, 0xc838,	0x61ff, 0xc838,		0x21, 0
+	.dw 0x6240, 0xc838,	0x627f, 0xc838,		0x21, 0
+	.dw 0x62c0, 0xc838,	0x62ff, 0xc838,		0x21, 0
+	.dw 0x6340, 0xc838,	0x637f, 0xc838,		0x21, 0
+	.dw 0x63c0, 0xc838,	0x63ff, 0xc838,		0x21, 0
+	.dw 0x6440, 0xc838,	0x647f, 0xc838,		0x21, 0
+	.dw 0x64c0, 0xc838,	0x64ff, 0xc838,		0x21, 0
+	.dw 0x6540, 0xc838,	0x657f, 0xc838,		0x21, 0
+	.dw 0x65c0, 0xc838,	0x65ff, 0xc838,		0x21, 0
+	.dw 0x6640, 0xc838,	0x667f, 0xc838,		0x21, 0
+	.dw 0x66c0, 0xc838,	0x66ff, 0xc838,		0x21, 0
+	.dw 0x6740, 0xc838,	0x677f, 0xc838,		0x21, 0
+	.dw 0x67c0, 0xc838,	0x67ff, 0xc838,		0x21, 0
+	.dw 0x6840, 0xc838,	0x687f, 0xc838,		0x21, 0
+	.dw 0x68c0, 0xc838,	0x68ff, 0xc838,		0x21, 0
+	.dw 0x6940, 0xc838,	0x697f, 0xc838,		0x21, 0
+	.dw 0x69c0, 0xc838,	0x69ff, 0xc838,		0x21, 0
+	.dw 0x6a40, 0xc838,	0x6a7f, 0xc838,		0x21, 0
+	.dw 0x6ac0, 0xc838,	0x6aff, 0xc838,		0x21, 0
+	.dw 0x6b40, 0xc838,	0x6b7f, 0xc838,		0x21, 0
+	.dw 0x6bc0, 0xc838,	0x6bff, 0xc838,		0x21, 0
+	.dw 0x6c40, 0xc838,	0x6c7f, 0xc838,		0x21, 0
+	.dw 0x6cc0, 0xc838,	0x6cff, 0xc838,		0x21, 0
+	.dw 0x6d40, 0xc838,	0x6d7f, 0xc838,		0x21, 0
+	.dw 0x6dc0, 0xc838,	0x6dff, 0xc838,		0x21, 0
+	.dw 0x6e40, 0xc838,	0x6e7f, 0xc838,		0x21, 0
+	.dw 0x6ec0, 0xc838,	0x6eff, 0xc838,		0x21, 0
+	.dw 0x6f40, 0xc838,	0x6f7f, 0xc838,		0x21, 0
+	.dw 0x6fc0, 0xc838,	0x6fff, 0xc838,		0x21, 0
+	.dw 0x7040, 0xc838,	0x707f, 0xc838,		0x21, 0
+	.dw 0x70c0, 0xc838,	0x70ff, 0xc838,		0x21, 0
+	.dw 0x7140, 0xc838,	0x717f, 0xc838,		0x21, 0
+	.dw 0x71c0, 0xc838,	0x71ff, 0xc838,		0x21, 0
+	.dw 0x7240, 0xc838,	0x727f, 0xc838,		0x21, 0
+	.dw 0x72c0, 0xc838,	0x72ff, 0xc838,		0x21, 0
+	.dw 0x7340, 0xc838,	0x737f, 0xc838,		0x21, 0
+	.dw 0x73c0, 0xc838,	0x73ff, 0xc838,		0x21, 0
+	.dw 0x7440, 0xc838,	0x747f, 0xc838,		0x21, 0
+	.dw 0x74c0, 0xc838,	0x74ff, 0xc838,		0x21, 0
+	.dw 0x7540, 0xc838,	0x757f, 0xc838,		0x21, 0
+	.dw 0x75c0, 0xc838,	0x75ff, 0xc838,		0x21, 0
+	.dw 0x7640, 0xc838,	0x767f, 0xc838,		0x21, 0
+	.dw 0x76c0, 0xc838,	0x76ff, 0xc838,		0x21, 0
+	.dw 0x7740, 0xc838,	0x777f, 0xc838,		0x21, 0
+	.dw 0x77c0, 0xc838,	0x77ff, 0xc838,		0x21, 0
+	.dw 0x7840, 0xc838,	0x787f, 0xc838,		0x21, 0
+	.dw 0x78c0, 0xc838,	0x78ff, 0xc838,		0x21, 0
+	.dw 0x7940, 0xc838,	0x797f, 0xc838,		0x21, 0
+	.dw 0x79c0, 0xc838,	0x9fff, 0xc838,		0x21, 0
+	.dw 0xa040, 0xc838,	0xa07f, 0xc838,		0x21, 0
+	.dw 0xa0c0, 0xc838,	0xa0ff, 0xc838,		0x21, 0
+	.dw 0xa140, 0xc838,	0xa17f, 0xc838,		0x21, 0
+	.dw 0xa1c0, 0xc838,	0xa1ff, 0xc838,		0x21, 0
+	.dw 0xa240, 0xc838,	0xa27f, 0xc838,		0x21, 0
+	.dw 0xa2c0, 0xc838,	0xa2ff, 0xc838,		0x21, 0
+	.dw 0xa340, 0xc838,	0xa37f, 0xc838,		0x21, 0
+	.dw 0xa3c0, 0xc838,	0xa3ff, 0xc838,		0x21, 0
+	.dw 0xa440, 0xc838,	0xa47f, 0xc838,		0x21, 0
+	.dw 0xa4c0, 0xc838,	0xa4ff, 0xc838,		0x21, 0
+	.dw 0xa540, 0xc838,	0xa57f, 0xc838,		0x21, 0
+	.dw 0xa5c0, 0xc838,	0xa5ff, 0xc838,		0x21, 0
+	.dw 0xa640, 0xc838,	0xa67f, 0xc838,		0x21, 0
+	.dw 0xa6c0, 0xc838,	0xa6ff, 0xc838,		0x21, 0
+	.dw 0xa740, 0xc838,	0xa77f, 0xc838,		0x21, 0
+	.dw 0xa7c0, 0xc838,	0xa7ff, 0xc838,		0x21, 0
+	.dw 0xa840, 0xc838,	0xa87f, 0xc838,		0x21, 0
+	.dw 0xa8c0, 0xc838,	0xa8ff, 0xc838,		0x21, 0
+	.dw 0xa940, 0xc838,	0xa97f, 0xc838,		0x21, 0
+	.dw 0xa9c0, 0xc838,	0xa9ff, 0xc838,		0x21, 0
+	.dw 0xaa40, 0xc838,	0xaa7f, 0xc838,		0x21, 0
+	.dw 0xaac0, 0xc838,	0xaaff, 0xc838,		0x21, 0
+	.dw 0xab40, 0xc838,	0xab7f, 0xc838,		0x21, 0
+	.dw 0xabc0, 0xc838,	0xabff, 0xc838,		0x21, 0
+	.dw 0xac40, 0xc838,	0xac7f, 0xc838,		0x21, 0
+	.dw 0xacc0, 0xc838,	0xacff, 0xc838,		0x21, 0
+	.dw 0xad40, 0xc838,	0xad7f, 0xc838,		0x21, 0
+	.dw 0xadc0, 0xc838,	0xadff, 0xc838,		0x21, 0
+	.dw 0xae40, 0xc838,	0xae7f, 0xc838,		0x21, 0
+	.dw 0xaec0, 0xc838,	0xaeff, 0xc838,		0x21, 0
+	.dw 0xaf40, 0xc838,	0xaf7f, 0xc838,		0x21, 0
+	.dw 0xafc0, 0xc838,	0xafff, 0xc838,		0x21, 0
+	.dw 0xb040, 0xc838,	0xb07f, 0xc838,		0x21, 0
+	.dw 0xb0c0, 0xc838,	0xb0ff, 0xc838,		0x21, 0
+	.dw 0xb140, 0xc838,	0xb17f, 0xc838,		0x21, 0
+	.dw 0xb1c0, 0xc838,	0xb1ff, 0xc838,		0x21, 0
+	.dw 0xb240, 0xc838,	0xb27f, 0xc838,		0x21, 0
+	.dw 0xb2c0, 0xc838,	0xb2ff, 0xc838,		0x21, 0
+	.dw 0xb340, 0xc838,	0xb37f, 0xc838,		0x21, 0
+	.dw 0xb3c0, 0xc838,	0xb3ff, 0xc838,		0x21, 0
+	.dw 0xb440, 0xc838,	0xb47f, 0xc838,		0x21, 0
+	.dw 0xb4c0, 0xc838,	0xb4ff, 0xc838,		0x21, 0
+	.dw 0xb540, 0xc838,	0xb57f, 0xc838,		0x21, 0
+	.dw 0xb5c0, 0xc838,	0xb5ff, 0xc838,		0x21, 0
+	.dw 0xb640, 0xc838,	0xb67f, 0xc838,		0x21, 0
+	.dw 0xb6c0, 0xc838,	0xb6ff, 0xc838,		0x21, 0
+	.dw 0xb740, 0xc838,	0xb77f, 0xc838,		0x21, 0
+	.dw 0xb7c0, 0xc838,	0xb7ff, 0xc838,		0x21, 0
+	.dw 0xb840, 0xc838,	0xb87f, 0xc838,		0x21, 0
+	.dw 0xb8c0, 0xc838,	0xb8ff, 0xc838,		0x21, 0
+	.dw 0xb940, 0xc838,	0xb97f, 0xc838,		0x21, 0
+	.dw 0xb9c0, 0xc838,	0xdfff, 0xc838,		0x21, 0
+	.dw 0xe040, 0xc838,	0xe07f, 0xc838,		0x21, 0
+	.dw 0xe0c0, 0xc838,	0xe0ff, 0xc838,		0x21, 0
+	.dw 0xe140, 0xc838,	0xe17f, 0xc838,		0x21, 0
+	.dw 0xe1c0, 0xc838,	0xe1ff, 0xc838,		0x21, 0
+	.dw 0xe240, 0xc838,	0xe27f, 0xc838,		0x21, 0
+	.dw 0xe2c0, 0xc838,	0xe2ff, 0xc838,		0x21, 0
+	.dw 0xe340, 0xc838,	0xe37f, 0xc838,		0x21, 0
+	.dw 0xe3c0, 0xc838,	0xe3ff, 0xc838,		0x21, 0
+	.dw 0xe440, 0xc838,	0xe47f, 0xc838,		0x21, 0
+	.dw 0xe4c0, 0xc838,	0xe4ff, 0xc838,		0x21, 0
+	.dw 0xe540, 0xc838,	0xe57f, 0xc838,		0x21, 0
+	.dw 0xe5c0, 0xc838,	0xe5ff, 0xc838,		0x21, 0
+	.dw 0xe640, 0xc838,	0xe67f, 0xc838,		0x21, 0
+	.dw 0xe6c0, 0xc838,	0xe6ff, 0xc838,		0x21, 0
+	.dw 0xe740, 0xc838,	0xe77f, 0xc838,		0x21, 0
+	.dw 0xe7c0, 0xc838,	0xe7ff, 0xc838,		0x21, 0
+	.dw 0xe840, 0xc838,	0xe87f, 0xc838,		0x21, 0
+	.dw 0xe8c0, 0xc838,	0xe8ff, 0xc838,		0x21, 0
+	.dw 0xe940, 0xc838,	0xe97f, 0xc838,		0x21, 0
+	.dw 0xe9c0, 0xc838,	0xe9ff, 0xc838,		0x21, 0
+	.dw 0xea40, 0xc838,	0xea7f, 0xc838,		0x21, 0
+	.dw 0xeac0, 0xc838,	0xeaff, 0xc838,		0x21, 0
+	.dw 0xeb40, 0xc838,	0xeb7f, 0xc838,		0x21, 0
+	.dw 0xebc0, 0xc838,	0xebff, 0xc838,		0x21, 0
+	.dw 0xec40, 0xc838,	0xec7f, 0xc838,		0x21, 0
+	.dw 0xecc0, 0xc838,	0xecff, 0xc838,		0x21, 0
+	.dw 0xed40, 0xc838,	0xed7f, 0xc838,		0x21, 0
+	.dw 0xedc0, 0xc838,	0xedff, 0xc838,		0x21, 0
+	.dw 0xee40, 0xc838,	0xee7f, 0xc838,		0x21, 0
+	.dw 0xeec0, 0xc838,	0xeeff, 0xc838,		0x21, 0
+	.dw 0xef40, 0xc838,	0xef7f, 0xc838,		0x21, 0
+	.dw 0xefc0, 0xc838,	0xefff, 0xc838,		0x21, 0
+	.dw 0xf040, 0xc838,	0xf07f, 0xc838,		0x21, 0
+	.dw 0xf0c0, 0xc838,	0xf0ff, 0xc838,		0x21, 0
+	.dw 0xf140, 0xc838,	0xf17f, 0xc838,		0x21, 0
+	.dw 0xf1c0, 0xc838,	0xf1ff, 0xc838,		0x21, 0
+	.dw 0xf240, 0xc838,	0xf27f, 0xc838,		0x21, 0
+	.dw 0xf2c0, 0xc838,	0xf2ff, 0xc838,		0x21, 0
+	.dw 0xf340, 0xc838,	0xf37f, 0xc838,		0x21, 0
+	.dw 0xf3c0, 0xc838,	0xf3ff, 0xc838,		0x21, 0
+	.dw 0xf440, 0xc838,	0xf47f, 0xc838,		0x21, 0
+	.dw 0xf4c0, 0xc838,	0xf4ff, 0xc838,		0x21, 0
+	.dw 0xf540, 0xc838,	0xf57f, 0xc838,		0x21, 0
+	.dw 0xf5c0, 0xc838,	0xf5ff, 0xc838,		0x21, 0
+	.dw 0xf640, 0xc838,	0xf67f, 0xc838,		0x21, 0
+	.dw 0xf6c0, 0xc838,	0xf6ff, 0xc838,		0x21, 0
+	.dw 0xf740, 0xc838,	0xf77f, 0xc838,		0x21, 0
+	.dw 0xf7c0, 0xc838,	0xf7ff, 0xc838,		0x21, 0
+	.dw 0xf840, 0xc838,	0xf87f, 0xc838,		0x21, 0
+	.dw 0xf8c0, 0xc838,	0xf8ff, 0xc838,		0x21, 0
+	.dw 0xf940, 0xc838,	0xf97f, 0xc838,		0x21, 0
+	.dw 0xf9c0, 0xc838,	0x1fff, 0xc839,		0x21, 0
+	.dw 0x2040, 0xc839,	0x207f, 0xc839,		0x21, 0
+	.dw 0x20c0, 0xc839,	0x20ff, 0xc839,		0x21, 0
+	.dw 0x2140, 0xc839,	0x217f, 0xc839,		0x21, 0
+	.dw 0x21c0, 0xc839,	0x21ff, 0xc839,		0x21, 0
+	.dw 0x2240, 0xc839,	0x227f, 0xc839,		0x21, 0
+	.dw 0x22c0, 0xc839,	0x22ff, 0xc839,		0x21, 0
+	.dw 0x2340, 0xc839,	0x237f, 0xc839,		0x21, 0
+	.dw 0x23c0, 0xc839,	0x23ff, 0xc839,		0x21, 0
+	.dw 0x2440, 0xc839,	0x247f, 0xc839,		0x21, 0
+	.dw 0x24c0, 0xc839,	0x24ff, 0xc839,		0x21, 0
+	.dw 0x2540, 0xc839,	0x257f, 0xc839,		0x21, 0
+	.dw 0x25c0, 0xc839,	0x25ff, 0xc839,		0x21, 0
+	.dw 0x2640, 0xc839,	0x267f, 0xc839,		0x21, 0
+	.dw 0x26c0, 0xc839,	0x26ff, 0xc839,		0x21, 0
+	.dw 0x2740, 0xc839,	0x277f, 0xc839,		0x21, 0
+	.dw 0x27c0, 0xc839,	0x27ff, 0xc839,		0x21, 0
+	.dw 0x2840, 0xc839,	0x287f, 0xc839,		0x21, 0
+	.dw 0x28c0, 0xc839,	0x28ff, 0xc839,		0x21, 0
+	.dw 0x2940, 0xc839,	0x297f, 0xc839,		0x21, 0
+	.dw 0x29c0, 0xc839,	0x29ff, 0xc839,		0x21, 0
+	.dw 0x2a40, 0xc839,	0x2a7f, 0xc839,		0x21, 0
+	.dw 0x2ac0, 0xc839,	0x2aff, 0xc839,		0x21, 0
+	.dw 0x2b40, 0xc839,	0x2b7f, 0xc839,		0x21, 0
+	.dw 0x2bc0, 0xc839,	0x2bff, 0xc839,		0x21, 0
+	.dw 0x2c40, 0xc839,	0x2c7f, 0xc839,		0x21, 0
+	.dw 0x2cc0, 0xc839,	0x2cff, 0xc839,		0x21, 0
+	.dw 0x2d40, 0xc839,	0x2d7f, 0xc839,		0x21, 0
+	.dw 0x2dc0, 0xc839,	0x2dff, 0xc839,		0x21, 0
+	.dw 0x2e40, 0xc839,	0x2e7f, 0xc839,		0x21, 0
+	.dw 0x2ec0, 0xc839,	0x2eff, 0xc839,		0x21, 0
+	.dw 0x2f40, 0xc839,	0x2f7f, 0xc839,		0x21, 0
+	.dw 0x2fc0, 0xc839,	0x2fff, 0xc839,		0x21, 0
+	.dw 0x3040, 0xc839,	0x307f, 0xc839,		0x21, 0
+	.dw 0x30c0, 0xc839,	0x30ff, 0xc839,		0x21, 0
+	.dw 0x3140, 0xc839,	0x317f, 0xc839,		0x21, 0
+	.dw 0x31c0, 0xc839,	0x31ff, 0xc839,		0x21, 0
+	.dw 0x3240, 0xc839,	0x327f, 0xc839,		0x21, 0
+	.dw 0x32c0, 0xc839,	0x32ff, 0xc839,		0x21, 0
+	.dw 0x3340, 0xc839,	0x337f, 0xc839,		0x21, 0
+	.dw 0x33c0, 0xc839,	0x33ff, 0xc839,		0x21, 0
+	.dw 0x3440, 0xc839,	0x347f, 0xc839,		0x21, 0
+	.dw 0x34c0, 0xc839,	0x34ff, 0xc839,		0x21, 0
+	.dw 0x3540, 0xc839,	0x357f, 0xc839,		0x21, 0
+	.dw 0x35c0, 0xc839,	0x35ff, 0xc839,		0x21, 0
+	.dw 0x3640, 0xc839,	0x367f, 0xc839,		0x21, 0
+	.dw 0x36c0, 0xc839,	0x36ff, 0xc839,		0x21, 0
+	.dw 0x3740, 0xc839,	0x377f, 0xc839,		0x21, 0
+	.dw 0x37c0, 0xc839,	0x37ff, 0xc839,		0x21, 0
+	.dw 0x3840, 0xc839,	0x387f, 0xc839,		0x21, 0
+	.dw 0x38c0, 0xc839,	0x38ff, 0xc839,		0x21, 0
+	.dw 0x3940, 0xc839,	0x397f, 0xc839,		0x21, 0
+	.dw 0x39c0, 0xc839,	0x5fff, 0xc839,		0x21, 0
+	.dw 0x6040, 0xc839,	0x607f, 0xc839,		0x21, 0
+	.dw 0x60c0, 0xc839,	0x60ff, 0xc839,		0x21, 0
+	.dw 0x6140, 0xc839,	0x617f, 0xc839,		0x21, 0
+	.dw 0x61c0, 0xc839,	0x61ff, 0xc839,		0x21, 0
+	.dw 0x6240, 0xc839,	0x627f, 0xc839,		0x21, 0
+	.dw 0x62c0, 0xc839,	0x62ff, 0xc839,		0x21, 0
+	.dw 0x6340, 0xc839,	0x637f, 0xc839,		0x21, 0
+	.dw 0x63c0, 0xc839,	0x63ff, 0xc839,		0x21, 0
+	.dw 0x6440, 0xc839,	0x647f, 0xc839,		0x21, 0
+	.dw 0x64c0, 0xc839,	0x64ff, 0xc839,		0x21, 0
+	.dw 0x6540, 0xc839,	0x657f, 0xc839,		0x21, 0
+	.dw 0x65c0, 0xc839,	0x65ff, 0xc839,		0x21, 0
+	.dw 0x6640, 0xc839,	0x667f, 0xc839,		0x21, 0
+	.dw 0x66c0, 0xc839,	0x66ff, 0xc839,		0x21, 0
+	.dw 0x6740, 0xc839,	0x677f, 0xc839,		0x21, 0
+	.dw 0x67c0, 0xc839,	0x67ff, 0xc839,		0x21, 0
+	.dw 0x6840, 0xc839,	0x687f, 0xc839,		0x21, 0
+	.dw 0x68c0, 0xc839,	0x68ff, 0xc839,		0x21, 0
+	.dw 0x6940, 0xc839,	0x697f, 0xc839,		0x21, 0
+	.dw 0x69c0, 0xc839,	0x69ff, 0xc839,		0x21, 0
+	.dw 0x6a40, 0xc839,	0x6a7f, 0xc839,		0x21, 0
+	.dw 0x6ac0, 0xc839,	0x6aff, 0xc839,		0x21, 0
+	.dw 0x6b40, 0xc839,	0x6b7f, 0xc839,		0x21, 0
+	.dw 0x6bc0, 0xc839,	0x6bff, 0xc839,		0x21, 0
+	.dw 0x6c40, 0xc839,	0x6c7f, 0xc839,		0x21, 0
+	.dw 0x6cc0, 0xc839,	0x6cff, 0xc839,		0x21, 0
+	.dw 0x6d40, 0xc839,	0x6d7f, 0xc839,		0x21, 0
+	.dw 0x6dc0, 0xc839,	0x6dff, 0xc839,		0x21, 0
+	.dw 0x6e40, 0xc839,	0x6e7f, 0xc839,		0x21, 0
+	.dw 0x6ec0, 0xc839,	0x6eff, 0xc839,		0x21, 0
+	.dw 0x6f40, 0xc839,	0x6f7f, 0xc839,		0x21, 0
+	.dw 0x6fc0, 0xc839,	0x6fff, 0xc839,		0x21, 0
+	.dw 0x7040, 0xc839,	0x707f, 0xc839,		0x21, 0
+	.dw 0x70c0, 0xc839,	0x70ff, 0xc839,		0x21, 0
+	.dw 0x7140, 0xc839,	0x717f, 0xc839,		0x21, 0
+	.dw 0x71c0, 0xc839,	0x71ff, 0xc839,		0x21, 0
+	.dw 0x7240, 0xc839,	0x727f, 0xc839,		0x21, 0
+	.dw 0x72c0, 0xc839,	0x72ff, 0xc839,		0x21, 0
+	.dw 0x7340, 0xc839,	0x737f, 0xc839,		0x21, 0
+	.dw 0x73c0, 0xc839,	0x73ff, 0xc839,		0x21, 0
+	.dw 0x7440, 0xc839,	0x747f, 0xc839,		0x21, 0
+	.dw 0x74c0, 0xc839,	0x74ff, 0xc839,		0x21, 0
+	.dw 0x7540, 0xc839,	0x757f, 0xc839,		0x21, 0
+	.dw 0x75c0, 0xc839,	0x75ff, 0xc839,		0x21, 0
+	.dw 0x7640, 0xc839,	0x767f, 0xc839,		0x21, 0
+	.dw 0x76c0, 0xc839,	0x76ff, 0xc839,		0x21, 0
+	.dw 0x7740, 0xc839,	0x777f, 0xc839,		0x21, 0
+	.dw 0x77c0, 0xc839,	0x77ff, 0xc839,		0x21, 0
+	.dw 0x7840, 0xc839,	0x787f, 0xc839,		0x21, 0
+	.dw 0x78c0, 0xc839,	0x78ff, 0xc839,		0x21, 0
+	.dw 0x7940, 0xc839,	0x797f, 0xc839,		0x21, 0
+	.dw 0x79c0, 0xc839,	0x9fff, 0xc839,		0x21, 0
+	.dw 0xa040, 0xc839,	0xa07f, 0xc839,		0x21, 0
+	.dw 0xa0c0, 0xc839,	0xa0ff, 0xc839,		0x21, 0
+	.dw 0xa140, 0xc839,	0xa17f, 0xc839,		0x21, 0
+	.dw 0xa1c0, 0xc839,	0xa1ff, 0xc839,		0x21, 0
+	.dw 0xa240, 0xc839,	0xa27f, 0xc839,		0x21, 0
+	.dw 0xa2c0, 0xc839,	0xa2ff, 0xc839,		0x21, 0
+	.dw 0xa340, 0xc839,	0xa37f, 0xc839,		0x21, 0
+	.dw 0xa3c0, 0xc839,	0xa3ff, 0xc839,		0x21, 0
+	.dw 0xa440, 0xc839,	0xa47f, 0xc839,		0x21, 0
+	.dw 0xa4c0, 0xc839,	0xa4ff, 0xc839,		0x21, 0
+	.dw 0xa540, 0xc839,	0xa57f, 0xc839,		0x21, 0
+	.dw 0xa5c0, 0xc839,	0xa5ff, 0xc839,		0x21, 0
+	.dw 0xa640, 0xc839,	0xa67f, 0xc839,		0x21, 0
+	.dw 0xa6c0, 0xc839,	0xa6ff, 0xc839,		0x21, 0
+	.dw 0xa740, 0xc839,	0xa77f, 0xc839,		0x21, 0
+	.dw 0xa7c0, 0xc839,	0xa7ff, 0xc839,		0x21, 0
+	.dw 0xa840, 0xc839,	0xa87f, 0xc839,		0x21, 0
+	.dw 0xa8c0, 0xc839,	0xa8ff, 0xc839,		0x21, 0
+	.dw 0xa940, 0xc839,	0xa97f, 0xc839,		0x21, 0
+	.dw 0xa9c0, 0xc839,	0xa9ff, 0xc839,		0x21, 0
+	.dw 0xaa40, 0xc839,	0xaa7f, 0xc839,		0x21, 0
+	.dw 0xaac0, 0xc839,	0xaaff, 0xc839,		0x21, 0
+	.dw 0xab40, 0xc839,	0xab7f, 0xc839,		0x21, 0
+	.dw 0xabc0, 0xc839,	0xabff, 0xc839,		0x21, 0
+	.dw 0xac40, 0xc839,	0xac7f, 0xc839,		0x21, 0
+	.dw 0xacc0, 0xc839,	0xacff, 0xc839,		0x21, 0
+	.dw 0xad40, 0xc839,	0xad7f, 0xc839,		0x21, 0
+	.dw 0xadc0, 0xc839,	0xadff, 0xc839,		0x21, 0
+	.dw 0xae40, 0xc839,	0xae7f, 0xc839,		0x21, 0
+	.dw 0xaec0, 0xc839,	0xaeff, 0xc839,		0x21, 0
+	.dw 0xaf40, 0xc839,	0xaf7f, 0xc839,		0x21, 0
+	.dw 0xafc0, 0xc839,	0xafff, 0xc839,		0x21, 0
+	.dw 0xb040, 0xc839,	0xb07f, 0xc839,		0x21, 0
+	.dw 0xb0c0, 0xc839,	0xb0ff, 0xc839,		0x21, 0
+	.dw 0xb140, 0xc839,	0xb17f, 0xc839,		0x21, 0
+	.dw 0xb1c0, 0xc839,	0xb1ff, 0xc839,		0x21, 0
+	.dw 0xb240, 0xc839,	0xb27f, 0xc839,		0x21, 0
+	.dw 0xb2c0, 0xc839,	0xb2ff, 0xc839,		0x21, 0
+	.dw 0xb340, 0xc839,	0xb37f, 0xc839,		0x21, 0
+	.dw 0xb3c0, 0xc839,	0xb3ff, 0xc839,		0x21, 0
+	.dw 0xb440, 0xc839,	0xb47f, 0xc839,		0x21, 0
+	.dw 0xb4c0, 0xc839,	0xb4ff, 0xc839,		0x21, 0
+	.dw 0xb540, 0xc839,	0xb57f, 0xc839,		0x21, 0
+	.dw 0xb5c0, 0xc839,	0xb5ff, 0xc839,		0x21, 0
+	.dw 0xb640, 0xc839,	0xb67f, 0xc839,		0x21, 0
+	.dw 0xb6c0, 0xc839,	0xb6ff, 0xc839,		0x21, 0
+	.dw 0xb740, 0xc839,	0xb77f, 0xc839,		0x21, 0
+	.dw 0xb7c0, 0xc839,	0xb7ff, 0xc839,		0x21, 0
+	.dw 0xb840, 0xc839,	0xb87f, 0xc839,		0x21, 0
+	.dw 0xb8c0, 0xc839,	0xb8ff, 0xc839,		0x21, 0
+	.dw 0xb940, 0xc839,	0xb97f, 0xc839,		0x21, 0
+	.dw 0xb9c0, 0xc839,	0xdfff, 0xc839,		0x21, 0
+	.dw 0xe040, 0xc839,	0xe07f, 0xc839,		0x21, 0
+	.dw 0xe0c0, 0xc839,	0xe0ff, 0xc839,		0x21, 0
+	.dw 0xe140, 0xc839,	0xe17f, 0xc839,		0x21, 0
+	.dw 0xe1c0, 0xc839,	0xe1ff, 0xc839,		0x21, 0
+	.dw 0xe240, 0xc839,	0xe27f, 0xc839,		0x21, 0
+	.dw 0xe2c0, 0xc839,	0xe2ff, 0xc839,		0x21, 0
+	.dw 0xe340, 0xc839,	0xe37f, 0xc839,		0x21, 0
+	.dw 0xe3c0, 0xc839,	0xe3ff, 0xc839,		0x21, 0
+	.dw 0xe440, 0xc839,	0xe47f, 0xc839,		0x21, 0
+	.dw 0xe4c0, 0xc839,	0xe4ff, 0xc839,		0x21, 0
+	.dw 0xe540, 0xc839,	0xe57f, 0xc839,		0x21, 0
+	.dw 0xe5c0, 0xc839,	0xe5ff, 0xc839,		0x21, 0
+	.dw 0xe640, 0xc839,	0xe67f, 0xc839,		0x21, 0
+	.dw 0xe6c0, 0xc839,	0xe6ff, 0xc839,		0x21, 0
+	.dw 0xe740, 0xc839,	0xe77f, 0xc839,		0x21, 0
+	.dw 0xe7c0, 0xc839,	0xe7ff, 0xc839,		0x21, 0
+	.dw 0xe840, 0xc839,	0xe87f, 0xc839,		0x21, 0
+	.dw 0xe8c0, 0xc839,	0xe8ff, 0xc839,		0x21, 0
+	.dw 0xe940, 0xc839,	0xe97f, 0xc839,		0x21, 0
+	.dw 0xe9c0, 0xc839,	0xe9ff, 0xc839,		0x21, 0
+	.dw 0xea40, 0xc839,	0xea7f, 0xc839,		0x21, 0
+	.dw 0xeac0, 0xc839,	0xeaff, 0xc839,		0x21, 0
+	.dw 0xeb40, 0xc839,	0xeb7f, 0xc839,		0x21, 0
+	.dw 0xebc0, 0xc839,	0xebff, 0xc839,		0x21, 0
+	.dw 0xec40, 0xc839,	0xec7f, 0xc839,		0x21, 0
+	.dw 0xecc0, 0xc839,	0xecff, 0xc839,		0x21, 0
+	.dw 0xed40, 0xc839,	0xed7f, 0xc839,		0x21, 0
+	.dw 0xedc0, 0xc839,	0xedff, 0xc839,		0x21, 0
+	.dw 0xee40, 0xc839,	0xee7f, 0xc839,		0x21, 0
+	.dw 0xeec0, 0xc839,	0xeeff, 0xc839,		0x21, 0
+	.dw 0xef40, 0xc839,	0xef7f, 0xc839,		0x21, 0
+	.dw 0xefc0, 0xc839,	0xefff, 0xc839,		0x21, 0
+	.dw 0xf040, 0xc839,	0xf07f, 0xc839,		0x21, 0
+	.dw 0xf0c0, 0xc839,	0xf0ff, 0xc839,		0x21, 0
+	.dw 0xf140, 0xc839,	0xf17f, 0xc839,		0x21, 0
+	.dw 0xf1c0, 0xc839,	0xf1ff, 0xc839,		0x21, 0
+	.dw 0xf240, 0xc839,	0xf27f, 0xc839,		0x21, 0
+	.dw 0xf2c0, 0xc839,	0xf2ff, 0xc839,		0x21, 0
+	.dw 0xf340, 0xc839,	0xf37f, 0xc839,		0x21, 0
+	.dw 0xf3c0, 0xc839,	0xf3ff, 0xc839,		0x21, 0
+	.dw 0xf440, 0xc839,	0xf47f, 0xc839,		0x21, 0
+	.dw 0xf4c0, 0xc839,	0xf4ff, 0xc839,		0x21, 0
+	.dw 0xf540, 0xc839,	0xf57f, 0xc839,		0x21, 0
+	.dw 0xf5c0, 0xc839,	0xf5ff, 0xc839,		0x21, 0
+	.dw 0xf640, 0xc839,	0xf67f, 0xc839,		0x21, 0
+	.dw 0xf6c0, 0xc839,	0xf6ff, 0xc839,		0x21, 0
+	.dw 0xf740, 0xc839,	0xf77f, 0xc839,		0x21, 0
+	.dw 0xf7c0, 0xc839,	0xf7ff, 0xc839,		0x21, 0
+	.dw 0xf840, 0xc839,	0xf87f, 0xc839,		0x21, 0
+	.dw 0xf8c0, 0xc839,	0xf8ff, 0xc839,		0x21, 0
+	.dw 0xf940, 0xc839,	0xf97f, 0xc839,		0x21, 0
+	.dw 0xf9c0, 0xc839,	0x1fff, 0xc83a,		0x21, 0
+	.dw 0x2040, 0xc83a,	0x207f, 0xc83a,		0x21, 0
+	.dw 0x20c0, 0xc83a,	0x20ff, 0xc83a,		0x21, 0
+	.dw 0x2140, 0xc83a,	0x217f, 0xc83a,		0x21, 0
+	.dw 0x21c0, 0xc83a,	0x21ff, 0xc83a,		0x21, 0
+	.dw 0x2240, 0xc83a,	0x227f, 0xc83a,		0x21, 0
+	.dw 0x22c0, 0xc83a,	0x22ff, 0xc83a,		0x21, 0
+	.dw 0x2340, 0xc83a,	0x237f, 0xc83a,		0x21, 0
+	.dw 0x23c0, 0xc83a,	0x23ff, 0xc83a,		0x21, 0
+	.dw 0x2440, 0xc83a,	0x247f, 0xc83a,		0x21, 0
+	.dw 0x24c0, 0xc83a,	0x24ff, 0xc83a,		0x21, 0
+	.dw 0x2540, 0xc83a,	0x257f, 0xc83a,		0x21, 0
+	.dw 0x25c0, 0xc83a,	0x25ff, 0xc83a,		0x21, 0
+	.dw 0x2640, 0xc83a,	0x267f, 0xc83a,		0x21, 0
+	.dw 0x26c0, 0xc83a,	0x26ff, 0xc83a,		0x21, 0
+	.dw 0x2740, 0xc83a,	0x277f, 0xc83a,		0x21, 0
+	.dw 0x27c0, 0xc83a,	0x27ff, 0xc83a,		0x21, 0
+	.dw 0x2840, 0xc83a,	0x287f, 0xc83a,		0x21, 0
+	.dw 0x28c0, 0xc83a,	0x28ff, 0xc83a,		0x21, 0
+	.dw 0x2940, 0xc83a,	0x297f, 0xc83a,		0x21, 0
+	.dw 0x29c0, 0xc83a,	0x29ff, 0xc83a,		0x21, 0
+	.dw 0x2a40, 0xc83a,	0x2a7f, 0xc83a,		0x21, 0
+	.dw 0x2ac0, 0xc83a,	0x2aff, 0xc83a,		0x21, 0
+	.dw 0x2b40, 0xc83a,	0x2b7f, 0xc83a,		0x21, 0
+	.dw 0x2bc0, 0xc83a,	0x2bff, 0xc83a,		0x21, 0
+	.dw 0x2c40, 0xc83a,	0x2c7f, 0xc83a,		0x21, 0
+	.dw 0x2cc0, 0xc83a,	0x2cff, 0xc83a,		0x21, 0
+	.dw 0x2d40, 0xc83a,	0x2d7f, 0xc83a,		0x21, 0
+	.dw 0x2dc0, 0xc83a,	0x2dff, 0xc83a,		0x21, 0
+	.dw 0x2e40, 0xc83a,	0x2e7f, 0xc83a,		0x21, 0
+	.dw 0x2ec0, 0xc83a,	0x2eff, 0xc83a,		0x21, 0
+	.dw 0x2f40, 0xc83a,	0x2f7f, 0xc83a,		0x21, 0
+	.dw 0x2fc0, 0xc83a,	0x2fff, 0xc83a,		0x21, 0
+	.dw 0x3040, 0xc83a,	0x307f, 0xc83a,		0x21, 0
+	.dw 0x30c0, 0xc83a,	0x30ff, 0xc83a,		0x21, 0
+	.dw 0x3140, 0xc83a,	0x317f, 0xc83a,		0x21, 0
+	.dw 0x31c0, 0xc83a,	0x31ff, 0xc83a,		0x21, 0
+	.dw 0x3240, 0xc83a,	0x327f, 0xc83a,		0x21, 0
+	.dw 0x32c0, 0xc83a,	0x32ff, 0xc83a,		0x21, 0
+	.dw 0x3340, 0xc83a,	0x337f, 0xc83a,		0x21, 0
+	.dw 0x33c0, 0xc83a,	0x33ff, 0xc83a,		0x21, 0
+	.dw 0x3440, 0xc83a,	0x347f, 0xc83a,		0x21, 0
+	.dw 0x34c0, 0xc83a,	0x34ff, 0xc83a,		0x21, 0
+	.dw 0x3540, 0xc83a,	0x357f, 0xc83a,		0x21, 0
+	.dw 0x35c0, 0xc83a,	0x35ff, 0xc83a,		0x21, 0
+	.dw 0x3640, 0xc83a,	0x367f, 0xc83a,		0x21, 0
+	.dw 0x36c0, 0xc83a,	0x36ff, 0xc83a,		0x21, 0
+	.dw 0x3740, 0xc83a,	0x377f, 0xc83a,		0x21, 0
+	.dw 0x37c0, 0xc83a,	0x37ff, 0xc83a,		0x21, 0
+	.dw 0x3840, 0xc83a,	0x387f, 0xc83a,		0x21, 0
+	.dw 0x38c0, 0xc83a,	0x38ff, 0xc83a,		0x21, 0
+	.dw 0x3940, 0xc83a,	0x397f, 0xc83a,		0x21, 0
+	.dw 0x39c0, 0xc83a,	0x5fff, 0xc83a,		0x21, 0
+	.dw 0x6040, 0xc83a,	0x607f, 0xc83a,		0x21, 0
+	.dw 0x60c0, 0xc83a,	0x60ff, 0xc83a,		0x21, 0
+	.dw 0x6140, 0xc83a,	0x617f, 0xc83a,		0x21, 0
+	.dw 0x61c0, 0xc83a,	0x61ff, 0xc83a,		0x21, 0
+	.dw 0x6240, 0xc83a,	0x627f, 0xc83a,		0x21, 0
+	.dw 0x62c0, 0xc83a,	0x62ff, 0xc83a,		0x21, 0
+	.dw 0x6340, 0xc83a,	0x637f, 0xc83a,		0x21, 0
+	.dw 0x63c0, 0xc83a,	0x63ff, 0xc83a,		0x21, 0
+	.dw 0x6440, 0xc83a,	0x647f, 0xc83a,		0x21, 0
+	.dw 0x64c0, 0xc83a,	0x64ff, 0xc83a,		0x21, 0
+	.dw 0x6540, 0xc83a,	0x657f, 0xc83a,		0x21, 0
+	.dw 0x65c0, 0xc83a,	0x65ff, 0xc83a,		0x21, 0
+	.dw 0x6640, 0xc83a,	0x667f, 0xc83a,		0x21, 0
+	.dw 0x66c0, 0xc83a,	0x66ff, 0xc83a,		0x21, 0
+	.dw 0x6740, 0xc83a,	0x677f, 0xc83a,		0x21, 0
+	.dw 0x67c0, 0xc83a,	0x67ff, 0xc83a,		0x21, 0
+	.dw 0x6840, 0xc83a,	0x687f, 0xc83a,		0x21, 0
+	.dw 0x68c0, 0xc83a,	0x68ff, 0xc83a,		0x21, 0
+	.dw 0x6940, 0xc83a,	0x697f, 0xc83a,		0x21, 0
+	.dw 0x69c0, 0xc83a,	0x69ff, 0xc83a,		0x21, 0
+	.dw 0x6a40, 0xc83a,	0x6a7f, 0xc83a,		0x21, 0
+	.dw 0x6ac0, 0xc83a,	0x6aff, 0xc83a,		0x21, 0
+	.dw 0x6b40, 0xc83a,	0x6b7f, 0xc83a,		0x21, 0
+	.dw 0x6bc0, 0xc83a,	0x6bff, 0xc83a,		0x21, 0
+	.dw 0x6c40, 0xc83a,	0x6c7f, 0xc83a,		0x21, 0
+	.dw 0x6cc0, 0xc83a,	0x6cff, 0xc83a,		0x21, 0
+	.dw 0x6d40, 0xc83a,	0x6d7f, 0xc83a,		0x21, 0
+	.dw 0x6dc0, 0xc83a,	0x6dff, 0xc83a,		0x21, 0
+	.dw 0x6e40, 0xc83a,	0x6e7f, 0xc83a,		0x21, 0
+	.dw 0x6ec0, 0xc83a,	0x6eff, 0xc83a,		0x21, 0
+	.dw 0x6f40, 0xc83a,	0x6f7f, 0xc83a,		0x21, 0
+	.dw 0x6fc0, 0xc83a,	0x6fff, 0xc83a,		0x21, 0
+	.dw 0x7040, 0xc83a,	0x707f, 0xc83a,		0x21, 0
+	.dw 0x70c0, 0xc83a,	0x70ff, 0xc83a,		0x21, 0
+	.dw 0x7140, 0xc83a,	0x717f, 0xc83a,		0x21, 0
+	.dw 0x71c0, 0xc83a,	0x71ff, 0xc83a,		0x21, 0
+	.dw 0x7240, 0xc83a,	0x727f, 0xc83a,		0x21, 0
+	.dw 0x72c0, 0xc83a,	0x72ff, 0xc83a,		0x21, 0
+	.dw 0x7340, 0xc83a,	0x737f, 0xc83a,		0x21, 0
+	.dw 0x73c0, 0xc83a,	0x73ff, 0xc83a,		0x21, 0
+	.dw 0x7440, 0xc83a,	0x747f, 0xc83a,		0x21, 0
+	.dw 0x74c0, 0xc83a,	0x74ff, 0xc83a,		0x21, 0
+	.dw 0x7540, 0xc83a,	0x757f, 0xc83a,		0x21, 0
+	.dw 0x75c0, 0xc83a,	0x75ff, 0xc83a,		0x21, 0
+	.dw 0x7640, 0xc83a,	0x767f, 0xc83a,		0x21, 0
+	.dw 0x76c0, 0xc83a,	0x76ff, 0xc83a,		0x21, 0
+	.dw 0x7740, 0xc83a,	0x777f, 0xc83a,		0x21, 0
+	.dw 0x77c0, 0xc83a,	0x77ff, 0xc83a,		0x21, 0
+	.dw 0x7840, 0xc83a,	0x787f, 0xc83a,		0x21, 0
+	.dw 0x78c0, 0xc83a,	0x78ff, 0xc83a,		0x21, 0
+	.dw 0x7940, 0xc83a,	0x797f, 0xc83a,		0x21, 0
+	.dw 0x79c0, 0xc83a,	0x9fff, 0xc83a,		0x21, 0
+	.dw 0xa040, 0xc83a,	0xa07f, 0xc83a,		0x21, 0
+	.dw 0xa0c0, 0xc83a,	0xa0ff, 0xc83a,		0x21, 0
+	.dw 0xa140, 0xc83a,	0xa17f, 0xc83a,		0x21, 0
+	.dw 0xa1c0, 0xc83a,	0xa1ff, 0xc83a,		0x21, 0
+	.dw 0xa240, 0xc83a,	0xa27f, 0xc83a,		0x21, 0
+	.dw 0xa2c0, 0xc83a,	0xa2ff, 0xc83a,		0x21, 0
+	.dw 0xa340, 0xc83a,	0xa37f, 0xc83a,		0x21, 0
+	.dw 0xa3c0, 0xc83a,	0xa3ff, 0xc83a,		0x21, 0
+	.dw 0xa440, 0xc83a,	0xa47f, 0xc83a,		0x21, 0
+	.dw 0xa4c0, 0xc83a,	0xa4ff, 0xc83a,		0x21, 0
+	.dw 0xa540, 0xc83a,	0xa57f, 0xc83a,		0x21, 0
+	.dw 0xa5c0, 0xc83a,	0xa5ff, 0xc83a,		0x21, 0
+	.dw 0xa640, 0xc83a,	0xa67f, 0xc83a,		0x21, 0
+	.dw 0xa6c0, 0xc83a,	0xa6ff, 0xc83a,		0x21, 0
+	.dw 0xa740, 0xc83a,	0xa77f, 0xc83a,		0x21, 0
+	.dw 0xa7c0, 0xc83a,	0xa7ff, 0xc83a,		0x21, 0
+	.dw 0xa840, 0xc83a,	0xa87f, 0xc83a,		0x21, 0
+	.dw 0xa8c0, 0xc83a,	0xa8ff, 0xc83a,		0x21, 0
+	.dw 0xa940, 0xc83a,	0xa97f, 0xc83a,		0x21, 0
+	.dw 0xa9c0, 0xc83a,	0xa9ff, 0xc83a,		0x21, 0
+	.dw 0xaa40, 0xc83a,	0xaa7f, 0xc83a,		0x21, 0
+	.dw 0xaac0, 0xc83a,	0xaaff, 0xc83a,		0x21, 0
+	.dw 0xab40, 0xc83a,	0xab7f, 0xc83a,		0x21, 0
+	.dw 0xabc0, 0xc83a,	0xabff, 0xc83a,		0x21, 0
+	.dw 0xac40, 0xc83a,	0xac7f, 0xc83a,		0x21, 0
+	.dw 0xacc0, 0xc83a,	0xacff, 0xc83a,		0x21, 0
+	.dw 0xad40, 0xc83a,	0xad7f, 0xc83a,		0x21, 0
+	.dw 0xadc0, 0xc83a,	0xadff, 0xc83a,		0x21, 0
+	.dw 0xae40, 0xc83a,	0xae7f, 0xc83a,		0x21, 0
+	.dw 0xaec0, 0xc83a,	0xaeff, 0xc83a,		0x21, 0
+	.dw 0xaf40, 0xc83a,	0xaf7f, 0xc83a,		0x21, 0
+	.dw 0xafc0, 0xc83a,	0xafff, 0xc83a,		0x21, 0
+	.dw 0xb040, 0xc83a,	0xb07f, 0xc83a,		0x21, 0
+	.dw 0xb0c0, 0xc83a,	0xb0ff, 0xc83a,		0x21, 0
+	.dw 0xb140, 0xc83a,	0xb17f, 0xc83a,		0x21, 0
+	.dw 0xb1c0, 0xc83a,	0xb1ff, 0xc83a,		0x21, 0
+	.dw 0xb240, 0xc83a,	0xb27f, 0xc83a,		0x21, 0
+	.dw 0xb2c0, 0xc83a,	0xb2ff, 0xc83a,		0x21, 0
+	.dw 0xb340, 0xc83a,	0xb37f, 0xc83a,		0x21, 0
+	.dw 0xb3c0, 0xc83a,	0xb3ff, 0xc83a,		0x21, 0
+	.dw 0xb440, 0xc83a,	0xb47f, 0xc83a,		0x21, 0
+	.dw 0xb4c0, 0xc83a,	0xb4ff, 0xc83a,		0x21, 0
+	.dw 0xb540, 0xc83a,	0xb57f, 0xc83a,		0x21, 0
+	.dw 0xb5c0, 0xc83a,	0xb5ff, 0xc83a,		0x21, 0
+	.dw 0xb640, 0xc83a,	0xb67f, 0xc83a,		0x21, 0
+	.dw 0xb6c0, 0xc83a,	0xb6ff, 0xc83a,		0x21, 0
+	.dw 0xb740, 0xc83a,	0xb77f, 0xc83a,		0x21, 0
+	.dw 0xb7c0, 0xc83a,	0xb7ff, 0xc83a,		0x21, 0
+	.dw 0xb840, 0xc83a,	0xb87f, 0xc83a,		0x21, 0
+	.dw 0xb8c0, 0xc83a,	0xb8ff, 0xc83a,		0x21, 0
+	.dw 0xb940, 0xc83a,	0xb97f, 0xc83a,		0x21, 0
+	.dw 0xb9c0, 0xc83a,	0xdfff, 0xc83a,		0x21, 0
+	.dw 0xe040, 0xc83a,	0xe07f, 0xc83a,		0x21, 0
+	.dw 0xe0c0, 0xc83a,	0xe0ff, 0xc83a,		0x21, 0
+	.dw 0xe140, 0xc83a,	0xe17f, 0xc83a,		0x21, 0
+	.dw 0xe1c0, 0xc83a,	0xe1ff, 0xc83a,		0x21, 0
+	.dw 0xe240, 0xc83a,	0xe27f, 0xc83a,		0x21, 0
+	.dw 0xe2c0, 0xc83a,	0xe2ff, 0xc83a,		0x21, 0
+	.dw 0xe340, 0xc83a,	0xe37f, 0xc83a,		0x21, 0
+	.dw 0xe3c0, 0xc83a,	0xe3ff, 0xc83a,		0x21, 0
+	.dw 0xe440, 0xc83a,	0xe47f, 0xc83a,		0x21, 0
+	.dw 0xe4c0, 0xc83a,	0xe4ff, 0xc83a,		0x21, 0
+	.dw 0xe540, 0xc83a,	0xe57f, 0xc83a,		0x21, 0
+	.dw 0xe5c0, 0xc83a,	0xe5ff, 0xc83a,		0x21, 0
+	.dw 0xe640, 0xc83a,	0xe67f, 0xc83a,		0x21, 0
+	.dw 0xe6c0, 0xc83a,	0xe6ff, 0xc83a,		0x21, 0
+	.dw 0xe740, 0xc83a,	0xe77f, 0xc83a,		0x21, 0
+	.dw 0xe7c0, 0xc83a,	0xe7ff, 0xc83a,		0x21, 0
+	.dw 0xe840, 0xc83a,	0xe87f, 0xc83a,		0x21, 0
+	.dw 0xe8c0, 0xc83a,	0xe8ff, 0xc83a,		0x21, 0
+	.dw 0xe940, 0xc83a,	0xe97f, 0xc83a,		0x21, 0
+	.dw 0xe9c0, 0xc83a,	0xe9ff, 0xc83a,		0x21, 0
+	.dw 0xea40, 0xc83a,	0xea7f, 0xc83a,		0x21, 0
+	.dw 0xeac0, 0xc83a,	0xeaff, 0xc83a,		0x21, 0
+	.dw 0xeb40, 0xc83a,	0xeb7f, 0xc83a,		0x21, 0
+	.dw 0xebc0, 0xc83a,	0xebff, 0xc83a,		0x21, 0
+	.dw 0xec40, 0xc83a,	0xec7f, 0xc83a,		0x21, 0
+	.dw 0xecc0, 0xc83a,	0xecff, 0xc83a,		0x21, 0
+	.dw 0xed40, 0xc83a,	0xed7f, 0xc83a,		0x21, 0
+	.dw 0xedc0, 0xc83a,	0xedff, 0xc83a,		0x21, 0
+	.dw 0xee40, 0xc83a,	0xee7f, 0xc83a,		0x21, 0
+	.dw 0xeec0, 0xc83a,	0xeeff, 0xc83a,		0x21, 0
+	.dw 0xef40, 0xc83a,	0xef7f, 0xc83a,		0x21, 0
+	.dw 0xefc0, 0xc83a,	0xefff, 0xc83a,		0x21, 0
+	.dw 0xf040, 0xc83a,	0xf07f, 0xc83a,		0x21, 0
+	.dw 0xf0c0, 0xc83a,	0xf0ff, 0xc83a,		0x21, 0
+	.dw 0xf140, 0xc83a,	0xf17f, 0xc83a,		0x21, 0
+	.dw 0xf1c0, 0xc83a,	0xf1ff, 0xc83a,		0x21, 0
+	.dw 0xf240, 0xc83a,	0xf27f, 0xc83a,		0x21, 0
+	.dw 0xf2c0, 0xc83a,	0xf2ff, 0xc83a,		0x21, 0
+	.dw 0xf340, 0xc83a,	0xf37f, 0xc83a,		0x21, 0
+	.dw 0xf3c0, 0xc83a,	0xf3ff, 0xc83a,		0x21, 0
+	.dw 0xf440, 0xc83a,	0xf47f, 0xc83a,		0x21, 0
+	.dw 0xf4c0, 0xc83a,	0xf4ff, 0xc83a,		0x21, 0
+	.dw 0xf540, 0xc83a,	0xf57f, 0xc83a,		0x21, 0
+	.dw 0xf5c0, 0xc83a,	0xf5ff, 0xc83a,		0x21, 0
+	.dw 0xf640, 0xc83a,	0xf67f, 0xc83a,		0x21, 0
+	.dw 0xf6c0, 0xc83a,	0xf6ff, 0xc83a,		0x21, 0
+	.dw 0xf740, 0xc83a,	0xf77f, 0xc83a,		0x21, 0
+	.dw 0xf7c0, 0xc83a,	0xf7ff, 0xc83a,		0x21, 0
+	.dw 0xf840, 0xc83a,	0xf87f, 0xc83a,		0x21, 0
+	.dw 0xf8c0, 0xc83a,	0xf8ff, 0xc83a,		0x21, 0
+	.dw 0xf940, 0xc83a,	0xf97f, 0xc83a,		0x21, 0
+	.dw 0xf9c0, 0xc83a,	0xffff, 0xc83b,		0x21, 0
+	.dw 0x0040, 0xc83c,	0x007f, 0xc83c,		0x21, 0
+	.dw 0x00c0, 0xc83c,	0x00ff, 0xc83c,		0x21, 0
+	.dw 0x0140, 0xc83c,	0x017f, 0xc83c,		0x21, 0
+	.dw 0x01c0, 0xc83c,	0x01ff, 0xc83c,		0x21, 0
+	.dw 0x0240, 0xc83c,	0x027f, 0xc83c,		0x21, 0
+	.dw 0x02c0, 0xc83c,	0x02ff, 0xc83c,		0x21, 0
+	.dw 0x0340, 0xc83c,	0x037f, 0xc83c,		0x21, 0
+	.dw 0x03c0, 0xc83c,	0x03ff, 0xc83c,		0x21, 0
+	.dw 0x0440, 0xc83c,	0x047f, 0xc83c,		0x21, 0
+	.dw 0x04c0, 0xc83c,	0x04ff, 0xc83c,		0x21, 0
+	.dw 0x0540, 0xc83c,	0x057f, 0xc83c,		0x21, 0
+	.dw 0x05c0, 0xc83c,	0x05ff, 0xc83c,		0x21, 0
+	.dw 0x0640, 0xc83c,	0x067f, 0xc83c,		0x21, 0
+	.dw 0x06c0, 0xc83c,	0x06ff, 0xc83c,		0x21, 0
+	.dw 0x0740, 0xc83c,	0x077f, 0xc83c,		0x21, 0
+	.dw 0x07c0, 0xc83c,	0x07ff, 0xc83c,		0x21, 0
+	.dw 0x0840, 0xc83c,	0x087f, 0xc83c,		0x21, 0
+	.dw 0x08c0, 0xc83c,	0x08ff, 0xc83c,		0x21, 0
+	.dw 0x0940, 0xc83c,	0x097f, 0xc83c,		0x21, 0
+	.dw 0x09c0, 0xc83c,	0x09ff, 0xc83c,		0x21, 0
+	.dw 0x0a40, 0xc83c,	0x0a7f, 0xc83c,		0x21, 0
+	.dw 0x0ac0, 0xc83c,	0x0aff, 0xc83c,		0x21, 0
+	.dw 0x0b40, 0xc83c,	0x0b7f, 0xc83c,		0x21, 0
+	.dw 0x0bc0, 0xc83c,	0x0bff, 0xc83c,		0x21, 0
+	.dw 0x0c40, 0xc83c,	0x0c7f, 0xc83c,		0x21, 0
+	.dw 0x0cc0, 0xc83c,	0x0cff, 0xc83c,		0x21, 0
+	.dw 0x0d40, 0xc83c,	0x0d7f, 0xc83c,		0x21, 0
+	.dw 0x0dc0, 0xc83c,	0x0dff, 0xc83c,		0x21, 0
+	.dw 0x0e40, 0xc83c,	0x0e7f, 0xc83c,		0x21, 0
+	.dw 0x0ec0, 0xc83c,	0x0eff, 0xc83c,		0x21, 0
+	.dw 0x0f40, 0xc83c,	0x0f7f, 0xc83c,		0x21, 0
+	.dw 0x0fc0, 0xc83c,	0x0fff, 0xc83c,		0x21, 0
+	.dw 0x1040, 0xc83c,	0x107f, 0xc83c,		0x21, 0
+	.dw 0x10c0, 0xc83c,	0x10ff, 0xc83c,		0x21, 0
+	.dw 0x1140, 0xc83c,	0x117f, 0xc83c,		0x21, 0
+	.dw 0x11c0, 0xc83c,	0x11ff, 0xc83c,		0x21, 0
+	.dw 0x1240, 0xc83c,	0x127f, 0xc83c,		0x21, 0
+	.dw 0x12c0, 0xc83c,	0x12ff, 0xc83c,		0x21, 0
+	.dw 0x1340, 0xc83c,	0x137f, 0xc83c,		0x21, 0
+	.dw 0x13c0, 0xc83c,	0x13ff, 0xc83c,		0x21, 0
+	.dw 0x1440, 0xc83c,	0x147f, 0xc83c,		0x21, 0
+	.dw 0x14c0, 0xc83c,	0x14ff, 0xc83c,		0x21, 0
+	.dw 0x1540, 0xc83c,	0x157f, 0xc83c,		0x21, 0
+	.dw 0x15c0, 0xc83c,	0x15ff, 0xc83c,		0x21, 0
+	.dw 0x1640, 0xc83c,	0x167f, 0xc83c,		0x21, 0
+	.dw 0x16c0, 0xc83c,	0x16ff, 0xc83c,		0x21, 0
+	.dw 0x1740, 0xc83c,	0x177f, 0xc83c,		0x21, 0
+	.dw 0x17c0, 0xc83c,	0x17ff, 0xc83c,		0x21, 0
+	.dw 0x1840, 0xc83c,	0x187f, 0xc83c,		0x21, 0
+	.dw 0x18c0, 0xc83c,	0x18ff, 0xc83c,		0x21, 0
+	.dw 0x1940, 0xc83c,	0x197f, 0xc83c,		0x21, 0
+	.dw 0x19c0, 0xc83c,	0x1fff, 0xc83c,		0x21, 0
+	.dw 0x2040, 0xc83c,	0x207f, 0xc83c,		0x21, 0
+	.dw 0x20c0, 0xc83c,	0x20ff, 0xc83c,		0x21, 0
+	.dw 0x2140, 0xc83c,	0x217f, 0xc83c,		0x21, 0
+	.dw 0x21c0, 0xc83c,	0x21ff, 0xc83c,		0x21, 0
+	.dw 0x2240, 0xc83c,	0x227f, 0xc83c,		0x21, 0
+	.dw 0x22c0, 0xc83c,	0x22ff, 0xc83c,		0x21, 0
+	.dw 0x2340, 0xc83c,	0x237f, 0xc83c,		0x21, 0
+	.dw 0x23c0, 0xc83c,	0x23ff, 0xc83c,		0x21, 0
+	.dw 0x2440, 0xc83c,	0x247f, 0xc83c,		0x21, 0
+	.dw 0x24c0, 0xc83c,	0x24ff, 0xc83c,		0x21, 0
+	.dw 0x2540, 0xc83c,	0x257f, 0xc83c,		0x21, 0
+	.dw 0x25c0, 0xc83c,	0x25ff, 0xc83c,		0x21, 0
+	.dw 0x2640, 0xc83c,	0x267f, 0xc83c,		0x21, 0
+	.dw 0x26c0, 0xc83c,	0x26ff, 0xc83c,		0x21, 0
+	.dw 0x2740, 0xc83c,	0x277f, 0xc83c,		0x21, 0
+	.dw 0x27c0, 0xc83c,	0x27ff, 0xc83c,		0x21, 0
+	.dw 0x2840, 0xc83c,	0x287f, 0xc83c,		0x21, 0
+	.dw 0x28c0, 0xc83c,	0x28ff, 0xc83c,		0x21, 0
+	.dw 0x2940, 0xc83c,	0x297f, 0xc83c,		0x21, 0
+	.dw 0x29c0, 0xc83c,	0x29ff, 0xc83c,		0x21, 0
+	.dw 0x2a40, 0xc83c,	0x2a7f, 0xc83c,		0x21, 0
+	.dw 0x2ac0, 0xc83c,	0x2aff, 0xc83c,		0x21, 0
+	.dw 0x2b40, 0xc83c,	0x2b7f, 0xc83c,		0x21, 0
+	.dw 0x2bc0, 0xc83c,	0x2bff, 0xc83c,		0x21, 0
+	.dw 0x2c40, 0xc83c,	0x2c7f, 0xc83c,		0x21, 0
+	.dw 0x2cc0, 0xc83c,	0x2cff, 0xc83c,		0x21, 0
+	.dw 0x2d40, 0xc83c,	0x2d7f, 0xc83c,		0x21, 0
+	.dw 0x2dc0, 0xc83c,	0x2dff, 0xc83c,		0x21, 0
+	.dw 0x2e40, 0xc83c,	0x2e7f, 0xc83c,		0x21, 0
+	.dw 0x2ec0, 0xc83c,	0x2eff, 0xc83c,		0x21, 0
+	.dw 0x2f40, 0xc83c,	0x2f7f, 0xc83c,		0x21, 0
+	.dw 0x2fc0, 0xc83c,	0x2fff, 0xc83c,		0x21, 0
+	.dw 0x3040, 0xc83c,	0x307f, 0xc83c,		0x21, 0
+	.dw 0x30c0, 0xc83c,	0x30ff, 0xc83c,		0x21, 0
+	.dw 0x3140, 0xc83c,	0x317f, 0xc83c,		0x21, 0
+	.dw 0x31c0, 0xc83c,	0x31ff, 0xc83c,		0x21, 0
+	.dw 0x3240, 0xc83c,	0x327f, 0xc83c,		0x21, 0
+	.dw 0x32c0, 0xc83c,	0x32ff, 0xc83c,		0x21, 0
+	.dw 0x3340, 0xc83c,	0x337f, 0xc83c,		0x21, 0
+	.dw 0x33c0, 0xc83c,	0x33ff, 0xc83c,		0x21, 0
+	.dw 0x3440, 0xc83c,	0x347f, 0xc83c,		0x21, 0
+	.dw 0x34c0, 0xc83c,	0x34ff, 0xc83c,		0x21, 0
+	.dw 0x3540, 0xc83c,	0x357f, 0xc83c,		0x21, 0
+	.dw 0x35c0, 0xc83c,	0x35ff, 0xc83c,		0x21, 0
+	.dw 0x3640, 0xc83c,	0x367f, 0xc83c,		0x21, 0
+	.dw 0x36c0, 0xc83c,	0x36ff, 0xc83c,		0x21, 0
+	.dw 0x3740, 0xc83c,	0x377f, 0xc83c,		0x21, 0
+	.dw 0x37c0, 0xc83c,	0x37ff, 0xc83c,		0x21, 0
+	.dw 0x3840, 0xc83c,	0x387f, 0xc83c,		0x21, 0
+	.dw 0x38c0, 0xc83c,	0x38ff, 0xc83c,		0x21, 0
+	.dw 0x3940, 0xc83c,	0x397f, 0xc83c,		0x21, 0
+	.dw 0x39c0, 0xc83c,	0x3fff, 0xc83c,		0x21, 0
+	.dw 0x4040, 0xc83c,	0x407f, 0xc83c,		0x21, 0
+	.dw 0x40c0, 0xc83c,	0x40ff, 0xc83c,		0x21, 0
+	.dw 0x4140, 0xc83c,	0x417f, 0xc83c,		0x21, 0
+	.dw 0x41c0, 0xc83c,	0x41ff, 0xc83c,		0x21, 0
+	.dw 0x4240, 0xc83c,	0x427f, 0xc83c,		0x21, 0
+	.dw 0x42c0, 0xc83c,	0x42ff, 0xc83c,		0x21, 0
+	.dw 0x4340, 0xc83c,	0x437f, 0xc83c,		0x21, 0
+	.dw 0x43c0, 0xc83c,	0x43ff, 0xc83c,		0x21, 0
+	.dw 0x4440, 0xc83c,	0x447f, 0xc83c,		0x21, 0
+	.dw 0x44c0, 0xc83c,	0x44ff, 0xc83c,		0x21, 0
+	.dw 0x4540, 0xc83c,	0x457f, 0xc83c,		0x21, 0
+	.dw 0x45c0, 0xc83c,	0x45ff, 0xc83c,		0x21, 0
+	.dw 0x4640, 0xc83c,	0x467f, 0xc83c,		0x21, 0
+	.dw 0x46c0, 0xc83c,	0x46ff, 0xc83c,		0x21, 0
+	.dw 0x4740, 0xc83c,	0x477f, 0xc83c,		0x21, 0
+	.dw 0x47c0, 0xc83c,	0x47ff, 0xc83c,		0x21, 0
+	.dw 0x4840, 0xc83c,	0x487f, 0xc83c,		0x21, 0
+	.dw 0x48c0, 0xc83c,	0x48ff, 0xc83c,		0x21, 0
+	.dw 0x4940, 0xc83c,	0x497f, 0xc83c,		0x21, 0
+	.dw 0x49c0, 0xc83c,	0x49ff, 0xc83c,		0x21, 0
+	.dw 0x4a40, 0xc83c,	0x4a7f, 0xc83c,		0x21, 0
+	.dw 0x4ac0, 0xc83c,	0x4aff, 0xc83c,		0x21, 0
+	.dw 0x4b40, 0xc83c,	0x4b7f, 0xc83c,		0x21, 0
+	.dw 0x4bc0, 0xc83c,	0x4bff, 0xc83c,		0x21, 0
+	.dw 0x4c40, 0xc83c,	0x4c7f, 0xc83c,		0x21, 0
+	.dw 0x4cc0, 0xc83c,	0x4cff, 0xc83c,		0x21, 0
+	.dw 0x4d40, 0xc83c,	0x4d7f, 0xc83c,		0x21, 0
+	.dw 0x4dc0, 0xc83c,	0x4dff, 0xc83c,		0x21, 0
+	.dw 0x4e40, 0xc83c,	0x4e7f, 0xc83c,		0x21, 0
+	.dw 0x4ec0, 0xc83c,	0x4eff, 0xc83c,		0x21, 0
+	.dw 0x4f40, 0xc83c,	0x4f7f, 0xc83c,		0x21, 0
+	.dw 0x4fc0, 0xc83c,	0x4fff, 0xc83c,		0x21, 0
+	.dw 0x5040, 0xc83c,	0x507f, 0xc83c,		0x21, 0
+	.dw 0x50c0, 0xc83c,	0x50ff, 0xc83c,		0x21, 0
+	.dw 0x5140, 0xc83c,	0x517f, 0xc83c,		0x21, 0
+	.dw 0x51c0, 0xc83c,	0x51ff, 0xc83c,		0x21, 0
+	.dw 0x5240, 0xc83c,	0x527f, 0xc83c,		0x21, 0
+	.dw 0x52c0, 0xc83c,	0x52ff, 0xc83c,		0x21, 0
+	.dw 0x5340, 0xc83c,	0x537f, 0xc83c,		0x21, 0
+	.dw 0x53c0, 0xc83c,	0x53ff, 0xc83c,		0x21, 0
+	.dw 0x5440, 0xc83c,	0x547f, 0xc83c,		0x21, 0
+	.dw 0x54c0, 0xc83c,	0x54ff, 0xc83c,		0x21, 0
+	.dw 0x5540, 0xc83c,	0x557f, 0xc83c,		0x21, 0
+	.dw 0x55c0, 0xc83c,	0x55ff, 0xc83c,		0x21, 0
+	.dw 0x5640, 0xc83c,	0x567f, 0xc83c,		0x21, 0
+	.dw 0x56c0, 0xc83c,	0x56ff, 0xc83c,		0x21, 0
+	.dw 0x5740, 0xc83c,	0x577f, 0xc83c,		0x21, 0
+	.dw 0x57c0, 0xc83c,	0x57ff, 0xc83c,		0x21, 0
+	.dw 0x5840, 0xc83c,	0x587f, 0xc83c,		0x21, 0
+	.dw 0x58c0, 0xc83c,	0x58ff, 0xc83c,		0x21, 0
+	.dw 0x5940, 0xc83c,	0x597f, 0xc83c,		0x21, 0
+	.dw 0x59c0, 0xc83c,	0x5fff, 0xc83c,		0x21, 0
+	.dw 0x6040, 0xc83c,	0x607f, 0xc83c,		0x21, 0
+	.dw 0x60c0, 0xc83c,	0x60ff, 0xc83c,		0x21, 0
+	.dw 0x6140, 0xc83c,	0x617f, 0xc83c,		0x21, 0
+	.dw 0x61c0, 0xc83c,	0x61ff, 0xc83c,		0x21, 0
+	.dw 0x6240, 0xc83c,	0x627f, 0xc83c,		0x21, 0
+	.dw 0x62c0, 0xc83c,	0x62ff, 0xc83c,		0x21, 0
+	.dw 0x6340, 0xc83c,	0x637f, 0xc83c,		0x21, 0
+	.dw 0x63c0, 0xc83c,	0x63ff, 0xc83c,		0x21, 0
+	.dw 0x6440, 0xc83c,	0x647f, 0xc83c,		0x21, 0
+	.dw 0x64c0, 0xc83c,	0x64ff, 0xc83c,		0x21, 0
+	.dw 0x6540, 0xc83c,	0x657f, 0xc83c,		0x21, 0
+	.dw 0x65c0, 0xc83c,	0x65ff, 0xc83c,		0x21, 0
+	.dw 0x6640, 0xc83c,	0x667f, 0xc83c,		0x21, 0
+	.dw 0x66c0, 0xc83c,	0x66ff, 0xc83c,		0x21, 0
+	.dw 0x6740, 0xc83c,	0x677f, 0xc83c,		0x21, 0
+	.dw 0x67c0, 0xc83c,	0x67ff, 0xc83c,		0x21, 0
+	.dw 0x6840, 0xc83c,	0x687f, 0xc83c,		0x21, 0
+	.dw 0x68c0, 0xc83c,	0x68ff, 0xc83c,		0x21, 0
+	.dw 0x6940, 0xc83c,	0x697f, 0xc83c,		0x21, 0
+	.dw 0x69c0, 0xc83c,	0x69ff, 0xc83c,		0x21, 0
+	.dw 0x6a40, 0xc83c,	0x6a7f, 0xc83c,		0x21, 0
+	.dw 0x6ac0, 0xc83c,	0x6aff, 0xc83c,		0x21, 0
+	.dw 0x6b40, 0xc83c,	0x6b7f, 0xc83c,		0x21, 0
+	.dw 0x6bc0, 0xc83c,	0x6bff, 0xc83c,		0x21, 0
+	.dw 0x6c40, 0xc83c,	0x6c7f, 0xc83c,		0x21, 0
+	.dw 0x6cc0, 0xc83c,	0x6cff, 0xc83c,		0x21, 0
+	.dw 0x6d40, 0xc83c,	0x6d7f, 0xc83c,		0x21, 0
+	.dw 0x6dc0, 0xc83c,	0x6dff, 0xc83c,		0x21, 0
+	.dw 0x6e40, 0xc83c,	0x6e7f, 0xc83c,		0x21, 0
+	.dw 0x6ec0, 0xc83c,	0x6eff, 0xc83c,		0x21, 0
+	.dw 0x6f40, 0xc83c,	0x6f7f, 0xc83c,		0x21, 0
+	.dw 0x6fc0, 0xc83c,	0x6fff, 0xc83c,		0x21, 0
+	.dw 0x7040, 0xc83c,	0x707f, 0xc83c,		0x21, 0
+	.dw 0x70c0, 0xc83c,	0x70ff, 0xc83c,		0x21, 0
+	.dw 0x7140, 0xc83c,	0x717f, 0xc83c,		0x21, 0
+	.dw 0x71c0, 0xc83c,	0x71ff, 0xc83c,		0x21, 0
+	.dw 0x7240, 0xc83c,	0x727f, 0xc83c,		0x21, 0
+	.dw 0x72c0, 0xc83c,	0x72ff, 0xc83c,		0x21, 0
+	.dw 0x7340, 0xc83c,	0x737f, 0xc83c,		0x21, 0
+	.dw 0x73c0, 0xc83c,	0x73ff, 0xc83c,		0x21, 0
+	.dw 0x7440, 0xc83c,	0x747f, 0xc83c,		0x21, 0
+	.dw 0x74c0, 0xc83c,	0x74ff, 0xc83c,		0x21, 0
+	.dw 0x7540, 0xc83c,	0x757f, 0xc83c,		0x21, 0
+	.dw 0x75c0, 0xc83c,	0x75ff, 0xc83c,		0x21, 0
+	.dw 0x7640, 0xc83c,	0x767f, 0xc83c,		0x21, 0
+	.dw 0x76c0, 0xc83c,	0x76ff, 0xc83c,		0x21, 0
+	.dw 0x7740, 0xc83c,	0x777f, 0xc83c,		0x21, 0
+	.dw 0x77c0, 0xc83c,	0x77ff, 0xc83c,		0x21, 0
+	.dw 0x7840, 0xc83c,	0x787f, 0xc83c,		0x21, 0
+	.dw 0x78c0, 0xc83c,	0x78ff, 0xc83c,		0x21, 0
+	.dw 0x7940, 0xc83c,	0x797f, 0xc83c,		0x21, 0
+	.dw 0x79c0, 0xc83c,	0x7fff, 0xc83c,		0x21, 0
+	.dw 0x8040, 0xc83c,	0x807f, 0xc83c,		0x21, 0
+	.dw 0x80c0, 0xc83c,	0x80ff, 0xc83c,		0x21, 0
+	.dw 0x8140, 0xc83c,	0x817f, 0xc83c,		0x21, 0
+	.dw 0x81c0, 0xc83c,	0x81ff, 0xc83c,		0x21, 0
+	.dw 0x8240, 0xc83c,	0x827f, 0xc83c,		0x21, 0
+	.dw 0x82c0, 0xc83c,	0x82ff, 0xc83c,		0x21, 0
+	.dw 0x8340, 0xc83c,	0x837f, 0xc83c,		0x21, 0
+	.dw 0x83c0, 0xc83c,	0x83ff, 0xc83c,		0x21, 0
+	.dw 0x8440, 0xc83c,	0x847f, 0xc83c,		0x21, 0
+	.dw 0x84c0, 0xc83c,	0x84ff, 0xc83c,		0x21, 0
+	.dw 0x8540, 0xc83c,	0x857f, 0xc83c,		0x21, 0
+	.dw 0x85c0, 0xc83c,	0x85ff, 0xc83c,		0x21, 0
+	.dw 0x8640, 0xc83c,	0x867f, 0xc83c,		0x21, 0
+	.dw 0x86c0, 0xc83c,	0x86ff, 0xc83c,		0x21, 0
+	.dw 0x8740, 0xc83c,	0x877f, 0xc83c,		0x21, 0
+	.dw 0x87c0, 0xc83c,	0x87ff, 0xc83c,		0x21, 0
+	.dw 0x8840, 0xc83c,	0x887f, 0xc83c,		0x21, 0
+	.dw 0x88c0, 0xc83c,	0x88ff, 0xc83c,		0x21, 0
+	.dw 0x8940, 0xc83c,	0x897f, 0xc83c,		0x21, 0
+	.dw 0x89c0, 0xc83c,	0x89ff, 0xc83c,		0x21, 0
+	.dw 0x8a40, 0xc83c,	0x8a7f, 0xc83c,		0x21, 0
+	.dw 0x8ac0, 0xc83c,	0x8aff, 0xc83c,		0x21, 0
+	.dw 0x8b40, 0xc83c,	0x8b7f, 0xc83c,		0x21, 0
+	.dw 0x8bc0, 0xc83c,	0x8bff, 0xc83c,		0x21, 0
+	.dw 0x8c40, 0xc83c,	0x8c7f, 0xc83c,		0x21, 0
+	.dw 0x8cc0, 0xc83c,	0x8cff, 0xc83c,		0x21, 0
+	.dw 0x8d40, 0xc83c,	0x8d7f, 0xc83c,		0x21, 0
+	.dw 0x8dc0, 0xc83c,	0x8dff, 0xc83c,		0x21, 0
+	.dw 0x8e40, 0xc83c,	0x8e7f, 0xc83c,		0x21, 0
+	.dw 0x8ec0, 0xc83c,	0x8eff, 0xc83c,		0x21, 0
+	.dw 0x8f40, 0xc83c,	0x8f7f, 0xc83c,		0x21, 0
+	.dw 0x8fc0, 0xc83c,	0x8fff, 0xc83c,		0x21, 0
+	.dw 0x9040, 0xc83c,	0x907f, 0xc83c,		0x21, 0
+	.dw 0x90c0, 0xc83c,	0x90ff, 0xc83c,		0x21, 0
+	.dw 0x9140, 0xc83c,	0x917f, 0xc83c,		0x21, 0
+	.dw 0x91c0, 0xc83c,	0x91ff, 0xc83c,		0x21, 0
+	.dw 0x9240, 0xc83c,	0x927f, 0xc83c,		0x21, 0
+	.dw 0x92c0, 0xc83c,	0x92ff, 0xc83c,		0x21, 0
+	.dw 0x9340, 0xc83c,	0x937f, 0xc83c,		0x21, 0
+	.dw 0x93c0, 0xc83c,	0x93ff, 0xc83c,		0x21, 0
+	.dw 0x9440, 0xc83c,	0x947f, 0xc83c,		0x21, 0
+	.dw 0x94c0, 0xc83c,	0x94ff, 0xc83c,		0x21, 0
+	.dw 0x9540, 0xc83c,	0x957f, 0xc83c,		0x21, 0
+	.dw 0x95c0, 0xc83c,	0x95ff, 0xc83c,		0x21, 0
+	.dw 0x9640, 0xc83c,	0x967f, 0xc83c,		0x21, 0
+	.dw 0x96c0, 0xc83c,	0x96ff, 0xc83c,		0x21, 0
+	.dw 0x9740, 0xc83c,	0x977f, 0xc83c,		0x21, 0
+	.dw 0x97c0, 0xc83c,	0x97ff, 0xc83c,		0x21, 0
+	.dw 0x9840, 0xc83c,	0x987f, 0xc83c,		0x21, 0
+	.dw 0x98c0, 0xc83c,	0x98ff, 0xc83c,		0x21, 0
+	.dw 0x9940, 0xc83c,	0x997f, 0xc83c,		0x21, 0
+	.dw 0x99c0, 0xc83c,	0x9fff, 0xc83c,		0x21, 0
+	.dw 0xa040, 0xc83c,	0xa07f, 0xc83c,		0x21, 0
+	.dw 0xa0c0, 0xc83c,	0xa0ff, 0xc83c,		0x21, 0
+	.dw 0xa140, 0xc83c,	0xa17f, 0xc83c,		0x21, 0
+	.dw 0xa1c0, 0xc83c,	0xa1ff, 0xc83c,		0x21, 0
+	.dw 0xa240, 0xc83c,	0xa27f, 0xc83c,		0x21, 0
+	.dw 0xa2c0, 0xc83c,	0xa2ff, 0xc83c,		0x21, 0
+	.dw 0xa340, 0xc83c,	0xa37f, 0xc83c,		0x21, 0
+	.dw 0xa3c0, 0xc83c,	0xa3ff, 0xc83c,		0x21, 0
+	.dw 0xa440, 0xc83c,	0xa47f, 0xc83c,		0x21, 0
+	.dw 0xa4c0, 0xc83c,	0xa4ff, 0xc83c,		0x21, 0
+	.dw 0xa540, 0xc83c,	0xa57f, 0xc83c,		0x21, 0
+	.dw 0xa5c0, 0xc83c,	0xa5ff, 0xc83c,		0x21, 0
+	.dw 0xa640, 0xc83c,	0xa67f, 0xc83c,		0x21, 0
+	.dw 0xa6c0, 0xc83c,	0xa6ff, 0xc83c,		0x21, 0
+	.dw 0xa740, 0xc83c,	0xa77f, 0xc83c,		0x21, 0
+	.dw 0xa7c0, 0xc83c,	0xa7ff, 0xc83c,		0x21, 0
+	.dw 0xa840, 0xc83c,	0xa87f, 0xc83c,		0x21, 0
+	.dw 0xa8c0, 0xc83c,	0xa8ff, 0xc83c,		0x21, 0
+	.dw 0xa940, 0xc83c,	0xa97f, 0xc83c,		0x21, 0
+	.dw 0xa9c0, 0xc83c,	0xa9ff, 0xc83c,		0x21, 0
+	.dw 0xaa40, 0xc83c,	0xaa7f, 0xc83c,		0x21, 0
+	.dw 0xaac0, 0xc83c,	0xaaff, 0xc83c,		0x21, 0
+	.dw 0xab40, 0xc83c,	0xab7f, 0xc83c,		0x21, 0
+	.dw 0xabc0, 0xc83c,	0xabff, 0xc83c,		0x21, 0
+	.dw 0xac40, 0xc83c,	0xac7f, 0xc83c,		0x21, 0
+	.dw 0xacc0, 0xc83c,	0xacff, 0xc83c,		0x21, 0
+	.dw 0xad40, 0xc83c,	0xad7f, 0xc83c,		0x21, 0
+	.dw 0xadc0, 0xc83c,	0xadff, 0xc83c,		0x21, 0
+	.dw 0xae40, 0xc83c,	0xae7f, 0xc83c,		0x21, 0
+	.dw 0xaec0, 0xc83c,	0xaeff, 0xc83c,		0x21, 0
+	.dw 0xaf40, 0xc83c,	0xaf7f, 0xc83c,		0x21, 0
+	.dw 0xafc0, 0xc83c,	0xafff, 0xc83c,		0x21, 0
+	.dw 0xb040, 0xc83c,	0xb07f, 0xc83c,		0x21, 0
+	.dw 0xb0c0, 0xc83c,	0xb0ff, 0xc83c,		0x21, 0
+	.dw 0xb140, 0xc83c,	0xb17f, 0xc83c,		0x21, 0
+	.dw 0xb1c0, 0xc83c,	0xb1ff, 0xc83c,		0x21, 0
+	.dw 0xb240, 0xc83c,	0xb27f, 0xc83c,		0x21, 0
+	.dw 0xb2c0, 0xc83c,	0xb2ff, 0xc83c,		0x21, 0
+	.dw 0xb340, 0xc83c,	0xb37f, 0xc83c,		0x21, 0
+	.dw 0xb3c0, 0xc83c,	0xb3ff, 0xc83c,		0x21, 0
+	.dw 0xb440, 0xc83c,	0xb47f, 0xc83c,		0x21, 0
+	.dw 0xb4c0, 0xc83c,	0xb4ff, 0xc83c,		0x21, 0
+	.dw 0xb540, 0xc83c,	0xb57f, 0xc83c,		0x21, 0
+	.dw 0xb5c0, 0xc83c,	0xb5ff, 0xc83c,		0x21, 0
+	.dw 0xb640, 0xc83c,	0xb67f, 0xc83c,		0x21, 0
+	.dw 0xb6c0, 0xc83c,	0xb6ff, 0xc83c,		0x21, 0
+	.dw 0xb740, 0xc83c,	0xb77f, 0xc83c,		0x21, 0
+	.dw 0xb7c0, 0xc83c,	0xb7ff, 0xc83c,		0x21, 0
+	.dw 0xb840, 0xc83c,	0xb87f, 0xc83c,		0x21, 0
+	.dw 0xb8c0, 0xc83c,	0xb8ff, 0xc83c,		0x21, 0
+	.dw 0xb940, 0xc83c,	0xb97f, 0xc83c,		0x21, 0
+	.dw 0xb9c0, 0xc83c,	0xbfff, 0xc83c,		0x21, 0
+	.dw 0xc040, 0xc83c,	0xc07f, 0xc83c,		0x21, 0
+	.dw 0xc0c0, 0xc83c,	0xc0ff, 0xc83c,		0x21, 0
+	.dw 0xc140, 0xc83c,	0xc17f, 0xc83c,		0x21, 0
+	.dw 0xc1c0, 0xc83c,	0xc1ff, 0xc83c,		0x21, 0
+	.dw 0xc240, 0xc83c,	0xc27f, 0xc83c,		0x21, 0
+	.dw 0xc2c0, 0xc83c,	0xc2ff, 0xc83c,		0x21, 0
+	.dw 0xc340, 0xc83c,	0xc37f, 0xc83c,		0x21, 0
+	.dw 0xc3c0, 0xc83c,	0xc3ff, 0xc83c,		0x21, 0
+	.dw 0xc440, 0xc83c,	0xc47f, 0xc83c,		0x21, 0
+	.dw 0xc4c0, 0xc83c,	0xc4ff, 0xc83c,		0x21, 0
+	.dw 0xc540, 0xc83c,	0xc57f, 0xc83c,		0x21, 0
+	.dw 0xc5c0, 0xc83c,	0xc5ff, 0xc83c,		0x21, 0
+	.dw 0xc640, 0xc83c,	0xc67f, 0xc83c,		0x21, 0
+	.dw 0xc6c0, 0xc83c,	0xc6ff, 0xc83c,		0x21, 0
+	.dw 0xc740, 0xc83c,	0xc77f, 0xc83c,		0x21, 0
+	.dw 0xc7c0, 0xc83c,	0xc7ff, 0xc83c,		0x21, 0
+	.dw 0xc840, 0xc83c,	0xc87f, 0xc83c,		0x21, 0
+	.dw 0xc8c0, 0xc83c,	0xc8ff, 0xc83c,		0x21, 0
+	.dw 0xc940, 0xc83c,	0xc97f, 0xc83c,		0x21, 0
+	.dw 0xc9c0, 0xc83c,	0xc9ff, 0xc83c,		0x21, 0
+	.dw 0xca40, 0xc83c,	0xca7f, 0xc83c,		0x21, 0
+	.dw 0xcac0, 0xc83c,	0xcaff, 0xc83c,		0x21, 0
+	.dw 0xcb40, 0xc83c,	0xcb7f, 0xc83c,		0x21, 0
+	.dw 0xcbc0, 0xc83c,	0xcbff, 0xc83c,		0x21, 0
+	.dw 0xcc40, 0xc83c,	0xcc7f, 0xc83c,		0x21, 0
+	.dw 0xccc0, 0xc83c,	0xccff, 0xc83c,		0x21, 0
+	.dw 0xcd40, 0xc83c,	0xcd7f, 0xc83c,		0x21, 0
+	.dw 0xcdc0, 0xc83c,	0xcdff, 0xc83c,		0x21, 0
+	.dw 0xce40, 0xc83c,	0xce7f, 0xc83c,		0x21, 0
+	.dw 0xcec0, 0xc83c,	0xceff, 0xc83c,		0x21, 0
+	.dw 0xcf40, 0xc83c,	0xcf7f, 0xc83c,		0x21, 0
+	.dw 0xcfc0, 0xc83c,	0xcfff, 0xc83c,		0x21, 0
+	.dw 0xd040, 0xc83c,	0xd07f, 0xc83c,		0x21, 0
+	.dw 0xd0c0, 0xc83c,	0xd0ff, 0xc83c,		0x21, 0
+	.dw 0xd140, 0xc83c,	0xd17f, 0xc83c,		0x21, 0
+	.dw 0xd1c0, 0xc83c,	0xd1ff, 0xc83c,		0x21, 0
+	.dw 0xd240, 0xc83c,	0xd27f, 0xc83c,		0x21, 0
+	.dw 0xd2c0, 0xc83c,	0xd2ff, 0xc83c,		0x21, 0
+	.dw 0xd340, 0xc83c,	0xd37f, 0xc83c,		0x21, 0
+	.dw 0xd3c0, 0xc83c,	0xd3ff, 0xc83c,		0x21, 0
+	.dw 0xd440, 0xc83c,	0xd47f, 0xc83c,		0x21, 0
+	.dw 0xd4c0, 0xc83c,	0xd4ff, 0xc83c,		0x21, 0
+	.dw 0xd540, 0xc83c,	0xd57f, 0xc83c,		0x21, 0
+	.dw 0xd5c0, 0xc83c,	0xd5ff, 0xc83c,		0x21, 0
+	.dw 0xd640, 0xc83c,	0xd67f, 0xc83c,		0x21, 0
+	.dw 0xd6c0, 0xc83c,	0xd6ff, 0xc83c,		0x21, 0
+	.dw 0xd740, 0xc83c,	0xd77f, 0xc83c,		0x21, 0
+	.dw 0xd7c0, 0xc83c,	0xd7ff, 0xc83c,		0x21, 0
+	.dw 0xd840, 0xc83c,	0xd87f, 0xc83c,		0x21, 0
+	.dw 0xd8c0, 0xc83c,	0xd8ff, 0xc83c,		0x21, 0
+	.dw 0xd940, 0xc83c,	0xd97f, 0xc83c,		0x21, 0
+	.dw 0xd9c0, 0xc83c,	0xdfff, 0xc83c,		0x21, 0
+	.dw 0xe040, 0xc83c,	0xe07f, 0xc83c,		0x21, 0
+	.dw 0xe0c0, 0xc83c,	0xe0ff, 0xc83c,		0x21, 0
+	.dw 0xe140, 0xc83c,	0xe17f, 0xc83c,		0x21, 0
+	.dw 0xe1c0, 0xc83c,	0xe1ff, 0xc83c,		0x21, 0
+	.dw 0xe240, 0xc83c,	0xe27f, 0xc83c,		0x21, 0
+	.dw 0xe2c0, 0xc83c,	0xe2ff, 0xc83c,		0x21, 0
+	.dw 0xe340, 0xc83c,	0xe37f, 0xc83c,		0x21, 0
+	.dw 0xe3c0, 0xc83c,	0xe3ff, 0xc83c,		0x21, 0
+	.dw 0xe440, 0xc83c,	0xe47f, 0xc83c,		0x21, 0
+	.dw 0xe4c0, 0xc83c,	0xe4ff, 0xc83c,		0x21, 0
+	.dw 0xe540, 0xc83c,	0xe57f, 0xc83c,		0x21, 0
+	.dw 0xe5c0, 0xc83c,	0xe5ff, 0xc83c,		0x21, 0
+	.dw 0xe640, 0xc83c,	0xe67f, 0xc83c,		0x21, 0
+	.dw 0xe6c0, 0xc83c,	0xe6ff, 0xc83c,		0x21, 0
+	.dw 0xe740, 0xc83c,	0xe77f, 0xc83c,		0x21, 0
+	.dw 0xe7c0, 0xc83c,	0xe7ff, 0xc83c,		0x21, 0
+	.dw 0xe840, 0xc83c,	0xe87f, 0xc83c,		0x21, 0
+	.dw 0xe8c0, 0xc83c,	0xe8ff, 0xc83c,		0x21, 0
+	.dw 0xe940, 0xc83c,	0xe97f, 0xc83c,		0x21, 0
+	.dw 0xe9c0, 0xc83c,	0xe9ff, 0xc83c,		0x21, 0
+	.dw 0xea40, 0xc83c,	0xea7f, 0xc83c,		0x21, 0
+	.dw 0xeac0, 0xc83c,	0xeaff, 0xc83c,		0x21, 0
+	.dw 0xeb40, 0xc83c,	0xeb7f, 0xc83c,		0x21, 0
+	.dw 0xebc0, 0xc83c,	0xebff, 0xc83c,		0x21, 0
+	.dw 0xec40, 0xc83c,	0xec7f, 0xc83c,		0x21, 0
+	.dw 0xecc0, 0xc83c,	0xecff, 0xc83c,		0x21, 0
+	.dw 0xed40, 0xc83c,	0xed7f, 0xc83c,		0x21, 0
+	.dw 0xedc0, 0xc83c,	0xedff, 0xc83c,		0x21, 0
+	.dw 0xee40, 0xc83c,	0xee7f, 0xc83c,		0x21, 0
+	.dw 0xeec0, 0xc83c,	0xeeff, 0xc83c,		0x21, 0
+	.dw 0xef40, 0xc83c,	0xef7f, 0xc83c,		0x21, 0
+	.dw 0xefc0, 0xc83c,	0xefff, 0xc83c,		0x21, 0
+	.dw 0xf040, 0xc83c,	0xf07f, 0xc83c,		0x21, 0
+	.dw 0xf0c0, 0xc83c,	0xf0ff, 0xc83c,		0x21, 0
+	.dw 0xf140, 0xc83c,	0xf17f, 0xc83c,		0x21, 0
+	.dw 0xf1c0, 0xc83c,	0xf1ff, 0xc83c,		0x21, 0
+	.dw 0xf240, 0xc83c,	0xf27f, 0xc83c,		0x21, 0
+	.dw 0xf2c0, 0xc83c,	0xf2ff, 0xc83c,		0x21, 0
+	.dw 0xf340, 0xc83c,	0xf37f, 0xc83c,		0x21, 0
+	.dw 0xf3c0, 0xc83c,	0xf3ff, 0xc83c,		0x21, 0
+	.dw 0xf440, 0xc83c,	0xf47f, 0xc83c,		0x21, 0
+	.dw 0xf4c0, 0xc83c,	0xf4ff, 0xc83c,		0x21, 0
+	.dw 0xf540, 0xc83c,	0xf57f, 0xc83c,		0x21, 0
+	.dw 0xf5c0, 0xc83c,	0xf5ff, 0xc83c,		0x21, 0
+	.dw 0xf640, 0xc83c,	0xf67f, 0xc83c,		0x21, 0
+	.dw 0xf6c0, 0xc83c,	0xf6ff, 0xc83c,		0x21, 0
+	.dw 0xf740, 0xc83c,	0xf77f, 0xc83c,		0x21, 0
+	.dw 0xf7c0, 0xc83c,	0xf7ff, 0xc83c,		0x21, 0
+	.dw 0xf840, 0xc83c,	0xf87f, 0xc83c,		0x21, 0
+	.dw 0xf8c0, 0xc83c,	0xf8ff, 0xc83c,		0x21, 0
+	.dw 0xf940, 0xc83c,	0xf97f, 0xc83c,		0x21, 0
+	.dw 0xf9c0, 0xc83c,	0xffff, 0xc83c,		0x21, 0
+	.dw 0x0040, 0xc83d,	0x007f, 0xc83d,		0x21, 0
+	.dw 0x00c0, 0xc83d,	0x00ff, 0xc83d,		0x21, 0
+	.dw 0x0140, 0xc83d,	0x017f, 0xc83d,		0x21, 0
+	.dw 0x01c0, 0xc83d,	0x01ff, 0xc83d,		0x21, 0
+	.dw 0x0240, 0xc83d,	0x027f, 0xc83d,		0x21, 0
+	.dw 0x02c0, 0xc83d,	0x02ff, 0xc83d,		0x21, 0
+	.dw 0x0340, 0xc83d,	0x037f, 0xc83d,		0x21, 0
+	.dw 0x03c0, 0xc83d,	0x03ff, 0xc83d,		0x21, 0
+	.dw 0x0440, 0xc83d,	0x047f, 0xc83d,		0x21, 0
+	.dw 0x04c0, 0xc83d,	0x04ff, 0xc83d,		0x21, 0
+	.dw 0x0540, 0xc83d,	0x057f, 0xc83d,		0x21, 0
+	.dw 0x05c0, 0xc83d,	0x05ff, 0xc83d,		0x21, 0
+	.dw 0x0640, 0xc83d,	0x067f, 0xc83d,		0x21, 0
+	.dw 0x06c0, 0xc83d,	0x06ff, 0xc83d,		0x21, 0
+	.dw 0x0740, 0xc83d,	0x077f, 0xc83d,		0x21, 0
+	.dw 0x07c0, 0xc83d,	0x07ff, 0xc83d,		0x21, 0
+	.dw 0x0840, 0xc83d,	0x087f, 0xc83d,		0x21, 0
+	.dw 0x08c0, 0xc83d,	0x08ff, 0xc83d,		0x21, 0
+	.dw 0x0940, 0xc83d,	0x097f, 0xc83d,		0x21, 0
+	.dw 0x09c0, 0xc83d,	0x09ff, 0xc83d,		0x21, 0
+	.dw 0x0a40, 0xc83d,	0x0a7f, 0xc83d,		0x21, 0
+	.dw 0x0ac0, 0xc83d,	0x0aff, 0xc83d,		0x21, 0
+	.dw 0x0b40, 0xc83d,	0x0b7f, 0xc83d,		0x21, 0
+	.dw 0x0bc0, 0xc83d,	0x0bff, 0xc83d,		0x21, 0
+	.dw 0x0c40, 0xc83d,	0x0c7f, 0xc83d,		0x21, 0
+	.dw 0x0cc0, 0xc83d,	0x0cff, 0xc83d,		0x21, 0
+	.dw 0x0d40, 0xc83d,	0x0d7f, 0xc83d,		0x21, 0
+	.dw 0x0dc0, 0xc83d,	0x0dff, 0xc83d,		0x21, 0
+	.dw 0x0e40, 0xc83d,	0x0e7f, 0xc83d,		0x21, 0
+	.dw 0x0ec0, 0xc83d,	0x0eff, 0xc83d,		0x21, 0
+	.dw 0x0f40, 0xc83d,	0x0f7f, 0xc83d,		0x21, 0
+	.dw 0x0fc0, 0xc83d,	0x0fff, 0xc83d,		0x21, 0
+	.dw 0x1040, 0xc83d,	0x107f, 0xc83d,		0x21, 0
+	.dw 0x10c0, 0xc83d,	0x10ff, 0xc83d,		0x21, 0
+	.dw 0x1140, 0xc83d,	0x117f, 0xc83d,		0x21, 0
+	.dw 0x11c0, 0xc83d,	0x11ff, 0xc83d,		0x21, 0
+	.dw 0x1240, 0xc83d,	0x127f, 0xc83d,		0x21, 0
+	.dw 0x12c0, 0xc83d,	0x12ff, 0xc83d,		0x21, 0
+	.dw 0x1340, 0xc83d,	0x137f, 0xc83d,		0x21, 0
+	.dw 0x13c0, 0xc83d,	0x13ff, 0xc83d,		0x21, 0
+	.dw 0x1440, 0xc83d,	0x147f, 0xc83d,		0x21, 0
+	.dw 0x14c0, 0xc83d,	0x14ff, 0xc83d,		0x21, 0
+	.dw 0x1540, 0xc83d,	0x157f, 0xc83d,		0x21, 0
+	.dw 0x15c0, 0xc83d,	0x15ff, 0xc83d,		0x21, 0
+	.dw 0x1640, 0xc83d,	0x167f, 0xc83d,		0x21, 0
+	.dw 0x16c0, 0xc83d,	0x16ff, 0xc83d,		0x21, 0
+	.dw 0x1740, 0xc83d,	0x177f, 0xc83d,		0x21, 0
+	.dw 0x17c0, 0xc83d,	0x17ff, 0xc83d,		0x21, 0
+	.dw 0x1840, 0xc83d,	0x187f, 0xc83d,		0x21, 0
+	.dw 0x18c0, 0xc83d,	0x18ff, 0xc83d,		0x21, 0
+	.dw 0x1940, 0xc83d,	0x197f, 0xc83d,		0x21, 0
+	.dw 0x19c0, 0xc83d,	0x1fff, 0xc83d,		0x21, 0
+	.dw 0x2040, 0xc83d,	0x207f, 0xc83d,		0x21, 0
+	.dw 0x20c0, 0xc83d,	0x20ff, 0xc83d,		0x21, 0
+	.dw 0x2140, 0xc83d,	0x217f, 0xc83d,		0x21, 0
+	.dw 0x21c0, 0xc83d,	0x21ff, 0xc83d,		0x21, 0
+	.dw 0x2240, 0xc83d,	0x227f, 0xc83d,		0x21, 0
+	.dw 0x22c0, 0xc83d,	0x22ff, 0xc83d,		0x21, 0
+	.dw 0x2340, 0xc83d,	0x237f, 0xc83d,		0x21, 0
+	.dw 0x23c0, 0xc83d,	0x23ff, 0xc83d,		0x21, 0
+	.dw 0x2440, 0xc83d,	0x247f, 0xc83d,		0x21, 0
+	.dw 0x24c0, 0xc83d,	0x24ff, 0xc83d,		0x21, 0
+	.dw 0x2540, 0xc83d,	0x257f, 0xc83d,		0x21, 0
+	.dw 0x25c0, 0xc83d,	0x25ff, 0xc83d,		0x21, 0
+	.dw 0x2640, 0xc83d,	0x267f, 0xc83d,		0x21, 0
+	.dw 0x26c0, 0xc83d,	0x26ff, 0xc83d,		0x21, 0
+	.dw 0x2740, 0xc83d,	0x277f, 0xc83d,		0x21, 0
+	.dw 0x27c0, 0xc83d,	0x27ff, 0xc83d,		0x21, 0
+	.dw 0x2840, 0xc83d,	0x287f, 0xc83d,		0x21, 0
+	.dw 0x28c0, 0xc83d,	0x28ff, 0xc83d,		0x21, 0
+	.dw 0x2940, 0xc83d,	0x297f, 0xc83d,		0x21, 0
+	.dw 0x29c0, 0xc83d,	0x29ff, 0xc83d,		0x21, 0
+	.dw 0x2a40, 0xc83d,	0x2a7f, 0xc83d,		0x21, 0
+	.dw 0x2ac0, 0xc83d,	0x2aff, 0xc83d,		0x21, 0
+	.dw 0x2b40, 0xc83d,	0x2b7f, 0xc83d,		0x21, 0
+	.dw 0x2bc0, 0xc83d,	0x2bff, 0xc83d,		0x21, 0
+	.dw 0x2c40, 0xc83d,	0x2c7f, 0xc83d,		0x21, 0
+	.dw 0x2cc0, 0xc83d,	0x2cff, 0xc83d,		0x21, 0
+	.dw 0x2d40, 0xc83d,	0x2d7f, 0xc83d,		0x21, 0
+	.dw 0x2dc0, 0xc83d,	0x2dff, 0xc83d,		0x21, 0
+	.dw 0x2e40, 0xc83d,	0x2e7f, 0xc83d,		0x21, 0
+	.dw 0x2ec0, 0xc83d,	0x2eff, 0xc83d,		0x21, 0
+	.dw 0x2f40, 0xc83d,	0x2f7f, 0xc83d,		0x21, 0
+	.dw 0x2fc0, 0xc83d,	0x2fff, 0xc83d,		0x21, 0
+	.dw 0x3040, 0xc83d,	0x307f, 0xc83d,		0x21, 0
+	.dw 0x30c0, 0xc83d,	0x30ff, 0xc83d,		0x21, 0
+	.dw 0x3140, 0xc83d,	0x317f, 0xc83d,		0x21, 0
+	.dw 0x31c0, 0xc83d,	0x31ff, 0xc83d,		0x21, 0
+	.dw 0x3240, 0xc83d,	0x327f, 0xc83d,		0x21, 0
+	.dw 0x32c0, 0xc83d,	0x32ff, 0xc83d,		0x21, 0
+	.dw 0x3340, 0xc83d,	0x337f, 0xc83d,		0x21, 0
+	.dw 0x33c0, 0xc83d,	0x33ff, 0xc83d,		0x21, 0
+	.dw 0x3440, 0xc83d,	0x347f, 0xc83d,		0x21, 0
+	.dw 0x34c0, 0xc83d,	0x34ff, 0xc83d,		0x21, 0
+	.dw 0x3540, 0xc83d,	0x357f, 0xc83d,		0x21, 0
+	.dw 0x35c0, 0xc83d,	0x35ff, 0xc83d,		0x21, 0
+	.dw 0x3640, 0xc83d,	0x367f, 0xc83d,		0x21, 0
+	.dw 0x36c0, 0xc83d,	0x36ff, 0xc83d,		0x21, 0
+	.dw 0x3740, 0xc83d,	0x377f, 0xc83d,		0x21, 0
+	.dw 0x37c0, 0xc83d,	0x37ff, 0xc83d,		0x21, 0
+	.dw 0x3840, 0xc83d,	0x387f, 0xc83d,		0x21, 0
+	.dw 0x38c0, 0xc83d,	0x38ff, 0xc83d,		0x21, 0
+	.dw 0x3940, 0xc83d,	0x397f, 0xc83d,		0x21, 0
+	.dw 0x39c0, 0xc83d,	0x3fff, 0xc83d,		0x21, 0
+	.dw 0x4040, 0xc83d,	0x407f, 0xc83d,		0x21, 0
+	.dw 0x40c0, 0xc83d,	0x40ff, 0xc83d,		0x21, 0
+	.dw 0x4140, 0xc83d,	0x417f, 0xc83d,		0x21, 0
+	.dw 0x41c0, 0xc83d,	0x41ff, 0xc83d,		0x21, 0
+	.dw 0x4240, 0xc83d,	0x427f, 0xc83d,		0x21, 0
+	.dw 0x42c0, 0xc83d,	0x42ff, 0xc83d,		0x21, 0
+	.dw 0x4340, 0xc83d,	0x437f, 0xc83d,		0x21, 0
+	.dw 0x43c0, 0xc83d,	0x43ff, 0xc83d,		0x21, 0
+	.dw 0x4440, 0xc83d,	0x447f, 0xc83d,		0x21, 0
+	.dw 0x44c0, 0xc83d,	0x44ff, 0xc83d,		0x21, 0
+	.dw 0x4540, 0xc83d,	0x457f, 0xc83d,		0x21, 0
+	.dw 0x45c0, 0xc83d,	0x45ff, 0xc83d,		0x21, 0
+	.dw 0x4640, 0xc83d,	0x467f, 0xc83d,		0x21, 0
+	.dw 0x46c0, 0xc83d,	0x46ff, 0xc83d,		0x21, 0
+	.dw 0x4740, 0xc83d,	0x477f, 0xc83d,		0x21, 0
+	.dw 0x47c0, 0xc83d,	0x47ff, 0xc83d,		0x21, 0
+	.dw 0x4840, 0xc83d,	0x487f, 0xc83d,		0x21, 0
+	.dw 0x48c0, 0xc83d,	0x48ff, 0xc83d,		0x21, 0
+	.dw 0x4940, 0xc83d,	0x497f, 0xc83d,		0x21, 0
+	.dw 0x49c0, 0xc83d,	0x49ff, 0xc83d,		0x21, 0
+	.dw 0x4a40, 0xc83d,	0x4a7f, 0xc83d,		0x21, 0
+	.dw 0x4ac0, 0xc83d,	0x4aff, 0xc83d,		0x21, 0
+	.dw 0x4b40, 0xc83d,	0x4b7f, 0xc83d,		0x21, 0
+	.dw 0x4bc0, 0xc83d,	0x4bff, 0xc83d,		0x21, 0
+	.dw 0x4c40, 0xc83d,	0x4c7f, 0xc83d,		0x21, 0
+	.dw 0x4cc0, 0xc83d,	0x4cff, 0xc83d,		0x21, 0
+	.dw 0x4d40, 0xc83d,	0x4d7f, 0xc83d,		0x21, 0
+	.dw 0x4dc0, 0xc83d,	0x4dff, 0xc83d,		0x21, 0
+	.dw 0x4e40, 0xc83d,	0x4e7f, 0xc83d,		0x21, 0
+	.dw 0x4ec0, 0xc83d,	0x4eff, 0xc83d,		0x21, 0
+	.dw 0x4f40, 0xc83d,	0x4f7f, 0xc83d,		0x21, 0
+	.dw 0x4fc0, 0xc83d,	0x4fff, 0xc83d,		0x21, 0
+	.dw 0x5040, 0xc83d,	0x507f, 0xc83d,		0x21, 0
+	.dw 0x50c0, 0xc83d,	0x50ff, 0xc83d,		0x21, 0
+	.dw 0x5140, 0xc83d,	0x517f, 0xc83d,		0x21, 0
+	.dw 0x51c0, 0xc83d,	0x51ff, 0xc83d,		0x21, 0
+	.dw 0x5240, 0xc83d,	0x527f, 0xc83d,		0x21, 0
+	.dw 0x52c0, 0xc83d,	0x52ff, 0xc83d,		0x21, 0
+	.dw 0x5340, 0xc83d,	0x537f, 0xc83d,		0x21, 0
+	.dw 0x53c0, 0xc83d,	0x53ff, 0xc83d,		0x21, 0
+	.dw 0x5440, 0xc83d,	0x547f, 0xc83d,		0x21, 0
+	.dw 0x54c0, 0xc83d,	0x54ff, 0xc83d,		0x21, 0
+	.dw 0x5540, 0xc83d,	0x557f, 0xc83d,		0x21, 0
+	.dw 0x55c0, 0xc83d,	0x55ff, 0xc83d,		0x21, 0
+	.dw 0x5640, 0xc83d,	0x567f, 0xc83d,		0x21, 0
+	.dw 0x56c0, 0xc83d,	0x56ff, 0xc83d,		0x21, 0
+	.dw 0x5740, 0xc83d,	0x577f, 0xc83d,		0x21, 0
+	.dw 0x57c0, 0xc83d,	0x57ff, 0xc83d,		0x21, 0
+	.dw 0x5840, 0xc83d,	0x587f, 0xc83d,		0x21, 0
+	.dw 0x58c0, 0xc83d,	0x58ff, 0xc83d,		0x21, 0
+	.dw 0x5940, 0xc83d,	0x597f, 0xc83d,		0x21, 0
+	.dw 0x59c0, 0xc83d,	0x5fff, 0xc83d,		0x21, 0
+	.dw 0x6040, 0xc83d,	0x607f, 0xc83d,		0x21, 0
+	.dw 0x60c0, 0xc83d,	0x60ff, 0xc83d,		0x21, 0
+	.dw 0x6140, 0xc83d,	0x617f, 0xc83d,		0x21, 0
+	.dw 0x61c0, 0xc83d,	0x61ff, 0xc83d,		0x21, 0
+	.dw 0x6240, 0xc83d,	0x627f, 0xc83d,		0x21, 0
+	.dw 0x62c0, 0xc83d,	0x62ff, 0xc83d,		0x21, 0
+	.dw 0x6340, 0xc83d,	0x637f, 0xc83d,		0x21, 0
+	.dw 0x63c0, 0xc83d,	0x63ff, 0xc83d,		0x21, 0
+	.dw 0x6440, 0xc83d,	0x647f, 0xc83d,		0x21, 0
+	.dw 0x64c0, 0xc83d,	0x64ff, 0xc83d,		0x21, 0
+	.dw 0x6540, 0xc83d,	0x657f, 0xc83d,		0x21, 0
+	.dw 0x65c0, 0xc83d,	0x65ff, 0xc83d,		0x21, 0
+	.dw 0x6640, 0xc83d,	0x667f, 0xc83d,		0x21, 0
+	.dw 0x66c0, 0xc83d,	0x66ff, 0xc83d,		0x21, 0
+	.dw 0x6740, 0xc83d,	0x677f, 0xc83d,		0x21, 0
+	.dw 0x67c0, 0xc83d,	0x67ff, 0xc83d,		0x21, 0
+	.dw 0x6840, 0xc83d,	0x687f, 0xc83d,		0x21, 0
+	.dw 0x68c0, 0xc83d,	0x68ff, 0xc83d,		0x21, 0
+	.dw 0x6940, 0xc83d,	0x697f, 0xc83d,		0x21, 0
+	.dw 0x69c0, 0xc83d,	0x69ff, 0xc83d,		0x21, 0
+	.dw 0x6a40, 0xc83d,	0x6a7f, 0xc83d,		0x21, 0
+	.dw 0x6ac0, 0xc83d,	0x6aff, 0xc83d,		0x21, 0
+	.dw 0x6b40, 0xc83d,	0x6b7f, 0xc83d,		0x21, 0
+	.dw 0x6bc0, 0xc83d,	0x6bff, 0xc83d,		0x21, 0
+	.dw 0x6c40, 0xc83d,	0x6c7f, 0xc83d,		0x21, 0
+	.dw 0x6cc0, 0xc83d,	0x6cff, 0xc83d,		0x21, 0
+	.dw 0x6d40, 0xc83d,	0x6d7f, 0xc83d,		0x21, 0
+	.dw 0x6dc0, 0xc83d,	0x6dff, 0xc83d,		0x21, 0
+	.dw 0x6e40, 0xc83d,	0x6e7f, 0xc83d,		0x21, 0
+	.dw 0x6ec0, 0xc83d,	0x6eff, 0xc83d,		0x21, 0
+	.dw 0x6f40, 0xc83d,	0x6f7f, 0xc83d,		0x21, 0
+	.dw 0x6fc0, 0xc83d,	0x6fff, 0xc83d,		0x21, 0
+	.dw 0x7040, 0xc83d,	0x707f, 0xc83d,		0x21, 0
+	.dw 0x70c0, 0xc83d,	0x70ff, 0xc83d,		0x21, 0
+	.dw 0x7140, 0xc83d,	0x717f, 0xc83d,		0x21, 0
+	.dw 0x71c0, 0xc83d,	0x71ff, 0xc83d,		0x21, 0
+	.dw 0x7240, 0xc83d,	0x727f, 0xc83d,		0x21, 0
+	.dw 0x72c0, 0xc83d,	0x72ff, 0xc83d,		0x21, 0
+	.dw 0x7340, 0xc83d,	0x737f, 0xc83d,		0x21, 0
+	.dw 0x73c0, 0xc83d,	0x73ff, 0xc83d,		0x21, 0
+	.dw 0x7440, 0xc83d,	0x747f, 0xc83d,		0x21, 0
+	.dw 0x74c0, 0xc83d,	0x74ff, 0xc83d,		0x21, 0
+	.dw 0x7540, 0xc83d,	0x757f, 0xc83d,		0x21, 0
+	.dw 0x75c0, 0xc83d,	0x75ff, 0xc83d,		0x21, 0
+	.dw 0x7640, 0xc83d,	0x767f, 0xc83d,		0x21, 0
+	.dw 0x76c0, 0xc83d,	0x76ff, 0xc83d,		0x21, 0
+	.dw 0x7740, 0xc83d,	0x777f, 0xc83d,		0x21, 0
+	.dw 0x77c0, 0xc83d,	0x77ff, 0xc83d,		0x21, 0
+	.dw 0x7840, 0xc83d,	0x787f, 0xc83d,		0x21, 0
+	.dw 0x78c0, 0xc83d,	0x78ff, 0xc83d,		0x21, 0
+	.dw 0x7940, 0xc83d,	0x797f, 0xc83d,		0x21, 0
+	.dw 0x79c0, 0xc83d,	0x7fff, 0xc83d,		0x21, 0
+	.dw 0x8040, 0xc83d,	0x807f, 0xc83d,		0x21, 0
+	.dw 0x80c0, 0xc83d,	0x80ff, 0xc83d,		0x21, 0
+	.dw 0x8140, 0xc83d,	0x817f, 0xc83d,		0x21, 0
+	.dw 0x81c0, 0xc83d,	0x81ff, 0xc83d,		0x21, 0
+	.dw 0x8240, 0xc83d,	0x827f, 0xc83d,		0x21, 0
+	.dw 0x82c0, 0xc83d,	0x82ff, 0xc83d,		0x21, 0
+	.dw 0x8340, 0xc83d,	0x837f, 0xc83d,		0x21, 0
+	.dw 0x83c0, 0xc83d,	0x83ff, 0xc83d,		0x21, 0
+	.dw 0x8440, 0xc83d,	0x847f, 0xc83d,		0x21, 0
+	.dw 0x84c0, 0xc83d,	0x84ff, 0xc83d,		0x21, 0
+	.dw 0x8540, 0xc83d,	0x857f, 0xc83d,		0x21, 0
+	.dw 0x85c0, 0xc83d,	0x85ff, 0xc83d,		0x21, 0
+	.dw 0x8640, 0xc83d,	0x867f, 0xc83d,		0x21, 0
+	.dw 0x86c0, 0xc83d,	0x86ff, 0xc83d,		0x21, 0
+	.dw 0x8740, 0xc83d,	0x877f, 0xc83d,		0x21, 0
+	.dw 0x87c0, 0xc83d,	0x87ff, 0xc83d,		0x21, 0
+	.dw 0x8840, 0xc83d,	0x887f, 0xc83d,		0x21, 0
+	.dw 0x88c0, 0xc83d,	0x88ff, 0xc83d,		0x21, 0
+	.dw 0x8940, 0xc83d,	0x897f, 0xc83d,		0x21, 0
+	.dw 0x89c0, 0xc83d,	0x89ff, 0xc83d,		0x21, 0
+	.dw 0x8a40, 0xc83d,	0x8a7f, 0xc83d,		0x21, 0
+	.dw 0x8ac0, 0xc83d,	0x8aff, 0xc83d,		0x21, 0
+	.dw 0x8b40, 0xc83d,	0x8b7f, 0xc83d,		0x21, 0
+	.dw 0x8bc0, 0xc83d,	0x8bff, 0xc83d,		0x21, 0
+	.dw 0x8c40, 0xc83d,	0x8c7f, 0xc83d,		0x21, 0
+	.dw 0x8cc0, 0xc83d,	0x8cff, 0xc83d,		0x21, 0
+	.dw 0x8d40, 0xc83d,	0x8d7f, 0xc83d,		0x21, 0
+	.dw 0x8dc0, 0xc83d,	0x8dff, 0xc83d,		0x21, 0
+	.dw 0x8e40, 0xc83d,	0x8e7f, 0xc83d,		0x21, 0
+	.dw 0x8ec0, 0xc83d,	0x8eff, 0xc83d,		0x21, 0
+	.dw 0x8f40, 0xc83d,	0x8f7f, 0xc83d,		0x21, 0
+	.dw 0x8fc0, 0xc83d,	0x8fff, 0xc83d,		0x21, 0
+	.dw 0x9040, 0xc83d,	0x907f, 0xc83d,		0x21, 0
+	.dw 0x90c0, 0xc83d,	0x90ff, 0xc83d,		0x21, 0
+	.dw 0x9140, 0xc83d,	0x917f, 0xc83d,		0x21, 0
+	.dw 0x91c0, 0xc83d,	0x91ff, 0xc83d,		0x21, 0
+	.dw 0x9240, 0xc83d,	0x927f, 0xc83d,		0x21, 0
+	.dw 0x92c0, 0xc83d,	0x92ff, 0xc83d,		0x21, 0
+	.dw 0x9340, 0xc83d,	0x937f, 0xc83d,		0x21, 0
+	.dw 0x93c0, 0xc83d,	0x93ff, 0xc83d,		0x21, 0
+	.dw 0x9440, 0xc83d,	0x947f, 0xc83d,		0x21, 0
+	.dw 0x94c0, 0xc83d,	0x94ff, 0xc83d,		0x21, 0
+	.dw 0x9540, 0xc83d,	0x957f, 0xc83d,		0x21, 0
+	.dw 0x95c0, 0xc83d,	0x95ff, 0xc83d,		0x21, 0
+	.dw 0x9640, 0xc83d,	0x967f, 0xc83d,		0x21, 0
+	.dw 0x96c0, 0xc83d,	0x96ff, 0xc83d,		0x21, 0
+	.dw 0x9740, 0xc83d,	0x977f, 0xc83d,		0x21, 0
+	.dw 0x97c0, 0xc83d,	0x97ff, 0xc83d,		0x21, 0
+	.dw 0x9840, 0xc83d,	0x987f, 0xc83d,		0x21, 0
+	.dw 0x98c0, 0xc83d,	0x98ff, 0xc83d,		0x21, 0
+	.dw 0x9940, 0xc83d,	0x997f, 0xc83d,		0x21, 0
+	.dw 0x99c0, 0xc83d,	0x9fff, 0xc83d,		0x21, 0
+	.dw 0xa040, 0xc83d,	0xa07f, 0xc83d,		0x21, 0
+	.dw 0xa0c0, 0xc83d,	0xa0ff, 0xc83d,		0x21, 0
+	.dw 0xa140, 0xc83d,	0xa17f, 0xc83d,		0x21, 0
+	.dw 0xa1c0, 0xc83d,	0xa1ff, 0xc83d,		0x21, 0
+	.dw 0xa240, 0xc83d,	0xa27f, 0xc83d,		0x21, 0
+	.dw 0xa2c0, 0xc83d,	0xa2ff, 0xc83d,		0x21, 0
+	.dw 0xa340, 0xc83d,	0xa37f, 0xc83d,		0x21, 0
+	.dw 0xa3c0, 0xc83d,	0xa3ff, 0xc83d,		0x21, 0
+	.dw 0xa440, 0xc83d,	0xa47f, 0xc83d,		0x21, 0
+	.dw 0xa4c0, 0xc83d,	0xa4ff, 0xc83d,		0x21, 0
+	.dw 0xa540, 0xc83d,	0xa57f, 0xc83d,		0x21, 0
+	.dw 0xa5c0, 0xc83d,	0xa5ff, 0xc83d,		0x21, 0
+	.dw 0xa640, 0xc83d,	0xa67f, 0xc83d,		0x21, 0
+	.dw 0xa6c0, 0xc83d,	0xa6ff, 0xc83d,		0x21, 0
+	.dw 0xa740, 0xc83d,	0xa77f, 0xc83d,		0x21, 0
+	.dw 0xa7c0, 0xc83d,	0xa7ff, 0xc83d,		0x21, 0
+	.dw 0xa840, 0xc83d,	0xa87f, 0xc83d,		0x21, 0
+	.dw 0xa8c0, 0xc83d,	0xa8ff, 0xc83d,		0x21, 0
+	.dw 0xa940, 0xc83d,	0xa97f, 0xc83d,		0x21, 0
+	.dw 0xa9c0, 0xc83d,	0xa9ff, 0xc83d,		0x21, 0
+	.dw 0xaa40, 0xc83d,	0xaa7f, 0xc83d,		0x21, 0
+	.dw 0xaac0, 0xc83d,	0xaaff, 0xc83d,		0x21, 0
+	.dw 0xab40, 0xc83d,	0xab7f, 0xc83d,		0x21, 0
+	.dw 0xabc0, 0xc83d,	0xabff, 0xc83d,		0x21, 0
+	.dw 0xac40, 0xc83d,	0xac7f, 0xc83d,		0x21, 0
+	.dw 0xacc0, 0xc83d,	0xacff, 0xc83d,		0x21, 0
+	.dw 0xad40, 0xc83d,	0xad7f, 0xc83d,		0x21, 0
+	.dw 0xadc0, 0xc83d,	0xadff, 0xc83d,		0x21, 0
+	.dw 0xae40, 0xc83d,	0xae7f, 0xc83d,		0x21, 0
+	.dw 0xaec0, 0xc83d,	0xaeff, 0xc83d,		0x21, 0
+	.dw 0xaf40, 0xc83d,	0xaf7f, 0xc83d,		0x21, 0
+	.dw 0xafc0, 0xc83d,	0xafff, 0xc83d,		0x21, 0
+	.dw 0xb040, 0xc83d,	0xb07f, 0xc83d,		0x21, 0
+	.dw 0xb0c0, 0xc83d,	0xb0ff, 0xc83d,		0x21, 0
+	.dw 0xb140, 0xc83d,	0xb17f, 0xc83d,		0x21, 0
+	.dw 0xb1c0, 0xc83d,	0xb1ff, 0xc83d,		0x21, 0
+	.dw 0xb240, 0xc83d,	0xb27f, 0xc83d,		0x21, 0
+	.dw 0xb2c0, 0xc83d,	0xb2ff, 0xc83d,		0x21, 0
+	.dw 0xb340, 0xc83d,	0xb37f, 0xc83d,		0x21, 0
+	.dw 0xb3c0, 0xc83d,	0xb3ff, 0xc83d,		0x21, 0
+	.dw 0xb440, 0xc83d,	0xb47f, 0xc83d,		0x21, 0
+	.dw 0xb4c0, 0xc83d,	0xb4ff, 0xc83d,		0x21, 0
+	.dw 0xb540, 0xc83d,	0xb57f, 0xc83d,		0x21, 0
+	.dw 0xb5c0, 0xc83d,	0xb5ff, 0xc83d,		0x21, 0
+	.dw 0xb640, 0xc83d,	0xb67f, 0xc83d,		0x21, 0
+	.dw 0xb6c0, 0xc83d,	0xb6ff, 0xc83d,		0x21, 0
+	.dw 0xb740, 0xc83d,	0xb77f, 0xc83d,		0x21, 0
+	.dw 0xb7c0, 0xc83d,	0xb7ff, 0xc83d,		0x21, 0
+	.dw 0xb840, 0xc83d,	0xb87f, 0xc83d,		0x21, 0
+	.dw 0xb8c0, 0xc83d,	0xb8ff, 0xc83d,		0x21, 0
+	.dw 0xb940, 0xc83d,	0xb97f, 0xc83d,		0x21, 0
+	.dw 0xb9c0, 0xc83d,	0xbfff, 0xc83d,		0x21, 0
+	.dw 0xc040, 0xc83d,	0xc07f, 0xc83d,		0x21, 0
+	.dw 0xc0c0, 0xc83d,	0xc0ff, 0xc83d,		0x21, 0
+	.dw 0xc140, 0xc83d,	0xc17f, 0xc83d,		0x21, 0
+	.dw 0xc1c0, 0xc83d,	0xc1ff, 0xc83d,		0x21, 0
+	.dw 0xc240, 0xc83d,	0xc27f, 0xc83d,		0x21, 0
+	.dw 0xc2c0, 0xc83d,	0xc2ff, 0xc83d,		0x21, 0
+	.dw 0xc340, 0xc83d,	0xc37f, 0xc83d,		0x21, 0
+	.dw 0xc3c0, 0xc83d,	0xc3ff, 0xc83d,		0x21, 0
+	.dw 0xc440, 0xc83d,	0xc47f, 0xc83d,		0x21, 0
+	.dw 0xc4c0, 0xc83d,	0xc4ff, 0xc83d,		0x21, 0
+	.dw 0xc540, 0xc83d,	0xc57f, 0xc83d,		0x21, 0
+	.dw 0xc5c0, 0xc83d,	0xc5ff, 0xc83d,		0x21, 0
+	.dw 0xc640, 0xc83d,	0xc67f, 0xc83d,		0x21, 0
+	.dw 0xc6c0, 0xc83d,	0xc6ff, 0xc83d,		0x21, 0
+	.dw 0xc740, 0xc83d,	0xc77f, 0xc83d,		0x21, 0
+	.dw 0xc7c0, 0xc83d,	0xc7ff, 0xc83d,		0x21, 0
+	.dw 0xc840, 0xc83d,	0xc87f, 0xc83d,		0x21, 0
+	.dw 0xc8c0, 0xc83d,	0xc8ff, 0xc83d,		0x21, 0
+	.dw 0xc940, 0xc83d,	0xc97f, 0xc83d,		0x21, 0
+	.dw 0xc9c0, 0xc83d,	0xc9ff, 0xc83d,		0x21, 0
+	.dw 0xca40, 0xc83d,	0xca7f, 0xc83d,		0x21, 0
+	.dw 0xcac0, 0xc83d,	0xcaff, 0xc83d,		0x21, 0
+	.dw 0xcb40, 0xc83d,	0xcb7f, 0xc83d,		0x21, 0
+	.dw 0xcbc0, 0xc83d,	0xcbff, 0xc83d,		0x21, 0
+	.dw 0xcc40, 0xc83d,	0xcc7f, 0xc83d,		0x21, 0
+	.dw 0xccc0, 0xc83d,	0xccff, 0xc83d,		0x21, 0
+	.dw 0xcd40, 0xc83d,	0xcd7f, 0xc83d,		0x21, 0
+	.dw 0xcdc0, 0xc83d,	0xcdff, 0xc83d,		0x21, 0
+	.dw 0xce40, 0xc83d,	0xce7f, 0xc83d,		0x21, 0
+	.dw 0xcec0, 0xc83d,	0xceff, 0xc83d,		0x21, 0
+	.dw 0xcf40, 0xc83d,	0xcf7f, 0xc83d,		0x21, 0
+	.dw 0xcfc0, 0xc83d,	0xcfff, 0xc83d,		0x21, 0
+	.dw 0xd040, 0xc83d,	0xd07f, 0xc83d,		0x21, 0
+	.dw 0xd0c0, 0xc83d,	0xd0ff, 0xc83d,		0x21, 0
+	.dw 0xd140, 0xc83d,	0xd17f, 0xc83d,		0x21, 0
+	.dw 0xd1c0, 0xc83d,	0xd1ff, 0xc83d,		0x21, 0
+	.dw 0xd240, 0xc83d,	0xd27f, 0xc83d,		0x21, 0
+	.dw 0xd2c0, 0xc83d,	0xd2ff, 0xc83d,		0x21, 0
+	.dw 0xd340, 0xc83d,	0xd37f, 0xc83d,		0x21, 0
+	.dw 0xd3c0, 0xc83d,	0xd3ff, 0xc83d,		0x21, 0
+	.dw 0xd440, 0xc83d,	0xd47f, 0xc83d,		0x21, 0
+	.dw 0xd4c0, 0xc83d,	0xd4ff, 0xc83d,		0x21, 0
+	.dw 0xd540, 0xc83d,	0xd57f, 0xc83d,		0x21, 0
+	.dw 0xd5c0, 0xc83d,	0xd5ff, 0xc83d,		0x21, 0
+	.dw 0xd640, 0xc83d,	0xd67f, 0xc83d,		0x21, 0
+	.dw 0xd6c0, 0xc83d,	0xd6ff, 0xc83d,		0x21, 0
+	.dw 0xd740, 0xc83d,	0xd77f, 0xc83d,		0x21, 0
+	.dw 0xd7c0, 0xc83d,	0xd7ff, 0xc83d,		0x21, 0
+	.dw 0xd840, 0xc83d,	0xd87f, 0xc83d,		0x21, 0
+	.dw 0xd8c0, 0xc83d,	0xd8ff, 0xc83d,		0x21, 0
+	.dw 0xd940, 0xc83d,	0xd97f, 0xc83d,		0x21, 0
+	.dw 0xd9c0, 0xc83d,	0xdfff, 0xc83d,		0x21, 0
+	.dw 0xe040, 0xc83d,	0xe07f, 0xc83d,		0x21, 0
+	.dw 0xe0c0, 0xc83d,	0xe0ff, 0xc83d,		0x21, 0
+	.dw 0xe140, 0xc83d,	0xe17f, 0xc83d,		0x21, 0
+	.dw 0xe1c0, 0xc83d,	0xe1ff, 0xc83d,		0x21, 0
+	.dw 0xe240, 0xc83d,	0xe27f, 0xc83d,		0x21, 0
+	.dw 0xe2c0, 0xc83d,	0xe2ff, 0xc83d,		0x21, 0
+	.dw 0xe340, 0xc83d,	0xe37f, 0xc83d,		0x21, 0
+	.dw 0xe3c0, 0xc83d,	0xe3ff, 0xc83d,		0x21, 0
+	.dw 0xe440, 0xc83d,	0xe47f, 0xc83d,		0x21, 0
+	.dw 0xe4c0, 0xc83d,	0xe4ff, 0xc83d,		0x21, 0
+	.dw 0xe540, 0xc83d,	0xe57f, 0xc83d,		0x21, 0
+	.dw 0xe5c0, 0xc83d,	0xe5ff, 0xc83d,		0x21, 0
+	.dw 0xe640, 0xc83d,	0xe67f, 0xc83d,		0x21, 0
+	.dw 0xe6c0, 0xc83d,	0xe6ff, 0xc83d,		0x21, 0
+	.dw 0xe740, 0xc83d,	0xe77f, 0xc83d,		0x21, 0
+	.dw 0xe7c0, 0xc83d,	0xe7ff, 0xc83d,		0x21, 0
+	.dw 0xe840, 0xc83d,	0xe87f, 0xc83d,		0x21, 0
+	.dw 0xe8c0, 0xc83d,	0xe8ff, 0xc83d,		0x21, 0
+	.dw 0xe940, 0xc83d,	0xe97f, 0xc83d,		0x21, 0
+	.dw 0xe9c0, 0xc83d,	0xe9ff, 0xc83d,		0x21, 0
+	.dw 0xea40, 0xc83d,	0xea7f, 0xc83d,		0x21, 0
+	.dw 0xeac0, 0xc83d,	0xeaff, 0xc83d,		0x21, 0
+	.dw 0xeb40, 0xc83d,	0xeb7f, 0xc83d,		0x21, 0
+	.dw 0xebc0, 0xc83d,	0xebff, 0xc83d,		0x21, 0
+	.dw 0xec40, 0xc83d,	0xec7f, 0xc83d,		0x21, 0
+	.dw 0xecc0, 0xc83d,	0xecff, 0xc83d,		0x21, 0
+	.dw 0xed40, 0xc83d,	0xed7f, 0xc83d,		0x21, 0
+	.dw 0xedc0, 0xc83d,	0xedff, 0xc83d,		0x21, 0
+	.dw 0xee40, 0xc83d,	0xee7f, 0xc83d,		0x21, 0
+	.dw 0xeec0, 0xc83d,	0xeeff, 0xc83d,		0x21, 0
+	.dw 0xef40, 0xc83d,	0xef7f, 0xc83d,		0x21, 0
+	.dw 0xefc0, 0xc83d,	0xefff, 0xc83d,		0x21, 0
+	.dw 0xf040, 0xc83d,	0xf07f, 0xc83d,		0x21, 0
+	.dw 0xf0c0, 0xc83d,	0xf0ff, 0xc83d,		0x21, 0
+	.dw 0xf140, 0xc83d,	0xf17f, 0xc83d,		0x21, 0
+	.dw 0xf1c0, 0xc83d,	0xf1ff, 0xc83d,		0x21, 0
+	.dw 0xf240, 0xc83d,	0xf27f, 0xc83d,		0x21, 0
+	.dw 0xf2c0, 0xc83d,	0xf2ff, 0xc83d,		0x21, 0
+	.dw 0xf340, 0xc83d,	0xf37f, 0xc83d,		0x21, 0
+	.dw 0xf3c0, 0xc83d,	0xf3ff, 0xc83d,		0x21, 0
+	.dw 0xf440, 0xc83d,	0xf47f, 0xc83d,		0x21, 0
+	.dw 0xf4c0, 0xc83d,	0xf4ff, 0xc83d,		0x21, 0
+	.dw 0xf540, 0xc83d,	0xf57f, 0xc83d,		0x21, 0
+	.dw 0xf5c0, 0xc83d,	0xf5ff, 0xc83d,		0x21, 0
+	.dw 0xf640, 0xc83d,	0xf67f, 0xc83d,		0x21, 0
+	.dw 0xf6c0, 0xc83d,	0xf6ff, 0xc83d,		0x21, 0
+	.dw 0xf740, 0xc83d,	0xf77f, 0xc83d,		0x21, 0
+	.dw 0xf7c0, 0xc83d,	0xf7ff, 0xc83d,		0x21, 0
+	.dw 0xf840, 0xc83d,	0xf87f, 0xc83d,		0x21, 0
+	.dw 0xf8c0, 0xc83d,	0xf8ff, 0xc83d,		0x21, 0
+	.dw 0xf940, 0xc83d,	0xf97f, 0xc83d,		0x21, 0
+	.dw 0xf9c0, 0xc83d,	0xffff, 0xc83d,		0x21, 0
+	.dw 0x0040, 0xc83e,	0x007f, 0xc83e,		0x21, 0
+	.dw 0x00c0, 0xc83e,	0x00ff, 0xc83e,		0x21, 0
+	.dw 0x0140, 0xc83e,	0x017f, 0xc83e,		0x21, 0
+	.dw 0x01c0, 0xc83e,	0x01ff, 0xc83e,		0x21, 0
+	.dw 0x0240, 0xc83e,	0x027f, 0xc83e,		0x21, 0
+	.dw 0x02c0, 0xc83e,	0x02ff, 0xc83e,		0x21, 0
+	.dw 0x0340, 0xc83e,	0x037f, 0xc83e,		0x21, 0
+	.dw 0x03c0, 0xc83e,	0x03ff, 0xc83e,		0x21, 0
+	.dw 0x0440, 0xc83e,	0x047f, 0xc83e,		0x21, 0
+	.dw 0x04c0, 0xc83e,	0x04ff, 0xc83e,		0x21, 0
+	.dw 0x0540, 0xc83e,	0x057f, 0xc83e,		0x21, 0
+	.dw 0x05c0, 0xc83e,	0x05ff, 0xc83e,		0x21, 0
+	.dw 0x0640, 0xc83e,	0x067f, 0xc83e,		0x21, 0
+	.dw 0x06c0, 0xc83e,	0x06ff, 0xc83e,		0x21, 0
+	.dw 0x0740, 0xc83e,	0x077f, 0xc83e,		0x21, 0
+	.dw 0x07c0, 0xc83e,	0x07ff, 0xc83e,		0x21, 0
+	.dw 0x0840, 0xc83e,	0x087f, 0xc83e,		0x21, 0
+	.dw 0x08c0, 0xc83e,	0x08ff, 0xc83e,		0x21, 0
+	.dw 0x0940, 0xc83e,	0x097f, 0xc83e,		0x21, 0
+	.dw 0x09c0, 0xc83e,	0x09ff, 0xc83e,		0x21, 0
+	.dw 0x0a40, 0xc83e,	0x0a7f, 0xc83e,		0x21, 0
+	.dw 0x0ac0, 0xc83e,	0x0aff, 0xc83e,		0x21, 0
+	.dw 0x0b40, 0xc83e,	0x0b7f, 0xc83e,		0x21, 0
+	.dw 0x0bc0, 0xc83e,	0x0bff, 0xc83e,		0x21, 0
+	.dw 0x0c40, 0xc83e,	0x0c7f, 0xc83e,		0x21, 0
+	.dw 0x0cc0, 0xc83e,	0x0cff, 0xc83e,		0x21, 0
+	.dw 0x0d40, 0xc83e,	0x0d7f, 0xc83e,		0x21, 0
+	.dw 0x0dc0, 0xc83e,	0x0dff, 0xc83e,		0x21, 0
+	.dw 0x0e40, 0xc83e,	0x0e7f, 0xc83e,		0x21, 0
+	.dw 0x0ec0, 0xc83e,	0x0eff, 0xc83e,		0x21, 0
+	.dw 0x0f40, 0xc83e,	0x0f7f, 0xc83e,		0x21, 0
+	.dw 0x0fc0, 0xc83e,	0x0fff, 0xc83e,		0x21, 0
+	.dw 0x1040, 0xc83e,	0x107f, 0xc83e,		0x21, 0
+	.dw 0x10c0, 0xc83e,	0x10ff, 0xc83e,		0x21, 0
+	.dw 0x1140, 0xc83e,	0x117f, 0xc83e,		0x21, 0
+	.dw 0x11c0, 0xc83e,	0x11ff, 0xc83e,		0x21, 0
+	.dw 0x1240, 0xc83e,	0x127f, 0xc83e,		0x21, 0
+	.dw 0x12c0, 0xc83e,	0x12ff, 0xc83e,		0x21, 0
+	.dw 0x1340, 0xc83e,	0x137f, 0xc83e,		0x21, 0
+	.dw 0x13c0, 0xc83e,	0x13ff, 0xc83e,		0x21, 0
+	.dw 0x1440, 0xc83e,	0x147f, 0xc83e,		0x21, 0
+	.dw 0x14c0, 0xc83e,	0x14ff, 0xc83e,		0x21, 0
+	.dw 0x1540, 0xc83e,	0x157f, 0xc83e,		0x21, 0
+	.dw 0x15c0, 0xc83e,	0x15ff, 0xc83e,		0x21, 0
+	.dw 0x1640, 0xc83e,	0x167f, 0xc83e,		0x21, 0
+	.dw 0x16c0, 0xc83e,	0x16ff, 0xc83e,		0x21, 0
+	.dw 0x1740, 0xc83e,	0x177f, 0xc83e,		0x21, 0
+	.dw 0x17c0, 0xc83e,	0x17ff, 0xc83e,		0x21, 0
+	.dw 0x1840, 0xc83e,	0x187f, 0xc83e,		0x21, 0
+	.dw 0x18c0, 0xc83e,	0x18ff, 0xc83e,		0x21, 0
+	.dw 0x1940, 0xc83e,	0x197f, 0xc83e,		0x21, 0
+	.dw 0x19c0, 0xc83e,	0x1fff, 0xc83e,		0x21, 0
+	.dw 0x2040, 0xc83e,	0x207f, 0xc83e,		0x21, 0
+	.dw 0x20c0, 0xc83e,	0x20ff, 0xc83e,		0x21, 0
+	.dw 0x2140, 0xc83e,	0x217f, 0xc83e,		0x21, 0
+	.dw 0x21c0, 0xc83e,	0x21ff, 0xc83e,		0x21, 0
+	.dw 0x2240, 0xc83e,	0x227f, 0xc83e,		0x21, 0
+	.dw 0x22c0, 0xc83e,	0x22ff, 0xc83e,		0x21, 0
+	.dw 0x2340, 0xc83e,	0x237f, 0xc83e,		0x21, 0
+	.dw 0x23c0, 0xc83e,	0x23ff, 0xc83e,		0x21, 0
+	.dw 0x2440, 0xc83e,	0x247f, 0xc83e,		0x21, 0
+	.dw 0x24c0, 0xc83e,	0x24ff, 0xc83e,		0x21, 0
+	.dw 0x2540, 0xc83e,	0x257f, 0xc83e,		0x21, 0
+	.dw 0x25c0, 0xc83e,	0x25ff, 0xc83e,		0x21, 0
+	.dw 0x2640, 0xc83e,	0x267f, 0xc83e,		0x21, 0
+	.dw 0x26c0, 0xc83e,	0x26ff, 0xc83e,		0x21, 0
+	.dw 0x2740, 0xc83e,	0x277f, 0xc83e,		0x21, 0
+	.dw 0x27c0, 0xc83e,	0x27ff, 0xc83e,		0x21, 0
+	.dw 0x2840, 0xc83e,	0x287f, 0xc83e,		0x21, 0
+	.dw 0x28c0, 0xc83e,	0x28ff, 0xc83e,		0x21, 0
+	.dw 0x2940, 0xc83e,	0x297f, 0xc83e,		0x21, 0
+	.dw 0x29c0, 0xc83e,	0x29ff, 0xc83e,		0x21, 0
+	.dw 0x2a40, 0xc83e,	0x2a7f, 0xc83e,		0x21, 0
+	.dw 0x2ac0, 0xc83e,	0x2aff, 0xc83e,		0x21, 0
+	.dw 0x2b40, 0xc83e,	0x2b7f, 0xc83e,		0x21, 0
+	.dw 0x2bc0, 0xc83e,	0x2bff, 0xc83e,		0x21, 0
+	.dw 0x2c40, 0xc83e,	0x2c7f, 0xc83e,		0x21, 0
+	.dw 0x2cc0, 0xc83e,	0x2cff, 0xc83e,		0x21, 0
+	.dw 0x2d40, 0xc83e,	0x2d7f, 0xc83e,		0x21, 0
+	.dw 0x2dc0, 0xc83e,	0x2dff, 0xc83e,		0x21, 0
+	.dw 0x2e40, 0xc83e,	0x2e7f, 0xc83e,		0x21, 0
+	.dw 0x2ec0, 0xc83e,	0x2eff, 0xc83e,		0x21, 0
+	.dw 0x2f40, 0xc83e,	0x2f7f, 0xc83e,		0x21, 0
+	.dw 0x2fc0, 0xc83e,	0x2fff, 0xc83e,		0x21, 0
+	.dw 0x3040, 0xc83e,	0x307f, 0xc83e,		0x21, 0
+	.dw 0x30c0, 0xc83e,	0x30ff, 0xc83e,		0x21, 0
+	.dw 0x3140, 0xc83e,	0x317f, 0xc83e,		0x21, 0
+	.dw 0x31c0, 0xc83e,	0x31ff, 0xc83e,		0x21, 0
+	.dw 0x3240, 0xc83e,	0x327f, 0xc83e,		0x21, 0
+	.dw 0x32c0, 0xc83e,	0x32ff, 0xc83e,		0x21, 0
+	.dw 0x3340, 0xc83e,	0x337f, 0xc83e,		0x21, 0
+	.dw 0x33c0, 0xc83e,	0x33ff, 0xc83e,		0x21, 0
+	.dw 0x3440, 0xc83e,	0x347f, 0xc83e,		0x21, 0
+	.dw 0x34c0, 0xc83e,	0x34ff, 0xc83e,		0x21, 0
+	.dw 0x3540, 0xc83e,	0x357f, 0xc83e,		0x21, 0
+	.dw 0x35c0, 0xc83e,	0x35ff, 0xc83e,		0x21, 0
+	.dw 0x3640, 0xc83e,	0x367f, 0xc83e,		0x21, 0
+	.dw 0x36c0, 0xc83e,	0x36ff, 0xc83e,		0x21, 0
+	.dw 0x3740, 0xc83e,	0x377f, 0xc83e,		0x21, 0
+	.dw 0x37c0, 0xc83e,	0x37ff, 0xc83e,		0x21, 0
+	.dw 0x3840, 0xc83e,	0x387f, 0xc83e,		0x21, 0
+	.dw 0x38c0, 0xc83e,	0x38ff, 0xc83e,		0x21, 0
+	.dw 0x3940, 0xc83e,	0x397f, 0xc83e,		0x21, 0
+	.dw 0x39c0, 0xc83e,	0x3fff, 0xc83e,		0x21, 0
+	.dw 0x4040, 0xc83e,	0x407f, 0xc83e,		0x21, 0
+	.dw 0x40c0, 0xc83e,	0x40ff, 0xc83e,		0x21, 0
+	.dw 0x4140, 0xc83e,	0x417f, 0xc83e,		0x21, 0
+	.dw 0x41c0, 0xc83e,	0x41ff, 0xc83e,		0x21, 0
+	.dw 0x4240, 0xc83e,	0x427f, 0xc83e,		0x21, 0
+	.dw 0x42c0, 0xc83e,	0x42ff, 0xc83e,		0x21, 0
+	.dw 0x4340, 0xc83e,	0x437f, 0xc83e,		0x21, 0
+	.dw 0x43c0, 0xc83e,	0x43ff, 0xc83e,		0x21, 0
+	.dw 0x4440, 0xc83e,	0x447f, 0xc83e,		0x21, 0
+	.dw 0x44c0, 0xc83e,	0x44ff, 0xc83e,		0x21, 0
+	.dw 0x4540, 0xc83e,	0x457f, 0xc83e,		0x21, 0
+	.dw 0x45c0, 0xc83e,	0x45ff, 0xc83e,		0x21, 0
+	.dw 0x4640, 0xc83e,	0x467f, 0xc83e,		0x21, 0
+	.dw 0x46c0, 0xc83e,	0x46ff, 0xc83e,		0x21, 0
+	.dw 0x4740, 0xc83e,	0x477f, 0xc83e,		0x21, 0
+	.dw 0x47c0, 0xc83e,	0x47ff, 0xc83e,		0x21, 0
+	.dw 0x4840, 0xc83e,	0x487f, 0xc83e,		0x21, 0
+	.dw 0x48c0, 0xc83e,	0x48ff, 0xc83e,		0x21, 0
+	.dw 0x4940, 0xc83e,	0x497f, 0xc83e,		0x21, 0
+	.dw 0x49c0, 0xc83e,	0x49ff, 0xc83e,		0x21, 0
+	.dw 0x4a40, 0xc83e,	0x4a7f, 0xc83e,		0x21, 0
+	.dw 0x4ac0, 0xc83e,	0x4aff, 0xc83e,		0x21, 0
+	.dw 0x4b40, 0xc83e,	0x4b7f, 0xc83e,		0x21, 0
+	.dw 0x4bc0, 0xc83e,	0x4bff, 0xc83e,		0x21, 0
+	.dw 0x4c40, 0xc83e,	0x4c7f, 0xc83e,		0x21, 0
+	.dw 0x4cc0, 0xc83e,	0x4cff, 0xc83e,		0x21, 0
+	.dw 0x4d40, 0xc83e,	0x4d7f, 0xc83e,		0x21, 0
+	.dw 0x4dc0, 0xc83e,	0x4dff, 0xc83e,		0x21, 0
+	.dw 0x4e40, 0xc83e,	0x4e7f, 0xc83e,		0x21, 0
+	.dw 0x4ec0, 0xc83e,	0x4eff, 0xc83e,		0x21, 0
+	.dw 0x4f40, 0xc83e,	0x4f7f, 0xc83e,		0x21, 0
+	.dw 0x4fc0, 0xc83e,	0x4fff, 0xc83e,		0x21, 0
+	.dw 0x5040, 0xc83e,	0x507f, 0xc83e,		0x21, 0
+	.dw 0x50c0, 0xc83e,	0x50ff, 0xc83e,		0x21, 0
+	.dw 0x5140, 0xc83e,	0x517f, 0xc83e,		0x21, 0
+	.dw 0x51c0, 0xc83e,	0x51ff, 0xc83e,		0x21, 0
+	.dw 0x5240, 0xc83e,	0x527f, 0xc83e,		0x21, 0
+	.dw 0x52c0, 0xc83e,	0x52ff, 0xc83e,		0x21, 0
+	.dw 0x5340, 0xc83e,	0x537f, 0xc83e,		0x21, 0
+	.dw 0x53c0, 0xc83e,	0x53ff, 0xc83e,		0x21, 0
+	.dw 0x5440, 0xc83e,	0x547f, 0xc83e,		0x21, 0
+	.dw 0x54c0, 0xc83e,	0x54ff, 0xc83e,		0x21, 0
+	.dw 0x5540, 0xc83e,	0x557f, 0xc83e,		0x21, 0
+	.dw 0x55c0, 0xc83e,	0x55ff, 0xc83e,		0x21, 0
+	.dw 0x5640, 0xc83e,	0x567f, 0xc83e,		0x21, 0
+	.dw 0x56c0, 0xc83e,	0x56ff, 0xc83e,		0x21, 0
+	.dw 0x5740, 0xc83e,	0x577f, 0xc83e,		0x21, 0
+	.dw 0x57c0, 0xc83e,	0x57ff, 0xc83e,		0x21, 0
+	.dw 0x5840, 0xc83e,	0x587f, 0xc83e,		0x21, 0
+	.dw 0x58c0, 0xc83e,	0x58ff, 0xc83e,		0x21, 0
+	.dw 0x5940, 0xc83e,	0x597f, 0xc83e,		0x21, 0
+	.dw 0x59c0, 0xc83e,	0x5fff, 0xc83e,		0x21, 0
+	.dw 0x6040, 0xc83e,	0x607f, 0xc83e,		0x21, 0
+	.dw 0x60c0, 0xc83e,	0x60ff, 0xc83e,		0x21, 0
+	.dw 0x6140, 0xc83e,	0x617f, 0xc83e,		0x21, 0
+	.dw 0x61c0, 0xc83e,	0x61ff, 0xc83e,		0x21, 0
+	.dw 0x6240, 0xc83e,	0x627f, 0xc83e,		0x21, 0
+	.dw 0x62c0, 0xc83e,	0x62ff, 0xc83e,		0x21, 0
+	.dw 0x6340, 0xc83e,	0x637f, 0xc83e,		0x21, 0
+	.dw 0x63c0, 0xc83e,	0x63ff, 0xc83e,		0x21, 0
+	.dw 0x6440, 0xc83e,	0x647f, 0xc83e,		0x21, 0
+	.dw 0x64c0, 0xc83e,	0x64ff, 0xc83e,		0x21, 0
+	.dw 0x6540, 0xc83e,	0x657f, 0xc83e,		0x21, 0
+	.dw 0x65c0, 0xc83e,	0x65ff, 0xc83e,		0x21, 0
+	.dw 0x6640, 0xc83e,	0x667f, 0xc83e,		0x21, 0
+	.dw 0x66c0, 0xc83e,	0x66ff, 0xc83e,		0x21, 0
+	.dw 0x6740, 0xc83e,	0x677f, 0xc83e,		0x21, 0
+	.dw 0x67c0, 0xc83e,	0x67ff, 0xc83e,		0x21, 0
+	.dw 0x6840, 0xc83e,	0x687f, 0xc83e,		0x21, 0
+	.dw 0x68c0, 0xc83e,	0x68ff, 0xc83e,		0x21, 0
+	.dw 0x6940, 0xc83e,	0x697f, 0xc83e,		0x21, 0
+	.dw 0x69c0, 0xc83e,	0x69ff, 0xc83e,		0x21, 0
+	.dw 0x6a40, 0xc83e,	0x6a7f, 0xc83e,		0x21, 0
+	.dw 0x6ac0, 0xc83e,	0x6aff, 0xc83e,		0x21, 0
+	.dw 0x6b40, 0xc83e,	0x6b7f, 0xc83e,		0x21, 0
+	.dw 0x6bc0, 0xc83e,	0x6bff, 0xc83e,		0x21, 0
+	.dw 0x6c40, 0xc83e,	0x6c7f, 0xc83e,		0x21, 0
+	.dw 0x6cc0, 0xc83e,	0x6cff, 0xc83e,		0x21, 0
+	.dw 0x6d40, 0xc83e,	0x6d7f, 0xc83e,		0x21, 0
+	.dw 0x6dc0, 0xc83e,	0x6dff, 0xc83e,		0x21, 0
+	.dw 0x6e40, 0xc83e,	0x6e7f, 0xc83e,		0x21, 0
+	.dw 0x6ec0, 0xc83e,	0x6eff, 0xc83e,		0x21, 0
+	.dw 0x6f40, 0xc83e,	0x6f7f, 0xc83e,		0x21, 0
+	.dw 0x6fc0, 0xc83e,	0x6fff, 0xc83e,		0x21, 0
+	.dw 0x7040, 0xc83e,	0x707f, 0xc83e,		0x21, 0
+	.dw 0x70c0, 0xc83e,	0x70ff, 0xc83e,		0x21, 0
+	.dw 0x7140, 0xc83e,	0x717f, 0xc83e,		0x21, 0
+	.dw 0x71c0, 0xc83e,	0x71ff, 0xc83e,		0x21, 0
+	.dw 0x7240, 0xc83e,	0x727f, 0xc83e,		0x21, 0
+	.dw 0x72c0, 0xc83e,	0x72ff, 0xc83e,		0x21, 0
+	.dw 0x7340, 0xc83e,	0x737f, 0xc83e,		0x21, 0
+	.dw 0x73c0, 0xc83e,	0x73ff, 0xc83e,		0x21, 0
+	.dw 0x7440, 0xc83e,	0x747f, 0xc83e,		0x21, 0
+	.dw 0x74c0, 0xc83e,	0x74ff, 0xc83e,		0x21, 0
+	.dw 0x7540, 0xc83e,	0x757f, 0xc83e,		0x21, 0
+	.dw 0x75c0, 0xc83e,	0x75ff, 0xc83e,		0x21, 0
+	.dw 0x7640, 0xc83e,	0x767f, 0xc83e,		0x21, 0
+	.dw 0x76c0, 0xc83e,	0x76ff, 0xc83e,		0x21, 0
+	.dw 0x7740, 0xc83e,	0x777f, 0xc83e,		0x21, 0
+	.dw 0x77c0, 0xc83e,	0x77ff, 0xc83e,		0x21, 0
+	.dw 0x7840, 0xc83e,	0x787f, 0xc83e,		0x21, 0
+	.dw 0x78c0, 0xc83e,	0x78ff, 0xc83e,		0x21, 0
+	.dw 0x7940, 0xc83e,	0x797f, 0xc83e,		0x21, 0
+	.dw 0x79c0, 0xc83e,	0x7fff, 0xc83e,		0x21, 0
+	.dw 0x8040, 0xc83e,	0x807f, 0xc83e,		0x21, 0
+	.dw 0x80c0, 0xc83e,	0x80ff, 0xc83e,		0x21, 0
+	.dw 0x8140, 0xc83e,	0x817f, 0xc83e,		0x21, 0
+	.dw 0x81c0, 0xc83e,	0x81ff, 0xc83e,		0x21, 0
+	.dw 0x8240, 0xc83e,	0x827f, 0xc83e,		0x21, 0
+	.dw 0x82c0, 0xc83e,	0x82ff, 0xc83e,		0x21, 0
+	.dw 0x8340, 0xc83e,	0x837f, 0xc83e,		0x21, 0
+	.dw 0x83c0, 0xc83e,	0x83ff, 0xc83e,		0x21, 0
+	.dw 0x8440, 0xc83e,	0x847f, 0xc83e,		0x21, 0
+	.dw 0x84c0, 0xc83e,	0x84ff, 0xc83e,		0x21, 0
+	.dw 0x8540, 0xc83e,	0x857f, 0xc83e,		0x21, 0
+	.dw 0x85c0, 0xc83e,	0x85ff, 0xc83e,		0x21, 0
+	.dw 0x8640, 0xc83e,	0x867f, 0xc83e,		0x21, 0
+	.dw 0x86c0, 0xc83e,	0x86ff, 0xc83e,		0x21, 0
+	.dw 0x8740, 0xc83e,	0x877f, 0xc83e,		0x21, 0
+	.dw 0x87c0, 0xc83e,	0x87ff, 0xc83e,		0x21, 0
+	.dw 0x8840, 0xc83e,	0x887f, 0xc83e,		0x21, 0
+	.dw 0x88c0, 0xc83e,	0x88ff, 0xc83e,		0x21, 0
+	.dw 0x8940, 0xc83e,	0x897f, 0xc83e,		0x21, 0
+	.dw 0x89c0, 0xc83e,	0x89ff, 0xc83e,		0x21, 0
+	.dw 0x8a40, 0xc83e,	0x8a7f, 0xc83e,		0x21, 0
+	.dw 0x8ac0, 0xc83e,	0x8aff, 0xc83e,		0x21, 0
+	.dw 0x8b40, 0xc83e,	0x8b7f, 0xc83e,		0x21, 0
+	.dw 0x8bc0, 0xc83e,	0x8bff, 0xc83e,		0x21, 0
+	.dw 0x8c40, 0xc83e,	0x8c7f, 0xc83e,		0x21, 0
+	.dw 0x8cc0, 0xc83e,	0x8cff, 0xc83e,		0x21, 0
+	.dw 0x8d40, 0xc83e,	0x8d7f, 0xc83e,		0x21, 0
+	.dw 0x8dc0, 0xc83e,	0x8dff, 0xc83e,		0x21, 0
+	.dw 0x8e40, 0xc83e,	0x8e7f, 0xc83e,		0x21, 0
+	.dw 0x8ec0, 0xc83e,	0x8eff, 0xc83e,		0x21, 0
+	.dw 0x8f40, 0xc83e,	0x8f7f, 0xc83e,		0x21, 0
+	.dw 0x8fc0, 0xc83e,	0x8fff, 0xc83e,		0x21, 0
+	.dw 0x9040, 0xc83e,	0x907f, 0xc83e,		0x21, 0
+	.dw 0x90c0, 0xc83e,	0x90ff, 0xc83e,		0x21, 0
+	.dw 0x9140, 0xc83e,	0x917f, 0xc83e,		0x21, 0
+	.dw 0x91c0, 0xc83e,	0x91ff, 0xc83e,		0x21, 0
+	.dw 0x9240, 0xc83e,	0x927f, 0xc83e,		0x21, 0
+	.dw 0x92c0, 0xc83e,	0x92ff, 0xc83e,		0x21, 0
+	.dw 0x9340, 0xc83e,	0x937f, 0xc83e,		0x21, 0
+	.dw 0x93c0, 0xc83e,	0x93ff, 0xc83e,		0x21, 0
+	.dw 0x9440, 0xc83e,	0x947f, 0xc83e,		0x21, 0
+	.dw 0x94c0, 0xc83e,	0x94ff, 0xc83e,		0x21, 0
+	.dw 0x9540, 0xc83e,	0x957f, 0xc83e,		0x21, 0
+	.dw 0x95c0, 0xc83e,	0x95ff, 0xc83e,		0x21, 0
+	.dw 0x9640, 0xc83e,	0x967f, 0xc83e,		0x21, 0
+	.dw 0x96c0, 0xc83e,	0x96ff, 0xc83e,		0x21, 0
+	.dw 0x9740, 0xc83e,	0x977f, 0xc83e,		0x21, 0
+	.dw 0x97c0, 0xc83e,	0x97ff, 0xc83e,		0x21, 0
+	.dw 0x9840, 0xc83e,	0x987f, 0xc83e,		0x21, 0
+	.dw 0x98c0, 0xc83e,	0x98ff, 0xc83e,		0x21, 0
+	.dw 0x9940, 0xc83e,	0x997f, 0xc83e,		0x21, 0
+	.dw 0x99c0, 0xc83e,	0x9fff, 0xc83e,		0x21, 0
+	.dw 0xa040, 0xc83e,	0xa07f, 0xc83e,		0x21, 0
+	.dw 0xa0c0, 0xc83e,	0xa0ff, 0xc83e,		0x21, 0
+	.dw 0xa140, 0xc83e,	0xa17f, 0xc83e,		0x21, 0
+	.dw 0xa1c0, 0xc83e,	0xa1ff, 0xc83e,		0x21, 0
+	.dw 0xa240, 0xc83e,	0xa27f, 0xc83e,		0x21, 0
+	.dw 0xa2c0, 0xc83e,	0xa2ff, 0xc83e,		0x21, 0
+	.dw 0xa340, 0xc83e,	0xa37f, 0xc83e,		0x21, 0
+	.dw 0xa3c0, 0xc83e,	0xa3ff, 0xc83e,		0x21, 0
+	.dw 0xa440, 0xc83e,	0xa47f, 0xc83e,		0x21, 0
+	.dw 0xa4c0, 0xc83e,	0xa4ff, 0xc83e,		0x21, 0
+	.dw 0xa540, 0xc83e,	0xa57f, 0xc83e,		0x21, 0
+	.dw 0xa5c0, 0xc83e,	0xa5ff, 0xc83e,		0x21, 0
+	.dw 0xa640, 0xc83e,	0xa67f, 0xc83e,		0x21, 0
+	.dw 0xa6c0, 0xc83e,	0xa6ff, 0xc83e,		0x21, 0
+	.dw 0xa740, 0xc83e,	0xa77f, 0xc83e,		0x21, 0
+	.dw 0xa7c0, 0xc83e,	0xa7ff, 0xc83e,		0x21, 0
+	.dw 0xa840, 0xc83e,	0xa87f, 0xc83e,		0x21, 0
+	.dw 0xa8c0, 0xc83e,	0xa8ff, 0xc83e,		0x21, 0
+	.dw 0xa940, 0xc83e,	0xa97f, 0xc83e,		0x21, 0
+	.dw 0xa9c0, 0xc83e,	0xa9ff, 0xc83e,		0x21, 0
+	.dw 0xaa40, 0xc83e,	0xaa7f, 0xc83e,		0x21, 0
+	.dw 0xaac0, 0xc83e,	0xaaff, 0xc83e,		0x21, 0
+	.dw 0xab40, 0xc83e,	0xab7f, 0xc83e,		0x21, 0
+	.dw 0xabc0, 0xc83e,	0xabff, 0xc83e,		0x21, 0
+	.dw 0xac40, 0xc83e,	0xac7f, 0xc83e,		0x21, 0
+	.dw 0xacc0, 0xc83e,	0xacff, 0xc83e,		0x21, 0
+	.dw 0xad40, 0xc83e,	0xad7f, 0xc83e,		0x21, 0
+	.dw 0xadc0, 0xc83e,	0xadff, 0xc83e,		0x21, 0
+	.dw 0xae40, 0xc83e,	0xae7f, 0xc83e,		0x21, 0
+	.dw 0xaec0, 0xc83e,	0xaeff, 0xc83e,		0x21, 0
+	.dw 0xaf40, 0xc83e,	0xaf7f, 0xc83e,		0x21, 0
+	.dw 0xafc0, 0xc83e,	0xafff, 0xc83e,		0x21, 0
+	.dw 0xb040, 0xc83e,	0xb07f, 0xc83e,		0x21, 0
+	.dw 0xb0c0, 0xc83e,	0xb0ff, 0xc83e,		0x21, 0
+	.dw 0xb140, 0xc83e,	0xb17f, 0xc83e,		0x21, 0
+	.dw 0xb1c0, 0xc83e,	0xb1ff, 0xc83e,		0x21, 0
+	.dw 0xb240, 0xc83e,	0xb27f, 0xc83e,		0x21, 0
+	.dw 0xb2c0, 0xc83e,	0xb2ff, 0xc83e,		0x21, 0
+	.dw 0xb340, 0xc83e,	0xb37f, 0xc83e,		0x21, 0
+	.dw 0xb3c0, 0xc83e,	0xb3ff, 0xc83e,		0x21, 0
+	.dw 0xb440, 0xc83e,	0xb47f, 0xc83e,		0x21, 0
+	.dw 0xb4c0, 0xc83e,	0xb4ff, 0xc83e,		0x21, 0
+	.dw 0xb540, 0xc83e,	0xb57f, 0xc83e,		0x21, 0
+	.dw 0xb5c0, 0xc83e,	0xb5ff, 0xc83e,		0x21, 0
+	.dw 0xb640, 0xc83e,	0xb67f, 0xc83e,		0x21, 0
+	.dw 0xb6c0, 0xc83e,	0xb6ff, 0xc83e,		0x21, 0
+	.dw 0xb740, 0xc83e,	0xb77f, 0xc83e,		0x21, 0
+	.dw 0xb7c0, 0xc83e,	0xb7ff, 0xc83e,		0x21, 0
+	.dw 0xb840, 0xc83e,	0xb87f, 0xc83e,		0x21, 0
+	.dw 0xb8c0, 0xc83e,	0xb8ff, 0xc83e,		0x21, 0
+	.dw 0xb940, 0xc83e,	0xb97f, 0xc83e,		0x21, 0
+	.dw 0xb9c0, 0xc83e,	0xbfff, 0xc83e,		0x21, 0
+	.dw 0xc040, 0xc83e,	0xc07f, 0xc83e,		0x21, 0
+	.dw 0xc0c0, 0xc83e,	0xc0ff, 0xc83e,		0x21, 0
+	.dw 0xc140, 0xc83e,	0xc17f, 0xc83e,		0x21, 0
+	.dw 0xc1c0, 0xc83e,	0xc1ff, 0xc83e,		0x21, 0
+	.dw 0xc240, 0xc83e,	0xc27f, 0xc83e,		0x21, 0
+	.dw 0xc2c0, 0xc83e,	0xc2ff, 0xc83e,		0x21, 0
+	.dw 0xc340, 0xc83e,	0xc37f, 0xc83e,		0x21, 0
+	.dw 0xc3c0, 0xc83e,	0xc3ff, 0xc83e,		0x21, 0
+	.dw 0xc440, 0xc83e,	0xc47f, 0xc83e,		0x21, 0
+	.dw 0xc4c0, 0xc83e,	0xc4ff, 0xc83e,		0x21, 0
+	.dw 0xc540, 0xc83e,	0xc57f, 0xc83e,		0x21, 0
+	.dw 0xc5c0, 0xc83e,	0xc5ff, 0xc83e,		0x21, 0
+	.dw 0xc640, 0xc83e,	0xc67f, 0xc83e,		0x21, 0
+	.dw 0xc6c0, 0xc83e,	0xc6ff, 0xc83e,		0x21, 0
+	.dw 0xc740, 0xc83e,	0xc77f, 0xc83e,		0x21, 0
+	.dw 0xc7c0, 0xc83e,	0xc7ff, 0xc83e,		0x21, 0
+	.dw 0xc840, 0xc83e,	0xc87f, 0xc83e,		0x21, 0
+	.dw 0xc8c0, 0xc83e,	0xc8ff, 0xc83e,		0x21, 0
+	.dw 0xc940, 0xc83e,	0xc97f, 0xc83e,		0x21, 0
+	.dw 0xc9c0, 0xc83e,	0xc9ff, 0xc83e,		0x21, 0
+	.dw 0xca40, 0xc83e,	0xca7f, 0xc83e,		0x21, 0
+	.dw 0xcac0, 0xc83e,	0xcaff, 0xc83e,		0x21, 0
+	.dw 0xcb40, 0xc83e,	0xcb7f, 0xc83e,		0x21, 0
+	.dw 0xcbc0, 0xc83e,	0xcbff, 0xc83e,		0x21, 0
+	.dw 0xcc40, 0xc83e,	0xcc7f, 0xc83e,		0x21, 0
+	.dw 0xccc0, 0xc83e,	0xccff, 0xc83e,		0x21, 0
+	.dw 0xcd40, 0xc83e,	0xcd7f, 0xc83e,		0x21, 0
+	.dw 0xcdc0, 0xc83e,	0xcdff, 0xc83e,		0x21, 0
+	.dw 0xce40, 0xc83e,	0xce7f, 0xc83e,		0x21, 0
+	.dw 0xcec0, 0xc83e,	0xceff, 0xc83e,		0x21, 0
+	.dw 0xcf40, 0xc83e,	0xcf7f, 0xc83e,		0x21, 0
+	.dw 0xcfc0, 0xc83e,	0xcfff, 0xc83e,		0x21, 0
+	.dw 0xd040, 0xc83e,	0xd07f, 0xc83e,		0x21, 0
+	.dw 0xd0c0, 0xc83e,	0xd0ff, 0xc83e,		0x21, 0
+	.dw 0xd140, 0xc83e,	0xd17f, 0xc83e,		0x21, 0
+	.dw 0xd1c0, 0xc83e,	0xd1ff, 0xc83e,		0x21, 0
+	.dw 0xd240, 0xc83e,	0xd27f, 0xc83e,		0x21, 0
+	.dw 0xd2c0, 0xc83e,	0xd2ff, 0xc83e,		0x21, 0
+	.dw 0xd340, 0xc83e,	0xd37f, 0xc83e,		0x21, 0
+	.dw 0xd3c0, 0xc83e,	0xd3ff, 0xc83e,		0x21, 0
+	.dw 0xd440, 0xc83e,	0xd47f, 0xc83e,		0x21, 0
+	.dw 0xd4c0, 0xc83e,	0xd4ff, 0xc83e,		0x21, 0
+	.dw 0xd540, 0xc83e,	0xd57f, 0xc83e,		0x21, 0
+	.dw 0xd5c0, 0xc83e,	0xd5ff, 0xc83e,		0x21, 0
+	.dw 0xd640, 0xc83e,	0xd67f, 0xc83e,		0x21, 0
+	.dw 0xd6c0, 0xc83e,	0xd6ff, 0xc83e,		0x21, 0
+	.dw 0xd740, 0xc83e,	0xd77f, 0xc83e,		0x21, 0
+	.dw 0xd7c0, 0xc83e,	0xd7ff, 0xc83e,		0x21, 0
+	.dw 0xd840, 0xc83e,	0xd87f, 0xc83e,		0x21, 0
+	.dw 0xd8c0, 0xc83e,	0xd8ff, 0xc83e,		0x21, 0
+	.dw 0xd940, 0xc83e,	0xd97f, 0xc83e,		0x21, 0
+	.dw 0xd9c0, 0xc83e,	0xdfff, 0xc83e,		0x21, 0
+	.dw 0xe040, 0xc83e,	0xe07f, 0xc83e,		0x21, 0
+	.dw 0xe0c0, 0xc83e,	0xe0ff, 0xc83e,		0x21, 0
+	.dw 0xe140, 0xc83e,	0xe17f, 0xc83e,		0x21, 0
+	.dw 0xe1c0, 0xc83e,	0xe1ff, 0xc83e,		0x21, 0
+	.dw 0xe240, 0xc83e,	0xe27f, 0xc83e,		0x21, 0
+	.dw 0xe2c0, 0xc83e,	0xe2ff, 0xc83e,		0x21, 0
+	.dw 0xe340, 0xc83e,	0xe37f, 0xc83e,		0x21, 0
+	.dw 0xe3c0, 0xc83e,	0xe3ff, 0xc83e,		0x21, 0
+	.dw 0xe440, 0xc83e,	0xe47f, 0xc83e,		0x21, 0
+	.dw 0xe4c0, 0xc83e,	0xe4ff, 0xc83e,		0x21, 0
+	.dw 0xe540, 0xc83e,	0xe57f, 0xc83e,		0x21, 0
+	.dw 0xe5c0, 0xc83e,	0xe5ff, 0xc83e,		0x21, 0
+	.dw 0xe640, 0xc83e,	0xe67f, 0xc83e,		0x21, 0
+	.dw 0xe6c0, 0xc83e,	0xe6ff, 0xc83e,		0x21, 0
+	.dw 0xe740, 0xc83e,	0xe77f, 0xc83e,		0x21, 0
+	.dw 0xe7c0, 0xc83e,	0xe7ff, 0xc83e,		0x21, 0
+	.dw 0xe840, 0xc83e,	0xe87f, 0xc83e,		0x21, 0
+	.dw 0xe8c0, 0xc83e,	0xe8ff, 0xc83e,		0x21, 0
+	.dw 0xe940, 0xc83e,	0xe97f, 0xc83e,		0x21, 0
+	.dw 0xe9c0, 0xc83e,	0xe9ff, 0xc83e,		0x21, 0
+	.dw 0xea40, 0xc83e,	0xea7f, 0xc83e,		0x21, 0
+	.dw 0xeac0, 0xc83e,	0xeaff, 0xc83e,		0x21, 0
+	.dw 0xeb40, 0xc83e,	0xeb7f, 0xc83e,		0x21, 0
+	.dw 0xebc0, 0xc83e,	0xebff, 0xc83e,		0x21, 0
+	.dw 0xec40, 0xc83e,	0xec7f, 0xc83e,		0x21, 0
+	.dw 0xecc0, 0xc83e,	0xecff, 0xc83e,		0x21, 0
+	.dw 0xed40, 0xc83e,	0xed7f, 0xc83e,		0x21, 0
+	.dw 0xedc0, 0xc83e,	0xedff, 0xc83e,		0x21, 0
+	.dw 0xee40, 0xc83e,	0xee7f, 0xc83e,		0x21, 0
+	.dw 0xeec0, 0xc83e,	0xeeff, 0xc83e,		0x21, 0
+	.dw 0xef40, 0xc83e,	0xef7f, 0xc83e,		0x21, 0
+	.dw 0xefc0, 0xc83e,	0xefff, 0xc83e,		0x21, 0
+	.dw 0xf040, 0xc83e,	0xf07f, 0xc83e,		0x21, 0
+	.dw 0xf0c0, 0xc83e,	0xf0ff, 0xc83e,		0x21, 0
+	.dw 0xf140, 0xc83e,	0xf17f, 0xc83e,		0x21, 0
+	.dw 0xf1c0, 0xc83e,	0xf1ff, 0xc83e,		0x21, 0
+	.dw 0xf240, 0xc83e,	0xf27f, 0xc83e,		0x21, 0
+	.dw 0xf2c0, 0xc83e,	0xf2ff, 0xc83e,		0x21, 0
+	.dw 0xf340, 0xc83e,	0xf37f, 0xc83e,		0x21, 0
+	.dw 0xf3c0, 0xc83e,	0xf3ff, 0xc83e,		0x21, 0
+	.dw 0xf440, 0xc83e,	0xf47f, 0xc83e,		0x21, 0
+	.dw 0xf4c0, 0xc83e,	0xf4ff, 0xc83e,		0x21, 0
+	.dw 0xf540, 0xc83e,	0xf57f, 0xc83e,		0x21, 0
+	.dw 0xf5c0, 0xc83e,	0xf5ff, 0xc83e,		0x21, 0
+	.dw 0xf640, 0xc83e,	0xf67f, 0xc83e,		0x21, 0
+	.dw 0xf6c0, 0xc83e,	0xf6ff, 0xc83e,		0x21, 0
+	.dw 0xf740, 0xc83e,	0xf77f, 0xc83e,		0x21, 0
+	.dw 0xf7c0, 0xc83e,	0xf7ff, 0xc83e,		0x21, 0
+	.dw 0xf840, 0xc83e,	0xf87f, 0xc83e,		0x21, 0
+	.dw 0xf8c0, 0xc83e,	0xf8ff, 0xc83e,		0x21, 0
+	.dw 0xf940, 0xc83e,	0xf97f, 0xc83e,		0x21, 0
+	.dw 0xf9c0, 0xc83e,	0xffff, 0xc83e,		0x21, 0
+	.dw 0x0040, 0xc83f,	0x007f, 0xc83f,		0x21, 0
+	.dw 0x00c0, 0xc83f,	0x00ff, 0xc83f,		0x21, 0
+	.dw 0x0140, 0xc83f,	0x017f, 0xc83f,		0x21, 0
+	.dw 0x01c0, 0xc83f,	0x01ff, 0xc83f,		0x21, 0
+	.dw 0x0240, 0xc83f,	0x027f, 0xc83f,		0x21, 0
+	.dw 0x02c0, 0xc83f,	0x02ff, 0xc83f,		0x21, 0
+	.dw 0x0340, 0xc83f,	0x037f, 0xc83f,		0x21, 0
+	.dw 0x03c0, 0xc83f,	0x03ff, 0xc83f,		0x21, 0
+	.dw 0x0440, 0xc83f,	0x047f, 0xc83f,		0x21, 0
+	.dw 0x04c0, 0xc83f,	0x04ff, 0xc83f,		0x21, 0
+	.dw 0x0540, 0xc83f,	0x057f, 0xc83f,		0x21, 0
+	.dw 0x05c0, 0xc83f,	0x05ff, 0xc83f,		0x21, 0
+	.dw 0x0640, 0xc83f,	0x067f, 0xc83f,		0x21, 0
+	.dw 0x06c0, 0xc83f,	0x06ff, 0xc83f,		0x21, 0
+	.dw 0x0740, 0xc83f,	0x077f, 0xc83f,		0x21, 0
+	.dw 0x07c0, 0xc83f,	0x07ff, 0xc83f,		0x21, 0
+	.dw 0x0840, 0xc83f,	0x087f, 0xc83f,		0x21, 0
+	.dw 0x08c0, 0xc83f,	0x08ff, 0xc83f,		0x21, 0
+	.dw 0x0940, 0xc83f,	0x097f, 0xc83f,		0x21, 0
+	.dw 0x09c0, 0xc83f,	0x09ff, 0xc83f,		0x21, 0
+	.dw 0x0a40, 0xc83f,	0x0a7f, 0xc83f,		0x21, 0
+	.dw 0x0ac0, 0xc83f,	0x0aff, 0xc83f,		0x21, 0
+	.dw 0x0b40, 0xc83f,	0x0b7f, 0xc83f,		0x21, 0
+	.dw 0x0bc0, 0xc83f,	0x0bff, 0xc83f,		0x21, 0
+	.dw 0x0c40, 0xc83f,	0x0c7f, 0xc83f,		0x21, 0
+	.dw 0x0cc0, 0xc83f,	0x0cff, 0xc83f,		0x21, 0
+	.dw 0x0d40, 0xc83f,	0x0d7f, 0xc83f,		0x21, 0
+	.dw 0x0dc0, 0xc83f,	0x0dff, 0xc83f,		0x21, 0
+	.dw 0x0e40, 0xc83f,	0x0e7f, 0xc83f,		0x21, 0
+	.dw 0x0ec0, 0xc83f,	0x0eff, 0xc83f,		0x21, 0
+	.dw 0x0f40, 0xc83f,	0x0f7f, 0xc83f,		0x21, 0
+	.dw 0x0fc0, 0xc83f,	0x0fff, 0xc83f,		0x21, 0
+	.dw 0x1040, 0xc83f,	0x107f, 0xc83f,		0x21, 0
+	.dw 0x10c0, 0xc83f,	0x10ff, 0xc83f,		0x21, 0
+	.dw 0x1140, 0xc83f,	0x117f, 0xc83f,		0x21, 0
+	.dw 0x11c0, 0xc83f,	0x11ff, 0xc83f,		0x21, 0
+	.dw 0x1240, 0xc83f,	0x127f, 0xc83f,		0x21, 0
+	.dw 0x12c0, 0xc83f,	0x12ff, 0xc83f,		0x21, 0
+	.dw 0x1340, 0xc83f,	0x137f, 0xc83f,		0x21, 0
+	.dw 0x13c0, 0xc83f,	0x13ff, 0xc83f,		0x21, 0
+	.dw 0x1440, 0xc83f,	0x147f, 0xc83f,		0x21, 0
+	.dw 0x14c0, 0xc83f,	0x14ff, 0xc83f,		0x21, 0
+	.dw 0x1540, 0xc83f,	0x157f, 0xc83f,		0x21, 0
+	.dw 0x15c0, 0xc83f,	0x15ff, 0xc83f,		0x21, 0
+	.dw 0x1640, 0xc83f,	0x167f, 0xc83f,		0x21, 0
+	.dw 0x16c0, 0xc83f,	0x16ff, 0xc83f,		0x21, 0
+	.dw 0x1740, 0xc83f,	0x177f, 0xc83f,		0x21, 0
+	.dw 0x17c0, 0xc83f,	0x17ff, 0xc83f,		0x21, 0
+	.dw 0x1840, 0xc83f,	0x187f, 0xc83f,		0x21, 0
+	.dw 0x18c0, 0xc83f,	0x18ff, 0xc83f,		0x21, 0
+	.dw 0x1940, 0xc83f,	0x197f, 0xc83f,		0x21, 0
+	.dw 0x19c0, 0xc83f,	0x1fff, 0xc83f,		0x21, 0
+	.dw 0x2040, 0xc83f,	0x207f, 0xc83f,		0x21, 0
+	.dw 0x20c0, 0xc83f,	0x20ff, 0xc83f,		0x21, 0
+	.dw 0x2140, 0xc83f,	0x217f, 0xc83f,		0x21, 0
+	.dw 0x21c0, 0xc83f,	0x21ff, 0xc83f,		0x21, 0
+	.dw 0x2240, 0xc83f,	0x227f, 0xc83f,		0x21, 0
+	.dw 0x22c0, 0xc83f,	0x22ff, 0xc83f,		0x21, 0
+	.dw 0x2340, 0xc83f,	0x237f, 0xc83f,		0x21, 0
+	.dw 0x23c0, 0xc83f,	0x23ff, 0xc83f,		0x21, 0
+	.dw 0x2440, 0xc83f,	0x247f, 0xc83f,		0x21, 0
+	.dw 0x24c0, 0xc83f,	0x24ff, 0xc83f,		0x21, 0
+	.dw 0x2540, 0xc83f,	0x257f, 0xc83f,		0x21, 0
+	.dw 0x25c0, 0xc83f,	0x25ff, 0xc83f,		0x21, 0
+	.dw 0x2640, 0xc83f,	0x267f, 0xc83f,		0x21, 0
+	.dw 0x26c0, 0xc83f,	0x26ff, 0xc83f,		0x21, 0
+	.dw 0x2740, 0xc83f,	0x277f, 0xc83f,		0x21, 0
+	.dw 0x27c0, 0xc83f,	0x27ff, 0xc83f,		0x21, 0
+	.dw 0x2840, 0xc83f,	0x287f, 0xc83f,		0x21, 0
+	.dw 0x28c0, 0xc83f,	0x28ff, 0xc83f,		0x21, 0
+	.dw 0x2940, 0xc83f,	0x297f, 0xc83f,		0x21, 0
+	.dw 0x29c0, 0xc83f,	0x29ff, 0xc83f,		0x21, 0
+	.dw 0x2a40, 0xc83f,	0x2a7f, 0xc83f,		0x21, 0
+	.dw 0x2ac0, 0xc83f,	0x2aff, 0xc83f,		0x21, 0
+	.dw 0x2b40, 0xc83f,	0x2b7f, 0xc83f,		0x21, 0
+	.dw 0x2bc0, 0xc83f,	0x2bff, 0xc83f,		0x21, 0
+	.dw 0x2c40, 0xc83f,	0x2c7f, 0xc83f,		0x21, 0
+	.dw 0x2cc0, 0xc83f,	0x2cff, 0xc83f,		0x21, 0
+	.dw 0x2d40, 0xc83f,	0x2d7f, 0xc83f,		0x21, 0
+	.dw 0x2dc0, 0xc83f,	0x2dff, 0xc83f,		0x21, 0
+	.dw 0x2e40, 0xc83f,	0x2e7f, 0xc83f,		0x21, 0
+	.dw 0x2ec0, 0xc83f,	0x2eff, 0xc83f,		0x21, 0
+	.dw 0x2f40, 0xc83f,	0x2f7f, 0xc83f,		0x21, 0
+	.dw 0x2fc0, 0xc83f,	0x2fff, 0xc83f,		0x21, 0
+	.dw 0x3040, 0xc83f,	0x307f, 0xc83f,		0x21, 0
+	.dw 0x30c0, 0xc83f,	0x30ff, 0xc83f,		0x21, 0
+	.dw 0x3140, 0xc83f,	0x317f, 0xc83f,		0x21, 0
+	.dw 0x31c0, 0xc83f,	0x31ff, 0xc83f,		0x21, 0
+	.dw 0x3240, 0xc83f,	0x327f, 0xc83f,		0x21, 0
+	.dw 0x32c0, 0xc83f,	0x32ff, 0xc83f,		0x21, 0
+	.dw 0x3340, 0xc83f,	0x337f, 0xc83f,		0x21, 0
+	.dw 0x33c0, 0xc83f,	0x33ff, 0xc83f,		0x21, 0
+	.dw 0x3440, 0xc83f,	0x347f, 0xc83f,		0x21, 0
+	.dw 0x34c0, 0xc83f,	0x34ff, 0xc83f,		0x21, 0
+	.dw 0x3540, 0xc83f,	0x357f, 0xc83f,		0x21, 0
+	.dw 0x35c0, 0xc83f,	0x35ff, 0xc83f,		0x21, 0
+	.dw 0x3640, 0xc83f,	0x367f, 0xc83f,		0x21, 0
+	.dw 0x36c0, 0xc83f,	0x36ff, 0xc83f,		0x21, 0
+	.dw 0x3740, 0xc83f,	0x377f, 0xc83f,		0x21, 0
+	.dw 0x37c0, 0xc83f,	0x37ff, 0xc83f,		0x21, 0
+	.dw 0x3840, 0xc83f,	0x387f, 0xc83f,		0x21, 0
+	.dw 0x38c0, 0xc83f,	0x38ff, 0xc83f,		0x21, 0
+	.dw 0x3940, 0xc83f,	0x397f, 0xc83f,		0x21, 0
+	.dw 0x39c0, 0xc83f,	0x1fff, 0xc840,		0x21, 0
+	.dw 0x3a00, 0xc840,	0x5fff, 0xc840,		0x21, 0
+	.dw 0x7a00, 0xc840,	0x9fff, 0xc840,		0x21, 0
+	.dw 0xba00, 0xc840,	0xdfff, 0xc840,		0x21, 0
+	.dw 0xfa00, 0xc840,	0x1fff, 0xc841,		0x21, 0
+	.dw 0x3a00, 0xc841,	0x5fff, 0xc841,		0x21, 0
+	.dw 0x7a00, 0xc841,	0x9fff, 0xc841,		0x21, 0
+	.dw 0xba00, 0xc841,	0xdfff, 0xc841,		0x21, 0
+	.dw 0xfa00, 0xc841,	0x1fff, 0xc842,		0x21, 0
+	.dw 0x3a00, 0xc842,	0x5fff, 0xc842,		0x21, 0
+	.dw 0x7a00, 0xc842,	0x9fff, 0xc842,		0x21, 0
+	.dw 0xba00, 0xc842,	0xdfff, 0xc842,		0x21, 0
+	.dw 0xfa00, 0xc842,	0x1fff, 0xc843,		0x21, 0
+	.dw 0x3a00, 0xc843,	0xffff, 0xc843,		0x21, 0
+	.dw 0x1a00, 0xc844,	0x1fff, 0xc844,		0x21, 0
+	.dw 0x3a00, 0xc844,	0x3fff, 0xc844,		0x21, 0
+	.dw 0x5a00, 0xc844,	0x5fff, 0xc844,		0x21, 0
+	.dw 0x7a00, 0xc844,	0x7fff, 0xc844,		0x21, 0
+	.dw 0x9a00, 0xc844,	0x9fff, 0xc844,		0x21, 0
+	.dw 0xba00, 0xc844,	0xbfff, 0xc844,		0x21, 0
+	.dw 0xda00, 0xc844,	0xdfff, 0xc844,		0x21, 0
+	.dw 0xfa00, 0xc844,	0xffff, 0xc844,		0x21, 0
+	.dw 0x1a00, 0xc845,	0x1fff, 0xc845,		0x21, 0
+	.dw 0x3a00, 0xc845,	0x3fff, 0xc845,		0x21, 0
+	.dw 0x5a00, 0xc845,	0x5fff, 0xc845,		0x21, 0
+	.dw 0x7a00, 0xc845,	0x7fff, 0xc845,		0x21, 0
+	.dw 0x9a00, 0xc845,	0x9fff, 0xc845,		0x21, 0
+	.dw 0xba00, 0xc845,	0xbfff, 0xc845,		0x21, 0
+	.dw 0xda00, 0xc845,	0xdfff, 0xc845,		0x21, 0
+	.dw 0xfa00, 0xc845,	0xffff, 0xc845,		0x21, 0
+	.dw 0x1a00, 0xc846,	0x1fff, 0xc846,		0x21, 0
+	.dw 0x3a00, 0xc846,	0x3fff, 0xc846,		0x21, 0
+	.dw 0x5a00, 0xc846,	0x5fff, 0xc846,		0x21, 0
+	.dw 0x7a00, 0xc846,	0x7fff, 0xc846,		0x21, 0
+	.dw 0x9a00, 0xc846,	0x9fff, 0xc846,		0x21, 0
+	.dw 0xba00, 0xc846,	0xbfff, 0xc846,		0x21, 0
+	.dw 0xda00, 0xc846,	0xdfff, 0xc846,		0x21, 0
+	.dw 0xfa00, 0xc846,	0xffff, 0xc846,		0x21, 0
+	.dw 0x1a00, 0xc847,	0x1fff, 0xc847,		0x21, 0
+	.dw 0x3a00, 0xc847,	0x1fff, 0xc850,		0x21, 0
+	.dw 0x3a00, 0xc850,	0x5fff, 0xc850,		0x21, 0
+	.dw 0x7a00, 0xc850,	0x9fff, 0xc850,		0x21, 0
+	.dw 0xba00, 0xc850,	0xdfff, 0xc850,		0x21, 0
+	.dw 0xfa00, 0xc850,	0x1fff, 0xc851,		0x21, 0
+	.dw 0x3a00, 0xc851,	0x5fff, 0xc851,		0x21, 0
+	.dw 0x7a00, 0xc851,	0x9fff, 0xc851,		0x21, 0
+	.dw 0xba00, 0xc851,	0xdfff, 0xc851,		0x21, 0
+	.dw 0xfa00, 0xc851,	0x1fff, 0xc852,		0x21, 0
+	.dw 0x3a00, 0xc852,	0x5fff, 0xc852,		0x21, 0
+	.dw 0x7a00, 0xc852,	0x9fff, 0xc852,		0x21, 0
+	.dw 0xba00, 0xc852,	0xdfff, 0xc852,		0x21, 0
+	.dw 0xfa00, 0xc852,	0xffff, 0xc853,		0x21, 0
+	.dw 0x1a00, 0xc854,	0x1fff, 0xc854,		0x21, 0
+	.dw 0x3a00, 0xc854,	0x3fff, 0xc854,		0x21, 0
+	.dw 0x5a00, 0xc854,	0x5fff, 0xc854,		0x21, 0
+	.dw 0x7a00, 0xc854,	0x7fff, 0xc854,		0x21, 0
+	.dw 0x9a00, 0xc854,	0x9fff, 0xc854,		0x21, 0
+	.dw 0xba00, 0xc854,	0xbfff, 0xc854,		0x21, 0
+	.dw 0xda00, 0xc854,	0xdfff, 0xc854,		0x21, 0
+	.dw 0xfa00, 0xc854,	0xffff, 0xc854,		0x21, 0
+	.dw 0x1a00, 0xc855,	0x1fff, 0xc855,		0x21, 0
+	.dw 0x3a00, 0xc855,	0x3fff, 0xc855,		0x21, 0
+	.dw 0x5a00, 0xc855,	0x5fff, 0xc855,		0x21, 0
+	.dw 0x7a00, 0xc855,	0x7fff, 0xc855,		0x21, 0
+	.dw 0x9a00, 0xc855,	0x9fff, 0xc855,		0x21, 0
+	.dw 0xba00, 0xc855,	0xbfff, 0xc855,		0x21, 0
+	.dw 0xda00, 0xc855,	0xdfff, 0xc855,		0x21, 0
+	.dw 0xfa00, 0xc855,	0xffff, 0xc855,		0x21, 0
+	.dw 0x1a00, 0xc856,	0x1fff, 0xc856,		0x21, 0
+	.dw 0x3a00, 0xc856,	0x3fff, 0xc856,		0x21, 0
+	.dw 0x5a00, 0xc856,	0x5fff, 0xc856,		0x21, 0
+	.dw 0x7a00, 0xc856,	0x7fff, 0xc856,		0x21, 0
+	.dw 0x9a00, 0xc856,	0x9fff, 0xc856,		0x21, 0
+	.dw 0xba00, 0xc856,	0xbfff, 0xc856,		0x21, 0
+	.dw 0xda00, 0xc856,	0xdfff, 0xc856,		0x21, 0
+	.dw 0xfa00, 0xc856,	0xffff, 0xc856,		0x21, 0
+	.dw 0x1a00, 0xc857,	0x1fff, 0xc857,		0x21, 0
+	.dw 0x3a00, 0xc857,	0xffff, 0xc85f,		0x21, 0
+	.dw 0x1a00, 0xc860,	0x3fff, 0xc860,		0x21, 0
+	.dw 0x5a00, 0xc860,	0x7fff, 0xc860,		0x21, 0
+	.dw 0x9a00, 0xc860,	0xbfff, 0xc860,		0x21, 0
+	.dw 0xda00, 0xc860,	0xffff, 0xc860,		0x21, 0
+	.dw 0x1a00, 0xc861,	0x3fff, 0xc861,		0x21, 0
+	.dw 0x5a00, 0xc861,	0x7fff, 0xc861,		0x21, 0
+	.dw 0x9a00, 0xc861,	0xbfff, 0xc861,		0x21, 0
+	.dw 0xda00, 0xc861,	0xffff, 0xc861,		0x21, 0
+	.dw 0x1a00, 0xc862,	0x3fff, 0xc862,		0x21, 0
+	.dw 0x5a00, 0xc862,	0x7fff, 0xc862,		0x21, 0
+	.dw 0x9a00, 0xc862,	0xbfff, 0xc862,		0x21, 0
+	.dw 0xda00, 0xc862,	0xffff, 0xc862,		0x21, 0
+	.dw 0x1a00, 0xc863,	0xffff, 0xc86f,		0x21, 0
+	.dw 0x1a00, 0xc870,	0x3fff, 0xc870,		0x21, 0
+	.dw 0x5a00, 0xc870,	0x7fff, 0xc870,		0x21, 0
+	.dw 0x9a00, 0xc870,	0xbfff, 0xc870,		0x21, 0
+	.dw 0xda00, 0xc870,	0xffff, 0xc870,		0x21, 0
+	.dw 0x1a00, 0xc871,	0x3fff, 0xc871,		0x21, 0
+	.dw 0x5a00, 0xc871,	0x7fff, 0xc871,		0x21, 0
+	.dw 0x9a00, 0xc871,	0xbfff, 0xc871,		0x21, 0
+	.dw 0xda00, 0xc871,	0xffff, 0xc871,		0x21, 0
+	.dw 0x1a00, 0xc872,	0x3fff, 0xc872,		0x21, 0
+	.dw 0x5a00, 0xc872,	0x7fff, 0xc872,		0x21, 0
+	.dw 0x9a00, 0xc872,	0xbfff, 0xc872,		0x21, 0
+	.dw 0xda00, 0xc872,	0xffff, 0xc87f,		0x21, 0
+	.dw 0x1a00, 0xc880,	0x1fff, 0xc880,		0x21, 0
+	.dw 0x3a00, 0xc880,	0x3fff, 0xc880,		0x21, 0
+	.dw 0x5a00, 0xc880,	0x5fff, 0xc880,		0x21, 0
+	.dw 0x7a00, 0xc880,	0x7fff, 0xc880,		0x21, 0
+	.dw 0x9a00, 0xc880,	0x9fff, 0xc880,		0x21, 0
+	.dw 0xba00, 0xc880,	0xbfff, 0xc880,		0x21, 0
+	.dw 0xda00, 0xc880,	0xdfff, 0xc880,		0x21, 0
+	.dw 0xfa00, 0xc880,	0xffff, 0xc880,		0x21, 0
+	.dw 0x1a00, 0xc881,	0x1fff, 0xc881,		0x21, 0
+	.dw 0x3a00, 0xc881,	0x3fff, 0xc881,		0x21, 0
+	.dw 0x5a00, 0xc881,	0x5fff, 0xc881,		0x21, 0
+	.dw 0x7a00, 0xc881,	0x7fff, 0xc881,		0x21, 0
+	.dw 0x9a00, 0xc881,	0x9fff, 0xc881,		0x21, 0
+	.dw 0xba00, 0xc881,	0xbfff, 0xc881,		0x21, 0
+	.dw 0xda00, 0xc881,	0xdfff, 0xc881,		0x21, 0
+	.dw 0xfa00, 0xc881,	0xffff, 0xc881,		0x21, 0
+	.dw 0x1a00, 0xc882,	0x1fff, 0xc882,		0x21, 0
+	.dw 0x3a00, 0xc882,	0x3fff, 0xc882,		0x21, 0
+	.dw 0x5a00, 0xc882,	0x5fff, 0xc882,		0x21, 0
+	.dw 0x7a00, 0xc882,	0x7fff, 0xc882,		0x21, 0
+	.dw 0x9a00, 0xc882,	0x9fff, 0xc882,		0x21, 0
+	.dw 0xba00, 0xc882,	0xbfff, 0xc882,		0x21, 0
+	.dw 0xda00, 0xc882,	0xdfff, 0xc882,		0x21, 0
+	.dw 0xfa00, 0xc882,	0xffff, 0xc882,		0x21, 0
+	.dw 0x1a00, 0xc883,	0x1fff, 0xc883,		0x21, 0
+	.dw 0x3a00, 0xc883,	0xffff, 0xc883,		0x21, 0
+	.dw 0x1a00, 0xc884,	0x1fff, 0xc884,		0x21, 0
+	.dw 0x3a00, 0xc884,	0x3fff, 0xc884,		0x21, 0
+	.dw 0x5a00, 0xc884,	0x5fff, 0xc884,		0x21, 0
+	.dw 0x7a00, 0xc884,	0x7fff, 0xc884,		0x21, 0
+	.dw 0x9a00, 0xc884,	0x9fff, 0xc884,		0x21, 0
+	.dw 0xba00, 0xc884,	0xbfff, 0xc884,		0x21, 0
+	.dw 0xda00, 0xc884,	0xdfff, 0xc884,		0x21, 0
+	.dw 0xfa00, 0xc884,	0xffff, 0xc884,		0x21, 0
+	.dw 0x1a00, 0xc885,	0x1fff, 0xc885,		0x21, 0
+	.dw 0x3a00, 0xc885,	0x3fff, 0xc885,		0x21, 0
+	.dw 0x5a00, 0xc885,	0x5fff, 0xc885,		0x21, 0
+	.dw 0x7a00, 0xc885,	0x7fff, 0xc885,		0x21, 0
+	.dw 0x9a00, 0xc885,	0x9fff, 0xc885,		0x21, 0
+	.dw 0xba00, 0xc885,	0xbfff, 0xc885,		0x21, 0
+	.dw 0xda00, 0xc885,	0xdfff, 0xc885,		0x21, 0
+	.dw 0xfa00, 0xc885,	0xffff, 0xc885,		0x21, 0
+	.dw 0x1a00, 0xc886,	0x1fff, 0xc886,		0x21, 0
+	.dw 0x3a00, 0xc886,	0x3fff, 0xc886,		0x21, 0
+	.dw 0x5a00, 0xc886,	0x5fff, 0xc886,		0x21, 0
+	.dw 0x7a00, 0xc886,	0x7fff, 0xc886,		0x21, 0
+	.dw 0x9a00, 0xc886,	0x9fff, 0xc886,		0x21, 0
+	.dw 0xba00, 0xc886,	0xbfff, 0xc886,		0x21, 0
+	.dw 0xda00, 0xc886,	0xdfff, 0xc886,		0x21, 0
+	.dw 0xfa00, 0xc886,	0xffff, 0xc886,		0x21, 0
+	.dw 0x1a00, 0xc887,	0x1fff, 0xc887,		0x21, 0
+	.dw 0x3a00, 0xc887,	0x1fff, 0xc888,		0x21, 0
+	.dw 0x2040, 0xc888,	0x207f, 0xc888,		0x21, 0
+	.dw 0x20c0, 0xc888,	0x20ff, 0xc888,		0x21, 0
+	.dw 0x2140, 0xc888,	0x217f, 0xc888,		0x21, 0
+	.dw 0x21c0, 0xc888,	0x21ff, 0xc888,		0x21, 0
+	.dw 0x2240, 0xc888,	0x227f, 0xc888,		0x21, 0
+	.dw 0x22c0, 0xc888,	0x22ff, 0xc888,		0x21, 0
+	.dw 0x2340, 0xc888,	0x237f, 0xc888,		0x21, 0
+	.dw 0x23c0, 0xc888,	0x23ff, 0xc888,		0x21, 0
+	.dw 0x2440, 0xc888,	0x247f, 0xc888,		0x21, 0
+	.dw 0x24c0, 0xc888,	0x24ff, 0xc888,		0x21, 0
+	.dw 0x2540, 0xc888,	0x257f, 0xc888,		0x21, 0
+	.dw 0x25c0, 0xc888,	0x25ff, 0xc888,		0x21, 0
+	.dw 0x2640, 0xc888,	0x267f, 0xc888,		0x21, 0
+	.dw 0x26c0, 0xc888,	0x26ff, 0xc888,		0x21, 0
+	.dw 0x2740, 0xc888,	0x277f, 0xc888,		0x21, 0
+	.dw 0x27c0, 0xc888,	0x27ff, 0xc888,		0x21, 0
+	.dw 0x2840, 0xc888,	0x287f, 0xc888,		0x21, 0
+	.dw 0x28c0, 0xc888,	0x28ff, 0xc888,		0x21, 0
+	.dw 0x2940, 0xc888,	0x297f, 0xc888,		0x21, 0
+	.dw 0x29c0, 0xc888,	0x29ff, 0xc888,		0x21, 0
+	.dw 0x2a40, 0xc888,	0x2a7f, 0xc888,		0x21, 0
+	.dw 0x2ac0, 0xc888,	0x2aff, 0xc888,		0x21, 0
+	.dw 0x2b40, 0xc888,	0x2b7f, 0xc888,		0x21, 0
+	.dw 0x2bc0, 0xc888,	0x2bff, 0xc888,		0x21, 0
+	.dw 0x2c40, 0xc888,	0x2c7f, 0xc888,		0x21, 0
+	.dw 0x2cc0, 0xc888,	0x2cff, 0xc888,		0x21, 0
+	.dw 0x2d40, 0xc888,	0x2d7f, 0xc888,		0x21, 0
+	.dw 0x2dc0, 0xc888,	0x2dff, 0xc888,		0x21, 0
+	.dw 0x2e40, 0xc888,	0x2e7f, 0xc888,		0x21, 0
+	.dw 0x2ec0, 0xc888,	0x2eff, 0xc888,		0x21, 0
+	.dw 0x2f40, 0xc888,	0x2f7f, 0xc888,		0x21, 0
+	.dw 0x2fc0, 0xc888,	0x2fff, 0xc888,		0x21, 0
+	.dw 0x3040, 0xc888,	0x307f, 0xc888,		0x21, 0
+	.dw 0x30c0, 0xc888,	0x30ff, 0xc888,		0x21, 0
+	.dw 0x3140, 0xc888,	0x317f, 0xc888,		0x21, 0
+	.dw 0x31c0, 0xc888,	0x31ff, 0xc888,		0x21, 0
+	.dw 0x3240, 0xc888,	0x327f, 0xc888,		0x21, 0
+	.dw 0x32c0, 0xc888,	0x32ff, 0xc888,		0x21, 0
+	.dw 0x3340, 0xc888,	0x337f, 0xc888,		0x21, 0
+	.dw 0x33c0, 0xc888,	0x33ff, 0xc888,		0x21, 0
+	.dw 0x3440, 0xc888,	0x347f, 0xc888,		0x21, 0
+	.dw 0x34c0, 0xc888,	0x34ff, 0xc888,		0x21, 0
+	.dw 0x3540, 0xc888,	0x357f, 0xc888,		0x21, 0
+	.dw 0x35c0, 0xc888,	0x35ff, 0xc888,		0x21, 0
+	.dw 0x3640, 0xc888,	0x367f, 0xc888,		0x21, 0
+	.dw 0x36c0, 0xc888,	0x36ff, 0xc888,		0x21, 0
+	.dw 0x3740, 0xc888,	0x377f, 0xc888,		0x21, 0
+	.dw 0x37c0, 0xc888,	0x37ff, 0xc888,		0x21, 0
+	.dw 0x3840, 0xc888,	0x387f, 0xc888,		0x21, 0
+	.dw 0x38c0, 0xc888,	0x38ff, 0xc888,		0x21, 0
+	.dw 0x3940, 0xc888,	0x397f, 0xc888,		0x21, 0
+	.dw 0x39c0, 0xc888,	0x5fff, 0xc888,		0x21, 0
+	.dw 0x6040, 0xc888,	0x607f, 0xc888,		0x21, 0
+	.dw 0x60c0, 0xc888,	0x60ff, 0xc888,		0x21, 0
+	.dw 0x6140, 0xc888,	0x617f, 0xc888,		0x21, 0
+	.dw 0x61c0, 0xc888,	0x61ff, 0xc888,		0x21, 0
+	.dw 0x6240, 0xc888,	0x627f, 0xc888,		0x21, 0
+	.dw 0x62c0, 0xc888,	0x62ff, 0xc888,		0x21, 0
+	.dw 0x6340, 0xc888,	0x637f, 0xc888,		0x21, 0
+	.dw 0x63c0, 0xc888,	0x63ff, 0xc888,		0x21, 0
+	.dw 0x6440, 0xc888,	0x647f, 0xc888,		0x21, 0
+	.dw 0x64c0, 0xc888,	0x64ff, 0xc888,		0x21, 0
+	.dw 0x6540, 0xc888,	0x657f, 0xc888,		0x21, 0
+	.dw 0x65c0, 0xc888,	0x65ff, 0xc888,		0x21, 0
+	.dw 0x6640, 0xc888,	0x667f, 0xc888,		0x21, 0
+	.dw 0x66c0, 0xc888,	0x66ff, 0xc888,		0x21, 0
+	.dw 0x6740, 0xc888,	0x677f, 0xc888,		0x21, 0
+	.dw 0x67c0, 0xc888,	0x67ff, 0xc888,		0x21, 0
+	.dw 0x6840, 0xc888,	0x687f, 0xc888,		0x21, 0
+	.dw 0x68c0, 0xc888,	0x68ff, 0xc888,		0x21, 0
+	.dw 0x6940, 0xc888,	0x697f, 0xc888,		0x21, 0
+	.dw 0x69c0, 0xc888,	0x69ff, 0xc888,		0x21, 0
+	.dw 0x6a40, 0xc888,	0x6a7f, 0xc888,		0x21, 0
+	.dw 0x6ac0, 0xc888,	0x6aff, 0xc888,		0x21, 0
+	.dw 0x6b40, 0xc888,	0x6b7f, 0xc888,		0x21, 0
+	.dw 0x6bc0, 0xc888,	0x6bff, 0xc888,		0x21, 0
+	.dw 0x6c40, 0xc888,	0x6c7f, 0xc888,		0x21, 0
+	.dw 0x6cc0, 0xc888,	0x6cff, 0xc888,		0x21, 0
+	.dw 0x6d40, 0xc888,	0x6d7f, 0xc888,		0x21, 0
+	.dw 0x6dc0, 0xc888,	0x6dff, 0xc888,		0x21, 0
+	.dw 0x6e40, 0xc888,	0x6e7f, 0xc888,		0x21, 0
+	.dw 0x6ec0, 0xc888,	0x6eff, 0xc888,		0x21, 0
+	.dw 0x6f40, 0xc888,	0x6f7f, 0xc888,		0x21, 0
+	.dw 0x6fc0, 0xc888,	0x6fff, 0xc888,		0x21, 0
+	.dw 0x7040, 0xc888,	0x707f, 0xc888,		0x21, 0
+	.dw 0x70c0, 0xc888,	0x70ff, 0xc888,		0x21, 0
+	.dw 0x7140, 0xc888,	0x717f, 0xc888,		0x21, 0
+	.dw 0x71c0, 0xc888,	0x71ff, 0xc888,		0x21, 0
+	.dw 0x7240, 0xc888,	0x727f, 0xc888,		0x21, 0
+	.dw 0x72c0, 0xc888,	0x72ff, 0xc888,		0x21, 0
+	.dw 0x7340, 0xc888,	0x737f, 0xc888,		0x21, 0
+	.dw 0x73c0, 0xc888,	0x73ff, 0xc888,		0x21, 0
+	.dw 0x7440, 0xc888,	0x747f, 0xc888,		0x21, 0
+	.dw 0x74c0, 0xc888,	0x74ff, 0xc888,		0x21, 0
+	.dw 0x7540, 0xc888,	0x757f, 0xc888,		0x21, 0
+	.dw 0x75c0, 0xc888,	0x75ff, 0xc888,		0x21, 0
+	.dw 0x7640, 0xc888,	0x767f, 0xc888,		0x21, 0
+	.dw 0x76c0, 0xc888,	0x76ff, 0xc888,		0x21, 0
+	.dw 0x7740, 0xc888,	0x777f, 0xc888,		0x21, 0
+	.dw 0x77c0, 0xc888,	0x77ff, 0xc888,		0x21, 0
+	.dw 0x7840, 0xc888,	0x787f, 0xc888,		0x21, 0
+	.dw 0x78c0, 0xc888,	0x78ff, 0xc888,		0x21, 0
+	.dw 0x7940, 0xc888,	0x797f, 0xc888,		0x21, 0
+	.dw 0x79c0, 0xc888,	0x9fff, 0xc888,		0x21, 0
+	.dw 0xa040, 0xc888,	0xa07f, 0xc888,		0x21, 0
+	.dw 0xa0c0, 0xc888,	0xa0ff, 0xc888,		0x21, 0
+	.dw 0xa140, 0xc888,	0xa17f, 0xc888,		0x21, 0
+	.dw 0xa1c0, 0xc888,	0xa1ff, 0xc888,		0x21, 0
+	.dw 0xa240, 0xc888,	0xa27f, 0xc888,		0x21, 0
+	.dw 0xa2c0, 0xc888,	0xa2ff, 0xc888,		0x21, 0
+	.dw 0xa340, 0xc888,	0xa37f, 0xc888,		0x21, 0
+	.dw 0xa3c0, 0xc888,	0xa3ff, 0xc888,		0x21, 0
+	.dw 0xa440, 0xc888,	0xa47f, 0xc888,		0x21, 0
+	.dw 0xa4c0, 0xc888,	0xa4ff, 0xc888,		0x21, 0
+	.dw 0xa540, 0xc888,	0xa57f, 0xc888,		0x21, 0
+	.dw 0xa5c0, 0xc888,	0xa5ff, 0xc888,		0x21, 0
+	.dw 0xa640, 0xc888,	0xa67f, 0xc888,		0x21, 0
+	.dw 0xa6c0, 0xc888,	0xa6ff, 0xc888,		0x21, 0
+	.dw 0xa740, 0xc888,	0xa77f, 0xc888,		0x21, 0
+	.dw 0xa7c0, 0xc888,	0xa7ff, 0xc888,		0x21, 0
+	.dw 0xa840, 0xc888,	0xa87f, 0xc888,		0x21, 0
+	.dw 0xa8c0, 0xc888,	0xa8ff, 0xc888,		0x21, 0
+	.dw 0xa940, 0xc888,	0xa97f, 0xc888,		0x21, 0
+	.dw 0xa9c0, 0xc888,	0xa9ff, 0xc888,		0x21, 0
+	.dw 0xaa40, 0xc888,	0xaa7f, 0xc888,		0x21, 0
+	.dw 0xaac0, 0xc888,	0xaaff, 0xc888,		0x21, 0
+	.dw 0xab40, 0xc888,	0xab7f, 0xc888,		0x21, 0
+	.dw 0xabc0, 0xc888,	0xabff, 0xc888,		0x21, 0
+	.dw 0xac40, 0xc888,	0xac7f, 0xc888,		0x21, 0
+	.dw 0xacc0, 0xc888,	0xacff, 0xc888,		0x21, 0
+	.dw 0xad40, 0xc888,	0xad7f, 0xc888,		0x21, 0
+	.dw 0xadc0, 0xc888,	0xadff, 0xc888,		0x21, 0
+	.dw 0xae40, 0xc888,	0xae7f, 0xc888,		0x21, 0
+	.dw 0xaec0, 0xc888,	0xaeff, 0xc888,		0x21, 0
+	.dw 0xaf40, 0xc888,	0xaf7f, 0xc888,		0x21, 0
+	.dw 0xafc0, 0xc888,	0xafff, 0xc888,		0x21, 0
+	.dw 0xb040, 0xc888,	0xb07f, 0xc888,		0x21, 0
+	.dw 0xb0c0, 0xc888,	0xb0ff, 0xc888,		0x21, 0
+	.dw 0xb140, 0xc888,	0xb17f, 0xc888,		0x21, 0
+	.dw 0xb1c0, 0xc888,	0xb1ff, 0xc888,		0x21, 0
+	.dw 0xb240, 0xc888,	0xb27f, 0xc888,		0x21, 0
+	.dw 0xb2c0, 0xc888,	0xb2ff, 0xc888,		0x21, 0
+	.dw 0xb340, 0xc888,	0xb37f, 0xc888,		0x21, 0
+	.dw 0xb3c0, 0xc888,	0xb3ff, 0xc888,		0x21, 0
+	.dw 0xb440, 0xc888,	0xb47f, 0xc888,		0x21, 0
+	.dw 0xb4c0, 0xc888,	0xb4ff, 0xc888,		0x21, 0
+	.dw 0xb540, 0xc888,	0xb57f, 0xc888,		0x21, 0
+	.dw 0xb5c0, 0xc888,	0xb5ff, 0xc888,		0x21, 0
+	.dw 0xb640, 0xc888,	0xb67f, 0xc888,		0x21, 0
+	.dw 0xb6c0, 0xc888,	0xb6ff, 0xc888,		0x21, 0
+	.dw 0xb740, 0xc888,	0xb77f, 0xc888,		0x21, 0
+	.dw 0xb7c0, 0xc888,	0xb7ff, 0xc888,		0x21, 0
+	.dw 0xb840, 0xc888,	0xb87f, 0xc888,		0x21, 0
+	.dw 0xb8c0, 0xc888,	0xb8ff, 0xc888,		0x21, 0
+	.dw 0xb940, 0xc888,	0xb97f, 0xc888,		0x21, 0
+	.dw 0xb9c0, 0xc888,	0xdfff, 0xc888,		0x21, 0
+	.dw 0xe040, 0xc888,	0xe07f, 0xc888,		0x21, 0
+	.dw 0xe0c0, 0xc888,	0xe0ff, 0xc888,		0x21, 0
+	.dw 0xe140, 0xc888,	0xe17f, 0xc888,		0x21, 0
+	.dw 0xe1c0, 0xc888,	0xe1ff, 0xc888,		0x21, 0
+	.dw 0xe240, 0xc888,	0xe27f, 0xc888,		0x21, 0
+	.dw 0xe2c0, 0xc888,	0xe2ff, 0xc888,		0x21, 0
+	.dw 0xe340, 0xc888,	0xe37f, 0xc888,		0x21, 0
+	.dw 0xe3c0, 0xc888,	0xe3ff, 0xc888,		0x21, 0
+	.dw 0xe440, 0xc888,	0xe47f, 0xc888,		0x21, 0
+	.dw 0xe4c0, 0xc888,	0xe4ff, 0xc888,		0x21, 0
+	.dw 0xe540, 0xc888,	0xe57f, 0xc888,		0x21, 0
+	.dw 0xe5c0, 0xc888,	0xe5ff, 0xc888,		0x21, 0
+	.dw 0xe640, 0xc888,	0xe67f, 0xc888,		0x21, 0
+	.dw 0xe6c0, 0xc888,	0xe6ff, 0xc888,		0x21, 0
+	.dw 0xe740, 0xc888,	0xe77f, 0xc888,		0x21, 0
+	.dw 0xe7c0, 0xc888,	0xe7ff, 0xc888,		0x21, 0
+	.dw 0xe840, 0xc888,	0xe87f, 0xc888,		0x21, 0
+	.dw 0xe8c0, 0xc888,	0xe8ff, 0xc888,		0x21, 0
+	.dw 0xe940, 0xc888,	0xe97f, 0xc888,		0x21, 0
+	.dw 0xe9c0, 0xc888,	0xe9ff, 0xc888,		0x21, 0
+	.dw 0xea40, 0xc888,	0xea7f, 0xc888,		0x21, 0
+	.dw 0xeac0, 0xc888,	0xeaff, 0xc888,		0x21, 0
+	.dw 0xeb40, 0xc888,	0xeb7f, 0xc888,		0x21, 0
+	.dw 0xebc0, 0xc888,	0xebff, 0xc888,		0x21, 0
+	.dw 0xec40, 0xc888,	0xec7f, 0xc888,		0x21, 0
+	.dw 0xecc0, 0xc888,	0xecff, 0xc888,		0x21, 0
+	.dw 0xed40, 0xc888,	0xed7f, 0xc888,		0x21, 0
+	.dw 0xedc0, 0xc888,	0xedff, 0xc888,		0x21, 0
+	.dw 0xee40, 0xc888,	0xee7f, 0xc888,		0x21, 0
+	.dw 0xeec0, 0xc888,	0xeeff, 0xc888,		0x21, 0
+	.dw 0xef40, 0xc888,	0xef7f, 0xc888,		0x21, 0
+	.dw 0xefc0, 0xc888,	0xefff, 0xc888,		0x21, 0
+	.dw 0xf040, 0xc888,	0xf07f, 0xc888,		0x21, 0
+	.dw 0xf0c0, 0xc888,	0xf0ff, 0xc888,		0x21, 0
+	.dw 0xf140, 0xc888,	0xf17f, 0xc888,		0x21, 0
+	.dw 0xf1c0, 0xc888,	0xf1ff, 0xc888,		0x21, 0
+	.dw 0xf240, 0xc888,	0xf27f, 0xc888,		0x21, 0
+	.dw 0xf2c0, 0xc888,	0xf2ff, 0xc888,		0x21, 0
+	.dw 0xf340, 0xc888,	0xf37f, 0xc888,		0x21, 0
+	.dw 0xf3c0, 0xc888,	0xf3ff, 0xc888,		0x21, 0
+	.dw 0xf440, 0xc888,	0xf47f, 0xc888,		0x21, 0
+	.dw 0xf4c0, 0xc888,	0xf4ff, 0xc888,		0x21, 0
+	.dw 0xf540, 0xc888,	0xf57f, 0xc888,		0x21, 0
+	.dw 0xf5c0, 0xc888,	0xf5ff, 0xc888,		0x21, 0
+	.dw 0xf640, 0xc888,	0xf67f, 0xc888,		0x21, 0
+	.dw 0xf6c0, 0xc888,	0xf6ff, 0xc888,		0x21, 0
+	.dw 0xf740, 0xc888,	0xf77f, 0xc888,		0x21, 0
+	.dw 0xf7c0, 0xc888,	0xf7ff, 0xc888,		0x21, 0
+	.dw 0xf840, 0xc888,	0xf87f, 0xc888,		0x21, 0
+	.dw 0xf8c0, 0xc888,	0xf8ff, 0xc888,		0x21, 0
+	.dw 0xf940, 0xc888,	0xf97f, 0xc888,		0x21, 0
+	.dw 0xf9c0, 0xc888,	0x1fff, 0xc889,		0x21, 0
+	.dw 0x2040, 0xc889,	0x207f, 0xc889,		0x21, 0
+	.dw 0x20c0, 0xc889,	0x20ff, 0xc889,		0x21, 0
+	.dw 0x2140, 0xc889,	0x217f, 0xc889,		0x21, 0
+	.dw 0x21c0, 0xc889,	0x21ff, 0xc889,		0x21, 0
+	.dw 0x2240, 0xc889,	0x227f, 0xc889,		0x21, 0
+	.dw 0x22c0, 0xc889,	0x22ff, 0xc889,		0x21, 0
+	.dw 0x2340, 0xc889,	0x237f, 0xc889,		0x21, 0
+	.dw 0x23c0, 0xc889,	0x23ff, 0xc889,		0x21, 0
+	.dw 0x2440, 0xc889,	0x247f, 0xc889,		0x21, 0
+	.dw 0x24c0, 0xc889,	0x24ff, 0xc889,		0x21, 0
+	.dw 0x2540, 0xc889,	0x257f, 0xc889,		0x21, 0
+	.dw 0x25c0, 0xc889,	0x25ff, 0xc889,		0x21, 0
+	.dw 0x2640, 0xc889,	0x267f, 0xc889,		0x21, 0
+	.dw 0x26c0, 0xc889,	0x26ff, 0xc889,		0x21, 0
+	.dw 0x2740, 0xc889,	0x277f, 0xc889,		0x21, 0
+	.dw 0x27c0, 0xc889,	0x27ff, 0xc889,		0x21, 0
+	.dw 0x2840, 0xc889,	0x287f, 0xc889,		0x21, 0
+	.dw 0x28c0, 0xc889,	0x28ff, 0xc889,		0x21, 0
+	.dw 0x2940, 0xc889,	0x297f, 0xc889,		0x21, 0
+	.dw 0x29c0, 0xc889,	0x29ff, 0xc889,		0x21, 0
+	.dw 0x2a40, 0xc889,	0x2a7f, 0xc889,		0x21, 0
+	.dw 0x2ac0, 0xc889,	0x2aff, 0xc889,		0x21, 0
+	.dw 0x2b40, 0xc889,	0x2b7f, 0xc889,		0x21, 0
+	.dw 0x2bc0, 0xc889,	0x2bff, 0xc889,		0x21, 0
+	.dw 0x2c40, 0xc889,	0x2c7f, 0xc889,		0x21, 0
+	.dw 0x2cc0, 0xc889,	0x2cff, 0xc889,		0x21, 0
+	.dw 0x2d40, 0xc889,	0x2d7f, 0xc889,		0x21, 0
+	.dw 0x2dc0, 0xc889,	0x2dff, 0xc889,		0x21, 0
+	.dw 0x2e40, 0xc889,	0x2e7f, 0xc889,		0x21, 0
+	.dw 0x2ec0, 0xc889,	0x2eff, 0xc889,		0x21, 0
+	.dw 0x2f40, 0xc889,	0x2f7f, 0xc889,		0x21, 0
+	.dw 0x2fc0, 0xc889,	0x2fff, 0xc889,		0x21, 0
+	.dw 0x3040, 0xc889,	0x307f, 0xc889,		0x21, 0
+	.dw 0x30c0, 0xc889,	0x30ff, 0xc889,		0x21, 0
+	.dw 0x3140, 0xc889,	0x317f, 0xc889,		0x21, 0
+	.dw 0x31c0, 0xc889,	0x31ff, 0xc889,		0x21, 0
+	.dw 0x3240, 0xc889,	0x327f, 0xc889,		0x21, 0
+	.dw 0x32c0, 0xc889,	0x32ff, 0xc889,		0x21, 0
+	.dw 0x3340, 0xc889,	0x337f, 0xc889,		0x21, 0
+	.dw 0x33c0, 0xc889,	0x33ff, 0xc889,		0x21, 0
+	.dw 0x3440, 0xc889,	0x347f, 0xc889,		0x21, 0
+	.dw 0x34c0, 0xc889,	0x34ff, 0xc889,		0x21, 0
+	.dw 0x3540, 0xc889,	0x357f, 0xc889,		0x21, 0
+	.dw 0x35c0, 0xc889,	0x35ff, 0xc889,		0x21, 0
+	.dw 0x3640, 0xc889,	0x367f, 0xc889,		0x21, 0
+	.dw 0x36c0, 0xc889,	0x36ff, 0xc889,		0x21, 0
+	.dw 0x3740, 0xc889,	0x377f, 0xc889,		0x21, 0
+	.dw 0x37c0, 0xc889,	0x37ff, 0xc889,		0x21, 0
+	.dw 0x3840, 0xc889,	0x387f, 0xc889,		0x21, 0
+	.dw 0x38c0, 0xc889,	0x38ff, 0xc889,		0x21, 0
+	.dw 0x3940, 0xc889,	0x397f, 0xc889,		0x21, 0
+	.dw 0x39c0, 0xc889,	0x5fff, 0xc889,		0x21, 0
+	.dw 0x6040, 0xc889,	0x607f, 0xc889,		0x21, 0
+	.dw 0x60c0, 0xc889,	0x60ff, 0xc889,		0x21, 0
+	.dw 0x6140, 0xc889,	0x617f, 0xc889,		0x21, 0
+	.dw 0x61c0, 0xc889,	0x61ff, 0xc889,		0x21, 0
+	.dw 0x6240, 0xc889,	0x627f, 0xc889,		0x21, 0
+	.dw 0x62c0, 0xc889,	0x62ff, 0xc889,		0x21, 0
+	.dw 0x6340, 0xc889,	0x637f, 0xc889,		0x21, 0
+	.dw 0x63c0, 0xc889,	0x63ff, 0xc889,		0x21, 0
+	.dw 0x6440, 0xc889,	0x647f, 0xc889,		0x21, 0
+	.dw 0x64c0, 0xc889,	0x64ff, 0xc889,		0x21, 0
+	.dw 0x6540, 0xc889,	0x657f, 0xc889,		0x21, 0
+	.dw 0x65c0, 0xc889,	0x65ff, 0xc889,		0x21, 0
+	.dw 0x6640, 0xc889,	0x667f, 0xc889,		0x21, 0
+	.dw 0x66c0, 0xc889,	0x66ff, 0xc889,		0x21, 0
+	.dw 0x6740, 0xc889,	0x677f, 0xc889,		0x21, 0
+	.dw 0x67c0, 0xc889,	0x67ff, 0xc889,		0x21, 0
+	.dw 0x6840, 0xc889,	0x687f, 0xc889,		0x21, 0
+	.dw 0x68c0, 0xc889,	0x68ff, 0xc889,		0x21, 0
+	.dw 0x6940, 0xc889,	0x697f, 0xc889,		0x21, 0
+	.dw 0x69c0, 0xc889,	0x69ff, 0xc889,		0x21, 0
+	.dw 0x6a40, 0xc889,	0x6a7f, 0xc889,		0x21, 0
+	.dw 0x6ac0, 0xc889,	0x6aff, 0xc889,		0x21, 0
+	.dw 0x6b40, 0xc889,	0x6b7f, 0xc889,		0x21, 0
+	.dw 0x6bc0, 0xc889,	0x6bff, 0xc889,		0x21, 0
+	.dw 0x6c40, 0xc889,	0x6c7f, 0xc889,		0x21, 0
+	.dw 0x6cc0, 0xc889,	0x6cff, 0xc889,		0x21, 0
+	.dw 0x6d40, 0xc889,	0x6d7f, 0xc889,		0x21, 0
+	.dw 0x6dc0, 0xc889,	0x6dff, 0xc889,		0x21, 0
+	.dw 0x6e40, 0xc889,	0x6e7f, 0xc889,		0x21, 0
+	.dw 0x6ec0, 0xc889,	0x6eff, 0xc889,		0x21, 0
+	.dw 0x6f40, 0xc889,	0x6f7f, 0xc889,		0x21, 0
+	.dw 0x6fc0, 0xc889,	0x6fff, 0xc889,		0x21, 0
+	.dw 0x7040, 0xc889,	0x707f, 0xc889,		0x21, 0
+	.dw 0x70c0, 0xc889,	0x70ff, 0xc889,		0x21, 0
+	.dw 0x7140, 0xc889,	0x717f, 0xc889,		0x21, 0
+	.dw 0x71c0, 0xc889,	0x71ff, 0xc889,		0x21, 0
+	.dw 0x7240, 0xc889,	0x727f, 0xc889,		0x21, 0
+	.dw 0x72c0, 0xc889,	0x72ff, 0xc889,		0x21, 0
+	.dw 0x7340, 0xc889,	0x737f, 0xc889,		0x21, 0
+	.dw 0x73c0, 0xc889,	0x73ff, 0xc889,		0x21, 0
+	.dw 0x7440, 0xc889,	0x747f, 0xc889,		0x21, 0
+	.dw 0x74c0, 0xc889,	0x74ff, 0xc889,		0x21, 0
+	.dw 0x7540, 0xc889,	0x757f, 0xc889,		0x21, 0
+	.dw 0x75c0, 0xc889,	0x75ff, 0xc889,		0x21, 0
+	.dw 0x7640, 0xc889,	0x767f, 0xc889,		0x21, 0
+	.dw 0x76c0, 0xc889,	0x76ff, 0xc889,		0x21, 0
+	.dw 0x7740, 0xc889,	0x777f, 0xc889,		0x21, 0
+	.dw 0x77c0, 0xc889,	0x77ff, 0xc889,		0x21, 0
+	.dw 0x7840, 0xc889,	0x787f, 0xc889,		0x21, 0
+	.dw 0x78c0, 0xc889,	0x78ff, 0xc889,		0x21, 0
+	.dw 0x7940, 0xc889,	0x797f, 0xc889,		0x21, 0
+	.dw 0x79c0, 0xc889,	0x9fff, 0xc889,		0x21, 0
+	.dw 0xa040, 0xc889,	0xa07f, 0xc889,		0x21, 0
+	.dw 0xa0c0, 0xc889,	0xa0ff, 0xc889,		0x21, 0
+	.dw 0xa140, 0xc889,	0xa17f, 0xc889,		0x21, 0
+	.dw 0xa1c0, 0xc889,	0xa1ff, 0xc889,		0x21, 0
+	.dw 0xa240, 0xc889,	0xa27f, 0xc889,		0x21, 0
+	.dw 0xa2c0, 0xc889,	0xa2ff, 0xc889,		0x21, 0
+	.dw 0xa340, 0xc889,	0xa37f, 0xc889,		0x21, 0
+	.dw 0xa3c0, 0xc889,	0xa3ff, 0xc889,		0x21, 0
+	.dw 0xa440, 0xc889,	0xa47f, 0xc889,		0x21, 0
+	.dw 0xa4c0, 0xc889,	0xa4ff, 0xc889,		0x21, 0
+	.dw 0xa540, 0xc889,	0xa57f, 0xc889,		0x21, 0
+	.dw 0xa5c0, 0xc889,	0xa5ff, 0xc889,		0x21, 0
+	.dw 0xa640, 0xc889,	0xa67f, 0xc889,		0x21, 0
+	.dw 0xa6c0, 0xc889,	0xa6ff, 0xc889,		0x21, 0
+	.dw 0xa740, 0xc889,	0xa77f, 0xc889,		0x21, 0
+	.dw 0xa7c0, 0xc889,	0xa7ff, 0xc889,		0x21, 0
+	.dw 0xa840, 0xc889,	0xa87f, 0xc889,		0x21, 0
+	.dw 0xa8c0, 0xc889,	0xa8ff, 0xc889,		0x21, 0
+	.dw 0xa940, 0xc889,	0xa97f, 0xc889,		0x21, 0
+	.dw 0xa9c0, 0xc889,	0xa9ff, 0xc889,		0x21, 0
+	.dw 0xaa40, 0xc889,	0xaa7f, 0xc889,		0x21, 0
+	.dw 0xaac0, 0xc889,	0xaaff, 0xc889,		0x21, 0
+	.dw 0xab40, 0xc889,	0xab7f, 0xc889,		0x21, 0
+	.dw 0xabc0, 0xc889,	0xabff, 0xc889,		0x21, 0
+	.dw 0xac40, 0xc889,	0xac7f, 0xc889,		0x21, 0
+	.dw 0xacc0, 0xc889,	0xacff, 0xc889,		0x21, 0
+	.dw 0xad40, 0xc889,	0xad7f, 0xc889,		0x21, 0
+	.dw 0xadc0, 0xc889,	0xadff, 0xc889,		0x21, 0
+	.dw 0xae40, 0xc889,	0xae7f, 0xc889,		0x21, 0
+	.dw 0xaec0, 0xc889,	0xaeff, 0xc889,		0x21, 0
+	.dw 0xaf40, 0xc889,	0xaf7f, 0xc889,		0x21, 0
+	.dw 0xafc0, 0xc889,	0xafff, 0xc889,		0x21, 0
+	.dw 0xb040, 0xc889,	0xb07f, 0xc889,		0x21, 0
+	.dw 0xb0c0, 0xc889,	0xb0ff, 0xc889,		0x21, 0
+	.dw 0xb140, 0xc889,	0xb17f, 0xc889,		0x21, 0
+	.dw 0xb1c0, 0xc889,	0xb1ff, 0xc889,		0x21, 0
+	.dw 0xb240, 0xc889,	0xb27f, 0xc889,		0x21, 0
+	.dw 0xb2c0, 0xc889,	0xb2ff, 0xc889,		0x21, 0
+	.dw 0xb340, 0xc889,	0xb37f, 0xc889,		0x21, 0
+	.dw 0xb3c0, 0xc889,	0xb3ff, 0xc889,		0x21, 0
+	.dw 0xb440, 0xc889,	0xb47f, 0xc889,		0x21, 0
+	.dw 0xb4c0, 0xc889,	0xb4ff, 0xc889,		0x21, 0
+	.dw 0xb540, 0xc889,	0xb57f, 0xc889,		0x21, 0
+	.dw 0xb5c0, 0xc889,	0xb5ff, 0xc889,		0x21, 0
+	.dw 0xb640, 0xc889,	0xb67f, 0xc889,		0x21, 0
+	.dw 0xb6c0, 0xc889,	0xb6ff, 0xc889,		0x21, 0
+	.dw 0xb740, 0xc889,	0xb77f, 0xc889,		0x21, 0
+	.dw 0xb7c0, 0xc889,	0xb7ff, 0xc889,		0x21, 0
+	.dw 0xb840, 0xc889,	0xb87f, 0xc889,		0x21, 0
+	.dw 0xb8c0, 0xc889,	0xb8ff, 0xc889,		0x21, 0
+	.dw 0xb940, 0xc889,	0xb97f, 0xc889,		0x21, 0
+	.dw 0xb9c0, 0xc889,	0xdfff, 0xc889,		0x21, 0
+	.dw 0xe040, 0xc889,	0xe07f, 0xc889,		0x21, 0
+	.dw 0xe0c0, 0xc889,	0xe0ff, 0xc889,		0x21, 0
+	.dw 0xe140, 0xc889,	0xe17f, 0xc889,		0x21, 0
+	.dw 0xe1c0, 0xc889,	0xe1ff, 0xc889,		0x21, 0
+	.dw 0xe240, 0xc889,	0xe27f, 0xc889,		0x21, 0
+	.dw 0xe2c0, 0xc889,	0xe2ff, 0xc889,		0x21, 0
+	.dw 0xe340, 0xc889,	0xe37f, 0xc889,		0x21, 0
+	.dw 0xe3c0, 0xc889,	0xe3ff, 0xc889,		0x21, 0
+	.dw 0xe440, 0xc889,	0xe47f, 0xc889,		0x21, 0
+	.dw 0xe4c0, 0xc889,	0xe4ff, 0xc889,		0x21, 0
+	.dw 0xe540, 0xc889,	0xe57f, 0xc889,		0x21, 0
+	.dw 0xe5c0, 0xc889,	0xe5ff, 0xc889,		0x21, 0
+	.dw 0xe640, 0xc889,	0xe67f, 0xc889,		0x21, 0
+	.dw 0xe6c0, 0xc889,	0xe6ff, 0xc889,		0x21, 0
+	.dw 0xe740, 0xc889,	0xe77f, 0xc889,		0x21, 0
+	.dw 0xe7c0, 0xc889,	0xe7ff, 0xc889,		0x21, 0
+	.dw 0xe840, 0xc889,	0xe87f, 0xc889,		0x21, 0
+	.dw 0xe8c0, 0xc889,	0xe8ff, 0xc889,		0x21, 0
+	.dw 0xe940, 0xc889,	0xe97f, 0xc889,		0x21, 0
+	.dw 0xe9c0, 0xc889,	0xe9ff, 0xc889,		0x21, 0
+	.dw 0xea40, 0xc889,	0xea7f, 0xc889,		0x21, 0
+	.dw 0xeac0, 0xc889,	0xeaff, 0xc889,		0x21, 0
+	.dw 0xeb40, 0xc889,	0xeb7f, 0xc889,		0x21, 0
+	.dw 0xebc0, 0xc889,	0xebff, 0xc889,		0x21, 0
+	.dw 0xec40, 0xc889,	0xec7f, 0xc889,		0x21, 0
+	.dw 0xecc0, 0xc889,	0xecff, 0xc889,		0x21, 0
+	.dw 0xed40, 0xc889,	0xed7f, 0xc889,		0x21, 0
+	.dw 0xedc0, 0xc889,	0xedff, 0xc889,		0x21, 0
+	.dw 0xee40, 0xc889,	0xee7f, 0xc889,		0x21, 0
+	.dw 0xeec0, 0xc889,	0xeeff, 0xc889,		0x21, 0
+	.dw 0xef40, 0xc889,	0xef7f, 0xc889,		0x21, 0
+	.dw 0xefc0, 0xc889,	0xefff, 0xc889,		0x21, 0
+	.dw 0xf040, 0xc889,	0xf07f, 0xc889,		0x21, 0
+	.dw 0xf0c0, 0xc889,	0xf0ff, 0xc889,		0x21, 0
+	.dw 0xf140, 0xc889,	0xf17f, 0xc889,		0x21, 0
+	.dw 0xf1c0, 0xc889,	0xf1ff, 0xc889,		0x21, 0
+	.dw 0xf240, 0xc889,	0xf27f, 0xc889,		0x21, 0
+	.dw 0xf2c0, 0xc889,	0xf2ff, 0xc889,		0x21, 0
+	.dw 0xf340, 0xc889,	0xf37f, 0xc889,		0x21, 0
+	.dw 0xf3c0, 0xc889,	0xf3ff, 0xc889,		0x21, 0
+	.dw 0xf440, 0xc889,	0xf47f, 0xc889,		0x21, 0
+	.dw 0xf4c0, 0xc889,	0xf4ff, 0xc889,		0x21, 0
+	.dw 0xf540, 0xc889,	0xf57f, 0xc889,		0x21, 0
+	.dw 0xf5c0, 0xc889,	0xf5ff, 0xc889,		0x21, 0
+	.dw 0xf640, 0xc889,	0xf67f, 0xc889,		0x21, 0
+	.dw 0xf6c0, 0xc889,	0xf6ff, 0xc889,		0x21, 0
+	.dw 0xf740, 0xc889,	0xf77f, 0xc889,		0x21, 0
+	.dw 0xf7c0, 0xc889,	0xf7ff, 0xc889,		0x21, 0
+	.dw 0xf840, 0xc889,	0xf87f, 0xc889,		0x21, 0
+	.dw 0xf8c0, 0xc889,	0xf8ff, 0xc889,		0x21, 0
+	.dw 0xf940, 0xc889,	0xf97f, 0xc889,		0x21, 0
+	.dw 0xf9c0, 0xc889,	0x1fff, 0xc88a,		0x21, 0
+	.dw 0x2040, 0xc88a,	0x207f, 0xc88a,		0x21, 0
+	.dw 0x20c0, 0xc88a,	0x20ff, 0xc88a,		0x21, 0
+	.dw 0x2140, 0xc88a,	0x217f, 0xc88a,		0x21, 0
+	.dw 0x21c0, 0xc88a,	0x21ff, 0xc88a,		0x21, 0
+	.dw 0x2240, 0xc88a,	0x227f, 0xc88a,		0x21, 0
+	.dw 0x22c0, 0xc88a,	0x22ff, 0xc88a,		0x21, 0
+	.dw 0x2340, 0xc88a,	0x237f, 0xc88a,		0x21, 0
+	.dw 0x23c0, 0xc88a,	0x23ff, 0xc88a,		0x21, 0
+	.dw 0x2440, 0xc88a,	0x247f, 0xc88a,		0x21, 0
+	.dw 0x24c0, 0xc88a,	0x24ff, 0xc88a,		0x21, 0
+	.dw 0x2540, 0xc88a,	0x257f, 0xc88a,		0x21, 0
+	.dw 0x25c0, 0xc88a,	0x25ff, 0xc88a,		0x21, 0
+	.dw 0x2640, 0xc88a,	0x267f, 0xc88a,		0x21, 0
+	.dw 0x26c0, 0xc88a,	0x26ff, 0xc88a,		0x21, 0
+	.dw 0x2740, 0xc88a,	0x277f, 0xc88a,		0x21, 0
+	.dw 0x27c0, 0xc88a,	0x27ff, 0xc88a,		0x21, 0
+	.dw 0x2840, 0xc88a,	0x287f, 0xc88a,		0x21, 0
+	.dw 0x28c0, 0xc88a,	0x28ff, 0xc88a,		0x21, 0
+	.dw 0x2940, 0xc88a,	0x297f, 0xc88a,		0x21, 0
+	.dw 0x29c0, 0xc88a,	0x29ff, 0xc88a,		0x21, 0
+	.dw 0x2a40, 0xc88a,	0x2a7f, 0xc88a,		0x21, 0
+	.dw 0x2ac0, 0xc88a,	0x2aff, 0xc88a,		0x21, 0
+	.dw 0x2b40, 0xc88a,	0x2b7f, 0xc88a,		0x21, 0
+	.dw 0x2bc0, 0xc88a,	0x2bff, 0xc88a,		0x21, 0
+	.dw 0x2c40, 0xc88a,	0x2c7f, 0xc88a,		0x21, 0
+	.dw 0x2cc0, 0xc88a,	0x2cff, 0xc88a,		0x21, 0
+	.dw 0x2d40, 0xc88a,	0x2d7f, 0xc88a,		0x21, 0
+	.dw 0x2dc0, 0xc88a,	0x2dff, 0xc88a,		0x21, 0
+	.dw 0x2e40, 0xc88a,	0x2e7f, 0xc88a,		0x21, 0
+	.dw 0x2ec0, 0xc88a,	0x2eff, 0xc88a,		0x21, 0
+	.dw 0x2f40, 0xc88a,	0x2f7f, 0xc88a,		0x21, 0
+	.dw 0x2fc0, 0xc88a,	0x2fff, 0xc88a,		0x21, 0
+	.dw 0x3040, 0xc88a,	0x307f, 0xc88a,		0x21, 0
+	.dw 0x30c0, 0xc88a,	0x30ff, 0xc88a,		0x21, 0
+	.dw 0x3140, 0xc88a,	0x317f, 0xc88a,		0x21, 0
+	.dw 0x31c0, 0xc88a,	0x31ff, 0xc88a,		0x21, 0
+	.dw 0x3240, 0xc88a,	0x327f, 0xc88a,		0x21, 0
+	.dw 0x32c0, 0xc88a,	0x32ff, 0xc88a,		0x21, 0
+	.dw 0x3340, 0xc88a,	0x337f, 0xc88a,		0x21, 0
+	.dw 0x33c0, 0xc88a,	0x33ff, 0xc88a,		0x21, 0
+	.dw 0x3440, 0xc88a,	0x347f, 0xc88a,		0x21, 0
+	.dw 0x34c0, 0xc88a,	0x34ff, 0xc88a,		0x21, 0
+	.dw 0x3540, 0xc88a,	0x357f, 0xc88a,		0x21, 0
+	.dw 0x35c0, 0xc88a,	0x35ff, 0xc88a,		0x21, 0
+	.dw 0x3640, 0xc88a,	0x367f, 0xc88a,		0x21, 0
+	.dw 0x36c0, 0xc88a,	0x36ff, 0xc88a,		0x21, 0
+	.dw 0x3740, 0xc88a,	0x377f, 0xc88a,		0x21, 0
+	.dw 0x37c0, 0xc88a,	0x37ff, 0xc88a,		0x21, 0
+	.dw 0x3840, 0xc88a,	0x387f, 0xc88a,		0x21, 0
+	.dw 0x38c0, 0xc88a,	0x38ff, 0xc88a,		0x21, 0
+	.dw 0x3940, 0xc88a,	0x397f, 0xc88a,		0x21, 0
+	.dw 0x39c0, 0xc88a,	0x5fff, 0xc88a,		0x21, 0
+	.dw 0x6040, 0xc88a,	0x607f, 0xc88a,		0x21, 0
+	.dw 0x60c0, 0xc88a,	0x60ff, 0xc88a,		0x21, 0
+	.dw 0x6140, 0xc88a,	0x617f, 0xc88a,		0x21, 0
+	.dw 0x61c0, 0xc88a,	0x61ff, 0xc88a,		0x21, 0
+	.dw 0x6240, 0xc88a,	0x627f, 0xc88a,		0x21, 0
+	.dw 0x62c0, 0xc88a,	0x62ff, 0xc88a,		0x21, 0
+	.dw 0x6340, 0xc88a,	0x637f, 0xc88a,		0x21, 0
+	.dw 0x63c0, 0xc88a,	0x63ff, 0xc88a,		0x21, 0
+	.dw 0x6440, 0xc88a,	0x647f, 0xc88a,		0x21, 0
+	.dw 0x64c0, 0xc88a,	0x64ff, 0xc88a,		0x21, 0
+	.dw 0x6540, 0xc88a,	0x657f, 0xc88a,		0x21, 0
+	.dw 0x65c0, 0xc88a,	0x65ff, 0xc88a,		0x21, 0
+	.dw 0x6640, 0xc88a,	0x667f, 0xc88a,		0x21, 0
+	.dw 0x66c0, 0xc88a,	0x66ff, 0xc88a,		0x21, 0
+	.dw 0x6740, 0xc88a,	0x677f, 0xc88a,		0x21, 0
+	.dw 0x67c0, 0xc88a,	0x67ff, 0xc88a,		0x21, 0
+	.dw 0x6840, 0xc88a,	0x687f, 0xc88a,		0x21, 0
+	.dw 0x68c0, 0xc88a,	0x68ff, 0xc88a,		0x21, 0
+	.dw 0x6940, 0xc88a,	0x697f, 0xc88a,		0x21, 0
+	.dw 0x69c0, 0xc88a,	0x69ff, 0xc88a,		0x21, 0
+	.dw 0x6a40, 0xc88a,	0x6a7f, 0xc88a,		0x21, 0
+	.dw 0x6ac0, 0xc88a,	0x6aff, 0xc88a,		0x21, 0
+	.dw 0x6b40, 0xc88a,	0x6b7f, 0xc88a,		0x21, 0
+	.dw 0x6bc0, 0xc88a,	0x6bff, 0xc88a,		0x21, 0
+	.dw 0x6c40, 0xc88a,	0x6c7f, 0xc88a,		0x21, 0
+	.dw 0x6cc0, 0xc88a,	0x6cff, 0xc88a,		0x21, 0
+	.dw 0x6d40, 0xc88a,	0x6d7f, 0xc88a,		0x21, 0
+	.dw 0x6dc0, 0xc88a,	0x6dff, 0xc88a,		0x21, 0
+	.dw 0x6e40, 0xc88a,	0x6e7f, 0xc88a,		0x21, 0
+	.dw 0x6ec0, 0xc88a,	0x6eff, 0xc88a,		0x21, 0
+	.dw 0x6f40, 0xc88a,	0x6f7f, 0xc88a,		0x21, 0
+	.dw 0x6fc0, 0xc88a,	0x6fff, 0xc88a,		0x21, 0
+	.dw 0x7040, 0xc88a,	0x707f, 0xc88a,		0x21, 0
+	.dw 0x70c0, 0xc88a,	0x70ff, 0xc88a,		0x21, 0
+	.dw 0x7140, 0xc88a,	0x717f, 0xc88a,		0x21, 0
+	.dw 0x71c0, 0xc88a,	0x71ff, 0xc88a,		0x21, 0
+	.dw 0x7240, 0xc88a,	0x727f, 0xc88a,		0x21, 0
+	.dw 0x72c0, 0xc88a,	0x72ff, 0xc88a,		0x21, 0
+	.dw 0x7340, 0xc88a,	0x737f, 0xc88a,		0x21, 0
+	.dw 0x73c0, 0xc88a,	0x73ff, 0xc88a,		0x21, 0
+	.dw 0x7440, 0xc88a,	0x747f, 0xc88a,		0x21, 0
+	.dw 0x74c0, 0xc88a,	0x74ff, 0xc88a,		0x21, 0
+	.dw 0x7540, 0xc88a,	0x757f, 0xc88a,		0x21, 0
+	.dw 0x75c0, 0xc88a,	0x75ff, 0xc88a,		0x21, 0
+	.dw 0x7640, 0xc88a,	0x767f, 0xc88a,		0x21, 0
+	.dw 0x76c0, 0xc88a,	0x76ff, 0xc88a,		0x21, 0
+	.dw 0x7740, 0xc88a,	0x777f, 0xc88a,		0x21, 0
+	.dw 0x77c0, 0xc88a,	0x77ff, 0xc88a,		0x21, 0
+	.dw 0x7840, 0xc88a,	0x787f, 0xc88a,		0x21, 0
+	.dw 0x78c0, 0xc88a,	0x78ff, 0xc88a,		0x21, 0
+	.dw 0x7940, 0xc88a,	0x797f, 0xc88a,		0x21, 0
+	.dw 0x79c0, 0xc88a,	0x9fff, 0xc88a,		0x21, 0
+	.dw 0xa040, 0xc88a,	0xa07f, 0xc88a,		0x21, 0
+	.dw 0xa0c0, 0xc88a,	0xa0ff, 0xc88a,		0x21, 0
+	.dw 0xa140, 0xc88a,	0xa17f, 0xc88a,		0x21, 0
+	.dw 0xa1c0, 0xc88a,	0xa1ff, 0xc88a,		0x21, 0
+	.dw 0xa240, 0xc88a,	0xa27f, 0xc88a,		0x21, 0
+	.dw 0xa2c0, 0xc88a,	0xa2ff, 0xc88a,		0x21, 0
+	.dw 0xa340, 0xc88a,	0xa37f, 0xc88a,		0x21, 0
+	.dw 0xa3c0, 0xc88a,	0xa3ff, 0xc88a,		0x21, 0
+	.dw 0xa440, 0xc88a,	0xa47f, 0xc88a,		0x21, 0
+	.dw 0xa4c0, 0xc88a,	0xa4ff, 0xc88a,		0x21, 0
+	.dw 0xa540, 0xc88a,	0xa57f, 0xc88a,		0x21, 0
+	.dw 0xa5c0, 0xc88a,	0xa5ff, 0xc88a,		0x21, 0
+	.dw 0xa640, 0xc88a,	0xa67f, 0xc88a,		0x21, 0
+	.dw 0xa6c0, 0xc88a,	0xa6ff, 0xc88a,		0x21, 0
+	.dw 0xa740, 0xc88a,	0xa77f, 0xc88a,		0x21, 0
+	.dw 0xa7c0, 0xc88a,	0xa7ff, 0xc88a,		0x21, 0
+	.dw 0xa840, 0xc88a,	0xa87f, 0xc88a,		0x21, 0
+	.dw 0xa8c0, 0xc88a,	0xa8ff, 0xc88a,		0x21, 0
+	.dw 0xa940, 0xc88a,	0xa97f, 0xc88a,		0x21, 0
+	.dw 0xa9c0, 0xc88a,	0xa9ff, 0xc88a,		0x21, 0
+	.dw 0xaa40, 0xc88a,	0xaa7f, 0xc88a,		0x21, 0
+	.dw 0xaac0, 0xc88a,	0xaaff, 0xc88a,		0x21, 0
+	.dw 0xab40, 0xc88a,	0xab7f, 0xc88a,		0x21, 0
+	.dw 0xabc0, 0xc88a,	0xabff, 0xc88a,		0x21, 0
+	.dw 0xac40, 0xc88a,	0xac7f, 0xc88a,		0x21, 0
+	.dw 0xacc0, 0xc88a,	0xacff, 0xc88a,		0x21, 0
+	.dw 0xad40, 0xc88a,	0xad7f, 0xc88a,		0x21, 0
+	.dw 0xadc0, 0xc88a,	0xadff, 0xc88a,		0x21, 0
+	.dw 0xae40, 0xc88a,	0xae7f, 0xc88a,		0x21, 0
+	.dw 0xaec0, 0xc88a,	0xaeff, 0xc88a,		0x21, 0
+	.dw 0xaf40, 0xc88a,	0xaf7f, 0xc88a,		0x21, 0
+	.dw 0xafc0, 0xc88a,	0xafff, 0xc88a,		0x21, 0
+	.dw 0xb040, 0xc88a,	0xb07f, 0xc88a,		0x21, 0
+	.dw 0xb0c0, 0xc88a,	0xb0ff, 0xc88a,		0x21, 0
+	.dw 0xb140, 0xc88a,	0xb17f, 0xc88a,		0x21, 0
+	.dw 0xb1c0, 0xc88a,	0xb1ff, 0xc88a,		0x21, 0
+	.dw 0xb240, 0xc88a,	0xb27f, 0xc88a,		0x21, 0
+	.dw 0xb2c0, 0xc88a,	0xb2ff, 0xc88a,		0x21, 0
+	.dw 0xb340, 0xc88a,	0xb37f, 0xc88a,		0x21, 0
+	.dw 0xb3c0, 0xc88a,	0xb3ff, 0xc88a,		0x21, 0
+	.dw 0xb440, 0xc88a,	0xb47f, 0xc88a,		0x21, 0
+	.dw 0xb4c0, 0xc88a,	0xb4ff, 0xc88a,		0x21, 0
+	.dw 0xb540, 0xc88a,	0xb57f, 0xc88a,		0x21, 0
+	.dw 0xb5c0, 0xc88a,	0xb5ff, 0xc88a,		0x21, 0
+	.dw 0xb640, 0xc88a,	0xb67f, 0xc88a,		0x21, 0
+	.dw 0xb6c0, 0xc88a,	0xb6ff, 0xc88a,		0x21, 0
+	.dw 0xb740, 0xc88a,	0xb77f, 0xc88a,		0x21, 0
+	.dw 0xb7c0, 0xc88a,	0xb7ff, 0xc88a,		0x21, 0
+	.dw 0xb840, 0xc88a,	0xb87f, 0xc88a,		0x21, 0
+	.dw 0xb8c0, 0xc88a,	0xb8ff, 0xc88a,		0x21, 0
+	.dw 0xb940, 0xc88a,	0xb97f, 0xc88a,		0x21, 0
+	.dw 0xb9c0, 0xc88a,	0xdfff, 0xc88a,		0x21, 0
+	.dw 0xe040, 0xc88a,	0xe07f, 0xc88a,		0x21, 0
+	.dw 0xe0c0, 0xc88a,	0xe0ff, 0xc88a,		0x21, 0
+	.dw 0xe140, 0xc88a,	0xe17f, 0xc88a,		0x21, 0
+	.dw 0xe1c0, 0xc88a,	0xe1ff, 0xc88a,		0x21, 0
+	.dw 0xe240, 0xc88a,	0xe27f, 0xc88a,		0x21, 0
+	.dw 0xe2c0, 0xc88a,	0xe2ff, 0xc88a,		0x21, 0
+	.dw 0xe340, 0xc88a,	0xe37f, 0xc88a,		0x21, 0
+	.dw 0xe3c0, 0xc88a,	0xe3ff, 0xc88a,		0x21, 0
+	.dw 0xe440, 0xc88a,	0xe47f, 0xc88a,		0x21, 0
+	.dw 0xe4c0, 0xc88a,	0xe4ff, 0xc88a,		0x21, 0
+	.dw 0xe540, 0xc88a,	0xe57f, 0xc88a,		0x21, 0
+	.dw 0xe5c0, 0xc88a,	0xe5ff, 0xc88a,		0x21, 0
+	.dw 0xe640, 0xc88a,	0xe67f, 0xc88a,		0x21, 0
+	.dw 0xe6c0, 0xc88a,	0xe6ff, 0xc88a,		0x21, 0
+	.dw 0xe740, 0xc88a,	0xe77f, 0xc88a,		0x21, 0
+	.dw 0xe7c0, 0xc88a,	0xe7ff, 0xc88a,		0x21, 0
+	.dw 0xe840, 0xc88a,	0xe87f, 0xc88a,		0x21, 0
+	.dw 0xe8c0, 0xc88a,	0xe8ff, 0xc88a,		0x21, 0
+	.dw 0xe940, 0xc88a,	0xe97f, 0xc88a,		0x21, 0
+	.dw 0xe9c0, 0xc88a,	0xe9ff, 0xc88a,		0x21, 0
+	.dw 0xea40, 0xc88a,	0xea7f, 0xc88a,		0x21, 0
+	.dw 0xeac0, 0xc88a,	0xeaff, 0xc88a,		0x21, 0
+	.dw 0xeb40, 0xc88a,	0xeb7f, 0xc88a,		0x21, 0
+	.dw 0xebc0, 0xc88a,	0xebff, 0xc88a,		0x21, 0
+	.dw 0xec40, 0xc88a,	0xec7f, 0xc88a,		0x21, 0
+	.dw 0xecc0, 0xc88a,	0xecff, 0xc88a,		0x21, 0
+	.dw 0xed40, 0xc88a,	0xed7f, 0xc88a,		0x21, 0
+	.dw 0xedc0, 0xc88a,	0xedff, 0xc88a,		0x21, 0
+	.dw 0xee40, 0xc88a,	0xee7f, 0xc88a,		0x21, 0
+	.dw 0xeec0, 0xc88a,	0xeeff, 0xc88a,		0x21, 0
+	.dw 0xef40, 0xc88a,	0xef7f, 0xc88a,		0x21, 0
+	.dw 0xefc0, 0xc88a,	0xefff, 0xc88a,		0x21, 0
+	.dw 0xf040, 0xc88a,	0xf07f, 0xc88a,		0x21, 0
+	.dw 0xf0c0, 0xc88a,	0xf0ff, 0xc88a,		0x21, 0
+	.dw 0xf140, 0xc88a,	0xf17f, 0xc88a,		0x21, 0
+	.dw 0xf1c0, 0xc88a,	0xf1ff, 0xc88a,		0x21, 0
+	.dw 0xf240, 0xc88a,	0xf27f, 0xc88a,		0x21, 0
+	.dw 0xf2c0, 0xc88a,	0xf2ff, 0xc88a,		0x21, 0
+	.dw 0xf340, 0xc88a,	0xf37f, 0xc88a,		0x21, 0
+	.dw 0xf3c0, 0xc88a,	0xf3ff, 0xc88a,		0x21, 0
+	.dw 0xf440, 0xc88a,	0xf47f, 0xc88a,		0x21, 0
+	.dw 0xf4c0, 0xc88a,	0xf4ff, 0xc88a,		0x21, 0
+	.dw 0xf540, 0xc88a,	0xf57f, 0xc88a,		0x21, 0
+	.dw 0xf5c0, 0xc88a,	0xf5ff, 0xc88a,		0x21, 0
+	.dw 0xf640, 0xc88a,	0xf67f, 0xc88a,		0x21, 0
+	.dw 0xf6c0, 0xc88a,	0xf6ff, 0xc88a,		0x21, 0
+	.dw 0xf740, 0xc88a,	0xf77f, 0xc88a,		0x21, 0
+	.dw 0xf7c0, 0xc88a,	0xf7ff, 0xc88a,		0x21, 0
+	.dw 0xf840, 0xc88a,	0xf87f, 0xc88a,		0x21, 0
+	.dw 0xf8c0, 0xc88a,	0xf8ff, 0xc88a,		0x21, 0
+	.dw 0xf940, 0xc88a,	0xf97f, 0xc88a,		0x21, 0
+	.dw 0xf9c0, 0xc88a,	0x1fff, 0xc88b,		0x21, 0
+	.dw 0x2040, 0xc88b,	0x207f, 0xc88b,		0x21, 0
+	.dw 0x20c0, 0xc88b,	0x20ff, 0xc88b,		0x21, 0
+	.dw 0x2140, 0xc88b,	0x217f, 0xc88b,		0x21, 0
+	.dw 0x21c0, 0xc88b,	0x21ff, 0xc88b,		0x21, 0
+	.dw 0x2240, 0xc88b,	0x227f, 0xc88b,		0x21, 0
+	.dw 0x22c0, 0xc88b,	0x22ff, 0xc88b,		0x21, 0
+	.dw 0x2340, 0xc88b,	0x237f, 0xc88b,		0x21, 0
+	.dw 0x23c0, 0xc88b,	0x23ff, 0xc88b,		0x21, 0
+	.dw 0x2440, 0xc88b,	0x247f, 0xc88b,		0x21, 0
+	.dw 0x24c0, 0xc88b,	0x24ff, 0xc88b,		0x21, 0
+	.dw 0x2540, 0xc88b,	0x257f, 0xc88b,		0x21, 0
+	.dw 0x25c0, 0xc88b,	0x25ff, 0xc88b,		0x21, 0
+	.dw 0x2640, 0xc88b,	0x267f, 0xc88b,		0x21, 0
+	.dw 0x26c0, 0xc88b,	0x26ff, 0xc88b,		0x21, 0
+	.dw 0x2740, 0xc88b,	0x277f, 0xc88b,		0x21, 0
+	.dw 0x27c0, 0xc88b,	0x27ff, 0xc88b,		0x21, 0
+	.dw 0x2840, 0xc88b,	0x287f, 0xc88b,		0x21, 0
+	.dw 0x28c0, 0xc88b,	0x28ff, 0xc88b,		0x21, 0
+	.dw 0x2940, 0xc88b,	0x297f, 0xc88b,		0x21, 0
+	.dw 0x29c0, 0xc88b,	0x29ff, 0xc88b,		0x21, 0
+	.dw 0x2a40, 0xc88b,	0x2a7f, 0xc88b,		0x21, 0
+	.dw 0x2ac0, 0xc88b,	0x2aff, 0xc88b,		0x21, 0
+	.dw 0x2b40, 0xc88b,	0x2b7f, 0xc88b,		0x21, 0
+	.dw 0x2bc0, 0xc88b,	0x2bff, 0xc88b,		0x21, 0
+	.dw 0x2c40, 0xc88b,	0x2c7f, 0xc88b,		0x21, 0
+	.dw 0x2cc0, 0xc88b,	0x2cff, 0xc88b,		0x21, 0
+	.dw 0x2d40, 0xc88b,	0x2d7f, 0xc88b,		0x21, 0
+	.dw 0x2dc0, 0xc88b,	0x2dff, 0xc88b,		0x21, 0
+	.dw 0x2e40, 0xc88b,	0x2e7f, 0xc88b,		0x21, 0
+	.dw 0x2ec0, 0xc88b,	0x2eff, 0xc88b,		0x21, 0
+	.dw 0x2f40, 0xc88b,	0x2f7f, 0xc88b,		0x21, 0
+	.dw 0x2fc0, 0xc88b,	0x2fff, 0xc88b,		0x21, 0
+	.dw 0x3040, 0xc88b,	0x307f, 0xc88b,		0x21, 0
+	.dw 0x30c0, 0xc88b,	0x30ff, 0xc88b,		0x21, 0
+	.dw 0x3140, 0xc88b,	0x317f, 0xc88b,		0x21, 0
+	.dw 0x31c0, 0xc88b,	0x31ff, 0xc88b,		0x21, 0
+	.dw 0x3240, 0xc88b,	0x327f, 0xc88b,		0x21, 0
+	.dw 0x32c0, 0xc88b,	0x32ff, 0xc88b,		0x21, 0
+	.dw 0x3340, 0xc88b,	0x337f, 0xc88b,		0x21, 0
+	.dw 0x33c0, 0xc88b,	0x33ff, 0xc88b,		0x21, 0
+	.dw 0x3440, 0xc88b,	0x347f, 0xc88b,		0x21, 0
+	.dw 0x34c0, 0xc88b,	0x34ff, 0xc88b,		0x21, 0
+	.dw 0x3540, 0xc88b,	0x357f, 0xc88b,		0x21, 0
+	.dw 0x35c0, 0xc88b,	0x35ff, 0xc88b,		0x21, 0
+	.dw 0x3640, 0xc88b,	0x367f, 0xc88b,		0x21, 0
+	.dw 0x36c0, 0xc88b,	0x36ff, 0xc88b,		0x21, 0
+	.dw 0x3740, 0xc88b,	0x377f, 0xc88b,		0x21, 0
+	.dw 0x37c0, 0xc88b,	0x37ff, 0xc88b,		0x21, 0
+	.dw 0x3840, 0xc88b,	0x387f, 0xc88b,		0x21, 0
+	.dw 0x38c0, 0xc88b,	0x38ff, 0xc88b,		0x21, 0
+	.dw 0x3940, 0xc88b,	0x397f, 0xc88b,		0x21, 0
+	.dw 0x39c0, 0xc88b,	0xffff, 0xc88b,		0x21, 0
+	.dw 0x0040, 0xc88c,	0x007f, 0xc88c,		0x21, 0
+	.dw 0x00c0, 0xc88c,	0x00ff, 0xc88c,		0x21, 0
+	.dw 0x0140, 0xc88c,	0x017f, 0xc88c,		0x21, 0
+	.dw 0x01c0, 0xc88c,	0x01ff, 0xc88c,		0x21, 0
+	.dw 0x0240, 0xc88c,	0x027f, 0xc88c,		0x21, 0
+	.dw 0x02c0, 0xc88c,	0x02ff, 0xc88c,		0x21, 0
+	.dw 0x0340, 0xc88c,	0x037f, 0xc88c,		0x21, 0
+	.dw 0x03c0, 0xc88c,	0x03ff, 0xc88c,		0x21, 0
+	.dw 0x0440, 0xc88c,	0x047f, 0xc88c,		0x21, 0
+	.dw 0x04c0, 0xc88c,	0x04ff, 0xc88c,		0x21, 0
+	.dw 0x0540, 0xc88c,	0x057f, 0xc88c,		0x21, 0
+	.dw 0x05c0, 0xc88c,	0x05ff, 0xc88c,		0x21, 0
+	.dw 0x0640, 0xc88c,	0x067f, 0xc88c,		0x21, 0
+	.dw 0x06c0, 0xc88c,	0x06ff, 0xc88c,		0x21, 0
+	.dw 0x0740, 0xc88c,	0x077f, 0xc88c,		0x21, 0
+	.dw 0x07c0, 0xc88c,	0x07ff, 0xc88c,		0x21, 0
+	.dw 0x0840, 0xc88c,	0x087f, 0xc88c,		0x21, 0
+	.dw 0x08c0, 0xc88c,	0x08ff, 0xc88c,		0x21, 0
+	.dw 0x0940, 0xc88c,	0x097f, 0xc88c,		0x21, 0
+	.dw 0x09c0, 0xc88c,	0x09ff, 0xc88c,		0x21, 0
+	.dw 0x0a40, 0xc88c,	0x0a7f, 0xc88c,		0x21, 0
+	.dw 0x0ac0, 0xc88c,	0x0aff, 0xc88c,		0x21, 0
+	.dw 0x0b40, 0xc88c,	0x0b7f, 0xc88c,		0x21, 0
+	.dw 0x0bc0, 0xc88c,	0x0bff, 0xc88c,		0x21, 0
+	.dw 0x0c40, 0xc88c,	0x0c7f, 0xc88c,		0x21, 0
+	.dw 0x0cc0, 0xc88c,	0x0cff, 0xc88c,		0x21, 0
+	.dw 0x0d40, 0xc88c,	0x0d7f, 0xc88c,		0x21, 0
+	.dw 0x0dc0, 0xc88c,	0x0dff, 0xc88c,		0x21, 0
+	.dw 0x0e40, 0xc88c,	0x0e7f, 0xc88c,		0x21, 0
+	.dw 0x0ec0, 0xc88c,	0x0eff, 0xc88c,		0x21, 0
+	.dw 0x0f40, 0xc88c,	0x0f7f, 0xc88c,		0x21, 0
+	.dw 0x0fc0, 0xc88c,	0x0fff, 0xc88c,		0x21, 0
+	.dw 0x1040, 0xc88c,	0x107f, 0xc88c,		0x21, 0
+	.dw 0x10c0, 0xc88c,	0x10ff, 0xc88c,		0x21, 0
+	.dw 0x1140, 0xc88c,	0x117f, 0xc88c,		0x21, 0
+	.dw 0x11c0, 0xc88c,	0x11ff, 0xc88c,		0x21, 0
+	.dw 0x1240, 0xc88c,	0x127f, 0xc88c,		0x21, 0
+	.dw 0x12c0, 0xc88c,	0x12ff, 0xc88c,		0x21, 0
+	.dw 0x1340, 0xc88c,	0x137f, 0xc88c,		0x21, 0
+	.dw 0x13c0, 0xc88c,	0x13ff, 0xc88c,		0x21, 0
+	.dw 0x1440, 0xc88c,	0x147f, 0xc88c,		0x21, 0
+	.dw 0x14c0, 0xc88c,	0x14ff, 0xc88c,		0x21, 0
+	.dw 0x1540, 0xc88c,	0x157f, 0xc88c,		0x21, 0
+	.dw 0x15c0, 0xc88c,	0x15ff, 0xc88c,		0x21, 0
+	.dw 0x1640, 0xc88c,	0x167f, 0xc88c,		0x21, 0
+	.dw 0x16c0, 0xc88c,	0x16ff, 0xc88c,		0x21, 0
+	.dw 0x1740, 0xc88c,	0x177f, 0xc88c,		0x21, 0
+	.dw 0x17c0, 0xc88c,	0x17ff, 0xc88c,		0x21, 0
+	.dw 0x1840, 0xc88c,	0x187f, 0xc88c,		0x21, 0
+	.dw 0x18c0, 0xc88c,	0x18ff, 0xc88c,		0x21, 0
+	.dw 0x1940, 0xc88c,	0x197f, 0xc88c,		0x21, 0
+	.dw 0x19c0, 0xc88c,	0x1fff, 0xc88c,		0x21, 0
+	.dw 0x2040, 0xc88c,	0x207f, 0xc88c,		0x21, 0
+	.dw 0x20c0, 0xc88c,	0x20ff, 0xc88c,		0x21, 0
+	.dw 0x2140, 0xc88c,	0x217f, 0xc88c,		0x21, 0
+	.dw 0x21c0, 0xc88c,	0x21ff, 0xc88c,		0x21, 0
+	.dw 0x2240, 0xc88c,	0x227f, 0xc88c,		0x21, 0
+	.dw 0x22c0, 0xc88c,	0x22ff, 0xc88c,		0x21, 0
+	.dw 0x2340, 0xc88c,	0x237f, 0xc88c,		0x21, 0
+	.dw 0x23c0, 0xc88c,	0x23ff, 0xc88c,		0x21, 0
+	.dw 0x2440, 0xc88c,	0x247f, 0xc88c,		0x21, 0
+	.dw 0x24c0, 0xc88c,	0x24ff, 0xc88c,		0x21, 0
+	.dw 0x2540, 0xc88c,	0x257f, 0xc88c,		0x21, 0
+	.dw 0x25c0, 0xc88c,	0x25ff, 0xc88c,		0x21, 0
+	.dw 0x2640, 0xc88c,	0x267f, 0xc88c,		0x21, 0
+	.dw 0x26c0, 0xc88c,	0x26ff, 0xc88c,		0x21, 0
+	.dw 0x2740, 0xc88c,	0x277f, 0xc88c,		0x21, 0
+	.dw 0x27c0, 0xc88c,	0x27ff, 0xc88c,		0x21, 0
+	.dw 0x2840, 0xc88c,	0x287f, 0xc88c,		0x21, 0
+	.dw 0x28c0, 0xc88c,	0x28ff, 0xc88c,		0x21, 0
+	.dw 0x2940, 0xc88c,	0x297f, 0xc88c,		0x21, 0
+	.dw 0x29c0, 0xc88c,	0x29ff, 0xc88c,		0x21, 0
+	.dw 0x2a40, 0xc88c,	0x2a7f, 0xc88c,		0x21, 0
+	.dw 0x2ac0, 0xc88c,	0x2aff, 0xc88c,		0x21, 0
+	.dw 0x2b40, 0xc88c,	0x2b7f, 0xc88c,		0x21, 0
+	.dw 0x2bc0, 0xc88c,	0x2bff, 0xc88c,		0x21, 0
+	.dw 0x2c40, 0xc88c,	0x2c7f, 0xc88c,		0x21, 0
+	.dw 0x2cc0, 0xc88c,	0x2cff, 0xc88c,		0x21, 0
+	.dw 0x2d40, 0xc88c,	0x2d7f, 0xc88c,		0x21, 0
+	.dw 0x2dc0, 0xc88c,	0x2dff, 0xc88c,		0x21, 0
+	.dw 0x2e40, 0xc88c,	0x2e7f, 0xc88c,		0x21, 0
+	.dw 0x2ec0, 0xc88c,	0x2eff, 0xc88c,		0x21, 0
+	.dw 0x2f40, 0xc88c,	0x2f7f, 0xc88c,		0x21, 0
+	.dw 0x2fc0, 0xc88c,	0x2fff, 0xc88c,		0x21, 0
+	.dw 0x3040, 0xc88c,	0x307f, 0xc88c,		0x21, 0
+	.dw 0x30c0, 0xc88c,	0x30ff, 0xc88c,		0x21, 0
+	.dw 0x3140, 0xc88c,	0x317f, 0xc88c,		0x21, 0
+	.dw 0x31c0, 0xc88c,	0x31ff, 0xc88c,		0x21, 0
+	.dw 0x3240, 0xc88c,	0x327f, 0xc88c,		0x21, 0
+	.dw 0x32c0, 0xc88c,	0x32ff, 0xc88c,		0x21, 0
+	.dw 0x3340, 0xc88c,	0x337f, 0xc88c,		0x21, 0
+	.dw 0x33c0, 0xc88c,	0x33ff, 0xc88c,		0x21, 0
+	.dw 0x3440, 0xc88c,	0x347f, 0xc88c,		0x21, 0
+	.dw 0x34c0, 0xc88c,	0x34ff, 0xc88c,		0x21, 0
+	.dw 0x3540, 0xc88c,	0x357f, 0xc88c,		0x21, 0
+	.dw 0x35c0, 0xc88c,	0x35ff, 0xc88c,		0x21, 0
+	.dw 0x3640, 0xc88c,	0x367f, 0xc88c,		0x21, 0
+	.dw 0x36c0, 0xc88c,	0x36ff, 0xc88c,		0x21, 0
+	.dw 0x3740, 0xc88c,	0x377f, 0xc88c,		0x21, 0
+	.dw 0x37c0, 0xc88c,	0x37ff, 0xc88c,		0x21, 0
+	.dw 0x3840, 0xc88c,	0x387f, 0xc88c,		0x21, 0
+	.dw 0x38c0, 0xc88c,	0x38ff, 0xc88c,		0x21, 0
+	.dw 0x3940, 0xc88c,	0x397f, 0xc88c,		0x21, 0
+	.dw 0x39c0, 0xc88c,	0x3fff, 0xc88c,		0x21, 0
+	.dw 0x4040, 0xc88c,	0x407f, 0xc88c,		0x21, 0
+	.dw 0x40c0, 0xc88c,	0x40ff, 0xc88c,		0x21, 0
+	.dw 0x4140, 0xc88c,	0x417f, 0xc88c,		0x21, 0
+	.dw 0x41c0, 0xc88c,	0x41ff, 0xc88c,		0x21, 0
+	.dw 0x4240, 0xc88c,	0x427f, 0xc88c,		0x21, 0
+	.dw 0x42c0, 0xc88c,	0x42ff, 0xc88c,		0x21, 0
+	.dw 0x4340, 0xc88c,	0x437f, 0xc88c,		0x21, 0
+	.dw 0x43c0, 0xc88c,	0x43ff, 0xc88c,		0x21, 0
+	.dw 0x4440, 0xc88c,	0x447f, 0xc88c,		0x21, 0
+	.dw 0x44c0, 0xc88c,	0x44ff, 0xc88c,		0x21, 0
+	.dw 0x4540, 0xc88c,	0x457f, 0xc88c,		0x21, 0
+	.dw 0x45c0, 0xc88c,	0x45ff, 0xc88c,		0x21, 0
+	.dw 0x4640, 0xc88c,	0x467f, 0xc88c,		0x21, 0
+	.dw 0x46c0, 0xc88c,	0x46ff, 0xc88c,		0x21, 0
+	.dw 0x4740, 0xc88c,	0x477f, 0xc88c,		0x21, 0
+	.dw 0x47c0, 0xc88c,	0x47ff, 0xc88c,		0x21, 0
+	.dw 0x4840, 0xc88c,	0x487f, 0xc88c,		0x21, 0
+	.dw 0x48c0, 0xc88c,	0x48ff, 0xc88c,		0x21, 0
+	.dw 0x4940, 0xc88c,	0x497f, 0xc88c,		0x21, 0
+	.dw 0x49c0, 0xc88c,	0x49ff, 0xc88c,		0x21, 0
+	.dw 0x4a40, 0xc88c,	0x4a7f, 0xc88c,		0x21, 0
+	.dw 0x4ac0, 0xc88c,	0x4aff, 0xc88c,		0x21, 0
+	.dw 0x4b40, 0xc88c,	0x4b7f, 0xc88c,		0x21, 0
+	.dw 0x4bc0, 0xc88c,	0x4bff, 0xc88c,		0x21, 0
+	.dw 0x4c40, 0xc88c,	0x4c7f, 0xc88c,		0x21, 0
+	.dw 0x4cc0, 0xc88c,	0x4cff, 0xc88c,		0x21, 0
+	.dw 0x4d40, 0xc88c,	0x4d7f, 0xc88c,		0x21, 0
+	.dw 0x4dc0, 0xc88c,	0x4dff, 0xc88c,		0x21, 0
+	.dw 0x4e40, 0xc88c,	0x4e7f, 0xc88c,		0x21, 0
+	.dw 0x4ec0, 0xc88c,	0x4eff, 0xc88c,		0x21, 0
+	.dw 0x4f40, 0xc88c,	0x4f7f, 0xc88c,		0x21, 0
+	.dw 0x4fc0, 0xc88c,	0x4fff, 0xc88c,		0x21, 0
+	.dw 0x5040, 0xc88c,	0x507f, 0xc88c,		0x21, 0
+	.dw 0x50c0, 0xc88c,	0x50ff, 0xc88c,		0x21, 0
+	.dw 0x5140, 0xc88c,	0x517f, 0xc88c,		0x21, 0
+	.dw 0x51c0, 0xc88c,	0x51ff, 0xc88c,		0x21, 0
+	.dw 0x5240, 0xc88c,	0x527f, 0xc88c,		0x21, 0
+	.dw 0x52c0, 0xc88c,	0x52ff, 0xc88c,		0x21, 0
+	.dw 0x5340, 0xc88c,	0x537f, 0xc88c,		0x21, 0
+	.dw 0x53c0, 0xc88c,	0x53ff, 0xc88c,		0x21, 0
+	.dw 0x5440, 0xc88c,	0x547f, 0xc88c,		0x21, 0
+	.dw 0x54c0, 0xc88c,	0x54ff, 0xc88c,		0x21, 0
+	.dw 0x5540, 0xc88c,	0x557f, 0xc88c,		0x21, 0
+	.dw 0x55c0, 0xc88c,	0x55ff, 0xc88c,		0x21, 0
+	.dw 0x5640, 0xc88c,	0x567f, 0xc88c,		0x21, 0
+	.dw 0x56c0, 0xc88c,	0x56ff, 0xc88c,		0x21, 0
+	.dw 0x5740, 0xc88c,	0x577f, 0xc88c,		0x21, 0
+	.dw 0x57c0, 0xc88c,	0x57ff, 0xc88c,		0x21, 0
+	.dw 0x5840, 0xc88c,	0x587f, 0xc88c,		0x21, 0
+	.dw 0x58c0, 0xc88c,	0x58ff, 0xc88c,		0x21, 0
+	.dw 0x5940, 0xc88c,	0x597f, 0xc88c,		0x21, 0
+	.dw 0x59c0, 0xc88c,	0x5fff, 0xc88c,		0x21, 0
+	.dw 0x6040, 0xc88c,	0x607f, 0xc88c,		0x21, 0
+	.dw 0x60c0, 0xc88c,	0x60ff, 0xc88c,		0x21, 0
+	.dw 0x6140, 0xc88c,	0x617f, 0xc88c,		0x21, 0
+	.dw 0x61c0, 0xc88c,	0x61ff, 0xc88c,		0x21, 0
+	.dw 0x6240, 0xc88c,	0x627f, 0xc88c,		0x21, 0
+	.dw 0x62c0, 0xc88c,	0x62ff, 0xc88c,		0x21, 0
+	.dw 0x6340, 0xc88c,	0x637f, 0xc88c,		0x21, 0
+	.dw 0x63c0, 0xc88c,	0x63ff, 0xc88c,		0x21, 0
+	.dw 0x6440, 0xc88c,	0x647f, 0xc88c,		0x21, 0
+	.dw 0x64c0, 0xc88c,	0x64ff, 0xc88c,		0x21, 0
+	.dw 0x6540, 0xc88c,	0x657f, 0xc88c,		0x21, 0
+	.dw 0x65c0, 0xc88c,	0x65ff, 0xc88c,		0x21, 0
+	.dw 0x6640, 0xc88c,	0x667f, 0xc88c,		0x21, 0
+	.dw 0x66c0, 0xc88c,	0x66ff, 0xc88c,		0x21, 0
+	.dw 0x6740, 0xc88c,	0x677f, 0xc88c,		0x21, 0
+	.dw 0x67c0, 0xc88c,	0x67ff, 0xc88c,		0x21, 0
+	.dw 0x6840, 0xc88c,	0x687f, 0xc88c,		0x21, 0
+	.dw 0x68c0, 0xc88c,	0x68ff, 0xc88c,		0x21, 0
+	.dw 0x6940, 0xc88c,	0x697f, 0xc88c,		0x21, 0
+	.dw 0x69c0, 0xc88c,	0x69ff, 0xc88c,		0x21, 0
+	.dw 0x6a40, 0xc88c,	0x6a7f, 0xc88c,		0x21, 0
+	.dw 0x6ac0, 0xc88c,	0x6aff, 0xc88c,		0x21, 0
+	.dw 0x6b40, 0xc88c,	0x6b7f, 0xc88c,		0x21, 0
+	.dw 0x6bc0, 0xc88c,	0x6bff, 0xc88c,		0x21, 0
+	.dw 0x6c40, 0xc88c,	0x6c7f, 0xc88c,		0x21, 0
+	.dw 0x6cc0, 0xc88c,	0x6cff, 0xc88c,		0x21, 0
+	.dw 0x6d40, 0xc88c,	0x6d7f, 0xc88c,		0x21, 0
+	.dw 0x6dc0, 0xc88c,	0x6dff, 0xc88c,		0x21, 0
+	.dw 0x6e40, 0xc88c,	0x6e7f, 0xc88c,		0x21, 0
+	.dw 0x6ec0, 0xc88c,	0x6eff, 0xc88c,		0x21, 0
+	.dw 0x6f40, 0xc88c,	0x6f7f, 0xc88c,		0x21, 0
+	.dw 0x6fc0, 0xc88c,	0x6fff, 0xc88c,		0x21, 0
+	.dw 0x7040, 0xc88c,	0x707f, 0xc88c,		0x21, 0
+	.dw 0x70c0, 0xc88c,	0x70ff, 0xc88c,		0x21, 0
+	.dw 0x7140, 0xc88c,	0x717f, 0xc88c,		0x21, 0
+	.dw 0x71c0, 0xc88c,	0x71ff, 0xc88c,		0x21, 0
+	.dw 0x7240, 0xc88c,	0x727f, 0xc88c,		0x21, 0
+	.dw 0x72c0, 0xc88c,	0x72ff, 0xc88c,		0x21, 0
+	.dw 0x7340, 0xc88c,	0x737f, 0xc88c,		0x21, 0
+	.dw 0x73c0, 0xc88c,	0x73ff, 0xc88c,		0x21, 0
+	.dw 0x7440, 0xc88c,	0x747f, 0xc88c,		0x21, 0
+	.dw 0x74c0, 0xc88c,	0x74ff, 0xc88c,		0x21, 0
+	.dw 0x7540, 0xc88c,	0x757f, 0xc88c,		0x21, 0
+	.dw 0x75c0, 0xc88c,	0x75ff, 0xc88c,		0x21, 0
+	.dw 0x7640, 0xc88c,	0x767f, 0xc88c,		0x21, 0
+	.dw 0x76c0, 0xc88c,	0x76ff, 0xc88c,		0x21, 0
+	.dw 0x7740, 0xc88c,	0x777f, 0xc88c,		0x21, 0
+	.dw 0x77c0, 0xc88c,	0x77ff, 0xc88c,		0x21, 0
+	.dw 0x7840, 0xc88c,	0x787f, 0xc88c,		0x21, 0
+	.dw 0x78c0, 0xc88c,	0x78ff, 0xc88c,		0x21, 0
+	.dw 0x7940, 0xc88c,	0x797f, 0xc88c,		0x21, 0
+	.dw 0x79c0, 0xc88c,	0x7fff, 0xc88c,		0x21, 0
+	.dw 0x8040, 0xc88c,	0x807f, 0xc88c,		0x21, 0
+	.dw 0x80c0, 0xc88c,	0x80ff, 0xc88c,		0x21, 0
+	.dw 0x8140, 0xc88c,	0x817f, 0xc88c,		0x21, 0
+	.dw 0x81c0, 0xc88c,	0x81ff, 0xc88c,		0x21, 0
+	.dw 0x8240, 0xc88c,	0x827f, 0xc88c,		0x21, 0
+	.dw 0x82c0, 0xc88c,	0x82ff, 0xc88c,		0x21, 0
+	.dw 0x8340, 0xc88c,	0x837f, 0xc88c,		0x21, 0
+	.dw 0x83c0, 0xc88c,	0x83ff, 0xc88c,		0x21, 0
+	.dw 0x8440, 0xc88c,	0x847f, 0xc88c,		0x21, 0
+	.dw 0x84c0, 0xc88c,	0x84ff, 0xc88c,		0x21, 0
+	.dw 0x8540, 0xc88c,	0x857f, 0xc88c,		0x21, 0
+	.dw 0x85c0, 0xc88c,	0x85ff, 0xc88c,		0x21, 0
+	.dw 0x8640, 0xc88c,	0x867f, 0xc88c,		0x21, 0
+	.dw 0x86c0, 0xc88c,	0x86ff, 0xc88c,		0x21, 0
+	.dw 0x8740, 0xc88c,	0x877f, 0xc88c,		0x21, 0
+	.dw 0x87c0, 0xc88c,	0x87ff, 0xc88c,		0x21, 0
+	.dw 0x8840, 0xc88c,	0x887f, 0xc88c,		0x21, 0
+	.dw 0x88c0, 0xc88c,	0x88ff, 0xc88c,		0x21, 0
+	.dw 0x8940, 0xc88c,	0x897f, 0xc88c,		0x21, 0
+	.dw 0x89c0, 0xc88c,	0x89ff, 0xc88c,		0x21, 0
+	.dw 0x8a40, 0xc88c,	0x8a7f, 0xc88c,		0x21, 0
+	.dw 0x8ac0, 0xc88c,	0x8aff, 0xc88c,		0x21, 0
+	.dw 0x8b40, 0xc88c,	0x8b7f, 0xc88c,		0x21, 0
+	.dw 0x8bc0, 0xc88c,	0x8bff, 0xc88c,		0x21, 0
+	.dw 0x8c40, 0xc88c,	0x8c7f, 0xc88c,		0x21, 0
+	.dw 0x8cc0, 0xc88c,	0x8cff, 0xc88c,		0x21, 0
+	.dw 0x8d40, 0xc88c,	0x8d7f, 0xc88c,		0x21, 0
+	.dw 0x8dc0, 0xc88c,	0x8dff, 0xc88c,		0x21, 0
+	.dw 0x8e40, 0xc88c,	0x8e7f, 0xc88c,		0x21, 0
+	.dw 0x8ec0, 0xc88c,	0x8eff, 0xc88c,		0x21, 0
+	.dw 0x8f40, 0xc88c,	0x8f7f, 0xc88c,		0x21, 0
+	.dw 0x8fc0, 0xc88c,	0x8fff, 0xc88c,		0x21, 0
+	.dw 0x9040, 0xc88c,	0x907f, 0xc88c,		0x21, 0
+	.dw 0x90c0, 0xc88c,	0x90ff, 0xc88c,		0x21, 0
+	.dw 0x9140, 0xc88c,	0x917f, 0xc88c,		0x21, 0
+	.dw 0x91c0, 0xc88c,	0x91ff, 0xc88c,		0x21, 0
+	.dw 0x9240, 0xc88c,	0x927f, 0xc88c,		0x21, 0
+	.dw 0x92c0, 0xc88c,	0x92ff, 0xc88c,		0x21, 0
+	.dw 0x9340, 0xc88c,	0x937f, 0xc88c,		0x21, 0
+	.dw 0x93c0, 0xc88c,	0x93ff, 0xc88c,		0x21, 0
+	.dw 0x9440, 0xc88c,	0x947f, 0xc88c,		0x21, 0
+	.dw 0x94c0, 0xc88c,	0x94ff, 0xc88c,		0x21, 0
+	.dw 0x9540, 0xc88c,	0x957f, 0xc88c,		0x21, 0
+	.dw 0x95c0, 0xc88c,	0x95ff, 0xc88c,		0x21, 0
+	.dw 0x9640, 0xc88c,	0x967f, 0xc88c,		0x21, 0
+	.dw 0x96c0, 0xc88c,	0x96ff, 0xc88c,		0x21, 0
+	.dw 0x9740, 0xc88c,	0x977f, 0xc88c,		0x21, 0
+	.dw 0x97c0, 0xc88c,	0x97ff, 0xc88c,		0x21, 0
+	.dw 0x9840, 0xc88c,	0x987f, 0xc88c,		0x21, 0
+	.dw 0x98c0, 0xc88c,	0x98ff, 0xc88c,		0x21, 0
+	.dw 0x9940, 0xc88c,	0x997f, 0xc88c,		0x21, 0
+	.dw 0x99c0, 0xc88c,	0x9fff, 0xc88c,		0x21, 0
+	.dw 0xa040, 0xc88c,	0xa07f, 0xc88c,		0x21, 0
+	.dw 0xa0c0, 0xc88c,	0xa0ff, 0xc88c,		0x21, 0
+	.dw 0xa140, 0xc88c,	0xa17f, 0xc88c,		0x21, 0
+	.dw 0xa1c0, 0xc88c,	0xa1ff, 0xc88c,		0x21, 0
+	.dw 0xa240, 0xc88c,	0xa27f, 0xc88c,		0x21, 0
+	.dw 0xa2c0, 0xc88c,	0xa2ff, 0xc88c,		0x21, 0
+	.dw 0xa340, 0xc88c,	0xa37f, 0xc88c,		0x21, 0
+	.dw 0xa3c0, 0xc88c,	0xa3ff, 0xc88c,		0x21, 0
+	.dw 0xa440, 0xc88c,	0xa47f, 0xc88c,		0x21, 0
+	.dw 0xa4c0, 0xc88c,	0xa4ff, 0xc88c,		0x21, 0
+	.dw 0xa540, 0xc88c,	0xa57f, 0xc88c,		0x21, 0
+	.dw 0xa5c0, 0xc88c,	0xa5ff, 0xc88c,		0x21, 0
+	.dw 0xa640, 0xc88c,	0xa67f, 0xc88c,		0x21, 0
+	.dw 0xa6c0, 0xc88c,	0xa6ff, 0xc88c,		0x21, 0
+	.dw 0xa740, 0xc88c,	0xa77f, 0xc88c,		0x21, 0
+	.dw 0xa7c0, 0xc88c,	0xa7ff, 0xc88c,		0x21, 0
+	.dw 0xa840, 0xc88c,	0xa87f, 0xc88c,		0x21, 0
+	.dw 0xa8c0, 0xc88c,	0xa8ff, 0xc88c,		0x21, 0
+	.dw 0xa940, 0xc88c,	0xa97f, 0xc88c,		0x21, 0
+	.dw 0xa9c0, 0xc88c,	0xa9ff, 0xc88c,		0x21, 0
+	.dw 0xaa40, 0xc88c,	0xaa7f, 0xc88c,		0x21, 0
+	.dw 0xaac0, 0xc88c,	0xaaff, 0xc88c,		0x21, 0
+	.dw 0xab40, 0xc88c,	0xab7f, 0xc88c,		0x21, 0
+	.dw 0xabc0, 0xc88c,	0xabff, 0xc88c,		0x21, 0
+	.dw 0xac40, 0xc88c,	0xac7f, 0xc88c,		0x21, 0
+	.dw 0xacc0, 0xc88c,	0xacff, 0xc88c,		0x21, 0
+	.dw 0xad40, 0xc88c,	0xad7f, 0xc88c,		0x21, 0
+	.dw 0xadc0, 0xc88c,	0xadff, 0xc88c,		0x21, 0
+	.dw 0xae40, 0xc88c,	0xae7f, 0xc88c,		0x21, 0
+	.dw 0xaec0, 0xc88c,	0xaeff, 0xc88c,		0x21, 0
+	.dw 0xaf40, 0xc88c,	0xaf7f, 0xc88c,		0x21, 0
+	.dw 0xafc0, 0xc88c,	0xafff, 0xc88c,		0x21, 0
+	.dw 0xb040, 0xc88c,	0xb07f, 0xc88c,		0x21, 0
+	.dw 0xb0c0, 0xc88c,	0xb0ff, 0xc88c,		0x21, 0
+	.dw 0xb140, 0xc88c,	0xb17f, 0xc88c,		0x21, 0
+	.dw 0xb1c0, 0xc88c,	0xb1ff, 0xc88c,		0x21, 0
+	.dw 0xb240, 0xc88c,	0xb27f, 0xc88c,		0x21, 0
+	.dw 0xb2c0, 0xc88c,	0xb2ff, 0xc88c,		0x21, 0
+	.dw 0xb340, 0xc88c,	0xb37f, 0xc88c,		0x21, 0
+	.dw 0xb3c0, 0xc88c,	0xb3ff, 0xc88c,		0x21, 0
+	.dw 0xb440, 0xc88c,	0xb47f, 0xc88c,		0x21, 0
+	.dw 0xb4c0, 0xc88c,	0xb4ff, 0xc88c,		0x21, 0
+	.dw 0xb540, 0xc88c,	0xb57f, 0xc88c,		0x21, 0
+	.dw 0xb5c0, 0xc88c,	0xb5ff, 0xc88c,		0x21, 0
+	.dw 0xb640, 0xc88c,	0xb67f, 0xc88c,		0x21, 0
+	.dw 0xb6c0, 0xc88c,	0xb6ff, 0xc88c,		0x21, 0
+	.dw 0xb740, 0xc88c,	0xb77f, 0xc88c,		0x21, 0
+	.dw 0xb7c0, 0xc88c,	0xb7ff, 0xc88c,		0x21, 0
+	.dw 0xb840, 0xc88c,	0xb87f, 0xc88c,		0x21, 0
+	.dw 0xb8c0, 0xc88c,	0xb8ff, 0xc88c,		0x21, 0
+	.dw 0xb940, 0xc88c,	0xb97f, 0xc88c,		0x21, 0
+	.dw 0xb9c0, 0xc88c,	0xbfff, 0xc88c,		0x21, 0
+	.dw 0xc040, 0xc88c,	0xc07f, 0xc88c,		0x21, 0
+	.dw 0xc0c0, 0xc88c,	0xc0ff, 0xc88c,		0x21, 0
+	.dw 0xc140, 0xc88c,	0xc17f, 0xc88c,		0x21, 0
+	.dw 0xc1c0, 0xc88c,	0xc1ff, 0xc88c,		0x21, 0
+	.dw 0xc240, 0xc88c,	0xc27f, 0xc88c,		0x21, 0
+	.dw 0xc2c0, 0xc88c,	0xc2ff, 0xc88c,		0x21, 0
+	.dw 0xc340, 0xc88c,	0xc37f, 0xc88c,		0x21, 0
+	.dw 0xc3c0, 0xc88c,	0xc3ff, 0xc88c,		0x21, 0
+	.dw 0xc440, 0xc88c,	0xc47f, 0xc88c,		0x21, 0
+	.dw 0xc4c0, 0xc88c,	0xc4ff, 0xc88c,		0x21, 0
+	.dw 0xc540, 0xc88c,	0xc57f, 0xc88c,		0x21, 0
+	.dw 0xc5c0, 0xc88c,	0xc5ff, 0xc88c,		0x21, 0
+	.dw 0xc640, 0xc88c,	0xc67f, 0xc88c,		0x21, 0
+	.dw 0xc6c0, 0xc88c,	0xc6ff, 0xc88c,		0x21, 0
+	.dw 0xc740, 0xc88c,	0xc77f, 0xc88c,		0x21, 0
+	.dw 0xc7c0, 0xc88c,	0xc7ff, 0xc88c,		0x21, 0
+	.dw 0xc840, 0xc88c,	0xc87f, 0xc88c,		0x21, 0
+	.dw 0xc8c0, 0xc88c,	0xc8ff, 0xc88c,		0x21, 0
+	.dw 0xc940, 0xc88c,	0xc97f, 0xc88c,		0x21, 0
+	.dw 0xc9c0, 0xc88c,	0xc9ff, 0xc88c,		0x21, 0
+	.dw 0xca40, 0xc88c,	0xca7f, 0xc88c,		0x21, 0
+	.dw 0xcac0, 0xc88c,	0xcaff, 0xc88c,		0x21, 0
+	.dw 0xcb40, 0xc88c,	0xcb7f, 0xc88c,		0x21, 0
+	.dw 0xcbc0, 0xc88c,	0xcbff, 0xc88c,		0x21, 0
+	.dw 0xcc40, 0xc88c,	0xcc7f, 0xc88c,		0x21, 0
+	.dw 0xccc0, 0xc88c,	0xccff, 0xc88c,		0x21, 0
+	.dw 0xcd40, 0xc88c,	0xcd7f, 0xc88c,		0x21, 0
+	.dw 0xcdc0, 0xc88c,	0xcdff, 0xc88c,		0x21, 0
+	.dw 0xce40, 0xc88c,	0xce7f, 0xc88c,		0x21, 0
+	.dw 0xcec0, 0xc88c,	0xceff, 0xc88c,		0x21, 0
+	.dw 0xcf40, 0xc88c,	0xcf7f, 0xc88c,		0x21, 0
+	.dw 0xcfc0, 0xc88c,	0xcfff, 0xc88c,		0x21, 0
+	.dw 0xd040, 0xc88c,	0xd07f, 0xc88c,		0x21, 0
+	.dw 0xd0c0, 0xc88c,	0xd0ff, 0xc88c,		0x21, 0
+	.dw 0xd140, 0xc88c,	0xd17f, 0xc88c,		0x21, 0
+	.dw 0xd1c0, 0xc88c,	0xd1ff, 0xc88c,		0x21, 0
+	.dw 0xd240, 0xc88c,	0xd27f, 0xc88c,		0x21, 0
+	.dw 0xd2c0, 0xc88c,	0xd2ff, 0xc88c,		0x21, 0
+	.dw 0xd340, 0xc88c,	0xd37f, 0xc88c,		0x21, 0
+	.dw 0xd3c0, 0xc88c,	0xd3ff, 0xc88c,		0x21, 0
+	.dw 0xd440, 0xc88c,	0xd47f, 0xc88c,		0x21, 0
+	.dw 0xd4c0, 0xc88c,	0xd4ff, 0xc88c,		0x21, 0
+	.dw 0xd540, 0xc88c,	0xd57f, 0xc88c,		0x21, 0
+	.dw 0xd5c0, 0xc88c,	0xd5ff, 0xc88c,		0x21, 0
+	.dw 0xd640, 0xc88c,	0xd67f, 0xc88c,		0x21, 0
+	.dw 0xd6c0, 0xc88c,	0xd6ff, 0xc88c,		0x21, 0
+	.dw 0xd740, 0xc88c,	0xd77f, 0xc88c,		0x21, 0
+	.dw 0xd7c0, 0xc88c,	0xd7ff, 0xc88c,		0x21, 0
+	.dw 0xd840, 0xc88c,	0xd87f, 0xc88c,		0x21, 0
+	.dw 0xd8c0, 0xc88c,	0xd8ff, 0xc88c,		0x21, 0
+	.dw 0xd940, 0xc88c,	0xd97f, 0xc88c,		0x21, 0
+	.dw 0xd9c0, 0xc88c,	0xdfff, 0xc88c,		0x21, 0
+	.dw 0xe040, 0xc88c,	0xe07f, 0xc88c,		0x21, 0
+	.dw 0xe0c0, 0xc88c,	0xe0ff, 0xc88c,		0x21, 0
+	.dw 0xe140, 0xc88c,	0xe17f, 0xc88c,		0x21, 0
+	.dw 0xe1c0, 0xc88c,	0xe1ff, 0xc88c,		0x21, 0
+	.dw 0xe240, 0xc88c,	0xe27f, 0xc88c,		0x21, 0
+	.dw 0xe2c0, 0xc88c,	0xe2ff, 0xc88c,		0x21, 0
+	.dw 0xe340, 0xc88c,	0xe37f, 0xc88c,		0x21, 0
+	.dw 0xe3c0, 0xc88c,	0xe3ff, 0xc88c,		0x21, 0
+	.dw 0xe440, 0xc88c,	0xe47f, 0xc88c,		0x21, 0
+	.dw 0xe4c0, 0xc88c,	0xe4ff, 0xc88c,		0x21, 0
+	.dw 0xe540, 0xc88c,	0xe57f, 0xc88c,		0x21, 0
+	.dw 0xe5c0, 0xc88c,	0xe5ff, 0xc88c,		0x21, 0
+	.dw 0xe640, 0xc88c,	0xe67f, 0xc88c,		0x21, 0
+	.dw 0xe6c0, 0xc88c,	0xe6ff, 0xc88c,		0x21, 0
+	.dw 0xe740, 0xc88c,	0xe77f, 0xc88c,		0x21, 0
+	.dw 0xe7c0, 0xc88c,	0xe7ff, 0xc88c,		0x21, 0
+	.dw 0xe840, 0xc88c,	0xe87f, 0xc88c,		0x21, 0
+	.dw 0xe8c0, 0xc88c,	0xe8ff, 0xc88c,		0x21, 0
+	.dw 0xe940, 0xc88c,	0xe97f, 0xc88c,		0x21, 0
+	.dw 0xe9c0, 0xc88c,	0xe9ff, 0xc88c,		0x21, 0
+	.dw 0xea40, 0xc88c,	0xea7f, 0xc88c,		0x21, 0
+	.dw 0xeac0, 0xc88c,	0xeaff, 0xc88c,		0x21, 0
+	.dw 0xeb40, 0xc88c,	0xeb7f, 0xc88c,		0x21, 0
+	.dw 0xebc0, 0xc88c,	0xebff, 0xc88c,		0x21, 0
+	.dw 0xec40, 0xc88c,	0xec7f, 0xc88c,		0x21, 0
+	.dw 0xecc0, 0xc88c,	0xecff, 0xc88c,		0x21, 0
+	.dw 0xed40, 0xc88c,	0xed7f, 0xc88c,		0x21, 0
+	.dw 0xedc0, 0xc88c,	0xedff, 0xc88c,		0x21, 0
+	.dw 0xee40, 0xc88c,	0xee7f, 0xc88c,		0x21, 0
+	.dw 0xeec0, 0xc88c,	0xeeff, 0xc88c,		0x21, 0
+	.dw 0xef40, 0xc88c,	0xef7f, 0xc88c,		0x21, 0
+	.dw 0xefc0, 0xc88c,	0xefff, 0xc88c,		0x21, 0
+	.dw 0xf040, 0xc88c,	0xf07f, 0xc88c,		0x21, 0
+	.dw 0xf0c0, 0xc88c,	0xf0ff, 0xc88c,		0x21, 0
+	.dw 0xf140, 0xc88c,	0xf17f, 0xc88c,		0x21, 0
+	.dw 0xf1c0, 0xc88c,	0xf1ff, 0xc88c,		0x21, 0
+	.dw 0xf240, 0xc88c,	0xf27f, 0xc88c,		0x21, 0
+	.dw 0xf2c0, 0xc88c,	0xf2ff, 0xc88c,		0x21, 0
+	.dw 0xf340, 0xc88c,	0xf37f, 0xc88c,		0x21, 0
+	.dw 0xf3c0, 0xc88c,	0xf3ff, 0xc88c,		0x21, 0
+	.dw 0xf440, 0xc88c,	0xf47f, 0xc88c,		0x21, 0
+	.dw 0xf4c0, 0xc88c,	0xf4ff, 0xc88c,		0x21, 0
+	.dw 0xf540, 0xc88c,	0xf57f, 0xc88c,		0x21, 0
+	.dw 0xf5c0, 0xc88c,	0xf5ff, 0xc88c,		0x21, 0
+	.dw 0xf640, 0xc88c,	0xf67f, 0xc88c,		0x21, 0
+	.dw 0xf6c0, 0xc88c,	0xf6ff, 0xc88c,		0x21, 0
+	.dw 0xf740, 0xc88c,	0xf77f, 0xc88c,		0x21, 0
+	.dw 0xf7c0, 0xc88c,	0xf7ff, 0xc88c,		0x21, 0
+	.dw 0xf840, 0xc88c,	0xf87f, 0xc88c,		0x21, 0
+	.dw 0xf8c0, 0xc88c,	0xf8ff, 0xc88c,		0x21, 0
+	.dw 0xf940, 0xc88c,	0xf97f, 0xc88c,		0x21, 0
+	.dw 0xf9c0, 0xc88c,	0xffff, 0xc88c,		0x21, 0
+	.dw 0x0040, 0xc88d,	0x007f, 0xc88d,		0x21, 0
+	.dw 0x00c0, 0xc88d,	0x00ff, 0xc88d,		0x21, 0
+	.dw 0x0140, 0xc88d,	0x017f, 0xc88d,		0x21, 0
+	.dw 0x01c0, 0xc88d,	0x01ff, 0xc88d,		0x21, 0
+	.dw 0x0240, 0xc88d,	0x027f, 0xc88d,		0x21, 0
+	.dw 0x02c0, 0xc88d,	0x02ff, 0xc88d,		0x21, 0
+	.dw 0x0340, 0xc88d,	0x037f, 0xc88d,		0x21, 0
+	.dw 0x03c0, 0xc88d,	0x03ff, 0xc88d,		0x21, 0
+	.dw 0x0440, 0xc88d,	0x047f, 0xc88d,		0x21, 0
+	.dw 0x04c0, 0xc88d,	0x04ff, 0xc88d,		0x21, 0
+	.dw 0x0540, 0xc88d,	0x057f, 0xc88d,		0x21, 0
+	.dw 0x05c0, 0xc88d,	0x05ff, 0xc88d,		0x21, 0
+	.dw 0x0640, 0xc88d,	0x067f, 0xc88d,		0x21, 0
+	.dw 0x06c0, 0xc88d,	0x06ff, 0xc88d,		0x21, 0
+	.dw 0x0740, 0xc88d,	0x077f, 0xc88d,		0x21, 0
+	.dw 0x07c0, 0xc88d,	0x07ff, 0xc88d,		0x21, 0
+	.dw 0x0840, 0xc88d,	0x087f, 0xc88d,		0x21, 0
+	.dw 0x08c0, 0xc88d,	0x08ff, 0xc88d,		0x21, 0
+	.dw 0x0940, 0xc88d,	0x097f, 0xc88d,		0x21, 0
+	.dw 0x09c0, 0xc88d,	0x09ff, 0xc88d,		0x21, 0
+	.dw 0x0a40, 0xc88d,	0x0a7f, 0xc88d,		0x21, 0
+	.dw 0x0ac0, 0xc88d,	0x0aff, 0xc88d,		0x21, 0
+	.dw 0x0b40, 0xc88d,	0x0b7f, 0xc88d,		0x21, 0
+	.dw 0x0bc0, 0xc88d,	0x0bff, 0xc88d,		0x21, 0
+	.dw 0x0c40, 0xc88d,	0x0c7f, 0xc88d,		0x21, 0
+	.dw 0x0cc0, 0xc88d,	0x0cff, 0xc88d,		0x21, 0
+	.dw 0x0d40, 0xc88d,	0x0d7f, 0xc88d,		0x21, 0
+	.dw 0x0dc0, 0xc88d,	0x0dff, 0xc88d,		0x21, 0
+	.dw 0x0e40, 0xc88d,	0x0e7f, 0xc88d,		0x21, 0
+	.dw 0x0ec0, 0xc88d,	0x0eff, 0xc88d,		0x21, 0
+	.dw 0x0f40, 0xc88d,	0x0f7f, 0xc88d,		0x21, 0
+	.dw 0x0fc0, 0xc88d,	0x0fff, 0xc88d,		0x21, 0
+	.dw 0x1040, 0xc88d,	0x107f, 0xc88d,		0x21, 0
+	.dw 0x10c0, 0xc88d,	0x10ff, 0xc88d,		0x21, 0
+	.dw 0x1140, 0xc88d,	0x117f, 0xc88d,		0x21, 0
+	.dw 0x11c0, 0xc88d,	0x11ff, 0xc88d,		0x21, 0
+	.dw 0x1240, 0xc88d,	0x127f, 0xc88d,		0x21, 0
+	.dw 0x12c0, 0xc88d,	0x12ff, 0xc88d,		0x21, 0
+	.dw 0x1340, 0xc88d,	0x137f, 0xc88d,		0x21, 0
+	.dw 0x13c0, 0xc88d,	0x13ff, 0xc88d,		0x21, 0
+	.dw 0x1440, 0xc88d,	0x147f, 0xc88d,		0x21, 0
+	.dw 0x14c0, 0xc88d,	0x14ff, 0xc88d,		0x21, 0
+	.dw 0x1540, 0xc88d,	0x157f, 0xc88d,		0x21, 0
+	.dw 0x15c0, 0xc88d,	0x15ff, 0xc88d,		0x21, 0
+	.dw 0x1640, 0xc88d,	0x167f, 0xc88d,		0x21, 0
+	.dw 0x16c0, 0xc88d,	0x16ff, 0xc88d,		0x21, 0
+	.dw 0x1740, 0xc88d,	0x177f, 0xc88d,		0x21, 0
+	.dw 0x17c0, 0xc88d,	0x17ff, 0xc88d,		0x21, 0
+	.dw 0x1840, 0xc88d,	0x187f, 0xc88d,		0x21, 0
+	.dw 0x18c0, 0xc88d,	0x18ff, 0xc88d,		0x21, 0
+	.dw 0x1940, 0xc88d,	0x197f, 0xc88d,		0x21, 0
+	.dw 0x19c0, 0xc88d,	0x1fff, 0xc88d,		0x21, 0
+	.dw 0x2040, 0xc88d,	0x207f, 0xc88d,		0x21, 0
+	.dw 0x20c0, 0xc88d,	0x20ff, 0xc88d,		0x21, 0
+	.dw 0x2140, 0xc88d,	0x217f, 0xc88d,		0x21, 0
+	.dw 0x21c0, 0xc88d,	0x21ff, 0xc88d,		0x21, 0
+	.dw 0x2240, 0xc88d,	0x227f, 0xc88d,		0x21, 0
+	.dw 0x22c0, 0xc88d,	0x22ff, 0xc88d,		0x21, 0
+	.dw 0x2340, 0xc88d,	0x237f, 0xc88d,		0x21, 0
+	.dw 0x23c0, 0xc88d,	0x23ff, 0xc88d,		0x21, 0
+	.dw 0x2440, 0xc88d,	0x247f, 0xc88d,		0x21, 0
+	.dw 0x24c0, 0xc88d,	0x24ff, 0xc88d,		0x21, 0
+	.dw 0x2540, 0xc88d,	0x257f, 0xc88d,		0x21, 0
+	.dw 0x25c0, 0xc88d,	0x25ff, 0xc88d,		0x21, 0
+	.dw 0x2640, 0xc88d,	0x267f, 0xc88d,		0x21, 0
+	.dw 0x26c0, 0xc88d,	0x26ff, 0xc88d,		0x21, 0
+	.dw 0x2740, 0xc88d,	0x277f, 0xc88d,		0x21, 0
+	.dw 0x27c0, 0xc88d,	0x27ff, 0xc88d,		0x21, 0
+	.dw 0x2840, 0xc88d,	0x287f, 0xc88d,		0x21, 0
+	.dw 0x28c0, 0xc88d,	0x28ff, 0xc88d,		0x21, 0
+	.dw 0x2940, 0xc88d,	0x297f, 0xc88d,		0x21, 0
+	.dw 0x29c0, 0xc88d,	0x29ff, 0xc88d,		0x21, 0
+	.dw 0x2a40, 0xc88d,	0x2a7f, 0xc88d,		0x21, 0
+	.dw 0x2ac0, 0xc88d,	0x2aff, 0xc88d,		0x21, 0
+	.dw 0x2b40, 0xc88d,	0x2b7f, 0xc88d,		0x21, 0
+	.dw 0x2bc0, 0xc88d,	0x2bff, 0xc88d,		0x21, 0
+	.dw 0x2c40, 0xc88d,	0x2c7f, 0xc88d,		0x21, 0
+	.dw 0x2cc0, 0xc88d,	0x2cff, 0xc88d,		0x21, 0
+	.dw 0x2d40, 0xc88d,	0x2d7f, 0xc88d,		0x21, 0
+	.dw 0x2dc0, 0xc88d,	0x2dff, 0xc88d,		0x21, 0
+	.dw 0x2e40, 0xc88d,	0x2e7f, 0xc88d,		0x21, 0
+	.dw 0x2ec0, 0xc88d,	0x2eff, 0xc88d,		0x21, 0
+	.dw 0x2f40, 0xc88d,	0x2f7f, 0xc88d,		0x21, 0
+	.dw 0x2fc0, 0xc88d,	0x2fff, 0xc88d,		0x21, 0
+	.dw 0x3040, 0xc88d,	0x307f, 0xc88d,		0x21, 0
+	.dw 0x30c0, 0xc88d,	0x30ff, 0xc88d,		0x21, 0
+	.dw 0x3140, 0xc88d,	0x317f, 0xc88d,		0x21, 0
+	.dw 0x31c0, 0xc88d,	0x31ff, 0xc88d,		0x21, 0
+	.dw 0x3240, 0xc88d,	0x327f, 0xc88d,		0x21, 0
+	.dw 0x32c0, 0xc88d,	0x32ff, 0xc88d,		0x21, 0
+	.dw 0x3340, 0xc88d,	0x337f, 0xc88d,		0x21, 0
+	.dw 0x33c0, 0xc88d,	0x33ff, 0xc88d,		0x21, 0
+	.dw 0x3440, 0xc88d,	0x347f, 0xc88d,		0x21, 0
+	.dw 0x34c0, 0xc88d,	0x34ff, 0xc88d,		0x21, 0
+	.dw 0x3540, 0xc88d,	0x357f, 0xc88d,		0x21, 0
+	.dw 0x35c0, 0xc88d,	0x35ff, 0xc88d,		0x21, 0
+	.dw 0x3640, 0xc88d,	0x367f, 0xc88d,		0x21, 0
+	.dw 0x36c0, 0xc88d,	0x36ff, 0xc88d,		0x21, 0
+	.dw 0x3740, 0xc88d,	0x377f, 0xc88d,		0x21, 0
+	.dw 0x37c0, 0xc88d,	0x37ff, 0xc88d,		0x21, 0
+	.dw 0x3840, 0xc88d,	0x387f, 0xc88d,		0x21, 0
+	.dw 0x38c0, 0xc88d,	0x38ff, 0xc88d,		0x21, 0
+	.dw 0x3940, 0xc88d,	0x397f, 0xc88d,		0x21, 0
+	.dw 0x39c0, 0xc88d,	0x3fff, 0xc88d,		0x21, 0
+	.dw 0x4040, 0xc88d,	0x407f, 0xc88d,		0x21, 0
+	.dw 0x40c0, 0xc88d,	0x40ff, 0xc88d,		0x21, 0
+	.dw 0x4140, 0xc88d,	0x417f, 0xc88d,		0x21, 0
+	.dw 0x41c0, 0xc88d,	0x41ff, 0xc88d,		0x21, 0
+	.dw 0x4240, 0xc88d,	0x427f, 0xc88d,		0x21, 0
+	.dw 0x42c0, 0xc88d,	0x42ff, 0xc88d,		0x21, 0
+	.dw 0x4340, 0xc88d,	0x437f, 0xc88d,		0x21, 0
+	.dw 0x43c0, 0xc88d,	0x43ff, 0xc88d,		0x21, 0
+	.dw 0x4440, 0xc88d,	0x447f, 0xc88d,		0x21, 0
+	.dw 0x44c0, 0xc88d,	0x44ff, 0xc88d,		0x21, 0
+	.dw 0x4540, 0xc88d,	0x457f, 0xc88d,		0x21, 0
+	.dw 0x45c0, 0xc88d,	0x45ff, 0xc88d,		0x21, 0
+	.dw 0x4640, 0xc88d,	0x467f, 0xc88d,		0x21, 0
+	.dw 0x46c0, 0xc88d,	0x46ff, 0xc88d,		0x21, 0
+	.dw 0x4740, 0xc88d,	0x477f, 0xc88d,		0x21, 0
+	.dw 0x47c0, 0xc88d,	0x47ff, 0xc88d,		0x21, 0
+	.dw 0x4840, 0xc88d,	0x487f, 0xc88d,		0x21, 0
+	.dw 0x48c0, 0xc88d,	0x48ff, 0xc88d,		0x21, 0
+	.dw 0x4940, 0xc88d,	0x497f, 0xc88d,		0x21, 0
+	.dw 0x49c0, 0xc88d,	0x49ff, 0xc88d,		0x21, 0
+	.dw 0x4a40, 0xc88d,	0x4a7f, 0xc88d,		0x21, 0
+	.dw 0x4ac0, 0xc88d,	0x4aff, 0xc88d,		0x21, 0
+	.dw 0x4b40, 0xc88d,	0x4b7f, 0xc88d,		0x21, 0
+	.dw 0x4bc0, 0xc88d,	0x4bff, 0xc88d,		0x21, 0
+	.dw 0x4c40, 0xc88d,	0x4c7f, 0xc88d,		0x21, 0
+	.dw 0x4cc0, 0xc88d,	0x4cff, 0xc88d,		0x21, 0
+	.dw 0x4d40, 0xc88d,	0x4d7f, 0xc88d,		0x21, 0
+	.dw 0x4dc0, 0xc88d,	0x4dff, 0xc88d,		0x21, 0
+	.dw 0x4e40, 0xc88d,	0x4e7f, 0xc88d,		0x21, 0
+	.dw 0x4ec0, 0xc88d,	0x4eff, 0xc88d,		0x21, 0
+	.dw 0x4f40, 0xc88d,	0x4f7f, 0xc88d,		0x21, 0
+	.dw 0x4fc0, 0xc88d,	0x4fff, 0xc88d,		0x21, 0
+	.dw 0x5040, 0xc88d,	0x507f, 0xc88d,		0x21, 0
+	.dw 0x50c0, 0xc88d,	0x50ff, 0xc88d,		0x21, 0
+	.dw 0x5140, 0xc88d,	0x517f, 0xc88d,		0x21, 0
+	.dw 0x51c0, 0xc88d,	0x51ff, 0xc88d,		0x21, 0
+	.dw 0x5240, 0xc88d,	0x527f, 0xc88d,		0x21, 0
+	.dw 0x52c0, 0xc88d,	0x52ff, 0xc88d,		0x21, 0
+	.dw 0x5340, 0xc88d,	0x537f, 0xc88d,		0x21, 0
+	.dw 0x53c0, 0xc88d,	0x53ff, 0xc88d,		0x21, 0
+	.dw 0x5440, 0xc88d,	0x547f, 0xc88d,		0x21, 0
+	.dw 0x54c0, 0xc88d,	0x54ff, 0xc88d,		0x21, 0
+	.dw 0x5540, 0xc88d,	0x557f, 0xc88d,		0x21, 0
+	.dw 0x55c0, 0xc88d,	0x55ff, 0xc88d,		0x21, 0
+	.dw 0x5640, 0xc88d,	0x567f, 0xc88d,		0x21, 0
+	.dw 0x56c0, 0xc88d,	0x56ff, 0xc88d,		0x21, 0
+	.dw 0x5740, 0xc88d,	0x577f, 0xc88d,		0x21, 0
+	.dw 0x57c0, 0xc88d,	0x57ff, 0xc88d,		0x21, 0
+	.dw 0x5840, 0xc88d,	0x587f, 0xc88d,		0x21, 0
+	.dw 0x58c0, 0xc88d,	0x58ff, 0xc88d,		0x21, 0
+	.dw 0x5940, 0xc88d,	0x597f, 0xc88d,		0x21, 0
+	.dw 0x59c0, 0xc88d,	0x5fff, 0xc88d,		0x21, 0
+	.dw 0x6040, 0xc88d,	0x607f, 0xc88d,		0x21, 0
+	.dw 0x60c0, 0xc88d,	0x60ff, 0xc88d,		0x21, 0
+	.dw 0x6140, 0xc88d,	0x617f, 0xc88d,		0x21, 0
+	.dw 0x61c0, 0xc88d,	0x61ff, 0xc88d,		0x21, 0
+	.dw 0x6240, 0xc88d,	0x627f, 0xc88d,		0x21, 0
+	.dw 0x62c0, 0xc88d,	0x62ff, 0xc88d,		0x21, 0
+	.dw 0x6340, 0xc88d,	0x637f, 0xc88d,		0x21, 0
+	.dw 0x63c0, 0xc88d,	0x63ff, 0xc88d,		0x21, 0
+	.dw 0x6440, 0xc88d,	0x647f, 0xc88d,		0x21, 0
+	.dw 0x64c0, 0xc88d,	0x64ff, 0xc88d,		0x21, 0
+	.dw 0x6540, 0xc88d,	0x657f, 0xc88d,		0x21, 0
+	.dw 0x65c0, 0xc88d,	0x65ff, 0xc88d,		0x21, 0
+	.dw 0x6640, 0xc88d,	0x667f, 0xc88d,		0x21, 0
+	.dw 0x66c0, 0xc88d,	0x66ff, 0xc88d,		0x21, 0
+	.dw 0x6740, 0xc88d,	0x677f, 0xc88d,		0x21, 0
+	.dw 0x67c0, 0xc88d,	0x67ff, 0xc88d,		0x21, 0
+	.dw 0x6840, 0xc88d,	0x687f, 0xc88d,		0x21, 0
+	.dw 0x68c0, 0xc88d,	0x68ff, 0xc88d,		0x21, 0
+	.dw 0x6940, 0xc88d,	0x697f, 0xc88d,		0x21, 0
+	.dw 0x69c0, 0xc88d,	0x69ff, 0xc88d,		0x21, 0
+	.dw 0x6a40, 0xc88d,	0x6a7f, 0xc88d,		0x21, 0
+	.dw 0x6ac0, 0xc88d,	0x6aff, 0xc88d,		0x21, 0
+	.dw 0x6b40, 0xc88d,	0x6b7f, 0xc88d,		0x21, 0
+	.dw 0x6bc0, 0xc88d,	0x6bff, 0xc88d,		0x21, 0
+	.dw 0x6c40, 0xc88d,	0x6c7f, 0xc88d,		0x21, 0
+	.dw 0x6cc0, 0xc88d,	0x6cff, 0xc88d,		0x21, 0
+	.dw 0x6d40, 0xc88d,	0x6d7f, 0xc88d,		0x21, 0
+	.dw 0x6dc0, 0xc88d,	0x6dff, 0xc88d,		0x21, 0
+	.dw 0x6e40, 0xc88d,	0x6e7f, 0xc88d,		0x21, 0
+	.dw 0x6ec0, 0xc88d,	0x6eff, 0xc88d,		0x21, 0
+	.dw 0x6f40, 0xc88d,	0x6f7f, 0xc88d,		0x21, 0
+	.dw 0x6fc0, 0xc88d,	0x6fff, 0xc88d,		0x21, 0
+	.dw 0x7040, 0xc88d,	0x707f, 0xc88d,		0x21, 0
+	.dw 0x70c0, 0xc88d,	0x70ff, 0xc88d,		0x21, 0
+	.dw 0x7140, 0xc88d,	0x717f, 0xc88d,		0x21, 0
+	.dw 0x71c0, 0xc88d,	0x71ff, 0xc88d,		0x21, 0
+	.dw 0x7240, 0xc88d,	0x727f, 0xc88d,		0x21, 0
+	.dw 0x72c0, 0xc88d,	0x72ff, 0xc88d,		0x21, 0
+	.dw 0x7340, 0xc88d,	0x737f, 0xc88d,		0x21, 0
+	.dw 0x73c0, 0xc88d,	0x73ff, 0xc88d,		0x21, 0
+	.dw 0x7440, 0xc88d,	0x747f, 0xc88d,		0x21, 0
+	.dw 0x74c0, 0xc88d,	0x74ff, 0xc88d,		0x21, 0
+	.dw 0x7540, 0xc88d,	0x757f, 0xc88d,		0x21, 0
+	.dw 0x75c0, 0xc88d,	0x75ff, 0xc88d,		0x21, 0
+	.dw 0x7640, 0xc88d,	0x767f, 0xc88d,		0x21, 0
+	.dw 0x76c0, 0xc88d,	0x76ff, 0xc88d,		0x21, 0
+	.dw 0x7740, 0xc88d,	0x777f, 0xc88d,		0x21, 0
+	.dw 0x77c0, 0xc88d,	0x77ff, 0xc88d,		0x21, 0
+	.dw 0x7840, 0xc88d,	0x787f, 0xc88d,		0x21, 0
+	.dw 0x78c0, 0xc88d,	0x78ff, 0xc88d,		0x21, 0
+	.dw 0x7940, 0xc88d,	0x797f, 0xc88d,		0x21, 0
+	.dw 0x79c0, 0xc88d,	0x7fff, 0xc88d,		0x21, 0
+	.dw 0x8040, 0xc88d,	0x807f, 0xc88d,		0x21, 0
+	.dw 0x80c0, 0xc88d,	0x80ff, 0xc88d,		0x21, 0
+	.dw 0x8140, 0xc88d,	0x817f, 0xc88d,		0x21, 0
+	.dw 0x81c0, 0xc88d,	0x81ff, 0xc88d,		0x21, 0
+	.dw 0x8240, 0xc88d,	0x827f, 0xc88d,		0x21, 0
+	.dw 0x82c0, 0xc88d,	0x82ff, 0xc88d,		0x21, 0
+	.dw 0x8340, 0xc88d,	0x837f, 0xc88d,		0x21, 0
+	.dw 0x83c0, 0xc88d,	0x83ff, 0xc88d,		0x21, 0
+	.dw 0x8440, 0xc88d,	0x847f, 0xc88d,		0x21, 0
+	.dw 0x84c0, 0xc88d,	0x84ff, 0xc88d,		0x21, 0
+	.dw 0x8540, 0xc88d,	0x857f, 0xc88d,		0x21, 0
+	.dw 0x85c0, 0xc88d,	0x85ff, 0xc88d,		0x21, 0
+	.dw 0x8640, 0xc88d,	0x867f, 0xc88d,		0x21, 0
+	.dw 0x86c0, 0xc88d,	0x86ff, 0xc88d,		0x21, 0
+	.dw 0x8740, 0xc88d,	0x877f, 0xc88d,		0x21, 0
+	.dw 0x87c0, 0xc88d,	0x87ff, 0xc88d,		0x21, 0
+	.dw 0x8840, 0xc88d,	0x887f, 0xc88d,		0x21, 0
+	.dw 0x88c0, 0xc88d,	0x88ff, 0xc88d,		0x21, 0
+	.dw 0x8940, 0xc88d,	0x897f, 0xc88d,		0x21, 0
+	.dw 0x89c0, 0xc88d,	0x89ff, 0xc88d,		0x21, 0
+	.dw 0x8a40, 0xc88d,	0x8a7f, 0xc88d,		0x21, 0
+	.dw 0x8ac0, 0xc88d,	0x8aff, 0xc88d,		0x21, 0
+	.dw 0x8b40, 0xc88d,	0x8b7f, 0xc88d,		0x21, 0
+	.dw 0x8bc0, 0xc88d,	0x8bff, 0xc88d,		0x21, 0
+	.dw 0x8c40, 0xc88d,	0x8c7f, 0xc88d,		0x21, 0
+	.dw 0x8cc0, 0xc88d,	0x8cff, 0xc88d,		0x21, 0
+	.dw 0x8d40, 0xc88d,	0x8d7f, 0xc88d,		0x21, 0
+	.dw 0x8dc0, 0xc88d,	0x8dff, 0xc88d,		0x21, 0
+	.dw 0x8e40, 0xc88d,	0x8e7f, 0xc88d,		0x21, 0
+	.dw 0x8ec0, 0xc88d,	0x8eff, 0xc88d,		0x21, 0
+	.dw 0x8f40, 0xc88d,	0x8f7f, 0xc88d,		0x21, 0
+	.dw 0x8fc0, 0xc88d,	0x8fff, 0xc88d,		0x21, 0
+	.dw 0x9040, 0xc88d,	0x907f, 0xc88d,		0x21, 0
+	.dw 0x90c0, 0xc88d,	0x90ff, 0xc88d,		0x21, 0
+	.dw 0x9140, 0xc88d,	0x917f, 0xc88d,		0x21, 0
+	.dw 0x91c0, 0xc88d,	0x91ff, 0xc88d,		0x21, 0
+	.dw 0x9240, 0xc88d,	0x927f, 0xc88d,		0x21, 0
+	.dw 0x92c0, 0xc88d,	0x92ff, 0xc88d,		0x21, 0
+	.dw 0x9340, 0xc88d,	0x937f, 0xc88d,		0x21, 0
+	.dw 0x93c0, 0xc88d,	0x93ff, 0xc88d,		0x21, 0
+	.dw 0x9440, 0xc88d,	0x947f, 0xc88d,		0x21, 0
+	.dw 0x94c0, 0xc88d,	0x94ff, 0xc88d,		0x21, 0
+	.dw 0x9540, 0xc88d,	0x957f, 0xc88d,		0x21, 0
+	.dw 0x95c0, 0xc88d,	0x95ff, 0xc88d,		0x21, 0
+	.dw 0x9640, 0xc88d,	0x967f, 0xc88d,		0x21, 0
+	.dw 0x96c0, 0xc88d,	0x96ff, 0xc88d,		0x21, 0
+	.dw 0x9740, 0xc88d,	0x977f, 0xc88d,		0x21, 0
+	.dw 0x97c0, 0xc88d,	0x97ff, 0xc88d,		0x21, 0
+	.dw 0x9840, 0xc88d,	0x987f, 0xc88d,		0x21, 0
+	.dw 0x98c0, 0xc88d,	0x98ff, 0xc88d,		0x21, 0
+	.dw 0x9940, 0xc88d,	0x997f, 0xc88d,		0x21, 0
+	.dw 0x99c0, 0xc88d,	0x9fff, 0xc88d,		0x21, 0
+	.dw 0xa040, 0xc88d,	0xa07f, 0xc88d,		0x21, 0
+	.dw 0xa0c0, 0xc88d,	0xa0ff, 0xc88d,		0x21, 0
+	.dw 0xa140, 0xc88d,	0xa17f, 0xc88d,		0x21, 0
+	.dw 0xa1c0, 0xc88d,	0xa1ff, 0xc88d,		0x21, 0
+	.dw 0xa240, 0xc88d,	0xa27f, 0xc88d,		0x21, 0
+	.dw 0xa2c0, 0xc88d,	0xa2ff, 0xc88d,		0x21, 0
+	.dw 0xa340, 0xc88d,	0xa37f, 0xc88d,		0x21, 0
+	.dw 0xa3c0, 0xc88d,	0xa3ff, 0xc88d,		0x21, 0
+	.dw 0xa440, 0xc88d,	0xa47f, 0xc88d,		0x21, 0
+	.dw 0xa4c0, 0xc88d,	0xa4ff, 0xc88d,		0x21, 0
+	.dw 0xa540, 0xc88d,	0xa57f, 0xc88d,		0x21, 0
+	.dw 0xa5c0, 0xc88d,	0xa5ff, 0xc88d,		0x21, 0
+	.dw 0xa640, 0xc88d,	0xa67f, 0xc88d,		0x21, 0
+	.dw 0xa6c0, 0xc88d,	0xa6ff, 0xc88d,		0x21, 0
+	.dw 0xa740, 0xc88d,	0xa77f, 0xc88d,		0x21, 0
+	.dw 0xa7c0, 0xc88d,	0xa7ff, 0xc88d,		0x21, 0
+	.dw 0xa840, 0xc88d,	0xa87f, 0xc88d,		0x21, 0
+	.dw 0xa8c0, 0xc88d,	0xa8ff, 0xc88d,		0x21, 0
+	.dw 0xa940, 0xc88d,	0xa97f, 0xc88d,		0x21, 0
+	.dw 0xa9c0, 0xc88d,	0xa9ff, 0xc88d,		0x21, 0
+	.dw 0xaa40, 0xc88d,	0xaa7f, 0xc88d,		0x21, 0
+	.dw 0xaac0, 0xc88d,	0xaaff, 0xc88d,		0x21, 0
+	.dw 0xab40, 0xc88d,	0xab7f, 0xc88d,		0x21, 0
+	.dw 0xabc0, 0xc88d,	0xabff, 0xc88d,		0x21, 0
+	.dw 0xac40, 0xc88d,	0xac7f, 0xc88d,		0x21, 0
+	.dw 0xacc0, 0xc88d,	0xacff, 0xc88d,		0x21, 0
+	.dw 0xad40, 0xc88d,	0xad7f, 0xc88d,		0x21, 0
+	.dw 0xadc0, 0xc88d,	0xadff, 0xc88d,		0x21, 0
+	.dw 0xae40, 0xc88d,	0xae7f, 0xc88d,		0x21, 0
+	.dw 0xaec0, 0xc88d,	0xaeff, 0xc88d,		0x21, 0
+	.dw 0xaf40, 0xc88d,	0xaf7f, 0xc88d,		0x21, 0
+	.dw 0xafc0, 0xc88d,	0xafff, 0xc88d,		0x21, 0
+	.dw 0xb040, 0xc88d,	0xb07f, 0xc88d,		0x21, 0
+	.dw 0xb0c0, 0xc88d,	0xb0ff, 0xc88d,		0x21, 0
+	.dw 0xb140, 0xc88d,	0xb17f, 0xc88d,		0x21, 0
+	.dw 0xb1c0, 0xc88d,	0xb1ff, 0xc88d,		0x21, 0
+	.dw 0xb240, 0xc88d,	0xb27f, 0xc88d,		0x21, 0
+	.dw 0xb2c0, 0xc88d,	0xb2ff, 0xc88d,		0x21, 0
+	.dw 0xb340, 0xc88d,	0xb37f, 0xc88d,		0x21, 0
+	.dw 0xb3c0, 0xc88d,	0xb3ff, 0xc88d,		0x21, 0
+	.dw 0xb440, 0xc88d,	0xb47f, 0xc88d,		0x21, 0
+	.dw 0xb4c0, 0xc88d,	0xb4ff, 0xc88d,		0x21, 0
+	.dw 0xb540, 0xc88d,	0xb57f, 0xc88d,		0x21, 0
+	.dw 0xb5c0, 0xc88d,	0xb5ff, 0xc88d,		0x21, 0
+	.dw 0xb640, 0xc88d,	0xb67f, 0xc88d,		0x21, 0
+	.dw 0xb6c0, 0xc88d,	0xb6ff, 0xc88d,		0x21, 0
+	.dw 0xb740, 0xc88d,	0xb77f, 0xc88d,		0x21, 0
+	.dw 0xb7c0, 0xc88d,	0xb7ff, 0xc88d,		0x21, 0
+	.dw 0xb840, 0xc88d,	0xb87f, 0xc88d,		0x21, 0
+	.dw 0xb8c0, 0xc88d,	0xb8ff, 0xc88d,		0x21, 0
+	.dw 0xb940, 0xc88d,	0xb97f, 0xc88d,		0x21, 0
+	.dw 0xb9c0, 0xc88d,	0xbfff, 0xc88d,		0x21, 0
+	.dw 0xc040, 0xc88d,	0xc07f, 0xc88d,		0x21, 0
+	.dw 0xc0c0, 0xc88d,	0xc0ff, 0xc88d,		0x21, 0
+	.dw 0xc140, 0xc88d,	0xc17f, 0xc88d,		0x21, 0
+	.dw 0xc1c0, 0xc88d,	0xc1ff, 0xc88d,		0x21, 0
+	.dw 0xc240, 0xc88d,	0xc27f, 0xc88d,		0x21, 0
+	.dw 0xc2c0, 0xc88d,	0xc2ff, 0xc88d,		0x21, 0
+	.dw 0xc340, 0xc88d,	0xc37f, 0xc88d,		0x21, 0
+	.dw 0xc3c0, 0xc88d,	0xc3ff, 0xc88d,		0x21, 0
+	.dw 0xc440, 0xc88d,	0xc47f, 0xc88d,		0x21, 0
+	.dw 0xc4c0, 0xc88d,	0xc4ff, 0xc88d,		0x21, 0
+	.dw 0xc540, 0xc88d,	0xc57f, 0xc88d,		0x21, 0
+	.dw 0xc5c0, 0xc88d,	0xc5ff, 0xc88d,		0x21, 0
+	.dw 0xc640, 0xc88d,	0xc67f, 0xc88d,		0x21, 0
+	.dw 0xc6c0, 0xc88d,	0xc6ff, 0xc88d,		0x21, 0
+	.dw 0xc740, 0xc88d,	0xc77f, 0xc88d,		0x21, 0
+	.dw 0xc7c0, 0xc88d,	0xc7ff, 0xc88d,		0x21, 0
+	.dw 0xc840, 0xc88d,	0xc87f, 0xc88d,		0x21, 0
+	.dw 0xc8c0, 0xc88d,	0xc8ff, 0xc88d,		0x21, 0
+	.dw 0xc940, 0xc88d,	0xc97f, 0xc88d,		0x21, 0
+	.dw 0xc9c0, 0xc88d,	0xc9ff, 0xc88d,		0x21, 0
+	.dw 0xca40, 0xc88d,	0xca7f, 0xc88d,		0x21, 0
+	.dw 0xcac0, 0xc88d,	0xcaff, 0xc88d,		0x21, 0
+	.dw 0xcb40, 0xc88d,	0xcb7f, 0xc88d,		0x21, 0
+	.dw 0xcbc0, 0xc88d,	0xcbff, 0xc88d,		0x21, 0
+	.dw 0xcc40, 0xc88d,	0xcc7f, 0xc88d,		0x21, 0
+	.dw 0xccc0, 0xc88d,	0xccff, 0xc88d,		0x21, 0
+	.dw 0xcd40, 0xc88d,	0xcd7f, 0xc88d,		0x21, 0
+	.dw 0xcdc0, 0xc88d,	0xcdff, 0xc88d,		0x21, 0
+	.dw 0xce40, 0xc88d,	0xce7f, 0xc88d,		0x21, 0
+	.dw 0xcec0, 0xc88d,	0xceff, 0xc88d,		0x21, 0
+	.dw 0xcf40, 0xc88d,	0xcf7f, 0xc88d,		0x21, 0
+	.dw 0xcfc0, 0xc88d,	0xcfff, 0xc88d,		0x21, 0
+	.dw 0xd040, 0xc88d,	0xd07f, 0xc88d,		0x21, 0
+	.dw 0xd0c0, 0xc88d,	0xd0ff, 0xc88d,		0x21, 0
+	.dw 0xd140, 0xc88d,	0xd17f, 0xc88d,		0x21, 0
+	.dw 0xd1c0, 0xc88d,	0xd1ff, 0xc88d,		0x21, 0
+	.dw 0xd240, 0xc88d,	0xd27f, 0xc88d,		0x21, 0
+	.dw 0xd2c0, 0xc88d,	0xd2ff, 0xc88d,		0x21, 0
+	.dw 0xd340, 0xc88d,	0xd37f, 0xc88d,		0x21, 0
+	.dw 0xd3c0, 0xc88d,	0xd3ff, 0xc88d,		0x21, 0
+	.dw 0xd440, 0xc88d,	0xd47f, 0xc88d,		0x21, 0
+	.dw 0xd4c0, 0xc88d,	0xd4ff, 0xc88d,		0x21, 0
+	.dw 0xd540, 0xc88d,	0xd57f, 0xc88d,		0x21, 0
+	.dw 0xd5c0, 0xc88d,	0xd5ff, 0xc88d,		0x21, 0
+	.dw 0xd640, 0xc88d,	0xd67f, 0xc88d,		0x21, 0
+	.dw 0xd6c0, 0xc88d,	0xd6ff, 0xc88d,		0x21, 0
+	.dw 0xd740, 0xc88d,	0xd77f, 0xc88d,		0x21, 0
+	.dw 0xd7c0, 0xc88d,	0xd7ff, 0xc88d,		0x21, 0
+	.dw 0xd840, 0xc88d,	0xd87f, 0xc88d,		0x21, 0
+	.dw 0xd8c0, 0xc88d,	0xd8ff, 0xc88d,		0x21, 0
+	.dw 0xd940, 0xc88d,	0xd97f, 0xc88d,		0x21, 0
+	.dw 0xd9c0, 0xc88d,	0xdfff, 0xc88d,		0x21, 0
+	.dw 0xe040, 0xc88d,	0xe07f, 0xc88d,		0x21, 0
+	.dw 0xe0c0, 0xc88d,	0xe0ff, 0xc88d,		0x21, 0
+	.dw 0xe140, 0xc88d,	0xe17f, 0xc88d,		0x21, 0
+	.dw 0xe1c0, 0xc88d,	0xe1ff, 0xc88d,		0x21, 0
+	.dw 0xe240, 0xc88d,	0xe27f, 0xc88d,		0x21, 0
+	.dw 0xe2c0, 0xc88d,	0xe2ff, 0xc88d,		0x21, 0
+	.dw 0xe340, 0xc88d,	0xe37f, 0xc88d,		0x21, 0
+	.dw 0xe3c0, 0xc88d,	0xe3ff, 0xc88d,		0x21, 0
+	.dw 0xe440, 0xc88d,	0xe47f, 0xc88d,		0x21, 0
+	.dw 0xe4c0, 0xc88d,	0xe4ff, 0xc88d,		0x21, 0
+	.dw 0xe540, 0xc88d,	0xe57f, 0xc88d,		0x21, 0
+	.dw 0xe5c0, 0xc88d,	0xe5ff, 0xc88d,		0x21, 0
+	.dw 0xe640, 0xc88d,	0xe67f, 0xc88d,		0x21, 0
+	.dw 0xe6c0, 0xc88d,	0xe6ff, 0xc88d,		0x21, 0
+	.dw 0xe740, 0xc88d,	0xe77f, 0xc88d,		0x21, 0
+	.dw 0xe7c0, 0xc88d,	0xe7ff, 0xc88d,		0x21, 0
+	.dw 0xe840, 0xc88d,	0xe87f, 0xc88d,		0x21, 0
+	.dw 0xe8c0, 0xc88d,	0xe8ff, 0xc88d,		0x21, 0
+	.dw 0xe940, 0xc88d,	0xe97f, 0xc88d,		0x21, 0
+	.dw 0xe9c0, 0xc88d,	0xe9ff, 0xc88d,		0x21, 0
+	.dw 0xea40, 0xc88d,	0xea7f, 0xc88d,		0x21, 0
+	.dw 0xeac0, 0xc88d,	0xeaff, 0xc88d,		0x21, 0
+	.dw 0xeb40, 0xc88d,	0xeb7f, 0xc88d,		0x21, 0
+	.dw 0xebc0, 0xc88d,	0xebff, 0xc88d,		0x21, 0
+	.dw 0xec40, 0xc88d,	0xec7f, 0xc88d,		0x21, 0
+	.dw 0xecc0, 0xc88d,	0xecff, 0xc88d,		0x21, 0
+	.dw 0xed40, 0xc88d,	0xed7f, 0xc88d,		0x21, 0
+	.dw 0xedc0, 0xc88d,	0xedff, 0xc88d,		0x21, 0
+	.dw 0xee40, 0xc88d,	0xee7f, 0xc88d,		0x21, 0
+	.dw 0xeec0, 0xc88d,	0xeeff, 0xc88d,		0x21, 0
+	.dw 0xef40, 0xc88d,	0xef7f, 0xc88d,		0x21, 0
+	.dw 0xefc0, 0xc88d,	0xefff, 0xc88d,		0x21, 0
+	.dw 0xf040, 0xc88d,	0xf07f, 0xc88d,		0x21, 0
+	.dw 0xf0c0, 0xc88d,	0xf0ff, 0xc88d,		0x21, 0
+	.dw 0xf140, 0xc88d,	0xf17f, 0xc88d,		0x21, 0
+	.dw 0xf1c0, 0xc88d,	0xf1ff, 0xc88d,		0x21, 0
+	.dw 0xf240, 0xc88d,	0xf27f, 0xc88d,		0x21, 0
+	.dw 0xf2c0, 0xc88d,	0xf2ff, 0xc88d,		0x21, 0
+	.dw 0xf340, 0xc88d,	0xf37f, 0xc88d,		0x21, 0
+	.dw 0xf3c0, 0xc88d,	0xf3ff, 0xc88d,		0x21, 0
+	.dw 0xf440, 0xc88d,	0xf47f, 0xc88d,		0x21, 0
+	.dw 0xf4c0, 0xc88d,	0xf4ff, 0xc88d,		0x21, 0
+	.dw 0xf540, 0xc88d,	0xf57f, 0xc88d,		0x21, 0
+	.dw 0xf5c0, 0xc88d,	0xf5ff, 0xc88d,		0x21, 0
+	.dw 0xf640, 0xc88d,	0xf67f, 0xc88d,		0x21, 0
+	.dw 0xf6c0, 0xc88d,	0xf6ff, 0xc88d,		0x21, 0
+	.dw 0xf740, 0xc88d,	0xf77f, 0xc88d,		0x21, 0
+	.dw 0xf7c0, 0xc88d,	0xf7ff, 0xc88d,		0x21, 0
+	.dw 0xf840, 0xc88d,	0xf87f, 0xc88d,		0x21, 0
+	.dw 0xf8c0, 0xc88d,	0xf8ff, 0xc88d,		0x21, 0
+	.dw 0xf940, 0xc88d,	0xf97f, 0xc88d,		0x21, 0
+	.dw 0xf9c0, 0xc88d,	0xffff, 0xc88d,		0x21, 0
+	.dw 0x0040, 0xc88e,	0x007f, 0xc88e,		0x21, 0
+	.dw 0x00c0, 0xc88e,	0x00ff, 0xc88e,		0x21, 0
+	.dw 0x0140, 0xc88e,	0x017f, 0xc88e,		0x21, 0
+	.dw 0x01c0, 0xc88e,	0x01ff, 0xc88e,		0x21, 0
+	.dw 0x0240, 0xc88e,	0x027f, 0xc88e,		0x21, 0
+	.dw 0x02c0, 0xc88e,	0x02ff, 0xc88e,		0x21, 0
+	.dw 0x0340, 0xc88e,	0x037f, 0xc88e,		0x21, 0
+	.dw 0x03c0, 0xc88e,	0x03ff, 0xc88e,		0x21, 0
+	.dw 0x0440, 0xc88e,	0x047f, 0xc88e,		0x21, 0
+	.dw 0x04c0, 0xc88e,	0x04ff, 0xc88e,		0x21, 0
+	.dw 0x0540, 0xc88e,	0x057f, 0xc88e,		0x21, 0
+	.dw 0x05c0, 0xc88e,	0x05ff, 0xc88e,		0x21, 0
+	.dw 0x0640, 0xc88e,	0x067f, 0xc88e,		0x21, 0
+	.dw 0x06c0, 0xc88e,	0x06ff, 0xc88e,		0x21, 0
+	.dw 0x0740, 0xc88e,	0x077f, 0xc88e,		0x21, 0
+	.dw 0x07c0, 0xc88e,	0x07ff, 0xc88e,		0x21, 0
+	.dw 0x0840, 0xc88e,	0x087f, 0xc88e,		0x21, 0
+	.dw 0x08c0, 0xc88e,	0x08ff, 0xc88e,		0x21, 0
+	.dw 0x0940, 0xc88e,	0x097f, 0xc88e,		0x21, 0
+	.dw 0x09c0, 0xc88e,	0x09ff, 0xc88e,		0x21, 0
+	.dw 0x0a40, 0xc88e,	0x0a7f, 0xc88e,		0x21, 0
+	.dw 0x0ac0, 0xc88e,	0x0aff, 0xc88e,		0x21, 0
+	.dw 0x0b40, 0xc88e,	0x0b7f, 0xc88e,		0x21, 0
+	.dw 0x0bc0, 0xc88e,	0x0bff, 0xc88e,		0x21, 0
+	.dw 0x0c40, 0xc88e,	0x0c7f, 0xc88e,		0x21, 0
+	.dw 0x0cc0, 0xc88e,	0x0cff, 0xc88e,		0x21, 0
+	.dw 0x0d40, 0xc88e,	0x0d7f, 0xc88e,		0x21, 0
+	.dw 0x0dc0, 0xc88e,	0x0dff, 0xc88e,		0x21, 0
+	.dw 0x0e40, 0xc88e,	0x0e7f, 0xc88e,		0x21, 0
+	.dw 0x0ec0, 0xc88e,	0x0eff, 0xc88e,		0x21, 0
+	.dw 0x0f40, 0xc88e,	0x0f7f, 0xc88e,		0x21, 0
+	.dw 0x0fc0, 0xc88e,	0x0fff, 0xc88e,		0x21, 0
+	.dw 0x1040, 0xc88e,	0x107f, 0xc88e,		0x21, 0
+	.dw 0x10c0, 0xc88e,	0x10ff, 0xc88e,		0x21, 0
+	.dw 0x1140, 0xc88e,	0x117f, 0xc88e,		0x21, 0
+	.dw 0x11c0, 0xc88e,	0x11ff, 0xc88e,		0x21, 0
+	.dw 0x1240, 0xc88e,	0x127f, 0xc88e,		0x21, 0
+	.dw 0x12c0, 0xc88e,	0x12ff, 0xc88e,		0x21, 0
+	.dw 0x1340, 0xc88e,	0x137f, 0xc88e,		0x21, 0
+	.dw 0x13c0, 0xc88e,	0x13ff, 0xc88e,		0x21, 0
+	.dw 0x1440, 0xc88e,	0x147f, 0xc88e,		0x21, 0
+	.dw 0x14c0, 0xc88e,	0x14ff, 0xc88e,		0x21, 0
+	.dw 0x1540, 0xc88e,	0x157f, 0xc88e,		0x21, 0
+	.dw 0x15c0, 0xc88e,	0x15ff, 0xc88e,		0x21, 0
+	.dw 0x1640, 0xc88e,	0x167f, 0xc88e,		0x21, 0
+	.dw 0x16c0, 0xc88e,	0x16ff, 0xc88e,		0x21, 0
+	.dw 0x1740, 0xc88e,	0x177f, 0xc88e,		0x21, 0
+	.dw 0x17c0, 0xc88e,	0x17ff, 0xc88e,		0x21, 0
+	.dw 0x1840, 0xc88e,	0x187f, 0xc88e,		0x21, 0
+	.dw 0x18c0, 0xc88e,	0x18ff, 0xc88e,		0x21, 0
+	.dw 0x1940, 0xc88e,	0x197f, 0xc88e,		0x21, 0
+	.dw 0x19c0, 0xc88e,	0x1fff, 0xc88e,		0x21, 0
+	.dw 0x2040, 0xc88e,	0x207f, 0xc88e,		0x21, 0
+	.dw 0x20c0, 0xc88e,	0x20ff, 0xc88e,		0x21, 0
+	.dw 0x2140, 0xc88e,	0x217f, 0xc88e,		0x21, 0
+	.dw 0x21c0, 0xc88e,	0x21ff, 0xc88e,		0x21, 0
+	.dw 0x2240, 0xc88e,	0x227f, 0xc88e,		0x21, 0
+	.dw 0x22c0, 0xc88e,	0x22ff, 0xc88e,		0x21, 0
+	.dw 0x2340, 0xc88e,	0x237f, 0xc88e,		0x21, 0
+	.dw 0x23c0, 0xc88e,	0x23ff, 0xc88e,		0x21, 0
+	.dw 0x2440, 0xc88e,	0x247f, 0xc88e,		0x21, 0
+	.dw 0x24c0, 0xc88e,	0x24ff, 0xc88e,		0x21, 0
+	.dw 0x2540, 0xc88e,	0x257f, 0xc88e,		0x21, 0
+	.dw 0x25c0, 0xc88e,	0x25ff, 0xc88e,		0x21, 0
+	.dw 0x2640, 0xc88e,	0x267f, 0xc88e,		0x21, 0
+	.dw 0x26c0, 0xc88e,	0x26ff, 0xc88e,		0x21, 0
+	.dw 0x2740, 0xc88e,	0x277f, 0xc88e,		0x21, 0
+	.dw 0x27c0, 0xc88e,	0x27ff, 0xc88e,		0x21, 0
+	.dw 0x2840, 0xc88e,	0x287f, 0xc88e,		0x21, 0
+	.dw 0x28c0, 0xc88e,	0x28ff, 0xc88e,		0x21, 0
+	.dw 0x2940, 0xc88e,	0x297f, 0xc88e,		0x21, 0
+	.dw 0x29c0, 0xc88e,	0x29ff, 0xc88e,		0x21, 0
+	.dw 0x2a40, 0xc88e,	0x2a7f, 0xc88e,		0x21, 0
+	.dw 0x2ac0, 0xc88e,	0x2aff, 0xc88e,		0x21, 0
+	.dw 0x2b40, 0xc88e,	0x2b7f, 0xc88e,		0x21, 0
+	.dw 0x2bc0, 0xc88e,	0x2bff, 0xc88e,		0x21, 0
+	.dw 0x2c40, 0xc88e,	0x2c7f, 0xc88e,		0x21, 0
+	.dw 0x2cc0, 0xc88e,	0x2cff, 0xc88e,		0x21, 0
+	.dw 0x2d40, 0xc88e,	0x2d7f, 0xc88e,		0x21, 0
+	.dw 0x2dc0, 0xc88e,	0x2dff, 0xc88e,		0x21, 0
+	.dw 0x2e40, 0xc88e,	0x2e7f, 0xc88e,		0x21, 0
+	.dw 0x2ec0, 0xc88e,	0x2eff, 0xc88e,		0x21, 0
+	.dw 0x2f40, 0xc88e,	0x2f7f, 0xc88e,		0x21, 0
+	.dw 0x2fc0, 0xc88e,	0x2fff, 0xc88e,		0x21, 0
+	.dw 0x3040, 0xc88e,	0x307f, 0xc88e,		0x21, 0
+	.dw 0x30c0, 0xc88e,	0x30ff, 0xc88e,		0x21, 0
+	.dw 0x3140, 0xc88e,	0x317f, 0xc88e,		0x21, 0
+	.dw 0x31c0, 0xc88e,	0x31ff, 0xc88e,		0x21, 0
+	.dw 0x3240, 0xc88e,	0x327f, 0xc88e,		0x21, 0
+	.dw 0x32c0, 0xc88e,	0x32ff, 0xc88e,		0x21, 0
+	.dw 0x3340, 0xc88e,	0x337f, 0xc88e,		0x21, 0
+	.dw 0x33c0, 0xc88e,	0x33ff, 0xc88e,		0x21, 0
+	.dw 0x3440, 0xc88e,	0x347f, 0xc88e,		0x21, 0
+	.dw 0x34c0, 0xc88e,	0x34ff, 0xc88e,		0x21, 0
+	.dw 0x3540, 0xc88e,	0x357f, 0xc88e,		0x21, 0
+	.dw 0x35c0, 0xc88e,	0x35ff, 0xc88e,		0x21, 0
+	.dw 0x3640, 0xc88e,	0x367f, 0xc88e,		0x21, 0
+	.dw 0x36c0, 0xc88e,	0x36ff, 0xc88e,		0x21, 0
+	.dw 0x3740, 0xc88e,	0x377f, 0xc88e,		0x21, 0
+	.dw 0x37c0, 0xc88e,	0x37ff, 0xc88e,		0x21, 0
+	.dw 0x3840, 0xc88e,	0x387f, 0xc88e,		0x21, 0
+	.dw 0x38c0, 0xc88e,	0x38ff, 0xc88e,		0x21, 0
+	.dw 0x3940, 0xc88e,	0x397f, 0xc88e,		0x21, 0
+	.dw 0x39c0, 0xc88e,	0x3fff, 0xc88e,		0x21, 0
+	.dw 0x4040, 0xc88e,	0x407f, 0xc88e,		0x21, 0
+	.dw 0x40c0, 0xc88e,	0x40ff, 0xc88e,		0x21, 0
+	.dw 0x4140, 0xc88e,	0x417f, 0xc88e,		0x21, 0
+	.dw 0x41c0, 0xc88e,	0x41ff, 0xc88e,		0x21, 0
+	.dw 0x4240, 0xc88e,	0x427f, 0xc88e,		0x21, 0
+	.dw 0x42c0, 0xc88e,	0x42ff, 0xc88e,		0x21, 0
+	.dw 0x4340, 0xc88e,	0x437f, 0xc88e,		0x21, 0
+	.dw 0x43c0, 0xc88e,	0x43ff, 0xc88e,		0x21, 0
+	.dw 0x4440, 0xc88e,	0x447f, 0xc88e,		0x21, 0
+	.dw 0x44c0, 0xc88e,	0x44ff, 0xc88e,		0x21, 0
+	.dw 0x4540, 0xc88e,	0x457f, 0xc88e,		0x21, 0
+	.dw 0x45c0, 0xc88e,	0x45ff, 0xc88e,		0x21, 0
+	.dw 0x4640, 0xc88e,	0x467f, 0xc88e,		0x21, 0
+	.dw 0x46c0, 0xc88e,	0x46ff, 0xc88e,		0x21, 0
+	.dw 0x4740, 0xc88e,	0x477f, 0xc88e,		0x21, 0
+	.dw 0x47c0, 0xc88e,	0x47ff, 0xc88e,		0x21, 0
+	.dw 0x4840, 0xc88e,	0x487f, 0xc88e,		0x21, 0
+	.dw 0x48c0, 0xc88e,	0x48ff, 0xc88e,		0x21, 0
+	.dw 0x4940, 0xc88e,	0x497f, 0xc88e,		0x21, 0
+	.dw 0x49c0, 0xc88e,	0x49ff, 0xc88e,		0x21, 0
+	.dw 0x4a40, 0xc88e,	0x4a7f, 0xc88e,		0x21, 0
+	.dw 0x4ac0, 0xc88e,	0x4aff, 0xc88e,		0x21, 0
+	.dw 0x4b40, 0xc88e,	0x4b7f, 0xc88e,		0x21, 0
+	.dw 0x4bc0, 0xc88e,	0x4bff, 0xc88e,		0x21, 0
+	.dw 0x4c40, 0xc88e,	0x4c7f, 0xc88e,		0x21, 0
+	.dw 0x4cc0, 0xc88e,	0x4cff, 0xc88e,		0x21, 0
+	.dw 0x4d40, 0xc88e,	0x4d7f, 0xc88e,		0x21, 0
+	.dw 0x4dc0, 0xc88e,	0x4dff, 0xc88e,		0x21, 0
+	.dw 0x4e40, 0xc88e,	0x4e7f, 0xc88e,		0x21, 0
+	.dw 0x4ec0, 0xc88e,	0x4eff, 0xc88e,		0x21, 0
+	.dw 0x4f40, 0xc88e,	0x4f7f, 0xc88e,		0x21, 0
+	.dw 0x4fc0, 0xc88e,	0x4fff, 0xc88e,		0x21, 0
+	.dw 0x5040, 0xc88e,	0x507f, 0xc88e,		0x21, 0
+	.dw 0x50c0, 0xc88e,	0x50ff, 0xc88e,		0x21, 0
+	.dw 0x5140, 0xc88e,	0x517f, 0xc88e,		0x21, 0
+	.dw 0x51c0, 0xc88e,	0x51ff, 0xc88e,		0x21, 0
+	.dw 0x5240, 0xc88e,	0x527f, 0xc88e,		0x21, 0
+	.dw 0x52c0, 0xc88e,	0x52ff, 0xc88e,		0x21, 0
+	.dw 0x5340, 0xc88e,	0x537f, 0xc88e,		0x21, 0
+	.dw 0x53c0, 0xc88e,	0x53ff, 0xc88e,		0x21, 0
+	.dw 0x5440, 0xc88e,	0x547f, 0xc88e,		0x21, 0
+	.dw 0x54c0, 0xc88e,	0x54ff, 0xc88e,		0x21, 0
+	.dw 0x5540, 0xc88e,	0x557f, 0xc88e,		0x21, 0
+	.dw 0x55c0, 0xc88e,	0x55ff, 0xc88e,		0x21, 0
+	.dw 0x5640, 0xc88e,	0x567f, 0xc88e,		0x21, 0
+	.dw 0x56c0, 0xc88e,	0x56ff, 0xc88e,		0x21, 0
+	.dw 0x5740, 0xc88e,	0x577f, 0xc88e,		0x21, 0
+	.dw 0x57c0, 0xc88e,	0x57ff, 0xc88e,		0x21, 0
+	.dw 0x5840, 0xc88e,	0x587f, 0xc88e,		0x21, 0
+	.dw 0x58c0, 0xc88e,	0x58ff, 0xc88e,		0x21, 0
+	.dw 0x5940, 0xc88e,	0x597f, 0xc88e,		0x21, 0
+	.dw 0x59c0, 0xc88e,	0x5fff, 0xc88e,		0x21, 0
+	.dw 0x6040, 0xc88e,	0x607f, 0xc88e,		0x21, 0
+	.dw 0x60c0, 0xc88e,	0x60ff, 0xc88e,		0x21, 0
+	.dw 0x6140, 0xc88e,	0x617f, 0xc88e,		0x21, 0
+	.dw 0x61c0, 0xc88e,	0x61ff, 0xc88e,		0x21, 0
+	.dw 0x6240, 0xc88e,	0x627f, 0xc88e,		0x21, 0
+	.dw 0x62c0, 0xc88e,	0x62ff, 0xc88e,		0x21, 0
+	.dw 0x6340, 0xc88e,	0x637f, 0xc88e,		0x21, 0
+	.dw 0x63c0, 0xc88e,	0x63ff, 0xc88e,		0x21, 0
+	.dw 0x6440, 0xc88e,	0x647f, 0xc88e,		0x21, 0
+	.dw 0x64c0, 0xc88e,	0x64ff, 0xc88e,		0x21, 0
+	.dw 0x6540, 0xc88e,	0x657f, 0xc88e,		0x21, 0
+	.dw 0x65c0, 0xc88e,	0x65ff, 0xc88e,		0x21, 0
+	.dw 0x6640, 0xc88e,	0x667f, 0xc88e,		0x21, 0
+	.dw 0x66c0, 0xc88e,	0x66ff, 0xc88e,		0x21, 0
+	.dw 0x6740, 0xc88e,	0x677f, 0xc88e,		0x21, 0
+	.dw 0x67c0, 0xc88e,	0x67ff, 0xc88e,		0x21, 0
+	.dw 0x6840, 0xc88e,	0x687f, 0xc88e,		0x21, 0
+	.dw 0x68c0, 0xc88e,	0x68ff, 0xc88e,		0x21, 0
+	.dw 0x6940, 0xc88e,	0x697f, 0xc88e,		0x21, 0
+	.dw 0x69c0, 0xc88e,	0x69ff, 0xc88e,		0x21, 0
+	.dw 0x6a40, 0xc88e,	0x6a7f, 0xc88e,		0x21, 0
+	.dw 0x6ac0, 0xc88e,	0x6aff, 0xc88e,		0x21, 0
+	.dw 0x6b40, 0xc88e,	0x6b7f, 0xc88e,		0x21, 0
+	.dw 0x6bc0, 0xc88e,	0x6bff, 0xc88e,		0x21, 0
+	.dw 0x6c40, 0xc88e,	0x6c7f, 0xc88e,		0x21, 0
+	.dw 0x6cc0, 0xc88e,	0x6cff, 0xc88e,		0x21, 0
+	.dw 0x6d40, 0xc88e,	0x6d7f, 0xc88e,		0x21, 0
+	.dw 0x6dc0, 0xc88e,	0x6dff, 0xc88e,		0x21, 0
+	.dw 0x6e40, 0xc88e,	0x6e7f, 0xc88e,		0x21, 0
+	.dw 0x6ec0, 0xc88e,	0x6eff, 0xc88e,		0x21, 0
+	.dw 0x6f40, 0xc88e,	0x6f7f, 0xc88e,		0x21, 0
+	.dw 0x6fc0, 0xc88e,	0x6fff, 0xc88e,		0x21, 0
+	.dw 0x7040, 0xc88e,	0x707f, 0xc88e,		0x21, 0
+	.dw 0x70c0, 0xc88e,	0x70ff, 0xc88e,		0x21, 0
+	.dw 0x7140, 0xc88e,	0x717f, 0xc88e,		0x21, 0
+	.dw 0x71c0, 0xc88e,	0x71ff, 0xc88e,		0x21, 0
+	.dw 0x7240, 0xc88e,	0x727f, 0xc88e,		0x21, 0
+	.dw 0x72c0, 0xc88e,	0x72ff, 0xc88e,		0x21, 0
+	.dw 0x7340, 0xc88e,	0x737f, 0xc88e,		0x21, 0
+	.dw 0x73c0, 0xc88e,	0x73ff, 0xc88e,		0x21, 0
+	.dw 0x7440, 0xc88e,	0x747f, 0xc88e,		0x21, 0
+	.dw 0x74c0, 0xc88e,	0x74ff, 0xc88e,		0x21, 0
+	.dw 0x7540, 0xc88e,	0x757f, 0xc88e,		0x21, 0
+	.dw 0x75c0, 0xc88e,	0x75ff, 0xc88e,		0x21, 0
+	.dw 0x7640, 0xc88e,	0x767f, 0xc88e,		0x21, 0
+	.dw 0x76c0, 0xc88e,	0x76ff, 0xc88e,		0x21, 0
+	.dw 0x7740, 0xc88e,	0x777f, 0xc88e,		0x21, 0
+	.dw 0x77c0, 0xc88e,	0x77ff, 0xc88e,		0x21, 0
+	.dw 0x7840, 0xc88e,	0x787f, 0xc88e,		0x21, 0
+	.dw 0x78c0, 0xc88e,	0x78ff, 0xc88e,		0x21, 0
+	.dw 0x7940, 0xc88e,	0x797f, 0xc88e,		0x21, 0
+	.dw 0x79c0, 0xc88e,	0x7fff, 0xc88e,		0x21, 0
+	.dw 0x8040, 0xc88e,	0x807f, 0xc88e,		0x21, 0
+	.dw 0x80c0, 0xc88e,	0x80ff, 0xc88e,		0x21, 0
+	.dw 0x8140, 0xc88e,	0x817f, 0xc88e,		0x21, 0
+	.dw 0x81c0, 0xc88e,	0x81ff, 0xc88e,		0x21, 0
+	.dw 0x8240, 0xc88e,	0x827f, 0xc88e,		0x21, 0
+	.dw 0x82c0, 0xc88e,	0x82ff, 0xc88e,		0x21, 0
+	.dw 0x8340, 0xc88e,	0x837f, 0xc88e,		0x21, 0
+	.dw 0x83c0, 0xc88e,	0x83ff, 0xc88e,		0x21, 0
+	.dw 0x8440, 0xc88e,	0x847f, 0xc88e,		0x21, 0
+	.dw 0x84c0, 0xc88e,	0x84ff, 0xc88e,		0x21, 0
+	.dw 0x8540, 0xc88e,	0x857f, 0xc88e,		0x21, 0
+	.dw 0x85c0, 0xc88e,	0x85ff, 0xc88e,		0x21, 0
+	.dw 0x8640, 0xc88e,	0x867f, 0xc88e,		0x21, 0
+	.dw 0x86c0, 0xc88e,	0x86ff, 0xc88e,		0x21, 0
+	.dw 0x8740, 0xc88e,	0x877f, 0xc88e,		0x21, 0
+	.dw 0x87c0, 0xc88e,	0x87ff, 0xc88e,		0x21, 0
+	.dw 0x8840, 0xc88e,	0x887f, 0xc88e,		0x21, 0
+	.dw 0x88c0, 0xc88e,	0x88ff, 0xc88e,		0x21, 0
+	.dw 0x8940, 0xc88e,	0x897f, 0xc88e,		0x21, 0
+	.dw 0x89c0, 0xc88e,	0x89ff, 0xc88e,		0x21, 0
+	.dw 0x8a40, 0xc88e,	0x8a7f, 0xc88e,		0x21, 0
+	.dw 0x8ac0, 0xc88e,	0x8aff, 0xc88e,		0x21, 0
+	.dw 0x8b40, 0xc88e,	0x8b7f, 0xc88e,		0x21, 0
+	.dw 0x8bc0, 0xc88e,	0x8bff, 0xc88e,		0x21, 0
+	.dw 0x8c40, 0xc88e,	0x8c7f, 0xc88e,		0x21, 0
+	.dw 0x8cc0, 0xc88e,	0x8cff, 0xc88e,		0x21, 0
+	.dw 0x8d40, 0xc88e,	0x8d7f, 0xc88e,		0x21, 0
+	.dw 0x8dc0, 0xc88e,	0x8dff, 0xc88e,		0x21, 0
+	.dw 0x8e40, 0xc88e,	0x8e7f, 0xc88e,		0x21, 0
+	.dw 0x8ec0, 0xc88e,	0x8eff, 0xc88e,		0x21, 0
+	.dw 0x8f40, 0xc88e,	0x8f7f, 0xc88e,		0x21, 0
+	.dw 0x8fc0, 0xc88e,	0x8fff, 0xc88e,		0x21, 0
+	.dw 0x9040, 0xc88e,	0x907f, 0xc88e,		0x21, 0
+	.dw 0x90c0, 0xc88e,	0x90ff, 0xc88e,		0x21, 0
+	.dw 0x9140, 0xc88e,	0x917f, 0xc88e,		0x21, 0
+	.dw 0x91c0, 0xc88e,	0x91ff, 0xc88e,		0x21, 0
+	.dw 0x9240, 0xc88e,	0x927f, 0xc88e,		0x21, 0
+	.dw 0x92c0, 0xc88e,	0x92ff, 0xc88e,		0x21, 0
+	.dw 0x9340, 0xc88e,	0x937f, 0xc88e,		0x21, 0
+	.dw 0x93c0, 0xc88e,	0x93ff, 0xc88e,		0x21, 0
+	.dw 0x9440, 0xc88e,	0x947f, 0xc88e,		0x21, 0
+	.dw 0x94c0, 0xc88e,	0x94ff, 0xc88e,		0x21, 0
+	.dw 0x9540, 0xc88e,	0x957f, 0xc88e,		0x21, 0
+	.dw 0x95c0, 0xc88e,	0x95ff, 0xc88e,		0x21, 0
+	.dw 0x9640, 0xc88e,	0x967f, 0xc88e,		0x21, 0
+	.dw 0x96c0, 0xc88e,	0x96ff, 0xc88e,		0x21, 0
+	.dw 0x9740, 0xc88e,	0x977f, 0xc88e,		0x21, 0
+	.dw 0x97c0, 0xc88e,	0x97ff, 0xc88e,		0x21, 0
+	.dw 0x9840, 0xc88e,	0x987f, 0xc88e,		0x21, 0
+	.dw 0x98c0, 0xc88e,	0x98ff, 0xc88e,		0x21, 0
+	.dw 0x9940, 0xc88e,	0x997f, 0xc88e,		0x21, 0
+	.dw 0x99c0, 0xc88e,	0x9fff, 0xc88e,		0x21, 0
+	.dw 0xa040, 0xc88e,	0xa07f, 0xc88e,		0x21, 0
+	.dw 0xa0c0, 0xc88e,	0xa0ff, 0xc88e,		0x21, 0
+	.dw 0xa140, 0xc88e,	0xa17f, 0xc88e,		0x21, 0
+	.dw 0xa1c0, 0xc88e,	0xa1ff, 0xc88e,		0x21, 0
+	.dw 0xa240, 0xc88e,	0xa27f, 0xc88e,		0x21, 0
+	.dw 0xa2c0, 0xc88e,	0xa2ff, 0xc88e,		0x21, 0
+	.dw 0xa340, 0xc88e,	0xa37f, 0xc88e,		0x21, 0
+	.dw 0xa3c0, 0xc88e,	0xa3ff, 0xc88e,		0x21, 0
+	.dw 0xa440, 0xc88e,	0xa47f, 0xc88e,		0x21, 0
+	.dw 0xa4c0, 0xc88e,	0xa4ff, 0xc88e,		0x21, 0
+	.dw 0xa540, 0xc88e,	0xa57f, 0xc88e,		0x21, 0
+	.dw 0xa5c0, 0xc88e,	0xa5ff, 0xc88e,		0x21, 0
+	.dw 0xa640, 0xc88e,	0xa67f, 0xc88e,		0x21, 0
+	.dw 0xa6c0, 0xc88e,	0xa6ff, 0xc88e,		0x21, 0
+	.dw 0xa740, 0xc88e,	0xa77f, 0xc88e,		0x21, 0
+	.dw 0xa7c0, 0xc88e,	0xa7ff, 0xc88e,		0x21, 0
+	.dw 0xa840, 0xc88e,	0xa87f, 0xc88e,		0x21, 0
+	.dw 0xa8c0, 0xc88e,	0xa8ff, 0xc88e,		0x21, 0
+	.dw 0xa940, 0xc88e,	0xa97f, 0xc88e,		0x21, 0
+	.dw 0xa9c0, 0xc88e,	0xa9ff, 0xc88e,		0x21, 0
+	.dw 0xaa40, 0xc88e,	0xaa7f, 0xc88e,		0x21, 0
+	.dw 0xaac0, 0xc88e,	0xaaff, 0xc88e,		0x21, 0
+	.dw 0xab40, 0xc88e,	0xab7f, 0xc88e,		0x21, 0
+	.dw 0xabc0, 0xc88e,	0xabff, 0xc88e,		0x21, 0
+	.dw 0xac40, 0xc88e,	0xac7f, 0xc88e,		0x21, 0
+	.dw 0xacc0, 0xc88e,	0xacff, 0xc88e,		0x21, 0
+	.dw 0xad40, 0xc88e,	0xad7f, 0xc88e,		0x21, 0
+	.dw 0xadc0, 0xc88e,	0xadff, 0xc88e,		0x21, 0
+	.dw 0xae40, 0xc88e,	0xae7f, 0xc88e,		0x21, 0
+	.dw 0xaec0, 0xc88e,	0xaeff, 0xc88e,		0x21, 0
+	.dw 0xaf40, 0xc88e,	0xaf7f, 0xc88e,		0x21, 0
+	.dw 0xafc0, 0xc88e,	0xafff, 0xc88e,		0x21, 0
+	.dw 0xb040, 0xc88e,	0xb07f, 0xc88e,		0x21, 0
+	.dw 0xb0c0, 0xc88e,	0xb0ff, 0xc88e,		0x21, 0
+	.dw 0xb140, 0xc88e,	0xb17f, 0xc88e,		0x21, 0
+	.dw 0xb1c0, 0xc88e,	0xb1ff, 0xc88e,		0x21, 0
+	.dw 0xb240, 0xc88e,	0xb27f, 0xc88e,		0x21, 0
+	.dw 0xb2c0, 0xc88e,	0xb2ff, 0xc88e,		0x21, 0
+	.dw 0xb340, 0xc88e,	0xb37f, 0xc88e,		0x21, 0
+	.dw 0xb3c0, 0xc88e,	0xb3ff, 0xc88e,		0x21, 0
+	.dw 0xb440, 0xc88e,	0xb47f, 0xc88e,		0x21, 0
+	.dw 0xb4c0, 0xc88e,	0xb4ff, 0xc88e,		0x21, 0
+	.dw 0xb540, 0xc88e,	0xb57f, 0xc88e,		0x21, 0
+	.dw 0xb5c0, 0xc88e,	0xb5ff, 0xc88e,		0x21, 0
+	.dw 0xb640, 0xc88e,	0xb67f, 0xc88e,		0x21, 0
+	.dw 0xb6c0, 0xc88e,	0xb6ff, 0xc88e,		0x21, 0
+	.dw 0xb740, 0xc88e,	0xb77f, 0xc88e,		0x21, 0
+	.dw 0xb7c0, 0xc88e,	0xb7ff, 0xc88e,		0x21, 0
+	.dw 0xb840, 0xc88e,	0xb87f, 0xc88e,		0x21, 0
+	.dw 0xb8c0, 0xc88e,	0xb8ff, 0xc88e,		0x21, 0
+	.dw 0xb940, 0xc88e,	0xb97f, 0xc88e,		0x21, 0
+	.dw 0xb9c0, 0xc88e,	0xbfff, 0xc88e,		0x21, 0
+	.dw 0xc040, 0xc88e,	0xc07f, 0xc88e,		0x21, 0
+	.dw 0xc0c0, 0xc88e,	0xc0ff, 0xc88e,		0x21, 0
+	.dw 0xc140, 0xc88e,	0xc17f, 0xc88e,		0x21, 0
+	.dw 0xc1c0, 0xc88e,	0xc1ff, 0xc88e,		0x21, 0
+	.dw 0xc240, 0xc88e,	0xc27f, 0xc88e,		0x21, 0
+	.dw 0xc2c0, 0xc88e,	0xc2ff, 0xc88e,		0x21, 0
+	.dw 0xc340, 0xc88e,	0xc37f, 0xc88e,		0x21, 0
+	.dw 0xc3c0, 0xc88e,	0xc3ff, 0xc88e,		0x21, 0
+	.dw 0xc440, 0xc88e,	0xc47f, 0xc88e,		0x21, 0
+	.dw 0xc4c0, 0xc88e,	0xc4ff, 0xc88e,		0x21, 0
+	.dw 0xc540, 0xc88e,	0xc57f, 0xc88e,		0x21, 0
+	.dw 0xc5c0, 0xc88e,	0xc5ff, 0xc88e,		0x21, 0
+	.dw 0xc640, 0xc88e,	0xc67f, 0xc88e,		0x21, 0
+	.dw 0xc6c0, 0xc88e,	0xc6ff, 0xc88e,		0x21, 0
+	.dw 0xc740, 0xc88e,	0xc77f, 0xc88e,		0x21, 0
+	.dw 0xc7c0, 0xc88e,	0xc7ff, 0xc88e,		0x21, 0
+	.dw 0xc840, 0xc88e,	0xc87f, 0xc88e,		0x21, 0
+	.dw 0xc8c0, 0xc88e,	0xc8ff, 0xc88e,		0x21, 0
+	.dw 0xc940, 0xc88e,	0xc97f, 0xc88e,		0x21, 0
+	.dw 0xc9c0, 0xc88e,	0xc9ff, 0xc88e,		0x21, 0
+	.dw 0xca40, 0xc88e,	0xca7f, 0xc88e,		0x21, 0
+	.dw 0xcac0, 0xc88e,	0xcaff, 0xc88e,		0x21, 0
+	.dw 0xcb40, 0xc88e,	0xcb7f, 0xc88e,		0x21, 0
+	.dw 0xcbc0, 0xc88e,	0xcbff, 0xc88e,		0x21, 0
+	.dw 0xcc40, 0xc88e,	0xcc7f, 0xc88e,		0x21, 0
+	.dw 0xccc0, 0xc88e,	0xccff, 0xc88e,		0x21, 0
+	.dw 0xcd40, 0xc88e,	0xcd7f, 0xc88e,		0x21, 0
+	.dw 0xcdc0, 0xc88e,	0xcdff, 0xc88e,		0x21, 0
+	.dw 0xce40, 0xc88e,	0xce7f, 0xc88e,		0x21, 0
+	.dw 0xcec0, 0xc88e,	0xceff, 0xc88e,		0x21, 0
+	.dw 0xcf40, 0xc88e,	0xcf7f, 0xc88e,		0x21, 0
+	.dw 0xcfc0, 0xc88e,	0xcfff, 0xc88e,		0x21, 0
+	.dw 0xd040, 0xc88e,	0xd07f, 0xc88e,		0x21, 0
+	.dw 0xd0c0, 0xc88e,	0xd0ff, 0xc88e,		0x21, 0
+	.dw 0xd140, 0xc88e,	0xd17f, 0xc88e,		0x21, 0
+	.dw 0xd1c0, 0xc88e,	0xd1ff, 0xc88e,		0x21, 0
+	.dw 0xd240, 0xc88e,	0xd27f, 0xc88e,		0x21, 0
+	.dw 0xd2c0, 0xc88e,	0xd2ff, 0xc88e,		0x21, 0
+	.dw 0xd340, 0xc88e,	0xd37f, 0xc88e,		0x21, 0
+	.dw 0xd3c0, 0xc88e,	0xd3ff, 0xc88e,		0x21, 0
+	.dw 0xd440, 0xc88e,	0xd47f, 0xc88e,		0x21, 0
+	.dw 0xd4c0, 0xc88e,	0xd4ff, 0xc88e,		0x21, 0
+	.dw 0xd540, 0xc88e,	0xd57f, 0xc88e,		0x21, 0
+	.dw 0xd5c0, 0xc88e,	0xd5ff, 0xc88e,		0x21, 0
+	.dw 0xd640, 0xc88e,	0xd67f, 0xc88e,		0x21, 0
+	.dw 0xd6c0, 0xc88e,	0xd6ff, 0xc88e,		0x21, 0
+	.dw 0xd740, 0xc88e,	0xd77f, 0xc88e,		0x21, 0
+	.dw 0xd7c0, 0xc88e,	0xd7ff, 0xc88e,		0x21, 0
+	.dw 0xd840, 0xc88e,	0xd87f, 0xc88e,		0x21, 0
+	.dw 0xd8c0, 0xc88e,	0xd8ff, 0xc88e,		0x21, 0
+	.dw 0xd940, 0xc88e,	0xd97f, 0xc88e,		0x21, 0
+	.dw 0xd9c0, 0xc88e,	0xdfff, 0xc88e,		0x21, 0
+	.dw 0xe040, 0xc88e,	0xe07f, 0xc88e,		0x21, 0
+	.dw 0xe0c0, 0xc88e,	0xe0ff, 0xc88e,		0x21, 0
+	.dw 0xe140, 0xc88e,	0xe17f, 0xc88e,		0x21, 0
+	.dw 0xe1c0, 0xc88e,	0xe1ff, 0xc88e,		0x21, 0
+	.dw 0xe240, 0xc88e,	0xe27f, 0xc88e,		0x21, 0
+	.dw 0xe2c0, 0xc88e,	0xe2ff, 0xc88e,		0x21, 0
+	.dw 0xe340, 0xc88e,	0xe37f, 0xc88e,		0x21, 0
+	.dw 0xe3c0, 0xc88e,	0xe3ff, 0xc88e,		0x21, 0
+	.dw 0xe440, 0xc88e,	0xe47f, 0xc88e,		0x21, 0
+	.dw 0xe4c0, 0xc88e,	0xe4ff, 0xc88e,		0x21, 0
+	.dw 0xe540, 0xc88e,	0xe57f, 0xc88e,		0x21, 0
+	.dw 0xe5c0, 0xc88e,	0xe5ff, 0xc88e,		0x21, 0
+	.dw 0xe640, 0xc88e,	0xe67f, 0xc88e,		0x21, 0
+	.dw 0xe6c0, 0xc88e,	0xe6ff, 0xc88e,		0x21, 0
+	.dw 0xe740, 0xc88e,	0xe77f, 0xc88e,		0x21, 0
+	.dw 0xe7c0, 0xc88e,	0xe7ff, 0xc88e,		0x21, 0
+	.dw 0xe840, 0xc88e,	0xe87f, 0xc88e,		0x21, 0
+	.dw 0xe8c0, 0xc88e,	0xe8ff, 0xc88e,		0x21, 0
+	.dw 0xe940, 0xc88e,	0xe97f, 0xc88e,		0x21, 0
+	.dw 0xe9c0, 0xc88e,	0xe9ff, 0xc88e,		0x21, 0
+	.dw 0xea40, 0xc88e,	0xea7f, 0xc88e,		0x21, 0
+	.dw 0xeac0, 0xc88e,	0xeaff, 0xc88e,		0x21, 0
+	.dw 0xeb40, 0xc88e,	0xeb7f, 0xc88e,		0x21, 0
+	.dw 0xebc0, 0xc88e,	0xebff, 0xc88e,		0x21, 0
+	.dw 0xec40, 0xc88e,	0xec7f, 0xc88e,		0x21, 0
+	.dw 0xecc0, 0xc88e,	0xecff, 0xc88e,		0x21, 0
+	.dw 0xed40, 0xc88e,	0xed7f, 0xc88e,		0x21, 0
+	.dw 0xedc0, 0xc88e,	0xedff, 0xc88e,		0x21, 0
+	.dw 0xee40, 0xc88e,	0xee7f, 0xc88e,		0x21, 0
+	.dw 0xeec0, 0xc88e,	0xeeff, 0xc88e,		0x21, 0
+	.dw 0xef40, 0xc88e,	0xef7f, 0xc88e,		0x21, 0
+	.dw 0xefc0, 0xc88e,	0xefff, 0xc88e,		0x21, 0
+	.dw 0xf040, 0xc88e,	0xf07f, 0xc88e,		0x21, 0
+	.dw 0xf0c0, 0xc88e,	0xf0ff, 0xc88e,		0x21, 0
+	.dw 0xf140, 0xc88e,	0xf17f, 0xc88e,		0x21, 0
+	.dw 0xf1c0, 0xc88e,	0xf1ff, 0xc88e,		0x21, 0
+	.dw 0xf240, 0xc88e,	0xf27f, 0xc88e,		0x21, 0
+	.dw 0xf2c0, 0xc88e,	0xf2ff, 0xc88e,		0x21, 0
+	.dw 0xf340, 0xc88e,	0xf37f, 0xc88e,		0x21, 0
+	.dw 0xf3c0, 0xc88e,	0xf3ff, 0xc88e,		0x21, 0
+	.dw 0xf440, 0xc88e,	0xf47f, 0xc88e,		0x21, 0
+	.dw 0xf4c0, 0xc88e,	0xf4ff, 0xc88e,		0x21, 0
+	.dw 0xf540, 0xc88e,	0xf57f, 0xc88e,		0x21, 0
+	.dw 0xf5c0, 0xc88e,	0xf5ff, 0xc88e,		0x21, 0
+	.dw 0xf640, 0xc88e,	0xf67f, 0xc88e,		0x21, 0
+	.dw 0xf6c0, 0xc88e,	0xf6ff, 0xc88e,		0x21, 0
+	.dw 0xf740, 0xc88e,	0xf77f, 0xc88e,		0x21, 0
+	.dw 0xf7c0, 0xc88e,	0xf7ff, 0xc88e,		0x21, 0
+	.dw 0xf840, 0xc88e,	0xf87f, 0xc88e,		0x21, 0
+	.dw 0xf8c0, 0xc88e,	0xf8ff, 0xc88e,		0x21, 0
+	.dw 0xf940, 0xc88e,	0xf97f, 0xc88e,		0x21, 0
+	.dw 0xf9c0, 0xc88e,	0xffff, 0xc88e,		0x21, 0
+	.dw 0x0040, 0xc88f,	0x007f, 0xc88f,		0x21, 0
+	.dw 0x00c0, 0xc88f,	0x00ff, 0xc88f,		0x21, 0
+	.dw 0x0140, 0xc88f,	0x017f, 0xc88f,		0x21, 0
+	.dw 0x01c0, 0xc88f,	0x01ff, 0xc88f,		0x21, 0
+	.dw 0x0240, 0xc88f,	0x027f, 0xc88f,		0x21, 0
+	.dw 0x02c0, 0xc88f,	0x02ff, 0xc88f,		0x21, 0
+	.dw 0x0340, 0xc88f,	0x037f, 0xc88f,		0x21, 0
+	.dw 0x03c0, 0xc88f,	0x03ff, 0xc88f,		0x21, 0
+	.dw 0x0440, 0xc88f,	0x047f, 0xc88f,		0x21, 0
+	.dw 0x04c0, 0xc88f,	0x04ff, 0xc88f,		0x21, 0
+	.dw 0x0540, 0xc88f,	0x057f, 0xc88f,		0x21, 0
+	.dw 0x05c0, 0xc88f,	0x05ff, 0xc88f,		0x21, 0
+	.dw 0x0640, 0xc88f,	0x067f, 0xc88f,		0x21, 0
+	.dw 0x06c0, 0xc88f,	0x06ff, 0xc88f,		0x21, 0
+	.dw 0x0740, 0xc88f,	0x077f, 0xc88f,		0x21, 0
+	.dw 0x07c0, 0xc88f,	0x07ff, 0xc88f,		0x21, 0
+	.dw 0x0840, 0xc88f,	0x087f, 0xc88f,		0x21, 0
+	.dw 0x08c0, 0xc88f,	0x08ff, 0xc88f,		0x21, 0
+	.dw 0x0940, 0xc88f,	0x097f, 0xc88f,		0x21, 0
+	.dw 0x09c0, 0xc88f,	0x09ff, 0xc88f,		0x21, 0
+	.dw 0x0a40, 0xc88f,	0x0a7f, 0xc88f,		0x21, 0
+	.dw 0x0ac0, 0xc88f,	0x0aff, 0xc88f,		0x21, 0
+	.dw 0x0b40, 0xc88f,	0x0b7f, 0xc88f,		0x21, 0
+	.dw 0x0bc0, 0xc88f,	0x0bff, 0xc88f,		0x21, 0
+	.dw 0x0c40, 0xc88f,	0x0c7f, 0xc88f,		0x21, 0
+	.dw 0x0cc0, 0xc88f,	0x0cff, 0xc88f,		0x21, 0
+	.dw 0x0d40, 0xc88f,	0x0d7f, 0xc88f,		0x21, 0
+	.dw 0x0dc0, 0xc88f,	0x0dff, 0xc88f,		0x21, 0
+	.dw 0x0e40, 0xc88f,	0x0e7f, 0xc88f,		0x21, 0
+	.dw 0x0ec0, 0xc88f,	0x0eff, 0xc88f,		0x21, 0
+	.dw 0x0f40, 0xc88f,	0x0f7f, 0xc88f,		0x21, 0
+	.dw 0x0fc0, 0xc88f,	0x0fff, 0xc88f,		0x21, 0
+	.dw 0x1040, 0xc88f,	0x107f, 0xc88f,		0x21, 0
+	.dw 0x10c0, 0xc88f,	0x10ff, 0xc88f,		0x21, 0
+	.dw 0x1140, 0xc88f,	0x117f, 0xc88f,		0x21, 0
+	.dw 0x11c0, 0xc88f,	0x11ff, 0xc88f,		0x21, 0
+	.dw 0x1240, 0xc88f,	0x127f, 0xc88f,		0x21, 0
+	.dw 0x12c0, 0xc88f,	0x12ff, 0xc88f,		0x21, 0
+	.dw 0x1340, 0xc88f,	0x137f, 0xc88f,		0x21, 0
+	.dw 0x13c0, 0xc88f,	0x13ff, 0xc88f,		0x21, 0
+	.dw 0x1440, 0xc88f,	0x147f, 0xc88f,		0x21, 0
+	.dw 0x14c0, 0xc88f,	0x14ff, 0xc88f,		0x21, 0
+	.dw 0x1540, 0xc88f,	0x157f, 0xc88f,		0x21, 0
+	.dw 0x15c0, 0xc88f,	0x15ff, 0xc88f,		0x21, 0
+	.dw 0x1640, 0xc88f,	0x167f, 0xc88f,		0x21, 0
+	.dw 0x16c0, 0xc88f,	0x16ff, 0xc88f,		0x21, 0
+	.dw 0x1740, 0xc88f,	0x177f, 0xc88f,		0x21, 0
+	.dw 0x17c0, 0xc88f,	0x17ff, 0xc88f,		0x21, 0
+	.dw 0x1840, 0xc88f,	0x187f, 0xc88f,		0x21, 0
+	.dw 0x18c0, 0xc88f,	0x18ff, 0xc88f,		0x21, 0
+	.dw 0x1940, 0xc88f,	0x197f, 0xc88f,		0x21, 0
+	.dw 0x19c0, 0xc88f,	0x1fff, 0xc88f,		0x21, 0
+	.dw 0x2040, 0xc88f,	0x207f, 0xc88f,		0x21, 0
+	.dw 0x20c0, 0xc88f,	0x20ff, 0xc88f,		0x21, 0
+	.dw 0x2140, 0xc88f,	0x217f, 0xc88f,		0x21, 0
+	.dw 0x21c0, 0xc88f,	0x21ff, 0xc88f,		0x21, 0
+	.dw 0x2240, 0xc88f,	0x227f, 0xc88f,		0x21, 0
+	.dw 0x22c0, 0xc88f,	0x22ff, 0xc88f,		0x21, 0
+	.dw 0x2340, 0xc88f,	0x237f, 0xc88f,		0x21, 0
+	.dw 0x23c0, 0xc88f,	0x23ff, 0xc88f,		0x21, 0
+	.dw 0x2440, 0xc88f,	0x247f, 0xc88f,		0x21, 0
+	.dw 0x24c0, 0xc88f,	0x24ff, 0xc88f,		0x21, 0
+	.dw 0x2540, 0xc88f,	0x257f, 0xc88f,		0x21, 0
+	.dw 0x25c0, 0xc88f,	0x25ff, 0xc88f,		0x21, 0
+	.dw 0x2640, 0xc88f,	0x267f, 0xc88f,		0x21, 0
+	.dw 0x26c0, 0xc88f,	0x26ff, 0xc88f,		0x21, 0
+	.dw 0x2740, 0xc88f,	0x277f, 0xc88f,		0x21, 0
+	.dw 0x27c0, 0xc88f,	0x27ff, 0xc88f,		0x21, 0
+	.dw 0x2840, 0xc88f,	0x287f, 0xc88f,		0x21, 0
+	.dw 0x28c0, 0xc88f,	0x28ff, 0xc88f,		0x21, 0
+	.dw 0x2940, 0xc88f,	0x297f, 0xc88f,		0x21, 0
+	.dw 0x29c0, 0xc88f,	0x29ff, 0xc88f,		0x21, 0
+	.dw 0x2a40, 0xc88f,	0x2a7f, 0xc88f,		0x21, 0
+	.dw 0x2ac0, 0xc88f,	0x2aff, 0xc88f,		0x21, 0
+	.dw 0x2b40, 0xc88f,	0x2b7f, 0xc88f,		0x21, 0
+	.dw 0x2bc0, 0xc88f,	0x2bff, 0xc88f,		0x21, 0
+	.dw 0x2c40, 0xc88f,	0x2c7f, 0xc88f,		0x21, 0
+	.dw 0x2cc0, 0xc88f,	0x2cff, 0xc88f,		0x21, 0
+	.dw 0x2d40, 0xc88f,	0x2d7f, 0xc88f,		0x21, 0
+	.dw 0x2dc0, 0xc88f,	0x2dff, 0xc88f,		0x21, 0
+	.dw 0x2e40, 0xc88f,	0x2e7f, 0xc88f,		0x21, 0
+	.dw 0x2ec0, 0xc88f,	0x2eff, 0xc88f,		0x21, 0
+	.dw 0x2f40, 0xc88f,	0x2f7f, 0xc88f,		0x21, 0
+	.dw 0x2fc0, 0xc88f,	0x2fff, 0xc88f,		0x21, 0
+	.dw 0x3040, 0xc88f,	0x307f, 0xc88f,		0x21, 0
+	.dw 0x30c0, 0xc88f,	0x30ff, 0xc88f,		0x21, 0
+	.dw 0x3140, 0xc88f,	0x317f, 0xc88f,		0x21, 0
+	.dw 0x31c0, 0xc88f,	0x31ff, 0xc88f,		0x21, 0
+	.dw 0x3240, 0xc88f,	0x327f, 0xc88f,		0x21, 0
+	.dw 0x32c0, 0xc88f,	0x32ff, 0xc88f,		0x21, 0
+	.dw 0x3340, 0xc88f,	0x337f, 0xc88f,		0x21, 0
+	.dw 0x33c0, 0xc88f,	0x33ff, 0xc88f,		0x21, 0
+	.dw 0x3440, 0xc88f,	0x347f, 0xc88f,		0x21, 0
+	.dw 0x34c0, 0xc88f,	0x34ff, 0xc88f,		0x21, 0
+	.dw 0x3540, 0xc88f,	0x357f, 0xc88f,		0x21, 0
+	.dw 0x35c0, 0xc88f,	0x35ff, 0xc88f,		0x21, 0
+	.dw 0x3640, 0xc88f,	0x367f, 0xc88f,		0x21, 0
+	.dw 0x36c0, 0xc88f,	0x36ff, 0xc88f,		0x21, 0
+	.dw 0x3740, 0xc88f,	0x377f, 0xc88f,		0x21, 0
+	.dw 0x37c0, 0xc88f,	0x37ff, 0xc88f,		0x21, 0
+	.dw 0x3840, 0xc88f,	0x387f, 0xc88f,		0x21, 0
+	.dw 0x38c0, 0xc88f,	0x38ff, 0xc88f,		0x21, 0
+	.dw 0x3940, 0xc88f,	0x397f, 0xc88f,		0x21, 0
+	.dw 0x39c0, 0xc88f,	0xffff, 0xc88f,		0x21, 0
+	.dw 0x1a00, 0xc890,	0x1fff, 0xc890,		0x21, 0
+	.dw 0x3a00, 0xc890,	0x3fff, 0xc890,		0x21, 0
+	.dw 0x5a00, 0xc890,	0x5fff, 0xc890,		0x21, 0
+	.dw 0x7a00, 0xc890,	0x7fff, 0xc890,		0x21, 0
+	.dw 0x9a00, 0xc890,	0x9fff, 0xc890,		0x21, 0
+	.dw 0xba00, 0xc890,	0xbfff, 0xc890,		0x21, 0
+	.dw 0xda00, 0xc890,	0xdfff, 0xc890,		0x21, 0
+	.dw 0xfa00, 0xc890,	0xffff, 0xc890,		0x21, 0
+	.dw 0x1a00, 0xc891,	0x1fff, 0xc891,		0x21, 0
+	.dw 0x3a00, 0xc891,	0x3fff, 0xc891,		0x21, 0
+	.dw 0x5a00, 0xc891,	0x5fff, 0xc891,		0x21, 0
+	.dw 0x7a00, 0xc891,	0x7fff, 0xc891,		0x21, 0
+	.dw 0x9a00, 0xc891,	0x9fff, 0xc891,		0x21, 0
+	.dw 0xba00, 0xc891,	0xbfff, 0xc891,		0x21, 0
+	.dw 0xda00, 0xc891,	0xdfff, 0xc891,		0x21, 0
+	.dw 0xfa00, 0xc891,	0xffff, 0xc891,		0x21, 0
+	.dw 0x1a00, 0xc892,	0x1fff, 0xc892,		0x21, 0
+	.dw 0x3a00, 0xc892,	0x3fff, 0xc892,		0x21, 0
+	.dw 0x5a00, 0xc892,	0x5fff, 0xc892,		0x21, 0
+	.dw 0x7a00, 0xc892,	0x7fff, 0xc892,		0x21, 0
+	.dw 0x9a00, 0xc892,	0x9fff, 0xc892,		0x21, 0
+	.dw 0xba00, 0xc892,	0xbfff, 0xc892,		0x21, 0
+	.dw 0xda00, 0xc892,	0xdfff, 0xc892,		0x21, 0
+	.dw 0xfa00, 0xc892,	0xffff, 0xc893,		0x21, 0
+	.dw 0x1a00, 0xc894,	0x1fff, 0xc894,		0x21, 0
+	.dw 0x3a00, 0xc894,	0x3fff, 0xc894,		0x21, 0
+	.dw 0x5a00, 0xc894,	0x5fff, 0xc894,		0x21, 0
+	.dw 0x7a00, 0xc894,	0x7fff, 0xc894,		0x21, 0
+	.dw 0x9a00, 0xc894,	0x9fff, 0xc894,		0x21, 0
+	.dw 0xba00, 0xc894,	0xbfff, 0xc894,		0x21, 0
+	.dw 0xda00, 0xc894,	0xdfff, 0xc894,		0x21, 0
+	.dw 0xfa00, 0xc894,	0xffff, 0xc894,		0x21, 0
+	.dw 0x1a00, 0xc895,	0x1fff, 0xc895,		0x21, 0
+	.dw 0x3a00, 0xc895,	0x3fff, 0xc895,		0x21, 0
+	.dw 0x5a00, 0xc895,	0x5fff, 0xc895,		0x21, 0
+	.dw 0x7a00, 0xc895,	0x7fff, 0xc895,		0x21, 0
+	.dw 0x9a00, 0xc895,	0x9fff, 0xc895,		0x21, 0
+	.dw 0xba00, 0xc895,	0xbfff, 0xc895,		0x21, 0
+	.dw 0xda00, 0xc895,	0xdfff, 0xc895,		0x21, 0
+	.dw 0xfa00, 0xc895,	0xffff, 0xc895,		0x21, 0
+	.dw 0x1a00, 0xc896,	0x1fff, 0xc896,		0x21, 0
+	.dw 0x3a00, 0xc896,	0x3fff, 0xc896,		0x21, 0
+	.dw 0x5a00, 0xc896,	0x5fff, 0xc896,		0x21, 0
+	.dw 0x7a00, 0xc896,	0x7fff, 0xc896,		0x21, 0
+	.dw 0x9a00, 0xc896,	0x9fff, 0xc896,		0x21, 0
+	.dw 0xba00, 0xc896,	0xbfff, 0xc896,		0x21, 0
+	.dw 0xda00, 0xc896,	0xdfff, 0xc896,		0x21, 0
+	.dw 0xfa00, 0xc896,	0xffff, 0xc896,		0x21, 0
+	.dw 0x1a00, 0xc897,	0x1fff, 0xc897,		0x21, 0
+	.dw 0x3a00, 0xc897,	0x1fff, 0xc898,		0x21, 0
+	.dw 0x2040, 0xc898,	0x207f, 0xc898,		0x21, 0
+	.dw 0x20c0, 0xc898,	0x20ff, 0xc898,		0x21, 0
+	.dw 0x2140, 0xc898,	0x217f, 0xc898,		0x21, 0
+	.dw 0x21c0, 0xc898,	0x21ff, 0xc898,		0x21, 0
+	.dw 0x2240, 0xc898,	0x227f, 0xc898,		0x21, 0
+	.dw 0x22c0, 0xc898,	0x22ff, 0xc898,		0x21, 0
+	.dw 0x2340, 0xc898,	0x237f, 0xc898,		0x21, 0
+	.dw 0x23c0, 0xc898,	0x23ff, 0xc898,		0x21, 0
+	.dw 0x2440, 0xc898,	0x247f, 0xc898,		0x21, 0
+	.dw 0x24c0, 0xc898,	0x24ff, 0xc898,		0x21, 0
+	.dw 0x2540, 0xc898,	0x257f, 0xc898,		0x21, 0
+	.dw 0x25c0, 0xc898,	0x25ff, 0xc898,		0x21, 0
+	.dw 0x2640, 0xc898,	0x267f, 0xc898,		0x21, 0
+	.dw 0x26c0, 0xc898,	0x26ff, 0xc898,		0x21, 0
+	.dw 0x2740, 0xc898,	0x277f, 0xc898,		0x21, 0
+	.dw 0x27c0, 0xc898,	0x27ff, 0xc898,		0x21, 0
+	.dw 0x2840, 0xc898,	0x287f, 0xc898,		0x21, 0
+	.dw 0x28c0, 0xc898,	0x28ff, 0xc898,		0x21, 0
+	.dw 0x2940, 0xc898,	0x297f, 0xc898,		0x21, 0
+	.dw 0x29c0, 0xc898,	0x29ff, 0xc898,		0x21, 0
+	.dw 0x2a40, 0xc898,	0x2a7f, 0xc898,		0x21, 0
+	.dw 0x2ac0, 0xc898,	0x2aff, 0xc898,		0x21, 0
+	.dw 0x2b40, 0xc898,	0x2b7f, 0xc898,		0x21, 0
+	.dw 0x2bc0, 0xc898,	0x2bff, 0xc898,		0x21, 0
+	.dw 0x2c40, 0xc898,	0x2c7f, 0xc898,		0x21, 0
+	.dw 0x2cc0, 0xc898,	0x2cff, 0xc898,		0x21, 0
+	.dw 0x2d40, 0xc898,	0x2d7f, 0xc898,		0x21, 0
+	.dw 0x2dc0, 0xc898,	0x2dff, 0xc898,		0x21, 0
+	.dw 0x2e40, 0xc898,	0x2e7f, 0xc898,		0x21, 0
+	.dw 0x2ec0, 0xc898,	0x2eff, 0xc898,		0x21, 0
+	.dw 0x2f40, 0xc898,	0x2f7f, 0xc898,		0x21, 0
+	.dw 0x2fc0, 0xc898,	0x2fff, 0xc898,		0x21, 0
+	.dw 0x3040, 0xc898,	0x307f, 0xc898,		0x21, 0
+	.dw 0x30c0, 0xc898,	0x30ff, 0xc898,		0x21, 0
+	.dw 0x3140, 0xc898,	0x317f, 0xc898,		0x21, 0
+	.dw 0x31c0, 0xc898,	0x31ff, 0xc898,		0x21, 0
+	.dw 0x3240, 0xc898,	0x327f, 0xc898,		0x21, 0
+	.dw 0x32c0, 0xc898,	0x32ff, 0xc898,		0x21, 0
+	.dw 0x3340, 0xc898,	0x337f, 0xc898,		0x21, 0
+	.dw 0x33c0, 0xc898,	0x33ff, 0xc898,		0x21, 0
+	.dw 0x3440, 0xc898,	0x347f, 0xc898,		0x21, 0
+	.dw 0x34c0, 0xc898,	0x34ff, 0xc898,		0x21, 0
+	.dw 0x3540, 0xc898,	0x357f, 0xc898,		0x21, 0
+	.dw 0x35c0, 0xc898,	0x35ff, 0xc898,		0x21, 0
+	.dw 0x3640, 0xc898,	0x367f, 0xc898,		0x21, 0
+	.dw 0x36c0, 0xc898,	0x36ff, 0xc898,		0x21, 0
+	.dw 0x3740, 0xc898,	0x377f, 0xc898,		0x21, 0
+	.dw 0x37c0, 0xc898,	0x37ff, 0xc898,		0x21, 0
+	.dw 0x3840, 0xc898,	0x387f, 0xc898,		0x21, 0
+	.dw 0x38c0, 0xc898,	0x38ff, 0xc898,		0x21, 0
+	.dw 0x3940, 0xc898,	0x397f, 0xc898,		0x21, 0
+	.dw 0x39c0, 0xc898,	0x5fff, 0xc898,		0x21, 0
+	.dw 0x6040, 0xc898,	0x607f, 0xc898,		0x21, 0
+	.dw 0x60c0, 0xc898,	0x60ff, 0xc898,		0x21, 0
+	.dw 0x6140, 0xc898,	0x617f, 0xc898,		0x21, 0
+	.dw 0x61c0, 0xc898,	0x61ff, 0xc898,		0x21, 0
+	.dw 0x6240, 0xc898,	0x627f, 0xc898,		0x21, 0
+	.dw 0x62c0, 0xc898,	0x62ff, 0xc898,		0x21, 0
+	.dw 0x6340, 0xc898,	0x637f, 0xc898,		0x21, 0
+	.dw 0x63c0, 0xc898,	0x63ff, 0xc898,		0x21, 0
+	.dw 0x6440, 0xc898,	0x647f, 0xc898,		0x21, 0
+	.dw 0x64c0, 0xc898,	0x64ff, 0xc898,		0x21, 0
+	.dw 0x6540, 0xc898,	0x657f, 0xc898,		0x21, 0
+	.dw 0x65c0, 0xc898,	0x65ff, 0xc898,		0x21, 0
+	.dw 0x6640, 0xc898,	0x667f, 0xc898,		0x21, 0
+	.dw 0x66c0, 0xc898,	0x66ff, 0xc898,		0x21, 0
+	.dw 0x6740, 0xc898,	0x677f, 0xc898,		0x21, 0
+	.dw 0x67c0, 0xc898,	0x67ff, 0xc898,		0x21, 0
+	.dw 0x6840, 0xc898,	0x687f, 0xc898,		0x21, 0
+	.dw 0x68c0, 0xc898,	0x68ff, 0xc898,		0x21, 0
+	.dw 0x6940, 0xc898,	0x697f, 0xc898,		0x21, 0
+	.dw 0x69c0, 0xc898,	0x69ff, 0xc898,		0x21, 0
+	.dw 0x6a40, 0xc898,	0x6a7f, 0xc898,		0x21, 0
+	.dw 0x6ac0, 0xc898,	0x6aff, 0xc898,		0x21, 0
+	.dw 0x6b40, 0xc898,	0x6b7f, 0xc898,		0x21, 0
+	.dw 0x6bc0, 0xc898,	0x6bff, 0xc898,		0x21, 0
+	.dw 0x6c40, 0xc898,	0x6c7f, 0xc898,		0x21, 0
+	.dw 0x6cc0, 0xc898,	0x6cff, 0xc898,		0x21, 0
+	.dw 0x6d40, 0xc898,	0x6d7f, 0xc898,		0x21, 0
+	.dw 0x6dc0, 0xc898,	0x6dff, 0xc898,		0x21, 0
+	.dw 0x6e40, 0xc898,	0x6e7f, 0xc898,		0x21, 0
+	.dw 0x6ec0, 0xc898,	0x6eff, 0xc898,		0x21, 0
+	.dw 0x6f40, 0xc898,	0x6f7f, 0xc898,		0x21, 0
+	.dw 0x6fc0, 0xc898,	0x6fff, 0xc898,		0x21, 0
+	.dw 0x7040, 0xc898,	0x707f, 0xc898,		0x21, 0
+	.dw 0x70c0, 0xc898,	0x70ff, 0xc898,		0x21, 0
+	.dw 0x7140, 0xc898,	0x717f, 0xc898,		0x21, 0
+	.dw 0x71c0, 0xc898,	0x71ff, 0xc898,		0x21, 0
+	.dw 0x7240, 0xc898,	0x727f, 0xc898,		0x21, 0
+	.dw 0x72c0, 0xc898,	0x72ff, 0xc898,		0x21, 0
+	.dw 0x7340, 0xc898,	0x737f, 0xc898,		0x21, 0
+	.dw 0x73c0, 0xc898,	0x73ff, 0xc898,		0x21, 0
+	.dw 0x7440, 0xc898,	0x747f, 0xc898,		0x21, 0
+	.dw 0x74c0, 0xc898,	0x74ff, 0xc898,		0x21, 0
+	.dw 0x7540, 0xc898,	0x757f, 0xc898,		0x21, 0
+	.dw 0x75c0, 0xc898,	0x75ff, 0xc898,		0x21, 0
+	.dw 0x7640, 0xc898,	0x767f, 0xc898,		0x21, 0
+	.dw 0x76c0, 0xc898,	0x76ff, 0xc898,		0x21, 0
+	.dw 0x7740, 0xc898,	0x777f, 0xc898,		0x21, 0
+	.dw 0x77c0, 0xc898,	0x77ff, 0xc898,		0x21, 0
+	.dw 0x7840, 0xc898,	0x787f, 0xc898,		0x21, 0
+	.dw 0x78c0, 0xc898,	0x78ff, 0xc898,		0x21, 0
+	.dw 0x7940, 0xc898,	0x797f, 0xc898,		0x21, 0
+	.dw 0x79c0, 0xc898,	0x9fff, 0xc898,		0x21, 0
+	.dw 0xa040, 0xc898,	0xa07f, 0xc898,		0x21, 0
+	.dw 0xa0c0, 0xc898,	0xa0ff, 0xc898,		0x21, 0
+	.dw 0xa140, 0xc898,	0xa17f, 0xc898,		0x21, 0
+	.dw 0xa1c0, 0xc898,	0xa1ff, 0xc898,		0x21, 0
+	.dw 0xa240, 0xc898,	0xa27f, 0xc898,		0x21, 0
+	.dw 0xa2c0, 0xc898,	0xa2ff, 0xc898,		0x21, 0
+	.dw 0xa340, 0xc898,	0xa37f, 0xc898,		0x21, 0
+	.dw 0xa3c0, 0xc898,	0xa3ff, 0xc898,		0x21, 0
+	.dw 0xa440, 0xc898,	0xa47f, 0xc898,		0x21, 0
+	.dw 0xa4c0, 0xc898,	0xa4ff, 0xc898,		0x21, 0
+	.dw 0xa540, 0xc898,	0xa57f, 0xc898,		0x21, 0
+	.dw 0xa5c0, 0xc898,	0xa5ff, 0xc898,		0x21, 0
+	.dw 0xa640, 0xc898,	0xa67f, 0xc898,		0x21, 0
+	.dw 0xa6c0, 0xc898,	0xa6ff, 0xc898,		0x21, 0
+	.dw 0xa740, 0xc898,	0xa77f, 0xc898,		0x21, 0
+	.dw 0xa7c0, 0xc898,	0xa7ff, 0xc898,		0x21, 0
+	.dw 0xa840, 0xc898,	0xa87f, 0xc898,		0x21, 0
+	.dw 0xa8c0, 0xc898,	0xa8ff, 0xc898,		0x21, 0
+	.dw 0xa940, 0xc898,	0xa97f, 0xc898,		0x21, 0
+	.dw 0xa9c0, 0xc898,	0xa9ff, 0xc898,		0x21, 0
+	.dw 0xaa40, 0xc898,	0xaa7f, 0xc898,		0x21, 0
+	.dw 0xaac0, 0xc898,	0xaaff, 0xc898,		0x21, 0
+	.dw 0xab40, 0xc898,	0xab7f, 0xc898,		0x21, 0
+	.dw 0xabc0, 0xc898,	0xabff, 0xc898,		0x21, 0
+	.dw 0xac40, 0xc898,	0xac7f, 0xc898,		0x21, 0
+	.dw 0xacc0, 0xc898,	0xacff, 0xc898,		0x21, 0
+	.dw 0xad40, 0xc898,	0xad7f, 0xc898,		0x21, 0
+	.dw 0xadc0, 0xc898,	0xadff, 0xc898,		0x21, 0
+	.dw 0xae40, 0xc898,	0xae7f, 0xc898,		0x21, 0
+	.dw 0xaec0, 0xc898,	0xaeff, 0xc898,		0x21, 0
+	.dw 0xaf40, 0xc898,	0xaf7f, 0xc898,		0x21, 0
+	.dw 0xafc0, 0xc898,	0xafff, 0xc898,		0x21, 0
+	.dw 0xb040, 0xc898,	0xb07f, 0xc898,		0x21, 0
+	.dw 0xb0c0, 0xc898,	0xb0ff, 0xc898,		0x21, 0
+	.dw 0xb140, 0xc898,	0xb17f, 0xc898,		0x21, 0
+	.dw 0xb1c0, 0xc898,	0xb1ff, 0xc898,		0x21, 0
+	.dw 0xb240, 0xc898,	0xb27f, 0xc898,		0x21, 0
+	.dw 0xb2c0, 0xc898,	0xb2ff, 0xc898,		0x21, 0
+	.dw 0xb340, 0xc898,	0xb37f, 0xc898,		0x21, 0
+	.dw 0xb3c0, 0xc898,	0xb3ff, 0xc898,		0x21, 0
+	.dw 0xb440, 0xc898,	0xb47f, 0xc898,		0x21, 0
+	.dw 0xb4c0, 0xc898,	0xb4ff, 0xc898,		0x21, 0
+	.dw 0xb540, 0xc898,	0xb57f, 0xc898,		0x21, 0
+	.dw 0xb5c0, 0xc898,	0xb5ff, 0xc898,		0x21, 0
+	.dw 0xb640, 0xc898,	0xb67f, 0xc898,		0x21, 0
+	.dw 0xb6c0, 0xc898,	0xb6ff, 0xc898,		0x21, 0
+	.dw 0xb740, 0xc898,	0xb77f, 0xc898,		0x21, 0
+	.dw 0xb7c0, 0xc898,	0xb7ff, 0xc898,		0x21, 0
+	.dw 0xb840, 0xc898,	0xb87f, 0xc898,		0x21, 0
+	.dw 0xb8c0, 0xc898,	0xb8ff, 0xc898,		0x21, 0
+	.dw 0xb940, 0xc898,	0xb97f, 0xc898,		0x21, 0
+	.dw 0xb9c0, 0xc898,	0xdfff, 0xc898,		0x21, 0
+	.dw 0xe040, 0xc898,	0xe07f, 0xc898,		0x21, 0
+	.dw 0xe0c0, 0xc898,	0xe0ff, 0xc898,		0x21, 0
+	.dw 0xe140, 0xc898,	0xe17f, 0xc898,		0x21, 0
+	.dw 0xe1c0, 0xc898,	0xe1ff, 0xc898,		0x21, 0
+	.dw 0xe240, 0xc898,	0xe27f, 0xc898,		0x21, 0
+	.dw 0xe2c0, 0xc898,	0xe2ff, 0xc898,		0x21, 0
+	.dw 0xe340, 0xc898,	0xe37f, 0xc898,		0x21, 0
+	.dw 0xe3c0, 0xc898,	0xe3ff, 0xc898,		0x21, 0
+	.dw 0xe440, 0xc898,	0xe47f, 0xc898,		0x21, 0
+	.dw 0xe4c0, 0xc898,	0xe4ff, 0xc898,		0x21, 0
+	.dw 0xe540, 0xc898,	0xe57f, 0xc898,		0x21, 0
+	.dw 0xe5c0, 0xc898,	0xe5ff, 0xc898,		0x21, 0
+	.dw 0xe640, 0xc898,	0xe67f, 0xc898,		0x21, 0
+	.dw 0xe6c0, 0xc898,	0xe6ff, 0xc898,		0x21, 0
+	.dw 0xe740, 0xc898,	0xe77f, 0xc898,		0x21, 0
+	.dw 0xe7c0, 0xc898,	0xe7ff, 0xc898,		0x21, 0
+	.dw 0xe840, 0xc898,	0xe87f, 0xc898,		0x21, 0
+	.dw 0xe8c0, 0xc898,	0xe8ff, 0xc898,		0x21, 0
+	.dw 0xe940, 0xc898,	0xe97f, 0xc898,		0x21, 0
+	.dw 0xe9c0, 0xc898,	0xe9ff, 0xc898,		0x21, 0
+	.dw 0xea40, 0xc898,	0xea7f, 0xc898,		0x21, 0
+	.dw 0xeac0, 0xc898,	0xeaff, 0xc898,		0x21, 0
+	.dw 0xeb40, 0xc898,	0xeb7f, 0xc898,		0x21, 0
+	.dw 0xebc0, 0xc898,	0xebff, 0xc898,		0x21, 0
+	.dw 0xec40, 0xc898,	0xec7f, 0xc898,		0x21, 0
+	.dw 0xecc0, 0xc898,	0xecff, 0xc898,		0x21, 0
+	.dw 0xed40, 0xc898,	0xed7f, 0xc898,		0x21, 0
+	.dw 0xedc0, 0xc898,	0xedff, 0xc898,		0x21, 0
+	.dw 0xee40, 0xc898,	0xee7f, 0xc898,		0x21, 0
+	.dw 0xeec0, 0xc898,	0xeeff, 0xc898,		0x21, 0
+	.dw 0xef40, 0xc898,	0xef7f, 0xc898,		0x21, 0
+	.dw 0xefc0, 0xc898,	0xefff, 0xc898,		0x21, 0
+	.dw 0xf040, 0xc898,	0xf07f, 0xc898,		0x21, 0
+	.dw 0xf0c0, 0xc898,	0xf0ff, 0xc898,		0x21, 0
+	.dw 0xf140, 0xc898,	0xf17f, 0xc898,		0x21, 0
+	.dw 0xf1c0, 0xc898,	0xf1ff, 0xc898,		0x21, 0
+	.dw 0xf240, 0xc898,	0xf27f, 0xc898,		0x21, 0
+	.dw 0xf2c0, 0xc898,	0xf2ff, 0xc898,		0x21, 0
+	.dw 0xf340, 0xc898,	0xf37f, 0xc898,		0x21, 0
+	.dw 0xf3c0, 0xc898,	0xf3ff, 0xc898,		0x21, 0
+	.dw 0xf440, 0xc898,	0xf47f, 0xc898,		0x21, 0
+	.dw 0xf4c0, 0xc898,	0xf4ff, 0xc898,		0x21, 0
+	.dw 0xf540, 0xc898,	0xf57f, 0xc898,		0x21, 0
+	.dw 0xf5c0, 0xc898,	0xf5ff, 0xc898,		0x21, 0
+	.dw 0xf640, 0xc898,	0xf67f, 0xc898,		0x21, 0
+	.dw 0xf6c0, 0xc898,	0xf6ff, 0xc898,		0x21, 0
+	.dw 0xf740, 0xc898,	0xf77f, 0xc898,		0x21, 0
+	.dw 0xf7c0, 0xc898,	0xf7ff, 0xc898,		0x21, 0
+	.dw 0xf840, 0xc898,	0xf87f, 0xc898,		0x21, 0
+	.dw 0xf8c0, 0xc898,	0xf8ff, 0xc898,		0x21, 0
+	.dw 0xf940, 0xc898,	0xf97f, 0xc898,		0x21, 0
+	.dw 0xf9c0, 0xc898,	0x1fff, 0xc899,		0x21, 0
+	.dw 0x2040, 0xc899,	0x207f, 0xc899,		0x21, 0
+	.dw 0x20c0, 0xc899,	0x20ff, 0xc899,		0x21, 0
+	.dw 0x2140, 0xc899,	0x217f, 0xc899,		0x21, 0
+	.dw 0x21c0, 0xc899,	0x21ff, 0xc899,		0x21, 0
+	.dw 0x2240, 0xc899,	0x227f, 0xc899,		0x21, 0
+	.dw 0x22c0, 0xc899,	0x22ff, 0xc899,		0x21, 0
+	.dw 0x2340, 0xc899,	0x237f, 0xc899,		0x21, 0
+	.dw 0x23c0, 0xc899,	0x23ff, 0xc899,		0x21, 0
+	.dw 0x2440, 0xc899,	0x247f, 0xc899,		0x21, 0
+	.dw 0x24c0, 0xc899,	0x24ff, 0xc899,		0x21, 0
+	.dw 0x2540, 0xc899,	0x257f, 0xc899,		0x21, 0
+	.dw 0x25c0, 0xc899,	0x25ff, 0xc899,		0x21, 0
+	.dw 0x2640, 0xc899,	0x267f, 0xc899,		0x21, 0
+	.dw 0x26c0, 0xc899,	0x26ff, 0xc899,		0x21, 0
+	.dw 0x2740, 0xc899,	0x277f, 0xc899,		0x21, 0
+	.dw 0x27c0, 0xc899,	0x27ff, 0xc899,		0x21, 0
+	.dw 0x2840, 0xc899,	0x287f, 0xc899,		0x21, 0
+	.dw 0x28c0, 0xc899,	0x28ff, 0xc899,		0x21, 0
+	.dw 0x2940, 0xc899,	0x297f, 0xc899,		0x21, 0
+	.dw 0x29c0, 0xc899,	0x29ff, 0xc899,		0x21, 0
+	.dw 0x2a40, 0xc899,	0x2a7f, 0xc899,		0x21, 0
+	.dw 0x2ac0, 0xc899,	0x2aff, 0xc899,		0x21, 0
+	.dw 0x2b40, 0xc899,	0x2b7f, 0xc899,		0x21, 0
+	.dw 0x2bc0, 0xc899,	0x2bff, 0xc899,		0x21, 0
+	.dw 0x2c40, 0xc899,	0x2c7f, 0xc899,		0x21, 0
+	.dw 0x2cc0, 0xc899,	0x2cff, 0xc899,		0x21, 0
+	.dw 0x2d40, 0xc899,	0x2d7f, 0xc899,		0x21, 0
+	.dw 0x2dc0, 0xc899,	0x2dff, 0xc899,		0x21, 0
+	.dw 0x2e40, 0xc899,	0x2e7f, 0xc899,		0x21, 0
+	.dw 0x2ec0, 0xc899,	0x2eff, 0xc899,		0x21, 0
+	.dw 0x2f40, 0xc899,	0x2f7f, 0xc899,		0x21, 0
+	.dw 0x2fc0, 0xc899,	0x2fff, 0xc899,		0x21, 0
+	.dw 0x3040, 0xc899,	0x307f, 0xc899,		0x21, 0
+	.dw 0x30c0, 0xc899,	0x30ff, 0xc899,		0x21, 0
+	.dw 0x3140, 0xc899,	0x317f, 0xc899,		0x21, 0
+	.dw 0x31c0, 0xc899,	0x31ff, 0xc899,		0x21, 0
+	.dw 0x3240, 0xc899,	0x327f, 0xc899,		0x21, 0
+	.dw 0x32c0, 0xc899,	0x32ff, 0xc899,		0x21, 0
+	.dw 0x3340, 0xc899,	0x337f, 0xc899,		0x21, 0
+	.dw 0x33c0, 0xc899,	0x33ff, 0xc899,		0x21, 0
+	.dw 0x3440, 0xc899,	0x347f, 0xc899,		0x21, 0
+	.dw 0x34c0, 0xc899,	0x34ff, 0xc899,		0x21, 0
+	.dw 0x3540, 0xc899,	0x357f, 0xc899,		0x21, 0
+	.dw 0x35c0, 0xc899,	0x35ff, 0xc899,		0x21, 0
+	.dw 0x3640, 0xc899,	0x367f, 0xc899,		0x21, 0
+	.dw 0x36c0, 0xc899,	0x36ff, 0xc899,		0x21, 0
+	.dw 0x3740, 0xc899,	0x377f, 0xc899,		0x21, 0
+	.dw 0x37c0, 0xc899,	0x37ff, 0xc899,		0x21, 0
+	.dw 0x3840, 0xc899,	0x387f, 0xc899,		0x21, 0
+	.dw 0x38c0, 0xc899,	0x38ff, 0xc899,		0x21, 0
+	.dw 0x3940, 0xc899,	0x397f, 0xc899,		0x21, 0
+	.dw 0x39c0, 0xc899,	0x5fff, 0xc899,		0x21, 0
+	.dw 0x6040, 0xc899,	0x607f, 0xc899,		0x21, 0
+	.dw 0x60c0, 0xc899,	0x60ff, 0xc899,		0x21, 0
+	.dw 0x6140, 0xc899,	0x617f, 0xc899,		0x21, 0
+	.dw 0x61c0, 0xc899,	0x61ff, 0xc899,		0x21, 0
+	.dw 0x6240, 0xc899,	0x627f, 0xc899,		0x21, 0
+	.dw 0x62c0, 0xc899,	0x62ff, 0xc899,		0x21, 0
+	.dw 0x6340, 0xc899,	0x637f, 0xc899,		0x21, 0
+	.dw 0x63c0, 0xc899,	0x63ff, 0xc899,		0x21, 0
+	.dw 0x6440, 0xc899,	0x647f, 0xc899,		0x21, 0
+	.dw 0x64c0, 0xc899,	0x64ff, 0xc899,		0x21, 0
+	.dw 0x6540, 0xc899,	0x657f, 0xc899,		0x21, 0
+	.dw 0x65c0, 0xc899,	0x65ff, 0xc899,		0x21, 0
+	.dw 0x6640, 0xc899,	0x667f, 0xc899,		0x21, 0
+	.dw 0x66c0, 0xc899,	0x66ff, 0xc899,		0x21, 0
+	.dw 0x6740, 0xc899,	0x677f, 0xc899,		0x21, 0
+	.dw 0x67c0, 0xc899,	0x67ff, 0xc899,		0x21, 0
+	.dw 0x6840, 0xc899,	0x687f, 0xc899,		0x21, 0
+	.dw 0x68c0, 0xc899,	0x68ff, 0xc899,		0x21, 0
+	.dw 0x6940, 0xc899,	0x697f, 0xc899,		0x21, 0
+	.dw 0x69c0, 0xc899,	0x69ff, 0xc899,		0x21, 0
+	.dw 0x6a40, 0xc899,	0x6a7f, 0xc899,		0x21, 0
+	.dw 0x6ac0, 0xc899,	0x6aff, 0xc899,		0x21, 0
+	.dw 0x6b40, 0xc899,	0x6b7f, 0xc899,		0x21, 0
+	.dw 0x6bc0, 0xc899,	0x6bff, 0xc899,		0x21, 0
+	.dw 0x6c40, 0xc899,	0x6c7f, 0xc899,		0x21, 0
+	.dw 0x6cc0, 0xc899,	0x6cff, 0xc899,		0x21, 0
+	.dw 0x6d40, 0xc899,	0x6d7f, 0xc899,		0x21, 0
+	.dw 0x6dc0, 0xc899,	0x6dff, 0xc899,		0x21, 0
+	.dw 0x6e40, 0xc899,	0x6e7f, 0xc899,		0x21, 0
+	.dw 0x6ec0, 0xc899,	0x6eff, 0xc899,		0x21, 0
+	.dw 0x6f40, 0xc899,	0x6f7f, 0xc899,		0x21, 0
+	.dw 0x6fc0, 0xc899,	0x6fff, 0xc899,		0x21, 0
+	.dw 0x7040, 0xc899,	0x707f, 0xc899,		0x21, 0
+	.dw 0x70c0, 0xc899,	0x70ff, 0xc899,		0x21, 0
+	.dw 0x7140, 0xc899,	0x717f, 0xc899,		0x21, 0
+	.dw 0x71c0, 0xc899,	0x71ff, 0xc899,		0x21, 0
+	.dw 0x7240, 0xc899,	0x727f, 0xc899,		0x21, 0
+	.dw 0x72c0, 0xc899,	0x72ff, 0xc899,		0x21, 0
+	.dw 0x7340, 0xc899,	0x737f, 0xc899,		0x21, 0
+	.dw 0x73c0, 0xc899,	0x73ff, 0xc899,		0x21, 0
+	.dw 0x7440, 0xc899,	0x747f, 0xc899,		0x21, 0
+	.dw 0x74c0, 0xc899,	0x74ff, 0xc899,		0x21, 0
+	.dw 0x7540, 0xc899,	0x757f, 0xc899,		0x21, 0
+	.dw 0x75c0, 0xc899,	0x75ff, 0xc899,		0x21, 0
+	.dw 0x7640, 0xc899,	0x767f, 0xc899,		0x21, 0
+	.dw 0x76c0, 0xc899,	0x76ff, 0xc899,		0x21, 0
+	.dw 0x7740, 0xc899,	0x777f, 0xc899,		0x21, 0
+	.dw 0x77c0, 0xc899,	0x77ff, 0xc899,		0x21, 0
+	.dw 0x7840, 0xc899,	0x787f, 0xc899,		0x21, 0
+	.dw 0x78c0, 0xc899,	0x78ff, 0xc899,		0x21, 0
+	.dw 0x7940, 0xc899,	0x797f, 0xc899,		0x21, 0
+	.dw 0x79c0, 0xc899,	0x9fff, 0xc899,		0x21, 0
+	.dw 0xa040, 0xc899,	0xa07f, 0xc899,		0x21, 0
+	.dw 0xa0c0, 0xc899,	0xa0ff, 0xc899,		0x21, 0
+	.dw 0xa140, 0xc899,	0xa17f, 0xc899,		0x21, 0
+	.dw 0xa1c0, 0xc899,	0xa1ff, 0xc899,		0x21, 0
+	.dw 0xa240, 0xc899,	0xa27f, 0xc899,		0x21, 0
+	.dw 0xa2c0, 0xc899,	0xa2ff, 0xc899,		0x21, 0
+	.dw 0xa340, 0xc899,	0xa37f, 0xc899,		0x21, 0
+	.dw 0xa3c0, 0xc899,	0xa3ff, 0xc899,		0x21, 0
+	.dw 0xa440, 0xc899,	0xa47f, 0xc899,		0x21, 0
+	.dw 0xa4c0, 0xc899,	0xa4ff, 0xc899,		0x21, 0
+	.dw 0xa540, 0xc899,	0xa57f, 0xc899,		0x21, 0
+	.dw 0xa5c0, 0xc899,	0xa5ff, 0xc899,		0x21, 0
+	.dw 0xa640, 0xc899,	0xa67f, 0xc899,		0x21, 0
+	.dw 0xa6c0, 0xc899,	0xa6ff, 0xc899,		0x21, 0
+	.dw 0xa740, 0xc899,	0xa77f, 0xc899,		0x21, 0
+	.dw 0xa7c0, 0xc899,	0xa7ff, 0xc899,		0x21, 0
+	.dw 0xa840, 0xc899,	0xa87f, 0xc899,		0x21, 0
+	.dw 0xa8c0, 0xc899,	0xa8ff, 0xc899,		0x21, 0
+	.dw 0xa940, 0xc899,	0xa97f, 0xc899,		0x21, 0
+	.dw 0xa9c0, 0xc899,	0xa9ff, 0xc899,		0x21, 0
+	.dw 0xaa40, 0xc899,	0xaa7f, 0xc899,		0x21, 0
+	.dw 0xaac0, 0xc899,	0xaaff, 0xc899,		0x21, 0
+	.dw 0xab40, 0xc899,	0xab7f, 0xc899,		0x21, 0
+	.dw 0xabc0, 0xc899,	0xabff, 0xc899,		0x21, 0
+	.dw 0xac40, 0xc899,	0xac7f, 0xc899,		0x21, 0
+	.dw 0xacc0, 0xc899,	0xacff, 0xc899,		0x21, 0
+	.dw 0xad40, 0xc899,	0xad7f, 0xc899,		0x21, 0
+	.dw 0xadc0, 0xc899,	0xadff, 0xc899,		0x21, 0
+	.dw 0xae40, 0xc899,	0xae7f, 0xc899,		0x21, 0
+	.dw 0xaec0, 0xc899,	0xaeff, 0xc899,		0x21, 0
+	.dw 0xaf40, 0xc899,	0xaf7f, 0xc899,		0x21, 0
+	.dw 0xafc0, 0xc899,	0xafff, 0xc899,		0x21, 0
+	.dw 0xb040, 0xc899,	0xb07f, 0xc899,		0x21, 0
+	.dw 0xb0c0, 0xc899,	0xb0ff, 0xc899,		0x21, 0
+	.dw 0xb140, 0xc899,	0xb17f, 0xc899,		0x21, 0
+	.dw 0xb1c0, 0xc899,	0xb1ff, 0xc899,		0x21, 0
+	.dw 0xb240, 0xc899,	0xb27f, 0xc899,		0x21, 0
+	.dw 0xb2c0, 0xc899,	0xb2ff, 0xc899,		0x21, 0
+	.dw 0xb340, 0xc899,	0xb37f, 0xc899,		0x21, 0
+	.dw 0xb3c0, 0xc899,	0xb3ff, 0xc899,		0x21, 0
+	.dw 0xb440, 0xc899,	0xb47f, 0xc899,		0x21, 0
+	.dw 0xb4c0, 0xc899,	0xb4ff, 0xc899,		0x21, 0
+	.dw 0xb540, 0xc899,	0xb57f, 0xc899,		0x21, 0
+	.dw 0xb5c0, 0xc899,	0xb5ff, 0xc899,		0x21, 0
+	.dw 0xb640, 0xc899,	0xb67f, 0xc899,		0x21, 0
+	.dw 0xb6c0, 0xc899,	0xb6ff, 0xc899,		0x21, 0
+	.dw 0xb740, 0xc899,	0xb77f, 0xc899,		0x21, 0
+	.dw 0xb7c0, 0xc899,	0xb7ff, 0xc899,		0x21, 0
+	.dw 0xb840, 0xc899,	0xb87f, 0xc899,		0x21, 0
+	.dw 0xb8c0, 0xc899,	0xb8ff, 0xc899,		0x21, 0
+	.dw 0xb940, 0xc899,	0xb97f, 0xc899,		0x21, 0
+	.dw 0xb9c0, 0xc899,	0xdfff, 0xc899,		0x21, 0
+	.dw 0xe040, 0xc899,	0xe07f, 0xc899,		0x21, 0
+	.dw 0xe0c0, 0xc899,	0xe0ff, 0xc899,		0x21, 0
+	.dw 0xe140, 0xc899,	0xe17f, 0xc899,		0x21, 0
+	.dw 0xe1c0, 0xc899,	0xe1ff, 0xc899,		0x21, 0
+	.dw 0xe240, 0xc899,	0xe27f, 0xc899,		0x21, 0
+	.dw 0xe2c0, 0xc899,	0xe2ff, 0xc899,		0x21, 0
+	.dw 0xe340, 0xc899,	0xe37f, 0xc899,		0x21, 0
+	.dw 0xe3c0, 0xc899,	0xe3ff, 0xc899,		0x21, 0
+	.dw 0xe440, 0xc899,	0xe47f, 0xc899,		0x21, 0
+	.dw 0xe4c0, 0xc899,	0xe4ff, 0xc899,		0x21, 0
+	.dw 0xe540, 0xc899,	0xe57f, 0xc899,		0x21, 0
+	.dw 0xe5c0, 0xc899,	0xe5ff, 0xc899,		0x21, 0
+	.dw 0xe640, 0xc899,	0xe67f, 0xc899,		0x21, 0
+	.dw 0xe6c0, 0xc899,	0xe6ff, 0xc899,		0x21, 0
+	.dw 0xe740, 0xc899,	0xe77f, 0xc899,		0x21, 0
+	.dw 0xe7c0, 0xc899,	0xe7ff, 0xc899,		0x21, 0
+	.dw 0xe840, 0xc899,	0xe87f, 0xc899,		0x21, 0
+	.dw 0xe8c0, 0xc899,	0xe8ff, 0xc899,		0x21, 0
+	.dw 0xe940, 0xc899,	0xe97f, 0xc899,		0x21, 0
+	.dw 0xe9c0, 0xc899,	0xe9ff, 0xc899,		0x21, 0
+	.dw 0xea40, 0xc899,	0xea7f, 0xc899,		0x21, 0
+	.dw 0xeac0, 0xc899,	0xeaff, 0xc899,		0x21, 0
+	.dw 0xeb40, 0xc899,	0xeb7f, 0xc899,		0x21, 0
+	.dw 0xebc0, 0xc899,	0xebff, 0xc899,		0x21, 0
+	.dw 0xec40, 0xc899,	0xec7f, 0xc899,		0x21, 0
+	.dw 0xecc0, 0xc899,	0xecff, 0xc899,		0x21, 0
+	.dw 0xed40, 0xc899,	0xed7f, 0xc899,		0x21, 0
+	.dw 0xedc0, 0xc899,	0xedff, 0xc899,		0x21, 0
+	.dw 0xee40, 0xc899,	0xee7f, 0xc899,		0x21, 0
+	.dw 0xeec0, 0xc899,	0xeeff, 0xc899,		0x21, 0
+	.dw 0xef40, 0xc899,	0xef7f, 0xc899,		0x21, 0
+	.dw 0xefc0, 0xc899,	0xefff, 0xc899,		0x21, 0
+	.dw 0xf040, 0xc899,	0xf07f, 0xc899,		0x21, 0
+	.dw 0xf0c0, 0xc899,	0xf0ff, 0xc899,		0x21, 0
+	.dw 0xf140, 0xc899,	0xf17f, 0xc899,		0x21, 0
+	.dw 0xf1c0, 0xc899,	0xf1ff, 0xc899,		0x21, 0
+	.dw 0xf240, 0xc899,	0xf27f, 0xc899,		0x21, 0
+	.dw 0xf2c0, 0xc899,	0xf2ff, 0xc899,		0x21, 0
+	.dw 0xf340, 0xc899,	0xf37f, 0xc899,		0x21, 0
+	.dw 0xf3c0, 0xc899,	0xf3ff, 0xc899,		0x21, 0
+	.dw 0xf440, 0xc899,	0xf47f, 0xc899,		0x21, 0
+	.dw 0xf4c0, 0xc899,	0xf4ff, 0xc899,		0x21, 0
+	.dw 0xf540, 0xc899,	0xf57f, 0xc899,		0x21, 0
+	.dw 0xf5c0, 0xc899,	0xf5ff, 0xc899,		0x21, 0
+	.dw 0xf640, 0xc899,	0xf67f, 0xc899,		0x21, 0
+	.dw 0xf6c0, 0xc899,	0xf6ff, 0xc899,		0x21, 0
+	.dw 0xf740, 0xc899,	0xf77f, 0xc899,		0x21, 0
+	.dw 0xf7c0, 0xc899,	0xf7ff, 0xc899,		0x21, 0
+	.dw 0xf840, 0xc899,	0xf87f, 0xc899,		0x21, 0
+	.dw 0xf8c0, 0xc899,	0xf8ff, 0xc899,		0x21, 0
+	.dw 0xf940, 0xc899,	0xf97f, 0xc899,		0x21, 0
+	.dw 0xf9c0, 0xc899,	0x1fff, 0xc89a,		0x21, 0
+	.dw 0x2040, 0xc89a,	0x207f, 0xc89a,		0x21, 0
+	.dw 0x20c0, 0xc89a,	0x20ff, 0xc89a,		0x21, 0
+	.dw 0x2140, 0xc89a,	0x217f, 0xc89a,		0x21, 0
+	.dw 0x21c0, 0xc89a,	0x21ff, 0xc89a,		0x21, 0
+	.dw 0x2240, 0xc89a,	0x227f, 0xc89a,		0x21, 0
+	.dw 0x22c0, 0xc89a,	0x22ff, 0xc89a,		0x21, 0
+	.dw 0x2340, 0xc89a,	0x237f, 0xc89a,		0x21, 0
+	.dw 0x23c0, 0xc89a,	0x23ff, 0xc89a,		0x21, 0
+	.dw 0x2440, 0xc89a,	0x247f, 0xc89a,		0x21, 0
+	.dw 0x24c0, 0xc89a,	0x24ff, 0xc89a,		0x21, 0
+	.dw 0x2540, 0xc89a,	0x257f, 0xc89a,		0x21, 0
+	.dw 0x25c0, 0xc89a,	0x25ff, 0xc89a,		0x21, 0
+	.dw 0x2640, 0xc89a,	0x267f, 0xc89a,		0x21, 0
+	.dw 0x26c0, 0xc89a,	0x26ff, 0xc89a,		0x21, 0
+	.dw 0x2740, 0xc89a,	0x277f, 0xc89a,		0x21, 0
+	.dw 0x27c0, 0xc89a,	0x27ff, 0xc89a,		0x21, 0
+	.dw 0x2840, 0xc89a,	0x287f, 0xc89a,		0x21, 0
+	.dw 0x28c0, 0xc89a,	0x28ff, 0xc89a,		0x21, 0
+	.dw 0x2940, 0xc89a,	0x297f, 0xc89a,		0x21, 0
+	.dw 0x29c0, 0xc89a,	0x29ff, 0xc89a,		0x21, 0
+	.dw 0x2a40, 0xc89a,	0x2a7f, 0xc89a,		0x21, 0
+	.dw 0x2ac0, 0xc89a,	0x2aff, 0xc89a,		0x21, 0
+	.dw 0x2b40, 0xc89a,	0x2b7f, 0xc89a,		0x21, 0
+	.dw 0x2bc0, 0xc89a,	0x2bff, 0xc89a,		0x21, 0
+	.dw 0x2c40, 0xc89a,	0x2c7f, 0xc89a,		0x21, 0
+	.dw 0x2cc0, 0xc89a,	0x2cff, 0xc89a,		0x21, 0
+	.dw 0x2d40, 0xc89a,	0x2d7f, 0xc89a,		0x21, 0
+	.dw 0x2dc0, 0xc89a,	0x2dff, 0xc89a,		0x21, 0
+	.dw 0x2e40, 0xc89a,	0x2e7f, 0xc89a,		0x21, 0
+	.dw 0x2ec0, 0xc89a,	0x2eff, 0xc89a,		0x21, 0
+	.dw 0x2f40, 0xc89a,	0x2f7f, 0xc89a,		0x21, 0
+	.dw 0x2fc0, 0xc89a,	0x2fff, 0xc89a,		0x21, 0
+	.dw 0x3040, 0xc89a,	0x307f, 0xc89a,		0x21, 0
+	.dw 0x30c0, 0xc89a,	0x30ff, 0xc89a,		0x21, 0
+	.dw 0x3140, 0xc89a,	0x317f, 0xc89a,		0x21, 0
+	.dw 0x31c0, 0xc89a,	0x31ff, 0xc89a,		0x21, 0
+	.dw 0x3240, 0xc89a,	0x327f, 0xc89a,		0x21, 0
+	.dw 0x32c0, 0xc89a,	0x32ff, 0xc89a,		0x21, 0
+	.dw 0x3340, 0xc89a,	0x337f, 0xc89a,		0x21, 0
+	.dw 0x33c0, 0xc89a,	0x33ff, 0xc89a,		0x21, 0
+	.dw 0x3440, 0xc89a,	0x347f, 0xc89a,		0x21, 0
+	.dw 0x34c0, 0xc89a,	0x34ff, 0xc89a,		0x21, 0
+	.dw 0x3540, 0xc89a,	0x357f, 0xc89a,		0x21, 0
+	.dw 0x35c0, 0xc89a,	0x35ff, 0xc89a,		0x21, 0
+	.dw 0x3640, 0xc89a,	0x367f, 0xc89a,		0x21, 0
+	.dw 0x36c0, 0xc89a,	0x36ff, 0xc89a,		0x21, 0
+	.dw 0x3740, 0xc89a,	0x377f, 0xc89a,		0x21, 0
+	.dw 0x37c0, 0xc89a,	0x37ff, 0xc89a,		0x21, 0
+	.dw 0x3840, 0xc89a,	0x387f, 0xc89a,		0x21, 0
+	.dw 0x38c0, 0xc89a,	0x38ff, 0xc89a,		0x21, 0
+	.dw 0x3940, 0xc89a,	0x397f, 0xc89a,		0x21, 0
+	.dw 0x39c0, 0xc89a,	0x5fff, 0xc89a,		0x21, 0
+	.dw 0x6040, 0xc89a,	0x607f, 0xc89a,		0x21, 0
+	.dw 0x60c0, 0xc89a,	0x60ff, 0xc89a,		0x21, 0
+	.dw 0x6140, 0xc89a,	0x617f, 0xc89a,		0x21, 0
+	.dw 0x61c0, 0xc89a,	0x61ff, 0xc89a,		0x21, 0
+	.dw 0x6240, 0xc89a,	0x627f, 0xc89a,		0x21, 0
+	.dw 0x62c0, 0xc89a,	0x62ff, 0xc89a,		0x21, 0
+	.dw 0x6340, 0xc89a,	0x637f, 0xc89a,		0x21, 0
+	.dw 0x63c0, 0xc89a,	0x63ff, 0xc89a,		0x21, 0
+	.dw 0x6440, 0xc89a,	0x647f, 0xc89a,		0x21, 0
+	.dw 0x64c0, 0xc89a,	0x64ff, 0xc89a,		0x21, 0
+	.dw 0x6540, 0xc89a,	0x657f, 0xc89a,		0x21, 0
+	.dw 0x65c0, 0xc89a,	0x65ff, 0xc89a,		0x21, 0
+	.dw 0x6640, 0xc89a,	0x667f, 0xc89a,		0x21, 0
+	.dw 0x66c0, 0xc89a,	0x66ff, 0xc89a,		0x21, 0
+	.dw 0x6740, 0xc89a,	0x677f, 0xc89a,		0x21, 0
+	.dw 0x67c0, 0xc89a,	0x67ff, 0xc89a,		0x21, 0
+	.dw 0x6840, 0xc89a,	0x687f, 0xc89a,		0x21, 0
+	.dw 0x68c0, 0xc89a,	0x68ff, 0xc89a,		0x21, 0
+	.dw 0x6940, 0xc89a,	0x697f, 0xc89a,		0x21, 0
+	.dw 0x69c0, 0xc89a,	0x69ff, 0xc89a,		0x21, 0
+	.dw 0x6a40, 0xc89a,	0x6a7f, 0xc89a,		0x21, 0
+	.dw 0x6ac0, 0xc89a,	0x6aff, 0xc89a,		0x21, 0
+	.dw 0x6b40, 0xc89a,	0x6b7f, 0xc89a,		0x21, 0
+	.dw 0x6bc0, 0xc89a,	0x6bff, 0xc89a,		0x21, 0
+	.dw 0x6c40, 0xc89a,	0x6c7f, 0xc89a,		0x21, 0
+	.dw 0x6cc0, 0xc89a,	0x6cff, 0xc89a,		0x21, 0
+	.dw 0x6d40, 0xc89a,	0x6d7f, 0xc89a,		0x21, 0
+	.dw 0x6dc0, 0xc89a,	0x6dff, 0xc89a,		0x21, 0
+	.dw 0x6e40, 0xc89a,	0x6e7f, 0xc89a,		0x21, 0
+	.dw 0x6ec0, 0xc89a,	0x6eff, 0xc89a,		0x21, 0
+	.dw 0x6f40, 0xc89a,	0x6f7f, 0xc89a,		0x21, 0
+	.dw 0x6fc0, 0xc89a,	0x6fff, 0xc89a,		0x21, 0
+	.dw 0x7040, 0xc89a,	0x707f, 0xc89a,		0x21, 0
+	.dw 0x70c0, 0xc89a,	0x70ff, 0xc89a,		0x21, 0
+	.dw 0x7140, 0xc89a,	0x717f, 0xc89a,		0x21, 0
+	.dw 0x71c0, 0xc89a,	0x71ff, 0xc89a,		0x21, 0
+	.dw 0x7240, 0xc89a,	0x727f, 0xc89a,		0x21, 0
+	.dw 0x72c0, 0xc89a,	0x72ff, 0xc89a,		0x21, 0
+	.dw 0x7340, 0xc89a,	0x737f, 0xc89a,		0x21, 0
+	.dw 0x73c0, 0xc89a,	0x73ff, 0xc89a,		0x21, 0
+	.dw 0x7440, 0xc89a,	0x747f, 0xc89a,		0x21, 0
+	.dw 0x74c0, 0xc89a,	0x74ff, 0xc89a,		0x21, 0
+	.dw 0x7540, 0xc89a,	0x757f, 0xc89a,		0x21, 0
+	.dw 0x75c0, 0xc89a,	0x75ff, 0xc89a,		0x21, 0
+	.dw 0x7640, 0xc89a,	0x767f, 0xc89a,		0x21, 0
+	.dw 0x76c0, 0xc89a,	0x76ff, 0xc89a,		0x21, 0
+	.dw 0x7740, 0xc89a,	0x777f, 0xc89a,		0x21, 0
+	.dw 0x77c0, 0xc89a,	0x77ff, 0xc89a,		0x21, 0
+	.dw 0x7840, 0xc89a,	0x787f, 0xc89a,		0x21, 0
+	.dw 0x78c0, 0xc89a,	0x78ff, 0xc89a,		0x21, 0
+	.dw 0x7940, 0xc89a,	0x797f, 0xc89a,		0x21, 0
+	.dw 0x79c0, 0xc89a,	0x9fff, 0xc89a,		0x21, 0
+	.dw 0xa040, 0xc89a,	0xa07f, 0xc89a,		0x21, 0
+	.dw 0xa0c0, 0xc89a,	0xa0ff, 0xc89a,		0x21, 0
+	.dw 0xa140, 0xc89a,	0xa17f, 0xc89a,		0x21, 0
+	.dw 0xa1c0, 0xc89a,	0xa1ff, 0xc89a,		0x21, 0
+	.dw 0xa240, 0xc89a,	0xa27f, 0xc89a,		0x21, 0
+	.dw 0xa2c0, 0xc89a,	0xa2ff, 0xc89a,		0x21, 0
+	.dw 0xa340, 0xc89a,	0xa37f, 0xc89a,		0x21, 0
+	.dw 0xa3c0, 0xc89a,	0xa3ff, 0xc89a,		0x21, 0
+	.dw 0xa440, 0xc89a,	0xa47f, 0xc89a,		0x21, 0
+	.dw 0xa4c0, 0xc89a,	0xa4ff, 0xc89a,		0x21, 0
+	.dw 0xa540, 0xc89a,	0xa57f, 0xc89a,		0x21, 0
+	.dw 0xa5c0, 0xc89a,	0xa5ff, 0xc89a,		0x21, 0
+	.dw 0xa640, 0xc89a,	0xa67f, 0xc89a,		0x21, 0
+	.dw 0xa6c0, 0xc89a,	0xa6ff, 0xc89a,		0x21, 0
+	.dw 0xa740, 0xc89a,	0xa77f, 0xc89a,		0x21, 0
+	.dw 0xa7c0, 0xc89a,	0xa7ff, 0xc89a,		0x21, 0
+	.dw 0xa840, 0xc89a,	0xa87f, 0xc89a,		0x21, 0
+	.dw 0xa8c0, 0xc89a,	0xa8ff, 0xc89a,		0x21, 0
+	.dw 0xa940, 0xc89a,	0xa97f, 0xc89a,		0x21, 0
+	.dw 0xa9c0, 0xc89a,	0xa9ff, 0xc89a,		0x21, 0
+	.dw 0xaa40, 0xc89a,	0xaa7f, 0xc89a,		0x21, 0
+	.dw 0xaac0, 0xc89a,	0xaaff, 0xc89a,		0x21, 0
+	.dw 0xab40, 0xc89a,	0xab7f, 0xc89a,		0x21, 0
+	.dw 0xabc0, 0xc89a,	0xabff, 0xc89a,		0x21, 0
+	.dw 0xac40, 0xc89a,	0xac7f, 0xc89a,		0x21, 0
+	.dw 0xacc0, 0xc89a,	0xacff, 0xc89a,		0x21, 0
+	.dw 0xad40, 0xc89a,	0xad7f, 0xc89a,		0x21, 0
+	.dw 0xadc0, 0xc89a,	0xadff, 0xc89a,		0x21, 0
+	.dw 0xae40, 0xc89a,	0xae7f, 0xc89a,		0x21, 0
+	.dw 0xaec0, 0xc89a,	0xaeff, 0xc89a,		0x21, 0
+	.dw 0xaf40, 0xc89a,	0xaf7f, 0xc89a,		0x21, 0
+	.dw 0xafc0, 0xc89a,	0xafff, 0xc89a,		0x21, 0
+	.dw 0xb040, 0xc89a,	0xb07f, 0xc89a,		0x21, 0
+	.dw 0xb0c0, 0xc89a,	0xb0ff, 0xc89a,		0x21, 0
+	.dw 0xb140, 0xc89a,	0xb17f, 0xc89a,		0x21, 0
+	.dw 0xb1c0, 0xc89a,	0xb1ff, 0xc89a,		0x21, 0
+	.dw 0xb240, 0xc89a,	0xb27f, 0xc89a,		0x21, 0
+	.dw 0xb2c0, 0xc89a,	0xb2ff, 0xc89a,		0x21, 0
+	.dw 0xb340, 0xc89a,	0xb37f, 0xc89a,		0x21, 0
+	.dw 0xb3c0, 0xc89a,	0xb3ff, 0xc89a,		0x21, 0
+	.dw 0xb440, 0xc89a,	0xb47f, 0xc89a,		0x21, 0
+	.dw 0xb4c0, 0xc89a,	0xb4ff, 0xc89a,		0x21, 0
+	.dw 0xb540, 0xc89a,	0xb57f, 0xc89a,		0x21, 0
+	.dw 0xb5c0, 0xc89a,	0xb5ff, 0xc89a,		0x21, 0
+	.dw 0xb640, 0xc89a,	0xb67f, 0xc89a,		0x21, 0
+	.dw 0xb6c0, 0xc89a,	0xb6ff, 0xc89a,		0x21, 0
+	.dw 0xb740, 0xc89a,	0xb77f, 0xc89a,		0x21, 0
+	.dw 0xb7c0, 0xc89a,	0xb7ff, 0xc89a,		0x21, 0
+	.dw 0xb840, 0xc89a,	0xb87f, 0xc89a,		0x21, 0
+	.dw 0xb8c0, 0xc89a,	0xb8ff, 0xc89a,		0x21, 0
+	.dw 0xb940, 0xc89a,	0xb97f, 0xc89a,		0x21, 0
+	.dw 0xb9c0, 0xc89a,	0xdfff, 0xc89a,		0x21, 0
+	.dw 0xe040, 0xc89a,	0xe07f, 0xc89a,		0x21, 0
+	.dw 0xe0c0, 0xc89a,	0xe0ff, 0xc89a,		0x21, 0
+	.dw 0xe140, 0xc89a,	0xe17f, 0xc89a,		0x21, 0
+	.dw 0xe1c0, 0xc89a,	0xe1ff, 0xc89a,		0x21, 0
+	.dw 0xe240, 0xc89a,	0xe27f, 0xc89a,		0x21, 0
+	.dw 0xe2c0, 0xc89a,	0xe2ff, 0xc89a,		0x21, 0
+	.dw 0xe340, 0xc89a,	0xe37f, 0xc89a,		0x21, 0
+	.dw 0xe3c0, 0xc89a,	0xe3ff, 0xc89a,		0x21, 0
+	.dw 0xe440, 0xc89a,	0xe47f, 0xc89a,		0x21, 0
+	.dw 0xe4c0, 0xc89a,	0xe4ff, 0xc89a,		0x21, 0
+	.dw 0xe540, 0xc89a,	0xe57f, 0xc89a,		0x21, 0
+	.dw 0xe5c0, 0xc89a,	0xe5ff, 0xc89a,		0x21, 0
+	.dw 0xe640, 0xc89a,	0xe67f, 0xc89a,		0x21, 0
+	.dw 0xe6c0, 0xc89a,	0xe6ff, 0xc89a,		0x21, 0
+	.dw 0xe740, 0xc89a,	0xe77f, 0xc89a,		0x21, 0
+	.dw 0xe7c0, 0xc89a,	0xe7ff, 0xc89a,		0x21, 0
+	.dw 0xe840, 0xc89a,	0xe87f, 0xc89a,		0x21, 0
+	.dw 0xe8c0, 0xc89a,	0xe8ff, 0xc89a,		0x21, 0
+	.dw 0xe940, 0xc89a,	0xe97f, 0xc89a,		0x21, 0
+	.dw 0xe9c0, 0xc89a,	0xe9ff, 0xc89a,		0x21, 0
+	.dw 0xea40, 0xc89a,	0xea7f, 0xc89a,		0x21, 0
+	.dw 0xeac0, 0xc89a,	0xeaff, 0xc89a,		0x21, 0
+	.dw 0xeb40, 0xc89a,	0xeb7f, 0xc89a,		0x21, 0
+	.dw 0xebc0, 0xc89a,	0xebff, 0xc89a,		0x21, 0
+	.dw 0xec40, 0xc89a,	0xec7f, 0xc89a,		0x21, 0
+	.dw 0xecc0, 0xc89a,	0xecff, 0xc89a,		0x21, 0
+	.dw 0xed40, 0xc89a,	0xed7f, 0xc89a,		0x21, 0
+	.dw 0xedc0, 0xc89a,	0xedff, 0xc89a,		0x21, 0
+	.dw 0xee40, 0xc89a,	0xee7f, 0xc89a,		0x21, 0
+	.dw 0xeec0, 0xc89a,	0xeeff, 0xc89a,		0x21, 0
+	.dw 0xef40, 0xc89a,	0xef7f, 0xc89a,		0x21, 0
+	.dw 0xefc0, 0xc89a,	0xefff, 0xc89a,		0x21, 0
+	.dw 0xf040, 0xc89a,	0xf07f, 0xc89a,		0x21, 0
+	.dw 0xf0c0, 0xc89a,	0xf0ff, 0xc89a,		0x21, 0
+	.dw 0xf140, 0xc89a,	0xf17f, 0xc89a,		0x21, 0
+	.dw 0xf1c0, 0xc89a,	0xf1ff, 0xc89a,		0x21, 0
+	.dw 0xf240, 0xc89a,	0xf27f, 0xc89a,		0x21, 0
+	.dw 0xf2c0, 0xc89a,	0xf2ff, 0xc89a,		0x21, 0
+	.dw 0xf340, 0xc89a,	0xf37f, 0xc89a,		0x21, 0
+	.dw 0xf3c0, 0xc89a,	0xf3ff, 0xc89a,		0x21, 0
+	.dw 0xf440, 0xc89a,	0xf47f, 0xc89a,		0x21, 0
+	.dw 0xf4c0, 0xc89a,	0xf4ff, 0xc89a,		0x21, 0
+	.dw 0xf540, 0xc89a,	0xf57f, 0xc89a,		0x21, 0
+	.dw 0xf5c0, 0xc89a,	0xf5ff, 0xc89a,		0x21, 0
+	.dw 0xf640, 0xc89a,	0xf67f, 0xc89a,		0x21, 0
+	.dw 0xf6c0, 0xc89a,	0xf6ff, 0xc89a,		0x21, 0
+	.dw 0xf740, 0xc89a,	0xf77f, 0xc89a,		0x21, 0
+	.dw 0xf7c0, 0xc89a,	0xf7ff, 0xc89a,		0x21, 0
+	.dw 0xf840, 0xc89a,	0xf87f, 0xc89a,		0x21, 0
+	.dw 0xf8c0, 0xc89a,	0xf8ff, 0xc89a,		0x21, 0
+	.dw 0xf940, 0xc89a,	0xf97f, 0xc89a,		0x21, 0
+	.dw 0xf9c0, 0xc89a,	0xffff, 0xc89b,		0x21, 0
+	.dw 0x0040, 0xc89c,	0x007f, 0xc89c,		0x21, 0
+	.dw 0x00c0, 0xc89c,	0x00ff, 0xc89c,		0x21, 0
+	.dw 0x0140, 0xc89c,	0x017f, 0xc89c,		0x21, 0
+	.dw 0x01c0, 0xc89c,	0x01ff, 0xc89c,		0x21, 0
+	.dw 0x0240, 0xc89c,	0x027f, 0xc89c,		0x21, 0
+	.dw 0x02c0, 0xc89c,	0x02ff, 0xc89c,		0x21, 0
+	.dw 0x0340, 0xc89c,	0x037f, 0xc89c,		0x21, 0
+	.dw 0x03c0, 0xc89c,	0x03ff, 0xc89c,		0x21, 0
+	.dw 0x0440, 0xc89c,	0x047f, 0xc89c,		0x21, 0
+	.dw 0x04c0, 0xc89c,	0x04ff, 0xc89c,		0x21, 0
+	.dw 0x0540, 0xc89c,	0x057f, 0xc89c,		0x21, 0
+	.dw 0x05c0, 0xc89c,	0x05ff, 0xc89c,		0x21, 0
+	.dw 0x0640, 0xc89c,	0x067f, 0xc89c,		0x21, 0
+	.dw 0x06c0, 0xc89c,	0x06ff, 0xc89c,		0x21, 0
+	.dw 0x0740, 0xc89c,	0x077f, 0xc89c,		0x21, 0
+	.dw 0x07c0, 0xc89c,	0x07ff, 0xc89c,		0x21, 0
+	.dw 0x0840, 0xc89c,	0x087f, 0xc89c,		0x21, 0
+	.dw 0x08c0, 0xc89c,	0x08ff, 0xc89c,		0x21, 0
+	.dw 0x0940, 0xc89c,	0x097f, 0xc89c,		0x21, 0
+	.dw 0x09c0, 0xc89c,	0x09ff, 0xc89c,		0x21, 0
+	.dw 0x0a40, 0xc89c,	0x0a7f, 0xc89c,		0x21, 0
+	.dw 0x0ac0, 0xc89c,	0x0aff, 0xc89c,		0x21, 0
+	.dw 0x0b40, 0xc89c,	0x0b7f, 0xc89c,		0x21, 0
+	.dw 0x0bc0, 0xc89c,	0x0bff, 0xc89c,		0x21, 0
+	.dw 0x0c40, 0xc89c,	0x0c7f, 0xc89c,		0x21, 0
+	.dw 0x0cc0, 0xc89c,	0x0cff, 0xc89c,		0x21, 0
+	.dw 0x0d40, 0xc89c,	0x0d7f, 0xc89c,		0x21, 0
+	.dw 0x0dc0, 0xc89c,	0x0dff, 0xc89c,		0x21, 0
+	.dw 0x0e40, 0xc89c,	0x0e7f, 0xc89c,		0x21, 0
+	.dw 0x0ec0, 0xc89c,	0x0eff, 0xc89c,		0x21, 0
+	.dw 0x0f40, 0xc89c,	0x0f7f, 0xc89c,		0x21, 0
+	.dw 0x0fc0, 0xc89c,	0x0fff, 0xc89c,		0x21, 0
+	.dw 0x1040, 0xc89c,	0x107f, 0xc89c,		0x21, 0
+	.dw 0x10c0, 0xc89c,	0x10ff, 0xc89c,		0x21, 0
+	.dw 0x1140, 0xc89c,	0x117f, 0xc89c,		0x21, 0
+	.dw 0x11c0, 0xc89c,	0x11ff, 0xc89c,		0x21, 0
+	.dw 0x1240, 0xc89c,	0x127f, 0xc89c,		0x21, 0
+	.dw 0x12c0, 0xc89c,	0x12ff, 0xc89c,		0x21, 0
+	.dw 0x1340, 0xc89c,	0x137f, 0xc89c,		0x21, 0
+	.dw 0x13c0, 0xc89c,	0x13ff, 0xc89c,		0x21, 0
+	.dw 0x1440, 0xc89c,	0x147f, 0xc89c,		0x21, 0
+	.dw 0x14c0, 0xc89c,	0x14ff, 0xc89c,		0x21, 0
+	.dw 0x1540, 0xc89c,	0x157f, 0xc89c,		0x21, 0
+	.dw 0x15c0, 0xc89c,	0x15ff, 0xc89c,		0x21, 0
+	.dw 0x1640, 0xc89c,	0x167f, 0xc89c,		0x21, 0
+	.dw 0x16c0, 0xc89c,	0x16ff, 0xc89c,		0x21, 0
+	.dw 0x1740, 0xc89c,	0x177f, 0xc89c,		0x21, 0
+	.dw 0x17c0, 0xc89c,	0x17ff, 0xc89c,		0x21, 0
+	.dw 0x1840, 0xc89c,	0x187f, 0xc89c,		0x21, 0
+	.dw 0x18c0, 0xc89c,	0x18ff, 0xc89c,		0x21, 0
+	.dw 0x1940, 0xc89c,	0x197f, 0xc89c,		0x21, 0
+	.dw 0x19c0, 0xc89c,	0x1fff, 0xc89c,		0x21, 0
+	.dw 0x2040, 0xc89c,	0x207f, 0xc89c,		0x21, 0
+	.dw 0x20c0, 0xc89c,	0x20ff, 0xc89c,		0x21, 0
+	.dw 0x2140, 0xc89c,	0x217f, 0xc89c,		0x21, 0
+	.dw 0x21c0, 0xc89c,	0x21ff, 0xc89c,		0x21, 0
+	.dw 0x2240, 0xc89c,	0x227f, 0xc89c,		0x21, 0
+	.dw 0x22c0, 0xc89c,	0x22ff, 0xc89c,		0x21, 0
+	.dw 0x2340, 0xc89c,	0x237f, 0xc89c,		0x21, 0
+	.dw 0x23c0, 0xc89c,	0x23ff, 0xc89c,		0x21, 0
+	.dw 0x2440, 0xc89c,	0x247f, 0xc89c,		0x21, 0
+	.dw 0x24c0, 0xc89c,	0x24ff, 0xc89c,		0x21, 0
+	.dw 0x2540, 0xc89c,	0x257f, 0xc89c,		0x21, 0
+	.dw 0x25c0, 0xc89c,	0x25ff, 0xc89c,		0x21, 0
+	.dw 0x2640, 0xc89c,	0x267f, 0xc89c,		0x21, 0
+	.dw 0x26c0, 0xc89c,	0x26ff, 0xc89c,		0x21, 0
+	.dw 0x2740, 0xc89c,	0x277f, 0xc89c,		0x21, 0
+	.dw 0x27c0, 0xc89c,	0x27ff, 0xc89c,		0x21, 0
+	.dw 0x2840, 0xc89c,	0x287f, 0xc89c,		0x21, 0
+	.dw 0x28c0, 0xc89c,	0x28ff, 0xc89c,		0x21, 0
+	.dw 0x2940, 0xc89c,	0x297f, 0xc89c,		0x21, 0
+	.dw 0x29c0, 0xc89c,	0x29ff, 0xc89c,		0x21, 0
+	.dw 0x2a40, 0xc89c,	0x2a7f, 0xc89c,		0x21, 0
+	.dw 0x2ac0, 0xc89c,	0x2aff, 0xc89c,		0x21, 0
+	.dw 0x2b40, 0xc89c,	0x2b7f, 0xc89c,		0x21, 0
+	.dw 0x2bc0, 0xc89c,	0x2bff, 0xc89c,		0x21, 0
+	.dw 0x2c40, 0xc89c,	0x2c7f, 0xc89c,		0x21, 0
+	.dw 0x2cc0, 0xc89c,	0x2cff, 0xc89c,		0x21, 0
+	.dw 0x2d40, 0xc89c,	0x2d7f, 0xc89c,		0x21, 0
+	.dw 0x2dc0, 0xc89c,	0x2dff, 0xc89c,		0x21, 0
+	.dw 0x2e40, 0xc89c,	0x2e7f, 0xc89c,		0x21, 0
+	.dw 0x2ec0, 0xc89c,	0x2eff, 0xc89c,		0x21, 0
+	.dw 0x2f40, 0xc89c,	0x2f7f, 0xc89c,		0x21, 0
+	.dw 0x2fc0, 0xc89c,	0x2fff, 0xc89c,		0x21, 0
+	.dw 0x3040, 0xc89c,	0x307f, 0xc89c,		0x21, 0
+	.dw 0x30c0, 0xc89c,	0x30ff, 0xc89c,		0x21, 0
+	.dw 0x3140, 0xc89c,	0x317f, 0xc89c,		0x21, 0
+	.dw 0x31c0, 0xc89c,	0x31ff, 0xc89c,		0x21, 0
+	.dw 0x3240, 0xc89c,	0x327f, 0xc89c,		0x21, 0
+	.dw 0x32c0, 0xc89c,	0x32ff, 0xc89c,		0x21, 0
+	.dw 0x3340, 0xc89c,	0x337f, 0xc89c,		0x21, 0
+	.dw 0x33c0, 0xc89c,	0x33ff, 0xc89c,		0x21, 0
+	.dw 0x3440, 0xc89c,	0x347f, 0xc89c,		0x21, 0
+	.dw 0x34c0, 0xc89c,	0x34ff, 0xc89c,		0x21, 0
+	.dw 0x3540, 0xc89c,	0x357f, 0xc89c,		0x21, 0
+	.dw 0x35c0, 0xc89c,	0x35ff, 0xc89c,		0x21, 0
+	.dw 0x3640, 0xc89c,	0x367f, 0xc89c,		0x21, 0
+	.dw 0x36c0, 0xc89c,	0x36ff, 0xc89c,		0x21, 0
+	.dw 0x3740, 0xc89c,	0x377f, 0xc89c,		0x21, 0
+	.dw 0x37c0, 0xc89c,	0x37ff, 0xc89c,		0x21, 0
+	.dw 0x3840, 0xc89c,	0x387f, 0xc89c,		0x21, 0
+	.dw 0x38c0, 0xc89c,	0x38ff, 0xc89c,		0x21, 0
+	.dw 0x3940, 0xc89c,	0x397f, 0xc89c,		0x21, 0
+	.dw 0x39c0, 0xc89c,	0x3fff, 0xc89c,		0x21, 0
+	.dw 0x4040, 0xc89c,	0x407f, 0xc89c,		0x21, 0
+	.dw 0x40c0, 0xc89c,	0x40ff, 0xc89c,		0x21, 0
+	.dw 0x4140, 0xc89c,	0x417f, 0xc89c,		0x21, 0
+	.dw 0x41c0, 0xc89c,	0x41ff, 0xc89c,		0x21, 0
+	.dw 0x4240, 0xc89c,	0x427f, 0xc89c,		0x21, 0
+	.dw 0x42c0, 0xc89c,	0x42ff, 0xc89c,		0x21, 0
+	.dw 0x4340, 0xc89c,	0x437f, 0xc89c,		0x21, 0
+	.dw 0x43c0, 0xc89c,	0x43ff, 0xc89c,		0x21, 0
+	.dw 0x4440, 0xc89c,	0x447f, 0xc89c,		0x21, 0
+	.dw 0x44c0, 0xc89c,	0x44ff, 0xc89c,		0x21, 0
+	.dw 0x4540, 0xc89c,	0x457f, 0xc89c,		0x21, 0
+	.dw 0x45c0, 0xc89c,	0x45ff, 0xc89c,		0x21, 0
+	.dw 0x4640, 0xc89c,	0x467f, 0xc89c,		0x21, 0
+	.dw 0x46c0, 0xc89c,	0x46ff, 0xc89c,		0x21, 0
+	.dw 0x4740, 0xc89c,	0x477f, 0xc89c,		0x21, 0
+	.dw 0x47c0, 0xc89c,	0x47ff, 0xc89c,		0x21, 0
+	.dw 0x4840, 0xc89c,	0x487f, 0xc89c,		0x21, 0
+	.dw 0x48c0, 0xc89c,	0x48ff, 0xc89c,		0x21, 0
+	.dw 0x4940, 0xc89c,	0x497f, 0xc89c,		0x21, 0
+	.dw 0x49c0, 0xc89c,	0x49ff, 0xc89c,		0x21, 0
+	.dw 0x4a40, 0xc89c,	0x4a7f, 0xc89c,		0x21, 0
+	.dw 0x4ac0, 0xc89c,	0x4aff, 0xc89c,		0x21, 0
+	.dw 0x4b40, 0xc89c,	0x4b7f, 0xc89c,		0x21, 0
+	.dw 0x4bc0, 0xc89c,	0x4bff, 0xc89c,		0x21, 0
+	.dw 0x4c40, 0xc89c,	0x4c7f, 0xc89c,		0x21, 0
+	.dw 0x4cc0, 0xc89c,	0x4cff, 0xc89c,		0x21, 0
+	.dw 0x4d40, 0xc89c,	0x4d7f, 0xc89c,		0x21, 0
+	.dw 0x4dc0, 0xc89c,	0x4dff, 0xc89c,		0x21, 0
+	.dw 0x4e40, 0xc89c,	0x4e7f, 0xc89c,		0x21, 0
+	.dw 0x4ec0, 0xc89c,	0x4eff, 0xc89c,		0x21, 0
+	.dw 0x4f40, 0xc89c,	0x4f7f, 0xc89c,		0x21, 0
+	.dw 0x4fc0, 0xc89c,	0x4fff, 0xc89c,		0x21, 0
+	.dw 0x5040, 0xc89c,	0x507f, 0xc89c,		0x21, 0
+	.dw 0x50c0, 0xc89c,	0x50ff, 0xc89c,		0x21, 0
+	.dw 0x5140, 0xc89c,	0x517f, 0xc89c,		0x21, 0
+	.dw 0x51c0, 0xc89c,	0x51ff, 0xc89c,		0x21, 0
+	.dw 0x5240, 0xc89c,	0x527f, 0xc89c,		0x21, 0
+	.dw 0x52c0, 0xc89c,	0x52ff, 0xc89c,		0x21, 0
+	.dw 0x5340, 0xc89c,	0x537f, 0xc89c,		0x21, 0
+	.dw 0x53c0, 0xc89c,	0x53ff, 0xc89c,		0x21, 0
+	.dw 0x5440, 0xc89c,	0x547f, 0xc89c,		0x21, 0
+	.dw 0x54c0, 0xc89c,	0x54ff, 0xc89c,		0x21, 0
+	.dw 0x5540, 0xc89c,	0x557f, 0xc89c,		0x21, 0
+	.dw 0x55c0, 0xc89c,	0x55ff, 0xc89c,		0x21, 0
+	.dw 0x5640, 0xc89c,	0x567f, 0xc89c,		0x21, 0
+	.dw 0x56c0, 0xc89c,	0x56ff, 0xc89c,		0x21, 0
+	.dw 0x5740, 0xc89c,	0x577f, 0xc89c,		0x21, 0
+	.dw 0x57c0, 0xc89c,	0x57ff, 0xc89c,		0x21, 0
+	.dw 0x5840, 0xc89c,	0x587f, 0xc89c,		0x21, 0
+	.dw 0x58c0, 0xc89c,	0x58ff, 0xc89c,		0x21, 0
+	.dw 0x5940, 0xc89c,	0x597f, 0xc89c,		0x21, 0
+	.dw 0x59c0, 0xc89c,	0x5fff, 0xc89c,		0x21, 0
+	.dw 0x6040, 0xc89c,	0x607f, 0xc89c,		0x21, 0
+	.dw 0x60c0, 0xc89c,	0x60ff, 0xc89c,		0x21, 0
+	.dw 0x6140, 0xc89c,	0x617f, 0xc89c,		0x21, 0
+	.dw 0x61c0, 0xc89c,	0x61ff, 0xc89c,		0x21, 0
+	.dw 0x6240, 0xc89c,	0x627f, 0xc89c,		0x21, 0
+	.dw 0x62c0, 0xc89c,	0x62ff, 0xc89c,		0x21, 0
+	.dw 0x6340, 0xc89c,	0x637f, 0xc89c,		0x21, 0
+	.dw 0x63c0, 0xc89c,	0x63ff, 0xc89c,		0x21, 0
+	.dw 0x6440, 0xc89c,	0x647f, 0xc89c,		0x21, 0
+	.dw 0x64c0, 0xc89c,	0x64ff, 0xc89c,		0x21, 0
+	.dw 0x6540, 0xc89c,	0x657f, 0xc89c,		0x21, 0
+	.dw 0x65c0, 0xc89c,	0x65ff, 0xc89c,		0x21, 0
+	.dw 0x6640, 0xc89c,	0x667f, 0xc89c,		0x21, 0
+	.dw 0x66c0, 0xc89c,	0x66ff, 0xc89c,		0x21, 0
+	.dw 0x6740, 0xc89c,	0x677f, 0xc89c,		0x21, 0
+	.dw 0x67c0, 0xc89c,	0x67ff, 0xc89c,		0x21, 0
+	.dw 0x6840, 0xc89c,	0x687f, 0xc89c,		0x21, 0
+	.dw 0x68c0, 0xc89c,	0x68ff, 0xc89c,		0x21, 0
+	.dw 0x6940, 0xc89c,	0x697f, 0xc89c,		0x21, 0
+	.dw 0x69c0, 0xc89c,	0x69ff, 0xc89c,		0x21, 0
+	.dw 0x6a40, 0xc89c,	0x6a7f, 0xc89c,		0x21, 0
+	.dw 0x6ac0, 0xc89c,	0x6aff, 0xc89c,		0x21, 0
+	.dw 0x6b40, 0xc89c,	0x6b7f, 0xc89c,		0x21, 0
+	.dw 0x6bc0, 0xc89c,	0x6bff, 0xc89c,		0x21, 0
+	.dw 0x6c40, 0xc89c,	0x6c7f, 0xc89c,		0x21, 0
+	.dw 0x6cc0, 0xc89c,	0x6cff, 0xc89c,		0x21, 0
+	.dw 0x6d40, 0xc89c,	0x6d7f, 0xc89c,		0x21, 0
+	.dw 0x6dc0, 0xc89c,	0x6dff, 0xc89c,		0x21, 0
+	.dw 0x6e40, 0xc89c,	0x6e7f, 0xc89c,		0x21, 0
+	.dw 0x6ec0, 0xc89c,	0x6eff, 0xc89c,		0x21, 0
+	.dw 0x6f40, 0xc89c,	0x6f7f, 0xc89c,		0x21, 0
+	.dw 0x6fc0, 0xc89c,	0x6fff, 0xc89c,		0x21, 0
+	.dw 0x7040, 0xc89c,	0x707f, 0xc89c,		0x21, 0
+	.dw 0x70c0, 0xc89c,	0x70ff, 0xc89c,		0x21, 0
+	.dw 0x7140, 0xc89c,	0x717f, 0xc89c,		0x21, 0
+	.dw 0x71c0, 0xc89c,	0x71ff, 0xc89c,		0x21, 0
+	.dw 0x7240, 0xc89c,	0x727f, 0xc89c,		0x21, 0
+	.dw 0x72c0, 0xc89c,	0x72ff, 0xc89c,		0x21, 0
+	.dw 0x7340, 0xc89c,	0x737f, 0xc89c,		0x21, 0
+	.dw 0x73c0, 0xc89c,	0x73ff, 0xc89c,		0x21, 0
+	.dw 0x7440, 0xc89c,	0x747f, 0xc89c,		0x21, 0
+	.dw 0x74c0, 0xc89c,	0x74ff, 0xc89c,		0x21, 0
+	.dw 0x7540, 0xc89c,	0x757f, 0xc89c,		0x21, 0
+	.dw 0x75c0, 0xc89c,	0x75ff, 0xc89c,		0x21, 0
+	.dw 0x7640, 0xc89c,	0x767f, 0xc89c,		0x21, 0
+	.dw 0x76c0, 0xc89c,	0x76ff, 0xc89c,		0x21, 0
+	.dw 0x7740, 0xc89c,	0x777f, 0xc89c,		0x21, 0
+	.dw 0x77c0, 0xc89c,	0x77ff, 0xc89c,		0x21, 0
+	.dw 0x7840, 0xc89c,	0x787f, 0xc89c,		0x21, 0
+	.dw 0x78c0, 0xc89c,	0x78ff, 0xc89c,		0x21, 0
+	.dw 0x7940, 0xc89c,	0x797f, 0xc89c,		0x21, 0
+	.dw 0x79c0, 0xc89c,	0x7fff, 0xc89c,		0x21, 0
+	.dw 0x8040, 0xc89c,	0x807f, 0xc89c,		0x21, 0
+	.dw 0x80c0, 0xc89c,	0x80ff, 0xc89c,		0x21, 0
+	.dw 0x8140, 0xc89c,	0x817f, 0xc89c,		0x21, 0
+	.dw 0x81c0, 0xc89c,	0x81ff, 0xc89c,		0x21, 0
+	.dw 0x8240, 0xc89c,	0x827f, 0xc89c,		0x21, 0
+	.dw 0x82c0, 0xc89c,	0x82ff, 0xc89c,		0x21, 0
+	.dw 0x8340, 0xc89c,	0x837f, 0xc89c,		0x21, 0
+	.dw 0x83c0, 0xc89c,	0x83ff, 0xc89c,		0x21, 0
+	.dw 0x8440, 0xc89c,	0x847f, 0xc89c,		0x21, 0
+	.dw 0x84c0, 0xc89c,	0x84ff, 0xc89c,		0x21, 0
+	.dw 0x8540, 0xc89c,	0x857f, 0xc89c,		0x21, 0
+	.dw 0x85c0, 0xc89c,	0x85ff, 0xc89c,		0x21, 0
+	.dw 0x8640, 0xc89c,	0x867f, 0xc89c,		0x21, 0
+	.dw 0x86c0, 0xc89c,	0x86ff, 0xc89c,		0x21, 0
+	.dw 0x8740, 0xc89c,	0x877f, 0xc89c,		0x21, 0
+	.dw 0x87c0, 0xc89c,	0x87ff, 0xc89c,		0x21, 0
+	.dw 0x8840, 0xc89c,	0x887f, 0xc89c,		0x21, 0
+	.dw 0x88c0, 0xc89c,	0x88ff, 0xc89c,		0x21, 0
+	.dw 0x8940, 0xc89c,	0x897f, 0xc89c,		0x21, 0
+	.dw 0x89c0, 0xc89c,	0x89ff, 0xc89c,		0x21, 0
+	.dw 0x8a40, 0xc89c,	0x8a7f, 0xc89c,		0x21, 0
+	.dw 0x8ac0, 0xc89c,	0x8aff, 0xc89c,		0x21, 0
+	.dw 0x8b40, 0xc89c,	0x8b7f, 0xc89c,		0x21, 0
+	.dw 0x8bc0, 0xc89c,	0x8bff, 0xc89c,		0x21, 0
+	.dw 0x8c40, 0xc89c,	0x8c7f, 0xc89c,		0x21, 0
+	.dw 0x8cc0, 0xc89c,	0x8cff, 0xc89c,		0x21, 0
+	.dw 0x8d40, 0xc89c,	0x8d7f, 0xc89c,		0x21, 0
+	.dw 0x8dc0, 0xc89c,	0x8dff, 0xc89c,		0x21, 0
+	.dw 0x8e40, 0xc89c,	0x8e7f, 0xc89c,		0x21, 0
+	.dw 0x8ec0, 0xc89c,	0x8eff, 0xc89c,		0x21, 0
+	.dw 0x8f40, 0xc89c,	0x8f7f, 0xc89c,		0x21, 0
+	.dw 0x8fc0, 0xc89c,	0x8fff, 0xc89c,		0x21, 0
+	.dw 0x9040, 0xc89c,	0x907f, 0xc89c,		0x21, 0
+	.dw 0x90c0, 0xc89c,	0x90ff, 0xc89c,		0x21, 0
+	.dw 0x9140, 0xc89c,	0x917f, 0xc89c,		0x21, 0
+	.dw 0x91c0, 0xc89c,	0x91ff, 0xc89c,		0x21, 0
+	.dw 0x9240, 0xc89c,	0x927f, 0xc89c,		0x21, 0
+	.dw 0x92c0, 0xc89c,	0x92ff, 0xc89c,		0x21, 0
+	.dw 0x9340, 0xc89c,	0x937f, 0xc89c,		0x21, 0
+	.dw 0x93c0, 0xc89c,	0x93ff, 0xc89c,		0x21, 0
+	.dw 0x9440, 0xc89c,	0x947f, 0xc89c,		0x21, 0
+	.dw 0x94c0, 0xc89c,	0x94ff, 0xc89c,		0x21, 0
+	.dw 0x9540, 0xc89c,	0x957f, 0xc89c,		0x21, 0
+	.dw 0x95c0, 0xc89c,	0x95ff, 0xc89c,		0x21, 0
+	.dw 0x9640, 0xc89c,	0x967f, 0xc89c,		0x21, 0
+	.dw 0x96c0, 0xc89c,	0x96ff, 0xc89c,		0x21, 0
+	.dw 0x9740, 0xc89c,	0x977f, 0xc89c,		0x21, 0
+	.dw 0x97c0, 0xc89c,	0x97ff, 0xc89c,		0x21, 0
+	.dw 0x9840, 0xc89c,	0x987f, 0xc89c,		0x21, 0
+	.dw 0x98c0, 0xc89c,	0x98ff, 0xc89c,		0x21, 0
+	.dw 0x9940, 0xc89c,	0x997f, 0xc89c,		0x21, 0
+	.dw 0x99c0, 0xc89c,	0x9fff, 0xc89c,		0x21, 0
+	.dw 0xa040, 0xc89c,	0xa07f, 0xc89c,		0x21, 0
+	.dw 0xa0c0, 0xc89c,	0xa0ff, 0xc89c,		0x21, 0
+	.dw 0xa140, 0xc89c,	0xa17f, 0xc89c,		0x21, 0
+	.dw 0xa1c0, 0xc89c,	0xa1ff, 0xc89c,		0x21, 0
+	.dw 0xa240, 0xc89c,	0xa27f, 0xc89c,		0x21, 0
+	.dw 0xa2c0, 0xc89c,	0xa2ff, 0xc89c,		0x21, 0
+	.dw 0xa340, 0xc89c,	0xa37f, 0xc89c,		0x21, 0
+	.dw 0xa3c0, 0xc89c,	0xa3ff, 0xc89c,		0x21, 0
+	.dw 0xa440, 0xc89c,	0xa47f, 0xc89c,		0x21, 0
+	.dw 0xa4c0, 0xc89c,	0xa4ff, 0xc89c,		0x21, 0
+	.dw 0xa540, 0xc89c,	0xa57f, 0xc89c,		0x21, 0
+	.dw 0xa5c0, 0xc89c,	0xa5ff, 0xc89c,		0x21, 0
+	.dw 0xa640, 0xc89c,	0xa67f, 0xc89c,		0x21, 0
+	.dw 0xa6c0, 0xc89c,	0xa6ff, 0xc89c,		0x21, 0
+	.dw 0xa740, 0xc89c,	0xa77f, 0xc89c,		0x21, 0
+	.dw 0xa7c0, 0xc89c,	0xa7ff, 0xc89c,		0x21, 0
+	.dw 0xa840, 0xc89c,	0xa87f, 0xc89c,		0x21, 0
+	.dw 0xa8c0, 0xc89c,	0xa8ff, 0xc89c,		0x21, 0
+	.dw 0xa940, 0xc89c,	0xa97f, 0xc89c,		0x21, 0
+	.dw 0xa9c0, 0xc89c,	0xa9ff, 0xc89c,		0x21, 0
+	.dw 0xaa40, 0xc89c,	0xaa7f, 0xc89c,		0x21, 0
+	.dw 0xaac0, 0xc89c,	0xaaff, 0xc89c,		0x21, 0
+	.dw 0xab40, 0xc89c,	0xab7f, 0xc89c,		0x21, 0
+	.dw 0xabc0, 0xc89c,	0xabff, 0xc89c,		0x21, 0
+	.dw 0xac40, 0xc89c,	0xac7f, 0xc89c,		0x21, 0
+	.dw 0xacc0, 0xc89c,	0xacff, 0xc89c,		0x21, 0
+	.dw 0xad40, 0xc89c,	0xad7f, 0xc89c,		0x21, 0
+	.dw 0xadc0, 0xc89c,	0xadff, 0xc89c,		0x21, 0
+	.dw 0xae40, 0xc89c,	0xae7f, 0xc89c,		0x21, 0
+	.dw 0xaec0, 0xc89c,	0xaeff, 0xc89c,		0x21, 0
+	.dw 0xaf40, 0xc89c,	0xaf7f, 0xc89c,		0x21, 0
+	.dw 0xafc0, 0xc89c,	0xafff, 0xc89c,		0x21, 0
+	.dw 0xb040, 0xc89c,	0xb07f, 0xc89c,		0x21, 0
+	.dw 0xb0c0, 0xc89c,	0xb0ff, 0xc89c,		0x21, 0
+	.dw 0xb140, 0xc89c,	0xb17f, 0xc89c,		0x21, 0
+	.dw 0xb1c0, 0xc89c,	0xb1ff, 0xc89c,		0x21, 0
+	.dw 0xb240, 0xc89c,	0xb27f, 0xc89c,		0x21, 0
+	.dw 0xb2c0, 0xc89c,	0xb2ff, 0xc89c,		0x21, 0
+	.dw 0xb340, 0xc89c,	0xb37f, 0xc89c,		0x21, 0
+	.dw 0xb3c0, 0xc89c,	0xb3ff, 0xc89c,		0x21, 0
+	.dw 0xb440, 0xc89c,	0xb47f, 0xc89c,		0x21, 0
+	.dw 0xb4c0, 0xc89c,	0xb4ff, 0xc89c,		0x21, 0
+	.dw 0xb540, 0xc89c,	0xb57f, 0xc89c,		0x21, 0
+	.dw 0xb5c0, 0xc89c,	0xb5ff, 0xc89c,		0x21, 0
+	.dw 0xb640, 0xc89c,	0xb67f, 0xc89c,		0x21, 0
+	.dw 0xb6c0, 0xc89c,	0xb6ff, 0xc89c,		0x21, 0
+	.dw 0xb740, 0xc89c,	0xb77f, 0xc89c,		0x21, 0
+	.dw 0xb7c0, 0xc89c,	0xb7ff, 0xc89c,		0x21, 0
+	.dw 0xb840, 0xc89c,	0xb87f, 0xc89c,		0x21, 0
+	.dw 0xb8c0, 0xc89c,	0xb8ff, 0xc89c,		0x21, 0
+	.dw 0xb940, 0xc89c,	0xb97f, 0xc89c,		0x21, 0
+	.dw 0xb9c0, 0xc89c,	0xbfff, 0xc89c,		0x21, 0
+	.dw 0xc040, 0xc89c,	0xc07f, 0xc89c,		0x21, 0
+	.dw 0xc0c0, 0xc89c,	0xc0ff, 0xc89c,		0x21, 0
+	.dw 0xc140, 0xc89c,	0xc17f, 0xc89c,		0x21, 0
+	.dw 0xc1c0, 0xc89c,	0xc1ff, 0xc89c,		0x21, 0
+	.dw 0xc240, 0xc89c,	0xc27f, 0xc89c,		0x21, 0
+	.dw 0xc2c0, 0xc89c,	0xc2ff, 0xc89c,		0x21, 0
+	.dw 0xc340, 0xc89c,	0xc37f, 0xc89c,		0x21, 0
+	.dw 0xc3c0, 0xc89c,	0xc3ff, 0xc89c,		0x21, 0
+	.dw 0xc440, 0xc89c,	0xc47f, 0xc89c,		0x21, 0
+	.dw 0xc4c0, 0xc89c,	0xc4ff, 0xc89c,		0x21, 0
+	.dw 0xc540, 0xc89c,	0xc57f, 0xc89c,		0x21, 0
+	.dw 0xc5c0, 0xc89c,	0xc5ff, 0xc89c,		0x21, 0
+	.dw 0xc640, 0xc89c,	0xc67f, 0xc89c,		0x21, 0
+	.dw 0xc6c0, 0xc89c,	0xc6ff, 0xc89c,		0x21, 0
+	.dw 0xc740, 0xc89c,	0xc77f, 0xc89c,		0x21, 0
+	.dw 0xc7c0, 0xc89c,	0xc7ff, 0xc89c,		0x21, 0
+	.dw 0xc840, 0xc89c,	0xc87f, 0xc89c,		0x21, 0
+	.dw 0xc8c0, 0xc89c,	0xc8ff, 0xc89c,		0x21, 0
+	.dw 0xc940, 0xc89c,	0xc97f, 0xc89c,		0x21, 0
+	.dw 0xc9c0, 0xc89c,	0xc9ff, 0xc89c,		0x21, 0
+	.dw 0xca40, 0xc89c,	0xca7f, 0xc89c,		0x21, 0
+	.dw 0xcac0, 0xc89c,	0xcaff, 0xc89c,		0x21, 0
+	.dw 0xcb40, 0xc89c,	0xcb7f, 0xc89c,		0x21, 0
+	.dw 0xcbc0, 0xc89c,	0xcbff, 0xc89c,		0x21, 0
+	.dw 0xcc40, 0xc89c,	0xcc7f, 0xc89c,		0x21, 0
+	.dw 0xccc0, 0xc89c,	0xccff, 0xc89c,		0x21, 0
+	.dw 0xcd40, 0xc89c,	0xcd7f, 0xc89c,		0x21, 0
+	.dw 0xcdc0, 0xc89c,	0xcdff, 0xc89c,		0x21, 0
+	.dw 0xce40, 0xc89c,	0xce7f, 0xc89c,		0x21, 0
+	.dw 0xcec0, 0xc89c,	0xceff, 0xc89c,		0x21, 0
+	.dw 0xcf40, 0xc89c,	0xcf7f, 0xc89c,		0x21, 0
+	.dw 0xcfc0, 0xc89c,	0xcfff, 0xc89c,		0x21, 0
+	.dw 0xd040, 0xc89c,	0xd07f, 0xc89c,		0x21, 0
+	.dw 0xd0c0, 0xc89c,	0xd0ff, 0xc89c,		0x21, 0
+	.dw 0xd140, 0xc89c,	0xd17f, 0xc89c,		0x21, 0
+	.dw 0xd1c0, 0xc89c,	0xd1ff, 0xc89c,		0x21, 0
+	.dw 0xd240, 0xc89c,	0xd27f, 0xc89c,		0x21, 0
+	.dw 0xd2c0, 0xc89c,	0xd2ff, 0xc89c,		0x21, 0
+	.dw 0xd340, 0xc89c,	0xd37f, 0xc89c,		0x21, 0
+	.dw 0xd3c0, 0xc89c,	0xd3ff, 0xc89c,		0x21, 0
+	.dw 0xd440, 0xc89c,	0xd47f, 0xc89c,		0x21, 0
+	.dw 0xd4c0, 0xc89c,	0xd4ff, 0xc89c,		0x21, 0
+	.dw 0xd540, 0xc89c,	0xd57f, 0xc89c,		0x21, 0
+	.dw 0xd5c0, 0xc89c,	0xd5ff, 0xc89c,		0x21, 0
+	.dw 0xd640, 0xc89c,	0xd67f, 0xc89c,		0x21, 0
+	.dw 0xd6c0, 0xc89c,	0xd6ff, 0xc89c,		0x21, 0
+	.dw 0xd740, 0xc89c,	0xd77f, 0xc89c,		0x21, 0
+	.dw 0xd7c0, 0xc89c,	0xd7ff, 0xc89c,		0x21, 0
+	.dw 0xd840, 0xc89c,	0xd87f, 0xc89c,		0x21, 0
+	.dw 0xd8c0, 0xc89c,	0xd8ff, 0xc89c,		0x21, 0
+	.dw 0xd940, 0xc89c,	0xd97f, 0xc89c,		0x21, 0
+	.dw 0xd9c0, 0xc89c,	0xdfff, 0xc89c,		0x21, 0
+	.dw 0xe040, 0xc89c,	0xe07f, 0xc89c,		0x21, 0
+	.dw 0xe0c0, 0xc89c,	0xe0ff, 0xc89c,		0x21, 0
+	.dw 0xe140, 0xc89c,	0xe17f, 0xc89c,		0x21, 0
+	.dw 0xe1c0, 0xc89c,	0xe1ff, 0xc89c,		0x21, 0
+	.dw 0xe240, 0xc89c,	0xe27f, 0xc89c,		0x21, 0
+	.dw 0xe2c0, 0xc89c,	0xe2ff, 0xc89c,		0x21, 0
+	.dw 0xe340, 0xc89c,	0xe37f, 0xc89c,		0x21, 0
+	.dw 0xe3c0, 0xc89c,	0xe3ff, 0xc89c,		0x21, 0
+	.dw 0xe440, 0xc89c,	0xe47f, 0xc89c,		0x21, 0
+	.dw 0xe4c0, 0xc89c,	0xe4ff, 0xc89c,		0x21, 0
+	.dw 0xe540, 0xc89c,	0xe57f, 0xc89c,		0x21, 0
+	.dw 0xe5c0, 0xc89c,	0xe5ff, 0xc89c,		0x21, 0
+	.dw 0xe640, 0xc89c,	0xe67f, 0xc89c,		0x21, 0
+	.dw 0xe6c0, 0xc89c,	0xe6ff, 0xc89c,		0x21, 0
+	.dw 0xe740, 0xc89c,	0xe77f, 0xc89c,		0x21, 0
+	.dw 0xe7c0, 0xc89c,	0xe7ff, 0xc89c,		0x21, 0
+	.dw 0xe840, 0xc89c,	0xe87f, 0xc89c,		0x21, 0
+	.dw 0xe8c0, 0xc89c,	0xe8ff, 0xc89c,		0x21, 0
+	.dw 0xe940, 0xc89c,	0xe97f, 0xc89c,		0x21, 0
+	.dw 0xe9c0, 0xc89c,	0xe9ff, 0xc89c,		0x21, 0
+	.dw 0xea40, 0xc89c,	0xea7f, 0xc89c,		0x21, 0
+	.dw 0xeac0, 0xc89c,	0xeaff, 0xc89c,		0x21, 0
+	.dw 0xeb40, 0xc89c,	0xeb7f, 0xc89c,		0x21, 0
+	.dw 0xebc0, 0xc89c,	0xebff, 0xc89c,		0x21, 0
+	.dw 0xec40, 0xc89c,	0xec7f, 0xc89c,		0x21, 0
+	.dw 0xecc0, 0xc89c,	0xecff, 0xc89c,		0x21, 0
+	.dw 0xed40, 0xc89c,	0xed7f, 0xc89c,		0x21, 0
+	.dw 0xedc0, 0xc89c,	0xedff, 0xc89c,		0x21, 0
+	.dw 0xee40, 0xc89c,	0xee7f, 0xc89c,		0x21, 0
+	.dw 0xeec0, 0xc89c,	0xeeff, 0xc89c,		0x21, 0
+	.dw 0xef40, 0xc89c,	0xef7f, 0xc89c,		0x21, 0
+	.dw 0xefc0, 0xc89c,	0xefff, 0xc89c,		0x21, 0
+	.dw 0xf040, 0xc89c,	0xf07f, 0xc89c,		0x21, 0
+	.dw 0xf0c0, 0xc89c,	0xf0ff, 0xc89c,		0x21, 0
+	.dw 0xf140, 0xc89c,	0xf17f, 0xc89c,		0x21, 0
+	.dw 0xf1c0, 0xc89c,	0xf1ff, 0xc89c,		0x21, 0
+	.dw 0xf240, 0xc89c,	0xf27f, 0xc89c,		0x21, 0
+	.dw 0xf2c0, 0xc89c,	0xf2ff, 0xc89c,		0x21, 0
+	.dw 0xf340, 0xc89c,	0xf37f, 0xc89c,		0x21, 0
+	.dw 0xf3c0, 0xc89c,	0xf3ff, 0xc89c,		0x21, 0
+	.dw 0xf440, 0xc89c,	0xf47f, 0xc89c,		0x21, 0
+	.dw 0xf4c0, 0xc89c,	0xf4ff, 0xc89c,		0x21, 0
+	.dw 0xf540, 0xc89c,	0xf57f, 0xc89c,		0x21, 0
+	.dw 0xf5c0, 0xc89c,	0xf5ff, 0xc89c,		0x21, 0
+	.dw 0xf640, 0xc89c,	0xf67f, 0xc89c,		0x21, 0
+	.dw 0xf6c0, 0xc89c,	0xf6ff, 0xc89c,		0x21, 0
+	.dw 0xf740, 0xc89c,	0xf77f, 0xc89c,		0x21, 0
+	.dw 0xf7c0, 0xc89c,	0xf7ff, 0xc89c,		0x21, 0
+	.dw 0xf840, 0xc89c,	0xf87f, 0xc89c,		0x21, 0
+	.dw 0xf8c0, 0xc89c,	0xf8ff, 0xc89c,		0x21, 0
+	.dw 0xf940, 0xc89c,	0xf97f, 0xc89c,		0x21, 0
+	.dw 0xf9c0, 0xc89c,	0xffff, 0xc89c,		0x21, 0
+	.dw 0x0040, 0xc89d,	0x007f, 0xc89d,		0x21, 0
+	.dw 0x00c0, 0xc89d,	0x00ff, 0xc89d,		0x21, 0
+	.dw 0x0140, 0xc89d,	0x017f, 0xc89d,		0x21, 0
+	.dw 0x01c0, 0xc89d,	0x01ff, 0xc89d,		0x21, 0
+	.dw 0x0240, 0xc89d,	0x027f, 0xc89d,		0x21, 0
+	.dw 0x02c0, 0xc89d,	0x02ff, 0xc89d,		0x21, 0
+	.dw 0x0340, 0xc89d,	0x037f, 0xc89d,		0x21, 0
+	.dw 0x03c0, 0xc89d,	0x03ff, 0xc89d,		0x21, 0
+	.dw 0x0440, 0xc89d,	0x047f, 0xc89d,		0x21, 0
+	.dw 0x04c0, 0xc89d,	0x04ff, 0xc89d,		0x21, 0
+	.dw 0x0540, 0xc89d,	0x057f, 0xc89d,		0x21, 0
+	.dw 0x05c0, 0xc89d,	0x05ff, 0xc89d,		0x21, 0
+	.dw 0x0640, 0xc89d,	0x067f, 0xc89d,		0x21, 0
+	.dw 0x06c0, 0xc89d,	0x06ff, 0xc89d,		0x21, 0
+	.dw 0x0740, 0xc89d,	0x077f, 0xc89d,		0x21, 0
+	.dw 0x07c0, 0xc89d,	0x07ff, 0xc89d,		0x21, 0
+	.dw 0x0840, 0xc89d,	0x087f, 0xc89d,		0x21, 0
+	.dw 0x08c0, 0xc89d,	0x08ff, 0xc89d,		0x21, 0
+	.dw 0x0940, 0xc89d,	0x097f, 0xc89d,		0x21, 0
+	.dw 0x09c0, 0xc89d,	0x09ff, 0xc89d,		0x21, 0
+	.dw 0x0a40, 0xc89d,	0x0a7f, 0xc89d,		0x21, 0
+	.dw 0x0ac0, 0xc89d,	0x0aff, 0xc89d,		0x21, 0
+	.dw 0x0b40, 0xc89d,	0x0b7f, 0xc89d,		0x21, 0
+	.dw 0x0bc0, 0xc89d,	0x0bff, 0xc89d,		0x21, 0
+	.dw 0x0c40, 0xc89d,	0x0c7f, 0xc89d,		0x21, 0
+	.dw 0x0cc0, 0xc89d,	0x0cff, 0xc89d,		0x21, 0
+	.dw 0x0d40, 0xc89d,	0x0d7f, 0xc89d,		0x21, 0
+	.dw 0x0dc0, 0xc89d,	0x0dff, 0xc89d,		0x21, 0
+	.dw 0x0e40, 0xc89d,	0x0e7f, 0xc89d,		0x21, 0
+	.dw 0x0ec0, 0xc89d,	0x0eff, 0xc89d,		0x21, 0
+	.dw 0x0f40, 0xc89d,	0x0f7f, 0xc89d,		0x21, 0
+	.dw 0x0fc0, 0xc89d,	0x0fff, 0xc89d,		0x21, 0
+	.dw 0x1040, 0xc89d,	0x107f, 0xc89d,		0x21, 0
+	.dw 0x10c0, 0xc89d,	0x10ff, 0xc89d,		0x21, 0
+	.dw 0x1140, 0xc89d,	0x117f, 0xc89d,		0x21, 0
+	.dw 0x11c0, 0xc89d,	0x11ff, 0xc89d,		0x21, 0
+	.dw 0x1240, 0xc89d,	0x127f, 0xc89d,		0x21, 0
+	.dw 0x12c0, 0xc89d,	0x12ff, 0xc89d,		0x21, 0
+	.dw 0x1340, 0xc89d,	0x137f, 0xc89d,		0x21, 0
+	.dw 0x13c0, 0xc89d,	0x13ff, 0xc89d,		0x21, 0
+	.dw 0x1440, 0xc89d,	0x147f, 0xc89d,		0x21, 0
+	.dw 0x14c0, 0xc89d,	0x14ff, 0xc89d,		0x21, 0
+	.dw 0x1540, 0xc89d,	0x157f, 0xc89d,		0x21, 0
+	.dw 0x15c0, 0xc89d,	0x15ff, 0xc89d,		0x21, 0
+	.dw 0x1640, 0xc89d,	0x167f, 0xc89d,		0x21, 0
+	.dw 0x16c0, 0xc89d,	0x16ff, 0xc89d,		0x21, 0
+	.dw 0x1740, 0xc89d,	0x177f, 0xc89d,		0x21, 0
+	.dw 0x17c0, 0xc89d,	0x17ff, 0xc89d,		0x21, 0
+	.dw 0x1840, 0xc89d,	0x187f, 0xc89d,		0x21, 0
+	.dw 0x18c0, 0xc89d,	0x18ff, 0xc89d,		0x21, 0
+	.dw 0x1940, 0xc89d,	0x197f, 0xc89d,		0x21, 0
+	.dw 0x19c0, 0xc89d,	0x1fff, 0xc89d,		0x21, 0
+	.dw 0x2040, 0xc89d,	0x207f, 0xc89d,		0x21, 0
+	.dw 0x20c0, 0xc89d,	0x20ff, 0xc89d,		0x21, 0
+	.dw 0x2140, 0xc89d,	0x217f, 0xc89d,		0x21, 0
+	.dw 0x21c0, 0xc89d,	0x21ff, 0xc89d,		0x21, 0
+	.dw 0x2240, 0xc89d,	0x227f, 0xc89d,		0x21, 0
+	.dw 0x22c0, 0xc89d,	0x22ff, 0xc89d,		0x21, 0
+	.dw 0x2340, 0xc89d,	0x237f, 0xc89d,		0x21, 0
+	.dw 0x23c0, 0xc89d,	0x23ff, 0xc89d,		0x21, 0
+	.dw 0x2440, 0xc89d,	0x247f, 0xc89d,		0x21, 0
+	.dw 0x24c0, 0xc89d,	0x24ff, 0xc89d,		0x21, 0
+	.dw 0x2540, 0xc89d,	0x257f, 0xc89d,		0x21, 0
+	.dw 0x25c0, 0xc89d,	0x25ff, 0xc89d,		0x21, 0
+	.dw 0x2640, 0xc89d,	0x267f, 0xc89d,		0x21, 0
+	.dw 0x26c0, 0xc89d,	0x26ff, 0xc89d,		0x21, 0
+	.dw 0x2740, 0xc89d,	0x277f, 0xc89d,		0x21, 0
+	.dw 0x27c0, 0xc89d,	0x27ff, 0xc89d,		0x21, 0
+	.dw 0x2840, 0xc89d,	0x287f, 0xc89d,		0x21, 0
+	.dw 0x28c0, 0xc89d,	0x28ff, 0xc89d,		0x21, 0
+	.dw 0x2940, 0xc89d,	0x297f, 0xc89d,		0x21, 0
+	.dw 0x29c0, 0xc89d,	0x29ff, 0xc89d,		0x21, 0
+	.dw 0x2a40, 0xc89d,	0x2a7f, 0xc89d,		0x21, 0
+	.dw 0x2ac0, 0xc89d,	0x2aff, 0xc89d,		0x21, 0
+	.dw 0x2b40, 0xc89d,	0x2b7f, 0xc89d,		0x21, 0
+	.dw 0x2bc0, 0xc89d,	0x2bff, 0xc89d,		0x21, 0
+	.dw 0x2c40, 0xc89d,	0x2c7f, 0xc89d,		0x21, 0
+	.dw 0x2cc0, 0xc89d,	0x2cff, 0xc89d,		0x21, 0
+	.dw 0x2d40, 0xc89d,	0x2d7f, 0xc89d,		0x21, 0
+	.dw 0x2dc0, 0xc89d,	0x2dff, 0xc89d,		0x21, 0
+	.dw 0x2e40, 0xc89d,	0x2e7f, 0xc89d,		0x21, 0
+	.dw 0x2ec0, 0xc89d,	0x2eff, 0xc89d,		0x21, 0
+	.dw 0x2f40, 0xc89d,	0x2f7f, 0xc89d,		0x21, 0
+	.dw 0x2fc0, 0xc89d,	0x2fff, 0xc89d,		0x21, 0
+	.dw 0x3040, 0xc89d,	0x307f, 0xc89d,		0x21, 0
+	.dw 0x30c0, 0xc89d,	0x30ff, 0xc89d,		0x21, 0
+	.dw 0x3140, 0xc89d,	0x317f, 0xc89d,		0x21, 0
+	.dw 0x31c0, 0xc89d,	0x31ff, 0xc89d,		0x21, 0
+	.dw 0x3240, 0xc89d,	0x327f, 0xc89d,		0x21, 0
+	.dw 0x32c0, 0xc89d,	0x32ff, 0xc89d,		0x21, 0
+	.dw 0x3340, 0xc89d,	0x337f, 0xc89d,		0x21, 0
+	.dw 0x33c0, 0xc89d,	0x33ff, 0xc89d,		0x21, 0
+	.dw 0x3440, 0xc89d,	0x347f, 0xc89d,		0x21, 0
+	.dw 0x34c0, 0xc89d,	0x34ff, 0xc89d,		0x21, 0
+	.dw 0x3540, 0xc89d,	0x357f, 0xc89d,		0x21, 0
+	.dw 0x35c0, 0xc89d,	0x35ff, 0xc89d,		0x21, 0
+	.dw 0x3640, 0xc89d,	0x367f, 0xc89d,		0x21, 0
+	.dw 0x36c0, 0xc89d,	0x36ff, 0xc89d,		0x21, 0
+	.dw 0x3740, 0xc89d,	0x377f, 0xc89d,		0x21, 0
+	.dw 0x37c0, 0xc89d,	0x37ff, 0xc89d,		0x21, 0
+	.dw 0x3840, 0xc89d,	0x387f, 0xc89d,		0x21, 0
+	.dw 0x38c0, 0xc89d,	0x38ff, 0xc89d,		0x21, 0
+	.dw 0x3940, 0xc89d,	0x397f, 0xc89d,		0x21, 0
+	.dw 0x39c0, 0xc89d,	0x3fff, 0xc89d,		0x21, 0
+	.dw 0x4040, 0xc89d,	0x407f, 0xc89d,		0x21, 0
+	.dw 0x40c0, 0xc89d,	0x40ff, 0xc89d,		0x21, 0
+	.dw 0x4140, 0xc89d,	0x417f, 0xc89d,		0x21, 0
+	.dw 0x41c0, 0xc89d,	0x41ff, 0xc89d,		0x21, 0
+	.dw 0x4240, 0xc89d,	0x427f, 0xc89d,		0x21, 0
+	.dw 0x42c0, 0xc89d,	0x42ff, 0xc89d,		0x21, 0
+	.dw 0x4340, 0xc89d,	0x437f, 0xc89d,		0x21, 0
+	.dw 0x43c0, 0xc89d,	0x43ff, 0xc89d,		0x21, 0
+	.dw 0x4440, 0xc89d,	0x447f, 0xc89d,		0x21, 0
+	.dw 0x44c0, 0xc89d,	0x44ff, 0xc89d,		0x21, 0
+	.dw 0x4540, 0xc89d,	0x457f, 0xc89d,		0x21, 0
+	.dw 0x45c0, 0xc89d,	0x45ff, 0xc89d,		0x21, 0
+	.dw 0x4640, 0xc89d,	0x467f, 0xc89d,		0x21, 0
+	.dw 0x46c0, 0xc89d,	0x46ff, 0xc89d,		0x21, 0
+	.dw 0x4740, 0xc89d,	0x477f, 0xc89d,		0x21, 0
+	.dw 0x47c0, 0xc89d,	0x47ff, 0xc89d,		0x21, 0
+	.dw 0x4840, 0xc89d,	0x487f, 0xc89d,		0x21, 0
+	.dw 0x48c0, 0xc89d,	0x48ff, 0xc89d,		0x21, 0
+	.dw 0x4940, 0xc89d,	0x497f, 0xc89d,		0x21, 0
+	.dw 0x49c0, 0xc89d,	0x49ff, 0xc89d,		0x21, 0
+	.dw 0x4a40, 0xc89d,	0x4a7f, 0xc89d,		0x21, 0
+	.dw 0x4ac0, 0xc89d,	0x4aff, 0xc89d,		0x21, 0
+	.dw 0x4b40, 0xc89d,	0x4b7f, 0xc89d,		0x21, 0
+	.dw 0x4bc0, 0xc89d,	0x4bff, 0xc89d,		0x21, 0
+	.dw 0x4c40, 0xc89d,	0x4c7f, 0xc89d,		0x21, 0
+	.dw 0x4cc0, 0xc89d,	0x4cff, 0xc89d,		0x21, 0
+	.dw 0x4d40, 0xc89d,	0x4d7f, 0xc89d,		0x21, 0
+	.dw 0x4dc0, 0xc89d,	0x4dff, 0xc89d,		0x21, 0
+	.dw 0x4e40, 0xc89d,	0x4e7f, 0xc89d,		0x21, 0
+	.dw 0x4ec0, 0xc89d,	0x4eff, 0xc89d,		0x21, 0
+	.dw 0x4f40, 0xc89d,	0x4f7f, 0xc89d,		0x21, 0
+	.dw 0x4fc0, 0xc89d,	0x4fff, 0xc89d,		0x21, 0
+	.dw 0x5040, 0xc89d,	0x507f, 0xc89d,		0x21, 0
+	.dw 0x50c0, 0xc89d,	0x50ff, 0xc89d,		0x21, 0
+	.dw 0x5140, 0xc89d,	0x517f, 0xc89d,		0x21, 0
+	.dw 0x51c0, 0xc89d,	0x51ff, 0xc89d,		0x21, 0
+	.dw 0x5240, 0xc89d,	0x527f, 0xc89d,		0x21, 0
+	.dw 0x52c0, 0xc89d,	0x52ff, 0xc89d,		0x21, 0
+	.dw 0x5340, 0xc89d,	0x537f, 0xc89d,		0x21, 0
+	.dw 0x53c0, 0xc89d,	0x53ff, 0xc89d,		0x21, 0
+	.dw 0x5440, 0xc89d,	0x547f, 0xc89d,		0x21, 0
+	.dw 0x54c0, 0xc89d,	0x54ff, 0xc89d,		0x21, 0
+	.dw 0x5540, 0xc89d,	0x557f, 0xc89d,		0x21, 0
+	.dw 0x55c0, 0xc89d,	0x55ff, 0xc89d,		0x21, 0
+	.dw 0x5640, 0xc89d,	0x567f, 0xc89d,		0x21, 0
+	.dw 0x56c0, 0xc89d,	0x56ff, 0xc89d,		0x21, 0
+	.dw 0x5740, 0xc89d,	0x577f, 0xc89d,		0x21, 0
+	.dw 0x57c0, 0xc89d,	0x57ff, 0xc89d,		0x21, 0
+	.dw 0x5840, 0xc89d,	0x587f, 0xc89d,		0x21, 0
+	.dw 0x58c0, 0xc89d,	0x58ff, 0xc89d,		0x21, 0
+	.dw 0x5940, 0xc89d,	0x597f, 0xc89d,		0x21, 0
+	.dw 0x59c0, 0xc89d,	0x5fff, 0xc89d,		0x21, 0
+	.dw 0x6040, 0xc89d,	0x607f, 0xc89d,		0x21, 0
+	.dw 0x60c0, 0xc89d,	0x60ff, 0xc89d,		0x21, 0
+	.dw 0x6140, 0xc89d,	0x617f, 0xc89d,		0x21, 0
+	.dw 0x61c0, 0xc89d,	0x61ff, 0xc89d,		0x21, 0
+	.dw 0x6240, 0xc89d,	0x627f, 0xc89d,		0x21, 0
+	.dw 0x62c0, 0xc89d,	0x62ff, 0xc89d,		0x21, 0
+	.dw 0x6340, 0xc89d,	0x637f, 0xc89d,		0x21, 0
+	.dw 0x63c0, 0xc89d,	0x63ff, 0xc89d,		0x21, 0
+	.dw 0x6440, 0xc89d,	0x647f, 0xc89d,		0x21, 0
+	.dw 0x64c0, 0xc89d,	0x64ff, 0xc89d,		0x21, 0
+	.dw 0x6540, 0xc89d,	0x657f, 0xc89d,		0x21, 0
+	.dw 0x65c0, 0xc89d,	0x65ff, 0xc89d,		0x21, 0
+	.dw 0x6640, 0xc89d,	0x667f, 0xc89d,		0x21, 0
+	.dw 0x66c0, 0xc89d,	0x66ff, 0xc89d,		0x21, 0
+	.dw 0x6740, 0xc89d,	0x677f, 0xc89d,		0x21, 0
+	.dw 0x67c0, 0xc89d,	0x67ff, 0xc89d,		0x21, 0
+	.dw 0x6840, 0xc89d,	0x687f, 0xc89d,		0x21, 0
+	.dw 0x68c0, 0xc89d,	0x68ff, 0xc89d,		0x21, 0
+	.dw 0x6940, 0xc89d,	0x697f, 0xc89d,		0x21, 0
+	.dw 0x69c0, 0xc89d,	0x69ff, 0xc89d,		0x21, 0
+	.dw 0x6a40, 0xc89d,	0x6a7f, 0xc89d,		0x21, 0
+	.dw 0x6ac0, 0xc89d,	0x6aff, 0xc89d,		0x21, 0
+	.dw 0x6b40, 0xc89d,	0x6b7f, 0xc89d,		0x21, 0
+	.dw 0x6bc0, 0xc89d,	0x6bff, 0xc89d,		0x21, 0
+	.dw 0x6c40, 0xc89d,	0x6c7f, 0xc89d,		0x21, 0
+	.dw 0x6cc0, 0xc89d,	0x6cff, 0xc89d,		0x21, 0
+	.dw 0x6d40, 0xc89d,	0x6d7f, 0xc89d,		0x21, 0
+	.dw 0x6dc0, 0xc89d,	0x6dff, 0xc89d,		0x21, 0
+	.dw 0x6e40, 0xc89d,	0x6e7f, 0xc89d,		0x21, 0
+	.dw 0x6ec0, 0xc89d,	0x6eff, 0xc89d,		0x21, 0
+	.dw 0x6f40, 0xc89d,	0x6f7f, 0xc89d,		0x21, 0
+	.dw 0x6fc0, 0xc89d,	0x6fff, 0xc89d,		0x21, 0
+	.dw 0x7040, 0xc89d,	0x707f, 0xc89d,		0x21, 0
+	.dw 0x70c0, 0xc89d,	0x70ff, 0xc89d,		0x21, 0
+	.dw 0x7140, 0xc89d,	0x717f, 0xc89d,		0x21, 0
+	.dw 0x71c0, 0xc89d,	0x71ff, 0xc89d,		0x21, 0
+	.dw 0x7240, 0xc89d,	0x727f, 0xc89d,		0x21, 0
+	.dw 0x72c0, 0xc89d,	0x72ff, 0xc89d,		0x21, 0
+	.dw 0x7340, 0xc89d,	0x737f, 0xc89d,		0x21, 0
+	.dw 0x73c0, 0xc89d,	0x73ff, 0xc89d,		0x21, 0
+	.dw 0x7440, 0xc89d,	0x747f, 0xc89d,		0x21, 0
+	.dw 0x74c0, 0xc89d,	0x74ff, 0xc89d,		0x21, 0
+	.dw 0x7540, 0xc89d,	0x757f, 0xc89d,		0x21, 0
+	.dw 0x75c0, 0xc89d,	0x75ff, 0xc89d,		0x21, 0
+	.dw 0x7640, 0xc89d,	0x767f, 0xc89d,		0x21, 0
+	.dw 0x76c0, 0xc89d,	0x76ff, 0xc89d,		0x21, 0
+	.dw 0x7740, 0xc89d,	0x777f, 0xc89d,		0x21, 0
+	.dw 0x77c0, 0xc89d,	0x77ff, 0xc89d,		0x21, 0
+	.dw 0x7840, 0xc89d,	0x787f, 0xc89d,		0x21, 0
+	.dw 0x78c0, 0xc89d,	0x78ff, 0xc89d,		0x21, 0
+	.dw 0x7940, 0xc89d,	0x797f, 0xc89d,		0x21, 0
+	.dw 0x79c0, 0xc89d,	0x7fff, 0xc89d,		0x21, 0
+	.dw 0x8040, 0xc89d,	0x807f, 0xc89d,		0x21, 0
+	.dw 0x80c0, 0xc89d,	0x80ff, 0xc89d,		0x21, 0
+	.dw 0x8140, 0xc89d,	0x817f, 0xc89d,		0x21, 0
+	.dw 0x81c0, 0xc89d,	0x81ff, 0xc89d,		0x21, 0
+	.dw 0x8240, 0xc89d,	0x827f, 0xc89d,		0x21, 0
+	.dw 0x82c0, 0xc89d,	0x82ff, 0xc89d,		0x21, 0
+	.dw 0x8340, 0xc89d,	0x837f, 0xc89d,		0x21, 0
+	.dw 0x83c0, 0xc89d,	0x83ff, 0xc89d,		0x21, 0
+	.dw 0x8440, 0xc89d,	0x847f, 0xc89d,		0x21, 0
+	.dw 0x84c0, 0xc89d,	0x84ff, 0xc89d,		0x21, 0
+	.dw 0x8540, 0xc89d,	0x857f, 0xc89d,		0x21, 0
+	.dw 0x85c0, 0xc89d,	0x85ff, 0xc89d,		0x21, 0
+	.dw 0x8640, 0xc89d,	0x867f, 0xc89d,		0x21, 0
+	.dw 0x86c0, 0xc89d,	0x86ff, 0xc89d,		0x21, 0
+	.dw 0x8740, 0xc89d,	0x877f, 0xc89d,		0x21, 0
+	.dw 0x87c0, 0xc89d,	0x87ff, 0xc89d,		0x21, 0
+	.dw 0x8840, 0xc89d,	0x887f, 0xc89d,		0x21, 0
+	.dw 0x88c0, 0xc89d,	0x88ff, 0xc89d,		0x21, 0
+	.dw 0x8940, 0xc89d,	0x897f, 0xc89d,		0x21, 0
+	.dw 0x89c0, 0xc89d,	0x89ff, 0xc89d,		0x21, 0
+	.dw 0x8a40, 0xc89d,	0x8a7f, 0xc89d,		0x21, 0
+	.dw 0x8ac0, 0xc89d,	0x8aff, 0xc89d,		0x21, 0
+	.dw 0x8b40, 0xc89d,	0x8b7f, 0xc89d,		0x21, 0
+	.dw 0x8bc0, 0xc89d,	0x8bff, 0xc89d,		0x21, 0
+	.dw 0x8c40, 0xc89d,	0x8c7f, 0xc89d,		0x21, 0
+	.dw 0x8cc0, 0xc89d,	0x8cff, 0xc89d,		0x21, 0
+	.dw 0x8d40, 0xc89d,	0x8d7f, 0xc89d,		0x21, 0
+	.dw 0x8dc0, 0xc89d,	0x8dff, 0xc89d,		0x21, 0
+	.dw 0x8e40, 0xc89d,	0x8e7f, 0xc89d,		0x21, 0
+	.dw 0x8ec0, 0xc89d,	0x8eff, 0xc89d,		0x21, 0
+	.dw 0x8f40, 0xc89d,	0x8f7f, 0xc89d,		0x21, 0
+	.dw 0x8fc0, 0xc89d,	0x8fff, 0xc89d,		0x21, 0
+	.dw 0x9040, 0xc89d,	0x907f, 0xc89d,		0x21, 0
+	.dw 0x90c0, 0xc89d,	0x90ff, 0xc89d,		0x21, 0
+	.dw 0x9140, 0xc89d,	0x917f, 0xc89d,		0x21, 0
+	.dw 0x91c0, 0xc89d,	0x91ff, 0xc89d,		0x21, 0
+	.dw 0x9240, 0xc89d,	0x927f, 0xc89d,		0x21, 0
+	.dw 0x92c0, 0xc89d,	0x92ff, 0xc89d,		0x21, 0
+	.dw 0x9340, 0xc89d,	0x937f, 0xc89d,		0x21, 0
+	.dw 0x93c0, 0xc89d,	0x93ff, 0xc89d,		0x21, 0
+	.dw 0x9440, 0xc89d,	0x947f, 0xc89d,		0x21, 0
+	.dw 0x94c0, 0xc89d,	0x94ff, 0xc89d,		0x21, 0
+	.dw 0x9540, 0xc89d,	0x957f, 0xc89d,		0x21, 0
+	.dw 0x95c0, 0xc89d,	0x95ff, 0xc89d,		0x21, 0
+	.dw 0x9640, 0xc89d,	0x967f, 0xc89d,		0x21, 0
+	.dw 0x96c0, 0xc89d,	0x96ff, 0xc89d,		0x21, 0
+	.dw 0x9740, 0xc89d,	0x977f, 0xc89d,		0x21, 0
+	.dw 0x97c0, 0xc89d,	0x97ff, 0xc89d,		0x21, 0
+	.dw 0x9840, 0xc89d,	0x987f, 0xc89d,		0x21, 0
+	.dw 0x98c0, 0xc89d,	0x98ff, 0xc89d,		0x21, 0
+	.dw 0x9940, 0xc89d,	0x997f, 0xc89d,		0x21, 0
+	.dw 0x99c0, 0xc89d,	0x9fff, 0xc89d,		0x21, 0
+	.dw 0xa040, 0xc89d,	0xa07f, 0xc89d,		0x21, 0
+	.dw 0xa0c0, 0xc89d,	0xa0ff, 0xc89d,		0x21, 0
+	.dw 0xa140, 0xc89d,	0xa17f, 0xc89d,		0x21, 0
+	.dw 0xa1c0, 0xc89d,	0xa1ff, 0xc89d,		0x21, 0
+	.dw 0xa240, 0xc89d,	0xa27f, 0xc89d,		0x21, 0
+	.dw 0xa2c0, 0xc89d,	0xa2ff, 0xc89d,		0x21, 0
+	.dw 0xa340, 0xc89d,	0xa37f, 0xc89d,		0x21, 0
+	.dw 0xa3c0, 0xc89d,	0xa3ff, 0xc89d,		0x21, 0
+	.dw 0xa440, 0xc89d,	0xa47f, 0xc89d,		0x21, 0
+	.dw 0xa4c0, 0xc89d,	0xa4ff, 0xc89d,		0x21, 0
+	.dw 0xa540, 0xc89d,	0xa57f, 0xc89d,		0x21, 0
+	.dw 0xa5c0, 0xc89d,	0xa5ff, 0xc89d,		0x21, 0
+	.dw 0xa640, 0xc89d,	0xa67f, 0xc89d,		0x21, 0
+	.dw 0xa6c0, 0xc89d,	0xa6ff, 0xc89d,		0x21, 0
+	.dw 0xa740, 0xc89d,	0xa77f, 0xc89d,		0x21, 0
+	.dw 0xa7c0, 0xc89d,	0xa7ff, 0xc89d,		0x21, 0
+	.dw 0xa840, 0xc89d,	0xa87f, 0xc89d,		0x21, 0
+	.dw 0xa8c0, 0xc89d,	0xa8ff, 0xc89d,		0x21, 0
+	.dw 0xa940, 0xc89d,	0xa97f, 0xc89d,		0x21, 0
+	.dw 0xa9c0, 0xc89d,	0xa9ff, 0xc89d,		0x21, 0
+	.dw 0xaa40, 0xc89d,	0xaa7f, 0xc89d,		0x21, 0
+	.dw 0xaac0, 0xc89d,	0xaaff, 0xc89d,		0x21, 0
+	.dw 0xab40, 0xc89d,	0xab7f, 0xc89d,		0x21, 0
+	.dw 0xabc0, 0xc89d,	0xabff, 0xc89d,		0x21, 0
+	.dw 0xac40, 0xc89d,	0xac7f, 0xc89d,		0x21, 0
+	.dw 0xacc0, 0xc89d,	0xacff, 0xc89d,		0x21, 0
+	.dw 0xad40, 0xc89d,	0xad7f, 0xc89d,		0x21, 0
+	.dw 0xadc0, 0xc89d,	0xadff, 0xc89d,		0x21, 0
+	.dw 0xae40, 0xc89d,	0xae7f, 0xc89d,		0x21, 0
+	.dw 0xaec0, 0xc89d,	0xaeff, 0xc89d,		0x21, 0
+	.dw 0xaf40, 0xc89d,	0xaf7f, 0xc89d,		0x21, 0
+	.dw 0xafc0, 0xc89d,	0xafff, 0xc89d,		0x21, 0
+	.dw 0xb040, 0xc89d,	0xb07f, 0xc89d,		0x21, 0
+	.dw 0xb0c0, 0xc89d,	0xb0ff, 0xc89d,		0x21, 0
+	.dw 0xb140, 0xc89d,	0xb17f, 0xc89d,		0x21, 0
+	.dw 0xb1c0, 0xc89d,	0xb1ff, 0xc89d,		0x21, 0
+	.dw 0xb240, 0xc89d,	0xb27f, 0xc89d,		0x21, 0
+	.dw 0xb2c0, 0xc89d,	0xb2ff, 0xc89d,		0x21, 0
+	.dw 0xb340, 0xc89d,	0xb37f, 0xc89d,		0x21, 0
+	.dw 0xb3c0, 0xc89d,	0xb3ff, 0xc89d,		0x21, 0
+	.dw 0xb440, 0xc89d,	0xb47f, 0xc89d,		0x21, 0
+	.dw 0xb4c0, 0xc89d,	0xb4ff, 0xc89d,		0x21, 0
+	.dw 0xb540, 0xc89d,	0xb57f, 0xc89d,		0x21, 0
+	.dw 0xb5c0, 0xc89d,	0xb5ff, 0xc89d,		0x21, 0
+	.dw 0xb640, 0xc89d,	0xb67f, 0xc89d,		0x21, 0
+	.dw 0xb6c0, 0xc89d,	0xb6ff, 0xc89d,		0x21, 0
+	.dw 0xb740, 0xc89d,	0xb77f, 0xc89d,		0x21, 0
+	.dw 0xb7c0, 0xc89d,	0xb7ff, 0xc89d,		0x21, 0
+	.dw 0xb840, 0xc89d,	0xb87f, 0xc89d,		0x21, 0
+	.dw 0xb8c0, 0xc89d,	0xb8ff, 0xc89d,		0x21, 0
+	.dw 0xb940, 0xc89d,	0xb97f, 0xc89d,		0x21, 0
+	.dw 0xb9c0, 0xc89d,	0xbfff, 0xc89d,		0x21, 0
+	.dw 0xc040, 0xc89d,	0xc07f, 0xc89d,		0x21, 0
+	.dw 0xc0c0, 0xc89d,	0xc0ff, 0xc89d,		0x21, 0
+	.dw 0xc140, 0xc89d,	0xc17f, 0xc89d,		0x21, 0
+	.dw 0xc1c0, 0xc89d,	0xc1ff, 0xc89d,		0x21, 0
+	.dw 0xc240, 0xc89d,	0xc27f, 0xc89d,		0x21, 0
+	.dw 0xc2c0, 0xc89d,	0xc2ff, 0xc89d,		0x21, 0
+	.dw 0xc340, 0xc89d,	0xc37f, 0xc89d,		0x21, 0
+	.dw 0xc3c0, 0xc89d,	0xc3ff, 0xc89d,		0x21, 0
+	.dw 0xc440, 0xc89d,	0xc47f, 0xc89d,		0x21, 0
+	.dw 0xc4c0, 0xc89d,	0xc4ff, 0xc89d,		0x21, 0
+	.dw 0xc540, 0xc89d,	0xc57f, 0xc89d,		0x21, 0
+	.dw 0xc5c0, 0xc89d,	0xc5ff, 0xc89d,		0x21, 0
+	.dw 0xc640, 0xc89d,	0xc67f, 0xc89d,		0x21, 0
+	.dw 0xc6c0, 0xc89d,	0xc6ff, 0xc89d,		0x21, 0
+	.dw 0xc740, 0xc89d,	0xc77f, 0xc89d,		0x21, 0
+	.dw 0xc7c0, 0xc89d,	0xc7ff, 0xc89d,		0x21, 0
+	.dw 0xc840, 0xc89d,	0xc87f, 0xc89d,		0x21, 0
+	.dw 0xc8c0, 0xc89d,	0xc8ff, 0xc89d,		0x21, 0
+	.dw 0xc940, 0xc89d,	0xc97f, 0xc89d,		0x21, 0
+	.dw 0xc9c0, 0xc89d,	0xc9ff, 0xc89d,		0x21, 0
+	.dw 0xca40, 0xc89d,	0xca7f, 0xc89d,		0x21, 0
+	.dw 0xcac0, 0xc89d,	0xcaff, 0xc89d,		0x21, 0
+	.dw 0xcb40, 0xc89d,	0xcb7f, 0xc89d,		0x21, 0
+	.dw 0xcbc0, 0xc89d,	0xcbff, 0xc89d,		0x21, 0
+	.dw 0xcc40, 0xc89d,	0xcc7f, 0xc89d,		0x21, 0
+	.dw 0xccc0, 0xc89d,	0xccff, 0xc89d,		0x21, 0
+	.dw 0xcd40, 0xc89d,	0xcd7f, 0xc89d,		0x21, 0
+	.dw 0xcdc0, 0xc89d,	0xcdff, 0xc89d,		0x21, 0
+	.dw 0xce40, 0xc89d,	0xce7f, 0xc89d,		0x21, 0
+	.dw 0xcec0, 0xc89d,	0xceff, 0xc89d,		0x21, 0
+	.dw 0xcf40, 0xc89d,	0xcf7f, 0xc89d,		0x21, 0
+	.dw 0xcfc0, 0xc89d,	0xcfff, 0xc89d,		0x21, 0
+	.dw 0xd040, 0xc89d,	0xd07f, 0xc89d,		0x21, 0
+	.dw 0xd0c0, 0xc89d,	0xd0ff, 0xc89d,		0x21, 0
+	.dw 0xd140, 0xc89d,	0xd17f, 0xc89d,		0x21, 0
+	.dw 0xd1c0, 0xc89d,	0xd1ff, 0xc89d,		0x21, 0
+	.dw 0xd240, 0xc89d,	0xd27f, 0xc89d,		0x21, 0
+	.dw 0xd2c0, 0xc89d,	0xd2ff, 0xc89d,		0x21, 0
+	.dw 0xd340, 0xc89d,	0xd37f, 0xc89d,		0x21, 0
+	.dw 0xd3c0, 0xc89d,	0xd3ff, 0xc89d,		0x21, 0
+	.dw 0xd440, 0xc89d,	0xd47f, 0xc89d,		0x21, 0
+	.dw 0xd4c0, 0xc89d,	0xd4ff, 0xc89d,		0x21, 0
+	.dw 0xd540, 0xc89d,	0xd57f, 0xc89d,		0x21, 0
+	.dw 0xd5c0, 0xc89d,	0xd5ff, 0xc89d,		0x21, 0
+	.dw 0xd640, 0xc89d,	0xd67f, 0xc89d,		0x21, 0
+	.dw 0xd6c0, 0xc89d,	0xd6ff, 0xc89d,		0x21, 0
+	.dw 0xd740, 0xc89d,	0xd77f, 0xc89d,		0x21, 0
+	.dw 0xd7c0, 0xc89d,	0xd7ff, 0xc89d,		0x21, 0
+	.dw 0xd840, 0xc89d,	0xd87f, 0xc89d,		0x21, 0
+	.dw 0xd8c0, 0xc89d,	0xd8ff, 0xc89d,		0x21, 0
+	.dw 0xd940, 0xc89d,	0xd97f, 0xc89d,		0x21, 0
+	.dw 0xd9c0, 0xc89d,	0xdfff, 0xc89d,		0x21, 0
+	.dw 0xe040, 0xc89d,	0xe07f, 0xc89d,		0x21, 0
+	.dw 0xe0c0, 0xc89d,	0xe0ff, 0xc89d,		0x21, 0
+	.dw 0xe140, 0xc89d,	0xe17f, 0xc89d,		0x21, 0
+	.dw 0xe1c0, 0xc89d,	0xe1ff, 0xc89d,		0x21, 0
+	.dw 0xe240, 0xc89d,	0xe27f, 0xc89d,		0x21, 0
+	.dw 0xe2c0, 0xc89d,	0xe2ff, 0xc89d,		0x21, 0
+	.dw 0xe340, 0xc89d,	0xe37f, 0xc89d,		0x21, 0
+	.dw 0xe3c0, 0xc89d,	0xe3ff, 0xc89d,		0x21, 0
+	.dw 0xe440, 0xc89d,	0xe47f, 0xc89d,		0x21, 0
+	.dw 0xe4c0, 0xc89d,	0xe4ff, 0xc89d,		0x21, 0
+	.dw 0xe540, 0xc89d,	0xe57f, 0xc89d,		0x21, 0
+	.dw 0xe5c0, 0xc89d,	0xe5ff, 0xc89d,		0x21, 0
+	.dw 0xe640, 0xc89d,	0xe67f, 0xc89d,		0x21, 0
+	.dw 0xe6c0, 0xc89d,	0xe6ff, 0xc89d,		0x21, 0
+	.dw 0xe740, 0xc89d,	0xe77f, 0xc89d,		0x21, 0
+	.dw 0xe7c0, 0xc89d,	0xe7ff, 0xc89d,		0x21, 0
+	.dw 0xe840, 0xc89d,	0xe87f, 0xc89d,		0x21, 0
+	.dw 0xe8c0, 0xc89d,	0xe8ff, 0xc89d,		0x21, 0
+	.dw 0xe940, 0xc89d,	0xe97f, 0xc89d,		0x21, 0
+	.dw 0xe9c0, 0xc89d,	0xe9ff, 0xc89d,		0x21, 0
+	.dw 0xea40, 0xc89d,	0xea7f, 0xc89d,		0x21, 0
+	.dw 0xeac0, 0xc89d,	0xeaff, 0xc89d,		0x21, 0
+	.dw 0xeb40, 0xc89d,	0xeb7f, 0xc89d,		0x21, 0
+	.dw 0xebc0, 0xc89d,	0xebff, 0xc89d,		0x21, 0
+	.dw 0xec40, 0xc89d,	0xec7f, 0xc89d,		0x21, 0
+	.dw 0xecc0, 0xc89d,	0xecff, 0xc89d,		0x21, 0
+	.dw 0xed40, 0xc89d,	0xed7f, 0xc89d,		0x21, 0
+	.dw 0xedc0, 0xc89d,	0xedff, 0xc89d,		0x21, 0
+	.dw 0xee40, 0xc89d,	0xee7f, 0xc89d,		0x21, 0
+	.dw 0xeec0, 0xc89d,	0xeeff, 0xc89d,		0x21, 0
+	.dw 0xef40, 0xc89d,	0xef7f, 0xc89d,		0x21, 0
+	.dw 0xefc0, 0xc89d,	0xefff, 0xc89d,		0x21, 0
+	.dw 0xf040, 0xc89d,	0xf07f, 0xc89d,		0x21, 0
+	.dw 0xf0c0, 0xc89d,	0xf0ff, 0xc89d,		0x21, 0
+	.dw 0xf140, 0xc89d,	0xf17f, 0xc89d,		0x21, 0
+	.dw 0xf1c0, 0xc89d,	0xf1ff, 0xc89d,		0x21, 0
+	.dw 0xf240, 0xc89d,	0xf27f, 0xc89d,		0x21, 0
+	.dw 0xf2c0, 0xc89d,	0xf2ff, 0xc89d,		0x21, 0
+	.dw 0xf340, 0xc89d,	0xf37f, 0xc89d,		0x21, 0
+	.dw 0xf3c0, 0xc89d,	0xf3ff, 0xc89d,		0x21, 0
+	.dw 0xf440, 0xc89d,	0xf47f, 0xc89d,		0x21, 0
+	.dw 0xf4c0, 0xc89d,	0xf4ff, 0xc89d,		0x21, 0
+	.dw 0xf540, 0xc89d,	0xf57f, 0xc89d,		0x21, 0
+	.dw 0xf5c0, 0xc89d,	0xf5ff, 0xc89d,		0x21, 0
+	.dw 0xf640, 0xc89d,	0xf67f, 0xc89d,		0x21, 0
+	.dw 0xf6c0, 0xc89d,	0xf6ff, 0xc89d,		0x21, 0
+	.dw 0xf740, 0xc89d,	0xf77f, 0xc89d,		0x21, 0
+	.dw 0xf7c0, 0xc89d,	0xf7ff, 0xc89d,		0x21, 0
+	.dw 0xf840, 0xc89d,	0xf87f, 0xc89d,		0x21, 0
+	.dw 0xf8c0, 0xc89d,	0xf8ff, 0xc89d,		0x21, 0
+	.dw 0xf940, 0xc89d,	0xf97f, 0xc89d,		0x21, 0
+	.dw 0xf9c0, 0xc89d,	0xffff, 0xc89d,		0x21, 0
+	.dw 0x0040, 0xc89e,	0x007f, 0xc89e,		0x21, 0
+	.dw 0x00c0, 0xc89e,	0x00ff, 0xc89e,		0x21, 0
+	.dw 0x0140, 0xc89e,	0x017f, 0xc89e,		0x21, 0
+	.dw 0x01c0, 0xc89e,	0x01ff, 0xc89e,		0x21, 0
+	.dw 0x0240, 0xc89e,	0x027f, 0xc89e,		0x21, 0
+	.dw 0x02c0, 0xc89e,	0x02ff, 0xc89e,		0x21, 0
+	.dw 0x0340, 0xc89e,	0x037f, 0xc89e,		0x21, 0
+	.dw 0x03c0, 0xc89e,	0x03ff, 0xc89e,		0x21, 0
+	.dw 0x0440, 0xc89e,	0x047f, 0xc89e,		0x21, 0
+	.dw 0x04c0, 0xc89e,	0x04ff, 0xc89e,		0x21, 0
+	.dw 0x0540, 0xc89e,	0x057f, 0xc89e,		0x21, 0
+	.dw 0x05c0, 0xc89e,	0x05ff, 0xc89e,		0x21, 0
+	.dw 0x0640, 0xc89e,	0x067f, 0xc89e,		0x21, 0
+	.dw 0x06c0, 0xc89e,	0x06ff, 0xc89e,		0x21, 0
+	.dw 0x0740, 0xc89e,	0x077f, 0xc89e,		0x21, 0
+	.dw 0x07c0, 0xc89e,	0x07ff, 0xc89e,		0x21, 0
+	.dw 0x0840, 0xc89e,	0x087f, 0xc89e,		0x21, 0
+	.dw 0x08c0, 0xc89e,	0x08ff, 0xc89e,		0x21, 0
+	.dw 0x0940, 0xc89e,	0x097f, 0xc89e,		0x21, 0
+	.dw 0x09c0, 0xc89e,	0x09ff, 0xc89e,		0x21, 0
+	.dw 0x0a40, 0xc89e,	0x0a7f, 0xc89e,		0x21, 0
+	.dw 0x0ac0, 0xc89e,	0x0aff, 0xc89e,		0x21, 0
+	.dw 0x0b40, 0xc89e,	0x0b7f, 0xc89e,		0x21, 0
+	.dw 0x0bc0, 0xc89e,	0x0bff, 0xc89e,		0x21, 0
+	.dw 0x0c40, 0xc89e,	0x0c7f, 0xc89e,		0x21, 0
+	.dw 0x0cc0, 0xc89e,	0x0cff, 0xc89e,		0x21, 0
+	.dw 0x0d40, 0xc89e,	0x0d7f, 0xc89e,		0x21, 0
+	.dw 0x0dc0, 0xc89e,	0x0dff, 0xc89e,		0x21, 0
+	.dw 0x0e40, 0xc89e,	0x0e7f, 0xc89e,		0x21, 0
+	.dw 0x0ec0, 0xc89e,	0x0eff, 0xc89e,		0x21, 0
+	.dw 0x0f40, 0xc89e,	0x0f7f, 0xc89e,		0x21, 0
+	.dw 0x0fc0, 0xc89e,	0x0fff, 0xc89e,		0x21, 0
+	.dw 0x1040, 0xc89e,	0x107f, 0xc89e,		0x21, 0
+	.dw 0x10c0, 0xc89e,	0x10ff, 0xc89e,		0x21, 0
+	.dw 0x1140, 0xc89e,	0x117f, 0xc89e,		0x21, 0
+	.dw 0x11c0, 0xc89e,	0x11ff, 0xc89e,		0x21, 0
+	.dw 0x1240, 0xc89e,	0x127f, 0xc89e,		0x21, 0
+	.dw 0x12c0, 0xc89e,	0x12ff, 0xc89e,		0x21, 0
+	.dw 0x1340, 0xc89e,	0x137f, 0xc89e,		0x21, 0
+	.dw 0x13c0, 0xc89e,	0x13ff, 0xc89e,		0x21, 0
+	.dw 0x1440, 0xc89e,	0x147f, 0xc89e,		0x21, 0
+	.dw 0x14c0, 0xc89e,	0x14ff, 0xc89e,		0x21, 0
+	.dw 0x1540, 0xc89e,	0x157f, 0xc89e,		0x21, 0
+	.dw 0x15c0, 0xc89e,	0x15ff, 0xc89e,		0x21, 0
+	.dw 0x1640, 0xc89e,	0x167f, 0xc89e,		0x21, 0
+	.dw 0x16c0, 0xc89e,	0x16ff, 0xc89e,		0x21, 0
+	.dw 0x1740, 0xc89e,	0x177f, 0xc89e,		0x21, 0
+	.dw 0x17c0, 0xc89e,	0x17ff, 0xc89e,		0x21, 0
+	.dw 0x1840, 0xc89e,	0x187f, 0xc89e,		0x21, 0
+	.dw 0x18c0, 0xc89e,	0x18ff, 0xc89e,		0x21, 0
+	.dw 0x1940, 0xc89e,	0x197f, 0xc89e,		0x21, 0
+	.dw 0x19c0, 0xc89e,	0x1fff, 0xc89e,		0x21, 0
+	.dw 0x2040, 0xc89e,	0x207f, 0xc89e,		0x21, 0
+	.dw 0x20c0, 0xc89e,	0x20ff, 0xc89e,		0x21, 0
+	.dw 0x2140, 0xc89e,	0x217f, 0xc89e,		0x21, 0
+	.dw 0x21c0, 0xc89e,	0x21ff, 0xc89e,		0x21, 0
+	.dw 0x2240, 0xc89e,	0x227f, 0xc89e,		0x21, 0
+	.dw 0x22c0, 0xc89e,	0x22ff, 0xc89e,		0x21, 0
+	.dw 0x2340, 0xc89e,	0x237f, 0xc89e,		0x21, 0
+	.dw 0x23c0, 0xc89e,	0x23ff, 0xc89e,		0x21, 0
+	.dw 0x2440, 0xc89e,	0x247f, 0xc89e,		0x21, 0
+	.dw 0x24c0, 0xc89e,	0x24ff, 0xc89e,		0x21, 0
+	.dw 0x2540, 0xc89e,	0x257f, 0xc89e,		0x21, 0
+	.dw 0x25c0, 0xc89e,	0x25ff, 0xc89e,		0x21, 0
+	.dw 0x2640, 0xc89e,	0x267f, 0xc89e,		0x21, 0
+	.dw 0x26c0, 0xc89e,	0x26ff, 0xc89e,		0x21, 0
+	.dw 0x2740, 0xc89e,	0x277f, 0xc89e,		0x21, 0
+	.dw 0x27c0, 0xc89e,	0x27ff, 0xc89e,		0x21, 0
+	.dw 0x2840, 0xc89e,	0x287f, 0xc89e,		0x21, 0
+	.dw 0x28c0, 0xc89e,	0x28ff, 0xc89e,		0x21, 0
+	.dw 0x2940, 0xc89e,	0x297f, 0xc89e,		0x21, 0
+	.dw 0x29c0, 0xc89e,	0x29ff, 0xc89e,		0x21, 0
+	.dw 0x2a40, 0xc89e,	0x2a7f, 0xc89e,		0x21, 0
+	.dw 0x2ac0, 0xc89e,	0x2aff, 0xc89e,		0x21, 0
+	.dw 0x2b40, 0xc89e,	0x2b7f, 0xc89e,		0x21, 0
+	.dw 0x2bc0, 0xc89e,	0x2bff, 0xc89e,		0x21, 0
+	.dw 0x2c40, 0xc89e,	0x2c7f, 0xc89e,		0x21, 0
+	.dw 0x2cc0, 0xc89e,	0x2cff, 0xc89e,		0x21, 0
+	.dw 0x2d40, 0xc89e,	0x2d7f, 0xc89e,		0x21, 0
+	.dw 0x2dc0, 0xc89e,	0x2dff, 0xc89e,		0x21, 0
+	.dw 0x2e40, 0xc89e,	0x2e7f, 0xc89e,		0x21, 0
+	.dw 0x2ec0, 0xc89e,	0x2eff, 0xc89e,		0x21, 0
+	.dw 0x2f40, 0xc89e,	0x2f7f, 0xc89e,		0x21, 0
+	.dw 0x2fc0, 0xc89e,	0x2fff, 0xc89e,		0x21, 0
+	.dw 0x3040, 0xc89e,	0x307f, 0xc89e,		0x21, 0
+	.dw 0x30c0, 0xc89e,	0x30ff, 0xc89e,		0x21, 0
+	.dw 0x3140, 0xc89e,	0x317f, 0xc89e,		0x21, 0
+	.dw 0x31c0, 0xc89e,	0x31ff, 0xc89e,		0x21, 0
+	.dw 0x3240, 0xc89e,	0x327f, 0xc89e,		0x21, 0
+	.dw 0x32c0, 0xc89e,	0x32ff, 0xc89e,		0x21, 0
+	.dw 0x3340, 0xc89e,	0x337f, 0xc89e,		0x21, 0
+	.dw 0x33c0, 0xc89e,	0x33ff, 0xc89e,		0x21, 0
+	.dw 0x3440, 0xc89e,	0x347f, 0xc89e,		0x21, 0
+	.dw 0x34c0, 0xc89e,	0x34ff, 0xc89e,		0x21, 0
+	.dw 0x3540, 0xc89e,	0x357f, 0xc89e,		0x21, 0
+	.dw 0x35c0, 0xc89e,	0x35ff, 0xc89e,		0x21, 0
+	.dw 0x3640, 0xc89e,	0x367f, 0xc89e,		0x21, 0
+	.dw 0x36c0, 0xc89e,	0x36ff, 0xc89e,		0x21, 0
+	.dw 0x3740, 0xc89e,	0x377f, 0xc89e,		0x21, 0
+	.dw 0x37c0, 0xc89e,	0x37ff, 0xc89e,		0x21, 0
+	.dw 0x3840, 0xc89e,	0x387f, 0xc89e,		0x21, 0
+	.dw 0x38c0, 0xc89e,	0x38ff, 0xc89e,		0x21, 0
+	.dw 0x3940, 0xc89e,	0x397f, 0xc89e,		0x21, 0
+	.dw 0x39c0, 0xc89e,	0x3fff, 0xc89e,		0x21, 0
+	.dw 0x4040, 0xc89e,	0x407f, 0xc89e,		0x21, 0
+	.dw 0x40c0, 0xc89e,	0x40ff, 0xc89e,		0x21, 0
+	.dw 0x4140, 0xc89e,	0x417f, 0xc89e,		0x21, 0
+	.dw 0x41c0, 0xc89e,	0x41ff, 0xc89e,		0x21, 0
+	.dw 0x4240, 0xc89e,	0x427f, 0xc89e,		0x21, 0
+	.dw 0x42c0, 0xc89e,	0x42ff, 0xc89e,		0x21, 0
+	.dw 0x4340, 0xc89e,	0x437f, 0xc89e,		0x21, 0
+	.dw 0x43c0, 0xc89e,	0x43ff, 0xc89e,		0x21, 0
+	.dw 0x4440, 0xc89e,	0x447f, 0xc89e,		0x21, 0
+	.dw 0x44c0, 0xc89e,	0x44ff, 0xc89e,		0x21, 0
+	.dw 0x4540, 0xc89e,	0x457f, 0xc89e,		0x21, 0
+	.dw 0x45c0, 0xc89e,	0x45ff, 0xc89e,		0x21, 0
+	.dw 0x4640, 0xc89e,	0x467f, 0xc89e,		0x21, 0
+	.dw 0x46c0, 0xc89e,	0x46ff, 0xc89e,		0x21, 0
+	.dw 0x4740, 0xc89e,	0x477f, 0xc89e,		0x21, 0
+	.dw 0x47c0, 0xc89e,	0x47ff, 0xc89e,		0x21, 0
+	.dw 0x4840, 0xc89e,	0x487f, 0xc89e,		0x21, 0
+	.dw 0x48c0, 0xc89e,	0x48ff, 0xc89e,		0x21, 0
+	.dw 0x4940, 0xc89e,	0x497f, 0xc89e,		0x21, 0
+	.dw 0x49c0, 0xc89e,	0x49ff, 0xc89e,		0x21, 0
+	.dw 0x4a40, 0xc89e,	0x4a7f, 0xc89e,		0x21, 0
+	.dw 0x4ac0, 0xc89e,	0x4aff, 0xc89e,		0x21, 0
+	.dw 0x4b40, 0xc89e,	0x4b7f, 0xc89e,		0x21, 0
+	.dw 0x4bc0, 0xc89e,	0x4bff, 0xc89e,		0x21, 0
+	.dw 0x4c40, 0xc89e,	0x4c7f, 0xc89e,		0x21, 0
+	.dw 0x4cc0, 0xc89e,	0x4cff, 0xc89e,		0x21, 0
+	.dw 0x4d40, 0xc89e,	0x4d7f, 0xc89e,		0x21, 0
+	.dw 0x4dc0, 0xc89e,	0x4dff, 0xc89e,		0x21, 0
+	.dw 0x4e40, 0xc89e,	0x4e7f, 0xc89e,		0x21, 0
+	.dw 0x4ec0, 0xc89e,	0x4eff, 0xc89e,		0x21, 0
+	.dw 0x4f40, 0xc89e,	0x4f7f, 0xc89e,		0x21, 0
+	.dw 0x4fc0, 0xc89e,	0x4fff, 0xc89e,		0x21, 0
+	.dw 0x5040, 0xc89e,	0x507f, 0xc89e,		0x21, 0
+	.dw 0x50c0, 0xc89e,	0x50ff, 0xc89e,		0x21, 0
+	.dw 0x5140, 0xc89e,	0x517f, 0xc89e,		0x21, 0
+	.dw 0x51c0, 0xc89e,	0x51ff, 0xc89e,		0x21, 0
+	.dw 0x5240, 0xc89e,	0x527f, 0xc89e,		0x21, 0
+	.dw 0x52c0, 0xc89e,	0x52ff, 0xc89e,		0x21, 0
+	.dw 0x5340, 0xc89e,	0x537f, 0xc89e,		0x21, 0
+	.dw 0x53c0, 0xc89e,	0x53ff, 0xc89e,		0x21, 0
+	.dw 0x5440, 0xc89e,	0x547f, 0xc89e,		0x21, 0
+	.dw 0x54c0, 0xc89e,	0x54ff, 0xc89e,		0x21, 0
+	.dw 0x5540, 0xc89e,	0x557f, 0xc89e,		0x21, 0
+	.dw 0x55c0, 0xc89e,	0x55ff, 0xc89e,		0x21, 0
+	.dw 0x5640, 0xc89e,	0x567f, 0xc89e,		0x21, 0
+	.dw 0x56c0, 0xc89e,	0x56ff, 0xc89e,		0x21, 0
+	.dw 0x5740, 0xc89e,	0x577f, 0xc89e,		0x21, 0
+	.dw 0x57c0, 0xc89e,	0x57ff, 0xc89e,		0x21, 0
+	.dw 0x5840, 0xc89e,	0x587f, 0xc89e,		0x21, 0
+	.dw 0x58c0, 0xc89e,	0x58ff, 0xc89e,		0x21, 0
+	.dw 0x5940, 0xc89e,	0x597f, 0xc89e,		0x21, 0
+	.dw 0x59c0, 0xc89e,	0x5fff, 0xc89e,		0x21, 0
+	.dw 0x6040, 0xc89e,	0x607f, 0xc89e,		0x21, 0
+	.dw 0x60c0, 0xc89e,	0x60ff, 0xc89e,		0x21, 0
+	.dw 0x6140, 0xc89e,	0x617f, 0xc89e,		0x21, 0
+	.dw 0x61c0, 0xc89e,	0x61ff, 0xc89e,		0x21, 0
+	.dw 0x6240, 0xc89e,	0x627f, 0xc89e,		0x21, 0
+	.dw 0x62c0, 0xc89e,	0x62ff, 0xc89e,		0x21, 0
+	.dw 0x6340, 0xc89e,	0x637f, 0xc89e,		0x21, 0
+	.dw 0x63c0, 0xc89e,	0x63ff, 0xc89e,		0x21, 0
+	.dw 0x6440, 0xc89e,	0x647f, 0xc89e,		0x21, 0
+	.dw 0x64c0, 0xc89e,	0x64ff, 0xc89e,		0x21, 0
+	.dw 0x6540, 0xc89e,	0x657f, 0xc89e,		0x21, 0
+	.dw 0x65c0, 0xc89e,	0x65ff, 0xc89e,		0x21, 0
+	.dw 0x6640, 0xc89e,	0x667f, 0xc89e,		0x21, 0
+	.dw 0x66c0, 0xc89e,	0x66ff, 0xc89e,		0x21, 0
+	.dw 0x6740, 0xc89e,	0x677f, 0xc89e,		0x21, 0
+	.dw 0x67c0, 0xc89e,	0x67ff, 0xc89e,		0x21, 0
+	.dw 0x6840, 0xc89e,	0x687f, 0xc89e,		0x21, 0
+	.dw 0x68c0, 0xc89e,	0x68ff, 0xc89e,		0x21, 0
+	.dw 0x6940, 0xc89e,	0x697f, 0xc89e,		0x21, 0
+	.dw 0x69c0, 0xc89e,	0x69ff, 0xc89e,		0x21, 0
+	.dw 0x6a40, 0xc89e,	0x6a7f, 0xc89e,		0x21, 0
+	.dw 0x6ac0, 0xc89e,	0x6aff, 0xc89e,		0x21, 0
+	.dw 0x6b40, 0xc89e,	0x6b7f, 0xc89e,		0x21, 0
+	.dw 0x6bc0, 0xc89e,	0x6bff, 0xc89e,		0x21, 0
+	.dw 0x6c40, 0xc89e,	0x6c7f, 0xc89e,		0x21, 0
+	.dw 0x6cc0, 0xc89e,	0x6cff, 0xc89e,		0x21, 0
+	.dw 0x6d40, 0xc89e,	0x6d7f, 0xc89e,		0x21, 0
+	.dw 0x6dc0, 0xc89e,	0x6dff, 0xc89e,		0x21, 0
+	.dw 0x6e40, 0xc89e,	0x6e7f, 0xc89e,		0x21, 0
+	.dw 0x6ec0, 0xc89e,	0x6eff, 0xc89e,		0x21, 0
+	.dw 0x6f40, 0xc89e,	0x6f7f, 0xc89e,		0x21, 0
+	.dw 0x6fc0, 0xc89e,	0x6fff, 0xc89e,		0x21, 0
+	.dw 0x7040, 0xc89e,	0x707f, 0xc89e,		0x21, 0
+	.dw 0x70c0, 0xc89e,	0x70ff, 0xc89e,		0x21, 0
+	.dw 0x7140, 0xc89e,	0x717f, 0xc89e,		0x21, 0
+	.dw 0x71c0, 0xc89e,	0x71ff, 0xc89e,		0x21, 0
+	.dw 0x7240, 0xc89e,	0x727f, 0xc89e,		0x21, 0
+	.dw 0x72c0, 0xc89e,	0x72ff, 0xc89e,		0x21, 0
+	.dw 0x7340, 0xc89e,	0x737f, 0xc89e,		0x21, 0
+	.dw 0x73c0, 0xc89e,	0x73ff, 0xc89e,		0x21, 0
+	.dw 0x7440, 0xc89e,	0x747f, 0xc89e,		0x21, 0
+	.dw 0x74c0, 0xc89e,	0x74ff, 0xc89e,		0x21, 0
+	.dw 0x7540, 0xc89e,	0x757f, 0xc89e,		0x21, 0
+	.dw 0x75c0, 0xc89e,	0x75ff, 0xc89e,		0x21, 0
+	.dw 0x7640, 0xc89e,	0x767f, 0xc89e,		0x21, 0
+	.dw 0x76c0, 0xc89e,	0x76ff, 0xc89e,		0x21, 0
+	.dw 0x7740, 0xc89e,	0x777f, 0xc89e,		0x21, 0
+	.dw 0x77c0, 0xc89e,	0x77ff, 0xc89e,		0x21, 0
+	.dw 0x7840, 0xc89e,	0x787f, 0xc89e,		0x21, 0
+	.dw 0x78c0, 0xc89e,	0x78ff, 0xc89e,		0x21, 0
+	.dw 0x7940, 0xc89e,	0x797f, 0xc89e,		0x21, 0
+	.dw 0x79c0, 0xc89e,	0x7fff, 0xc89e,		0x21, 0
+	.dw 0x8040, 0xc89e,	0x807f, 0xc89e,		0x21, 0
+	.dw 0x80c0, 0xc89e,	0x80ff, 0xc89e,		0x21, 0
+	.dw 0x8140, 0xc89e,	0x817f, 0xc89e,		0x21, 0
+	.dw 0x81c0, 0xc89e,	0x81ff, 0xc89e,		0x21, 0
+	.dw 0x8240, 0xc89e,	0x827f, 0xc89e,		0x21, 0
+	.dw 0x82c0, 0xc89e,	0x82ff, 0xc89e,		0x21, 0
+	.dw 0x8340, 0xc89e,	0x837f, 0xc89e,		0x21, 0
+	.dw 0x83c0, 0xc89e,	0x83ff, 0xc89e,		0x21, 0
+	.dw 0x8440, 0xc89e,	0x847f, 0xc89e,		0x21, 0
+	.dw 0x84c0, 0xc89e,	0x84ff, 0xc89e,		0x21, 0
+	.dw 0x8540, 0xc89e,	0x857f, 0xc89e,		0x21, 0
+	.dw 0x85c0, 0xc89e,	0x85ff, 0xc89e,		0x21, 0
+	.dw 0x8640, 0xc89e,	0x867f, 0xc89e,		0x21, 0
+	.dw 0x86c0, 0xc89e,	0x86ff, 0xc89e,		0x21, 0
+	.dw 0x8740, 0xc89e,	0x877f, 0xc89e,		0x21, 0
+	.dw 0x87c0, 0xc89e,	0x87ff, 0xc89e,		0x21, 0
+	.dw 0x8840, 0xc89e,	0x887f, 0xc89e,		0x21, 0
+	.dw 0x88c0, 0xc89e,	0x88ff, 0xc89e,		0x21, 0
+	.dw 0x8940, 0xc89e,	0x897f, 0xc89e,		0x21, 0
+	.dw 0x89c0, 0xc89e,	0x89ff, 0xc89e,		0x21, 0
+	.dw 0x8a40, 0xc89e,	0x8a7f, 0xc89e,		0x21, 0
+	.dw 0x8ac0, 0xc89e,	0x8aff, 0xc89e,		0x21, 0
+	.dw 0x8b40, 0xc89e,	0x8b7f, 0xc89e,		0x21, 0
+	.dw 0x8bc0, 0xc89e,	0x8bff, 0xc89e,		0x21, 0
+	.dw 0x8c40, 0xc89e,	0x8c7f, 0xc89e,		0x21, 0
+	.dw 0x8cc0, 0xc89e,	0x8cff, 0xc89e,		0x21, 0
+	.dw 0x8d40, 0xc89e,	0x8d7f, 0xc89e,		0x21, 0
+	.dw 0x8dc0, 0xc89e,	0x8dff, 0xc89e,		0x21, 0
+	.dw 0x8e40, 0xc89e,	0x8e7f, 0xc89e,		0x21, 0
+	.dw 0x8ec0, 0xc89e,	0x8eff, 0xc89e,		0x21, 0
+	.dw 0x8f40, 0xc89e,	0x8f7f, 0xc89e,		0x21, 0
+	.dw 0x8fc0, 0xc89e,	0x8fff, 0xc89e,		0x21, 0
+	.dw 0x9040, 0xc89e,	0x907f, 0xc89e,		0x21, 0
+	.dw 0x90c0, 0xc89e,	0x90ff, 0xc89e,		0x21, 0
+	.dw 0x9140, 0xc89e,	0x917f, 0xc89e,		0x21, 0
+	.dw 0x91c0, 0xc89e,	0x91ff, 0xc89e,		0x21, 0
+	.dw 0x9240, 0xc89e,	0x927f, 0xc89e,		0x21, 0
+	.dw 0x92c0, 0xc89e,	0x92ff, 0xc89e,		0x21, 0
+	.dw 0x9340, 0xc89e,	0x937f, 0xc89e,		0x21, 0
+	.dw 0x93c0, 0xc89e,	0x93ff, 0xc89e,		0x21, 0
+	.dw 0x9440, 0xc89e,	0x947f, 0xc89e,		0x21, 0
+	.dw 0x94c0, 0xc89e,	0x94ff, 0xc89e,		0x21, 0
+	.dw 0x9540, 0xc89e,	0x957f, 0xc89e,		0x21, 0
+	.dw 0x95c0, 0xc89e,	0x95ff, 0xc89e,		0x21, 0
+	.dw 0x9640, 0xc89e,	0x967f, 0xc89e,		0x21, 0
+	.dw 0x96c0, 0xc89e,	0x96ff, 0xc89e,		0x21, 0
+	.dw 0x9740, 0xc89e,	0x977f, 0xc89e,		0x21, 0
+	.dw 0x97c0, 0xc89e,	0x97ff, 0xc89e,		0x21, 0
+	.dw 0x9840, 0xc89e,	0x987f, 0xc89e,		0x21, 0
+	.dw 0x98c0, 0xc89e,	0x98ff, 0xc89e,		0x21, 0
+	.dw 0x9940, 0xc89e,	0x997f, 0xc89e,		0x21, 0
+	.dw 0x99c0, 0xc89e,	0x9fff, 0xc89e,		0x21, 0
+	.dw 0xa040, 0xc89e,	0xa07f, 0xc89e,		0x21, 0
+	.dw 0xa0c0, 0xc89e,	0xa0ff, 0xc89e,		0x21, 0
+	.dw 0xa140, 0xc89e,	0xa17f, 0xc89e,		0x21, 0
+	.dw 0xa1c0, 0xc89e,	0xa1ff, 0xc89e,		0x21, 0
+	.dw 0xa240, 0xc89e,	0xa27f, 0xc89e,		0x21, 0
+	.dw 0xa2c0, 0xc89e,	0xa2ff, 0xc89e,		0x21, 0
+	.dw 0xa340, 0xc89e,	0xa37f, 0xc89e,		0x21, 0
+	.dw 0xa3c0, 0xc89e,	0xa3ff, 0xc89e,		0x21, 0
+	.dw 0xa440, 0xc89e,	0xa47f, 0xc89e,		0x21, 0
+	.dw 0xa4c0, 0xc89e,	0xa4ff, 0xc89e,		0x21, 0
+	.dw 0xa540, 0xc89e,	0xa57f, 0xc89e,		0x21, 0
+	.dw 0xa5c0, 0xc89e,	0xa5ff, 0xc89e,		0x21, 0
+	.dw 0xa640, 0xc89e,	0xa67f, 0xc89e,		0x21, 0
+	.dw 0xa6c0, 0xc89e,	0xa6ff, 0xc89e,		0x21, 0
+	.dw 0xa740, 0xc89e,	0xa77f, 0xc89e,		0x21, 0
+	.dw 0xa7c0, 0xc89e,	0xa7ff, 0xc89e,		0x21, 0
+	.dw 0xa840, 0xc89e,	0xa87f, 0xc89e,		0x21, 0
+	.dw 0xa8c0, 0xc89e,	0xa8ff, 0xc89e,		0x21, 0
+	.dw 0xa940, 0xc89e,	0xa97f, 0xc89e,		0x21, 0
+	.dw 0xa9c0, 0xc89e,	0xa9ff, 0xc89e,		0x21, 0
+	.dw 0xaa40, 0xc89e,	0xaa7f, 0xc89e,		0x21, 0
+	.dw 0xaac0, 0xc89e,	0xaaff, 0xc89e,		0x21, 0
+	.dw 0xab40, 0xc89e,	0xab7f, 0xc89e,		0x21, 0
+	.dw 0xabc0, 0xc89e,	0xabff, 0xc89e,		0x21, 0
+	.dw 0xac40, 0xc89e,	0xac7f, 0xc89e,		0x21, 0
+	.dw 0xacc0, 0xc89e,	0xacff, 0xc89e,		0x21, 0
+	.dw 0xad40, 0xc89e,	0xad7f, 0xc89e,		0x21, 0
+	.dw 0xadc0, 0xc89e,	0xadff, 0xc89e,		0x21, 0
+	.dw 0xae40, 0xc89e,	0xae7f, 0xc89e,		0x21, 0
+	.dw 0xaec0, 0xc89e,	0xaeff, 0xc89e,		0x21, 0
+	.dw 0xaf40, 0xc89e,	0xaf7f, 0xc89e,		0x21, 0
+	.dw 0xafc0, 0xc89e,	0xafff, 0xc89e,		0x21, 0
+	.dw 0xb040, 0xc89e,	0xb07f, 0xc89e,		0x21, 0
+	.dw 0xb0c0, 0xc89e,	0xb0ff, 0xc89e,		0x21, 0
+	.dw 0xb140, 0xc89e,	0xb17f, 0xc89e,		0x21, 0
+	.dw 0xb1c0, 0xc89e,	0xb1ff, 0xc89e,		0x21, 0
+	.dw 0xb240, 0xc89e,	0xb27f, 0xc89e,		0x21, 0
+	.dw 0xb2c0, 0xc89e,	0xb2ff, 0xc89e,		0x21, 0
+	.dw 0xb340, 0xc89e,	0xb37f, 0xc89e,		0x21, 0
+	.dw 0xb3c0, 0xc89e,	0xb3ff, 0xc89e,		0x21, 0
+	.dw 0xb440, 0xc89e,	0xb47f, 0xc89e,		0x21, 0
+	.dw 0xb4c0, 0xc89e,	0xb4ff, 0xc89e,		0x21, 0
+	.dw 0xb540, 0xc89e,	0xb57f, 0xc89e,		0x21, 0
+	.dw 0xb5c0, 0xc89e,	0xb5ff, 0xc89e,		0x21, 0
+	.dw 0xb640, 0xc89e,	0xb67f, 0xc89e,		0x21, 0
+	.dw 0xb6c0, 0xc89e,	0xb6ff, 0xc89e,		0x21, 0
+	.dw 0xb740, 0xc89e,	0xb77f, 0xc89e,		0x21, 0
+	.dw 0xb7c0, 0xc89e,	0xb7ff, 0xc89e,		0x21, 0
+	.dw 0xb840, 0xc89e,	0xb87f, 0xc89e,		0x21, 0
+	.dw 0xb8c0, 0xc89e,	0xb8ff, 0xc89e,		0x21, 0
+	.dw 0xb940, 0xc89e,	0xb97f, 0xc89e,		0x21, 0
+	.dw 0xb9c0, 0xc89e,	0xbfff, 0xc89e,		0x21, 0
+	.dw 0xc040, 0xc89e,	0xc07f, 0xc89e,		0x21, 0
+	.dw 0xc0c0, 0xc89e,	0xc0ff, 0xc89e,		0x21, 0
+	.dw 0xc140, 0xc89e,	0xc17f, 0xc89e,		0x21, 0
+	.dw 0xc1c0, 0xc89e,	0xc1ff, 0xc89e,		0x21, 0
+	.dw 0xc240, 0xc89e,	0xc27f, 0xc89e,		0x21, 0
+	.dw 0xc2c0, 0xc89e,	0xc2ff, 0xc89e,		0x21, 0
+	.dw 0xc340, 0xc89e,	0xc37f, 0xc89e,		0x21, 0
+	.dw 0xc3c0, 0xc89e,	0xc3ff, 0xc89e,		0x21, 0
+	.dw 0xc440, 0xc89e,	0xc47f, 0xc89e,		0x21, 0
+	.dw 0xc4c0, 0xc89e,	0xc4ff, 0xc89e,		0x21, 0
+	.dw 0xc540, 0xc89e,	0xc57f, 0xc89e,		0x21, 0
+	.dw 0xc5c0, 0xc89e,	0xc5ff, 0xc89e,		0x21, 0
+	.dw 0xc640, 0xc89e,	0xc67f, 0xc89e,		0x21, 0
+	.dw 0xc6c0, 0xc89e,	0xc6ff, 0xc89e,		0x21, 0
+	.dw 0xc740, 0xc89e,	0xc77f, 0xc89e,		0x21, 0
+	.dw 0xc7c0, 0xc89e,	0xc7ff, 0xc89e,		0x21, 0
+	.dw 0xc840, 0xc89e,	0xc87f, 0xc89e,		0x21, 0
+	.dw 0xc8c0, 0xc89e,	0xc8ff, 0xc89e,		0x21, 0
+	.dw 0xc940, 0xc89e,	0xc97f, 0xc89e,		0x21, 0
+	.dw 0xc9c0, 0xc89e,	0xc9ff, 0xc89e,		0x21, 0
+	.dw 0xca40, 0xc89e,	0xca7f, 0xc89e,		0x21, 0
+	.dw 0xcac0, 0xc89e,	0xcaff, 0xc89e,		0x21, 0
+	.dw 0xcb40, 0xc89e,	0xcb7f, 0xc89e,		0x21, 0
+	.dw 0xcbc0, 0xc89e,	0xcbff, 0xc89e,		0x21, 0
+	.dw 0xcc40, 0xc89e,	0xcc7f, 0xc89e,		0x21, 0
+	.dw 0xccc0, 0xc89e,	0xccff, 0xc89e,		0x21, 0
+	.dw 0xcd40, 0xc89e,	0xcd7f, 0xc89e,		0x21, 0
+	.dw 0xcdc0, 0xc89e,	0xcdff, 0xc89e,		0x21, 0
+	.dw 0xce40, 0xc89e,	0xce7f, 0xc89e,		0x21, 0
+	.dw 0xcec0, 0xc89e,	0xceff, 0xc89e,		0x21, 0
+	.dw 0xcf40, 0xc89e,	0xcf7f, 0xc89e,		0x21, 0
+	.dw 0xcfc0, 0xc89e,	0xcfff, 0xc89e,		0x21, 0
+	.dw 0xd040, 0xc89e,	0xd07f, 0xc89e,		0x21, 0
+	.dw 0xd0c0, 0xc89e,	0xd0ff, 0xc89e,		0x21, 0
+	.dw 0xd140, 0xc89e,	0xd17f, 0xc89e,		0x21, 0
+	.dw 0xd1c0, 0xc89e,	0xd1ff, 0xc89e,		0x21, 0
+	.dw 0xd240, 0xc89e,	0xd27f, 0xc89e,		0x21, 0
+	.dw 0xd2c0, 0xc89e,	0xd2ff, 0xc89e,		0x21, 0
+	.dw 0xd340, 0xc89e,	0xd37f, 0xc89e,		0x21, 0
+	.dw 0xd3c0, 0xc89e,	0xd3ff, 0xc89e,		0x21, 0
+	.dw 0xd440, 0xc89e,	0xd47f, 0xc89e,		0x21, 0
+	.dw 0xd4c0, 0xc89e,	0xd4ff, 0xc89e,		0x21, 0
+	.dw 0xd540, 0xc89e,	0xd57f, 0xc89e,		0x21, 0
+	.dw 0xd5c0, 0xc89e,	0xd5ff, 0xc89e,		0x21, 0
+	.dw 0xd640, 0xc89e,	0xd67f, 0xc89e,		0x21, 0
+	.dw 0xd6c0, 0xc89e,	0xd6ff, 0xc89e,		0x21, 0
+	.dw 0xd740, 0xc89e,	0xd77f, 0xc89e,		0x21, 0
+	.dw 0xd7c0, 0xc89e,	0xd7ff, 0xc89e,		0x21, 0
+	.dw 0xd840, 0xc89e,	0xd87f, 0xc89e,		0x21, 0
+	.dw 0xd8c0, 0xc89e,	0xd8ff, 0xc89e,		0x21, 0
+	.dw 0xd940, 0xc89e,	0xd97f, 0xc89e,		0x21, 0
+	.dw 0xd9c0, 0xc89e,	0xdfff, 0xc89e,		0x21, 0
+	.dw 0xe040, 0xc89e,	0xe07f, 0xc89e,		0x21, 0
+	.dw 0xe0c0, 0xc89e,	0xe0ff, 0xc89e,		0x21, 0
+	.dw 0xe140, 0xc89e,	0xe17f, 0xc89e,		0x21, 0
+	.dw 0xe1c0, 0xc89e,	0xe1ff, 0xc89e,		0x21, 0
+	.dw 0xe240, 0xc89e,	0xe27f, 0xc89e,		0x21, 0
+	.dw 0xe2c0, 0xc89e,	0xe2ff, 0xc89e,		0x21, 0
+	.dw 0xe340, 0xc89e,	0xe37f, 0xc89e,		0x21, 0
+	.dw 0xe3c0, 0xc89e,	0xe3ff, 0xc89e,		0x21, 0
+	.dw 0xe440, 0xc89e,	0xe47f, 0xc89e,		0x21, 0
+	.dw 0xe4c0, 0xc89e,	0xe4ff, 0xc89e,		0x21, 0
+	.dw 0xe540, 0xc89e,	0xe57f, 0xc89e,		0x21, 0
+	.dw 0xe5c0, 0xc89e,	0xe5ff, 0xc89e,		0x21, 0
+	.dw 0xe640, 0xc89e,	0xe67f, 0xc89e,		0x21, 0
+	.dw 0xe6c0, 0xc89e,	0xe6ff, 0xc89e,		0x21, 0
+	.dw 0xe740, 0xc89e,	0xe77f, 0xc89e,		0x21, 0
+	.dw 0xe7c0, 0xc89e,	0xe7ff, 0xc89e,		0x21, 0
+	.dw 0xe840, 0xc89e,	0xe87f, 0xc89e,		0x21, 0
+	.dw 0xe8c0, 0xc89e,	0xe8ff, 0xc89e,		0x21, 0
+	.dw 0xe940, 0xc89e,	0xe97f, 0xc89e,		0x21, 0
+	.dw 0xe9c0, 0xc89e,	0xe9ff, 0xc89e,		0x21, 0
+	.dw 0xea40, 0xc89e,	0xea7f, 0xc89e,		0x21, 0
+	.dw 0xeac0, 0xc89e,	0xeaff, 0xc89e,		0x21, 0
+	.dw 0xeb40, 0xc89e,	0xeb7f, 0xc89e,		0x21, 0
+	.dw 0xebc0, 0xc89e,	0xebff, 0xc89e,		0x21, 0
+	.dw 0xec40, 0xc89e,	0xec7f, 0xc89e,		0x21, 0
+	.dw 0xecc0, 0xc89e,	0xecff, 0xc89e,		0x21, 0
+	.dw 0xed40, 0xc89e,	0xed7f, 0xc89e,		0x21, 0
+	.dw 0xedc0, 0xc89e,	0xedff, 0xc89e,		0x21, 0
+	.dw 0xee40, 0xc89e,	0xee7f, 0xc89e,		0x21, 0
+	.dw 0xeec0, 0xc89e,	0xeeff, 0xc89e,		0x21, 0
+	.dw 0xef40, 0xc89e,	0xef7f, 0xc89e,		0x21, 0
+	.dw 0xefc0, 0xc89e,	0xefff, 0xc89e,		0x21, 0
+	.dw 0xf040, 0xc89e,	0xf07f, 0xc89e,		0x21, 0
+	.dw 0xf0c0, 0xc89e,	0xf0ff, 0xc89e,		0x21, 0
+	.dw 0xf140, 0xc89e,	0xf17f, 0xc89e,		0x21, 0
+	.dw 0xf1c0, 0xc89e,	0xf1ff, 0xc89e,		0x21, 0
+	.dw 0xf240, 0xc89e,	0xf27f, 0xc89e,		0x21, 0
+	.dw 0xf2c0, 0xc89e,	0xf2ff, 0xc89e,		0x21, 0
+	.dw 0xf340, 0xc89e,	0xf37f, 0xc89e,		0x21, 0
+	.dw 0xf3c0, 0xc89e,	0xf3ff, 0xc89e,		0x21, 0
+	.dw 0xf440, 0xc89e,	0xf47f, 0xc89e,		0x21, 0
+	.dw 0xf4c0, 0xc89e,	0xf4ff, 0xc89e,		0x21, 0
+	.dw 0xf540, 0xc89e,	0xf57f, 0xc89e,		0x21, 0
+	.dw 0xf5c0, 0xc89e,	0xf5ff, 0xc89e,		0x21, 0
+	.dw 0xf640, 0xc89e,	0xf67f, 0xc89e,		0x21, 0
+	.dw 0xf6c0, 0xc89e,	0xf6ff, 0xc89e,		0x21, 0
+	.dw 0xf740, 0xc89e,	0xf77f, 0xc89e,		0x21, 0
+	.dw 0xf7c0, 0xc89e,	0xf7ff, 0xc89e,		0x21, 0
+	.dw 0xf840, 0xc89e,	0xf87f, 0xc89e,		0x21, 0
+	.dw 0xf8c0, 0xc89e,	0xf8ff, 0xc89e,		0x21, 0
+	.dw 0xf940, 0xc89e,	0xf97f, 0xc89e,		0x21, 0
+	.dw 0xf9c0, 0xc89e,	0xffff, 0xc89e,		0x21, 0
+	.dw 0x0040, 0xc89f,	0x007f, 0xc89f,		0x21, 0
+	.dw 0x00c0, 0xc89f,	0x00ff, 0xc89f,		0x21, 0
+	.dw 0x0140, 0xc89f,	0x017f, 0xc89f,		0x21, 0
+	.dw 0x01c0, 0xc89f,	0x01ff, 0xc89f,		0x21, 0
+	.dw 0x0240, 0xc89f,	0x027f, 0xc89f,		0x21, 0
+	.dw 0x02c0, 0xc89f,	0x02ff, 0xc89f,		0x21, 0
+	.dw 0x0340, 0xc89f,	0x037f, 0xc89f,		0x21, 0
+	.dw 0x03c0, 0xc89f,	0x03ff, 0xc89f,		0x21, 0
+	.dw 0x0440, 0xc89f,	0x047f, 0xc89f,		0x21, 0
+	.dw 0x04c0, 0xc89f,	0x04ff, 0xc89f,		0x21, 0
+	.dw 0x0540, 0xc89f,	0x057f, 0xc89f,		0x21, 0
+	.dw 0x05c0, 0xc89f,	0x05ff, 0xc89f,		0x21, 0
+	.dw 0x0640, 0xc89f,	0x067f, 0xc89f,		0x21, 0
+	.dw 0x06c0, 0xc89f,	0x06ff, 0xc89f,		0x21, 0
+	.dw 0x0740, 0xc89f,	0x077f, 0xc89f,		0x21, 0
+	.dw 0x07c0, 0xc89f,	0x07ff, 0xc89f,		0x21, 0
+	.dw 0x0840, 0xc89f,	0x087f, 0xc89f,		0x21, 0
+	.dw 0x08c0, 0xc89f,	0x08ff, 0xc89f,		0x21, 0
+	.dw 0x0940, 0xc89f,	0x097f, 0xc89f,		0x21, 0
+	.dw 0x09c0, 0xc89f,	0x09ff, 0xc89f,		0x21, 0
+	.dw 0x0a40, 0xc89f,	0x0a7f, 0xc89f,		0x21, 0
+	.dw 0x0ac0, 0xc89f,	0x0aff, 0xc89f,		0x21, 0
+	.dw 0x0b40, 0xc89f,	0x0b7f, 0xc89f,		0x21, 0
+	.dw 0x0bc0, 0xc89f,	0x0bff, 0xc89f,		0x21, 0
+	.dw 0x0c40, 0xc89f,	0x0c7f, 0xc89f,		0x21, 0
+	.dw 0x0cc0, 0xc89f,	0x0cff, 0xc89f,		0x21, 0
+	.dw 0x0d40, 0xc89f,	0x0d7f, 0xc89f,		0x21, 0
+	.dw 0x0dc0, 0xc89f,	0x0dff, 0xc89f,		0x21, 0
+	.dw 0x0e40, 0xc89f,	0x0e7f, 0xc89f,		0x21, 0
+	.dw 0x0ec0, 0xc89f,	0x0eff, 0xc89f,		0x21, 0
+	.dw 0x0f40, 0xc89f,	0x0f7f, 0xc89f,		0x21, 0
+	.dw 0x0fc0, 0xc89f,	0x0fff, 0xc89f,		0x21, 0
+	.dw 0x1040, 0xc89f,	0x107f, 0xc89f,		0x21, 0
+	.dw 0x10c0, 0xc89f,	0x10ff, 0xc89f,		0x21, 0
+	.dw 0x1140, 0xc89f,	0x117f, 0xc89f,		0x21, 0
+	.dw 0x11c0, 0xc89f,	0x11ff, 0xc89f,		0x21, 0
+	.dw 0x1240, 0xc89f,	0x127f, 0xc89f,		0x21, 0
+	.dw 0x12c0, 0xc89f,	0x12ff, 0xc89f,		0x21, 0
+	.dw 0x1340, 0xc89f,	0x137f, 0xc89f,		0x21, 0
+	.dw 0x13c0, 0xc89f,	0x13ff, 0xc89f,		0x21, 0
+	.dw 0x1440, 0xc89f,	0x147f, 0xc89f,		0x21, 0
+	.dw 0x14c0, 0xc89f,	0x14ff, 0xc89f,		0x21, 0
+	.dw 0x1540, 0xc89f,	0x157f, 0xc89f,		0x21, 0
+	.dw 0x15c0, 0xc89f,	0x15ff, 0xc89f,		0x21, 0
+	.dw 0x1640, 0xc89f,	0x167f, 0xc89f,		0x21, 0
+	.dw 0x16c0, 0xc89f,	0x16ff, 0xc89f,		0x21, 0
+	.dw 0x1740, 0xc89f,	0x177f, 0xc89f,		0x21, 0
+	.dw 0x17c0, 0xc89f,	0x17ff, 0xc89f,		0x21, 0
+	.dw 0x1840, 0xc89f,	0x187f, 0xc89f,		0x21, 0
+	.dw 0x18c0, 0xc89f,	0x18ff, 0xc89f,		0x21, 0
+	.dw 0x1940, 0xc89f,	0x197f, 0xc89f,		0x21, 0
+	.dw 0x19c0, 0xc89f,	0x1fff, 0xc89f,		0x21, 0
+	.dw 0x2040, 0xc89f,	0x207f, 0xc89f,		0x21, 0
+	.dw 0x20c0, 0xc89f,	0x20ff, 0xc89f,		0x21, 0
+	.dw 0x2140, 0xc89f,	0x217f, 0xc89f,		0x21, 0
+	.dw 0x21c0, 0xc89f,	0x21ff, 0xc89f,		0x21, 0
+	.dw 0x2240, 0xc89f,	0x227f, 0xc89f,		0x21, 0
+	.dw 0x22c0, 0xc89f,	0x22ff, 0xc89f,		0x21, 0
+	.dw 0x2340, 0xc89f,	0x237f, 0xc89f,		0x21, 0
+	.dw 0x23c0, 0xc89f,	0x23ff, 0xc89f,		0x21, 0
+	.dw 0x2440, 0xc89f,	0x247f, 0xc89f,		0x21, 0
+	.dw 0x24c0, 0xc89f,	0x24ff, 0xc89f,		0x21, 0
+	.dw 0x2540, 0xc89f,	0x257f, 0xc89f,		0x21, 0
+	.dw 0x25c0, 0xc89f,	0x25ff, 0xc89f,		0x21, 0
+	.dw 0x2640, 0xc89f,	0x267f, 0xc89f,		0x21, 0
+	.dw 0x26c0, 0xc89f,	0x26ff, 0xc89f,		0x21, 0
+	.dw 0x2740, 0xc89f,	0x277f, 0xc89f,		0x21, 0
+	.dw 0x27c0, 0xc89f,	0x27ff, 0xc89f,		0x21, 0
+	.dw 0x2840, 0xc89f,	0x287f, 0xc89f,		0x21, 0
+	.dw 0x28c0, 0xc89f,	0x28ff, 0xc89f,		0x21, 0
+	.dw 0x2940, 0xc89f,	0x297f, 0xc89f,		0x21, 0
+	.dw 0x29c0, 0xc89f,	0x29ff, 0xc89f,		0x21, 0
+	.dw 0x2a40, 0xc89f,	0x2a7f, 0xc89f,		0x21, 0
+	.dw 0x2ac0, 0xc89f,	0x2aff, 0xc89f,		0x21, 0
+	.dw 0x2b40, 0xc89f,	0x2b7f, 0xc89f,		0x21, 0
+	.dw 0x2bc0, 0xc89f,	0x2bff, 0xc89f,		0x21, 0
+	.dw 0x2c40, 0xc89f,	0x2c7f, 0xc89f,		0x21, 0
+	.dw 0x2cc0, 0xc89f,	0x2cff, 0xc89f,		0x21, 0
+	.dw 0x2d40, 0xc89f,	0x2d7f, 0xc89f,		0x21, 0
+	.dw 0x2dc0, 0xc89f,	0x2dff, 0xc89f,		0x21, 0
+	.dw 0x2e40, 0xc89f,	0x2e7f, 0xc89f,		0x21, 0
+	.dw 0x2ec0, 0xc89f,	0x2eff, 0xc89f,		0x21, 0
+	.dw 0x2f40, 0xc89f,	0x2f7f, 0xc89f,		0x21, 0
+	.dw 0x2fc0, 0xc89f,	0x2fff, 0xc89f,		0x21, 0
+	.dw 0x3040, 0xc89f,	0x307f, 0xc89f,		0x21, 0
+	.dw 0x30c0, 0xc89f,	0x30ff, 0xc89f,		0x21, 0
+	.dw 0x3140, 0xc89f,	0x317f, 0xc89f,		0x21, 0
+	.dw 0x31c0, 0xc89f,	0x31ff, 0xc89f,		0x21, 0
+	.dw 0x3240, 0xc89f,	0x327f, 0xc89f,		0x21, 0
+	.dw 0x32c0, 0xc89f,	0x32ff, 0xc89f,		0x21, 0
+	.dw 0x3340, 0xc89f,	0x337f, 0xc89f,		0x21, 0
+	.dw 0x33c0, 0xc89f,	0x33ff, 0xc89f,		0x21, 0
+	.dw 0x3440, 0xc89f,	0x347f, 0xc89f,		0x21, 0
+	.dw 0x34c0, 0xc89f,	0x34ff, 0xc89f,		0x21, 0
+	.dw 0x3540, 0xc89f,	0x357f, 0xc89f,		0x21, 0
+	.dw 0x35c0, 0xc89f,	0x35ff, 0xc89f,		0x21, 0
+	.dw 0x3640, 0xc89f,	0x367f, 0xc89f,		0x21, 0
+	.dw 0x36c0, 0xc89f,	0x36ff, 0xc89f,		0x21, 0
+	.dw 0x3740, 0xc89f,	0x377f, 0xc89f,		0x21, 0
+	.dw 0x37c0, 0xc89f,	0x37ff, 0xc89f,		0x21, 0
+	.dw 0x3840, 0xc89f,	0x387f, 0xc89f,		0x21, 0
+	.dw 0x38c0, 0xc89f,	0x38ff, 0xc89f,		0x21, 0
+	.dw 0x3940, 0xc89f,	0x397f, 0xc89f,		0x21, 0
+	.dw 0x39c0, 0xc89f,	0x1fff, 0xc8c0,		0x21, 0
+	.dw 0x3a00, 0xc8c0,	0x5fff, 0xc8c0,		0x21, 0
+	.dw 0x7a00, 0xc8c0,	0x9fff, 0xc8c0,		0x21, 0
+	.dw 0xba00, 0xc8c0,	0xdfff, 0xc8c0,		0x21, 0
+	.dw 0xfa00, 0xc8c0,	0x1fff, 0xc8c1,		0x21, 0
+	.dw 0x3a00, 0xc8c1,	0x5fff, 0xc8c1,		0x21, 0
+	.dw 0x7a00, 0xc8c1,	0x9fff, 0xc8c1,		0x21, 0
+	.dw 0xba00, 0xc8c1,	0xdfff, 0xc8c1,		0x21, 0
+	.dw 0xfa00, 0xc8c1,	0x1fff, 0xc8c2,		0x21, 0
+	.dw 0x3a00, 0xc8c2,	0x5fff, 0xc8c2,		0x21, 0
+	.dw 0x7a00, 0xc8c2,	0x9fff, 0xc8c2,		0x21, 0
+	.dw 0xba00, 0xc8c2,	0xdfff, 0xc8c2,		0x21, 0
+	.dw 0xfa00, 0xc8c2,	0x1fff, 0xc8c3,		0x21, 0
+	.dw 0x3a00, 0xc8c3,	0xffff, 0xc8c3,		0x21, 0
+	.dw 0x1a00, 0xc8c4,	0x1fff, 0xc8c4,		0x21, 0
+	.dw 0x3a00, 0xc8c4,	0x3fff, 0xc8c4,		0x21, 0
+	.dw 0x5a00, 0xc8c4,	0x5fff, 0xc8c4,		0x21, 0
+	.dw 0x7a00, 0xc8c4,	0x7fff, 0xc8c4,		0x21, 0
+	.dw 0x9a00, 0xc8c4,	0x9fff, 0xc8c4,		0x21, 0
+	.dw 0xba00, 0xc8c4,	0xbfff, 0xc8c4,		0x21, 0
+	.dw 0xda00, 0xc8c4,	0xdfff, 0xc8c4,		0x21, 0
+	.dw 0xfa00, 0xc8c4,	0xffff, 0xc8c4,		0x21, 0
+	.dw 0x1a00, 0xc8c5,	0x1fff, 0xc8c5,		0x21, 0
+	.dw 0x3a00, 0xc8c5,	0x3fff, 0xc8c5,		0x21, 0
+	.dw 0x5a00, 0xc8c5,	0x5fff, 0xc8c5,		0x21, 0
+	.dw 0x7a00, 0xc8c5,	0x7fff, 0xc8c5,		0x21, 0
+	.dw 0x9a00, 0xc8c5,	0x9fff, 0xc8c5,		0x21, 0
+	.dw 0xba00, 0xc8c5,	0xbfff, 0xc8c5,		0x21, 0
+	.dw 0xda00, 0xc8c5,	0xdfff, 0xc8c5,		0x21, 0
+	.dw 0xfa00, 0xc8c5,	0xffff, 0xc8c5,		0x21, 0
+	.dw 0x1a00, 0xc8c6,	0x1fff, 0xc8c6,		0x21, 0
+	.dw 0x3a00, 0xc8c6,	0x3fff, 0xc8c6,		0x21, 0
+	.dw 0x5a00, 0xc8c6,	0x5fff, 0xc8c6,		0x21, 0
+	.dw 0x7a00, 0xc8c6,	0x7fff, 0xc8c6,		0x21, 0
+	.dw 0x9a00, 0xc8c6,	0x9fff, 0xc8c6,		0x21, 0
+	.dw 0xba00, 0xc8c6,	0xbfff, 0xc8c6,		0x21, 0
+	.dw 0xda00, 0xc8c6,	0xdfff, 0xc8c6,		0x21, 0
+	.dw 0xfa00, 0xc8c6,	0xffff, 0xc8c6,		0x21, 0
+	.dw 0x1a00, 0xc8c7,	0x1fff, 0xc8c7,		0x21, 0
+	.dw 0x3a00, 0xc8c7,	0x1fff, 0xc8d0,		0x21, 0
+	.dw 0x3a00, 0xc8d0,	0x5fff, 0xc8d0,		0x21, 0
+	.dw 0x7a00, 0xc8d0,	0x9fff, 0xc8d0,		0x21, 0
+	.dw 0xba00, 0xc8d0,	0xdfff, 0xc8d0,		0x21, 0
+	.dw 0xfa00, 0xc8d0,	0x1fff, 0xc8d1,		0x21, 0
+	.dw 0x3a00, 0xc8d1,	0x5fff, 0xc8d1,		0x21, 0
+	.dw 0x7a00, 0xc8d1,	0x9fff, 0xc8d1,		0x21, 0
+	.dw 0xba00, 0xc8d1,	0xdfff, 0xc8d1,		0x21, 0
+	.dw 0xfa00, 0xc8d1,	0x1fff, 0xc8d2,		0x21, 0
+	.dw 0x3a00, 0xc8d2,	0x5fff, 0xc8d2,		0x21, 0
+	.dw 0x7a00, 0xc8d2,	0x9fff, 0xc8d2,		0x21, 0
+	.dw 0xba00, 0xc8d2,	0xdfff, 0xc8d2,		0x21, 0
+	.dw 0xfa00, 0xc8d2,	0xffff, 0xc8d3,		0x21, 0
+	.dw 0x1a00, 0xc8d4,	0x1fff, 0xc8d4,		0x21, 0
+	.dw 0x3a00, 0xc8d4,	0x3fff, 0xc8d4,		0x21, 0
+	.dw 0x5a00, 0xc8d4,	0x5fff, 0xc8d4,		0x21, 0
+	.dw 0x7a00, 0xc8d4,	0x7fff, 0xc8d4,		0x21, 0
+	.dw 0x9a00, 0xc8d4,	0x9fff, 0xc8d4,		0x21, 0
+	.dw 0xba00, 0xc8d4,	0xbfff, 0xc8d4,		0x21, 0
+	.dw 0xda00, 0xc8d4,	0xdfff, 0xc8d4,		0x21, 0
+	.dw 0xfa00, 0xc8d4,	0xffff, 0xc8d4,		0x21, 0
+	.dw 0x1a00, 0xc8d5,	0x1fff, 0xc8d5,		0x21, 0
+	.dw 0x3a00, 0xc8d5,	0x3fff, 0xc8d5,		0x21, 0
+	.dw 0x5a00, 0xc8d5,	0x5fff, 0xc8d5,		0x21, 0
+	.dw 0x7a00, 0xc8d5,	0x7fff, 0xc8d5,		0x21, 0
+	.dw 0x9a00, 0xc8d5,	0x9fff, 0xc8d5,		0x21, 0
+	.dw 0xba00, 0xc8d5,	0xbfff, 0xc8d5,		0x21, 0
+	.dw 0xda00, 0xc8d5,	0xdfff, 0xc8d5,		0x21, 0
+	.dw 0xfa00, 0xc8d5,	0xffff, 0xc8d5,		0x21, 0
+	.dw 0x1a00, 0xc8d6,	0x1fff, 0xc8d6,		0x21, 0
+	.dw 0x3a00, 0xc8d6,	0x3fff, 0xc8d6,		0x21, 0
+	.dw 0x5a00, 0xc8d6,	0x5fff, 0xc8d6,		0x21, 0
+	.dw 0x7a00, 0xc8d6,	0x7fff, 0xc8d6,		0x21, 0
+	.dw 0x9a00, 0xc8d6,	0x9fff, 0xc8d6,		0x21, 0
+	.dw 0xba00, 0xc8d6,	0xbfff, 0xc8d6,		0x21, 0
+	.dw 0xda00, 0xc8d6,	0xdfff, 0xc8d6,		0x21, 0
+	.dw 0xfa00, 0xc8d6,	0xffff, 0xc8d6,		0x21, 0
+	.dw 0x1a00, 0xc8d7,	0x1fff, 0xc8d7,		0x21, 0
+	.dw 0x3a00, 0xc8d7,	0xffff, 0xc8ff,		0x21, 0
+	.dw 0x1a00, 0xc900,	0x1fff, 0xc900,		0x21, 0
+	.dw 0x3a00, 0xc900,	0x3fff, 0xc900,		0x21, 0
+	.dw 0x5a00, 0xc900,	0x5fff, 0xc900,		0x21, 0
+	.dw 0x7a00, 0xc900,	0x7fff, 0xc900,		0x21, 0
+	.dw 0x9a00, 0xc900,	0x9fff, 0xc900,		0x21, 0
+	.dw 0xba00, 0xc900,	0xbfff, 0xc900,		0x21, 0
+	.dw 0xda00, 0xc900,	0xdfff, 0xc900,		0x21, 0
+	.dw 0xfa00, 0xc900,	0xffff, 0xc900,		0x21, 0
+	.dw 0x1a00, 0xc901,	0x1fff, 0xc901,		0x21, 0
+	.dw 0x3a00, 0xc901,	0x3fff, 0xc901,		0x21, 0
+	.dw 0x5a00, 0xc901,	0x5fff, 0xc901,		0x21, 0
+	.dw 0x7a00, 0xc901,	0x7fff, 0xc901,		0x21, 0
+	.dw 0x9a00, 0xc901,	0x9fff, 0xc901,		0x21, 0
+	.dw 0xba00, 0xc901,	0xbfff, 0xc901,		0x21, 0
+	.dw 0xda00, 0xc901,	0xdfff, 0xc901,		0x21, 0
+	.dw 0xfa00, 0xc901,	0xffff, 0xc901,		0x21, 0
+	.dw 0x1a00, 0xc902,	0x1fff, 0xc902,		0x21, 0
+	.dw 0x3a00, 0xc902,	0x3fff, 0xc902,		0x21, 0
+	.dw 0x5a00, 0xc902,	0x5fff, 0xc902,		0x21, 0
+	.dw 0x7a00, 0xc902,	0x7fff, 0xc902,		0x21, 0
+	.dw 0x9a00, 0xc902,	0x9fff, 0xc902,		0x21, 0
+	.dw 0xba00, 0xc902,	0xbfff, 0xc902,		0x21, 0
+	.dw 0xda00, 0xc902,	0xdfff, 0xc902,		0x21, 0
+	.dw 0xfa00, 0xc902,	0xffff, 0xc902,		0x21, 0
+	.dw 0x1a00, 0xc903,	0x1fff, 0xc903,		0x21, 0
+	.dw 0x3a00, 0xc903,	0xffff, 0xc903,		0x21, 0
+	.dw 0x1a00, 0xc904,	0x1fff, 0xc904,		0x21, 0
+	.dw 0x3a00, 0xc904,	0x3fff, 0xc904,		0x21, 0
+	.dw 0x5a00, 0xc904,	0x5fff, 0xc904,		0x21, 0
+	.dw 0x7a00, 0xc904,	0x7fff, 0xc904,		0x21, 0
+	.dw 0x9a00, 0xc904,	0x9fff, 0xc904,		0x21, 0
+	.dw 0xba00, 0xc904,	0xbfff, 0xc904,		0x21, 0
+	.dw 0xda00, 0xc904,	0xdfff, 0xc904,		0x21, 0
+	.dw 0xfa00, 0xc904,	0xffff, 0xc904,		0x21, 0
+	.dw 0x1a00, 0xc905,	0x1fff, 0xc905,		0x21, 0
+	.dw 0x3a00, 0xc905,	0x3fff, 0xc905,		0x21, 0
+	.dw 0x5a00, 0xc905,	0x5fff, 0xc905,		0x21, 0
+	.dw 0x7a00, 0xc905,	0x7fff, 0xc905,		0x21, 0
+	.dw 0x9a00, 0xc905,	0x9fff, 0xc905,		0x21, 0
+	.dw 0xba00, 0xc905,	0xbfff, 0xc905,		0x21, 0
+	.dw 0xda00, 0xc905,	0xdfff, 0xc905,		0x21, 0
+	.dw 0xfa00, 0xc905,	0xffff, 0xc905,		0x21, 0
+	.dw 0x1a00, 0xc906,	0x1fff, 0xc906,		0x21, 0
+	.dw 0x3a00, 0xc906,	0x3fff, 0xc906,		0x21, 0
+	.dw 0x5a00, 0xc906,	0x5fff, 0xc906,		0x21, 0
+	.dw 0x7a00, 0xc906,	0x7fff, 0xc906,		0x21, 0
+	.dw 0x9a00, 0xc906,	0x9fff, 0xc906,		0x21, 0
+	.dw 0xba00, 0xc906,	0xbfff, 0xc906,		0x21, 0
+	.dw 0xda00, 0xc906,	0xdfff, 0xc906,		0x21, 0
+	.dw 0xfa00, 0xc906,	0xffff, 0xc906,		0x21, 0
+	.dw 0x1a00, 0xc907,	0x1fff, 0xc907,		0x21, 0
+	.dw 0x3a00, 0xc907,	0x1fff, 0xc908,		0x21, 0
+	.dw 0x2040, 0xc908,	0x207f, 0xc908,		0x21, 0
+	.dw 0x20c0, 0xc908,	0x20ff, 0xc908,		0x21, 0
+	.dw 0x2140, 0xc908,	0x217f, 0xc908,		0x21, 0
+	.dw 0x21c0, 0xc908,	0x21ff, 0xc908,		0x21, 0
+	.dw 0x2240, 0xc908,	0x227f, 0xc908,		0x21, 0
+	.dw 0x22c0, 0xc908,	0x22ff, 0xc908,		0x21, 0
+	.dw 0x2340, 0xc908,	0x237f, 0xc908,		0x21, 0
+	.dw 0x23c0, 0xc908,	0x23ff, 0xc908,		0x21, 0
+	.dw 0x2440, 0xc908,	0x247f, 0xc908,		0x21, 0
+	.dw 0x24c0, 0xc908,	0x24ff, 0xc908,		0x21, 0
+	.dw 0x2540, 0xc908,	0x257f, 0xc908,		0x21, 0
+	.dw 0x25c0, 0xc908,	0x25ff, 0xc908,		0x21, 0
+	.dw 0x2640, 0xc908,	0x267f, 0xc908,		0x21, 0
+	.dw 0x26c0, 0xc908,	0x26ff, 0xc908,		0x21, 0
+	.dw 0x2740, 0xc908,	0x277f, 0xc908,		0x21, 0
+	.dw 0x27c0, 0xc908,	0x27ff, 0xc908,		0x21, 0
+	.dw 0x2840, 0xc908,	0x287f, 0xc908,		0x21, 0
+	.dw 0x28c0, 0xc908,	0x28ff, 0xc908,		0x21, 0
+	.dw 0x2940, 0xc908,	0x297f, 0xc908,		0x21, 0
+	.dw 0x29c0, 0xc908,	0x29ff, 0xc908,		0x21, 0
+	.dw 0x2a40, 0xc908,	0x2a7f, 0xc908,		0x21, 0
+	.dw 0x2ac0, 0xc908,	0x2aff, 0xc908,		0x21, 0
+	.dw 0x2b40, 0xc908,	0x2b7f, 0xc908,		0x21, 0
+	.dw 0x2bc0, 0xc908,	0x2bff, 0xc908,		0x21, 0
+	.dw 0x2c40, 0xc908,	0x2c7f, 0xc908,		0x21, 0
+	.dw 0x2cc0, 0xc908,	0x2cff, 0xc908,		0x21, 0
+	.dw 0x2d40, 0xc908,	0x2d7f, 0xc908,		0x21, 0
+	.dw 0x2dc0, 0xc908,	0x2dff, 0xc908,		0x21, 0
+	.dw 0x2e40, 0xc908,	0x2e7f, 0xc908,		0x21, 0
+	.dw 0x2ec0, 0xc908,	0x2eff, 0xc908,		0x21, 0
+	.dw 0x2f40, 0xc908,	0x2f7f, 0xc908,		0x21, 0
+	.dw 0x2fc0, 0xc908,	0x2fff, 0xc908,		0x21, 0
+	.dw 0x3040, 0xc908,	0x307f, 0xc908,		0x21, 0
+	.dw 0x30c0, 0xc908,	0x30ff, 0xc908,		0x21, 0
+	.dw 0x3140, 0xc908,	0x317f, 0xc908,		0x21, 0
+	.dw 0x31c0, 0xc908,	0x31ff, 0xc908,		0x21, 0
+	.dw 0x3240, 0xc908,	0x327f, 0xc908,		0x21, 0
+	.dw 0x32c0, 0xc908,	0x32ff, 0xc908,		0x21, 0
+	.dw 0x3340, 0xc908,	0x337f, 0xc908,		0x21, 0
+	.dw 0x33c0, 0xc908,	0x33ff, 0xc908,		0x21, 0
+	.dw 0x3440, 0xc908,	0x347f, 0xc908,		0x21, 0
+	.dw 0x34c0, 0xc908,	0x34ff, 0xc908,		0x21, 0
+	.dw 0x3540, 0xc908,	0x357f, 0xc908,		0x21, 0
+	.dw 0x35c0, 0xc908,	0x35ff, 0xc908,		0x21, 0
+	.dw 0x3640, 0xc908,	0x367f, 0xc908,		0x21, 0
+	.dw 0x36c0, 0xc908,	0x36ff, 0xc908,		0x21, 0
+	.dw 0x3740, 0xc908,	0x377f, 0xc908,		0x21, 0
+	.dw 0x37c0, 0xc908,	0x37ff, 0xc908,		0x21, 0
+	.dw 0x3840, 0xc908,	0x387f, 0xc908,		0x21, 0
+	.dw 0x38c0, 0xc908,	0x38ff, 0xc908,		0x21, 0
+	.dw 0x3940, 0xc908,	0x397f, 0xc908,		0x21, 0
+	.dw 0x39c0, 0xc908,	0x5fff, 0xc908,		0x21, 0
+	.dw 0x6040, 0xc908,	0x607f, 0xc908,		0x21, 0
+	.dw 0x60c0, 0xc908,	0x60ff, 0xc908,		0x21, 0
+	.dw 0x6140, 0xc908,	0x617f, 0xc908,		0x21, 0
+	.dw 0x61c0, 0xc908,	0x61ff, 0xc908,		0x21, 0
+	.dw 0x6240, 0xc908,	0x627f, 0xc908,		0x21, 0
+	.dw 0x62c0, 0xc908,	0x62ff, 0xc908,		0x21, 0
+	.dw 0x6340, 0xc908,	0x637f, 0xc908,		0x21, 0
+	.dw 0x63c0, 0xc908,	0x63ff, 0xc908,		0x21, 0
+	.dw 0x6440, 0xc908,	0x647f, 0xc908,		0x21, 0
+	.dw 0x64c0, 0xc908,	0x64ff, 0xc908,		0x21, 0
+	.dw 0x6540, 0xc908,	0x657f, 0xc908,		0x21, 0
+	.dw 0x65c0, 0xc908,	0x65ff, 0xc908,		0x21, 0
+	.dw 0x6640, 0xc908,	0x667f, 0xc908,		0x21, 0
+	.dw 0x66c0, 0xc908,	0x66ff, 0xc908,		0x21, 0
+	.dw 0x6740, 0xc908,	0x677f, 0xc908,		0x21, 0
+	.dw 0x67c0, 0xc908,	0x67ff, 0xc908,		0x21, 0
+	.dw 0x6840, 0xc908,	0x687f, 0xc908,		0x21, 0
+	.dw 0x68c0, 0xc908,	0x68ff, 0xc908,		0x21, 0
+	.dw 0x6940, 0xc908,	0x697f, 0xc908,		0x21, 0
+	.dw 0x69c0, 0xc908,	0x69ff, 0xc908,		0x21, 0
+	.dw 0x6a40, 0xc908,	0x6a7f, 0xc908,		0x21, 0
+	.dw 0x6ac0, 0xc908,	0x6aff, 0xc908,		0x21, 0
+	.dw 0x6b40, 0xc908,	0x6b7f, 0xc908,		0x21, 0
+	.dw 0x6bc0, 0xc908,	0x6bff, 0xc908,		0x21, 0
+	.dw 0x6c40, 0xc908,	0x6c7f, 0xc908,		0x21, 0
+	.dw 0x6cc0, 0xc908,	0x6cff, 0xc908,		0x21, 0
+	.dw 0x6d40, 0xc908,	0x6d7f, 0xc908,		0x21, 0
+	.dw 0x6dc0, 0xc908,	0x6dff, 0xc908,		0x21, 0
+	.dw 0x6e40, 0xc908,	0x6e7f, 0xc908,		0x21, 0
+	.dw 0x6ec0, 0xc908,	0x6eff, 0xc908,		0x21, 0
+	.dw 0x6f40, 0xc908,	0x6f7f, 0xc908,		0x21, 0
+	.dw 0x6fc0, 0xc908,	0x6fff, 0xc908,		0x21, 0
+	.dw 0x7040, 0xc908,	0x707f, 0xc908,		0x21, 0
+	.dw 0x70c0, 0xc908,	0x70ff, 0xc908,		0x21, 0
+	.dw 0x7140, 0xc908,	0x717f, 0xc908,		0x21, 0
+	.dw 0x71c0, 0xc908,	0x71ff, 0xc908,		0x21, 0
+	.dw 0x7240, 0xc908,	0x727f, 0xc908,		0x21, 0
+	.dw 0x72c0, 0xc908,	0x72ff, 0xc908,		0x21, 0
+	.dw 0x7340, 0xc908,	0x737f, 0xc908,		0x21, 0
+	.dw 0x73c0, 0xc908,	0x73ff, 0xc908,		0x21, 0
+	.dw 0x7440, 0xc908,	0x747f, 0xc908,		0x21, 0
+	.dw 0x74c0, 0xc908,	0x74ff, 0xc908,		0x21, 0
+	.dw 0x7540, 0xc908,	0x757f, 0xc908,		0x21, 0
+	.dw 0x75c0, 0xc908,	0x75ff, 0xc908,		0x21, 0
+	.dw 0x7640, 0xc908,	0x767f, 0xc908,		0x21, 0
+	.dw 0x76c0, 0xc908,	0x76ff, 0xc908,		0x21, 0
+	.dw 0x7740, 0xc908,	0x777f, 0xc908,		0x21, 0
+	.dw 0x77c0, 0xc908,	0x77ff, 0xc908,		0x21, 0
+	.dw 0x7840, 0xc908,	0x787f, 0xc908,		0x21, 0
+	.dw 0x78c0, 0xc908,	0x78ff, 0xc908,		0x21, 0
+	.dw 0x7940, 0xc908,	0x797f, 0xc908,		0x21, 0
+	.dw 0x79c0, 0xc908,	0x9fff, 0xc908,		0x21, 0
+	.dw 0xa040, 0xc908,	0xa07f, 0xc908,		0x21, 0
+	.dw 0xa0c0, 0xc908,	0xa0ff, 0xc908,		0x21, 0
+	.dw 0xa140, 0xc908,	0xa17f, 0xc908,		0x21, 0
+	.dw 0xa1c0, 0xc908,	0xa1ff, 0xc908,		0x21, 0
+	.dw 0xa240, 0xc908,	0xa27f, 0xc908,		0x21, 0
+	.dw 0xa2c0, 0xc908,	0xa2ff, 0xc908,		0x21, 0
+	.dw 0xa340, 0xc908,	0xa37f, 0xc908,		0x21, 0
+	.dw 0xa3c0, 0xc908,	0xa3ff, 0xc908,		0x21, 0
+	.dw 0xa440, 0xc908,	0xa47f, 0xc908,		0x21, 0
+	.dw 0xa4c0, 0xc908,	0xa4ff, 0xc908,		0x21, 0
+	.dw 0xa540, 0xc908,	0xa57f, 0xc908,		0x21, 0
+	.dw 0xa5c0, 0xc908,	0xa5ff, 0xc908,		0x21, 0
+	.dw 0xa640, 0xc908,	0xa67f, 0xc908,		0x21, 0
+	.dw 0xa6c0, 0xc908,	0xa6ff, 0xc908,		0x21, 0
+	.dw 0xa740, 0xc908,	0xa77f, 0xc908,		0x21, 0
+	.dw 0xa7c0, 0xc908,	0xa7ff, 0xc908,		0x21, 0
+	.dw 0xa840, 0xc908,	0xa87f, 0xc908,		0x21, 0
+	.dw 0xa8c0, 0xc908,	0xa8ff, 0xc908,		0x21, 0
+	.dw 0xa940, 0xc908,	0xa97f, 0xc908,		0x21, 0
+	.dw 0xa9c0, 0xc908,	0xa9ff, 0xc908,		0x21, 0
+	.dw 0xaa40, 0xc908,	0xaa7f, 0xc908,		0x21, 0
+	.dw 0xaac0, 0xc908,	0xaaff, 0xc908,		0x21, 0
+	.dw 0xab40, 0xc908,	0xab7f, 0xc908,		0x21, 0
+	.dw 0xabc0, 0xc908,	0xabff, 0xc908,		0x21, 0
+	.dw 0xac40, 0xc908,	0xac7f, 0xc908,		0x21, 0
+	.dw 0xacc0, 0xc908,	0xacff, 0xc908,		0x21, 0
+	.dw 0xad40, 0xc908,	0xad7f, 0xc908,		0x21, 0
+	.dw 0xadc0, 0xc908,	0xadff, 0xc908,		0x21, 0
+	.dw 0xae40, 0xc908,	0xae7f, 0xc908,		0x21, 0
+	.dw 0xaec0, 0xc908,	0xaeff, 0xc908,		0x21, 0
+	.dw 0xaf40, 0xc908,	0xaf7f, 0xc908,		0x21, 0
+	.dw 0xafc0, 0xc908,	0xafff, 0xc908,		0x21, 0
+	.dw 0xb040, 0xc908,	0xb07f, 0xc908,		0x21, 0
+	.dw 0xb0c0, 0xc908,	0xb0ff, 0xc908,		0x21, 0
+	.dw 0xb140, 0xc908,	0xb17f, 0xc908,		0x21, 0
+	.dw 0xb1c0, 0xc908,	0xb1ff, 0xc908,		0x21, 0
+	.dw 0xb240, 0xc908,	0xb27f, 0xc908,		0x21, 0
+	.dw 0xb2c0, 0xc908,	0xb2ff, 0xc908,		0x21, 0
+	.dw 0xb340, 0xc908,	0xb37f, 0xc908,		0x21, 0
+	.dw 0xb3c0, 0xc908,	0xb3ff, 0xc908,		0x21, 0
+	.dw 0xb440, 0xc908,	0xb47f, 0xc908,		0x21, 0
+	.dw 0xb4c0, 0xc908,	0xb4ff, 0xc908,		0x21, 0
+	.dw 0xb540, 0xc908,	0xb57f, 0xc908,		0x21, 0
+	.dw 0xb5c0, 0xc908,	0xb5ff, 0xc908,		0x21, 0
+	.dw 0xb640, 0xc908,	0xb67f, 0xc908,		0x21, 0
+	.dw 0xb6c0, 0xc908,	0xb6ff, 0xc908,		0x21, 0
+	.dw 0xb740, 0xc908,	0xb77f, 0xc908,		0x21, 0
+	.dw 0xb7c0, 0xc908,	0xb7ff, 0xc908,		0x21, 0
+	.dw 0xb840, 0xc908,	0xb87f, 0xc908,		0x21, 0
+	.dw 0xb8c0, 0xc908,	0xb8ff, 0xc908,		0x21, 0
+	.dw 0xb940, 0xc908,	0xb97f, 0xc908,		0x21, 0
+	.dw 0xb9c0, 0xc908,	0xdfff, 0xc908,		0x21, 0
+	.dw 0xe040, 0xc908,	0xe07f, 0xc908,		0x21, 0
+	.dw 0xe0c0, 0xc908,	0xe0ff, 0xc908,		0x21, 0
+	.dw 0xe140, 0xc908,	0xe17f, 0xc908,		0x21, 0
+	.dw 0xe1c0, 0xc908,	0xe1ff, 0xc908,		0x21, 0
+	.dw 0xe240, 0xc908,	0xe27f, 0xc908,		0x21, 0
+	.dw 0xe2c0, 0xc908,	0xe2ff, 0xc908,		0x21, 0
+	.dw 0xe340, 0xc908,	0xe37f, 0xc908,		0x21, 0
+	.dw 0xe3c0, 0xc908,	0xe3ff, 0xc908,		0x21, 0
+	.dw 0xe440, 0xc908,	0xe47f, 0xc908,		0x21, 0
+	.dw 0xe4c0, 0xc908,	0xe4ff, 0xc908,		0x21, 0
+	.dw 0xe540, 0xc908,	0xe57f, 0xc908,		0x21, 0
+	.dw 0xe5c0, 0xc908,	0xe5ff, 0xc908,		0x21, 0
+	.dw 0xe640, 0xc908,	0xe67f, 0xc908,		0x21, 0
+	.dw 0xe6c0, 0xc908,	0xe6ff, 0xc908,		0x21, 0
+	.dw 0xe740, 0xc908,	0xe77f, 0xc908,		0x21, 0
+	.dw 0xe7c0, 0xc908,	0xe7ff, 0xc908,		0x21, 0
+	.dw 0xe840, 0xc908,	0xe87f, 0xc908,		0x21, 0
+	.dw 0xe8c0, 0xc908,	0xe8ff, 0xc908,		0x21, 0
+	.dw 0xe940, 0xc908,	0xe97f, 0xc908,		0x21, 0
+	.dw 0xe9c0, 0xc908,	0xe9ff, 0xc908,		0x21, 0
+	.dw 0xea40, 0xc908,	0xea7f, 0xc908,		0x21, 0
+	.dw 0xeac0, 0xc908,	0xeaff, 0xc908,		0x21, 0
+	.dw 0xeb40, 0xc908,	0xeb7f, 0xc908,		0x21, 0
+	.dw 0xebc0, 0xc908,	0xebff, 0xc908,		0x21, 0
+	.dw 0xec40, 0xc908,	0xec7f, 0xc908,		0x21, 0
+	.dw 0xecc0, 0xc908,	0xecff, 0xc908,		0x21, 0
+	.dw 0xed40, 0xc908,	0xed7f, 0xc908,		0x21, 0
+	.dw 0xedc0, 0xc908,	0xedff, 0xc908,		0x21, 0
+	.dw 0xee40, 0xc908,	0xee7f, 0xc908,		0x21, 0
+	.dw 0xeec0, 0xc908,	0xeeff, 0xc908,		0x21, 0
+	.dw 0xef40, 0xc908,	0xef7f, 0xc908,		0x21, 0
+	.dw 0xefc0, 0xc908,	0xefff, 0xc908,		0x21, 0
+	.dw 0xf040, 0xc908,	0xf07f, 0xc908,		0x21, 0
+	.dw 0xf0c0, 0xc908,	0xf0ff, 0xc908,		0x21, 0
+	.dw 0xf140, 0xc908,	0xf17f, 0xc908,		0x21, 0
+	.dw 0xf1c0, 0xc908,	0xf1ff, 0xc908,		0x21, 0
+	.dw 0xf240, 0xc908,	0xf27f, 0xc908,		0x21, 0
+	.dw 0xf2c0, 0xc908,	0xf2ff, 0xc908,		0x21, 0
+	.dw 0xf340, 0xc908,	0xf37f, 0xc908,		0x21, 0
+	.dw 0xf3c0, 0xc908,	0xf3ff, 0xc908,		0x21, 0
+	.dw 0xf440, 0xc908,	0xf47f, 0xc908,		0x21, 0
+	.dw 0xf4c0, 0xc908,	0xf4ff, 0xc908,		0x21, 0
+	.dw 0xf540, 0xc908,	0xf57f, 0xc908,		0x21, 0
+	.dw 0xf5c0, 0xc908,	0xf5ff, 0xc908,		0x21, 0
+	.dw 0xf640, 0xc908,	0xf67f, 0xc908,		0x21, 0
+	.dw 0xf6c0, 0xc908,	0xf6ff, 0xc908,		0x21, 0
+	.dw 0xf740, 0xc908,	0xf77f, 0xc908,		0x21, 0
+	.dw 0xf7c0, 0xc908,	0xf7ff, 0xc908,		0x21, 0
+	.dw 0xf840, 0xc908,	0xf87f, 0xc908,		0x21, 0
+	.dw 0xf8c0, 0xc908,	0xf8ff, 0xc908,		0x21, 0
+	.dw 0xf940, 0xc908,	0xf97f, 0xc908,		0x21, 0
+	.dw 0xf9c0, 0xc908,	0x1fff, 0xc909,		0x21, 0
+	.dw 0x2040, 0xc909,	0x207f, 0xc909,		0x21, 0
+	.dw 0x20c0, 0xc909,	0x20ff, 0xc909,		0x21, 0
+	.dw 0x2140, 0xc909,	0x217f, 0xc909,		0x21, 0
+	.dw 0x21c0, 0xc909,	0x21ff, 0xc909,		0x21, 0
+	.dw 0x2240, 0xc909,	0x227f, 0xc909,		0x21, 0
+	.dw 0x22c0, 0xc909,	0x22ff, 0xc909,		0x21, 0
+	.dw 0x2340, 0xc909,	0x237f, 0xc909,		0x21, 0
+	.dw 0x23c0, 0xc909,	0x23ff, 0xc909,		0x21, 0
+	.dw 0x2440, 0xc909,	0x247f, 0xc909,		0x21, 0
+	.dw 0x24c0, 0xc909,	0x24ff, 0xc909,		0x21, 0
+	.dw 0x2540, 0xc909,	0x257f, 0xc909,		0x21, 0
+	.dw 0x25c0, 0xc909,	0x25ff, 0xc909,		0x21, 0
+	.dw 0x2640, 0xc909,	0x267f, 0xc909,		0x21, 0
+	.dw 0x26c0, 0xc909,	0x26ff, 0xc909,		0x21, 0
+	.dw 0x2740, 0xc909,	0x277f, 0xc909,		0x21, 0
+	.dw 0x27c0, 0xc909,	0x27ff, 0xc909,		0x21, 0
+	.dw 0x2840, 0xc909,	0x287f, 0xc909,		0x21, 0
+	.dw 0x28c0, 0xc909,	0x28ff, 0xc909,		0x21, 0
+	.dw 0x2940, 0xc909,	0x297f, 0xc909,		0x21, 0
+	.dw 0x29c0, 0xc909,	0x29ff, 0xc909,		0x21, 0
+	.dw 0x2a40, 0xc909,	0x2a7f, 0xc909,		0x21, 0
+	.dw 0x2ac0, 0xc909,	0x2aff, 0xc909,		0x21, 0
+	.dw 0x2b40, 0xc909,	0x2b7f, 0xc909,		0x21, 0
+	.dw 0x2bc0, 0xc909,	0x2bff, 0xc909,		0x21, 0
+	.dw 0x2c40, 0xc909,	0x2c7f, 0xc909,		0x21, 0
+	.dw 0x2cc0, 0xc909,	0x2cff, 0xc909,		0x21, 0
+	.dw 0x2d40, 0xc909,	0x2d7f, 0xc909,		0x21, 0
+	.dw 0x2dc0, 0xc909,	0x2dff, 0xc909,		0x21, 0
+	.dw 0x2e40, 0xc909,	0x2e7f, 0xc909,		0x21, 0
+	.dw 0x2ec0, 0xc909,	0x2eff, 0xc909,		0x21, 0
+	.dw 0x2f40, 0xc909,	0x2f7f, 0xc909,		0x21, 0
+	.dw 0x2fc0, 0xc909,	0x2fff, 0xc909,		0x21, 0
+	.dw 0x3040, 0xc909,	0x307f, 0xc909,		0x21, 0
+	.dw 0x30c0, 0xc909,	0x30ff, 0xc909,		0x21, 0
+	.dw 0x3140, 0xc909,	0x317f, 0xc909,		0x21, 0
+	.dw 0x31c0, 0xc909,	0x31ff, 0xc909,		0x21, 0
+	.dw 0x3240, 0xc909,	0x327f, 0xc909,		0x21, 0
+	.dw 0x32c0, 0xc909,	0x32ff, 0xc909,		0x21, 0
+	.dw 0x3340, 0xc909,	0x337f, 0xc909,		0x21, 0
+	.dw 0x33c0, 0xc909,	0x33ff, 0xc909,		0x21, 0
+	.dw 0x3440, 0xc909,	0x347f, 0xc909,		0x21, 0
+	.dw 0x34c0, 0xc909,	0x34ff, 0xc909,		0x21, 0
+	.dw 0x3540, 0xc909,	0x357f, 0xc909,		0x21, 0
+	.dw 0x35c0, 0xc909,	0x35ff, 0xc909,		0x21, 0
+	.dw 0x3640, 0xc909,	0x367f, 0xc909,		0x21, 0
+	.dw 0x36c0, 0xc909,	0x36ff, 0xc909,		0x21, 0
+	.dw 0x3740, 0xc909,	0x377f, 0xc909,		0x21, 0
+	.dw 0x37c0, 0xc909,	0x37ff, 0xc909,		0x21, 0
+	.dw 0x3840, 0xc909,	0x387f, 0xc909,		0x21, 0
+	.dw 0x38c0, 0xc909,	0x38ff, 0xc909,		0x21, 0
+	.dw 0x3940, 0xc909,	0x397f, 0xc909,		0x21, 0
+	.dw 0x39c0, 0xc909,	0x5fff, 0xc909,		0x21, 0
+	.dw 0x6040, 0xc909,	0x607f, 0xc909,		0x21, 0
+	.dw 0x60c0, 0xc909,	0x60ff, 0xc909,		0x21, 0
+	.dw 0x6140, 0xc909,	0x617f, 0xc909,		0x21, 0
+	.dw 0x61c0, 0xc909,	0x61ff, 0xc909,		0x21, 0
+	.dw 0x6240, 0xc909,	0x627f, 0xc909,		0x21, 0
+	.dw 0x62c0, 0xc909,	0x62ff, 0xc909,		0x21, 0
+	.dw 0x6340, 0xc909,	0x637f, 0xc909,		0x21, 0
+	.dw 0x63c0, 0xc909,	0x63ff, 0xc909,		0x21, 0
+	.dw 0x6440, 0xc909,	0x647f, 0xc909,		0x21, 0
+	.dw 0x64c0, 0xc909,	0x64ff, 0xc909,		0x21, 0
+	.dw 0x6540, 0xc909,	0x657f, 0xc909,		0x21, 0
+	.dw 0x65c0, 0xc909,	0x65ff, 0xc909,		0x21, 0
+	.dw 0x6640, 0xc909,	0x667f, 0xc909,		0x21, 0
+	.dw 0x66c0, 0xc909,	0x66ff, 0xc909,		0x21, 0
+	.dw 0x6740, 0xc909,	0x677f, 0xc909,		0x21, 0
+	.dw 0x67c0, 0xc909,	0x67ff, 0xc909,		0x21, 0
+	.dw 0x6840, 0xc909,	0x687f, 0xc909,		0x21, 0
+	.dw 0x68c0, 0xc909,	0x68ff, 0xc909,		0x21, 0
+	.dw 0x6940, 0xc909,	0x697f, 0xc909,		0x21, 0
+	.dw 0x69c0, 0xc909,	0x69ff, 0xc909,		0x21, 0
+	.dw 0x6a40, 0xc909,	0x6a7f, 0xc909,		0x21, 0
+	.dw 0x6ac0, 0xc909,	0x6aff, 0xc909,		0x21, 0
+	.dw 0x6b40, 0xc909,	0x6b7f, 0xc909,		0x21, 0
+	.dw 0x6bc0, 0xc909,	0x6bff, 0xc909,		0x21, 0
+	.dw 0x6c40, 0xc909,	0x6c7f, 0xc909,		0x21, 0
+	.dw 0x6cc0, 0xc909,	0x6cff, 0xc909,		0x21, 0
+	.dw 0x6d40, 0xc909,	0x6d7f, 0xc909,		0x21, 0
+	.dw 0x6dc0, 0xc909,	0x6dff, 0xc909,		0x21, 0
+	.dw 0x6e40, 0xc909,	0x6e7f, 0xc909,		0x21, 0
+	.dw 0x6ec0, 0xc909,	0x6eff, 0xc909,		0x21, 0
+	.dw 0x6f40, 0xc909,	0x6f7f, 0xc909,		0x21, 0
+	.dw 0x6fc0, 0xc909,	0x6fff, 0xc909,		0x21, 0
+	.dw 0x7040, 0xc909,	0x707f, 0xc909,		0x21, 0
+	.dw 0x70c0, 0xc909,	0x70ff, 0xc909,		0x21, 0
+	.dw 0x7140, 0xc909,	0x717f, 0xc909,		0x21, 0
+	.dw 0x71c0, 0xc909,	0x71ff, 0xc909,		0x21, 0
+	.dw 0x7240, 0xc909,	0x727f, 0xc909,		0x21, 0
+	.dw 0x72c0, 0xc909,	0x72ff, 0xc909,		0x21, 0
+	.dw 0x7340, 0xc909,	0x737f, 0xc909,		0x21, 0
+	.dw 0x73c0, 0xc909,	0x73ff, 0xc909,		0x21, 0
+	.dw 0x7440, 0xc909,	0x747f, 0xc909,		0x21, 0
+	.dw 0x74c0, 0xc909,	0x74ff, 0xc909,		0x21, 0
+	.dw 0x7540, 0xc909,	0x757f, 0xc909,		0x21, 0
+	.dw 0x75c0, 0xc909,	0x75ff, 0xc909,		0x21, 0
+	.dw 0x7640, 0xc909,	0x767f, 0xc909,		0x21, 0
+	.dw 0x76c0, 0xc909,	0x76ff, 0xc909,		0x21, 0
+	.dw 0x7740, 0xc909,	0x777f, 0xc909,		0x21, 0
+	.dw 0x77c0, 0xc909,	0x77ff, 0xc909,		0x21, 0
+	.dw 0x7840, 0xc909,	0x787f, 0xc909,		0x21, 0
+	.dw 0x78c0, 0xc909,	0x78ff, 0xc909,		0x21, 0
+	.dw 0x7940, 0xc909,	0x797f, 0xc909,		0x21, 0
+	.dw 0x79c0, 0xc909,	0x9fff, 0xc909,		0x21, 0
+	.dw 0xa040, 0xc909,	0xa07f, 0xc909,		0x21, 0
+	.dw 0xa0c0, 0xc909,	0xa0ff, 0xc909,		0x21, 0
+	.dw 0xa140, 0xc909,	0xa17f, 0xc909,		0x21, 0
+	.dw 0xa1c0, 0xc909,	0xa1ff, 0xc909,		0x21, 0
+	.dw 0xa240, 0xc909,	0xa27f, 0xc909,		0x21, 0
+	.dw 0xa2c0, 0xc909,	0xa2ff, 0xc909,		0x21, 0
+	.dw 0xa340, 0xc909,	0xa37f, 0xc909,		0x21, 0
+	.dw 0xa3c0, 0xc909,	0xa3ff, 0xc909,		0x21, 0
+	.dw 0xa440, 0xc909,	0xa47f, 0xc909,		0x21, 0
+	.dw 0xa4c0, 0xc909,	0xa4ff, 0xc909,		0x21, 0
+	.dw 0xa540, 0xc909,	0xa57f, 0xc909,		0x21, 0
+	.dw 0xa5c0, 0xc909,	0xa5ff, 0xc909,		0x21, 0
+	.dw 0xa640, 0xc909,	0xa67f, 0xc909,		0x21, 0
+	.dw 0xa6c0, 0xc909,	0xa6ff, 0xc909,		0x21, 0
+	.dw 0xa740, 0xc909,	0xa77f, 0xc909,		0x21, 0
+	.dw 0xa7c0, 0xc909,	0xa7ff, 0xc909,		0x21, 0
+	.dw 0xa840, 0xc909,	0xa87f, 0xc909,		0x21, 0
+	.dw 0xa8c0, 0xc909,	0xa8ff, 0xc909,		0x21, 0
+	.dw 0xa940, 0xc909,	0xa97f, 0xc909,		0x21, 0
+	.dw 0xa9c0, 0xc909,	0xa9ff, 0xc909,		0x21, 0
+	.dw 0xaa40, 0xc909,	0xaa7f, 0xc909,		0x21, 0
+	.dw 0xaac0, 0xc909,	0xaaff, 0xc909,		0x21, 0
+	.dw 0xab40, 0xc909,	0xab7f, 0xc909,		0x21, 0
+	.dw 0xabc0, 0xc909,	0xabff, 0xc909,		0x21, 0
+	.dw 0xac40, 0xc909,	0xac7f, 0xc909,		0x21, 0
+	.dw 0xacc0, 0xc909,	0xacff, 0xc909,		0x21, 0
+	.dw 0xad40, 0xc909,	0xad7f, 0xc909,		0x21, 0
+	.dw 0xadc0, 0xc909,	0xadff, 0xc909,		0x21, 0
+	.dw 0xae40, 0xc909,	0xae7f, 0xc909,		0x21, 0
+	.dw 0xaec0, 0xc909,	0xaeff, 0xc909,		0x21, 0
+	.dw 0xaf40, 0xc909,	0xaf7f, 0xc909,		0x21, 0
+	.dw 0xafc0, 0xc909,	0xafff, 0xc909,		0x21, 0
+	.dw 0xb040, 0xc909,	0xb07f, 0xc909,		0x21, 0
+	.dw 0xb0c0, 0xc909,	0xb0ff, 0xc909,		0x21, 0
+	.dw 0xb140, 0xc909,	0xb17f, 0xc909,		0x21, 0
+	.dw 0xb1c0, 0xc909,	0xb1ff, 0xc909,		0x21, 0
+	.dw 0xb240, 0xc909,	0xb27f, 0xc909,		0x21, 0
+	.dw 0xb2c0, 0xc909,	0xb2ff, 0xc909,		0x21, 0
+	.dw 0xb340, 0xc909,	0xb37f, 0xc909,		0x21, 0
+	.dw 0xb3c0, 0xc909,	0xb3ff, 0xc909,		0x21, 0
+	.dw 0xb440, 0xc909,	0xb47f, 0xc909,		0x21, 0
+	.dw 0xb4c0, 0xc909,	0xb4ff, 0xc909,		0x21, 0
+	.dw 0xb540, 0xc909,	0xb57f, 0xc909,		0x21, 0
+	.dw 0xb5c0, 0xc909,	0xb5ff, 0xc909,		0x21, 0
+	.dw 0xb640, 0xc909,	0xb67f, 0xc909,		0x21, 0
+	.dw 0xb6c0, 0xc909,	0xb6ff, 0xc909,		0x21, 0
+	.dw 0xb740, 0xc909,	0xb77f, 0xc909,		0x21, 0
+	.dw 0xb7c0, 0xc909,	0xb7ff, 0xc909,		0x21, 0
+	.dw 0xb840, 0xc909,	0xb87f, 0xc909,		0x21, 0
+	.dw 0xb8c0, 0xc909,	0xb8ff, 0xc909,		0x21, 0
+	.dw 0xb940, 0xc909,	0xb97f, 0xc909,		0x21, 0
+	.dw 0xb9c0, 0xc909,	0xdfff, 0xc909,		0x21, 0
+	.dw 0xe040, 0xc909,	0xe07f, 0xc909,		0x21, 0
+	.dw 0xe0c0, 0xc909,	0xe0ff, 0xc909,		0x21, 0
+	.dw 0xe140, 0xc909,	0xe17f, 0xc909,		0x21, 0
+	.dw 0xe1c0, 0xc909,	0xe1ff, 0xc909,		0x21, 0
+	.dw 0xe240, 0xc909,	0xe27f, 0xc909,		0x21, 0
+	.dw 0xe2c0, 0xc909,	0xe2ff, 0xc909,		0x21, 0
+	.dw 0xe340, 0xc909,	0xe37f, 0xc909,		0x21, 0
+	.dw 0xe3c0, 0xc909,	0xe3ff, 0xc909,		0x21, 0
+	.dw 0xe440, 0xc909,	0xe47f, 0xc909,		0x21, 0
+	.dw 0xe4c0, 0xc909,	0xe4ff, 0xc909,		0x21, 0
+	.dw 0xe540, 0xc909,	0xe57f, 0xc909,		0x21, 0
+	.dw 0xe5c0, 0xc909,	0xe5ff, 0xc909,		0x21, 0
+	.dw 0xe640, 0xc909,	0xe67f, 0xc909,		0x21, 0
+	.dw 0xe6c0, 0xc909,	0xe6ff, 0xc909,		0x21, 0
+	.dw 0xe740, 0xc909,	0xe77f, 0xc909,		0x21, 0
+	.dw 0xe7c0, 0xc909,	0xe7ff, 0xc909,		0x21, 0
+	.dw 0xe840, 0xc909,	0xe87f, 0xc909,		0x21, 0
+	.dw 0xe8c0, 0xc909,	0xe8ff, 0xc909,		0x21, 0
+	.dw 0xe940, 0xc909,	0xe97f, 0xc909,		0x21, 0
+	.dw 0xe9c0, 0xc909,	0xe9ff, 0xc909,		0x21, 0
+	.dw 0xea40, 0xc909,	0xea7f, 0xc909,		0x21, 0
+	.dw 0xeac0, 0xc909,	0xeaff, 0xc909,		0x21, 0
+	.dw 0xeb40, 0xc909,	0xeb7f, 0xc909,		0x21, 0
+	.dw 0xebc0, 0xc909,	0xebff, 0xc909,		0x21, 0
+	.dw 0xec40, 0xc909,	0xec7f, 0xc909,		0x21, 0
+	.dw 0xecc0, 0xc909,	0xecff, 0xc909,		0x21, 0
+	.dw 0xed40, 0xc909,	0xed7f, 0xc909,		0x21, 0
+	.dw 0xedc0, 0xc909,	0xedff, 0xc909,		0x21, 0
+	.dw 0xee40, 0xc909,	0xee7f, 0xc909,		0x21, 0
+	.dw 0xeec0, 0xc909,	0xeeff, 0xc909,		0x21, 0
+	.dw 0xef40, 0xc909,	0xef7f, 0xc909,		0x21, 0
+	.dw 0xefc0, 0xc909,	0xefff, 0xc909,		0x21, 0
+	.dw 0xf040, 0xc909,	0xf07f, 0xc909,		0x21, 0
+	.dw 0xf0c0, 0xc909,	0xf0ff, 0xc909,		0x21, 0
+	.dw 0xf140, 0xc909,	0xf17f, 0xc909,		0x21, 0
+	.dw 0xf1c0, 0xc909,	0xf1ff, 0xc909,		0x21, 0
+	.dw 0xf240, 0xc909,	0xf27f, 0xc909,		0x21, 0
+	.dw 0xf2c0, 0xc909,	0xf2ff, 0xc909,		0x21, 0
+	.dw 0xf340, 0xc909,	0xf37f, 0xc909,		0x21, 0
+	.dw 0xf3c0, 0xc909,	0xf3ff, 0xc909,		0x21, 0
+	.dw 0xf440, 0xc909,	0xf47f, 0xc909,		0x21, 0
+	.dw 0xf4c0, 0xc909,	0xf4ff, 0xc909,		0x21, 0
+	.dw 0xf540, 0xc909,	0xf57f, 0xc909,		0x21, 0
+	.dw 0xf5c0, 0xc909,	0xf5ff, 0xc909,		0x21, 0
+	.dw 0xf640, 0xc909,	0xf67f, 0xc909,		0x21, 0
+	.dw 0xf6c0, 0xc909,	0xf6ff, 0xc909,		0x21, 0
+	.dw 0xf740, 0xc909,	0xf77f, 0xc909,		0x21, 0
+	.dw 0xf7c0, 0xc909,	0xf7ff, 0xc909,		0x21, 0
+	.dw 0xf840, 0xc909,	0xf87f, 0xc909,		0x21, 0
+	.dw 0xf8c0, 0xc909,	0xf8ff, 0xc909,		0x21, 0
+	.dw 0xf940, 0xc909,	0xf97f, 0xc909,		0x21, 0
+	.dw 0xf9c0, 0xc909,	0x1fff, 0xc90a,		0x21, 0
+	.dw 0x2040, 0xc90a,	0x207f, 0xc90a,		0x21, 0
+	.dw 0x20c0, 0xc90a,	0x20ff, 0xc90a,		0x21, 0
+	.dw 0x2140, 0xc90a,	0x217f, 0xc90a,		0x21, 0
+	.dw 0x21c0, 0xc90a,	0x21ff, 0xc90a,		0x21, 0
+	.dw 0x2240, 0xc90a,	0x227f, 0xc90a,		0x21, 0
+	.dw 0x22c0, 0xc90a,	0x22ff, 0xc90a,		0x21, 0
+	.dw 0x2340, 0xc90a,	0x237f, 0xc90a,		0x21, 0
+	.dw 0x23c0, 0xc90a,	0x23ff, 0xc90a,		0x21, 0
+	.dw 0x2440, 0xc90a,	0x247f, 0xc90a,		0x21, 0
+	.dw 0x24c0, 0xc90a,	0x24ff, 0xc90a,		0x21, 0
+	.dw 0x2540, 0xc90a,	0x257f, 0xc90a,		0x21, 0
+	.dw 0x25c0, 0xc90a,	0x25ff, 0xc90a,		0x21, 0
+	.dw 0x2640, 0xc90a,	0x267f, 0xc90a,		0x21, 0
+	.dw 0x26c0, 0xc90a,	0x26ff, 0xc90a,		0x21, 0
+	.dw 0x2740, 0xc90a,	0x277f, 0xc90a,		0x21, 0
+	.dw 0x27c0, 0xc90a,	0x27ff, 0xc90a,		0x21, 0
+	.dw 0x2840, 0xc90a,	0x287f, 0xc90a,		0x21, 0
+	.dw 0x28c0, 0xc90a,	0x28ff, 0xc90a,		0x21, 0
+	.dw 0x2940, 0xc90a,	0x297f, 0xc90a,		0x21, 0
+	.dw 0x29c0, 0xc90a,	0x29ff, 0xc90a,		0x21, 0
+	.dw 0x2a40, 0xc90a,	0x2a7f, 0xc90a,		0x21, 0
+	.dw 0x2ac0, 0xc90a,	0x2aff, 0xc90a,		0x21, 0
+	.dw 0x2b40, 0xc90a,	0x2b7f, 0xc90a,		0x21, 0
+	.dw 0x2bc0, 0xc90a,	0x2bff, 0xc90a,		0x21, 0
+	.dw 0x2c40, 0xc90a,	0x2c7f, 0xc90a,		0x21, 0
+	.dw 0x2cc0, 0xc90a,	0x2cff, 0xc90a,		0x21, 0
+	.dw 0x2d40, 0xc90a,	0x2d7f, 0xc90a,		0x21, 0
+	.dw 0x2dc0, 0xc90a,	0x2dff, 0xc90a,		0x21, 0
+	.dw 0x2e40, 0xc90a,	0x2e7f, 0xc90a,		0x21, 0
+	.dw 0x2ec0, 0xc90a,	0x2eff, 0xc90a,		0x21, 0
+	.dw 0x2f40, 0xc90a,	0x2f7f, 0xc90a,		0x21, 0
+	.dw 0x2fc0, 0xc90a,	0x2fff, 0xc90a,		0x21, 0
+	.dw 0x3040, 0xc90a,	0x307f, 0xc90a,		0x21, 0
+	.dw 0x30c0, 0xc90a,	0x30ff, 0xc90a,		0x21, 0
+	.dw 0x3140, 0xc90a,	0x317f, 0xc90a,		0x21, 0
+	.dw 0x31c0, 0xc90a,	0x31ff, 0xc90a,		0x21, 0
+	.dw 0x3240, 0xc90a,	0x327f, 0xc90a,		0x21, 0
+	.dw 0x32c0, 0xc90a,	0x32ff, 0xc90a,		0x21, 0
+	.dw 0x3340, 0xc90a,	0x337f, 0xc90a,		0x21, 0
+	.dw 0x33c0, 0xc90a,	0x33ff, 0xc90a,		0x21, 0
+	.dw 0x3440, 0xc90a,	0x347f, 0xc90a,		0x21, 0
+	.dw 0x34c0, 0xc90a,	0x34ff, 0xc90a,		0x21, 0
+	.dw 0x3540, 0xc90a,	0x357f, 0xc90a,		0x21, 0
+	.dw 0x35c0, 0xc90a,	0x35ff, 0xc90a,		0x21, 0
+	.dw 0x3640, 0xc90a,	0x367f, 0xc90a,		0x21, 0
+	.dw 0x36c0, 0xc90a,	0x36ff, 0xc90a,		0x21, 0
+	.dw 0x3740, 0xc90a,	0x377f, 0xc90a,		0x21, 0
+	.dw 0x37c0, 0xc90a,	0x37ff, 0xc90a,		0x21, 0
+	.dw 0x3840, 0xc90a,	0x387f, 0xc90a,		0x21, 0
+	.dw 0x38c0, 0xc90a,	0x38ff, 0xc90a,		0x21, 0
+	.dw 0x3940, 0xc90a,	0x397f, 0xc90a,		0x21, 0
+	.dw 0x39c0, 0xc90a,	0x5fff, 0xc90a,		0x21, 0
+	.dw 0x6040, 0xc90a,	0x607f, 0xc90a,		0x21, 0
+	.dw 0x60c0, 0xc90a,	0x60ff, 0xc90a,		0x21, 0
+	.dw 0x6140, 0xc90a,	0x617f, 0xc90a,		0x21, 0
+	.dw 0x61c0, 0xc90a,	0x61ff, 0xc90a,		0x21, 0
+	.dw 0x6240, 0xc90a,	0x627f, 0xc90a,		0x21, 0
+	.dw 0x62c0, 0xc90a,	0x62ff, 0xc90a,		0x21, 0
+	.dw 0x6340, 0xc90a,	0x637f, 0xc90a,		0x21, 0
+	.dw 0x63c0, 0xc90a,	0x63ff, 0xc90a,		0x21, 0
+	.dw 0x6440, 0xc90a,	0x647f, 0xc90a,		0x21, 0
+	.dw 0x64c0, 0xc90a,	0x64ff, 0xc90a,		0x21, 0
+	.dw 0x6540, 0xc90a,	0x657f, 0xc90a,		0x21, 0
+	.dw 0x65c0, 0xc90a,	0x65ff, 0xc90a,		0x21, 0
+	.dw 0x6640, 0xc90a,	0x667f, 0xc90a,		0x21, 0
+	.dw 0x66c0, 0xc90a,	0x66ff, 0xc90a,		0x21, 0
+	.dw 0x6740, 0xc90a,	0x677f, 0xc90a,		0x21, 0
+	.dw 0x67c0, 0xc90a,	0x67ff, 0xc90a,		0x21, 0
+	.dw 0x6840, 0xc90a,	0x687f, 0xc90a,		0x21, 0
+	.dw 0x68c0, 0xc90a,	0x68ff, 0xc90a,		0x21, 0
+	.dw 0x6940, 0xc90a,	0x697f, 0xc90a,		0x21, 0
+	.dw 0x69c0, 0xc90a,	0x69ff, 0xc90a,		0x21, 0
+	.dw 0x6a40, 0xc90a,	0x6a7f, 0xc90a,		0x21, 0
+	.dw 0x6ac0, 0xc90a,	0x6aff, 0xc90a,		0x21, 0
+	.dw 0x6b40, 0xc90a,	0x6b7f, 0xc90a,		0x21, 0
+	.dw 0x6bc0, 0xc90a,	0x6bff, 0xc90a,		0x21, 0
+	.dw 0x6c40, 0xc90a,	0x6c7f, 0xc90a,		0x21, 0
+	.dw 0x6cc0, 0xc90a,	0x6cff, 0xc90a,		0x21, 0
+	.dw 0x6d40, 0xc90a,	0x6d7f, 0xc90a,		0x21, 0
+	.dw 0x6dc0, 0xc90a,	0x6dff, 0xc90a,		0x21, 0
+	.dw 0x6e40, 0xc90a,	0x6e7f, 0xc90a,		0x21, 0
+	.dw 0x6ec0, 0xc90a,	0x6eff, 0xc90a,		0x21, 0
+	.dw 0x6f40, 0xc90a,	0x6f7f, 0xc90a,		0x21, 0
+	.dw 0x6fc0, 0xc90a,	0x6fff, 0xc90a,		0x21, 0
+	.dw 0x7040, 0xc90a,	0x707f, 0xc90a,		0x21, 0
+	.dw 0x70c0, 0xc90a,	0x70ff, 0xc90a,		0x21, 0
+	.dw 0x7140, 0xc90a,	0x717f, 0xc90a,		0x21, 0
+	.dw 0x71c0, 0xc90a,	0x71ff, 0xc90a,		0x21, 0
+	.dw 0x7240, 0xc90a,	0x727f, 0xc90a,		0x21, 0
+	.dw 0x72c0, 0xc90a,	0x72ff, 0xc90a,		0x21, 0
+	.dw 0x7340, 0xc90a,	0x737f, 0xc90a,		0x21, 0
+	.dw 0x73c0, 0xc90a,	0x73ff, 0xc90a,		0x21, 0
+	.dw 0x7440, 0xc90a,	0x747f, 0xc90a,		0x21, 0
+	.dw 0x74c0, 0xc90a,	0x74ff, 0xc90a,		0x21, 0
+	.dw 0x7540, 0xc90a,	0x757f, 0xc90a,		0x21, 0
+	.dw 0x75c0, 0xc90a,	0x75ff, 0xc90a,		0x21, 0
+	.dw 0x7640, 0xc90a,	0x767f, 0xc90a,		0x21, 0
+	.dw 0x76c0, 0xc90a,	0x76ff, 0xc90a,		0x21, 0
+	.dw 0x7740, 0xc90a,	0x777f, 0xc90a,		0x21, 0
+	.dw 0x77c0, 0xc90a,	0x77ff, 0xc90a,		0x21, 0
+	.dw 0x7840, 0xc90a,	0x787f, 0xc90a,		0x21, 0
+	.dw 0x78c0, 0xc90a,	0x78ff, 0xc90a,		0x21, 0
+	.dw 0x7940, 0xc90a,	0x797f, 0xc90a,		0x21, 0
+	.dw 0x79c0, 0xc90a,	0x9fff, 0xc90a,		0x21, 0
+	.dw 0xa040, 0xc90a,	0xa07f, 0xc90a,		0x21, 0
+	.dw 0xa0c0, 0xc90a,	0xa0ff, 0xc90a,		0x21, 0
+	.dw 0xa140, 0xc90a,	0xa17f, 0xc90a,		0x21, 0
+	.dw 0xa1c0, 0xc90a,	0xa1ff, 0xc90a,		0x21, 0
+	.dw 0xa240, 0xc90a,	0xa27f, 0xc90a,		0x21, 0
+	.dw 0xa2c0, 0xc90a,	0xa2ff, 0xc90a,		0x21, 0
+	.dw 0xa340, 0xc90a,	0xa37f, 0xc90a,		0x21, 0
+	.dw 0xa3c0, 0xc90a,	0xa3ff, 0xc90a,		0x21, 0
+	.dw 0xa440, 0xc90a,	0xa47f, 0xc90a,		0x21, 0
+	.dw 0xa4c0, 0xc90a,	0xa4ff, 0xc90a,		0x21, 0
+	.dw 0xa540, 0xc90a,	0xa57f, 0xc90a,		0x21, 0
+	.dw 0xa5c0, 0xc90a,	0xa5ff, 0xc90a,		0x21, 0
+	.dw 0xa640, 0xc90a,	0xa67f, 0xc90a,		0x21, 0
+	.dw 0xa6c0, 0xc90a,	0xa6ff, 0xc90a,		0x21, 0
+	.dw 0xa740, 0xc90a,	0xa77f, 0xc90a,		0x21, 0
+	.dw 0xa7c0, 0xc90a,	0xa7ff, 0xc90a,		0x21, 0
+	.dw 0xa840, 0xc90a,	0xa87f, 0xc90a,		0x21, 0
+	.dw 0xa8c0, 0xc90a,	0xa8ff, 0xc90a,		0x21, 0
+	.dw 0xa940, 0xc90a,	0xa97f, 0xc90a,		0x21, 0
+	.dw 0xa9c0, 0xc90a,	0xa9ff, 0xc90a,		0x21, 0
+	.dw 0xaa40, 0xc90a,	0xaa7f, 0xc90a,		0x21, 0
+	.dw 0xaac0, 0xc90a,	0xaaff, 0xc90a,		0x21, 0
+	.dw 0xab40, 0xc90a,	0xab7f, 0xc90a,		0x21, 0
+	.dw 0xabc0, 0xc90a,	0xabff, 0xc90a,		0x21, 0
+	.dw 0xac40, 0xc90a,	0xac7f, 0xc90a,		0x21, 0
+	.dw 0xacc0, 0xc90a,	0xacff, 0xc90a,		0x21, 0
+	.dw 0xad40, 0xc90a,	0xad7f, 0xc90a,		0x21, 0
+	.dw 0xadc0, 0xc90a,	0xadff, 0xc90a,		0x21, 0
+	.dw 0xae40, 0xc90a,	0xae7f, 0xc90a,		0x21, 0
+	.dw 0xaec0, 0xc90a,	0xaeff, 0xc90a,		0x21, 0
+	.dw 0xaf40, 0xc90a,	0xaf7f, 0xc90a,		0x21, 0
+	.dw 0xafc0, 0xc90a,	0xafff, 0xc90a,		0x21, 0
+	.dw 0xb040, 0xc90a,	0xb07f, 0xc90a,		0x21, 0
+	.dw 0xb0c0, 0xc90a,	0xb0ff, 0xc90a,		0x21, 0
+	.dw 0xb140, 0xc90a,	0xb17f, 0xc90a,		0x21, 0
+	.dw 0xb1c0, 0xc90a,	0xb1ff, 0xc90a,		0x21, 0
+	.dw 0xb240, 0xc90a,	0xb27f, 0xc90a,		0x21, 0
+	.dw 0xb2c0, 0xc90a,	0xb2ff, 0xc90a,		0x21, 0
+	.dw 0xb340, 0xc90a,	0xb37f, 0xc90a,		0x21, 0
+	.dw 0xb3c0, 0xc90a,	0xb3ff, 0xc90a,		0x21, 0
+	.dw 0xb440, 0xc90a,	0xb47f, 0xc90a,		0x21, 0
+	.dw 0xb4c0, 0xc90a,	0xb4ff, 0xc90a,		0x21, 0
+	.dw 0xb540, 0xc90a,	0xb57f, 0xc90a,		0x21, 0
+	.dw 0xb5c0, 0xc90a,	0xb5ff, 0xc90a,		0x21, 0
+	.dw 0xb640, 0xc90a,	0xb67f, 0xc90a,		0x21, 0
+	.dw 0xb6c0, 0xc90a,	0xb6ff, 0xc90a,		0x21, 0
+	.dw 0xb740, 0xc90a,	0xb77f, 0xc90a,		0x21, 0
+	.dw 0xb7c0, 0xc90a,	0xb7ff, 0xc90a,		0x21, 0
+	.dw 0xb840, 0xc90a,	0xb87f, 0xc90a,		0x21, 0
+	.dw 0xb8c0, 0xc90a,	0xb8ff, 0xc90a,		0x21, 0
+	.dw 0xb940, 0xc90a,	0xb97f, 0xc90a,		0x21, 0
+	.dw 0xb9c0, 0xc90a,	0xdfff, 0xc90a,		0x21, 0
+	.dw 0xe040, 0xc90a,	0xe07f, 0xc90a,		0x21, 0
+	.dw 0xe0c0, 0xc90a,	0xe0ff, 0xc90a,		0x21, 0
+	.dw 0xe140, 0xc90a,	0xe17f, 0xc90a,		0x21, 0
+	.dw 0xe1c0, 0xc90a,	0xe1ff, 0xc90a,		0x21, 0
+	.dw 0xe240, 0xc90a,	0xe27f, 0xc90a,		0x21, 0
+	.dw 0xe2c0, 0xc90a,	0xe2ff, 0xc90a,		0x21, 0
+	.dw 0xe340, 0xc90a,	0xe37f, 0xc90a,		0x21, 0
+	.dw 0xe3c0, 0xc90a,	0xe3ff, 0xc90a,		0x21, 0
+	.dw 0xe440, 0xc90a,	0xe47f, 0xc90a,		0x21, 0
+	.dw 0xe4c0, 0xc90a,	0xe4ff, 0xc90a,		0x21, 0
+	.dw 0xe540, 0xc90a,	0xe57f, 0xc90a,		0x21, 0
+	.dw 0xe5c0, 0xc90a,	0xe5ff, 0xc90a,		0x21, 0
+	.dw 0xe640, 0xc90a,	0xe67f, 0xc90a,		0x21, 0
+	.dw 0xe6c0, 0xc90a,	0xe6ff, 0xc90a,		0x21, 0
+	.dw 0xe740, 0xc90a,	0xe77f, 0xc90a,		0x21, 0
+	.dw 0xe7c0, 0xc90a,	0xe7ff, 0xc90a,		0x21, 0
+	.dw 0xe840, 0xc90a,	0xe87f, 0xc90a,		0x21, 0
+	.dw 0xe8c0, 0xc90a,	0xe8ff, 0xc90a,		0x21, 0
+	.dw 0xe940, 0xc90a,	0xe97f, 0xc90a,		0x21, 0
+	.dw 0xe9c0, 0xc90a,	0xe9ff, 0xc90a,		0x21, 0
+	.dw 0xea40, 0xc90a,	0xea7f, 0xc90a,		0x21, 0
+	.dw 0xeac0, 0xc90a,	0xeaff, 0xc90a,		0x21, 0
+	.dw 0xeb40, 0xc90a,	0xeb7f, 0xc90a,		0x21, 0
+	.dw 0xebc0, 0xc90a,	0xebff, 0xc90a,		0x21, 0
+	.dw 0xec40, 0xc90a,	0xec7f, 0xc90a,		0x21, 0
+	.dw 0xecc0, 0xc90a,	0xecff, 0xc90a,		0x21, 0
+	.dw 0xed40, 0xc90a,	0xed7f, 0xc90a,		0x21, 0
+	.dw 0xedc0, 0xc90a,	0xedff, 0xc90a,		0x21, 0
+	.dw 0xee40, 0xc90a,	0xee7f, 0xc90a,		0x21, 0
+	.dw 0xeec0, 0xc90a,	0xeeff, 0xc90a,		0x21, 0
+	.dw 0xef40, 0xc90a,	0xef7f, 0xc90a,		0x21, 0
+	.dw 0xefc0, 0xc90a,	0xefff, 0xc90a,		0x21, 0
+	.dw 0xf040, 0xc90a,	0xf07f, 0xc90a,		0x21, 0
+	.dw 0xf0c0, 0xc90a,	0xf0ff, 0xc90a,		0x21, 0
+	.dw 0xf140, 0xc90a,	0xf17f, 0xc90a,		0x21, 0
+	.dw 0xf1c0, 0xc90a,	0xf1ff, 0xc90a,		0x21, 0
+	.dw 0xf240, 0xc90a,	0xf27f, 0xc90a,		0x21, 0
+	.dw 0xf2c0, 0xc90a,	0xf2ff, 0xc90a,		0x21, 0
+	.dw 0xf340, 0xc90a,	0xf37f, 0xc90a,		0x21, 0
+	.dw 0xf3c0, 0xc90a,	0xf3ff, 0xc90a,		0x21, 0
+	.dw 0xf440, 0xc90a,	0xf47f, 0xc90a,		0x21, 0
+	.dw 0xf4c0, 0xc90a,	0xf4ff, 0xc90a,		0x21, 0
+	.dw 0xf540, 0xc90a,	0xf57f, 0xc90a,		0x21, 0
+	.dw 0xf5c0, 0xc90a,	0xf5ff, 0xc90a,		0x21, 0
+	.dw 0xf640, 0xc90a,	0xf67f, 0xc90a,		0x21, 0
+	.dw 0xf6c0, 0xc90a,	0xf6ff, 0xc90a,		0x21, 0
+	.dw 0xf740, 0xc90a,	0xf77f, 0xc90a,		0x21, 0
+	.dw 0xf7c0, 0xc90a,	0xf7ff, 0xc90a,		0x21, 0
+	.dw 0xf840, 0xc90a,	0xf87f, 0xc90a,		0x21, 0
+	.dw 0xf8c0, 0xc90a,	0xf8ff, 0xc90a,		0x21, 0
+	.dw 0xf940, 0xc90a,	0xf97f, 0xc90a,		0x21, 0
+	.dw 0xf9c0, 0xc90a,	0x1fff, 0xc90b,		0x21, 0
+	.dw 0x2040, 0xc90b,	0x207f, 0xc90b,		0x21, 0
+	.dw 0x20c0, 0xc90b,	0x20ff, 0xc90b,		0x21, 0
+	.dw 0x2140, 0xc90b,	0x217f, 0xc90b,		0x21, 0
+	.dw 0x21c0, 0xc90b,	0x21ff, 0xc90b,		0x21, 0
+	.dw 0x2240, 0xc90b,	0x227f, 0xc90b,		0x21, 0
+	.dw 0x22c0, 0xc90b,	0x22ff, 0xc90b,		0x21, 0
+	.dw 0x2340, 0xc90b,	0x237f, 0xc90b,		0x21, 0
+	.dw 0x23c0, 0xc90b,	0x23ff, 0xc90b,		0x21, 0
+	.dw 0x2440, 0xc90b,	0x247f, 0xc90b,		0x21, 0
+	.dw 0x24c0, 0xc90b,	0x24ff, 0xc90b,		0x21, 0
+	.dw 0x2540, 0xc90b,	0x257f, 0xc90b,		0x21, 0
+	.dw 0x25c0, 0xc90b,	0x25ff, 0xc90b,		0x21, 0
+	.dw 0x2640, 0xc90b,	0x267f, 0xc90b,		0x21, 0
+	.dw 0x26c0, 0xc90b,	0x26ff, 0xc90b,		0x21, 0
+	.dw 0x2740, 0xc90b,	0x277f, 0xc90b,		0x21, 0
+	.dw 0x27c0, 0xc90b,	0x27ff, 0xc90b,		0x21, 0
+	.dw 0x2840, 0xc90b,	0x287f, 0xc90b,		0x21, 0
+	.dw 0x28c0, 0xc90b,	0x28ff, 0xc90b,		0x21, 0
+	.dw 0x2940, 0xc90b,	0x297f, 0xc90b,		0x21, 0
+	.dw 0x29c0, 0xc90b,	0x29ff, 0xc90b,		0x21, 0
+	.dw 0x2a40, 0xc90b,	0x2a7f, 0xc90b,		0x21, 0
+	.dw 0x2ac0, 0xc90b,	0x2aff, 0xc90b,		0x21, 0
+	.dw 0x2b40, 0xc90b,	0x2b7f, 0xc90b,		0x21, 0
+	.dw 0x2bc0, 0xc90b,	0x2bff, 0xc90b,		0x21, 0
+	.dw 0x2c40, 0xc90b,	0x2c7f, 0xc90b,		0x21, 0
+	.dw 0x2cc0, 0xc90b,	0x2cff, 0xc90b,		0x21, 0
+	.dw 0x2d40, 0xc90b,	0x2d7f, 0xc90b,		0x21, 0
+	.dw 0x2dc0, 0xc90b,	0x2dff, 0xc90b,		0x21, 0
+	.dw 0x2e40, 0xc90b,	0x2e7f, 0xc90b,		0x21, 0
+	.dw 0x2ec0, 0xc90b,	0x2eff, 0xc90b,		0x21, 0
+	.dw 0x2f40, 0xc90b,	0x2f7f, 0xc90b,		0x21, 0
+	.dw 0x2fc0, 0xc90b,	0x2fff, 0xc90b,		0x21, 0
+	.dw 0x3040, 0xc90b,	0x307f, 0xc90b,		0x21, 0
+	.dw 0x30c0, 0xc90b,	0x30ff, 0xc90b,		0x21, 0
+	.dw 0x3140, 0xc90b,	0x317f, 0xc90b,		0x21, 0
+	.dw 0x31c0, 0xc90b,	0x31ff, 0xc90b,		0x21, 0
+	.dw 0x3240, 0xc90b,	0x327f, 0xc90b,		0x21, 0
+	.dw 0x32c0, 0xc90b,	0x32ff, 0xc90b,		0x21, 0
+	.dw 0x3340, 0xc90b,	0x337f, 0xc90b,		0x21, 0
+	.dw 0x33c0, 0xc90b,	0x33ff, 0xc90b,		0x21, 0
+	.dw 0x3440, 0xc90b,	0x347f, 0xc90b,		0x21, 0
+	.dw 0x34c0, 0xc90b,	0x34ff, 0xc90b,		0x21, 0
+	.dw 0x3540, 0xc90b,	0x357f, 0xc90b,		0x21, 0
+	.dw 0x35c0, 0xc90b,	0x35ff, 0xc90b,		0x21, 0
+	.dw 0x3640, 0xc90b,	0x367f, 0xc90b,		0x21, 0
+	.dw 0x36c0, 0xc90b,	0x36ff, 0xc90b,		0x21, 0
+	.dw 0x3740, 0xc90b,	0x377f, 0xc90b,		0x21, 0
+	.dw 0x37c0, 0xc90b,	0x37ff, 0xc90b,		0x21, 0
+	.dw 0x3840, 0xc90b,	0x387f, 0xc90b,		0x21, 0
+	.dw 0x38c0, 0xc90b,	0x38ff, 0xc90b,		0x21, 0
+	.dw 0x3940, 0xc90b,	0x397f, 0xc90b,		0x21, 0
+	.dw 0x39c0, 0xc90b,	0xffff, 0xc90b,		0x21, 0
+	.dw 0x0040, 0xc90c,	0x007f, 0xc90c,		0x21, 0
+	.dw 0x00c0, 0xc90c,	0x00ff, 0xc90c,		0x21, 0
+	.dw 0x0140, 0xc90c,	0x017f, 0xc90c,		0x21, 0
+	.dw 0x01c0, 0xc90c,	0x01ff, 0xc90c,		0x21, 0
+	.dw 0x0240, 0xc90c,	0x027f, 0xc90c,		0x21, 0
+	.dw 0x02c0, 0xc90c,	0x02ff, 0xc90c,		0x21, 0
+	.dw 0x0340, 0xc90c,	0x037f, 0xc90c,		0x21, 0
+	.dw 0x03c0, 0xc90c,	0x03ff, 0xc90c,		0x21, 0
+	.dw 0x0440, 0xc90c,	0x047f, 0xc90c,		0x21, 0
+	.dw 0x04c0, 0xc90c,	0x04ff, 0xc90c,		0x21, 0
+	.dw 0x0540, 0xc90c,	0x057f, 0xc90c,		0x21, 0
+	.dw 0x05c0, 0xc90c,	0x05ff, 0xc90c,		0x21, 0
+	.dw 0x0640, 0xc90c,	0x067f, 0xc90c,		0x21, 0
+	.dw 0x06c0, 0xc90c,	0x06ff, 0xc90c,		0x21, 0
+	.dw 0x0740, 0xc90c,	0x077f, 0xc90c,		0x21, 0
+	.dw 0x07c0, 0xc90c,	0x07ff, 0xc90c,		0x21, 0
+	.dw 0x0840, 0xc90c,	0x087f, 0xc90c,		0x21, 0
+	.dw 0x08c0, 0xc90c,	0x08ff, 0xc90c,		0x21, 0
+	.dw 0x0940, 0xc90c,	0x097f, 0xc90c,		0x21, 0
+	.dw 0x09c0, 0xc90c,	0x09ff, 0xc90c,		0x21, 0
+	.dw 0x0a40, 0xc90c,	0x0a7f, 0xc90c,		0x21, 0
+	.dw 0x0ac0, 0xc90c,	0x0aff, 0xc90c,		0x21, 0
+	.dw 0x0b40, 0xc90c,	0x0b7f, 0xc90c,		0x21, 0
+	.dw 0x0bc0, 0xc90c,	0x0bff, 0xc90c,		0x21, 0
+	.dw 0x0c40, 0xc90c,	0x0c7f, 0xc90c,		0x21, 0
+	.dw 0x0cc0, 0xc90c,	0x0cff, 0xc90c,		0x21, 0
+	.dw 0x0d40, 0xc90c,	0x0d7f, 0xc90c,		0x21, 0
+	.dw 0x0dc0, 0xc90c,	0x0dff, 0xc90c,		0x21, 0
+	.dw 0x0e40, 0xc90c,	0x0e7f, 0xc90c,		0x21, 0
+	.dw 0x0ec0, 0xc90c,	0x0eff, 0xc90c,		0x21, 0
+	.dw 0x0f40, 0xc90c,	0x0f7f, 0xc90c,		0x21, 0
+	.dw 0x0fc0, 0xc90c,	0x0fff, 0xc90c,		0x21, 0
+	.dw 0x1040, 0xc90c,	0x107f, 0xc90c,		0x21, 0
+	.dw 0x10c0, 0xc90c,	0x10ff, 0xc90c,		0x21, 0
+	.dw 0x1140, 0xc90c,	0x117f, 0xc90c,		0x21, 0
+	.dw 0x11c0, 0xc90c,	0x11ff, 0xc90c,		0x21, 0
+	.dw 0x1240, 0xc90c,	0x127f, 0xc90c,		0x21, 0
+	.dw 0x12c0, 0xc90c,	0x12ff, 0xc90c,		0x21, 0
+	.dw 0x1340, 0xc90c,	0x137f, 0xc90c,		0x21, 0
+	.dw 0x13c0, 0xc90c,	0x13ff, 0xc90c,		0x21, 0
+	.dw 0x1440, 0xc90c,	0x147f, 0xc90c,		0x21, 0
+	.dw 0x14c0, 0xc90c,	0x14ff, 0xc90c,		0x21, 0
+	.dw 0x1540, 0xc90c,	0x157f, 0xc90c,		0x21, 0
+	.dw 0x15c0, 0xc90c,	0x15ff, 0xc90c,		0x21, 0
+	.dw 0x1640, 0xc90c,	0x167f, 0xc90c,		0x21, 0
+	.dw 0x16c0, 0xc90c,	0x16ff, 0xc90c,		0x21, 0
+	.dw 0x1740, 0xc90c,	0x177f, 0xc90c,		0x21, 0
+	.dw 0x17c0, 0xc90c,	0x17ff, 0xc90c,		0x21, 0
+	.dw 0x1840, 0xc90c,	0x187f, 0xc90c,		0x21, 0
+	.dw 0x18c0, 0xc90c,	0x18ff, 0xc90c,		0x21, 0
+	.dw 0x1940, 0xc90c,	0x197f, 0xc90c,		0x21, 0
+	.dw 0x19c0, 0xc90c,	0x1fff, 0xc90c,		0x21, 0
+	.dw 0x2040, 0xc90c,	0x207f, 0xc90c,		0x21, 0
+	.dw 0x20c0, 0xc90c,	0x20ff, 0xc90c,		0x21, 0
+	.dw 0x2140, 0xc90c,	0x217f, 0xc90c,		0x21, 0
+	.dw 0x21c0, 0xc90c,	0x21ff, 0xc90c,		0x21, 0
+	.dw 0x2240, 0xc90c,	0x227f, 0xc90c,		0x21, 0
+	.dw 0x22c0, 0xc90c,	0x22ff, 0xc90c,		0x21, 0
+	.dw 0x2340, 0xc90c,	0x237f, 0xc90c,		0x21, 0
+	.dw 0x23c0, 0xc90c,	0x23ff, 0xc90c,		0x21, 0
+	.dw 0x2440, 0xc90c,	0x247f, 0xc90c,		0x21, 0
+	.dw 0x24c0, 0xc90c,	0x24ff, 0xc90c,		0x21, 0
+	.dw 0x2540, 0xc90c,	0x257f, 0xc90c,		0x21, 0
+	.dw 0x25c0, 0xc90c,	0x25ff, 0xc90c,		0x21, 0
+	.dw 0x2640, 0xc90c,	0x267f, 0xc90c,		0x21, 0
+	.dw 0x26c0, 0xc90c,	0x26ff, 0xc90c,		0x21, 0
+	.dw 0x2740, 0xc90c,	0x277f, 0xc90c,		0x21, 0
+	.dw 0x27c0, 0xc90c,	0x27ff, 0xc90c,		0x21, 0
+	.dw 0x2840, 0xc90c,	0x287f, 0xc90c,		0x21, 0
+	.dw 0x28c0, 0xc90c,	0x28ff, 0xc90c,		0x21, 0
+	.dw 0x2940, 0xc90c,	0x297f, 0xc90c,		0x21, 0
+	.dw 0x29c0, 0xc90c,	0x29ff, 0xc90c,		0x21, 0
+	.dw 0x2a40, 0xc90c,	0x2a7f, 0xc90c,		0x21, 0
+	.dw 0x2ac0, 0xc90c,	0x2aff, 0xc90c,		0x21, 0
+	.dw 0x2b40, 0xc90c,	0x2b7f, 0xc90c,		0x21, 0
+	.dw 0x2bc0, 0xc90c,	0x2bff, 0xc90c,		0x21, 0
+	.dw 0x2c40, 0xc90c,	0x2c7f, 0xc90c,		0x21, 0
+	.dw 0x2cc0, 0xc90c,	0x2cff, 0xc90c,		0x21, 0
+	.dw 0x2d40, 0xc90c,	0x2d7f, 0xc90c,		0x21, 0
+	.dw 0x2dc0, 0xc90c,	0x2dff, 0xc90c,		0x21, 0
+	.dw 0x2e40, 0xc90c,	0x2e7f, 0xc90c,		0x21, 0
+	.dw 0x2ec0, 0xc90c,	0x2eff, 0xc90c,		0x21, 0
+	.dw 0x2f40, 0xc90c,	0x2f7f, 0xc90c,		0x21, 0
+	.dw 0x2fc0, 0xc90c,	0x2fff, 0xc90c,		0x21, 0
+	.dw 0x3040, 0xc90c,	0x307f, 0xc90c,		0x21, 0
+	.dw 0x30c0, 0xc90c,	0x30ff, 0xc90c,		0x21, 0
+	.dw 0x3140, 0xc90c,	0x317f, 0xc90c,		0x21, 0
+	.dw 0x31c0, 0xc90c,	0x31ff, 0xc90c,		0x21, 0
+	.dw 0x3240, 0xc90c,	0x327f, 0xc90c,		0x21, 0
+	.dw 0x32c0, 0xc90c,	0x32ff, 0xc90c,		0x21, 0
+	.dw 0x3340, 0xc90c,	0x337f, 0xc90c,		0x21, 0
+	.dw 0x33c0, 0xc90c,	0x33ff, 0xc90c,		0x21, 0
+	.dw 0x3440, 0xc90c,	0x347f, 0xc90c,		0x21, 0
+	.dw 0x34c0, 0xc90c,	0x34ff, 0xc90c,		0x21, 0
+	.dw 0x3540, 0xc90c,	0x357f, 0xc90c,		0x21, 0
+	.dw 0x35c0, 0xc90c,	0x35ff, 0xc90c,		0x21, 0
+	.dw 0x3640, 0xc90c,	0x367f, 0xc90c,		0x21, 0
+	.dw 0x36c0, 0xc90c,	0x36ff, 0xc90c,		0x21, 0
+	.dw 0x3740, 0xc90c,	0x377f, 0xc90c,		0x21, 0
+	.dw 0x37c0, 0xc90c,	0x37ff, 0xc90c,		0x21, 0
+	.dw 0x3840, 0xc90c,	0x387f, 0xc90c,		0x21, 0
+	.dw 0x38c0, 0xc90c,	0x38ff, 0xc90c,		0x21, 0
+	.dw 0x3940, 0xc90c,	0x397f, 0xc90c,		0x21, 0
+	.dw 0x39c0, 0xc90c,	0x3fff, 0xc90c,		0x21, 0
+	.dw 0x4040, 0xc90c,	0x407f, 0xc90c,		0x21, 0
+	.dw 0x40c0, 0xc90c,	0x40ff, 0xc90c,		0x21, 0
+	.dw 0x4140, 0xc90c,	0x417f, 0xc90c,		0x21, 0
+	.dw 0x41c0, 0xc90c,	0x41ff, 0xc90c,		0x21, 0
+	.dw 0x4240, 0xc90c,	0x427f, 0xc90c,		0x21, 0
+	.dw 0x42c0, 0xc90c,	0x42ff, 0xc90c,		0x21, 0
+	.dw 0x4340, 0xc90c,	0x437f, 0xc90c,		0x21, 0
+	.dw 0x43c0, 0xc90c,	0x43ff, 0xc90c,		0x21, 0
+	.dw 0x4440, 0xc90c,	0x447f, 0xc90c,		0x21, 0
+	.dw 0x44c0, 0xc90c,	0x44ff, 0xc90c,		0x21, 0
+	.dw 0x4540, 0xc90c,	0x457f, 0xc90c,		0x21, 0
+	.dw 0x45c0, 0xc90c,	0x45ff, 0xc90c,		0x21, 0
+	.dw 0x4640, 0xc90c,	0x467f, 0xc90c,		0x21, 0
+	.dw 0x46c0, 0xc90c,	0x46ff, 0xc90c,		0x21, 0
+	.dw 0x4740, 0xc90c,	0x477f, 0xc90c,		0x21, 0
+	.dw 0x47c0, 0xc90c,	0x47ff, 0xc90c,		0x21, 0
+	.dw 0x4840, 0xc90c,	0x487f, 0xc90c,		0x21, 0
+	.dw 0x48c0, 0xc90c,	0x48ff, 0xc90c,		0x21, 0
+	.dw 0x4940, 0xc90c,	0x497f, 0xc90c,		0x21, 0
+	.dw 0x49c0, 0xc90c,	0x49ff, 0xc90c,		0x21, 0
+	.dw 0x4a40, 0xc90c,	0x4a7f, 0xc90c,		0x21, 0
+	.dw 0x4ac0, 0xc90c,	0x4aff, 0xc90c,		0x21, 0
+	.dw 0x4b40, 0xc90c,	0x4b7f, 0xc90c,		0x21, 0
+	.dw 0x4bc0, 0xc90c,	0x4bff, 0xc90c,		0x21, 0
+	.dw 0x4c40, 0xc90c,	0x4c7f, 0xc90c,		0x21, 0
+	.dw 0x4cc0, 0xc90c,	0x4cff, 0xc90c,		0x21, 0
+	.dw 0x4d40, 0xc90c,	0x4d7f, 0xc90c,		0x21, 0
+	.dw 0x4dc0, 0xc90c,	0x4dff, 0xc90c,		0x21, 0
+	.dw 0x4e40, 0xc90c,	0x4e7f, 0xc90c,		0x21, 0
+	.dw 0x4ec0, 0xc90c,	0x4eff, 0xc90c,		0x21, 0
+	.dw 0x4f40, 0xc90c,	0x4f7f, 0xc90c,		0x21, 0
+	.dw 0x4fc0, 0xc90c,	0x4fff, 0xc90c,		0x21, 0
+	.dw 0x5040, 0xc90c,	0x507f, 0xc90c,		0x21, 0
+	.dw 0x50c0, 0xc90c,	0x50ff, 0xc90c,		0x21, 0
+	.dw 0x5140, 0xc90c,	0x517f, 0xc90c,		0x21, 0
+	.dw 0x51c0, 0xc90c,	0x51ff, 0xc90c,		0x21, 0
+	.dw 0x5240, 0xc90c,	0x527f, 0xc90c,		0x21, 0
+	.dw 0x52c0, 0xc90c,	0x52ff, 0xc90c,		0x21, 0
+	.dw 0x5340, 0xc90c,	0x537f, 0xc90c,		0x21, 0
+	.dw 0x53c0, 0xc90c,	0x53ff, 0xc90c,		0x21, 0
+	.dw 0x5440, 0xc90c,	0x547f, 0xc90c,		0x21, 0
+	.dw 0x54c0, 0xc90c,	0x54ff, 0xc90c,		0x21, 0
+	.dw 0x5540, 0xc90c,	0x557f, 0xc90c,		0x21, 0
+	.dw 0x55c0, 0xc90c,	0x55ff, 0xc90c,		0x21, 0
+	.dw 0x5640, 0xc90c,	0x567f, 0xc90c,		0x21, 0
+	.dw 0x56c0, 0xc90c,	0x56ff, 0xc90c,		0x21, 0
+	.dw 0x5740, 0xc90c,	0x577f, 0xc90c,		0x21, 0
+	.dw 0x57c0, 0xc90c,	0x57ff, 0xc90c,		0x21, 0
+	.dw 0x5840, 0xc90c,	0x587f, 0xc90c,		0x21, 0
+	.dw 0x58c0, 0xc90c,	0x58ff, 0xc90c,		0x21, 0
+	.dw 0x5940, 0xc90c,	0x597f, 0xc90c,		0x21, 0
+	.dw 0x59c0, 0xc90c,	0x5fff, 0xc90c,		0x21, 0
+	.dw 0x6040, 0xc90c,	0x607f, 0xc90c,		0x21, 0
+	.dw 0x60c0, 0xc90c,	0x60ff, 0xc90c,		0x21, 0
+	.dw 0x6140, 0xc90c,	0x617f, 0xc90c,		0x21, 0
+	.dw 0x61c0, 0xc90c,	0x61ff, 0xc90c,		0x21, 0
+	.dw 0x6240, 0xc90c,	0x627f, 0xc90c,		0x21, 0
+	.dw 0x62c0, 0xc90c,	0x62ff, 0xc90c,		0x21, 0
+	.dw 0x6340, 0xc90c,	0x637f, 0xc90c,		0x21, 0
+	.dw 0x63c0, 0xc90c,	0x63ff, 0xc90c,		0x21, 0
+	.dw 0x6440, 0xc90c,	0x647f, 0xc90c,		0x21, 0
+	.dw 0x64c0, 0xc90c,	0x64ff, 0xc90c,		0x21, 0
+	.dw 0x6540, 0xc90c,	0x657f, 0xc90c,		0x21, 0
+	.dw 0x65c0, 0xc90c,	0x65ff, 0xc90c,		0x21, 0
+	.dw 0x6640, 0xc90c,	0x667f, 0xc90c,		0x21, 0
+	.dw 0x66c0, 0xc90c,	0x66ff, 0xc90c,		0x21, 0
+	.dw 0x6740, 0xc90c,	0x677f, 0xc90c,		0x21, 0
+	.dw 0x67c0, 0xc90c,	0x67ff, 0xc90c,		0x21, 0
+	.dw 0x6840, 0xc90c,	0x687f, 0xc90c,		0x21, 0
+	.dw 0x68c0, 0xc90c,	0x68ff, 0xc90c,		0x21, 0
+	.dw 0x6940, 0xc90c,	0x697f, 0xc90c,		0x21, 0
+	.dw 0x69c0, 0xc90c,	0x69ff, 0xc90c,		0x21, 0
+	.dw 0x6a40, 0xc90c,	0x6a7f, 0xc90c,		0x21, 0
+	.dw 0x6ac0, 0xc90c,	0x6aff, 0xc90c,		0x21, 0
+	.dw 0x6b40, 0xc90c,	0x6b7f, 0xc90c,		0x21, 0
+	.dw 0x6bc0, 0xc90c,	0x6bff, 0xc90c,		0x21, 0
+	.dw 0x6c40, 0xc90c,	0x6c7f, 0xc90c,		0x21, 0
+	.dw 0x6cc0, 0xc90c,	0x6cff, 0xc90c,		0x21, 0
+	.dw 0x6d40, 0xc90c,	0x6d7f, 0xc90c,		0x21, 0
+	.dw 0x6dc0, 0xc90c,	0x6dff, 0xc90c,		0x21, 0
+	.dw 0x6e40, 0xc90c,	0x6e7f, 0xc90c,		0x21, 0
+	.dw 0x6ec0, 0xc90c,	0x6eff, 0xc90c,		0x21, 0
+	.dw 0x6f40, 0xc90c,	0x6f7f, 0xc90c,		0x21, 0
+	.dw 0x6fc0, 0xc90c,	0x6fff, 0xc90c,		0x21, 0
+	.dw 0x7040, 0xc90c,	0x707f, 0xc90c,		0x21, 0
+	.dw 0x70c0, 0xc90c,	0x70ff, 0xc90c,		0x21, 0
+	.dw 0x7140, 0xc90c,	0x717f, 0xc90c,		0x21, 0
+	.dw 0x71c0, 0xc90c,	0x71ff, 0xc90c,		0x21, 0
+	.dw 0x7240, 0xc90c,	0x727f, 0xc90c,		0x21, 0
+	.dw 0x72c0, 0xc90c,	0x72ff, 0xc90c,		0x21, 0
+	.dw 0x7340, 0xc90c,	0x737f, 0xc90c,		0x21, 0
+	.dw 0x73c0, 0xc90c,	0x73ff, 0xc90c,		0x21, 0
+	.dw 0x7440, 0xc90c,	0x747f, 0xc90c,		0x21, 0
+	.dw 0x74c0, 0xc90c,	0x74ff, 0xc90c,		0x21, 0
+	.dw 0x7540, 0xc90c,	0x757f, 0xc90c,		0x21, 0
+	.dw 0x75c0, 0xc90c,	0x75ff, 0xc90c,		0x21, 0
+	.dw 0x7640, 0xc90c,	0x767f, 0xc90c,		0x21, 0
+	.dw 0x76c0, 0xc90c,	0x76ff, 0xc90c,		0x21, 0
+	.dw 0x7740, 0xc90c,	0x777f, 0xc90c,		0x21, 0
+	.dw 0x77c0, 0xc90c,	0x77ff, 0xc90c,		0x21, 0
+	.dw 0x7840, 0xc90c,	0x787f, 0xc90c,		0x21, 0
+	.dw 0x78c0, 0xc90c,	0x78ff, 0xc90c,		0x21, 0
+	.dw 0x7940, 0xc90c,	0x797f, 0xc90c,		0x21, 0
+	.dw 0x79c0, 0xc90c,	0x7fff, 0xc90c,		0x21, 0
+	.dw 0x8040, 0xc90c,	0x807f, 0xc90c,		0x21, 0
+	.dw 0x80c0, 0xc90c,	0x80ff, 0xc90c,		0x21, 0
+	.dw 0x8140, 0xc90c,	0x817f, 0xc90c,		0x21, 0
+	.dw 0x81c0, 0xc90c,	0x81ff, 0xc90c,		0x21, 0
+	.dw 0x8240, 0xc90c,	0x827f, 0xc90c,		0x21, 0
+	.dw 0x82c0, 0xc90c,	0x82ff, 0xc90c,		0x21, 0
+	.dw 0x8340, 0xc90c,	0x837f, 0xc90c,		0x21, 0
+	.dw 0x83c0, 0xc90c,	0x83ff, 0xc90c,		0x21, 0
+	.dw 0x8440, 0xc90c,	0x847f, 0xc90c,		0x21, 0
+	.dw 0x84c0, 0xc90c,	0x84ff, 0xc90c,		0x21, 0
+	.dw 0x8540, 0xc90c,	0x857f, 0xc90c,		0x21, 0
+	.dw 0x85c0, 0xc90c,	0x85ff, 0xc90c,		0x21, 0
+	.dw 0x8640, 0xc90c,	0x867f, 0xc90c,		0x21, 0
+	.dw 0x86c0, 0xc90c,	0x86ff, 0xc90c,		0x21, 0
+	.dw 0x8740, 0xc90c,	0x877f, 0xc90c,		0x21, 0
+	.dw 0x87c0, 0xc90c,	0x87ff, 0xc90c,		0x21, 0
+	.dw 0x8840, 0xc90c,	0x887f, 0xc90c,		0x21, 0
+	.dw 0x88c0, 0xc90c,	0x88ff, 0xc90c,		0x21, 0
+	.dw 0x8940, 0xc90c,	0x897f, 0xc90c,		0x21, 0
+	.dw 0x89c0, 0xc90c,	0x89ff, 0xc90c,		0x21, 0
+	.dw 0x8a40, 0xc90c,	0x8a7f, 0xc90c,		0x21, 0
+	.dw 0x8ac0, 0xc90c,	0x8aff, 0xc90c,		0x21, 0
+	.dw 0x8b40, 0xc90c,	0x8b7f, 0xc90c,		0x21, 0
+	.dw 0x8bc0, 0xc90c,	0x8bff, 0xc90c,		0x21, 0
+	.dw 0x8c40, 0xc90c,	0x8c7f, 0xc90c,		0x21, 0
+	.dw 0x8cc0, 0xc90c,	0x8cff, 0xc90c,		0x21, 0
+	.dw 0x8d40, 0xc90c,	0x8d7f, 0xc90c,		0x21, 0
+	.dw 0x8dc0, 0xc90c,	0x8dff, 0xc90c,		0x21, 0
+	.dw 0x8e40, 0xc90c,	0x8e7f, 0xc90c,		0x21, 0
+	.dw 0x8ec0, 0xc90c,	0x8eff, 0xc90c,		0x21, 0
+	.dw 0x8f40, 0xc90c,	0x8f7f, 0xc90c,		0x21, 0
+	.dw 0x8fc0, 0xc90c,	0x8fff, 0xc90c,		0x21, 0
+	.dw 0x9040, 0xc90c,	0x907f, 0xc90c,		0x21, 0
+	.dw 0x90c0, 0xc90c,	0x90ff, 0xc90c,		0x21, 0
+	.dw 0x9140, 0xc90c,	0x917f, 0xc90c,		0x21, 0
+	.dw 0x91c0, 0xc90c,	0x91ff, 0xc90c,		0x21, 0
+	.dw 0x9240, 0xc90c,	0x927f, 0xc90c,		0x21, 0
+	.dw 0x92c0, 0xc90c,	0x92ff, 0xc90c,		0x21, 0
+	.dw 0x9340, 0xc90c,	0x937f, 0xc90c,		0x21, 0
+	.dw 0x93c0, 0xc90c,	0x93ff, 0xc90c,		0x21, 0
+	.dw 0x9440, 0xc90c,	0x947f, 0xc90c,		0x21, 0
+	.dw 0x94c0, 0xc90c,	0x94ff, 0xc90c,		0x21, 0
+	.dw 0x9540, 0xc90c,	0x957f, 0xc90c,		0x21, 0
+	.dw 0x95c0, 0xc90c,	0x95ff, 0xc90c,		0x21, 0
+	.dw 0x9640, 0xc90c,	0x967f, 0xc90c,		0x21, 0
+	.dw 0x96c0, 0xc90c,	0x96ff, 0xc90c,		0x21, 0
+	.dw 0x9740, 0xc90c,	0x977f, 0xc90c,		0x21, 0
+	.dw 0x97c0, 0xc90c,	0x97ff, 0xc90c,		0x21, 0
+	.dw 0x9840, 0xc90c,	0x987f, 0xc90c,		0x21, 0
+	.dw 0x98c0, 0xc90c,	0x98ff, 0xc90c,		0x21, 0
+	.dw 0x9940, 0xc90c,	0x997f, 0xc90c,		0x21, 0
+	.dw 0x99c0, 0xc90c,	0x9fff, 0xc90c,		0x21, 0
+	.dw 0xa040, 0xc90c,	0xa07f, 0xc90c,		0x21, 0
+	.dw 0xa0c0, 0xc90c,	0xa0ff, 0xc90c,		0x21, 0
+	.dw 0xa140, 0xc90c,	0xa17f, 0xc90c,		0x21, 0
+	.dw 0xa1c0, 0xc90c,	0xa1ff, 0xc90c,		0x21, 0
+	.dw 0xa240, 0xc90c,	0xa27f, 0xc90c,		0x21, 0
+	.dw 0xa2c0, 0xc90c,	0xa2ff, 0xc90c,		0x21, 0
+	.dw 0xa340, 0xc90c,	0xa37f, 0xc90c,		0x21, 0
+	.dw 0xa3c0, 0xc90c,	0xa3ff, 0xc90c,		0x21, 0
+	.dw 0xa440, 0xc90c,	0xa47f, 0xc90c,		0x21, 0
+	.dw 0xa4c0, 0xc90c,	0xa4ff, 0xc90c,		0x21, 0
+	.dw 0xa540, 0xc90c,	0xa57f, 0xc90c,		0x21, 0
+	.dw 0xa5c0, 0xc90c,	0xa5ff, 0xc90c,		0x21, 0
+	.dw 0xa640, 0xc90c,	0xa67f, 0xc90c,		0x21, 0
+	.dw 0xa6c0, 0xc90c,	0xa6ff, 0xc90c,		0x21, 0
+	.dw 0xa740, 0xc90c,	0xa77f, 0xc90c,		0x21, 0
+	.dw 0xa7c0, 0xc90c,	0xa7ff, 0xc90c,		0x21, 0
+	.dw 0xa840, 0xc90c,	0xa87f, 0xc90c,		0x21, 0
+	.dw 0xa8c0, 0xc90c,	0xa8ff, 0xc90c,		0x21, 0
+	.dw 0xa940, 0xc90c,	0xa97f, 0xc90c,		0x21, 0
+	.dw 0xa9c0, 0xc90c,	0xa9ff, 0xc90c,		0x21, 0
+	.dw 0xaa40, 0xc90c,	0xaa7f, 0xc90c,		0x21, 0
+	.dw 0xaac0, 0xc90c,	0xaaff, 0xc90c,		0x21, 0
+	.dw 0xab40, 0xc90c,	0xab7f, 0xc90c,		0x21, 0
+	.dw 0xabc0, 0xc90c,	0xabff, 0xc90c,		0x21, 0
+	.dw 0xac40, 0xc90c,	0xac7f, 0xc90c,		0x21, 0
+	.dw 0xacc0, 0xc90c,	0xacff, 0xc90c,		0x21, 0
+	.dw 0xad40, 0xc90c,	0xad7f, 0xc90c,		0x21, 0
+	.dw 0xadc0, 0xc90c,	0xadff, 0xc90c,		0x21, 0
+	.dw 0xae40, 0xc90c,	0xae7f, 0xc90c,		0x21, 0
+	.dw 0xaec0, 0xc90c,	0xaeff, 0xc90c,		0x21, 0
+	.dw 0xaf40, 0xc90c,	0xaf7f, 0xc90c,		0x21, 0
+	.dw 0xafc0, 0xc90c,	0xafff, 0xc90c,		0x21, 0
+	.dw 0xb040, 0xc90c,	0xb07f, 0xc90c,		0x21, 0
+	.dw 0xb0c0, 0xc90c,	0xb0ff, 0xc90c,		0x21, 0
+	.dw 0xb140, 0xc90c,	0xb17f, 0xc90c,		0x21, 0
+	.dw 0xb1c0, 0xc90c,	0xb1ff, 0xc90c,		0x21, 0
+	.dw 0xb240, 0xc90c,	0xb27f, 0xc90c,		0x21, 0
+	.dw 0xb2c0, 0xc90c,	0xb2ff, 0xc90c,		0x21, 0
+	.dw 0xb340, 0xc90c,	0xb37f, 0xc90c,		0x21, 0
+	.dw 0xb3c0, 0xc90c,	0xb3ff, 0xc90c,		0x21, 0
+	.dw 0xb440, 0xc90c,	0xb47f, 0xc90c,		0x21, 0
+	.dw 0xb4c0, 0xc90c,	0xb4ff, 0xc90c,		0x21, 0
+	.dw 0xb540, 0xc90c,	0xb57f, 0xc90c,		0x21, 0
+	.dw 0xb5c0, 0xc90c,	0xb5ff, 0xc90c,		0x21, 0
+	.dw 0xb640, 0xc90c,	0xb67f, 0xc90c,		0x21, 0
+	.dw 0xb6c0, 0xc90c,	0xb6ff, 0xc90c,		0x21, 0
+	.dw 0xb740, 0xc90c,	0xb77f, 0xc90c,		0x21, 0
+	.dw 0xb7c0, 0xc90c,	0xb7ff, 0xc90c,		0x21, 0
+	.dw 0xb840, 0xc90c,	0xb87f, 0xc90c,		0x21, 0
+	.dw 0xb8c0, 0xc90c,	0xb8ff, 0xc90c,		0x21, 0
+	.dw 0xb940, 0xc90c,	0xb97f, 0xc90c,		0x21, 0
+	.dw 0xb9c0, 0xc90c,	0xbfff, 0xc90c,		0x21, 0
+	.dw 0xc040, 0xc90c,	0xc07f, 0xc90c,		0x21, 0
+	.dw 0xc0c0, 0xc90c,	0xc0ff, 0xc90c,		0x21, 0
+	.dw 0xc140, 0xc90c,	0xc17f, 0xc90c,		0x21, 0
+	.dw 0xc1c0, 0xc90c,	0xc1ff, 0xc90c,		0x21, 0
+	.dw 0xc240, 0xc90c,	0xc27f, 0xc90c,		0x21, 0
+	.dw 0xc2c0, 0xc90c,	0xc2ff, 0xc90c,		0x21, 0
+	.dw 0xc340, 0xc90c,	0xc37f, 0xc90c,		0x21, 0
+	.dw 0xc3c0, 0xc90c,	0xc3ff, 0xc90c,		0x21, 0
+	.dw 0xc440, 0xc90c,	0xc47f, 0xc90c,		0x21, 0
+	.dw 0xc4c0, 0xc90c,	0xc4ff, 0xc90c,		0x21, 0
+	.dw 0xc540, 0xc90c,	0xc57f, 0xc90c,		0x21, 0
+	.dw 0xc5c0, 0xc90c,	0xc5ff, 0xc90c,		0x21, 0
+	.dw 0xc640, 0xc90c,	0xc67f, 0xc90c,		0x21, 0
+	.dw 0xc6c0, 0xc90c,	0xc6ff, 0xc90c,		0x21, 0
+	.dw 0xc740, 0xc90c,	0xc77f, 0xc90c,		0x21, 0
+	.dw 0xc7c0, 0xc90c,	0xc7ff, 0xc90c,		0x21, 0
+	.dw 0xc840, 0xc90c,	0xc87f, 0xc90c,		0x21, 0
+	.dw 0xc8c0, 0xc90c,	0xc8ff, 0xc90c,		0x21, 0
+	.dw 0xc940, 0xc90c,	0xc97f, 0xc90c,		0x21, 0
+	.dw 0xc9c0, 0xc90c,	0xc9ff, 0xc90c,		0x21, 0
+	.dw 0xca40, 0xc90c,	0xca7f, 0xc90c,		0x21, 0
+	.dw 0xcac0, 0xc90c,	0xcaff, 0xc90c,		0x21, 0
+	.dw 0xcb40, 0xc90c,	0xcb7f, 0xc90c,		0x21, 0
+	.dw 0xcbc0, 0xc90c,	0xcbff, 0xc90c,		0x21, 0
+	.dw 0xcc40, 0xc90c,	0xcc7f, 0xc90c,		0x21, 0
+	.dw 0xccc0, 0xc90c,	0xccff, 0xc90c,		0x21, 0
+	.dw 0xcd40, 0xc90c,	0xcd7f, 0xc90c,		0x21, 0
+	.dw 0xcdc0, 0xc90c,	0xcdff, 0xc90c,		0x21, 0
+	.dw 0xce40, 0xc90c,	0xce7f, 0xc90c,		0x21, 0
+	.dw 0xcec0, 0xc90c,	0xceff, 0xc90c,		0x21, 0
+	.dw 0xcf40, 0xc90c,	0xcf7f, 0xc90c,		0x21, 0
+	.dw 0xcfc0, 0xc90c,	0xcfff, 0xc90c,		0x21, 0
+	.dw 0xd040, 0xc90c,	0xd07f, 0xc90c,		0x21, 0
+	.dw 0xd0c0, 0xc90c,	0xd0ff, 0xc90c,		0x21, 0
+	.dw 0xd140, 0xc90c,	0xd17f, 0xc90c,		0x21, 0
+	.dw 0xd1c0, 0xc90c,	0xd1ff, 0xc90c,		0x21, 0
+	.dw 0xd240, 0xc90c,	0xd27f, 0xc90c,		0x21, 0
+	.dw 0xd2c0, 0xc90c,	0xd2ff, 0xc90c,		0x21, 0
+	.dw 0xd340, 0xc90c,	0xd37f, 0xc90c,		0x21, 0
+	.dw 0xd3c0, 0xc90c,	0xd3ff, 0xc90c,		0x21, 0
+	.dw 0xd440, 0xc90c,	0xd47f, 0xc90c,		0x21, 0
+	.dw 0xd4c0, 0xc90c,	0xd4ff, 0xc90c,		0x21, 0
+	.dw 0xd540, 0xc90c,	0xd57f, 0xc90c,		0x21, 0
+	.dw 0xd5c0, 0xc90c,	0xd5ff, 0xc90c,		0x21, 0
+	.dw 0xd640, 0xc90c,	0xd67f, 0xc90c,		0x21, 0
+	.dw 0xd6c0, 0xc90c,	0xd6ff, 0xc90c,		0x21, 0
+	.dw 0xd740, 0xc90c,	0xd77f, 0xc90c,		0x21, 0
+	.dw 0xd7c0, 0xc90c,	0xd7ff, 0xc90c,		0x21, 0
+	.dw 0xd840, 0xc90c,	0xd87f, 0xc90c,		0x21, 0
+	.dw 0xd8c0, 0xc90c,	0xd8ff, 0xc90c,		0x21, 0
+	.dw 0xd940, 0xc90c,	0xd97f, 0xc90c,		0x21, 0
+	.dw 0xd9c0, 0xc90c,	0xdfff, 0xc90c,		0x21, 0
+	.dw 0xe040, 0xc90c,	0xe07f, 0xc90c,		0x21, 0
+	.dw 0xe0c0, 0xc90c,	0xe0ff, 0xc90c,		0x21, 0
+	.dw 0xe140, 0xc90c,	0xe17f, 0xc90c,		0x21, 0
+	.dw 0xe1c0, 0xc90c,	0xe1ff, 0xc90c,		0x21, 0
+	.dw 0xe240, 0xc90c,	0xe27f, 0xc90c,		0x21, 0
+	.dw 0xe2c0, 0xc90c,	0xe2ff, 0xc90c,		0x21, 0
+	.dw 0xe340, 0xc90c,	0xe37f, 0xc90c,		0x21, 0
+	.dw 0xe3c0, 0xc90c,	0xe3ff, 0xc90c,		0x21, 0
+	.dw 0xe440, 0xc90c,	0xe47f, 0xc90c,		0x21, 0
+	.dw 0xe4c0, 0xc90c,	0xe4ff, 0xc90c,		0x21, 0
+	.dw 0xe540, 0xc90c,	0xe57f, 0xc90c,		0x21, 0
+	.dw 0xe5c0, 0xc90c,	0xe5ff, 0xc90c,		0x21, 0
+	.dw 0xe640, 0xc90c,	0xe67f, 0xc90c,		0x21, 0
+	.dw 0xe6c0, 0xc90c,	0xe6ff, 0xc90c,		0x21, 0
+	.dw 0xe740, 0xc90c,	0xe77f, 0xc90c,		0x21, 0
+	.dw 0xe7c0, 0xc90c,	0xe7ff, 0xc90c,		0x21, 0
+	.dw 0xe840, 0xc90c,	0xe87f, 0xc90c,		0x21, 0
+	.dw 0xe8c0, 0xc90c,	0xe8ff, 0xc90c,		0x21, 0
+	.dw 0xe940, 0xc90c,	0xe97f, 0xc90c,		0x21, 0
+	.dw 0xe9c0, 0xc90c,	0xe9ff, 0xc90c,		0x21, 0
+	.dw 0xea40, 0xc90c,	0xea7f, 0xc90c,		0x21, 0
+	.dw 0xeac0, 0xc90c,	0xeaff, 0xc90c,		0x21, 0
+	.dw 0xeb40, 0xc90c,	0xeb7f, 0xc90c,		0x21, 0
+	.dw 0xebc0, 0xc90c,	0xebff, 0xc90c,		0x21, 0
+	.dw 0xec40, 0xc90c,	0xec7f, 0xc90c,		0x21, 0
+	.dw 0xecc0, 0xc90c,	0xecff, 0xc90c,		0x21, 0
+	.dw 0xed40, 0xc90c,	0xed7f, 0xc90c,		0x21, 0
+	.dw 0xedc0, 0xc90c,	0xedff, 0xc90c,		0x21, 0
+	.dw 0xee40, 0xc90c,	0xee7f, 0xc90c,		0x21, 0
+	.dw 0xeec0, 0xc90c,	0xeeff, 0xc90c,		0x21, 0
+	.dw 0xef40, 0xc90c,	0xef7f, 0xc90c,		0x21, 0
+	.dw 0xefc0, 0xc90c,	0xefff, 0xc90c,		0x21, 0
+	.dw 0xf040, 0xc90c,	0xf07f, 0xc90c,		0x21, 0
+	.dw 0xf0c0, 0xc90c,	0xf0ff, 0xc90c,		0x21, 0
+	.dw 0xf140, 0xc90c,	0xf17f, 0xc90c,		0x21, 0
+	.dw 0xf1c0, 0xc90c,	0xf1ff, 0xc90c,		0x21, 0
+	.dw 0xf240, 0xc90c,	0xf27f, 0xc90c,		0x21, 0
+	.dw 0xf2c0, 0xc90c,	0xf2ff, 0xc90c,		0x21, 0
+	.dw 0xf340, 0xc90c,	0xf37f, 0xc90c,		0x21, 0
+	.dw 0xf3c0, 0xc90c,	0xf3ff, 0xc90c,		0x21, 0
+	.dw 0xf440, 0xc90c,	0xf47f, 0xc90c,		0x21, 0
+	.dw 0xf4c0, 0xc90c,	0xf4ff, 0xc90c,		0x21, 0
+	.dw 0xf540, 0xc90c,	0xf57f, 0xc90c,		0x21, 0
+	.dw 0xf5c0, 0xc90c,	0xf5ff, 0xc90c,		0x21, 0
+	.dw 0xf640, 0xc90c,	0xf67f, 0xc90c,		0x21, 0
+	.dw 0xf6c0, 0xc90c,	0xf6ff, 0xc90c,		0x21, 0
+	.dw 0xf740, 0xc90c,	0xf77f, 0xc90c,		0x21, 0
+	.dw 0xf7c0, 0xc90c,	0xf7ff, 0xc90c,		0x21, 0
+	.dw 0xf840, 0xc90c,	0xf87f, 0xc90c,		0x21, 0
+	.dw 0xf8c0, 0xc90c,	0xf8ff, 0xc90c,		0x21, 0
+	.dw 0xf940, 0xc90c,	0xf97f, 0xc90c,		0x21, 0
+	.dw 0xf9c0, 0xc90c,	0xffff, 0xc90c,		0x21, 0
+	.dw 0x0040, 0xc90d,	0x007f, 0xc90d,		0x21, 0
+	.dw 0x00c0, 0xc90d,	0x00ff, 0xc90d,		0x21, 0
+	.dw 0x0140, 0xc90d,	0x017f, 0xc90d,		0x21, 0
+	.dw 0x01c0, 0xc90d,	0x01ff, 0xc90d,		0x21, 0
+	.dw 0x0240, 0xc90d,	0x027f, 0xc90d,		0x21, 0
+	.dw 0x02c0, 0xc90d,	0x02ff, 0xc90d,		0x21, 0
+	.dw 0x0340, 0xc90d,	0x037f, 0xc90d,		0x21, 0
+	.dw 0x03c0, 0xc90d,	0x03ff, 0xc90d,		0x21, 0
+	.dw 0x0440, 0xc90d,	0x047f, 0xc90d,		0x21, 0
+	.dw 0x04c0, 0xc90d,	0x04ff, 0xc90d,		0x21, 0
+	.dw 0x0540, 0xc90d,	0x057f, 0xc90d,		0x21, 0
+	.dw 0x05c0, 0xc90d,	0x05ff, 0xc90d,		0x21, 0
+	.dw 0x0640, 0xc90d,	0x067f, 0xc90d,		0x21, 0
+	.dw 0x06c0, 0xc90d,	0x06ff, 0xc90d,		0x21, 0
+	.dw 0x0740, 0xc90d,	0x077f, 0xc90d,		0x21, 0
+	.dw 0x07c0, 0xc90d,	0x07ff, 0xc90d,		0x21, 0
+	.dw 0x0840, 0xc90d,	0x087f, 0xc90d,		0x21, 0
+	.dw 0x08c0, 0xc90d,	0x08ff, 0xc90d,		0x21, 0
+	.dw 0x0940, 0xc90d,	0x097f, 0xc90d,		0x21, 0
+	.dw 0x09c0, 0xc90d,	0x09ff, 0xc90d,		0x21, 0
+	.dw 0x0a40, 0xc90d,	0x0a7f, 0xc90d,		0x21, 0
+	.dw 0x0ac0, 0xc90d,	0x0aff, 0xc90d,		0x21, 0
+	.dw 0x0b40, 0xc90d,	0x0b7f, 0xc90d,		0x21, 0
+	.dw 0x0bc0, 0xc90d,	0x0bff, 0xc90d,		0x21, 0
+	.dw 0x0c40, 0xc90d,	0x0c7f, 0xc90d,		0x21, 0
+	.dw 0x0cc0, 0xc90d,	0x0cff, 0xc90d,		0x21, 0
+	.dw 0x0d40, 0xc90d,	0x0d7f, 0xc90d,		0x21, 0
+	.dw 0x0dc0, 0xc90d,	0x0dff, 0xc90d,		0x21, 0
+	.dw 0x0e40, 0xc90d,	0x0e7f, 0xc90d,		0x21, 0
+	.dw 0x0ec0, 0xc90d,	0x0eff, 0xc90d,		0x21, 0
+	.dw 0x0f40, 0xc90d,	0x0f7f, 0xc90d,		0x21, 0
+	.dw 0x0fc0, 0xc90d,	0x0fff, 0xc90d,		0x21, 0
+	.dw 0x1040, 0xc90d,	0x107f, 0xc90d,		0x21, 0
+	.dw 0x10c0, 0xc90d,	0x10ff, 0xc90d,		0x21, 0
+	.dw 0x1140, 0xc90d,	0x117f, 0xc90d,		0x21, 0
+	.dw 0x11c0, 0xc90d,	0x11ff, 0xc90d,		0x21, 0
+	.dw 0x1240, 0xc90d,	0x127f, 0xc90d,		0x21, 0
+	.dw 0x12c0, 0xc90d,	0x12ff, 0xc90d,		0x21, 0
+	.dw 0x1340, 0xc90d,	0x137f, 0xc90d,		0x21, 0
+	.dw 0x13c0, 0xc90d,	0x13ff, 0xc90d,		0x21, 0
+	.dw 0x1440, 0xc90d,	0x147f, 0xc90d,		0x21, 0
+	.dw 0x14c0, 0xc90d,	0x14ff, 0xc90d,		0x21, 0
+	.dw 0x1540, 0xc90d,	0x157f, 0xc90d,		0x21, 0
+	.dw 0x15c0, 0xc90d,	0x15ff, 0xc90d,		0x21, 0
+	.dw 0x1640, 0xc90d,	0x167f, 0xc90d,		0x21, 0
+	.dw 0x16c0, 0xc90d,	0x16ff, 0xc90d,		0x21, 0
+	.dw 0x1740, 0xc90d,	0x177f, 0xc90d,		0x21, 0
+	.dw 0x17c0, 0xc90d,	0x17ff, 0xc90d,		0x21, 0
+	.dw 0x1840, 0xc90d,	0x187f, 0xc90d,		0x21, 0
+	.dw 0x18c0, 0xc90d,	0x18ff, 0xc90d,		0x21, 0
+	.dw 0x1940, 0xc90d,	0x197f, 0xc90d,		0x21, 0
+	.dw 0x19c0, 0xc90d,	0x1fff, 0xc90d,		0x21, 0
+	.dw 0x2040, 0xc90d,	0x207f, 0xc90d,		0x21, 0
+	.dw 0x20c0, 0xc90d,	0x20ff, 0xc90d,		0x21, 0
+	.dw 0x2140, 0xc90d,	0x217f, 0xc90d,		0x21, 0
+	.dw 0x21c0, 0xc90d,	0x21ff, 0xc90d,		0x21, 0
+	.dw 0x2240, 0xc90d,	0x227f, 0xc90d,		0x21, 0
+	.dw 0x22c0, 0xc90d,	0x22ff, 0xc90d,		0x21, 0
+	.dw 0x2340, 0xc90d,	0x237f, 0xc90d,		0x21, 0
+	.dw 0x23c0, 0xc90d,	0x23ff, 0xc90d,		0x21, 0
+	.dw 0x2440, 0xc90d,	0x247f, 0xc90d,		0x21, 0
+	.dw 0x24c0, 0xc90d,	0x24ff, 0xc90d,		0x21, 0
+	.dw 0x2540, 0xc90d,	0x257f, 0xc90d,		0x21, 0
+	.dw 0x25c0, 0xc90d,	0x25ff, 0xc90d,		0x21, 0
+	.dw 0x2640, 0xc90d,	0x267f, 0xc90d,		0x21, 0
+	.dw 0x26c0, 0xc90d,	0x26ff, 0xc90d,		0x21, 0
+	.dw 0x2740, 0xc90d,	0x277f, 0xc90d,		0x21, 0
+	.dw 0x27c0, 0xc90d,	0x27ff, 0xc90d,		0x21, 0
+	.dw 0x2840, 0xc90d,	0x287f, 0xc90d,		0x21, 0
+	.dw 0x28c0, 0xc90d,	0x28ff, 0xc90d,		0x21, 0
+	.dw 0x2940, 0xc90d,	0x297f, 0xc90d,		0x21, 0
+	.dw 0x29c0, 0xc90d,	0x29ff, 0xc90d,		0x21, 0
+	.dw 0x2a40, 0xc90d,	0x2a7f, 0xc90d,		0x21, 0
+	.dw 0x2ac0, 0xc90d,	0x2aff, 0xc90d,		0x21, 0
+	.dw 0x2b40, 0xc90d,	0x2b7f, 0xc90d,		0x21, 0
+	.dw 0x2bc0, 0xc90d,	0x2bff, 0xc90d,		0x21, 0
+	.dw 0x2c40, 0xc90d,	0x2c7f, 0xc90d,		0x21, 0
+	.dw 0x2cc0, 0xc90d,	0x2cff, 0xc90d,		0x21, 0
+	.dw 0x2d40, 0xc90d,	0x2d7f, 0xc90d,		0x21, 0
+	.dw 0x2dc0, 0xc90d,	0x2dff, 0xc90d,		0x21, 0
+	.dw 0x2e40, 0xc90d,	0x2e7f, 0xc90d,		0x21, 0
+	.dw 0x2ec0, 0xc90d,	0x2eff, 0xc90d,		0x21, 0
+	.dw 0x2f40, 0xc90d,	0x2f7f, 0xc90d,		0x21, 0
+	.dw 0x2fc0, 0xc90d,	0x2fff, 0xc90d,		0x21, 0
+	.dw 0x3040, 0xc90d,	0x307f, 0xc90d,		0x21, 0
+	.dw 0x30c0, 0xc90d,	0x30ff, 0xc90d,		0x21, 0
+	.dw 0x3140, 0xc90d,	0x317f, 0xc90d,		0x21, 0
+	.dw 0x31c0, 0xc90d,	0x31ff, 0xc90d,		0x21, 0
+	.dw 0x3240, 0xc90d,	0x327f, 0xc90d,		0x21, 0
+	.dw 0x32c0, 0xc90d,	0x32ff, 0xc90d,		0x21, 0
+	.dw 0x3340, 0xc90d,	0x337f, 0xc90d,		0x21, 0
+	.dw 0x33c0, 0xc90d,	0x33ff, 0xc90d,		0x21, 0
+	.dw 0x3440, 0xc90d,	0x347f, 0xc90d,		0x21, 0
+	.dw 0x34c0, 0xc90d,	0x34ff, 0xc90d,		0x21, 0
+	.dw 0x3540, 0xc90d,	0x357f, 0xc90d,		0x21, 0
+	.dw 0x35c0, 0xc90d,	0x35ff, 0xc90d,		0x21, 0
+	.dw 0x3640, 0xc90d,	0x367f, 0xc90d,		0x21, 0
+	.dw 0x36c0, 0xc90d,	0x36ff, 0xc90d,		0x21, 0
+	.dw 0x3740, 0xc90d,	0x377f, 0xc90d,		0x21, 0
+	.dw 0x37c0, 0xc90d,	0x37ff, 0xc90d,		0x21, 0
+	.dw 0x3840, 0xc90d,	0x387f, 0xc90d,		0x21, 0
+	.dw 0x38c0, 0xc90d,	0x38ff, 0xc90d,		0x21, 0
+	.dw 0x3940, 0xc90d,	0x397f, 0xc90d,		0x21, 0
+	.dw 0x39c0, 0xc90d,	0x3fff, 0xc90d,		0x21, 0
+	.dw 0x4040, 0xc90d,	0x407f, 0xc90d,		0x21, 0
+	.dw 0x40c0, 0xc90d,	0x40ff, 0xc90d,		0x21, 0
+	.dw 0x4140, 0xc90d,	0x417f, 0xc90d,		0x21, 0
+	.dw 0x41c0, 0xc90d,	0x41ff, 0xc90d,		0x21, 0
+	.dw 0x4240, 0xc90d,	0x427f, 0xc90d,		0x21, 0
+	.dw 0x42c0, 0xc90d,	0x42ff, 0xc90d,		0x21, 0
+	.dw 0x4340, 0xc90d,	0x437f, 0xc90d,		0x21, 0
+	.dw 0x43c0, 0xc90d,	0x43ff, 0xc90d,		0x21, 0
+	.dw 0x4440, 0xc90d,	0x447f, 0xc90d,		0x21, 0
+	.dw 0x44c0, 0xc90d,	0x44ff, 0xc90d,		0x21, 0
+	.dw 0x4540, 0xc90d,	0x457f, 0xc90d,		0x21, 0
+	.dw 0x45c0, 0xc90d,	0x45ff, 0xc90d,		0x21, 0
+	.dw 0x4640, 0xc90d,	0x467f, 0xc90d,		0x21, 0
+	.dw 0x46c0, 0xc90d,	0x46ff, 0xc90d,		0x21, 0
+	.dw 0x4740, 0xc90d,	0x477f, 0xc90d,		0x21, 0
+	.dw 0x47c0, 0xc90d,	0x47ff, 0xc90d,		0x21, 0
+	.dw 0x4840, 0xc90d,	0x487f, 0xc90d,		0x21, 0
+	.dw 0x48c0, 0xc90d,	0x48ff, 0xc90d,		0x21, 0
+	.dw 0x4940, 0xc90d,	0x497f, 0xc90d,		0x21, 0
+	.dw 0x49c0, 0xc90d,	0x49ff, 0xc90d,		0x21, 0
+	.dw 0x4a40, 0xc90d,	0x4a7f, 0xc90d,		0x21, 0
+	.dw 0x4ac0, 0xc90d,	0x4aff, 0xc90d,		0x21, 0
+	.dw 0x4b40, 0xc90d,	0x4b7f, 0xc90d,		0x21, 0
+	.dw 0x4bc0, 0xc90d,	0x4bff, 0xc90d,		0x21, 0
+	.dw 0x4c40, 0xc90d,	0x4c7f, 0xc90d,		0x21, 0
+	.dw 0x4cc0, 0xc90d,	0x4cff, 0xc90d,		0x21, 0
+	.dw 0x4d40, 0xc90d,	0x4d7f, 0xc90d,		0x21, 0
+	.dw 0x4dc0, 0xc90d,	0x4dff, 0xc90d,		0x21, 0
+	.dw 0x4e40, 0xc90d,	0x4e7f, 0xc90d,		0x21, 0
+	.dw 0x4ec0, 0xc90d,	0x4eff, 0xc90d,		0x21, 0
+	.dw 0x4f40, 0xc90d,	0x4f7f, 0xc90d,		0x21, 0
+	.dw 0x4fc0, 0xc90d,	0x4fff, 0xc90d,		0x21, 0
+	.dw 0x5040, 0xc90d,	0x507f, 0xc90d,		0x21, 0
+	.dw 0x50c0, 0xc90d,	0x50ff, 0xc90d,		0x21, 0
+	.dw 0x5140, 0xc90d,	0x517f, 0xc90d,		0x21, 0
+	.dw 0x51c0, 0xc90d,	0x51ff, 0xc90d,		0x21, 0
+	.dw 0x5240, 0xc90d,	0x527f, 0xc90d,		0x21, 0
+	.dw 0x52c0, 0xc90d,	0x52ff, 0xc90d,		0x21, 0
+	.dw 0x5340, 0xc90d,	0x537f, 0xc90d,		0x21, 0
+	.dw 0x53c0, 0xc90d,	0x53ff, 0xc90d,		0x21, 0
+	.dw 0x5440, 0xc90d,	0x547f, 0xc90d,		0x21, 0
+	.dw 0x54c0, 0xc90d,	0x54ff, 0xc90d,		0x21, 0
+	.dw 0x5540, 0xc90d,	0x557f, 0xc90d,		0x21, 0
+	.dw 0x55c0, 0xc90d,	0x55ff, 0xc90d,		0x21, 0
+	.dw 0x5640, 0xc90d,	0x567f, 0xc90d,		0x21, 0
+	.dw 0x56c0, 0xc90d,	0x56ff, 0xc90d,		0x21, 0
+	.dw 0x5740, 0xc90d,	0x577f, 0xc90d,		0x21, 0
+	.dw 0x57c0, 0xc90d,	0x57ff, 0xc90d,		0x21, 0
+	.dw 0x5840, 0xc90d,	0x587f, 0xc90d,		0x21, 0
+	.dw 0x58c0, 0xc90d,	0x58ff, 0xc90d,		0x21, 0
+	.dw 0x5940, 0xc90d,	0x597f, 0xc90d,		0x21, 0
+	.dw 0x59c0, 0xc90d,	0x5fff, 0xc90d,		0x21, 0
+	.dw 0x6040, 0xc90d,	0x607f, 0xc90d,		0x21, 0
+	.dw 0x60c0, 0xc90d,	0x60ff, 0xc90d,		0x21, 0
+	.dw 0x6140, 0xc90d,	0x617f, 0xc90d,		0x21, 0
+	.dw 0x61c0, 0xc90d,	0x61ff, 0xc90d,		0x21, 0
+	.dw 0x6240, 0xc90d,	0x627f, 0xc90d,		0x21, 0
+	.dw 0x62c0, 0xc90d,	0x62ff, 0xc90d,		0x21, 0
+	.dw 0x6340, 0xc90d,	0x637f, 0xc90d,		0x21, 0
+	.dw 0x63c0, 0xc90d,	0x63ff, 0xc90d,		0x21, 0
+	.dw 0x6440, 0xc90d,	0x647f, 0xc90d,		0x21, 0
+	.dw 0x64c0, 0xc90d,	0x64ff, 0xc90d,		0x21, 0
+	.dw 0x6540, 0xc90d,	0x657f, 0xc90d,		0x21, 0
+	.dw 0x65c0, 0xc90d,	0x65ff, 0xc90d,		0x21, 0
+	.dw 0x6640, 0xc90d,	0x667f, 0xc90d,		0x21, 0
+	.dw 0x66c0, 0xc90d,	0x66ff, 0xc90d,		0x21, 0
+	.dw 0x6740, 0xc90d,	0x677f, 0xc90d,		0x21, 0
+	.dw 0x67c0, 0xc90d,	0x67ff, 0xc90d,		0x21, 0
+	.dw 0x6840, 0xc90d,	0x687f, 0xc90d,		0x21, 0
+	.dw 0x68c0, 0xc90d,	0x68ff, 0xc90d,		0x21, 0
+	.dw 0x6940, 0xc90d,	0x697f, 0xc90d,		0x21, 0
+	.dw 0x69c0, 0xc90d,	0x69ff, 0xc90d,		0x21, 0
+	.dw 0x6a40, 0xc90d,	0x6a7f, 0xc90d,		0x21, 0
+	.dw 0x6ac0, 0xc90d,	0x6aff, 0xc90d,		0x21, 0
+	.dw 0x6b40, 0xc90d,	0x6b7f, 0xc90d,		0x21, 0
+	.dw 0x6bc0, 0xc90d,	0x6bff, 0xc90d,		0x21, 0
+	.dw 0x6c40, 0xc90d,	0x6c7f, 0xc90d,		0x21, 0
+	.dw 0x6cc0, 0xc90d,	0x6cff, 0xc90d,		0x21, 0
+	.dw 0x6d40, 0xc90d,	0x6d7f, 0xc90d,		0x21, 0
+	.dw 0x6dc0, 0xc90d,	0x6dff, 0xc90d,		0x21, 0
+	.dw 0x6e40, 0xc90d,	0x6e7f, 0xc90d,		0x21, 0
+	.dw 0x6ec0, 0xc90d,	0x6eff, 0xc90d,		0x21, 0
+	.dw 0x6f40, 0xc90d,	0x6f7f, 0xc90d,		0x21, 0
+	.dw 0x6fc0, 0xc90d,	0x6fff, 0xc90d,		0x21, 0
+	.dw 0x7040, 0xc90d,	0x707f, 0xc90d,		0x21, 0
+	.dw 0x70c0, 0xc90d,	0x70ff, 0xc90d,		0x21, 0
+	.dw 0x7140, 0xc90d,	0x717f, 0xc90d,		0x21, 0
+	.dw 0x71c0, 0xc90d,	0x71ff, 0xc90d,		0x21, 0
+	.dw 0x7240, 0xc90d,	0x727f, 0xc90d,		0x21, 0
+	.dw 0x72c0, 0xc90d,	0x72ff, 0xc90d,		0x21, 0
+	.dw 0x7340, 0xc90d,	0x737f, 0xc90d,		0x21, 0
+	.dw 0x73c0, 0xc90d,	0x73ff, 0xc90d,		0x21, 0
+	.dw 0x7440, 0xc90d,	0x747f, 0xc90d,		0x21, 0
+	.dw 0x74c0, 0xc90d,	0x74ff, 0xc90d,		0x21, 0
+	.dw 0x7540, 0xc90d,	0x757f, 0xc90d,		0x21, 0
+	.dw 0x75c0, 0xc90d,	0x75ff, 0xc90d,		0x21, 0
+	.dw 0x7640, 0xc90d,	0x767f, 0xc90d,		0x21, 0
+	.dw 0x76c0, 0xc90d,	0x76ff, 0xc90d,		0x21, 0
+	.dw 0x7740, 0xc90d,	0x777f, 0xc90d,		0x21, 0
+	.dw 0x77c0, 0xc90d,	0x77ff, 0xc90d,		0x21, 0
+	.dw 0x7840, 0xc90d,	0x787f, 0xc90d,		0x21, 0
+	.dw 0x78c0, 0xc90d,	0x78ff, 0xc90d,		0x21, 0
+	.dw 0x7940, 0xc90d,	0x797f, 0xc90d,		0x21, 0
+	.dw 0x79c0, 0xc90d,	0x7fff, 0xc90d,		0x21, 0
+	.dw 0x8040, 0xc90d,	0x807f, 0xc90d,		0x21, 0
+	.dw 0x80c0, 0xc90d,	0x80ff, 0xc90d,		0x21, 0
+	.dw 0x8140, 0xc90d,	0x817f, 0xc90d,		0x21, 0
+	.dw 0x81c0, 0xc90d,	0x81ff, 0xc90d,		0x21, 0
+	.dw 0x8240, 0xc90d,	0x827f, 0xc90d,		0x21, 0
+	.dw 0x82c0, 0xc90d,	0x82ff, 0xc90d,		0x21, 0
+	.dw 0x8340, 0xc90d,	0x837f, 0xc90d,		0x21, 0
+	.dw 0x83c0, 0xc90d,	0x83ff, 0xc90d,		0x21, 0
+	.dw 0x8440, 0xc90d,	0x847f, 0xc90d,		0x21, 0
+	.dw 0x84c0, 0xc90d,	0x84ff, 0xc90d,		0x21, 0
+	.dw 0x8540, 0xc90d,	0x857f, 0xc90d,		0x21, 0
+	.dw 0x85c0, 0xc90d,	0x85ff, 0xc90d,		0x21, 0
+	.dw 0x8640, 0xc90d,	0x867f, 0xc90d,		0x21, 0
+	.dw 0x86c0, 0xc90d,	0x86ff, 0xc90d,		0x21, 0
+	.dw 0x8740, 0xc90d,	0x877f, 0xc90d,		0x21, 0
+	.dw 0x87c0, 0xc90d,	0x87ff, 0xc90d,		0x21, 0
+	.dw 0x8840, 0xc90d,	0x887f, 0xc90d,		0x21, 0
+	.dw 0x88c0, 0xc90d,	0x88ff, 0xc90d,		0x21, 0
+	.dw 0x8940, 0xc90d,	0x897f, 0xc90d,		0x21, 0
+	.dw 0x89c0, 0xc90d,	0x89ff, 0xc90d,		0x21, 0
+	.dw 0x8a40, 0xc90d,	0x8a7f, 0xc90d,		0x21, 0
+	.dw 0x8ac0, 0xc90d,	0x8aff, 0xc90d,		0x21, 0
+	.dw 0x8b40, 0xc90d,	0x8b7f, 0xc90d,		0x21, 0
+	.dw 0x8bc0, 0xc90d,	0x8bff, 0xc90d,		0x21, 0
+	.dw 0x8c40, 0xc90d,	0x8c7f, 0xc90d,		0x21, 0
+	.dw 0x8cc0, 0xc90d,	0x8cff, 0xc90d,		0x21, 0
+	.dw 0x8d40, 0xc90d,	0x8d7f, 0xc90d,		0x21, 0
+	.dw 0x8dc0, 0xc90d,	0x8dff, 0xc90d,		0x21, 0
+	.dw 0x8e40, 0xc90d,	0x8e7f, 0xc90d,		0x21, 0
+	.dw 0x8ec0, 0xc90d,	0x8eff, 0xc90d,		0x21, 0
+	.dw 0x8f40, 0xc90d,	0x8f7f, 0xc90d,		0x21, 0
+	.dw 0x8fc0, 0xc90d,	0x8fff, 0xc90d,		0x21, 0
+	.dw 0x9040, 0xc90d,	0x907f, 0xc90d,		0x21, 0
+	.dw 0x90c0, 0xc90d,	0x90ff, 0xc90d,		0x21, 0
+	.dw 0x9140, 0xc90d,	0x917f, 0xc90d,		0x21, 0
+	.dw 0x91c0, 0xc90d,	0x91ff, 0xc90d,		0x21, 0
+	.dw 0x9240, 0xc90d,	0x927f, 0xc90d,		0x21, 0
+	.dw 0x92c0, 0xc90d,	0x92ff, 0xc90d,		0x21, 0
+	.dw 0x9340, 0xc90d,	0x937f, 0xc90d,		0x21, 0
+	.dw 0x93c0, 0xc90d,	0x93ff, 0xc90d,		0x21, 0
+	.dw 0x9440, 0xc90d,	0x947f, 0xc90d,		0x21, 0
+	.dw 0x94c0, 0xc90d,	0x94ff, 0xc90d,		0x21, 0
+	.dw 0x9540, 0xc90d,	0x957f, 0xc90d,		0x21, 0
+	.dw 0x95c0, 0xc90d,	0x95ff, 0xc90d,		0x21, 0
+	.dw 0x9640, 0xc90d,	0x967f, 0xc90d,		0x21, 0
+	.dw 0x96c0, 0xc90d,	0x96ff, 0xc90d,		0x21, 0
+	.dw 0x9740, 0xc90d,	0x977f, 0xc90d,		0x21, 0
+	.dw 0x97c0, 0xc90d,	0x97ff, 0xc90d,		0x21, 0
+	.dw 0x9840, 0xc90d,	0x987f, 0xc90d,		0x21, 0
+	.dw 0x98c0, 0xc90d,	0x98ff, 0xc90d,		0x21, 0
+	.dw 0x9940, 0xc90d,	0x997f, 0xc90d,		0x21, 0
+	.dw 0x99c0, 0xc90d,	0x9fff, 0xc90d,		0x21, 0
+	.dw 0xa040, 0xc90d,	0xa07f, 0xc90d,		0x21, 0
+	.dw 0xa0c0, 0xc90d,	0xa0ff, 0xc90d,		0x21, 0
+	.dw 0xa140, 0xc90d,	0xa17f, 0xc90d,		0x21, 0
+	.dw 0xa1c0, 0xc90d,	0xa1ff, 0xc90d,		0x21, 0
+	.dw 0xa240, 0xc90d,	0xa27f, 0xc90d,		0x21, 0
+	.dw 0xa2c0, 0xc90d,	0xa2ff, 0xc90d,		0x21, 0
+	.dw 0xa340, 0xc90d,	0xa37f, 0xc90d,		0x21, 0
+	.dw 0xa3c0, 0xc90d,	0xa3ff, 0xc90d,		0x21, 0
+	.dw 0xa440, 0xc90d,	0xa47f, 0xc90d,		0x21, 0
+	.dw 0xa4c0, 0xc90d,	0xa4ff, 0xc90d,		0x21, 0
+	.dw 0xa540, 0xc90d,	0xa57f, 0xc90d,		0x21, 0
+	.dw 0xa5c0, 0xc90d,	0xa5ff, 0xc90d,		0x21, 0
+	.dw 0xa640, 0xc90d,	0xa67f, 0xc90d,		0x21, 0
+	.dw 0xa6c0, 0xc90d,	0xa6ff, 0xc90d,		0x21, 0
+	.dw 0xa740, 0xc90d,	0xa77f, 0xc90d,		0x21, 0
+	.dw 0xa7c0, 0xc90d,	0xa7ff, 0xc90d,		0x21, 0
+	.dw 0xa840, 0xc90d,	0xa87f, 0xc90d,		0x21, 0
+	.dw 0xa8c0, 0xc90d,	0xa8ff, 0xc90d,		0x21, 0
+	.dw 0xa940, 0xc90d,	0xa97f, 0xc90d,		0x21, 0
+	.dw 0xa9c0, 0xc90d,	0xa9ff, 0xc90d,		0x21, 0
+	.dw 0xaa40, 0xc90d,	0xaa7f, 0xc90d,		0x21, 0
+	.dw 0xaac0, 0xc90d,	0xaaff, 0xc90d,		0x21, 0
+	.dw 0xab40, 0xc90d,	0xab7f, 0xc90d,		0x21, 0
+	.dw 0xabc0, 0xc90d,	0xabff, 0xc90d,		0x21, 0
+	.dw 0xac40, 0xc90d,	0xac7f, 0xc90d,		0x21, 0
+	.dw 0xacc0, 0xc90d,	0xacff, 0xc90d,		0x21, 0
+	.dw 0xad40, 0xc90d,	0xad7f, 0xc90d,		0x21, 0
+	.dw 0xadc0, 0xc90d,	0xadff, 0xc90d,		0x21, 0
+	.dw 0xae40, 0xc90d,	0xae7f, 0xc90d,		0x21, 0
+	.dw 0xaec0, 0xc90d,	0xaeff, 0xc90d,		0x21, 0
+	.dw 0xaf40, 0xc90d,	0xaf7f, 0xc90d,		0x21, 0
+	.dw 0xafc0, 0xc90d,	0xafff, 0xc90d,		0x21, 0
+	.dw 0xb040, 0xc90d,	0xb07f, 0xc90d,		0x21, 0
+	.dw 0xb0c0, 0xc90d,	0xb0ff, 0xc90d,		0x21, 0
+	.dw 0xb140, 0xc90d,	0xb17f, 0xc90d,		0x21, 0
+	.dw 0xb1c0, 0xc90d,	0xb1ff, 0xc90d,		0x21, 0
+	.dw 0xb240, 0xc90d,	0xb27f, 0xc90d,		0x21, 0
+	.dw 0xb2c0, 0xc90d,	0xb2ff, 0xc90d,		0x21, 0
+	.dw 0xb340, 0xc90d,	0xb37f, 0xc90d,		0x21, 0
+	.dw 0xb3c0, 0xc90d,	0xb3ff, 0xc90d,		0x21, 0
+	.dw 0xb440, 0xc90d,	0xb47f, 0xc90d,		0x21, 0
+	.dw 0xb4c0, 0xc90d,	0xb4ff, 0xc90d,		0x21, 0
+	.dw 0xb540, 0xc90d,	0xb57f, 0xc90d,		0x21, 0
+	.dw 0xb5c0, 0xc90d,	0xb5ff, 0xc90d,		0x21, 0
+	.dw 0xb640, 0xc90d,	0xb67f, 0xc90d,		0x21, 0
+	.dw 0xb6c0, 0xc90d,	0xb6ff, 0xc90d,		0x21, 0
+	.dw 0xb740, 0xc90d,	0xb77f, 0xc90d,		0x21, 0
+	.dw 0xb7c0, 0xc90d,	0xb7ff, 0xc90d,		0x21, 0
+	.dw 0xb840, 0xc90d,	0xb87f, 0xc90d,		0x21, 0
+	.dw 0xb8c0, 0xc90d,	0xb8ff, 0xc90d,		0x21, 0
+	.dw 0xb940, 0xc90d,	0xb97f, 0xc90d,		0x21, 0
+	.dw 0xb9c0, 0xc90d,	0xbfff, 0xc90d,		0x21, 0
+	.dw 0xc040, 0xc90d,	0xc07f, 0xc90d,		0x21, 0
+	.dw 0xc0c0, 0xc90d,	0xc0ff, 0xc90d,		0x21, 0
+	.dw 0xc140, 0xc90d,	0xc17f, 0xc90d,		0x21, 0
+	.dw 0xc1c0, 0xc90d,	0xc1ff, 0xc90d,		0x21, 0
+	.dw 0xc240, 0xc90d,	0xc27f, 0xc90d,		0x21, 0
+	.dw 0xc2c0, 0xc90d,	0xc2ff, 0xc90d,		0x21, 0
+	.dw 0xc340, 0xc90d,	0xc37f, 0xc90d,		0x21, 0
+	.dw 0xc3c0, 0xc90d,	0xc3ff, 0xc90d,		0x21, 0
+	.dw 0xc440, 0xc90d,	0xc47f, 0xc90d,		0x21, 0
+	.dw 0xc4c0, 0xc90d,	0xc4ff, 0xc90d,		0x21, 0
+	.dw 0xc540, 0xc90d,	0xc57f, 0xc90d,		0x21, 0
+	.dw 0xc5c0, 0xc90d,	0xc5ff, 0xc90d,		0x21, 0
+	.dw 0xc640, 0xc90d,	0xc67f, 0xc90d,		0x21, 0
+	.dw 0xc6c0, 0xc90d,	0xc6ff, 0xc90d,		0x21, 0
+	.dw 0xc740, 0xc90d,	0xc77f, 0xc90d,		0x21, 0
+	.dw 0xc7c0, 0xc90d,	0xc7ff, 0xc90d,		0x21, 0
+	.dw 0xc840, 0xc90d,	0xc87f, 0xc90d,		0x21, 0
+	.dw 0xc8c0, 0xc90d,	0xc8ff, 0xc90d,		0x21, 0
+	.dw 0xc940, 0xc90d,	0xc97f, 0xc90d,		0x21, 0
+	.dw 0xc9c0, 0xc90d,	0xc9ff, 0xc90d,		0x21, 0
+	.dw 0xca40, 0xc90d,	0xca7f, 0xc90d,		0x21, 0
+	.dw 0xcac0, 0xc90d,	0xcaff, 0xc90d,		0x21, 0
+	.dw 0xcb40, 0xc90d,	0xcb7f, 0xc90d,		0x21, 0
+	.dw 0xcbc0, 0xc90d,	0xcbff, 0xc90d,		0x21, 0
+	.dw 0xcc40, 0xc90d,	0xcc7f, 0xc90d,		0x21, 0
+	.dw 0xccc0, 0xc90d,	0xccff, 0xc90d,		0x21, 0
+	.dw 0xcd40, 0xc90d,	0xcd7f, 0xc90d,		0x21, 0
+	.dw 0xcdc0, 0xc90d,	0xcdff, 0xc90d,		0x21, 0
+	.dw 0xce40, 0xc90d,	0xce7f, 0xc90d,		0x21, 0
+	.dw 0xcec0, 0xc90d,	0xceff, 0xc90d,		0x21, 0
+	.dw 0xcf40, 0xc90d,	0xcf7f, 0xc90d,		0x21, 0
+	.dw 0xcfc0, 0xc90d,	0xcfff, 0xc90d,		0x21, 0
+	.dw 0xd040, 0xc90d,	0xd07f, 0xc90d,		0x21, 0
+	.dw 0xd0c0, 0xc90d,	0xd0ff, 0xc90d,		0x21, 0
+	.dw 0xd140, 0xc90d,	0xd17f, 0xc90d,		0x21, 0
+	.dw 0xd1c0, 0xc90d,	0xd1ff, 0xc90d,		0x21, 0
+	.dw 0xd240, 0xc90d,	0xd27f, 0xc90d,		0x21, 0
+	.dw 0xd2c0, 0xc90d,	0xd2ff, 0xc90d,		0x21, 0
+	.dw 0xd340, 0xc90d,	0xd37f, 0xc90d,		0x21, 0
+	.dw 0xd3c0, 0xc90d,	0xd3ff, 0xc90d,		0x21, 0
+	.dw 0xd440, 0xc90d,	0xd47f, 0xc90d,		0x21, 0
+	.dw 0xd4c0, 0xc90d,	0xd4ff, 0xc90d,		0x21, 0
+	.dw 0xd540, 0xc90d,	0xd57f, 0xc90d,		0x21, 0
+	.dw 0xd5c0, 0xc90d,	0xd5ff, 0xc90d,		0x21, 0
+	.dw 0xd640, 0xc90d,	0xd67f, 0xc90d,		0x21, 0
+	.dw 0xd6c0, 0xc90d,	0xd6ff, 0xc90d,		0x21, 0
+	.dw 0xd740, 0xc90d,	0xd77f, 0xc90d,		0x21, 0
+	.dw 0xd7c0, 0xc90d,	0xd7ff, 0xc90d,		0x21, 0
+	.dw 0xd840, 0xc90d,	0xd87f, 0xc90d,		0x21, 0
+	.dw 0xd8c0, 0xc90d,	0xd8ff, 0xc90d,		0x21, 0
+	.dw 0xd940, 0xc90d,	0xd97f, 0xc90d,		0x21, 0
+	.dw 0xd9c0, 0xc90d,	0xdfff, 0xc90d,		0x21, 0
+	.dw 0xe040, 0xc90d,	0xe07f, 0xc90d,		0x21, 0
+	.dw 0xe0c0, 0xc90d,	0xe0ff, 0xc90d,		0x21, 0
+	.dw 0xe140, 0xc90d,	0xe17f, 0xc90d,		0x21, 0
+	.dw 0xe1c0, 0xc90d,	0xe1ff, 0xc90d,		0x21, 0
+	.dw 0xe240, 0xc90d,	0xe27f, 0xc90d,		0x21, 0
+	.dw 0xe2c0, 0xc90d,	0xe2ff, 0xc90d,		0x21, 0
+	.dw 0xe340, 0xc90d,	0xe37f, 0xc90d,		0x21, 0
+	.dw 0xe3c0, 0xc90d,	0xe3ff, 0xc90d,		0x21, 0
+	.dw 0xe440, 0xc90d,	0xe47f, 0xc90d,		0x21, 0
+	.dw 0xe4c0, 0xc90d,	0xe4ff, 0xc90d,		0x21, 0
+	.dw 0xe540, 0xc90d,	0xe57f, 0xc90d,		0x21, 0
+	.dw 0xe5c0, 0xc90d,	0xe5ff, 0xc90d,		0x21, 0
+	.dw 0xe640, 0xc90d,	0xe67f, 0xc90d,		0x21, 0
+	.dw 0xe6c0, 0xc90d,	0xe6ff, 0xc90d,		0x21, 0
+	.dw 0xe740, 0xc90d,	0xe77f, 0xc90d,		0x21, 0
+	.dw 0xe7c0, 0xc90d,	0xe7ff, 0xc90d,		0x21, 0
+	.dw 0xe840, 0xc90d,	0xe87f, 0xc90d,		0x21, 0
+	.dw 0xe8c0, 0xc90d,	0xe8ff, 0xc90d,		0x21, 0
+	.dw 0xe940, 0xc90d,	0xe97f, 0xc90d,		0x21, 0
+	.dw 0xe9c0, 0xc90d,	0xe9ff, 0xc90d,		0x21, 0
+	.dw 0xea40, 0xc90d,	0xea7f, 0xc90d,		0x21, 0
+	.dw 0xeac0, 0xc90d,	0xeaff, 0xc90d,		0x21, 0
+	.dw 0xeb40, 0xc90d,	0xeb7f, 0xc90d,		0x21, 0
+	.dw 0xebc0, 0xc90d,	0xebff, 0xc90d,		0x21, 0
+	.dw 0xec40, 0xc90d,	0xec7f, 0xc90d,		0x21, 0
+	.dw 0xecc0, 0xc90d,	0xecff, 0xc90d,		0x21, 0
+	.dw 0xed40, 0xc90d,	0xed7f, 0xc90d,		0x21, 0
+	.dw 0xedc0, 0xc90d,	0xedff, 0xc90d,		0x21, 0
+	.dw 0xee40, 0xc90d,	0xee7f, 0xc90d,		0x21, 0
+	.dw 0xeec0, 0xc90d,	0xeeff, 0xc90d,		0x21, 0
+	.dw 0xef40, 0xc90d,	0xef7f, 0xc90d,		0x21, 0
+	.dw 0xefc0, 0xc90d,	0xefff, 0xc90d,		0x21, 0
+	.dw 0xf040, 0xc90d,	0xf07f, 0xc90d,		0x21, 0
+	.dw 0xf0c0, 0xc90d,	0xf0ff, 0xc90d,		0x21, 0
+	.dw 0xf140, 0xc90d,	0xf17f, 0xc90d,		0x21, 0
+	.dw 0xf1c0, 0xc90d,	0xf1ff, 0xc90d,		0x21, 0
+	.dw 0xf240, 0xc90d,	0xf27f, 0xc90d,		0x21, 0
+	.dw 0xf2c0, 0xc90d,	0xf2ff, 0xc90d,		0x21, 0
+	.dw 0xf340, 0xc90d,	0xf37f, 0xc90d,		0x21, 0
+	.dw 0xf3c0, 0xc90d,	0xf3ff, 0xc90d,		0x21, 0
+	.dw 0xf440, 0xc90d,	0xf47f, 0xc90d,		0x21, 0
+	.dw 0xf4c0, 0xc90d,	0xf4ff, 0xc90d,		0x21, 0
+	.dw 0xf540, 0xc90d,	0xf57f, 0xc90d,		0x21, 0
+	.dw 0xf5c0, 0xc90d,	0xf5ff, 0xc90d,		0x21, 0
+	.dw 0xf640, 0xc90d,	0xf67f, 0xc90d,		0x21, 0
+	.dw 0xf6c0, 0xc90d,	0xf6ff, 0xc90d,		0x21, 0
+	.dw 0xf740, 0xc90d,	0xf77f, 0xc90d,		0x21, 0
+	.dw 0xf7c0, 0xc90d,	0xf7ff, 0xc90d,		0x21, 0
+	.dw 0xf840, 0xc90d,	0xf87f, 0xc90d,		0x21, 0
+	.dw 0xf8c0, 0xc90d,	0xf8ff, 0xc90d,		0x21, 0
+	.dw 0xf940, 0xc90d,	0xf97f, 0xc90d,		0x21, 0
+	.dw 0xf9c0, 0xc90d,	0xffff, 0xc90d,		0x21, 0
+	.dw 0x0040, 0xc90e,	0x007f, 0xc90e,		0x21, 0
+	.dw 0x00c0, 0xc90e,	0x00ff, 0xc90e,		0x21, 0
+	.dw 0x0140, 0xc90e,	0x017f, 0xc90e,		0x21, 0
+	.dw 0x01c0, 0xc90e,	0x01ff, 0xc90e,		0x21, 0
+	.dw 0x0240, 0xc90e,	0x027f, 0xc90e,		0x21, 0
+	.dw 0x02c0, 0xc90e,	0x02ff, 0xc90e,		0x21, 0
+	.dw 0x0340, 0xc90e,	0x037f, 0xc90e,		0x21, 0
+	.dw 0x03c0, 0xc90e,	0x03ff, 0xc90e,		0x21, 0
+	.dw 0x0440, 0xc90e,	0x047f, 0xc90e,		0x21, 0
+	.dw 0x04c0, 0xc90e,	0x04ff, 0xc90e,		0x21, 0
+	.dw 0x0540, 0xc90e,	0x057f, 0xc90e,		0x21, 0
+	.dw 0x05c0, 0xc90e,	0x05ff, 0xc90e,		0x21, 0
+	.dw 0x0640, 0xc90e,	0x067f, 0xc90e,		0x21, 0
+	.dw 0x06c0, 0xc90e,	0x06ff, 0xc90e,		0x21, 0
+	.dw 0x0740, 0xc90e,	0x077f, 0xc90e,		0x21, 0
+	.dw 0x07c0, 0xc90e,	0x07ff, 0xc90e,		0x21, 0
+	.dw 0x0840, 0xc90e,	0x087f, 0xc90e,		0x21, 0
+	.dw 0x08c0, 0xc90e,	0x08ff, 0xc90e,		0x21, 0
+	.dw 0x0940, 0xc90e,	0x097f, 0xc90e,		0x21, 0
+	.dw 0x09c0, 0xc90e,	0x09ff, 0xc90e,		0x21, 0
+	.dw 0x0a40, 0xc90e,	0x0a7f, 0xc90e,		0x21, 0
+	.dw 0x0ac0, 0xc90e,	0x0aff, 0xc90e,		0x21, 0
+	.dw 0x0b40, 0xc90e,	0x0b7f, 0xc90e,		0x21, 0
+	.dw 0x0bc0, 0xc90e,	0x0bff, 0xc90e,		0x21, 0
+	.dw 0x0c40, 0xc90e,	0x0c7f, 0xc90e,		0x21, 0
+	.dw 0x0cc0, 0xc90e,	0x0cff, 0xc90e,		0x21, 0
+	.dw 0x0d40, 0xc90e,	0x0d7f, 0xc90e,		0x21, 0
+	.dw 0x0dc0, 0xc90e,	0x0dff, 0xc90e,		0x21, 0
+	.dw 0x0e40, 0xc90e,	0x0e7f, 0xc90e,		0x21, 0
+	.dw 0x0ec0, 0xc90e,	0x0eff, 0xc90e,		0x21, 0
+	.dw 0x0f40, 0xc90e,	0x0f7f, 0xc90e,		0x21, 0
+	.dw 0x0fc0, 0xc90e,	0x0fff, 0xc90e,		0x21, 0
+	.dw 0x1040, 0xc90e,	0x107f, 0xc90e,		0x21, 0
+	.dw 0x10c0, 0xc90e,	0x10ff, 0xc90e,		0x21, 0
+	.dw 0x1140, 0xc90e,	0x117f, 0xc90e,		0x21, 0
+	.dw 0x11c0, 0xc90e,	0x11ff, 0xc90e,		0x21, 0
+	.dw 0x1240, 0xc90e,	0x127f, 0xc90e,		0x21, 0
+	.dw 0x12c0, 0xc90e,	0x12ff, 0xc90e,		0x21, 0
+	.dw 0x1340, 0xc90e,	0x137f, 0xc90e,		0x21, 0
+	.dw 0x13c0, 0xc90e,	0x13ff, 0xc90e,		0x21, 0
+	.dw 0x1440, 0xc90e,	0x147f, 0xc90e,		0x21, 0
+	.dw 0x14c0, 0xc90e,	0x14ff, 0xc90e,		0x21, 0
+	.dw 0x1540, 0xc90e,	0x157f, 0xc90e,		0x21, 0
+	.dw 0x15c0, 0xc90e,	0x15ff, 0xc90e,		0x21, 0
+	.dw 0x1640, 0xc90e,	0x167f, 0xc90e,		0x21, 0
+	.dw 0x16c0, 0xc90e,	0x16ff, 0xc90e,		0x21, 0
+	.dw 0x1740, 0xc90e,	0x177f, 0xc90e,		0x21, 0
+	.dw 0x17c0, 0xc90e,	0x17ff, 0xc90e,		0x21, 0
+	.dw 0x1840, 0xc90e,	0x187f, 0xc90e,		0x21, 0
+	.dw 0x18c0, 0xc90e,	0x18ff, 0xc90e,		0x21, 0
+	.dw 0x1940, 0xc90e,	0x197f, 0xc90e,		0x21, 0
+	.dw 0x19c0, 0xc90e,	0x1fff, 0xc90e,		0x21, 0
+	.dw 0x2040, 0xc90e,	0x207f, 0xc90e,		0x21, 0
+	.dw 0x20c0, 0xc90e,	0x20ff, 0xc90e,		0x21, 0
+	.dw 0x2140, 0xc90e,	0x217f, 0xc90e,		0x21, 0
+	.dw 0x21c0, 0xc90e,	0x21ff, 0xc90e,		0x21, 0
+	.dw 0x2240, 0xc90e,	0x227f, 0xc90e,		0x21, 0
+	.dw 0x22c0, 0xc90e,	0x22ff, 0xc90e,		0x21, 0
+	.dw 0x2340, 0xc90e,	0x237f, 0xc90e,		0x21, 0
+	.dw 0x23c0, 0xc90e,	0x23ff, 0xc90e,		0x21, 0
+	.dw 0x2440, 0xc90e,	0x247f, 0xc90e,		0x21, 0
+	.dw 0x24c0, 0xc90e,	0x24ff, 0xc90e,		0x21, 0
+	.dw 0x2540, 0xc90e,	0x257f, 0xc90e,		0x21, 0
+	.dw 0x25c0, 0xc90e,	0x25ff, 0xc90e,		0x21, 0
+	.dw 0x2640, 0xc90e,	0x267f, 0xc90e,		0x21, 0
+	.dw 0x26c0, 0xc90e,	0x26ff, 0xc90e,		0x21, 0
+	.dw 0x2740, 0xc90e,	0x277f, 0xc90e,		0x21, 0
+	.dw 0x27c0, 0xc90e,	0x27ff, 0xc90e,		0x21, 0
+	.dw 0x2840, 0xc90e,	0x287f, 0xc90e,		0x21, 0
+	.dw 0x28c0, 0xc90e,	0x28ff, 0xc90e,		0x21, 0
+	.dw 0x2940, 0xc90e,	0x297f, 0xc90e,		0x21, 0
+	.dw 0x29c0, 0xc90e,	0x29ff, 0xc90e,		0x21, 0
+	.dw 0x2a40, 0xc90e,	0x2a7f, 0xc90e,		0x21, 0
+	.dw 0x2ac0, 0xc90e,	0x2aff, 0xc90e,		0x21, 0
+	.dw 0x2b40, 0xc90e,	0x2b7f, 0xc90e,		0x21, 0
+	.dw 0x2bc0, 0xc90e,	0x2bff, 0xc90e,		0x21, 0
+	.dw 0x2c40, 0xc90e,	0x2c7f, 0xc90e,		0x21, 0
+	.dw 0x2cc0, 0xc90e,	0x2cff, 0xc90e,		0x21, 0
+	.dw 0x2d40, 0xc90e,	0x2d7f, 0xc90e,		0x21, 0
+	.dw 0x2dc0, 0xc90e,	0x2dff, 0xc90e,		0x21, 0
+	.dw 0x2e40, 0xc90e,	0x2e7f, 0xc90e,		0x21, 0
+	.dw 0x2ec0, 0xc90e,	0x2eff, 0xc90e,		0x21, 0
+	.dw 0x2f40, 0xc90e,	0x2f7f, 0xc90e,		0x21, 0
+	.dw 0x2fc0, 0xc90e,	0x2fff, 0xc90e,		0x21, 0
+	.dw 0x3040, 0xc90e,	0x307f, 0xc90e,		0x21, 0
+	.dw 0x30c0, 0xc90e,	0x30ff, 0xc90e,		0x21, 0
+	.dw 0x3140, 0xc90e,	0x317f, 0xc90e,		0x21, 0
+	.dw 0x31c0, 0xc90e,	0x31ff, 0xc90e,		0x21, 0
+	.dw 0x3240, 0xc90e,	0x327f, 0xc90e,		0x21, 0
+	.dw 0x32c0, 0xc90e,	0x32ff, 0xc90e,		0x21, 0
+	.dw 0x3340, 0xc90e,	0x337f, 0xc90e,		0x21, 0
+	.dw 0x33c0, 0xc90e,	0x33ff, 0xc90e,		0x21, 0
+	.dw 0x3440, 0xc90e,	0x347f, 0xc90e,		0x21, 0
+	.dw 0x34c0, 0xc90e,	0x34ff, 0xc90e,		0x21, 0
+	.dw 0x3540, 0xc90e,	0x357f, 0xc90e,		0x21, 0
+	.dw 0x35c0, 0xc90e,	0x35ff, 0xc90e,		0x21, 0
+	.dw 0x3640, 0xc90e,	0x367f, 0xc90e,		0x21, 0
+	.dw 0x36c0, 0xc90e,	0x36ff, 0xc90e,		0x21, 0
+	.dw 0x3740, 0xc90e,	0x377f, 0xc90e,		0x21, 0
+	.dw 0x37c0, 0xc90e,	0x37ff, 0xc90e,		0x21, 0
+	.dw 0x3840, 0xc90e,	0x387f, 0xc90e,		0x21, 0
+	.dw 0x38c0, 0xc90e,	0x38ff, 0xc90e,		0x21, 0
+	.dw 0x3940, 0xc90e,	0x397f, 0xc90e,		0x21, 0
+	.dw 0x39c0, 0xc90e,	0x3fff, 0xc90e,		0x21, 0
+	.dw 0x4040, 0xc90e,	0x407f, 0xc90e,		0x21, 0
+	.dw 0x40c0, 0xc90e,	0x40ff, 0xc90e,		0x21, 0
+	.dw 0x4140, 0xc90e,	0x417f, 0xc90e,		0x21, 0
+	.dw 0x41c0, 0xc90e,	0x41ff, 0xc90e,		0x21, 0
+	.dw 0x4240, 0xc90e,	0x427f, 0xc90e,		0x21, 0
+	.dw 0x42c0, 0xc90e,	0x42ff, 0xc90e,		0x21, 0
+	.dw 0x4340, 0xc90e,	0x437f, 0xc90e,		0x21, 0
+	.dw 0x43c0, 0xc90e,	0x43ff, 0xc90e,		0x21, 0
+	.dw 0x4440, 0xc90e,	0x447f, 0xc90e,		0x21, 0
+	.dw 0x44c0, 0xc90e,	0x44ff, 0xc90e,		0x21, 0
+	.dw 0x4540, 0xc90e,	0x457f, 0xc90e,		0x21, 0
+	.dw 0x45c0, 0xc90e,	0x45ff, 0xc90e,		0x21, 0
+	.dw 0x4640, 0xc90e,	0x467f, 0xc90e,		0x21, 0
+	.dw 0x46c0, 0xc90e,	0x46ff, 0xc90e,		0x21, 0
+	.dw 0x4740, 0xc90e,	0x477f, 0xc90e,		0x21, 0
+	.dw 0x47c0, 0xc90e,	0x47ff, 0xc90e,		0x21, 0
+	.dw 0x4840, 0xc90e,	0x487f, 0xc90e,		0x21, 0
+	.dw 0x48c0, 0xc90e,	0x48ff, 0xc90e,		0x21, 0
+	.dw 0x4940, 0xc90e,	0x497f, 0xc90e,		0x21, 0
+	.dw 0x49c0, 0xc90e,	0x49ff, 0xc90e,		0x21, 0
+	.dw 0x4a40, 0xc90e,	0x4a7f, 0xc90e,		0x21, 0
+	.dw 0x4ac0, 0xc90e,	0x4aff, 0xc90e,		0x21, 0
+	.dw 0x4b40, 0xc90e,	0x4b7f, 0xc90e,		0x21, 0
+	.dw 0x4bc0, 0xc90e,	0x4bff, 0xc90e,		0x21, 0
+	.dw 0x4c40, 0xc90e,	0x4c7f, 0xc90e,		0x21, 0
+	.dw 0x4cc0, 0xc90e,	0x4cff, 0xc90e,		0x21, 0
+	.dw 0x4d40, 0xc90e,	0x4d7f, 0xc90e,		0x21, 0
+	.dw 0x4dc0, 0xc90e,	0x4dff, 0xc90e,		0x21, 0
+	.dw 0x4e40, 0xc90e,	0x4e7f, 0xc90e,		0x21, 0
+	.dw 0x4ec0, 0xc90e,	0x4eff, 0xc90e,		0x21, 0
+	.dw 0x4f40, 0xc90e,	0x4f7f, 0xc90e,		0x21, 0
+	.dw 0x4fc0, 0xc90e,	0x4fff, 0xc90e,		0x21, 0
+	.dw 0x5040, 0xc90e,	0x507f, 0xc90e,		0x21, 0
+	.dw 0x50c0, 0xc90e,	0x50ff, 0xc90e,		0x21, 0
+	.dw 0x5140, 0xc90e,	0x517f, 0xc90e,		0x21, 0
+	.dw 0x51c0, 0xc90e,	0x51ff, 0xc90e,		0x21, 0
+	.dw 0x5240, 0xc90e,	0x527f, 0xc90e,		0x21, 0
+	.dw 0x52c0, 0xc90e,	0x52ff, 0xc90e,		0x21, 0
+	.dw 0x5340, 0xc90e,	0x537f, 0xc90e,		0x21, 0
+	.dw 0x53c0, 0xc90e,	0x53ff, 0xc90e,		0x21, 0
+	.dw 0x5440, 0xc90e,	0x547f, 0xc90e,		0x21, 0
+	.dw 0x54c0, 0xc90e,	0x54ff, 0xc90e,		0x21, 0
+	.dw 0x5540, 0xc90e,	0x557f, 0xc90e,		0x21, 0
+	.dw 0x55c0, 0xc90e,	0x55ff, 0xc90e,		0x21, 0
+	.dw 0x5640, 0xc90e,	0x567f, 0xc90e,		0x21, 0
+	.dw 0x56c0, 0xc90e,	0x56ff, 0xc90e,		0x21, 0
+	.dw 0x5740, 0xc90e,	0x577f, 0xc90e,		0x21, 0
+	.dw 0x57c0, 0xc90e,	0x57ff, 0xc90e,		0x21, 0
+	.dw 0x5840, 0xc90e,	0x587f, 0xc90e,		0x21, 0
+	.dw 0x58c0, 0xc90e,	0x58ff, 0xc90e,		0x21, 0
+	.dw 0x5940, 0xc90e,	0x597f, 0xc90e,		0x21, 0
+	.dw 0x59c0, 0xc90e,	0x5fff, 0xc90e,		0x21, 0
+	.dw 0x6040, 0xc90e,	0x607f, 0xc90e,		0x21, 0
+	.dw 0x60c0, 0xc90e,	0x60ff, 0xc90e,		0x21, 0
+	.dw 0x6140, 0xc90e,	0x617f, 0xc90e,		0x21, 0
+	.dw 0x61c0, 0xc90e,	0x61ff, 0xc90e,		0x21, 0
+	.dw 0x6240, 0xc90e,	0x627f, 0xc90e,		0x21, 0
+	.dw 0x62c0, 0xc90e,	0x62ff, 0xc90e,		0x21, 0
+	.dw 0x6340, 0xc90e,	0x637f, 0xc90e,		0x21, 0
+	.dw 0x63c0, 0xc90e,	0x63ff, 0xc90e,		0x21, 0
+	.dw 0x6440, 0xc90e,	0x647f, 0xc90e,		0x21, 0
+	.dw 0x64c0, 0xc90e,	0x64ff, 0xc90e,		0x21, 0
+	.dw 0x6540, 0xc90e,	0x657f, 0xc90e,		0x21, 0
+	.dw 0x65c0, 0xc90e,	0x65ff, 0xc90e,		0x21, 0
+	.dw 0x6640, 0xc90e,	0x667f, 0xc90e,		0x21, 0
+	.dw 0x66c0, 0xc90e,	0x66ff, 0xc90e,		0x21, 0
+	.dw 0x6740, 0xc90e,	0x677f, 0xc90e,		0x21, 0
+	.dw 0x67c0, 0xc90e,	0x67ff, 0xc90e,		0x21, 0
+	.dw 0x6840, 0xc90e,	0x687f, 0xc90e,		0x21, 0
+	.dw 0x68c0, 0xc90e,	0x68ff, 0xc90e,		0x21, 0
+	.dw 0x6940, 0xc90e,	0x697f, 0xc90e,		0x21, 0
+	.dw 0x69c0, 0xc90e,	0x69ff, 0xc90e,		0x21, 0
+	.dw 0x6a40, 0xc90e,	0x6a7f, 0xc90e,		0x21, 0
+	.dw 0x6ac0, 0xc90e,	0x6aff, 0xc90e,		0x21, 0
+	.dw 0x6b40, 0xc90e,	0x6b7f, 0xc90e,		0x21, 0
+	.dw 0x6bc0, 0xc90e,	0x6bff, 0xc90e,		0x21, 0
+	.dw 0x6c40, 0xc90e,	0x6c7f, 0xc90e,		0x21, 0
+	.dw 0x6cc0, 0xc90e,	0x6cff, 0xc90e,		0x21, 0
+	.dw 0x6d40, 0xc90e,	0x6d7f, 0xc90e,		0x21, 0
+	.dw 0x6dc0, 0xc90e,	0x6dff, 0xc90e,		0x21, 0
+	.dw 0x6e40, 0xc90e,	0x6e7f, 0xc90e,		0x21, 0
+	.dw 0x6ec0, 0xc90e,	0x6eff, 0xc90e,		0x21, 0
+	.dw 0x6f40, 0xc90e,	0x6f7f, 0xc90e,		0x21, 0
+	.dw 0x6fc0, 0xc90e,	0x6fff, 0xc90e,		0x21, 0
+	.dw 0x7040, 0xc90e,	0x707f, 0xc90e,		0x21, 0
+	.dw 0x70c0, 0xc90e,	0x70ff, 0xc90e,		0x21, 0
+	.dw 0x7140, 0xc90e,	0x717f, 0xc90e,		0x21, 0
+	.dw 0x71c0, 0xc90e,	0x71ff, 0xc90e,		0x21, 0
+	.dw 0x7240, 0xc90e,	0x727f, 0xc90e,		0x21, 0
+	.dw 0x72c0, 0xc90e,	0x72ff, 0xc90e,		0x21, 0
+	.dw 0x7340, 0xc90e,	0x737f, 0xc90e,		0x21, 0
+	.dw 0x73c0, 0xc90e,	0x73ff, 0xc90e,		0x21, 0
+	.dw 0x7440, 0xc90e,	0x747f, 0xc90e,		0x21, 0
+	.dw 0x74c0, 0xc90e,	0x74ff, 0xc90e,		0x21, 0
+	.dw 0x7540, 0xc90e,	0x757f, 0xc90e,		0x21, 0
+	.dw 0x75c0, 0xc90e,	0x75ff, 0xc90e,		0x21, 0
+	.dw 0x7640, 0xc90e,	0x767f, 0xc90e,		0x21, 0
+	.dw 0x76c0, 0xc90e,	0x76ff, 0xc90e,		0x21, 0
+	.dw 0x7740, 0xc90e,	0x777f, 0xc90e,		0x21, 0
+	.dw 0x77c0, 0xc90e,	0x77ff, 0xc90e,		0x21, 0
+	.dw 0x7840, 0xc90e,	0x787f, 0xc90e,		0x21, 0
+	.dw 0x78c0, 0xc90e,	0x78ff, 0xc90e,		0x21, 0
+	.dw 0x7940, 0xc90e,	0x797f, 0xc90e,		0x21, 0
+	.dw 0x79c0, 0xc90e,	0x7fff, 0xc90e,		0x21, 0
+	.dw 0x8040, 0xc90e,	0x807f, 0xc90e,		0x21, 0
+	.dw 0x80c0, 0xc90e,	0x80ff, 0xc90e,		0x21, 0
+	.dw 0x8140, 0xc90e,	0x817f, 0xc90e,		0x21, 0
+	.dw 0x81c0, 0xc90e,	0x81ff, 0xc90e,		0x21, 0
+	.dw 0x8240, 0xc90e,	0x827f, 0xc90e,		0x21, 0
+	.dw 0x82c0, 0xc90e,	0x82ff, 0xc90e,		0x21, 0
+	.dw 0x8340, 0xc90e,	0x837f, 0xc90e,		0x21, 0
+	.dw 0x83c0, 0xc90e,	0x83ff, 0xc90e,		0x21, 0
+	.dw 0x8440, 0xc90e,	0x847f, 0xc90e,		0x21, 0
+	.dw 0x84c0, 0xc90e,	0x84ff, 0xc90e,		0x21, 0
+	.dw 0x8540, 0xc90e,	0x857f, 0xc90e,		0x21, 0
+	.dw 0x85c0, 0xc90e,	0x85ff, 0xc90e,		0x21, 0
+	.dw 0x8640, 0xc90e,	0x867f, 0xc90e,		0x21, 0
+	.dw 0x86c0, 0xc90e,	0x86ff, 0xc90e,		0x21, 0
+	.dw 0x8740, 0xc90e,	0x877f, 0xc90e,		0x21, 0
+	.dw 0x87c0, 0xc90e,	0x87ff, 0xc90e,		0x21, 0
+	.dw 0x8840, 0xc90e,	0x887f, 0xc90e,		0x21, 0
+	.dw 0x88c0, 0xc90e,	0x88ff, 0xc90e,		0x21, 0
+	.dw 0x8940, 0xc90e,	0x897f, 0xc90e,		0x21, 0
+	.dw 0x89c0, 0xc90e,	0x89ff, 0xc90e,		0x21, 0
+	.dw 0x8a40, 0xc90e,	0x8a7f, 0xc90e,		0x21, 0
+	.dw 0x8ac0, 0xc90e,	0x8aff, 0xc90e,		0x21, 0
+	.dw 0x8b40, 0xc90e,	0x8b7f, 0xc90e,		0x21, 0
+	.dw 0x8bc0, 0xc90e,	0x8bff, 0xc90e,		0x21, 0
+	.dw 0x8c40, 0xc90e,	0x8c7f, 0xc90e,		0x21, 0
+	.dw 0x8cc0, 0xc90e,	0x8cff, 0xc90e,		0x21, 0
+	.dw 0x8d40, 0xc90e,	0x8d7f, 0xc90e,		0x21, 0
+	.dw 0x8dc0, 0xc90e,	0x8dff, 0xc90e,		0x21, 0
+	.dw 0x8e40, 0xc90e,	0x8e7f, 0xc90e,		0x21, 0
+	.dw 0x8ec0, 0xc90e,	0x8eff, 0xc90e,		0x21, 0
+	.dw 0x8f40, 0xc90e,	0x8f7f, 0xc90e,		0x21, 0
+	.dw 0x8fc0, 0xc90e,	0x8fff, 0xc90e,		0x21, 0
+	.dw 0x9040, 0xc90e,	0x907f, 0xc90e,		0x21, 0
+	.dw 0x90c0, 0xc90e,	0x90ff, 0xc90e,		0x21, 0
+	.dw 0x9140, 0xc90e,	0x917f, 0xc90e,		0x21, 0
+	.dw 0x91c0, 0xc90e,	0x91ff, 0xc90e,		0x21, 0
+	.dw 0x9240, 0xc90e,	0x927f, 0xc90e,		0x21, 0
+	.dw 0x92c0, 0xc90e,	0x92ff, 0xc90e,		0x21, 0
+	.dw 0x9340, 0xc90e,	0x937f, 0xc90e,		0x21, 0
+	.dw 0x93c0, 0xc90e,	0x93ff, 0xc90e,		0x21, 0
+	.dw 0x9440, 0xc90e,	0x947f, 0xc90e,		0x21, 0
+	.dw 0x94c0, 0xc90e,	0x94ff, 0xc90e,		0x21, 0
+	.dw 0x9540, 0xc90e,	0x957f, 0xc90e,		0x21, 0
+	.dw 0x95c0, 0xc90e,	0x95ff, 0xc90e,		0x21, 0
+	.dw 0x9640, 0xc90e,	0x967f, 0xc90e,		0x21, 0
+	.dw 0x96c0, 0xc90e,	0x96ff, 0xc90e,		0x21, 0
+	.dw 0x9740, 0xc90e,	0x977f, 0xc90e,		0x21, 0
+	.dw 0x97c0, 0xc90e,	0x97ff, 0xc90e,		0x21, 0
+	.dw 0x9840, 0xc90e,	0x987f, 0xc90e,		0x21, 0
+	.dw 0x98c0, 0xc90e,	0x98ff, 0xc90e,		0x21, 0
+	.dw 0x9940, 0xc90e,	0x997f, 0xc90e,		0x21, 0
+	.dw 0x99c0, 0xc90e,	0x9fff, 0xc90e,		0x21, 0
+	.dw 0xa040, 0xc90e,	0xa07f, 0xc90e,		0x21, 0
+	.dw 0xa0c0, 0xc90e,	0xa0ff, 0xc90e,		0x21, 0
+	.dw 0xa140, 0xc90e,	0xa17f, 0xc90e,		0x21, 0
+	.dw 0xa1c0, 0xc90e,	0xa1ff, 0xc90e,		0x21, 0
+	.dw 0xa240, 0xc90e,	0xa27f, 0xc90e,		0x21, 0
+	.dw 0xa2c0, 0xc90e,	0xa2ff, 0xc90e,		0x21, 0
+	.dw 0xa340, 0xc90e,	0xa37f, 0xc90e,		0x21, 0
+	.dw 0xa3c0, 0xc90e,	0xa3ff, 0xc90e,		0x21, 0
+	.dw 0xa440, 0xc90e,	0xa47f, 0xc90e,		0x21, 0
+	.dw 0xa4c0, 0xc90e,	0xa4ff, 0xc90e,		0x21, 0
+	.dw 0xa540, 0xc90e,	0xa57f, 0xc90e,		0x21, 0
+	.dw 0xa5c0, 0xc90e,	0xa5ff, 0xc90e,		0x21, 0
+	.dw 0xa640, 0xc90e,	0xa67f, 0xc90e,		0x21, 0
+	.dw 0xa6c0, 0xc90e,	0xa6ff, 0xc90e,		0x21, 0
+	.dw 0xa740, 0xc90e,	0xa77f, 0xc90e,		0x21, 0
+	.dw 0xa7c0, 0xc90e,	0xa7ff, 0xc90e,		0x21, 0
+	.dw 0xa840, 0xc90e,	0xa87f, 0xc90e,		0x21, 0
+	.dw 0xa8c0, 0xc90e,	0xa8ff, 0xc90e,		0x21, 0
+	.dw 0xa940, 0xc90e,	0xa97f, 0xc90e,		0x21, 0
+	.dw 0xa9c0, 0xc90e,	0xa9ff, 0xc90e,		0x21, 0
+	.dw 0xaa40, 0xc90e,	0xaa7f, 0xc90e,		0x21, 0
+	.dw 0xaac0, 0xc90e,	0xaaff, 0xc90e,		0x21, 0
+	.dw 0xab40, 0xc90e,	0xab7f, 0xc90e,		0x21, 0
+	.dw 0xabc0, 0xc90e,	0xabff, 0xc90e,		0x21, 0
+	.dw 0xac40, 0xc90e,	0xac7f, 0xc90e,		0x21, 0
+	.dw 0xacc0, 0xc90e,	0xacff, 0xc90e,		0x21, 0
+	.dw 0xad40, 0xc90e,	0xad7f, 0xc90e,		0x21, 0
+	.dw 0xadc0, 0xc90e,	0xadff, 0xc90e,		0x21, 0
+	.dw 0xae40, 0xc90e,	0xae7f, 0xc90e,		0x21, 0
+	.dw 0xaec0, 0xc90e,	0xaeff, 0xc90e,		0x21, 0
+	.dw 0xaf40, 0xc90e,	0xaf7f, 0xc90e,		0x21, 0
+	.dw 0xafc0, 0xc90e,	0xafff, 0xc90e,		0x21, 0
+	.dw 0xb040, 0xc90e,	0xb07f, 0xc90e,		0x21, 0
+	.dw 0xb0c0, 0xc90e,	0xb0ff, 0xc90e,		0x21, 0
+	.dw 0xb140, 0xc90e,	0xb17f, 0xc90e,		0x21, 0
+	.dw 0xb1c0, 0xc90e,	0xb1ff, 0xc90e,		0x21, 0
+	.dw 0xb240, 0xc90e,	0xb27f, 0xc90e,		0x21, 0
+	.dw 0xb2c0, 0xc90e,	0xb2ff, 0xc90e,		0x21, 0
+	.dw 0xb340, 0xc90e,	0xb37f, 0xc90e,		0x21, 0
+	.dw 0xb3c0, 0xc90e,	0xb3ff, 0xc90e,		0x21, 0
+	.dw 0xb440, 0xc90e,	0xb47f, 0xc90e,		0x21, 0
+	.dw 0xb4c0, 0xc90e,	0xb4ff, 0xc90e,		0x21, 0
+	.dw 0xb540, 0xc90e,	0xb57f, 0xc90e,		0x21, 0
+	.dw 0xb5c0, 0xc90e,	0xb5ff, 0xc90e,		0x21, 0
+	.dw 0xb640, 0xc90e,	0xb67f, 0xc90e,		0x21, 0
+	.dw 0xb6c0, 0xc90e,	0xb6ff, 0xc90e,		0x21, 0
+	.dw 0xb740, 0xc90e,	0xb77f, 0xc90e,		0x21, 0
+	.dw 0xb7c0, 0xc90e,	0xb7ff, 0xc90e,		0x21, 0
+	.dw 0xb840, 0xc90e,	0xb87f, 0xc90e,		0x21, 0
+	.dw 0xb8c0, 0xc90e,	0xb8ff, 0xc90e,		0x21, 0
+	.dw 0xb940, 0xc90e,	0xb97f, 0xc90e,		0x21, 0
+	.dw 0xb9c0, 0xc90e,	0xbfff, 0xc90e,		0x21, 0
+	.dw 0xc040, 0xc90e,	0xc07f, 0xc90e,		0x21, 0
+	.dw 0xc0c0, 0xc90e,	0xc0ff, 0xc90e,		0x21, 0
+	.dw 0xc140, 0xc90e,	0xc17f, 0xc90e,		0x21, 0
+	.dw 0xc1c0, 0xc90e,	0xc1ff, 0xc90e,		0x21, 0
+	.dw 0xc240, 0xc90e,	0xc27f, 0xc90e,		0x21, 0
+	.dw 0xc2c0, 0xc90e,	0xc2ff, 0xc90e,		0x21, 0
+	.dw 0xc340, 0xc90e,	0xc37f, 0xc90e,		0x21, 0
+	.dw 0xc3c0, 0xc90e,	0xc3ff, 0xc90e,		0x21, 0
+	.dw 0xc440, 0xc90e,	0xc47f, 0xc90e,		0x21, 0
+	.dw 0xc4c0, 0xc90e,	0xc4ff, 0xc90e,		0x21, 0
+	.dw 0xc540, 0xc90e,	0xc57f, 0xc90e,		0x21, 0
+	.dw 0xc5c0, 0xc90e,	0xc5ff, 0xc90e,		0x21, 0
+	.dw 0xc640, 0xc90e,	0xc67f, 0xc90e,		0x21, 0
+	.dw 0xc6c0, 0xc90e,	0xc6ff, 0xc90e,		0x21, 0
+	.dw 0xc740, 0xc90e,	0xc77f, 0xc90e,		0x21, 0
+	.dw 0xc7c0, 0xc90e,	0xc7ff, 0xc90e,		0x21, 0
+	.dw 0xc840, 0xc90e,	0xc87f, 0xc90e,		0x21, 0
+	.dw 0xc8c0, 0xc90e,	0xc8ff, 0xc90e,		0x21, 0
+	.dw 0xc940, 0xc90e,	0xc97f, 0xc90e,		0x21, 0
+	.dw 0xc9c0, 0xc90e,	0xc9ff, 0xc90e,		0x21, 0
+	.dw 0xca40, 0xc90e,	0xca7f, 0xc90e,		0x21, 0
+	.dw 0xcac0, 0xc90e,	0xcaff, 0xc90e,		0x21, 0
+	.dw 0xcb40, 0xc90e,	0xcb7f, 0xc90e,		0x21, 0
+	.dw 0xcbc0, 0xc90e,	0xcbff, 0xc90e,		0x21, 0
+	.dw 0xcc40, 0xc90e,	0xcc7f, 0xc90e,		0x21, 0
+	.dw 0xccc0, 0xc90e,	0xccff, 0xc90e,		0x21, 0
+	.dw 0xcd40, 0xc90e,	0xcd7f, 0xc90e,		0x21, 0
+	.dw 0xcdc0, 0xc90e,	0xcdff, 0xc90e,		0x21, 0
+	.dw 0xce40, 0xc90e,	0xce7f, 0xc90e,		0x21, 0
+	.dw 0xcec0, 0xc90e,	0xceff, 0xc90e,		0x21, 0
+	.dw 0xcf40, 0xc90e,	0xcf7f, 0xc90e,		0x21, 0
+	.dw 0xcfc0, 0xc90e,	0xcfff, 0xc90e,		0x21, 0
+	.dw 0xd040, 0xc90e,	0xd07f, 0xc90e,		0x21, 0
+	.dw 0xd0c0, 0xc90e,	0xd0ff, 0xc90e,		0x21, 0
+	.dw 0xd140, 0xc90e,	0xd17f, 0xc90e,		0x21, 0
+	.dw 0xd1c0, 0xc90e,	0xd1ff, 0xc90e,		0x21, 0
+	.dw 0xd240, 0xc90e,	0xd27f, 0xc90e,		0x21, 0
+	.dw 0xd2c0, 0xc90e,	0xd2ff, 0xc90e,		0x21, 0
+	.dw 0xd340, 0xc90e,	0xd37f, 0xc90e,		0x21, 0
+	.dw 0xd3c0, 0xc90e,	0xd3ff, 0xc90e,		0x21, 0
+	.dw 0xd440, 0xc90e,	0xd47f, 0xc90e,		0x21, 0
+	.dw 0xd4c0, 0xc90e,	0xd4ff, 0xc90e,		0x21, 0
+	.dw 0xd540, 0xc90e,	0xd57f, 0xc90e,		0x21, 0
+	.dw 0xd5c0, 0xc90e,	0xd5ff, 0xc90e,		0x21, 0
+	.dw 0xd640, 0xc90e,	0xd67f, 0xc90e,		0x21, 0
+	.dw 0xd6c0, 0xc90e,	0xd6ff, 0xc90e,		0x21, 0
+	.dw 0xd740, 0xc90e,	0xd77f, 0xc90e,		0x21, 0
+	.dw 0xd7c0, 0xc90e,	0xd7ff, 0xc90e,		0x21, 0
+	.dw 0xd840, 0xc90e,	0xd87f, 0xc90e,		0x21, 0
+	.dw 0xd8c0, 0xc90e,	0xd8ff, 0xc90e,		0x21, 0
+	.dw 0xd940, 0xc90e,	0xd97f, 0xc90e,		0x21, 0
+	.dw 0xd9c0, 0xc90e,	0xdfff, 0xc90e,		0x21, 0
+	.dw 0xe040, 0xc90e,	0xe07f, 0xc90e,		0x21, 0
+	.dw 0xe0c0, 0xc90e,	0xe0ff, 0xc90e,		0x21, 0
+	.dw 0xe140, 0xc90e,	0xe17f, 0xc90e,		0x21, 0
+	.dw 0xe1c0, 0xc90e,	0xe1ff, 0xc90e,		0x21, 0
+	.dw 0xe240, 0xc90e,	0xe27f, 0xc90e,		0x21, 0
+	.dw 0xe2c0, 0xc90e,	0xe2ff, 0xc90e,		0x21, 0
+	.dw 0xe340, 0xc90e,	0xe37f, 0xc90e,		0x21, 0
+	.dw 0xe3c0, 0xc90e,	0xe3ff, 0xc90e,		0x21, 0
+	.dw 0xe440, 0xc90e,	0xe47f, 0xc90e,		0x21, 0
+	.dw 0xe4c0, 0xc90e,	0xe4ff, 0xc90e,		0x21, 0
+	.dw 0xe540, 0xc90e,	0xe57f, 0xc90e,		0x21, 0
+	.dw 0xe5c0, 0xc90e,	0xe5ff, 0xc90e,		0x21, 0
+	.dw 0xe640, 0xc90e,	0xe67f, 0xc90e,		0x21, 0
+	.dw 0xe6c0, 0xc90e,	0xe6ff, 0xc90e,		0x21, 0
+	.dw 0xe740, 0xc90e,	0xe77f, 0xc90e,		0x21, 0
+	.dw 0xe7c0, 0xc90e,	0xe7ff, 0xc90e,		0x21, 0
+	.dw 0xe840, 0xc90e,	0xe87f, 0xc90e,		0x21, 0
+	.dw 0xe8c0, 0xc90e,	0xe8ff, 0xc90e,		0x21, 0
+	.dw 0xe940, 0xc90e,	0xe97f, 0xc90e,		0x21, 0
+	.dw 0xe9c0, 0xc90e,	0xe9ff, 0xc90e,		0x21, 0
+	.dw 0xea40, 0xc90e,	0xea7f, 0xc90e,		0x21, 0
+	.dw 0xeac0, 0xc90e,	0xeaff, 0xc90e,		0x21, 0
+	.dw 0xeb40, 0xc90e,	0xeb7f, 0xc90e,		0x21, 0
+	.dw 0xebc0, 0xc90e,	0xebff, 0xc90e,		0x21, 0
+	.dw 0xec40, 0xc90e,	0xec7f, 0xc90e,		0x21, 0
+	.dw 0xecc0, 0xc90e,	0xecff, 0xc90e,		0x21, 0
+	.dw 0xed40, 0xc90e,	0xed7f, 0xc90e,		0x21, 0
+	.dw 0xedc0, 0xc90e,	0xedff, 0xc90e,		0x21, 0
+	.dw 0xee40, 0xc90e,	0xee7f, 0xc90e,		0x21, 0
+	.dw 0xeec0, 0xc90e,	0xeeff, 0xc90e,		0x21, 0
+	.dw 0xef40, 0xc90e,	0xef7f, 0xc90e,		0x21, 0
+	.dw 0xefc0, 0xc90e,	0xefff, 0xc90e,		0x21, 0
+	.dw 0xf040, 0xc90e,	0xf07f, 0xc90e,		0x21, 0
+	.dw 0xf0c0, 0xc90e,	0xf0ff, 0xc90e,		0x21, 0
+	.dw 0xf140, 0xc90e,	0xf17f, 0xc90e,		0x21, 0
+	.dw 0xf1c0, 0xc90e,	0xf1ff, 0xc90e,		0x21, 0
+	.dw 0xf240, 0xc90e,	0xf27f, 0xc90e,		0x21, 0
+	.dw 0xf2c0, 0xc90e,	0xf2ff, 0xc90e,		0x21, 0
+	.dw 0xf340, 0xc90e,	0xf37f, 0xc90e,		0x21, 0
+	.dw 0xf3c0, 0xc90e,	0xf3ff, 0xc90e,		0x21, 0
+	.dw 0xf440, 0xc90e,	0xf47f, 0xc90e,		0x21, 0
+	.dw 0xf4c0, 0xc90e,	0xf4ff, 0xc90e,		0x21, 0
+	.dw 0xf540, 0xc90e,	0xf57f, 0xc90e,		0x21, 0
+	.dw 0xf5c0, 0xc90e,	0xf5ff, 0xc90e,		0x21, 0
+	.dw 0xf640, 0xc90e,	0xf67f, 0xc90e,		0x21, 0
+	.dw 0xf6c0, 0xc90e,	0xf6ff, 0xc90e,		0x21, 0
+	.dw 0xf740, 0xc90e,	0xf77f, 0xc90e,		0x21, 0
+	.dw 0xf7c0, 0xc90e,	0xf7ff, 0xc90e,		0x21, 0
+	.dw 0xf840, 0xc90e,	0xf87f, 0xc90e,		0x21, 0
+	.dw 0xf8c0, 0xc90e,	0xf8ff, 0xc90e,		0x21, 0
+	.dw 0xf940, 0xc90e,	0xf97f, 0xc90e,		0x21, 0
+	.dw 0xf9c0, 0xc90e,	0xffff, 0xc90e,		0x21, 0
+	.dw 0x0040, 0xc90f,	0x007f, 0xc90f,		0x21, 0
+	.dw 0x00c0, 0xc90f,	0x00ff, 0xc90f,		0x21, 0
+	.dw 0x0140, 0xc90f,	0x017f, 0xc90f,		0x21, 0
+	.dw 0x01c0, 0xc90f,	0x01ff, 0xc90f,		0x21, 0
+	.dw 0x0240, 0xc90f,	0x027f, 0xc90f,		0x21, 0
+	.dw 0x02c0, 0xc90f,	0x02ff, 0xc90f,		0x21, 0
+	.dw 0x0340, 0xc90f,	0x037f, 0xc90f,		0x21, 0
+	.dw 0x03c0, 0xc90f,	0x03ff, 0xc90f,		0x21, 0
+	.dw 0x0440, 0xc90f,	0x047f, 0xc90f,		0x21, 0
+	.dw 0x04c0, 0xc90f,	0x04ff, 0xc90f,		0x21, 0
+	.dw 0x0540, 0xc90f,	0x057f, 0xc90f,		0x21, 0
+	.dw 0x05c0, 0xc90f,	0x05ff, 0xc90f,		0x21, 0
+	.dw 0x0640, 0xc90f,	0x067f, 0xc90f,		0x21, 0
+	.dw 0x06c0, 0xc90f,	0x06ff, 0xc90f,		0x21, 0
+	.dw 0x0740, 0xc90f,	0x077f, 0xc90f,		0x21, 0
+	.dw 0x07c0, 0xc90f,	0x07ff, 0xc90f,		0x21, 0
+	.dw 0x0840, 0xc90f,	0x087f, 0xc90f,		0x21, 0
+	.dw 0x08c0, 0xc90f,	0x08ff, 0xc90f,		0x21, 0
+	.dw 0x0940, 0xc90f,	0x097f, 0xc90f,		0x21, 0
+	.dw 0x09c0, 0xc90f,	0x09ff, 0xc90f,		0x21, 0
+	.dw 0x0a40, 0xc90f,	0x0a7f, 0xc90f,		0x21, 0
+	.dw 0x0ac0, 0xc90f,	0x0aff, 0xc90f,		0x21, 0
+	.dw 0x0b40, 0xc90f,	0x0b7f, 0xc90f,		0x21, 0
+	.dw 0x0bc0, 0xc90f,	0x0bff, 0xc90f,		0x21, 0
+	.dw 0x0c40, 0xc90f,	0x0c7f, 0xc90f,		0x21, 0
+	.dw 0x0cc0, 0xc90f,	0x0cff, 0xc90f,		0x21, 0
+	.dw 0x0d40, 0xc90f,	0x0d7f, 0xc90f,		0x21, 0
+	.dw 0x0dc0, 0xc90f,	0x0dff, 0xc90f,		0x21, 0
+	.dw 0x0e40, 0xc90f,	0x0e7f, 0xc90f,		0x21, 0
+	.dw 0x0ec0, 0xc90f,	0x0eff, 0xc90f,		0x21, 0
+	.dw 0x0f40, 0xc90f,	0x0f7f, 0xc90f,		0x21, 0
+	.dw 0x0fc0, 0xc90f,	0x0fff, 0xc90f,		0x21, 0
+	.dw 0x1040, 0xc90f,	0x107f, 0xc90f,		0x21, 0
+	.dw 0x10c0, 0xc90f,	0x10ff, 0xc90f,		0x21, 0
+	.dw 0x1140, 0xc90f,	0x117f, 0xc90f,		0x21, 0
+	.dw 0x11c0, 0xc90f,	0x11ff, 0xc90f,		0x21, 0
+	.dw 0x1240, 0xc90f,	0x127f, 0xc90f,		0x21, 0
+	.dw 0x12c0, 0xc90f,	0x12ff, 0xc90f,		0x21, 0
+	.dw 0x1340, 0xc90f,	0x137f, 0xc90f,		0x21, 0
+	.dw 0x13c0, 0xc90f,	0x13ff, 0xc90f,		0x21, 0
+	.dw 0x1440, 0xc90f,	0x147f, 0xc90f,		0x21, 0
+	.dw 0x14c0, 0xc90f,	0x14ff, 0xc90f,		0x21, 0
+	.dw 0x1540, 0xc90f,	0x157f, 0xc90f,		0x21, 0
+	.dw 0x15c0, 0xc90f,	0x15ff, 0xc90f,		0x21, 0
+	.dw 0x1640, 0xc90f,	0x167f, 0xc90f,		0x21, 0
+	.dw 0x16c0, 0xc90f,	0x16ff, 0xc90f,		0x21, 0
+	.dw 0x1740, 0xc90f,	0x177f, 0xc90f,		0x21, 0
+	.dw 0x17c0, 0xc90f,	0x17ff, 0xc90f,		0x21, 0
+	.dw 0x1840, 0xc90f,	0x187f, 0xc90f,		0x21, 0
+	.dw 0x18c0, 0xc90f,	0x18ff, 0xc90f,		0x21, 0
+	.dw 0x1940, 0xc90f,	0x197f, 0xc90f,		0x21, 0
+	.dw 0x19c0, 0xc90f,	0x1fff, 0xc90f,		0x21, 0
+	.dw 0x2040, 0xc90f,	0x207f, 0xc90f,		0x21, 0
+	.dw 0x20c0, 0xc90f,	0x20ff, 0xc90f,		0x21, 0
+	.dw 0x2140, 0xc90f,	0x217f, 0xc90f,		0x21, 0
+	.dw 0x21c0, 0xc90f,	0x21ff, 0xc90f,		0x21, 0
+	.dw 0x2240, 0xc90f,	0x227f, 0xc90f,		0x21, 0
+	.dw 0x22c0, 0xc90f,	0x22ff, 0xc90f,		0x21, 0
+	.dw 0x2340, 0xc90f,	0x237f, 0xc90f,		0x21, 0
+	.dw 0x23c0, 0xc90f,	0x23ff, 0xc90f,		0x21, 0
+	.dw 0x2440, 0xc90f,	0x247f, 0xc90f,		0x21, 0
+	.dw 0x24c0, 0xc90f,	0x24ff, 0xc90f,		0x21, 0
+	.dw 0x2540, 0xc90f,	0x257f, 0xc90f,		0x21, 0
+	.dw 0x25c0, 0xc90f,	0x25ff, 0xc90f,		0x21, 0
+	.dw 0x2640, 0xc90f,	0x267f, 0xc90f,		0x21, 0
+	.dw 0x26c0, 0xc90f,	0x26ff, 0xc90f,		0x21, 0
+	.dw 0x2740, 0xc90f,	0x277f, 0xc90f,		0x21, 0
+	.dw 0x27c0, 0xc90f,	0x27ff, 0xc90f,		0x21, 0
+	.dw 0x2840, 0xc90f,	0x287f, 0xc90f,		0x21, 0
+	.dw 0x28c0, 0xc90f,	0x28ff, 0xc90f,		0x21, 0
+	.dw 0x2940, 0xc90f,	0x297f, 0xc90f,		0x21, 0
+	.dw 0x29c0, 0xc90f,	0x29ff, 0xc90f,		0x21, 0
+	.dw 0x2a40, 0xc90f,	0x2a7f, 0xc90f,		0x21, 0
+	.dw 0x2ac0, 0xc90f,	0x2aff, 0xc90f,		0x21, 0
+	.dw 0x2b40, 0xc90f,	0x2b7f, 0xc90f,		0x21, 0
+	.dw 0x2bc0, 0xc90f,	0x2bff, 0xc90f,		0x21, 0
+	.dw 0x2c40, 0xc90f,	0x2c7f, 0xc90f,		0x21, 0
+	.dw 0x2cc0, 0xc90f,	0x2cff, 0xc90f,		0x21, 0
+	.dw 0x2d40, 0xc90f,	0x2d7f, 0xc90f,		0x21, 0
+	.dw 0x2dc0, 0xc90f,	0x2dff, 0xc90f,		0x21, 0
+	.dw 0x2e40, 0xc90f,	0x2e7f, 0xc90f,		0x21, 0
+	.dw 0x2ec0, 0xc90f,	0x2eff, 0xc90f,		0x21, 0
+	.dw 0x2f40, 0xc90f,	0x2f7f, 0xc90f,		0x21, 0
+	.dw 0x2fc0, 0xc90f,	0x2fff, 0xc90f,		0x21, 0
+	.dw 0x3040, 0xc90f,	0x307f, 0xc90f,		0x21, 0
+	.dw 0x30c0, 0xc90f,	0x30ff, 0xc90f,		0x21, 0
+	.dw 0x3140, 0xc90f,	0x317f, 0xc90f,		0x21, 0
+	.dw 0x31c0, 0xc90f,	0x31ff, 0xc90f,		0x21, 0
+	.dw 0x3240, 0xc90f,	0x327f, 0xc90f,		0x21, 0
+	.dw 0x32c0, 0xc90f,	0x32ff, 0xc90f,		0x21, 0
+	.dw 0x3340, 0xc90f,	0x337f, 0xc90f,		0x21, 0
+	.dw 0x33c0, 0xc90f,	0x33ff, 0xc90f,		0x21, 0
+	.dw 0x3440, 0xc90f,	0x347f, 0xc90f,		0x21, 0
+	.dw 0x34c0, 0xc90f,	0x34ff, 0xc90f,		0x21, 0
+	.dw 0x3540, 0xc90f,	0x357f, 0xc90f,		0x21, 0
+	.dw 0x35c0, 0xc90f,	0x35ff, 0xc90f,		0x21, 0
+	.dw 0x3640, 0xc90f,	0x367f, 0xc90f,		0x21, 0
+	.dw 0x36c0, 0xc90f,	0x36ff, 0xc90f,		0x21, 0
+	.dw 0x3740, 0xc90f,	0x377f, 0xc90f,		0x21, 0
+	.dw 0x37c0, 0xc90f,	0x37ff, 0xc90f,		0x21, 0
+	.dw 0x3840, 0xc90f,	0x387f, 0xc90f,		0x21, 0
+	.dw 0x38c0, 0xc90f,	0x38ff, 0xc90f,		0x21, 0
+	.dw 0x3940, 0xc90f,	0x397f, 0xc90f,		0x21, 0
+	.dw 0x39c0, 0xc90f,	0xffff, 0xc90f,		0x21, 0
+	.dw 0x1a00, 0xc910,	0x1fff, 0xc910,		0x21, 0
+	.dw 0x3a00, 0xc910,	0x3fff, 0xc910,		0x21, 0
+	.dw 0x5a00, 0xc910,	0x5fff, 0xc910,		0x21, 0
+	.dw 0x7a00, 0xc910,	0x7fff, 0xc910,		0x21, 0
+	.dw 0x9a00, 0xc910,	0x9fff, 0xc910,		0x21, 0
+	.dw 0xba00, 0xc910,	0xbfff, 0xc910,		0x21, 0
+	.dw 0xda00, 0xc910,	0xdfff, 0xc910,		0x21, 0
+	.dw 0xfa00, 0xc910,	0xffff, 0xc910,		0x21, 0
+	.dw 0x1a00, 0xc911,	0x1fff, 0xc911,		0x21, 0
+	.dw 0x3a00, 0xc911,	0x3fff, 0xc911,		0x21, 0
+	.dw 0x5a00, 0xc911,	0x5fff, 0xc911,		0x21, 0
+	.dw 0x7a00, 0xc911,	0x7fff, 0xc911,		0x21, 0
+	.dw 0x9a00, 0xc911,	0x9fff, 0xc911,		0x21, 0
+	.dw 0xba00, 0xc911,	0xbfff, 0xc911,		0x21, 0
+	.dw 0xda00, 0xc911,	0xdfff, 0xc911,		0x21, 0
+	.dw 0xfa00, 0xc911,	0xffff, 0xc911,		0x21, 0
+	.dw 0x1a00, 0xc912,	0x1fff, 0xc912,		0x21, 0
+	.dw 0x3a00, 0xc912,	0x3fff, 0xc912,		0x21, 0
+	.dw 0x5a00, 0xc912,	0x5fff, 0xc912,		0x21, 0
+	.dw 0x7a00, 0xc912,	0x7fff, 0xc912,		0x21, 0
+	.dw 0x9a00, 0xc912,	0x9fff, 0xc912,		0x21, 0
+	.dw 0xba00, 0xc912,	0xbfff, 0xc912,		0x21, 0
+	.dw 0xda00, 0xc912,	0xdfff, 0xc912,		0x21, 0
+	.dw 0xfa00, 0xc912,	0xffff, 0xc913,		0x21, 0
+	.dw 0x1a00, 0xc914,	0x1fff, 0xc914,		0x21, 0
+	.dw 0x3a00, 0xc914,	0x3fff, 0xc914,		0x21, 0
+	.dw 0x5a00, 0xc914,	0x5fff, 0xc914,		0x21, 0
+	.dw 0x7a00, 0xc914,	0x7fff, 0xc914,		0x21, 0
+	.dw 0x9a00, 0xc914,	0x9fff, 0xc914,		0x21, 0
+	.dw 0xba00, 0xc914,	0xbfff, 0xc914,		0x21, 0
+	.dw 0xda00, 0xc914,	0xdfff, 0xc914,		0x21, 0
+	.dw 0xfa00, 0xc914,	0xffff, 0xc914,		0x21, 0
+	.dw 0x1a00, 0xc915,	0x1fff, 0xc915,		0x21, 0
+	.dw 0x3a00, 0xc915,	0x3fff, 0xc915,		0x21, 0
+	.dw 0x5a00, 0xc915,	0x5fff, 0xc915,		0x21, 0
+	.dw 0x7a00, 0xc915,	0x7fff, 0xc915,		0x21, 0
+	.dw 0x9a00, 0xc915,	0x9fff, 0xc915,		0x21, 0
+	.dw 0xba00, 0xc915,	0xbfff, 0xc915,		0x21, 0
+	.dw 0xda00, 0xc915,	0xdfff, 0xc915,		0x21, 0
+	.dw 0xfa00, 0xc915,	0xffff, 0xc915,		0x21, 0
+	.dw 0x1a00, 0xc916,	0x1fff, 0xc916,		0x21, 0
+	.dw 0x3a00, 0xc916,	0x3fff, 0xc916,		0x21, 0
+	.dw 0x5a00, 0xc916,	0x5fff, 0xc916,		0x21, 0
+	.dw 0x7a00, 0xc916,	0x7fff, 0xc916,		0x21, 0
+	.dw 0x9a00, 0xc916,	0x9fff, 0xc916,		0x21, 0
+	.dw 0xba00, 0xc916,	0xbfff, 0xc916,		0x21, 0
+	.dw 0xda00, 0xc916,	0xdfff, 0xc916,		0x21, 0
+	.dw 0xfa00, 0xc916,	0xffff, 0xc916,		0x21, 0
+	.dw 0x1a00, 0xc917,	0x1fff, 0xc917,		0x21, 0
+	.dw 0x3a00, 0xc917,	0x1fff, 0xc918,		0x21, 0
+	.dw 0x2040, 0xc918,	0x207f, 0xc918,		0x21, 0
+	.dw 0x20c0, 0xc918,	0x20ff, 0xc918,		0x21, 0
+	.dw 0x2140, 0xc918,	0x217f, 0xc918,		0x21, 0
+	.dw 0x21c0, 0xc918,	0x21ff, 0xc918,		0x21, 0
+	.dw 0x2240, 0xc918,	0x227f, 0xc918,		0x21, 0
+	.dw 0x22c0, 0xc918,	0x22ff, 0xc918,		0x21, 0
+	.dw 0x2340, 0xc918,	0x237f, 0xc918,		0x21, 0
+	.dw 0x23c0, 0xc918,	0x23ff, 0xc918,		0x21, 0
+	.dw 0x2440, 0xc918,	0x247f, 0xc918,		0x21, 0
+	.dw 0x24c0, 0xc918,	0x24ff, 0xc918,		0x21, 0
+	.dw 0x2540, 0xc918,	0x257f, 0xc918,		0x21, 0
+	.dw 0x25c0, 0xc918,	0x25ff, 0xc918,		0x21, 0
+	.dw 0x2640, 0xc918,	0x267f, 0xc918,		0x21, 0
+	.dw 0x26c0, 0xc918,	0x26ff, 0xc918,		0x21, 0
+	.dw 0x2740, 0xc918,	0x277f, 0xc918,		0x21, 0
+	.dw 0x27c0, 0xc918,	0x27ff, 0xc918,		0x21, 0
+	.dw 0x2840, 0xc918,	0x287f, 0xc918,		0x21, 0
+	.dw 0x28c0, 0xc918,	0x28ff, 0xc918,		0x21, 0
+	.dw 0x2940, 0xc918,	0x297f, 0xc918,		0x21, 0
+	.dw 0x29c0, 0xc918,	0x29ff, 0xc918,		0x21, 0
+	.dw 0x2a40, 0xc918,	0x2a7f, 0xc918,		0x21, 0
+	.dw 0x2ac0, 0xc918,	0x2aff, 0xc918,		0x21, 0
+	.dw 0x2b40, 0xc918,	0x2b7f, 0xc918,		0x21, 0
+	.dw 0x2bc0, 0xc918,	0x2bff, 0xc918,		0x21, 0
+	.dw 0x2c40, 0xc918,	0x2c7f, 0xc918,		0x21, 0
+	.dw 0x2cc0, 0xc918,	0x2cff, 0xc918,		0x21, 0
+	.dw 0x2d40, 0xc918,	0x2d7f, 0xc918,		0x21, 0
+	.dw 0x2dc0, 0xc918,	0x2dff, 0xc918,		0x21, 0
+	.dw 0x2e40, 0xc918,	0x2e7f, 0xc918,		0x21, 0
+	.dw 0x2ec0, 0xc918,	0x2eff, 0xc918,		0x21, 0
+	.dw 0x2f40, 0xc918,	0x2f7f, 0xc918,		0x21, 0
+	.dw 0x2fc0, 0xc918,	0x2fff, 0xc918,		0x21, 0
+	.dw 0x3040, 0xc918,	0x307f, 0xc918,		0x21, 0
+	.dw 0x30c0, 0xc918,	0x30ff, 0xc918,		0x21, 0
+	.dw 0x3140, 0xc918,	0x317f, 0xc918,		0x21, 0
+	.dw 0x31c0, 0xc918,	0x31ff, 0xc918,		0x21, 0
+	.dw 0x3240, 0xc918,	0x327f, 0xc918,		0x21, 0
+	.dw 0x32c0, 0xc918,	0x32ff, 0xc918,		0x21, 0
+	.dw 0x3340, 0xc918,	0x337f, 0xc918,		0x21, 0
+	.dw 0x33c0, 0xc918,	0x33ff, 0xc918,		0x21, 0
+	.dw 0x3440, 0xc918,	0x347f, 0xc918,		0x21, 0
+	.dw 0x34c0, 0xc918,	0x34ff, 0xc918,		0x21, 0
+	.dw 0x3540, 0xc918,	0x357f, 0xc918,		0x21, 0
+	.dw 0x35c0, 0xc918,	0x35ff, 0xc918,		0x21, 0
+	.dw 0x3640, 0xc918,	0x367f, 0xc918,		0x21, 0
+	.dw 0x36c0, 0xc918,	0x36ff, 0xc918,		0x21, 0
+	.dw 0x3740, 0xc918,	0x377f, 0xc918,		0x21, 0
+	.dw 0x37c0, 0xc918,	0x37ff, 0xc918,		0x21, 0
+	.dw 0x3840, 0xc918,	0x387f, 0xc918,		0x21, 0
+	.dw 0x38c0, 0xc918,	0x38ff, 0xc918,		0x21, 0
+	.dw 0x3940, 0xc918,	0x397f, 0xc918,		0x21, 0
+	.dw 0x39c0, 0xc918,	0x5fff, 0xc918,		0x21, 0
+	.dw 0x6040, 0xc918,	0x607f, 0xc918,		0x21, 0
+	.dw 0x60c0, 0xc918,	0x60ff, 0xc918,		0x21, 0
+	.dw 0x6140, 0xc918,	0x617f, 0xc918,		0x21, 0
+	.dw 0x61c0, 0xc918,	0x61ff, 0xc918,		0x21, 0
+	.dw 0x6240, 0xc918,	0x627f, 0xc918,		0x21, 0
+	.dw 0x62c0, 0xc918,	0x62ff, 0xc918,		0x21, 0
+	.dw 0x6340, 0xc918,	0x637f, 0xc918,		0x21, 0
+	.dw 0x63c0, 0xc918,	0x63ff, 0xc918,		0x21, 0
+	.dw 0x6440, 0xc918,	0x647f, 0xc918,		0x21, 0
+	.dw 0x64c0, 0xc918,	0x64ff, 0xc918,		0x21, 0
+	.dw 0x6540, 0xc918,	0x657f, 0xc918,		0x21, 0
+	.dw 0x65c0, 0xc918,	0x65ff, 0xc918,		0x21, 0
+	.dw 0x6640, 0xc918,	0x667f, 0xc918,		0x21, 0
+	.dw 0x66c0, 0xc918,	0x66ff, 0xc918,		0x21, 0
+	.dw 0x6740, 0xc918,	0x677f, 0xc918,		0x21, 0
+	.dw 0x67c0, 0xc918,	0x67ff, 0xc918,		0x21, 0
+	.dw 0x6840, 0xc918,	0x687f, 0xc918,		0x21, 0
+	.dw 0x68c0, 0xc918,	0x68ff, 0xc918,		0x21, 0
+	.dw 0x6940, 0xc918,	0x697f, 0xc918,		0x21, 0
+	.dw 0x69c0, 0xc918,	0x69ff, 0xc918,		0x21, 0
+	.dw 0x6a40, 0xc918,	0x6a7f, 0xc918,		0x21, 0
+	.dw 0x6ac0, 0xc918,	0x6aff, 0xc918,		0x21, 0
+	.dw 0x6b40, 0xc918,	0x6b7f, 0xc918,		0x21, 0
+	.dw 0x6bc0, 0xc918,	0x6bff, 0xc918,		0x21, 0
+	.dw 0x6c40, 0xc918,	0x6c7f, 0xc918,		0x21, 0
+	.dw 0x6cc0, 0xc918,	0x6cff, 0xc918,		0x21, 0
+	.dw 0x6d40, 0xc918,	0x6d7f, 0xc918,		0x21, 0
+	.dw 0x6dc0, 0xc918,	0x6dff, 0xc918,		0x21, 0
+	.dw 0x6e40, 0xc918,	0x6e7f, 0xc918,		0x21, 0
+	.dw 0x6ec0, 0xc918,	0x6eff, 0xc918,		0x21, 0
+	.dw 0x6f40, 0xc918,	0x6f7f, 0xc918,		0x21, 0
+	.dw 0x6fc0, 0xc918,	0x6fff, 0xc918,		0x21, 0
+	.dw 0x7040, 0xc918,	0x707f, 0xc918,		0x21, 0
+	.dw 0x70c0, 0xc918,	0x70ff, 0xc918,		0x21, 0
+	.dw 0x7140, 0xc918,	0x717f, 0xc918,		0x21, 0
+	.dw 0x71c0, 0xc918,	0x71ff, 0xc918,		0x21, 0
+	.dw 0x7240, 0xc918,	0x727f, 0xc918,		0x21, 0
+	.dw 0x72c0, 0xc918,	0x72ff, 0xc918,		0x21, 0
+	.dw 0x7340, 0xc918,	0x737f, 0xc918,		0x21, 0
+	.dw 0x73c0, 0xc918,	0x73ff, 0xc918,		0x21, 0
+	.dw 0x7440, 0xc918,	0x747f, 0xc918,		0x21, 0
+	.dw 0x74c0, 0xc918,	0x74ff, 0xc918,		0x21, 0
+	.dw 0x7540, 0xc918,	0x757f, 0xc918,		0x21, 0
+	.dw 0x75c0, 0xc918,	0x75ff, 0xc918,		0x21, 0
+	.dw 0x7640, 0xc918,	0x767f, 0xc918,		0x21, 0
+	.dw 0x76c0, 0xc918,	0x76ff, 0xc918,		0x21, 0
+	.dw 0x7740, 0xc918,	0x777f, 0xc918,		0x21, 0
+	.dw 0x77c0, 0xc918,	0x77ff, 0xc918,		0x21, 0
+	.dw 0x7840, 0xc918,	0x787f, 0xc918,		0x21, 0
+	.dw 0x78c0, 0xc918,	0x78ff, 0xc918,		0x21, 0
+	.dw 0x7940, 0xc918,	0x797f, 0xc918,		0x21, 0
+	.dw 0x79c0, 0xc918,	0x9fff, 0xc918,		0x21, 0
+	.dw 0xa040, 0xc918,	0xa07f, 0xc918,		0x21, 0
+	.dw 0xa0c0, 0xc918,	0xa0ff, 0xc918,		0x21, 0
+	.dw 0xa140, 0xc918,	0xa17f, 0xc918,		0x21, 0
+	.dw 0xa1c0, 0xc918,	0xa1ff, 0xc918,		0x21, 0
+	.dw 0xa240, 0xc918,	0xa27f, 0xc918,		0x21, 0
+	.dw 0xa2c0, 0xc918,	0xa2ff, 0xc918,		0x21, 0
+	.dw 0xa340, 0xc918,	0xa37f, 0xc918,		0x21, 0
+	.dw 0xa3c0, 0xc918,	0xa3ff, 0xc918,		0x21, 0
+	.dw 0xa440, 0xc918,	0xa47f, 0xc918,		0x21, 0
+	.dw 0xa4c0, 0xc918,	0xa4ff, 0xc918,		0x21, 0
+	.dw 0xa540, 0xc918,	0xa57f, 0xc918,		0x21, 0
+	.dw 0xa5c0, 0xc918,	0xa5ff, 0xc918,		0x21, 0
+	.dw 0xa640, 0xc918,	0xa67f, 0xc918,		0x21, 0
+	.dw 0xa6c0, 0xc918,	0xa6ff, 0xc918,		0x21, 0
+	.dw 0xa740, 0xc918,	0xa77f, 0xc918,		0x21, 0
+	.dw 0xa7c0, 0xc918,	0xa7ff, 0xc918,		0x21, 0
+	.dw 0xa840, 0xc918,	0xa87f, 0xc918,		0x21, 0
+	.dw 0xa8c0, 0xc918,	0xa8ff, 0xc918,		0x21, 0
+	.dw 0xa940, 0xc918,	0xa97f, 0xc918,		0x21, 0
+	.dw 0xa9c0, 0xc918,	0xa9ff, 0xc918,		0x21, 0
+	.dw 0xaa40, 0xc918,	0xaa7f, 0xc918,		0x21, 0
+	.dw 0xaac0, 0xc918,	0xaaff, 0xc918,		0x21, 0
+	.dw 0xab40, 0xc918,	0xab7f, 0xc918,		0x21, 0
+	.dw 0xabc0, 0xc918,	0xabff, 0xc918,		0x21, 0
+	.dw 0xac40, 0xc918,	0xac7f, 0xc918,		0x21, 0
+	.dw 0xacc0, 0xc918,	0xacff, 0xc918,		0x21, 0
+	.dw 0xad40, 0xc918,	0xad7f, 0xc918,		0x21, 0
+	.dw 0xadc0, 0xc918,	0xadff, 0xc918,		0x21, 0
+	.dw 0xae40, 0xc918,	0xae7f, 0xc918,		0x21, 0
+	.dw 0xaec0, 0xc918,	0xaeff, 0xc918,		0x21, 0
+	.dw 0xaf40, 0xc918,	0xaf7f, 0xc918,		0x21, 0
+	.dw 0xafc0, 0xc918,	0xafff, 0xc918,		0x21, 0
+	.dw 0xb040, 0xc918,	0xb07f, 0xc918,		0x21, 0
+	.dw 0xb0c0, 0xc918,	0xb0ff, 0xc918,		0x21, 0
+	.dw 0xb140, 0xc918,	0xb17f, 0xc918,		0x21, 0
+	.dw 0xb1c0, 0xc918,	0xb1ff, 0xc918,		0x21, 0
+	.dw 0xb240, 0xc918,	0xb27f, 0xc918,		0x21, 0
+	.dw 0xb2c0, 0xc918,	0xb2ff, 0xc918,		0x21, 0
+	.dw 0xb340, 0xc918,	0xb37f, 0xc918,		0x21, 0
+	.dw 0xb3c0, 0xc918,	0xb3ff, 0xc918,		0x21, 0
+	.dw 0xb440, 0xc918,	0xb47f, 0xc918,		0x21, 0
+	.dw 0xb4c0, 0xc918,	0xb4ff, 0xc918,		0x21, 0
+	.dw 0xb540, 0xc918,	0xb57f, 0xc918,		0x21, 0
+	.dw 0xb5c0, 0xc918,	0xb5ff, 0xc918,		0x21, 0
+	.dw 0xb640, 0xc918,	0xb67f, 0xc918,		0x21, 0
+	.dw 0xb6c0, 0xc918,	0xb6ff, 0xc918,		0x21, 0
+	.dw 0xb740, 0xc918,	0xb77f, 0xc918,		0x21, 0
+	.dw 0xb7c0, 0xc918,	0xb7ff, 0xc918,		0x21, 0
+	.dw 0xb840, 0xc918,	0xb87f, 0xc918,		0x21, 0
+	.dw 0xb8c0, 0xc918,	0xb8ff, 0xc918,		0x21, 0
+	.dw 0xb940, 0xc918,	0xb97f, 0xc918,		0x21, 0
+	.dw 0xb9c0, 0xc918,	0xdfff, 0xc918,		0x21, 0
+	.dw 0xe040, 0xc918,	0xe07f, 0xc918,		0x21, 0
+	.dw 0xe0c0, 0xc918,	0xe0ff, 0xc918,		0x21, 0
+	.dw 0xe140, 0xc918,	0xe17f, 0xc918,		0x21, 0
+	.dw 0xe1c0, 0xc918,	0xe1ff, 0xc918,		0x21, 0
+	.dw 0xe240, 0xc918,	0xe27f, 0xc918,		0x21, 0
+	.dw 0xe2c0, 0xc918,	0xe2ff, 0xc918,		0x21, 0
+	.dw 0xe340, 0xc918,	0xe37f, 0xc918,		0x21, 0
+	.dw 0xe3c0, 0xc918,	0xe3ff, 0xc918,		0x21, 0
+	.dw 0xe440, 0xc918,	0xe47f, 0xc918,		0x21, 0
+	.dw 0xe4c0, 0xc918,	0xe4ff, 0xc918,		0x21, 0
+	.dw 0xe540, 0xc918,	0xe57f, 0xc918,		0x21, 0
+	.dw 0xe5c0, 0xc918,	0xe5ff, 0xc918,		0x21, 0
+	.dw 0xe640, 0xc918,	0xe67f, 0xc918,		0x21, 0
+	.dw 0xe6c0, 0xc918,	0xe6ff, 0xc918,		0x21, 0
+	.dw 0xe740, 0xc918,	0xe77f, 0xc918,		0x21, 0
+	.dw 0xe7c0, 0xc918,	0xe7ff, 0xc918,		0x21, 0
+	.dw 0xe840, 0xc918,	0xe87f, 0xc918,		0x21, 0
+	.dw 0xe8c0, 0xc918,	0xe8ff, 0xc918,		0x21, 0
+	.dw 0xe940, 0xc918,	0xe97f, 0xc918,		0x21, 0
+	.dw 0xe9c0, 0xc918,	0xe9ff, 0xc918,		0x21, 0
+	.dw 0xea40, 0xc918,	0xea7f, 0xc918,		0x21, 0
+	.dw 0xeac0, 0xc918,	0xeaff, 0xc918,		0x21, 0
+	.dw 0xeb40, 0xc918,	0xeb7f, 0xc918,		0x21, 0
+	.dw 0xebc0, 0xc918,	0xebff, 0xc918,		0x21, 0
+	.dw 0xec40, 0xc918,	0xec7f, 0xc918,		0x21, 0
+	.dw 0xecc0, 0xc918,	0xecff, 0xc918,		0x21, 0
+	.dw 0xed40, 0xc918,	0xed7f, 0xc918,		0x21, 0
+	.dw 0xedc0, 0xc918,	0xedff, 0xc918,		0x21, 0
+	.dw 0xee40, 0xc918,	0xee7f, 0xc918,		0x21, 0
+	.dw 0xeec0, 0xc918,	0xeeff, 0xc918,		0x21, 0
+	.dw 0xef40, 0xc918,	0xef7f, 0xc918,		0x21, 0
+	.dw 0xefc0, 0xc918,	0xefff, 0xc918,		0x21, 0
+	.dw 0xf040, 0xc918,	0xf07f, 0xc918,		0x21, 0
+	.dw 0xf0c0, 0xc918,	0xf0ff, 0xc918,		0x21, 0
+	.dw 0xf140, 0xc918,	0xf17f, 0xc918,		0x21, 0
+	.dw 0xf1c0, 0xc918,	0xf1ff, 0xc918,		0x21, 0
+	.dw 0xf240, 0xc918,	0xf27f, 0xc918,		0x21, 0
+	.dw 0xf2c0, 0xc918,	0xf2ff, 0xc918,		0x21, 0
+	.dw 0xf340, 0xc918,	0xf37f, 0xc918,		0x21, 0
+	.dw 0xf3c0, 0xc918,	0xf3ff, 0xc918,		0x21, 0
+	.dw 0xf440, 0xc918,	0xf47f, 0xc918,		0x21, 0
+	.dw 0xf4c0, 0xc918,	0xf4ff, 0xc918,		0x21, 0
+	.dw 0xf540, 0xc918,	0xf57f, 0xc918,		0x21, 0
+	.dw 0xf5c0, 0xc918,	0xf5ff, 0xc918,		0x21, 0
+	.dw 0xf640, 0xc918,	0xf67f, 0xc918,		0x21, 0
+	.dw 0xf6c0, 0xc918,	0xf6ff, 0xc918,		0x21, 0
+	.dw 0xf740, 0xc918,	0xf77f, 0xc918,		0x21, 0
+	.dw 0xf7c0, 0xc918,	0xf7ff, 0xc918,		0x21, 0
+	.dw 0xf840, 0xc918,	0xf87f, 0xc918,		0x21, 0
+	.dw 0xf8c0, 0xc918,	0xf8ff, 0xc918,		0x21, 0
+	.dw 0xf940, 0xc918,	0xf97f, 0xc918,		0x21, 0
+	.dw 0xf9c0, 0xc918,	0x1fff, 0xc919,		0x21, 0
+	.dw 0x2040, 0xc919,	0x207f, 0xc919,		0x21, 0
+	.dw 0x20c0, 0xc919,	0x20ff, 0xc919,		0x21, 0
+	.dw 0x2140, 0xc919,	0x217f, 0xc919,		0x21, 0
+	.dw 0x21c0, 0xc919,	0x21ff, 0xc919,		0x21, 0
+	.dw 0x2240, 0xc919,	0x227f, 0xc919,		0x21, 0
+	.dw 0x22c0, 0xc919,	0x22ff, 0xc919,		0x21, 0
+	.dw 0x2340, 0xc919,	0x237f, 0xc919,		0x21, 0
+	.dw 0x23c0, 0xc919,	0x23ff, 0xc919,		0x21, 0
+	.dw 0x2440, 0xc919,	0x247f, 0xc919,		0x21, 0
+	.dw 0x24c0, 0xc919,	0x24ff, 0xc919,		0x21, 0
+	.dw 0x2540, 0xc919,	0x257f, 0xc919,		0x21, 0
+	.dw 0x25c0, 0xc919,	0x25ff, 0xc919,		0x21, 0
+	.dw 0x2640, 0xc919,	0x267f, 0xc919,		0x21, 0
+	.dw 0x26c0, 0xc919,	0x26ff, 0xc919,		0x21, 0
+	.dw 0x2740, 0xc919,	0x277f, 0xc919,		0x21, 0
+	.dw 0x27c0, 0xc919,	0x27ff, 0xc919,		0x21, 0
+	.dw 0x2840, 0xc919,	0x287f, 0xc919,		0x21, 0
+	.dw 0x28c0, 0xc919,	0x28ff, 0xc919,		0x21, 0
+	.dw 0x2940, 0xc919,	0x297f, 0xc919,		0x21, 0
+	.dw 0x29c0, 0xc919,	0x29ff, 0xc919,		0x21, 0
+	.dw 0x2a40, 0xc919,	0x2a7f, 0xc919,		0x21, 0
+	.dw 0x2ac0, 0xc919,	0x2aff, 0xc919,		0x21, 0
+	.dw 0x2b40, 0xc919,	0x2b7f, 0xc919,		0x21, 0
+	.dw 0x2bc0, 0xc919,	0x2bff, 0xc919,		0x21, 0
+	.dw 0x2c40, 0xc919,	0x2c7f, 0xc919,		0x21, 0
+	.dw 0x2cc0, 0xc919,	0x2cff, 0xc919,		0x21, 0
+	.dw 0x2d40, 0xc919,	0x2d7f, 0xc919,		0x21, 0
+	.dw 0x2dc0, 0xc919,	0x2dff, 0xc919,		0x21, 0
+	.dw 0x2e40, 0xc919,	0x2e7f, 0xc919,		0x21, 0
+	.dw 0x2ec0, 0xc919,	0x2eff, 0xc919,		0x21, 0
+	.dw 0x2f40, 0xc919,	0x2f7f, 0xc919,		0x21, 0
+	.dw 0x2fc0, 0xc919,	0x2fff, 0xc919,		0x21, 0
+	.dw 0x3040, 0xc919,	0x307f, 0xc919,		0x21, 0
+	.dw 0x30c0, 0xc919,	0x30ff, 0xc919,		0x21, 0
+	.dw 0x3140, 0xc919,	0x317f, 0xc919,		0x21, 0
+	.dw 0x31c0, 0xc919,	0x31ff, 0xc919,		0x21, 0
+	.dw 0x3240, 0xc919,	0x327f, 0xc919,		0x21, 0
+	.dw 0x32c0, 0xc919,	0x32ff, 0xc919,		0x21, 0
+	.dw 0x3340, 0xc919,	0x337f, 0xc919,		0x21, 0
+	.dw 0x33c0, 0xc919,	0x33ff, 0xc919,		0x21, 0
+	.dw 0x3440, 0xc919,	0x347f, 0xc919,		0x21, 0
+	.dw 0x34c0, 0xc919,	0x34ff, 0xc919,		0x21, 0
+	.dw 0x3540, 0xc919,	0x357f, 0xc919,		0x21, 0
+	.dw 0x35c0, 0xc919,	0x35ff, 0xc919,		0x21, 0
+	.dw 0x3640, 0xc919,	0x367f, 0xc919,		0x21, 0
+	.dw 0x36c0, 0xc919,	0x36ff, 0xc919,		0x21, 0
+	.dw 0x3740, 0xc919,	0x377f, 0xc919,		0x21, 0
+	.dw 0x37c0, 0xc919,	0x37ff, 0xc919,		0x21, 0
+	.dw 0x3840, 0xc919,	0x387f, 0xc919,		0x21, 0
+	.dw 0x38c0, 0xc919,	0x38ff, 0xc919,		0x21, 0
+	.dw 0x3940, 0xc919,	0x397f, 0xc919,		0x21, 0
+	.dw 0x39c0, 0xc919,	0x5fff, 0xc919,		0x21, 0
+	.dw 0x6040, 0xc919,	0x607f, 0xc919,		0x21, 0
+	.dw 0x60c0, 0xc919,	0x60ff, 0xc919,		0x21, 0
+	.dw 0x6140, 0xc919,	0x617f, 0xc919,		0x21, 0
+	.dw 0x61c0, 0xc919,	0x61ff, 0xc919,		0x21, 0
+	.dw 0x6240, 0xc919,	0x627f, 0xc919,		0x21, 0
+	.dw 0x62c0, 0xc919,	0x62ff, 0xc919,		0x21, 0
+	.dw 0x6340, 0xc919,	0x637f, 0xc919,		0x21, 0
+	.dw 0x63c0, 0xc919,	0x63ff, 0xc919,		0x21, 0
+	.dw 0x6440, 0xc919,	0x647f, 0xc919,		0x21, 0
+	.dw 0x64c0, 0xc919,	0x64ff, 0xc919,		0x21, 0
+	.dw 0x6540, 0xc919,	0x657f, 0xc919,		0x21, 0
+	.dw 0x65c0, 0xc919,	0x65ff, 0xc919,		0x21, 0
+	.dw 0x6640, 0xc919,	0x667f, 0xc919,		0x21, 0
+	.dw 0x66c0, 0xc919,	0x66ff, 0xc919,		0x21, 0
+	.dw 0x6740, 0xc919,	0x677f, 0xc919,		0x21, 0
+	.dw 0x67c0, 0xc919,	0x67ff, 0xc919,		0x21, 0
+	.dw 0x6840, 0xc919,	0x687f, 0xc919,		0x21, 0
+	.dw 0x68c0, 0xc919,	0x68ff, 0xc919,		0x21, 0
+	.dw 0x6940, 0xc919,	0x697f, 0xc919,		0x21, 0
+	.dw 0x69c0, 0xc919,	0x69ff, 0xc919,		0x21, 0
+	.dw 0x6a40, 0xc919,	0x6a7f, 0xc919,		0x21, 0
+	.dw 0x6ac0, 0xc919,	0x6aff, 0xc919,		0x21, 0
+	.dw 0x6b40, 0xc919,	0x6b7f, 0xc919,		0x21, 0
+	.dw 0x6bc0, 0xc919,	0x6bff, 0xc919,		0x21, 0
+	.dw 0x6c40, 0xc919,	0x6c7f, 0xc919,		0x21, 0
+	.dw 0x6cc0, 0xc919,	0x6cff, 0xc919,		0x21, 0
+	.dw 0x6d40, 0xc919,	0x6d7f, 0xc919,		0x21, 0
+	.dw 0x6dc0, 0xc919,	0x6dff, 0xc919,		0x21, 0
+	.dw 0x6e40, 0xc919,	0x6e7f, 0xc919,		0x21, 0
+	.dw 0x6ec0, 0xc919,	0x6eff, 0xc919,		0x21, 0
+	.dw 0x6f40, 0xc919,	0x6f7f, 0xc919,		0x21, 0
+	.dw 0x6fc0, 0xc919,	0x6fff, 0xc919,		0x21, 0
+	.dw 0x7040, 0xc919,	0x707f, 0xc919,		0x21, 0
+	.dw 0x70c0, 0xc919,	0x70ff, 0xc919,		0x21, 0
+	.dw 0x7140, 0xc919,	0x717f, 0xc919,		0x21, 0
+	.dw 0x71c0, 0xc919,	0x71ff, 0xc919,		0x21, 0
+	.dw 0x7240, 0xc919,	0x727f, 0xc919,		0x21, 0
+	.dw 0x72c0, 0xc919,	0x72ff, 0xc919,		0x21, 0
+	.dw 0x7340, 0xc919,	0x737f, 0xc919,		0x21, 0
+	.dw 0x73c0, 0xc919,	0x73ff, 0xc919,		0x21, 0
+	.dw 0x7440, 0xc919,	0x747f, 0xc919,		0x21, 0
+	.dw 0x74c0, 0xc919,	0x74ff, 0xc919,		0x21, 0
+	.dw 0x7540, 0xc919,	0x757f, 0xc919,		0x21, 0
+	.dw 0x75c0, 0xc919,	0x75ff, 0xc919,		0x21, 0
+	.dw 0x7640, 0xc919,	0x767f, 0xc919,		0x21, 0
+	.dw 0x76c0, 0xc919,	0x76ff, 0xc919,		0x21, 0
+	.dw 0x7740, 0xc919,	0x777f, 0xc919,		0x21, 0
+	.dw 0x77c0, 0xc919,	0x77ff, 0xc919,		0x21, 0
+	.dw 0x7840, 0xc919,	0x787f, 0xc919,		0x21, 0
+	.dw 0x78c0, 0xc919,	0x78ff, 0xc919,		0x21, 0
+	.dw 0x7940, 0xc919,	0x797f, 0xc919,		0x21, 0
+	.dw 0x79c0, 0xc919,	0x9fff, 0xc919,		0x21, 0
+	.dw 0xa040, 0xc919,	0xa07f, 0xc919,		0x21, 0
+	.dw 0xa0c0, 0xc919,	0xa0ff, 0xc919,		0x21, 0
+	.dw 0xa140, 0xc919,	0xa17f, 0xc919,		0x21, 0
+	.dw 0xa1c0, 0xc919,	0xa1ff, 0xc919,		0x21, 0
+	.dw 0xa240, 0xc919,	0xa27f, 0xc919,		0x21, 0
+	.dw 0xa2c0, 0xc919,	0xa2ff, 0xc919,		0x21, 0
+	.dw 0xa340, 0xc919,	0xa37f, 0xc919,		0x21, 0
+	.dw 0xa3c0, 0xc919,	0xa3ff, 0xc919,		0x21, 0
+	.dw 0xa440, 0xc919,	0xa47f, 0xc919,		0x21, 0
+	.dw 0xa4c0, 0xc919,	0xa4ff, 0xc919,		0x21, 0
+	.dw 0xa540, 0xc919,	0xa57f, 0xc919,		0x21, 0
+	.dw 0xa5c0, 0xc919,	0xa5ff, 0xc919,		0x21, 0
+	.dw 0xa640, 0xc919,	0xa67f, 0xc919,		0x21, 0
+	.dw 0xa6c0, 0xc919,	0xa6ff, 0xc919,		0x21, 0
+	.dw 0xa740, 0xc919,	0xa77f, 0xc919,		0x21, 0
+	.dw 0xa7c0, 0xc919,	0xa7ff, 0xc919,		0x21, 0
+	.dw 0xa840, 0xc919,	0xa87f, 0xc919,		0x21, 0
+	.dw 0xa8c0, 0xc919,	0xa8ff, 0xc919,		0x21, 0
+	.dw 0xa940, 0xc919,	0xa97f, 0xc919,		0x21, 0
+	.dw 0xa9c0, 0xc919,	0xa9ff, 0xc919,		0x21, 0
+	.dw 0xaa40, 0xc919,	0xaa7f, 0xc919,		0x21, 0
+	.dw 0xaac0, 0xc919,	0xaaff, 0xc919,		0x21, 0
+	.dw 0xab40, 0xc919,	0xab7f, 0xc919,		0x21, 0
+	.dw 0xabc0, 0xc919,	0xabff, 0xc919,		0x21, 0
+	.dw 0xac40, 0xc919,	0xac7f, 0xc919,		0x21, 0
+	.dw 0xacc0, 0xc919,	0xacff, 0xc919,		0x21, 0
+	.dw 0xad40, 0xc919,	0xad7f, 0xc919,		0x21, 0
+	.dw 0xadc0, 0xc919,	0xadff, 0xc919,		0x21, 0
+	.dw 0xae40, 0xc919,	0xae7f, 0xc919,		0x21, 0
+	.dw 0xaec0, 0xc919,	0xaeff, 0xc919,		0x21, 0
+	.dw 0xaf40, 0xc919,	0xaf7f, 0xc919,		0x21, 0
+	.dw 0xafc0, 0xc919,	0xafff, 0xc919,		0x21, 0
+	.dw 0xb040, 0xc919,	0xb07f, 0xc919,		0x21, 0
+	.dw 0xb0c0, 0xc919,	0xb0ff, 0xc919,		0x21, 0
+	.dw 0xb140, 0xc919,	0xb17f, 0xc919,		0x21, 0
+	.dw 0xb1c0, 0xc919,	0xb1ff, 0xc919,		0x21, 0
+	.dw 0xb240, 0xc919,	0xb27f, 0xc919,		0x21, 0
+	.dw 0xb2c0, 0xc919,	0xb2ff, 0xc919,		0x21, 0
+	.dw 0xb340, 0xc919,	0xb37f, 0xc919,		0x21, 0
+	.dw 0xb3c0, 0xc919,	0xb3ff, 0xc919,		0x21, 0
+	.dw 0xb440, 0xc919,	0xb47f, 0xc919,		0x21, 0
+	.dw 0xb4c0, 0xc919,	0xb4ff, 0xc919,		0x21, 0
+	.dw 0xb540, 0xc919,	0xb57f, 0xc919,		0x21, 0
+	.dw 0xb5c0, 0xc919,	0xb5ff, 0xc919,		0x21, 0
+	.dw 0xb640, 0xc919,	0xb67f, 0xc919,		0x21, 0
+	.dw 0xb6c0, 0xc919,	0xb6ff, 0xc919,		0x21, 0
+	.dw 0xb740, 0xc919,	0xb77f, 0xc919,		0x21, 0
+	.dw 0xb7c0, 0xc919,	0xb7ff, 0xc919,		0x21, 0
+	.dw 0xb840, 0xc919,	0xb87f, 0xc919,		0x21, 0
+	.dw 0xb8c0, 0xc919,	0xb8ff, 0xc919,		0x21, 0
+	.dw 0xb940, 0xc919,	0xb97f, 0xc919,		0x21, 0
+	.dw 0xb9c0, 0xc919,	0xdfff, 0xc919,		0x21, 0
+	.dw 0xe040, 0xc919,	0xe07f, 0xc919,		0x21, 0
+	.dw 0xe0c0, 0xc919,	0xe0ff, 0xc919,		0x21, 0
+	.dw 0xe140, 0xc919,	0xe17f, 0xc919,		0x21, 0
+	.dw 0xe1c0, 0xc919,	0xe1ff, 0xc919,		0x21, 0
+	.dw 0xe240, 0xc919,	0xe27f, 0xc919,		0x21, 0
+	.dw 0xe2c0, 0xc919,	0xe2ff, 0xc919,		0x21, 0
+	.dw 0xe340, 0xc919,	0xe37f, 0xc919,		0x21, 0
+	.dw 0xe3c0, 0xc919,	0xe3ff, 0xc919,		0x21, 0
+	.dw 0xe440, 0xc919,	0xe47f, 0xc919,		0x21, 0
+	.dw 0xe4c0, 0xc919,	0xe4ff, 0xc919,		0x21, 0
+	.dw 0xe540, 0xc919,	0xe57f, 0xc919,		0x21, 0
+	.dw 0xe5c0, 0xc919,	0xe5ff, 0xc919,		0x21, 0
+	.dw 0xe640, 0xc919,	0xe67f, 0xc919,		0x21, 0
+	.dw 0xe6c0, 0xc919,	0xe6ff, 0xc919,		0x21, 0
+	.dw 0xe740, 0xc919,	0xe77f, 0xc919,		0x21, 0
+	.dw 0xe7c0, 0xc919,	0xe7ff, 0xc919,		0x21, 0
+	.dw 0xe840, 0xc919,	0xe87f, 0xc919,		0x21, 0
+	.dw 0xe8c0, 0xc919,	0xe8ff, 0xc919,		0x21, 0
+	.dw 0xe940, 0xc919,	0xe97f, 0xc919,		0x21, 0
+	.dw 0xe9c0, 0xc919,	0xe9ff, 0xc919,		0x21, 0
+	.dw 0xea40, 0xc919,	0xea7f, 0xc919,		0x21, 0
+	.dw 0xeac0, 0xc919,	0xeaff, 0xc919,		0x21, 0
+	.dw 0xeb40, 0xc919,	0xeb7f, 0xc919,		0x21, 0
+	.dw 0xebc0, 0xc919,	0xebff, 0xc919,		0x21, 0
+	.dw 0xec40, 0xc919,	0xec7f, 0xc919,		0x21, 0
+	.dw 0xecc0, 0xc919,	0xecff, 0xc919,		0x21, 0
+	.dw 0xed40, 0xc919,	0xed7f, 0xc919,		0x21, 0
+	.dw 0xedc0, 0xc919,	0xedff, 0xc919,		0x21, 0
+	.dw 0xee40, 0xc919,	0xee7f, 0xc919,		0x21, 0
+	.dw 0xeec0, 0xc919,	0xeeff, 0xc919,		0x21, 0
+	.dw 0xef40, 0xc919,	0xef7f, 0xc919,		0x21, 0
+	.dw 0xefc0, 0xc919,	0xefff, 0xc919,		0x21, 0
+	.dw 0xf040, 0xc919,	0xf07f, 0xc919,		0x21, 0
+	.dw 0xf0c0, 0xc919,	0xf0ff, 0xc919,		0x21, 0
+	.dw 0xf140, 0xc919,	0xf17f, 0xc919,		0x21, 0
+	.dw 0xf1c0, 0xc919,	0xf1ff, 0xc919,		0x21, 0
+	.dw 0xf240, 0xc919,	0xf27f, 0xc919,		0x21, 0
+	.dw 0xf2c0, 0xc919,	0xf2ff, 0xc919,		0x21, 0
+	.dw 0xf340, 0xc919,	0xf37f, 0xc919,		0x21, 0
+	.dw 0xf3c0, 0xc919,	0xf3ff, 0xc919,		0x21, 0
+	.dw 0xf440, 0xc919,	0xf47f, 0xc919,		0x21, 0
+	.dw 0xf4c0, 0xc919,	0xf4ff, 0xc919,		0x21, 0
+	.dw 0xf540, 0xc919,	0xf57f, 0xc919,		0x21, 0
+	.dw 0xf5c0, 0xc919,	0xf5ff, 0xc919,		0x21, 0
+	.dw 0xf640, 0xc919,	0xf67f, 0xc919,		0x21, 0
+	.dw 0xf6c0, 0xc919,	0xf6ff, 0xc919,		0x21, 0
+	.dw 0xf740, 0xc919,	0xf77f, 0xc919,		0x21, 0
+	.dw 0xf7c0, 0xc919,	0xf7ff, 0xc919,		0x21, 0
+	.dw 0xf840, 0xc919,	0xf87f, 0xc919,		0x21, 0
+	.dw 0xf8c0, 0xc919,	0xf8ff, 0xc919,		0x21, 0
+	.dw 0xf940, 0xc919,	0xf97f, 0xc919,		0x21, 0
+	.dw 0xf9c0, 0xc919,	0x1fff, 0xc91a,		0x21, 0
+	.dw 0x2040, 0xc91a,	0x207f, 0xc91a,		0x21, 0
+	.dw 0x20c0, 0xc91a,	0x20ff, 0xc91a,		0x21, 0
+	.dw 0x2140, 0xc91a,	0x217f, 0xc91a,		0x21, 0
+	.dw 0x21c0, 0xc91a,	0x21ff, 0xc91a,		0x21, 0
+	.dw 0x2240, 0xc91a,	0x227f, 0xc91a,		0x21, 0
+	.dw 0x22c0, 0xc91a,	0x22ff, 0xc91a,		0x21, 0
+	.dw 0x2340, 0xc91a,	0x237f, 0xc91a,		0x21, 0
+	.dw 0x23c0, 0xc91a,	0x23ff, 0xc91a,		0x21, 0
+	.dw 0x2440, 0xc91a,	0x247f, 0xc91a,		0x21, 0
+	.dw 0x24c0, 0xc91a,	0x24ff, 0xc91a,		0x21, 0
+	.dw 0x2540, 0xc91a,	0x257f, 0xc91a,		0x21, 0
+	.dw 0x25c0, 0xc91a,	0x25ff, 0xc91a,		0x21, 0
+	.dw 0x2640, 0xc91a,	0x267f, 0xc91a,		0x21, 0
+	.dw 0x26c0, 0xc91a,	0x26ff, 0xc91a,		0x21, 0
+	.dw 0x2740, 0xc91a,	0x277f, 0xc91a,		0x21, 0
+	.dw 0x27c0, 0xc91a,	0x27ff, 0xc91a,		0x21, 0
+	.dw 0x2840, 0xc91a,	0x287f, 0xc91a,		0x21, 0
+	.dw 0x28c0, 0xc91a,	0x28ff, 0xc91a,		0x21, 0
+	.dw 0x2940, 0xc91a,	0x297f, 0xc91a,		0x21, 0
+	.dw 0x29c0, 0xc91a,	0x29ff, 0xc91a,		0x21, 0
+	.dw 0x2a40, 0xc91a,	0x2a7f, 0xc91a,		0x21, 0
+	.dw 0x2ac0, 0xc91a,	0x2aff, 0xc91a,		0x21, 0
+	.dw 0x2b40, 0xc91a,	0x2b7f, 0xc91a,		0x21, 0
+	.dw 0x2bc0, 0xc91a,	0x2bff, 0xc91a,		0x21, 0
+	.dw 0x2c40, 0xc91a,	0x2c7f, 0xc91a,		0x21, 0
+	.dw 0x2cc0, 0xc91a,	0x2cff, 0xc91a,		0x21, 0
+	.dw 0x2d40, 0xc91a,	0x2d7f, 0xc91a,		0x21, 0
+	.dw 0x2dc0, 0xc91a,	0x2dff, 0xc91a,		0x21, 0
+	.dw 0x2e40, 0xc91a,	0x2e7f, 0xc91a,		0x21, 0
+	.dw 0x2ec0, 0xc91a,	0x2eff, 0xc91a,		0x21, 0
+	.dw 0x2f40, 0xc91a,	0x2f7f, 0xc91a,		0x21, 0
+	.dw 0x2fc0, 0xc91a,	0x2fff, 0xc91a,		0x21, 0
+	.dw 0x3040, 0xc91a,	0x307f, 0xc91a,		0x21, 0
+	.dw 0x30c0, 0xc91a,	0x30ff, 0xc91a,		0x21, 0
+	.dw 0x3140, 0xc91a,	0x317f, 0xc91a,		0x21, 0
+	.dw 0x31c0, 0xc91a,	0x31ff, 0xc91a,		0x21, 0
+	.dw 0x3240, 0xc91a,	0x327f, 0xc91a,		0x21, 0
+	.dw 0x32c0, 0xc91a,	0x32ff, 0xc91a,		0x21, 0
+	.dw 0x3340, 0xc91a,	0x337f, 0xc91a,		0x21, 0
+	.dw 0x33c0, 0xc91a,	0x33ff, 0xc91a,		0x21, 0
+	.dw 0x3440, 0xc91a,	0x347f, 0xc91a,		0x21, 0
+	.dw 0x34c0, 0xc91a,	0x34ff, 0xc91a,		0x21, 0
+	.dw 0x3540, 0xc91a,	0x357f, 0xc91a,		0x21, 0
+	.dw 0x35c0, 0xc91a,	0x35ff, 0xc91a,		0x21, 0
+	.dw 0x3640, 0xc91a,	0x367f, 0xc91a,		0x21, 0
+	.dw 0x36c0, 0xc91a,	0x36ff, 0xc91a,		0x21, 0
+	.dw 0x3740, 0xc91a,	0x377f, 0xc91a,		0x21, 0
+	.dw 0x37c0, 0xc91a,	0x37ff, 0xc91a,		0x21, 0
+	.dw 0x3840, 0xc91a,	0x387f, 0xc91a,		0x21, 0
+	.dw 0x38c0, 0xc91a,	0x38ff, 0xc91a,		0x21, 0
+	.dw 0x3940, 0xc91a,	0x397f, 0xc91a,		0x21, 0
+	.dw 0x39c0, 0xc91a,	0x5fff, 0xc91a,		0x21, 0
+	.dw 0x6040, 0xc91a,	0x607f, 0xc91a,		0x21, 0
+	.dw 0x60c0, 0xc91a,	0x60ff, 0xc91a,		0x21, 0
+	.dw 0x6140, 0xc91a,	0x617f, 0xc91a,		0x21, 0
+	.dw 0x61c0, 0xc91a,	0x61ff, 0xc91a,		0x21, 0
+	.dw 0x6240, 0xc91a,	0x627f, 0xc91a,		0x21, 0
+	.dw 0x62c0, 0xc91a,	0x62ff, 0xc91a,		0x21, 0
+	.dw 0x6340, 0xc91a,	0x637f, 0xc91a,		0x21, 0
+	.dw 0x63c0, 0xc91a,	0x63ff, 0xc91a,		0x21, 0
+	.dw 0x6440, 0xc91a,	0x647f, 0xc91a,		0x21, 0
+	.dw 0x64c0, 0xc91a,	0x64ff, 0xc91a,		0x21, 0
+	.dw 0x6540, 0xc91a,	0x657f, 0xc91a,		0x21, 0
+	.dw 0x65c0, 0xc91a,	0x65ff, 0xc91a,		0x21, 0
+	.dw 0x6640, 0xc91a,	0x667f, 0xc91a,		0x21, 0
+	.dw 0x66c0, 0xc91a,	0x66ff, 0xc91a,		0x21, 0
+	.dw 0x6740, 0xc91a,	0x677f, 0xc91a,		0x21, 0
+	.dw 0x67c0, 0xc91a,	0x67ff, 0xc91a,		0x21, 0
+	.dw 0x6840, 0xc91a,	0x687f, 0xc91a,		0x21, 0
+	.dw 0x68c0, 0xc91a,	0x68ff, 0xc91a,		0x21, 0
+	.dw 0x6940, 0xc91a,	0x697f, 0xc91a,		0x21, 0
+	.dw 0x69c0, 0xc91a,	0x69ff, 0xc91a,		0x21, 0
+	.dw 0x6a40, 0xc91a,	0x6a7f, 0xc91a,		0x21, 0
+	.dw 0x6ac0, 0xc91a,	0x6aff, 0xc91a,		0x21, 0
+	.dw 0x6b40, 0xc91a,	0x6b7f, 0xc91a,		0x21, 0
+	.dw 0x6bc0, 0xc91a,	0x6bff, 0xc91a,		0x21, 0
+	.dw 0x6c40, 0xc91a,	0x6c7f, 0xc91a,		0x21, 0
+	.dw 0x6cc0, 0xc91a,	0x6cff, 0xc91a,		0x21, 0
+	.dw 0x6d40, 0xc91a,	0x6d7f, 0xc91a,		0x21, 0
+	.dw 0x6dc0, 0xc91a,	0x6dff, 0xc91a,		0x21, 0
+	.dw 0x6e40, 0xc91a,	0x6e7f, 0xc91a,		0x21, 0
+	.dw 0x6ec0, 0xc91a,	0x6eff, 0xc91a,		0x21, 0
+	.dw 0x6f40, 0xc91a,	0x6f7f, 0xc91a,		0x21, 0
+	.dw 0x6fc0, 0xc91a,	0x6fff, 0xc91a,		0x21, 0
+	.dw 0x7040, 0xc91a,	0x707f, 0xc91a,		0x21, 0
+	.dw 0x70c0, 0xc91a,	0x70ff, 0xc91a,		0x21, 0
+	.dw 0x7140, 0xc91a,	0x717f, 0xc91a,		0x21, 0
+	.dw 0x71c0, 0xc91a,	0x71ff, 0xc91a,		0x21, 0
+	.dw 0x7240, 0xc91a,	0x727f, 0xc91a,		0x21, 0
+	.dw 0x72c0, 0xc91a,	0x72ff, 0xc91a,		0x21, 0
+	.dw 0x7340, 0xc91a,	0x737f, 0xc91a,		0x21, 0
+	.dw 0x73c0, 0xc91a,	0x73ff, 0xc91a,		0x21, 0
+	.dw 0x7440, 0xc91a,	0x747f, 0xc91a,		0x21, 0
+	.dw 0x74c0, 0xc91a,	0x74ff, 0xc91a,		0x21, 0
+	.dw 0x7540, 0xc91a,	0x757f, 0xc91a,		0x21, 0
+	.dw 0x75c0, 0xc91a,	0x75ff, 0xc91a,		0x21, 0
+	.dw 0x7640, 0xc91a,	0x767f, 0xc91a,		0x21, 0
+	.dw 0x76c0, 0xc91a,	0x76ff, 0xc91a,		0x21, 0
+	.dw 0x7740, 0xc91a,	0x777f, 0xc91a,		0x21, 0
+	.dw 0x77c0, 0xc91a,	0x77ff, 0xc91a,		0x21, 0
+	.dw 0x7840, 0xc91a,	0x787f, 0xc91a,		0x21, 0
+	.dw 0x78c0, 0xc91a,	0x78ff, 0xc91a,		0x21, 0
+	.dw 0x7940, 0xc91a,	0x797f, 0xc91a,		0x21, 0
+	.dw 0x79c0, 0xc91a,	0x9fff, 0xc91a,		0x21, 0
+	.dw 0xa040, 0xc91a,	0xa07f, 0xc91a,		0x21, 0
+	.dw 0xa0c0, 0xc91a,	0xa0ff, 0xc91a,		0x21, 0
+	.dw 0xa140, 0xc91a,	0xa17f, 0xc91a,		0x21, 0
+	.dw 0xa1c0, 0xc91a,	0xa1ff, 0xc91a,		0x21, 0
+	.dw 0xa240, 0xc91a,	0xa27f, 0xc91a,		0x21, 0
+	.dw 0xa2c0, 0xc91a,	0xa2ff, 0xc91a,		0x21, 0
+	.dw 0xa340, 0xc91a,	0xa37f, 0xc91a,		0x21, 0
+	.dw 0xa3c0, 0xc91a,	0xa3ff, 0xc91a,		0x21, 0
+	.dw 0xa440, 0xc91a,	0xa47f, 0xc91a,		0x21, 0
+	.dw 0xa4c0, 0xc91a,	0xa4ff, 0xc91a,		0x21, 0
+	.dw 0xa540, 0xc91a,	0xa57f, 0xc91a,		0x21, 0
+	.dw 0xa5c0, 0xc91a,	0xa5ff, 0xc91a,		0x21, 0
+	.dw 0xa640, 0xc91a,	0xa67f, 0xc91a,		0x21, 0
+	.dw 0xa6c0, 0xc91a,	0xa6ff, 0xc91a,		0x21, 0
+	.dw 0xa740, 0xc91a,	0xa77f, 0xc91a,		0x21, 0
+	.dw 0xa7c0, 0xc91a,	0xa7ff, 0xc91a,		0x21, 0
+	.dw 0xa840, 0xc91a,	0xa87f, 0xc91a,		0x21, 0
+	.dw 0xa8c0, 0xc91a,	0xa8ff, 0xc91a,		0x21, 0
+	.dw 0xa940, 0xc91a,	0xa97f, 0xc91a,		0x21, 0
+	.dw 0xa9c0, 0xc91a,	0xa9ff, 0xc91a,		0x21, 0
+	.dw 0xaa40, 0xc91a,	0xaa7f, 0xc91a,		0x21, 0
+	.dw 0xaac0, 0xc91a,	0xaaff, 0xc91a,		0x21, 0
+	.dw 0xab40, 0xc91a,	0xab7f, 0xc91a,		0x21, 0
+	.dw 0xabc0, 0xc91a,	0xabff, 0xc91a,		0x21, 0
+	.dw 0xac40, 0xc91a,	0xac7f, 0xc91a,		0x21, 0
+	.dw 0xacc0, 0xc91a,	0xacff, 0xc91a,		0x21, 0
+	.dw 0xad40, 0xc91a,	0xad7f, 0xc91a,		0x21, 0
+	.dw 0xadc0, 0xc91a,	0xadff, 0xc91a,		0x21, 0
+	.dw 0xae40, 0xc91a,	0xae7f, 0xc91a,		0x21, 0
+	.dw 0xaec0, 0xc91a,	0xaeff, 0xc91a,		0x21, 0
+	.dw 0xaf40, 0xc91a,	0xaf7f, 0xc91a,		0x21, 0
+	.dw 0xafc0, 0xc91a,	0xafff, 0xc91a,		0x21, 0
+	.dw 0xb040, 0xc91a,	0xb07f, 0xc91a,		0x21, 0
+	.dw 0xb0c0, 0xc91a,	0xb0ff, 0xc91a,		0x21, 0
+	.dw 0xb140, 0xc91a,	0xb17f, 0xc91a,		0x21, 0
+	.dw 0xb1c0, 0xc91a,	0xb1ff, 0xc91a,		0x21, 0
+	.dw 0xb240, 0xc91a,	0xb27f, 0xc91a,		0x21, 0
+	.dw 0xb2c0, 0xc91a,	0xb2ff, 0xc91a,		0x21, 0
+	.dw 0xb340, 0xc91a,	0xb37f, 0xc91a,		0x21, 0
+	.dw 0xb3c0, 0xc91a,	0xb3ff, 0xc91a,		0x21, 0
+	.dw 0xb440, 0xc91a,	0xb47f, 0xc91a,		0x21, 0
+	.dw 0xb4c0, 0xc91a,	0xb4ff, 0xc91a,		0x21, 0
+	.dw 0xb540, 0xc91a,	0xb57f, 0xc91a,		0x21, 0
+	.dw 0xb5c0, 0xc91a,	0xb5ff, 0xc91a,		0x21, 0
+	.dw 0xb640, 0xc91a,	0xb67f, 0xc91a,		0x21, 0
+	.dw 0xb6c0, 0xc91a,	0xb6ff, 0xc91a,		0x21, 0
+	.dw 0xb740, 0xc91a,	0xb77f, 0xc91a,		0x21, 0
+	.dw 0xb7c0, 0xc91a,	0xb7ff, 0xc91a,		0x21, 0
+	.dw 0xb840, 0xc91a,	0xb87f, 0xc91a,		0x21, 0
+	.dw 0xb8c0, 0xc91a,	0xb8ff, 0xc91a,		0x21, 0
+	.dw 0xb940, 0xc91a,	0xb97f, 0xc91a,		0x21, 0
+	.dw 0xb9c0, 0xc91a,	0xdfff, 0xc91a,		0x21, 0
+	.dw 0xe040, 0xc91a,	0xe07f, 0xc91a,		0x21, 0
+	.dw 0xe0c0, 0xc91a,	0xe0ff, 0xc91a,		0x21, 0
+	.dw 0xe140, 0xc91a,	0xe17f, 0xc91a,		0x21, 0
+	.dw 0xe1c0, 0xc91a,	0xe1ff, 0xc91a,		0x21, 0
+	.dw 0xe240, 0xc91a,	0xe27f, 0xc91a,		0x21, 0
+	.dw 0xe2c0, 0xc91a,	0xe2ff, 0xc91a,		0x21, 0
+	.dw 0xe340, 0xc91a,	0xe37f, 0xc91a,		0x21, 0
+	.dw 0xe3c0, 0xc91a,	0xe3ff, 0xc91a,		0x21, 0
+	.dw 0xe440, 0xc91a,	0xe47f, 0xc91a,		0x21, 0
+	.dw 0xe4c0, 0xc91a,	0xe4ff, 0xc91a,		0x21, 0
+	.dw 0xe540, 0xc91a,	0xe57f, 0xc91a,		0x21, 0
+	.dw 0xe5c0, 0xc91a,	0xe5ff, 0xc91a,		0x21, 0
+	.dw 0xe640, 0xc91a,	0xe67f, 0xc91a,		0x21, 0
+	.dw 0xe6c0, 0xc91a,	0xe6ff, 0xc91a,		0x21, 0
+	.dw 0xe740, 0xc91a,	0xe77f, 0xc91a,		0x21, 0
+	.dw 0xe7c0, 0xc91a,	0xe7ff, 0xc91a,		0x21, 0
+	.dw 0xe840, 0xc91a,	0xe87f, 0xc91a,		0x21, 0
+	.dw 0xe8c0, 0xc91a,	0xe8ff, 0xc91a,		0x21, 0
+	.dw 0xe940, 0xc91a,	0xe97f, 0xc91a,		0x21, 0
+	.dw 0xe9c0, 0xc91a,	0xe9ff, 0xc91a,		0x21, 0
+	.dw 0xea40, 0xc91a,	0xea7f, 0xc91a,		0x21, 0
+	.dw 0xeac0, 0xc91a,	0xeaff, 0xc91a,		0x21, 0
+	.dw 0xeb40, 0xc91a,	0xeb7f, 0xc91a,		0x21, 0
+	.dw 0xebc0, 0xc91a,	0xebff, 0xc91a,		0x21, 0
+	.dw 0xec40, 0xc91a,	0xec7f, 0xc91a,		0x21, 0
+	.dw 0xecc0, 0xc91a,	0xecff, 0xc91a,		0x21, 0
+	.dw 0xed40, 0xc91a,	0xed7f, 0xc91a,		0x21, 0
+	.dw 0xedc0, 0xc91a,	0xedff, 0xc91a,		0x21, 0
+	.dw 0xee40, 0xc91a,	0xee7f, 0xc91a,		0x21, 0
+	.dw 0xeec0, 0xc91a,	0xeeff, 0xc91a,		0x21, 0
+	.dw 0xef40, 0xc91a,	0xef7f, 0xc91a,		0x21, 0
+	.dw 0xefc0, 0xc91a,	0xefff, 0xc91a,		0x21, 0
+	.dw 0xf040, 0xc91a,	0xf07f, 0xc91a,		0x21, 0
+	.dw 0xf0c0, 0xc91a,	0xf0ff, 0xc91a,		0x21, 0
+	.dw 0xf140, 0xc91a,	0xf17f, 0xc91a,		0x21, 0
+	.dw 0xf1c0, 0xc91a,	0xf1ff, 0xc91a,		0x21, 0
+	.dw 0xf240, 0xc91a,	0xf27f, 0xc91a,		0x21, 0
+	.dw 0xf2c0, 0xc91a,	0xf2ff, 0xc91a,		0x21, 0
+	.dw 0xf340, 0xc91a,	0xf37f, 0xc91a,		0x21, 0
+	.dw 0xf3c0, 0xc91a,	0xf3ff, 0xc91a,		0x21, 0
+	.dw 0xf440, 0xc91a,	0xf47f, 0xc91a,		0x21, 0
+	.dw 0xf4c0, 0xc91a,	0xf4ff, 0xc91a,		0x21, 0
+	.dw 0xf540, 0xc91a,	0xf57f, 0xc91a,		0x21, 0
+	.dw 0xf5c0, 0xc91a,	0xf5ff, 0xc91a,		0x21, 0
+	.dw 0xf640, 0xc91a,	0xf67f, 0xc91a,		0x21, 0
+	.dw 0xf6c0, 0xc91a,	0xf6ff, 0xc91a,		0x21, 0
+	.dw 0xf740, 0xc91a,	0xf77f, 0xc91a,		0x21, 0
+	.dw 0xf7c0, 0xc91a,	0xf7ff, 0xc91a,		0x21, 0
+	.dw 0xf840, 0xc91a,	0xf87f, 0xc91a,		0x21, 0
+	.dw 0xf8c0, 0xc91a,	0xf8ff, 0xc91a,		0x21, 0
+	.dw 0xf940, 0xc91a,	0xf97f, 0xc91a,		0x21, 0
+	.dw 0xf9c0, 0xc91a,	0xffff, 0xc91b,		0x21, 0
+	.dw 0x0040, 0xc91c,	0x007f, 0xc91c,		0x21, 0
+	.dw 0x00c0, 0xc91c,	0x00ff, 0xc91c,		0x21, 0
+	.dw 0x0140, 0xc91c,	0x017f, 0xc91c,		0x21, 0
+	.dw 0x01c0, 0xc91c,	0x01ff, 0xc91c,		0x21, 0
+	.dw 0x0240, 0xc91c,	0x027f, 0xc91c,		0x21, 0
+	.dw 0x02c0, 0xc91c,	0x02ff, 0xc91c,		0x21, 0
+	.dw 0x0340, 0xc91c,	0x037f, 0xc91c,		0x21, 0
+	.dw 0x03c0, 0xc91c,	0x03ff, 0xc91c,		0x21, 0
+	.dw 0x0440, 0xc91c,	0x047f, 0xc91c,		0x21, 0
+	.dw 0x04c0, 0xc91c,	0x04ff, 0xc91c,		0x21, 0
+	.dw 0x0540, 0xc91c,	0x057f, 0xc91c,		0x21, 0
+	.dw 0x05c0, 0xc91c,	0x05ff, 0xc91c,		0x21, 0
+	.dw 0x0640, 0xc91c,	0x067f, 0xc91c,		0x21, 0
+	.dw 0x06c0, 0xc91c,	0x06ff, 0xc91c,		0x21, 0
+	.dw 0x0740, 0xc91c,	0x077f, 0xc91c,		0x21, 0
+	.dw 0x07c0, 0xc91c,	0x07ff, 0xc91c,		0x21, 0
+	.dw 0x0840, 0xc91c,	0x087f, 0xc91c,		0x21, 0
+	.dw 0x08c0, 0xc91c,	0x08ff, 0xc91c,		0x21, 0
+	.dw 0x0940, 0xc91c,	0x097f, 0xc91c,		0x21, 0
+	.dw 0x09c0, 0xc91c,	0x09ff, 0xc91c,		0x21, 0
+	.dw 0x0a40, 0xc91c,	0x0a7f, 0xc91c,		0x21, 0
+	.dw 0x0ac0, 0xc91c,	0x0aff, 0xc91c,		0x21, 0
+	.dw 0x0b40, 0xc91c,	0x0b7f, 0xc91c,		0x21, 0
+	.dw 0x0bc0, 0xc91c,	0x0bff, 0xc91c,		0x21, 0
+	.dw 0x0c40, 0xc91c,	0x0c7f, 0xc91c,		0x21, 0
+	.dw 0x0cc0, 0xc91c,	0x0cff, 0xc91c,		0x21, 0
+	.dw 0x0d40, 0xc91c,	0x0d7f, 0xc91c,		0x21, 0
+	.dw 0x0dc0, 0xc91c,	0x0dff, 0xc91c,		0x21, 0
+	.dw 0x0e40, 0xc91c,	0x0e7f, 0xc91c,		0x21, 0
+	.dw 0x0ec0, 0xc91c,	0x0eff, 0xc91c,		0x21, 0
+	.dw 0x0f40, 0xc91c,	0x0f7f, 0xc91c,		0x21, 0
+	.dw 0x0fc0, 0xc91c,	0x0fff, 0xc91c,		0x21, 0
+	.dw 0x1040, 0xc91c,	0x107f, 0xc91c,		0x21, 0
+	.dw 0x10c0, 0xc91c,	0x10ff, 0xc91c,		0x21, 0
+	.dw 0x1140, 0xc91c,	0x117f, 0xc91c,		0x21, 0
+	.dw 0x11c0, 0xc91c,	0x11ff, 0xc91c,		0x21, 0
+	.dw 0x1240, 0xc91c,	0x127f, 0xc91c,		0x21, 0
+	.dw 0x12c0, 0xc91c,	0x12ff, 0xc91c,		0x21, 0
+	.dw 0x1340, 0xc91c,	0x137f, 0xc91c,		0x21, 0
+	.dw 0x13c0, 0xc91c,	0x13ff, 0xc91c,		0x21, 0
+	.dw 0x1440, 0xc91c,	0x147f, 0xc91c,		0x21, 0
+	.dw 0x14c0, 0xc91c,	0x14ff, 0xc91c,		0x21, 0
+	.dw 0x1540, 0xc91c,	0x157f, 0xc91c,		0x21, 0
+	.dw 0x15c0, 0xc91c,	0x15ff, 0xc91c,		0x21, 0
+	.dw 0x1640, 0xc91c,	0x167f, 0xc91c,		0x21, 0
+	.dw 0x16c0, 0xc91c,	0x16ff, 0xc91c,		0x21, 0
+	.dw 0x1740, 0xc91c,	0x177f, 0xc91c,		0x21, 0
+	.dw 0x17c0, 0xc91c,	0x17ff, 0xc91c,		0x21, 0
+	.dw 0x1840, 0xc91c,	0x187f, 0xc91c,		0x21, 0
+	.dw 0x18c0, 0xc91c,	0x18ff, 0xc91c,		0x21, 0
+	.dw 0x1940, 0xc91c,	0x197f, 0xc91c,		0x21, 0
+	.dw 0x19c0, 0xc91c,	0x1fff, 0xc91c,		0x21, 0
+	.dw 0x2040, 0xc91c,	0x207f, 0xc91c,		0x21, 0
+	.dw 0x20c0, 0xc91c,	0x20ff, 0xc91c,		0x21, 0
+	.dw 0x2140, 0xc91c,	0x217f, 0xc91c,		0x21, 0
+	.dw 0x21c0, 0xc91c,	0x21ff, 0xc91c,		0x21, 0
+	.dw 0x2240, 0xc91c,	0x227f, 0xc91c,		0x21, 0
+	.dw 0x22c0, 0xc91c,	0x22ff, 0xc91c,		0x21, 0
+	.dw 0x2340, 0xc91c,	0x237f, 0xc91c,		0x21, 0
+	.dw 0x23c0, 0xc91c,	0x23ff, 0xc91c,		0x21, 0
+	.dw 0x2440, 0xc91c,	0x247f, 0xc91c,		0x21, 0
+	.dw 0x24c0, 0xc91c,	0x24ff, 0xc91c,		0x21, 0
+	.dw 0x2540, 0xc91c,	0x257f, 0xc91c,		0x21, 0
+	.dw 0x25c0, 0xc91c,	0x25ff, 0xc91c,		0x21, 0
+	.dw 0x2640, 0xc91c,	0x267f, 0xc91c,		0x21, 0
+	.dw 0x26c0, 0xc91c,	0x26ff, 0xc91c,		0x21, 0
+	.dw 0x2740, 0xc91c,	0x277f, 0xc91c,		0x21, 0
+	.dw 0x27c0, 0xc91c,	0x27ff, 0xc91c,		0x21, 0
+	.dw 0x2840, 0xc91c,	0x287f, 0xc91c,		0x21, 0
+	.dw 0x28c0, 0xc91c,	0x28ff, 0xc91c,		0x21, 0
+	.dw 0x2940, 0xc91c,	0x297f, 0xc91c,		0x21, 0
+	.dw 0x29c0, 0xc91c,	0x29ff, 0xc91c,		0x21, 0
+	.dw 0x2a40, 0xc91c,	0x2a7f, 0xc91c,		0x21, 0
+	.dw 0x2ac0, 0xc91c,	0x2aff, 0xc91c,		0x21, 0
+	.dw 0x2b40, 0xc91c,	0x2b7f, 0xc91c,		0x21, 0
+	.dw 0x2bc0, 0xc91c,	0x2bff, 0xc91c,		0x21, 0
+	.dw 0x2c40, 0xc91c,	0x2c7f, 0xc91c,		0x21, 0
+	.dw 0x2cc0, 0xc91c,	0x2cff, 0xc91c,		0x21, 0
+	.dw 0x2d40, 0xc91c,	0x2d7f, 0xc91c,		0x21, 0
+	.dw 0x2dc0, 0xc91c,	0x2dff, 0xc91c,		0x21, 0
+	.dw 0x2e40, 0xc91c,	0x2e7f, 0xc91c,		0x21, 0
+	.dw 0x2ec0, 0xc91c,	0x2eff, 0xc91c,		0x21, 0
+	.dw 0x2f40, 0xc91c,	0x2f7f, 0xc91c,		0x21, 0
+	.dw 0x2fc0, 0xc91c,	0x2fff, 0xc91c,		0x21, 0
+	.dw 0x3040, 0xc91c,	0x307f, 0xc91c,		0x21, 0
+	.dw 0x30c0, 0xc91c,	0x30ff, 0xc91c,		0x21, 0
+	.dw 0x3140, 0xc91c,	0x317f, 0xc91c,		0x21, 0
+	.dw 0x31c0, 0xc91c,	0x31ff, 0xc91c,		0x21, 0
+	.dw 0x3240, 0xc91c,	0x327f, 0xc91c,		0x21, 0
+	.dw 0x32c0, 0xc91c,	0x32ff, 0xc91c,		0x21, 0
+	.dw 0x3340, 0xc91c,	0x337f, 0xc91c,		0x21, 0
+	.dw 0x33c0, 0xc91c,	0x33ff, 0xc91c,		0x21, 0
+	.dw 0x3440, 0xc91c,	0x347f, 0xc91c,		0x21, 0
+	.dw 0x34c0, 0xc91c,	0x34ff, 0xc91c,		0x21, 0
+	.dw 0x3540, 0xc91c,	0x357f, 0xc91c,		0x21, 0
+	.dw 0x35c0, 0xc91c,	0x35ff, 0xc91c,		0x21, 0
+	.dw 0x3640, 0xc91c,	0x367f, 0xc91c,		0x21, 0
+	.dw 0x36c0, 0xc91c,	0x36ff, 0xc91c,		0x21, 0
+	.dw 0x3740, 0xc91c,	0x377f, 0xc91c,		0x21, 0
+	.dw 0x37c0, 0xc91c,	0x37ff, 0xc91c,		0x21, 0
+	.dw 0x3840, 0xc91c,	0x387f, 0xc91c,		0x21, 0
+	.dw 0x38c0, 0xc91c,	0x38ff, 0xc91c,		0x21, 0
+	.dw 0x3940, 0xc91c,	0x397f, 0xc91c,		0x21, 0
+	.dw 0x39c0, 0xc91c,	0x3fff, 0xc91c,		0x21, 0
+	.dw 0x4040, 0xc91c,	0x407f, 0xc91c,		0x21, 0
+	.dw 0x40c0, 0xc91c,	0x40ff, 0xc91c,		0x21, 0
+	.dw 0x4140, 0xc91c,	0x417f, 0xc91c,		0x21, 0
+	.dw 0x41c0, 0xc91c,	0x41ff, 0xc91c,		0x21, 0
+	.dw 0x4240, 0xc91c,	0x427f, 0xc91c,		0x21, 0
+	.dw 0x42c0, 0xc91c,	0x42ff, 0xc91c,		0x21, 0
+	.dw 0x4340, 0xc91c,	0x437f, 0xc91c,		0x21, 0
+	.dw 0x43c0, 0xc91c,	0x43ff, 0xc91c,		0x21, 0
+	.dw 0x4440, 0xc91c,	0x447f, 0xc91c,		0x21, 0
+	.dw 0x44c0, 0xc91c,	0x44ff, 0xc91c,		0x21, 0
+	.dw 0x4540, 0xc91c,	0x457f, 0xc91c,		0x21, 0
+	.dw 0x45c0, 0xc91c,	0x45ff, 0xc91c,		0x21, 0
+	.dw 0x4640, 0xc91c,	0x467f, 0xc91c,		0x21, 0
+	.dw 0x46c0, 0xc91c,	0x46ff, 0xc91c,		0x21, 0
+	.dw 0x4740, 0xc91c,	0x477f, 0xc91c,		0x21, 0
+	.dw 0x47c0, 0xc91c,	0x47ff, 0xc91c,		0x21, 0
+	.dw 0x4840, 0xc91c,	0x487f, 0xc91c,		0x21, 0
+	.dw 0x48c0, 0xc91c,	0x48ff, 0xc91c,		0x21, 0
+	.dw 0x4940, 0xc91c,	0x497f, 0xc91c,		0x21, 0
+	.dw 0x49c0, 0xc91c,	0x49ff, 0xc91c,		0x21, 0
+	.dw 0x4a40, 0xc91c,	0x4a7f, 0xc91c,		0x21, 0
+	.dw 0x4ac0, 0xc91c,	0x4aff, 0xc91c,		0x21, 0
+	.dw 0x4b40, 0xc91c,	0x4b7f, 0xc91c,		0x21, 0
+	.dw 0x4bc0, 0xc91c,	0x4bff, 0xc91c,		0x21, 0
+	.dw 0x4c40, 0xc91c,	0x4c7f, 0xc91c,		0x21, 0
+	.dw 0x4cc0, 0xc91c,	0x4cff, 0xc91c,		0x21, 0
+	.dw 0x4d40, 0xc91c,	0x4d7f, 0xc91c,		0x21, 0
+	.dw 0x4dc0, 0xc91c,	0x4dff, 0xc91c,		0x21, 0
+	.dw 0x4e40, 0xc91c,	0x4e7f, 0xc91c,		0x21, 0
+	.dw 0x4ec0, 0xc91c,	0x4eff, 0xc91c,		0x21, 0
+	.dw 0x4f40, 0xc91c,	0x4f7f, 0xc91c,		0x21, 0
+	.dw 0x4fc0, 0xc91c,	0x4fff, 0xc91c,		0x21, 0
+	.dw 0x5040, 0xc91c,	0x507f, 0xc91c,		0x21, 0
+	.dw 0x50c0, 0xc91c,	0x50ff, 0xc91c,		0x21, 0
+	.dw 0x5140, 0xc91c,	0x517f, 0xc91c,		0x21, 0
+	.dw 0x51c0, 0xc91c,	0x51ff, 0xc91c,		0x21, 0
+	.dw 0x5240, 0xc91c,	0x527f, 0xc91c,		0x21, 0
+	.dw 0x52c0, 0xc91c,	0x52ff, 0xc91c,		0x21, 0
+	.dw 0x5340, 0xc91c,	0x537f, 0xc91c,		0x21, 0
+	.dw 0x53c0, 0xc91c,	0x53ff, 0xc91c,		0x21, 0
+	.dw 0x5440, 0xc91c,	0x547f, 0xc91c,		0x21, 0
+	.dw 0x54c0, 0xc91c,	0x54ff, 0xc91c,		0x21, 0
+	.dw 0x5540, 0xc91c,	0x557f, 0xc91c,		0x21, 0
+	.dw 0x55c0, 0xc91c,	0x55ff, 0xc91c,		0x21, 0
+	.dw 0x5640, 0xc91c,	0x567f, 0xc91c,		0x21, 0
+	.dw 0x56c0, 0xc91c,	0x56ff, 0xc91c,		0x21, 0
+	.dw 0x5740, 0xc91c,	0x577f, 0xc91c,		0x21, 0
+	.dw 0x57c0, 0xc91c,	0x57ff, 0xc91c,		0x21, 0
+	.dw 0x5840, 0xc91c,	0x587f, 0xc91c,		0x21, 0
+	.dw 0x58c0, 0xc91c,	0x58ff, 0xc91c,		0x21, 0
+	.dw 0x5940, 0xc91c,	0x597f, 0xc91c,		0x21, 0
+	.dw 0x59c0, 0xc91c,	0x5fff, 0xc91c,		0x21, 0
+	.dw 0x6040, 0xc91c,	0x607f, 0xc91c,		0x21, 0
+	.dw 0x60c0, 0xc91c,	0x60ff, 0xc91c,		0x21, 0
+	.dw 0x6140, 0xc91c,	0x617f, 0xc91c,		0x21, 0
+	.dw 0x61c0, 0xc91c,	0x61ff, 0xc91c,		0x21, 0
+	.dw 0x6240, 0xc91c,	0x627f, 0xc91c,		0x21, 0
+	.dw 0x62c0, 0xc91c,	0x62ff, 0xc91c,		0x21, 0
+	.dw 0x6340, 0xc91c,	0x637f, 0xc91c,		0x21, 0
+	.dw 0x63c0, 0xc91c,	0x63ff, 0xc91c,		0x21, 0
+	.dw 0x6440, 0xc91c,	0x647f, 0xc91c,		0x21, 0
+	.dw 0x64c0, 0xc91c,	0x64ff, 0xc91c,		0x21, 0
+	.dw 0x6540, 0xc91c,	0x657f, 0xc91c,		0x21, 0
+	.dw 0x65c0, 0xc91c,	0x65ff, 0xc91c,		0x21, 0
+	.dw 0x6640, 0xc91c,	0x667f, 0xc91c,		0x21, 0
+	.dw 0x66c0, 0xc91c,	0x66ff, 0xc91c,		0x21, 0
+	.dw 0x6740, 0xc91c,	0x677f, 0xc91c,		0x21, 0
+	.dw 0x67c0, 0xc91c,	0x67ff, 0xc91c,		0x21, 0
+	.dw 0x6840, 0xc91c,	0x687f, 0xc91c,		0x21, 0
+	.dw 0x68c0, 0xc91c,	0x68ff, 0xc91c,		0x21, 0
+	.dw 0x6940, 0xc91c,	0x697f, 0xc91c,		0x21, 0
+	.dw 0x69c0, 0xc91c,	0x69ff, 0xc91c,		0x21, 0
+	.dw 0x6a40, 0xc91c,	0x6a7f, 0xc91c,		0x21, 0
+	.dw 0x6ac0, 0xc91c,	0x6aff, 0xc91c,		0x21, 0
+	.dw 0x6b40, 0xc91c,	0x6b7f, 0xc91c,		0x21, 0
+	.dw 0x6bc0, 0xc91c,	0x6bff, 0xc91c,		0x21, 0
+	.dw 0x6c40, 0xc91c,	0x6c7f, 0xc91c,		0x21, 0
+	.dw 0x6cc0, 0xc91c,	0x6cff, 0xc91c,		0x21, 0
+	.dw 0x6d40, 0xc91c,	0x6d7f, 0xc91c,		0x21, 0
+	.dw 0x6dc0, 0xc91c,	0x6dff, 0xc91c,		0x21, 0
+	.dw 0x6e40, 0xc91c,	0x6e7f, 0xc91c,		0x21, 0
+	.dw 0x6ec0, 0xc91c,	0x6eff, 0xc91c,		0x21, 0
+	.dw 0x6f40, 0xc91c,	0x6f7f, 0xc91c,		0x21, 0
+	.dw 0x6fc0, 0xc91c,	0x6fff, 0xc91c,		0x21, 0
+	.dw 0x7040, 0xc91c,	0x707f, 0xc91c,		0x21, 0
+	.dw 0x70c0, 0xc91c,	0x70ff, 0xc91c,		0x21, 0
+	.dw 0x7140, 0xc91c,	0x717f, 0xc91c,		0x21, 0
+	.dw 0x71c0, 0xc91c,	0x71ff, 0xc91c,		0x21, 0
+	.dw 0x7240, 0xc91c,	0x727f, 0xc91c,		0x21, 0
+	.dw 0x72c0, 0xc91c,	0x72ff, 0xc91c,		0x21, 0
+	.dw 0x7340, 0xc91c,	0x737f, 0xc91c,		0x21, 0
+	.dw 0x73c0, 0xc91c,	0x73ff, 0xc91c,		0x21, 0
+	.dw 0x7440, 0xc91c,	0x747f, 0xc91c,		0x21, 0
+	.dw 0x74c0, 0xc91c,	0x74ff, 0xc91c,		0x21, 0
+	.dw 0x7540, 0xc91c,	0x757f, 0xc91c,		0x21, 0
+	.dw 0x75c0, 0xc91c,	0x75ff, 0xc91c,		0x21, 0
+	.dw 0x7640, 0xc91c,	0x767f, 0xc91c,		0x21, 0
+	.dw 0x76c0, 0xc91c,	0x76ff, 0xc91c,		0x21, 0
+	.dw 0x7740, 0xc91c,	0x777f, 0xc91c,		0x21, 0
+	.dw 0x77c0, 0xc91c,	0x77ff, 0xc91c,		0x21, 0
+	.dw 0x7840, 0xc91c,	0x787f, 0xc91c,		0x21, 0
+	.dw 0x78c0, 0xc91c,	0x78ff, 0xc91c,		0x21, 0
+	.dw 0x7940, 0xc91c,	0x797f, 0xc91c,		0x21, 0
+	.dw 0x79c0, 0xc91c,	0x7fff, 0xc91c,		0x21, 0
+	.dw 0x8040, 0xc91c,	0x807f, 0xc91c,		0x21, 0
+	.dw 0x80c0, 0xc91c,	0x80ff, 0xc91c,		0x21, 0
+	.dw 0x8140, 0xc91c,	0x817f, 0xc91c,		0x21, 0
+	.dw 0x81c0, 0xc91c,	0x81ff, 0xc91c,		0x21, 0
+	.dw 0x8240, 0xc91c,	0x827f, 0xc91c,		0x21, 0
+	.dw 0x82c0, 0xc91c,	0x82ff, 0xc91c,		0x21, 0
+	.dw 0x8340, 0xc91c,	0x837f, 0xc91c,		0x21, 0
+	.dw 0x83c0, 0xc91c,	0x83ff, 0xc91c,		0x21, 0
+	.dw 0x8440, 0xc91c,	0x847f, 0xc91c,		0x21, 0
+	.dw 0x84c0, 0xc91c,	0x84ff, 0xc91c,		0x21, 0
+	.dw 0x8540, 0xc91c,	0x857f, 0xc91c,		0x21, 0
+	.dw 0x85c0, 0xc91c,	0x85ff, 0xc91c,		0x21, 0
+	.dw 0x8640, 0xc91c,	0x867f, 0xc91c,		0x21, 0
+	.dw 0x86c0, 0xc91c,	0x86ff, 0xc91c,		0x21, 0
+	.dw 0x8740, 0xc91c,	0x877f, 0xc91c,		0x21, 0
+	.dw 0x87c0, 0xc91c,	0x87ff, 0xc91c,		0x21, 0
+	.dw 0x8840, 0xc91c,	0x887f, 0xc91c,		0x21, 0
+	.dw 0x88c0, 0xc91c,	0x88ff, 0xc91c,		0x21, 0
+	.dw 0x8940, 0xc91c,	0x897f, 0xc91c,		0x21, 0
+	.dw 0x89c0, 0xc91c,	0x89ff, 0xc91c,		0x21, 0
+	.dw 0x8a40, 0xc91c,	0x8a7f, 0xc91c,		0x21, 0
+	.dw 0x8ac0, 0xc91c,	0x8aff, 0xc91c,		0x21, 0
+	.dw 0x8b40, 0xc91c,	0x8b7f, 0xc91c,		0x21, 0
+	.dw 0x8bc0, 0xc91c,	0x8bff, 0xc91c,		0x21, 0
+	.dw 0x8c40, 0xc91c,	0x8c7f, 0xc91c,		0x21, 0
+	.dw 0x8cc0, 0xc91c,	0x8cff, 0xc91c,		0x21, 0
+	.dw 0x8d40, 0xc91c,	0x8d7f, 0xc91c,		0x21, 0
+	.dw 0x8dc0, 0xc91c,	0x8dff, 0xc91c,		0x21, 0
+	.dw 0x8e40, 0xc91c,	0x8e7f, 0xc91c,		0x21, 0
+	.dw 0x8ec0, 0xc91c,	0x8eff, 0xc91c,		0x21, 0
+	.dw 0x8f40, 0xc91c,	0x8f7f, 0xc91c,		0x21, 0
+	.dw 0x8fc0, 0xc91c,	0x8fff, 0xc91c,		0x21, 0
+	.dw 0x9040, 0xc91c,	0x907f, 0xc91c,		0x21, 0
+	.dw 0x90c0, 0xc91c,	0x90ff, 0xc91c,		0x21, 0
+	.dw 0x9140, 0xc91c,	0x917f, 0xc91c,		0x21, 0
+	.dw 0x91c0, 0xc91c,	0x91ff, 0xc91c,		0x21, 0
+	.dw 0x9240, 0xc91c,	0x927f, 0xc91c,		0x21, 0
+	.dw 0x92c0, 0xc91c,	0x92ff, 0xc91c,		0x21, 0
+	.dw 0x9340, 0xc91c,	0x937f, 0xc91c,		0x21, 0
+	.dw 0x93c0, 0xc91c,	0x93ff, 0xc91c,		0x21, 0
+	.dw 0x9440, 0xc91c,	0x947f, 0xc91c,		0x21, 0
+	.dw 0x94c0, 0xc91c,	0x94ff, 0xc91c,		0x21, 0
+	.dw 0x9540, 0xc91c,	0x957f, 0xc91c,		0x21, 0
+	.dw 0x95c0, 0xc91c,	0x95ff, 0xc91c,		0x21, 0
+	.dw 0x9640, 0xc91c,	0x967f, 0xc91c,		0x21, 0
+	.dw 0x96c0, 0xc91c,	0x96ff, 0xc91c,		0x21, 0
+	.dw 0x9740, 0xc91c,	0x977f, 0xc91c,		0x21, 0
+	.dw 0x97c0, 0xc91c,	0x97ff, 0xc91c,		0x21, 0
+	.dw 0x9840, 0xc91c,	0x987f, 0xc91c,		0x21, 0
+	.dw 0x98c0, 0xc91c,	0x98ff, 0xc91c,		0x21, 0
+	.dw 0x9940, 0xc91c,	0x997f, 0xc91c,		0x21, 0
+	.dw 0x99c0, 0xc91c,	0x9fff, 0xc91c,		0x21, 0
+	.dw 0xa040, 0xc91c,	0xa07f, 0xc91c,		0x21, 0
+	.dw 0xa0c0, 0xc91c,	0xa0ff, 0xc91c,		0x21, 0
+	.dw 0xa140, 0xc91c,	0xa17f, 0xc91c,		0x21, 0
+	.dw 0xa1c0, 0xc91c,	0xa1ff, 0xc91c,		0x21, 0
+	.dw 0xa240, 0xc91c,	0xa27f, 0xc91c,		0x21, 0
+	.dw 0xa2c0, 0xc91c,	0xa2ff, 0xc91c,		0x21, 0
+	.dw 0xa340, 0xc91c,	0xa37f, 0xc91c,		0x21, 0
+	.dw 0xa3c0, 0xc91c,	0xa3ff, 0xc91c,		0x21, 0
+	.dw 0xa440, 0xc91c,	0xa47f, 0xc91c,		0x21, 0
+	.dw 0xa4c0, 0xc91c,	0xa4ff, 0xc91c,		0x21, 0
+	.dw 0xa540, 0xc91c,	0xa57f, 0xc91c,		0x21, 0
+	.dw 0xa5c0, 0xc91c,	0xa5ff, 0xc91c,		0x21, 0
+	.dw 0xa640, 0xc91c,	0xa67f, 0xc91c,		0x21, 0
+	.dw 0xa6c0, 0xc91c,	0xa6ff, 0xc91c,		0x21, 0
+	.dw 0xa740, 0xc91c,	0xa77f, 0xc91c,		0x21, 0
+	.dw 0xa7c0, 0xc91c,	0xa7ff, 0xc91c,		0x21, 0
+	.dw 0xa840, 0xc91c,	0xa87f, 0xc91c,		0x21, 0
+	.dw 0xa8c0, 0xc91c,	0xa8ff, 0xc91c,		0x21, 0
+	.dw 0xa940, 0xc91c,	0xa97f, 0xc91c,		0x21, 0
+	.dw 0xa9c0, 0xc91c,	0xa9ff, 0xc91c,		0x21, 0
+	.dw 0xaa40, 0xc91c,	0xaa7f, 0xc91c,		0x21, 0
+	.dw 0xaac0, 0xc91c,	0xaaff, 0xc91c,		0x21, 0
+	.dw 0xab40, 0xc91c,	0xab7f, 0xc91c,		0x21, 0
+	.dw 0xabc0, 0xc91c,	0xabff, 0xc91c,		0x21, 0
+	.dw 0xac40, 0xc91c,	0xac7f, 0xc91c,		0x21, 0
+	.dw 0xacc0, 0xc91c,	0xacff, 0xc91c,		0x21, 0
+	.dw 0xad40, 0xc91c,	0xad7f, 0xc91c,		0x21, 0
+	.dw 0xadc0, 0xc91c,	0xadff, 0xc91c,		0x21, 0
+	.dw 0xae40, 0xc91c,	0xae7f, 0xc91c,		0x21, 0
+	.dw 0xaec0, 0xc91c,	0xaeff, 0xc91c,		0x21, 0
+	.dw 0xaf40, 0xc91c,	0xaf7f, 0xc91c,		0x21, 0
+	.dw 0xafc0, 0xc91c,	0xafff, 0xc91c,		0x21, 0
+	.dw 0xb040, 0xc91c,	0xb07f, 0xc91c,		0x21, 0
+	.dw 0xb0c0, 0xc91c,	0xb0ff, 0xc91c,		0x21, 0
+	.dw 0xb140, 0xc91c,	0xb17f, 0xc91c,		0x21, 0
+	.dw 0xb1c0, 0xc91c,	0xb1ff, 0xc91c,		0x21, 0
+	.dw 0xb240, 0xc91c,	0xb27f, 0xc91c,		0x21, 0
+	.dw 0xb2c0, 0xc91c,	0xb2ff, 0xc91c,		0x21, 0
+	.dw 0xb340, 0xc91c,	0xb37f, 0xc91c,		0x21, 0
+	.dw 0xb3c0, 0xc91c,	0xb3ff, 0xc91c,		0x21, 0
+	.dw 0xb440, 0xc91c,	0xb47f, 0xc91c,		0x21, 0
+	.dw 0xb4c0, 0xc91c,	0xb4ff, 0xc91c,		0x21, 0
+	.dw 0xb540, 0xc91c,	0xb57f, 0xc91c,		0x21, 0
+	.dw 0xb5c0, 0xc91c,	0xb5ff, 0xc91c,		0x21, 0
+	.dw 0xb640, 0xc91c,	0xb67f, 0xc91c,		0x21, 0
+	.dw 0xb6c0, 0xc91c,	0xb6ff, 0xc91c,		0x21, 0
+	.dw 0xb740, 0xc91c,	0xb77f, 0xc91c,		0x21, 0
+	.dw 0xb7c0, 0xc91c,	0xb7ff, 0xc91c,		0x21, 0
+	.dw 0xb840, 0xc91c,	0xb87f, 0xc91c,		0x21, 0
+	.dw 0xb8c0, 0xc91c,	0xb8ff, 0xc91c,		0x21, 0
+	.dw 0xb940, 0xc91c,	0xb97f, 0xc91c,		0x21, 0
+	.dw 0xb9c0, 0xc91c,	0xbfff, 0xc91c,		0x21, 0
+	.dw 0xc040, 0xc91c,	0xc07f, 0xc91c,		0x21, 0
+	.dw 0xc0c0, 0xc91c,	0xc0ff, 0xc91c,		0x21, 0
+	.dw 0xc140, 0xc91c,	0xc17f, 0xc91c,		0x21, 0
+	.dw 0xc1c0, 0xc91c,	0xc1ff, 0xc91c,		0x21, 0
+	.dw 0xc240, 0xc91c,	0xc27f, 0xc91c,		0x21, 0
+	.dw 0xc2c0, 0xc91c,	0xc2ff, 0xc91c,		0x21, 0
+	.dw 0xc340, 0xc91c,	0xc37f, 0xc91c,		0x21, 0
+	.dw 0xc3c0, 0xc91c,	0xc3ff, 0xc91c,		0x21, 0
+	.dw 0xc440, 0xc91c,	0xc47f, 0xc91c,		0x21, 0
+	.dw 0xc4c0, 0xc91c,	0xc4ff, 0xc91c,		0x21, 0
+	.dw 0xc540, 0xc91c,	0xc57f, 0xc91c,		0x21, 0
+	.dw 0xc5c0, 0xc91c,	0xc5ff, 0xc91c,		0x21, 0
+	.dw 0xc640, 0xc91c,	0xc67f, 0xc91c,		0x21, 0
+	.dw 0xc6c0, 0xc91c,	0xc6ff, 0xc91c,		0x21, 0
+	.dw 0xc740, 0xc91c,	0xc77f, 0xc91c,		0x21, 0
+	.dw 0xc7c0, 0xc91c,	0xc7ff, 0xc91c,		0x21, 0
+	.dw 0xc840, 0xc91c,	0xc87f, 0xc91c,		0x21, 0
+	.dw 0xc8c0, 0xc91c,	0xc8ff, 0xc91c,		0x21, 0
+	.dw 0xc940, 0xc91c,	0xc97f, 0xc91c,		0x21, 0
+	.dw 0xc9c0, 0xc91c,	0xc9ff, 0xc91c,		0x21, 0
+	.dw 0xca40, 0xc91c,	0xca7f, 0xc91c,		0x21, 0
+	.dw 0xcac0, 0xc91c,	0xcaff, 0xc91c,		0x21, 0
+	.dw 0xcb40, 0xc91c,	0xcb7f, 0xc91c,		0x21, 0
+	.dw 0xcbc0, 0xc91c,	0xcbff, 0xc91c,		0x21, 0
+	.dw 0xcc40, 0xc91c,	0xcc7f, 0xc91c,		0x21, 0
+	.dw 0xccc0, 0xc91c,	0xccff, 0xc91c,		0x21, 0
+	.dw 0xcd40, 0xc91c,	0xcd7f, 0xc91c,		0x21, 0
+	.dw 0xcdc0, 0xc91c,	0xcdff, 0xc91c,		0x21, 0
+	.dw 0xce40, 0xc91c,	0xce7f, 0xc91c,		0x21, 0
+	.dw 0xcec0, 0xc91c,	0xceff, 0xc91c,		0x21, 0
+	.dw 0xcf40, 0xc91c,	0xcf7f, 0xc91c,		0x21, 0
+	.dw 0xcfc0, 0xc91c,	0xcfff, 0xc91c,		0x21, 0
+	.dw 0xd040, 0xc91c,	0xd07f, 0xc91c,		0x21, 0
+	.dw 0xd0c0, 0xc91c,	0xd0ff, 0xc91c,		0x21, 0
+	.dw 0xd140, 0xc91c,	0xd17f, 0xc91c,		0x21, 0
+	.dw 0xd1c0, 0xc91c,	0xd1ff, 0xc91c,		0x21, 0
+	.dw 0xd240, 0xc91c,	0xd27f, 0xc91c,		0x21, 0
+	.dw 0xd2c0, 0xc91c,	0xd2ff, 0xc91c,		0x21, 0
+	.dw 0xd340, 0xc91c,	0xd37f, 0xc91c,		0x21, 0
+	.dw 0xd3c0, 0xc91c,	0xd3ff, 0xc91c,		0x21, 0
+	.dw 0xd440, 0xc91c,	0xd47f, 0xc91c,		0x21, 0
+	.dw 0xd4c0, 0xc91c,	0xd4ff, 0xc91c,		0x21, 0
+	.dw 0xd540, 0xc91c,	0xd57f, 0xc91c,		0x21, 0
+	.dw 0xd5c0, 0xc91c,	0xd5ff, 0xc91c,		0x21, 0
+	.dw 0xd640, 0xc91c,	0xd67f, 0xc91c,		0x21, 0
+	.dw 0xd6c0, 0xc91c,	0xd6ff, 0xc91c,		0x21, 0
+	.dw 0xd740, 0xc91c,	0xd77f, 0xc91c,		0x21, 0
+	.dw 0xd7c0, 0xc91c,	0xd7ff, 0xc91c,		0x21, 0
+	.dw 0xd840, 0xc91c,	0xd87f, 0xc91c,		0x21, 0
+	.dw 0xd8c0, 0xc91c,	0xd8ff, 0xc91c,		0x21, 0
+	.dw 0xd940, 0xc91c,	0xd97f, 0xc91c,		0x21, 0
+	.dw 0xd9c0, 0xc91c,	0xdfff, 0xc91c,		0x21, 0
+	.dw 0xe040, 0xc91c,	0xe07f, 0xc91c,		0x21, 0
+	.dw 0xe0c0, 0xc91c,	0xe0ff, 0xc91c,		0x21, 0
+	.dw 0xe140, 0xc91c,	0xe17f, 0xc91c,		0x21, 0
+	.dw 0xe1c0, 0xc91c,	0xe1ff, 0xc91c,		0x21, 0
+	.dw 0xe240, 0xc91c,	0xe27f, 0xc91c,		0x21, 0
+	.dw 0xe2c0, 0xc91c,	0xe2ff, 0xc91c,		0x21, 0
+	.dw 0xe340, 0xc91c,	0xe37f, 0xc91c,		0x21, 0
+	.dw 0xe3c0, 0xc91c,	0xe3ff, 0xc91c,		0x21, 0
+	.dw 0xe440, 0xc91c,	0xe47f, 0xc91c,		0x21, 0
+	.dw 0xe4c0, 0xc91c,	0xe4ff, 0xc91c,		0x21, 0
+	.dw 0xe540, 0xc91c,	0xe57f, 0xc91c,		0x21, 0
+	.dw 0xe5c0, 0xc91c,	0xe5ff, 0xc91c,		0x21, 0
+	.dw 0xe640, 0xc91c,	0xe67f, 0xc91c,		0x21, 0
+	.dw 0xe6c0, 0xc91c,	0xe6ff, 0xc91c,		0x21, 0
+	.dw 0xe740, 0xc91c,	0xe77f, 0xc91c,		0x21, 0
+	.dw 0xe7c0, 0xc91c,	0xe7ff, 0xc91c,		0x21, 0
+	.dw 0xe840, 0xc91c,	0xe87f, 0xc91c,		0x21, 0
+	.dw 0xe8c0, 0xc91c,	0xe8ff, 0xc91c,		0x21, 0
+	.dw 0xe940, 0xc91c,	0xe97f, 0xc91c,		0x21, 0
+	.dw 0xe9c0, 0xc91c,	0xe9ff, 0xc91c,		0x21, 0
+	.dw 0xea40, 0xc91c,	0xea7f, 0xc91c,		0x21, 0
+	.dw 0xeac0, 0xc91c,	0xeaff, 0xc91c,		0x21, 0
+	.dw 0xeb40, 0xc91c,	0xeb7f, 0xc91c,		0x21, 0
+	.dw 0xebc0, 0xc91c,	0xebff, 0xc91c,		0x21, 0
+	.dw 0xec40, 0xc91c,	0xec7f, 0xc91c,		0x21, 0
+	.dw 0xecc0, 0xc91c,	0xecff, 0xc91c,		0x21, 0
+	.dw 0xed40, 0xc91c,	0xed7f, 0xc91c,		0x21, 0
+	.dw 0xedc0, 0xc91c,	0xedff, 0xc91c,		0x21, 0
+	.dw 0xee40, 0xc91c,	0xee7f, 0xc91c,		0x21, 0
+	.dw 0xeec0, 0xc91c,	0xeeff, 0xc91c,		0x21, 0
+	.dw 0xef40, 0xc91c,	0xef7f, 0xc91c,		0x21, 0
+	.dw 0xefc0, 0xc91c,	0xefff, 0xc91c,		0x21, 0
+	.dw 0xf040, 0xc91c,	0xf07f, 0xc91c,		0x21, 0
+	.dw 0xf0c0, 0xc91c,	0xf0ff, 0xc91c,		0x21, 0
+	.dw 0xf140, 0xc91c,	0xf17f, 0xc91c,		0x21, 0
+	.dw 0xf1c0, 0xc91c,	0xf1ff, 0xc91c,		0x21, 0
+	.dw 0xf240, 0xc91c,	0xf27f, 0xc91c,		0x21, 0
+	.dw 0xf2c0, 0xc91c,	0xf2ff, 0xc91c,		0x21, 0
+	.dw 0xf340, 0xc91c,	0xf37f, 0xc91c,		0x21, 0
+	.dw 0xf3c0, 0xc91c,	0xf3ff, 0xc91c,		0x21, 0
+	.dw 0xf440, 0xc91c,	0xf47f, 0xc91c,		0x21, 0
+	.dw 0xf4c0, 0xc91c,	0xf4ff, 0xc91c,		0x21, 0
+	.dw 0xf540, 0xc91c,	0xf57f, 0xc91c,		0x21, 0
+	.dw 0xf5c0, 0xc91c,	0xf5ff, 0xc91c,		0x21, 0
+	.dw 0xf640, 0xc91c,	0xf67f, 0xc91c,		0x21, 0
+	.dw 0xf6c0, 0xc91c,	0xf6ff, 0xc91c,		0x21, 0
+	.dw 0xf740, 0xc91c,	0xf77f, 0xc91c,		0x21, 0
+	.dw 0xf7c0, 0xc91c,	0xf7ff, 0xc91c,		0x21, 0
+	.dw 0xf840, 0xc91c,	0xf87f, 0xc91c,		0x21, 0
+	.dw 0xf8c0, 0xc91c,	0xf8ff, 0xc91c,		0x21, 0
+	.dw 0xf940, 0xc91c,	0xf97f, 0xc91c,		0x21, 0
+	.dw 0xf9c0, 0xc91c,	0xffff, 0xc91c,		0x21, 0
+	.dw 0x0040, 0xc91d,	0x007f, 0xc91d,		0x21, 0
+	.dw 0x00c0, 0xc91d,	0x00ff, 0xc91d,		0x21, 0
+	.dw 0x0140, 0xc91d,	0x017f, 0xc91d,		0x21, 0
+	.dw 0x01c0, 0xc91d,	0x01ff, 0xc91d,		0x21, 0
+	.dw 0x0240, 0xc91d,	0x027f, 0xc91d,		0x21, 0
+	.dw 0x02c0, 0xc91d,	0x02ff, 0xc91d,		0x21, 0
+	.dw 0x0340, 0xc91d,	0x037f, 0xc91d,		0x21, 0
+	.dw 0x03c0, 0xc91d,	0x03ff, 0xc91d,		0x21, 0
+	.dw 0x0440, 0xc91d,	0x047f, 0xc91d,		0x21, 0
+	.dw 0x04c0, 0xc91d,	0x04ff, 0xc91d,		0x21, 0
+	.dw 0x0540, 0xc91d,	0x057f, 0xc91d,		0x21, 0
+	.dw 0x05c0, 0xc91d,	0x05ff, 0xc91d,		0x21, 0
+	.dw 0x0640, 0xc91d,	0x067f, 0xc91d,		0x21, 0
+	.dw 0x06c0, 0xc91d,	0x06ff, 0xc91d,		0x21, 0
+	.dw 0x0740, 0xc91d,	0x077f, 0xc91d,		0x21, 0
+	.dw 0x07c0, 0xc91d,	0x07ff, 0xc91d,		0x21, 0
+	.dw 0x0840, 0xc91d,	0x087f, 0xc91d,		0x21, 0
+	.dw 0x08c0, 0xc91d,	0x08ff, 0xc91d,		0x21, 0
+	.dw 0x0940, 0xc91d,	0x097f, 0xc91d,		0x21, 0
+	.dw 0x09c0, 0xc91d,	0x09ff, 0xc91d,		0x21, 0
+	.dw 0x0a40, 0xc91d,	0x0a7f, 0xc91d,		0x21, 0
+	.dw 0x0ac0, 0xc91d,	0x0aff, 0xc91d,		0x21, 0
+	.dw 0x0b40, 0xc91d,	0x0b7f, 0xc91d,		0x21, 0
+	.dw 0x0bc0, 0xc91d,	0x0bff, 0xc91d,		0x21, 0
+	.dw 0x0c40, 0xc91d,	0x0c7f, 0xc91d,		0x21, 0
+	.dw 0x0cc0, 0xc91d,	0x0cff, 0xc91d,		0x21, 0
+	.dw 0x0d40, 0xc91d,	0x0d7f, 0xc91d,		0x21, 0
+	.dw 0x0dc0, 0xc91d,	0x0dff, 0xc91d,		0x21, 0
+	.dw 0x0e40, 0xc91d,	0x0e7f, 0xc91d,		0x21, 0
+	.dw 0x0ec0, 0xc91d,	0x0eff, 0xc91d,		0x21, 0
+	.dw 0x0f40, 0xc91d,	0x0f7f, 0xc91d,		0x21, 0
+	.dw 0x0fc0, 0xc91d,	0x0fff, 0xc91d,		0x21, 0
+	.dw 0x1040, 0xc91d,	0x107f, 0xc91d,		0x21, 0
+	.dw 0x10c0, 0xc91d,	0x10ff, 0xc91d,		0x21, 0
+	.dw 0x1140, 0xc91d,	0x117f, 0xc91d,		0x21, 0
+	.dw 0x11c0, 0xc91d,	0x11ff, 0xc91d,		0x21, 0
+	.dw 0x1240, 0xc91d,	0x127f, 0xc91d,		0x21, 0
+	.dw 0x12c0, 0xc91d,	0x12ff, 0xc91d,		0x21, 0
+	.dw 0x1340, 0xc91d,	0x137f, 0xc91d,		0x21, 0
+	.dw 0x13c0, 0xc91d,	0x13ff, 0xc91d,		0x21, 0
+	.dw 0x1440, 0xc91d,	0x147f, 0xc91d,		0x21, 0
+	.dw 0x14c0, 0xc91d,	0x14ff, 0xc91d,		0x21, 0
+	.dw 0x1540, 0xc91d,	0x157f, 0xc91d,		0x21, 0
+	.dw 0x15c0, 0xc91d,	0x15ff, 0xc91d,		0x21, 0
+	.dw 0x1640, 0xc91d,	0x167f, 0xc91d,		0x21, 0
+	.dw 0x16c0, 0xc91d,	0x16ff, 0xc91d,		0x21, 0
+	.dw 0x1740, 0xc91d,	0x177f, 0xc91d,		0x21, 0
+	.dw 0x17c0, 0xc91d,	0x17ff, 0xc91d,		0x21, 0
+	.dw 0x1840, 0xc91d,	0x187f, 0xc91d,		0x21, 0
+	.dw 0x18c0, 0xc91d,	0x18ff, 0xc91d,		0x21, 0
+	.dw 0x1940, 0xc91d,	0x197f, 0xc91d,		0x21, 0
+	.dw 0x19c0, 0xc91d,	0x1fff, 0xc91d,		0x21, 0
+	.dw 0x2040, 0xc91d,	0x207f, 0xc91d,		0x21, 0
+	.dw 0x20c0, 0xc91d,	0x20ff, 0xc91d,		0x21, 0
+	.dw 0x2140, 0xc91d,	0x217f, 0xc91d,		0x21, 0
+	.dw 0x21c0, 0xc91d,	0x21ff, 0xc91d,		0x21, 0
+	.dw 0x2240, 0xc91d,	0x227f, 0xc91d,		0x21, 0
+	.dw 0x22c0, 0xc91d,	0x22ff, 0xc91d,		0x21, 0
+	.dw 0x2340, 0xc91d,	0x237f, 0xc91d,		0x21, 0
+	.dw 0x23c0, 0xc91d,	0x23ff, 0xc91d,		0x21, 0
+	.dw 0x2440, 0xc91d,	0x247f, 0xc91d,		0x21, 0
+	.dw 0x24c0, 0xc91d,	0x24ff, 0xc91d,		0x21, 0
+	.dw 0x2540, 0xc91d,	0x257f, 0xc91d,		0x21, 0
+	.dw 0x25c0, 0xc91d,	0x25ff, 0xc91d,		0x21, 0
+	.dw 0x2640, 0xc91d,	0x267f, 0xc91d,		0x21, 0
+	.dw 0x26c0, 0xc91d,	0x26ff, 0xc91d,		0x21, 0
+	.dw 0x2740, 0xc91d,	0x277f, 0xc91d,		0x21, 0
+	.dw 0x27c0, 0xc91d,	0x27ff, 0xc91d,		0x21, 0
+	.dw 0x2840, 0xc91d,	0x287f, 0xc91d,		0x21, 0
+	.dw 0x28c0, 0xc91d,	0x28ff, 0xc91d,		0x21, 0
+	.dw 0x2940, 0xc91d,	0x297f, 0xc91d,		0x21, 0
+	.dw 0x29c0, 0xc91d,	0x29ff, 0xc91d,		0x21, 0
+	.dw 0x2a40, 0xc91d,	0x2a7f, 0xc91d,		0x21, 0
+	.dw 0x2ac0, 0xc91d,	0x2aff, 0xc91d,		0x21, 0
+	.dw 0x2b40, 0xc91d,	0x2b7f, 0xc91d,		0x21, 0
+	.dw 0x2bc0, 0xc91d,	0x2bff, 0xc91d,		0x21, 0
+	.dw 0x2c40, 0xc91d,	0x2c7f, 0xc91d,		0x21, 0
+	.dw 0x2cc0, 0xc91d,	0x2cff, 0xc91d,		0x21, 0
+	.dw 0x2d40, 0xc91d,	0x2d7f, 0xc91d,		0x21, 0
+	.dw 0x2dc0, 0xc91d,	0x2dff, 0xc91d,		0x21, 0
+	.dw 0x2e40, 0xc91d,	0x2e7f, 0xc91d,		0x21, 0
+	.dw 0x2ec0, 0xc91d,	0x2eff, 0xc91d,		0x21, 0
+	.dw 0x2f40, 0xc91d,	0x2f7f, 0xc91d,		0x21, 0
+	.dw 0x2fc0, 0xc91d,	0x2fff, 0xc91d,		0x21, 0
+	.dw 0x3040, 0xc91d,	0x307f, 0xc91d,		0x21, 0
+	.dw 0x30c0, 0xc91d,	0x30ff, 0xc91d,		0x21, 0
+	.dw 0x3140, 0xc91d,	0x317f, 0xc91d,		0x21, 0
+	.dw 0x31c0, 0xc91d,	0x31ff, 0xc91d,		0x21, 0
+	.dw 0x3240, 0xc91d,	0x327f, 0xc91d,		0x21, 0
+	.dw 0x32c0, 0xc91d,	0x32ff, 0xc91d,		0x21, 0
+	.dw 0x3340, 0xc91d,	0x337f, 0xc91d,		0x21, 0
+	.dw 0x33c0, 0xc91d,	0x33ff, 0xc91d,		0x21, 0
+	.dw 0x3440, 0xc91d,	0x347f, 0xc91d,		0x21, 0
+	.dw 0x34c0, 0xc91d,	0x34ff, 0xc91d,		0x21, 0
+	.dw 0x3540, 0xc91d,	0x357f, 0xc91d,		0x21, 0
+	.dw 0x35c0, 0xc91d,	0x35ff, 0xc91d,		0x21, 0
+	.dw 0x3640, 0xc91d,	0x367f, 0xc91d,		0x21, 0
+	.dw 0x36c0, 0xc91d,	0x36ff, 0xc91d,		0x21, 0
+	.dw 0x3740, 0xc91d,	0x377f, 0xc91d,		0x21, 0
+	.dw 0x37c0, 0xc91d,	0x37ff, 0xc91d,		0x21, 0
+	.dw 0x3840, 0xc91d,	0x387f, 0xc91d,		0x21, 0
+	.dw 0x38c0, 0xc91d,	0x38ff, 0xc91d,		0x21, 0
+	.dw 0x3940, 0xc91d,	0x397f, 0xc91d,		0x21, 0
+	.dw 0x39c0, 0xc91d,	0x3fff, 0xc91d,		0x21, 0
+	.dw 0x4040, 0xc91d,	0x407f, 0xc91d,		0x21, 0
+	.dw 0x40c0, 0xc91d,	0x40ff, 0xc91d,		0x21, 0
+	.dw 0x4140, 0xc91d,	0x417f, 0xc91d,		0x21, 0
+	.dw 0x41c0, 0xc91d,	0x41ff, 0xc91d,		0x21, 0
+	.dw 0x4240, 0xc91d,	0x427f, 0xc91d,		0x21, 0
+	.dw 0x42c0, 0xc91d,	0x42ff, 0xc91d,		0x21, 0
+	.dw 0x4340, 0xc91d,	0x437f, 0xc91d,		0x21, 0
+	.dw 0x43c0, 0xc91d,	0x43ff, 0xc91d,		0x21, 0
+	.dw 0x4440, 0xc91d,	0x447f, 0xc91d,		0x21, 0
+	.dw 0x44c0, 0xc91d,	0x44ff, 0xc91d,		0x21, 0
+	.dw 0x4540, 0xc91d,	0x457f, 0xc91d,		0x21, 0
+	.dw 0x45c0, 0xc91d,	0x45ff, 0xc91d,		0x21, 0
+	.dw 0x4640, 0xc91d,	0x467f, 0xc91d,		0x21, 0
+	.dw 0x46c0, 0xc91d,	0x46ff, 0xc91d,		0x21, 0
+	.dw 0x4740, 0xc91d,	0x477f, 0xc91d,		0x21, 0
+	.dw 0x47c0, 0xc91d,	0x47ff, 0xc91d,		0x21, 0
+	.dw 0x4840, 0xc91d,	0x487f, 0xc91d,		0x21, 0
+	.dw 0x48c0, 0xc91d,	0x48ff, 0xc91d,		0x21, 0
+	.dw 0x4940, 0xc91d,	0x497f, 0xc91d,		0x21, 0
+	.dw 0x49c0, 0xc91d,	0x49ff, 0xc91d,		0x21, 0
+	.dw 0x4a40, 0xc91d,	0x4a7f, 0xc91d,		0x21, 0
+	.dw 0x4ac0, 0xc91d,	0x4aff, 0xc91d,		0x21, 0
+	.dw 0x4b40, 0xc91d,	0x4b7f, 0xc91d,		0x21, 0
+	.dw 0x4bc0, 0xc91d,	0x4bff, 0xc91d,		0x21, 0
+	.dw 0x4c40, 0xc91d,	0x4c7f, 0xc91d,		0x21, 0
+	.dw 0x4cc0, 0xc91d,	0x4cff, 0xc91d,		0x21, 0
+	.dw 0x4d40, 0xc91d,	0x4d7f, 0xc91d,		0x21, 0
+	.dw 0x4dc0, 0xc91d,	0x4dff, 0xc91d,		0x21, 0
+	.dw 0x4e40, 0xc91d,	0x4e7f, 0xc91d,		0x21, 0
+	.dw 0x4ec0, 0xc91d,	0x4eff, 0xc91d,		0x21, 0
+	.dw 0x4f40, 0xc91d,	0x4f7f, 0xc91d,		0x21, 0
+	.dw 0x4fc0, 0xc91d,	0x4fff, 0xc91d,		0x21, 0
+	.dw 0x5040, 0xc91d,	0x507f, 0xc91d,		0x21, 0
+	.dw 0x50c0, 0xc91d,	0x50ff, 0xc91d,		0x21, 0
+	.dw 0x5140, 0xc91d,	0x517f, 0xc91d,		0x21, 0
+	.dw 0x51c0, 0xc91d,	0x51ff, 0xc91d,		0x21, 0
+	.dw 0x5240, 0xc91d,	0x527f, 0xc91d,		0x21, 0
+	.dw 0x52c0, 0xc91d,	0x52ff, 0xc91d,		0x21, 0
+	.dw 0x5340, 0xc91d,	0x537f, 0xc91d,		0x21, 0
+	.dw 0x53c0, 0xc91d,	0x53ff, 0xc91d,		0x21, 0
+	.dw 0x5440, 0xc91d,	0x547f, 0xc91d,		0x21, 0
+	.dw 0x54c0, 0xc91d,	0x54ff, 0xc91d,		0x21, 0
+	.dw 0x5540, 0xc91d,	0x557f, 0xc91d,		0x21, 0
+	.dw 0x55c0, 0xc91d,	0x55ff, 0xc91d,		0x21, 0
+	.dw 0x5640, 0xc91d,	0x567f, 0xc91d,		0x21, 0
+	.dw 0x56c0, 0xc91d,	0x56ff, 0xc91d,		0x21, 0
+	.dw 0x5740, 0xc91d,	0x577f, 0xc91d,		0x21, 0
+	.dw 0x57c0, 0xc91d,	0x57ff, 0xc91d,		0x21, 0
+	.dw 0x5840, 0xc91d,	0x587f, 0xc91d,		0x21, 0
+	.dw 0x58c0, 0xc91d,	0x58ff, 0xc91d,		0x21, 0
+	.dw 0x5940, 0xc91d,	0x597f, 0xc91d,		0x21, 0
+	.dw 0x59c0, 0xc91d,	0x5fff, 0xc91d,		0x21, 0
+	.dw 0x6040, 0xc91d,	0x607f, 0xc91d,		0x21, 0
+	.dw 0x60c0, 0xc91d,	0x60ff, 0xc91d,		0x21, 0
+	.dw 0x6140, 0xc91d,	0x617f, 0xc91d,		0x21, 0
+	.dw 0x61c0, 0xc91d,	0x61ff, 0xc91d,		0x21, 0
+	.dw 0x6240, 0xc91d,	0x627f, 0xc91d,		0x21, 0
+	.dw 0x62c0, 0xc91d,	0x62ff, 0xc91d,		0x21, 0
+	.dw 0x6340, 0xc91d,	0x637f, 0xc91d,		0x21, 0
+	.dw 0x63c0, 0xc91d,	0x63ff, 0xc91d,		0x21, 0
+	.dw 0x6440, 0xc91d,	0x647f, 0xc91d,		0x21, 0
+	.dw 0x64c0, 0xc91d,	0x64ff, 0xc91d,		0x21, 0
+	.dw 0x6540, 0xc91d,	0x657f, 0xc91d,		0x21, 0
+	.dw 0x65c0, 0xc91d,	0x65ff, 0xc91d,		0x21, 0
+	.dw 0x6640, 0xc91d,	0x667f, 0xc91d,		0x21, 0
+	.dw 0x66c0, 0xc91d,	0x66ff, 0xc91d,		0x21, 0
+	.dw 0x6740, 0xc91d,	0x677f, 0xc91d,		0x21, 0
+	.dw 0x67c0, 0xc91d,	0x67ff, 0xc91d,		0x21, 0
+	.dw 0x6840, 0xc91d,	0x687f, 0xc91d,		0x21, 0
+	.dw 0x68c0, 0xc91d,	0x68ff, 0xc91d,		0x21, 0
+	.dw 0x6940, 0xc91d,	0x697f, 0xc91d,		0x21, 0
+	.dw 0x69c0, 0xc91d,	0x69ff, 0xc91d,		0x21, 0
+	.dw 0x6a40, 0xc91d,	0x6a7f, 0xc91d,		0x21, 0
+	.dw 0x6ac0, 0xc91d,	0x6aff, 0xc91d,		0x21, 0
+	.dw 0x6b40, 0xc91d,	0x6b7f, 0xc91d,		0x21, 0
+	.dw 0x6bc0, 0xc91d,	0x6bff, 0xc91d,		0x21, 0
+	.dw 0x6c40, 0xc91d,	0x6c7f, 0xc91d,		0x21, 0
+	.dw 0x6cc0, 0xc91d,	0x6cff, 0xc91d,		0x21, 0
+	.dw 0x6d40, 0xc91d,	0x6d7f, 0xc91d,		0x21, 0
+	.dw 0x6dc0, 0xc91d,	0x6dff, 0xc91d,		0x21, 0
+	.dw 0x6e40, 0xc91d,	0x6e7f, 0xc91d,		0x21, 0
+	.dw 0x6ec0, 0xc91d,	0x6eff, 0xc91d,		0x21, 0
+	.dw 0x6f40, 0xc91d,	0x6f7f, 0xc91d,		0x21, 0
+	.dw 0x6fc0, 0xc91d,	0x6fff, 0xc91d,		0x21, 0
+	.dw 0x7040, 0xc91d,	0x707f, 0xc91d,		0x21, 0
+	.dw 0x70c0, 0xc91d,	0x70ff, 0xc91d,		0x21, 0
+	.dw 0x7140, 0xc91d,	0x717f, 0xc91d,		0x21, 0
+	.dw 0x71c0, 0xc91d,	0x71ff, 0xc91d,		0x21, 0
+	.dw 0x7240, 0xc91d,	0x727f, 0xc91d,		0x21, 0
+	.dw 0x72c0, 0xc91d,	0x72ff, 0xc91d,		0x21, 0
+	.dw 0x7340, 0xc91d,	0x737f, 0xc91d,		0x21, 0
+	.dw 0x73c0, 0xc91d,	0x73ff, 0xc91d,		0x21, 0
+	.dw 0x7440, 0xc91d,	0x747f, 0xc91d,		0x21, 0
+	.dw 0x74c0, 0xc91d,	0x74ff, 0xc91d,		0x21, 0
+	.dw 0x7540, 0xc91d,	0x757f, 0xc91d,		0x21, 0
+	.dw 0x75c0, 0xc91d,	0x75ff, 0xc91d,		0x21, 0
+	.dw 0x7640, 0xc91d,	0x767f, 0xc91d,		0x21, 0
+	.dw 0x76c0, 0xc91d,	0x76ff, 0xc91d,		0x21, 0
+	.dw 0x7740, 0xc91d,	0x777f, 0xc91d,		0x21, 0
+	.dw 0x77c0, 0xc91d,	0x77ff, 0xc91d,		0x21, 0
+	.dw 0x7840, 0xc91d,	0x787f, 0xc91d,		0x21, 0
+	.dw 0x78c0, 0xc91d,	0x78ff, 0xc91d,		0x21, 0
+	.dw 0x7940, 0xc91d,	0x797f, 0xc91d,		0x21, 0
+	.dw 0x79c0, 0xc91d,	0x7fff, 0xc91d,		0x21, 0
+	.dw 0x8040, 0xc91d,	0x807f, 0xc91d,		0x21, 0
+	.dw 0x80c0, 0xc91d,	0x80ff, 0xc91d,		0x21, 0
+	.dw 0x8140, 0xc91d,	0x817f, 0xc91d,		0x21, 0
+	.dw 0x81c0, 0xc91d,	0x81ff, 0xc91d,		0x21, 0
+	.dw 0x8240, 0xc91d,	0x827f, 0xc91d,		0x21, 0
+	.dw 0x82c0, 0xc91d,	0x82ff, 0xc91d,		0x21, 0
+	.dw 0x8340, 0xc91d,	0x837f, 0xc91d,		0x21, 0
+	.dw 0x83c0, 0xc91d,	0x83ff, 0xc91d,		0x21, 0
+	.dw 0x8440, 0xc91d,	0x847f, 0xc91d,		0x21, 0
+	.dw 0x84c0, 0xc91d,	0x84ff, 0xc91d,		0x21, 0
+	.dw 0x8540, 0xc91d,	0x857f, 0xc91d,		0x21, 0
+	.dw 0x85c0, 0xc91d,	0x85ff, 0xc91d,		0x21, 0
+	.dw 0x8640, 0xc91d,	0x867f, 0xc91d,		0x21, 0
+	.dw 0x86c0, 0xc91d,	0x86ff, 0xc91d,		0x21, 0
+	.dw 0x8740, 0xc91d,	0x877f, 0xc91d,		0x21, 0
+	.dw 0x87c0, 0xc91d,	0x87ff, 0xc91d,		0x21, 0
+	.dw 0x8840, 0xc91d,	0x887f, 0xc91d,		0x21, 0
+	.dw 0x88c0, 0xc91d,	0x88ff, 0xc91d,		0x21, 0
+	.dw 0x8940, 0xc91d,	0x897f, 0xc91d,		0x21, 0
+	.dw 0x89c0, 0xc91d,	0x89ff, 0xc91d,		0x21, 0
+	.dw 0x8a40, 0xc91d,	0x8a7f, 0xc91d,		0x21, 0
+	.dw 0x8ac0, 0xc91d,	0x8aff, 0xc91d,		0x21, 0
+	.dw 0x8b40, 0xc91d,	0x8b7f, 0xc91d,		0x21, 0
+	.dw 0x8bc0, 0xc91d,	0x8bff, 0xc91d,		0x21, 0
+	.dw 0x8c40, 0xc91d,	0x8c7f, 0xc91d,		0x21, 0
+	.dw 0x8cc0, 0xc91d,	0x8cff, 0xc91d,		0x21, 0
+	.dw 0x8d40, 0xc91d,	0x8d7f, 0xc91d,		0x21, 0
+	.dw 0x8dc0, 0xc91d,	0x8dff, 0xc91d,		0x21, 0
+	.dw 0x8e40, 0xc91d,	0x8e7f, 0xc91d,		0x21, 0
+	.dw 0x8ec0, 0xc91d,	0x8eff, 0xc91d,		0x21, 0
+	.dw 0x8f40, 0xc91d,	0x8f7f, 0xc91d,		0x21, 0
+	.dw 0x8fc0, 0xc91d,	0x8fff, 0xc91d,		0x21, 0
+	.dw 0x9040, 0xc91d,	0x907f, 0xc91d,		0x21, 0
+	.dw 0x90c0, 0xc91d,	0x90ff, 0xc91d,		0x21, 0
+	.dw 0x9140, 0xc91d,	0x917f, 0xc91d,		0x21, 0
+	.dw 0x91c0, 0xc91d,	0x91ff, 0xc91d,		0x21, 0
+	.dw 0x9240, 0xc91d,	0x927f, 0xc91d,		0x21, 0
+	.dw 0x92c0, 0xc91d,	0x92ff, 0xc91d,		0x21, 0
+	.dw 0x9340, 0xc91d,	0x937f, 0xc91d,		0x21, 0
+	.dw 0x93c0, 0xc91d,	0x93ff, 0xc91d,		0x21, 0
+	.dw 0x9440, 0xc91d,	0x947f, 0xc91d,		0x21, 0
+	.dw 0x94c0, 0xc91d,	0x94ff, 0xc91d,		0x21, 0
+	.dw 0x9540, 0xc91d,	0x957f, 0xc91d,		0x21, 0
+	.dw 0x95c0, 0xc91d,	0x95ff, 0xc91d,		0x21, 0
+	.dw 0x9640, 0xc91d,	0x967f, 0xc91d,		0x21, 0
+	.dw 0x96c0, 0xc91d,	0x96ff, 0xc91d,		0x21, 0
+	.dw 0x9740, 0xc91d,	0x977f, 0xc91d,		0x21, 0
+	.dw 0x97c0, 0xc91d,	0x97ff, 0xc91d,		0x21, 0
+	.dw 0x9840, 0xc91d,	0x987f, 0xc91d,		0x21, 0
+	.dw 0x98c0, 0xc91d,	0x98ff, 0xc91d,		0x21, 0
+	.dw 0x9940, 0xc91d,	0x997f, 0xc91d,		0x21, 0
+	.dw 0x99c0, 0xc91d,	0x9fff, 0xc91d,		0x21, 0
+	.dw 0xa040, 0xc91d,	0xa07f, 0xc91d,		0x21, 0
+	.dw 0xa0c0, 0xc91d,	0xa0ff, 0xc91d,		0x21, 0
+	.dw 0xa140, 0xc91d,	0xa17f, 0xc91d,		0x21, 0
+	.dw 0xa1c0, 0xc91d,	0xa1ff, 0xc91d,		0x21, 0
+	.dw 0xa240, 0xc91d,	0xa27f, 0xc91d,		0x21, 0
+	.dw 0xa2c0, 0xc91d,	0xa2ff, 0xc91d,		0x21, 0
+	.dw 0xa340, 0xc91d,	0xa37f, 0xc91d,		0x21, 0
+	.dw 0xa3c0, 0xc91d,	0xa3ff, 0xc91d,		0x21, 0
+	.dw 0xa440, 0xc91d,	0xa47f, 0xc91d,		0x21, 0
+	.dw 0xa4c0, 0xc91d,	0xa4ff, 0xc91d,		0x21, 0
+	.dw 0xa540, 0xc91d,	0xa57f, 0xc91d,		0x21, 0
+	.dw 0xa5c0, 0xc91d,	0xa5ff, 0xc91d,		0x21, 0
+	.dw 0xa640, 0xc91d,	0xa67f, 0xc91d,		0x21, 0
+	.dw 0xa6c0, 0xc91d,	0xa6ff, 0xc91d,		0x21, 0
+	.dw 0xa740, 0xc91d,	0xa77f, 0xc91d,		0x21, 0
+	.dw 0xa7c0, 0xc91d,	0xa7ff, 0xc91d,		0x21, 0
+	.dw 0xa840, 0xc91d,	0xa87f, 0xc91d,		0x21, 0
+	.dw 0xa8c0, 0xc91d,	0xa8ff, 0xc91d,		0x21, 0
+	.dw 0xa940, 0xc91d,	0xa97f, 0xc91d,		0x21, 0
+	.dw 0xa9c0, 0xc91d,	0xa9ff, 0xc91d,		0x21, 0
+	.dw 0xaa40, 0xc91d,	0xaa7f, 0xc91d,		0x21, 0
+	.dw 0xaac0, 0xc91d,	0xaaff, 0xc91d,		0x21, 0
+	.dw 0xab40, 0xc91d,	0xab7f, 0xc91d,		0x21, 0
+	.dw 0xabc0, 0xc91d,	0xabff, 0xc91d,		0x21, 0
+	.dw 0xac40, 0xc91d,	0xac7f, 0xc91d,		0x21, 0
+	.dw 0xacc0, 0xc91d,	0xacff, 0xc91d,		0x21, 0
+	.dw 0xad40, 0xc91d,	0xad7f, 0xc91d,		0x21, 0
+	.dw 0xadc0, 0xc91d,	0xadff, 0xc91d,		0x21, 0
+	.dw 0xae40, 0xc91d,	0xae7f, 0xc91d,		0x21, 0
+	.dw 0xaec0, 0xc91d,	0xaeff, 0xc91d,		0x21, 0
+	.dw 0xaf40, 0xc91d,	0xaf7f, 0xc91d,		0x21, 0
+	.dw 0xafc0, 0xc91d,	0xafff, 0xc91d,		0x21, 0
+	.dw 0xb040, 0xc91d,	0xb07f, 0xc91d,		0x21, 0
+	.dw 0xb0c0, 0xc91d,	0xb0ff, 0xc91d,		0x21, 0
+	.dw 0xb140, 0xc91d,	0xb17f, 0xc91d,		0x21, 0
+	.dw 0xb1c0, 0xc91d,	0xb1ff, 0xc91d,		0x21, 0
+	.dw 0xb240, 0xc91d,	0xb27f, 0xc91d,		0x21, 0
+	.dw 0xb2c0, 0xc91d,	0xb2ff, 0xc91d,		0x21, 0
+	.dw 0xb340, 0xc91d,	0xb37f, 0xc91d,		0x21, 0
+	.dw 0xb3c0, 0xc91d,	0xb3ff, 0xc91d,		0x21, 0
+	.dw 0xb440, 0xc91d,	0xb47f, 0xc91d,		0x21, 0
+	.dw 0xb4c0, 0xc91d,	0xb4ff, 0xc91d,		0x21, 0
+	.dw 0xb540, 0xc91d,	0xb57f, 0xc91d,		0x21, 0
+	.dw 0xb5c0, 0xc91d,	0xb5ff, 0xc91d,		0x21, 0
+	.dw 0xb640, 0xc91d,	0xb67f, 0xc91d,		0x21, 0
+	.dw 0xb6c0, 0xc91d,	0xb6ff, 0xc91d,		0x21, 0
+	.dw 0xb740, 0xc91d,	0xb77f, 0xc91d,		0x21, 0
+	.dw 0xb7c0, 0xc91d,	0xb7ff, 0xc91d,		0x21, 0
+	.dw 0xb840, 0xc91d,	0xb87f, 0xc91d,		0x21, 0
+	.dw 0xb8c0, 0xc91d,	0xb8ff, 0xc91d,		0x21, 0
+	.dw 0xb940, 0xc91d,	0xb97f, 0xc91d,		0x21, 0
+	.dw 0xb9c0, 0xc91d,	0xbfff, 0xc91d,		0x21, 0
+	.dw 0xc040, 0xc91d,	0xc07f, 0xc91d,		0x21, 0
+	.dw 0xc0c0, 0xc91d,	0xc0ff, 0xc91d,		0x21, 0
+	.dw 0xc140, 0xc91d,	0xc17f, 0xc91d,		0x21, 0
+	.dw 0xc1c0, 0xc91d,	0xc1ff, 0xc91d,		0x21, 0
+	.dw 0xc240, 0xc91d,	0xc27f, 0xc91d,		0x21, 0
+	.dw 0xc2c0, 0xc91d,	0xc2ff, 0xc91d,		0x21, 0
+	.dw 0xc340, 0xc91d,	0xc37f, 0xc91d,		0x21, 0
+	.dw 0xc3c0, 0xc91d,	0xc3ff, 0xc91d,		0x21, 0
+	.dw 0xc440, 0xc91d,	0xc47f, 0xc91d,		0x21, 0
+	.dw 0xc4c0, 0xc91d,	0xc4ff, 0xc91d,		0x21, 0
+	.dw 0xc540, 0xc91d,	0xc57f, 0xc91d,		0x21, 0
+	.dw 0xc5c0, 0xc91d,	0xc5ff, 0xc91d,		0x21, 0
+	.dw 0xc640, 0xc91d,	0xc67f, 0xc91d,		0x21, 0
+	.dw 0xc6c0, 0xc91d,	0xc6ff, 0xc91d,		0x21, 0
+	.dw 0xc740, 0xc91d,	0xc77f, 0xc91d,		0x21, 0
+	.dw 0xc7c0, 0xc91d,	0xc7ff, 0xc91d,		0x21, 0
+	.dw 0xc840, 0xc91d,	0xc87f, 0xc91d,		0x21, 0
+	.dw 0xc8c0, 0xc91d,	0xc8ff, 0xc91d,		0x21, 0
+	.dw 0xc940, 0xc91d,	0xc97f, 0xc91d,		0x21, 0
+	.dw 0xc9c0, 0xc91d,	0xc9ff, 0xc91d,		0x21, 0
+	.dw 0xca40, 0xc91d,	0xca7f, 0xc91d,		0x21, 0
+	.dw 0xcac0, 0xc91d,	0xcaff, 0xc91d,		0x21, 0
+	.dw 0xcb40, 0xc91d,	0xcb7f, 0xc91d,		0x21, 0
+	.dw 0xcbc0, 0xc91d,	0xcbff, 0xc91d,		0x21, 0
+	.dw 0xcc40, 0xc91d,	0xcc7f, 0xc91d,		0x21, 0
+	.dw 0xccc0, 0xc91d,	0xccff, 0xc91d,		0x21, 0
+	.dw 0xcd40, 0xc91d,	0xcd7f, 0xc91d,		0x21, 0
+	.dw 0xcdc0, 0xc91d,	0xcdff, 0xc91d,		0x21, 0
+	.dw 0xce40, 0xc91d,	0xce7f, 0xc91d,		0x21, 0
+	.dw 0xcec0, 0xc91d,	0xceff, 0xc91d,		0x21, 0
+	.dw 0xcf40, 0xc91d,	0xcf7f, 0xc91d,		0x21, 0
+	.dw 0xcfc0, 0xc91d,	0xcfff, 0xc91d,		0x21, 0
+	.dw 0xd040, 0xc91d,	0xd07f, 0xc91d,		0x21, 0
+	.dw 0xd0c0, 0xc91d,	0xd0ff, 0xc91d,		0x21, 0
+	.dw 0xd140, 0xc91d,	0xd17f, 0xc91d,		0x21, 0
+	.dw 0xd1c0, 0xc91d,	0xd1ff, 0xc91d,		0x21, 0
+	.dw 0xd240, 0xc91d,	0xd27f, 0xc91d,		0x21, 0
+	.dw 0xd2c0, 0xc91d,	0xd2ff, 0xc91d,		0x21, 0
+	.dw 0xd340, 0xc91d,	0xd37f, 0xc91d,		0x21, 0
+	.dw 0xd3c0, 0xc91d,	0xd3ff, 0xc91d,		0x21, 0
+	.dw 0xd440, 0xc91d,	0xd47f, 0xc91d,		0x21, 0
+	.dw 0xd4c0, 0xc91d,	0xd4ff, 0xc91d,		0x21, 0
+	.dw 0xd540, 0xc91d,	0xd57f, 0xc91d,		0x21, 0
+	.dw 0xd5c0, 0xc91d,	0xd5ff, 0xc91d,		0x21, 0
+	.dw 0xd640, 0xc91d,	0xd67f, 0xc91d,		0x21, 0
+	.dw 0xd6c0, 0xc91d,	0xd6ff, 0xc91d,		0x21, 0
+	.dw 0xd740, 0xc91d,	0xd77f, 0xc91d,		0x21, 0
+	.dw 0xd7c0, 0xc91d,	0xd7ff, 0xc91d,		0x21, 0
+	.dw 0xd840, 0xc91d,	0xd87f, 0xc91d,		0x21, 0
+	.dw 0xd8c0, 0xc91d,	0xd8ff, 0xc91d,		0x21, 0
+	.dw 0xd940, 0xc91d,	0xd97f, 0xc91d,		0x21, 0
+	.dw 0xd9c0, 0xc91d,	0xdfff, 0xc91d,		0x21, 0
+	.dw 0xe040, 0xc91d,	0xe07f, 0xc91d,		0x21, 0
+	.dw 0xe0c0, 0xc91d,	0xe0ff, 0xc91d,		0x21, 0
+	.dw 0xe140, 0xc91d,	0xe17f, 0xc91d,		0x21, 0
+	.dw 0xe1c0, 0xc91d,	0xe1ff, 0xc91d,		0x21, 0
+	.dw 0xe240, 0xc91d,	0xe27f, 0xc91d,		0x21, 0
+	.dw 0xe2c0, 0xc91d,	0xe2ff, 0xc91d,		0x21, 0
+	.dw 0xe340, 0xc91d,	0xe37f, 0xc91d,		0x21, 0
+	.dw 0xe3c0, 0xc91d,	0xe3ff, 0xc91d,		0x21, 0
+	.dw 0xe440, 0xc91d,	0xe47f, 0xc91d,		0x21, 0
+	.dw 0xe4c0, 0xc91d,	0xe4ff, 0xc91d,		0x21, 0
+	.dw 0xe540, 0xc91d,	0xe57f, 0xc91d,		0x21, 0
+	.dw 0xe5c0, 0xc91d,	0xe5ff, 0xc91d,		0x21, 0
+	.dw 0xe640, 0xc91d,	0xe67f, 0xc91d,		0x21, 0
+	.dw 0xe6c0, 0xc91d,	0xe6ff, 0xc91d,		0x21, 0
+	.dw 0xe740, 0xc91d,	0xe77f, 0xc91d,		0x21, 0
+	.dw 0xe7c0, 0xc91d,	0xe7ff, 0xc91d,		0x21, 0
+	.dw 0xe840, 0xc91d,	0xe87f, 0xc91d,		0x21, 0
+	.dw 0xe8c0, 0xc91d,	0xe8ff, 0xc91d,		0x21, 0
+	.dw 0xe940, 0xc91d,	0xe97f, 0xc91d,		0x21, 0
+	.dw 0xe9c0, 0xc91d,	0xe9ff, 0xc91d,		0x21, 0
+	.dw 0xea40, 0xc91d,	0xea7f, 0xc91d,		0x21, 0
+	.dw 0xeac0, 0xc91d,	0xeaff, 0xc91d,		0x21, 0
+	.dw 0xeb40, 0xc91d,	0xeb7f, 0xc91d,		0x21, 0
+	.dw 0xebc0, 0xc91d,	0xebff, 0xc91d,		0x21, 0
+	.dw 0xec40, 0xc91d,	0xec7f, 0xc91d,		0x21, 0
+	.dw 0xecc0, 0xc91d,	0xecff, 0xc91d,		0x21, 0
+	.dw 0xed40, 0xc91d,	0xed7f, 0xc91d,		0x21, 0
+	.dw 0xedc0, 0xc91d,	0xedff, 0xc91d,		0x21, 0
+	.dw 0xee40, 0xc91d,	0xee7f, 0xc91d,		0x21, 0
+	.dw 0xeec0, 0xc91d,	0xeeff, 0xc91d,		0x21, 0
+	.dw 0xef40, 0xc91d,	0xef7f, 0xc91d,		0x21, 0
+	.dw 0xefc0, 0xc91d,	0xefff, 0xc91d,		0x21, 0
+	.dw 0xf040, 0xc91d,	0xf07f, 0xc91d,		0x21, 0
+	.dw 0xf0c0, 0xc91d,	0xf0ff, 0xc91d,		0x21, 0
+	.dw 0xf140, 0xc91d,	0xf17f, 0xc91d,		0x21, 0
+	.dw 0xf1c0, 0xc91d,	0xf1ff, 0xc91d,		0x21, 0
+	.dw 0xf240, 0xc91d,	0xf27f, 0xc91d,		0x21, 0
+	.dw 0xf2c0, 0xc91d,	0xf2ff, 0xc91d,		0x21, 0
+	.dw 0xf340, 0xc91d,	0xf37f, 0xc91d,		0x21, 0
+	.dw 0xf3c0, 0xc91d,	0xf3ff, 0xc91d,		0x21, 0
+	.dw 0xf440, 0xc91d,	0xf47f, 0xc91d,		0x21, 0
+	.dw 0xf4c0, 0xc91d,	0xf4ff, 0xc91d,		0x21, 0
+	.dw 0xf540, 0xc91d,	0xf57f, 0xc91d,		0x21, 0
+	.dw 0xf5c0, 0xc91d,	0xf5ff, 0xc91d,		0x21, 0
+	.dw 0xf640, 0xc91d,	0xf67f, 0xc91d,		0x21, 0
+	.dw 0xf6c0, 0xc91d,	0xf6ff, 0xc91d,		0x21, 0
+	.dw 0xf740, 0xc91d,	0xf77f, 0xc91d,		0x21, 0
+	.dw 0xf7c0, 0xc91d,	0xf7ff, 0xc91d,		0x21, 0
+	.dw 0xf840, 0xc91d,	0xf87f, 0xc91d,		0x21, 0
+	.dw 0xf8c0, 0xc91d,	0xf8ff, 0xc91d,		0x21, 0
+	.dw 0xf940, 0xc91d,	0xf97f, 0xc91d,		0x21, 0
+	.dw 0xf9c0, 0xc91d,	0xffff, 0xc91d,		0x21, 0
+	.dw 0x0040, 0xc91e,	0x007f, 0xc91e,		0x21, 0
+	.dw 0x00c0, 0xc91e,	0x00ff, 0xc91e,		0x21, 0
+	.dw 0x0140, 0xc91e,	0x017f, 0xc91e,		0x21, 0
+	.dw 0x01c0, 0xc91e,	0x01ff, 0xc91e,		0x21, 0
+	.dw 0x0240, 0xc91e,	0x027f, 0xc91e,		0x21, 0
+	.dw 0x02c0, 0xc91e,	0x02ff, 0xc91e,		0x21, 0
+	.dw 0x0340, 0xc91e,	0x037f, 0xc91e,		0x21, 0
+	.dw 0x03c0, 0xc91e,	0x03ff, 0xc91e,		0x21, 0
+	.dw 0x0440, 0xc91e,	0x047f, 0xc91e,		0x21, 0
+	.dw 0x04c0, 0xc91e,	0x04ff, 0xc91e,		0x21, 0
+	.dw 0x0540, 0xc91e,	0x057f, 0xc91e,		0x21, 0
+	.dw 0x05c0, 0xc91e,	0x05ff, 0xc91e,		0x21, 0
+	.dw 0x0640, 0xc91e,	0x067f, 0xc91e,		0x21, 0
+	.dw 0x06c0, 0xc91e,	0x06ff, 0xc91e,		0x21, 0
+	.dw 0x0740, 0xc91e,	0x077f, 0xc91e,		0x21, 0
+	.dw 0x07c0, 0xc91e,	0x07ff, 0xc91e,		0x21, 0
+	.dw 0x0840, 0xc91e,	0x087f, 0xc91e,		0x21, 0
+	.dw 0x08c0, 0xc91e,	0x08ff, 0xc91e,		0x21, 0
+	.dw 0x0940, 0xc91e,	0x097f, 0xc91e,		0x21, 0
+	.dw 0x09c0, 0xc91e,	0x09ff, 0xc91e,		0x21, 0
+	.dw 0x0a40, 0xc91e,	0x0a7f, 0xc91e,		0x21, 0
+	.dw 0x0ac0, 0xc91e,	0x0aff, 0xc91e,		0x21, 0
+	.dw 0x0b40, 0xc91e,	0x0b7f, 0xc91e,		0x21, 0
+	.dw 0x0bc0, 0xc91e,	0x0bff, 0xc91e,		0x21, 0
+	.dw 0x0c40, 0xc91e,	0x0c7f, 0xc91e,		0x21, 0
+	.dw 0x0cc0, 0xc91e,	0x0cff, 0xc91e,		0x21, 0
+	.dw 0x0d40, 0xc91e,	0x0d7f, 0xc91e,		0x21, 0
+	.dw 0x0dc0, 0xc91e,	0x0dff, 0xc91e,		0x21, 0
+	.dw 0x0e40, 0xc91e,	0x0e7f, 0xc91e,		0x21, 0
+	.dw 0x0ec0, 0xc91e,	0x0eff, 0xc91e,		0x21, 0
+	.dw 0x0f40, 0xc91e,	0x0f7f, 0xc91e,		0x21, 0
+	.dw 0x0fc0, 0xc91e,	0x0fff, 0xc91e,		0x21, 0
+	.dw 0x1040, 0xc91e,	0x107f, 0xc91e,		0x21, 0
+	.dw 0x10c0, 0xc91e,	0x10ff, 0xc91e,		0x21, 0
+	.dw 0x1140, 0xc91e,	0x117f, 0xc91e,		0x21, 0
+	.dw 0x11c0, 0xc91e,	0x11ff, 0xc91e,		0x21, 0
+	.dw 0x1240, 0xc91e,	0x127f, 0xc91e,		0x21, 0
+	.dw 0x12c0, 0xc91e,	0x12ff, 0xc91e,		0x21, 0
+	.dw 0x1340, 0xc91e,	0x137f, 0xc91e,		0x21, 0
+	.dw 0x13c0, 0xc91e,	0x13ff, 0xc91e,		0x21, 0
+	.dw 0x1440, 0xc91e,	0x147f, 0xc91e,		0x21, 0
+	.dw 0x14c0, 0xc91e,	0x14ff, 0xc91e,		0x21, 0
+	.dw 0x1540, 0xc91e,	0x157f, 0xc91e,		0x21, 0
+	.dw 0x15c0, 0xc91e,	0x15ff, 0xc91e,		0x21, 0
+	.dw 0x1640, 0xc91e,	0x167f, 0xc91e,		0x21, 0
+	.dw 0x16c0, 0xc91e,	0x16ff, 0xc91e,		0x21, 0
+	.dw 0x1740, 0xc91e,	0x177f, 0xc91e,		0x21, 0
+	.dw 0x17c0, 0xc91e,	0x17ff, 0xc91e,		0x21, 0
+	.dw 0x1840, 0xc91e,	0x187f, 0xc91e,		0x21, 0
+	.dw 0x18c0, 0xc91e,	0x18ff, 0xc91e,		0x21, 0
+	.dw 0x1940, 0xc91e,	0x197f, 0xc91e,		0x21, 0
+	.dw 0x19c0, 0xc91e,	0x1fff, 0xc91e,		0x21, 0
+	.dw 0x2040, 0xc91e,	0x207f, 0xc91e,		0x21, 0
+	.dw 0x20c0, 0xc91e,	0x20ff, 0xc91e,		0x21, 0
+	.dw 0x2140, 0xc91e,	0x217f, 0xc91e,		0x21, 0
+	.dw 0x21c0, 0xc91e,	0x21ff, 0xc91e,		0x21, 0
+	.dw 0x2240, 0xc91e,	0x227f, 0xc91e,		0x21, 0
+	.dw 0x22c0, 0xc91e,	0x22ff, 0xc91e,		0x21, 0
+	.dw 0x2340, 0xc91e,	0x237f, 0xc91e,		0x21, 0
+	.dw 0x23c0, 0xc91e,	0x23ff, 0xc91e,		0x21, 0
+	.dw 0x2440, 0xc91e,	0x247f, 0xc91e,		0x21, 0
+	.dw 0x24c0, 0xc91e,	0x24ff, 0xc91e,		0x21, 0
+	.dw 0x2540, 0xc91e,	0x257f, 0xc91e,		0x21, 0
+	.dw 0x25c0, 0xc91e,	0x25ff, 0xc91e,		0x21, 0
+	.dw 0x2640, 0xc91e,	0x267f, 0xc91e,		0x21, 0
+	.dw 0x26c0, 0xc91e,	0x26ff, 0xc91e,		0x21, 0
+	.dw 0x2740, 0xc91e,	0x277f, 0xc91e,		0x21, 0
+	.dw 0x27c0, 0xc91e,	0x27ff, 0xc91e,		0x21, 0
+	.dw 0x2840, 0xc91e,	0x287f, 0xc91e,		0x21, 0
+	.dw 0x28c0, 0xc91e,	0x28ff, 0xc91e,		0x21, 0
+	.dw 0x2940, 0xc91e,	0x297f, 0xc91e,		0x21, 0
+	.dw 0x29c0, 0xc91e,	0x29ff, 0xc91e,		0x21, 0
+	.dw 0x2a40, 0xc91e,	0x2a7f, 0xc91e,		0x21, 0
+	.dw 0x2ac0, 0xc91e,	0x2aff, 0xc91e,		0x21, 0
+	.dw 0x2b40, 0xc91e,	0x2b7f, 0xc91e,		0x21, 0
+	.dw 0x2bc0, 0xc91e,	0x2bff, 0xc91e,		0x21, 0
+	.dw 0x2c40, 0xc91e,	0x2c7f, 0xc91e,		0x21, 0
+	.dw 0x2cc0, 0xc91e,	0x2cff, 0xc91e,		0x21, 0
+	.dw 0x2d40, 0xc91e,	0x2d7f, 0xc91e,		0x21, 0
+	.dw 0x2dc0, 0xc91e,	0x2dff, 0xc91e,		0x21, 0
+	.dw 0x2e40, 0xc91e,	0x2e7f, 0xc91e,		0x21, 0
+	.dw 0x2ec0, 0xc91e,	0x2eff, 0xc91e,		0x21, 0
+	.dw 0x2f40, 0xc91e,	0x2f7f, 0xc91e,		0x21, 0
+	.dw 0x2fc0, 0xc91e,	0x2fff, 0xc91e,		0x21, 0
+	.dw 0x3040, 0xc91e,	0x307f, 0xc91e,		0x21, 0
+	.dw 0x30c0, 0xc91e,	0x30ff, 0xc91e,		0x21, 0
+	.dw 0x3140, 0xc91e,	0x317f, 0xc91e,		0x21, 0
+	.dw 0x31c0, 0xc91e,	0x31ff, 0xc91e,		0x21, 0
+	.dw 0x3240, 0xc91e,	0x327f, 0xc91e,		0x21, 0
+	.dw 0x32c0, 0xc91e,	0x32ff, 0xc91e,		0x21, 0
+	.dw 0x3340, 0xc91e,	0x337f, 0xc91e,		0x21, 0
+	.dw 0x33c0, 0xc91e,	0x33ff, 0xc91e,		0x21, 0
+	.dw 0x3440, 0xc91e,	0x347f, 0xc91e,		0x21, 0
+	.dw 0x34c0, 0xc91e,	0x34ff, 0xc91e,		0x21, 0
+	.dw 0x3540, 0xc91e,	0x357f, 0xc91e,		0x21, 0
+	.dw 0x35c0, 0xc91e,	0x35ff, 0xc91e,		0x21, 0
+	.dw 0x3640, 0xc91e,	0x367f, 0xc91e,		0x21, 0
+	.dw 0x36c0, 0xc91e,	0x36ff, 0xc91e,		0x21, 0
+	.dw 0x3740, 0xc91e,	0x377f, 0xc91e,		0x21, 0
+	.dw 0x37c0, 0xc91e,	0x37ff, 0xc91e,		0x21, 0
+	.dw 0x3840, 0xc91e,	0x387f, 0xc91e,		0x21, 0
+	.dw 0x38c0, 0xc91e,	0x38ff, 0xc91e,		0x21, 0
+	.dw 0x3940, 0xc91e,	0x397f, 0xc91e,		0x21, 0
+	.dw 0x39c0, 0xc91e,	0x3fff, 0xc91e,		0x21, 0
+	.dw 0x4040, 0xc91e,	0x407f, 0xc91e,		0x21, 0
+	.dw 0x40c0, 0xc91e,	0x40ff, 0xc91e,		0x21, 0
+	.dw 0x4140, 0xc91e,	0x417f, 0xc91e,		0x21, 0
+	.dw 0x41c0, 0xc91e,	0x41ff, 0xc91e,		0x21, 0
+	.dw 0x4240, 0xc91e,	0x427f, 0xc91e,		0x21, 0
+	.dw 0x42c0, 0xc91e,	0x42ff, 0xc91e,		0x21, 0
+	.dw 0x4340, 0xc91e,	0x437f, 0xc91e,		0x21, 0
+	.dw 0x43c0, 0xc91e,	0x43ff, 0xc91e,		0x21, 0
+	.dw 0x4440, 0xc91e,	0x447f, 0xc91e,		0x21, 0
+	.dw 0x44c0, 0xc91e,	0x44ff, 0xc91e,		0x21, 0
+	.dw 0x4540, 0xc91e,	0x457f, 0xc91e,		0x21, 0
+	.dw 0x45c0, 0xc91e,	0x45ff, 0xc91e,		0x21, 0
+	.dw 0x4640, 0xc91e,	0x467f, 0xc91e,		0x21, 0
+	.dw 0x46c0, 0xc91e,	0x46ff, 0xc91e,		0x21, 0
+	.dw 0x4740, 0xc91e,	0x477f, 0xc91e,		0x21, 0
+	.dw 0x47c0, 0xc91e,	0x47ff, 0xc91e,		0x21, 0
+	.dw 0x4840, 0xc91e,	0x487f, 0xc91e,		0x21, 0
+	.dw 0x48c0, 0xc91e,	0x48ff, 0xc91e,		0x21, 0
+	.dw 0x4940, 0xc91e,	0x497f, 0xc91e,		0x21, 0
+	.dw 0x49c0, 0xc91e,	0x49ff, 0xc91e,		0x21, 0
+	.dw 0x4a40, 0xc91e,	0x4a7f, 0xc91e,		0x21, 0
+	.dw 0x4ac0, 0xc91e,	0x4aff, 0xc91e,		0x21, 0
+	.dw 0x4b40, 0xc91e,	0x4b7f, 0xc91e,		0x21, 0
+	.dw 0x4bc0, 0xc91e,	0x4bff, 0xc91e,		0x21, 0
+	.dw 0x4c40, 0xc91e,	0x4c7f, 0xc91e,		0x21, 0
+	.dw 0x4cc0, 0xc91e,	0x4cff, 0xc91e,		0x21, 0
+	.dw 0x4d40, 0xc91e,	0x4d7f, 0xc91e,		0x21, 0
+	.dw 0x4dc0, 0xc91e,	0x4dff, 0xc91e,		0x21, 0
+	.dw 0x4e40, 0xc91e,	0x4e7f, 0xc91e,		0x21, 0
+	.dw 0x4ec0, 0xc91e,	0x4eff, 0xc91e,		0x21, 0
+	.dw 0x4f40, 0xc91e,	0x4f7f, 0xc91e,		0x21, 0
+	.dw 0x4fc0, 0xc91e,	0x4fff, 0xc91e,		0x21, 0
+	.dw 0x5040, 0xc91e,	0x507f, 0xc91e,		0x21, 0
+	.dw 0x50c0, 0xc91e,	0x50ff, 0xc91e,		0x21, 0
+	.dw 0x5140, 0xc91e,	0x517f, 0xc91e,		0x21, 0
+	.dw 0x51c0, 0xc91e,	0x51ff, 0xc91e,		0x21, 0
+	.dw 0x5240, 0xc91e,	0x527f, 0xc91e,		0x21, 0
+	.dw 0x52c0, 0xc91e,	0x52ff, 0xc91e,		0x21, 0
+	.dw 0x5340, 0xc91e,	0x537f, 0xc91e,		0x21, 0
+	.dw 0x53c0, 0xc91e,	0x53ff, 0xc91e,		0x21, 0
+	.dw 0x5440, 0xc91e,	0x547f, 0xc91e,		0x21, 0
+	.dw 0x54c0, 0xc91e,	0x54ff, 0xc91e,		0x21, 0
+	.dw 0x5540, 0xc91e,	0x557f, 0xc91e,		0x21, 0
+	.dw 0x55c0, 0xc91e,	0x55ff, 0xc91e,		0x21, 0
+	.dw 0x5640, 0xc91e,	0x567f, 0xc91e,		0x21, 0
+	.dw 0x56c0, 0xc91e,	0x56ff, 0xc91e,		0x21, 0
+	.dw 0x5740, 0xc91e,	0x577f, 0xc91e,		0x21, 0
+	.dw 0x57c0, 0xc91e,	0x57ff, 0xc91e,		0x21, 0
+	.dw 0x5840, 0xc91e,	0x587f, 0xc91e,		0x21, 0
+	.dw 0x58c0, 0xc91e,	0x58ff, 0xc91e,		0x21, 0
+	.dw 0x5940, 0xc91e,	0x597f, 0xc91e,		0x21, 0
+	.dw 0x59c0, 0xc91e,	0x5fff, 0xc91e,		0x21, 0
+	.dw 0x6040, 0xc91e,	0x607f, 0xc91e,		0x21, 0
+	.dw 0x60c0, 0xc91e,	0x60ff, 0xc91e,		0x21, 0
+	.dw 0x6140, 0xc91e,	0x617f, 0xc91e,		0x21, 0
+	.dw 0x61c0, 0xc91e,	0x61ff, 0xc91e,		0x21, 0
+	.dw 0x6240, 0xc91e,	0x627f, 0xc91e,		0x21, 0
+	.dw 0x62c0, 0xc91e,	0x62ff, 0xc91e,		0x21, 0
+	.dw 0x6340, 0xc91e,	0x637f, 0xc91e,		0x21, 0
+	.dw 0x63c0, 0xc91e,	0x63ff, 0xc91e,		0x21, 0
+	.dw 0x6440, 0xc91e,	0x647f, 0xc91e,		0x21, 0
+	.dw 0x64c0, 0xc91e,	0x64ff, 0xc91e,		0x21, 0
+	.dw 0x6540, 0xc91e,	0x657f, 0xc91e,		0x21, 0
+	.dw 0x65c0, 0xc91e,	0x65ff, 0xc91e,		0x21, 0
+	.dw 0x6640, 0xc91e,	0x667f, 0xc91e,		0x21, 0
+	.dw 0x66c0, 0xc91e,	0x66ff, 0xc91e,		0x21, 0
+	.dw 0x6740, 0xc91e,	0x677f, 0xc91e,		0x21, 0
+	.dw 0x67c0, 0xc91e,	0x67ff, 0xc91e,		0x21, 0
+	.dw 0x6840, 0xc91e,	0x687f, 0xc91e,		0x21, 0
+	.dw 0x68c0, 0xc91e,	0x68ff, 0xc91e,		0x21, 0
+	.dw 0x6940, 0xc91e,	0x697f, 0xc91e,		0x21, 0
+	.dw 0x69c0, 0xc91e,	0x69ff, 0xc91e,		0x21, 0
+	.dw 0x6a40, 0xc91e,	0x6a7f, 0xc91e,		0x21, 0
+	.dw 0x6ac0, 0xc91e,	0x6aff, 0xc91e,		0x21, 0
+	.dw 0x6b40, 0xc91e,	0x6b7f, 0xc91e,		0x21, 0
+	.dw 0x6bc0, 0xc91e,	0x6bff, 0xc91e,		0x21, 0
+	.dw 0x6c40, 0xc91e,	0x6c7f, 0xc91e,		0x21, 0
+	.dw 0x6cc0, 0xc91e,	0x6cff, 0xc91e,		0x21, 0
+	.dw 0x6d40, 0xc91e,	0x6d7f, 0xc91e,		0x21, 0
+	.dw 0x6dc0, 0xc91e,	0x6dff, 0xc91e,		0x21, 0
+	.dw 0x6e40, 0xc91e,	0x6e7f, 0xc91e,		0x21, 0
+	.dw 0x6ec0, 0xc91e,	0x6eff, 0xc91e,		0x21, 0
+	.dw 0x6f40, 0xc91e,	0x6f7f, 0xc91e,		0x21, 0
+	.dw 0x6fc0, 0xc91e,	0x6fff, 0xc91e,		0x21, 0
+	.dw 0x7040, 0xc91e,	0x707f, 0xc91e,		0x21, 0
+	.dw 0x70c0, 0xc91e,	0x70ff, 0xc91e,		0x21, 0
+	.dw 0x7140, 0xc91e,	0x717f, 0xc91e,		0x21, 0
+	.dw 0x71c0, 0xc91e,	0x71ff, 0xc91e,		0x21, 0
+	.dw 0x7240, 0xc91e,	0x727f, 0xc91e,		0x21, 0
+	.dw 0x72c0, 0xc91e,	0x72ff, 0xc91e,		0x21, 0
+	.dw 0x7340, 0xc91e,	0x737f, 0xc91e,		0x21, 0
+	.dw 0x73c0, 0xc91e,	0x73ff, 0xc91e,		0x21, 0
+	.dw 0x7440, 0xc91e,	0x747f, 0xc91e,		0x21, 0
+	.dw 0x74c0, 0xc91e,	0x74ff, 0xc91e,		0x21, 0
+	.dw 0x7540, 0xc91e,	0x757f, 0xc91e,		0x21, 0
+	.dw 0x75c0, 0xc91e,	0x75ff, 0xc91e,		0x21, 0
+	.dw 0x7640, 0xc91e,	0x767f, 0xc91e,		0x21, 0
+	.dw 0x76c0, 0xc91e,	0x76ff, 0xc91e,		0x21, 0
+	.dw 0x7740, 0xc91e,	0x777f, 0xc91e,		0x21, 0
+	.dw 0x77c0, 0xc91e,	0x77ff, 0xc91e,		0x21, 0
+	.dw 0x7840, 0xc91e,	0x787f, 0xc91e,		0x21, 0
+	.dw 0x78c0, 0xc91e,	0x78ff, 0xc91e,		0x21, 0
+	.dw 0x7940, 0xc91e,	0x797f, 0xc91e,		0x21, 0
+	.dw 0x79c0, 0xc91e,	0x7fff, 0xc91e,		0x21, 0
+	.dw 0x8040, 0xc91e,	0x807f, 0xc91e,		0x21, 0
+	.dw 0x80c0, 0xc91e,	0x80ff, 0xc91e,		0x21, 0
+	.dw 0x8140, 0xc91e,	0x817f, 0xc91e,		0x21, 0
+	.dw 0x81c0, 0xc91e,	0x81ff, 0xc91e,		0x21, 0
+	.dw 0x8240, 0xc91e,	0x827f, 0xc91e,		0x21, 0
+	.dw 0x82c0, 0xc91e,	0x82ff, 0xc91e,		0x21, 0
+	.dw 0x8340, 0xc91e,	0x837f, 0xc91e,		0x21, 0
+	.dw 0x83c0, 0xc91e,	0x83ff, 0xc91e,		0x21, 0
+	.dw 0x8440, 0xc91e,	0x847f, 0xc91e,		0x21, 0
+	.dw 0x84c0, 0xc91e,	0x84ff, 0xc91e,		0x21, 0
+	.dw 0x8540, 0xc91e,	0x857f, 0xc91e,		0x21, 0
+	.dw 0x85c0, 0xc91e,	0x85ff, 0xc91e,		0x21, 0
+	.dw 0x8640, 0xc91e,	0x867f, 0xc91e,		0x21, 0
+	.dw 0x86c0, 0xc91e,	0x86ff, 0xc91e,		0x21, 0
+	.dw 0x8740, 0xc91e,	0x877f, 0xc91e,		0x21, 0
+	.dw 0x87c0, 0xc91e,	0x87ff, 0xc91e,		0x21, 0
+	.dw 0x8840, 0xc91e,	0x887f, 0xc91e,		0x21, 0
+	.dw 0x88c0, 0xc91e,	0x88ff, 0xc91e,		0x21, 0
+	.dw 0x8940, 0xc91e,	0x897f, 0xc91e,		0x21, 0
+	.dw 0x89c0, 0xc91e,	0x89ff, 0xc91e,		0x21, 0
+	.dw 0x8a40, 0xc91e,	0x8a7f, 0xc91e,		0x21, 0
+	.dw 0x8ac0, 0xc91e,	0x8aff, 0xc91e,		0x21, 0
+	.dw 0x8b40, 0xc91e,	0x8b7f, 0xc91e,		0x21, 0
+	.dw 0x8bc0, 0xc91e,	0x8bff, 0xc91e,		0x21, 0
+	.dw 0x8c40, 0xc91e,	0x8c7f, 0xc91e,		0x21, 0
+	.dw 0x8cc0, 0xc91e,	0x8cff, 0xc91e,		0x21, 0
+	.dw 0x8d40, 0xc91e,	0x8d7f, 0xc91e,		0x21, 0
+	.dw 0x8dc0, 0xc91e,	0x8dff, 0xc91e,		0x21, 0
+	.dw 0x8e40, 0xc91e,	0x8e7f, 0xc91e,		0x21, 0
+	.dw 0x8ec0, 0xc91e,	0x8eff, 0xc91e,		0x21, 0
+	.dw 0x8f40, 0xc91e,	0x8f7f, 0xc91e,		0x21, 0
+	.dw 0x8fc0, 0xc91e,	0x8fff, 0xc91e,		0x21, 0
+	.dw 0x9040, 0xc91e,	0x907f, 0xc91e,		0x21, 0
+	.dw 0x90c0, 0xc91e,	0x90ff, 0xc91e,		0x21, 0
+	.dw 0x9140, 0xc91e,	0x917f, 0xc91e,		0x21, 0
+	.dw 0x91c0, 0xc91e,	0x91ff, 0xc91e,		0x21, 0
+	.dw 0x9240, 0xc91e,	0x927f, 0xc91e,		0x21, 0
+	.dw 0x92c0, 0xc91e,	0x92ff, 0xc91e,		0x21, 0
+	.dw 0x9340, 0xc91e,	0x937f, 0xc91e,		0x21, 0
+	.dw 0x93c0, 0xc91e,	0x93ff, 0xc91e,		0x21, 0
+	.dw 0x9440, 0xc91e,	0x947f, 0xc91e,		0x21, 0
+	.dw 0x94c0, 0xc91e,	0x94ff, 0xc91e,		0x21, 0
+	.dw 0x9540, 0xc91e,	0x957f, 0xc91e,		0x21, 0
+	.dw 0x95c0, 0xc91e,	0x95ff, 0xc91e,		0x21, 0
+	.dw 0x9640, 0xc91e,	0x967f, 0xc91e,		0x21, 0
+	.dw 0x96c0, 0xc91e,	0x96ff, 0xc91e,		0x21, 0
+	.dw 0x9740, 0xc91e,	0x977f, 0xc91e,		0x21, 0
+	.dw 0x97c0, 0xc91e,	0x97ff, 0xc91e,		0x21, 0
+	.dw 0x9840, 0xc91e,	0x987f, 0xc91e,		0x21, 0
+	.dw 0x98c0, 0xc91e,	0x98ff, 0xc91e,		0x21, 0
+	.dw 0x9940, 0xc91e,	0x997f, 0xc91e,		0x21, 0
+	.dw 0x99c0, 0xc91e,	0x9fff, 0xc91e,		0x21, 0
+	.dw 0xa040, 0xc91e,	0xa07f, 0xc91e,		0x21, 0
+	.dw 0xa0c0, 0xc91e,	0xa0ff, 0xc91e,		0x21, 0
+	.dw 0xa140, 0xc91e,	0xa17f, 0xc91e,		0x21, 0
+	.dw 0xa1c0, 0xc91e,	0xa1ff, 0xc91e,		0x21, 0
+	.dw 0xa240, 0xc91e,	0xa27f, 0xc91e,		0x21, 0
+	.dw 0xa2c0, 0xc91e,	0xa2ff, 0xc91e,		0x21, 0
+	.dw 0xa340, 0xc91e,	0xa37f, 0xc91e,		0x21, 0
+	.dw 0xa3c0, 0xc91e,	0xa3ff, 0xc91e,		0x21, 0
+	.dw 0xa440, 0xc91e,	0xa47f, 0xc91e,		0x21, 0
+	.dw 0xa4c0, 0xc91e,	0xa4ff, 0xc91e,		0x21, 0
+	.dw 0xa540, 0xc91e,	0xa57f, 0xc91e,		0x21, 0
+	.dw 0xa5c0, 0xc91e,	0xa5ff, 0xc91e,		0x21, 0
+	.dw 0xa640, 0xc91e,	0xa67f, 0xc91e,		0x21, 0
+	.dw 0xa6c0, 0xc91e,	0xa6ff, 0xc91e,		0x21, 0
+	.dw 0xa740, 0xc91e,	0xa77f, 0xc91e,		0x21, 0
+	.dw 0xa7c0, 0xc91e,	0xa7ff, 0xc91e,		0x21, 0
+	.dw 0xa840, 0xc91e,	0xa87f, 0xc91e,		0x21, 0
+	.dw 0xa8c0, 0xc91e,	0xa8ff, 0xc91e,		0x21, 0
+	.dw 0xa940, 0xc91e,	0xa97f, 0xc91e,		0x21, 0
+	.dw 0xa9c0, 0xc91e,	0xa9ff, 0xc91e,		0x21, 0
+	.dw 0xaa40, 0xc91e,	0xaa7f, 0xc91e,		0x21, 0
+	.dw 0xaac0, 0xc91e,	0xaaff, 0xc91e,		0x21, 0
+	.dw 0xab40, 0xc91e,	0xab7f, 0xc91e,		0x21, 0
+	.dw 0xabc0, 0xc91e,	0xabff, 0xc91e,		0x21, 0
+	.dw 0xac40, 0xc91e,	0xac7f, 0xc91e,		0x21, 0
+	.dw 0xacc0, 0xc91e,	0xacff, 0xc91e,		0x21, 0
+	.dw 0xad40, 0xc91e,	0xad7f, 0xc91e,		0x21, 0
+	.dw 0xadc0, 0xc91e,	0xadff, 0xc91e,		0x21, 0
+	.dw 0xae40, 0xc91e,	0xae7f, 0xc91e,		0x21, 0
+	.dw 0xaec0, 0xc91e,	0xaeff, 0xc91e,		0x21, 0
+	.dw 0xaf40, 0xc91e,	0xaf7f, 0xc91e,		0x21, 0
+	.dw 0xafc0, 0xc91e,	0xafff, 0xc91e,		0x21, 0
+	.dw 0xb040, 0xc91e,	0xb07f, 0xc91e,		0x21, 0
+	.dw 0xb0c0, 0xc91e,	0xb0ff, 0xc91e,		0x21, 0
+	.dw 0xb140, 0xc91e,	0xb17f, 0xc91e,		0x21, 0
+	.dw 0xb1c0, 0xc91e,	0xb1ff, 0xc91e,		0x21, 0
+	.dw 0xb240, 0xc91e,	0xb27f, 0xc91e,		0x21, 0
+	.dw 0xb2c0, 0xc91e,	0xb2ff, 0xc91e,		0x21, 0
+	.dw 0xb340, 0xc91e,	0xb37f, 0xc91e,		0x21, 0
+	.dw 0xb3c0, 0xc91e,	0xb3ff, 0xc91e,		0x21, 0
+	.dw 0xb440, 0xc91e,	0xb47f, 0xc91e,		0x21, 0
+	.dw 0xb4c0, 0xc91e,	0xb4ff, 0xc91e,		0x21, 0
+	.dw 0xb540, 0xc91e,	0xb57f, 0xc91e,		0x21, 0
+	.dw 0xb5c0, 0xc91e,	0xb5ff, 0xc91e,		0x21, 0
+	.dw 0xb640, 0xc91e,	0xb67f, 0xc91e,		0x21, 0
+	.dw 0xb6c0, 0xc91e,	0xb6ff, 0xc91e,		0x21, 0
+	.dw 0xb740, 0xc91e,	0xb77f, 0xc91e,		0x21, 0
+	.dw 0xb7c0, 0xc91e,	0xb7ff, 0xc91e,		0x21, 0
+	.dw 0xb840, 0xc91e,	0xb87f, 0xc91e,		0x21, 0
+	.dw 0xb8c0, 0xc91e,	0xb8ff, 0xc91e,		0x21, 0
+	.dw 0xb940, 0xc91e,	0xb97f, 0xc91e,		0x21, 0
+	.dw 0xb9c0, 0xc91e,	0xbfff, 0xc91e,		0x21, 0
+	.dw 0xc040, 0xc91e,	0xc07f, 0xc91e,		0x21, 0
+	.dw 0xc0c0, 0xc91e,	0xc0ff, 0xc91e,		0x21, 0
+	.dw 0xc140, 0xc91e,	0xc17f, 0xc91e,		0x21, 0
+	.dw 0xc1c0, 0xc91e,	0xc1ff, 0xc91e,		0x21, 0
+	.dw 0xc240, 0xc91e,	0xc27f, 0xc91e,		0x21, 0
+	.dw 0xc2c0, 0xc91e,	0xc2ff, 0xc91e,		0x21, 0
+	.dw 0xc340, 0xc91e,	0xc37f, 0xc91e,		0x21, 0
+	.dw 0xc3c0, 0xc91e,	0xc3ff, 0xc91e,		0x21, 0
+	.dw 0xc440, 0xc91e,	0xc47f, 0xc91e,		0x21, 0
+	.dw 0xc4c0, 0xc91e,	0xc4ff, 0xc91e,		0x21, 0
+	.dw 0xc540, 0xc91e,	0xc57f, 0xc91e,		0x21, 0
+	.dw 0xc5c0, 0xc91e,	0xc5ff, 0xc91e,		0x21, 0
+	.dw 0xc640, 0xc91e,	0xc67f, 0xc91e,		0x21, 0
+	.dw 0xc6c0, 0xc91e,	0xc6ff, 0xc91e,		0x21, 0
+	.dw 0xc740, 0xc91e,	0xc77f, 0xc91e,		0x21, 0
+	.dw 0xc7c0, 0xc91e,	0xc7ff, 0xc91e,		0x21, 0
+	.dw 0xc840, 0xc91e,	0xc87f, 0xc91e,		0x21, 0
+	.dw 0xc8c0, 0xc91e,	0xc8ff, 0xc91e,		0x21, 0
+	.dw 0xc940, 0xc91e,	0xc97f, 0xc91e,		0x21, 0
+	.dw 0xc9c0, 0xc91e,	0xc9ff, 0xc91e,		0x21, 0
+	.dw 0xca40, 0xc91e,	0xca7f, 0xc91e,		0x21, 0
+	.dw 0xcac0, 0xc91e,	0xcaff, 0xc91e,		0x21, 0
+	.dw 0xcb40, 0xc91e,	0xcb7f, 0xc91e,		0x21, 0
+	.dw 0xcbc0, 0xc91e,	0xcbff, 0xc91e,		0x21, 0
+	.dw 0xcc40, 0xc91e,	0xcc7f, 0xc91e,		0x21, 0
+	.dw 0xccc0, 0xc91e,	0xccff, 0xc91e,		0x21, 0
+	.dw 0xcd40, 0xc91e,	0xcd7f, 0xc91e,		0x21, 0
+	.dw 0xcdc0, 0xc91e,	0xcdff, 0xc91e,		0x21, 0
+	.dw 0xce40, 0xc91e,	0xce7f, 0xc91e,		0x21, 0
+	.dw 0xcec0, 0xc91e,	0xceff, 0xc91e,		0x21, 0
+	.dw 0xcf40, 0xc91e,	0xcf7f, 0xc91e,		0x21, 0
+	.dw 0xcfc0, 0xc91e,	0xcfff, 0xc91e,		0x21, 0
+	.dw 0xd040, 0xc91e,	0xd07f, 0xc91e,		0x21, 0
+	.dw 0xd0c0, 0xc91e,	0xd0ff, 0xc91e,		0x21, 0
+	.dw 0xd140, 0xc91e,	0xd17f, 0xc91e,		0x21, 0
+	.dw 0xd1c0, 0xc91e,	0xd1ff, 0xc91e,		0x21, 0
+	.dw 0xd240, 0xc91e,	0xd27f, 0xc91e,		0x21, 0
+	.dw 0xd2c0, 0xc91e,	0xd2ff, 0xc91e,		0x21, 0
+	.dw 0xd340, 0xc91e,	0xd37f, 0xc91e,		0x21, 0
+	.dw 0xd3c0, 0xc91e,	0xd3ff, 0xc91e,		0x21, 0
+	.dw 0xd440, 0xc91e,	0xd47f, 0xc91e,		0x21, 0
+	.dw 0xd4c0, 0xc91e,	0xd4ff, 0xc91e,		0x21, 0
+	.dw 0xd540, 0xc91e,	0xd57f, 0xc91e,		0x21, 0
+	.dw 0xd5c0, 0xc91e,	0xd5ff, 0xc91e,		0x21, 0
+	.dw 0xd640, 0xc91e,	0xd67f, 0xc91e,		0x21, 0
+	.dw 0xd6c0, 0xc91e,	0xd6ff, 0xc91e,		0x21, 0
+	.dw 0xd740, 0xc91e,	0xd77f, 0xc91e,		0x21, 0
+	.dw 0xd7c0, 0xc91e,	0xd7ff, 0xc91e,		0x21, 0
+	.dw 0xd840, 0xc91e,	0xd87f, 0xc91e,		0x21, 0
+	.dw 0xd8c0, 0xc91e,	0xd8ff, 0xc91e,		0x21, 0
+	.dw 0xd940, 0xc91e,	0xd97f, 0xc91e,		0x21, 0
+	.dw 0xd9c0, 0xc91e,	0xdfff, 0xc91e,		0x21, 0
+	.dw 0xe040, 0xc91e,	0xe07f, 0xc91e,		0x21, 0
+	.dw 0xe0c0, 0xc91e,	0xe0ff, 0xc91e,		0x21, 0
+	.dw 0xe140, 0xc91e,	0xe17f, 0xc91e,		0x21, 0
+	.dw 0xe1c0, 0xc91e,	0xe1ff, 0xc91e,		0x21, 0
+	.dw 0xe240, 0xc91e,	0xe27f, 0xc91e,		0x21, 0
+	.dw 0xe2c0, 0xc91e,	0xe2ff, 0xc91e,		0x21, 0
+	.dw 0xe340, 0xc91e,	0xe37f, 0xc91e,		0x21, 0
+	.dw 0xe3c0, 0xc91e,	0xe3ff, 0xc91e,		0x21, 0
+	.dw 0xe440, 0xc91e,	0xe47f, 0xc91e,		0x21, 0
+	.dw 0xe4c0, 0xc91e,	0xe4ff, 0xc91e,		0x21, 0
+	.dw 0xe540, 0xc91e,	0xe57f, 0xc91e,		0x21, 0
+	.dw 0xe5c0, 0xc91e,	0xe5ff, 0xc91e,		0x21, 0
+	.dw 0xe640, 0xc91e,	0xe67f, 0xc91e,		0x21, 0
+	.dw 0xe6c0, 0xc91e,	0xe6ff, 0xc91e,		0x21, 0
+	.dw 0xe740, 0xc91e,	0xe77f, 0xc91e,		0x21, 0
+	.dw 0xe7c0, 0xc91e,	0xe7ff, 0xc91e,		0x21, 0
+	.dw 0xe840, 0xc91e,	0xe87f, 0xc91e,		0x21, 0
+	.dw 0xe8c0, 0xc91e,	0xe8ff, 0xc91e,		0x21, 0
+	.dw 0xe940, 0xc91e,	0xe97f, 0xc91e,		0x21, 0
+	.dw 0xe9c0, 0xc91e,	0xe9ff, 0xc91e,		0x21, 0
+	.dw 0xea40, 0xc91e,	0xea7f, 0xc91e,		0x21, 0
+	.dw 0xeac0, 0xc91e,	0xeaff, 0xc91e,		0x21, 0
+	.dw 0xeb40, 0xc91e,	0xeb7f, 0xc91e,		0x21, 0
+	.dw 0xebc0, 0xc91e,	0xebff, 0xc91e,		0x21, 0
+	.dw 0xec40, 0xc91e,	0xec7f, 0xc91e,		0x21, 0
+	.dw 0xecc0, 0xc91e,	0xecff, 0xc91e,		0x21, 0
+	.dw 0xed40, 0xc91e,	0xed7f, 0xc91e,		0x21, 0
+	.dw 0xedc0, 0xc91e,	0xedff, 0xc91e,		0x21, 0
+	.dw 0xee40, 0xc91e,	0xee7f, 0xc91e,		0x21, 0
+	.dw 0xeec0, 0xc91e,	0xeeff, 0xc91e,		0x21, 0
+	.dw 0xef40, 0xc91e,	0xef7f, 0xc91e,		0x21, 0
+	.dw 0xefc0, 0xc91e,	0xefff, 0xc91e,		0x21, 0
+	.dw 0xf040, 0xc91e,	0xf07f, 0xc91e,		0x21, 0
+	.dw 0xf0c0, 0xc91e,	0xf0ff, 0xc91e,		0x21, 0
+	.dw 0xf140, 0xc91e,	0xf17f, 0xc91e,		0x21, 0
+	.dw 0xf1c0, 0xc91e,	0xf1ff, 0xc91e,		0x21, 0
+	.dw 0xf240, 0xc91e,	0xf27f, 0xc91e,		0x21, 0
+	.dw 0xf2c0, 0xc91e,	0xf2ff, 0xc91e,		0x21, 0
+	.dw 0xf340, 0xc91e,	0xf37f, 0xc91e,		0x21, 0
+	.dw 0xf3c0, 0xc91e,	0xf3ff, 0xc91e,		0x21, 0
+	.dw 0xf440, 0xc91e,	0xf47f, 0xc91e,		0x21, 0
+	.dw 0xf4c0, 0xc91e,	0xf4ff, 0xc91e,		0x21, 0
+	.dw 0xf540, 0xc91e,	0xf57f, 0xc91e,		0x21, 0
+	.dw 0xf5c0, 0xc91e,	0xf5ff, 0xc91e,		0x21, 0
+	.dw 0xf640, 0xc91e,	0xf67f, 0xc91e,		0x21, 0
+	.dw 0xf6c0, 0xc91e,	0xf6ff, 0xc91e,		0x21, 0
+	.dw 0xf740, 0xc91e,	0xf77f, 0xc91e,		0x21, 0
+	.dw 0xf7c0, 0xc91e,	0xf7ff, 0xc91e,		0x21, 0
+	.dw 0xf840, 0xc91e,	0xf87f, 0xc91e,		0x21, 0
+	.dw 0xf8c0, 0xc91e,	0xf8ff, 0xc91e,		0x21, 0
+	.dw 0xf940, 0xc91e,	0xf97f, 0xc91e,		0x21, 0
+	.dw 0xf9c0, 0xc91e,	0xffff, 0xc91e,		0x21, 0
+	.dw 0x0040, 0xc91f,	0x007f, 0xc91f,		0x21, 0
+	.dw 0x00c0, 0xc91f,	0x00ff, 0xc91f,		0x21, 0
+	.dw 0x0140, 0xc91f,	0x017f, 0xc91f,		0x21, 0
+	.dw 0x01c0, 0xc91f,	0x01ff, 0xc91f,		0x21, 0
+	.dw 0x0240, 0xc91f,	0x027f, 0xc91f,		0x21, 0
+	.dw 0x02c0, 0xc91f,	0x02ff, 0xc91f,		0x21, 0
+	.dw 0x0340, 0xc91f,	0x037f, 0xc91f,		0x21, 0
+	.dw 0x03c0, 0xc91f,	0x03ff, 0xc91f,		0x21, 0
+	.dw 0x0440, 0xc91f,	0x047f, 0xc91f,		0x21, 0
+	.dw 0x04c0, 0xc91f,	0x04ff, 0xc91f,		0x21, 0
+	.dw 0x0540, 0xc91f,	0x057f, 0xc91f,		0x21, 0
+	.dw 0x05c0, 0xc91f,	0x05ff, 0xc91f,		0x21, 0
+	.dw 0x0640, 0xc91f,	0x067f, 0xc91f,		0x21, 0
+	.dw 0x06c0, 0xc91f,	0x06ff, 0xc91f,		0x21, 0
+	.dw 0x0740, 0xc91f,	0x077f, 0xc91f,		0x21, 0
+	.dw 0x07c0, 0xc91f,	0x07ff, 0xc91f,		0x21, 0
+	.dw 0x0840, 0xc91f,	0x087f, 0xc91f,		0x21, 0
+	.dw 0x08c0, 0xc91f,	0x08ff, 0xc91f,		0x21, 0
+	.dw 0x0940, 0xc91f,	0x097f, 0xc91f,		0x21, 0
+	.dw 0x09c0, 0xc91f,	0x09ff, 0xc91f,		0x21, 0
+	.dw 0x0a40, 0xc91f,	0x0a7f, 0xc91f,		0x21, 0
+	.dw 0x0ac0, 0xc91f,	0x0aff, 0xc91f,		0x21, 0
+	.dw 0x0b40, 0xc91f,	0x0b7f, 0xc91f,		0x21, 0
+	.dw 0x0bc0, 0xc91f,	0x0bff, 0xc91f,		0x21, 0
+	.dw 0x0c40, 0xc91f,	0x0c7f, 0xc91f,		0x21, 0
+	.dw 0x0cc0, 0xc91f,	0x0cff, 0xc91f,		0x21, 0
+	.dw 0x0d40, 0xc91f,	0x0d7f, 0xc91f,		0x21, 0
+	.dw 0x0dc0, 0xc91f,	0x0dff, 0xc91f,		0x21, 0
+	.dw 0x0e40, 0xc91f,	0x0e7f, 0xc91f,		0x21, 0
+	.dw 0x0ec0, 0xc91f,	0x0eff, 0xc91f,		0x21, 0
+	.dw 0x0f40, 0xc91f,	0x0f7f, 0xc91f,		0x21, 0
+	.dw 0x0fc0, 0xc91f,	0x0fff, 0xc91f,		0x21, 0
+	.dw 0x1040, 0xc91f,	0x107f, 0xc91f,		0x21, 0
+	.dw 0x10c0, 0xc91f,	0x10ff, 0xc91f,		0x21, 0
+	.dw 0x1140, 0xc91f,	0x117f, 0xc91f,		0x21, 0
+	.dw 0x11c0, 0xc91f,	0x11ff, 0xc91f,		0x21, 0
+	.dw 0x1240, 0xc91f,	0x127f, 0xc91f,		0x21, 0
+	.dw 0x12c0, 0xc91f,	0x12ff, 0xc91f,		0x21, 0
+	.dw 0x1340, 0xc91f,	0x137f, 0xc91f,		0x21, 0
+	.dw 0x13c0, 0xc91f,	0x13ff, 0xc91f,		0x21, 0
+	.dw 0x1440, 0xc91f,	0x147f, 0xc91f,		0x21, 0
+	.dw 0x14c0, 0xc91f,	0x14ff, 0xc91f,		0x21, 0
+	.dw 0x1540, 0xc91f,	0x157f, 0xc91f,		0x21, 0
+	.dw 0x15c0, 0xc91f,	0x15ff, 0xc91f,		0x21, 0
+	.dw 0x1640, 0xc91f,	0x167f, 0xc91f,		0x21, 0
+	.dw 0x16c0, 0xc91f,	0x16ff, 0xc91f,		0x21, 0
+	.dw 0x1740, 0xc91f,	0x177f, 0xc91f,		0x21, 0
+	.dw 0x17c0, 0xc91f,	0x17ff, 0xc91f,		0x21, 0
+	.dw 0x1840, 0xc91f,	0x187f, 0xc91f,		0x21, 0
+	.dw 0x18c0, 0xc91f,	0x18ff, 0xc91f,		0x21, 0
+	.dw 0x1940, 0xc91f,	0x197f, 0xc91f,		0x21, 0
+	.dw 0x19c0, 0xc91f,	0x1fff, 0xc91f,		0x21, 0
+	.dw 0x2040, 0xc91f,	0x207f, 0xc91f,		0x21, 0
+	.dw 0x20c0, 0xc91f,	0x20ff, 0xc91f,		0x21, 0
+	.dw 0x2140, 0xc91f,	0x217f, 0xc91f,		0x21, 0
+	.dw 0x21c0, 0xc91f,	0x21ff, 0xc91f,		0x21, 0
+	.dw 0x2240, 0xc91f,	0x227f, 0xc91f,		0x21, 0
+	.dw 0x22c0, 0xc91f,	0x22ff, 0xc91f,		0x21, 0
+	.dw 0x2340, 0xc91f,	0x237f, 0xc91f,		0x21, 0
+	.dw 0x23c0, 0xc91f,	0x23ff, 0xc91f,		0x21, 0
+	.dw 0x2440, 0xc91f,	0x247f, 0xc91f,		0x21, 0
+	.dw 0x24c0, 0xc91f,	0x24ff, 0xc91f,		0x21, 0
+	.dw 0x2540, 0xc91f,	0x257f, 0xc91f,		0x21, 0
+	.dw 0x25c0, 0xc91f,	0x25ff, 0xc91f,		0x21, 0
+	.dw 0x2640, 0xc91f,	0x267f, 0xc91f,		0x21, 0
+	.dw 0x26c0, 0xc91f,	0x26ff, 0xc91f,		0x21, 0
+	.dw 0x2740, 0xc91f,	0x277f, 0xc91f,		0x21, 0
+	.dw 0x27c0, 0xc91f,	0x27ff, 0xc91f,		0x21, 0
+	.dw 0x2840, 0xc91f,	0x287f, 0xc91f,		0x21, 0
+	.dw 0x28c0, 0xc91f,	0x28ff, 0xc91f,		0x21, 0
+	.dw 0x2940, 0xc91f,	0x297f, 0xc91f,		0x21, 0
+	.dw 0x29c0, 0xc91f,	0x29ff, 0xc91f,		0x21, 0
+	.dw 0x2a40, 0xc91f,	0x2a7f, 0xc91f,		0x21, 0
+	.dw 0x2ac0, 0xc91f,	0x2aff, 0xc91f,		0x21, 0
+	.dw 0x2b40, 0xc91f,	0x2b7f, 0xc91f,		0x21, 0
+	.dw 0x2bc0, 0xc91f,	0x2bff, 0xc91f,		0x21, 0
+	.dw 0x2c40, 0xc91f,	0x2c7f, 0xc91f,		0x21, 0
+	.dw 0x2cc0, 0xc91f,	0x2cff, 0xc91f,		0x21, 0
+	.dw 0x2d40, 0xc91f,	0x2d7f, 0xc91f,		0x21, 0
+	.dw 0x2dc0, 0xc91f,	0x2dff, 0xc91f,		0x21, 0
+	.dw 0x2e40, 0xc91f,	0x2e7f, 0xc91f,		0x21, 0
+	.dw 0x2ec0, 0xc91f,	0x2eff, 0xc91f,		0x21, 0
+	.dw 0x2f40, 0xc91f,	0x2f7f, 0xc91f,		0x21, 0
+	.dw 0x2fc0, 0xc91f,	0x2fff, 0xc91f,		0x21, 0
+	.dw 0x3040, 0xc91f,	0x307f, 0xc91f,		0x21, 0
+	.dw 0x30c0, 0xc91f,	0x30ff, 0xc91f,		0x21, 0
+	.dw 0x3140, 0xc91f,	0x317f, 0xc91f,		0x21, 0
+	.dw 0x31c0, 0xc91f,	0x31ff, 0xc91f,		0x21, 0
+	.dw 0x3240, 0xc91f,	0x327f, 0xc91f,		0x21, 0
+	.dw 0x32c0, 0xc91f,	0x32ff, 0xc91f,		0x21, 0
+	.dw 0x3340, 0xc91f,	0x337f, 0xc91f,		0x21, 0
+	.dw 0x33c0, 0xc91f,	0x33ff, 0xc91f,		0x21, 0
+	.dw 0x3440, 0xc91f,	0x347f, 0xc91f,		0x21, 0
+	.dw 0x34c0, 0xc91f,	0x34ff, 0xc91f,		0x21, 0
+	.dw 0x3540, 0xc91f,	0x357f, 0xc91f,		0x21, 0
+	.dw 0x35c0, 0xc91f,	0x35ff, 0xc91f,		0x21, 0
+	.dw 0x3640, 0xc91f,	0x367f, 0xc91f,		0x21, 0
+	.dw 0x36c0, 0xc91f,	0x36ff, 0xc91f,		0x21, 0
+	.dw 0x3740, 0xc91f,	0x377f, 0xc91f,		0x21, 0
+	.dw 0x37c0, 0xc91f,	0x37ff, 0xc91f,		0x21, 0
+	.dw 0x3840, 0xc91f,	0x387f, 0xc91f,		0x21, 0
+	.dw 0x38c0, 0xc91f,	0x38ff, 0xc91f,		0x21, 0
+	.dw 0x3940, 0xc91f,	0x397f, 0xc91f,		0x21, 0
+	.dw 0x39c0, 0xc91f,	0x1fff, 0xc920,		0x21, 0
+	.dw 0x3a00, 0xc920,	0x5fff, 0xc920,		0x21, 0
+	.dw 0x7a00, 0xc920,	0x9fff, 0xc920,		0x21, 0
+	.dw 0xba00, 0xc920,	0xdfff, 0xc920,		0x21, 0
+	.dw 0xfa00, 0xc920,	0x1fff, 0xc921,		0x21, 0
+	.dw 0x3a00, 0xc921,	0x5fff, 0xc921,		0x21, 0
+	.dw 0x7a00, 0xc921,	0x9fff, 0xc921,		0x21, 0
+	.dw 0xba00, 0xc921,	0xdfff, 0xc921,		0x21, 0
+	.dw 0xfa00, 0xc921,	0x1fff, 0xc922,		0x21, 0
+	.dw 0x3a00, 0xc922,	0x5fff, 0xc922,		0x21, 0
+	.dw 0x7a00, 0xc922,	0x9fff, 0xc922,		0x21, 0
+	.dw 0xba00, 0xc922,	0xdfff, 0xc922,		0x21, 0
+	.dw 0xfa00, 0xc922,	0x1fff, 0xc923,		0x21, 0
+	.dw 0x3a00, 0xc923,	0xffff, 0xc923,		0x21, 0
+	.dw 0x1a00, 0xc924,	0x1fff, 0xc924,		0x21, 0
+	.dw 0x3a00, 0xc924,	0x3fff, 0xc924,		0x21, 0
+	.dw 0x5a00, 0xc924,	0x5fff, 0xc924,		0x21, 0
+	.dw 0x7a00, 0xc924,	0x7fff, 0xc924,		0x21, 0
+	.dw 0x9a00, 0xc924,	0x9fff, 0xc924,		0x21, 0
+	.dw 0xba00, 0xc924,	0xbfff, 0xc924,		0x21, 0
+	.dw 0xda00, 0xc924,	0xdfff, 0xc924,		0x21, 0
+	.dw 0xfa00, 0xc924,	0xffff, 0xc924,		0x21, 0
+	.dw 0x1a00, 0xc925,	0x1fff, 0xc925,		0x21, 0
+	.dw 0x3a00, 0xc925,	0x3fff, 0xc925,		0x21, 0
+	.dw 0x5a00, 0xc925,	0x5fff, 0xc925,		0x21, 0
+	.dw 0x7a00, 0xc925,	0x7fff, 0xc925,		0x21, 0
+	.dw 0x9a00, 0xc925,	0x9fff, 0xc925,		0x21, 0
+	.dw 0xba00, 0xc925,	0xbfff, 0xc925,		0x21, 0
+	.dw 0xda00, 0xc925,	0xdfff, 0xc925,		0x21, 0
+	.dw 0xfa00, 0xc925,	0xffff, 0xc925,		0x21, 0
+	.dw 0x1a00, 0xc926,	0x1fff, 0xc926,		0x21, 0
+	.dw 0x3a00, 0xc926,	0x3fff, 0xc926,		0x21, 0
+	.dw 0x5a00, 0xc926,	0x5fff, 0xc926,		0x21, 0
+	.dw 0x7a00, 0xc926,	0x7fff, 0xc926,		0x21, 0
+	.dw 0x9a00, 0xc926,	0x9fff, 0xc926,		0x21, 0
+	.dw 0xba00, 0xc926,	0xbfff, 0xc926,		0x21, 0
+	.dw 0xda00, 0xc926,	0xdfff, 0xc926,		0x21, 0
+	.dw 0xfa00, 0xc926,	0xffff, 0xc926,		0x21, 0
+	.dw 0x1a00, 0xc927,	0x1fff, 0xc927,		0x21, 0
+	.dw 0x3a00, 0xc927,	0x1fff, 0xc928,		0x21, 0
+	.dw 0x2040, 0xc928,	0x207f, 0xc928,		0x21, 0
+	.dw 0x20c0, 0xc928,	0x20ff, 0xc928,		0x21, 0
+	.dw 0x2140, 0xc928,	0x217f, 0xc928,		0x21, 0
+	.dw 0x21c0, 0xc928,	0x21ff, 0xc928,		0x21, 0
+	.dw 0x2240, 0xc928,	0x227f, 0xc928,		0x21, 0
+	.dw 0x22c0, 0xc928,	0x22ff, 0xc928,		0x21, 0
+	.dw 0x2340, 0xc928,	0x237f, 0xc928,		0x21, 0
+	.dw 0x23c0, 0xc928,	0x23ff, 0xc928,		0x21, 0
+	.dw 0x2440, 0xc928,	0x247f, 0xc928,		0x21, 0
+	.dw 0x24c0, 0xc928,	0x24ff, 0xc928,		0x21, 0
+	.dw 0x2540, 0xc928,	0x257f, 0xc928,		0x21, 0
+	.dw 0x25c0, 0xc928,	0x25ff, 0xc928,		0x21, 0
+	.dw 0x2640, 0xc928,	0x267f, 0xc928,		0x21, 0
+	.dw 0x26c0, 0xc928,	0x26ff, 0xc928,		0x21, 0
+	.dw 0x2740, 0xc928,	0x277f, 0xc928,		0x21, 0
+	.dw 0x27c0, 0xc928,	0x27ff, 0xc928,		0x21, 0
+	.dw 0x2840, 0xc928,	0x287f, 0xc928,		0x21, 0
+	.dw 0x28c0, 0xc928,	0x28ff, 0xc928,		0x21, 0
+	.dw 0x2940, 0xc928,	0x297f, 0xc928,		0x21, 0
+	.dw 0x29c0, 0xc928,	0x29ff, 0xc928,		0x21, 0
+	.dw 0x2a40, 0xc928,	0x2a7f, 0xc928,		0x21, 0
+	.dw 0x2ac0, 0xc928,	0x2aff, 0xc928,		0x21, 0
+	.dw 0x2b40, 0xc928,	0x2b7f, 0xc928,		0x21, 0
+	.dw 0x2bc0, 0xc928,	0x2bff, 0xc928,		0x21, 0
+	.dw 0x2c40, 0xc928,	0x2c7f, 0xc928,		0x21, 0
+	.dw 0x2cc0, 0xc928,	0x2cff, 0xc928,		0x21, 0
+	.dw 0x2d40, 0xc928,	0x2d7f, 0xc928,		0x21, 0
+	.dw 0x2dc0, 0xc928,	0x2dff, 0xc928,		0x21, 0
+	.dw 0x2e40, 0xc928,	0x2e7f, 0xc928,		0x21, 0
+	.dw 0x2ec0, 0xc928,	0x2eff, 0xc928,		0x21, 0
+	.dw 0x2f40, 0xc928,	0x2f7f, 0xc928,		0x21, 0
+	.dw 0x2fc0, 0xc928,	0x2fff, 0xc928,		0x21, 0
+	.dw 0x3040, 0xc928,	0x307f, 0xc928,		0x21, 0
+	.dw 0x30c0, 0xc928,	0x30ff, 0xc928,		0x21, 0
+	.dw 0x3140, 0xc928,	0x317f, 0xc928,		0x21, 0
+	.dw 0x31c0, 0xc928,	0x31ff, 0xc928,		0x21, 0
+	.dw 0x3240, 0xc928,	0x327f, 0xc928,		0x21, 0
+	.dw 0x32c0, 0xc928,	0x32ff, 0xc928,		0x21, 0
+	.dw 0x3340, 0xc928,	0x337f, 0xc928,		0x21, 0
+	.dw 0x33c0, 0xc928,	0x33ff, 0xc928,		0x21, 0
+	.dw 0x3440, 0xc928,	0x347f, 0xc928,		0x21, 0
+	.dw 0x34c0, 0xc928,	0x34ff, 0xc928,		0x21, 0
+	.dw 0x3540, 0xc928,	0x357f, 0xc928,		0x21, 0
+	.dw 0x35c0, 0xc928,	0x35ff, 0xc928,		0x21, 0
+	.dw 0x3640, 0xc928,	0x367f, 0xc928,		0x21, 0
+	.dw 0x36c0, 0xc928,	0x36ff, 0xc928,		0x21, 0
+	.dw 0x3740, 0xc928,	0x377f, 0xc928,		0x21, 0
+	.dw 0x37c0, 0xc928,	0x37ff, 0xc928,		0x21, 0
+	.dw 0x3840, 0xc928,	0x387f, 0xc928,		0x21, 0
+	.dw 0x38c0, 0xc928,	0x38ff, 0xc928,		0x21, 0
+	.dw 0x3940, 0xc928,	0x397f, 0xc928,		0x21, 0
+	.dw 0x39c0, 0xc928,	0x5fff, 0xc928,		0x21, 0
+	.dw 0x6040, 0xc928,	0x607f, 0xc928,		0x21, 0
+	.dw 0x60c0, 0xc928,	0x60ff, 0xc928,		0x21, 0
+	.dw 0x6140, 0xc928,	0x617f, 0xc928,		0x21, 0
+	.dw 0x61c0, 0xc928,	0x61ff, 0xc928,		0x21, 0
+	.dw 0x6240, 0xc928,	0x627f, 0xc928,		0x21, 0
+	.dw 0x62c0, 0xc928,	0x62ff, 0xc928,		0x21, 0
+	.dw 0x6340, 0xc928,	0x637f, 0xc928,		0x21, 0
+	.dw 0x63c0, 0xc928,	0x63ff, 0xc928,		0x21, 0
+	.dw 0x6440, 0xc928,	0x647f, 0xc928,		0x21, 0
+	.dw 0x64c0, 0xc928,	0x64ff, 0xc928,		0x21, 0
+	.dw 0x6540, 0xc928,	0x657f, 0xc928,		0x21, 0
+	.dw 0x65c0, 0xc928,	0x65ff, 0xc928,		0x21, 0
+	.dw 0x6640, 0xc928,	0x667f, 0xc928,		0x21, 0
+	.dw 0x66c0, 0xc928,	0x66ff, 0xc928,		0x21, 0
+	.dw 0x6740, 0xc928,	0x677f, 0xc928,		0x21, 0
+	.dw 0x67c0, 0xc928,	0x67ff, 0xc928,		0x21, 0
+	.dw 0x6840, 0xc928,	0x687f, 0xc928,		0x21, 0
+	.dw 0x68c0, 0xc928,	0x68ff, 0xc928,		0x21, 0
+	.dw 0x6940, 0xc928,	0x697f, 0xc928,		0x21, 0
+	.dw 0x69c0, 0xc928,	0x69ff, 0xc928,		0x21, 0
+	.dw 0x6a40, 0xc928,	0x6a7f, 0xc928,		0x21, 0
+	.dw 0x6ac0, 0xc928,	0x6aff, 0xc928,		0x21, 0
+	.dw 0x6b40, 0xc928,	0x6b7f, 0xc928,		0x21, 0
+	.dw 0x6bc0, 0xc928,	0x6bff, 0xc928,		0x21, 0
+	.dw 0x6c40, 0xc928,	0x6c7f, 0xc928,		0x21, 0
+	.dw 0x6cc0, 0xc928,	0x6cff, 0xc928,		0x21, 0
+	.dw 0x6d40, 0xc928,	0x6d7f, 0xc928,		0x21, 0
+	.dw 0x6dc0, 0xc928,	0x6dff, 0xc928,		0x21, 0
+	.dw 0x6e40, 0xc928,	0x6e7f, 0xc928,		0x21, 0
+	.dw 0x6ec0, 0xc928,	0x6eff, 0xc928,		0x21, 0
+	.dw 0x6f40, 0xc928,	0x6f7f, 0xc928,		0x21, 0
+	.dw 0x6fc0, 0xc928,	0x6fff, 0xc928,		0x21, 0
+	.dw 0x7040, 0xc928,	0x707f, 0xc928,		0x21, 0
+	.dw 0x70c0, 0xc928,	0x70ff, 0xc928,		0x21, 0
+	.dw 0x7140, 0xc928,	0x717f, 0xc928,		0x21, 0
+	.dw 0x71c0, 0xc928,	0x71ff, 0xc928,		0x21, 0
+	.dw 0x7240, 0xc928,	0x727f, 0xc928,		0x21, 0
+	.dw 0x72c0, 0xc928,	0x72ff, 0xc928,		0x21, 0
+	.dw 0x7340, 0xc928,	0x737f, 0xc928,		0x21, 0
+	.dw 0x73c0, 0xc928,	0x73ff, 0xc928,		0x21, 0
+	.dw 0x7440, 0xc928,	0x747f, 0xc928,		0x21, 0
+	.dw 0x74c0, 0xc928,	0x74ff, 0xc928,		0x21, 0
+	.dw 0x7540, 0xc928,	0x757f, 0xc928,		0x21, 0
+	.dw 0x75c0, 0xc928,	0x75ff, 0xc928,		0x21, 0
+	.dw 0x7640, 0xc928,	0x767f, 0xc928,		0x21, 0
+	.dw 0x76c0, 0xc928,	0x76ff, 0xc928,		0x21, 0
+	.dw 0x7740, 0xc928,	0x777f, 0xc928,		0x21, 0
+	.dw 0x77c0, 0xc928,	0x77ff, 0xc928,		0x21, 0
+	.dw 0x7840, 0xc928,	0x787f, 0xc928,		0x21, 0
+	.dw 0x78c0, 0xc928,	0x78ff, 0xc928,		0x21, 0
+	.dw 0x7940, 0xc928,	0x797f, 0xc928,		0x21, 0
+	.dw 0x79c0, 0xc928,	0x9fff, 0xc928,		0x21, 0
+	.dw 0xa040, 0xc928,	0xa07f, 0xc928,		0x21, 0
+	.dw 0xa0c0, 0xc928,	0xa0ff, 0xc928,		0x21, 0
+	.dw 0xa140, 0xc928,	0xa17f, 0xc928,		0x21, 0
+	.dw 0xa1c0, 0xc928,	0xa1ff, 0xc928,		0x21, 0
+	.dw 0xa240, 0xc928,	0xa27f, 0xc928,		0x21, 0
+	.dw 0xa2c0, 0xc928,	0xa2ff, 0xc928,		0x21, 0
+	.dw 0xa340, 0xc928,	0xa37f, 0xc928,		0x21, 0
+	.dw 0xa3c0, 0xc928,	0xa3ff, 0xc928,		0x21, 0
+	.dw 0xa440, 0xc928,	0xa47f, 0xc928,		0x21, 0
+	.dw 0xa4c0, 0xc928,	0xa4ff, 0xc928,		0x21, 0
+	.dw 0xa540, 0xc928,	0xa57f, 0xc928,		0x21, 0
+	.dw 0xa5c0, 0xc928,	0xa5ff, 0xc928,		0x21, 0
+	.dw 0xa640, 0xc928,	0xa67f, 0xc928,		0x21, 0
+	.dw 0xa6c0, 0xc928,	0xa6ff, 0xc928,		0x21, 0
+	.dw 0xa740, 0xc928,	0xa77f, 0xc928,		0x21, 0
+	.dw 0xa7c0, 0xc928,	0xa7ff, 0xc928,		0x21, 0
+	.dw 0xa840, 0xc928,	0xa87f, 0xc928,		0x21, 0
+	.dw 0xa8c0, 0xc928,	0xa8ff, 0xc928,		0x21, 0
+	.dw 0xa940, 0xc928,	0xa97f, 0xc928,		0x21, 0
+	.dw 0xa9c0, 0xc928,	0xa9ff, 0xc928,		0x21, 0
+	.dw 0xaa40, 0xc928,	0xaa7f, 0xc928,		0x21, 0
+	.dw 0xaac0, 0xc928,	0xaaff, 0xc928,		0x21, 0
+	.dw 0xab40, 0xc928,	0xab7f, 0xc928,		0x21, 0
+	.dw 0xabc0, 0xc928,	0xabff, 0xc928,		0x21, 0
+	.dw 0xac40, 0xc928,	0xac7f, 0xc928,		0x21, 0
+	.dw 0xacc0, 0xc928,	0xacff, 0xc928,		0x21, 0
+	.dw 0xad40, 0xc928,	0xad7f, 0xc928,		0x21, 0
+	.dw 0xadc0, 0xc928,	0xadff, 0xc928,		0x21, 0
+	.dw 0xae40, 0xc928,	0xae7f, 0xc928,		0x21, 0
+	.dw 0xaec0, 0xc928,	0xaeff, 0xc928,		0x21, 0
+	.dw 0xaf40, 0xc928,	0xaf7f, 0xc928,		0x21, 0
+	.dw 0xafc0, 0xc928,	0xafff, 0xc928,		0x21, 0
+	.dw 0xb040, 0xc928,	0xb07f, 0xc928,		0x21, 0
+	.dw 0xb0c0, 0xc928,	0xb0ff, 0xc928,		0x21, 0
+	.dw 0xb140, 0xc928,	0xb17f, 0xc928,		0x21, 0
+	.dw 0xb1c0, 0xc928,	0xb1ff, 0xc928,		0x21, 0
+	.dw 0xb240, 0xc928,	0xb27f, 0xc928,		0x21, 0
+	.dw 0xb2c0, 0xc928,	0xb2ff, 0xc928,		0x21, 0
+	.dw 0xb340, 0xc928,	0xb37f, 0xc928,		0x21, 0
+	.dw 0xb3c0, 0xc928,	0xb3ff, 0xc928,		0x21, 0
+	.dw 0xb440, 0xc928,	0xb47f, 0xc928,		0x21, 0
+	.dw 0xb4c0, 0xc928,	0xb4ff, 0xc928,		0x21, 0
+	.dw 0xb540, 0xc928,	0xb57f, 0xc928,		0x21, 0
+	.dw 0xb5c0, 0xc928,	0xb5ff, 0xc928,		0x21, 0
+	.dw 0xb640, 0xc928,	0xb67f, 0xc928,		0x21, 0
+	.dw 0xb6c0, 0xc928,	0xb6ff, 0xc928,		0x21, 0
+	.dw 0xb740, 0xc928,	0xb77f, 0xc928,		0x21, 0
+	.dw 0xb7c0, 0xc928,	0xb7ff, 0xc928,		0x21, 0
+	.dw 0xb840, 0xc928,	0xb87f, 0xc928,		0x21, 0
+	.dw 0xb8c0, 0xc928,	0xb8ff, 0xc928,		0x21, 0
+	.dw 0xb940, 0xc928,	0xb97f, 0xc928,		0x21, 0
+	.dw 0xb9c0, 0xc928,	0xdfff, 0xc928,		0x21, 0
+	.dw 0xe040, 0xc928,	0xe07f, 0xc928,		0x21, 0
+	.dw 0xe0c0, 0xc928,	0xe0ff, 0xc928,		0x21, 0
+	.dw 0xe140, 0xc928,	0xe17f, 0xc928,		0x21, 0
+	.dw 0xe1c0, 0xc928,	0xe1ff, 0xc928,		0x21, 0
+	.dw 0xe240, 0xc928,	0xe27f, 0xc928,		0x21, 0
+	.dw 0xe2c0, 0xc928,	0xe2ff, 0xc928,		0x21, 0
+	.dw 0xe340, 0xc928,	0xe37f, 0xc928,		0x21, 0
+	.dw 0xe3c0, 0xc928,	0xe3ff, 0xc928,		0x21, 0
+	.dw 0xe440, 0xc928,	0xe47f, 0xc928,		0x21, 0
+	.dw 0xe4c0, 0xc928,	0xe4ff, 0xc928,		0x21, 0
+	.dw 0xe540, 0xc928,	0xe57f, 0xc928,		0x21, 0
+	.dw 0xe5c0, 0xc928,	0xe5ff, 0xc928,		0x21, 0
+	.dw 0xe640, 0xc928,	0xe67f, 0xc928,		0x21, 0
+	.dw 0xe6c0, 0xc928,	0xe6ff, 0xc928,		0x21, 0
+	.dw 0xe740, 0xc928,	0xe77f, 0xc928,		0x21, 0
+	.dw 0xe7c0, 0xc928,	0xe7ff, 0xc928,		0x21, 0
+	.dw 0xe840, 0xc928,	0xe87f, 0xc928,		0x21, 0
+	.dw 0xe8c0, 0xc928,	0xe8ff, 0xc928,		0x21, 0
+	.dw 0xe940, 0xc928,	0xe97f, 0xc928,		0x21, 0
+	.dw 0xe9c0, 0xc928,	0xe9ff, 0xc928,		0x21, 0
+	.dw 0xea40, 0xc928,	0xea7f, 0xc928,		0x21, 0
+	.dw 0xeac0, 0xc928,	0xeaff, 0xc928,		0x21, 0
+	.dw 0xeb40, 0xc928,	0xeb7f, 0xc928,		0x21, 0
+	.dw 0xebc0, 0xc928,	0xebff, 0xc928,		0x21, 0
+	.dw 0xec40, 0xc928,	0xec7f, 0xc928,		0x21, 0
+	.dw 0xecc0, 0xc928,	0xecff, 0xc928,		0x21, 0
+	.dw 0xed40, 0xc928,	0xed7f, 0xc928,		0x21, 0
+	.dw 0xedc0, 0xc928,	0xedff, 0xc928,		0x21, 0
+	.dw 0xee40, 0xc928,	0xee7f, 0xc928,		0x21, 0
+	.dw 0xeec0, 0xc928,	0xeeff, 0xc928,		0x21, 0
+	.dw 0xef40, 0xc928,	0xef7f, 0xc928,		0x21, 0
+	.dw 0xefc0, 0xc928,	0xefff, 0xc928,		0x21, 0
+	.dw 0xf040, 0xc928,	0xf07f, 0xc928,		0x21, 0
+	.dw 0xf0c0, 0xc928,	0xf0ff, 0xc928,		0x21, 0
+	.dw 0xf140, 0xc928,	0xf17f, 0xc928,		0x21, 0
+	.dw 0xf1c0, 0xc928,	0xf1ff, 0xc928,		0x21, 0
+	.dw 0xf240, 0xc928,	0xf27f, 0xc928,		0x21, 0
+	.dw 0xf2c0, 0xc928,	0xf2ff, 0xc928,		0x21, 0
+	.dw 0xf340, 0xc928,	0xf37f, 0xc928,		0x21, 0
+	.dw 0xf3c0, 0xc928,	0xf3ff, 0xc928,		0x21, 0
+	.dw 0xf440, 0xc928,	0xf47f, 0xc928,		0x21, 0
+	.dw 0xf4c0, 0xc928,	0xf4ff, 0xc928,		0x21, 0
+	.dw 0xf540, 0xc928,	0xf57f, 0xc928,		0x21, 0
+	.dw 0xf5c0, 0xc928,	0xf5ff, 0xc928,		0x21, 0
+	.dw 0xf640, 0xc928,	0xf67f, 0xc928,		0x21, 0
+	.dw 0xf6c0, 0xc928,	0xf6ff, 0xc928,		0x21, 0
+	.dw 0xf740, 0xc928,	0xf77f, 0xc928,		0x21, 0
+	.dw 0xf7c0, 0xc928,	0xf7ff, 0xc928,		0x21, 0
+	.dw 0xf840, 0xc928,	0xf87f, 0xc928,		0x21, 0
+	.dw 0xf8c0, 0xc928,	0xf8ff, 0xc928,		0x21, 0
+	.dw 0xf940, 0xc928,	0xf97f, 0xc928,		0x21, 0
+	.dw 0xf9c0, 0xc928,	0x1fff, 0xc929,		0x21, 0
+	.dw 0x2040, 0xc929,	0x207f, 0xc929,		0x21, 0
+	.dw 0x20c0, 0xc929,	0x20ff, 0xc929,		0x21, 0
+	.dw 0x2140, 0xc929,	0x217f, 0xc929,		0x21, 0
+	.dw 0x21c0, 0xc929,	0x21ff, 0xc929,		0x21, 0
+	.dw 0x2240, 0xc929,	0x227f, 0xc929,		0x21, 0
+	.dw 0x22c0, 0xc929,	0x22ff, 0xc929,		0x21, 0
+	.dw 0x2340, 0xc929,	0x237f, 0xc929,		0x21, 0
+	.dw 0x23c0, 0xc929,	0x23ff, 0xc929,		0x21, 0
+	.dw 0x2440, 0xc929,	0x247f, 0xc929,		0x21, 0
+	.dw 0x24c0, 0xc929,	0x24ff, 0xc929,		0x21, 0
+	.dw 0x2540, 0xc929,	0x257f, 0xc929,		0x21, 0
+	.dw 0x25c0, 0xc929,	0x25ff, 0xc929,		0x21, 0
+	.dw 0x2640, 0xc929,	0x267f, 0xc929,		0x21, 0
+	.dw 0x26c0, 0xc929,	0x26ff, 0xc929,		0x21, 0
+	.dw 0x2740, 0xc929,	0x277f, 0xc929,		0x21, 0
+	.dw 0x27c0, 0xc929,	0x27ff, 0xc929,		0x21, 0
+	.dw 0x2840, 0xc929,	0x287f, 0xc929,		0x21, 0
+	.dw 0x28c0, 0xc929,	0x28ff, 0xc929,		0x21, 0
+	.dw 0x2940, 0xc929,	0x297f, 0xc929,		0x21, 0
+	.dw 0x29c0, 0xc929,	0x29ff, 0xc929,		0x21, 0
+	.dw 0x2a40, 0xc929,	0x2a7f, 0xc929,		0x21, 0
+	.dw 0x2ac0, 0xc929,	0x2aff, 0xc929,		0x21, 0
+	.dw 0x2b40, 0xc929,	0x2b7f, 0xc929,		0x21, 0
+	.dw 0x2bc0, 0xc929,	0x2bff, 0xc929,		0x21, 0
+	.dw 0x2c40, 0xc929,	0x2c7f, 0xc929,		0x21, 0
+	.dw 0x2cc0, 0xc929,	0x2cff, 0xc929,		0x21, 0
+	.dw 0x2d40, 0xc929,	0x2d7f, 0xc929,		0x21, 0
+	.dw 0x2dc0, 0xc929,	0x2dff, 0xc929,		0x21, 0
+	.dw 0x2e40, 0xc929,	0x2e7f, 0xc929,		0x21, 0
+	.dw 0x2ec0, 0xc929,	0x2eff, 0xc929,		0x21, 0
+	.dw 0x2f40, 0xc929,	0x2f7f, 0xc929,		0x21, 0
+	.dw 0x2fc0, 0xc929,	0x2fff, 0xc929,		0x21, 0
+	.dw 0x3040, 0xc929,	0x307f, 0xc929,		0x21, 0
+	.dw 0x30c0, 0xc929,	0x30ff, 0xc929,		0x21, 0
+	.dw 0x3140, 0xc929,	0x317f, 0xc929,		0x21, 0
+	.dw 0x31c0, 0xc929,	0x31ff, 0xc929,		0x21, 0
+	.dw 0x3240, 0xc929,	0x327f, 0xc929,		0x21, 0
+	.dw 0x32c0, 0xc929,	0x32ff, 0xc929,		0x21, 0
+	.dw 0x3340, 0xc929,	0x337f, 0xc929,		0x21, 0
+	.dw 0x33c0, 0xc929,	0x33ff, 0xc929,		0x21, 0
+	.dw 0x3440, 0xc929,	0x347f, 0xc929,		0x21, 0
+	.dw 0x34c0, 0xc929,	0x34ff, 0xc929,		0x21, 0
+	.dw 0x3540, 0xc929,	0x357f, 0xc929,		0x21, 0
+	.dw 0x35c0, 0xc929,	0x35ff, 0xc929,		0x21, 0
+	.dw 0x3640, 0xc929,	0x367f, 0xc929,		0x21, 0
+	.dw 0x36c0, 0xc929,	0x36ff, 0xc929,		0x21, 0
+	.dw 0x3740, 0xc929,	0x377f, 0xc929,		0x21, 0
+	.dw 0x37c0, 0xc929,	0x37ff, 0xc929,		0x21, 0
+	.dw 0x3840, 0xc929,	0x387f, 0xc929,		0x21, 0
+	.dw 0x38c0, 0xc929,	0x38ff, 0xc929,		0x21, 0
+	.dw 0x3940, 0xc929,	0x397f, 0xc929,		0x21, 0
+	.dw 0x39c0, 0xc929,	0x5fff, 0xc929,		0x21, 0
+	.dw 0x6040, 0xc929,	0x607f, 0xc929,		0x21, 0
+	.dw 0x60c0, 0xc929,	0x60ff, 0xc929,		0x21, 0
+	.dw 0x6140, 0xc929,	0x617f, 0xc929,		0x21, 0
+	.dw 0x61c0, 0xc929,	0x61ff, 0xc929,		0x21, 0
+	.dw 0x6240, 0xc929,	0x627f, 0xc929,		0x21, 0
+	.dw 0x62c0, 0xc929,	0x62ff, 0xc929,		0x21, 0
+	.dw 0x6340, 0xc929,	0x637f, 0xc929,		0x21, 0
+	.dw 0x63c0, 0xc929,	0x63ff, 0xc929,		0x21, 0
+	.dw 0x6440, 0xc929,	0x647f, 0xc929,		0x21, 0
+	.dw 0x64c0, 0xc929,	0x64ff, 0xc929,		0x21, 0
+	.dw 0x6540, 0xc929,	0x657f, 0xc929,		0x21, 0
+	.dw 0x65c0, 0xc929,	0x65ff, 0xc929,		0x21, 0
+	.dw 0x6640, 0xc929,	0x667f, 0xc929,		0x21, 0
+	.dw 0x66c0, 0xc929,	0x66ff, 0xc929,		0x21, 0
+	.dw 0x6740, 0xc929,	0x677f, 0xc929,		0x21, 0
+	.dw 0x67c0, 0xc929,	0x67ff, 0xc929,		0x21, 0
+	.dw 0x6840, 0xc929,	0x687f, 0xc929,		0x21, 0
+	.dw 0x68c0, 0xc929,	0x68ff, 0xc929,		0x21, 0
+	.dw 0x6940, 0xc929,	0x697f, 0xc929,		0x21, 0
+	.dw 0x69c0, 0xc929,	0x69ff, 0xc929,		0x21, 0
+	.dw 0x6a40, 0xc929,	0x6a7f, 0xc929,		0x21, 0
+	.dw 0x6ac0, 0xc929,	0x6aff, 0xc929,		0x21, 0
+	.dw 0x6b40, 0xc929,	0x6b7f, 0xc929,		0x21, 0
+	.dw 0x6bc0, 0xc929,	0x6bff, 0xc929,		0x21, 0
+	.dw 0x6c40, 0xc929,	0x6c7f, 0xc929,		0x21, 0
+	.dw 0x6cc0, 0xc929,	0x6cff, 0xc929,		0x21, 0
+	.dw 0x6d40, 0xc929,	0x6d7f, 0xc929,		0x21, 0
+	.dw 0x6dc0, 0xc929,	0x6dff, 0xc929,		0x21, 0
+	.dw 0x6e40, 0xc929,	0x6e7f, 0xc929,		0x21, 0
+	.dw 0x6ec0, 0xc929,	0x6eff, 0xc929,		0x21, 0
+	.dw 0x6f40, 0xc929,	0x6f7f, 0xc929,		0x21, 0
+	.dw 0x6fc0, 0xc929,	0x6fff, 0xc929,		0x21, 0
+	.dw 0x7040, 0xc929,	0x707f, 0xc929,		0x21, 0
+	.dw 0x70c0, 0xc929,	0x70ff, 0xc929,		0x21, 0
+	.dw 0x7140, 0xc929,	0x717f, 0xc929,		0x21, 0
+	.dw 0x71c0, 0xc929,	0x71ff, 0xc929,		0x21, 0
+	.dw 0x7240, 0xc929,	0x727f, 0xc929,		0x21, 0
+	.dw 0x72c0, 0xc929,	0x72ff, 0xc929,		0x21, 0
+	.dw 0x7340, 0xc929,	0x737f, 0xc929,		0x21, 0
+	.dw 0x73c0, 0xc929,	0x73ff, 0xc929,		0x21, 0
+	.dw 0x7440, 0xc929,	0x747f, 0xc929,		0x21, 0
+	.dw 0x74c0, 0xc929,	0x74ff, 0xc929,		0x21, 0
+	.dw 0x7540, 0xc929,	0x757f, 0xc929,		0x21, 0
+	.dw 0x75c0, 0xc929,	0x75ff, 0xc929,		0x21, 0
+	.dw 0x7640, 0xc929,	0x767f, 0xc929,		0x21, 0
+	.dw 0x76c0, 0xc929,	0x76ff, 0xc929,		0x21, 0
+	.dw 0x7740, 0xc929,	0x777f, 0xc929,		0x21, 0
+	.dw 0x77c0, 0xc929,	0x77ff, 0xc929,		0x21, 0
+	.dw 0x7840, 0xc929,	0x787f, 0xc929,		0x21, 0
+	.dw 0x78c0, 0xc929,	0x78ff, 0xc929,		0x21, 0
+	.dw 0x7940, 0xc929,	0x797f, 0xc929,		0x21, 0
+	.dw 0x79c0, 0xc929,	0x9fff, 0xc929,		0x21, 0
+	.dw 0xa040, 0xc929,	0xa07f, 0xc929,		0x21, 0
+	.dw 0xa0c0, 0xc929,	0xa0ff, 0xc929,		0x21, 0
+	.dw 0xa140, 0xc929,	0xa17f, 0xc929,		0x21, 0
+	.dw 0xa1c0, 0xc929,	0xa1ff, 0xc929,		0x21, 0
+	.dw 0xa240, 0xc929,	0xa27f, 0xc929,		0x21, 0
+	.dw 0xa2c0, 0xc929,	0xa2ff, 0xc929,		0x21, 0
+	.dw 0xa340, 0xc929,	0xa37f, 0xc929,		0x21, 0
+	.dw 0xa3c0, 0xc929,	0xa3ff, 0xc929,		0x21, 0
+	.dw 0xa440, 0xc929,	0xa47f, 0xc929,		0x21, 0
+	.dw 0xa4c0, 0xc929,	0xa4ff, 0xc929,		0x21, 0
+	.dw 0xa540, 0xc929,	0xa57f, 0xc929,		0x21, 0
+	.dw 0xa5c0, 0xc929,	0xa5ff, 0xc929,		0x21, 0
+	.dw 0xa640, 0xc929,	0xa67f, 0xc929,		0x21, 0
+	.dw 0xa6c0, 0xc929,	0xa6ff, 0xc929,		0x21, 0
+	.dw 0xa740, 0xc929,	0xa77f, 0xc929,		0x21, 0
+	.dw 0xa7c0, 0xc929,	0xa7ff, 0xc929,		0x21, 0
+	.dw 0xa840, 0xc929,	0xa87f, 0xc929,		0x21, 0
+	.dw 0xa8c0, 0xc929,	0xa8ff, 0xc929,		0x21, 0
+	.dw 0xa940, 0xc929,	0xa97f, 0xc929,		0x21, 0
+	.dw 0xa9c0, 0xc929,	0xa9ff, 0xc929,		0x21, 0
+	.dw 0xaa40, 0xc929,	0xaa7f, 0xc929,		0x21, 0
+	.dw 0xaac0, 0xc929,	0xaaff, 0xc929,		0x21, 0
+	.dw 0xab40, 0xc929,	0xab7f, 0xc929,		0x21, 0
+	.dw 0xabc0, 0xc929,	0xabff, 0xc929,		0x21, 0
+	.dw 0xac40, 0xc929,	0xac7f, 0xc929,		0x21, 0
+	.dw 0xacc0, 0xc929,	0xacff, 0xc929,		0x21, 0
+	.dw 0xad40, 0xc929,	0xad7f, 0xc929,		0x21, 0
+	.dw 0xadc0, 0xc929,	0xadff, 0xc929,		0x21, 0
+	.dw 0xae40, 0xc929,	0xae7f, 0xc929,		0x21, 0
+	.dw 0xaec0, 0xc929,	0xaeff, 0xc929,		0x21, 0
+	.dw 0xaf40, 0xc929,	0xaf7f, 0xc929,		0x21, 0
+	.dw 0xafc0, 0xc929,	0xafff, 0xc929,		0x21, 0
+	.dw 0xb040, 0xc929,	0xb07f, 0xc929,		0x21, 0
+	.dw 0xb0c0, 0xc929,	0xb0ff, 0xc929,		0x21, 0
+	.dw 0xb140, 0xc929,	0xb17f, 0xc929,		0x21, 0
+	.dw 0xb1c0, 0xc929,	0xb1ff, 0xc929,		0x21, 0
+	.dw 0xb240, 0xc929,	0xb27f, 0xc929,		0x21, 0
+	.dw 0xb2c0, 0xc929,	0xb2ff, 0xc929,		0x21, 0
+	.dw 0xb340, 0xc929,	0xb37f, 0xc929,		0x21, 0
+	.dw 0xb3c0, 0xc929,	0xb3ff, 0xc929,		0x21, 0
+	.dw 0xb440, 0xc929,	0xb47f, 0xc929,		0x21, 0
+	.dw 0xb4c0, 0xc929,	0xb4ff, 0xc929,		0x21, 0
+	.dw 0xb540, 0xc929,	0xb57f, 0xc929,		0x21, 0
+	.dw 0xb5c0, 0xc929,	0xb5ff, 0xc929,		0x21, 0
+	.dw 0xb640, 0xc929,	0xb67f, 0xc929,		0x21, 0
+	.dw 0xb6c0, 0xc929,	0xb6ff, 0xc929,		0x21, 0
+	.dw 0xb740, 0xc929,	0xb77f, 0xc929,		0x21, 0
+	.dw 0xb7c0, 0xc929,	0xb7ff, 0xc929,		0x21, 0
+	.dw 0xb840, 0xc929,	0xb87f, 0xc929,		0x21, 0
+	.dw 0xb8c0, 0xc929,	0xb8ff, 0xc929,		0x21, 0
+	.dw 0xb940, 0xc929,	0xb97f, 0xc929,		0x21, 0
+	.dw 0xb9c0, 0xc929,	0xdfff, 0xc929,		0x21, 0
+	.dw 0xe040, 0xc929,	0xe07f, 0xc929,		0x21, 0
+	.dw 0xe0c0, 0xc929,	0xe0ff, 0xc929,		0x21, 0
+	.dw 0xe140, 0xc929,	0xe17f, 0xc929,		0x21, 0
+	.dw 0xe1c0, 0xc929,	0xe1ff, 0xc929,		0x21, 0
+	.dw 0xe240, 0xc929,	0xe27f, 0xc929,		0x21, 0
+	.dw 0xe2c0, 0xc929,	0xe2ff, 0xc929,		0x21, 0
+	.dw 0xe340, 0xc929,	0xe37f, 0xc929,		0x21, 0
+	.dw 0xe3c0, 0xc929,	0xe3ff, 0xc929,		0x21, 0
+	.dw 0xe440, 0xc929,	0xe47f, 0xc929,		0x21, 0
+	.dw 0xe4c0, 0xc929,	0xe4ff, 0xc929,		0x21, 0
+	.dw 0xe540, 0xc929,	0xe57f, 0xc929,		0x21, 0
+	.dw 0xe5c0, 0xc929,	0xe5ff, 0xc929,		0x21, 0
+	.dw 0xe640, 0xc929,	0xe67f, 0xc929,		0x21, 0
+	.dw 0xe6c0, 0xc929,	0xe6ff, 0xc929,		0x21, 0
+	.dw 0xe740, 0xc929,	0xe77f, 0xc929,		0x21, 0
+	.dw 0xe7c0, 0xc929,	0xe7ff, 0xc929,		0x21, 0
+	.dw 0xe840, 0xc929,	0xe87f, 0xc929,		0x21, 0
+	.dw 0xe8c0, 0xc929,	0xe8ff, 0xc929,		0x21, 0
+	.dw 0xe940, 0xc929,	0xe97f, 0xc929,		0x21, 0
+	.dw 0xe9c0, 0xc929,	0xe9ff, 0xc929,		0x21, 0
+	.dw 0xea40, 0xc929,	0xea7f, 0xc929,		0x21, 0
+	.dw 0xeac0, 0xc929,	0xeaff, 0xc929,		0x21, 0
+	.dw 0xeb40, 0xc929,	0xeb7f, 0xc929,		0x21, 0
+	.dw 0xebc0, 0xc929,	0xebff, 0xc929,		0x21, 0
+	.dw 0xec40, 0xc929,	0xec7f, 0xc929,		0x21, 0
+	.dw 0xecc0, 0xc929,	0xecff, 0xc929,		0x21, 0
+	.dw 0xed40, 0xc929,	0xed7f, 0xc929,		0x21, 0
+	.dw 0xedc0, 0xc929,	0xedff, 0xc929,		0x21, 0
+	.dw 0xee40, 0xc929,	0xee7f, 0xc929,		0x21, 0
+	.dw 0xeec0, 0xc929,	0xeeff, 0xc929,		0x21, 0
+	.dw 0xef40, 0xc929,	0xef7f, 0xc929,		0x21, 0
+	.dw 0xefc0, 0xc929,	0xefff, 0xc929,		0x21, 0
+	.dw 0xf040, 0xc929,	0xf07f, 0xc929,		0x21, 0
+	.dw 0xf0c0, 0xc929,	0xf0ff, 0xc929,		0x21, 0
+	.dw 0xf140, 0xc929,	0xf17f, 0xc929,		0x21, 0
+	.dw 0xf1c0, 0xc929,	0xf1ff, 0xc929,		0x21, 0
+	.dw 0xf240, 0xc929,	0xf27f, 0xc929,		0x21, 0
+	.dw 0xf2c0, 0xc929,	0xf2ff, 0xc929,		0x21, 0
+	.dw 0xf340, 0xc929,	0xf37f, 0xc929,		0x21, 0
+	.dw 0xf3c0, 0xc929,	0xf3ff, 0xc929,		0x21, 0
+	.dw 0xf440, 0xc929,	0xf47f, 0xc929,		0x21, 0
+	.dw 0xf4c0, 0xc929,	0xf4ff, 0xc929,		0x21, 0
+	.dw 0xf540, 0xc929,	0xf57f, 0xc929,		0x21, 0
+	.dw 0xf5c0, 0xc929,	0xf5ff, 0xc929,		0x21, 0
+	.dw 0xf640, 0xc929,	0xf67f, 0xc929,		0x21, 0
+	.dw 0xf6c0, 0xc929,	0xf6ff, 0xc929,		0x21, 0
+	.dw 0xf740, 0xc929,	0xf77f, 0xc929,		0x21, 0
+	.dw 0xf7c0, 0xc929,	0xf7ff, 0xc929,		0x21, 0
+	.dw 0xf840, 0xc929,	0xf87f, 0xc929,		0x21, 0
+	.dw 0xf8c0, 0xc929,	0xf8ff, 0xc929,		0x21, 0
+	.dw 0xf940, 0xc929,	0xf97f, 0xc929,		0x21, 0
+	.dw 0xf9c0, 0xc929,	0x1fff, 0xc92a,		0x21, 0
+	.dw 0x2040, 0xc92a,	0x207f, 0xc92a,		0x21, 0
+	.dw 0x20c0, 0xc92a,	0x20ff, 0xc92a,		0x21, 0
+	.dw 0x2140, 0xc92a,	0x217f, 0xc92a,		0x21, 0
+	.dw 0x21c0, 0xc92a,	0x21ff, 0xc92a,		0x21, 0
+	.dw 0x2240, 0xc92a,	0x227f, 0xc92a,		0x21, 0
+	.dw 0x22c0, 0xc92a,	0x22ff, 0xc92a,		0x21, 0
+	.dw 0x2340, 0xc92a,	0x237f, 0xc92a,		0x21, 0
+	.dw 0x23c0, 0xc92a,	0x23ff, 0xc92a,		0x21, 0
+	.dw 0x2440, 0xc92a,	0x247f, 0xc92a,		0x21, 0
+	.dw 0x24c0, 0xc92a,	0x24ff, 0xc92a,		0x21, 0
+	.dw 0x2540, 0xc92a,	0x257f, 0xc92a,		0x21, 0
+	.dw 0x25c0, 0xc92a,	0x25ff, 0xc92a,		0x21, 0
+	.dw 0x2640, 0xc92a,	0x267f, 0xc92a,		0x21, 0
+	.dw 0x26c0, 0xc92a,	0x26ff, 0xc92a,		0x21, 0
+	.dw 0x2740, 0xc92a,	0x277f, 0xc92a,		0x21, 0
+	.dw 0x27c0, 0xc92a,	0x27ff, 0xc92a,		0x21, 0
+	.dw 0x2840, 0xc92a,	0x287f, 0xc92a,		0x21, 0
+	.dw 0x28c0, 0xc92a,	0x28ff, 0xc92a,		0x21, 0
+	.dw 0x2940, 0xc92a,	0x297f, 0xc92a,		0x21, 0
+	.dw 0x29c0, 0xc92a,	0x29ff, 0xc92a,		0x21, 0
+	.dw 0x2a40, 0xc92a,	0x2a7f, 0xc92a,		0x21, 0
+	.dw 0x2ac0, 0xc92a,	0x2aff, 0xc92a,		0x21, 0
+	.dw 0x2b40, 0xc92a,	0x2b7f, 0xc92a,		0x21, 0
+	.dw 0x2bc0, 0xc92a,	0x2bff, 0xc92a,		0x21, 0
+	.dw 0x2c40, 0xc92a,	0x2c7f, 0xc92a,		0x21, 0
+	.dw 0x2cc0, 0xc92a,	0x2cff, 0xc92a,		0x21, 0
+	.dw 0x2d40, 0xc92a,	0x2d7f, 0xc92a,		0x21, 0
+	.dw 0x2dc0, 0xc92a,	0x2dff, 0xc92a,		0x21, 0
+	.dw 0x2e40, 0xc92a,	0x2e7f, 0xc92a,		0x21, 0
+	.dw 0x2ec0, 0xc92a,	0x2eff, 0xc92a,		0x21, 0
+	.dw 0x2f40, 0xc92a,	0x2f7f, 0xc92a,		0x21, 0
+	.dw 0x2fc0, 0xc92a,	0x2fff, 0xc92a,		0x21, 0
+	.dw 0x3040, 0xc92a,	0x307f, 0xc92a,		0x21, 0
+	.dw 0x30c0, 0xc92a,	0x30ff, 0xc92a,		0x21, 0
+	.dw 0x3140, 0xc92a,	0x317f, 0xc92a,		0x21, 0
+	.dw 0x31c0, 0xc92a,	0x31ff, 0xc92a,		0x21, 0
+	.dw 0x3240, 0xc92a,	0x327f, 0xc92a,		0x21, 0
+	.dw 0x32c0, 0xc92a,	0x32ff, 0xc92a,		0x21, 0
+	.dw 0x3340, 0xc92a,	0x337f, 0xc92a,		0x21, 0
+	.dw 0x33c0, 0xc92a,	0x33ff, 0xc92a,		0x21, 0
+	.dw 0x3440, 0xc92a,	0x347f, 0xc92a,		0x21, 0
+	.dw 0x34c0, 0xc92a,	0x34ff, 0xc92a,		0x21, 0
+	.dw 0x3540, 0xc92a,	0x357f, 0xc92a,		0x21, 0
+	.dw 0x35c0, 0xc92a,	0x35ff, 0xc92a,		0x21, 0
+	.dw 0x3640, 0xc92a,	0x367f, 0xc92a,		0x21, 0
+	.dw 0x36c0, 0xc92a,	0x36ff, 0xc92a,		0x21, 0
+	.dw 0x3740, 0xc92a,	0x377f, 0xc92a,		0x21, 0
+	.dw 0x37c0, 0xc92a,	0x37ff, 0xc92a,		0x21, 0
+	.dw 0x3840, 0xc92a,	0x387f, 0xc92a,		0x21, 0
+	.dw 0x38c0, 0xc92a,	0x38ff, 0xc92a,		0x21, 0
+	.dw 0x3940, 0xc92a,	0x397f, 0xc92a,		0x21, 0
+	.dw 0x39c0, 0xc92a,	0x5fff, 0xc92a,		0x21, 0
+	.dw 0x6040, 0xc92a,	0x607f, 0xc92a,		0x21, 0
+	.dw 0x60c0, 0xc92a,	0x60ff, 0xc92a,		0x21, 0
+	.dw 0x6140, 0xc92a,	0x617f, 0xc92a,		0x21, 0
+	.dw 0x61c0, 0xc92a,	0x61ff, 0xc92a,		0x21, 0
+	.dw 0x6240, 0xc92a,	0x627f, 0xc92a,		0x21, 0
+	.dw 0x62c0, 0xc92a,	0x62ff, 0xc92a,		0x21, 0
+	.dw 0x6340, 0xc92a,	0x637f, 0xc92a,		0x21, 0
+	.dw 0x63c0, 0xc92a,	0x63ff, 0xc92a,		0x21, 0
+	.dw 0x6440, 0xc92a,	0x647f, 0xc92a,		0x21, 0
+	.dw 0x64c0, 0xc92a,	0x64ff, 0xc92a,		0x21, 0
+	.dw 0x6540, 0xc92a,	0x657f, 0xc92a,		0x21, 0
+	.dw 0x65c0, 0xc92a,	0x65ff, 0xc92a,		0x21, 0
+	.dw 0x6640, 0xc92a,	0x667f, 0xc92a,		0x21, 0
+	.dw 0x66c0, 0xc92a,	0x66ff, 0xc92a,		0x21, 0
+	.dw 0x6740, 0xc92a,	0x677f, 0xc92a,		0x21, 0
+	.dw 0x67c0, 0xc92a,	0x67ff, 0xc92a,		0x21, 0
+	.dw 0x6840, 0xc92a,	0x687f, 0xc92a,		0x21, 0
+	.dw 0x68c0, 0xc92a,	0x68ff, 0xc92a,		0x21, 0
+	.dw 0x6940, 0xc92a,	0x697f, 0xc92a,		0x21, 0
+	.dw 0x69c0, 0xc92a,	0x69ff, 0xc92a,		0x21, 0
+	.dw 0x6a40, 0xc92a,	0x6a7f, 0xc92a,		0x21, 0
+	.dw 0x6ac0, 0xc92a,	0x6aff, 0xc92a,		0x21, 0
+	.dw 0x6b40, 0xc92a,	0x6b7f, 0xc92a,		0x21, 0
+	.dw 0x6bc0, 0xc92a,	0x6bff, 0xc92a,		0x21, 0
+	.dw 0x6c40, 0xc92a,	0x6c7f, 0xc92a,		0x21, 0
+	.dw 0x6cc0, 0xc92a,	0x6cff, 0xc92a,		0x21, 0
+	.dw 0x6d40, 0xc92a,	0x6d7f, 0xc92a,		0x21, 0
+	.dw 0x6dc0, 0xc92a,	0x6dff, 0xc92a,		0x21, 0
+	.dw 0x6e40, 0xc92a,	0x6e7f, 0xc92a,		0x21, 0
+	.dw 0x6ec0, 0xc92a,	0x6eff, 0xc92a,		0x21, 0
+	.dw 0x6f40, 0xc92a,	0x6f7f, 0xc92a,		0x21, 0
+	.dw 0x6fc0, 0xc92a,	0x6fff, 0xc92a,		0x21, 0
+	.dw 0x7040, 0xc92a,	0x707f, 0xc92a,		0x21, 0
+	.dw 0x70c0, 0xc92a,	0x70ff, 0xc92a,		0x21, 0
+	.dw 0x7140, 0xc92a,	0x717f, 0xc92a,		0x21, 0
+	.dw 0x71c0, 0xc92a,	0x71ff, 0xc92a,		0x21, 0
+	.dw 0x7240, 0xc92a,	0x727f, 0xc92a,		0x21, 0
+	.dw 0x72c0, 0xc92a,	0x72ff, 0xc92a,		0x21, 0
+	.dw 0x7340, 0xc92a,	0x737f, 0xc92a,		0x21, 0
+	.dw 0x73c0, 0xc92a,	0x73ff, 0xc92a,		0x21, 0
+	.dw 0x7440, 0xc92a,	0x747f, 0xc92a,		0x21, 0
+	.dw 0x74c0, 0xc92a,	0x74ff, 0xc92a,		0x21, 0
+	.dw 0x7540, 0xc92a,	0x757f, 0xc92a,		0x21, 0
+	.dw 0x75c0, 0xc92a,	0x75ff, 0xc92a,		0x21, 0
+	.dw 0x7640, 0xc92a,	0x767f, 0xc92a,		0x21, 0
+	.dw 0x76c0, 0xc92a,	0x76ff, 0xc92a,		0x21, 0
+	.dw 0x7740, 0xc92a,	0x777f, 0xc92a,		0x21, 0
+	.dw 0x77c0, 0xc92a,	0x77ff, 0xc92a,		0x21, 0
+	.dw 0x7840, 0xc92a,	0x787f, 0xc92a,		0x21, 0
+	.dw 0x78c0, 0xc92a,	0x78ff, 0xc92a,		0x21, 0
+	.dw 0x7940, 0xc92a,	0x797f, 0xc92a,		0x21, 0
+	.dw 0x79c0, 0xc92a,	0x9fff, 0xc92a,		0x21, 0
+	.dw 0xa040, 0xc92a,	0xa07f, 0xc92a,		0x21, 0
+	.dw 0xa0c0, 0xc92a,	0xa0ff, 0xc92a,		0x21, 0
+	.dw 0xa140, 0xc92a,	0xa17f, 0xc92a,		0x21, 0
+	.dw 0xa1c0, 0xc92a,	0xa1ff, 0xc92a,		0x21, 0
+	.dw 0xa240, 0xc92a,	0xa27f, 0xc92a,		0x21, 0
+	.dw 0xa2c0, 0xc92a,	0xa2ff, 0xc92a,		0x21, 0
+	.dw 0xa340, 0xc92a,	0xa37f, 0xc92a,		0x21, 0
+	.dw 0xa3c0, 0xc92a,	0xa3ff, 0xc92a,		0x21, 0
+	.dw 0xa440, 0xc92a,	0xa47f, 0xc92a,		0x21, 0
+	.dw 0xa4c0, 0xc92a,	0xa4ff, 0xc92a,		0x21, 0
+	.dw 0xa540, 0xc92a,	0xa57f, 0xc92a,		0x21, 0
+	.dw 0xa5c0, 0xc92a,	0xa5ff, 0xc92a,		0x21, 0
+	.dw 0xa640, 0xc92a,	0xa67f, 0xc92a,		0x21, 0
+	.dw 0xa6c0, 0xc92a,	0xa6ff, 0xc92a,		0x21, 0
+	.dw 0xa740, 0xc92a,	0xa77f, 0xc92a,		0x21, 0
+	.dw 0xa7c0, 0xc92a,	0xa7ff, 0xc92a,		0x21, 0
+	.dw 0xa840, 0xc92a,	0xa87f, 0xc92a,		0x21, 0
+	.dw 0xa8c0, 0xc92a,	0xa8ff, 0xc92a,		0x21, 0
+	.dw 0xa940, 0xc92a,	0xa97f, 0xc92a,		0x21, 0
+	.dw 0xa9c0, 0xc92a,	0xa9ff, 0xc92a,		0x21, 0
+	.dw 0xaa40, 0xc92a,	0xaa7f, 0xc92a,		0x21, 0
+	.dw 0xaac0, 0xc92a,	0xaaff, 0xc92a,		0x21, 0
+	.dw 0xab40, 0xc92a,	0xab7f, 0xc92a,		0x21, 0
+	.dw 0xabc0, 0xc92a,	0xabff, 0xc92a,		0x21, 0
+	.dw 0xac40, 0xc92a,	0xac7f, 0xc92a,		0x21, 0
+	.dw 0xacc0, 0xc92a,	0xacff, 0xc92a,		0x21, 0
+	.dw 0xad40, 0xc92a,	0xad7f, 0xc92a,		0x21, 0
+	.dw 0xadc0, 0xc92a,	0xadff, 0xc92a,		0x21, 0
+	.dw 0xae40, 0xc92a,	0xae7f, 0xc92a,		0x21, 0
+	.dw 0xaec0, 0xc92a,	0xaeff, 0xc92a,		0x21, 0
+	.dw 0xaf40, 0xc92a,	0xaf7f, 0xc92a,		0x21, 0
+	.dw 0xafc0, 0xc92a,	0xafff, 0xc92a,		0x21, 0
+	.dw 0xb040, 0xc92a,	0xb07f, 0xc92a,		0x21, 0
+	.dw 0xb0c0, 0xc92a,	0xb0ff, 0xc92a,		0x21, 0
+	.dw 0xb140, 0xc92a,	0xb17f, 0xc92a,		0x21, 0
+	.dw 0xb1c0, 0xc92a,	0xb1ff, 0xc92a,		0x21, 0
+	.dw 0xb240, 0xc92a,	0xb27f, 0xc92a,		0x21, 0
+	.dw 0xb2c0, 0xc92a,	0xb2ff, 0xc92a,		0x21, 0
+	.dw 0xb340, 0xc92a,	0xb37f, 0xc92a,		0x21, 0
+	.dw 0xb3c0, 0xc92a,	0xb3ff, 0xc92a,		0x21, 0
+	.dw 0xb440, 0xc92a,	0xb47f, 0xc92a,		0x21, 0
+	.dw 0xb4c0, 0xc92a,	0xb4ff, 0xc92a,		0x21, 0
+	.dw 0xb540, 0xc92a,	0xb57f, 0xc92a,		0x21, 0
+	.dw 0xb5c0, 0xc92a,	0xb5ff, 0xc92a,		0x21, 0
+	.dw 0xb640, 0xc92a,	0xb67f, 0xc92a,		0x21, 0
+	.dw 0xb6c0, 0xc92a,	0xb6ff, 0xc92a,		0x21, 0
+	.dw 0xb740, 0xc92a,	0xb77f, 0xc92a,		0x21, 0
+	.dw 0xb7c0, 0xc92a,	0xb7ff, 0xc92a,		0x21, 0
+	.dw 0xb840, 0xc92a,	0xb87f, 0xc92a,		0x21, 0
+	.dw 0xb8c0, 0xc92a,	0xb8ff, 0xc92a,		0x21, 0
+	.dw 0xb940, 0xc92a,	0xb97f, 0xc92a,		0x21, 0
+	.dw 0xb9c0, 0xc92a,	0xdfff, 0xc92a,		0x21, 0
+	.dw 0xe040, 0xc92a,	0xe07f, 0xc92a,		0x21, 0
+	.dw 0xe0c0, 0xc92a,	0xe0ff, 0xc92a,		0x21, 0
+	.dw 0xe140, 0xc92a,	0xe17f, 0xc92a,		0x21, 0
+	.dw 0xe1c0, 0xc92a,	0xe1ff, 0xc92a,		0x21, 0
+	.dw 0xe240, 0xc92a,	0xe27f, 0xc92a,		0x21, 0
+	.dw 0xe2c0, 0xc92a,	0xe2ff, 0xc92a,		0x21, 0
+	.dw 0xe340, 0xc92a,	0xe37f, 0xc92a,		0x21, 0
+	.dw 0xe3c0, 0xc92a,	0xe3ff, 0xc92a,		0x21, 0
+	.dw 0xe440, 0xc92a,	0xe47f, 0xc92a,		0x21, 0
+	.dw 0xe4c0, 0xc92a,	0xe4ff, 0xc92a,		0x21, 0
+	.dw 0xe540, 0xc92a,	0xe57f, 0xc92a,		0x21, 0
+	.dw 0xe5c0, 0xc92a,	0xe5ff, 0xc92a,		0x21, 0
+	.dw 0xe640, 0xc92a,	0xe67f, 0xc92a,		0x21, 0
+	.dw 0xe6c0, 0xc92a,	0xe6ff, 0xc92a,		0x21, 0
+	.dw 0xe740, 0xc92a,	0xe77f, 0xc92a,		0x21, 0
+	.dw 0xe7c0, 0xc92a,	0xe7ff, 0xc92a,		0x21, 0
+	.dw 0xe840, 0xc92a,	0xe87f, 0xc92a,		0x21, 0
+	.dw 0xe8c0, 0xc92a,	0xe8ff, 0xc92a,		0x21, 0
+	.dw 0xe940, 0xc92a,	0xe97f, 0xc92a,		0x21, 0
+	.dw 0xe9c0, 0xc92a,	0xe9ff, 0xc92a,		0x21, 0
+	.dw 0xea40, 0xc92a,	0xea7f, 0xc92a,		0x21, 0
+	.dw 0xeac0, 0xc92a,	0xeaff, 0xc92a,		0x21, 0
+	.dw 0xeb40, 0xc92a,	0xeb7f, 0xc92a,		0x21, 0
+	.dw 0xebc0, 0xc92a,	0xebff, 0xc92a,		0x21, 0
+	.dw 0xec40, 0xc92a,	0xec7f, 0xc92a,		0x21, 0
+	.dw 0xecc0, 0xc92a,	0xecff, 0xc92a,		0x21, 0
+	.dw 0xed40, 0xc92a,	0xed7f, 0xc92a,		0x21, 0
+	.dw 0xedc0, 0xc92a,	0xedff, 0xc92a,		0x21, 0
+	.dw 0xee40, 0xc92a,	0xee7f, 0xc92a,		0x21, 0
+	.dw 0xeec0, 0xc92a,	0xeeff, 0xc92a,		0x21, 0
+	.dw 0xef40, 0xc92a,	0xef7f, 0xc92a,		0x21, 0
+	.dw 0xefc0, 0xc92a,	0xefff, 0xc92a,		0x21, 0
+	.dw 0xf040, 0xc92a,	0xf07f, 0xc92a,		0x21, 0
+	.dw 0xf0c0, 0xc92a,	0xf0ff, 0xc92a,		0x21, 0
+	.dw 0xf140, 0xc92a,	0xf17f, 0xc92a,		0x21, 0
+	.dw 0xf1c0, 0xc92a,	0xf1ff, 0xc92a,		0x21, 0
+	.dw 0xf240, 0xc92a,	0xf27f, 0xc92a,		0x21, 0
+	.dw 0xf2c0, 0xc92a,	0xf2ff, 0xc92a,		0x21, 0
+	.dw 0xf340, 0xc92a,	0xf37f, 0xc92a,		0x21, 0
+	.dw 0xf3c0, 0xc92a,	0xf3ff, 0xc92a,		0x21, 0
+	.dw 0xf440, 0xc92a,	0xf47f, 0xc92a,		0x21, 0
+	.dw 0xf4c0, 0xc92a,	0xf4ff, 0xc92a,		0x21, 0
+	.dw 0xf540, 0xc92a,	0xf57f, 0xc92a,		0x21, 0
+	.dw 0xf5c0, 0xc92a,	0xf5ff, 0xc92a,		0x21, 0
+	.dw 0xf640, 0xc92a,	0xf67f, 0xc92a,		0x21, 0
+	.dw 0xf6c0, 0xc92a,	0xf6ff, 0xc92a,		0x21, 0
+	.dw 0xf740, 0xc92a,	0xf77f, 0xc92a,		0x21, 0
+	.dw 0xf7c0, 0xc92a,	0xf7ff, 0xc92a,		0x21, 0
+	.dw 0xf840, 0xc92a,	0xf87f, 0xc92a,		0x21, 0
+	.dw 0xf8c0, 0xc92a,	0xf8ff, 0xc92a,		0x21, 0
+	.dw 0xf940, 0xc92a,	0xf97f, 0xc92a,		0x21, 0
+	.dw 0xf9c0, 0xc92a,	0x1fff, 0xc92b,		0x21, 0
+	.dw 0x2040, 0xc92b,	0x207f, 0xc92b,		0x21, 0
+	.dw 0x20c0, 0xc92b,	0x20ff, 0xc92b,		0x21, 0
+	.dw 0x2140, 0xc92b,	0x217f, 0xc92b,		0x21, 0
+	.dw 0x21c0, 0xc92b,	0x21ff, 0xc92b,		0x21, 0
+	.dw 0x2240, 0xc92b,	0x227f, 0xc92b,		0x21, 0
+	.dw 0x22c0, 0xc92b,	0x22ff, 0xc92b,		0x21, 0
+	.dw 0x2340, 0xc92b,	0x237f, 0xc92b,		0x21, 0
+	.dw 0x23c0, 0xc92b,	0x23ff, 0xc92b,		0x21, 0
+	.dw 0x2440, 0xc92b,	0x247f, 0xc92b,		0x21, 0
+	.dw 0x24c0, 0xc92b,	0x24ff, 0xc92b,		0x21, 0
+	.dw 0x2540, 0xc92b,	0x257f, 0xc92b,		0x21, 0
+	.dw 0x25c0, 0xc92b,	0x25ff, 0xc92b,		0x21, 0
+	.dw 0x2640, 0xc92b,	0x267f, 0xc92b,		0x21, 0
+	.dw 0x26c0, 0xc92b,	0x26ff, 0xc92b,		0x21, 0
+	.dw 0x2740, 0xc92b,	0x277f, 0xc92b,		0x21, 0
+	.dw 0x27c0, 0xc92b,	0x27ff, 0xc92b,		0x21, 0
+	.dw 0x2840, 0xc92b,	0x287f, 0xc92b,		0x21, 0
+	.dw 0x28c0, 0xc92b,	0x28ff, 0xc92b,		0x21, 0
+	.dw 0x2940, 0xc92b,	0x297f, 0xc92b,		0x21, 0
+	.dw 0x29c0, 0xc92b,	0x29ff, 0xc92b,		0x21, 0
+	.dw 0x2a40, 0xc92b,	0x2a7f, 0xc92b,		0x21, 0
+	.dw 0x2ac0, 0xc92b,	0x2aff, 0xc92b,		0x21, 0
+	.dw 0x2b40, 0xc92b,	0x2b7f, 0xc92b,		0x21, 0
+	.dw 0x2bc0, 0xc92b,	0x2bff, 0xc92b,		0x21, 0
+	.dw 0x2c40, 0xc92b,	0x2c7f, 0xc92b,		0x21, 0
+	.dw 0x2cc0, 0xc92b,	0x2cff, 0xc92b,		0x21, 0
+	.dw 0x2d40, 0xc92b,	0x2d7f, 0xc92b,		0x21, 0
+	.dw 0x2dc0, 0xc92b,	0x2dff, 0xc92b,		0x21, 0
+	.dw 0x2e40, 0xc92b,	0x2e7f, 0xc92b,		0x21, 0
+	.dw 0x2ec0, 0xc92b,	0x2eff, 0xc92b,		0x21, 0
+	.dw 0x2f40, 0xc92b,	0x2f7f, 0xc92b,		0x21, 0
+	.dw 0x2fc0, 0xc92b,	0x2fff, 0xc92b,		0x21, 0
+	.dw 0x3040, 0xc92b,	0x307f, 0xc92b,		0x21, 0
+	.dw 0x30c0, 0xc92b,	0x30ff, 0xc92b,		0x21, 0
+	.dw 0x3140, 0xc92b,	0x317f, 0xc92b,		0x21, 0
+	.dw 0x31c0, 0xc92b,	0x31ff, 0xc92b,		0x21, 0
+	.dw 0x3240, 0xc92b,	0x327f, 0xc92b,		0x21, 0
+	.dw 0x32c0, 0xc92b,	0x32ff, 0xc92b,		0x21, 0
+	.dw 0x3340, 0xc92b,	0x337f, 0xc92b,		0x21, 0
+	.dw 0x33c0, 0xc92b,	0x33ff, 0xc92b,		0x21, 0
+	.dw 0x3440, 0xc92b,	0x347f, 0xc92b,		0x21, 0
+	.dw 0x34c0, 0xc92b,	0x34ff, 0xc92b,		0x21, 0
+	.dw 0x3540, 0xc92b,	0x357f, 0xc92b,		0x21, 0
+	.dw 0x35c0, 0xc92b,	0x35ff, 0xc92b,		0x21, 0
+	.dw 0x3640, 0xc92b,	0x367f, 0xc92b,		0x21, 0
+	.dw 0x36c0, 0xc92b,	0x36ff, 0xc92b,		0x21, 0
+	.dw 0x3740, 0xc92b,	0x377f, 0xc92b,		0x21, 0
+	.dw 0x37c0, 0xc92b,	0x37ff, 0xc92b,		0x21, 0
+	.dw 0x3840, 0xc92b,	0x387f, 0xc92b,		0x21, 0
+	.dw 0x38c0, 0xc92b,	0x38ff, 0xc92b,		0x21, 0
+	.dw 0x3940, 0xc92b,	0x397f, 0xc92b,		0x21, 0
+	.dw 0x39c0, 0xc92b,	0xffff, 0xc92b,		0x21, 0
+	.dw 0x0040, 0xc92c,	0x007f, 0xc92c,		0x21, 0
+	.dw 0x00c0, 0xc92c,	0x00ff, 0xc92c,		0x21, 0
+	.dw 0x0140, 0xc92c,	0x017f, 0xc92c,		0x21, 0
+	.dw 0x01c0, 0xc92c,	0x01ff, 0xc92c,		0x21, 0
+	.dw 0x0240, 0xc92c,	0x027f, 0xc92c,		0x21, 0
+	.dw 0x02c0, 0xc92c,	0x02ff, 0xc92c,		0x21, 0
+	.dw 0x0340, 0xc92c,	0x037f, 0xc92c,		0x21, 0
+	.dw 0x03c0, 0xc92c,	0x03ff, 0xc92c,		0x21, 0
+	.dw 0x0440, 0xc92c,	0x047f, 0xc92c,		0x21, 0
+	.dw 0x04c0, 0xc92c,	0x04ff, 0xc92c,		0x21, 0
+	.dw 0x0540, 0xc92c,	0x057f, 0xc92c,		0x21, 0
+	.dw 0x05c0, 0xc92c,	0x05ff, 0xc92c,		0x21, 0
+	.dw 0x0640, 0xc92c,	0x067f, 0xc92c,		0x21, 0
+	.dw 0x06c0, 0xc92c,	0x06ff, 0xc92c,		0x21, 0
+	.dw 0x0740, 0xc92c,	0x077f, 0xc92c,		0x21, 0
+	.dw 0x07c0, 0xc92c,	0x07ff, 0xc92c,		0x21, 0
+	.dw 0x0840, 0xc92c,	0x087f, 0xc92c,		0x21, 0
+	.dw 0x08c0, 0xc92c,	0x08ff, 0xc92c,		0x21, 0
+	.dw 0x0940, 0xc92c,	0x097f, 0xc92c,		0x21, 0
+	.dw 0x09c0, 0xc92c,	0x09ff, 0xc92c,		0x21, 0
+	.dw 0x0a40, 0xc92c,	0x0a7f, 0xc92c,		0x21, 0
+	.dw 0x0ac0, 0xc92c,	0x0aff, 0xc92c,		0x21, 0
+	.dw 0x0b40, 0xc92c,	0x0b7f, 0xc92c,		0x21, 0
+	.dw 0x0bc0, 0xc92c,	0x0bff, 0xc92c,		0x21, 0
+	.dw 0x0c40, 0xc92c,	0x0c7f, 0xc92c,		0x21, 0
+	.dw 0x0cc0, 0xc92c,	0x0cff, 0xc92c,		0x21, 0
+	.dw 0x0d40, 0xc92c,	0x0d7f, 0xc92c,		0x21, 0
+	.dw 0x0dc0, 0xc92c,	0x0dff, 0xc92c,		0x21, 0
+	.dw 0x0e40, 0xc92c,	0x0e7f, 0xc92c,		0x21, 0
+	.dw 0x0ec0, 0xc92c,	0x0eff, 0xc92c,		0x21, 0
+	.dw 0x0f40, 0xc92c,	0x0f7f, 0xc92c,		0x21, 0
+	.dw 0x0fc0, 0xc92c,	0x0fff, 0xc92c,		0x21, 0
+	.dw 0x1040, 0xc92c,	0x107f, 0xc92c,		0x21, 0
+	.dw 0x10c0, 0xc92c,	0x10ff, 0xc92c,		0x21, 0
+	.dw 0x1140, 0xc92c,	0x117f, 0xc92c,		0x21, 0
+	.dw 0x11c0, 0xc92c,	0x11ff, 0xc92c,		0x21, 0
+	.dw 0x1240, 0xc92c,	0x127f, 0xc92c,		0x21, 0
+	.dw 0x12c0, 0xc92c,	0x12ff, 0xc92c,		0x21, 0
+	.dw 0x1340, 0xc92c,	0x137f, 0xc92c,		0x21, 0
+	.dw 0x13c0, 0xc92c,	0x13ff, 0xc92c,		0x21, 0
+	.dw 0x1440, 0xc92c,	0x147f, 0xc92c,		0x21, 0
+	.dw 0x14c0, 0xc92c,	0x14ff, 0xc92c,		0x21, 0
+	.dw 0x1540, 0xc92c,	0x157f, 0xc92c,		0x21, 0
+	.dw 0x15c0, 0xc92c,	0x15ff, 0xc92c,		0x21, 0
+	.dw 0x1640, 0xc92c,	0x167f, 0xc92c,		0x21, 0
+	.dw 0x16c0, 0xc92c,	0x16ff, 0xc92c,		0x21, 0
+	.dw 0x1740, 0xc92c,	0x177f, 0xc92c,		0x21, 0
+	.dw 0x17c0, 0xc92c,	0x17ff, 0xc92c,		0x21, 0
+	.dw 0x1840, 0xc92c,	0x187f, 0xc92c,		0x21, 0
+	.dw 0x18c0, 0xc92c,	0x18ff, 0xc92c,		0x21, 0
+	.dw 0x1940, 0xc92c,	0x197f, 0xc92c,		0x21, 0
+	.dw 0x19c0, 0xc92c,	0x1fff, 0xc92c,		0x21, 0
+	.dw 0x2040, 0xc92c,	0x207f, 0xc92c,		0x21, 0
+	.dw 0x20c0, 0xc92c,	0x20ff, 0xc92c,		0x21, 0
+	.dw 0x2140, 0xc92c,	0x217f, 0xc92c,		0x21, 0
+	.dw 0x21c0, 0xc92c,	0x21ff, 0xc92c,		0x21, 0
+	.dw 0x2240, 0xc92c,	0x227f, 0xc92c,		0x21, 0
+	.dw 0x22c0, 0xc92c,	0x22ff, 0xc92c,		0x21, 0
+	.dw 0x2340, 0xc92c,	0x237f, 0xc92c,		0x21, 0
+	.dw 0x23c0, 0xc92c,	0x23ff, 0xc92c,		0x21, 0
+	.dw 0x2440, 0xc92c,	0x247f, 0xc92c,		0x21, 0
+	.dw 0x24c0, 0xc92c,	0x24ff, 0xc92c,		0x21, 0
+	.dw 0x2540, 0xc92c,	0x257f, 0xc92c,		0x21, 0
+	.dw 0x25c0, 0xc92c,	0x25ff, 0xc92c,		0x21, 0
+	.dw 0x2640, 0xc92c,	0x267f, 0xc92c,		0x21, 0
+	.dw 0x26c0, 0xc92c,	0x26ff, 0xc92c,		0x21, 0
+	.dw 0x2740, 0xc92c,	0x277f, 0xc92c,		0x21, 0
+	.dw 0x27c0, 0xc92c,	0x27ff, 0xc92c,		0x21, 0
+	.dw 0x2840, 0xc92c,	0x287f, 0xc92c,		0x21, 0
+	.dw 0x28c0, 0xc92c,	0x28ff, 0xc92c,		0x21, 0
+	.dw 0x2940, 0xc92c,	0x297f, 0xc92c,		0x21, 0
+	.dw 0x29c0, 0xc92c,	0x29ff, 0xc92c,		0x21, 0
+	.dw 0x2a40, 0xc92c,	0x2a7f, 0xc92c,		0x21, 0
+	.dw 0x2ac0, 0xc92c,	0x2aff, 0xc92c,		0x21, 0
+	.dw 0x2b40, 0xc92c,	0x2b7f, 0xc92c,		0x21, 0
+	.dw 0x2bc0, 0xc92c,	0x2bff, 0xc92c,		0x21, 0
+	.dw 0x2c40, 0xc92c,	0x2c7f, 0xc92c,		0x21, 0
+	.dw 0x2cc0, 0xc92c,	0x2cff, 0xc92c,		0x21, 0
+	.dw 0x2d40, 0xc92c,	0x2d7f, 0xc92c,		0x21, 0
+	.dw 0x2dc0, 0xc92c,	0x2dff, 0xc92c,		0x21, 0
+	.dw 0x2e40, 0xc92c,	0x2e7f, 0xc92c,		0x21, 0
+	.dw 0x2ec0, 0xc92c,	0x2eff, 0xc92c,		0x21, 0
+	.dw 0x2f40, 0xc92c,	0x2f7f, 0xc92c,		0x21, 0
+	.dw 0x2fc0, 0xc92c,	0x2fff, 0xc92c,		0x21, 0
+	.dw 0x3040, 0xc92c,	0x307f, 0xc92c,		0x21, 0
+	.dw 0x30c0, 0xc92c,	0x30ff, 0xc92c,		0x21, 0
+	.dw 0x3140, 0xc92c,	0x317f, 0xc92c,		0x21, 0
+	.dw 0x31c0, 0xc92c,	0x31ff, 0xc92c,		0x21, 0
+	.dw 0x3240, 0xc92c,	0x327f, 0xc92c,		0x21, 0
+	.dw 0x32c0, 0xc92c,	0x32ff, 0xc92c,		0x21, 0
+	.dw 0x3340, 0xc92c,	0x337f, 0xc92c,		0x21, 0
+	.dw 0x33c0, 0xc92c,	0x33ff, 0xc92c,		0x21, 0
+	.dw 0x3440, 0xc92c,	0x347f, 0xc92c,		0x21, 0
+	.dw 0x34c0, 0xc92c,	0x34ff, 0xc92c,		0x21, 0
+	.dw 0x3540, 0xc92c,	0x357f, 0xc92c,		0x21, 0
+	.dw 0x35c0, 0xc92c,	0x35ff, 0xc92c,		0x21, 0
+	.dw 0x3640, 0xc92c,	0x367f, 0xc92c,		0x21, 0
+	.dw 0x36c0, 0xc92c,	0x36ff, 0xc92c,		0x21, 0
+	.dw 0x3740, 0xc92c,	0x377f, 0xc92c,		0x21, 0
+	.dw 0x37c0, 0xc92c,	0x37ff, 0xc92c,		0x21, 0
+	.dw 0x3840, 0xc92c,	0x387f, 0xc92c,		0x21, 0
+	.dw 0x38c0, 0xc92c,	0x38ff, 0xc92c,		0x21, 0
+	.dw 0x3940, 0xc92c,	0x397f, 0xc92c,		0x21, 0
+	.dw 0x39c0, 0xc92c,	0x3fff, 0xc92c,		0x21, 0
+	.dw 0x4040, 0xc92c,	0x407f, 0xc92c,		0x21, 0
+	.dw 0x40c0, 0xc92c,	0x40ff, 0xc92c,		0x21, 0
+	.dw 0x4140, 0xc92c,	0x417f, 0xc92c,		0x21, 0
+	.dw 0x41c0, 0xc92c,	0x41ff, 0xc92c,		0x21, 0
+	.dw 0x4240, 0xc92c,	0x427f, 0xc92c,		0x21, 0
+	.dw 0x42c0, 0xc92c,	0x42ff, 0xc92c,		0x21, 0
+	.dw 0x4340, 0xc92c,	0x437f, 0xc92c,		0x21, 0
+	.dw 0x43c0, 0xc92c,	0x43ff, 0xc92c,		0x21, 0
+	.dw 0x4440, 0xc92c,	0x447f, 0xc92c,		0x21, 0
+	.dw 0x44c0, 0xc92c,	0x44ff, 0xc92c,		0x21, 0
+	.dw 0x4540, 0xc92c,	0x457f, 0xc92c,		0x21, 0
+	.dw 0x45c0, 0xc92c,	0x45ff, 0xc92c,		0x21, 0
+	.dw 0x4640, 0xc92c,	0x467f, 0xc92c,		0x21, 0
+	.dw 0x46c0, 0xc92c,	0x46ff, 0xc92c,		0x21, 0
+	.dw 0x4740, 0xc92c,	0x477f, 0xc92c,		0x21, 0
+	.dw 0x47c0, 0xc92c,	0x47ff, 0xc92c,		0x21, 0
+	.dw 0x4840, 0xc92c,	0x487f, 0xc92c,		0x21, 0
+	.dw 0x48c0, 0xc92c,	0x48ff, 0xc92c,		0x21, 0
+	.dw 0x4940, 0xc92c,	0x497f, 0xc92c,		0x21, 0
+	.dw 0x49c0, 0xc92c,	0x49ff, 0xc92c,		0x21, 0
+	.dw 0x4a40, 0xc92c,	0x4a7f, 0xc92c,		0x21, 0
+	.dw 0x4ac0, 0xc92c,	0x4aff, 0xc92c,		0x21, 0
+	.dw 0x4b40, 0xc92c,	0x4b7f, 0xc92c,		0x21, 0
+	.dw 0x4bc0, 0xc92c,	0x4bff, 0xc92c,		0x21, 0
+	.dw 0x4c40, 0xc92c,	0x4c7f, 0xc92c,		0x21, 0
+	.dw 0x4cc0, 0xc92c,	0x4cff, 0xc92c,		0x21, 0
+	.dw 0x4d40, 0xc92c,	0x4d7f, 0xc92c,		0x21, 0
+	.dw 0x4dc0, 0xc92c,	0x4dff, 0xc92c,		0x21, 0
+	.dw 0x4e40, 0xc92c,	0x4e7f, 0xc92c,		0x21, 0
+	.dw 0x4ec0, 0xc92c,	0x4eff, 0xc92c,		0x21, 0
+	.dw 0x4f40, 0xc92c,	0x4f7f, 0xc92c,		0x21, 0
+	.dw 0x4fc0, 0xc92c,	0x4fff, 0xc92c,		0x21, 0
+	.dw 0x5040, 0xc92c,	0x507f, 0xc92c,		0x21, 0
+	.dw 0x50c0, 0xc92c,	0x50ff, 0xc92c,		0x21, 0
+	.dw 0x5140, 0xc92c,	0x517f, 0xc92c,		0x21, 0
+	.dw 0x51c0, 0xc92c,	0x51ff, 0xc92c,		0x21, 0
+	.dw 0x5240, 0xc92c,	0x527f, 0xc92c,		0x21, 0
+	.dw 0x52c0, 0xc92c,	0x52ff, 0xc92c,		0x21, 0
+	.dw 0x5340, 0xc92c,	0x537f, 0xc92c,		0x21, 0
+	.dw 0x53c0, 0xc92c,	0x53ff, 0xc92c,		0x21, 0
+	.dw 0x5440, 0xc92c,	0x547f, 0xc92c,		0x21, 0
+	.dw 0x54c0, 0xc92c,	0x54ff, 0xc92c,		0x21, 0
+	.dw 0x5540, 0xc92c,	0x557f, 0xc92c,		0x21, 0
+	.dw 0x55c0, 0xc92c,	0x55ff, 0xc92c,		0x21, 0
+	.dw 0x5640, 0xc92c,	0x567f, 0xc92c,		0x21, 0
+	.dw 0x56c0, 0xc92c,	0x56ff, 0xc92c,		0x21, 0
+	.dw 0x5740, 0xc92c,	0x577f, 0xc92c,		0x21, 0
+	.dw 0x57c0, 0xc92c,	0x57ff, 0xc92c,		0x21, 0
+	.dw 0x5840, 0xc92c,	0x587f, 0xc92c,		0x21, 0
+	.dw 0x58c0, 0xc92c,	0x58ff, 0xc92c,		0x21, 0
+	.dw 0x5940, 0xc92c,	0x597f, 0xc92c,		0x21, 0
+	.dw 0x59c0, 0xc92c,	0x5fff, 0xc92c,		0x21, 0
+	.dw 0x6040, 0xc92c,	0x607f, 0xc92c,		0x21, 0
+	.dw 0x60c0, 0xc92c,	0x60ff, 0xc92c,		0x21, 0
+	.dw 0x6140, 0xc92c,	0x617f, 0xc92c,		0x21, 0
+	.dw 0x61c0, 0xc92c,	0x61ff, 0xc92c,		0x21, 0
+	.dw 0x6240, 0xc92c,	0x627f, 0xc92c,		0x21, 0
+	.dw 0x62c0, 0xc92c,	0x62ff, 0xc92c,		0x21, 0
+	.dw 0x6340, 0xc92c,	0x637f, 0xc92c,		0x21, 0
+	.dw 0x63c0, 0xc92c,	0x63ff, 0xc92c,		0x21, 0
+	.dw 0x6440, 0xc92c,	0x647f, 0xc92c,		0x21, 0
+	.dw 0x64c0, 0xc92c,	0x64ff, 0xc92c,		0x21, 0
+	.dw 0x6540, 0xc92c,	0x657f, 0xc92c,		0x21, 0
+	.dw 0x65c0, 0xc92c,	0x65ff, 0xc92c,		0x21, 0
+	.dw 0x6640, 0xc92c,	0x667f, 0xc92c,		0x21, 0
+	.dw 0x66c0, 0xc92c,	0x66ff, 0xc92c,		0x21, 0
+	.dw 0x6740, 0xc92c,	0x677f, 0xc92c,		0x21, 0
+	.dw 0x67c0, 0xc92c,	0x67ff, 0xc92c,		0x21, 0
+	.dw 0x6840, 0xc92c,	0x687f, 0xc92c,		0x21, 0
+	.dw 0x68c0, 0xc92c,	0x68ff, 0xc92c,		0x21, 0
+	.dw 0x6940, 0xc92c,	0x697f, 0xc92c,		0x21, 0
+	.dw 0x69c0, 0xc92c,	0x69ff, 0xc92c,		0x21, 0
+	.dw 0x6a40, 0xc92c,	0x6a7f, 0xc92c,		0x21, 0
+	.dw 0x6ac0, 0xc92c,	0x6aff, 0xc92c,		0x21, 0
+	.dw 0x6b40, 0xc92c,	0x6b7f, 0xc92c,		0x21, 0
+	.dw 0x6bc0, 0xc92c,	0x6bff, 0xc92c,		0x21, 0
+	.dw 0x6c40, 0xc92c,	0x6c7f, 0xc92c,		0x21, 0
+	.dw 0x6cc0, 0xc92c,	0x6cff, 0xc92c,		0x21, 0
+	.dw 0x6d40, 0xc92c,	0x6d7f, 0xc92c,		0x21, 0
+	.dw 0x6dc0, 0xc92c,	0x6dff, 0xc92c,		0x21, 0
+	.dw 0x6e40, 0xc92c,	0x6e7f, 0xc92c,		0x21, 0
+	.dw 0x6ec0, 0xc92c,	0x6eff, 0xc92c,		0x21, 0
+	.dw 0x6f40, 0xc92c,	0x6f7f, 0xc92c,		0x21, 0
+	.dw 0x6fc0, 0xc92c,	0x6fff, 0xc92c,		0x21, 0
+	.dw 0x7040, 0xc92c,	0x707f, 0xc92c,		0x21, 0
+	.dw 0x70c0, 0xc92c,	0x70ff, 0xc92c,		0x21, 0
+	.dw 0x7140, 0xc92c,	0x717f, 0xc92c,		0x21, 0
+	.dw 0x71c0, 0xc92c,	0x71ff, 0xc92c,		0x21, 0
+	.dw 0x7240, 0xc92c,	0x727f, 0xc92c,		0x21, 0
+	.dw 0x72c0, 0xc92c,	0x72ff, 0xc92c,		0x21, 0
+	.dw 0x7340, 0xc92c,	0x737f, 0xc92c,		0x21, 0
+	.dw 0x73c0, 0xc92c,	0x73ff, 0xc92c,		0x21, 0
+	.dw 0x7440, 0xc92c,	0x747f, 0xc92c,		0x21, 0
+	.dw 0x74c0, 0xc92c,	0x74ff, 0xc92c,		0x21, 0
+	.dw 0x7540, 0xc92c,	0x757f, 0xc92c,		0x21, 0
+	.dw 0x75c0, 0xc92c,	0x75ff, 0xc92c,		0x21, 0
+	.dw 0x7640, 0xc92c,	0x767f, 0xc92c,		0x21, 0
+	.dw 0x76c0, 0xc92c,	0x76ff, 0xc92c,		0x21, 0
+	.dw 0x7740, 0xc92c,	0x777f, 0xc92c,		0x21, 0
+	.dw 0x77c0, 0xc92c,	0x77ff, 0xc92c,		0x21, 0
+	.dw 0x7840, 0xc92c,	0x787f, 0xc92c,		0x21, 0
+	.dw 0x78c0, 0xc92c,	0x78ff, 0xc92c,		0x21, 0
+	.dw 0x7940, 0xc92c,	0x797f, 0xc92c,		0x21, 0
+	.dw 0x79c0, 0xc92c,	0x7fff, 0xc92c,		0x21, 0
+	.dw 0x8040, 0xc92c,	0x807f, 0xc92c,		0x21, 0
+	.dw 0x80c0, 0xc92c,	0x80ff, 0xc92c,		0x21, 0
+	.dw 0x8140, 0xc92c,	0x817f, 0xc92c,		0x21, 0
+	.dw 0x81c0, 0xc92c,	0x81ff, 0xc92c,		0x21, 0
+	.dw 0x8240, 0xc92c,	0x827f, 0xc92c,		0x21, 0
+	.dw 0x82c0, 0xc92c,	0x82ff, 0xc92c,		0x21, 0
+	.dw 0x8340, 0xc92c,	0x837f, 0xc92c,		0x21, 0
+	.dw 0x83c0, 0xc92c,	0x83ff, 0xc92c,		0x21, 0
+	.dw 0x8440, 0xc92c,	0x847f, 0xc92c,		0x21, 0
+	.dw 0x84c0, 0xc92c,	0x84ff, 0xc92c,		0x21, 0
+	.dw 0x8540, 0xc92c,	0x857f, 0xc92c,		0x21, 0
+	.dw 0x85c0, 0xc92c,	0x85ff, 0xc92c,		0x21, 0
+	.dw 0x8640, 0xc92c,	0x867f, 0xc92c,		0x21, 0
+	.dw 0x86c0, 0xc92c,	0x86ff, 0xc92c,		0x21, 0
+	.dw 0x8740, 0xc92c,	0x877f, 0xc92c,		0x21, 0
+	.dw 0x87c0, 0xc92c,	0x87ff, 0xc92c,		0x21, 0
+	.dw 0x8840, 0xc92c,	0x887f, 0xc92c,		0x21, 0
+	.dw 0x88c0, 0xc92c,	0x88ff, 0xc92c,		0x21, 0
+	.dw 0x8940, 0xc92c,	0x897f, 0xc92c,		0x21, 0
+	.dw 0x89c0, 0xc92c,	0x89ff, 0xc92c,		0x21, 0
+	.dw 0x8a40, 0xc92c,	0x8a7f, 0xc92c,		0x21, 0
+	.dw 0x8ac0, 0xc92c,	0x8aff, 0xc92c,		0x21, 0
+	.dw 0x8b40, 0xc92c,	0x8b7f, 0xc92c,		0x21, 0
+	.dw 0x8bc0, 0xc92c,	0x8bff, 0xc92c,		0x21, 0
+	.dw 0x8c40, 0xc92c,	0x8c7f, 0xc92c,		0x21, 0
+	.dw 0x8cc0, 0xc92c,	0x8cff, 0xc92c,		0x21, 0
+	.dw 0x8d40, 0xc92c,	0x8d7f, 0xc92c,		0x21, 0
+	.dw 0x8dc0, 0xc92c,	0x8dff, 0xc92c,		0x21, 0
+	.dw 0x8e40, 0xc92c,	0x8e7f, 0xc92c,		0x21, 0
+	.dw 0x8ec0, 0xc92c,	0x8eff, 0xc92c,		0x21, 0
+	.dw 0x8f40, 0xc92c,	0x8f7f, 0xc92c,		0x21, 0
+	.dw 0x8fc0, 0xc92c,	0x8fff, 0xc92c,		0x21, 0
+	.dw 0x9040, 0xc92c,	0x907f, 0xc92c,		0x21, 0
+	.dw 0x90c0, 0xc92c,	0x90ff, 0xc92c,		0x21, 0
+	.dw 0x9140, 0xc92c,	0x917f, 0xc92c,		0x21, 0
+	.dw 0x91c0, 0xc92c,	0x91ff, 0xc92c,		0x21, 0
+	.dw 0x9240, 0xc92c,	0x927f, 0xc92c,		0x21, 0
+	.dw 0x92c0, 0xc92c,	0x92ff, 0xc92c,		0x21, 0
+	.dw 0x9340, 0xc92c,	0x937f, 0xc92c,		0x21, 0
+	.dw 0x93c0, 0xc92c,	0x93ff, 0xc92c,		0x21, 0
+	.dw 0x9440, 0xc92c,	0x947f, 0xc92c,		0x21, 0
+	.dw 0x94c0, 0xc92c,	0x94ff, 0xc92c,		0x21, 0
+	.dw 0x9540, 0xc92c,	0x957f, 0xc92c,		0x21, 0
+	.dw 0x95c0, 0xc92c,	0x95ff, 0xc92c,		0x21, 0
+	.dw 0x9640, 0xc92c,	0x967f, 0xc92c,		0x21, 0
+	.dw 0x96c0, 0xc92c,	0x96ff, 0xc92c,		0x21, 0
+	.dw 0x9740, 0xc92c,	0x977f, 0xc92c,		0x21, 0
+	.dw 0x97c0, 0xc92c,	0x97ff, 0xc92c,		0x21, 0
+	.dw 0x9840, 0xc92c,	0x987f, 0xc92c,		0x21, 0
+	.dw 0x98c0, 0xc92c,	0x98ff, 0xc92c,		0x21, 0
+	.dw 0x9940, 0xc92c,	0x997f, 0xc92c,		0x21, 0
+	.dw 0x99c0, 0xc92c,	0x9fff, 0xc92c,		0x21, 0
+	.dw 0xa040, 0xc92c,	0xa07f, 0xc92c,		0x21, 0
+	.dw 0xa0c0, 0xc92c,	0xa0ff, 0xc92c,		0x21, 0
+	.dw 0xa140, 0xc92c,	0xa17f, 0xc92c,		0x21, 0
+	.dw 0xa1c0, 0xc92c,	0xa1ff, 0xc92c,		0x21, 0
+	.dw 0xa240, 0xc92c,	0xa27f, 0xc92c,		0x21, 0
+	.dw 0xa2c0, 0xc92c,	0xa2ff, 0xc92c,		0x21, 0
+	.dw 0xa340, 0xc92c,	0xa37f, 0xc92c,		0x21, 0
+	.dw 0xa3c0, 0xc92c,	0xa3ff, 0xc92c,		0x21, 0
+	.dw 0xa440, 0xc92c,	0xa47f, 0xc92c,		0x21, 0
+	.dw 0xa4c0, 0xc92c,	0xa4ff, 0xc92c,		0x21, 0
+	.dw 0xa540, 0xc92c,	0xa57f, 0xc92c,		0x21, 0
+	.dw 0xa5c0, 0xc92c,	0xa5ff, 0xc92c,		0x21, 0
+	.dw 0xa640, 0xc92c,	0xa67f, 0xc92c,		0x21, 0
+	.dw 0xa6c0, 0xc92c,	0xa6ff, 0xc92c,		0x21, 0
+	.dw 0xa740, 0xc92c,	0xa77f, 0xc92c,		0x21, 0
+	.dw 0xa7c0, 0xc92c,	0xa7ff, 0xc92c,		0x21, 0
+	.dw 0xa840, 0xc92c,	0xa87f, 0xc92c,		0x21, 0
+	.dw 0xa8c0, 0xc92c,	0xa8ff, 0xc92c,		0x21, 0
+	.dw 0xa940, 0xc92c,	0xa97f, 0xc92c,		0x21, 0
+	.dw 0xa9c0, 0xc92c,	0xa9ff, 0xc92c,		0x21, 0
+	.dw 0xaa40, 0xc92c,	0xaa7f, 0xc92c,		0x21, 0
+	.dw 0xaac0, 0xc92c,	0xaaff, 0xc92c,		0x21, 0
+	.dw 0xab40, 0xc92c,	0xab7f, 0xc92c,		0x21, 0
+	.dw 0xabc0, 0xc92c,	0xabff, 0xc92c,		0x21, 0
+	.dw 0xac40, 0xc92c,	0xac7f, 0xc92c,		0x21, 0
+	.dw 0xacc0, 0xc92c,	0xacff, 0xc92c,		0x21, 0
+	.dw 0xad40, 0xc92c,	0xad7f, 0xc92c,		0x21, 0
+	.dw 0xadc0, 0xc92c,	0xadff, 0xc92c,		0x21, 0
+	.dw 0xae40, 0xc92c,	0xae7f, 0xc92c,		0x21, 0
+	.dw 0xaec0, 0xc92c,	0xaeff, 0xc92c,		0x21, 0
+	.dw 0xaf40, 0xc92c,	0xaf7f, 0xc92c,		0x21, 0
+	.dw 0xafc0, 0xc92c,	0xafff, 0xc92c,		0x21, 0
+	.dw 0xb040, 0xc92c,	0xb07f, 0xc92c,		0x21, 0
+	.dw 0xb0c0, 0xc92c,	0xb0ff, 0xc92c,		0x21, 0
+	.dw 0xb140, 0xc92c,	0xb17f, 0xc92c,		0x21, 0
+	.dw 0xb1c0, 0xc92c,	0xb1ff, 0xc92c,		0x21, 0
+	.dw 0xb240, 0xc92c,	0xb27f, 0xc92c,		0x21, 0
+	.dw 0xb2c0, 0xc92c,	0xb2ff, 0xc92c,		0x21, 0
+	.dw 0xb340, 0xc92c,	0xb37f, 0xc92c,		0x21, 0
+	.dw 0xb3c0, 0xc92c,	0xb3ff, 0xc92c,		0x21, 0
+	.dw 0xb440, 0xc92c,	0xb47f, 0xc92c,		0x21, 0
+	.dw 0xb4c0, 0xc92c,	0xb4ff, 0xc92c,		0x21, 0
+	.dw 0xb540, 0xc92c,	0xb57f, 0xc92c,		0x21, 0
+	.dw 0xb5c0, 0xc92c,	0xb5ff, 0xc92c,		0x21, 0
+	.dw 0xb640, 0xc92c,	0xb67f, 0xc92c,		0x21, 0
+	.dw 0xb6c0, 0xc92c,	0xb6ff, 0xc92c,		0x21, 0
+	.dw 0xb740, 0xc92c,	0xb77f, 0xc92c,		0x21, 0
+	.dw 0xb7c0, 0xc92c,	0xb7ff, 0xc92c,		0x21, 0
+	.dw 0xb840, 0xc92c,	0xb87f, 0xc92c,		0x21, 0
+	.dw 0xb8c0, 0xc92c,	0xb8ff, 0xc92c,		0x21, 0
+	.dw 0xb940, 0xc92c,	0xb97f, 0xc92c,		0x21, 0
+	.dw 0xb9c0, 0xc92c,	0xbfff, 0xc92c,		0x21, 0
+	.dw 0xc040, 0xc92c,	0xc07f, 0xc92c,		0x21, 0
+	.dw 0xc0c0, 0xc92c,	0xc0ff, 0xc92c,		0x21, 0
+	.dw 0xc140, 0xc92c,	0xc17f, 0xc92c,		0x21, 0
+	.dw 0xc1c0, 0xc92c,	0xc1ff, 0xc92c,		0x21, 0
+	.dw 0xc240, 0xc92c,	0xc27f, 0xc92c,		0x21, 0
+	.dw 0xc2c0, 0xc92c,	0xc2ff, 0xc92c,		0x21, 0
+	.dw 0xc340, 0xc92c,	0xc37f, 0xc92c,		0x21, 0
+	.dw 0xc3c0, 0xc92c,	0xc3ff, 0xc92c,		0x21, 0
+	.dw 0xc440, 0xc92c,	0xc47f, 0xc92c,		0x21, 0
+	.dw 0xc4c0, 0xc92c,	0xc4ff, 0xc92c,		0x21, 0
+	.dw 0xc540, 0xc92c,	0xc57f, 0xc92c,		0x21, 0
+	.dw 0xc5c0, 0xc92c,	0xc5ff, 0xc92c,		0x21, 0
+	.dw 0xc640, 0xc92c,	0xc67f, 0xc92c,		0x21, 0
+	.dw 0xc6c0, 0xc92c,	0xc6ff, 0xc92c,		0x21, 0
+	.dw 0xc740, 0xc92c,	0xc77f, 0xc92c,		0x21, 0
+	.dw 0xc7c0, 0xc92c,	0xc7ff, 0xc92c,		0x21, 0
+	.dw 0xc840, 0xc92c,	0xc87f, 0xc92c,		0x21, 0
+	.dw 0xc8c0, 0xc92c,	0xc8ff, 0xc92c,		0x21, 0
+	.dw 0xc940, 0xc92c,	0xc97f, 0xc92c,		0x21, 0
+	.dw 0xc9c0, 0xc92c,	0xc9ff, 0xc92c,		0x21, 0
+	.dw 0xca40, 0xc92c,	0xca7f, 0xc92c,		0x21, 0
+	.dw 0xcac0, 0xc92c,	0xcaff, 0xc92c,		0x21, 0
+	.dw 0xcb40, 0xc92c,	0xcb7f, 0xc92c,		0x21, 0
+	.dw 0xcbc0, 0xc92c,	0xcbff, 0xc92c,		0x21, 0
+	.dw 0xcc40, 0xc92c,	0xcc7f, 0xc92c,		0x21, 0
+	.dw 0xccc0, 0xc92c,	0xccff, 0xc92c,		0x21, 0
+	.dw 0xcd40, 0xc92c,	0xcd7f, 0xc92c,		0x21, 0
+	.dw 0xcdc0, 0xc92c,	0xcdff, 0xc92c,		0x21, 0
+	.dw 0xce40, 0xc92c,	0xce7f, 0xc92c,		0x21, 0
+	.dw 0xcec0, 0xc92c,	0xceff, 0xc92c,		0x21, 0
+	.dw 0xcf40, 0xc92c,	0xcf7f, 0xc92c,		0x21, 0
+	.dw 0xcfc0, 0xc92c,	0xcfff, 0xc92c,		0x21, 0
+	.dw 0xd040, 0xc92c,	0xd07f, 0xc92c,		0x21, 0
+	.dw 0xd0c0, 0xc92c,	0xd0ff, 0xc92c,		0x21, 0
+	.dw 0xd140, 0xc92c,	0xd17f, 0xc92c,		0x21, 0
+	.dw 0xd1c0, 0xc92c,	0xd1ff, 0xc92c,		0x21, 0
+	.dw 0xd240, 0xc92c,	0xd27f, 0xc92c,		0x21, 0
+	.dw 0xd2c0, 0xc92c,	0xd2ff, 0xc92c,		0x21, 0
+	.dw 0xd340, 0xc92c,	0xd37f, 0xc92c,		0x21, 0
+	.dw 0xd3c0, 0xc92c,	0xd3ff, 0xc92c,		0x21, 0
+	.dw 0xd440, 0xc92c,	0xd47f, 0xc92c,		0x21, 0
+	.dw 0xd4c0, 0xc92c,	0xd4ff, 0xc92c,		0x21, 0
+	.dw 0xd540, 0xc92c,	0xd57f, 0xc92c,		0x21, 0
+	.dw 0xd5c0, 0xc92c,	0xd5ff, 0xc92c,		0x21, 0
+	.dw 0xd640, 0xc92c,	0xd67f, 0xc92c,		0x21, 0
+	.dw 0xd6c0, 0xc92c,	0xd6ff, 0xc92c,		0x21, 0
+	.dw 0xd740, 0xc92c,	0xd77f, 0xc92c,		0x21, 0
+	.dw 0xd7c0, 0xc92c,	0xd7ff, 0xc92c,		0x21, 0
+	.dw 0xd840, 0xc92c,	0xd87f, 0xc92c,		0x21, 0
+	.dw 0xd8c0, 0xc92c,	0xd8ff, 0xc92c,		0x21, 0
+	.dw 0xd940, 0xc92c,	0xd97f, 0xc92c,		0x21, 0
+	.dw 0xd9c0, 0xc92c,	0xdfff, 0xc92c,		0x21, 0
+	.dw 0xe040, 0xc92c,	0xe07f, 0xc92c,		0x21, 0
+	.dw 0xe0c0, 0xc92c,	0xe0ff, 0xc92c,		0x21, 0
+	.dw 0xe140, 0xc92c,	0xe17f, 0xc92c,		0x21, 0
+	.dw 0xe1c0, 0xc92c,	0xe1ff, 0xc92c,		0x21, 0
+	.dw 0xe240, 0xc92c,	0xe27f, 0xc92c,		0x21, 0
+	.dw 0xe2c0, 0xc92c,	0xe2ff, 0xc92c,		0x21, 0
+	.dw 0xe340, 0xc92c,	0xe37f, 0xc92c,		0x21, 0
+	.dw 0xe3c0, 0xc92c,	0xe3ff, 0xc92c,		0x21, 0
+	.dw 0xe440, 0xc92c,	0xe47f, 0xc92c,		0x21, 0
+	.dw 0xe4c0, 0xc92c,	0xe4ff, 0xc92c,		0x21, 0
+	.dw 0xe540, 0xc92c,	0xe57f, 0xc92c,		0x21, 0
+	.dw 0xe5c0, 0xc92c,	0xe5ff, 0xc92c,		0x21, 0
+	.dw 0xe640, 0xc92c,	0xe67f, 0xc92c,		0x21, 0
+	.dw 0xe6c0, 0xc92c,	0xe6ff, 0xc92c,		0x21, 0
+	.dw 0xe740, 0xc92c,	0xe77f, 0xc92c,		0x21, 0
+	.dw 0xe7c0, 0xc92c,	0xe7ff, 0xc92c,		0x21, 0
+	.dw 0xe840, 0xc92c,	0xe87f, 0xc92c,		0x21, 0
+	.dw 0xe8c0, 0xc92c,	0xe8ff, 0xc92c,		0x21, 0
+	.dw 0xe940, 0xc92c,	0xe97f, 0xc92c,		0x21, 0
+	.dw 0xe9c0, 0xc92c,	0xe9ff, 0xc92c,		0x21, 0
+	.dw 0xea40, 0xc92c,	0xea7f, 0xc92c,		0x21, 0
+	.dw 0xeac0, 0xc92c,	0xeaff, 0xc92c,		0x21, 0
+	.dw 0xeb40, 0xc92c,	0xeb7f, 0xc92c,		0x21, 0
+	.dw 0xebc0, 0xc92c,	0xebff, 0xc92c,		0x21, 0
+	.dw 0xec40, 0xc92c,	0xec7f, 0xc92c,		0x21, 0
+	.dw 0xecc0, 0xc92c,	0xecff, 0xc92c,		0x21, 0
+	.dw 0xed40, 0xc92c,	0xed7f, 0xc92c,		0x21, 0
+	.dw 0xedc0, 0xc92c,	0xedff, 0xc92c,		0x21, 0
+	.dw 0xee40, 0xc92c,	0xee7f, 0xc92c,		0x21, 0
+	.dw 0xeec0, 0xc92c,	0xeeff, 0xc92c,		0x21, 0
+	.dw 0xef40, 0xc92c,	0xef7f, 0xc92c,		0x21, 0
+	.dw 0xefc0, 0xc92c,	0xefff, 0xc92c,		0x21, 0
+	.dw 0xf040, 0xc92c,	0xf07f, 0xc92c,		0x21, 0
+	.dw 0xf0c0, 0xc92c,	0xf0ff, 0xc92c,		0x21, 0
+	.dw 0xf140, 0xc92c,	0xf17f, 0xc92c,		0x21, 0
+	.dw 0xf1c0, 0xc92c,	0xf1ff, 0xc92c,		0x21, 0
+	.dw 0xf240, 0xc92c,	0xf27f, 0xc92c,		0x21, 0
+	.dw 0xf2c0, 0xc92c,	0xf2ff, 0xc92c,		0x21, 0
+	.dw 0xf340, 0xc92c,	0xf37f, 0xc92c,		0x21, 0
+	.dw 0xf3c0, 0xc92c,	0xf3ff, 0xc92c,		0x21, 0
+	.dw 0xf440, 0xc92c,	0xf47f, 0xc92c,		0x21, 0
+	.dw 0xf4c0, 0xc92c,	0xf4ff, 0xc92c,		0x21, 0
+	.dw 0xf540, 0xc92c,	0xf57f, 0xc92c,		0x21, 0
+	.dw 0xf5c0, 0xc92c,	0xf5ff, 0xc92c,		0x21, 0
+	.dw 0xf640, 0xc92c,	0xf67f, 0xc92c,		0x21, 0
+	.dw 0xf6c0, 0xc92c,	0xf6ff, 0xc92c,		0x21, 0
+	.dw 0xf740, 0xc92c,	0xf77f, 0xc92c,		0x21, 0
+	.dw 0xf7c0, 0xc92c,	0xf7ff, 0xc92c,		0x21, 0
+	.dw 0xf840, 0xc92c,	0xf87f, 0xc92c,		0x21, 0
+	.dw 0xf8c0, 0xc92c,	0xf8ff, 0xc92c,		0x21, 0
+	.dw 0xf940, 0xc92c,	0xf97f, 0xc92c,		0x21, 0
+	.dw 0xf9c0, 0xc92c,	0xffff, 0xc92c,		0x21, 0
+	.dw 0x0040, 0xc92d,	0x007f, 0xc92d,		0x21, 0
+	.dw 0x00c0, 0xc92d,	0x00ff, 0xc92d,		0x21, 0
+	.dw 0x0140, 0xc92d,	0x017f, 0xc92d,		0x21, 0
+	.dw 0x01c0, 0xc92d,	0x01ff, 0xc92d,		0x21, 0
+	.dw 0x0240, 0xc92d,	0x027f, 0xc92d,		0x21, 0
+	.dw 0x02c0, 0xc92d,	0x02ff, 0xc92d,		0x21, 0
+	.dw 0x0340, 0xc92d,	0x037f, 0xc92d,		0x21, 0
+	.dw 0x03c0, 0xc92d,	0x03ff, 0xc92d,		0x21, 0
+	.dw 0x0440, 0xc92d,	0x047f, 0xc92d,		0x21, 0
+	.dw 0x04c0, 0xc92d,	0x04ff, 0xc92d,		0x21, 0
+	.dw 0x0540, 0xc92d,	0x057f, 0xc92d,		0x21, 0
+	.dw 0x05c0, 0xc92d,	0x05ff, 0xc92d,		0x21, 0
+	.dw 0x0640, 0xc92d,	0x067f, 0xc92d,		0x21, 0
+	.dw 0x06c0, 0xc92d,	0x06ff, 0xc92d,		0x21, 0
+	.dw 0x0740, 0xc92d,	0x077f, 0xc92d,		0x21, 0
+	.dw 0x07c0, 0xc92d,	0x07ff, 0xc92d,		0x21, 0
+	.dw 0x0840, 0xc92d,	0x087f, 0xc92d,		0x21, 0
+	.dw 0x08c0, 0xc92d,	0x08ff, 0xc92d,		0x21, 0
+	.dw 0x0940, 0xc92d,	0x097f, 0xc92d,		0x21, 0
+	.dw 0x09c0, 0xc92d,	0x09ff, 0xc92d,		0x21, 0
+	.dw 0x0a40, 0xc92d,	0x0a7f, 0xc92d,		0x21, 0
+	.dw 0x0ac0, 0xc92d,	0x0aff, 0xc92d,		0x21, 0
+	.dw 0x0b40, 0xc92d,	0x0b7f, 0xc92d,		0x21, 0
+	.dw 0x0bc0, 0xc92d,	0x0bff, 0xc92d,		0x21, 0
+	.dw 0x0c40, 0xc92d,	0x0c7f, 0xc92d,		0x21, 0
+	.dw 0x0cc0, 0xc92d,	0x0cff, 0xc92d,		0x21, 0
+	.dw 0x0d40, 0xc92d,	0x0d7f, 0xc92d,		0x21, 0
+	.dw 0x0dc0, 0xc92d,	0x0dff, 0xc92d,		0x21, 0
+	.dw 0x0e40, 0xc92d,	0x0e7f, 0xc92d,		0x21, 0
+	.dw 0x0ec0, 0xc92d,	0x0eff, 0xc92d,		0x21, 0
+	.dw 0x0f40, 0xc92d,	0x0f7f, 0xc92d,		0x21, 0
+	.dw 0x0fc0, 0xc92d,	0x0fff, 0xc92d,		0x21, 0
+	.dw 0x1040, 0xc92d,	0x107f, 0xc92d,		0x21, 0
+	.dw 0x10c0, 0xc92d,	0x10ff, 0xc92d,		0x21, 0
+	.dw 0x1140, 0xc92d,	0x117f, 0xc92d,		0x21, 0
+	.dw 0x11c0, 0xc92d,	0x11ff, 0xc92d,		0x21, 0
+	.dw 0x1240, 0xc92d,	0x127f, 0xc92d,		0x21, 0
+	.dw 0x12c0, 0xc92d,	0x12ff, 0xc92d,		0x21, 0
+	.dw 0x1340, 0xc92d,	0x137f, 0xc92d,		0x21, 0
+	.dw 0x13c0, 0xc92d,	0x13ff, 0xc92d,		0x21, 0
+	.dw 0x1440, 0xc92d,	0x147f, 0xc92d,		0x21, 0
+	.dw 0x14c0, 0xc92d,	0x14ff, 0xc92d,		0x21, 0
+	.dw 0x1540, 0xc92d,	0x157f, 0xc92d,		0x21, 0
+	.dw 0x15c0, 0xc92d,	0x15ff, 0xc92d,		0x21, 0
+	.dw 0x1640, 0xc92d,	0x167f, 0xc92d,		0x21, 0
+	.dw 0x16c0, 0xc92d,	0x16ff, 0xc92d,		0x21, 0
+	.dw 0x1740, 0xc92d,	0x177f, 0xc92d,		0x21, 0
+	.dw 0x17c0, 0xc92d,	0x17ff, 0xc92d,		0x21, 0
+	.dw 0x1840, 0xc92d,	0x187f, 0xc92d,		0x21, 0
+	.dw 0x18c0, 0xc92d,	0x18ff, 0xc92d,		0x21, 0
+	.dw 0x1940, 0xc92d,	0x197f, 0xc92d,		0x21, 0
+	.dw 0x19c0, 0xc92d,	0x1fff, 0xc92d,		0x21, 0
+	.dw 0x2040, 0xc92d,	0x207f, 0xc92d,		0x21, 0
+	.dw 0x20c0, 0xc92d,	0x20ff, 0xc92d,		0x21, 0
+	.dw 0x2140, 0xc92d,	0x217f, 0xc92d,		0x21, 0
+	.dw 0x21c0, 0xc92d,	0x21ff, 0xc92d,		0x21, 0
+	.dw 0x2240, 0xc92d,	0x227f, 0xc92d,		0x21, 0
+	.dw 0x22c0, 0xc92d,	0x22ff, 0xc92d,		0x21, 0
+	.dw 0x2340, 0xc92d,	0x237f, 0xc92d,		0x21, 0
+	.dw 0x23c0, 0xc92d,	0x23ff, 0xc92d,		0x21, 0
+	.dw 0x2440, 0xc92d,	0x247f, 0xc92d,		0x21, 0
+	.dw 0x24c0, 0xc92d,	0x24ff, 0xc92d,		0x21, 0
+	.dw 0x2540, 0xc92d,	0x257f, 0xc92d,		0x21, 0
+	.dw 0x25c0, 0xc92d,	0x25ff, 0xc92d,		0x21, 0
+	.dw 0x2640, 0xc92d,	0x267f, 0xc92d,		0x21, 0
+	.dw 0x26c0, 0xc92d,	0x26ff, 0xc92d,		0x21, 0
+	.dw 0x2740, 0xc92d,	0x277f, 0xc92d,		0x21, 0
+	.dw 0x27c0, 0xc92d,	0x27ff, 0xc92d,		0x21, 0
+	.dw 0x2840, 0xc92d,	0x287f, 0xc92d,		0x21, 0
+	.dw 0x28c0, 0xc92d,	0x28ff, 0xc92d,		0x21, 0
+	.dw 0x2940, 0xc92d,	0x297f, 0xc92d,		0x21, 0
+	.dw 0x29c0, 0xc92d,	0x29ff, 0xc92d,		0x21, 0
+	.dw 0x2a40, 0xc92d,	0x2a7f, 0xc92d,		0x21, 0
+	.dw 0x2ac0, 0xc92d,	0x2aff, 0xc92d,		0x21, 0
+	.dw 0x2b40, 0xc92d,	0x2b7f, 0xc92d,		0x21, 0
+	.dw 0x2bc0, 0xc92d,	0x2bff, 0xc92d,		0x21, 0
+	.dw 0x2c40, 0xc92d,	0x2c7f, 0xc92d,		0x21, 0
+	.dw 0x2cc0, 0xc92d,	0x2cff, 0xc92d,		0x21, 0
+	.dw 0x2d40, 0xc92d,	0x2d7f, 0xc92d,		0x21, 0
+	.dw 0x2dc0, 0xc92d,	0x2dff, 0xc92d,		0x21, 0
+	.dw 0x2e40, 0xc92d,	0x2e7f, 0xc92d,		0x21, 0
+	.dw 0x2ec0, 0xc92d,	0x2eff, 0xc92d,		0x21, 0
+	.dw 0x2f40, 0xc92d,	0x2f7f, 0xc92d,		0x21, 0
+	.dw 0x2fc0, 0xc92d,	0x2fff, 0xc92d,		0x21, 0
+	.dw 0x3040, 0xc92d,	0x307f, 0xc92d,		0x21, 0
+	.dw 0x30c0, 0xc92d,	0x30ff, 0xc92d,		0x21, 0
+	.dw 0x3140, 0xc92d,	0x317f, 0xc92d,		0x21, 0
+	.dw 0x31c0, 0xc92d,	0x31ff, 0xc92d,		0x21, 0
+	.dw 0x3240, 0xc92d,	0x327f, 0xc92d,		0x21, 0
+	.dw 0x32c0, 0xc92d,	0x32ff, 0xc92d,		0x21, 0
+	.dw 0x3340, 0xc92d,	0x337f, 0xc92d,		0x21, 0
+	.dw 0x33c0, 0xc92d,	0x33ff, 0xc92d,		0x21, 0
+	.dw 0x3440, 0xc92d,	0x347f, 0xc92d,		0x21, 0
+	.dw 0x34c0, 0xc92d,	0x34ff, 0xc92d,		0x21, 0
+	.dw 0x3540, 0xc92d,	0x357f, 0xc92d,		0x21, 0
+	.dw 0x35c0, 0xc92d,	0x35ff, 0xc92d,		0x21, 0
+	.dw 0x3640, 0xc92d,	0x367f, 0xc92d,		0x21, 0
+	.dw 0x36c0, 0xc92d,	0x36ff, 0xc92d,		0x21, 0
+	.dw 0x3740, 0xc92d,	0x377f, 0xc92d,		0x21, 0
+	.dw 0x37c0, 0xc92d,	0x37ff, 0xc92d,		0x21, 0
+	.dw 0x3840, 0xc92d,	0x387f, 0xc92d,		0x21, 0
+	.dw 0x38c0, 0xc92d,	0x38ff, 0xc92d,		0x21, 0
+	.dw 0x3940, 0xc92d,	0x397f, 0xc92d,		0x21, 0
+	.dw 0x39c0, 0xc92d,	0x3fff, 0xc92d,		0x21, 0
+	.dw 0x4040, 0xc92d,	0x407f, 0xc92d,		0x21, 0
+	.dw 0x40c0, 0xc92d,	0x40ff, 0xc92d,		0x21, 0
+	.dw 0x4140, 0xc92d,	0x417f, 0xc92d,		0x21, 0
+	.dw 0x41c0, 0xc92d,	0x41ff, 0xc92d,		0x21, 0
+	.dw 0x4240, 0xc92d,	0x427f, 0xc92d,		0x21, 0
+	.dw 0x42c0, 0xc92d,	0x42ff, 0xc92d,		0x21, 0
+	.dw 0x4340, 0xc92d,	0x437f, 0xc92d,		0x21, 0
+	.dw 0x43c0, 0xc92d,	0x43ff, 0xc92d,		0x21, 0
+	.dw 0x4440, 0xc92d,	0x447f, 0xc92d,		0x21, 0
+	.dw 0x44c0, 0xc92d,	0x44ff, 0xc92d,		0x21, 0
+	.dw 0x4540, 0xc92d,	0x457f, 0xc92d,		0x21, 0
+	.dw 0x45c0, 0xc92d,	0x45ff, 0xc92d,		0x21, 0
+	.dw 0x4640, 0xc92d,	0x467f, 0xc92d,		0x21, 0
+	.dw 0x46c0, 0xc92d,	0x46ff, 0xc92d,		0x21, 0
+	.dw 0x4740, 0xc92d,	0x477f, 0xc92d,		0x21, 0
+	.dw 0x47c0, 0xc92d,	0x47ff, 0xc92d,		0x21, 0
+	.dw 0x4840, 0xc92d,	0x487f, 0xc92d,		0x21, 0
+	.dw 0x48c0, 0xc92d,	0x48ff, 0xc92d,		0x21, 0
+	.dw 0x4940, 0xc92d,	0x497f, 0xc92d,		0x21, 0
+	.dw 0x49c0, 0xc92d,	0x49ff, 0xc92d,		0x21, 0
+	.dw 0x4a40, 0xc92d,	0x4a7f, 0xc92d,		0x21, 0
+	.dw 0x4ac0, 0xc92d,	0x4aff, 0xc92d,		0x21, 0
+	.dw 0x4b40, 0xc92d,	0x4b7f, 0xc92d,		0x21, 0
+	.dw 0x4bc0, 0xc92d,	0x4bff, 0xc92d,		0x21, 0
+	.dw 0x4c40, 0xc92d,	0x4c7f, 0xc92d,		0x21, 0
+	.dw 0x4cc0, 0xc92d,	0x4cff, 0xc92d,		0x21, 0
+	.dw 0x4d40, 0xc92d,	0x4d7f, 0xc92d,		0x21, 0
+	.dw 0x4dc0, 0xc92d,	0x4dff, 0xc92d,		0x21, 0
+	.dw 0x4e40, 0xc92d,	0x4e7f, 0xc92d,		0x21, 0
+	.dw 0x4ec0, 0xc92d,	0x4eff, 0xc92d,		0x21, 0
+	.dw 0x4f40, 0xc92d,	0x4f7f, 0xc92d,		0x21, 0
+	.dw 0x4fc0, 0xc92d,	0x4fff, 0xc92d,		0x21, 0
+	.dw 0x5040, 0xc92d,	0x507f, 0xc92d,		0x21, 0
+	.dw 0x50c0, 0xc92d,	0x50ff, 0xc92d,		0x21, 0
+	.dw 0x5140, 0xc92d,	0x517f, 0xc92d,		0x21, 0
+	.dw 0x51c0, 0xc92d,	0x51ff, 0xc92d,		0x21, 0
+	.dw 0x5240, 0xc92d,	0x527f, 0xc92d,		0x21, 0
+	.dw 0x52c0, 0xc92d,	0x52ff, 0xc92d,		0x21, 0
+	.dw 0x5340, 0xc92d,	0x537f, 0xc92d,		0x21, 0
+	.dw 0x53c0, 0xc92d,	0x53ff, 0xc92d,		0x21, 0
+	.dw 0x5440, 0xc92d,	0x547f, 0xc92d,		0x21, 0
+	.dw 0x54c0, 0xc92d,	0x54ff, 0xc92d,		0x21, 0
+	.dw 0x5540, 0xc92d,	0x557f, 0xc92d,		0x21, 0
+	.dw 0x55c0, 0xc92d,	0x55ff, 0xc92d,		0x21, 0
+	.dw 0x5640, 0xc92d,	0x567f, 0xc92d,		0x21, 0
+	.dw 0x56c0, 0xc92d,	0x56ff, 0xc92d,		0x21, 0
+	.dw 0x5740, 0xc92d,	0x577f, 0xc92d,		0x21, 0
+	.dw 0x57c0, 0xc92d,	0x57ff, 0xc92d,		0x21, 0
+	.dw 0x5840, 0xc92d,	0x587f, 0xc92d,		0x21, 0
+	.dw 0x58c0, 0xc92d,	0x58ff, 0xc92d,		0x21, 0
+	.dw 0x5940, 0xc92d,	0x597f, 0xc92d,		0x21, 0
+	.dw 0x59c0, 0xc92d,	0x5fff, 0xc92d,		0x21, 0
+	.dw 0x6040, 0xc92d,	0x607f, 0xc92d,		0x21, 0
+	.dw 0x60c0, 0xc92d,	0x60ff, 0xc92d,		0x21, 0
+	.dw 0x6140, 0xc92d,	0x617f, 0xc92d,		0x21, 0
+	.dw 0x61c0, 0xc92d,	0x61ff, 0xc92d,		0x21, 0
+	.dw 0x6240, 0xc92d,	0x627f, 0xc92d,		0x21, 0
+	.dw 0x62c0, 0xc92d,	0x62ff, 0xc92d,		0x21, 0
+	.dw 0x6340, 0xc92d,	0x637f, 0xc92d,		0x21, 0
+	.dw 0x63c0, 0xc92d,	0x63ff, 0xc92d,		0x21, 0
+	.dw 0x6440, 0xc92d,	0x647f, 0xc92d,		0x21, 0
+	.dw 0x64c0, 0xc92d,	0x64ff, 0xc92d,		0x21, 0
+	.dw 0x6540, 0xc92d,	0x657f, 0xc92d,		0x21, 0
+	.dw 0x65c0, 0xc92d,	0x65ff, 0xc92d,		0x21, 0
+	.dw 0x6640, 0xc92d,	0x667f, 0xc92d,		0x21, 0
+	.dw 0x66c0, 0xc92d,	0x66ff, 0xc92d,		0x21, 0
+	.dw 0x6740, 0xc92d,	0x677f, 0xc92d,		0x21, 0
+	.dw 0x67c0, 0xc92d,	0x67ff, 0xc92d,		0x21, 0
+	.dw 0x6840, 0xc92d,	0x687f, 0xc92d,		0x21, 0
+	.dw 0x68c0, 0xc92d,	0x68ff, 0xc92d,		0x21, 0
+	.dw 0x6940, 0xc92d,	0x697f, 0xc92d,		0x21, 0
+	.dw 0x69c0, 0xc92d,	0x69ff, 0xc92d,		0x21, 0
+	.dw 0x6a40, 0xc92d,	0x6a7f, 0xc92d,		0x21, 0
+	.dw 0x6ac0, 0xc92d,	0x6aff, 0xc92d,		0x21, 0
+	.dw 0x6b40, 0xc92d,	0x6b7f, 0xc92d,		0x21, 0
+	.dw 0x6bc0, 0xc92d,	0x6bff, 0xc92d,		0x21, 0
+	.dw 0x6c40, 0xc92d,	0x6c7f, 0xc92d,		0x21, 0
+	.dw 0x6cc0, 0xc92d,	0x6cff, 0xc92d,		0x21, 0
+	.dw 0x6d40, 0xc92d,	0x6d7f, 0xc92d,		0x21, 0
+	.dw 0x6dc0, 0xc92d,	0x6dff, 0xc92d,		0x21, 0
+	.dw 0x6e40, 0xc92d,	0x6e7f, 0xc92d,		0x21, 0
+	.dw 0x6ec0, 0xc92d,	0x6eff, 0xc92d,		0x21, 0
+	.dw 0x6f40, 0xc92d,	0x6f7f, 0xc92d,		0x21, 0
+	.dw 0x6fc0, 0xc92d,	0x6fff, 0xc92d,		0x21, 0
+	.dw 0x7040, 0xc92d,	0x707f, 0xc92d,		0x21, 0
+	.dw 0x70c0, 0xc92d,	0x70ff, 0xc92d,		0x21, 0
+	.dw 0x7140, 0xc92d,	0x717f, 0xc92d,		0x21, 0
+	.dw 0x71c0, 0xc92d,	0x71ff, 0xc92d,		0x21, 0
+	.dw 0x7240, 0xc92d,	0x727f, 0xc92d,		0x21, 0
+	.dw 0x72c0, 0xc92d,	0x72ff, 0xc92d,		0x21, 0
+	.dw 0x7340, 0xc92d,	0x737f, 0xc92d,		0x21, 0
+	.dw 0x73c0, 0xc92d,	0x73ff, 0xc92d,		0x21, 0
+	.dw 0x7440, 0xc92d,	0x747f, 0xc92d,		0x21, 0
+	.dw 0x74c0, 0xc92d,	0x74ff, 0xc92d,		0x21, 0
+	.dw 0x7540, 0xc92d,	0x757f, 0xc92d,		0x21, 0
+	.dw 0x75c0, 0xc92d,	0x75ff, 0xc92d,		0x21, 0
+	.dw 0x7640, 0xc92d,	0x767f, 0xc92d,		0x21, 0
+	.dw 0x76c0, 0xc92d,	0x76ff, 0xc92d,		0x21, 0
+	.dw 0x7740, 0xc92d,	0x777f, 0xc92d,		0x21, 0
+	.dw 0x77c0, 0xc92d,	0x77ff, 0xc92d,		0x21, 0
+	.dw 0x7840, 0xc92d,	0x787f, 0xc92d,		0x21, 0
+	.dw 0x78c0, 0xc92d,	0x78ff, 0xc92d,		0x21, 0
+	.dw 0x7940, 0xc92d,	0x797f, 0xc92d,		0x21, 0
+	.dw 0x79c0, 0xc92d,	0x7fff, 0xc92d,		0x21, 0
+	.dw 0x8040, 0xc92d,	0x807f, 0xc92d,		0x21, 0
+	.dw 0x80c0, 0xc92d,	0x80ff, 0xc92d,		0x21, 0
+	.dw 0x8140, 0xc92d,	0x817f, 0xc92d,		0x21, 0
+	.dw 0x81c0, 0xc92d,	0x81ff, 0xc92d,		0x21, 0
+	.dw 0x8240, 0xc92d,	0x827f, 0xc92d,		0x21, 0
+	.dw 0x82c0, 0xc92d,	0x82ff, 0xc92d,		0x21, 0
+	.dw 0x8340, 0xc92d,	0x837f, 0xc92d,		0x21, 0
+	.dw 0x83c0, 0xc92d,	0x83ff, 0xc92d,		0x21, 0
+	.dw 0x8440, 0xc92d,	0x847f, 0xc92d,		0x21, 0
+	.dw 0x84c0, 0xc92d,	0x84ff, 0xc92d,		0x21, 0
+	.dw 0x8540, 0xc92d,	0x857f, 0xc92d,		0x21, 0
+	.dw 0x85c0, 0xc92d,	0x85ff, 0xc92d,		0x21, 0
+	.dw 0x8640, 0xc92d,	0x867f, 0xc92d,		0x21, 0
+	.dw 0x86c0, 0xc92d,	0x86ff, 0xc92d,		0x21, 0
+	.dw 0x8740, 0xc92d,	0x877f, 0xc92d,		0x21, 0
+	.dw 0x87c0, 0xc92d,	0x87ff, 0xc92d,		0x21, 0
+	.dw 0x8840, 0xc92d,	0x887f, 0xc92d,		0x21, 0
+	.dw 0x88c0, 0xc92d,	0x88ff, 0xc92d,		0x21, 0
+	.dw 0x8940, 0xc92d,	0x897f, 0xc92d,		0x21, 0
+	.dw 0x89c0, 0xc92d,	0x89ff, 0xc92d,		0x21, 0
+	.dw 0x8a40, 0xc92d,	0x8a7f, 0xc92d,		0x21, 0
+	.dw 0x8ac0, 0xc92d,	0x8aff, 0xc92d,		0x21, 0
+	.dw 0x8b40, 0xc92d,	0x8b7f, 0xc92d,		0x21, 0
+	.dw 0x8bc0, 0xc92d,	0x8bff, 0xc92d,		0x21, 0
+	.dw 0x8c40, 0xc92d,	0x8c7f, 0xc92d,		0x21, 0
+	.dw 0x8cc0, 0xc92d,	0x8cff, 0xc92d,		0x21, 0
+	.dw 0x8d40, 0xc92d,	0x8d7f, 0xc92d,		0x21, 0
+	.dw 0x8dc0, 0xc92d,	0x8dff, 0xc92d,		0x21, 0
+	.dw 0x8e40, 0xc92d,	0x8e7f, 0xc92d,		0x21, 0
+	.dw 0x8ec0, 0xc92d,	0x8eff, 0xc92d,		0x21, 0
+	.dw 0x8f40, 0xc92d,	0x8f7f, 0xc92d,		0x21, 0
+	.dw 0x8fc0, 0xc92d,	0x8fff, 0xc92d,		0x21, 0
+	.dw 0x9040, 0xc92d,	0x907f, 0xc92d,		0x21, 0
+	.dw 0x90c0, 0xc92d,	0x90ff, 0xc92d,		0x21, 0
+	.dw 0x9140, 0xc92d,	0x917f, 0xc92d,		0x21, 0
+	.dw 0x91c0, 0xc92d,	0x91ff, 0xc92d,		0x21, 0
+	.dw 0x9240, 0xc92d,	0x927f, 0xc92d,		0x21, 0
+	.dw 0x92c0, 0xc92d,	0x92ff, 0xc92d,		0x21, 0
+	.dw 0x9340, 0xc92d,	0x937f, 0xc92d,		0x21, 0
+	.dw 0x93c0, 0xc92d,	0x93ff, 0xc92d,		0x21, 0
+	.dw 0x9440, 0xc92d,	0x947f, 0xc92d,		0x21, 0
+	.dw 0x94c0, 0xc92d,	0x94ff, 0xc92d,		0x21, 0
+	.dw 0x9540, 0xc92d,	0x957f, 0xc92d,		0x21, 0
+	.dw 0x95c0, 0xc92d,	0x95ff, 0xc92d,		0x21, 0
+	.dw 0x9640, 0xc92d,	0x967f, 0xc92d,		0x21, 0
+	.dw 0x96c0, 0xc92d,	0x96ff, 0xc92d,		0x21, 0
+	.dw 0x9740, 0xc92d,	0x977f, 0xc92d,		0x21, 0
+	.dw 0x97c0, 0xc92d,	0x97ff, 0xc92d,		0x21, 0
+	.dw 0x9840, 0xc92d,	0x987f, 0xc92d,		0x21, 0
+	.dw 0x98c0, 0xc92d,	0x98ff, 0xc92d,		0x21, 0
+	.dw 0x9940, 0xc92d,	0x997f, 0xc92d,		0x21, 0
+	.dw 0x99c0, 0xc92d,	0x9fff, 0xc92d,		0x21, 0
+	.dw 0xa040, 0xc92d,	0xa07f, 0xc92d,		0x21, 0
+	.dw 0xa0c0, 0xc92d,	0xa0ff, 0xc92d,		0x21, 0
+	.dw 0xa140, 0xc92d,	0xa17f, 0xc92d,		0x21, 0
+	.dw 0xa1c0, 0xc92d,	0xa1ff, 0xc92d,		0x21, 0
+	.dw 0xa240, 0xc92d,	0xa27f, 0xc92d,		0x21, 0
+	.dw 0xa2c0, 0xc92d,	0xa2ff, 0xc92d,		0x21, 0
+	.dw 0xa340, 0xc92d,	0xa37f, 0xc92d,		0x21, 0
+	.dw 0xa3c0, 0xc92d,	0xa3ff, 0xc92d,		0x21, 0
+	.dw 0xa440, 0xc92d,	0xa47f, 0xc92d,		0x21, 0
+	.dw 0xa4c0, 0xc92d,	0xa4ff, 0xc92d,		0x21, 0
+	.dw 0xa540, 0xc92d,	0xa57f, 0xc92d,		0x21, 0
+	.dw 0xa5c0, 0xc92d,	0xa5ff, 0xc92d,		0x21, 0
+	.dw 0xa640, 0xc92d,	0xa67f, 0xc92d,		0x21, 0
+	.dw 0xa6c0, 0xc92d,	0xa6ff, 0xc92d,		0x21, 0
+	.dw 0xa740, 0xc92d,	0xa77f, 0xc92d,		0x21, 0
+	.dw 0xa7c0, 0xc92d,	0xa7ff, 0xc92d,		0x21, 0
+	.dw 0xa840, 0xc92d,	0xa87f, 0xc92d,		0x21, 0
+	.dw 0xa8c0, 0xc92d,	0xa8ff, 0xc92d,		0x21, 0
+	.dw 0xa940, 0xc92d,	0xa97f, 0xc92d,		0x21, 0
+	.dw 0xa9c0, 0xc92d,	0xa9ff, 0xc92d,		0x21, 0
+	.dw 0xaa40, 0xc92d,	0xaa7f, 0xc92d,		0x21, 0
+	.dw 0xaac0, 0xc92d,	0xaaff, 0xc92d,		0x21, 0
+	.dw 0xab40, 0xc92d,	0xab7f, 0xc92d,		0x21, 0
+	.dw 0xabc0, 0xc92d,	0xabff, 0xc92d,		0x21, 0
+	.dw 0xac40, 0xc92d,	0xac7f, 0xc92d,		0x21, 0
+	.dw 0xacc0, 0xc92d,	0xacff, 0xc92d,		0x21, 0
+	.dw 0xad40, 0xc92d,	0xad7f, 0xc92d,		0x21, 0
+	.dw 0xadc0, 0xc92d,	0xadff, 0xc92d,		0x21, 0
+	.dw 0xae40, 0xc92d,	0xae7f, 0xc92d,		0x21, 0
+	.dw 0xaec0, 0xc92d,	0xaeff, 0xc92d,		0x21, 0
+	.dw 0xaf40, 0xc92d,	0xaf7f, 0xc92d,		0x21, 0
+	.dw 0xafc0, 0xc92d,	0xafff, 0xc92d,		0x21, 0
+	.dw 0xb040, 0xc92d,	0xb07f, 0xc92d,		0x21, 0
+	.dw 0xb0c0, 0xc92d,	0xb0ff, 0xc92d,		0x21, 0
+	.dw 0xb140, 0xc92d,	0xb17f, 0xc92d,		0x21, 0
+	.dw 0xb1c0, 0xc92d,	0xb1ff, 0xc92d,		0x21, 0
+	.dw 0xb240, 0xc92d,	0xb27f, 0xc92d,		0x21, 0
+	.dw 0xb2c0, 0xc92d,	0xb2ff, 0xc92d,		0x21, 0
+	.dw 0xb340, 0xc92d,	0xb37f, 0xc92d,		0x21, 0
+	.dw 0xb3c0, 0xc92d,	0xb3ff, 0xc92d,		0x21, 0
+	.dw 0xb440, 0xc92d,	0xb47f, 0xc92d,		0x21, 0
+	.dw 0xb4c0, 0xc92d,	0xb4ff, 0xc92d,		0x21, 0
+	.dw 0xb540, 0xc92d,	0xb57f, 0xc92d,		0x21, 0
+	.dw 0xb5c0, 0xc92d,	0xb5ff, 0xc92d,		0x21, 0
+	.dw 0xb640, 0xc92d,	0xb67f, 0xc92d,		0x21, 0
+	.dw 0xb6c0, 0xc92d,	0xb6ff, 0xc92d,		0x21, 0
+	.dw 0xb740, 0xc92d,	0xb77f, 0xc92d,		0x21, 0
+	.dw 0xb7c0, 0xc92d,	0xb7ff, 0xc92d,		0x21, 0
+	.dw 0xb840, 0xc92d,	0xb87f, 0xc92d,		0x21, 0
+	.dw 0xb8c0, 0xc92d,	0xb8ff, 0xc92d,		0x21, 0
+	.dw 0xb940, 0xc92d,	0xb97f, 0xc92d,		0x21, 0
+	.dw 0xb9c0, 0xc92d,	0xbfff, 0xc92d,		0x21, 0
+	.dw 0xc040, 0xc92d,	0xc07f, 0xc92d,		0x21, 0
+	.dw 0xc0c0, 0xc92d,	0xc0ff, 0xc92d,		0x21, 0
+	.dw 0xc140, 0xc92d,	0xc17f, 0xc92d,		0x21, 0
+	.dw 0xc1c0, 0xc92d,	0xc1ff, 0xc92d,		0x21, 0
+	.dw 0xc240, 0xc92d,	0xc27f, 0xc92d,		0x21, 0
+	.dw 0xc2c0, 0xc92d,	0xc2ff, 0xc92d,		0x21, 0
+	.dw 0xc340, 0xc92d,	0xc37f, 0xc92d,		0x21, 0
+	.dw 0xc3c0, 0xc92d,	0xc3ff, 0xc92d,		0x21, 0
+	.dw 0xc440, 0xc92d,	0xc47f, 0xc92d,		0x21, 0
+	.dw 0xc4c0, 0xc92d,	0xc4ff, 0xc92d,		0x21, 0
+	.dw 0xc540, 0xc92d,	0xc57f, 0xc92d,		0x21, 0
+	.dw 0xc5c0, 0xc92d,	0xc5ff, 0xc92d,		0x21, 0
+	.dw 0xc640, 0xc92d,	0xc67f, 0xc92d,		0x21, 0
+	.dw 0xc6c0, 0xc92d,	0xc6ff, 0xc92d,		0x21, 0
+	.dw 0xc740, 0xc92d,	0xc77f, 0xc92d,		0x21, 0
+	.dw 0xc7c0, 0xc92d,	0xc7ff, 0xc92d,		0x21, 0
+	.dw 0xc840, 0xc92d,	0xc87f, 0xc92d,		0x21, 0
+	.dw 0xc8c0, 0xc92d,	0xc8ff, 0xc92d,		0x21, 0
+	.dw 0xc940, 0xc92d,	0xc97f, 0xc92d,		0x21, 0
+	.dw 0xc9c0, 0xc92d,	0xc9ff, 0xc92d,		0x21, 0
+	.dw 0xca40, 0xc92d,	0xca7f, 0xc92d,		0x21, 0
+	.dw 0xcac0, 0xc92d,	0xcaff, 0xc92d,		0x21, 0
+	.dw 0xcb40, 0xc92d,	0xcb7f, 0xc92d,		0x21, 0
+	.dw 0xcbc0, 0xc92d,	0xcbff, 0xc92d,		0x21, 0
+	.dw 0xcc40, 0xc92d,	0xcc7f, 0xc92d,		0x21, 0
+	.dw 0xccc0, 0xc92d,	0xccff, 0xc92d,		0x21, 0
+	.dw 0xcd40, 0xc92d,	0xcd7f, 0xc92d,		0x21, 0
+	.dw 0xcdc0, 0xc92d,	0xcdff, 0xc92d,		0x21, 0
+	.dw 0xce40, 0xc92d,	0xce7f, 0xc92d,		0x21, 0
+	.dw 0xcec0, 0xc92d,	0xceff, 0xc92d,		0x21, 0
+	.dw 0xcf40, 0xc92d,	0xcf7f, 0xc92d,		0x21, 0
+	.dw 0xcfc0, 0xc92d,	0xcfff, 0xc92d,		0x21, 0
+	.dw 0xd040, 0xc92d,	0xd07f, 0xc92d,		0x21, 0
+	.dw 0xd0c0, 0xc92d,	0xd0ff, 0xc92d,		0x21, 0
+	.dw 0xd140, 0xc92d,	0xd17f, 0xc92d,		0x21, 0
+	.dw 0xd1c0, 0xc92d,	0xd1ff, 0xc92d,		0x21, 0
+	.dw 0xd240, 0xc92d,	0xd27f, 0xc92d,		0x21, 0
+	.dw 0xd2c0, 0xc92d,	0xd2ff, 0xc92d,		0x21, 0
+	.dw 0xd340, 0xc92d,	0xd37f, 0xc92d,		0x21, 0
+	.dw 0xd3c0, 0xc92d,	0xd3ff, 0xc92d,		0x21, 0
+	.dw 0xd440, 0xc92d,	0xd47f, 0xc92d,		0x21, 0
+	.dw 0xd4c0, 0xc92d,	0xd4ff, 0xc92d,		0x21, 0
+	.dw 0xd540, 0xc92d,	0xd57f, 0xc92d,		0x21, 0
+	.dw 0xd5c0, 0xc92d,	0xd5ff, 0xc92d,		0x21, 0
+	.dw 0xd640, 0xc92d,	0xd67f, 0xc92d,		0x21, 0
+	.dw 0xd6c0, 0xc92d,	0xd6ff, 0xc92d,		0x21, 0
+	.dw 0xd740, 0xc92d,	0xd77f, 0xc92d,		0x21, 0
+	.dw 0xd7c0, 0xc92d,	0xd7ff, 0xc92d,		0x21, 0
+	.dw 0xd840, 0xc92d,	0xd87f, 0xc92d,		0x21, 0
+	.dw 0xd8c0, 0xc92d,	0xd8ff, 0xc92d,		0x21, 0
+	.dw 0xd940, 0xc92d,	0xd97f, 0xc92d,		0x21, 0
+	.dw 0xd9c0, 0xc92d,	0xdfff, 0xc92d,		0x21, 0
+	.dw 0xe040, 0xc92d,	0xe07f, 0xc92d,		0x21, 0
+	.dw 0xe0c0, 0xc92d,	0xe0ff, 0xc92d,		0x21, 0
+	.dw 0xe140, 0xc92d,	0xe17f, 0xc92d,		0x21, 0
+	.dw 0xe1c0, 0xc92d,	0xe1ff, 0xc92d,		0x21, 0
+	.dw 0xe240, 0xc92d,	0xe27f, 0xc92d,		0x21, 0
+	.dw 0xe2c0, 0xc92d,	0xe2ff, 0xc92d,		0x21, 0
+	.dw 0xe340, 0xc92d,	0xe37f, 0xc92d,		0x21, 0
+	.dw 0xe3c0, 0xc92d,	0xe3ff, 0xc92d,		0x21, 0
+	.dw 0xe440, 0xc92d,	0xe47f, 0xc92d,		0x21, 0
+	.dw 0xe4c0, 0xc92d,	0xe4ff, 0xc92d,		0x21, 0
+	.dw 0xe540, 0xc92d,	0xe57f, 0xc92d,		0x21, 0
+	.dw 0xe5c0, 0xc92d,	0xe5ff, 0xc92d,		0x21, 0
+	.dw 0xe640, 0xc92d,	0xe67f, 0xc92d,		0x21, 0
+	.dw 0xe6c0, 0xc92d,	0xe6ff, 0xc92d,		0x21, 0
+	.dw 0xe740, 0xc92d,	0xe77f, 0xc92d,		0x21, 0
+	.dw 0xe7c0, 0xc92d,	0xe7ff, 0xc92d,		0x21, 0
+	.dw 0xe840, 0xc92d,	0xe87f, 0xc92d,		0x21, 0
+	.dw 0xe8c0, 0xc92d,	0xe8ff, 0xc92d,		0x21, 0
+	.dw 0xe940, 0xc92d,	0xe97f, 0xc92d,		0x21, 0
+	.dw 0xe9c0, 0xc92d,	0xe9ff, 0xc92d,		0x21, 0
+	.dw 0xea40, 0xc92d,	0xea7f, 0xc92d,		0x21, 0
+	.dw 0xeac0, 0xc92d,	0xeaff, 0xc92d,		0x21, 0
+	.dw 0xeb40, 0xc92d,	0xeb7f, 0xc92d,		0x21, 0
+	.dw 0xebc0, 0xc92d,	0xebff, 0xc92d,		0x21, 0
+	.dw 0xec40, 0xc92d,	0xec7f, 0xc92d,		0x21, 0
+	.dw 0xecc0, 0xc92d,	0xecff, 0xc92d,		0x21, 0
+	.dw 0xed40, 0xc92d,	0xed7f, 0xc92d,		0x21, 0
+	.dw 0xedc0, 0xc92d,	0xedff, 0xc92d,		0x21, 0
+	.dw 0xee40, 0xc92d,	0xee7f, 0xc92d,		0x21, 0
+	.dw 0xeec0, 0xc92d,	0xeeff, 0xc92d,		0x21, 0
+	.dw 0xef40, 0xc92d,	0xef7f, 0xc92d,		0x21, 0
+	.dw 0xefc0, 0xc92d,	0xefff, 0xc92d,		0x21, 0
+	.dw 0xf040, 0xc92d,	0xf07f, 0xc92d,		0x21, 0
+	.dw 0xf0c0, 0xc92d,	0xf0ff, 0xc92d,		0x21, 0
+	.dw 0xf140, 0xc92d,	0xf17f, 0xc92d,		0x21, 0
+	.dw 0xf1c0, 0xc92d,	0xf1ff, 0xc92d,		0x21, 0
+	.dw 0xf240, 0xc92d,	0xf27f, 0xc92d,		0x21, 0
+	.dw 0xf2c0, 0xc92d,	0xf2ff, 0xc92d,		0x21, 0
+	.dw 0xf340, 0xc92d,	0xf37f, 0xc92d,		0x21, 0
+	.dw 0xf3c0, 0xc92d,	0xf3ff, 0xc92d,		0x21, 0
+	.dw 0xf440, 0xc92d,	0xf47f, 0xc92d,		0x21, 0
+	.dw 0xf4c0, 0xc92d,	0xf4ff, 0xc92d,		0x21, 0
+	.dw 0xf540, 0xc92d,	0xf57f, 0xc92d,		0x21, 0
+	.dw 0xf5c0, 0xc92d,	0xf5ff, 0xc92d,		0x21, 0
+	.dw 0xf640, 0xc92d,	0xf67f, 0xc92d,		0x21, 0
+	.dw 0xf6c0, 0xc92d,	0xf6ff, 0xc92d,		0x21, 0
+	.dw 0xf740, 0xc92d,	0xf77f, 0xc92d,		0x21, 0
+	.dw 0xf7c0, 0xc92d,	0xf7ff, 0xc92d,		0x21, 0
+	.dw 0xf840, 0xc92d,	0xf87f, 0xc92d,		0x21, 0
+	.dw 0xf8c0, 0xc92d,	0xf8ff, 0xc92d,		0x21, 0
+	.dw 0xf940, 0xc92d,	0xf97f, 0xc92d,		0x21, 0
+	.dw 0xf9c0, 0xc92d,	0xffff, 0xc92d,		0x21, 0
+	.dw 0x0040, 0xc92e,	0x007f, 0xc92e,		0x21, 0
+	.dw 0x00c0, 0xc92e,	0x00ff, 0xc92e,		0x21, 0
+	.dw 0x0140, 0xc92e,	0x017f, 0xc92e,		0x21, 0
+	.dw 0x01c0, 0xc92e,	0x01ff, 0xc92e,		0x21, 0
+	.dw 0x0240, 0xc92e,	0x027f, 0xc92e,		0x21, 0
+	.dw 0x02c0, 0xc92e,	0x02ff, 0xc92e,		0x21, 0
+	.dw 0x0340, 0xc92e,	0x037f, 0xc92e,		0x21, 0
+	.dw 0x03c0, 0xc92e,	0x03ff, 0xc92e,		0x21, 0
+	.dw 0x0440, 0xc92e,	0x047f, 0xc92e,		0x21, 0
+	.dw 0x04c0, 0xc92e,	0x04ff, 0xc92e,		0x21, 0
+	.dw 0x0540, 0xc92e,	0x057f, 0xc92e,		0x21, 0
+	.dw 0x05c0, 0xc92e,	0x05ff, 0xc92e,		0x21, 0
+	.dw 0x0640, 0xc92e,	0x067f, 0xc92e,		0x21, 0
+	.dw 0x06c0, 0xc92e,	0x06ff, 0xc92e,		0x21, 0
+	.dw 0x0740, 0xc92e,	0x077f, 0xc92e,		0x21, 0
+	.dw 0x07c0, 0xc92e,	0x07ff, 0xc92e,		0x21, 0
+	.dw 0x0840, 0xc92e,	0x087f, 0xc92e,		0x21, 0
+	.dw 0x08c0, 0xc92e,	0x08ff, 0xc92e,		0x21, 0
+	.dw 0x0940, 0xc92e,	0x097f, 0xc92e,		0x21, 0
+	.dw 0x09c0, 0xc92e,	0x09ff, 0xc92e,		0x21, 0
+	.dw 0x0a40, 0xc92e,	0x0a7f, 0xc92e,		0x21, 0
+	.dw 0x0ac0, 0xc92e,	0x0aff, 0xc92e,		0x21, 0
+	.dw 0x0b40, 0xc92e,	0x0b7f, 0xc92e,		0x21, 0
+	.dw 0x0bc0, 0xc92e,	0x0bff, 0xc92e,		0x21, 0
+	.dw 0x0c40, 0xc92e,	0x0c7f, 0xc92e,		0x21, 0
+	.dw 0x0cc0, 0xc92e,	0x0cff, 0xc92e,		0x21, 0
+	.dw 0x0d40, 0xc92e,	0x0d7f, 0xc92e,		0x21, 0
+	.dw 0x0dc0, 0xc92e,	0x0dff, 0xc92e,		0x21, 0
+	.dw 0x0e40, 0xc92e,	0x0e7f, 0xc92e,		0x21, 0
+	.dw 0x0ec0, 0xc92e,	0x0eff, 0xc92e,		0x21, 0
+	.dw 0x0f40, 0xc92e,	0x0f7f, 0xc92e,		0x21, 0
+	.dw 0x0fc0, 0xc92e,	0x0fff, 0xc92e,		0x21, 0
+	.dw 0x1040, 0xc92e,	0x107f, 0xc92e,		0x21, 0
+	.dw 0x10c0, 0xc92e,	0x10ff, 0xc92e,		0x21, 0
+	.dw 0x1140, 0xc92e,	0x117f, 0xc92e,		0x21, 0
+	.dw 0x11c0, 0xc92e,	0x11ff, 0xc92e,		0x21, 0
+	.dw 0x1240, 0xc92e,	0x127f, 0xc92e,		0x21, 0
+	.dw 0x12c0, 0xc92e,	0x12ff, 0xc92e,		0x21, 0
+	.dw 0x1340, 0xc92e,	0x137f, 0xc92e,		0x21, 0
+	.dw 0x13c0, 0xc92e,	0x13ff, 0xc92e,		0x21, 0
+	.dw 0x1440, 0xc92e,	0x147f, 0xc92e,		0x21, 0
+	.dw 0x14c0, 0xc92e,	0x14ff, 0xc92e,		0x21, 0
+	.dw 0x1540, 0xc92e,	0x157f, 0xc92e,		0x21, 0
+	.dw 0x15c0, 0xc92e,	0x15ff, 0xc92e,		0x21, 0
+	.dw 0x1640, 0xc92e,	0x167f, 0xc92e,		0x21, 0
+	.dw 0x16c0, 0xc92e,	0x16ff, 0xc92e,		0x21, 0
+	.dw 0x1740, 0xc92e,	0x177f, 0xc92e,		0x21, 0
+	.dw 0x17c0, 0xc92e,	0x17ff, 0xc92e,		0x21, 0
+	.dw 0x1840, 0xc92e,	0x187f, 0xc92e,		0x21, 0
+	.dw 0x18c0, 0xc92e,	0x18ff, 0xc92e,		0x21, 0
+	.dw 0x1940, 0xc92e,	0x197f, 0xc92e,		0x21, 0
+	.dw 0x19c0, 0xc92e,	0x1fff, 0xc92e,		0x21, 0
+	.dw 0x2040, 0xc92e,	0x207f, 0xc92e,		0x21, 0
+	.dw 0x20c0, 0xc92e,	0x20ff, 0xc92e,		0x21, 0
+	.dw 0x2140, 0xc92e,	0x217f, 0xc92e,		0x21, 0
+	.dw 0x21c0, 0xc92e,	0x21ff, 0xc92e,		0x21, 0
+	.dw 0x2240, 0xc92e,	0x227f, 0xc92e,		0x21, 0
+	.dw 0x22c0, 0xc92e,	0x22ff, 0xc92e,		0x21, 0
+	.dw 0x2340, 0xc92e,	0x237f, 0xc92e,		0x21, 0
+	.dw 0x23c0, 0xc92e,	0x23ff, 0xc92e,		0x21, 0
+	.dw 0x2440, 0xc92e,	0x247f, 0xc92e,		0x21, 0
+	.dw 0x24c0, 0xc92e,	0x24ff, 0xc92e,		0x21, 0
+	.dw 0x2540, 0xc92e,	0x257f, 0xc92e,		0x21, 0
+	.dw 0x25c0, 0xc92e,	0x25ff, 0xc92e,		0x21, 0
+	.dw 0x2640, 0xc92e,	0x267f, 0xc92e,		0x21, 0
+	.dw 0x26c0, 0xc92e,	0x26ff, 0xc92e,		0x21, 0
+	.dw 0x2740, 0xc92e,	0x277f, 0xc92e,		0x21, 0
+	.dw 0x27c0, 0xc92e,	0x27ff, 0xc92e,		0x21, 0
+	.dw 0x2840, 0xc92e,	0x287f, 0xc92e,		0x21, 0
+	.dw 0x28c0, 0xc92e,	0x28ff, 0xc92e,		0x21, 0
+	.dw 0x2940, 0xc92e,	0x297f, 0xc92e,		0x21, 0
+	.dw 0x29c0, 0xc92e,	0x29ff, 0xc92e,		0x21, 0
+	.dw 0x2a40, 0xc92e,	0x2a7f, 0xc92e,		0x21, 0
+	.dw 0x2ac0, 0xc92e,	0x2aff, 0xc92e,		0x21, 0
+	.dw 0x2b40, 0xc92e,	0x2b7f, 0xc92e,		0x21, 0
+	.dw 0x2bc0, 0xc92e,	0x2bff, 0xc92e,		0x21, 0
+	.dw 0x2c40, 0xc92e,	0x2c7f, 0xc92e,		0x21, 0
+	.dw 0x2cc0, 0xc92e,	0x2cff, 0xc92e,		0x21, 0
+	.dw 0x2d40, 0xc92e,	0x2d7f, 0xc92e,		0x21, 0
+	.dw 0x2dc0, 0xc92e,	0x2dff, 0xc92e,		0x21, 0
+	.dw 0x2e40, 0xc92e,	0x2e7f, 0xc92e,		0x21, 0
+	.dw 0x2ec0, 0xc92e,	0x2eff, 0xc92e,		0x21, 0
+	.dw 0x2f40, 0xc92e,	0x2f7f, 0xc92e,		0x21, 0
+	.dw 0x2fc0, 0xc92e,	0x2fff, 0xc92e,		0x21, 0
+	.dw 0x3040, 0xc92e,	0x307f, 0xc92e,		0x21, 0
+	.dw 0x30c0, 0xc92e,	0x30ff, 0xc92e,		0x21, 0
+	.dw 0x3140, 0xc92e,	0x317f, 0xc92e,		0x21, 0
+	.dw 0x31c0, 0xc92e,	0x31ff, 0xc92e,		0x21, 0
+	.dw 0x3240, 0xc92e,	0x327f, 0xc92e,		0x21, 0
+	.dw 0x32c0, 0xc92e,	0x32ff, 0xc92e,		0x21, 0
+	.dw 0x3340, 0xc92e,	0x337f, 0xc92e,		0x21, 0
+	.dw 0x33c0, 0xc92e,	0x33ff, 0xc92e,		0x21, 0
+	.dw 0x3440, 0xc92e,	0x347f, 0xc92e,		0x21, 0
+	.dw 0x34c0, 0xc92e,	0x34ff, 0xc92e,		0x21, 0
+	.dw 0x3540, 0xc92e,	0x357f, 0xc92e,		0x21, 0
+	.dw 0x35c0, 0xc92e,	0x35ff, 0xc92e,		0x21, 0
+	.dw 0x3640, 0xc92e,	0x367f, 0xc92e,		0x21, 0
+	.dw 0x36c0, 0xc92e,	0x36ff, 0xc92e,		0x21, 0
+	.dw 0x3740, 0xc92e,	0x377f, 0xc92e,		0x21, 0
+	.dw 0x37c0, 0xc92e,	0x37ff, 0xc92e,		0x21, 0
+	.dw 0x3840, 0xc92e,	0x387f, 0xc92e,		0x21, 0
+	.dw 0x38c0, 0xc92e,	0x38ff, 0xc92e,		0x21, 0
+	.dw 0x3940, 0xc92e,	0x397f, 0xc92e,		0x21, 0
+	.dw 0x39c0, 0xc92e,	0x3fff, 0xc92e,		0x21, 0
+	.dw 0x4040, 0xc92e,	0x407f, 0xc92e,		0x21, 0
+	.dw 0x40c0, 0xc92e,	0x40ff, 0xc92e,		0x21, 0
+	.dw 0x4140, 0xc92e,	0x417f, 0xc92e,		0x21, 0
+	.dw 0x41c0, 0xc92e,	0x41ff, 0xc92e,		0x21, 0
+	.dw 0x4240, 0xc92e,	0x427f, 0xc92e,		0x21, 0
+	.dw 0x42c0, 0xc92e,	0x42ff, 0xc92e,		0x21, 0
+	.dw 0x4340, 0xc92e,	0x437f, 0xc92e,		0x21, 0
+	.dw 0x43c0, 0xc92e,	0x43ff, 0xc92e,		0x21, 0
+	.dw 0x4440, 0xc92e,	0x447f, 0xc92e,		0x21, 0
+	.dw 0x44c0, 0xc92e,	0x44ff, 0xc92e,		0x21, 0
+	.dw 0x4540, 0xc92e,	0x457f, 0xc92e,		0x21, 0
+	.dw 0x45c0, 0xc92e,	0x45ff, 0xc92e,		0x21, 0
+	.dw 0x4640, 0xc92e,	0x467f, 0xc92e,		0x21, 0
+	.dw 0x46c0, 0xc92e,	0x46ff, 0xc92e,		0x21, 0
+	.dw 0x4740, 0xc92e,	0x477f, 0xc92e,		0x21, 0
+	.dw 0x47c0, 0xc92e,	0x47ff, 0xc92e,		0x21, 0
+	.dw 0x4840, 0xc92e,	0x487f, 0xc92e,		0x21, 0
+	.dw 0x48c0, 0xc92e,	0x48ff, 0xc92e,		0x21, 0
+	.dw 0x4940, 0xc92e,	0x497f, 0xc92e,		0x21, 0
+	.dw 0x49c0, 0xc92e,	0x49ff, 0xc92e,		0x21, 0
+	.dw 0x4a40, 0xc92e,	0x4a7f, 0xc92e,		0x21, 0
+	.dw 0x4ac0, 0xc92e,	0x4aff, 0xc92e,		0x21, 0
+	.dw 0x4b40, 0xc92e,	0x4b7f, 0xc92e,		0x21, 0
+	.dw 0x4bc0, 0xc92e,	0x4bff, 0xc92e,		0x21, 0
+	.dw 0x4c40, 0xc92e,	0x4c7f, 0xc92e,		0x21, 0
+	.dw 0x4cc0, 0xc92e,	0x4cff, 0xc92e,		0x21, 0
+	.dw 0x4d40, 0xc92e,	0x4d7f, 0xc92e,		0x21, 0
+	.dw 0x4dc0, 0xc92e,	0x4dff, 0xc92e,		0x21, 0
+	.dw 0x4e40, 0xc92e,	0x4e7f, 0xc92e,		0x21, 0
+	.dw 0x4ec0, 0xc92e,	0x4eff, 0xc92e,		0x21, 0
+	.dw 0x4f40, 0xc92e,	0x4f7f, 0xc92e,		0x21, 0
+	.dw 0x4fc0, 0xc92e,	0x4fff, 0xc92e,		0x21, 0
+	.dw 0x5040, 0xc92e,	0x507f, 0xc92e,		0x21, 0
+	.dw 0x50c0, 0xc92e,	0x50ff, 0xc92e,		0x21, 0
+	.dw 0x5140, 0xc92e,	0x517f, 0xc92e,		0x21, 0
+	.dw 0x51c0, 0xc92e,	0x51ff, 0xc92e,		0x21, 0
+	.dw 0x5240, 0xc92e,	0x527f, 0xc92e,		0x21, 0
+	.dw 0x52c0, 0xc92e,	0x52ff, 0xc92e,		0x21, 0
+	.dw 0x5340, 0xc92e,	0x537f, 0xc92e,		0x21, 0
+	.dw 0x53c0, 0xc92e,	0x53ff, 0xc92e,		0x21, 0
+	.dw 0x5440, 0xc92e,	0x547f, 0xc92e,		0x21, 0
+	.dw 0x54c0, 0xc92e,	0x54ff, 0xc92e,		0x21, 0
+	.dw 0x5540, 0xc92e,	0x557f, 0xc92e,		0x21, 0
+	.dw 0x55c0, 0xc92e,	0x55ff, 0xc92e,		0x21, 0
+	.dw 0x5640, 0xc92e,	0x567f, 0xc92e,		0x21, 0
+	.dw 0x56c0, 0xc92e,	0x56ff, 0xc92e,		0x21, 0
+	.dw 0x5740, 0xc92e,	0x577f, 0xc92e,		0x21, 0
+	.dw 0x57c0, 0xc92e,	0x57ff, 0xc92e,		0x21, 0
+	.dw 0x5840, 0xc92e,	0x587f, 0xc92e,		0x21, 0
+	.dw 0x58c0, 0xc92e,	0x58ff, 0xc92e,		0x21, 0
+	.dw 0x5940, 0xc92e,	0x597f, 0xc92e,		0x21, 0
+	.dw 0x59c0, 0xc92e,	0x5fff, 0xc92e,		0x21, 0
+	.dw 0x6040, 0xc92e,	0x607f, 0xc92e,		0x21, 0
+	.dw 0x60c0, 0xc92e,	0x60ff, 0xc92e,		0x21, 0
+	.dw 0x6140, 0xc92e,	0x617f, 0xc92e,		0x21, 0
+	.dw 0x61c0, 0xc92e,	0x61ff, 0xc92e,		0x21, 0
+	.dw 0x6240, 0xc92e,	0x627f, 0xc92e,		0x21, 0
+	.dw 0x62c0, 0xc92e,	0x62ff, 0xc92e,		0x21, 0
+	.dw 0x6340, 0xc92e,	0x637f, 0xc92e,		0x21, 0
+	.dw 0x63c0, 0xc92e,	0x63ff, 0xc92e,		0x21, 0
+	.dw 0x6440, 0xc92e,	0x647f, 0xc92e,		0x21, 0
+	.dw 0x64c0, 0xc92e,	0x64ff, 0xc92e,		0x21, 0
+	.dw 0x6540, 0xc92e,	0x657f, 0xc92e,		0x21, 0
+	.dw 0x65c0, 0xc92e,	0x65ff, 0xc92e,		0x21, 0
+	.dw 0x6640, 0xc92e,	0x667f, 0xc92e,		0x21, 0
+	.dw 0x66c0, 0xc92e,	0x66ff, 0xc92e,		0x21, 0
+	.dw 0x6740, 0xc92e,	0x677f, 0xc92e,		0x21, 0
+	.dw 0x67c0, 0xc92e,	0x67ff, 0xc92e,		0x21, 0
+	.dw 0x6840, 0xc92e,	0x687f, 0xc92e,		0x21, 0
+	.dw 0x68c0, 0xc92e,	0x68ff, 0xc92e,		0x21, 0
+	.dw 0x6940, 0xc92e,	0x697f, 0xc92e,		0x21, 0
+	.dw 0x69c0, 0xc92e,	0x69ff, 0xc92e,		0x21, 0
+	.dw 0x6a40, 0xc92e,	0x6a7f, 0xc92e,		0x21, 0
+	.dw 0x6ac0, 0xc92e,	0x6aff, 0xc92e,		0x21, 0
+	.dw 0x6b40, 0xc92e,	0x6b7f, 0xc92e,		0x21, 0
+	.dw 0x6bc0, 0xc92e,	0x6bff, 0xc92e,		0x21, 0
+	.dw 0x6c40, 0xc92e,	0x6c7f, 0xc92e,		0x21, 0
+	.dw 0x6cc0, 0xc92e,	0x6cff, 0xc92e,		0x21, 0
+	.dw 0x6d40, 0xc92e,	0x6d7f, 0xc92e,		0x21, 0
+	.dw 0x6dc0, 0xc92e,	0x6dff, 0xc92e,		0x21, 0
+	.dw 0x6e40, 0xc92e,	0x6e7f, 0xc92e,		0x21, 0
+	.dw 0x6ec0, 0xc92e,	0x6eff, 0xc92e,		0x21, 0
+	.dw 0x6f40, 0xc92e,	0x6f7f, 0xc92e,		0x21, 0
+	.dw 0x6fc0, 0xc92e,	0x6fff, 0xc92e,		0x21, 0
+	.dw 0x7040, 0xc92e,	0x707f, 0xc92e,		0x21, 0
+	.dw 0x70c0, 0xc92e,	0x70ff, 0xc92e,		0x21, 0
+	.dw 0x7140, 0xc92e,	0x717f, 0xc92e,		0x21, 0
+	.dw 0x71c0, 0xc92e,	0x71ff, 0xc92e,		0x21, 0
+	.dw 0x7240, 0xc92e,	0x727f, 0xc92e,		0x21, 0
+	.dw 0x72c0, 0xc92e,	0x72ff, 0xc92e,		0x21, 0
+	.dw 0x7340, 0xc92e,	0x737f, 0xc92e,		0x21, 0
+	.dw 0x73c0, 0xc92e,	0x73ff, 0xc92e,		0x21, 0
+	.dw 0x7440, 0xc92e,	0x747f, 0xc92e,		0x21, 0
+	.dw 0x74c0, 0xc92e,	0x74ff, 0xc92e,		0x21, 0
+	.dw 0x7540, 0xc92e,	0x757f, 0xc92e,		0x21, 0
+	.dw 0x75c0, 0xc92e,	0x75ff, 0xc92e,		0x21, 0
+	.dw 0x7640, 0xc92e,	0x767f, 0xc92e,		0x21, 0
+	.dw 0x76c0, 0xc92e,	0x76ff, 0xc92e,		0x21, 0
+	.dw 0x7740, 0xc92e,	0x777f, 0xc92e,		0x21, 0
+	.dw 0x77c0, 0xc92e,	0x77ff, 0xc92e,		0x21, 0
+	.dw 0x7840, 0xc92e,	0x787f, 0xc92e,		0x21, 0
+	.dw 0x78c0, 0xc92e,	0x78ff, 0xc92e,		0x21, 0
+	.dw 0x7940, 0xc92e,	0x797f, 0xc92e,		0x21, 0
+	.dw 0x79c0, 0xc92e,	0x7fff, 0xc92e,		0x21, 0
+	.dw 0x8040, 0xc92e,	0x807f, 0xc92e,		0x21, 0
+	.dw 0x80c0, 0xc92e,	0x80ff, 0xc92e,		0x21, 0
+	.dw 0x8140, 0xc92e,	0x817f, 0xc92e,		0x21, 0
+	.dw 0x81c0, 0xc92e,	0x81ff, 0xc92e,		0x21, 0
+	.dw 0x8240, 0xc92e,	0x827f, 0xc92e,		0x21, 0
+	.dw 0x82c0, 0xc92e,	0x82ff, 0xc92e,		0x21, 0
+	.dw 0x8340, 0xc92e,	0x837f, 0xc92e,		0x21, 0
+	.dw 0x83c0, 0xc92e,	0x83ff, 0xc92e,		0x21, 0
+	.dw 0x8440, 0xc92e,	0x847f, 0xc92e,		0x21, 0
+	.dw 0x84c0, 0xc92e,	0x84ff, 0xc92e,		0x21, 0
+	.dw 0x8540, 0xc92e,	0x857f, 0xc92e,		0x21, 0
+	.dw 0x85c0, 0xc92e,	0x85ff, 0xc92e,		0x21, 0
+	.dw 0x8640, 0xc92e,	0x867f, 0xc92e,		0x21, 0
+	.dw 0x86c0, 0xc92e,	0x86ff, 0xc92e,		0x21, 0
+	.dw 0x8740, 0xc92e,	0x877f, 0xc92e,		0x21, 0
+	.dw 0x87c0, 0xc92e,	0x87ff, 0xc92e,		0x21, 0
+	.dw 0x8840, 0xc92e,	0x887f, 0xc92e,		0x21, 0
+	.dw 0x88c0, 0xc92e,	0x88ff, 0xc92e,		0x21, 0
+	.dw 0x8940, 0xc92e,	0x897f, 0xc92e,		0x21, 0
+	.dw 0x89c0, 0xc92e,	0x89ff, 0xc92e,		0x21, 0
+	.dw 0x8a40, 0xc92e,	0x8a7f, 0xc92e,		0x21, 0
+	.dw 0x8ac0, 0xc92e,	0x8aff, 0xc92e,		0x21, 0
+	.dw 0x8b40, 0xc92e,	0x8b7f, 0xc92e,		0x21, 0
+	.dw 0x8bc0, 0xc92e,	0x8bff, 0xc92e,		0x21, 0
+	.dw 0x8c40, 0xc92e,	0x8c7f, 0xc92e,		0x21, 0
+	.dw 0x8cc0, 0xc92e,	0x8cff, 0xc92e,		0x21, 0
+	.dw 0x8d40, 0xc92e,	0x8d7f, 0xc92e,		0x21, 0
+	.dw 0x8dc0, 0xc92e,	0x8dff, 0xc92e,		0x21, 0
+	.dw 0x8e40, 0xc92e,	0x8e7f, 0xc92e,		0x21, 0
+	.dw 0x8ec0, 0xc92e,	0x8eff, 0xc92e,		0x21, 0
+	.dw 0x8f40, 0xc92e,	0x8f7f, 0xc92e,		0x21, 0
+	.dw 0x8fc0, 0xc92e,	0x8fff, 0xc92e,		0x21, 0
+	.dw 0x9040, 0xc92e,	0x907f, 0xc92e,		0x21, 0
+	.dw 0x90c0, 0xc92e,	0x90ff, 0xc92e,		0x21, 0
+	.dw 0x9140, 0xc92e,	0x917f, 0xc92e,		0x21, 0
+	.dw 0x91c0, 0xc92e,	0x91ff, 0xc92e,		0x21, 0
+	.dw 0x9240, 0xc92e,	0x927f, 0xc92e,		0x21, 0
+	.dw 0x92c0, 0xc92e,	0x92ff, 0xc92e,		0x21, 0
+	.dw 0x9340, 0xc92e,	0x937f, 0xc92e,		0x21, 0
+	.dw 0x93c0, 0xc92e,	0x93ff, 0xc92e,		0x21, 0
+	.dw 0x9440, 0xc92e,	0x947f, 0xc92e,		0x21, 0
+	.dw 0x94c0, 0xc92e,	0x94ff, 0xc92e,		0x21, 0
+	.dw 0x9540, 0xc92e,	0x957f, 0xc92e,		0x21, 0
+	.dw 0x95c0, 0xc92e,	0x95ff, 0xc92e,		0x21, 0
+	.dw 0x9640, 0xc92e,	0x967f, 0xc92e,		0x21, 0
+	.dw 0x96c0, 0xc92e,	0x96ff, 0xc92e,		0x21, 0
+	.dw 0x9740, 0xc92e,	0x977f, 0xc92e,		0x21, 0
+	.dw 0x97c0, 0xc92e,	0x97ff, 0xc92e,		0x21, 0
+	.dw 0x9840, 0xc92e,	0x987f, 0xc92e,		0x21, 0
+	.dw 0x98c0, 0xc92e,	0x98ff, 0xc92e,		0x21, 0
+	.dw 0x9940, 0xc92e,	0x997f, 0xc92e,		0x21, 0
+	.dw 0x99c0, 0xc92e,	0x9fff, 0xc92e,		0x21, 0
+	.dw 0xa040, 0xc92e,	0xa07f, 0xc92e,		0x21, 0
+	.dw 0xa0c0, 0xc92e,	0xa0ff, 0xc92e,		0x21, 0
+	.dw 0xa140, 0xc92e,	0xa17f, 0xc92e,		0x21, 0
+	.dw 0xa1c0, 0xc92e,	0xa1ff, 0xc92e,		0x21, 0
+	.dw 0xa240, 0xc92e,	0xa27f, 0xc92e,		0x21, 0
+	.dw 0xa2c0, 0xc92e,	0xa2ff, 0xc92e,		0x21, 0
+	.dw 0xa340, 0xc92e,	0xa37f, 0xc92e,		0x21, 0
+	.dw 0xa3c0, 0xc92e,	0xa3ff, 0xc92e,		0x21, 0
+	.dw 0xa440, 0xc92e,	0xa47f, 0xc92e,		0x21, 0
+	.dw 0xa4c0, 0xc92e,	0xa4ff, 0xc92e,		0x21, 0
+	.dw 0xa540, 0xc92e,	0xa57f, 0xc92e,		0x21, 0
+	.dw 0xa5c0, 0xc92e,	0xa5ff, 0xc92e,		0x21, 0
+	.dw 0xa640, 0xc92e,	0xa67f, 0xc92e,		0x21, 0
+	.dw 0xa6c0, 0xc92e,	0xa6ff, 0xc92e,		0x21, 0
+	.dw 0xa740, 0xc92e,	0xa77f, 0xc92e,		0x21, 0
+	.dw 0xa7c0, 0xc92e,	0xa7ff, 0xc92e,		0x21, 0
+	.dw 0xa840, 0xc92e,	0xa87f, 0xc92e,		0x21, 0
+	.dw 0xa8c0, 0xc92e,	0xa8ff, 0xc92e,		0x21, 0
+	.dw 0xa940, 0xc92e,	0xa97f, 0xc92e,		0x21, 0
+	.dw 0xa9c0, 0xc92e,	0xa9ff, 0xc92e,		0x21, 0
+	.dw 0xaa40, 0xc92e,	0xaa7f, 0xc92e,		0x21, 0
+	.dw 0xaac0, 0xc92e,	0xaaff, 0xc92e,		0x21, 0
+	.dw 0xab40, 0xc92e,	0xab7f, 0xc92e,		0x21, 0
+	.dw 0xabc0, 0xc92e,	0xabff, 0xc92e,		0x21, 0
+	.dw 0xac40, 0xc92e,	0xac7f, 0xc92e,		0x21, 0
+	.dw 0xacc0, 0xc92e,	0xacff, 0xc92e,		0x21, 0
+	.dw 0xad40, 0xc92e,	0xad7f, 0xc92e,		0x21, 0
+	.dw 0xadc0, 0xc92e,	0xadff, 0xc92e,		0x21, 0
+	.dw 0xae40, 0xc92e,	0xae7f, 0xc92e,		0x21, 0
+	.dw 0xaec0, 0xc92e,	0xaeff, 0xc92e,		0x21, 0
+	.dw 0xaf40, 0xc92e,	0xaf7f, 0xc92e,		0x21, 0
+	.dw 0xafc0, 0xc92e,	0xafff, 0xc92e,		0x21, 0
+	.dw 0xb040, 0xc92e,	0xb07f, 0xc92e,		0x21, 0
+	.dw 0xb0c0, 0xc92e,	0xb0ff, 0xc92e,		0x21, 0
+	.dw 0xb140, 0xc92e,	0xb17f, 0xc92e,		0x21, 0
+	.dw 0xb1c0, 0xc92e,	0xb1ff, 0xc92e,		0x21, 0
+	.dw 0xb240, 0xc92e,	0xb27f, 0xc92e,		0x21, 0
+	.dw 0xb2c0, 0xc92e,	0xb2ff, 0xc92e,		0x21, 0
+	.dw 0xb340, 0xc92e,	0xb37f, 0xc92e,		0x21, 0
+	.dw 0xb3c0, 0xc92e,	0xb3ff, 0xc92e,		0x21, 0
+	.dw 0xb440, 0xc92e,	0xb47f, 0xc92e,		0x21, 0
+	.dw 0xb4c0, 0xc92e,	0xb4ff, 0xc92e,		0x21, 0
+	.dw 0xb540, 0xc92e,	0xb57f, 0xc92e,		0x21, 0
+	.dw 0xb5c0, 0xc92e,	0xb5ff, 0xc92e,		0x21, 0
+	.dw 0xb640, 0xc92e,	0xb67f, 0xc92e,		0x21, 0
+	.dw 0xb6c0, 0xc92e,	0xb6ff, 0xc92e,		0x21, 0
+	.dw 0xb740, 0xc92e,	0xb77f, 0xc92e,		0x21, 0
+	.dw 0xb7c0, 0xc92e,	0xb7ff, 0xc92e,		0x21, 0
+	.dw 0xb840, 0xc92e,	0xb87f, 0xc92e,		0x21, 0
+	.dw 0xb8c0, 0xc92e,	0xb8ff, 0xc92e,		0x21, 0
+	.dw 0xb940, 0xc92e,	0xb97f, 0xc92e,		0x21, 0
+	.dw 0xb9c0, 0xc92e,	0xbfff, 0xc92e,		0x21, 0
+	.dw 0xc040, 0xc92e,	0xc07f, 0xc92e,		0x21, 0
+	.dw 0xc0c0, 0xc92e,	0xc0ff, 0xc92e,		0x21, 0
+	.dw 0xc140, 0xc92e,	0xc17f, 0xc92e,		0x21, 0
+	.dw 0xc1c0, 0xc92e,	0xc1ff, 0xc92e,		0x21, 0
+	.dw 0xc240, 0xc92e,	0xc27f, 0xc92e,		0x21, 0
+	.dw 0xc2c0, 0xc92e,	0xc2ff, 0xc92e,		0x21, 0
+	.dw 0xc340, 0xc92e,	0xc37f, 0xc92e,		0x21, 0
+	.dw 0xc3c0, 0xc92e,	0xc3ff, 0xc92e,		0x21, 0
+	.dw 0xc440, 0xc92e,	0xc47f, 0xc92e,		0x21, 0
+	.dw 0xc4c0, 0xc92e,	0xc4ff, 0xc92e,		0x21, 0
+	.dw 0xc540, 0xc92e,	0xc57f, 0xc92e,		0x21, 0
+	.dw 0xc5c0, 0xc92e,	0xc5ff, 0xc92e,		0x21, 0
+	.dw 0xc640, 0xc92e,	0xc67f, 0xc92e,		0x21, 0
+	.dw 0xc6c0, 0xc92e,	0xc6ff, 0xc92e,		0x21, 0
+	.dw 0xc740, 0xc92e,	0xc77f, 0xc92e,		0x21, 0
+	.dw 0xc7c0, 0xc92e,	0xc7ff, 0xc92e,		0x21, 0
+	.dw 0xc840, 0xc92e,	0xc87f, 0xc92e,		0x21, 0
+	.dw 0xc8c0, 0xc92e,	0xc8ff, 0xc92e,		0x21, 0
+	.dw 0xc940, 0xc92e,	0xc97f, 0xc92e,		0x21, 0
+	.dw 0xc9c0, 0xc92e,	0xc9ff, 0xc92e,		0x21, 0
+	.dw 0xca40, 0xc92e,	0xca7f, 0xc92e,		0x21, 0
+	.dw 0xcac0, 0xc92e,	0xcaff, 0xc92e,		0x21, 0
+	.dw 0xcb40, 0xc92e,	0xcb7f, 0xc92e,		0x21, 0
+	.dw 0xcbc0, 0xc92e,	0xcbff, 0xc92e,		0x21, 0
+	.dw 0xcc40, 0xc92e,	0xcc7f, 0xc92e,		0x21, 0
+	.dw 0xccc0, 0xc92e,	0xccff, 0xc92e,		0x21, 0
+	.dw 0xcd40, 0xc92e,	0xcd7f, 0xc92e,		0x21, 0
+	.dw 0xcdc0, 0xc92e,	0xcdff, 0xc92e,		0x21, 0
+	.dw 0xce40, 0xc92e,	0xce7f, 0xc92e,		0x21, 0
+	.dw 0xcec0, 0xc92e,	0xceff, 0xc92e,		0x21, 0
+	.dw 0xcf40, 0xc92e,	0xcf7f, 0xc92e,		0x21, 0
+	.dw 0xcfc0, 0xc92e,	0xcfff, 0xc92e,		0x21, 0
+	.dw 0xd040, 0xc92e,	0xd07f, 0xc92e,		0x21, 0
+	.dw 0xd0c0, 0xc92e,	0xd0ff, 0xc92e,		0x21, 0
+	.dw 0xd140, 0xc92e,	0xd17f, 0xc92e,		0x21, 0
+	.dw 0xd1c0, 0xc92e,	0xd1ff, 0xc92e,		0x21, 0
+	.dw 0xd240, 0xc92e,	0xd27f, 0xc92e,		0x21, 0
+	.dw 0xd2c0, 0xc92e,	0xd2ff, 0xc92e,		0x21, 0
+	.dw 0xd340, 0xc92e,	0xd37f, 0xc92e,		0x21, 0
+	.dw 0xd3c0, 0xc92e,	0xd3ff, 0xc92e,		0x21, 0
+	.dw 0xd440, 0xc92e,	0xd47f, 0xc92e,		0x21, 0
+	.dw 0xd4c0, 0xc92e,	0xd4ff, 0xc92e,		0x21, 0
+	.dw 0xd540, 0xc92e,	0xd57f, 0xc92e,		0x21, 0
+	.dw 0xd5c0, 0xc92e,	0xd5ff, 0xc92e,		0x21, 0
+	.dw 0xd640, 0xc92e,	0xd67f, 0xc92e,		0x21, 0
+	.dw 0xd6c0, 0xc92e,	0xd6ff, 0xc92e,		0x21, 0
+	.dw 0xd740, 0xc92e,	0xd77f, 0xc92e,		0x21, 0
+	.dw 0xd7c0, 0xc92e,	0xd7ff, 0xc92e,		0x21, 0
+	.dw 0xd840, 0xc92e,	0xd87f, 0xc92e,		0x21, 0
+	.dw 0xd8c0, 0xc92e,	0xd8ff, 0xc92e,		0x21, 0
+	.dw 0xd940, 0xc92e,	0xd97f, 0xc92e,		0x21, 0
+	.dw 0xd9c0, 0xc92e,	0xdfff, 0xc92e,		0x21, 0
+	.dw 0xe040, 0xc92e,	0xe07f, 0xc92e,		0x21, 0
+	.dw 0xe0c0, 0xc92e,	0xe0ff, 0xc92e,		0x21, 0
+	.dw 0xe140, 0xc92e,	0xe17f, 0xc92e,		0x21, 0
+	.dw 0xe1c0, 0xc92e,	0xe1ff, 0xc92e,		0x21, 0
+	.dw 0xe240, 0xc92e,	0xe27f, 0xc92e,		0x21, 0
+	.dw 0xe2c0, 0xc92e,	0xe2ff, 0xc92e,		0x21, 0
+	.dw 0xe340, 0xc92e,	0xe37f, 0xc92e,		0x21, 0
+	.dw 0xe3c0, 0xc92e,	0xe3ff, 0xc92e,		0x21, 0
+	.dw 0xe440, 0xc92e,	0xe47f, 0xc92e,		0x21, 0
+	.dw 0xe4c0, 0xc92e,	0xe4ff, 0xc92e,		0x21, 0
+	.dw 0xe540, 0xc92e,	0xe57f, 0xc92e,		0x21, 0
+	.dw 0xe5c0, 0xc92e,	0xe5ff, 0xc92e,		0x21, 0
+	.dw 0xe640, 0xc92e,	0xe67f, 0xc92e,		0x21, 0
+	.dw 0xe6c0, 0xc92e,	0xe6ff, 0xc92e,		0x21, 0
+	.dw 0xe740, 0xc92e,	0xe77f, 0xc92e,		0x21, 0
+	.dw 0xe7c0, 0xc92e,	0xe7ff, 0xc92e,		0x21, 0
+	.dw 0xe840, 0xc92e,	0xe87f, 0xc92e,		0x21, 0
+	.dw 0xe8c0, 0xc92e,	0xe8ff, 0xc92e,		0x21, 0
+	.dw 0xe940, 0xc92e,	0xe97f, 0xc92e,		0x21, 0
+	.dw 0xe9c0, 0xc92e,	0xe9ff, 0xc92e,		0x21, 0
+	.dw 0xea40, 0xc92e,	0xea7f, 0xc92e,		0x21, 0
+	.dw 0xeac0, 0xc92e,	0xeaff, 0xc92e,		0x21, 0
+	.dw 0xeb40, 0xc92e,	0xeb7f, 0xc92e,		0x21, 0
+	.dw 0xebc0, 0xc92e,	0xebff, 0xc92e,		0x21, 0
+	.dw 0xec40, 0xc92e,	0xec7f, 0xc92e,		0x21, 0
+	.dw 0xecc0, 0xc92e,	0xecff, 0xc92e,		0x21, 0
+	.dw 0xed40, 0xc92e,	0xed7f, 0xc92e,		0x21, 0
+	.dw 0xedc0, 0xc92e,	0xedff, 0xc92e,		0x21, 0
+	.dw 0xee40, 0xc92e,	0xee7f, 0xc92e,		0x21, 0
+	.dw 0xeec0, 0xc92e,	0xeeff, 0xc92e,		0x21, 0
+	.dw 0xef40, 0xc92e,	0xef7f, 0xc92e,		0x21, 0
+	.dw 0xefc0, 0xc92e,	0xefff, 0xc92e,		0x21, 0
+	.dw 0xf040, 0xc92e,	0xf07f, 0xc92e,		0x21, 0
+	.dw 0xf0c0, 0xc92e,	0xf0ff, 0xc92e,		0x21, 0
+	.dw 0xf140, 0xc92e,	0xf17f, 0xc92e,		0x21, 0
+	.dw 0xf1c0, 0xc92e,	0xf1ff, 0xc92e,		0x21, 0
+	.dw 0xf240, 0xc92e,	0xf27f, 0xc92e,		0x21, 0
+	.dw 0xf2c0, 0xc92e,	0xf2ff, 0xc92e,		0x21, 0
+	.dw 0xf340, 0xc92e,	0xf37f, 0xc92e,		0x21, 0
+	.dw 0xf3c0, 0xc92e,	0xf3ff, 0xc92e,		0x21, 0
+	.dw 0xf440, 0xc92e,	0xf47f, 0xc92e,		0x21, 0
+	.dw 0xf4c0, 0xc92e,	0xf4ff, 0xc92e,		0x21, 0
+	.dw 0xf540, 0xc92e,	0xf57f, 0xc92e,		0x21, 0
+	.dw 0xf5c0, 0xc92e,	0xf5ff, 0xc92e,		0x21, 0
+	.dw 0xf640, 0xc92e,	0xf67f, 0xc92e,		0x21, 0
+	.dw 0xf6c0, 0xc92e,	0xf6ff, 0xc92e,		0x21, 0
+	.dw 0xf740, 0xc92e,	0xf77f, 0xc92e,		0x21, 0
+	.dw 0xf7c0, 0xc92e,	0xf7ff, 0xc92e,		0x21, 0
+	.dw 0xf840, 0xc92e,	0xf87f, 0xc92e,		0x21, 0
+	.dw 0xf8c0, 0xc92e,	0xf8ff, 0xc92e,		0x21, 0
+	.dw 0xf940, 0xc92e,	0xf97f, 0xc92e,		0x21, 0
+	.dw 0xf9c0, 0xc92e,	0xffff, 0xc92e,		0x21, 0
+	.dw 0x0040, 0xc92f,	0x007f, 0xc92f,		0x21, 0
+	.dw 0x00c0, 0xc92f,	0x00ff, 0xc92f,		0x21, 0
+	.dw 0x0140, 0xc92f,	0x017f, 0xc92f,		0x21, 0
+	.dw 0x01c0, 0xc92f,	0x01ff, 0xc92f,		0x21, 0
+	.dw 0x0240, 0xc92f,	0x027f, 0xc92f,		0x21, 0
+	.dw 0x02c0, 0xc92f,	0x02ff, 0xc92f,		0x21, 0
+	.dw 0x0340, 0xc92f,	0x037f, 0xc92f,		0x21, 0
+	.dw 0x03c0, 0xc92f,	0x03ff, 0xc92f,		0x21, 0
+	.dw 0x0440, 0xc92f,	0x047f, 0xc92f,		0x21, 0
+	.dw 0x04c0, 0xc92f,	0x04ff, 0xc92f,		0x21, 0
+	.dw 0x0540, 0xc92f,	0x057f, 0xc92f,		0x21, 0
+	.dw 0x05c0, 0xc92f,	0x05ff, 0xc92f,		0x21, 0
+	.dw 0x0640, 0xc92f,	0x067f, 0xc92f,		0x21, 0
+	.dw 0x06c0, 0xc92f,	0x06ff, 0xc92f,		0x21, 0
+	.dw 0x0740, 0xc92f,	0x077f, 0xc92f,		0x21, 0
+	.dw 0x07c0, 0xc92f,	0x07ff, 0xc92f,		0x21, 0
+	.dw 0x0840, 0xc92f,	0x087f, 0xc92f,		0x21, 0
+	.dw 0x08c0, 0xc92f,	0x08ff, 0xc92f,		0x21, 0
+	.dw 0x0940, 0xc92f,	0x097f, 0xc92f,		0x21, 0
+	.dw 0x09c0, 0xc92f,	0x09ff, 0xc92f,		0x21, 0
+	.dw 0x0a40, 0xc92f,	0x0a7f, 0xc92f,		0x21, 0
+	.dw 0x0ac0, 0xc92f,	0x0aff, 0xc92f,		0x21, 0
+	.dw 0x0b40, 0xc92f,	0x0b7f, 0xc92f,		0x21, 0
+	.dw 0x0bc0, 0xc92f,	0x0bff, 0xc92f,		0x21, 0
+	.dw 0x0c40, 0xc92f,	0x0c7f, 0xc92f,		0x21, 0
+	.dw 0x0cc0, 0xc92f,	0x0cff, 0xc92f,		0x21, 0
+	.dw 0x0d40, 0xc92f,	0x0d7f, 0xc92f,		0x21, 0
+	.dw 0x0dc0, 0xc92f,	0x0dff, 0xc92f,		0x21, 0
+	.dw 0x0e40, 0xc92f,	0x0e7f, 0xc92f,		0x21, 0
+	.dw 0x0ec0, 0xc92f,	0x0eff, 0xc92f,		0x21, 0
+	.dw 0x0f40, 0xc92f,	0x0f7f, 0xc92f,		0x21, 0
+	.dw 0x0fc0, 0xc92f,	0x0fff, 0xc92f,		0x21, 0
+	.dw 0x1040, 0xc92f,	0x107f, 0xc92f,		0x21, 0
+	.dw 0x10c0, 0xc92f,	0x10ff, 0xc92f,		0x21, 0
+	.dw 0x1140, 0xc92f,	0x117f, 0xc92f,		0x21, 0
+	.dw 0x11c0, 0xc92f,	0x11ff, 0xc92f,		0x21, 0
+	.dw 0x1240, 0xc92f,	0x127f, 0xc92f,		0x21, 0
+	.dw 0x12c0, 0xc92f,	0x12ff, 0xc92f,		0x21, 0
+	.dw 0x1340, 0xc92f,	0x137f, 0xc92f,		0x21, 0
+	.dw 0x13c0, 0xc92f,	0x13ff, 0xc92f,		0x21, 0
+	.dw 0x1440, 0xc92f,	0x147f, 0xc92f,		0x21, 0
+	.dw 0x14c0, 0xc92f,	0x14ff, 0xc92f,		0x21, 0
+	.dw 0x1540, 0xc92f,	0x157f, 0xc92f,		0x21, 0
+	.dw 0x15c0, 0xc92f,	0x15ff, 0xc92f,		0x21, 0
+	.dw 0x1640, 0xc92f,	0x167f, 0xc92f,		0x21, 0
+	.dw 0x16c0, 0xc92f,	0x16ff, 0xc92f,		0x21, 0
+	.dw 0x1740, 0xc92f,	0x177f, 0xc92f,		0x21, 0
+	.dw 0x17c0, 0xc92f,	0x17ff, 0xc92f,		0x21, 0
+	.dw 0x1840, 0xc92f,	0x187f, 0xc92f,		0x21, 0
+	.dw 0x18c0, 0xc92f,	0x18ff, 0xc92f,		0x21, 0
+	.dw 0x1940, 0xc92f,	0x197f, 0xc92f,		0x21, 0
+	.dw 0x19c0, 0xc92f,	0x1fff, 0xc92f,		0x21, 0
+	.dw 0x2040, 0xc92f,	0x207f, 0xc92f,		0x21, 0
+	.dw 0x20c0, 0xc92f,	0x20ff, 0xc92f,		0x21, 0
+	.dw 0x2140, 0xc92f,	0x217f, 0xc92f,		0x21, 0
+	.dw 0x21c0, 0xc92f,	0x21ff, 0xc92f,		0x21, 0
+	.dw 0x2240, 0xc92f,	0x227f, 0xc92f,		0x21, 0
+	.dw 0x22c0, 0xc92f,	0x22ff, 0xc92f,		0x21, 0
+	.dw 0x2340, 0xc92f,	0x237f, 0xc92f,		0x21, 0
+	.dw 0x23c0, 0xc92f,	0x23ff, 0xc92f,		0x21, 0
+	.dw 0x2440, 0xc92f,	0x247f, 0xc92f,		0x21, 0
+	.dw 0x24c0, 0xc92f,	0x24ff, 0xc92f,		0x21, 0
+	.dw 0x2540, 0xc92f,	0x257f, 0xc92f,		0x21, 0
+	.dw 0x25c0, 0xc92f,	0x25ff, 0xc92f,		0x21, 0
+	.dw 0x2640, 0xc92f,	0x267f, 0xc92f,		0x21, 0
+	.dw 0x26c0, 0xc92f,	0x26ff, 0xc92f,		0x21, 0
+	.dw 0x2740, 0xc92f,	0x277f, 0xc92f,		0x21, 0
+	.dw 0x27c0, 0xc92f,	0x27ff, 0xc92f,		0x21, 0
+	.dw 0x2840, 0xc92f,	0x287f, 0xc92f,		0x21, 0
+	.dw 0x28c0, 0xc92f,	0x28ff, 0xc92f,		0x21, 0
+	.dw 0x2940, 0xc92f,	0x297f, 0xc92f,		0x21, 0
+	.dw 0x29c0, 0xc92f,	0x29ff, 0xc92f,		0x21, 0
+	.dw 0x2a40, 0xc92f,	0x2a7f, 0xc92f,		0x21, 0
+	.dw 0x2ac0, 0xc92f,	0x2aff, 0xc92f,		0x21, 0
+	.dw 0x2b40, 0xc92f,	0x2b7f, 0xc92f,		0x21, 0
+	.dw 0x2bc0, 0xc92f,	0x2bff, 0xc92f,		0x21, 0
+	.dw 0x2c40, 0xc92f,	0x2c7f, 0xc92f,		0x21, 0
+	.dw 0x2cc0, 0xc92f,	0x2cff, 0xc92f,		0x21, 0
+	.dw 0x2d40, 0xc92f,	0x2d7f, 0xc92f,		0x21, 0
+	.dw 0x2dc0, 0xc92f,	0x2dff, 0xc92f,		0x21, 0
+	.dw 0x2e40, 0xc92f,	0x2e7f, 0xc92f,		0x21, 0
+	.dw 0x2ec0, 0xc92f,	0x2eff, 0xc92f,		0x21, 0
+	.dw 0x2f40, 0xc92f,	0x2f7f, 0xc92f,		0x21, 0
+	.dw 0x2fc0, 0xc92f,	0x2fff, 0xc92f,		0x21, 0
+	.dw 0x3040, 0xc92f,	0x307f, 0xc92f,		0x21, 0
+	.dw 0x30c0, 0xc92f,	0x30ff, 0xc92f,		0x21, 0
+	.dw 0x3140, 0xc92f,	0x317f, 0xc92f,		0x21, 0
+	.dw 0x31c0, 0xc92f,	0x31ff, 0xc92f,		0x21, 0
+	.dw 0x3240, 0xc92f,	0x327f, 0xc92f,		0x21, 0
+	.dw 0x32c0, 0xc92f,	0x32ff, 0xc92f,		0x21, 0
+	.dw 0x3340, 0xc92f,	0x337f, 0xc92f,		0x21, 0
+	.dw 0x33c0, 0xc92f,	0x33ff, 0xc92f,		0x21, 0
+	.dw 0x3440, 0xc92f,	0x347f, 0xc92f,		0x21, 0
+	.dw 0x34c0, 0xc92f,	0x34ff, 0xc92f,		0x21, 0
+	.dw 0x3540, 0xc92f,	0x357f, 0xc92f,		0x21, 0
+	.dw 0x35c0, 0xc92f,	0x35ff, 0xc92f,		0x21, 0
+	.dw 0x3640, 0xc92f,	0x367f, 0xc92f,		0x21, 0
+	.dw 0x36c0, 0xc92f,	0x36ff, 0xc92f,		0x21, 0
+	.dw 0x3740, 0xc92f,	0x377f, 0xc92f,		0x21, 0
+	.dw 0x37c0, 0xc92f,	0x37ff, 0xc92f,		0x21, 0
+	.dw 0x3840, 0xc92f,	0x387f, 0xc92f,		0x21, 0
+	.dw 0x38c0, 0xc92f,	0x38ff, 0xc92f,		0x21, 0
+	.dw 0x3940, 0xc92f,	0x397f, 0xc92f,		0x21, 0
+	.dw 0x39c0, 0xc92f,	0x1fff, 0xc930,		0x21, 0
+	.dw 0x3a00, 0xc930,	0x5fff, 0xc930,		0x21, 0
+	.dw 0x7a00, 0xc930,	0x9fff, 0xc930,		0x21, 0
+	.dw 0xba00, 0xc930,	0xdfff, 0xc930,		0x21, 0
+	.dw 0xfa00, 0xc930,	0x1fff, 0xc931,		0x21, 0
+	.dw 0x3a00, 0xc931,	0x5fff, 0xc931,		0x21, 0
+	.dw 0x7a00, 0xc931,	0x9fff, 0xc931,		0x21, 0
+	.dw 0xba00, 0xc931,	0xdfff, 0xc931,		0x21, 0
+	.dw 0xfa00, 0xc931,	0x1fff, 0xc932,		0x21, 0
+	.dw 0x3a00, 0xc932,	0x5fff, 0xc932,		0x21, 0
+	.dw 0x7a00, 0xc932,	0x9fff, 0xc932,		0x21, 0
+	.dw 0xba00, 0xc932,	0xdfff, 0xc932,		0x21, 0
+	.dw 0xfa00, 0xc932,	0xffff, 0xc933,		0x21, 0
+	.dw 0x1a00, 0xc934,	0x1fff, 0xc934,		0x21, 0
+	.dw 0x3a00, 0xc934,	0x3fff, 0xc934,		0x21, 0
+	.dw 0x5a00, 0xc934,	0x5fff, 0xc934,		0x21, 0
+	.dw 0x7a00, 0xc934,	0x7fff, 0xc934,		0x21, 0
+	.dw 0x9a00, 0xc934,	0x9fff, 0xc934,		0x21, 0
+	.dw 0xba00, 0xc934,	0xbfff, 0xc934,		0x21, 0
+	.dw 0xda00, 0xc934,	0xdfff, 0xc934,		0x21, 0
+	.dw 0xfa00, 0xc934,	0xffff, 0xc934,		0x21, 0
+	.dw 0x1a00, 0xc935,	0x1fff, 0xc935,		0x21, 0
+	.dw 0x3a00, 0xc935,	0x3fff, 0xc935,		0x21, 0
+	.dw 0x5a00, 0xc935,	0x5fff, 0xc935,		0x21, 0
+	.dw 0x7a00, 0xc935,	0x7fff, 0xc935,		0x21, 0
+	.dw 0x9a00, 0xc935,	0x9fff, 0xc935,		0x21, 0
+	.dw 0xba00, 0xc935,	0xbfff, 0xc935,		0x21, 0
+	.dw 0xda00, 0xc935,	0xdfff, 0xc935,		0x21, 0
+	.dw 0xfa00, 0xc935,	0xffff, 0xc935,		0x21, 0
+	.dw 0x1a00, 0xc936,	0x1fff, 0xc936,		0x21, 0
+	.dw 0x3a00, 0xc936,	0x3fff, 0xc936,		0x21, 0
+	.dw 0x5a00, 0xc936,	0x5fff, 0xc936,		0x21, 0
+	.dw 0x7a00, 0xc936,	0x7fff, 0xc936,		0x21, 0
+	.dw 0x9a00, 0xc936,	0x9fff, 0xc936,		0x21, 0
+	.dw 0xba00, 0xc936,	0xbfff, 0xc936,		0x21, 0
+	.dw 0xda00, 0xc936,	0xdfff, 0xc936,		0x21, 0
+	.dw 0xfa00, 0xc936,	0xffff, 0xc936,		0x21, 0
+	.dw 0x1a00, 0xc937,	0x1fff, 0xc937,		0x21, 0
+	.dw 0x3a00, 0xc937,	0x1fff, 0xc938,		0x21, 0
+	.dw 0x2040, 0xc938,	0x207f, 0xc938,		0x21, 0
+	.dw 0x20c0, 0xc938,	0x20ff, 0xc938,		0x21, 0
+	.dw 0x2140, 0xc938,	0x217f, 0xc938,		0x21, 0
+	.dw 0x21c0, 0xc938,	0x21ff, 0xc938,		0x21, 0
+	.dw 0x2240, 0xc938,	0x227f, 0xc938,		0x21, 0
+	.dw 0x22c0, 0xc938,	0x22ff, 0xc938,		0x21, 0
+	.dw 0x2340, 0xc938,	0x237f, 0xc938,		0x21, 0
+	.dw 0x23c0, 0xc938,	0x23ff, 0xc938,		0x21, 0
+	.dw 0x2440, 0xc938,	0x247f, 0xc938,		0x21, 0
+	.dw 0x24c0, 0xc938,	0x24ff, 0xc938,		0x21, 0
+	.dw 0x2540, 0xc938,	0x257f, 0xc938,		0x21, 0
+	.dw 0x25c0, 0xc938,	0x25ff, 0xc938,		0x21, 0
+	.dw 0x2640, 0xc938,	0x267f, 0xc938,		0x21, 0
+	.dw 0x26c0, 0xc938,	0x26ff, 0xc938,		0x21, 0
+	.dw 0x2740, 0xc938,	0x277f, 0xc938,		0x21, 0
+	.dw 0x27c0, 0xc938,	0x27ff, 0xc938,		0x21, 0
+	.dw 0x2840, 0xc938,	0x287f, 0xc938,		0x21, 0
+	.dw 0x28c0, 0xc938,	0x28ff, 0xc938,		0x21, 0
+	.dw 0x2940, 0xc938,	0x297f, 0xc938,		0x21, 0
+	.dw 0x29c0, 0xc938,	0x29ff, 0xc938,		0x21, 0
+	.dw 0x2a40, 0xc938,	0x2a7f, 0xc938,		0x21, 0
+	.dw 0x2ac0, 0xc938,	0x2aff, 0xc938,		0x21, 0
+	.dw 0x2b40, 0xc938,	0x2b7f, 0xc938,		0x21, 0
+	.dw 0x2bc0, 0xc938,	0x2bff, 0xc938,		0x21, 0
+	.dw 0x2c40, 0xc938,	0x2c7f, 0xc938,		0x21, 0
+	.dw 0x2cc0, 0xc938,	0x2cff, 0xc938,		0x21, 0
+	.dw 0x2d40, 0xc938,	0x2d7f, 0xc938,		0x21, 0
+	.dw 0x2dc0, 0xc938,	0x2dff, 0xc938,		0x21, 0
+	.dw 0x2e40, 0xc938,	0x2e7f, 0xc938,		0x21, 0
+	.dw 0x2ec0, 0xc938,	0x2eff, 0xc938,		0x21, 0
+	.dw 0x2f40, 0xc938,	0x2f7f, 0xc938,		0x21, 0
+	.dw 0x2fc0, 0xc938,	0x2fff, 0xc938,		0x21, 0
+	.dw 0x3040, 0xc938,	0x307f, 0xc938,		0x21, 0
+	.dw 0x30c0, 0xc938,	0x30ff, 0xc938,		0x21, 0
+	.dw 0x3140, 0xc938,	0x317f, 0xc938,		0x21, 0
+	.dw 0x31c0, 0xc938,	0x31ff, 0xc938,		0x21, 0
+	.dw 0x3240, 0xc938,	0x327f, 0xc938,		0x21, 0
+	.dw 0x32c0, 0xc938,	0x32ff, 0xc938,		0x21, 0
+	.dw 0x3340, 0xc938,	0x337f, 0xc938,		0x21, 0
+	.dw 0x33c0, 0xc938,	0x33ff, 0xc938,		0x21, 0
+	.dw 0x3440, 0xc938,	0x347f, 0xc938,		0x21, 0
+	.dw 0x34c0, 0xc938,	0x34ff, 0xc938,		0x21, 0
+	.dw 0x3540, 0xc938,	0x357f, 0xc938,		0x21, 0
+	.dw 0x35c0, 0xc938,	0x35ff, 0xc938,		0x21, 0
+	.dw 0x3640, 0xc938,	0x367f, 0xc938,		0x21, 0
+	.dw 0x36c0, 0xc938,	0x36ff, 0xc938,		0x21, 0
+	.dw 0x3740, 0xc938,	0x377f, 0xc938,		0x21, 0
+	.dw 0x37c0, 0xc938,	0x37ff, 0xc938,		0x21, 0
+	.dw 0x3840, 0xc938,	0x387f, 0xc938,		0x21, 0
+	.dw 0x38c0, 0xc938,	0x38ff, 0xc938,		0x21, 0
+	.dw 0x3940, 0xc938,	0x397f, 0xc938,		0x21, 0
+	.dw 0x39c0, 0xc938,	0x5fff, 0xc938,		0x21, 0
+	.dw 0x6040, 0xc938,	0x607f, 0xc938,		0x21, 0
+	.dw 0x60c0, 0xc938,	0x60ff, 0xc938,		0x21, 0
+	.dw 0x6140, 0xc938,	0x617f, 0xc938,		0x21, 0
+	.dw 0x61c0, 0xc938,	0x61ff, 0xc938,		0x21, 0
+	.dw 0x6240, 0xc938,	0x627f, 0xc938,		0x21, 0
+	.dw 0x62c0, 0xc938,	0x62ff, 0xc938,		0x21, 0
+	.dw 0x6340, 0xc938,	0x637f, 0xc938,		0x21, 0
+	.dw 0x63c0, 0xc938,	0x63ff, 0xc938,		0x21, 0
+	.dw 0x6440, 0xc938,	0x647f, 0xc938,		0x21, 0
+	.dw 0x64c0, 0xc938,	0x64ff, 0xc938,		0x21, 0
+	.dw 0x6540, 0xc938,	0x657f, 0xc938,		0x21, 0
+	.dw 0x65c0, 0xc938,	0x65ff, 0xc938,		0x21, 0
+	.dw 0x6640, 0xc938,	0x667f, 0xc938,		0x21, 0
+	.dw 0x66c0, 0xc938,	0x66ff, 0xc938,		0x21, 0
+	.dw 0x6740, 0xc938,	0x677f, 0xc938,		0x21, 0
+	.dw 0x67c0, 0xc938,	0x67ff, 0xc938,		0x21, 0
+	.dw 0x6840, 0xc938,	0x687f, 0xc938,		0x21, 0
+	.dw 0x68c0, 0xc938,	0x68ff, 0xc938,		0x21, 0
+	.dw 0x6940, 0xc938,	0x697f, 0xc938,		0x21, 0
+	.dw 0x69c0, 0xc938,	0x69ff, 0xc938,		0x21, 0
+	.dw 0x6a40, 0xc938,	0x6a7f, 0xc938,		0x21, 0
+	.dw 0x6ac0, 0xc938,	0x6aff, 0xc938,		0x21, 0
+	.dw 0x6b40, 0xc938,	0x6b7f, 0xc938,		0x21, 0
+	.dw 0x6bc0, 0xc938,	0x6bff, 0xc938,		0x21, 0
+	.dw 0x6c40, 0xc938,	0x6c7f, 0xc938,		0x21, 0
+	.dw 0x6cc0, 0xc938,	0x6cff, 0xc938,		0x21, 0
+	.dw 0x6d40, 0xc938,	0x6d7f, 0xc938,		0x21, 0
+	.dw 0x6dc0, 0xc938,	0x6dff, 0xc938,		0x21, 0
+	.dw 0x6e40, 0xc938,	0x6e7f, 0xc938,		0x21, 0
+	.dw 0x6ec0, 0xc938,	0x6eff, 0xc938,		0x21, 0
+	.dw 0x6f40, 0xc938,	0x6f7f, 0xc938,		0x21, 0
+	.dw 0x6fc0, 0xc938,	0x6fff, 0xc938,		0x21, 0
+	.dw 0x7040, 0xc938,	0x707f, 0xc938,		0x21, 0
+	.dw 0x70c0, 0xc938,	0x70ff, 0xc938,		0x21, 0
+	.dw 0x7140, 0xc938,	0x717f, 0xc938,		0x21, 0
+	.dw 0x71c0, 0xc938,	0x71ff, 0xc938,		0x21, 0
+	.dw 0x7240, 0xc938,	0x727f, 0xc938,		0x21, 0
+	.dw 0x72c0, 0xc938,	0x72ff, 0xc938,		0x21, 0
+	.dw 0x7340, 0xc938,	0x737f, 0xc938,		0x21, 0
+	.dw 0x73c0, 0xc938,	0x73ff, 0xc938,		0x21, 0
+	.dw 0x7440, 0xc938,	0x747f, 0xc938,		0x21, 0
+	.dw 0x74c0, 0xc938,	0x74ff, 0xc938,		0x21, 0
+	.dw 0x7540, 0xc938,	0x757f, 0xc938,		0x21, 0
+	.dw 0x75c0, 0xc938,	0x75ff, 0xc938,		0x21, 0
+	.dw 0x7640, 0xc938,	0x767f, 0xc938,		0x21, 0
+	.dw 0x76c0, 0xc938,	0x76ff, 0xc938,		0x21, 0
+	.dw 0x7740, 0xc938,	0x777f, 0xc938,		0x21, 0
+	.dw 0x77c0, 0xc938,	0x77ff, 0xc938,		0x21, 0
+	.dw 0x7840, 0xc938,	0x787f, 0xc938,		0x21, 0
+	.dw 0x78c0, 0xc938,	0x78ff, 0xc938,		0x21, 0
+	.dw 0x7940, 0xc938,	0x797f, 0xc938,		0x21, 0
+	.dw 0x79c0, 0xc938,	0x9fff, 0xc938,		0x21, 0
+	.dw 0xa040, 0xc938,	0xa07f, 0xc938,		0x21, 0
+	.dw 0xa0c0, 0xc938,	0xa0ff, 0xc938,		0x21, 0
+	.dw 0xa140, 0xc938,	0xa17f, 0xc938,		0x21, 0
+	.dw 0xa1c0, 0xc938,	0xa1ff, 0xc938,		0x21, 0
+	.dw 0xa240, 0xc938,	0xa27f, 0xc938,		0x21, 0
+	.dw 0xa2c0, 0xc938,	0xa2ff, 0xc938,		0x21, 0
+	.dw 0xa340, 0xc938,	0xa37f, 0xc938,		0x21, 0
+	.dw 0xa3c0, 0xc938,	0xa3ff, 0xc938,		0x21, 0
+	.dw 0xa440, 0xc938,	0xa47f, 0xc938,		0x21, 0
+	.dw 0xa4c0, 0xc938,	0xa4ff, 0xc938,		0x21, 0
+	.dw 0xa540, 0xc938,	0xa57f, 0xc938,		0x21, 0
+	.dw 0xa5c0, 0xc938,	0xa5ff, 0xc938,		0x21, 0
+	.dw 0xa640, 0xc938,	0xa67f, 0xc938,		0x21, 0
+	.dw 0xa6c0, 0xc938,	0xa6ff, 0xc938,		0x21, 0
+	.dw 0xa740, 0xc938,	0xa77f, 0xc938,		0x21, 0
+	.dw 0xa7c0, 0xc938,	0xa7ff, 0xc938,		0x21, 0
+	.dw 0xa840, 0xc938,	0xa87f, 0xc938,		0x21, 0
+	.dw 0xa8c0, 0xc938,	0xa8ff, 0xc938,		0x21, 0
+	.dw 0xa940, 0xc938,	0xa97f, 0xc938,		0x21, 0
+	.dw 0xa9c0, 0xc938,	0xa9ff, 0xc938,		0x21, 0
+	.dw 0xaa40, 0xc938,	0xaa7f, 0xc938,		0x21, 0
+	.dw 0xaac0, 0xc938,	0xaaff, 0xc938,		0x21, 0
+	.dw 0xab40, 0xc938,	0xab7f, 0xc938,		0x21, 0
+	.dw 0xabc0, 0xc938,	0xabff, 0xc938,		0x21, 0
+	.dw 0xac40, 0xc938,	0xac7f, 0xc938,		0x21, 0
+	.dw 0xacc0, 0xc938,	0xacff, 0xc938,		0x21, 0
+	.dw 0xad40, 0xc938,	0xad7f, 0xc938,		0x21, 0
+	.dw 0xadc0, 0xc938,	0xadff, 0xc938,		0x21, 0
+	.dw 0xae40, 0xc938,	0xae7f, 0xc938,		0x21, 0
+	.dw 0xaec0, 0xc938,	0xaeff, 0xc938,		0x21, 0
+	.dw 0xaf40, 0xc938,	0xaf7f, 0xc938,		0x21, 0
+	.dw 0xafc0, 0xc938,	0xafff, 0xc938,		0x21, 0
+	.dw 0xb040, 0xc938,	0xb07f, 0xc938,		0x21, 0
+	.dw 0xb0c0, 0xc938,	0xb0ff, 0xc938,		0x21, 0
+	.dw 0xb140, 0xc938,	0xb17f, 0xc938,		0x21, 0
+	.dw 0xb1c0, 0xc938,	0xb1ff, 0xc938,		0x21, 0
+	.dw 0xb240, 0xc938,	0xb27f, 0xc938,		0x21, 0
+	.dw 0xb2c0, 0xc938,	0xb2ff, 0xc938,		0x21, 0
+	.dw 0xb340, 0xc938,	0xb37f, 0xc938,		0x21, 0
+	.dw 0xb3c0, 0xc938,	0xb3ff, 0xc938,		0x21, 0
+	.dw 0xb440, 0xc938,	0xb47f, 0xc938,		0x21, 0
+	.dw 0xb4c0, 0xc938,	0xb4ff, 0xc938,		0x21, 0
+	.dw 0xb540, 0xc938,	0xb57f, 0xc938,		0x21, 0
+	.dw 0xb5c0, 0xc938,	0xb5ff, 0xc938,		0x21, 0
+	.dw 0xb640, 0xc938,	0xb67f, 0xc938,		0x21, 0
+	.dw 0xb6c0, 0xc938,	0xb6ff, 0xc938,		0x21, 0
+	.dw 0xb740, 0xc938,	0xb77f, 0xc938,		0x21, 0
+	.dw 0xb7c0, 0xc938,	0xb7ff, 0xc938,		0x21, 0
+	.dw 0xb840, 0xc938,	0xb87f, 0xc938,		0x21, 0
+	.dw 0xb8c0, 0xc938,	0xb8ff, 0xc938,		0x21, 0
+	.dw 0xb940, 0xc938,	0xb97f, 0xc938,		0x21, 0
+	.dw 0xb9c0, 0xc938,	0xdfff, 0xc938,		0x21, 0
+	.dw 0xe040, 0xc938,	0xe07f, 0xc938,		0x21, 0
+	.dw 0xe0c0, 0xc938,	0xe0ff, 0xc938,		0x21, 0
+	.dw 0xe140, 0xc938,	0xe17f, 0xc938,		0x21, 0
+	.dw 0xe1c0, 0xc938,	0xe1ff, 0xc938,		0x21, 0
+	.dw 0xe240, 0xc938,	0xe27f, 0xc938,		0x21, 0
+	.dw 0xe2c0, 0xc938,	0xe2ff, 0xc938,		0x21, 0
+	.dw 0xe340, 0xc938,	0xe37f, 0xc938,		0x21, 0
+	.dw 0xe3c0, 0xc938,	0xe3ff, 0xc938,		0x21, 0
+	.dw 0xe440, 0xc938,	0xe47f, 0xc938,		0x21, 0
+	.dw 0xe4c0, 0xc938,	0xe4ff, 0xc938,		0x21, 0
+	.dw 0xe540, 0xc938,	0xe57f, 0xc938,		0x21, 0
+	.dw 0xe5c0, 0xc938,	0xe5ff, 0xc938,		0x21, 0
+	.dw 0xe640, 0xc938,	0xe67f, 0xc938,		0x21, 0
+	.dw 0xe6c0, 0xc938,	0xe6ff, 0xc938,		0x21, 0
+	.dw 0xe740, 0xc938,	0xe77f, 0xc938,		0x21, 0
+	.dw 0xe7c0, 0xc938,	0xe7ff, 0xc938,		0x21, 0
+	.dw 0xe840, 0xc938,	0xe87f, 0xc938,		0x21, 0
+	.dw 0xe8c0, 0xc938,	0xe8ff, 0xc938,		0x21, 0
+	.dw 0xe940, 0xc938,	0xe97f, 0xc938,		0x21, 0
+	.dw 0xe9c0, 0xc938,	0xe9ff, 0xc938,		0x21, 0
+	.dw 0xea40, 0xc938,	0xea7f, 0xc938,		0x21, 0
+	.dw 0xeac0, 0xc938,	0xeaff, 0xc938,		0x21, 0
+	.dw 0xeb40, 0xc938,	0xeb7f, 0xc938,		0x21, 0
+	.dw 0xebc0, 0xc938,	0xebff, 0xc938,		0x21, 0
+	.dw 0xec40, 0xc938,	0xec7f, 0xc938,		0x21, 0
+	.dw 0xecc0, 0xc938,	0xecff, 0xc938,		0x21, 0
+	.dw 0xed40, 0xc938,	0xed7f, 0xc938,		0x21, 0
+	.dw 0xedc0, 0xc938,	0xedff, 0xc938,		0x21, 0
+	.dw 0xee40, 0xc938,	0xee7f, 0xc938,		0x21, 0
+	.dw 0xeec0, 0xc938,	0xeeff, 0xc938,		0x21, 0
+	.dw 0xef40, 0xc938,	0xef7f, 0xc938,		0x21, 0
+	.dw 0xefc0, 0xc938,	0xefff, 0xc938,		0x21, 0
+	.dw 0xf040, 0xc938,	0xf07f, 0xc938,		0x21, 0
+	.dw 0xf0c0, 0xc938,	0xf0ff, 0xc938,		0x21, 0
+	.dw 0xf140, 0xc938,	0xf17f, 0xc938,		0x21, 0
+	.dw 0xf1c0, 0xc938,	0xf1ff, 0xc938,		0x21, 0
+	.dw 0xf240, 0xc938,	0xf27f, 0xc938,		0x21, 0
+	.dw 0xf2c0, 0xc938,	0xf2ff, 0xc938,		0x21, 0
+	.dw 0xf340, 0xc938,	0xf37f, 0xc938,		0x21, 0
+	.dw 0xf3c0, 0xc938,	0xf3ff, 0xc938,		0x21, 0
+	.dw 0xf440, 0xc938,	0xf47f, 0xc938,		0x21, 0
+	.dw 0xf4c0, 0xc938,	0xf4ff, 0xc938,		0x21, 0
+	.dw 0xf540, 0xc938,	0xf57f, 0xc938,		0x21, 0
+	.dw 0xf5c0, 0xc938,	0xf5ff, 0xc938,		0x21, 0
+	.dw 0xf640, 0xc938,	0xf67f, 0xc938,		0x21, 0
+	.dw 0xf6c0, 0xc938,	0xf6ff, 0xc938,		0x21, 0
+	.dw 0xf740, 0xc938,	0xf77f, 0xc938,		0x21, 0
+	.dw 0xf7c0, 0xc938,	0xf7ff, 0xc938,		0x21, 0
+	.dw 0xf840, 0xc938,	0xf87f, 0xc938,		0x21, 0
+	.dw 0xf8c0, 0xc938,	0xf8ff, 0xc938,		0x21, 0
+	.dw 0xf940, 0xc938,	0xf97f, 0xc938,		0x21, 0
+	.dw 0xf9c0, 0xc938,	0x1fff, 0xc939,		0x21, 0
+	.dw 0x2040, 0xc939,	0x207f, 0xc939,		0x21, 0
+	.dw 0x20c0, 0xc939,	0x20ff, 0xc939,		0x21, 0
+	.dw 0x2140, 0xc939,	0x217f, 0xc939,		0x21, 0
+	.dw 0x21c0, 0xc939,	0x21ff, 0xc939,		0x21, 0
+	.dw 0x2240, 0xc939,	0x227f, 0xc939,		0x21, 0
+	.dw 0x22c0, 0xc939,	0x22ff, 0xc939,		0x21, 0
+	.dw 0x2340, 0xc939,	0x237f, 0xc939,		0x21, 0
+	.dw 0x23c0, 0xc939,	0x23ff, 0xc939,		0x21, 0
+	.dw 0x2440, 0xc939,	0x247f, 0xc939,		0x21, 0
+	.dw 0x24c0, 0xc939,	0x24ff, 0xc939,		0x21, 0
+	.dw 0x2540, 0xc939,	0x257f, 0xc939,		0x21, 0
+	.dw 0x25c0, 0xc939,	0x25ff, 0xc939,		0x21, 0
+	.dw 0x2640, 0xc939,	0x267f, 0xc939,		0x21, 0
+	.dw 0x26c0, 0xc939,	0x26ff, 0xc939,		0x21, 0
+	.dw 0x2740, 0xc939,	0x277f, 0xc939,		0x21, 0
+	.dw 0x27c0, 0xc939,	0x27ff, 0xc939,		0x21, 0
+	.dw 0x2840, 0xc939,	0x287f, 0xc939,		0x21, 0
+	.dw 0x28c0, 0xc939,	0x28ff, 0xc939,		0x21, 0
+	.dw 0x2940, 0xc939,	0x297f, 0xc939,		0x21, 0
+	.dw 0x29c0, 0xc939,	0x29ff, 0xc939,		0x21, 0
+	.dw 0x2a40, 0xc939,	0x2a7f, 0xc939,		0x21, 0
+	.dw 0x2ac0, 0xc939,	0x2aff, 0xc939,		0x21, 0
+	.dw 0x2b40, 0xc939,	0x2b7f, 0xc939,		0x21, 0
+	.dw 0x2bc0, 0xc939,	0x2bff, 0xc939,		0x21, 0
+	.dw 0x2c40, 0xc939,	0x2c7f, 0xc939,		0x21, 0
+	.dw 0x2cc0, 0xc939,	0x2cff, 0xc939,		0x21, 0
+	.dw 0x2d40, 0xc939,	0x2d7f, 0xc939,		0x21, 0
+	.dw 0x2dc0, 0xc939,	0x2dff, 0xc939,		0x21, 0
+	.dw 0x2e40, 0xc939,	0x2e7f, 0xc939,		0x21, 0
+	.dw 0x2ec0, 0xc939,	0x2eff, 0xc939,		0x21, 0
+	.dw 0x2f40, 0xc939,	0x2f7f, 0xc939,		0x21, 0
+	.dw 0x2fc0, 0xc939,	0x2fff, 0xc939,		0x21, 0
+	.dw 0x3040, 0xc939,	0x307f, 0xc939,		0x21, 0
+	.dw 0x30c0, 0xc939,	0x30ff, 0xc939,		0x21, 0
+	.dw 0x3140, 0xc939,	0x317f, 0xc939,		0x21, 0
+	.dw 0x31c0, 0xc939,	0x31ff, 0xc939,		0x21, 0
+	.dw 0x3240, 0xc939,	0x327f, 0xc939,		0x21, 0
+	.dw 0x32c0, 0xc939,	0x32ff, 0xc939,		0x21, 0
+	.dw 0x3340, 0xc939,	0x337f, 0xc939,		0x21, 0
+	.dw 0x33c0, 0xc939,	0x33ff, 0xc939,		0x21, 0
+	.dw 0x3440, 0xc939,	0x347f, 0xc939,		0x21, 0
+	.dw 0x34c0, 0xc939,	0x34ff, 0xc939,		0x21, 0
+	.dw 0x3540, 0xc939,	0x357f, 0xc939,		0x21, 0
+	.dw 0x35c0, 0xc939,	0x35ff, 0xc939,		0x21, 0
+	.dw 0x3640, 0xc939,	0x367f, 0xc939,		0x21, 0
+	.dw 0x36c0, 0xc939,	0x36ff, 0xc939,		0x21, 0
+	.dw 0x3740, 0xc939,	0x377f, 0xc939,		0x21, 0
+	.dw 0x37c0, 0xc939,	0x37ff, 0xc939,		0x21, 0
+	.dw 0x3840, 0xc939,	0x387f, 0xc939,		0x21, 0
+	.dw 0x38c0, 0xc939,	0x38ff, 0xc939,		0x21, 0
+	.dw 0x3940, 0xc939,	0x397f, 0xc939,		0x21, 0
+	.dw 0x39c0, 0xc939,	0x5fff, 0xc939,		0x21, 0
+	.dw 0x6040, 0xc939,	0x607f, 0xc939,		0x21, 0
+	.dw 0x60c0, 0xc939,	0x60ff, 0xc939,		0x21, 0
+	.dw 0x6140, 0xc939,	0x617f, 0xc939,		0x21, 0
+	.dw 0x61c0, 0xc939,	0x61ff, 0xc939,		0x21, 0
+	.dw 0x6240, 0xc939,	0x627f, 0xc939,		0x21, 0
+	.dw 0x62c0, 0xc939,	0x62ff, 0xc939,		0x21, 0
+	.dw 0x6340, 0xc939,	0x637f, 0xc939,		0x21, 0
+	.dw 0x63c0, 0xc939,	0x63ff, 0xc939,		0x21, 0
+	.dw 0x6440, 0xc939,	0x647f, 0xc939,		0x21, 0
+	.dw 0x64c0, 0xc939,	0x64ff, 0xc939,		0x21, 0
+	.dw 0x6540, 0xc939,	0x657f, 0xc939,		0x21, 0
+	.dw 0x65c0, 0xc939,	0x65ff, 0xc939,		0x21, 0
+	.dw 0x6640, 0xc939,	0x667f, 0xc939,		0x21, 0
+	.dw 0x66c0, 0xc939,	0x66ff, 0xc939,		0x21, 0
+	.dw 0x6740, 0xc939,	0x677f, 0xc939,		0x21, 0
+	.dw 0x67c0, 0xc939,	0x67ff, 0xc939,		0x21, 0
+	.dw 0x6840, 0xc939,	0x687f, 0xc939,		0x21, 0
+	.dw 0x68c0, 0xc939,	0x68ff, 0xc939,		0x21, 0
+	.dw 0x6940, 0xc939,	0x697f, 0xc939,		0x21, 0
+	.dw 0x69c0, 0xc939,	0x69ff, 0xc939,		0x21, 0
+	.dw 0x6a40, 0xc939,	0x6a7f, 0xc939,		0x21, 0
+	.dw 0x6ac0, 0xc939,	0x6aff, 0xc939,		0x21, 0
+	.dw 0x6b40, 0xc939,	0x6b7f, 0xc939,		0x21, 0
+	.dw 0x6bc0, 0xc939,	0x6bff, 0xc939,		0x21, 0
+	.dw 0x6c40, 0xc939,	0x6c7f, 0xc939,		0x21, 0
+	.dw 0x6cc0, 0xc939,	0x6cff, 0xc939,		0x21, 0
+	.dw 0x6d40, 0xc939,	0x6d7f, 0xc939,		0x21, 0
+	.dw 0x6dc0, 0xc939,	0x6dff, 0xc939,		0x21, 0
+	.dw 0x6e40, 0xc939,	0x6e7f, 0xc939,		0x21, 0
+	.dw 0x6ec0, 0xc939,	0x6eff, 0xc939,		0x21, 0
+	.dw 0x6f40, 0xc939,	0x6f7f, 0xc939,		0x21, 0
+	.dw 0x6fc0, 0xc939,	0x6fff, 0xc939,		0x21, 0
+	.dw 0x7040, 0xc939,	0x707f, 0xc939,		0x21, 0
+	.dw 0x70c0, 0xc939,	0x70ff, 0xc939,		0x21, 0
+	.dw 0x7140, 0xc939,	0x717f, 0xc939,		0x21, 0
+	.dw 0x71c0, 0xc939,	0x71ff, 0xc939,		0x21, 0
+	.dw 0x7240, 0xc939,	0x727f, 0xc939,		0x21, 0
+	.dw 0x72c0, 0xc939,	0x72ff, 0xc939,		0x21, 0
+	.dw 0x7340, 0xc939,	0x737f, 0xc939,		0x21, 0
+	.dw 0x73c0, 0xc939,	0x73ff, 0xc939,		0x21, 0
+	.dw 0x7440, 0xc939,	0x747f, 0xc939,		0x21, 0
+	.dw 0x74c0, 0xc939,	0x74ff, 0xc939,		0x21, 0
+	.dw 0x7540, 0xc939,	0x757f, 0xc939,		0x21, 0
+	.dw 0x75c0, 0xc939,	0x75ff, 0xc939,		0x21, 0
+	.dw 0x7640, 0xc939,	0x767f, 0xc939,		0x21, 0
+	.dw 0x76c0, 0xc939,	0x76ff, 0xc939,		0x21, 0
+	.dw 0x7740, 0xc939,	0x777f, 0xc939,		0x21, 0
+	.dw 0x77c0, 0xc939,	0x77ff, 0xc939,		0x21, 0
+	.dw 0x7840, 0xc939,	0x787f, 0xc939,		0x21, 0
+	.dw 0x78c0, 0xc939,	0x78ff, 0xc939,		0x21, 0
+	.dw 0x7940, 0xc939,	0x797f, 0xc939,		0x21, 0
+	.dw 0x79c0, 0xc939,	0x9fff, 0xc939,		0x21, 0
+	.dw 0xa040, 0xc939,	0xa07f, 0xc939,		0x21, 0
+	.dw 0xa0c0, 0xc939,	0xa0ff, 0xc939,		0x21, 0
+	.dw 0xa140, 0xc939,	0xa17f, 0xc939,		0x21, 0
+	.dw 0xa1c0, 0xc939,	0xa1ff, 0xc939,		0x21, 0
+	.dw 0xa240, 0xc939,	0xa27f, 0xc939,		0x21, 0
+	.dw 0xa2c0, 0xc939,	0xa2ff, 0xc939,		0x21, 0
+	.dw 0xa340, 0xc939,	0xa37f, 0xc939,		0x21, 0
+	.dw 0xa3c0, 0xc939,	0xa3ff, 0xc939,		0x21, 0
+	.dw 0xa440, 0xc939,	0xa47f, 0xc939,		0x21, 0
+	.dw 0xa4c0, 0xc939,	0xa4ff, 0xc939,		0x21, 0
+	.dw 0xa540, 0xc939,	0xa57f, 0xc939,		0x21, 0
+	.dw 0xa5c0, 0xc939,	0xa5ff, 0xc939,		0x21, 0
+	.dw 0xa640, 0xc939,	0xa67f, 0xc939,		0x21, 0
+	.dw 0xa6c0, 0xc939,	0xa6ff, 0xc939,		0x21, 0
+	.dw 0xa740, 0xc939,	0xa77f, 0xc939,		0x21, 0
+	.dw 0xa7c0, 0xc939,	0xa7ff, 0xc939,		0x21, 0
+	.dw 0xa840, 0xc939,	0xa87f, 0xc939,		0x21, 0
+	.dw 0xa8c0, 0xc939,	0xa8ff, 0xc939,		0x21, 0
+	.dw 0xa940, 0xc939,	0xa97f, 0xc939,		0x21, 0
+	.dw 0xa9c0, 0xc939,	0xa9ff, 0xc939,		0x21, 0
+	.dw 0xaa40, 0xc939,	0xaa7f, 0xc939,		0x21, 0
+	.dw 0xaac0, 0xc939,	0xaaff, 0xc939,		0x21, 0
+	.dw 0xab40, 0xc939,	0xab7f, 0xc939,		0x21, 0
+	.dw 0xabc0, 0xc939,	0xabff, 0xc939,		0x21, 0
+	.dw 0xac40, 0xc939,	0xac7f, 0xc939,		0x21, 0
+	.dw 0xacc0, 0xc939,	0xacff, 0xc939,		0x21, 0
+	.dw 0xad40, 0xc939,	0xad7f, 0xc939,		0x21, 0
+	.dw 0xadc0, 0xc939,	0xadff, 0xc939,		0x21, 0
+	.dw 0xae40, 0xc939,	0xae7f, 0xc939,		0x21, 0
+	.dw 0xaec0, 0xc939,	0xaeff, 0xc939,		0x21, 0
+	.dw 0xaf40, 0xc939,	0xaf7f, 0xc939,		0x21, 0
+	.dw 0xafc0, 0xc939,	0xafff, 0xc939,		0x21, 0
+	.dw 0xb040, 0xc939,	0xb07f, 0xc939,		0x21, 0
+	.dw 0xb0c0, 0xc939,	0xb0ff, 0xc939,		0x21, 0
+	.dw 0xb140, 0xc939,	0xb17f, 0xc939,		0x21, 0
+	.dw 0xb1c0, 0xc939,	0xb1ff, 0xc939,		0x21, 0
+	.dw 0xb240, 0xc939,	0xb27f, 0xc939,		0x21, 0
+	.dw 0xb2c0, 0xc939,	0xb2ff, 0xc939,		0x21, 0
+	.dw 0xb340, 0xc939,	0xb37f, 0xc939,		0x21, 0
+	.dw 0xb3c0, 0xc939,	0xb3ff, 0xc939,		0x21, 0
+	.dw 0xb440, 0xc939,	0xb47f, 0xc939,		0x21, 0
+	.dw 0xb4c0, 0xc939,	0xb4ff, 0xc939,		0x21, 0
+	.dw 0xb540, 0xc939,	0xb57f, 0xc939,		0x21, 0
+	.dw 0xb5c0, 0xc939,	0xb5ff, 0xc939,		0x21, 0
+	.dw 0xb640, 0xc939,	0xb67f, 0xc939,		0x21, 0
+	.dw 0xb6c0, 0xc939,	0xb6ff, 0xc939,		0x21, 0
+	.dw 0xb740, 0xc939,	0xb77f, 0xc939,		0x21, 0
+	.dw 0xb7c0, 0xc939,	0xb7ff, 0xc939,		0x21, 0
+	.dw 0xb840, 0xc939,	0xb87f, 0xc939,		0x21, 0
+	.dw 0xb8c0, 0xc939,	0xb8ff, 0xc939,		0x21, 0
+	.dw 0xb940, 0xc939,	0xb97f, 0xc939,		0x21, 0
+	.dw 0xb9c0, 0xc939,	0xdfff, 0xc939,		0x21, 0
+	.dw 0xe040, 0xc939,	0xe07f, 0xc939,		0x21, 0
+	.dw 0xe0c0, 0xc939,	0xe0ff, 0xc939,		0x21, 0
+	.dw 0xe140, 0xc939,	0xe17f, 0xc939,		0x21, 0
+	.dw 0xe1c0, 0xc939,	0xe1ff, 0xc939,		0x21, 0
+	.dw 0xe240, 0xc939,	0xe27f, 0xc939,		0x21, 0
+	.dw 0xe2c0, 0xc939,	0xe2ff, 0xc939,		0x21, 0
+	.dw 0xe340, 0xc939,	0xe37f, 0xc939,		0x21, 0
+	.dw 0xe3c0, 0xc939,	0xe3ff, 0xc939,		0x21, 0
+	.dw 0xe440, 0xc939,	0xe47f, 0xc939,		0x21, 0
+	.dw 0xe4c0, 0xc939,	0xe4ff, 0xc939,		0x21, 0
+	.dw 0xe540, 0xc939,	0xe57f, 0xc939,		0x21, 0
+	.dw 0xe5c0, 0xc939,	0xe5ff, 0xc939,		0x21, 0
+	.dw 0xe640, 0xc939,	0xe67f, 0xc939,		0x21, 0
+	.dw 0xe6c0, 0xc939,	0xe6ff, 0xc939,		0x21, 0
+	.dw 0xe740, 0xc939,	0xe77f, 0xc939,		0x21, 0
+	.dw 0xe7c0, 0xc939,	0xe7ff, 0xc939,		0x21, 0
+	.dw 0xe840, 0xc939,	0xe87f, 0xc939,		0x21, 0
+	.dw 0xe8c0, 0xc939,	0xe8ff, 0xc939,		0x21, 0
+	.dw 0xe940, 0xc939,	0xe97f, 0xc939,		0x21, 0
+	.dw 0xe9c0, 0xc939,	0xe9ff, 0xc939,		0x21, 0
+	.dw 0xea40, 0xc939,	0xea7f, 0xc939,		0x21, 0
+	.dw 0xeac0, 0xc939,	0xeaff, 0xc939,		0x21, 0
+	.dw 0xeb40, 0xc939,	0xeb7f, 0xc939,		0x21, 0
+	.dw 0xebc0, 0xc939,	0xebff, 0xc939,		0x21, 0
+	.dw 0xec40, 0xc939,	0xec7f, 0xc939,		0x21, 0
+	.dw 0xecc0, 0xc939,	0xecff, 0xc939,		0x21, 0
+	.dw 0xed40, 0xc939,	0xed7f, 0xc939,		0x21, 0
+	.dw 0xedc0, 0xc939,	0xedff, 0xc939,		0x21, 0
+	.dw 0xee40, 0xc939,	0xee7f, 0xc939,		0x21, 0
+	.dw 0xeec0, 0xc939,	0xeeff, 0xc939,		0x21, 0
+	.dw 0xef40, 0xc939,	0xef7f, 0xc939,		0x21, 0
+	.dw 0xefc0, 0xc939,	0xefff, 0xc939,		0x21, 0
+	.dw 0xf040, 0xc939,	0xf07f, 0xc939,		0x21, 0
+	.dw 0xf0c0, 0xc939,	0xf0ff, 0xc939,		0x21, 0
+	.dw 0xf140, 0xc939,	0xf17f, 0xc939,		0x21, 0
+	.dw 0xf1c0, 0xc939,	0xf1ff, 0xc939,		0x21, 0
+	.dw 0xf240, 0xc939,	0xf27f, 0xc939,		0x21, 0
+	.dw 0xf2c0, 0xc939,	0xf2ff, 0xc939,		0x21, 0
+	.dw 0xf340, 0xc939,	0xf37f, 0xc939,		0x21, 0
+	.dw 0xf3c0, 0xc939,	0xf3ff, 0xc939,		0x21, 0
+	.dw 0xf440, 0xc939,	0xf47f, 0xc939,		0x21, 0
+	.dw 0xf4c0, 0xc939,	0xf4ff, 0xc939,		0x21, 0
+	.dw 0xf540, 0xc939,	0xf57f, 0xc939,		0x21, 0
+	.dw 0xf5c0, 0xc939,	0xf5ff, 0xc939,		0x21, 0
+	.dw 0xf640, 0xc939,	0xf67f, 0xc939,		0x21, 0
+	.dw 0xf6c0, 0xc939,	0xf6ff, 0xc939,		0x21, 0
+	.dw 0xf740, 0xc939,	0xf77f, 0xc939,		0x21, 0
+	.dw 0xf7c0, 0xc939,	0xf7ff, 0xc939,		0x21, 0
+	.dw 0xf840, 0xc939,	0xf87f, 0xc939,		0x21, 0
+	.dw 0xf8c0, 0xc939,	0xf8ff, 0xc939,		0x21, 0
+	.dw 0xf940, 0xc939,	0xf97f, 0xc939,		0x21, 0
+	.dw 0xf9c0, 0xc939,	0x1fff, 0xc93a,		0x21, 0
+	.dw 0x2040, 0xc93a,	0x207f, 0xc93a,		0x21, 0
+	.dw 0x20c0, 0xc93a,	0x20ff, 0xc93a,		0x21, 0
+	.dw 0x2140, 0xc93a,	0x217f, 0xc93a,		0x21, 0
+	.dw 0x21c0, 0xc93a,	0x21ff, 0xc93a,		0x21, 0
+	.dw 0x2240, 0xc93a,	0x227f, 0xc93a,		0x21, 0
+	.dw 0x22c0, 0xc93a,	0x22ff, 0xc93a,		0x21, 0
+	.dw 0x2340, 0xc93a,	0x237f, 0xc93a,		0x21, 0
+	.dw 0x23c0, 0xc93a,	0x23ff, 0xc93a,		0x21, 0
+	.dw 0x2440, 0xc93a,	0x247f, 0xc93a,		0x21, 0
+	.dw 0x24c0, 0xc93a,	0x24ff, 0xc93a,		0x21, 0
+	.dw 0x2540, 0xc93a,	0x257f, 0xc93a,		0x21, 0
+	.dw 0x25c0, 0xc93a,	0x25ff, 0xc93a,		0x21, 0
+	.dw 0x2640, 0xc93a,	0x267f, 0xc93a,		0x21, 0
+	.dw 0x26c0, 0xc93a,	0x26ff, 0xc93a,		0x21, 0
+	.dw 0x2740, 0xc93a,	0x277f, 0xc93a,		0x21, 0
+	.dw 0x27c0, 0xc93a,	0x27ff, 0xc93a,		0x21, 0
+	.dw 0x2840, 0xc93a,	0x287f, 0xc93a,		0x21, 0
+	.dw 0x28c0, 0xc93a,	0x28ff, 0xc93a,		0x21, 0
+	.dw 0x2940, 0xc93a,	0x297f, 0xc93a,		0x21, 0
+	.dw 0x29c0, 0xc93a,	0x29ff, 0xc93a,		0x21, 0
+	.dw 0x2a40, 0xc93a,	0x2a7f, 0xc93a,		0x21, 0
+	.dw 0x2ac0, 0xc93a,	0x2aff, 0xc93a,		0x21, 0
+	.dw 0x2b40, 0xc93a,	0x2b7f, 0xc93a,		0x21, 0
+	.dw 0x2bc0, 0xc93a,	0x2bff, 0xc93a,		0x21, 0
+	.dw 0x2c40, 0xc93a,	0x2c7f, 0xc93a,		0x21, 0
+	.dw 0x2cc0, 0xc93a,	0x2cff, 0xc93a,		0x21, 0
+	.dw 0x2d40, 0xc93a,	0x2d7f, 0xc93a,		0x21, 0
+	.dw 0x2dc0, 0xc93a,	0x2dff, 0xc93a,		0x21, 0
+	.dw 0x2e40, 0xc93a,	0x2e7f, 0xc93a,		0x21, 0
+	.dw 0x2ec0, 0xc93a,	0x2eff, 0xc93a,		0x21, 0
+	.dw 0x2f40, 0xc93a,	0x2f7f, 0xc93a,		0x21, 0
+	.dw 0x2fc0, 0xc93a,	0x2fff, 0xc93a,		0x21, 0
+	.dw 0x3040, 0xc93a,	0x307f, 0xc93a,		0x21, 0
+	.dw 0x30c0, 0xc93a,	0x30ff, 0xc93a,		0x21, 0
+	.dw 0x3140, 0xc93a,	0x317f, 0xc93a,		0x21, 0
+	.dw 0x31c0, 0xc93a,	0x31ff, 0xc93a,		0x21, 0
+	.dw 0x3240, 0xc93a,	0x327f, 0xc93a,		0x21, 0
+	.dw 0x32c0, 0xc93a,	0x32ff, 0xc93a,		0x21, 0
+	.dw 0x3340, 0xc93a,	0x337f, 0xc93a,		0x21, 0
+	.dw 0x33c0, 0xc93a,	0x33ff, 0xc93a,		0x21, 0
+	.dw 0x3440, 0xc93a,	0x347f, 0xc93a,		0x21, 0
+	.dw 0x34c0, 0xc93a,	0x34ff, 0xc93a,		0x21, 0
+	.dw 0x3540, 0xc93a,	0x357f, 0xc93a,		0x21, 0
+	.dw 0x35c0, 0xc93a,	0x35ff, 0xc93a,		0x21, 0
+	.dw 0x3640, 0xc93a,	0x367f, 0xc93a,		0x21, 0
+	.dw 0x36c0, 0xc93a,	0x36ff, 0xc93a,		0x21, 0
+	.dw 0x3740, 0xc93a,	0x377f, 0xc93a,		0x21, 0
+	.dw 0x37c0, 0xc93a,	0x37ff, 0xc93a,		0x21, 0
+	.dw 0x3840, 0xc93a,	0x387f, 0xc93a,		0x21, 0
+	.dw 0x38c0, 0xc93a,	0x38ff, 0xc93a,		0x21, 0
+	.dw 0x3940, 0xc93a,	0x397f, 0xc93a,		0x21, 0
+	.dw 0x39c0, 0xc93a,	0x5fff, 0xc93a,		0x21, 0
+	.dw 0x6040, 0xc93a,	0x607f, 0xc93a,		0x21, 0
+	.dw 0x60c0, 0xc93a,	0x60ff, 0xc93a,		0x21, 0
+	.dw 0x6140, 0xc93a,	0x617f, 0xc93a,		0x21, 0
+	.dw 0x61c0, 0xc93a,	0x61ff, 0xc93a,		0x21, 0
+	.dw 0x6240, 0xc93a,	0x627f, 0xc93a,		0x21, 0
+	.dw 0x62c0, 0xc93a,	0x62ff, 0xc93a,		0x21, 0
+	.dw 0x6340, 0xc93a,	0x637f, 0xc93a,		0x21, 0
+	.dw 0x63c0, 0xc93a,	0x63ff, 0xc93a,		0x21, 0
+	.dw 0x6440, 0xc93a,	0x647f, 0xc93a,		0x21, 0
+	.dw 0x64c0, 0xc93a,	0x64ff, 0xc93a,		0x21, 0
+	.dw 0x6540, 0xc93a,	0x657f, 0xc93a,		0x21, 0
+	.dw 0x65c0, 0xc93a,	0x65ff, 0xc93a,		0x21, 0
+	.dw 0x6640, 0xc93a,	0x667f, 0xc93a,		0x21, 0
+	.dw 0x66c0, 0xc93a,	0x66ff, 0xc93a,		0x21, 0
+	.dw 0x6740, 0xc93a,	0x677f, 0xc93a,		0x21, 0
+	.dw 0x67c0, 0xc93a,	0x67ff, 0xc93a,		0x21, 0
+	.dw 0x6840, 0xc93a,	0x687f, 0xc93a,		0x21, 0
+	.dw 0x68c0, 0xc93a,	0x68ff, 0xc93a,		0x21, 0
+	.dw 0x6940, 0xc93a,	0x697f, 0xc93a,		0x21, 0
+	.dw 0x69c0, 0xc93a,	0x69ff, 0xc93a,		0x21, 0
+	.dw 0x6a40, 0xc93a,	0x6a7f, 0xc93a,		0x21, 0
+	.dw 0x6ac0, 0xc93a,	0x6aff, 0xc93a,		0x21, 0
+	.dw 0x6b40, 0xc93a,	0x6b7f, 0xc93a,		0x21, 0
+	.dw 0x6bc0, 0xc93a,	0x6bff, 0xc93a,		0x21, 0
+	.dw 0x6c40, 0xc93a,	0x6c7f, 0xc93a,		0x21, 0
+	.dw 0x6cc0, 0xc93a,	0x6cff, 0xc93a,		0x21, 0
+	.dw 0x6d40, 0xc93a,	0x6d7f, 0xc93a,		0x21, 0
+	.dw 0x6dc0, 0xc93a,	0x6dff, 0xc93a,		0x21, 0
+	.dw 0x6e40, 0xc93a,	0x6e7f, 0xc93a,		0x21, 0
+	.dw 0x6ec0, 0xc93a,	0x6eff, 0xc93a,		0x21, 0
+	.dw 0x6f40, 0xc93a,	0x6f7f, 0xc93a,		0x21, 0
+	.dw 0x6fc0, 0xc93a,	0x6fff, 0xc93a,		0x21, 0
+	.dw 0x7040, 0xc93a,	0x707f, 0xc93a,		0x21, 0
+	.dw 0x70c0, 0xc93a,	0x70ff, 0xc93a,		0x21, 0
+	.dw 0x7140, 0xc93a,	0x717f, 0xc93a,		0x21, 0
+	.dw 0x71c0, 0xc93a,	0x71ff, 0xc93a,		0x21, 0
+	.dw 0x7240, 0xc93a,	0x727f, 0xc93a,		0x21, 0
+	.dw 0x72c0, 0xc93a,	0x72ff, 0xc93a,		0x21, 0
+	.dw 0x7340, 0xc93a,	0x737f, 0xc93a,		0x21, 0
+	.dw 0x73c0, 0xc93a,	0x73ff, 0xc93a,		0x21, 0
+	.dw 0x7440, 0xc93a,	0x747f, 0xc93a,		0x21, 0
+	.dw 0x74c0, 0xc93a,	0x74ff, 0xc93a,		0x21, 0
+	.dw 0x7540, 0xc93a,	0x757f, 0xc93a,		0x21, 0
+	.dw 0x75c0, 0xc93a,	0x75ff, 0xc93a,		0x21, 0
+	.dw 0x7640, 0xc93a,	0x767f, 0xc93a,		0x21, 0
+	.dw 0x76c0, 0xc93a,	0x76ff, 0xc93a,		0x21, 0
+	.dw 0x7740, 0xc93a,	0x777f, 0xc93a,		0x21, 0
+	.dw 0x77c0, 0xc93a,	0x77ff, 0xc93a,		0x21, 0
+	.dw 0x7840, 0xc93a,	0x787f, 0xc93a,		0x21, 0
+	.dw 0x78c0, 0xc93a,	0x78ff, 0xc93a,		0x21, 0
+	.dw 0x7940, 0xc93a,	0x797f, 0xc93a,		0x21, 0
+	.dw 0x79c0, 0xc93a,	0x9fff, 0xc93a,		0x21, 0
+	.dw 0xa040, 0xc93a,	0xa07f, 0xc93a,		0x21, 0
+	.dw 0xa0c0, 0xc93a,	0xa0ff, 0xc93a,		0x21, 0
+	.dw 0xa140, 0xc93a,	0xa17f, 0xc93a,		0x21, 0
+	.dw 0xa1c0, 0xc93a,	0xa1ff, 0xc93a,		0x21, 0
+	.dw 0xa240, 0xc93a,	0xa27f, 0xc93a,		0x21, 0
+	.dw 0xa2c0, 0xc93a,	0xa2ff, 0xc93a,		0x21, 0
+	.dw 0xa340, 0xc93a,	0xa37f, 0xc93a,		0x21, 0
+	.dw 0xa3c0, 0xc93a,	0xa3ff, 0xc93a,		0x21, 0
+	.dw 0xa440, 0xc93a,	0xa47f, 0xc93a,		0x21, 0
+	.dw 0xa4c0, 0xc93a,	0xa4ff, 0xc93a,		0x21, 0
+	.dw 0xa540, 0xc93a,	0xa57f, 0xc93a,		0x21, 0
+	.dw 0xa5c0, 0xc93a,	0xa5ff, 0xc93a,		0x21, 0
+	.dw 0xa640, 0xc93a,	0xa67f, 0xc93a,		0x21, 0
+	.dw 0xa6c0, 0xc93a,	0xa6ff, 0xc93a,		0x21, 0
+	.dw 0xa740, 0xc93a,	0xa77f, 0xc93a,		0x21, 0
+	.dw 0xa7c0, 0xc93a,	0xa7ff, 0xc93a,		0x21, 0
+	.dw 0xa840, 0xc93a,	0xa87f, 0xc93a,		0x21, 0
+	.dw 0xa8c0, 0xc93a,	0xa8ff, 0xc93a,		0x21, 0
+	.dw 0xa940, 0xc93a,	0xa97f, 0xc93a,		0x21, 0
+	.dw 0xa9c0, 0xc93a,	0xa9ff, 0xc93a,		0x21, 0
+	.dw 0xaa40, 0xc93a,	0xaa7f, 0xc93a,		0x21, 0
+	.dw 0xaac0, 0xc93a,	0xaaff, 0xc93a,		0x21, 0
+	.dw 0xab40, 0xc93a,	0xab7f, 0xc93a,		0x21, 0
+	.dw 0xabc0, 0xc93a,	0xabff, 0xc93a,		0x21, 0
+	.dw 0xac40, 0xc93a,	0xac7f, 0xc93a,		0x21, 0
+	.dw 0xacc0, 0xc93a,	0xacff, 0xc93a,		0x21, 0
+	.dw 0xad40, 0xc93a,	0xad7f, 0xc93a,		0x21, 0
+	.dw 0xadc0, 0xc93a,	0xadff, 0xc93a,		0x21, 0
+	.dw 0xae40, 0xc93a,	0xae7f, 0xc93a,		0x21, 0
+	.dw 0xaec0, 0xc93a,	0xaeff, 0xc93a,		0x21, 0
+	.dw 0xaf40, 0xc93a,	0xaf7f, 0xc93a,		0x21, 0
+	.dw 0xafc0, 0xc93a,	0xafff, 0xc93a,		0x21, 0
+	.dw 0xb040, 0xc93a,	0xb07f, 0xc93a,		0x21, 0
+	.dw 0xb0c0, 0xc93a,	0xb0ff, 0xc93a,		0x21, 0
+	.dw 0xb140, 0xc93a,	0xb17f, 0xc93a,		0x21, 0
+	.dw 0xb1c0, 0xc93a,	0xb1ff, 0xc93a,		0x21, 0
+	.dw 0xb240, 0xc93a,	0xb27f, 0xc93a,		0x21, 0
+	.dw 0xb2c0, 0xc93a,	0xb2ff, 0xc93a,		0x21, 0
+	.dw 0xb340, 0xc93a,	0xb37f, 0xc93a,		0x21, 0
+	.dw 0xb3c0, 0xc93a,	0xb3ff, 0xc93a,		0x21, 0
+	.dw 0xb440, 0xc93a,	0xb47f, 0xc93a,		0x21, 0
+	.dw 0xb4c0, 0xc93a,	0xb4ff, 0xc93a,		0x21, 0
+	.dw 0xb540, 0xc93a,	0xb57f, 0xc93a,		0x21, 0
+	.dw 0xb5c0, 0xc93a,	0xb5ff, 0xc93a,		0x21, 0
+	.dw 0xb640, 0xc93a,	0xb67f, 0xc93a,		0x21, 0
+	.dw 0xb6c0, 0xc93a,	0xb6ff, 0xc93a,		0x21, 0
+	.dw 0xb740, 0xc93a,	0xb77f, 0xc93a,		0x21, 0
+	.dw 0xb7c0, 0xc93a,	0xb7ff, 0xc93a,		0x21, 0
+	.dw 0xb840, 0xc93a,	0xb87f, 0xc93a,		0x21, 0
+	.dw 0xb8c0, 0xc93a,	0xb8ff, 0xc93a,		0x21, 0
+	.dw 0xb940, 0xc93a,	0xb97f, 0xc93a,		0x21, 0
+	.dw 0xb9c0, 0xc93a,	0xdfff, 0xc93a,		0x21, 0
+	.dw 0xe040, 0xc93a,	0xe07f, 0xc93a,		0x21, 0
+	.dw 0xe0c0, 0xc93a,	0xe0ff, 0xc93a,		0x21, 0
+	.dw 0xe140, 0xc93a,	0xe17f, 0xc93a,		0x21, 0
+	.dw 0xe1c0, 0xc93a,	0xe1ff, 0xc93a,		0x21, 0
+	.dw 0xe240, 0xc93a,	0xe27f, 0xc93a,		0x21, 0
+	.dw 0xe2c0, 0xc93a,	0xe2ff, 0xc93a,		0x21, 0
+	.dw 0xe340, 0xc93a,	0xe37f, 0xc93a,		0x21, 0
+	.dw 0xe3c0, 0xc93a,	0xe3ff, 0xc93a,		0x21, 0
+	.dw 0xe440, 0xc93a,	0xe47f, 0xc93a,		0x21, 0
+	.dw 0xe4c0, 0xc93a,	0xe4ff, 0xc93a,		0x21, 0
+	.dw 0xe540, 0xc93a,	0xe57f, 0xc93a,		0x21, 0
+	.dw 0xe5c0, 0xc93a,	0xe5ff, 0xc93a,		0x21, 0
+	.dw 0xe640, 0xc93a,	0xe67f, 0xc93a,		0x21, 0
+	.dw 0xe6c0, 0xc93a,	0xe6ff, 0xc93a,		0x21, 0
+	.dw 0xe740, 0xc93a,	0xe77f, 0xc93a,		0x21, 0
+	.dw 0xe7c0, 0xc93a,	0xe7ff, 0xc93a,		0x21, 0
+	.dw 0xe840, 0xc93a,	0xe87f, 0xc93a,		0x21, 0
+	.dw 0xe8c0, 0xc93a,	0xe8ff, 0xc93a,		0x21, 0
+	.dw 0xe940, 0xc93a,	0xe97f, 0xc93a,		0x21, 0
+	.dw 0xe9c0, 0xc93a,	0xe9ff, 0xc93a,		0x21, 0
+	.dw 0xea40, 0xc93a,	0xea7f, 0xc93a,		0x21, 0
+	.dw 0xeac0, 0xc93a,	0xeaff, 0xc93a,		0x21, 0
+	.dw 0xeb40, 0xc93a,	0xeb7f, 0xc93a,		0x21, 0
+	.dw 0xebc0, 0xc93a,	0xebff, 0xc93a,		0x21, 0
+	.dw 0xec40, 0xc93a,	0xec7f, 0xc93a,		0x21, 0
+	.dw 0xecc0, 0xc93a,	0xecff, 0xc93a,		0x21, 0
+	.dw 0xed40, 0xc93a,	0xed7f, 0xc93a,		0x21, 0
+	.dw 0xedc0, 0xc93a,	0xedff, 0xc93a,		0x21, 0
+	.dw 0xee40, 0xc93a,	0xee7f, 0xc93a,		0x21, 0
+	.dw 0xeec0, 0xc93a,	0xeeff, 0xc93a,		0x21, 0
+	.dw 0xef40, 0xc93a,	0xef7f, 0xc93a,		0x21, 0
+	.dw 0xefc0, 0xc93a,	0xefff, 0xc93a,		0x21, 0
+	.dw 0xf040, 0xc93a,	0xf07f, 0xc93a,		0x21, 0
+	.dw 0xf0c0, 0xc93a,	0xf0ff, 0xc93a,		0x21, 0
+	.dw 0xf140, 0xc93a,	0xf17f, 0xc93a,		0x21, 0
+	.dw 0xf1c0, 0xc93a,	0xf1ff, 0xc93a,		0x21, 0
+	.dw 0xf240, 0xc93a,	0xf27f, 0xc93a,		0x21, 0
+	.dw 0xf2c0, 0xc93a,	0xf2ff, 0xc93a,		0x21, 0
+	.dw 0xf340, 0xc93a,	0xf37f, 0xc93a,		0x21, 0
+	.dw 0xf3c0, 0xc93a,	0xf3ff, 0xc93a,		0x21, 0
+	.dw 0xf440, 0xc93a,	0xf47f, 0xc93a,		0x21, 0
+	.dw 0xf4c0, 0xc93a,	0xf4ff, 0xc93a,		0x21, 0
+	.dw 0xf540, 0xc93a,	0xf57f, 0xc93a,		0x21, 0
+	.dw 0xf5c0, 0xc93a,	0xf5ff, 0xc93a,		0x21, 0
+	.dw 0xf640, 0xc93a,	0xf67f, 0xc93a,		0x21, 0
+	.dw 0xf6c0, 0xc93a,	0xf6ff, 0xc93a,		0x21, 0
+	.dw 0xf740, 0xc93a,	0xf77f, 0xc93a,		0x21, 0
+	.dw 0xf7c0, 0xc93a,	0xf7ff, 0xc93a,		0x21, 0
+	.dw 0xf840, 0xc93a,	0xf87f, 0xc93a,		0x21, 0
+	.dw 0xf8c0, 0xc93a,	0xf8ff, 0xc93a,		0x21, 0
+	.dw 0xf940, 0xc93a,	0xf97f, 0xc93a,		0x21, 0
+	.dw 0xf9c0, 0xc93a,	0xffff, 0xc93b,		0x21, 0
+	.dw 0x0040, 0xc93c,	0x007f, 0xc93c,		0x21, 0
+	.dw 0x00c0, 0xc93c,	0x00ff, 0xc93c,		0x21, 0
+	.dw 0x0140, 0xc93c,	0x017f, 0xc93c,		0x21, 0
+	.dw 0x01c0, 0xc93c,	0x01ff, 0xc93c,		0x21, 0
+	.dw 0x0240, 0xc93c,	0x027f, 0xc93c,		0x21, 0
+	.dw 0x02c0, 0xc93c,	0x02ff, 0xc93c,		0x21, 0
+	.dw 0x0340, 0xc93c,	0x037f, 0xc93c,		0x21, 0
+	.dw 0x03c0, 0xc93c,	0x03ff, 0xc93c,		0x21, 0
+	.dw 0x0440, 0xc93c,	0x047f, 0xc93c,		0x21, 0
+	.dw 0x04c0, 0xc93c,	0x04ff, 0xc93c,		0x21, 0
+	.dw 0x0540, 0xc93c,	0x057f, 0xc93c,		0x21, 0
+	.dw 0x05c0, 0xc93c,	0x05ff, 0xc93c,		0x21, 0
+	.dw 0x0640, 0xc93c,	0x067f, 0xc93c,		0x21, 0
+	.dw 0x06c0, 0xc93c,	0x06ff, 0xc93c,		0x21, 0
+	.dw 0x0740, 0xc93c,	0x077f, 0xc93c,		0x21, 0
+	.dw 0x07c0, 0xc93c,	0x07ff, 0xc93c,		0x21, 0
+	.dw 0x0840, 0xc93c,	0x087f, 0xc93c,		0x21, 0
+	.dw 0x08c0, 0xc93c,	0x08ff, 0xc93c,		0x21, 0
+	.dw 0x0940, 0xc93c,	0x097f, 0xc93c,		0x21, 0
+	.dw 0x09c0, 0xc93c,	0x09ff, 0xc93c,		0x21, 0
+	.dw 0x0a40, 0xc93c,	0x0a7f, 0xc93c,		0x21, 0
+	.dw 0x0ac0, 0xc93c,	0x0aff, 0xc93c,		0x21, 0
+	.dw 0x0b40, 0xc93c,	0x0b7f, 0xc93c,		0x21, 0
+	.dw 0x0bc0, 0xc93c,	0x0bff, 0xc93c,		0x21, 0
+	.dw 0x0c40, 0xc93c,	0x0c7f, 0xc93c,		0x21, 0
+	.dw 0x0cc0, 0xc93c,	0x0cff, 0xc93c,		0x21, 0
+	.dw 0x0d40, 0xc93c,	0x0d7f, 0xc93c,		0x21, 0
+	.dw 0x0dc0, 0xc93c,	0x0dff, 0xc93c,		0x21, 0
+	.dw 0x0e40, 0xc93c,	0x0e7f, 0xc93c,		0x21, 0
+	.dw 0x0ec0, 0xc93c,	0x0eff, 0xc93c,		0x21, 0
+	.dw 0x0f40, 0xc93c,	0x0f7f, 0xc93c,		0x21, 0
+	.dw 0x0fc0, 0xc93c,	0x0fff, 0xc93c,		0x21, 0
+	.dw 0x1040, 0xc93c,	0x107f, 0xc93c,		0x21, 0
+	.dw 0x10c0, 0xc93c,	0x10ff, 0xc93c,		0x21, 0
+	.dw 0x1140, 0xc93c,	0x117f, 0xc93c,		0x21, 0
+	.dw 0x11c0, 0xc93c,	0x11ff, 0xc93c,		0x21, 0
+	.dw 0x1240, 0xc93c,	0x127f, 0xc93c,		0x21, 0
+	.dw 0x12c0, 0xc93c,	0x12ff, 0xc93c,		0x21, 0
+	.dw 0x1340, 0xc93c,	0x137f, 0xc93c,		0x21, 0
+	.dw 0x13c0, 0xc93c,	0x13ff, 0xc93c,		0x21, 0
+	.dw 0x1440, 0xc93c,	0x147f, 0xc93c,		0x21, 0
+	.dw 0x14c0, 0xc93c,	0x14ff, 0xc93c,		0x21, 0
+	.dw 0x1540, 0xc93c,	0x157f, 0xc93c,		0x21, 0
+	.dw 0x15c0, 0xc93c,	0x15ff, 0xc93c,		0x21, 0
+	.dw 0x1640, 0xc93c,	0x167f, 0xc93c,		0x21, 0
+	.dw 0x16c0, 0xc93c,	0x16ff, 0xc93c,		0x21, 0
+	.dw 0x1740, 0xc93c,	0x177f, 0xc93c,		0x21, 0
+	.dw 0x17c0, 0xc93c,	0x17ff, 0xc93c,		0x21, 0
+	.dw 0x1840, 0xc93c,	0x187f, 0xc93c,		0x21, 0
+	.dw 0x18c0, 0xc93c,	0x18ff, 0xc93c,		0x21, 0
+	.dw 0x1940, 0xc93c,	0x197f, 0xc93c,		0x21, 0
+	.dw 0x19c0, 0xc93c,	0x1fff, 0xc93c,		0x21, 0
+	.dw 0x2040, 0xc93c,	0x207f, 0xc93c,		0x21, 0
+	.dw 0x20c0, 0xc93c,	0x20ff, 0xc93c,		0x21, 0
+	.dw 0x2140, 0xc93c,	0x217f, 0xc93c,		0x21, 0
+	.dw 0x21c0, 0xc93c,	0x21ff, 0xc93c,		0x21, 0
+	.dw 0x2240, 0xc93c,	0x227f, 0xc93c,		0x21, 0
+	.dw 0x22c0, 0xc93c,	0x22ff, 0xc93c,		0x21, 0
+	.dw 0x2340, 0xc93c,	0x237f, 0xc93c,		0x21, 0
+	.dw 0x23c0, 0xc93c,	0x23ff, 0xc93c,		0x21, 0
+	.dw 0x2440, 0xc93c,	0x247f, 0xc93c,		0x21, 0
+	.dw 0x24c0, 0xc93c,	0x24ff, 0xc93c,		0x21, 0
+	.dw 0x2540, 0xc93c,	0x257f, 0xc93c,		0x21, 0
+	.dw 0x25c0, 0xc93c,	0x25ff, 0xc93c,		0x21, 0
+	.dw 0x2640, 0xc93c,	0x267f, 0xc93c,		0x21, 0
+	.dw 0x26c0, 0xc93c,	0x26ff, 0xc93c,		0x21, 0
+	.dw 0x2740, 0xc93c,	0x277f, 0xc93c,		0x21, 0
+	.dw 0x27c0, 0xc93c,	0x27ff, 0xc93c,		0x21, 0
+	.dw 0x2840, 0xc93c,	0x287f, 0xc93c,		0x21, 0
+	.dw 0x28c0, 0xc93c,	0x28ff, 0xc93c,		0x21, 0
+	.dw 0x2940, 0xc93c,	0x297f, 0xc93c,		0x21, 0
+	.dw 0x29c0, 0xc93c,	0x29ff, 0xc93c,		0x21, 0
+	.dw 0x2a40, 0xc93c,	0x2a7f, 0xc93c,		0x21, 0
+	.dw 0x2ac0, 0xc93c,	0x2aff, 0xc93c,		0x21, 0
+	.dw 0x2b40, 0xc93c,	0x2b7f, 0xc93c,		0x21, 0
+	.dw 0x2bc0, 0xc93c,	0x2bff, 0xc93c,		0x21, 0
+	.dw 0x2c40, 0xc93c,	0x2c7f, 0xc93c,		0x21, 0
+	.dw 0x2cc0, 0xc93c,	0x2cff, 0xc93c,		0x21, 0
+	.dw 0x2d40, 0xc93c,	0x2d7f, 0xc93c,		0x21, 0
+	.dw 0x2dc0, 0xc93c,	0x2dff, 0xc93c,		0x21, 0
+	.dw 0x2e40, 0xc93c,	0x2e7f, 0xc93c,		0x21, 0
+	.dw 0x2ec0, 0xc93c,	0x2eff, 0xc93c,		0x21, 0
+	.dw 0x2f40, 0xc93c,	0x2f7f, 0xc93c,		0x21, 0
+	.dw 0x2fc0, 0xc93c,	0x2fff, 0xc93c,		0x21, 0
+	.dw 0x3040, 0xc93c,	0x307f, 0xc93c,		0x21, 0
+	.dw 0x30c0, 0xc93c,	0x30ff, 0xc93c,		0x21, 0
+	.dw 0x3140, 0xc93c,	0x317f, 0xc93c,		0x21, 0
+	.dw 0x31c0, 0xc93c,	0x31ff, 0xc93c,		0x21, 0
+	.dw 0x3240, 0xc93c,	0x327f, 0xc93c,		0x21, 0
+	.dw 0x32c0, 0xc93c,	0x32ff, 0xc93c,		0x21, 0
+	.dw 0x3340, 0xc93c,	0x337f, 0xc93c,		0x21, 0
+	.dw 0x33c0, 0xc93c,	0x33ff, 0xc93c,		0x21, 0
+	.dw 0x3440, 0xc93c,	0x347f, 0xc93c,		0x21, 0
+	.dw 0x34c0, 0xc93c,	0x34ff, 0xc93c,		0x21, 0
+	.dw 0x3540, 0xc93c,	0x357f, 0xc93c,		0x21, 0
+	.dw 0x35c0, 0xc93c,	0x35ff, 0xc93c,		0x21, 0
+	.dw 0x3640, 0xc93c,	0x367f, 0xc93c,		0x21, 0
+	.dw 0x36c0, 0xc93c,	0x36ff, 0xc93c,		0x21, 0
+	.dw 0x3740, 0xc93c,	0x377f, 0xc93c,		0x21, 0
+	.dw 0x37c0, 0xc93c,	0x37ff, 0xc93c,		0x21, 0
+	.dw 0x3840, 0xc93c,	0x387f, 0xc93c,		0x21, 0
+	.dw 0x38c0, 0xc93c,	0x38ff, 0xc93c,		0x21, 0
+	.dw 0x3940, 0xc93c,	0x397f, 0xc93c,		0x21, 0
+	.dw 0x39c0, 0xc93c,	0x3fff, 0xc93c,		0x21, 0
+	.dw 0x4040, 0xc93c,	0x407f, 0xc93c,		0x21, 0
+	.dw 0x40c0, 0xc93c,	0x40ff, 0xc93c,		0x21, 0
+	.dw 0x4140, 0xc93c,	0x417f, 0xc93c,		0x21, 0
+	.dw 0x41c0, 0xc93c,	0x41ff, 0xc93c,		0x21, 0
+	.dw 0x4240, 0xc93c,	0x427f, 0xc93c,		0x21, 0
+	.dw 0x42c0, 0xc93c,	0x42ff, 0xc93c,		0x21, 0
+	.dw 0x4340, 0xc93c,	0x437f, 0xc93c,		0x21, 0
+	.dw 0x43c0, 0xc93c,	0x43ff, 0xc93c,		0x21, 0
+	.dw 0x4440, 0xc93c,	0x447f, 0xc93c,		0x21, 0
+	.dw 0x44c0, 0xc93c,	0x44ff, 0xc93c,		0x21, 0
+	.dw 0x4540, 0xc93c,	0x457f, 0xc93c,		0x21, 0
+	.dw 0x45c0, 0xc93c,	0x45ff, 0xc93c,		0x21, 0
+	.dw 0x4640, 0xc93c,	0x467f, 0xc93c,		0x21, 0
+	.dw 0x46c0, 0xc93c,	0x46ff, 0xc93c,		0x21, 0
+	.dw 0x4740, 0xc93c,	0x477f, 0xc93c,		0x21, 0
+	.dw 0x47c0, 0xc93c,	0x47ff, 0xc93c,		0x21, 0
+	.dw 0x4840, 0xc93c,	0x487f, 0xc93c,		0x21, 0
+	.dw 0x48c0, 0xc93c,	0x48ff, 0xc93c,		0x21, 0
+	.dw 0x4940, 0xc93c,	0x497f, 0xc93c,		0x21, 0
+	.dw 0x49c0, 0xc93c,	0x49ff, 0xc93c,		0x21, 0
+	.dw 0x4a40, 0xc93c,	0x4a7f, 0xc93c,		0x21, 0
+	.dw 0x4ac0, 0xc93c,	0x4aff, 0xc93c,		0x21, 0
+	.dw 0x4b40, 0xc93c,	0x4b7f, 0xc93c,		0x21, 0
+	.dw 0x4bc0, 0xc93c,	0x4bff, 0xc93c,		0x21, 0
+	.dw 0x4c40, 0xc93c,	0x4c7f, 0xc93c,		0x21, 0
+	.dw 0x4cc0, 0xc93c,	0x4cff, 0xc93c,		0x21, 0
+	.dw 0x4d40, 0xc93c,	0x4d7f, 0xc93c,		0x21, 0
+	.dw 0x4dc0, 0xc93c,	0x4dff, 0xc93c,		0x21, 0
+	.dw 0x4e40, 0xc93c,	0x4e7f, 0xc93c,		0x21, 0
+	.dw 0x4ec0, 0xc93c,	0x4eff, 0xc93c,		0x21, 0
+	.dw 0x4f40, 0xc93c,	0x4f7f, 0xc93c,		0x21, 0
+	.dw 0x4fc0, 0xc93c,	0x4fff, 0xc93c,		0x21, 0
+	.dw 0x5040, 0xc93c,	0x507f, 0xc93c,		0x21, 0
+	.dw 0x50c0, 0xc93c,	0x50ff, 0xc93c,		0x21, 0
+	.dw 0x5140, 0xc93c,	0x517f, 0xc93c,		0x21, 0
+	.dw 0x51c0, 0xc93c,	0x51ff, 0xc93c,		0x21, 0
+	.dw 0x5240, 0xc93c,	0x527f, 0xc93c,		0x21, 0
+	.dw 0x52c0, 0xc93c,	0x52ff, 0xc93c,		0x21, 0
+	.dw 0x5340, 0xc93c,	0x537f, 0xc93c,		0x21, 0
+	.dw 0x53c0, 0xc93c,	0x53ff, 0xc93c,		0x21, 0
+	.dw 0x5440, 0xc93c,	0x547f, 0xc93c,		0x21, 0
+	.dw 0x54c0, 0xc93c,	0x54ff, 0xc93c,		0x21, 0
+	.dw 0x5540, 0xc93c,	0x557f, 0xc93c,		0x21, 0
+	.dw 0x55c0, 0xc93c,	0x55ff, 0xc93c,		0x21, 0
+	.dw 0x5640, 0xc93c,	0x567f, 0xc93c,		0x21, 0
+	.dw 0x56c0, 0xc93c,	0x56ff, 0xc93c,		0x21, 0
+	.dw 0x5740, 0xc93c,	0x577f, 0xc93c,		0x21, 0
+	.dw 0x57c0, 0xc93c,	0x57ff, 0xc93c,		0x21, 0
+	.dw 0x5840, 0xc93c,	0x587f, 0xc93c,		0x21, 0
+	.dw 0x58c0, 0xc93c,	0x58ff, 0xc93c,		0x21, 0
+	.dw 0x5940, 0xc93c,	0x597f, 0xc93c,		0x21, 0
+	.dw 0x59c0, 0xc93c,	0x5fff, 0xc93c,		0x21, 0
+	.dw 0x6040, 0xc93c,	0x607f, 0xc93c,		0x21, 0
+	.dw 0x60c0, 0xc93c,	0x60ff, 0xc93c,		0x21, 0
+	.dw 0x6140, 0xc93c,	0x617f, 0xc93c,		0x21, 0
+	.dw 0x61c0, 0xc93c,	0x61ff, 0xc93c,		0x21, 0
+	.dw 0x6240, 0xc93c,	0x627f, 0xc93c,		0x21, 0
+	.dw 0x62c0, 0xc93c,	0x62ff, 0xc93c,		0x21, 0
+	.dw 0x6340, 0xc93c,	0x637f, 0xc93c,		0x21, 0
+	.dw 0x63c0, 0xc93c,	0x63ff, 0xc93c,		0x21, 0
+	.dw 0x6440, 0xc93c,	0x647f, 0xc93c,		0x21, 0
+	.dw 0x64c0, 0xc93c,	0x64ff, 0xc93c,		0x21, 0
+	.dw 0x6540, 0xc93c,	0x657f, 0xc93c,		0x21, 0
+	.dw 0x65c0, 0xc93c,	0x65ff, 0xc93c,		0x21, 0
+	.dw 0x6640, 0xc93c,	0x667f, 0xc93c,		0x21, 0
+	.dw 0x66c0, 0xc93c,	0x66ff, 0xc93c,		0x21, 0
+	.dw 0x6740, 0xc93c,	0x677f, 0xc93c,		0x21, 0
+	.dw 0x67c0, 0xc93c,	0x67ff, 0xc93c,		0x21, 0
+	.dw 0x6840, 0xc93c,	0x687f, 0xc93c,		0x21, 0
+	.dw 0x68c0, 0xc93c,	0x68ff, 0xc93c,		0x21, 0
+	.dw 0x6940, 0xc93c,	0x697f, 0xc93c,		0x21, 0
+	.dw 0x69c0, 0xc93c,	0x69ff, 0xc93c,		0x21, 0
+	.dw 0x6a40, 0xc93c,	0x6a7f, 0xc93c,		0x21, 0
+	.dw 0x6ac0, 0xc93c,	0x6aff, 0xc93c,		0x21, 0
+	.dw 0x6b40, 0xc93c,	0x6b7f, 0xc93c,		0x21, 0
+	.dw 0x6bc0, 0xc93c,	0x6bff, 0xc93c,		0x21, 0
+	.dw 0x6c40, 0xc93c,	0x6c7f, 0xc93c,		0x21, 0
+	.dw 0x6cc0, 0xc93c,	0x6cff, 0xc93c,		0x21, 0
+	.dw 0x6d40, 0xc93c,	0x6d7f, 0xc93c,		0x21, 0
+	.dw 0x6dc0, 0xc93c,	0x6dff, 0xc93c,		0x21, 0
+	.dw 0x6e40, 0xc93c,	0x6e7f, 0xc93c,		0x21, 0
+	.dw 0x6ec0, 0xc93c,	0x6eff, 0xc93c,		0x21, 0
+	.dw 0x6f40, 0xc93c,	0x6f7f, 0xc93c,		0x21, 0
+	.dw 0x6fc0, 0xc93c,	0x6fff, 0xc93c,		0x21, 0
+	.dw 0x7040, 0xc93c,	0x707f, 0xc93c,		0x21, 0
+	.dw 0x70c0, 0xc93c,	0x70ff, 0xc93c,		0x21, 0
+	.dw 0x7140, 0xc93c,	0x717f, 0xc93c,		0x21, 0
+	.dw 0x71c0, 0xc93c,	0x71ff, 0xc93c,		0x21, 0
+	.dw 0x7240, 0xc93c,	0x727f, 0xc93c,		0x21, 0
+	.dw 0x72c0, 0xc93c,	0x72ff, 0xc93c,		0x21, 0
+	.dw 0x7340, 0xc93c,	0x737f, 0xc93c,		0x21, 0
+	.dw 0x73c0, 0xc93c,	0x73ff, 0xc93c,		0x21, 0
+	.dw 0x7440, 0xc93c,	0x747f, 0xc93c,		0x21, 0
+	.dw 0x74c0, 0xc93c,	0x74ff, 0xc93c,		0x21, 0
+	.dw 0x7540, 0xc93c,	0x757f, 0xc93c,		0x21, 0
+	.dw 0x75c0, 0xc93c,	0x75ff, 0xc93c,		0x21, 0
+	.dw 0x7640, 0xc93c,	0x767f, 0xc93c,		0x21, 0
+	.dw 0x76c0, 0xc93c,	0x76ff, 0xc93c,		0x21, 0
+	.dw 0x7740, 0xc93c,	0x777f, 0xc93c,		0x21, 0
+	.dw 0x77c0, 0xc93c,	0x77ff, 0xc93c,		0x21, 0
+	.dw 0x7840, 0xc93c,	0x787f, 0xc93c,		0x21, 0
+	.dw 0x78c0, 0xc93c,	0x78ff, 0xc93c,		0x21, 0
+	.dw 0x7940, 0xc93c,	0x797f, 0xc93c,		0x21, 0
+	.dw 0x79c0, 0xc93c,	0x7fff, 0xc93c,		0x21, 0
+	.dw 0x8040, 0xc93c,	0x807f, 0xc93c,		0x21, 0
+	.dw 0x80c0, 0xc93c,	0x80ff, 0xc93c,		0x21, 0
+	.dw 0x8140, 0xc93c,	0x817f, 0xc93c,		0x21, 0
+	.dw 0x81c0, 0xc93c,	0x81ff, 0xc93c,		0x21, 0
+	.dw 0x8240, 0xc93c,	0x827f, 0xc93c,		0x21, 0
+	.dw 0x82c0, 0xc93c,	0x82ff, 0xc93c,		0x21, 0
+	.dw 0x8340, 0xc93c,	0x837f, 0xc93c,		0x21, 0
+	.dw 0x83c0, 0xc93c,	0x83ff, 0xc93c,		0x21, 0
+	.dw 0x8440, 0xc93c,	0x847f, 0xc93c,		0x21, 0
+	.dw 0x84c0, 0xc93c,	0x84ff, 0xc93c,		0x21, 0
+	.dw 0x8540, 0xc93c,	0x857f, 0xc93c,		0x21, 0
+	.dw 0x85c0, 0xc93c,	0x85ff, 0xc93c,		0x21, 0
+	.dw 0x8640, 0xc93c,	0x867f, 0xc93c,		0x21, 0
+	.dw 0x86c0, 0xc93c,	0x86ff, 0xc93c,		0x21, 0
+	.dw 0x8740, 0xc93c,	0x877f, 0xc93c,		0x21, 0
+	.dw 0x87c0, 0xc93c,	0x87ff, 0xc93c,		0x21, 0
+	.dw 0x8840, 0xc93c,	0x887f, 0xc93c,		0x21, 0
+	.dw 0x88c0, 0xc93c,	0x88ff, 0xc93c,		0x21, 0
+	.dw 0x8940, 0xc93c,	0x897f, 0xc93c,		0x21, 0
+	.dw 0x89c0, 0xc93c,	0x89ff, 0xc93c,		0x21, 0
+	.dw 0x8a40, 0xc93c,	0x8a7f, 0xc93c,		0x21, 0
+	.dw 0x8ac0, 0xc93c,	0x8aff, 0xc93c,		0x21, 0
+	.dw 0x8b40, 0xc93c,	0x8b7f, 0xc93c,		0x21, 0
+	.dw 0x8bc0, 0xc93c,	0x8bff, 0xc93c,		0x21, 0
+	.dw 0x8c40, 0xc93c,	0x8c7f, 0xc93c,		0x21, 0
+	.dw 0x8cc0, 0xc93c,	0x8cff, 0xc93c,		0x21, 0
+	.dw 0x8d40, 0xc93c,	0x8d7f, 0xc93c,		0x21, 0
+	.dw 0x8dc0, 0xc93c,	0x8dff, 0xc93c,		0x21, 0
+	.dw 0x8e40, 0xc93c,	0x8e7f, 0xc93c,		0x21, 0
+	.dw 0x8ec0, 0xc93c,	0x8eff, 0xc93c,		0x21, 0
+	.dw 0x8f40, 0xc93c,	0x8f7f, 0xc93c,		0x21, 0
+	.dw 0x8fc0, 0xc93c,	0x8fff, 0xc93c,		0x21, 0
+	.dw 0x9040, 0xc93c,	0x907f, 0xc93c,		0x21, 0
+	.dw 0x90c0, 0xc93c,	0x90ff, 0xc93c,		0x21, 0
+	.dw 0x9140, 0xc93c,	0x917f, 0xc93c,		0x21, 0
+	.dw 0x91c0, 0xc93c,	0x91ff, 0xc93c,		0x21, 0
+	.dw 0x9240, 0xc93c,	0x927f, 0xc93c,		0x21, 0
+	.dw 0x92c0, 0xc93c,	0x92ff, 0xc93c,		0x21, 0
+	.dw 0x9340, 0xc93c,	0x937f, 0xc93c,		0x21, 0
+	.dw 0x93c0, 0xc93c,	0x93ff, 0xc93c,		0x21, 0
+	.dw 0x9440, 0xc93c,	0x947f, 0xc93c,		0x21, 0
+	.dw 0x94c0, 0xc93c,	0x94ff, 0xc93c,		0x21, 0
+	.dw 0x9540, 0xc93c,	0x957f, 0xc93c,		0x21, 0
+	.dw 0x95c0, 0xc93c,	0x95ff, 0xc93c,		0x21, 0
+	.dw 0x9640, 0xc93c,	0x967f, 0xc93c,		0x21, 0
+	.dw 0x96c0, 0xc93c,	0x96ff, 0xc93c,		0x21, 0
+	.dw 0x9740, 0xc93c,	0x977f, 0xc93c,		0x21, 0
+	.dw 0x97c0, 0xc93c,	0x97ff, 0xc93c,		0x21, 0
+	.dw 0x9840, 0xc93c,	0x987f, 0xc93c,		0x21, 0
+	.dw 0x98c0, 0xc93c,	0x98ff, 0xc93c,		0x21, 0
+	.dw 0x9940, 0xc93c,	0x997f, 0xc93c,		0x21, 0
+	.dw 0x99c0, 0xc93c,	0x9fff, 0xc93c,		0x21, 0
+	.dw 0xa040, 0xc93c,	0xa07f, 0xc93c,		0x21, 0
+	.dw 0xa0c0, 0xc93c,	0xa0ff, 0xc93c,		0x21, 0
+	.dw 0xa140, 0xc93c,	0xa17f, 0xc93c,		0x21, 0
+	.dw 0xa1c0, 0xc93c,	0xa1ff, 0xc93c,		0x21, 0
+	.dw 0xa240, 0xc93c,	0xa27f, 0xc93c,		0x21, 0
+	.dw 0xa2c0, 0xc93c,	0xa2ff, 0xc93c,		0x21, 0
+	.dw 0xa340, 0xc93c,	0xa37f, 0xc93c,		0x21, 0
+	.dw 0xa3c0, 0xc93c,	0xa3ff, 0xc93c,		0x21, 0
+	.dw 0xa440, 0xc93c,	0xa47f, 0xc93c,		0x21, 0
+	.dw 0xa4c0, 0xc93c,	0xa4ff, 0xc93c,		0x21, 0
+	.dw 0xa540, 0xc93c,	0xa57f, 0xc93c,		0x21, 0
+	.dw 0xa5c0, 0xc93c,	0xa5ff, 0xc93c,		0x21, 0
+	.dw 0xa640, 0xc93c,	0xa67f, 0xc93c,		0x21, 0
+	.dw 0xa6c0, 0xc93c,	0xa6ff, 0xc93c,		0x21, 0
+	.dw 0xa740, 0xc93c,	0xa77f, 0xc93c,		0x21, 0
+	.dw 0xa7c0, 0xc93c,	0xa7ff, 0xc93c,		0x21, 0
+	.dw 0xa840, 0xc93c,	0xa87f, 0xc93c,		0x21, 0
+	.dw 0xa8c0, 0xc93c,	0xa8ff, 0xc93c,		0x21, 0
+	.dw 0xa940, 0xc93c,	0xa97f, 0xc93c,		0x21, 0
+	.dw 0xa9c0, 0xc93c,	0xa9ff, 0xc93c,		0x21, 0
+	.dw 0xaa40, 0xc93c,	0xaa7f, 0xc93c,		0x21, 0
+	.dw 0xaac0, 0xc93c,	0xaaff, 0xc93c,		0x21, 0
+	.dw 0xab40, 0xc93c,	0xab7f, 0xc93c,		0x21, 0
+	.dw 0xabc0, 0xc93c,	0xabff, 0xc93c,		0x21, 0
+	.dw 0xac40, 0xc93c,	0xac7f, 0xc93c,		0x21, 0
+	.dw 0xacc0, 0xc93c,	0xacff, 0xc93c,		0x21, 0
+	.dw 0xad40, 0xc93c,	0xad7f, 0xc93c,		0x21, 0
+	.dw 0xadc0, 0xc93c,	0xadff, 0xc93c,		0x21, 0
+	.dw 0xae40, 0xc93c,	0xae7f, 0xc93c,		0x21, 0
+	.dw 0xaec0, 0xc93c,	0xaeff, 0xc93c,		0x21, 0
+	.dw 0xaf40, 0xc93c,	0xaf7f, 0xc93c,		0x21, 0
+	.dw 0xafc0, 0xc93c,	0xafff, 0xc93c,		0x21, 0
+	.dw 0xb040, 0xc93c,	0xb07f, 0xc93c,		0x21, 0
+	.dw 0xb0c0, 0xc93c,	0xb0ff, 0xc93c,		0x21, 0
+	.dw 0xb140, 0xc93c,	0xb17f, 0xc93c,		0x21, 0
+	.dw 0xb1c0, 0xc93c,	0xb1ff, 0xc93c,		0x21, 0
+	.dw 0xb240, 0xc93c,	0xb27f, 0xc93c,		0x21, 0
+	.dw 0xb2c0, 0xc93c,	0xb2ff, 0xc93c,		0x21, 0
+	.dw 0xb340, 0xc93c,	0xb37f, 0xc93c,		0x21, 0
+	.dw 0xb3c0, 0xc93c,	0xb3ff, 0xc93c,		0x21, 0
+	.dw 0xb440, 0xc93c,	0xb47f, 0xc93c,		0x21, 0
+	.dw 0xb4c0, 0xc93c,	0xb4ff, 0xc93c,		0x21, 0
+	.dw 0xb540, 0xc93c,	0xb57f, 0xc93c,		0x21, 0
+	.dw 0xb5c0, 0xc93c,	0xb5ff, 0xc93c,		0x21, 0
+	.dw 0xb640, 0xc93c,	0xb67f, 0xc93c,		0x21, 0
+	.dw 0xb6c0, 0xc93c,	0xb6ff, 0xc93c,		0x21, 0
+	.dw 0xb740, 0xc93c,	0xb77f, 0xc93c,		0x21, 0
+	.dw 0xb7c0, 0xc93c,	0xb7ff, 0xc93c,		0x21, 0
+	.dw 0xb840, 0xc93c,	0xb87f, 0xc93c,		0x21, 0
+	.dw 0xb8c0, 0xc93c,	0xb8ff, 0xc93c,		0x21, 0
+	.dw 0xb940, 0xc93c,	0xb97f, 0xc93c,		0x21, 0
+	.dw 0xb9c0, 0xc93c,	0xbfff, 0xc93c,		0x21, 0
+	.dw 0xc040, 0xc93c,	0xc07f, 0xc93c,		0x21, 0
+	.dw 0xc0c0, 0xc93c,	0xc0ff, 0xc93c,		0x21, 0
+	.dw 0xc140, 0xc93c,	0xc17f, 0xc93c,		0x21, 0
+	.dw 0xc1c0, 0xc93c,	0xc1ff, 0xc93c,		0x21, 0
+	.dw 0xc240, 0xc93c,	0xc27f, 0xc93c,		0x21, 0
+	.dw 0xc2c0, 0xc93c,	0xc2ff, 0xc93c,		0x21, 0
+	.dw 0xc340, 0xc93c,	0xc37f, 0xc93c,		0x21, 0
+	.dw 0xc3c0, 0xc93c,	0xc3ff, 0xc93c,		0x21, 0
+	.dw 0xc440, 0xc93c,	0xc47f, 0xc93c,		0x21, 0
+	.dw 0xc4c0, 0xc93c,	0xc4ff, 0xc93c,		0x21, 0
+	.dw 0xc540, 0xc93c,	0xc57f, 0xc93c,		0x21, 0
+	.dw 0xc5c0, 0xc93c,	0xc5ff, 0xc93c,		0x21, 0
+	.dw 0xc640, 0xc93c,	0xc67f, 0xc93c,		0x21, 0
+	.dw 0xc6c0, 0xc93c,	0xc6ff, 0xc93c,		0x21, 0
+	.dw 0xc740, 0xc93c,	0xc77f, 0xc93c,		0x21, 0
+	.dw 0xc7c0, 0xc93c,	0xc7ff, 0xc93c,		0x21, 0
+	.dw 0xc840, 0xc93c,	0xc87f, 0xc93c,		0x21, 0
+	.dw 0xc8c0, 0xc93c,	0xc8ff, 0xc93c,		0x21, 0
+	.dw 0xc940, 0xc93c,	0xc97f, 0xc93c,		0x21, 0
+	.dw 0xc9c0, 0xc93c,	0xc9ff, 0xc93c,		0x21, 0
+	.dw 0xca40, 0xc93c,	0xca7f, 0xc93c,		0x21, 0
+	.dw 0xcac0, 0xc93c,	0xcaff, 0xc93c,		0x21, 0
+	.dw 0xcb40, 0xc93c,	0xcb7f, 0xc93c,		0x21, 0
+	.dw 0xcbc0, 0xc93c,	0xcbff, 0xc93c,		0x21, 0
+	.dw 0xcc40, 0xc93c,	0xcc7f, 0xc93c,		0x21, 0
+	.dw 0xccc0, 0xc93c,	0xccff, 0xc93c,		0x21, 0
+	.dw 0xcd40, 0xc93c,	0xcd7f, 0xc93c,		0x21, 0
+	.dw 0xcdc0, 0xc93c,	0xcdff, 0xc93c,		0x21, 0
+	.dw 0xce40, 0xc93c,	0xce7f, 0xc93c,		0x21, 0
+	.dw 0xcec0, 0xc93c,	0xceff, 0xc93c,		0x21, 0
+	.dw 0xcf40, 0xc93c,	0xcf7f, 0xc93c,		0x21, 0
+	.dw 0xcfc0, 0xc93c,	0xcfff, 0xc93c,		0x21, 0
+	.dw 0xd040, 0xc93c,	0xd07f, 0xc93c,		0x21, 0
+	.dw 0xd0c0, 0xc93c,	0xd0ff, 0xc93c,		0x21, 0
+	.dw 0xd140, 0xc93c,	0xd17f, 0xc93c,		0x21, 0
+	.dw 0xd1c0, 0xc93c,	0xd1ff, 0xc93c,		0x21, 0
+	.dw 0xd240, 0xc93c,	0xd27f, 0xc93c,		0x21, 0
+	.dw 0xd2c0, 0xc93c,	0xd2ff, 0xc93c,		0x21, 0
+	.dw 0xd340, 0xc93c,	0xd37f, 0xc93c,		0x21, 0
+	.dw 0xd3c0, 0xc93c,	0xd3ff, 0xc93c,		0x21, 0
+	.dw 0xd440, 0xc93c,	0xd47f, 0xc93c,		0x21, 0
+	.dw 0xd4c0, 0xc93c,	0xd4ff, 0xc93c,		0x21, 0
+	.dw 0xd540, 0xc93c,	0xd57f, 0xc93c,		0x21, 0
+	.dw 0xd5c0, 0xc93c,	0xd5ff, 0xc93c,		0x21, 0
+	.dw 0xd640, 0xc93c,	0xd67f, 0xc93c,		0x21, 0
+	.dw 0xd6c0, 0xc93c,	0xd6ff, 0xc93c,		0x21, 0
+	.dw 0xd740, 0xc93c,	0xd77f, 0xc93c,		0x21, 0
+	.dw 0xd7c0, 0xc93c,	0xd7ff, 0xc93c,		0x21, 0
+	.dw 0xd840, 0xc93c,	0xd87f, 0xc93c,		0x21, 0
+	.dw 0xd8c0, 0xc93c,	0xd8ff, 0xc93c,		0x21, 0
+	.dw 0xd940, 0xc93c,	0xd97f, 0xc93c,		0x21, 0
+	.dw 0xd9c0, 0xc93c,	0xdfff, 0xc93c,		0x21, 0
+	.dw 0xe040, 0xc93c,	0xe07f, 0xc93c,		0x21, 0
+	.dw 0xe0c0, 0xc93c,	0xe0ff, 0xc93c,		0x21, 0
+	.dw 0xe140, 0xc93c,	0xe17f, 0xc93c,		0x21, 0
+	.dw 0xe1c0, 0xc93c,	0xe1ff, 0xc93c,		0x21, 0
+	.dw 0xe240, 0xc93c,	0xe27f, 0xc93c,		0x21, 0
+	.dw 0xe2c0, 0xc93c,	0xe2ff, 0xc93c,		0x21, 0
+	.dw 0xe340, 0xc93c,	0xe37f, 0xc93c,		0x21, 0
+	.dw 0xe3c0, 0xc93c,	0xe3ff, 0xc93c,		0x21, 0
+	.dw 0xe440, 0xc93c,	0xe47f, 0xc93c,		0x21, 0
+	.dw 0xe4c0, 0xc93c,	0xe4ff, 0xc93c,		0x21, 0
+	.dw 0xe540, 0xc93c,	0xe57f, 0xc93c,		0x21, 0
+	.dw 0xe5c0, 0xc93c,	0xe5ff, 0xc93c,		0x21, 0
+	.dw 0xe640, 0xc93c,	0xe67f, 0xc93c,		0x21, 0
+	.dw 0xe6c0, 0xc93c,	0xe6ff, 0xc93c,		0x21, 0
+	.dw 0xe740, 0xc93c,	0xe77f, 0xc93c,		0x21, 0
+	.dw 0xe7c0, 0xc93c,	0xe7ff, 0xc93c,		0x21, 0
+	.dw 0xe840, 0xc93c,	0xe87f, 0xc93c,		0x21, 0
+	.dw 0xe8c0, 0xc93c,	0xe8ff, 0xc93c,		0x21, 0
+	.dw 0xe940, 0xc93c,	0xe97f, 0xc93c,		0x21, 0
+	.dw 0xe9c0, 0xc93c,	0xe9ff, 0xc93c,		0x21, 0
+	.dw 0xea40, 0xc93c,	0xea7f, 0xc93c,		0x21, 0
+	.dw 0xeac0, 0xc93c,	0xeaff, 0xc93c,		0x21, 0
+	.dw 0xeb40, 0xc93c,	0xeb7f, 0xc93c,		0x21, 0
+	.dw 0xebc0, 0xc93c,	0xebff, 0xc93c,		0x21, 0
+	.dw 0xec40, 0xc93c,	0xec7f, 0xc93c,		0x21, 0
+	.dw 0xecc0, 0xc93c,	0xecff, 0xc93c,		0x21, 0
+	.dw 0xed40, 0xc93c,	0xed7f, 0xc93c,		0x21, 0
+	.dw 0xedc0, 0xc93c,	0xedff, 0xc93c,		0x21, 0
+	.dw 0xee40, 0xc93c,	0xee7f, 0xc93c,		0x21, 0
+	.dw 0xeec0, 0xc93c,	0xeeff, 0xc93c,		0x21, 0
+	.dw 0xef40, 0xc93c,	0xef7f, 0xc93c,		0x21, 0
+	.dw 0xefc0, 0xc93c,	0xefff, 0xc93c,		0x21, 0
+	.dw 0xf040, 0xc93c,	0xf07f, 0xc93c,		0x21, 0
+	.dw 0xf0c0, 0xc93c,	0xf0ff, 0xc93c,		0x21, 0
+	.dw 0xf140, 0xc93c,	0xf17f, 0xc93c,		0x21, 0
+	.dw 0xf1c0, 0xc93c,	0xf1ff, 0xc93c,		0x21, 0
+	.dw 0xf240, 0xc93c,	0xf27f, 0xc93c,		0x21, 0
+	.dw 0xf2c0, 0xc93c,	0xf2ff, 0xc93c,		0x21, 0
+	.dw 0xf340, 0xc93c,	0xf37f, 0xc93c,		0x21, 0
+	.dw 0xf3c0, 0xc93c,	0xf3ff, 0xc93c,		0x21, 0
+	.dw 0xf440, 0xc93c,	0xf47f, 0xc93c,		0x21, 0
+	.dw 0xf4c0, 0xc93c,	0xf4ff, 0xc93c,		0x21, 0
+	.dw 0xf540, 0xc93c,	0xf57f, 0xc93c,		0x21, 0
+	.dw 0xf5c0, 0xc93c,	0xf5ff, 0xc93c,		0x21, 0
+	.dw 0xf640, 0xc93c,	0xf67f, 0xc93c,		0x21, 0
+	.dw 0xf6c0, 0xc93c,	0xf6ff, 0xc93c,		0x21, 0
+	.dw 0xf740, 0xc93c,	0xf77f, 0xc93c,		0x21, 0
+	.dw 0xf7c0, 0xc93c,	0xf7ff, 0xc93c,		0x21, 0
+	.dw 0xf840, 0xc93c,	0xf87f, 0xc93c,		0x21, 0
+	.dw 0xf8c0, 0xc93c,	0xf8ff, 0xc93c,		0x21, 0
+	.dw 0xf940, 0xc93c,	0xf97f, 0xc93c,		0x21, 0
+	.dw 0xf9c0, 0xc93c,	0xffff, 0xc93c,		0x21, 0
+	.dw 0x0040, 0xc93d,	0x007f, 0xc93d,		0x21, 0
+	.dw 0x00c0, 0xc93d,	0x00ff, 0xc93d,		0x21, 0
+	.dw 0x0140, 0xc93d,	0x017f, 0xc93d,		0x21, 0
+	.dw 0x01c0, 0xc93d,	0x01ff, 0xc93d,		0x21, 0
+	.dw 0x0240, 0xc93d,	0x027f, 0xc93d,		0x21, 0
+	.dw 0x02c0, 0xc93d,	0x02ff, 0xc93d,		0x21, 0
+	.dw 0x0340, 0xc93d,	0x037f, 0xc93d,		0x21, 0
+	.dw 0x03c0, 0xc93d,	0x03ff, 0xc93d,		0x21, 0
+	.dw 0x0440, 0xc93d,	0x047f, 0xc93d,		0x21, 0
+	.dw 0x04c0, 0xc93d,	0x04ff, 0xc93d,		0x21, 0
+	.dw 0x0540, 0xc93d,	0x057f, 0xc93d,		0x21, 0
+	.dw 0x05c0, 0xc93d,	0x05ff, 0xc93d,		0x21, 0
+	.dw 0x0640, 0xc93d,	0x067f, 0xc93d,		0x21, 0
+	.dw 0x06c0, 0xc93d,	0x06ff, 0xc93d,		0x21, 0
+	.dw 0x0740, 0xc93d,	0x077f, 0xc93d,		0x21, 0
+	.dw 0x07c0, 0xc93d,	0x07ff, 0xc93d,		0x21, 0
+	.dw 0x0840, 0xc93d,	0x087f, 0xc93d,		0x21, 0
+	.dw 0x08c0, 0xc93d,	0x08ff, 0xc93d,		0x21, 0
+	.dw 0x0940, 0xc93d,	0x097f, 0xc93d,		0x21, 0
+	.dw 0x09c0, 0xc93d,	0x09ff, 0xc93d,		0x21, 0
+	.dw 0x0a40, 0xc93d,	0x0a7f, 0xc93d,		0x21, 0
+	.dw 0x0ac0, 0xc93d,	0x0aff, 0xc93d,		0x21, 0
+	.dw 0x0b40, 0xc93d,	0x0b7f, 0xc93d,		0x21, 0
+	.dw 0x0bc0, 0xc93d,	0x0bff, 0xc93d,		0x21, 0
+	.dw 0x0c40, 0xc93d,	0x0c7f, 0xc93d,		0x21, 0
+	.dw 0x0cc0, 0xc93d,	0x0cff, 0xc93d,		0x21, 0
+	.dw 0x0d40, 0xc93d,	0x0d7f, 0xc93d,		0x21, 0
+	.dw 0x0dc0, 0xc93d,	0x0dff, 0xc93d,		0x21, 0
+	.dw 0x0e40, 0xc93d,	0x0e7f, 0xc93d,		0x21, 0
+	.dw 0x0ec0, 0xc93d,	0x0eff, 0xc93d,		0x21, 0
+	.dw 0x0f40, 0xc93d,	0x0f7f, 0xc93d,		0x21, 0
+	.dw 0x0fc0, 0xc93d,	0x0fff, 0xc93d,		0x21, 0
+	.dw 0x1040, 0xc93d,	0x107f, 0xc93d,		0x21, 0
+	.dw 0x10c0, 0xc93d,	0x10ff, 0xc93d,		0x21, 0
+	.dw 0x1140, 0xc93d,	0x117f, 0xc93d,		0x21, 0
+	.dw 0x11c0, 0xc93d,	0x11ff, 0xc93d,		0x21, 0
+	.dw 0x1240, 0xc93d,	0x127f, 0xc93d,		0x21, 0
+	.dw 0x12c0, 0xc93d,	0x12ff, 0xc93d,		0x21, 0
+	.dw 0x1340, 0xc93d,	0x137f, 0xc93d,		0x21, 0
+	.dw 0x13c0, 0xc93d,	0x13ff, 0xc93d,		0x21, 0
+	.dw 0x1440, 0xc93d,	0x147f, 0xc93d,		0x21, 0
+	.dw 0x14c0, 0xc93d,	0x14ff, 0xc93d,		0x21, 0
+	.dw 0x1540, 0xc93d,	0x157f, 0xc93d,		0x21, 0
+	.dw 0x15c0, 0xc93d,	0x15ff, 0xc93d,		0x21, 0
+	.dw 0x1640, 0xc93d,	0x167f, 0xc93d,		0x21, 0
+	.dw 0x16c0, 0xc93d,	0x16ff, 0xc93d,		0x21, 0
+	.dw 0x1740, 0xc93d,	0x177f, 0xc93d,		0x21, 0
+	.dw 0x17c0, 0xc93d,	0x17ff, 0xc93d,		0x21, 0
+	.dw 0x1840, 0xc93d,	0x187f, 0xc93d,		0x21, 0
+	.dw 0x18c0, 0xc93d,	0x18ff, 0xc93d,		0x21, 0
+	.dw 0x1940, 0xc93d,	0x197f, 0xc93d,		0x21, 0
+	.dw 0x19c0, 0xc93d,	0x1fff, 0xc93d,		0x21, 0
+	.dw 0x2040, 0xc93d,	0x207f, 0xc93d,		0x21, 0
+	.dw 0x20c0, 0xc93d,	0x20ff, 0xc93d,		0x21, 0
+	.dw 0x2140, 0xc93d,	0x217f, 0xc93d,		0x21, 0
+	.dw 0x21c0, 0xc93d,	0x21ff, 0xc93d,		0x21, 0
+	.dw 0x2240, 0xc93d,	0x227f, 0xc93d,		0x21, 0
+	.dw 0x22c0, 0xc93d,	0x22ff, 0xc93d,		0x21, 0
+	.dw 0x2340, 0xc93d,	0x237f, 0xc93d,		0x21, 0
+	.dw 0x23c0, 0xc93d,	0x23ff, 0xc93d,		0x21, 0
+	.dw 0x2440, 0xc93d,	0x247f, 0xc93d,		0x21, 0
+	.dw 0x24c0, 0xc93d,	0x24ff, 0xc93d,		0x21, 0
+	.dw 0x2540, 0xc93d,	0x257f, 0xc93d,		0x21, 0
+	.dw 0x25c0, 0xc93d,	0x25ff, 0xc93d,		0x21, 0
+	.dw 0x2640, 0xc93d,	0x267f, 0xc93d,		0x21, 0
+	.dw 0x26c0, 0xc93d,	0x26ff, 0xc93d,		0x21, 0
+	.dw 0x2740, 0xc93d,	0x277f, 0xc93d,		0x21, 0
+	.dw 0x27c0, 0xc93d,	0x27ff, 0xc93d,		0x21, 0
+	.dw 0x2840, 0xc93d,	0x287f, 0xc93d,		0x21, 0
+	.dw 0x28c0, 0xc93d,	0x28ff, 0xc93d,		0x21, 0
+	.dw 0x2940, 0xc93d,	0x297f, 0xc93d,		0x21, 0
+	.dw 0x29c0, 0xc93d,	0x29ff, 0xc93d,		0x21, 0
+	.dw 0x2a40, 0xc93d,	0x2a7f, 0xc93d,		0x21, 0
+	.dw 0x2ac0, 0xc93d,	0x2aff, 0xc93d,		0x21, 0
+	.dw 0x2b40, 0xc93d,	0x2b7f, 0xc93d,		0x21, 0
+	.dw 0x2bc0, 0xc93d,	0x2bff, 0xc93d,		0x21, 0
+	.dw 0x2c40, 0xc93d,	0x2c7f, 0xc93d,		0x21, 0
+	.dw 0x2cc0, 0xc93d,	0x2cff, 0xc93d,		0x21, 0
+	.dw 0x2d40, 0xc93d,	0x2d7f, 0xc93d,		0x21, 0
+	.dw 0x2dc0, 0xc93d,	0x2dff, 0xc93d,		0x21, 0
+	.dw 0x2e40, 0xc93d,	0x2e7f, 0xc93d,		0x21, 0
+	.dw 0x2ec0, 0xc93d,	0x2eff, 0xc93d,		0x21, 0
+	.dw 0x2f40, 0xc93d,	0x2f7f, 0xc93d,		0x21, 0
+	.dw 0x2fc0, 0xc93d,	0x2fff, 0xc93d,		0x21, 0
+	.dw 0x3040, 0xc93d,	0x307f, 0xc93d,		0x21, 0
+	.dw 0x30c0, 0xc93d,	0x30ff, 0xc93d,		0x21, 0
+	.dw 0x3140, 0xc93d,	0x317f, 0xc93d,		0x21, 0
+	.dw 0x31c0, 0xc93d,	0x31ff, 0xc93d,		0x21, 0
+	.dw 0x3240, 0xc93d,	0x327f, 0xc93d,		0x21, 0
+	.dw 0x32c0, 0xc93d,	0x32ff, 0xc93d,		0x21, 0
+	.dw 0x3340, 0xc93d,	0x337f, 0xc93d,		0x21, 0
+	.dw 0x33c0, 0xc93d,	0x33ff, 0xc93d,		0x21, 0
+	.dw 0x3440, 0xc93d,	0x347f, 0xc93d,		0x21, 0
+	.dw 0x34c0, 0xc93d,	0x34ff, 0xc93d,		0x21, 0
+	.dw 0x3540, 0xc93d,	0x357f, 0xc93d,		0x21, 0
+	.dw 0x35c0, 0xc93d,	0x35ff, 0xc93d,		0x21, 0
+	.dw 0x3640, 0xc93d,	0x367f, 0xc93d,		0x21, 0
+	.dw 0x36c0, 0xc93d,	0x36ff, 0xc93d,		0x21, 0
+	.dw 0x3740, 0xc93d,	0x377f, 0xc93d,		0x21, 0
+	.dw 0x37c0, 0xc93d,	0x37ff, 0xc93d,		0x21, 0
+	.dw 0x3840, 0xc93d,	0x387f, 0xc93d,		0x21, 0
+	.dw 0x38c0, 0xc93d,	0x38ff, 0xc93d,		0x21, 0
+	.dw 0x3940, 0xc93d,	0x397f, 0xc93d,		0x21, 0
+	.dw 0x39c0, 0xc93d,	0x3fff, 0xc93d,		0x21, 0
+	.dw 0x4040, 0xc93d,	0x407f, 0xc93d,		0x21, 0
+	.dw 0x40c0, 0xc93d,	0x40ff, 0xc93d,		0x21, 0
+	.dw 0x4140, 0xc93d,	0x417f, 0xc93d,		0x21, 0
+	.dw 0x41c0, 0xc93d,	0x41ff, 0xc93d,		0x21, 0
+	.dw 0x4240, 0xc93d,	0x427f, 0xc93d,		0x21, 0
+	.dw 0x42c0, 0xc93d,	0x42ff, 0xc93d,		0x21, 0
+	.dw 0x4340, 0xc93d,	0x437f, 0xc93d,		0x21, 0
+	.dw 0x43c0, 0xc93d,	0x43ff, 0xc93d,		0x21, 0
+	.dw 0x4440, 0xc93d,	0x447f, 0xc93d,		0x21, 0
+	.dw 0x44c0, 0xc93d,	0x44ff, 0xc93d,		0x21, 0
+	.dw 0x4540, 0xc93d,	0x457f, 0xc93d,		0x21, 0
+	.dw 0x45c0, 0xc93d,	0x45ff, 0xc93d,		0x21, 0
+	.dw 0x4640, 0xc93d,	0x467f, 0xc93d,		0x21, 0
+	.dw 0x46c0, 0xc93d,	0x46ff, 0xc93d,		0x21, 0
+	.dw 0x4740, 0xc93d,	0x477f, 0xc93d,		0x21, 0
+	.dw 0x47c0, 0xc93d,	0x47ff, 0xc93d,		0x21, 0
+	.dw 0x4840, 0xc93d,	0x487f, 0xc93d,		0x21, 0
+	.dw 0x48c0, 0xc93d,	0x48ff, 0xc93d,		0x21, 0
+	.dw 0x4940, 0xc93d,	0x497f, 0xc93d,		0x21, 0
+	.dw 0x49c0, 0xc93d,	0x49ff, 0xc93d,		0x21, 0
+	.dw 0x4a40, 0xc93d,	0x4a7f, 0xc93d,		0x21, 0
+	.dw 0x4ac0, 0xc93d,	0x4aff, 0xc93d,		0x21, 0
+	.dw 0x4b40, 0xc93d,	0x4b7f, 0xc93d,		0x21, 0
+	.dw 0x4bc0, 0xc93d,	0x4bff, 0xc93d,		0x21, 0
+	.dw 0x4c40, 0xc93d,	0x4c7f, 0xc93d,		0x21, 0
+	.dw 0x4cc0, 0xc93d,	0x4cff, 0xc93d,		0x21, 0
+	.dw 0x4d40, 0xc93d,	0x4d7f, 0xc93d,		0x21, 0
+	.dw 0x4dc0, 0xc93d,	0x4dff, 0xc93d,		0x21, 0
+	.dw 0x4e40, 0xc93d,	0x4e7f, 0xc93d,		0x21, 0
+	.dw 0x4ec0, 0xc93d,	0x4eff, 0xc93d,		0x21, 0
+	.dw 0x4f40, 0xc93d,	0x4f7f, 0xc93d,		0x21, 0
+	.dw 0x4fc0, 0xc93d,	0x4fff, 0xc93d,		0x21, 0
+	.dw 0x5040, 0xc93d,	0x507f, 0xc93d,		0x21, 0
+	.dw 0x50c0, 0xc93d,	0x50ff, 0xc93d,		0x21, 0
+	.dw 0x5140, 0xc93d,	0x517f, 0xc93d,		0x21, 0
+	.dw 0x51c0, 0xc93d,	0x51ff, 0xc93d,		0x21, 0
+	.dw 0x5240, 0xc93d,	0x527f, 0xc93d,		0x21, 0
+	.dw 0x52c0, 0xc93d,	0x52ff, 0xc93d,		0x21, 0
+	.dw 0x5340, 0xc93d,	0x537f, 0xc93d,		0x21, 0
+	.dw 0x53c0, 0xc93d,	0x53ff, 0xc93d,		0x21, 0
+	.dw 0x5440, 0xc93d,	0x547f, 0xc93d,		0x21, 0
+	.dw 0x54c0, 0xc93d,	0x54ff, 0xc93d,		0x21, 0
+	.dw 0x5540, 0xc93d,	0x557f, 0xc93d,		0x21, 0
+	.dw 0x55c0, 0xc93d,	0x55ff, 0xc93d,		0x21, 0
+	.dw 0x5640, 0xc93d,	0x567f, 0xc93d,		0x21, 0
+	.dw 0x56c0, 0xc93d,	0x56ff, 0xc93d,		0x21, 0
+	.dw 0x5740, 0xc93d,	0x577f, 0xc93d,		0x21, 0
+	.dw 0x57c0, 0xc93d,	0x57ff, 0xc93d,		0x21, 0
+	.dw 0x5840, 0xc93d,	0x587f, 0xc93d,		0x21, 0
+	.dw 0x58c0, 0xc93d,	0x58ff, 0xc93d,		0x21, 0
+	.dw 0x5940, 0xc93d,	0x597f, 0xc93d,		0x21, 0
+	.dw 0x59c0, 0xc93d,	0x5fff, 0xc93d,		0x21, 0
+	.dw 0x6040, 0xc93d,	0x607f, 0xc93d,		0x21, 0
+	.dw 0x60c0, 0xc93d,	0x60ff, 0xc93d,		0x21, 0
+	.dw 0x6140, 0xc93d,	0x617f, 0xc93d,		0x21, 0
+	.dw 0x61c0, 0xc93d,	0x61ff, 0xc93d,		0x21, 0
+	.dw 0x6240, 0xc93d,	0x627f, 0xc93d,		0x21, 0
+	.dw 0x62c0, 0xc93d,	0x62ff, 0xc93d,		0x21, 0
+	.dw 0x6340, 0xc93d,	0x637f, 0xc93d,		0x21, 0
+	.dw 0x63c0, 0xc93d,	0x63ff, 0xc93d,		0x21, 0
+	.dw 0x6440, 0xc93d,	0x647f, 0xc93d,		0x21, 0
+	.dw 0x64c0, 0xc93d,	0x64ff, 0xc93d,		0x21, 0
+	.dw 0x6540, 0xc93d,	0x657f, 0xc93d,		0x21, 0
+	.dw 0x65c0, 0xc93d,	0x65ff, 0xc93d,		0x21, 0
+	.dw 0x6640, 0xc93d,	0x667f, 0xc93d,		0x21, 0
+	.dw 0x66c0, 0xc93d,	0x66ff, 0xc93d,		0x21, 0
+	.dw 0x6740, 0xc93d,	0x677f, 0xc93d,		0x21, 0
+	.dw 0x67c0, 0xc93d,	0x67ff, 0xc93d,		0x21, 0
+	.dw 0x6840, 0xc93d,	0x687f, 0xc93d,		0x21, 0
+	.dw 0x68c0, 0xc93d,	0x68ff, 0xc93d,		0x21, 0
+	.dw 0x6940, 0xc93d,	0x697f, 0xc93d,		0x21, 0
+	.dw 0x69c0, 0xc93d,	0x69ff, 0xc93d,		0x21, 0
+	.dw 0x6a40, 0xc93d,	0x6a7f, 0xc93d,		0x21, 0
+	.dw 0x6ac0, 0xc93d,	0x6aff, 0xc93d,		0x21, 0
+	.dw 0x6b40, 0xc93d,	0x6b7f, 0xc93d,		0x21, 0
+	.dw 0x6bc0, 0xc93d,	0x6bff, 0xc93d,		0x21, 0
+	.dw 0x6c40, 0xc93d,	0x6c7f, 0xc93d,		0x21, 0
+	.dw 0x6cc0, 0xc93d,	0x6cff, 0xc93d,		0x21, 0
+	.dw 0x6d40, 0xc93d,	0x6d7f, 0xc93d,		0x21, 0
+	.dw 0x6dc0, 0xc93d,	0x6dff, 0xc93d,		0x21, 0
+	.dw 0x6e40, 0xc93d,	0x6e7f, 0xc93d,		0x21, 0
+	.dw 0x6ec0, 0xc93d,	0x6eff, 0xc93d,		0x21, 0
+	.dw 0x6f40, 0xc93d,	0x6f7f, 0xc93d,		0x21, 0
+	.dw 0x6fc0, 0xc93d,	0x6fff, 0xc93d,		0x21, 0
+	.dw 0x7040, 0xc93d,	0x707f, 0xc93d,		0x21, 0
+	.dw 0x70c0, 0xc93d,	0x70ff, 0xc93d,		0x21, 0
+	.dw 0x7140, 0xc93d,	0x717f, 0xc93d,		0x21, 0
+	.dw 0x71c0, 0xc93d,	0x71ff, 0xc93d,		0x21, 0
+	.dw 0x7240, 0xc93d,	0x727f, 0xc93d,		0x21, 0
+	.dw 0x72c0, 0xc93d,	0x72ff, 0xc93d,		0x21, 0
+	.dw 0x7340, 0xc93d,	0x737f, 0xc93d,		0x21, 0
+	.dw 0x73c0, 0xc93d,	0x73ff, 0xc93d,		0x21, 0
+	.dw 0x7440, 0xc93d,	0x747f, 0xc93d,		0x21, 0
+	.dw 0x74c0, 0xc93d,	0x74ff, 0xc93d,		0x21, 0
+	.dw 0x7540, 0xc93d,	0x757f, 0xc93d,		0x21, 0
+	.dw 0x75c0, 0xc93d,	0x75ff, 0xc93d,		0x21, 0
+	.dw 0x7640, 0xc93d,	0x767f, 0xc93d,		0x21, 0
+	.dw 0x76c0, 0xc93d,	0x76ff, 0xc93d,		0x21, 0
+	.dw 0x7740, 0xc93d,	0x777f, 0xc93d,		0x21, 0
+	.dw 0x77c0, 0xc93d,	0x77ff, 0xc93d,		0x21, 0
+	.dw 0x7840, 0xc93d,	0x787f, 0xc93d,		0x21, 0
+	.dw 0x78c0, 0xc93d,	0x78ff, 0xc93d,		0x21, 0
+	.dw 0x7940, 0xc93d,	0x797f, 0xc93d,		0x21, 0
+	.dw 0x79c0, 0xc93d,	0x7fff, 0xc93d,		0x21, 0
+	.dw 0x8040, 0xc93d,	0x807f, 0xc93d,		0x21, 0
+	.dw 0x80c0, 0xc93d,	0x80ff, 0xc93d,		0x21, 0
+	.dw 0x8140, 0xc93d,	0x817f, 0xc93d,		0x21, 0
+	.dw 0x81c0, 0xc93d,	0x81ff, 0xc93d,		0x21, 0
+	.dw 0x8240, 0xc93d,	0x827f, 0xc93d,		0x21, 0
+	.dw 0x82c0, 0xc93d,	0x82ff, 0xc93d,		0x21, 0
+	.dw 0x8340, 0xc93d,	0x837f, 0xc93d,		0x21, 0
+	.dw 0x83c0, 0xc93d,	0x83ff, 0xc93d,		0x21, 0
+	.dw 0x8440, 0xc93d,	0x847f, 0xc93d,		0x21, 0
+	.dw 0x84c0, 0xc93d,	0x84ff, 0xc93d,		0x21, 0
+	.dw 0x8540, 0xc93d,	0x857f, 0xc93d,		0x21, 0
+	.dw 0x85c0, 0xc93d,	0x85ff, 0xc93d,		0x21, 0
+	.dw 0x8640, 0xc93d,	0x867f, 0xc93d,		0x21, 0
+	.dw 0x86c0, 0xc93d,	0x86ff, 0xc93d,		0x21, 0
+	.dw 0x8740, 0xc93d,	0x877f, 0xc93d,		0x21, 0
+	.dw 0x87c0, 0xc93d,	0x87ff, 0xc93d,		0x21, 0
+	.dw 0x8840, 0xc93d,	0x887f, 0xc93d,		0x21, 0
+	.dw 0x88c0, 0xc93d,	0x88ff, 0xc93d,		0x21, 0
+	.dw 0x8940, 0xc93d,	0x897f, 0xc93d,		0x21, 0
+	.dw 0x89c0, 0xc93d,	0x89ff, 0xc93d,		0x21, 0
+	.dw 0x8a40, 0xc93d,	0x8a7f, 0xc93d,		0x21, 0
+	.dw 0x8ac0, 0xc93d,	0x8aff, 0xc93d,		0x21, 0
+	.dw 0x8b40, 0xc93d,	0x8b7f, 0xc93d,		0x21, 0
+	.dw 0x8bc0, 0xc93d,	0x8bff, 0xc93d,		0x21, 0
+	.dw 0x8c40, 0xc93d,	0x8c7f, 0xc93d,		0x21, 0
+	.dw 0x8cc0, 0xc93d,	0x8cff, 0xc93d,		0x21, 0
+	.dw 0x8d40, 0xc93d,	0x8d7f, 0xc93d,		0x21, 0
+	.dw 0x8dc0, 0xc93d,	0x8dff, 0xc93d,		0x21, 0
+	.dw 0x8e40, 0xc93d,	0x8e7f, 0xc93d,		0x21, 0
+	.dw 0x8ec0, 0xc93d,	0x8eff, 0xc93d,		0x21, 0
+	.dw 0x8f40, 0xc93d,	0x8f7f, 0xc93d,		0x21, 0
+	.dw 0x8fc0, 0xc93d,	0x8fff, 0xc93d,		0x21, 0
+	.dw 0x9040, 0xc93d,	0x907f, 0xc93d,		0x21, 0
+	.dw 0x90c0, 0xc93d,	0x90ff, 0xc93d,		0x21, 0
+	.dw 0x9140, 0xc93d,	0x917f, 0xc93d,		0x21, 0
+	.dw 0x91c0, 0xc93d,	0x91ff, 0xc93d,		0x21, 0
+	.dw 0x9240, 0xc93d,	0x927f, 0xc93d,		0x21, 0
+	.dw 0x92c0, 0xc93d,	0x92ff, 0xc93d,		0x21, 0
+	.dw 0x9340, 0xc93d,	0x937f, 0xc93d,		0x21, 0
+	.dw 0x93c0, 0xc93d,	0x93ff, 0xc93d,		0x21, 0
+	.dw 0x9440, 0xc93d,	0x947f, 0xc93d,		0x21, 0
+	.dw 0x94c0, 0xc93d,	0x94ff, 0xc93d,		0x21, 0
+	.dw 0x9540, 0xc93d,	0x957f, 0xc93d,		0x21, 0
+	.dw 0x95c0, 0xc93d,	0x95ff, 0xc93d,		0x21, 0
+	.dw 0x9640, 0xc93d,	0x967f, 0xc93d,		0x21, 0
+	.dw 0x96c0, 0xc93d,	0x96ff, 0xc93d,		0x21, 0
+	.dw 0x9740, 0xc93d,	0x977f, 0xc93d,		0x21, 0
+	.dw 0x97c0, 0xc93d,	0x97ff, 0xc93d,		0x21, 0
+	.dw 0x9840, 0xc93d,	0x987f, 0xc93d,		0x21, 0
+	.dw 0x98c0, 0xc93d,	0x98ff, 0xc93d,		0x21, 0
+	.dw 0x9940, 0xc93d,	0x997f, 0xc93d,		0x21, 0
+	.dw 0x99c0, 0xc93d,	0x9fff, 0xc93d,		0x21, 0
+	.dw 0xa040, 0xc93d,	0xa07f, 0xc93d,		0x21, 0
+	.dw 0xa0c0, 0xc93d,	0xa0ff, 0xc93d,		0x21, 0
+	.dw 0xa140, 0xc93d,	0xa17f, 0xc93d,		0x21, 0
+	.dw 0xa1c0, 0xc93d,	0xa1ff, 0xc93d,		0x21, 0
+	.dw 0xa240, 0xc93d,	0xa27f, 0xc93d,		0x21, 0
+	.dw 0xa2c0, 0xc93d,	0xa2ff, 0xc93d,		0x21, 0
+	.dw 0xa340, 0xc93d,	0xa37f, 0xc93d,		0x21, 0
+	.dw 0xa3c0, 0xc93d,	0xa3ff, 0xc93d,		0x21, 0
+	.dw 0xa440, 0xc93d,	0xa47f, 0xc93d,		0x21, 0
+	.dw 0xa4c0, 0xc93d,	0xa4ff, 0xc93d,		0x21, 0
+	.dw 0xa540, 0xc93d,	0xa57f, 0xc93d,		0x21, 0
+	.dw 0xa5c0, 0xc93d,	0xa5ff, 0xc93d,		0x21, 0
+	.dw 0xa640, 0xc93d,	0xa67f, 0xc93d,		0x21, 0
+	.dw 0xa6c0, 0xc93d,	0xa6ff, 0xc93d,		0x21, 0
+	.dw 0xa740, 0xc93d,	0xa77f, 0xc93d,		0x21, 0
+	.dw 0xa7c0, 0xc93d,	0xa7ff, 0xc93d,		0x21, 0
+	.dw 0xa840, 0xc93d,	0xa87f, 0xc93d,		0x21, 0
+	.dw 0xa8c0, 0xc93d,	0xa8ff, 0xc93d,		0x21, 0
+	.dw 0xa940, 0xc93d,	0xa97f, 0xc93d,		0x21, 0
+	.dw 0xa9c0, 0xc93d,	0xa9ff, 0xc93d,		0x21, 0
+	.dw 0xaa40, 0xc93d,	0xaa7f, 0xc93d,		0x21, 0
+	.dw 0xaac0, 0xc93d,	0xaaff, 0xc93d,		0x21, 0
+	.dw 0xab40, 0xc93d,	0xab7f, 0xc93d,		0x21, 0
+	.dw 0xabc0, 0xc93d,	0xabff, 0xc93d,		0x21, 0
+	.dw 0xac40, 0xc93d,	0xac7f, 0xc93d,		0x21, 0
+	.dw 0xacc0, 0xc93d,	0xacff, 0xc93d,		0x21, 0
+	.dw 0xad40, 0xc93d,	0xad7f, 0xc93d,		0x21, 0
+	.dw 0xadc0, 0xc93d,	0xadff, 0xc93d,		0x21, 0
+	.dw 0xae40, 0xc93d,	0xae7f, 0xc93d,		0x21, 0
+	.dw 0xaec0, 0xc93d,	0xaeff, 0xc93d,		0x21, 0
+	.dw 0xaf40, 0xc93d,	0xaf7f, 0xc93d,		0x21, 0
+	.dw 0xafc0, 0xc93d,	0xafff, 0xc93d,		0x21, 0
+	.dw 0xb040, 0xc93d,	0xb07f, 0xc93d,		0x21, 0
+	.dw 0xb0c0, 0xc93d,	0xb0ff, 0xc93d,		0x21, 0
+	.dw 0xb140, 0xc93d,	0xb17f, 0xc93d,		0x21, 0
+	.dw 0xb1c0, 0xc93d,	0xb1ff, 0xc93d,		0x21, 0
+	.dw 0xb240, 0xc93d,	0xb27f, 0xc93d,		0x21, 0
+	.dw 0xb2c0, 0xc93d,	0xb2ff, 0xc93d,		0x21, 0
+	.dw 0xb340, 0xc93d,	0xb37f, 0xc93d,		0x21, 0
+	.dw 0xb3c0, 0xc93d,	0xb3ff, 0xc93d,		0x21, 0
+	.dw 0xb440, 0xc93d,	0xb47f, 0xc93d,		0x21, 0
+	.dw 0xb4c0, 0xc93d,	0xb4ff, 0xc93d,		0x21, 0
+	.dw 0xb540, 0xc93d,	0xb57f, 0xc93d,		0x21, 0
+	.dw 0xb5c0, 0xc93d,	0xb5ff, 0xc93d,		0x21, 0
+	.dw 0xb640, 0xc93d,	0xb67f, 0xc93d,		0x21, 0
+	.dw 0xb6c0, 0xc93d,	0xb6ff, 0xc93d,		0x21, 0
+	.dw 0xb740, 0xc93d,	0xb77f, 0xc93d,		0x21, 0
+	.dw 0xb7c0, 0xc93d,	0xb7ff, 0xc93d,		0x21, 0
+	.dw 0xb840, 0xc93d,	0xb87f, 0xc93d,		0x21, 0
+	.dw 0xb8c0, 0xc93d,	0xb8ff, 0xc93d,		0x21, 0
+	.dw 0xb940, 0xc93d,	0xb97f, 0xc93d,		0x21, 0
+	.dw 0xb9c0, 0xc93d,	0xbfff, 0xc93d,		0x21, 0
+	.dw 0xc040, 0xc93d,	0xc07f, 0xc93d,		0x21, 0
+	.dw 0xc0c0, 0xc93d,	0xc0ff, 0xc93d,		0x21, 0
+	.dw 0xc140, 0xc93d,	0xc17f, 0xc93d,		0x21, 0
+	.dw 0xc1c0, 0xc93d,	0xc1ff, 0xc93d,		0x21, 0
+	.dw 0xc240, 0xc93d,	0xc27f, 0xc93d,		0x21, 0
+	.dw 0xc2c0, 0xc93d,	0xc2ff, 0xc93d,		0x21, 0
+	.dw 0xc340, 0xc93d,	0xc37f, 0xc93d,		0x21, 0
+	.dw 0xc3c0, 0xc93d,	0xc3ff, 0xc93d,		0x21, 0
+	.dw 0xc440, 0xc93d,	0xc47f, 0xc93d,		0x21, 0
+	.dw 0xc4c0, 0xc93d,	0xc4ff, 0xc93d,		0x21, 0
+	.dw 0xc540, 0xc93d,	0xc57f, 0xc93d,		0x21, 0
+	.dw 0xc5c0, 0xc93d,	0xc5ff, 0xc93d,		0x21, 0
+	.dw 0xc640, 0xc93d,	0xc67f, 0xc93d,		0x21, 0
+	.dw 0xc6c0, 0xc93d,	0xc6ff, 0xc93d,		0x21, 0
+	.dw 0xc740, 0xc93d,	0xc77f, 0xc93d,		0x21, 0
+	.dw 0xc7c0, 0xc93d,	0xc7ff, 0xc93d,		0x21, 0
+	.dw 0xc840, 0xc93d,	0xc87f, 0xc93d,		0x21, 0
+	.dw 0xc8c0, 0xc93d,	0xc8ff, 0xc93d,		0x21, 0
+	.dw 0xc940, 0xc93d,	0xc97f, 0xc93d,		0x21, 0
+	.dw 0xc9c0, 0xc93d,	0xc9ff, 0xc93d,		0x21, 0
+	.dw 0xca40, 0xc93d,	0xca7f, 0xc93d,		0x21, 0
+	.dw 0xcac0, 0xc93d,	0xcaff, 0xc93d,		0x21, 0
+	.dw 0xcb40, 0xc93d,	0xcb7f, 0xc93d,		0x21, 0
+	.dw 0xcbc0, 0xc93d,	0xcbff, 0xc93d,		0x21, 0
+	.dw 0xcc40, 0xc93d,	0xcc7f, 0xc93d,		0x21, 0
+	.dw 0xccc0, 0xc93d,	0xccff, 0xc93d,		0x21, 0
+	.dw 0xcd40, 0xc93d,	0xcd7f, 0xc93d,		0x21, 0
+	.dw 0xcdc0, 0xc93d,	0xcdff, 0xc93d,		0x21, 0
+	.dw 0xce40, 0xc93d,	0xce7f, 0xc93d,		0x21, 0
+	.dw 0xcec0, 0xc93d,	0xceff, 0xc93d,		0x21, 0
+	.dw 0xcf40, 0xc93d,	0xcf7f, 0xc93d,		0x21, 0
+	.dw 0xcfc0, 0xc93d,	0xcfff, 0xc93d,		0x21, 0
+	.dw 0xd040, 0xc93d,	0xd07f, 0xc93d,		0x21, 0
+	.dw 0xd0c0, 0xc93d,	0xd0ff, 0xc93d,		0x21, 0
+	.dw 0xd140, 0xc93d,	0xd17f, 0xc93d,		0x21, 0
+	.dw 0xd1c0, 0xc93d,	0xd1ff, 0xc93d,		0x21, 0
+	.dw 0xd240, 0xc93d,	0xd27f, 0xc93d,		0x21, 0
+	.dw 0xd2c0, 0xc93d,	0xd2ff, 0xc93d,		0x21, 0
+	.dw 0xd340, 0xc93d,	0xd37f, 0xc93d,		0x21, 0
+	.dw 0xd3c0, 0xc93d,	0xd3ff, 0xc93d,		0x21, 0
+	.dw 0xd440, 0xc93d,	0xd47f, 0xc93d,		0x21, 0
+	.dw 0xd4c0, 0xc93d,	0xd4ff, 0xc93d,		0x21, 0
+	.dw 0xd540, 0xc93d,	0xd57f, 0xc93d,		0x21, 0
+	.dw 0xd5c0, 0xc93d,	0xd5ff, 0xc93d,		0x21, 0
+	.dw 0xd640, 0xc93d,	0xd67f, 0xc93d,		0x21, 0
+	.dw 0xd6c0, 0xc93d,	0xd6ff, 0xc93d,		0x21, 0
+	.dw 0xd740, 0xc93d,	0xd77f, 0xc93d,		0x21, 0
+	.dw 0xd7c0, 0xc93d,	0xd7ff, 0xc93d,		0x21, 0
+	.dw 0xd840, 0xc93d,	0xd87f, 0xc93d,		0x21, 0
+	.dw 0xd8c0, 0xc93d,	0xd8ff, 0xc93d,		0x21, 0
+	.dw 0xd940, 0xc93d,	0xd97f, 0xc93d,		0x21, 0
+	.dw 0xd9c0, 0xc93d,	0xdfff, 0xc93d,		0x21, 0
+	.dw 0xe040, 0xc93d,	0xe07f, 0xc93d,		0x21, 0
+	.dw 0xe0c0, 0xc93d,	0xe0ff, 0xc93d,		0x21, 0
+	.dw 0xe140, 0xc93d,	0xe17f, 0xc93d,		0x21, 0
+	.dw 0xe1c0, 0xc93d,	0xe1ff, 0xc93d,		0x21, 0
+	.dw 0xe240, 0xc93d,	0xe27f, 0xc93d,		0x21, 0
+	.dw 0xe2c0, 0xc93d,	0xe2ff, 0xc93d,		0x21, 0
+	.dw 0xe340, 0xc93d,	0xe37f, 0xc93d,		0x21, 0
+	.dw 0xe3c0, 0xc93d,	0xe3ff, 0xc93d,		0x21, 0
+	.dw 0xe440, 0xc93d,	0xe47f, 0xc93d,		0x21, 0
+	.dw 0xe4c0, 0xc93d,	0xe4ff, 0xc93d,		0x21, 0
+	.dw 0xe540, 0xc93d,	0xe57f, 0xc93d,		0x21, 0
+	.dw 0xe5c0, 0xc93d,	0xe5ff, 0xc93d,		0x21, 0
+	.dw 0xe640, 0xc93d,	0xe67f, 0xc93d,		0x21, 0
+	.dw 0xe6c0, 0xc93d,	0xe6ff, 0xc93d,		0x21, 0
+	.dw 0xe740, 0xc93d,	0xe77f, 0xc93d,		0x21, 0
+	.dw 0xe7c0, 0xc93d,	0xe7ff, 0xc93d,		0x21, 0
+	.dw 0xe840, 0xc93d,	0xe87f, 0xc93d,		0x21, 0
+	.dw 0xe8c0, 0xc93d,	0xe8ff, 0xc93d,		0x21, 0
+	.dw 0xe940, 0xc93d,	0xe97f, 0xc93d,		0x21, 0
+	.dw 0xe9c0, 0xc93d,	0xe9ff, 0xc93d,		0x21, 0
+	.dw 0xea40, 0xc93d,	0xea7f, 0xc93d,		0x21, 0
+	.dw 0xeac0, 0xc93d,	0xeaff, 0xc93d,		0x21, 0
+	.dw 0xeb40, 0xc93d,	0xeb7f, 0xc93d,		0x21, 0
+	.dw 0xebc0, 0xc93d,	0xebff, 0xc93d,		0x21, 0
+	.dw 0xec40, 0xc93d,	0xec7f, 0xc93d,		0x21, 0
+	.dw 0xecc0, 0xc93d,	0xecff, 0xc93d,		0x21, 0
+	.dw 0xed40, 0xc93d,	0xed7f, 0xc93d,		0x21, 0
+	.dw 0xedc0, 0xc93d,	0xedff, 0xc93d,		0x21, 0
+	.dw 0xee40, 0xc93d,	0xee7f, 0xc93d,		0x21, 0
+	.dw 0xeec0, 0xc93d,	0xeeff, 0xc93d,		0x21, 0
+	.dw 0xef40, 0xc93d,	0xef7f, 0xc93d,		0x21, 0
+	.dw 0xefc0, 0xc93d,	0xefff, 0xc93d,		0x21, 0
+	.dw 0xf040, 0xc93d,	0xf07f, 0xc93d,		0x21, 0
+	.dw 0xf0c0, 0xc93d,	0xf0ff, 0xc93d,		0x21, 0
+	.dw 0xf140, 0xc93d,	0xf17f, 0xc93d,		0x21, 0
+	.dw 0xf1c0, 0xc93d,	0xf1ff, 0xc93d,		0x21, 0
+	.dw 0xf240, 0xc93d,	0xf27f, 0xc93d,		0x21, 0
+	.dw 0xf2c0, 0xc93d,	0xf2ff, 0xc93d,		0x21, 0
+	.dw 0xf340, 0xc93d,	0xf37f, 0xc93d,		0x21, 0
+	.dw 0xf3c0, 0xc93d,	0xf3ff, 0xc93d,		0x21, 0
+	.dw 0xf440, 0xc93d,	0xf47f, 0xc93d,		0x21, 0
+	.dw 0xf4c0, 0xc93d,	0xf4ff, 0xc93d,		0x21, 0
+	.dw 0xf540, 0xc93d,	0xf57f, 0xc93d,		0x21, 0
+	.dw 0xf5c0, 0xc93d,	0xf5ff, 0xc93d,		0x21, 0
+	.dw 0xf640, 0xc93d,	0xf67f, 0xc93d,		0x21, 0
+	.dw 0xf6c0, 0xc93d,	0xf6ff, 0xc93d,		0x21, 0
+	.dw 0xf740, 0xc93d,	0xf77f, 0xc93d,		0x21, 0
+	.dw 0xf7c0, 0xc93d,	0xf7ff, 0xc93d,		0x21, 0
+	.dw 0xf840, 0xc93d,	0xf87f, 0xc93d,		0x21, 0
+	.dw 0xf8c0, 0xc93d,	0xf8ff, 0xc93d,		0x21, 0
+	.dw 0xf940, 0xc93d,	0xf97f, 0xc93d,		0x21, 0
+	.dw 0xf9c0, 0xc93d,	0xffff, 0xc93d,		0x21, 0
+	.dw 0x0040, 0xc93e,	0x007f, 0xc93e,		0x21, 0
+	.dw 0x00c0, 0xc93e,	0x00ff, 0xc93e,		0x21, 0
+	.dw 0x0140, 0xc93e,	0x017f, 0xc93e,		0x21, 0
+	.dw 0x01c0, 0xc93e,	0x01ff, 0xc93e,		0x21, 0
+	.dw 0x0240, 0xc93e,	0x027f, 0xc93e,		0x21, 0
+	.dw 0x02c0, 0xc93e,	0x02ff, 0xc93e,		0x21, 0
+	.dw 0x0340, 0xc93e,	0x037f, 0xc93e,		0x21, 0
+	.dw 0x03c0, 0xc93e,	0x03ff, 0xc93e,		0x21, 0
+	.dw 0x0440, 0xc93e,	0x047f, 0xc93e,		0x21, 0
+	.dw 0x04c0, 0xc93e,	0x04ff, 0xc93e,		0x21, 0
+	.dw 0x0540, 0xc93e,	0x057f, 0xc93e,		0x21, 0
+	.dw 0x05c0, 0xc93e,	0x05ff, 0xc93e,		0x21, 0
+	.dw 0x0640, 0xc93e,	0x067f, 0xc93e,		0x21, 0
+	.dw 0x06c0, 0xc93e,	0x06ff, 0xc93e,		0x21, 0
+	.dw 0x0740, 0xc93e,	0x077f, 0xc93e,		0x21, 0
+	.dw 0x07c0, 0xc93e,	0x07ff, 0xc93e,		0x21, 0
+	.dw 0x0840, 0xc93e,	0x087f, 0xc93e,		0x21, 0
+	.dw 0x08c0, 0xc93e,	0x08ff, 0xc93e,		0x21, 0
+	.dw 0x0940, 0xc93e,	0x097f, 0xc93e,		0x21, 0
+	.dw 0x09c0, 0xc93e,	0x09ff, 0xc93e,		0x21, 0
+	.dw 0x0a40, 0xc93e,	0x0a7f, 0xc93e,		0x21, 0
+	.dw 0x0ac0, 0xc93e,	0x0aff, 0xc93e,		0x21, 0
+	.dw 0x0b40, 0xc93e,	0x0b7f, 0xc93e,		0x21, 0
+	.dw 0x0bc0, 0xc93e,	0x0bff, 0xc93e,		0x21, 0
+	.dw 0x0c40, 0xc93e,	0x0c7f, 0xc93e,		0x21, 0
+	.dw 0x0cc0, 0xc93e,	0x0cff, 0xc93e,		0x21, 0
+	.dw 0x0d40, 0xc93e,	0x0d7f, 0xc93e,		0x21, 0
+	.dw 0x0dc0, 0xc93e,	0x0dff, 0xc93e,		0x21, 0
+	.dw 0x0e40, 0xc93e,	0x0e7f, 0xc93e,		0x21, 0
+	.dw 0x0ec0, 0xc93e,	0x0eff, 0xc93e,		0x21, 0
+	.dw 0x0f40, 0xc93e,	0x0f7f, 0xc93e,		0x21, 0
+	.dw 0x0fc0, 0xc93e,	0x0fff, 0xc93e,		0x21, 0
+	.dw 0x1040, 0xc93e,	0x107f, 0xc93e,		0x21, 0
+	.dw 0x10c0, 0xc93e,	0x10ff, 0xc93e,		0x21, 0
+	.dw 0x1140, 0xc93e,	0x117f, 0xc93e,		0x21, 0
+	.dw 0x11c0, 0xc93e,	0x11ff, 0xc93e,		0x21, 0
+	.dw 0x1240, 0xc93e,	0x127f, 0xc93e,		0x21, 0
+	.dw 0x12c0, 0xc93e,	0x12ff, 0xc93e,		0x21, 0
+	.dw 0x1340, 0xc93e,	0x137f, 0xc93e,		0x21, 0
+	.dw 0x13c0, 0xc93e,	0x13ff, 0xc93e,		0x21, 0
+	.dw 0x1440, 0xc93e,	0x147f, 0xc93e,		0x21, 0
+	.dw 0x14c0, 0xc93e,	0x14ff, 0xc93e,		0x21, 0
+	.dw 0x1540, 0xc93e,	0x157f, 0xc93e,		0x21, 0
+	.dw 0x15c0, 0xc93e,	0x15ff, 0xc93e,		0x21, 0
+	.dw 0x1640, 0xc93e,	0x167f, 0xc93e,		0x21, 0
+	.dw 0x16c0, 0xc93e,	0x16ff, 0xc93e,		0x21, 0
+	.dw 0x1740, 0xc93e,	0x177f, 0xc93e,		0x21, 0
+	.dw 0x17c0, 0xc93e,	0x17ff, 0xc93e,		0x21, 0
+	.dw 0x1840, 0xc93e,	0x187f, 0xc93e,		0x21, 0
+	.dw 0x18c0, 0xc93e,	0x18ff, 0xc93e,		0x21, 0
+	.dw 0x1940, 0xc93e,	0x197f, 0xc93e,		0x21, 0
+	.dw 0x19c0, 0xc93e,	0x1fff, 0xc93e,		0x21, 0
+	.dw 0x2040, 0xc93e,	0x207f, 0xc93e,		0x21, 0
+	.dw 0x20c0, 0xc93e,	0x20ff, 0xc93e,		0x21, 0
+	.dw 0x2140, 0xc93e,	0x217f, 0xc93e,		0x21, 0
+	.dw 0x21c0, 0xc93e,	0x21ff, 0xc93e,		0x21, 0
+	.dw 0x2240, 0xc93e,	0x227f, 0xc93e,		0x21, 0
+	.dw 0x22c0, 0xc93e,	0x22ff, 0xc93e,		0x21, 0
+	.dw 0x2340, 0xc93e,	0x237f, 0xc93e,		0x21, 0
+	.dw 0x23c0, 0xc93e,	0x23ff, 0xc93e,		0x21, 0
+	.dw 0x2440, 0xc93e,	0x247f, 0xc93e,		0x21, 0
+	.dw 0x24c0, 0xc93e,	0x24ff, 0xc93e,		0x21, 0
+	.dw 0x2540, 0xc93e,	0x257f, 0xc93e,		0x21, 0
+	.dw 0x25c0, 0xc93e,	0x25ff, 0xc93e,		0x21, 0
+	.dw 0x2640, 0xc93e,	0x267f, 0xc93e,		0x21, 0
+	.dw 0x26c0, 0xc93e,	0x26ff, 0xc93e,		0x21, 0
+	.dw 0x2740, 0xc93e,	0x277f, 0xc93e,		0x21, 0
+	.dw 0x27c0, 0xc93e,	0x27ff, 0xc93e,		0x21, 0
+	.dw 0x2840, 0xc93e,	0x287f, 0xc93e,		0x21, 0
+	.dw 0x28c0, 0xc93e,	0x28ff, 0xc93e,		0x21, 0
+	.dw 0x2940, 0xc93e,	0x297f, 0xc93e,		0x21, 0
+	.dw 0x29c0, 0xc93e,	0x29ff, 0xc93e,		0x21, 0
+	.dw 0x2a40, 0xc93e,	0x2a7f, 0xc93e,		0x21, 0
+	.dw 0x2ac0, 0xc93e,	0x2aff, 0xc93e,		0x21, 0
+	.dw 0x2b40, 0xc93e,	0x2b7f, 0xc93e,		0x21, 0
+	.dw 0x2bc0, 0xc93e,	0x2bff, 0xc93e,		0x21, 0
+	.dw 0x2c40, 0xc93e,	0x2c7f, 0xc93e,		0x21, 0
+	.dw 0x2cc0, 0xc93e,	0x2cff, 0xc93e,		0x21, 0
+	.dw 0x2d40, 0xc93e,	0x2d7f, 0xc93e,		0x21, 0
+	.dw 0x2dc0, 0xc93e,	0x2dff, 0xc93e,		0x21, 0
+	.dw 0x2e40, 0xc93e,	0x2e7f, 0xc93e,		0x21, 0
+	.dw 0x2ec0, 0xc93e,	0x2eff, 0xc93e,		0x21, 0
+	.dw 0x2f40, 0xc93e,	0x2f7f, 0xc93e,		0x21, 0
+	.dw 0x2fc0, 0xc93e,	0x2fff, 0xc93e,		0x21, 0
+	.dw 0x3040, 0xc93e,	0x307f, 0xc93e,		0x21, 0
+	.dw 0x30c0, 0xc93e,	0x30ff, 0xc93e,		0x21, 0
+	.dw 0x3140, 0xc93e,	0x317f, 0xc93e,		0x21, 0
+	.dw 0x31c0, 0xc93e,	0x31ff, 0xc93e,		0x21, 0
+	.dw 0x3240, 0xc93e,	0x327f, 0xc93e,		0x21, 0
+	.dw 0x32c0, 0xc93e,	0x32ff, 0xc93e,		0x21, 0
+	.dw 0x3340, 0xc93e,	0x337f, 0xc93e,		0x21, 0
+	.dw 0x33c0, 0xc93e,	0x33ff, 0xc93e,		0x21, 0
+	.dw 0x3440, 0xc93e,	0x347f, 0xc93e,		0x21, 0
+	.dw 0x34c0, 0xc93e,	0x34ff, 0xc93e,		0x21, 0
+	.dw 0x3540, 0xc93e,	0x357f, 0xc93e,		0x21, 0
+	.dw 0x35c0, 0xc93e,	0x35ff, 0xc93e,		0x21, 0
+	.dw 0x3640, 0xc93e,	0x367f, 0xc93e,		0x21, 0
+	.dw 0x36c0, 0xc93e,	0x36ff, 0xc93e,		0x21, 0
+	.dw 0x3740, 0xc93e,	0x377f, 0xc93e,		0x21, 0
+	.dw 0x37c0, 0xc93e,	0x37ff, 0xc93e,		0x21, 0
+	.dw 0x3840, 0xc93e,	0x387f, 0xc93e,		0x21, 0
+	.dw 0x38c0, 0xc93e,	0x38ff, 0xc93e,		0x21, 0
+	.dw 0x3940, 0xc93e,	0x397f, 0xc93e,		0x21, 0
+	.dw 0x39c0, 0xc93e,	0x3fff, 0xc93e,		0x21, 0
+	.dw 0x4040, 0xc93e,	0x407f, 0xc93e,		0x21, 0
+	.dw 0x40c0, 0xc93e,	0x40ff, 0xc93e,		0x21, 0
+	.dw 0x4140, 0xc93e,	0x417f, 0xc93e,		0x21, 0
+	.dw 0x41c0, 0xc93e,	0x41ff, 0xc93e,		0x21, 0
+	.dw 0x4240, 0xc93e,	0x427f, 0xc93e,		0x21, 0
+	.dw 0x42c0, 0xc93e,	0x42ff, 0xc93e,		0x21, 0
+	.dw 0x4340, 0xc93e,	0x437f, 0xc93e,		0x21, 0
+	.dw 0x43c0, 0xc93e,	0x43ff, 0xc93e,		0x21, 0
+	.dw 0x4440, 0xc93e,	0x447f, 0xc93e,		0x21, 0
+	.dw 0x44c0, 0xc93e,	0x44ff, 0xc93e,		0x21, 0
+	.dw 0x4540, 0xc93e,	0x457f, 0xc93e,		0x21, 0
+	.dw 0x45c0, 0xc93e,	0x45ff, 0xc93e,		0x21, 0
+	.dw 0x4640, 0xc93e,	0x467f, 0xc93e,		0x21, 0
+	.dw 0x46c0, 0xc93e,	0x46ff, 0xc93e,		0x21, 0
+	.dw 0x4740, 0xc93e,	0x477f, 0xc93e,		0x21, 0
+	.dw 0x47c0, 0xc93e,	0x47ff, 0xc93e,		0x21, 0
+	.dw 0x4840, 0xc93e,	0x487f, 0xc93e,		0x21, 0
+	.dw 0x48c0, 0xc93e,	0x48ff, 0xc93e,		0x21, 0
+	.dw 0x4940, 0xc93e,	0x497f, 0xc93e,		0x21, 0
+	.dw 0x49c0, 0xc93e,	0x49ff, 0xc93e,		0x21, 0
+	.dw 0x4a40, 0xc93e,	0x4a7f, 0xc93e,		0x21, 0
+	.dw 0x4ac0, 0xc93e,	0x4aff, 0xc93e,		0x21, 0
+	.dw 0x4b40, 0xc93e,	0x4b7f, 0xc93e,		0x21, 0
+	.dw 0x4bc0, 0xc93e,	0x4bff, 0xc93e,		0x21, 0
+	.dw 0x4c40, 0xc93e,	0x4c7f, 0xc93e,		0x21, 0
+	.dw 0x4cc0, 0xc93e,	0x4cff, 0xc93e,		0x21, 0
+	.dw 0x4d40, 0xc93e,	0x4d7f, 0xc93e,		0x21, 0
+	.dw 0x4dc0, 0xc93e,	0x4dff, 0xc93e,		0x21, 0
+	.dw 0x4e40, 0xc93e,	0x4e7f, 0xc93e,		0x21, 0
+	.dw 0x4ec0, 0xc93e,	0x4eff, 0xc93e,		0x21, 0
+	.dw 0x4f40, 0xc93e,	0x4f7f, 0xc93e,		0x21, 0
+	.dw 0x4fc0, 0xc93e,	0x4fff, 0xc93e,		0x21, 0
+	.dw 0x5040, 0xc93e,	0x507f, 0xc93e,		0x21, 0
+	.dw 0x50c0, 0xc93e,	0x50ff, 0xc93e,		0x21, 0
+	.dw 0x5140, 0xc93e,	0x517f, 0xc93e,		0x21, 0
+	.dw 0x51c0, 0xc93e,	0x51ff, 0xc93e,		0x21, 0
+	.dw 0x5240, 0xc93e,	0x527f, 0xc93e,		0x21, 0
+	.dw 0x52c0, 0xc93e,	0x52ff, 0xc93e,		0x21, 0
+	.dw 0x5340, 0xc93e,	0x537f, 0xc93e,		0x21, 0
+	.dw 0x53c0, 0xc93e,	0x53ff, 0xc93e,		0x21, 0
+	.dw 0x5440, 0xc93e,	0x547f, 0xc93e,		0x21, 0
+	.dw 0x54c0, 0xc93e,	0x54ff, 0xc93e,		0x21, 0
+	.dw 0x5540, 0xc93e,	0x557f, 0xc93e,		0x21, 0
+	.dw 0x55c0, 0xc93e,	0x55ff, 0xc93e,		0x21, 0
+	.dw 0x5640, 0xc93e,	0x567f, 0xc93e,		0x21, 0
+	.dw 0x56c0, 0xc93e,	0x56ff, 0xc93e,		0x21, 0
+	.dw 0x5740, 0xc93e,	0x577f, 0xc93e,		0x21, 0
+	.dw 0x57c0, 0xc93e,	0x57ff, 0xc93e,		0x21, 0
+	.dw 0x5840, 0xc93e,	0x587f, 0xc93e,		0x21, 0
+	.dw 0x58c0, 0xc93e,	0x58ff, 0xc93e,		0x21, 0
+	.dw 0x5940, 0xc93e,	0x597f, 0xc93e,		0x21, 0
+	.dw 0x59c0, 0xc93e,	0x5fff, 0xc93e,		0x21, 0
+	.dw 0x6040, 0xc93e,	0x607f, 0xc93e,		0x21, 0
+	.dw 0x60c0, 0xc93e,	0x60ff, 0xc93e,		0x21, 0
+	.dw 0x6140, 0xc93e,	0x617f, 0xc93e,		0x21, 0
+	.dw 0x61c0, 0xc93e,	0x61ff, 0xc93e,		0x21, 0
+	.dw 0x6240, 0xc93e,	0x627f, 0xc93e,		0x21, 0
+	.dw 0x62c0, 0xc93e,	0x62ff, 0xc93e,		0x21, 0
+	.dw 0x6340, 0xc93e,	0x637f, 0xc93e,		0x21, 0
+	.dw 0x63c0, 0xc93e,	0x63ff, 0xc93e,		0x21, 0
+	.dw 0x6440, 0xc93e,	0x647f, 0xc93e,		0x21, 0
+	.dw 0x64c0, 0xc93e,	0x64ff, 0xc93e,		0x21, 0
+	.dw 0x6540, 0xc93e,	0x657f, 0xc93e,		0x21, 0
+	.dw 0x65c0, 0xc93e,	0x65ff, 0xc93e,		0x21, 0
+	.dw 0x6640, 0xc93e,	0x667f, 0xc93e,		0x21, 0
+	.dw 0x66c0, 0xc93e,	0x66ff, 0xc93e,		0x21, 0
+	.dw 0x6740, 0xc93e,	0x677f, 0xc93e,		0x21, 0
+	.dw 0x67c0, 0xc93e,	0x67ff, 0xc93e,		0x21, 0
+	.dw 0x6840, 0xc93e,	0x687f, 0xc93e,		0x21, 0
+	.dw 0x68c0, 0xc93e,	0x68ff, 0xc93e,		0x21, 0
+	.dw 0x6940, 0xc93e,	0x697f, 0xc93e,		0x21, 0
+	.dw 0x69c0, 0xc93e,	0x69ff, 0xc93e,		0x21, 0
+	.dw 0x6a40, 0xc93e,	0x6a7f, 0xc93e,		0x21, 0
+	.dw 0x6ac0, 0xc93e,	0x6aff, 0xc93e,		0x21, 0
+	.dw 0x6b40, 0xc93e,	0x6b7f, 0xc93e,		0x21, 0
+	.dw 0x6bc0, 0xc93e,	0x6bff, 0xc93e,		0x21, 0
+	.dw 0x6c40, 0xc93e,	0x6c7f, 0xc93e,		0x21, 0
+	.dw 0x6cc0, 0xc93e,	0x6cff, 0xc93e,		0x21, 0
+	.dw 0x6d40, 0xc93e,	0x6d7f, 0xc93e,		0x21, 0
+	.dw 0x6dc0, 0xc93e,	0x6dff, 0xc93e,		0x21, 0
+	.dw 0x6e40, 0xc93e,	0x6e7f, 0xc93e,		0x21, 0
+	.dw 0x6ec0, 0xc93e,	0x6eff, 0xc93e,		0x21, 0
+	.dw 0x6f40, 0xc93e,	0x6f7f, 0xc93e,		0x21, 0
+	.dw 0x6fc0, 0xc93e,	0x6fff, 0xc93e,		0x21, 0
+	.dw 0x7040, 0xc93e,	0x707f, 0xc93e,		0x21, 0
+	.dw 0x70c0, 0xc93e,	0x70ff, 0xc93e,		0x21, 0
+	.dw 0x7140, 0xc93e,	0x717f, 0xc93e,		0x21, 0
+	.dw 0x71c0, 0xc93e,	0x71ff, 0xc93e,		0x21, 0
+	.dw 0x7240, 0xc93e,	0x727f, 0xc93e,		0x21, 0
+	.dw 0x72c0, 0xc93e,	0x72ff, 0xc93e,		0x21, 0
+	.dw 0x7340, 0xc93e,	0x737f, 0xc93e,		0x21, 0
+	.dw 0x73c0, 0xc93e,	0x73ff, 0xc93e,		0x21, 0
+	.dw 0x7440, 0xc93e,	0x747f, 0xc93e,		0x21, 0
+	.dw 0x74c0, 0xc93e,	0x74ff, 0xc93e,		0x21, 0
+	.dw 0x7540, 0xc93e,	0x757f, 0xc93e,		0x21, 0
+	.dw 0x75c0, 0xc93e,	0x75ff, 0xc93e,		0x21, 0
+	.dw 0x7640, 0xc93e,	0x767f, 0xc93e,		0x21, 0
+	.dw 0x76c0, 0xc93e,	0x76ff, 0xc93e,		0x21, 0
+	.dw 0x7740, 0xc93e,	0x777f, 0xc93e,		0x21, 0
+	.dw 0x77c0, 0xc93e,	0x77ff, 0xc93e,		0x21, 0
+	.dw 0x7840, 0xc93e,	0x787f, 0xc93e,		0x21, 0
+	.dw 0x78c0, 0xc93e,	0x78ff, 0xc93e,		0x21, 0
+	.dw 0x7940, 0xc93e,	0x797f, 0xc93e,		0x21, 0
+	.dw 0x79c0, 0xc93e,	0x7fff, 0xc93e,		0x21, 0
+	.dw 0x8040, 0xc93e,	0x807f, 0xc93e,		0x21, 0
+	.dw 0x80c0, 0xc93e,	0x80ff, 0xc93e,		0x21, 0
+	.dw 0x8140, 0xc93e,	0x817f, 0xc93e,		0x21, 0
+	.dw 0x81c0, 0xc93e,	0x81ff, 0xc93e,		0x21, 0
+	.dw 0x8240, 0xc93e,	0x827f, 0xc93e,		0x21, 0
+	.dw 0x82c0, 0xc93e,	0x82ff, 0xc93e,		0x21, 0
+	.dw 0x8340, 0xc93e,	0x837f, 0xc93e,		0x21, 0
+	.dw 0x83c0, 0xc93e,	0x83ff, 0xc93e,		0x21, 0
+	.dw 0x8440, 0xc93e,	0x847f, 0xc93e,		0x21, 0
+	.dw 0x84c0, 0xc93e,	0x84ff, 0xc93e,		0x21, 0
+	.dw 0x8540, 0xc93e,	0x857f, 0xc93e,		0x21, 0
+	.dw 0x85c0, 0xc93e,	0x85ff, 0xc93e,		0x21, 0
+	.dw 0x8640, 0xc93e,	0x867f, 0xc93e,		0x21, 0
+	.dw 0x86c0, 0xc93e,	0x86ff, 0xc93e,		0x21, 0
+	.dw 0x8740, 0xc93e,	0x877f, 0xc93e,		0x21, 0
+	.dw 0x87c0, 0xc93e,	0x87ff, 0xc93e,		0x21, 0
+	.dw 0x8840, 0xc93e,	0x887f, 0xc93e,		0x21, 0
+	.dw 0x88c0, 0xc93e,	0x88ff, 0xc93e,		0x21, 0
+	.dw 0x8940, 0xc93e,	0x897f, 0xc93e,		0x21, 0
+	.dw 0x89c0, 0xc93e,	0x89ff, 0xc93e,		0x21, 0
+	.dw 0x8a40, 0xc93e,	0x8a7f, 0xc93e,		0x21, 0
+	.dw 0x8ac0, 0xc93e,	0x8aff, 0xc93e,		0x21, 0
+	.dw 0x8b40, 0xc93e,	0x8b7f, 0xc93e,		0x21, 0
+	.dw 0x8bc0, 0xc93e,	0x8bff, 0xc93e,		0x21, 0
+	.dw 0x8c40, 0xc93e,	0x8c7f, 0xc93e,		0x21, 0
+	.dw 0x8cc0, 0xc93e,	0x8cff, 0xc93e,		0x21, 0
+	.dw 0x8d40, 0xc93e,	0x8d7f, 0xc93e,		0x21, 0
+	.dw 0x8dc0, 0xc93e,	0x8dff, 0xc93e,		0x21, 0
+	.dw 0x8e40, 0xc93e,	0x8e7f, 0xc93e,		0x21, 0
+	.dw 0x8ec0, 0xc93e,	0x8eff, 0xc93e,		0x21, 0
+	.dw 0x8f40, 0xc93e,	0x8f7f, 0xc93e,		0x21, 0
+	.dw 0x8fc0, 0xc93e,	0x8fff, 0xc93e,		0x21, 0
+	.dw 0x9040, 0xc93e,	0x907f, 0xc93e,		0x21, 0
+	.dw 0x90c0, 0xc93e,	0x90ff, 0xc93e,		0x21, 0
+	.dw 0x9140, 0xc93e,	0x917f, 0xc93e,		0x21, 0
+	.dw 0x91c0, 0xc93e,	0x91ff, 0xc93e,		0x21, 0
+	.dw 0x9240, 0xc93e,	0x927f, 0xc93e,		0x21, 0
+	.dw 0x92c0, 0xc93e,	0x92ff, 0xc93e,		0x21, 0
+	.dw 0x9340, 0xc93e,	0x937f, 0xc93e,		0x21, 0
+	.dw 0x93c0, 0xc93e,	0x93ff, 0xc93e,		0x21, 0
+	.dw 0x9440, 0xc93e,	0x947f, 0xc93e,		0x21, 0
+	.dw 0x94c0, 0xc93e,	0x94ff, 0xc93e,		0x21, 0
+	.dw 0x9540, 0xc93e,	0x957f, 0xc93e,		0x21, 0
+	.dw 0x95c0, 0xc93e,	0x95ff, 0xc93e,		0x21, 0
+	.dw 0x9640, 0xc93e,	0x967f, 0xc93e,		0x21, 0
+	.dw 0x96c0, 0xc93e,	0x96ff, 0xc93e,		0x21, 0
+	.dw 0x9740, 0xc93e,	0x977f, 0xc93e,		0x21, 0
+	.dw 0x97c0, 0xc93e,	0x97ff, 0xc93e,		0x21, 0
+	.dw 0x9840, 0xc93e,	0x987f, 0xc93e,		0x21, 0
+	.dw 0x98c0, 0xc93e,	0x98ff, 0xc93e,		0x21, 0
+	.dw 0x9940, 0xc93e,	0x997f, 0xc93e,		0x21, 0
+	.dw 0x99c0, 0xc93e,	0x9fff, 0xc93e,		0x21, 0
+	.dw 0xa040, 0xc93e,	0xa07f, 0xc93e,		0x21, 0
+	.dw 0xa0c0, 0xc93e,	0xa0ff, 0xc93e,		0x21, 0
+	.dw 0xa140, 0xc93e,	0xa17f, 0xc93e,		0x21, 0
+	.dw 0xa1c0, 0xc93e,	0xa1ff, 0xc93e,		0x21, 0
+	.dw 0xa240, 0xc93e,	0xa27f, 0xc93e,		0x21, 0
+	.dw 0xa2c0, 0xc93e,	0xa2ff, 0xc93e,		0x21, 0
+	.dw 0xa340, 0xc93e,	0xa37f, 0xc93e,		0x21, 0
+	.dw 0xa3c0, 0xc93e,	0xa3ff, 0xc93e,		0x21, 0
+	.dw 0xa440, 0xc93e,	0xa47f, 0xc93e,		0x21, 0
+	.dw 0xa4c0, 0xc93e,	0xa4ff, 0xc93e,		0x21, 0
+	.dw 0xa540, 0xc93e,	0xa57f, 0xc93e,		0x21, 0
+	.dw 0xa5c0, 0xc93e,	0xa5ff, 0xc93e,		0x21, 0
+	.dw 0xa640, 0xc93e,	0xa67f, 0xc93e,		0x21, 0
+	.dw 0xa6c0, 0xc93e,	0xa6ff, 0xc93e,		0x21, 0
+	.dw 0xa740, 0xc93e,	0xa77f, 0xc93e,		0x21, 0
+	.dw 0xa7c0, 0xc93e,	0xa7ff, 0xc93e,		0x21, 0
+	.dw 0xa840, 0xc93e,	0xa87f, 0xc93e,		0x21, 0
+	.dw 0xa8c0, 0xc93e,	0xa8ff, 0xc93e,		0x21, 0
+	.dw 0xa940, 0xc93e,	0xa97f, 0xc93e,		0x21, 0
+	.dw 0xa9c0, 0xc93e,	0xa9ff, 0xc93e,		0x21, 0
+	.dw 0xaa40, 0xc93e,	0xaa7f, 0xc93e,		0x21, 0
+	.dw 0xaac0, 0xc93e,	0xaaff, 0xc93e,		0x21, 0
+	.dw 0xab40, 0xc93e,	0xab7f, 0xc93e,		0x21, 0
+	.dw 0xabc0, 0xc93e,	0xabff, 0xc93e,		0x21, 0
+	.dw 0xac40, 0xc93e,	0xac7f, 0xc93e,		0x21, 0
+	.dw 0xacc0, 0xc93e,	0xacff, 0xc93e,		0x21, 0
+	.dw 0xad40, 0xc93e,	0xad7f, 0xc93e,		0x21, 0
+	.dw 0xadc0, 0xc93e,	0xadff, 0xc93e,		0x21, 0
+	.dw 0xae40, 0xc93e,	0xae7f, 0xc93e,		0x21, 0
+	.dw 0xaec0, 0xc93e,	0xaeff, 0xc93e,		0x21, 0
+	.dw 0xaf40, 0xc93e,	0xaf7f, 0xc93e,		0x21, 0
+	.dw 0xafc0, 0xc93e,	0xafff, 0xc93e,		0x21, 0
+	.dw 0xb040, 0xc93e,	0xb07f, 0xc93e,		0x21, 0
+	.dw 0xb0c0, 0xc93e,	0xb0ff, 0xc93e,		0x21, 0
+	.dw 0xb140, 0xc93e,	0xb17f, 0xc93e,		0x21, 0
+	.dw 0xb1c0, 0xc93e,	0xb1ff, 0xc93e,		0x21, 0
+	.dw 0xb240, 0xc93e,	0xb27f, 0xc93e,		0x21, 0
+	.dw 0xb2c0, 0xc93e,	0xb2ff, 0xc93e,		0x21, 0
+	.dw 0xb340, 0xc93e,	0xb37f, 0xc93e,		0x21, 0
+	.dw 0xb3c0, 0xc93e,	0xb3ff, 0xc93e,		0x21, 0
+	.dw 0xb440, 0xc93e,	0xb47f, 0xc93e,		0x21, 0
+	.dw 0xb4c0, 0xc93e,	0xb4ff, 0xc93e,		0x21, 0
+	.dw 0xb540, 0xc93e,	0xb57f, 0xc93e,		0x21, 0
+	.dw 0xb5c0, 0xc93e,	0xb5ff, 0xc93e,		0x21, 0
+	.dw 0xb640, 0xc93e,	0xb67f, 0xc93e,		0x21, 0
+	.dw 0xb6c0, 0xc93e,	0xb6ff, 0xc93e,		0x21, 0
+	.dw 0xb740, 0xc93e,	0xb77f, 0xc93e,		0x21, 0
+	.dw 0xb7c0, 0xc93e,	0xb7ff, 0xc93e,		0x21, 0
+	.dw 0xb840, 0xc93e,	0xb87f, 0xc93e,		0x21, 0
+	.dw 0xb8c0, 0xc93e,	0xb8ff, 0xc93e,		0x21, 0
+	.dw 0xb940, 0xc93e,	0xb97f, 0xc93e,		0x21, 0
+	.dw 0xb9c0, 0xc93e,	0xbfff, 0xc93e,		0x21, 0
+	.dw 0xc040, 0xc93e,	0xc07f, 0xc93e,		0x21, 0
+	.dw 0xc0c0, 0xc93e,	0xc0ff, 0xc93e,		0x21, 0
+	.dw 0xc140, 0xc93e,	0xc17f, 0xc93e,		0x21, 0
+	.dw 0xc1c0, 0xc93e,	0xc1ff, 0xc93e,		0x21, 0
+	.dw 0xc240, 0xc93e,	0xc27f, 0xc93e,		0x21, 0
+	.dw 0xc2c0, 0xc93e,	0xc2ff, 0xc93e,		0x21, 0
+	.dw 0xc340, 0xc93e,	0xc37f, 0xc93e,		0x21, 0
+	.dw 0xc3c0, 0xc93e,	0xc3ff, 0xc93e,		0x21, 0
+	.dw 0xc440, 0xc93e,	0xc47f, 0xc93e,		0x21, 0
+	.dw 0xc4c0, 0xc93e,	0xc4ff, 0xc93e,		0x21, 0
+	.dw 0xc540, 0xc93e,	0xc57f, 0xc93e,		0x21, 0
+	.dw 0xc5c0, 0xc93e,	0xc5ff, 0xc93e,		0x21, 0
+	.dw 0xc640, 0xc93e,	0xc67f, 0xc93e,		0x21, 0
+	.dw 0xc6c0, 0xc93e,	0xc6ff, 0xc93e,		0x21, 0
+	.dw 0xc740, 0xc93e,	0xc77f, 0xc93e,		0x21, 0
+	.dw 0xc7c0, 0xc93e,	0xc7ff, 0xc93e,		0x21, 0
+	.dw 0xc840, 0xc93e,	0xc87f, 0xc93e,		0x21, 0
+	.dw 0xc8c0, 0xc93e,	0xc8ff, 0xc93e,		0x21, 0
+	.dw 0xc940, 0xc93e,	0xc97f, 0xc93e,		0x21, 0
+	.dw 0xc9c0, 0xc93e,	0xc9ff, 0xc93e,		0x21, 0
+	.dw 0xca40, 0xc93e,	0xca7f, 0xc93e,		0x21, 0
+	.dw 0xcac0, 0xc93e,	0xcaff, 0xc93e,		0x21, 0
+	.dw 0xcb40, 0xc93e,	0xcb7f, 0xc93e,		0x21, 0
+	.dw 0xcbc0, 0xc93e,	0xcbff, 0xc93e,		0x21, 0
+	.dw 0xcc40, 0xc93e,	0xcc7f, 0xc93e,		0x21, 0
+	.dw 0xccc0, 0xc93e,	0xccff, 0xc93e,		0x21, 0
+	.dw 0xcd40, 0xc93e,	0xcd7f, 0xc93e,		0x21, 0
+	.dw 0xcdc0, 0xc93e,	0xcdff, 0xc93e,		0x21, 0
+	.dw 0xce40, 0xc93e,	0xce7f, 0xc93e,		0x21, 0
+	.dw 0xcec0, 0xc93e,	0xceff, 0xc93e,		0x21, 0
+	.dw 0xcf40, 0xc93e,	0xcf7f, 0xc93e,		0x21, 0
+	.dw 0xcfc0, 0xc93e,	0xcfff, 0xc93e,		0x21, 0
+	.dw 0xd040, 0xc93e,	0xd07f, 0xc93e,		0x21, 0
+	.dw 0xd0c0, 0xc93e,	0xd0ff, 0xc93e,		0x21, 0
+	.dw 0xd140, 0xc93e,	0xd17f, 0xc93e,		0x21, 0
+	.dw 0xd1c0, 0xc93e,	0xd1ff, 0xc93e,		0x21, 0
+	.dw 0xd240, 0xc93e,	0xd27f, 0xc93e,		0x21, 0
+	.dw 0xd2c0, 0xc93e,	0xd2ff, 0xc93e,		0x21, 0
+	.dw 0xd340, 0xc93e,	0xd37f, 0xc93e,		0x21, 0
+	.dw 0xd3c0, 0xc93e,	0xd3ff, 0xc93e,		0x21, 0
+	.dw 0xd440, 0xc93e,	0xd47f, 0xc93e,		0x21, 0
+	.dw 0xd4c0, 0xc93e,	0xd4ff, 0xc93e,		0x21, 0
+	.dw 0xd540, 0xc93e,	0xd57f, 0xc93e,		0x21, 0
+	.dw 0xd5c0, 0xc93e,	0xd5ff, 0xc93e,		0x21, 0
+	.dw 0xd640, 0xc93e,	0xd67f, 0xc93e,		0x21, 0
+	.dw 0xd6c0, 0xc93e,	0xd6ff, 0xc93e,		0x21, 0
+	.dw 0xd740, 0xc93e,	0xd77f, 0xc93e,		0x21, 0
+	.dw 0xd7c0, 0xc93e,	0xd7ff, 0xc93e,		0x21, 0
+	.dw 0xd840, 0xc93e,	0xd87f, 0xc93e,		0x21, 0
+	.dw 0xd8c0, 0xc93e,	0xd8ff, 0xc93e,		0x21, 0
+	.dw 0xd940, 0xc93e,	0xd97f, 0xc93e,		0x21, 0
+	.dw 0xd9c0, 0xc93e,	0xdfff, 0xc93e,		0x21, 0
+	.dw 0xe040, 0xc93e,	0xe07f, 0xc93e,		0x21, 0
+	.dw 0xe0c0, 0xc93e,	0xe0ff, 0xc93e,		0x21, 0
+	.dw 0xe140, 0xc93e,	0xe17f, 0xc93e,		0x21, 0
+	.dw 0xe1c0, 0xc93e,	0xe1ff, 0xc93e,		0x21, 0
+	.dw 0xe240, 0xc93e,	0xe27f, 0xc93e,		0x21, 0
+	.dw 0xe2c0, 0xc93e,	0xe2ff, 0xc93e,		0x21, 0
+	.dw 0xe340, 0xc93e,	0xe37f, 0xc93e,		0x21, 0
+	.dw 0xe3c0, 0xc93e,	0xe3ff, 0xc93e,		0x21, 0
+	.dw 0xe440, 0xc93e,	0xe47f, 0xc93e,		0x21, 0
+	.dw 0xe4c0, 0xc93e,	0xe4ff, 0xc93e,		0x21, 0
+	.dw 0xe540, 0xc93e,	0xe57f, 0xc93e,		0x21, 0
+	.dw 0xe5c0, 0xc93e,	0xe5ff, 0xc93e,		0x21, 0
+	.dw 0xe640, 0xc93e,	0xe67f, 0xc93e,		0x21, 0
+	.dw 0xe6c0, 0xc93e,	0xe6ff, 0xc93e,		0x21, 0
+	.dw 0xe740, 0xc93e,	0xe77f, 0xc93e,		0x21, 0
+	.dw 0xe7c0, 0xc93e,	0xe7ff, 0xc93e,		0x21, 0
+	.dw 0xe840, 0xc93e,	0xe87f, 0xc93e,		0x21, 0
+	.dw 0xe8c0, 0xc93e,	0xe8ff, 0xc93e,		0x21, 0
+	.dw 0xe940, 0xc93e,	0xe97f, 0xc93e,		0x21, 0
+	.dw 0xe9c0, 0xc93e,	0xe9ff, 0xc93e,		0x21, 0
+	.dw 0xea40, 0xc93e,	0xea7f, 0xc93e,		0x21, 0
+	.dw 0xeac0, 0xc93e,	0xeaff, 0xc93e,		0x21, 0
+	.dw 0xeb40, 0xc93e,	0xeb7f, 0xc93e,		0x21, 0
+	.dw 0xebc0, 0xc93e,	0xebff, 0xc93e,		0x21, 0
+	.dw 0xec40, 0xc93e,	0xec7f, 0xc93e,		0x21, 0
+	.dw 0xecc0, 0xc93e,	0xecff, 0xc93e,		0x21, 0
+	.dw 0xed40, 0xc93e,	0xed7f, 0xc93e,		0x21, 0
+	.dw 0xedc0, 0xc93e,	0xedff, 0xc93e,		0x21, 0
+	.dw 0xee40, 0xc93e,	0xee7f, 0xc93e,		0x21, 0
+	.dw 0xeec0, 0xc93e,	0xeeff, 0xc93e,		0x21, 0
+	.dw 0xef40, 0xc93e,	0xef7f, 0xc93e,		0x21, 0
+	.dw 0xefc0, 0xc93e,	0xefff, 0xc93e,		0x21, 0
+	.dw 0xf040, 0xc93e,	0xf07f, 0xc93e,		0x21, 0
+	.dw 0xf0c0, 0xc93e,	0xf0ff, 0xc93e,		0x21, 0
+	.dw 0xf140, 0xc93e,	0xf17f, 0xc93e,		0x21, 0
+	.dw 0xf1c0, 0xc93e,	0xf1ff, 0xc93e,		0x21, 0
+	.dw 0xf240, 0xc93e,	0xf27f, 0xc93e,		0x21, 0
+	.dw 0xf2c0, 0xc93e,	0xf2ff, 0xc93e,		0x21, 0
+	.dw 0xf340, 0xc93e,	0xf37f, 0xc93e,		0x21, 0
+	.dw 0xf3c0, 0xc93e,	0xf3ff, 0xc93e,		0x21, 0
+	.dw 0xf440, 0xc93e,	0xf47f, 0xc93e,		0x21, 0
+	.dw 0xf4c0, 0xc93e,	0xf4ff, 0xc93e,		0x21, 0
+	.dw 0xf540, 0xc93e,	0xf57f, 0xc93e,		0x21, 0
+	.dw 0xf5c0, 0xc93e,	0xf5ff, 0xc93e,		0x21, 0
+	.dw 0xf640, 0xc93e,	0xf67f, 0xc93e,		0x21, 0
+	.dw 0xf6c0, 0xc93e,	0xf6ff, 0xc93e,		0x21, 0
+	.dw 0xf740, 0xc93e,	0xf77f, 0xc93e,		0x21, 0
+	.dw 0xf7c0, 0xc93e,	0xf7ff, 0xc93e,		0x21, 0
+	.dw 0xf840, 0xc93e,	0xf87f, 0xc93e,		0x21, 0
+	.dw 0xf8c0, 0xc93e,	0xf8ff, 0xc93e,		0x21, 0
+	.dw 0xf940, 0xc93e,	0xf97f, 0xc93e,		0x21, 0
+	.dw 0xf9c0, 0xc93e,	0xffff, 0xc93e,		0x21, 0
+	.dw 0x0040, 0xc93f,	0x007f, 0xc93f,		0x21, 0
+	.dw 0x00c0, 0xc93f,	0x00ff, 0xc93f,		0x21, 0
+	.dw 0x0140, 0xc93f,	0x017f, 0xc93f,		0x21, 0
+	.dw 0x01c0, 0xc93f,	0x01ff, 0xc93f,		0x21, 0
+	.dw 0x0240, 0xc93f,	0x027f, 0xc93f,		0x21, 0
+	.dw 0x02c0, 0xc93f,	0x02ff, 0xc93f,		0x21, 0
+	.dw 0x0340, 0xc93f,	0x037f, 0xc93f,		0x21, 0
+	.dw 0x03c0, 0xc93f,	0x03ff, 0xc93f,		0x21, 0
+	.dw 0x0440, 0xc93f,	0x047f, 0xc93f,		0x21, 0
+	.dw 0x04c0, 0xc93f,	0x04ff, 0xc93f,		0x21, 0
+	.dw 0x0540, 0xc93f,	0x057f, 0xc93f,		0x21, 0
+	.dw 0x05c0, 0xc93f,	0x05ff, 0xc93f,		0x21, 0
+	.dw 0x0640, 0xc93f,	0x067f, 0xc93f,		0x21, 0
+	.dw 0x06c0, 0xc93f,	0x06ff, 0xc93f,		0x21, 0
+	.dw 0x0740, 0xc93f,	0x077f, 0xc93f,		0x21, 0
+	.dw 0x07c0, 0xc93f,	0x07ff, 0xc93f,		0x21, 0
+	.dw 0x0840, 0xc93f,	0x087f, 0xc93f,		0x21, 0
+	.dw 0x08c0, 0xc93f,	0x08ff, 0xc93f,		0x21, 0
+	.dw 0x0940, 0xc93f,	0x097f, 0xc93f,		0x21, 0
+	.dw 0x09c0, 0xc93f,	0x09ff, 0xc93f,		0x21, 0
+	.dw 0x0a40, 0xc93f,	0x0a7f, 0xc93f,		0x21, 0
+	.dw 0x0ac0, 0xc93f,	0x0aff, 0xc93f,		0x21, 0
+	.dw 0x0b40, 0xc93f,	0x0b7f, 0xc93f,		0x21, 0
+	.dw 0x0bc0, 0xc93f,	0x0bff, 0xc93f,		0x21, 0
+	.dw 0x0c40, 0xc93f,	0x0c7f, 0xc93f,		0x21, 0
+	.dw 0x0cc0, 0xc93f,	0x0cff, 0xc93f,		0x21, 0
+	.dw 0x0d40, 0xc93f,	0x0d7f, 0xc93f,		0x21, 0
+	.dw 0x0dc0, 0xc93f,	0x0dff, 0xc93f,		0x21, 0
+	.dw 0x0e40, 0xc93f,	0x0e7f, 0xc93f,		0x21, 0
+	.dw 0x0ec0, 0xc93f,	0x0eff, 0xc93f,		0x21, 0
+	.dw 0x0f40, 0xc93f,	0x0f7f, 0xc93f,		0x21, 0
+	.dw 0x0fc0, 0xc93f,	0x0fff, 0xc93f,		0x21, 0
+	.dw 0x1040, 0xc93f,	0x107f, 0xc93f,		0x21, 0
+	.dw 0x10c0, 0xc93f,	0x10ff, 0xc93f,		0x21, 0
+	.dw 0x1140, 0xc93f,	0x117f, 0xc93f,		0x21, 0
+	.dw 0x11c0, 0xc93f,	0x11ff, 0xc93f,		0x21, 0
+	.dw 0x1240, 0xc93f,	0x127f, 0xc93f,		0x21, 0
+	.dw 0x12c0, 0xc93f,	0x12ff, 0xc93f,		0x21, 0
+	.dw 0x1340, 0xc93f,	0x137f, 0xc93f,		0x21, 0
+	.dw 0x13c0, 0xc93f,	0x13ff, 0xc93f,		0x21, 0
+	.dw 0x1440, 0xc93f,	0x147f, 0xc93f,		0x21, 0
+	.dw 0x14c0, 0xc93f,	0x14ff, 0xc93f,		0x21, 0
+	.dw 0x1540, 0xc93f,	0x157f, 0xc93f,		0x21, 0
+	.dw 0x15c0, 0xc93f,	0x15ff, 0xc93f,		0x21, 0
+	.dw 0x1640, 0xc93f,	0x167f, 0xc93f,		0x21, 0
+	.dw 0x16c0, 0xc93f,	0x16ff, 0xc93f,		0x21, 0
+	.dw 0x1740, 0xc93f,	0x177f, 0xc93f,		0x21, 0
+	.dw 0x17c0, 0xc93f,	0x17ff, 0xc93f,		0x21, 0
+	.dw 0x1840, 0xc93f,	0x187f, 0xc93f,		0x21, 0
+	.dw 0x18c0, 0xc93f,	0x18ff, 0xc93f,		0x21, 0
+	.dw 0x1940, 0xc93f,	0x197f, 0xc93f,		0x21, 0
+	.dw 0x19c0, 0xc93f,	0x1fff, 0xc93f,		0x21, 0
+	.dw 0x2040, 0xc93f,	0x207f, 0xc93f,		0x21, 0
+	.dw 0x20c0, 0xc93f,	0x20ff, 0xc93f,		0x21, 0
+	.dw 0x2140, 0xc93f,	0x217f, 0xc93f,		0x21, 0
+	.dw 0x21c0, 0xc93f,	0x21ff, 0xc93f,		0x21, 0
+	.dw 0x2240, 0xc93f,	0x227f, 0xc93f,		0x21, 0
+	.dw 0x22c0, 0xc93f,	0x22ff, 0xc93f,		0x21, 0
+	.dw 0x2340, 0xc93f,	0x237f, 0xc93f,		0x21, 0
+	.dw 0x23c0, 0xc93f,	0x23ff, 0xc93f,		0x21, 0
+	.dw 0x2440, 0xc93f,	0x247f, 0xc93f,		0x21, 0
+	.dw 0x24c0, 0xc93f,	0x24ff, 0xc93f,		0x21, 0
+	.dw 0x2540, 0xc93f,	0x257f, 0xc93f,		0x21, 0
+	.dw 0x25c0, 0xc93f,	0x25ff, 0xc93f,		0x21, 0
+	.dw 0x2640, 0xc93f,	0x267f, 0xc93f,		0x21, 0
+	.dw 0x26c0, 0xc93f,	0x26ff, 0xc93f,		0x21, 0
+	.dw 0x2740, 0xc93f,	0x277f, 0xc93f,		0x21, 0
+	.dw 0x27c0, 0xc93f,	0x27ff, 0xc93f,		0x21, 0
+	.dw 0x2840, 0xc93f,	0x287f, 0xc93f,		0x21, 0
+	.dw 0x28c0, 0xc93f,	0x28ff, 0xc93f,		0x21, 0
+	.dw 0x2940, 0xc93f,	0x297f, 0xc93f,		0x21, 0
+	.dw 0x29c0, 0xc93f,	0x29ff, 0xc93f,		0x21, 0
+	.dw 0x2a40, 0xc93f,	0x2a7f, 0xc93f,		0x21, 0
+	.dw 0x2ac0, 0xc93f,	0x2aff, 0xc93f,		0x21, 0
+	.dw 0x2b40, 0xc93f,	0x2b7f, 0xc93f,		0x21, 0
+	.dw 0x2bc0, 0xc93f,	0x2bff, 0xc93f,		0x21, 0
+	.dw 0x2c40, 0xc93f,	0x2c7f, 0xc93f,		0x21, 0
+	.dw 0x2cc0, 0xc93f,	0x2cff, 0xc93f,		0x21, 0
+	.dw 0x2d40, 0xc93f,	0x2d7f, 0xc93f,		0x21, 0
+	.dw 0x2dc0, 0xc93f,	0x2dff, 0xc93f,		0x21, 0
+	.dw 0x2e40, 0xc93f,	0x2e7f, 0xc93f,		0x21, 0
+	.dw 0x2ec0, 0xc93f,	0x2eff, 0xc93f,		0x21, 0
+	.dw 0x2f40, 0xc93f,	0x2f7f, 0xc93f,		0x21, 0
+	.dw 0x2fc0, 0xc93f,	0x2fff, 0xc93f,		0x21, 0
+	.dw 0x3040, 0xc93f,	0x307f, 0xc93f,		0x21, 0
+	.dw 0x30c0, 0xc93f,	0x30ff, 0xc93f,		0x21, 0
+	.dw 0x3140, 0xc93f,	0x317f, 0xc93f,		0x21, 0
+	.dw 0x31c0, 0xc93f,	0x31ff, 0xc93f,		0x21, 0
+	.dw 0x3240, 0xc93f,	0x327f, 0xc93f,		0x21, 0
+	.dw 0x32c0, 0xc93f,	0x32ff, 0xc93f,		0x21, 0
+	.dw 0x3340, 0xc93f,	0x337f, 0xc93f,		0x21, 0
+	.dw 0x33c0, 0xc93f,	0x33ff, 0xc93f,		0x21, 0
+	.dw 0x3440, 0xc93f,	0x347f, 0xc93f,		0x21, 0
+	.dw 0x34c0, 0xc93f,	0x34ff, 0xc93f,		0x21, 0
+	.dw 0x3540, 0xc93f,	0x357f, 0xc93f,		0x21, 0
+	.dw 0x35c0, 0xc93f,	0x35ff, 0xc93f,		0x21, 0
+	.dw 0x3640, 0xc93f,	0x367f, 0xc93f,		0x21, 0
+	.dw 0x36c0, 0xc93f,	0x36ff, 0xc93f,		0x21, 0
+	.dw 0x3740, 0xc93f,	0x377f, 0xc93f,		0x21, 0
+	.dw 0x37c0, 0xc93f,	0x37ff, 0xc93f,		0x21, 0
+	.dw 0x3840, 0xc93f,	0x387f, 0xc93f,		0x21, 0
+	.dw 0x38c0, 0xc93f,	0x38ff, 0xc93f,		0x21, 0
+	.dw 0x3940, 0xc93f,	0x397f, 0xc93f,		0x21, 0
+	.dw 0x39c0, 0xc93f,	0x1fff, 0xc960,		0x21, 0
+	.dw 0x3a00, 0xc960,	0x5fff, 0xc960,		0x21, 0
+	.dw 0x7a00, 0xc960,	0x9fff, 0xc960,		0x21, 0
+	.dw 0xba00, 0xc960,	0xdfff, 0xc960,		0x21, 0
+	.dw 0xfa00, 0xc960,	0x1fff, 0xc961,		0x21, 0
+	.dw 0x3a00, 0xc961,	0x5fff, 0xc961,		0x21, 0
+	.dw 0x7a00, 0xc961,	0x9fff, 0xc961,		0x21, 0
+	.dw 0xba00, 0xc961,	0xdfff, 0xc961,		0x21, 0
+	.dw 0xfa00, 0xc961,	0x1fff, 0xc962,		0x21, 0
+	.dw 0x3a00, 0xc962,	0x5fff, 0xc962,		0x21, 0
+	.dw 0x7a00, 0xc962,	0x9fff, 0xc962,		0x21, 0
+	.dw 0xba00, 0xc962,	0xdfff, 0xc962,		0x21, 0
+	.dw 0xfa00, 0xc962,	0x1fff, 0xc963,		0x21, 0
+	.dw 0x3a00, 0xc963,	0xffff, 0xc963,		0x21, 0
+	.dw 0x1a00, 0xc964,	0x1fff, 0xc964,		0x21, 0
+	.dw 0x3a00, 0xc964,	0x3fff, 0xc964,		0x21, 0
+	.dw 0x5a00, 0xc964,	0x5fff, 0xc964,		0x21, 0
+	.dw 0x7a00, 0xc964,	0x7fff, 0xc964,		0x21, 0
+	.dw 0x9a00, 0xc964,	0x9fff, 0xc964,		0x21, 0
+	.dw 0xba00, 0xc964,	0xbfff, 0xc964,		0x21, 0
+	.dw 0xda00, 0xc964,	0xdfff, 0xc964,		0x21, 0
+	.dw 0xfa00, 0xc964,	0xffff, 0xc964,		0x21, 0
+	.dw 0x1a00, 0xc965,	0x1fff, 0xc965,		0x21, 0
+	.dw 0x3a00, 0xc965,	0x3fff, 0xc965,		0x21, 0
+	.dw 0x5a00, 0xc965,	0x5fff, 0xc965,		0x21, 0
+	.dw 0x7a00, 0xc965,	0x7fff, 0xc965,		0x21, 0
+	.dw 0x9a00, 0xc965,	0x9fff, 0xc965,		0x21, 0
+	.dw 0xba00, 0xc965,	0xbfff, 0xc965,		0x21, 0
+	.dw 0xda00, 0xc965,	0xdfff, 0xc965,		0x21, 0
+	.dw 0xfa00, 0xc965,	0xffff, 0xc965,		0x21, 0
+	.dw 0x1a00, 0xc966,	0x1fff, 0xc966,		0x21, 0
+	.dw 0x3a00, 0xc966,	0x3fff, 0xc966,		0x21, 0
+	.dw 0x5a00, 0xc966,	0x5fff, 0xc966,		0x21, 0
+	.dw 0x7a00, 0xc966,	0x7fff, 0xc966,		0x21, 0
+	.dw 0x9a00, 0xc966,	0x9fff, 0xc966,		0x21, 0
+	.dw 0xba00, 0xc966,	0xbfff, 0xc966,		0x21, 0
+	.dw 0xda00, 0xc966,	0xdfff, 0xc966,		0x21, 0
+	.dw 0xfa00, 0xc966,	0xffff, 0xc966,		0x21, 0
+	.dw 0x1a00, 0xc967,	0x1fff, 0xc967,		0x21, 0
+	.dw 0x3a00, 0xc967,	0x1fff, 0xc970,		0x21, 0
+	.dw 0x3a00, 0xc970,	0x5fff, 0xc970,		0x21, 0
+	.dw 0x7a00, 0xc970,	0x9fff, 0xc970,		0x21, 0
+	.dw 0xba00, 0xc970,	0xdfff, 0xc970,		0x21, 0
+	.dw 0xfa00, 0xc970,	0x1fff, 0xc971,		0x21, 0
+	.dw 0x3a00, 0xc971,	0x5fff, 0xc971,		0x21, 0
+	.dw 0x7a00, 0xc971,	0x9fff, 0xc971,		0x21, 0
+	.dw 0xba00, 0xc971,	0xdfff, 0xc971,		0x21, 0
+	.dw 0xfa00, 0xc971,	0x1fff, 0xc972,		0x21, 0
+	.dw 0x3a00, 0xc972,	0x5fff, 0xc972,		0x21, 0
+	.dw 0x7a00, 0xc972,	0x9fff, 0xc972,		0x21, 0
+	.dw 0xba00, 0xc972,	0xdfff, 0xc972,		0x21, 0
+	.dw 0xfa00, 0xc972,	0xffff, 0xc973,		0x21, 0
+	.dw 0x1a00, 0xc974,	0x1fff, 0xc974,		0x21, 0
+	.dw 0x3a00, 0xc974,	0x3fff, 0xc974,		0x21, 0
+	.dw 0x5a00, 0xc974,	0x5fff, 0xc974,		0x21, 0
+	.dw 0x7a00, 0xc974,	0x7fff, 0xc974,		0x21, 0
+	.dw 0x9a00, 0xc974,	0x9fff, 0xc974,		0x21, 0
+	.dw 0xba00, 0xc974,	0xbfff, 0xc974,		0x21, 0
+	.dw 0xda00, 0xc974,	0xdfff, 0xc974,		0x21, 0
+	.dw 0xfa00, 0xc974,	0xffff, 0xc974,		0x21, 0
+	.dw 0x1a00, 0xc975,	0x1fff, 0xc975,		0x21, 0
+	.dw 0x3a00, 0xc975,	0x3fff, 0xc975,		0x21, 0
+	.dw 0x5a00, 0xc975,	0x5fff, 0xc975,		0x21, 0
+	.dw 0x7a00, 0xc975,	0x7fff, 0xc975,		0x21, 0
+	.dw 0x9a00, 0xc975,	0x9fff, 0xc975,		0x21, 0
+	.dw 0xba00, 0xc975,	0xbfff, 0xc975,		0x21, 0
+	.dw 0xda00, 0xc975,	0xdfff, 0xc975,		0x21, 0
+	.dw 0xfa00, 0xc975,	0xffff, 0xc975,		0x21, 0
+	.dw 0x1a00, 0xc976,	0x1fff, 0xc976,		0x21, 0
+	.dw 0x3a00, 0xc976,	0x3fff, 0xc976,		0x21, 0
+	.dw 0x5a00, 0xc976,	0x5fff, 0xc976,		0x21, 0
+	.dw 0x7a00, 0xc976,	0x7fff, 0xc976,		0x21, 0
+	.dw 0x9a00, 0xc976,	0x9fff, 0xc976,		0x21, 0
+	.dw 0xba00, 0xc976,	0xbfff, 0xc976,		0x21, 0
+	.dw 0xda00, 0xc976,	0xdfff, 0xc976,		0x21, 0
+	.dw 0xfa00, 0xc976,	0xffff, 0xc976,		0x21, 0
+	.dw 0x1a00, 0xc977,	0x1fff, 0xc977,		0x21, 0
+	.dw 0x3a00, 0xc977,	0x1fff, 0xc980,		0x21, 0
+	.dw 0x3a00, 0xc980,	0x5fff, 0xc980,		0x21, 0
+	.dw 0x7a00, 0xc980,	0x9fff, 0xc980,		0x21, 0
+	.dw 0xba00, 0xc980,	0xdfff, 0xc980,		0x21, 0
+	.dw 0xfa00, 0xc980,	0x1fff, 0xc981,		0x21, 0
+	.dw 0x3a00, 0xc981,	0x5fff, 0xc981,		0x21, 0
+	.dw 0x7a00, 0xc981,	0x9fff, 0xc981,		0x21, 0
+	.dw 0xba00, 0xc981,	0xdfff, 0xc981,		0x21, 0
+	.dw 0xfa00, 0xc981,	0x1fff, 0xc982,		0x21, 0
+	.dw 0x3a00, 0xc982,	0x5fff, 0xc982,		0x21, 0
+	.dw 0x7a00, 0xc982,	0x9fff, 0xc982,		0x21, 0
+	.dw 0xba00, 0xc982,	0xdfff, 0xc982,		0x21, 0
+	.dw 0xfa00, 0xc982,	0x1fff, 0xc983,		0x21, 0
+	.dw 0x3a00, 0xc983,	0xffff, 0xc983,		0x21, 0
+	.dw 0x1a00, 0xc984,	0x1fff, 0xc984,		0x21, 0
+	.dw 0x3a00, 0xc984,	0x3fff, 0xc984,		0x21, 0
+	.dw 0x5a00, 0xc984,	0x5fff, 0xc984,		0x21, 0
+	.dw 0x7a00, 0xc984,	0x7fff, 0xc984,		0x21, 0
+	.dw 0x9a00, 0xc984,	0x9fff, 0xc984,		0x21, 0
+	.dw 0xba00, 0xc984,	0xbfff, 0xc984,		0x21, 0
+	.dw 0xda00, 0xc984,	0xdfff, 0xc984,		0x21, 0
+	.dw 0xfa00, 0xc984,	0xffff, 0xc984,		0x21, 0
+	.dw 0x1a00, 0xc985,	0x1fff, 0xc985,		0x21, 0
+	.dw 0x3a00, 0xc985,	0x3fff, 0xc985,		0x21, 0
+	.dw 0x5a00, 0xc985,	0x5fff, 0xc985,		0x21, 0
+	.dw 0x7a00, 0xc985,	0x7fff, 0xc985,		0x21, 0
+	.dw 0x9a00, 0xc985,	0x9fff, 0xc985,		0x21, 0
+	.dw 0xba00, 0xc985,	0xbfff, 0xc985,		0x21, 0
+	.dw 0xda00, 0xc985,	0xdfff, 0xc985,		0x21, 0
+	.dw 0xfa00, 0xc985,	0xffff, 0xc985,		0x21, 0
+	.dw 0x1a00, 0xc986,	0x1fff, 0xc986,		0x21, 0
+	.dw 0x3a00, 0xc986,	0x3fff, 0xc986,		0x21, 0
+	.dw 0x5a00, 0xc986,	0x5fff, 0xc986,		0x21, 0
+	.dw 0x7a00, 0xc986,	0x7fff, 0xc986,		0x21, 0
+	.dw 0x9a00, 0xc986,	0x9fff, 0xc986,		0x21, 0
+	.dw 0xba00, 0xc986,	0xbfff, 0xc986,		0x21, 0
+	.dw 0xda00, 0xc986,	0xdfff, 0xc986,		0x21, 0
+	.dw 0xfa00, 0xc986,	0xffff, 0xc986,		0x21, 0
+	.dw 0x1a00, 0xc987,	0x1fff, 0xc987,		0x21, 0
+	.dw 0x3a00, 0xc987,	0x1fff, 0xc988,		0x21, 0
+	.dw 0x2040, 0xc988,	0x207f, 0xc988,		0x21, 0
+	.dw 0x20c0, 0xc988,	0x20ff, 0xc988,		0x21, 0
+	.dw 0x2140, 0xc988,	0x217f, 0xc988,		0x21, 0
+	.dw 0x21c0, 0xc988,	0x21ff, 0xc988,		0x21, 0
+	.dw 0x2240, 0xc988,	0x227f, 0xc988,		0x21, 0
+	.dw 0x22c0, 0xc988,	0x22ff, 0xc988,		0x21, 0
+	.dw 0x2340, 0xc988,	0x237f, 0xc988,		0x21, 0
+	.dw 0x23c0, 0xc988,	0x23ff, 0xc988,		0x21, 0
+	.dw 0x2440, 0xc988,	0x247f, 0xc988,		0x21, 0
+	.dw 0x24c0, 0xc988,	0x24ff, 0xc988,		0x21, 0
+	.dw 0x2540, 0xc988,	0x257f, 0xc988,		0x21, 0
+	.dw 0x25c0, 0xc988,	0x25ff, 0xc988,		0x21, 0
+	.dw 0x2640, 0xc988,	0x267f, 0xc988,		0x21, 0
+	.dw 0x26c0, 0xc988,	0x26ff, 0xc988,		0x21, 0
+	.dw 0x2740, 0xc988,	0x277f, 0xc988,		0x21, 0
+	.dw 0x27c0, 0xc988,	0x27ff, 0xc988,		0x21, 0
+	.dw 0x2840, 0xc988,	0x287f, 0xc988,		0x21, 0
+	.dw 0x28c0, 0xc988,	0x28ff, 0xc988,		0x21, 0
+	.dw 0x2940, 0xc988,	0x297f, 0xc988,		0x21, 0
+	.dw 0x29c0, 0xc988,	0x29ff, 0xc988,		0x21, 0
+	.dw 0x2a40, 0xc988,	0x2a7f, 0xc988,		0x21, 0
+	.dw 0x2ac0, 0xc988,	0x2aff, 0xc988,		0x21, 0
+	.dw 0x2b40, 0xc988,	0x2b7f, 0xc988,		0x21, 0
+	.dw 0x2bc0, 0xc988,	0x2bff, 0xc988,		0x21, 0
+	.dw 0x2c40, 0xc988,	0x2c7f, 0xc988,		0x21, 0
+	.dw 0x2cc0, 0xc988,	0x2cff, 0xc988,		0x21, 0
+	.dw 0x2d40, 0xc988,	0x2d7f, 0xc988,		0x21, 0
+	.dw 0x2dc0, 0xc988,	0x2dff, 0xc988,		0x21, 0
+	.dw 0x2e40, 0xc988,	0x2e7f, 0xc988,		0x21, 0
+	.dw 0x2ec0, 0xc988,	0x2eff, 0xc988,		0x21, 0
+	.dw 0x2f40, 0xc988,	0x2f7f, 0xc988,		0x21, 0
+	.dw 0x2fc0, 0xc988,	0x2fff, 0xc988,		0x21, 0
+	.dw 0x3040, 0xc988,	0x307f, 0xc988,		0x21, 0
+	.dw 0x30c0, 0xc988,	0x30ff, 0xc988,		0x21, 0
+	.dw 0x3140, 0xc988,	0x317f, 0xc988,		0x21, 0
+	.dw 0x31c0, 0xc988,	0x31ff, 0xc988,		0x21, 0
+	.dw 0x3240, 0xc988,	0x327f, 0xc988,		0x21, 0
+	.dw 0x32c0, 0xc988,	0x32ff, 0xc988,		0x21, 0
+	.dw 0x3340, 0xc988,	0x337f, 0xc988,		0x21, 0
+	.dw 0x33c0, 0xc988,	0x33ff, 0xc988,		0x21, 0
+	.dw 0x3440, 0xc988,	0x347f, 0xc988,		0x21, 0
+	.dw 0x34c0, 0xc988,	0x34ff, 0xc988,		0x21, 0
+	.dw 0x3540, 0xc988,	0x357f, 0xc988,		0x21, 0
+	.dw 0x35c0, 0xc988,	0x35ff, 0xc988,		0x21, 0
+	.dw 0x3640, 0xc988,	0x367f, 0xc988,		0x21, 0
+	.dw 0x36c0, 0xc988,	0x36ff, 0xc988,		0x21, 0
+	.dw 0x3740, 0xc988,	0x377f, 0xc988,		0x21, 0
+	.dw 0x37c0, 0xc988,	0x37ff, 0xc988,		0x21, 0
+	.dw 0x3840, 0xc988,	0x387f, 0xc988,		0x21, 0
+	.dw 0x38c0, 0xc988,	0x38ff, 0xc988,		0x21, 0
+	.dw 0x3940, 0xc988,	0x397f, 0xc988,		0x21, 0
+	.dw 0x39c0, 0xc988,	0x5fff, 0xc988,		0x21, 0
+	.dw 0x6040, 0xc988,	0x607f, 0xc988,		0x21, 0
+	.dw 0x60c0, 0xc988,	0x60ff, 0xc988,		0x21, 0
+	.dw 0x6140, 0xc988,	0x617f, 0xc988,		0x21, 0
+	.dw 0x61c0, 0xc988,	0x61ff, 0xc988,		0x21, 0
+	.dw 0x6240, 0xc988,	0x627f, 0xc988,		0x21, 0
+	.dw 0x62c0, 0xc988,	0x62ff, 0xc988,		0x21, 0
+	.dw 0x6340, 0xc988,	0x637f, 0xc988,		0x21, 0
+	.dw 0x63c0, 0xc988,	0x63ff, 0xc988,		0x21, 0
+	.dw 0x6440, 0xc988,	0x647f, 0xc988,		0x21, 0
+	.dw 0x64c0, 0xc988,	0x64ff, 0xc988,		0x21, 0
+	.dw 0x6540, 0xc988,	0x657f, 0xc988,		0x21, 0
+	.dw 0x65c0, 0xc988,	0x65ff, 0xc988,		0x21, 0
+	.dw 0x6640, 0xc988,	0x667f, 0xc988,		0x21, 0
+	.dw 0x66c0, 0xc988,	0x66ff, 0xc988,		0x21, 0
+	.dw 0x6740, 0xc988,	0x677f, 0xc988,		0x21, 0
+	.dw 0x67c0, 0xc988,	0x67ff, 0xc988,		0x21, 0
+	.dw 0x6840, 0xc988,	0x687f, 0xc988,		0x21, 0
+	.dw 0x68c0, 0xc988,	0x68ff, 0xc988,		0x21, 0
+	.dw 0x6940, 0xc988,	0x697f, 0xc988,		0x21, 0
+	.dw 0x69c0, 0xc988,	0x69ff, 0xc988,		0x21, 0
+	.dw 0x6a40, 0xc988,	0x6a7f, 0xc988,		0x21, 0
+	.dw 0x6ac0, 0xc988,	0x6aff, 0xc988,		0x21, 0
+	.dw 0x6b40, 0xc988,	0x6b7f, 0xc988,		0x21, 0
+	.dw 0x6bc0, 0xc988,	0x6bff, 0xc988,		0x21, 0
+	.dw 0x6c40, 0xc988,	0x6c7f, 0xc988,		0x21, 0
+	.dw 0x6cc0, 0xc988,	0x6cff, 0xc988,		0x21, 0
+	.dw 0x6d40, 0xc988,	0x6d7f, 0xc988,		0x21, 0
+	.dw 0x6dc0, 0xc988,	0x6dff, 0xc988,		0x21, 0
+	.dw 0x6e40, 0xc988,	0x6e7f, 0xc988,		0x21, 0
+	.dw 0x6ec0, 0xc988,	0x6eff, 0xc988,		0x21, 0
+	.dw 0x6f40, 0xc988,	0x6f7f, 0xc988,		0x21, 0
+	.dw 0x6fc0, 0xc988,	0x6fff, 0xc988,		0x21, 0
+	.dw 0x7040, 0xc988,	0x707f, 0xc988,		0x21, 0
+	.dw 0x70c0, 0xc988,	0x70ff, 0xc988,		0x21, 0
+	.dw 0x7140, 0xc988,	0x717f, 0xc988,		0x21, 0
+	.dw 0x71c0, 0xc988,	0x71ff, 0xc988,		0x21, 0
+	.dw 0x7240, 0xc988,	0x727f, 0xc988,		0x21, 0
+	.dw 0x72c0, 0xc988,	0x72ff, 0xc988,		0x21, 0
+	.dw 0x7340, 0xc988,	0x737f, 0xc988,		0x21, 0
+	.dw 0x73c0, 0xc988,	0x73ff, 0xc988,		0x21, 0
+	.dw 0x7440, 0xc988,	0x747f, 0xc988,		0x21, 0
+	.dw 0x74c0, 0xc988,	0x74ff, 0xc988,		0x21, 0
+	.dw 0x7540, 0xc988,	0x757f, 0xc988,		0x21, 0
+	.dw 0x75c0, 0xc988,	0x75ff, 0xc988,		0x21, 0
+	.dw 0x7640, 0xc988,	0x767f, 0xc988,		0x21, 0
+	.dw 0x76c0, 0xc988,	0x76ff, 0xc988,		0x21, 0
+	.dw 0x7740, 0xc988,	0x777f, 0xc988,		0x21, 0
+	.dw 0x77c0, 0xc988,	0x77ff, 0xc988,		0x21, 0
+	.dw 0x7840, 0xc988,	0x787f, 0xc988,		0x21, 0
+	.dw 0x78c0, 0xc988,	0x78ff, 0xc988,		0x21, 0
+	.dw 0x7940, 0xc988,	0x797f, 0xc988,		0x21, 0
+	.dw 0x79c0, 0xc988,	0x9fff, 0xc988,		0x21, 0
+	.dw 0xa040, 0xc988,	0xa07f, 0xc988,		0x21, 0
+	.dw 0xa0c0, 0xc988,	0xa0ff, 0xc988,		0x21, 0
+	.dw 0xa140, 0xc988,	0xa17f, 0xc988,		0x21, 0
+	.dw 0xa1c0, 0xc988,	0xa1ff, 0xc988,		0x21, 0
+	.dw 0xa240, 0xc988,	0xa27f, 0xc988,		0x21, 0
+	.dw 0xa2c0, 0xc988,	0xa2ff, 0xc988,		0x21, 0
+	.dw 0xa340, 0xc988,	0xa37f, 0xc988,		0x21, 0
+	.dw 0xa3c0, 0xc988,	0xa3ff, 0xc988,		0x21, 0
+	.dw 0xa440, 0xc988,	0xa47f, 0xc988,		0x21, 0
+	.dw 0xa4c0, 0xc988,	0xa4ff, 0xc988,		0x21, 0
+	.dw 0xa540, 0xc988,	0xa57f, 0xc988,		0x21, 0
+	.dw 0xa5c0, 0xc988,	0xa5ff, 0xc988,		0x21, 0
+	.dw 0xa640, 0xc988,	0xa67f, 0xc988,		0x21, 0
+	.dw 0xa6c0, 0xc988,	0xa6ff, 0xc988,		0x21, 0
+	.dw 0xa740, 0xc988,	0xa77f, 0xc988,		0x21, 0
+	.dw 0xa7c0, 0xc988,	0xa7ff, 0xc988,		0x21, 0
+	.dw 0xa840, 0xc988,	0xa87f, 0xc988,		0x21, 0
+	.dw 0xa8c0, 0xc988,	0xa8ff, 0xc988,		0x21, 0
+	.dw 0xa940, 0xc988,	0xa97f, 0xc988,		0x21, 0
+	.dw 0xa9c0, 0xc988,	0xa9ff, 0xc988,		0x21, 0
+	.dw 0xaa40, 0xc988,	0xaa7f, 0xc988,		0x21, 0
+	.dw 0xaac0, 0xc988,	0xaaff, 0xc988,		0x21, 0
+	.dw 0xab40, 0xc988,	0xab7f, 0xc988,		0x21, 0
+	.dw 0xabc0, 0xc988,	0xabff, 0xc988,		0x21, 0
+	.dw 0xac40, 0xc988,	0xac7f, 0xc988,		0x21, 0
+	.dw 0xacc0, 0xc988,	0xacff, 0xc988,		0x21, 0
+	.dw 0xad40, 0xc988,	0xad7f, 0xc988,		0x21, 0
+	.dw 0xadc0, 0xc988,	0xadff, 0xc988,		0x21, 0
+	.dw 0xae40, 0xc988,	0xae7f, 0xc988,		0x21, 0
+	.dw 0xaec0, 0xc988,	0xaeff, 0xc988,		0x21, 0
+	.dw 0xaf40, 0xc988,	0xaf7f, 0xc988,		0x21, 0
+	.dw 0xafc0, 0xc988,	0xafff, 0xc988,		0x21, 0
+	.dw 0xb040, 0xc988,	0xb07f, 0xc988,		0x21, 0
+	.dw 0xb0c0, 0xc988,	0xb0ff, 0xc988,		0x21, 0
+	.dw 0xb140, 0xc988,	0xb17f, 0xc988,		0x21, 0
+	.dw 0xb1c0, 0xc988,	0xb1ff, 0xc988,		0x21, 0
+	.dw 0xb240, 0xc988,	0xb27f, 0xc988,		0x21, 0
+	.dw 0xb2c0, 0xc988,	0xb2ff, 0xc988,		0x21, 0
+	.dw 0xb340, 0xc988,	0xb37f, 0xc988,		0x21, 0
+	.dw 0xb3c0, 0xc988,	0xb3ff, 0xc988,		0x21, 0
+	.dw 0xb440, 0xc988,	0xb47f, 0xc988,		0x21, 0
+	.dw 0xb4c0, 0xc988,	0xb4ff, 0xc988,		0x21, 0
+	.dw 0xb540, 0xc988,	0xb57f, 0xc988,		0x21, 0
+	.dw 0xb5c0, 0xc988,	0xb5ff, 0xc988,		0x21, 0
+	.dw 0xb640, 0xc988,	0xb67f, 0xc988,		0x21, 0
+	.dw 0xb6c0, 0xc988,	0xb6ff, 0xc988,		0x21, 0
+	.dw 0xb740, 0xc988,	0xb77f, 0xc988,		0x21, 0
+	.dw 0xb7c0, 0xc988,	0xb7ff, 0xc988,		0x21, 0
+	.dw 0xb840, 0xc988,	0xb87f, 0xc988,		0x21, 0
+	.dw 0xb8c0, 0xc988,	0xb8ff, 0xc988,		0x21, 0
+	.dw 0xb940, 0xc988,	0xb97f, 0xc988,		0x21, 0
+	.dw 0xb9c0, 0xc988,	0xdfff, 0xc988,		0x21, 0
+	.dw 0xe040, 0xc988,	0xe07f, 0xc988,		0x21, 0
+	.dw 0xe0c0, 0xc988,	0xe0ff, 0xc988,		0x21, 0
+	.dw 0xe140, 0xc988,	0xe17f, 0xc988,		0x21, 0
+	.dw 0xe1c0, 0xc988,	0xe1ff, 0xc988,		0x21, 0
+	.dw 0xe240, 0xc988,	0xe27f, 0xc988,		0x21, 0
+	.dw 0xe2c0, 0xc988,	0xe2ff, 0xc988,		0x21, 0
+	.dw 0xe340, 0xc988,	0xe37f, 0xc988,		0x21, 0
+	.dw 0xe3c0, 0xc988,	0xe3ff, 0xc988,		0x21, 0
+	.dw 0xe440, 0xc988,	0xe47f, 0xc988,		0x21, 0
+	.dw 0xe4c0, 0xc988,	0xe4ff, 0xc988,		0x21, 0
+	.dw 0xe540, 0xc988,	0xe57f, 0xc988,		0x21, 0
+	.dw 0xe5c0, 0xc988,	0xe5ff, 0xc988,		0x21, 0
+	.dw 0xe640, 0xc988,	0xe67f, 0xc988,		0x21, 0
+	.dw 0xe6c0, 0xc988,	0xe6ff, 0xc988,		0x21, 0
+	.dw 0xe740, 0xc988,	0xe77f, 0xc988,		0x21, 0
+	.dw 0xe7c0, 0xc988,	0xe7ff, 0xc988,		0x21, 0
+	.dw 0xe840, 0xc988,	0xe87f, 0xc988,		0x21, 0
+	.dw 0xe8c0, 0xc988,	0xe8ff, 0xc988,		0x21, 0
+	.dw 0xe940, 0xc988,	0xe97f, 0xc988,		0x21, 0
+	.dw 0xe9c0, 0xc988,	0xe9ff, 0xc988,		0x21, 0
+	.dw 0xea40, 0xc988,	0xea7f, 0xc988,		0x21, 0
+	.dw 0xeac0, 0xc988,	0xeaff, 0xc988,		0x21, 0
+	.dw 0xeb40, 0xc988,	0xeb7f, 0xc988,		0x21, 0
+	.dw 0xebc0, 0xc988,	0xebff, 0xc988,		0x21, 0
+	.dw 0xec40, 0xc988,	0xec7f, 0xc988,		0x21, 0
+	.dw 0xecc0, 0xc988,	0xecff, 0xc988,		0x21, 0
+	.dw 0xed40, 0xc988,	0xed7f, 0xc988,		0x21, 0
+	.dw 0xedc0, 0xc988,	0xedff, 0xc988,		0x21, 0
+	.dw 0xee40, 0xc988,	0xee7f, 0xc988,		0x21, 0
+	.dw 0xeec0, 0xc988,	0xeeff, 0xc988,		0x21, 0
+	.dw 0xef40, 0xc988,	0xef7f, 0xc988,		0x21, 0
+	.dw 0xefc0, 0xc988,	0xefff, 0xc988,		0x21, 0
+	.dw 0xf040, 0xc988,	0xf07f, 0xc988,		0x21, 0
+	.dw 0xf0c0, 0xc988,	0xf0ff, 0xc988,		0x21, 0
+	.dw 0xf140, 0xc988,	0xf17f, 0xc988,		0x21, 0
+	.dw 0xf1c0, 0xc988,	0xf1ff, 0xc988,		0x21, 0
+	.dw 0xf240, 0xc988,	0xf27f, 0xc988,		0x21, 0
+	.dw 0xf2c0, 0xc988,	0xf2ff, 0xc988,		0x21, 0
+	.dw 0xf340, 0xc988,	0xf37f, 0xc988,		0x21, 0
+	.dw 0xf3c0, 0xc988,	0xf3ff, 0xc988,		0x21, 0
+	.dw 0xf440, 0xc988,	0xf47f, 0xc988,		0x21, 0
+	.dw 0xf4c0, 0xc988,	0xf4ff, 0xc988,		0x21, 0
+	.dw 0xf540, 0xc988,	0xf57f, 0xc988,		0x21, 0
+	.dw 0xf5c0, 0xc988,	0xf5ff, 0xc988,		0x21, 0
+	.dw 0xf640, 0xc988,	0xf67f, 0xc988,		0x21, 0
+	.dw 0xf6c0, 0xc988,	0xf6ff, 0xc988,		0x21, 0
+	.dw 0xf740, 0xc988,	0xf77f, 0xc988,		0x21, 0
+	.dw 0xf7c0, 0xc988,	0xf7ff, 0xc988,		0x21, 0
+	.dw 0xf840, 0xc988,	0xf87f, 0xc988,		0x21, 0
+	.dw 0xf8c0, 0xc988,	0xf8ff, 0xc988,		0x21, 0
+	.dw 0xf940, 0xc988,	0xf97f, 0xc988,		0x21, 0
+	.dw 0xf9c0, 0xc988,	0x1fff, 0xc989,		0x21, 0
+	.dw 0x2040, 0xc989,	0x207f, 0xc989,		0x21, 0
+	.dw 0x20c0, 0xc989,	0x20ff, 0xc989,		0x21, 0
+	.dw 0x2140, 0xc989,	0x217f, 0xc989,		0x21, 0
+	.dw 0x21c0, 0xc989,	0x21ff, 0xc989,		0x21, 0
+	.dw 0x2240, 0xc989,	0x227f, 0xc989,		0x21, 0
+	.dw 0x22c0, 0xc989,	0x22ff, 0xc989,		0x21, 0
+	.dw 0x2340, 0xc989,	0x237f, 0xc989,		0x21, 0
+	.dw 0x23c0, 0xc989,	0x23ff, 0xc989,		0x21, 0
+	.dw 0x2440, 0xc989,	0x247f, 0xc989,		0x21, 0
+	.dw 0x24c0, 0xc989,	0x24ff, 0xc989,		0x21, 0
+	.dw 0x2540, 0xc989,	0x257f, 0xc989,		0x21, 0
+	.dw 0x25c0, 0xc989,	0x25ff, 0xc989,		0x21, 0
+	.dw 0x2640, 0xc989,	0x267f, 0xc989,		0x21, 0
+	.dw 0x26c0, 0xc989,	0x26ff, 0xc989,		0x21, 0
+	.dw 0x2740, 0xc989,	0x277f, 0xc989,		0x21, 0
+	.dw 0x27c0, 0xc989,	0x27ff, 0xc989,		0x21, 0
+	.dw 0x2840, 0xc989,	0x287f, 0xc989,		0x21, 0
+	.dw 0x28c0, 0xc989,	0x28ff, 0xc989,		0x21, 0
+	.dw 0x2940, 0xc989,	0x297f, 0xc989,		0x21, 0
+	.dw 0x29c0, 0xc989,	0x29ff, 0xc989,		0x21, 0
+	.dw 0x2a40, 0xc989,	0x2a7f, 0xc989,		0x21, 0
+	.dw 0x2ac0, 0xc989,	0x2aff, 0xc989,		0x21, 0
+	.dw 0x2b40, 0xc989,	0x2b7f, 0xc989,		0x21, 0
+	.dw 0x2bc0, 0xc989,	0x2bff, 0xc989,		0x21, 0
+	.dw 0x2c40, 0xc989,	0x2c7f, 0xc989,		0x21, 0
+	.dw 0x2cc0, 0xc989,	0x2cff, 0xc989,		0x21, 0
+	.dw 0x2d40, 0xc989,	0x2d7f, 0xc989,		0x21, 0
+	.dw 0x2dc0, 0xc989,	0x2dff, 0xc989,		0x21, 0
+	.dw 0x2e40, 0xc989,	0x2e7f, 0xc989,		0x21, 0
+	.dw 0x2ec0, 0xc989,	0x2eff, 0xc989,		0x21, 0
+	.dw 0x2f40, 0xc989,	0x2f7f, 0xc989,		0x21, 0
+	.dw 0x2fc0, 0xc989,	0x2fff, 0xc989,		0x21, 0
+	.dw 0x3040, 0xc989,	0x307f, 0xc989,		0x21, 0
+	.dw 0x30c0, 0xc989,	0x30ff, 0xc989,		0x21, 0
+	.dw 0x3140, 0xc989,	0x317f, 0xc989,		0x21, 0
+	.dw 0x31c0, 0xc989,	0x31ff, 0xc989,		0x21, 0
+	.dw 0x3240, 0xc989,	0x327f, 0xc989,		0x21, 0
+	.dw 0x32c0, 0xc989,	0x32ff, 0xc989,		0x21, 0
+	.dw 0x3340, 0xc989,	0x337f, 0xc989,		0x21, 0
+	.dw 0x33c0, 0xc989,	0x33ff, 0xc989,		0x21, 0
+	.dw 0x3440, 0xc989,	0x347f, 0xc989,		0x21, 0
+	.dw 0x34c0, 0xc989,	0x34ff, 0xc989,		0x21, 0
+	.dw 0x3540, 0xc989,	0x357f, 0xc989,		0x21, 0
+	.dw 0x35c0, 0xc989,	0x35ff, 0xc989,		0x21, 0
+	.dw 0x3640, 0xc989,	0x367f, 0xc989,		0x21, 0
+	.dw 0x36c0, 0xc989,	0x36ff, 0xc989,		0x21, 0
+	.dw 0x3740, 0xc989,	0x377f, 0xc989,		0x21, 0
+	.dw 0x37c0, 0xc989,	0x37ff, 0xc989,		0x21, 0
+	.dw 0x3840, 0xc989,	0x387f, 0xc989,		0x21, 0
+	.dw 0x38c0, 0xc989,	0x38ff, 0xc989,		0x21, 0
+	.dw 0x3940, 0xc989,	0x397f, 0xc989,		0x21, 0
+	.dw 0x39c0, 0xc989,	0x5fff, 0xc989,		0x21, 0
+	.dw 0x6040, 0xc989,	0x607f, 0xc989,		0x21, 0
+	.dw 0x60c0, 0xc989,	0x60ff, 0xc989,		0x21, 0
+	.dw 0x6140, 0xc989,	0x617f, 0xc989,		0x21, 0
+	.dw 0x61c0, 0xc989,	0x61ff, 0xc989,		0x21, 0
+	.dw 0x6240, 0xc989,	0x627f, 0xc989,		0x21, 0
+	.dw 0x62c0, 0xc989,	0x62ff, 0xc989,		0x21, 0
+	.dw 0x6340, 0xc989,	0x637f, 0xc989,		0x21, 0
+	.dw 0x63c0, 0xc989,	0x63ff, 0xc989,		0x21, 0
+	.dw 0x6440, 0xc989,	0x647f, 0xc989,		0x21, 0
+	.dw 0x64c0, 0xc989,	0x64ff, 0xc989,		0x21, 0
+	.dw 0x6540, 0xc989,	0x657f, 0xc989,		0x21, 0
+	.dw 0x65c0, 0xc989,	0x65ff, 0xc989,		0x21, 0
+	.dw 0x6640, 0xc989,	0x667f, 0xc989,		0x21, 0
+	.dw 0x66c0, 0xc989,	0x66ff, 0xc989,		0x21, 0
+	.dw 0x6740, 0xc989,	0x677f, 0xc989,		0x21, 0
+	.dw 0x67c0, 0xc989,	0x67ff, 0xc989,		0x21, 0
+	.dw 0x6840, 0xc989,	0x687f, 0xc989,		0x21, 0
+	.dw 0x68c0, 0xc989,	0x68ff, 0xc989,		0x21, 0
+	.dw 0x6940, 0xc989,	0x697f, 0xc989,		0x21, 0
+	.dw 0x69c0, 0xc989,	0x69ff, 0xc989,		0x21, 0
+	.dw 0x6a40, 0xc989,	0x6a7f, 0xc989,		0x21, 0
+	.dw 0x6ac0, 0xc989,	0x6aff, 0xc989,		0x21, 0
+	.dw 0x6b40, 0xc989,	0x6b7f, 0xc989,		0x21, 0
+	.dw 0x6bc0, 0xc989,	0x6bff, 0xc989,		0x21, 0
+	.dw 0x6c40, 0xc989,	0x6c7f, 0xc989,		0x21, 0
+	.dw 0x6cc0, 0xc989,	0x6cff, 0xc989,		0x21, 0
+	.dw 0x6d40, 0xc989,	0x6d7f, 0xc989,		0x21, 0
+	.dw 0x6dc0, 0xc989,	0x6dff, 0xc989,		0x21, 0
+	.dw 0x6e40, 0xc989,	0x6e7f, 0xc989,		0x21, 0
+	.dw 0x6ec0, 0xc989,	0x6eff, 0xc989,		0x21, 0
+	.dw 0x6f40, 0xc989,	0x6f7f, 0xc989,		0x21, 0
+	.dw 0x6fc0, 0xc989,	0x6fff, 0xc989,		0x21, 0
+	.dw 0x7040, 0xc989,	0x707f, 0xc989,		0x21, 0
+	.dw 0x70c0, 0xc989,	0x70ff, 0xc989,		0x21, 0
+	.dw 0x7140, 0xc989,	0x717f, 0xc989,		0x21, 0
+	.dw 0x71c0, 0xc989,	0x71ff, 0xc989,		0x21, 0
+	.dw 0x7240, 0xc989,	0x727f, 0xc989,		0x21, 0
+	.dw 0x72c0, 0xc989,	0x72ff, 0xc989,		0x21, 0
+	.dw 0x7340, 0xc989,	0x737f, 0xc989,		0x21, 0
+	.dw 0x73c0, 0xc989,	0x73ff, 0xc989,		0x21, 0
+	.dw 0x7440, 0xc989,	0x747f, 0xc989,		0x21, 0
+	.dw 0x74c0, 0xc989,	0x74ff, 0xc989,		0x21, 0
+	.dw 0x7540, 0xc989,	0x757f, 0xc989,		0x21, 0
+	.dw 0x75c0, 0xc989,	0x75ff, 0xc989,		0x21, 0
+	.dw 0x7640, 0xc989,	0x767f, 0xc989,		0x21, 0
+	.dw 0x76c0, 0xc989,	0x76ff, 0xc989,		0x21, 0
+	.dw 0x7740, 0xc989,	0x777f, 0xc989,		0x21, 0
+	.dw 0x77c0, 0xc989,	0x77ff, 0xc989,		0x21, 0
+	.dw 0x7840, 0xc989,	0x787f, 0xc989,		0x21, 0
+	.dw 0x78c0, 0xc989,	0x78ff, 0xc989,		0x21, 0
+	.dw 0x7940, 0xc989,	0x797f, 0xc989,		0x21, 0
+	.dw 0x79c0, 0xc989,	0x9fff, 0xc989,		0x21, 0
+	.dw 0xa040, 0xc989,	0xa07f, 0xc989,		0x21, 0
+	.dw 0xa0c0, 0xc989,	0xa0ff, 0xc989,		0x21, 0
+	.dw 0xa140, 0xc989,	0xa17f, 0xc989,		0x21, 0
+	.dw 0xa1c0, 0xc989,	0xa1ff, 0xc989,		0x21, 0
+	.dw 0xa240, 0xc989,	0xa27f, 0xc989,		0x21, 0
+	.dw 0xa2c0, 0xc989,	0xa2ff, 0xc989,		0x21, 0
+	.dw 0xa340, 0xc989,	0xa37f, 0xc989,		0x21, 0
+	.dw 0xa3c0, 0xc989,	0xa3ff, 0xc989,		0x21, 0
+	.dw 0xa440, 0xc989,	0xa47f, 0xc989,		0x21, 0
+	.dw 0xa4c0, 0xc989,	0xa4ff, 0xc989,		0x21, 0
+	.dw 0xa540, 0xc989,	0xa57f, 0xc989,		0x21, 0
+	.dw 0xa5c0, 0xc989,	0xa5ff, 0xc989,		0x21, 0
+	.dw 0xa640, 0xc989,	0xa67f, 0xc989,		0x21, 0
+	.dw 0xa6c0, 0xc989,	0xa6ff, 0xc989,		0x21, 0
+	.dw 0xa740, 0xc989,	0xa77f, 0xc989,		0x21, 0
+	.dw 0xa7c0, 0xc989,	0xa7ff, 0xc989,		0x21, 0
+	.dw 0xa840, 0xc989,	0xa87f, 0xc989,		0x21, 0
+	.dw 0xa8c0, 0xc989,	0xa8ff, 0xc989,		0x21, 0
+	.dw 0xa940, 0xc989,	0xa97f, 0xc989,		0x21, 0
+	.dw 0xa9c0, 0xc989,	0xa9ff, 0xc989,		0x21, 0
+	.dw 0xaa40, 0xc989,	0xaa7f, 0xc989,		0x21, 0
+	.dw 0xaac0, 0xc989,	0xaaff, 0xc989,		0x21, 0
+	.dw 0xab40, 0xc989,	0xab7f, 0xc989,		0x21, 0
+	.dw 0xabc0, 0xc989,	0xabff, 0xc989,		0x21, 0
+	.dw 0xac40, 0xc989,	0xac7f, 0xc989,		0x21, 0
+	.dw 0xacc0, 0xc989,	0xacff, 0xc989,		0x21, 0
+	.dw 0xad40, 0xc989,	0xad7f, 0xc989,		0x21, 0
+	.dw 0xadc0, 0xc989,	0xadff, 0xc989,		0x21, 0
+	.dw 0xae40, 0xc989,	0xae7f, 0xc989,		0x21, 0
+	.dw 0xaec0, 0xc989,	0xaeff, 0xc989,		0x21, 0
+	.dw 0xaf40, 0xc989,	0xaf7f, 0xc989,		0x21, 0
+	.dw 0xafc0, 0xc989,	0xafff, 0xc989,		0x21, 0
+	.dw 0xb040, 0xc989,	0xb07f, 0xc989,		0x21, 0
+	.dw 0xb0c0, 0xc989,	0xb0ff, 0xc989,		0x21, 0
+	.dw 0xb140, 0xc989,	0xb17f, 0xc989,		0x21, 0
+	.dw 0xb1c0, 0xc989,	0xb1ff, 0xc989,		0x21, 0
+	.dw 0xb240, 0xc989,	0xb27f, 0xc989,		0x21, 0
+	.dw 0xb2c0, 0xc989,	0xb2ff, 0xc989,		0x21, 0
+	.dw 0xb340, 0xc989,	0xb37f, 0xc989,		0x21, 0
+	.dw 0xb3c0, 0xc989,	0xb3ff, 0xc989,		0x21, 0
+	.dw 0xb440, 0xc989,	0xb47f, 0xc989,		0x21, 0
+	.dw 0xb4c0, 0xc989,	0xb4ff, 0xc989,		0x21, 0
+	.dw 0xb540, 0xc989,	0xb57f, 0xc989,		0x21, 0
+	.dw 0xb5c0, 0xc989,	0xb5ff, 0xc989,		0x21, 0
+	.dw 0xb640, 0xc989,	0xb67f, 0xc989,		0x21, 0
+	.dw 0xb6c0, 0xc989,	0xb6ff, 0xc989,		0x21, 0
+	.dw 0xb740, 0xc989,	0xb77f, 0xc989,		0x21, 0
+	.dw 0xb7c0, 0xc989,	0xb7ff, 0xc989,		0x21, 0
+	.dw 0xb840, 0xc989,	0xb87f, 0xc989,		0x21, 0
+	.dw 0xb8c0, 0xc989,	0xb8ff, 0xc989,		0x21, 0
+	.dw 0xb940, 0xc989,	0xb97f, 0xc989,		0x21, 0
+	.dw 0xb9c0, 0xc989,	0xdfff, 0xc989,		0x21, 0
+	.dw 0xe040, 0xc989,	0xe07f, 0xc989,		0x21, 0
+	.dw 0xe0c0, 0xc989,	0xe0ff, 0xc989,		0x21, 0
+	.dw 0xe140, 0xc989,	0xe17f, 0xc989,		0x21, 0
+	.dw 0xe1c0, 0xc989,	0xe1ff, 0xc989,		0x21, 0
+	.dw 0xe240, 0xc989,	0xe27f, 0xc989,		0x21, 0
+	.dw 0xe2c0, 0xc989,	0xe2ff, 0xc989,		0x21, 0
+	.dw 0xe340, 0xc989,	0xe37f, 0xc989,		0x21, 0
+	.dw 0xe3c0, 0xc989,	0xe3ff, 0xc989,		0x21, 0
+	.dw 0xe440, 0xc989,	0xe47f, 0xc989,		0x21, 0
+	.dw 0xe4c0, 0xc989,	0xe4ff, 0xc989,		0x21, 0
+	.dw 0xe540, 0xc989,	0xe57f, 0xc989,		0x21, 0
+	.dw 0xe5c0, 0xc989,	0xe5ff, 0xc989,		0x21, 0
+	.dw 0xe640, 0xc989,	0xe67f, 0xc989,		0x21, 0
+	.dw 0xe6c0, 0xc989,	0xe6ff, 0xc989,		0x21, 0
+	.dw 0xe740, 0xc989,	0xe77f, 0xc989,		0x21, 0
+	.dw 0xe7c0, 0xc989,	0xe7ff, 0xc989,		0x21, 0
+	.dw 0xe840, 0xc989,	0xe87f, 0xc989,		0x21, 0
+	.dw 0xe8c0, 0xc989,	0xe8ff, 0xc989,		0x21, 0
+	.dw 0xe940, 0xc989,	0xe97f, 0xc989,		0x21, 0
+	.dw 0xe9c0, 0xc989,	0xe9ff, 0xc989,		0x21, 0
+	.dw 0xea40, 0xc989,	0xea7f, 0xc989,		0x21, 0
+	.dw 0xeac0, 0xc989,	0xeaff, 0xc989,		0x21, 0
+	.dw 0xeb40, 0xc989,	0xeb7f, 0xc989,		0x21, 0
+	.dw 0xebc0, 0xc989,	0xebff, 0xc989,		0x21, 0
+	.dw 0xec40, 0xc989,	0xec7f, 0xc989,		0x21, 0
+	.dw 0xecc0, 0xc989,	0xecff, 0xc989,		0x21, 0
+	.dw 0xed40, 0xc989,	0xed7f, 0xc989,		0x21, 0
+	.dw 0xedc0, 0xc989,	0xedff, 0xc989,		0x21, 0
+	.dw 0xee40, 0xc989,	0xee7f, 0xc989,		0x21, 0
+	.dw 0xeec0, 0xc989,	0xeeff, 0xc989,		0x21, 0
+	.dw 0xef40, 0xc989,	0xef7f, 0xc989,		0x21, 0
+	.dw 0xefc0, 0xc989,	0xefff, 0xc989,		0x21, 0
+	.dw 0xf040, 0xc989,	0xf07f, 0xc989,		0x21, 0
+	.dw 0xf0c0, 0xc989,	0xf0ff, 0xc989,		0x21, 0
+	.dw 0xf140, 0xc989,	0xf17f, 0xc989,		0x21, 0
+	.dw 0xf1c0, 0xc989,	0xf1ff, 0xc989,		0x21, 0
+	.dw 0xf240, 0xc989,	0xf27f, 0xc989,		0x21, 0
+	.dw 0xf2c0, 0xc989,	0xf2ff, 0xc989,		0x21, 0
+	.dw 0xf340, 0xc989,	0xf37f, 0xc989,		0x21, 0
+	.dw 0xf3c0, 0xc989,	0xf3ff, 0xc989,		0x21, 0
+	.dw 0xf440, 0xc989,	0xf47f, 0xc989,		0x21, 0
+	.dw 0xf4c0, 0xc989,	0xf4ff, 0xc989,		0x21, 0
+	.dw 0xf540, 0xc989,	0xf57f, 0xc989,		0x21, 0
+	.dw 0xf5c0, 0xc989,	0xf5ff, 0xc989,		0x21, 0
+	.dw 0xf640, 0xc989,	0xf67f, 0xc989,		0x21, 0
+	.dw 0xf6c0, 0xc989,	0xf6ff, 0xc989,		0x21, 0
+	.dw 0xf740, 0xc989,	0xf77f, 0xc989,		0x21, 0
+	.dw 0xf7c0, 0xc989,	0xf7ff, 0xc989,		0x21, 0
+	.dw 0xf840, 0xc989,	0xf87f, 0xc989,		0x21, 0
+	.dw 0xf8c0, 0xc989,	0xf8ff, 0xc989,		0x21, 0
+	.dw 0xf940, 0xc989,	0xf97f, 0xc989,		0x21, 0
+	.dw 0xf9c0, 0xc989,	0x1fff, 0xc98a,		0x21, 0
+	.dw 0x2040, 0xc98a,	0x207f, 0xc98a,		0x21, 0
+	.dw 0x20c0, 0xc98a,	0x20ff, 0xc98a,		0x21, 0
+	.dw 0x2140, 0xc98a,	0x217f, 0xc98a,		0x21, 0
+	.dw 0x21c0, 0xc98a,	0x21ff, 0xc98a,		0x21, 0
+	.dw 0x2240, 0xc98a,	0x227f, 0xc98a,		0x21, 0
+	.dw 0x22c0, 0xc98a,	0x22ff, 0xc98a,		0x21, 0
+	.dw 0x2340, 0xc98a,	0x237f, 0xc98a,		0x21, 0
+	.dw 0x23c0, 0xc98a,	0x23ff, 0xc98a,		0x21, 0
+	.dw 0x2440, 0xc98a,	0x247f, 0xc98a,		0x21, 0
+	.dw 0x24c0, 0xc98a,	0x24ff, 0xc98a,		0x21, 0
+	.dw 0x2540, 0xc98a,	0x257f, 0xc98a,		0x21, 0
+	.dw 0x25c0, 0xc98a,	0x25ff, 0xc98a,		0x21, 0
+	.dw 0x2640, 0xc98a,	0x267f, 0xc98a,		0x21, 0
+	.dw 0x26c0, 0xc98a,	0x26ff, 0xc98a,		0x21, 0
+	.dw 0x2740, 0xc98a,	0x277f, 0xc98a,		0x21, 0
+	.dw 0x27c0, 0xc98a,	0x27ff, 0xc98a,		0x21, 0
+	.dw 0x2840, 0xc98a,	0x287f, 0xc98a,		0x21, 0
+	.dw 0x28c0, 0xc98a,	0x28ff, 0xc98a,		0x21, 0
+	.dw 0x2940, 0xc98a,	0x297f, 0xc98a,		0x21, 0
+	.dw 0x29c0, 0xc98a,	0x29ff, 0xc98a,		0x21, 0
+	.dw 0x2a40, 0xc98a,	0x2a7f, 0xc98a,		0x21, 0
+	.dw 0x2ac0, 0xc98a,	0x2aff, 0xc98a,		0x21, 0
+	.dw 0x2b40, 0xc98a,	0x2b7f, 0xc98a,		0x21, 0
+	.dw 0x2bc0, 0xc98a,	0x2bff, 0xc98a,		0x21, 0
+	.dw 0x2c40, 0xc98a,	0x2c7f, 0xc98a,		0x21, 0
+	.dw 0x2cc0, 0xc98a,	0x2cff, 0xc98a,		0x21, 0
+	.dw 0x2d40, 0xc98a,	0x2d7f, 0xc98a,		0x21, 0
+	.dw 0x2dc0, 0xc98a,	0x2dff, 0xc98a,		0x21, 0
+	.dw 0x2e40, 0xc98a,	0x2e7f, 0xc98a,		0x21, 0
+	.dw 0x2ec0, 0xc98a,	0x2eff, 0xc98a,		0x21, 0
+	.dw 0x2f40, 0xc98a,	0x2f7f, 0xc98a,		0x21, 0
+	.dw 0x2fc0, 0xc98a,	0x2fff, 0xc98a,		0x21, 0
+	.dw 0x3040, 0xc98a,	0x307f, 0xc98a,		0x21, 0
+	.dw 0x30c0, 0xc98a,	0x30ff, 0xc98a,		0x21, 0
+	.dw 0x3140, 0xc98a,	0x317f, 0xc98a,		0x21, 0
+	.dw 0x31c0, 0xc98a,	0x31ff, 0xc98a,		0x21, 0
+	.dw 0x3240, 0xc98a,	0x327f, 0xc98a,		0x21, 0
+	.dw 0x32c0, 0xc98a,	0x32ff, 0xc98a,		0x21, 0
+	.dw 0x3340, 0xc98a,	0x337f, 0xc98a,		0x21, 0
+	.dw 0x33c0, 0xc98a,	0x33ff, 0xc98a,		0x21, 0
+	.dw 0x3440, 0xc98a,	0x347f, 0xc98a,		0x21, 0
+	.dw 0x34c0, 0xc98a,	0x34ff, 0xc98a,		0x21, 0
+	.dw 0x3540, 0xc98a,	0x357f, 0xc98a,		0x21, 0
+	.dw 0x35c0, 0xc98a,	0x35ff, 0xc98a,		0x21, 0
+	.dw 0x3640, 0xc98a,	0x367f, 0xc98a,		0x21, 0
+	.dw 0x36c0, 0xc98a,	0x36ff, 0xc98a,		0x21, 0
+	.dw 0x3740, 0xc98a,	0x377f, 0xc98a,		0x21, 0
+	.dw 0x37c0, 0xc98a,	0x37ff, 0xc98a,		0x21, 0
+	.dw 0x3840, 0xc98a,	0x387f, 0xc98a,		0x21, 0
+	.dw 0x38c0, 0xc98a,	0x38ff, 0xc98a,		0x21, 0
+	.dw 0x3940, 0xc98a,	0x397f, 0xc98a,		0x21, 0
+	.dw 0x39c0, 0xc98a,	0x5fff, 0xc98a,		0x21, 0
+	.dw 0x6040, 0xc98a,	0x607f, 0xc98a,		0x21, 0
+	.dw 0x60c0, 0xc98a,	0x60ff, 0xc98a,		0x21, 0
+	.dw 0x6140, 0xc98a,	0x617f, 0xc98a,		0x21, 0
+	.dw 0x61c0, 0xc98a,	0x61ff, 0xc98a,		0x21, 0
+	.dw 0x6240, 0xc98a,	0x627f, 0xc98a,		0x21, 0
+	.dw 0x62c0, 0xc98a,	0x62ff, 0xc98a,		0x21, 0
+	.dw 0x6340, 0xc98a,	0x637f, 0xc98a,		0x21, 0
+	.dw 0x63c0, 0xc98a,	0x63ff, 0xc98a,		0x21, 0
+	.dw 0x6440, 0xc98a,	0x647f, 0xc98a,		0x21, 0
+	.dw 0x64c0, 0xc98a,	0x64ff, 0xc98a,		0x21, 0
+	.dw 0x6540, 0xc98a,	0x657f, 0xc98a,		0x21, 0
+	.dw 0x65c0, 0xc98a,	0x65ff, 0xc98a,		0x21, 0
+	.dw 0x6640, 0xc98a,	0x667f, 0xc98a,		0x21, 0
+	.dw 0x66c0, 0xc98a,	0x66ff, 0xc98a,		0x21, 0
+	.dw 0x6740, 0xc98a,	0x677f, 0xc98a,		0x21, 0
+	.dw 0x67c0, 0xc98a,	0x67ff, 0xc98a,		0x21, 0
+	.dw 0x6840, 0xc98a,	0x687f, 0xc98a,		0x21, 0
+	.dw 0x68c0, 0xc98a,	0x68ff, 0xc98a,		0x21, 0
+	.dw 0x6940, 0xc98a,	0x697f, 0xc98a,		0x21, 0
+	.dw 0x69c0, 0xc98a,	0x69ff, 0xc98a,		0x21, 0
+	.dw 0x6a40, 0xc98a,	0x6a7f, 0xc98a,		0x21, 0
+	.dw 0x6ac0, 0xc98a,	0x6aff, 0xc98a,		0x21, 0
+	.dw 0x6b40, 0xc98a,	0x6b7f, 0xc98a,		0x21, 0
+	.dw 0x6bc0, 0xc98a,	0x6bff, 0xc98a,		0x21, 0
+	.dw 0x6c40, 0xc98a,	0x6c7f, 0xc98a,		0x21, 0
+	.dw 0x6cc0, 0xc98a,	0x6cff, 0xc98a,		0x21, 0
+	.dw 0x6d40, 0xc98a,	0x6d7f, 0xc98a,		0x21, 0
+	.dw 0x6dc0, 0xc98a,	0x6dff, 0xc98a,		0x21, 0
+	.dw 0x6e40, 0xc98a,	0x6e7f, 0xc98a,		0x21, 0
+	.dw 0x6ec0, 0xc98a,	0x6eff, 0xc98a,		0x21, 0
+	.dw 0x6f40, 0xc98a,	0x6f7f, 0xc98a,		0x21, 0
+	.dw 0x6fc0, 0xc98a,	0x6fff, 0xc98a,		0x21, 0
+	.dw 0x7040, 0xc98a,	0x707f, 0xc98a,		0x21, 0
+	.dw 0x70c0, 0xc98a,	0x70ff, 0xc98a,		0x21, 0
+	.dw 0x7140, 0xc98a,	0x717f, 0xc98a,		0x21, 0
+	.dw 0x71c0, 0xc98a,	0x71ff, 0xc98a,		0x21, 0
+	.dw 0x7240, 0xc98a,	0x727f, 0xc98a,		0x21, 0
+	.dw 0x72c0, 0xc98a,	0x72ff, 0xc98a,		0x21, 0
+	.dw 0x7340, 0xc98a,	0x737f, 0xc98a,		0x21, 0
+	.dw 0x73c0, 0xc98a,	0x73ff, 0xc98a,		0x21, 0
+	.dw 0x7440, 0xc98a,	0x747f, 0xc98a,		0x21, 0
+	.dw 0x74c0, 0xc98a,	0x74ff, 0xc98a,		0x21, 0
+	.dw 0x7540, 0xc98a,	0x757f, 0xc98a,		0x21, 0
+	.dw 0x75c0, 0xc98a,	0x75ff, 0xc98a,		0x21, 0
+	.dw 0x7640, 0xc98a,	0x767f, 0xc98a,		0x21, 0
+	.dw 0x76c0, 0xc98a,	0x76ff, 0xc98a,		0x21, 0
+	.dw 0x7740, 0xc98a,	0x777f, 0xc98a,		0x21, 0
+	.dw 0x77c0, 0xc98a,	0x77ff, 0xc98a,		0x21, 0
+	.dw 0x7840, 0xc98a,	0x787f, 0xc98a,		0x21, 0
+	.dw 0x78c0, 0xc98a,	0x78ff, 0xc98a,		0x21, 0
+	.dw 0x7940, 0xc98a,	0x797f, 0xc98a,		0x21, 0
+	.dw 0x79c0, 0xc98a,	0x9fff, 0xc98a,		0x21, 0
+	.dw 0xa040, 0xc98a,	0xa07f, 0xc98a,		0x21, 0
+	.dw 0xa0c0, 0xc98a,	0xa0ff, 0xc98a,		0x21, 0
+	.dw 0xa140, 0xc98a,	0xa17f, 0xc98a,		0x21, 0
+	.dw 0xa1c0, 0xc98a,	0xa1ff, 0xc98a,		0x21, 0
+	.dw 0xa240, 0xc98a,	0xa27f, 0xc98a,		0x21, 0
+	.dw 0xa2c0, 0xc98a,	0xa2ff, 0xc98a,		0x21, 0
+	.dw 0xa340, 0xc98a,	0xa37f, 0xc98a,		0x21, 0
+	.dw 0xa3c0, 0xc98a,	0xa3ff, 0xc98a,		0x21, 0
+	.dw 0xa440, 0xc98a,	0xa47f, 0xc98a,		0x21, 0
+	.dw 0xa4c0, 0xc98a,	0xa4ff, 0xc98a,		0x21, 0
+	.dw 0xa540, 0xc98a,	0xa57f, 0xc98a,		0x21, 0
+	.dw 0xa5c0, 0xc98a,	0xa5ff, 0xc98a,		0x21, 0
+	.dw 0xa640, 0xc98a,	0xa67f, 0xc98a,		0x21, 0
+	.dw 0xa6c0, 0xc98a,	0xa6ff, 0xc98a,		0x21, 0
+	.dw 0xa740, 0xc98a,	0xa77f, 0xc98a,		0x21, 0
+	.dw 0xa7c0, 0xc98a,	0xa7ff, 0xc98a,		0x21, 0
+	.dw 0xa840, 0xc98a,	0xa87f, 0xc98a,		0x21, 0
+	.dw 0xa8c0, 0xc98a,	0xa8ff, 0xc98a,		0x21, 0
+	.dw 0xa940, 0xc98a,	0xa97f, 0xc98a,		0x21, 0
+	.dw 0xa9c0, 0xc98a,	0xa9ff, 0xc98a,		0x21, 0
+	.dw 0xaa40, 0xc98a,	0xaa7f, 0xc98a,		0x21, 0
+	.dw 0xaac0, 0xc98a,	0xaaff, 0xc98a,		0x21, 0
+	.dw 0xab40, 0xc98a,	0xab7f, 0xc98a,		0x21, 0
+	.dw 0xabc0, 0xc98a,	0xabff, 0xc98a,		0x21, 0
+	.dw 0xac40, 0xc98a,	0xac7f, 0xc98a,		0x21, 0
+	.dw 0xacc0, 0xc98a,	0xacff, 0xc98a,		0x21, 0
+	.dw 0xad40, 0xc98a,	0xad7f, 0xc98a,		0x21, 0
+	.dw 0xadc0, 0xc98a,	0xadff, 0xc98a,		0x21, 0
+	.dw 0xae40, 0xc98a,	0xae7f, 0xc98a,		0x21, 0
+	.dw 0xaec0, 0xc98a,	0xaeff, 0xc98a,		0x21, 0
+	.dw 0xaf40, 0xc98a,	0xaf7f, 0xc98a,		0x21, 0
+	.dw 0xafc0, 0xc98a,	0xafff, 0xc98a,		0x21, 0
+	.dw 0xb040, 0xc98a,	0xb07f, 0xc98a,		0x21, 0
+	.dw 0xb0c0, 0xc98a,	0xb0ff, 0xc98a,		0x21, 0
+	.dw 0xb140, 0xc98a,	0xb17f, 0xc98a,		0x21, 0
+	.dw 0xb1c0, 0xc98a,	0xb1ff, 0xc98a,		0x21, 0
+	.dw 0xb240, 0xc98a,	0xb27f, 0xc98a,		0x21, 0
+	.dw 0xb2c0, 0xc98a,	0xb2ff, 0xc98a,		0x21, 0
+	.dw 0xb340, 0xc98a,	0xb37f, 0xc98a,		0x21, 0
+	.dw 0xb3c0, 0xc98a,	0xb3ff, 0xc98a,		0x21, 0
+	.dw 0xb440, 0xc98a,	0xb47f, 0xc98a,		0x21, 0
+	.dw 0xb4c0, 0xc98a,	0xb4ff, 0xc98a,		0x21, 0
+	.dw 0xb540, 0xc98a,	0xb57f, 0xc98a,		0x21, 0
+	.dw 0xb5c0, 0xc98a,	0xb5ff, 0xc98a,		0x21, 0
+	.dw 0xb640, 0xc98a,	0xb67f, 0xc98a,		0x21, 0
+	.dw 0xb6c0, 0xc98a,	0xb6ff, 0xc98a,		0x21, 0
+	.dw 0xb740, 0xc98a,	0xb77f, 0xc98a,		0x21, 0
+	.dw 0xb7c0, 0xc98a,	0xb7ff, 0xc98a,		0x21, 0
+	.dw 0xb840, 0xc98a,	0xb87f, 0xc98a,		0x21, 0
+	.dw 0xb8c0, 0xc98a,	0xb8ff, 0xc98a,		0x21, 0
+	.dw 0xb940, 0xc98a,	0xb97f, 0xc98a,		0x21, 0
+	.dw 0xb9c0, 0xc98a,	0xdfff, 0xc98a,		0x21, 0
+	.dw 0xe040, 0xc98a,	0xe07f, 0xc98a,		0x21, 0
+	.dw 0xe0c0, 0xc98a,	0xe0ff, 0xc98a,		0x21, 0
+	.dw 0xe140, 0xc98a,	0xe17f, 0xc98a,		0x21, 0
+	.dw 0xe1c0, 0xc98a,	0xe1ff, 0xc98a,		0x21, 0
+	.dw 0xe240, 0xc98a,	0xe27f, 0xc98a,		0x21, 0
+	.dw 0xe2c0, 0xc98a,	0xe2ff, 0xc98a,		0x21, 0
+	.dw 0xe340, 0xc98a,	0xe37f, 0xc98a,		0x21, 0
+	.dw 0xe3c0, 0xc98a,	0xe3ff, 0xc98a,		0x21, 0
+	.dw 0xe440, 0xc98a,	0xe47f, 0xc98a,		0x21, 0
+	.dw 0xe4c0, 0xc98a,	0xe4ff, 0xc98a,		0x21, 0
+	.dw 0xe540, 0xc98a,	0xe57f, 0xc98a,		0x21, 0
+	.dw 0xe5c0, 0xc98a,	0xe5ff, 0xc98a,		0x21, 0
+	.dw 0xe640, 0xc98a,	0xe67f, 0xc98a,		0x21, 0
+	.dw 0xe6c0, 0xc98a,	0xe6ff, 0xc98a,		0x21, 0
+	.dw 0xe740, 0xc98a,	0xe77f, 0xc98a,		0x21, 0
+	.dw 0xe7c0, 0xc98a,	0xe7ff, 0xc98a,		0x21, 0
+	.dw 0xe840, 0xc98a,	0xe87f, 0xc98a,		0x21, 0
+	.dw 0xe8c0, 0xc98a,	0xe8ff, 0xc98a,		0x21, 0
+	.dw 0xe940, 0xc98a,	0xe97f, 0xc98a,		0x21, 0
+	.dw 0xe9c0, 0xc98a,	0xe9ff, 0xc98a,		0x21, 0
+	.dw 0xea40, 0xc98a,	0xea7f, 0xc98a,		0x21, 0
+	.dw 0xeac0, 0xc98a,	0xeaff, 0xc98a,		0x21, 0
+	.dw 0xeb40, 0xc98a,	0xeb7f, 0xc98a,		0x21, 0
+	.dw 0xebc0, 0xc98a,	0xebff, 0xc98a,		0x21, 0
+	.dw 0xec40, 0xc98a,	0xec7f, 0xc98a,		0x21, 0
+	.dw 0xecc0, 0xc98a,	0xecff, 0xc98a,		0x21, 0
+	.dw 0xed40, 0xc98a,	0xed7f, 0xc98a,		0x21, 0
+	.dw 0xedc0, 0xc98a,	0xedff, 0xc98a,		0x21, 0
+	.dw 0xee40, 0xc98a,	0xee7f, 0xc98a,		0x21, 0
+	.dw 0xeec0, 0xc98a,	0xeeff, 0xc98a,		0x21, 0
+	.dw 0xef40, 0xc98a,	0xef7f, 0xc98a,		0x21, 0
+	.dw 0xefc0, 0xc98a,	0xefff, 0xc98a,		0x21, 0
+	.dw 0xf040, 0xc98a,	0xf07f, 0xc98a,		0x21, 0
+	.dw 0xf0c0, 0xc98a,	0xf0ff, 0xc98a,		0x21, 0
+	.dw 0xf140, 0xc98a,	0xf17f, 0xc98a,		0x21, 0
+	.dw 0xf1c0, 0xc98a,	0xf1ff, 0xc98a,		0x21, 0
+	.dw 0xf240, 0xc98a,	0xf27f, 0xc98a,		0x21, 0
+	.dw 0xf2c0, 0xc98a,	0xf2ff, 0xc98a,		0x21, 0
+	.dw 0xf340, 0xc98a,	0xf37f, 0xc98a,		0x21, 0
+	.dw 0xf3c0, 0xc98a,	0xf3ff, 0xc98a,		0x21, 0
+	.dw 0xf440, 0xc98a,	0xf47f, 0xc98a,		0x21, 0
+	.dw 0xf4c0, 0xc98a,	0xf4ff, 0xc98a,		0x21, 0
+	.dw 0xf540, 0xc98a,	0xf57f, 0xc98a,		0x21, 0
+	.dw 0xf5c0, 0xc98a,	0xf5ff, 0xc98a,		0x21, 0
+	.dw 0xf640, 0xc98a,	0xf67f, 0xc98a,		0x21, 0
+	.dw 0xf6c0, 0xc98a,	0xf6ff, 0xc98a,		0x21, 0
+	.dw 0xf740, 0xc98a,	0xf77f, 0xc98a,		0x21, 0
+	.dw 0xf7c0, 0xc98a,	0xf7ff, 0xc98a,		0x21, 0
+	.dw 0xf840, 0xc98a,	0xf87f, 0xc98a,		0x21, 0
+	.dw 0xf8c0, 0xc98a,	0xf8ff, 0xc98a,		0x21, 0
+	.dw 0xf940, 0xc98a,	0xf97f, 0xc98a,		0x21, 0
+	.dw 0xf9c0, 0xc98a,	0x1fff, 0xc98b,		0x21, 0
+	.dw 0x2040, 0xc98b,	0x207f, 0xc98b,		0x21, 0
+	.dw 0x20c0, 0xc98b,	0x20ff, 0xc98b,		0x21, 0
+	.dw 0x2140, 0xc98b,	0x217f, 0xc98b,		0x21, 0
+	.dw 0x21c0, 0xc98b,	0x21ff, 0xc98b,		0x21, 0
+	.dw 0x2240, 0xc98b,	0x227f, 0xc98b,		0x21, 0
+	.dw 0x22c0, 0xc98b,	0x22ff, 0xc98b,		0x21, 0
+	.dw 0x2340, 0xc98b,	0x237f, 0xc98b,		0x21, 0
+	.dw 0x23c0, 0xc98b,	0x23ff, 0xc98b,		0x21, 0
+	.dw 0x2440, 0xc98b,	0x247f, 0xc98b,		0x21, 0
+	.dw 0x24c0, 0xc98b,	0x24ff, 0xc98b,		0x21, 0
+	.dw 0x2540, 0xc98b,	0x257f, 0xc98b,		0x21, 0
+	.dw 0x25c0, 0xc98b,	0x25ff, 0xc98b,		0x21, 0
+	.dw 0x2640, 0xc98b,	0x267f, 0xc98b,		0x21, 0
+	.dw 0x26c0, 0xc98b,	0x26ff, 0xc98b,		0x21, 0
+	.dw 0x2740, 0xc98b,	0x277f, 0xc98b,		0x21, 0
+	.dw 0x27c0, 0xc98b,	0x27ff, 0xc98b,		0x21, 0
+	.dw 0x2840, 0xc98b,	0x287f, 0xc98b,		0x21, 0
+	.dw 0x28c0, 0xc98b,	0x28ff, 0xc98b,		0x21, 0
+	.dw 0x2940, 0xc98b,	0x297f, 0xc98b,		0x21, 0
+	.dw 0x29c0, 0xc98b,	0x29ff, 0xc98b,		0x21, 0
+	.dw 0x2a40, 0xc98b,	0x2a7f, 0xc98b,		0x21, 0
+	.dw 0x2ac0, 0xc98b,	0x2aff, 0xc98b,		0x21, 0
+	.dw 0x2b40, 0xc98b,	0x2b7f, 0xc98b,		0x21, 0
+	.dw 0x2bc0, 0xc98b,	0x2bff, 0xc98b,		0x21, 0
+	.dw 0x2c40, 0xc98b,	0x2c7f, 0xc98b,		0x21, 0
+	.dw 0x2cc0, 0xc98b,	0x2cff, 0xc98b,		0x21, 0
+	.dw 0x2d40, 0xc98b,	0x2d7f, 0xc98b,		0x21, 0
+	.dw 0x2dc0, 0xc98b,	0x2dff, 0xc98b,		0x21, 0
+	.dw 0x2e40, 0xc98b,	0x2e7f, 0xc98b,		0x21, 0
+	.dw 0x2ec0, 0xc98b,	0x2eff, 0xc98b,		0x21, 0
+	.dw 0x2f40, 0xc98b,	0x2f7f, 0xc98b,		0x21, 0
+	.dw 0x2fc0, 0xc98b,	0x2fff, 0xc98b,		0x21, 0
+	.dw 0x3040, 0xc98b,	0x307f, 0xc98b,		0x21, 0
+	.dw 0x30c0, 0xc98b,	0x30ff, 0xc98b,		0x21, 0
+	.dw 0x3140, 0xc98b,	0x317f, 0xc98b,		0x21, 0
+	.dw 0x31c0, 0xc98b,	0x31ff, 0xc98b,		0x21, 0
+	.dw 0x3240, 0xc98b,	0x327f, 0xc98b,		0x21, 0
+	.dw 0x32c0, 0xc98b,	0x32ff, 0xc98b,		0x21, 0
+	.dw 0x3340, 0xc98b,	0x337f, 0xc98b,		0x21, 0
+	.dw 0x33c0, 0xc98b,	0x33ff, 0xc98b,		0x21, 0
+	.dw 0x3440, 0xc98b,	0x347f, 0xc98b,		0x21, 0
+	.dw 0x34c0, 0xc98b,	0x34ff, 0xc98b,		0x21, 0
+	.dw 0x3540, 0xc98b,	0x357f, 0xc98b,		0x21, 0
+	.dw 0x35c0, 0xc98b,	0x35ff, 0xc98b,		0x21, 0
+	.dw 0x3640, 0xc98b,	0x367f, 0xc98b,		0x21, 0
+	.dw 0x36c0, 0xc98b,	0x36ff, 0xc98b,		0x21, 0
+	.dw 0x3740, 0xc98b,	0x377f, 0xc98b,		0x21, 0
+	.dw 0x37c0, 0xc98b,	0x37ff, 0xc98b,		0x21, 0
+	.dw 0x3840, 0xc98b,	0x387f, 0xc98b,		0x21, 0
+	.dw 0x38c0, 0xc98b,	0x38ff, 0xc98b,		0x21, 0
+	.dw 0x3940, 0xc98b,	0x397f, 0xc98b,		0x21, 0
+	.dw 0x39c0, 0xc98b,	0xffff, 0xc98b,		0x21, 0
+	.dw 0x0040, 0xc98c,	0x007f, 0xc98c,		0x21, 0
+	.dw 0x00c0, 0xc98c,	0x00ff, 0xc98c,		0x21, 0
+	.dw 0x0140, 0xc98c,	0x017f, 0xc98c,		0x21, 0
+	.dw 0x01c0, 0xc98c,	0x01ff, 0xc98c,		0x21, 0
+	.dw 0x0240, 0xc98c,	0x027f, 0xc98c,		0x21, 0
+	.dw 0x02c0, 0xc98c,	0x02ff, 0xc98c,		0x21, 0
+	.dw 0x0340, 0xc98c,	0x037f, 0xc98c,		0x21, 0
+	.dw 0x03c0, 0xc98c,	0x03ff, 0xc98c,		0x21, 0
+	.dw 0x0440, 0xc98c,	0x047f, 0xc98c,		0x21, 0
+	.dw 0x04c0, 0xc98c,	0x04ff, 0xc98c,		0x21, 0
+	.dw 0x0540, 0xc98c,	0x057f, 0xc98c,		0x21, 0
+	.dw 0x05c0, 0xc98c,	0x05ff, 0xc98c,		0x21, 0
+	.dw 0x0640, 0xc98c,	0x067f, 0xc98c,		0x21, 0
+	.dw 0x06c0, 0xc98c,	0x06ff, 0xc98c,		0x21, 0
+	.dw 0x0740, 0xc98c,	0x077f, 0xc98c,		0x21, 0
+	.dw 0x07c0, 0xc98c,	0x07ff, 0xc98c,		0x21, 0
+	.dw 0x0840, 0xc98c,	0x087f, 0xc98c,		0x21, 0
+	.dw 0x08c0, 0xc98c,	0x08ff, 0xc98c,		0x21, 0
+	.dw 0x0940, 0xc98c,	0x097f, 0xc98c,		0x21, 0
+	.dw 0x09c0, 0xc98c,	0x09ff, 0xc98c,		0x21, 0
+	.dw 0x0a40, 0xc98c,	0x0a7f, 0xc98c,		0x21, 0
+	.dw 0x0ac0, 0xc98c,	0x0aff, 0xc98c,		0x21, 0
+	.dw 0x0b40, 0xc98c,	0x0b7f, 0xc98c,		0x21, 0
+	.dw 0x0bc0, 0xc98c,	0x0bff, 0xc98c,		0x21, 0
+	.dw 0x0c40, 0xc98c,	0x0c7f, 0xc98c,		0x21, 0
+	.dw 0x0cc0, 0xc98c,	0x0cff, 0xc98c,		0x21, 0
+	.dw 0x0d40, 0xc98c,	0x0d7f, 0xc98c,		0x21, 0
+	.dw 0x0dc0, 0xc98c,	0x0dff, 0xc98c,		0x21, 0
+	.dw 0x0e40, 0xc98c,	0x0e7f, 0xc98c,		0x21, 0
+	.dw 0x0ec0, 0xc98c,	0x0eff, 0xc98c,		0x21, 0
+	.dw 0x0f40, 0xc98c,	0x0f7f, 0xc98c,		0x21, 0
+	.dw 0x0fc0, 0xc98c,	0x0fff, 0xc98c,		0x21, 0
+	.dw 0x1040, 0xc98c,	0x107f, 0xc98c,		0x21, 0
+	.dw 0x10c0, 0xc98c,	0x10ff, 0xc98c,		0x21, 0
+	.dw 0x1140, 0xc98c,	0x117f, 0xc98c,		0x21, 0
+	.dw 0x11c0, 0xc98c,	0x11ff, 0xc98c,		0x21, 0
+	.dw 0x1240, 0xc98c,	0x127f, 0xc98c,		0x21, 0
+	.dw 0x12c0, 0xc98c,	0x12ff, 0xc98c,		0x21, 0
+	.dw 0x1340, 0xc98c,	0x137f, 0xc98c,		0x21, 0
+	.dw 0x13c0, 0xc98c,	0x13ff, 0xc98c,		0x21, 0
+	.dw 0x1440, 0xc98c,	0x147f, 0xc98c,		0x21, 0
+	.dw 0x14c0, 0xc98c,	0x14ff, 0xc98c,		0x21, 0
+	.dw 0x1540, 0xc98c,	0x157f, 0xc98c,		0x21, 0
+	.dw 0x15c0, 0xc98c,	0x15ff, 0xc98c,		0x21, 0
+	.dw 0x1640, 0xc98c,	0x167f, 0xc98c,		0x21, 0
+	.dw 0x16c0, 0xc98c,	0x16ff, 0xc98c,		0x21, 0
+	.dw 0x1740, 0xc98c,	0x177f, 0xc98c,		0x21, 0
+	.dw 0x17c0, 0xc98c,	0x17ff, 0xc98c,		0x21, 0
+	.dw 0x1840, 0xc98c,	0x187f, 0xc98c,		0x21, 0
+	.dw 0x18c0, 0xc98c,	0x18ff, 0xc98c,		0x21, 0
+	.dw 0x1940, 0xc98c,	0x197f, 0xc98c,		0x21, 0
+	.dw 0x19c0, 0xc98c,	0x1fff, 0xc98c,		0x21, 0
+	.dw 0x2040, 0xc98c,	0x207f, 0xc98c,		0x21, 0
+	.dw 0x20c0, 0xc98c,	0x20ff, 0xc98c,		0x21, 0
+	.dw 0x2140, 0xc98c,	0x217f, 0xc98c,		0x21, 0
+	.dw 0x21c0, 0xc98c,	0x21ff, 0xc98c,		0x21, 0
+	.dw 0x2240, 0xc98c,	0x227f, 0xc98c,		0x21, 0
+	.dw 0x22c0, 0xc98c,	0x22ff, 0xc98c,		0x21, 0
+	.dw 0x2340, 0xc98c,	0x237f, 0xc98c,		0x21, 0
+	.dw 0x23c0, 0xc98c,	0x23ff, 0xc98c,		0x21, 0
+	.dw 0x2440, 0xc98c,	0x247f, 0xc98c,		0x21, 0
+	.dw 0x24c0, 0xc98c,	0x24ff, 0xc98c,		0x21, 0
+	.dw 0x2540, 0xc98c,	0x257f, 0xc98c,		0x21, 0
+	.dw 0x25c0, 0xc98c,	0x25ff, 0xc98c,		0x21, 0
+	.dw 0x2640, 0xc98c,	0x267f, 0xc98c,		0x21, 0
+	.dw 0x26c0, 0xc98c,	0x26ff, 0xc98c,		0x21, 0
+	.dw 0x2740, 0xc98c,	0x277f, 0xc98c,		0x21, 0
+	.dw 0x27c0, 0xc98c,	0x27ff, 0xc98c,		0x21, 0
+	.dw 0x2840, 0xc98c,	0x287f, 0xc98c,		0x21, 0
+	.dw 0x28c0, 0xc98c,	0x28ff, 0xc98c,		0x21, 0
+	.dw 0x2940, 0xc98c,	0x297f, 0xc98c,		0x21, 0
+	.dw 0x29c0, 0xc98c,	0x29ff, 0xc98c,		0x21, 0
+	.dw 0x2a40, 0xc98c,	0x2a7f, 0xc98c,		0x21, 0
+	.dw 0x2ac0, 0xc98c,	0x2aff, 0xc98c,		0x21, 0
+	.dw 0x2b40, 0xc98c,	0x2b7f, 0xc98c,		0x21, 0
+	.dw 0x2bc0, 0xc98c,	0x2bff, 0xc98c,		0x21, 0
+	.dw 0x2c40, 0xc98c,	0x2c7f, 0xc98c,		0x21, 0
+	.dw 0x2cc0, 0xc98c,	0x2cff, 0xc98c,		0x21, 0
+	.dw 0x2d40, 0xc98c,	0x2d7f, 0xc98c,		0x21, 0
+	.dw 0x2dc0, 0xc98c,	0x2dff, 0xc98c,		0x21, 0
+	.dw 0x2e40, 0xc98c,	0x2e7f, 0xc98c,		0x21, 0
+	.dw 0x2ec0, 0xc98c,	0x2eff, 0xc98c,		0x21, 0
+	.dw 0x2f40, 0xc98c,	0x2f7f, 0xc98c,		0x21, 0
+	.dw 0x2fc0, 0xc98c,	0x2fff, 0xc98c,		0x21, 0
+	.dw 0x3040, 0xc98c,	0x307f, 0xc98c,		0x21, 0
+	.dw 0x30c0, 0xc98c,	0x30ff, 0xc98c,		0x21, 0
+	.dw 0x3140, 0xc98c,	0x317f, 0xc98c,		0x21, 0
+	.dw 0x31c0, 0xc98c,	0x31ff, 0xc98c,		0x21, 0
+	.dw 0x3240, 0xc98c,	0x327f, 0xc98c,		0x21, 0
+	.dw 0x32c0, 0xc98c,	0x32ff, 0xc98c,		0x21, 0
+	.dw 0x3340, 0xc98c,	0x337f, 0xc98c,		0x21, 0
+	.dw 0x33c0, 0xc98c,	0x33ff, 0xc98c,		0x21, 0
+	.dw 0x3440, 0xc98c,	0x347f, 0xc98c,		0x21, 0
+	.dw 0x34c0, 0xc98c,	0x34ff, 0xc98c,		0x21, 0
+	.dw 0x3540, 0xc98c,	0x357f, 0xc98c,		0x21, 0
+	.dw 0x35c0, 0xc98c,	0x35ff, 0xc98c,		0x21, 0
+	.dw 0x3640, 0xc98c,	0x367f, 0xc98c,		0x21, 0
+	.dw 0x36c0, 0xc98c,	0x36ff, 0xc98c,		0x21, 0
+	.dw 0x3740, 0xc98c,	0x377f, 0xc98c,		0x21, 0
+	.dw 0x37c0, 0xc98c,	0x37ff, 0xc98c,		0x21, 0
+	.dw 0x3840, 0xc98c,	0x387f, 0xc98c,		0x21, 0
+	.dw 0x38c0, 0xc98c,	0x38ff, 0xc98c,		0x21, 0
+	.dw 0x3940, 0xc98c,	0x397f, 0xc98c,		0x21, 0
+	.dw 0x39c0, 0xc98c,	0x3fff, 0xc98c,		0x21, 0
+	.dw 0x4040, 0xc98c,	0x407f, 0xc98c,		0x21, 0
+	.dw 0x40c0, 0xc98c,	0x40ff, 0xc98c,		0x21, 0
+	.dw 0x4140, 0xc98c,	0x417f, 0xc98c,		0x21, 0
+	.dw 0x41c0, 0xc98c,	0x41ff, 0xc98c,		0x21, 0
+	.dw 0x4240, 0xc98c,	0x427f, 0xc98c,		0x21, 0
+	.dw 0x42c0, 0xc98c,	0x42ff, 0xc98c,		0x21, 0
+	.dw 0x4340, 0xc98c,	0x437f, 0xc98c,		0x21, 0
+	.dw 0x43c0, 0xc98c,	0x43ff, 0xc98c,		0x21, 0
+	.dw 0x4440, 0xc98c,	0x447f, 0xc98c,		0x21, 0
+	.dw 0x44c0, 0xc98c,	0x44ff, 0xc98c,		0x21, 0
+	.dw 0x4540, 0xc98c,	0x457f, 0xc98c,		0x21, 0
+	.dw 0x45c0, 0xc98c,	0x45ff, 0xc98c,		0x21, 0
+	.dw 0x4640, 0xc98c,	0x467f, 0xc98c,		0x21, 0
+	.dw 0x46c0, 0xc98c,	0x46ff, 0xc98c,		0x21, 0
+	.dw 0x4740, 0xc98c,	0x477f, 0xc98c,		0x21, 0
+	.dw 0x47c0, 0xc98c,	0x47ff, 0xc98c,		0x21, 0
+	.dw 0x4840, 0xc98c,	0x487f, 0xc98c,		0x21, 0
+	.dw 0x48c0, 0xc98c,	0x48ff, 0xc98c,		0x21, 0
+	.dw 0x4940, 0xc98c,	0x497f, 0xc98c,		0x21, 0
+	.dw 0x49c0, 0xc98c,	0x49ff, 0xc98c,		0x21, 0
+	.dw 0x4a40, 0xc98c,	0x4a7f, 0xc98c,		0x21, 0
+	.dw 0x4ac0, 0xc98c,	0x4aff, 0xc98c,		0x21, 0
+	.dw 0x4b40, 0xc98c,	0x4b7f, 0xc98c,		0x21, 0
+	.dw 0x4bc0, 0xc98c,	0x4bff, 0xc98c,		0x21, 0
+	.dw 0x4c40, 0xc98c,	0x4c7f, 0xc98c,		0x21, 0
+	.dw 0x4cc0, 0xc98c,	0x4cff, 0xc98c,		0x21, 0
+	.dw 0x4d40, 0xc98c,	0x4d7f, 0xc98c,		0x21, 0
+	.dw 0x4dc0, 0xc98c,	0x4dff, 0xc98c,		0x21, 0
+	.dw 0x4e40, 0xc98c,	0x4e7f, 0xc98c,		0x21, 0
+	.dw 0x4ec0, 0xc98c,	0x4eff, 0xc98c,		0x21, 0
+	.dw 0x4f40, 0xc98c,	0x4f7f, 0xc98c,		0x21, 0
+	.dw 0x4fc0, 0xc98c,	0x4fff, 0xc98c,		0x21, 0
+	.dw 0x5040, 0xc98c,	0x507f, 0xc98c,		0x21, 0
+	.dw 0x50c0, 0xc98c,	0x50ff, 0xc98c,		0x21, 0
+	.dw 0x5140, 0xc98c,	0x517f, 0xc98c,		0x21, 0
+	.dw 0x51c0, 0xc98c,	0x51ff, 0xc98c,		0x21, 0
+	.dw 0x5240, 0xc98c,	0x527f, 0xc98c,		0x21, 0
+	.dw 0x52c0, 0xc98c,	0x52ff, 0xc98c,		0x21, 0
+	.dw 0x5340, 0xc98c,	0x537f, 0xc98c,		0x21, 0
+	.dw 0x53c0, 0xc98c,	0x53ff, 0xc98c,		0x21, 0
+	.dw 0x5440, 0xc98c,	0x547f, 0xc98c,		0x21, 0
+	.dw 0x54c0, 0xc98c,	0x54ff, 0xc98c,		0x21, 0
+	.dw 0x5540, 0xc98c,	0x557f, 0xc98c,		0x21, 0
+	.dw 0x55c0, 0xc98c,	0x55ff, 0xc98c,		0x21, 0
+	.dw 0x5640, 0xc98c,	0x567f, 0xc98c,		0x21, 0
+	.dw 0x56c0, 0xc98c,	0x56ff, 0xc98c,		0x21, 0
+	.dw 0x5740, 0xc98c,	0x577f, 0xc98c,		0x21, 0
+	.dw 0x57c0, 0xc98c,	0x57ff, 0xc98c,		0x21, 0
+	.dw 0x5840, 0xc98c,	0x587f, 0xc98c,		0x21, 0
+	.dw 0x58c0, 0xc98c,	0x58ff, 0xc98c,		0x21, 0
+	.dw 0x5940, 0xc98c,	0x597f, 0xc98c,		0x21, 0
+	.dw 0x59c0, 0xc98c,	0x5fff, 0xc98c,		0x21, 0
+	.dw 0x6040, 0xc98c,	0x607f, 0xc98c,		0x21, 0
+	.dw 0x60c0, 0xc98c,	0x60ff, 0xc98c,		0x21, 0
+	.dw 0x6140, 0xc98c,	0x617f, 0xc98c,		0x21, 0
+	.dw 0x61c0, 0xc98c,	0x61ff, 0xc98c,		0x21, 0
+	.dw 0x6240, 0xc98c,	0x627f, 0xc98c,		0x21, 0
+	.dw 0x62c0, 0xc98c,	0x62ff, 0xc98c,		0x21, 0
+	.dw 0x6340, 0xc98c,	0x637f, 0xc98c,		0x21, 0
+	.dw 0x63c0, 0xc98c,	0x63ff, 0xc98c,		0x21, 0
+	.dw 0x6440, 0xc98c,	0x647f, 0xc98c,		0x21, 0
+	.dw 0x64c0, 0xc98c,	0x64ff, 0xc98c,		0x21, 0
+	.dw 0x6540, 0xc98c,	0x657f, 0xc98c,		0x21, 0
+	.dw 0x65c0, 0xc98c,	0x65ff, 0xc98c,		0x21, 0
+	.dw 0x6640, 0xc98c,	0x667f, 0xc98c,		0x21, 0
+	.dw 0x66c0, 0xc98c,	0x66ff, 0xc98c,		0x21, 0
+	.dw 0x6740, 0xc98c,	0x677f, 0xc98c,		0x21, 0
+	.dw 0x67c0, 0xc98c,	0x67ff, 0xc98c,		0x21, 0
+	.dw 0x6840, 0xc98c,	0x687f, 0xc98c,		0x21, 0
+	.dw 0x68c0, 0xc98c,	0x68ff, 0xc98c,		0x21, 0
+	.dw 0x6940, 0xc98c,	0x697f, 0xc98c,		0x21, 0
+	.dw 0x69c0, 0xc98c,	0x69ff, 0xc98c,		0x21, 0
+	.dw 0x6a40, 0xc98c,	0x6a7f, 0xc98c,		0x21, 0
+	.dw 0x6ac0, 0xc98c,	0x6aff, 0xc98c,		0x21, 0
+	.dw 0x6b40, 0xc98c,	0x6b7f, 0xc98c,		0x21, 0
+	.dw 0x6bc0, 0xc98c,	0x6bff, 0xc98c,		0x21, 0
+	.dw 0x6c40, 0xc98c,	0x6c7f, 0xc98c,		0x21, 0
+	.dw 0x6cc0, 0xc98c,	0x6cff, 0xc98c,		0x21, 0
+	.dw 0x6d40, 0xc98c,	0x6d7f, 0xc98c,		0x21, 0
+	.dw 0x6dc0, 0xc98c,	0x6dff, 0xc98c,		0x21, 0
+	.dw 0x6e40, 0xc98c,	0x6e7f, 0xc98c,		0x21, 0
+	.dw 0x6ec0, 0xc98c,	0x6eff, 0xc98c,		0x21, 0
+	.dw 0x6f40, 0xc98c,	0x6f7f, 0xc98c,		0x21, 0
+	.dw 0x6fc0, 0xc98c,	0x6fff, 0xc98c,		0x21, 0
+	.dw 0x7040, 0xc98c,	0x707f, 0xc98c,		0x21, 0
+	.dw 0x70c0, 0xc98c,	0x70ff, 0xc98c,		0x21, 0
+	.dw 0x7140, 0xc98c,	0x717f, 0xc98c,		0x21, 0
+	.dw 0x71c0, 0xc98c,	0x71ff, 0xc98c,		0x21, 0
+	.dw 0x7240, 0xc98c,	0x727f, 0xc98c,		0x21, 0
+	.dw 0x72c0, 0xc98c,	0x72ff, 0xc98c,		0x21, 0
+	.dw 0x7340, 0xc98c,	0x737f, 0xc98c,		0x21, 0
+	.dw 0x73c0, 0xc98c,	0x73ff, 0xc98c,		0x21, 0
+	.dw 0x7440, 0xc98c,	0x747f, 0xc98c,		0x21, 0
+	.dw 0x74c0, 0xc98c,	0x74ff, 0xc98c,		0x21, 0
+	.dw 0x7540, 0xc98c,	0x757f, 0xc98c,		0x21, 0
+	.dw 0x75c0, 0xc98c,	0x75ff, 0xc98c,		0x21, 0
+	.dw 0x7640, 0xc98c,	0x767f, 0xc98c,		0x21, 0
+	.dw 0x76c0, 0xc98c,	0x76ff, 0xc98c,		0x21, 0
+	.dw 0x7740, 0xc98c,	0x777f, 0xc98c,		0x21, 0
+	.dw 0x77c0, 0xc98c,	0x77ff, 0xc98c,		0x21, 0
+	.dw 0x7840, 0xc98c,	0x787f, 0xc98c,		0x21, 0
+	.dw 0x78c0, 0xc98c,	0x78ff, 0xc98c,		0x21, 0
+	.dw 0x7940, 0xc98c,	0x797f, 0xc98c,		0x21, 0
+	.dw 0x79c0, 0xc98c,	0x7fff, 0xc98c,		0x21, 0
+	.dw 0x8040, 0xc98c,	0x807f, 0xc98c,		0x21, 0
+	.dw 0x80c0, 0xc98c,	0x80ff, 0xc98c,		0x21, 0
+	.dw 0x8140, 0xc98c,	0x817f, 0xc98c,		0x21, 0
+	.dw 0x81c0, 0xc98c,	0x81ff, 0xc98c,		0x21, 0
+	.dw 0x8240, 0xc98c,	0x827f, 0xc98c,		0x21, 0
+	.dw 0x82c0, 0xc98c,	0x82ff, 0xc98c,		0x21, 0
+	.dw 0x8340, 0xc98c,	0x837f, 0xc98c,		0x21, 0
+	.dw 0x83c0, 0xc98c,	0x83ff, 0xc98c,		0x21, 0
+	.dw 0x8440, 0xc98c,	0x847f, 0xc98c,		0x21, 0
+	.dw 0x84c0, 0xc98c,	0x84ff, 0xc98c,		0x21, 0
+	.dw 0x8540, 0xc98c,	0x857f, 0xc98c,		0x21, 0
+	.dw 0x85c0, 0xc98c,	0x85ff, 0xc98c,		0x21, 0
+	.dw 0x8640, 0xc98c,	0x867f, 0xc98c,		0x21, 0
+	.dw 0x86c0, 0xc98c,	0x86ff, 0xc98c,		0x21, 0
+	.dw 0x8740, 0xc98c,	0x877f, 0xc98c,		0x21, 0
+	.dw 0x87c0, 0xc98c,	0x87ff, 0xc98c,		0x21, 0
+	.dw 0x8840, 0xc98c,	0x887f, 0xc98c,		0x21, 0
+	.dw 0x88c0, 0xc98c,	0x88ff, 0xc98c,		0x21, 0
+	.dw 0x8940, 0xc98c,	0x897f, 0xc98c,		0x21, 0
+	.dw 0x89c0, 0xc98c,	0x89ff, 0xc98c,		0x21, 0
+	.dw 0x8a40, 0xc98c,	0x8a7f, 0xc98c,		0x21, 0
+	.dw 0x8ac0, 0xc98c,	0x8aff, 0xc98c,		0x21, 0
+	.dw 0x8b40, 0xc98c,	0x8b7f, 0xc98c,		0x21, 0
+	.dw 0x8bc0, 0xc98c,	0x8bff, 0xc98c,		0x21, 0
+	.dw 0x8c40, 0xc98c,	0x8c7f, 0xc98c,		0x21, 0
+	.dw 0x8cc0, 0xc98c,	0x8cff, 0xc98c,		0x21, 0
+	.dw 0x8d40, 0xc98c,	0x8d7f, 0xc98c,		0x21, 0
+	.dw 0x8dc0, 0xc98c,	0x8dff, 0xc98c,		0x21, 0
+	.dw 0x8e40, 0xc98c,	0x8e7f, 0xc98c,		0x21, 0
+	.dw 0x8ec0, 0xc98c,	0x8eff, 0xc98c,		0x21, 0
+	.dw 0x8f40, 0xc98c,	0x8f7f, 0xc98c,		0x21, 0
+	.dw 0x8fc0, 0xc98c,	0x8fff, 0xc98c,		0x21, 0
+	.dw 0x9040, 0xc98c,	0x907f, 0xc98c,		0x21, 0
+	.dw 0x90c0, 0xc98c,	0x90ff, 0xc98c,		0x21, 0
+	.dw 0x9140, 0xc98c,	0x917f, 0xc98c,		0x21, 0
+	.dw 0x91c0, 0xc98c,	0x91ff, 0xc98c,		0x21, 0
+	.dw 0x9240, 0xc98c,	0x927f, 0xc98c,		0x21, 0
+	.dw 0x92c0, 0xc98c,	0x92ff, 0xc98c,		0x21, 0
+	.dw 0x9340, 0xc98c,	0x937f, 0xc98c,		0x21, 0
+	.dw 0x93c0, 0xc98c,	0x93ff, 0xc98c,		0x21, 0
+	.dw 0x9440, 0xc98c,	0x947f, 0xc98c,		0x21, 0
+	.dw 0x94c0, 0xc98c,	0x94ff, 0xc98c,		0x21, 0
+	.dw 0x9540, 0xc98c,	0x957f, 0xc98c,		0x21, 0
+	.dw 0x95c0, 0xc98c,	0x95ff, 0xc98c,		0x21, 0
+	.dw 0x9640, 0xc98c,	0x967f, 0xc98c,		0x21, 0
+	.dw 0x96c0, 0xc98c,	0x96ff, 0xc98c,		0x21, 0
+	.dw 0x9740, 0xc98c,	0x977f, 0xc98c,		0x21, 0
+	.dw 0x97c0, 0xc98c,	0x97ff, 0xc98c,		0x21, 0
+	.dw 0x9840, 0xc98c,	0x987f, 0xc98c,		0x21, 0
+	.dw 0x98c0, 0xc98c,	0x98ff, 0xc98c,		0x21, 0
+	.dw 0x9940, 0xc98c,	0x997f, 0xc98c,		0x21, 0
+	.dw 0x99c0, 0xc98c,	0x9fff, 0xc98c,		0x21, 0
+	.dw 0xa040, 0xc98c,	0xa07f, 0xc98c,		0x21, 0
+	.dw 0xa0c0, 0xc98c,	0xa0ff, 0xc98c,		0x21, 0
+	.dw 0xa140, 0xc98c,	0xa17f, 0xc98c,		0x21, 0
+	.dw 0xa1c0, 0xc98c,	0xa1ff, 0xc98c,		0x21, 0
+	.dw 0xa240, 0xc98c,	0xa27f, 0xc98c,		0x21, 0
+	.dw 0xa2c0, 0xc98c,	0xa2ff, 0xc98c,		0x21, 0
+	.dw 0xa340, 0xc98c,	0xa37f, 0xc98c,		0x21, 0
+	.dw 0xa3c0, 0xc98c,	0xa3ff, 0xc98c,		0x21, 0
+	.dw 0xa440, 0xc98c,	0xa47f, 0xc98c,		0x21, 0
+	.dw 0xa4c0, 0xc98c,	0xa4ff, 0xc98c,		0x21, 0
+	.dw 0xa540, 0xc98c,	0xa57f, 0xc98c,		0x21, 0
+	.dw 0xa5c0, 0xc98c,	0xa5ff, 0xc98c,		0x21, 0
+	.dw 0xa640, 0xc98c,	0xa67f, 0xc98c,		0x21, 0
+	.dw 0xa6c0, 0xc98c,	0xa6ff, 0xc98c,		0x21, 0
+	.dw 0xa740, 0xc98c,	0xa77f, 0xc98c,		0x21, 0
+	.dw 0xa7c0, 0xc98c,	0xa7ff, 0xc98c,		0x21, 0
+	.dw 0xa840, 0xc98c,	0xa87f, 0xc98c,		0x21, 0
+	.dw 0xa8c0, 0xc98c,	0xa8ff, 0xc98c,		0x21, 0
+	.dw 0xa940, 0xc98c,	0xa97f, 0xc98c,		0x21, 0
+	.dw 0xa9c0, 0xc98c,	0xa9ff, 0xc98c,		0x21, 0
+	.dw 0xaa40, 0xc98c,	0xaa7f, 0xc98c,		0x21, 0
+	.dw 0xaac0, 0xc98c,	0xaaff, 0xc98c,		0x21, 0
+	.dw 0xab40, 0xc98c,	0xab7f, 0xc98c,		0x21, 0
+	.dw 0xabc0, 0xc98c,	0xabff, 0xc98c,		0x21, 0
+	.dw 0xac40, 0xc98c,	0xac7f, 0xc98c,		0x21, 0
+	.dw 0xacc0, 0xc98c,	0xacff, 0xc98c,		0x21, 0
+	.dw 0xad40, 0xc98c,	0xad7f, 0xc98c,		0x21, 0
+	.dw 0xadc0, 0xc98c,	0xadff, 0xc98c,		0x21, 0
+	.dw 0xae40, 0xc98c,	0xae7f, 0xc98c,		0x21, 0
+	.dw 0xaec0, 0xc98c,	0xaeff, 0xc98c,		0x21, 0
+	.dw 0xaf40, 0xc98c,	0xaf7f, 0xc98c,		0x21, 0
+	.dw 0xafc0, 0xc98c,	0xafff, 0xc98c,		0x21, 0
+	.dw 0xb040, 0xc98c,	0xb07f, 0xc98c,		0x21, 0
+	.dw 0xb0c0, 0xc98c,	0xb0ff, 0xc98c,		0x21, 0
+	.dw 0xb140, 0xc98c,	0xb17f, 0xc98c,		0x21, 0
+	.dw 0xb1c0, 0xc98c,	0xb1ff, 0xc98c,		0x21, 0
+	.dw 0xb240, 0xc98c,	0xb27f, 0xc98c,		0x21, 0
+	.dw 0xb2c0, 0xc98c,	0xb2ff, 0xc98c,		0x21, 0
+	.dw 0xb340, 0xc98c,	0xb37f, 0xc98c,		0x21, 0
+	.dw 0xb3c0, 0xc98c,	0xb3ff, 0xc98c,		0x21, 0
+	.dw 0xb440, 0xc98c,	0xb47f, 0xc98c,		0x21, 0
+	.dw 0xb4c0, 0xc98c,	0xb4ff, 0xc98c,		0x21, 0
+	.dw 0xb540, 0xc98c,	0xb57f, 0xc98c,		0x21, 0
+	.dw 0xb5c0, 0xc98c,	0xb5ff, 0xc98c,		0x21, 0
+	.dw 0xb640, 0xc98c,	0xb67f, 0xc98c,		0x21, 0
+	.dw 0xb6c0, 0xc98c,	0xb6ff, 0xc98c,		0x21, 0
+	.dw 0xb740, 0xc98c,	0xb77f, 0xc98c,		0x21, 0
+	.dw 0xb7c0, 0xc98c,	0xb7ff, 0xc98c,		0x21, 0
+	.dw 0xb840, 0xc98c,	0xb87f, 0xc98c,		0x21, 0
+	.dw 0xb8c0, 0xc98c,	0xb8ff, 0xc98c,		0x21, 0
+	.dw 0xb940, 0xc98c,	0xb97f, 0xc98c,		0x21, 0
+	.dw 0xb9c0, 0xc98c,	0xbfff, 0xc98c,		0x21, 0
+	.dw 0xc040, 0xc98c,	0xc07f, 0xc98c,		0x21, 0
+	.dw 0xc0c0, 0xc98c,	0xc0ff, 0xc98c,		0x21, 0
+	.dw 0xc140, 0xc98c,	0xc17f, 0xc98c,		0x21, 0
+	.dw 0xc1c0, 0xc98c,	0xc1ff, 0xc98c,		0x21, 0
+	.dw 0xc240, 0xc98c,	0xc27f, 0xc98c,		0x21, 0
+	.dw 0xc2c0, 0xc98c,	0xc2ff, 0xc98c,		0x21, 0
+	.dw 0xc340, 0xc98c,	0xc37f, 0xc98c,		0x21, 0
+	.dw 0xc3c0, 0xc98c,	0xc3ff, 0xc98c,		0x21, 0
+	.dw 0xc440, 0xc98c,	0xc47f, 0xc98c,		0x21, 0
+	.dw 0xc4c0, 0xc98c,	0xc4ff, 0xc98c,		0x21, 0
+	.dw 0xc540, 0xc98c,	0xc57f, 0xc98c,		0x21, 0
+	.dw 0xc5c0, 0xc98c,	0xc5ff, 0xc98c,		0x21, 0
+	.dw 0xc640, 0xc98c,	0xc67f, 0xc98c,		0x21, 0
+	.dw 0xc6c0, 0xc98c,	0xc6ff, 0xc98c,		0x21, 0
+	.dw 0xc740, 0xc98c,	0xc77f, 0xc98c,		0x21, 0
+	.dw 0xc7c0, 0xc98c,	0xc7ff, 0xc98c,		0x21, 0
+	.dw 0xc840, 0xc98c,	0xc87f, 0xc98c,		0x21, 0
+	.dw 0xc8c0, 0xc98c,	0xc8ff, 0xc98c,		0x21, 0
+	.dw 0xc940, 0xc98c,	0xc97f, 0xc98c,		0x21, 0
+	.dw 0xc9c0, 0xc98c,	0xc9ff, 0xc98c,		0x21, 0
+	.dw 0xca40, 0xc98c,	0xca7f, 0xc98c,		0x21, 0
+	.dw 0xcac0, 0xc98c,	0xcaff, 0xc98c,		0x21, 0
+	.dw 0xcb40, 0xc98c,	0xcb7f, 0xc98c,		0x21, 0
+	.dw 0xcbc0, 0xc98c,	0xcbff, 0xc98c,		0x21, 0
+	.dw 0xcc40, 0xc98c,	0xcc7f, 0xc98c,		0x21, 0
+	.dw 0xccc0, 0xc98c,	0xccff, 0xc98c,		0x21, 0
+	.dw 0xcd40, 0xc98c,	0xcd7f, 0xc98c,		0x21, 0
+	.dw 0xcdc0, 0xc98c,	0xcdff, 0xc98c,		0x21, 0
+	.dw 0xce40, 0xc98c,	0xce7f, 0xc98c,		0x21, 0
+	.dw 0xcec0, 0xc98c,	0xceff, 0xc98c,		0x21, 0
+	.dw 0xcf40, 0xc98c,	0xcf7f, 0xc98c,		0x21, 0
+	.dw 0xcfc0, 0xc98c,	0xcfff, 0xc98c,		0x21, 0
+	.dw 0xd040, 0xc98c,	0xd07f, 0xc98c,		0x21, 0
+	.dw 0xd0c0, 0xc98c,	0xd0ff, 0xc98c,		0x21, 0
+	.dw 0xd140, 0xc98c,	0xd17f, 0xc98c,		0x21, 0
+	.dw 0xd1c0, 0xc98c,	0xd1ff, 0xc98c,		0x21, 0
+	.dw 0xd240, 0xc98c,	0xd27f, 0xc98c,		0x21, 0
+	.dw 0xd2c0, 0xc98c,	0xd2ff, 0xc98c,		0x21, 0
+	.dw 0xd340, 0xc98c,	0xd37f, 0xc98c,		0x21, 0
+	.dw 0xd3c0, 0xc98c,	0xd3ff, 0xc98c,		0x21, 0
+	.dw 0xd440, 0xc98c,	0xd47f, 0xc98c,		0x21, 0
+	.dw 0xd4c0, 0xc98c,	0xd4ff, 0xc98c,		0x21, 0
+	.dw 0xd540, 0xc98c,	0xd57f, 0xc98c,		0x21, 0
+	.dw 0xd5c0, 0xc98c,	0xd5ff, 0xc98c,		0x21, 0
+	.dw 0xd640, 0xc98c,	0xd67f, 0xc98c,		0x21, 0
+	.dw 0xd6c0, 0xc98c,	0xd6ff, 0xc98c,		0x21, 0
+	.dw 0xd740, 0xc98c,	0xd77f, 0xc98c,		0x21, 0
+	.dw 0xd7c0, 0xc98c,	0xd7ff, 0xc98c,		0x21, 0
+	.dw 0xd840, 0xc98c,	0xd87f, 0xc98c,		0x21, 0
+	.dw 0xd8c0, 0xc98c,	0xd8ff, 0xc98c,		0x21, 0
+	.dw 0xd940, 0xc98c,	0xd97f, 0xc98c,		0x21, 0
+	.dw 0xd9c0, 0xc98c,	0xdfff, 0xc98c,		0x21, 0
+	.dw 0xe040, 0xc98c,	0xe07f, 0xc98c,		0x21, 0
+	.dw 0xe0c0, 0xc98c,	0xe0ff, 0xc98c,		0x21, 0
+	.dw 0xe140, 0xc98c,	0xe17f, 0xc98c,		0x21, 0
+	.dw 0xe1c0, 0xc98c,	0xe1ff, 0xc98c,		0x21, 0
+	.dw 0xe240, 0xc98c,	0xe27f, 0xc98c,		0x21, 0
+	.dw 0xe2c0, 0xc98c,	0xe2ff, 0xc98c,		0x21, 0
+	.dw 0xe340, 0xc98c,	0xe37f, 0xc98c,		0x21, 0
+	.dw 0xe3c0, 0xc98c,	0xe3ff, 0xc98c,		0x21, 0
+	.dw 0xe440, 0xc98c,	0xe47f, 0xc98c,		0x21, 0
+	.dw 0xe4c0, 0xc98c,	0xe4ff, 0xc98c,		0x21, 0
+	.dw 0xe540, 0xc98c,	0xe57f, 0xc98c,		0x21, 0
+	.dw 0xe5c0, 0xc98c,	0xe5ff, 0xc98c,		0x21, 0
+	.dw 0xe640, 0xc98c,	0xe67f, 0xc98c,		0x21, 0
+	.dw 0xe6c0, 0xc98c,	0xe6ff, 0xc98c,		0x21, 0
+	.dw 0xe740, 0xc98c,	0xe77f, 0xc98c,		0x21, 0
+	.dw 0xe7c0, 0xc98c,	0xe7ff, 0xc98c,		0x21, 0
+	.dw 0xe840, 0xc98c,	0xe87f, 0xc98c,		0x21, 0
+	.dw 0xe8c0, 0xc98c,	0xe8ff, 0xc98c,		0x21, 0
+	.dw 0xe940, 0xc98c,	0xe97f, 0xc98c,		0x21, 0
+	.dw 0xe9c0, 0xc98c,	0xe9ff, 0xc98c,		0x21, 0
+	.dw 0xea40, 0xc98c,	0xea7f, 0xc98c,		0x21, 0
+	.dw 0xeac0, 0xc98c,	0xeaff, 0xc98c,		0x21, 0
+	.dw 0xeb40, 0xc98c,	0xeb7f, 0xc98c,		0x21, 0
+	.dw 0xebc0, 0xc98c,	0xebff, 0xc98c,		0x21, 0
+	.dw 0xec40, 0xc98c,	0xec7f, 0xc98c,		0x21, 0
+	.dw 0xecc0, 0xc98c,	0xecff, 0xc98c,		0x21, 0
+	.dw 0xed40, 0xc98c,	0xed7f, 0xc98c,		0x21, 0
+	.dw 0xedc0, 0xc98c,	0xedff, 0xc98c,		0x21, 0
+	.dw 0xee40, 0xc98c,	0xee7f, 0xc98c,		0x21, 0
+	.dw 0xeec0, 0xc98c,	0xeeff, 0xc98c,		0x21, 0
+	.dw 0xef40, 0xc98c,	0xef7f, 0xc98c,		0x21, 0
+	.dw 0xefc0, 0xc98c,	0xefff, 0xc98c,		0x21, 0
+	.dw 0xf040, 0xc98c,	0xf07f, 0xc98c,		0x21, 0
+	.dw 0xf0c0, 0xc98c,	0xf0ff, 0xc98c,		0x21, 0
+	.dw 0xf140, 0xc98c,	0xf17f, 0xc98c,		0x21, 0
+	.dw 0xf1c0, 0xc98c,	0xf1ff, 0xc98c,		0x21, 0
+	.dw 0xf240, 0xc98c,	0xf27f, 0xc98c,		0x21, 0
+	.dw 0xf2c0, 0xc98c,	0xf2ff, 0xc98c,		0x21, 0
+	.dw 0xf340, 0xc98c,	0xf37f, 0xc98c,		0x21, 0
+	.dw 0xf3c0, 0xc98c,	0xf3ff, 0xc98c,		0x21, 0
+	.dw 0xf440, 0xc98c,	0xf47f, 0xc98c,		0x21, 0
+	.dw 0xf4c0, 0xc98c,	0xf4ff, 0xc98c,		0x21, 0
+	.dw 0xf540, 0xc98c,	0xf57f, 0xc98c,		0x21, 0
+	.dw 0xf5c0, 0xc98c,	0xf5ff, 0xc98c,		0x21, 0
+	.dw 0xf640, 0xc98c,	0xf67f, 0xc98c,		0x21, 0
+	.dw 0xf6c0, 0xc98c,	0xf6ff, 0xc98c,		0x21, 0
+	.dw 0xf740, 0xc98c,	0xf77f, 0xc98c,		0x21, 0
+	.dw 0xf7c0, 0xc98c,	0xf7ff, 0xc98c,		0x21, 0
+	.dw 0xf840, 0xc98c,	0xf87f, 0xc98c,		0x21, 0
+	.dw 0xf8c0, 0xc98c,	0xf8ff, 0xc98c,		0x21, 0
+	.dw 0xf940, 0xc98c,	0xf97f, 0xc98c,		0x21, 0
+	.dw 0xf9c0, 0xc98c,	0xffff, 0xc98c,		0x21, 0
+	.dw 0x0040, 0xc98d,	0x007f, 0xc98d,		0x21, 0
+	.dw 0x00c0, 0xc98d,	0x00ff, 0xc98d,		0x21, 0
+	.dw 0x0140, 0xc98d,	0x017f, 0xc98d,		0x21, 0
+	.dw 0x01c0, 0xc98d,	0x01ff, 0xc98d,		0x21, 0
+	.dw 0x0240, 0xc98d,	0x027f, 0xc98d,		0x21, 0
+	.dw 0x02c0, 0xc98d,	0x02ff, 0xc98d,		0x21, 0
+	.dw 0x0340, 0xc98d,	0x037f, 0xc98d,		0x21, 0
+	.dw 0x03c0, 0xc98d,	0x03ff, 0xc98d,		0x21, 0
+	.dw 0x0440, 0xc98d,	0x047f, 0xc98d,		0x21, 0
+	.dw 0x04c0, 0xc98d,	0x04ff, 0xc98d,		0x21, 0
+	.dw 0x0540, 0xc98d,	0x057f, 0xc98d,		0x21, 0
+	.dw 0x05c0, 0xc98d,	0x05ff, 0xc98d,		0x21, 0
+	.dw 0x0640, 0xc98d,	0x067f, 0xc98d,		0x21, 0
+	.dw 0x06c0, 0xc98d,	0x06ff, 0xc98d,		0x21, 0
+	.dw 0x0740, 0xc98d,	0x077f, 0xc98d,		0x21, 0
+	.dw 0x07c0, 0xc98d,	0x07ff, 0xc98d,		0x21, 0
+	.dw 0x0840, 0xc98d,	0x087f, 0xc98d,		0x21, 0
+	.dw 0x08c0, 0xc98d,	0x08ff, 0xc98d,		0x21, 0
+	.dw 0x0940, 0xc98d,	0x097f, 0xc98d,		0x21, 0
+	.dw 0x09c0, 0xc98d,	0x09ff, 0xc98d,		0x21, 0
+	.dw 0x0a40, 0xc98d,	0x0a7f, 0xc98d,		0x21, 0
+	.dw 0x0ac0, 0xc98d,	0x0aff, 0xc98d,		0x21, 0
+	.dw 0x0b40, 0xc98d,	0x0b7f, 0xc98d,		0x21, 0
+	.dw 0x0bc0, 0xc98d,	0x0bff, 0xc98d,		0x21, 0
+	.dw 0x0c40, 0xc98d,	0x0c7f, 0xc98d,		0x21, 0
+	.dw 0x0cc0, 0xc98d,	0x0cff, 0xc98d,		0x21, 0
+	.dw 0x0d40, 0xc98d,	0x0d7f, 0xc98d,		0x21, 0
+	.dw 0x0dc0, 0xc98d,	0x0dff, 0xc98d,		0x21, 0
+	.dw 0x0e40, 0xc98d,	0x0e7f, 0xc98d,		0x21, 0
+	.dw 0x0ec0, 0xc98d,	0x0eff, 0xc98d,		0x21, 0
+	.dw 0x0f40, 0xc98d,	0x0f7f, 0xc98d,		0x21, 0
+	.dw 0x0fc0, 0xc98d,	0x0fff, 0xc98d,		0x21, 0
+	.dw 0x1040, 0xc98d,	0x107f, 0xc98d,		0x21, 0
+	.dw 0x10c0, 0xc98d,	0x10ff, 0xc98d,		0x21, 0
+	.dw 0x1140, 0xc98d,	0x117f, 0xc98d,		0x21, 0
+	.dw 0x11c0, 0xc98d,	0x11ff, 0xc98d,		0x21, 0
+	.dw 0x1240, 0xc98d,	0x127f, 0xc98d,		0x21, 0
+	.dw 0x12c0, 0xc98d,	0x12ff, 0xc98d,		0x21, 0
+	.dw 0x1340, 0xc98d,	0x137f, 0xc98d,		0x21, 0
+	.dw 0x13c0, 0xc98d,	0x13ff, 0xc98d,		0x21, 0
+	.dw 0x1440, 0xc98d,	0x147f, 0xc98d,		0x21, 0
+	.dw 0x14c0, 0xc98d,	0x14ff, 0xc98d,		0x21, 0
+	.dw 0x1540, 0xc98d,	0x157f, 0xc98d,		0x21, 0
+	.dw 0x15c0, 0xc98d,	0x15ff, 0xc98d,		0x21, 0
+	.dw 0x1640, 0xc98d,	0x167f, 0xc98d,		0x21, 0
+	.dw 0x16c0, 0xc98d,	0x16ff, 0xc98d,		0x21, 0
+	.dw 0x1740, 0xc98d,	0x177f, 0xc98d,		0x21, 0
+	.dw 0x17c0, 0xc98d,	0x17ff, 0xc98d,		0x21, 0
+	.dw 0x1840, 0xc98d,	0x187f, 0xc98d,		0x21, 0
+	.dw 0x18c0, 0xc98d,	0x18ff, 0xc98d,		0x21, 0
+	.dw 0x1940, 0xc98d,	0x197f, 0xc98d,		0x21, 0
+	.dw 0x19c0, 0xc98d,	0x1fff, 0xc98d,		0x21, 0
+	.dw 0x2040, 0xc98d,	0x207f, 0xc98d,		0x21, 0
+	.dw 0x20c0, 0xc98d,	0x20ff, 0xc98d,		0x21, 0
+	.dw 0x2140, 0xc98d,	0x217f, 0xc98d,		0x21, 0
+	.dw 0x21c0, 0xc98d,	0x21ff, 0xc98d,		0x21, 0
+	.dw 0x2240, 0xc98d,	0x227f, 0xc98d,		0x21, 0
+	.dw 0x22c0, 0xc98d,	0x22ff, 0xc98d,		0x21, 0
+	.dw 0x2340, 0xc98d,	0x237f, 0xc98d,		0x21, 0
+	.dw 0x23c0, 0xc98d,	0x23ff, 0xc98d,		0x21, 0
+	.dw 0x2440, 0xc98d,	0x247f, 0xc98d,		0x21, 0
+	.dw 0x24c0, 0xc98d,	0x24ff, 0xc98d,		0x21, 0
+	.dw 0x2540, 0xc98d,	0x257f, 0xc98d,		0x21, 0
+	.dw 0x25c0, 0xc98d,	0x25ff, 0xc98d,		0x21, 0
+	.dw 0x2640, 0xc98d,	0x267f, 0xc98d,		0x21, 0
+	.dw 0x26c0, 0xc98d,	0x26ff, 0xc98d,		0x21, 0
+	.dw 0x2740, 0xc98d,	0x277f, 0xc98d,		0x21, 0
+	.dw 0x27c0, 0xc98d,	0x27ff, 0xc98d,		0x21, 0
+	.dw 0x2840, 0xc98d,	0x287f, 0xc98d,		0x21, 0
+	.dw 0x28c0, 0xc98d,	0x28ff, 0xc98d,		0x21, 0
+	.dw 0x2940, 0xc98d,	0x297f, 0xc98d,		0x21, 0
+	.dw 0x29c0, 0xc98d,	0x29ff, 0xc98d,		0x21, 0
+	.dw 0x2a40, 0xc98d,	0x2a7f, 0xc98d,		0x21, 0
+	.dw 0x2ac0, 0xc98d,	0x2aff, 0xc98d,		0x21, 0
+	.dw 0x2b40, 0xc98d,	0x2b7f, 0xc98d,		0x21, 0
+	.dw 0x2bc0, 0xc98d,	0x2bff, 0xc98d,		0x21, 0
+	.dw 0x2c40, 0xc98d,	0x2c7f, 0xc98d,		0x21, 0
+	.dw 0x2cc0, 0xc98d,	0x2cff, 0xc98d,		0x21, 0
+	.dw 0x2d40, 0xc98d,	0x2d7f, 0xc98d,		0x21, 0
+	.dw 0x2dc0, 0xc98d,	0x2dff, 0xc98d,		0x21, 0
+	.dw 0x2e40, 0xc98d,	0x2e7f, 0xc98d,		0x21, 0
+	.dw 0x2ec0, 0xc98d,	0x2eff, 0xc98d,		0x21, 0
+	.dw 0x2f40, 0xc98d,	0x2f7f, 0xc98d,		0x21, 0
+	.dw 0x2fc0, 0xc98d,	0x2fff, 0xc98d,		0x21, 0
+	.dw 0x3040, 0xc98d,	0x307f, 0xc98d,		0x21, 0
+	.dw 0x30c0, 0xc98d,	0x30ff, 0xc98d,		0x21, 0
+	.dw 0x3140, 0xc98d,	0x317f, 0xc98d,		0x21, 0
+	.dw 0x31c0, 0xc98d,	0x31ff, 0xc98d,		0x21, 0
+	.dw 0x3240, 0xc98d,	0x327f, 0xc98d,		0x21, 0
+	.dw 0x32c0, 0xc98d,	0x32ff, 0xc98d,		0x21, 0
+	.dw 0x3340, 0xc98d,	0x337f, 0xc98d,		0x21, 0
+	.dw 0x33c0, 0xc98d,	0x33ff, 0xc98d,		0x21, 0
+	.dw 0x3440, 0xc98d,	0x347f, 0xc98d,		0x21, 0
+	.dw 0x34c0, 0xc98d,	0x34ff, 0xc98d,		0x21, 0
+	.dw 0x3540, 0xc98d,	0x357f, 0xc98d,		0x21, 0
+	.dw 0x35c0, 0xc98d,	0x35ff, 0xc98d,		0x21, 0
+	.dw 0x3640, 0xc98d,	0x367f, 0xc98d,		0x21, 0
+	.dw 0x36c0, 0xc98d,	0x36ff, 0xc98d,		0x21, 0
+	.dw 0x3740, 0xc98d,	0x377f, 0xc98d,		0x21, 0
+	.dw 0x37c0, 0xc98d,	0x37ff, 0xc98d,		0x21, 0
+	.dw 0x3840, 0xc98d,	0x387f, 0xc98d,		0x21, 0
+	.dw 0x38c0, 0xc98d,	0x38ff, 0xc98d,		0x21, 0
+	.dw 0x3940, 0xc98d,	0x397f, 0xc98d,		0x21, 0
+	.dw 0x39c0, 0xc98d,	0x3fff, 0xc98d,		0x21, 0
+	.dw 0x4040, 0xc98d,	0x407f, 0xc98d,		0x21, 0
+	.dw 0x40c0, 0xc98d,	0x40ff, 0xc98d,		0x21, 0
+	.dw 0x4140, 0xc98d,	0x417f, 0xc98d,		0x21, 0
+	.dw 0x41c0, 0xc98d,	0x41ff, 0xc98d,		0x21, 0
+	.dw 0x4240, 0xc98d,	0x427f, 0xc98d,		0x21, 0
+	.dw 0x42c0, 0xc98d,	0x42ff, 0xc98d,		0x21, 0
+	.dw 0x4340, 0xc98d,	0x437f, 0xc98d,		0x21, 0
+	.dw 0x43c0, 0xc98d,	0x43ff, 0xc98d,		0x21, 0
+	.dw 0x4440, 0xc98d,	0x447f, 0xc98d,		0x21, 0
+	.dw 0x44c0, 0xc98d,	0x44ff, 0xc98d,		0x21, 0
+	.dw 0x4540, 0xc98d,	0x457f, 0xc98d,		0x21, 0
+	.dw 0x45c0, 0xc98d,	0x45ff, 0xc98d,		0x21, 0
+	.dw 0x4640, 0xc98d,	0x467f, 0xc98d,		0x21, 0
+	.dw 0x46c0, 0xc98d,	0x46ff, 0xc98d,		0x21, 0
+	.dw 0x4740, 0xc98d,	0x477f, 0xc98d,		0x21, 0
+	.dw 0x47c0, 0xc98d,	0x47ff, 0xc98d,		0x21, 0
+	.dw 0x4840, 0xc98d,	0x487f, 0xc98d,		0x21, 0
+	.dw 0x48c0, 0xc98d,	0x48ff, 0xc98d,		0x21, 0
+	.dw 0x4940, 0xc98d,	0x497f, 0xc98d,		0x21, 0
+	.dw 0x49c0, 0xc98d,	0x49ff, 0xc98d,		0x21, 0
+	.dw 0x4a40, 0xc98d,	0x4a7f, 0xc98d,		0x21, 0
+	.dw 0x4ac0, 0xc98d,	0x4aff, 0xc98d,		0x21, 0
+	.dw 0x4b40, 0xc98d,	0x4b7f, 0xc98d,		0x21, 0
+	.dw 0x4bc0, 0xc98d,	0x4bff, 0xc98d,		0x21, 0
+	.dw 0x4c40, 0xc98d,	0x4c7f, 0xc98d,		0x21, 0
+	.dw 0x4cc0, 0xc98d,	0x4cff, 0xc98d,		0x21, 0
+	.dw 0x4d40, 0xc98d,	0x4d7f, 0xc98d,		0x21, 0
+	.dw 0x4dc0, 0xc98d,	0x4dff, 0xc98d,		0x21, 0
+	.dw 0x4e40, 0xc98d,	0x4e7f, 0xc98d,		0x21, 0
+	.dw 0x4ec0, 0xc98d,	0x4eff, 0xc98d,		0x21, 0
+	.dw 0x4f40, 0xc98d,	0x4f7f, 0xc98d,		0x21, 0
+	.dw 0x4fc0, 0xc98d,	0x4fff, 0xc98d,		0x21, 0
+	.dw 0x5040, 0xc98d,	0x507f, 0xc98d,		0x21, 0
+	.dw 0x50c0, 0xc98d,	0x50ff, 0xc98d,		0x21, 0
+	.dw 0x5140, 0xc98d,	0x517f, 0xc98d,		0x21, 0
+	.dw 0x51c0, 0xc98d,	0x51ff, 0xc98d,		0x21, 0
+	.dw 0x5240, 0xc98d,	0x527f, 0xc98d,		0x21, 0
+	.dw 0x52c0, 0xc98d,	0x52ff, 0xc98d,		0x21, 0
+	.dw 0x5340, 0xc98d,	0x537f, 0xc98d,		0x21, 0
+	.dw 0x53c0, 0xc98d,	0x53ff, 0xc98d,		0x21, 0
+	.dw 0x5440, 0xc98d,	0x547f, 0xc98d,		0x21, 0
+	.dw 0x54c0, 0xc98d,	0x54ff, 0xc98d,		0x21, 0
+	.dw 0x5540, 0xc98d,	0x557f, 0xc98d,		0x21, 0
+	.dw 0x55c0, 0xc98d,	0x55ff, 0xc98d,		0x21, 0
+	.dw 0x5640, 0xc98d,	0x567f, 0xc98d,		0x21, 0
+	.dw 0x56c0, 0xc98d,	0x56ff, 0xc98d,		0x21, 0
+	.dw 0x5740, 0xc98d,	0x577f, 0xc98d,		0x21, 0
+	.dw 0x57c0, 0xc98d,	0x57ff, 0xc98d,		0x21, 0
+	.dw 0x5840, 0xc98d,	0x587f, 0xc98d,		0x21, 0
+	.dw 0x58c0, 0xc98d,	0x58ff, 0xc98d,		0x21, 0
+	.dw 0x5940, 0xc98d,	0x597f, 0xc98d,		0x21, 0
+	.dw 0x59c0, 0xc98d,	0x5fff, 0xc98d,		0x21, 0
+	.dw 0x6040, 0xc98d,	0x607f, 0xc98d,		0x21, 0
+	.dw 0x60c0, 0xc98d,	0x60ff, 0xc98d,		0x21, 0
+	.dw 0x6140, 0xc98d,	0x617f, 0xc98d,		0x21, 0
+	.dw 0x61c0, 0xc98d,	0x61ff, 0xc98d,		0x21, 0
+	.dw 0x6240, 0xc98d,	0x627f, 0xc98d,		0x21, 0
+	.dw 0x62c0, 0xc98d,	0x62ff, 0xc98d,		0x21, 0
+	.dw 0x6340, 0xc98d,	0x637f, 0xc98d,		0x21, 0
+	.dw 0x63c0, 0xc98d,	0x63ff, 0xc98d,		0x21, 0
+	.dw 0x6440, 0xc98d,	0x647f, 0xc98d,		0x21, 0
+	.dw 0x64c0, 0xc98d,	0x64ff, 0xc98d,		0x21, 0
+	.dw 0x6540, 0xc98d,	0x657f, 0xc98d,		0x21, 0
+	.dw 0x65c0, 0xc98d,	0x65ff, 0xc98d,		0x21, 0
+	.dw 0x6640, 0xc98d,	0x667f, 0xc98d,		0x21, 0
+	.dw 0x66c0, 0xc98d,	0x66ff, 0xc98d,		0x21, 0
+	.dw 0x6740, 0xc98d,	0x677f, 0xc98d,		0x21, 0
+	.dw 0x67c0, 0xc98d,	0x67ff, 0xc98d,		0x21, 0
+	.dw 0x6840, 0xc98d,	0x687f, 0xc98d,		0x21, 0
+	.dw 0x68c0, 0xc98d,	0x68ff, 0xc98d,		0x21, 0
+	.dw 0x6940, 0xc98d,	0x697f, 0xc98d,		0x21, 0
+	.dw 0x69c0, 0xc98d,	0x69ff, 0xc98d,		0x21, 0
+	.dw 0x6a40, 0xc98d,	0x6a7f, 0xc98d,		0x21, 0
+	.dw 0x6ac0, 0xc98d,	0x6aff, 0xc98d,		0x21, 0
+	.dw 0x6b40, 0xc98d,	0x6b7f, 0xc98d,		0x21, 0
+	.dw 0x6bc0, 0xc98d,	0x6bff, 0xc98d,		0x21, 0
+	.dw 0x6c40, 0xc98d,	0x6c7f, 0xc98d,		0x21, 0
+	.dw 0x6cc0, 0xc98d,	0x6cff, 0xc98d,		0x21, 0
+	.dw 0x6d40, 0xc98d,	0x6d7f, 0xc98d,		0x21, 0
+	.dw 0x6dc0, 0xc98d,	0x6dff, 0xc98d,		0x21, 0
+	.dw 0x6e40, 0xc98d,	0x6e7f, 0xc98d,		0x21, 0
+	.dw 0x6ec0, 0xc98d,	0x6eff, 0xc98d,		0x21, 0
+	.dw 0x6f40, 0xc98d,	0x6f7f, 0xc98d,		0x21, 0
+	.dw 0x6fc0, 0xc98d,	0x6fff, 0xc98d,		0x21, 0
+	.dw 0x7040, 0xc98d,	0x707f, 0xc98d,		0x21, 0
+	.dw 0x70c0, 0xc98d,	0x70ff, 0xc98d,		0x21, 0
+	.dw 0x7140, 0xc98d,	0x717f, 0xc98d,		0x21, 0
+	.dw 0x71c0, 0xc98d,	0x71ff, 0xc98d,		0x21, 0
+	.dw 0x7240, 0xc98d,	0x727f, 0xc98d,		0x21, 0
+	.dw 0x72c0, 0xc98d,	0x72ff, 0xc98d,		0x21, 0
+	.dw 0x7340, 0xc98d,	0x737f, 0xc98d,		0x21, 0
+	.dw 0x73c0, 0xc98d,	0x73ff, 0xc98d,		0x21, 0
+	.dw 0x7440, 0xc98d,	0x747f, 0xc98d,		0x21, 0
+	.dw 0x74c0, 0xc98d,	0x74ff, 0xc98d,		0x21, 0
+	.dw 0x7540, 0xc98d,	0x757f, 0xc98d,		0x21, 0
+	.dw 0x75c0, 0xc98d,	0x75ff, 0xc98d,		0x21, 0
+	.dw 0x7640, 0xc98d,	0x767f, 0xc98d,		0x21, 0
+	.dw 0x76c0, 0xc98d,	0x76ff, 0xc98d,		0x21, 0
+	.dw 0x7740, 0xc98d,	0x777f, 0xc98d,		0x21, 0
+	.dw 0x77c0, 0xc98d,	0x77ff, 0xc98d,		0x21, 0
+	.dw 0x7840, 0xc98d,	0x787f, 0xc98d,		0x21, 0
+	.dw 0x78c0, 0xc98d,	0x78ff, 0xc98d,		0x21, 0
+	.dw 0x7940, 0xc98d,	0x797f, 0xc98d,		0x21, 0
+	.dw 0x79c0, 0xc98d,	0x7fff, 0xc98d,		0x21, 0
+	.dw 0x8040, 0xc98d,	0x807f, 0xc98d,		0x21, 0
+	.dw 0x80c0, 0xc98d,	0x80ff, 0xc98d,		0x21, 0
+	.dw 0x8140, 0xc98d,	0x817f, 0xc98d,		0x21, 0
+	.dw 0x81c0, 0xc98d,	0x81ff, 0xc98d,		0x21, 0
+	.dw 0x8240, 0xc98d,	0x827f, 0xc98d,		0x21, 0
+	.dw 0x82c0, 0xc98d,	0x82ff, 0xc98d,		0x21, 0
+	.dw 0x8340, 0xc98d,	0x837f, 0xc98d,		0x21, 0
+	.dw 0x83c0, 0xc98d,	0x83ff, 0xc98d,		0x21, 0
+	.dw 0x8440, 0xc98d,	0x847f, 0xc98d,		0x21, 0
+	.dw 0x84c0, 0xc98d,	0x84ff, 0xc98d,		0x21, 0
+	.dw 0x8540, 0xc98d,	0x857f, 0xc98d,		0x21, 0
+	.dw 0x85c0, 0xc98d,	0x85ff, 0xc98d,		0x21, 0
+	.dw 0x8640, 0xc98d,	0x867f, 0xc98d,		0x21, 0
+	.dw 0x86c0, 0xc98d,	0x86ff, 0xc98d,		0x21, 0
+	.dw 0x8740, 0xc98d,	0x877f, 0xc98d,		0x21, 0
+	.dw 0x87c0, 0xc98d,	0x87ff, 0xc98d,		0x21, 0
+	.dw 0x8840, 0xc98d,	0x887f, 0xc98d,		0x21, 0
+	.dw 0x88c0, 0xc98d,	0x88ff, 0xc98d,		0x21, 0
+	.dw 0x8940, 0xc98d,	0x897f, 0xc98d,		0x21, 0
+	.dw 0x89c0, 0xc98d,	0x89ff, 0xc98d,		0x21, 0
+	.dw 0x8a40, 0xc98d,	0x8a7f, 0xc98d,		0x21, 0
+	.dw 0x8ac0, 0xc98d,	0x8aff, 0xc98d,		0x21, 0
+	.dw 0x8b40, 0xc98d,	0x8b7f, 0xc98d,		0x21, 0
+	.dw 0x8bc0, 0xc98d,	0x8bff, 0xc98d,		0x21, 0
+	.dw 0x8c40, 0xc98d,	0x8c7f, 0xc98d,		0x21, 0
+	.dw 0x8cc0, 0xc98d,	0x8cff, 0xc98d,		0x21, 0
+	.dw 0x8d40, 0xc98d,	0x8d7f, 0xc98d,		0x21, 0
+	.dw 0x8dc0, 0xc98d,	0x8dff, 0xc98d,		0x21, 0
+	.dw 0x8e40, 0xc98d,	0x8e7f, 0xc98d,		0x21, 0
+	.dw 0x8ec0, 0xc98d,	0x8eff, 0xc98d,		0x21, 0
+	.dw 0x8f40, 0xc98d,	0x8f7f, 0xc98d,		0x21, 0
+	.dw 0x8fc0, 0xc98d,	0x8fff, 0xc98d,		0x21, 0
+	.dw 0x9040, 0xc98d,	0x907f, 0xc98d,		0x21, 0
+	.dw 0x90c0, 0xc98d,	0x90ff, 0xc98d,		0x21, 0
+	.dw 0x9140, 0xc98d,	0x917f, 0xc98d,		0x21, 0
+	.dw 0x91c0, 0xc98d,	0x91ff, 0xc98d,		0x21, 0
+	.dw 0x9240, 0xc98d,	0x927f, 0xc98d,		0x21, 0
+	.dw 0x92c0, 0xc98d,	0x92ff, 0xc98d,		0x21, 0
+	.dw 0x9340, 0xc98d,	0x937f, 0xc98d,		0x21, 0
+	.dw 0x93c0, 0xc98d,	0x93ff, 0xc98d,		0x21, 0
+	.dw 0x9440, 0xc98d,	0x947f, 0xc98d,		0x21, 0
+	.dw 0x94c0, 0xc98d,	0x94ff, 0xc98d,		0x21, 0
+	.dw 0x9540, 0xc98d,	0x957f, 0xc98d,		0x21, 0
+	.dw 0x95c0, 0xc98d,	0x95ff, 0xc98d,		0x21, 0
+	.dw 0x9640, 0xc98d,	0x967f, 0xc98d,		0x21, 0
+	.dw 0x96c0, 0xc98d,	0x96ff, 0xc98d,		0x21, 0
+	.dw 0x9740, 0xc98d,	0x977f, 0xc98d,		0x21, 0
+	.dw 0x97c0, 0xc98d,	0x97ff, 0xc98d,		0x21, 0
+	.dw 0x9840, 0xc98d,	0x987f, 0xc98d,		0x21, 0
+	.dw 0x98c0, 0xc98d,	0x98ff, 0xc98d,		0x21, 0
+	.dw 0x9940, 0xc98d,	0x997f, 0xc98d,		0x21, 0
+	.dw 0x99c0, 0xc98d,	0x9fff, 0xc98d,		0x21, 0
+	.dw 0xa040, 0xc98d,	0xa07f, 0xc98d,		0x21, 0
+	.dw 0xa0c0, 0xc98d,	0xa0ff, 0xc98d,		0x21, 0
+	.dw 0xa140, 0xc98d,	0xa17f, 0xc98d,		0x21, 0
+	.dw 0xa1c0, 0xc98d,	0xa1ff, 0xc98d,		0x21, 0
+	.dw 0xa240, 0xc98d,	0xa27f, 0xc98d,		0x21, 0
+	.dw 0xa2c0, 0xc98d,	0xa2ff, 0xc98d,		0x21, 0
+	.dw 0xa340, 0xc98d,	0xa37f, 0xc98d,		0x21, 0
+	.dw 0xa3c0, 0xc98d,	0xa3ff, 0xc98d,		0x21, 0
+	.dw 0xa440, 0xc98d,	0xa47f, 0xc98d,		0x21, 0
+	.dw 0xa4c0, 0xc98d,	0xa4ff, 0xc98d,		0x21, 0
+	.dw 0xa540, 0xc98d,	0xa57f, 0xc98d,		0x21, 0
+	.dw 0xa5c0, 0xc98d,	0xa5ff, 0xc98d,		0x21, 0
+	.dw 0xa640, 0xc98d,	0xa67f, 0xc98d,		0x21, 0
+	.dw 0xa6c0, 0xc98d,	0xa6ff, 0xc98d,		0x21, 0
+	.dw 0xa740, 0xc98d,	0xa77f, 0xc98d,		0x21, 0
+	.dw 0xa7c0, 0xc98d,	0xa7ff, 0xc98d,		0x21, 0
+	.dw 0xa840, 0xc98d,	0xa87f, 0xc98d,		0x21, 0
+	.dw 0xa8c0, 0xc98d,	0xa8ff, 0xc98d,		0x21, 0
+	.dw 0xa940, 0xc98d,	0xa97f, 0xc98d,		0x21, 0
+	.dw 0xa9c0, 0xc98d,	0xa9ff, 0xc98d,		0x21, 0
+	.dw 0xaa40, 0xc98d,	0xaa7f, 0xc98d,		0x21, 0
+	.dw 0xaac0, 0xc98d,	0xaaff, 0xc98d,		0x21, 0
+	.dw 0xab40, 0xc98d,	0xab7f, 0xc98d,		0x21, 0
+	.dw 0xabc0, 0xc98d,	0xabff, 0xc98d,		0x21, 0
+	.dw 0xac40, 0xc98d,	0xac7f, 0xc98d,		0x21, 0
+	.dw 0xacc0, 0xc98d,	0xacff, 0xc98d,		0x21, 0
+	.dw 0xad40, 0xc98d,	0xad7f, 0xc98d,		0x21, 0
+	.dw 0xadc0, 0xc98d,	0xadff, 0xc98d,		0x21, 0
+	.dw 0xae40, 0xc98d,	0xae7f, 0xc98d,		0x21, 0
+	.dw 0xaec0, 0xc98d,	0xaeff, 0xc98d,		0x21, 0
+	.dw 0xaf40, 0xc98d,	0xaf7f, 0xc98d,		0x21, 0
+	.dw 0xafc0, 0xc98d,	0xafff, 0xc98d,		0x21, 0
+	.dw 0xb040, 0xc98d,	0xb07f, 0xc98d,		0x21, 0
+	.dw 0xb0c0, 0xc98d,	0xb0ff, 0xc98d,		0x21, 0
+	.dw 0xb140, 0xc98d,	0xb17f, 0xc98d,		0x21, 0
+	.dw 0xb1c0, 0xc98d,	0xb1ff, 0xc98d,		0x21, 0
+	.dw 0xb240, 0xc98d,	0xb27f, 0xc98d,		0x21, 0
+	.dw 0xb2c0, 0xc98d,	0xb2ff, 0xc98d,		0x21, 0
+	.dw 0xb340, 0xc98d,	0xb37f, 0xc98d,		0x21, 0
+	.dw 0xb3c0, 0xc98d,	0xb3ff, 0xc98d,		0x21, 0
+	.dw 0xb440, 0xc98d,	0xb47f, 0xc98d,		0x21, 0
+	.dw 0xb4c0, 0xc98d,	0xb4ff, 0xc98d,		0x21, 0
+	.dw 0xb540, 0xc98d,	0xb57f, 0xc98d,		0x21, 0
+	.dw 0xb5c0, 0xc98d,	0xb5ff, 0xc98d,		0x21, 0
+	.dw 0xb640, 0xc98d,	0xb67f, 0xc98d,		0x21, 0
+	.dw 0xb6c0, 0xc98d,	0xb6ff, 0xc98d,		0x21, 0
+	.dw 0xb740, 0xc98d,	0xb77f, 0xc98d,		0x21, 0
+	.dw 0xb7c0, 0xc98d,	0xb7ff, 0xc98d,		0x21, 0
+	.dw 0xb840, 0xc98d,	0xb87f, 0xc98d,		0x21, 0
+	.dw 0xb8c0, 0xc98d,	0xb8ff, 0xc98d,		0x21, 0
+	.dw 0xb940, 0xc98d,	0xb97f, 0xc98d,		0x21, 0
+	.dw 0xb9c0, 0xc98d,	0xbfff, 0xc98d,		0x21, 0
+	.dw 0xc040, 0xc98d,	0xc07f, 0xc98d,		0x21, 0
+	.dw 0xc0c0, 0xc98d,	0xc0ff, 0xc98d,		0x21, 0
+	.dw 0xc140, 0xc98d,	0xc17f, 0xc98d,		0x21, 0
+	.dw 0xc1c0, 0xc98d,	0xc1ff, 0xc98d,		0x21, 0
+	.dw 0xc240, 0xc98d,	0xc27f, 0xc98d,		0x21, 0
+	.dw 0xc2c0, 0xc98d,	0xc2ff, 0xc98d,		0x21, 0
+	.dw 0xc340, 0xc98d,	0xc37f, 0xc98d,		0x21, 0
+	.dw 0xc3c0, 0xc98d,	0xc3ff, 0xc98d,		0x21, 0
+	.dw 0xc440, 0xc98d,	0xc47f, 0xc98d,		0x21, 0
+	.dw 0xc4c0, 0xc98d,	0xc4ff, 0xc98d,		0x21, 0
+	.dw 0xc540, 0xc98d,	0xc57f, 0xc98d,		0x21, 0
+	.dw 0xc5c0, 0xc98d,	0xc5ff, 0xc98d,		0x21, 0
+	.dw 0xc640, 0xc98d,	0xc67f, 0xc98d,		0x21, 0
+	.dw 0xc6c0, 0xc98d,	0xc6ff, 0xc98d,		0x21, 0
+	.dw 0xc740, 0xc98d,	0xc77f, 0xc98d,		0x21, 0
+	.dw 0xc7c0, 0xc98d,	0xc7ff, 0xc98d,		0x21, 0
+	.dw 0xc840, 0xc98d,	0xc87f, 0xc98d,		0x21, 0
+	.dw 0xc8c0, 0xc98d,	0xc8ff, 0xc98d,		0x21, 0
+	.dw 0xc940, 0xc98d,	0xc97f, 0xc98d,		0x21, 0
+	.dw 0xc9c0, 0xc98d,	0xc9ff, 0xc98d,		0x21, 0
+	.dw 0xca40, 0xc98d,	0xca7f, 0xc98d,		0x21, 0
+	.dw 0xcac0, 0xc98d,	0xcaff, 0xc98d,		0x21, 0
+	.dw 0xcb40, 0xc98d,	0xcb7f, 0xc98d,		0x21, 0
+	.dw 0xcbc0, 0xc98d,	0xcbff, 0xc98d,		0x21, 0
+	.dw 0xcc40, 0xc98d,	0xcc7f, 0xc98d,		0x21, 0
+	.dw 0xccc0, 0xc98d,	0xccff, 0xc98d,		0x21, 0
+	.dw 0xcd40, 0xc98d,	0xcd7f, 0xc98d,		0x21, 0
+	.dw 0xcdc0, 0xc98d,	0xcdff, 0xc98d,		0x21, 0
+	.dw 0xce40, 0xc98d,	0xce7f, 0xc98d,		0x21, 0
+	.dw 0xcec0, 0xc98d,	0xceff, 0xc98d,		0x21, 0
+	.dw 0xcf40, 0xc98d,	0xcf7f, 0xc98d,		0x21, 0
+	.dw 0xcfc0, 0xc98d,	0xcfff, 0xc98d,		0x21, 0
+	.dw 0xd040, 0xc98d,	0xd07f, 0xc98d,		0x21, 0
+	.dw 0xd0c0, 0xc98d,	0xd0ff, 0xc98d,		0x21, 0
+	.dw 0xd140, 0xc98d,	0xd17f, 0xc98d,		0x21, 0
+	.dw 0xd1c0, 0xc98d,	0xd1ff, 0xc98d,		0x21, 0
+	.dw 0xd240, 0xc98d,	0xd27f, 0xc98d,		0x21, 0
+	.dw 0xd2c0, 0xc98d,	0xd2ff, 0xc98d,		0x21, 0
+	.dw 0xd340, 0xc98d,	0xd37f, 0xc98d,		0x21, 0
+	.dw 0xd3c0, 0xc98d,	0xd3ff, 0xc98d,		0x21, 0
+	.dw 0xd440, 0xc98d,	0xd47f, 0xc98d,		0x21, 0
+	.dw 0xd4c0, 0xc98d,	0xd4ff, 0xc98d,		0x21, 0
+	.dw 0xd540, 0xc98d,	0xd57f, 0xc98d,		0x21, 0
+	.dw 0xd5c0, 0xc98d,	0xd5ff, 0xc98d,		0x21, 0
+	.dw 0xd640, 0xc98d,	0xd67f, 0xc98d,		0x21, 0
+	.dw 0xd6c0, 0xc98d,	0xd6ff, 0xc98d,		0x21, 0
+	.dw 0xd740, 0xc98d,	0xd77f, 0xc98d,		0x21, 0
+	.dw 0xd7c0, 0xc98d,	0xd7ff, 0xc98d,		0x21, 0
+	.dw 0xd840, 0xc98d,	0xd87f, 0xc98d,		0x21, 0
+	.dw 0xd8c0, 0xc98d,	0xd8ff, 0xc98d,		0x21, 0
+	.dw 0xd940, 0xc98d,	0xd97f, 0xc98d,		0x21, 0
+	.dw 0xd9c0, 0xc98d,	0xdfff, 0xc98d,		0x21, 0
+	.dw 0xe040, 0xc98d,	0xe07f, 0xc98d,		0x21, 0
+	.dw 0xe0c0, 0xc98d,	0xe0ff, 0xc98d,		0x21, 0
+	.dw 0xe140, 0xc98d,	0xe17f, 0xc98d,		0x21, 0
+	.dw 0xe1c0, 0xc98d,	0xe1ff, 0xc98d,		0x21, 0
+	.dw 0xe240, 0xc98d,	0xe27f, 0xc98d,		0x21, 0
+	.dw 0xe2c0, 0xc98d,	0xe2ff, 0xc98d,		0x21, 0
+	.dw 0xe340, 0xc98d,	0xe37f, 0xc98d,		0x21, 0
+	.dw 0xe3c0, 0xc98d,	0xe3ff, 0xc98d,		0x21, 0
+	.dw 0xe440, 0xc98d,	0xe47f, 0xc98d,		0x21, 0
+	.dw 0xe4c0, 0xc98d,	0xe4ff, 0xc98d,		0x21, 0
+	.dw 0xe540, 0xc98d,	0xe57f, 0xc98d,		0x21, 0
+	.dw 0xe5c0, 0xc98d,	0xe5ff, 0xc98d,		0x21, 0
+	.dw 0xe640, 0xc98d,	0xe67f, 0xc98d,		0x21, 0
+	.dw 0xe6c0, 0xc98d,	0xe6ff, 0xc98d,		0x21, 0
+	.dw 0xe740, 0xc98d,	0xe77f, 0xc98d,		0x21, 0
+	.dw 0xe7c0, 0xc98d,	0xe7ff, 0xc98d,		0x21, 0
+	.dw 0xe840, 0xc98d,	0xe87f, 0xc98d,		0x21, 0
+	.dw 0xe8c0, 0xc98d,	0xe8ff, 0xc98d,		0x21, 0
+	.dw 0xe940, 0xc98d,	0xe97f, 0xc98d,		0x21, 0
+	.dw 0xe9c0, 0xc98d,	0xe9ff, 0xc98d,		0x21, 0
+	.dw 0xea40, 0xc98d,	0xea7f, 0xc98d,		0x21, 0
+	.dw 0xeac0, 0xc98d,	0xeaff, 0xc98d,		0x21, 0
+	.dw 0xeb40, 0xc98d,	0xeb7f, 0xc98d,		0x21, 0
+	.dw 0xebc0, 0xc98d,	0xebff, 0xc98d,		0x21, 0
+	.dw 0xec40, 0xc98d,	0xec7f, 0xc98d,		0x21, 0
+	.dw 0xecc0, 0xc98d,	0xecff, 0xc98d,		0x21, 0
+	.dw 0xed40, 0xc98d,	0xed7f, 0xc98d,		0x21, 0
+	.dw 0xedc0, 0xc98d,	0xedff, 0xc98d,		0x21, 0
+	.dw 0xee40, 0xc98d,	0xee7f, 0xc98d,		0x21, 0
+	.dw 0xeec0, 0xc98d,	0xeeff, 0xc98d,		0x21, 0
+	.dw 0xef40, 0xc98d,	0xef7f, 0xc98d,		0x21, 0
+	.dw 0xefc0, 0xc98d,	0xefff, 0xc98d,		0x21, 0
+	.dw 0xf040, 0xc98d,	0xf07f, 0xc98d,		0x21, 0
+	.dw 0xf0c0, 0xc98d,	0xf0ff, 0xc98d,		0x21, 0
+	.dw 0xf140, 0xc98d,	0xf17f, 0xc98d,		0x21, 0
+	.dw 0xf1c0, 0xc98d,	0xf1ff, 0xc98d,		0x21, 0
+	.dw 0xf240, 0xc98d,	0xf27f, 0xc98d,		0x21, 0
+	.dw 0xf2c0, 0xc98d,	0xf2ff, 0xc98d,		0x21, 0
+	.dw 0xf340, 0xc98d,	0xf37f, 0xc98d,		0x21, 0
+	.dw 0xf3c0, 0xc98d,	0xf3ff, 0xc98d,		0x21, 0
+	.dw 0xf440, 0xc98d,	0xf47f, 0xc98d,		0x21, 0
+	.dw 0xf4c0, 0xc98d,	0xf4ff, 0xc98d,		0x21, 0
+	.dw 0xf540, 0xc98d,	0xf57f, 0xc98d,		0x21, 0
+	.dw 0xf5c0, 0xc98d,	0xf5ff, 0xc98d,		0x21, 0
+	.dw 0xf640, 0xc98d,	0xf67f, 0xc98d,		0x21, 0
+	.dw 0xf6c0, 0xc98d,	0xf6ff, 0xc98d,		0x21, 0
+	.dw 0xf740, 0xc98d,	0xf77f, 0xc98d,		0x21, 0
+	.dw 0xf7c0, 0xc98d,	0xf7ff, 0xc98d,		0x21, 0
+	.dw 0xf840, 0xc98d,	0xf87f, 0xc98d,		0x21, 0
+	.dw 0xf8c0, 0xc98d,	0xf8ff, 0xc98d,		0x21, 0
+	.dw 0xf940, 0xc98d,	0xf97f, 0xc98d,		0x21, 0
+	.dw 0xf9c0, 0xc98d,	0xffff, 0xc98d,		0x21, 0
+	.dw 0x0040, 0xc98e,	0x007f, 0xc98e,		0x21, 0
+	.dw 0x00c0, 0xc98e,	0x00ff, 0xc98e,		0x21, 0
+	.dw 0x0140, 0xc98e,	0x017f, 0xc98e,		0x21, 0
+	.dw 0x01c0, 0xc98e,	0x01ff, 0xc98e,		0x21, 0
+	.dw 0x0240, 0xc98e,	0x027f, 0xc98e,		0x21, 0
+	.dw 0x02c0, 0xc98e,	0x02ff, 0xc98e,		0x21, 0
+	.dw 0x0340, 0xc98e,	0x037f, 0xc98e,		0x21, 0
+	.dw 0x03c0, 0xc98e,	0x03ff, 0xc98e,		0x21, 0
+	.dw 0x0440, 0xc98e,	0x047f, 0xc98e,		0x21, 0
+	.dw 0x04c0, 0xc98e,	0x04ff, 0xc98e,		0x21, 0
+	.dw 0x0540, 0xc98e,	0x057f, 0xc98e,		0x21, 0
+	.dw 0x05c0, 0xc98e,	0x05ff, 0xc98e,		0x21, 0
+	.dw 0x0640, 0xc98e,	0x067f, 0xc98e,		0x21, 0
+	.dw 0x06c0, 0xc98e,	0x06ff, 0xc98e,		0x21, 0
+	.dw 0x0740, 0xc98e,	0x077f, 0xc98e,		0x21, 0
+	.dw 0x07c0, 0xc98e,	0x07ff, 0xc98e,		0x21, 0
+	.dw 0x0840, 0xc98e,	0x087f, 0xc98e,		0x21, 0
+	.dw 0x08c0, 0xc98e,	0x08ff, 0xc98e,		0x21, 0
+	.dw 0x0940, 0xc98e,	0x097f, 0xc98e,		0x21, 0
+	.dw 0x09c0, 0xc98e,	0x09ff, 0xc98e,		0x21, 0
+	.dw 0x0a40, 0xc98e,	0x0a7f, 0xc98e,		0x21, 0
+	.dw 0x0ac0, 0xc98e,	0x0aff, 0xc98e,		0x21, 0
+	.dw 0x0b40, 0xc98e,	0x0b7f, 0xc98e,		0x21, 0
+	.dw 0x0bc0, 0xc98e,	0x0bff, 0xc98e,		0x21, 0
+	.dw 0x0c40, 0xc98e,	0x0c7f, 0xc98e,		0x21, 0
+	.dw 0x0cc0, 0xc98e,	0x0cff, 0xc98e,		0x21, 0
+	.dw 0x0d40, 0xc98e,	0x0d7f, 0xc98e,		0x21, 0
+	.dw 0x0dc0, 0xc98e,	0x0dff, 0xc98e,		0x21, 0
+	.dw 0x0e40, 0xc98e,	0x0e7f, 0xc98e,		0x21, 0
+	.dw 0x0ec0, 0xc98e,	0x0eff, 0xc98e,		0x21, 0
+	.dw 0x0f40, 0xc98e,	0x0f7f, 0xc98e,		0x21, 0
+	.dw 0x0fc0, 0xc98e,	0x0fff, 0xc98e,		0x21, 0
+	.dw 0x1040, 0xc98e,	0x107f, 0xc98e,		0x21, 0
+	.dw 0x10c0, 0xc98e,	0x10ff, 0xc98e,		0x21, 0
+	.dw 0x1140, 0xc98e,	0x117f, 0xc98e,		0x21, 0
+	.dw 0x11c0, 0xc98e,	0x11ff, 0xc98e,		0x21, 0
+	.dw 0x1240, 0xc98e,	0x127f, 0xc98e,		0x21, 0
+	.dw 0x12c0, 0xc98e,	0x12ff, 0xc98e,		0x21, 0
+	.dw 0x1340, 0xc98e,	0x137f, 0xc98e,		0x21, 0
+	.dw 0x13c0, 0xc98e,	0x13ff, 0xc98e,		0x21, 0
+	.dw 0x1440, 0xc98e,	0x147f, 0xc98e,		0x21, 0
+	.dw 0x14c0, 0xc98e,	0x14ff, 0xc98e,		0x21, 0
+	.dw 0x1540, 0xc98e,	0x157f, 0xc98e,		0x21, 0
+	.dw 0x15c0, 0xc98e,	0x15ff, 0xc98e,		0x21, 0
+	.dw 0x1640, 0xc98e,	0x167f, 0xc98e,		0x21, 0
+	.dw 0x16c0, 0xc98e,	0x16ff, 0xc98e,		0x21, 0
+	.dw 0x1740, 0xc98e,	0x177f, 0xc98e,		0x21, 0
+	.dw 0x17c0, 0xc98e,	0x17ff, 0xc98e,		0x21, 0
+	.dw 0x1840, 0xc98e,	0x187f, 0xc98e,		0x21, 0
+	.dw 0x18c0, 0xc98e,	0x18ff, 0xc98e,		0x21, 0
+	.dw 0x1940, 0xc98e,	0x197f, 0xc98e,		0x21, 0
+	.dw 0x19c0, 0xc98e,	0x1fff, 0xc98e,		0x21, 0
+	.dw 0x2040, 0xc98e,	0x207f, 0xc98e,		0x21, 0
+	.dw 0x20c0, 0xc98e,	0x20ff, 0xc98e,		0x21, 0
+	.dw 0x2140, 0xc98e,	0x217f, 0xc98e,		0x21, 0
+	.dw 0x21c0, 0xc98e,	0x21ff, 0xc98e,		0x21, 0
+	.dw 0x2240, 0xc98e,	0x227f, 0xc98e,		0x21, 0
+	.dw 0x22c0, 0xc98e,	0x22ff, 0xc98e,		0x21, 0
+	.dw 0x2340, 0xc98e,	0x237f, 0xc98e,		0x21, 0
+	.dw 0x23c0, 0xc98e,	0x23ff, 0xc98e,		0x21, 0
+	.dw 0x2440, 0xc98e,	0x247f, 0xc98e,		0x21, 0
+	.dw 0x24c0, 0xc98e,	0x24ff, 0xc98e,		0x21, 0
+	.dw 0x2540, 0xc98e,	0x257f, 0xc98e,		0x21, 0
+	.dw 0x25c0, 0xc98e,	0x25ff, 0xc98e,		0x21, 0
+	.dw 0x2640, 0xc98e,	0x267f, 0xc98e,		0x21, 0
+	.dw 0x26c0, 0xc98e,	0x26ff, 0xc98e,		0x21, 0
+	.dw 0x2740, 0xc98e,	0x277f, 0xc98e,		0x21, 0
+	.dw 0x27c0, 0xc98e,	0x27ff, 0xc98e,		0x21, 0
+	.dw 0x2840, 0xc98e,	0x287f, 0xc98e,		0x21, 0
+	.dw 0x28c0, 0xc98e,	0x28ff, 0xc98e,		0x21, 0
+	.dw 0x2940, 0xc98e,	0x297f, 0xc98e,		0x21, 0
+	.dw 0x29c0, 0xc98e,	0x29ff, 0xc98e,		0x21, 0
+	.dw 0x2a40, 0xc98e,	0x2a7f, 0xc98e,		0x21, 0
+	.dw 0x2ac0, 0xc98e,	0x2aff, 0xc98e,		0x21, 0
+	.dw 0x2b40, 0xc98e,	0x2b7f, 0xc98e,		0x21, 0
+	.dw 0x2bc0, 0xc98e,	0x2bff, 0xc98e,		0x21, 0
+	.dw 0x2c40, 0xc98e,	0x2c7f, 0xc98e,		0x21, 0
+	.dw 0x2cc0, 0xc98e,	0x2cff, 0xc98e,		0x21, 0
+	.dw 0x2d40, 0xc98e,	0x2d7f, 0xc98e,		0x21, 0
+	.dw 0x2dc0, 0xc98e,	0x2dff, 0xc98e,		0x21, 0
+	.dw 0x2e40, 0xc98e,	0x2e7f, 0xc98e,		0x21, 0
+	.dw 0x2ec0, 0xc98e,	0x2eff, 0xc98e,		0x21, 0
+	.dw 0x2f40, 0xc98e,	0x2f7f, 0xc98e,		0x21, 0
+	.dw 0x2fc0, 0xc98e,	0x2fff, 0xc98e,		0x21, 0
+	.dw 0x3040, 0xc98e,	0x307f, 0xc98e,		0x21, 0
+	.dw 0x30c0, 0xc98e,	0x30ff, 0xc98e,		0x21, 0
+	.dw 0x3140, 0xc98e,	0x317f, 0xc98e,		0x21, 0
+	.dw 0x31c0, 0xc98e,	0x31ff, 0xc98e,		0x21, 0
+	.dw 0x3240, 0xc98e,	0x327f, 0xc98e,		0x21, 0
+	.dw 0x32c0, 0xc98e,	0x32ff, 0xc98e,		0x21, 0
+	.dw 0x3340, 0xc98e,	0x337f, 0xc98e,		0x21, 0
+	.dw 0x33c0, 0xc98e,	0x33ff, 0xc98e,		0x21, 0
+	.dw 0x3440, 0xc98e,	0x347f, 0xc98e,		0x21, 0
+	.dw 0x34c0, 0xc98e,	0x34ff, 0xc98e,		0x21, 0
+	.dw 0x3540, 0xc98e,	0x357f, 0xc98e,		0x21, 0
+	.dw 0x35c0, 0xc98e,	0x35ff, 0xc98e,		0x21, 0
+	.dw 0x3640, 0xc98e,	0x367f, 0xc98e,		0x21, 0
+	.dw 0x36c0, 0xc98e,	0x36ff, 0xc98e,		0x21, 0
+	.dw 0x3740, 0xc98e,	0x377f, 0xc98e,		0x21, 0
+	.dw 0x37c0, 0xc98e,	0x37ff, 0xc98e,		0x21, 0
+	.dw 0x3840, 0xc98e,	0x387f, 0xc98e,		0x21, 0
+	.dw 0x38c0, 0xc98e,	0x38ff, 0xc98e,		0x21, 0
+	.dw 0x3940, 0xc98e,	0x397f, 0xc98e,		0x21, 0
+	.dw 0x39c0, 0xc98e,	0x3fff, 0xc98e,		0x21, 0
+	.dw 0x4040, 0xc98e,	0x407f, 0xc98e,		0x21, 0
+	.dw 0x40c0, 0xc98e,	0x40ff, 0xc98e,		0x21, 0
+	.dw 0x4140, 0xc98e,	0x417f, 0xc98e,		0x21, 0
+	.dw 0x41c0, 0xc98e,	0x41ff, 0xc98e,		0x21, 0
+	.dw 0x4240, 0xc98e,	0x427f, 0xc98e,		0x21, 0
+	.dw 0x42c0, 0xc98e,	0x42ff, 0xc98e,		0x21, 0
+	.dw 0x4340, 0xc98e,	0x437f, 0xc98e,		0x21, 0
+	.dw 0x43c0, 0xc98e,	0x43ff, 0xc98e,		0x21, 0
+	.dw 0x4440, 0xc98e,	0x447f, 0xc98e,		0x21, 0
+	.dw 0x44c0, 0xc98e,	0x44ff, 0xc98e,		0x21, 0
+	.dw 0x4540, 0xc98e,	0x457f, 0xc98e,		0x21, 0
+	.dw 0x45c0, 0xc98e,	0x45ff, 0xc98e,		0x21, 0
+	.dw 0x4640, 0xc98e,	0x467f, 0xc98e,		0x21, 0
+	.dw 0x46c0, 0xc98e,	0x46ff, 0xc98e,		0x21, 0
+	.dw 0x4740, 0xc98e,	0x477f, 0xc98e,		0x21, 0
+	.dw 0x47c0, 0xc98e,	0x47ff, 0xc98e,		0x21, 0
+	.dw 0x4840, 0xc98e,	0x487f, 0xc98e,		0x21, 0
+	.dw 0x48c0, 0xc98e,	0x48ff, 0xc98e,		0x21, 0
+	.dw 0x4940, 0xc98e,	0x497f, 0xc98e,		0x21, 0
+	.dw 0x49c0, 0xc98e,	0x49ff, 0xc98e,		0x21, 0
+	.dw 0x4a40, 0xc98e,	0x4a7f, 0xc98e,		0x21, 0
+	.dw 0x4ac0, 0xc98e,	0x4aff, 0xc98e,		0x21, 0
+	.dw 0x4b40, 0xc98e,	0x4b7f, 0xc98e,		0x21, 0
+	.dw 0x4bc0, 0xc98e,	0x4bff, 0xc98e,		0x21, 0
+	.dw 0x4c40, 0xc98e,	0x4c7f, 0xc98e,		0x21, 0
+	.dw 0x4cc0, 0xc98e,	0x4cff, 0xc98e,		0x21, 0
+	.dw 0x4d40, 0xc98e,	0x4d7f, 0xc98e,		0x21, 0
+	.dw 0x4dc0, 0xc98e,	0x4dff, 0xc98e,		0x21, 0
+	.dw 0x4e40, 0xc98e,	0x4e7f, 0xc98e,		0x21, 0
+	.dw 0x4ec0, 0xc98e,	0x4eff, 0xc98e,		0x21, 0
+	.dw 0x4f40, 0xc98e,	0x4f7f, 0xc98e,		0x21, 0
+	.dw 0x4fc0, 0xc98e,	0x4fff, 0xc98e,		0x21, 0
+	.dw 0x5040, 0xc98e,	0x507f, 0xc98e,		0x21, 0
+	.dw 0x50c0, 0xc98e,	0x50ff, 0xc98e,		0x21, 0
+	.dw 0x5140, 0xc98e,	0x517f, 0xc98e,		0x21, 0
+	.dw 0x51c0, 0xc98e,	0x51ff, 0xc98e,		0x21, 0
+	.dw 0x5240, 0xc98e,	0x527f, 0xc98e,		0x21, 0
+	.dw 0x52c0, 0xc98e,	0x52ff, 0xc98e,		0x21, 0
+	.dw 0x5340, 0xc98e,	0x537f, 0xc98e,		0x21, 0
+	.dw 0x53c0, 0xc98e,	0x53ff, 0xc98e,		0x21, 0
+	.dw 0x5440, 0xc98e,	0x547f, 0xc98e,		0x21, 0
+	.dw 0x54c0, 0xc98e,	0x54ff, 0xc98e,		0x21, 0
+	.dw 0x5540, 0xc98e,	0x557f, 0xc98e,		0x21, 0
+	.dw 0x55c0, 0xc98e,	0x55ff, 0xc98e,		0x21, 0
+	.dw 0x5640, 0xc98e,	0x567f, 0xc98e,		0x21, 0
+	.dw 0x56c0, 0xc98e,	0x56ff, 0xc98e,		0x21, 0
+	.dw 0x5740, 0xc98e,	0x577f, 0xc98e,		0x21, 0
+	.dw 0x57c0, 0xc98e,	0x57ff, 0xc98e,		0x21, 0
+	.dw 0x5840, 0xc98e,	0x587f, 0xc98e,		0x21, 0
+	.dw 0x58c0, 0xc98e,	0x58ff, 0xc98e,		0x21, 0
+	.dw 0x5940, 0xc98e,	0x597f, 0xc98e,		0x21, 0
+	.dw 0x59c0, 0xc98e,	0x5fff, 0xc98e,		0x21, 0
+	.dw 0x6040, 0xc98e,	0x607f, 0xc98e,		0x21, 0
+	.dw 0x60c0, 0xc98e,	0x60ff, 0xc98e,		0x21, 0
+	.dw 0x6140, 0xc98e,	0x617f, 0xc98e,		0x21, 0
+	.dw 0x61c0, 0xc98e,	0x61ff, 0xc98e,		0x21, 0
+	.dw 0x6240, 0xc98e,	0x627f, 0xc98e,		0x21, 0
+	.dw 0x62c0, 0xc98e,	0x62ff, 0xc98e,		0x21, 0
+	.dw 0x6340, 0xc98e,	0x637f, 0xc98e,		0x21, 0
+	.dw 0x63c0, 0xc98e,	0x63ff, 0xc98e,		0x21, 0
+	.dw 0x6440, 0xc98e,	0x647f, 0xc98e,		0x21, 0
+	.dw 0x64c0, 0xc98e,	0x64ff, 0xc98e,		0x21, 0
+	.dw 0x6540, 0xc98e,	0x657f, 0xc98e,		0x21, 0
+	.dw 0x65c0, 0xc98e,	0x65ff, 0xc98e,		0x21, 0
+	.dw 0x6640, 0xc98e,	0x667f, 0xc98e,		0x21, 0
+	.dw 0x66c0, 0xc98e,	0x66ff, 0xc98e,		0x21, 0
+	.dw 0x6740, 0xc98e,	0x677f, 0xc98e,		0x21, 0
+	.dw 0x67c0, 0xc98e,	0x67ff, 0xc98e,		0x21, 0
+	.dw 0x6840, 0xc98e,	0x687f, 0xc98e,		0x21, 0
+	.dw 0x68c0, 0xc98e,	0x68ff, 0xc98e,		0x21, 0
+	.dw 0x6940, 0xc98e,	0x697f, 0xc98e,		0x21, 0
+	.dw 0x69c0, 0xc98e,	0x69ff, 0xc98e,		0x21, 0
+	.dw 0x6a40, 0xc98e,	0x6a7f, 0xc98e,		0x21, 0
+	.dw 0x6ac0, 0xc98e,	0x6aff, 0xc98e,		0x21, 0
+	.dw 0x6b40, 0xc98e,	0x6b7f, 0xc98e,		0x21, 0
+	.dw 0x6bc0, 0xc98e,	0x6bff, 0xc98e,		0x21, 0
+	.dw 0x6c40, 0xc98e,	0x6c7f, 0xc98e,		0x21, 0
+	.dw 0x6cc0, 0xc98e,	0x6cff, 0xc98e,		0x21, 0
+	.dw 0x6d40, 0xc98e,	0x6d7f, 0xc98e,		0x21, 0
+	.dw 0x6dc0, 0xc98e,	0x6dff, 0xc98e,		0x21, 0
+	.dw 0x6e40, 0xc98e,	0x6e7f, 0xc98e,		0x21, 0
+	.dw 0x6ec0, 0xc98e,	0x6eff, 0xc98e,		0x21, 0
+	.dw 0x6f40, 0xc98e,	0x6f7f, 0xc98e,		0x21, 0
+	.dw 0x6fc0, 0xc98e,	0x6fff, 0xc98e,		0x21, 0
+	.dw 0x7040, 0xc98e,	0x707f, 0xc98e,		0x21, 0
+	.dw 0x70c0, 0xc98e,	0x70ff, 0xc98e,		0x21, 0
+	.dw 0x7140, 0xc98e,	0x717f, 0xc98e,		0x21, 0
+	.dw 0x71c0, 0xc98e,	0x71ff, 0xc98e,		0x21, 0
+	.dw 0x7240, 0xc98e,	0x727f, 0xc98e,		0x21, 0
+	.dw 0x72c0, 0xc98e,	0x72ff, 0xc98e,		0x21, 0
+	.dw 0x7340, 0xc98e,	0x737f, 0xc98e,		0x21, 0
+	.dw 0x73c0, 0xc98e,	0x73ff, 0xc98e,		0x21, 0
+	.dw 0x7440, 0xc98e,	0x747f, 0xc98e,		0x21, 0
+	.dw 0x74c0, 0xc98e,	0x74ff, 0xc98e,		0x21, 0
+	.dw 0x7540, 0xc98e,	0x757f, 0xc98e,		0x21, 0
+	.dw 0x75c0, 0xc98e,	0x75ff, 0xc98e,		0x21, 0
+	.dw 0x7640, 0xc98e,	0x767f, 0xc98e,		0x21, 0
+	.dw 0x76c0, 0xc98e,	0x76ff, 0xc98e,		0x21, 0
+	.dw 0x7740, 0xc98e,	0x777f, 0xc98e,		0x21, 0
+	.dw 0x77c0, 0xc98e,	0x77ff, 0xc98e,		0x21, 0
+	.dw 0x7840, 0xc98e,	0x787f, 0xc98e,		0x21, 0
+	.dw 0x78c0, 0xc98e,	0x78ff, 0xc98e,		0x21, 0
+	.dw 0x7940, 0xc98e,	0x797f, 0xc98e,		0x21, 0
+	.dw 0x79c0, 0xc98e,	0x7fff, 0xc98e,		0x21, 0
+	.dw 0x8040, 0xc98e,	0x807f, 0xc98e,		0x21, 0
+	.dw 0x80c0, 0xc98e,	0x80ff, 0xc98e,		0x21, 0
+	.dw 0x8140, 0xc98e,	0x817f, 0xc98e,		0x21, 0
+	.dw 0x81c0, 0xc98e,	0x81ff, 0xc98e,		0x21, 0
+	.dw 0x8240, 0xc98e,	0x827f, 0xc98e,		0x21, 0
+	.dw 0x82c0, 0xc98e,	0x82ff, 0xc98e,		0x21, 0
+	.dw 0x8340, 0xc98e,	0x837f, 0xc98e,		0x21, 0
+	.dw 0x83c0, 0xc98e,	0x83ff, 0xc98e,		0x21, 0
+	.dw 0x8440, 0xc98e,	0x847f, 0xc98e,		0x21, 0
+	.dw 0x84c0, 0xc98e,	0x84ff, 0xc98e,		0x21, 0
+	.dw 0x8540, 0xc98e,	0x857f, 0xc98e,		0x21, 0
+	.dw 0x85c0, 0xc98e,	0x85ff, 0xc98e,		0x21, 0
+	.dw 0x8640, 0xc98e,	0x867f, 0xc98e,		0x21, 0
+	.dw 0x86c0, 0xc98e,	0x86ff, 0xc98e,		0x21, 0
+	.dw 0x8740, 0xc98e,	0x877f, 0xc98e,		0x21, 0
+	.dw 0x87c0, 0xc98e,	0x87ff, 0xc98e,		0x21, 0
+	.dw 0x8840, 0xc98e,	0x887f, 0xc98e,		0x21, 0
+	.dw 0x88c0, 0xc98e,	0x88ff, 0xc98e,		0x21, 0
+	.dw 0x8940, 0xc98e,	0x897f, 0xc98e,		0x21, 0
+	.dw 0x89c0, 0xc98e,	0x89ff, 0xc98e,		0x21, 0
+	.dw 0x8a40, 0xc98e,	0x8a7f, 0xc98e,		0x21, 0
+	.dw 0x8ac0, 0xc98e,	0x8aff, 0xc98e,		0x21, 0
+	.dw 0x8b40, 0xc98e,	0x8b7f, 0xc98e,		0x21, 0
+	.dw 0x8bc0, 0xc98e,	0x8bff, 0xc98e,		0x21, 0
+	.dw 0x8c40, 0xc98e,	0x8c7f, 0xc98e,		0x21, 0
+	.dw 0x8cc0, 0xc98e,	0x8cff, 0xc98e,		0x21, 0
+	.dw 0x8d40, 0xc98e,	0x8d7f, 0xc98e,		0x21, 0
+	.dw 0x8dc0, 0xc98e,	0x8dff, 0xc98e,		0x21, 0
+	.dw 0x8e40, 0xc98e,	0x8e7f, 0xc98e,		0x21, 0
+	.dw 0x8ec0, 0xc98e,	0x8eff, 0xc98e,		0x21, 0
+	.dw 0x8f40, 0xc98e,	0x8f7f, 0xc98e,		0x21, 0
+	.dw 0x8fc0, 0xc98e,	0x8fff, 0xc98e,		0x21, 0
+	.dw 0x9040, 0xc98e,	0x907f, 0xc98e,		0x21, 0
+	.dw 0x90c0, 0xc98e,	0x90ff, 0xc98e,		0x21, 0
+	.dw 0x9140, 0xc98e,	0x917f, 0xc98e,		0x21, 0
+	.dw 0x91c0, 0xc98e,	0x91ff, 0xc98e,		0x21, 0
+	.dw 0x9240, 0xc98e,	0x927f, 0xc98e,		0x21, 0
+	.dw 0x92c0, 0xc98e,	0x92ff, 0xc98e,		0x21, 0
+	.dw 0x9340, 0xc98e,	0x937f, 0xc98e,		0x21, 0
+	.dw 0x93c0, 0xc98e,	0x93ff, 0xc98e,		0x21, 0
+	.dw 0x9440, 0xc98e,	0x947f, 0xc98e,		0x21, 0
+	.dw 0x94c0, 0xc98e,	0x94ff, 0xc98e,		0x21, 0
+	.dw 0x9540, 0xc98e,	0x957f, 0xc98e,		0x21, 0
+	.dw 0x95c0, 0xc98e,	0x95ff, 0xc98e,		0x21, 0
+	.dw 0x9640, 0xc98e,	0x967f, 0xc98e,		0x21, 0
+	.dw 0x96c0, 0xc98e,	0x96ff, 0xc98e,		0x21, 0
+	.dw 0x9740, 0xc98e,	0x977f, 0xc98e,		0x21, 0
+	.dw 0x97c0, 0xc98e,	0x97ff, 0xc98e,		0x21, 0
+	.dw 0x9840, 0xc98e,	0x987f, 0xc98e,		0x21, 0
+	.dw 0x98c0, 0xc98e,	0x98ff, 0xc98e,		0x21, 0
+	.dw 0x9940, 0xc98e,	0x997f, 0xc98e,		0x21, 0
+	.dw 0x99c0, 0xc98e,	0x9fff, 0xc98e,		0x21, 0
+	.dw 0xa040, 0xc98e,	0xa07f, 0xc98e,		0x21, 0
+	.dw 0xa0c0, 0xc98e,	0xa0ff, 0xc98e,		0x21, 0
+	.dw 0xa140, 0xc98e,	0xa17f, 0xc98e,		0x21, 0
+	.dw 0xa1c0, 0xc98e,	0xa1ff, 0xc98e,		0x21, 0
+	.dw 0xa240, 0xc98e,	0xa27f, 0xc98e,		0x21, 0
+	.dw 0xa2c0, 0xc98e,	0xa2ff, 0xc98e,		0x21, 0
+	.dw 0xa340, 0xc98e,	0xa37f, 0xc98e,		0x21, 0
+	.dw 0xa3c0, 0xc98e,	0xa3ff, 0xc98e,		0x21, 0
+	.dw 0xa440, 0xc98e,	0xa47f, 0xc98e,		0x21, 0
+	.dw 0xa4c0, 0xc98e,	0xa4ff, 0xc98e,		0x21, 0
+	.dw 0xa540, 0xc98e,	0xa57f, 0xc98e,		0x21, 0
+	.dw 0xa5c0, 0xc98e,	0xa5ff, 0xc98e,		0x21, 0
+	.dw 0xa640, 0xc98e,	0xa67f, 0xc98e,		0x21, 0
+	.dw 0xa6c0, 0xc98e,	0xa6ff, 0xc98e,		0x21, 0
+	.dw 0xa740, 0xc98e,	0xa77f, 0xc98e,		0x21, 0
+	.dw 0xa7c0, 0xc98e,	0xa7ff, 0xc98e,		0x21, 0
+	.dw 0xa840, 0xc98e,	0xa87f, 0xc98e,		0x21, 0
+	.dw 0xa8c0, 0xc98e,	0xa8ff, 0xc98e,		0x21, 0
+	.dw 0xa940, 0xc98e,	0xa97f, 0xc98e,		0x21, 0
+	.dw 0xa9c0, 0xc98e,	0xa9ff, 0xc98e,		0x21, 0
+	.dw 0xaa40, 0xc98e,	0xaa7f, 0xc98e,		0x21, 0
+	.dw 0xaac0, 0xc98e,	0xaaff, 0xc98e,		0x21, 0
+	.dw 0xab40, 0xc98e,	0xab7f, 0xc98e,		0x21, 0
+	.dw 0xabc0, 0xc98e,	0xabff, 0xc98e,		0x21, 0
+	.dw 0xac40, 0xc98e,	0xac7f, 0xc98e,		0x21, 0
+	.dw 0xacc0, 0xc98e,	0xacff, 0xc98e,		0x21, 0
+	.dw 0xad40, 0xc98e,	0xad7f, 0xc98e,		0x21, 0
+	.dw 0xadc0, 0xc98e,	0xadff, 0xc98e,		0x21, 0
+	.dw 0xae40, 0xc98e,	0xae7f, 0xc98e,		0x21, 0
+	.dw 0xaec0, 0xc98e,	0xaeff, 0xc98e,		0x21, 0
+	.dw 0xaf40, 0xc98e,	0xaf7f, 0xc98e,		0x21, 0
+	.dw 0xafc0, 0xc98e,	0xafff, 0xc98e,		0x21, 0
+	.dw 0xb040, 0xc98e,	0xb07f, 0xc98e,		0x21, 0
+	.dw 0xb0c0, 0xc98e,	0xb0ff, 0xc98e,		0x21, 0
+	.dw 0xb140, 0xc98e,	0xb17f, 0xc98e,		0x21, 0
+	.dw 0xb1c0, 0xc98e,	0xb1ff, 0xc98e,		0x21, 0
+	.dw 0xb240, 0xc98e,	0xb27f, 0xc98e,		0x21, 0
+	.dw 0xb2c0, 0xc98e,	0xb2ff, 0xc98e,		0x21, 0
+	.dw 0xb340, 0xc98e,	0xb37f, 0xc98e,		0x21, 0
+	.dw 0xb3c0, 0xc98e,	0xb3ff, 0xc98e,		0x21, 0
+	.dw 0xb440, 0xc98e,	0xb47f, 0xc98e,		0x21, 0
+	.dw 0xb4c0, 0xc98e,	0xb4ff, 0xc98e,		0x21, 0
+	.dw 0xb540, 0xc98e,	0xb57f, 0xc98e,		0x21, 0
+	.dw 0xb5c0, 0xc98e,	0xb5ff, 0xc98e,		0x21, 0
+	.dw 0xb640, 0xc98e,	0xb67f, 0xc98e,		0x21, 0
+	.dw 0xb6c0, 0xc98e,	0xb6ff, 0xc98e,		0x21, 0
+	.dw 0xb740, 0xc98e,	0xb77f, 0xc98e,		0x21, 0
+	.dw 0xb7c0, 0xc98e,	0xb7ff, 0xc98e,		0x21, 0
+	.dw 0xb840, 0xc98e,	0xb87f, 0xc98e,		0x21, 0
+	.dw 0xb8c0, 0xc98e,	0xb8ff, 0xc98e,		0x21, 0
+	.dw 0xb940, 0xc98e,	0xb97f, 0xc98e,		0x21, 0
+	.dw 0xb9c0, 0xc98e,	0xbfff, 0xc98e,		0x21, 0
+	.dw 0xc040, 0xc98e,	0xc07f, 0xc98e,		0x21, 0
+	.dw 0xc0c0, 0xc98e,	0xc0ff, 0xc98e,		0x21, 0
+	.dw 0xc140, 0xc98e,	0xc17f, 0xc98e,		0x21, 0
+	.dw 0xc1c0, 0xc98e,	0xc1ff, 0xc98e,		0x21, 0
+	.dw 0xc240, 0xc98e,	0xc27f, 0xc98e,		0x21, 0
+	.dw 0xc2c0, 0xc98e,	0xc2ff, 0xc98e,		0x21, 0
+	.dw 0xc340, 0xc98e,	0xc37f, 0xc98e,		0x21, 0
+	.dw 0xc3c0, 0xc98e,	0xc3ff, 0xc98e,		0x21, 0
+	.dw 0xc440, 0xc98e,	0xc47f, 0xc98e,		0x21, 0
+	.dw 0xc4c0, 0xc98e,	0xc4ff, 0xc98e,		0x21, 0
+	.dw 0xc540, 0xc98e,	0xc57f, 0xc98e,		0x21, 0
+	.dw 0xc5c0, 0xc98e,	0xc5ff, 0xc98e,		0x21, 0
+	.dw 0xc640, 0xc98e,	0xc67f, 0xc98e,		0x21, 0
+	.dw 0xc6c0, 0xc98e,	0xc6ff, 0xc98e,		0x21, 0
+	.dw 0xc740, 0xc98e,	0xc77f, 0xc98e,		0x21, 0
+	.dw 0xc7c0, 0xc98e,	0xc7ff, 0xc98e,		0x21, 0
+	.dw 0xc840, 0xc98e,	0xc87f, 0xc98e,		0x21, 0
+	.dw 0xc8c0, 0xc98e,	0xc8ff, 0xc98e,		0x21, 0
+	.dw 0xc940, 0xc98e,	0xc97f, 0xc98e,		0x21, 0
+	.dw 0xc9c0, 0xc98e,	0xc9ff, 0xc98e,		0x21, 0
+	.dw 0xca40, 0xc98e,	0xca7f, 0xc98e,		0x21, 0
+	.dw 0xcac0, 0xc98e,	0xcaff, 0xc98e,		0x21, 0
+	.dw 0xcb40, 0xc98e,	0xcb7f, 0xc98e,		0x21, 0
+	.dw 0xcbc0, 0xc98e,	0xcbff, 0xc98e,		0x21, 0
+	.dw 0xcc40, 0xc98e,	0xcc7f, 0xc98e,		0x21, 0
+	.dw 0xccc0, 0xc98e,	0xccff, 0xc98e,		0x21, 0
+	.dw 0xcd40, 0xc98e,	0xcd7f, 0xc98e,		0x21, 0
+	.dw 0xcdc0, 0xc98e,	0xcdff, 0xc98e,		0x21, 0
+	.dw 0xce40, 0xc98e,	0xce7f, 0xc98e,		0x21, 0
+	.dw 0xcec0, 0xc98e,	0xceff, 0xc98e,		0x21, 0
+	.dw 0xcf40, 0xc98e,	0xcf7f, 0xc98e,		0x21, 0
+	.dw 0xcfc0, 0xc98e,	0xcfff, 0xc98e,		0x21, 0
+	.dw 0xd040, 0xc98e,	0xd07f, 0xc98e,		0x21, 0
+	.dw 0xd0c0, 0xc98e,	0xd0ff, 0xc98e,		0x21, 0
+	.dw 0xd140, 0xc98e,	0xd17f, 0xc98e,		0x21, 0
+	.dw 0xd1c0, 0xc98e,	0xd1ff, 0xc98e,		0x21, 0
+	.dw 0xd240, 0xc98e,	0xd27f, 0xc98e,		0x21, 0
+	.dw 0xd2c0, 0xc98e,	0xd2ff, 0xc98e,		0x21, 0
+	.dw 0xd340, 0xc98e,	0xd37f, 0xc98e,		0x21, 0
+	.dw 0xd3c0, 0xc98e,	0xd3ff, 0xc98e,		0x21, 0
+	.dw 0xd440, 0xc98e,	0xd47f, 0xc98e,		0x21, 0
+	.dw 0xd4c0, 0xc98e,	0xd4ff, 0xc98e,		0x21, 0
+	.dw 0xd540, 0xc98e,	0xd57f, 0xc98e,		0x21, 0
+	.dw 0xd5c0, 0xc98e,	0xd5ff, 0xc98e,		0x21, 0
+	.dw 0xd640, 0xc98e,	0xd67f, 0xc98e,		0x21, 0
+	.dw 0xd6c0, 0xc98e,	0xd6ff, 0xc98e,		0x21, 0
+	.dw 0xd740, 0xc98e,	0xd77f, 0xc98e,		0x21, 0
+	.dw 0xd7c0, 0xc98e,	0xd7ff, 0xc98e,		0x21, 0
+	.dw 0xd840, 0xc98e,	0xd87f, 0xc98e,		0x21, 0
+	.dw 0xd8c0, 0xc98e,	0xd8ff, 0xc98e,		0x21, 0
+	.dw 0xd940, 0xc98e,	0xd97f, 0xc98e,		0x21, 0
+	.dw 0xd9c0, 0xc98e,	0xdfff, 0xc98e,		0x21, 0
+	.dw 0xe040, 0xc98e,	0xe07f, 0xc98e,		0x21, 0
+	.dw 0xe0c0, 0xc98e,	0xe0ff, 0xc98e,		0x21, 0
+	.dw 0xe140, 0xc98e,	0xe17f, 0xc98e,		0x21, 0
+	.dw 0xe1c0, 0xc98e,	0xe1ff, 0xc98e,		0x21, 0
+	.dw 0xe240, 0xc98e,	0xe27f, 0xc98e,		0x21, 0
+	.dw 0xe2c0, 0xc98e,	0xe2ff, 0xc98e,		0x21, 0
+	.dw 0xe340, 0xc98e,	0xe37f, 0xc98e,		0x21, 0
+	.dw 0xe3c0, 0xc98e,	0xe3ff, 0xc98e,		0x21, 0
+	.dw 0xe440, 0xc98e,	0xe47f, 0xc98e,		0x21, 0
+	.dw 0xe4c0, 0xc98e,	0xe4ff, 0xc98e,		0x21, 0
+	.dw 0xe540, 0xc98e,	0xe57f, 0xc98e,		0x21, 0
+	.dw 0xe5c0, 0xc98e,	0xe5ff, 0xc98e,		0x21, 0
+	.dw 0xe640, 0xc98e,	0xe67f, 0xc98e,		0x21, 0
+	.dw 0xe6c0, 0xc98e,	0xe6ff, 0xc98e,		0x21, 0
+	.dw 0xe740, 0xc98e,	0xe77f, 0xc98e,		0x21, 0
+	.dw 0xe7c0, 0xc98e,	0xe7ff, 0xc98e,		0x21, 0
+	.dw 0xe840, 0xc98e,	0xe87f, 0xc98e,		0x21, 0
+	.dw 0xe8c0, 0xc98e,	0xe8ff, 0xc98e,		0x21, 0
+	.dw 0xe940, 0xc98e,	0xe97f, 0xc98e,		0x21, 0
+	.dw 0xe9c0, 0xc98e,	0xe9ff, 0xc98e,		0x21, 0
+	.dw 0xea40, 0xc98e,	0xea7f, 0xc98e,		0x21, 0
+	.dw 0xeac0, 0xc98e,	0xeaff, 0xc98e,		0x21, 0
+	.dw 0xeb40, 0xc98e,	0xeb7f, 0xc98e,		0x21, 0
+	.dw 0xebc0, 0xc98e,	0xebff, 0xc98e,		0x21, 0
+	.dw 0xec40, 0xc98e,	0xec7f, 0xc98e,		0x21, 0
+	.dw 0xecc0, 0xc98e,	0xecff, 0xc98e,		0x21, 0
+	.dw 0xed40, 0xc98e,	0xed7f, 0xc98e,		0x21, 0
+	.dw 0xedc0, 0xc98e,	0xedff, 0xc98e,		0x21, 0
+	.dw 0xee40, 0xc98e,	0xee7f, 0xc98e,		0x21, 0
+	.dw 0xeec0, 0xc98e,	0xeeff, 0xc98e,		0x21, 0
+	.dw 0xef40, 0xc98e,	0xef7f, 0xc98e,		0x21, 0
+	.dw 0xefc0, 0xc98e,	0xefff, 0xc98e,		0x21, 0
+	.dw 0xf040, 0xc98e,	0xf07f, 0xc98e,		0x21, 0
+	.dw 0xf0c0, 0xc98e,	0xf0ff, 0xc98e,		0x21, 0
+	.dw 0xf140, 0xc98e,	0xf17f, 0xc98e,		0x21, 0
+	.dw 0xf1c0, 0xc98e,	0xf1ff, 0xc98e,		0x21, 0
+	.dw 0xf240, 0xc98e,	0xf27f, 0xc98e,		0x21, 0
+	.dw 0xf2c0, 0xc98e,	0xf2ff, 0xc98e,		0x21, 0
+	.dw 0xf340, 0xc98e,	0xf37f, 0xc98e,		0x21, 0
+	.dw 0xf3c0, 0xc98e,	0xf3ff, 0xc98e,		0x21, 0
+	.dw 0xf440, 0xc98e,	0xf47f, 0xc98e,		0x21, 0
+	.dw 0xf4c0, 0xc98e,	0xf4ff, 0xc98e,		0x21, 0
+	.dw 0xf540, 0xc98e,	0xf57f, 0xc98e,		0x21, 0
+	.dw 0xf5c0, 0xc98e,	0xf5ff, 0xc98e,		0x21, 0
+	.dw 0xf640, 0xc98e,	0xf67f, 0xc98e,		0x21, 0
+	.dw 0xf6c0, 0xc98e,	0xf6ff, 0xc98e,		0x21, 0
+	.dw 0xf740, 0xc98e,	0xf77f, 0xc98e,		0x21, 0
+	.dw 0xf7c0, 0xc98e,	0xf7ff, 0xc98e,		0x21, 0
+	.dw 0xf840, 0xc98e,	0xf87f, 0xc98e,		0x21, 0
+	.dw 0xf8c0, 0xc98e,	0xf8ff, 0xc98e,		0x21, 0
+	.dw 0xf940, 0xc98e,	0xf97f, 0xc98e,		0x21, 0
+	.dw 0xf9c0, 0xc98e,	0xffff, 0xc98e,		0x21, 0
+	.dw 0x0040, 0xc98f,	0x007f, 0xc98f,		0x21, 0
+	.dw 0x00c0, 0xc98f,	0x00ff, 0xc98f,		0x21, 0
+	.dw 0x0140, 0xc98f,	0x017f, 0xc98f,		0x21, 0
+	.dw 0x01c0, 0xc98f,	0x01ff, 0xc98f,		0x21, 0
+	.dw 0x0240, 0xc98f,	0x027f, 0xc98f,		0x21, 0
+	.dw 0x02c0, 0xc98f,	0x02ff, 0xc98f,		0x21, 0
+	.dw 0x0340, 0xc98f,	0x037f, 0xc98f,		0x21, 0
+	.dw 0x03c0, 0xc98f,	0x03ff, 0xc98f,		0x21, 0
+	.dw 0x0440, 0xc98f,	0x047f, 0xc98f,		0x21, 0
+	.dw 0x04c0, 0xc98f,	0x04ff, 0xc98f,		0x21, 0
+	.dw 0x0540, 0xc98f,	0x057f, 0xc98f,		0x21, 0
+	.dw 0x05c0, 0xc98f,	0x05ff, 0xc98f,		0x21, 0
+	.dw 0x0640, 0xc98f,	0x067f, 0xc98f,		0x21, 0
+	.dw 0x06c0, 0xc98f,	0x06ff, 0xc98f,		0x21, 0
+	.dw 0x0740, 0xc98f,	0x077f, 0xc98f,		0x21, 0
+	.dw 0x07c0, 0xc98f,	0x07ff, 0xc98f,		0x21, 0
+	.dw 0x0840, 0xc98f,	0x087f, 0xc98f,		0x21, 0
+	.dw 0x08c0, 0xc98f,	0x08ff, 0xc98f,		0x21, 0
+	.dw 0x0940, 0xc98f,	0x097f, 0xc98f,		0x21, 0
+	.dw 0x09c0, 0xc98f,	0x09ff, 0xc98f,		0x21, 0
+	.dw 0x0a40, 0xc98f,	0x0a7f, 0xc98f,		0x21, 0
+	.dw 0x0ac0, 0xc98f,	0x0aff, 0xc98f,		0x21, 0
+	.dw 0x0b40, 0xc98f,	0x0b7f, 0xc98f,		0x21, 0
+	.dw 0x0bc0, 0xc98f,	0x0bff, 0xc98f,		0x21, 0
+	.dw 0x0c40, 0xc98f,	0x0c7f, 0xc98f,		0x21, 0
+	.dw 0x0cc0, 0xc98f,	0x0cff, 0xc98f,		0x21, 0
+	.dw 0x0d40, 0xc98f,	0x0d7f, 0xc98f,		0x21, 0
+	.dw 0x0dc0, 0xc98f,	0x0dff, 0xc98f,		0x21, 0
+	.dw 0x0e40, 0xc98f,	0x0e7f, 0xc98f,		0x21, 0
+	.dw 0x0ec0, 0xc98f,	0x0eff, 0xc98f,		0x21, 0
+	.dw 0x0f40, 0xc98f,	0x0f7f, 0xc98f,		0x21, 0
+	.dw 0x0fc0, 0xc98f,	0x0fff, 0xc98f,		0x21, 0
+	.dw 0x1040, 0xc98f,	0x107f, 0xc98f,		0x21, 0
+	.dw 0x10c0, 0xc98f,	0x10ff, 0xc98f,		0x21, 0
+	.dw 0x1140, 0xc98f,	0x117f, 0xc98f,		0x21, 0
+	.dw 0x11c0, 0xc98f,	0x11ff, 0xc98f,		0x21, 0
+	.dw 0x1240, 0xc98f,	0x127f, 0xc98f,		0x21, 0
+	.dw 0x12c0, 0xc98f,	0x12ff, 0xc98f,		0x21, 0
+	.dw 0x1340, 0xc98f,	0x137f, 0xc98f,		0x21, 0
+	.dw 0x13c0, 0xc98f,	0x13ff, 0xc98f,		0x21, 0
+	.dw 0x1440, 0xc98f,	0x147f, 0xc98f,		0x21, 0
+	.dw 0x14c0, 0xc98f,	0x14ff, 0xc98f,		0x21, 0
+	.dw 0x1540, 0xc98f,	0x157f, 0xc98f,		0x21, 0
+	.dw 0x15c0, 0xc98f,	0x15ff, 0xc98f,		0x21, 0
+	.dw 0x1640, 0xc98f,	0x167f, 0xc98f,		0x21, 0
+	.dw 0x16c0, 0xc98f,	0x16ff, 0xc98f,		0x21, 0
+	.dw 0x1740, 0xc98f,	0x177f, 0xc98f,		0x21, 0
+	.dw 0x17c0, 0xc98f,	0x17ff, 0xc98f,		0x21, 0
+	.dw 0x1840, 0xc98f,	0x187f, 0xc98f,		0x21, 0
+	.dw 0x18c0, 0xc98f,	0x18ff, 0xc98f,		0x21, 0
+	.dw 0x1940, 0xc98f,	0x197f, 0xc98f,		0x21, 0
+	.dw 0x19c0, 0xc98f,	0x1fff, 0xc98f,		0x21, 0
+	.dw 0x2040, 0xc98f,	0x207f, 0xc98f,		0x21, 0
+	.dw 0x20c0, 0xc98f,	0x20ff, 0xc98f,		0x21, 0
+	.dw 0x2140, 0xc98f,	0x217f, 0xc98f,		0x21, 0
+	.dw 0x21c0, 0xc98f,	0x21ff, 0xc98f,		0x21, 0
+	.dw 0x2240, 0xc98f,	0x227f, 0xc98f,		0x21, 0
+	.dw 0x22c0, 0xc98f,	0x22ff, 0xc98f,		0x21, 0
+	.dw 0x2340, 0xc98f,	0x237f, 0xc98f,		0x21, 0
+	.dw 0x23c0, 0xc98f,	0x23ff, 0xc98f,		0x21, 0
+	.dw 0x2440, 0xc98f,	0x247f, 0xc98f,		0x21, 0
+	.dw 0x24c0, 0xc98f,	0x24ff, 0xc98f,		0x21, 0
+	.dw 0x2540, 0xc98f,	0x257f, 0xc98f,		0x21, 0
+	.dw 0x25c0, 0xc98f,	0x25ff, 0xc98f,		0x21, 0
+	.dw 0x2640, 0xc98f,	0x267f, 0xc98f,		0x21, 0
+	.dw 0x26c0, 0xc98f,	0x26ff, 0xc98f,		0x21, 0
+	.dw 0x2740, 0xc98f,	0x277f, 0xc98f,		0x21, 0
+	.dw 0x27c0, 0xc98f,	0x27ff, 0xc98f,		0x21, 0
+	.dw 0x2840, 0xc98f,	0x287f, 0xc98f,		0x21, 0
+	.dw 0x28c0, 0xc98f,	0x28ff, 0xc98f,		0x21, 0
+	.dw 0x2940, 0xc98f,	0x297f, 0xc98f,		0x21, 0
+	.dw 0x29c0, 0xc98f,	0x29ff, 0xc98f,		0x21, 0
+	.dw 0x2a40, 0xc98f,	0x2a7f, 0xc98f,		0x21, 0
+	.dw 0x2ac0, 0xc98f,	0x2aff, 0xc98f,		0x21, 0
+	.dw 0x2b40, 0xc98f,	0x2b7f, 0xc98f,		0x21, 0
+	.dw 0x2bc0, 0xc98f,	0x2bff, 0xc98f,		0x21, 0
+	.dw 0x2c40, 0xc98f,	0x2c7f, 0xc98f,		0x21, 0
+	.dw 0x2cc0, 0xc98f,	0x2cff, 0xc98f,		0x21, 0
+	.dw 0x2d40, 0xc98f,	0x2d7f, 0xc98f,		0x21, 0
+	.dw 0x2dc0, 0xc98f,	0x2dff, 0xc98f,		0x21, 0
+	.dw 0x2e40, 0xc98f,	0x2e7f, 0xc98f,		0x21, 0
+	.dw 0x2ec0, 0xc98f,	0x2eff, 0xc98f,		0x21, 0
+	.dw 0x2f40, 0xc98f,	0x2f7f, 0xc98f,		0x21, 0
+	.dw 0x2fc0, 0xc98f,	0x2fff, 0xc98f,		0x21, 0
+	.dw 0x3040, 0xc98f,	0x307f, 0xc98f,		0x21, 0
+	.dw 0x30c0, 0xc98f,	0x30ff, 0xc98f,		0x21, 0
+	.dw 0x3140, 0xc98f,	0x317f, 0xc98f,		0x21, 0
+	.dw 0x31c0, 0xc98f,	0x31ff, 0xc98f,		0x21, 0
+	.dw 0x3240, 0xc98f,	0x327f, 0xc98f,		0x21, 0
+	.dw 0x32c0, 0xc98f,	0x32ff, 0xc98f,		0x21, 0
+	.dw 0x3340, 0xc98f,	0x337f, 0xc98f,		0x21, 0
+	.dw 0x33c0, 0xc98f,	0x33ff, 0xc98f,		0x21, 0
+	.dw 0x3440, 0xc98f,	0x347f, 0xc98f,		0x21, 0
+	.dw 0x34c0, 0xc98f,	0x34ff, 0xc98f,		0x21, 0
+	.dw 0x3540, 0xc98f,	0x357f, 0xc98f,		0x21, 0
+	.dw 0x35c0, 0xc98f,	0x35ff, 0xc98f,		0x21, 0
+	.dw 0x3640, 0xc98f,	0x367f, 0xc98f,		0x21, 0
+	.dw 0x36c0, 0xc98f,	0x36ff, 0xc98f,		0x21, 0
+	.dw 0x3740, 0xc98f,	0x377f, 0xc98f,		0x21, 0
+	.dw 0x37c0, 0xc98f,	0x37ff, 0xc98f,		0x21, 0
+	.dw 0x3840, 0xc98f,	0x387f, 0xc98f,		0x21, 0
+	.dw 0x38c0, 0xc98f,	0x38ff, 0xc98f,		0x21, 0
+	.dw 0x3940, 0xc98f,	0x397f, 0xc98f,		0x21, 0
+	.dw 0x39c0, 0xc98f,	0x1fff, 0xc990,		0x21, 0
+	.dw 0x3a00, 0xc990,	0x5fff, 0xc990,		0x21, 0
+	.dw 0x7a00, 0xc990,	0x9fff, 0xc990,		0x21, 0
+	.dw 0xba00, 0xc990,	0xdfff, 0xc990,		0x21, 0
+	.dw 0xfa00, 0xc990,	0x1fff, 0xc991,		0x21, 0
+	.dw 0x3a00, 0xc991,	0x5fff, 0xc991,		0x21, 0
+	.dw 0x7a00, 0xc991,	0x9fff, 0xc991,		0x21, 0
+	.dw 0xba00, 0xc991,	0xdfff, 0xc991,		0x21, 0
+	.dw 0xfa00, 0xc991,	0x1fff, 0xc992,		0x21, 0
+	.dw 0x3a00, 0xc992,	0x5fff, 0xc992,		0x21, 0
+	.dw 0x7a00, 0xc992,	0x9fff, 0xc992,		0x21, 0
+	.dw 0xba00, 0xc992,	0xdfff, 0xc992,		0x21, 0
+	.dw 0xfa00, 0xc992,	0xffff, 0xc993,		0x21, 0
+	.dw 0x1a00, 0xc994,	0x1fff, 0xc994,		0x21, 0
+	.dw 0x3a00, 0xc994,	0x3fff, 0xc994,		0x21, 0
+	.dw 0x5a00, 0xc994,	0x5fff, 0xc994,		0x21, 0
+	.dw 0x7a00, 0xc994,	0x7fff, 0xc994,		0x21, 0
+	.dw 0x9a00, 0xc994,	0x9fff, 0xc994,		0x21, 0
+	.dw 0xba00, 0xc994,	0xbfff, 0xc994,		0x21, 0
+	.dw 0xda00, 0xc994,	0xdfff, 0xc994,		0x21, 0
+	.dw 0xfa00, 0xc994,	0xffff, 0xc994,		0x21, 0
+	.dw 0x1a00, 0xc995,	0x1fff, 0xc995,		0x21, 0
+	.dw 0x3a00, 0xc995,	0x3fff, 0xc995,		0x21, 0
+	.dw 0x5a00, 0xc995,	0x5fff, 0xc995,		0x21, 0
+	.dw 0x7a00, 0xc995,	0x7fff, 0xc995,		0x21, 0
+	.dw 0x9a00, 0xc995,	0x9fff, 0xc995,		0x21, 0
+	.dw 0xba00, 0xc995,	0xbfff, 0xc995,		0x21, 0
+	.dw 0xda00, 0xc995,	0xdfff, 0xc995,		0x21, 0
+	.dw 0xfa00, 0xc995,	0xffff, 0xc995,		0x21, 0
+	.dw 0x1a00, 0xc996,	0x1fff, 0xc996,		0x21, 0
+	.dw 0x3a00, 0xc996,	0x3fff, 0xc996,		0x21, 0
+	.dw 0x5a00, 0xc996,	0x5fff, 0xc996,		0x21, 0
+	.dw 0x7a00, 0xc996,	0x7fff, 0xc996,		0x21, 0
+	.dw 0x9a00, 0xc996,	0x9fff, 0xc996,		0x21, 0
+	.dw 0xba00, 0xc996,	0xbfff, 0xc996,		0x21, 0
+	.dw 0xda00, 0xc996,	0xdfff, 0xc996,		0x21, 0
+	.dw 0xfa00, 0xc996,	0xffff, 0xc996,		0x21, 0
+	.dw 0x1a00, 0xc997,	0x1fff, 0xc997,		0x21, 0
+	.dw 0x3a00, 0xc997,	0x1fff, 0xc998,		0x21, 0
+	.dw 0x2040, 0xc998,	0x207f, 0xc998,		0x21, 0
+	.dw 0x20c0, 0xc998,	0x20ff, 0xc998,		0x21, 0
+	.dw 0x2140, 0xc998,	0x217f, 0xc998,		0x21, 0
+	.dw 0x21c0, 0xc998,	0x21ff, 0xc998,		0x21, 0
+	.dw 0x2240, 0xc998,	0x227f, 0xc998,		0x21, 0
+	.dw 0x22c0, 0xc998,	0x22ff, 0xc998,		0x21, 0
+	.dw 0x2340, 0xc998,	0x237f, 0xc998,		0x21, 0
+	.dw 0x23c0, 0xc998,	0x23ff, 0xc998,		0x21, 0
+	.dw 0x2440, 0xc998,	0x247f, 0xc998,		0x21, 0
+	.dw 0x24c0, 0xc998,	0x24ff, 0xc998,		0x21, 0
+	.dw 0x2540, 0xc998,	0x257f, 0xc998,		0x21, 0
+	.dw 0x25c0, 0xc998,	0x25ff, 0xc998,		0x21, 0
+	.dw 0x2640, 0xc998,	0x267f, 0xc998,		0x21, 0
+	.dw 0x26c0, 0xc998,	0x26ff, 0xc998,		0x21, 0
+	.dw 0x2740, 0xc998,	0x277f, 0xc998,		0x21, 0
+	.dw 0x27c0, 0xc998,	0x27ff, 0xc998,		0x21, 0
+	.dw 0x2840, 0xc998,	0x287f, 0xc998,		0x21, 0
+	.dw 0x28c0, 0xc998,	0x28ff, 0xc998,		0x21, 0
+	.dw 0x2940, 0xc998,	0x297f, 0xc998,		0x21, 0
+	.dw 0x29c0, 0xc998,	0x29ff, 0xc998,		0x21, 0
+	.dw 0x2a40, 0xc998,	0x2a7f, 0xc998,		0x21, 0
+	.dw 0x2ac0, 0xc998,	0x2aff, 0xc998,		0x21, 0
+	.dw 0x2b40, 0xc998,	0x2b7f, 0xc998,		0x21, 0
+	.dw 0x2bc0, 0xc998,	0x2bff, 0xc998,		0x21, 0
+	.dw 0x2c40, 0xc998,	0x2c7f, 0xc998,		0x21, 0
+	.dw 0x2cc0, 0xc998,	0x2cff, 0xc998,		0x21, 0
+	.dw 0x2d40, 0xc998,	0x2d7f, 0xc998,		0x21, 0
+	.dw 0x2dc0, 0xc998,	0x2dff, 0xc998,		0x21, 0
+	.dw 0x2e40, 0xc998,	0x2e7f, 0xc998,		0x21, 0
+	.dw 0x2ec0, 0xc998,	0x2eff, 0xc998,		0x21, 0
+	.dw 0x2f40, 0xc998,	0x2f7f, 0xc998,		0x21, 0
+	.dw 0x2fc0, 0xc998,	0x2fff, 0xc998,		0x21, 0
+	.dw 0x3040, 0xc998,	0x307f, 0xc998,		0x21, 0
+	.dw 0x30c0, 0xc998,	0x30ff, 0xc998,		0x21, 0
+	.dw 0x3140, 0xc998,	0x317f, 0xc998,		0x21, 0
+	.dw 0x31c0, 0xc998,	0x31ff, 0xc998,		0x21, 0
+	.dw 0x3240, 0xc998,	0x327f, 0xc998,		0x21, 0
+	.dw 0x32c0, 0xc998,	0x32ff, 0xc998,		0x21, 0
+	.dw 0x3340, 0xc998,	0x337f, 0xc998,		0x21, 0
+	.dw 0x33c0, 0xc998,	0x33ff, 0xc998,		0x21, 0
+	.dw 0x3440, 0xc998,	0x347f, 0xc998,		0x21, 0
+	.dw 0x34c0, 0xc998,	0x34ff, 0xc998,		0x21, 0
+	.dw 0x3540, 0xc998,	0x357f, 0xc998,		0x21, 0
+	.dw 0x35c0, 0xc998,	0x35ff, 0xc998,		0x21, 0
+	.dw 0x3640, 0xc998,	0x367f, 0xc998,		0x21, 0
+	.dw 0x36c0, 0xc998,	0x36ff, 0xc998,		0x21, 0
+	.dw 0x3740, 0xc998,	0x377f, 0xc998,		0x21, 0
+	.dw 0x37c0, 0xc998,	0x37ff, 0xc998,		0x21, 0
+	.dw 0x3840, 0xc998,	0x387f, 0xc998,		0x21, 0
+	.dw 0x38c0, 0xc998,	0x38ff, 0xc998,		0x21, 0
+	.dw 0x3940, 0xc998,	0x397f, 0xc998,		0x21, 0
+	.dw 0x39c0, 0xc998,	0x5fff, 0xc998,		0x21, 0
+	.dw 0x6040, 0xc998,	0x607f, 0xc998,		0x21, 0
+	.dw 0x60c0, 0xc998,	0x60ff, 0xc998,		0x21, 0
+	.dw 0x6140, 0xc998,	0x617f, 0xc998,		0x21, 0
+	.dw 0x61c0, 0xc998,	0x61ff, 0xc998,		0x21, 0
+	.dw 0x6240, 0xc998,	0x627f, 0xc998,		0x21, 0
+	.dw 0x62c0, 0xc998,	0x62ff, 0xc998,		0x21, 0
+	.dw 0x6340, 0xc998,	0x637f, 0xc998,		0x21, 0
+	.dw 0x63c0, 0xc998,	0x63ff, 0xc998,		0x21, 0
+	.dw 0x6440, 0xc998,	0x647f, 0xc998,		0x21, 0
+	.dw 0x64c0, 0xc998,	0x64ff, 0xc998,		0x21, 0
+	.dw 0x6540, 0xc998,	0x657f, 0xc998,		0x21, 0
+	.dw 0x65c0, 0xc998,	0x65ff, 0xc998,		0x21, 0
+	.dw 0x6640, 0xc998,	0x667f, 0xc998,		0x21, 0
+	.dw 0x66c0, 0xc998,	0x66ff, 0xc998,		0x21, 0
+	.dw 0x6740, 0xc998,	0x677f, 0xc998,		0x21, 0
+	.dw 0x67c0, 0xc998,	0x67ff, 0xc998,		0x21, 0
+	.dw 0x6840, 0xc998,	0x687f, 0xc998,		0x21, 0
+	.dw 0x68c0, 0xc998,	0x68ff, 0xc998,		0x21, 0
+	.dw 0x6940, 0xc998,	0x697f, 0xc998,		0x21, 0
+	.dw 0x69c0, 0xc998,	0x69ff, 0xc998,		0x21, 0
+	.dw 0x6a40, 0xc998,	0x6a7f, 0xc998,		0x21, 0
+	.dw 0x6ac0, 0xc998,	0x6aff, 0xc998,		0x21, 0
+	.dw 0x6b40, 0xc998,	0x6b7f, 0xc998,		0x21, 0
+	.dw 0x6bc0, 0xc998,	0x6bff, 0xc998,		0x21, 0
+	.dw 0x6c40, 0xc998,	0x6c7f, 0xc998,		0x21, 0
+	.dw 0x6cc0, 0xc998,	0x6cff, 0xc998,		0x21, 0
+	.dw 0x6d40, 0xc998,	0x6d7f, 0xc998,		0x21, 0
+	.dw 0x6dc0, 0xc998,	0x6dff, 0xc998,		0x21, 0
+	.dw 0x6e40, 0xc998,	0x6e7f, 0xc998,		0x21, 0
+	.dw 0x6ec0, 0xc998,	0x6eff, 0xc998,		0x21, 0
+	.dw 0x6f40, 0xc998,	0x6f7f, 0xc998,		0x21, 0
+	.dw 0x6fc0, 0xc998,	0x6fff, 0xc998,		0x21, 0
+	.dw 0x7040, 0xc998,	0x707f, 0xc998,		0x21, 0
+	.dw 0x70c0, 0xc998,	0x70ff, 0xc998,		0x21, 0
+	.dw 0x7140, 0xc998,	0x717f, 0xc998,		0x21, 0
+	.dw 0x71c0, 0xc998,	0x71ff, 0xc998,		0x21, 0
+	.dw 0x7240, 0xc998,	0x727f, 0xc998,		0x21, 0
+	.dw 0x72c0, 0xc998,	0x72ff, 0xc998,		0x21, 0
+	.dw 0x7340, 0xc998,	0x737f, 0xc998,		0x21, 0
+	.dw 0x73c0, 0xc998,	0x73ff, 0xc998,		0x21, 0
+	.dw 0x7440, 0xc998,	0x747f, 0xc998,		0x21, 0
+	.dw 0x74c0, 0xc998,	0x74ff, 0xc998,		0x21, 0
+	.dw 0x7540, 0xc998,	0x757f, 0xc998,		0x21, 0
+	.dw 0x75c0, 0xc998,	0x75ff, 0xc998,		0x21, 0
+	.dw 0x7640, 0xc998,	0x767f, 0xc998,		0x21, 0
+	.dw 0x76c0, 0xc998,	0x76ff, 0xc998,		0x21, 0
+	.dw 0x7740, 0xc998,	0x777f, 0xc998,		0x21, 0
+	.dw 0x77c0, 0xc998,	0x77ff, 0xc998,		0x21, 0
+	.dw 0x7840, 0xc998,	0x787f, 0xc998,		0x21, 0
+	.dw 0x78c0, 0xc998,	0x78ff, 0xc998,		0x21, 0
+	.dw 0x7940, 0xc998,	0x797f, 0xc998,		0x21, 0
+	.dw 0x79c0, 0xc998,	0x9fff, 0xc998,		0x21, 0
+	.dw 0xa040, 0xc998,	0xa07f, 0xc998,		0x21, 0
+	.dw 0xa0c0, 0xc998,	0xa0ff, 0xc998,		0x21, 0
+	.dw 0xa140, 0xc998,	0xa17f, 0xc998,		0x21, 0
+	.dw 0xa1c0, 0xc998,	0xa1ff, 0xc998,		0x21, 0
+	.dw 0xa240, 0xc998,	0xa27f, 0xc998,		0x21, 0
+	.dw 0xa2c0, 0xc998,	0xa2ff, 0xc998,		0x21, 0
+	.dw 0xa340, 0xc998,	0xa37f, 0xc998,		0x21, 0
+	.dw 0xa3c0, 0xc998,	0xa3ff, 0xc998,		0x21, 0
+	.dw 0xa440, 0xc998,	0xa47f, 0xc998,		0x21, 0
+	.dw 0xa4c0, 0xc998,	0xa4ff, 0xc998,		0x21, 0
+	.dw 0xa540, 0xc998,	0xa57f, 0xc998,		0x21, 0
+	.dw 0xa5c0, 0xc998,	0xa5ff, 0xc998,		0x21, 0
+	.dw 0xa640, 0xc998,	0xa67f, 0xc998,		0x21, 0
+	.dw 0xa6c0, 0xc998,	0xa6ff, 0xc998,		0x21, 0
+	.dw 0xa740, 0xc998,	0xa77f, 0xc998,		0x21, 0
+	.dw 0xa7c0, 0xc998,	0xa7ff, 0xc998,		0x21, 0
+	.dw 0xa840, 0xc998,	0xa87f, 0xc998,		0x21, 0
+	.dw 0xa8c0, 0xc998,	0xa8ff, 0xc998,		0x21, 0
+	.dw 0xa940, 0xc998,	0xa97f, 0xc998,		0x21, 0
+	.dw 0xa9c0, 0xc998,	0xa9ff, 0xc998,		0x21, 0
+	.dw 0xaa40, 0xc998,	0xaa7f, 0xc998,		0x21, 0
+	.dw 0xaac0, 0xc998,	0xaaff, 0xc998,		0x21, 0
+	.dw 0xab40, 0xc998,	0xab7f, 0xc998,		0x21, 0
+	.dw 0xabc0, 0xc998,	0xabff, 0xc998,		0x21, 0
+	.dw 0xac40, 0xc998,	0xac7f, 0xc998,		0x21, 0
+	.dw 0xacc0, 0xc998,	0xacff, 0xc998,		0x21, 0
+	.dw 0xad40, 0xc998,	0xad7f, 0xc998,		0x21, 0
+	.dw 0xadc0, 0xc998,	0xadff, 0xc998,		0x21, 0
+	.dw 0xae40, 0xc998,	0xae7f, 0xc998,		0x21, 0
+	.dw 0xaec0, 0xc998,	0xaeff, 0xc998,		0x21, 0
+	.dw 0xaf40, 0xc998,	0xaf7f, 0xc998,		0x21, 0
+	.dw 0xafc0, 0xc998,	0xafff, 0xc998,		0x21, 0
+	.dw 0xb040, 0xc998,	0xb07f, 0xc998,		0x21, 0
+	.dw 0xb0c0, 0xc998,	0xb0ff, 0xc998,		0x21, 0
+	.dw 0xb140, 0xc998,	0xb17f, 0xc998,		0x21, 0
+	.dw 0xb1c0, 0xc998,	0xb1ff, 0xc998,		0x21, 0
+	.dw 0xb240, 0xc998,	0xb27f, 0xc998,		0x21, 0
+	.dw 0xb2c0, 0xc998,	0xb2ff, 0xc998,		0x21, 0
+	.dw 0xb340, 0xc998,	0xb37f, 0xc998,		0x21, 0
+	.dw 0xb3c0, 0xc998,	0xb3ff, 0xc998,		0x21, 0
+	.dw 0xb440, 0xc998,	0xb47f, 0xc998,		0x21, 0
+	.dw 0xb4c0, 0xc998,	0xb4ff, 0xc998,		0x21, 0
+	.dw 0xb540, 0xc998,	0xb57f, 0xc998,		0x21, 0
+	.dw 0xb5c0, 0xc998,	0xb5ff, 0xc998,		0x21, 0
+	.dw 0xb640, 0xc998,	0xb67f, 0xc998,		0x21, 0
+	.dw 0xb6c0, 0xc998,	0xb6ff, 0xc998,		0x21, 0
+	.dw 0xb740, 0xc998,	0xb77f, 0xc998,		0x21, 0
+	.dw 0xb7c0, 0xc998,	0xb7ff, 0xc998,		0x21, 0
+	.dw 0xb840, 0xc998,	0xb87f, 0xc998,		0x21, 0
+	.dw 0xb8c0, 0xc998,	0xb8ff, 0xc998,		0x21, 0
+	.dw 0xb940, 0xc998,	0xb97f, 0xc998,		0x21, 0
+	.dw 0xb9c0, 0xc998,	0xdfff, 0xc998,		0x21, 0
+	.dw 0xe040, 0xc998,	0xe07f, 0xc998,		0x21, 0
+	.dw 0xe0c0, 0xc998,	0xe0ff, 0xc998,		0x21, 0
+	.dw 0xe140, 0xc998,	0xe17f, 0xc998,		0x21, 0
+	.dw 0xe1c0, 0xc998,	0xe1ff, 0xc998,		0x21, 0
+	.dw 0xe240, 0xc998,	0xe27f, 0xc998,		0x21, 0
+	.dw 0xe2c0, 0xc998,	0xe2ff, 0xc998,		0x21, 0
+	.dw 0xe340, 0xc998,	0xe37f, 0xc998,		0x21, 0
+	.dw 0xe3c0, 0xc998,	0xe3ff, 0xc998,		0x21, 0
+	.dw 0xe440, 0xc998,	0xe47f, 0xc998,		0x21, 0
+	.dw 0xe4c0, 0xc998,	0xe4ff, 0xc998,		0x21, 0
+	.dw 0xe540, 0xc998,	0xe57f, 0xc998,		0x21, 0
+	.dw 0xe5c0, 0xc998,	0xe5ff, 0xc998,		0x21, 0
+	.dw 0xe640, 0xc998,	0xe67f, 0xc998,		0x21, 0
+	.dw 0xe6c0, 0xc998,	0xe6ff, 0xc998,		0x21, 0
+	.dw 0xe740, 0xc998,	0xe77f, 0xc998,		0x21, 0
+	.dw 0xe7c0, 0xc998,	0xe7ff, 0xc998,		0x21, 0
+	.dw 0xe840, 0xc998,	0xe87f, 0xc998,		0x21, 0
+	.dw 0xe8c0, 0xc998,	0xe8ff, 0xc998,		0x21, 0
+	.dw 0xe940, 0xc998,	0xe97f, 0xc998,		0x21, 0
+	.dw 0xe9c0, 0xc998,	0xe9ff, 0xc998,		0x21, 0
+	.dw 0xea40, 0xc998,	0xea7f, 0xc998,		0x21, 0
+	.dw 0xeac0, 0xc998,	0xeaff, 0xc998,		0x21, 0
+	.dw 0xeb40, 0xc998,	0xeb7f, 0xc998,		0x21, 0
+	.dw 0xebc0, 0xc998,	0xebff, 0xc998,		0x21, 0
+	.dw 0xec40, 0xc998,	0xec7f, 0xc998,		0x21, 0
+	.dw 0xecc0, 0xc998,	0xecff, 0xc998,		0x21, 0
+	.dw 0xed40, 0xc998,	0xed7f, 0xc998,		0x21, 0
+	.dw 0xedc0, 0xc998,	0xedff, 0xc998,		0x21, 0
+	.dw 0xee40, 0xc998,	0xee7f, 0xc998,		0x21, 0
+	.dw 0xeec0, 0xc998,	0xeeff, 0xc998,		0x21, 0
+	.dw 0xef40, 0xc998,	0xef7f, 0xc998,		0x21, 0
+	.dw 0xefc0, 0xc998,	0xefff, 0xc998,		0x21, 0
+	.dw 0xf040, 0xc998,	0xf07f, 0xc998,		0x21, 0
+	.dw 0xf0c0, 0xc998,	0xf0ff, 0xc998,		0x21, 0
+	.dw 0xf140, 0xc998,	0xf17f, 0xc998,		0x21, 0
+	.dw 0xf1c0, 0xc998,	0xf1ff, 0xc998,		0x21, 0
+	.dw 0xf240, 0xc998,	0xf27f, 0xc998,		0x21, 0
+	.dw 0xf2c0, 0xc998,	0xf2ff, 0xc998,		0x21, 0
+	.dw 0xf340, 0xc998,	0xf37f, 0xc998,		0x21, 0
+	.dw 0xf3c0, 0xc998,	0xf3ff, 0xc998,		0x21, 0
+	.dw 0xf440, 0xc998,	0xf47f, 0xc998,		0x21, 0
+	.dw 0xf4c0, 0xc998,	0xf4ff, 0xc998,		0x21, 0
+	.dw 0xf540, 0xc998,	0xf57f, 0xc998,		0x21, 0
+	.dw 0xf5c0, 0xc998,	0xf5ff, 0xc998,		0x21, 0
+	.dw 0xf640, 0xc998,	0xf67f, 0xc998,		0x21, 0
+	.dw 0xf6c0, 0xc998,	0xf6ff, 0xc998,		0x21, 0
+	.dw 0xf740, 0xc998,	0xf77f, 0xc998,		0x21, 0
+	.dw 0xf7c0, 0xc998,	0xf7ff, 0xc998,		0x21, 0
+	.dw 0xf840, 0xc998,	0xf87f, 0xc998,		0x21, 0
+	.dw 0xf8c0, 0xc998,	0xf8ff, 0xc998,		0x21, 0
+	.dw 0xf940, 0xc998,	0xf97f, 0xc998,		0x21, 0
+	.dw 0xf9c0, 0xc998,	0x1fff, 0xc999,		0x21, 0
+	.dw 0x2040, 0xc999,	0x207f, 0xc999,		0x21, 0
+	.dw 0x20c0, 0xc999,	0x20ff, 0xc999,		0x21, 0
+	.dw 0x2140, 0xc999,	0x217f, 0xc999,		0x21, 0
+	.dw 0x21c0, 0xc999,	0x21ff, 0xc999,		0x21, 0
+	.dw 0x2240, 0xc999,	0x227f, 0xc999,		0x21, 0
+	.dw 0x22c0, 0xc999,	0x22ff, 0xc999,		0x21, 0
+	.dw 0x2340, 0xc999,	0x237f, 0xc999,		0x21, 0
+	.dw 0x23c0, 0xc999,	0x23ff, 0xc999,		0x21, 0
+	.dw 0x2440, 0xc999,	0x247f, 0xc999,		0x21, 0
+	.dw 0x24c0, 0xc999,	0x24ff, 0xc999,		0x21, 0
+	.dw 0x2540, 0xc999,	0x257f, 0xc999,		0x21, 0
+	.dw 0x25c0, 0xc999,	0x25ff, 0xc999,		0x21, 0
+	.dw 0x2640, 0xc999,	0x267f, 0xc999,		0x21, 0
+	.dw 0x26c0, 0xc999,	0x26ff, 0xc999,		0x21, 0
+	.dw 0x2740, 0xc999,	0x277f, 0xc999,		0x21, 0
+	.dw 0x27c0, 0xc999,	0x27ff, 0xc999,		0x21, 0
+	.dw 0x2840, 0xc999,	0x287f, 0xc999,		0x21, 0
+	.dw 0x28c0, 0xc999,	0x28ff, 0xc999,		0x21, 0
+	.dw 0x2940, 0xc999,	0x297f, 0xc999,		0x21, 0
+	.dw 0x29c0, 0xc999,	0x29ff, 0xc999,		0x21, 0
+	.dw 0x2a40, 0xc999,	0x2a7f, 0xc999,		0x21, 0
+	.dw 0x2ac0, 0xc999,	0x2aff, 0xc999,		0x21, 0
+	.dw 0x2b40, 0xc999,	0x2b7f, 0xc999,		0x21, 0
+	.dw 0x2bc0, 0xc999,	0x2bff, 0xc999,		0x21, 0
+	.dw 0x2c40, 0xc999,	0x2c7f, 0xc999,		0x21, 0
+	.dw 0x2cc0, 0xc999,	0x2cff, 0xc999,		0x21, 0
+	.dw 0x2d40, 0xc999,	0x2d7f, 0xc999,		0x21, 0
+	.dw 0x2dc0, 0xc999,	0x2dff, 0xc999,		0x21, 0
+	.dw 0x2e40, 0xc999,	0x2e7f, 0xc999,		0x21, 0
+	.dw 0x2ec0, 0xc999,	0x2eff, 0xc999,		0x21, 0
+	.dw 0x2f40, 0xc999,	0x2f7f, 0xc999,		0x21, 0
+	.dw 0x2fc0, 0xc999,	0x2fff, 0xc999,		0x21, 0
+	.dw 0x3040, 0xc999,	0x307f, 0xc999,		0x21, 0
+	.dw 0x30c0, 0xc999,	0x30ff, 0xc999,		0x21, 0
+	.dw 0x3140, 0xc999,	0x317f, 0xc999,		0x21, 0
+	.dw 0x31c0, 0xc999,	0x31ff, 0xc999,		0x21, 0
+	.dw 0x3240, 0xc999,	0x327f, 0xc999,		0x21, 0
+	.dw 0x32c0, 0xc999,	0x32ff, 0xc999,		0x21, 0
+	.dw 0x3340, 0xc999,	0x337f, 0xc999,		0x21, 0
+	.dw 0x33c0, 0xc999,	0x33ff, 0xc999,		0x21, 0
+	.dw 0x3440, 0xc999,	0x347f, 0xc999,		0x21, 0
+	.dw 0x34c0, 0xc999,	0x34ff, 0xc999,		0x21, 0
+	.dw 0x3540, 0xc999,	0x357f, 0xc999,		0x21, 0
+	.dw 0x35c0, 0xc999,	0x35ff, 0xc999,		0x21, 0
+	.dw 0x3640, 0xc999,	0x367f, 0xc999,		0x21, 0
+	.dw 0x36c0, 0xc999,	0x36ff, 0xc999,		0x21, 0
+	.dw 0x3740, 0xc999,	0x377f, 0xc999,		0x21, 0
+	.dw 0x37c0, 0xc999,	0x37ff, 0xc999,		0x21, 0
+	.dw 0x3840, 0xc999,	0x387f, 0xc999,		0x21, 0
+	.dw 0x38c0, 0xc999,	0x38ff, 0xc999,		0x21, 0
+	.dw 0x3940, 0xc999,	0x397f, 0xc999,		0x21, 0
+	.dw 0x39c0, 0xc999,	0x5fff, 0xc999,		0x21, 0
+	.dw 0x6040, 0xc999,	0x607f, 0xc999,		0x21, 0
+	.dw 0x60c0, 0xc999,	0x60ff, 0xc999,		0x21, 0
+	.dw 0x6140, 0xc999,	0x617f, 0xc999,		0x21, 0
+	.dw 0x61c0, 0xc999,	0x61ff, 0xc999,		0x21, 0
+	.dw 0x6240, 0xc999,	0x627f, 0xc999,		0x21, 0
+	.dw 0x62c0, 0xc999,	0x62ff, 0xc999,		0x21, 0
+	.dw 0x6340, 0xc999,	0x637f, 0xc999,		0x21, 0
+	.dw 0x63c0, 0xc999,	0x63ff, 0xc999,		0x21, 0
+	.dw 0x6440, 0xc999,	0x647f, 0xc999,		0x21, 0
+	.dw 0x64c0, 0xc999,	0x64ff, 0xc999,		0x21, 0
+	.dw 0x6540, 0xc999,	0x657f, 0xc999,		0x21, 0
+	.dw 0x65c0, 0xc999,	0x65ff, 0xc999,		0x21, 0
+	.dw 0x6640, 0xc999,	0x667f, 0xc999,		0x21, 0
+	.dw 0x66c0, 0xc999,	0x66ff, 0xc999,		0x21, 0
+	.dw 0x6740, 0xc999,	0x677f, 0xc999,		0x21, 0
+	.dw 0x67c0, 0xc999,	0x67ff, 0xc999,		0x21, 0
+	.dw 0x6840, 0xc999,	0x687f, 0xc999,		0x21, 0
+	.dw 0x68c0, 0xc999,	0x68ff, 0xc999,		0x21, 0
+	.dw 0x6940, 0xc999,	0x697f, 0xc999,		0x21, 0
+	.dw 0x69c0, 0xc999,	0x69ff, 0xc999,		0x21, 0
+	.dw 0x6a40, 0xc999,	0x6a7f, 0xc999,		0x21, 0
+	.dw 0x6ac0, 0xc999,	0x6aff, 0xc999,		0x21, 0
+	.dw 0x6b40, 0xc999,	0x6b7f, 0xc999,		0x21, 0
+	.dw 0x6bc0, 0xc999,	0x6bff, 0xc999,		0x21, 0
+	.dw 0x6c40, 0xc999,	0x6c7f, 0xc999,		0x21, 0
+	.dw 0x6cc0, 0xc999,	0x6cff, 0xc999,		0x21, 0
+	.dw 0x6d40, 0xc999,	0x6d7f, 0xc999,		0x21, 0
+	.dw 0x6dc0, 0xc999,	0x6dff, 0xc999,		0x21, 0
+	.dw 0x6e40, 0xc999,	0x6e7f, 0xc999,		0x21, 0
+	.dw 0x6ec0, 0xc999,	0x6eff, 0xc999,		0x21, 0
+	.dw 0x6f40, 0xc999,	0x6f7f, 0xc999,		0x21, 0
+	.dw 0x6fc0, 0xc999,	0x6fff, 0xc999,		0x21, 0
+	.dw 0x7040, 0xc999,	0x707f, 0xc999,		0x21, 0
+	.dw 0x70c0, 0xc999,	0x70ff, 0xc999,		0x21, 0
+	.dw 0x7140, 0xc999,	0x717f, 0xc999,		0x21, 0
+	.dw 0x71c0, 0xc999,	0x71ff, 0xc999,		0x21, 0
+	.dw 0x7240, 0xc999,	0x727f, 0xc999,		0x21, 0
+	.dw 0x72c0, 0xc999,	0x72ff, 0xc999,		0x21, 0
+	.dw 0x7340, 0xc999,	0x737f, 0xc999,		0x21, 0
+	.dw 0x73c0, 0xc999,	0x73ff, 0xc999,		0x21, 0
+	.dw 0x7440, 0xc999,	0x747f, 0xc999,		0x21, 0
+	.dw 0x74c0, 0xc999,	0x74ff, 0xc999,		0x21, 0
+	.dw 0x7540, 0xc999,	0x757f, 0xc999,		0x21, 0
+	.dw 0x75c0, 0xc999,	0x75ff, 0xc999,		0x21, 0
+	.dw 0x7640, 0xc999,	0x767f, 0xc999,		0x21, 0
+	.dw 0x76c0, 0xc999,	0x76ff, 0xc999,		0x21, 0
+	.dw 0x7740, 0xc999,	0x777f, 0xc999,		0x21, 0
+	.dw 0x77c0, 0xc999,	0x77ff, 0xc999,		0x21, 0
+	.dw 0x7840, 0xc999,	0x787f, 0xc999,		0x21, 0
+	.dw 0x78c0, 0xc999,	0x78ff, 0xc999,		0x21, 0
+	.dw 0x7940, 0xc999,	0x797f, 0xc999,		0x21, 0
+	.dw 0x79c0, 0xc999,	0x9fff, 0xc999,		0x21, 0
+	.dw 0xa040, 0xc999,	0xa07f, 0xc999,		0x21, 0
+	.dw 0xa0c0, 0xc999,	0xa0ff, 0xc999,		0x21, 0
+	.dw 0xa140, 0xc999,	0xa17f, 0xc999,		0x21, 0
+	.dw 0xa1c0, 0xc999,	0xa1ff, 0xc999,		0x21, 0
+	.dw 0xa240, 0xc999,	0xa27f, 0xc999,		0x21, 0
+	.dw 0xa2c0, 0xc999,	0xa2ff, 0xc999,		0x21, 0
+	.dw 0xa340, 0xc999,	0xa37f, 0xc999,		0x21, 0
+	.dw 0xa3c0, 0xc999,	0xa3ff, 0xc999,		0x21, 0
+	.dw 0xa440, 0xc999,	0xa47f, 0xc999,		0x21, 0
+	.dw 0xa4c0, 0xc999,	0xa4ff, 0xc999,		0x21, 0
+	.dw 0xa540, 0xc999,	0xa57f, 0xc999,		0x21, 0
+	.dw 0xa5c0, 0xc999,	0xa5ff, 0xc999,		0x21, 0
+	.dw 0xa640, 0xc999,	0xa67f, 0xc999,		0x21, 0
+	.dw 0xa6c0, 0xc999,	0xa6ff, 0xc999,		0x21, 0
+	.dw 0xa740, 0xc999,	0xa77f, 0xc999,		0x21, 0
+	.dw 0xa7c0, 0xc999,	0xa7ff, 0xc999,		0x21, 0
+	.dw 0xa840, 0xc999,	0xa87f, 0xc999,		0x21, 0
+	.dw 0xa8c0, 0xc999,	0xa8ff, 0xc999,		0x21, 0
+	.dw 0xa940, 0xc999,	0xa97f, 0xc999,		0x21, 0
+	.dw 0xa9c0, 0xc999,	0xa9ff, 0xc999,		0x21, 0
+	.dw 0xaa40, 0xc999,	0xaa7f, 0xc999,		0x21, 0
+	.dw 0xaac0, 0xc999,	0xaaff, 0xc999,		0x21, 0
+	.dw 0xab40, 0xc999,	0xab7f, 0xc999,		0x21, 0
+	.dw 0xabc0, 0xc999,	0xabff, 0xc999,		0x21, 0
+	.dw 0xac40, 0xc999,	0xac7f, 0xc999,		0x21, 0
+	.dw 0xacc0, 0xc999,	0xacff, 0xc999,		0x21, 0
+	.dw 0xad40, 0xc999,	0xad7f, 0xc999,		0x21, 0
+	.dw 0xadc0, 0xc999,	0xadff, 0xc999,		0x21, 0
+	.dw 0xae40, 0xc999,	0xae7f, 0xc999,		0x21, 0
+	.dw 0xaec0, 0xc999,	0xaeff, 0xc999,		0x21, 0
+	.dw 0xaf40, 0xc999,	0xaf7f, 0xc999,		0x21, 0
+	.dw 0xafc0, 0xc999,	0xafff, 0xc999,		0x21, 0
+	.dw 0xb040, 0xc999,	0xb07f, 0xc999,		0x21, 0
+	.dw 0xb0c0, 0xc999,	0xb0ff, 0xc999,		0x21, 0
+	.dw 0xb140, 0xc999,	0xb17f, 0xc999,		0x21, 0
+	.dw 0xb1c0, 0xc999,	0xb1ff, 0xc999,		0x21, 0
+	.dw 0xb240, 0xc999,	0xb27f, 0xc999,		0x21, 0
+	.dw 0xb2c0, 0xc999,	0xb2ff, 0xc999,		0x21, 0
+	.dw 0xb340, 0xc999,	0xb37f, 0xc999,		0x21, 0
+	.dw 0xb3c0, 0xc999,	0xb3ff, 0xc999,		0x21, 0
+	.dw 0xb440, 0xc999,	0xb47f, 0xc999,		0x21, 0
+	.dw 0xb4c0, 0xc999,	0xb4ff, 0xc999,		0x21, 0
+	.dw 0xb540, 0xc999,	0xb57f, 0xc999,		0x21, 0
+	.dw 0xb5c0, 0xc999,	0xb5ff, 0xc999,		0x21, 0
+	.dw 0xb640, 0xc999,	0xb67f, 0xc999,		0x21, 0
+	.dw 0xb6c0, 0xc999,	0xb6ff, 0xc999,		0x21, 0
+	.dw 0xb740, 0xc999,	0xb77f, 0xc999,		0x21, 0
+	.dw 0xb7c0, 0xc999,	0xb7ff, 0xc999,		0x21, 0
+	.dw 0xb840, 0xc999,	0xb87f, 0xc999,		0x21, 0
+	.dw 0xb8c0, 0xc999,	0xb8ff, 0xc999,		0x21, 0
+	.dw 0xb940, 0xc999,	0xb97f, 0xc999,		0x21, 0
+	.dw 0xb9c0, 0xc999,	0xdfff, 0xc999,		0x21, 0
+	.dw 0xe040, 0xc999,	0xe07f, 0xc999,		0x21, 0
+	.dw 0xe0c0, 0xc999,	0xe0ff, 0xc999,		0x21, 0
+	.dw 0xe140, 0xc999,	0xe17f, 0xc999,		0x21, 0
+	.dw 0xe1c0, 0xc999,	0xe1ff, 0xc999,		0x21, 0
+	.dw 0xe240, 0xc999,	0xe27f, 0xc999,		0x21, 0
+	.dw 0xe2c0, 0xc999,	0xe2ff, 0xc999,		0x21, 0
+	.dw 0xe340, 0xc999,	0xe37f, 0xc999,		0x21, 0
+	.dw 0xe3c0, 0xc999,	0xe3ff, 0xc999,		0x21, 0
+	.dw 0xe440, 0xc999,	0xe47f, 0xc999,		0x21, 0
+	.dw 0xe4c0, 0xc999,	0xe4ff, 0xc999,		0x21, 0
+	.dw 0xe540, 0xc999,	0xe57f, 0xc999,		0x21, 0
+	.dw 0xe5c0, 0xc999,	0xe5ff, 0xc999,		0x21, 0
+	.dw 0xe640, 0xc999,	0xe67f, 0xc999,		0x21, 0
+	.dw 0xe6c0, 0xc999,	0xe6ff, 0xc999,		0x21, 0
+	.dw 0xe740, 0xc999,	0xe77f, 0xc999,		0x21, 0
+	.dw 0xe7c0, 0xc999,	0xe7ff, 0xc999,		0x21, 0
+	.dw 0xe840, 0xc999,	0xe87f, 0xc999,		0x21, 0
+	.dw 0xe8c0, 0xc999,	0xe8ff, 0xc999,		0x21, 0
+	.dw 0xe940, 0xc999,	0xe97f, 0xc999,		0x21, 0
+	.dw 0xe9c0, 0xc999,	0xe9ff, 0xc999,		0x21, 0
+	.dw 0xea40, 0xc999,	0xea7f, 0xc999,		0x21, 0
+	.dw 0xeac0, 0xc999,	0xeaff, 0xc999,		0x21, 0
+	.dw 0xeb40, 0xc999,	0xeb7f, 0xc999,		0x21, 0
+	.dw 0xebc0, 0xc999,	0xebff, 0xc999,		0x21, 0
+	.dw 0xec40, 0xc999,	0xec7f, 0xc999,		0x21, 0
+	.dw 0xecc0, 0xc999,	0xecff, 0xc999,		0x21, 0
+	.dw 0xed40, 0xc999,	0xed7f, 0xc999,		0x21, 0
+	.dw 0xedc0, 0xc999,	0xedff, 0xc999,		0x21, 0
+	.dw 0xee40, 0xc999,	0xee7f, 0xc999,		0x21, 0
+	.dw 0xeec0, 0xc999,	0xeeff, 0xc999,		0x21, 0
+	.dw 0xef40, 0xc999,	0xef7f, 0xc999,		0x21, 0
+	.dw 0xefc0, 0xc999,	0xefff, 0xc999,		0x21, 0
+	.dw 0xf040, 0xc999,	0xf07f, 0xc999,		0x21, 0
+	.dw 0xf0c0, 0xc999,	0xf0ff, 0xc999,		0x21, 0
+	.dw 0xf140, 0xc999,	0xf17f, 0xc999,		0x21, 0
+	.dw 0xf1c0, 0xc999,	0xf1ff, 0xc999,		0x21, 0
+	.dw 0xf240, 0xc999,	0xf27f, 0xc999,		0x21, 0
+	.dw 0xf2c0, 0xc999,	0xf2ff, 0xc999,		0x21, 0
+	.dw 0xf340, 0xc999,	0xf37f, 0xc999,		0x21, 0
+	.dw 0xf3c0, 0xc999,	0xf3ff, 0xc999,		0x21, 0
+	.dw 0xf440, 0xc999,	0xf47f, 0xc999,		0x21, 0
+	.dw 0xf4c0, 0xc999,	0xf4ff, 0xc999,		0x21, 0
+	.dw 0xf540, 0xc999,	0xf57f, 0xc999,		0x21, 0
+	.dw 0xf5c0, 0xc999,	0xf5ff, 0xc999,		0x21, 0
+	.dw 0xf640, 0xc999,	0xf67f, 0xc999,		0x21, 0
+	.dw 0xf6c0, 0xc999,	0xf6ff, 0xc999,		0x21, 0
+	.dw 0xf740, 0xc999,	0xf77f, 0xc999,		0x21, 0
+	.dw 0xf7c0, 0xc999,	0xf7ff, 0xc999,		0x21, 0
+	.dw 0xf840, 0xc999,	0xf87f, 0xc999,		0x21, 0
+	.dw 0xf8c0, 0xc999,	0xf8ff, 0xc999,		0x21, 0
+	.dw 0xf940, 0xc999,	0xf97f, 0xc999,		0x21, 0
+	.dw 0xf9c0, 0xc999,	0x1fff, 0xc99a,		0x21, 0
+	.dw 0x2040, 0xc99a,	0x207f, 0xc99a,		0x21, 0
+	.dw 0x20c0, 0xc99a,	0x20ff, 0xc99a,		0x21, 0
+	.dw 0x2140, 0xc99a,	0x217f, 0xc99a,		0x21, 0
+	.dw 0x21c0, 0xc99a,	0x21ff, 0xc99a,		0x21, 0
+	.dw 0x2240, 0xc99a,	0x227f, 0xc99a,		0x21, 0
+	.dw 0x22c0, 0xc99a,	0x22ff, 0xc99a,		0x21, 0
+	.dw 0x2340, 0xc99a,	0x237f, 0xc99a,		0x21, 0
+	.dw 0x23c0, 0xc99a,	0x23ff, 0xc99a,		0x21, 0
+	.dw 0x2440, 0xc99a,	0x247f, 0xc99a,		0x21, 0
+	.dw 0x24c0, 0xc99a,	0x24ff, 0xc99a,		0x21, 0
+	.dw 0x2540, 0xc99a,	0x257f, 0xc99a,		0x21, 0
+	.dw 0x25c0, 0xc99a,	0x25ff, 0xc99a,		0x21, 0
+	.dw 0x2640, 0xc99a,	0x267f, 0xc99a,		0x21, 0
+	.dw 0x26c0, 0xc99a,	0x26ff, 0xc99a,		0x21, 0
+	.dw 0x2740, 0xc99a,	0x277f, 0xc99a,		0x21, 0
+	.dw 0x27c0, 0xc99a,	0x27ff, 0xc99a,		0x21, 0
+	.dw 0x2840, 0xc99a,	0x287f, 0xc99a,		0x21, 0
+	.dw 0x28c0, 0xc99a,	0x28ff, 0xc99a,		0x21, 0
+	.dw 0x2940, 0xc99a,	0x297f, 0xc99a,		0x21, 0
+	.dw 0x29c0, 0xc99a,	0x29ff, 0xc99a,		0x21, 0
+	.dw 0x2a40, 0xc99a,	0x2a7f, 0xc99a,		0x21, 0
+	.dw 0x2ac0, 0xc99a,	0x2aff, 0xc99a,		0x21, 0
+	.dw 0x2b40, 0xc99a,	0x2b7f, 0xc99a,		0x21, 0
+	.dw 0x2bc0, 0xc99a,	0x2bff, 0xc99a,		0x21, 0
+	.dw 0x2c40, 0xc99a,	0x2c7f, 0xc99a,		0x21, 0
+	.dw 0x2cc0, 0xc99a,	0x2cff, 0xc99a,		0x21, 0
+	.dw 0x2d40, 0xc99a,	0x2d7f, 0xc99a,		0x21, 0
+	.dw 0x2dc0, 0xc99a,	0x2dff, 0xc99a,		0x21, 0
+	.dw 0x2e40, 0xc99a,	0x2e7f, 0xc99a,		0x21, 0
+	.dw 0x2ec0, 0xc99a,	0x2eff, 0xc99a,		0x21, 0
+	.dw 0x2f40, 0xc99a,	0x2f7f, 0xc99a,		0x21, 0
+	.dw 0x2fc0, 0xc99a,	0x2fff, 0xc99a,		0x21, 0
+	.dw 0x3040, 0xc99a,	0x307f, 0xc99a,		0x21, 0
+	.dw 0x30c0, 0xc99a,	0x30ff, 0xc99a,		0x21, 0
+	.dw 0x3140, 0xc99a,	0x317f, 0xc99a,		0x21, 0
+	.dw 0x31c0, 0xc99a,	0x31ff, 0xc99a,		0x21, 0
+	.dw 0x3240, 0xc99a,	0x327f, 0xc99a,		0x21, 0
+	.dw 0x32c0, 0xc99a,	0x32ff, 0xc99a,		0x21, 0
+	.dw 0x3340, 0xc99a,	0x337f, 0xc99a,		0x21, 0
+	.dw 0x33c0, 0xc99a,	0x33ff, 0xc99a,		0x21, 0
+	.dw 0x3440, 0xc99a,	0x347f, 0xc99a,		0x21, 0
+	.dw 0x34c0, 0xc99a,	0x34ff, 0xc99a,		0x21, 0
+	.dw 0x3540, 0xc99a,	0x357f, 0xc99a,		0x21, 0
+	.dw 0x35c0, 0xc99a,	0x35ff, 0xc99a,		0x21, 0
+	.dw 0x3640, 0xc99a,	0x367f, 0xc99a,		0x21, 0
+	.dw 0x36c0, 0xc99a,	0x36ff, 0xc99a,		0x21, 0
+	.dw 0x3740, 0xc99a,	0x377f, 0xc99a,		0x21, 0
+	.dw 0x37c0, 0xc99a,	0x37ff, 0xc99a,		0x21, 0
+	.dw 0x3840, 0xc99a,	0x387f, 0xc99a,		0x21, 0
+	.dw 0x38c0, 0xc99a,	0x38ff, 0xc99a,		0x21, 0
+	.dw 0x3940, 0xc99a,	0x397f, 0xc99a,		0x21, 0
+	.dw 0x39c0, 0xc99a,	0x5fff, 0xc99a,		0x21, 0
+	.dw 0x6040, 0xc99a,	0x607f, 0xc99a,		0x21, 0
+	.dw 0x60c0, 0xc99a,	0x60ff, 0xc99a,		0x21, 0
+	.dw 0x6140, 0xc99a,	0x617f, 0xc99a,		0x21, 0
+	.dw 0x61c0, 0xc99a,	0x61ff, 0xc99a,		0x21, 0
+	.dw 0x6240, 0xc99a,	0x627f, 0xc99a,		0x21, 0
+	.dw 0x62c0, 0xc99a,	0x62ff, 0xc99a,		0x21, 0
+	.dw 0x6340, 0xc99a,	0x637f, 0xc99a,		0x21, 0
+	.dw 0x63c0, 0xc99a,	0x63ff, 0xc99a,		0x21, 0
+	.dw 0x6440, 0xc99a,	0x647f, 0xc99a,		0x21, 0
+	.dw 0x64c0, 0xc99a,	0x64ff, 0xc99a,		0x21, 0
+	.dw 0x6540, 0xc99a,	0x657f, 0xc99a,		0x21, 0
+	.dw 0x65c0, 0xc99a,	0x65ff, 0xc99a,		0x21, 0
+	.dw 0x6640, 0xc99a,	0x667f, 0xc99a,		0x21, 0
+	.dw 0x66c0, 0xc99a,	0x66ff, 0xc99a,		0x21, 0
+	.dw 0x6740, 0xc99a,	0x677f, 0xc99a,		0x21, 0
+	.dw 0x67c0, 0xc99a,	0x67ff, 0xc99a,		0x21, 0
+	.dw 0x6840, 0xc99a,	0x687f, 0xc99a,		0x21, 0
+	.dw 0x68c0, 0xc99a,	0x68ff, 0xc99a,		0x21, 0
+	.dw 0x6940, 0xc99a,	0x697f, 0xc99a,		0x21, 0
+	.dw 0x69c0, 0xc99a,	0x69ff, 0xc99a,		0x21, 0
+	.dw 0x6a40, 0xc99a,	0x6a7f, 0xc99a,		0x21, 0
+	.dw 0x6ac0, 0xc99a,	0x6aff, 0xc99a,		0x21, 0
+	.dw 0x6b40, 0xc99a,	0x6b7f, 0xc99a,		0x21, 0
+	.dw 0x6bc0, 0xc99a,	0x6bff, 0xc99a,		0x21, 0
+	.dw 0x6c40, 0xc99a,	0x6c7f, 0xc99a,		0x21, 0
+	.dw 0x6cc0, 0xc99a,	0x6cff, 0xc99a,		0x21, 0
+	.dw 0x6d40, 0xc99a,	0x6d7f, 0xc99a,		0x21, 0
+	.dw 0x6dc0, 0xc99a,	0x6dff, 0xc99a,		0x21, 0
+	.dw 0x6e40, 0xc99a,	0x6e7f, 0xc99a,		0x21, 0
+	.dw 0x6ec0, 0xc99a,	0x6eff, 0xc99a,		0x21, 0
+	.dw 0x6f40, 0xc99a,	0x6f7f, 0xc99a,		0x21, 0
+	.dw 0x6fc0, 0xc99a,	0x6fff, 0xc99a,		0x21, 0
+	.dw 0x7040, 0xc99a,	0x707f, 0xc99a,		0x21, 0
+	.dw 0x70c0, 0xc99a,	0x70ff, 0xc99a,		0x21, 0
+	.dw 0x7140, 0xc99a,	0x717f, 0xc99a,		0x21, 0
+	.dw 0x71c0, 0xc99a,	0x71ff, 0xc99a,		0x21, 0
+	.dw 0x7240, 0xc99a,	0x727f, 0xc99a,		0x21, 0
+	.dw 0x72c0, 0xc99a,	0x72ff, 0xc99a,		0x21, 0
+	.dw 0x7340, 0xc99a,	0x737f, 0xc99a,		0x21, 0
+	.dw 0x73c0, 0xc99a,	0x73ff, 0xc99a,		0x21, 0
+	.dw 0x7440, 0xc99a,	0x747f, 0xc99a,		0x21, 0
+	.dw 0x74c0, 0xc99a,	0x74ff, 0xc99a,		0x21, 0
+	.dw 0x7540, 0xc99a,	0x757f, 0xc99a,		0x21, 0
+	.dw 0x75c0, 0xc99a,	0x75ff, 0xc99a,		0x21, 0
+	.dw 0x7640, 0xc99a,	0x767f, 0xc99a,		0x21, 0
+	.dw 0x76c0, 0xc99a,	0x76ff, 0xc99a,		0x21, 0
+	.dw 0x7740, 0xc99a,	0x777f, 0xc99a,		0x21, 0
+	.dw 0x77c0, 0xc99a,	0x77ff, 0xc99a,		0x21, 0
+	.dw 0x7840, 0xc99a,	0x787f, 0xc99a,		0x21, 0
+	.dw 0x78c0, 0xc99a,	0x78ff, 0xc99a,		0x21, 0
+	.dw 0x7940, 0xc99a,	0x797f, 0xc99a,		0x21, 0
+	.dw 0x79c0, 0xc99a,	0x9fff, 0xc99a,		0x21, 0
+	.dw 0xa040, 0xc99a,	0xa07f, 0xc99a,		0x21, 0
+	.dw 0xa0c0, 0xc99a,	0xa0ff, 0xc99a,		0x21, 0
+	.dw 0xa140, 0xc99a,	0xa17f, 0xc99a,		0x21, 0
+	.dw 0xa1c0, 0xc99a,	0xa1ff, 0xc99a,		0x21, 0
+	.dw 0xa240, 0xc99a,	0xa27f, 0xc99a,		0x21, 0
+	.dw 0xa2c0, 0xc99a,	0xa2ff, 0xc99a,		0x21, 0
+	.dw 0xa340, 0xc99a,	0xa37f, 0xc99a,		0x21, 0
+	.dw 0xa3c0, 0xc99a,	0xa3ff, 0xc99a,		0x21, 0
+	.dw 0xa440, 0xc99a,	0xa47f, 0xc99a,		0x21, 0
+	.dw 0xa4c0, 0xc99a,	0xa4ff, 0xc99a,		0x21, 0
+	.dw 0xa540, 0xc99a,	0xa57f, 0xc99a,		0x21, 0
+	.dw 0xa5c0, 0xc99a,	0xa5ff, 0xc99a,		0x21, 0
+	.dw 0xa640, 0xc99a,	0xa67f, 0xc99a,		0x21, 0
+	.dw 0xa6c0, 0xc99a,	0xa6ff, 0xc99a,		0x21, 0
+	.dw 0xa740, 0xc99a,	0xa77f, 0xc99a,		0x21, 0
+	.dw 0xa7c0, 0xc99a,	0xa7ff, 0xc99a,		0x21, 0
+	.dw 0xa840, 0xc99a,	0xa87f, 0xc99a,		0x21, 0
+	.dw 0xa8c0, 0xc99a,	0xa8ff, 0xc99a,		0x21, 0
+	.dw 0xa940, 0xc99a,	0xa97f, 0xc99a,		0x21, 0
+	.dw 0xa9c0, 0xc99a,	0xa9ff, 0xc99a,		0x21, 0
+	.dw 0xaa40, 0xc99a,	0xaa7f, 0xc99a,		0x21, 0
+	.dw 0xaac0, 0xc99a,	0xaaff, 0xc99a,		0x21, 0
+	.dw 0xab40, 0xc99a,	0xab7f, 0xc99a,		0x21, 0
+	.dw 0xabc0, 0xc99a,	0xabff, 0xc99a,		0x21, 0
+	.dw 0xac40, 0xc99a,	0xac7f, 0xc99a,		0x21, 0
+	.dw 0xacc0, 0xc99a,	0xacff, 0xc99a,		0x21, 0
+	.dw 0xad40, 0xc99a,	0xad7f, 0xc99a,		0x21, 0
+	.dw 0xadc0, 0xc99a,	0xadff, 0xc99a,		0x21, 0
+	.dw 0xae40, 0xc99a,	0xae7f, 0xc99a,		0x21, 0
+	.dw 0xaec0, 0xc99a,	0xaeff, 0xc99a,		0x21, 0
+	.dw 0xaf40, 0xc99a,	0xaf7f, 0xc99a,		0x21, 0
+	.dw 0xafc0, 0xc99a,	0xafff, 0xc99a,		0x21, 0
+	.dw 0xb040, 0xc99a,	0xb07f, 0xc99a,		0x21, 0
+	.dw 0xb0c0, 0xc99a,	0xb0ff, 0xc99a,		0x21, 0
+	.dw 0xb140, 0xc99a,	0xb17f, 0xc99a,		0x21, 0
+	.dw 0xb1c0, 0xc99a,	0xb1ff, 0xc99a,		0x21, 0
+	.dw 0xb240, 0xc99a,	0xb27f, 0xc99a,		0x21, 0
+	.dw 0xb2c0, 0xc99a,	0xb2ff, 0xc99a,		0x21, 0
+	.dw 0xb340, 0xc99a,	0xb37f, 0xc99a,		0x21, 0
+	.dw 0xb3c0, 0xc99a,	0xb3ff, 0xc99a,		0x21, 0
+	.dw 0xb440, 0xc99a,	0xb47f, 0xc99a,		0x21, 0
+	.dw 0xb4c0, 0xc99a,	0xb4ff, 0xc99a,		0x21, 0
+	.dw 0xb540, 0xc99a,	0xb57f, 0xc99a,		0x21, 0
+	.dw 0xb5c0, 0xc99a,	0xb5ff, 0xc99a,		0x21, 0
+	.dw 0xb640, 0xc99a,	0xb67f, 0xc99a,		0x21, 0
+	.dw 0xb6c0, 0xc99a,	0xb6ff, 0xc99a,		0x21, 0
+	.dw 0xb740, 0xc99a,	0xb77f, 0xc99a,		0x21, 0
+	.dw 0xb7c0, 0xc99a,	0xb7ff, 0xc99a,		0x21, 0
+	.dw 0xb840, 0xc99a,	0xb87f, 0xc99a,		0x21, 0
+	.dw 0xb8c0, 0xc99a,	0xb8ff, 0xc99a,		0x21, 0
+	.dw 0xb940, 0xc99a,	0xb97f, 0xc99a,		0x21, 0
+	.dw 0xb9c0, 0xc99a,	0xdfff, 0xc99a,		0x21, 0
+	.dw 0xe040, 0xc99a,	0xe07f, 0xc99a,		0x21, 0
+	.dw 0xe0c0, 0xc99a,	0xe0ff, 0xc99a,		0x21, 0
+	.dw 0xe140, 0xc99a,	0xe17f, 0xc99a,		0x21, 0
+	.dw 0xe1c0, 0xc99a,	0xe1ff, 0xc99a,		0x21, 0
+	.dw 0xe240, 0xc99a,	0xe27f, 0xc99a,		0x21, 0
+	.dw 0xe2c0, 0xc99a,	0xe2ff, 0xc99a,		0x21, 0
+	.dw 0xe340, 0xc99a,	0xe37f, 0xc99a,		0x21, 0
+	.dw 0xe3c0, 0xc99a,	0xe3ff, 0xc99a,		0x21, 0
+	.dw 0xe440, 0xc99a,	0xe47f, 0xc99a,		0x21, 0
+	.dw 0xe4c0, 0xc99a,	0xe4ff, 0xc99a,		0x21, 0
+	.dw 0xe540, 0xc99a,	0xe57f, 0xc99a,		0x21, 0
+	.dw 0xe5c0, 0xc99a,	0xe5ff, 0xc99a,		0x21, 0
+	.dw 0xe640, 0xc99a,	0xe67f, 0xc99a,		0x21, 0
+	.dw 0xe6c0, 0xc99a,	0xe6ff, 0xc99a,		0x21, 0
+	.dw 0xe740, 0xc99a,	0xe77f, 0xc99a,		0x21, 0
+	.dw 0xe7c0, 0xc99a,	0xe7ff, 0xc99a,		0x21, 0
+	.dw 0xe840, 0xc99a,	0xe87f, 0xc99a,		0x21, 0
+	.dw 0xe8c0, 0xc99a,	0xe8ff, 0xc99a,		0x21, 0
+	.dw 0xe940, 0xc99a,	0xe97f, 0xc99a,		0x21, 0
+	.dw 0xe9c0, 0xc99a,	0xe9ff, 0xc99a,		0x21, 0
+	.dw 0xea40, 0xc99a,	0xea7f, 0xc99a,		0x21, 0
+	.dw 0xeac0, 0xc99a,	0xeaff, 0xc99a,		0x21, 0
+	.dw 0xeb40, 0xc99a,	0xeb7f, 0xc99a,		0x21, 0
+	.dw 0xebc0, 0xc99a,	0xebff, 0xc99a,		0x21, 0
+	.dw 0xec40, 0xc99a,	0xec7f, 0xc99a,		0x21, 0
+	.dw 0xecc0, 0xc99a,	0xecff, 0xc99a,		0x21, 0
+	.dw 0xed40, 0xc99a,	0xed7f, 0xc99a,		0x21, 0
+	.dw 0xedc0, 0xc99a,	0xedff, 0xc99a,		0x21, 0
+	.dw 0xee40, 0xc99a,	0xee7f, 0xc99a,		0x21, 0
+	.dw 0xeec0, 0xc99a,	0xeeff, 0xc99a,		0x21, 0
+	.dw 0xef40, 0xc99a,	0xef7f, 0xc99a,		0x21, 0
+	.dw 0xefc0, 0xc99a,	0xefff, 0xc99a,		0x21, 0
+	.dw 0xf040, 0xc99a,	0xf07f, 0xc99a,		0x21, 0
+	.dw 0xf0c0, 0xc99a,	0xf0ff, 0xc99a,		0x21, 0
+	.dw 0xf140, 0xc99a,	0xf17f, 0xc99a,		0x21, 0
+	.dw 0xf1c0, 0xc99a,	0xf1ff, 0xc99a,		0x21, 0
+	.dw 0xf240, 0xc99a,	0xf27f, 0xc99a,		0x21, 0
+	.dw 0xf2c0, 0xc99a,	0xf2ff, 0xc99a,		0x21, 0
+	.dw 0xf340, 0xc99a,	0xf37f, 0xc99a,		0x21, 0
+	.dw 0xf3c0, 0xc99a,	0xf3ff, 0xc99a,		0x21, 0
+	.dw 0xf440, 0xc99a,	0xf47f, 0xc99a,		0x21, 0
+	.dw 0xf4c0, 0xc99a,	0xf4ff, 0xc99a,		0x21, 0
+	.dw 0xf540, 0xc99a,	0xf57f, 0xc99a,		0x21, 0
+	.dw 0xf5c0, 0xc99a,	0xf5ff, 0xc99a,		0x21, 0
+	.dw 0xf640, 0xc99a,	0xf67f, 0xc99a,		0x21, 0
+	.dw 0xf6c0, 0xc99a,	0xf6ff, 0xc99a,		0x21, 0
+	.dw 0xf740, 0xc99a,	0xf77f, 0xc99a,		0x21, 0
+	.dw 0xf7c0, 0xc99a,	0xf7ff, 0xc99a,		0x21, 0
+	.dw 0xf840, 0xc99a,	0xf87f, 0xc99a,		0x21, 0
+	.dw 0xf8c0, 0xc99a,	0xf8ff, 0xc99a,		0x21, 0
+	.dw 0xf940, 0xc99a,	0xf97f, 0xc99a,		0x21, 0
+	.dw 0xf9c0, 0xc99a,	0xffff, 0xc99b,		0x21, 0
+	.dw 0x0040, 0xc99c,	0x007f, 0xc99c,		0x21, 0
+	.dw 0x00c0, 0xc99c,	0x00ff, 0xc99c,		0x21, 0
+	.dw 0x0140, 0xc99c,	0x017f, 0xc99c,		0x21, 0
+	.dw 0x01c0, 0xc99c,	0x01ff, 0xc99c,		0x21, 0
+	.dw 0x0240, 0xc99c,	0x027f, 0xc99c,		0x21, 0
+	.dw 0x02c0, 0xc99c,	0x02ff, 0xc99c,		0x21, 0
+	.dw 0x0340, 0xc99c,	0x037f, 0xc99c,		0x21, 0
+	.dw 0x03c0, 0xc99c,	0x03ff, 0xc99c,		0x21, 0
+	.dw 0x0440, 0xc99c,	0x047f, 0xc99c,		0x21, 0
+	.dw 0x04c0, 0xc99c,	0x04ff, 0xc99c,		0x21, 0
+	.dw 0x0540, 0xc99c,	0x057f, 0xc99c,		0x21, 0
+	.dw 0x05c0, 0xc99c,	0x05ff, 0xc99c,		0x21, 0
+	.dw 0x0640, 0xc99c,	0x067f, 0xc99c,		0x21, 0
+	.dw 0x06c0, 0xc99c,	0x06ff, 0xc99c,		0x21, 0
+	.dw 0x0740, 0xc99c,	0x077f, 0xc99c,		0x21, 0
+	.dw 0x07c0, 0xc99c,	0x07ff, 0xc99c,		0x21, 0
+	.dw 0x0840, 0xc99c,	0x087f, 0xc99c,		0x21, 0
+	.dw 0x08c0, 0xc99c,	0x08ff, 0xc99c,		0x21, 0
+	.dw 0x0940, 0xc99c,	0x097f, 0xc99c,		0x21, 0
+	.dw 0x09c0, 0xc99c,	0x09ff, 0xc99c,		0x21, 0
+	.dw 0x0a40, 0xc99c,	0x0a7f, 0xc99c,		0x21, 0
+	.dw 0x0ac0, 0xc99c,	0x0aff, 0xc99c,		0x21, 0
+	.dw 0x0b40, 0xc99c,	0x0b7f, 0xc99c,		0x21, 0
+	.dw 0x0bc0, 0xc99c,	0x0bff, 0xc99c,		0x21, 0
+	.dw 0x0c40, 0xc99c,	0x0c7f, 0xc99c,		0x21, 0
+	.dw 0x0cc0, 0xc99c,	0x0cff, 0xc99c,		0x21, 0
+	.dw 0x0d40, 0xc99c,	0x0d7f, 0xc99c,		0x21, 0
+	.dw 0x0dc0, 0xc99c,	0x0dff, 0xc99c,		0x21, 0
+	.dw 0x0e40, 0xc99c,	0x0e7f, 0xc99c,		0x21, 0
+	.dw 0x0ec0, 0xc99c,	0x0eff, 0xc99c,		0x21, 0
+	.dw 0x0f40, 0xc99c,	0x0f7f, 0xc99c,		0x21, 0
+	.dw 0x0fc0, 0xc99c,	0x0fff, 0xc99c,		0x21, 0
+	.dw 0x1040, 0xc99c,	0x107f, 0xc99c,		0x21, 0
+	.dw 0x10c0, 0xc99c,	0x10ff, 0xc99c,		0x21, 0
+	.dw 0x1140, 0xc99c,	0x117f, 0xc99c,		0x21, 0
+	.dw 0x11c0, 0xc99c,	0x11ff, 0xc99c,		0x21, 0
+	.dw 0x1240, 0xc99c,	0x127f, 0xc99c,		0x21, 0
+	.dw 0x12c0, 0xc99c,	0x12ff, 0xc99c,		0x21, 0
+	.dw 0x1340, 0xc99c,	0x137f, 0xc99c,		0x21, 0
+	.dw 0x13c0, 0xc99c,	0x13ff, 0xc99c,		0x21, 0
+	.dw 0x1440, 0xc99c,	0x147f, 0xc99c,		0x21, 0
+	.dw 0x14c0, 0xc99c,	0x14ff, 0xc99c,		0x21, 0
+	.dw 0x1540, 0xc99c,	0x157f, 0xc99c,		0x21, 0
+	.dw 0x15c0, 0xc99c,	0x15ff, 0xc99c,		0x21, 0
+	.dw 0x1640, 0xc99c,	0x167f, 0xc99c,		0x21, 0
+	.dw 0x16c0, 0xc99c,	0x16ff, 0xc99c,		0x21, 0
+	.dw 0x1740, 0xc99c,	0x177f, 0xc99c,		0x21, 0
+	.dw 0x17c0, 0xc99c,	0x17ff, 0xc99c,		0x21, 0
+	.dw 0x1840, 0xc99c,	0x187f, 0xc99c,		0x21, 0
+	.dw 0x18c0, 0xc99c,	0x18ff, 0xc99c,		0x21, 0
+	.dw 0x1940, 0xc99c,	0x197f, 0xc99c,		0x21, 0
+	.dw 0x19c0, 0xc99c,	0x1fff, 0xc99c,		0x21, 0
+	.dw 0x2040, 0xc99c,	0x207f, 0xc99c,		0x21, 0
+	.dw 0x20c0, 0xc99c,	0x20ff, 0xc99c,		0x21, 0
+	.dw 0x2140, 0xc99c,	0x217f, 0xc99c,		0x21, 0
+	.dw 0x21c0, 0xc99c,	0x21ff, 0xc99c,		0x21, 0
+	.dw 0x2240, 0xc99c,	0x227f, 0xc99c,		0x21, 0
+	.dw 0x22c0, 0xc99c,	0x22ff, 0xc99c,		0x21, 0
+	.dw 0x2340, 0xc99c,	0x237f, 0xc99c,		0x21, 0
+	.dw 0x23c0, 0xc99c,	0x23ff, 0xc99c,		0x21, 0
+	.dw 0x2440, 0xc99c,	0x247f, 0xc99c,		0x21, 0
+	.dw 0x24c0, 0xc99c,	0x24ff, 0xc99c,		0x21, 0
+	.dw 0x2540, 0xc99c,	0x257f, 0xc99c,		0x21, 0
+	.dw 0x25c0, 0xc99c,	0x25ff, 0xc99c,		0x21, 0
+	.dw 0x2640, 0xc99c,	0x267f, 0xc99c,		0x21, 0
+	.dw 0x26c0, 0xc99c,	0x26ff, 0xc99c,		0x21, 0
+	.dw 0x2740, 0xc99c,	0x277f, 0xc99c,		0x21, 0
+	.dw 0x27c0, 0xc99c,	0x27ff, 0xc99c,		0x21, 0
+	.dw 0x2840, 0xc99c,	0x287f, 0xc99c,		0x21, 0
+	.dw 0x28c0, 0xc99c,	0x28ff, 0xc99c,		0x21, 0
+	.dw 0x2940, 0xc99c,	0x297f, 0xc99c,		0x21, 0
+	.dw 0x29c0, 0xc99c,	0x29ff, 0xc99c,		0x21, 0
+	.dw 0x2a40, 0xc99c,	0x2a7f, 0xc99c,		0x21, 0
+	.dw 0x2ac0, 0xc99c,	0x2aff, 0xc99c,		0x21, 0
+	.dw 0x2b40, 0xc99c,	0x2b7f, 0xc99c,		0x21, 0
+	.dw 0x2bc0, 0xc99c,	0x2bff, 0xc99c,		0x21, 0
+	.dw 0x2c40, 0xc99c,	0x2c7f, 0xc99c,		0x21, 0
+	.dw 0x2cc0, 0xc99c,	0x2cff, 0xc99c,		0x21, 0
+	.dw 0x2d40, 0xc99c,	0x2d7f, 0xc99c,		0x21, 0
+	.dw 0x2dc0, 0xc99c,	0x2dff, 0xc99c,		0x21, 0
+	.dw 0x2e40, 0xc99c,	0x2e7f, 0xc99c,		0x21, 0
+	.dw 0x2ec0, 0xc99c,	0x2eff, 0xc99c,		0x21, 0
+	.dw 0x2f40, 0xc99c,	0x2f7f, 0xc99c,		0x21, 0
+	.dw 0x2fc0, 0xc99c,	0x2fff, 0xc99c,		0x21, 0
+	.dw 0x3040, 0xc99c,	0x307f, 0xc99c,		0x21, 0
+	.dw 0x30c0, 0xc99c,	0x30ff, 0xc99c,		0x21, 0
+	.dw 0x3140, 0xc99c,	0x317f, 0xc99c,		0x21, 0
+	.dw 0x31c0, 0xc99c,	0x31ff, 0xc99c,		0x21, 0
+	.dw 0x3240, 0xc99c,	0x327f, 0xc99c,		0x21, 0
+	.dw 0x32c0, 0xc99c,	0x32ff, 0xc99c,		0x21, 0
+	.dw 0x3340, 0xc99c,	0x337f, 0xc99c,		0x21, 0
+	.dw 0x33c0, 0xc99c,	0x33ff, 0xc99c,		0x21, 0
+	.dw 0x3440, 0xc99c,	0x347f, 0xc99c,		0x21, 0
+	.dw 0x34c0, 0xc99c,	0x34ff, 0xc99c,		0x21, 0
+	.dw 0x3540, 0xc99c,	0x357f, 0xc99c,		0x21, 0
+	.dw 0x35c0, 0xc99c,	0x35ff, 0xc99c,		0x21, 0
+	.dw 0x3640, 0xc99c,	0x367f, 0xc99c,		0x21, 0
+	.dw 0x36c0, 0xc99c,	0x36ff, 0xc99c,		0x21, 0
+	.dw 0x3740, 0xc99c,	0x377f, 0xc99c,		0x21, 0
+	.dw 0x37c0, 0xc99c,	0x37ff, 0xc99c,		0x21, 0
+	.dw 0x3840, 0xc99c,	0x387f, 0xc99c,		0x21, 0
+	.dw 0x38c0, 0xc99c,	0x38ff, 0xc99c,		0x21, 0
+	.dw 0x3940, 0xc99c,	0x397f, 0xc99c,		0x21, 0
+	.dw 0x39c0, 0xc99c,	0x3fff, 0xc99c,		0x21, 0
+	.dw 0x4040, 0xc99c,	0x407f, 0xc99c,		0x21, 0
+	.dw 0x40c0, 0xc99c,	0x40ff, 0xc99c,		0x21, 0
+	.dw 0x4140, 0xc99c,	0x417f, 0xc99c,		0x21, 0
+	.dw 0x41c0, 0xc99c,	0x41ff, 0xc99c,		0x21, 0
+	.dw 0x4240, 0xc99c,	0x427f, 0xc99c,		0x21, 0
+	.dw 0x42c0, 0xc99c,	0x42ff, 0xc99c,		0x21, 0
+	.dw 0x4340, 0xc99c,	0x437f, 0xc99c,		0x21, 0
+	.dw 0x43c0, 0xc99c,	0x43ff, 0xc99c,		0x21, 0
+	.dw 0x4440, 0xc99c,	0x447f, 0xc99c,		0x21, 0
+	.dw 0x44c0, 0xc99c,	0x44ff, 0xc99c,		0x21, 0
+	.dw 0x4540, 0xc99c,	0x457f, 0xc99c,		0x21, 0
+	.dw 0x45c0, 0xc99c,	0x45ff, 0xc99c,		0x21, 0
+	.dw 0x4640, 0xc99c,	0x467f, 0xc99c,		0x21, 0
+	.dw 0x46c0, 0xc99c,	0x46ff, 0xc99c,		0x21, 0
+	.dw 0x4740, 0xc99c,	0x477f, 0xc99c,		0x21, 0
+	.dw 0x47c0, 0xc99c,	0x47ff, 0xc99c,		0x21, 0
+	.dw 0x4840, 0xc99c,	0x487f, 0xc99c,		0x21, 0
+	.dw 0x48c0, 0xc99c,	0x48ff, 0xc99c,		0x21, 0
+	.dw 0x4940, 0xc99c,	0x497f, 0xc99c,		0x21, 0
+	.dw 0x49c0, 0xc99c,	0x49ff, 0xc99c,		0x21, 0
+	.dw 0x4a40, 0xc99c,	0x4a7f, 0xc99c,		0x21, 0
+	.dw 0x4ac0, 0xc99c,	0x4aff, 0xc99c,		0x21, 0
+	.dw 0x4b40, 0xc99c,	0x4b7f, 0xc99c,		0x21, 0
+	.dw 0x4bc0, 0xc99c,	0x4bff, 0xc99c,		0x21, 0
+	.dw 0x4c40, 0xc99c,	0x4c7f, 0xc99c,		0x21, 0
+	.dw 0x4cc0, 0xc99c,	0x4cff, 0xc99c,		0x21, 0
+	.dw 0x4d40, 0xc99c,	0x4d7f, 0xc99c,		0x21, 0
+	.dw 0x4dc0, 0xc99c,	0x4dff, 0xc99c,		0x21, 0
+	.dw 0x4e40, 0xc99c,	0x4e7f, 0xc99c,		0x21, 0
+	.dw 0x4ec0, 0xc99c,	0x4eff, 0xc99c,		0x21, 0
+	.dw 0x4f40, 0xc99c,	0x4f7f, 0xc99c,		0x21, 0
+	.dw 0x4fc0, 0xc99c,	0x4fff, 0xc99c,		0x21, 0
+	.dw 0x5040, 0xc99c,	0x507f, 0xc99c,		0x21, 0
+	.dw 0x50c0, 0xc99c,	0x50ff, 0xc99c,		0x21, 0
+	.dw 0x5140, 0xc99c,	0x517f, 0xc99c,		0x21, 0
+	.dw 0x51c0, 0xc99c,	0x51ff, 0xc99c,		0x21, 0
+	.dw 0x5240, 0xc99c,	0x527f, 0xc99c,		0x21, 0
+	.dw 0x52c0, 0xc99c,	0x52ff, 0xc99c,		0x21, 0
+	.dw 0x5340, 0xc99c,	0x537f, 0xc99c,		0x21, 0
+	.dw 0x53c0, 0xc99c,	0x53ff, 0xc99c,		0x21, 0
+	.dw 0x5440, 0xc99c,	0x547f, 0xc99c,		0x21, 0
+	.dw 0x54c0, 0xc99c,	0x54ff, 0xc99c,		0x21, 0
+	.dw 0x5540, 0xc99c,	0x557f, 0xc99c,		0x21, 0
+	.dw 0x55c0, 0xc99c,	0x55ff, 0xc99c,		0x21, 0
+	.dw 0x5640, 0xc99c,	0x567f, 0xc99c,		0x21, 0
+	.dw 0x56c0, 0xc99c,	0x56ff, 0xc99c,		0x21, 0
+	.dw 0x5740, 0xc99c,	0x577f, 0xc99c,		0x21, 0
+	.dw 0x57c0, 0xc99c,	0x57ff, 0xc99c,		0x21, 0
+	.dw 0x5840, 0xc99c,	0x587f, 0xc99c,		0x21, 0
+	.dw 0x58c0, 0xc99c,	0x58ff, 0xc99c,		0x21, 0
+	.dw 0x5940, 0xc99c,	0x597f, 0xc99c,		0x21, 0
+	.dw 0x59c0, 0xc99c,	0x5fff, 0xc99c,		0x21, 0
+	.dw 0x6040, 0xc99c,	0x607f, 0xc99c,		0x21, 0
+	.dw 0x60c0, 0xc99c,	0x60ff, 0xc99c,		0x21, 0
+	.dw 0x6140, 0xc99c,	0x617f, 0xc99c,		0x21, 0
+	.dw 0x61c0, 0xc99c,	0x61ff, 0xc99c,		0x21, 0
+	.dw 0x6240, 0xc99c,	0x627f, 0xc99c,		0x21, 0
+	.dw 0x62c0, 0xc99c,	0x62ff, 0xc99c,		0x21, 0
+	.dw 0x6340, 0xc99c,	0x637f, 0xc99c,		0x21, 0
+	.dw 0x63c0, 0xc99c,	0x63ff, 0xc99c,		0x21, 0
+	.dw 0x6440, 0xc99c,	0x647f, 0xc99c,		0x21, 0
+	.dw 0x64c0, 0xc99c,	0x64ff, 0xc99c,		0x21, 0
+	.dw 0x6540, 0xc99c,	0x657f, 0xc99c,		0x21, 0
+	.dw 0x65c0, 0xc99c,	0x65ff, 0xc99c,		0x21, 0
+	.dw 0x6640, 0xc99c,	0x667f, 0xc99c,		0x21, 0
+	.dw 0x66c0, 0xc99c,	0x66ff, 0xc99c,		0x21, 0
+	.dw 0x6740, 0xc99c,	0x677f, 0xc99c,		0x21, 0
+	.dw 0x67c0, 0xc99c,	0x67ff, 0xc99c,		0x21, 0
+	.dw 0x6840, 0xc99c,	0x687f, 0xc99c,		0x21, 0
+	.dw 0x68c0, 0xc99c,	0x68ff, 0xc99c,		0x21, 0
+	.dw 0x6940, 0xc99c,	0x697f, 0xc99c,		0x21, 0
+	.dw 0x69c0, 0xc99c,	0x69ff, 0xc99c,		0x21, 0
+	.dw 0x6a40, 0xc99c,	0x6a7f, 0xc99c,		0x21, 0
+	.dw 0x6ac0, 0xc99c,	0x6aff, 0xc99c,		0x21, 0
+	.dw 0x6b40, 0xc99c,	0x6b7f, 0xc99c,		0x21, 0
+	.dw 0x6bc0, 0xc99c,	0x6bff, 0xc99c,		0x21, 0
+	.dw 0x6c40, 0xc99c,	0x6c7f, 0xc99c,		0x21, 0
+	.dw 0x6cc0, 0xc99c,	0x6cff, 0xc99c,		0x21, 0
+	.dw 0x6d40, 0xc99c,	0x6d7f, 0xc99c,		0x21, 0
+	.dw 0x6dc0, 0xc99c,	0x6dff, 0xc99c,		0x21, 0
+	.dw 0x6e40, 0xc99c,	0x6e7f, 0xc99c,		0x21, 0
+	.dw 0x6ec0, 0xc99c,	0x6eff, 0xc99c,		0x21, 0
+	.dw 0x6f40, 0xc99c,	0x6f7f, 0xc99c,		0x21, 0
+	.dw 0x6fc0, 0xc99c,	0x6fff, 0xc99c,		0x21, 0
+	.dw 0x7040, 0xc99c,	0x707f, 0xc99c,		0x21, 0
+	.dw 0x70c0, 0xc99c,	0x70ff, 0xc99c,		0x21, 0
+	.dw 0x7140, 0xc99c,	0x717f, 0xc99c,		0x21, 0
+	.dw 0x71c0, 0xc99c,	0x71ff, 0xc99c,		0x21, 0
+	.dw 0x7240, 0xc99c,	0x727f, 0xc99c,		0x21, 0
+	.dw 0x72c0, 0xc99c,	0x72ff, 0xc99c,		0x21, 0
+	.dw 0x7340, 0xc99c,	0x737f, 0xc99c,		0x21, 0
+	.dw 0x73c0, 0xc99c,	0x73ff, 0xc99c,		0x21, 0
+	.dw 0x7440, 0xc99c,	0x747f, 0xc99c,		0x21, 0
+	.dw 0x74c0, 0xc99c,	0x74ff, 0xc99c,		0x21, 0
+	.dw 0x7540, 0xc99c,	0x757f, 0xc99c,		0x21, 0
+	.dw 0x75c0, 0xc99c,	0x75ff, 0xc99c,		0x21, 0
+	.dw 0x7640, 0xc99c,	0x767f, 0xc99c,		0x21, 0
+	.dw 0x76c0, 0xc99c,	0x76ff, 0xc99c,		0x21, 0
+	.dw 0x7740, 0xc99c,	0x777f, 0xc99c,		0x21, 0
+	.dw 0x77c0, 0xc99c,	0x77ff, 0xc99c,		0x21, 0
+	.dw 0x7840, 0xc99c,	0x787f, 0xc99c,		0x21, 0
+	.dw 0x78c0, 0xc99c,	0x78ff, 0xc99c,		0x21, 0
+	.dw 0x7940, 0xc99c,	0x797f, 0xc99c,		0x21, 0
+	.dw 0x79c0, 0xc99c,	0x7fff, 0xc99c,		0x21, 0
+	.dw 0x8040, 0xc99c,	0x807f, 0xc99c,		0x21, 0
+	.dw 0x80c0, 0xc99c,	0x80ff, 0xc99c,		0x21, 0
+	.dw 0x8140, 0xc99c,	0x817f, 0xc99c,		0x21, 0
+	.dw 0x81c0, 0xc99c,	0x81ff, 0xc99c,		0x21, 0
+	.dw 0x8240, 0xc99c,	0x827f, 0xc99c,		0x21, 0
+	.dw 0x82c0, 0xc99c,	0x82ff, 0xc99c,		0x21, 0
+	.dw 0x8340, 0xc99c,	0x837f, 0xc99c,		0x21, 0
+	.dw 0x83c0, 0xc99c,	0x83ff, 0xc99c,		0x21, 0
+	.dw 0x8440, 0xc99c,	0x847f, 0xc99c,		0x21, 0
+	.dw 0x84c0, 0xc99c,	0x84ff, 0xc99c,		0x21, 0
+	.dw 0x8540, 0xc99c,	0x857f, 0xc99c,		0x21, 0
+	.dw 0x85c0, 0xc99c,	0x85ff, 0xc99c,		0x21, 0
+	.dw 0x8640, 0xc99c,	0x867f, 0xc99c,		0x21, 0
+	.dw 0x86c0, 0xc99c,	0x86ff, 0xc99c,		0x21, 0
+	.dw 0x8740, 0xc99c,	0x877f, 0xc99c,		0x21, 0
+	.dw 0x87c0, 0xc99c,	0x87ff, 0xc99c,		0x21, 0
+	.dw 0x8840, 0xc99c,	0x887f, 0xc99c,		0x21, 0
+	.dw 0x88c0, 0xc99c,	0x88ff, 0xc99c,		0x21, 0
+	.dw 0x8940, 0xc99c,	0x897f, 0xc99c,		0x21, 0
+	.dw 0x89c0, 0xc99c,	0x89ff, 0xc99c,		0x21, 0
+	.dw 0x8a40, 0xc99c,	0x8a7f, 0xc99c,		0x21, 0
+	.dw 0x8ac0, 0xc99c,	0x8aff, 0xc99c,		0x21, 0
+	.dw 0x8b40, 0xc99c,	0x8b7f, 0xc99c,		0x21, 0
+	.dw 0x8bc0, 0xc99c,	0x8bff, 0xc99c,		0x21, 0
+	.dw 0x8c40, 0xc99c,	0x8c7f, 0xc99c,		0x21, 0
+	.dw 0x8cc0, 0xc99c,	0x8cff, 0xc99c,		0x21, 0
+	.dw 0x8d40, 0xc99c,	0x8d7f, 0xc99c,		0x21, 0
+	.dw 0x8dc0, 0xc99c,	0x8dff, 0xc99c,		0x21, 0
+	.dw 0x8e40, 0xc99c,	0x8e7f, 0xc99c,		0x21, 0
+	.dw 0x8ec0, 0xc99c,	0x8eff, 0xc99c,		0x21, 0
+	.dw 0x8f40, 0xc99c,	0x8f7f, 0xc99c,		0x21, 0
+	.dw 0x8fc0, 0xc99c,	0x8fff, 0xc99c,		0x21, 0
+	.dw 0x9040, 0xc99c,	0x907f, 0xc99c,		0x21, 0
+	.dw 0x90c0, 0xc99c,	0x90ff, 0xc99c,		0x21, 0
+	.dw 0x9140, 0xc99c,	0x917f, 0xc99c,		0x21, 0
+	.dw 0x91c0, 0xc99c,	0x91ff, 0xc99c,		0x21, 0
+	.dw 0x9240, 0xc99c,	0x927f, 0xc99c,		0x21, 0
+	.dw 0x92c0, 0xc99c,	0x92ff, 0xc99c,		0x21, 0
+	.dw 0x9340, 0xc99c,	0x937f, 0xc99c,		0x21, 0
+	.dw 0x93c0, 0xc99c,	0x93ff, 0xc99c,		0x21, 0
+	.dw 0x9440, 0xc99c,	0x947f, 0xc99c,		0x21, 0
+	.dw 0x94c0, 0xc99c,	0x94ff, 0xc99c,		0x21, 0
+	.dw 0x9540, 0xc99c,	0x957f, 0xc99c,		0x21, 0
+	.dw 0x95c0, 0xc99c,	0x95ff, 0xc99c,		0x21, 0
+	.dw 0x9640, 0xc99c,	0x967f, 0xc99c,		0x21, 0
+	.dw 0x96c0, 0xc99c,	0x96ff, 0xc99c,		0x21, 0
+	.dw 0x9740, 0xc99c,	0x977f, 0xc99c,		0x21, 0
+	.dw 0x97c0, 0xc99c,	0x97ff, 0xc99c,		0x21, 0
+	.dw 0x9840, 0xc99c,	0x987f, 0xc99c,		0x21, 0
+	.dw 0x98c0, 0xc99c,	0x98ff, 0xc99c,		0x21, 0
+	.dw 0x9940, 0xc99c,	0x997f, 0xc99c,		0x21, 0
+	.dw 0x99c0, 0xc99c,	0x9fff, 0xc99c,		0x21, 0
+	.dw 0xa040, 0xc99c,	0xa07f, 0xc99c,		0x21, 0
+	.dw 0xa0c0, 0xc99c,	0xa0ff, 0xc99c,		0x21, 0
+	.dw 0xa140, 0xc99c,	0xa17f, 0xc99c,		0x21, 0
+	.dw 0xa1c0, 0xc99c,	0xa1ff, 0xc99c,		0x21, 0
+	.dw 0xa240, 0xc99c,	0xa27f, 0xc99c,		0x21, 0
+	.dw 0xa2c0, 0xc99c,	0xa2ff, 0xc99c,		0x21, 0
+	.dw 0xa340, 0xc99c,	0xa37f, 0xc99c,		0x21, 0
+	.dw 0xa3c0, 0xc99c,	0xa3ff, 0xc99c,		0x21, 0
+	.dw 0xa440, 0xc99c,	0xa47f, 0xc99c,		0x21, 0
+	.dw 0xa4c0, 0xc99c,	0xa4ff, 0xc99c,		0x21, 0
+	.dw 0xa540, 0xc99c,	0xa57f, 0xc99c,		0x21, 0
+	.dw 0xa5c0, 0xc99c,	0xa5ff, 0xc99c,		0x21, 0
+	.dw 0xa640, 0xc99c,	0xa67f, 0xc99c,		0x21, 0
+	.dw 0xa6c0, 0xc99c,	0xa6ff, 0xc99c,		0x21, 0
+	.dw 0xa740, 0xc99c,	0xa77f, 0xc99c,		0x21, 0
+	.dw 0xa7c0, 0xc99c,	0xa7ff, 0xc99c,		0x21, 0
+	.dw 0xa840, 0xc99c,	0xa87f, 0xc99c,		0x21, 0
+	.dw 0xa8c0, 0xc99c,	0xa8ff, 0xc99c,		0x21, 0
+	.dw 0xa940, 0xc99c,	0xa97f, 0xc99c,		0x21, 0
+	.dw 0xa9c0, 0xc99c,	0xa9ff, 0xc99c,		0x21, 0
+	.dw 0xaa40, 0xc99c,	0xaa7f, 0xc99c,		0x21, 0
+	.dw 0xaac0, 0xc99c,	0xaaff, 0xc99c,		0x21, 0
+	.dw 0xab40, 0xc99c,	0xab7f, 0xc99c,		0x21, 0
+	.dw 0xabc0, 0xc99c,	0xabff, 0xc99c,		0x21, 0
+	.dw 0xac40, 0xc99c,	0xac7f, 0xc99c,		0x21, 0
+	.dw 0xacc0, 0xc99c,	0xacff, 0xc99c,		0x21, 0
+	.dw 0xad40, 0xc99c,	0xad7f, 0xc99c,		0x21, 0
+	.dw 0xadc0, 0xc99c,	0xadff, 0xc99c,		0x21, 0
+	.dw 0xae40, 0xc99c,	0xae7f, 0xc99c,		0x21, 0
+	.dw 0xaec0, 0xc99c,	0xaeff, 0xc99c,		0x21, 0
+	.dw 0xaf40, 0xc99c,	0xaf7f, 0xc99c,		0x21, 0
+	.dw 0xafc0, 0xc99c,	0xafff, 0xc99c,		0x21, 0
+	.dw 0xb040, 0xc99c,	0xb07f, 0xc99c,		0x21, 0
+	.dw 0xb0c0, 0xc99c,	0xb0ff, 0xc99c,		0x21, 0
+	.dw 0xb140, 0xc99c,	0xb17f, 0xc99c,		0x21, 0
+	.dw 0xb1c0, 0xc99c,	0xb1ff, 0xc99c,		0x21, 0
+	.dw 0xb240, 0xc99c,	0xb27f, 0xc99c,		0x21, 0
+	.dw 0xb2c0, 0xc99c,	0xb2ff, 0xc99c,		0x21, 0
+	.dw 0xb340, 0xc99c,	0xb37f, 0xc99c,		0x21, 0
+	.dw 0xb3c0, 0xc99c,	0xb3ff, 0xc99c,		0x21, 0
+	.dw 0xb440, 0xc99c,	0xb47f, 0xc99c,		0x21, 0
+	.dw 0xb4c0, 0xc99c,	0xb4ff, 0xc99c,		0x21, 0
+	.dw 0xb540, 0xc99c,	0xb57f, 0xc99c,		0x21, 0
+	.dw 0xb5c0, 0xc99c,	0xb5ff, 0xc99c,		0x21, 0
+	.dw 0xb640, 0xc99c,	0xb67f, 0xc99c,		0x21, 0
+	.dw 0xb6c0, 0xc99c,	0xb6ff, 0xc99c,		0x21, 0
+	.dw 0xb740, 0xc99c,	0xb77f, 0xc99c,		0x21, 0
+	.dw 0xb7c0, 0xc99c,	0xb7ff, 0xc99c,		0x21, 0
+	.dw 0xb840, 0xc99c,	0xb87f, 0xc99c,		0x21, 0
+	.dw 0xb8c0, 0xc99c,	0xb8ff, 0xc99c,		0x21, 0
+	.dw 0xb940, 0xc99c,	0xb97f, 0xc99c,		0x21, 0
+	.dw 0xb9c0, 0xc99c,	0xbfff, 0xc99c,		0x21, 0
+	.dw 0xc040, 0xc99c,	0xc07f, 0xc99c,		0x21, 0
+	.dw 0xc0c0, 0xc99c,	0xc0ff, 0xc99c,		0x21, 0
+	.dw 0xc140, 0xc99c,	0xc17f, 0xc99c,		0x21, 0
+	.dw 0xc1c0, 0xc99c,	0xc1ff, 0xc99c,		0x21, 0
+	.dw 0xc240, 0xc99c,	0xc27f, 0xc99c,		0x21, 0
+	.dw 0xc2c0, 0xc99c,	0xc2ff, 0xc99c,		0x21, 0
+	.dw 0xc340, 0xc99c,	0xc37f, 0xc99c,		0x21, 0
+	.dw 0xc3c0, 0xc99c,	0xc3ff, 0xc99c,		0x21, 0
+	.dw 0xc440, 0xc99c,	0xc47f, 0xc99c,		0x21, 0
+	.dw 0xc4c0, 0xc99c,	0xc4ff, 0xc99c,		0x21, 0
+	.dw 0xc540, 0xc99c,	0xc57f, 0xc99c,		0x21, 0
+	.dw 0xc5c0, 0xc99c,	0xc5ff, 0xc99c,		0x21, 0
+	.dw 0xc640, 0xc99c,	0xc67f, 0xc99c,		0x21, 0
+	.dw 0xc6c0, 0xc99c,	0xc6ff, 0xc99c,		0x21, 0
+	.dw 0xc740, 0xc99c,	0xc77f, 0xc99c,		0x21, 0
+	.dw 0xc7c0, 0xc99c,	0xc7ff, 0xc99c,		0x21, 0
+	.dw 0xc840, 0xc99c,	0xc87f, 0xc99c,		0x21, 0
+	.dw 0xc8c0, 0xc99c,	0xc8ff, 0xc99c,		0x21, 0
+	.dw 0xc940, 0xc99c,	0xc97f, 0xc99c,		0x21, 0
+	.dw 0xc9c0, 0xc99c,	0xc9ff, 0xc99c,		0x21, 0
+	.dw 0xca40, 0xc99c,	0xca7f, 0xc99c,		0x21, 0
+	.dw 0xcac0, 0xc99c,	0xcaff, 0xc99c,		0x21, 0
+	.dw 0xcb40, 0xc99c,	0xcb7f, 0xc99c,		0x21, 0
+	.dw 0xcbc0, 0xc99c,	0xcbff, 0xc99c,		0x21, 0
+	.dw 0xcc40, 0xc99c,	0xcc7f, 0xc99c,		0x21, 0
+	.dw 0xccc0, 0xc99c,	0xccff, 0xc99c,		0x21, 0
+	.dw 0xcd40, 0xc99c,	0xcd7f, 0xc99c,		0x21, 0
+	.dw 0xcdc0, 0xc99c,	0xcdff, 0xc99c,		0x21, 0
+	.dw 0xce40, 0xc99c,	0xce7f, 0xc99c,		0x21, 0
+	.dw 0xcec0, 0xc99c,	0xceff, 0xc99c,		0x21, 0
+	.dw 0xcf40, 0xc99c,	0xcf7f, 0xc99c,		0x21, 0
+	.dw 0xcfc0, 0xc99c,	0xcfff, 0xc99c,		0x21, 0
+	.dw 0xd040, 0xc99c,	0xd07f, 0xc99c,		0x21, 0
+	.dw 0xd0c0, 0xc99c,	0xd0ff, 0xc99c,		0x21, 0
+	.dw 0xd140, 0xc99c,	0xd17f, 0xc99c,		0x21, 0
+	.dw 0xd1c0, 0xc99c,	0xd1ff, 0xc99c,		0x21, 0
+	.dw 0xd240, 0xc99c,	0xd27f, 0xc99c,		0x21, 0
+	.dw 0xd2c0, 0xc99c,	0xd2ff, 0xc99c,		0x21, 0
+	.dw 0xd340, 0xc99c,	0xd37f, 0xc99c,		0x21, 0
+	.dw 0xd3c0, 0xc99c,	0xd3ff, 0xc99c,		0x21, 0
+	.dw 0xd440, 0xc99c,	0xd47f, 0xc99c,		0x21, 0
+	.dw 0xd4c0, 0xc99c,	0xd4ff, 0xc99c,		0x21, 0
+	.dw 0xd540, 0xc99c,	0xd57f, 0xc99c,		0x21, 0
+	.dw 0xd5c0, 0xc99c,	0xd5ff, 0xc99c,		0x21, 0
+	.dw 0xd640, 0xc99c,	0xd67f, 0xc99c,		0x21, 0
+	.dw 0xd6c0, 0xc99c,	0xd6ff, 0xc99c,		0x21, 0
+	.dw 0xd740, 0xc99c,	0xd77f, 0xc99c,		0x21, 0
+	.dw 0xd7c0, 0xc99c,	0xd7ff, 0xc99c,		0x21, 0
+	.dw 0xd840, 0xc99c,	0xd87f, 0xc99c,		0x21, 0
+	.dw 0xd8c0, 0xc99c,	0xd8ff, 0xc99c,		0x21, 0
+	.dw 0xd940, 0xc99c,	0xd97f, 0xc99c,		0x21, 0
+	.dw 0xd9c0, 0xc99c,	0xdfff, 0xc99c,		0x21, 0
+	.dw 0xe040, 0xc99c,	0xe07f, 0xc99c,		0x21, 0
+	.dw 0xe0c0, 0xc99c,	0xe0ff, 0xc99c,		0x21, 0
+	.dw 0xe140, 0xc99c,	0xe17f, 0xc99c,		0x21, 0
+	.dw 0xe1c0, 0xc99c,	0xe1ff, 0xc99c,		0x21, 0
+	.dw 0xe240, 0xc99c,	0xe27f, 0xc99c,		0x21, 0
+	.dw 0xe2c0, 0xc99c,	0xe2ff, 0xc99c,		0x21, 0
+	.dw 0xe340, 0xc99c,	0xe37f, 0xc99c,		0x21, 0
+	.dw 0xe3c0, 0xc99c,	0xe3ff, 0xc99c,		0x21, 0
+	.dw 0xe440, 0xc99c,	0xe47f, 0xc99c,		0x21, 0
+	.dw 0xe4c0, 0xc99c,	0xe4ff, 0xc99c,		0x21, 0
+	.dw 0xe540, 0xc99c,	0xe57f, 0xc99c,		0x21, 0
+	.dw 0xe5c0, 0xc99c,	0xe5ff, 0xc99c,		0x21, 0
+	.dw 0xe640, 0xc99c,	0xe67f, 0xc99c,		0x21, 0
+	.dw 0xe6c0, 0xc99c,	0xe6ff, 0xc99c,		0x21, 0
+	.dw 0xe740, 0xc99c,	0xe77f, 0xc99c,		0x21, 0
+	.dw 0xe7c0, 0xc99c,	0xe7ff, 0xc99c,		0x21, 0
+	.dw 0xe840, 0xc99c,	0xe87f, 0xc99c,		0x21, 0
+	.dw 0xe8c0, 0xc99c,	0xe8ff, 0xc99c,		0x21, 0
+	.dw 0xe940, 0xc99c,	0xe97f, 0xc99c,		0x21, 0
+	.dw 0xe9c0, 0xc99c,	0xe9ff, 0xc99c,		0x21, 0
+	.dw 0xea40, 0xc99c,	0xea7f, 0xc99c,		0x21, 0
+	.dw 0xeac0, 0xc99c,	0xeaff, 0xc99c,		0x21, 0
+	.dw 0xeb40, 0xc99c,	0xeb7f, 0xc99c,		0x21, 0
+	.dw 0xebc0, 0xc99c,	0xebff, 0xc99c,		0x21, 0
+	.dw 0xec40, 0xc99c,	0xec7f, 0xc99c,		0x21, 0
+	.dw 0xecc0, 0xc99c,	0xecff, 0xc99c,		0x21, 0
+	.dw 0xed40, 0xc99c,	0xed7f, 0xc99c,		0x21, 0
+	.dw 0xedc0, 0xc99c,	0xedff, 0xc99c,		0x21, 0
+	.dw 0xee40, 0xc99c,	0xee7f, 0xc99c,		0x21, 0
+	.dw 0xeec0, 0xc99c,	0xeeff, 0xc99c,		0x21, 0
+	.dw 0xef40, 0xc99c,	0xef7f, 0xc99c,		0x21, 0
+	.dw 0xefc0, 0xc99c,	0xefff, 0xc99c,		0x21, 0
+	.dw 0xf040, 0xc99c,	0xf07f, 0xc99c,		0x21, 0
+	.dw 0xf0c0, 0xc99c,	0xf0ff, 0xc99c,		0x21, 0
+	.dw 0xf140, 0xc99c,	0xf17f, 0xc99c,		0x21, 0
+	.dw 0xf1c0, 0xc99c,	0xf1ff, 0xc99c,		0x21, 0
+	.dw 0xf240, 0xc99c,	0xf27f, 0xc99c,		0x21, 0
+	.dw 0xf2c0, 0xc99c,	0xf2ff, 0xc99c,		0x21, 0
+	.dw 0xf340, 0xc99c,	0xf37f, 0xc99c,		0x21, 0
+	.dw 0xf3c0, 0xc99c,	0xf3ff, 0xc99c,		0x21, 0
+	.dw 0xf440, 0xc99c,	0xf47f, 0xc99c,		0x21, 0
+	.dw 0xf4c0, 0xc99c,	0xf4ff, 0xc99c,		0x21, 0
+	.dw 0xf540, 0xc99c,	0xf57f, 0xc99c,		0x21, 0
+	.dw 0xf5c0, 0xc99c,	0xf5ff, 0xc99c,		0x21, 0
+	.dw 0xf640, 0xc99c,	0xf67f, 0xc99c,		0x21, 0
+	.dw 0xf6c0, 0xc99c,	0xf6ff, 0xc99c,		0x21, 0
+	.dw 0xf740, 0xc99c,	0xf77f, 0xc99c,		0x21, 0
+	.dw 0xf7c0, 0xc99c,	0xf7ff, 0xc99c,		0x21, 0
+	.dw 0xf840, 0xc99c,	0xf87f, 0xc99c,		0x21, 0
+	.dw 0xf8c0, 0xc99c,	0xf8ff, 0xc99c,		0x21, 0
+	.dw 0xf940, 0xc99c,	0xf97f, 0xc99c,		0x21, 0
+	.dw 0xf9c0, 0xc99c,	0xffff, 0xc99c,		0x21, 0
+	.dw 0x0040, 0xc99d,	0x007f, 0xc99d,		0x21, 0
+	.dw 0x00c0, 0xc99d,	0x00ff, 0xc99d,		0x21, 0
+	.dw 0x0140, 0xc99d,	0x017f, 0xc99d,		0x21, 0
+	.dw 0x01c0, 0xc99d,	0x01ff, 0xc99d,		0x21, 0
+	.dw 0x0240, 0xc99d,	0x027f, 0xc99d,		0x21, 0
+	.dw 0x02c0, 0xc99d,	0x02ff, 0xc99d,		0x21, 0
+	.dw 0x0340, 0xc99d,	0x037f, 0xc99d,		0x21, 0
+	.dw 0x03c0, 0xc99d,	0x03ff, 0xc99d,		0x21, 0
+	.dw 0x0440, 0xc99d,	0x047f, 0xc99d,		0x21, 0
+	.dw 0x04c0, 0xc99d,	0x04ff, 0xc99d,		0x21, 0
+	.dw 0x0540, 0xc99d,	0x057f, 0xc99d,		0x21, 0
+	.dw 0x05c0, 0xc99d,	0x05ff, 0xc99d,		0x21, 0
+	.dw 0x0640, 0xc99d,	0x067f, 0xc99d,		0x21, 0
+	.dw 0x06c0, 0xc99d,	0x06ff, 0xc99d,		0x21, 0
+	.dw 0x0740, 0xc99d,	0x077f, 0xc99d,		0x21, 0
+	.dw 0x07c0, 0xc99d,	0x07ff, 0xc99d,		0x21, 0
+	.dw 0x0840, 0xc99d,	0x087f, 0xc99d,		0x21, 0
+	.dw 0x08c0, 0xc99d,	0x08ff, 0xc99d,		0x21, 0
+	.dw 0x0940, 0xc99d,	0x097f, 0xc99d,		0x21, 0
+	.dw 0x09c0, 0xc99d,	0x09ff, 0xc99d,		0x21, 0
+	.dw 0x0a40, 0xc99d,	0x0a7f, 0xc99d,		0x21, 0
+	.dw 0x0ac0, 0xc99d,	0x0aff, 0xc99d,		0x21, 0
+	.dw 0x0b40, 0xc99d,	0x0b7f, 0xc99d,		0x21, 0
+	.dw 0x0bc0, 0xc99d,	0x0bff, 0xc99d,		0x21, 0
+	.dw 0x0c40, 0xc99d,	0x0c7f, 0xc99d,		0x21, 0
+	.dw 0x0cc0, 0xc99d,	0x0cff, 0xc99d,		0x21, 0
+	.dw 0x0d40, 0xc99d,	0x0d7f, 0xc99d,		0x21, 0
+	.dw 0x0dc0, 0xc99d,	0x0dff, 0xc99d,		0x21, 0
+	.dw 0x0e40, 0xc99d,	0x0e7f, 0xc99d,		0x21, 0
+	.dw 0x0ec0, 0xc99d,	0x0eff, 0xc99d,		0x21, 0
+	.dw 0x0f40, 0xc99d,	0x0f7f, 0xc99d,		0x21, 0
+	.dw 0x0fc0, 0xc99d,	0x0fff, 0xc99d,		0x21, 0
+	.dw 0x1040, 0xc99d,	0x107f, 0xc99d,		0x21, 0
+	.dw 0x10c0, 0xc99d,	0x10ff, 0xc99d,		0x21, 0
+	.dw 0x1140, 0xc99d,	0x117f, 0xc99d,		0x21, 0
+	.dw 0x11c0, 0xc99d,	0x11ff, 0xc99d,		0x21, 0
+	.dw 0x1240, 0xc99d,	0x127f, 0xc99d,		0x21, 0
+	.dw 0x12c0, 0xc99d,	0x12ff, 0xc99d,		0x21, 0
+	.dw 0x1340, 0xc99d,	0x137f, 0xc99d,		0x21, 0
+	.dw 0x13c0, 0xc99d,	0x13ff, 0xc99d,		0x21, 0
+	.dw 0x1440, 0xc99d,	0x147f, 0xc99d,		0x21, 0
+	.dw 0x14c0, 0xc99d,	0x14ff, 0xc99d,		0x21, 0
+	.dw 0x1540, 0xc99d,	0x157f, 0xc99d,		0x21, 0
+	.dw 0x15c0, 0xc99d,	0x15ff, 0xc99d,		0x21, 0
+	.dw 0x1640, 0xc99d,	0x167f, 0xc99d,		0x21, 0
+	.dw 0x16c0, 0xc99d,	0x16ff, 0xc99d,		0x21, 0
+	.dw 0x1740, 0xc99d,	0x177f, 0xc99d,		0x21, 0
+	.dw 0x17c0, 0xc99d,	0x17ff, 0xc99d,		0x21, 0
+	.dw 0x1840, 0xc99d,	0x187f, 0xc99d,		0x21, 0
+	.dw 0x18c0, 0xc99d,	0x18ff, 0xc99d,		0x21, 0
+	.dw 0x1940, 0xc99d,	0x197f, 0xc99d,		0x21, 0
+	.dw 0x19c0, 0xc99d,	0x1fff, 0xc99d,		0x21, 0
+	.dw 0x2040, 0xc99d,	0x207f, 0xc99d,		0x21, 0
+	.dw 0x20c0, 0xc99d,	0x20ff, 0xc99d,		0x21, 0
+	.dw 0x2140, 0xc99d,	0x217f, 0xc99d,		0x21, 0
+	.dw 0x21c0, 0xc99d,	0x21ff, 0xc99d,		0x21, 0
+	.dw 0x2240, 0xc99d,	0x227f, 0xc99d,		0x21, 0
+	.dw 0x22c0, 0xc99d,	0x22ff, 0xc99d,		0x21, 0
+	.dw 0x2340, 0xc99d,	0x237f, 0xc99d,		0x21, 0
+	.dw 0x23c0, 0xc99d,	0x23ff, 0xc99d,		0x21, 0
+	.dw 0x2440, 0xc99d,	0x247f, 0xc99d,		0x21, 0
+	.dw 0x24c0, 0xc99d,	0x24ff, 0xc99d,		0x21, 0
+	.dw 0x2540, 0xc99d,	0x257f, 0xc99d,		0x21, 0
+	.dw 0x25c0, 0xc99d,	0x25ff, 0xc99d,		0x21, 0
+	.dw 0x2640, 0xc99d,	0x267f, 0xc99d,		0x21, 0
+	.dw 0x26c0, 0xc99d,	0x26ff, 0xc99d,		0x21, 0
+	.dw 0x2740, 0xc99d,	0x277f, 0xc99d,		0x21, 0
+	.dw 0x27c0, 0xc99d,	0x27ff, 0xc99d,		0x21, 0
+	.dw 0x2840, 0xc99d,	0x287f, 0xc99d,		0x21, 0
+	.dw 0x28c0, 0xc99d,	0x28ff, 0xc99d,		0x21, 0
+	.dw 0x2940, 0xc99d,	0x297f, 0xc99d,		0x21, 0
+	.dw 0x29c0, 0xc99d,	0x29ff, 0xc99d,		0x21, 0
+	.dw 0x2a40, 0xc99d,	0x2a7f, 0xc99d,		0x21, 0
+	.dw 0x2ac0, 0xc99d,	0x2aff, 0xc99d,		0x21, 0
+	.dw 0x2b40, 0xc99d,	0x2b7f, 0xc99d,		0x21, 0
+	.dw 0x2bc0, 0xc99d,	0x2bff, 0xc99d,		0x21, 0
+	.dw 0x2c40, 0xc99d,	0x2c7f, 0xc99d,		0x21, 0
+	.dw 0x2cc0, 0xc99d,	0x2cff, 0xc99d,		0x21, 0
+	.dw 0x2d40, 0xc99d,	0x2d7f, 0xc99d,		0x21, 0
+	.dw 0x2dc0, 0xc99d,	0x2dff, 0xc99d,		0x21, 0
+	.dw 0x2e40, 0xc99d,	0x2e7f, 0xc99d,		0x21, 0
+	.dw 0x2ec0, 0xc99d,	0x2eff, 0xc99d,		0x21, 0
+	.dw 0x2f40, 0xc99d,	0x2f7f, 0xc99d,		0x21, 0
+	.dw 0x2fc0, 0xc99d,	0x2fff, 0xc99d,		0x21, 0
+	.dw 0x3040, 0xc99d,	0x307f, 0xc99d,		0x21, 0
+	.dw 0x30c0, 0xc99d,	0x30ff, 0xc99d,		0x21, 0
+	.dw 0x3140, 0xc99d,	0x317f, 0xc99d,		0x21, 0
+	.dw 0x31c0, 0xc99d,	0x31ff, 0xc99d,		0x21, 0
+	.dw 0x3240, 0xc99d,	0x327f, 0xc99d,		0x21, 0
+	.dw 0x32c0, 0xc99d,	0x32ff, 0xc99d,		0x21, 0
+	.dw 0x3340, 0xc99d,	0x337f, 0xc99d,		0x21, 0
+	.dw 0x33c0, 0xc99d,	0x33ff, 0xc99d,		0x21, 0
+	.dw 0x3440, 0xc99d,	0x347f, 0xc99d,		0x21, 0
+	.dw 0x34c0, 0xc99d,	0x34ff, 0xc99d,		0x21, 0
+	.dw 0x3540, 0xc99d,	0x357f, 0xc99d,		0x21, 0
+	.dw 0x35c0, 0xc99d,	0x35ff, 0xc99d,		0x21, 0
+	.dw 0x3640, 0xc99d,	0x367f, 0xc99d,		0x21, 0
+	.dw 0x36c0, 0xc99d,	0x36ff, 0xc99d,		0x21, 0
+	.dw 0x3740, 0xc99d,	0x377f, 0xc99d,		0x21, 0
+	.dw 0x37c0, 0xc99d,	0x37ff, 0xc99d,		0x21, 0
+	.dw 0x3840, 0xc99d,	0x387f, 0xc99d,		0x21, 0
+	.dw 0x38c0, 0xc99d,	0x38ff, 0xc99d,		0x21, 0
+	.dw 0x3940, 0xc99d,	0x397f, 0xc99d,		0x21, 0
+	.dw 0x39c0, 0xc99d,	0x3fff, 0xc99d,		0x21, 0
+	.dw 0x4040, 0xc99d,	0x407f, 0xc99d,		0x21, 0
+	.dw 0x40c0, 0xc99d,	0x40ff, 0xc99d,		0x21, 0
+	.dw 0x4140, 0xc99d,	0x417f, 0xc99d,		0x21, 0
+	.dw 0x41c0, 0xc99d,	0x41ff, 0xc99d,		0x21, 0
+	.dw 0x4240, 0xc99d,	0x427f, 0xc99d,		0x21, 0
+	.dw 0x42c0, 0xc99d,	0x42ff, 0xc99d,		0x21, 0
+	.dw 0x4340, 0xc99d,	0x437f, 0xc99d,		0x21, 0
+	.dw 0x43c0, 0xc99d,	0x43ff, 0xc99d,		0x21, 0
+	.dw 0x4440, 0xc99d,	0x447f, 0xc99d,		0x21, 0
+	.dw 0x44c0, 0xc99d,	0x44ff, 0xc99d,		0x21, 0
+	.dw 0x4540, 0xc99d,	0x457f, 0xc99d,		0x21, 0
+	.dw 0x45c0, 0xc99d,	0x45ff, 0xc99d,		0x21, 0
+	.dw 0x4640, 0xc99d,	0x467f, 0xc99d,		0x21, 0
+	.dw 0x46c0, 0xc99d,	0x46ff, 0xc99d,		0x21, 0
+	.dw 0x4740, 0xc99d,	0x477f, 0xc99d,		0x21, 0
+	.dw 0x47c0, 0xc99d,	0x47ff, 0xc99d,		0x21, 0
+	.dw 0x4840, 0xc99d,	0x487f, 0xc99d,		0x21, 0
+	.dw 0x48c0, 0xc99d,	0x48ff, 0xc99d,		0x21, 0
+	.dw 0x4940, 0xc99d,	0x497f, 0xc99d,		0x21, 0
+	.dw 0x49c0, 0xc99d,	0x49ff, 0xc99d,		0x21, 0
+	.dw 0x4a40, 0xc99d,	0x4a7f, 0xc99d,		0x21, 0
+	.dw 0x4ac0, 0xc99d,	0x4aff, 0xc99d,		0x21, 0
+	.dw 0x4b40, 0xc99d,	0x4b7f, 0xc99d,		0x21, 0
+	.dw 0x4bc0, 0xc99d,	0x4bff, 0xc99d,		0x21, 0
+	.dw 0x4c40, 0xc99d,	0x4c7f, 0xc99d,		0x21, 0
+	.dw 0x4cc0, 0xc99d,	0x4cff, 0xc99d,		0x21, 0
+	.dw 0x4d40, 0xc99d,	0x4d7f, 0xc99d,		0x21, 0
+	.dw 0x4dc0, 0xc99d,	0x4dff, 0xc99d,		0x21, 0
+	.dw 0x4e40, 0xc99d,	0x4e7f, 0xc99d,		0x21, 0
+	.dw 0x4ec0, 0xc99d,	0x4eff, 0xc99d,		0x21, 0
+	.dw 0x4f40, 0xc99d,	0x4f7f, 0xc99d,		0x21, 0
+	.dw 0x4fc0, 0xc99d,	0x4fff, 0xc99d,		0x21, 0
+	.dw 0x5040, 0xc99d,	0x507f, 0xc99d,		0x21, 0
+	.dw 0x50c0, 0xc99d,	0x50ff, 0xc99d,		0x21, 0
+	.dw 0x5140, 0xc99d,	0x517f, 0xc99d,		0x21, 0
+	.dw 0x51c0, 0xc99d,	0x51ff, 0xc99d,		0x21, 0
+	.dw 0x5240, 0xc99d,	0x527f, 0xc99d,		0x21, 0
+	.dw 0x52c0, 0xc99d,	0x52ff, 0xc99d,		0x21, 0
+	.dw 0x5340, 0xc99d,	0x537f, 0xc99d,		0x21, 0
+	.dw 0x53c0, 0xc99d,	0x53ff, 0xc99d,		0x21, 0
+	.dw 0x5440, 0xc99d,	0x547f, 0xc99d,		0x21, 0
+	.dw 0x54c0, 0xc99d,	0x54ff, 0xc99d,		0x21, 0
+	.dw 0x5540, 0xc99d,	0x557f, 0xc99d,		0x21, 0
+	.dw 0x55c0, 0xc99d,	0x55ff, 0xc99d,		0x21, 0
+	.dw 0x5640, 0xc99d,	0x567f, 0xc99d,		0x21, 0
+	.dw 0x56c0, 0xc99d,	0x56ff, 0xc99d,		0x21, 0
+	.dw 0x5740, 0xc99d,	0x577f, 0xc99d,		0x21, 0
+	.dw 0x57c0, 0xc99d,	0x57ff, 0xc99d,		0x21, 0
+	.dw 0x5840, 0xc99d,	0x587f, 0xc99d,		0x21, 0
+	.dw 0x58c0, 0xc99d,	0x58ff, 0xc99d,		0x21, 0
+	.dw 0x5940, 0xc99d,	0x597f, 0xc99d,		0x21, 0
+	.dw 0x59c0, 0xc99d,	0x5fff, 0xc99d,		0x21, 0
+	.dw 0x6040, 0xc99d,	0x607f, 0xc99d,		0x21, 0
+	.dw 0x60c0, 0xc99d,	0x60ff, 0xc99d,		0x21, 0
+	.dw 0x6140, 0xc99d,	0x617f, 0xc99d,		0x21, 0
+	.dw 0x61c0, 0xc99d,	0x61ff, 0xc99d,		0x21, 0
+	.dw 0x6240, 0xc99d,	0x627f, 0xc99d,		0x21, 0
+	.dw 0x62c0, 0xc99d,	0x62ff, 0xc99d,		0x21, 0
+	.dw 0x6340, 0xc99d,	0x637f, 0xc99d,		0x21, 0
+	.dw 0x63c0, 0xc99d,	0x63ff, 0xc99d,		0x21, 0
+	.dw 0x6440, 0xc99d,	0x647f, 0xc99d,		0x21, 0
+	.dw 0x64c0, 0xc99d,	0x64ff, 0xc99d,		0x21, 0
+	.dw 0x6540, 0xc99d,	0x657f, 0xc99d,		0x21, 0
+	.dw 0x65c0, 0xc99d,	0x65ff, 0xc99d,		0x21, 0
+	.dw 0x6640, 0xc99d,	0x667f, 0xc99d,		0x21, 0
+	.dw 0x66c0, 0xc99d,	0x66ff, 0xc99d,		0x21, 0
+	.dw 0x6740, 0xc99d,	0x677f, 0xc99d,		0x21, 0
+	.dw 0x67c0, 0xc99d,	0x67ff, 0xc99d,		0x21, 0
+	.dw 0x6840, 0xc99d,	0x687f, 0xc99d,		0x21, 0
+	.dw 0x68c0, 0xc99d,	0x68ff, 0xc99d,		0x21, 0
+	.dw 0x6940, 0xc99d,	0x697f, 0xc99d,		0x21, 0
+	.dw 0x69c0, 0xc99d,	0x69ff, 0xc99d,		0x21, 0
+	.dw 0x6a40, 0xc99d,	0x6a7f, 0xc99d,		0x21, 0
+	.dw 0x6ac0, 0xc99d,	0x6aff, 0xc99d,		0x21, 0
+	.dw 0x6b40, 0xc99d,	0x6b7f, 0xc99d,		0x21, 0
+	.dw 0x6bc0, 0xc99d,	0x6bff, 0xc99d,		0x21, 0
+	.dw 0x6c40, 0xc99d,	0x6c7f, 0xc99d,		0x21, 0
+	.dw 0x6cc0, 0xc99d,	0x6cff, 0xc99d,		0x21, 0
+	.dw 0x6d40, 0xc99d,	0x6d7f, 0xc99d,		0x21, 0
+	.dw 0x6dc0, 0xc99d,	0x6dff, 0xc99d,		0x21, 0
+	.dw 0x6e40, 0xc99d,	0x6e7f, 0xc99d,		0x21, 0
+	.dw 0x6ec0, 0xc99d,	0x6eff, 0xc99d,		0x21, 0
+	.dw 0x6f40, 0xc99d,	0x6f7f, 0xc99d,		0x21, 0
+	.dw 0x6fc0, 0xc99d,	0x6fff, 0xc99d,		0x21, 0
+	.dw 0x7040, 0xc99d,	0x707f, 0xc99d,		0x21, 0
+	.dw 0x70c0, 0xc99d,	0x70ff, 0xc99d,		0x21, 0
+	.dw 0x7140, 0xc99d,	0x717f, 0xc99d,		0x21, 0
+	.dw 0x71c0, 0xc99d,	0x71ff, 0xc99d,		0x21, 0
+	.dw 0x7240, 0xc99d,	0x727f, 0xc99d,		0x21, 0
+	.dw 0x72c0, 0xc99d,	0x72ff, 0xc99d,		0x21, 0
+	.dw 0x7340, 0xc99d,	0x737f, 0xc99d,		0x21, 0
+	.dw 0x73c0, 0xc99d,	0x73ff, 0xc99d,		0x21, 0
+	.dw 0x7440, 0xc99d,	0x747f, 0xc99d,		0x21, 0
+	.dw 0x74c0, 0xc99d,	0x74ff, 0xc99d,		0x21, 0
+	.dw 0x7540, 0xc99d,	0x757f, 0xc99d,		0x21, 0
+	.dw 0x75c0, 0xc99d,	0x75ff, 0xc99d,		0x21, 0
+	.dw 0x7640, 0xc99d,	0x767f, 0xc99d,		0x21, 0
+	.dw 0x76c0, 0xc99d,	0x76ff, 0xc99d,		0x21, 0
+	.dw 0x7740, 0xc99d,	0x777f, 0xc99d,		0x21, 0
+	.dw 0x77c0, 0xc99d,	0x77ff, 0xc99d,		0x21, 0
+	.dw 0x7840, 0xc99d,	0x787f, 0xc99d,		0x21, 0
+	.dw 0x78c0, 0xc99d,	0x78ff, 0xc99d,		0x21, 0
+	.dw 0x7940, 0xc99d,	0x797f, 0xc99d,		0x21, 0
+	.dw 0x79c0, 0xc99d,	0x7fff, 0xc99d,		0x21, 0
+	.dw 0x8040, 0xc99d,	0x807f, 0xc99d,		0x21, 0
+	.dw 0x80c0, 0xc99d,	0x80ff, 0xc99d,		0x21, 0
+	.dw 0x8140, 0xc99d,	0x817f, 0xc99d,		0x21, 0
+	.dw 0x81c0, 0xc99d,	0x81ff, 0xc99d,		0x21, 0
+	.dw 0x8240, 0xc99d,	0x827f, 0xc99d,		0x21, 0
+	.dw 0x82c0, 0xc99d,	0x82ff, 0xc99d,		0x21, 0
+	.dw 0x8340, 0xc99d,	0x837f, 0xc99d,		0x21, 0
+	.dw 0x83c0, 0xc99d,	0x83ff, 0xc99d,		0x21, 0
+	.dw 0x8440, 0xc99d,	0x847f, 0xc99d,		0x21, 0
+	.dw 0x84c0, 0xc99d,	0x84ff, 0xc99d,		0x21, 0
+	.dw 0x8540, 0xc99d,	0x857f, 0xc99d,		0x21, 0
+	.dw 0x85c0, 0xc99d,	0x85ff, 0xc99d,		0x21, 0
+	.dw 0x8640, 0xc99d,	0x867f, 0xc99d,		0x21, 0
+	.dw 0x86c0, 0xc99d,	0x86ff, 0xc99d,		0x21, 0
+	.dw 0x8740, 0xc99d,	0x877f, 0xc99d,		0x21, 0
+	.dw 0x87c0, 0xc99d,	0x87ff, 0xc99d,		0x21, 0
+	.dw 0x8840, 0xc99d,	0x887f, 0xc99d,		0x21, 0
+	.dw 0x88c0, 0xc99d,	0x88ff, 0xc99d,		0x21, 0
+	.dw 0x8940, 0xc99d,	0x897f, 0xc99d,		0x21, 0
+	.dw 0x89c0, 0xc99d,	0x89ff, 0xc99d,		0x21, 0
+	.dw 0x8a40, 0xc99d,	0x8a7f, 0xc99d,		0x21, 0
+	.dw 0x8ac0, 0xc99d,	0x8aff, 0xc99d,		0x21, 0
+	.dw 0x8b40, 0xc99d,	0x8b7f, 0xc99d,		0x21, 0
+	.dw 0x8bc0, 0xc99d,	0x8bff, 0xc99d,		0x21, 0
+	.dw 0x8c40, 0xc99d,	0x8c7f, 0xc99d,		0x21, 0
+	.dw 0x8cc0, 0xc99d,	0x8cff, 0xc99d,		0x21, 0
+	.dw 0x8d40, 0xc99d,	0x8d7f, 0xc99d,		0x21, 0
+	.dw 0x8dc0, 0xc99d,	0x8dff, 0xc99d,		0x21, 0
+	.dw 0x8e40, 0xc99d,	0x8e7f, 0xc99d,		0x21, 0
+	.dw 0x8ec0, 0xc99d,	0x8eff, 0xc99d,		0x21, 0
+	.dw 0x8f40, 0xc99d,	0x8f7f, 0xc99d,		0x21, 0
+	.dw 0x8fc0, 0xc99d,	0x8fff, 0xc99d,		0x21, 0
+	.dw 0x9040, 0xc99d,	0x907f, 0xc99d,		0x21, 0
+	.dw 0x90c0, 0xc99d,	0x90ff, 0xc99d,		0x21, 0
+	.dw 0x9140, 0xc99d,	0x917f, 0xc99d,		0x21, 0
+	.dw 0x91c0, 0xc99d,	0x91ff, 0xc99d,		0x21, 0
+	.dw 0x9240, 0xc99d,	0x927f, 0xc99d,		0x21, 0
+	.dw 0x92c0, 0xc99d,	0x92ff, 0xc99d,		0x21, 0
+	.dw 0x9340, 0xc99d,	0x937f, 0xc99d,		0x21, 0
+	.dw 0x93c0, 0xc99d,	0x93ff, 0xc99d,		0x21, 0
+	.dw 0x9440, 0xc99d,	0x947f, 0xc99d,		0x21, 0
+	.dw 0x94c0, 0xc99d,	0x94ff, 0xc99d,		0x21, 0
+	.dw 0x9540, 0xc99d,	0x957f, 0xc99d,		0x21, 0
+	.dw 0x95c0, 0xc99d,	0x95ff, 0xc99d,		0x21, 0
+	.dw 0x9640, 0xc99d,	0x967f, 0xc99d,		0x21, 0
+	.dw 0x96c0, 0xc99d,	0x96ff, 0xc99d,		0x21, 0
+	.dw 0x9740, 0xc99d,	0x977f, 0xc99d,		0x21, 0
+	.dw 0x97c0, 0xc99d,	0x97ff, 0xc99d,		0x21, 0
+	.dw 0x9840, 0xc99d,	0x987f, 0xc99d,		0x21, 0
+	.dw 0x98c0, 0xc99d,	0x98ff, 0xc99d,		0x21, 0
+	.dw 0x9940, 0xc99d,	0x997f, 0xc99d,		0x21, 0
+	.dw 0x99c0, 0xc99d,	0x9fff, 0xc99d,		0x21, 0
+	.dw 0xa040, 0xc99d,	0xa07f, 0xc99d,		0x21, 0
+	.dw 0xa0c0, 0xc99d,	0xa0ff, 0xc99d,		0x21, 0
+	.dw 0xa140, 0xc99d,	0xa17f, 0xc99d,		0x21, 0
+	.dw 0xa1c0, 0xc99d,	0xa1ff, 0xc99d,		0x21, 0
+	.dw 0xa240, 0xc99d,	0xa27f, 0xc99d,		0x21, 0
+	.dw 0xa2c0, 0xc99d,	0xa2ff, 0xc99d,		0x21, 0
+	.dw 0xa340, 0xc99d,	0xa37f, 0xc99d,		0x21, 0
+	.dw 0xa3c0, 0xc99d,	0xa3ff, 0xc99d,		0x21, 0
+	.dw 0xa440, 0xc99d,	0xa47f, 0xc99d,		0x21, 0
+	.dw 0xa4c0, 0xc99d,	0xa4ff, 0xc99d,		0x21, 0
+	.dw 0xa540, 0xc99d,	0xa57f, 0xc99d,		0x21, 0
+	.dw 0xa5c0, 0xc99d,	0xa5ff, 0xc99d,		0x21, 0
+	.dw 0xa640, 0xc99d,	0xa67f, 0xc99d,		0x21, 0
+	.dw 0xa6c0, 0xc99d,	0xa6ff, 0xc99d,		0x21, 0
+	.dw 0xa740, 0xc99d,	0xa77f, 0xc99d,		0x21, 0
+	.dw 0xa7c0, 0xc99d,	0xa7ff, 0xc99d,		0x21, 0
+	.dw 0xa840, 0xc99d,	0xa87f, 0xc99d,		0x21, 0
+	.dw 0xa8c0, 0xc99d,	0xa8ff, 0xc99d,		0x21, 0
+	.dw 0xa940, 0xc99d,	0xa97f, 0xc99d,		0x21, 0
+	.dw 0xa9c0, 0xc99d,	0xa9ff, 0xc99d,		0x21, 0
+	.dw 0xaa40, 0xc99d,	0xaa7f, 0xc99d,		0x21, 0
+	.dw 0xaac0, 0xc99d,	0xaaff, 0xc99d,		0x21, 0
+	.dw 0xab40, 0xc99d,	0xab7f, 0xc99d,		0x21, 0
+	.dw 0xabc0, 0xc99d,	0xabff, 0xc99d,		0x21, 0
+	.dw 0xac40, 0xc99d,	0xac7f, 0xc99d,		0x21, 0
+	.dw 0xacc0, 0xc99d,	0xacff, 0xc99d,		0x21, 0
+	.dw 0xad40, 0xc99d,	0xad7f, 0xc99d,		0x21, 0
+	.dw 0xadc0, 0xc99d,	0xadff, 0xc99d,		0x21, 0
+	.dw 0xae40, 0xc99d,	0xae7f, 0xc99d,		0x21, 0
+	.dw 0xaec0, 0xc99d,	0xaeff, 0xc99d,		0x21, 0
+	.dw 0xaf40, 0xc99d,	0xaf7f, 0xc99d,		0x21, 0
+	.dw 0xafc0, 0xc99d,	0xafff, 0xc99d,		0x21, 0
+	.dw 0xb040, 0xc99d,	0xb07f, 0xc99d,		0x21, 0
+	.dw 0xb0c0, 0xc99d,	0xb0ff, 0xc99d,		0x21, 0
+	.dw 0xb140, 0xc99d,	0xb17f, 0xc99d,		0x21, 0
+	.dw 0xb1c0, 0xc99d,	0xb1ff, 0xc99d,		0x21, 0
+	.dw 0xb240, 0xc99d,	0xb27f, 0xc99d,		0x21, 0
+	.dw 0xb2c0, 0xc99d,	0xb2ff, 0xc99d,		0x21, 0
+	.dw 0xb340, 0xc99d,	0xb37f, 0xc99d,		0x21, 0
+	.dw 0xb3c0, 0xc99d,	0xb3ff, 0xc99d,		0x21, 0
+	.dw 0xb440, 0xc99d,	0xb47f, 0xc99d,		0x21, 0
+	.dw 0xb4c0, 0xc99d,	0xb4ff, 0xc99d,		0x21, 0
+	.dw 0xb540, 0xc99d,	0xb57f, 0xc99d,		0x21, 0
+	.dw 0xb5c0, 0xc99d,	0xb5ff, 0xc99d,		0x21, 0
+	.dw 0xb640, 0xc99d,	0xb67f, 0xc99d,		0x21, 0
+	.dw 0xb6c0, 0xc99d,	0xb6ff, 0xc99d,		0x21, 0
+	.dw 0xb740, 0xc99d,	0xb77f, 0xc99d,		0x21, 0
+	.dw 0xb7c0, 0xc99d,	0xb7ff, 0xc99d,		0x21, 0
+	.dw 0xb840, 0xc99d,	0xb87f, 0xc99d,		0x21, 0
+	.dw 0xb8c0, 0xc99d,	0xb8ff, 0xc99d,		0x21, 0
+	.dw 0xb940, 0xc99d,	0xb97f, 0xc99d,		0x21, 0
+	.dw 0xb9c0, 0xc99d,	0xbfff, 0xc99d,		0x21, 0
+	.dw 0xc040, 0xc99d,	0xc07f, 0xc99d,		0x21, 0
+	.dw 0xc0c0, 0xc99d,	0xc0ff, 0xc99d,		0x21, 0
+	.dw 0xc140, 0xc99d,	0xc17f, 0xc99d,		0x21, 0
+	.dw 0xc1c0, 0xc99d,	0xc1ff, 0xc99d,		0x21, 0
+	.dw 0xc240, 0xc99d,	0xc27f, 0xc99d,		0x21, 0
+	.dw 0xc2c0, 0xc99d,	0xc2ff, 0xc99d,		0x21, 0
+	.dw 0xc340, 0xc99d,	0xc37f, 0xc99d,		0x21, 0
+	.dw 0xc3c0, 0xc99d,	0xc3ff, 0xc99d,		0x21, 0
+	.dw 0xc440, 0xc99d,	0xc47f, 0xc99d,		0x21, 0
+	.dw 0xc4c0, 0xc99d,	0xc4ff, 0xc99d,		0x21, 0
+	.dw 0xc540, 0xc99d,	0xc57f, 0xc99d,		0x21, 0
+	.dw 0xc5c0, 0xc99d,	0xc5ff, 0xc99d,		0x21, 0
+	.dw 0xc640, 0xc99d,	0xc67f, 0xc99d,		0x21, 0
+	.dw 0xc6c0, 0xc99d,	0xc6ff, 0xc99d,		0x21, 0
+	.dw 0xc740, 0xc99d,	0xc77f, 0xc99d,		0x21, 0
+	.dw 0xc7c0, 0xc99d,	0xc7ff, 0xc99d,		0x21, 0
+	.dw 0xc840, 0xc99d,	0xc87f, 0xc99d,		0x21, 0
+	.dw 0xc8c0, 0xc99d,	0xc8ff, 0xc99d,		0x21, 0
+	.dw 0xc940, 0xc99d,	0xc97f, 0xc99d,		0x21, 0
+	.dw 0xc9c0, 0xc99d,	0xc9ff, 0xc99d,		0x21, 0
+	.dw 0xca40, 0xc99d,	0xca7f, 0xc99d,		0x21, 0
+	.dw 0xcac0, 0xc99d,	0xcaff, 0xc99d,		0x21, 0
+	.dw 0xcb40, 0xc99d,	0xcb7f, 0xc99d,		0x21, 0
+	.dw 0xcbc0, 0xc99d,	0xcbff, 0xc99d,		0x21, 0
+	.dw 0xcc40, 0xc99d,	0xcc7f, 0xc99d,		0x21, 0
+	.dw 0xccc0, 0xc99d,	0xccff, 0xc99d,		0x21, 0
+	.dw 0xcd40, 0xc99d,	0xcd7f, 0xc99d,		0x21, 0
+	.dw 0xcdc0, 0xc99d,	0xcdff, 0xc99d,		0x21, 0
+	.dw 0xce40, 0xc99d,	0xce7f, 0xc99d,		0x21, 0
+	.dw 0xcec0, 0xc99d,	0xceff, 0xc99d,		0x21, 0
+	.dw 0xcf40, 0xc99d,	0xcf7f, 0xc99d,		0x21, 0
+	.dw 0xcfc0, 0xc99d,	0xcfff, 0xc99d,		0x21, 0
+	.dw 0xd040, 0xc99d,	0xd07f, 0xc99d,		0x21, 0
+	.dw 0xd0c0, 0xc99d,	0xd0ff, 0xc99d,		0x21, 0
+	.dw 0xd140, 0xc99d,	0xd17f, 0xc99d,		0x21, 0
+	.dw 0xd1c0, 0xc99d,	0xd1ff, 0xc99d,		0x21, 0
+	.dw 0xd240, 0xc99d,	0xd27f, 0xc99d,		0x21, 0
+	.dw 0xd2c0, 0xc99d,	0xd2ff, 0xc99d,		0x21, 0
+	.dw 0xd340, 0xc99d,	0xd37f, 0xc99d,		0x21, 0
+	.dw 0xd3c0, 0xc99d,	0xd3ff, 0xc99d,		0x21, 0
+	.dw 0xd440, 0xc99d,	0xd47f, 0xc99d,		0x21, 0
+	.dw 0xd4c0, 0xc99d,	0xd4ff, 0xc99d,		0x21, 0
+	.dw 0xd540, 0xc99d,	0xd57f, 0xc99d,		0x21, 0
+	.dw 0xd5c0, 0xc99d,	0xd5ff, 0xc99d,		0x21, 0
+	.dw 0xd640, 0xc99d,	0xd67f, 0xc99d,		0x21, 0
+	.dw 0xd6c0, 0xc99d,	0xd6ff, 0xc99d,		0x21, 0
+	.dw 0xd740, 0xc99d,	0xd77f, 0xc99d,		0x21, 0
+	.dw 0xd7c0, 0xc99d,	0xd7ff, 0xc99d,		0x21, 0
+	.dw 0xd840, 0xc99d,	0xd87f, 0xc99d,		0x21, 0
+	.dw 0xd8c0, 0xc99d,	0xd8ff, 0xc99d,		0x21, 0
+	.dw 0xd940, 0xc99d,	0xd97f, 0xc99d,		0x21, 0
+	.dw 0xd9c0, 0xc99d,	0xdfff, 0xc99d,		0x21, 0
+	.dw 0xe040, 0xc99d,	0xe07f, 0xc99d,		0x21, 0
+	.dw 0xe0c0, 0xc99d,	0xe0ff, 0xc99d,		0x21, 0
+	.dw 0xe140, 0xc99d,	0xe17f, 0xc99d,		0x21, 0
+	.dw 0xe1c0, 0xc99d,	0xe1ff, 0xc99d,		0x21, 0
+	.dw 0xe240, 0xc99d,	0xe27f, 0xc99d,		0x21, 0
+	.dw 0xe2c0, 0xc99d,	0xe2ff, 0xc99d,		0x21, 0
+	.dw 0xe340, 0xc99d,	0xe37f, 0xc99d,		0x21, 0
+	.dw 0xe3c0, 0xc99d,	0xe3ff, 0xc99d,		0x21, 0
+	.dw 0xe440, 0xc99d,	0xe47f, 0xc99d,		0x21, 0
+	.dw 0xe4c0, 0xc99d,	0xe4ff, 0xc99d,		0x21, 0
+	.dw 0xe540, 0xc99d,	0xe57f, 0xc99d,		0x21, 0
+	.dw 0xe5c0, 0xc99d,	0xe5ff, 0xc99d,		0x21, 0
+	.dw 0xe640, 0xc99d,	0xe67f, 0xc99d,		0x21, 0
+	.dw 0xe6c0, 0xc99d,	0xe6ff, 0xc99d,		0x21, 0
+	.dw 0xe740, 0xc99d,	0xe77f, 0xc99d,		0x21, 0
+	.dw 0xe7c0, 0xc99d,	0xe7ff, 0xc99d,		0x21, 0
+	.dw 0xe840, 0xc99d,	0xe87f, 0xc99d,		0x21, 0
+	.dw 0xe8c0, 0xc99d,	0xe8ff, 0xc99d,		0x21, 0
+	.dw 0xe940, 0xc99d,	0xe97f, 0xc99d,		0x21, 0
+	.dw 0xe9c0, 0xc99d,	0xe9ff, 0xc99d,		0x21, 0
+	.dw 0xea40, 0xc99d,	0xea7f, 0xc99d,		0x21, 0
+	.dw 0xeac0, 0xc99d,	0xeaff, 0xc99d,		0x21, 0
+	.dw 0xeb40, 0xc99d,	0xeb7f, 0xc99d,		0x21, 0
+	.dw 0xebc0, 0xc99d,	0xebff, 0xc99d,		0x21, 0
+	.dw 0xec40, 0xc99d,	0xec7f, 0xc99d,		0x21, 0
+	.dw 0xecc0, 0xc99d,	0xecff, 0xc99d,		0x21, 0
+	.dw 0xed40, 0xc99d,	0xed7f, 0xc99d,		0x21, 0
+	.dw 0xedc0, 0xc99d,	0xedff, 0xc99d,		0x21, 0
+	.dw 0xee40, 0xc99d,	0xee7f, 0xc99d,		0x21, 0
+	.dw 0xeec0, 0xc99d,	0xeeff, 0xc99d,		0x21, 0
+	.dw 0xef40, 0xc99d,	0xef7f, 0xc99d,		0x21, 0
+	.dw 0xefc0, 0xc99d,	0xefff, 0xc99d,		0x21, 0
+	.dw 0xf040, 0xc99d,	0xf07f, 0xc99d,		0x21, 0
+	.dw 0xf0c0, 0xc99d,	0xf0ff, 0xc99d,		0x21, 0
+	.dw 0xf140, 0xc99d,	0xf17f, 0xc99d,		0x21, 0
+	.dw 0xf1c0, 0xc99d,	0xf1ff, 0xc99d,		0x21, 0
+	.dw 0xf240, 0xc99d,	0xf27f, 0xc99d,		0x21, 0
+	.dw 0xf2c0, 0xc99d,	0xf2ff, 0xc99d,		0x21, 0
+	.dw 0xf340, 0xc99d,	0xf37f, 0xc99d,		0x21, 0
+	.dw 0xf3c0, 0xc99d,	0xf3ff, 0xc99d,		0x21, 0
+	.dw 0xf440, 0xc99d,	0xf47f, 0xc99d,		0x21, 0
+	.dw 0xf4c0, 0xc99d,	0xf4ff, 0xc99d,		0x21, 0
+	.dw 0xf540, 0xc99d,	0xf57f, 0xc99d,		0x21, 0
+	.dw 0xf5c0, 0xc99d,	0xf5ff, 0xc99d,		0x21, 0
+	.dw 0xf640, 0xc99d,	0xf67f, 0xc99d,		0x21, 0
+	.dw 0xf6c0, 0xc99d,	0xf6ff, 0xc99d,		0x21, 0
+	.dw 0xf740, 0xc99d,	0xf77f, 0xc99d,		0x21, 0
+	.dw 0xf7c0, 0xc99d,	0xf7ff, 0xc99d,		0x21, 0
+	.dw 0xf840, 0xc99d,	0xf87f, 0xc99d,		0x21, 0
+	.dw 0xf8c0, 0xc99d,	0xf8ff, 0xc99d,		0x21, 0
+	.dw 0xf940, 0xc99d,	0xf97f, 0xc99d,		0x21, 0
+	.dw 0xf9c0, 0xc99d,	0xffff, 0xc99d,		0x21, 0
+	.dw 0x0040, 0xc99e,	0x007f, 0xc99e,		0x21, 0
+	.dw 0x00c0, 0xc99e,	0x00ff, 0xc99e,		0x21, 0
+	.dw 0x0140, 0xc99e,	0x017f, 0xc99e,		0x21, 0
+	.dw 0x01c0, 0xc99e,	0x01ff, 0xc99e,		0x21, 0
+	.dw 0x0240, 0xc99e,	0x027f, 0xc99e,		0x21, 0
+	.dw 0x02c0, 0xc99e,	0x02ff, 0xc99e,		0x21, 0
+	.dw 0x0340, 0xc99e,	0x037f, 0xc99e,		0x21, 0
+	.dw 0x03c0, 0xc99e,	0x03ff, 0xc99e,		0x21, 0
+	.dw 0x0440, 0xc99e,	0x047f, 0xc99e,		0x21, 0
+	.dw 0x04c0, 0xc99e,	0x04ff, 0xc99e,		0x21, 0
+	.dw 0x0540, 0xc99e,	0x057f, 0xc99e,		0x21, 0
+	.dw 0x05c0, 0xc99e,	0x05ff, 0xc99e,		0x21, 0
+	.dw 0x0640, 0xc99e,	0x067f, 0xc99e,		0x21, 0
+	.dw 0x06c0, 0xc99e,	0x06ff, 0xc99e,		0x21, 0
+	.dw 0x0740, 0xc99e,	0x077f, 0xc99e,		0x21, 0
+	.dw 0x07c0, 0xc99e,	0x07ff, 0xc99e,		0x21, 0
+	.dw 0x0840, 0xc99e,	0x087f, 0xc99e,		0x21, 0
+	.dw 0x08c0, 0xc99e,	0x08ff, 0xc99e,		0x21, 0
+	.dw 0x0940, 0xc99e,	0x097f, 0xc99e,		0x21, 0
+	.dw 0x09c0, 0xc99e,	0x09ff, 0xc99e,		0x21, 0
+	.dw 0x0a40, 0xc99e,	0x0a7f, 0xc99e,		0x21, 0
+	.dw 0x0ac0, 0xc99e,	0x0aff, 0xc99e,		0x21, 0
+	.dw 0x0b40, 0xc99e,	0x0b7f, 0xc99e,		0x21, 0
+	.dw 0x0bc0, 0xc99e,	0x0bff, 0xc99e,		0x21, 0
+	.dw 0x0c40, 0xc99e,	0x0c7f, 0xc99e,		0x21, 0
+	.dw 0x0cc0, 0xc99e,	0x0cff, 0xc99e,		0x21, 0
+	.dw 0x0d40, 0xc99e,	0x0d7f, 0xc99e,		0x21, 0
+	.dw 0x0dc0, 0xc99e,	0x0dff, 0xc99e,		0x21, 0
+	.dw 0x0e40, 0xc99e,	0x0e7f, 0xc99e,		0x21, 0
+	.dw 0x0ec0, 0xc99e,	0x0eff, 0xc99e,		0x21, 0
+	.dw 0x0f40, 0xc99e,	0x0f7f, 0xc99e,		0x21, 0
+	.dw 0x0fc0, 0xc99e,	0x0fff, 0xc99e,		0x21, 0
+	.dw 0x1040, 0xc99e,	0x107f, 0xc99e,		0x21, 0
+	.dw 0x10c0, 0xc99e,	0x10ff, 0xc99e,		0x21, 0
+	.dw 0x1140, 0xc99e,	0x117f, 0xc99e,		0x21, 0
+	.dw 0x11c0, 0xc99e,	0x11ff, 0xc99e,		0x21, 0
+	.dw 0x1240, 0xc99e,	0x127f, 0xc99e,		0x21, 0
+	.dw 0x12c0, 0xc99e,	0x12ff, 0xc99e,		0x21, 0
+	.dw 0x1340, 0xc99e,	0x137f, 0xc99e,		0x21, 0
+	.dw 0x13c0, 0xc99e,	0x13ff, 0xc99e,		0x21, 0
+	.dw 0x1440, 0xc99e,	0x147f, 0xc99e,		0x21, 0
+	.dw 0x14c0, 0xc99e,	0x14ff, 0xc99e,		0x21, 0
+	.dw 0x1540, 0xc99e,	0x157f, 0xc99e,		0x21, 0
+	.dw 0x15c0, 0xc99e,	0x15ff, 0xc99e,		0x21, 0
+	.dw 0x1640, 0xc99e,	0x167f, 0xc99e,		0x21, 0
+	.dw 0x16c0, 0xc99e,	0x16ff, 0xc99e,		0x21, 0
+	.dw 0x1740, 0xc99e,	0x177f, 0xc99e,		0x21, 0
+	.dw 0x17c0, 0xc99e,	0x17ff, 0xc99e,		0x21, 0
+	.dw 0x1840, 0xc99e,	0x187f, 0xc99e,		0x21, 0
+	.dw 0x18c0, 0xc99e,	0x18ff, 0xc99e,		0x21, 0
+	.dw 0x1940, 0xc99e,	0x197f, 0xc99e,		0x21, 0
+	.dw 0x19c0, 0xc99e,	0x1fff, 0xc99e,		0x21, 0
+	.dw 0x2040, 0xc99e,	0x207f, 0xc99e,		0x21, 0
+	.dw 0x20c0, 0xc99e,	0x20ff, 0xc99e,		0x21, 0
+	.dw 0x2140, 0xc99e,	0x217f, 0xc99e,		0x21, 0
+	.dw 0x21c0, 0xc99e,	0x21ff, 0xc99e,		0x21, 0
+	.dw 0x2240, 0xc99e,	0x227f, 0xc99e,		0x21, 0
+	.dw 0x22c0, 0xc99e,	0x22ff, 0xc99e,		0x21, 0
+	.dw 0x2340, 0xc99e,	0x237f, 0xc99e,		0x21, 0
+	.dw 0x23c0, 0xc99e,	0x23ff, 0xc99e,		0x21, 0
+	.dw 0x2440, 0xc99e,	0x247f, 0xc99e,		0x21, 0
+	.dw 0x24c0, 0xc99e,	0x24ff, 0xc99e,		0x21, 0
+	.dw 0x2540, 0xc99e,	0x257f, 0xc99e,		0x21, 0
+	.dw 0x25c0, 0xc99e,	0x25ff, 0xc99e,		0x21, 0
+	.dw 0x2640, 0xc99e,	0x267f, 0xc99e,		0x21, 0
+	.dw 0x26c0, 0xc99e,	0x26ff, 0xc99e,		0x21, 0
+	.dw 0x2740, 0xc99e,	0x277f, 0xc99e,		0x21, 0
+	.dw 0x27c0, 0xc99e,	0x27ff, 0xc99e,		0x21, 0
+	.dw 0x2840, 0xc99e,	0x287f, 0xc99e,		0x21, 0
+	.dw 0x28c0, 0xc99e,	0x28ff, 0xc99e,		0x21, 0
+	.dw 0x2940, 0xc99e,	0x297f, 0xc99e,		0x21, 0
+	.dw 0x29c0, 0xc99e,	0x29ff, 0xc99e,		0x21, 0
+	.dw 0x2a40, 0xc99e,	0x2a7f, 0xc99e,		0x21, 0
+	.dw 0x2ac0, 0xc99e,	0x2aff, 0xc99e,		0x21, 0
+	.dw 0x2b40, 0xc99e,	0x2b7f, 0xc99e,		0x21, 0
+	.dw 0x2bc0, 0xc99e,	0x2bff, 0xc99e,		0x21, 0
+	.dw 0x2c40, 0xc99e,	0x2c7f, 0xc99e,		0x21, 0
+	.dw 0x2cc0, 0xc99e,	0x2cff, 0xc99e,		0x21, 0
+	.dw 0x2d40, 0xc99e,	0x2d7f, 0xc99e,		0x21, 0
+	.dw 0x2dc0, 0xc99e,	0x2dff, 0xc99e,		0x21, 0
+	.dw 0x2e40, 0xc99e,	0x2e7f, 0xc99e,		0x21, 0
+	.dw 0x2ec0, 0xc99e,	0x2eff, 0xc99e,		0x21, 0
+	.dw 0x2f40, 0xc99e,	0x2f7f, 0xc99e,		0x21, 0
+	.dw 0x2fc0, 0xc99e,	0x2fff, 0xc99e,		0x21, 0
+	.dw 0x3040, 0xc99e,	0x307f, 0xc99e,		0x21, 0
+	.dw 0x30c0, 0xc99e,	0x30ff, 0xc99e,		0x21, 0
+	.dw 0x3140, 0xc99e,	0x317f, 0xc99e,		0x21, 0
+	.dw 0x31c0, 0xc99e,	0x31ff, 0xc99e,		0x21, 0
+	.dw 0x3240, 0xc99e,	0x327f, 0xc99e,		0x21, 0
+	.dw 0x32c0, 0xc99e,	0x32ff, 0xc99e,		0x21, 0
+	.dw 0x3340, 0xc99e,	0x337f, 0xc99e,		0x21, 0
+	.dw 0x33c0, 0xc99e,	0x33ff, 0xc99e,		0x21, 0
+	.dw 0x3440, 0xc99e,	0x347f, 0xc99e,		0x21, 0
+	.dw 0x34c0, 0xc99e,	0x34ff, 0xc99e,		0x21, 0
+	.dw 0x3540, 0xc99e,	0x357f, 0xc99e,		0x21, 0
+	.dw 0x35c0, 0xc99e,	0x35ff, 0xc99e,		0x21, 0
+	.dw 0x3640, 0xc99e,	0x367f, 0xc99e,		0x21, 0
+	.dw 0x36c0, 0xc99e,	0x36ff, 0xc99e,		0x21, 0
+	.dw 0x3740, 0xc99e,	0x377f, 0xc99e,		0x21, 0
+	.dw 0x37c0, 0xc99e,	0x37ff, 0xc99e,		0x21, 0
+	.dw 0x3840, 0xc99e,	0x387f, 0xc99e,		0x21, 0
+	.dw 0x38c0, 0xc99e,	0x38ff, 0xc99e,		0x21, 0
+	.dw 0x3940, 0xc99e,	0x397f, 0xc99e,		0x21, 0
+	.dw 0x39c0, 0xc99e,	0x3fff, 0xc99e,		0x21, 0
+	.dw 0x4040, 0xc99e,	0x407f, 0xc99e,		0x21, 0
+	.dw 0x40c0, 0xc99e,	0x40ff, 0xc99e,		0x21, 0
+	.dw 0x4140, 0xc99e,	0x417f, 0xc99e,		0x21, 0
+	.dw 0x41c0, 0xc99e,	0x41ff, 0xc99e,		0x21, 0
+	.dw 0x4240, 0xc99e,	0x427f, 0xc99e,		0x21, 0
+	.dw 0x42c0, 0xc99e,	0x42ff, 0xc99e,		0x21, 0
+	.dw 0x4340, 0xc99e,	0x437f, 0xc99e,		0x21, 0
+	.dw 0x43c0, 0xc99e,	0x43ff, 0xc99e,		0x21, 0
+	.dw 0x4440, 0xc99e,	0x447f, 0xc99e,		0x21, 0
+	.dw 0x44c0, 0xc99e,	0x44ff, 0xc99e,		0x21, 0
+	.dw 0x4540, 0xc99e,	0x457f, 0xc99e,		0x21, 0
+	.dw 0x45c0, 0xc99e,	0x45ff, 0xc99e,		0x21, 0
+	.dw 0x4640, 0xc99e,	0x467f, 0xc99e,		0x21, 0
+	.dw 0x46c0, 0xc99e,	0x46ff, 0xc99e,		0x21, 0
+	.dw 0x4740, 0xc99e,	0x477f, 0xc99e,		0x21, 0
+	.dw 0x47c0, 0xc99e,	0x47ff, 0xc99e,		0x21, 0
+	.dw 0x4840, 0xc99e,	0x487f, 0xc99e,		0x21, 0
+	.dw 0x48c0, 0xc99e,	0x48ff, 0xc99e,		0x21, 0
+	.dw 0x4940, 0xc99e,	0x497f, 0xc99e,		0x21, 0
+	.dw 0x49c0, 0xc99e,	0x49ff, 0xc99e,		0x21, 0
+	.dw 0x4a40, 0xc99e,	0x4a7f, 0xc99e,		0x21, 0
+	.dw 0x4ac0, 0xc99e,	0x4aff, 0xc99e,		0x21, 0
+	.dw 0x4b40, 0xc99e,	0x4b7f, 0xc99e,		0x21, 0
+	.dw 0x4bc0, 0xc99e,	0x4bff, 0xc99e,		0x21, 0
+	.dw 0x4c40, 0xc99e,	0x4c7f, 0xc99e,		0x21, 0
+	.dw 0x4cc0, 0xc99e,	0x4cff, 0xc99e,		0x21, 0
+	.dw 0x4d40, 0xc99e,	0x4d7f, 0xc99e,		0x21, 0
+	.dw 0x4dc0, 0xc99e,	0x4dff, 0xc99e,		0x21, 0
+	.dw 0x4e40, 0xc99e,	0x4e7f, 0xc99e,		0x21, 0
+	.dw 0x4ec0, 0xc99e,	0x4eff, 0xc99e,		0x21, 0
+	.dw 0x4f40, 0xc99e,	0x4f7f, 0xc99e,		0x21, 0
+	.dw 0x4fc0, 0xc99e,	0x4fff, 0xc99e,		0x21, 0
+	.dw 0x5040, 0xc99e,	0x507f, 0xc99e,		0x21, 0
+	.dw 0x50c0, 0xc99e,	0x50ff, 0xc99e,		0x21, 0
+	.dw 0x5140, 0xc99e,	0x517f, 0xc99e,		0x21, 0
+	.dw 0x51c0, 0xc99e,	0x51ff, 0xc99e,		0x21, 0
+	.dw 0x5240, 0xc99e,	0x527f, 0xc99e,		0x21, 0
+	.dw 0x52c0, 0xc99e,	0x52ff, 0xc99e,		0x21, 0
+	.dw 0x5340, 0xc99e,	0x537f, 0xc99e,		0x21, 0
+	.dw 0x53c0, 0xc99e,	0x53ff, 0xc99e,		0x21, 0
+	.dw 0x5440, 0xc99e,	0x547f, 0xc99e,		0x21, 0
+	.dw 0x54c0, 0xc99e,	0x54ff, 0xc99e,		0x21, 0
+	.dw 0x5540, 0xc99e,	0x557f, 0xc99e,		0x21, 0
+	.dw 0x55c0, 0xc99e,	0x55ff, 0xc99e,		0x21, 0
+	.dw 0x5640, 0xc99e,	0x567f, 0xc99e,		0x21, 0
+	.dw 0x56c0, 0xc99e,	0x56ff, 0xc99e,		0x21, 0
+	.dw 0x5740, 0xc99e,	0x577f, 0xc99e,		0x21, 0
+	.dw 0x57c0, 0xc99e,	0x57ff, 0xc99e,		0x21, 0
+	.dw 0x5840, 0xc99e,	0x587f, 0xc99e,		0x21, 0
+	.dw 0x58c0, 0xc99e,	0x58ff, 0xc99e,		0x21, 0
+	.dw 0x5940, 0xc99e,	0x597f, 0xc99e,		0x21, 0
+	.dw 0x59c0, 0xc99e,	0x5fff, 0xc99e,		0x21, 0
+	.dw 0x6040, 0xc99e,	0x607f, 0xc99e,		0x21, 0
+	.dw 0x60c0, 0xc99e,	0x60ff, 0xc99e,		0x21, 0
+	.dw 0x6140, 0xc99e,	0x617f, 0xc99e,		0x21, 0
+	.dw 0x61c0, 0xc99e,	0x61ff, 0xc99e,		0x21, 0
+	.dw 0x6240, 0xc99e,	0x627f, 0xc99e,		0x21, 0
+	.dw 0x62c0, 0xc99e,	0x62ff, 0xc99e,		0x21, 0
+	.dw 0x6340, 0xc99e,	0x637f, 0xc99e,		0x21, 0
+	.dw 0x63c0, 0xc99e,	0x63ff, 0xc99e,		0x21, 0
+	.dw 0x6440, 0xc99e,	0x647f, 0xc99e,		0x21, 0
+	.dw 0x64c0, 0xc99e,	0x64ff, 0xc99e,		0x21, 0
+	.dw 0x6540, 0xc99e,	0x657f, 0xc99e,		0x21, 0
+	.dw 0x65c0, 0xc99e,	0x65ff, 0xc99e,		0x21, 0
+	.dw 0x6640, 0xc99e,	0x667f, 0xc99e,		0x21, 0
+	.dw 0x66c0, 0xc99e,	0x66ff, 0xc99e,		0x21, 0
+	.dw 0x6740, 0xc99e,	0x677f, 0xc99e,		0x21, 0
+	.dw 0x67c0, 0xc99e,	0x67ff, 0xc99e,		0x21, 0
+	.dw 0x6840, 0xc99e,	0x687f, 0xc99e,		0x21, 0
+	.dw 0x68c0, 0xc99e,	0x68ff, 0xc99e,		0x21, 0
+	.dw 0x6940, 0xc99e,	0x697f, 0xc99e,		0x21, 0
+	.dw 0x69c0, 0xc99e,	0x69ff, 0xc99e,		0x21, 0
+	.dw 0x6a40, 0xc99e,	0x6a7f, 0xc99e,		0x21, 0
+	.dw 0x6ac0, 0xc99e,	0x6aff, 0xc99e,		0x21, 0
+	.dw 0x6b40, 0xc99e,	0x6b7f, 0xc99e,		0x21, 0
+	.dw 0x6bc0, 0xc99e,	0x6bff, 0xc99e,		0x21, 0
+	.dw 0x6c40, 0xc99e,	0x6c7f, 0xc99e,		0x21, 0
+	.dw 0x6cc0, 0xc99e,	0x6cff, 0xc99e,		0x21, 0
+	.dw 0x6d40, 0xc99e,	0x6d7f, 0xc99e,		0x21, 0
+	.dw 0x6dc0, 0xc99e,	0x6dff, 0xc99e,		0x21, 0
+	.dw 0x6e40, 0xc99e,	0x6e7f, 0xc99e,		0x21, 0
+	.dw 0x6ec0, 0xc99e,	0x6eff, 0xc99e,		0x21, 0
+	.dw 0x6f40, 0xc99e,	0x6f7f, 0xc99e,		0x21, 0
+	.dw 0x6fc0, 0xc99e,	0x6fff, 0xc99e,		0x21, 0
+	.dw 0x7040, 0xc99e,	0x707f, 0xc99e,		0x21, 0
+	.dw 0x70c0, 0xc99e,	0x70ff, 0xc99e,		0x21, 0
+	.dw 0x7140, 0xc99e,	0x717f, 0xc99e,		0x21, 0
+	.dw 0x71c0, 0xc99e,	0x71ff, 0xc99e,		0x21, 0
+	.dw 0x7240, 0xc99e,	0x727f, 0xc99e,		0x21, 0
+	.dw 0x72c0, 0xc99e,	0x72ff, 0xc99e,		0x21, 0
+	.dw 0x7340, 0xc99e,	0x737f, 0xc99e,		0x21, 0
+	.dw 0x73c0, 0xc99e,	0x73ff, 0xc99e,		0x21, 0
+	.dw 0x7440, 0xc99e,	0x747f, 0xc99e,		0x21, 0
+	.dw 0x74c0, 0xc99e,	0x74ff, 0xc99e,		0x21, 0
+	.dw 0x7540, 0xc99e,	0x757f, 0xc99e,		0x21, 0
+	.dw 0x75c0, 0xc99e,	0x75ff, 0xc99e,		0x21, 0
+	.dw 0x7640, 0xc99e,	0x767f, 0xc99e,		0x21, 0
+	.dw 0x76c0, 0xc99e,	0x76ff, 0xc99e,		0x21, 0
+	.dw 0x7740, 0xc99e,	0x777f, 0xc99e,		0x21, 0
+	.dw 0x77c0, 0xc99e,	0x77ff, 0xc99e,		0x21, 0
+	.dw 0x7840, 0xc99e,	0x787f, 0xc99e,		0x21, 0
+	.dw 0x78c0, 0xc99e,	0x78ff, 0xc99e,		0x21, 0
+	.dw 0x7940, 0xc99e,	0x797f, 0xc99e,		0x21, 0
+	.dw 0x79c0, 0xc99e,	0x7fff, 0xc99e,		0x21, 0
+	.dw 0x8040, 0xc99e,	0x807f, 0xc99e,		0x21, 0
+	.dw 0x80c0, 0xc99e,	0x80ff, 0xc99e,		0x21, 0
+	.dw 0x8140, 0xc99e,	0x817f, 0xc99e,		0x21, 0
+	.dw 0x81c0, 0xc99e,	0x81ff, 0xc99e,		0x21, 0
+	.dw 0x8240, 0xc99e,	0x827f, 0xc99e,		0x21, 0
+	.dw 0x82c0, 0xc99e,	0x82ff, 0xc99e,		0x21, 0
+	.dw 0x8340, 0xc99e,	0x837f, 0xc99e,		0x21, 0
+	.dw 0x83c0, 0xc99e,	0x83ff, 0xc99e,		0x21, 0
+	.dw 0x8440, 0xc99e,	0x847f, 0xc99e,		0x21, 0
+	.dw 0x84c0, 0xc99e,	0x84ff, 0xc99e,		0x21, 0
+	.dw 0x8540, 0xc99e,	0x857f, 0xc99e,		0x21, 0
+	.dw 0x85c0, 0xc99e,	0x85ff, 0xc99e,		0x21, 0
+	.dw 0x8640, 0xc99e,	0x867f, 0xc99e,		0x21, 0
+	.dw 0x86c0, 0xc99e,	0x86ff, 0xc99e,		0x21, 0
+	.dw 0x8740, 0xc99e,	0x877f, 0xc99e,		0x21, 0
+	.dw 0x87c0, 0xc99e,	0x87ff, 0xc99e,		0x21, 0
+	.dw 0x8840, 0xc99e,	0x887f, 0xc99e,		0x21, 0
+	.dw 0x88c0, 0xc99e,	0x88ff, 0xc99e,		0x21, 0
+	.dw 0x8940, 0xc99e,	0x897f, 0xc99e,		0x21, 0
+	.dw 0x89c0, 0xc99e,	0x89ff, 0xc99e,		0x21, 0
+	.dw 0x8a40, 0xc99e,	0x8a7f, 0xc99e,		0x21, 0
+	.dw 0x8ac0, 0xc99e,	0x8aff, 0xc99e,		0x21, 0
+	.dw 0x8b40, 0xc99e,	0x8b7f, 0xc99e,		0x21, 0
+	.dw 0x8bc0, 0xc99e,	0x8bff, 0xc99e,		0x21, 0
+	.dw 0x8c40, 0xc99e,	0x8c7f, 0xc99e,		0x21, 0
+	.dw 0x8cc0, 0xc99e,	0x8cff, 0xc99e,		0x21, 0
+	.dw 0x8d40, 0xc99e,	0x8d7f, 0xc99e,		0x21, 0
+	.dw 0x8dc0, 0xc99e,	0x8dff, 0xc99e,		0x21, 0
+	.dw 0x8e40, 0xc99e,	0x8e7f, 0xc99e,		0x21, 0
+	.dw 0x8ec0, 0xc99e,	0x8eff, 0xc99e,		0x21, 0
+	.dw 0x8f40, 0xc99e,	0x8f7f, 0xc99e,		0x21, 0
+	.dw 0x8fc0, 0xc99e,	0x8fff, 0xc99e,		0x21, 0
+	.dw 0x9040, 0xc99e,	0x907f, 0xc99e,		0x21, 0
+	.dw 0x90c0, 0xc99e,	0x90ff, 0xc99e,		0x21, 0
+	.dw 0x9140, 0xc99e,	0x917f, 0xc99e,		0x21, 0
+	.dw 0x91c0, 0xc99e,	0x91ff, 0xc99e,		0x21, 0
+	.dw 0x9240, 0xc99e,	0x927f, 0xc99e,		0x21, 0
+	.dw 0x92c0, 0xc99e,	0x92ff, 0xc99e,		0x21, 0
+	.dw 0x9340, 0xc99e,	0x937f, 0xc99e,		0x21, 0
+	.dw 0x93c0, 0xc99e,	0x93ff, 0xc99e,		0x21, 0
+	.dw 0x9440, 0xc99e,	0x947f, 0xc99e,		0x21, 0
+	.dw 0x94c0, 0xc99e,	0x94ff, 0xc99e,		0x21, 0
+	.dw 0x9540, 0xc99e,	0x957f, 0xc99e,		0x21, 0
+	.dw 0x95c0, 0xc99e,	0x95ff, 0xc99e,		0x21, 0
+	.dw 0x9640, 0xc99e,	0x967f, 0xc99e,		0x21, 0
+	.dw 0x96c0, 0xc99e,	0x96ff, 0xc99e,		0x21, 0
+	.dw 0x9740, 0xc99e,	0x977f, 0xc99e,		0x21, 0
+	.dw 0x97c0, 0xc99e,	0x97ff, 0xc99e,		0x21, 0
+	.dw 0x9840, 0xc99e,	0x987f, 0xc99e,		0x21, 0
+	.dw 0x98c0, 0xc99e,	0x98ff, 0xc99e,		0x21, 0
+	.dw 0x9940, 0xc99e,	0x997f, 0xc99e,		0x21, 0
+	.dw 0x99c0, 0xc99e,	0x9fff, 0xc99e,		0x21, 0
+	.dw 0xa040, 0xc99e,	0xa07f, 0xc99e,		0x21, 0
+	.dw 0xa0c0, 0xc99e,	0xa0ff, 0xc99e,		0x21, 0
+	.dw 0xa140, 0xc99e,	0xa17f, 0xc99e,		0x21, 0
+	.dw 0xa1c0, 0xc99e,	0xa1ff, 0xc99e,		0x21, 0
+	.dw 0xa240, 0xc99e,	0xa27f, 0xc99e,		0x21, 0
+	.dw 0xa2c0, 0xc99e,	0xa2ff, 0xc99e,		0x21, 0
+	.dw 0xa340, 0xc99e,	0xa37f, 0xc99e,		0x21, 0
+	.dw 0xa3c0, 0xc99e,	0xa3ff, 0xc99e,		0x21, 0
+	.dw 0xa440, 0xc99e,	0xa47f, 0xc99e,		0x21, 0
+	.dw 0xa4c0, 0xc99e,	0xa4ff, 0xc99e,		0x21, 0
+	.dw 0xa540, 0xc99e,	0xa57f, 0xc99e,		0x21, 0
+	.dw 0xa5c0, 0xc99e,	0xa5ff, 0xc99e,		0x21, 0
+	.dw 0xa640, 0xc99e,	0xa67f, 0xc99e,		0x21, 0
+	.dw 0xa6c0, 0xc99e,	0xa6ff, 0xc99e,		0x21, 0
+	.dw 0xa740, 0xc99e,	0xa77f, 0xc99e,		0x21, 0
+	.dw 0xa7c0, 0xc99e,	0xa7ff, 0xc99e,		0x21, 0
+	.dw 0xa840, 0xc99e,	0xa87f, 0xc99e,		0x21, 0
+	.dw 0xa8c0, 0xc99e,	0xa8ff, 0xc99e,		0x21, 0
+	.dw 0xa940, 0xc99e,	0xa97f, 0xc99e,		0x21, 0
+	.dw 0xa9c0, 0xc99e,	0xa9ff, 0xc99e,		0x21, 0
+	.dw 0xaa40, 0xc99e,	0xaa7f, 0xc99e,		0x21, 0
+	.dw 0xaac0, 0xc99e,	0xaaff, 0xc99e,		0x21, 0
+	.dw 0xab40, 0xc99e,	0xab7f, 0xc99e,		0x21, 0
+	.dw 0xabc0, 0xc99e,	0xabff, 0xc99e,		0x21, 0
+	.dw 0xac40, 0xc99e,	0xac7f, 0xc99e,		0x21, 0
+	.dw 0xacc0, 0xc99e,	0xacff, 0xc99e,		0x21, 0
+	.dw 0xad40, 0xc99e,	0xad7f, 0xc99e,		0x21, 0
+	.dw 0xadc0, 0xc99e,	0xadff, 0xc99e,		0x21, 0
+	.dw 0xae40, 0xc99e,	0xae7f, 0xc99e,		0x21, 0
+	.dw 0xaec0, 0xc99e,	0xaeff, 0xc99e,		0x21, 0
+	.dw 0xaf40, 0xc99e,	0xaf7f, 0xc99e,		0x21, 0
+	.dw 0xafc0, 0xc99e,	0xafff, 0xc99e,		0x21, 0
+	.dw 0xb040, 0xc99e,	0xb07f, 0xc99e,		0x21, 0
+	.dw 0xb0c0, 0xc99e,	0xb0ff, 0xc99e,		0x21, 0
+	.dw 0xb140, 0xc99e,	0xb17f, 0xc99e,		0x21, 0
+	.dw 0xb1c0, 0xc99e,	0xb1ff, 0xc99e,		0x21, 0
+	.dw 0xb240, 0xc99e,	0xb27f, 0xc99e,		0x21, 0
+	.dw 0xb2c0, 0xc99e,	0xb2ff, 0xc99e,		0x21, 0
+	.dw 0xb340, 0xc99e,	0xb37f, 0xc99e,		0x21, 0
+	.dw 0xb3c0, 0xc99e,	0xb3ff, 0xc99e,		0x21, 0
+	.dw 0xb440, 0xc99e,	0xb47f, 0xc99e,		0x21, 0
+	.dw 0xb4c0, 0xc99e,	0xb4ff, 0xc99e,		0x21, 0
+	.dw 0xb540, 0xc99e,	0xb57f, 0xc99e,		0x21, 0
+	.dw 0xb5c0, 0xc99e,	0xb5ff, 0xc99e,		0x21, 0
+	.dw 0xb640, 0xc99e,	0xb67f, 0xc99e,		0x21, 0
+	.dw 0xb6c0, 0xc99e,	0xb6ff, 0xc99e,		0x21, 0
+	.dw 0xb740, 0xc99e,	0xb77f, 0xc99e,		0x21, 0
+	.dw 0xb7c0, 0xc99e,	0xb7ff, 0xc99e,		0x21, 0
+	.dw 0xb840, 0xc99e,	0xb87f, 0xc99e,		0x21, 0
+	.dw 0xb8c0, 0xc99e,	0xb8ff, 0xc99e,		0x21, 0
+	.dw 0xb940, 0xc99e,	0xb97f, 0xc99e,		0x21, 0
+	.dw 0xb9c0, 0xc99e,	0xbfff, 0xc99e,		0x21, 0
+	.dw 0xc040, 0xc99e,	0xc07f, 0xc99e,		0x21, 0
+	.dw 0xc0c0, 0xc99e,	0xc0ff, 0xc99e,		0x21, 0
+	.dw 0xc140, 0xc99e,	0xc17f, 0xc99e,		0x21, 0
+	.dw 0xc1c0, 0xc99e,	0xc1ff, 0xc99e,		0x21, 0
+	.dw 0xc240, 0xc99e,	0xc27f, 0xc99e,		0x21, 0
+	.dw 0xc2c0, 0xc99e,	0xc2ff, 0xc99e,		0x21, 0
+	.dw 0xc340, 0xc99e,	0xc37f, 0xc99e,		0x21, 0
+	.dw 0xc3c0, 0xc99e,	0xc3ff, 0xc99e,		0x21, 0
+	.dw 0xc440, 0xc99e,	0xc47f, 0xc99e,		0x21, 0
+	.dw 0xc4c0, 0xc99e,	0xc4ff, 0xc99e,		0x21, 0
+	.dw 0xc540, 0xc99e,	0xc57f, 0xc99e,		0x21, 0
+	.dw 0xc5c0, 0xc99e,	0xc5ff, 0xc99e,		0x21, 0
+	.dw 0xc640, 0xc99e,	0xc67f, 0xc99e,		0x21, 0
+	.dw 0xc6c0, 0xc99e,	0xc6ff, 0xc99e,		0x21, 0
+	.dw 0xc740, 0xc99e,	0xc77f, 0xc99e,		0x21, 0
+	.dw 0xc7c0, 0xc99e,	0xc7ff, 0xc99e,		0x21, 0
+	.dw 0xc840, 0xc99e,	0xc87f, 0xc99e,		0x21, 0
+	.dw 0xc8c0, 0xc99e,	0xc8ff, 0xc99e,		0x21, 0
+	.dw 0xc940, 0xc99e,	0xc97f, 0xc99e,		0x21, 0
+	.dw 0xc9c0, 0xc99e,	0xc9ff, 0xc99e,		0x21, 0
+	.dw 0xca40, 0xc99e,	0xca7f, 0xc99e,		0x21, 0
+	.dw 0xcac0, 0xc99e,	0xcaff, 0xc99e,		0x21, 0
+	.dw 0xcb40, 0xc99e,	0xcb7f, 0xc99e,		0x21, 0
+	.dw 0xcbc0, 0xc99e,	0xcbff, 0xc99e,		0x21, 0
+	.dw 0xcc40, 0xc99e,	0xcc7f, 0xc99e,		0x21, 0
+	.dw 0xccc0, 0xc99e,	0xccff, 0xc99e,		0x21, 0
+	.dw 0xcd40, 0xc99e,	0xcd7f, 0xc99e,		0x21, 0
+	.dw 0xcdc0, 0xc99e,	0xcdff, 0xc99e,		0x21, 0
+	.dw 0xce40, 0xc99e,	0xce7f, 0xc99e,		0x21, 0
+	.dw 0xcec0, 0xc99e,	0xceff, 0xc99e,		0x21, 0
+	.dw 0xcf40, 0xc99e,	0xcf7f, 0xc99e,		0x21, 0
+	.dw 0xcfc0, 0xc99e,	0xcfff, 0xc99e,		0x21, 0
+	.dw 0xd040, 0xc99e,	0xd07f, 0xc99e,		0x21, 0
+	.dw 0xd0c0, 0xc99e,	0xd0ff, 0xc99e,		0x21, 0
+	.dw 0xd140, 0xc99e,	0xd17f, 0xc99e,		0x21, 0
+	.dw 0xd1c0, 0xc99e,	0xd1ff, 0xc99e,		0x21, 0
+	.dw 0xd240, 0xc99e,	0xd27f, 0xc99e,		0x21, 0
+	.dw 0xd2c0, 0xc99e,	0xd2ff, 0xc99e,		0x21, 0
+	.dw 0xd340, 0xc99e,	0xd37f, 0xc99e,		0x21, 0
+	.dw 0xd3c0, 0xc99e,	0xd3ff, 0xc99e,		0x21, 0
+	.dw 0xd440, 0xc99e,	0xd47f, 0xc99e,		0x21, 0
+	.dw 0xd4c0, 0xc99e,	0xd4ff, 0xc99e,		0x21, 0
+	.dw 0xd540, 0xc99e,	0xd57f, 0xc99e,		0x21, 0
+	.dw 0xd5c0, 0xc99e,	0xd5ff, 0xc99e,		0x21, 0
+	.dw 0xd640, 0xc99e,	0xd67f, 0xc99e,		0x21, 0
+	.dw 0xd6c0, 0xc99e,	0xd6ff, 0xc99e,		0x21, 0
+	.dw 0xd740, 0xc99e,	0xd77f, 0xc99e,		0x21, 0
+	.dw 0xd7c0, 0xc99e,	0xd7ff, 0xc99e,		0x21, 0
+	.dw 0xd840, 0xc99e,	0xd87f, 0xc99e,		0x21, 0
+	.dw 0xd8c0, 0xc99e,	0xd8ff, 0xc99e,		0x21, 0
+	.dw 0xd940, 0xc99e,	0xd97f, 0xc99e,		0x21, 0
+	.dw 0xd9c0, 0xc99e,	0xdfff, 0xc99e,		0x21, 0
+	.dw 0xe040, 0xc99e,	0xe07f, 0xc99e,		0x21, 0
+	.dw 0xe0c0, 0xc99e,	0xe0ff, 0xc99e,		0x21, 0
+	.dw 0xe140, 0xc99e,	0xe17f, 0xc99e,		0x21, 0
+	.dw 0xe1c0, 0xc99e,	0xe1ff, 0xc99e,		0x21, 0
+	.dw 0xe240, 0xc99e,	0xe27f, 0xc99e,		0x21, 0
+	.dw 0xe2c0, 0xc99e,	0xe2ff, 0xc99e,		0x21, 0
+	.dw 0xe340, 0xc99e,	0xe37f, 0xc99e,		0x21, 0
+	.dw 0xe3c0, 0xc99e,	0xe3ff, 0xc99e,		0x21, 0
+	.dw 0xe440, 0xc99e,	0xe47f, 0xc99e,		0x21, 0
+	.dw 0xe4c0, 0xc99e,	0xe4ff, 0xc99e,		0x21, 0
+	.dw 0xe540, 0xc99e,	0xe57f, 0xc99e,		0x21, 0
+	.dw 0xe5c0, 0xc99e,	0xe5ff, 0xc99e,		0x21, 0
+	.dw 0xe640, 0xc99e,	0xe67f, 0xc99e,		0x21, 0
+	.dw 0xe6c0, 0xc99e,	0xe6ff, 0xc99e,		0x21, 0
+	.dw 0xe740, 0xc99e,	0xe77f, 0xc99e,		0x21, 0
+	.dw 0xe7c0, 0xc99e,	0xe7ff, 0xc99e,		0x21, 0
+	.dw 0xe840, 0xc99e,	0xe87f, 0xc99e,		0x21, 0
+	.dw 0xe8c0, 0xc99e,	0xe8ff, 0xc99e,		0x21, 0
+	.dw 0xe940, 0xc99e,	0xe97f, 0xc99e,		0x21, 0
+	.dw 0xe9c0, 0xc99e,	0xe9ff, 0xc99e,		0x21, 0
+	.dw 0xea40, 0xc99e,	0xea7f, 0xc99e,		0x21, 0
+	.dw 0xeac0, 0xc99e,	0xeaff, 0xc99e,		0x21, 0
+	.dw 0xeb40, 0xc99e,	0xeb7f, 0xc99e,		0x21, 0
+	.dw 0xebc0, 0xc99e,	0xebff, 0xc99e,		0x21, 0
+	.dw 0xec40, 0xc99e,	0xec7f, 0xc99e,		0x21, 0
+	.dw 0xecc0, 0xc99e,	0xecff, 0xc99e,		0x21, 0
+	.dw 0xed40, 0xc99e,	0xed7f, 0xc99e,		0x21, 0
+	.dw 0xedc0, 0xc99e,	0xedff, 0xc99e,		0x21, 0
+	.dw 0xee40, 0xc99e,	0xee7f, 0xc99e,		0x21, 0
+	.dw 0xeec0, 0xc99e,	0xeeff, 0xc99e,		0x21, 0
+	.dw 0xef40, 0xc99e,	0xef7f, 0xc99e,		0x21, 0
+	.dw 0xefc0, 0xc99e,	0xefff, 0xc99e,		0x21, 0
+	.dw 0xf040, 0xc99e,	0xf07f, 0xc99e,		0x21, 0
+	.dw 0xf0c0, 0xc99e,	0xf0ff, 0xc99e,		0x21, 0
+	.dw 0xf140, 0xc99e,	0xf17f, 0xc99e,		0x21, 0
+	.dw 0xf1c0, 0xc99e,	0xf1ff, 0xc99e,		0x21, 0
+	.dw 0xf240, 0xc99e,	0xf27f, 0xc99e,		0x21, 0
+	.dw 0xf2c0, 0xc99e,	0xf2ff, 0xc99e,		0x21, 0
+	.dw 0xf340, 0xc99e,	0xf37f, 0xc99e,		0x21, 0
+	.dw 0xf3c0, 0xc99e,	0xf3ff, 0xc99e,		0x21, 0
+	.dw 0xf440, 0xc99e,	0xf47f, 0xc99e,		0x21, 0
+	.dw 0xf4c0, 0xc99e,	0xf4ff, 0xc99e,		0x21, 0
+	.dw 0xf540, 0xc99e,	0xf57f, 0xc99e,		0x21, 0
+	.dw 0xf5c0, 0xc99e,	0xf5ff, 0xc99e,		0x21, 0
+	.dw 0xf640, 0xc99e,	0xf67f, 0xc99e,		0x21, 0
+	.dw 0xf6c0, 0xc99e,	0xf6ff, 0xc99e,		0x21, 0
+	.dw 0xf740, 0xc99e,	0xf77f, 0xc99e,		0x21, 0
+	.dw 0xf7c0, 0xc99e,	0xf7ff, 0xc99e,		0x21, 0
+	.dw 0xf840, 0xc99e,	0xf87f, 0xc99e,		0x21, 0
+	.dw 0xf8c0, 0xc99e,	0xf8ff, 0xc99e,		0x21, 0
+	.dw 0xf940, 0xc99e,	0xf97f, 0xc99e,		0x21, 0
+	.dw 0xf9c0, 0xc99e,	0xffff, 0xc99e,		0x21, 0
+	.dw 0x0040, 0xc99f,	0x007f, 0xc99f,		0x21, 0
+	.dw 0x00c0, 0xc99f,	0x00ff, 0xc99f,		0x21, 0
+	.dw 0x0140, 0xc99f,	0x017f, 0xc99f,		0x21, 0
+	.dw 0x01c0, 0xc99f,	0x01ff, 0xc99f,		0x21, 0
+	.dw 0x0240, 0xc99f,	0x027f, 0xc99f,		0x21, 0
+	.dw 0x02c0, 0xc99f,	0x02ff, 0xc99f,		0x21, 0
+	.dw 0x0340, 0xc99f,	0x037f, 0xc99f,		0x21, 0
+	.dw 0x03c0, 0xc99f,	0x03ff, 0xc99f,		0x21, 0
+	.dw 0x0440, 0xc99f,	0x047f, 0xc99f,		0x21, 0
+	.dw 0x04c0, 0xc99f,	0x04ff, 0xc99f,		0x21, 0
+	.dw 0x0540, 0xc99f,	0x057f, 0xc99f,		0x21, 0
+	.dw 0x05c0, 0xc99f,	0x05ff, 0xc99f,		0x21, 0
+	.dw 0x0640, 0xc99f,	0x067f, 0xc99f,		0x21, 0
+	.dw 0x06c0, 0xc99f,	0x06ff, 0xc99f,		0x21, 0
+	.dw 0x0740, 0xc99f,	0x077f, 0xc99f,		0x21, 0
+	.dw 0x07c0, 0xc99f,	0x07ff, 0xc99f,		0x21, 0
+	.dw 0x0840, 0xc99f,	0x087f, 0xc99f,		0x21, 0
+	.dw 0x08c0, 0xc99f,	0x08ff, 0xc99f,		0x21, 0
+	.dw 0x0940, 0xc99f,	0x097f, 0xc99f,		0x21, 0
+	.dw 0x09c0, 0xc99f,	0x09ff, 0xc99f,		0x21, 0
+	.dw 0x0a40, 0xc99f,	0x0a7f, 0xc99f,		0x21, 0
+	.dw 0x0ac0, 0xc99f,	0x0aff, 0xc99f,		0x21, 0
+	.dw 0x0b40, 0xc99f,	0x0b7f, 0xc99f,		0x21, 0
+	.dw 0x0bc0, 0xc99f,	0x0bff, 0xc99f,		0x21, 0
+	.dw 0x0c40, 0xc99f,	0x0c7f, 0xc99f,		0x21, 0
+	.dw 0x0cc0, 0xc99f,	0x0cff, 0xc99f,		0x21, 0
+	.dw 0x0d40, 0xc99f,	0x0d7f, 0xc99f,		0x21, 0
+	.dw 0x0dc0, 0xc99f,	0x0dff, 0xc99f,		0x21, 0
+	.dw 0x0e40, 0xc99f,	0x0e7f, 0xc99f,		0x21, 0
+	.dw 0x0ec0, 0xc99f,	0x0eff, 0xc99f,		0x21, 0
+	.dw 0x0f40, 0xc99f,	0x0f7f, 0xc99f,		0x21, 0
+	.dw 0x0fc0, 0xc99f,	0x0fff, 0xc99f,		0x21, 0
+	.dw 0x1040, 0xc99f,	0x107f, 0xc99f,		0x21, 0
+	.dw 0x10c0, 0xc99f,	0x10ff, 0xc99f,		0x21, 0
+	.dw 0x1140, 0xc99f,	0x117f, 0xc99f,		0x21, 0
+	.dw 0x11c0, 0xc99f,	0x11ff, 0xc99f,		0x21, 0
+	.dw 0x1240, 0xc99f,	0x127f, 0xc99f,		0x21, 0
+	.dw 0x12c0, 0xc99f,	0x12ff, 0xc99f,		0x21, 0
+	.dw 0x1340, 0xc99f,	0x137f, 0xc99f,		0x21, 0
+	.dw 0x13c0, 0xc99f,	0x13ff, 0xc99f,		0x21, 0
+	.dw 0x1440, 0xc99f,	0x147f, 0xc99f,		0x21, 0
+	.dw 0x14c0, 0xc99f,	0x14ff, 0xc99f,		0x21, 0
+	.dw 0x1540, 0xc99f,	0x157f, 0xc99f,		0x21, 0
+	.dw 0x15c0, 0xc99f,	0x15ff, 0xc99f,		0x21, 0
+	.dw 0x1640, 0xc99f,	0x167f, 0xc99f,		0x21, 0
+	.dw 0x16c0, 0xc99f,	0x16ff, 0xc99f,		0x21, 0
+	.dw 0x1740, 0xc99f,	0x177f, 0xc99f,		0x21, 0
+	.dw 0x17c0, 0xc99f,	0x17ff, 0xc99f,		0x21, 0
+	.dw 0x1840, 0xc99f,	0x187f, 0xc99f,		0x21, 0
+	.dw 0x18c0, 0xc99f,	0x18ff, 0xc99f,		0x21, 0
+	.dw 0x1940, 0xc99f,	0x197f, 0xc99f,		0x21, 0
+	.dw 0x19c0, 0xc99f,	0x1fff, 0xc99f,		0x21, 0
+	.dw 0x2040, 0xc99f,	0x207f, 0xc99f,		0x21, 0
+	.dw 0x20c0, 0xc99f,	0x20ff, 0xc99f,		0x21, 0
+	.dw 0x2140, 0xc99f,	0x217f, 0xc99f,		0x21, 0
+	.dw 0x21c0, 0xc99f,	0x21ff, 0xc99f,		0x21, 0
+	.dw 0x2240, 0xc99f,	0x227f, 0xc99f,		0x21, 0
+	.dw 0x22c0, 0xc99f,	0x22ff, 0xc99f,		0x21, 0
+	.dw 0x2340, 0xc99f,	0x237f, 0xc99f,		0x21, 0
+	.dw 0x23c0, 0xc99f,	0x23ff, 0xc99f,		0x21, 0
+	.dw 0x2440, 0xc99f,	0x247f, 0xc99f,		0x21, 0
+	.dw 0x24c0, 0xc99f,	0x24ff, 0xc99f,		0x21, 0
+	.dw 0x2540, 0xc99f,	0x257f, 0xc99f,		0x21, 0
+	.dw 0x25c0, 0xc99f,	0x25ff, 0xc99f,		0x21, 0
+	.dw 0x2640, 0xc99f,	0x267f, 0xc99f,		0x21, 0
+	.dw 0x26c0, 0xc99f,	0x26ff, 0xc99f,		0x21, 0
+	.dw 0x2740, 0xc99f,	0x277f, 0xc99f,		0x21, 0
+	.dw 0x27c0, 0xc99f,	0x27ff, 0xc99f,		0x21, 0
+	.dw 0x2840, 0xc99f,	0x287f, 0xc99f,		0x21, 0
+	.dw 0x28c0, 0xc99f,	0x28ff, 0xc99f,		0x21, 0
+	.dw 0x2940, 0xc99f,	0x297f, 0xc99f,		0x21, 0
+	.dw 0x29c0, 0xc99f,	0x29ff, 0xc99f,		0x21, 0
+	.dw 0x2a40, 0xc99f,	0x2a7f, 0xc99f,		0x21, 0
+	.dw 0x2ac0, 0xc99f,	0x2aff, 0xc99f,		0x21, 0
+	.dw 0x2b40, 0xc99f,	0x2b7f, 0xc99f,		0x21, 0
+	.dw 0x2bc0, 0xc99f,	0x2bff, 0xc99f,		0x21, 0
+	.dw 0x2c40, 0xc99f,	0x2c7f, 0xc99f,		0x21, 0
+	.dw 0x2cc0, 0xc99f,	0x2cff, 0xc99f,		0x21, 0
+	.dw 0x2d40, 0xc99f,	0x2d7f, 0xc99f,		0x21, 0
+	.dw 0x2dc0, 0xc99f,	0x2dff, 0xc99f,		0x21, 0
+	.dw 0x2e40, 0xc99f,	0x2e7f, 0xc99f,		0x21, 0
+	.dw 0x2ec0, 0xc99f,	0x2eff, 0xc99f,		0x21, 0
+	.dw 0x2f40, 0xc99f,	0x2f7f, 0xc99f,		0x21, 0
+	.dw 0x2fc0, 0xc99f,	0x2fff, 0xc99f,		0x21, 0
+	.dw 0x3040, 0xc99f,	0x307f, 0xc99f,		0x21, 0
+	.dw 0x30c0, 0xc99f,	0x30ff, 0xc99f,		0x21, 0
+	.dw 0x3140, 0xc99f,	0x317f, 0xc99f,		0x21, 0
+	.dw 0x31c0, 0xc99f,	0x31ff, 0xc99f,		0x21, 0
+	.dw 0x3240, 0xc99f,	0x327f, 0xc99f,		0x21, 0
+	.dw 0x32c0, 0xc99f,	0x32ff, 0xc99f,		0x21, 0
+	.dw 0x3340, 0xc99f,	0x337f, 0xc99f,		0x21, 0
+	.dw 0x33c0, 0xc99f,	0x33ff, 0xc99f,		0x21, 0
+	.dw 0x3440, 0xc99f,	0x347f, 0xc99f,		0x21, 0
+	.dw 0x34c0, 0xc99f,	0x34ff, 0xc99f,		0x21, 0
+	.dw 0x3540, 0xc99f,	0x357f, 0xc99f,		0x21, 0
+	.dw 0x35c0, 0xc99f,	0x35ff, 0xc99f,		0x21, 0
+	.dw 0x3640, 0xc99f,	0x367f, 0xc99f,		0x21, 0
+	.dw 0x36c0, 0xc99f,	0x36ff, 0xc99f,		0x21, 0
+	.dw 0x3740, 0xc99f,	0x377f, 0xc99f,		0x21, 0
+	.dw 0x37c0, 0xc99f,	0x37ff, 0xc99f,		0x21, 0
+	.dw 0x3840, 0xc99f,	0x387f, 0xc99f,		0x21, 0
+	.dw 0x38c0, 0xc99f,	0x38ff, 0xc99f,		0x21, 0
+	.dw 0x3940, 0xc99f,	0x397f, 0xc99f,		0x21, 0
+	.dw 0x39c0, 0xc99f,	0x1fff, 0xca00,		0x21, 0
+	.dw 0x2800, 0xca00,	0xffff, 0xca03,		0x21, 0
+	.dw 0x0200, 0xca04,	0x1fff, 0xca04,		0x21, 0
+	.dw 0x2800, 0xca04,	0x3fff, 0xca04,		0x21, 0
+	.dw 0x4200, 0xca04,	0x5fff, 0xca04,		0x21, 0
+	.dw 0x6800, 0xca04,	0x7fff, 0xca04,		0x21, 0
+	.dw 0x8200, 0xca04,	0x9fff, 0xca04,		0x21, 0
+	.dw 0xa800, 0xca04,	0xbfff, 0xca04,		0x21, 0
+	.dw 0xc200, 0xca04,	0xdfff, 0xca04,		0x21, 0
+	.dw 0xe800, 0xca04,	0x1fff, 0xca08,		0x21, 0
+	.dw 0x2040, 0xca08,	0x207f, 0xca08,		0x21, 0
+	.dw 0x20c0, 0xca08,	0x20ff, 0xca08,		0x21, 0
+	.dw 0x2140, 0xca08,	0x217f, 0xca08,		0x21, 0
+	.dw 0x21c0, 0xca08,	0x21ff, 0xca08,		0x21, 0
+	.dw 0x2240, 0xca08,	0x227f, 0xca08,		0x21, 0
+	.dw 0x22c0, 0xca08,	0x22ff, 0xca08,		0x21, 0
+	.dw 0x2340, 0xca08,	0x237f, 0xca08,		0x21, 0
+	.dw 0x23c0, 0xca08,	0x23ff, 0xca08,		0x21, 0
+	.dw 0x2440, 0xca08,	0x247f, 0xca08,		0x21, 0
+	.dw 0x24c0, 0xca08,	0x24ff, 0xca08,		0x21, 0
+	.dw 0x2540, 0xca08,	0x257f, 0xca08,		0x21, 0
+	.dw 0x25c0, 0xca08,	0x25ff, 0xca08,		0x21, 0
+	.dw 0x2640, 0xca08,	0x267f, 0xca08,		0x21, 0
+	.dw 0x26c0, 0xca08,	0x26ff, 0xca08,		0x21, 0
+	.dw 0x2740, 0xca08,	0x277f, 0xca08,		0x21, 0
+	.dw 0x27c0, 0xca08,	0xffff, 0xca0b,		0x21, 0
+	.dw 0x0040, 0xca0c,	0x007f, 0xca0c,		0x21, 0
+	.dw 0x00c0, 0xca0c,	0x00ff, 0xca0c,		0x21, 0
+	.dw 0x0140, 0xca0c,	0x017f, 0xca0c,		0x21, 0
+	.dw 0x01c0, 0xca0c,	0x1fff, 0xca0c,		0x21, 0
+	.dw 0x2040, 0xca0c,	0x207f, 0xca0c,		0x21, 0
+	.dw 0x20c0, 0xca0c,	0x20ff, 0xca0c,		0x21, 0
+	.dw 0x2140, 0xca0c,	0x217f, 0xca0c,		0x21, 0
+	.dw 0x21c0, 0xca0c,	0x21ff, 0xca0c,		0x21, 0
+	.dw 0x2240, 0xca0c,	0x227f, 0xca0c,		0x21, 0
+	.dw 0x22c0, 0xca0c,	0x22ff, 0xca0c,		0x21, 0
+	.dw 0x2340, 0xca0c,	0x237f, 0xca0c,		0x21, 0
+	.dw 0x23c0, 0xca0c,	0x23ff, 0xca0c,		0x21, 0
+	.dw 0x2440, 0xca0c,	0x247f, 0xca0c,		0x21, 0
+	.dw 0x24c0, 0xca0c,	0x24ff, 0xca0c,		0x21, 0
+	.dw 0x2540, 0xca0c,	0x257f, 0xca0c,		0x21, 0
+	.dw 0x25c0, 0xca0c,	0x25ff, 0xca0c,		0x21, 0
+	.dw 0x2640, 0xca0c,	0x267f, 0xca0c,		0x21, 0
+	.dw 0x26c0, 0xca0c,	0x26ff, 0xca0c,		0x21, 0
+	.dw 0x2740, 0xca0c,	0x277f, 0xca0c,		0x21, 0
+	.dw 0x27c0, 0xca0c,	0x3fff, 0xca0c,		0x21, 0
+	.dw 0x4040, 0xca0c,	0x407f, 0xca0c,		0x21, 0
+	.dw 0x40c0, 0xca0c,	0x40ff, 0xca0c,		0x21, 0
+	.dw 0x4140, 0xca0c,	0x417f, 0xca0c,		0x21, 0
+	.dw 0x41c0, 0xca0c,	0x5fff, 0xca0c,		0x21, 0
+	.dw 0x6040, 0xca0c,	0x607f, 0xca0c,		0x21, 0
+	.dw 0x60c0, 0xca0c,	0x60ff, 0xca0c,		0x21, 0
+	.dw 0x6140, 0xca0c,	0x617f, 0xca0c,		0x21, 0
+	.dw 0x61c0, 0xca0c,	0x61ff, 0xca0c,		0x21, 0
+	.dw 0x6240, 0xca0c,	0x627f, 0xca0c,		0x21, 0
+	.dw 0x62c0, 0xca0c,	0x62ff, 0xca0c,		0x21, 0
+	.dw 0x6340, 0xca0c,	0x637f, 0xca0c,		0x21, 0
+	.dw 0x63c0, 0xca0c,	0x63ff, 0xca0c,		0x21, 0
+	.dw 0x6440, 0xca0c,	0x647f, 0xca0c,		0x21, 0
+	.dw 0x64c0, 0xca0c,	0x64ff, 0xca0c,		0x21, 0
+	.dw 0x6540, 0xca0c,	0x657f, 0xca0c,		0x21, 0
+	.dw 0x65c0, 0xca0c,	0x65ff, 0xca0c,		0x21, 0
+	.dw 0x6640, 0xca0c,	0x667f, 0xca0c,		0x21, 0
+	.dw 0x66c0, 0xca0c,	0x66ff, 0xca0c,		0x21, 0
+	.dw 0x6740, 0xca0c,	0x677f, 0xca0c,		0x21, 0
+	.dw 0x67c0, 0xca0c,	0x7fff, 0xca0c,		0x21, 0
+	.dw 0x8040, 0xca0c,	0x807f, 0xca0c,		0x21, 0
+	.dw 0x80c0, 0xca0c,	0x80ff, 0xca0c,		0x21, 0
+	.dw 0x8140, 0xca0c,	0x817f, 0xca0c,		0x21, 0
+	.dw 0x81c0, 0xca0c,	0x9fff, 0xca0c,		0x21, 0
+	.dw 0xa040, 0xca0c,	0xa07f, 0xca0c,		0x21, 0
+	.dw 0xa0c0, 0xca0c,	0xa0ff, 0xca0c,		0x21, 0
+	.dw 0xa140, 0xca0c,	0xa17f, 0xca0c,		0x21, 0
+	.dw 0xa1c0, 0xca0c,	0xa1ff, 0xca0c,		0x21, 0
+	.dw 0xa240, 0xca0c,	0xa27f, 0xca0c,		0x21, 0
+	.dw 0xa2c0, 0xca0c,	0xa2ff, 0xca0c,		0x21, 0
+	.dw 0xa340, 0xca0c,	0xa37f, 0xca0c,		0x21, 0
+	.dw 0xa3c0, 0xca0c,	0xa3ff, 0xca0c,		0x21, 0
+	.dw 0xa440, 0xca0c,	0xa47f, 0xca0c,		0x21, 0
+	.dw 0xa4c0, 0xca0c,	0xa4ff, 0xca0c,		0x21, 0
+	.dw 0xa540, 0xca0c,	0xa57f, 0xca0c,		0x21, 0
+	.dw 0xa5c0, 0xca0c,	0xa5ff, 0xca0c,		0x21, 0
+	.dw 0xa640, 0xca0c,	0xa67f, 0xca0c,		0x21, 0
+	.dw 0xa6c0, 0xca0c,	0xa6ff, 0xca0c,		0x21, 0
+	.dw 0xa740, 0xca0c,	0xa77f, 0xca0c,		0x21, 0
+	.dw 0xa7c0, 0xca0c,	0xbfff, 0xca0c,		0x21, 0
+	.dw 0xc040, 0xca0c,	0xc07f, 0xca0c,		0x21, 0
+	.dw 0xc0c0, 0xca0c,	0xc0ff, 0xca0c,		0x21, 0
+	.dw 0xc140, 0xca0c,	0xc17f, 0xca0c,		0x21, 0
+	.dw 0xc1c0, 0xca0c,	0xdfff, 0xca0c,		0x21, 0
+	.dw 0xe040, 0xca0c,	0xe07f, 0xca0c,		0x21, 0
+	.dw 0xe0c0, 0xca0c,	0xe0ff, 0xca0c,		0x21, 0
+	.dw 0xe140, 0xca0c,	0xe17f, 0xca0c,		0x21, 0
+	.dw 0xe1c0, 0xca0c,	0xe1ff, 0xca0c,		0x21, 0
+	.dw 0xe240, 0xca0c,	0xe27f, 0xca0c,		0x21, 0
+	.dw 0xe2c0, 0xca0c,	0xe2ff, 0xca0c,		0x21, 0
+	.dw 0xe340, 0xca0c,	0xe37f, 0xca0c,		0x21, 0
+	.dw 0xe3c0, 0xca0c,	0xe3ff, 0xca0c,		0x21, 0
+	.dw 0xe440, 0xca0c,	0xe47f, 0xca0c,		0x21, 0
+	.dw 0xe4c0, 0xca0c,	0xe4ff, 0xca0c,		0x21, 0
+	.dw 0xe540, 0xca0c,	0xe57f, 0xca0c,		0x21, 0
+	.dw 0xe5c0, 0xca0c,	0xe5ff, 0xca0c,		0x21, 0
+	.dw 0xe640, 0xca0c,	0xe67f, 0xca0c,		0x21, 0
+	.dw 0xe6c0, 0xca0c,	0xe6ff, 0xca0c,		0x21, 0
+	.dw 0xe740, 0xca0c,	0xe77f, 0xca0c,		0x21, 0
+	.dw 0xe7c0, 0xca0c,	0xffff, 0xca13,		0x21, 0
+	.dw 0x0200, 0xca14,	0x1fff, 0xca14,		0x21, 0
+	.dw 0x2800, 0xca14,	0x3fff, 0xca14,		0x21, 0
+	.dw 0x4200, 0xca14,	0x5fff, 0xca14,		0x21, 0
+	.dw 0x6800, 0xca14,	0x7fff, 0xca14,		0x21, 0
+	.dw 0x8200, 0xca14,	0x9fff, 0xca14,		0x21, 0
+	.dw 0xa800, 0xca14,	0xbfff, 0xca14,		0x21, 0
+	.dw 0xc200, 0xca14,	0xdfff, 0xca14,		0x21, 0
+	.dw 0xe800, 0xca14,	0xffff, 0xca1b,		0x21, 0
+	.dw 0x0040, 0xca1c,	0x007f, 0xca1c,		0x21, 0
+	.dw 0x00c0, 0xca1c,	0x00ff, 0xca1c,		0x21, 0
+	.dw 0x0140, 0xca1c,	0x017f, 0xca1c,		0x21, 0
+	.dw 0x01c0, 0xca1c,	0x1fff, 0xca1c,		0x21, 0
+	.dw 0x2040, 0xca1c,	0x207f, 0xca1c,		0x21, 0
+	.dw 0x20c0, 0xca1c,	0x20ff, 0xca1c,		0x21, 0
+	.dw 0x2140, 0xca1c,	0x217f, 0xca1c,		0x21, 0
+	.dw 0x21c0, 0xca1c,	0x21ff, 0xca1c,		0x21, 0
+	.dw 0x2240, 0xca1c,	0x227f, 0xca1c,		0x21, 0
+	.dw 0x22c0, 0xca1c,	0x22ff, 0xca1c,		0x21, 0
+	.dw 0x2340, 0xca1c,	0x237f, 0xca1c,		0x21, 0
+	.dw 0x23c0, 0xca1c,	0x23ff, 0xca1c,		0x21, 0
+	.dw 0x2440, 0xca1c,	0x247f, 0xca1c,		0x21, 0
+	.dw 0x24c0, 0xca1c,	0x24ff, 0xca1c,		0x21, 0
+	.dw 0x2540, 0xca1c,	0x257f, 0xca1c,		0x21, 0
+	.dw 0x25c0, 0xca1c,	0x25ff, 0xca1c,		0x21, 0
+	.dw 0x2640, 0xca1c,	0x267f, 0xca1c,		0x21, 0
+	.dw 0x26c0, 0xca1c,	0x26ff, 0xca1c,		0x21, 0
+	.dw 0x2740, 0xca1c,	0x277f, 0xca1c,		0x21, 0
+	.dw 0x27c0, 0xca1c,	0x3fff, 0xca1c,		0x21, 0
+	.dw 0x4040, 0xca1c,	0x407f, 0xca1c,		0x21, 0
+	.dw 0x40c0, 0xca1c,	0x40ff, 0xca1c,		0x21, 0
+	.dw 0x4140, 0xca1c,	0x417f, 0xca1c,		0x21, 0
+	.dw 0x41c0, 0xca1c,	0x5fff, 0xca1c,		0x21, 0
+	.dw 0x6040, 0xca1c,	0x607f, 0xca1c,		0x21, 0
+	.dw 0x60c0, 0xca1c,	0x60ff, 0xca1c,		0x21, 0
+	.dw 0x6140, 0xca1c,	0x617f, 0xca1c,		0x21, 0
+	.dw 0x61c0, 0xca1c,	0x61ff, 0xca1c,		0x21, 0
+	.dw 0x6240, 0xca1c,	0x627f, 0xca1c,		0x21, 0
+	.dw 0x62c0, 0xca1c,	0x62ff, 0xca1c,		0x21, 0
+	.dw 0x6340, 0xca1c,	0x637f, 0xca1c,		0x21, 0
+	.dw 0x63c0, 0xca1c,	0x63ff, 0xca1c,		0x21, 0
+	.dw 0x6440, 0xca1c,	0x647f, 0xca1c,		0x21, 0
+	.dw 0x64c0, 0xca1c,	0x64ff, 0xca1c,		0x21, 0
+	.dw 0x6540, 0xca1c,	0x657f, 0xca1c,		0x21, 0
+	.dw 0x65c0, 0xca1c,	0x65ff, 0xca1c,		0x21, 0
+	.dw 0x6640, 0xca1c,	0x667f, 0xca1c,		0x21, 0
+	.dw 0x66c0, 0xca1c,	0x66ff, 0xca1c,		0x21, 0
+	.dw 0x6740, 0xca1c,	0x677f, 0xca1c,		0x21, 0
+	.dw 0x67c0, 0xca1c,	0x7fff, 0xca1c,		0x21, 0
+	.dw 0x8040, 0xca1c,	0x807f, 0xca1c,		0x21, 0
+	.dw 0x80c0, 0xca1c,	0x80ff, 0xca1c,		0x21, 0
+	.dw 0x8140, 0xca1c,	0x817f, 0xca1c,		0x21, 0
+	.dw 0x81c0, 0xca1c,	0x9fff, 0xca1c,		0x21, 0
+	.dw 0xa040, 0xca1c,	0xa07f, 0xca1c,		0x21, 0
+	.dw 0xa0c0, 0xca1c,	0xa0ff, 0xca1c,		0x21, 0
+	.dw 0xa140, 0xca1c,	0xa17f, 0xca1c,		0x21, 0
+	.dw 0xa1c0, 0xca1c,	0xa1ff, 0xca1c,		0x21, 0
+	.dw 0xa240, 0xca1c,	0xa27f, 0xca1c,		0x21, 0
+	.dw 0xa2c0, 0xca1c,	0xa2ff, 0xca1c,		0x21, 0
+	.dw 0xa340, 0xca1c,	0xa37f, 0xca1c,		0x21, 0
+	.dw 0xa3c0, 0xca1c,	0xa3ff, 0xca1c,		0x21, 0
+	.dw 0xa440, 0xca1c,	0xa47f, 0xca1c,		0x21, 0
+	.dw 0xa4c0, 0xca1c,	0xa4ff, 0xca1c,		0x21, 0
+	.dw 0xa540, 0xca1c,	0xa57f, 0xca1c,		0x21, 0
+	.dw 0xa5c0, 0xca1c,	0xa5ff, 0xca1c,		0x21, 0
+	.dw 0xa640, 0xca1c,	0xa67f, 0xca1c,		0x21, 0
+	.dw 0xa6c0, 0xca1c,	0xa6ff, 0xca1c,		0x21, 0
+	.dw 0xa740, 0xca1c,	0xa77f, 0xca1c,		0x21, 0
+	.dw 0xa7c0, 0xca1c,	0xbfff, 0xca1c,		0x21, 0
+	.dw 0xc040, 0xca1c,	0xc07f, 0xca1c,		0x21, 0
+	.dw 0xc0c0, 0xca1c,	0xc0ff, 0xca1c,		0x21, 0
+	.dw 0xc140, 0xca1c,	0xc17f, 0xca1c,		0x21, 0
+	.dw 0xc1c0, 0xca1c,	0xdfff, 0xca1c,		0x21, 0
+	.dw 0xe040, 0xca1c,	0xe07f, 0xca1c,		0x21, 0
+	.dw 0xe0c0, 0xca1c,	0xe0ff, 0xca1c,		0x21, 0
+	.dw 0xe140, 0xca1c,	0xe17f, 0xca1c,		0x21, 0
+	.dw 0xe1c0, 0xca1c,	0xe1ff, 0xca1c,		0x21, 0
+	.dw 0xe240, 0xca1c,	0xe27f, 0xca1c,		0x21, 0
+	.dw 0xe2c0, 0xca1c,	0xe2ff, 0xca1c,		0x21, 0
+	.dw 0xe340, 0xca1c,	0xe37f, 0xca1c,		0x21, 0
+	.dw 0xe3c0, 0xca1c,	0xe3ff, 0xca1c,		0x21, 0
+	.dw 0xe440, 0xca1c,	0xe47f, 0xca1c,		0x21, 0
+	.dw 0xe4c0, 0xca1c,	0xe4ff, 0xca1c,		0x21, 0
+	.dw 0xe540, 0xca1c,	0xe57f, 0xca1c,		0x21, 0
+	.dw 0xe5c0, 0xca1c,	0xe5ff, 0xca1c,		0x21, 0
+	.dw 0xe640, 0xca1c,	0xe67f, 0xca1c,		0x21, 0
+	.dw 0xe6c0, 0xca1c,	0xe6ff, 0xca1c,		0x21, 0
+	.dw 0xe740, 0xca1c,	0xe77f, 0xca1c,		0x21, 0
+	.dw 0xe7c0, 0xca1c,	0x1fff, 0xca20,		0x21, 0
+	.dw 0x2800, 0xca20,	0xffff, 0xca23,		0x21, 0
+	.dw 0x0200, 0xca24,	0x1fff, 0xca24,		0x21, 0
+	.dw 0x2800, 0xca24,	0x3fff, 0xca24,		0x21, 0
+	.dw 0x4200, 0xca24,	0x5fff, 0xca24,		0x21, 0
+	.dw 0x6800, 0xca24,	0x7fff, 0xca24,		0x21, 0
+	.dw 0x8200, 0xca24,	0x9fff, 0xca24,		0x21, 0
+	.dw 0xa800, 0xca24,	0xbfff, 0xca24,		0x21, 0
+	.dw 0xc200, 0xca24,	0xdfff, 0xca24,		0x21, 0
+	.dw 0xe800, 0xca24,	0x1fff, 0xca28,		0x21, 0
+	.dw 0x2040, 0xca28,	0x207f, 0xca28,		0x21, 0
+	.dw 0x20c0, 0xca28,	0x20ff, 0xca28,		0x21, 0
+	.dw 0x2140, 0xca28,	0x217f, 0xca28,		0x21, 0
+	.dw 0x21c0, 0xca28,	0x21ff, 0xca28,		0x21, 0
+	.dw 0x2240, 0xca28,	0x227f, 0xca28,		0x21, 0
+	.dw 0x22c0, 0xca28,	0x22ff, 0xca28,		0x21, 0
+	.dw 0x2340, 0xca28,	0x237f, 0xca28,		0x21, 0
+	.dw 0x23c0, 0xca28,	0x23ff, 0xca28,		0x21, 0
+	.dw 0x2440, 0xca28,	0x247f, 0xca28,		0x21, 0
+	.dw 0x24c0, 0xca28,	0x24ff, 0xca28,		0x21, 0
+	.dw 0x2540, 0xca28,	0x257f, 0xca28,		0x21, 0
+	.dw 0x25c0, 0xca28,	0x25ff, 0xca28,		0x21, 0
+	.dw 0x2640, 0xca28,	0x267f, 0xca28,		0x21, 0
+	.dw 0x26c0, 0xca28,	0x26ff, 0xca28,		0x21, 0
+	.dw 0x2740, 0xca28,	0x277f, 0xca28,		0x21, 0
+	.dw 0x27c0, 0xca28,	0xffff, 0xca2b,		0x21, 0
+	.dw 0x0040, 0xca2c,	0x007f, 0xca2c,		0x21, 0
+	.dw 0x00c0, 0xca2c,	0x00ff, 0xca2c,		0x21, 0
+	.dw 0x0140, 0xca2c,	0x017f, 0xca2c,		0x21, 0
+	.dw 0x01c0, 0xca2c,	0x1fff, 0xca2c,		0x21, 0
+	.dw 0x2040, 0xca2c,	0x207f, 0xca2c,		0x21, 0
+	.dw 0x20c0, 0xca2c,	0x20ff, 0xca2c,		0x21, 0
+	.dw 0x2140, 0xca2c,	0x217f, 0xca2c,		0x21, 0
+	.dw 0x21c0, 0xca2c,	0x21ff, 0xca2c,		0x21, 0
+	.dw 0x2240, 0xca2c,	0x227f, 0xca2c,		0x21, 0
+	.dw 0x22c0, 0xca2c,	0x22ff, 0xca2c,		0x21, 0
+	.dw 0x2340, 0xca2c,	0x237f, 0xca2c,		0x21, 0
+	.dw 0x23c0, 0xca2c,	0x23ff, 0xca2c,		0x21, 0
+	.dw 0x2440, 0xca2c,	0x247f, 0xca2c,		0x21, 0
+	.dw 0x24c0, 0xca2c,	0x24ff, 0xca2c,		0x21, 0
+	.dw 0x2540, 0xca2c,	0x257f, 0xca2c,		0x21, 0
+	.dw 0x25c0, 0xca2c,	0x25ff, 0xca2c,		0x21, 0
+	.dw 0x2640, 0xca2c,	0x267f, 0xca2c,		0x21, 0
+	.dw 0x26c0, 0xca2c,	0x26ff, 0xca2c,		0x21, 0
+	.dw 0x2740, 0xca2c,	0x277f, 0xca2c,		0x21, 0
+	.dw 0x27c0, 0xca2c,	0x3fff, 0xca2c,		0x21, 0
+	.dw 0x4040, 0xca2c,	0x407f, 0xca2c,		0x21, 0
+	.dw 0x40c0, 0xca2c,	0x40ff, 0xca2c,		0x21, 0
+	.dw 0x4140, 0xca2c,	0x417f, 0xca2c,		0x21, 0
+	.dw 0x41c0, 0xca2c,	0x5fff, 0xca2c,		0x21, 0
+	.dw 0x6040, 0xca2c,	0x607f, 0xca2c,		0x21, 0
+	.dw 0x60c0, 0xca2c,	0x60ff, 0xca2c,		0x21, 0
+	.dw 0x6140, 0xca2c,	0x617f, 0xca2c,		0x21, 0
+	.dw 0x61c0, 0xca2c,	0x61ff, 0xca2c,		0x21, 0
+	.dw 0x6240, 0xca2c,	0x627f, 0xca2c,		0x21, 0
+	.dw 0x62c0, 0xca2c,	0x62ff, 0xca2c,		0x21, 0
+	.dw 0x6340, 0xca2c,	0x637f, 0xca2c,		0x21, 0
+	.dw 0x63c0, 0xca2c,	0x63ff, 0xca2c,		0x21, 0
+	.dw 0x6440, 0xca2c,	0x647f, 0xca2c,		0x21, 0
+	.dw 0x64c0, 0xca2c,	0x64ff, 0xca2c,		0x21, 0
+	.dw 0x6540, 0xca2c,	0x657f, 0xca2c,		0x21, 0
+	.dw 0x65c0, 0xca2c,	0x65ff, 0xca2c,		0x21, 0
+	.dw 0x6640, 0xca2c,	0x667f, 0xca2c,		0x21, 0
+	.dw 0x66c0, 0xca2c,	0x66ff, 0xca2c,		0x21, 0
+	.dw 0x6740, 0xca2c,	0x677f, 0xca2c,		0x21, 0
+	.dw 0x67c0, 0xca2c,	0x7fff, 0xca2c,		0x21, 0
+	.dw 0x8040, 0xca2c,	0x807f, 0xca2c,		0x21, 0
+	.dw 0x80c0, 0xca2c,	0x80ff, 0xca2c,		0x21, 0
+	.dw 0x8140, 0xca2c,	0x817f, 0xca2c,		0x21, 0
+	.dw 0x81c0, 0xca2c,	0x9fff, 0xca2c,		0x21, 0
+	.dw 0xa040, 0xca2c,	0xa07f, 0xca2c,		0x21, 0
+	.dw 0xa0c0, 0xca2c,	0xa0ff, 0xca2c,		0x21, 0
+	.dw 0xa140, 0xca2c,	0xa17f, 0xca2c,		0x21, 0
+	.dw 0xa1c0, 0xca2c,	0xa1ff, 0xca2c,		0x21, 0
+	.dw 0xa240, 0xca2c,	0xa27f, 0xca2c,		0x21, 0
+	.dw 0xa2c0, 0xca2c,	0xa2ff, 0xca2c,		0x21, 0
+	.dw 0xa340, 0xca2c,	0xa37f, 0xca2c,		0x21, 0
+	.dw 0xa3c0, 0xca2c,	0xa3ff, 0xca2c,		0x21, 0
+	.dw 0xa440, 0xca2c,	0xa47f, 0xca2c,		0x21, 0
+	.dw 0xa4c0, 0xca2c,	0xa4ff, 0xca2c,		0x21, 0
+	.dw 0xa540, 0xca2c,	0xa57f, 0xca2c,		0x21, 0
+	.dw 0xa5c0, 0xca2c,	0xa5ff, 0xca2c,		0x21, 0
+	.dw 0xa640, 0xca2c,	0xa67f, 0xca2c,		0x21, 0
+	.dw 0xa6c0, 0xca2c,	0xa6ff, 0xca2c,		0x21, 0
+	.dw 0xa740, 0xca2c,	0xa77f, 0xca2c,		0x21, 0
+	.dw 0xa7c0, 0xca2c,	0xbfff, 0xca2c,		0x21, 0
+	.dw 0xc040, 0xca2c,	0xc07f, 0xca2c,		0x21, 0
+	.dw 0xc0c0, 0xca2c,	0xc0ff, 0xca2c,		0x21, 0
+	.dw 0xc140, 0xca2c,	0xc17f, 0xca2c,		0x21, 0
+	.dw 0xc1c0, 0xca2c,	0xdfff, 0xca2c,		0x21, 0
+	.dw 0xe040, 0xca2c,	0xe07f, 0xca2c,		0x21, 0
+	.dw 0xe0c0, 0xca2c,	0xe0ff, 0xca2c,		0x21, 0
+	.dw 0xe140, 0xca2c,	0xe17f, 0xca2c,		0x21, 0
+	.dw 0xe1c0, 0xca2c,	0xe1ff, 0xca2c,		0x21, 0
+	.dw 0xe240, 0xca2c,	0xe27f, 0xca2c,		0x21, 0
+	.dw 0xe2c0, 0xca2c,	0xe2ff, 0xca2c,		0x21, 0
+	.dw 0xe340, 0xca2c,	0xe37f, 0xca2c,		0x21, 0
+	.dw 0xe3c0, 0xca2c,	0xe3ff, 0xca2c,		0x21, 0
+	.dw 0xe440, 0xca2c,	0xe47f, 0xca2c,		0x21, 0
+	.dw 0xe4c0, 0xca2c,	0xe4ff, 0xca2c,		0x21, 0
+	.dw 0xe540, 0xca2c,	0xe57f, 0xca2c,		0x21, 0
+	.dw 0xe5c0, 0xca2c,	0xe5ff, 0xca2c,		0x21, 0
+	.dw 0xe640, 0xca2c,	0xe67f, 0xca2c,		0x21, 0
+	.dw 0xe6c0, 0xca2c,	0xe6ff, 0xca2c,		0x21, 0
+	.dw 0xe740, 0xca2c,	0xe77f, 0xca2c,		0x21, 0
+	.dw 0xe7c0, 0xca2c,	0xffff, 0xca33,		0x21, 0
+	.dw 0x0200, 0xca34,	0x1fff, 0xca34,		0x21, 0
+	.dw 0x2800, 0xca34,	0x3fff, 0xca34,		0x21, 0
+	.dw 0x4200, 0xca34,	0x5fff, 0xca34,		0x21, 0
+	.dw 0x6800, 0xca34,	0x7fff, 0xca34,		0x21, 0
+	.dw 0x8200, 0xca34,	0x9fff, 0xca34,		0x21, 0
+	.dw 0xa800, 0xca34,	0xbfff, 0xca34,		0x21, 0
+	.dw 0xc200, 0xca34,	0xdfff, 0xca34,		0x21, 0
+	.dw 0xe800, 0xca34,	0xffff, 0xca3b,		0x21, 0
+	.dw 0x0040, 0xca3c,	0x007f, 0xca3c,		0x21, 0
+	.dw 0x00c0, 0xca3c,	0x00ff, 0xca3c,		0x21, 0
+	.dw 0x0140, 0xca3c,	0x017f, 0xca3c,		0x21, 0
+	.dw 0x01c0, 0xca3c,	0x1fff, 0xca3c,		0x21, 0
+	.dw 0x2040, 0xca3c,	0x207f, 0xca3c,		0x21, 0
+	.dw 0x20c0, 0xca3c,	0x20ff, 0xca3c,		0x21, 0
+	.dw 0x2140, 0xca3c,	0x217f, 0xca3c,		0x21, 0
+	.dw 0x21c0, 0xca3c,	0x21ff, 0xca3c,		0x21, 0
+	.dw 0x2240, 0xca3c,	0x227f, 0xca3c,		0x21, 0
+	.dw 0x22c0, 0xca3c,	0x22ff, 0xca3c,		0x21, 0
+	.dw 0x2340, 0xca3c,	0x237f, 0xca3c,		0x21, 0
+	.dw 0x23c0, 0xca3c,	0x23ff, 0xca3c,		0x21, 0
+	.dw 0x2440, 0xca3c,	0x247f, 0xca3c,		0x21, 0
+	.dw 0x24c0, 0xca3c,	0x24ff, 0xca3c,		0x21, 0
+	.dw 0x2540, 0xca3c,	0x257f, 0xca3c,		0x21, 0
+	.dw 0x25c0, 0xca3c,	0x25ff, 0xca3c,		0x21, 0
+	.dw 0x2640, 0xca3c,	0x267f, 0xca3c,		0x21, 0
+	.dw 0x26c0, 0xca3c,	0x26ff, 0xca3c,		0x21, 0
+	.dw 0x2740, 0xca3c,	0x277f, 0xca3c,		0x21, 0
+	.dw 0x27c0, 0xca3c,	0x3fff, 0xca3c,		0x21, 0
+	.dw 0x4040, 0xca3c,	0x407f, 0xca3c,		0x21, 0
+	.dw 0x40c0, 0xca3c,	0x40ff, 0xca3c,		0x21, 0
+	.dw 0x4140, 0xca3c,	0x417f, 0xca3c,		0x21, 0
+	.dw 0x41c0, 0xca3c,	0x5fff, 0xca3c,		0x21, 0
+	.dw 0x6040, 0xca3c,	0x607f, 0xca3c,		0x21, 0
+	.dw 0x60c0, 0xca3c,	0x60ff, 0xca3c,		0x21, 0
+	.dw 0x6140, 0xca3c,	0x617f, 0xca3c,		0x21, 0
+	.dw 0x61c0, 0xca3c,	0x61ff, 0xca3c,		0x21, 0
+	.dw 0x6240, 0xca3c,	0x627f, 0xca3c,		0x21, 0
+	.dw 0x62c0, 0xca3c,	0x62ff, 0xca3c,		0x21, 0
+	.dw 0x6340, 0xca3c,	0x637f, 0xca3c,		0x21, 0
+	.dw 0x63c0, 0xca3c,	0x63ff, 0xca3c,		0x21, 0
+	.dw 0x6440, 0xca3c,	0x647f, 0xca3c,		0x21, 0
+	.dw 0x64c0, 0xca3c,	0x64ff, 0xca3c,		0x21, 0
+	.dw 0x6540, 0xca3c,	0x657f, 0xca3c,		0x21, 0
+	.dw 0x65c0, 0xca3c,	0x65ff, 0xca3c,		0x21, 0
+	.dw 0x6640, 0xca3c,	0x667f, 0xca3c,		0x21, 0
+	.dw 0x66c0, 0xca3c,	0x66ff, 0xca3c,		0x21, 0
+	.dw 0x6740, 0xca3c,	0x677f, 0xca3c,		0x21, 0
+	.dw 0x67c0, 0xca3c,	0x7fff, 0xca3c,		0x21, 0
+	.dw 0x8040, 0xca3c,	0x807f, 0xca3c,		0x21, 0
+	.dw 0x80c0, 0xca3c,	0x80ff, 0xca3c,		0x21, 0
+	.dw 0x8140, 0xca3c,	0x817f, 0xca3c,		0x21, 0
+	.dw 0x81c0, 0xca3c,	0x9fff, 0xca3c,		0x21, 0
+	.dw 0xa040, 0xca3c,	0xa07f, 0xca3c,		0x21, 0
+	.dw 0xa0c0, 0xca3c,	0xa0ff, 0xca3c,		0x21, 0
+	.dw 0xa140, 0xca3c,	0xa17f, 0xca3c,		0x21, 0
+	.dw 0xa1c0, 0xca3c,	0xa1ff, 0xca3c,		0x21, 0
+	.dw 0xa240, 0xca3c,	0xa27f, 0xca3c,		0x21, 0
+	.dw 0xa2c0, 0xca3c,	0xa2ff, 0xca3c,		0x21, 0
+	.dw 0xa340, 0xca3c,	0xa37f, 0xca3c,		0x21, 0
+	.dw 0xa3c0, 0xca3c,	0xa3ff, 0xca3c,		0x21, 0
+	.dw 0xa440, 0xca3c,	0xa47f, 0xca3c,		0x21, 0
+	.dw 0xa4c0, 0xca3c,	0xa4ff, 0xca3c,		0x21, 0
+	.dw 0xa540, 0xca3c,	0xa57f, 0xca3c,		0x21, 0
+	.dw 0xa5c0, 0xca3c,	0xa5ff, 0xca3c,		0x21, 0
+	.dw 0xa640, 0xca3c,	0xa67f, 0xca3c,		0x21, 0
+	.dw 0xa6c0, 0xca3c,	0xa6ff, 0xca3c,		0x21, 0
+	.dw 0xa740, 0xca3c,	0xa77f, 0xca3c,		0x21, 0
+	.dw 0xa7c0, 0xca3c,	0xbfff, 0xca3c,		0x21, 0
+	.dw 0xc040, 0xca3c,	0xc07f, 0xca3c,		0x21, 0
+	.dw 0xc0c0, 0xca3c,	0xc0ff, 0xca3c,		0x21, 0
+	.dw 0xc140, 0xca3c,	0xc17f, 0xca3c,		0x21, 0
+	.dw 0xc1c0, 0xca3c,	0xdfff, 0xca3c,		0x21, 0
+	.dw 0xe040, 0xca3c,	0xe07f, 0xca3c,		0x21, 0
+	.dw 0xe0c0, 0xca3c,	0xe0ff, 0xca3c,		0x21, 0
+	.dw 0xe140, 0xca3c,	0xe17f, 0xca3c,		0x21, 0
+	.dw 0xe1c0, 0xca3c,	0xe1ff, 0xca3c,		0x21, 0
+	.dw 0xe240, 0xca3c,	0xe27f, 0xca3c,		0x21, 0
+	.dw 0xe2c0, 0xca3c,	0xe2ff, 0xca3c,		0x21, 0
+	.dw 0xe340, 0xca3c,	0xe37f, 0xca3c,		0x21, 0
+	.dw 0xe3c0, 0xca3c,	0xe3ff, 0xca3c,		0x21, 0
+	.dw 0xe440, 0xca3c,	0xe47f, 0xca3c,		0x21, 0
+	.dw 0xe4c0, 0xca3c,	0xe4ff, 0xca3c,		0x21, 0
+	.dw 0xe540, 0xca3c,	0xe57f, 0xca3c,		0x21, 0
+	.dw 0xe5c0, 0xca3c,	0xe5ff, 0xca3c,		0x21, 0
+	.dw 0xe640, 0xca3c,	0xe67f, 0xca3c,		0x21, 0
+	.dw 0xe6c0, 0xca3c,	0xe6ff, 0xca3c,		0x21, 0
+	.dw 0xe740, 0xca3c,	0xe77f, 0xca3c,		0x21, 0
+	.dw 0xe7c0, 0xca3c,	0x1fff, 0xca40,		0x21, 0
+	.dw 0x2800, 0xca40,	0xffff, 0xca43,		0x21, 0
+	.dw 0x0200, 0xca44,	0x1fff, 0xca44,		0x21, 0
+	.dw 0x2800, 0xca44,	0x3fff, 0xca44,		0x21, 0
+	.dw 0x4200, 0xca44,	0x5fff, 0xca44,		0x21, 0
+	.dw 0x6800, 0xca44,	0x7fff, 0xca44,		0x21, 0
+	.dw 0x8200, 0xca44,	0x9fff, 0xca44,		0x21, 0
+	.dw 0xa800, 0xca44,	0xbfff, 0xca44,		0x21, 0
+	.dw 0xc200, 0xca44,	0xdfff, 0xca44,		0x21, 0
+	.dw 0xe800, 0xca44,	0xffff, 0xca53,		0x21, 0
+	.dw 0x0200, 0xca54,	0x1fff, 0xca54,		0x21, 0
+	.dw 0x2800, 0xca54,	0x3fff, 0xca54,		0x21, 0
+	.dw 0x4200, 0xca54,	0x5fff, 0xca54,		0x21, 0
+	.dw 0x6800, 0xca54,	0x7fff, 0xca54,		0x21, 0
+	.dw 0x8200, 0xca54,	0x9fff, 0xca54,		0x21, 0
+	.dw 0xa800, 0xca54,	0xbfff, 0xca54,		0x21, 0
+	.dw 0xc200, 0xca54,	0xdfff, 0xca54,		0x21, 0
+	.dw 0xe800, 0xca54,	0x1fff, 0xca80,		0x21, 0
+	.dw 0x2800, 0xca80,	0xffff, 0xca83,		0x21, 0
+	.dw 0x0200, 0xca84,	0x1fff, 0xca84,		0x21, 0
+	.dw 0x2800, 0xca84,	0x3fff, 0xca84,		0x21, 0
+	.dw 0x4200, 0xca84,	0x5fff, 0xca84,		0x21, 0
+	.dw 0x6800, 0xca84,	0x7fff, 0xca84,		0x21, 0
+	.dw 0x8200, 0xca84,	0x9fff, 0xca84,		0x21, 0
+	.dw 0xa800, 0xca84,	0xbfff, 0xca84,		0x21, 0
+	.dw 0xc200, 0xca84,	0xdfff, 0xca84,		0x21, 0
+	.dw 0xe800, 0xca84,	0x1fff, 0xca88,		0x21, 0
+	.dw 0x2040, 0xca88,	0x207f, 0xca88,		0x21, 0
+	.dw 0x20c0, 0xca88,	0x20ff, 0xca88,		0x21, 0
+	.dw 0x2140, 0xca88,	0x217f, 0xca88,		0x21, 0
+	.dw 0x21c0, 0xca88,	0x21ff, 0xca88,		0x21, 0
+	.dw 0x2240, 0xca88,	0x227f, 0xca88,		0x21, 0
+	.dw 0x22c0, 0xca88,	0x22ff, 0xca88,		0x21, 0
+	.dw 0x2340, 0xca88,	0x237f, 0xca88,		0x21, 0
+	.dw 0x23c0, 0xca88,	0x23ff, 0xca88,		0x21, 0
+	.dw 0x2440, 0xca88,	0x247f, 0xca88,		0x21, 0
+	.dw 0x24c0, 0xca88,	0x24ff, 0xca88,		0x21, 0
+	.dw 0x2540, 0xca88,	0x257f, 0xca88,		0x21, 0
+	.dw 0x25c0, 0xca88,	0x25ff, 0xca88,		0x21, 0
+	.dw 0x2640, 0xca88,	0x267f, 0xca88,		0x21, 0
+	.dw 0x26c0, 0xca88,	0x26ff, 0xca88,		0x21, 0
+	.dw 0x2740, 0xca88,	0x277f, 0xca88,		0x21, 0
+	.dw 0x27c0, 0xca88,	0xffff, 0xca8b,		0x21, 0
+	.dw 0x0040, 0xca8c,	0x007f, 0xca8c,		0x21, 0
+	.dw 0x00c0, 0xca8c,	0x00ff, 0xca8c,		0x21, 0
+	.dw 0x0140, 0xca8c,	0x017f, 0xca8c,		0x21, 0
+	.dw 0x01c0, 0xca8c,	0x1fff, 0xca8c,		0x21, 0
+	.dw 0x2040, 0xca8c,	0x207f, 0xca8c,		0x21, 0
+	.dw 0x20c0, 0xca8c,	0x20ff, 0xca8c,		0x21, 0
+	.dw 0x2140, 0xca8c,	0x217f, 0xca8c,		0x21, 0
+	.dw 0x21c0, 0xca8c,	0x21ff, 0xca8c,		0x21, 0
+	.dw 0x2240, 0xca8c,	0x227f, 0xca8c,		0x21, 0
+	.dw 0x22c0, 0xca8c,	0x22ff, 0xca8c,		0x21, 0
+	.dw 0x2340, 0xca8c,	0x237f, 0xca8c,		0x21, 0
+	.dw 0x23c0, 0xca8c,	0x23ff, 0xca8c,		0x21, 0
+	.dw 0x2440, 0xca8c,	0x247f, 0xca8c,		0x21, 0
+	.dw 0x24c0, 0xca8c,	0x24ff, 0xca8c,		0x21, 0
+	.dw 0x2540, 0xca8c,	0x257f, 0xca8c,		0x21, 0
+	.dw 0x25c0, 0xca8c,	0x25ff, 0xca8c,		0x21, 0
+	.dw 0x2640, 0xca8c,	0x267f, 0xca8c,		0x21, 0
+	.dw 0x26c0, 0xca8c,	0x26ff, 0xca8c,		0x21, 0
+	.dw 0x2740, 0xca8c,	0x277f, 0xca8c,		0x21, 0
+	.dw 0x27c0, 0xca8c,	0x3fff, 0xca8c,		0x21, 0
+	.dw 0x4040, 0xca8c,	0x407f, 0xca8c,		0x21, 0
+	.dw 0x40c0, 0xca8c,	0x40ff, 0xca8c,		0x21, 0
+	.dw 0x4140, 0xca8c,	0x417f, 0xca8c,		0x21, 0
+	.dw 0x41c0, 0xca8c,	0x5fff, 0xca8c,		0x21, 0
+	.dw 0x6040, 0xca8c,	0x607f, 0xca8c,		0x21, 0
+	.dw 0x60c0, 0xca8c,	0x60ff, 0xca8c,		0x21, 0
+	.dw 0x6140, 0xca8c,	0x617f, 0xca8c,		0x21, 0
+	.dw 0x61c0, 0xca8c,	0x61ff, 0xca8c,		0x21, 0
+	.dw 0x6240, 0xca8c,	0x627f, 0xca8c,		0x21, 0
+	.dw 0x62c0, 0xca8c,	0x62ff, 0xca8c,		0x21, 0
+	.dw 0x6340, 0xca8c,	0x637f, 0xca8c,		0x21, 0
+	.dw 0x63c0, 0xca8c,	0x63ff, 0xca8c,		0x21, 0
+	.dw 0x6440, 0xca8c,	0x647f, 0xca8c,		0x21, 0
+	.dw 0x64c0, 0xca8c,	0x64ff, 0xca8c,		0x21, 0
+	.dw 0x6540, 0xca8c,	0x657f, 0xca8c,		0x21, 0
+	.dw 0x65c0, 0xca8c,	0x65ff, 0xca8c,		0x21, 0
+	.dw 0x6640, 0xca8c,	0x667f, 0xca8c,		0x21, 0
+	.dw 0x66c0, 0xca8c,	0x66ff, 0xca8c,		0x21, 0
+	.dw 0x6740, 0xca8c,	0x677f, 0xca8c,		0x21, 0
+	.dw 0x67c0, 0xca8c,	0x7fff, 0xca8c,		0x21, 0
+	.dw 0x8040, 0xca8c,	0x807f, 0xca8c,		0x21, 0
+	.dw 0x80c0, 0xca8c,	0x80ff, 0xca8c,		0x21, 0
+	.dw 0x8140, 0xca8c,	0x817f, 0xca8c,		0x21, 0
+	.dw 0x81c0, 0xca8c,	0x9fff, 0xca8c,		0x21, 0
+	.dw 0xa040, 0xca8c,	0xa07f, 0xca8c,		0x21, 0
+	.dw 0xa0c0, 0xca8c,	0xa0ff, 0xca8c,		0x21, 0
+	.dw 0xa140, 0xca8c,	0xa17f, 0xca8c,		0x21, 0
+	.dw 0xa1c0, 0xca8c,	0xa1ff, 0xca8c,		0x21, 0
+	.dw 0xa240, 0xca8c,	0xa27f, 0xca8c,		0x21, 0
+	.dw 0xa2c0, 0xca8c,	0xa2ff, 0xca8c,		0x21, 0
+	.dw 0xa340, 0xca8c,	0xa37f, 0xca8c,		0x21, 0
+	.dw 0xa3c0, 0xca8c,	0xa3ff, 0xca8c,		0x21, 0
+	.dw 0xa440, 0xca8c,	0xa47f, 0xca8c,		0x21, 0
+	.dw 0xa4c0, 0xca8c,	0xa4ff, 0xca8c,		0x21, 0
+	.dw 0xa540, 0xca8c,	0xa57f, 0xca8c,		0x21, 0
+	.dw 0xa5c0, 0xca8c,	0xa5ff, 0xca8c,		0x21, 0
+	.dw 0xa640, 0xca8c,	0xa67f, 0xca8c,		0x21, 0
+	.dw 0xa6c0, 0xca8c,	0xa6ff, 0xca8c,		0x21, 0
+	.dw 0xa740, 0xca8c,	0xa77f, 0xca8c,		0x21, 0
+	.dw 0xa7c0, 0xca8c,	0xbfff, 0xca8c,		0x21, 0
+	.dw 0xc040, 0xca8c,	0xc07f, 0xca8c,		0x21, 0
+	.dw 0xc0c0, 0xca8c,	0xc0ff, 0xca8c,		0x21, 0
+	.dw 0xc140, 0xca8c,	0xc17f, 0xca8c,		0x21, 0
+	.dw 0xc1c0, 0xca8c,	0xdfff, 0xca8c,		0x21, 0
+	.dw 0xe040, 0xca8c,	0xe07f, 0xca8c,		0x21, 0
+	.dw 0xe0c0, 0xca8c,	0xe0ff, 0xca8c,		0x21, 0
+	.dw 0xe140, 0xca8c,	0xe17f, 0xca8c,		0x21, 0
+	.dw 0xe1c0, 0xca8c,	0xe1ff, 0xca8c,		0x21, 0
+	.dw 0xe240, 0xca8c,	0xe27f, 0xca8c,		0x21, 0
+	.dw 0xe2c0, 0xca8c,	0xe2ff, 0xca8c,		0x21, 0
+	.dw 0xe340, 0xca8c,	0xe37f, 0xca8c,		0x21, 0
+	.dw 0xe3c0, 0xca8c,	0xe3ff, 0xca8c,		0x21, 0
+	.dw 0xe440, 0xca8c,	0xe47f, 0xca8c,		0x21, 0
+	.dw 0xe4c0, 0xca8c,	0xe4ff, 0xca8c,		0x21, 0
+	.dw 0xe540, 0xca8c,	0xe57f, 0xca8c,		0x21, 0
+	.dw 0xe5c0, 0xca8c,	0xe5ff, 0xca8c,		0x21, 0
+	.dw 0xe640, 0xca8c,	0xe67f, 0xca8c,		0x21, 0
+	.dw 0xe6c0, 0xca8c,	0xe6ff, 0xca8c,		0x21, 0
+	.dw 0xe740, 0xca8c,	0xe77f, 0xca8c,		0x21, 0
+	.dw 0xe7c0, 0xca8c,	0xffff, 0xca93,		0x21, 0
+	.dw 0x0200, 0xca94,	0x1fff, 0xca94,		0x21, 0
+	.dw 0x2800, 0xca94,	0x3fff, 0xca94,		0x21, 0
+	.dw 0x4200, 0xca94,	0x5fff, 0xca94,		0x21, 0
+	.dw 0x6800, 0xca94,	0x7fff, 0xca94,		0x21, 0
+	.dw 0x8200, 0xca94,	0x9fff, 0xca94,		0x21, 0
+	.dw 0xa800, 0xca94,	0xbfff, 0xca94,		0x21, 0
+	.dw 0xc200, 0xca94,	0xdfff, 0xca94,		0x21, 0
+	.dw 0xe800, 0xca94,	0xffff, 0xca9b,		0x21, 0
+	.dw 0x0040, 0xca9c,	0x007f, 0xca9c,		0x21, 0
+	.dw 0x00c0, 0xca9c,	0x00ff, 0xca9c,		0x21, 0
+	.dw 0x0140, 0xca9c,	0x017f, 0xca9c,		0x21, 0
+	.dw 0x01c0, 0xca9c,	0x1fff, 0xca9c,		0x21, 0
+	.dw 0x2040, 0xca9c,	0x207f, 0xca9c,		0x21, 0
+	.dw 0x20c0, 0xca9c,	0x20ff, 0xca9c,		0x21, 0
+	.dw 0x2140, 0xca9c,	0x217f, 0xca9c,		0x21, 0
+	.dw 0x21c0, 0xca9c,	0x21ff, 0xca9c,		0x21, 0
+	.dw 0x2240, 0xca9c,	0x227f, 0xca9c,		0x21, 0
+	.dw 0x22c0, 0xca9c,	0x22ff, 0xca9c,		0x21, 0
+	.dw 0x2340, 0xca9c,	0x237f, 0xca9c,		0x21, 0
+	.dw 0x23c0, 0xca9c,	0x23ff, 0xca9c,		0x21, 0
+	.dw 0x2440, 0xca9c,	0x247f, 0xca9c,		0x21, 0
+	.dw 0x24c0, 0xca9c,	0x24ff, 0xca9c,		0x21, 0
+	.dw 0x2540, 0xca9c,	0x257f, 0xca9c,		0x21, 0
+	.dw 0x25c0, 0xca9c,	0x25ff, 0xca9c,		0x21, 0
+	.dw 0x2640, 0xca9c,	0x267f, 0xca9c,		0x21, 0
+	.dw 0x26c0, 0xca9c,	0x26ff, 0xca9c,		0x21, 0
+	.dw 0x2740, 0xca9c,	0x277f, 0xca9c,		0x21, 0
+	.dw 0x27c0, 0xca9c,	0x3fff, 0xca9c,		0x21, 0
+	.dw 0x4040, 0xca9c,	0x407f, 0xca9c,		0x21, 0
+	.dw 0x40c0, 0xca9c,	0x40ff, 0xca9c,		0x21, 0
+	.dw 0x4140, 0xca9c,	0x417f, 0xca9c,		0x21, 0
+	.dw 0x41c0, 0xca9c,	0x5fff, 0xca9c,		0x21, 0
+	.dw 0x6040, 0xca9c,	0x607f, 0xca9c,		0x21, 0
+	.dw 0x60c0, 0xca9c,	0x60ff, 0xca9c,		0x21, 0
+	.dw 0x6140, 0xca9c,	0x617f, 0xca9c,		0x21, 0
+	.dw 0x61c0, 0xca9c,	0x61ff, 0xca9c,		0x21, 0
+	.dw 0x6240, 0xca9c,	0x627f, 0xca9c,		0x21, 0
+	.dw 0x62c0, 0xca9c,	0x62ff, 0xca9c,		0x21, 0
+	.dw 0x6340, 0xca9c,	0x637f, 0xca9c,		0x21, 0
+	.dw 0x63c0, 0xca9c,	0x63ff, 0xca9c,		0x21, 0
+	.dw 0x6440, 0xca9c,	0x647f, 0xca9c,		0x21, 0
+	.dw 0x64c0, 0xca9c,	0x64ff, 0xca9c,		0x21, 0
+	.dw 0x6540, 0xca9c,	0x657f, 0xca9c,		0x21, 0
+	.dw 0x65c0, 0xca9c,	0x65ff, 0xca9c,		0x21, 0
+	.dw 0x6640, 0xca9c,	0x667f, 0xca9c,		0x21, 0
+	.dw 0x66c0, 0xca9c,	0x66ff, 0xca9c,		0x21, 0
+	.dw 0x6740, 0xca9c,	0x677f, 0xca9c,		0x21, 0
+	.dw 0x67c0, 0xca9c,	0x7fff, 0xca9c,		0x21, 0
+	.dw 0x8040, 0xca9c,	0x807f, 0xca9c,		0x21, 0
+	.dw 0x80c0, 0xca9c,	0x80ff, 0xca9c,		0x21, 0
+	.dw 0x8140, 0xca9c,	0x817f, 0xca9c,		0x21, 0
+	.dw 0x81c0, 0xca9c,	0x9fff, 0xca9c,		0x21, 0
+	.dw 0xa040, 0xca9c,	0xa07f, 0xca9c,		0x21, 0
+	.dw 0xa0c0, 0xca9c,	0xa0ff, 0xca9c,		0x21, 0
+	.dw 0xa140, 0xca9c,	0xa17f, 0xca9c,		0x21, 0
+	.dw 0xa1c0, 0xca9c,	0xa1ff, 0xca9c,		0x21, 0
+	.dw 0xa240, 0xca9c,	0xa27f, 0xca9c,		0x21, 0
+	.dw 0xa2c0, 0xca9c,	0xa2ff, 0xca9c,		0x21, 0
+	.dw 0xa340, 0xca9c,	0xa37f, 0xca9c,		0x21, 0
+	.dw 0xa3c0, 0xca9c,	0xa3ff, 0xca9c,		0x21, 0
+	.dw 0xa440, 0xca9c,	0xa47f, 0xca9c,		0x21, 0
+	.dw 0xa4c0, 0xca9c,	0xa4ff, 0xca9c,		0x21, 0
+	.dw 0xa540, 0xca9c,	0xa57f, 0xca9c,		0x21, 0
+	.dw 0xa5c0, 0xca9c,	0xa5ff, 0xca9c,		0x21, 0
+	.dw 0xa640, 0xca9c,	0xa67f, 0xca9c,		0x21, 0
+	.dw 0xa6c0, 0xca9c,	0xa6ff, 0xca9c,		0x21, 0
+	.dw 0xa740, 0xca9c,	0xa77f, 0xca9c,		0x21, 0
+	.dw 0xa7c0, 0xca9c,	0xbfff, 0xca9c,		0x21, 0
+	.dw 0xc040, 0xca9c,	0xc07f, 0xca9c,		0x21, 0
+	.dw 0xc0c0, 0xca9c,	0xc0ff, 0xca9c,		0x21, 0
+	.dw 0xc140, 0xca9c,	0xc17f, 0xca9c,		0x21, 0
+	.dw 0xc1c0, 0xca9c,	0xdfff, 0xca9c,		0x21, 0
+	.dw 0xe040, 0xca9c,	0xe07f, 0xca9c,		0x21, 0
+	.dw 0xe0c0, 0xca9c,	0xe0ff, 0xca9c,		0x21, 0
+	.dw 0xe140, 0xca9c,	0xe17f, 0xca9c,		0x21, 0
+	.dw 0xe1c0, 0xca9c,	0xe1ff, 0xca9c,		0x21, 0
+	.dw 0xe240, 0xca9c,	0xe27f, 0xca9c,		0x21, 0
+	.dw 0xe2c0, 0xca9c,	0xe2ff, 0xca9c,		0x21, 0
+	.dw 0xe340, 0xca9c,	0xe37f, 0xca9c,		0x21, 0
+	.dw 0xe3c0, 0xca9c,	0xe3ff, 0xca9c,		0x21, 0
+	.dw 0xe440, 0xca9c,	0xe47f, 0xca9c,		0x21, 0
+	.dw 0xe4c0, 0xca9c,	0xe4ff, 0xca9c,		0x21, 0
+	.dw 0xe540, 0xca9c,	0xe57f, 0xca9c,		0x21, 0
+	.dw 0xe5c0, 0xca9c,	0xe5ff, 0xca9c,		0x21, 0
+	.dw 0xe640, 0xca9c,	0xe67f, 0xca9c,		0x21, 0
+	.dw 0xe6c0, 0xca9c,	0xe6ff, 0xca9c,		0x21, 0
+	.dw 0xe740, 0xca9c,	0xe77f, 0xca9c,		0x21, 0
+	.dw 0xe7c0, 0xca9c,	0x1fff, 0xcac0,		0x21, 0
+	.dw 0x2800, 0xcac0,	0xffff, 0xcac3,		0x21, 0
+	.dw 0x0200, 0xcac4,	0x1fff, 0xcac4,		0x21, 0
+	.dw 0x2800, 0xcac4,	0x3fff, 0xcac4,		0x21, 0
+	.dw 0x4200, 0xcac4,	0x5fff, 0xcac4,		0x21, 0
+	.dw 0x6800, 0xcac4,	0x7fff, 0xcac4,		0x21, 0
+	.dw 0x8200, 0xcac4,	0x9fff, 0xcac4,		0x21, 0
+	.dw 0xa800, 0xcac4,	0xbfff, 0xcac4,		0x21, 0
+	.dw 0xc200, 0xcac4,	0xdfff, 0xcac4,		0x21, 0
+	.dw 0xe800, 0xcac4,	0xffff, 0xcad3,		0x21, 0
+	.dw 0x0200, 0xcad4,	0x1fff, 0xcad4,		0x21, 0
+	.dw 0x2800, 0xcad4,	0x3fff, 0xcad4,		0x21, 0
+	.dw 0x4200, 0xcad4,	0x5fff, 0xcad4,		0x21, 0
+	.dw 0x6800, 0xcad4,	0x7fff, 0xcad4,		0x21, 0
+	.dw 0x8200, 0xcad4,	0x9fff, 0xcad4,		0x21, 0
+	.dw 0xa800, 0xcad4,	0xbfff, 0xcad4,		0x21, 0
+	.dw 0xc200, 0xcad4,	0xdfff, 0xcad4,		0x21, 0
+	.dw 0xe800, 0xcad4,	0x1fff, 0xcb00,		0x21, 0
+	.dw 0x2800, 0xcb00,	0xffff, 0xcb03,		0x21, 0
+	.dw 0x0200, 0xcb04,	0x1fff, 0xcb04,		0x21, 0
+	.dw 0x2800, 0xcb04,	0x3fff, 0xcb04,		0x21, 0
+	.dw 0x4200, 0xcb04,	0x5fff, 0xcb04,		0x21, 0
+	.dw 0x6800, 0xcb04,	0x7fff, 0xcb04,		0x21, 0
+	.dw 0x8200, 0xcb04,	0x9fff, 0xcb04,		0x21, 0
+	.dw 0xa800, 0xcb04,	0xbfff, 0xcb04,		0x21, 0
+	.dw 0xc200, 0xcb04,	0xdfff, 0xcb04,		0x21, 0
+	.dw 0xe800, 0xcb04,	0x1fff, 0xcb08,		0x21, 0
+	.dw 0x2040, 0xcb08,	0x207f, 0xcb08,		0x21, 0
+	.dw 0x20c0, 0xcb08,	0x20ff, 0xcb08,		0x21, 0
+	.dw 0x2140, 0xcb08,	0x217f, 0xcb08,		0x21, 0
+	.dw 0x21c0, 0xcb08,	0x21ff, 0xcb08,		0x21, 0
+	.dw 0x2240, 0xcb08,	0x227f, 0xcb08,		0x21, 0
+	.dw 0x22c0, 0xcb08,	0x22ff, 0xcb08,		0x21, 0
+	.dw 0x2340, 0xcb08,	0x237f, 0xcb08,		0x21, 0
+	.dw 0x23c0, 0xcb08,	0x23ff, 0xcb08,		0x21, 0
+	.dw 0x2440, 0xcb08,	0x247f, 0xcb08,		0x21, 0
+	.dw 0x24c0, 0xcb08,	0x24ff, 0xcb08,		0x21, 0
+	.dw 0x2540, 0xcb08,	0x257f, 0xcb08,		0x21, 0
+	.dw 0x25c0, 0xcb08,	0x25ff, 0xcb08,		0x21, 0
+	.dw 0x2640, 0xcb08,	0x267f, 0xcb08,		0x21, 0
+	.dw 0x26c0, 0xcb08,	0x26ff, 0xcb08,		0x21, 0
+	.dw 0x2740, 0xcb08,	0x277f, 0xcb08,		0x21, 0
+	.dw 0x27c0, 0xcb08,	0xffff, 0xcb0b,		0x21, 0
+	.dw 0x0040, 0xcb0c,	0x007f, 0xcb0c,		0x21, 0
+	.dw 0x00c0, 0xcb0c,	0x00ff, 0xcb0c,		0x21, 0
+	.dw 0x0140, 0xcb0c,	0x017f, 0xcb0c,		0x21, 0
+	.dw 0x01c0, 0xcb0c,	0x1fff, 0xcb0c,		0x21, 0
+	.dw 0x2040, 0xcb0c,	0x207f, 0xcb0c,		0x21, 0
+	.dw 0x20c0, 0xcb0c,	0x20ff, 0xcb0c,		0x21, 0
+	.dw 0x2140, 0xcb0c,	0x217f, 0xcb0c,		0x21, 0
+	.dw 0x21c0, 0xcb0c,	0x21ff, 0xcb0c,		0x21, 0
+	.dw 0x2240, 0xcb0c,	0x227f, 0xcb0c,		0x21, 0
+	.dw 0x22c0, 0xcb0c,	0x22ff, 0xcb0c,		0x21, 0
+	.dw 0x2340, 0xcb0c,	0x237f, 0xcb0c,		0x21, 0
+	.dw 0x23c0, 0xcb0c,	0x23ff, 0xcb0c,		0x21, 0
+	.dw 0x2440, 0xcb0c,	0x247f, 0xcb0c,		0x21, 0
+	.dw 0x24c0, 0xcb0c,	0x24ff, 0xcb0c,		0x21, 0
+	.dw 0x2540, 0xcb0c,	0x257f, 0xcb0c,		0x21, 0
+	.dw 0x25c0, 0xcb0c,	0x25ff, 0xcb0c,		0x21, 0
+	.dw 0x2640, 0xcb0c,	0x267f, 0xcb0c,		0x21, 0
+	.dw 0x26c0, 0xcb0c,	0x26ff, 0xcb0c,		0x21, 0
+	.dw 0x2740, 0xcb0c,	0x277f, 0xcb0c,		0x21, 0
+	.dw 0x27c0, 0xcb0c,	0x3fff, 0xcb0c,		0x21, 0
+	.dw 0x4040, 0xcb0c,	0x407f, 0xcb0c,		0x21, 0
+	.dw 0x40c0, 0xcb0c,	0x40ff, 0xcb0c,		0x21, 0
+	.dw 0x4140, 0xcb0c,	0x417f, 0xcb0c,		0x21, 0
+	.dw 0x41c0, 0xcb0c,	0x5fff, 0xcb0c,		0x21, 0
+	.dw 0x6040, 0xcb0c,	0x607f, 0xcb0c,		0x21, 0
+	.dw 0x60c0, 0xcb0c,	0x60ff, 0xcb0c,		0x21, 0
+	.dw 0x6140, 0xcb0c,	0x617f, 0xcb0c,		0x21, 0
+	.dw 0x61c0, 0xcb0c,	0x61ff, 0xcb0c,		0x21, 0
+	.dw 0x6240, 0xcb0c,	0x627f, 0xcb0c,		0x21, 0
+	.dw 0x62c0, 0xcb0c,	0x62ff, 0xcb0c,		0x21, 0
+	.dw 0x6340, 0xcb0c,	0x637f, 0xcb0c,		0x21, 0
+	.dw 0x63c0, 0xcb0c,	0x63ff, 0xcb0c,		0x21, 0
+	.dw 0x6440, 0xcb0c,	0x647f, 0xcb0c,		0x21, 0
+	.dw 0x64c0, 0xcb0c,	0x64ff, 0xcb0c,		0x21, 0
+	.dw 0x6540, 0xcb0c,	0x657f, 0xcb0c,		0x21, 0
+	.dw 0x65c0, 0xcb0c,	0x65ff, 0xcb0c,		0x21, 0
+	.dw 0x6640, 0xcb0c,	0x667f, 0xcb0c,		0x21, 0
+	.dw 0x66c0, 0xcb0c,	0x66ff, 0xcb0c,		0x21, 0
+	.dw 0x6740, 0xcb0c,	0x677f, 0xcb0c,		0x21, 0
+	.dw 0x67c0, 0xcb0c,	0x7fff, 0xcb0c,		0x21, 0
+	.dw 0x8040, 0xcb0c,	0x807f, 0xcb0c,		0x21, 0
+	.dw 0x80c0, 0xcb0c,	0x80ff, 0xcb0c,		0x21, 0
+	.dw 0x8140, 0xcb0c,	0x817f, 0xcb0c,		0x21, 0
+	.dw 0x81c0, 0xcb0c,	0x9fff, 0xcb0c,		0x21, 0
+	.dw 0xa040, 0xcb0c,	0xa07f, 0xcb0c,		0x21, 0
+	.dw 0xa0c0, 0xcb0c,	0xa0ff, 0xcb0c,		0x21, 0
+	.dw 0xa140, 0xcb0c,	0xa17f, 0xcb0c,		0x21, 0
+	.dw 0xa1c0, 0xcb0c,	0xa1ff, 0xcb0c,		0x21, 0
+	.dw 0xa240, 0xcb0c,	0xa27f, 0xcb0c,		0x21, 0
+	.dw 0xa2c0, 0xcb0c,	0xa2ff, 0xcb0c,		0x21, 0
+	.dw 0xa340, 0xcb0c,	0xa37f, 0xcb0c,		0x21, 0
+	.dw 0xa3c0, 0xcb0c,	0xa3ff, 0xcb0c,		0x21, 0
+	.dw 0xa440, 0xcb0c,	0xa47f, 0xcb0c,		0x21, 0
+	.dw 0xa4c0, 0xcb0c,	0xa4ff, 0xcb0c,		0x21, 0
+	.dw 0xa540, 0xcb0c,	0xa57f, 0xcb0c,		0x21, 0
+	.dw 0xa5c0, 0xcb0c,	0xa5ff, 0xcb0c,		0x21, 0
+	.dw 0xa640, 0xcb0c,	0xa67f, 0xcb0c,		0x21, 0
+	.dw 0xa6c0, 0xcb0c,	0xa6ff, 0xcb0c,		0x21, 0
+	.dw 0xa740, 0xcb0c,	0xa77f, 0xcb0c,		0x21, 0
+	.dw 0xa7c0, 0xcb0c,	0xbfff, 0xcb0c,		0x21, 0
+	.dw 0xc040, 0xcb0c,	0xc07f, 0xcb0c,		0x21, 0
+	.dw 0xc0c0, 0xcb0c,	0xc0ff, 0xcb0c,		0x21, 0
+	.dw 0xc140, 0xcb0c,	0xc17f, 0xcb0c,		0x21, 0
+	.dw 0xc1c0, 0xcb0c,	0xdfff, 0xcb0c,		0x21, 0
+	.dw 0xe040, 0xcb0c,	0xe07f, 0xcb0c,		0x21, 0
+	.dw 0xe0c0, 0xcb0c,	0xe0ff, 0xcb0c,		0x21, 0
+	.dw 0xe140, 0xcb0c,	0xe17f, 0xcb0c,		0x21, 0
+	.dw 0xe1c0, 0xcb0c,	0xe1ff, 0xcb0c,		0x21, 0
+	.dw 0xe240, 0xcb0c,	0xe27f, 0xcb0c,		0x21, 0
+	.dw 0xe2c0, 0xcb0c,	0xe2ff, 0xcb0c,		0x21, 0
+	.dw 0xe340, 0xcb0c,	0xe37f, 0xcb0c,		0x21, 0
+	.dw 0xe3c0, 0xcb0c,	0xe3ff, 0xcb0c,		0x21, 0
+	.dw 0xe440, 0xcb0c,	0xe47f, 0xcb0c,		0x21, 0
+	.dw 0xe4c0, 0xcb0c,	0xe4ff, 0xcb0c,		0x21, 0
+	.dw 0xe540, 0xcb0c,	0xe57f, 0xcb0c,		0x21, 0
+	.dw 0xe5c0, 0xcb0c,	0xe5ff, 0xcb0c,		0x21, 0
+	.dw 0xe640, 0xcb0c,	0xe67f, 0xcb0c,		0x21, 0
+	.dw 0xe6c0, 0xcb0c,	0xe6ff, 0xcb0c,		0x21, 0
+	.dw 0xe740, 0xcb0c,	0xe77f, 0xcb0c,		0x21, 0
+	.dw 0xe7c0, 0xcb0c,	0xffff, 0xcb13,		0x21, 0
+	.dw 0x0200, 0xcb14,	0x1fff, 0xcb14,		0x21, 0
+	.dw 0x2800, 0xcb14,	0x3fff, 0xcb14,		0x21, 0
+	.dw 0x4200, 0xcb14,	0x5fff, 0xcb14,		0x21, 0
+	.dw 0x6800, 0xcb14,	0x7fff, 0xcb14,		0x21, 0
+	.dw 0x8200, 0xcb14,	0x9fff, 0xcb14,		0x21, 0
+	.dw 0xa800, 0xcb14,	0xbfff, 0xcb14,		0x21, 0
+	.dw 0xc200, 0xcb14,	0xdfff, 0xcb14,		0x21, 0
+	.dw 0xe800, 0xcb14,	0xffff, 0xcb1b,		0x21, 0
+	.dw 0x0040, 0xcb1c,	0x007f, 0xcb1c,		0x21, 0
+	.dw 0x00c0, 0xcb1c,	0x00ff, 0xcb1c,		0x21, 0
+	.dw 0x0140, 0xcb1c,	0x017f, 0xcb1c,		0x21, 0
+	.dw 0x01c0, 0xcb1c,	0x1fff, 0xcb1c,		0x21, 0
+	.dw 0x2040, 0xcb1c,	0x207f, 0xcb1c,		0x21, 0
+	.dw 0x20c0, 0xcb1c,	0x20ff, 0xcb1c,		0x21, 0
+	.dw 0x2140, 0xcb1c,	0x217f, 0xcb1c,		0x21, 0
+	.dw 0x21c0, 0xcb1c,	0x21ff, 0xcb1c,		0x21, 0
+	.dw 0x2240, 0xcb1c,	0x227f, 0xcb1c,		0x21, 0
+	.dw 0x22c0, 0xcb1c,	0x22ff, 0xcb1c,		0x21, 0
+	.dw 0x2340, 0xcb1c,	0x237f, 0xcb1c,		0x21, 0
+	.dw 0x23c0, 0xcb1c,	0x23ff, 0xcb1c,		0x21, 0
+	.dw 0x2440, 0xcb1c,	0x247f, 0xcb1c,		0x21, 0
+	.dw 0x24c0, 0xcb1c,	0x24ff, 0xcb1c,		0x21, 0
+	.dw 0x2540, 0xcb1c,	0x257f, 0xcb1c,		0x21, 0
+	.dw 0x25c0, 0xcb1c,	0x25ff, 0xcb1c,		0x21, 0
+	.dw 0x2640, 0xcb1c,	0x267f, 0xcb1c,		0x21, 0
+	.dw 0x26c0, 0xcb1c,	0x26ff, 0xcb1c,		0x21, 0
+	.dw 0x2740, 0xcb1c,	0x277f, 0xcb1c,		0x21, 0
+	.dw 0x27c0, 0xcb1c,	0x3fff, 0xcb1c,		0x21, 0
+	.dw 0x4040, 0xcb1c,	0x407f, 0xcb1c,		0x21, 0
+	.dw 0x40c0, 0xcb1c,	0x40ff, 0xcb1c,		0x21, 0
+	.dw 0x4140, 0xcb1c,	0x417f, 0xcb1c,		0x21, 0
+	.dw 0x41c0, 0xcb1c,	0x5fff, 0xcb1c,		0x21, 0
+	.dw 0x6040, 0xcb1c,	0x607f, 0xcb1c,		0x21, 0
+	.dw 0x60c0, 0xcb1c,	0x60ff, 0xcb1c,		0x21, 0
+	.dw 0x6140, 0xcb1c,	0x617f, 0xcb1c,		0x21, 0
+	.dw 0x61c0, 0xcb1c,	0x61ff, 0xcb1c,		0x21, 0
+	.dw 0x6240, 0xcb1c,	0x627f, 0xcb1c,		0x21, 0
+	.dw 0x62c0, 0xcb1c,	0x62ff, 0xcb1c,		0x21, 0
+	.dw 0x6340, 0xcb1c,	0x637f, 0xcb1c,		0x21, 0
+	.dw 0x63c0, 0xcb1c,	0x63ff, 0xcb1c,		0x21, 0
+	.dw 0x6440, 0xcb1c,	0x647f, 0xcb1c,		0x21, 0
+	.dw 0x64c0, 0xcb1c,	0x64ff, 0xcb1c,		0x21, 0
+	.dw 0x6540, 0xcb1c,	0x657f, 0xcb1c,		0x21, 0
+	.dw 0x65c0, 0xcb1c,	0x65ff, 0xcb1c,		0x21, 0
+	.dw 0x6640, 0xcb1c,	0x667f, 0xcb1c,		0x21, 0
+	.dw 0x66c0, 0xcb1c,	0x66ff, 0xcb1c,		0x21, 0
+	.dw 0x6740, 0xcb1c,	0x677f, 0xcb1c,		0x21, 0
+	.dw 0x67c0, 0xcb1c,	0x7fff, 0xcb1c,		0x21, 0
+	.dw 0x8040, 0xcb1c,	0x807f, 0xcb1c,		0x21, 0
+	.dw 0x80c0, 0xcb1c,	0x80ff, 0xcb1c,		0x21, 0
+	.dw 0x8140, 0xcb1c,	0x817f, 0xcb1c,		0x21, 0
+	.dw 0x81c0, 0xcb1c,	0x9fff, 0xcb1c,		0x21, 0
+	.dw 0xa040, 0xcb1c,	0xa07f, 0xcb1c,		0x21, 0
+	.dw 0xa0c0, 0xcb1c,	0xa0ff, 0xcb1c,		0x21, 0
+	.dw 0xa140, 0xcb1c,	0xa17f, 0xcb1c,		0x21, 0
+	.dw 0xa1c0, 0xcb1c,	0xa1ff, 0xcb1c,		0x21, 0
+	.dw 0xa240, 0xcb1c,	0xa27f, 0xcb1c,		0x21, 0
+	.dw 0xa2c0, 0xcb1c,	0xa2ff, 0xcb1c,		0x21, 0
+	.dw 0xa340, 0xcb1c,	0xa37f, 0xcb1c,		0x21, 0
+	.dw 0xa3c0, 0xcb1c,	0xa3ff, 0xcb1c,		0x21, 0
+	.dw 0xa440, 0xcb1c,	0xa47f, 0xcb1c,		0x21, 0
+	.dw 0xa4c0, 0xcb1c,	0xa4ff, 0xcb1c,		0x21, 0
+	.dw 0xa540, 0xcb1c,	0xa57f, 0xcb1c,		0x21, 0
+	.dw 0xa5c0, 0xcb1c,	0xa5ff, 0xcb1c,		0x21, 0
+	.dw 0xa640, 0xcb1c,	0xa67f, 0xcb1c,		0x21, 0
+	.dw 0xa6c0, 0xcb1c,	0xa6ff, 0xcb1c,		0x21, 0
+	.dw 0xa740, 0xcb1c,	0xa77f, 0xcb1c,		0x21, 0
+	.dw 0xa7c0, 0xcb1c,	0xbfff, 0xcb1c,		0x21, 0
+	.dw 0xc040, 0xcb1c,	0xc07f, 0xcb1c,		0x21, 0
+	.dw 0xc0c0, 0xcb1c,	0xc0ff, 0xcb1c,		0x21, 0
+	.dw 0xc140, 0xcb1c,	0xc17f, 0xcb1c,		0x21, 0
+	.dw 0xc1c0, 0xcb1c,	0xdfff, 0xcb1c,		0x21, 0
+	.dw 0xe040, 0xcb1c,	0xe07f, 0xcb1c,		0x21, 0
+	.dw 0xe0c0, 0xcb1c,	0xe0ff, 0xcb1c,		0x21, 0
+	.dw 0xe140, 0xcb1c,	0xe17f, 0xcb1c,		0x21, 0
+	.dw 0xe1c0, 0xcb1c,	0xe1ff, 0xcb1c,		0x21, 0
+	.dw 0xe240, 0xcb1c,	0xe27f, 0xcb1c,		0x21, 0
+	.dw 0xe2c0, 0xcb1c,	0xe2ff, 0xcb1c,		0x21, 0
+	.dw 0xe340, 0xcb1c,	0xe37f, 0xcb1c,		0x21, 0
+	.dw 0xe3c0, 0xcb1c,	0xe3ff, 0xcb1c,		0x21, 0
+	.dw 0xe440, 0xcb1c,	0xe47f, 0xcb1c,		0x21, 0
+	.dw 0xe4c0, 0xcb1c,	0xe4ff, 0xcb1c,		0x21, 0
+	.dw 0xe540, 0xcb1c,	0xe57f, 0xcb1c,		0x21, 0
+	.dw 0xe5c0, 0xcb1c,	0xe5ff, 0xcb1c,		0x21, 0
+	.dw 0xe640, 0xcb1c,	0xe67f, 0xcb1c,		0x21, 0
+	.dw 0xe6c0, 0xcb1c,	0xe6ff, 0xcb1c,		0x21, 0
+	.dw 0xe740, 0xcb1c,	0xe77f, 0xcb1c,		0x21, 0
+	.dw 0xe7c0, 0xcb1c,	0x1fff, 0xcb20,		0x21, 0
+	.dw 0x2800, 0xcb20,	0xffff, 0xcb23,		0x21, 0
+	.dw 0x0200, 0xcb24,	0x1fff, 0xcb24,		0x21, 0
+	.dw 0x2800, 0xcb24,	0x3fff, 0xcb24,		0x21, 0
+	.dw 0x4200, 0xcb24,	0x5fff, 0xcb24,		0x21, 0
+	.dw 0x6800, 0xcb24,	0x7fff, 0xcb24,		0x21, 0
+	.dw 0x8200, 0xcb24,	0x9fff, 0xcb24,		0x21, 0
+	.dw 0xa800, 0xcb24,	0xbfff, 0xcb24,		0x21, 0
+	.dw 0xc200, 0xcb24,	0xdfff, 0xcb24,		0x21, 0
+	.dw 0xe800, 0xcb24,	0x1fff, 0xcb28,		0x21, 0
+	.dw 0x2040, 0xcb28,	0x207f, 0xcb28,		0x21, 0
+	.dw 0x20c0, 0xcb28,	0x20ff, 0xcb28,		0x21, 0
+	.dw 0x2140, 0xcb28,	0x217f, 0xcb28,		0x21, 0
+	.dw 0x21c0, 0xcb28,	0x21ff, 0xcb28,		0x21, 0
+	.dw 0x2240, 0xcb28,	0x227f, 0xcb28,		0x21, 0
+	.dw 0x22c0, 0xcb28,	0x22ff, 0xcb28,		0x21, 0
+	.dw 0x2340, 0xcb28,	0x237f, 0xcb28,		0x21, 0
+	.dw 0x23c0, 0xcb28,	0x23ff, 0xcb28,		0x21, 0
+	.dw 0x2440, 0xcb28,	0x247f, 0xcb28,		0x21, 0
+	.dw 0x24c0, 0xcb28,	0x24ff, 0xcb28,		0x21, 0
+	.dw 0x2540, 0xcb28,	0x257f, 0xcb28,		0x21, 0
+	.dw 0x25c0, 0xcb28,	0x25ff, 0xcb28,		0x21, 0
+	.dw 0x2640, 0xcb28,	0x267f, 0xcb28,		0x21, 0
+	.dw 0x26c0, 0xcb28,	0x26ff, 0xcb28,		0x21, 0
+	.dw 0x2740, 0xcb28,	0x277f, 0xcb28,		0x21, 0
+	.dw 0x27c0, 0xcb28,	0xffff, 0xcb2b,		0x21, 0
+	.dw 0x0040, 0xcb2c,	0x007f, 0xcb2c,		0x21, 0
+	.dw 0x00c0, 0xcb2c,	0x00ff, 0xcb2c,		0x21, 0
+	.dw 0x0140, 0xcb2c,	0x017f, 0xcb2c,		0x21, 0
+	.dw 0x01c0, 0xcb2c,	0x1fff, 0xcb2c,		0x21, 0
+	.dw 0x2040, 0xcb2c,	0x207f, 0xcb2c,		0x21, 0
+	.dw 0x20c0, 0xcb2c,	0x20ff, 0xcb2c,		0x21, 0
+	.dw 0x2140, 0xcb2c,	0x217f, 0xcb2c,		0x21, 0
+	.dw 0x21c0, 0xcb2c,	0x21ff, 0xcb2c,		0x21, 0
+	.dw 0x2240, 0xcb2c,	0x227f, 0xcb2c,		0x21, 0
+	.dw 0x22c0, 0xcb2c,	0x22ff, 0xcb2c,		0x21, 0
+	.dw 0x2340, 0xcb2c,	0x237f, 0xcb2c,		0x21, 0
+	.dw 0x23c0, 0xcb2c,	0x23ff, 0xcb2c,		0x21, 0
+	.dw 0x2440, 0xcb2c,	0x247f, 0xcb2c,		0x21, 0
+	.dw 0x24c0, 0xcb2c,	0x24ff, 0xcb2c,		0x21, 0
+	.dw 0x2540, 0xcb2c,	0x257f, 0xcb2c,		0x21, 0
+	.dw 0x25c0, 0xcb2c,	0x25ff, 0xcb2c,		0x21, 0
+	.dw 0x2640, 0xcb2c,	0x267f, 0xcb2c,		0x21, 0
+	.dw 0x26c0, 0xcb2c,	0x26ff, 0xcb2c,		0x21, 0
+	.dw 0x2740, 0xcb2c,	0x277f, 0xcb2c,		0x21, 0
+	.dw 0x27c0, 0xcb2c,	0x3fff, 0xcb2c,		0x21, 0
+	.dw 0x4040, 0xcb2c,	0x407f, 0xcb2c,		0x21, 0
+	.dw 0x40c0, 0xcb2c,	0x40ff, 0xcb2c,		0x21, 0
+	.dw 0x4140, 0xcb2c,	0x417f, 0xcb2c,		0x21, 0
+	.dw 0x41c0, 0xcb2c,	0x5fff, 0xcb2c,		0x21, 0
+	.dw 0x6040, 0xcb2c,	0x607f, 0xcb2c,		0x21, 0
+	.dw 0x60c0, 0xcb2c,	0x60ff, 0xcb2c,		0x21, 0
+	.dw 0x6140, 0xcb2c,	0x617f, 0xcb2c,		0x21, 0
+	.dw 0x61c0, 0xcb2c,	0x61ff, 0xcb2c,		0x21, 0
+	.dw 0x6240, 0xcb2c,	0x627f, 0xcb2c,		0x21, 0
+	.dw 0x62c0, 0xcb2c,	0x62ff, 0xcb2c,		0x21, 0
+	.dw 0x6340, 0xcb2c,	0x637f, 0xcb2c,		0x21, 0
+	.dw 0x63c0, 0xcb2c,	0x63ff, 0xcb2c,		0x21, 0
+	.dw 0x6440, 0xcb2c,	0x647f, 0xcb2c,		0x21, 0
+	.dw 0x64c0, 0xcb2c,	0x64ff, 0xcb2c,		0x21, 0
+	.dw 0x6540, 0xcb2c,	0x657f, 0xcb2c,		0x21, 0
+	.dw 0x65c0, 0xcb2c,	0x65ff, 0xcb2c,		0x21, 0
+	.dw 0x6640, 0xcb2c,	0x667f, 0xcb2c,		0x21, 0
+	.dw 0x66c0, 0xcb2c,	0x66ff, 0xcb2c,		0x21, 0
+	.dw 0x6740, 0xcb2c,	0x677f, 0xcb2c,		0x21, 0
+	.dw 0x67c0, 0xcb2c,	0x7fff, 0xcb2c,		0x21, 0
+	.dw 0x8040, 0xcb2c,	0x807f, 0xcb2c,		0x21, 0
+	.dw 0x80c0, 0xcb2c,	0x80ff, 0xcb2c,		0x21, 0
+	.dw 0x8140, 0xcb2c,	0x817f, 0xcb2c,		0x21, 0
+	.dw 0x81c0, 0xcb2c,	0x9fff, 0xcb2c,		0x21, 0
+	.dw 0xa040, 0xcb2c,	0xa07f, 0xcb2c,		0x21, 0
+	.dw 0xa0c0, 0xcb2c,	0xa0ff, 0xcb2c,		0x21, 0
+	.dw 0xa140, 0xcb2c,	0xa17f, 0xcb2c,		0x21, 0
+	.dw 0xa1c0, 0xcb2c,	0xa1ff, 0xcb2c,		0x21, 0
+	.dw 0xa240, 0xcb2c,	0xa27f, 0xcb2c,		0x21, 0
+	.dw 0xa2c0, 0xcb2c,	0xa2ff, 0xcb2c,		0x21, 0
+	.dw 0xa340, 0xcb2c,	0xa37f, 0xcb2c,		0x21, 0
+	.dw 0xa3c0, 0xcb2c,	0xa3ff, 0xcb2c,		0x21, 0
+	.dw 0xa440, 0xcb2c,	0xa47f, 0xcb2c,		0x21, 0
+	.dw 0xa4c0, 0xcb2c,	0xa4ff, 0xcb2c,		0x21, 0
+	.dw 0xa540, 0xcb2c,	0xa57f, 0xcb2c,		0x21, 0
+	.dw 0xa5c0, 0xcb2c,	0xa5ff, 0xcb2c,		0x21, 0
+	.dw 0xa640, 0xcb2c,	0xa67f, 0xcb2c,		0x21, 0
+	.dw 0xa6c0, 0xcb2c,	0xa6ff, 0xcb2c,		0x21, 0
+	.dw 0xa740, 0xcb2c,	0xa77f, 0xcb2c,		0x21, 0
+	.dw 0xa7c0, 0xcb2c,	0xbfff, 0xcb2c,		0x21, 0
+	.dw 0xc040, 0xcb2c,	0xc07f, 0xcb2c,		0x21, 0
+	.dw 0xc0c0, 0xcb2c,	0xc0ff, 0xcb2c,		0x21, 0
+	.dw 0xc140, 0xcb2c,	0xc17f, 0xcb2c,		0x21, 0
+	.dw 0xc1c0, 0xcb2c,	0xdfff, 0xcb2c,		0x21, 0
+	.dw 0xe040, 0xcb2c,	0xe07f, 0xcb2c,		0x21, 0
+	.dw 0xe0c0, 0xcb2c,	0xe0ff, 0xcb2c,		0x21, 0
+	.dw 0xe140, 0xcb2c,	0xe17f, 0xcb2c,		0x21, 0
+	.dw 0xe1c0, 0xcb2c,	0xe1ff, 0xcb2c,		0x21, 0
+	.dw 0xe240, 0xcb2c,	0xe27f, 0xcb2c,		0x21, 0
+	.dw 0xe2c0, 0xcb2c,	0xe2ff, 0xcb2c,		0x21, 0
+	.dw 0xe340, 0xcb2c,	0xe37f, 0xcb2c,		0x21, 0
+	.dw 0xe3c0, 0xcb2c,	0xe3ff, 0xcb2c,		0x21, 0
+	.dw 0xe440, 0xcb2c,	0xe47f, 0xcb2c,		0x21, 0
+	.dw 0xe4c0, 0xcb2c,	0xe4ff, 0xcb2c,		0x21, 0
+	.dw 0xe540, 0xcb2c,	0xe57f, 0xcb2c,		0x21, 0
+	.dw 0xe5c0, 0xcb2c,	0xe5ff, 0xcb2c,		0x21, 0
+	.dw 0xe640, 0xcb2c,	0xe67f, 0xcb2c,		0x21, 0
+	.dw 0xe6c0, 0xcb2c,	0xe6ff, 0xcb2c,		0x21, 0
+	.dw 0xe740, 0xcb2c,	0xe77f, 0xcb2c,		0x21, 0
+	.dw 0xe7c0, 0xcb2c,	0xffff, 0xcb33,		0x21, 0
+	.dw 0x0200, 0xcb34,	0x1fff, 0xcb34,		0x21, 0
+	.dw 0x2800, 0xcb34,	0x3fff, 0xcb34,		0x21, 0
+	.dw 0x4200, 0xcb34,	0x5fff, 0xcb34,		0x21, 0
+	.dw 0x6800, 0xcb34,	0x7fff, 0xcb34,		0x21, 0
+	.dw 0x8200, 0xcb34,	0x9fff, 0xcb34,		0x21, 0
+	.dw 0xa800, 0xcb34,	0xbfff, 0xcb34,		0x21, 0
+	.dw 0xc200, 0xcb34,	0xdfff, 0xcb34,		0x21, 0
+	.dw 0xe800, 0xcb34,	0xffff, 0xcb3b,		0x21, 0
+	.dw 0x0040, 0xcb3c,	0x007f, 0xcb3c,		0x21, 0
+	.dw 0x00c0, 0xcb3c,	0x00ff, 0xcb3c,		0x21, 0
+	.dw 0x0140, 0xcb3c,	0x017f, 0xcb3c,		0x21, 0
+	.dw 0x01c0, 0xcb3c,	0x1fff, 0xcb3c,		0x21, 0
+	.dw 0x2040, 0xcb3c,	0x207f, 0xcb3c,		0x21, 0
+	.dw 0x20c0, 0xcb3c,	0x20ff, 0xcb3c,		0x21, 0
+	.dw 0x2140, 0xcb3c,	0x217f, 0xcb3c,		0x21, 0
+	.dw 0x21c0, 0xcb3c,	0x21ff, 0xcb3c,		0x21, 0
+	.dw 0x2240, 0xcb3c,	0x227f, 0xcb3c,		0x21, 0
+	.dw 0x22c0, 0xcb3c,	0x22ff, 0xcb3c,		0x21, 0
+	.dw 0x2340, 0xcb3c,	0x237f, 0xcb3c,		0x21, 0
+	.dw 0x23c0, 0xcb3c,	0x23ff, 0xcb3c,		0x21, 0
+	.dw 0x2440, 0xcb3c,	0x247f, 0xcb3c,		0x21, 0
+	.dw 0x24c0, 0xcb3c,	0x24ff, 0xcb3c,		0x21, 0
+	.dw 0x2540, 0xcb3c,	0x257f, 0xcb3c,		0x21, 0
+	.dw 0x25c0, 0xcb3c,	0x25ff, 0xcb3c,		0x21, 0
+	.dw 0x2640, 0xcb3c,	0x267f, 0xcb3c,		0x21, 0
+	.dw 0x26c0, 0xcb3c,	0x26ff, 0xcb3c,		0x21, 0
+	.dw 0x2740, 0xcb3c,	0x277f, 0xcb3c,		0x21, 0
+	.dw 0x27c0, 0xcb3c,	0x3fff, 0xcb3c,		0x21, 0
+	.dw 0x4040, 0xcb3c,	0x407f, 0xcb3c,		0x21, 0
+	.dw 0x40c0, 0xcb3c,	0x40ff, 0xcb3c,		0x21, 0
+	.dw 0x4140, 0xcb3c,	0x417f, 0xcb3c,		0x21, 0
+	.dw 0x41c0, 0xcb3c,	0x5fff, 0xcb3c,		0x21, 0
+	.dw 0x6040, 0xcb3c,	0x607f, 0xcb3c,		0x21, 0
+	.dw 0x60c0, 0xcb3c,	0x60ff, 0xcb3c,		0x21, 0
+	.dw 0x6140, 0xcb3c,	0x617f, 0xcb3c,		0x21, 0
+	.dw 0x61c0, 0xcb3c,	0x61ff, 0xcb3c,		0x21, 0
+	.dw 0x6240, 0xcb3c,	0x627f, 0xcb3c,		0x21, 0
+	.dw 0x62c0, 0xcb3c,	0x62ff, 0xcb3c,		0x21, 0
+	.dw 0x6340, 0xcb3c,	0x637f, 0xcb3c,		0x21, 0
+	.dw 0x63c0, 0xcb3c,	0x63ff, 0xcb3c,		0x21, 0
+	.dw 0x6440, 0xcb3c,	0x647f, 0xcb3c,		0x21, 0
+	.dw 0x64c0, 0xcb3c,	0x64ff, 0xcb3c,		0x21, 0
+	.dw 0x6540, 0xcb3c,	0x657f, 0xcb3c,		0x21, 0
+	.dw 0x65c0, 0xcb3c,	0x65ff, 0xcb3c,		0x21, 0
+	.dw 0x6640, 0xcb3c,	0x667f, 0xcb3c,		0x21, 0
+	.dw 0x66c0, 0xcb3c,	0x66ff, 0xcb3c,		0x21, 0
+	.dw 0x6740, 0xcb3c,	0x677f, 0xcb3c,		0x21, 0
+	.dw 0x67c0, 0xcb3c,	0x7fff, 0xcb3c,		0x21, 0
+	.dw 0x8040, 0xcb3c,	0x807f, 0xcb3c,		0x21, 0
+	.dw 0x80c0, 0xcb3c,	0x80ff, 0xcb3c,		0x21, 0
+	.dw 0x8140, 0xcb3c,	0x817f, 0xcb3c,		0x21, 0
+	.dw 0x81c0, 0xcb3c,	0x9fff, 0xcb3c,		0x21, 0
+	.dw 0xa040, 0xcb3c,	0xa07f, 0xcb3c,		0x21, 0
+	.dw 0xa0c0, 0xcb3c,	0xa0ff, 0xcb3c,		0x21, 0
+	.dw 0xa140, 0xcb3c,	0xa17f, 0xcb3c,		0x21, 0
+	.dw 0xa1c0, 0xcb3c,	0xa1ff, 0xcb3c,		0x21, 0
+	.dw 0xa240, 0xcb3c,	0xa27f, 0xcb3c,		0x21, 0
+	.dw 0xa2c0, 0xcb3c,	0xa2ff, 0xcb3c,		0x21, 0
+	.dw 0xa340, 0xcb3c,	0xa37f, 0xcb3c,		0x21, 0
+	.dw 0xa3c0, 0xcb3c,	0xa3ff, 0xcb3c,		0x21, 0
+	.dw 0xa440, 0xcb3c,	0xa47f, 0xcb3c,		0x21, 0
+	.dw 0xa4c0, 0xcb3c,	0xa4ff, 0xcb3c,		0x21, 0
+	.dw 0xa540, 0xcb3c,	0xa57f, 0xcb3c,		0x21, 0
+	.dw 0xa5c0, 0xcb3c,	0xa5ff, 0xcb3c,		0x21, 0
+	.dw 0xa640, 0xcb3c,	0xa67f, 0xcb3c,		0x21, 0
+	.dw 0xa6c0, 0xcb3c,	0xa6ff, 0xcb3c,		0x21, 0
+	.dw 0xa740, 0xcb3c,	0xa77f, 0xcb3c,		0x21, 0
+	.dw 0xa7c0, 0xcb3c,	0xbfff, 0xcb3c,		0x21, 0
+	.dw 0xc040, 0xcb3c,	0xc07f, 0xcb3c,		0x21, 0
+	.dw 0xc0c0, 0xcb3c,	0xc0ff, 0xcb3c,		0x21, 0
+	.dw 0xc140, 0xcb3c,	0xc17f, 0xcb3c,		0x21, 0
+	.dw 0xc1c0, 0xcb3c,	0xdfff, 0xcb3c,		0x21, 0
+	.dw 0xe040, 0xcb3c,	0xe07f, 0xcb3c,		0x21, 0
+	.dw 0xe0c0, 0xcb3c,	0xe0ff, 0xcb3c,		0x21, 0
+	.dw 0xe140, 0xcb3c,	0xe17f, 0xcb3c,		0x21, 0
+	.dw 0xe1c0, 0xcb3c,	0xe1ff, 0xcb3c,		0x21, 0
+	.dw 0xe240, 0xcb3c,	0xe27f, 0xcb3c,		0x21, 0
+	.dw 0xe2c0, 0xcb3c,	0xe2ff, 0xcb3c,		0x21, 0
+	.dw 0xe340, 0xcb3c,	0xe37f, 0xcb3c,		0x21, 0
+	.dw 0xe3c0, 0xcb3c,	0xe3ff, 0xcb3c,		0x21, 0
+	.dw 0xe440, 0xcb3c,	0xe47f, 0xcb3c,		0x21, 0
+	.dw 0xe4c0, 0xcb3c,	0xe4ff, 0xcb3c,		0x21, 0
+	.dw 0xe540, 0xcb3c,	0xe57f, 0xcb3c,		0x21, 0
+	.dw 0xe5c0, 0xcb3c,	0xe5ff, 0xcb3c,		0x21, 0
+	.dw 0xe640, 0xcb3c,	0xe67f, 0xcb3c,		0x21, 0
+	.dw 0xe6c0, 0xcb3c,	0xe6ff, 0xcb3c,		0x21, 0
+	.dw 0xe740, 0xcb3c,	0xe77f, 0xcb3c,		0x21, 0
+	.dw 0xe7c0, 0xcb3c,	0x1fff, 0xcb60,		0x21, 0
+	.dw 0x2800, 0xcb60,	0xffff, 0xcb63,		0x21, 0
+	.dw 0x0200, 0xcb64,	0x1fff, 0xcb64,		0x21, 0
+	.dw 0x2800, 0xcb64,	0x3fff, 0xcb64,		0x21, 0
+	.dw 0x4200, 0xcb64,	0x5fff, 0xcb64,		0x21, 0
+	.dw 0x6800, 0xcb64,	0x7fff, 0xcb64,		0x21, 0
+	.dw 0x8200, 0xcb64,	0x9fff, 0xcb64,		0x21, 0
+	.dw 0xa800, 0xcb64,	0xbfff, 0xcb64,		0x21, 0
+	.dw 0xc200, 0xcb64,	0xdfff, 0xcb64,		0x21, 0
+	.dw 0xe800, 0xcb64,	0xffff, 0xcb73,		0x21, 0
+	.dw 0x0200, 0xcb74,	0x1fff, 0xcb74,		0x21, 0
+	.dw 0x2800, 0xcb74,	0x3fff, 0xcb74,		0x21, 0
+	.dw 0x4200, 0xcb74,	0x5fff, 0xcb74,		0x21, 0
+	.dw 0x6800, 0xcb74,	0x7fff, 0xcb74,		0x21, 0
+	.dw 0x8200, 0xcb74,	0x9fff, 0xcb74,		0x21, 0
+	.dw 0xa800, 0xcb74,	0xbfff, 0xcb74,		0x21, 0
+	.dw 0xc200, 0xcb74,	0xdfff, 0xcb74,		0x21, 0
+	.dw 0xe800, 0xcb74,	0x1fff, 0xcb80,		0x21, 0
+	.dw 0x2800, 0xcb80,	0xffff, 0xcb83,		0x21, 0
+	.dw 0x0200, 0xcb84,	0x1fff, 0xcb84,		0x21, 0
+	.dw 0x2800, 0xcb84,	0x3fff, 0xcb84,		0x21, 0
+	.dw 0x4200, 0xcb84,	0x5fff, 0xcb84,		0x21, 0
+	.dw 0x6800, 0xcb84,	0x7fff, 0xcb84,		0x21, 0
+	.dw 0x8200, 0xcb84,	0x9fff, 0xcb84,		0x21, 0
+	.dw 0xa800, 0xcb84,	0xbfff, 0xcb84,		0x21, 0
+	.dw 0xc200, 0xcb84,	0xdfff, 0xcb84,		0x21, 0
+	.dw 0xe800, 0xcb84,	0x1fff, 0xcb88,		0x21, 0
+	.dw 0x2040, 0xcb88,	0x207f, 0xcb88,		0x21, 0
+	.dw 0x20c0, 0xcb88,	0x20ff, 0xcb88,		0x21, 0
+	.dw 0x2140, 0xcb88,	0x217f, 0xcb88,		0x21, 0
+	.dw 0x21c0, 0xcb88,	0x21ff, 0xcb88,		0x21, 0
+	.dw 0x2240, 0xcb88,	0x227f, 0xcb88,		0x21, 0
+	.dw 0x22c0, 0xcb88,	0x22ff, 0xcb88,		0x21, 0
+	.dw 0x2340, 0xcb88,	0x237f, 0xcb88,		0x21, 0
+	.dw 0x23c0, 0xcb88,	0x23ff, 0xcb88,		0x21, 0
+	.dw 0x2440, 0xcb88,	0x247f, 0xcb88,		0x21, 0
+	.dw 0x24c0, 0xcb88,	0x24ff, 0xcb88,		0x21, 0
+	.dw 0x2540, 0xcb88,	0x257f, 0xcb88,		0x21, 0
+	.dw 0x25c0, 0xcb88,	0x25ff, 0xcb88,		0x21, 0
+	.dw 0x2640, 0xcb88,	0x267f, 0xcb88,		0x21, 0
+	.dw 0x26c0, 0xcb88,	0x26ff, 0xcb88,		0x21, 0
+	.dw 0x2740, 0xcb88,	0x277f, 0xcb88,		0x21, 0
+	.dw 0x27c0, 0xcb88,	0xffff, 0xcb8b,		0x21, 0
+	.dw 0x0040, 0xcb8c,	0x007f, 0xcb8c,		0x21, 0
+	.dw 0x00c0, 0xcb8c,	0x00ff, 0xcb8c,		0x21, 0
+	.dw 0x0140, 0xcb8c,	0x017f, 0xcb8c,		0x21, 0
+	.dw 0x01c0, 0xcb8c,	0x1fff, 0xcb8c,		0x21, 0
+	.dw 0x2040, 0xcb8c,	0x207f, 0xcb8c,		0x21, 0
+	.dw 0x20c0, 0xcb8c,	0x20ff, 0xcb8c,		0x21, 0
+	.dw 0x2140, 0xcb8c,	0x217f, 0xcb8c,		0x21, 0
+	.dw 0x21c0, 0xcb8c,	0x21ff, 0xcb8c,		0x21, 0
+	.dw 0x2240, 0xcb8c,	0x227f, 0xcb8c,		0x21, 0
+	.dw 0x22c0, 0xcb8c,	0x22ff, 0xcb8c,		0x21, 0
+	.dw 0x2340, 0xcb8c,	0x237f, 0xcb8c,		0x21, 0
+	.dw 0x23c0, 0xcb8c,	0x23ff, 0xcb8c,		0x21, 0
+	.dw 0x2440, 0xcb8c,	0x247f, 0xcb8c,		0x21, 0
+	.dw 0x24c0, 0xcb8c,	0x24ff, 0xcb8c,		0x21, 0
+	.dw 0x2540, 0xcb8c,	0x257f, 0xcb8c,		0x21, 0
+	.dw 0x25c0, 0xcb8c,	0x25ff, 0xcb8c,		0x21, 0
+	.dw 0x2640, 0xcb8c,	0x267f, 0xcb8c,		0x21, 0
+	.dw 0x26c0, 0xcb8c,	0x26ff, 0xcb8c,		0x21, 0
+	.dw 0x2740, 0xcb8c,	0x277f, 0xcb8c,		0x21, 0
+	.dw 0x27c0, 0xcb8c,	0x3fff, 0xcb8c,		0x21, 0
+	.dw 0x4040, 0xcb8c,	0x407f, 0xcb8c,		0x21, 0
+	.dw 0x40c0, 0xcb8c,	0x40ff, 0xcb8c,		0x21, 0
+	.dw 0x4140, 0xcb8c,	0x417f, 0xcb8c,		0x21, 0
+	.dw 0x41c0, 0xcb8c,	0x5fff, 0xcb8c,		0x21, 0
+	.dw 0x6040, 0xcb8c,	0x607f, 0xcb8c,		0x21, 0
+	.dw 0x60c0, 0xcb8c,	0x60ff, 0xcb8c,		0x21, 0
+	.dw 0x6140, 0xcb8c,	0x617f, 0xcb8c,		0x21, 0
+	.dw 0x61c0, 0xcb8c,	0x61ff, 0xcb8c,		0x21, 0
+	.dw 0x6240, 0xcb8c,	0x627f, 0xcb8c,		0x21, 0
+	.dw 0x62c0, 0xcb8c,	0x62ff, 0xcb8c,		0x21, 0
+	.dw 0x6340, 0xcb8c,	0x637f, 0xcb8c,		0x21, 0
+	.dw 0x63c0, 0xcb8c,	0x63ff, 0xcb8c,		0x21, 0
+	.dw 0x6440, 0xcb8c,	0x647f, 0xcb8c,		0x21, 0
+	.dw 0x64c0, 0xcb8c,	0x64ff, 0xcb8c,		0x21, 0
+	.dw 0x6540, 0xcb8c,	0x657f, 0xcb8c,		0x21, 0
+	.dw 0x65c0, 0xcb8c,	0x65ff, 0xcb8c,		0x21, 0
+	.dw 0x6640, 0xcb8c,	0x667f, 0xcb8c,		0x21, 0
+	.dw 0x66c0, 0xcb8c,	0x66ff, 0xcb8c,		0x21, 0
+	.dw 0x6740, 0xcb8c,	0x677f, 0xcb8c,		0x21, 0
+	.dw 0x67c0, 0xcb8c,	0x7fff, 0xcb8c,		0x21, 0
+	.dw 0x8040, 0xcb8c,	0x807f, 0xcb8c,		0x21, 0
+	.dw 0x80c0, 0xcb8c,	0x80ff, 0xcb8c,		0x21, 0
+	.dw 0x8140, 0xcb8c,	0x817f, 0xcb8c,		0x21, 0
+	.dw 0x81c0, 0xcb8c,	0x9fff, 0xcb8c,		0x21, 0
+	.dw 0xa040, 0xcb8c,	0xa07f, 0xcb8c,		0x21, 0
+	.dw 0xa0c0, 0xcb8c,	0xa0ff, 0xcb8c,		0x21, 0
+	.dw 0xa140, 0xcb8c,	0xa17f, 0xcb8c,		0x21, 0
+	.dw 0xa1c0, 0xcb8c,	0xa1ff, 0xcb8c,		0x21, 0
+	.dw 0xa240, 0xcb8c,	0xa27f, 0xcb8c,		0x21, 0
+	.dw 0xa2c0, 0xcb8c,	0xa2ff, 0xcb8c,		0x21, 0
+	.dw 0xa340, 0xcb8c,	0xa37f, 0xcb8c,		0x21, 0
+	.dw 0xa3c0, 0xcb8c,	0xa3ff, 0xcb8c,		0x21, 0
+	.dw 0xa440, 0xcb8c,	0xa47f, 0xcb8c,		0x21, 0
+	.dw 0xa4c0, 0xcb8c,	0xa4ff, 0xcb8c,		0x21, 0
+	.dw 0xa540, 0xcb8c,	0xa57f, 0xcb8c,		0x21, 0
+	.dw 0xa5c0, 0xcb8c,	0xa5ff, 0xcb8c,		0x21, 0
+	.dw 0xa640, 0xcb8c,	0xa67f, 0xcb8c,		0x21, 0
+	.dw 0xa6c0, 0xcb8c,	0xa6ff, 0xcb8c,		0x21, 0
+	.dw 0xa740, 0xcb8c,	0xa77f, 0xcb8c,		0x21, 0
+	.dw 0xa7c0, 0xcb8c,	0xbfff, 0xcb8c,		0x21, 0
+	.dw 0xc040, 0xcb8c,	0xc07f, 0xcb8c,		0x21, 0
+	.dw 0xc0c0, 0xcb8c,	0xc0ff, 0xcb8c,		0x21, 0
+	.dw 0xc140, 0xcb8c,	0xc17f, 0xcb8c,		0x21, 0
+	.dw 0xc1c0, 0xcb8c,	0xdfff, 0xcb8c,		0x21, 0
+	.dw 0xe040, 0xcb8c,	0xe07f, 0xcb8c,		0x21, 0
+	.dw 0xe0c0, 0xcb8c,	0xe0ff, 0xcb8c,		0x21, 0
+	.dw 0xe140, 0xcb8c,	0xe17f, 0xcb8c,		0x21, 0
+	.dw 0xe1c0, 0xcb8c,	0xe1ff, 0xcb8c,		0x21, 0
+	.dw 0xe240, 0xcb8c,	0xe27f, 0xcb8c,		0x21, 0
+	.dw 0xe2c0, 0xcb8c,	0xe2ff, 0xcb8c,		0x21, 0
+	.dw 0xe340, 0xcb8c,	0xe37f, 0xcb8c,		0x21, 0
+	.dw 0xe3c0, 0xcb8c,	0xe3ff, 0xcb8c,		0x21, 0
+	.dw 0xe440, 0xcb8c,	0xe47f, 0xcb8c,		0x21, 0
+	.dw 0xe4c0, 0xcb8c,	0xe4ff, 0xcb8c,		0x21, 0
+	.dw 0xe540, 0xcb8c,	0xe57f, 0xcb8c,		0x21, 0
+	.dw 0xe5c0, 0xcb8c,	0xe5ff, 0xcb8c,		0x21, 0
+	.dw 0xe640, 0xcb8c,	0xe67f, 0xcb8c,		0x21, 0
+	.dw 0xe6c0, 0xcb8c,	0xe6ff, 0xcb8c,		0x21, 0
+	.dw 0xe740, 0xcb8c,	0xe77f, 0xcb8c,		0x21, 0
+	.dw 0xe7c0, 0xcb8c,	0xffff, 0xcb93,		0x21, 0
+	.dw 0x0200, 0xcb94,	0x1fff, 0xcb94,		0x21, 0
+	.dw 0x2800, 0xcb94,	0x3fff, 0xcb94,		0x21, 0
+	.dw 0x4200, 0xcb94,	0x5fff, 0xcb94,		0x21, 0
+	.dw 0x6800, 0xcb94,	0x7fff, 0xcb94,		0x21, 0
+	.dw 0x8200, 0xcb94,	0x9fff, 0xcb94,		0x21, 0
+	.dw 0xa800, 0xcb94,	0xbfff, 0xcb94,		0x21, 0
+	.dw 0xc200, 0xcb94,	0xdfff, 0xcb94,		0x21, 0
+	.dw 0xe800, 0xcb94,	0xffff, 0xcb9b,		0x21, 0
+	.dw 0x0040, 0xcb9c,	0x007f, 0xcb9c,		0x21, 0
+	.dw 0x00c0, 0xcb9c,	0x00ff, 0xcb9c,		0x21, 0
+	.dw 0x0140, 0xcb9c,	0x017f, 0xcb9c,		0x21, 0
+	.dw 0x01c0, 0xcb9c,	0x1fff, 0xcb9c,		0x21, 0
+	.dw 0x2040, 0xcb9c,	0x207f, 0xcb9c,		0x21, 0
+	.dw 0x20c0, 0xcb9c,	0x20ff, 0xcb9c,		0x21, 0
+	.dw 0x2140, 0xcb9c,	0x217f, 0xcb9c,		0x21, 0
+	.dw 0x21c0, 0xcb9c,	0x21ff, 0xcb9c,		0x21, 0
+	.dw 0x2240, 0xcb9c,	0x227f, 0xcb9c,		0x21, 0
+	.dw 0x22c0, 0xcb9c,	0x22ff, 0xcb9c,		0x21, 0
+	.dw 0x2340, 0xcb9c,	0x237f, 0xcb9c,		0x21, 0
+	.dw 0x23c0, 0xcb9c,	0x23ff, 0xcb9c,		0x21, 0
+	.dw 0x2440, 0xcb9c,	0x247f, 0xcb9c,		0x21, 0
+	.dw 0x24c0, 0xcb9c,	0x24ff, 0xcb9c,		0x21, 0
+	.dw 0x2540, 0xcb9c,	0x257f, 0xcb9c,		0x21, 0
+	.dw 0x25c0, 0xcb9c,	0x25ff, 0xcb9c,		0x21, 0
+	.dw 0x2640, 0xcb9c,	0x267f, 0xcb9c,		0x21, 0
+	.dw 0x26c0, 0xcb9c,	0x26ff, 0xcb9c,		0x21, 0
+	.dw 0x2740, 0xcb9c,	0x277f, 0xcb9c,		0x21, 0
+	.dw 0x27c0, 0xcb9c,	0x3fff, 0xcb9c,		0x21, 0
+	.dw 0x4040, 0xcb9c,	0x407f, 0xcb9c,		0x21, 0
+	.dw 0x40c0, 0xcb9c,	0x40ff, 0xcb9c,		0x21, 0
+	.dw 0x4140, 0xcb9c,	0x417f, 0xcb9c,		0x21, 0
+	.dw 0x41c0, 0xcb9c,	0x5fff, 0xcb9c,		0x21, 0
+	.dw 0x6040, 0xcb9c,	0x607f, 0xcb9c,		0x21, 0
+	.dw 0x60c0, 0xcb9c,	0x60ff, 0xcb9c,		0x21, 0
+	.dw 0x6140, 0xcb9c,	0x617f, 0xcb9c,		0x21, 0
+	.dw 0x61c0, 0xcb9c,	0x61ff, 0xcb9c,		0x21, 0
+	.dw 0x6240, 0xcb9c,	0x627f, 0xcb9c,		0x21, 0
+	.dw 0x62c0, 0xcb9c,	0x62ff, 0xcb9c,		0x21, 0
+	.dw 0x6340, 0xcb9c,	0x637f, 0xcb9c,		0x21, 0
+	.dw 0x63c0, 0xcb9c,	0x63ff, 0xcb9c,		0x21, 0
+	.dw 0x6440, 0xcb9c,	0x647f, 0xcb9c,		0x21, 0
+	.dw 0x64c0, 0xcb9c,	0x64ff, 0xcb9c,		0x21, 0
+	.dw 0x6540, 0xcb9c,	0x657f, 0xcb9c,		0x21, 0
+	.dw 0x65c0, 0xcb9c,	0x65ff, 0xcb9c,		0x21, 0
+	.dw 0x6640, 0xcb9c,	0x667f, 0xcb9c,		0x21, 0
+	.dw 0x66c0, 0xcb9c,	0x66ff, 0xcb9c,		0x21, 0
+	.dw 0x6740, 0xcb9c,	0x677f, 0xcb9c,		0x21, 0
+	.dw 0x67c0, 0xcb9c,	0x7fff, 0xcb9c,		0x21, 0
+	.dw 0x8040, 0xcb9c,	0x807f, 0xcb9c,		0x21, 0
+	.dw 0x80c0, 0xcb9c,	0x80ff, 0xcb9c,		0x21, 0
+	.dw 0x8140, 0xcb9c,	0x817f, 0xcb9c,		0x21, 0
+	.dw 0x81c0, 0xcb9c,	0x9fff, 0xcb9c,		0x21, 0
+	.dw 0xa040, 0xcb9c,	0xa07f, 0xcb9c,		0x21, 0
+	.dw 0xa0c0, 0xcb9c,	0xa0ff, 0xcb9c,		0x21, 0
+	.dw 0xa140, 0xcb9c,	0xa17f, 0xcb9c,		0x21, 0
+	.dw 0xa1c0, 0xcb9c,	0xa1ff, 0xcb9c,		0x21, 0
+	.dw 0xa240, 0xcb9c,	0xa27f, 0xcb9c,		0x21, 0
+	.dw 0xa2c0, 0xcb9c,	0xa2ff, 0xcb9c,		0x21, 0
+	.dw 0xa340, 0xcb9c,	0xa37f, 0xcb9c,		0x21, 0
+	.dw 0xa3c0, 0xcb9c,	0xa3ff, 0xcb9c,		0x21, 0
+	.dw 0xa440, 0xcb9c,	0xa47f, 0xcb9c,		0x21, 0
+	.dw 0xa4c0, 0xcb9c,	0xa4ff, 0xcb9c,		0x21, 0
+	.dw 0xa540, 0xcb9c,	0xa57f, 0xcb9c,		0x21, 0
+	.dw 0xa5c0, 0xcb9c,	0xa5ff, 0xcb9c,		0x21, 0
+	.dw 0xa640, 0xcb9c,	0xa67f, 0xcb9c,		0x21, 0
+	.dw 0xa6c0, 0xcb9c,	0xa6ff, 0xcb9c,		0x21, 0
+	.dw 0xa740, 0xcb9c,	0xa77f, 0xcb9c,		0x21, 0
+	.dw 0xa7c0, 0xcb9c,	0xbfff, 0xcb9c,		0x21, 0
+	.dw 0xc040, 0xcb9c,	0xc07f, 0xcb9c,		0x21, 0
+	.dw 0xc0c0, 0xcb9c,	0xc0ff, 0xcb9c,		0x21, 0
+	.dw 0xc140, 0xcb9c,	0xc17f, 0xcb9c,		0x21, 0
+	.dw 0xc1c0, 0xcb9c,	0xdfff, 0xcb9c,		0x21, 0
+	.dw 0xe040, 0xcb9c,	0xe07f, 0xcb9c,		0x21, 0
+	.dw 0xe0c0, 0xcb9c,	0xe0ff, 0xcb9c,		0x21, 0
+	.dw 0xe140, 0xcb9c,	0xe17f, 0xcb9c,		0x21, 0
+	.dw 0xe1c0, 0xcb9c,	0xe1ff, 0xcb9c,		0x21, 0
+	.dw 0xe240, 0xcb9c,	0xe27f, 0xcb9c,		0x21, 0
+	.dw 0xe2c0, 0xcb9c,	0xe2ff, 0xcb9c,		0x21, 0
+	.dw 0xe340, 0xcb9c,	0xe37f, 0xcb9c,		0x21, 0
+	.dw 0xe3c0, 0xcb9c,	0xe3ff, 0xcb9c,		0x21, 0
+	.dw 0xe440, 0xcb9c,	0xe47f, 0xcb9c,		0x21, 0
+	.dw 0xe4c0, 0xcb9c,	0xe4ff, 0xcb9c,		0x21, 0
+	.dw 0xe540, 0xcb9c,	0xe57f, 0xcb9c,		0x21, 0
+	.dw 0xe5c0, 0xcb9c,	0xe5ff, 0xcb9c,		0x21, 0
+	.dw 0xe640, 0xcb9c,	0xe67f, 0xcb9c,		0x21, 0
+	.dw 0xe6c0, 0xcb9c,	0xe6ff, 0xcb9c,		0x21, 0
+	.dw 0xe740, 0xcb9c,	0xe77f, 0xcb9c,		0x21, 0
+	.dw 0xe7c0, 0xcb9c,	0xffff, 0xcbff,		0x21, 0
+	.dw 0x0000, 0xcc01,	0x003f, 0xcc01,		0x22, 0
+	.dw 0x0240, 0xcc01,	0x027f, 0xcc01,		0x22, 0
+	.dw 0x0480, 0xcc01,	0x04bf, 0xcc01,		0x22, 0
+	.dw 0x06c0, 0xcc01,	0x06ff, 0xcc01,		0x22, 0
+	.dw 0x0900, 0xcc01,	0x093f, 0xcc01,		0x22, 0
+	.dw 0x0b40, 0xcc01,	0x0b7f, 0xcc01,		0x22, 0
+	.dw 0x0d80, 0xcc01,	0x0dbf, 0xcc01,		0x22, 0
+	.dw 0x0fc0, 0xcc01,	0x103f, 0xcc01,		0x22, 0
+	.dw 0x1240, 0xcc01,	0x127f, 0xcc01,		0x22, 0
+	.dw 0x1480, 0xcc01,	0x14bf, 0xcc01,		0x22, 0
+	.dw 0x16c0, 0xcc01,	0x16ff, 0xcc01,		0x22, 0
+	.dw 0x1900, 0xcc01,	0x193f, 0xcc01,		0x22, 0
+	.dw 0x1b40, 0xcc01,	0x1b7f, 0xcc01,		0x22, 0
+	.dw 0x1d80, 0xcc01,	0x1dbf, 0xcc01,		0x22, 0
+	.dw 0x1fc0, 0xcc01,	0x203f, 0xcc01,		0x22, 0
+	.dw 0x2240, 0xcc01,	0x227f, 0xcc01,		0x22, 0
+	.dw 0x2480, 0xcc01,	0x24bf, 0xcc01,		0x22, 0
+	.dw 0x26c0, 0xcc01,	0x26ff, 0xcc01,		0x22, 0
+	.dw 0x2900, 0xcc01,	0x293f, 0xcc01,		0x22, 0
+	.dw 0x2b40, 0xcc01,	0x2b7f, 0xcc01,		0x22, 0
+	.dw 0x2d80, 0xcc01,	0x2dbf, 0xcc01,		0x22, 0
+	.dw 0x2fc0, 0xcc01,	0x303f, 0xcc01,		0x22, 0
+	.dw 0x3240, 0xcc01,	0x327f, 0xcc01,		0x22, 0
+	.dw 0x3480, 0xcc01,	0x34bf, 0xcc01,		0x22, 0
+	.dw 0x36c0, 0xcc01,	0x36ff, 0xcc01,		0x22, 0
+	.dw 0x3900, 0xcc01,	0x393f, 0xcc01,		0x22, 0
+	.dw 0x3b40, 0xcc01,	0x3b7f, 0xcc01,		0x22, 0
+	.dw 0x3d80, 0xcc01,	0x3dbf, 0xcc01,		0x22, 0
+	.dw 0x3fc0, 0xcc01,	0x3fff, 0xcc01,		0x22, 0
+	.dw 0x4000, 0xcc01,	0x7fff, 0xcc01,		0x21, 0
+	.dw 0x8000, 0xcc01,	0x803f, 0xcc01,		0x22, 0
+	.dw 0x8240, 0xcc01,	0x827f, 0xcc01,		0x22, 0
+	.dw 0x8480, 0xcc01,	0x84bf, 0xcc01,		0x22, 0
+	.dw 0x86c0, 0xcc01,	0x86ff, 0xcc01,		0x22, 0
+	.dw 0x8900, 0xcc01,	0x893f, 0xcc01,		0x22, 0
+	.dw 0x8b40, 0xcc01,	0x8b7f, 0xcc01,		0x22, 0
+	.dw 0x8d80, 0xcc01,	0x8dbf, 0xcc01,		0x22, 0
+	.dw 0x8fc0, 0xcc01,	0x903f, 0xcc01,		0x22, 0
+	.dw 0x9240, 0xcc01,	0x927f, 0xcc01,		0x22, 0
+	.dw 0x9480, 0xcc01,	0x94bf, 0xcc01,		0x22, 0
+	.dw 0x96c0, 0xcc01,	0x96ff, 0xcc01,		0x22, 0
+	.dw 0x9900, 0xcc01,	0x993f, 0xcc01,		0x22, 0
+	.dw 0x9b40, 0xcc01,	0x9b7f, 0xcc01,		0x22, 0
+	.dw 0x9d80, 0xcc01,	0x9dbf, 0xcc01,		0x22, 0
+	.dw 0x9fc0, 0xcc01,	0xa03f, 0xcc01,		0x22, 0
+	.dw 0xa240, 0xcc01,	0xa27f, 0xcc01,		0x22, 0
+	.dw 0xa480, 0xcc01,	0xa4bf, 0xcc01,		0x22, 0
+	.dw 0xa6c0, 0xcc01,	0xa6ff, 0xcc01,		0x22, 0
+	.dw 0xa900, 0xcc01,	0xa93f, 0xcc01,		0x22, 0
+	.dw 0xab40, 0xcc01,	0xab7f, 0xcc01,		0x22, 0
+	.dw 0xad80, 0xcc01,	0xadbf, 0xcc01,		0x22, 0
+	.dw 0xafc0, 0xcc01,	0xb03f, 0xcc01,		0x22, 0
+	.dw 0xb240, 0xcc01,	0xb27f, 0xcc01,		0x22, 0
+	.dw 0xb480, 0xcc01,	0xb4bf, 0xcc01,		0x22, 0
+	.dw 0xb6c0, 0xcc01,	0xb6ff, 0xcc01,		0x22, 0
+	.dw 0xb900, 0xcc01,	0xb93f, 0xcc01,		0x22, 0
+	.dw 0xbb40, 0xcc01,	0xbb7f, 0xcc01,		0x22, 0
+	.dw 0xbd80, 0xcc01,	0xbdbf, 0xcc01,		0x22, 0
+	.dw 0xbfc0, 0xcc01,	0xc03f, 0xcc01,		0x22, 0
+	.dw 0xc240, 0xcc01,	0xc27f, 0xcc01,		0x22, 0
+	.dw 0xc480, 0xcc01,	0xc4bf, 0xcc01,		0x22, 0
+	.dw 0xc6c0, 0xcc01,	0xc6ff, 0xcc01,		0x22, 0
+	.dw 0xc900, 0xcc01,	0xc93f, 0xcc01,		0x22, 0
+	.dw 0xcb40, 0xcc01,	0xcb7f, 0xcc01,		0x22, 0
+	.dw 0xcd80, 0xcc01,	0xcdbf, 0xcc01,		0x22, 0
+	.dw 0xcfc0, 0xcc01,	0xd03f, 0xcc01,		0x22, 0
+	.dw 0xd240, 0xcc01,	0xd27f, 0xcc01,		0x22, 0
+	.dw 0xd480, 0xcc01,	0xd4bf, 0xcc01,		0x22, 0
+	.dw 0xd6c0, 0xcc01,	0xd6ff, 0xcc01,		0x22, 0
+	.dw 0xd900, 0xcc01,	0xd93f, 0xcc01,		0x22, 0
+	.dw 0xdb40, 0xcc01,	0xdb7f, 0xcc01,		0x22, 0
+	.dw 0xdd80, 0xcc01,	0xddbf, 0xcc01,		0x22, 0
+	.dw 0xdfc0, 0xcc01,	0xe03f, 0xcc01,		0x22, 0
+	.dw 0xe240, 0xcc01,	0xe27f, 0xcc01,		0x22, 0
+	.dw 0xe480, 0xcc01,	0xe4bf, 0xcc01,		0x22, 0
+	.dw 0xe6c0, 0xcc01,	0xe6ff, 0xcc01,		0x22, 0
+	.dw 0xe900, 0xcc01,	0xe93f, 0xcc01,		0x22, 0
+	.dw 0xeb40, 0xcc01,	0xeb7f, 0xcc01,		0x22, 0
+	.dw 0xed80, 0xcc01,	0xedbf, 0xcc01,		0x22, 0
+	.dw 0xefc0, 0xcc01,	0xf03f, 0xcc01,		0x22, 0
+	.dw 0xf240, 0xcc01,	0xf27f, 0xcc01,		0x22, 0
+	.dw 0xf480, 0xcc01,	0xf4bf, 0xcc01,		0x22, 0
+	.dw 0xf6c0, 0xcc01,	0xf6ff, 0xcc01,		0x22, 0
+	.dw 0xf900, 0xcc01,	0xf93f, 0xcc01,		0x22, 0
+	.dw 0xfb40, 0xcc01,	0xfb7f, 0xcc01,		0x22, 0
+	.dw 0xfd80, 0xcc01,	0xfdbf, 0xcc01,		0x22, 0
+	.dw 0xffc0, 0xcc01,	0xffff, 0xcc01,		0x22, 0
+	.dw 0x1000, 0xcc02,	0x1fff, 0xcc02,		0x21, 0
+	.dw 0x3000, 0xcc02,	0x3fff, 0xcc02,		0x21, 0
+	.dw 0x5000, 0xcc02,	0x5fff, 0xcc02,		0x21, 0
+	.dw 0x7000, 0xcc02,	0x7fff, 0xcc02,		0x21, 0
+	.dw 0x9000, 0xcc02,	0x9fff, 0xcc02,		0x21, 0
+	.dw 0xb000, 0xcc02,	0xbfff, 0xcc02,		0x21, 0
+	.dw 0xd000, 0xcc02,	0xdfff, 0xcc02,		0x21, 0
+	.dw 0xf000, 0xcc02,	0xffff, 0xcc02,		0x21, 0
+	.dw 0x1000, 0xcc03,	0x1fff, 0xcc03,		0x21, 0
+	.dw 0x3000, 0xcc03,	0x3fff, 0xcc03,		0x21, 0
+	.dw 0x5000, 0xcc03,	0x5fff, 0xcc03,		0x21, 0
+	.dw 0x7000, 0xcc03,	0x7fff, 0xcc03,		0x21, 0
+	.dw 0x9000, 0xcc03,	0x9fff, 0xcc03,		0x21, 0
+	.dw 0xb000, 0xcc03,	0xbfff, 0xcc03,		0x21, 0
+	.dw 0xd000, 0xcc03,	0xdfff, 0xcc03,		0x21, 0
+	.dw 0xf000, 0xcc03,	0xffff, 0xcc03,		0x21, 0
+	.dw 0x1000, 0xcc04,	0x1fff, 0xcc04,		0x21, 0
+	.dw 0x3000, 0xcc04,	0x3fff, 0xcc04,		0x21, 0
+	.dw 0x5000, 0xcc04,	0x5fff, 0xcc04,		0x21, 0
+	.dw 0x7000, 0xcc04,	0x7fff, 0xcc04,		0x21, 0
+	.dw 0x8000, 0xcc04,	0x803f, 0xcc04,		0x22, 0
+	.dw 0x8240, 0xcc04,	0x827f, 0xcc04,		0x22, 0
+	.dw 0x8480, 0xcc04,	0x84bf, 0xcc04,		0x22, 0
+	.dw 0x86c0, 0xcc04,	0x86ff, 0xcc04,		0x22, 0
+	.dw 0x8900, 0xcc04,	0x893f, 0xcc04,		0x22, 0
+	.dw 0x8b40, 0xcc04,	0x8b7f, 0xcc04,		0x22, 0
+	.dw 0x8d80, 0xcc04,	0x8dbf, 0xcc04,		0x22, 0
+	.dw 0x8fc0, 0xcc04,	0x8fff, 0xcc04,		0x22, 0
+	.dw 0x9000, 0xcc04,	0x9fff, 0xcc04,		0x21, 0
+	.dw 0xa000, 0xcc04,	0xa03f, 0xcc04,		0x22, 0
+	.dw 0xa240, 0xcc04,	0xa27f, 0xcc04,		0x22, 0
+	.dw 0xa480, 0xcc04,	0xa4bf, 0xcc04,		0x22, 0
+	.dw 0xa6c0, 0xcc04,	0xa6ff, 0xcc04,		0x22, 0
+	.dw 0xa900, 0xcc04,	0xa93f, 0xcc04,		0x22, 0
+	.dw 0xab40, 0xcc04,	0xab7f, 0xcc04,		0x22, 0
+	.dw 0xad80, 0xcc04,	0xadbf, 0xcc04,		0x22, 0
+	.dw 0xafc0, 0xcc04,	0xafff, 0xcc04,		0x22, 0
+	.dw 0xb000, 0xcc04,	0xffff, 0xcc04,		0x21, 0
+	.dw 0x1000, 0xcc05,	0x3fff, 0xcc05,		0x21, 0
+	.dw 0x5000, 0xcc05,	0x8fff, 0xcc05,		0x21, 0
+	.dw 0xa000, 0xcc05,	0xcfff, 0xcc05,		0x21, 0
+	.dw 0xe000, 0xcc05,	0xffff, 0xcc05,		0x21, 0
+	.dw 0x1000, 0xcc06,	0x3fff, 0xcc06,		0x21, 0
+	.dw 0x5000, 0xcc06,	0x7fff, 0xcc06,		0x21, 0
+	.dw 0x9000, 0xcc06,	0xffff, 0xcc06,		0x21, 0
+	.dw 0x1000, 0xcc07,	0x3fff, 0xcc07,		0x21, 0
+	.dw 0x5000, 0xcc07,	0x7fff, 0xcc07,		0x21, 0
+	.dw 0x9000, 0xcc07,	0xbfff, 0xcc07,		0x21, 0
+	.dw 0xd000, 0xcc07,	0xdfff, 0xcc07,		0x21, 0
+	.dw 0xf000, 0xcc07,	0xffff, 0xcc07,		0x21, 0
+	.dw 0x1000, 0xcc08,	0x1fff, 0xcc08,		0x21, 0
+	.dw 0x3000, 0xcc08,	0x3fff, 0xcc08,		0x21, 0
+	.dw 0x5000, 0xcc08,	0x5fff, 0xcc08,		0x21, 0
+	.dw 0x7000, 0xcc08,	0x7fff, 0xcc08,		0x21, 0
+	.dw 0x9000, 0xcc08,	0x9fff, 0xcc08,		0x21, 0
+	.dw 0xb000, 0xcc08,	0xbfff, 0xcc08,		0x21, 0
+	.dw 0xd000, 0xcc08,	0xdfff, 0xcc08,		0x21, 0
+	.dw 0xf000, 0xcc08,	0xffff, 0xcc08,		0x21, 0
+	.dw 0x1000, 0xcc09,	0x1fff, 0xcc09,		0x21, 0
+	.dw 0x3000, 0xcc09,	0x3fff, 0xcc09,		0x21, 0
+	.dw 0x5000, 0xcc09,	0x7fff, 0xcc09,		0x21, 0
+	.dw 0x9000, 0xcc09,	0x9fff, 0xcc09,		0x21, 0
+	.dw 0xb000, 0xcc09,	0xbfff, 0xcc09,		0x21, 0
+	.dw 0xd000, 0xcc09,	0xffff, 0xcc09,		0x21, 0
+	.dw 0x1000, 0xcc0a,	0x3fff, 0xcc0a,		0x21, 0
+	.dw 0x5000, 0xcc0a,	0xffff, 0xcc0a,		0x21, 0
+	.dw 0x1000, 0xcc0b,	0x3fff, 0xcc0b,		0x21, 0
+	.dw 0x5000, 0xcc0b,	0x7fff, 0xcc0b,		0x21, 0
+	.dw 0x9000, 0xcc0b,	0x9fff, 0xcc0b,		0x21, 0
+	.dw 0xb000, 0xcc0b,	0xbfff, 0xcc0b,		0x21, 0
+	.dw 0xd000, 0xcc0b,	0xdfff, 0xcc0b,		0x21, 0
+	.dw 0xf000, 0xcc0b,	0xffff, 0xcc0b,		0x21, 0
+	.dw 0x1000, 0xcc0c,	0x3fff, 0xcc0c,		0x21, 0
+	.dw 0x4000, 0xcc0c,	0x403f, 0xcc0c,		0x22, 0
+	.dw 0x4240, 0xcc0c,	0x427f, 0xcc0c,		0x22, 0
+	.dw 0x4480, 0xcc0c,	0x44bf, 0xcc0c,		0x22, 0
+	.dw 0x46c0, 0xcc0c,	0x46ff, 0xcc0c,		0x22, 0
+	.dw 0x4900, 0xcc0c,	0x493f, 0xcc0c,		0x22, 0
+	.dw 0x4b40, 0xcc0c,	0x4b7f, 0xcc0c,		0x22, 0
+	.dw 0x4d80, 0xcc0c,	0x4dbf, 0xcc0c,		0x22, 0
+	.dw 0x4fc0, 0xcc0c,	0x4fff, 0xcc0c,		0x22, 0
+	.dw 0x5000, 0xcc0c,	0xbfff, 0xcc0c,		0x21, 0
+	.dw 0xd000, 0xcc0c,	0xffff, 0xcc0c,		0x21, 0
+	.dw 0x0000, 0xcc0d,	0x0fff, 0xcc0d,		0x22, 0
+	.dw 0x1000, 0xcc0d,	0x3fff, 0xcc0d,		0x21, 0
+	.dw 0x4000, 0xcc0d,	0x4fff, 0xcc0d,		0x22, 0
+	.dw 0x5000, 0xcc0d,	0x7fff, 0xcc0d,		0x21, 0
+	.dw 0x8000, 0xcc0d,	0x8fff, 0xcc0d,		0x22, 0
+	.dw 0x9000, 0xcc0d,	0xbfff, 0xcc0d,		0x21, 0
+	.dw 0xc000, 0xcc0d,	0xcfff, 0xcc0d,		0x22, 0
+	.dw 0xd000, 0xcc0d,	0xffff, 0xcc0d,		0x21, 0
+	.dw 0x1000, 0xcc0e,	0x3fff, 0xcc0e,		0x21, 0
+	.dw 0x5000, 0xcc0e,	0xbfff, 0xcc0e,		0x21, 0
+	.dw 0xd000, 0xcc0e,	0xbfff, 0xcc0f,		0x21, 0
+	.dw 0xd000, 0xcc0f,	0xffff, 0xcc0f,		0x21, 0
+	.dw 0x1000, 0xcc10,	0x3fff, 0xcc10,		0x21, 0
+	.dw 0x5000, 0xcc10,	0xbfff, 0xcc10,		0x21, 0
+	.dw 0xd000, 0xcc10,	0xffff, 0xcc10,		0x21, 0
+	.dw 0x0000, 0xcc11,	0x003f, 0xcc11,		0x22, 0
+	.dw 0x0240, 0xcc11,	0x027f, 0xcc11,		0x22, 0
+	.dw 0x0480, 0xcc11,	0x04bf, 0xcc11,		0x22, 0
+	.dw 0x06c0, 0xcc11,	0x06ff, 0xcc11,		0x22, 0
+	.dw 0x0900, 0xcc11,	0x093f, 0xcc11,		0x22, 0
+	.dw 0x0b40, 0xcc11,	0x0b7f, 0xcc11,		0x22, 0
+	.dw 0x0d80, 0xcc11,	0x0dbf, 0xcc11,		0x22, 0
+	.dw 0x0fc0, 0xcc11,	0x0fff, 0xcc11,		0x22, 0
+	.dw 0x1000, 0xcc11,	0x1fff, 0xcc11,		0x21, 0
+	.dw 0x2000, 0xcc11,	0x203f, 0xcc11,		0x22, 0
+	.dw 0x2240, 0xcc11,	0x227f, 0xcc11,		0x22, 0
+	.dw 0x2480, 0xcc11,	0x24bf, 0xcc11,		0x22, 0
+	.dw 0x26c0, 0xcc11,	0x26ff, 0xcc11,		0x22, 0
+	.dw 0x2900, 0xcc11,	0x293f, 0xcc11,		0x22, 0
+	.dw 0x2b40, 0xcc11,	0x2b7f, 0xcc11,		0x22, 0
+	.dw 0x2d80, 0xcc11,	0x2dbf, 0xcc11,		0x22, 0
+	.dw 0x2fc0, 0xcc11,	0x2fff, 0xcc11,		0x22, 0
+	.dw 0x3000, 0xcc11,	0x3fff, 0xcc11,		0x21, 0
+	.dw 0x4000, 0xcc11,	0x403f, 0xcc11,		0x22, 0
+	.dw 0x4240, 0xcc11,	0x427f, 0xcc11,		0x22, 0
+	.dw 0x4480, 0xcc11,	0x44bf, 0xcc11,		0x22, 0
+	.dw 0x46c0, 0xcc11,	0x46ff, 0xcc11,		0x22, 0
+	.dw 0x4900, 0xcc11,	0x493f, 0xcc11,		0x22, 0
+	.dw 0x4b40, 0xcc11,	0x4b7f, 0xcc11,		0x22, 0
+	.dw 0x4d80, 0xcc11,	0x4dbf, 0xcc11,		0x22, 0
+	.dw 0x4fc0, 0xcc11,	0x4fff, 0xcc11,		0x22, 0
+	.dw 0x5000, 0xcc11,	0x5fff, 0xcc11,		0x21, 0
+	.dw 0x6000, 0xcc11,	0x603f, 0xcc11,		0x22, 0
+	.dw 0x6240, 0xcc11,	0x627f, 0xcc11,		0x22, 0
+	.dw 0x6480, 0xcc11,	0x64bf, 0xcc11,		0x22, 0
+	.dw 0x66c0, 0xcc11,	0x66ff, 0xcc11,		0x22, 0
+	.dw 0x6900, 0xcc11,	0x693f, 0xcc11,		0x22, 0
+	.dw 0x6b40, 0xcc11,	0x6b7f, 0xcc11,		0x22, 0
+	.dw 0x6d80, 0xcc11,	0x6dbf, 0xcc11,		0x22, 0
+	.dw 0x6fc0, 0xcc11,	0x6fff, 0xcc11,		0x22, 0
+	.dw 0x7000, 0xcc11,	0xffff, 0xcc11,		0x21, 0
+	.dw 0x0001, 0xcc12,	0x0001, 0xcc12,		0x21, 0
+	.dw 0x0003, 0xcc12,	0x000f, 0xcc12,		0x21, 0
+	.dw 0x0011, 0xcc12,	0x0011, 0xcc12,		0x21, 0
+	.dw 0x0013, 0xcc12,	0x003f, 0xcc12,		0x21, 0
+	.dw 0x0041, 0xcc12,	0x0041, 0xcc12,		0x21, 0
+	.dw 0x0043, 0xcc12,	0x004f, 0xcc12,		0x21, 0
+	.dw 0x0051, 0xcc12,	0x0051, 0xcc12,		0x21, 0
+	.dw 0x0053, 0xcc12,	0x007f, 0xcc12,		0x21, 0
+	.dw 0x0081, 0xcc12,	0x0081, 0xcc12,		0x21, 0
+	.dw 0x0083, 0xcc12,	0x008f, 0xcc12,		0x21, 0
+	.dw 0x0091, 0xcc12,	0x0091, 0xcc12,		0x21, 0
+	.dw 0x0093, 0xcc12,	0x00bf, 0xcc12,		0x21, 0
+	.dw 0x00c1, 0xcc12,	0x00c1, 0xcc12,		0x21, 0
+	.dw 0x00c3, 0xcc12,	0x00cf, 0xcc12,		0x21, 0
+	.dw 0x00d1, 0xcc12,	0x00d1, 0xcc12,		0x21, 0
+	.dw 0x00d3, 0xcc12,	0x00ff, 0xcc12,		0x21, 0
+	.dw 0x0101, 0xcc12,	0x0101, 0xcc12,		0x21, 0
+	.dw 0x0103, 0xcc12,	0x010f, 0xcc12,		0x21, 0
+	.dw 0x0111, 0xcc12,	0x0111, 0xcc12,		0x21, 0
+	.dw 0x0113, 0xcc12,	0x013f, 0xcc12,		0x21, 0
+	.dw 0x0141, 0xcc12,	0x0141, 0xcc12,		0x21, 0
+	.dw 0x0143, 0xcc12,	0x014f, 0xcc12,		0x21, 0
+	.dw 0x0151, 0xcc12,	0x0151, 0xcc12,		0x21, 0
+	.dw 0x0153, 0xcc12,	0x017f, 0xcc12,		0x21, 0
+	.dw 0x0181, 0xcc12,	0x0181, 0xcc12,		0x21, 0
+	.dw 0x0183, 0xcc12,	0x018f, 0xcc12,		0x21, 0
+	.dw 0x0191, 0xcc12,	0x0191, 0xcc12,		0x21, 0
+	.dw 0x0193, 0xcc12,	0x01bf, 0xcc12,		0x21, 0
+	.dw 0x01c1, 0xcc12,	0x01c1, 0xcc12,		0x21, 0
+	.dw 0x01c3, 0xcc12,	0x01cf, 0xcc12,		0x21, 0
+	.dw 0x01d1, 0xcc12,	0x01d1, 0xcc12,		0x21, 0
+	.dw 0x01d3, 0xcc12,	0x01ff, 0xcc12,		0x21, 0
+	.dw 0x0201, 0xcc12,	0x0201, 0xcc12,		0x21, 0
+	.dw 0x0203, 0xcc12,	0x020f, 0xcc12,		0x21, 0
+	.dw 0x0211, 0xcc12,	0x0211, 0xcc12,		0x21, 0
+	.dw 0x0213, 0xcc12,	0x023f, 0xcc12,		0x21, 0
+	.dw 0x0241, 0xcc12,	0x0241, 0xcc12,		0x21, 0
+	.dw 0x0243, 0xcc12,	0x024f, 0xcc12,		0x21, 0
+	.dw 0x0251, 0xcc12,	0x0251, 0xcc12,		0x21, 0
+	.dw 0x0253, 0xcc12,	0x027f, 0xcc12,		0x21, 0
+	.dw 0x0281, 0xcc12,	0x0281, 0xcc12,		0x21, 0
+	.dw 0x0283, 0xcc12,	0x028f, 0xcc12,		0x21, 0
+	.dw 0x0291, 0xcc12,	0x0291, 0xcc12,		0x21, 0
+	.dw 0x0293, 0xcc12,	0x02bf, 0xcc12,		0x21, 0
+	.dw 0x02c1, 0xcc12,	0x02c1, 0xcc12,		0x21, 0
+	.dw 0x02c3, 0xcc12,	0x02cf, 0xcc12,		0x21, 0
+	.dw 0x02d1, 0xcc12,	0x02d1, 0xcc12,		0x21, 0
+	.dw 0x02d3, 0xcc12,	0x02ff, 0xcc12,		0x21, 0
+	.dw 0x0301, 0xcc12,	0x0301, 0xcc12,		0x21, 0
+	.dw 0x0303, 0xcc12,	0x030f, 0xcc12,		0x21, 0
+	.dw 0x0311, 0xcc12,	0x0311, 0xcc12,		0x21, 0
+	.dw 0x0313, 0xcc12,	0x033f, 0xcc12,		0x21, 0
+	.dw 0x0341, 0xcc12,	0x0341, 0xcc12,		0x21, 0
+	.dw 0x0343, 0xcc12,	0x034f, 0xcc12,		0x21, 0
+	.dw 0x0351, 0xcc12,	0x0351, 0xcc12,		0x21, 0
+	.dw 0x0353, 0xcc12,	0x037f, 0xcc12,		0x21, 0
+	.dw 0x0381, 0xcc12,	0x0381, 0xcc12,		0x21, 0
+	.dw 0x0383, 0xcc12,	0x038f, 0xcc12,		0x21, 0
+	.dw 0x0391, 0xcc12,	0x0391, 0xcc12,		0x21, 0
+	.dw 0x0393, 0xcc12,	0x03bf, 0xcc12,		0x21, 0
+	.dw 0x03c1, 0xcc12,	0x03c1, 0xcc12,		0x21, 0
+	.dw 0x03c3, 0xcc12,	0x03cf, 0xcc12,		0x21, 0
+	.dw 0x03d1, 0xcc12,	0x03d1, 0xcc12,		0x21, 0
+	.dw 0x03d3, 0xcc12,	0x03ff, 0xcc12,		0x21, 0
+	.dw 0x0401, 0xcc12,	0x0401, 0xcc12,		0x21, 0
+	.dw 0x0403, 0xcc12,	0x040f, 0xcc12,		0x21, 0
+	.dw 0x0411, 0xcc12,	0x0411, 0xcc12,		0x21, 0
+	.dw 0x0413, 0xcc12,	0x043f, 0xcc12,		0x21, 0
+	.dw 0x0441, 0xcc12,	0x0441, 0xcc12,		0x21, 0
+	.dw 0x0443, 0xcc12,	0x044f, 0xcc12,		0x21, 0
+	.dw 0x0451, 0xcc12,	0x0451, 0xcc12,		0x21, 0
+	.dw 0x0453, 0xcc12,	0x047f, 0xcc12,		0x21, 0
+	.dw 0x0481, 0xcc12,	0x0481, 0xcc12,		0x21, 0
+	.dw 0x0483, 0xcc12,	0x048f, 0xcc12,		0x21, 0
+	.dw 0x0491, 0xcc12,	0x0491, 0xcc12,		0x21, 0
+	.dw 0x0493, 0xcc12,	0x04bf, 0xcc12,		0x21, 0
+	.dw 0x04c1, 0xcc12,	0x04c1, 0xcc12,		0x21, 0
+	.dw 0x04c3, 0xcc12,	0x04cf, 0xcc12,		0x21, 0
+	.dw 0x04d1, 0xcc12,	0x04d1, 0xcc12,		0x21, 0
+	.dw 0x04d3, 0xcc12,	0x04ff, 0xcc12,		0x21, 0
+	.dw 0x0501, 0xcc12,	0x0501, 0xcc12,		0x21, 0
+	.dw 0x0503, 0xcc12,	0x050f, 0xcc12,		0x21, 0
+	.dw 0x0511, 0xcc12,	0x0511, 0xcc12,		0x21, 0
+	.dw 0x0513, 0xcc12,	0x053f, 0xcc12,		0x21, 0
+	.dw 0x0541, 0xcc12,	0x0541, 0xcc12,		0x21, 0
+	.dw 0x0543, 0xcc12,	0x054f, 0xcc12,		0x21, 0
+	.dw 0x0551, 0xcc12,	0x0551, 0xcc12,		0x21, 0
+	.dw 0x0553, 0xcc12,	0x057f, 0xcc12,		0x21, 0
+	.dw 0x0581, 0xcc12,	0x0581, 0xcc12,		0x21, 0
+	.dw 0x0583, 0xcc12,	0x058f, 0xcc12,		0x21, 0
+	.dw 0x0591, 0xcc12,	0x0591, 0xcc12,		0x21, 0
+	.dw 0x0593, 0xcc12,	0x05bf, 0xcc12,		0x21, 0
+	.dw 0x05c1, 0xcc12,	0x05c1, 0xcc12,		0x21, 0
+	.dw 0x05c3, 0xcc12,	0x05cf, 0xcc12,		0x21, 0
+	.dw 0x05d1, 0xcc12,	0x05d1, 0xcc12,		0x21, 0
+	.dw 0x05d3, 0xcc12,	0x05ff, 0xcc12,		0x21, 0
+	.dw 0x0601, 0xcc12,	0x0601, 0xcc12,		0x21, 0
+	.dw 0x0603, 0xcc12,	0x060f, 0xcc12,		0x21, 0
+	.dw 0x0611, 0xcc12,	0x0611, 0xcc12,		0x21, 0
+	.dw 0x0613, 0xcc12,	0x063f, 0xcc12,		0x21, 0
+	.dw 0x0641, 0xcc12,	0x0641, 0xcc12,		0x21, 0
+	.dw 0x0643, 0xcc12,	0x064f, 0xcc12,		0x21, 0
+	.dw 0x0651, 0xcc12,	0x0651, 0xcc12,		0x21, 0
+	.dw 0x0653, 0xcc12,	0x067f, 0xcc12,		0x21, 0
+	.dw 0x0681, 0xcc12,	0x0681, 0xcc12,		0x21, 0
+	.dw 0x0683, 0xcc12,	0x068f, 0xcc12,		0x21, 0
+	.dw 0x0691, 0xcc12,	0x0691, 0xcc12,		0x21, 0
+	.dw 0x0693, 0xcc12,	0x06bf, 0xcc12,		0x21, 0
+	.dw 0x06c1, 0xcc12,	0x06c1, 0xcc12,		0x21, 0
+	.dw 0x06c3, 0xcc12,	0x06cf, 0xcc12,		0x21, 0
+	.dw 0x06d1, 0xcc12,	0x06d1, 0xcc12,		0x21, 0
+	.dw 0x06d3, 0xcc12,	0x06ff, 0xcc12,		0x21, 0
+	.dw 0x0701, 0xcc12,	0x0701, 0xcc12,		0x21, 0
+	.dw 0x0703, 0xcc12,	0x070f, 0xcc12,		0x21, 0
+	.dw 0x0711, 0xcc12,	0x0711, 0xcc12,		0x21, 0
+	.dw 0x0713, 0xcc12,	0x073f, 0xcc12,		0x21, 0
+	.dw 0x0741, 0xcc12,	0x0741, 0xcc12,		0x21, 0
+	.dw 0x0743, 0xcc12,	0x074f, 0xcc12,		0x21, 0
+	.dw 0x0751, 0xcc12,	0x0751, 0xcc12,		0x21, 0
+	.dw 0x0753, 0xcc12,	0x077f, 0xcc12,		0x21, 0
+	.dw 0x0781, 0xcc12,	0x0781, 0xcc12,		0x21, 0
+	.dw 0x0783, 0xcc12,	0x078f, 0xcc12,		0x21, 0
+	.dw 0x0791, 0xcc12,	0x0791, 0xcc12,		0x21, 0
+	.dw 0x0793, 0xcc12,	0x07bf, 0xcc12,		0x21, 0
+	.dw 0x07c1, 0xcc12,	0x07c1, 0xcc12,		0x21, 0
+	.dw 0x07c3, 0xcc12,	0x07cf, 0xcc12,		0x21, 0
+	.dw 0x07d1, 0xcc12,	0x07d1, 0xcc12,		0x21, 0
+	.dw 0x07d3, 0xcc12,	0x07ff, 0xcc12,		0x21, 0
+	.dw 0x0801, 0xcc12,	0x0801, 0xcc12,		0x21, 0
+	.dw 0x0803, 0xcc12,	0x080f, 0xcc12,		0x21, 0
+	.dw 0x0811, 0xcc12,	0x0811, 0xcc12,		0x21, 0
+	.dw 0x0813, 0xcc12,	0x083f, 0xcc12,		0x21, 0
+	.dw 0x0841, 0xcc12,	0x0841, 0xcc12,		0x21, 0
+	.dw 0x0843, 0xcc12,	0x084f, 0xcc12,		0x21, 0
+	.dw 0x0851, 0xcc12,	0x0851, 0xcc12,		0x21, 0
+	.dw 0x0853, 0xcc12,	0x087f, 0xcc12,		0x21, 0
+	.dw 0x0881, 0xcc12,	0x0881, 0xcc12,		0x21, 0
+	.dw 0x0883, 0xcc12,	0x088f, 0xcc12,		0x21, 0
+	.dw 0x0891, 0xcc12,	0x0891, 0xcc12,		0x21, 0
+	.dw 0x0893, 0xcc12,	0x08bf, 0xcc12,		0x21, 0
+	.dw 0x08c1, 0xcc12,	0x08c1, 0xcc12,		0x21, 0
+	.dw 0x08c3, 0xcc12,	0x08cf, 0xcc12,		0x21, 0
+	.dw 0x08d1, 0xcc12,	0x08d1, 0xcc12,		0x21, 0
+	.dw 0x08d3, 0xcc12,	0x08ff, 0xcc12,		0x21, 0
+	.dw 0x0901, 0xcc12,	0x0901, 0xcc12,		0x21, 0
+	.dw 0x0903, 0xcc12,	0x090f, 0xcc12,		0x21, 0
+	.dw 0x0911, 0xcc12,	0x0911, 0xcc12,		0x21, 0
+	.dw 0x0913, 0xcc12,	0x093f, 0xcc12,		0x21, 0
+	.dw 0x0941, 0xcc12,	0x0941, 0xcc12,		0x21, 0
+	.dw 0x0943, 0xcc12,	0x094f, 0xcc12,		0x21, 0
+	.dw 0x0951, 0xcc12,	0x0951, 0xcc12,		0x21, 0
+	.dw 0x0953, 0xcc12,	0x097f, 0xcc12,		0x21, 0
+	.dw 0x0981, 0xcc12,	0x0981, 0xcc12,		0x21, 0
+	.dw 0x0983, 0xcc12,	0x098f, 0xcc12,		0x21, 0
+	.dw 0x0991, 0xcc12,	0x0991, 0xcc12,		0x21, 0
+	.dw 0x0993, 0xcc12,	0x09bf, 0xcc12,		0x21, 0
+	.dw 0x09c1, 0xcc12,	0x09c1, 0xcc12,		0x21, 0
+	.dw 0x09c3, 0xcc12,	0x09cf, 0xcc12,		0x21, 0
+	.dw 0x09d1, 0xcc12,	0x09d1, 0xcc12,		0x21, 0
+	.dw 0x09d3, 0xcc12,	0x09ff, 0xcc12,		0x21, 0
+	.dw 0x0a01, 0xcc12,	0x0a01, 0xcc12,		0x21, 0
+	.dw 0x0a03, 0xcc12,	0x0a0f, 0xcc12,		0x21, 0
+	.dw 0x0a11, 0xcc12,	0x0a11, 0xcc12,		0x21, 0
+	.dw 0x0a13, 0xcc12,	0x0a3f, 0xcc12,		0x21, 0
+	.dw 0x0a41, 0xcc12,	0x0a41, 0xcc12,		0x21, 0
+	.dw 0x0a43, 0xcc12,	0x0a4f, 0xcc12,		0x21, 0
+	.dw 0x0a51, 0xcc12,	0x0a51, 0xcc12,		0x21, 0
+	.dw 0x0a53, 0xcc12,	0x0a7f, 0xcc12,		0x21, 0
+	.dw 0x0a81, 0xcc12,	0x0a81, 0xcc12,		0x21, 0
+	.dw 0x0a83, 0xcc12,	0x0a8f, 0xcc12,		0x21, 0
+	.dw 0x0a91, 0xcc12,	0x0a91, 0xcc12,		0x21, 0
+	.dw 0x0a93, 0xcc12,	0x0abf, 0xcc12,		0x21, 0
+	.dw 0x0ac1, 0xcc12,	0x0ac1, 0xcc12,		0x21, 0
+	.dw 0x0ac3, 0xcc12,	0x0acf, 0xcc12,		0x21, 0
+	.dw 0x0ad1, 0xcc12,	0x0ad1, 0xcc12,		0x21, 0
+	.dw 0x0ad3, 0xcc12,	0x0aff, 0xcc12,		0x21, 0
+	.dw 0x0b01, 0xcc12,	0x0b01, 0xcc12,		0x21, 0
+	.dw 0x0b03, 0xcc12,	0x0b0f, 0xcc12,		0x21, 0
+	.dw 0x0b11, 0xcc12,	0x0b11, 0xcc12,		0x21, 0
+	.dw 0x0b13, 0xcc12,	0x0b3f, 0xcc12,		0x21, 0
+	.dw 0x0b41, 0xcc12,	0x0b41, 0xcc12,		0x21, 0
+	.dw 0x0b43, 0xcc12,	0x0b4f, 0xcc12,		0x21, 0
+	.dw 0x0b51, 0xcc12,	0x0b51, 0xcc12,		0x21, 0
+	.dw 0x0b53, 0xcc12,	0x0b7f, 0xcc12,		0x21, 0
+	.dw 0x0b81, 0xcc12,	0x0b81, 0xcc12,		0x21, 0
+	.dw 0x0b83, 0xcc12,	0x0b8f, 0xcc12,		0x21, 0
+	.dw 0x0b91, 0xcc12,	0x0b91, 0xcc12,		0x21, 0
+	.dw 0x0b93, 0xcc12,	0x0bbf, 0xcc12,		0x21, 0
+	.dw 0x0bc1, 0xcc12,	0x0bc1, 0xcc12,		0x21, 0
+	.dw 0x0bc3, 0xcc12,	0x0bcf, 0xcc12,		0x21, 0
+	.dw 0x0bd1, 0xcc12,	0x0bd1, 0xcc12,		0x21, 0
+	.dw 0x0bd3, 0xcc12,	0x0bff, 0xcc12,		0x21, 0
+	.dw 0x0c01, 0xcc12,	0x0c01, 0xcc12,		0x21, 0
+	.dw 0x0c03, 0xcc12,	0x0c0f, 0xcc12,		0x21, 0
+	.dw 0x0c11, 0xcc12,	0x0c11, 0xcc12,		0x21, 0
+	.dw 0x0c13, 0xcc12,	0x0c3f, 0xcc12,		0x21, 0
+	.dw 0x0c41, 0xcc12,	0x0c41, 0xcc12,		0x21, 0
+	.dw 0x0c43, 0xcc12,	0x0c4f, 0xcc12,		0x21, 0
+	.dw 0x0c51, 0xcc12,	0x0c51, 0xcc12,		0x21, 0
+	.dw 0x0c53, 0xcc12,	0x0c7f, 0xcc12,		0x21, 0
+	.dw 0x0c81, 0xcc12,	0x0c81, 0xcc12,		0x21, 0
+	.dw 0x0c83, 0xcc12,	0x0c8f, 0xcc12,		0x21, 0
+	.dw 0x0c91, 0xcc12,	0x0c91, 0xcc12,		0x21, 0
+	.dw 0x0c93, 0xcc12,	0x0cbf, 0xcc12,		0x21, 0
+	.dw 0x0cc1, 0xcc12,	0x0cc1, 0xcc12,		0x21, 0
+	.dw 0x0cc3, 0xcc12,	0x0ccf, 0xcc12,		0x21, 0
+	.dw 0x0cd1, 0xcc12,	0x0cd1, 0xcc12,		0x21, 0
+	.dw 0x0cd3, 0xcc12,	0x0cff, 0xcc12,		0x21, 0
+	.dw 0x0d01, 0xcc12,	0x0d01, 0xcc12,		0x21, 0
+	.dw 0x0d03, 0xcc12,	0x0d0f, 0xcc12,		0x21, 0
+	.dw 0x0d11, 0xcc12,	0x0d11, 0xcc12,		0x21, 0
+	.dw 0x0d13, 0xcc12,	0x0d3f, 0xcc12,		0x21, 0
+	.dw 0x0d41, 0xcc12,	0x0d41, 0xcc12,		0x21, 0
+	.dw 0x0d43, 0xcc12,	0x0d4f, 0xcc12,		0x21, 0
+	.dw 0x0d51, 0xcc12,	0x0d51, 0xcc12,		0x21, 0
+	.dw 0x0d53, 0xcc12,	0x0d7f, 0xcc12,		0x21, 0
+	.dw 0x0d81, 0xcc12,	0x0d81, 0xcc12,		0x21, 0
+	.dw 0x0d83, 0xcc12,	0x0d8f, 0xcc12,		0x21, 0
+	.dw 0x0d91, 0xcc12,	0x0d91, 0xcc12,		0x21, 0
+	.dw 0x0d93, 0xcc12,	0x0dbf, 0xcc12,		0x21, 0
+	.dw 0x0dc1, 0xcc12,	0x0dc1, 0xcc12,		0x21, 0
+	.dw 0x0dc3, 0xcc12,	0x0dcf, 0xcc12,		0x21, 0
+	.dw 0x0dd1, 0xcc12,	0x0dd1, 0xcc12,		0x21, 0
+	.dw 0x0dd3, 0xcc12,	0x0dff, 0xcc12,		0x21, 0
+	.dw 0x0e01, 0xcc12,	0x0e01, 0xcc12,		0x21, 0
+	.dw 0x0e03, 0xcc12,	0x0e0f, 0xcc12,		0x21, 0
+	.dw 0x0e11, 0xcc12,	0x0e11, 0xcc12,		0x21, 0
+	.dw 0x0e13, 0xcc12,	0x0e3f, 0xcc12,		0x21, 0
+	.dw 0x0e41, 0xcc12,	0x0e41, 0xcc12,		0x21, 0
+	.dw 0x0e43, 0xcc12,	0x0e4f, 0xcc12,		0x21, 0
+	.dw 0x0e51, 0xcc12,	0x0e51, 0xcc12,		0x21, 0
+	.dw 0x0e53, 0xcc12,	0x0e7f, 0xcc12,		0x21, 0
+	.dw 0x0e81, 0xcc12,	0x0e81, 0xcc12,		0x21, 0
+	.dw 0x0e83, 0xcc12,	0x0e8f, 0xcc12,		0x21, 0
+	.dw 0x0e91, 0xcc12,	0x0e91, 0xcc12,		0x21, 0
+	.dw 0x0e93, 0xcc12,	0x0ebf, 0xcc12,		0x21, 0
+	.dw 0x0ec1, 0xcc12,	0x0ec1, 0xcc12,		0x21, 0
+	.dw 0x0ec3, 0xcc12,	0x0ecf, 0xcc12,		0x21, 0
+	.dw 0x0ed1, 0xcc12,	0x0ed1, 0xcc12,		0x21, 0
+	.dw 0x0ed3, 0xcc12,	0x0eff, 0xcc12,		0x21, 0
+	.dw 0x0f01, 0xcc12,	0x0f01, 0xcc12,		0x21, 0
+	.dw 0x0f03, 0xcc12,	0x0f0f, 0xcc12,		0x21, 0
+	.dw 0x0f11, 0xcc12,	0x0f11, 0xcc12,		0x21, 0
+	.dw 0x0f13, 0xcc12,	0x0f3f, 0xcc12,		0x21, 0
+	.dw 0x0f41, 0xcc12,	0x0f41, 0xcc12,		0x21, 0
+	.dw 0x0f43, 0xcc12,	0x0f4f, 0xcc12,		0x21, 0
+	.dw 0x0f51, 0xcc12,	0x0f51, 0xcc12,		0x21, 0
+	.dw 0x0f53, 0xcc12,	0x0f7f, 0xcc12,		0x21, 0
+	.dw 0x0f81, 0xcc12,	0x0f81, 0xcc12,		0x21, 0
+	.dw 0x0f83, 0xcc12,	0x0f8f, 0xcc12,		0x21, 0
+	.dw 0x0f91, 0xcc12,	0x0f91, 0xcc12,		0x21, 0
+	.dw 0x0f93, 0xcc12,	0x0fbf, 0xcc12,		0x21, 0
+	.dw 0x0fc1, 0xcc12,	0x0fc1, 0xcc12,		0x21, 0
+	.dw 0x0fc3, 0xcc12,	0x0fcf, 0xcc12,		0x21, 0
+	.dw 0x0fd1, 0xcc12,	0x0fd1, 0xcc12,		0x21, 0
+	.dw 0x0fd3, 0xcc12,	0x1fff, 0xcc12,		0x21, 0
+	.dw 0x2001, 0xcc12,	0x2001, 0xcc12,		0x21, 0
+	.dw 0x2003, 0xcc12,	0x200f, 0xcc12,		0x21, 0
+	.dw 0x2011, 0xcc12,	0x2011, 0xcc12,		0x21, 0
+	.dw 0x2013, 0xcc12,	0x203f, 0xcc12,		0x21, 0
+	.dw 0x2041, 0xcc12,	0x2041, 0xcc12,		0x21, 0
+	.dw 0x2043, 0xcc12,	0x204f, 0xcc12,		0x21, 0
+	.dw 0x2051, 0xcc12,	0x2051, 0xcc12,		0x21, 0
+	.dw 0x2053, 0xcc12,	0x207f, 0xcc12,		0x21, 0
+	.dw 0x2081, 0xcc12,	0x2081, 0xcc12,		0x21, 0
+	.dw 0x2083, 0xcc12,	0x208f, 0xcc12,		0x21, 0
+	.dw 0x2091, 0xcc12,	0x2091, 0xcc12,		0x21, 0
+	.dw 0x2093, 0xcc12,	0x20bf, 0xcc12,		0x21, 0
+	.dw 0x20c1, 0xcc12,	0x20c1, 0xcc12,		0x21, 0
+	.dw 0x20c3, 0xcc12,	0x20cf, 0xcc12,		0x21, 0
+	.dw 0x20d1, 0xcc12,	0x20d1, 0xcc12,		0x21, 0
+	.dw 0x20d3, 0xcc12,	0x20ff, 0xcc12,		0x21, 0
+	.dw 0x2101, 0xcc12,	0x2101, 0xcc12,		0x21, 0
+	.dw 0x2103, 0xcc12,	0x210f, 0xcc12,		0x21, 0
+	.dw 0x2111, 0xcc12,	0x2111, 0xcc12,		0x21, 0
+	.dw 0x2113, 0xcc12,	0x213f, 0xcc12,		0x21, 0
+	.dw 0x2141, 0xcc12,	0x2141, 0xcc12,		0x21, 0
+	.dw 0x2143, 0xcc12,	0x214f, 0xcc12,		0x21, 0
+	.dw 0x2151, 0xcc12,	0x2151, 0xcc12,		0x21, 0
+	.dw 0x2153, 0xcc12,	0x217f, 0xcc12,		0x21, 0
+	.dw 0x2181, 0xcc12,	0x2181, 0xcc12,		0x21, 0
+	.dw 0x2183, 0xcc12,	0x218f, 0xcc12,		0x21, 0
+	.dw 0x2191, 0xcc12,	0x2191, 0xcc12,		0x21, 0
+	.dw 0x2193, 0xcc12,	0x21bf, 0xcc12,		0x21, 0
+	.dw 0x21c1, 0xcc12,	0x21c1, 0xcc12,		0x21, 0
+	.dw 0x21c3, 0xcc12,	0x21cf, 0xcc12,		0x21, 0
+	.dw 0x21d1, 0xcc12,	0x21d1, 0xcc12,		0x21, 0
+	.dw 0x21d3, 0xcc12,	0x21ff, 0xcc12,		0x21, 0
+	.dw 0x2201, 0xcc12,	0x2201, 0xcc12,		0x21, 0
+	.dw 0x2203, 0xcc12,	0x220f, 0xcc12,		0x21, 0
+	.dw 0x2211, 0xcc12,	0x2211, 0xcc12,		0x21, 0
+	.dw 0x2213, 0xcc12,	0x223f, 0xcc12,		0x21, 0
+	.dw 0x2241, 0xcc12,	0x2241, 0xcc12,		0x21, 0
+	.dw 0x2243, 0xcc12,	0x224f, 0xcc12,		0x21, 0
+	.dw 0x2251, 0xcc12,	0x2251, 0xcc12,		0x21, 0
+	.dw 0x2253, 0xcc12,	0x227f, 0xcc12,		0x21, 0
+	.dw 0x2281, 0xcc12,	0x2281, 0xcc12,		0x21, 0
+	.dw 0x2283, 0xcc12,	0x228f, 0xcc12,		0x21, 0
+	.dw 0x2291, 0xcc12,	0x2291, 0xcc12,		0x21, 0
+	.dw 0x2293, 0xcc12,	0x22bf, 0xcc12,		0x21, 0
+	.dw 0x22c1, 0xcc12,	0x22c1, 0xcc12,		0x21, 0
+	.dw 0x22c3, 0xcc12,	0x22cf, 0xcc12,		0x21, 0
+	.dw 0x22d1, 0xcc12,	0x22d1, 0xcc12,		0x21, 0
+	.dw 0x22d3, 0xcc12,	0x22ff, 0xcc12,		0x21, 0
+	.dw 0x2301, 0xcc12,	0x2301, 0xcc12,		0x21, 0
+	.dw 0x2303, 0xcc12,	0x230f, 0xcc12,		0x21, 0
+	.dw 0x2311, 0xcc12,	0x2311, 0xcc12,		0x21, 0
+	.dw 0x2313, 0xcc12,	0x233f, 0xcc12,		0x21, 0
+	.dw 0x2341, 0xcc12,	0x2341, 0xcc12,		0x21, 0
+	.dw 0x2343, 0xcc12,	0x234f, 0xcc12,		0x21, 0
+	.dw 0x2351, 0xcc12,	0x2351, 0xcc12,		0x21, 0
+	.dw 0x2353, 0xcc12,	0x237f, 0xcc12,		0x21, 0
+	.dw 0x2381, 0xcc12,	0x2381, 0xcc12,		0x21, 0
+	.dw 0x2383, 0xcc12,	0x238f, 0xcc12,		0x21, 0
+	.dw 0x2391, 0xcc12,	0x2391, 0xcc12,		0x21, 0
+	.dw 0x2393, 0xcc12,	0x23bf, 0xcc12,		0x21, 0
+	.dw 0x23c1, 0xcc12,	0x23c1, 0xcc12,		0x21, 0
+	.dw 0x23c3, 0xcc12,	0x23cf, 0xcc12,		0x21, 0
+	.dw 0x23d1, 0xcc12,	0x23d1, 0xcc12,		0x21, 0
+	.dw 0x23d3, 0xcc12,	0x23ff, 0xcc12,		0x21, 0
+	.dw 0x2401, 0xcc12,	0x2401, 0xcc12,		0x21, 0
+	.dw 0x2403, 0xcc12,	0x240f, 0xcc12,		0x21, 0
+	.dw 0x2411, 0xcc12,	0x2411, 0xcc12,		0x21, 0
+	.dw 0x2413, 0xcc12,	0x243f, 0xcc12,		0x21, 0
+	.dw 0x2441, 0xcc12,	0x2441, 0xcc12,		0x21, 0
+	.dw 0x2443, 0xcc12,	0x244f, 0xcc12,		0x21, 0
+	.dw 0x2451, 0xcc12,	0x2451, 0xcc12,		0x21, 0
+	.dw 0x2453, 0xcc12,	0x247f, 0xcc12,		0x21, 0
+	.dw 0x2481, 0xcc12,	0x2481, 0xcc12,		0x21, 0
+	.dw 0x2483, 0xcc12,	0x248f, 0xcc12,		0x21, 0
+	.dw 0x2491, 0xcc12,	0x2491, 0xcc12,		0x21, 0
+	.dw 0x2493, 0xcc12,	0x24bf, 0xcc12,		0x21, 0
+	.dw 0x24c1, 0xcc12,	0x24c1, 0xcc12,		0x21, 0
+	.dw 0x24c3, 0xcc12,	0x24cf, 0xcc12,		0x21, 0
+	.dw 0x24d1, 0xcc12,	0x24d1, 0xcc12,		0x21, 0
+	.dw 0x24d3, 0xcc12,	0x24ff, 0xcc12,		0x21, 0
+	.dw 0x2501, 0xcc12,	0x2501, 0xcc12,		0x21, 0
+	.dw 0x2503, 0xcc12,	0x250f, 0xcc12,		0x21, 0
+	.dw 0x2511, 0xcc12,	0x2511, 0xcc12,		0x21, 0
+	.dw 0x2513, 0xcc12,	0x253f, 0xcc12,		0x21, 0
+	.dw 0x2541, 0xcc12,	0x2541, 0xcc12,		0x21, 0
+	.dw 0x2543, 0xcc12,	0x254f, 0xcc12,		0x21, 0
+	.dw 0x2551, 0xcc12,	0x2551, 0xcc12,		0x21, 0
+	.dw 0x2553, 0xcc12,	0x257f, 0xcc12,		0x21, 0
+	.dw 0x2581, 0xcc12,	0x2581, 0xcc12,		0x21, 0
+	.dw 0x2583, 0xcc12,	0x258f, 0xcc12,		0x21, 0
+	.dw 0x2591, 0xcc12,	0x2591, 0xcc12,		0x21, 0
+	.dw 0x2593, 0xcc12,	0x25bf, 0xcc12,		0x21, 0
+	.dw 0x25c1, 0xcc12,	0x25c1, 0xcc12,		0x21, 0
+	.dw 0x25c3, 0xcc12,	0x25cf, 0xcc12,		0x21, 0
+	.dw 0x25d1, 0xcc12,	0x25d1, 0xcc12,		0x21, 0
+	.dw 0x25d3, 0xcc12,	0x25ff, 0xcc12,		0x21, 0
+	.dw 0x2601, 0xcc12,	0x2601, 0xcc12,		0x21, 0
+	.dw 0x2603, 0xcc12,	0x260f, 0xcc12,		0x21, 0
+	.dw 0x2611, 0xcc12,	0x2611, 0xcc12,		0x21, 0
+	.dw 0x2613, 0xcc12,	0x263f, 0xcc12,		0x21, 0
+	.dw 0x2641, 0xcc12,	0x2641, 0xcc12,		0x21, 0
+	.dw 0x2643, 0xcc12,	0x264f, 0xcc12,		0x21, 0
+	.dw 0x2651, 0xcc12,	0x2651, 0xcc12,		0x21, 0
+	.dw 0x2653, 0xcc12,	0x267f, 0xcc12,		0x21, 0
+	.dw 0x2681, 0xcc12,	0x2681, 0xcc12,		0x21, 0
+	.dw 0x2683, 0xcc12,	0x268f, 0xcc12,		0x21, 0
+	.dw 0x2691, 0xcc12,	0x2691, 0xcc12,		0x21, 0
+	.dw 0x2693, 0xcc12,	0x26bf, 0xcc12,		0x21, 0
+	.dw 0x26c1, 0xcc12,	0x26c1, 0xcc12,		0x21, 0
+	.dw 0x26c3, 0xcc12,	0x26cf, 0xcc12,		0x21, 0
+	.dw 0x26d1, 0xcc12,	0x26d1, 0xcc12,		0x21, 0
+	.dw 0x26d3, 0xcc12,	0x26ff, 0xcc12,		0x21, 0
+	.dw 0x2701, 0xcc12,	0x2701, 0xcc12,		0x21, 0
+	.dw 0x2703, 0xcc12,	0x270f, 0xcc12,		0x21, 0
+	.dw 0x2711, 0xcc12,	0x2711, 0xcc12,		0x21, 0
+	.dw 0x2713, 0xcc12,	0x273f, 0xcc12,		0x21, 0
+	.dw 0x2741, 0xcc12,	0x2741, 0xcc12,		0x21, 0
+	.dw 0x2743, 0xcc12,	0x274f, 0xcc12,		0x21, 0
+	.dw 0x2751, 0xcc12,	0x2751, 0xcc12,		0x21, 0
+	.dw 0x2753, 0xcc12,	0x277f, 0xcc12,		0x21, 0
+	.dw 0x2781, 0xcc12,	0x2781, 0xcc12,		0x21, 0
+	.dw 0x2783, 0xcc12,	0x278f, 0xcc12,		0x21, 0
+	.dw 0x2791, 0xcc12,	0x2791, 0xcc12,		0x21, 0
+	.dw 0x2793, 0xcc12,	0x27bf, 0xcc12,		0x21, 0
+	.dw 0x27c1, 0xcc12,	0x27c1, 0xcc12,		0x21, 0
+	.dw 0x27c3, 0xcc12,	0x27cf, 0xcc12,		0x21, 0
+	.dw 0x27d1, 0xcc12,	0x27d1, 0xcc12,		0x21, 0
+	.dw 0x27d3, 0xcc12,	0x27ff, 0xcc12,		0x21, 0
+	.dw 0x2801, 0xcc12,	0x2801, 0xcc12,		0x21, 0
+	.dw 0x2803, 0xcc12,	0x280f, 0xcc12,		0x21, 0
+	.dw 0x2811, 0xcc12,	0x2811, 0xcc12,		0x21, 0
+	.dw 0x2813, 0xcc12,	0x283f, 0xcc12,		0x21, 0
+	.dw 0x2841, 0xcc12,	0x2841, 0xcc12,		0x21, 0
+	.dw 0x2843, 0xcc12,	0x284f, 0xcc12,		0x21, 0
+	.dw 0x2851, 0xcc12,	0x2851, 0xcc12,		0x21, 0
+	.dw 0x2853, 0xcc12,	0x287f, 0xcc12,		0x21, 0
+	.dw 0x2881, 0xcc12,	0x2881, 0xcc12,		0x21, 0
+	.dw 0x2883, 0xcc12,	0x288f, 0xcc12,		0x21, 0
+	.dw 0x2891, 0xcc12,	0x2891, 0xcc12,		0x21, 0
+	.dw 0x2893, 0xcc12,	0x28bf, 0xcc12,		0x21, 0
+	.dw 0x28c1, 0xcc12,	0x28c1, 0xcc12,		0x21, 0
+	.dw 0x28c3, 0xcc12,	0x28cf, 0xcc12,		0x21, 0
+	.dw 0x28d1, 0xcc12,	0x28d1, 0xcc12,		0x21, 0
+	.dw 0x28d3, 0xcc12,	0x28ff, 0xcc12,		0x21, 0
+	.dw 0x2901, 0xcc12,	0x2901, 0xcc12,		0x21, 0
+	.dw 0x2903, 0xcc12,	0x290f, 0xcc12,		0x21, 0
+	.dw 0x2911, 0xcc12,	0x2911, 0xcc12,		0x21, 0
+	.dw 0x2913, 0xcc12,	0x293f, 0xcc12,		0x21, 0
+	.dw 0x2941, 0xcc12,	0x2941, 0xcc12,		0x21, 0
+	.dw 0x2943, 0xcc12,	0x294f, 0xcc12,		0x21, 0
+	.dw 0x2951, 0xcc12,	0x2951, 0xcc12,		0x21, 0
+	.dw 0x2953, 0xcc12,	0x297f, 0xcc12,		0x21, 0
+	.dw 0x2981, 0xcc12,	0x2981, 0xcc12,		0x21, 0
+	.dw 0x2983, 0xcc12,	0x298f, 0xcc12,		0x21, 0
+	.dw 0x2991, 0xcc12,	0x2991, 0xcc12,		0x21, 0
+	.dw 0x2993, 0xcc12,	0x29bf, 0xcc12,		0x21, 0
+	.dw 0x29c1, 0xcc12,	0x29c1, 0xcc12,		0x21, 0
+	.dw 0x29c3, 0xcc12,	0x29cf, 0xcc12,		0x21, 0
+	.dw 0x29d1, 0xcc12,	0x29d1, 0xcc12,		0x21, 0
+	.dw 0x29d3, 0xcc12,	0x29ff, 0xcc12,		0x21, 0
+	.dw 0x2a01, 0xcc12,	0x2a01, 0xcc12,		0x21, 0
+	.dw 0x2a03, 0xcc12,	0x2a0f, 0xcc12,		0x21, 0
+	.dw 0x2a11, 0xcc12,	0x2a11, 0xcc12,		0x21, 0
+	.dw 0x2a13, 0xcc12,	0x2a3f, 0xcc12,		0x21, 0
+	.dw 0x2a41, 0xcc12,	0x2a41, 0xcc12,		0x21, 0
+	.dw 0x2a43, 0xcc12,	0x2a4f, 0xcc12,		0x21, 0
+	.dw 0x2a51, 0xcc12,	0x2a51, 0xcc12,		0x21, 0
+	.dw 0x2a53, 0xcc12,	0x2a7f, 0xcc12,		0x21, 0
+	.dw 0x2a81, 0xcc12,	0x2a81, 0xcc12,		0x21, 0
+	.dw 0x2a83, 0xcc12,	0x2a8f, 0xcc12,		0x21, 0
+	.dw 0x2a91, 0xcc12,	0x2a91, 0xcc12,		0x21, 0
+	.dw 0x2a93, 0xcc12,	0x2abf, 0xcc12,		0x21, 0
+	.dw 0x2ac1, 0xcc12,	0x2ac1, 0xcc12,		0x21, 0
+	.dw 0x2ac3, 0xcc12,	0x2acf, 0xcc12,		0x21, 0
+	.dw 0x2ad1, 0xcc12,	0x2ad1, 0xcc12,		0x21, 0
+	.dw 0x2ad3, 0xcc12,	0x2aff, 0xcc12,		0x21, 0
+	.dw 0x2b01, 0xcc12,	0x2b01, 0xcc12,		0x21, 0
+	.dw 0x2b03, 0xcc12,	0x2b0f, 0xcc12,		0x21, 0
+	.dw 0x2b11, 0xcc12,	0x2b11, 0xcc12,		0x21, 0
+	.dw 0x2b13, 0xcc12,	0x2b3f, 0xcc12,		0x21, 0
+	.dw 0x2b41, 0xcc12,	0x2b41, 0xcc12,		0x21, 0
+	.dw 0x2b43, 0xcc12,	0x2b4f, 0xcc12,		0x21, 0
+	.dw 0x2b51, 0xcc12,	0x2b51, 0xcc12,		0x21, 0
+	.dw 0x2b53, 0xcc12,	0x2b7f, 0xcc12,		0x21, 0
+	.dw 0x2b81, 0xcc12,	0x2b81, 0xcc12,		0x21, 0
+	.dw 0x2b83, 0xcc12,	0x2b8f, 0xcc12,		0x21, 0
+	.dw 0x2b91, 0xcc12,	0x2b91, 0xcc12,		0x21, 0
+	.dw 0x2b93, 0xcc12,	0x2bbf, 0xcc12,		0x21, 0
+	.dw 0x2bc1, 0xcc12,	0x2bc1, 0xcc12,		0x21, 0
+	.dw 0x2bc3, 0xcc12,	0x2bcf, 0xcc12,		0x21, 0
+	.dw 0x2bd1, 0xcc12,	0x2bd1, 0xcc12,		0x21, 0
+	.dw 0x2bd3, 0xcc12,	0x2bff, 0xcc12,		0x21, 0
+	.dw 0x2c01, 0xcc12,	0x2c01, 0xcc12,		0x21, 0
+	.dw 0x2c03, 0xcc12,	0x2c0f, 0xcc12,		0x21, 0
+	.dw 0x2c11, 0xcc12,	0x2c11, 0xcc12,		0x21, 0
+	.dw 0x2c13, 0xcc12,	0x2c3f, 0xcc12,		0x21, 0
+	.dw 0x2c41, 0xcc12,	0x2c41, 0xcc12,		0x21, 0
+	.dw 0x2c43, 0xcc12,	0x2c4f, 0xcc12,		0x21, 0
+	.dw 0x2c51, 0xcc12,	0x2c51, 0xcc12,		0x21, 0
+	.dw 0x2c53, 0xcc12,	0x2c7f, 0xcc12,		0x21, 0
+	.dw 0x2c81, 0xcc12,	0x2c81, 0xcc12,		0x21, 0
+	.dw 0x2c83, 0xcc12,	0x2c8f, 0xcc12,		0x21, 0
+	.dw 0x2c91, 0xcc12,	0x2c91, 0xcc12,		0x21, 0
+	.dw 0x2c93, 0xcc12,	0x2cbf, 0xcc12,		0x21, 0
+	.dw 0x2cc1, 0xcc12,	0x2cc1, 0xcc12,		0x21, 0
+	.dw 0x2cc3, 0xcc12,	0x2ccf, 0xcc12,		0x21, 0
+	.dw 0x2cd1, 0xcc12,	0x2cd1, 0xcc12,		0x21, 0
+	.dw 0x2cd3, 0xcc12,	0x2cff, 0xcc12,		0x21, 0
+	.dw 0x2d01, 0xcc12,	0x2d01, 0xcc12,		0x21, 0
+	.dw 0x2d03, 0xcc12,	0x2d0f, 0xcc12,		0x21, 0
+	.dw 0x2d11, 0xcc12,	0x2d11, 0xcc12,		0x21, 0
+	.dw 0x2d13, 0xcc12,	0x2d3f, 0xcc12,		0x21, 0
+	.dw 0x2d41, 0xcc12,	0x2d41, 0xcc12,		0x21, 0
+	.dw 0x2d43, 0xcc12,	0x2d4f, 0xcc12,		0x21, 0
+	.dw 0x2d51, 0xcc12,	0x2d51, 0xcc12,		0x21, 0
+	.dw 0x2d53, 0xcc12,	0x2d7f, 0xcc12,		0x21, 0
+	.dw 0x2d81, 0xcc12,	0x2d81, 0xcc12,		0x21, 0
+	.dw 0x2d83, 0xcc12,	0x2d8f, 0xcc12,		0x21, 0
+	.dw 0x2d91, 0xcc12,	0x2d91, 0xcc12,		0x21, 0
+	.dw 0x2d93, 0xcc12,	0x2dbf, 0xcc12,		0x21, 0
+	.dw 0x2dc1, 0xcc12,	0x2dc1, 0xcc12,		0x21, 0
+	.dw 0x2dc3, 0xcc12,	0x2dcf, 0xcc12,		0x21, 0
+	.dw 0x2dd1, 0xcc12,	0x2dd1, 0xcc12,		0x21, 0
+	.dw 0x2dd3, 0xcc12,	0x2dff, 0xcc12,		0x21, 0
+	.dw 0x2e01, 0xcc12,	0x2e01, 0xcc12,		0x21, 0
+	.dw 0x2e03, 0xcc12,	0x2e0f, 0xcc12,		0x21, 0
+	.dw 0x2e11, 0xcc12,	0x2e11, 0xcc12,		0x21, 0
+	.dw 0x2e13, 0xcc12,	0x2e3f, 0xcc12,		0x21, 0
+	.dw 0x2e41, 0xcc12,	0x2e41, 0xcc12,		0x21, 0
+	.dw 0x2e43, 0xcc12,	0x2e4f, 0xcc12,		0x21, 0
+	.dw 0x2e51, 0xcc12,	0x2e51, 0xcc12,		0x21, 0
+	.dw 0x2e53, 0xcc12,	0x2e7f, 0xcc12,		0x21, 0
+	.dw 0x2e81, 0xcc12,	0x2e81, 0xcc12,		0x21, 0
+	.dw 0x2e83, 0xcc12,	0x2e8f, 0xcc12,		0x21, 0
+	.dw 0x2e91, 0xcc12,	0x2e91, 0xcc12,		0x21, 0
+	.dw 0x2e93, 0xcc12,	0x2ebf, 0xcc12,		0x21, 0
+	.dw 0x2ec1, 0xcc12,	0x2ec1, 0xcc12,		0x21, 0
+	.dw 0x2ec3, 0xcc12,	0x2ecf, 0xcc12,		0x21, 0
+	.dw 0x2ed1, 0xcc12,	0x2ed1, 0xcc12,		0x21, 0
+	.dw 0x2ed3, 0xcc12,	0x2eff, 0xcc12,		0x21, 0
+	.dw 0x2f01, 0xcc12,	0x2f01, 0xcc12,		0x21, 0
+	.dw 0x2f03, 0xcc12,	0x2f0f, 0xcc12,		0x21, 0
+	.dw 0x2f11, 0xcc12,	0x2f11, 0xcc12,		0x21, 0
+	.dw 0x2f13, 0xcc12,	0x2f3f, 0xcc12,		0x21, 0
+	.dw 0x2f41, 0xcc12,	0x2f41, 0xcc12,		0x21, 0
+	.dw 0x2f43, 0xcc12,	0x2f4f, 0xcc12,		0x21, 0
+	.dw 0x2f51, 0xcc12,	0x2f51, 0xcc12,		0x21, 0
+	.dw 0x2f53, 0xcc12,	0x2f7f, 0xcc12,		0x21, 0
+	.dw 0x2f81, 0xcc12,	0x2f81, 0xcc12,		0x21, 0
+	.dw 0x2f83, 0xcc12,	0x2f8f, 0xcc12,		0x21, 0
+	.dw 0x2f91, 0xcc12,	0x2f91, 0xcc12,		0x21, 0
+	.dw 0x2f93, 0xcc12,	0x2fbf, 0xcc12,		0x21, 0
+	.dw 0x2fc1, 0xcc12,	0x2fc1, 0xcc12,		0x21, 0
+	.dw 0x2fc3, 0xcc12,	0x2fcf, 0xcc12,		0x21, 0
+	.dw 0x2fd1, 0xcc12,	0x2fd1, 0xcc12,		0x21, 0
+	.dw 0x2fd3, 0xcc12,	0xbfff, 0xcc12,		0x21, 0
+	.dw 0xd000, 0xcc12,	0xffff, 0xcc13,		0x21, 0
+	.dw 0x0001, 0xcc14,	0x0001, 0xcc14,		0x21, 0
+	.dw 0x0003, 0xcc14,	0x000f, 0xcc14,		0x21, 0
+	.dw 0x0011, 0xcc14,	0x0011, 0xcc14,		0x21, 0
+	.dw 0x0013, 0xcc14,	0x003f, 0xcc14,		0x21, 0
+	.dw 0x0041, 0xcc14,	0x0041, 0xcc14,		0x21, 0
+	.dw 0x0043, 0xcc14,	0x004f, 0xcc14,		0x21, 0
+	.dw 0x0051, 0xcc14,	0x0051, 0xcc14,		0x21, 0
+	.dw 0x0053, 0xcc14,	0x007f, 0xcc14,		0x21, 0
+	.dw 0x0081, 0xcc14,	0x0081, 0xcc14,		0x21, 0
+	.dw 0x0083, 0xcc14,	0x008f, 0xcc14,		0x21, 0
+	.dw 0x0091, 0xcc14,	0x0091, 0xcc14,		0x21, 0
+	.dw 0x0093, 0xcc14,	0x00bf, 0xcc14,		0x21, 0
+	.dw 0x00c1, 0xcc14,	0x00c1, 0xcc14,		0x21, 0
+	.dw 0x00c3, 0xcc14,	0x00cf, 0xcc14,		0x21, 0
+	.dw 0x00d1, 0xcc14,	0x00d1, 0xcc14,		0x21, 0
+	.dw 0x00d3, 0xcc14,	0x00ff, 0xcc14,		0x21, 0
+	.dw 0x0101, 0xcc14,	0x0101, 0xcc14,		0x21, 0
+	.dw 0x0103, 0xcc14,	0x010f, 0xcc14,		0x21, 0
+	.dw 0x0111, 0xcc14,	0x0111, 0xcc14,		0x21, 0
+	.dw 0x0113, 0xcc14,	0x013f, 0xcc14,		0x21, 0
+	.dw 0x0141, 0xcc14,	0x0141, 0xcc14,		0x21, 0
+	.dw 0x0143, 0xcc14,	0x014f, 0xcc14,		0x21, 0
+	.dw 0x0151, 0xcc14,	0x0151, 0xcc14,		0x21, 0
+	.dw 0x0153, 0xcc14,	0x017f, 0xcc14,		0x21, 0
+	.dw 0x0181, 0xcc14,	0x0181, 0xcc14,		0x21, 0
+	.dw 0x0183, 0xcc14,	0x018f, 0xcc14,		0x21, 0
+	.dw 0x0191, 0xcc14,	0x0191, 0xcc14,		0x21, 0
+	.dw 0x0193, 0xcc14,	0x01bf, 0xcc14,		0x21, 0
+	.dw 0x01c1, 0xcc14,	0x01c1, 0xcc14,		0x21, 0
+	.dw 0x01c3, 0xcc14,	0x01cf, 0xcc14,		0x21, 0
+	.dw 0x01d1, 0xcc14,	0x01d1, 0xcc14,		0x21, 0
+	.dw 0x01d3, 0xcc14,	0x01ff, 0xcc14,		0x21, 0
+	.dw 0x0201, 0xcc14,	0x0201, 0xcc14,		0x21, 0
+	.dw 0x0203, 0xcc14,	0x020f, 0xcc14,		0x21, 0
+	.dw 0x0211, 0xcc14,	0x0211, 0xcc14,		0x21, 0
+	.dw 0x0213, 0xcc14,	0x023f, 0xcc14,		0x21, 0
+	.dw 0x0241, 0xcc14,	0x0241, 0xcc14,		0x21, 0
+	.dw 0x0243, 0xcc14,	0x024f, 0xcc14,		0x21, 0
+	.dw 0x0251, 0xcc14,	0x0251, 0xcc14,		0x21, 0
+	.dw 0x0253, 0xcc14,	0x027f, 0xcc14,		0x21, 0
+	.dw 0x0281, 0xcc14,	0x0281, 0xcc14,		0x21, 0
+	.dw 0x0283, 0xcc14,	0x028f, 0xcc14,		0x21, 0
+	.dw 0x0291, 0xcc14,	0x0291, 0xcc14,		0x21, 0
+	.dw 0x0293, 0xcc14,	0x02bf, 0xcc14,		0x21, 0
+	.dw 0x02c1, 0xcc14,	0x02c1, 0xcc14,		0x21, 0
+	.dw 0x02c3, 0xcc14,	0x02cf, 0xcc14,		0x21, 0
+	.dw 0x02d1, 0xcc14,	0x02d1, 0xcc14,		0x21, 0
+	.dw 0x02d3, 0xcc14,	0x02ff, 0xcc14,		0x21, 0
+	.dw 0x0301, 0xcc14,	0x0301, 0xcc14,		0x21, 0
+	.dw 0x0303, 0xcc14,	0x030f, 0xcc14,		0x21, 0
+	.dw 0x0311, 0xcc14,	0x0311, 0xcc14,		0x21, 0
+	.dw 0x0313, 0xcc14,	0x033f, 0xcc14,		0x21, 0
+	.dw 0x0341, 0xcc14,	0x0341, 0xcc14,		0x21, 0
+	.dw 0x0343, 0xcc14,	0x034f, 0xcc14,		0x21, 0
+	.dw 0x0351, 0xcc14,	0x0351, 0xcc14,		0x21, 0
+	.dw 0x0353, 0xcc14,	0x037f, 0xcc14,		0x21, 0
+	.dw 0x0381, 0xcc14,	0x0381, 0xcc14,		0x21, 0
+	.dw 0x0383, 0xcc14,	0x038f, 0xcc14,		0x21, 0
+	.dw 0x0391, 0xcc14,	0x0391, 0xcc14,		0x21, 0
+	.dw 0x0393, 0xcc14,	0x03bf, 0xcc14,		0x21, 0
+	.dw 0x03c1, 0xcc14,	0x03c1, 0xcc14,		0x21, 0
+	.dw 0x03c3, 0xcc14,	0x03cf, 0xcc14,		0x21, 0
+	.dw 0x03d1, 0xcc14,	0x03d1, 0xcc14,		0x21, 0
+	.dw 0x03d3, 0xcc14,	0x03ff, 0xcc14,		0x21, 0
+	.dw 0x0401, 0xcc14,	0x0401, 0xcc14,		0x21, 0
+	.dw 0x0403, 0xcc14,	0x040f, 0xcc14,		0x21, 0
+	.dw 0x0411, 0xcc14,	0x0411, 0xcc14,		0x21, 0
+	.dw 0x0413, 0xcc14,	0x043f, 0xcc14,		0x21, 0
+	.dw 0x0441, 0xcc14,	0x0441, 0xcc14,		0x21, 0
+	.dw 0x0443, 0xcc14,	0x044f, 0xcc14,		0x21, 0
+	.dw 0x0451, 0xcc14,	0x0451, 0xcc14,		0x21, 0
+	.dw 0x0453, 0xcc14,	0x047f, 0xcc14,		0x21, 0
+	.dw 0x0481, 0xcc14,	0x0481, 0xcc14,		0x21, 0
+	.dw 0x0483, 0xcc14,	0x048f, 0xcc14,		0x21, 0
+	.dw 0x0491, 0xcc14,	0x0491, 0xcc14,		0x21, 0
+	.dw 0x0493, 0xcc14,	0x04bf, 0xcc14,		0x21, 0
+	.dw 0x04c1, 0xcc14,	0x04c1, 0xcc14,		0x21, 0
+	.dw 0x04c3, 0xcc14,	0x04cf, 0xcc14,		0x21, 0
+	.dw 0x04d1, 0xcc14,	0x04d1, 0xcc14,		0x21, 0
+	.dw 0x04d3, 0xcc14,	0x04ff, 0xcc14,		0x21, 0
+	.dw 0x0501, 0xcc14,	0x0501, 0xcc14,		0x21, 0
+	.dw 0x0503, 0xcc14,	0x050f, 0xcc14,		0x21, 0
+	.dw 0x0511, 0xcc14,	0x0511, 0xcc14,		0x21, 0
+	.dw 0x0513, 0xcc14,	0x053f, 0xcc14,		0x21, 0
+	.dw 0x0541, 0xcc14,	0x0541, 0xcc14,		0x21, 0
+	.dw 0x0543, 0xcc14,	0x054f, 0xcc14,		0x21, 0
+	.dw 0x0551, 0xcc14,	0x0551, 0xcc14,		0x21, 0
+	.dw 0x0553, 0xcc14,	0x057f, 0xcc14,		0x21, 0
+	.dw 0x0581, 0xcc14,	0x0581, 0xcc14,		0x21, 0
+	.dw 0x0583, 0xcc14,	0x058f, 0xcc14,		0x21, 0
+	.dw 0x0591, 0xcc14,	0x0591, 0xcc14,		0x21, 0
+	.dw 0x0593, 0xcc14,	0x05bf, 0xcc14,		0x21, 0
+	.dw 0x05c1, 0xcc14,	0x05c1, 0xcc14,		0x21, 0
+	.dw 0x05c3, 0xcc14,	0x05cf, 0xcc14,		0x21, 0
+	.dw 0x05d1, 0xcc14,	0x05d1, 0xcc14,		0x21, 0
+	.dw 0x05d3, 0xcc14,	0x05ff, 0xcc14,		0x21, 0
+	.dw 0x0601, 0xcc14,	0x0601, 0xcc14,		0x21, 0
+	.dw 0x0603, 0xcc14,	0x060f, 0xcc14,		0x21, 0
+	.dw 0x0611, 0xcc14,	0x0611, 0xcc14,		0x21, 0
+	.dw 0x0613, 0xcc14,	0x063f, 0xcc14,		0x21, 0
+	.dw 0x0641, 0xcc14,	0x0641, 0xcc14,		0x21, 0
+	.dw 0x0643, 0xcc14,	0x064f, 0xcc14,		0x21, 0
+	.dw 0x0651, 0xcc14,	0x0651, 0xcc14,		0x21, 0
+	.dw 0x0653, 0xcc14,	0x067f, 0xcc14,		0x21, 0
+	.dw 0x0681, 0xcc14,	0x0681, 0xcc14,		0x21, 0
+	.dw 0x0683, 0xcc14,	0x068f, 0xcc14,		0x21, 0
+	.dw 0x0691, 0xcc14,	0x0691, 0xcc14,		0x21, 0
+	.dw 0x0693, 0xcc14,	0x06bf, 0xcc14,		0x21, 0
+	.dw 0x06c1, 0xcc14,	0x06c1, 0xcc14,		0x21, 0
+	.dw 0x06c3, 0xcc14,	0x06cf, 0xcc14,		0x21, 0
+	.dw 0x06d1, 0xcc14,	0x06d1, 0xcc14,		0x21, 0
+	.dw 0x06d3, 0xcc14,	0x06ff, 0xcc14,		0x21, 0
+	.dw 0x0701, 0xcc14,	0x0701, 0xcc14,		0x21, 0
+	.dw 0x0703, 0xcc14,	0x070f, 0xcc14,		0x21, 0
+	.dw 0x0711, 0xcc14,	0x0711, 0xcc14,		0x21, 0
+	.dw 0x0713, 0xcc14,	0x073f, 0xcc14,		0x21, 0
+	.dw 0x0741, 0xcc14,	0x0741, 0xcc14,		0x21, 0
+	.dw 0x0743, 0xcc14,	0x074f, 0xcc14,		0x21, 0
+	.dw 0x0751, 0xcc14,	0x0751, 0xcc14,		0x21, 0
+	.dw 0x0753, 0xcc14,	0x077f, 0xcc14,		0x21, 0
+	.dw 0x0781, 0xcc14,	0x0781, 0xcc14,		0x21, 0
+	.dw 0x0783, 0xcc14,	0x078f, 0xcc14,		0x21, 0
+	.dw 0x0791, 0xcc14,	0x0791, 0xcc14,		0x21, 0
+	.dw 0x0793, 0xcc14,	0x07bf, 0xcc14,		0x21, 0
+	.dw 0x07c1, 0xcc14,	0x07c1, 0xcc14,		0x21, 0
+	.dw 0x07c3, 0xcc14,	0x07cf, 0xcc14,		0x21, 0
+	.dw 0x07d1, 0xcc14,	0x07d1, 0xcc14,		0x21, 0
+	.dw 0x07d3, 0xcc14,	0x07ff, 0xcc14,		0x21, 0
+	.dw 0x0801, 0xcc14,	0x0801, 0xcc14,		0x21, 0
+	.dw 0x0803, 0xcc14,	0x080f, 0xcc14,		0x21, 0
+	.dw 0x0811, 0xcc14,	0x0811, 0xcc14,		0x21, 0
+	.dw 0x0813, 0xcc14,	0x083f, 0xcc14,		0x21, 0
+	.dw 0x0841, 0xcc14,	0x0841, 0xcc14,		0x21, 0
+	.dw 0x0843, 0xcc14,	0x084f, 0xcc14,		0x21, 0
+	.dw 0x0851, 0xcc14,	0x0851, 0xcc14,		0x21, 0
+	.dw 0x0853, 0xcc14,	0x087f, 0xcc14,		0x21, 0
+	.dw 0x0881, 0xcc14,	0x0881, 0xcc14,		0x21, 0
+	.dw 0x0883, 0xcc14,	0x088f, 0xcc14,		0x21, 0
+	.dw 0x0891, 0xcc14,	0x0891, 0xcc14,		0x21, 0
+	.dw 0x0893, 0xcc14,	0x08bf, 0xcc14,		0x21, 0
+	.dw 0x08c1, 0xcc14,	0x08c1, 0xcc14,		0x21, 0
+	.dw 0x08c3, 0xcc14,	0x08cf, 0xcc14,		0x21, 0
+	.dw 0x08d1, 0xcc14,	0x08d1, 0xcc14,		0x21, 0
+	.dw 0x08d3, 0xcc14,	0x08ff, 0xcc14,		0x21, 0
+	.dw 0x0901, 0xcc14,	0x0901, 0xcc14,		0x21, 0
+	.dw 0x0903, 0xcc14,	0x090f, 0xcc14,		0x21, 0
+	.dw 0x0911, 0xcc14,	0x0911, 0xcc14,		0x21, 0
+	.dw 0x0913, 0xcc14,	0x093f, 0xcc14,		0x21, 0
+	.dw 0x0941, 0xcc14,	0x0941, 0xcc14,		0x21, 0
+	.dw 0x0943, 0xcc14,	0x094f, 0xcc14,		0x21, 0
+	.dw 0x0951, 0xcc14,	0x0951, 0xcc14,		0x21, 0
+	.dw 0x0953, 0xcc14,	0x097f, 0xcc14,		0x21, 0
+	.dw 0x0981, 0xcc14,	0x0981, 0xcc14,		0x21, 0
+	.dw 0x0983, 0xcc14,	0x098f, 0xcc14,		0x21, 0
+	.dw 0x0991, 0xcc14,	0x0991, 0xcc14,		0x21, 0
+	.dw 0x0993, 0xcc14,	0x09bf, 0xcc14,		0x21, 0
+	.dw 0x09c1, 0xcc14,	0x09c1, 0xcc14,		0x21, 0
+	.dw 0x09c3, 0xcc14,	0x09cf, 0xcc14,		0x21, 0
+	.dw 0x09d1, 0xcc14,	0x09d1, 0xcc14,		0x21, 0
+	.dw 0x09d3, 0xcc14,	0x09ff, 0xcc14,		0x21, 0
+	.dw 0x0a01, 0xcc14,	0x0a01, 0xcc14,		0x21, 0
+	.dw 0x0a03, 0xcc14,	0x0a0f, 0xcc14,		0x21, 0
+	.dw 0x0a11, 0xcc14,	0x0a11, 0xcc14,		0x21, 0
+	.dw 0x0a13, 0xcc14,	0x0a3f, 0xcc14,		0x21, 0
+	.dw 0x0a41, 0xcc14,	0x0a41, 0xcc14,		0x21, 0
+	.dw 0x0a43, 0xcc14,	0x0a4f, 0xcc14,		0x21, 0
+	.dw 0x0a51, 0xcc14,	0x0a51, 0xcc14,		0x21, 0
+	.dw 0x0a53, 0xcc14,	0x0a7f, 0xcc14,		0x21, 0
+	.dw 0x0a81, 0xcc14,	0x0a81, 0xcc14,		0x21, 0
+	.dw 0x0a83, 0xcc14,	0x0a8f, 0xcc14,		0x21, 0
+	.dw 0x0a91, 0xcc14,	0x0a91, 0xcc14,		0x21, 0
+	.dw 0x0a93, 0xcc14,	0x0abf, 0xcc14,		0x21, 0
+	.dw 0x0ac1, 0xcc14,	0x0ac1, 0xcc14,		0x21, 0
+	.dw 0x0ac3, 0xcc14,	0x0acf, 0xcc14,		0x21, 0
+	.dw 0x0ad1, 0xcc14,	0x0ad1, 0xcc14,		0x21, 0
+	.dw 0x0ad3, 0xcc14,	0x0aff, 0xcc14,		0x21, 0
+	.dw 0x0b01, 0xcc14,	0x0b01, 0xcc14,		0x21, 0
+	.dw 0x0b03, 0xcc14,	0x0b0f, 0xcc14,		0x21, 0
+	.dw 0x0b11, 0xcc14,	0x0b11, 0xcc14,		0x21, 0
+	.dw 0x0b13, 0xcc14,	0x0b3f, 0xcc14,		0x21, 0
+	.dw 0x0b41, 0xcc14,	0x0b41, 0xcc14,		0x21, 0
+	.dw 0x0b43, 0xcc14,	0x0b4f, 0xcc14,		0x21, 0
+	.dw 0x0b51, 0xcc14,	0x0b51, 0xcc14,		0x21, 0
+	.dw 0x0b53, 0xcc14,	0x0b7f, 0xcc14,		0x21, 0
+	.dw 0x0b81, 0xcc14,	0x0b81, 0xcc14,		0x21, 0
+	.dw 0x0b83, 0xcc14,	0x0b8f, 0xcc14,		0x21, 0
+	.dw 0x0b91, 0xcc14,	0x0b91, 0xcc14,		0x21, 0
+	.dw 0x0b93, 0xcc14,	0x0bbf, 0xcc14,		0x21, 0
+	.dw 0x0bc1, 0xcc14,	0x0bc1, 0xcc14,		0x21, 0
+	.dw 0x0bc3, 0xcc14,	0x0bcf, 0xcc14,		0x21, 0
+	.dw 0x0bd1, 0xcc14,	0x0bd1, 0xcc14,		0x21, 0
+	.dw 0x0bd3, 0xcc14,	0x0bff, 0xcc14,		0x21, 0
+	.dw 0x0c01, 0xcc14,	0x0c01, 0xcc14,		0x21, 0
+	.dw 0x0c03, 0xcc14,	0x0c0f, 0xcc14,		0x21, 0
+	.dw 0x0c11, 0xcc14,	0x0c11, 0xcc14,		0x21, 0
+	.dw 0x0c13, 0xcc14,	0x0c3f, 0xcc14,		0x21, 0
+	.dw 0x0c41, 0xcc14,	0x0c41, 0xcc14,		0x21, 0
+	.dw 0x0c43, 0xcc14,	0x0c4f, 0xcc14,		0x21, 0
+	.dw 0x0c51, 0xcc14,	0x0c51, 0xcc14,		0x21, 0
+	.dw 0x0c53, 0xcc14,	0x0c7f, 0xcc14,		0x21, 0
+	.dw 0x0c81, 0xcc14,	0x0c81, 0xcc14,		0x21, 0
+	.dw 0x0c83, 0xcc14,	0x0c8f, 0xcc14,		0x21, 0
+	.dw 0x0c91, 0xcc14,	0x0c91, 0xcc14,		0x21, 0
+	.dw 0x0c93, 0xcc14,	0x0cbf, 0xcc14,		0x21, 0
+	.dw 0x0cc1, 0xcc14,	0x0cc1, 0xcc14,		0x21, 0
+	.dw 0x0cc3, 0xcc14,	0x0ccf, 0xcc14,		0x21, 0
+	.dw 0x0cd1, 0xcc14,	0x0cd1, 0xcc14,		0x21, 0
+	.dw 0x0cd3, 0xcc14,	0x0cff, 0xcc14,		0x21, 0
+	.dw 0x0d01, 0xcc14,	0x0d01, 0xcc14,		0x21, 0
+	.dw 0x0d03, 0xcc14,	0x0d0f, 0xcc14,		0x21, 0
+	.dw 0x0d11, 0xcc14,	0x0d11, 0xcc14,		0x21, 0
+	.dw 0x0d13, 0xcc14,	0x0d3f, 0xcc14,		0x21, 0
+	.dw 0x0d41, 0xcc14,	0x0d41, 0xcc14,		0x21, 0
+	.dw 0x0d43, 0xcc14,	0x0d4f, 0xcc14,		0x21, 0
+	.dw 0x0d51, 0xcc14,	0x0d51, 0xcc14,		0x21, 0
+	.dw 0x0d53, 0xcc14,	0x0d7f, 0xcc14,		0x21, 0
+	.dw 0x0d81, 0xcc14,	0x0d81, 0xcc14,		0x21, 0
+	.dw 0x0d83, 0xcc14,	0x0d8f, 0xcc14,		0x21, 0
+	.dw 0x0d91, 0xcc14,	0x0d91, 0xcc14,		0x21, 0
+	.dw 0x0d93, 0xcc14,	0x0dbf, 0xcc14,		0x21, 0
+	.dw 0x0dc1, 0xcc14,	0x0dc1, 0xcc14,		0x21, 0
+	.dw 0x0dc3, 0xcc14,	0x0dcf, 0xcc14,		0x21, 0
+	.dw 0x0dd1, 0xcc14,	0x0dd1, 0xcc14,		0x21, 0
+	.dw 0x0dd3, 0xcc14,	0x0dff, 0xcc14,		0x21, 0
+	.dw 0x0e01, 0xcc14,	0x0e01, 0xcc14,		0x21, 0
+	.dw 0x0e03, 0xcc14,	0x0e0f, 0xcc14,		0x21, 0
+	.dw 0x0e11, 0xcc14,	0x0e11, 0xcc14,		0x21, 0
+	.dw 0x0e13, 0xcc14,	0x0e3f, 0xcc14,		0x21, 0
+	.dw 0x0e41, 0xcc14,	0x0e41, 0xcc14,		0x21, 0
+	.dw 0x0e43, 0xcc14,	0x0e4f, 0xcc14,		0x21, 0
+	.dw 0x0e51, 0xcc14,	0x0e51, 0xcc14,		0x21, 0
+	.dw 0x0e53, 0xcc14,	0x0e7f, 0xcc14,		0x21, 0
+	.dw 0x0e81, 0xcc14,	0x0e81, 0xcc14,		0x21, 0
+	.dw 0x0e83, 0xcc14,	0x0e8f, 0xcc14,		0x21, 0
+	.dw 0x0e91, 0xcc14,	0x0e91, 0xcc14,		0x21, 0
+	.dw 0x0e93, 0xcc14,	0x0ebf, 0xcc14,		0x21, 0
+	.dw 0x0ec1, 0xcc14,	0x0ec1, 0xcc14,		0x21, 0
+	.dw 0x0ec3, 0xcc14,	0x0ecf, 0xcc14,		0x21, 0
+	.dw 0x0ed1, 0xcc14,	0x0ed1, 0xcc14,		0x21, 0
+	.dw 0x0ed3, 0xcc14,	0x0eff, 0xcc14,		0x21, 0
+	.dw 0x0f01, 0xcc14,	0x0f01, 0xcc14,		0x21, 0
+	.dw 0x0f03, 0xcc14,	0x0f0f, 0xcc14,		0x21, 0
+	.dw 0x0f11, 0xcc14,	0x0f11, 0xcc14,		0x21, 0
+	.dw 0x0f13, 0xcc14,	0x0f3f, 0xcc14,		0x21, 0
+	.dw 0x0f41, 0xcc14,	0x0f41, 0xcc14,		0x21, 0
+	.dw 0x0f43, 0xcc14,	0x0f4f, 0xcc14,		0x21, 0
+	.dw 0x0f51, 0xcc14,	0x0f51, 0xcc14,		0x21, 0
+	.dw 0x0f53, 0xcc14,	0x0f7f, 0xcc14,		0x21, 0
+	.dw 0x0f81, 0xcc14,	0x0f81, 0xcc14,		0x21, 0
+	.dw 0x0f83, 0xcc14,	0x0f8f, 0xcc14,		0x21, 0
+	.dw 0x0f91, 0xcc14,	0x0f91, 0xcc14,		0x21, 0
+	.dw 0x0f93, 0xcc14,	0x0fbf, 0xcc14,		0x21, 0
+	.dw 0x0fc1, 0xcc14,	0x0fc1, 0xcc14,		0x21, 0
+	.dw 0x0fc3, 0xcc14,	0x0fcf, 0xcc14,		0x21, 0
+	.dw 0x0fd1, 0xcc14,	0x0fd1, 0xcc14,		0x21, 0
+	.dw 0x0fd3, 0xcc14,	0x1fff, 0xcc14,		0x21, 0
+	.dw 0x2001, 0xcc14,	0x2001, 0xcc14,		0x21, 0
+	.dw 0x2003, 0xcc14,	0x200f, 0xcc14,		0x21, 0
+	.dw 0x2011, 0xcc14,	0x2011, 0xcc14,		0x21, 0
+	.dw 0x2013, 0xcc14,	0x203f, 0xcc14,		0x21, 0
+	.dw 0x2041, 0xcc14,	0x2041, 0xcc14,		0x21, 0
+	.dw 0x2043, 0xcc14,	0x204f, 0xcc14,		0x21, 0
+	.dw 0x2051, 0xcc14,	0x2051, 0xcc14,		0x21, 0
+	.dw 0x2053, 0xcc14,	0x207f, 0xcc14,		0x21, 0
+	.dw 0x2081, 0xcc14,	0x2081, 0xcc14,		0x21, 0
+	.dw 0x2083, 0xcc14,	0x208f, 0xcc14,		0x21, 0
+	.dw 0x2091, 0xcc14,	0x2091, 0xcc14,		0x21, 0
+	.dw 0x2093, 0xcc14,	0x20bf, 0xcc14,		0x21, 0
+	.dw 0x20c1, 0xcc14,	0x20c1, 0xcc14,		0x21, 0
+	.dw 0x20c3, 0xcc14,	0x20cf, 0xcc14,		0x21, 0
+	.dw 0x20d1, 0xcc14,	0x20d1, 0xcc14,		0x21, 0
+	.dw 0x20d3, 0xcc14,	0x20ff, 0xcc14,		0x21, 0
+	.dw 0x2101, 0xcc14,	0x2101, 0xcc14,		0x21, 0
+	.dw 0x2103, 0xcc14,	0x210f, 0xcc14,		0x21, 0
+	.dw 0x2111, 0xcc14,	0x2111, 0xcc14,		0x21, 0
+	.dw 0x2113, 0xcc14,	0x213f, 0xcc14,		0x21, 0
+	.dw 0x2141, 0xcc14,	0x2141, 0xcc14,		0x21, 0
+	.dw 0x2143, 0xcc14,	0x214f, 0xcc14,		0x21, 0
+	.dw 0x2151, 0xcc14,	0x2151, 0xcc14,		0x21, 0
+	.dw 0x2153, 0xcc14,	0x217f, 0xcc14,		0x21, 0
+	.dw 0x2181, 0xcc14,	0x2181, 0xcc14,		0x21, 0
+	.dw 0x2183, 0xcc14,	0x218f, 0xcc14,		0x21, 0
+	.dw 0x2191, 0xcc14,	0x2191, 0xcc14,		0x21, 0
+	.dw 0x2193, 0xcc14,	0x21bf, 0xcc14,		0x21, 0
+	.dw 0x21c1, 0xcc14,	0x21c1, 0xcc14,		0x21, 0
+	.dw 0x21c3, 0xcc14,	0x21cf, 0xcc14,		0x21, 0
+	.dw 0x21d1, 0xcc14,	0x21d1, 0xcc14,		0x21, 0
+	.dw 0x21d3, 0xcc14,	0x21ff, 0xcc14,		0x21, 0
+	.dw 0x2201, 0xcc14,	0x2201, 0xcc14,		0x21, 0
+	.dw 0x2203, 0xcc14,	0x220f, 0xcc14,		0x21, 0
+	.dw 0x2211, 0xcc14,	0x2211, 0xcc14,		0x21, 0
+	.dw 0x2213, 0xcc14,	0x223f, 0xcc14,		0x21, 0
+	.dw 0x2241, 0xcc14,	0x2241, 0xcc14,		0x21, 0
+	.dw 0x2243, 0xcc14,	0x224f, 0xcc14,		0x21, 0
+	.dw 0x2251, 0xcc14,	0x2251, 0xcc14,		0x21, 0
+	.dw 0x2253, 0xcc14,	0x227f, 0xcc14,		0x21, 0
+	.dw 0x2281, 0xcc14,	0x2281, 0xcc14,		0x21, 0
+	.dw 0x2283, 0xcc14,	0x228f, 0xcc14,		0x21, 0
+	.dw 0x2291, 0xcc14,	0x2291, 0xcc14,		0x21, 0
+	.dw 0x2293, 0xcc14,	0x22bf, 0xcc14,		0x21, 0
+	.dw 0x22c1, 0xcc14,	0x22c1, 0xcc14,		0x21, 0
+	.dw 0x22c3, 0xcc14,	0x22cf, 0xcc14,		0x21, 0
+	.dw 0x22d1, 0xcc14,	0x22d1, 0xcc14,		0x21, 0
+	.dw 0x22d3, 0xcc14,	0x22ff, 0xcc14,		0x21, 0
+	.dw 0x2301, 0xcc14,	0x2301, 0xcc14,		0x21, 0
+	.dw 0x2303, 0xcc14,	0x230f, 0xcc14,		0x21, 0
+	.dw 0x2311, 0xcc14,	0x2311, 0xcc14,		0x21, 0
+	.dw 0x2313, 0xcc14,	0x233f, 0xcc14,		0x21, 0
+	.dw 0x2341, 0xcc14,	0x2341, 0xcc14,		0x21, 0
+	.dw 0x2343, 0xcc14,	0x234f, 0xcc14,		0x21, 0
+	.dw 0x2351, 0xcc14,	0x2351, 0xcc14,		0x21, 0
+	.dw 0x2353, 0xcc14,	0x237f, 0xcc14,		0x21, 0
+	.dw 0x2381, 0xcc14,	0x2381, 0xcc14,		0x21, 0
+	.dw 0x2383, 0xcc14,	0x238f, 0xcc14,		0x21, 0
+	.dw 0x2391, 0xcc14,	0x2391, 0xcc14,		0x21, 0
+	.dw 0x2393, 0xcc14,	0x23bf, 0xcc14,		0x21, 0
+	.dw 0x23c1, 0xcc14,	0x23c1, 0xcc14,		0x21, 0
+	.dw 0x23c3, 0xcc14,	0x23cf, 0xcc14,		0x21, 0
+	.dw 0x23d1, 0xcc14,	0x23d1, 0xcc14,		0x21, 0
+	.dw 0x23d3, 0xcc14,	0x23ff, 0xcc14,		0x21, 0
+	.dw 0x2401, 0xcc14,	0x2401, 0xcc14,		0x21, 0
+	.dw 0x2403, 0xcc14,	0x240f, 0xcc14,		0x21, 0
+	.dw 0x2411, 0xcc14,	0x2411, 0xcc14,		0x21, 0
+	.dw 0x2413, 0xcc14,	0x243f, 0xcc14,		0x21, 0
+	.dw 0x2441, 0xcc14,	0x2441, 0xcc14,		0x21, 0
+	.dw 0x2443, 0xcc14,	0x244f, 0xcc14,		0x21, 0
+	.dw 0x2451, 0xcc14,	0x2451, 0xcc14,		0x21, 0
+	.dw 0x2453, 0xcc14,	0x247f, 0xcc14,		0x21, 0
+	.dw 0x2481, 0xcc14,	0x2481, 0xcc14,		0x21, 0
+	.dw 0x2483, 0xcc14,	0x248f, 0xcc14,		0x21, 0
+	.dw 0x2491, 0xcc14,	0x2491, 0xcc14,		0x21, 0
+	.dw 0x2493, 0xcc14,	0x24bf, 0xcc14,		0x21, 0
+	.dw 0x24c1, 0xcc14,	0x24c1, 0xcc14,		0x21, 0
+	.dw 0x24c3, 0xcc14,	0x24cf, 0xcc14,		0x21, 0
+	.dw 0x24d1, 0xcc14,	0x24d1, 0xcc14,		0x21, 0
+	.dw 0x24d3, 0xcc14,	0x24ff, 0xcc14,		0x21, 0
+	.dw 0x2501, 0xcc14,	0x2501, 0xcc14,		0x21, 0
+	.dw 0x2503, 0xcc14,	0x250f, 0xcc14,		0x21, 0
+	.dw 0x2511, 0xcc14,	0x2511, 0xcc14,		0x21, 0
+	.dw 0x2513, 0xcc14,	0x253f, 0xcc14,		0x21, 0
+	.dw 0x2541, 0xcc14,	0x2541, 0xcc14,		0x21, 0
+	.dw 0x2543, 0xcc14,	0x254f, 0xcc14,		0x21, 0
+	.dw 0x2551, 0xcc14,	0x2551, 0xcc14,		0x21, 0
+	.dw 0x2553, 0xcc14,	0x257f, 0xcc14,		0x21, 0
+	.dw 0x2581, 0xcc14,	0x2581, 0xcc14,		0x21, 0
+	.dw 0x2583, 0xcc14,	0x258f, 0xcc14,		0x21, 0
+	.dw 0x2591, 0xcc14,	0x2591, 0xcc14,		0x21, 0
+	.dw 0x2593, 0xcc14,	0x25bf, 0xcc14,		0x21, 0
+	.dw 0x25c1, 0xcc14,	0x25c1, 0xcc14,		0x21, 0
+	.dw 0x25c3, 0xcc14,	0x25cf, 0xcc14,		0x21, 0
+	.dw 0x25d1, 0xcc14,	0x25d1, 0xcc14,		0x21, 0
+	.dw 0x25d3, 0xcc14,	0x25ff, 0xcc14,		0x21, 0
+	.dw 0x2601, 0xcc14,	0x2601, 0xcc14,		0x21, 0
+	.dw 0x2603, 0xcc14,	0x260f, 0xcc14,		0x21, 0
+	.dw 0x2611, 0xcc14,	0x2611, 0xcc14,		0x21, 0
+	.dw 0x2613, 0xcc14,	0x263f, 0xcc14,		0x21, 0
+	.dw 0x2641, 0xcc14,	0x2641, 0xcc14,		0x21, 0
+	.dw 0x2643, 0xcc14,	0x264f, 0xcc14,		0x21, 0
+	.dw 0x2651, 0xcc14,	0x2651, 0xcc14,		0x21, 0
+	.dw 0x2653, 0xcc14,	0x267f, 0xcc14,		0x21, 0
+	.dw 0x2681, 0xcc14,	0x2681, 0xcc14,		0x21, 0
+	.dw 0x2683, 0xcc14,	0x268f, 0xcc14,		0x21, 0
+	.dw 0x2691, 0xcc14,	0x2691, 0xcc14,		0x21, 0
+	.dw 0x2693, 0xcc14,	0x26bf, 0xcc14,		0x21, 0
+	.dw 0x26c1, 0xcc14,	0x26c1, 0xcc14,		0x21, 0
+	.dw 0x26c3, 0xcc14,	0x26cf, 0xcc14,		0x21, 0
+	.dw 0x26d1, 0xcc14,	0x26d1, 0xcc14,		0x21, 0
+	.dw 0x26d3, 0xcc14,	0x26ff, 0xcc14,		0x21, 0
+	.dw 0x2701, 0xcc14,	0x2701, 0xcc14,		0x21, 0
+	.dw 0x2703, 0xcc14,	0x270f, 0xcc14,		0x21, 0
+	.dw 0x2711, 0xcc14,	0x2711, 0xcc14,		0x21, 0
+	.dw 0x2713, 0xcc14,	0x273f, 0xcc14,		0x21, 0
+	.dw 0x2741, 0xcc14,	0x2741, 0xcc14,		0x21, 0
+	.dw 0x2743, 0xcc14,	0x274f, 0xcc14,		0x21, 0
+	.dw 0x2751, 0xcc14,	0x2751, 0xcc14,		0x21, 0
+	.dw 0x2753, 0xcc14,	0x277f, 0xcc14,		0x21, 0
+	.dw 0x2781, 0xcc14,	0x2781, 0xcc14,		0x21, 0
+	.dw 0x2783, 0xcc14,	0x278f, 0xcc14,		0x21, 0
+	.dw 0x2791, 0xcc14,	0x2791, 0xcc14,		0x21, 0
+	.dw 0x2793, 0xcc14,	0x27bf, 0xcc14,		0x21, 0
+	.dw 0x27c1, 0xcc14,	0x27c1, 0xcc14,		0x21, 0
+	.dw 0x27c3, 0xcc14,	0x27cf, 0xcc14,		0x21, 0
+	.dw 0x27d1, 0xcc14,	0x27d1, 0xcc14,		0x21, 0
+	.dw 0x27d3, 0xcc14,	0x27ff, 0xcc14,		0x21, 0
+	.dw 0x2801, 0xcc14,	0x2801, 0xcc14,		0x21, 0
+	.dw 0x2803, 0xcc14,	0x280f, 0xcc14,		0x21, 0
+	.dw 0x2811, 0xcc14,	0x2811, 0xcc14,		0x21, 0
+	.dw 0x2813, 0xcc14,	0x283f, 0xcc14,		0x21, 0
+	.dw 0x2841, 0xcc14,	0x2841, 0xcc14,		0x21, 0
+	.dw 0x2843, 0xcc14,	0x284f, 0xcc14,		0x21, 0
+	.dw 0x2851, 0xcc14,	0x2851, 0xcc14,		0x21, 0
+	.dw 0x2853, 0xcc14,	0x287f, 0xcc14,		0x21, 0
+	.dw 0x2881, 0xcc14,	0x2881, 0xcc14,		0x21, 0
+	.dw 0x2883, 0xcc14,	0x288f, 0xcc14,		0x21, 0
+	.dw 0x2891, 0xcc14,	0x2891, 0xcc14,		0x21, 0
+	.dw 0x2893, 0xcc14,	0x28bf, 0xcc14,		0x21, 0
+	.dw 0x28c1, 0xcc14,	0x28c1, 0xcc14,		0x21, 0
+	.dw 0x28c3, 0xcc14,	0x28cf, 0xcc14,		0x21, 0
+	.dw 0x28d1, 0xcc14,	0x28d1, 0xcc14,		0x21, 0
+	.dw 0x28d3, 0xcc14,	0x28ff, 0xcc14,		0x21, 0
+	.dw 0x2901, 0xcc14,	0x2901, 0xcc14,		0x21, 0
+	.dw 0x2903, 0xcc14,	0x290f, 0xcc14,		0x21, 0
+	.dw 0x2911, 0xcc14,	0x2911, 0xcc14,		0x21, 0
+	.dw 0x2913, 0xcc14,	0x293f, 0xcc14,		0x21, 0
+	.dw 0x2941, 0xcc14,	0x2941, 0xcc14,		0x21, 0
+	.dw 0x2943, 0xcc14,	0x294f, 0xcc14,		0x21, 0
+	.dw 0x2951, 0xcc14,	0x2951, 0xcc14,		0x21, 0
+	.dw 0x2953, 0xcc14,	0x297f, 0xcc14,		0x21, 0
+	.dw 0x2981, 0xcc14,	0x2981, 0xcc14,		0x21, 0
+	.dw 0x2983, 0xcc14,	0x298f, 0xcc14,		0x21, 0
+	.dw 0x2991, 0xcc14,	0x2991, 0xcc14,		0x21, 0
+	.dw 0x2993, 0xcc14,	0x29bf, 0xcc14,		0x21, 0
+	.dw 0x29c1, 0xcc14,	0x29c1, 0xcc14,		0x21, 0
+	.dw 0x29c3, 0xcc14,	0x29cf, 0xcc14,		0x21, 0
+	.dw 0x29d1, 0xcc14,	0x29d1, 0xcc14,		0x21, 0
+	.dw 0x29d3, 0xcc14,	0x29ff, 0xcc14,		0x21, 0
+	.dw 0x2a01, 0xcc14,	0x2a01, 0xcc14,		0x21, 0
+	.dw 0x2a03, 0xcc14,	0x2a0f, 0xcc14,		0x21, 0
+	.dw 0x2a11, 0xcc14,	0x2a11, 0xcc14,		0x21, 0
+	.dw 0x2a13, 0xcc14,	0x2a3f, 0xcc14,		0x21, 0
+	.dw 0x2a41, 0xcc14,	0x2a41, 0xcc14,		0x21, 0
+	.dw 0x2a43, 0xcc14,	0x2a4f, 0xcc14,		0x21, 0
+	.dw 0x2a51, 0xcc14,	0x2a51, 0xcc14,		0x21, 0
+	.dw 0x2a53, 0xcc14,	0x2a7f, 0xcc14,		0x21, 0
+	.dw 0x2a81, 0xcc14,	0x2a81, 0xcc14,		0x21, 0
+	.dw 0x2a83, 0xcc14,	0x2a8f, 0xcc14,		0x21, 0
+	.dw 0x2a91, 0xcc14,	0x2a91, 0xcc14,		0x21, 0
+	.dw 0x2a93, 0xcc14,	0x2abf, 0xcc14,		0x21, 0
+	.dw 0x2ac1, 0xcc14,	0x2ac1, 0xcc14,		0x21, 0
+	.dw 0x2ac3, 0xcc14,	0x2acf, 0xcc14,		0x21, 0
+	.dw 0x2ad1, 0xcc14,	0x2ad1, 0xcc14,		0x21, 0
+	.dw 0x2ad3, 0xcc14,	0x2aff, 0xcc14,		0x21, 0
+	.dw 0x2b01, 0xcc14,	0x2b01, 0xcc14,		0x21, 0
+	.dw 0x2b03, 0xcc14,	0x2b0f, 0xcc14,		0x21, 0
+	.dw 0x2b11, 0xcc14,	0x2b11, 0xcc14,		0x21, 0
+	.dw 0x2b13, 0xcc14,	0x2b3f, 0xcc14,		0x21, 0
+	.dw 0x2b41, 0xcc14,	0x2b41, 0xcc14,		0x21, 0
+	.dw 0x2b43, 0xcc14,	0x2b4f, 0xcc14,		0x21, 0
+	.dw 0x2b51, 0xcc14,	0x2b51, 0xcc14,		0x21, 0
+	.dw 0x2b53, 0xcc14,	0x2b7f, 0xcc14,		0x21, 0
+	.dw 0x2b81, 0xcc14,	0x2b81, 0xcc14,		0x21, 0
+	.dw 0x2b83, 0xcc14,	0x2b8f, 0xcc14,		0x21, 0
+	.dw 0x2b91, 0xcc14,	0x2b91, 0xcc14,		0x21, 0
+	.dw 0x2b93, 0xcc14,	0x2bbf, 0xcc14,		0x21, 0
+	.dw 0x2bc1, 0xcc14,	0x2bc1, 0xcc14,		0x21, 0
+	.dw 0x2bc3, 0xcc14,	0x2bcf, 0xcc14,		0x21, 0
+	.dw 0x2bd1, 0xcc14,	0x2bd1, 0xcc14,		0x21, 0
+	.dw 0x2bd3, 0xcc14,	0x2bff, 0xcc14,		0x21, 0
+	.dw 0x2c01, 0xcc14,	0x2c01, 0xcc14,		0x21, 0
+	.dw 0x2c03, 0xcc14,	0x2c0f, 0xcc14,		0x21, 0
+	.dw 0x2c11, 0xcc14,	0x2c11, 0xcc14,		0x21, 0
+	.dw 0x2c13, 0xcc14,	0x2c3f, 0xcc14,		0x21, 0
+	.dw 0x2c41, 0xcc14,	0x2c41, 0xcc14,		0x21, 0
+	.dw 0x2c43, 0xcc14,	0x2c4f, 0xcc14,		0x21, 0
+	.dw 0x2c51, 0xcc14,	0x2c51, 0xcc14,		0x21, 0
+	.dw 0x2c53, 0xcc14,	0x2c7f, 0xcc14,		0x21, 0
+	.dw 0x2c81, 0xcc14,	0x2c81, 0xcc14,		0x21, 0
+	.dw 0x2c83, 0xcc14,	0x2c8f, 0xcc14,		0x21, 0
+	.dw 0x2c91, 0xcc14,	0x2c91, 0xcc14,		0x21, 0
+	.dw 0x2c93, 0xcc14,	0x2cbf, 0xcc14,		0x21, 0
+	.dw 0x2cc1, 0xcc14,	0x2cc1, 0xcc14,		0x21, 0
+	.dw 0x2cc3, 0xcc14,	0x2ccf, 0xcc14,		0x21, 0
+	.dw 0x2cd1, 0xcc14,	0x2cd1, 0xcc14,		0x21, 0
+	.dw 0x2cd3, 0xcc14,	0x2cff, 0xcc14,		0x21, 0
+	.dw 0x2d01, 0xcc14,	0x2d01, 0xcc14,		0x21, 0
+	.dw 0x2d03, 0xcc14,	0x2d0f, 0xcc14,		0x21, 0
+	.dw 0x2d11, 0xcc14,	0x2d11, 0xcc14,		0x21, 0
+	.dw 0x2d13, 0xcc14,	0x2d3f, 0xcc14,		0x21, 0
+	.dw 0x2d41, 0xcc14,	0x2d41, 0xcc14,		0x21, 0
+	.dw 0x2d43, 0xcc14,	0x2d4f, 0xcc14,		0x21, 0
+	.dw 0x2d51, 0xcc14,	0x2d51, 0xcc14,		0x21, 0
+	.dw 0x2d53, 0xcc14,	0x2d7f, 0xcc14,		0x21, 0
+	.dw 0x2d81, 0xcc14,	0x2d81, 0xcc14,		0x21, 0
+	.dw 0x2d83, 0xcc14,	0x2d8f, 0xcc14,		0x21, 0
+	.dw 0x2d91, 0xcc14,	0x2d91, 0xcc14,		0x21, 0
+	.dw 0x2d93, 0xcc14,	0x2dbf, 0xcc14,		0x21, 0
+	.dw 0x2dc1, 0xcc14,	0x2dc1, 0xcc14,		0x21, 0
+	.dw 0x2dc3, 0xcc14,	0x2dcf, 0xcc14,		0x21, 0
+	.dw 0x2dd1, 0xcc14,	0x2dd1, 0xcc14,		0x21, 0
+	.dw 0x2dd3, 0xcc14,	0x2dff, 0xcc14,		0x21, 0
+	.dw 0x2e01, 0xcc14,	0x2e01, 0xcc14,		0x21, 0
+	.dw 0x2e03, 0xcc14,	0x2e0f, 0xcc14,		0x21, 0
+	.dw 0x2e11, 0xcc14,	0x2e11, 0xcc14,		0x21, 0
+	.dw 0x2e13, 0xcc14,	0x2e3f, 0xcc14,		0x21, 0
+	.dw 0x2e41, 0xcc14,	0x2e41, 0xcc14,		0x21, 0
+	.dw 0x2e43, 0xcc14,	0x2e4f, 0xcc14,		0x21, 0
+	.dw 0x2e51, 0xcc14,	0x2e51, 0xcc14,		0x21, 0
+	.dw 0x2e53, 0xcc14,	0x2e7f, 0xcc14,		0x21, 0
+	.dw 0x2e81, 0xcc14,	0x2e81, 0xcc14,		0x21, 0
+	.dw 0x2e83, 0xcc14,	0x2e8f, 0xcc14,		0x21, 0
+	.dw 0x2e91, 0xcc14,	0x2e91, 0xcc14,		0x21, 0
+	.dw 0x2e93, 0xcc14,	0x2ebf, 0xcc14,		0x21, 0
+	.dw 0x2ec1, 0xcc14,	0x2ec1, 0xcc14,		0x21, 0
+	.dw 0x2ec3, 0xcc14,	0x2ecf, 0xcc14,		0x21, 0
+	.dw 0x2ed1, 0xcc14,	0x2ed1, 0xcc14,		0x21, 0
+	.dw 0x2ed3, 0xcc14,	0x2eff, 0xcc14,		0x21, 0
+	.dw 0x2f01, 0xcc14,	0x2f01, 0xcc14,		0x21, 0
+	.dw 0x2f03, 0xcc14,	0x2f0f, 0xcc14,		0x21, 0
+	.dw 0x2f11, 0xcc14,	0x2f11, 0xcc14,		0x21, 0
+	.dw 0x2f13, 0xcc14,	0x2f3f, 0xcc14,		0x21, 0
+	.dw 0x2f41, 0xcc14,	0x2f41, 0xcc14,		0x21, 0
+	.dw 0x2f43, 0xcc14,	0x2f4f, 0xcc14,		0x21, 0
+	.dw 0x2f51, 0xcc14,	0x2f51, 0xcc14,		0x21, 0
+	.dw 0x2f53, 0xcc14,	0x2f7f, 0xcc14,		0x21, 0
+	.dw 0x2f81, 0xcc14,	0x2f81, 0xcc14,		0x21, 0
+	.dw 0x2f83, 0xcc14,	0x2f8f, 0xcc14,		0x21, 0
+	.dw 0x2f91, 0xcc14,	0x2f91, 0xcc14,		0x21, 0
+	.dw 0x2f93, 0xcc14,	0x2fbf, 0xcc14,		0x21, 0
+	.dw 0x2fc1, 0xcc14,	0x2fc1, 0xcc14,		0x21, 0
+	.dw 0x2fc3, 0xcc14,	0x2fcf, 0xcc14,		0x21, 0
+	.dw 0x2fd1, 0xcc14,	0x2fd1, 0xcc14,		0x21, 0
+	.dw 0x2fd3, 0xcc14,	0x3fff, 0xcc14,		0x21, 0
+	.dw 0x4001, 0xcc14,	0x4001, 0xcc14,		0x21, 0
+	.dw 0x4003, 0xcc14,	0x400f, 0xcc14,		0x21, 0
+	.dw 0x4011, 0xcc14,	0x4011, 0xcc14,		0x21, 0
+	.dw 0x4013, 0xcc14,	0x403f, 0xcc14,		0x21, 0
+	.dw 0x4041, 0xcc14,	0x4041, 0xcc14,		0x21, 0
+	.dw 0x4043, 0xcc14,	0x404f, 0xcc14,		0x21, 0
+	.dw 0x4051, 0xcc14,	0x4051, 0xcc14,		0x21, 0
+	.dw 0x4053, 0xcc14,	0x407f, 0xcc14,		0x21, 0
+	.dw 0x4081, 0xcc14,	0x4081, 0xcc14,		0x21, 0
+	.dw 0x4083, 0xcc14,	0x408f, 0xcc14,		0x21, 0
+	.dw 0x4091, 0xcc14,	0x4091, 0xcc14,		0x21, 0
+	.dw 0x4093, 0xcc14,	0x40bf, 0xcc14,		0x21, 0
+	.dw 0x40c1, 0xcc14,	0x40c1, 0xcc14,		0x21, 0
+	.dw 0x40c3, 0xcc14,	0x40cf, 0xcc14,		0x21, 0
+	.dw 0x40d1, 0xcc14,	0x40d1, 0xcc14,		0x21, 0
+	.dw 0x40d3, 0xcc14,	0x40ff, 0xcc14,		0x21, 0
+	.dw 0x4101, 0xcc14,	0x4101, 0xcc14,		0x21, 0
+	.dw 0x4103, 0xcc14,	0x410f, 0xcc14,		0x21, 0
+	.dw 0x4111, 0xcc14,	0x4111, 0xcc14,		0x21, 0
+	.dw 0x4113, 0xcc14,	0x413f, 0xcc14,		0x21, 0
+	.dw 0x4141, 0xcc14,	0x4141, 0xcc14,		0x21, 0
+	.dw 0x4143, 0xcc14,	0x414f, 0xcc14,		0x21, 0
+	.dw 0x4151, 0xcc14,	0x4151, 0xcc14,		0x21, 0
+	.dw 0x4153, 0xcc14,	0x417f, 0xcc14,		0x21, 0
+	.dw 0x4181, 0xcc14,	0x4181, 0xcc14,		0x21, 0
+	.dw 0x4183, 0xcc14,	0x418f, 0xcc14,		0x21, 0
+	.dw 0x4191, 0xcc14,	0x4191, 0xcc14,		0x21, 0
+	.dw 0x4193, 0xcc14,	0x41bf, 0xcc14,		0x21, 0
+	.dw 0x41c1, 0xcc14,	0x41c1, 0xcc14,		0x21, 0
+	.dw 0x41c3, 0xcc14,	0x41cf, 0xcc14,		0x21, 0
+	.dw 0x41d1, 0xcc14,	0x41d1, 0xcc14,		0x21, 0
+	.dw 0x41d3, 0xcc14,	0x41ff, 0xcc14,		0x21, 0
+	.dw 0x4201, 0xcc14,	0x4201, 0xcc14,		0x21, 0
+	.dw 0x4203, 0xcc14,	0x420f, 0xcc14,		0x21, 0
+	.dw 0x4211, 0xcc14,	0x4211, 0xcc14,		0x21, 0
+	.dw 0x4213, 0xcc14,	0x423f, 0xcc14,		0x21, 0
+	.dw 0x4241, 0xcc14,	0x4241, 0xcc14,		0x21, 0
+	.dw 0x4243, 0xcc14,	0x424f, 0xcc14,		0x21, 0
+	.dw 0x4251, 0xcc14,	0x4251, 0xcc14,		0x21, 0
+	.dw 0x4253, 0xcc14,	0x427f, 0xcc14,		0x21, 0
+	.dw 0x4281, 0xcc14,	0x4281, 0xcc14,		0x21, 0
+	.dw 0x4283, 0xcc14,	0x428f, 0xcc14,		0x21, 0
+	.dw 0x4291, 0xcc14,	0x4291, 0xcc14,		0x21, 0
+	.dw 0x4293, 0xcc14,	0x42bf, 0xcc14,		0x21, 0
+	.dw 0x42c1, 0xcc14,	0x42c1, 0xcc14,		0x21, 0
+	.dw 0x42c3, 0xcc14,	0x42cf, 0xcc14,		0x21, 0
+	.dw 0x42d1, 0xcc14,	0x42d1, 0xcc14,		0x21, 0
+	.dw 0x42d3, 0xcc14,	0x42ff, 0xcc14,		0x21, 0
+	.dw 0x4301, 0xcc14,	0x4301, 0xcc14,		0x21, 0
+	.dw 0x4303, 0xcc14,	0x430f, 0xcc14,		0x21, 0
+	.dw 0x4311, 0xcc14,	0x4311, 0xcc14,		0x21, 0
+	.dw 0x4313, 0xcc14,	0x433f, 0xcc14,		0x21, 0
+	.dw 0x4341, 0xcc14,	0x4341, 0xcc14,		0x21, 0
+	.dw 0x4343, 0xcc14,	0x434f, 0xcc14,		0x21, 0
+	.dw 0x4351, 0xcc14,	0x4351, 0xcc14,		0x21, 0
+	.dw 0x4353, 0xcc14,	0x437f, 0xcc14,		0x21, 0
+	.dw 0x4381, 0xcc14,	0x4381, 0xcc14,		0x21, 0
+	.dw 0x4383, 0xcc14,	0x438f, 0xcc14,		0x21, 0
+	.dw 0x4391, 0xcc14,	0x4391, 0xcc14,		0x21, 0
+	.dw 0x4393, 0xcc14,	0x43bf, 0xcc14,		0x21, 0
+	.dw 0x43c1, 0xcc14,	0x43c1, 0xcc14,		0x21, 0
+	.dw 0x43c3, 0xcc14,	0x43cf, 0xcc14,		0x21, 0
+	.dw 0x43d1, 0xcc14,	0x43d1, 0xcc14,		0x21, 0
+	.dw 0x43d3, 0xcc14,	0x43ff, 0xcc14,		0x21, 0
+	.dw 0x4401, 0xcc14,	0x4401, 0xcc14,		0x21, 0
+	.dw 0x4403, 0xcc14,	0x440f, 0xcc14,		0x21, 0
+	.dw 0x4411, 0xcc14,	0x4411, 0xcc14,		0x21, 0
+	.dw 0x4413, 0xcc14,	0x443f, 0xcc14,		0x21, 0
+	.dw 0x4441, 0xcc14,	0x4441, 0xcc14,		0x21, 0
+	.dw 0x4443, 0xcc14,	0x444f, 0xcc14,		0x21, 0
+	.dw 0x4451, 0xcc14,	0x4451, 0xcc14,		0x21, 0
+	.dw 0x4453, 0xcc14,	0x447f, 0xcc14,		0x21, 0
+	.dw 0x4481, 0xcc14,	0x4481, 0xcc14,		0x21, 0
+	.dw 0x4483, 0xcc14,	0x448f, 0xcc14,		0x21, 0
+	.dw 0x4491, 0xcc14,	0x4491, 0xcc14,		0x21, 0
+	.dw 0x4493, 0xcc14,	0x44bf, 0xcc14,		0x21, 0
+	.dw 0x44c1, 0xcc14,	0x44c1, 0xcc14,		0x21, 0
+	.dw 0x44c3, 0xcc14,	0x44cf, 0xcc14,		0x21, 0
+	.dw 0x44d1, 0xcc14,	0x44d1, 0xcc14,		0x21, 0
+	.dw 0x44d3, 0xcc14,	0x44ff, 0xcc14,		0x21, 0
+	.dw 0x4501, 0xcc14,	0x4501, 0xcc14,		0x21, 0
+	.dw 0x4503, 0xcc14,	0x450f, 0xcc14,		0x21, 0
+	.dw 0x4511, 0xcc14,	0x4511, 0xcc14,		0x21, 0
+	.dw 0x4513, 0xcc14,	0x453f, 0xcc14,		0x21, 0
+	.dw 0x4541, 0xcc14,	0x4541, 0xcc14,		0x21, 0
+	.dw 0x4543, 0xcc14,	0x454f, 0xcc14,		0x21, 0
+	.dw 0x4551, 0xcc14,	0x4551, 0xcc14,		0x21, 0
+	.dw 0x4553, 0xcc14,	0x457f, 0xcc14,		0x21, 0
+	.dw 0x4581, 0xcc14,	0x4581, 0xcc14,		0x21, 0
+	.dw 0x4583, 0xcc14,	0x458f, 0xcc14,		0x21, 0
+	.dw 0x4591, 0xcc14,	0x4591, 0xcc14,		0x21, 0
+	.dw 0x4593, 0xcc14,	0x45bf, 0xcc14,		0x21, 0
+	.dw 0x45c1, 0xcc14,	0x45c1, 0xcc14,		0x21, 0
+	.dw 0x45c3, 0xcc14,	0x45cf, 0xcc14,		0x21, 0
+	.dw 0x45d1, 0xcc14,	0x45d1, 0xcc14,		0x21, 0
+	.dw 0x45d3, 0xcc14,	0x45ff, 0xcc14,		0x21, 0
+	.dw 0x4601, 0xcc14,	0x4601, 0xcc14,		0x21, 0
+	.dw 0x4603, 0xcc14,	0x460f, 0xcc14,		0x21, 0
+	.dw 0x4611, 0xcc14,	0x4611, 0xcc14,		0x21, 0
+	.dw 0x4613, 0xcc14,	0x463f, 0xcc14,		0x21, 0
+	.dw 0x4641, 0xcc14,	0x4641, 0xcc14,		0x21, 0
+	.dw 0x4643, 0xcc14,	0x464f, 0xcc14,		0x21, 0
+	.dw 0x4651, 0xcc14,	0x4651, 0xcc14,		0x21, 0
+	.dw 0x4653, 0xcc14,	0x467f, 0xcc14,		0x21, 0
+	.dw 0x4681, 0xcc14,	0x4681, 0xcc14,		0x21, 0
+	.dw 0x4683, 0xcc14,	0x468f, 0xcc14,		0x21, 0
+	.dw 0x4691, 0xcc14,	0x4691, 0xcc14,		0x21, 0
+	.dw 0x4693, 0xcc14,	0x46bf, 0xcc14,		0x21, 0
+	.dw 0x46c1, 0xcc14,	0x46c1, 0xcc14,		0x21, 0
+	.dw 0x46c3, 0xcc14,	0x46cf, 0xcc14,		0x21, 0
+	.dw 0x46d1, 0xcc14,	0x46d1, 0xcc14,		0x21, 0
+	.dw 0x46d3, 0xcc14,	0x46ff, 0xcc14,		0x21, 0
+	.dw 0x4701, 0xcc14,	0x4701, 0xcc14,		0x21, 0
+	.dw 0x4703, 0xcc14,	0x470f, 0xcc14,		0x21, 0
+	.dw 0x4711, 0xcc14,	0x4711, 0xcc14,		0x21, 0
+	.dw 0x4713, 0xcc14,	0x473f, 0xcc14,		0x21, 0
+	.dw 0x4741, 0xcc14,	0x4741, 0xcc14,		0x21, 0
+	.dw 0x4743, 0xcc14,	0x474f, 0xcc14,		0x21, 0
+	.dw 0x4751, 0xcc14,	0x4751, 0xcc14,		0x21, 0
+	.dw 0x4753, 0xcc14,	0x477f, 0xcc14,		0x21, 0
+	.dw 0x4781, 0xcc14,	0x4781, 0xcc14,		0x21, 0
+	.dw 0x4783, 0xcc14,	0x478f, 0xcc14,		0x21, 0
+	.dw 0x4791, 0xcc14,	0x4791, 0xcc14,		0x21, 0
+	.dw 0x4793, 0xcc14,	0x47bf, 0xcc14,		0x21, 0
+	.dw 0x47c1, 0xcc14,	0x47c1, 0xcc14,		0x21, 0
+	.dw 0x47c3, 0xcc14,	0x47cf, 0xcc14,		0x21, 0
+	.dw 0x47d1, 0xcc14,	0x47d1, 0xcc14,		0x21, 0
+	.dw 0x47d3, 0xcc14,	0x47ff, 0xcc14,		0x21, 0
+	.dw 0x4801, 0xcc14,	0x4801, 0xcc14,		0x21, 0
+	.dw 0x4803, 0xcc14,	0x480f, 0xcc14,		0x21, 0
+	.dw 0x4811, 0xcc14,	0x4811, 0xcc14,		0x21, 0
+	.dw 0x4813, 0xcc14,	0x483f, 0xcc14,		0x21, 0
+	.dw 0x4841, 0xcc14,	0x4841, 0xcc14,		0x21, 0
+	.dw 0x4843, 0xcc14,	0x484f, 0xcc14,		0x21, 0
+	.dw 0x4851, 0xcc14,	0x4851, 0xcc14,		0x21, 0
+	.dw 0x4853, 0xcc14,	0x487f, 0xcc14,		0x21, 0
+	.dw 0x4881, 0xcc14,	0x4881, 0xcc14,		0x21, 0
+	.dw 0x4883, 0xcc14,	0x488f, 0xcc14,		0x21, 0
+	.dw 0x4891, 0xcc14,	0x4891, 0xcc14,		0x21, 0
+	.dw 0x4893, 0xcc14,	0x48bf, 0xcc14,		0x21, 0
+	.dw 0x48c1, 0xcc14,	0x48c1, 0xcc14,		0x21, 0
+	.dw 0x48c3, 0xcc14,	0x48cf, 0xcc14,		0x21, 0
+	.dw 0x48d1, 0xcc14,	0x48d1, 0xcc14,		0x21, 0
+	.dw 0x48d3, 0xcc14,	0x48ff, 0xcc14,		0x21, 0
+	.dw 0x4901, 0xcc14,	0x4901, 0xcc14,		0x21, 0
+	.dw 0x4903, 0xcc14,	0x490f, 0xcc14,		0x21, 0
+	.dw 0x4911, 0xcc14,	0x4911, 0xcc14,		0x21, 0
+	.dw 0x4913, 0xcc14,	0x493f, 0xcc14,		0x21, 0
+	.dw 0x4941, 0xcc14,	0x4941, 0xcc14,		0x21, 0
+	.dw 0x4943, 0xcc14,	0x494f, 0xcc14,		0x21, 0
+	.dw 0x4951, 0xcc14,	0x4951, 0xcc14,		0x21, 0
+	.dw 0x4953, 0xcc14,	0x497f, 0xcc14,		0x21, 0
+	.dw 0x4981, 0xcc14,	0x4981, 0xcc14,		0x21, 0
+	.dw 0x4983, 0xcc14,	0x498f, 0xcc14,		0x21, 0
+	.dw 0x4991, 0xcc14,	0x4991, 0xcc14,		0x21, 0
+	.dw 0x4993, 0xcc14,	0x49bf, 0xcc14,		0x21, 0
+	.dw 0x49c1, 0xcc14,	0x49c1, 0xcc14,		0x21, 0
+	.dw 0x49c3, 0xcc14,	0x49cf, 0xcc14,		0x21, 0
+	.dw 0x49d1, 0xcc14,	0x49d1, 0xcc14,		0x21, 0
+	.dw 0x49d3, 0xcc14,	0x49ff, 0xcc14,		0x21, 0
+	.dw 0x4a01, 0xcc14,	0x4a01, 0xcc14,		0x21, 0
+	.dw 0x4a03, 0xcc14,	0x4a0f, 0xcc14,		0x21, 0
+	.dw 0x4a11, 0xcc14,	0x4a11, 0xcc14,		0x21, 0
+	.dw 0x4a13, 0xcc14,	0x4a3f, 0xcc14,		0x21, 0
+	.dw 0x4a41, 0xcc14,	0x4a41, 0xcc14,		0x21, 0
+	.dw 0x4a43, 0xcc14,	0x4a4f, 0xcc14,		0x21, 0
+	.dw 0x4a51, 0xcc14,	0x4a51, 0xcc14,		0x21, 0
+	.dw 0x4a53, 0xcc14,	0x4a7f, 0xcc14,		0x21, 0
+	.dw 0x4a81, 0xcc14,	0x4a81, 0xcc14,		0x21, 0
+	.dw 0x4a83, 0xcc14,	0x4a8f, 0xcc14,		0x21, 0
+	.dw 0x4a91, 0xcc14,	0x4a91, 0xcc14,		0x21, 0
+	.dw 0x4a93, 0xcc14,	0x4abf, 0xcc14,		0x21, 0
+	.dw 0x4ac1, 0xcc14,	0x4ac1, 0xcc14,		0x21, 0
+	.dw 0x4ac3, 0xcc14,	0x4acf, 0xcc14,		0x21, 0
+	.dw 0x4ad1, 0xcc14,	0x4ad1, 0xcc14,		0x21, 0
+	.dw 0x4ad3, 0xcc14,	0x4aff, 0xcc14,		0x21, 0
+	.dw 0x4b01, 0xcc14,	0x4b01, 0xcc14,		0x21, 0
+	.dw 0x4b03, 0xcc14,	0x4b0f, 0xcc14,		0x21, 0
+	.dw 0x4b11, 0xcc14,	0x4b11, 0xcc14,		0x21, 0
+	.dw 0x4b13, 0xcc14,	0x4b3f, 0xcc14,		0x21, 0
+	.dw 0x4b41, 0xcc14,	0x4b41, 0xcc14,		0x21, 0
+	.dw 0x4b43, 0xcc14,	0x4b4f, 0xcc14,		0x21, 0
+	.dw 0x4b51, 0xcc14,	0x4b51, 0xcc14,		0x21, 0
+	.dw 0x4b53, 0xcc14,	0x4b7f, 0xcc14,		0x21, 0
+	.dw 0x4b81, 0xcc14,	0x4b81, 0xcc14,		0x21, 0
+	.dw 0x4b83, 0xcc14,	0x4b8f, 0xcc14,		0x21, 0
+	.dw 0x4b91, 0xcc14,	0x4b91, 0xcc14,		0x21, 0
+	.dw 0x4b93, 0xcc14,	0x4bbf, 0xcc14,		0x21, 0
+	.dw 0x4bc1, 0xcc14,	0x4bc1, 0xcc14,		0x21, 0
+	.dw 0x4bc3, 0xcc14,	0x4bcf, 0xcc14,		0x21, 0
+	.dw 0x4bd1, 0xcc14,	0x4bd1, 0xcc14,		0x21, 0
+	.dw 0x4bd3, 0xcc14,	0x4bff, 0xcc14,		0x21, 0
+	.dw 0x4c01, 0xcc14,	0x4c01, 0xcc14,		0x21, 0
+	.dw 0x4c03, 0xcc14,	0x4c0f, 0xcc14,		0x21, 0
+	.dw 0x4c11, 0xcc14,	0x4c11, 0xcc14,		0x21, 0
+	.dw 0x4c13, 0xcc14,	0x4c3f, 0xcc14,		0x21, 0
+	.dw 0x4c41, 0xcc14,	0x4c41, 0xcc14,		0x21, 0
+	.dw 0x4c43, 0xcc14,	0x4c4f, 0xcc14,		0x21, 0
+	.dw 0x4c51, 0xcc14,	0x4c51, 0xcc14,		0x21, 0
+	.dw 0x4c53, 0xcc14,	0x4c7f, 0xcc14,		0x21, 0
+	.dw 0x4c81, 0xcc14,	0x4c81, 0xcc14,		0x21, 0
+	.dw 0x4c83, 0xcc14,	0x4c8f, 0xcc14,		0x21, 0
+	.dw 0x4c91, 0xcc14,	0x4c91, 0xcc14,		0x21, 0
+	.dw 0x4c93, 0xcc14,	0x4cbf, 0xcc14,		0x21, 0
+	.dw 0x4cc1, 0xcc14,	0x4cc1, 0xcc14,		0x21, 0
+	.dw 0x4cc3, 0xcc14,	0x4ccf, 0xcc14,		0x21, 0
+	.dw 0x4cd1, 0xcc14,	0x4cd1, 0xcc14,		0x21, 0
+	.dw 0x4cd3, 0xcc14,	0x4cff, 0xcc14,		0x21, 0
+	.dw 0x4d01, 0xcc14,	0x4d01, 0xcc14,		0x21, 0
+	.dw 0x4d03, 0xcc14,	0x4d0f, 0xcc14,		0x21, 0
+	.dw 0x4d11, 0xcc14,	0x4d11, 0xcc14,		0x21, 0
+	.dw 0x4d13, 0xcc14,	0x4d3f, 0xcc14,		0x21, 0
+	.dw 0x4d41, 0xcc14,	0x4d41, 0xcc14,		0x21, 0
+	.dw 0x4d43, 0xcc14,	0x4d4f, 0xcc14,		0x21, 0
+	.dw 0x4d51, 0xcc14,	0x4d51, 0xcc14,		0x21, 0
+	.dw 0x4d53, 0xcc14,	0x4d7f, 0xcc14,		0x21, 0
+	.dw 0x4d81, 0xcc14,	0x4d81, 0xcc14,		0x21, 0
+	.dw 0x4d83, 0xcc14,	0x4d8f, 0xcc14,		0x21, 0
+	.dw 0x4d91, 0xcc14,	0x4d91, 0xcc14,		0x21, 0
+	.dw 0x4d93, 0xcc14,	0x4dbf, 0xcc14,		0x21, 0
+	.dw 0x4dc1, 0xcc14,	0x4dc1, 0xcc14,		0x21, 0
+	.dw 0x4dc3, 0xcc14,	0x4dcf, 0xcc14,		0x21, 0
+	.dw 0x4dd1, 0xcc14,	0x4dd1, 0xcc14,		0x21, 0
+	.dw 0x4dd3, 0xcc14,	0x4dff, 0xcc14,		0x21, 0
+	.dw 0x4e01, 0xcc14,	0x4e01, 0xcc14,		0x21, 0
+	.dw 0x4e03, 0xcc14,	0x4e0f, 0xcc14,		0x21, 0
+	.dw 0x4e11, 0xcc14,	0x4e11, 0xcc14,		0x21, 0
+	.dw 0x4e13, 0xcc14,	0x4e3f, 0xcc14,		0x21, 0
+	.dw 0x4e41, 0xcc14,	0x4e41, 0xcc14,		0x21, 0
+	.dw 0x4e43, 0xcc14,	0x4e4f, 0xcc14,		0x21, 0
+	.dw 0x4e51, 0xcc14,	0x4e51, 0xcc14,		0x21, 0
+	.dw 0x4e53, 0xcc14,	0x4e7f, 0xcc14,		0x21, 0
+	.dw 0x4e81, 0xcc14,	0x4e81, 0xcc14,		0x21, 0
+	.dw 0x4e83, 0xcc14,	0x4e8f, 0xcc14,		0x21, 0
+	.dw 0x4e91, 0xcc14,	0x4e91, 0xcc14,		0x21, 0
+	.dw 0x4e93, 0xcc14,	0x4ebf, 0xcc14,		0x21, 0
+	.dw 0x4ec1, 0xcc14,	0x4ec1, 0xcc14,		0x21, 0
+	.dw 0x4ec3, 0xcc14,	0x4ecf, 0xcc14,		0x21, 0
+	.dw 0x4ed1, 0xcc14,	0x4ed1, 0xcc14,		0x21, 0
+	.dw 0x4ed3, 0xcc14,	0x4eff, 0xcc14,		0x21, 0
+	.dw 0x4f01, 0xcc14,	0x4f01, 0xcc14,		0x21, 0
+	.dw 0x4f03, 0xcc14,	0x4f0f, 0xcc14,		0x21, 0
+	.dw 0x4f11, 0xcc14,	0x4f11, 0xcc14,		0x21, 0
+	.dw 0x4f13, 0xcc14,	0x4f3f, 0xcc14,		0x21, 0
+	.dw 0x4f41, 0xcc14,	0x4f41, 0xcc14,		0x21, 0
+	.dw 0x4f43, 0xcc14,	0x4f4f, 0xcc14,		0x21, 0
+	.dw 0x4f51, 0xcc14,	0x4f51, 0xcc14,		0x21, 0
+	.dw 0x4f53, 0xcc14,	0x4f7f, 0xcc14,		0x21, 0
+	.dw 0x4f81, 0xcc14,	0x4f81, 0xcc14,		0x21, 0
+	.dw 0x4f83, 0xcc14,	0x4f8f, 0xcc14,		0x21, 0
+	.dw 0x4f91, 0xcc14,	0x4f91, 0xcc14,		0x21, 0
+	.dw 0x4f93, 0xcc14,	0x4fbf, 0xcc14,		0x21, 0
+	.dw 0x4fc1, 0xcc14,	0x4fc1, 0xcc14,		0x21, 0
+	.dw 0x4fc3, 0xcc14,	0x4fcf, 0xcc14,		0x21, 0
+	.dw 0x4fd1, 0xcc14,	0x4fd1, 0xcc14,		0x21, 0
+	.dw 0x4fd3, 0xcc14,	0x5fff, 0xcc14,		0x21, 0
+	.dw 0x6001, 0xcc14,	0x6001, 0xcc14,		0x21, 0
+	.dw 0x6003, 0xcc14,	0x600f, 0xcc14,		0x21, 0
+	.dw 0x6011, 0xcc14,	0x6011, 0xcc14,		0x21, 0
+	.dw 0x6013, 0xcc14,	0x603f, 0xcc14,		0x21, 0
+	.dw 0x6041, 0xcc14,	0x6041, 0xcc14,		0x21, 0
+	.dw 0x6043, 0xcc14,	0x604f, 0xcc14,		0x21, 0
+	.dw 0x6051, 0xcc14,	0x6051, 0xcc14,		0x21, 0
+	.dw 0x6053, 0xcc14,	0x607f, 0xcc14,		0x21, 0
+	.dw 0x6081, 0xcc14,	0x6081, 0xcc14,		0x21, 0
+	.dw 0x6083, 0xcc14,	0x608f, 0xcc14,		0x21, 0
+	.dw 0x6091, 0xcc14,	0x6091, 0xcc14,		0x21, 0
+	.dw 0x6093, 0xcc14,	0x60bf, 0xcc14,		0x21, 0
+	.dw 0x60c1, 0xcc14,	0x60c1, 0xcc14,		0x21, 0
+	.dw 0x60c3, 0xcc14,	0x60cf, 0xcc14,		0x21, 0
+	.dw 0x60d1, 0xcc14,	0x60d1, 0xcc14,		0x21, 0
+	.dw 0x60d3, 0xcc14,	0x60ff, 0xcc14,		0x21, 0
+	.dw 0x6101, 0xcc14,	0x6101, 0xcc14,		0x21, 0
+	.dw 0x6103, 0xcc14,	0x610f, 0xcc14,		0x21, 0
+	.dw 0x6111, 0xcc14,	0x6111, 0xcc14,		0x21, 0
+	.dw 0x6113, 0xcc14,	0x613f, 0xcc14,		0x21, 0
+	.dw 0x6141, 0xcc14,	0x6141, 0xcc14,		0x21, 0
+	.dw 0x6143, 0xcc14,	0x614f, 0xcc14,		0x21, 0
+	.dw 0x6151, 0xcc14,	0x6151, 0xcc14,		0x21, 0
+	.dw 0x6153, 0xcc14,	0x617f, 0xcc14,		0x21, 0
+	.dw 0x6181, 0xcc14,	0x6181, 0xcc14,		0x21, 0
+	.dw 0x6183, 0xcc14,	0x618f, 0xcc14,		0x21, 0
+	.dw 0x6191, 0xcc14,	0x6191, 0xcc14,		0x21, 0
+	.dw 0x6193, 0xcc14,	0x61bf, 0xcc14,		0x21, 0
+	.dw 0x61c1, 0xcc14,	0x61c1, 0xcc14,		0x21, 0
+	.dw 0x61c3, 0xcc14,	0x61cf, 0xcc14,		0x21, 0
+	.dw 0x61d1, 0xcc14,	0x61d1, 0xcc14,		0x21, 0
+	.dw 0x61d3, 0xcc14,	0x61ff, 0xcc14,		0x21, 0
+	.dw 0x6201, 0xcc14,	0x6201, 0xcc14,		0x21, 0
+	.dw 0x6203, 0xcc14,	0x620f, 0xcc14,		0x21, 0
+	.dw 0x6211, 0xcc14,	0x6211, 0xcc14,		0x21, 0
+	.dw 0x6213, 0xcc14,	0x623f, 0xcc14,		0x21, 0
+	.dw 0x6241, 0xcc14,	0x6241, 0xcc14,		0x21, 0
+	.dw 0x6243, 0xcc14,	0x624f, 0xcc14,		0x21, 0
+	.dw 0x6251, 0xcc14,	0x6251, 0xcc14,		0x21, 0
+	.dw 0x6253, 0xcc14,	0x627f, 0xcc14,		0x21, 0
+	.dw 0x6281, 0xcc14,	0x6281, 0xcc14,		0x21, 0
+	.dw 0x6283, 0xcc14,	0x628f, 0xcc14,		0x21, 0
+	.dw 0x6291, 0xcc14,	0x6291, 0xcc14,		0x21, 0
+	.dw 0x6293, 0xcc14,	0x62bf, 0xcc14,		0x21, 0
+	.dw 0x62c1, 0xcc14,	0x62c1, 0xcc14,		0x21, 0
+	.dw 0x62c3, 0xcc14,	0x62cf, 0xcc14,		0x21, 0
+	.dw 0x62d1, 0xcc14,	0x62d1, 0xcc14,		0x21, 0
+	.dw 0x62d3, 0xcc14,	0x62ff, 0xcc14,		0x21, 0
+	.dw 0x6301, 0xcc14,	0x6301, 0xcc14,		0x21, 0
+	.dw 0x6303, 0xcc14,	0x630f, 0xcc14,		0x21, 0
+	.dw 0x6311, 0xcc14,	0x6311, 0xcc14,		0x21, 0
+	.dw 0x6313, 0xcc14,	0x633f, 0xcc14,		0x21, 0
+	.dw 0x6341, 0xcc14,	0x6341, 0xcc14,		0x21, 0
+	.dw 0x6343, 0xcc14,	0x634f, 0xcc14,		0x21, 0
+	.dw 0x6351, 0xcc14,	0x6351, 0xcc14,		0x21, 0
+	.dw 0x6353, 0xcc14,	0x637f, 0xcc14,		0x21, 0
+	.dw 0x6381, 0xcc14,	0x6381, 0xcc14,		0x21, 0
+	.dw 0x6383, 0xcc14,	0x638f, 0xcc14,		0x21, 0
+	.dw 0x6391, 0xcc14,	0x6391, 0xcc14,		0x21, 0
+	.dw 0x6393, 0xcc14,	0x63bf, 0xcc14,		0x21, 0
+	.dw 0x63c1, 0xcc14,	0x63c1, 0xcc14,		0x21, 0
+	.dw 0x63c3, 0xcc14,	0x63cf, 0xcc14,		0x21, 0
+	.dw 0x63d1, 0xcc14,	0x63d1, 0xcc14,		0x21, 0
+	.dw 0x63d3, 0xcc14,	0x63ff, 0xcc14,		0x21, 0
+	.dw 0x6401, 0xcc14,	0x6401, 0xcc14,		0x21, 0
+	.dw 0x6403, 0xcc14,	0x640f, 0xcc14,		0x21, 0
+	.dw 0x6411, 0xcc14,	0x6411, 0xcc14,		0x21, 0
+	.dw 0x6413, 0xcc14,	0x643f, 0xcc14,		0x21, 0
+	.dw 0x6441, 0xcc14,	0x6441, 0xcc14,		0x21, 0
+	.dw 0x6443, 0xcc14,	0x644f, 0xcc14,		0x21, 0
+	.dw 0x6451, 0xcc14,	0x6451, 0xcc14,		0x21, 0
+	.dw 0x6453, 0xcc14,	0x647f, 0xcc14,		0x21, 0
+	.dw 0x6481, 0xcc14,	0x6481, 0xcc14,		0x21, 0
+	.dw 0x6483, 0xcc14,	0x648f, 0xcc14,		0x21, 0
+	.dw 0x6491, 0xcc14,	0x6491, 0xcc14,		0x21, 0
+	.dw 0x6493, 0xcc14,	0x64bf, 0xcc14,		0x21, 0
+	.dw 0x64c1, 0xcc14,	0x64c1, 0xcc14,		0x21, 0
+	.dw 0x64c3, 0xcc14,	0x64cf, 0xcc14,		0x21, 0
+	.dw 0x64d1, 0xcc14,	0x64d1, 0xcc14,		0x21, 0
+	.dw 0x64d3, 0xcc14,	0x64ff, 0xcc14,		0x21, 0
+	.dw 0x6501, 0xcc14,	0x6501, 0xcc14,		0x21, 0
+	.dw 0x6503, 0xcc14,	0x650f, 0xcc14,		0x21, 0
+	.dw 0x6511, 0xcc14,	0x6511, 0xcc14,		0x21, 0
+	.dw 0x6513, 0xcc14,	0x653f, 0xcc14,		0x21, 0
+	.dw 0x6541, 0xcc14,	0x6541, 0xcc14,		0x21, 0
+	.dw 0x6543, 0xcc14,	0x654f, 0xcc14,		0x21, 0
+	.dw 0x6551, 0xcc14,	0x6551, 0xcc14,		0x21, 0
+	.dw 0x6553, 0xcc14,	0x657f, 0xcc14,		0x21, 0
+	.dw 0x6581, 0xcc14,	0x6581, 0xcc14,		0x21, 0
+	.dw 0x6583, 0xcc14,	0x658f, 0xcc14,		0x21, 0
+	.dw 0x6591, 0xcc14,	0x6591, 0xcc14,		0x21, 0
+	.dw 0x6593, 0xcc14,	0x65bf, 0xcc14,		0x21, 0
+	.dw 0x65c1, 0xcc14,	0x65c1, 0xcc14,		0x21, 0
+	.dw 0x65c3, 0xcc14,	0x65cf, 0xcc14,		0x21, 0
+	.dw 0x65d1, 0xcc14,	0x65d1, 0xcc14,		0x21, 0
+	.dw 0x65d3, 0xcc14,	0x65ff, 0xcc14,		0x21, 0
+	.dw 0x6601, 0xcc14,	0x6601, 0xcc14,		0x21, 0
+	.dw 0x6603, 0xcc14,	0x660f, 0xcc14,		0x21, 0
+	.dw 0x6611, 0xcc14,	0x6611, 0xcc14,		0x21, 0
+	.dw 0x6613, 0xcc14,	0x663f, 0xcc14,		0x21, 0
+	.dw 0x6641, 0xcc14,	0x6641, 0xcc14,		0x21, 0
+	.dw 0x6643, 0xcc14,	0x664f, 0xcc14,		0x21, 0
+	.dw 0x6651, 0xcc14,	0x6651, 0xcc14,		0x21, 0
+	.dw 0x6653, 0xcc14,	0x667f, 0xcc14,		0x21, 0
+	.dw 0x6681, 0xcc14,	0x6681, 0xcc14,		0x21, 0
+	.dw 0x6683, 0xcc14,	0x668f, 0xcc14,		0x21, 0
+	.dw 0x6691, 0xcc14,	0x6691, 0xcc14,		0x21, 0
+	.dw 0x6693, 0xcc14,	0x66bf, 0xcc14,		0x21, 0
+	.dw 0x66c1, 0xcc14,	0x66c1, 0xcc14,		0x21, 0
+	.dw 0x66c3, 0xcc14,	0x66cf, 0xcc14,		0x21, 0
+	.dw 0x66d1, 0xcc14,	0x66d1, 0xcc14,		0x21, 0
+	.dw 0x66d3, 0xcc14,	0x66ff, 0xcc14,		0x21, 0
+	.dw 0x6701, 0xcc14,	0x6701, 0xcc14,		0x21, 0
+	.dw 0x6703, 0xcc14,	0x670f, 0xcc14,		0x21, 0
+	.dw 0x6711, 0xcc14,	0x6711, 0xcc14,		0x21, 0
+	.dw 0x6713, 0xcc14,	0x673f, 0xcc14,		0x21, 0
+	.dw 0x6741, 0xcc14,	0x6741, 0xcc14,		0x21, 0
+	.dw 0x6743, 0xcc14,	0x674f, 0xcc14,		0x21, 0
+	.dw 0x6751, 0xcc14,	0x6751, 0xcc14,		0x21, 0
+	.dw 0x6753, 0xcc14,	0x677f, 0xcc14,		0x21, 0
+	.dw 0x6781, 0xcc14,	0x6781, 0xcc14,		0x21, 0
+	.dw 0x6783, 0xcc14,	0x678f, 0xcc14,		0x21, 0
+	.dw 0x6791, 0xcc14,	0x6791, 0xcc14,		0x21, 0
+	.dw 0x6793, 0xcc14,	0x67bf, 0xcc14,		0x21, 0
+	.dw 0x67c1, 0xcc14,	0x67c1, 0xcc14,		0x21, 0
+	.dw 0x67c3, 0xcc14,	0x67cf, 0xcc14,		0x21, 0
+	.dw 0x67d1, 0xcc14,	0x67d1, 0xcc14,		0x21, 0
+	.dw 0x67d3, 0xcc14,	0x67ff, 0xcc14,		0x21, 0
+	.dw 0x6801, 0xcc14,	0x6801, 0xcc14,		0x21, 0
+	.dw 0x6803, 0xcc14,	0x680f, 0xcc14,		0x21, 0
+	.dw 0x6811, 0xcc14,	0x6811, 0xcc14,		0x21, 0
+	.dw 0x6813, 0xcc14,	0x683f, 0xcc14,		0x21, 0
+	.dw 0x6841, 0xcc14,	0x6841, 0xcc14,		0x21, 0
+	.dw 0x6843, 0xcc14,	0x684f, 0xcc14,		0x21, 0
+	.dw 0x6851, 0xcc14,	0x6851, 0xcc14,		0x21, 0
+	.dw 0x6853, 0xcc14,	0x687f, 0xcc14,		0x21, 0
+	.dw 0x6881, 0xcc14,	0x6881, 0xcc14,		0x21, 0
+	.dw 0x6883, 0xcc14,	0x688f, 0xcc14,		0x21, 0
+	.dw 0x6891, 0xcc14,	0x6891, 0xcc14,		0x21, 0
+	.dw 0x6893, 0xcc14,	0x68bf, 0xcc14,		0x21, 0
+	.dw 0x68c1, 0xcc14,	0x68c1, 0xcc14,		0x21, 0
+	.dw 0x68c3, 0xcc14,	0x68cf, 0xcc14,		0x21, 0
+	.dw 0x68d1, 0xcc14,	0x68d1, 0xcc14,		0x21, 0
+	.dw 0x68d3, 0xcc14,	0x68ff, 0xcc14,		0x21, 0
+	.dw 0x6901, 0xcc14,	0x6901, 0xcc14,		0x21, 0
+	.dw 0x6903, 0xcc14,	0x690f, 0xcc14,		0x21, 0
+	.dw 0x6911, 0xcc14,	0x6911, 0xcc14,		0x21, 0
+	.dw 0x6913, 0xcc14,	0x693f, 0xcc14,		0x21, 0
+	.dw 0x6941, 0xcc14,	0x6941, 0xcc14,		0x21, 0
+	.dw 0x6943, 0xcc14,	0x694f, 0xcc14,		0x21, 0
+	.dw 0x6951, 0xcc14,	0x6951, 0xcc14,		0x21, 0
+	.dw 0x6953, 0xcc14,	0x697f, 0xcc14,		0x21, 0
+	.dw 0x6981, 0xcc14,	0x6981, 0xcc14,		0x21, 0
+	.dw 0x6983, 0xcc14,	0x698f, 0xcc14,		0x21, 0
+	.dw 0x6991, 0xcc14,	0x6991, 0xcc14,		0x21, 0
+	.dw 0x6993, 0xcc14,	0x69bf, 0xcc14,		0x21, 0
+	.dw 0x69c1, 0xcc14,	0x69c1, 0xcc14,		0x21, 0
+	.dw 0x69c3, 0xcc14,	0x69cf, 0xcc14,		0x21, 0
+	.dw 0x69d1, 0xcc14,	0x69d1, 0xcc14,		0x21, 0
+	.dw 0x69d3, 0xcc14,	0x69ff, 0xcc14,		0x21, 0
+	.dw 0x6a01, 0xcc14,	0x6a01, 0xcc14,		0x21, 0
+	.dw 0x6a03, 0xcc14,	0x6a0f, 0xcc14,		0x21, 0
+	.dw 0x6a11, 0xcc14,	0x6a11, 0xcc14,		0x21, 0
+	.dw 0x6a13, 0xcc14,	0x6a3f, 0xcc14,		0x21, 0
+	.dw 0x6a41, 0xcc14,	0x6a41, 0xcc14,		0x21, 0
+	.dw 0x6a43, 0xcc14,	0x6a4f, 0xcc14,		0x21, 0
+	.dw 0x6a51, 0xcc14,	0x6a51, 0xcc14,		0x21, 0
+	.dw 0x6a53, 0xcc14,	0x6a7f, 0xcc14,		0x21, 0
+	.dw 0x6a81, 0xcc14,	0x6a81, 0xcc14,		0x21, 0
+	.dw 0x6a83, 0xcc14,	0x6a8f, 0xcc14,		0x21, 0
+	.dw 0x6a91, 0xcc14,	0x6a91, 0xcc14,		0x21, 0
+	.dw 0x6a93, 0xcc14,	0x6abf, 0xcc14,		0x21, 0
+	.dw 0x6ac1, 0xcc14,	0x6ac1, 0xcc14,		0x21, 0
+	.dw 0x6ac3, 0xcc14,	0x6acf, 0xcc14,		0x21, 0
+	.dw 0x6ad1, 0xcc14,	0x6ad1, 0xcc14,		0x21, 0
+	.dw 0x6ad3, 0xcc14,	0x6aff, 0xcc14,		0x21, 0
+	.dw 0x6b01, 0xcc14,	0x6b01, 0xcc14,		0x21, 0
+	.dw 0x6b03, 0xcc14,	0x6b0f, 0xcc14,		0x21, 0
+	.dw 0x6b11, 0xcc14,	0x6b11, 0xcc14,		0x21, 0
+	.dw 0x6b13, 0xcc14,	0x6b3f, 0xcc14,		0x21, 0
+	.dw 0x6b41, 0xcc14,	0x6b41, 0xcc14,		0x21, 0
+	.dw 0x6b43, 0xcc14,	0x6b4f, 0xcc14,		0x21, 0
+	.dw 0x6b51, 0xcc14,	0x6b51, 0xcc14,		0x21, 0
+	.dw 0x6b53, 0xcc14,	0x6b7f, 0xcc14,		0x21, 0
+	.dw 0x6b81, 0xcc14,	0x6b81, 0xcc14,		0x21, 0
+	.dw 0x6b83, 0xcc14,	0x6b8f, 0xcc14,		0x21, 0
+	.dw 0x6b91, 0xcc14,	0x6b91, 0xcc14,		0x21, 0
+	.dw 0x6b93, 0xcc14,	0x6bbf, 0xcc14,		0x21, 0
+	.dw 0x6bc1, 0xcc14,	0x6bc1, 0xcc14,		0x21, 0
+	.dw 0x6bc3, 0xcc14,	0x6bcf, 0xcc14,		0x21, 0
+	.dw 0x6bd1, 0xcc14,	0x6bd1, 0xcc14,		0x21, 0
+	.dw 0x6bd3, 0xcc14,	0x6bff, 0xcc14,		0x21, 0
+	.dw 0x6c01, 0xcc14,	0x6c01, 0xcc14,		0x21, 0
+	.dw 0x6c03, 0xcc14,	0x6c0f, 0xcc14,		0x21, 0
+	.dw 0x6c11, 0xcc14,	0x6c11, 0xcc14,		0x21, 0
+	.dw 0x6c13, 0xcc14,	0x6c3f, 0xcc14,		0x21, 0
+	.dw 0x6c41, 0xcc14,	0x6c41, 0xcc14,		0x21, 0
+	.dw 0x6c43, 0xcc14,	0x6c4f, 0xcc14,		0x21, 0
+	.dw 0x6c51, 0xcc14,	0x6c51, 0xcc14,		0x21, 0
+	.dw 0x6c53, 0xcc14,	0x6c7f, 0xcc14,		0x21, 0
+	.dw 0x6c81, 0xcc14,	0x6c81, 0xcc14,		0x21, 0
+	.dw 0x6c83, 0xcc14,	0x6c8f, 0xcc14,		0x21, 0
+	.dw 0x6c91, 0xcc14,	0x6c91, 0xcc14,		0x21, 0
+	.dw 0x6c93, 0xcc14,	0x6cbf, 0xcc14,		0x21, 0
+	.dw 0x6cc1, 0xcc14,	0x6cc1, 0xcc14,		0x21, 0
+	.dw 0x6cc3, 0xcc14,	0x6ccf, 0xcc14,		0x21, 0
+	.dw 0x6cd1, 0xcc14,	0x6cd1, 0xcc14,		0x21, 0
+	.dw 0x6cd3, 0xcc14,	0x6cff, 0xcc14,		0x21, 0
+	.dw 0x6d01, 0xcc14,	0x6d01, 0xcc14,		0x21, 0
+	.dw 0x6d03, 0xcc14,	0x6d0f, 0xcc14,		0x21, 0
+	.dw 0x6d11, 0xcc14,	0x6d11, 0xcc14,		0x21, 0
+	.dw 0x6d13, 0xcc14,	0x6d3f, 0xcc14,		0x21, 0
+	.dw 0x6d41, 0xcc14,	0x6d41, 0xcc14,		0x21, 0
+	.dw 0x6d43, 0xcc14,	0x6d4f, 0xcc14,		0x21, 0
+	.dw 0x6d51, 0xcc14,	0x6d51, 0xcc14,		0x21, 0
+	.dw 0x6d53, 0xcc14,	0x6d7f, 0xcc14,		0x21, 0
+	.dw 0x6d81, 0xcc14,	0x6d81, 0xcc14,		0x21, 0
+	.dw 0x6d83, 0xcc14,	0x6d8f, 0xcc14,		0x21, 0
+	.dw 0x6d91, 0xcc14,	0x6d91, 0xcc14,		0x21, 0
+	.dw 0x6d93, 0xcc14,	0x6dbf, 0xcc14,		0x21, 0
+	.dw 0x6dc1, 0xcc14,	0x6dc1, 0xcc14,		0x21, 0
+	.dw 0x6dc3, 0xcc14,	0x6dcf, 0xcc14,		0x21, 0
+	.dw 0x6dd1, 0xcc14,	0x6dd1, 0xcc14,		0x21, 0
+	.dw 0x6dd3, 0xcc14,	0x6dff, 0xcc14,		0x21, 0
+	.dw 0x6e01, 0xcc14,	0x6e01, 0xcc14,		0x21, 0
+	.dw 0x6e03, 0xcc14,	0x6e0f, 0xcc14,		0x21, 0
+	.dw 0x6e11, 0xcc14,	0x6e11, 0xcc14,		0x21, 0
+	.dw 0x6e13, 0xcc14,	0x6e3f, 0xcc14,		0x21, 0
+	.dw 0x6e41, 0xcc14,	0x6e41, 0xcc14,		0x21, 0
+	.dw 0x6e43, 0xcc14,	0x6e4f, 0xcc14,		0x21, 0
+	.dw 0x6e51, 0xcc14,	0x6e51, 0xcc14,		0x21, 0
+	.dw 0x6e53, 0xcc14,	0x6e7f, 0xcc14,		0x21, 0
+	.dw 0x6e81, 0xcc14,	0x6e81, 0xcc14,		0x21, 0
+	.dw 0x6e83, 0xcc14,	0x6e8f, 0xcc14,		0x21, 0
+	.dw 0x6e91, 0xcc14,	0x6e91, 0xcc14,		0x21, 0
+	.dw 0x6e93, 0xcc14,	0x6ebf, 0xcc14,		0x21, 0
+	.dw 0x6ec1, 0xcc14,	0x6ec1, 0xcc14,		0x21, 0
+	.dw 0x6ec3, 0xcc14,	0x6ecf, 0xcc14,		0x21, 0
+	.dw 0x6ed1, 0xcc14,	0x6ed1, 0xcc14,		0x21, 0
+	.dw 0x6ed3, 0xcc14,	0x6eff, 0xcc14,		0x21, 0
+	.dw 0x6f01, 0xcc14,	0x6f01, 0xcc14,		0x21, 0
+	.dw 0x6f03, 0xcc14,	0x6f0f, 0xcc14,		0x21, 0
+	.dw 0x6f11, 0xcc14,	0x6f11, 0xcc14,		0x21, 0
+	.dw 0x6f13, 0xcc14,	0x6f3f, 0xcc14,		0x21, 0
+	.dw 0x6f41, 0xcc14,	0x6f41, 0xcc14,		0x21, 0
+	.dw 0x6f43, 0xcc14,	0x6f4f, 0xcc14,		0x21, 0
+	.dw 0x6f51, 0xcc14,	0x6f51, 0xcc14,		0x21, 0
+	.dw 0x6f53, 0xcc14,	0x6f7f, 0xcc14,		0x21, 0
+	.dw 0x6f81, 0xcc14,	0x6f81, 0xcc14,		0x21, 0
+	.dw 0x6f83, 0xcc14,	0x6f8f, 0xcc14,		0x21, 0
+	.dw 0x6f91, 0xcc14,	0x6f91, 0xcc14,		0x21, 0
+	.dw 0x6f93, 0xcc14,	0x6fbf, 0xcc14,		0x21, 0
+	.dw 0x6fc1, 0xcc14,	0x6fc1, 0xcc14,		0x21, 0
+	.dw 0x6fc3, 0xcc14,	0x6fcf, 0xcc14,		0x21, 0
+	.dw 0x6fd1, 0xcc14,	0x6fd1, 0xcc14,		0x21, 0
+	.dw 0x6fd3, 0xcc14,	0xffff, 0xcc14,		0x21, 0
+	.dw 0x0000, 0xcc15,	0x0000, 0xcc15,		0x22, 0
+	.dw 0x0001, 0xcc15,	0x0001, 0xcc15,		0x21, 0
+	.dw 0x0002, 0xcc15,	0x0002, 0xcc15,		0x22, 0
+	.dw 0x0003, 0xcc15,	0x000f, 0xcc15,		0x21, 0
+	.dw 0x0010, 0xcc15,	0x0010, 0xcc15,		0x22, 0
+	.dw 0x0011, 0xcc15,	0x0011, 0xcc15,		0x21, 0
+	.dw 0x0012, 0xcc15,	0x0012, 0xcc15,		0x22, 0
+	.dw 0x0013, 0xcc15,	0x003f, 0xcc15,		0x21, 0
+	.dw 0x0041, 0xcc15,	0x0041, 0xcc15,		0x21, 0
+	.dw 0x0043, 0xcc15,	0x004f, 0xcc15,		0x21, 0
+	.dw 0x0051, 0xcc15,	0x0051, 0xcc15,		0x21, 0
+	.dw 0x0053, 0xcc15,	0x007f, 0xcc15,		0x21, 0
+	.dw 0x0081, 0xcc15,	0x0081, 0xcc15,		0x21, 0
+	.dw 0x0083, 0xcc15,	0x008f, 0xcc15,		0x21, 0
+	.dw 0x0091, 0xcc15,	0x0091, 0xcc15,		0x21, 0
+	.dw 0x0093, 0xcc15,	0x00bf, 0xcc15,		0x21, 0
+	.dw 0x00c1, 0xcc15,	0x00c1, 0xcc15,		0x21, 0
+	.dw 0x00c3, 0xcc15,	0x00cf, 0xcc15,		0x21, 0
+	.dw 0x00d1, 0xcc15,	0x00d1, 0xcc15,		0x21, 0
+	.dw 0x00d3, 0xcc15,	0x00ff, 0xcc15,		0x21, 0
+	.dw 0x0101, 0xcc15,	0x0101, 0xcc15,		0x21, 0
+	.dw 0x0103, 0xcc15,	0x010f, 0xcc15,		0x21, 0
+	.dw 0x0111, 0xcc15,	0x0111, 0xcc15,		0x21, 0
+	.dw 0x0113, 0xcc15,	0x013f, 0xcc15,		0x21, 0
+	.dw 0x0141, 0xcc15,	0x0141, 0xcc15,		0x21, 0
+	.dw 0x0143, 0xcc15,	0x014f, 0xcc15,		0x21, 0
+	.dw 0x0151, 0xcc15,	0x0151, 0xcc15,		0x21, 0
+	.dw 0x0153, 0xcc15,	0x017f, 0xcc15,		0x21, 0
+	.dw 0x0181, 0xcc15,	0x0181, 0xcc15,		0x21, 0
+	.dw 0x0183, 0xcc15,	0x018f, 0xcc15,		0x21, 0
+	.dw 0x0191, 0xcc15,	0x0191, 0xcc15,		0x21, 0
+	.dw 0x0193, 0xcc15,	0x01bf, 0xcc15,		0x21, 0
+	.dw 0x01c1, 0xcc15,	0x01c1, 0xcc15,		0x21, 0
+	.dw 0x01c3, 0xcc15,	0x01cf, 0xcc15,		0x21, 0
+	.dw 0x01d1, 0xcc15,	0x01d1, 0xcc15,		0x21, 0
+	.dw 0x01d3, 0xcc15,	0x01ff, 0xcc15,		0x21, 0
+	.dw 0x0201, 0xcc15,	0x0201, 0xcc15,		0x21, 0
+	.dw 0x0203, 0xcc15,	0x020f, 0xcc15,		0x21, 0
+	.dw 0x0211, 0xcc15,	0x0211, 0xcc15,		0x21, 0
+	.dw 0x0213, 0xcc15,	0x023f, 0xcc15,		0x21, 0
+	.dw 0x0240, 0xcc15,	0x0240, 0xcc15,		0x22, 0
+	.dw 0x0241, 0xcc15,	0x0241, 0xcc15,		0x21, 0
+	.dw 0x0242, 0xcc15,	0x0242, 0xcc15,		0x22, 0
+	.dw 0x0243, 0xcc15,	0x024f, 0xcc15,		0x21, 0
+	.dw 0x0250, 0xcc15,	0x0250, 0xcc15,		0x22, 0
+	.dw 0x0251, 0xcc15,	0x0251, 0xcc15,		0x21, 0
+	.dw 0x0252, 0xcc15,	0x0252, 0xcc15,		0x22, 0
+	.dw 0x0253, 0xcc15,	0x027f, 0xcc15,		0x21, 0
+	.dw 0x0281, 0xcc15,	0x0281, 0xcc15,		0x21, 0
+	.dw 0x0283, 0xcc15,	0x028f, 0xcc15,		0x21, 0
+	.dw 0x0291, 0xcc15,	0x0291, 0xcc15,		0x21, 0
+	.dw 0x0293, 0xcc15,	0x02bf, 0xcc15,		0x21, 0
+	.dw 0x02c1, 0xcc15,	0x02c1, 0xcc15,		0x21, 0
+	.dw 0x02c3, 0xcc15,	0x02cf, 0xcc15,		0x21, 0
+	.dw 0x02d1, 0xcc15,	0x02d1, 0xcc15,		0x21, 0
+	.dw 0x02d3, 0xcc15,	0x02ff, 0xcc15,		0x21, 0
+	.dw 0x0301, 0xcc15,	0x0301, 0xcc15,		0x21, 0
+	.dw 0x0303, 0xcc15,	0x030f, 0xcc15,		0x21, 0
+	.dw 0x0311, 0xcc15,	0x0311, 0xcc15,		0x21, 0
+	.dw 0x0313, 0xcc15,	0x033f, 0xcc15,		0x21, 0
+	.dw 0x0341, 0xcc15,	0x0341, 0xcc15,		0x21, 0
+	.dw 0x0343, 0xcc15,	0x034f, 0xcc15,		0x21, 0
+	.dw 0x0351, 0xcc15,	0x0351, 0xcc15,		0x21, 0
+	.dw 0x0353, 0xcc15,	0x037f, 0xcc15,		0x21, 0
+	.dw 0x0381, 0xcc15,	0x0381, 0xcc15,		0x21, 0
+	.dw 0x0383, 0xcc15,	0x038f, 0xcc15,		0x21, 0
+	.dw 0x0391, 0xcc15,	0x0391, 0xcc15,		0x21, 0
+	.dw 0x0393, 0xcc15,	0x03bf, 0xcc15,		0x21, 0
+	.dw 0x03c1, 0xcc15,	0x03c1, 0xcc15,		0x21, 0
+	.dw 0x03c3, 0xcc15,	0x03cf, 0xcc15,		0x21, 0
+	.dw 0x03d1, 0xcc15,	0x03d1, 0xcc15,		0x21, 0
+	.dw 0x03d3, 0xcc15,	0x03ff, 0xcc15,		0x21, 0
+	.dw 0x0401, 0xcc15,	0x0401, 0xcc15,		0x21, 0
+	.dw 0x0403, 0xcc15,	0x040f, 0xcc15,		0x21, 0
+	.dw 0x0411, 0xcc15,	0x0411, 0xcc15,		0x21, 0
+	.dw 0x0413, 0xcc15,	0x043f, 0xcc15,		0x21, 0
+	.dw 0x0441, 0xcc15,	0x0441, 0xcc15,		0x21, 0
+	.dw 0x0443, 0xcc15,	0x044f, 0xcc15,		0x21, 0
+	.dw 0x0451, 0xcc15,	0x0451, 0xcc15,		0x21, 0
+	.dw 0x0453, 0xcc15,	0x047f, 0xcc15,		0x21, 0
+	.dw 0x0480, 0xcc15,	0x0480, 0xcc15,		0x22, 0
+	.dw 0x0481, 0xcc15,	0x0481, 0xcc15,		0x21, 0
+	.dw 0x0482, 0xcc15,	0x0482, 0xcc15,		0x22, 0
+	.dw 0x0483, 0xcc15,	0x048f, 0xcc15,		0x21, 0
+	.dw 0x0490, 0xcc15,	0x0490, 0xcc15,		0x22, 0
+	.dw 0x0491, 0xcc15,	0x0491, 0xcc15,		0x21, 0
+	.dw 0x0492, 0xcc15,	0x0492, 0xcc15,		0x22, 0
+	.dw 0x0493, 0xcc15,	0x04bf, 0xcc15,		0x21, 0
+	.dw 0x04c1, 0xcc15,	0x04c1, 0xcc15,		0x21, 0
+	.dw 0x04c3, 0xcc15,	0x04cf, 0xcc15,		0x21, 0
+	.dw 0x04d1, 0xcc15,	0x04d1, 0xcc15,		0x21, 0
+	.dw 0x04d3, 0xcc15,	0x04ff, 0xcc15,		0x21, 0
+	.dw 0x0501, 0xcc15,	0x0501, 0xcc15,		0x21, 0
+	.dw 0x0503, 0xcc15,	0x050f, 0xcc15,		0x21, 0
+	.dw 0x0511, 0xcc15,	0x0511, 0xcc15,		0x21, 0
+	.dw 0x0513, 0xcc15,	0x053f, 0xcc15,		0x21, 0
+	.dw 0x0541, 0xcc15,	0x0541, 0xcc15,		0x21, 0
+	.dw 0x0543, 0xcc15,	0x054f, 0xcc15,		0x21, 0
+	.dw 0x0551, 0xcc15,	0x0551, 0xcc15,		0x21, 0
+	.dw 0x0553, 0xcc15,	0x057f, 0xcc15,		0x21, 0
+	.dw 0x0581, 0xcc15,	0x0581, 0xcc15,		0x21, 0
+	.dw 0x0583, 0xcc15,	0x058f, 0xcc15,		0x21, 0
+	.dw 0x0591, 0xcc15,	0x0591, 0xcc15,		0x21, 0
+	.dw 0x0593, 0xcc15,	0x05bf, 0xcc15,		0x21, 0
+	.dw 0x05c1, 0xcc15,	0x05c1, 0xcc15,		0x21, 0
+	.dw 0x05c3, 0xcc15,	0x05cf, 0xcc15,		0x21, 0
+	.dw 0x05d1, 0xcc15,	0x05d1, 0xcc15,		0x21, 0
+	.dw 0x05d3, 0xcc15,	0x05ff, 0xcc15,		0x21, 0
+	.dw 0x0601, 0xcc15,	0x0601, 0xcc15,		0x21, 0
+	.dw 0x0603, 0xcc15,	0x060f, 0xcc15,		0x21, 0
+	.dw 0x0611, 0xcc15,	0x0611, 0xcc15,		0x21, 0
+	.dw 0x0613, 0xcc15,	0x063f, 0xcc15,		0x21, 0
+	.dw 0x0641, 0xcc15,	0x0641, 0xcc15,		0x21, 0
+	.dw 0x0643, 0xcc15,	0x064f, 0xcc15,		0x21, 0
+	.dw 0x0651, 0xcc15,	0x0651, 0xcc15,		0x21, 0
+	.dw 0x0653, 0xcc15,	0x067f, 0xcc15,		0x21, 0
+	.dw 0x0681, 0xcc15,	0x0681, 0xcc15,		0x21, 0
+	.dw 0x0683, 0xcc15,	0x068f, 0xcc15,		0x21, 0
+	.dw 0x0691, 0xcc15,	0x0691, 0xcc15,		0x21, 0
+	.dw 0x0693, 0xcc15,	0x06bf, 0xcc15,		0x21, 0
+	.dw 0x06c0, 0xcc15,	0x06c0, 0xcc15,		0x22, 0
+	.dw 0x06c1, 0xcc15,	0x06c1, 0xcc15,		0x21, 0
+	.dw 0x06c2, 0xcc15,	0x06c2, 0xcc15,		0x22, 0
+	.dw 0x06c3, 0xcc15,	0x06cf, 0xcc15,		0x21, 0
+	.dw 0x06d0, 0xcc15,	0x06d0, 0xcc15,		0x22, 0
+	.dw 0x06d1, 0xcc15,	0x06d1, 0xcc15,		0x21, 0
+	.dw 0x06d2, 0xcc15,	0x06d2, 0xcc15,		0x22, 0
+	.dw 0x06d3, 0xcc15,	0x06ff, 0xcc15,		0x21, 0
+	.dw 0x0701, 0xcc15,	0x0701, 0xcc15,		0x21, 0
+	.dw 0x0703, 0xcc15,	0x070f, 0xcc15,		0x21, 0
+	.dw 0x0711, 0xcc15,	0x0711, 0xcc15,		0x21, 0
+	.dw 0x0713, 0xcc15,	0x073f, 0xcc15,		0x21, 0
+	.dw 0x0741, 0xcc15,	0x0741, 0xcc15,		0x21, 0
+	.dw 0x0743, 0xcc15,	0x074f, 0xcc15,		0x21, 0
+	.dw 0x0751, 0xcc15,	0x0751, 0xcc15,		0x21, 0
+	.dw 0x0753, 0xcc15,	0x077f, 0xcc15,		0x21, 0
+	.dw 0x0781, 0xcc15,	0x0781, 0xcc15,		0x21, 0
+	.dw 0x0783, 0xcc15,	0x078f, 0xcc15,		0x21, 0
+	.dw 0x0791, 0xcc15,	0x0791, 0xcc15,		0x21, 0
+	.dw 0x0793, 0xcc15,	0x07bf, 0xcc15,		0x21, 0
+	.dw 0x07c1, 0xcc15,	0x07c1, 0xcc15,		0x21, 0
+	.dw 0x07c3, 0xcc15,	0x07cf, 0xcc15,		0x21, 0
+	.dw 0x07d1, 0xcc15,	0x07d1, 0xcc15,		0x21, 0
+	.dw 0x07d3, 0xcc15,	0x07ff, 0xcc15,		0x21, 0
+	.dw 0x0801, 0xcc15,	0x0801, 0xcc15,		0x21, 0
+	.dw 0x0803, 0xcc15,	0x080f, 0xcc15,		0x21, 0
+	.dw 0x0811, 0xcc15,	0x0811, 0xcc15,		0x21, 0
+	.dw 0x0813, 0xcc15,	0x083f, 0xcc15,		0x21, 0
+	.dw 0x0841, 0xcc15,	0x0841, 0xcc15,		0x21, 0
+	.dw 0x0843, 0xcc15,	0x084f, 0xcc15,		0x21, 0
+	.dw 0x0851, 0xcc15,	0x0851, 0xcc15,		0x21, 0
+	.dw 0x0853, 0xcc15,	0x087f, 0xcc15,		0x21, 0
+	.dw 0x0881, 0xcc15,	0x0881, 0xcc15,		0x21, 0
+	.dw 0x0883, 0xcc15,	0x088f, 0xcc15,		0x21, 0
+	.dw 0x0891, 0xcc15,	0x0891, 0xcc15,		0x21, 0
+	.dw 0x0893, 0xcc15,	0x08bf, 0xcc15,		0x21, 0
+	.dw 0x08c1, 0xcc15,	0x08c1, 0xcc15,		0x21, 0
+	.dw 0x08c3, 0xcc15,	0x08cf, 0xcc15,		0x21, 0
+	.dw 0x08d1, 0xcc15,	0x08d1, 0xcc15,		0x21, 0
+	.dw 0x08d3, 0xcc15,	0x08ff, 0xcc15,		0x21, 0
+	.dw 0x0900, 0xcc15,	0x0900, 0xcc15,		0x22, 0
+	.dw 0x0901, 0xcc15,	0x0901, 0xcc15,		0x21, 0
+	.dw 0x0902, 0xcc15,	0x0902, 0xcc15,		0x22, 0
+	.dw 0x0903, 0xcc15,	0x090f, 0xcc15,		0x21, 0
+	.dw 0x0910, 0xcc15,	0x0910, 0xcc15,		0x22, 0
+	.dw 0x0911, 0xcc15,	0x0911, 0xcc15,		0x21, 0
+	.dw 0x0912, 0xcc15,	0x0912, 0xcc15,		0x22, 0
+	.dw 0x0913, 0xcc15,	0x093f, 0xcc15,		0x21, 0
+	.dw 0x0941, 0xcc15,	0x0941, 0xcc15,		0x21, 0
+	.dw 0x0943, 0xcc15,	0x094f, 0xcc15,		0x21, 0
+	.dw 0x0951, 0xcc15,	0x0951, 0xcc15,		0x21, 0
+	.dw 0x0953, 0xcc15,	0x097f, 0xcc15,		0x21, 0
+	.dw 0x0981, 0xcc15,	0x0981, 0xcc15,		0x21, 0
+	.dw 0x0983, 0xcc15,	0x098f, 0xcc15,		0x21, 0
+	.dw 0x0991, 0xcc15,	0x0991, 0xcc15,		0x21, 0
+	.dw 0x0993, 0xcc15,	0x09bf, 0xcc15,		0x21, 0
+	.dw 0x09c1, 0xcc15,	0x09c1, 0xcc15,		0x21, 0
+	.dw 0x09c3, 0xcc15,	0x09cf, 0xcc15,		0x21, 0
+	.dw 0x09d1, 0xcc15,	0x09d1, 0xcc15,		0x21, 0
+	.dw 0x09d3, 0xcc15,	0x09ff, 0xcc15,		0x21, 0
+	.dw 0x0a01, 0xcc15,	0x0a01, 0xcc15,		0x21, 0
+	.dw 0x0a03, 0xcc15,	0x0a0f, 0xcc15,		0x21, 0
+	.dw 0x0a11, 0xcc15,	0x0a11, 0xcc15,		0x21, 0
+	.dw 0x0a13, 0xcc15,	0x0a3f, 0xcc15,		0x21, 0
+	.dw 0x0a41, 0xcc15,	0x0a41, 0xcc15,		0x21, 0
+	.dw 0x0a43, 0xcc15,	0x0a4f, 0xcc15,		0x21, 0
+	.dw 0x0a51, 0xcc15,	0x0a51, 0xcc15,		0x21, 0
+	.dw 0x0a53, 0xcc15,	0x0a7f, 0xcc15,		0x21, 0
+	.dw 0x0a81, 0xcc15,	0x0a81, 0xcc15,		0x21, 0
+	.dw 0x0a83, 0xcc15,	0x0a8f, 0xcc15,		0x21, 0
+	.dw 0x0a91, 0xcc15,	0x0a91, 0xcc15,		0x21, 0
+	.dw 0x0a93, 0xcc15,	0x0abf, 0xcc15,		0x21, 0
+	.dw 0x0ac1, 0xcc15,	0x0ac1, 0xcc15,		0x21, 0
+	.dw 0x0ac3, 0xcc15,	0x0acf, 0xcc15,		0x21, 0
+	.dw 0x0ad1, 0xcc15,	0x0ad1, 0xcc15,		0x21, 0
+	.dw 0x0ad3, 0xcc15,	0x0aff, 0xcc15,		0x21, 0
+	.dw 0x0b01, 0xcc15,	0x0b01, 0xcc15,		0x21, 0
+	.dw 0x0b03, 0xcc15,	0x0b0f, 0xcc15,		0x21, 0
+	.dw 0x0b11, 0xcc15,	0x0b11, 0xcc15,		0x21, 0
+	.dw 0x0b13, 0xcc15,	0x0b3f, 0xcc15,		0x21, 0
+	.dw 0x0b40, 0xcc15,	0x0b40, 0xcc15,		0x22, 0
+	.dw 0x0b41, 0xcc15,	0x0b41, 0xcc15,		0x21, 0
+	.dw 0x0b42, 0xcc15,	0x0b42, 0xcc15,		0x22, 0
+	.dw 0x0b43, 0xcc15,	0x0b4f, 0xcc15,		0x21, 0
+	.dw 0x0b50, 0xcc15,	0x0b50, 0xcc15,		0x22, 0
+	.dw 0x0b51, 0xcc15,	0x0b51, 0xcc15,		0x21, 0
+	.dw 0x0b52, 0xcc15,	0x0b52, 0xcc15,		0x22, 0
+	.dw 0x0b53, 0xcc15,	0x0b7f, 0xcc15,		0x21, 0
+	.dw 0x0b81, 0xcc15,	0x0b81, 0xcc15,		0x21, 0
+	.dw 0x0b83, 0xcc15,	0x0b8f, 0xcc15,		0x21, 0
+	.dw 0x0b91, 0xcc15,	0x0b91, 0xcc15,		0x21, 0
+	.dw 0x0b93, 0xcc15,	0x0bbf, 0xcc15,		0x21, 0
+	.dw 0x0bc1, 0xcc15,	0x0bc1, 0xcc15,		0x21, 0
+	.dw 0x0bc3, 0xcc15,	0x0bcf, 0xcc15,		0x21, 0
+	.dw 0x0bd1, 0xcc15,	0x0bd1, 0xcc15,		0x21, 0
+	.dw 0x0bd3, 0xcc15,	0x0bff, 0xcc15,		0x21, 0
+	.dw 0x0c01, 0xcc15,	0x0c01, 0xcc15,		0x21, 0
+	.dw 0x0c03, 0xcc15,	0x0c0f, 0xcc15,		0x21, 0
+	.dw 0x0c11, 0xcc15,	0x0c11, 0xcc15,		0x21, 0
+	.dw 0x0c13, 0xcc15,	0x0c3f, 0xcc15,		0x21, 0
+	.dw 0x0c41, 0xcc15,	0x0c41, 0xcc15,		0x21, 0
+	.dw 0x0c43, 0xcc15,	0x0c4f, 0xcc15,		0x21, 0
+	.dw 0x0c51, 0xcc15,	0x0c51, 0xcc15,		0x21, 0
+	.dw 0x0c53, 0xcc15,	0x0c7f, 0xcc15,		0x21, 0
+	.dw 0x0c81, 0xcc15,	0x0c81, 0xcc15,		0x21, 0
+	.dw 0x0c83, 0xcc15,	0x0c8f, 0xcc15,		0x21, 0
+	.dw 0x0c91, 0xcc15,	0x0c91, 0xcc15,		0x21, 0
+	.dw 0x0c93, 0xcc15,	0x0cbf, 0xcc15,		0x21, 0
+	.dw 0x0cc1, 0xcc15,	0x0cc1, 0xcc15,		0x21, 0
+	.dw 0x0cc3, 0xcc15,	0x0ccf, 0xcc15,		0x21, 0
+	.dw 0x0cd1, 0xcc15,	0x0cd1, 0xcc15,		0x21, 0
+	.dw 0x0cd3, 0xcc15,	0x0cff, 0xcc15,		0x21, 0
+	.dw 0x0d01, 0xcc15,	0x0d01, 0xcc15,		0x21, 0
+	.dw 0x0d03, 0xcc15,	0x0d0f, 0xcc15,		0x21, 0
+	.dw 0x0d11, 0xcc15,	0x0d11, 0xcc15,		0x21, 0
+	.dw 0x0d13, 0xcc15,	0x0d3f, 0xcc15,		0x21, 0
+	.dw 0x0d41, 0xcc15,	0x0d41, 0xcc15,		0x21, 0
+	.dw 0x0d43, 0xcc15,	0x0d4f, 0xcc15,		0x21, 0
+	.dw 0x0d51, 0xcc15,	0x0d51, 0xcc15,		0x21, 0
+	.dw 0x0d53, 0xcc15,	0x0d7f, 0xcc15,		0x21, 0
+	.dw 0x0d80, 0xcc15,	0x0d80, 0xcc15,		0x22, 0
+	.dw 0x0d81, 0xcc15,	0x0d81, 0xcc15,		0x21, 0
+	.dw 0x0d82, 0xcc15,	0x0d82, 0xcc15,		0x22, 0
+	.dw 0x0d83, 0xcc15,	0x0d8f, 0xcc15,		0x21, 0
+	.dw 0x0d90, 0xcc15,	0x0d90, 0xcc15,		0x22, 0
+	.dw 0x0d91, 0xcc15,	0x0d91, 0xcc15,		0x21, 0
+	.dw 0x0d92, 0xcc15,	0x0d92, 0xcc15,		0x22, 0
+	.dw 0x0d93, 0xcc15,	0x0dbf, 0xcc15,		0x21, 0
+	.dw 0x0dc1, 0xcc15,	0x0dc1, 0xcc15,		0x21, 0
+	.dw 0x0dc3, 0xcc15,	0x0dcf, 0xcc15,		0x21, 0
+	.dw 0x0dd1, 0xcc15,	0x0dd1, 0xcc15,		0x21, 0
+	.dw 0x0dd3, 0xcc15,	0x0dff, 0xcc15,		0x21, 0
+	.dw 0x0e01, 0xcc15,	0x0e01, 0xcc15,		0x21, 0
+	.dw 0x0e03, 0xcc15,	0x0e0f, 0xcc15,		0x21, 0
+	.dw 0x0e11, 0xcc15,	0x0e11, 0xcc15,		0x21, 0
+	.dw 0x0e13, 0xcc15,	0x0e3f, 0xcc15,		0x21, 0
+	.dw 0x0e41, 0xcc15,	0x0e41, 0xcc15,		0x21, 0
+	.dw 0x0e43, 0xcc15,	0x0e4f, 0xcc15,		0x21, 0
+	.dw 0x0e51, 0xcc15,	0x0e51, 0xcc15,		0x21, 0
+	.dw 0x0e53, 0xcc15,	0x0e7f, 0xcc15,		0x21, 0
+	.dw 0x0e81, 0xcc15,	0x0e81, 0xcc15,		0x21, 0
+	.dw 0x0e83, 0xcc15,	0x0e8f, 0xcc15,		0x21, 0
+	.dw 0x0e91, 0xcc15,	0x0e91, 0xcc15,		0x21, 0
+	.dw 0x0e93, 0xcc15,	0x0ebf, 0xcc15,		0x21, 0
+	.dw 0x0ec1, 0xcc15,	0x0ec1, 0xcc15,		0x21, 0
+	.dw 0x0ec3, 0xcc15,	0x0ecf, 0xcc15,		0x21, 0
+	.dw 0x0ed1, 0xcc15,	0x0ed1, 0xcc15,		0x21, 0
+	.dw 0x0ed3, 0xcc15,	0x0eff, 0xcc15,		0x21, 0
+	.dw 0x0f01, 0xcc15,	0x0f01, 0xcc15,		0x21, 0
+	.dw 0x0f03, 0xcc15,	0x0f0f, 0xcc15,		0x21, 0
+	.dw 0x0f11, 0xcc15,	0x0f11, 0xcc15,		0x21, 0
+	.dw 0x0f13, 0xcc15,	0x0f3f, 0xcc15,		0x21, 0
+	.dw 0x0f41, 0xcc15,	0x0f41, 0xcc15,		0x21, 0
+	.dw 0x0f43, 0xcc15,	0x0f4f, 0xcc15,		0x21, 0
+	.dw 0x0f51, 0xcc15,	0x0f51, 0xcc15,		0x21, 0
+	.dw 0x0f53, 0xcc15,	0x0f7f, 0xcc15,		0x21, 0
+	.dw 0x0f81, 0xcc15,	0x0f81, 0xcc15,		0x21, 0
+	.dw 0x0f83, 0xcc15,	0x0f8f, 0xcc15,		0x21, 0
+	.dw 0x0f91, 0xcc15,	0x0f91, 0xcc15,		0x21, 0
+	.dw 0x0f93, 0xcc15,	0x0fbf, 0xcc15,		0x21, 0
+	.dw 0x0fc0, 0xcc15,	0x0fc0, 0xcc15,		0x22, 0
+	.dw 0x0fc1, 0xcc15,	0x0fc1, 0xcc15,		0x21, 0
+	.dw 0x0fc2, 0xcc15,	0x0fc2, 0xcc15,		0x22, 0
+	.dw 0x0fc3, 0xcc15,	0x0fcf, 0xcc15,		0x21, 0
+	.dw 0x0fd0, 0xcc15,	0x0fd0, 0xcc15,		0x22, 0
+	.dw 0x0fd1, 0xcc15,	0x0fd1, 0xcc15,		0x21, 0
+	.dw 0x0fd2, 0xcc15,	0x0fd2, 0xcc15,		0x22, 0
+	.dw 0x0fd3, 0xcc15,	0x1fff, 0xcc15,		0x21, 0
+	.dw 0x2000, 0xcc15,	0x2000, 0xcc15,		0x22, 0
+	.dw 0x2001, 0xcc15,	0x2001, 0xcc15,		0x21, 0
+	.dw 0x2002, 0xcc15,	0x2002, 0xcc15,		0x22, 0
+	.dw 0x2003, 0xcc15,	0x200f, 0xcc15,		0x21, 0
+	.dw 0x2010, 0xcc15,	0x2010, 0xcc15,		0x22, 0
+	.dw 0x2011, 0xcc15,	0x2011, 0xcc15,		0x21, 0
+	.dw 0x2012, 0xcc15,	0x2012, 0xcc15,		0x22, 0
+	.dw 0x2013, 0xcc15,	0x203f, 0xcc15,		0x21, 0
+	.dw 0x2041, 0xcc15,	0x2041, 0xcc15,		0x21, 0
+	.dw 0x2043, 0xcc15,	0x204f, 0xcc15,		0x21, 0
+	.dw 0x2051, 0xcc15,	0x2051, 0xcc15,		0x21, 0
+	.dw 0x2053, 0xcc15,	0x207f, 0xcc15,		0x21, 0
+	.dw 0x2081, 0xcc15,	0x2081, 0xcc15,		0x21, 0
+	.dw 0x2083, 0xcc15,	0x208f, 0xcc15,		0x21, 0
+	.dw 0x2091, 0xcc15,	0x2091, 0xcc15,		0x21, 0
+	.dw 0x2093, 0xcc15,	0x20bf, 0xcc15,		0x21, 0
+	.dw 0x20c1, 0xcc15,	0x20c1, 0xcc15,		0x21, 0
+	.dw 0x20c3, 0xcc15,	0x20cf, 0xcc15,		0x21, 0
+	.dw 0x20d1, 0xcc15,	0x20d1, 0xcc15,		0x21, 0
+	.dw 0x20d3, 0xcc15,	0x20ff, 0xcc15,		0x21, 0
+	.dw 0x2101, 0xcc15,	0x2101, 0xcc15,		0x21, 0
+	.dw 0x2103, 0xcc15,	0x210f, 0xcc15,		0x21, 0
+	.dw 0x2111, 0xcc15,	0x2111, 0xcc15,		0x21, 0
+	.dw 0x2113, 0xcc15,	0x213f, 0xcc15,		0x21, 0
+	.dw 0x2141, 0xcc15,	0x2141, 0xcc15,		0x21, 0
+	.dw 0x2143, 0xcc15,	0x214f, 0xcc15,		0x21, 0
+	.dw 0x2151, 0xcc15,	0x2151, 0xcc15,		0x21, 0
+	.dw 0x2153, 0xcc15,	0x217f, 0xcc15,		0x21, 0
+	.dw 0x2181, 0xcc15,	0x2181, 0xcc15,		0x21, 0
+	.dw 0x2183, 0xcc15,	0x218f, 0xcc15,		0x21, 0
+	.dw 0x2191, 0xcc15,	0x2191, 0xcc15,		0x21, 0
+	.dw 0x2193, 0xcc15,	0x21bf, 0xcc15,		0x21, 0
+	.dw 0x21c1, 0xcc15,	0x21c1, 0xcc15,		0x21, 0
+	.dw 0x21c3, 0xcc15,	0x21cf, 0xcc15,		0x21, 0
+	.dw 0x21d1, 0xcc15,	0x21d1, 0xcc15,		0x21, 0
+	.dw 0x21d3, 0xcc15,	0x21ff, 0xcc15,		0x21, 0
+	.dw 0x2201, 0xcc15,	0x2201, 0xcc15,		0x21, 0
+	.dw 0x2203, 0xcc15,	0x220f, 0xcc15,		0x21, 0
+	.dw 0x2211, 0xcc15,	0x2211, 0xcc15,		0x21, 0
+	.dw 0x2213, 0xcc15,	0x223f, 0xcc15,		0x21, 0
+	.dw 0x2240, 0xcc15,	0x2240, 0xcc15,		0x22, 0
+	.dw 0x2241, 0xcc15,	0x2241, 0xcc15,		0x21, 0
+	.dw 0x2242, 0xcc15,	0x2242, 0xcc15,		0x22, 0
+	.dw 0x2243, 0xcc15,	0x224f, 0xcc15,		0x21, 0
+	.dw 0x2250, 0xcc15,	0x2250, 0xcc15,		0x22, 0
+	.dw 0x2251, 0xcc15,	0x2251, 0xcc15,		0x21, 0
+	.dw 0x2252, 0xcc15,	0x2252, 0xcc15,		0x22, 0
+	.dw 0x2253, 0xcc15,	0x227f, 0xcc15,		0x21, 0
+	.dw 0x2281, 0xcc15,	0x2281, 0xcc15,		0x21, 0
+	.dw 0x2283, 0xcc15,	0x228f, 0xcc15,		0x21, 0
+	.dw 0x2291, 0xcc15,	0x2291, 0xcc15,		0x21, 0
+	.dw 0x2293, 0xcc15,	0x22bf, 0xcc15,		0x21, 0
+	.dw 0x22c1, 0xcc15,	0x22c1, 0xcc15,		0x21, 0
+	.dw 0x22c3, 0xcc15,	0x22cf, 0xcc15,		0x21, 0
+	.dw 0x22d1, 0xcc15,	0x22d1, 0xcc15,		0x21, 0
+	.dw 0x22d3, 0xcc15,	0x22ff, 0xcc15,		0x21, 0
+	.dw 0x2301, 0xcc15,	0x2301, 0xcc15,		0x21, 0
+	.dw 0x2303, 0xcc15,	0x230f, 0xcc15,		0x21, 0
+	.dw 0x2311, 0xcc15,	0x2311, 0xcc15,		0x21, 0
+	.dw 0x2313, 0xcc15,	0x233f, 0xcc15,		0x21, 0
+	.dw 0x2341, 0xcc15,	0x2341, 0xcc15,		0x21, 0
+	.dw 0x2343, 0xcc15,	0x234f, 0xcc15,		0x21, 0
+	.dw 0x2351, 0xcc15,	0x2351, 0xcc15,		0x21, 0
+	.dw 0x2353, 0xcc15,	0x237f, 0xcc15,		0x21, 0
+	.dw 0x2381, 0xcc15,	0x2381, 0xcc15,		0x21, 0
+	.dw 0x2383, 0xcc15,	0x238f, 0xcc15,		0x21, 0
+	.dw 0x2391, 0xcc15,	0x2391, 0xcc15,		0x21, 0
+	.dw 0x2393, 0xcc15,	0x23bf, 0xcc15,		0x21, 0
+	.dw 0x23c1, 0xcc15,	0x23c1, 0xcc15,		0x21, 0
+	.dw 0x23c3, 0xcc15,	0x23cf, 0xcc15,		0x21, 0
+	.dw 0x23d1, 0xcc15,	0x23d1, 0xcc15,		0x21, 0
+	.dw 0x23d3, 0xcc15,	0x23ff, 0xcc15,		0x21, 0
+	.dw 0x2401, 0xcc15,	0x2401, 0xcc15,		0x21, 0
+	.dw 0x2403, 0xcc15,	0x240f, 0xcc15,		0x21, 0
+	.dw 0x2411, 0xcc15,	0x2411, 0xcc15,		0x21, 0
+	.dw 0x2413, 0xcc15,	0x243f, 0xcc15,		0x21, 0
+	.dw 0x2441, 0xcc15,	0x2441, 0xcc15,		0x21, 0
+	.dw 0x2443, 0xcc15,	0x244f, 0xcc15,		0x21, 0
+	.dw 0x2451, 0xcc15,	0x2451, 0xcc15,		0x21, 0
+	.dw 0x2453, 0xcc15,	0x247f, 0xcc15,		0x21, 0
+	.dw 0x2480, 0xcc15,	0x2480, 0xcc15,		0x22, 0
+	.dw 0x2481, 0xcc15,	0x2481, 0xcc15,		0x21, 0
+	.dw 0x2482, 0xcc15,	0x2482, 0xcc15,		0x22, 0
+	.dw 0x2483, 0xcc15,	0x248f, 0xcc15,		0x21, 0
+	.dw 0x2490, 0xcc15,	0x2490, 0xcc15,		0x22, 0
+	.dw 0x2491, 0xcc15,	0x2491, 0xcc15,		0x21, 0
+	.dw 0x2492, 0xcc15,	0x2492, 0xcc15,		0x22, 0
+	.dw 0x2493, 0xcc15,	0x24bf, 0xcc15,		0x21, 0
+	.dw 0x24c1, 0xcc15,	0x24c1, 0xcc15,		0x21, 0
+	.dw 0x24c3, 0xcc15,	0x24cf, 0xcc15,		0x21, 0
+	.dw 0x24d1, 0xcc15,	0x24d1, 0xcc15,		0x21, 0
+	.dw 0x24d3, 0xcc15,	0x24ff, 0xcc15,		0x21, 0
+	.dw 0x2501, 0xcc15,	0x2501, 0xcc15,		0x21, 0
+	.dw 0x2503, 0xcc15,	0x250f, 0xcc15,		0x21, 0
+	.dw 0x2511, 0xcc15,	0x2511, 0xcc15,		0x21, 0
+	.dw 0x2513, 0xcc15,	0x253f, 0xcc15,		0x21, 0
+	.dw 0x2541, 0xcc15,	0x2541, 0xcc15,		0x21, 0
+	.dw 0x2543, 0xcc15,	0x254f, 0xcc15,		0x21, 0
+	.dw 0x2551, 0xcc15,	0x2551, 0xcc15,		0x21, 0
+	.dw 0x2553, 0xcc15,	0x257f, 0xcc15,		0x21, 0
+	.dw 0x2581, 0xcc15,	0x2581, 0xcc15,		0x21, 0
+	.dw 0x2583, 0xcc15,	0x258f, 0xcc15,		0x21, 0
+	.dw 0x2591, 0xcc15,	0x2591, 0xcc15,		0x21, 0
+	.dw 0x2593, 0xcc15,	0x25bf, 0xcc15,		0x21, 0
+	.dw 0x25c1, 0xcc15,	0x25c1, 0xcc15,		0x21, 0
+	.dw 0x25c3, 0xcc15,	0x25cf, 0xcc15,		0x21, 0
+	.dw 0x25d1, 0xcc15,	0x25d1, 0xcc15,		0x21, 0
+	.dw 0x25d3, 0xcc15,	0x25ff, 0xcc15,		0x21, 0
+	.dw 0x2601, 0xcc15,	0x2601, 0xcc15,		0x21, 0
+	.dw 0x2603, 0xcc15,	0x260f, 0xcc15,		0x21, 0
+	.dw 0x2611, 0xcc15,	0x2611, 0xcc15,		0x21, 0
+	.dw 0x2613, 0xcc15,	0x263f, 0xcc15,		0x21, 0
+	.dw 0x2641, 0xcc15,	0x2641, 0xcc15,		0x21, 0
+	.dw 0x2643, 0xcc15,	0x264f, 0xcc15,		0x21, 0
+	.dw 0x2651, 0xcc15,	0x2651, 0xcc15,		0x21, 0
+	.dw 0x2653, 0xcc15,	0x267f, 0xcc15,		0x21, 0
+	.dw 0x2681, 0xcc15,	0x2681, 0xcc15,		0x21, 0
+	.dw 0x2683, 0xcc15,	0x268f, 0xcc15,		0x21, 0
+	.dw 0x2691, 0xcc15,	0x2691, 0xcc15,		0x21, 0
+	.dw 0x2693, 0xcc15,	0x26bf, 0xcc15,		0x21, 0
+	.dw 0x26c0, 0xcc15,	0x26c0, 0xcc15,		0x22, 0
+	.dw 0x26c1, 0xcc15,	0x26c1, 0xcc15,		0x21, 0
+	.dw 0x26c2, 0xcc15,	0x26c2, 0xcc15,		0x22, 0
+	.dw 0x26c3, 0xcc15,	0x26cf, 0xcc15,		0x21, 0
+	.dw 0x26d0, 0xcc15,	0x26d0, 0xcc15,		0x22, 0
+	.dw 0x26d1, 0xcc15,	0x26d1, 0xcc15,		0x21, 0
+	.dw 0x26d2, 0xcc15,	0x26d2, 0xcc15,		0x22, 0
+	.dw 0x26d3, 0xcc15,	0x26ff, 0xcc15,		0x21, 0
+	.dw 0x2701, 0xcc15,	0x2701, 0xcc15,		0x21, 0
+	.dw 0x2703, 0xcc15,	0x270f, 0xcc15,		0x21, 0
+	.dw 0x2711, 0xcc15,	0x2711, 0xcc15,		0x21, 0
+	.dw 0x2713, 0xcc15,	0x273f, 0xcc15,		0x21, 0
+	.dw 0x2741, 0xcc15,	0x2741, 0xcc15,		0x21, 0
+	.dw 0x2743, 0xcc15,	0x274f, 0xcc15,		0x21, 0
+	.dw 0x2751, 0xcc15,	0x2751, 0xcc15,		0x21, 0
+	.dw 0x2753, 0xcc15,	0x277f, 0xcc15,		0x21, 0
+	.dw 0x2781, 0xcc15,	0x2781, 0xcc15,		0x21, 0
+	.dw 0x2783, 0xcc15,	0x278f, 0xcc15,		0x21, 0
+	.dw 0x2791, 0xcc15,	0x2791, 0xcc15,		0x21, 0
+	.dw 0x2793, 0xcc15,	0x27bf, 0xcc15,		0x21, 0
+	.dw 0x27c1, 0xcc15,	0x27c1, 0xcc15,		0x21, 0
+	.dw 0x27c3, 0xcc15,	0x27cf, 0xcc15,		0x21, 0
+	.dw 0x27d1, 0xcc15,	0x27d1, 0xcc15,		0x21, 0
+	.dw 0x27d3, 0xcc15,	0x27ff, 0xcc15,		0x21, 0
+	.dw 0x2801, 0xcc15,	0x2801, 0xcc15,		0x21, 0
+	.dw 0x2803, 0xcc15,	0x280f, 0xcc15,		0x21, 0
+	.dw 0x2811, 0xcc15,	0x2811, 0xcc15,		0x21, 0
+	.dw 0x2813, 0xcc15,	0x283f, 0xcc15,		0x21, 0
+	.dw 0x2841, 0xcc15,	0x2841, 0xcc15,		0x21, 0
+	.dw 0x2843, 0xcc15,	0x284f, 0xcc15,		0x21, 0
+	.dw 0x2851, 0xcc15,	0x2851, 0xcc15,		0x21, 0
+	.dw 0x2853, 0xcc15,	0x287f, 0xcc15,		0x21, 0
+	.dw 0x2881, 0xcc15,	0x2881, 0xcc15,		0x21, 0
+	.dw 0x2883, 0xcc15,	0x288f, 0xcc15,		0x21, 0
+	.dw 0x2891, 0xcc15,	0x2891, 0xcc15,		0x21, 0
+	.dw 0x2893, 0xcc15,	0x28bf, 0xcc15,		0x21, 0
+	.dw 0x28c1, 0xcc15,	0x28c1, 0xcc15,		0x21, 0
+	.dw 0x28c3, 0xcc15,	0x28cf, 0xcc15,		0x21, 0
+	.dw 0x28d1, 0xcc15,	0x28d1, 0xcc15,		0x21, 0
+	.dw 0x28d3, 0xcc15,	0x28ff, 0xcc15,		0x21, 0
+	.dw 0x2900, 0xcc15,	0x2900, 0xcc15,		0x22, 0
+	.dw 0x2901, 0xcc15,	0x2901, 0xcc15,		0x21, 0
+	.dw 0x2902, 0xcc15,	0x2902, 0xcc15,		0x22, 0
+	.dw 0x2903, 0xcc15,	0x290f, 0xcc15,		0x21, 0
+	.dw 0x2910, 0xcc15,	0x2910, 0xcc15,		0x22, 0
+	.dw 0x2911, 0xcc15,	0x2911, 0xcc15,		0x21, 0
+	.dw 0x2912, 0xcc15,	0x2912, 0xcc15,		0x22, 0
+	.dw 0x2913, 0xcc15,	0x293f, 0xcc15,		0x21, 0
+	.dw 0x2941, 0xcc15,	0x2941, 0xcc15,		0x21, 0
+	.dw 0x2943, 0xcc15,	0x294f, 0xcc15,		0x21, 0
+	.dw 0x2951, 0xcc15,	0x2951, 0xcc15,		0x21, 0
+	.dw 0x2953, 0xcc15,	0x297f, 0xcc15,		0x21, 0
+	.dw 0x2981, 0xcc15,	0x2981, 0xcc15,		0x21, 0
+	.dw 0x2983, 0xcc15,	0x298f, 0xcc15,		0x21, 0
+	.dw 0x2991, 0xcc15,	0x2991, 0xcc15,		0x21, 0
+	.dw 0x2993, 0xcc15,	0x29bf, 0xcc15,		0x21, 0
+	.dw 0x29c1, 0xcc15,	0x29c1, 0xcc15,		0x21, 0
+	.dw 0x29c3, 0xcc15,	0x29cf, 0xcc15,		0x21, 0
+	.dw 0x29d1, 0xcc15,	0x29d1, 0xcc15,		0x21, 0
+	.dw 0x29d3, 0xcc15,	0x29ff, 0xcc15,		0x21, 0
+	.dw 0x2a01, 0xcc15,	0x2a01, 0xcc15,		0x21, 0
+	.dw 0x2a03, 0xcc15,	0x2a0f, 0xcc15,		0x21, 0
+	.dw 0x2a11, 0xcc15,	0x2a11, 0xcc15,		0x21, 0
+	.dw 0x2a13, 0xcc15,	0x2a3f, 0xcc15,		0x21, 0
+	.dw 0x2a41, 0xcc15,	0x2a41, 0xcc15,		0x21, 0
+	.dw 0x2a43, 0xcc15,	0x2a4f, 0xcc15,		0x21, 0
+	.dw 0x2a51, 0xcc15,	0x2a51, 0xcc15,		0x21, 0
+	.dw 0x2a53, 0xcc15,	0x2a7f, 0xcc15,		0x21, 0
+	.dw 0x2a81, 0xcc15,	0x2a81, 0xcc15,		0x21, 0
+	.dw 0x2a83, 0xcc15,	0x2a8f, 0xcc15,		0x21, 0
+	.dw 0x2a91, 0xcc15,	0x2a91, 0xcc15,		0x21, 0
+	.dw 0x2a93, 0xcc15,	0x2abf, 0xcc15,		0x21, 0
+	.dw 0x2ac1, 0xcc15,	0x2ac1, 0xcc15,		0x21, 0
+	.dw 0x2ac3, 0xcc15,	0x2acf, 0xcc15,		0x21, 0
+	.dw 0x2ad1, 0xcc15,	0x2ad1, 0xcc15,		0x21, 0
+	.dw 0x2ad3, 0xcc15,	0x2aff, 0xcc15,		0x21, 0
+	.dw 0x2b01, 0xcc15,	0x2b01, 0xcc15,		0x21, 0
+	.dw 0x2b03, 0xcc15,	0x2b0f, 0xcc15,		0x21, 0
+	.dw 0x2b11, 0xcc15,	0x2b11, 0xcc15,		0x21, 0
+	.dw 0x2b13, 0xcc15,	0x2b3f, 0xcc15,		0x21, 0
+	.dw 0x2b40, 0xcc15,	0x2b40, 0xcc15,		0x22, 0
+	.dw 0x2b41, 0xcc15,	0x2b41, 0xcc15,		0x21, 0
+	.dw 0x2b42, 0xcc15,	0x2b42, 0xcc15,		0x22, 0
+	.dw 0x2b43, 0xcc15,	0x2b4f, 0xcc15,		0x21, 0
+	.dw 0x2b50, 0xcc15,	0x2b50, 0xcc15,		0x22, 0
+	.dw 0x2b51, 0xcc15,	0x2b51, 0xcc15,		0x21, 0
+	.dw 0x2b52, 0xcc15,	0x2b52, 0xcc15,		0x22, 0
+	.dw 0x2b53, 0xcc15,	0x2b7f, 0xcc15,		0x21, 0
+	.dw 0x2b81, 0xcc15,	0x2b81, 0xcc15,		0x21, 0
+	.dw 0x2b83, 0xcc15,	0x2b8f, 0xcc15,		0x21, 0
+	.dw 0x2b91, 0xcc15,	0x2b91, 0xcc15,		0x21, 0
+	.dw 0x2b93, 0xcc15,	0x2bbf, 0xcc15,		0x21, 0
+	.dw 0x2bc1, 0xcc15,	0x2bc1, 0xcc15,		0x21, 0
+	.dw 0x2bc3, 0xcc15,	0x2bcf, 0xcc15,		0x21, 0
+	.dw 0x2bd1, 0xcc15,	0x2bd1, 0xcc15,		0x21, 0
+	.dw 0x2bd3, 0xcc15,	0x2bff, 0xcc15,		0x21, 0
+	.dw 0x2c01, 0xcc15,	0x2c01, 0xcc15,		0x21, 0
+	.dw 0x2c03, 0xcc15,	0x2c0f, 0xcc15,		0x21, 0
+	.dw 0x2c11, 0xcc15,	0x2c11, 0xcc15,		0x21, 0
+	.dw 0x2c13, 0xcc15,	0x2c3f, 0xcc15,		0x21, 0
+	.dw 0x2c41, 0xcc15,	0x2c41, 0xcc15,		0x21, 0
+	.dw 0x2c43, 0xcc15,	0x2c4f, 0xcc15,		0x21, 0
+	.dw 0x2c51, 0xcc15,	0x2c51, 0xcc15,		0x21, 0
+	.dw 0x2c53, 0xcc15,	0x2c7f, 0xcc15,		0x21, 0
+	.dw 0x2c81, 0xcc15,	0x2c81, 0xcc15,		0x21, 0
+	.dw 0x2c83, 0xcc15,	0x2c8f, 0xcc15,		0x21, 0
+	.dw 0x2c91, 0xcc15,	0x2c91, 0xcc15,		0x21, 0
+	.dw 0x2c93, 0xcc15,	0x2cbf, 0xcc15,		0x21, 0
+	.dw 0x2cc1, 0xcc15,	0x2cc1, 0xcc15,		0x21, 0
+	.dw 0x2cc3, 0xcc15,	0x2ccf, 0xcc15,		0x21, 0
+	.dw 0x2cd1, 0xcc15,	0x2cd1, 0xcc15,		0x21, 0
+	.dw 0x2cd3, 0xcc15,	0x2cff, 0xcc15,		0x21, 0
+	.dw 0x2d01, 0xcc15,	0x2d01, 0xcc15,		0x21, 0
+	.dw 0x2d03, 0xcc15,	0x2d0f, 0xcc15,		0x21, 0
+	.dw 0x2d11, 0xcc15,	0x2d11, 0xcc15,		0x21, 0
+	.dw 0x2d13, 0xcc15,	0x2d3f, 0xcc15,		0x21, 0
+	.dw 0x2d41, 0xcc15,	0x2d41, 0xcc15,		0x21, 0
+	.dw 0x2d43, 0xcc15,	0x2d4f, 0xcc15,		0x21, 0
+	.dw 0x2d51, 0xcc15,	0x2d51, 0xcc15,		0x21, 0
+	.dw 0x2d53, 0xcc15,	0x2d7f, 0xcc15,		0x21, 0
+	.dw 0x2d80, 0xcc15,	0x2d80, 0xcc15,		0x22, 0
+	.dw 0x2d81, 0xcc15,	0x2d81, 0xcc15,		0x21, 0
+	.dw 0x2d82, 0xcc15,	0x2d82, 0xcc15,		0x22, 0
+	.dw 0x2d83, 0xcc15,	0x2d8f, 0xcc15,		0x21, 0
+	.dw 0x2d90, 0xcc15,	0x2d90, 0xcc15,		0x22, 0
+	.dw 0x2d91, 0xcc15,	0x2d91, 0xcc15,		0x21, 0
+	.dw 0x2d92, 0xcc15,	0x2d92, 0xcc15,		0x22, 0
+	.dw 0x2d93, 0xcc15,	0x2dbf, 0xcc15,		0x21, 0
+	.dw 0x2dc1, 0xcc15,	0x2dc1, 0xcc15,		0x21, 0
+	.dw 0x2dc3, 0xcc15,	0x2dcf, 0xcc15,		0x21, 0
+	.dw 0x2dd1, 0xcc15,	0x2dd1, 0xcc15,		0x21, 0
+	.dw 0x2dd3, 0xcc15,	0x2dff, 0xcc15,		0x21, 0
+	.dw 0x2e01, 0xcc15,	0x2e01, 0xcc15,		0x21, 0
+	.dw 0x2e03, 0xcc15,	0x2e0f, 0xcc15,		0x21, 0
+	.dw 0x2e11, 0xcc15,	0x2e11, 0xcc15,		0x21, 0
+	.dw 0x2e13, 0xcc15,	0x2e3f, 0xcc15,		0x21, 0
+	.dw 0x2e41, 0xcc15,	0x2e41, 0xcc15,		0x21, 0
+	.dw 0x2e43, 0xcc15,	0x2e4f, 0xcc15,		0x21, 0
+	.dw 0x2e51, 0xcc15,	0x2e51, 0xcc15,		0x21, 0
+	.dw 0x2e53, 0xcc15,	0x2e7f, 0xcc15,		0x21, 0
+	.dw 0x2e81, 0xcc15,	0x2e81, 0xcc15,		0x21, 0
+	.dw 0x2e83, 0xcc15,	0x2e8f, 0xcc15,		0x21, 0
+	.dw 0x2e91, 0xcc15,	0x2e91, 0xcc15,		0x21, 0
+	.dw 0x2e93, 0xcc15,	0x2ebf, 0xcc15,		0x21, 0
+	.dw 0x2ec1, 0xcc15,	0x2ec1, 0xcc15,		0x21, 0
+	.dw 0x2ec3, 0xcc15,	0x2ecf, 0xcc15,		0x21, 0
+	.dw 0x2ed1, 0xcc15,	0x2ed1, 0xcc15,		0x21, 0
+	.dw 0x2ed3, 0xcc15,	0x2eff, 0xcc15,		0x21, 0
+	.dw 0x2f01, 0xcc15,	0x2f01, 0xcc15,		0x21, 0
+	.dw 0x2f03, 0xcc15,	0x2f0f, 0xcc15,		0x21, 0
+	.dw 0x2f11, 0xcc15,	0x2f11, 0xcc15,		0x21, 0
+	.dw 0x2f13, 0xcc15,	0x2f3f, 0xcc15,		0x21, 0
+	.dw 0x2f41, 0xcc15,	0x2f41, 0xcc15,		0x21, 0
+	.dw 0x2f43, 0xcc15,	0x2f4f, 0xcc15,		0x21, 0
+	.dw 0x2f51, 0xcc15,	0x2f51, 0xcc15,		0x21, 0
+	.dw 0x2f53, 0xcc15,	0x2f7f, 0xcc15,		0x21, 0
+	.dw 0x2f81, 0xcc15,	0x2f81, 0xcc15,		0x21, 0
+	.dw 0x2f83, 0xcc15,	0x2f8f, 0xcc15,		0x21, 0
+	.dw 0x2f91, 0xcc15,	0x2f91, 0xcc15,		0x21, 0
+	.dw 0x2f93, 0xcc15,	0x2fbf, 0xcc15,		0x21, 0
+	.dw 0x2fc0, 0xcc15,	0x2fc0, 0xcc15,		0x22, 0
+	.dw 0x2fc1, 0xcc15,	0x2fc1, 0xcc15,		0x21, 0
+	.dw 0x2fc2, 0xcc15,	0x2fc2, 0xcc15,		0x22, 0
+	.dw 0x2fc3, 0xcc15,	0x2fcf, 0xcc15,		0x21, 0
+	.dw 0x2fd0, 0xcc15,	0x2fd0, 0xcc15,		0x22, 0
+	.dw 0x2fd1, 0xcc15,	0x2fd1, 0xcc15,		0x21, 0
+	.dw 0x2fd2, 0xcc15,	0x2fd2, 0xcc15,		0x22, 0
+	.dw 0x2fd3, 0xcc15,	0x3fff, 0xcc15,		0x21, 0
+	.dw 0x4000, 0xcc15,	0x4000, 0xcc15,		0x22, 0
+	.dw 0x4001, 0xcc15,	0x4001, 0xcc15,		0x21, 0
+	.dw 0x4002, 0xcc15,	0x4002, 0xcc15,		0x22, 0
+	.dw 0x4003, 0xcc15,	0x400f, 0xcc15,		0x21, 0
+	.dw 0x4010, 0xcc15,	0x4010, 0xcc15,		0x22, 0
+	.dw 0x4011, 0xcc15,	0x4011, 0xcc15,		0x21, 0
+	.dw 0x4012, 0xcc15,	0x4012, 0xcc15,		0x22, 0
+	.dw 0x4013, 0xcc15,	0x403f, 0xcc15,		0x21, 0
+	.dw 0x4041, 0xcc15,	0x4041, 0xcc15,		0x21, 0
+	.dw 0x4043, 0xcc15,	0x404f, 0xcc15,		0x21, 0
+	.dw 0x4051, 0xcc15,	0x4051, 0xcc15,		0x21, 0
+	.dw 0x4053, 0xcc15,	0x407f, 0xcc15,		0x21, 0
+	.dw 0x4081, 0xcc15,	0x4081, 0xcc15,		0x21, 0
+	.dw 0x4083, 0xcc15,	0x408f, 0xcc15,		0x21, 0
+	.dw 0x4091, 0xcc15,	0x4091, 0xcc15,		0x21, 0
+	.dw 0x4093, 0xcc15,	0x40bf, 0xcc15,		0x21, 0
+	.dw 0x40c1, 0xcc15,	0x40c1, 0xcc15,		0x21, 0
+	.dw 0x40c3, 0xcc15,	0x40cf, 0xcc15,		0x21, 0
+	.dw 0x40d1, 0xcc15,	0x40d1, 0xcc15,		0x21, 0
+	.dw 0x40d3, 0xcc15,	0x40ff, 0xcc15,		0x21, 0
+	.dw 0x4101, 0xcc15,	0x4101, 0xcc15,		0x21, 0
+	.dw 0x4103, 0xcc15,	0x410f, 0xcc15,		0x21, 0
+	.dw 0x4111, 0xcc15,	0x4111, 0xcc15,		0x21, 0
+	.dw 0x4113, 0xcc15,	0x413f, 0xcc15,		0x21, 0
+	.dw 0x4141, 0xcc15,	0x4141, 0xcc15,		0x21, 0
+	.dw 0x4143, 0xcc15,	0x414f, 0xcc15,		0x21, 0
+	.dw 0x4151, 0xcc15,	0x4151, 0xcc15,		0x21, 0
+	.dw 0x4153, 0xcc15,	0x417f, 0xcc15,		0x21, 0
+	.dw 0x4181, 0xcc15,	0x4181, 0xcc15,		0x21, 0
+	.dw 0x4183, 0xcc15,	0x418f, 0xcc15,		0x21, 0
+	.dw 0x4191, 0xcc15,	0x4191, 0xcc15,		0x21, 0
+	.dw 0x4193, 0xcc15,	0x41bf, 0xcc15,		0x21, 0
+	.dw 0x41c1, 0xcc15,	0x41c1, 0xcc15,		0x21, 0
+	.dw 0x41c3, 0xcc15,	0x41cf, 0xcc15,		0x21, 0
+	.dw 0x41d1, 0xcc15,	0x41d1, 0xcc15,		0x21, 0
+	.dw 0x41d3, 0xcc15,	0x41ff, 0xcc15,		0x21, 0
+	.dw 0x4201, 0xcc15,	0x4201, 0xcc15,		0x21, 0
+	.dw 0x4203, 0xcc15,	0x420f, 0xcc15,		0x21, 0
+	.dw 0x4211, 0xcc15,	0x4211, 0xcc15,		0x21, 0
+	.dw 0x4213, 0xcc15,	0x423f, 0xcc15,		0x21, 0
+	.dw 0x4240, 0xcc15,	0x4240, 0xcc15,		0x22, 0
+	.dw 0x4241, 0xcc15,	0x4241, 0xcc15,		0x21, 0
+	.dw 0x4242, 0xcc15,	0x4242, 0xcc15,		0x22, 0
+	.dw 0x4243, 0xcc15,	0x424f, 0xcc15,		0x21, 0
+	.dw 0x4250, 0xcc15,	0x4250, 0xcc15,		0x22, 0
+	.dw 0x4251, 0xcc15,	0x4251, 0xcc15,		0x21, 0
+	.dw 0x4252, 0xcc15,	0x4252, 0xcc15,		0x22, 0
+	.dw 0x4253, 0xcc15,	0x427f, 0xcc15,		0x21, 0
+	.dw 0x4281, 0xcc15,	0x4281, 0xcc15,		0x21, 0
+	.dw 0x4283, 0xcc15,	0x428f, 0xcc15,		0x21, 0
+	.dw 0x4291, 0xcc15,	0x4291, 0xcc15,		0x21, 0
+	.dw 0x4293, 0xcc15,	0x42bf, 0xcc15,		0x21, 0
+	.dw 0x42c1, 0xcc15,	0x42c1, 0xcc15,		0x21, 0
+	.dw 0x42c3, 0xcc15,	0x42cf, 0xcc15,		0x21, 0
+	.dw 0x42d1, 0xcc15,	0x42d1, 0xcc15,		0x21, 0
+	.dw 0x42d3, 0xcc15,	0x42ff, 0xcc15,		0x21, 0
+	.dw 0x4301, 0xcc15,	0x4301, 0xcc15,		0x21, 0
+	.dw 0x4303, 0xcc15,	0x430f, 0xcc15,		0x21, 0
+	.dw 0x4311, 0xcc15,	0x4311, 0xcc15,		0x21, 0
+	.dw 0x4313, 0xcc15,	0x433f, 0xcc15,		0x21, 0
+	.dw 0x4341, 0xcc15,	0x4341, 0xcc15,		0x21, 0
+	.dw 0x4343, 0xcc15,	0x434f, 0xcc15,		0x21, 0
+	.dw 0x4351, 0xcc15,	0x4351, 0xcc15,		0x21, 0
+	.dw 0x4353, 0xcc15,	0x437f, 0xcc15,		0x21, 0
+	.dw 0x4381, 0xcc15,	0x4381, 0xcc15,		0x21, 0
+	.dw 0x4383, 0xcc15,	0x438f, 0xcc15,		0x21, 0
+	.dw 0x4391, 0xcc15,	0x4391, 0xcc15,		0x21, 0
+	.dw 0x4393, 0xcc15,	0x43bf, 0xcc15,		0x21, 0
+	.dw 0x43c1, 0xcc15,	0x43c1, 0xcc15,		0x21, 0
+	.dw 0x43c3, 0xcc15,	0x43cf, 0xcc15,		0x21, 0
+	.dw 0x43d1, 0xcc15,	0x43d1, 0xcc15,		0x21, 0
+	.dw 0x43d3, 0xcc15,	0x43ff, 0xcc15,		0x21, 0
+	.dw 0x4401, 0xcc15,	0x4401, 0xcc15,		0x21, 0
+	.dw 0x4403, 0xcc15,	0x440f, 0xcc15,		0x21, 0
+	.dw 0x4411, 0xcc15,	0x4411, 0xcc15,		0x21, 0
+	.dw 0x4413, 0xcc15,	0x443f, 0xcc15,		0x21, 0
+	.dw 0x4441, 0xcc15,	0x4441, 0xcc15,		0x21, 0
+	.dw 0x4443, 0xcc15,	0x444f, 0xcc15,		0x21, 0
+	.dw 0x4451, 0xcc15,	0x4451, 0xcc15,		0x21, 0
+	.dw 0x4453, 0xcc15,	0x447f, 0xcc15,		0x21, 0
+	.dw 0x4480, 0xcc15,	0x4480, 0xcc15,		0x22, 0
+	.dw 0x4481, 0xcc15,	0x4481, 0xcc15,		0x21, 0
+	.dw 0x4482, 0xcc15,	0x4482, 0xcc15,		0x22, 0
+	.dw 0x4483, 0xcc15,	0x448f, 0xcc15,		0x21, 0
+	.dw 0x4490, 0xcc15,	0x4490, 0xcc15,		0x22, 0
+	.dw 0x4491, 0xcc15,	0x4491, 0xcc15,		0x21, 0
+	.dw 0x4492, 0xcc15,	0x4492, 0xcc15,		0x22, 0
+	.dw 0x4493, 0xcc15,	0x44bf, 0xcc15,		0x21, 0
+	.dw 0x44c1, 0xcc15,	0x44c1, 0xcc15,		0x21, 0
+	.dw 0x44c3, 0xcc15,	0x44cf, 0xcc15,		0x21, 0
+	.dw 0x44d1, 0xcc15,	0x44d1, 0xcc15,		0x21, 0
+	.dw 0x44d3, 0xcc15,	0x44ff, 0xcc15,		0x21, 0
+	.dw 0x4501, 0xcc15,	0x4501, 0xcc15,		0x21, 0
+	.dw 0x4503, 0xcc15,	0x450f, 0xcc15,		0x21, 0
+	.dw 0x4511, 0xcc15,	0x4511, 0xcc15,		0x21, 0
+	.dw 0x4513, 0xcc15,	0x453f, 0xcc15,		0x21, 0
+	.dw 0x4541, 0xcc15,	0x4541, 0xcc15,		0x21, 0
+	.dw 0x4543, 0xcc15,	0x454f, 0xcc15,		0x21, 0
+	.dw 0x4551, 0xcc15,	0x4551, 0xcc15,		0x21, 0
+	.dw 0x4553, 0xcc15,	0x457f, 0xcc15,		0x21, 0
+	.dw 0x4581, 0xcc15,	0x4581, 0xcc15,		0x21, 0
+	.dw 0x4583, 0xcc15,	0x458f, 0xcc15,		0x21, 0
+	.dw 0x4591, 0xcc15,	0x4591, 0xcc15,		0x21, 0
+	.dw 0x4593, 0xcc15,	0x45bf, 0xcc15,		0x21, 0
+	.dw 0x45c1, 0xcc15,	0x45c1, 0xcc15,		0x21, 0
+	.dw 0x45c3, 0xcc15,	0x45cf, 0xcc15,		0x21, 0
+	.dw 0x45d1, 0xcc15,	0x45d1, 0xcc15,		0x21, 0
+	.dw 0x45d3, 0xcc15,	0x45ff, 0xcc15,		0x21, 0
+	.dw 0x4601, 0xcc15,	0x4601, 0xcc15,		0x21, 0
+	.dw 0x4603, 0xcc15,	0x460f, 0xcc15,		0x21, 0
+	.dw 0x4611, 0xcc15,	0x4611, 0xcc15,		0x21, 0
+	.dw 0x4613, 0xcc15,	0x463f, 0xcc15,		0x21, 0
+	.dw 0x4641, 0xcc15,	0x4641, 0xcc15,		0x21, 0
+	.dw 0x4643, 0xcc15,	0x464f, 0xcc15,		0x21, 0
+	.dw 0x4651, 0xcc15,	0x4651, 0xcc15,		0x21, 0
+	.dw 0x4653, 0xcc15,	0x467f, 0xcc15,		0x21, 0
+	.dw 0x4681, 0xcc15,	0x4681, 0xcc15,		0x21, 0
+	.dw 0x4683, 0xcc15,	0x468f, 0xcc15,		0x21, 0
+	.dw 0x4691, 0xcc15,	0x4691, 0xcc15,		0x21, 0
+	.dw 0x4693, 0xcc15,	0x46bf, 0xcc15,		0x21, 0
+	.dw 0x46c0, 0xcc15,	0x46c0, 0xcc15,		0x22, 0
+	.dw 0x46c1, 0xcc15,	0x46c1, 0xcc15,		0x21, 0
+	.dw 0x46c2, 0xcc15,	0x46c2, 0xcc15,		0x22, 0
+	.dw 0x46c3, 0xcc15,	0x46cf, 0xcc15,		0x21, 0
+	.dw 0x46d0, 0xcc15,	0x46d0, 0xcc15,		0x22, 0
+	.dw 0x46d1, 0xcc15,	0x46d1, 0xcc15,		0x21, 0
+	.dw 0x46d2, 0xcc15,	0x46d2, 0xcc15,		0x22, 0
+	.dw 0x46d3, 0xcc15,	0x46ff, 0xcc15,		0x21, 0
+	.dw 0x4701, 0xcc15,	0x4701, 0xcc15,		0x21, 0
+	.dw 0x4703, 0xcc15,	0x470f, 0xcc15,		0x21, 0
+	.dw 0x4711, 0xcc15,	0x4711, 0xcc15,		0x21, 0
+	.dw 0x4713, 0xcc15,	0x473f, 0xcc15,		0x21, 0
+	.dw 0x4741, 0xcc15,	0x4741, 0xcc15,		0x21, 0
+	.dw 0x4743, 0xcc15,	0x474f, 0xcc15,		0x21, 0
+	.dw 0x4751, 0xcc15,	0x4751, 0xcc15,		0x21, 0
+	.dw 0x4753, 0xcc15,	0x477f, 0xcc15,		0x21, 0
+	.dw 0x4781, 0xcc15,	0x4781, 0xcc15,		0x21, 0
+	.dw 0x4783, 0xcc15,	0x478f, 0xcc15,		0x21, 0
+	.dw 0x4791, 0xcc15,	0x4791, 0xcc15,		0x21, 0
+	.dw 0x4793, 0xcc15,	0x47bf, 0xcc15,		0x21, 0
+	.dw 0x47c1, 0xcc15,	0x47c1, 0xcc15,		0x21, 0
+	.dw 0x47c3, 0xcc15,	0x47cf, 0xcc15,		0x21, 0
+	.dw 0x47d1, 0xcc15,	0x47d1, 0xcc15,		0x21, 0
+	.dw 0x47d3, 0xcc15,	0x47ff, 0xcc15,		0x21, 0
+	.dw 0x4801, 0xcc15,	0x4801, 0xcc15,		0x21, 0
+	.dw 0x4803, 0xcc15,	0x480f, 0xcc15,		0x21, 0
+	.dw 0x4811, 0xcc15,	0x4811, 0xcc15,		0x21, 0
+	.dw 0x4813, 0xcc15,	0x483f, 0xcc15,		0x21, 0
+	.dw 0x4841, 0xcc15,	0x4841, 0xcc15,		0x21, 0
+	.dw 0x4843, 0xcc15,	0x484f, 0xcc15,		0x21, 0
+	.dw 0x4851, 0xcc15,	0x4851, 0xcc15,		0x21, 0
+	.dw 0x4853, 0xcc15,	0x487f, 0xcc15,		0x21, 0
+	.dw 0x4881, 0xcc15,	0x4881, 0xcc15,		0x21, 0
+	.dw 0x4883, 0xcc15,	0x488f, 0xcc15,		0x21, 0
+	.dw 0x4891, 0xcc15,	0x4891, 0xcc15,		0x21, 0
+	.dw 0x4893, 0xcc15,	0x48bf, 0xcc15,		0x21, 0
+	.dw 0x48c1, 0xcc15,	0x48c1, 0xcc15,		0x21, 0
+	.dw 0x48c3, 0xcc15,	0x48cf, 0xcc15,		0x21, 0
+	.dw 0x48d1, 0xcc15,	0x48d1, 0xcc15,		0x21, 0
+	.dw 0x48d3, 0xcc15,	0x48ff, 0xcc15,		0x21, 0
+	.dw 0x4900, 0xcc15,	0x4900, 0xcc15,		0x22, 0
+	.dw 0x4901, 0xcc15,	0x4901, 0xcc15,		0x21, 0
+	.dw 0x4902, 0xcc15,	0x4902, 0xcc15,		0x22, 0
+	.dw 0x4903, 0xcc15,	0x490f, 0xcc15,		0x21, 0
+	.dw 0x4910, 0xcc15,	0x4910, 0xcc15,		0x22, 0
+	.dw 0x4911, 0xcc15,	0x4911, 0xcc15,		0x21, 0
+	.dw 0x4912, 0xcc15,	0x4912, 0xcc15,		0x22, 0
+	.dw 0x4913, 0xcc15,	0x493f, 0xcc15,		0x21, 0
+	.dw 0x4941, 0xcc15,	0x4941, 0xcc15,		0x21, 0
+	.dw 0x4943, 0xcc15,	0x494f, 0xcc15,		0x21, 0
+	.dw 0x4951, 0xcc15,	0x4951, 0xcc15,		0x21, 0
+	.dw 0x4953, 0xcc15,	0x497f, 0xcc15,		0x21, 0
+	.dw 0x4981, 0xcc15,	0x4981, 0xcc15,		0x21, 0
+	.dw 0x4983, 0xcc15,	0x498f, 0xcc15,		0x21, 0
+	.dw 0x4991, 0xcc15,	0x4991, 0xcc15,		0x21, 0
+	.dw 0x4993, 0xcc15,	0x49bf, 0xcc15,		0x21, 0
+	.dw 0x49c1, 0xcc15,	0x49c1, 0xcc15,		0x21, 0
+	.dw 0x49c3, 0xcc15,	0x49cf, 0xcc15,		0x21, 0
+	.dw 0x49d1, 0xcc15,	0x49d1, 0xcc15,		0x21, 0
+	.dw 0x49d3, 0xcc15,	0x49ff, 0xcc15,		0x21, 0
+	.dw 0x4a01, 0xcc15,	0x4a01, 0xcc15,		0x21, 0
+	.dw 0x4a03, 0xcc15,	0x4a0f, 0xcc15,		0x21, 0
+	.dw 0x4a11, 0xcc15,	0x4a11, 0xcc15,		0x21, 0
+	.dw 0x4a13, 0xcc15,	0x4a3f, 0xcc15,		0x21, 0
+	.dw 0x4a41, 0xcc15,	0x4a41, 0xcc15,		0x21, 0
+	.dw 0x4a43, 0xcc15,	0x4a4f, 0xcc15,		0x21, 0
+	.dw 0x4a51, 0xcc15,	0x4a51, 0xcc15,		0x21, 0
+	.dw 0x4a53, 0xcc15,	0x4a7f, 0xcc15,		0x21, 0
+	.dw 0x4a81, 0xcc15,	0x4a81, 0xcc15,		0x21, 0
+	.dw 0x4a83, 0xcc15,	0x4a8f, 0xcc15,		0x21, 0
+	.dw 0x4a91, 0xcc15,	0x4a91, 0xcc15,		0x21, 0
+	.dw 0x4a93, 0xcc15,	0x4abf, 0xcc15,		0x21, 0
+	.dw 0x4ac1, 0xcc15,	0x4ac1, 0xcc15,		0x21, 0
+	.dw 0x4ac3, 0xcc15,	0x4acf, 0xcc15,		0x21, 0
+	.dw 0x4ad1, 0xcc15,	0x4ad1, 0xcc15,		0x21, 0
+	.dw 0x4ad3, 0xcc15,	0x4aff, 0xcc15,		0x21, 0
+	.dw 0x4b01, 0xcc15,	0x4b01, 0xcc15,		0x21, 0
+	.dw 0x4b03, 0xcc15,	0x4b0f, 0xcc15,		0x21, 0
+	.dw 0x4b11, 0xcc15,	0x4b11, 0xcc15,		0x21, 0
+	.dw 0x4b13, 0xcc15,	0x4b3f, 0xcc15,		0x21, 0
+	.dw 0x4b40, 0xcc15,	0x4b40, 0xcc15,		0x22, 0
+	.dw 0x4b41, 0xcc15,	0x4b41, 0xcc15,		0x21, 0
+	.dw 0x4b42, 0xcc15,	0x4b42, 0xcc15,		0x22, 0
+	.dw 0x4b43, 0xcc15,	0x4b4f, 0xcc15,		0x21, 0
+	.dw 0x4b50, 0xcc15,	0x4b50, 0xcc15,		0x22, 0
+	.dw 0x4b51, 0xcc15,	0x4b51, 0xcc15,		0x21, 0
+	.dw 0x4b52, 0xcc15,	0x4b52, 0xcc15,		0x22, 0
+	.dw 0x4b53, 0xcc15,	0x4b7f, 0xcc15,		0x21, 0
+	.dw 0x4b81, 0xcc15,	0x4b81, 0xcc15,		0x21, 0
+	.dw 0x4b83, 0xcc15,	0x4b8f, 0xcc15,		0x21, 0
+	.dw 0x4b91, 0xcc15,	0x4b91, 0xcc15,		0x21, 0
+	.dw 0x4b93, 0xcc15,	0x4bbf, 0xcc15,		0x21, 0
+	.dw 0x4bc1, 0xcc15,	0x4bc1, 0xcc15,		0x21, 0
+	.dw 0x4bc3, 0xcc15,	0x4bcf, 0xcc15,		0x21, 0
+	.dw 0x4bd1, 0xcc15,	0x4bd1, 0xcc15,		0x21, 0
+	.dw 0x4bd3, 0xcc15,	0x4bff, 0xcc15,		0x21, 0
+	.dw 0x4c01, 0xcc15,	0x4c01, 0xcc15,		0x21, 0
+	.dw 0x4c03, 0xcc15,	0x4c0f, 0xcc15,		0x21, 0
+	.dw 0x4c11, 0xcc15,	0x4c11, 0xcc15,		0x21, 0
+	.dw 0x4c13, 0xcc15,	0x4c3f, 0xcc15,		0x21, 0
+	.dw 0x4c41, 0xcc15,	0x4c41, 0xcc15,		0x21, 0
+	.dw 0x4c43, 0xcc15,	0x4c4f, 0xcc15,		0x21, 0
+	.dw 0x4c51, 0xcc15,	0x4c51, 0xcc15,		0x21, 0
+	.dw 0x4c53, 0xcc15,	0x4c7f, 0xcc15,		0x21, 0
+	.dw 0x4c81, 0xcc15,	0x4c81, 0xcc15,		0x21, 0
+	.dw 0x4c83, 0xcc15,	0x4c8f, 0xcc15,		0x21, 0
+	.dw 0x4c91, 0xcc15,	0x4c91, 0xcc15,		0x21, 0
+	.dw 0x4c93, 0xcc15,	0x4cbf, 0xcc15,		0x21, 0
+	.dw 0x4cc1, 0xcc15,	0x4cc1, 0xcc15,		0x21, 0
+	.dw 0x4cc3, 0xcc15,	0x4ccf, 0xcc15,		0x21, 0
+	.dw 0x4cd1, 0xcc15,	0x4cd1, 0xcc15,		0x21, 0
+	.dw 0x4cd3, 0xcc15,	0x4cff, 0xcc15,		0x21, 0
+	.dw 0x4d01, 0xcc15,	0x4d01, 0xcc15,		0x21, 0
+	.dw 0x4d03, 0xcc15,	0x4d0f, 0xcc15,		0x21, 0
+	.dw 0x4d11, 0xcc15,	0x4d11, 0xcc15,		0x21, 0
+	.dw 0x4d13, 0xcc15,	0x4d3f, 0xcc15,		0x21, 0
+	.dw 0x4d41, 0xcc15,	0x4d41, 0xcc15,		0x21, 0
+	.dw 0x4d43, 0xcc15,	0x4d4f, 0xcc15,		0x21, 0
+	.dw 0x4d51, 0xcc15,	0x4d51, 0xcc15,		0x21, 0
+	.dw 0x4d53, 0xcc15,	0x4d7f, 0xcc15,		0x21, 0
+	.dw 0x4d80, 0xcc15,	0x4d80, 0xcc15,		0x22, 0
+	.dw 0x4d81, 0xcc15,	0x4d81, 0xcc15,		0x21, 0
+	.dw 0x4d82, 0xcc15,	0x4d82, 0xcc15,		0x22, 0
+	.dw 0x4d83, 0xcc15,	0x4d8f, 0xcc15,		0x21, 0
+	.dw 0x4d90, 0xcc15,	0x4d90, 0xcc15,		0x22, 0
+	.dw 0x4d91, 0xcc15,	0x4d91, 0xcc15,		0x21, 0
+	.dw 0x4d92, 0xcc15,	0x4d92, 0xcc15,		0x22, 0
+	.dw 0x4d93, 0xcc15,	0x4dbf, 0xcc15,		0x21, 0
+	.dw 0x4dc1, 0xcc15,	0x4dc1, 0xcc15,		0x21, 0
+	.dw 0x4dc3, 0xcc15,	0x4dcf, 0xcc15,		0x21, 0
+	.dw 0x4dd1, 0xcc15,	0x4dd1, 0xcc15,		0x21, 0
+	.dw 0x4dd3, 0xcc15,	0x4dff, 0xcc15,		0x21, 0
+	.dw 0x4e01, 0xcc15,	0x4e01, 0xcc15,		0x21, 0
+	.dw 0x4e03, 0xcc15,	0x4e0f, 0xcc15,		0x21, 0
+	.dw 0x4e11, 0xcc15,	0x4e11, 0xcc15,		0x21, 0
+	.dw 0x4e13, 0xcc15,	0x4e3f, 0xcc15,		0x21, 0
+	.dw 0x4e41, 0xcc15,	0x4e41, 0xcc15,		0x21, 0
+	.dw 0x4e43, 0xcc15,	0x4e4f, 0xcc15,		0x21, 0
+	.dw 0x4e51, 0xcc15,	0x4e51, 0xcc15,		0x21, 0
+	.dw 0x4e53, 0xcc15,	0x4e7f, 0xcc15,		0x21, 0
+	.dw 0x4e81, 0xcc15,	0x4e81, 0xcc15,		0x21, 0
+	.dw 0x4e83, 0xcc15,	0x4e8f, 0xcc15,		0x21, 0
+	.dw 0x4e91, 0xcc15,	0x4e91, 0xcc15,		0x21, 0
+	.dw 0x4e93, 0xcc15,	0x4ebf, 0xcc15,		0x21, 0
+	.dw 0x4ec1, 0xcc15,	0x4ec1, 0xcc15,		0x21, 0
+	.dw 0x4ec3, 0xcc15,	0x4ecf, 0xcc15,		0x21, 0
+	.dw 0x4ed1, 0xcc15,	0x4ed1, 0xcc15,		0x21, 0
+	.dw 0x4ed3, 0xcc15,	0x4eff, 0xcc15,		0x21, 0
+	.dw 0x4f01, 0xcc15,	0x4f01, 0xcc15,		0x21, 0
+	.dw 0x4f03, 0xcc15,	0x4f0f, 0xcc15,		0x21, 0
+	.dw 0x4f11, 0xcc15,	0x4f11, 0xcc15,		0x21, 0
+	.dw 0x4f13, 0xcc15,	0x4f3f, 0xcc15,		0x21, 0
+	.dw 0x4f41, 0xcc15,	0x4f41, 0xcc15,		0x21, 0
+	.dw 0x4f43, 0xcc15,	0x4f4f, 0xcc15,		0x21, 0
+	.dw 0x4f51, 0xcc15,	0x4f51, 0xcc15,		0x21, 0
+	.dw 0x4f53, 0xcc15,	0x4f7f, 0xcc15,		0x21, 0
+	.dw 0x4f81, 0xcc15,	0x4f81, 0xcc15,		0x21, 0
+	.dw 0x4f83, 0xcc15,	0x4f8f, 0xcc15,		0x21, 0
+	.dw 0x4f91, 0xcc15,	0x4f91, 0xcc15,		0x21, 0
+	.dw 0x4f93, 0xcc15,	0x4fbf, 0xcc15,		0x21, 0
+	.dw 0x4fc0, 0xcc15,	0x4fc0, 0xcc15,		0x22, 0
+	.dw 0x4fc1, 0xcc15,	0x4fc1, 0xcc15,		0x21, 0
+	.dw 0x4fc2, 0xcc15,	0x4fc2, 0xcc15,		0x22, 0
+	.dw 0x4fc3, 0xcc15,	0x4fcf, 0xcc15,		0x21, 0
+	.dw 0x4fd0, 0xcc15,	0x4fd0, 0xcc15,		0x22, 0
+	.dw 0x4fd1, 0xcc15,	0x4fd1, 0xcc15,		0x21, 0
+	.dw 0x4fd2, 0xcc15,	0x4fd2, 0xcc15,		0x22, 0
+	.dw 0x4fd3, 0xcc15,	0x5fff, 0xcc15,		0x21, 0
+	.dw 0x6000, 0xcc15,	0x6000, 0xcc15,		0x22, 0
+	.dw 0x6001, 0xcc15,	0x6001, 0xcc15,		0x21, 0
+	.dw 0x6002, 0xcc15,	0x6002, 0xcc15,		0x22, 0
+	.dw 0x6003, 0xcc15,	0x600f, 0xcc15,		0x21, 0
+	.dw 0x6010, 0xcc15,	0x6010, 0xcc15,		0x22, 0
+	.dw 0x6011, 0xcc15,	0x6011, 0xcc15,		0x21, 0
+	.dw 0x6012, 0xcc15,	0x6012, 0xcc15,		0x22, 0
+	.dw 0x6013, 0xcc15,	0x603f, 0xcc15,		0x21, 0
+	.dw 0x6041, 0xcc15,	0x6041, 0xcc15,		0x21, 0
+	.dw 0x6043, 0xcc15,	0x604f, 0xcc15,		0x21, 0
+	.dw 0x6051, 0xcc15,	0x6051, 0xcc15,		0x21, 0
+	.dw 0x6053, 0xcc15,	0x607f, 0xcc15,		0x21, 0
+	.dw 0x6081, 0xcc15,	0x6081, 0xcc15,		0x21, 0
+	.dw 0x6083, 0xcc15,	0x608f, 0xcc15,		0x21, 0
+	.dw 0x6091, 0xcc15,	0x6091, 0xcc15,		0x21, 0
+	.dw 0x6093, 0xcc15,	0x60bf, 0xcc15,		0x21, 0
+	.dw 0x60c1, 0xcc15,	0x60c1, 0xcc15,		0x21, 0
+	.dw 0x60c3, 0xcc15,	0x60cf, 0xcc15,		0x21, 0
+	.dw 0x60d1, 0xcc15,	0x60d1, 0xcc15,		0x21, 0
+	.dw 0x60d3, 0xcc15,	0x60ff, 0xcc15,		0x21, 0
+	.dw 0x6101, 0xcc15,	0x6101, 0xcc15,		0x21, 0
+	.dw 0x6103, 0xcc15,	0x610f, 0xcc15,		0x21, 0
+	.dw 0x6111, 0xcc15,	0x6111, 0xcc15,		0x21, 0
+	.dw 0x6113, 0xcc15,	0x613f, 0xcc15,		0x21, 0
+	.dw 0x6141, 0xcc15,	0x6141, 0xcc15,		0x21, 0
+	.dw 0x6143, 0xcc15,	0x614f, 0xcc15,		0x21, 0
+	.dw 0x6151, 0xcc15,	0x6151, 0xcc15,		0x21, 0
+	.dw 0x6153, 0xcc15,	0x617f, 0xcc15,		0x21, 0
+	.dw 0x6181, 0xcc15,	0x6181, 0xcc15,		0x21, 0
+	.dw 0x6183, 0xcc15,	0x618f, 0xcc15,		0x21, 0
+	.dw 0x6191, 0xcc15,	0x6191, 0xcc15,		0x21, 0
+	.dw 0x6193, 0xcc15,	0x61bf, 0xcc15,		0x21, 0
+	.dw 0x61c1, 0xcc15,	0x61c1, 0xcc15,		0x21, 0
+	.dw 0x61c3, 0xcc15,	0x61cf, 0xcc15,		0x21, 0
+	.dw 0x61d1, 0xcc15,	0x61d1, 0xcc15,		0x21, 0
+	.dw 0x61d3, 0xcc15,	0x61ff, 0xcc15,		0x21, 0
+	.dw 0x6201, 0xcc15,	0x6201, 0xcc15,		0x21, 0
+	.dw 0x6203, 0xcc15,	0x620f, 0xcc15,		0x21, 0
+	.dw 0x6211, 0xcc15,	0x6211, 0xcc15,		0x21, 0
+	.dw 0x6213, 0xcc15,	0x623f, 0xcc15,		0x21, 0
+	.dw 0x6240, 0xcc15,	0x6240, 0xcc15,		0x22, 0
+	.dw 0x6241, 0xcc15,	0x6241, 0xcc15,		0x21, 0
+	.dw 0x6242, 0xcc15,	0x6242, 0xcc15,		0x22, 0
+	.dw 0x6243, 0xcc15,	0x624f, 0xcc15,		0x21, 0
+	.dw 0x6250, 0xcc15,	0x6250, 0xcc15,		0x22, 0
+	.dw 0x6251, 0xcc15,	0x6251, 0xcc15,		0x21, 0
+	.dw 0x6252, 0xcc15,	0x6252, 0xcc15,		0x22, 0
+	.dw 0x6253, 0xcc15,	0x627f, 0xcc15,		0x21, 0
+	.dw 0x6281, 0xcc15,	0x6281, 0xcc15,		0x21, 0
+	.dw 0x6283, 0xcc15,	0x628f, 0xcc15,		0x21, 0
+	.dw 0x6291, 0xcc15,	0x6291, 0xcc15,		0x21, 0
+	.dw 0x6293, 0xcc15,	0x62bf, 0xcc15,		0x21, 0
+	.dw 0x62c1, 0xcc15,	0x62c1, 0xcc15,		0x21, 0
+	.dw 0x62c3, 0xcc15,	0x62cf, 0xcc15,		0x21, 0
+	.dw 0x62d1, 0xcc15,	0x62d1, 0xcc15,		0x21, 0
+	.dw 0x62d3, 0xcc15,	0x62ff, 0xcc15,		0x21, 0
+	.dw 0x6301, 0xcc15,	0x6301, 0xcc15,		0x21, 0
+	.dw 0x6303, 0xcc15,	0x630f, 0xcc15,		0x21, 0
+	.dw 0x6311, 0xcc15,	0x6311, 0xcc15,		0x21, 0
+	.dw 0x6313, 0xcc15,	0x633f, 0xcc15,		0x21, 0
+	.dw 0x6341, 0xcc15,	0x6341, 0xcc15,		0x21, 0
+	.dw 0x6343, 0xcc15,	0x634f, 0xcc15,		0x21, 0
+	.dw 0x6351, 0xcc15,	0x6351, 0xcc15,		0x21, 0
+	.dw 0x6353, 0xcc15,	0x637f, 0xcc15,		0x21, 0
+	.dw 0x6381, 0xcc15,	0x6381, 0xcc15,		0x21, 0
+	.dw 0x6383, 0xcc15,	0x638f, 0xcc15,		0x21, 0
+	.dw 0x6391, 0xcc15,	0x6391, 0xcc15,		0x21, 0
+	.dw 0x6393, 0xcc15,	0x63bf, 0xcc15,		0x21, 0
+	.dw 0x63c1, 0xcc15,	0x63c1, 0xcc15,		0x21, 0
+	.dw 0x63c3, 0xcc15,	0x63cf, 0xcc15,		0x21, 0
+	.dw 0x63d1, 0xcc15,	0x63d1, 0xcc15,		0x21, 0
+	.dw 0x63d3, 0xcc15,	0x63ff, 0xcc15,		0x21, 0
+	.dw 0x6401, 0xcc15,	0x6401, 0xcc15,		0x21, 0
+	.dw 0x6403, 0xcc15,	0x640f, 0xcc15,		0x21, 0
+	.dw 0x6411, 0xcc15,	0x6411, 0xcc15,		0x21, 0
+	.dw 0x6413, 0xcc15,	0x643f, 0xcc15,		0x21, 0
+	.dw 0x6441, 0xcc15,	0x6441, 0xcc15,		0x21, 0
+	.dw 0x6443, 0xcc15,	0x644f, 0xcc15,		0x21, 0
+	.dw 0x6451, 0xcc15,	0x6451, 0xcc15,		0x21, 0
+	.dw 0x6453, 0xcc15,	0x647f, 0xcc15,		0x21, 0
+	.dw 0x6480, 0xcc15,	0x6480, 0xcc15,		0x22, 0
+	.dw 0x6481, 0xcc15,	0x6481, 0xcc15,		0x21, 0
+	.dw 0x6482, 0xcc15,	0x6482, 0xcc15,		0x22, 0
+	.dw 0x6483, 0xcc15,	0x648f, 0xcc15,		0x21, 0
+	.dw 0x6490, 0xcc15,	0x6490, 0xcc15,		0x22, 0
+	.dw 0x6491, 0xcc15,	0x6491, 0xcc15,		0x21, 0
+	.dw 0x6492, 0xcc15,	0x6492, 0xcc15,		0x22, 0
+	.dw 0x6493, 0xcc15,	0x64bf, 0xcc15,		0x21, 0
+	.dw 0x64c1, 0xcc15,	0x64c1, 0xcc15,		0x21, 0
+	.dw 0x64c3, 0xcc15,	0x64cf, 0xcc15,		0x21, 0
+	.dw 0x64d1, 0xcc15,	0x64d1, 0xcc15,		0x21, 0
+	.dw 0x64d3, 0xcc15,	0x64ff, 0xcc15,		0x21, 0
+	.dw 0x6501, 0xcc15,	0x6501, 0xcc15,		0x21, 0
+	.dw 0x6503, 0xcc15,	0x650f, 0xcc15,		0x21, 0
+	.dw 0x6511, 0xcc15,	0x6511, 0xcc15,		0x21, 0
+	.dw 0x6513, 0xcc15,	0x653f, 0xcc15,		0x21, 0
+	.dw 0x6541, 0xcc15,	0x6541, 0xcc15,		0x21, 0
+	.dw 0x6543, 0xcc15,	0x654f, 0xcc15,		0x21, 0
+	.dw 0x6551, 0xcc15,	0x6551, 0xcc15,		0x21, 0
+	.dw 0x6553, 0xcc15,	0x657f, 0xcc15,		0x21, 0
+	.dw 0x6581, 0xcc15,	0x6581, 0xcc15,		0x21, 0
+	.dw 0x6583, 0xcc15,	0x658f, 0xcc15,		0x21, 0
+	.dw 0x6591, 0xcc15,	0x6591, 0xcc15,		0x21, 0
+	.dw 0x6593, 0xcc15,	0x65bf, 0xcc15,		0x21, 0
+	.dw 0x65c1, 0xcc15,	0x65c1, 0xcc15,		0x21, 0
+	.dw 0x65c3, 0xcc15,	0x65cf, 0xcc15,		0x21, 0
+	.dw 0x65d1, 0xcc15,	0x65d1, 0xcc15,		0x21, 0
+	.dw 0x65d3, 0xcc15,	0x65ff, 0xcc15,		0x21, 0
+	.dw 0x6601, 0xcc15,	0x6601, 0xcc15,		0x21, 0
+	.dw 0x6603, 0xcc15,	0x660f, 0xcc15,		0x21, 0
+	.dw 0x6611, 0xcc15,	0x6611, 0xcc15,		0x21, 0
+	.dw 0x6613, 0xcc15,	0x663f, 0xcc15,		0x21, 0
+	.dw 0x6641, 0xcc15,	0x6641, 0xcc15,		0x21, 0
+	.dw 0x6643, 0xcc15,	0x664f, 0xcc15,		0x21, 0
+	.dw 0x6651, 0xcc15,	0x6651, 0xcc15,		0x21, 0
+	.dw 0x6653, 0xcc15,	0x667f, 0xcc15,		0x21, 0
+	.dw 0x6681, 0xcc15,	0x6681, 0xcc15,		0x21, 0
+	.dw 0x6683, 0xcc15,	0x668f, 0xcc15,		0x21, 0
+	.dw 0x6691, 0xcc15,	0x6691, 0xcc15,		0x21, 0
+	.dw 0x6693, 0xcc15,	0x66bf, 0xcc15,		0x21, 0
+	.dw 0x66c0, 0xcc15,	0x66c0, 0xcc15,		0x22, 0
+	.dw 0x66c1, 0xcc15,	0x66c1, 0xcc15,		0x21, 0
+	.dw 0x66c2, 0xcc15,	0x66c2, 0xcc15,		0x22, 0
+	.dw 0x66c3, 0xcc15,	0x66cf, 0xcc15,		0x21, 0
+	.dw 0x66d0, 0xcc15,	0x66d0, 0xcc15,		0x22, 0
+	.dw 0x66d1, 0xcc15,	0x66d1, 0xcc15,		0x21, 0
+	.dw 0x66d2, 0xcc15,	0x66d2, 0xcc15,		0x22, 0
+	.dw 0x66d3, 0xcc15,	0x66ff, 0xcc15,		0x21, 0
+	.dw 0x6701, 0xcc15,	0x6701, 0xcc15,		0x21, 0
+	.dw 0x6703, 0xcc15,	0x670f, 0xcc15,		0x21, 0
+	.dw 0x6711, 0xcc15,	0x6711, 0xcc15,		0x21, 0
+	.dw 0x6713, 0xcc15,	0x673f, 0xcc15,		0x21, 0
+	.dw 0x6741, 0xcc15,	0x6741, 0xcc15,		0x21, 0
+	.dw 0x6743, 0xcc15,	0x674f, 0xcc15,		0x21, 0
+	.dw 0x6751, 0xcc15,	0x6751, 0xcc15,		0x21, 0
+	.dw 0x6753, 0xcc15,	0x677f, 0xcc15,		0x21, 0
+	.dw 0x6781, 0xcc15,	0x6781, 0xcc15,		0x21, 0
+	.dw 0x6783, 0xcc15,	0x678f, 0xcc15,		0x21, 0
+	.dw 0x6791, 0xcc15,	0x6791, 0xcc15,		0x21, 0
+	.dw 0x6793, 0xcc15,	0x67bf, 0xcc15,		0x21, 0
+	.dw 0x67c1, 0xcc15,	0x67c1, 0xcc15,		0x21, 0
+	.dw 0x67c3, 0xcc15,	0x67cf, 0xcc15,		0x21, 0
+	.dw 0x67d1, 0xcc15,	0x67d1, 0xcc15,		0x21, 0
+	.dw 0x67d3, 0xcc15,	0x67ff, 0xcc15,		0x21, 0
+	.dw 0x6801, 0xcc15,	0x6801, 0xcc15,		0x21, 0
+	.dw 0x6803, 0xcc15,	0x680f, 0xcc15,		0x21, 0
+	.dw 0x6811, 0xcc15,	0x6811, 0xcc15,		0x21, 0
+	.dw 0x6813, 0xcc15,	0x683f, 0xcc15,		0x21, 0
+	.dw 0x6841, 0xcc15,	0x6841, 0xcc15,		0x21, 0
+	.dw 0x6843, 0xcc15,	0x684f, 0xcc15,		0x21, 0
+	.dw 0x6851, 0xcc15,	0x6851, 0xcc15,		0x21, 0
+	.dw 0x6853, 0xcc15,	0x687f, 0xcc15,		0x21, 0
+	.dw 0x6881, 0xcc15,	0x6881, 0xcc15,		0x21, 0
+	.dw 0x6883, 0xcc15,	0x688f, 0xcc15,		0x21, 0
+	.dw 0x6891, 0xcc15,	0x6891, 0xcc15,		0x21, 0
+	.dw 0x6893, 0xcc15,	0x68bf, 0xcc15,		0x21, 0
+	.dw 0x68c1, 0xcc15,	0x68c1, 0xcc15,		0x21, 0
+	.dw 0x68c3, 0xcc15,	0x68cf, 0xcc15,		0x21, 0
+	.dw 0x68d1, 0xcc15,	0x68d1, 0xcc15,		0x21, 0
+	.dw 0x68d3, 0xcc15,	0x68ff, 0xcc15,		0x21, 0
+	.dw 0x6900, 0xcc15,	0x6900, 0xcc15,		0x22, 0
+	.dw 0x6901, 0xcc15,	0x6901, 0xcc15,		0x21, 0
+	.dw 0x6902, 0xcc15,	0x6902, 0xcc15,		0x22, 0
+	.dw 0x6903, 0xcc15,	0x690f, 0xcc15,		0x21, 0
+	.dw 0x6910, 0xcc15,	0x6910, 0xcc15,		0x22, 0
+	.dw 0x6911, 0xcc15,	0x6911, 0xcc15,		0x21, 0
+	.dw 0x6912, 0xcc15,	0x6912, 0xcc15,		0x22, 0
+	.dw 0x6913, 0xcc15,	0x693f, 0xcc15,		0x21, 0
+	.dw 0x6941, 0xcc15,	0x6941, 0xcc15,		0x21, 0
+	.dw 0x6943, 0xcc15,	0x694f, 0xcc15,		0x21, 0
+	.dw 0x6951, 0xcc15,	0x6951, 0xcc15,		0x21, 0
+	.dw 0x6953, 0xcc15,	0x697f, 0xcc15,		0x21, 0
+	.dw 0x6981, 0xcc15,	0x6981, 0xcc15,		0x21, 0
+	.dw 0x6983, 0xcc15,	0x698f, 0xcc15,		0x21, 0
+	.dw 0x6991, 0xcc15,	0x6991, 0xcc15,		0x21, 0
+	.dw 0x6993, 0xcc15,	0x69bf, 0xcc15,		0x21, 0
+	.dw 0x69c1, 0xcc15,	0x69c1, 0xcc15,		0x21, 0
+	.dw 0x69c3, 0xcc15,	0x69cf, 0xcc15,		0x21, 0
+	.dw 0x69d1, 0xcc15,	0x69d1, 0xcc15,		0x21, 0
+	.dw 0x69d3, 0xcc15,	0x69ff, 0xcc15,		0x21, 0
+	.dw 0x6a01, 0xcc15,	0x6a01, 0xcc15,		0x21, 0
+	.dw 0x6a03, 0xcc15,	0x6a0f, 0xcc15,		0x21, 0
+	.dw 0x6a11, 0xcc15,	0x6a11, 0xcc15,		0x21, 0
+	.dw 0x6a13, 0xcc15,	0x6a3f, 0xcc15,		0x21, 0
+	.dw 0x6a41, 0xcc15,	0x6a41, 0xcc15,		0x21, 0
+	.dw 0x6a43, 0xcc15,	0x6a4f, 0xcc15,		0x21, 0
+	.dw 0x6a51, 0xcc15,	0x6a51, 0xcc15,		0x21, 0
+	.dw 0x6a53, 0xcc15,	0x6a7f, 0xcc15,		0x21, 0
+	.dw 0x6a81, 0xcc15,	0x6a81, 0xcc15,		0x21, 0
+	.dw 0x6a83, 0xcc15,	0x6a8f, 0xcc15,		0x21, 0
+	.dw 0x6a91, 0xcc15,	0x6a91, 0xcc15,		0x21, 0
+	.dw 0x6a93, 0xcc15,	0x6abf, 0xcc15,		0x21, 0
+	.dw 0x6ac1, 0xcc15,	0x6ac1, 0xcc15,		0x21, 0
+	.dw 0x6ac3, 0xcc15,	0x6acf, 0xcc15,		0x21, 0
+	.dw 0x6ad1, 0xcc15,	0x6ad1, 0xcc15,		0x21, 0
+	.dw 0x6ad3, 0xcc15,	0x6aff, 0xcc15,		0x21, 0
+	.dw 0x6b01, 0xcc15,	0x6b01, 0xcc15,		0x21, 0
+	.dw 0x6b03, 0xcc15,	0x6b0f, 0xcc15,		0x21, 0
+	.dw 0x6b11, 0xcc15,	0x6b11, 0xcc15,		0x21, 0
+	.dw 0x6b13, 0xcc15,	0x6b3f, 0xcc15,		0x21, 0
+	.dw 0x6b40, 0xcc15,	0x6b40, 0xcc15,		0x22, 0
+	.dw 0x6b41, 0xcc15,	0x6b41, 0xcc15,		0x21, 0
+	.dw 0x6b42, 0xcc15,	0x6b42, 0xcc15,		0x22, 0
+	.dw 0x6b43, 0xcc15,	0x6b4f, 0xcc15,		0x21, 0
+	.dw 0x6b50, 0xcc15,	0x6b50, 0xcc15,		0x22, 0
+	.dw 0x6b51, 0xcc15,	0x6b51, 0xcc15,		0x21, 0
+	.dw 0x6b52, 0xcc15,	0x6b52, 0xcc15,		0x22, 0
+	.dw 0x6b53, 0xcc15,	0x6b7f, 0xcc15,		0x21, 0
+	.dw 0x6b81, 0xcc15,	0x6b81, 0xcc15,		0x21, 0
+	.dw 0x6b83, 0xcc15,	0x6b8f, 0xcc15,		0x21, 0
+	.dw 0x6b91, 0xcc15,	0x6b91, 0xcc15,		0x21, 0
+	.dw 0x6b93, 0xcc15,	0x6bbf, 0xcc15,		0x21, 0
+	.dw 0x6bc1, 0xcc15,	0x6bc1, 0xcc15,		0x21, 0
+	.dw 0x6bc3, 0xcc15,	0x6bcf, 0xcc15,		0x21, 0
+	.dw 0x6bd1, 0xcc15,	0x6bd1, 0xcc15,		0x21, 0
+	.dw 0x6bd3, 0xcc15,	0x6bff, 0xcc15,		0x21, 0
+	.dw 0x6c01, 0xcc15,	0x6c01, 0xcc15,		0x21, 0
+	.dw 0x6c03, 0xcc15,	0x6c0f, 0xcc15,		0x21, 0
+	.dw 0x6c11, 0xcc15,	0x6c11, 0xcc15,		0x21, 0
+	.dw 0x6c13, 0xcc15,	0x6c3f, 0xcc15,		0x21, 0
+	.dw 0x6c41, 0xcc15,	0x6c41, 0xcc15,		0x21, 0
+	.dw 0x6c43, 0xcc15,	0x6c4f, 0xcc15,		0x21, 0
+	.dw 0x6c51, 0xcc15,	0x6c51, 0xcc15,		0x21, 0
+	.dw 0x6c53, 0xcc15,	0x6c7f, 0xcc15,		0x21, 0
+	.dw 0x6c81, 0xcc15,	0x6c81, 0xcc15,		0x21, 0
+	.dw 0x6c83, 0xcc15,	0x6c8f, 0xcc15,		0x21, 0
+	.dw 0x6c91, 0xcc15,	0x6c91, 0xcc15,		0x21, 0
+	.dw 0x6c93, 0xcc15,	0x6cbf, 0xcc15,		0x21, 0
+	.dw 0x6cc1, 0xcc15,	0x6cc1, 0xcc15,		0x21, 0
+	.dw 0x6cc3, 0xcc15,	0x6ccf, 0xcc15,		0x21, 0
+	.dw 0x6cd1, 0xcc15,	0x6cd1, 0xcc15,		0x21, 0
+	.dw 0x6cd3, 0xcc15,	0x6cff, 0xcc15,		0x21, 0
+	.dw 0x6d01, 0xcc15,	0x6d01, 0xcc15,		0x21, 0
+	.dw 0x6d03, 0xcc15,	0x6d0f, 0xcc15,		0x21, 0
+	.dw 0x6d11, 0xcc15,	0x6d11, 0xcc15,		0x21, 0
+	.dw 0x6d13, 0xcc15,	0x6d3f, 0xcc15,		0x21, 0
+	.dw 0x6d41, 0xcc15,	0x6d41, 0xcc15,		0x21, 0
+	.dw 0x6d43, 0xcc15,	0x6d4f, 0xcc15,		0x21, 0
+	.dw 0x6d51, 0xcc15,	0x6d51, 0xcc15,		0x21, 0
+	.dw 0x6d53, 0xcc15,	0x6d7f, 0xcc15,		0x21, 0
+	.dw 0x6d80, 0xcc15,	0x6d80, 0xcc15,		0x22, 0
+	.dw 0x6d81, 0xcc15,	0x6d81, 0xcc15,		0x21, 0
+	.dw 0x6d82, 0xcc15,	0x6d82, 0xcc15,		0x22, 0
+	.dw 0x6d83, 0xcc15,	0x6d8f, 0xcc15,		0x21, 0
+	.dw 0x6d90, 0xcc15,	0x6d90, 0xcc15,		0x22, 0
+	.dw 0x6d91, 0xcc15,	0x6d91, 0xcc15,		0x21, 0
+	.dw 0x6d92, 0xcc15,	0x6d92, 0xcc15,		0x22, 0
+	.dw 0x6d93, 0xcc15,	0x6dbf, 0xcc15,		0x21, 0
+	.dw 0x6dc1, 0xcc15,	0x6dc1, 0xcc15,		0x21, 0
+	.dw 0x6dc3, 0xcc15,	0x6dcf, 0xcc15,		0x21, 0
+	.dw 0x6dd1, 0xcc15,	0x6dd1, 0xcc15,		0x21, 0
+	.dw 0x6dd3, 0xcc15,	0x6dff, 0xcc15,		0x21, 0
+	.dw 0x6e01, 0xcc15,	0x6e01, 0xcc15,		0x21, 0
+	.dw 0x6e03, 0xcc15,	0x6e0f, 0xcc15,		0x21, 0
+	.dw 0x6e11, 0xcc15,	0x6e11, 0xcc15,		0x21, 0
+	.dw 0x6e13, 0xcc15,	0x6e3f, 0xcc15,		0x21, 0
+	.dw 0x6e41, 0xcc15,	0x6e41, 0xcc15,		0x21, 0
+	.dw 0x6e43, 0xcc15,	0x6e4f, 0xcc15,		0x21, 0
+	.dw 0x6e51, 0xcc15,	0x6e51, 0xcc15,		0x21, 0
+	.dw 0x6e53, 0xcc15,	0x6e7f, 0xcc15,		0x21, 0
+	.dw 0x6e81, 0xcc15,	0x6e81, 0xcc15,		0x21, 0
+	.dw 0x6e83, 0xcc15,	0x6e8f, 0xcc15,		0x21, 0
+	.dw 0x6e91, 0xcc15,	0x6e91, 0xcc15,		0x21, 0
+	.dw 0x6e93, 0xcc15,	0x6ebf, 0xcc15,		0x21, 0
+	.dw 0x6ec1, 0xcc15,	0x6ec1, 0xcc15,		0x21, 0
+	.dw 0x6ec3, 0xcc15,	0x6ecf, 0xcc15,		0x21, 0
+	.dw 0x6ed1, 0xcc15,	0x6ed1, 0xcc15,		0x21, 0
+	.dw 0x6ed3, 0xcc15,	0x6eff, 0xcc15,		0x21, 0
+	.dw 0x6f01, 0xcc15,	0x6f01, 0xcc15,		0x21, 0
+	.dw 0x6f03, 0xcc15,	0x6f0f, 0xcc15,		0x21, 0
+	.dw 0x6f11, 0xcc15,	0x6f11, 0xcc15,		0x21, 0
+	.dw 0x6f13, 0xcc15,	0x6f3f, 0xcc15,		0x21, 0
+	.dw 0x6f41, 0xcc15,	0x6f41, 0xcc15,		0x21, 0
+	.dw 0x6f43, 0xcc15,	0x6f4f, 0xcc15,		0x21, 0
+	.dw 0x6f51, 0xcc15,	0x6f51, 0xcc15,		0x21, 0
+	.dw 0x6f53, 0xcc15,	0x6f7f, 0xcc15,		0x21, 0
+	.dw 0x6f81, 0xcc15,	0x6f81, 0xcc15,		0x21, 0
+	.dw 0x6f83, 0xcc15,	0x6f8f, 0xcc15,		0x21, 0
+	.dw 0x6f91, 0xcc15,	0x6f91, 0xcc15,		0x21, 0
+	.dw 0x6f93, 0xcc15,	0x6fbf, 0xcc15,		0x21, 0
+	.dw 0x6fc0, 0xcc15,	0x6fc0, 0xcc15,		0x22, 0
+	.dw 0x6fc1, 0xcc15,	0x6fc1, 0xcc15,		0x21, 0
+	.dw 0x6fc2, 0xcc15,	0x6fc2, 0xcc15,		0x22, 0
+	.dw 0x6fc3, 0xcc15,	0x6fcf, 0xcc15,		0x21, 0
+	.dw 0x6fd0, 0xcc15,	0x6fd0, 0xcc15,		0x22, 0
+	.dw 0x6fd1, 0xcc15,	0x6fd1, 0xcc15,		0x21, 0
+	.dw 0x6fd2, 0xcc15,	0x6fd2, 0xcc15,		0x22, 0
+	.dw 0x6fd3, 0xcc15,	0xffff, 0xcc15,		0x21, 0
+	.dw 0x0001, 0xcc16,	0x0001, 0xcc16,		0x21, 0
+	.dw 0x0003, 0xcc16,	0x000f, 0xcc16,		0x21, 0
+	.dw 0x0011, 0xcc16,	0x0011, 0xcc16,		0x21, 0
+	.dw 0x0013, 0xcc16,	0x003f, 0xcc16,		0x21, 0
+	.dw 0x0041, 0xcc16,	0x0041, 0xcc16,		0x21, 0
+	.dw 0x0043, 0xcc16,	0x004f, 0xcc16,		0x21, 0
+	.dw 0x0051, 0xcc16,	0x0051, 0xcc16,		0x21, 0
+	.dw 0x0053, 0xcc16,	0x007f, 0xcc16,		0x21, 0
+	.dw 0x0081, 0xcc16,	0x0081, 0xcc16,		0x21, 0
+	.dw 0x0083, 0xcc16,	0x008f, 0xcc16,		0x21, 0
+	.dw 0x0091, 0xcc16,	0x0091, 0xcc16,		0x21, 0
+	.dw 0x0093, 0xcc16,	0x00bf, 0xcc16,		0x21, 0
+	.dw 0x00c1, 0xcc16,	0x00c1, 0xcc16,		0x21, 0
+	.dw 0x00c3, 0xcc16,	0x00cf, 0xcc16,		0x21, 0
+	.dw 0x00d1, 0xcc16,	0x00d1, 0xcc16,		0x21, 0
+	.dw 0x00d3, 0xcc16,	0x00ff, 0xcc16,		0x21, 0
+	.dw 0x0101, 0xcc16,	0x0101, 0xcc16,		0x21, 0
+	.dw 0x0103, 0xcc16,	0x010f, 0xcc16,		0x21, 0
+	.dw 0x0111, 0xcc16,	0x0111, 0xcc16,		0x21, 0
+	.dw 0x0113, 0xcc16,	0x013f, 0xcc16,		0x21, 0
+	.dw 0x0141, 0xcc16,	0x0141, 0xcc16,		0x21, 0
+	.dw 0x0143, 0xcc16,	0x014f, 0xcc16,		0x21, 0
+	.dw 0x0151, 0xcc16,	0x0151, 0xcc16,		0x21, 0
+	.dw 0x0153, 0xcc16,	0x017f, 0xcc16,		0x21, 0
+	.dw 0x0181, 0xcc16,	0x0181, 0xcc16,		0x21, 0
+	.dw 0x0183, 0xcc16,	0x018f, 0xcc16,		0x21, 0
+	.dw 0x0191, 0xcc16,	0x0191, 0xcc16,		0x21, 0
+	.dw 0x0193, 0xcc16,	0x01bf, 0xcc16,		0x21, 0
+	.dw 0x01c1, 0xcc16,	0x01c1, 0xcc16,		0x21, 0
+	.dw 0x01c3, 0xcc16,	0x01cf, 0xcc16,		0x21, 0
+	.dw 0x01d1, 0xcc16,	0x01d1, 0xcc16,		0x21, 0
+	.dw 0x01d3, 0xcc16,	0x01ff, 0xcc16,		0x21, 0
+	.dw 0x0201, 0xcc16,	0x0201, 0xcc16,		0x21, 0
+	.dw 0x0203, 0xcc16,	0x020f, 0xcc16,		0x21, 0
+	.dw 0x0211, 0xcc16,	0x0211, 0xcc16,		0x21, 0
+	.dw 0x0213, 0xcc16,	0x023f, 0xcc16,		0x21, 0
+	.dw 0x0241, 0xcc16,	0x0241, 0xcc16,		0x21, 0
+	.dw 0x0243, 0xcc16,	0x024f, 0xcc16,		0x21, 0
+	.dw 0x0251, 0xcc16,	0x0251, 0xcc16,		0x21, 0
+	.dw 0x0253, 0xcc16,	0x027f, 0xcc16,		0x21, 0
+	.dw 0x0281, 0xcc16,	0x0281, 0xcc16,		0x21, 0
+	.dw 0x0283, 0xcc16,	0x028f, 0xcc16,		0x21, 0
+	.dw 0x0291, 0xcc16,	0x0291, 0xcc16,		0x21, 0
+	.dw 0x0293, 0xcc16,	0x02bf, 0xcc16,		0x21, 0
+	.dw 0x02c1, 0xcc16,	0x02c1, 0xcc16,		0x21, 0
+	.dw 0x02c3, 0xcc16,	0x02cf, 0xcc16,		0x21, 0
+	.dw 0x02d1, 0xcc16,	0x02d1, 0xcc16,		0x21, 0
+	.dw 0x02d3, 0xcc16,	0x02ff, 0xcc16,		0x21, 0
+	.dw 0x0301, 0xcc16,	0x0301, 0xcc16,		0x21, 0
+	.dw 0x0303, 0xcc16,	0x030f, 0xcc16,		0x21, 0
+	.dw 0x0311, 0xcc16,	0x0311, 0xcc16,		0x21, 0
+	.dw 0x0313, 0xcc16,	0x033f, 0xcc16,		0x21, 0
+	.dw 0x0341, 0xcc16,	0x0341, 0xcc16,		0x21, 0
+	.dw 0x0343, 0xcc16,	0x034f, 0xcc16,		0x21, 0
+	.dw 0x0351, 0xcc16,	0x0351, 0xcc16,		0x21, 0
+	.dw 0x0353, 0xcc16,	0x037f, 0xcc16,		0x21, 0
+	.dw 0x0381, 0xcc16,	0x0381, 0xcc16,		0x21, 0
+	.dw 0x0383, 0xcc16,	0x038f, 0xcc16,		0x21, 0
+	.dw 0x0391, 0xcc16,	0x0391, 0xcc16,		0x21, 0
+	.dw 0x0393, 0xcc16,	0x03bf, 0xcc16,		0x21, 0
+	.dw 0x03c1, 0xcc16,	0x03c1, 0xcc16,		0x21, 0
+	.dw 0x03c3, 0xcc16,	0x03cf, 0xcc16,		0x21, 0
+	.dw 0x03d1, 0xcc16,	0x03d1, 0xcc16,		0x21, 0
+	.dw 0x03d3, 0xcc16,	0x03ff, 0xcc16,		0x21, 0
+	.dw 0x0401, 0xcc16,	0x0401, 0xcc16,		0x21, 0
+	.dw 0x0403, 0xcc16,	0x040f, 0xcc16,		0x21, 0
+	.dw 0x0411, 0xcc16,	0x0411, 0xcc16,		0x21, 0
+	.dw 0x0413, 0xcc16,	0x043f, 0xcc16,		0x21, 0
+	.dw 0x0441, 0xcc16,	0x0441, 0xcc16,		0x21, 0
+	.dw 0x0443, 0xcc16,	0x044f, 0xcc16,		0x21, 0
+	.dw 0x0451, 0xcc16,	0x0451, 0xcc16,		0x21, 0
+	.dw 0x0453, 0xcc16,	0x047f, 0xcc16,		0x21, 0
+	.dw 0x0481, 0xcc16,	0x0481, 0xcc16,		0x21, 0
+	.dw 0x0483, 0xcc16,	0x048f, 0xcc16,		0x21, 0
+	.dw 0x0491, 0xcc16,	0x0491, 0xcc16,		0x21, 0
+	.dw 0x0493, 0xcc16,	0x04bf, 0xcc16,		0x21, 0
+	.dw 0x04c1, 0xcc16,	0x04c1, 0xcc16,		0x21, 0
+	.dw 0x04c3, 0xcc16,	0x04cf, 0xcc16,		0x21, 0
+	.dw 0x04d1, 0xcc16,	0x04d1, 0xcc16,		0x21, 0
+	.dw 0x04d3, 0xcc16,	0x04ff, 0xcc16,		0x21, 0
+	.dw 0x0501, 0xcc16,	0x0501, 0xcc16,		0x21, 0
+	.dw 0x0503, 0xcc16,	0x050f, 0xcc16,		0x21, 0
+	.dw 0x0511, 0xcc16,	0x0511, 0xcc16,		0x21, 0
+	.dw 0x0513, 0xcc16,	0x053f, 0xcc16,		0x21, 0
+	.dw 0x0541, 0xcc16,	0x0541, 0xcc16,		0x21, 0
+	.dw 0x0543, 0xcc16,	0x054f, 0xcc16,		0x21, 0
+	.dw 0x0551, 0xcc16,	0x0551, 0xcc16,		0x21, 0
+	.dw 0x0553, 0xcc16,	0x057f, 0xcc16,		0x21, 0
+	.dw 0x0581, 0xcc16,	0x0581, 0xcc16,		0x21, 0
+	.dw 0x0583, 0xcc16,	0x058f, 0xcc16,		0x21, 0
+	.dw 0x0591, 0xcc16,	0x0591, 0xcc16,		0x21, 0
+	.dw 0x0593, 0xcc16,	0x05bf, 0xcc16,		0x21, 0
+	.dw 0x05c1, 0xcc16,	0x05c1, 0xcc16,		0x21, 0
+	.dw 0x05c3, 0xcc16,	0x05cf, 0xcc16,		0x21, 0
+	.dw 0x05d1, 0xcc16,	0x05d1, 0xcc16,		0x21, 0
+	.dw 0x05d3, 0xcc16,	0x05ff, 0xcc16,		0x21, 0
+	.dw 0x0601, 0xcc16,	0x0601, 0xcc16,		0x21, 0
+	.dw 0x0603, 0xcc16,	0x060f, 0xcc16,		0x21, 0
+	.dw 0x0611, 0xcc16,	0x0611, 0xcc16,		0x21, 0
+	.dw 0x0613, 0xcc16,	0x063f, 0xcc16,		0x21, 0
+	.dw 0x0641, 0xcc16,	0x0641, 0xcc16,		0x21, 0
+	.dw 0x0643, 0xcc16,	0x064f, 0xcc16,		0x21, 0
+	.dw 0x0651, 0xcc16,	0x0651, 0xcc16,		0x21, 0
+	.dw 0x0653, 0xcc16,	0x067f, 0xcc16,		0x21, 0
+	.dw 0x0681, 0xcc16,	0x0681, 0xcc16,		0x21, 0
+	.dw 0x0683, 0xcc16,	0x068f, 0xcc16,		0x21, 0
+	.dw 0x0691, 0xcc16,	0x0691, 0xcc16,		0x21, 0
+	.dw 0x0693, 0xcc16,	0x06bf, 0xcc16,		0x21, 0
+	.dw 0x06c1, 0xcc16,	0x06c1, 0xcc16,		0x21, 0
+	.dw 0x06c3, 0xcc16,	0x06cf, 0xcc16,		0x21, 0
+	.dw 0x06d1, 0xcc16,	0x06d1, 0xcc16,		0x21, 0
+	.dw 0x06d3, 0xcc16,	0x06ff, 0xcc16,		0x21, 0
+	.dw 0x0701, 0xcc16,	0x0701, 0xcc16,		0x21, 0
+	.dw 0x0703, 0xcc16,	0x070f, 0xcc16,		0x21, 0
+	.dw 0x0711, 0xcc16,	0x0711, 0xcc16,		0x21, 0
+	.dw 0x0713, 0xcc16,	0x073f, 0xcc16,		0x21, 0
+	.dw 0x0741, 0xcc16,	0x0741, 0xcc16,		0x21, 0
+	.dw 0x0743, 0xcc16,	0x074f, 0xcc16,		0x21, 0
+	.dw 0x0751, 0xcc16,	0x0751, 0xcc16,		0x21, 0
+	.dw 0x0753, 0xcc16,	0x077f, 0xcc16,		0x21, 0
+	.dw 0x0781, 0xcc16,	0x0781, 0xcc16,		0x21, 0
+	.dw 0x0783, 0xcc16,	0x078f, 0xcc16,		0x21, 0
+	.dw 0x0791, 0xcc16,	0x0791, 0xcc16,		0x21, 0
+	.dw 0x0793, 0xcc16,	0x07bf, 0xcc16,		0x21, 0
+	.dw 0x07c1, 0xcc16,	0x07c1, 0xcc16,		0x21, 0
+	.dw 0x07c3, 0xcc16,	0x07cf, 0xcc16,		0x21, 0
+	.dw 0x07d1, 0xcc16,	0x07d1, 0xcc16,		0x21, 0
+	.dw 0x07d3, 0xcc16,	0x07ff, 0xcc16,		0x21, 0
+	.dw 0x0801, 0xcc16,	0x0801, 0xcc16,		0x21, 0
+	.dw 0x0803, 0xcc16,	0x080f, 0xcc16,		0x21, 0
+	.dw 0x0811, 0xcc16,	0x0811, 0xcc16,		0x21, 0
+	.dw 0x0813, 0xcc16,	0x083f, 0xcc16,		0x21, 0
+	.dw 0x0841, 0xcc16,	0x0841, 0xcc16,		0x21, 0
+	.dw 0x0843, 0xcc16,	0x084f, 0xcc16,		0x21, 0
+	.dw 0x0851, 0xcc16,	0x0851, 0xcc16,		0x21, 0
+	.dw 0x0853, 0xcc16,	0x087f, 0xcc16,		0x21, 0
+	.dw 0x0881, 0xcc16,	0x0881, 0xcc16,		0x21, 0
+	.dw 0x0883, 0xcc16,	0x088f, 0xcc16,		0x21, 0
+	.dw 0x0891, 0xcc16,	0x0891, 0xcc16,		0x21, 0
+	.dw 0x0893, 0xcc16,	0x08bf, 0xcc16,		0x21, 0
+	.dw 0x08c1, 0xcc16,	0x08c1, 0xcc16,		0x21, 0
+	.dw 0x08c3, 0xcc16,	0x08cf, 0xcc16,		0x21, 0
+	.dw 0x08d1, 0xcc16,	0x08d1, 0xcc16,		0x21, 0
+	.dw 0x08d3, 0xcc16,	0x08ff, 0xcc16,		0x21, 0
+	.dw 0x0901, 0xcc16,	0x0901, 0xcc16,		0x21, 0
+	.dw 0x0903, 0xcc16,	0x090f, 0xcc16,		0x21, 0
+	.dw 0x0911, 0xcc16,	0x0911, 0xcc16,		0x21, 0
+	.dw 0x0913, 0xcc16,	0x093f, 0xcc16,		0x21, 0
+	.dw 0x0941, 0xcc16,	0x0941, 0xcc16,		0x21, 0
+	.dw 0x0943, 0xcc16,	0x094f, 0xcc16,		0x21, 0
+	.dw 0x0951, 0xcc16,	0x0951, 0xcc16,		0x21, 0
+	.dw 0x0953, 0xcc16,	0x097f, 0xcc16,		0x21, 0
+	.dw 0x0981, 0xcc16,	0x0981, 0xcc16,		0x21, 0
+	.dw 0x0983, 0xcc16,	0x098f, 0xcc16,		0x21, 0
+	.dw 0x0991, 0xcc16,	0x0991, 0xcc16,		0x21, 0
+	.dw 0x0993, 0xcc16,	0x09bf, 0xcc16,		0x21, 0
+	.dw 0x09c1, 0xcc16,	0x09c1, 0xcc16,		0x21, 0
+	.dw 0x09c3, 0xcc16,	0x09cf, 0xcc16,		0x21, 0
+	.dw 0x09d1, 0xcc16,	0x09d1, 0xcc16,		0x21, 0
+	.dw 0x09d3, 0xcc16,	0x09ff, 0xcc16,		0x21, 0
+	.dw 0x0a01, 0xcc16,	0x0a01, 0xcc16,		0x21, 0
+	.dw 0x0a03, 0xcc16,	0x0a0f, 0xcc16,		0x21, 0
+	.dw 0x0a11, 0xcc16,	0x0a11, 0xcc16,		0x21, 0
+	.dw 0x0a13, 0xcc16,	0x0a3f, 0xcc16,		0x21, 0
+	.dw 0x0a41, 0xcc16,	0x0a41, 0xcc16,		0x21, 0
+	.dw 0x0a43, 0xcc16,	0x0a4f, 0xcc16,		0x21, 0
+	.dw 0x0a51, 0xcc16,	0x0a51, 0xcc16,		0x21, 0
+	.dw 0x0a53, 0xcc16,	0x0a7f, 0xcc16,		0x21, 0
+	.dw 0x0a81, 0xcc16,	0x0a81, 0xcc16,		0x21, 0
+	.dw 0x0a83, 0xcc16,	0x0a8f, 0xcc16,		0x21, 0
+	.dw 0x0a91, 0xcc16,	0x0a91, 0xcc16,		0x21, 0
+	.dw 0x0a93, 0xcc16,	0x0abf, 0xcc16,		0x21, 0
+	.dw 0x0ac1, 0xcc16,	0x0ac1, 0xcc16,		0x21, 0
+	.dw 0x0ac3, 0xcc16,	0x0acf, 0xcc16,		0x21, 0
+	.dw 0x0ad1, 0xcc16,	0x0ad1, 0xcc16,		0x21, 0
+	.dw 0x0ad3, 0xcc16,	0x0aff, 0xcc16,		0x21, 0
+	.dw 0x0b01, 0xcc16,	0x0b01, 0xcc16,		0x21, 0
+	.dw 0x0b03, 0xcc16,	0x0b0f, 0xcc16,		0x21, 0
+	.dw 0x0b11, 0xcc16,	0x0b11, 0xcc16,		0x21, 0
+	.dw 0x0b13, 0xcc16,	0x0b3f, 0xcc16,		0x21, 0
+	.dw 0x0b41, 0xcc16,	0x0b41, 0xcc16,		0x21, 0
+	.dw 0x0b43, 0xcc16,	0x0b4f, 0xcc16,		0x21, 0
+	.dw 0x0b51, 0xcc16,	0x0b51, 0xcc16,		0x21, 0
+	.dw 0x0b53, 0xcc16,	0x0b7f, 0xcc16,		0x21, 0
+	.dw 0x0b81, 0xcc16,	0x0b81, 0xcc16,		0x21, 0
+	.dw 0x0b83, 0xcc16,	0x0b8f, 0xcc16,		0x21, 0
+	.dw 0x0b91, 0xcc16,	0x0b91, 0xcc16,		0x21, 0
+	.dw 0x0b93, 0xcc16,	0x0bbf, 0xcc16,		0x21, 0
+	.dw 0x0bc1, 0xcc16,	0x0bc1, 0xcc16,		0x21, 0
+	.dw 0x0bc3, 0xcc16,	0x0bcf, 0xcc16,		0x21, 0
+	.dw 0x0bd1, 0xcc16,	0x0bd1, 0xcc16,		0x21, 0
+	.dw 0x0bd3, 0xcc16,	0x0bff, 0xcc16,		0x21, 0
+	.dw 0x0c01, 0xcc16,	0x0c01, 0xcc16,		0x21, 0
+	.dw 0x0c03, 0xcc16,	0x0c0f, 0xcc16,		0x21, 0
+	.dw 0x0c11, 0xcc16,	0x0c11, 0xcc16,		0x21, 0
+	.dw 0x0c13, 0xcc16,	0x0c3f, 0xcc16,		0x21, 0
+	.dw 0x0c41, 0xcc16,	0x0c41, 0xcc16,		0x21, 0
+	.dw 0x0c43, 0xcc16,	0x0c4f, 0xcc16,		0x21, 0
+	.dw 0x0c51, 0xcc16,	0x0c51, 0xcc16,		0x21, 0
+	.dw 0x0c53, 0xcc16,	0x0c7f, 0xcc16,		0x21, 0
+	.dw 0x0c81, 0xcc16,	0x0c81, 0xcc16,		0x21, 0
+	.dw 0x0c83, 0xcc16,	0x0c8f, 0xcc16,		0x21, 0
+	.dw 0x0c91, 0xcc16,	0x0c91, 0xcc16,		0x21, 0
+	.dw 0x0c93, 0xcc16,	0x0cbf, 0xcc16,		0x21, 0
+	.dw 0x0cc1, 0xcc16,	0x0cc1, 0xcc16,		0x21, 0
+	.dw 0x0cc3, 0xcc16,	0x0ccf, 0xcc16,		0x21, 0
+	.dw 0x0cd1, 0xcc16,	0x0cd1, 0xcc16,		0x21, 0
+	.dw 0x0cd3, 0xcc16,	0x0cff, 0xcc16,		0x21, 0
+	.dw 0x0d01, 0xcc16,	0x0d01, 0xcc16,		0x21, 0
+	.dw 0x0d03, 0xcc16,	0x0d0f, 0xcc16,		0x21, 0
+	.dw 0x0d11, 0xcc16,	0x0d11, 0xcc16,		0x21, 0
+	.dw 0x0d13, 0xcc16,	0x0d3f, 0xcc16,		0x21, 0
+	.dw 0x0d41, 0xcc16,	0x0d41, 0xcc16,		0x21, 0
+	.dw 0x0d43, 0xcc16,	0x0d4f, 0xcc16,		0x21, 0
+	.dw 0x0d51, 0xcc16,	0x0d51, 0xcc16,		0x21, 0
+	.dw 0x0d53, 0xcc16,	0x0d7f, 0xcc16,		0x21, 0
+	.dw 0x0d81, 0xcc16,	0x0d81, 0xcc16,		0x21, 0
+	.dw 0x0d83, 0xcc16,	0x0d8f, 0xcc16,		0x21, 0
+	.dw 0x0d91, 0xcc16,	0x0d91, 0xcc16,		0x21, 0
+	.dw 0x0d93, 0xcc16,	0x0dbf, 0xcc16,		0x21, 0
+	.dw 0x0dc1, 0xcc16,	0x0dc1, 0xcc16,		0x21, 0
+	.dw 0x0dc3, 0xcc16,	0x0dcf, 0xcc16,		0x21, 0
+	.dw 0x0dd1, 0xcc16,	0x0dd1, 0xcc16,		0x21, 0
+	.dw 0x0dd3, 0xcc16,	0x0dff, 0xcc16,		0x21, 0
+	.dw 0x0e01, 0xcc16,	0x0e01, 0xcc16,		0x21, 0
+	.dw 0x0e03, 0xcc16,	0x0e0f, 0xcc16,		0x21, 0
+	.dw 0x0e11, 0xcc16,	0x0e11, 0xcc16,		0x21, 0
+	.dw 0x0e13, 0xcc16,	0x0e3f, 0xcc16,		0x21, 0
+	.dw 0x0e41, 0xcc16,	0x0e41, 0xcc16,		0x21, 0
+	.dw 0x0e43, 0xcc16,	0x0e4f, 0xcc16,		0x21, 0
+	.dw 0x0e51, 0xcc16,	0x0e51, 0xcc16,		0x21, 0
+	.dw 0x0e53, 0xcc16,	0x0e7f, 0xcc16,		0x21, 0
+	.dw 0x0e81, 0xcc16,	0x0e81, 0xcc16,		0x21, 0
+	.dw 0x0e83, 0xcc16,	0x0e8f, 0xcc16,		0x21, 0
+	.dw 0x0e91, 0xcc16,	0x0e91, 0xcc16,		0x21, 0
+	.dw 0x0e93, 0xcc16,	0x0ebf, 0xcc16,		0x21, 0
+	.dw 0x0ec1, 0xcc16,	0x0ec1, 0xcc16,		0x21, 0
+	.dw 0x0ec3, 0xcc16,	0x0ecf, 0xcc16,		0x21, 0
+	.dw 0x0ed1, 0xcc16,	0x0ed1, 0xcc16,		0x21, 0
+	.dw 0x0ed3, 0xcc16,	0x0eff, 0xcc16,		0x21, 0
+	.dw 0x0f01, 0xcc16,	0x0f01, 0xcc16,		0x21, 0
+	.dw 0x0f03, 0xcc16,	0x0f0f, 0xcc16,		0x21, 0
+	.dw 0x0f11, 0xcc16,	0x0f11, 0xcc16,		0x21, 0
+	.dw 0x0f13, 0xcc16,	0x0f3f, 0xcc16,		0x21, 0
+	.dw 0x0f41, 0xcc16,	0x0f41, 0xcc16,		0x21, 0
+	.dw 0x0f43, 0xcc16,	0x0f4f, 0xcc16,		0x21, 0
+	.dw 0x0f51, 0xcc16,	0x0f51, 0xcc16,		0x21, 0
+	.dw 0x0f53, 0xcc16,	0x0f7f, 0xcc16,		0x21, 0
+	.dw 0x0f81, 0xcc16,	0x0f81, 0xcc16,		0x21, 0
+	.dw 0x0f83, 0xcc16,	0x0f8f, 0xcc16,		0x21, 0
+	.dw 0x0f91, 0xcc16,	0x0f91, 0xcc16,		0x21, 0
+	.dw 0x0f93, 0xcc16,	0x0fbf, 0xcc16,		0x21, 0
+	.dw 0x0fc1, 0xcc16,	0x0fc1, 0xcc16,		0x21, 0
+	.dw 0x0fc3, 0xcc16,	0x0fcf, 0xcc16,		0x21, 0
+	.dw 0x0fd1, 0xcc16,	0x0fd1, 0xcc16,		0x21, 0
+	.dw 0x0fd3, 0xcc16,	0x1fff, 0xcc16,		0x21, 0
+	.dw 0x2001, 0xcc16,	0x2001, 0xcc16,		0x21, 0
+	.dw 0x2003, 0xcc16,	0x200f, 0xcc16,		0x21, 0
+	.dw 0x2011, 0xcc16,	0x2011, 0xcc16,		0x21, 0
+	.dw 0x2013, 0xcc16,	0x203f, 0xcc16,		0x21, 0
+	.dw 0x2041, 0xcc16,	0x2041, 0xcc16,		0x21, 0
+	.dw 0x2043, 0xcc16,	0x204f, 0xcc16,		0x21, 0
+	.dw 0x2051, 0xcc16,	0x2051, 0xcc16,		0x21, 0
+	.dw 0x2053, 0xcc16,	0x207f, 0xcc16,		0x21, 0
+	.dw 0x2081, 0xcc16,	0x2081, 0xcc16,		0x21, 0
+	.dw 0x2083, 0xcc16,	0x208f, 0xcc16,		0x21, 0
+	.dw 0x2091, 0xcc16,	0x2091, 0xcc16,		0x21, 0
+	.dw 0x2093, 0xcc16,	0x20bf, 0xcc16,		0x21, 0
+	.dw 0x20c1, 0xcc16,	0x20c1, 0xcc16,		0x21, 0
+	.dw 0x20c3, 0xcc16,	0x20cf, 0xcc16,		0x21, 0
+	.dw 0x20d1, 0xcc16,	0x20d1, 0xcc16,		0x21, 0
+	.dw 0x20d3, 0xcc16,	0x20ff, 0xcc16,		0x21, 0
+	.dw 0x2101, 0xcc16,	0x2101, 0xcc16,		0x21, 0
+	.dw 0x2103, 0xcc16,	0x210f, 0xcc16,		0x21, 0
+	.dw 0x2111, 0xcc16,	0x2111, 0xcc16,		0x21, 0
+	.dw 0x2113, 0xcc16,	0x213f, 0xcc16,		0x21, 0
+	.dw 0x2141, 0xcc16,	0x2141, 0xcc16,		0x21, 0
+	.dw 0x2143, 0xcc16,	0x214f, 0xcc16,		0x21, 0
+	.dw 0x2151, 0xcc16,	0x2151, 0xcc16,		0x21, 0
+	.dw 0x2153, 0xcc16,	0x217f, 0xcc16,		0x21, 0
+	.dw 0x2181, 0xcc16,	0x2181, 0xcc16,		0x21, 0
+	.dw 0x2183, 0xcc16,	0x218f, 0xcc16,		0x21, 0
+	.dw 0x2191, 0xcc16,	0x2191, 0xcc16,		0x21, 0
+	.dw 0x2193, 0xcc16,	0x21bf, 0xcc16,		0x21, 0
+	.dw 0x21c1, 0xcc16,	0x21c1, 0xcc16,		0x21, 0
+	.dw 0x21c3, 0xcc16,	0x21cf, 0xcc16,		0x21, 0
+	.dw 0x21d1, 0xcc16,	0x21d1, 0xcc16,		0x21, 0
+	.dw 0x21d3, 0xcc16,	0x21ff, 0xcc16,		0x21, 0
+	.dw 0x2201, 0xcc16,	0x2201, 0xcc16,		0x21, 0
+	.dw 0x2203, 0xcc16,	0x220f, 0xcc16,		0x21, 0
+	.dw 0x2211, 0xcc16,	0x2211, 0xcc16,		0x21, 0
+	.dw 0x2213, 0xcc16,	0x223f, 0xcc16,		0x21, 0
+	.dw 0x2241, 0xcc16,	0x2241, 0xcc16,		0x21, 0
+	.dw 0x2243, 0xcc16,	0x224f, 0xcc16,		0x21, 0
+	.dw 0x2251, 0xcc16,	0x2251, 0xcc16,		0x21, 0
+	.dw 0x2253, 0xcc16,	0x227f, 0xcc16,		0x21, 0
+	.dw 0x2281, 0xcc16,	0x2281, 0xcc16,		0x21, 0
+	.dw 0x2283, 0xcc16,	0x228f, 0xcc16,		0x21, 0
+	.dw 0x2291, 0xcc16,	0x2291, 0xcc16,		0x21, 0
+	.dw 0x2293, 0xcc16,	0x22bf, 0xcc16,		0x21, 0
+	.dw 0x22c1, 0xcc16,	0x22c1, 0xcc16,		0x21, 0
+	.dw 0x22c3, 0xcc16,	0x22cf, 0xcc16,		0x21, 0
+	.dw 0x22d1, 0xcc16,	0x22d1, 0xcc16,		0x21, 0
+	.dw 0x22d3, 0xcc16,	0x22ff, 0xcc16,		0x21, 0
+	.dw 0x2301, 0xcc16,	0x2301, 0xcc16,		0x21, 0
+	.dw 0x2303, 0xcc16,	0x230f, 0xcc16,		0x21, 0
+	.dw 0x2311, 0xcc16,	0x2311, 0xcc16,		0x21, 0
+	.dw 0x2313, 0xcc16,	0x233f, 0xcc16,		0x21, 0
+	.dw 0x2341, 0xcc16,	0x2341, 0xcc16,		0x21, 0
+	.dw 0x2343, 0xcc16,	0x234f, 0xcc16,		0x21, 0
+	.dw 0x2351, 0xcc16,	0x2351, 0xcc16,		0x21, 0
+	.dw 0x2353, 0xcc16,	0x237f, 0xcc16,		0x21, 0
+	.dw 0x2381, 0xcc16,	0x2381, 0xcc16,		0x21, 0
+	.dw 0x2383, 0xcc16,	0x238f, 0xcc16,		0x21, 0
+	.dw 0x2391, 0xcc16,	0x2391, 0xcc16,		0x21, 0
+	.dw 0x2393, 0xcc16,	0x23bf, 0xcc16,		0x21, 0
+	.dw 0x23c1, 0xcc16,	0x23c1, 0xcc16,		0x21, 0
+	.dw 0x23c3, 0xcc16,	0x23cf, 0xcc16,		0x21, 0
+	.dw 0x23d1, 0xcc16,	0x23d1, 0xcc16,		0x21, 0
+	.dw 0x23d3, 0xcc16,	0x23ff, 0xcc16,		0x21, 0
+	.dw 0x2401, 0xcc16,	0x2401, 0xcc16,		0x21, 0
+	.dw 0x2403, 0xcc16,	0x240f, 0xcc16,		0x21, 0
+	.dw 0x2411, 0xcc16,	0x2411, 0xcc16,		0x21, 0
+	.dw 0x2413, 0xcc16,	0x243f, 0xcc16,		0x21, 0
+	.dw 0x2441, 0xcc16,	0x2441, 0xcc16,		0x21, 0
+	.dw 0x2443, 0xcc16,	0x244f, 0xcc16,		0x21, 0
+	.dw 0x2451, 0xcc16,	0x2451, 0xcc16,		0x21, 0
+	.dw 0x2453, 0xcc16,	0x247f, 0xcc16,		0x21, 0
+	.dw 0x2481, 0xcc16,	0x2481, 0xcc16,		0x21, 0
+	.dw 0x2483, 0xcc16,	0x248f, 0xcc16,		0x21, 0
+	.dw 0x2491, 0xcc16,	0x2491, 0xcc16,		0x21, 0
+	.dw 0x2493, 0xcc16,	0x24bf, 0xcc16,		0x21, 0
+	.dw 0x24c1, 0xcc16,	0x24c1, 0xcc16,		0x21, 0
+	.dw 0x24c3, 0xcc16,	0x24cf, 0xcc16,		0x21, 0
+	.dw 0x24d1, 0xcc16,	0x24d1, 0xcc16,		0x21, 0
+	.dw 0x24d3, 0xcc16,	0x24ff, 0xcc16,		0x21, 0
+	.dw 0x2501, 0xcc16,	0x2501, 0xcc16,		0x21, 0
+	.dw 0x2503, 0xcc16,	0x250f, 0xcc16,		0x21, 0
+	.dw 0x2511, 0xcc16,	0x2511, 0xcc16,		0x21, 0
+	.dw 0x2513, 0xcc16,	0x253f, 0xcc16,		0x21, 0
+	.dw 0x2541, 0xcc16,	0x2541, 0xcc16,		0x21, 0
+	.dw 0x2543, 0xcc16,	0x254f, 0xcc16,		0x21, 0
+	.dw 0x2551, 0xcc16,	0x2551, 0xcc16,		0x21, 0
+	.dw 0x2553, 0xcc16,	0x257f, 0xcc16,		0x21, 0
+	.dw 0x2581, 0xcc16,	0x2581, 0xcc16,		0x21, 0
+	.dw 0x2583, 0xcc16,	0x258f, 0xcc16,		0x21, 0
+	.dw 0x2591, 0xcc16,	0x2591, 0xcc16,		0x21, 0
+	.dw 0x2593, 0xcc16,	0x25bf, 0xcc16,		0x21, 0
+	.dw 0x25c1, 0xcc16,	0x25c1, 0xcc16,		0x21, 0
+	.dw 0x25c3, 0xcc16,	0x25cf, 0xcc16,		0x21, 0
+	.dw 0x25d1, 0xcc16,	0x25d1, 0xcc16,		0x21, 0
+	.dw 0x25d3, 0xcc16,	0x25ff, 0xcc16,		0x21, 0
+	.dw 0x2601, 0xcc16,	0x2601, 0xcc16,		0x21, 0
+	.dw 0x2603, 0xcc16,	0x260f, 0xcc16,		0x21, 0
+	.dw 0x2611, 0xcc16,	0x2611, 0xcc16,		0x21, 0
+	.dw 0x2613, 0xcc16,	0x263f, 0xcc16,		0x21, 0
+	.dw 0x2641, 0xcc16,	0x2641, 0xcc16,		0x21, 0
+	.dw 0x2643, 0xcc16,	0x264f, 0xcc16,		0x21, 0
+	.dw 0x2651, 0xcc16,	0x2651, 0xcc16,		0x21, 0
+	.dw 0x2653, 0xcc16,	0x267f, 0xcc16,		0x21, 0
+	.dw 0x2681, 0xcc16,	0x2681, 0xcc16,		0x21, 0
+	.dw 0x2683, 0xcc16,	0x268f, 0xcc16,		0x21, 0
+	.dw 0x2691, 0xcc16,	0x2691, 0xcc16,		0x21, 0
+	.dw 0x2693, 0xcc16,	0x26bf, 0xcc16,		0x21, 0
+	.dw 0x26c1, 0xcc16,	0x26c1, 0xcc16,		0x21, 0
+	.dw 0x26c3, 0xcc16,	0x26cf, 0xcc16,		0x21, 0
+	.dw 0x26d1, 0xcc16,	0x26d1, 0xcc16,		0x21, 0
+	.dw 0x26d3, 0xcc16,	0x26ff, 0xcc16,		0x21, 0
+	.dw 0x2701, 0xcc16,	0x2701, 0xcc16,		0x21, 0
+	.dw 0x2703, 0xcc16,	0x270f, 0xcc16,		0x21, 0
+	.dw 0x2711, 0xcc16,	0x2711, 0xcc16,		0x21, 0
+	.dw 0x2713, 0xcc16,	0x273f, 0xcc16,		0x21, 0
+	.dw 0x2741, 0xcc16,	0x2741, 0xcc16,		0x21, 0
+	.dw 0x2743, 0xcc16,	0x274f, 0xcc16,		0x21, 0
+	.dw 0x2751, 0xcc16,	0x2751, 0xcc16,		0x21, 0
+	.dw 0x2753, 0xcc16,	0x277f, 0xcc16,		0x21, 0
+	.dw 0x2781, 0xcc16,	0x2781, 0xcc16,		0x21, 0
+	.dw 0x2783, 0xcc16,	0x278f, 0xcc16,		0x21, 0
+	.dw 0x2791, 0xcc16,	0x2791, 0xcc16,		0x21, 0
+	.dw 0x2793, 0xcc16,	0x27bf, 0xcc16,		0x21, 0
+	.dw 0x27c1, 0xcc16,	0x27c1, 0xcc16,		0x21, 0
+	.dw 0x27c3, 0xcc16,	0x27cf, 0xcc16,		0x21, 0
+	.dw 0x27d1, 0xcc16,	0x27d1, 0xcc16,		0x21, 0
+	.dw 0x27d3, 0xcc16,	0x27ff, 0xcc16,		0x21, 0
+	.dw 0x2801, 0xcc16,	0x2801, 0xcc16,		0x21, 0
+	.dw 0x2803, 0xcc16,	0x280f, 0xcc16,		0x21, 0
+	.dw 0x2811, 0xcc16,	0x2811, 0xcc16,		0x21, 0
+	.dw 0x2813, 0xcc16,	0x283f, 0xcc16,		0x21, 0
+	.dw 0x2841, 0xcc16,	0x2841, 0xcc16,		0x21, 0
+	.dw 0x2843, 0xcc16,	0x284f, 0xcc16,		0x21, 0
+	.dw 0x2851, 0xcc16,	0x2851, 0xcc16,		0x21, 0
+	.dw 0x2853, 0xcc16,	0x287f, 0xcc16,		0x21, 0
+	.dw 0x2881, 0xcc16,	0x2881, 0xcc16,		0x21, 0
+	.dw 0x2883, 0xcc16,	0x288f, 0xcc16,		0x21, 0
+	.dw 0x2891, 0xcc16,	0x2891, 0xcc16,		0x21, 0
+	.dw 0x2893, 0xcc16,	0x28bf, 0xcc16,		0x21, 0
+	.dw 0x28c1, 0xcc16,	0x28c1, 0xcc16,		0x21, 0
+	.dw 0x28c3, 0xcc16,	0x28cf, 0xcc16,		0x21, 0
+	.dw 0x28d1, 0xcc16,	0x28d1, 0xcc16,		0x21, 0
+	.dw 0x28d3, 0xcc16,	0x28ff, 0xcc16,		0x21, 0
+	.dw 0x2901, 0xcc16,	0x2901, 0xcc16,		0x21, 0
+	.dw 0x2903, 0xcc16,	0x290f, 0xcc16,		0x21, 0
+	.dw 0x2911, 0xcc16,	0x2911, 0xcc16,		0x21, 0
+	.dw 0x2913, 0xcc16,	0x293f, 0xcc16,		0x21, 0
+	.dw 0x2941, 0xcc16,	0x2941, 0xcc16,		0x21, 0
+	.dw 0x2943, 0xcc16,	0x294f, 0xcc16,		0x21, 0
+	.dw 0x2951, 0xcc16,	0x2951, 0xcc16,		0x21, 0
+	.dw 0x2953, 0xcc16,	0x297f, 0xcc16,		0x21, 0
+	.dw 0x2981, 0xcc16,	0x2981, 0xcc16,		0x21, 0
+	.dw 0x2983, 0xcc16,	0x298f, 0xcc16,		0x21, 0
+	.dw 0x2991, 0xcc16,	0x2991, 0xcc16,		0x21, 0
+	.dw 0x2993, 0xcc16,	0x29bf, 0xcc16,		0x21, 0
+	.dw 0x29c1, 0xcc16,	0x29c1, 0xcc16,		0x21, 0
+	.dw 0x29c3, 0xcc16,	0x29cf, 0xcc16,		0x21, 0
+	.dw 0x29d1, 0xcc16,	0x29d1, 0xcc16,		0x21, 0
+	.dw 0x29d3, 0xcc16,	0x29ff, 0xcc16,		0x21, 0
+	.dw 0x2a01, 0xcc16,	0x2a01, 0xcc16,		0x21, 0
+	.dw 0x2a03, 0xcc16,	0x2a0f, 0xcc16,		0x21, 0
+	.dw 0x2a11, 0xcc16,	0x2a11, 0xcc16,		0x21, 0
+	.dw 0x2a13, 0xcc16,	0x2a3f, 0xcc16,		0x21, 0
+	.dw 0x2a41, 0xcc16,	0x2a41, 0xcc16,		0x21, 0
+	.dw 0x2a43, 0xcc16,	0x2a4f, 0xcc16,		0x21, 0
+	.dw 0x2a51, 0xcc16,	0x2a51, 0xcc16,		0x21, 0
+	.dw 0x2a53, 0xcc16,	0x2a7f, 0xcc16,		0x21, 0
+	.dw 0x2a81, 0xcc16,	0x2a81, 0xcc16,		0x21, 0
+	.dw 0x2a83, 0xcc16,	0x2a8f, 0xcc16,		0x21, 0
+	.dw 0x2a91, 0xcc16,	0x2a91, 0xcc16,		0x21, 0
+	.dw 0x2a93, 0xcc16,	0x2abf, 0xcc16,		0x21, 0
+	.dw 0x2ac1, 0xcc16,	0x2ac1, 0xcc16,		0x21, 0
+	.dw 0x2ac3, 0xcc16,	0x2acf, 0xcc16,		0x21, 0
+	.dw 0x2ad1, 0xcc16,	0x2ad1, 0xcc16,		0x21, 0
+	.dw 0x2ad3, 0xcc16,	0x2aff, 0xcc16,		0x21, 0
+	.dw 0x2b01, 0xcc16,	0x2b01, 0xcc16,		0x21, 0
+	.dw 0x2b03, 0xcc16,	0x2b0f, 0xcc16,		0x21, 0
+	.dw 0x2b11, 0xcc16,	0x2b11, 0xcc16,		0x21, 0
+	.dw 0x2b13, 0xcc16,	0x2b3f, 0xcc16,		0x21, 0
+	.dw 0x2b41, 0xcc16,	0x2b41, 0xcc16,		0x21, 0
+	.dw 0x2b43, 0xcc16,	0x2b4f, 0xcc16,		0x21, 0
+	.dw 0x2b51, 0xcc16,	0x2b51, 0xcc16,		0x21, 0
+	.dw 0x2b53, 0xcc16,	0x2b7f, 0xcc16,		0x21, 0
+	.dw 0x2b81, 0xcc16,	0x2b81, 0xcc16,		0x21, 0
+	.dw 0x2b83, 0xcc16,	0x2b8f, 0xcc16,		0x21, 0
+	.dw 0x2b91, 0xcc16,	0x2b91, 0xcc16,		0x21, 0
+	.dw 0x2b93, 0xcc16,	0x2bbf, 0xcc16,		0x21, 0
+	.dw 0x2bc1, 0xcc16,	0x2bc1, 0xcc16,		0x21, 0
+	.dw 0x2bc3, 0xcc16,	0x2bcf, 0xcc16,		0x21, 0
+	.dw 0x2bd1, 0xcc16,	0x2bd1, 0xcc16,		0x21, 0
+	.dw 0x2bd3, 0xcc16,	0x2bff, 0xcc16,		0x21, 0
+	.dw 0x2c01, 0xcc16,	0x2c01, 0xcc16,		0x21, 0
+	.dw 0x2c03, 0xcc16,	0x2c0f, 0xcc16,		0x21, 0
+	.dw 0x2c11, 0xcc16,	0x2c11, 0xcc16,		0x21, 0
+	.dw 0x2c13, 0xcc16,	0x2c3f, 0xcc16,		0x21, 0
+	.dw 0x2c41, 0xcc16,	0x2c41, 0xcc16,		0x21, 0
+	.dw 0x2c43, 0xcc16,	0x2c4f, 0xcc16,		0x21, 0
+	.dw 0x2c51, 0xcc16,	0x2c51, 0xcc16,		0x21, 0
+	.dw 0x2c53, 0xcc16,	0x2c7f, 0xcc16,		0x21, 0
+	.dw 0x2c81, 0xcc16,	0x2c81, 0xcc16,		0x21, 0
+	.dw 0x2c83, 0xcc16,	0x2c8f, 0xcc16,		0x21, 0
+	.dw 0x2c91, 0xcc16,	0x2c91, 0xcc16,		0x21, 0
+	.dw 0x2c93, 0xcc16,	0x2cbf, 0xcc16,		0x21, 0
+	.dw 0x2cc1, 0xcc16,	0x2cc1, 0xcc16,		0x21, 0
+	.dw 0x2cc3, 0xcc16,	0x2ccf, 0xcc16,		0x21, 0
+	.dw 0x2cd1, 0xcc16,	0x2cd1, 0xcc16,		0x21, 0
+	.dw 0x2cd3, 0xcc16,	0x2cff, 0xcc16,		0x21, 0
+	.dw 0x2d01, 0xcc16,	0x2d01, 0xcc16,		0x21, 0
+	.dw 0x2d03, 0xcc16,	0x2d0f, 0xcc16,		0x21, 0
+	.dw 0x2d11, 0xcc16,	0x2d11, 0xcc16,		0x21, 0
+	.dw 0x2d13, 0xcc16,	0x2d3f, 0xcc16,		0x21, 0
+	.dw 0x2d41, 0xcc16,	0x2d41, 0xcc16,		0x21, 0
+	.dw 0x2d43, 0xcc16,	0x2d4f, 0xcc16,		0x21, 0
+	.dw 0x2d51, 0xcc16,	0x2d51, 0xcc16,		0x21, 0
+	.dw 0x2d53, 0xcc16,	0x2d7f, 0xcc16,		0x21, 0
+	.dw 0x2d81, 0xcc16,	0x2d81, 0xcc16,		0x21, 0
+	.dw 0x2d83, 0xcc16,	0x2d8f, 0xcc16,		0x21, 0
+	.dw 0x2d91, 0xcc16,	0x2d91, 0xcc16,		0x21, 0
+	.dw 0x2d93, 0xcc16,	0x2dbf, 0xcc16,		0x21, 0
+	.dw 0x2dc1, 0xcc16,	0x2dc1, 0xcc16,		0x21, 0
+	.dw 0x2dc3, 0xcc16,	0x2dcf, 0xcc16,		0x21, 0
+	.dw 0x2dd1, 0xcc16,	0x2dd1, 0xcc16,		0x21, 0
+	.dw 0x2dd3, 0xcc16,	0x2dff, 0xcc16,		0x21, 0
+	.dw 0x2e01, 0xcc16,	0x2e01, 0xcc16,		0x21, 0
+	.dw 0x2e03, 0xcc16,	0x2e0f, 0xcc16,		0x21, 0
+	.dw 0x2e11, 0xcc16,	0x2e11, 0xcc16,		0x21, 0
+	.dw 0x2e13, 0xcc16,	0x2e3f, 0xcc16,		0x21, 0
+	.dw 0x2e41, 0xcc16,	0x2e41, 0xcc16,		0x21, 0
+	.dw 0x2e43, 0xcc16,	0x2e4f, 0xcc16,		0x21, 0
+	.dw 0x2e51, 0xcc16,	0x2e51, 0xcc16,		0x21, 0
+	.dw 0x2e53, 0xcc16,	0x2e7f, 0xcc16,		0x21, 0
+	.dw 0x2e81, 0xcc16,	0x2e81, 0xcc16,		0x21, 0
+	.dw 0x2e83, 0xcc16,	0x2e8f, 0xcc16,		0x21, 0
+	.dw 0x2e91, 0xcc16,	0x2e91, 0xcc16,		0x21, 0
+	.dw 0x2e93, 0xcc16,	0x2ebf, 0xcc16,		0x21, 0
+	.dw 0x2ec1, 0xcc16,	0x2ec1, 0xcc16,		0x21, 0
+	.dw 0x2ec3, 0xcc16,	0x2ecf, 0xcc16,		0x21, 0
+	.dw 0x2ed1, 0xcc16,	0x2ed1, 0xcc16,		0x21, 0
+	.dw 0x2ed3, 0xcc16,	0x2eff, 0xcc16,		0x21, 0
+	.dw 0x2f01, 0xcc16,	0x2f01, 0xcc16,		0x21, 0
+	.dw 0x2f03, 0xcc16,	0x2f0f, 0xcc16,		0x21, 0
+	.dw 0x2f11, 0xcc16,	0x2f11, 0xcc16,		0x21, 0
+	.dw 0x2f13, 0xcc16,	0x2f3f, 0xcc16,		0x21, 0
+	.dw 0x2f41, 0xcc16,	0x2f41, 0xcc16,		0x21, 0
+	.dw 0x2f43, 0xcc16,	0x2f4f, 0xcc16,		0x21, 0
+	.dw 0x2f51, 0xcc16,	0x2f51, 0xcc16,		0x21, 0
+	.dw 0x2f53, 0xcc16,	0x2f7f, 0xcc16,		0x21, 0
+	.dw 0x2f81, 0xcc16,	0x2f81, 0xcc16,		0x21, 0
+	.dw 0x2f83, 0xcc16,	0x2f8f, 0xcc16,		0x21, 0
+	.dw 0x2f91, 0xcc16,	0x2f91, 0xcc16,		0x21, 0
+	.dw 0x2f93, 0xcc16,	0x2fbf, 0xcc16,		0x21, 0
+	.dw 0x2fc1, 0xcc16,	0x2fc1, 0xcc16,		0x21, 0
+	.dw 0x2fc3, 0xcc16,	0x2fcf, 0xcc16,		0x21, 0
+	.dw 0x2fd1, 0xcc16,	0x2fd1, 0xcc16,		0x21, 0
+	.dw 0x2fd3, 0xcc16,	0x3fff, 0xcc16,		0x21, 0
+	.dw 0x4001, 0xcc16,	0x4001, 0xcc16,		0x21, 0
+	.dw 0x4003, 0xcc16,	0x400f, 0xcc16,		0x21, 0
+	.dw 0x4011, 0xcc16,	0x4011, 0xcc16,		0x21, 0
+	.dw 0x4013, 0xcc16,	0x403f, 0xcc16,		0x21, 0
+	.dw 0x4041, 0xcc16,	0x4041, 0xcc16,		0x21, 0
+	.dw 0x4043, 0xcc16,	0x404f, 0xcc16,		0x21, 0
+	.dw 0x4051, 0xcc16,	0x4051, 0xcc16,		0x21, 0
+	.dw 0x4053, 0xcc16,	0x407f, 0xcc16,		0x21, 0
+	.dw 0x4081, 0xcc16,	0x4081, 0xcc16,		0x21, 0
+	.dw 0x4083, 0xcc16,	0x408f, 0xcc16,		0x21, 0
+	.dw 0x4091, 0xcc16,	0x4091, 0xcc16,		0x21, 0
+	.dw 0x4093, 0xcc16,	0x40bf, 0xcc16,		0x21, 0
+	.dw 0x40c1, 0xcc16,	0x40c1, 0xcc16,		0x21, 0
+	.dw 0x40c3, 0xcc16,	0x40cf, 0xcc16,		0x21, 0
+	.dw 0x40d1, 0xcc16,	0x40d1, 0xcc16,		0x21, 0
+	.dw 0x40d3, 0xcc16,	0x40ff, 0xcc16,		0x21, 0
+	.dw 0x4101, 0xcc16,	0x4101, 0xcc16,		0x21, 0
+	.dw 0x4103, 0xcc16,	0x410f, 0xcc16,		0x21, 0
+	.dw 0x4111, 0xcc16,	0x4111, 0xcc16,		0x21, 0
+	.dw 0x4113, 0xcc16,	0x413f, 0xcc16,		0x21, 0
+	.dw 0x4141, 0xcc16,	0x4141, 0xcc16,		0x21, 0
+	.dw 0x4143, 0xcc16,	0x414f, 0xcc16,		0x21, 0
+	.dw 0x4151, 0xcc16,	0x4151, 0xcc16,		0x21, 0
+	.dw 0x4153, 0xcc16,	0x417f, 0xcc16,		0x21, 0
+	.dw 0x4181, 0xcc16,	0x4181, 0xcc16,		0x21, 0
+	.dw 0x4183, 0xcc16,	0x418f, 0xcc16,		0x21, 0
+	.dw 0x4191, 0xcc16,	0x4191, 0xcc16,		0x21, 0
+	.dw 0x4193, 0xcc16,	0x41bf, 0xcc16,		0x21, 0
+	.dw 0x41c1, 0xcc16,	0x41c1, 0xcc16,		0x21, 0
+	.dw 0x41c3, 0xcc16,	0x41cf, 0xcc16,		0x21, 0
+	.dw 0x41d1, 0xcc16,	0x41d1, 0xcc16,		0x21, 0
+	.dw 0x41d3, 0xcc16,	0x41ff, 0xcc16,		0x21, 0
+	.dw 0x4201, 0xcc16,	0x4201, 0xcc16,		0x21, 0
+	.dw 0x4203, 0xcc16,	0x420f, 0xcc16,		0x21, 0
+	.dw 0x4211, 0xcc16,	0x4211, 0xcc16,		0x21, 0
+	.dw 0x4213, 0xcc16,	0x423f, 0xcc16,		0x21, 0
+	.dw 0x4241, 0xcc16,	0x4241, 0xcc16,		0x21, 0
+	.dw 0x4243, 0xcc16,	0x424f, 0xcc16,		0x21, 0
+	.dw 0x4251, 0xcc16,	0x4251, 0xcc16,		0x21, 0
+	.dw 0x4253, 0xcc16,	0x427f, 0xcc16,		0x21, 0
+	.dw 0x4281, 0xcc16,	0x4281, 0xcc16,		0x21, 0
+	.dw 0x4283, 0xcc16,	0x428f, 0xcc16,		0x21, 0
+	.dw 0x4291, 0xcc16,	0x4291, 0xcc16,		0x21, 0
+	.dw 0x4293, 0xcc16,	0x42bf, 0xcc16,		0x21, 0
+	.dw 0x42c1, 0xcc16,	0x42c1, 0xcc16,		0x21, 0
+	.dw 0x42c3, 0xcc16,	0x42cf, 0xcc16,		0x21, 0
+	.dw 0x42d1, 0xcc16,	0x42d1, 0xcc16,		0x21, 0
+	.dw 0x42d3, 0xcc16,	0x42ff, 0xcc16,		0x21, 0
+	.dw 0x4301, 0xcc16,	0x4301, 0xcc16,		0x21, 0
+	.dw 0x4303, 0xcc16,	0x430f, 0xcc16,		0x21, 0
+	.dw 0x4311, 0xcc16,	0x4311, 0xcc16,		0x21, 0
+	.dw 0x4313, 0xcc16,	0x433f, 0xcc16,		0x21, 0
+	.dw 0x4341, 0xcc16,	0x4341, 0xcc16,		0x21, 0
+	.dw 0x4343, 0xcc16,	0x434f, 0xcc16,		0x21, 0
+	.dw 0x4351, 0xcc16,	0x4351, 0xcc16,		0x21, 0
+	.dw 0x4353, 0xcc16,	0x437f, 0xcc16,		0x21, 0
+	.dw 0x4381, 0xcc16,	0x4381, 0xcc16,		0x21, 0
+	.dw 0x4383, 0xcc16,	0x438f, 0xcc16,		0x21, 0
+	.dw 0x4391, 0xcc16,	0x4391, 0xcc16,		0x21, 0
+	.dw 0x4393, 0xcc16,	0x43bf, 0xcc16,		0x21, 0
+	.dw 0x43c1, 0xcc16,	0x43c1, 0xcc16,		0x21, 0
+	.dw 0x43c3, 0xcc16,	0x43cf, 0xcc16,		0x21, 0
+	.dw 0x43d1, 0xcc16,	0x43d1, 0xcc16,		0x21, 0
+	.dw 0x43d3, 0xcc16,	0x43ff, 0xcc16,		0x21, 0
+	.dw 0x4401, 0xcc16,	0x4401, 0xcc16,		0x21, 0
+	.dw 0x4403, 0xcc16,	0x440f, 0xcc16,		0x21, 0
+	.dw 0x4411, 0xcc16,	0x4411, 0xcc16,		0x21, 0
+	.dw 0x4413, 0xcc16,	0x443f, 0xcc16,		0x21, 0
+	.dw 0x4441, 0xcc16,	0x4441, 0xcc16,		0x21, 0
+	.dw 0x4443, 0xcc16,	0x444f, 0xcc16,		0x21, 0
+	.dw 0x4451, 0xcc16,	0x4451, 0xcc16,		0x21, 0
+	.dw 0x4453, 0xcc16,	0x447f, 0xcc16,		0x21, 0
+	.dw 0x4481, 0xcc16,	0x4481, 0xcc16,		0x21, 0
+	.dw 0x4483, 0xcc16,	0x448f, 0xcc16,		0x21, 0
+	.dw 0x4491, 0xcc16,	0x4491, 0xcc16,		0x21, 0
+	.dw 0x4493, 0xcc16,	0x44bf, 0xcc16,		0x21, 0
+	.dw 0x44c1, 0xcc16,	0x44c1, 0xcc16,		0x21, 0
+	.dw 0x44c3, 0xcc16,	0x44cf, 0xcc16,		0x21, 0
+	.dw 0x44d1, 0xcc16,	0x44d1, 0xcc16,		0x21, 0
+	.dw 0x44d3, 0xcc16,	0x44ff, 0xcc16,		0x21, 0
+	.dw 0x4501, 0xcc16,	0x4501, 0xcc16,		0x21, 0
+	.dw 0x4503, 0xcc16,	0x450f, 0xcc16,		0x21, 0
+	.dw 0x4511, 0xcc16,	0x4511, 0xcc16,		0x21, 0
+	.dw 0x4513, 0xcc16,	0x453f, 0xcc16,		0x21, 0
+	.dw 0x4541, 0xcc16,	0x4541, 0xcc16,		0x21, 0
+	.dw 0x4543, 0xcc16,	0x454f, 0xcc16,		0x21, 0
+	.dw 0x4551, 0xcc16,	0x4551, 0xcc16,		0x21, 0
+	.dw 0x4553, 0xcc16,	0x457f, 0xcc16,		0x21, 0
+	.dw 0x4581, 0xcc16,	0x4581, 0xcc16,		0x21, 0
+	.dw 0x4583, 0xcc16,	0x458f, 0xcc16,		0x21, 0
+	.dw 0x4591, 0xcc16,	0x4591, 0xcc16,		0x21, 0
+	.dw 0x4593, 0xcc16,	0x45bf, 0xcc16,		0x21, 0
+	.dw 0x45c1, 0xcc16,	0x45c1, 0xcc16,		0x21, 0
+	.dw 0x45c3, 0xcc16,	0x45cf, 0xcc16,		0x21, 0
+	.dw 0x45d1, 0xcc16,	0x45d1, 0xcc16,		0x21, 0
+	.dw 0x45d3, 0xcc16,	0x45ff, 0xcc16,		0x21, 0
+	.dw 0x4601, 0xcc16,	0x4601, 0xcc16,		0x21, 0
+	.dw 0x4603, 0xcc16,	0x460f, 0xcc16,		0x21, 0
+	.dw 0x4611, 0xcc16,	0x4611, 0xcc16,		0x21, 0
+	.dw 0x4613, 0xcc16,	0x463f, 0xcc16,		0x21, 0
+	.dw 0x4641, 0xcc16,	0x4641, 0xcc16,		0x21, 0
+	.dw 0x4643, 0xcc16,	0x464f, 0xcc16,		0x21, 0
+	.dw 0x4651, 0xcc16,	0x4651, 0xcc16,		0x21, 0
+	.dw 0x4653, 0xcc16,	0x467f, 0xcc16,		0x21, 0
+	.dw 0x4681, 0xcc16,	0x4681, 0xcc16,		0x21, 0
+	.dw 0x4683, 0xcc16,	0x468f, 0xcc16,		0x21, 0
+	.dw 0x4691, 0xcc16,	0x4691, 0xcc16,		0x21, 0
+	.dw 0x4693, 0xcc16,	0x46bf, 0xcc16,		0x21, 0
+	.dw 0x46c1, 0xcc16,	0x46c1, 0xcc16,		0x21, 0
+	.dw 0x46c3, 0xcc16,	0x46cf, 0xcc16,		0x21, 0
+	.dw 0x46d1, 0xcc16,	0x46d1, 0xcc16,		0x21, 0
+	.dw 0x46d3, 0xcc16,	0x46ff, 0xcc16,		0x21, 0
+	.dw 0x4701, 0xcc16,	0x4701, 0xcc16,		0x21, 0
+	.dw 0x4703, 0xcc16,	0x470f, 0xcc16,		0x21, 0
+	.dw 0x4711, 0xcc16,	0x4711, 0xcc16,		0x21, 0
+	.dw 0x4713, 0xcc16,	0x473f, 0xcc16,		0x21, 0
+	.dw 0x4741, 0xcc16,	0x4741, 0xcc16,		0x21, 0
+	.dw 0x4743, 0xcc16,	0x474f, 0xcc16,		0x21, 0
+	.dw 0x4751, 0xcc16,	0x4751, 0xcc16,		0x21, 0
+	.dw 0x4753, 0xcc16,	0x477f, 0xcc16,		0x21, 0
+	.dw 0x4781, 0xcc16,	0x4781, 0xcc16,		0x21, 0
+	.dw 0x4783, 0xcc16,	0x478f, 0xcc16,		0x21, 0
+	.dw 0x4791, 0xcc16,	0x4791, 0xcc16,		0x21, 0
+	.dw 0x4793, 0xcc16,	0x47bf, 0xcc16,		0x21, 0
+	.dw 0x47c1, 0xcc16,	0x47c1, 0xcc16,		0x21, 0
+	.dw 0x47c3, 0xcc16,	0x47cf, 0xcc16,		0x21, 0
+	.dw 0x47d1, 0xcc16,	0x47d1, 0xcc16,		0x21, 0
+	.dw 0x47d3, 0xcc16,	0x47ff, 0xcc16,		0x21, 0
+	.dw 0x4801, 0xcc16,	0x4801, 0xcc16,		0x21, 0
+	.dw 0x4803, 0xcc16,	0x480f, 0xcc16,		0x21, 0
+	.dw 0x4811, 0xcc16,	0x4811, 0xcc16,		0x21, 0
+	.dw 0x4813, 0xcc16,	0x483f, 0xcc16,		0x21, 0
+	.dw 0x4841, 0xcc16,	0x4841, 0xcc16,		0x21, 0
+	.dw 0x4843, 0xcc16,	0x484f, 0xcc16,		0x21, 0
+	.dw 0x4851, 0xcc16,	0x4851, 0xcc16,		0x21, 0
+	.dw 0x4853, 0xcc16,	0x487f, 0xcc16,		0x21, 0
+	.dw 0x4881, 0xcc16,	0x4881, 0xcc16,		0x21, 0
+	.dw 0x4883, 0xcc16,	0x488f, 0xcc16,		0x21, 0
+	.dw 0x4891, 0xcc16,	0x4891, 0xcc16,		0x21, 0
+	.dw 0x4893, 0xcc16,	0x48bf, 0xcc16,		0x21, 0
+	.dw 0x48c1, 0xcc16,	0x48c1, 0xcc16,		0x21, 0
+	.dw 0x48c3, 0xcc16,	0x48cf, 0xcc16,		0x21, 0
+	.dw 0x48d1, 0xcc16,	0x48d1, 0xcc16,		0x21, 0
+	.dw 0x48d3, 0xcc16,	0x48ff, 0xcc16,		0x21, 0
+	.dw 0x4901, 0xcc16,	0x4901, 0xcc16,		0x21, 0
+	.dw 0x4903, 0xcc16,	0x490f, 0xcc16,		0x21, 0
+	.dw 0x4911, 0xcc16,	0x4911, 0xcc16,		0x21, 0
+	.dw 0x4913, 0xcc16,	0x493f, 0xcc16,		0x21, 0
+	.dw 0x4941, 0xcc16,	0x4941, 0xcc16,		0x21, 0
+	.dw 0x4943, 0xcc16,	0x494f, 0xcc16,		0x21, 0
+	.dw 0x4951, 0xcc16,	0x4951, 0xcc16,		0x21, 0
+	.dw 0x4953, 0xcc16,	0x497f, 0xcc16,		0x21, 0
+	.dw 0x4981, 0xcc16,	0x4981, 0xcc16,		0x21, 0
+	.dw 0x4983, 0xcc16,	0x498f, 0xcc16,		0x21, 0
+	.dw 0x4991, 0xcc16,	0x4991, 0xcc16,		0x21, 0
+	.dw 0x4993, 0xcc16,	0x49bf, 0xcc16,		0x21, 0
+	.dw 0x49c1, 0xcc16,	0x49c1, 0xcc16,		0x21, 0
+	.dw 0x49c3, 0xcc16,	0x49cf, 0xcc16,		0x21, 0
+	.dw 0x49d1, 0xcc16,	0x49d1, 0xcc16,		0x21, 0
+	.dw 0x49d3, 0xcc16,	0x49ff, 0xcc16,		0x21, 0
+	.dw 0x4a01, 0xcc16,	0x4a01, 0xcc16,		0x21, 0
+	.dw 0x4a03, 0xcc16,	0x4a0f, 0xcc16,		0x21, 0
+	.dw 0x4a11, 0xcc16,	0x4a11, 0xcc16,		0x21, 0
+	.dw 0x4a13, 0xcc16,	0x4a3f, 0xcc16,		0x21, 0
+	.dw 0x4a41, 0xcc16,	0x4a41, 0xcc16,		0x21, 0
+	.dw 0x4a43, 0xcc16,	0x4a4f, 0xcc16,		0x21, 0
+	.dw 0x4a51, 0xcc16,	0x4a51, 0xcc16,		0x21, 0
+	.dw 0x4a53, 0xcc16,	0x4a7f, 0xcc16,		0x21, 0
+	.dw 0x4a81, 0xcc16,	0x4a81, 0xcc16,		0x21, 0
+	.dw 0x4a83, 0xcc16,	0x4a8f, 0xcc16,		0x21, 0
+	.dw 0x4a91, 0xcc16,	0x4a91, 0xcc16,		0x21, 0
+	.dw 0x4a93, 0xcc16,	0x4abf, 0xcc16,		0x21, 0
+	.dw 0x4ac1, 0xcc16,	0x4ac1, 0xcc16,		0x21, 0
+	.dw 0x4ac3, 0xcc16,	0x4acf, 0xcc16,		0x21, 0
+	.dw 0x4ad1, 0xcc16,	0x4ad1, 0xcc16,		0x21, 0
+	.dw 0x4ad3, 0xcc16,	0x4aff, 0xcc16,		0x21, 0
+	.dw 0x4b01, 0xcc16,	0x4b01, 0xcc16,		0x21, 0
+	.dw 0x4b03, 0xcc16,	0x4b0f, 0xcc16,		0x21, 0
+	.dw 0x4b11, 0xcc16,	0x4b11, 0xcc16,		0x21, 0
+	.dw 0x4b13, 0xcc16,	0x4b3f, 0xcc16,		0x21, 0
+	.dw 0x4b41, 0xcc16,	0x4b41, 0xcc16,		0x21, 0
+	.dw 0x4b43, 0xcc16,	0x4b4f, 0xcc16,		0x21, 0
+	.dw 0x4b51, 0xcc16,	0x4b51, 0xcc16,		0x21, 0
+	.dw 0x4b53, 0xcc16,	0x4b7f, 0xcc16,		0x21, 0
+	.dw 0x4b81, 0xcc16,	0x4b81, 0xcc16,		0x21, 0
+	.dw 0x4b83, 0xcc16,	0x4b8f, 0xcc16,		0x21, 0
+	.dw 0x4b91, 0xcc16,	0x4b91, 0xcc16,		0x21, 0
+	.dw 0x4b93, 0xcc16,	0x4bbf, 0xcc16,		0x21, 0
+	.dw 0x4bc1, 0xcc16,	0x4bc1, 0xcc16,		0x21, 0
+	.dw 0x4bc3, 0xcc16,	0x4bcf, 0xcc16,		0x21, 0
+	.dw 0x4bd1, 0xcc16,	0x4bd1, 0xcc16,		0x21, 0
+	.dw 0x4bd3, 0xcc16,	0x4bff, 0xcc16,		0x21, 0
+	.dw 0x4c01, 0xcc16,	0x4c01, 0xcc16,		0x21, 0
+	.dw 0x4c03, 0xcc16,	0x4c0f, 0xcc16,		0x21, 0
+	.dw 0x4c11, 0xcc16,	0x4c11, 0xcc16,		0x21, 0
+	.dw 0x4c13, 0xcc16,	0x4c3f, 0xcc16,		0x21, 0
+	.dw 0x4c41, 0xcc16,	0x4c41, 0xcc16,		0x21, 0
+	.dw 0x4c43, 0xcc16,	0x4c4f, 0xcc16,		0x21, 0
+	.dw 0x4c51, 0xcc16,	0x4c51, 0xcc16,		0x21, 0
+	.dw 0x4c53, 0xcc16,	0x4c7f, 0xcc16,		0x21, 0
+	.dw 0x4c81, 0xcc16,	0x4c81, 0xcc16,		0x21, 0
+	.dw 0x4c83, 0xcc16,	0x4c8f, 0xcc16,		0x21, 0
+	.dw 0x4c91, 0xcc16,	0x4c91, 0xcc16,		0x21, 0
+	.dw 0x4c93, 0xcc16,	0x4cbf, 0xcc16,		0x21, 0
+	.dw 0x4cc1, 0xcc16,	0x4cc1, 0xcc16,		0x21, 0
+	.dw 0x4cc3, 0xcc16,	0x4ccf, 0xcc16,		0x21, 0
+	.dw 0x4cd1, 0xcc16,	0x4cd1, 0xcc16,		0x21, 0
+	.dw 0x4cd3, 0xcc16,	0x4cff, 0xcc16,		0x21, 0
+	.dw 0x4d01, 0xcc16,	0x4d01, 0xcc16,		0x21, 0
+	.dw 0x4d03, 0xcc16,	0x4d0f, 0xcc16,		0x21, 0
+	.dw 0x4d11, 0xcc16,	0x4d11, 0xcc16,		0x21, 0
+	.dw 0x4d13, 0xcc16,	0x4d3f, 0xcc16,		0x21, 0
+	.dw 0x4d41, 0xcc16,	0x4d41, 0xcc16,		0x21, 0
+	.dw 0x4d43, 0xcc16,	0x4d4f, 0xcc16,		0x21, 0
+	.dw 0x4d51, 0xcc16,	0x4d51, 0xcc16,		0x21, 0
+	.dw 0x4d53, 0xcc16,	0x4d7f, 0xcc16,		0x21, 0
+	.dw 0x4d81, 0xcc16,	0x4d81, 0xcc16,		0x21, 0
+	.dw 0x4d83, 0xcc16,	0x4d8f, 0xcc16,		0x21, 0
+	.dw 0x4d91, 0xcc16,	0x4d91, 0xcc16,		0x21, 0
+	.dw 0x4d93, 0xcc16,	0x4dbf, 0xcc16,		0x21, 0
+	.dw 0x4dc1, 0xcc16,	0x4dc1, 0xcc16,		0x21, 0
+	.dw 0x4dc3, 0xcc16,	0x4dcf, 0xcc16,		0x21, 0
+	.dw 0x4dd1, 0xcc16,	0x4dd1, 0xcc16,		0x21, 0
+	.dw 0x4dd3, 0xcc16,	0x4dff, 0xcc16,		0x21, 0
+	.dw 0x4e01, 0xcc16,	0x4e01, 0xcc16,		0x21, 0
+	.dw 0x4e03, 0xcc16,	0x4e0f, 0xcc16,		0x21, 0
+	.dw 0x4e11, 0xcc16,	0x4e11, 0xcc16,		0x21, 0
+	.dw 0x4e13, 0xcc16,	0x4e3f, 0xcc16,		0x21, 0
+	.dw 0x4e41, 0xcc16,	0x4e41, 0xcc16,		0x21, 0
+	.dw 0x4e43, 0xcc16,	0x4e4f, 0xcc16,		0x21, 0
+	.dw 0x4e51, 0xcc16,	0x4e51, 0xcc16,		0x21, 0
+	.dw 0x4e53, 0xcc16,	0x4e7f, 0xcc16,		0x21, 0
+	.dw 0x4e81, 0xcc16,	0x4e81, 0xcc16,		0x21, 0
+	.dw 0x4e83, 0xcc16,	0x4e8f, 0xcc16,		0x21, 0
+	.dw 0x4e91, 0xcc16,	0x4e91, 0xcc16,		0x21, 0
+	.dw 0x4e93, 0xcc16,	0x4ebf, 0xcc16,		0x21, 0
+	.dw 0x4ec1, 0xcc16,	0x4ec1, 0xcc16,		0x21, 0
+	.dw 0x4ec3, 0xcc16,	0x4ecf, 0xcc16,		0x21, 0
+	.dw 0x4ed1, 0xcc16,	0x4ed1, 0xcc16,		0x21, 0
+	.dw 0x4ed3, 0xcc16,	0x4eff, 0xcc16,		0x21, 0
+	.dw 0x4f01, 0xcc16,	0x4f01, 0xcc16,		0x21, 0
+	.dw 0x4f03, 0xcc16,	0x4f0f, 0xcc16,		0x21, 0
+	.dw 0x4f11, 0xcc16,	0x4f11, 0xcc16,		0x21, 0
+	.dw 0x4f13, 0xcc16,	0x4f3f, 0xcc16,		0x21, 0
+	.dw 0x4f41, 0xcc16,	0x4f41, 0xcc16,		0x21, 0
+	.dw 0x4f43, 0xcc16,	0x4f4f, 0xcc16,		0x21, 0
+	.dw 0x4f51, 0xcc16,	0x4f51, 0xcc16,		0x21, 0
+	.dw 0x4f53, 0xcc16,	0x4f7f, 0xcc16,		0x21, 0
+	.dw 0x4f81, 0xcc16,	0x4f81, 0xcc16,		0x21, 0
+	.dw 0x4f83, 0xcc16,	0x4f8f, 0xcc16,		0x21, 0
+	.dw 0x4f91, 0xcc16,	0x4f91, 0xcc16,		0x21, 0
+	.dw 0x4f93, 0xcc16,	0x4fbf, 0xcc16,		0x21, 0
+	.dw 0x4fc1, 0xcc16,	0x4fc1, 0xcc16,		0x21, 0
+	.dw 0x4fc3, 0xcc16,	0x4fcf, 0xcc16,		0x21, 0
+	.dw 0x4fd1, 0xcc16,	0x4fd1, 0xcc16,		0x21, 0
+	.dw 0x4fd3, 0xcc16,	0x5fff, 0xcc16,		0x21, 0
+	.dw 0x6001, 0xcc16,	0x6001, 0xcc16,		0x21, 0
+	.dw 0x6003, 0xcc16,	0x600f, 0xcc16,		0x21, 0
+	.dw 0x6011, 0xcc16,	0x6011, 0xcc16,		0x21, 0
+	.dw 0x6013, 0xcc16,	0x603f, 0xcc16,		0x21, 0
+	.dw 0x6041, 0xcc16,	0x6041, 0xcc16,		0x21, 0
+	.dw 0x6043, 0xcc16,	0x604f, 0xcc16,		0x21, 0
+	.dw 0x6051, 0xcc16,	0x6051, 0xcc16,		0x21, 0
+	.dw 0x6053, 0xcc16,	0x607f, 0xcc16,		0x21, 0
+	.dw 0x6081, 0xcc16,	0x6081, 0xcc16,		0x21, 0
+	.dw 0x6083, 0xcc16,	0x608f, 0xcc16,		0x21, 0
+	.dw 0x6091, 0xcc16,	0x6091, 0xcc16,		0x21, 0
+	.dw 0x6093, 0xcc16,	0x60bf, 0xcc16,		0x21, 0
+	.dw 0x60c1, 0xcc16,	0x60c1, 0xcc16,		0x21, 0
+	.dw 0x60c3, 0xcc16,	0x60cf, 0xcc16,		0x21, 0
+	.dw 0x60d1, 0xcc16,	0x60d1, 0xcc16,		0x21, 0
+	.dw 0x60d3, 0xcc16,	0x60ff, 0xcc16,		0x21, 0
+	.dw 0x6101, 0xcc16,	0x6101, 0xcc16,		0x21, 0
+	.dw 0x6103, 0xcc16,	0x610f, 0xcc16,		0x21, 0
+	.dw 0x6111, 0xcc16,	0x6111, 0xcc16,		0x21, 0
+	.dw 0x6113, 0xcc16,	0x613f, 0xcc16,		0x21, 0
+	.dw 0x6141, 0xcc16,	0x6141, 0xcc16,		0x21, 0
+	.dw 0x6143, 0xcc16,	0x614f, 0xcc16,		0x21, 0
+	.dw 0x6151, 0xcc16,	0x6151, 0xcc16,		0x21, 0
+	.dw 0x6153, 0xcc16,	0x617f, 0xcc16,		0x21, 0
+	.dw 0x6181, 0xcc16,	0x6181, 0xcc16,		0x21, 0
+	.dw 0x6183, 0xcc16,	0x618f, 0xcc16,		0x21, 0
+	.dw 0x6191, 0xcc16,	0x6191, 0xcc16,		0x21, 0
+	.dw 0x6193, 0xcc16,	0x61bf, 0xcc16,		0x21, 0
+	.dw 0x61c1, 0xcc16,	0x61c1, 0xcc16,		0x21, 0
+	.dw 0x61c3, 0xcc16,	0x61cf, 0xcc16,		0x21, 0
+	.dw 0x61d1, 0xcc16,	0x61d1, 0xcc16,		0x21, 0
+	.dw 0x61d3, 0xcc16,	0x61ff, 0xcc16,		0x21, 0
+	.dw 0x6201, 0xcc16,	0x6201, 0xcc16,		0x21, 0
+	.dw 0x6203, 0xcc16,	0x620f, 0xcc16,		0x21, 0
+	.dw 0x6211, 0xcc16,	0x6211, 0xcc16,		0x21, 0
+	.dw 0x6213, 0xcc16,	0x623f, 0xcc16,		0x21, 0
+	.dw 0x6241, 0xcc16,	0x6241, 0xcc16,		0x21, 0
+	.dw 0x6243, 0xcc16,	0x624f, 0xcc16,		0x21, 0
+	.dw 0x6251, 0xcc16,	0x6251, 0xcc16,		0x21, 0
+	.dw 0x6253, 0xcc16,	0x627f, 0xcc16,		0x21, 0
+	.dw 0x6281, 0xcc16,	0x6281, 0xcc16,		0x21, 0
+	.dw 0x6283, 0xcc16,	0x628f, 0xcc16,		0x21, 0
+	.dw 0x6291, 0xcc16,	0x6291, 0xcc16,		0x21, 0
+	.dw 0x6293, 0xcc16,	0x62bf, 0xcc16,		0x21, 0
+	.dw 0x62c1, 0xcc16,	0x62c1, 0xcc16,		0x21, 0
+	.dw 0x62c3, 0xcc16,	0x62cf, 0xcc16,		0x21, 0
+	.dw 0x62d1, 0xcc16,	0x62d1, 0xcc16,		0x21, 0
+	.dw 0x62d3, 0xcc16,	0x62ff, 0xcc16,		0x21, 0
+	.dw 0x6301, 0xcc16,	0x6301, 0xcc16,		0x21, 0
+	.dw 0x6303, 0xcc16,	0x630f, 0xcc16,		0x21, 0
+	.dw 0x6311, 0xcc16,	0x6311, 0xcc16,		0x21, 0
+	.dw 0x6313, 0xcc16,	0x633f, 0xcc16,		0x21, 0
+	.dw 0x6341, 0xcc16,	0x6341, 0xcc16,		0x21, 0
+	.dw 0x6343, 0xcc16,	0x634f, 0xcc16,		0x21, 0
+	.dw 0x6351, 0xcc16,	0x6351, 0xcc16,		0x21, 0
+	.dw 0x6353, 0xcc16,	0x637f, 0xcc16,		0x21, 0
+	.dw 0x6381, 0xcc16,	0x6381, 0xcc16,		0x21, 0
+	.dw 0x6383, 0xcc16,	0x638f, 0xcc16,		0x21, 0
+	.dw 0x6391, 0xcc16,	0x6391, 0xcc16,		0x21, 0
+	.dw 0x6393, 0xcc16,	0x63bf, 0xcc16,		0x21, 0
+	.dw 0x63c1, 0xcc16,	0x63c1, 0xcc16,		0x21, 0
+	.dw 0x63c3, 0xcc16,	0x63cf, 0xcc16,		0x21, 0
+	.dw 0x63d1, 0xcc16,	0x63d1, 0xcc16,		0x21, 0
+	.dw 0x63d3, 0xcc16,	0x63ff, 0xcc16,		0x21, 0
+	.dw 0x6401, 0xcc16,	0x6401, 0xcc16,		0x21, 0
+	.dw 0x6403, 0xcc16,	0x640f, 0xcc16,		0x21, 0
+	.dw 0x6411, 0xcc16,	0x6411, 0xcc16,		0x21, 0
+	.dw 0x6413, 0xcc16,	0x643f, 0xcc16,		0x21, 0
+	.dw 0x6441, 0xcc16,	0x6441, 0xcc16,		0x21, 0
+	.dw 0x6443, 0xcc16,	0x644f, 0xcc16,		0x21, 0
+	.dw 0x6451, 0xcc16,	0x6451, 0xcc16,		0x21, 0
+	.dw 0x6453, 0xcc16,	0x647f, 0xcc16,		0x21, 0
+	.dw 0x6481, 0xcc16,	0x6481, 0xcc16,		0x21, 0
+	.dw 0x6483, 0xcc16,	0x648f, 0xcc16,		0x21, 0
+	.dw 0x6491, 0xcc16,	0x6491, 0xcc16,		0x21, 0
+	.dw 0x6493, 0xcc16,	0x64bf, 0xcc16,		0x21, 0
+	.dw 0x64c1, 0xcc16,	0x64c1, 0xcc16,		0x21, 0
+	.dw 0x64c3, 0xcc16,	0x64cf, 0xcc16,		0x21, 0
+	.dw 0x64d1, 0xcc16,	0x64d1, 0xcc16,		0x21, 0
+	.dw 0x64d3, 0xcc16,	0x64ff, 0xcc16,		0x21, 0
+	.dw 0x6501, 0xcc16,	0x6501, 0xcc16,		0x21, 0
+	.dw 0x6503, 0xcc16,	0x650f, 0xcc16,		0x21, 0
+	.dw 0x6511, 0xcc16,	0x6511, 0xcc16,		0x21, 0
+	.dw 0x6513, 0xcc16,	0x653f, 0xcc16,		0x21, 0
+	.dw 0x6541, 0xcc16,	0x6541, 0xcc16,		0x21, 0
+	.dw 0x6543, 0xcc16,	0x654f, 0xcc16,		0x21, 0
+	.dw 0x6551, 0xcc16,	0x6551, 0xcc16,		0x21, 0
+	.dw 0x6553, 0xcc16,	0x657f, 0xcc16,		0x21, 0
+	.dw 0x6581, 0xcc16,	0x6581, 0xcc16,		0x21, 0
+	.dw 0x6583, 0xcc16,	0x658f, 0xcc16,		0x21, 0
+	.dw 0x6591, 0xcc16,	0x6591, 0xcc16,		0x21, 0
+	.dw 0x6593, 0xcc16,	0x65bf, 0xcc16,		0x21, 0
+	.dw 0x65c1, 0xcc16,	0x65c1, 0xcc16,		0x21, 0
+	.dw 0x65c3, 0xcc16,	0x65cf, 0xcc16,		0x21, 0
+	.dw 0x65d1, 0xcc16,	0x65d1, 0xcc16,		0x21, 0
+	.dw 0x65d3, 0xcc16,	0x65ff, 0xcc16,		0x21, 0
+	.dw 0x6601, 0xcc16,	0x6601, 0xcc16,		0x21, 0
+	.dw 0x6603, 0xcc16,	0x660f, 0xcc16,		0x21, 0
+	.dw 0x6611, 0xcc16,	0x6611, 0xcc16,		0x21, 0
+	.dw 0x6613, 0xcc16,	0x663f, 0xcc16,		0x21, 0
+	.dw 0x6641, 0xcc16,	0x6641, 0xcc16,		0x21, 0
+	.dw 0x6643, 0xcc16,	0x664f, 0xcc16,		0x21, 0
+	.dw 0x6651, 0xcc16,	0x6651, 0xcc16,		0x21, 0
+	.dw 0x6653, 0xcc16,	0x667f, 0xcc16,		0x21, 0
+	.dw 0x6681, 0xcc16,	0x6681, 0xcc16,		0x21, 0
+	.dw 0x6683, 0xcc16,	0x668f, 0xcc16,		0x21, 0
+	.dw 0x6691, 0xcc16,	0x6691, 0xcc16,		0x21, 0
+	.dw 0x6693, 0xcc16,	0x66bf, 0xcc16,		0x21, 0
+	.dw 0x66c1, 0xcc16,	0x66c1, 0xcc16,		0x21, 0
+	.dw 0x66c3, 0xcc16,	0x66cf, 0xcc16,		0x21, 0
+	.dw 0x66d1, 0xcc16,	0x66d1, 0xcc16,		0x21, 0
+	.dw 0x66d3, 0xcc16,	0x66ff, 0xcc16,		0x21, 0
+	.dw 0x6701, 0xcc16,	0x6701, 0xcc16,		0x21, 0
+	.dw 0x6703, 0xcc16,	0x670f, 0xcc16,		0x21, 0
+	.dw 0x6711, 0xcc16,	0x6711, 0xcc16,		0x21, 0
+	.dw 0x6713, 0xcc16,	0x673f, 0xcc16,		0x21, 0
+	.dw 0x6741, 0xcc16,	0x6741, 0xcc16,		0x21, 0
+	.dw 0x6743, 0xcc16,	0x674f, 0xcc16,		0x21, 0
+	.dw 0x6751, 0xcc16,	0x6751, 0xcc16,		0x21, 0
+	.dw 0x6753, 0xcc16,	0x677f, 0xcc16,		0x21, 0
+	.dw 0x6781, 0xcc16,	0x6781, 0xcc16,		0x21, 0
+	.dw 0x6783, 0xcc16,	0x678f, 0xcc16,		0x21, 0
+	.dw 0x6791, 0xcc16,	0x6791, 0xcc16,		0x21, 0
+	.dw 0x6793, 0xcc16,	0x67bf, 0xcc16,		0x21, 0
+	.dw 0x67c1, 0xcc16,	0x67c1, 0xcc16,		0x21, 0
+	.dw 0x67c3, 0xcc16,	0x67cf, 0xcc16,		0x21, 0
+	.dw 0x67d1, 0xcc16,	0x67d1, 0xcc16,		0x21, 0
+	.dw 0x67d3, 0xcc16,	0x67ff, 0xcc16,		0x21, 0
+	.dw 0x6801, 0xcc16,	0x6801, 0xcc16,		0x21, 0
+	.dw 0x6803, 0xcc16,	0x680f, 0xcc16,		0x21, 0
+	.dw 0x6811, 0xcc16,	0x6811, 0xcc16,		0x21, 0
+	.dw 0x6813, 0xcc16,	0x683f, 0xcc16,		0x21, 0
+	.dw 0x6841, 0xcc16,	0x6841, 0xcc16,		0x21, 0
+	.dw 0x6843, 0xcc16,	0x684f, 0xcc16,		0x21, 0
+	.dw 0x6851, 0xcc16,	0x6851, 0xcc16,		0x21, 0
+	.dw 0x6853, 0xcc16,	0x687f, 0xcc16,		0x21, 0
+	.dw 0x6881, 0xcc16,	0x6881, 0xcc16,		0x21, 0
+	.dw 0x6883, 0xcc16,	0x688f, 0xcc16,		0x21, 0
+	.dw 0x6891, 0xcc16,	0x6891, 0xcc16,		0x21, 0
+	.dw 0x6893, 0xcc16,	0x68bf, 0xcc16,		0x21, 0
+	.dw 0x68c1, 0xcc16,	0x68c1, 0xcc16,		0x21, 0
+	.dw 0x68c3, 0xcc16,	0x68cf, 0xcc16,		0x21, 0
+	.dw 0x68d1, 0xcc16,	0x68d1, 0xcc16,		0x21, 0
+	.dw 0x68d3, 0xcc16,	0x68ff, 0xcc16,		0x21, 0
+	.dw 0x6901, 0xcc16,	0x6901, 0xcc16,		0x21, 0
+	.dw 0x6903, 0xcc16,	0x690f, 0xcc16,		0x21, 0
+	.dw 0x6911, 0xcc16,	0x6911, 0xcc16,		0x21, 0
+	.dw 0x6913, 0xcc16,	0x693f, 0xcc16,		0x21, 0
+	.dw 0x6941, 0xcc16,	0x6941, 0xcc16,		0x21, 0
+	.dw 0x6943, 0xcc16,	0x694f, 0xcc16,		0x21, 0
+	.dw 0x6951, 0xcc16,	0x6951, 0xcc16,		0x21, 0
+	.dw 0x6953, 0xcc16,	0x697f, 0xcc16,		0x21, 0
+	.dw 0x6981, 0xcc16,	0x6981, 0xcc16,		0x21, 0
+	.dw 0x6983, 0xcc16,	0x698f, 0xcc16,		0x21, 0
+	.dw 0x6991, 0xcc16,	0x6991, 0xcc16,		0x21, 0
+	.dw 0x6993, 0xcc16,	0x69bf, 0xcc16,		0x21, 0
+	.dw 0x69c1, 0xcc16,	0x69c1, 0xcc16,		0x21, 0
+	.dw 0x69c3, 0xcc16,	0x69cf, 0xcc16,		0x21, 0
+	.dw 0x69d1, 0xcc16,	0x69d1, 0xcc16,		0x21, 0
+	.dw 0x69d3, 0xcc16,	0x69ff, 0xcc16,		0x21, 0
+	.dw 0x6a01, 0xcc16,	0x6a01, 0xcc16,		0x21, 0
+	.dw 0x6a03, 0xcc16,	0x6a0f, 0xcc16,		0x21, 0
+	.dw 0x6a11, 0xcc16,	0x6a11, 0xcc16,		0x21, 0
+	.dw 0x6a13, 0xcc16,	0x6a3f, 0xcc16,		0x21, 0
+	.dw 0x6a41, 0xcc16,	0x6a41, 0xcc16,		0x21, 0
+	.dw 0x6a43, 0xcc16,	0x6a4f, 0xcc16,		0x21, 0
+	.dw 0x6a51, 0xcc16,	0x6a51, 0xcc16,		0x21, 0
+	.dw 0x6a53, 0xcc16,	0x6a7f, 0xcc16,		0x21, 0
+	.dw 0x6a81, 0xcc16,	0x6a81, 0xcc16,		0x21, 0
+	.dw 0x6a83, 0xcc16,	0x6a8f, 0xcc16,		0x21, 0
+	.dw 0x6a91, 0xcc16,	0x6a91, 0xcc16,		0x21, 0
+	.dw 0x6a93, 0xcc16,	0x6abf, 0xcc16,		0x21, 0
+	.dw 0x6ac1, 0xcc16,	0x6ac1, 0xcc16,		0x21, 0
+	.dw 0x6ac3, 0xcc16,	0x6acf, 0xcc16,		0x21, 0
+	.dw 0x6ad1, 0xcc16,	0x6ad1, 0xcc16,		0x21, 0
+	.dw 0x6ad3, 0xcc16,	0x6aff, 0xcc16,		0x21, 0
+	.dw 0x6b01, 0xcc16,	0x6b01, 0xcc16,		0x21, 0
+	.dw 0x6b03, 0xcc16,	0x6b0f, 0xcc16,		0x21, 0
+	.dw 0x6b11, 0xcc16,	0x6b11, 0xcc16,		0x21, 0
+	.dw 0x6b13, 0xcc16,	0x6b3f, 0xcc16,		0x21, 0
+	.dw 0x6b41, 0xcc16,	0x6b41, 0xcc16,		0x21, 0
+	.dw 0x6b43, 0xcc16,	0x6b4f, 0xcc16,		0x21, 0
+	.dw 0x6b51, 0xcc16,	0x6b51, 0xcc16,		0x21, 0
+	.dw 0x6b53, 0xcc16,	0x6b7f, 0xcc16,		0x21, 0
+	.dw 0x6b81, 0xcc16,	0x6b81, 0xcc16,		0x21, 0
+	.dw 0x6b83, 0xcc16,	0x6b8f, 0xcc16,		0x21, 0
+	.dw 0x6b91, 0xcc16,	0x6b91, 0xcc16,		0x21, 0
+	.dw 0x6b93, 0xcc16,	0x6bbf, 0xcc16,		0x21, 0
+	.dw 0x6bc1, 0xcc16,	0x6bc1, 0xcc16,		0x21, 0
+	.dw 0x6bc3, 0xcc16,	0x6bcf, 0xcc16,		0x21, 0
+	.dw 0x6bd1, 0xcc16,	0x6bd1, 0xcc16,		0x21, 0
+	.dw 0x6bd3, 0xcc16,	0x6bff, 0xcc16,		0x21, 0
+	.dw 0x6c01, 0xcc16,	0x6c01, 0xcc16,		0x21, 0
+	.dw 0x6c03, 0xcc16,	0x6c0f, 0xcc16,		0x21, 0
+	.dw 0x6c11, 0xcc16,	0x6c11, 0xcc16,		0x21, 0
+	.dw 0x6c13, 0xcc16,	0x6c3f, 0xcc16,		0x21, 0
+	.dw 0x6c41, 0xcc16,	0x6c41, 0xcc16,		0x21, 0
+	.dw 0x6c43, 0xcc16,	0x6c4f, 0xcc16,		0x21, 0
+	.dw 0x6c51, 0xcc16,	0x6c51, 0xcc16,		0x21, 0
+	.dw 0x6c53, 0xcc16,	0x6c7f, 0xcc16,		0x21, 0
+	.dw 0x6c81, 0xcc16,	0x6c81, 0xcc16,		0x21, 0
+	.dw 0x6c83, 0xcc16,	0x6c8f, 0xcc16,		0x21, 0
+	.dw 0x6c91, 0xcc16,	0x6c91, 0xcc16,		0x21, 0
+	.dw 0x6c93, 0xcc16,	0x6cbf, 0xcc16,		0x21, 0
+	.dw 0x6cc1, 0xcc16,	0x6cc1, 0xcc16,		0x21, 0
+	.dw 0x6cc3, 0xcc16,	0x6ccf, 0xcc16,		0x21, 0
+	.dw 0x6cd1, 0xcc16,	0x6cd1, 0xcc16,		0x21, 0
+	.dw 0x6cd3, 0xcc16,	0x6cff, 0xcc16,		0x21, 0
+	.dw 0x6d01, 0xcc16,	0x6d01, 0xcc16,		0x21, 0
+	.dw 0x6d03, 0xcc16,	0x6d0f, 0xcc16,		0x21, 0
+	.dw 0x6d11, 0xcc16,	0x6d11, 0xcc16,		0x21, 0
+	.dw 0x6d13, 0xcc16,	0x6d3f, 0xcc16,		0x21, 0
+	.dw 0x6d41, 0xcc16,	0x6d41, 0xcc16,		0x21, 0
+	.dw 0x6d43, 0xcc16,	0x6d4f, 0xcc16,		0x21, 0
+	.dw 0x6d51, 0xcc16,	0x6d51, 0xcc16,		0x21, 0
+	.dw 0x6d53, 0xcc16,	0x6d7f, 0xcc16,		0x21, 0
+	.dw 0x6d81, 0xcc16,	0x6d81, 0xcc16,		0x21, 0
+	.dw 0x6d83, 0xcc16,	0x6d8f, 0xcc16,		0x21, 0
+	.dw 0x6d91, 0xcc16,	0x6d91, 0xcc16,		0x21, 0
+	.dw 0x6d93, 0xcc16,	0x6dbf, 0xcc16,		0x21, 0
+	.dw 0x6dc1, 0xcc16,	0x6dc1, 0xcc16,		0x21, 0
+	.dw 0x6dc3, 0xcc16,	0x6dcf, 0xcc16,		0x21, 0
+	.dw 0x6dd1, 0xcc16,	0x6dd1, 0xcc16,		0x21, 0
+	.dw 0x6dd3, 0xcc16,	0x6dff, 0xcc16,		0x21, 0
+	.dw 0x6e01, 0xcc16,	0x6e01, 0xcc16,		0x21, 0
+	.dw 0x6e03, 0xcc16,	0x6e0f, 0xcc16,		0x21, 0
+	.dw 0x6e11, 0xcc16,	0x6e11, 0xcc16,		0x21, 0
+	.dw 0x6e13, 0xcc16,	0x6e3f, 0xcc16,		0x21, 0
+	.dw 0x6e41, 0xcc16,	0x6e41, 0xcc16,		0x21, 0
+	.dw 0x6e43, 0xcc16,	0x6e4f, 0xcc16,		0x21, 0
+	.dw 0x6e51, 0xcc16,	0x6e51, 0xcc16,		0x21, 0
+	.dw 0x6e53, 0xcc16,	0x6e7f, 0xcc16,		0x21, 0
+	.dw 0x6e81, 0xcc16,	0x6e81, 0xcc16,		0x21, 0
+	.dw 0x6e83, 0xcc16,	0x6e8f, 0xcc16,		0x21, 0
+	.dw 0x6e91, 0xcc16,	0x6e91, 0xcc16,		0x21, 0
+	.dw 0x6e93, 0xcc16,	0x6ebf, 0xcc16,		0x21, 0
+	.dw 0x6ec1, 0xcc16,	0x6ec1, 0xcc16,		0x21, 0
+	.dw 0x6ec3, 0xcc16,	0x6ecf, 0xcc16,		0x21, 0
+	.dw 0x6ed1, 0xcc16,	0x6ed1, 0xcc16,		0x21, 0
+	.dw 0x6ed3, 0xcc16,	0x6eff, 0xcc16,		0x21, 0
+	.dw 0x6f01, 0xcc16,	0x6f01, 0xcc16,		0x21, 0
+	.dw 0x6f03, 0xcc16,	0x6f0f, 0xcc16,		0x21, 0
+	.dw 0x6f11, 0xcc16,	0x6f11, 0xcc16,		0x21, 0
+	.dw 0x6f13, 0xcc16,	0x6f3f, 0xcc16,		0x21, 0
+	.dw 0x6f41, 0xcc16,	0x6f41, 0xcc16,		0x21, 0
+	.dw 0x6f43, 0xcc16,	0x6f4f, 0xcc16,		0x21, 0
+	.dw 0x6f51, 0xcc16,	0x6f51, 0xcc16,		0x21, 0
+	.dw 0x6f53, 0xcc16,	0x6f7f, 0xcc16,		0x21, 0
+	.dw 0x6f81, 0xcc16,	0x6f81, 0xcc16,		0x21, 0
+	.dw 0x6f83, 0xcc16,	0x6f8f, 0xcc16,		0x21, 0
+	.dw 0x6f91, 0xcc16,	0x6f91, 0xcc16,		0x21, 0
+	.dw 0x6f93, 0xcc16,	0x6fbf, 0xcc16,		0x21, 0
+	.dw 0x6fc1, 0xcc16,	0x6fc1, 0xcc16,		0x21, 0
+	.dw 0x6fc3, 0xcc16,	0x6fcf, 0xcc16,		0x21, 0
+	.dw 0x6fd1, 0xcc16,	0x6fd1, 0xcc16,		0x21, 0
+	.dw 0x6fd3, 0xcc16,	0xffff, 0xcc16,		0x21, 0
+	.dw 0x0001, 0xcc17,	0x0001, 0xcc17,		0x21, 0
+	.dw 0x0003, 0xcc17,	0x000f, 0xcc17,		0x21, 0
+	.dw 0x0011, 0xcc17,	0x0011, 0xcc17,		0x21, 0
+	.dw 0x0013, 0xcc17,	0x003f, 0xcc17,		0x21, 0
+	.dw 0x0041, 0xcc17,	0x0041, 0xcc17,		0x21, 0
+	.dw 0x0043, 0xcc17,	0x004f, 0xcc17,		0x21, 0
+	.dw 0x0051, 0xcc17,	0x0051, 0xcc17,		0x21, 0
+	.dw 0x0053, 0xcc17,	0x007f, 0xcc17,		0x21, 0
+	.dw 0x0081, 0xcc17,	0x0081, 0xcc17,		0x21, 0
+	.dw 0x0083, 0xcc17,	0x008f, 0xcc17,		0x21, 0
+	.dw 0x0091, 0xcc17,	0x0091, 0xcc17,		0x21, 0
+	.dw 0x0093, 0xcc17,	0x00bf, 0xcc17,		0x21, 0
+	.dw 0x00c1, 0xcc17,	0x00c1, 0xcc17,		0x21, 0
+	.dw 0x00c3, 0xcc17,	0x00cf, 0xcc17,		0x21, 0
+	.dw 0x00d1, 0xcc17,	0x00d1, 0xcc17,		0x21, 0
+	.dw 0x00d3, 0xcc17,	0x00ff, 0xcc17,		0x21, 0
+	.dw 0x0101, 0xcc17,	0x0101, 0xcc17,		0x21, 0
+	.dw 0x0103, 0xcc17,	0x010f, 0xcc17,		0x21, 0
+	.dw 0x0111, 0xcc17,	0x0111, 0xcc17,		0x21, 0
+	.dw 0x0113, 0xcc17,	0x013f, 0xcc17,		0x21, 0
+	.dw 0x0141, 0xcc17,	0x0141, 0xcc17,		0x21, 0
+	.dw 0x0143, 0xcc17,	0x014f, 0xcc17,		0x21, 0
+	.dw 0x0151, 0xcc17,	0x0151, 0xcc17,		0x21, 0
+	.dw 0x0153, 0xcc17,	0x017f, 0xcc17,		0x21, 0
+	.dw 0x0181, 0xcc17,	0x0181, 0xcc17,		0x21, 0
+	.dw 0x0183, 0xcc17,	0x018f, 0xcc17,		0x21, 0
+	.dw 0x0191, 0xcc17,	0x0191, 0xcc17,		0x21, 0
+	.dw 0x0193, 0xcc17,	0x01bf, 0xcc17,		0x21, 0
+	.dw 0x01c1, 0xcc17,	0x01c1, 0xcc17,		0x21, 0
+	.dw 0x01c3, 0xcc17,	0x01cf, 0xcc17,		0x21, 0
+	.dw 0x01d1, 0xcc17,	0x01d1, 0xcc17,		0x21, 0
+	.dw 0x01d3, 0xcc17,	0x01ff, 0xcc17,		0x21, 0
+	.dw 0x0201, 0xcc17,	0x0201, 0xcc17,		0x21, 0
+	.dw 0x0203, 0xcc17,	0x020f, 0xcc17,		0x21, 0
+	.dw 0x0211, 0xcc17,	0x0211, 0xcc17,		0x21, 0
+	.dw 0x0213, 0xcc17,	0x023f, 0xcc17,		0x21, 0
+	.dw 0x0241, 0xcc17,	0x0241, 0xcc17,		0x21, 0
+	.dw 0x0243, 0xcc17,	0x024f, 0xcc17,		0x21, 0
+	.dw 0x0251, 0xcc17,	0x0251, 0xcc17,		0x21, 0
+	.dw 0x0253, 0xcc17,	0x027f, 0xcc17,		0x21, 0
+	.dw 0x0281, 0xcc17,	0x0281, 0xcc17,		0x21, 0
+	.dw 0x0283, 0xcc17,	0x028f, 0xcc17,		0x21, 0
+	.dw 0x0291, 0xcc17,	0x0291, 0xcc17,		0x21, 0
+	.dw 0x0293, 0xcc17,	0x02bf, 0xcc17,		0x21, 0
+	.dw 0x02c1, 0xcc17,	0x02c1, 0xcc17,		0x21, 0
+	.dw 0x02c3, 0xcc17,	0x02cf, 0xcc17,		0x21, 0
+	.dw 0x02d1, 0xcc17,	0x02d1, 0xcc17,		0x21, 0
+	.dw 0x02d3, 0xcc17,	0x02ff, 0xcc17,		0x21, 0
+	.dw 0x0301, 0xcc17,	0x0301, 0xcc17,		0x21, 0
+	.dw 0x0303, 0xcc17,	0x030f, 0xcc17,		0x21, 0
+	.dw 0x0311, 0xcc17,	0x0311, 0xcc17,		0x21, 0
+	.dw 0x0313, 0xcc17,	0x033f, 0xcc17,		0x21, 0
+	.dw 0x0341, 0xcc17,	0x0341, 0xcc17,		0x21, 0
+	.dw 0x0343, 0xcc17,	0x034f, 0xcc17,		0x21, 0
+	.dw 0x0351, 0xcc17,	0x0351, 0xcc17,		0x21, 0
+	.dw 0x0353, 0xcc17,	0x037f, 0xcc17,		0x21, 0
+	.dw 0x0381, 0xcc17,	0x0381, 0xcc17,		0x21, 0
+	.dw 0x0383, 0xcc17,	0x038f, 0xcc17,		0x21, 0
+	.dw 0x0391, 0xcc17,	0x0391, 0xcc17,		0x21, 0
+	.dw 0x0393, 0xcc17,	0x03bf, 0xcc17,		0x21, 0
+	.dw 0x03c1, 0xcc17,	0x03c1, 0xcc17,		0x21, 0
+	.dw 0x03c3, 0xcc17,	0x03cf, 0xcc17,		0x21, 0
+	.dw 0x03d1, 0xcc17,	0x03d1, 0xcc17,		0x21, 0
+	.dw 0x03d3, 0xcc17,	0x03ff, 0xcc17,		0x21, 0
+	.dw 0x0401, 0xcc17,	0x0401, 0xcc17,		0x21, 0
+	.dw 0x0403, 0xcc17,	0x040f, 0xcc17,		0x21, 0
+	.dw 0x0411, 0xcc17,	0x0411, 0xcc17,		0x21, 0
+	.dw 0x0413, 0xcc17,	0x043f, 0xcc17,		0x21, 0
+	.dw 0x0441, 0xcc17,	0x0441, 0xcc17,		0x21, 0
+	.dw 0x0443, 0xcc17,	0x044f, 0xcc17,		0x21, 0
+	.dw 0x0451, 0xcc17,	0x0451, 0xcc17,		0x21, 0
+	.dw 0x0453, 0xcc17,	0x047f, 0xcc17,		0x21, 0
+	.dw 0x0481, 0xcc17,	0x0481, 0xcc17,		0x21, 0
+	.dw 0x0483, 0xcc17,	0x048f, 0xcc17,		0x21, 0
+	.dw 0x0491, 0xcc17,	0x0491, 0xcc17,		0x21, 0
+	.dw 0x0493, 0xcc17,	0x04bf, 0xcc17,		0x21, 0
+	.dw 0x04c1, 0xcc17,	0x04c1, 0xcc17,		0x21, 0
+	.dw 0x04c3, 0xcc17,	0x04cf, 0xcc17,		0x21, 0
+	.dw 0x04d1, 0xcc17,	0x04d1, 0xcc17,		0x21, 0
+	.dw 0x04d3, 0xcc17,	0x04ff, 0xcc17,		0x21, 0
+	.dw 0x0501, 0xcc17,	0x0501, 0xcc17,		0x21, 0
+	.dw 0x0503, 0xcc17,	0x050f, 0xcc17,		0x21, 0
+	.dw 0x0511, 0xcc17,	0x0511, 0xcc17,		0x21, 0
+	.dw 0x0513, 0xcc17,	0x053f, 0xcc17,		0x21, 0
+	.dw 0x0541, 0xcc17,	0x0541, 0xcc17,		0x21, 0
+	.dw 0x0543, 0xcc17,	0x054f, 0xcc17,		0x21, 0
+	.dw 0x0551, 0xcc17,	0x0551, 0xcc17,		0x21, 0
+	.dw 0x0553, 0xcc17,	0x057f, 0xcc17,		0x21, 0
+	.dw 0x0581, 0xcc17,	0x0581, 0xcc17,		0x21, 0
+	.dw 0x0583, 0xcc17,	0x058f, 0xcc17,		0x21, 0
+	.dw 0x0591, 0xcc17,	0x0591, 0xcc17,		0x21, 0
+	.dw 0x0593, 0xcc17,	0x05bf, 0xcc17,		0x21, 0
+	.dw 0x05c1, 0xcc17,	0x05c1, 0xcc17,		0x21, 0
+	.dw 0x05c3, 0xcc17,	0x05cf, 0xcc17,		0x21, 0
+	.dw 0x05d1, 0xcc17,	0x05d1, 0xcc17,		0x21, 0
+	.dw 0x05d3, 0xcc17,	0x05ff, 0xcc17,		0x21, 0
+	.dw 0x0601, 0xcc17,	0x0601, 0xcc17,		0x21, 0
+	.dw 0x0603, 0xcc17,	0x060f, 0xcc17,		0x21, 0
+	.dw 0x0611, 0xcc17,	0x0611, 0xcc17,		0x21, 0
+	.dw 0x0613, 0xcc17,	0x063f, 0xcc17,		0x21, 0
+	.dw 0x0641, 0xcc17,	0x0641, 0xcc17,		0x21, 0
+	.dw 0x0643, 0xcc17,	0x064f, 0xcc17,		0x21, 0
+	.dw 0x0651, 0xcc17,	0x0651, 0xcc17,		0x21, 0
+	.dw 0x0653, 0xcc17,	0x067f, 0xcc17,		0x21, 0
+	.dw 0x0681, 0xcc17,	0x0681, 0xcc17,		0x21, 0
+	.dw 0x0683, 0xcc17,	0x068f, 0xcc17,		0x21, 0
+	.dw 0x0691, 0xcc17,	0x0691, 0xcc17,		0x21, 0
+	.dw 0x0693, 0xcc17,	0x06bf, 0xcc17,		0x21, 0
+	.dw 0x06c1, 0xcc17,	0x06c1, 0xcc17,		0x21, 0
+	.dw 0x06c3, 0xcc17,	0x06cf, 0xcc17,		0x21, 0
+	.dw 0x06d1, 0xcc17,	0x06d1, 0xcc17,		0x21, 0
+	.dw 0x06d3, 0xcc17,	0x06ff, 0xcc17,		0x21, 0
+	.dw 0x0701, 0xcc17,	0x0701, 0xcc17,		0x21, 0
+	.dw 0x0703, 0xcc17,	0x070f, 0xcc17,		0x21, 0
+	.dw 0x0711, 0xcc17,	0x0711, 0xcc17,		0x21, 0
+	.dw 0x0713, 0xcc17,	0x073f, 0xcc17,		0x21, 0
+	.dw 0x0741, 0xcc17,	0x0741, 0xcc17,		0x21, 0
+	.dw 0x0743, 0xcc17,	0x074f, 0xcc17,		0x21, 0
+	.dw 0x0751, 0xcc17,	0x0751, 0xcc17,		0x21, 0
+	.dw 0x0753, 0xcc17,	0x077f, 0xcc17,		0x21, 0
+	.dw 0x0781, 0xcc17,	0x0781, 0xcc17,		0x21, 0
+	.dw 0x0783, 0xcc17,	0x078f, 0xcc17,		0x21, 0
+	.dw 0x0791, 0xcc17,	0x0791, 0xcc17,		0x21, 0
+	.dw 0x0793, 0xcc17,	0x07bf, 0xcc17,		0x21, 0
+	.dw 0x07c1, 0xcc17,	0x07c1, 0xcc17,		0x21, 0
+	.dw 0x07c3, 0xcc17,	0x07cf, 0xcc17,		0x21, 0
+	.dw 0x07d1, 0xcc17,	0x07d1, 0xcc17,		0x21, 0
+	.dw 0x07d3, 0xcc17,	0x07ff, 0xcc17,		0x21, 0
+	.dw 0x0801, 0xcc17,	0x0801, 0xcc17,		0x21, 0
+	.dw 0x0803, 0xcc17,	0x080f, 0xcc17,		0x21, 0
+	.dw 0x0811, 0xcc17,	0x0811, 0xcc17,		0x21, 0
+	.dw 0x0813, 0xcc17,	0x083f, 0xcc17,		0x21, 0
+	.dw 0x0841, 0xcc17,	0x0841, 0xcc17,		0x21, 0
+	.dw 0x0843, 0xcc17,	0x084f, 0xcc17,		0x21, 0
+	.dw 0x0851, 0xcc17,	0x0851, 0xcc17,		0x21, 0
+	.dw 0x0853, 0xcc17,	0x087f, 0xcc17,		0x21, 0
+	.dw 0x0881, 0xcc17,	0x0881, 0xcc17,		0x21, 0
+	.dw 0x0883, 0xcc17,	0x088f, 0xcc17,		0x21, 0
+	.dw 0x0891, 0xcc17,	0x0891, 0xcc17,		0x21, 0
+	.dw 0x0893, 0xcc17,	0x08bf, 0xcc17,		0x21, 0
+	.dw 0x08c1, 0xcc17,	0x08c1, 0xcc17,		0x21, 0
+	.dw 0x08c3, 0xcc17,	0x08cf, 0xcc17,		0x21, 0
+	.dw 0x08d1, 0xcc17,	0x08d1, 0xcc17,		0x21, 0
+	.dw 0x08d3, 0xcc17,	0x08ff, 0xcc17,		0x21, 0
+	.dw 0x0901, 0xcc17,	0x0901, 0xcc17,		0x21, 0
+	.dw 0x0903, 0xcc17,	0x090f, 0xcc17,		0x21, 0
+	.dw 0x0911, 0xcc17,	0x0911, 0xcc17,		0x21, 0
+	.dw 0x0913, 0xcc17,	0x093f, 0xcc17,		0x21, 0
+	.dw 0x0941, 0xcc17,	0x0941, 0xcc17,		0x21, 0
+	.dw 0x0943, 0xcc17,	0x094f, 0xcc17,		0x21, 0
+	.dw 0x0951, 0xcc17,	0x0951, 0xcc17,		0x21, 0
+	.dw 0x0953, 0xcc17,	0x097f, 0xcc17,		0x21, 0
+	.dw 0x0981, 0xcc17,	0x0981, 0xcc17,		0x21, 0
+	.dw 0x0983, 0xcc17,	0x098f, 0xcc17,		0x21, 0
+	.dw 0x0991, 0xcc17,	0x0991, 0xcc17,		0x21, 0
+	.dw 0x0993, 0xcc17,	0x09bf, 0xcc17,		0x21, 0
+	.dw 0x09c1, 0xcc17,	0x09c1, 0xcc17,		0x21, 0
+	.dw 0x09c3, 0xcc17,	0x09cf, 0xcc17,		0x21, 0
+	.dw 0x09d1, 0xcc17,	0x09d1, 0xcc17,		0x21, 0
+	.dw 0x09d3, 0xcc17,	0x09ff, 0xcc17,		0x21, 0
+	.dw 0x0a01, 0xcc17,	0x0a01, 0xcc17,		0x21, 0
+	.dw 0x0a03, 0xcc17,	0x0a0f, 0xcc17,		0x21, 0
+	.dw 0x0a11, 0xcc17,	0x0a11, 0xcc17,		0x21, 0
+	.dw 0x0a13, 0xcc17,	0x0a3f, 0xcc17,		0x21, 0
+	.dw 0x0a41, 0xcc17,	0x0a41, 0xcc17,		0x21, 0
+	.dw 0x0a43, 0xcc17,	0x0a4f, 0xcc17,		0x21, 0
+	.dw 0x0a51, 0xcc17,	0x0a51, 0xcc17,		0x21, 0
+	.dw 0x0a53, 0xcc17,	0x0a7f, 0xcc17,		0x21, 0
+	.dw 0x0a81, 0xcc17,	0x0a81, 0xcc17,		0x21, 0
+	.dw 0x0a83, 0xcc17,	0x0a8f, 0xcc17,		0x21, 0
+	.dw 0x0a91, 0xcc17,	0x0a91, 0xcc17,		0x21, 0
+	.dw 0x0a93, 0xcc17,	0x0abf, 0xcc17,		0x21, 0
+	.dw 0x0ac1, 0xcc17,	0x0ac1, 0xcc17,		0x21, 0
+	.dw 0x0ac3, 0xcc17,	0x0acf, 0xcc17,		0x21, 0
+	.dw 0x0ad1, 0xcc17,	0x0ad1, 0xcc17,		0x21, 0
+	.dw 0x0ad3, 0xcc17,	0x0aff, 0xcc17,		0x21, 0
+	.dw 0x0b01, 0xcc17,	0x0b01, 0xcc17,		0x21, 0
+	.dw 0x0b03, 0xcc17,	0x0b0f, 0xcc17,		0x21, 0
+	.dw 0x0b11, 0xcc17,	0x0b11, 0xcc17,		0x21, 0
+	.dw 0x0b13, 0xcc17,	0x0b3f, 0xcc17,		0x21, 0
+	.dw 0x0b41, 0xcc17,	0x0b41, 0xcc17,		0x21, 0
+	.dw 0x0b43, 0xcc17,	0x0b4f, 0xcc17,		0x21, 0
+	.dw 0x0b51, 0xcc17,	0x0b51, 0xcc17,		0x21, 0
+	.dw 0x0b53, 0xcc17,	0x0b7f, 0xcc17,		0x21, 0
+	.dw 0x0b81, 0xcc17,	0x0b81, 0xcc17,		0x21, 0
+	.dw 0x0b83, 0xcc17,	0x0b8f, 0xcc17,		0x21, 0
+	.dw 0x0b91, 0xcc17,	0x0b91, 0xcc17,		0x21, 0
+	.dw 0x0b93, 0xcc17,	0x0bbf, 0xcc17,		0x21, 0
+	.dw 0x0bc1, 0xcc17,	0x0bc1, 0xcc17,		0x21, 0
+	.dw 0x0bc3, 0xcc17,	0x0bcf, 0xcc17,		0x21, 0
+	.dw 0x0bd1, 0xcc17,	0x0bd1, 0xcc17,		0x21, 0
+	.dw 0x0bd3, 0xcc17,	0x0bff, 0xcc17,		0x21, 0
+	.dw 0x0c01, 0xcc17,	0x0c01, 0xcc17,		0x21, 0
+	.dw 0x0c03, 0xcc17,	0x0c0f, 0xcc17,		0x21, 0
+	.dw 0x0c11, 0xcc17,	0x0c11, 0xcc17,		0x21, 0
+	.dw 0x0c13, 0xcc17,	0x0c3f, 0xcc17,		0x21, 0
+	.dw 0x0c41, 0xcc17,	0x0c41, 0xcc17,		0x21, 0
+	.dw 0x0c43, 0xcc17,	0x0c4f, 0xcc17,		0x21, 0
+	.dw 0x0c51, 0xcc17,	0x0c51, 0xcc17,		0x21, 0
+	.dw 0x0c53, 0xcc17,	0x0c7f, 0xcc17,		0x21, 0
+	.dw 0x0c81, 0xcc17,	0x0c81, 0xcc17,		0x21, 0
+	.dw 0x0c83, 0xcc17,	0x0c8f, 0xcc17,		0x21, 0
+	.dw 0x0c91, 0xcc17,	0x0c91, 0xcc17,		0x21, 0
+	.dw 0x0c93, 0xcc17,	0x0cbf, 0xcc17,		0x21, 0
+	.dw 0x0cc1, 0xcc17,	0x0cc1, 0xcc17,		0x21, 0
+	.dw 0x0cc3, 0xcc17,	0x0ccf, 0xcc17,		0x21, 0
+	.dw 0x0cd1, 0xcc17,	0x0cd1, 0xcc17,		0x21, 0
+	.dw 0x0cd3, 0xcc17,	0x0cff, 0xcc17,		0x21, 0
+	.dw 0x0d01, 0xcc17,	0x0d01, 0xcc17,		0x21, 0
+	.dw 0x0d03, 0xcc17,	0x0d0f, 0xcc17,		0x21, 0
+	.dw 0x0d11, 0xcc17,	0x0d11, 0xcc17,		0x21, 0
+	.dw 0x0d13, 0xcc17,	0x0d3f, 0xcc17,		0x21, 0
+	.dw 0x0d41, 0xcc17,	0x0d41, 0xcc17,		0x21, 0
+	.dw 0x0d43, 0xcc17,	0x0d4f, 0xcc17,		0x21, 0
+	.dw 0x0d51, 0xcc17,	0x0d51, 0xcc17,		0x21, 0
+	.dw 0x0d53, 0xcc17,	0x0d7f, 0xcc17,		0x21, 0
+	.dw 0x0d81, 0xcc17,	0x0d81, 0xcc17,		0x21, 0
+	.dw 0x0d83, 0xcc17,	0x0d8f, 0xcc17,		0x21, 0
+	.dw 0x0d91, 0xcc17,	0x0d91, 0xcc17,		0x21, 0
+	.dw 0x0d93, 0xcc17,	0x0dbf, 0xcc17,		0x21, 0
+	.dw 0x0dc1, 0xcc17,	0x0dc1, 0xcc17,		0x21, 0
+	.dw 0x0dc3, 0xcc17,	0x0dcf, 0xcc17,		0x21, 0
+	.dw 0x0dd1, 0xcc17,	0x0dd1, 0xcc17,		0x21, 0
+	.dw 0x0dd3, 0xcc17,	0x0dff, 0xcc17,		0x21, 0
+	.dw 0x0e01, 0xcc17,	0x0e01, 0xcc17,		0x21, 0
+	.dw 0x0e03, 0xcc17,	0x0e0f, 0xcc17,		0x21, 0
+	.dw 0x0e11, 0xcc17,	0x0e11, 0xcc17,		0x21, 0
+	.dw 0x0e13, 0xcc17,	0x0e3f, 0xcc17,		0x21, 0
+	.dw 0x0e41, 0xcc17,	0x0e41, 0xcc17,		0x21, 0
+	.dw 0x0e43, 0xcc17,	0x0e4f, 0xcc17,		0x21, 0
+	.dw 0x0e51, 0xcc17,	0x0e51, 0xcc17,		0x21, 0
+	.dw 0x0e53, 0xcc17,	0x0e7f, 0xcc17,		0x21, 0
+	.dw 0x0e81, 0xcc17,	0x0e81, 0xcc17,		0x21, 0
+	.dw 0x0e83, 0xcc17,	0x0e8f, 0xcc17,		0x21, 0
+	.dw 0x0e91, 0xcc17,	0x0e91, 0xcc17,		0x21, 0
+	.dw 0x0e93, 0xcc17,	0x0ebf, 0xcc17,		0x21, 0
+	.dw 0x0ec1, 0xcc17,	0x0ec1, 0xcc17,		0x21, 0
+	.dw 0x0ec3, 0xcc17,	0x0ecf, 0xcc17,		0x21, 0
+	.dw 0x0ed1, 0xcc17,	0x0ed1, 0xcc17,		0x21, 0
+	.dw 0x0ed3, 0xcc17,	0x0eff, 0xcc17,		0x21, 0
+	.dw 0x0f01, 0xcc17,	0x0f01, 0xcc17,		0x21, 0
+	.dw 0x0f03, 0xcc17,	0x0f0f, 0xcc17,		0x21, 0
+	.dw 0x0f11, 0xcc17,	0x0f11, 0xcc17,		0x21, 0
+	.dw 0x0f13, 0xcc17,	0x0f3f, 0xcc17,		0x21, 0
+	.dw 0x0f41, 0xcc17,	0x0f41, 0xcc17,		0x21, 0
+	.dw 0x0f43, 0xcc17,	0x0f4f, 0xcc17,		0x21, 0
+	.dw 0x0f51, 0xcc17,	0x0f51, 0xcc17,		0x21, 0
+	.dw 0x0f53, 0xcc17,	0x0f7f, 0xcc17,		0x21, 0
+	.dw 0x0f81, 0xcc17,	0x0f81, 0xcc17,		0x21, 0
+	.dw 0x0f83, 0xcc17,	0x0f8f, 0xcc17,		0x21, 0
+	.dw 0x0f91, 0xcc17,	0x0f91, 0xcc17,		0x21, 0
+	.dw 0x0f93, 0xcc17,	0x0fbf, 0xcc17,		0x21, 0
+	.dw 0x0fc1, 0xcc17,	0x0fc1, 0xcc17,		0x21, 0
+	.dw 0x0fc3, 0xcc17,	0x0fcf, 0xcc17,		0x21, 0
+	.dw 0x0fd1, 0xcc17,	0x0fd1, 0xcc17,		0x21, 0
+	.dw 0x0fd3, 0xcc17,	0x1fff, 0xcc17,		0x21, 0
+	.dw 0x2001, 0xcc17,	0x2001, 0xcc17,		0x21, 0
+	.dw 0x2003, 0xcc17,	0x200f, 0xcc17,		0x21, 0
+	.dw 0x2011, 0xcc17,	0x2011, 0xcc17,		0x21, 0
+	.dw 0x2013, 0xcc17,	0x203f, 0xcc17,		0x21, 0
+	.dw 0x2041, 0xcc17,	0x2041, 0xcc17,		0x21, 0
+	.dw 0x2043, 0xcc17,	0x204f, 0xcc17,		0x21, 0
+	.dw 0x2051, 0xcc17,	0x2051, 0xcc17,		0x21, 0
+	.dw 0x2053, 0xcc17,	0x207f, 0xcc17,		0x21, 0
+	.dw 0x2081, 0xcc17,	0x2081, 0xcc17,		0x21, 0
+	.dw 0x2083, 0xcc17,	0x208f, 0xcc17,		0x21, 0
+	.dw 0x2091, 0xcc17,	0x2091, 0xcc17,		0x21, 0
+	.dw 0x2093, 0xcc17,	0x20bf, 0xcc17,		0x21, 0
+	.dw 0x20c1, 0xcc17,	0x20c1, 0xcc17,		0x21, 0
+	.dw 0x20c3, 0xcc17,	0x20cf, 0xcc17,		0x21, 0
+	.dw 0x20d1, 0xcc17,	0x20d1, 0xcc17,		0x21, 0
+	.dw 0x20d3, 0xcc17,	0x20ff, 0xcc17,		0x21, 0
+	.dw 0x2101, 0xcc17,	0x2101, 0xcc17,		0x21, 0
+	.dw 0x2103, 0xcc17,	0x210f, 0xcc17,		0x21, 0
+	.dw 0x2111, 0xcc17,	0x2111, 0xcc17,		0x21, 0
+	.dw 0x2113, 0xcc17,	0x213f, 0xcc17,		0x21, 0
+	.dw 0x2141, 0xcc17,	0x2141, 0xcc17,		0x21, 0
+	.dw 0x2143, 0xcc17,	0x214f, 0xcc17,		0x21, 0
+	.dw 0x2151, 0xcc17,	0x2151, 0xcc17,		0x21, 0
+	.dw 0x2153, 0xcc17,	0x217f, 0xcc17,		0x21, 0
+	.dw 0x2181, 0xcc17,	0x2181, 0xcc17,		0x21, 0
+	.dw 0x2183, 0xcc17,	0x218f, 0xcc17,		0x21, 0
+	.dw 0x2191, 0xcc17,	0x2191, 0xcc17,		0x21, 0
+	.dw 0x2193, 0xcc17,	0x21bf, 0xcc17,		0x21, 0
+	.dw 0x21c1, 0xcc17,	0x21c1, 0xcc17,		0x21, 0
+	.dw 0x21c3, 0xcc17,	0x21cf, 0xcc17,		0x21, 0
+	.dw 0x21d1, 0xcc17,	0x21d1, 0xcc17,		0x21, 0
+	.dw 0x21d3, 0xcc17,	0x21ff, 0xcc17,		0x21, 0
+	.dw 0x2201, 0xcc17,	0x2201, 0xcc17,		0x21, 0
+	.dw 0x2203, 0xcc17,	0x220f, 0xcc17,		0x21, 0
+	.dw 0x2211, 0xcc17,	0x2211, 0xcc17,		0x21, 0
+	.dw 0x2213, 0xcc17,	0x223f, 0xcc17,		0x21, 0
+	.dw 0x2241, 0xcc17,	0x2241, 0xcc17,		0x21, 0
+	.dw 0x2243, 0xcc17,	0x224f, 0xcc17,		0x21, 0
+	.dw 0x2251, 0xcc17,	0x2251, 0xcc17,		0x21, 0
+	.dw 0x2253, 0xcc17,	0x227f, 0xcc17,		0x21, 0
+	.dw 0x2281, 0xcc17,	0x2281, 0xcc17,		0x21, 0
+	.dw 0x2283, 0xcc17,	0x228f, 0xcc17,		0x21, 0
+	.dw 0x2291, 0xcc17,	0x2291, 0xcc17,		0x21, 0
+	.dw 0x2293, 0xcc17,	0x22bf, 0xcc17,		0x21, 0
+	.dw 0x22c1, 0xcc17,	0x22c1, 0xcc17,		0x21, 0
+	.dw 0x22c3, 0xcc17,	0x22cf, 0xcc17,		0x21, 0
+	.dw 0x22d1, 0xcc17,	0x22d1, 0xcc17,		0x21, 0
+	.dw 0x22d3, 0xcc17,	0x22ff, 0xcc17,		0x21, 0
+	.dw 0x2301, 0xcc17,	0x2301, 0xcc17,		0x21, 0
+	.dw 0x2303, 0xcc17,	0x230f, 0xcc17,		0x21, 0
+	.dw 0x2311, 0xcc17,	0x2311, 0xcc17,		0x21, 0
+	.dw 0x2313, 0xcc17,	0x233f, 0xcc17,		0x21, 0
+	.dw 0x2341, 0xcc17,	0x2341, 0xcc17,		0x21, 0
+	.dw 0x2343, 0xcc17,	0x234f, 0xcc17,		0x21, 0
+	.dw 0x2351, 0xcc17,	0x2351, 0xcc17,		0x21, 0
+	.dw 0x2353, 0xcc17,	0x237f, 0xcc17,		0x21, 0
+	.dw 0x2381, 0xcc17,	0x2381, 0xcc17,		0x21, 0
+	.dw 0x2383, 0xcc17,	0x238f, 0xcc17,		0x21, 0
+	.dw 0x2391, 0xcc17,	0x2391, 0xcc17,		0x21, 0
+	.dw 0x2393, 0xcc17,	0x23bf, 0xcc17,		0x21, 0
+	.dw 0x23c1, 0xcc17,	0x23c1, 0xcc17,		0x21, 0
+	.dw 0x23c3, 0xcc17,	0x23cf, 0xcc17,		0x21, 0
+	.dw 0x23d1, 0xcc17,	0x23d1, 0xcc17,		0x21, 0
+	.dw 0x23d3, 0xcc17,	0x23ff, 0xcc17,		0x21, 0
+	.dw 0x2401, 0xcc17,	0x2401, 0xcc17,		0x21, 0
+	.dw 0x2403, 0xcc17,	0x240f, 0xcc17,		0x21, 0
+	.dw 0x2411, 0xcc17,	0x2411, 0xcc17,		0x21, 0
+	.dw 0x2413, 0xcc17,	0x243f, 0xcc17,		0x21, 0
+	.dw 0x2441, 0xcc17,	0x2441, 0xcc17,		0x21, 0
+	.dw 0x2443, 0xcc17,	0x244f, 0xcc17,		0x21, 0
+	.dw 0x2451, 0xcc17,	0x2451, 0xcc17,		0x21, 0
+	.dw 0x2453, 0xcc17,	0x247f, 0xcc17,		0x21, 0
+	.dw 0x2481, 0xcc17,	0x2481, 0xcc17,		0x21, 0
+	.dw 0x2483, 0xcc17,	0x248f, 0xcc17,		0x21, 0
+	.dw 0x2491, 0xcc17,	0x2491, 0xcc17,		0x21, 0
+	.dw 0x2493, 0xcc17,	0x24bf, 0xcc17,		0x21, 0
+	.dw 0x24c1, 0xcc17,	0x24c1, 0xcc17,		0x21, 0
+	.dw 0x24c3, 0xcc17,	0x24cf, 0xcc17,		0x21, 0
+	.dw 0x24d1, 0xcc17,	0x24d1, 0xcc17,		0x21, 0
+	.dw 0x24d3, 0xcc17,	0x24ff, 0xcc17,		0x21, 0
+	.dw 0x2501, 0xcc17,	0x2501, 0xcc17,		0x21, 0
+	.dw 0x2503, 0xcc17,	0x250f, 0xcc17,		0x21, 0
+	.dw 0x2511, 0xcc17,	0x2511, 0xcc17,		0x21, 0
+	.dw 0x2513, 0xcc17,	0x253f, 0xcc17,		0x21, 0
+	.dw 0x2541, 0xcc17,	0x2541, 0xcc17,		0x21, 0
+	.dw 0x2543, 0xcc17,	0x254f, 0xcc17,		0x21, 0
+	.dw 0x2551, 0xcc17,	0x2551, 0xcc17,		0x21, 0
+	.dw 0x2553, 0xcc17,	0x257f, 0xcc17,		0x21, 0
+	.dw 0x2581, 0xcc17,	0x2581, 0xcc17,		0x21, 0
+	.dw 0x2583, 0xcc17,	0x258f, 0xcc17,		0x21, 0
+	.dw 0x2591, 0xcc17,	0x2591, 0xcc17,		0x21, 0
+	.dw 0x2593, 0xcc17,	0x25bf, 0xcc17,		0x21, 0
+	.dw 0x25c1, 0xcc17,	0x25c1, 0xcc17,		0x21, 0
+	.dw 0x25c3, 0xcc17,	0x25cf, 0xcc17,		0x21, 0
+	.dw 0x25d1, 0xcc17,	0x25d1, 0xcc17,		0x21, 0
+	.dw 0x25d3, 0xcc17,	0x25ff, 0xcc17,		0x21, 0
+	.dw 0x2601, 0xcc17,	0x2601, 0xcc17,		0x21, 0
+	.dw 0x2603, 0xcc17,	0x260f, 0xcc17,		0x21, 0
+	.dw 0x2611, 0xcc17,	0x2611, 0xcc17,		0x21, 0
+	.dw 0x2613, 0xcc17,	0x263f, 0xcc17,		0x21, 0
+	.dw 0x2641, 0xcc17,	0x2641, 0xcc17,		0x21, 0
+	.dw 0x2643, 0xcc17,	0x264f, 0xcc17,		0x21, 0
+	.dw 0x2651, 0xcc17,	0x2651, 0xcc17,		0x21, 0
+	.dw 0x2653, 0xcc17,	0x267f, 0xcc17,		0x21, 0
+	.dw 0x2681, 0xcc17,	0x2681, 0xcc17,		0x21, 0
+	.dw 0x2683, 0xcc17,	0x268f, 0xcc17,		0x21, 0
+	.dw 0x2691, 0xcc17,	0x2691, 0xcc17,		0x21, 0
+	.dw 0x2693, 0xcc17,	0x26bf, 0xcc17,		0x21, 0
+	.dw 0x26c1, 0xcc17,	0x26c1, 0xcc17,		0x21, 0
+	.dw 0x26c3, 0xcc17,	0x26cf, 0xcc17,		0x21, 0
+	.dw 0x26d1, 0xcc17,	0x26d1, 0xcc17,		0x21, 0
+	.dw 0x26d3, 0xcc17,	0x26ff, 0xcc17,		0x21, 0
+	.dw 0x2701, 0xcc17,	0x2701, 0xcc17,		0x21, 0
+	.dw 0x2703, 0xcc17,	0x270f, 0xcc17,		0x21, 0
+	.dw 0x2711, 0xcc17,	0x2711, 0xcc17,		0x21, 0
+	.dw 0x2713, 0xcc17,	0x273f, 0xcc17,		0x21, 0
+	.dw 0x2741, 0xcc17,	0x2741, 0xcc17,		0x21, 0
+	.dw 0x2743, 0xcc17,	0x274f, 0xcc17,		0x21, 0
+	.dw 0x2751, 0xcc17,	0x2751, 0xcc17,		0x21, 0
+	.dw 0x2753, 0xcc17,	0x277f, 0xcc17,		0x21, 0
+	.dw 0x2781, 0xcc17,	0x2781, 0xcc17,		0x21, 0
+	.dw 0x2783, 0xcc17,	0x278f, 0xcc17,		0x21, 0
+	.dw 0x2791, 0xcc17,	0x2791, 0xcc17,		0x21, 0
+	.dw 0x2793, 0xcc17,	0x27bf, 0xcc17,		0x21, 0
+	.dw 0x27c1, 0xcc17,	0x27c1, 0xcc17,		0x21, 0
+	.dw 0x27c3, 0xcc17,	0x27cf, 0xcc17,		0x21, 0
+	.dw 0x27d1, 0xcc17,	0x27d1, 0xcc17,		0x21, 0
+	.dw 0x27d3, 0xcc17,	0x27ff, 0xcc17,		0x21, 0
+	.dw 0x2801, 0xcc17,	0x2801, 0xcc17,		0x21, 0
+	.dw 0x2803, 0xcc17,	0x280f, 0xcc17,		0x21, 0
+	.dw 0x2811, 0xcc17,	0x2811, 0xcc17,		0x21, 0
+	.dw 0x2813, 0xcc17,	0x283f, 0xcc17,		0x21, 0
+	.dw 0x2841, 0xcc17,	0x2841, 0xcc17,		0x21, 0
+	.dw 0x2843, 0xcc17,	0x284f, 0xcc17,		0x21, 0
+	.dw 0x2851, 0xcc17,	0x2851, 0xcc17,		0x21, 0
+	.dw 0x2853, 0xcc17,	0x287f, 0xcc17,		0x21, 0
+	.dw 0x2881, 0xcc17,	0x2881, 0xcc17,		0x21, 0
+	.dw 0x2883, 0xcc17,	0x288f, 0xcc17,		0x21, 0
+	.dw 0x2891, 0xcc17,	0x2891, 0xcc17,		0x21, 0
+	.dw 0x2893, 0xcc17,	0x28bf, 0xcc17,		0x21, 0
+	.dw 0x28c1, 0xcc17,	0x28c1, 0xcc17,		0x21, 0
+	.dw 0x28c3, 0xcc17,	0x28cf, 0xcc17,		0x21, 0
+	.dw 0x28d1, 0xcc17,	0x28d1, 0xcc17,		0x21, 0
+	.dw 0x28d3, 0xcc17,	0x28ff, 0xcc17,		0x21, 0
+	.dw 0x2901, 0xcc17,	0x2901, 0xcc17,		0x21, 0
+	.dw 0x2903, 0xcc17,	0x290f, 0xcc17,		0x21, 0
+	.dw 0x2911, 0xcc17,	0x2911, 0xcc17,		0x21, 0
+	.dw 0x2913, 0xcc17,	0x293f, 0xcc17,		0x21, 0
+	.dw 0x2941, 0xcc17,	0x2941, 0xcc17,		0x21, 0
+	.dw 0x2943, 0xcc17,	0x294f, 0xcc17,		0x21, 0
+	.dw 0x2951, 0xcc17,	0x2951, 0xcc17,		0x21, 0
+	.dw 0x2953, 0xcc17,	0x297f, 0xcc17,		0x21, 0
+	.dw 0x2981, 0xcc17,	0x2981, 0xcc17,		0x21, 0
+	.dw 0x2983, 0xcc17,	0x298f, 0xcc17,		0x21, 0
+	.dw 0x2991, 0xcc17,	0x2991, 0xcc17,		0x21, 0
+	.dw 0x2993, 0xcc17,	0x29bf, 0xcc17,		0x21, 0
+	.dw 0x29c1, 0xcc17,	0x29c1, 0xcc17,		0x21, 0
+	.dw 0x29c3, 0xcc17,	0x29cf, 0xcc17,		0x21, 0
+	.dw 0x29d1, 0xcc17,	0x29d1, 0xcc17,		0x21, 0
+	.dw 0x29d3, 0xcc17,	0x29ff, 0xcc17,		0x21, 0
+	.dw 0x2a01, 0xcc17,	0x2a01, 0xcc17,		0x21, 0
+	.dw 0x2a03, 0xcc17,	0x2a0f, 0xcc17,		0x21, 0
+	.dw 0x2a11, 0xcc17,	0x2a11, 0xcc17,		0x21, 0
+	.dw 0x2a13, 0xcc17,	0x2a3f, 0xcc17,		0x21, 0
+	.dw 0x2a41, 0xcc17,	0x2a41, 0xcc17,		0x21, 0
+	.dw 0x2a43, 0xcc17,	0x2a4f, 0xcc17,		0x21, 0
+	.dw 0x2a51, 0xcc17,	0x2a51, 0xcc17,		0x21, 0
+	.dw 0x2a53, 0xcc17,	0x2a7f, 0xcc17,		0x21, 0
+	.dw 0x2a81, 0xcc17,	0x2a81, 0xcc17,		0x21, 0
+	.dw 0x2a83, 0xcc17,	0x2a8f, 0xcc17,		0x21, 0
+	.dw 0x2a91, 0xcc17,	0x2a91, 0xcc17,		0x21, 0
+	.dw 0x2a93, 0xcc17,	0x2abf, 0xcc17,		0x21, 0
+	.dw 0x2ac1, 0xcc17,	0x2ac1, 0xcc17,		0x21, 0
+	.dw 0x2ac3, 0xcc17,	0x2acf, 0xcc17,		0x21, 0
+	.dw 0x2ad1, 0xcc17,	0x2ad1, 0xcc17,		0x21, 0
+	.dw 0x2ad3, 0xcc17,	0x2aff, 0xcc17,		0x21, 0
+	.dw 0x2b01, 0xcc17,	0x2b01, 0xcc17,		0x21, 0
+	.dw 0x2b03, 0xcc17,	0x2b0f, 0xcc17,		0x21, 0
+	.dw 0x2b11, 0xcc17,	0x2b11, 0xcc17,		0x21, 0
+	.dw 0x2b13, 0xcc17,	0x2b3f, 0xcc17,		0x21, 0
+	.dw 0x2b41, 0xcc17,	0x2b41, 0xcc17,		0x21, 0
+	.dw 0x2b43, 0xcc17,	0x2b4f, 0xcc17,		0x21, 0
+	.dw 0x2b51, 0xcc17,	0x2b51, 0xcc17,		0x21, 0
+	.dw 0x2b53, 0xcc17,	0x2b7f, 0xcc17,		0x21, 0
+	.dw 0x2b81, 0xcc17,	0x2b81, 0xcc17,		0x21, 0
+	.dw 0x2b83, 0xcc17,	0x2b8f, 0xcc17,		0x21, 0
+	.dw 0x2b91, 0xcc17,	0x2b91, 0xcc17,		0x21, 0
+	.dw 0x2b93, 0xcc17,	0x2bbf, 0xcc17,		0x21, 0
+	.dw 0x2bc1, 0xcc17,	0x2bc1, 0xcc17,		0x21, 0
+	.dw 0x2bc3, 0xcc17,	0x2bcf, 0xcc17,		0x21, 0
+	.dw 0x2bd1, 0xcc17,	0x2bd1, 0xcc17,		0x21, 0
+	.dw 0x2bd3, 0xcc17,	0x2bff, 0xcc17,		0x21, 0
+	.dw 0x2c01, 0xcc17,	0x2c01, 0xcc17,		0x21, 0
+	.dw 0x2c03, 0xcc17,	0x2c0f, 0xcc17,		0x21, 0
+	.dw 0x2c11, 0xcc17,	0x2c11, 0xcc17,		0x21, 0
+	.dw 0x2c13, 0xcc17,	0x2c3f, 0xcc17,		0x21, 0
+	.dw 0x2c41, 0xcc17,	0x2c41, 0xcc17,		0x21, 0
+	.dw 0x2c43, 0xcc17,	0x2c4f, 0xcc17,		0x21, 0
+	.dw 0x2c51, 0xcc17,	0x2c51, 0xcc17,		0x21, 0
+	.dw 0x2c53, 0xcc17,	0x2c7f, 0xcc17,		0x21, 0
+	.dw 0x2c81, 0xcc17,	0x2c81, 0xcc17,		0x21, 0
+	.dw 0x2c83, 0xcc17,	0x2c8f, 0xcc17,		0x21, 0
+	.dw 0x2c91, 0xcc17,	0x2c91, 0xcc17,		0x21, 0
+	.dw 0x2c93, 0xcc17,	0x2cbf, 0xcc17,		0x21, 0
+	.dw 0x2cc1, 0xcc17,	0x2cc1, 0xcc17,		0x21, 0
+	.dw 0x2cc3, 0xcc17,	0x2ccf, 0xcc17,		0x21, 0
+	.dw 0x2cd1, 0xcc17,	0x2cd1, 0xcc17,		0x21, 0
+	.dw 0x2cd3, 0xcc17,	0x2cff, 0xcc17,		0x21, 0
+	.dw 0x2d01, 0xcc17,	0x2d01, 0xcc17,		0x21, 0
+	.dw 0x2d03, 0xcc17,	0x2d0f, 0xcc17,		0x21, 0
+	.dw 0x2d11, 0xcc17,	0x2d11, 0xcc17,		0x21, 0
+	.dw 0x2d13, 0xcc17,	0x2d3f, 0xcc17,		0x21, 0
+	.dw 0x2d41, 0xcc17,	0x2d41, 0xcc17,		0x21, 0
+	.dw 0x2d43, 0xcc17,	0x2d4f, 0xcc17,		0x21, 0
+	.dw 0x2d51, 0xcc17,	0x2d51, 0xcc17,		0x21, 0
+	.dw 0x2d53, 0xcc17,	0x2d7f, 0xcc17,		0x21, 0
+	.dw 0x2d81, 0xcc17,	0x2d81, 0xcc17,		0x21, 0
+	.dw 0x2d83, 0xcc17,	0x2d8f, 0xcc17,		0x21, 0
+	.dw 0x2d91, 0xcc17,	0x2d91, 0xcc17,		0x21, 0
+	.dw 0x2d93, 0xcc17,	0x2dbf, 0xcc17,		0x21, 0
+	.dw 0x2dc1, 0xcc17,	0x2dc1, 0xcc17,		0x21, 0
+	.dw 0x2dc3, 0xcc17,	0x2dcf, 0xcc17,		0x21, 0
+	.dw 0x2dd1, 0xcc17,	0x2dd1, 0xcc17,		0x21, 0
+	.dw 0x2dd3, 0xcc17,	0x2dff, 0xcc17,		0x21, 0
+	.dw 0x2e01, 0xcc17,	0x2e01, 0xcc17,		0x21, 0
+	.dw 0x2e03, 0xcc17,	0x2e0f, 0xcc17,		0x21, 0
+	.dw 0x2e11, 0xcc17,	0x2e11, 0xcc17,		0x21, 0
+	.dw 0x2e13, 0xcc17,	0x2e3f, 0xcc17,		0x21, 0
+	.dw 0x2e41, 0xcc17,	0x2e41, 0xcc17,		0x21, 0
+	.dw 0x2e43, 0xcc17,	0x2e4f, 0xcc17,		0x21, 0
+	.dw 0x2e51, 0xcc17,	0x2e51, 0xcc17,		0x21, 0
+	.dw 0x2e53, 0xcc17,	0x2e7f, 0xcc17,		0x21, 0
+	.dw 0x2e81, 0xcc17,	0x2e81, 0xcc17,		0x21, 0
+	.dw 0x2e83, 0xcc17,	0x2e8f, 0xcc17,		0x21, 0
+	.dw 0x2e91, 0xcc17,	0x2e91, 0xcc17,		0x21, 0
+	.dw 0x2e93, 0xcc17,	0x2ebf, 0xcc17,		0x21, 0
+	.dw 0x2ec1, 0xcc17,	0x2ec1, 0xcc17,		0x21, 0
+	.dw 0x2ec3, 0xcc17,	0x2ecf, 0xcc17,		0x21, 0
+	.dw 0x2ed1, 0xcc17,	0x2ed1, 0xcc17,		0x21, 0
+	.dw 0x2ed3, 0xcc17,	0x2eff, 0xcc17,		0x21, 0
+	.dw 0x2f01, 0xcc17,	0x2f01, 0xcc17,		0x21, 0
+	.dw 0x2f03, 0xcc17,	0x2f0f, 0xcc17,		0x21, 0
+	.dw 0x2f11, 0xcc17,	0x2f11, 0xcc17,		0x21, 0
+	.dw 0x2f13, 0xcc17,	0x2f3f, 0xcc17,		0x21, 0
+	.dw 0x2f41, 0xcc17,	0x2f41, 0xcc17,		0x21, 0
+	.dw 0x2f43, 0xcc17,	0x2f4f, 0xcc17,		0x21, 0
+	.dw 0x2f51, 0xcc17,	0x2f51, 0xcc17,		0x21, 0
+	.dw 0x2f53, 0xcc17,	0x2f7f, 0xcc17,		0x21, 0
+	.dw 0x2f81, 0xcc17,	0x2f81, 0xcc17,		0x21, 0
+	.dw 0x2f83, 0xcc17,	0x2f8f, 0xcc17,		0x21, 0
+	.dw 0x2f91, 0xcc17,	0x2f91, 0xcc17,		0x21, 0
+	.dw 0x2f93, 0xcc17,	0x2fbf, 0xcc17,		0x21, 0
+	.dw 0x2fc1, 0xcc17,	0x2fc1, 0xcc17,		0x21, 0
+	.dw 0x2fc3, 0xcc17,	0x2fcf, 0xcc17,		0x21, 0
+	.dw 0x2fd1, 0xcc17,	0x2fd1, 0xcc17,		0x21, 0
+	.dw 0x2fd3, 0xcc17,	0xffff, 0xcc17,		0x21, 0
+	.dw 0x1000, 0xcc18,	0x3fff, 0xcc18,		0x21, 0
+	.dw 0x4000, 0xcc18,	0x4000, 0xcc18,		0x22, 0
+	.dw 0x4001, 0xcc18,	0x4001, 0xcc18,		0x21, 0
+	.dw 0x4002, 0xcc18,	0x4002, 0xcc18,		0x22, 0
+	.dw 0x4003, 0xcc18,	0x400f, 0xcc18,		0x21, 0
+	.dw 0x4010, 0xcc18,	0x4010, 0xcc18,		0x22, 0
+	.dw 0x4011, 0xcc18,	0x4011, 0xcc18,		0x21, 0
+	.dw 0x4012, 0xcc18,	0x4012, 0xcc18,		0x22, 0
+	.dw 0x4013, 0xcc18,	0x403f, 0xcc18,		0x21, 0
+	.dw 0x4041, 0xcc18,	0x4041, 0xcc18,		0x21, 0
+	.dw 0x4043, 0xcc18,	0x404f, 0xcc18,		0x21, 0
+	.dw 0x4051, 0xcc18,	0x4051, 0xcc18,		0x21, 0
+	.dw 0x4053, 0xcc18,	0x407f, 0xcc18,		0x21, 0
+	.dw 0x4081, 0xcc18,	0x4081, 0xcc18,		0x21, 0
+	.dw 0x4083, 0xcc18,	0x408f, 0xcc18,		0x21, 0
+	.dw 0x4091, 0xcc18,	0x4091, 0xcc18,		0x21, 0
+	.dw 0x4093, 0xcc18,	0x40bf, 0xcc18,		0x21, 0
+	.dw 0x40c1, 0xcc18,	0x40c1, 0xcc18,		0x21, 0
+	.dw 0x40c3, 0xcc18,	0x40cf, 0xcc18,		0x21, 0
+	.dw 0x40d1, 0xcc18,	0x40d1, 0xcc18,		0x21, 0
+	.dw 0x40d3, 0xcc18,	0x40ff, 0xcc18,		0x21, 0
+	.dw 0x4101, 0xcc18,	0x4101, 0xcc18,		0x21, 0
+	.dw 0x4103, 0xcc18,	0x410f, 0xcc18,		0x21, 0
+	.dw 0x4111, 0xcc18,	0x4111, 0xcc18,		0x21, 0
+	.dw 0x4113, 0xcc18,	0x413f, 0xcc18,		0x21, 0
+	.dw 0x4141, 0xcc18,	0x4141, 0xcc18,		0x21, 0
+	.dw 0x4143, 0xcc18,	0x414f, 0xcc18,		0x21, 0
+	.dw 0x4151, 0xcc18,	0x4151, 0xcc18,		0x21, 0
+	.dw 0x4153, 0xcc18,	0x417f, 0xcc18,		0x21, 0
+	.dw 0x4181, 0xcc18,	0x4181, 0xcc18,		0x21, 0
+	.dw 0x4183, 0xcc18,	0x418f, 0xcc18,		0x21, 0
+	.dw 0x4191, 0xcc18,	0x4191, 0xcc18,		0x21, 0
+	.dw 0x4193, 0xcc18,	0x41bf, 0xcc18,		0x21, 0
+	.dw 0x41c1, 0xcc18,	0x41c1, 0xcc18,		0x21, 0
+	.dw 0x41c3, 0xcc18,	0x41cf, 0xcc18,		0x21, 0
+	.dw 0x41d1, 0xcc18,	0x41d1, 0xcc18,		0x21, 0
+	.dw 0x41d3, 0xcc18,	0x41ff, 0xcc18,		0x21, 0
+	.dw 0x4201, 0xcc18,	0x4201, 0xcc18,		0x21, 0
+	.dw 0x4203, 0xcc18,	0x420f, 0xcc18,		0x21, 0
+	.dw 0x4211, 0xcc18,	0x4211, 0xcc18,		0x21, 0
+	.dw 0x4213, 0xcc18,	0x423f, 0xcc18,		0x21, 0
+	.dw 0x4240, 0xcc18,	0x4240, 0xcc18,		0x22, 0
+	.dw 0x4241, 0xcc18,	0x4241, 0xcc18,		0x21, 0
+	.dw 0x4242, 0xcc18,	0x4242, 0xcc18,		0x22, 0
+	.dw 0x4243, 0xcc18,	0x424f, 0xcc18,		0x21, 0
+	.dw 0x4250, 0xcc18,	0x4250, 0xcc18,		0x22, 0
+	.dw 0x4251, 0xcc18,	0x4251, 0xcc18,		0x21, 0
+	.dw 0x4252, 0xcc18,	0x4252, 0xcc18,		0x22, 0
+	.dw 0x4253, 0xcc18,	0x427f, 0xcc18,		0x21, 0
+	.dw 0x4281, 0xcc18,	0x4281, 0xcc18,		0x21, 0
+	.dw 0x4283, 0xcc18,	0x428f, 0xcc18,		0x21, 0
+	.dw 0x4291, 0xcc18,	0x4291, 0xcc18,		0x21, 0
+	.dw 0x4293, 0xcc18,	0x42bf, 0xcc18,		0x21, 0
+	.dw 0x42c1, 0xcc18,	0x42c1, 0xcc18,		0x21, 0
+	.dw 0x42c3, 0xcc18,	0x42cf, 0xcc18,		0x21, 0
+	.dw 0x42d1, 0xcc18,	0x42d1, 0xcc18,		0x21, 0
+	.dw 0x42d3, 0xcc18,	0x42ff, 0xcc18,		0x21, 0
+	.dw 0x4301, 0xcc18,	0x4301, 0xcc18,		0x21, 0
+	.dw 0x4303, 0xcc18,	0x430f, 0xcc18,		0x21, 0
+	.dw 0x4311, 0xcc18,	0x4311, 0xcc18,		0x21, 0
+	.dw 0x4313, 0xcc18,	0x433f, 0xcc18,		0x21, 0
+	.dw 0x4341, 0xcc18,	0x4341, 0xcc18,		0x21, 0
+	.dw 0x4343, 0xcc18,	0x434f, 0xcc18,		0x21, 0
+	.dw 0x4351, 0xcc18,	0x4351, 0xcc18,		0x21, 0
+	.dw 0x4353, 0xcc18,	0x437f, 0xcc18,		0x21, 0
+	.dw 0x4381, 0xcc18,	0x4381, 0xcc18,		0x21, 0
+	.dw 0x4383, 0xcc18,	0x438f, 0xcc18,		0x21, 0
+	.dw 0x4391, 0xcc18,	0x4391, 0xcc18,		0x21, 0
+	.dw 0x4393, 0xcc18,	0x43bf, 0xcc18,		0x21, 0
+	.dw 0x43c1, 0xcc18,	0x43c1, 0xcc18,		0x21, 0
+	.dw 0x43c3, 0xcc18,	0x43cf, 0xcc18,		0x21, 0
+	.dw 0x43d1, 0xcc18,	0x43d1, 0xcc18,		0x21, 0
+	.dw 0x43d3, 0xcc18,	0x43ff, 0xcc18,		0x21, 0
+	.dw 0x4401, 0xcc18,	0x4401, 0xcc18,		0x21, 0
+	.dw 0x4403, 0xcc18,	0x440f, 0xcc18,		0x21, 0
+	.dw 0x4411, 0xcc18,	0x4411, 0xcc18,		0x21, 0
+	.dw 0x4413, 0xcc18,	0x443f, 0xcc18,		0x21, 0
+	.dw 0x4441, 0xcc18,	0x4441, 0xcc18,		0x21, 0
+	.dw 0x4443, 0xcc18,	0x444f, 0xcc18,		0x21, 0
+	.dw 0x4451, 0xcc18,	0x4451, 0xcc18,		0x21, 0
+	.dw 0x4453, 0xcc18,	0x447f, 0xcc18,		0x21, 0
+	.dw 0x4480, 0xcc18,	0x4480, 0xcc18,		0x22, 0
+	.dw 0x4481, 0xcc18,	0x4481, 0xcc18,		0x21, 0
+	.dw 0x4482, 0xcc18,	0x4482, 0xcc18,		0x22, 0
+	.dw 0x4483, 0xcc18,	0x448f, 0xcc18,		0x21, 0
+	.dw 0x4490, 0xcc18,	0x4490, 0xcc18,		0x22, 0
+	.dw 0x4491, 0xcc18,	0x4491, 0xcc18,		0x21, 0
+	.dw 0x4492, 0xcc18,	0x4492, 0xcc18,		0x22, 0
+	.dw 0x4493, 0xcc18,	0x44bf, 0xcc18,		0x21, 0
+	.dw 0x44c1, 0xcc18,	0x44c1, 0xcc18,		0x21, 0
+	.dw 0x44c3, 0xcc18,	0x44cf, 0xcc18,		0x21, 0
+	.dw 0x44d1, 0xcc18,	0x44d1, 0xcc18,		0x21, 0
+	.dw 0x44d3, 0xcc18,	0x44ff, 0xcc18,		0x21, 0
+	.dw 0x4501, 0xcc18,	0x4501, 0xcc18,		0x21, 0
+	.dw 0x4503, 0xcc18,	0x450f, 0xcc18,		0x21, 0
+	.dw 0x4511, 0xcc18,	0x4511, 0xcc18,		0x21, 0
+	.dw 0x4513, 0xcc18,	0x453f, 0xcc18,		0x21, 0
+	.dw 0x4541, 0xcc18,	0x4541, 0xcc18,		0x21, 0
+	.dw 0x4543, 0xcc18,	0x454f, 0xcc18,		0x21, 0
+	.dw 0x4551, 0xcc18,	0x4551, 0xcc18,		0x21, 0
+	.dw 0x4553, 0xcc18,	0x457f, 0xcc18,		0x21, 0
+	.dw 0x4581, 0xcc18,	0x4581, 0xcc18,		0x21, 0
+	.dw 0x4583, 0xcc18,	0x458f, 0xcc18,		0x21, 0
+	.dw 0x4591, 0xcc18,	0x4591, 0xcc18,		0x21, 0
+	.dw 0x4593, 0xcc18,	0x45bf, 0xcc18,		0x21, 0
+	.dw 0x45c1, 0xcc18,	0x45c1, 0xcc18,		0x21, 0
+	.dw 0x45c3, 0xcc18,	0x45cf, 0xcc18,		0x21, 0
+	.dw 0x45d1, 0xcc18,	0x45d1, 0xcc18,		0x21, 0
+	.dw 0x45d3, 0xcc18,	0x45ff, 0xcc18,		0x21, 0
+	.dw 0x4601, 0xcc18,	0x4601, 0xcc18,		0x21, 0
+	.dw 0x4603, 0xcc18,	0x460f, 0xcc18,		0x21, 0
+	.dw 0x4611, 0xcc18,	0x4611, 0xcc18,		0x21, 0
+	.dw 0x4613, 0xcc18,	0x463f, 0xcc18,		0x21, 0
+	.dw 0x4641, 0xcc18,	0x4641, 0xcc18,		0x21, 0
+	.dw 0x4643, 0xcc18,	0x464f, 0xcc18,		0x21, 0
+	.dw 0x4651, 0xcc18,	0x4651, 0xcc18,		0x21, 0
+	.dw 0x4653, 0xcc18,	0x467f, 0xcc18,		0x21, 0
+	.dw 0x4681, 0xcc18,	0x4681, 0xcc18,		0x21, 0
+	.dw 0x4683, 0xcc18,	0x468f, 0xcc18,		0x21, 0
+	.dw 0x4691, 0xcc18,	0x4691, 0xcc18,		0x21, 0
+	.dw 0x4693, 0xcc18,	0x46bf, 0xcc18,		0x21, 0
+	.dw 0x46c0, 0xcc18,	0x46c0, 0xcc18,		0x22, 0
+	.dw 0x46c1, 0xcc18,	0x46c1, 0xcc18,		0x21, 0
+	.dw 0x46c2, 0xcc18,	0x46c2, 0xcc18,		0x22, 0
+	.dw 0x46c3, 0xcc18,	0x46cf, 0xcc18,		0x21, 0
+	.dw 0x46d0, 0xcc18,	0x46d0, 0xcc18,		0x22, 0
+	.dw 0x46d1, 0xcc18,	0x46d1, 0xcc18,		0x21, 0
+	.dw 0x46d2, 0xcc18,	0x46d2, 0xcc18,		0x22, 0
+	.dw 0x46d3, 0xcc18,	0x46ff, 0xcc18,		0x21, 0
+	.dw 0x4701, 0xcc18,	0x4701, 0xcc18,		0x21, 0
+	.dw 0x4703, 0xcc18,	0x470f, 0xcc18,		0x21, 0
+	.dw 0x4711, 0xcc18,	0x4711, 0xcc18,		0x21, 0
+	.dw 0x4713, 0xcc18,	0x473f, 0xcc18,		0x21, 0
+	.dw 0x4741, 0xcc18,	0x4741, 0xcc18,		0x21, 0
+	.dw 0x4743, 0xcc18,	0x474f, 0xcc18,		0x21, 0
+	.dw 0x4751, 0xcc18,	0x4751, 0xcc18,		0x21, 0
+	.dw 0x4753, 0xcc18,	0x477f, 0xcc18,		0x21, 0
+	.dw 0x4781, 0xcc18,	0x4781, 0xcc18,		0x21, 0
+	.dw 0x4783, 0xcc18,	0x478f, 0xcc18,		0x21, 0
+	.dw 0x4791, 0xcc18,	0x4791, 0xcc18,		0x21, 0
+	.dw 0x4793, 0xcc18,	0x47bf, 0xcc18,		0x21, 0
+	.dw 0x47c1, 0xcc18,	0x47c1, 0xcc18,		0x21, 0
+	.dw 0x47c3, 0xcc18,	0x47cf, 0xcc18,		0x21, 0
+	.dw 0x47d1, 0xcc18,	0x47d1, 0xcc18,		0x21, 0
+	.dw 0x47d3, 0xcc18,	0x47ff, 0xcc18,		0x21, 0
+	.dw 0x4801, 0xcc18,	0x4801, 0xcc18,		0x21, 0
+	.dw 0x4803, 0xcc18,	0x480f, 0xcc18,		0x21, 0
+	.dw 0x4811, 0xcc18,	0x4811, 0xcc18,		0x21, 0
+	.dw 0x4813, 0xcc18,	0x483f, 0xcc18,		0x21, 0
+	.dw 0x4841, 0xcc18,	0x4841, 0xcc18,		0x21, 0
+	.dw 0x4843, 0xcc18,	0x484f, 0xcc18,		0x21, 0
+	.dw 0x4851, 0xcc18,	0x4851, 0xcc18,		0x21, 0
+	.dw 0x4853, 0xcc18,	0x487f, 0xcc18,		0x21, 0
+	.dw 0x4881, 0xcc18,	0x4881, 0xcc18,		0x21, 0
+	.dw 0x4883, 0xcc18,	0x488f, 0xcc18,		0x21, 0
+	.dw 0x4891, 0xcc18,	0x4891, 0xcc18,		0x21, 0
+	.dw 0x4893, 0xcc18,	0x48bf, 0xcc18,		0x21, 0
+	.dw 0x48c1, 0xcc18,	0x48c1, 0xcc18,		0x21, 0
+	.dw 0x48c3, 0xcc18,	0x48cf, 0xcc18,		0x21, 0
+	.dw 0x48d1, 0xcc18,	0x48d1, 0xcc18,		0x21, 0
+	.dw 0x48d3, 0xcc18,	0x48ff, 0xcc18,		0x21, 0
+	.dw 0x4900, 0xcc18,	0x4900, 0xcc18,		0x22, 0
+	.dw 0x4901, 0xcc18,	0x4901, 0xcc18,		0x21, 0
+	.dw 0x4902, 0xcc18,	0x4902, 0xcc18,		0x22, 0
+	.dw 0x4903, 0xcc18,	0x490f, 0xcc18,		0x21, 0
+	.dw 0x4910, 0xcc18,	0x4910, 0xcc18,		0x22, 0
+	.dw 0x4911, 0xcc18,	0x4911, 0xcc18,		0x21, 0
+	.dw 0x4912, 0xcc18,	0x4912, 0xcc18,		0x22, 0
+	.dw 0x4913, 0xcc18,	0x493f, 0xcc18,		0x21, 0
+	.dw 0x4941, 0xcc18,	0x4941, 0xcc18,		0x21, 0
+	.dw 0x4943, 0xcc18,	0x494f, 0xcc18,		0x21, 0
+	.dw 0x4951, 0xcc18,	0x4951, 0xcc18,		0x21, 0
+	.dw 0x4953, 0xcc18,	0x497f, 0xcc18,		0x21, 0
+	.dw 0x4981, 0xcc18,	0x4981, 0xcc18,		0x21, 0
+	.dw 0x4983, 0xcc18,	0x498f, 0xcc18,		0x21, 0
+	.dw 0x4991, 0xcc18,	0x4991, 0xcc18,		0x21, 0
+	.dw 0x4993, 0xcc18,	0x49bf, 0xcc18,		0x21, 0
+	.dw 0x49c1, 0xcc18,	0x49c1, 0xcc18,		0x21, 0
+	.dw 0x49c3, 0xcc18,	0x49cf, 0xcc18,		0x21, 0
+	.dw 0x49d1, 0xcc18,	0x49d1, 0xcc18,		0x21, 0
+	.dw 0x49d3, 0xcc18,	0x49ff, 0xcc18,		0x21, 0
+	.dw 0x4a01, 0xcc18,	0x4a01, 0xcc18,		0x21, 0
+	.dw 0x4a03, 0xcc18,	0x4a0f, 0xcc18,		0x21, 0
+	.dw 0x4a11, 0xcc18,	0x4a11, 0xcc18,		0x21, 0
+	.dw 0x4a13, 0xcc18,	0x4a3f, 0xcc18,		0x21, 0
+	.dw 0x4a41, 0xcc18,	0x4a41, 0xcc18,		0x21, 0
+	.dw 0x4a43, 0xcc18,	0x4a4f, 0xcc18,		0x21, 0
+	.dw 0x4a51, 0xcc18,	0x4a51, 0xcc18,		0x21, 0
+	.dw 0x4a53, 0xcc18,	0x4a7f, 0xcc18,		0x21, 0
+	.dw 0x4a81, 0xcc18,	0x4a81, 0xcc18,		0x21, 0
+	.dw 0x4a83, 0xcc18,	0x4a8f, 0xcc18,		0x21, 0
+	.dw 0x4a91, 0xcc18,	0x4a91, 0xcc18,		0x21, 0
+	.dw 0x4a93, 0xcc18,	0x4abf, 0xcc18,		0x21, 0
+	.dw 0x4ac1, 0xcc18,	0x4ac1, 0xcc18,		0x21, 0
+	.dw 0x4ac3, 0xcc18,	0x4acf, 0xcc18,		0x21, 0
+	.dw 0x4ad1, 0xcc18,	0x4ad1, 0xcc18,		0x21, 0
+	.dw 0x4ad3, 0xcc18,	0x4aff, 0xcc18,		0x21, 0
+	.dw 0x4b01, 0xcc18,	0x4b01, 0xcc18,		0x21, 0
+	.dw 0x4b03, 0xcc18,	0x4b0f, 0xcc18,		0x21, 0
+	.dw 0x4b11, 0xcc18,	0x4b11, 0xcc18,		0x21, 0
+	.dw 0x4b13, 0xcc18,	0x4b3f, 0xcc18,		0x21, 0
+	.dw 0x4b40, 0xcc18,	0x4b40, 0xcc18,		0x22, 0
+	.dw 0x4b41, 0xcc18,	0x4b41, 0xcc18,		0x21, 0
+	.dw 0x4b42, 0xcc18,	0x4b42, 0xcc18,		0x22, 0
+	.dw 0x4b43, 0xcc18,	0x4b4f, 0xcc18,		0x21, 0
+	.dw 0x4b50, 0xcc18,	0x4b50, 0xcc18,		0x22, 0
+	.dw 0x4b51, 0xcc18,	0x4b51, 0xcc18,		0x21, 0
+	.dw 0x4b52, 0xcc18,	0x4b52, 0xcc18,		0x22, 0
+	.dw 0x4b53, 0xcc18,	0x4b7f, 0xcc18,		0x21, 0
+	.dw 0x4b81, 0xcc18,	0x4b81, 0xcc18,		0x21, 0
+	.dw 0x4b83, 0xcc18,	0x4b8f, 0xcc18,		0x21, 0
+	.dw 0x4b91, 0xcc18,	0x4b91, 0xcc18,		0x21, 0
+	.dw 0x4b93, 0xcc18,	0x4bbf, 0xcc18,		0x21, 0
+	.dw 0x4bc1, 0xcc18,	0x4bc1, 0xcc18,		0x21, 0
+	.dw 0x4bc3, 0xcc18,	0x4bcf, 0xcc18,		0x21, 0
+	.dw 0x4bd1, 0xcc18,	0x4bd1, 0xcc18,		0x21, 0
+	.dw 0x4bd3, 0xcc18,	0x4bff, 0xcc18,		0x21, 0
+	.dw 0x4c01, 0xcc18,	0x4c01, 0xcc18,		0x21, 0
+	.dw 0x4c03, 0xcc18,	0x4c0f, 0xcc18,		0x21, 0
+	.dw 0x4c11, 0xcc18,	0x4c11, 0xcc18,		0x21, 0
+	.dw 0x4c13, 0xcc18,	0x4c3f, 0xcc18,		0x21, 0
+	.dw 0x4c41, 0xcc18,	0x4c41, 0xcc18,		0x21, 0
+	.dw 0x4c43, 0xcc18,	0x4c4f, 0xcc18,		0x21, 0
+	.dw 0x4c51, 0xcc18,	0x4c51, 0xcc18,		0x21, 0
+	.dw 0x4c53, 0xcc18,	0x4c7f, 0xcc18,		0x21, 0
+	.dw 0x4c81, 0xcc18,	0x4c81, 0xcc18,		0x21, 0
+	.dw 0x4c83, 0xcc18,	0x4c8f, 0xcc18,		0x21, 0
+	.dw 0x4c91, 0xcc18,	0x4c91, 0xcc18,		0x21, 0
+	.dw 0x4c93, 0xcc18,	0x4cbf, 0xcc18,		0x21, 0
+	.dw 0x4cc1, 0xcc18,	0x4cc1, 0xcc18,		0x21, 0
+	.dw 0x4cc3, 0xcc18,	0x4ccf, 0xcc18,		0x21, 0
+	.dw 0x4cd1, 0xcc18,	0x4cd1, 0xcc18,		0x21, 0
+	.dw 0x4cd3, 0xcc18,	0x4cff, 0xcc18,		0x21, 0
+	.dw 0x4d01, 0xcc18,	0x4d01, 0xcc18,		0x21, 0
+	.dw 0x4d03, 0xcc18,	0x4d0f, 0xcc18,		0x21, 0
+	.dw 0x4d11, 0xcc18,	0x4d11, 0xcc18,		0x21, 0
+	.dw 0x4d13, 0xcc18,	0x4d3f, 0xcc18,		0x21, 0
+	.dw 0x4d41, 0xcc18,	0x4d41, 0xcc18,		0x21, 0
+	.dw 0x4d43, 0xcc18,	0x4d4f, 0xcc18,		0x21, 0
+	.dw 0x4d51, 0xcc18,	0x4d51, 0xcc18,		0x21, 0
+	.dw 0x4d53, 0xcc18,	0x4d7f, 0xcc18,		0x21, 0
+	.dw 0x4d80, 0xcc18,	0x4d80, 0xcc18,		0x22, 0
+	.dw 0x4d81, 0xcc18,	0x4d81, 0xcc18,		0x21, 0
+	.dw 0x4d82, 0xcc18,	0x4d82, 0xcc18,		0x22, 0
+	.dw 0x4d83, 0xcc18,	0x4d8f, 0xcc18,		0x21, 0
+	.dw 0x4d90, 0xcc18,	0x4d90, 0xcc18,		0x22, 0
+	.dw 0x4d91, 0xcc18,	0x4d91, 0xcc18,		0x21, 0
+	.dw 0x4d92, 0xcc18,	0x4d92, 0xcc18,		0x22, 0
+	.dw 0x4d93, 0xcc18,	0x4dbf, 0xcc18,		0x21, 0
+	.dw 0x4dc1, 0xcc18,	0x4dc1, 0xcc18,		0x21, 0
+	.dw 0x4dc3, 0xcc18,	0x4dcf, 0xcc18,		0x21, 0
+	.dw 0x4dd1, 0xcc18,	0x4dd1, 0xcc18,		0x21, 0
+	.dw 0x4dd3, 0xcc18,	0x4dff, 0xcc18,		0x21, 0
+	.dw 0x4e01, 0xcc18,	0x4e01, 0xcc18,		0x21, 0
+	.dw 0x4e03, 0xcc18,	0x4e0f, 0xcc18,		0x21, 0
+	.dw 0x4e11, 0xcc18,	0x4e11, 0xcc18,		0x21, 0
+	.dw 0x4e13, 0xcc18,	0x4e3f, 0xcc18,		0x21, 0
+	.dw 0x4e41, 0xcc18,	0x4e41, 0xcc18,		0x21, 0
+	.dw 0x4e43, 0xcc18,	0x4e4f, 0xcc18,		0x21, 0
+	.dw 0x4e51, 0xcc18,	0x4e51, 0xcc18,		0x21, 0
+	.dw 0x4e53, 0xcc18,	0x4e7f, 0xcc18,		0x21, 0
+	.dw 0x4e81, 0xcc18,	0x4e81, 0xcc18,		0x21, 0
+	.dw 0x4e83, 0xcc18,	0x4e8f, 0xcc18,		0x21, 0
+	.dw 0x4e91, 0xcc18,	0x4e91, 0xcc18,		0x21, 0
+	.dw 0x4e93, 0xcc18,	0x4ebf, 0xcc18,		0x21, 0
+	.dw 0x4ec1, 0xcc18,	0x4ec1, 0xcc18,		0x21, 0
+	.dw 0x4ec3, 0xcc18,	0x4ecf, 0xcc18,		0x21, 0
+	.dw 0x4ed1, 0xcc18,	0x4ed1, 0xcc18,		0x21, 0
+	.dw 0x4ed3, 0xcc18,	0x4eff, 0xcc18,		0x21, 0
+	.dw 0x4f01, 0xcc18,	0x4f01, 0xcc18,		0x21, 0
+	.dw 0x4f03, 0xcc18,	0x4f0f, 0xcc18,		0x21, 0
+	.dw 0x4f11, 0xcc18,	0x4f11, 0xcc18,		0x21, 0
+	.dw 0x4f13, 0xcc18,	0x4f3f, 0xcc18,		0x21, 0
+	.dw 0x4f41, 0xcc18,	0x4f41, 0xcc18,		0x21, 0
+	.dw 0x4f43, 0xcc18,	0x4f4f, 0xcc18,		0x21, 0
+	.dw 0x4f51, 0xcc18,	0x4f51, 0xcc18,		0x21, 0
+	.dw 0x4f53, 0xcc18,	0x4f7f, 0xcc18,		0x21, 0
+	.dw 0x4f81, 0xcc18,	0x4f81, 0xcc18,		0x21, 0
+	.dw 0x4f83, 0xcc18,	0x4f8f, 0xcc18,		0x21, 0
+	.dw 0x4f91, 0xcc18,	0x4f91, 0xcc18,		0x21, 0
+	.dw 0x4f93, 0xcc18,	0x4fbf, 0xcc18,		0x21, 0
+	.dw 0x4fc0, 0xcc18,	0x4fc0, 0xcc18,		0x22, 0
+	.dw 0x4fc1, 0xcc18,	0x4fc1, 0xcc18,		0x21, 0
+	.dw 0x4fc2, 0xcc18,	0x4fc2, 0xcc18,		0x22, 0
+	.dw 0x4fc3, 0xcc18,	0x4fcf, 0xcc18,		0x21, 0
+	.dw 0x4fd0, 0xcc18,	0x4fd0, 0xcc18,		0x22, 0
+	.dw 0x4fd1, 0xcc18,	0x4fd1, 0xcc18,		0x21, 0
+	.dw 0x4fd2, 0xcc18,	0x4fd2, 0xcc18,		0x22, 0
+	.dw 0x4fd3, 0xcc18,	0x5fff, 0xcc18,		0x21, 0
+	.dw 0x6000, 0xcc18,	0x6000, 0xcc18,		0x22, 0
+	.dw 0x6001, 0xcc18,	0x6001, 0xcc18,		0x21, 0
+	.dw 0x6002, 0xcc18,	0x6002, 0xcc18,		0x22, 0
+	.dw 0x6003, 0xcc18,	0x600f, 0xcc18,		0x21, 0
+	.dw 0x6010, 0xcc18,	0x6010, 0xcc18,		0x22, 0
+	.dw 0x6011, 0xcc18,	0x6011, 0xcc18,		0x21, 0
+	.dw 0x6012, 0xcc18,	0x6012, 0xcc18,		0x22, 0
+	.dw 0x6013, 0xcc18,	0x603f, 0xcc18,		0x21, 0
+	.dw 0x6041, 0xcc18,	0x6041, 0xcc18,		0x21, 0
+	.dw 0x6043, 0xcc18,	0x604f, 0xcc18,		0x21, 0
+	.dw 0x6051, 0xcc18,	0x6051, 0xcc18,		0x21, 0
+	.dw 0x6053, 0xcc18,	0x607f, 0xcc18,		0x21, 0
+	.dw 0x6081, 0xcc18,	0x6081, 0xcc18,		0x21, 0
+	.dw 0x6083, 0xcc18,	0x608f, 0xcc18,		0x21, 0
+	.dw 0x6091, 0xcc18,	0x6091, 0xcc18,		0x21, 0
+	.dw 0x6093, 0xcc18,	0x60bf, 0xcc18,		0x21, 0
+	.dw 0x60c1, 0xcc18,	0x60c1, 0xcc18,		0x21, 0
+	.dw 0x60c3, 0xcc18,	0x60cf, 0xcc18,		0x21, 0
+	.dw 0x60d1, 0xcc18,	0x60d1, 0xcc18,		0x21, 0
+	.dw 0x60d3, 0xcc18,	0x60ff, 0xcc18,		0x21, 0
+	.dw 0x6101, 0xcc18,	0x6101, 0xcc18,		0x21, 0
+	.dw 0x6103, 0xcc18,	0x610f, 0xcc18,		0x21, 0
+	.dw 0x6111, 0xcc18,	0x6111, 0xcc18,		0x21, 0
+	.dw 0x6113, 0xcc18,	0x613f, 0xcc18,		0x21, 0
+	.dw 0x6141, 0xcc18,	0x6141, 0xcc18,		0x21, 0
+	.dw 0x6143, 0xcc18,	0x614f, 0xcc18,		0x21, 0
+	.dw 0x6151, 0xcc18,	0x6151, 0xcc18,		0x21, 0
+	.dw 0x6153, 0xcc18,	0x617f, 0xcc18,		0x21, 0
+	.dw 0x6181, 0xcc18,	0x6181, 0xcc18,		0x21, 0
+	.dw 0x6183, 0xcc18,	0x618f, 0xcc18,		0x21, 0
+	.dw 0x6191, 0xcc18,	0x6191, 0xcc18,		0x21, 0
+	.dw 0x6193, 0xcc18,	0x61bf, 0xcc18,		0x21, 0
+	.dw 0x61c1, 0xcc18,	0x61c1, 0xcc18,		0x21, 0
+	.dw 0x61c3, 0xcc18,	0x61cf, 0xcc18,		0x21, 0
+	.dw 0x61d1, 0xcc18,	0x61d1, 0xcc18,		0x21, 0
+	.dw 0x61d3, 0xcc18,	0x61ff, 0xcc18,		0x21, 0
+	.dw 0x6201, 0xcc18,	0x6201, 0xcc18,		0x21, 0
+	.dw 0x6203, 0xcc18,	0x620f, 0xcc18,		0x21, 0
+	.dw 0x6211, 0xcc18,	0x6211, 0xcc18,		0x21, 0
+	.dw 0x6213, 0xcc18,	0x623f, 0xcc18,		0x21, 0
+	.dw 0x6240, 0xcc18,	0x6240, 0xcc18,		0x22, 0
+	.dw 0x6241, 0xcc18,	0x6241, 0xcc18,		0x21, 0
+	.dw 0x6242, 0xcc18,	0x6242, 0xcc18,		0x22, 0
+	.dw 0x6243, 0xcc18,	0x624f, 0xcc18,		0x21, 0
+	.dw 0x6250, 0xcc18,	0x6250, 0xcc18,		0x22, 0
+	.dw 0x6251, 0xcc18,	0x6251, 0xcc18,		0x21, 0
+	.dw 0x6252, 0xcc18,	0x6252, 0xcc18,		0x22, 0
+	.dw 0x6253, 0xcc18,	0x627f, 0xcc18,		0x21, 0
+	.dw 0x6281, 0xcc18,	0x6281, 0xcc18,		0x21, 0
+	.dw 0x6283, 0xcc18,	0x628f, 0xcc18,		0x21, 0
+	.dw 0x6291, 0xcc18,	0x6291, 0xcc18,		0x21, 0
+	.dw 0x6293, 0xcc18,	0x62bf, 0xcc18,		0x21, 0
+	.dw 0x62c1, 0xcc18,	0x62c1, 0xcc18,		0x21, 0
+	.dw 0x62c3, 0xcc18,	0x62cf, 0xcc18,		0x21, 0
+	.dw 0x62d1, 0xcc18,	0x62d1, 0xcc18,		0x21, 0
+	.dw 0x62d3, 0xcc18,	0x62ff, 0xcc18,		0x21, 0
+	.dw 0x6301, 0xcc18,	0x6301, 0xcc18,		0x21, 0
+	.dw 0x6303, 0xcc18,	0x630f, 0xcc18,		0x21, 0
+	.dw 0x6311, 0xcc18,	0x6311, 0xcc18,		0x21, 0
+	.dw 0x6313, 0xcc18,	0x633f, 0xcc18,		0x21, 0
+	.dw 0x6341, 0xcc18,	0x6341, 0xcc18,		0x21, 0
+	.dw 0x6343, 0xcc18,	0x634f, 0xcc18,		0x21, 0
+	.dw 0x6351, 0xcc18,	0x6351, 0xcc18,		0x21, 0
+	.dw 0x6353, 0xcc18,	0x637f, 0xcc18,		0x21, 0
+	.dw 0x6381, 0xcc18,	0x6381, 0xcc18,		0x21, 0
+	.dw 0x6383, 0xcc18,	0x638f, 0xcc18,		0x21, 0
+	.dw 0x6391, 0xcc18,	0x6391, 0xcc18,		0x21, 0
+	.dw 0x6393, 0xcc18,	0x63bf, 0xcc18,		0x21, 0
+	.dw 0x63c1, 0xcc18,	0x63c1, 0xcc18,		0x21, 0
+	.dw 0x63c3, 0xcc18,	0x63cf, 0xcc18,		0x21, 0
+	.dw 0x63d1, 0xcc18,	0x63d1, 0xcc18,		0x21, 0
+	.dw 0x63d3, 0xcc18,	0x63ff, 0xcc18,		0x21, 0
+	.dw 0x6401, 0xcc18,	0x6401, 0xcc18,		0x21, 0
+	.dw 0x6403, 0xcc18,	0x640f, 0xcc18,		0x21, 0
+	.dw 0x6411, 0xcc18,	0x6411, 0xcc18,		0x21, 0
+	.dw 0x6413, 0xcc18,	0x643f, 0xcc18,		0x21, 0
+	.dw 0x6441, 0xcc18,	0x6441, 0xcc18,		0x21, 0
+	.dw 0x6443, 0xcc18,	0x644f, 0xcc18,		0x21, 0
+	.dw 0x6451, 0xcc18,	0x6451, 0xcc18,		0x21, 0
+	.dw 0x6453, 0xcc18,	0x647f, 0xcc18,		0x21, 0
+	.dw 0x6480, 0xcc18,	0x6480, 0xcc18,		0x22, 0
+	.dw 0x6481, 0xcc18,	0x6481, 0xcc18,		0x21, 0
+	.dw 0x6482, 0xcc18,	0x6482, 0xcc18,		0x22, 0
+	.dw 0x6483, 0xcc18,	0x648f, 0xcc18,		0x21, 0
+	.dw 0x6490, 0xcc18,	0x6490, 0xcc18,		0x22, 0
+	.dw 0x6491, 0xcc18,	0x6491, 0xcc18,		0x21, 0
+	.dw 0x6492, 0xcc18,	0x6492, 0xcc18,		0x22, 0
+	.dw 0x6493, 0xcc18,	0x64bf, 0xcc18,		0x21, 0
+	.dw 0x64c1, 0xcc18,	0x64c1, 0xcc18,		0x21, 0
+	.dw 0x64c3, 0xcc18,	0x64cf, 0xcc18,		0x21, 0
+	.dw 0x64d1, 0xcc18,	0x64d1, 0xcc18,		0x21, 0
+	.dw 0x64d3, 0xcc18,	0x64ff, 0xcc18,		0x21, 0
+	.dw 0x6501, 0xcc18,	0x6501, 0xcc18,		0x21, 0
+	.dw 0x6503, 0xcc18,	0x650f, 0xcc18,		0x21, 0
+	.dw 0x6511, 0xcc18,	0x6511, 0xcc18,		0x21, 0
+	.dw 0x6513, 0xcc18,	0x653f, 0xcc18,		0x21, 0
+	.dw 0x6541, 0xcc18,	0x6541, 0xcc18,		0x21, 0
+	.dw 0x6543, 0xcc18,	0x654f, 0xcc18,		0x21, 0
+	.dw 0x6551, 0xcc18,	0x6551, 0xcc18,		0x21, 0
+	.dw 0x6553, 0xcc18,	0x657f, 0xcc18,		0x21, 0
+	.dw 0x6581, 0xcc18,	0x6581, 0xcc18,		0x21, 0
+	.dw 0x6583, 0xcc18,	0x658f, 0xcc18,		0x21, 0
+	.dw 0x6591, 0xcc18,	0x6591, 0xcc18,		0x21, 0
+	.dw 0x6593, 0xcc18,	0x65bf, 0xcc18,		0x21, 0
+	.dw 0x65c1, 0xcc18,	0x65c1, 0xcc18,		0x21, 0
+	.dw 0x65c3, 0xcc18,	0x65cf, 0xcc18,		0x21, 0
+	.dw 0x65d1, 0xcc18,	0x65d1, 0xcc18,		0x21, 0
+	.dw 0x65d3, 0xcc18,	0x65ff, 0xcc18,		0x21, 0
+	.dw 0x6601, 0xcc18,	0x6601, 0xcc18,		0x21, 0
+	.dw 0x6603, 0xcc18,	0x660f, 0xcc18,		0x21, 0
+	.dw 0x6611, 0xcc18,	0x6611, 0xcc18,		0x21, 0
+	.dw 0x6613, 0xcc18,	0x663f, 0xcc18,		0x21, 0
+	.dw 0x6641, 0xcc18,	0x6641, 0xcc18,		0x21, 0
+	.dw 0x6643, 0xcc18,	0x664f, 0xcc18,		0x21, 0
+	.dw 0x6651, 0xcc18,	0x6651, 0xcc18,		0x21, 0
+	.dw 0x6653, 0xcc18,	0x667f, 0xcc18,		0x21, 0
+	.dw 0x6681, 0xcc18,	0x6681, 0xcc18,		0x21, 0
+	.dw 0x6683, 0xcc18,	0x668f, 0xcc18,		0x21, 0
+	.dw 0x6691, 0xcc18,	0x6691, 0xcc18,		0x21, 0
+	.dw 0x6693, 0xcc18,	0x66bf, 0xcc18,		0x21, 0
+	.dw 0x66c0, 0xcc18,	0x66c0, 0xcc18,		0x22, 0
+	.dw 0x66c1, 0xcc18,	0x66c1, 0xcc18,		0x21, 0
+	.dw 0x66c2, 0xcc18,	0x66c2, 0xcc18,		0x22, 0
+	.dw 0x66c3, 0xcc18,	0x66cf, 0xcc18,		0x21, 0
+	.dw 0x66d0, 0xcc18,	0x66d0, 0xcc18,		0x22, 0
+	.dw 0x66d1, 0xcc18,	0x66d1, 0xcc18,		0x21, 0
+	.dw 0x66d2, 0xcc18,	0x66d2, 0xcc18,		0x22, 0
+	.dw 0x66d3, 0xcc18,	0x66ff, 0xcc18,		0x21, 0
+	.dw 0x6701, 0xcc18,	0x6701, 0xcc18,		0x21, 0
+	.dw 0x6703, 0xcc18,	0x670f, 0xcc18,		0x21, 0
+	.dw 0x6711, 0xcc18,	0x6711, 0xcc18,		0x21, 0
+	.dw 0x6713, 0xcc18,	0x673f, 0xcc18,		0x21, 0
+	.dw 0x6741, 0xcc18,	0x6741, 0xcc18,		0x21, 0
+	.dw 0x6743, 0xcc18,	0x674f, 0xcc18,		0x21, 0
+	.dw 0x6751, 0xcc18,	0x6751, 0xcc18,		0x21, 0
+	.dw 0x6753, 0xcc18,	0x677f, 0xcc18,		0x21, 0
+	.dw 0x6781, 0xcc18,	0x6781, 0xcc18,		0x21, 0
+	.dw 0x6783, 0xcc18,	0x678f, 0xcc18,		0x21, 0
+	.dw 0x6791, 0xcc18,	0x6791, 0xcc18,		0x21, 0
+	.dw 0x6793, 0xcc18,	0x67bf, 0xcc18,		0x21, 0
+	.dw 0x67c1, 0xcc18,	0x67c1, 0xcc18,		0x21, 0
+	.dw 0x67c3, 0xcc18,	0x67cf, 0xcc18,		0x21, 0
+	.dw 0x67d1, 0xcc18,	0x67d1, 0xcc18,		0x21, 0
+	.dw 0x67d3, 0xcc18,	0x67ff, 0xcc18,		0x21, 0
+	.dw 0x6801, 0xcc18,	0x6801, 0xcc18,		0x21, 0
+	.dw 0x6803, 0xcc18,	0x680f, 0xcc18,		0x21, 0
+	.dw 0x6811, 0xcc18,	0x6811, 0xcc18,		0x21, 0
+	.dw 0x6813, 0xcc18,	0x683f, 0xcc18,		0x21, 0
+	.dw 0x6841, 0xcc18,	0x6841, 0xcc18,		0x21, 0
+	.dw 0x6843, 0xcc18,	0x684f, 0xcc18,		0x21, 0
+	.dw 0x6851, 0xcc18,	0x6851, 0xcc18,		0x21, 0
+	.dw 0x6853, 0xcc18,	0x687f, 0xcc18,		0x21, 0
+	.dw 0x6881, 0xcc18,	0x6881, 0xcc18,		0x21, 0
+	.dw 0x6883, 0xcc18,	0x688f, 0xcc18,		0x21, 0
+	.dw 0x6891, 0xcc18,	0x6891, 0xcc18,		0x21, 0
+	.dw 0x6893, 0xcc18,	0x68bf, 0xcc18,		0x21, 0
+	.dw 0x68c1, 0xcc18,	0x68c1, 0xcc18,		0x21, 0
+	.dw 0x68c3, 0xcc18,	0x68cf, 0xcc18,		0x21, 0
+	.dw 0x68d1, 0xcc18,	0x68d1, 0xcc18,		0x21, 0
+	.dw 0x68d3, 0xcc18,	0x68ff, 0xcc18,		0x21, 0
+	.dw 0x6900, 0xcc18,	0x6900, 0xcc18,		0x22, 0
+	.dw 0x6901, 0xcc18,	0x6901, 0xcc18,		0x21, 0
+	.dw 0x6902, 0xcc18,	0x6902, 0xcc18,		0x22, 0
+	.dw 0x6903, 0xcc18,	0x690f, 0xcc18,		0x21, 0
+	.dw 0x6910, 0xcc18,	0x6910, 0xcc18,		0x22, 0
+	.dw 0x6911, 0xcc18,	0x6911, 0xcc18,		0x21, 0
+	.dw 0x6912, 0xcc18,	0x6912, 0xcc18,		0x22, 0
+	.dw 0x6913, 0xcc18,	0x693f, 0xcc18,		0x21, 0
+	.dw 0x6941, 0xcc18,	0x6941, 0xcc18,		0x21, 0
+	.dw 0x6943, 0xcc18,	0x694f, 0xcc18,		0x21, 0
+	.dw 0x6951, 0xcc18,	0x6951, 0xcc18,		0x21, 0
+	.dw 0x6953, 0xcc18,	0x697f, 0xcc18,		0x21, 0
+	.dw 0x6981, 0xcc18,	0x6981, 0xcc18,		0x21, 0
+	.dw 0x6983, 0xcc18,	0x698f, 0xcc18,		0x21, 0
+	.dw 0x6991, 0xcc18,	0x6991, 0xcc18,		0x21, 0
+	.dw 0x6993, 0xcc18,	0x69bf, 0xcc18,		0x21, 0
+	.dw 0x69c1, 0xcc18,	0x69c1, 0xcc18,		0x21, 0
+	.dw 0x69c3, 0xcc18,	0x69cf, 0xcc18,		0x21, 0
+	.dw 0x69d1, 0xcc18,	0x69d1, 0xcc18,		0x21, 0
+	.dw 0x69d3, 0xcc18,	0x69ff, 0xcc18,		0x21, 0
+	.dw 0x6a01, 0xcc18,	0x6a01, 0xcc18,		0x21, 0
+	.dw 0x6a03, 0xcc18,	0x6a0f, 0xcc18,		0x21, 0
+	.dw 0x6a11, 0xcc18,	0x6a11, 0xcc18,		0x21, 0
+	.dw 0x6a13, 0xcc18,	0x6a3f, 0xcc18,		0x21, 0
+	.dw 0x6a41, 0xcc18,	0x6a41, 0xcc18,		0x21, 0
+	.dw 0x6a43, 0xcc18,	0x6a4f, 0xcc18,		0x21, 0
+	.dw 0x6a51, 0xcc18,	0x6a51, 0xcc18,		0x21, 0
+	.dw 0x6a53, 0xcc18,	0x6a7f, 0xcc18,		0x21, 0
+	.dw 0x6a81, 0xcc18,	0x6a81, 0xcc18,		0x21, 0
+	.dw 0x6a83, 0xcc18,	0x6a8f, 0xcc18,		0x21, 0
+	.dw 0x6a91, 0xcc18,	0x6a91, 0xcc18,		0x21, 0
+	.dw 0x6a93, 0xcc18,	0x6abf, 0xcc18,		0x21, 0
+	.dw 0x6ac1, 0xcc18,	0x6ac1, 0xcc18,		0x21, 0
+	.dw 0x6ac3, 0xcc18,	0x6acf, 0xcc18,		0x21, 0
+	.dw 0x6ad1, 0xcc18,	0x6ad1, 0xcc18,		0x21, 0
+	.dw 0x6ad3, 0xcc18,	0x6aff, 0xcc18,		0x21, 0
+	.dw 0x6b01, 0xcc18,	0x6b01, 0xcc18,		0x21, 0
+	.dw 0x6b03, 0xcc18,	0x6b0f, 0xcc18,		0x21, 0
+	.dw 0x6b11, 0xcc18,	0x6b11, 0xcc18,		0x21, 0
+	.dw 0x6b13, 0xcc18,	0x6b3f, 0xcc18,		0x21, 0
+	.dw 0x6b40, 0xcc18,	0x6b40, 0xcc18,		0x22, 0
+	.dw 0x6b41, 0xcc18,	0x6b41, 0xcc18,		0x21, 0
+	.dw 0x6b42, 0xcc18,	0x6b42, 0xcc18,		0x22, 0
+	.dw 0x6b43, 0xcc18,	0x6b4f, 0xcc18,		0x21, 0
+	.dw 0x6b50, 0xcc18,	0x6b50, 0xcc18,		0x22, 0
+	.dw 0x6b51, 0xcc18,	0x6b51, 0xcc18,		0x21, 0
+	.dw 0x6b52, 0xcc18,	0x6b52, 0xcc18,		0x22, 0
+	.dw 0x6b53, 0xcc18,	0x6b7f, 0xcc18,		0x21, 0
+	.dw 0x6b81, 0xcc18,	0x6b81, 0xcc18,		0x21, 0
+	.dw 0x6b83, 0xcc18,	0x6b8f, 0xcc18,		0x21, 0
+	.dw 0x6b91, 0xcc18,	0x6b91, 0xcc18,		0x21, 0
+	.dw 0x6b93, 0xcc18,	0x6bbf, 0xcc18,		0x21, 0
+	.dw 0x6bc1, 0xcc18,	0x6bc1, 0xcc18,		0x21, 0
+	.dw 0x6bc3, 0xcc18,	0x6bcf, 0xcc18,		0x21, 0
+	.dw 0x6bd1, 0xcc18,	0x6bd1, 0xcc18,		0x21, 0
+	.dw 0x6bd3, 0xcc18,	0x6bff, 0xcc18,		0x21, 0
+	.dw 0x6c01, 0xcc18,	0x6c01, 0xcc18,		0x21, 0
+	.dw 0x6c03, 0xcc18,	0x6c0f, 0xcc18,		0x21, 0
+	.dw 0x6c11, 0xcc18,	0x6c11, 0xcc18,		0x21, 0
+	.dw 0x6c13, 0xcc18,	0x6c3f, 0xcc18,		0x21, 0
+	.dw 0x6c41, 0xcc18,	0x6c41, 0xcc18,		0x21, 0
+	.dw 0x6c43, 0xcc18,	0x6c4f, 0xcc18,		0x21, 0
+	.dw 0x6c51, 0xcc18,	0x6c51, 0xcc18,		0x21, 0
+	.dw 0x6c53, 0xcc18,	0x6c7f, 0xcc18,		0x21, 0
+	.dw 0x6c81, 0xcc18,	0x6c81, 0xcc18,		0x21, 0
+	.dw 0x6c83, 0xcc18,	0x6c8f, 0xcc18,		0x21, 0
+	.dw 0x6c91, 0xcc18,	0x6c91, 0xcc18,		0x21, 0
+	.dw 0x6c93, 0xcc18,	0x6cbf, 0xcc18,		0x21, 0
+	.dw 0x6cc1, 0xcc18,	0x6cc1, 0xcc18,		0x21, 0
+	.dw 0x6cc3, 0xcc18,	0x6ccf, 0xcc18,		0x21, 0
+	.dw 0x6cd1, 0xcc18,	0x6cd1, 0xcc18,		0x21, 0
+	.dw 0x6cd3, 0xcc18,	0x6cff, 0xcc18,		0x21, 0
+	.dw 0x6d01, 0xcc18,	0x6d01, 0xcc18,		0x21, 0
+	.dw 0x6d03, 0xcc18,	0x6d0f, 0xcc18,		0x21, 0
+	.dw 0x6d11, 0xcc18,	0x6d11, 0xcc18,		0x21, 0
+	.dw 0x6d13, 0xcc18,	0x6d3f, 0xcc18,		0x21, 0
+	.dw 0x6d41, 0xcc18,	0x6d41, 0xcc18,		0x21, 0
+	.dw 0x6d43, 0xcc18,	0x6d4f, 0xcc18,		0x21, 0
+	.dw 0x6d51, 0xcc18,	0x6d51, 0xcc18,		0x21, 0
+	.dw 0x6d53, 0xcc18,	0x6d7f, 0xcc18,		0x21, 0
+	.dw 0x6d80, 0xcc18,	0x6d80, 0xcc18,		0x22, 0
+	.dw 0x6d81, 0xcc18,	0x6d81, 0xcc18,		0x21, 0
+	.dw 0x6d82, 0xcc18,	0x6d82, 0xcc18,		0x22, 0
+	.dw 0x6d83, 0xcc18,	0x6d8f, 0xcc18,		0x21, 0
+	.dw 0x6d90, 0xcc18,	0x6d90, 0xcc18,		0x22, 0
+	.dw 0x6d91, 0xcc18,	0x6d91, 0xcc18,		0x21, 0
+	.dw 0x6d92, 0xcc18,	0x6d92, 0xcc18,		0x22, 0
+	.dw 0x6d93, 0xcc18,	0x6dbf, 0xcc18,		0x21, 0
+	.dw 0x6dc1, 0xcc18,	0x6dc1, 0xcc18,		0x21, 0
+	.dw 0x6dc3, 0xcc18,	0x6dcf, 0xcc18,		0x21, 0
+	.dw 0x6dd1, 0xcc18,	0x6dd1, 0xcc18,		0x21, 0
+	.dw 0x6dd3, 0xcc18,	0x6dff, 0xcc18,		0x21, 0
+	.dw 0x6e01, 0xcc18,	0x6e01, 0xcc18,		0x21, 0
+	.dw 0x6e03, 0xcc18,	0x6e0f, 0xcc18,		0x21, 0
+	.dw 0x6e11, 0xcc18,	0x6e11, 0xcc18,		0x21, 0
+	.dw 0x6e13, 0xcc18,	0x6e3f, 0xcc18,		0x21, 0
+	.dw 0x6e41, 0xcc18,	0x6e41, 0xcc18,		0x21, 0
+	.dw 0x6e43, 0xcc18,	0x6e4f, 0xcc18,		0x21, 0
+	.dw 0x6e51, 0xcc18,	0x6e51, 0xcc18,		0x21, 0
+	.dw 0x6e53, 0xcc18,	0x6e7f, 0xcc18,		0x21, 0
+	.dw 0x6e81, 0xcc18,	0x6e81, 0xcc18,		0x21, 0
+	.dw 0x6e83, 0xcc18,	0x6e8f, 0xcc18,		0x21, 0
+	.dw 0x6e91, 0xcc18,	0x6e91, 0xcc18,		0x21, 0
+	.dw 0x6e93, 0xcc18,	0x6ebf, 0xcc18,		0x21, 0
+	.dw 0x6ec1, 0xcc18,	0x6ec1, 0xcc18,		0x21, 0
+	.dw 0x6ec3, 0xcc18,	0x6ecf, 0xcc18,		0x21, 0
+	.dw 0x6ed1, 0xcc18,	0x6ed1, 0xcc18,		0x21, 0
+	.dw 0x6ed3, 0xcc18,	0x6eff, 0xcc18,		0x21, 0
+	.dw 0x6f01, 0xcc18,	0x6f01, 0xcc18,		0x21, 0
+	.dw 0x6f03, 0xcc18,	0x6f0f, 0xcc18,		0x21, 0
+	.dw 0x6f11, 0xcc18,	0x6f11, 0xcc18,		0x21, 0
+	.dw 0x6f13, 0xcc18,	0x6f3f, 0xcc18,		0x21, 0
+	.dw 0x6f41, 0xcc18,	0x6f41, 0xcc18,		0x21, 0
+	.dw 0x6f43, 0xcc18,	0x6f4f, 0xcc18,		0x21, 0
+	.dw 0x6f51, 0xcc18,	0x6f51, 0xcc18,		0x21, 0
+	.dw 0x6f53, 0xcc18,	0x6f7f, 0xcc18,		0x21, 0
+	.dw 0x6f81, 0xcc18,	0x6f81, 0xcc18,		0x21, 0
+	.dw 0x6f83, 0xcc18,	0x6f8f, 0xcc18,		0x21, 0
+	.dw 0x6f91, 0xcc18,	0x6f91, 0xcc18,		0x21, 0
+	.dw 0x6f93, 0xcc18,	0x6fbf, 0xcc18,		0x21, 0
+	.dw 0x6fc0, 0xcc18,	0x6fc0, 0xcc18,		0x22, 0
+	.dw 0x6fc1, 0xcc18,	0x6fc1, 0xcc18,		0x21, 0
+	.dw 0x6fc2, 0xcc18,	0x6fc2, 0xcc18,		0x22, 0
+	.dw 0x6fc3, 0xcc18,	0x6fcf, 0xcc18,		0x21, 0
+	.dw 0x6fd0, 0xcc18,	0x6fd0, 0xcc18,		0x22, 0
+	.dw 0x6fd1, 0xcc18,	0x6fd1, 0xcc18,		0x21, 0
+	.dw 0x6fd2, 0xcc18,	0x6fd2, 0xcc18,		0x22, 0
+	.dw 0x6fd3, 0xcc18,	0xffff, 0xcc20,		0x21, 0
+	.dw 0x0000, 0xcc21,	0x003f, 0xcc21,		0x22, 0
+	.dw 0x0240, 0xcc21,	0x027f, 0xcc21,		0x22, 0
+	.dw 0x0480, 0xcc21,	0x04bf, 0xcc21,		0x22, 0
+	.dw 0x06c0, 0xcc21,	0x06ff, 0xcc21,		0x22, 0
+	.dw 0x0900, 0xcc21,	0x093f, 0xcc21,		0x22, 0
+	.dw 0x0b40, 0xcc21,	0x0b7f, 0xcc21,		0x22, 0
+	.dw 0x0d80, 0xcc21,	0x0dbf, 0xcc21,		0x22, 0
+	.dw 0x0fc0, 0xcc21,	0x103f, 0xcc21,		0x22, 0
+	.dw 0x1240, 0xcc21,	0x127f, 0xcc21,		0x22, 0
+	.dw 0x1480, 0xcc21,	0x14bf, 0xcc21,		0x22, 0
+	.dw 0x16c0, 0xcc21,	0x16ff, 0xcc21,		0x22, 0
+	.dw 0x1900, 0xcc21,	0x193f, 0xcc21,		0x22, 0
+	.dw 0x1b40, 0xcc21,	0x1b7f, 0xcc21,		0x22, 0
+	.dw 0x1d80, 0xcc21,	0x1dbf, 0xcc21,		0x22, 0
+	.dw 0x1fc0, 0xcc21,	0x203f, 0xcc21,		0x22, 0
+	.dw 0x2240, 0xcc21,	0x227f, 0xcc21,		0x22, 0
+	.dw 0x2480, 0xcc21,	0x24bf, 0xcc21,		0x22, 0
+	.dw 0x26c0, 0xcc21,	0x26ff, 0xcc21,		0x22, 0
+	.dw 0x2900, 0xcc21,	0x293f, 0xcc21,		0x22, 0
+	.dw 0x2b40, 0xcc21,	0x2b7f, 0xcc21,		0x22, 0
+	.dw 0x2d80, 0xcc21,	0x2dbf, 0xcc21,		0x22, 0
+	.dw 0x2fc0, 0xcc21,	0x303f, 0xcc21,		0x22, 0
+	.dw 0x3240, 0xcc21,	0x327f, 0xcc21,		0x22, 0
+	.dw 0x3480, 0xcc21,	0x34bf, 0xcc21,		0x22, 0
+	.dw 0x36c0, 0xcc21,	0x36ff, 0xcc21,		0x22, 0
+	.dw 0x3900, 0xcc21,	0x393f, 0xcc21,		0x22, 0
+	.dw 0x3b40, 0xcc21,	0x3b7f, 0xcc21,		0x22, 0
+	.dw 0x3d80, 0xcc21,	0x3dbf, 0xcc21,		0x22, 0
+	.dw 0x3fc0, 0xcc21,	0x3fff, 0xcc21,		0x22, 0
+	.dw 0x4000, 0xcc21,	0x7fff, 0xcc21,		0x21, 0
+	.dw 0x8000, 0xcc21,	0x803f, 0xcc21,		0x22, 0
+	.dw 0x8240, 0xcc21,	0x827f, 0xcc21,		0x22, 0
+	.dw 0x8480, 0xcc21,	0x84bf, 0xcc21,		0x22, 0
+	.dw 0x86c0, 0xcc21,	0x86ff, 0xcc21,		0x22, 0
+	.dw 0x8900, 0xcc21,	0x893f, 0xcc21,		0x22, 0
+	.dw 0x8b40, 0xcc21,	0x8b7f, 0xcc21,		0x22, 0
+	.dw 0x8d80, 0xcc21,	0x8dbf, 0xcc21,		0x22, 0
+	.dw 0x8fc0, 0xcc21,	0x903f, 0xcc21,		0x22, 0
+	.dw 0x9240, 0xcc21,	0x927f, 0xcc21,		0x22, 0
+	.dw 0x9480, 0xcc21,	0x94bf, 0xcc21,		0x22, 0
+	.dw 0x96c0, 0xcc21,	0x96ff, 0xcc21,		0x22, 0
+	.dw 0x9900, 0xcc21,	0x993f, 0xcc21,		0x22, 0
+	.dw 0x9b40, 0xcc21,	0x9b7f, 0xcc21,		0x22, 0
+	.dw 0x9d80, 0xcc21,	0x9dbf, 0xcc21,		0x22, 0
+	.dw 0x9fc0, 0xcc21,	0xa03f, 0xcc21,		0x22, 0
+	.dw 0xa240, 0xcc21,	0xa27f, 0xcc21,		0x22, 0
+	.dw 0xa480, 0xcc21,	0xa4bf, 0xcc21,		0x22, 0
+	.dw 0xa6c0, 0xcc21,	0xa6ff, 0xcc21,		0x22, 0
+	.dw 0xa900, 0xcc21,	0xa93f, 0xcc21,		0x22, 0
+	.dw 0xab40, 0xcc21,	0xab7f, 0xcc21,		0x22, 0
+	.dw 0xad80, 0xcc21,	0xadbf, 0xcc21,		0x22, 0
+	.dw 0xafc0, 0xcc21,	0xb03f, 0xcc21,		0x22, 0
+	.dw 0xb240, 0xcc21,	0xb27f, 0xcc21,		0x22, 0
+	.dw 0xb480, 0xcc21,	0xb4bf, 0xcc21,		0x22, 0
+	.dw 0xb6c0, 0xcc21,	0xb6ff, 0xcc21,		0x22, 0
+	.dw 0xb900, 0xcc21,	0xb93f, 0xcc21,		0x22, 0
+	.dw 0xbb40, 0xcc21,	0xbb7f, 0xcc21,		0x22, 0
+	.dw 0xbd80, 0xcc21,	0xbdbf, 0xcc21,		0x22, 0
+	.dw 0xbfc0, 0xcc21,	0xc03f, 0xcc21,		0x22, 0
+	.dw 0xc240, 0xcc21,	0xc27f, 0xcc21,		0x22, 0
+	.dw 0xc480, 0xcc21,	0xc4bf, 0xcc21,		0x22, 0
+	.dw 0xc6c0, 0xcc21,	0xc6ff, 0xcc21,		0x22, 0
+	.dw 0xc900, 0xcc21,	0xc93f, 0xcc21,		0x22, 0
+	.dw 0xcb40, 0xcc21,	0xcb7f, 0xcc21,		0x22, 0
+	.dw 0xcd80, 0xcc21,	0xcdbf, 0xcc21,		0x22, 0
+	.dw 0xcfc0, 0xcc21,	0xd03f, 0xcc21,		0x22, 0
+	.dw 0xd240, 0xcc21,	0xd27f, 0xcc21,		0x22, 0
+	.dw 0xd480, 0xcc21,	0xd4bf, 0xcc21,		0x22, 0
+	.dw 0xd6c0, 0xcc21,	0xd6ff, 0xcc21,		0x22, 0
+	.dw 0xd900, 0xcc21,	0xd93f, 0xcc21,		0x22, 0
+	.dw 0xdb40, 0xcc21,	0xdb7f, 0xcc21,		0x22, 0
+	.dw 0xdd80, 0xcc21,	0xddbf, 0xcc21,		0x22, 0
+	.dw 0xdfc0, 0xcc21,	0xe03f, 0xcc21,		0x22, 0
+	.dw 0xe240, 0xcc21,	0xe27f, 0xcc21,		0x22, 0
+	.dw 0xe480, 0xcc21,	0xe4bf, 0xcc21,		0x22, 0
+	.dw 0xe6c0, 0xcc21,	0xe6ff, 0xcc21,		0x22, 0
+	.dw 0xe900, 0xcc21,	0xe93f, 0xcc21,		0x22, 0
+	.dw 0xeb40, 0xcc21,	0xeb7f, 0xcc21,		0x22, 0
+	.dw 0xed80, 0xcc21,	0xedbf, 0xcc21,		0x22, 0
+	.dw 0xefc0, 0xcc21,	0xf03f, 0xcc21,		0x22, 0
+	.dw 0xf240, 0xcc21,	0xf27f, 0xcc21,		0x22, 0
+	.dw 0xf480, 0xcc21,	0xf4bf, 0xcc21,		0x22, 0
+	.dw 0xf6c0, 0xcc21,	0xf6ff, 0xcc21,		0x22, 0
+	.dw 0xf900, 0xcc21,	0xf93f, 0xcc21,		0x22, 0
+	.dw 0xfb40, 0xcc21,	0xfb7f, 0xcc21,		0x22, 0
+	.dw 0xfd80, 0xcc21,	0xfdbf, 0xcc21,		0x22, 0
+	.dw 0xffc0, 0xcc21,	0xffff, 0xcc21,		0x22, 0
+	.dw 0x1000, 0xcc22,	0x1fff, 0xcc22,		0x21, 0
+	.dw 0x3000, 0xcc22,	0x3fff, 0xcc22,		0x21, 0
+	.dw 0x5000, 0xcc22,	0x5fff, 0xcc22,		0x21, 0
+	.dw 0x7000, 0xcc22,	0x7fff, 0xcc22,		0x21, 0
+	.dw 0x9000, 0xcc22,	0x9fff, 0xcc22,		0x21, 0
+	.dw 0xb000, 0xcc22,	0xbfff, 0xcc22,		0x21, 0
+	.dw 0xd000, 0xcc22,	0xdfff, 0xcc22,		0x21, 0
+	.dw 0xf000, 0xcc22,	0xffff, 0xcc22,		0x21, 0
+	.dw 0x1000, 0xcc23,	0x1fff, 0xcc23,		0x21, 0
+	.dw 0x3000, 0xcc23,	0x3fff, 0xcc23,		0x21, 0
+	.dw 0x5000, 0xcc23,	0x5fff, 0xcc23,		0x21, 0
+	.dw 0x7000, 0xcc23,	0x7fff, 0xcc23,		0x21, 0
+	.dw 0x9000, 0xcc23,	0x9fff, 0xcc23,		0x21, 0
+	.dw 0xb000, 0xcc23,	0xbfff, 0xcc23,		0x21, 0
+	.dw 0xd000, 0xcc23,	0xdfff, 0xcc23,		0x21, 0
+	.dw 0xf000, 0xcc23,	0xffff, 0xcc24,		0x21, 0
+	.dw 0x1000, 0xcc25,	0x3fff, 0xcc25,		0x21, 0
+	.dw 0x5000, 0xcc25,	0x8fff, 0xcc25,		0x21, 0
+	.dw 0xa000, 0xcc25,	0xcfff, 0xcc25,		0x21, 0
+	.dw 0xe000, 0xcc25,	0xffff, 0xcc28,		0x21, 0
+	.dw 0x1000, 0xcc29,	0x7fff, 0xcc29,		0x21, 0
+	.dw 0x9000, 0xcc29,	0xffff, 0xcc2a,		0x21, 0
+	.dw 0x1000, 0xcc2b,	0x3fff, 0xcc2b,		0x21, 0
+	.dw 0x5000, 0xcc2b,	0xbfff, 0xcc2c,		0x21, 0
+	.dw 0xd000, 0xcc2c,	0xffff, 0xcc2d,		0x21, 0
+	.dw 0x1000, 0xcc2e,	0x3fff, 0xcc2e,		0x21, 0
+	.dw 0x5000, 0xcc2e,	0xffff, 0xcc2f,		0x21, 0
+	.dw 0x1000, 0xcc30,	0x3fff, 0xcc30,		0x21, 0
+	.dw 0x5000, 0xcc30,	0xffff, 0xcc35,		0x21, 0
+	.dw 0x0001, 0xcc36,	0x0001, 0xcc36,		0x21, 0
+	.dw 0x0003, 0xcc36,	0x000f, 0xcc36,		0x21, 0
+	.dw 0x0011, 0xcc36,	0x0011, 0xcc36,		0x21, 0
+	.dw 0x0013, 0xcc36,	0x003f, 0xcc36,		0x21, 0
+	.dw 0x0041, 0xcc36,	0x0041, 0xcc36,		0x21, 0
+	.dw 0x0043, 0xcc36,	0x004f, 0xcc36,		0x21, 0
+	.dw 0x0051, 0xcc36,	0x0051, 0xcc36,		0x21, 0
+	.dw 0x0053, 0xcc36,	0x007f, 0xcc36,		0x21, 0
+	.dw 0x0081, 0xcc36,	0x0081, 0xcc36,		0x21, 0
+	.dw 0x0083, 0xcc36,	0x008f, 0xcc36,		0x21, 0
+	.dw 0x0091, 0xcc36,	0x0091, 0xcc36,		0x21, 0
+	.dw 0x0093, 0xcc36,	0x00bf, 0xcc36,		0x21, 0
+	.dw 0x00c1, 0xcc36,	0x00c1, 0xcc36,		0x21, 0
+	.dw 0x00c3, 0xcc36,	0x00cf, 0xcc36,		0x21, 0
+	.dw 0x00d1, 0xcc36,	0x00d1, 0xcc36,		0x21, 0
+	.dw 0x00d3, 0xcc36,	0x00ff, 0xcc36,		0x21, 0
+	.dw 0x0101, 0xcc36,	0x0101, 0xcc36,		0x21, 0
+	.dw 0x0103, 0xcc36,	0x010f, 0xcc36,		0x21, 0
+	.dw 0x0111, 0xcc36,	0x0111, 0xcc36,		0x21, 0
+	.dw 0x0113, 0xcc36,	0x013f, 0xcc36,		0x21, 0
+	.dw 0x0141, 0xcc36,	0x0141, 0xcc36,		0x21, 0
+	.dw 0x0143, 0xcc36,	0x014f, 0xcc36,		0x21, 0
+	.dw 0x0151, 0xcc36,	0x0151, 0xcc36,		0x21, 0
+	.dw 0x0153, 0xcc36,	0x017f, 0xcc36,		0x21, 0
+	.dw 0x0181, 0xcc36,	0x0181, 0xcc36,		0x21, 0
+	.dw 0x0183, 0xcc36,	0x018f, 0xcc36,		0x21, 0
+	.dw 0x0191, 0xcc36,	0x0191, 0xcc36,		0x21, 0
+	.dw 0x0193, 0xcc36,	0x01bf, 0xcc36,		0x21, 0
+	.dw 0x01c1, 0xcc36,	0x01c1, 0xcc36,		0x21, 0
+	.dw 0x01c3, 0xcc36,	0x01cf, 0xcc36,		0x21, 0
+	.dw 0x01d1, 0xcc36,	0x01d1, 0xcc36,		0x21, 0
+	.dw 0x01d3, 0xcc36,	0x01ff, 0xcc36,		0x21, 0
+	.dw 0x0201, 0xcc36,	0x0201, 0xcc36,		0x21, 0
+	.dw 0x0203, 0xcc36,	0x020f, 0xcc36,		0x21, 0
+	.dw 0x0211, 0xcc36,	0x0211, 0xcc36,		0x21, 0
+	.dw 0x0213, 0xcc36,	0x023f, 0xcc36,		0x21, 0
+	.dw 0x0241, 0xcc36,	0x0241, 0xcc36,		0x21, 0
+	.dw 0x0243, 0xcc36,	0x024f, 0xcc36,		0x21, 0
+	.dw 0x0251, 0xcc36,	0x0251, 0xcc36,		0x21, 0
+	.dw 0x0253, 0xcc36,	0x027f, 0xcc36,		0x21, 0
+	.dw 0x0281, 0xcc36,	0x0281, 0xcc36,		0x21, 0
+	.dw 0x0283, 0xcc36,	0x028f, 0xcc36,		0x21, 0
+	.dw 0x0291, 0xcc36,	0x0291, 0xcc36,		0x21, 0
+	.dw 0x0293, 0xcc36,	0x02bf, 0xcc36,		0x21, 0
+	.dw 0x02c1, 0xcc36,	0x02c1, 0xcc36,		0x21, 0
+	.dw 0x02c3, 0xcc36,	0x02cf, 0xcc36,		0x21, 0
+	.dw 0x02d1, 0xcc36,	0x02d1, 0xcc36,		0x21, 0
+	.dw 0x02d3, 0xcc36,	0x02ff, 0xcc36,		0x21, 0
+	.dw 0x0301, 0xcc36,	0x0301, 0xcc36,		0x21, 0
+	.dw 0x0303, 0xcc36,	0x030f, 0xcc36,		0x21, 0
+	.dw 0x0311, 0xcc36,	0x0311, 0xcc36,		0x21, 0
+	.dw 0x0313, 0xcc36,	0x033f, 0xcc36,		0x21, 0
+	.dw 0x0341, 0xcc36,	0x0341, 0xcc36,		0x21, 0
+	.dw 0x0343, 0xcc36,	0x034f, 0xcc36,		0x21, 0
+	.dw 0x0351, 0xcc36,	0x0351, 0xcc36,		0x21, 0
+	.dw 0x0353, 0xcc36,	0x037f, 0xcc36,		0x21, 0
+	.dw 0x0381, 0xcc36,	0x0381, 0xcc36,		0x21, 0
+	.dw 0x0383, 0xcc36,	0x038f, 0xcc36,		0x21, 0
+	.dw 0x0391, 0xcc36,	0x0391, 0xcc36,		0x21, 0
+	.dw 0x0393, 0xcc36,	0x03bf, 0xcc36,		0x21, 0
+	.dw 0x03c1, 0xcc36,	0x03c1, 0xcc36,		0x21, 0
+	.dw 0x03c3, 0xcc36,	0x03cf, 0xcc36,		0x21, 0
+	.dw 0x03d1, 0xcc36,	0x03d1, 0xcc36,		0x21, 0
+	.dw 0x03d3, 0xcc36,	0x03ff, 0xcc36,		0x21, 0
+	.dw 0x0401, 0xcc36,	0x0401, 0xcc36,		0x21, 0
+	.dw 0x0403, 0xcc36,	0x040f, 0xcc36,		0x21, 0
+	.dw 0x0411, 0xcc36,	0x0411, 0xcc36,		0x21, 0
+	.dw 0x0413, 0xcc36,	0x043f, 0xcc36,		0x21, 0
+	.dw 0x0441, 0xcc36,	0x0441, 0xcc36,		0x21, 0
+	.dw 0x0443, 0xcc36,	0x044f, 0xcc36,		0x21, 0
+	.dw 0x0451, 0xcc36,	0x0451, 0xcc36,		0x21, 0
+	.dw 0x0453, 0xcc36,	0x047f, 0xcc36,		0x21, 0
+	.dw 0x0481, 0xcc36,	0x0481, 0xcc36,		0x21, 0
+	.dw 0x0483, 0xcc36,	0x048f, 0xcc36,		0x21, 0
+	.dw 0x0491, 0xcc36,	0x0491, 0xcc36,		0x21, 0
+	.dw 0x0493, 0xcc36,	0x04bf, 0xcc36,		0x21, 0
+	.dw 0x04c1, 0xcc36,	0x04c1, 0xcc36,		0x21, 0
+	.dw 0x04c3, 0xcc36,	0x04cf, 0xcc36,		0x21, 0
+	.dw 0x04d1, 0xcc36,	0x04d1, 0xcc36,		0x21, 0
+	.dw 0x04d3, 0xcc36,	0x04ff, 0xcc36,		0x21, 0
+	.dw 0x0501, 0xcc36,	0x0501, 0xcc36,		0x21, 0
+	.dw 0x0503, 0xcc36,	0x050f, 0xcc36,		0x21, 0
+	.dw 0x0511, 0xcc36,	0x0511, 0xcc36,		0x21, 0
+	.dw 0x0513, 0xcc36,	0x053f, 0xcc36,		0x21, 0
+	.dw 0x0541, 0xcc36,	0x0541, 0xcc36,		0x21, 0
+	.dw 0x0543, 0xcc36,	0x054f, 0xcc36,		0x21, 0
+	.dw 0x0551, 0xcc36,	0x0551, 0xcc36,		0x21, 0
+	.dw 0x0553, 0xcc36,	0x057f, 0xcc36,		0x21, 0
+	.dw 0x0581, 0xcc36,	0x0581, 0xcc36,		0x21, 0
+	.dw 0x0583, 0xcc36,	0x058f, 0xcc36,		0x21, 0
+	.dw 0x0591, 0xcc36,	0x0591, 0xcc36,		0x21, 0
+	.dw 0x0593, 0xcc36,	0x05bf, 0xcc36,		0x21, 0
+	.dw 0x05c1, 0xcc36,	0x05c1, 0xcc36,		0x21, 0
+	.dw 0x05c3, 0xcc36,	0x05cf, 0xcc36,		0x21, 0
+	.dw 0x05d1, 0xcc36,	0x05d1, 0xcc36,		0x21, 0
+	.dw 0x05d3, 0xcc36,	0x05ff, 0xcc36,		0x21, 0
+	.dw 0x0601, 0xcc36,	0x0601, 0xcc36,		0x21, 0
+	.dw 0x0603, 0xcc36,	0x060f, 0xcc36,		0x21, 0
+	.dw 0x0611, 0xcc36,	0x0611, 0xcc36,		0x21, 0
+	.dw 0x0613, 0xcc36,	0x063f, 0xcc36,		0x21, 0
+	.dw 0x0641, 0xcc36,	0x0641, 0xcc36,		0x21, 0
+	.dw 0x0643, 0xcc36,	0x064f, 0xcc36,		0x21, 0
+	.dw 0x0651, 0xcc36,	0x0651, 0xcc36,		0x21, 0
+	.dw 0x0653, 0xcc36,	0x067f, 0xcc36,		0x21, 0
+	.dw 0x0681, 0xcc36,	0x0681, 0xcc36,		0x21, 0
+	.dw 0x0683, 0xcc36,	0x068f, 0xcc36,		0x21, 0
+	.dw 0x0691, 0xcc36,	0x0691, 0xcc36,		0x21, 0
+	.dw 0x0693, 0xcc36,	0x06bf, 0xcc36,		0x21, 0
+	.dw 0x06c1, 0xcc36,	0x06c1, 0xcc36,		0x21, 0
+	.dw 0x06c3, 0xcc36,	0x06cf, 0xcc36,		0x21, 0
+	.dw 0x06d1, 0xcc36,	0x06d1, 0xcc36,		0x21, 0
+	.dw 0x06d3, 0xcc36,	0x06ff, 0xcc36,		0x21, 0
+	.dw 0x0701, 0xcc36,	0x0701, 0xcc36,		0x21, 0
+	.dw 0x0703, 0xcc36,	0x070f, 0xcc36,		0x21, 0
+	.dw 0x0711, 0xcc36,	0x0711, 0xcc36,		0x21, 0
+	.dw 0x0713, 0xcc36,	0x073f, 0xcc36,		0x21, 0
+	.dw 0x0741, 0xcc36,	0x0741, 0xcc36,		0x21, 0
+	.dw 0x0743, 0xcc36,	0x074f, 0xcc36,		0x21, 0
+	.dw 0x0751, 0xcc36,	0x0751, 0xcc36,		0x21, 0
+	.dw 0x0753, 0xcc36,	0x077f, 0xcc36,		0x21, 0
+	.dw 0x0781, 0xcc36,	0x0781, 0xcc36,		0x21, 0
+	.dw 0x0783, 0xcc36,	0x078f, 0xcc36,		0x21, 0
+	.dw 0x0791, 0xcc36,	0x0791, 0xcc36,		0x21, 0
+	.dw 0x0793, 0xcc36,	0x07bf, 0xcc36,		0x21, 0
+	.dw 0x07c1, 0xcc36,	0x07c1, 0xcc36,		0x21, 0
+	.dw 0x07c3, 0xcc36,	0x07cf, 0xcc36,		0x21, 0
+	.dw 0x07d1, 0xcc36,	0x07d1, 0xcc36,		0x21, 0
+	.dw 0x07d3, 0xcc36,	0x07ff, 0xcc36,		0x21, 0
+	.dw 0x0801, 0xcc36,	0x0801, 0xcc36,		0x21, 0
+	.dw 0x0803, 0xcc36,	0x080f, 0xcc36,		0x21, 0
+	.dw 0x0811, 0xcc36,	0x0811, 0xcc36,		0x21, 0
+	.dw 0x0813, 0xcc36,	0x083f, 0xcc36,		0x21, 0
+	.dw 0x0841, 0xcc36,	0x0841, 0xcc36,		0x21, 0
+	.dw 0x0843, 0xcc36,	0x084f, 0xcc36,		0x21, 0
+	.dw 0x0851, 0xcc36,	0x0851, 0xcc36,		0x21, 0
+	.dw 0x0853, 0xcc36,	0x087f, 0xcc36,		0x21, 0
+	.dw 0x0881, 0xcc36,	0x0881, 0xcc36,		0x21, 0
+	.dw 0x0883, 0xcc36,	0x088f, 0xcc36,		0x21, 0
+	.dw 0x0891, 0xcc36,	0x0891, 0xcc36,		0x21, 0
+	.dw 0x0893, 0xcc36,	0x08bf, 0xcc36,		0x21, 0
+	.dw 0x08c1, 0xcc36,	0x08c1, 0xcc36,		0x21, 0
+	.dw 0x08c3, 0xcc36,	0x08cf, 0xcc36,		0x21, 0
+	.dw 0x08d1, 0xcc36,	0x08d1, 0xcc36,		0x21, 0
+	.dw 0x08d3, 0xcc36,	0x08ff, 0xcc36,		0x21, 0
+	.dw 0x0901, 0xcc36,	0x0901, 0xcc36,		0x21, 0
+	.dw 0x0903, 0xcc36,	0x090f, 0xcc36,		0x21, 0
+	.dw 0x0911, 0xcc36,	0x0911, 0xcc36,		0x21, 0
+	.dw 0x0913, 0xcc36,	0x093f, 0xcc36,		0x21, 0
+	.dw 0x0941, 0xcc36,	0x0941, 0xcc36,		0x21, 0
+	.dw 0x0943, 0xcc36,	0x094f, 0xcc36,		0x21, 0
+	.dw 0x0951, 0xcc36,	0x0951, 0xcc36,		0x21, 0
+	.dw 0x0953, 0xcc36,	0x097f, 0xcc36,		0x21, 0
+	.dw 0x0981, 0xcc36,	0x0981, 0xcc36,		0x21, 0
+	.dw 0x0983, 0xcc36,	0x098f, 0xcc36,		0x21, 0
+	.dw 0x0991, 0xcc36,	0x0991, 0xcc36,		0x21, 0
+	.dw 0x0993, 0xcc36,	0x09bf, 0xcc36,		0x21, 0
+	.dw 0x09c1, 0xcc36,	0x09c1, 0xcc36,		0x21, 0
+	.dw 0x09c3, 0xcc36,	0x09cf, 0xcc36,		0x21, 0
+	.dw 0x09d1, 0xcc36,	0x09d1, 0xcc36,		0x21, 0
+	.dw 0x09d3, 0xcc36,	0x09ff, 0xcc36,		0x21, 0
+	.dw 0x0a01, 0xcc36,	0x0a01, 0xcc36,		0x21, 0
+	.dw 0x0a03, 0xcc36,	0x0a0f, 0xcc36,		0x21, 0
+	.dw 0x0a11, 0xcc36,	0x0a11, 0xcc36,		0x21, 0
+	.dw 0x0a13, 0xcc36,	0x0a3f, 0xcc36,		0x21, 0
+	.dw 0x0a41, 0xcc36,	0x0a41, 0xcc36,		0x21, 0
+	.dw 0x0a43, 0xcc36,	0x0a4f, 0xcc36,		0x21, 0
+	.dw 0x0a51, 0xcc36,	0x0a51, 0xcc36,		0x21, 0
+	.dw 0x0a53, 0xcc36,	0x0a7f, 0xcc36,		0x21, 0
+	.dw 0x0a81, 0xcc36,	0x0a81, 0xcc36,		0x21, 0
+	.dw 0x0a83, 0xcc36,	0x0a8f, 0xcc36,		0x21, 0
+	.dw 0x0a91, 0xcc36,	0x0a91, 0xcc36,		0x21, 0
+	.dw 0x0a93, 0xcc36,	0x0abf, 0xcc36,		0x21, 0
+	.dw 0x0ac1, 0xcc36,	0x0ac1, 0xcc36,		0x21, 0
+	.dw 0x0ac3, 0xcc36,	0x0acf, 0xcc36,		0x21, 0
+	.dw 0x0ad1, 0xcc36,	0x0ad1, 0xcc36,		0x21, 0
+	.dw 0x0ad3, 0xcc36,	0x0aff, 0xcc36,		0x21, 0
+	.dw 0x0b01, 0xcc36,	0x0b01, 0xcc36,		0x21, 0
+	.dw 0x0b03, 0xcc36,	0x0b0f, 0xcc36,		0x21, 0
+	.dw 0x0b11, 0xcc36,	0x0b11, 0xcc36,		0x21, 0
+	.dw 0x0b13, 0xcc36,	0x0b3f, 0xcc36,		0x21, 0
+	.dw 0x0b41, 0xcc36,	0x0b41, 0xcc36,		0x21, 0
+	.dw 0x0b43, 0xcc36,	0x0b4f, 0xcc36,		0x21, 0
+	.dw 0x0b51, 0xcc36,	0x0b51, 0xcc36,		0x21, 0
+	.dw 0x0b53, 0xcc36,	0x0b7f, 0xcc36,		0x21, 0
+	.dw 0x0b81, 0xcc36,	0x0b81, 0xcc36,		0x21, 0
+	.dw 0x0b83, 0xcc36,	0x0b8f, 0xcc36,		0x21, 0
+	.dw 0x0b91, 0xcc36,	0x0b91, 0xcc36,		0x21, 0
+	.dw 0x0b93, 0xcc36,	0x0bbf, 0xcc36,		0x21, 0
+	.dw 0x0bc1, 0xcc36,	0x0bc1, 0xcc36,		0x21, 0
+	.dw 0x0bc3, 0xcc36,	0x0bcf, 0xcc36,		0x21, 0
+	.dw 0x0bd1, 0xcc36,	0x0bd1, 0xcc36,		0x21, 0
+	.dw 0x0bd3, 0xcc36,	0x0bff, 0xcc36,		0x21, 0
+	.dw 0x0c01, 0xcc36,	0x0c01, 0xcc36,		0x21, 0
+	.dw 0x0c03, 0xcc36,	0x0c0f, 0xcc36,		0x21, 0
+	.dw 0x0c11, 0xcc36,	0x0c11, 0xcc36,		0x21, 0
+	.dw 0x0c13, 0xcc36,	0x0c3f, 0xcc36,		0x21, 0
+	.dw 0x0c41, 0xcc36,	0x0c41, 0xcc36,		0x21, 0
+	.dw 0x0c43, 0xcc36,	0x0c4f, 0xcc36,		0x21, 0
+	.dw 0x0c51, 0xcc36,	0x0c51, 0xcc36,		0x21, 0
+	.dw 0x0c53, 0xcc36,	0x0c7f, 0xcc36,		0x21, 0
+	.dw 0x0c81, 0xcc36,	0x0c81, 0xcc36,		0x21, 0
+	.dw 0x0c83, 0xcc36,	0x0c8f, 0xcc36,		0x21, 0
+	.dw 0x0c91, 0xcc36,	0x0c91, 0xcc36,		0x21, 0
+	.dw 0x0c93, 0xcc36,	0x0cbf, 0xcc36,		0x21, 0
+	.dw 0x0cc1, 0xcc36,	0x0cc1, 0xcc36,		0x21, 0
+	.dw 0x0cc3, 0xcc36,	0x0ccf, 0xcc36,		0x21, 0
+	.dw 0x0cd1, 0xcc36,	0x0cd1, 0xcc36,		0x21, 0
+	.dw 0x0cd3, 0xcc36,	0x0cff, 0xcc36,		0x21, 0
+	.dw 0x0d01, 0xcc36,	0x0d01, 0xcc36,		0x21, 0
+	.dw 0x0d03, 0xcc36,	0x0d0f, 0xcc36,		0x21, 0
+	.dw 0x0d11, 0xcc36,	0x0d11, 0xcc36,		0x21, 0
+	.dw 0x0d13, 0xcc36,	0x0d3f, 0xcc36,		0x21, 0
+	.dw 0x0d41, 0xcc36,	0x0d41, 0xcc36,		0x21, 0
+	.dw 0x0d43, 0xcc36,	0x0d4f, 0xcc36,		0x21, 0
+	.dw 0x0d51, 0xcc36,	0x0d51, 0xcc36,		0x21, 0
+	.dw 0x0d53, 0xcc36,	0x0d7f, 0xcc36,		0x21, 0
+	.dw 0x0d81, 0xcc36,	0x0d81, 0xcc36,		0x21, 0
+	.dw 0x0d83, 0xcc36,	0x0d8f, 0xcc36,		0x21, 0
+	.dw 0x0d91, 0xcc36,	0x0d91, 0xcc36,		0x21, 0
+	.dw 0x0d93, 0xcc36,	0x0dbf, 0xcc36,		0x21, 0
+	.dw 0x0dc1, 0xcc36,	0x0dc1, 0xcc36,		0x21, 0
+	.dw 0x0dc3, 0xcc36,	0x0dcf, 0xcc36,		0x21, 0
+	.dw 0x0dd1, 0xcc36,	0x0dd1, 0xcc36,		0x21, 0
+	.dw 0x0dd3, 0xcc36,	0x0dff, 0xcc36,		0x21, 0
+	.dw 0x0e01, 0xcc36,	0x0e01, 0xcc36,		0x21, 0
+	.dw 0x0e03, 0xcc36,	0x0e0f, 0xcc36,		0x21, 0
+	.dw 0x0e11, 0xcc36,	0x0e11, 0xcc36,		0x21, 0
+	.dw 0x0e13, 0xcc36,	0x0e3f, 0xcc36,		0x21, 0
+	.dw 0x0e41, 0xcc36,	0x0e41, 0xcc36,		0x21, 0
+	.dw 0x0e43, 0xcc36,	0x0e4f, 0xcc36,		0x21, 0
+	.dw 0x0e51, 0xcc36,	0x0e51, 0xcc36,		0x21, 0
+	.dw 0x0e53, 0xcc36,	0x0e7f, 0xcc36,		0x21, 0
+	.dw 0x0e81, 0xcc36,	0x0e81, 0xcc36,		0x21, 0
+	.dw 0x0e83, 0xcc36,	0x0e8f, 0xcc36,		0x21, 0
+	.dw 0x0e91, 0xcc36,	0x0e91, 0xcc36,		0x21, 0
+	.dw 0x0e93, 0xcc36,	0x0ebf, 0xcc36,		0x21, 0
+	.dw 0x0ec1, 0xcc36,	0x0ec1, 0xcc36,		0x21, 0
+	.dw 0x0ec3, 0xcc36,	0x0ecf, 0xcc36,		0x21, 0
+	.dw 0x0ed1, 0xcc36,	0x0ed1, 0xcc36,		0x21, 0
+	.dw 0x0ed3, 0xcc36,	0x0eff, 0xcc36,		0x21, 0
+	.dw 0x0f01, 0xcc36,	0x0f01, 0xcc36,		0x21, 0
+	.dw 0x0f03, 0xcc36,	0x0f0f, 0xcc36,		0x21, 0
+	.dw 0x0f11, 0xcc36,	0x0f11, 0xcc36,		0x21, 0
+	.dw 0x0f13, 0xcc36,	0x0f3f, 0xcc36,		0x21, 0
+	.dw 0x0f41, 0xcc36,	0x0f41, 0xcc36,		0x21, 0
+	.dw 0x0f43, 0xcc36,	0x0f4f, 0xcc36,		0x21, 0
+	.dw 0x0f51, 0xcc36,	0x0f51, 0xcc36,		0x21, 0
+	.dw 0x0f53, 0xcc36,	0x0f7f, 0xcc36,		0x21, 0
+	.dw 0x0f81, 0xcc36,	0x0f81, 0xcc36,		0x21, 0
+	.dw 0x0f83, 0xcc36,	0x0f8f, 0xcc36,		0x21, 0
+	.dw 0x0f91, 0xcc36,	0x0f91, 0xcc36,		0x21, 0
+	.dw 0x0f93, 0xcc36,	0x0fbf, 0xcc36,		0x21, 0
+	.dw 0x0fc1, 0xcc36,	0x0fc1, 0xcc36,		0x21, 0
+	.dw 0x0fc3, 0xcc36,	0x0fcf, 0xcc36,		0x21, 0
+	.dw 0x0fd1, 0xcc36,	0x0fd1, 0xcc36,		0x21, 0
+	.dw 0x0fd3, 0xcc36,	0x1fff, 0xcc36,		0x21, 0
+	.dw 0x2001, 0xcc36,	0x2001, 0xcc36,		0x21, 0
+	.dw 0x2003, 0xcc36,	0x200f, 0xcc36,		0x21, 0
+	.dw 0x2011, 0xcc36,	0x2011, 0xcc36,		0x21, 0
+	.dw 0x2013, 0xcc36,	0x203f, 0xcc36,		0x21, 0
+	.dw 0x2041, 0xcc36,	0x2041, 0xcc36,		0x21, 0
+	.dw 0x2043, 0xcc36,	0x204f, 0xcc36,		0x21, 0
+	.dw 0x2051, 0xcc36,	0x2051, 0xcc36,		0x21, 0
+	.dw 0x2053, 0xcc36,	0x207f, 0xcc36,		0x21, 0
+	.dw 0x2081, 0xcc36,	0x2081, 0xcc36,		0x21, 0
+	.dw 0x2083, 0xcc36,	0x208f, 0xcc36,		0x21, 0
+	.dw 0x2091, 0xcc36,	0x2091, 0xcc36,		0x21, 0
+	.dw 0x2093, 0xcc36,	0x20bf, 0xcc36,		0x21, 0
+	.dw 0x20c1, 0xcc36,	0x20c1, 0xcc36,		0x21, 0
+	.dw 0x20c3, 0xcc36,	0x20cf, 0xcc36,		0x21, 0
+	.dw 0x20d1, 0xcc36,	0x20d1, 0xcc36,		0x21, 0
+	.dw 0x20d3, 0xcc36,	0x20ff, 0xcc36,		0x21, 0
+	.dw 0x2101, 0xcc36,	0x2101, 0xcc36,		0x21, 0
+	.dw 0x2103, 0xcc36,	0x210f, 0xcc36,		0x21, 0
+	.dw 0x2111, 0xcc36,	0x2111, 0xcc36,		0x21, 0
+	.dw 0x2113, 0xcc36,	0x213f, 0xcc36,		0x21, 0
+	.dw 0x2141, 0xcc36,	0x2141, 0xcc36,		0x21, 0
+	.dw 0x2143, 0xcc36,	0x214f, 0xcc36,		0x21, 0
+	.dw 0x2151, 0xcc36,	0x2151, 0xcc36,		0x21, 0
+	.dw 0x2153, 0xcc36,	0x217f, 0xcc36,		0x21, 0
+	.dw 0x2181, 0xcc36,	0x2181, 0xcc36,		0x21, 0
+	.dw 0x2183, 0xcc36,	0x218f, 0xcc36,		0x21, 0
+	.dw 0x2191, 0xcc36,	0x2191, 0xcc36,		0x21, 0
+	.dw 0x2193, 0xcc36,	0x21bf, 0xcc36,		0x21, 0
+	.dw 0x21c1, 0xcc36,	0x21c1, 0xcc36,		0x21, 0
+	.dw 0x21c3, 0xcc36,	0x21cf, 0xcc36,		0x21, 0
+	.dw 0x21d1, 0xcc36,	0x21d1, 0xcc36,		0x21, 0
+	.dw 0x21d3, 0xcc36,	0x21ff, 0xcc36,		0x21, 0
+	.dw 0x2201, 0xcc36,	0x2201, 0xcc36,		0x21, 0
+	.dw 0x2203, 0xcc36,	0x220f, 0xcc36,		0x21, 0
+	.dw 0x2211, 0xcc36,	0x2211, 0xcc36,		0x21, 0
+	.dw 0x2213, 0xcc36,	0x223f, 0xcc36,		0x21, 0
+	.dw 0x2241, 0xcc36,	0x2241, 0xcc36,		0x21, 0
+	.dw 0x2243, 0xcc36,	0x224f, 0xcc36,		0x21, 0
+	.dw 0x2251, 0xcc36,	0x2251, 0xcc36,		0x21, 0
+	.dw 0x2253, 0xcc36,	0x227f, 0xcc36,		0x21, 0
+	.dw 0x2281, 0xcc36,	0x2281, 0xcc36,		0x21, 0
+	.dw 0x2283, 0xcc36,	0x228f, 0xcc36,		0x21, 0
+	.dw 0x2291, 0xcc36,	0x2291, 0xcc36,		0x21, 0
+	.dw 0x2293, 0xcc36,	0x22bf, 0xcc36,		0x21, 0
+	.dw 0x22c1, 0xcc36,	0x22c1, 0xcc36,		0x21, 0
+	.dw 0x22c3, 0xcc36,	0x22cf, 0xcc36,		0x21, 0
+	.dw 0x22d1, 0xcc36,	0x22d1, 0xcc36,		0x21, 0
+	.dw 0x22d3, 0xcc36,	0x22ff, 0xcc36,		0x21, 0
+	.dw 0x2301, 0xcc36,	0x2301, 0xcc36,		0x21, 0
+	.dw 0x2303, 0xcc36,	0x230f, 0xcc36,		0x21, 0
+	.dw 0x2311, 0xcc36,	0x2311, 0xcc36,		0x21, 0
+	.dw 0x2313, 0xcc36,	0x233f, 0xcc36,		0x21, 0
+	.dw 0x2341, 0xcc36,	0x2341, 0xcc36,		0x21, 0
+	.dw 0x2343, 0xcc36,	0x234f, 0xcc36,		0x21, 0
+	.dw 0x2351, 0xcc36,	0x2351, 0xcc36,		0x21, 0
+	.dw 0x2353, 0xcc36,	0x237f, 0xcc36,		0x21, 0
+	.dw 0x2381, 0xcc36,	0x2381, 0xcc36,		0x21, 0
+	.dw 0x2383, 0xcc36,	0x238f, 0xcc36,		0x21, 0
+	.dw 0x2391, 0xcc36,	0x2391, 0xcc36,		0x21, 0
+	.dw 0x2393, 0xcc36,	0x23bf, 0xcc36,		0x21, 0
+	.dw 0x23c1, 0xcc36,	0x23c1, 0xcc36,		0x21, 0
+	.dw 0x23c3, 0xcc36,	0x23cf, 0xcc36,		0x21, 0
+	.dw 0x23d1, 0xcc36,	0x23d1, 0xcc36,		0x21, 0
+	.dw 0x23d3, 0xcc36,	0x23ff, 0xcc36,		0x21, 0
+	.dw 0x2401, 0xcc36,	0x2401, 0xcc36,		0x21, 0
+	.dw 0x2403, 0xcc36,	0x240f, 0xcc36,		0x21, 0
+	.dw 0x2411, 0xcc36,	0x2411, 0xcc36,		0x21, 0
+	.dw 0x2413, 0xcc36,	0x243f, 0xcc36,		0x21, 0
+	.dw 0x2441, 0xcc36,	0x2441, 0xcc36,		0x21, 0
+	.dw 0x2443, 0xcc36,	0x244f, 0xcc36,		0x21, 0
+	.dw 0x2451, 0xcc36,	0x2451, 0xcc36,		0x21, 0
+	.dw 0x2453, 0xcc36,	0x247f, 0xcc36,		0x21, 0
+	.dw 0x2481, 0xcc36,	0x2481, 0xcc36,		0x21, 0
+	.dw 0x2483, 0xcc36,	0x248f, 0xcc36,		0x21, 0
+	.dw 0x2491, 0xcc36,	0x2491, 0xcc36,		0x21, 0
+	.dw 0x2493, 0xcc36,	0x24bf, 0xcc36,		0x21, 0
+	.dw 0x24c1, 0xcc36,	0x24c1, 0xcc36,		0x21, 0
+	.dw 0x24c3, 0xcc36,	0x24cf, 0xcc36,		0x21, 0
+	.dw 0x24d1, 0xcc36,	0x24d1, 0xcc36,		0x21, 0
+	.dw 0x24d3, 0xcc36,	0x24ff, 0xcc36,		0x21, 0
+	.dw 0x2501, 0xcc36,	0x2501, 0xcc36,		0x21, 0
+	.dw 0x2503, 0xcc36,	0x250f, 0xcc36,		0x21, 0
+	.dw 0x2511, 0xcc36,	0x2511, 0xcc36,		0x21, 0
+	.dw 0x2513, 0xcc36,	0x253f, 0xcc36,		0x21, 0
+	.dw 0x2541, 0xcc36,	0x2541, 0xcc36,		0x21, 0
+	.dw 0x2543, 0xcc36,	0x254f, 0xcc36,		0x21, 0
+	.dw 0x2551, 0xcc36,	0x2551, 0xcc36,		0x21, 0
+	.dw 0x2553, 0xcc36,	0x257f, 0xcc36,		0x21, 0
+	.dw 0x2581, 0xcc36,	0x2581, 0xcc36,		0x21, 0
+	.dw 0x2583, 0xcc36,	0x258f, 0xcc36,		0x21, 0
+	.dw 0x2591, 0xcc36,	0x2591, 0xcc36,		0x21, 0
+	.dw 0x2593, 0xcc36,	0x25bf, 0xcc36,		0x21, 0
+	.dw 0x25c1, 0xcc36,	0x25c1, 0xcc36,		0x21, 0
+	.dw 0x25c3, 0xcc36,	0x25cf, 0xcc36,		0x21, 0
+	.dw 0x25d1, 0xcc36,	0x25d1, 0xcc36,		0x21, 0
+	.dw 0x25d3, 0xcc36,	0x25ff, 0xcc36,		0x21, 0
+	.dw 0x2601, 0xcc36,	0x2601, 0xcc36,		0x21, 0
+	.dw 0x2603, 0xcc36,	0x260f, 0xcc36,		0x21, 0
+	.dw 0x2611, 0xcc36,	0x2611, 0xcc36,		0x21, 0
+	.dw 0x2613, 0xcc36,	0x263f, 0xcc36,		0x21, 0
+	.dw 0x2641, 0xcc36,	0x2641, 0xcc36,		0x21, 0
+	.dw 0x2643, 0xcc36,	0x264f, 0xcc36,		0x21, 0
+	.dw 0x2651, 0xcc36,	0x2651, 0xcc36,		0x21, 0
+	.dw 0x2653, 0xcc36,	0x267f, 0xcc36,		0x21, 0
+	.dw 0x2681, 0xcc36,	0x2681, 0xcc36,		0x21, 0
+	.dw 0x2683, 0xcc36,	0x268f, 0xcc36,		0x21, 0
+	.dw 0x2691, 0xcc36,	0x2691, 0xcc36,		0x21, 0
+	.dw 0x2693, 0xcc36,	0x26bf, 0xcc36,		0x21, 0
+	.dw 0x26c1, 0xcc36,	0x26c1, 0xcc36,		0x21, 0
+	.dw 0x26c3, 0xcc36,	0x26cf, 0xcc36,		0x21, 0
+	.dw 0x26d1, 0xcc36,	0x26d1, 0xcc36,		0x21, 0
+	.dw 0x26d3, 0xcc36,	0x26ff, 0xcc36,		0x21, 0
+	.dw 0x2701, 0xcc36,	0x2701, 0xcc36,		0x21, 0
+	.dw 0x2703, 0xcc36,	0x270f, 0xcc36,		0x21, 0
+	.dw 0x2711, 0xcc36,	0x2711, 0xcc36,		0x21, 0
+	.dw 0x2713, 0xcc36,	0x273f, 0xcc36,		0x21, 0
+	.dw 0x2741, 0xcc36,	0x2741, 0xcc36,		0x21, 0
+	.dw 0x2743, 0xcc36,	0x274f, 0xcc36,		0x21, 0
+	.dw 0x2751, 0xcc36,	0x2751, 0xcc36,		0x21, 0
+	.dw 0x2753, 0xcc36,	0x277f, 0xcc36,		0x21, 0
+	.dw 0x2781, 0xcc36,	0x2781, 0xcc36,		0x21, 0
+	.dw 0x2783, 0xcc36,	0x278f, 0xcc36,		0x21, 0
+	.dw 0x2791, 0xcc36,	0x2791, 0xcc36,		0x21, 0
+	.dw 0x2793, 0xcc36,	0x27bf, 0xcc36,		0x21, 0
+	.dw 0x27c1, 0xcc36,	0x27c1, 0xcc36,		0x21, 0
+	.dw 0x27c3, 0xcc36,	0x27cf, 0xcc36,		0x21, 0
+	.dw 0x27d1, 0xcc36,	0x27d1, 0xcc36,		0x21, 0
+	.dw 0x27d3, 0xcc36,	0x27ff, 0xcc36,		0x21, 0
+	.dw 0x2801, 0xcc36,	0x2801, 0xcc36,		0x21, 0
+	.dw 0x2803, 0xcc36,	0x280f, 0xcc36,		0x21, 0
+	.dw 0x2811, 0xcc36,	0x2811, 0xcc36,		0x21, 0
+	.dw 0x2813, 0xcc36,	0x283f, 0xcc36,		0x21, 0
+	.dw 0x2841, 0xcc36,	0x2841, 0xcc36,		0x21, 0
+	.dw 0x2843, 0xcc36,	0x284f, 0xcc36,		0x21, 0
+	.dw 0x2851, 0xcc36,	0x2851, 0xcc36,		0x21, 0
+	.dw 0x2853, 0xcc36,	0x287f, 0xcc36,		0x21, 0
+	.dw 0x2881, 0xcc36,	0x2881, 0xcc36,		0x21, 0
+	.dw 0x2883, 0xcc36,	0x288f, 0xcc36,		0x21, 0
+	.dw 0x2891, 0xcc36,	0x2891, 0xcc36,		0x21, 0
+	.dw 0x2893, 0xcc36,	0x28bf, 0xcc36,		0x21, 0
+	.dw 0x28c1, 0xcc36,	0x28c1, 0xcc36,		0x21, 0
+	.dw 0x28c3, 0xcc36,	0x28cf, 0xcc36,		0x21, 0
+	.dw 0x28d1, 0xcc36,	0x28d1, 0xcc36,		0x21, 0
+	.dw 0x28d3, 0xcc36,	0x28ff, 0xcc36,		0x21, 0
+	.dw 0x2901, 0xcc36,	0x2901, 0xcc36,		0x21, 0
+	.dw 0x2903, 0xcc36,	0x290f, 0xcc36,		0x21, 0
+	.dw 0x2911, 0xcc36,	0x2911, 0xcc36,		0x21, 0
+	.dw 0x2913, 0xcc36,	0x293f, 0xcc36,		0x21, 0
+	.dw 0x2941, 0xcc36,	0x2941, 0xcc36,		0x21, 0
+	.dw 0x2943, 0xcc36,	0x294f, 0xcc36,		0x21, 0
+	.dw 0x2951, 0xcc36,	0x2951, 0xcc36,		0x21, 0
+	.dw 0x2953, 0xcc36,	0x297f, 0xcc36,		0x21, 0
+	.dw 0x2981, 0xcc36,	0x2981, 0xcc36,		0x21, 0
+	.dw 0x2983, 0xcc36,	0x298f, 0xcc36,		0x21, 0
+	.dw 0x2991, 0xcc36,	0x2991, 0xcc36,		0x21, 0
+	.dw 0x2993, 0xcc36,	0x29bf, 0xcc36,		0x21, 0
+	.dw 0x29c1, 0xcc36,	0x29c1, 0xcc36,		0x21, 0
+	.dw 0x29c3, 0xcc36,	0x29cf, 0xcc36,		0x21, 0
+	.dw 0x29d1, 0xcc36,	0x29d1, 0xcc36,		0x21, 0
+	.dw 0x29d3, 0xcc36,	0x29ff, 0xcc36,		0x21, 0
+	.dw 0x2a01, 0xcc36,	0x2a01, 0xcc36,		0x21, 0
+	.dw 0x2a03, 0xcc36,	0x2a0f, 0xcc36,		0x21, 0
+	.dw 0x2a11, 0xcc36,	0x2a11, 0xcc36,		0x21, 0
+	.dw 0x2a13, 0xcc36,	0x2a3f, 0xcc36,		0x21, 0
+	.dw 0x2a41, 0xcc36,	0x2a41, 0xcc36,		0x21, 0
+	.dw 0x2a43, 0xcc36,	0x2a4f, 0xcc36,		0x21, 0
+	.dw 0x2a51, 0xcc36,	0x2a51, 0xcc36,		0x21, 0
+	.dw 0x2a53, 0xcc36,	0x2a7f, 0xcc36,		0x21, 0
+	.dw 0x2a81, 0xcc36,	0x2a81, 0xcc36,		0x21, 0
+	.dw 0x2a83, 0xcc36,	0x2a8f, 0xcc36,		0x21, 0
+	.dw 0x2a91, 0xcc36,	0x2a91, 0xcc36,		0x21, 0
+	.dw 0x2a93, 0xcc36,	0x2abf, 0xcc36,		0x21, 0
+	.dw 0x2ac1, 0xcc36,	0x2ac1, 0xcc36,		0x21, 0
+	.dw 0x2ac3, 0xcc36,	0x2acf, 0xcc36,		0x21, 0
+	.dw 0x2ad1, 0xcc36,	0x2ad1, 0xcc36,		0x21, 0
+	.dw 0x2ad3, 0xcc36,	0x2aff, 0xcc36,		0x21, 0
+	.dw 0x2b01, 0xcc36,	0x2b01, 0xcc36,		0x21, 0
+	.dw 0x2b03, 0xcc36,	0x2b0f, 0xcc36,		0x21, 0
+	.dw 0x2b11, 0xcc36,	0x2b11, 0xcc36,		0x21, 0
+	.dw 0x2b13, 0xcc36,	0x2b3f, 0xcc36,		0x21, 0
+	.dw 0x2b41, 0xcc36,	0x2b41, 0xcc36,		0x21, 0
+	.dw 0x2b43, 0xcc36,	0x2b4f, 0xcc36,		0x21, 0
+	.dw 0x2b51, 0xcc36,	0x2b51, 0xcc36,		0x21, 0
+	.dw 0x2b53, 0xcc36,	0x2b7f, 0xcc36,		0x21, 0
+	.dw 0x2b81, 0xcc36,	0x2b81, 0xcc36,		0x21, 0
+	.dw 0x2b83, 0xcc36,	0x2b8f, 0xcc36,		0x21, 0
+	.dw 0x2b91, 0xcc36,	0x2b91, 0xcc36,		0x21, 0
+	.dw 0x2b93, 0xcc36,	0x2bbf, 0xcc36,		0x21, 0
+	.dw 0x2bc1, 0xcc36,	0x2bc1, 0xcc36,		0x21, 0
+	.dw 0x2bc3, 0xcc36,	0x2bcf, 0xcc36,		0x21, 0
+	.dw 0x2bd1, 0xcc36,	0x2bd1, 0xcc36,		0x21, 0
+	.dw 0x2bd3, 0xcc36,	0x2bff, 0xcc36,		0x21, 0
+	.dw 0x2c01, 0xcc36,	0x2c01, 0xcc36,		0x21, 0
+	.dw 0x2c03, 0xcc36,	0x2c0f, 0xcc36,		0x21, 0
+	.dw 0x2c11, 0xcc36,	0x2c11, 0xcc36,		0x21, 0
+	.dw 0x2c13, 0xcc36,	0x2c3f, 0xcc36,		0x21, 0
+	.dw 0x2c41, 0xcc36,	0x2c41, 0xcc36,		0x21, 0
+	.dw 0x2c43, 0xcc36,	0x2c4f, 0xcc36,		0x21, 0
+	.dw 0x2c51, 0xcc36,	0x2c51, 0xcc36,		0x21, 0
+	.dw 0x2c53, 0xcc36,	0x2c7f, 0xcc36,		0x21, 0
+	.dw 0x2c81, 0xcc36,	0x2c81, 0xcc36,		0x21, 0
+	.dw 0x2c83, 0xcc36,	0x2c8f, 0xcc36,		0x21, 0
+	.dw 0x2c91, 0xcc36,	0x2c91, 0xcc36,		0x21, 0
+	.dw 0x2c93, 0xcc36,	0x2cbf, 0xcc36,		0x21, 0
+	.dw 0x2cc1, 0xcc36,	0x2cc1, 0xcc36,		0x21, 0
+	.dw 0x2cc3, 0xcc36,	0x2ccf, 0xcc36,		0x21, 0
+	.dw 0x2cd1, 0xcc36,	0x2cd1, 0xcc36,		0x21, 0
+	.dw 0x2cd3, 0xcc36,	0x2cff, 0xcc36,		0x21, 0
+	.dw 0x2d01, 0xcc36,	0x2d01, 0xcc36,		0x21, 0
+	.dw 0x2d03, 0xcc36,	0x2d0f, 0xcc36,		0x21, 0
+	.dw 0x2d11, 0xcc36,	0x2d11, 0xcc36,		0x21, 0
+	.dw 0x2d13, 0xcc36,	0x2d3f, 0xcc36,		0x21, 0
+	.dw 0x2d41, 0xcc36,	0x2d41, 0xcc36,		0x21, 0
+	.dw 0x2d43, 0xcc36,	0x2d4f, 0xcc36,		0x21, 0
+	.dw 0x2d51, 0xcc36,	0x2d51, 0xcc36,		0x21, 0
+	.dw 0x2d53, 0xcc36,	0x2d7f, 0xcc36,		0x21, 0
+	.dw 0x2d81, 0xcc36,	0x2d81, 0xcc36,		0x21, 0
+	.dw 0x2d83, 0xcc36,	0x2d8f, 0xcc36,		0x21, 0
+	.dw 0x2d91, 0xcc36,	0x2d91, 0xcc36,		0x21, 0
+	.dw 0x2d93, 0xcc36,	0x2dbf, 0xcc36,		0x21, 0
+	.dw 0x2dc1, 0xcc36,	0x2dc1, 0xcc36,		0x21, 0
+	.dw 0x2dc3, 0xcc36,	0x2dcf, 0xcc36,		0x21, 0
+	.dw 0x2dd1, 0xcc36,	0x2dd1, 0xcc36,		0x21, 0
+	.dw 0x2dd3, 0xcc36,	0x2dff, 0xcc36,		0x21, 0
+	.dw 0x2e01, 0xcc36,	0x2e01, 0xcc36,		0x21, 0
+	.dw 0x2e03, 0xcc36,	0x2e0f, 0xcc36,		0x21, 0
+	.dw 0x2e11, 0xcc36,	0x2e11, 0xcc36,		0x21, 0
+	.dw 0x2e13, 0xcc36,	0x2e3f, 0xcc36,		0x21, 0
+	.dw 0x2e41, 0xcc36,	0x2e41, 0xcc36,		0x21, 0
+	.dw 0x2e43, 0xcc36,	0x2e4f, 0xcc36,		0x21, 0
+	.dw 0x2e51, 0xcc36,	0x2e51, 0xcc36,		0x21, 0
+	.dw 0x2e53, 0xcc36,	0x2e7f, 0xcc36,		0x21, 0
+	.dw 0x2e81, 0xcc36,	0x2e81, 0xcc36,		0x21, 0
+	.dw 0x2e83, 0xcc36,	0x2e8f, 0xcc36,		0x21, 0
+	.dw 0x2e91, 0xcc36,	0x2e91, 0xcc36,		0x21, 0
+	.dw 0x2e93, 0xcc36,	0x2ebf, 0xcc36,		0x21, 0
+	.dw 0x2ec1, 0xcc36,	0x2ec1, 0xcc36,		0x21, 0
+	.dw 0x2ec3, 0xcc36,	0x2ecf, 0xcc36,		0x21, 0
+	.dw 0x2ed1, 0xcc36,	0x2ed1, 0xcc36,		0x21, 0
+	.dw 0x2ed3, 0xcc36,	0x2eff, 0xcc36,		0x21, 0
+	.dw 0x2f01, 0xcc36,	0x2f01, 0xcc36,		0x21, 0
+	.dw 0x2f03, 0xcc36,	0x2f0f, 0xcc36,		0x21, 0
+	.dw 0x2f11, 0xcc36,	0x2f11, 0xcc36,		0x21, 0
+	.dw 0x2f13, 0xcc36,	0x2f3f, 0xcc36,		0x21, 0
+	.dw 0x2f41, 0xcc36,	0x2f41, 0xcc36,		0x21, 0
+	.dw 0x2f43, 0xcc36,	0x2f4f, 0xcc36,		0x21, 0
+	.dw 0x2f51, 0xcc36,	0x2f51, 0xcc36,		0x21, 0
+	.dw 0x2f53, 0xcc36,	0x2f7f, 0xcc36,		0x21, 0
+	.dw 0x2f81, 0xcc36,	0x2f81, 0xcc36,		0x21, 0
+	.dw 0x2f83, 0xcc36,	0x2f8f, 0xcc36,		0x21, 0
+	.dw 0x2f91, 0xcc36,	0x2f91, 0xcc36,		0x21, 0
+	.dw 0x2f93, 0xcc36,	0x2fbf, 0xcc36,		0x21, 0
+	.dw 0x2fc1, 0xcc36,	0x2fc1, 0xcc36,		0x21, 0
+	.dw 0x2fc3, 0xcc36,	0x2fcf, 0xcc36,		0x21, 0
+	.dw 0x2fd1, 0xcc36,	0x2fd1, 0xcc36,		0x21, 0
+	.dw 0x2fd3, 0xcc36,	0x3fff, 0xcc36,		0x21, 0
+	.dw 0x4001, 0xcc36,	0x4001, 0xcc36,		0x21, 0
+	.dw 0x4003, 0xcc36,	0x400f, 0xcc36,		0x21, 0
+	.dw 0x4011, 0xcc36,	0x4011, 0xcc36,		0x21, 0
+	.dw 0x4013, 0xcc36,	0x403f, 0xcc36,		0x21, 0
+	.dw 0x4041, 0xcc36,	0x4041, 0xcc36,		0x21, 0
+	.dw 0x4043, 0xcc36,	0x404f, 0xcc36,		0x21, 0
+	.dw 0x4051, 0xcc36,	0x4051, 0xcc36,		0x21, 0
+	.dw 0x4053, 0xcc36,	0x407f, 0xcc36,		0x21, 0
+	.dw 0x4081, 0xcc36,	0x4081, 0xcc36,		0x21, 0
+	.dw 0x4083, 0xcc36,	0x408f, 0xcc36,		0x21, 0
+	.dw 0x4091, 0xcc36,	0x4091, 0xcc36,		0x21, 0
+	.dw 0x4093, 0xcc36,	0x40bf, 0xcc36,		0x21, 0
+	.dw 0x40c1, 0xcc36,	0x40c1, 0xcc36,		0x21, 0
+	.dw 0x40c3, 0xcc36,	0x40cf, 0xcc36,		0x21, 0
+	.dw 0x40d1, 0xcc36,	0x40d1, 0xcc36,		0x21, 0
+	.dw 0x40d3, 0xcc36,	0x40ff, 0xcc36,		0x21, 0
+	.dw 0x4101, 0xcc36,	0x4101, 0xcc36,		0x21, 0
+	.dw 0x4103, 0xcc36,	0x410f, 0xcc36,		0x21, 0
+	.dw 0x4111, 0xcc36,	0x4111, 0xcc36,		0x21, 0
+	.dw 0x4113, 0xcc36,	0x413f, 0xcc36,		0x21, 0
+	.dw 0x4141, 0xcc36,	0x4141, 0xcc36,		0x21, 0
+	.dw 0x4143, 0xcc36,	0x414f, 0xcc36,		0x21, 0
+	.dw 0x4151, 0xcc36,	0x4151, 0xcc36,		0x21, 0
+	.dw 0x4153, 0xcc36,	0x417f, 0xcc36,		0x21, 0
+	.dw 0x4181, 0xcc36,	0x4181, 0xcc36,		0x21, 0
+	.dw 0x4183, 0xcc36,	0x418f, 0xcc36,		0x21, 0
+	.dw 0x4191, 0xcc36,	0x4191, 0xcc36,		0x21, 0
+	.dw 0x4193, 0xcc36,	0x41bf, 0xcc36,		0x21, 0
+	.dw 0x41c1, 0xcc36,	0x41c1, 0xcc36,		0x21, 0
+	.dw 0x41c3, 0xcc36,	0x41cf, 0xcc36,		0x21, 0
+	.dw 0x41d1, 0xcc36,	0x41d1, 0xcc36,		0x21, 0
+	.dw 0x41d3, 0xcc36,	0x41ff, 0xcc36,		0x21, 0
+	.dw 0x4201, 0xcc36,	0x4201, 0xcc36,		0x21, 0
+	.dw 0x4203, 0xcc36,	0x420f, 0xcc36,		0x21, 0
+	.dw 0x4211, 0xcc36,	0x4211, 0xcc36,		0x21, 0
+	.dw 0x4213, 0xcc36,	0x423f, 0xcc36,		0x21, 0
+	.dw 0x4241, 0xcc36,	0x4241, 0xcc36,		0x21, 0
+	.dw 0x4243, 0xcc36,	0x424f, 0xcc36,		0x21, 0
+	.dw 0x4251, 0xcc36,	0x4251, 0xcc36,		0x21, 0
+	.dw 0x4253, 0xcc36,	0x427f, 0xcc36,		0x21, 0
+	.dw 0x4281, 0xcc36,	0x4281, 0xcc36,		0x21, 0
+	.dw 0x4283, 0xcc36,	0x428f, 0xcc36,		0x21, 0
+	.dw 0x4291, 0xcc36,	0x4291, 0xcc36,		0x21, 0
+	.dw 0x4293, 0xcc36,	0x42bf, 0xcc36,		0x21, 0
+	.dw 0x42c1, 0xcc36,	0x42c1, 0xcc36,		0x21, 0
+	.dw 0x42c3, 0xcc36,	0x42cf, 0xcc36,		0x21, 0
+	.dw 0x42d1, 0xcc36,	0x42d1, 0xcc36,		0x21, 0
+	.dw 0x42d3, 0xcc36,	0x42ff, 0xcc36,		0x21, 0
+	.dw 0x4301, 0xcc36,	0x4301, 0xcc36,		0x21, 0
+	.dw 0x4303, 0xcc36,	0x430f, 0xcc36,		0x21, 0
+	.dw 0x4311, 0xcc36,	0x4311, 0xcc36,		0x21, 0
+	.dw 0x4313, 0xcc36,	0x433f, 0xcc36,		0x21, 0
+	.dw 0x4341, 0xcc36,	0x4341, 0xcc36,		0x21, 0
+	.dw 0x4343, 0xcc36,	0x434f, 0xcc36,		0x21, 0
+	.dw 0x4351, 0xcc36,	0x4351, 0xcc36,		0x21, 0
+	.dw 0x4353, 0xcc36,	0x437f, 0xcc36,		0x21, 0
+	.dw 0x4381, 0xcc36,	0x4381, 0xcc36,		0x21, 0
+	.dw 0x4383, 0xcc36,	0x438f, 0xcc36,		0x21, 0
+	.dw 0x4391, 0xcc36,	0x4391, 0xcc36,		0x21, 0
+	.dw 0x4393, 0xcc36,	0x43bf, 0xcc36,		0x21, 0
+	.dw 0x43c1, 0xcc36,	0x43c1, 0xcc36,		0x21, 0
+	.dw 0x43c3, 0xcc36,	0x43cf, 0xcc36,		0x21, 0
+	.dw 0x43d1, 0xcc36,	0x43d1, 0xcc36,		0x21, 0
+	.dw 0x43d3, 0xcc36,	0x43ff, 0xcc36,		0x21, 0
+	.dw 0x4401, 0xcc36,	0x4401, 0xcc36,		0x21, 0
+	.dw 0x4403, 0xcc36,	0x440f, 0xcc36,		0x21, 0
+	.dw 0x4411, 0xcc36,	0x4411, 0xcc36,		0x21, 0
+	.dw 0x4413, 0xcc36,	0x443f, 0xcc36,		0x21, 0
+	.dw 0x4441, 0xcc36,	0x4441, 0xcc36,		0x21, 0
+	.dw 0x4443, 0xcc36,	0x444f, 0xcc36,		0x21, 0
+	.dw 0x4451, 0xcc36,	0x4451, 0xcc36,		0x21, 0
+	.dw 0x4453, 0xcc36,	0x447f, 0xcc36,		0x21, 0
+	.dw 0x4481, 0xcc36,	0x4481, 0xcc36,		0x21, 0
+	.dw 0x4483, 0xcc36,	0x448f, 0xcc36,		0x21, 0
+	.dw 0x4491, 0xcc36,	0x4491, 0xcc36,		0x21, 0
+	.dw 0x4493, 0xcc36,	0x44bf, 0xcc36,		0x21, 0
+	.dw 0x44c1, 0xcc36,	0x44c1, 0xcc36,		0x21, 0
+	.dw 0x44c3, 0xcc36,	0x44cf, 0xcc36,		0x21, 0
+	.dw 0x44d1, 0xcc36,	0x44d1, 0xcc36,		0x21, 0
+	.dw 0x44d3, 0xcc36,	0x44ff, 0xcc36,		0x21, 0
+	.dw 0x4501, 0xcc36,	0x4501, 0xcc36,		0x21, 0
+	.dw 0x4503, 0xcc36,	0x450f, 0xcc36,		0x21, 0
+	.dw 0x4511, 0xcc36,	0x4511, 0xcc36,		0x21, 0
+	.dw 0x4513, 0xcc36,	0x453f, 0xcc36,		0x21, 0
+	.dw 0x4541, 0xcc36,	0x4541, 0xcc36,		0x21, 0
+	.dw 0x4543, 0xcc36,	0x454f, 0xcc36,		0x21, 0
+	.dw 0x4551, 0xcc36,	0x4551, 0xcc36,		0x21, 0
+	.dw 0x4553, 0xcc36,	0x457f, 0xcc36,		0x21, 0
+	.dw 0x4581, 0xcc36,	0x4581, 0xcc36,		0x21, 0
+	.dw 0x4583, 0xcc36,	0x458f, 0xcc36,		0x21, 0
+	.dw 0x4591, 0xcc36,	0x4591, 0xcc36,		0x21, 0
+	.dw 0x4593, 0xcc36,	0x45bf, 0xcc36,		0x21, 0
+	.dw 0x45c1, 0xcc36,	0x45c1, 0xcc36,		0x21, 0
+	.dw 0x45c3, 0xcc36,	0x45cf, 0xcc36,		0x21, 0
+	.dw 0x45d1, 0xcc36,	0x45d1, 0xcc36,		0x21, 0
+	.dw 0x45d3, 0xcc36,	0x45ff, 0xcc36,		0x21, 0
+	.dw 0x4601, 0xcc36,	0x4601, 0xcc36,		0x21, 0
+	.dw 0x4603, 0xcc36,	0x460f, 0xcc36,		0x21, 0
+	.dw 0x4611, 0xcc36,	0x4611, 0xcc36,		0x21, 0
+	.dw 0x4613, 0xcc36,	0x463f, 0xcc36,		0x21, 0
+	.dw 0x4641, 0xcc36,	0x4641, 0xcc36,		0x21, 0
+	.dw 0x4643, 0xcc36,	0x464f, 0xcc36,		0x21, 0
+	.dw 0x4651, 0xcc36,	0x4651, 0xcc36,		0x21, 0
+	.dw 0x4653, 0xcc36,	0x467f, 0xcc36,		0x21, 0
+	.dw 0x4681, 0xcc36,	0x4681, 0xcc36,		0x21, 0
+	.dw 0x4683, 0xcc36,	0x468f, 0xcc36,		0x21, 0
+	.dw 0x4691, 0xcc36,	0x4691, 0xcc36,		0x21, 0
+	.dw 0x4693, 0xcc36,	0x46bf, 0xcc36,		0x21, 0
+	.dw 0x46c1, 0xcc36,	0x46c1, 0xcc36,		0x21, 0
+	.dw 0x46c3, 0xcc36,	0x46cf, 0xcc36,		0x21, 0
+	.dw 0x46d1, 0xcc36,	0x46d1, 0xcc36,		0x21, 0
+	.dw 0x46d3, 0xcc36,	0x46ff, 0xcc36,		0x21, 0
+	.dw 0x4701, 0xcc36,	0x4701, 0xcc36,		0x21, 0
+	.dw 0x4703, 0xcc36,	0x470f, 0xcc36,		0x21, 0
+	.dw 0x4711, 0xcc36,	0x4711, 0xcc36,		0x21, 0
+	.dw 0x4713, 0xcc36,	0x473f, 0xcc36,		0x21, 0
+	.dw 0x4741, 0xcc36,	0x4741, 0xcc36,		0x21, 0
+	.dw 0x4743, 0xcc36,	0x474f, 0xcc36,		0x21, 0
+	.dw 0x4751, 0xcc36,	0x4751, 0xcc36,		0x21, 0
+	.dw 0x4753, 0xcc36,	0x477f, 0xcc36,		0x21, 0
+	.dw 0x4781, 0xcc36,	0x4781, 0xcc36,		0x21, 0
+	.dw 0x4783, 0xcc36,	0x478f, 0xcc36,		0x21, 0
+	.dw 0x4791, 0xcc36,	0x4791, 0xcc36,		0x21, 0
+	.dw 0x4793, 0xcc36,	0x47bf, 0xcc36,		0x21, 0
+	.dw 0x47c1, 0xcc36,	0x47c1, 0xcc36,		0x21, 0
+	.dw 0x47c3, 0xcc36,	0x47cf, 0xcc36,		0x21, 0
+	.dw 0x47d1, 0xcc36,	0x47d1, 0xcc36,		0x21, 0
+	.dw 0x47d3, 0xcc36,	0x47ff, 0xcc36,		0x21, 0
+	.dw 0x4801, 0xcc36,	0x4801, 0xcc36,		0x21, 0
+	.dw 0x4803, 0xcc36,	0x480f, 0xcc36,		0x21, 0
+	.dw 0x4811, 0xcc36,	0x4811, 0xcc36,		0x21, 0
+	.dw 0x4813, 0xcc36,	0x483f, 0xcc36,		0x21, 0
+	.dw 0x4841, 0xcc36,	0x4841, 0xcc36,		0x21, 0
+	.dw 0x4843, 0xcc36,	0x484f, 0xcc36,		0x21, 0
+	.dw 0x4851, 0xcc36,	0x4851, 0xcc36,		0x21, 0
+	.dw 0x4853, 0xcc36,	0x487f, 0xcc36,		0x21, 0
+	.dw 0x4881, 0xcc36,	0x4881, 0xcc36,		0x21, 0
+	.dw 0x4883, 0xcc36,	0x488f, 0xcc36,		0x21, 0
+	.dw 0x4891, 0xcc36,	0x4891, 0xcc36,		0x21, 0
+	.dw 0x4893, 0xcc36,	0x48bf, 0xcc36,		0x21, 0
+	.dw 0x48c1, 0xcc36,	0x48c1, 0xcc36,		0x21, 0
+	.dw 0x48c3, 0xcc36,	0x48cf, 0xcc36,		0x21, 0
+	.dw 0x48d1, 0xcc36,	0x48d1, 0xcc36,		0x21, 0
+	.dw 0x48d3, 0xcc36,	0x48ff, 0xcc36,		0x21, 0
+	.dw 0x4901, 0xcc36,	0x4901, 0xcc36,		0x21, 0
+	.dw 0x4903, 0xcc36,	0x490f, 0xcc36,		0x21, 0
+	.dw 0x4911, 0xcc36,	0x4911, 0xcc36,		0x21, 0
+	.dw 0x4913, 0xcc36,	0x493f, 0xcc36,		0x21, 0
+	.dw 0x4941, 0xcc36,	0x4941, 0xcc36,		0x21, 0
+	.dw 0x4943, 0xcc36,	0x494f, 0xcc36,		0x21, 0
+	.dw 0x4951, 0xcc36,	0x4951, 0xcc36,		0x21, 0
+	.dw 0x4953, 0xcc36,	0x497f, 0xcc36,		0x21, 0
+	.dw 0x4981, 0xcc36,	0x4981, 0xcc36,		0x21, 0
+	.dw 0x4983, 0xcc36,	0x498f, 0xcc36,		0x21, 0
+	.dw 0x4991, 0xcc36,	0x4991, 0xcc36,		0x21, 0
+	.dw 0x4993, 0xcc36,	0x49bf, 0xcc36,		0x21, 0
+	.dw 0x49c1, 0xcc36,	0x49c1, 0xcc36,		0x21, 0
+	.dw 0x49c3, 0xcc36,	0x49cf, 0xcc36,		0x21, 0
+	.dw 0x49d1, 0xcc36,	0x49d1, 0xcc36,		0x21, 0
+	.dw 0x49d3, 0xcc36,	0x49ff, 0xcc36,		0x21, 0
+	.dw 0x4a01, 0xcc36,	0x4a01, 0xcc36,		0x21, 0
+	.dw 0x4a03, 0xcc36,	0x4a0f, 0xcc36,		0x21, 0
+	.dw 0x4a11, 0xcc36,	0x4a11, 0xcc36,		0x21, 0
+	.dw 0x4a13, 0xcc36,	0x4a3f, 0xcc36,		0x21, 0
+	.dw 0x4a41, 0xcc36,	0x4a41, 0xcc36,		0x21, 0
+	.dw 0x4a43, 0xcc36,	0x4a4f, 0xcc36,		0x21, 0
+	.dw 0x4a51, 0xcc36,	0x4a51, 0xcc36,		0x21, 0
+	.dw 0x4a53, 0xcc36,	0x4a7f, 0xcc36,		0x21, 0
+	.dw 0x4a81, 0xcc36,	0x4a81, 0xcc36,		0x21, 0
+	.dw 0x4a83, 0xcc36,	0x4a8f, 0xcc36,		0x21, 0
+	.dw 0x4a91, 0xcc36,	0x4a91, 0xcc36,		0x21, 0
+	.dw 0x4a93, 0xcc36,	0x4abf, 0xcc36,		0x21, 0
+	.dw 0x4ac1, 0xcc36,	0x4ac1, 0xcc36,		0x21, 0
+	.dw 0x4ac3, 0xcc36,	0x4acf, 0xcc36,		0x21, 0
+	.dw 0x4ad1, 0xcc36,	0x4ad1, 0xcc36,		0x21, 0
+	.dw 0x4ad3, 0xcc36,	0x4aff, 0xcc36,		0x21, 0
+	.dw 0x4b01, 0xcc36,	0x4b01, 0xcc36,		0x21, 0
+	.dw 0x4b03, 0xcc36,	0x4b0f, 0xcc36,		0x21, 0
+	.dw 0x4b11, 0xcc36,	0x4b11, 0xcc36,		0x21, 0
+	.dw 0x4b13, 0xcc36,	0x4b3f, 0xcc36,		0x21, 0
+	.dw 0x4b41, 0xcc36,	0x4b41, 0xcc36,		0x21, 0
+	.dw 0x4b43, 0xcc36,	0x4b4f, 0xcc36,		0x21, 0
+	.dw 0x4b51, 0xcc36,	0x4b51, 0xcc36,		0x21, 0
+	.dw 0x4b53, 0xcc36,	0x4b7f, 0xcc36,		0x21, 0
+	.dw 0x4b81, 0xcc36,	0x4b81, 0xcc36,		0x21, 0
+	.dw 0x4b83, 0xcc36,	0x4b8f, 0xcc36,		0x21, 0
+	.dw 0x4b91, 0xcc36,	0x4b91, 0xcc36,		0x21, 0
+	.dw 0x4b93, 0xcc36,	0x4bbf, 0xcc36,		0x21, 0
+	.dw 0x4bc1, 0xcc36,	0x4bc1, 0xcc36,		0x21, 0
+	.dw 0x4bc3, 0xcc36,	0x4bcf, 0xcc36,		0x21, 0
+	.dw 0x4bd1, 0xcc36,	0x4bd1, 0xcc36,		0x21, 0
+	.dw 0x4bd3, 0xcc36,	0x4bff, 0xcc36,		0x21, 0
+	.dw 0x4c01, 0xcc36,	0x4c01, 0xcc36,		0x21, 0
+	.dw 0x4c03, 0xcc36,	0x4c0f, 0xcc36,		0x21, 0
+	.dw 0x4c11, 0xcc36,	0x4c11, 0xcc36,		0x21, 0
+	.dw 0x4c13, 0xcc36,	0x4c3f, 0xcc36,		0x21, 0
+	.dw 0x4c41, 0xcc36,	0x4c41, 0xcc36,		0x21, 0
+	.dw 0x4c43, 0xcc36,	0x4c4f, 0xcc36,		0x21, 0
+	.dw 0x4c51, 0xcc36,	0x4c51, 0xcc36,		0x21, 0
+	.dw 0x4c53, 0xcc36,	0x4c7f, 0xcc36,		0x21, 0
+	.dw 0x4c81, 0xcc36,	0x4c81, 0xcc36,		0x21, 0
+	.dw 0x4c83, 0xcc36,	0x4c8f, 0xcc36,		0x21, 0
+	.dw 0x4c91, 0xcc36,	0x4c91, 0xcc36,		0x21, 0
+	.dw 0x4c93, 0xcc36,	0x4cbf, 0xcc36,		0x21, 0
+	.dw 0x4cc1, 0xcc36,	0x4cc1, 0xcc36,		0x21, 0
+	.dw 0x4cc3, 0xcc36,	0x4ccf, 0xcc36,		0x21, 0
+	.dw 0x4cd1, 0xcc36,	0x4cd1, 0xcc36,		0x21, 0
+	.dw 0x4cd3, 0xcc36,	0x4cff, 0xcc36,		0x21, 0
+	.dw 0x4d01, 0xcc36,	0x4d01, 0xcc36,		0x21, 0
+	.dw 0x4d03, 0xcc36,	0x4d0f, 0xcc36,		0x21, 0
+	.dw 0x4d11, 0xcc36,	0x4d11, 0xcc36,		0x21, 0
+	.dw 0x4d13, 0xcc36,	0x4d3f, 0xcc36,		0x21, 0
+	.dw 0x4d41, 0xcc36,	0x4d41, 0xcc36,		0x21, 0
+	.dw 0x4d43, 0xcc36,	0x4d4f, 0xcc36,		0x21, 0
+	.dw 0x4d51, 0xcc36,	0x4d51, 0xcc36,		0x21, 0
+	.dw 0x4d53, 0xcc36,	0x4d7f, 0xcc36,		0x21, 0
+	.dw 0x4d81, 0xcc36,	0x4d81, 0xcc36,		0x21, 0
+	.dw 0x4d83, 0xcc36,	0x4d8f, 0xcc36,		0x21, 0
+	.dw 0x4d91, 0xcc36,	0x4d91, 0xcc36,		0x21, 0
+	.dw 0x4d93, 0xcc36,	0x4dbf, 0xcc36,		0x21, 0
+	.dw 0x4dc1, 0xcc36,	0x4dc1, 0xcc36,		0x21, 0
+	.dw 0x4dc3, 0xcc36,	0x4dcf, 0xcc36,		0x21, 0
+	.dw 0x4dd1, 0xcc36,	0x4dd1, 0xcc36,		0x21, 0
+	.dw 0x4dd3, 0xcc36,	0x4dff, 0xcc36,		0x21, 0
+	.dw 0x4e01, 0xcc36,	0x4e01, 0xcc36,		0x21, 0
+	.dw 0x4e03, 0xcc36,	0x4e0f, 0xcc36,		0x21, 0
+	.dw 0x4e11, 0xcc36,	0x4e11, 0xcc36,		0x21, 0
+	.dw 0x4e13, 0xcc36,	0x4e3f, 0xcc36,		0x21, 0
+	.dw 0x4e41, 0xcc36,	0x4e41, 0xcc36,		0x21, 0
+	.dw 0x4e43, 0xcc36,	0x4e4f, 0xcc36,		0x21, 0
+	.dw 0x4e51, 0xcc36,	0x4e51, 0xcc36,		0x21, 0
+	.dw 0x4e53, 0xcc36,	0x4e7f, 0xcc36,		0x21, 0
+	.dw 0x4e81, 0xcc36,	0x4e81, 0xcc36,		0x21, 0
+	.dw 0x4e83, 0xcc36,	0x4e8f, 0xcc36,		0x21, 0
+	.dw 0x4e91, 0xcc36,	0x4e91, 0xcc36,		0x21, 0
+	.dw 0x4e93, 0xcc36,	0x4ebf, 0xcc36,		0x21, 0
+	.dw 0x4ec1, 0xcc36,	0x4ec1, 0xcc36,		0x21, 0
+	.dw 0x4ec3, 0xcc36,	0x4ecf, 0xcc36,		0x21, 0
+	.dw 0x4ed1, 0xcc36,	0x4ed1, 0xcc36,		0x21, 0
+	.dw 0x4ed3, 0xcc36,	0x4eff, 0xcc36,		0x21, 0
+	.dw 0x4f01, 0xcc36,	0x4f01, 0xcc36,		0x21, 0
+	.dw 0x4f03, 0xcc36,	0x4f0f, 0xcc36,		0x21, 0
+	.dw 0x4f11, 0xcc36,	0x4f11, 0xcc36,		0x21, 0
+	.dw 0x4f13, 0xcc36,	0x4f3f, 0xcc36,		0x21, 0
+	.dw 0x4f41, 0xcc36,	0x4f41, 0xcc36,		0x21, 0
+	.dw 0x4f43, 0xcc36,	0x4f4f, 0xcc36,		0x21, 0
+	.dw 0x4f51, 0xcc36,	0x4f51, 0xcc36,		0x21, 0
+	.dw 0x4f53, 0xcc36,	0x4f7f, 0xcc36,		0x21, 0
+	.dw 0x4f81, 0xcc36,	0x4f81, 0xcc36,		0x21, 0
+	.dw 0x4f83, 0xcc36,	0x4f8f, 0xcc36,		0x21, 0
+	.dw 0x4f91, 0xcc36,	0x4f91, 0xcc36,		0x21, 0
+	.dw 0x4f93, 0xcc36,	0x4fbf, 0xcc36,		0x21, 0
+	.dw 0x4fc1, 0xcc36,	0x4fc1, 0xcc36,		0x21, 0
+	.dw 0x4fc3, 0xcc36,	0x4fcf, 0xcc36,		0x21, 0
+	.dw 0x4fd1, 0xcc36,	0x4fd1, 0xcc36,		0x21, 0
+	.dw 0x4fd3, 0xcc36,	0x5fff, 0xcc36,		0x21, 0
+	.dw 0x6001, 0xcc36,	0x6001, 0xcc36,		0x21, 0
+	.dw 0x6003, 0xcc36,	0x600f, 0xcc36,		0x21, 0
+	.dw 0x6011, 0xcc36,	0x6011, 0xcc36,		0x21, 0
+	.dw 0x6013, 0xcc36,	0x603f, 0xcc36,		0x21, 0
+	.dw 0x6041, 0xcc36,	0x6041, 0xcc36,		0x21, 0
+	.dw 0x6043, 0xcc36,	0x604f, 0xcc36,		0x21, 0
+	.dw 0x6051, 0xcc36,	0x6051, 0xcc36,		0x21, 0
+	.dw 0x6053, 0xcc36,	0x607f, 0xcc36,		0x21, 0
+	.dw 0x6081, 0xcc36,	0x6081, 0xcc36,		0x21, 0
+	.dw 0x6083, 0xcc36,	0x608f, 0xcc36,		0x21, 0
+	.dw 0x6091, 0xcc36,	0x6091, 0xcc36,		0x21, 0
+	.dw 0x6093, 0xcc36,	0x60bf, 0xcc36,		0x21, 0
+	.dw 0x60c1, 0xcc36,	0x60c1, 0xcc36,		0x21, 0
+	.dw 0x60c3, 0xcc36,	0x60cf, 0xcc36,		0x21, 0
+	.dw 0x60d1, 0xcc36,	0x60d1, 0xcc36,		0x21, 0
+	.dw 0x60d3, 0xcc36,	0x60ff, 0xcc36,		0x21, 0
+	.dw 0x6101, 0xcc36,	0x6101, 0xcc36,		0x21, 0
+	.dw 0x6103, 0xcc36,	0x610f, 0xcc36,		0x21, 0
+	.dw 0x6111, 0xcc36,	0x6111, 0xcc36,		0x21, 0
+	.dw 0x6113, 0xcc36,	0x613f, 0xcc36,		0x21, 0
+	.dw 0x6141, 0xcc36,	0x6141, 0xcc36,		0x21, 0
+	.dw 0x6143, 0xcc36,	0x614f, 0xcc36,		0x21, 0
+	.dw 0x6151, 0xcc36,	0x6151, 0xcc36,		0x21, 0
+	.dw 0x6153, 0xcc36,	0x617f, 0xcc36,		0x21, 0
+	.dw 0x6181, 0xcc36,	0x6181, 0xcc36,		0x21, 0
+	.dw 0x6183, 0xcc36,	0x618f, 0xcc36,		0x21, 0
+	.dw 0x6191, 0xcc36,	0x6191, 0xcc36,		0x21, 0
+	.dw 0x6193, 0xcc36,	0x61bf, 0xcc36,		0x21, 0
+	.dw 0x61c1, 0xcc36,	0x61c1, 0xcc36,		0x21, 0
+	.dw 0x61c3, 0xcc36,	0x61cf, 0xcc36,		0x21, 0
+	.dw 0x61d1, 0xcc36,	0x61d1, 0xcc36,		0x21, 0
+	.dw 0x61d3, 0xcc36,	0x61ff, 0xcc36,		0x21, 0
+	.dw 0x6201, 0xcc36,	0x6201, 0xcc36,		0x21, 0
+	.dw 0x6203, 0xcc36,	0x620f, 0xcc36,		0x21, 0
+	.dw 0x6211, 0xcc36,	0x6211, 0xcc36,		0x21, 0
+	.dw 0x6213, 0xcc36,	0x623f, 0xcc36,		0x21, 0
+	.dw 0x6241, 0xcc36,	0x6241, 0xcc36,		0x21, 0
+	.dw 0x6243, 0xcc36,	0x624f, 0xcc36,		0x21, 0
+	.dw 0x6251, 0xcc36,	0x6251, 0xcc36,		0x21, 0
+	.dw 0x6253, 0xcc36,	0x627f, 0xcc36,		0x21, 0
+	.dw 0x6281, 0xcc36,	0x6281, 0xcc36,		0x21, 0
+	.dw 0x6283, 0xcc36,	0x628f, 0xcc36,		0x21, 0
+	.dw 0x6291, 0xcc36,	0x6291, 0xcc36,		0x21, 0
+	.dw 0x6293, 0xcc36,	0x62bf, 0xcc36,		0x21, 0
+	.dw 0x62c1, 0xcc36,	0x62c1, 0xcc36,		0x21, 0
+	.dw 0x62c3, 0xcc36,	0x62cf, 0xcc36,		0x21, 0
+	.dw 0x62d1, 0xcc36,	0x62d1, 0xcc36,		0x21, 0
+	.dw 0x62d3, 0xcc36,	0x62ff, 0xcc36,		0x21, 0
+	.dw 0x6301, 0xcc36,	0x6301, 0xcc36,		0x21, 0
+	.dw 0x6303, 0xcc36,	0x630f, 0xcc36,		0x21, 0
+	.dw 0x6311, 0xcc36,	0x6311, 0xcc36,		0x21, 0
+	.dw 0x6313, 0xcc36,	0x633f, 0xcc36,		0x21, 0
+	.dw 0x6341, 0xcc36,	0x6341, 0xcc36,		0x21, 0
+	.dw 0x6343, 0xcc36,	0x634f, 0xcc36,		0x21, 0
+	.dw 0x6351, 0xcc36,	0x6351, 0xcc36,		0x21, 0
+	.dw 0x6353, 0xcc36,	0x637f, 0xcc36,		0x21, 0
+	.dw 0x6381, 0xcc36,	0x6381, 0xcc36,		0x21, 0
+	.dw 0x6383, 0xcc36,	0x638f, 0xcc36,		0x21, 0
+	.dw 0x6391, 0xcc36,	0x6391, 0xcc36,		0x21, 0
+	.dw 0x6393, 0xcc36,	0x63bf, 0xcc36,		0x21, 0
+	.dw 0x63c1, 0xcc36,	0x63c1, 0xcc36,		0x21, 0
+	.dw 0x63c3, 0xcc36,	0x63cf, 0xcc36,		0x21, 0
+	.dw 0x63d1, 0xcc36,	0x63d1, 0xcc36,		0x21, 0
+	.dw 0x63d3, 0xcc36,	0x63ff, 0xcc36,		0x21, 0
+	.dw 0x6401, 0xcc36,	0x6401, 0xcc36,		0x21, 0
+	.dw 0x6403, 0xcc36,	0x640f, 0xcc36,		0x21, 0
+	.dw 0x6411, 0xcc36,	0x6411, 0xcc36,		0x21, 0
+	.dw 0x6413, 0xcc36,	0x643f, 0xcc36,		0x21, 0
+	.dw 0x6441, 0xcc36,	0x6441, 0xcc36,		0x21, 0
+	.dw 0x6443, 0xcc36,	0x644f, 0xcc36,		0x21, 0
+	.dw 0x6451, 0xcc36,	0x6451, 0xcc36,		0x21, 0
+	.dw 0x6453, 0xcc36,	0x647f, 0xcc36,		0x21, 0
+	.dw 0x6481, 0xcc36,	0x6481, 0xcc36,		0x21, 0
+	.dw 0x6483, 0xcc36,	0x648f, 0xcc36,		0x21, 0
+	.dw 0x6491, 0xcc36,	0x6491, 0xcc36,		0x21, 0
+	.dw 0x6493, 0xcc36,	0x64bf, 0xcc36,		0x21, 0
+	.dw 0x64c1, 0xcc36,	0x64c1, 0xcc36,		0x21, 0
+	.dw 0x64c3, 0xcc36,	0x64cf, 0xcc36,		0x21, 0
+	.dw 0x64d1, 0xcc36,	0x64d1, 0xcc36,		0x21, 0
+	.dw 0x64d3, 0xcc36,	0x64ff, 0xcc36,		0x21, 0
+	.dw 0x6501, 0xcc36,	0x6501, 0xcc36,		0x21, 0
+	.dw 0x6503, 0xcc36,	0x650f, 0xcc36,		0x21, 0
+	.dw 0x6511, 0xcc36,	0x6511, 0xcc36,		0x21, 0
+	.dw 0x6513, 0xcc36,	0x653f, 0xcc36,		0x21, 0
+	.dw 0x6541, 0xcc36,	0x6541, 0xcc36,		0x21, 0
+	.dw 0x6543, 0xcc36,	0x654f, 0xcc36,		0x21, 0
+	.dw 0x6551, 0xcc36,	0x6551, 0xcc36,		0x21, 0
+	.dw 0x6553, 0xcc36,	0x657f, 0xcc36,		0x21, 0
+	.dw 0x6581, 0xcc36,	0x6581, 0xcc36,		0x21, 0
+	.dw 0x6583, 0xcc36,	0x658f, 0xcc36,		0x21, 0
+	.dw 0x6591, 0xcc36,	0x6591, 0xcc36,		0x21, 0
+	.dw 0x6593, 0xcc36,	0x65bf, 0xcc36,		0x21, 0
+	.dw 0x65c1, 0xcc36,	0x65c1, 0xcc36,		0x21, 0
+	.dw 0x65c3, 0xcc36,	0x65cf, 0xcc36,		0x21, 0
+	.dw 0x65d1, 0xcc36,	0x65d1, 0xcc36,		0x21, 0
+	.dw 0x65d3, 0xcc36,	0x65ff, 0xcc36,		0x21, 0
+	.dw 0x6601, 0xcc36,	0x6601, 0xcc36,		0x21, 0
+	.dw 0x6603, 0xcc36,	0x660f, 0xcc36,		0x21, 0
+	.dw 0x6611, 0xcc36,	0x6611, 0xcc36,		0x21, 0
+	.dw 0x6613, 0xcc36,	0x663f, 0xcc36,		0x21, 0
+	.dw 0x6641, 0xcc36,	0x6641, 0xcc36,		0x21, 0
+	.dw 0x6643, 0xcc36,	0x664f, 0xcc36,		0x21, 0
+	.dw 0x6651, 0xcc36,	0x6651, 0xcc36,		0x21, 0
+	.dw 0x6653, 0xcc36,	0x667f, 0xcc36,		0x21, 0
+	.dw 0x6681, 0xcc36,	0x6681, 0xcc36,		0x21, 0
+	.dw 0x6683, 0xcc36,	0x668f, 0xcc36,		0x21, 0
+	.dw 0x6691, 0xcc36,	0x6691, 0xcc36,		0x21, 0
+	.dw 0x6693, 0xcc36,	0x66bf, 0xcc36,		0x21, 0
+	.dw 0x66c1, 0xcc36,	0x66c1, 0xcc36,		0x21, 0
+	.dw 0x66c3, 0xcc36,	0x66cf, 0xcc36,		0x21, 0
+	.dw 0x66d1, 0xcc36,	0x66d1, 0xcc36,		0x21, 0
+	.dw 0x66d3, 0xcc36,	0x66ff, 0xcc36,		0x21, 0
+	.dw 0x6701, 0xcc36,	0x6701, 0xcc36,		0x21, 0
+	.dw 0x6703, 0xcc36,	0x670f, 0xcc36,		0x21, 0
+	.dw 0x6711, 0xcc36,	0x6711, 0xcc36,		0x21, 0
+	.dw 0x6713, 0xcc36,	0x673f, 0xcc36,		0x21, 0
+	.dw 0x6741, 0xcc36,	0x6741, 0xcc36,		0x21, 0
+	.dw 0x6743, 0xcc36,	0x674f, 0xcc36,		0x21, 0
+	.dw 0x6751, 0xcc36,	0x6751, 0xcc36,		0x21, 0
+	.dw 0x6753, 0xcc36,	0x677f, 0xcc36,		0x21, 0
+	.dw 0x6781, 0xcc36,	0x6781, 0xcc36,		0x21, 0
+	.dw 0x6783, 0xcc36,	0x678f, 0xcc36,		0x21, 0
+	.dw 0x6791, 0xcc36,	0x6791, 0xcc36,		0x21, 0
+	.dw 0x6793, 0xcc36,	0x67bf, 0xcc36,		0x21, 0
+	.dw 0x67c1, 0xcc36,	0x67c1, 0xcc36,		0x21, 0
+	.dw 0x67c3, 0xcc36,	0x67cf, 0xcc36,		0x21, 0
+	.dw 0x67d1, 0xcc36,	0x67d1, 0xcc36,		0x21, 0
+	.dw 0x67d3, 0xcc36,	0x67ff, 0xcc36,		0x21, 0
+	.dw 0x6801, 0xcc36,	0x6801, 0xcc36,		0x21, 0
+	.dw 0x6803, 0xcc36,	0x680f, 0xcc36,		0x21, 0
+	.dw 0x6811, 0xcc36,	0x6811, 0xcc36,		0x21, 0
+	.dw 0x6813, 0xcc36,	0x683f, 0xcc36,		0x21, 0
+	.dw 0x6841, 0xcc36,	0x6841, 0xcc36,		0x21, 0
+	.dw 0x6843, 0xcc36,	0x684f, 0xcc36,		0x21, 0
+	.dw 0x6851, 0xcc36,	0x6851, 0xcc36,		0x21, 0
+	.dw 0x6853, 0xcc36,	0x687f, 0xcc36,		0x21, 0
+	.dw 0x6881, 0xcc36,	0x6881, 0xcc36,		0x21, 0
+	.dw 0x6883, 0xcc36,	0x688f, 0xcc36,		0x21, 0
+	.dw 0x6891, 0xcc36,	0x6891, 0xcc36,		0x21, 0
+	.dw 0x6893, 0xcc36,	0x68bf, 0xcc36,		0x21, 0
+	.dw 0x68c1, 0xcc36,	0x68c1, 0xcc36,		0x21, 0
+	.dw 0x68c3, 0xcc36,	0x68cf, 0xcc36,		0x21, 0
+	.dw 0x68d1, 0xcc36,	0x68d1, 0xcc36,		0x21, 0
+	.dw 0x68d3, 0xcc36,	0x68ff, 0xcc36,		0x21, 0
+	.dw 0x6901, 0xcc36,	0x6901, 0xcc36,		0x21, 0
+	.dw 0x6903, 0xcc36,	0x690f, 0xcc36,		0x21, 0
+	.dw 0x6911, 0xcc36,	0x6911, 0xcc36,		0x21, 0
+	.dw 0x6913, 0xcc36,	0x693f, 0xcc36,		0x21, 0
+	.dw 0x6941, 0xcc36,	0x6941, 0xcc36,		0x21, 0
+	.dw 0x6943, 0xcc36,	0x694f, 0xcc36,		0x21, 0
+	.dw 0x6951, 0xcc36,	0x6951, 0xcc36,		0x21, 0
+	.dw 0x6953, 0xcc36,	0x697f, 0xcc36,		0x21, 0
+	.dw 0x6981, 0xcc36,	0x6981, 0xcc36,		0x21, 0
+	.dw 0x6983, 0xcc36,	0x698f, 0xcc36,		0x21, 0
+	.dw 0x6991, 0xcc36,	0x6991, 0xcc36,		0x21, 0
+	.dw 0x6993, 0xcc36,	0x69bf, 0xcc36,		0x21, 0
+	.dw 0x69c1, 0xcc36,	0x69c1, 0xcc36,		0x21, 0
+	.dw 0x69c3, 0xcc36,	0x69cf, 0xcc36,		0x21, 0
+	.dw 0x69d1, 0xcc36,	0x69d1, 0xcc36,		0x21, 0
+	.dw 0x69d3, 0xcc36,	0x69ff, 0xcc36,		0x21, 0
+	.dw 0x6a01, 0xcc36,	0x6a01, 0xcc36,		0x21, 0
+	.dw 0x6a03, 0xcc36,	0x6a0f, 0xcc36,		0x21, 0
+	.dw 0x6a11, 0xcc36,	0x6a11, 0xcc36,		0x21, 0
+	.dw 0x6a13, 0xcc36,	0x6a3f, 0xcc36,		0x21, 0
+	.dw 0x6a41, 0xcc36,	0x6a41, 0xcc36,		0x21, 0
+	.dw 0x6a43, 0xcc36,	0x6a4f, 0xcc36,		0x21, 0
+	.dw 0x6a51, 0xcc36,	0x6a51, 0xcc36,		0x21, 0
+	.dw 0x6a53, 0xcc36,	0x6a7f, 0xcc36,		0x21, 0
+	.dw 0x6a81, 0xcc36,	0x6a81, 0xcc36,		0x21, 0
+	.dw 0x6a83, 0xcc36,	0x6a8f, 0xcc36,		0x21, 0
+	.dw 0x6a91, 0xcc36,	0x6a91, 0xcc36,		0x21, 0
+	.dw 0x6a93, 0xcc36,	0x6abf, 0xcc36,		0x21, 0
+	.dw 0x6ac1, 0xcc36,	0x6ac1, 0xcc36,		0x21, 0
+	.dw 0x6ac3, 0xcc36,	0x6acf, 0xcc36,		0x21, 0
+	.dw 0x6ad1, 0xcc36,	0x6ad1, 0xcc36,		0x21, 0
+	.dw 0x6ad3, 0xcc36,	0x6aff, 0xcc36,		0x21, 0
+	.dw 0x6b01, 0xcc36,	0x6b01, 0xcc36,		0x21, 0
+	.dw 0x6b03, 0xcc36,	0x6b0f, 0xcc36,		0x21, 0
+	.dw 0x6b11, 0xcc36,	0x6b11, 0xcc36,		0x21, 0
+	.dw 0x6b13, 0xcc36,	0x6b3f, 0xcc36,		0x21, 0
+	.dw 0x6b41, 0xcc36,	0x6b41, 0xcc36,		0x21, 0
+	.dw 0x6b43, 0xcc36,	0x6b4f, 0xcc36,		0x21, 0
+	.dw 0x6b51, 0xcc36,	0x6b51, 0xcc36,		0x21, 0
+	.dw 0x6b53, 0xcc36,	0x6b7f, 0xcc36,		0x21, 0
+	.dw 0x6b81, 0xcc36,	0x6b81, 0xcc36,		0x21, 0
+	.dw 0x6b83, 0xcc36,	0x6b8f, 0xcc36,		0x21, 0
+	.dw 0x6b91, 0xcc36,	0x6b91, 0xcc36,		0x21, 0
+	.dw 0x6b93, 0xcc36,	0x6bbf, 0xcc36,		0x21, 0
+	.dw 0x6bc1, 0xcc36,	0x6bc1, 0xcc36,		0x21, 0
+	.dw 0x6bc3, 0xcc36,	0x6bcf, 0xcc36,		0x21, 0
+	.dw 0x6bd1, 0xcc36,	0x6bd1, 0xcc36,		0x21, 0
+	.dw 0x6bd3, 0xcc36,	0x6bff, 0xcc36,		0x21, 0
+	.dw 0x6c01, 0xcc36,	0x6c01, 0xcc36,		0x21, 0
+	.dw 0x6c03, 0xcc36,	0x6c0f, 0xcc36,		0x21, 0
+	.dw 0x6c11, 0xcc36,	0x6c11, 0xcc36,		0x21, 0
+	.dw 0x6c13, 0xcc36,	0x6c3f, 0xcc36,		0x21, 0
+	.dw 0x6c41, 0xcc36,	0x6c41, 0xcc36,		0x21, 0
+	.dw 0x6c43, 0xcc36,	0x6c4f, 0xcc36,		0x21, 0
+	.dw 0x6c51, 0xcc36,	0x6c51, 0xcc36,		0x21, 0
+	.dw 0x6c53, 0xcc36,	0x6c7f, 0xcc36,		0x21, 0
+	.dw 0x6c81, 0xcc36,	0x6c81, 0xcc36,		0x21, 0
+	.dw 0x6c83, 0xcc36,	0x6c8f, 0xcc36,		0x21, 0
+	.dw 0x6c91, 0xcc36,	0x6c91, 0xcc36,		0x21, 0
+	.dw 0x6c93, 0xcc36,	0x6cbf, 0xcc36,		0x21, 0
+	.dw 0x6cc1, 0xcc36,	0x6cc1, 0xcc36,		0x21, 0
+	.dw 0x6cc3, 0xcc36,	0x6ccf, 0xcc36,		0x21, 0
+	.dw 0x6cd1, 0xcc36,	0x6cd1, 0xcc36,		0x21, 0
+	.dw 0x6cd3, 0xcc36,	0x6cff, 0xcc36,		0x21, 0
+	.dw 0x6d01, 0xcc36,	0x6d01, 0xcc36,		0x21, 0
+	.dw 0x6d03, 0xcc36,	0x6d0f, 0xcc36,		0x21, 0
+	.dw 0x6d11, 0xcc36,	0x6d11, 0xcc36,		0x21, 0
+	.dw 0x6d13, 0xcc36,	0x6d3f, 0xcc36,		0x21, 0
+	.dw 0x6d41, 0xcc36,	0x6d41, 0xcc36,		0x21, 0
+	.dw 0x6d43, 0xcc36,	0x6d4f, 0xcc36,		0x21, 0
+	.dw 0x6d51, 0xcc36,	0x6d51, 0xcc36,		0x21, 0
+	.dw 0x6d53, 0xcc36,	0x6d7f, 0xcc36,		0x21, 0
+	.dw 0x6d81, 0xcc36,	0x6d81, 0xcc36,		0x21, 0
+	.dw 0x6d83, 0xcc36,	0x6d8f, 0xcc36,		0x21, 0
+	.dw 0x6d91, 0xcc36,	0x6d91, 0xcc36,		0x21, 0
+	.dw 0x6d93, 0xcc36,	0x6dbf, 0xcc36,		0x21, 0
+	.dw 0x6dc1, 0xcc36,	0x6dc1, 0xcc36,		0x21, 0
+	.dw 0x6dc3, 0xcc36,	0x6dcf, 0xcc36,		0x21, 0
+	.dw 0x6dd1, 0xcc36,	0x6dd1, 0xcc36,		0x21, 0
+	.dw 0x6dd3, 0xcc36,	0x6dff, 0xcc36,		0x21, 0
+	.dw 0x6e01, 0xcc36,	0x6e01, 0xcc36,		0x21, 0
+	.dw 0x6e03, 0xcc36,	0x6e0f, 0xcc36,		0x21, 0
+	.dw 0x6e11, 0xcc36,	0x6e11, 0xcc36,		0x21, 0
+	.dw 0x6e13, 0xcc36,	0x6e3f, 0xcc36,		0x21, 0
+	.dw 0x6e41, 0xcc36,	0x6e41, 0xcc36,		0x21, 0
+	.dw 0x6e43, 0xcc36,	0x6e4f, 0xcc36,		0x21, 0
+	.dw 0x6e51, 0xcc36,	0x6e51, 0xcc36,		0x21, 0
+	.dw 0x6e53, 0xcc36,	0x6e7f, 0xcc36,		0x21, 0
+	.dw 0x6e81, 0xcc36,	0x6e81, 0xcc36,		0x21, 0
+	.dw 0x6e83, 0xcc36,	0x6e8f, 0xcc36,		0x21, 0
+	.dw 0x6e91, 0xcc36,	0x6e91, 0xcc36,		0x21, 0
+	.dw 0x6e93, 0xcc36,	0x6ebf, 0xcc36,		0x21, 0
+	.dw 0x6ec1, 0xcc36,	0x6ec1, 0xcc36,		0x21, 0
+	.dw 0x6ec3, 0xcc36,	0x6ecf, 0xcc36,		0x21, 0
+	.dw 0x6ed1, 0xcc36,	0x6ed1, 0xcc36,		0x21, 0
+	.dw 0x6ed3, 0xcc36,	0x6eff, 0xcc36,		0x21, 0
+	.dw 0x6f01, 0xcc36,	0x6f01, 0xcc36,		0x21, 0
+	.dw 0x6f03, 0xcc36,	0x6f0f, 0xcc36,		0x21, 0
+	.dw 0x6f11, 0xcc36,	0x6f11, 0xcc36,		0x21, 0
+	.dw 0x6f13, 0xcc36,	0x6f3f, 0xcc36,		0x21, 0
+	.dw 0x6f41, 0xcc36,	0x6f41, 0xcc36,		0x21, 0
+	.dw 0x6f43, 0xcc36,	0x6f4f, 0xcc36,		0x21, 0
+	.dw 0x6f51, 0xcc36,	0x6f51, 0xcc36,		0x21, 0
+	.dw 0x6f53, 0xcc36,	0x6f7f, 0xcc36,		0x21, 0
+	.dw 0x6f81, 0xcc36,	0x6f81, 0xcc36,		0x21, 0
+	.dw 0x6f83, 0xcc36,	0x6f8f, 0xcc36,		0x21, 0
+	.dw 0x6f91, 0xcc36,	0x6f91, 0xcc36,		0x21, 0
+	.dw 0x6f93, 0xcc36,	0x6fbf, 0xcc36,		0x21, 0
+	.dw 0x6fc1, 0xcc36,	0x6fc1, 0xcc36,		0x21, 0
+	.dw 0x6fc3, 0xcc36,	0x6fcf, 0xcc36,		0x21, 0
+	.dw 0x6fd1, 0xcc36,	0x6fd1, 0xcc36,		0x21, 0
+	.dw 0x6fd3, 0xcc36,	0xffff, 0xcc36,		0x21, 0
+	.dw 0x0001, 0xcc37,	0x0001, 0xcc37,		0x21, 0
+	.dw 0x0003, 0xcc37,	0x000f, 0xcc37,		0x21, 0
+	.dw 0x0011, 0xcc37,	0x0011, 0xcc37,		0x21, 0
+	.dw 0x0013, 0xcc37,	0x003f, 0xcc37,		0x21, 0
+	.dw 0x0041, 0xcc37,	0x0041, 0xcc37,		0x21, 0
+	.dw 0x0043, 0xcc37,	0x004f, 0xcc37,		0x21, 0
+	.dw 0x0051, 0xcc37,	0x0051, 0xcc37,		0x21, 0
+	.dw 0x0053, 0xcc37,	0x007f, 0xcc37,		0x21, 0
+	.dw 0x0081, 0xcc37,	0x0081, 0xcc37,		0x21, 0
+	.dw 0x0083, 0xcc37,	0x008f, 0xcc37,		0x21, 0
+	.dw 0x0091, 0xcc37,	0x0091, 0xcc37,		0x21, 0
+	.dw 0x0093, 0xcc37,	0x00bf, 0xcc37,		0x21, 0
+	.dw 0x00c1, 0xcc37,	0x00c1, 0xcc37,		0x21, 0
+	.dw 0x00c3, 0xcc37,	0x00cf, 0xcc37,		0x21, 0
+	.dw 0x00d1, 0xcc37,	0x00d1, 0xcc37,		0x21, 0
+	.dw 0x00d3, 0xcc37,	0x00ff, 0xcc37,		0x21, 0
+	.dw 0x0101, 0xcc37,	0x0101, 0xcc37,		0x21, 0
+	.dw 0x0103, 0xcc37,	0x010f, 0xcc37,		0x21, 0
+	.dw 0x0111, 0xcc37,	0x0111, 0xcc37,		0x21, 0
+	.dw 0x0113, 0xcc37,	0x013f, 0xcc37,		0x21, 0
+	.dw 0x0141, 0xcc37,	0x0141, 0xcc37,		0x21, 0
+	.dw 0x0143, 0xcc37,	0x014f, 0xcc37,		0x21, 0
+	.dw 0x0151, 0xcc37,	0x0151, 0xcc37,		0x21, 0
+	.dw 0x0153, 0xcc37,	0x017f, 0xcc37,		0x21, 0
+	.dw 0x0181, 0xcc37,	0x0181, 0xcc37,		0x21, 0
+	.dw 0x0183, 0xcc37,	0x018f, 0xcc37,		0x21, 0
+	.dw 0x0191, 0xcc37,	0x0191, 0xcc37,		0x21, 0
+	.dw 0x0193, 0xcc37,	0x01bf, 0xcc37,		0x21, 0
+	.dw 0x01c1, 0xcc37,	0x01c1, 0xcc37,		0x21, 0
+	.dw 0x01c3, 0xcc37,	0x01cf, 0xcc37,		0x21, 0
+	.dw 0x01d1, 0xcc37,	0x01d1, 0xcc37,		0x21, 0
+	.dw 0x01d3, 0xcc37,	0x01ff, 0xcc37,		0x21, 0
+	.dw 0x0201, 0xcc37,	0x0201, 0xcc37,		0x21, 0
+	.dw 0x0203, 0xcc37,	0x020f, 0xcc37,		0x21, 0
+	.dw 0x0211, 0xcc37,	0x0211, 0xcc37,		0x21, 0
+	.dw 0x0213, 0xcc37,	0x023f, 0xcc37,		0x21, 0
+	.dw 0x0241, 0xcc37,	0x0241, 0xcc37,		0x21, 0
+	.dw 0x0243, 0xcc37,	0x024f, 0xcc37,		0x21, 0
+	.dw 0x0251, 0xcc37,	0x0251, 0xcc37,		0x21, 0
+	.dw 0x0253, 0xcc37,	0x027f, 0xcc37,		0x21, 0
+	.dw 0x0281, 0xcc37,	0x0281, 0xcc37,		0x21, 0
+	.dw 0x0283, 0xcc37,	0x028f, 0xcc37,		0x21, 0
+	.dw 0x0291, 0xcc37,	0x0291, 0xcc37,		0x21, 0
+	.dw 0x0293, 0xcc37,	0x02bf, 0xcc37,		0x21, 0
+	.dw 0x02c1, 0xcc37,	0x02c1, 0xcc37,		0x21, 0
+	.dw 0x02c3, 0xcc37,	0x02cf, 0xcc37,		0x21, 0
+	.dw 0x02d1, 0xcc37,	0x02d1, 0xcc37,		0x21, 0
+	.dw 0x02d3, 0xcc37,	0x02ff, 0xcc37,		0x21, 0
+	.dw 0x0301, 0xcc37,	0x0301, 0xcc37,		0x21, 0
+	.dw 0x0303, 0xcc37,	0x030f, 0xcc37,		0x21, 0
+	.dw 0x0311, 0xcc37,	0x0311, 0xcc37,		0x21, 0
+	.dw 0x0313, 0xcc37,	0x033f, 0xcc37,		0x21, 0
+	.dw 0x0341, 0xcc37,	0x0341, 0xcc37,		0x21, 0
+	.dw 0x0343, 0xcc37,	0x034f, 0xcc37,		0x21, 0
+	.dw 0x0351, 0xcc37,	0x0351, 0xcc37,		0x21, 0
+	.dw 0x0353, 0xcc37,	0x037f, 0xcc37,		0x21, 0
+	.dw 0x0381, 0xcc37,	0x0381, 0xcc37,		0x21, 0
+	.dw 0x0383, 0xcc37,	0x038f, 0xcc37,		0x21, 0
+	.dw 0x0391, 0xcc37,	0x0391, 0xcc37,		0x21, 0
+	.dw 0x0393, 0xcc37,	0x03bf, 0xcc37,		0x21, 0
+	.dw 0x03c1, 0xcc37,	0x03c1, 0xcc37,		0x21, 0
+	.dw 0x03c3, 0xcc37,	0x03cf, 0xcc37,		0x21, 0
+	.dw 0x03d1, 0xcc37,	0x03d1, 0xcc37,		0x21, 0
+	.dw 0x03d3, 0xcc37,	0x03ff, 0xcc37,		0x21, 0
+	.dw 0x0401, 0xcc37,	0x0401, 0xcc37,		0x21, 0
+	.dw 0x0403, 0xcc37,	0x040f, 0xcc37,		0x21, 0
+	.dw 0x0411, 0xcc37,	0x0411, 0xcc37,		0x21, 0
+	.dw 0x0413, 0xcc37,	0x043f, 0xcc37,		0x21, 0
+	.dw 0x0441, 0xcc37,	0x0441, 0xcc37,		0x21, 0
+	.dw 0x0443, 0xcc37,	0x044f, 0xcc37,		0x21, 0
+	.dw 0x0451, 0xcc37,	0x0451, 0xcc37,		0x21, 0
+	.dw 0x0453, 0xcc37,	0x047f, 0xcc37,		0x21, 0
+	.dw 0x0481, 0xcc37,	0x0481, 0xcc37,		0x21, 0
+	.dw 0x0483, 0xcc37,	0x048f, 0xcc37,		0x21, 0
+	.dw 0x0491, 0xcc37,	0x0491, 0xcc37,		0x21, 0
+	.dw 0x0493, 0xcc37,	0x04bf, 0xcc37,		0x21, 0
+	.dw 0x04c1, 0xcc37,	0x04c1, 0xcc37,		0x21, 0
+	.dw 0x04c3, 0xcc37,	0x04cf, 0xcc37,		0x21, 0
+	.dw 0x04d1, 0xcc37,	0x04d1, 0xcc37,		0x21, 0
+	.dw 0x04d3, 0xcc37,	0x04ff, 0xcc37,		0x21, 0
+	.dw 0x0501, 0xcc37,	0x0501, 0xcc37,		0x21, 0
+	.dw 0x0503, 0xcc37,	0x050f, 0xcc37,		0x21, 0
+	.dw 0x0511, 0xcc37,	0x0511, 0xcc37,		0x21, 0
+	.dw 0x0513, 0xcc37,	0x053f, 0xcc37,		0x21, 0
+	.dw 0x0541, 0xcc37,	0x0541, 0xcc37,		0x21, 0
+	.dw 0x0543, 0xcc37,	0x054f, 0xcc37,		0x21, 0
+	.dw 0x0551, 0xcc37,	0x0551, 0xcc37,		0x21, 0
+	.dw 0x0553, 0xcc37,	0x057f, 0xcc37,		0x21, 0
+	.dw 0x0581, 0xcc37,	0x0581, 0xcc37,		0x21, 0
+	.dw 0x0583, 0xcc37,	0x058f, 0xcc37,		0x21, 0
+	.dw 0x0591, 0xcc37,	0x0591, 0xcc37,		0x21, 0
+	.dw 0x0593, 0xcc37,	0x05bf, 0xcc37,		0x21, 0
+	.dw 0x05c1, 0xcc37,	0x05c1, 0xcc37,		0x21, 0
+	.dw 0x05c3, 0xcc37,	0x05cf, 0xcc37,		0x21, 0
+	.dw 0x05d1, 0xcc37,	0x05d1, 0xcc37,		0x21, 0
+	.dw 0x05d3, 0xcc37,	0x05ff, 0xcc37,		0x21, 0
+	.dw 0x0601, 0xcc37,	0x0601, 0xcc37,		0x21, 0
+	.dw 0x0603, 0xcc37,	0x060f, 0xcc37,		0x21, 0
+	.dw 0x0611, 0xcc37,	0x0611, 0xcc37,		0x21, 0
+	.dw 0x0613, 0xcc37,	0x063f, 0xcc37,		0x21, 0
+	.dw 0x0641, 0xcc37,	0x0641, 0xcc37,		0x21, 0
+	.dw 0x0643, 0xcc37,	0x064f, 0xcc37,		0x21, 0
+	.dw 0x0651, 0xcc37,	0x0651, 0xcc37,		0x21, 0
+	.dw 0x0653, 0xcc37,	0x067f, 0xcc37,		0x21, 0
+	.dw 0x0681, 0xcc37,	0x0681, 0xcc37,		0x21, 0
+	.dw 0x0683, 0xcc37,	0x068f, 0xcc37,		0x21, 0
+	.dw 0x0691, 0xcc37,	0x0691, 0xcc37,		0x21, 0
+	.dw 0x0693, 0xcc37,	0x06bf, 0xcc37,		0x21, 0
+	.dw 0x06c1, 0xcc37,	0x06c1, 0xcc37,		0x21, 0
+	.dw 0x06c3, 0xcc37,	0x06cf, 0xcc37,		0x21, 0
+	.dw 0x06d1, 0xcc37,	0x06d1, 0xcc37,		0x21, 0
+	.dw 0x06d3, 0xcc37,	0x06ff, 0xcc37,		0x21, 0
+	.dw 0x0701, 0xcc37,	0x0701, 0xcc37,		0x21, 0
+	.dw 0x0703, 0xcc37,	0x070f, 0xcc37,		0x21, 0
+	.dw 0x0711, 0xcc37,	0x0711, 0xcc37,		0x21, 0
+	.dw 0x0713, 0xcc37,	0x073f, 0xcc37,		0x21, 0
+	.dw 0x0741, 0xcc37,	0x0741, 0xcc37,		0x21, 0
+	.dw 0x0743, 0xcc37,	0x074f, 0xcc37,		0x21, 0
+	.dw 0x0751, 0xcc37,	0x0751, 0xcc37,		0x21, 0
+	.dw 0x0753, 0xcc37,	0x077f, 0xcc37,		0x21, 0
+	.dw 0x0781, 0xcc37,	0x0781, 0xcc37,		0x21, 0
+	.dw 0x0783, 0xcc37,	0x078f, 0xcc37,		0x21, 0
+	.dw 0x0791, 0xcc37,	0x0791, 0xcc37,		0x21, 0
+	.dw 0x0793, 0xcc37,	0x07bf, 0xcc37,		0x21, 0
+	.dw 0x07c1, 0xcc37,	0x07c1, 0xcc37,		0x21, 0
+	.dw 0x07c3, 0xcc37,	0x07cf, 0xcc37,		0x21, 0
+	.dw 0x07d1, 0xcc37,	0x07d1, 0xcc37,		0x21, 0
+	.dw 0x07d3, 0xcc37,	0x07ff, 0xcc37,		0x21, 0
+	.dw 0x0801, 0xcc37,	0x0801, 0xcc37,		0x21, 0
+	.dw 0x0803, 0xcc37,	0x080f, 0xcc37,		0x21, 0
+	.dw 0x0811, 0xcc37,	0x0811, 0xcc37,		0x21, 0
+	.dw 0x0813, 0xcc37,	0x083f, 0xcc37,		0x21, 0
+	.dw 0x0841, 0xcc37,	0x0841, 0xcc37,		0x21, 0
+	.dw 0x0843, 0xcc37,	0x084f, 0xcc37,		0x21, 0
+	.dw 0x0851, 0xcc37,	0x0851, 0xcc37,		0x21, 0
+	.dw 0x0853, 0xcc37,	0x087f, 0xcc37,		0x21, 0
+	.dw 0x0881, 0xcc37,	0x0881, 0xcc37,		0x21, 0
+	.dw 0x0883, 0xcc37,	0x088f, 0xcc37,		0x21, 0
+	.dw 0x0891, 0xcc37,	0x0891, 0xcc37,		0x21, 0
+	.dw 0x0893, 0xcc37,	0x08bf, 0xcc37,		0x21, 0
+	.dw 0x08c1, 0xcc37,	0x08c1, 0xcc37,		0x21, 0
+	.dw 0x08c3, 0xcc37,	0x08cf, 0xcc37,		0x21, 0
+	.dw 0x08d1, 0xcc37,	0x08d1, 0xcc37,		0x21, 0
+	.dw 0x08d3, 0xcc37,	0x08ff, 0xcc37,		0x21, 0
+	.dw 0x0901, 0xcc37,	0x0901, 0xcc37,		0x21, 0
+	.dw 0x0903, 0xcc37,	0x090f, 0xcc37,		0x21, 0
+	.dw 0x0911, 0xcc37,	0x0911, 0xcc37,		0x21, 0
+	.dw 0x0913, 0xcc37,	0x093f, 0xcc37,		0x21, 0
+	.dw 0x0941, 0xcc37,	0x0941, 0xcc37,		0x21, 0
+	.dw 0x0943, 0xcc37,	0x094f, 0xcc37,		0x21, 0
+	.dw 0x0951, 0xcc37,	0x0951, 0xcc37,		0x21, 0
+	.dw 0x0953, 0xcc37,	0x097f, 0xcc37,		0x21, 0
+	.dw 0x0981, 0xcc37,	0x0981, 0xcc37,		0x21, 0
+	.dw 0x0983, 0xcc37,	0x098f, 0xcc37,		0x21, 0
+	.dw 0x0991, 0xcc37,	0x0991, 0xcc37,		0x21, 0
+	.dw 0x0993, 0xcc37,	0x09bf, 0xcc37,		0x21, 0
+	.dw 0x09c1, 0xcc37,	0x09c1, 0xcc37,		0x21, 0
+	.dw 0x09c3, 0xcc37,	0x09cf, 0xcc37,		0x21, 0
+	.dw 0x09d1, 0xcc37,	0x09d1, 0xcc37,		0x21, 0
+	.dw 0x09d3, 0xcc37,	0x09ff, 0xcc37,		0x21, 0
+	.dw 0x0a01, 0xcc37,	0x0a01, 0xcc37,		0x21, 0
+	.dw 0x0a03, 0xcc37,	0x0a0f, 0xcc37,		0x21, 0
+	.dw 0x0a11, 0xcc37,	0x0a11, 0xcc37,		0x21, 0
+	.dw 0x0a13, 0xcc37,	0x0a3f, 0xcc37,		0x21, 0
+	.dw 0x0a41, 0xcc37,	0x0a41, 0xcc37,		0x21, 0
+	.dw 0x0a43, 0xcc37,	0x0a4f, 0xcc37,		0x21, 0
+	.dw 0x0a51, 0xcc37,	0x0a51, 0xcc37,		0x21, 0
+	.dw 0x0a53, 0xcc37,	0x0a7f, 0xcc37,		0x21, 0
+	.dw 0x0a81, 0xcc37,	0x0a81, 0xcc37,		0x21, 0
+	.dw 0x0a83, 0xcc37,	0x0a8f, 0xcc37,		0x21, 0
+	.dw 0x0a91, 0xcc37,	0x0a91, 0xcc37,		0x21, 0
+	.dw 0x0a93, 0xcc37,	0x0abf, 0xcc37,		0x21, 0
+	.dw 0x0ac1, 0xcc37,	0x0ac1, 0xcc37,		0x21, 0
+	.dw 0x0ac3, 0xcc37,	0x0acf, 0xcc37,		0x21, 0
+	.dw 0x0ad1, 0xcc37,	0x0ad1, 0xcc37,		0x21, 0
+	.dw 0x0ad3, 0xcc37,	0x0aff, 0xcc37,		0x21, 0
+	.dw 0x0b01, 0xcc37,	0x0b01, 0xcc37,		0x21, 0
+	.dw 0x0b03, 0xcc37,	0x0b0f, 0xcc37,		0x21, 0
+	.dw 0x0b11, 0xcc37,	0x0b11, 0xcc37,		0x21, 0
+	.dw 0x0b13, 0xcc37,	0x0b3f, 0xcc37,		0x21, 0
+	.dw 0x0b41, 0xcc37,	0x0b41, 0xcc37,		0x21, 0
+	.dw 0x0b43, 0xcc37,	0x0b4f, 0xcc37,		0x21, 0
+	.dw 0x0b51, 0xcc37,	0x0b51, 0xcc37,		0x21, 0
+	.dw 0x0b53, 0xcc37,	0x0b7f, 0xcc37,		0x21, 0
+	.dw 0x0b81, 0xcc37,	0x0b81, 0xcc37,		0x21, 0
+	.dw 0x0b83, 0xcc37,	0x0b8f, 0xcc37,		0x21, 0
+	.dw 0x0b91, 0xcc37,	0x0b91, 0xcc37,		0x21, 0
+	.dw 0x0b93, 0xcc37,	0x0bbf, 0xcc37,		0x21, 0
+	.dw 0x0bc1, 0xcc37,	0x0bc1, 0xcc37,		0x21, 0
+	.dw 0x0bc3, 0xcc37,	0x0bcf, 0xcc37,		0x21, 0
+	.dw 0x0bd1, 0xcc37,	0x0bd1, 0xcc37,		0x21, 0
+	.dw 0x0bd3, 0xcc37,	0x0bff, 0xcc37,		0x21, 0
+	.dw 0x0c01, 0xcc37,	0x0c01, 0xcc37,		0x21, 0
+	.dw 0x0c03, 0xcc37,	0x0c0f, 0xcc37,		0x21, 0
+	.dw 0x0c11, 0xcc37,	0x0c11, 0xcc37,		0x21, 0
+	.dw 0x0c13, 0xcc37,	0x0c3f, 0xcc37,		0x21, 0
+	.dw 0x0c41, 0xcc37,	0x0c41, 0xcc37,		0x21, 0
+	.dw 0x0c43, 0xcc37,	0x0c4f, 0xcc37,		0x21, 0
+	.dw 0x0c51, 0xcc37,	0x0c51, 0xcc37,		0x21, 0
+	.dw 0x0c53, 0xcc37,	0x0c7f, 0xcc37,		0x21, 0
+	.dw 0x0c81, 0xcc37,	0x0c81, 0xcc37,		0x21, 0
+	.dw 0x0c83, 0xcc37,	0x0c8f, 0xcc37,		0x21, 0
+	.dw 0x0c91, 0xcc37,	0x0c91, 0xcc37,		0x21, 0
+	.dw 0x0c93, 0xcc37,	0x0cbf, 0xcc37,		0x21, 0
+	.dw 0x0cc1, 0xcc37,	0x0cc1, 0xcc37,		0x21, 0
+	.dw 0x0cc3, 0xcc37,	0x0ccf, 0xcc37,		0x21, 0
+	.dw 0x0cd1, 0xcc37,	0x0cd1, 0xcc37,		0x21, 0
+	.dw 0x0cd3, 0xcc37,	0x0cff, 0xcc37,		0x21, 0
+	.dw 0x0d01, 0xcc37,	0x0d01, 0xcc37,		0x21, 0
+	.dw 0x0d03, 0xcc37,	0x0d0f, 0xcc37,		0x21, 0
+	.dw 0x0d11, 0xcc37,	0x0d11, 0xcc37,		0x21, 0
+	.dw 0x0d13, 0xcc37,	0x0d3f, 0xcc37,		0x21, 0
+	.dw 0x0d41, 0xcc37,	0x0d41, 0xcc37,		0x21, 0
+	.dw 0x0d43, 0xcc37,	0x0d4f, 0xcc37,		0x21, 0
+	.dw 0x0d51, 0xcc37,	0x0d51, 0xcc37,		0x21, 0
+	.dw 0x0d53, 0xcc37,	0x0d7f, 0xcc37,		0x21, 0
+	.dw 0x0d81, 0xcc37,	0x0d81, 0xcc37,		0x21, 0
+	.dw 0x0d83, 0xcc37,	0x0d8f, 0xcc37,		0x21, 0
+	.dw 0x0d91, 0xcc37,	0x0d91, 0xcc37,		0x21, 0
+	.dw 0x0d93, 0xcc37,	0x0dbf, 0xcc37,		0x21, 0
+	.dw 0x0dc1, 0xcc37,	0x0dc1, 0xcc37,		0x21, 0
+	.dw 0x0dc3, 0xcc37,	0x0dcf, 0xcc37,		0x21, 0
+	.dw 0x0dd1, 0xcc37,	0x0dd1, 0xcc37,		0x21, 0
+	.dw 0x0dd3, 0xcc37,	0x0dff, 0xcc37,		0x21, 0
+	.dw 0x0e01, 0xcc37,	0x0e01, 0xcc37,		0x21, 0
+	.dw 0x0e03, 0xcc37,	0x0e0f, 0xcc37,		0x21, 0
+	.dw 0x0e11, 0xcc37,	0x0e11, 0xcc37,		0x21, 0
+	.dw 0x0e13, 0xcc37,	0x0e3f, 0xcc37,		0x21, 0
+	.dw 0x0e41, 0xcc37,	0x0e41, 0xcc37,		0x21, 0
+	.dw 0x0e43, 0xcc37,	0x0e4f, 0xcc37,		0x21, 0
+	.dw 0x0e51, 0xcc37,	0x0e51, 0xcc37,		0x21, 0
+	.dw 0x0e53, 0xcc37,	0x0e7f, 0xcc37,		0x21, 0
+	.dw 0x0e81, 0xcc37,	0x0e81, 0xcc37,		0x21, 0
+	.dw 0x0e83, 0xcc37,	0x0e8f, 0xcc37,		0x21, 0
+	.dw 0x0e91, 0xcc37,	0x0e91, 0xcc37,		0x21, 0
+	.dw 0x0e93, 0xcc37,	0x0ebf, 0xcc37,		0x21, 0
+	.dw 0x0ec1, 0xcc37,	0x0ec1, 0xcc37,		0x21, 0
+	.dw 0x0ec3, 0xcc37,	0x0ecf, 0xcc37,		0x21, 0
+	.dw 0x0ed1, 0xcc37,	0x0ed1, 0xcc37,		0x21, 0
+	.dw 0x0ed3, 0xcc37,	0x0eff, 0xcc37,		0x21, 0
+	.dw 0x0f01, 0xcc37,	0x0f01, 0xcc37,		0x21, 0
+	.dw 0x0f03, 0xcc37,	0x0f0f, 0xcc37,		0x21, 0
+	.dw 0x0f11, 0xcc37,	0x0f11, 0xcc37,		0x21, 0
+	.dw 0x0f13, 0xcc37,	0x0f3f, 0xcc37,		0x21, 0
+	.dw 0x0f41, 0xcc37,	0x0f41, 0xcc37,		0x21, 0
+	.dw 0x0f43, 0xcc37,	0x0f4f, 0xcc37,		0x21, 0
+	.dw 0x0f51, 0xcc37,	0x0f51, 0xcc37,		0x21, 0
+	.dw 0x0f53, 0xcc37,	0x0f7f, 0xcc37,		0x21, 0
+	.dw 0x0f81, 0xcc37,	0x0f81, 0xcc37,		0x21, 0
+	.dw 0x0f83, 0xcc37,	0x0f8f, 0xcc37,		0x21, 0
+	.dw 0x0f91, 0xcc37,	0x0f91, 0xcc37,		0x21, 0
+	.dw 0x0f93, 0xcc37,	0x0fbf, 0xcc37,		0x21, 0
+	.dw 0x0fc1, 0xcc37,	0x0fc1, 0xcc37,		0x21, 0
+	.dw 0x0fc3, 0xcc37,	0x0fcf, 0xcc37,		0x21, 0
+	.dw 0x0fd1, 0xcc37,	0x0fd1, 0xcc37,		0x21, 0
+	.dw 0x0fd3, 0xcc37,	0x1fff, 0xcc37,		0x21, 0
+	.dw 0x2001, 0xcc37,	0x2001, 0xcc37,		0x21, 0
+	.dw 0x2003, 0xcc37,	0x200f, 0xcc37,		0x21, 0
+	.dw 0x2011, 0xcc37,	0x2011, 0xcc37,		0x21, 0
+	.dw 0x2013, 0xcc37,	0x203f, 0xcc37,		0x21, 0
+	.dw 0x2041, 0xcc37,	0x2041, 0xcc37,		0x21, 0
+	.dw 0x2043, 0xcc37,	0x204f, 0xcc37,		0x21, 0
+	.dw 0x2051, 0xcc37,	0x2051, 0xcc37,		0x21, 0
+	.dw 0x2053, 0xcc37,	0x207f, 0xcc37,		0x21, 0
+	.dw 0x2081, 0xcc37,	0x2081, 0xcc37,		0x21, 0
+	.dw 0x2083, 0xcc37,	0x208f, 0xcc37,		0x21, 0
+	.dw 0x2091, 0xcc37,	0x2091, 0xcc37,		0x21, 0
+	.dw 0x2093, 0xcc37,	0x20bf, 0xcc37,		0x21, 0
+	.dw 0x20c1, 0xcc37,	0x20c1, 0xcc37,		0x21, 0
+	.dw 0x20c3, 0xcc37,	0x20cf, 0xcc37,		0x21, 0
+	.dw 0x20d1, 0xcc37,	0x20d1, 0xcc37,		0x21, 0
+	.dw 0x20d3, 0xcc37,	0x20ff, 0xcc37,		0x21, 0
+	.dw 0x2101, 0xcc37,	0x2101, 0xcc37,		0x21, 0
+	.dw 0x2103, 0xcc37,	0x210f, 0xcc37,		0x21, 0
+	.dw 0x2111, 0xcc37,	0x2111, 0xcc37,		0x21, 0
+	.dw 0x2113, 0xcc37,	0x213f, 0xcc37,		0x21, 0
+	.dw 0x2141, 0xcc37,	0x2141, 0xcc37,		0x21, 0
+	.dw 0x2143, 0xcc37,	0x214f, 0xcc37,		0x21, 0
+	.dw 0x2151, 0xcc37,	0x2151, 0xcc37,		0x21, 0
+	.dw 0x2153, 0xcc37,	0x217f, 0xcc37,		0x21, 0
+	.dw 0x2181, 0xcc37,	0x2181, 0xcc37,		0x21, 0
+	.dw 0x2183, 0xcc37,	0x218f, 0xcc37,		0x21, 0
+	.dw 0x2191, 0xcc37,	0x2191, 0xcc37,		0x21, 0
+	.dw 0x2193, 0xcc37,	0x21bf, 0xcc37,		0x21, 0
+	.dw 0x21c1, 0xcc37,	0x21c1, 0xcc37,		0x21, 0
+	.dw 0x21c3, 0xcc37,	0x21cf, 0xcc37,		0x21, 0
+	.dw 0x21d1, 0xcc37,	0x21d1, 0xcc37,		0x21, 0
+	.dw 0x21d3, 0xcc37,	0x21ff, 0xcc37,		0x21, 0
+	.dw 0x2201, 0xcc37,	0x2201, 0xcc37,		0x21, 0
+	.dw 0x2203, 0xcc37,	0x220f, 0xcc37,		0x21, 0
+	.dw 0x2211, 0xcc37,	0x2211, 0xcc37,		0x21, 0
+	.dw 0x2213, 0xcc37,	0x223f, 0xcc37,		0x21, 0
+	.dw 0x2241, 0xcc37,	0x2241, 0xcc37,		0x21, 0
+	.dw 0x2243, 0xcc37,	0x224f, 0xcc37,		0x21, 0
+	.dw 0x2251, 0xcc37,	0x2251, 0xcc37,		0x21, 0
+	.dw 0x2253, 0xcc37,	0x227f, 0xcc37,		0x21, 0
+	.dw 0x2281, 0xcc37,	0x2281, 0xcc37,		0x21, 0
+	.dw 0x2283, 0xcc37,	0x228f, 0xcc37,		0x21, 0
+	.dw 0x2291, 0xcc37,	0x2291, 0xcc37,		0x21, 0
+	.dw 0x2293, 0xcc37,	0x22bf, 0xcc37,		0x21, 0
+	.dw 0x22c1, 0xcc37,	0x22c1, 0xcc37,		0x21, 0
+	.dw 0x22c3, 0xcc37,	0x22cf, 0xcc37,		0x21, 0
+	.dw 0x22d1, 0xcc37,	0x22d1, 0xcc37,		0x21, 0
+	.dw 0x22d3, 0xcc37,	0x22ff, 0xcc37,		0x21, 0
+	.dw 0x2301, 0xcc37,	0x2301, 0xcc37,		0x21, 0
+	.dw 0x2303, 0xcc37,	0x230f, 0xcc37,		0x21, 0
+	.dw 0x2311, 0xcc37,	0x2311, 0xcc37,		0x21, 0
+	.dw 0x2313, 0xcc37,	0x233f, 0xcc37,		0x21, 0
+	.dw 0x2341, 0xcc37,	0x2341, 0xcc37,		0x21, 0
+	.dw 0x2343, 0xcc37,	0x234f, 0xcc37,		0x21, 0
+	.dw 0x2351, 0xcc37,	0x2351, 0xcc37,		0x21, 0
+	.dw 0x2353, 0xcc37,	0x237f, 0xcc37,		0x21, 0
+	.dw 0x2381, 0xcc37,	0x2381, 0xcc37,		0x21, 0
+	.dw 0x2383, 0xcc37,	0x238f, 0xcc37,		0x21, 0
+	.dw 0x2391, 0xcc37,	0x2391, 0xcc37,		0x21, 0
+	.dw 0x2393, 0xcc37,	0x23bf, 0xcc37,		0x21, 0
+	.dw 0x23c1, 0xcc37,	0x23c1, 0xcc37,		0x21, 0
+	.dw 0x23c3, 0xcc37,	0x23cf, 0xcc37,		0x21, 0
+	.dw 0x23d1, 0xcc37,	0x23d1, 0xcc37,		0x21, 0
+	.dw 0x23d3, 0xcc37,	0x23ff, 0xcc37,		0x21, 0
+	.dw 0x2401, 0xcc37,	0x2401, 0xcc37,		0x21, 0
+	.dw 0x2403, 0xcc37,	0x240f, 0xcc37,		0x21, 0
+	.dw 0x2411, 0xcc37,	0x2411, 0xcc37,		0x21, 0
+	.dw 0x2413, 0xcc37,	0x243f, 0xcc37,		0x21, 0
+	.dw 0x2441, 0xcc37,	0x2441, 0xcc37,		0x21, 0
+	.dw 0x2443, 0xcc37,	0x244f, 0xcc37,		0x21, 0
+	.dw 0x2451, 0xcc37,	0x2451, 0xcc37,		0x21, 0
+	.dw 0x2453, 0xcc37,	0x247f, 0xcc37,		0x21, 0
+	.dw 0x2481, 0xcc37,	0x2481, 0xcc37,		0x21, 0
+	.dw 0x2483, 0xcc37,	0x248f, 0xcc37,		0x21, 0
+	.dw 0x2491, 0xcc37,	0x2491, 0xcc37,		0x21, 0
+	.dw 0x2493, 0xcc37,	0x24bf, 0xcc37,		0x21, 0
+	.dw 0x24c1, 0xcc37,	0x24c1, 0xcc37,		0x21, 0
+	.dw 0x24c3, 0xcc37,	0x24cf, 0xcc37,		0x21, 0
+	.dw 0x24d1, 0xcc37,	0x24d1, 0xcc37,		0x21, 0
+	.dw 0x24d3, 0xcc37,	0x24ff, 0xcc37,		0x21, 0
+	.dw 0x2501, 0xcc37,	0x2501, 0xcc37,		0x21, 0
+	.dw 0x2503, 0xcc37,	0x250f, 0xcc37,		0x21, 0
+	.dw 0x2511, 0xcc37,	0x2511, 0xcc37,		0x21, 0
+	.dw 0x2513, 0xcc37,	0x253f, 0xcc37,		0x21, 0
+	.dw 0x2541, 0xcc37,	0x2541, 0xcc37,		0x21, 0
+	.dw 0x2543, 0xcc37,	0x254f, 0xcc37,		0x21, 0
+	.dw 0x2551, 0xcc37,	0x2551, 0xcc37,		0x21, 0
+	.dw 0x2553, 0xcc37,	0x257f, 0xcc37,		0x21, 0
+	.dw 0x2581, 0xcc37,	0x2581, 0xcc37,		0x21, 0
+	.dw 0x2583, 0xcc37,	0x258f, 0xcc37,		0x21, 0
+	.dw 0x2591, 0xcc37,	0x2591, 0xcc37,		0x21, 0
+	.dw 0x2593, 0xcc37,	0x25bf, 0xcc37,		0x21, 0
+	.dw 0x25c1, 0xcc37,	0x25c1, 0xcc37,		0x21, 0
+	.dw 0x25c3, 0xcc37,	0x25cf, 0xcc37,		0x21, 0
+	.dw 0x25d1, 0xcc37,	0x25d1, 0xcc37,		0x21, 0
+	.dw 0x25d3, 0xcc37,	0x25ff, 0xcc37,		0x21, 0
+	.dw 0x2601, 0xcc37,	0x2601, 0xcc37,		0x21, 0
+	.dw 0x2603, 0xcc37,	0x260f, 0xcc37,		0x21, 0
+	.dw 0x2611, 0xcc37,	0x2611, 0xcc37,		0x21, 0
+	.dw 0x2613, 0xcc37,	0x263f, 0xcc37,		0x21, 0
+	.dw 0x2641, 0xcc37,	0x2641, 0xcc37,		0x21, 0
+	.dw 0x2643, 0xcc37,	0x264f, 0xcc37,		0x21, 0
+	.dw 0x2651, 0xcc37,	0x2651, 0xcc37,		0x21, 0
+	.dw 0x2653, 0xcc37,	0x267f, 0xcc37,		0x21, 0
+	.dw 0x2681, 0xcc37,	0x2681, 0xcc37,		0x21, 0
+	.dw 0x2683, 0xcc37,	0x268f, 0xcc37,		0x21, 0
+	.dw 0x2691, 0xcc37,	0x2691, 0xcc37,		0x21, 0
+	.dw 0x2693, 0xcc37,	0x26bf, 0xcc37,		0x21, 0
+	.dw 0x26c1, 0xcc37,	0x26c1, 0xcc37,		0x21, 0
+	.dw 0x26c3, 0xcc37,	0x26cf, 0xcc37,		0x21, 0
+	.dw 0x26d1, 0xcc37,	0x26d1, 0xcc37,		0x21, 0
+	.dw 0x26d3, 0xcc37,	0x26ff, 0xcc37,		0x21, 0
+	.dw 0x2701, 0xcc37,	0x2701, 0xcc37,		0x21, 0
+	.dw 0x2703, 0xcc37,	0x270f, 0xcc37,		0x21, 0
+	.dw 0x2711, 0xcc37,	0x2711, 0xcc37,		0x21, 0
+	.dw 0x2713, 0xcc37,	0x273f, 0xcc37,		0x21, 0
+	.dw 0x2741, 0xcc37,	0x2741, 0xcc37,		0x21, 0
+	.dw 0x2743, 0xcc37,	0x274f, 0xcc37,		0x21, 0
+	.dw 0x2751, 0xcc37,	0x2751, 0xcc37,		0x21, 0
+	.dw 0x2753, 0xcc37,	0x277f, 0xcc37,		0x21, 0
+	.dw 0x2781, 0xcc37,	0x2781, 0xcc37,		0x21, 0
+	.dw 0x2783, 0xcc37,	0x278f, 0xcc37,		0x21, 0
+	.dw 0x2791, 0xcc37,	0x2791, 0xcc37,		0x21, 0
+	.dw 0x2793, 0xcc37,	0x27bf, 0xcc37,		0x21, 0
+	.dw 0x27c1, 0xcc37,	0x27c1, 0xcc37,		0x21, 0
+	.dw 0x27c3, 0xcc37,	0x27cf, 0xcc37,		0x21, 0
+	.dw 0x27d1, 0xcc37,	0x27d1, 0xcc37,		0x21, 0
+	.dw 0x27d3, 0xcc37,	0x27ff, 0xcc37,		0x21, 0
+	.dw 0x2801, 0xcc37,	0x2801, 0xcc37,		0x21, 0
+	.dw 0x2803, 0xcc37,	0x280f, 0xcc37,		0x21, 0
+	.dw 0x2811, 0xcc37,	0x2811, 0xcc37,		0x21, 0
+	.dw 0x2813, 0xcc37,	0x283f, 0xcc37,		0x21, 0
+	.dw 0x2841, 0xcc37,	0x2841, 0xcc37,		0x21, 0
+	.dw 0x2843, 0xcc37,	0x284f, 0xcc37,		0x21, 0
+	.dw 0x2851, 0xcc37,	0x2851, 0xcc37,		0x21, 0
+	.dw 0x2853, 0xcc37,	0x287f, 0xcc37,		0x21, 0
+	.dw 0x2881, 0xcc37,	0x2881, 0xcc37,		0x21, 0
+	.dw 0x2883, 0xcc37,	0x288f, 0xcc37,		0x21, 0
+	.dw 0x2891, 0xcc37,	0x2891, 0xcc37,		0x21, 0
+	.dw 0x2893, 0xcc37,	0x28bf, 0xcc37,		0x21, 0
+	.dw 0x28c1, 0xcc37,	0x28c1, 0xcc37,		0x21, 0
+	.dw 0x28c3, 0xcc37,	0x28cf, 0xcc37,		0x21, 0
+	.dw 0x28d1, 0xcc37,	0x28d1, 0xcc37,		0x21, 0
+	.dw 0x28d3, 0xcc37,	0x28ff, 0xcc37,		0x21, 0
+	.dw 0x2901, 0xcc37,	0x2901, 0xcc37,		0x21, 0
+	.dw 0x2903, 0xcc37,	0x290f, 0xcc37,		0x21, 0
+	.dw 0x2911, 0xcc37,	0x2911, 0xcc37,		0x21, 0
+	.dw 0x2913, 0xcc37,	0x293f, 0xcc37,		0x21, 0
+	.dw 0x2941, 0xcc37,	0x2941, 0xcc37,		0x21, 0
+	.dw 0x2943, 0xcc37,	0x294f, 0xcc37,		0x21, 0
+	.dw 0x2951, 0xcc37,	0x2951, 0xcc37,		0x21, 0
+	.dw 0x2953, 0xcc37,	0x297f, 0xcc37,		0x21, 0
+	.dw 0x2981, 0xcc37,	0x2981, 0xcc37,		0x21, 0
+	.dw 0x2983, 0xcc37,	0x298f, 0xcc37,		0x21, 0
+	.dw 0x2991, 0xcc37,	0x2991, 0xcc37,		0x21, 0
+	.dw 0x2993, 0xcc37,	0x29bf, 0xcc37,		0x21, 0
+	.dw 0x29c1, 0xcc37,	0x29c1, 0xcc37,		0x21, 0
+	.dw 0x29c3, 0xcc37,	0x29cf, 0xcc37,		0x21, 0
+	.dw 0x29d1, 0xcc37,	0x29d1, 0xcc37,		0x21, 0
+	.dw 0x29d3, 0xcc37,	0x29ff, 0xcc37,		0x21, 0
+	.dw 0x2a01, 0xcc37,	0x2a01, 0xcc37,		0x21, 0
+	.dw 0x2a03, 0xcc37,	0x2a0f, 0xcc37,		0x21, 0
+	.dw 0x2a11, 0xcc37,	0x2a11, 0xcc37,		0x21, 0
+	.dw 0x2a13, 0xcc37,	0x2a3f, 0xcc37,		0x21, 0
+	.dw 0x2a41, 0xcc37,	0x2a41, 0xcc37,		0x21, 0
+	.dw 0x2a43, 0xcc37,	0x2a4f, 0xcc37,		0x21, 0
+	.dw 0x2a51, 0xcc37,	0x2a51, 0xcc37,		0x21, 0
+	.dw 0x2a53, 0xcc37,	0x2a7f, 0xcc37,		0x21, 0
+	.dw 0x2a81, 0xcc37,	0x2a81, 0xcc37,		0x21, 0
+	.dw 0x2a83, 0xcc37,	0x2a8f, 0xcc37,		0x21, 0
+	.dw 0x2a91, 0xcc37,	0x2a91, 0xcc37,		0x21, 0
+	.dw 0x2a93, 0xcc37,	0x2abf, 0xcc37,		0x21, 0
+	.dw 0x2ac1, 0xcc37,	0x2ac1, 0xcc37,		0x21, 0
+	.dw 0x2ac3, 0xcc37,	0x2acf, 0xcc37,		0x21, 0
+	.dw 0x2ad1, 0xcc37,	0x2ad1, 0xcc37,		0x21, 0
+	.dw 0x2ad3, 0xcc37,	0x2aff, 0xcc37,		0x21, 0
+	.dw 0x2b01, 0xcc37,	0x2b01, 0xcc37,		0x21, 0
+	.dw 0x2b03, 0xcc37,	0x2b0f, 0xcc37,		0x21, 0
+	.dw 0x2b11, 0xcc37,	0x2b11, 0xcc37,		0x21, 0
+	.dw 0x2b13, 0xcc37,	0x2b3f, 0xcc37,		0x21, 0
+	.dw 0x2b41, 0xcc37,	0x2b41, 0xcc37,		0x21, 0
+	.dw 0x2b43, 0xcc37,	0x2b4f, 0xcc37,		0x21, 0
+	.dw 0x2b51, 0xcc37,	0x2b51, 0xcc37,		0x21, 0
+	.dw 0x2b53, 0xcc37,	0x2b7f, 0xcc37,		0x21, 0
+	.dw 0x2b81, 0xcc37,	0x2b81, 0xcc37,		0x21, 0
+	.dw 0x2b83, 0xcc37,	0x2b8f, 0xcc37,		0x21, 0
+	.dw 0x2b91, 0xcc37,	0x2b91, 0xcc37,		0x21, 0
+	.dw 0x2b93, 0xcc37,	0x2bbf, 0xcc37,		0x21, 0
+	.dw 0x2bc1, 0xcc37,	0x2bc1, 0xcc37,		0x21, 0
+	.dw 0x2bc3, 0xcc37,	0x2bcf, 0xcc37,		0x21, 0
+	.dw 0x2bd1, 0xcc37,	0x2bd1, 0xcc37,		0x21, 0
+	.dw 0x2bd3, 0xcc37,	0x2bff, 0xcc37,		0x21, 0
+	.dw 0x2c01, 0xcc37,	0x2c01, 0xcc37,		0x21, 0
+	.dw 0x2c03, 0xcc37,	0x2c0f, 0xcc37,		0x21, 0
+	.dw 0x2c11, 0xcc37,	0x2c11, 0xcc37,		0x21, 0
+	.dw 0x2c13, 0xcc37,	0x2c3f, 0xcc37,		0x21, 0
+	.dw 0x2c41, 0xcc37,	0x2c41, 0xcc37,		0x21, 0
+	.dw 0x2c43, 0xcc37,	0x2c4f, 0xcc37,		0x21, 0
+	.dw 0x2c51, 0xcc37,	0x2c51, 0xcc37,		0x21, 0
+	.dw 0x2c53, 0xcc37,	0x2c7f, 0xcc37,		0x21, 0
+	.dw 0x2c81, 0xcc37,	0x2c81, 0xcc37,		0x21, 0
+	.dw 0x2c83, 0xcc37,	0x2c8f, 0xcc37,		0x21, 0
+	.dw 0x2c91, 0xcc37,	0x2c91, 0xcc37,		0x21, 0
+	.dw 0x2c93, 0xcc37,	0x2cbf, 0xcc37,		0x21, 0
+	.dw 0x2cc1, 0xcc37,	0x2cc1, 0xcc37,		0x21, 0
+	.dw 0x2cc3, 0xcc37,	0x2ccf, 0xcc37,		0x21, 0
+	.dw 0x2cd1, 0xcc37,	0x2cd1, 0xcc37,		0x21, 0
+	.dw 0x2cd3, 0xcc37,	0x2cff, 0xcc37,		0x21, 0
+	.dw 0x2d01, 0xcc37,	0x2d01, 0xcc37,		0x21, 0
+	.dw 0x2d03, 0xcc37,	0x2d0f, 0xcc37,		0x21, 0
+	.dw 0x2d11, 0xcc37,	0x2d11, 0xcc37,		0x21, 0
+	.dw 0x2d13, 0xcc37,	0x2d3f, 0xcc37,		0x21, 0
+	.dw 0x2d41, 0xcc37,	0x2d41, 0xcc37,		0x21, 0
+	.dw 0x2d43, 0xcc37,	0x2d4f, 0xcc37,		0x21, 0
+	.dw 0x2d51, 0xcc37,	0x2d51, 0xcc37,		0x21, 0
+	.dw 0x2d53, 0xcc37,	0x2d7f, 0xcc37,		0x21, 0
+	.dw 0x2d81, 0xcc37,	0x2d81, 0xcc37,		0x21, 0
+	.dw 0x2d83, 0xcc37,	0x2d8f, 0xcc37,		0x21, 0
+	.dw 0x2d91, 0xcc37,	0x2d91, 0xcc37,		0x21, 0
+	.dw 0x2d93, 0xcc37,	0x2dbf, 0xcc37,		0x21, 0
+	.dw 0x2dc1, 0xcc37,	0x2dc1, 0xcc37,		0x21, 0
+	.dw 0x2dc3, 0xcc37,	0x2dcf, 0xcc37,		0x21, 0
+	.dw 0x2dd1, 0xcc37,	0x2dd1, 0xcc37,		0x21, 0
+	.dw 0x2dd3, 0xcc37,	0x2dff, 0xcc37,		0x21, 0
+	.dw 0x2e01, 0xcc37,	0x2e01, 0xcc37,		0x21, 0
+	.dw 0x2e03, 0xcc37,	0x2e0f, 0xcc37,		0x21, 0
+	.dw 0x2e11, 0xcc37,	0x2e11, 0xcc37,		0x21, 0
+	.dw 0x2e13, 0xcc37,	0x2e3f, 0xcc37,		0x21, 0
+	.dw 0x2e41, 0xcc37,	0x2e41, 0xcc37,		0x21, 0
+	.dw 0x2e43, 0xcc37,	0x2e4f, 0xcc37,		0x21, 0
+	.dw 0x2e51, 0xcc37,	0x2e51, 0xcc37,		0x21, 0
+	.dw 0x2e53, 0xcc37,	0x2e7f, 0xcc37,		0x21, 0
+	.dw 0x2e81, 0xcc37,	0x2e81, 0xcc37,		0x21, 0
+	.dw 0x2e83, 0xcc37,	0x2e8f, 0xcc37,		0x21, 0
+	.dw 0x2e91, 0xcc37,	0x2e91, 0xcc37,		0x21, 0
+	.dw 0x2e93, 0xcc37,	0x2ebf, 0xcc37,		0x21, 0
+	.dw 0x2ec1, 0xcc37,	0x2ec1, 0xcc37,		0x21, 0
+	.dw 0x2ec3, 0xcc37,	0x2ecf, 0xcc37,		0x21, 0
+	.dw 0x2ed1, 0xcc37,	0x2ed1, 0xcc37,		0x21, 0
+	.dw 0x2ed3, 0xcc37,	0x2eff, 0xcc37,		0x21, 0
+	.dw 0x2f01, 0xcc37,	0x2f01, 0xcc37,		0x21, 0
+	.dw 0x2f03, 0xcc37,	0x2f0f, 0xcc37,		0x21, 0
+	.dw 0x2f11, 0xcc37,	0x2f11, 0xcc37,		0x21, 0
+	.dw 0x2f13, 0xcc37,	0x2f3f, 0xcc37,		0x21, 0
+	.dw 0x2f41, 0xcc37,	0x2f41, 0xcc37,		0x21, 0
+	.dw 0x2f43, 0xcc37,	0x2f4f, 0xcc37,		0x21, 0
+	.dw 0x2f51, 0xcc37,	0x2f51, 0xcc37,		0x21, 0
+	.dw 0x2f53, 0xcc37,	0x2f7f, 0xcc37,		0x21, 0
+	.dw 0x2f81, 0xcc37,	0x2f81, 0xcc37,		0x21, 0
+	.dw 0x2f83, 0xcc37,	0x2f8f, 0xcc37,		0x21, 0
+	.dw 0x2f91, 0xcc37,	0x2f91, 0xcc37,		0x21, 0
+	.dw 0x2f93, 0xcc37,	0x2fbf, 0xcc37,		0x21, 0
+	.dw 0x2fc1, 0xcc37,	0x2fc1, 0xcc37,		0x21, 0
+	.dw 0x2fc3, 0xcc37,	0x2fcf, 0xcc37,		0x21, 0
+	.dw 0x2fd1, 0xcc37,	0x2fd1, 0xcc37,		0x21, 0
+	.dw 0x2fd3, 0xcc37,	0xffff, 0xcdff,		0x21, 0
+	.dw 0x0040, 0xce00,	0x01ff, 0xce00,		0x21, 0
+	.dw 0x0240, 0xce00,	0x03ff, 0xce00,		0x21, 0
+	.dw 0x0440, 0xce00,	0x05ff, 0xce00,		0x21, 0
+	.dw 0x0640, 0xce00,	0x07ff, 0xce00,		0x21, 0
+	.dw 0x0840, 0xce00,	0x09ff, 0xce00,		0x21, 0
+	.dw 0x0a40, 0xce00,	0x0bff, 0xce00,		0x21, 0
+	.dw 0x0c40, 0xce00,	0x0dff, 0xce00,		0x21, 0
+	.dw 0x0e40, 0xce00,	0x0fff, 0xce00,		0x21, 0
+	.dw 0x1040, 0xce00,	0x11ff, 0xce00,		0x21, 0
+	.dw 0x1240, 0xce00,	0x13ff, 0xce00,		0x21, 0
+	.dw 0x1440, 0xce00,	0x15ff, 0xce00,		0x21, 0
+	.dw 0x1640, 0xce00,	0x17ff, 0xce00,		0x21, 0
+	.dw 0x1840, 0xce00,	0x19ff, 0xce00,		0x21, 0
+	.dw 0x1a40, 0xce00,	0x1bff, 0xce00,		0x21, 0
+	.dw 0x1c40, 0xce00,	0x1dff, 0xce00,		0x21, 0
+	.dw 0x1e40, 0xce00,	0x1fff, 0xce00,		0x21, 0
+	.dw 0x2040, 0xce00,	0x21ff, 0xce00,		0x21, 0
+	.dw 0x2240, 0xce00,	0x23ff, 0xce00,		0x21, 0
+	.dw 0x2440, 0xce00,	0x25ff, 0xce00,		0x21, 0
+	.dw 0x2640, 0xce00,	0x27ff, 0xce00,		0x21, 0
+	.dw 0x2840, 0xce00,	0x29ff, 0xce00,		0x21, 0
+	.dw 0x2a40, 0xce00,	0x2bff, 0xce00,		0x21, 0
+	.dw 0x2c40, 0xce00,	0x2dff, 0xce00,		0x21, 0
+	.dw 0x2e40, 0xce00,	0x2fff, 0xce00,		0x21, 0
+	.dw 0x3040, 0xce00,	0x31ff, 0xce00,		0x21, 0
+	.dw 0x3240, 0xce00,	0x33ff, 0xce00,		0x21, 0
+	.dw 0x3440, 0xce00,	0x35ff, 0xce00,		0x21, 0
+	.dw 0x3640, 0xce00,	0x37ff, 0xce00,		0x21, 0
+	.dw 0x3840, 0xce00,	0x39ff, 0xce00,		0x21, 0
+	.dw 0x3a40, 0xce00,	0x3bff, 0xce00,		0x21, 0
+	.dw 0x3c40, 0xce00,	0x3dff, 0xce00,		0x21, 0
+	.dw 0x3e40, 0xce00,	0x3fff, 0xce00,		0x21, 0
+	.dw 0x4040, 0xce00,	0x41ff, 0xce00,		0x21, 0
+	.dw 0x4240, 0xce00,	0x43ff, 0xce00,		0x21, 0
+	.dw 0x4440, 0xce00,	0x45ff, 0xce00,		0x21, 0
+	.dw 0x4640, 0xce00,	0x47ff, 0xce00,		0x21, 0
+	.dw 0x4840, 0xce00,	0x49ff, 0xce00,		0x21, 0
+	.dw 0x4a40, 0xce00,	0x4bff, 0xce00,		0x21, 0
+	.dw 0x4c40, 0xce00,	0x4dff, 0xce00,		0x21, 0
+	.dw 0x4e40, 0xce00,	0x4fff, 0xce00,		0x21, 0
+	.dw 0x5040, 0xce00,	0x51ff, 0xce00,		0x21, 0
+	.dw 0x5240, 0xce00,	0x53ff, 0xce00,		0x21, 0
+	.dw 0x5440, 0xce00,	0x55ff, 0xce00,		0x21, 0
+	.dw 0x5640, 0xce00,	0x57ff, 0xce00,		0x21, 0
+	.dw 0x5840, 0xce00,	0x59ff, 0xce00,		0x21, 0
+	.dw 0x5a40, 0xce00,	0x5bff, 0xce00,		0x21, 0
+	.dw 0x5c40, 0xce00,	0x5dff, 0xce00,		0x21, 0
+	.dw 0x5e40, 0xce00,	0x5fff, 0xce00,		0x21, 0
+	.dw 0x6040, 0xce00,	0x61ff, 0xce00,		0x21, 0
+	.dw 0x6240, 0xce00,	0x63ff, 0xce00,		0x21, 0
+	.dw 0x6440, 0xce00,	0x65ff, 0xce00,		0x21, 0
+	.dw 0x6640, 0xce00,	0x67ff, 0xce00,		0x21, 0
+	.dw 0x6840, 0xce00,	0x69ff, 0xce00,		0x21, 0
+	.dw 0x6a40, 0xce00,	0x6bff, 0xce00,		0x21, 0
+	.dw 0x6c40, 0xce00,	0x6dff, 0xce00,		0x21, 0
+	.dw 0x6e40, 0xce00,	0x6fff, 0xce00,		0x21, 0
+	.dw 0x7040, 0xce00,	0x71ff, 0xce00,		0x21, 0
+	.dw 0x7240, 0xce00,	0x73ff, 0xce00,		0x21, 0
+	.dw 0x7440, 0xce00,	0x75ff, 0xce00,		0x21, 0
+	.dw 0x7640, 0xce00,	0x77ff, 0xce00,		0x21, 0
+	.dw 0x7840, 0xce00,	0x79ff, 0xce00,		0x21, 0
+	.dw 0x7a40, 0xce00,	0x7bff, 0xce00,		0x21, 0
+	.dw 0x7c40, 0xce00,	0x7dff, 0xce00,		0x21, 0
+	.dw 0x7e40, 0xce00,	0x7fff, 0xce00,		0x21, 0
+	.dw 0x8040, 0xce00,	0x81ff, 0xce00,		0x21, 0
+	.dw 0x8240, 0xce00,	0x83ff, 0xce00,		0x21, 0
+	.dw 0x8440, 0xce00,	0x85ff, 0xce00,		0x21, 0
+	.dw 0x8640, 0xce00,	0x87ff, 0xce00,		0x21, 0
+	.dw 0x8840, 0xce00,	0x89ff, 0xce00,		0x21, 0
+	.dw 0x8a40, 0xce00,	0x8bff, 0xce00,		0x21, 0
+	.dw 0x8c40, 0xce00,	0x8dff, 0xce00,		0x21, 0
+	.dw 0x8e40, 0xce00,	0x8fff, 0xce00,		0x21, 0
+	.dw 0x9040, 0xce00,	0x91ff, 0xce00,		0x21, 0
+	.dw 0x9240, 0xce00,	0x93ff, 0xce00,		0x21, 0
+	.dw 0x9440, 0xce00,	0x95ff, 0xce00,		0x21, 0
+	.dw 0x9640, 0xce00,	0x97ff, 0xce00,		0x21, 0
+	.dw 0x9840, 0xce00,	0x99ff, 0xce00,		0x21, 0
+	.dw 0x9a40, 0xce00,	0x9bff, 0xce00,		0x21, 0
+	.dw 0x9c40, 0xce00,	0x9dff, 0xce00,		0x21, 0
+	.dw 0x9e40, 0xce00,	0x9fff, 0xce00,		0x21, 0
+	.dw 0xa040, 0xce00,	0xa1ff, 0xce00,		0x21, 0
+	.dw 0xa240, 0xce00,	0xa3ff, 0xce00,		0x21, 0
+	.dw 0xa440, 0xce00,	0xa5ff, 0xce00,		0x21, 0
+	.dw 0xa640, 0xce00,	0xa7ff, 0xce00,		0x21, 0
+	.dw 0xa840, 0xce00,	0xa9ff, 0xce00,		0x21, 0
+	.dw 0xaa40, 0xce00,	0xabff, 0xce00,		0x21, 0
+	.dw 0xac40, 0xce00,	0xadff, 0xce00,		0x21, 0
+	.dw 0xae40, 0xce00,	0xafff, 0xce00,		0x21, 0
+	.dw 0xb040, 0xce00,	0xb1ff, 0xce00,		0x21, 0
+	.dw 0xb240, 0xce00,	0xb3ff, 0xce00,		0x21, 0
+	.dw 0xb440, 0xce00,	0xb5ff, 0xce00,		0x21, 0
+	.dw 0xb640, 0xce00,	0xb7ff, 0xce00,		0x21, 0
+	.dw 0xb840, 0xce00,	0xb9ff, 0xce00,		0x21, 0
+	.dw 0xba40, 0xce00,	0xbbff, 0xce00,		0x21, 0
+	.dw 0xbc40, 0xce00,	0xbdff, 0xce00,		0x21, 0
+	.dw 0xbe40, 0xce00,	0xffff, 0xce00,		0x21, 0
+	.dw 0x0040, 0xce01,	0x01ff, 0xce01,		0x21, 0
+	.dw 0x0240, 0xce01,	0x03ff, 0xce01,		0x21, 0
+	.dw 0x0440, 0xce01,	0x05ff, 0xce01,		0x21, 0
+	.dw 0x0640, 0xce01,	0x07ff, 0xce01,		0x21, 0
+	.dw 0x0840, 0xce01,	0x09ff, 0xce01,		0x21, 0
+	.dw 0x0a40, 0xce01,	0x0bff, 0xce01,		0x21, 0
+	.dw 0x0c40, 0xce01,	0x0dff, 0xce01,		0x21, 0
+	.dw 0x0e40, 0xce01,	0x3fff, 0xce01,		0x21, 0
+	.dw 0x4040, 0xce01,	0x41ff, 0xce01,		0x21, 0
+	.dw 0x4240, 0xce01,	0x43ff, 0xce01,		0x21, 0
+	.dw 0x4440, 0xce01,	0x45ff, 0xce01,		0x21, 0
+	.dw 0x4640, 0xce01,	0x47ff, 0xce01,		0x21, 0
+	.dw 0x4840, 0xce01,	0x49ff, 0xce01,		0x21, 0
+	.dw 0x4a40, 0xce01,	0x4bff, 0xce01,		0x21, 0
+	.dw 0x4c40, 0xce01,	0x4dff, 0xce01,		0x21, 0
+	.dw 0x4e40, 0xce01,	0x7fff, 0xce01,		0x21, 0
+	.dw 0x8040, 0xce01,	0x81ff, 0xce01,		0x21, 0
+	.dw 0x8240, 0xce01,	0x83ff, 0xce01,		0x21, 0
+	.dw 0x8440, 0xce01,	0x85ff, 0xce01,		0x21, 0
+	.dw 0x8640, 0xce01,	0x87ff, 0xce01,		0x21, 0
+	.dw 0x8840, 0xce01,	0x89ff, 0xce01,		0x21, 0
+	.dw 0x8a40, 0xce01,	0x8bff, 0xce01,		0x21, 0
+	.dw 0x8c40, 0xce01,	0x8dff, 0xce01,		0x21, 0
+	.dw 0x8e40, 0xce01,	0xffff, 0xce01,		0x21, 0
+	.dw 0x0040, 0xce02,	0x01ff, 0xce02,		0x21, 0
+	.dw 0x0240, 0xce02,	0x03ff, 0xce02,		0x21, 0
+	.dw 0x0440, 0xce02,	0x05ff, 0xce02,		0x21, 0
+	.dw 0x0640, 0xce02,	0x07ff, 0xce02,		0x21, 0
+	.dw 0x0840, 0xce02,	0x09ff, 0xce02,		0x21, 0
+	.dw 0x0a40, 0xce02,	0x0bff, 0xce02,		0x21, 0
+	.dw 0x0c40, 0xce02,	0x0dff, 0xce02,		0x21, 0
+	.dw 0x0e40, 0xce02,	0x3fff, 0xce02,		0x21, 0
+	.dw 0x4040, 0xce02,	0x41ff, 0xce02,		0x21, 0
+	.dw 0x4240, 0xce02,	0x43ff, 0xce02,		0x21, 0
+	.dw 0x4440, 0xce02,	0x45ff, 0xce02,		0x21, 0
+	.dw 0x4640, 0xce02,	0x47ff, 0xce02,		0x21, 0
+	.dw 0x4840, 0xce02,	0x49ff, 0xce02,		0x21, 0
+	.dw 0x4a40, 0xce02,	0x4bff, 0xce02,		0x21, 0
+	.dw 0x4c40, 0xce02,	0x4dff, 0xce02,		0x21, 0
+	.dw 0x4e40, 0xce02,	0x7fff, 0xce02,		0x21, 0
+	.dw 0x8040, 0xce02,	0x81ff, 0xce02,		0x21, 0
+	.dw 0x8240, 0xce02,	0x83ff, 0xce02,		0x21, 0
+	.dw 0x8440, 0xce02,	0x85ff, 0xce02,		0x21, 0
+	.dw 0x8640, 0xce02,	0x87ff, 0xce02,		0x21, 0
+	.dw 0x8840, 0xce02,	0x89ff, 0xce02,		0x21, 0
+	.dw 0x8a40, 0xce02,	0x8bff, 0xce02,		0x21, 0
+	.dw 0x8c40, 0xce02,	0x8dff, 0xce02,		0x21, 0
+	.dw 0x8e40, 0xce02,	0xbfff, 0xce02,		0x21, 0
+	.dw 0xc040, 0xce02,	0xc1ff, 0xce02,		0x21, 0
+	.dw 0xc240, 0xce02,	0xc3ff, 0xce02,		0x21, 0
+	.dw 0xc440, 0xce02,	0xc5ff, 0xce02,		0x21, 0
+	.dw 0xc640, 0xce02,	0xc7ff, 0xce02,		0x21, 0
+	.dw 0xc840, 0xce02,	0xc9ff, 0xce02,		0x21, 0
+	.dw 0xca40, 0xce02,	0xcbff, 0xce02,		0x21, 0
+	.dw 0xcc40, 0xce02,	0xcdff, 0xce02,		0x21, 0
+	.dw 0xce40, 0xce02,	0xffff, 0xce02,		0x21, 0
+	.dw 0x0040, 0xce03,	0x01ff, 0xce03,		0x21, 0
+	.dw 0x0240, 0xce03,	0x03ff, 0xce03,		0x21, 0
+	.dw 0x0440, 0xce03,	0x05ff, 0xce03,		0x21, 0
+	.dw 0x0640, 0xce03,	0x07ff, 0xce03,		0x21, 0
+	.dw 0x0840, 0xce03,	0x09ff, 0xce03,		0x21, 0
+	.dw 0x0a40, 0xce03,	0x0bff, 0xce03,		0x21, 0
+	.dw 0x0c40, 0xce03,	0x0dff, 0xce03,		0x21, 0
+	.dw 0x0e40, 0xce03,	0x0fff, 0xce03,		0x21, 0
+	.dw 0x1040, 0xce03,	0x11ff, 0xce03,		0x21, 0
+	.dw 0x1240, 0xce03,	0x13ff, 0xce03,		0x21, 0
+	.dw 0x1440, 0xce03,	0x15ff, 0xce03,		0x21, 0
+	.dw 0x1640, 0xce03,	0x17ff, 0xce03,		0x21, 0
+	.dw 0x1840, 0xce03,	0x19ff, 0xce03,		0x21, 0
+	.dw 0x1a40, 0xce03,	0x1bff, 0xce03,		0x21, 0
+	.dw 0x1c40, 0xce03,	0x1dff, 0xce03,		0x21, 0
+	.dw 0x1e40, 0xce03,	0x3fff, 0xce03,		0x21, 0
+	.dw 0x4040, 0xce03,	0x41ff, 0xce03,		0x21, 0
+	.dw 0x4240, 0xce03,	0x43ff, 0xce03,		0x21, 0
+	.dw 0x4440, 0xce03,	0x45ff, 0xce03,		0x21, 0
+	.dw 0x4640, 0xce03,	0x47ff, 0xce03,		0x21, 0
+	.dw 0x4840, 0xce03,	0x49ff, 0xce03,		0x21, 0
+	.dw 0x4a40, 0xce03,	0x4bff, 0xce03,		0x21, 0
+	.dw 0x4c40, 0xce03,	0x4dff, 0xce03,		0x21, 0
+	.dw 0x4e40, 0xce03,	0x4fff, 0xce03,		0x21, 0
+	.dw 0x5040, 0xce03,	0x51ff, 0xce03,		0x21, 0
+	.dw 0x5240, 0xce03,	0x53ff, 0xce03,		0x21, 0
+	.dw 0x5440, 0xce03,	0x55ff, 0xce03,		0x21, 0
+	.dw 0x5640, 0xce03,	0x57ff, 0xce03,		0x21, 0
+	.dw 0x5840, 0xce03,	0x59ff, 0xce03,		0x21, 0
+	.dw 0x5a40, 0xce03,	0x5bff, 0xce03,		0x21, 0
+	.dw 0x5c40, 0xce03,	0x5dff, 0xce03,		0x21, 0
+	.dw 0x5e40, 0xce03,	0x7fff, 0xce03,		0x21, 0
+	.dw 0x8040, 0xce03,	0x81ff, 0xce03,		0x21, 0
+	.dw 0x8240, 0xce03,	0x83ff, 0xce03,		0x21, 0
+	.dw 0x8440, 0xce03,	0x85ff, 0xce03,		0x21, 0
+	.dw 0x8640, 0xce03,	0x87ff, 0xce03,		0x21, 0
+	.dw 0x8840, 0xce03,	0x89ff, 0xce03,		0x21, 0
+	.dw 0x8a40, 0xce03,	0x8bff, 0xce03,		0x21, 0
+	.dw 0x8c40, 0xce03,	0x8dff, 0xce03,		0x21, 0
+	.dw 0x8e40, 0xce03,	0x8fff, 0xce03,		0x21, 0
+	.dw 0x9040, 0xce03,	0x91ff, 0xce03,		0x21, 0
+	.dw 0x9240, 0xce03,	0x93ff, 0xce03,		0x21, 0
+	.dw 0x9440, 0xce03,	0x95ff, 0xce03,		0x21, 0
+	.dw 0x9640, 0xce03,	0x97ff, 0xce03,		0x21, 0
+	.dw 0x9840, 0xce03,	0x99ff, 0xce03,		0x21, 0
+	.dw 0x9a40, 0xce03,	0x9bff, 0xce03,		0x21, 0
+	.dw 0x9c40, 0xce03,	0x9dff, 0xce03,		0x21, 0
+	.dw 0x9e40, 0xce03,	0xffff, 0xce03,		0x21, 0
+	.dw 0x0040, 0xce04,	0x01ff, 0xce04,		0x21, 0
+	.dw 0x0240, 0xce04,	0x03ff, 0xce04,		0x21, 0
+	.dw 0x0440, 0xce04,	0x05ff, 0xce04,		0x21, 0
+	.dw 0x0640, 0xce04,	0x07ff, 0xce04,		0x21, 0
+	.dw 0x0840, 0xce04,	0x09ff, 0xce04,		0x21, 0
+	.dw 0x0a40, 0xce04,	0x0bff, 0xce04,		0x21, 0
+	.dw 0x0c40, 0xce04,	0x0dff, 0xce04,		0x21, 0
+	.dw 0x0e40, 0xce04,	0x3fff, 0xce04,		0x21, 0
+	.dw 0x4040, 0xce04,	0x41ff, 0xce04,		0x21, 0
+	.dw 0x4240, 0xce04,	0x43ff, 0xce04,		0x21, 0
+	.dw 0x4440, 0xce04,	0x45ff, 0xce04,		0x21, 0
+	.dw 0x4640, 0xce04,	0x47ff, 0xce04,		0x21, 0
+	.dw 0x4840, 0xce04,	0x49ff, 0xce04,		0x21, 0
+	.dw 0x4a40, 0xce04,	0x4bff, 0xce04,		0x21, 0
+	.dw 0x4c40, 0xce04,	0x4dff, 0xce04,		0x21, 0
+	.dw 0x4e40, 0xce04,	0x7fff, 0xce04,		0x21, 0
+	.dw 0x8040, 0xce04,	0x81ff, 0xce04,		0x21, 0
+	.dw 0x8240, 0xce04,	0x83ff, 0xce04,		0x21, 0
+	.dw 0x8440, 0xce04,	0x85ff, 0xce04,		0x21, 0
+	.dw 0x8640, 0xce04,	0x87ff, 0xce04,		0x21, 0
+	.dw 0x8840, 0xce04,	0x89ff, 0xce04,		0x21, 0
+	.dw 0x8a40, 0xce04,	0x8bff, 0xce04,		0x21, 0
+	.dw 0x8c40, 0xce04,	0x8dff, 0xce04,		0x21, 0
+	.dw 0x8e40, 0xce04,	0xbfff, 0xce04,		0x21, 0
+	.dw 0xc040, 0xce04,	0xc1ff, 0xce04,		0x21, 0
+	.dw 0xc240, 0xce04,	0xc3ff, 0xce04,		0x21, 0
+	.dw 0xc440, 0xce04,	0xc5ff, 0xce04,		0x21, 0
+	.dw 0xc640, 0xce04,	0xc7ff, 0xce04,		0x21, 0
+	.dw 0xc840, 0xce04,	0xc9ff, 0xce04,		0x21, 0
+	.dw 0xca40, 0xce04,	0xcbff, 0xce04,		0x21, 0
+	.dw 0xcc40, 0xce04,	0xcdff, 0xce04,		0x21, 0
+	.dw 0xce40, 0xce04,	0xffff, 0xce04,		0x21, 0
+	.dw 0x0040, 0xce05,	0x01ff, 0xce05,		0x21, 0
+	.dw 0x0240, 0xce05,	0x03ff, 0xce05,		0x21, 0
+	.dw 0x0440, 0xce05,	0x05ff, 0xce05,		0x21, 0
+	.dw 0x0640, 0xce05,	0x07ff, 0xce05,		0x21, 0
+	.dw 0x0840, 0xce05,	0x09ff, 0xce05,		0x21, 0
+	.dw 0x0a40, 0xce05,	0x0bff, 0xce05,		0x21, 0
+	.dw 0x0c40, 0xce05,	0x0dff, 0xce05,		0x21, 0
+	.dw 0x0e40, 0xce05,	0x3fff, 0xce05,		0x21, 0
+	.dw 0x4040, 0xce05,	0x41ff, 0xce05,		0x21, 0
+	.dw 0x4240, 0xce05,	0x43ff, 0xce05,		0x21, 0
+	.dw 0x4440, 0xce05,	0x45ff, 0xce05,		0x21, 0
+	.dw 0x4640, 0xce05,	0x47ff, 0xce05,		0x21, 0
+	.dw 0x4840, 0xce05,	0x49ff, 0xce05,		0x21, 0
+	.dw 0x4a40, 0xce05,	0x4bff, 0xce05,		0x21, 0
+	.dw 0x4c40, 0xce05,	0x4dff, 0xce05,		0x21, 0
+	.dw 0x4e40, 0xce05,	0x7fff, 0xce05,		0x21, 0
+	.dw 0x8040, 0xce05,	0x81ff, 0xce05,		0x21, 0
+	.dw 0x8240, 0xce05,	0x83ff, 0xce05,		0x21, 0
+	.dw 0x8440, 0xce05,	0x85ff, 0xce05,		0x21, 0
+	.dw 0x8640, 0xce05,	0x87ff, 0xce05,		0x21, 0
+	.dw 0x8840, 0xce05,	0x89ff, 0xce05,		0x21, 0
+	.dw 0x8a40, 0xce05,	0x8bff, 0xce05,		0x21, 0
+	.dw 0x8c40, 0xce05,	0x8dff, 0xce05,		0x21, 0
+	.dw 0x8e40, 0xce05,	0xffff, 0xce05,		0x21, 0
+	.dw 0x0040, 0xce06,	0x01ff, 0xce06,		0x21, 0
+	.dw 0x0240, 0xce06,	0x03ff, 0xce06,		0x21, 0
+	.dw 0x0440, 0xce06,	0x05ff, 0xce06,		0x21, 0
+	.dw 0x0640, 0xce06,	0x07ff, 0xce06,		0x21, 0
+	.dw 0x0840, 0xce06,	0x09ff, 0xce06,		0x21, 0
+	.dw 0x0a40, 0xce06,	0x0bff, 0xce06,		0x21, 0
+	.dw 0x0c40, 0xce06,	0x0dff, 0xce06,		0x21, 0
+	.dw 0x0e40, 0xce06,	0x3fff, 0xce06,		0x21, 0
+	.dw 0x4040, 0xce06,	0x41ff, 0xce06,		0x21, 0
+	.dw 0x4240, 0xce06,	0x43ff, 0xce06,		0x21, 0
+	.dw 0x4440, 0xce06,	0x45ff, 0xce06,		0x21, 0
+	.dw 0x4640, 0xce06,	0x47ff, 0xce06,		0x21, 0
+	.dw 0x4840, 0xce06,	0x49ff, 0xce06,		0x21, 0
+	.dw 0x4a40, 0xce06,	0x4bff, 0xce06,		0x21, 0
+	.dw 0x4c40, 0xce06,	0x4dff, 0xce06,		0x21, 0
+	.dw 0x4e40, 0xce06,	0xbfff, 0xce06,		0x21, 0
+	.dw 0xc040, 0xce06,	0xc1ff, 0xce06,		0x21, 0
+	.dw 0xc240, 0xce06,	0xc3ff, 0xce06,		0x21, 0
+	.dw 0xc440, 0xce06,	0xc5ff, 0xce06,		0x21, 0
+	.dw 0xc640, 0xce06,	0xc7ff, 0xce06,		0x21, 0
+	.dw 0xc840, 0xce06,	0xc9ff, 0xce06,		0x21, 0
+	.dw 0xca40, 0xce06,	0xcbff, 0xce06,		0x21, 0
+	.dw 0xcc40, 0xce06,	0xcdff, 0xce06,		0x21, 0
+	.dw 0xce40, 0xce06,	0xffff, 0xce06,		0x21, 0
+	.dw 0x0040, 0xce07,	0x01ff, 0xce07,		0x21, 0
+	.dw 0x0240, 0xce07,	0x03ff, 0xce07,		0x21, 0
+	.dw 0x0440, 0xce07,	0x05ff, 0xce07,		0x21, 0
+	.dw 0x0640, 0xce07,	0x07ff, 0xce07,		0x21, 0
+	.dw 0x0840, 0xce07,	0x09ff, 0xce07,		0x21, 0
+	.dw 0x0a40, 0xce07,	0x0bff, 0xce07,		0x21, 0
+	.dw 0x0c40, 0xce07,	0x0dff, 0xce07,		0x21, 0
+	.dw 0x0e40, 0xce07,	0x3fff, 0xce07,		0x21, 0
+	.dw 0x4040, 0xce07,	0x41ff, 0xce07,		0x21, 0
+	.dw 0x4240, 0xce07,	0x43ff, 0xce07,		0x21, 0
+	.dw 0x4440, 0xce07,	0x45ff, 0xce07,		0x21, 0
+	.dw 0x4640, 0xce07,	0x47ff, 0xce07,		0x21, 0
+	.dw 0x4840, 0xce07,	0x49ff, 0xce07,		0x21, 0
+	.dw 0x4a40, 0xce07,	0x4bff, 0xce07,		0x21, 0
+	.dw 0x4c40, 0xce07,	0x4dff, 0xce07,		0x21, 0
+	.dw 0x4e40, 0xce07,	0x7fff, 0xce07,		0x21, 0
+	.dw 0x8040, 0xce07,	0x81ff, 0xce07,		0x21, 0
+	.dw 0x8240, 0xce07,	0x83ff, 0xce07,		0x21, 0
+	.dw 0x8440, 0xce07,	0x85ff, 0xce07,		0x21, 0
+	.dw 0x8640, 0xce07,	0x87ff, 0xce07,		0x21, 0
+	.dw 0x8840, 0xce07,	0x89ff, 0xce07,		0x21, 0
+	.dw 0x8a40, 0xce07,	0x8bff, 0xce07,		0x21, 0
+	.dw 0x8c40, 0xce07,	0x8dff, 0xce07,		0x21, 0
+	.dw 0x8e40, 0xce07,	0xbfff, 0xce07,		0x21, 0
+	.dw 0xc040, 0xce07,	0xc1ff, 0xce07,		0x21, 0
+	.dw 0xc240, 0xce07,	0xc3ff, 0xce07,		0x21, 0
+	.dw 0xc440, 0xce07,	0xc5ff, 0xce07,		0x21, 0
+	.dw 0xc640, 0xce07,	0xc7ff, 0xce07,		0x21, 0
+	.dw 0xc840, 0xce07,	0xc9ff, 0xce07,		0x21, 0
+	.dw 0xca40, 0xce07,	0xcbff, 0xce07,		0x21, 0
+	.dw 0xcc40, 0xce07,	0xcdff, 0xce07,		0x21, 0
+	.dw 0xce40, 0xce07,	0xffff, 0xce07,		0x21, 0
+	.dw 0x0000, 0xce08,	0x0000, 0xce08,		0x22, 0
+	.dw 0x0009, 0xce08,	0x0009, 0xce08,		0x22, 0
+	.dw 0x0012, 0xce08,	0x0012, 0xce08,		0x22, 0
+	.dw 0x001b, 0xce08,	0x001b, 0xce08,		0x22, 0
+	.dw 0x0024, 0xce08,	0x0024, 0xce08,		0x22, 0
+	.dw 0x002d, 0xce08,	0x002d, 0xce08,		0x22, 0
+	.dw 0x0036, 0xce08,	0x0036, 0xce08,		0x22, 0
+	.dw 0x003f, 0xce08,	0x003f, 0xce08,		0x22, 0
+	.dw 0x0040, 0xce08,	0x01ff, 0xce08,		0x21, 0
+	.dw 0x0200, 0xce08,	0x0200, 0xce08,		0x22, 0
+	.dw 0x0209, 0xce08,	0x0209, 0xce08,		0x22, 0
+	.dw 0x0212, 0xce08,	0x0212, 0xce08,		0x22, 0
+	.dw 0x021b, 0xce08,	0x021b, 0xce08,		0x22, 0
+	.dw 0x0224, 0xce08,	0x0224, 0xce08,		0x22, 0
+	.dw 0x022d, 0xce08,	0x022d, 0xce08,		0x22, 0
+	.dw 0x0236, 0xce08,	0x0236, 0xce08,		0x22, 0
+	.dw 0x023f, 0xce08,	0x023f, 0xce08,		0x22, 0
+	.dw 0x0240, 0xce08,	0x03ff, 0xce08,		0x21, 0
+	.dw 0x0400, 0xce08,	0x0400, 0xce08,		0x22, 0
+	.dw 0x0409, 0xce08,	0x0409, 0xce08,		0x22, 0
+	.dw 0x0412, 0xce08,	0x0412, 0xce08,		0x22, 0
+	.dw 0x041b, 0xce08,	0x041b, 0xce08,		0x22, 0
+	.dw 0x0424, 0xce08,	0x0424, 0xce08,		0x22, 0
+	.dw 0x042d, 0xce08,	0x042d, 0xce08,		0x22, 0
+	.dw 0x0436, 0xce08,	0x0436, 0xce08,		0x22, 0
+	.dw 0x043f, 0xce08,	0x043f, 0xce08,		0x22, 0
+	.dw 0x0440, 0xce08,	0x05ff, 0xce08,		0x21, 0
+	.dw 0x0600, 0xce08,	0x0600, 0xce08,		0x22, 0
+	.dw 0x0609, 0xce08,	0x0609, 0xce08,		0x22, 0
+	.dw 0x0612, 0xce08,	0x0612, 0xce08,		0x22, 0
+	.dw 0x061b, 0xce08,	0x061b, 0xce08,		0x22, 0
+	.dw 0x0624, 0xce08,	0x0624, 0xce08,		0x22, 0
+	.dw 0x062d, 0xce08,	0x062d, 0xce08,		0x22, 0
+	.dw 0x0636, 0xce08,	0x0636, 0xce08,		0x22, 0
+	.dw 0x063f, 0xce08,	0x063f, 0xce08,		0x22, 0
+	.dw 0x0640, 0xce08,	0x07ff, 0xce08,		0x21, 0
+	.dw 0x0800, 0xce08,	0x0800, 0xce08,		0x22, 0
+	.dw 0x0809, 0xce08,	0x0809, 0xce08,		0x22, 0
+	.dw 0x0812, 0xce08,	0x0812, 0xce08,		0x22, 0
+	.dw 0x081b, 0xce08,	0x081b, 0xce08,		0x22, 0
+	.dw 0x0824, 0xce08,	0x0824, 0xce08,		0x22, 0
+	.dw 0x082d, 0xce08,	0x082d, 0xce08,		0x22, 0
+	.dw 0x0836, 0xce08,	0x0836, 0xce08,		0x22, 0
+	.dw 0x083f, 0xce08,	0x083f, 0xce08,		0x22, 0
+	.dw 0x0840, 0xce08,	0x09ff, 0xce08,		0x21, 0
+	.dw 0x0a00, 0xce08,	0x0a00, 0xce08,		0x22, 0
+	.dw 0x0a09, 0xce08,	0x0a09, 0xce08,		0x22, 0
+	.dw 0x0a12, 0xce08,	0x0a12, 0xce08,		0x22, 0
+	.dw 0x0a1b, 0xce08,	0x0a1b, 0xce08,		0x22, 0
+	.dw 0x0a24, 0xce08,	0x0a24, 0xce08,		0x22, 0
+	.dw 0x0a2d, 0xce08,	0x0a2d, 0xce08,		0x22, 0
+	.dw 0x0a36, 0xce08,	0x0a36, 0xce08,		0x22, 0
+	.dw 0x0a3f, 0xce08,	0x0a3f, 0xce08,		0x22, 0
+	.dw 0x0a40, 0xce08,	0x0bff, 0xce08,		0x21, 0
+	.dw 0x0c00, 0xce08,	0x0c00, 0xce08,		0x22, 0
+	.dw 0x0c09, 0xce08,	0x0c09, 0xce08,		0x22, 0
+	.dw 0x0c12, 0xce08,	0x0c12, 0xce08,		0x22, 0
+	.dw 0x0c1b, 0xce08,	0x0c1b, 0xce08,		0x22, 0
+	.dw 0x0c24, 0xce08,	0x0c24, 0xce08,		0x22, 0
+	.dw 0x0c2d, 0xce08,	0x0c2d, 0xce08,		0x22, 0
+	.dw 0x0c36, 0xce08,	0x0c36, 0xce08,		0x22, 0
+	.dw 0x0c3f, 0xce08,	0x0c3f, 0xce08,		0x22, 0
+	.dw 0x0c40, 0xce08,	0x0dff, 0xce08,		0x21, 0
+	.dw 0x0e00, 0xce08,	0x0e00, 0xce08,		0x22, 0
+	.dw 0x0e09, 0xce08,	0x0e09, 0xce08,		0x22, 0
+	.dw 0x0e12, 0xce08,	0x0e12, 0xce08,		0x22, 0
+	.dw 0x0e1b, 0xce08,	0x0e1b, 0xce08,		0x22, 0
+	.dw 0x0e24, 0xce08,	0x0e24, 0xce08,		0x22, 0
+	.dw 0x0e2d, 0xce08,	0x0e2d, 0xce08,		0x22, 0
+	.dw 0x0e36, 0xce08,	0x0e36, 0xce08,		0x22, 0
+	.dw 0x0e3f, 0xce08,	0x0e3f, 0xce08,		0x22, 0
+	.dw 0x0e40, 0xce08,	0x3fff, 0xce08,		0x21, 0
+	.dw 0x4000, 0xce08,	0x4000, 0xce08,		0x22, 0
+	.dw 0x4009, 0xce08,	0x4009, 0xce08,		0x22, 0
+	.dw 0x4012, 0xce08,	0x4012, 0xce08,		0x22, 0
+	.dw 0x401b, 0xce08,	0x401b, 0xce08,		0x22, 0
+	.dw 0x4024, 0xce08,	0x4024, 0xce08,		0x22, 0
+	.dw 0x402d, 0xce08,	0x402d, 0xce08,		0x22, 0
+	.dw 0x4036, 0xce08,	0x4036, 0xce08,		0x22, 0
+	.dw 0x403f, 0xce08,	0x403f, 0xce08,		0x22, 0
+	.dw 0x4040, 0xce08,	0x41ff, 0xce08,		0x21, 0
+	.dw 0x4200, 0xce08,	0x4200, 0xce08,		0x22, 0
+	.dw 0x4209, 0xce08,	0x4209, 0xce08,		0x22, 0
+	.dw 0x4212, 0xce08,	0x4212, 0xce08,		0x22, 0
+	.dw 0x421b, 0xce08,	0x421b, 0xce08,		0x22, 0
+	.dw 0x4224, 0xce08,	0x4224, 0xce08,		0x22, 0
+	.dw 0x422d, 0xce08,	0x422d, 0xce08,		0x22, 0
+	.dw 0x4236, 0xce08,	0x4236, 0xce08,		0x22, 0
+	.dw 0x423f, 0xce08,	0x423f, 0xce08,		0x22, 0
+	.dw 0x4240, 0xce08,	0x43ff, 0xce08,		0x21, 0
+	.dw 0x4400, 0xce08,	0x4400, 0xce08,		0x22, 0
+	.dw 0x4409, 0xce08,	0x4409, 0xce08,		0x22, 0
+	.dw 0x4412, 0xce08,	0x4412, 0xce08,		0x22, 0
+	.dw 0x441b, 0xce08,	0x441b, 0xce08,		0x22, 0
+	.dw 0x4424, 0xce08,	0x4424, 0xce08,		0x22, 0
+	.dw 0x442d, 0xce08,	0x442d, 0xce08,		0x22, 0
+	.dw 0x4436, 0xce08,	0x4436, 0xce08,		0x22, 0
+	.dw 0x443f, 0xce08,	0x443f, 0xce08,		0x22, 0
+	.dw 0x4440, 0xce08,	0x45ff, 0xce08,		0x21, 0
+	.dw 0x4600, 0xce08,	0x4600, 0xce08,		0x22, 0
+	.dw 0x4609, 0xce08,	0x4609, 0xce08,		0x22, 0
+	.dw 0x4612, 0xce08,	0x4612, 0xce08,		0x22, 0
+	.dw 0x461b, 0xce08,	0x461b, 0xce08,		0x22, 0
+	.dw 0x4624, 0xce08,	0x4624, 0xce08,		0x22, 0
+	.dw 0x462d, 0xce08,	0x462d, 0xce08,		0x22, 0
+	.dw 0x4636, 0xce08,	0x4636, 0xce08,		0x22, 0
+	.dw 0x463f, 0xce08,	0x463f, 0xce08,		0x22, 0
+	.dw 0x4640, 0xce08,	0x47ff, 0xce08,		0x21, 0
+	.dw 0x4800, 0xce08,	0x4800, 0xce08,		0x22, 0
+	.dw 0x4809, 0xce08,	0x4809, 0xce08,		0x22, 0
+	.dw 0x4812, 0xce08,	0x4812, 0xce08,		0x22, 0
+	.dw 0x481b, 0xce08,	0x481b, 0xce08,		0x22, 0
+	.dw 0x4824, 0xce08,	0x4824, 0xce08,		0x22, 0
+	.dw 0x482d, 0xce08,	0x482d, 0xce08,		0x22, 0
+	.dw 0x4836, 0xce08,	0x4836, 0xce08,		0x22, 0
+	.dw 0x483f, 0xce08,	0x483f, 0xce08,		0x22, 0
+	.dw 0x4840, 0xce08,	0x49ff, 0xce08,		0x21, 0
+	.dw 0x4a00, 0xce08,	0x4a00, 0xce08,		0x22, 0
+	.dw 0x4a09, 0xce08,	0x4a09, 0xce08,		0x22, 0
+	.dw 0x4a12, 0xce08,	0x4a12, 0xce08,		0x22, 0
+	.dw 0x4a1b, 0xce08,	0x4a1b, 0xce08,		0x22, 0
+	.dw 0x4a24, 0xce08,	0x4a24, 0xce08,		0x22, 0
+	.dw 0x4a2d, 0xce08,	0x4a2d, 0xce08,		0x22, 0
+	.dw 0x4a36, 0xce08,	0x4a36, 0xce08,		0x22, 0
+	.dw 0x4a3f, 0xce08,	0x4a3f, 0xce08,		0x22, 0
+	.dw 0x4a40, 0xce08,	0x4bff, 0xce08,		0x21, 0
+	.dw 0x4c00, 0xce08,	0x4c00, 0xce08,		0x22, 0
+	.dw 0x4c09, 0xce08,	0x4c09, 0xce08,		0x22, 0
+	.dw 0x4c12, 0xce08,	0x4c12, 0xce08,		0x22, 0
+	.dw 0x4c1b, 0xce08,	0x4c1b, 0xce08,		0x22, 0
+	.dw 0x4c24, 0xce08,	0x4c24, 0xce08,		0x22, 0
+	.dw 0x4c2d, 0xce08,	0x4c2d, 0xce08,		0x22, 0
+	.dw 0x4c36, 0xce08,	0x4c36, 0xce08,		0x22, 0
+	.dw 0x4c3f, 0xce08,	0x4c3f, 0xce08,		0x22, 0
+	.dw 0x4c40, 0xce08,	0x4dff, 0xce08,		0x21, 0
+	.dw 0x4e00, 0xce08,	0x4e00, 0xce08,		0x22, 0
+	.dw 0x4e09, 0xce08,	0x4e09, 0xce08,		0x22, 0
+	.dw 0x4e12, 0xce08,	0x4e12, 0xce08,		0x22, 0
+	.dw 0x4e1b, 0xce08,	0x4e1b, 0xce08,		0x22, 0
+	.dw 0x4e24, 0xce08,	0x4e24, 0xce08,		0x22, 0
+	.dw 0x4e2d, 0xce08,	0x4e2d, 0xce08,		0x22, 0
+	.dw 0x4e36, 0xce08,	0x4e36, 0xce08,		0x22, 0
+	.dw 0x4e3f, 0xce08,	0x4e3f, 0xce08,		0x22, 0
+	.dw 0x4e40, 0xce08,	0xffff, 0xce08,		0x21, 0
+	.dw 0x0040, 0xce09,	0x01ff, 0xce09,		0x21, 0
+	.dw 0x0240, 0xce09,	0x03ff, 0xce09,		0x21, 0
+	.dw 0x0440, 0xce09,	0x05ff, 0xce09,		0x21, 0
+	.dw 0x0640, 0xce09,	0x07ff, 0xce09,		0x21, 0
+	.dw 0x0840, 0xce09,	0x09ff, 0xce09,		0x21, 0
+	.dw 0x0a40, 0xce09,	0x0bff, 0xce09,		0x21, 0
+	.dw 0x0c40, 0xce09,	0x0dff, 0xce09,		0x21, 0
+	.dw 0x0e40, 0xce09,	0x3fff, 0xce09,		0x21, 0
+	.dw 0x4040, 0xce09,	0x41ff, 0xce09,		0x21, 0
+	.dw 0x4240, 0xce09,	0x43ff, 0xce09,		0x21, 0
+	.dw 0x4440, 0xce09,	0x45ff, 0xce09,		0x21, 0
+	.dw 0x4640, 0xce09,	0x47ff, 0xce09,		0x21, 0
+	.dw 0x4840, 0xce09,	0x49ff, 0xce09,		0x21, 0
+	.dw 0x4a40, 0xce09,	0x4bff, 0xce09,		0x21, 0
+	.dw 0x4c40, 0xce09,	0x4dff, 0xce09,		0x21, 0
+	.dw 0x4e40, 0xce09,	0x7fff, 0xce09,		0x21, 0
+	.dw 0x8040, 0xce09,	0x81ff, 0xce09,		0x21, 0
+	.dw 0x8240, 0xce09,	0x83ff, 0xce09,		0x21, 0
+	.dw 0x8440, 0xce09,	0x85ff, 0xce09,		0x21, 0
+	.dw 0x8640, 0xce09,	0x87ff, 0xce09,		0x21, 0
+	.dw 0x8840, 0xce09,	0x89ff, 0xce09,		0x21, 0
+	.dw 0x8a40, 0xce09,	0x8bff, 0xce09,		0x21, 0
+	.dw 0x8c40, 0xce09,	0x8dff, 0xce09,		0x21, 0
+	.dw 0x8e40, 0xce09,	0xbfff, 0xce09,		0x21, 0
+	.dw 0xc040, 0xce09,	0xc1ff, 0xce09,		0x21, 0
+	.dw 0xc240, 0xce09,	0xc3ff, 0xce09,		0x21, 0
+	.dw 0xc440, 0xce09,	0xc5ff, 0xce09,		0x21, 0
+	.dw 0xc640, 0xce09,	0xc7ff, 0xce09,		0x21, 0
+	.dw 0xc840, 0xce09,	0xc9ff, 0xce09,		0x21, 0
+	.dw 0xca40, 0xce09,	0xcbff, 0xce09,		0x21, 0
+	.dw 0xcc40, 0xce09,	0xcdff, 0xce09,		0x21, 0
+	.dw 0xce40, 0xce09,	0xffff, 0xce09,		0x21, 0
+	.dw 0x0040, 0xce0a,	0x01ff, 0xce0a,		0x21, 0
+	.dw 0x0240, 0xce0a,	0x03ff, 0xce0a,		0x21, 0
+	.dw 0x0440, 0xce0a,	0x05ff, 0xce0a,		0x21, 0
+	.dw 0x0640, 0xce0a,	0x07ff, 0xce0a,		0x21, 0
+	.dw 0x0840, 0xce0a,	0x09ff, 0xce0a,		0x21, 0
+	.dw 0x0a40, 0xce0a,	0x0bff, 0xce0a,		0x21, 0
+	.dw 0x0c40, 0xce0a,	0x0dff, 0xce0a,		0x21, 0
+	.dw 0x0e40, 0xce0a,	0x3fff, 0xce0a,		0x21, 0
+	.dw 0x4040, 0xce0a,	0x41ff, 0xce0a,		0x21, 0
+	.dw 0x4240, 0xce0a,	0x43ff, 0xce0a,		0x21, 0
+	.dw 0x4440, 0xce0a,	0x45ff, 0xce0a,		0x21, 0
+	.dw 0x4640, 0xce0a,	0x47ff, 0xce0a,		0x21, 0
+	.dw 0x4840, 0xce0a,	0x49ff, 0xce0a,		0x21, 0
+	.dw 0x4a40, 0xce0a,	0x4bff, 0xce0a,		0x21, 0
+	.dw 0x4c40, 0xce0a,	0x4dff, 0xce0a,		0x21, 0
+	.dw 0x4e40, 0xce0a,	0x7fff, 0xce0a,		0x21, 0
+	.dw 0x8040, 0xce0a,	0x81ff, 0xce0a,		0x21, 0
+	.dw 0x8240, 0xce0a,	0x83ff, 0xce0a,		0x21, 0
+	.dw 0x8440, 0xce0a,	0x85ff, 0xce0a,		0x21, 0
+	.dw 0x8640, 0xce0a,	0x87ff, 0xce0a,		0x21, 0
+	.dw 0x8840, 0xce0a,	0x89ff, 0xce0a,		0x21, 0
+	.dw 0x8a40, 0xce0a,	0x8bff, 0xce0a,		0x21, 0
+	.dw 0x8c40, 0xce0a,	0x8dff, 0xce0a,		0x21, 0
+	.dw 0x8e40, 0xce0a,	0xbfff, 0xce0a,		0x21, 0
+	.dw 0xc040, 0xce0a,	0xc1ff, 0xce0a,		0x21, 0
+	.dw 0xc240, 0xce0a,	0xc3ff, 0xce0a,		0x21, 0
+	.dw 0xc440, 0xce0a,	0xc5ff, 0xce0a,		0x21, 0
+	.dw 0xc640, 0xce0a,	0xc7ff, 0xce0a,		0x21, 0
+	.dw 0xc840, 0xce0a,	0xc9ff, 0xce0a,		0x21, 0
+	.dw 0xca40, 0xce0a,	0xcbff, 0xce0a,		0x21, 0
+	.dw 0xcc40, 0xce0a,	0xcdff, 0xce0a,		0x21, 0
+	.dw 0xce40, 0xce0a,	0xffff, 0xce0a,		0x21, 0
+	.dw 0x0040, 0xce0b,	0x01ff, 0xce0b,		0x21, 0
+	.dw 0x0240, 0xce0b,	0x03ff, 0xce0b,		0x21, 0
+	.dw 0x0440, 0xce0b,	0x05ff, 0xce0b,		0x21, 0
+	.dw 0x0640, 0xce0b,	0x07ff, 0xce0b,		0x21, 0
+	.dw 0x0840, 0xce0b,	0x09ff, 0xce0b,		0x21, 0
+	.dw 0x0a40, 0xce0b,	0x0bff, 0xce0b,		0x21, 0
+	.dw 0x0c40, 0xce0b,	0x0dff, 0xce0b,		0x21, 0
+	.dw 0x0e40, 0xce0b,	0x3fff, 0xce0b,		0x21, 0
+	.dw 0x4040, 0xce0b,	0x41ff, 0xce0b,		0x21, 0
+	.dw 0x4240, 0xce0b,	0x43ff, 0xce0b,		0x21, 0
+	.dw 0x4440, 0xce0b,	0x45ff, 0xce0b,		0x21, 0
+	.dw 0x4640, 0xce0b,	0x47ff, 0xce0b,		0x21, 0
+	.dw 0x4840, 0xce0b,	0x49ff, 0xce0b,		0x21, 0
+	.dw 0x4a40, 0xce0b,	0x4bff, 0xce0b,		0x21, 0
+	.dw 0x4c40, 0xce0b,	0x4dff, 0xce0b,		0x21, 0
+	.dw 0x4e40, 0xce0b,	0xffff, 0xce0b,		0x21, 0
+	.dw 0x0040, 0xce0c,	0x01ff, 0xce0c,		0x21, 0
+	.dw 0x0240, 0xce0c,	0x03ff, 0xce0c,		0x21, 0
+	.dw 0x0440, 0xce0c,	0x05ff, 0xce0c,		0x21, 0
+	.dw 0x0640, 0xce0c,	0x07ff, 0xce0c,		0x21, 0
+	.dw 0x0840, 0xce0c,	0x09ff, 0xce0c,		0x21, 0
+	.dw 0x0a40, 0xce0c,	0x0bff, 0xce0c,		0x21, 0
+	.dw 0x0c40, 0xce0c,	0x0dff, 0xce0c,		0x21, 0
+	.dw 0x0e40, 0xce0c,	0x3fff, 0xce0c,		0x21, 0
+	.dw 0x4040, 0xce0c,	0x41ff, 0xce0c,		0x21, 0
+	.dw 0x4240, 0xce0c,	0x43ff, 0xce0c,		0x21, 0
+	.dw 0x4440, 0xce0c,	0x45ff, 0xce0c,		0x21, 0
+	.dw 0x4640, 0xce0c,	0x47ff, 0xce0c,		0x21, 0
+	.dw 0x4840, 0xce0c,	0x49ff, 0xce0c,		0x21, 0
+	.dw 0x4a40, 0xce0c,	0x4bff, 0xce0c,		0x21, 0
+	.dw 0x4c40, 0xce0c,	0x4dff, 0xce0c,		0x21, 0
+	.dw 0x4e40, 0xce0c,	0xffff, 0xce0c,		0x21, 0
+	.dw 0x0040, 0xce0d,	0x01ff, 0xce0d,		0x21, 0
+	.dw 0x0240, 0xce0d,	0x03ff, 0xce0d,		0x21, 0
+	.dw 0x0440, 0xce0d,	0x05ff, 0xce0d,		0x21, 0
+	.dw 0x0640, 0xce0d,	0x07ff, 0xce0d,		0x21, 0
+	.dw 0x0840, 0xce0d,	0x09ff, 0xce0d,		0x21, 0
+	.dw 0x0a40, 0xce0d,	0x0bff, 0xce0d,		0x21, 0
+	.dw 0x0c40, 0xce0d,	0x0dff, 0xce0d,		0x21, 0
+	.dw 0x0e40, 0xce0d,	0x3fff, 0xce0d,		0x21, 0
+	.dw 0x4040, 0xce0d,	0x41ff, 0xce0d,		0x21, 0
+	.dw 0x4240, 0xce0d,	0x43ff, 0xce0d,		0x21, 0
+	.dw 0x4440, 0xce0d,	0x45ff, 0xce0d,		0x21, 0
+	.dw 0x4640, 0xce0d,	0x47ff, 0xce0d,		0x21, 0
+	.dw 0x4840, 0xce0d,	0x49ff, 0xce0d,		0x21, 0
+	.dw 0x4a40, 0xce0d,	0x4bff, 0xce0d,		0x21, 0
+	.dw 0x4c40, 0xce0d,	0x4dff, 0xce0d,		0x21, 0
+	.dw 0x4e40, 0xce0d,	0x7fff, 0xce0d,		0x21, 0
+	.dw 0x8040, 0xce0d,	0x81ff, 0xce0d,		0x21, 0
+	.dw 0x8240, 0xce0d,	0x83ff, 0xce0d,		0x21, 0
+	.dw 0x8440, 0xce0d,	0x85ff, 0xce0d,		0x21, 0
+	.dw 0x8640, 0xce0d,	0x87ff, 0xce0d,		0x21, 0
+	.dw 0x8840, 0xce0d,	0x89ff, 0xce0d,		0x21, 0
+	.dw 0x8a40, 0xce0d,	0x8bff, 0xce0d,		0x21, 0
+	.dw 0x8c40, 0xce0d,	0x8dff, 0xce0d,		0x21, 0
+	.dw 0x8e40, 0xce0d,	0xffff, 0xce7f,		0x21, 0
+	.dw 0xc000, 0xce80,	0xffff, 0xce80,		0x21, 0
+	.dw 0x1000, 0xce81,	0x3fff, 0xce81,		0x21, 0
+	.dw 0x5000, 0xce81,	0x7fff, 0xce81,		0x21, 0
+	.dw 0x9000, 0xce81,	0xffff, 0xce81,		0x21, 0
+	.dw 0x1000, 0xce82,	0x3fff, 0xce82,		0x21, 0
+	.dw 0x5000, 0xce82,	0x7fff, 0xce82,		0x21, 0
+	.dw 0x9000, 0xce82,	0xbfff, 0xce82,		0x21, 0
+	.dw 0xd000, 0xce82,	0xffff, 0xce82,		0x21, 0
+	.dw 0x2000, 0xce83,	0x3fff, 0xce83,		0x21, 0
+	.dw 0x6000, 0xce83,	0x7fff, 0xce83,		0x21, 0
+	.dw 0xa000, 0xce83,	0xffff, 0xffff,		0x21, 0
+	.dw 0x0000, 0x0000,	0x0000, 0x0000,		0x00, 0
+.endm
+
+	se_all_test
diff --git a/sim/testsuite/sim/bfin/se_all64bitg1opcodes.S b/sim/testsuite/sim/bfin/se_all64bitg1opcodes.S
new file mode 100644
index 0000000..aae10f0
--- /dev/null
+++ b/sim/testsuite/sim/bfin/se_all64bitg1opcodes.S
@@ -0,0 +1,78 @@
+/*
+ * Blackfin testcase for testing illegal/legal 64-bit opcodes (group 1)
+ * from userspace.  we track all instructions which cause some sort of
+ * exception when run from userspace, this is normally EXCAUSE :
+ *  - 0x22 : illegal instruction combination
+ * and walk every instruction from 0x0000 to 0xffff
+ */
+
+# mach: bfin
+# sim: --environment operating
+
+#include "test.h"
+	.include "testutils.inc"
+
+#define SE_ALL_BITS 16
+#include "se_allopcodes.h"
+
+.macro se_all_load_insn
+	R2 = W[P5 + 4];
+	R0 = R2;
+.endm
+
+.macro se_all_next_insn
+	/* increment, and go again. */
+	R0 = R2;
+
+	R0 += 1;
+	/* finish once we hit the 32bit limit */
+	imm32 R1, 0x10000;
+	CC = R1 == R0;
+	IF CC JUMP pass_lvl;
+
+	W[P5 + 4] = R0;
+.endm
+
+.macro se_all_insn_init
+	MNOP || NOP || NOP;
+.endm
+.macro se_all_insn_table
+	/* this table must be sorted, and end with zero */
+	/* start	end		SEQSTAT */
+	.dw 0x0001,	0x7fff,		0x22
+	.dw 0x9040,	0x9040,		0x22
+	.dw 0x9049,	0x9049,		0x22
+	.dw 0x9052,	0x9052,		0x22
+	.dw 0x905b,	0x905b,		0x22
+	.dw 0x9064,	0x9064,		0x22
+	.dw 0x906d,	0x906d,		0x22
+	.dw 0x9076,	0x9076,		0x22
+	.dw 0x907f,	0x907f,		0x22
+	.dw 0x90c0,	0x90c0,		0x22
+	.dw 0x90c9,	0x90c9,		0x22
+	.dw 0x90d2,	0x90d2,		0x22
+	.dw 0x90db,	0x90db,		0x22
+	.dw 0x90e4,	0x90e4,		0x22
+	.dw 0x90ed,	0x90ed,		0x22
+	.dw 0x90f6,	0x90f6,		0x22
+	.dw 0x90ff,	0x90ff,		0x22
+	.dw 0x9180,	0x91ff,		0x22
+	.dw 0x9380,	0x93ff,		0x22
+	.dw 0x9580,	0x95ff,		0x22
+	.dw 0x9640,	0x967f,		0x22
+	.dw 0x96c0,	0x96ff,		0x22
+	.dw 0x9740,	0x97ff,		0x22
+	.dw 0x9980,	0x99ff,		0x22
+	.dw 0x9a40,	0x9a7f,		0x22
+	.dw 0x9ac0,	0x9aff,		0x22
+	.dw 0x9b40,	0x9bff,		0x22
+	.dw 0x9c60,	0x9c7f,		0x22
+	.dw 0x9ce0,	0x9cff,		0x22
+	.dw 0x9d60,	0x9d7f,		0x22
+	.dw 0x9ef0,	0x9eff,		0x22
+	.dw 0x9f70,	0x9f7f,		0x22
+	.dw 0xc000,	0xffff,		0x22
+	.dw 0x0000,	0x0000,		0x00
+.endm
+
+	se_all_test
diff --git a/sim/testsuite/sim/bfin/se_all64bitg2opcodes.S b/sim/testsuite/sim/bfin/se_all64bitg2opcodes.S
new file mode 100644
index 0000000..99de3ac
--- /dev/null
+++ b/sim/testsuite/sim/bfin/se_all64bitg2opcodes.S
@@ -0,0 +1,53 @@
+/*
+ * Blackfin testcase for testing illegal/legal 64-bit opcodes (group 2)
+ * from userspace.  we track all instructions which cause some sort of
+ * exception when run from userspace, this is normally EXCAUSE :
+ *  - 0x22 : illegal instruction combination
+ * and walk every instruction from 0x0000 to 0xffff
+ */
+
+# mach: bfin
+# sim: --environment operating
+
+#include "test.h"
+	.include "testutils.inc"
+
+#define SE_ALL_BITS 16
+#include "se_allopcodes.h"
+
+.macro se_all_load_insn
+	R2 = W[P5 + 6];
+	R0 = R2;
+.endm
+
+.macro se_all_next_insn
+	/* increment, and go again. */
+	R0 = R2;
+
+	R0 += 1;
+	/* finish once we hit the 32bit limit */
+	imm32 R1, 0x10000;
+	CC = R1 == R0;
+	IF CC JUMP pass_lvl;
+
+	W[P5 + 6] = R0;
+.endm
+
+.macro se_all_insn_init
+	MNOP || NOP || NOP;
+.endm
+.macro se_all_insn_table
+	/* this table must be sorted, and end with zero */
+	/* start	end		SEQSTAT */
+	.dw 0x0001,	0x9bff,		0x22
+	.dw 0x9c60,	0x9c7f,		0x22
+	.dw 0x9ce0,	0x9cff,		0x22
+	.dw 0x9d60,	0x9d7f,		0x22
+	.dw 0x9e60,	0x9e7f,		0x22
+	.dw 0x9ee0,	0x9eff,		0x22
+	.dw 0x9f60,	0x9f7f,		0x22
+	.dw 0xa000,	0xffff,		0x22
+	.dw 0x0000,	0x0000,		0x00
+.endm
+
+	se_all_test
diff --git a/sim/testsuite/sim/bfin/se_allopcodes.h b/sim/testsuite/sim/bfin/se_allopcodes.h
new file mode 100644
index 0000000..7ff8d2b
--- /dev/null
+++ b/sim/testsuite/sim/bfin/se_allopcodes.h
@@ -0,0 +1,222 @@
+/*
+ * set up pointers to valid data (32Meg), to reduce address violations
+ */
+.macro reset_dags
+	imm32 r0, 0x2000000;
+	l0 = 0; l1 = 0; l2 = 0; l3 = 0;
+	p0 = r0; p1 = r0; p2 = r0; p3 = r0; p4 = r0; p5 = r0;
+	usp = r0; fp = r0;
+	i0 = r0; i1 = r0; i2 = r0; i3 = r0;
+	b0 = r0; b1 = r0; b2 = r0; b3 = r0;
+.endm
+
+#if SE_ALL_BITS == 32
+# define LOAD_PFX
+#elif SE_ALL_BITS == 16
+# define LOAD_PFX W
+#else
+# error "Please define SE_ALL_BITS"
+#endif
+
+/*
+ * execute a test of an opcode space.  host test
+ * has to fill out a number of callbacks.
+ *
+ *	se_all_insn_init
+ *		the first insn to start executing
+ *	se_all_insn_table
+ *		the table of insn ranges and expected seqstat
+ *
+ *	se_all_load_insn
+ *	  in: P5
+ *	  out: R0, R2
+ *	  scratch: R1
+ *		load current user insn via register P5 into R0.
+ *		register R2 is available for caching with se_all_next_insn.
+ *	se_all_load_table
+ *	  in: P1
+ *	  out: R7, R6, R5
+ *	  scratch: R1
+ *		load insn range/seqstat entry from table via register P1
+ *		R7: low range
+ *		R6: high range
+ *		R5: seqstat
+ *
+ *	se_all_next_insn
+ *	  in: P5, R2
+ *	  out: <nothing>
+ *	  scratch: all but P5
+ *		advance current insn to next one for testing.  register R2
+ *		is retained from se_all_load_insn.  write out new insn to
+ *		the location via register P5.
+ *
+ *	se_all_new_insn_stub
+ *	se_all_new_insn_log
+ *		for handling of new insns ... generally not needed once done
+ */
+.macro se_all_test
+	start
+
+	/* Set up exception handler */
+	imm32 P4, EVT3;
+	loadsym R1, _evx;
+	[P4] = R1;
+
+	/* set up the _location */
+	loadsym P0, _location
+	loadsym P1, _table;
+	[P0] = P1;
+
+	/* Enable single stepping */
+	R0 = 1;
+	SYSCFG = R0;
+
+	/* Lower to the code we want to single step through */
+	loadsym P1, _usr;
+	RETI = P1;
+
+	/* set up pointers to valid data (32Meg), to reduce address violations */
+	reset_dags
+
+	RTI;
+
+pass_lvl:
+	dbg_pass;
+fail_lvl:
+	dbg_fail;
+
+_evx:
+	/* Make sure exception reason is as we expect */
+	R3 = SEQSTAT;
+	R4 = 0x3f;
+	R3 = R3 & R4;
+
+	/* find a match */
+	loadsym P5, _usr;
+	loadsym P4, _location;
+	P1 = [P4];
+	se_all_load_insn
+
+_match:
+	P2 = P1;
+	se_all_load_table
+
+	/* is this the end of the table? */
+	R4 = 0;
+	CC = R4 == R7;
+	IF CC jump _new_instruction;
+
+	/* is the opcode (R0) greater than the 2nd entry in the table (R6) */
+	/* if so look at the next line in the table */
+	CC = R6 < R0;
+	if CC jump _match;
+
+	/* is the opcode (R0) smaller than the first entry in the table (R7) */
+	/* this means it's somewhere between the two lines, and should be legal */
+	CC = R7 <= R0;
+	if !CC jump _legal_instruction;
+
+	/* is the current EXCAUSE (R3), the same as the table (R5) */
+	/* if not, fail */
+	CC = R3 == R5
+	if !CC jump fail_lvl;
+
+_match_done:
+	/* back up, and store the location to search next */
+	[P4] = P2;
+
+	/* it matches, so fall through */
+	jump _next_instruction;
+
+_new_instruction:
+	se_all_new_insn_stub
+
+	/* output the insn (R0) and excause (R3) if diff from last */
+	loadsym P0, _last_excause;
+	R2 = [P0];
+	CC = R2 == R3;
+	IF CC jump _next_instruction;
+	[P0] = R3;
+
+	se_all_new_insn_log
+
+_legal_instruction:
+	R4 = 0x10;
+	CC = R3 == R4;
+	IF !CC JUMP fail_lvl;
+	/* it wasn't in the list, and was a single step, so fall through */
+
+_next_instruction:
+	se_all_next_insn
+
+	/* Make sure the opcode isn't in a write buffer */
+	SSYNC;
+
+	R1 = P5;
+	RETX = R1;
+
+	/* set up pointers to valid data (32Meg), to reduce address violations */
+	reset_dags
+	RETS = r0;
+	RETN = r0;
+	RETE = r0;
+	RETI = r0;
+
+	RTX;
+
+.section .text.usr
+	.align 4
+_usr:
+	se_all_insn_init
+	loadsym P0, fail_lvl;
+	JUMP (P0);
+
+.data
+	.align 4;
+_last_excause:
+	.dd 0xffff
+_next_location:
+	.dd _table_end
+_location:
+	.dd 0
+_table:
+	se_all_insn_table
+_table_end:
+.endm
+
+.macro se_all_load_table
+	R7 = LOAD_PFX[P1++];
+	R6 = LOAD_PFX[P1++];
+	R5 = LOAD_PFX[P1++];
+.endm
+
+#ifndef SE_ALL_NEW_INSN_STUB
+.macro se_all_new_insn_stub
+	jump fail_lvl;
+.endm
+#endif
+
+.macro se_all_new_insn_log
+.ifdef BFIN_JTAG_xxxxx
+	R1 = R0;
+#if SE_ALL_BITS == 32
+	R0 = 0x8;
+	call __emu_out;
+	R0 = R1;
+	call __emu_out;
+	R0 = R3;
+#else
+	R0 = 0x4;
+	call __emu_out;
+	R0 = R1 << 16;
+	R0 = R0 | R3;
+#endif
+	call __emu_out;
+.else
+	loadsym P0, _next_location;
+	P1 = [P0];
+	LOAD_PFX[P1++] = R0;
+	LOAD_PFX[P1++] = R3;
+	[P0] = P1;
+.endif
+.endm
diff --git a/sim/testsuite/sim/cris/ChangeLog b/sim/testsuite/sim/cris/ChangeLog
new file mode 100644
index 0000000..4ea54eb
--- /dev/null
+++ b/sim/testsuite/sim/cris/ChangeLog
@@ -0,0 +1,163 @@
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* c/clone5.c: Update output to ignore decoded signal string.
+	* c/fcntl1.c, c/kill2.c, c/kill3.c, c/mprotect1.c, c/pipe5.c,
+	c/readlink5.c, c/rtsigprocmask1.c, c/rtsigsuspend1.c, c/sig10.c,
+	c/sig11.c, c/sig3.c, c/sig4.c, c/sig5.c, c/sig6.c, c/sig7.c,
+	c/sig8.c, c/sigreturn1.c, c/sigreturn2.c, c/syscall1.c,
+	c/syscall2.c, c/syscall3.c, c/syscall4.c, c/sysctl2.c: Likewise.
+
+2012-03-21  Mike Frysinger  <vapier at gentoo.org>
+
+	* asm/addqpc.ms: Update output to ignore decoded signal string.
+	* asm/boundmv32.ms, asm/fidxd.ms, asm/fidxi.ms, asm/ftagd.ms,
+	asm/ftagi.ms, asm/halt.ms, asm/io6.ms, asm/io7.ms, asm/io8.ms,
+	asm/io9.ms, asm/movecpc.ms, asm/movempc.ms, asm/movepcb.ms,
+	asm/movepcd.ms, asm/movepcw.ms, asm/moveqpc.ms, asm/moverbpc.ms,
+	asm/moverdpc.ms, asm/moverpcb.ms, asm/moverpcw.ms, asm/moverwpc.ms,
+	asm/movppc.ms, asm/movrss.ms, asm/movscpc.ms, asm/movsmpc.ms,
+	asm/movsrpc.ms, asm/movssr.ms, asm/movucpc.ms, asm/movumpc.ms,
+	asm/movurpc.ms, asm/msteppc1.ms, asm/msteppc2.ms, asm/msteppc3.ms,
+	asm/rfg.ms, asm/sbfs.ms, asm/subqpc.ms: Likewise.
+
+2010-10-07  Hans-Peter Nilsson  <hp at axis.com>
+
+	* c/seek3.c, c/seek4.c: New tests.
+
+2010-08-24  Hans-Peter Nilsson  <hp at axis.com>
+
+	* asm/nonvcv32.ms: Neutralize changed &&-in-macro gas syntax.
+
+2009-01-18  Hans-Peter Nilsson  <hp at axis.com>
+
+	* asm/opterr5.ms, asm/opterr4.ms,
+	asm/opterr3.ms, asm/bare3.ms: New tests.
+
+2009-01-06  Hans-Peter Nilsson  <hp at axis.com>
+
+	* c/mmap5.c, c/mmap6.c, c/mmap7.c,
+	c/mmap8.c, c/hellodyn3.c: New tests.
+
+2009-01-03  Hans-Peter Nilsson  <hp at axis.com>
+
+	* c/settls1.c: New test.
+	* c/exitg1.c, c/exitg2.c: New tests.
+	* c/uname1.c: New test.
+	* c/mmap1.c (MMAP_FLAGS): Default-define to
+	MAP_PRIVATE and use this macro in the mmap call.
+	* c/mmap4.c: New test.
+	* c/access1.c: New test.
+	* asm/pid1.ms: New test.
+
+2008-12-30  Hans-Peter Nilsson  <hp at axis.com>
+
+	* asm/badarch1.ms: Tweak error message match.
+
+	* asm/badarch1.ms, c/badldso1.c,
+	c/badldso2.c, c/badldso3.c,
+	c/helloaout.c, c/hellodyn.c,
+	c/hellodyn2.c, c/writev1.c,
+	c/writev2.c: New tests.
+	* c/c.exp: If compiler links libc.so when attempting to
+	link dynamically, create symlink named "lib" to the directory
+	where it is found.  Handle new test-case option "dynamic".
+
+	* asm/opterr1.ms, asm/opterr2.ms: Adjust for
+	differences in getopt_long error message quoting.
+
+2007-11-08  Hans-Peter Nilsson  <hp at axis.com>
+
+	* asm/x0-v10.ms, asm/x0-v32.ms: Tweak
+	stack-pointer match pattern for 4K host environment.
+
+2007-10-22  Edgar E. Iglesias <edgar at axis.com>
+	    Hans-Peter Nilsson  <hp at axis.com>
+
+	* asm/testutils.inc (test_move_cc): Add missing call to
+	test_cc.
+	* asm/asr.ms: Correct expected condition code flags.
+	* asm/boundr.ms: Ditto.
+	* asm/dstep.ms: Ditto.
+	* asm/lsr.ms: Ditto.
+	* asm/movecr.ms: Ditto.
+	* asm/mover.ms: Ditto.
+	* asm/neg.ms: Ditto.  Use test_cc, not test_move_cc.
+	* asm/op3.ms: Check the condition code flags after the insn
+	under test.
+	* asm/movecrt10.ms: Update expected number of simulated
+	cycles.
+	* asm/movecrt32.ms: Ditto.
+	* asm/jsr.ms: Don't use local label 8.
+	* asm/nonvcv32.ms: New test.
+
+2007-10-11  Jesper Nilsson  <jesper.nilsson at axis.com>
+
+	* c/freopen2.c: Added testcase.
+
+2006-10-02  Hans-Peter Nilsson  <hp at axis.com>
+	    Edgar E. Iglesias  <edgar at axis.com>
+
+	* c/clone5.c, c/mprotect1.c,
+	c/rtsigprocmask1.c, c/rtsigsuspend1.c,
+	c/sig7.c, c/sigreturn1.c,
+	c/sigreturn2.c, c/syscall1.c,
+	c/syscall2.c, c/sysctl2.c, c/fcntl1.c,
+	c/readlink2.c: Add code to print ENOSYS if syscall being
+	tested returns ENOSYS.  Add early exit where needed.  Change any
+	existing code to print "xyzzy", not "pass".
+	* asm/option3.ms, asm/option4.ms,
+	c/clone6.c, c/fcntl2.c,
+	c/mprotect2.c, c/readlink11.c,
+	c/rtsigprocmask2.c, c/rtsigsuspend2.c,
+	c/sig13.c, c/sigreturn3.c,
+	c/sigreturn4.c, c/syscall3.c,
+	c/syscall4.c, c/syscall5.c,
+	c/syscall6.c, c/syscall7.c,
+	c/syscall8.c, c/sysctl3.c: New tests.
+
+2006-09-30  Hans-Peter Nilsson  <hp at axis.com>
+
+	* c/pipe2.c: Adjust expected output.
+	(process): Don't write as much to the pipe as to trig the
+	inordinate-amount test in the sim pipe machinery.  Correct test of
+	write return-value; check only that pipemax bytes were
+	successfully written.  For error-case, emit strerror as well.
+	(main): Add a second read.
+	
+2006-04-08  Hans-Peter Nilsson  <hp at axis.com>
+
+	* hw/rv-n-cris/irq6.ms: New test.
+
+2006-04-03  Hans-Peter Nilsson  <hp at axis.com>
+
+	* hw: New directory for subdirectories with tests.
+	* hw/rv-n-cris: New directory with tests.
+
+2006-04-02  Hans-Peter Nilsson  <hp at axis.com>
+
+	* asm/testutils.inc (test_h_mem): Use register prefix.
+	(testr_h_dr, test_h_dr, ldmem_h_gr, mvr_h_mem): Ditto.  Correct
+	syntax.
+
+	* asm/x0-v10.ms, asm/x0-v32.ms: Widen regexp for
+	stack pointer values.
+
+2006-02-23  Hans-Peter Nilsson  <hp at axis.com>
+
+	* c/time2.c: New test.
+
+2006-01-10  Hans-Peter Nilsson  <hp at axis.com>
+
+	* asm/x1-v10.ms, asm/x3-v10.ms,
+	asm/x7-v10.ms: Update expected cycle output.
+
+2005-12-06  Hans-Peter Nilsson  <hp at axis.com>
+
+	* asm/movmp8.ms, asm/pcplus.ms: New tests.
+	* asm/movmp.ms: Do not write to P0, P4 or P8.
+	* asm/raw13.ms: Write to MOF instead of WZ (P4).
+
+2005-11-21  Hans-Peter Nilsson  <hp at axis.com>
+
+	* asm, c: New directory with C and assembly tests for the CRIS
+	simulator.
diff --git a/sim/testsuite/sim/cris/asm/addqpc.ms b/sim/testsuite/sim/cris/asm/addqpc.ms
index 13e293e..ba5a1ec 100644
--- a/sim/testsuite/sim/cris/asm/addqpc.ms
+++ b/sim/testsuite/sim/cris/asm/addqpc.ms
@@ -1,6 +1,6 @@
 # mach: crisv3 crisv8 crisv10
 # xerror:
-# output: General register read of PC is not implemented.\nprogram stopped with signal 5.\n
+# output: General register read of PC is not implemented.\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/asm/boundmv32.ms b/sim/testsuite/sim/cris/asm/boundmv32.ms
index 4aad1ef..560276e 100644
--- a/sim/testsuite/sim/cris/asm/boundmv32.ms
+++ b/sim/testsuite/sim/cris/asm/boundmv32.ms
@@ -1,6 +1,6 @@
 # mach: crisv32
 # xerror:
-# output: program stopped with signal 4.\n
+# output: program stopped with signal 4 (*).\n
  .include "testutils.inc"
 
 ; Check that bound with a memory operand is invalid.
diff --git a/sim/testsuite/sim/cris/asm/fidxd.ms b/sim/testsuite/sim/cris/asm/fidxd.ms
index 447e397..8158682 100644
--- a/sim/testsuite/sim/cris/asm/fidxd.ms
+++ b/sim/testsuite/sim/cris/asm/fidxd.ms
@@ -1,6 +1,6 @@
 # mach: crisv32
 # xerror:
-# output: FIDXD isn't implemented\nprogram stopped with signal 5.\n
+# output: FIDXD isn't implemented\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/asm/fidxi.ms b/sim/testsuite/sim/cris/asm/fidxi.ms
index fdee448..1c41ed4 100644
--- a/sim/testsuite/sim/cris/asm/fidxi.ms
+++ b/sim/testsuite/sim/cris/asm/fidxi.ms
@@ -1,6 +1,6 @@
 # mach: crisv32
 # xerror:
-# output: FIDXI isn't implemented\nprogram stopped with signal 5.\n
+# output: FIDXI isn't implemented\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/asm/ftagd.ms b/sim/testsuite/sim/cris/asm/ftagd.ms
index 87c7f13..74d4de3 100644
--- a/sim/testsuite/sim/cris/asm/ftagd.ms
+++ b/sim/testsuite/sim/cris/asm/ftagd.ms
@@ -1,6 +1,6 @@
 # mach: crisv32
 # xerror:
-# output: FTAGD isn't implemented\nprogram stopped with signal 5.\n
+# output: FTAGD isn't implemented\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/asm/ftagi.ms b/sim/testsuite/sim/cris/asm/ftagi.ms
index 5068476..187d22d 100644
--- a/sim/testsuite/sim/cris/asm/ftagi.ms
+++ b/sim/testsuite/sim/cris/asm/ftagi.ms
@@ -1,6 +1,6 @@
 # mach: crisv32
 # xerror:
-# output: FTAGI isn't implemented\nprogram stopped with signal 5.\n
+# output: FTAGI isn't implemented\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/asm/halt.ms b/sim/testsuite/sim/cris/asm/halt.ms
index 368c367..fb4dcb0 100644
--- a/sim/testsuite/sim/cris/asm/halt.ms
+++ b/sim/testsuite/sim/cris/asm/halt.ms
@@ -1,6 +1,6 @@
 # mach: crisv32
 # xerror:
-# output: HALT isn't implemented\nprogram stopped with signal 5.\n
+# output: HALT isn't implemented\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/asm/io6.ms b/sim/testsuite/sim/cris/asm/io6.ms
index 6f3c25d..3af3536 100644
--- a/sim/testsuite/sim/cris/asm/io6.ms
+++ b/sim/testsuite/sim/cris/asm/io6.ms
@@ -4,7 +4,7 @@
 # xerror:
 # output: b1e\n
 # output: core: 4 byte write to unmapped address 0x90000008 at 0x16\n
-# output: program stopped with signal 11.\n
+# output: program stopped with signal 11 (*).\n
 
 ; Check that invalid access to the simulator area is recognized.
 ; "FAIL" area.
diff --git a/sim/testsuite/sim/cris/asm/io7.ms b/sim/testsuite/sim/cris/asm/io7.ms
index 8c8b461..84488e9 100644
--- a/sim/testsuite/sim/cris/asm/io7.ms
+++ b/sim/testsuite/sim/cris/asm/io7.ms
@@ -4,7 +4,7 @@
 # xerror:
 # output: ce11d0c\n
 # output: core: 4 byte write to unmapped address 0x90000004 at 0x16\n
-# output: program stopped with signal 11.\n
+# output: program stopped with signal 11 (*).\n
 
 ; Check that invalid access to the simulator area is recognized.
 ; "PASS" area.
diff --git a/sim/testsuite/sim/cris/asm/io8.ms b/sim/testsuite/sim/cris/asm/io8.ms
index 0ba9287..49163fd 100644
--- a/sim/testsuite/sim/cris/asm/io8.ms
+++ b/sim/testsuite/sim/cris/asm/io8.ms
@@ -3,7 +3,7 @@
 # xerror:
 # output: b1e\n
 # output: core: 4 byte write to unmapped address 0x90000008 at 0x16\n
-# output: program stopped with signal 11.\n
+# output: program stopped with signal 11 (*).\n
 
 ; Check invalid access valid with --cris-900000xx.
 ; "FAIL" area.
diff --git a/sim/testsuite/sim/cris/asm/io9.ms b/sim/testsuite/sim/cris/asm/io9.ms
index afcb591..3b929a3 100644
--- a/sim/testsuite/sim/cris/asm/io9.ms
+++ b/sim/testsuite/sim/cris/asm/io9.ms
@@ -3,7 +3,7 @@
 # xerror:
 # output: ce11d0c\n
 # output: core: 4 byte write to unmapped address 0x90000004 at 0x16\n
-# output: program stopped with signal 11.\n
+# output: program stopped with signal 11 (*).\n
 
 ; Check invalid access valid with --cris-900000xx.
 ; "PASS" area.
diff --git a/sim/testsuite/sim/cris/asm/movecpc.ms b/sim/testsuite/sim/cris/asm/movecpc.ms
index cba1c21..880a0f8 100644
--- a/sim/testsuite/sim/cris/asm/movecpc.ms
+++ b/sim/testsuite/sim/cris/asm/movecpc.ms
@@ -1,6 +1,6 @@
 # mach: crisv3 crisv8 crisv10
 # xerror:
-# output: General register * PC is not implemented.\nprogram stopped with signal 5.\n
+# output: General register * PC is not implemented.\nprogram stopped with signal 5 (*).\n
 
 # We deliberately match both "read from" and "write to" above.
 
diff --git a/sim/testsuite/sim/cris/asm/movempc.ms b/sim/testsuite/sim/cris/asm/movempc.ms
index 1fd1416..cbbfcc1 100644
--- a/sim/testsuite/sim/cris/asm/movempc.ms
+++ b/sim/testsuite/sim/cris/asm/movempc.ms
@@ -1,6 +1,6 @@
 # mach: crisv3 crisv8 crisv10
 # xerror:
-# output: General register write to PC is not implemented.\nprogram stopped with signal 5.\n
+# output: General register write to PC is not implemented.\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/asm/movepcb.ms b/sim/testsuite/sim/cris/asm/movepcb.ms
index 0dcc396..b06932e 100644
--- a/sim/testsuite/sim/cris/asm/movepcb.ms
+++ b/sim/testsuite/sim/cris/asm/movepcb.ms
@@ -1,6 +1,6 @@
 # mach: crisv3 crisv8 crisv10
 # xerror: 
-# output: General register read of PC is not implemented.\nprogram stopped with signal 5.\n
+# output: General register read of PC is not implemented.\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  startnostack
diff --git a/sim/testsuite/sim/cris/asm/movepcd.ms b/sim/testsuite/sim/cris/asm/movepcd.ms
index 240db55..2ed0060 100644
--- a/sim/testsuite/sim/cris/asm/movepcd.ms
+++ b/sim/testsuite/sim/cris/asm/movepcd.ms
@@ -1,6 +1,6 @@
 # mach: crisv3 crisv8 crisv10
 # xerror: 
-# output: General register * PC is not implemented.\nprogram stopped with signal 5.\n
+# output: General register * PC is not implemented.\nprogram stopped with signal 5 (*).\n
 
 # Both source and dest contain PC for "test.d r" (move.d r,r).  Ideally,
 # the output message should say "read" of PC, but we allow PC as source in
diff --git a/sim/testsuite/sim/cris/asm/movepcw.ms b/sim/testsuite/sim/cris/asm/movepcw.ms
index d51b0d9..0f3b6a2 100644
--- a/sim/testsuite/sim/cris/asm/movepcw.ms
+++ b/sim/testsuite/sim/cris/asm/movepcw.ms
@@ -1,6 +1,6 @@
 # mach: crisv3 crisv8 crisv10
 # xerror: 
-# output: General register read of PC is not implemented.\nprogram stopped with signal 5.\n
+# output: General register read of PC is not implemented.\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  startnostack
diff --git a/sim/testsuite/sim/cris/asm/moveqpc.ms b/sim/testsuite/sim/cris/asm/moveqpc.ms
index dea5106..d5e856b 100644
--- a/sim/testsuite/sim/cris/asm/moveqpc.ms
+++ b/sim/testsuite/sim/cris/asm/moveqpc.ms
@@ -1,6 +1,6 @@
 # mach: crisv3 crisv8 crisv10
 # xerror: 
-# output: General register write to PC is not implemented.\nprogram stopped with signal 5.\n
+# output: General register write to PC is not implemented.\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  startnostack
diff --git a/sim/testsuite/sim/cris/asm/moverbpc.ms b/sim/testsuite/sim/cris/asm/moverbpc.ms
index 34a1f3c..b5ea388 100644
--- a/sim/testsuite/sim/cris/asm/moverbpc.ms
+++ b/sim/testsuite/sim/cris/asm/moverbpc.ms
@@ -1,6 +1,6 @@
 # mach: crisv3 crisv8 crisv10
 # xerror: 
-# output: General register write to PC is not implemented.\nprogram stopped with signal 5.\n
+# output: General register write to PC is not implemented.\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  startnostack
diff --git a/sim/testsuite/sim/cris/asm/moverdpc.ms b/sim/testsuite/sim/cris/asm/moverdpc.ms
index 34a1f3c..b5ea388 100644
--- a/sim/testsuite/sim/cris/asm/moverdpc.ms
+++ b/sim/testsuite/sim/cris/asm/moverdpc.ms
@@ -1,6 +1,6 @@
 # mach: crisv3 crisv8 crisv10
 # xerror: 
-# output: General register write to PC is not implemented.\nprogram stopped with signal 5.\n
+# output: General register write to PC is not implemented.\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  startnostack
diff --git a/sim/testsuite/sim/cris/asm/moverpcb.ms b/sim/testsuite/sim/cris/asm/moverpcb.ms
index d95d9da..13e04b1 100644
--- a/sim/testsuite/sim/cris/asm/moverpcb.ms
+++ b/sim/testsuite/sim/cris/asm/moverpcb.ms
@@ -1,6 +1,6 @@
 # mach: crisv3 crisv8 crisv10
 # xerror: 
-# output: General register read of PC is not implemented.\nprogram stopped with signal 5.\n
+# output: General register read of PC is not implemented.\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  startnostack
diff --git a/sim/testsuite/sim/cris/asm/moverpcw.ms b/sim/testsuite/sim/cris/asm/moverpcw.ms
index 88681fb..9b8f929 100644
--- a/sim/testsuite/sim/cris/asm/moverpcw.ms
+++ b/sim/testsuite/sim/cris/asm/moverpcw.ms
@@ -1,6 +1,6 @@
 # mach: crisv3 crisv8 crisv10
 # xerror: 
-# output: General register read of PC is not implemented.\nprogram stopped with signal 5.\n
+# output: General register read of PC is not implemented.\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  startnostack
diff --git a/sim/testsuite/sim/cris/asm/moverwpc.ms b/sim/testsuite/sim/cris/asm/moverwpc.ms
index 34a1f3c..b5ea388 100644
--- a/sim/testsuite/sim/cris/asm/moverwpc.ms
+++ b/sim/testsuite/sim/cris/asm/moverwpc.ms
@@ -1,6 +1,6 @@
 # mach: crisv3 crisv8 crisv10
 # xerror: 
-# output: General register write to PC is not implemented.\nprogram stopped with signal 5.\n
+# output: General register write to PC is not implemented.\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  startnostack
diff --git a/sim/testsuite/sim/cris/asm/movppc.ms b/sim/testsuite/sim/cris/asm/movppc.ms
index e100e25..ee7e8d1 100644
--- a/sim/testsuite/sim/cris/asm/movppc.ms
+++ b/sim/testsuite/sim/cris/asm/movppc.ms
@@ -1,6 +1,6 @@
 # mach: crisv3 crisv8 crisv10
 # xerror:
-# output: General register read of PC is not implemented.\nprogram stopped with signal 5.\n
+# output: General register read of PC is not implemented.\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/asm/movrss.ms b/sim/testsuite/sim/cris/asm/movrss.ms
index 964c161..42305f9 100644
--- a/sim/testsuite/sim/cris/asm/movrss.ms
+++ b/sim/testsuite/sim/cris/asm/movrss.ms
@@ -1,6 +1,6 @@
 # mach: crisv32
 # xerror:
-# output: Write to support register is unimplemented\nprogram stopped with signal 5.\n
+# output: Write to support register is unimplemented\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/asm/movscpc.ms b/sim/testsuite/sim/cris/asm/movscpc.ms
index a753e23..9861896 100644
--- a/sim/testsuite/sim/cris/asm/movscpc.ms
+++ b/sim/testsuite/sim/cris/asm/movscpc.ms
@@ -1,6 +1,6 @@
 # mach: crisv3 crisv8 crisv10
 # xerror:
-# output: General register write to PC is not implemented.\nprogram stopped with signal 5.\n
+# output: General register write to PC is not implemented.\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/asm/movsmpc.ms b/sim/testsuite/sim/cris/asm/movsmpc.ms
index 16d818b..95f40ad 100644
--- a/sim/testsuite/sim/cris/asm/movsmpc.ms
+++ b/sim/testsuite/sim/cris/asm/movsmpc.ms
@@ -1,6 +1,6 @@
 # mach: crisv3 crisv8 crisv10
 # xerror:
-# output: General register write to PC is not implemented.\nprogram stopped with signal 5.\n
+# output: General register write to PC is not implemented.\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/asm/movsrpc.ms b/sim/testsuite/sim/cris/asm/movsrpc.ms
index fccf31a..6971e37 100644
--- a/sim/testsuite/sim/cris/asm/movsrpc.ms
+++ b/sim/testsuite/sim/cris/asm/movsrpc.ms
@@ -1,6 +1,6 @@
 # mach: crisv3 crisv8 crisv10
 # xerror: 
-# output: General register write to PC is not implemented.\nprogram stopped with signal 5.\n
+# output: General register write to PC is not implemented.\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/asm/movssr.ms b/sim/testsuite/sim/cris/asm/movssr.ms
index 62663c1..79e4fbd 100644
--- a/sim/testsuite/sim/cris/asm/movssr.ms
+++ b/sim/testsuite/sim/cris/asm/movssr.ms
@@ -1,6 +1,6 @@
 # mach: crisv32
 # xerror:
-# output: Read of support register is unimplemented\nprogram stopped with signal 5.\n
+# output: Read of support register is unimplemented\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/asm/movucpc.ms b/sim/testsuite/sim/cris/asm/movucpc.ms
index 91fe4de..aec82d1 100644
--- a/sim/testsuite/sim/cris/asm/movucpc.ms
+++ b/sim/testsuite/sim/cris/asm/movucpc.ms
@@ -1,6 +1,6 @@
 # mach: crisv3 crisv8 crisv10
 # xerror:
-# output: General register write to PC is not implemented.\nprogram stopped with signal 5.\n
+# output: General register write to PC is not implemented.\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/asm/movumpc.ms b/sim/testsuite/sim/cris/asm/movumpc.ms
index eecddf2..9bfc492 100644
--- a/sim/testsuite/sim/cris/asm/movumpc.ms
+++ b/sim/testsuite/sim/cris/asm/movumpc.ms
@@ -1,6 +1,6 @@
 # mach: crisv3 crisv8 crisv10
 # xerror:
-# output: General register write to PC is not implemented.\nprogram stopped with signal 5.\n
+# output: General register write to PC is not implemented.\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/asm/movurpc.ms b/sim/testsuite/sim/cris/asm/movurpc.ms
index a90c492..3d75110 100644
--- a/sim/testsuite/sim/cris/asm/movurpc.ms
+++ b/sim/testsuite/sim/cris/asm/movurpc.ms
@@ -1,6 +1,6 @@
 # mach: crisv3 crisv8 crisv10
 # xerror: 
-# output: General register write to PC is not implemented.\nprogram stopped with signal 5.\n
+# output: General register write to PC is not implemented.\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/asm/msteppc1.ms b/sim/testsuite/sim/cris/asm/msteppc1.ms
index 5c78e0b..d21ffd7 100644
--- a/sim/testsuite/sim/cris/asm/msteppc1.ms
+++ b/sim/testsuite/sim/cris/asm/msteppc1.ms
@@ -1,7 +1,7 @@
 # mach: crisv3 crisv8 crisv10
 # xerror:
 # output: General register read of PC is not implemented.\n
-# output: program stopped with signal 5.\n
+# output: program stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/asm/msteppc2.ms b/sim/testsuite/sim/cris/asm/msteppc2.ms
index e78be45..69bfbaf 100644
--- a/sim/testsuite/sim/cris/asm/msteppc2.ms
+++ b/sim/testsuite/sim/cris/asm/msteppc2.ms
@@ -1,7 +1,7 @@
 # mach: crisv3 crisv8 crisv10
 # xerror:
 # output: General register read of PC is not implemented.\n
-# output: program stopped with signal 5.\n
+# output: program stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/asm/msteppc3.ms b/sim/testsuite/sim/cris/asm/msteppc3.ms
index 9e6d301..09e87a3 100644
--- a/sim/testsuite/sim/cris/asm/msteppc3.ms
+++ b/sim/testsuite/sim/cris/asm/msteppc3.ms
@@ -1,7 +1,7 @@
 # mach: crisv3 crisv8 crisv10
 # xerror:
 # output: General register read of PC is not implemented.\n
-# output: program stopped with signal 5.\n
+# output: program stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/asm/rfg.ms b/sim/testsuite/sim/cris/asm/rfg.ms
index f5439ed..aa664b2 100644
--- a/sim/testsuite/sim/cris/asm/rfg.ms
+++ b/sim/testsuite/sim/cris/asm/rfg.ms
@@ -1,6 +1,6 @@
 # mach: crisv32
 # xerror:
-# output: RFG isn't implemented\nprogram stopped with signal 5.\n
+# output: RFG isn't implemented\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/asm/sbfs.ms b/sim/testsuite/sim/cris/asm/sbfs.ms
index 1138e69..5714b52 100644
--- a/sim/testsuite/sim/cris/asm/sbfs.ms
+++ b/sim/testsuite/sim/cris/asm/sbfs.ms
@@ -1,6 +1,6 @@
 # mach: crisv10
 # xerror:
-# output: SBFS isn't implemented\nprogram stopped with signal 5.\n
+# output: SBFS isn't implemented\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/asm/subqpc.ms b/sim/testsuite/sim/cris/asm/subqpc.ms
index dd4d2bf..e2679a3 100644
--- a/sim/testsuite/sim/cris/asm/subqpc.ms
+++ b/sim/testsuite/sim/cris/asm/subqpc.ms
@@ -1,6 +1,6 @@
 # mach: crisv3 crisv8 crisv10
 # xerror:
-# output: General register read of PC is not implemented.\nprogram stopped with signal 5.\n
+# output: General register read of PC is not implemented.\nprogram stopped with signal 5 (*).\n
 
  .include "testutils.inc"
  start
diff --git a/sim/testsuite/sim/cris/c/clone5.c b/sim/testsuite/sim/cris/c/clone5.c
index 3444b56..9380a1e 100644
--- a/sim/testsuite/sim/cris/c/clone5.c
+++ b/sim/testsuite/sim/cris/c/clone5.c
@@ -2,7 +2,7 @@
 #notarget: cris*-*-elf
 #xerror:
 #output: Unimplemented clone syscall *
-#output: program stopped with signal 4.\n
+#output: program stopped with signal 4 (*).\n
 */
 
 #include <stddef.h>
diff --git a/sim/testsuite/sim/cris/c/fcntl1.c b/sim/testsuite/sim/cris/c/fcntl1.c
index 184fd64..032f6b5 100644
--- a/sim/testsuite/sim/cris/c/fcntl1.c
+++ b/sim/testsuite/sim/cris/c/fcntl1.c
@@ -2,7 +2,7 @@
 #notarget: cris*-*-elf
 #xerror:
 #output: Unimplemented fcntl*
-#output: program stopped with signal 4.\n
+#output: program stopped with signal 4 (*).\n
 */
 #include <fcntl.h>
 #include <stdio.h>
diff --git a/sim/testsuite/sim/cris/c/kill2.c b/sim/testsuite/sim/cris/c/kill2.c
index 183091c..6b064e7 100644
--- a/sim/testsuite/sim/cris/c/kill2.c
+++ b/sim/testsuite/sim/cris/c/kill2.c
@@ -1,6 +1,6 @@
 /* Basic kill functionality test; suicide.
 #xerror:
-#output: program stopped with signal 6.\n
+#output: program stopped with signal 6 (*).\n
 */
 
 #include <stdio.h>
diff --git a/sim/testsuite/sim/cris/c/kill3.c b/sim/testsuite/sim/cris/c/kill3.c
index b70f3d3..c0e2179 100644
--- a/sim/testsuite/sim/cris/c/kill3.c
+++ b/sim/testsuite/sim/cris/c/kill3.c
@@ -1,6 +1,6 @@
 /* Basic kill functionality test; suicide.
 #xerror:
-#output: program stopped with signal 6.\n
+#output: program stopped with signal 6 (*).\n
 */
 
 #include <stdio.h>
diff --git a/sim/testsuite/sim/cris/c/mprotect1.c b/sim/testsuite/sim/cris/c/mprotect1.c
index 01d9519..8dae50b 100644
--- a/sim/testsuite/sim/cris/c/mprotect1.c
+++ b/sim/testsuite/sim/cris/c/mprotect1.c
@@ -2,7 +2,7 @@
 #notarget: cris*-*-elf
 #xerror:
 #output: Unimplemented mprotect call (0x0, 0x2001, 0x4)\n
-#output: program stopped with signal 4.\n
+#output: program stopped with signal 4 (*).\n
  */
 #include <stdlib.h>
 #include <stdio.h>
diff --git a/sim/testsuite/sim/cris/c/pipe5.c b/sim/testsuite/sim/cris/c/pipe5.c
index abf1c9f..2b4d763 100644
--- a/sim/testsuite/sim/cris/c/pipe5.c
+++ b/sim/testsuite/sim/cris/c/pipe5.c
@@ -2,7 +2,7 @@
 #notarget: cris*-*-elf
 #xerror:
 #output: Terminating simulation due to writing pipe * from one single thread\n
-#output: program stopped with signal 4.\n
+#output: program stopped with signal 4 (*).\n
 */
 #include <stddef.h>
 #include <signal.h>
diff --git a/sim/testsuite/sim/cris/c/readlink5.c b/sim/testsuite/sim/cris/c/readlink5.c
index 11de348..80f20da 100644
--- a/sim/testsuite/sim/cris/c/readlink5.c
+++ b/sim/testsuite/sim/cris/c/readlink5.c
@@ -3,6 +3,6 @@
 #dest: ./readlink5.c.x
 #xerror:
 #output: Unimplemented readlink syscall (*)\n
-#output: program stopped with signal 4.\n
+#output: program stopped with signal 4 (*).\n
 */
 #include "readlink2.c"
diff --git a/sim/testsuite/sim/cris/c/rtsigprocmask1.c b/sim/testsuite/sim/cris/c/rtsigprocmask1.c
index 7cc7c5c..b76c338 100644
--- a/sim/testsuite/sim/cris/c/rtsigprocmask1.c
+++ b/sim/testsuite/sim/cris/c/rtsigprocmask1.c
@@ -3,7 +3,7 @@
 #cc: additional_flags=-pthread
 #xerror:
 #output: Unimplemented rt_sigprocmask syscall (0x3, 0x0, 0x3dff*\n
-#output: program stopped with signal 4.\n
+#output: program stopped with signal 4 (*).\n
 
    Testing a signal handler corner case.  */
 
diff --git a/sim/testsuite/sim/cris/c/rtsigsuspend1.c b/sim/testsuite/sim/cris/c/rtsigsuspend1.c
index 0e00cc1..66ca795 100644
--- a/sim/testsuite/sim/cris/c/rtsigsuspend1.c
+++ b/sim/testsuite/sim/cris/c/rtsigsuspend1.c
@@ -2,7 +2,7 @@
 #notarget: cris*-*-elf
 #xerror:
 #output: Unimplemented rt_sigsuspend syscall arguments (0x1, 0x2)\n
-#output: program stopped with signal 4.\n
+#output: program stopped with signal 4 (*).\n
 */
 
 #include <unistd.h>
diff --git a/sim/testsuite/sim/cris/c/sig10.c b/sim/testsuite/sim/cris/c/sig10.c
index d926308..ef54832 100644
--- a/sim/testsuite/sim/cris/c/sig10.c
+++ b/sim/testsuite/sim/cris/c/sig10.c
@@ -3,7 +3,7 @@
 #cc: additional_flags=-pthread
 #xerror:
 #output: Exiting pid 42 due to signal 9\n
-#output: program stopped with signal 4.\n
+#output: program stopped with signal 4 (*).\n
 */
 
 #include <stdlib.h>
diff --git a/sim/testsuite/sim/cris/c/sig11.c b/sim/testsuite/sim/cris/c/sig11.c
index 1661f9b..9c8aad7 100644
--- a/sim/testsuite/sim/cris/c/sig11.c
+++ b/sim/testsuite/sim/cris/c/sig11.c
@@ -3,7 +3,7 @@
 #cc: additional_flags=-pthread
 #xerror:
 #output: Unimplemented signal: 77\n
-#output: program stopped with signal 4.\n
+#output: program stopped with signal 4 (*).\n
 */
 
 #include <stdlib.h>
diff --git a/sim/testsuite/sim/cris/c/sig3.c b/sim/testsuite/sim/cris/c/sig3.c
index f613729..91de227 100644
--- a/sim/testsuite/sim/cris/c/sig3.c
+++ b/sim/testsuite/sim/cris/c/sig3.c
@@ -1,6 +1,6 @@
 /* Check that TRT happens at an abort (3) call, single thread.
 #xerror:
-#output: program stopped with signal 6.\n
+#output: program stopped with signal 6 (*).\n
 */
 
 #include <stdlib.h>
diff --git a/sim/testsuite/sim/cris/c/sig4.c b/sim/testsuite/sim/cris/c/sig4.c
index 6d7ec0e..57491f8 100644
--- a/sim/testsuite/sim/cris/c/sig4.c
+++ b/sim/testsuite/sim/cris/c/sig4.c
@@ -3,7 +3,7 @@
 #cc: additional_flags=-pthread
 #xerror:
 #output: Exiting pid 42 due to signal 6\n
-#output: program stopped with signal 6.\n
+#output: program stopped with signal 6 (*).\n
 */
 
 #include <stdlib.h>
diff --git a/sim/testsuite/sim/cris/c/sig5.c b/sim/testsuite/sim/cris/c/sig5.c
index 674621e..2748aa5 100644
--- a/sim/testsuite/sim/cris/c/sig5.c
+++ b/sim/testsuite/sim/cris/c/sig5.c
@@ -1,7 +1,7 @@
 /* Check that TRT happens for an uncaught non-abort signal, single thread.
 #xerror:
 #output: Unimplemented signal: 7\n
-#output: program stopped with signal 4.\n
+#output: program stopped with signal 4 (*).\n
 */
 
 #include <stdlib.h>
diff --git a/sim/testsuite/sim/cris/c/sig6.c b/sim/testsuite/sim/cris/c/sig6.c
index 3862cf2..a1f5720 100644
--- a/sim/testsuite/sim/cris/c/sig6.c
+++ b/sim/testsuite/sim/cris/c/sig6.c
@@ -3,7 +3,7 @@
 #cc: additional_flags=-pthread
 #xerror:
 #output: Exiting pid 42 due to signal 7\n
-#output: program stopped with signal 4.\n
+#output: program stopped with signal 4 (*).\n
 */
 
 #include <stdlib.h>
diff --git a/sim/testsuite/sim/cris/c/sig7.c b/sim/testsuite/sim/cris/c/sig7.c
index 0991ff0..b04f7c8 100644
--- a/sim/testsuite/sim/cris/c/sig7.c
+++ b/sim/testsuite/sim/cris/c/sig7.c
@@ -2,7 +2,7 @@
 #notarget: cris*-*-elf
 #xerror:
 #output: Unimplemented rt_sigaction syscall (0x8, 0x3df*\n
-#output: program stopped with signal 4.\n
+#output: program stopped with signal 4 (*).\n
 */
 #include <stdio.h>
 #include <signal.h>
diff --git a/sim/testsuite/sim/cris/c/sig8.c b/sim/testsuite/sim/cris/c/sig8.c
index 8a52b21..889892f 100644
--- a/sim/testsuite/sim/cris/c/sig8.c
+++ b/sim/testsuite/sim/cris/c/sig8.c
@@ -1,7 +1,7 @@
 /* Check that TRT happens for an ignored catchable signal, single thread.
 #xerror:
 #output: Unimplemented signal: 14\n
-#output: program stopped with signal 4.\n
+#output: program stopped with signal 4 (*).\n
 
    Sure, it'd probably be better to support signals in single-thread too,
    but that's on an as-need basis, and I don't have a need for it yet.  */
diff --git a/sim/testsuite/sim/cris/c/sigreturn1.c b/sim/testsuite/sim/cris/c/sigreturn1.c
index 09989f5..40fc852 100644
--- a/sim/testsuite/sim/cris/c/sigreturn1.c
+++ b/sim/testsuite/sim/cris/c/sigreturn1.c
@@ -2,7 +2,7 @@
 #notarget: cris*-*-elf
 #xerror:
 #output: Invalid sigreturn syscall: no signal handler active (0x1, 0x2, 0x3, 0x4, 0x5, 0x6)\n
-#output: program stopped with signal 4.\n
+#output: program stopped with signal 4 (*).\n
 */
 
 #include <unistd.h>
diff --git a/sim/testsuite/sim/cris/c/sigreturn2.c b/sim/testsuite/sim/cris/c/sigreturn2.c
index d0305cb..3848b5f 100644
--- a/sim/testsuite/sim/cris/c/sigreturn2.c
+++ b/sim/testsuite/sim/cris/c/sigreturn2.c
@@ -3,7 +3,7 @@
 #cc: additional_flags=-pthread
 #xerror:
 #output: Invalid sigreturn syscall: no signal handler active (0x1, 0x2, 0x3, 0x4, 0x5, 0x6)\n
-#output: program stopped with signal 4.\n
+#output: program stopped with signal 4 (*).\n
 */
 
 #include <stdlib.h>
diff --git a/sim/testsuite/sim/cris/c/syscall1.c b/sim/testsuite/sim/cris/c/syscall1.c
index 150f297..84aacb6 100644
--- a/sim/testsuite/sim/cris/c/syscall1.c
+++ b/sim/testsuite/sim/cris/c/syscall1.c
@@ -2,7 +2,7 @@
 #notarget: cris*-*-elf
 #xerror:
 #output: Unimplemented syscall: 166 (0x1, 0x2, 0x3, 0x4, 0x5, 0x6)\n
-#output: program stopped with signal 4.\n
+#output: program stopped with signal 4 (*).\n
 */
 
 #include <unistd.h>
diff --git a/sim/testsuite/sim/cris/c/syscall2.c b/sim/testsuite/sim/cris/c/syscall2.c
index 43462ec..b4dbead 100644
--- a/sim/testsuite/sim/cris/c/syscall2.c
+++ b/sim/testsuite/sim/cris/c/syscall2.c
@@ -2,7 +2,7 @@
 #notarget: cris*-*-elf
 #xerror:
 #output: Unimplemented syscall: 0 (0x3, 0x2, 0x1, 0x4, 0x6, 0x5)\n
-#output: program stopped with signal 4.\n
+#output: program stopped with signal 4 (*).\n
 */
 
 #include <unistd.h>
diff --git a/sim/testsuite/sim/cris/c/syscall3.c b/sim/testsuite/sim/cris/c/syscall3.c
index 9ba9635..f4d02eb 100644
--- a/sim/testsuite/sim/cris/c/syscall3.c
+++ b/sim/testsuite/sim/cris/c/syscall3.c
@@ -3,7 +3,7 @@
 #sim: --cris-unknown-syscall=stop
 #xerror:
 #output: Unimplemented syscall: 166 (0x1, 0x2, 0x3, 0x4, 0x5, 0x6)\n
-#output: program stopped with signal 4.\n
+#output: program stopped with signal 4 (*).\n
 */
 
 #include "syscall1.c"
diff --git a/sim/testsuite/sim/cris/c/syscall4.c b/sim/testsuite/sim/cris/c/syscall4.c
index 757099f..ba01cfd 100644
--- a/sim/testsuite/sim/cris/c/syscall4.c
+++ b/sim/testsuite/sim/cris/c/syscall4.c
@@ -3,7 +3,7 @@
 #sim: --cris-unknown-syscall=stop
 #xerror:
 #output: Unimplemented syscall: 0 (0x3, 0x2, 0x1, 0x4, 0x6, 0x5)\n
-#output: program stopped with signal 4.\n
+#output: program stopped with signal 4 (*).\n
 */
 
 #include "syscall2.c"
diff --git a/sim/testsuite/sim/cris/c/sysctl2.c b/sim/testsuite/sim/cris/c/sysctl2.c
index b6752a8..f27c37c 100644
--- a/sim/testsuite/sim/cris/c/sysctl2.c
+++ b/sim/testsuite/sim/cris/c/sysctl2.c
@@ -1,7 +1,7 @@
 /* Check error message for invalid sysctl call.
 #xerror:
 #output: Unimplemented _sysctl syscall *\n
-#output: program stopped with signal 4.\n
+#output: program stopped with signal 4 (*).\n
 #notarget: cris*-*-elf
 */
 
diff --git a/sim/testsuite/sim/fr30/ChangeLog b/sim/testsuite/sim/fr30/ChangeLog
new file mode 100644
index 0000000..f09850d
--- /dev/null
+++ b/sim/testsuite/sim/fr30/ChangeLog
@@ -0,0 +1,112 @@
+Mon Mar 22 13:28:56 1999  Dave Brolley  <brolley at cygnus.com>
+
+	* stb.cgs: Correct for unaligned access.
+	* sth.cgs: Correct for unaligned access.
+	* ldub.cgs: Fix typo: lduh->ldub. Correct
+	for unaligned access.
+	* and.cgs: Test unaligned access.
+
+1999-01-05  Doug Evans  <devans at casey.cygnus.com>
+
+	* allinsn.exp: Set all_machs.
+	* misc.exp: Likewise.
+
+Fri Dec 18 17:19:34 1998  Dave Brolley  <brolley at cygnus.com>
+
+	* ldres.cgs: New testcase.
+	* copld.cgs: New testcase.
+	* copst.cgs: New testcase.
+	* copsv.cgs: New testcase.
+	* nop.cgs: New testcase.
+	* andccr.cgs: New testcase.
+	* orccr.cgs: New testcase.
+	* addsp.cgs: New testcase.
+	* stilm.cgs: New testcase.
+	* extsb.cgs: New testcase.
+	* extub.cgs: New testcase.
+	* extsh.cgs: New testcase.
+	* extuh.cgs: New testcase.
+	* enter.cgs: New testcase.
+	* leave.cgs: New testcase.
+	* xchb.cgs: New testcase.
+	* dmovb.cgs: New testcase.
+	* dmov.cgs: New testcase.
+	* dmovh.cgs: New testcase.
+
+Thu Dec 17 17:18:43 1998  Dave Brolley  <brolley at cygnus.com>
+
+	* testutils.inc (take_branch{_d},no_branch{_d}): New macros.
+	* ret.cgs: Add tests fir ret:d.
+	* inte.cgs: New testcase.
+	* reti.cgs: New testcase.
+	* bra.cgs: New testcase.
+	* bno.cgs: New testcase.
+	* beq.cgs: New testcase.
+	* bne.cgs: New testcase.
+	* bc.cgs: New testcase.
+	* bnc.cgs: New testcase.
+	* bn.cgs: New testcase.
+	* bp.cgs: New testcase.
+	* bv.cgs: New testcase.
+	* bnv.cgs: New testcase.
+	* blt.cgs: New testcase.
+	* bge.cgs: New testcase.
+	* ble.cgs: New testcase.
+	* bgt.cgs: New testcase.
+	* bls.cgs: New testcase.
+	* bhi.cgs: New testcase.
+
+Tue Dec 15 17:47:13 1998  Dave Brolley  <brolley at cygnus.com>
+
+	* div.cgs (int): Add signed division scenario.
+	* int.cgs (int): Complete testcase.
+	* testutils.inc (_start): Initialize tbr.
+	(test_s_user,test_s_system,set_i,test_i): New macros.
+
+1998-12-14  Doug Evans  <devans at casey.cygnus.com>
+
+	* hello.ms: Add trailing \n to expected output.
+
+1998-12-14  Dave Brolley  <brolley at cygnus.com>
+
+	* call.cgs: Test ret here as well.
+	* ld.cgs: Remove bogus comment.
+	* testutils.inc (save_rp,restore_rp): New macros.
+	* div.ms: New testcase.
+	* st.cgs: New testcase.
+	* sth.cgs: New testcase.
+	* stb.cgs: New testcase.
+	* mov.cgs: New testcase.
+	* jmp.cgs: New testcase.
+	* ret.cgs: New testcase.
+	* int.cgs: New testcase.
+
+Thu Dec 10 18:46:25 1998  Dave Brolley  <brolley at cygnus.com>
+
+	* div0s.cgs: New testcase.
+	* div0u.cgs: New testcase.
+	* div1.cgs: New testcase.
+	* div2.cgs: New testcase.
+	* div3.cgs: New testcase.
+	* div4s.cgs: New testcase.
+	* testutils.inc (mvi_h_dr,set_dbits,test_dbits): New Macros.
+
+Tue Dec  8 13:16:53 1998  Dave Brolley  <brolley at cygnus.com>
+
+	* testutils.inc (set_s_user): Correct Mask.
+	(set_s_system): Correct Mask.
+	* ld.cgs (ld): Move previously failing test back
+	into place.
+	* ldm0.cgs: New testcase.
+	* ldm1.cgs: New testcase.
+	* stm0.cgs: New testcase.
+	* stm1.cgs: New testcase.
+
+Thu Dec  3 14:20:03 1998  Dave Brolley  <brolley at cygnus.com>
+
+	* ld.cgs: Implement more loads.
+	* call.cgs: New testcase.
+	* testutils.inc (testr_h_dr): New macro.
+	(set_s_user,set_s_system): New macros.
+
+	* .: New Directory.
diff --git a/sim/testsuite/sim/frv/ChangeLog b/sim/testsuite/sim/frv/ChangeLog
new file mode 100644
index 0000000..75b7b54
--- /dev/null
+++ b/sim/testsuite/sim/frv/ChangeLog
@@ -0,0 +1,76 @@
+2004-03-01  Richard Sandiford  <rsandifo at redhat.com>
+
+	* allinsn.exp (all_machs): Add fr405 and fr450.
+	* fr400/allinsn.exp (all_machs): Likewise.
+	* fr400/addss.cgs (mach): Change to "fr405 fr450".
+	* fr400/scutss.cgs (mach): Likewise.
+	* fr400/slass.cgs (mach): Likewise.
+	* fr400/smass.cgs (mach): Likewise.
+	* fr400/smsss.cgs (mach): Likewise.
+	* fr400/smu.cgs (mach): Likewise.
+	* fr400/subss.cgs (mach): Likewise.
+	* interrupts/fp_exception.cgs: Replace fmadds with .word.
+	* interrupts/fp_exception-fr550.cgs: Likewise.
+	* mqlclrhs.cgs: New test.
+	* mqlmths.cgs: New test.
+	* mqsllhi.cgs: New test.
+	* mqsrahi.cgs: New test.
+
+2004-03-01  Richard Sandiford  <rsandifo at redhat.com>
+
+	* fr400/scutss.cgs: Fix tests to account for rounding.
+	Add some new ones.
+
+2004-03-01  Richard Sandiford  <rsandifo at redhat.com>
+
+	* {rstb,rsth,rst,rstd,rstq}.cgs: Delete.
+	* {rstbf,rsthf,rstf,rstdf,rstqf}.cgs: Delete.
+
+2003-10-10  Dave Brolley  <brolley at redhat.com>
+
+	* testutils.inc (or_gr_immed): New macro.
+	* fp_exception-fr550.cgs: Write insns using
+	unaligned registers into the program in order to
+	cause the required exceptions.
+	* fp_exception.cgs: Ditto.
+	* regalign.cgs: Ditto.
+
+2003-10-06  Dave Brolley  <brolley at redhat.com>
+
+	* fr550: New subdirectory.
+	* fr400/*.cgs: Add fr550 as appropriate.
+	* fr500/*.cgs: Add fr550 as appropriate.
+	* interrupts/*.cgs: Add fr550 as appropriate.
+	* interrupts/*-fr550.cgs: New test cases for fr550.
+
+2003-09-19  Michael Snyder  <msnyder at redhat.com>
+
+	* nldqi.cgs: Remove.  This insn was never implemented
+	by Fujitsu.
+
+2003-09-19  Dave Brolley  <brolley at redhat.com>
+
+	* rstqf.cgs: Use nldq instead of nldqi.
+	* rstq.cgs: Use nldq instead of nldqi.
+
+2003-09-11  Michael Snyder  <msnyder at redhat.com>
+
+	* movgs.cgs: Change lcr to spr[273],
+	which according to the comments seems to be the intent.
+
+2003-09-09  Dave Brolley  <brolley at redhat.com>
+
+	* maddaccs.cgs: move to fr400 subdirectory.
+	* msubaccs.cgs: move to fr400 subdirectory.
+	* masaccs.cgs: move to fr400 subdirectory.
+
+2003-09-03  Michael Snyder  <msnyder at redhat.com>
+
+	* fr500/mclracc.cgs: Change mach to 'all', to be
+	consistent with other tests in the directory.
+
+2003-09-03  Michael Snyder  <msnyder at redhat.com>
+
+	* interrupts/Ipipe-fr400.cgs: New file.
+	* interrupts/Ipipe-fr500.cgs: New file.
+	* interrupts/Ipipe.cgs: Remove (replaced by above).
diff --git a/sim/testsuite/sim/m32r/ChangeLog b/sim/testsuite/sim/m32r/ChangeLog
new file mode 100644
index 0000000..f49908f
--- /dev/null
+++ b/sim/testsuite/sim/m32r/ChangeLog
@@ -0,0 +1,122 @@
+1999-04-21  Doug Evans  <devans at casey.cygnus.com>
+
+	* nop.cgs: Add missing nop insn.
+
+1999-01-05  Doug Evans  <devans at casey.cygnus.com>
+
+	* allinsn.exp: Set all_machs.
+	* misc.exp: Likewise.
+
+1998-12-14  Doug Evans  <devans at casey.cygnus.com>
+
+	* hello.ms: Add trailing \n to expected output.
+	* hw-trap.ms: Ditto.
+
+	* trap.cgs: Properly align trap2_handler.
+
+	* uread16.ms: New testcase.
+	* uread32.ms: New testcase.
+	* uwrite16.ms: New testcase.
+	* uwrite32.ms: New testcase.
+
+Tue Sep 15 14:56:22 1998  Doug Evans  <devans at canuck.cygnus.com>
+
+	* testutils.inc (test_h_gr): Use mvaddr_h_gr.
+	* rte.cgs: Test bbpc,bbpsw.
+	* trap.cgs: Test bbpc,bbpsw.
+
+Wed Jul  1 15:57:54 1998  Doug Evans  <devans at seba.cygnus.com>
+
+	* hw-trap.ms: New testcase.
+
+Wed Jun 10 10:53:20 1998  Doug Evans  <devans at seba.cygnus.com>
+
+	* addx.cgs: Add another test.
+	* jmp.cgs: Add another test.
+
+Mon Jun  8 16:08:27 1998  Doug Evans  <devans at canuck.cygnus.com>
+
+	* trap.cgs: Test trap 2.
+
+Tue Apr 21 10:49:03 1998  Doug Evans  <devans at canuck.cygnus.com>
+
+	* addx.cgs: Test (-1)+(-1)+1.
+
+Fri Apr 17 16:00:52 1998  Doug Evans  <devans at canuck.cygnus.com>
+
+	* mv[ft]achi.cgs: Fix expected result
+	(sign extension of top 8 bits).
+
+Fri Feb 20 11:00:02 1998  Nick Clifton  <nickc at cygnus.com>
+
+	* unlock.cgs: Fixed test.
+	* mvfc.cgs: Fixed test.
+	* remu.cgs: Fixed test.
+	* bnc24.cgs: Test long BNC instruction.
+	* bnc8.cgs: Test short BNC instruction.
+	* ld-plus.cgs: Test LD instruction.
+	* macwhi.cgs: Test MACWHI instruction.
+	* macwlo.cgs: Test MACWLO instruction.
+	* mulwhi.cgs: Test MULWHI instruction.
+	* mulwlo.cgs: Test MULWLO instruction.
+	* mvfachi.cgs: Test MVFACHI instruction.
+	* mvfaclo.cgs: Test MVFACLO instruction.
+	* mvtaclo.cgs: Test MVTACLO instruction.
+	* addv.cgs: Test ADDV instruction.
+	* addv3.cgs: Test ADDV3 instruction.
+	* addx.cgs: Test ADDX instruction.
+	* lock.cgs: Test LOCK instruction.
+	* neg.cgs: Test NEG instruction.
+	* not.cgs: Test NOT instruction.
+	* unlock.cgs: Test UNLOCK instruction.
+
+Thu Feb 19 11:15:45 1998  Nick Clifton  <nickc at cygnus.com>
+
+	* testutils.inc (mvaddr_h_gr): new macro to load an
+	address into a general register.
+
+	* or3.cgs: Test OR3 instruction.
+	* rach.cgs: Test RACH instruction.
+	* rem.cgs: Test REM instruction.
+	* sub.cgs: Test SUB instruction.
+	* mv.cgs: Test MV instruction.
+	* mul.cgs: Test MUL instruction.
+	* bl24.cgs: Test long BL instruction.
+	* bl8.cgs: Test short BL instruction.
+	* blez.cgs: Test BLEZ instruction.
+	* bltz.cgs: Test BLTZ instruction.
+	* bne.cgs: Test BNE instruction.
+	* bnez.cgs: Test BNEZ instruction.
+	* bra24.cgs: Test long BRA instruction.
+	* bra8.cgs: Test short BRA instruction.
+	* jl.cgs: Test JL instruction.
+	* or.cgs: Test OR instruction.
+	* jmp.cgs: Test JMP instruction.
+	* and.cgs: Test AND instruction.
+	* and3.cgs: Test AND3 instruction.
+	* beq.cgs: Test BEQ instruction.
+	* beqz.cgs: Test BEQZ instruction.
+	* bgez.cgs: Test BGEZ instruction.
+	* bgtz.cgs: Test BGTZ instruction.
+	* cmp.cgs: Test CMP instruction.
+	* cmpi.cgs: Test CMPI instruction.
+	* cmpu.cgs: Test CMPU instruction.
+	* cmpui.cgs: Test CMPUI instruction.
+	* div.cgs: Test DIV instruction.
+	* divu.cgs: Test DIVU instruction.
+	* cmpeq.cgs: Test CMPEQ instruction.
+	* sll.cgs: Test SLL instruction.
+	* sll3.cgs: Test SLL3 instruction.
+	* slli.cgs: Test SLLI instruction.
+	* sra.cgs: Test SRA instruction.
+	* sra3.cgs: Test SRA3 instruction.
+	* srai.cgs: Test SRAI instruction.
+	* srl.cgs: Test SRL instruction.
+	* srl3.cgs: Test SRL3 instruction.
+	* srli.cgs: Test SRLI instruction.
+	* xor3.cgs: Test XOR3 instruction.
+	* xor.cgs: Test XOR instruction.
+
+Tue Feb 17 12:46:05 1998  Doug Evans  <devans at seba.cygnus.com>
+
+	* *: m32r dejagnu simulator testsuite.
diff --git a/sim/testsuite/sim/v850/ChangeLog b/sim/testsuite/sim/v850/ChangeLog
new file mode 100644
index 0000000..2508dfd
--- /dev/null
+++ b/sim/testsuite/sim/v850/ChangeLog
@@ -0,0 +1,19 @@
+2008-02-05  DJ Delorie  <dj at redhat.com>
+
+	* .: New directory.
+	* allinsns.exp: New.
+	* bsh.cgs: New.
+	* div.cgs: New.
+	* divh.cgs: New.
+	* divh_3.cgs: New.
+	* divhu.cgs: New.
+	* divu.cgs: New.
+	* sar.cgs: New.
+	* satadd.cgs: New.
+	* satsub.cgs: New.
+	* satsubi.cgs: New.
+	* satsubr.cgs: New.
+	* shl.cgs: New.
+	* shr.cgs: New.
+	* testutils.cgs: New.
+	* testutils.inc: New.
diff --git a/sim/v850/ChangeLog b/sim/v850/ChangeLog
index 1070395..5c4f25d 100644
--- a/sim/v850/ChangeLog
+++ b/sim/v850/ChangeLog
@@ -1,3 +1,66 @@
+2012-06-15  Joel Brobecker  <brobecker at adacore.com>
+
+	* config.in, configure: Regenerate.
+
+2012-03-28  Rathish C  <rathish.c at kpitcummins.com>
+
+	* sim-main.h (struct _v850_regs): Add new fields mpu0_sregs,
+	mpu1_sregs, and fpu_sregs.
+	(MPU0_SR, MPU1_SR, FPU_SR): New macros for accessing new fields
+	in _v850_regs struct.
+	(SP_REGNO): Define.
+	(SP): Redefine using SP_REGNO.
+	(PSW_REGNO, EIIC, FEIC, DBIC, DIR, EIWR, FEWR, DBWR, BSEL, PSW_NPV)
+	(PSW_DMP, PSW_IMP, ECR_EICC, ECR_FECC, FPSR, FPSR_REGNO, FPEPC)
+	(FPST, FPST_REGNO, FPCC, FPCFG, FPCFG_REGNO, FPSR_DEM, FPSR_SEM)
+	(FPSR_RM, FPSR_RN, FPSR_FS, FPSR_PR, FPSR_XC, FPSR_XCE, FPSR_XCV)
+	(FPSR_XCZ, FPSR_XCO, FPSR_XCU, FPSR_XCI, FPSR_XE, FPSR_XEV)
+	(FPSR_XEZ, FPSR_XEO, FPSR_XEU, FPSR_XEI, FPSR_XP, FPSR_XPV)
+	(FPSR_XPZ, FPSR_XPO, FPSR_XPU, FPSR_XPI, FPST_PR, FPST_XCE)
+	(FPST_XCV, FPST_XCZ, FPST_XCO, FPST_XCU, FPST_XCI, FPST_XPV)
+	(FPST_XPZ, FPST_XPO, FPST_XPU, FPST_XPI, FPCFG_RM, FPCFG_XEV)
+	(FPCFG_XEZ, FPCFG_XEO, FPCFG_XEU, FPCFG_XEI, GET_FPCC, CLEAR_FPCC)
+	(SET_FPCC, TEST_FPCC, FPSR_GET_ROUND, MPM, MPC, MPC_REGNO, TID)
+	(PPA, PPM, PPC, DCC, DCV0, DCV1, SPAL, SPAU, IPA0L, IPA0U, IPA1L)
+	(IPA1U, IPA2L, IPA2U, IPA3L, IPA3U, DPA0L, DPA0U, DPA1L, DPA1U)
+	(DPA2L, DPA2U, DPA3L, DPA3U, PPC_PPE, SPAL_SPE, SPAL_SPS, VIP)
+	(VMECR, VMTID, VMADR, VPECR, VPTID, VPADR, VDECR, VDTID, MPM_AUE)
+	(MPM_MPE, VMECR_VMX, VMECR_VMR, VMECR_VMW, VMECR_VMS, VMECR_VMRMW)
+	(VMECR_VMMS, IPA2ADDR, IPA_IPE, IPA_IPX, IPA_IPR, IPE0, IPE1, IPE2)
+	(IPE3, IPX0, IPX1, IPX2, IPX3, IPR0, IPR1, IPR2, IPR3, DPA2ADDR)
+	(DPA_DPE, DPA_DPR, DPA_DPW, DPE0, DPE1, DPE2, DPE3, DPR0, DPR1)
+	(DPR2, DPR3, DPW0, DPW1, DPW2, DPW3, DCC_DCE0, DCC_DCE1, PPA2ADDR)
+	(PPC_PPC, PPC_PPE, PPC_PPM): New macros.
+	(FPU_COMPARE): New enum.
+	(TRACE_FP_INPUT_FPU1, TRACE_FP_INPUT_FPU2, TRACE_FP_INPUT_FPU3)
+	(TRACE_FP_INPUT_BOOL1_FPU2, TRACE_FP_INPUT_WORD2)
+	(TRACE_FP_RESULT_WORD1, TRACE_FP_RESULT_WORD2): New macros.
+	* simops.c (Add32): Update prototype.
+	(update_fpsr): New function.
+	(SignalException): New function.
+	(SignalExceptionFPE): New function.
+	(check_invalid_snan): New function.
+	(v850_float_compare): New function.
+	(v850_div): New function.
+	(v850_divu): New function.
+	(v850_sar): New function.
+	(v850_shl): New function.
+	(v850_shr): New function.
+	(v850_satadd): New function.
+	(v850_satsub): New function.
+	(load_data_mem): New function.
+	(store_data_mem): New function.
+	(mpu_load_mem_test): New function.
+	(mpu_store_mem_test): New function.
+	* simops.h: Add function prototype for above mentioned functions.
+	(check_cvt_fi, check_cvt_if, check_cvt_ff): Define.
+	* v850-dc: Add entry for v850e2 and v850e2v3.
+	* v850.igen: Add support for v850e2 and v850e2v3.
+
+2012-03-24  Mike Frysinger  <vapier at gentoo.org>
+
+	* aclocal.m4, config.in, configure: Regenerate.
+
 2011-12-03  Mike Frysinger  <vapier at gentoo.org>
 
 	* aclocal.m4: New file.
diff --git a/sim/v850/aclocal.m4 b/sim/v850/aclocal.m4
index 00124a6..a3cae8c 100644
--- a/sim/v850/aclocal.m4
+++ b/sim/v850/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -68,13 +69,13 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -83,7 +84,7 @@ AC_SUBST([am__leading_dot])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
diff --git a/sim/v850/config.in b/sim/v850/config.in
index 3055da5..a3f18e9 100644
--- a/sim/v850/config.in
+++ b/sim/v850/config.in
@@ -97,6 +97,9 @@
 /* Define to 1 if you have the `__setfpucw' function. */
 #undef HAVE___SETFPUCW
 
+/* Name of this package. */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -127,6 +130,28 @@
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
 #if defined AC_APPLE_UNIVERSAL_BUILD
@@ -138,3 +163,13 @@
 #  undef WORDS_BIGENDIAN
 # endif
 #endif
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
diff --git a/sim/v850/configure b/sim/v850/configure
index ba8580c..7a3142e 100755
--- a/sim/v850/configure
+++ b/sim/v850/configure
@@ -601,9 +601,6 @@ sim_debug
 sim_cflags
 sim_bswap
 MAINT
-EGREP
-GREP
-CPP
 CATOBJEXT
 GENCAT
 INSTOBJEXT
@@ -622,6 +619,7 @@ MAKE
 CCDEPMODE
 DEPDIR
 am__leading_dot
+PACKAGE
 RANLIB
 AR
 HDEFINES
@@ -629,6 +627,9 @@ CC_FOR_BUILD
 INSTALL_DATA
 INSTALL_SCRIPT
 INSTALL_PROGRAM
+EGREP
+GREP
+CPP
 target_os
 target_vendor
 target_cpu
@@ -723,6 +724,7 @@ with_bugurl
 enable_sim_endian
 enable_sim_alignment
 enable_sim_hostendian
+enable_werror
 enable_build_warnings
 enable_sim_build_warnings
 enable_sim_reserved_bits
@@ -1365,8 +1367,11 @@ Optional Features:
   --enable-sim-endian=endian		Specify target byte endian orientation.
   --enable-sim-alignment=align		Specify strict,  nonstrict or forced alignment of memory accesses.
   --enable-sim-hostendian=end		Specify host byte endian orientation.
-  --enable-build-warnings Enable build-time compiler warnings if gcc is used
-  --enable-gdb-build-warnings Enable SIM specific build-time compiler warnings if gcc is used
+  --enable-werror         treat compile warnings as errors
+  --enable-build-warnings enable build-time compiler warnings if gcc is used
+  --enable-sim-build-warnings
+                          enable SIM specific build-time compiler warnings if
+                          gcc is used
   --enable-sim-reserved-bits		Specify whether to check reserved bits in instruction.
   --enable-sim-bitsize=N		Specify target bitsize (32 or 64).
 
@@ -2446,9 +2451,9 @@ sim_inline="-DDEFAULT_INLINE=0"
 # AC_PROG_CPP_WERROR
 
 # Test for GNAT.
-# We require the gnatbind program, and a compiler driver that
-# understands Ada.  We use the user's CC setting, already found,
-# and possibly add $1 to the command-line parameters.
+# We require the gnatbind & gnatmake programs, as well as a compiler driver
+# that understands Ada.  We use the user's CC setting, already found, and
+# possibly add $1 to the command-line parameters.
 #
 # Sets the shell variable have_gnat to yes or no as appropriate, and
 # substitutes GNATBIND and GNATMAKE.
@@ -3375,120 +3380,6 @@ test -n "$target_alias" &&
   test "$program_prefix$program_suffix$program_transform_name" = \
     NONENONEs,x,x, &&
   program_prefix=${target_alias}-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# 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:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3889,6 +3780,181 @@ done
 
 
 
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+
 
 # autoconf.info says this should be called right after AC_INIT.
 ac_config_headers="$ac_config_headers config.h:config.in"
@@ -3897,6 +3963,7 @@ ac_config_headers="$ac_config_headers config.h:config.in"
 
 
 
+
 # Put a plausible default for CC_FOR_BUILD in Makefile.
 if test "x$cross_compiling" = "xno"; then
   CC_FOR_BUILD='$(CC)'
@@ -4002,6 +4069,17 @@ else
 fi
 
 
+# Some of the common include files depend on bfd.h, and bfd.h checks
+# that config.h is included first by testing that the PACKAGE macro
+# is defined.
+PACKAGE=sim
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+
 # Dependency checking.
 ac_config_commands="$ac_config_commands depdir"
 
@@ -4578,7 +4656,7 @@ if test "${enable_sim_trace+set}" = set; then :
   no)	sim_trace="-DTRACE=0 -DWITH_TRACE=0";;
   [-0-9]*)
 	sim_trace="-DTRACE='(${enableval})' -DWITH_TRACE='(${enableval})'";;
-  [a-z]*)
+  [[:lower:]]*)
 	sim_trace=""
 	for x in `echo "$enableval" | sed -e "s/,/ /g"`; do
 	  if test x"$sim_trace" = x; then
@@ -5077,29 +5155,44 @@ fi
 fi
 
 
-# NOTE: Don't add -Wall or -Wunused, they both include
-# -Wunused-parameter which reports bogus warnings.
-# NOTE: If you add to this list, remember to update
-# gdb/doc/gdbint.texinfo.
-build_warnings="-Wimplicit -Wreturn-type -Wcomment -Wtrigraphs \
--Wformat -Wparentheses -Wpointer-arith"
-# GCC supports -Wuninitialized only with -O or -On, n != 0.
-if test x${CFLAGS+set} = xset; then
-  case "${CFLAGS}" in
-    *"-O0"* ) ;;
-    *"-O"* )
-      build_warnings="${build_warnings} -Wuninitialized"
-    ;;
-  esac
-else
-  build_warnings="${build_warnings} -Wuninitialized"
+# Check whether --enable-werror was given.
+if test "${enable_werror+set}" = set; then :
+  enableval=$enable_werror; case "${enableval}" in
+     yes | y) ERROR_ON_WARNING="yes" ;;
+     no | n)  ERROR_ON_WARNING="no" ;;
+     *) as_fn_error "bad value ${enableval} for --enable-werror" "$LINENO" 5 ;;
+   esac
+fi
+
+
+# Enable -Werror by default when using gcc
+if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
+    ERROR_ON_WARNING=yes
 fi
-# Up for debate: -Wswitch -Wcomment -trigraphs -Wtrigraphs
-# -Wunused-function -Wunused-label -Wunused-variable -Wunused-value
-# -Wchar-subscripts -Wtraditional -Wshadow -Wcast-qual
-# -Wcast-align -Wwrite-strings -Wconversion -Wstrict-prototypes
-# -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls
-# -Woverloaded-virtual -Winline -Werror"
+
+WERROR_CFLAGS=""
+if test "${ERROR_ON_WARNING}" = yes ; then
+# NOTE: Disabled in the sim dir due to most sims generating warnings.
+#    WERROR_CFLAGS="-Werror"
+     true
+fi
+
+# The entries after -Wno-pointer-sign are disabled warnings which may
+# be enabled in the future, which can not currently be used to build
+# GDB.
+# NOTE: If you change this list, remember to update
+# gdb/doc/gdbint.texinfo.
+build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \
+-Wformat-nonliteral -Wno-pointer-sign \
+-Wno-unused -Wunused-value -Wunused-function \
+-Wno-switch -Wno-char-subscripts -Wmissing-prototypes"
+
+# Enable -Wno-format by default when using gcc on mingw since many
+# GCC versions complain about %I64.
+case "${host}" in
+  *-*-mingw32*) build_warnings="$build_warnings -Wno-format" ;;
+esac
+
 # Check whether --enable-build-warnings was given.
 if test "${enable_build_warnings+set}" = set; then :
   enableval=$enable_build_warnings; case "${enableval}" in
@@ -5131,7 +5224,6 @@ if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then
 fi
 fi
 WARN_CFLAGS=""
-WERROR_CFLAGS=""
 if test "x${build_warnings}" != x -a "x$GCC" = xyes
 then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler warning flags" >&5
@@ -5162,8 +5254,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 	    CFLAGS="$saved_CFLAGS"
 	esac
     done
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS}${WERROR_CFLAGS}" >&5
-$as_echo "${WARN_CFLAGS}${WERROR_CFLAGS}" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS} ${WERROR_CFLAGS}" >&5
+$as_echo "${WARN_CFLAGS} ${WERROR_CFLAGS}" >&6; }
 fi
 
 
diff --git a/sim/v850/sim-main.h b/sim/v850/sim-main.h
index e9f7aad..c52da77 100644
--- a/sim/v850/sim-main.h
+++ b/sim/v850/sim-main.h
@@ -15,6 +15,7 @@
 
 #include "sim-basics.h"
 #include "sim-signal.h"
+#include "sim-fpu.h"
 
 typedef address_word sim_cia;
 
@@ -39,7 +40,10 @@ typedef struct _v850_regs {
   reg_t regs[32];		/* general-purpose registers */
   reg_t sregs[32];		/* system registers, including psw */
   reg_t pc;
-  int dummy_mem;		/* where invalid accesses go */
+  int dummy_mem;                /* where invalid accesses go */
+  reg_t mpu0_sregs[28];         /* mpu0 system registers */
+  reg_t mpu1_sregs[28];         /* mpu1 system registers */
+  reg_t fpu_sregs[28];          /* fpu system registers */
 } v850_regs;
 
 struct _sim_cpu
@@ -122,11 +126,15 @@ nia = PC
 /* new */
 #define GR  ((CPU)->reg.regs)
 #define SR  ((CPU)->reg.sregs)
+#define MPU0_SR  ((STATE_CPU (sd, 0))->reg.mpu0_sregs)
+#define MPU1_SR  ((STATE_CPU (sd, 0))->reg.mpu1_sregs)
+#define FPU_SR   ((STATE_CPU (sd, 0))->reg.fpu_sregs)
 
 /* old */
 #define State    (STATE_CPU (simulator, 0)->reg)
 #define PC	(State.pc)
-#define SP	(State.regs[3])
+#define SP_REGNO        3
+#define SP      (State.regs[SP_REGNO])
 #define EP	(State.regs[30])
 
 #define EIPC  (State.sregs[0])
@@ -135,11 +143,20 @@ nia = PC
 #define FEPSW (State.sregs[3])
 #define ECR   (State.sregs[4])
 #define PSW   (State.sregs[5])
+#define PSW_REGNO   5
+#define EIIC  (State.sregs[13])
+#define FEIC  (State.sregs[14])
+#define DBIC  (SR[15])
 #define CTPC  (SR[16])
 #define CTPSW (SR[17])
 #define DBPC  (State.sregs[18])
 #define DBPSW (State.sregs[19])
 #define CTBP  (State.sregs[20])
+#define DIR   (SR[21])
+#define EIWR  (SR[28])
+#define FEWR  (SR[29])
+#define DBWR  (SR[30])
+#define BSEL  (SR[31])
 
 #define PSW_US BIT32 (8)
 #define PSW_NP 0x80
@@ -151,6 +168,210 @@ nia = PC
 #define PSW_S 0x2
 #define PSW_Z 0x1
 
+#define PSW_NPV	(1<<18)
+#define PSW_DMP	(1<<17)
+#define PSW_IMP	(1<<16)
+
+#define ECR_EICC 0x0000ffff
+#define ECR_FECC 0xffff0000
+
+/* FPU */
+
+#define FPSR  (FPU_SR[6])
+#define FPSR_REGNO 6
+#define FPEPC (FPU_SR[7])
+#define FPST  (FPU_SR[8])
+#define FPST_REGNO 8
+#define FPCC  (FPU_SR[9])
+#define FPCFG (FPU_SR[10])
+#define FPCFG_REGNO 10
+
+#define FPSR_DEM  0x00200000
+#define FPSR_SEM  0x00100000
+#define FPSR_RM   0x000c0000
+#define FPSR_RN   0x00000000
+#define FPSR_FS   0x00020000
+#define FPSR_PR   0x00010000
+
+#define FPSR_XC   0x0000fc00
+#define FPSR_XCE  0x00008000
+#define FPSR_XCV  0x00004000
+#define FPSR_XCZ  0x00002000
+#define FPSR_XCO  0x00001000
+#define FPSR_XCU  0x00000800
+#define FPSR_XCI  0x00000400
+
+#define FPSR_XE   0x000003e0
+#define FPSR_XEV  0x00000200
+#define FPSR_XEZ  0x00000100
+#define FPSR_XEO  0x00000080
+#define FPSR_XEU  0x00000040
+#define FPSR_XEI  0x00000020
+
+#define FPSR_XP   0x0000001f
+#define FPSR_XPV  0x00000010
+#define FPSR_XPZ  0x00000008
+#define FPSR_XPO  0x00000004
+#define FPSR_XPU  0x00000002
+#define FPSR_XPI  0x00000001
+
+#define FPST_PR   0x00008000 
+#define FPST_XCE  0x00002000 
+#define FPST_XCV  0x00001000 
+#define FPST_XCZ  0x00000800 
+#define FPST_XCO  0x00000400 
+#define FPST_XCU  0x00000200 
+#define FPST_XCI  0x00000100 
+
+#define FPST_XPV  0x00000010 
+#define FPST_XPZ  0x00000008 
+#define FPST_XPO  0x00000004 
+#define FPST_XPU  0x00000002 
+#define FPST_XPI  0x00000001 
+
+#define FPCFG_RM   0x00000180 
+#define FPCFG_XEV  0x00000010 
+#define FPCFG_XEZ  0x00000008 
+#define FPCFG_XEO  0x00000004 
+#define FPCFG_XEU  0x00000002 
+#define FPCFG_XEI  0x00000001 
+
+#define GET_FPCC()\
+ ((FPSR >> 24) &0xf)
+
+#define CLEAR_FPCC(bbb)\
+  (FPSR &= ~(1 << (bbb+24)))
+
+#define SET_FPCC(bbb)\
+ (FPSR |= 1 << (bbb+24))
+
+#define TEST_FPCC(bbb)\
+  ((FPSR & (1 << (bbb+24))) != 0)
+
+#define FPSR_GET_ROUND()					\
+  (((FPSR & FPSR_RM) == FPSR_RN) ? sim_fpu_round_near		\
+   : ((FPSR & FPSR_RM) == 0x00040000) ? sim_fpu_round_up	\
+   : ((FPSR & FPSR_RM) == 0x00080000) ? sim_fpu_round_down	\
+   : sim_fpu_round_zero)
+
+
+enum FPU_COMPARE {
+  FPU_CMP_F = 0,
+  FPU_CMP_UN,
+  FPU_CMP_EQ,
+  FPU_CMP_UEQ,
+  FPU_CMP_OLT,
+  FPU_CMP_ULT,
+  FPU_CMP_OLE,
+  FPU_CMP_ULE,
+  FPU_CMP_SF,
+  FPU_CMP_NGLE,
+  FPU_CMP_SEQ,
+  FPU_CMP_NGL,
+  FPU_CMP_LT,
+  FPU_CMP_NGE,
+  FPU_CMP_LE,
+  FPU_CMP_NGT
+};
+
+
+/* MPU */
+#define MPM	(MPU1_SR[0])
+#define MPC	(MPU1_SR[1])
+#define MPC_REGNO 1
+#define TID	(MPU1_SR[2])
+#define PPA	(MPU1_SR[3])
+#define PPM	(MPU1_SR[4])
+#define PPC	(MPU1_SR[5])
+#define DCC	(MPU1_SR[6])
+#define DCV0	(MPU1_SR[7])
+#define DCV1	(MPU1_SR[8])
+#define SPAL	(MPU1_SR[10])
+#define SPAU	(MPU1_SR[11])
+#define IPA0L	(MPU1_SR[12])
+#define IPA0U	(MPU1_SR[13])
+#define IPA1L	(MPU1_SR[14])
+#define IPA1U	(MPU1_SR[15])
+#define IPA2L	(MPU1_SR[16])
+#define IPA2U	(MPU1_SR[17])
+#define IPA3L	(MPU1_SR[18])
+#define IPA3U	(MPU1_SR[19])
+#define DPA0L	(MPU1_SR[20])
+#define DPA0U	(MPU1_SR[21])
+#define DPA1L	(MPU1_SR[22])
+#define DPA1U	(MPU1_SR[23])
+#define DPA2L	(MPU1_SR[24])
+#define DPA2U	(MPU1_SR[25])
+#define DPA3L	(MPU1_SR[26])
+#define DPA3U	(MPU1_SR[27])
+
+#define PPC_PPE 0x1
+#define SPAL_SPE 0x1
+#define SPAL_SPS 0x10
+
+#define VIP	(MPU0_SR[0])
+#define VMECR	(MPU0_SR[4])
+#define VMTID	(MPU0_SR[5])
+#define VMADR	(MPU0_SR[6])
+#define VPECR	(MPU0_SR[8])
+#define VPTID	(MPU0_SR[9])
+#define VPADR	(MPU0_SR[10])
+#define VDECR	(MPU0_SR[12])
+#define VDTID	(MPU0_SR[13])
+
+#define MPM_AUE	0x2
+#define MPM_MPE	0x1
+
+#define VMECR_VMX   0x2
+#define VMECR_VMR   0x4
+#define VMECR_VMW   0x8
+#define VMECR_VMS   0x10
+#define VMECR_VMRMW 0x20
+#define VMECR_VMMS  0x40
+
+#define IPA2ADDR(IPA)	((IPA) & 0x1fffff80)
+#define IPA_IPE	0x1 
+#define IPA_IPX	0x2 
+#define IPA_IPR	0x4 
+#define IPE0	(IPA0L & IPA_IPE)
+#define IPE1	(IPA1L & IPA_IPE)
+#define IPE2	(IPA2L & IPA_IPE)
+#define IPE3	(IPA3L & IPA_IPE)
+#define IPX0	(IPA0L & IPA_IPX)
+#define IPX1	(IPA1L & IPA_IPX)
+#define IPX2	(IPA2L & IPA_IPX)
+#define IPX3	(IPA3L & IPA_IPX)
+#define IPR0	(IPA0L & IPA_IPR)
+#define IPR1	(IPA1L & IPA_IPR)
+#define IPR2	(IPA2L & IPA_IPR)
+#define IPR3	(IPA3L & IPA_IPR)
+
+#define DPA2ADDR(DPA)	((DPA) & 0x1fffff80)
+#define DPA_DPE 0x1	
+#define DPA_DPR 0x4	
+#define DPA_DPW 0x8	
+#define DPE0	(DPA0L & DPA_DPE)
+#define DPE1	(DPA1L & DPA_DPE)
+#define DPE2	(DPA2L & DPA_DPE)
+#define DPE3	(DPA3L & DPA_DPE)
+#define DPR0	(DPA0L & DPA_DPR)
+#define DPR1	(DPA1L & DPA_DPR)
+#define DPR2	(DPA2L & DPA_DPR)
+#define DPR3	(DPA3L & DPA_DPR)
+#define DPW0	(DPA0L & DPA_DPW)
+#define DPW1	(DPA1L & DPA_DPW)
+#define DPW2	(DPA2L & DPA_DPW)
+#define DPW3	(DPA3L & DPA_DPW)
+
+#define DCC_DCE0 0x1
+#define DCC_DCE1 0x10000
+
+#define PPA2ADDR(PPA)	((PPA) & 0x1fffff80) 
+#define PPC_PPC 0xfffffffe
+#define PPC_PPE 0x1
+#define PPC_PPM 0x0000fff8
+
+
 #define SEXT3(x)	((((x)&0x7)^(~0x3))+0x4)	
 
 /* sign-extend a 4-bit number */
@@ -344,6 +565,79 @@ do { \
   } \
 } while (0)
 
+#define TRACE_FP_INPUT_FPU1(V0)	\
+do { \
+  if (TRACE_FPU_P (CPU)) \
+    { \
+      unsigned64 f0; \
+      sim_fpu_to64 (&f0, (V0)); \
+      trace_input_fp1 (SD, CPU, TRACE_FPU_IDX, f0); \
+    } \
+} while (0)
+
+#define TRACE_FP_INPUT_FPU2(V0, V1) \
+do { \
+  if (TRACE_FPU_P (CPU)) \
+    { \
+      unsigned64 f0, f1; \
+      sim_fpu_to64 (&f0, (V0)); \
+      sim_fpu_to64 (&f1, (V1)); \
+      trace_input_fp2 (SD, CPU, TRACE_FPU_IDX, f0, f1);	\
+    } \
+} while (0)
+
+#define TRACE_FP_INPUT_FPU3(V0, V1, V2) \
+do { \
+  if (TRACE_FPU_P (CPU)) \
+    { \
+      unsigned64 f0, f1, f2; \
+      sim_fpu_to64 (&f0, (V0)); \
+      sim_fpu_to64 (&f1, (V1)); \
+      sim_fpu_to64 (&f2, (V2)); \
+      trace_input_fp3 (SD, CPU, TRACE_FPU_IDX, f0, f1, f2); \
+    } \
+} while (0)
+
+#define TRACE_FP_INPUT_BOOL1_FPU2(V0, V1, V2) \
+do { \
+  if (TRACE_FPU_P (CPU)) \
+    { \
+      int d0 = (V0); \
+      unsigned64 f1, f2; \
+      TRACE_DATA *data = CPU_TRACE_DATA (CPU); \
+      TRACE_IDX (data) = TRACE_FPU_IDX;	\
+      sim_fpu_to64 (&f1, (V1)); \
+      sim_fpu_to64 (&f2, (V2)); \
+      save_data (SD, data, trace_fmt_bool, sizeof (d0), &d0); \
+      save_data (SD, data, trace_fmt_fp, sizeof (fp_word), &f1); \
+      save_data (SD, data, trace_fmt_fp, sizeof (fp_word), &f2); \
+    } \
+} while (0)
+
+#define TRACE_FP_INPUT_WORD2(V0, V1) \
+do { \
+  if (TRACE_FPU_P (CPU)) \
+    trace_input_word2 (SD, CPU, TRACE_FPU_IDX, (V0), (V1)); \
+} while (0)
+
+#define TRACE_FP_RESULT_FPU1(R0) \
+do { \
+  if (TRACE_FPU_P (CPU)) \
+    { \
+      unsigned64 f0; \
+      sim_fpu_to64 (&f0, (R0));	\
+      trace_result_fp1 (SD, CPU, TRACE_FPU_IDX, f0); \
+    } \
+} while (0)
+
+#define TRACE_FP_RESULT_WORD1(R0) TRACE_FP_RESULT_WORD(R0)
+
+#define TRACE_FP_RESULT_WORD2(R0, R1) \
+do { \
+  if (TRACE_FPU_P (CPU)) \
+    trace_result_word2 (SD, CPU, TRACE_FPU_IDX, (R0), (R1)); \
+} while (0)
+
 #else
 #define trace_input(NAME, IN1, IN2)
 #define trace_output(RESULT)
diff --git a/sim/v850/simops.c b/sim/v850/simops.c
index a14b0b2..f7fc67d 100644
--- a/sim/v850/simops.c
+++ b/sim/v850/simops.c
@@ -320,7 +320,7 @@ condition_met (unsigned code)
   return 1;
 }
 
-static unsigned long
+unsigned long
 Add32 (unsigned long a1, unsigned long a2, int * carry)
 {
   unsigned long result = (a1 + a2);
@@ -2839,3 +2839,717 @@ OP_307E0 (void)
   return 4;
 }
 
+/* V850E2R FPU functions */
+/*
+  sim_fpu_status_invalid_snan = 1,				-V--- (sim spec.)
+  sim_fpu_status_invalid_qnan = 2,				----- (sim spec.)
+  sim_fpu_status_invalid_isi = 4, (inf - inf)			-V---
+  sim_fpu_status_invalid_idi = 8, (inf / inf)			-V---
+  sim_fpu_status_invalid_zdz = 16, (0 / 0)			-V---
+  sim_fpu_status_invalid_imz = 32, (inf * 0)			-V---
+  sim_fpu_status_invalid_cvi = 64, convert to integer		-V---
+  sim_fpu_status_invalid_div0 = 128, (X / 0)			--Z--
+  sim_fpu_status_invalid_cmp = 256, compare			----- (sim spec.)
+  sim_fpu_status_invalid_sqrt = 512,				-V---
+  sim_fpu_status_rounded = 1024,				I----
+  sim_fpu_status_inexact = 2048,				I---- (sim spec.)
+  sim_fpu_status_overflow = 4096,				I--O-
+  sim_fpu_status_underflow = 8192,				I---U
+  sim_fpu_status_denorm = 16384,				----U (sim spec.)
+*/  
+    
+void update_fpsr (SIM_DESC sd, sim_fpu_status status, unsigned int mask, unsigned int double_op_p)
+{
+  unsigned int fpsr = FPSR & mask;
+
+  unsigned int flags = 0;
+
+  if (fpsr & FPSR_XEI
+      && ((status & (sim_fpu_status_rounded
+		     | sim_fpu_status_overflow
+		     | sim_fpu_status_inexact))
+	  || (status & sim_fpu_status_underflow
+	      && (fpsr & (FPSR_XEU | FPSR_XEI)) == 0
+	      && fpsr & FPSR_FS)))
+    {
+      flags |= FPSR_XCI | FPSR_XPI;
+    }
+
+  if (fpsr & FPSR_XEV
+      && (status & (sim_fpu_status_invalid_isi
+		    | sim_fpu_status_invalid_imz
+		    | sim_fpu_status_invalid_zdz
+		    | sim_fpu_status_invalid_idi
+		    | sim_fpu_status_invalid_cvi
+		    | sim_fpu_status_invalid_sqrt
+		    | sim_fpu_status_invalid_snan)))
+    {
+      flags |= FPSR_XCV | FPSR_XPV;
+    }
+
+  if (fpsr & FPSR_XEZ
+      && (status & sim_fpu_status_invalid_div0))
+    {
+      flags |= FPSR_XCV | FPSR_XPV;
+    }
+
+  if (fpsr & FPSR_XEO
+      && (status & sim_fpu_status_overflow))
+    {
+      flags |= FPSR_XCO | FPSR_XPO;
+    }
+      
+  if (((fpsr & FPSR_XEU) || (fpsr & FPSR_FS) == 0)
+      && (status & (sim_fpu_status_underflow
+		    | sim_fpu_status_denorm)))
+    {
+      flags |= FPSR_XCU | FPSR_XPU;
+    }
+
+  if (flags)
+    {
+      FPSR &= ~FPSR_XC;
+      FPSR |= flags;
+
+      SignalExceptionFPE(sd, double_op_p);
+    }
+}
+
+/*
+  exception
+*/
+
+void  SignalException(SIM_DESC sd)
+{
+  if (MPM & MPM_AUE)
+    {
+      PSW = PSW & ~(PSW_NPV | PSW_DMP | PSW_IMP);
+    }
+}
+
+void SignalExceptionFPE(SIM_DESC sd, unsigned int double_op_p)
+{								
+  if (((PSW & (PSW_NP|PSW_ID)) == 0)
+      || !(FPSR & (double_op_p ? FPSR_DEM : FPSR_SEM)))		
+    {								
+      EIPC = PC;							
+      EIPSW = PSW;						
+      EIIC = (FPSR & (double_op_p ? FPSR_DEM : FPSR_SEM)) 	
+	? 0x71 : 0x72;						
+      PSW |= (PSW_EP | PSW_ID);
+      PC = 0x70;
+
+      SignalException(sd);
+    }								
+}
+
+
+void check_invalid_snan(SIM_DESC sd, sim_fpu_status status, unsigned int double_op_p)
+{
+  if ((FPSR & FPSR_XEI)
+      && (status & sim_fpu_status_invalid_snan))
+    {
+      FPSR &= ~FPSR_XC;
+      FPSR |= FPSR_XCV;
+      FPSR |= FPSR_XPV;
+      SignalExceptionFPE(sd, double_op_p);
+    }
+}
+
+int v850_float_compare(SIM_DESC sd, int cmp, sim_fpu wop1, sim_fpu wop2, int double_op_p)
+{
+  int result = -1;
+  
+  if (sim_fpu_is_nan(&wop1) || sim_fpu_is_nan(&wop2))
+    {
+      if (cmp & 0x8)
+	{
+	  if (FPSR & FPSR_XEV)
+	    {
+	      FPSR |= FPSR_XCV | FPSR_XPV;
+	      SignalExceptionFPE(sd, double_op_p);
+	    }
+	}
+
+      switch (cmp)
+	{
+	case FPU_CMP_F:
+	  result = 0;
+	  break;
+	case FPU_CMP_UN:
+	  result = 1;
+	  break;
+	case FPU_CMP_EQ:
+	  result = 0;
+	  break;
+	case FPU_CMP_UEQ:
+	  result = 1;
+	  break;
+	case FPU_CMP_OLT:
+	  result = 0;
+	  break;
+	case FPU_CMP_ULT:
+	  result = 1;
+	  break;
+	case FPU_CMP_OLE:
+	  result = 0;
+	  break;
+	case FPU_CMP_ULE:
+	  result = 1;
+	  break;
+	case FPU_CMP_SF:
+	  result = 0;
+	  break;
+	case FPU_CMP_NGLE:
+	  result = 1;
+	  break;
+	case FPU_CMP_SEQ:
+	  result = 0;
+	  break;
+	case FPU_CMP_NGL:
+	  result = 1;
+	  break;
+	case FPU_CMP_LT:
+	  result = 0;
+	  break;
+	case FPU_CMP_NGE:
+	  result = 1;
+	  break;
+	case FPU_CMP_LE:
+	  result = 0;
+	  break;
+	case FPU_CMP_NGT:
+	  result = 1;
+	  break;
+	default:
+	  abort();
+	}
+    }
+  else if (sim_fpu_is_infinity(&wop1) && sim_fpu_is_infinity(&wop2)
+	   && sim_fpu_sign(&wop1) == sim_fpu_sign(&wop2))
+    {
+      switch (cmp)
+	{
+	case FPU_CMP_F:
+	  result = 0;
+	  break;
+	case FPU_CMP_UN:
+	  result = 0;
+	  break;
+	case FPU_CMP_EQ:
+	  result = 1;
+	  break;
+	case FPU_CMP_UEQ:
+	  result = 1;
+	  break;
+	case FPU_CMP_OLT:
+	  result = 0;
+	  break;
+	case FPU_CMP_ULT:
+	  result = 0;
+	  break;
+	case FPU_CMP_OLE:
+	  result = 1;
+	  break;
+	case FPU_CMP_ULE:
+	  result = 1;
+	  break;
+	case FPU_CMP_SF:
+	  result = 0;
+	  break;
+	case FPU_CMP_NGLE:
+	  result = 0;
+	  break;
+	case FPU_CMP_SEQ:
+	  result = 1;
+	  break;
+	case FPU_CMP_NGL:
+	  result = 1;
+	  break;
+	case FPU_CMP_LT:
+	  result = 0;
+	  break;
+	case FPU_CMP_NGE:
+	  result = 0;
+	  break;
+	case FPU_CMP_LE:
+	  result = 1;
+	  break;
+	case FPU_CMP_NGT:
+	  result = 1;
+	  break;
+	default:
+	  abort();
+	}
+    }
+  else
+    {
+      int gt = 0,lt = 0,eq = 0, status;
+
+      status = sim_fpu_cmp( &wop1, &wop2 );
+
+      switch (status) {
+      case SIM_FPU_IS_SNAN:
+      case SIM_FPU_IS_QNAN:
+	abort();
+	break;
+
+      case SIM_FPU_IS_NINF:
+	lt = 1;
+	break;
+      case SIM_FPU_IS_PINF:
+	gt = 1;
+	break;
+      case SIM_FPU_IS_NNUMBER:
+	lt = 1;
+	break;
+      case SIM_FPU_IS_PNUMBER:
+	gt = 1;
+	break;
+      case SIM_FPU_IS_NDENORM:
+	lt = 1;
+	break;
+      case SIM_FPU_IS_PDENORM:
+	gt = 1;
+	break;
+      case SIM_FPU_IS_NZERO:
+      case SIM_FPU_IS_PZERO:
+	eq = 1;
+	break;
+      }
+  
+      switch (cmp)
+	{
+	case FPU_CMP_F:
+	  result = 0;
+	  break;
+	case FPU_CMP_UN:
+	  result = 0;
+	  break;
+	case FPU_CMP_EQ:
+	  result = eq;
+	  break;
+	case FPU_CMP_UEQ:
+	  result = eq;
+	  break;
+	case FPU_CMP_OLT:
+	  result = lt;
+	  break;
+	case FPU_CMP_ULT:
+	  result = lt;
+	  break;
+	case FPU_CMP_OLE:
+	  result = lt || eq;
+	  break;
+	case FPU_CMP_ULE:
+	  result = lt || eq;
+	  break;
+	case FPU_CMP_SF:
+	  result = 0;
+	  break;
+	case FPU_CMP_NGLE:
+	  result = 0;
+	  break;
+	case FPU_CMP_SEQ:
+	  result = eq;
+	  break;
+	case FPU_CMP_NGL:
+	  result = eq;
+	  break;
+	case FPU_CMP_LT:
+	  result = lt;
+	  break;
+	case FPU_CMP_NGE:
+	  result = lt;
+	  break;
+	case FPU_CMP_LE:
+	  result = lt || eq;
+	  break;
+	case FPU_CMP_NGT:
+	  result = lt || eq;
+	  break;
+	}
+    }
+
+  ASSERT(result != -1);
+  return result;
+}
+
+void v850_div(SIM_DESC sd, unsigned int op0, unsigned int op1, unsigned int *op2p, unsigned int *op3p)
+{
+  signed long int quotient;
+  signed long int remainder;
+  signed long int divide_by;
+  signed long int divide_this;
+  bfd_boolean     overflow = FALSE;
+  
+  /* Compute the result.  */
+  divide_by   = op0;
+  divide_this = op1;
+  
+  if (divide_by == 0 || (divide_by == -1 && divide_this == (1 << 31)))
+    {
+      overflow  = TRUE;
+      divide_by = 1;
+    }
+  
+  quotient  = divide_this / divide_by;
+  remainder = divide_this % divide_by;
+  
+  /* Set condition codes.  */
+  PSW &= ~(PSW_Z | PSW_S | PSW_OV);
+  
+  if (overflow)      PSW |= PSW_OV;
+  if (quotient == 0) PSW |= PSW_Z;
+  if (quotient <  0) PSW |= PSW_S;
+  
+  *op2p = quotient;
+  *op3p = remainder;
+}
+
+void v850_divu(SIM_DESC sd, unsigned int op0, unsigned int op1, unsigned int *op2p, unsigned int *op3p)
+{
+  unsigned long int quotient;
+  unsigned long int remainder;
+  unsigned long int divide_by;
+  unsigned long int divide_this;
+  bfd_boolean       overflow = FALSE;
+  
+  /* Compute the result.  */
+  
+  divide_by   = op0;
+  divide_this = op1;
+  
+  if (divide_by == 0)
+    {
+      overflow = TRUE;
+      divide_by  = 1;
+    }
+  
+  quotient  = divide_this / divide_by;
+  remainder = divide_this % divide_by;
+  
+  /* Set condition codes.  */
+  PSW &= ~(PSW_Z | PSW_S | PSW_OV);
+  
+  if (overflow)      PSW |= PSW_OV;
+  if (quotient == 0) PSW |= PSW_Z;
+  if (quotient & 0x80000000) PSW |= PSW_S;
+  
+  *op2p = quotient;
+  *op3p = remainder;
+}
+
+
+void v850_sar(SIM_DESC sd, unsigned int op0, unsigned int op1, unsigned int *op2p)
+{
+  unsigned int result, z, s, cy;
+
+  op0 &= 0x1f;
+  result = (signed)op1 >> op0;
+
+  /* Compute the condition codes.  */
+  z = (result == 0);
+  s = (result & 0x80000000);
+  cy = (op1 & (1 << (op0 - 1)));
+
+  /* Store the result and condition codes.  */
+  PSW &= ~(PSW_Z | PSW_S | PSW_OV | PSW_CY);
+  PSW |= ((z ? PSW_Z : 0) | (s ? PSW_S : 0)
+		| (cy ? PSW_CY : 0));
+
+  *op2p = result;
+}
+
+void v850_shl(SIM_DESC sd, unsigned int op0, unsigned int op1, unsigned int *op2p)
+{
+  unsigned int result, z, s, cy;
+
+  op0 &= 0x1f;
+  result = op1 << op0;
+
+  /* Compute the condition codes.  */
+  z = (result == 0);
+  s = (result & 0x80000000);
+  cy = (op1 & (1 << (32 - op0)));
+
+  /* Store the result and condition codes.  */
+  PSW &= ~(PSW_Z | PSW_S | PSW_OV | PSW_CY);
+  PSW |= ((z ? PSW_Z : 0) | (s ? PSW_S : 0)
+		| (cy ? PSW_CY : 0));
+
+  *op2p = result;
+}
+
+void v850_shr(SIM_DESC sd, unsigned int op0, unsigned int op1, unsigned int *op2p)
+{
+  unsigned int result, z, s, cy;
+
+  op0 &=  0x1f;
+  result = op1 >> op0;
+
+  /* Compute the condition codes.  */
+  z = (result == 0);
+  s = (result & 0x80000000);
+  cy = (op1 & (1 << (op0 - 1)));
+
+  /* Store the result and condition codes.  */
+  PSW &= ~(PSW_Z | PSW_S | PSW_OV | PSW_CY);
+  PSW |= ((z ? PSW_Z : 0) | (s ? PSW_S : 0)
+		| (cy ? PSW_CY : 0));
+
+  *op2p = result;
+}
+
+void v850_satadd(SIM_DESC sd, unsigned int op0, unsigned int op1, unsigned int *op2p)
+{
+  unsigned int result, z, s, cy, ov, sat;
+
+  result = op0 + op1;
+  
+  /* Compute the condition codes.  */
+  z = (result == 0);
+  s = (result & 0x80000000);
+  cy = (result < op0 || result < op1);
+  ov = ((op0 & 0x80000000) == (op1 & 0x80000000)
+	&& (op0 & 0x80000000) != (result & 0x80000000));
+  sat = ov;
+  
+  /* Store the result and condition codes.  */
+  PSW &= ~(PSW_Z | PSW_S | PSW_CY | PSW_OV);
+  PSW |= ((z ? PSW_Z : 0) | (s ? PSW_S : 0)
+	  | (cy ? PSW_CY : 0) | (ov ? PSW_OV : 0)
+	  | (sat ? PSW_SAT : 0));
+  
+  /* Handle saturated results.  */
+  if (sat && s)
+    {
+      result = 0x7fffffff;
+      PSW &= ~PSW_S;
+    }
+  else if (sat)
+    {
+      result = 0x80000000;
+      PSW |= PSW_S;
+    }
+
+  *op2p = result;
+}
+
+void v850_satsub(SIM_DESC sd, unsigned int op0, unsigned int op1, unsigned int *op2p)
+{
+  unsigned int result, z, s, cy, ov, sat;
+
+  /* Compute the result.  */
+  result = op1 - op0;
+  
+  /* Compute the condition codes.  */
+  z = (result == 0);
+  s = (result & 0x80000000);
+  cy = (op1 < op0);
+  ov = ((op1 & 0x80000000) != (op0 & 0x80000000)
+	&& (op1 & 0x80000000) != (result & 0x80000000));
+  sat = ov;
+  
+  /* Store the result and condition codes.  */
+  PSW &= ~(PSW_Z | PSW_S | PSW_CY | PSW_OV);
+  PSW |= ((z ? PSW_Z : 0) | (s ? PSW_S : 0)
+	  | (cy ? PSW_CY : 0) | (ov ? PSW_OV : 0)
+	  | (sat ? PSW_SAT : 0));
+
+  /* Handle saturated results.  */
+  if (sat && s)
+    {
+      result = 0x7fffffff;
+      PSW &= ~PSW_S;
+    }
+  else if (sat)
+    {
+      result = 0x80000000;
+      PSW |= PSW_S;
+    }
+
+  *op2p = result;
+}
+
+unsigned32
+load_data_mem(sd, addr, len)
+     SIM_DESC sd;
+     SIM_ADDR addr;
+     int len;
+{
+  uint32 data;
+
+  switch (len)
+    {
+    case 1:
+      data = sim_core_read_unaligned_1 (STATE_CPU (sd, 0), 
+					PC, read_map, addr);
+      break;
+    case 2:
+      data = sim_core_read_unaligned_2 (STATE_CPU (sd, 0), 
+					PC, read_map, addr);
+      break;
+    case 4:
+      data = sim_core_read_unaligned_4 (STATE_CPU (sd, 0), 
+					PC, read_map, addr);
+      break;
+    default:
+      abort ();
+    }
+  return data;
+}
+
+void
+store_data_mem(sd, addr, len, data)
+     SIM_DESC sd;
+     SIM_ADDR addr;
+     int len;
+     unsigned32 data;
+{
+  switch (len)
+    {
+    case 1:
+      store_mem(addr, 1, data);
+      break;
+    case 2:
+      store_mem(addr, 2, data);
+      break;
+    case 4:
+      store_mem(addr, 4, data);
+      break;
+    default:
+      abort ();
+    }
+}
+
+int mpu_load_mem_test(SIM_DESC sd, unsigned int addr, int size, int base_reg)
+{
+  int result = 1;
+
+  if (PSW & PSW_DMP)
+    {
+      if (IPE0 && addr >= IPA2ADDR(IPA0L) && addr <= IPA2ADDR(IPA0L) && IPR0)
+	{
+	  /* text area */
+	}
+      else if (IPE1 && addr >= IPA2ADDR(IPA1L) && addr <= IPA2ADDR(IPA1L) && IPR1)
+	{
+	  /* text area */
+	}
+      else if (IPE2 && addr >= IPA2ADDR(IPA2L) && addr <= IPA2ADDR(IPA2L) && IPR2)
+	{
+	  /* text area */
+	}
+      else if (IPE3 && addr >= IPA2ADDR(IPA3L) && addr <= IPA2ADDR(IPA3L) && IPR3)
+	{
+	  /* text area */
+	}
+      else if (addr >= PPA2ADDR(PPA & ~PPM) && addr <= DPA2ADDR(PPA | PPM))
+	{
+	  /* preifarallel area */
+	}
+      else if (addr >= PPA2ADDR(SPAL) && addr <= DPA2ADDR(SPAU))
+	{
+	  /* stack area */
+	}
+      else if (DPE0 && addr >= DPA2ADDR(DPA0L) && addr <= DPA2ADDR(DPA0L) && DPR0
+	       && ((SPAL & SPAL_SPS) ? base_reg == SP_REGNO : 1))
+	{
+	  /* data area */
+	}
+      else if (DPE1 && addr >= DPA2ADDR(DPA1L) && addr <= DPA2ADDR(DPA1L) && DPR1
+	       && ((SPAL & SPAL_SPS) ? base_reg == SP_REGNO : 1))
+	{
+	  /* data area */
+	}
+      else if (DPE2 && addr >= DPA2ADDR(DPA2L) && addr <= DPA2ADDR(DPA2L) && DPR2
+	       && ((SPAL & SPAL_SPS) ? base_reg == SP_REGNO : 1))
+	{
+	  /* data area */
+	}
+      else if (DPE3 && addr >= DPA2ADDR(DPA3L) && addr <= DPA2ADDR(DPA3L) && DPR3
+	       && ((SPAL & SPAL_SPS) ? base_reg == SP_REGNO : 1))
+	{
+	  /* data area */
+	}
+      else
+	{
+	  VMECR &= ~(VMECR_VMW | VMECR_VMX);
+	  VMECR |= VMECR_VMR;
+	  VMADR = addr;
+	  VMTID = TID;
+	  FEIC = 0x431;
+
+	  PC = 0x30;
+
+	  SignalException(sd);
+	  result = 0;
+	}
+    }
+
+  return result;
+}
+
+int mpu_store_mem_test(SIM_DESC sd, unsigned int addr, int size, int base_reg)
+{
+  int result = 1;
+
+  if (PSW & PSW_DMP)
+    {
+      if (addr >= PPA2ADDR(PPA & ~PPM) && addr <= DPA2ADDR(PPA | PPM))
+	{
+	  /* preifarallel area */
+	}
+      else if (addr >= PPA2ADDR(SPAL) && addr <= DPA2ADDR(SPAU))
+	{
+	  /* stack area */
+	}
+      else if (DPE0 && addr >= DPA2ADDR(DPA0L) && addr <= DPA2ADDR(DPA0L) && DPW0
+	       && ((SPAL & SPAL_SPS) ? base_reg == SP_REGNO : 1))
+	{
+	  /* data area */
+	}
+      else if (DPE1 && addr >= DPA2ADDR(DPA1L) && addr <= DPA2ADDR(DPA1L) && DPW1
+	       && ((SPAL & SPAL_SPS) ? base_reg == SP_REGNO : 1))
+	{
+	  /* data area */
+	}
+      else if (DPE2 && addr >= DPA2ADDR(DPA2L) && addr <= DPA2ADDR(DPA2L) && DPW2
+	       && ((SPAL & SPAL_SPS) ? base_reg == SP_REGNO : 1))
+	{
+	  /* data area */
+	}
+      else if (DPE3 && addr >= DPA2ADDR(DPA3L) && addr <= DPA2ADDR(DPA3L) && DPW3
+	       && ((SPAL & SPAL_SPS) ? base_reg == SP_REGNO : 1))
+	{
+	  /* data area */
+	}
+      else
+	{
+	  if (addr >= PPA2ADDR(PPA & ~PPM) && addr <= DPA2ADDR(PPA | PPM))
+	    {
+	      FEIC = 0x432;
+	      VPTID = TID;
+	      VPADR = PC;
+#ifdef NOT_YET
+	      VIP_PP;
+	      VPECR;
+#endif	      
+	    }
+	  else
+	    {
+	      FEIC = 0x431;
+	      VMTID = TID;
+	      VMADR = VMECR;
+	      VMECR &= ~(VMECR_VMW | VMECR_VMX);
+	      VMECR |= VMECR_VMR;
+	      PC = 0x30;
+	    }
+	  result = 0;
+	}
+    }
+
+  return result;
+}
+
diff --git a/sim/v850/simops.h b/sim/v850/simops.h
index 750fb70..f18da2f 100644
--- a/sim/v850/simops.h
+++ b/sim/v850/simops.h
@@ -75,4 +75,51 @@ int OP_22007E0 (void);
 int OP_307F0 (void);
 int OP_107F0 (void);
 int OP_307E0 (void);
+
+int v850_float_compare(SIM_DESC sd, int cmp, sim_fpu wop1, sim_fpu wop2, int double_op_p);
+
+/* MEMORY ACCESS */
+unsigned32 load_data_mem(SIM_DESC sd, SIM_ADDR addr, int len);
+void store_data_mem(SIM_DESC sd, SIM_ADDR addr, int len, unsigned32 data);
+
+unsigned long Add32 (unsigned long a1, unsigned long a2, int * carry);
+
+/* FPU */
+
+/*
+  FPU: update FPSR flags
+  invalid, inexact, overflow, underflow
+ */
+
+extern void check_invalid_snan (SIM_DESC sd, sim_fpu_status, unsigned int);
+
+#define check_cvt_fi(sd, status, double_op_p)                   \
+        update_fpsr (sd, status, FPSR_XEV | FPSR_XEI, double_op_p)
+
+#define check_cvt_if(sd, status, double_op_p)                   \
+        update_fpsr (sd, status, FPSR_XEI, double_op_p)
+
+#define check_cvt_ff(sd, status, double_op_p)                   \
+        update_fpsr (sd, status, FPSR_XEV | FPSR_XEI | FPSR_XEO | FPSR_XEU, double_op_p)
+
+extern void update_fpsr (SIM_DESC sd, sim_fpu_status, unsigned int, unsigned int);
+
+
+/*
+  Exception 
+ */
+void  SignalException (SIM_DESC sd);
+void  SignalExceptionFPE (SIM_DESC sd, unsigned int double_op_p);
+
+int mpu_load_mem_test (SIM_DESC sd, unsigned int addr, int len, int base_reg);
+int mpu_store_mem_test (SIM_DESC sd, unsigned int addr, int len, int base_reg);
+
+void v850_sar (SIM_DESC sd, unsigned int op0, unsigned int op1, unsigned int *op2p);
+void v850_shl (SIM_DESC sd, unsigned int op0, unsigned int op1, unsigned int *op2p);
+void v850_shr (SIM_DESC sd, unsigned int op0, unsigned int op1, unsigned int *op2p);
+void v850_satadd (SIM_DESC sd, unsigned int op0, unsigned int op1, unsigned int *op2p);
+void v850_satsub (SIM_DESC sd, unsigned int op0, unsigned int op1, unsigned int *op2p);
+void v850_div (SIM_DESC sd, unsigned int op0, unsigned int op1, unsigned int *op2p, unsigned int *op3p);
+void v850_divu (SIM_DESC sd, unsigned int op0, unsigned int op1, unsigned int *op2p, unsigned int *op3p);
+
 #endif
diff --git a/sim/v850/v850-dc b/sim/v850/v850-dc
index 29fa127..ffaa406 100644
--- a/sim/v850/v850-dc
+++ b/sim/v850/v850-dc
@@ -12,7 +12,9 @@
   switch,combine        :   4 :   0 :    :    :    :    1 : V,VII       :
   switch,combine        :   4 :   0 :    :    :    :    1 : V,XIII      : v850e
   switch,combine        :   4 :   0 :    :    :    :    1 : V,XIII      : v850e1
-
+  switch,combine        :   4 :   0 :    :    :    :    1 : V,XIII      : v850e2
+  switch,combine        :   4 :   0 :    :    :    :    1 : V,XIII      : v850e2v3
+  switch,combine        :  10 :   5 :    :    :    :    0 : F_I         : v850e2v3
 
 # for opcode 63, 127, 1087 et.al.
 
@@ -27,3 +29,28 @@
 # for opcode 66 - divh/break
 
   switch,combine        :   4 :   0 :    :    :    :    0 : I           :
+
+# for ilgop, macu
+  switch,combine        :  10 :   9 :    :    :    :    1 : X,XI        : v850e2
+  switch,combine        :  10 :   9 :    :    :    :    1 : X,XI        : v850e2v3
+
+#for cmovf.s, setf
+  switch,combine        :  10 :   10 :    :    :    :    1 :F_I,IX      : v850e2v3
+  
+# for cmovf.s trfsr
+  switch,combine        :  15 :   11 :    :    :    :    1 :F_I         : v850e2v3
+
+# for trncf.sw, cvtf.sw
+  switch,combine        :   0 :    0 :    :    :    :    0 :F_I         : v850e2v3
+  switch,combine        :   3 :    3 :    :    :    :    0 :F_I         : v850e2v3
+
+# for rsqrtf.s, sqrtf.s
+  switch,combine        :   1 :    1 :    :    :    :    0 :F_I         : v850e2v3
+
+# for maddf.s, trap 
+  switch,combine        :   8 :    8 :    :    :    :    1 :F_I,X       : v850e2v3
+  switch,combine        :  10 :   10 :    :    :    :    1 :F_I,X       : v850e2v3
+
+# for jr32 jarl32
+  switch,combine        :  4 :   0 :    :    :    :    0 :VI            : v850e2
+  switch,combine        :  4 :   0 :    :    :    :    0 :VI            : v850e2v3
diff --git a/sim/v850/v850.igen b/sim/v850/v850.igen
index c0382bc..9645d28 100644
--- a/sim/v850/v850.igen
+++ b/sim/v850/v850.igen
@@ -6,6 +6,7 @@
 :option:::format-names:XI,XII,XIII
 :option:::format-names:XIV,XV
 :option:::format-names:Z
+:option:::format-names:F_I
 
 
 :model:::v850:v850:
@@ -14,12 +15,22 @@
 :model:::v850e:v850e:
 :option:::multi-sim:true
 :model:::v850e1:v850e1:
+:option:::multi-sim:true
+:model:::v850e2:v850e2:
+:option:::multi-sim:true
+:model:::v850e2v3:v850e2v3:
 
 // Cache macros
 
 :cache:::unsigned:reg1:RRRRR:(RRRRR)
 :cache:::unsigned:reg2:rrrrr:(rrrrr)
 :cache:::unsigned:reg3:wwwww:(wwwww)
+:cache:::unsigned:reg4:W,WWWW:((W << 4) + WWWW)
+
+:cache:::unsigned:reg1e:RRRR:(RRRR << 1)
+:cache:::unsigned:reg2e:rrrr:(rrrr << 1)
+:cache:::unsigned:reg3e:wwww:(wwww << 1)
+:cache:::unsigned:reg4e:mmmm:(mmmm << 1)
 
 :cache:::unsigned:disp4:dddd:(dddd)
 :cache:::unsigned:disp5:dddd:(dddd << 1)
@@ -29,7 +40,10 @@
 :cache:::unsigned:disp9:ddddd,ddd:SEXT32 ((ddddd << 4) + (ddd << 1), 9 - 1)
 :cache:::unsigned:disp16:dddddddddddddddd:EXTEND16 (dddddddddddddddd)
 :cache:::unsigned:disp16:ddddddddddddddd: EXTEND16 (ddddddddddddddd << 1)
+:cache:::unsigned:disp17:d,ddddddddddddddd:SEXT32 (((d <<16) + (ddddddddddddddd << 1)), 17 - 1)
 :cache:::unsigned:disp22:dddddd,ddddddddddddddd: SEXT32 ((dddddd << 16) + (ddddddddddddddd << 1), 22 - 1)
+:cache:::unsigned:disp23:ddddddd,dddddddddddddddd: SEXT32 ((ddddddd) + (dddddddddddddddd << 7), 23 - 1)
+:cache:::unsigned:disp23:dddddd,dddddddddddddddd: SEXT32 ((dddddd << 1) + (dddddddddddddddd << 7), 23 - 1)
 
 :cache:::unsigned:imm5:iiiii:SEXT32 (iiiii, 4)
 :cache:::unsigned:imm6:iiiiii:iiiiii
@@ -46,6 +60,7 @@
 :cache:::unsigned:list18:LLLL,LLLLLLLLLLLL:((LLLL << 12) + LLLLLLLLLLLL)
 
 :cache:::unsigned:bit3:bbb:bbb
+:cache:::unsigned:bit4:bbbb:bbbb
 
 
 // What do we do with an illegal instruction?
@@ -58,8 +73,7 @@
 
 
 
-// Add
-
+// ADD
 rrrrr,001110,RRRRR:I:::add
 "add r<reg1>, r<reg2>"
 {
@@ -83,6 +97,20 @@ rrrrr,110000,RRRRR + iiiiiiiiiiiiiiii:VI:::addi
 
 
 
+// ADF
+rrrrr,111111,RRRRR + wwwww,011101,cccc!13,0:XI:::adf
+*v850e2
+*v850e2v3
+"adf %s<cccc>, r<reg1>, r<reg2>, r<reg3>"
+{
+  int cond = condition_met (cccc);
+  TRACE_ALU_INPUT3 (cond, GR[reg1], GR[reg2]);
+  GR[reg3] = GR[reg1] + GR[reg2] + (cond ? 1 : 0);
+  TRACE_ALU_RESULT1 (GR[reg3]);
+}
+
+
+
 // AND
 rrrrr,001010,RRRRR:I:::and
 "and r<reg1>, r<reg2>"
@@ -153,12 +181,27 @@ ddddd,1011,ddd,cccc:III:::Bcond
   }
 }
 
+00000111111,d,cccc + ddddddddddddddd,1:VII:::Bcond
+"breakpoint":((disp17 == 0) && (cccc == 0x05))
+"b%s<cccc> <disp17>"
+*v850e2v3
+{
+  int cond;
+  cond = condition_met (cccc);
+  if (cond)
+    nia = cia + disp17;
+  TRACE_BRANCH_INPUT1 (cond);
+  TRACE_BRANCH_RESULT (nia);
+}
+
 
 
 // BSH
 rrrrr,11111100000 + wwwww,01101000010:XII:::bsh
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "bsh r<reg2>, r<reg3>"
 {
   unsigned32 value;
@@ -178,10 +221,14 @@ rrrrr,11111100000 + wwwww,01101000010:XII:::bsh
   TRACE_ALU_RESULT (GR[reg3]);
 }
 
+
+
 // BSW
 rrrrr,11111100000 + wwwww,01101000000:XII:::bsw
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "bsw r<reg2>, r<reg3>"
 {
 #define WORDHASNULLBYTE(x) (((x) - 0x01010101) & ~(x)&0x80808080)
@@ -204,10 +251,14 @@ rrrrr,11111100000 + wwwww,01101000000:XII:::bsw
   TRACE_ALU_RESULT (GR[reg3]);
 }
 
+
+
 // CALLT
 0000001000,iiiiii:II:::callt
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "callt <imm6>"
 {
   unsigned32 adr;
@@ -221,6 +272,55 @@ rrrrr,11111100000 + wwwww,01101000000:XII:::bsw
 }
 
 
+
+// CAXI
+rrrrr,111111,RRRRR + wwwww,00011101110:IX:::caxi
+*v850e2
+*v850e2v3
+"caxi [reg1], reg2, reg3"
+{
+  unsigned int z,s,cy,ov;
+  unsigned32 addr;
+  unsigned32 token,result;
+
+  addr = GR[reg1];
+
+  if (mpu_load_mem_test(sd, addr, 4, reg1) 
+      && mpu_store_mem_test(sd, addr, 4, reg1))
+    {
+      token = load_data_mem (sd, addr, 4);
+
+      TRACE_ALU_INPUT2 (token, GR[reg2]);
+
+      result = GR[reg2] - token;
+
+      z = (result == 0);
+      s = (result & 0x80000000);
+      cy = (GR[reg2] < token);
+      ov = ((GR[reg2] & 0x80000000) != (token & 0x80000000)
+	    && (GR[reg2] & 0x80000000) != (result & 0x80000000));
+
+      if (result == 0)
+	{
+	  store_data_mem (sd, addr, 4, GR[reg3]);
+	  GR[reg3] = token;
+	}
+      else
+	{
+	  store_data_mem (sd, addr, 4, token);
+	  GR[reg3] = token;
+	}
+  
+      /* Set condition codes.  */
+      PSW &= ~(PSW_Z | PSW_S | PSW_CY | PSW_OV);
+      PSW |= ((z ? PSW_Z : 0) | (s ? PSW_S : 0)
+	      | (cy ? PSW_CY : 0) | (ov ? PSW_OV : 0));
+
+      TRACE_ALU_RESULT1 (GR[reg3]);
+    }
+}
+
+
 // CLR1
 10,bbb,111110,RRRRR + dddddddddddddddd:VIII:::clr1
 "clr1 <bit3>, <disp16>[r<reg1>]"
@@ -231,16 +331,21 @@ rrrrr,11111100000 + wwwww,01101000000:XII:::bsw
 rrrrr,111111,RRRRR + 0000000011100100:IX:::clr1
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "clr1 r<reg2>, [r<reg1>]"
 {
   COMPAT_2 (OP_E407E0 ());
 }
 
 
+
 // CTRET
 0000011111100000 + 0000000101000100:X:::ctret
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "ctret"
 {
   nia  = (CTPC & ~1);
@@ -248,10 +353,14 @@ rrrrr,111111,RRRRR + 0000000011100100:IX:::clr1
   TRACE_BRANCH1 (PSW);
 }
 
+
+
 // CMOV
 rrrrr,111111,RRRRR + wwwww,011001,cccc,0:XI:::cmov
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "cmov %s<cccc>, r<reg1>, r<reg2>, r<reg3>"
 {
   int cond = condition_met (cccc);
@@ -263,6 +372,8 @@ rrrrr,111111,RRRRR + wwwww,011001,cccc,0:XI:::cmov
 rrrrr,111111,iiiii + wwwww,011000,cccc,0:XII:::cmov
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "cmov %s<cccc>, <imm5>, r<reg2>, r<reg3>"
 {
   int cond = condition_met (cccc);
@@ -271,6 +382,8 @@ rrrrr,111111,iiiii + wwwww,011000,cccc,0:XII:::cmov
   TRACE_ALU_RESULT (GR[reg3]);
 }
 
+
+
 // CMP
 rrrrr,001111,RRRRR:I:::cmp
 "cmp r<reg1>, r<reg2>"
@@ -301,6 +414,8 @@ rrrrr,010011,iiiii:II:::cmp
 0000011001,iiiii,L + LLLLLLLLLLL,RRRRR:XIII:::dispose
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "dispose <imm5>, <list12>":RRRRR == 0
 "dispose <imm5>, <list12>, [reg1]"
 {
@@ -329,10 +444,13 @@ rrrrr,010011,iiiii:II:::cmp
 }
 
 
+
 // DIV
 rrrrr,111111,RRRRR + wwwww,01011000000:XI:::div
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "div r<reg1>, r<reg2>, r<reg3>"
 {
   COMPAT_2 (OP_2C007E0 ());
@@ -390,6 +508,8 @@ rrrrr!0,000010,RRRRR!0:I:::divh
 rrrrr,111111,RRRRR + wwwww,01010000000:XI:::divh
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "divh r<reg1>, r<reg2>, r<reg3>"
 {
   COMPAT_2 (OP_28007E0 ());
@@ -400,6 +520,8 @@ rrrrr,111111,RRRRR + wwwww,01010000000:XI:::divh
 rrrrr,111111,RRRRR + wwwww,01010000010:XI:::divhu
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "divhu r<reg1>, r<reg2>, r<reg3>"
 {
   COMPAT_2 (OP_28207E0 ());
@@ -410,12 +532,60 @@ rrrrr,111111,RRRRR + wwwww,01010000010:XI:::divhu
 rrrrr,111111,RRRRR + wwwww,01011000010:XI:::divu
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "divu r<reg1>, r<reg2>, r<reg3>"
 {
   COMPAT_2 (OP_2C207E0 ());
 }
 
 
+// DIVQ
+rrrrr,111111,RRRRR + wwwww,01011111100:XI:::divq
+*v850e2
+*v850e2v3
+"divq r<reg1>, r<reg2>, r<reg3>"
+{
+  unsigned int quotient;
+  unsigned int remainder;
+  unsigned int divide_by;
+  unsigned int divide_this;
+
+  TRACE_ALU_INPUT2 (GR[reg1], GR[reg2]);
+
+  divide_by   = GR[reg1];
+  divide_this = GR[reg2];
+  v850_div (sd, divide_by, divide_this, &quotient, &remainder);
+  GR[reg2] = quotient;
+  GR[reg3] = remainder;
+
+  TRACE_ALU_RESULT2 (GR[reg2], GR[reg3]);
+}
+
+
+// DIVQU
+rrrrr,111111,RRRRR + wwwww,01011111110:XI:::divqu
+*v850e2
+*v850e2v3
+"divq r<reg1>, r<reg2>, r<reg3>"
+{
+  unsigned int quotient;
+  unsigned int remainder;
+  unsigned int divide_by;
+  unsigned int divide_this;
+
+  TRACE_ALU_INPUT2 (GR[reg1], GR[reg2]);
+  
+  divide_by   = GR[reg1];
+  divide_this = GR[reg2];
+  v850_divu (sd, divide_by, divide_this, &quotient, &remainder);
+  GR[reg2] = quotient;
+  GR[reg3] = remainder;
+
+  TRACE_ALU_RESULT2 (GR[reg2], GR[reg3]);
+}
+
+
 // EI
 1000011111100000 + 0000000101100000:X:::ei
 "ei"
@@ -425,6 +595,76 @@ rrrrr,111111,RRRRR + wwwww,01011000010:XI:::divu
 
 
 
+// EIRET
+0000011111100000 + 0000000101001000:X:::eiret
+"eiret"
+*v850e2
+*v850e2v3
+{
+  TRACE_ALU_INPUT1 (MPM & MPM_AUE);
+
+  nia = EIPC;	/* next PC */
+  if (MPM & MPM_AUE)
+    {
+      PSW = EIPSW;
+    }
+  else
+    {
+      PSW = (PSW & (PSW_NPV | PSW_DMP | PSW_IMP))
+	| (EIPSW & ~(PSW_NPV | PSW_DMP | PSW_IMP));
+    }
+
+  TRACE_ALU_RESULT1 (PSW);
+  TRACE_BRANCH_RESULT (nia);
+}
+
+
+
+// FERET
+0000011111100000 + 0000000101001010:X:::feret
+"feret"
+*v850e2
+*v850e2v3
+{
+  TRACE_ALU_INPUT1 (MPM & MPM_AUE);
+
+  nia = FEPC;	/* next PC */
+  if (MPM & MPM_AUE)
+    {
+      PSW = FEPSW;
+    }
+  else
+    {
+      PSW = (PSW & (PSW_NPV | PSW_DMP | PSW_IMP))
+	| (FEPSW & ~(PSW_NPV | PSW_DMP | PSW_IMP));
+    }
+
+  TRACE_ALU_RESULT1 (PSW);
+  TRACE_BRANCH_RESULT (nia);
+}
+
+
+// FETRAP
+0,bbbb!0,00001000000:I:::fetrap
+"fetrap"
+*v850e2
+*v850e2v3
+{
+  TRACE_ALU_INPUT0 ();
+
+  FEPC = PC + 2;
+  FEPSW = PSW;
+  ECR &= ~ECR_FECC;
+  ECR |= (0x30 + bit4) << 16;
+  FEIC = 0x30 + bit4;
+  PSW |= PSW_EP | PSW_ID | PSW_NP;
+  nia = 0x30;	/* next PC */
+
+  TRACE_ALU_RESULT1 (PSW);
+  TRACE_BRANCH_RESULT (nia);
+}
+
+
 // HALT
 0000011111100000 + 0000000100100000:X:::halt
 "halt"
@@ -434,10 +674,33 @@ rrrrr,111111,RRRRR + wwwww,01011000010:XI:::divu
 
 
 
+// HSH
+rrrrr,11111100000 + wwwww,01101000110:XII:::hsh
+*v850e2
+*v850e2v3
+"hsh r<reg2>, r<reg3>"
+{
+  unsigned32 value;
+  TRACE_ALU_INPUT1 (GR[reg2]);
+
+  value = 0xffff & GR[reg2];
+  GR[reg3] = GR[reg2];
+
+  PSW &= ~(PSW_Z | PSW_S | PSW_CY | PSW_OV);
+
+  if (value == 0) { PSW |= PSW_Z; PSW |= PSW_CY; }
+  if (value & 0x80000000) PSW |= PSW_S;
+
+  TRACE_ALU_RESULT1 (GR[reg3]);
+}
+
+
 // HSW
 rrrrr,11111100000 + wwwww,01101000100:XII:::hsw
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "hsw r<reg2>, r<reg3>"
 {
   unsigned32 value;
@@ -469,6 +732,16 @@ rrrrr!0,11110,dddddd + ddddddddddddddd,0:V:::jarl
   TRACE_BRANCH1 (GR[reg2]);
 }
 
+00000010111,RRRRR!0 + iiiiiiiiiiiiiiii + IIIIIIIIIIIIIIII:VI:::jarl32
+*v850e2
+*v850e2v3
+"jarl <imm32>, r<reg1>"
+{
+  GR[reg1] = nia;
+  nia = (cia + imm32) & ~1;
+
+  TRACE_BRANCH_RESULT (nia);
+}
 
 
 // JMP
@@ -479,6 +752,15 @@ rrrrr!0,11110,dddddd + ddddddddddddddd,0:V:::jarl
   TRACE_BRANCH0 ();
 }
 
+00000110111,RRRRR + iiiiiiiiiiiiiiii + IIIIIIIIIIIIIIII:VI:::jmp32
+*v850e2
+*v850e2v3
+"jmp <imm32>[r<reg1>]"
+{
+  nia = (GR[reg1] + imm32) & ~1;
+
+  TRACE_BRANCH_RESULT (nia);
+}
 
 
 // JR
@@ -490,6 +772,17 @@ rrrrr!0,11110,dddddd + ddddddddddddddd,0:V:::jarl
 }
 
 
+// JR32
+00000010111,00000 + iiiiiiiiiiiiiiii + IIIIIIIIIIIIIIII:VI:::jr32
+*v850e2
+*v850e2v3
+"jr <imm32>"
+{
+  nia = (cia + imm32) & ~1;
+
+  TRACE_BRANCH_RESULT (nia);
+}
+
 
 // LD
 rrrrr,111000,RRRRR + dddddddddddddddd:VII:::ld.b
@@ -498,47 +791,368 @@ rrrrr,111000,RRRRR + dddddddddddddddd:VII:::ld.b
   COMPAT_2 (OP_700 ());
 }
 
+00000111100,RRRRR+wwwww,ddddddd,0101+dddddddddddddddd:XIV:::ld.b
+"ld.b <disp23>[r<reg1>], r<reg3>"
+*v850e2v3
+{
+  unsigned32 addr = GR[reg1] + disp23;
+  unsigned32 result = EXTEND8 (load_data_mem (sd, addr, 1));
+  GR[reg3] = result;
+  TRACE_LD (addr, result);
+}
+
 rrrrr,111001,RRRRR + ddddddddddddddd,0:VII:::ld.h
 "ld.h <disp16>[r<reg1>], r<reg2>"
 {
   COMPAT_2 (OP_720 ());
 }
 
+00000111100,RRRRR+wwwww,dddddd,00111+dddddddddddddddd:XIV:::ld.h
+*v850e2v3
+"ld.h <disp23>[r<reg1>], r<reg3>"
+{
+  unsigned32 addr = GR[reg1] + disp23;
+  unsigned32 result = EXTEND16 (load_data_mem (sd, addr, 2));
+  GR[reg3] = result;
+  TRACE_LD (addr, result);
+}
+
 rrrrr,111001,RRRRR + ddddddddddddddd,1:VII:::ld.w
 "ld.w <disp16>[r<reg1>], r<reg2>"
 {
   COMPAT_2 (OP_10720 ());
 }
 
+00000111100,RRRRR+wwwww,dddddd,01001+dddddddddddddddd:XIV:::ld.w
+*v850e2v3
+"ld.w <disp23>[r<reg1>], r<reg3>"
+{
+  unsigned32 addr = GR[reg1] + disp23;
+  unsigned32 result = load_data_mem (sd, addr, 4);
+  GR[reg3] = result;
+  TRACE_LD (addr, result);
+}
+
 rrrrr!0,11110,b,RRRRR + ddddddddddddddd,1:VII:::ld.bu
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "ld.bu <disp16>[r<reg1>], r<reg2>"
 {
   COMPAT_2 (OP_10780 ());
 }
 
+00000111101,RRRRR+wwwww,ddddddd,0101+dddddddddddddddd:XIV:::ld.bu
+*v850e2v3
+"ld.bu <disp23>[r<reg1>], r<reg3>"
+{ 
+  unsigned32 addr = GR[reg1] + disp23;
+  unsigned32 result = load_data_mem (sd, addr, 1);
+  GR[reg3] = result;
+  TRACE_LD (addr, result);
+}
+
 rrrrr!0,111111,RRRRR + ddddddddddddddd,1:VII:::ld.hu
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "ld.hu <disp16>[r<reg1>], r<reg2>"
 {
   COMPAT_2 (OP_107E0 ());
 }
 
+00000111101,RRRRR+wwwww,dddddd,00111+dddddddddddddddd:XIV:::ld.hu
+*v850e2v3
+"ld.hu <disp23>[r<reg1>], r<reg3>"
+{
+  unsigned32 addr = GR[reg1] + disp23;
+  unsigned32 result = load_data_mem (sd, addr, 2);
+  GR[reg3] = result;
+  TRACE_LD (addr, result);
+}
+
+
 
 // LDSR
 regID,111111,RRRRR + 0000000000100000:IX:::ldsr
 "ldsr r<reg1>, s<regID>"
 {
+  uint32 sreg = GR[reg1];
   TRACE_ALU_INPUT1 (GR[reg1]);
   
-  if (&PSW == &SR[regID])
-    PSW = (GR[reg1] & (CPU)->psw_mask);
+   if ((idecode_issue == idecode_v850e2_issue
+       || idecode_issue == idecode_v850e2v3_issue)
+      && regID < 28)
+    {
+      int protect_p = (PSW & PSW_NPV) ? 1 : 0;
+
+      
+      switch (BSEL & 0xffff)
+	{
+	case 0x0000:
+	  if ((PSW & PSW_NPV)
+	      && ((regID >= 8 && regID <= 12)
+		  || (regID >= 22 && regID <= 27)
+		  || regID == PSW_REGNO))
+	    {
+	      protect_p = 0;
+	    }
+	  break;
+	case 0x1000:	/* MPU0 */
+	  break;
+	case 0x1001:	/* MPU1 */
+	  break;
+	case 0x2000:	/* FPU */
+	  if ((PSW & PSW_NPV)
+	      && ((/* regID >= 0 && */ regID <= 5)
+		  || regID == 8 
+		  || regID == 9 
+		  || regID == 10 
+		  || (regID >= 11 && regID <= 26)))
+	    {
+	      protect_p = 0;
+	    }
+	  break;
+	case 0xff00:
+	  if ((PSW & PSW_NPV)
+	       && (regID == 6 
+		   || regID == 7 
+		   || regID == 8 
+		   || regID == 9 
+		   || regID == 10 
+		   || (regID >= 11 && regID <= 15)
+		   || regID == 18 
+		   || regID == 19 
+		   || (regID >= 21 && regID <= 27)))
+	    {
+	      protect_p = 0;
+	    }
+	  break;
+	case 0xffff:
+	  if ((PSW & PSW_NPV)
+	       && (regID == 6 
+		   || regID == 7 
+		   || regID == 8 
+		   || regID == 9 
+		   || regID == 10 
+		   || regID == 11 
+		   || regID == 12 
+		   || regID == 15 
+		   || regID == 18 
+		   || regID == 19 
+		   || (regID >= 21 && regID <= 27)))
+	    {
+	      protect_p = 0;
+	    }
+	  break;
+	}
+
+      if (!protect_p)
+	{
+	  switch (BSEL & 0xffff)
+	    {
+	    case 0x0000:
+	    case 0xff00:	/* user0 bank */
+	    case 0xffff:	/* user1 bank */
+	      if(regID == PSW_REGNO)
+		{
+		  SR[regID] = sreg & ((PSW & PSW_NPV) ? 0xf : ~0);
+		}
+	      else
+		{
+		  SR[regID] = sreg;
+		}
+	      break;
+	    case 0x1000:
+	      MPU0_SR[regID] = sreg;
+	      break;
+	    case 0x1001:
+	      if (regID == MPC_REGNO)
+		{
+		  PPC &= ~PPC_PPE;
+		  SPAL &= ~SPAL_SPE;
+		  IPA0L &= ~IPA_IPE;
+		  IPA1L &= ~IPA_IPE;
+		  IPA2L &= ~IPA_IPE;
+		  IPA3L &= ~IPA_IPE;
+		  DPA0L &= ~DPA_DPE;
+		  DPA1L &= ~DPA_DPE;
+		  DCC &= ~(DCC_DCE0 | DCC_DCE1);
+		}
+	      else
+		{
+		  MPU1_SR[regID] = sreg;
+		}
+	      break;
+	    case 0x2000:	/* FPU */
+	      if (regID == FPST_REGNO)
+		{
+		  unsigned int val = FPSR & ~(FPSR_PR | FPSR_XC | FPSR_XP);
+	      
+		  val |= ((sreg & FPST_PR) ? FPSR_PR : 0)
+		    | ((sreg & FPST_XCE) ? FPSR_XCE : 0)
+		    | ((sreg & FPST_XCV) ? FPSR_XCV : 0)
+		    | ((sreg & FPST_XCZ) ? FPSR_XCZ : 0)
+		    | ((sreg & FPST_XCO) ? FPSR_XCO : 0)
+		    | ((sreg & FPST_XCU) ? FPSR_XCU : 0)
+		    | ((sreg & FPST_XCI) ? FPSR_XCI : 0)
+		    | ((sreg & FPST_XPV) ? FPSR_XPV : 0)
+		    | ((sreg & FPST_XPZ) ? FPSR_XPZ : 0)
+		    | ((sreg & FPST_XPO) ? FPSR_XPO : 0)
+		    | ((sreg & FPST_XPU) ? FPSR_XPU : 0)
+		    | ((sreg & FPST_XPI) ? FPSR_XPI : 0);
+		  FPSR = val;
+		}
+	      else if (regID == FPCFG_REGNO)
+		{
+		  unsigned int val = FPSR & ~(FPSR_RM | FPSR_XE);
+
+		  val |= (((sreg & FPCFG_RM) >> 7) << 18)
+		    | ((sreg & FPCFG_XEV) ? FPSR_XEV : 0)
+		    | ((sreg & FPCFG_XEZ) ? FPSR_XEZ : 0)
+		    | ((sreg & FPCFG_XEO) ? FPSR_XEO : 0)
+		    | ((sreg & FPCFG_XEU) ? FPSR_XEU : 0)
+		    | ((sreg & FPCFG_XEI) ? FPSR_XEI : 0);
+		  FPSR = val;
+		}
+
+	      FPU_SR[regID] = sreg;
+	      break;
+	    }
+	}
+    }
   else
-    SR[regID] = GR[reg1];
+    {
+      SR[regID] = sreg;
+    }
+ 
+  TRACE_ALU_RESULT (sreg);
+}
+
+
+
+// MAC
+rrrrr,111111,RRRRR + wwww,0011110,mmmm,0:XI:::mac
+*v850e2
+*v850e2v3
+"mac r<reg1>, r<reg2>, r<reg3e>, r<reg4e>"
+{
+  unsigned long op0;
+  unsigned long op1;
+  unsigned long op2;
+  unsigned long op2hi;
+  unsigned long lo;
+  unsigned long mid1;
+  unsigned long mid2;
+  unsigned long hi;
+  unsigned long RdLo;
+  unsigned long RdHi;
+  int           carry;
+  bfd_boolean sign;
+
+  op0 = GR[reg1];
+  op1 = GR[reg2];
+  op2 = GR[reg3e];
+  op2hi = GR[reg3e+1];
+
+  TRACE_ALU_INPUT4 (op0, op1, op2, op2hi);
+
+  sign = (op0 ^ op1) & 0x80000000;
+	  
+  if (((signed long) op0) < 0)
+    op0 = - op0;
+	  
+  if (((signed long) op1) < 0)
+    op1 = - op1;
+      
+  /* We can split the 32x32 into four 16x16 operations. This ensures
+     that we do not lose precision on 32bit only hosts: */
+  lo   = ( (op0        & 0xFFFF) *  (op1        & 0xFFFF));
+  mid1 = ( (op0        & 0xFFFF) * ((op1 >> 16) & 0xFFFF));
+  mid2 = (((op0 >> 16) & 0xFFFF) *  (op1        & 0xFFFF));
+  hi   = (((op0 >> 16) & 0xFFFF) * ((op1 >> 16) & 0xFFFF));
+  
+  /* We now need to add all of these results together, taking care
+     to propogate the carries from the additions: */
+  RdLo = Add32 (lo, (mid1 << 16), & carry);
+  RdHi = carry;
+  RdLo = Add32 (RdLo, (mid2 << 16), & carry);
+  RdHi += (carry + ((mid1 >> 16) & 0xFFFF) + ((mid2 >> 16) & 0xFFFF) + hi);
+
+  if (sign)
+    {
+      RdLo = ~ RdLo;
+      RdHi = ~ RdHi;
+      if (RdLo == 0xFFFFFFFF)
+	{
+	  RdLo = 0;
+	  RdHi += 1;
+	}
+      else
+	RdLo += 1;
+    }
+
+  RdLo = Add32 (RdLo, op2, & carry);
+  RdHi += carry + op2hi; 
+
+  /* Store the result and condition codes.  */
+  GR[reg4e] = RdLo;
+  GR[reg4e + 1 ] = RdHi;
+
+  TRACE_ALU_RESULT2 (RdLo, RdHi);
+}
+
+
+
+// MACU
+rrrrr,111111,RRRRR + wwww,0011111,mmmm,0:XI:::macu
+*v850e2
+*v850e2v3
+"macu r<reg1>, r<reg2>, r<reg3e>, r<reg4e>"
+{
+  unsigned long op0;
+  unsigned long op1;
+  unsigned long op2;
+  unsigned long op2hi;
+  unsigned long lo;
+  unsigned long mid1;
+  unsigned long mid2;
+  unsigned long hi;
+  unsigned long RdLo;
+  unsigned long RdHi;
+  int           carry;
+  
+  op0 = GR[reg1];
+  op1 = GR[reg2];
+  op2 = GR[reg3e];
+  op2hi = GR[reg3e + 1];
+
+  TRACE_ALU_INPUT4 (op0, op1, op2, op2hi);
+
+  /* We can split the 32x32 into four 16x16 operations. This ensures
+     that we do not lose precision on 32bit only hosts: */
+  lo   = ( (op0        & 0xFFFF) *  (op1        & 0xFFFF));
+  mid1 = ( (op0        & 0xFFFF) * ((op1 >> 16) & 0xFFFF));
+  mid2 = (((op0 >> 16) & 0xFFFF) *  (op1        & 0xFFFF));
+  hi   = (((op0 >> 16) & 0xFFFF) * ((op1 >> 16) & 0xFFFF));
   
-  TRACE_ALU_RESULT (SR[regID]);
+  /* We now need to add all of these results together, taking care
+     to propogate the carries from the additions: */
+  RdLo = Add32 (lo, (mid1 << 16), & carry);
+  RdHi = carry;
+  RdLo = Add32 (RdLo, (mid2 << 16), & carry);
+  RdHi += (carry + ((mid1 >> 16) & 0xFFFF) + ((mid2 >> 16) & 0xFFFF) + hi);
+
+  RdLo = Add32 (RdLo, op2, & carry);
+  RdHi += carry + op2hi; 
+
+  /* Store the result and condition codes.  */
+  GR[reg4e] = RdLo;
+  GR[reg4e+1] = RdHi;
+
+  TRACE_ALU_RESULT2 (RdLo, RdHi);
 }
 
 
@@ -552,7 +1166,6 @@ rrrrr!0,000000,RRRRR:I:::mov
   TRACE_ALU_RESULT (GR[reg2]);
 }
 
-
 rrrrr!0,010000,iiiii:II:::mov
 "mov <imm5>, r<reg2>"
 {
@@ -562,6 +1175,8 @@ rrrrr!0,010000,iiiii:II:::mov
 00000110001,RRRRR + iiiiiiiiiiiiiiii + IIIIIIIIIIIIIIII:VI:::mov
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "mov <imm32>, r<reg1>"
 {
   SAVE_2;
@@ -596,6 +1211,8 @@ rrrrr!0,110010,RRRRR + iiiiiiiiiiiiiiii:VI:::movhi
 rrrrr,111111,RRRRR + wwwww,01000100000:XI:::mul
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "mul r<reg1>, r<reg2>, r<reg3>"
 {
   COMPAT_2 (OP_22007E0 ());
@@ -604,6 +1221,8 @@ rrrrr,111111,RRRRR + wwwww,01000100000:XI:::mul
 rrrrr,111111,iiiii + wwwww,01001,IIII,00:XII:::mul
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "mul <imm9>, r<reg2>, r<reg3>"
 {
   COMPAT_2 (OP_24007E0 ());
@@ -638,6 +1257,8 @@ rrrrr!0,110111,RRRRR + iiiiiiiiiiiiiiii:VI:::mulhi
 rrrrr,111111,RRRRR + wwwww,01000100010:XI:::mulu
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "mulu r<reg1>, r<reg2>, r<reg3>"
 {
   COMPAT_2 (OP_22207E0 ());
@@ -646,6 +1267,8 @@ rrrrr,111111,RRRRR + wwwww,01000100010:XI:::mulu
 rrrrr,111111,iiiii + wwwww,01001,IIII,10:XII:::mulu
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "mulu <imm9>, r<reg2>, r<reg3>"
 {
   COMPAT_2 (OP_24207E0 ());
@@ -681,6 +1304,8 @@ rrrrr,000001,RRRRR:I:::not
 rrrrr,111111,RRRRR + 0000000011100010:IX:::not1
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "not1 r<reg2>, r<reg1>"
 {
   COMPAT_2 (OP_E207E0 ());
@@ -710,6 +1335,8 @@ rrrrr,110100,RRRRR + iiiiiiiiiiiiiiii:VI:::ori
 0000011110,iiiii,L + LLLLLLLLLLL,00001:XIII:::prepare
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "prepare <list12>, <imm5>"
 {
   int  i;
@@ -735,6 +1362,8 @@ rrrrr,110100,RRRRR + iiiiiiiiiiiiiiii:VI:::ori
 0000011110,iiiii,L + LLLLLLLLLLL,00011:XIII:::prepare00
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "prepare <list12>, <imm5>, sp"
 {
   COMPAT_2 (OP_30780 ());
@@ -743,6 +1372,8 @@ rrrrr,110100,RRRRR + iiiiiiiiiiiiiiii:VI:::ori
 0000011110,iiiii,L + LLLLLLLLLLL,01011 + iiiiiiiiiiiiiiii:XIII:::prepare01
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "prepare <list12>, <imm5>, <uimm16>"
 {
   COMPAT_2 (OP_B0780 ());
@@ -751,6 +1382,8 @@ rrrrr,110100,RRRRR + iiiiiiiiiiiiiiii:VI:::ori
 0000011110,iiiii,L + LLLLLLLLLLL,10011 + iiiiiiiiiiiiiiii:XIII:::prepare10
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "prepare <list12>, <imm5>, <uimm16>"
 {
   COMPAT_2 (OP_130780 ());
@@ -759,6 +1392,8 @@ rrrrr,110100,RRRRR + iiiiiiiiiiiiiiii:VI:::ori
 0000011110,iiiii,L + LLLLLLLLLLL,11011 + iiiiiiiiiiiiiiii + dddddddddddddddd:XIII:::prepare11
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "prepare <list12>, <imm5>, <uimm32>"
 {
   COMPAT_2 (OP_1B0780 ());
@@ -803,12 +1438,23 @@ rrrrr,010101,iiiii:II:::sar
   COMPAT_1 (OP_2A0 ());
 }
 
+rrrrr,111111,RRRRR + wwwww,00010100010:XI:::sar
+*v850e2
+*v850e2v3
+"sar r<reg1>, r<reg2>, r<reg3>"
+{
+  TRACE_ALU_INPUT2 (GR[reg1], GR[reg2]);
+  v850_sar(sd, GR[reg1], GR[reg2], &GR[reg3]); 
+  TRACE_ALU_RESULT1 (GR[reg3]);
+}
 
 
 // SASF
 rrrrr,1111110,cccc + 0000001000000000:IX:::sasf
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "sasf %s<cccc>, r<reg2>"
 {
   COMPAT_2 (OP_20007E0 ());
@@ -816,7 +1462,6 @@ rrrrr,1111110,cccc + 0000001000000000:IX:::sasf
 
 
 
-
 // SATADD
 rrrrr!0,000110,RRRRR:I:::satadd
 "satadd r<reg1>, r<reg2>"
@@ -830,6 +1475,16 @@ rrrrr!0,010001,iiiii:II:::satadd
   COMPAT_1 (OP_220 ());
 }
 
+rrrrr,111111,RRRRR + wwwww,01110111010:XI:::satadd
+*v850e2
+*v850e2v3
+"satadd r<reg1>, r<reg2>, r<reg3>"
+{
+  TRACE_ALU_INPUT2 (GR[reg1], GR[reg2]);
+  v850_satadd (sd, GR[reg1], GR[reg2], &GR[reg3]);
+  TRACE_ALU_RESULT1 (GR[reg3]);
+}
+
 
 
 // SATSUB
@@ -839,6 +1494,16 @@ rrrrr!0,000101,RRRRR:I:::satsub
   COMPAT_1 (OP_A0 ());
 }
 
+rrrrr,111111,RRRRR + wwwww,01110011010:XI:::satsub
+*v850e2
+*v850e2v3
+"satsub r<reg1>, r<reg2>, r<reg3>"
+{
+  TRACE_ALU_INPUT2 (GR[reg1], GR[reg2]);
+  v850_satsub (sd, GR[reg1], GR[reg2], &GR[reg3]);
+  TRACE_ALU_RESULT1 (GR[reg3]);
+}
+
 
 
 // SATSUBI
@@ -859,6 +1524,234 @@ rrrrr!0,000100,RRRRR:I:::satsubr
 
 
 
+//SBF
+rrrrr,111111,RRRRR + wwwww,011100,cccc!13,0:XI:::sbf
+*v850e2
+*v850e2v3
+"sbf %s<cccc>, r<reg1>, r<reg2>, r<reg3>"
+{
+  int cond = condition_met (cccc);
+  TRACE_ALU_INPUT3 (cond, GR[reg1], GR[reg2]);
+  GR[reg3] = GR[reg2] - GR[reg1] - (cond ? 1 : 0);
+  TRACE_ALU_RESULT1 (GR[reg3]);
+}
+
+
+
+// SCH0L
+rrrrr,11111100000 + wwwww,01101100100:IX:::sch0l
+*v850e2
+*v850e2v3
+"sch0l r<reg2>, r<reg3>"
+{
+  unsigned int pos, op0;
+
+  TRACE_ALU_INPUT1 (GR[reg2]);
+
+  op0 = GR[reg2];
+
+  if (op0 == 0xffffffff)
+    {
+      PSW &= ~PSW_CY;
+      PSW &= ~PSW_OV;
+      PSW &= ~PSW_S;
+      PSW |= PSW_Z;
+      pos = 0;
+    }
+  else if (op0 == 0xfffffffe)
+    {
+      PSW |= PSW_CY;
+      PSW &= ~PSW_OV;
+      PSW &= ~PSW_S;
+      PSW &= ~PSW_Z;
+      pos = 32;
+    }
+  else
+    {
+      pos = 1;
+      while (op0 & 0x80000000) 
+	{
+	  op0 <<= 1; 
+	  pos++;
+	}
+      PSW &= ~PSW_CY;
+      PSW &= ~PSW_OV;
+      PSW &= ~PSW_S;
+      PSW &= ~PSW_Z;
+    }
+
+  GR[reg3] = pos;
+
+  TRACE_ALU_RESULT1 (GR[reg3]);
+}
+
+
+
+// SCH0R
+rrrrr,11111100000 + wwwww,01101100000:IX:::sch0r
+*v850e2
+*v850e2v3
+"sch0r r<reg2>, r<reg3>"
+{
+  unsigned int pos, op0;
+
+  TRACE_ALU_INPUT1 (GR[reg2]);
+
+  op0 = GR[reg2];
+
+  if (op0 == 0xffffffff)
+    {
+      PSW &= ~PSW_CY;
+      PSW &= ~PSW_OV;
+      PSW &= ~PSW_S;
+      PSW |= PSW_Z;
+      pos = 0;
+    }
+  else if (op0 == 0x7fffffff)
+    {
+      PSW |= PSW_CY;
+      PSW &= ~PSW_OV;
+      PSW &= ~PSW_S;
+      PSW &= ~PSW_Z;
+      pos = 32;
+    }
+  else
+    {
+      pos = 1;
+      while (op0 & 0x00000001) 
+	{
+	  op0 >>= 1; 
+	  pos++;
+	}
+      PSW &= ~PSW_CY;
+      PSW &= ~PSW_OV;
+      PSW &= ~PSW_S;
+      PSW &= ~PSW_Z;
+    }
+
+  GR[reg3] = pos;
+
+  TRACE_ALU_RESULT1 (GR[reg3]);
+}
+
+// SCH1L
+rrrrr,11111100000 + wwwww,01101100110:IX:::sch1l
+*v850e2
+*v850e2v3
+"sch1l r<reg2>, r<reg3>"
+{
+  unsigned int pos, op0;
+
+  TRACE_ALU_INPUT1 (GR[reg2]);
+
+  op0 = GR[reg2];
+
+  if (op0 == 0x00000000)
+    {
+      PSW &= ~PSW_CY;
+      PSW &= ~PSW_OV;
+      PSW &= ~PSW_S;
+      PSW |= PSW_Z;
+      pos = 0;
+    }
+  else if (op0 == 0x00000001)
+    {
+      PSW |= PSW_CY;
+      PSW &= ~PSW_OV;
+      PSW &= ~PSW_S;
+      PSW &= ~PSW_Z;
+      pos = 32;
+    }
+  else
+    {
+      pos = 1;
+      while (!(op0 & 0x80000000)) 
+	{
+	  op0 <<= 1; 
+	  pos++;
+	}
+      PSW &= ~PSW_CY;
+      PSW &= ~PSW_OV;
+      PSW &= ~PSW_S;
+      PSW &= ~PSW_Z;
+    }
+
+  GR[reg3] = pos;
+
+  TRACE_ALU_RESULT1 (GR[reg3]);
+}
+
+// SCH1R
+rrrrr,11111100000 + wwwww,01101100010:IX:::sch1r
+*v850e2
+*v850e2v3
+"sch1r r<reg2>, r<reg3>"
+{
+  unsigned int pos, op0;
+
+  TRACE_ALU_INPUT1 (GR[reg2]);
+
+  op0 = GR[reg2];
+
+  if (op0 == 0x00000000)
+    {
+      PSW &= ~PSW_CY;
+      PSW &= ~PSW_OV;
+      PSW &= ~PSW_S;
+      PSW |= PSW_Z;
+      pos = 0;
+    }
+  else if (op0 == 0x80000000)
+    {
+      PSW |= PSW_CY;
+      PSW &= ~PSW_OV;
+      PSW &= ~PSW_S;
+      PSW &= ~PSW_Z;
+      pos = 32;
+    }
+  else
+    {
+      pos = 1;
+      while (!(op0 & 0x00000001)) 
+	{
+	  op0 >>= 1;
+	  pos++;
+	}
+      PSW &= ~PSW_CY;
+      PSW &= ~PSW_OV;
+      PSW &= ~PSW_S;
+      PSW &= ~PSW_Z;
+    }
+
+  GR[reg3] = pos;
+
+  TRACE_ALU_RESULT1 (GR[reg3]);
+}
+
+//SHL
+rrrrr,111111,RRRRR + wwwww,00011000010:XI:::shl
+*v850e2
+*v850e2v3
+"shl r<reg1>, r<reg2>, r<reg3>"
+{
+  TRACE_ALU_INPUT2 (GR[reg1], GR[reg2]);
+  v850_shl(sd, GR[reg1], GR[reg2], &GR[reg3]);
+  TRACE_ALU_RESULT1 (GR[reg3]);
+}
+
+//SHR
+rrrrr,111111,RRRRR + wwwww,00010000010:XI:::shr
+*v850e2
+*v850e2v3
+"shr r<reg1>, r<reg2>, r<reg3>"
+{
+  TRACE_ALU_INPUT2 (GR[reg1], GR[reg2]);
+  v850_shr(sd, GR[reg1], GR[reg2], &GR[reg3]);
+  TRACE_ALU_RESULT1 (GR[reg3]);
+}
+
+
+
 // SETF
 rrrrr,1111110,cccc + 0000000000000000:IX:::setf
 "setf %s<cccc>, r<reg2>"
@@ -878,6 +1771,8 @@ rrrrr,1111110,cccc + 0000000000000000:IX:::setf
 rrrrr,111111,RRRRR + 0000000011100000:IX:::set1
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "set1 r<reg2>, [r<reg1>]"
 {
   COMPAT_2 (OP_E007E0 ());
@@ -966,6 +1861,8 @@ rrrrr,1010,dddddd,0:IV:::sld.w
 rrrrr!0,0000110,dddd:IV:::sld.bu
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "sld.b <disp4>[ep], r<reg2>":(PSW & PSW_US)
 "sld.bu <disp4>[ep], r<reg2>"
 {
@@ -987,6 +1884,8 @@ rrrrr!0,0000110,dddd:IV:::sld.bu
 rrrrr!0,0000111,dddd:IV:::sld.hu
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "sld.h <disp5>[ep], r<reg2>":(PSW & PSW_US)
 "sld.hu <disp5>[ep], r<reg2>"
 {
@@ -1005,6 +1904,8 @@ rrrrr!0,0000111,dddd:IV:::sld.hu
     }
 }
 
+
+
 // SST
 rrrrr,0111,ddddddd:IV:::sst.b
 "sst.b r<reg2>, <disp7>[ep]"
@@ -1031,24 +1932,108 @@ rrrrr,111010,RRRRR + dddddddddddddddd:VII:::st.b
   COMPAT_2 (OP_740 ());
 }
 
+00000111100,RRRRR + wwwww,ddddddd,1101 + dddddddddddddddd:XIV:::st.b
+*v850e2v3
+"st.b r<reg3>, <disp23>[r<reg1>]"
+{
+  unsigned32 addr = GR[reg1] + disp23;
+  store_data_mem (sd, addr, 1, GR[reg3]);
+  TRACE_ST (addr, GR[reg3]);
+}
+
 rrrrr,111011,RRRRR + ddddddddddddddd,0:VII:::st.h
 "st.h r<reg2>, <disp16>[r<reg1>]"
 {
   COMPAT_2 (OP_760 ());
 }
 
-rrrrr,111011,RRRRR + ddddddddddddddd,1:VII:::st.w
+00000111101,RRRRR+wwwww,dddddd,01101+dddddddddddddddd:XIV:::st.h
+*v850e2v3
+"st.h r<reg3>, <disp23>[r<reg1>]"
+{
+  unsigned32 addr = GR[reg1] + disp23;
+  store_data_mem (sd, addr, 2, GR[reg3]);
+  TRACE_ST (addr, GR[reg3]);
+}
+
+rrrrr,111011,RRRRR + ddddddddddddddd,1:VII:::st.w
 "st.w r<reg2>, <disp16>[r<reg1>]"
 {
   COMPAT_2 (OP_10760 ());
 }
 
+00000111100,RRRRR+wwwww,dddddd,01111+dddddddddddddddd:XIV:::st.w
+*v850e2v3
+"st.w r<reg3>, <disp23>[r<reg1>]"
+{
+  unsigned32 addr = GR[reg1] + disp23;
+  store_data_mem (sd, addr, 4, GR[reg3]);
+  TRACE_ST (addr, GR[reg3]);
+}
+
+
 // STSR
 rrrrr,111111,regID + 0000000001000000:IX:::stsr
 "stsr s<regID>, r<reg2>"
 {
-  TRACE_ALU_INPUT1 (SR[regID]);
-  GR[reg2] = SR[regID];
+  uint32 sreg = 0;
+
+  if ((idecode_issue == idecode_v850e2_issue
+       || idecode_issue == idecode_v850e2v3_issue)
+      && regID < 28)
+    {
+      switch (BSEL & 0xffff)
+	{
+	case 0x0000:
+	case 0xff00:	/* USER 0 */
+	case 0xffff:	/* USER 1 */
+	  sreg = SR[regID];
+	  break;
+	case 0x1000:
+	  sreg = MPU0_SR[regID];
+	  break;
+	case 0x1001:
+	  sreg = MPU1_SR[regID];
+	  break;
+	case 0x2000:
+	  if (regID == FPST_REGNO)
+	    {
+	      sreg = ((FPSR & FPSR_PR) ? FPST_PR : 0)
+		| ((FPSR & FPSR_XCE) ? FPST_XCE : 0)
+		| ((FPSR & FPSR_XCV) ? FPST_XCV : 0)
+		| ((FPSR & FPSR_XCZ) ? FPST_XCZ : 0)
+		| ((FPSR & FPSR_XCO) ? FPST_XCO : 0)
+		| ((FPSR & FPSR_XCU) ? FPST_XCU : 0)
+		| ((FPSR & FPSR_XCI) ? FPST_XCI : 0)
+		| ((FPSR & FPSR_XPV) ? FPST_XPV : 0)
+		| ((FPSR & FPSR_XPZ) ? FPST_XPZ : 0)
+		| ((FPSR & FPSR_XPO) ? FPST_XPO : 0)
+		| ((FPSR & FPSR_XPU) ? FPST_XPU : 0)
+		| ((FPSR & FPSR_XPI) ? FPST_XPI : 0);
+	    }
+	  else if (regID == FPCFG_REGNO)
+	    {
+	      sreg = (((FPSR & FPSR_RM) >> 18) << 7)
+		| ((FPSR & FPSR_XEV) ? FPCFG_XEV : 0)
+		| ((FPSR & FPSR_XEZ) ? FPCFG_XEZ : 0)
+		| ((FPSR & FPSR_XEO) ? FPCFG_XEO : 0)
+		| ((FPSR & FPSR_XEU) ? FPCFG_XEU : 0)
+		| ((FPSR & FPSR_XEI) ? FPCFG_XEI : 0);
+	    }
+	  else
+	    {
+	      sreg = FPU_SR[regID];
+	    }
+	  break;
+	}
+    }
+  else
+    {
+      sreg = SR[regID];
+    }
+
+  TRACE_ALU_INPUT1 (sreg);
+  GR[reg2] = sreg;
   TRACE_ALU_RESULT (GR[reg2]);
 }
 
@@ -1070,6 +2055,8 @@ rrrrr,001100,RRRRR:I:::subr
 00000000010,RRRRR:I:::switch
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "switch r<reg1>"
 {
   unsigned long adr;
@@ -1084,6 +2071,8 @@ rrrrr,001100,RRRRR:I:::subr
 00000000101,RRRRR:I:::sxb
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "sxb r<reg1>"
 {
   TRACE_ALU_INPUT1 (GR[reg1]);
@@ -1095,6 +2084,8 @@ rrrrr,001100,RRRRR:I:::subr
 00000000111,RRRRR:I:::sxh
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "sxh r<reg1>"
 {
   TRACE_ALU_INPUT1 (GR[reg1]);
@@ -1126,6 +2117,8 @@ rrrrr,001011,RRRRR:I:::tst
 rrrrr,111111,RRRRR + 0000000011100110:IX:::tst1
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "tst1 r<reg2>, [r<reg1>]"
 {
   COMPAT_2 (OP_E607E0 ());
@@ -1149,6 +2142,8 @@ rrrrr,110101,RRRRR + iiiiiiiiiiiiiiii:VI:::xori
 00000000100,RRRRR:I:::zxb
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "zxb r<reg1>"
 {
   TRACE_ALU_INPUT1 (GR[reg1]);
@@ -1160,6 +2155,8 @@ rrrrr,110101,RRRRR + iiiiiiiiiiiiiiii:VI:::xori
 00000000110,RRRRR:I:::zxh
 *v850e
 *v850e1
+*v850e2
+*v850e2v3
 "zxh r<reg1>"
 {
   TRACE_ALU_INPUT1 (GR[reg1]);
@@ -1178,6 +2175,8 @@ rrrrr,110101,RRRRR + iiiiiiiiiiiiiiii:VI:::xori
 
 11111,000010,00000:I:::dbtrap
 *v850e1
+*v850e2
+*v850e2v3
 "dbtrap"
 {
   DBPC = cia + 2;
@@ -1197,9 +2196,1069 @@ rrrrr,110101,RRRRR + iiiiiiiiiiiiiiii:VI:::xori
 // Return from debug trap: 0x146007e0
 0000011111100000 + 0000000101000110:X:::dbret
 *v850e1
+*v850e2
+*v850e2v3
 "dbret"
 {
   nia = DBPC;
   PSW = DBPSW;
   TRACE_BRANCH1 (PSW);
 }
+
+
+//
+// FLOAT
+//
+
+// Map condition code to a string
+:%s::::FFFF:int FFFF
+{
+  switch (FFFF)
+    {
+    case 0: return "f";
+    case 1: return "un";
+    case 2: return "eq";
+    case 3: return "ueq";
+    case 4: return "olt";
+    case 5: return "ult";
+    case 6: return "ole";
+    case 7: return "ule";
+    case 8: return "sf";
+    case 9: return "ngle";
+    case 10: return "seq";
+    case 11: return "ngl";
+    case 12: return "lt";
+    case 13: return "nge";
+    case 14: return "le";
+    case 15: return "ngt";
+    }
+  return "(null)";
+}
+
+// ABSF.D
+rrrr,011111100000 + wwww,010001011000:F_I:::absf_d
+*v850e2v3
+"absf.d r<reg2e>, r<reg3e>"
+{
+  sim_fpu ans, wop;
+  sim_fpu_status status;
+
+  sim_fpu_232to (&wop, GR[reg2e+1], GR[reg2e]);
+  TRACE_FP_INPUT_FPU1 (&wop);
+
+  status = sim_fpu_abs (&ans, &wop);
+  check_invalid_snan(sd, status, 1);
+
+  sim_fpu_to232 (&GR[reg3e+1], &GR[reg3e], &ans);
+
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// ABSF.S
+rrrrr,11111100000 + wwwww,10001001000:F_I:::absf_s
+*v850e2v3
+"absf.s r<reg2>, r<reg3>"
+{
+  sim_fpu ans, wop;
+  sim_fpu_status status;
+
+  sim_fpu_32to (&wop, GR[reg2]);
+  TRACE_FP_INPUT_FPU1 (&wop);
+
+  status = sim_fpu_abs (&ans, &wop);
+  check_invalid_snan(sd, status, 0);
+
+  sim_fpu_to32 (&GR[reg3], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// ADDF.D
+rrrr,0111111,RRRR,0 + wwww,010001110000:F_I:::addf_d
+*v850e2v3
+"addf.d r<reg1e>, r<reg2e>, r<reg3e>"
+{
+  sim_fpu ans, wop1, wop2;
+  sim_fpu_status status;
+
+  sim_fpu_232to (&wop1, GR[reg1e+1], GR[reg1e]);
+  sim_fpu_232to (&wop2, GR[reg2e+1], GR[reg2e]);
+  TRACE_FP_INPUT_FPU2 (&wop1, &wop2);
+
+  status = sim_fpu_add (&ans, &wop1, &wop2);
+  status |= sim_fpu_round_64 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+
+  update_fpsr (sd, status, FPSR_XEV | FPSR_XEI | FPSR_XEO | FPSR_XEU, 1);
+
+  sim_fpu_to232 (&GR[reg3e+1], &GR[reg3e], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// ADDF.S
+rrrrr,111111,RRRRR + wwwww,10001100000:F_I:::addf_s
+*v850e2v3
+"addf.s r<reg1>, r<reg2>, r<reg3>"
+{
+  sim_fpu ans, wop1, wop2;
+  sim_fpu_status status;
+
+  sim_fpu_32to (&wop1, GR[reg1]);
+  sim_fpu_32to (&wop2, GR[reg2]);
+  TRACE_FP_INPUT_FPU2 (&wop1, &wop2);
+
+  status = sim_fpu_add (&ans, &wop1, &wop2);
+  status |= sim_fpu_round_32 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+
+  update_fpsr (sd, status, FPSR_XEV | FPSR_XEI | FPSR_XEO | FPSR_XEU, 0);
+
+  sim_fpu_to32 (&GR[reg3], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// CMOVF.D
+rrrr,0111111,RRRR,0 + wwww!0,01000001,bbb,0:F_I:::cmovf_d
+*v850e2v3
+"cmovf.d <bbb>, r<reg1e>, r<reg2e>, r<reg3e>"
+{
+  unsigned int ophi,oplow;
+  sim_fpu ans, wop1, wop2;
+
+  sim_fpu_232to (&wop1, GR[reg1e+1], GR[reg1e]);
+  sim_fpu_232to (&wop2, GR[reg2e+1], GR[reg2e]);
+  TRACE_FP_INPUT_BOOL1_FPU2 (TEST_FPCC(bbb), &wop1, &wop2);
+
+  if (TEST_FPCC(bbb)) 
+    {
+      ophi = GR[reg1e+1];
+      oplow = GR[reg1e];
+      ans = wop1;
+    }
+  else
+    {
+      ophi = GR[reg2e+1];
+      oplow = GR[reg2e];
+      ans = wop2;
+    }
+
+  GR[reg3e+1] = ophi;
+  GR[reg3e] = oplow;
+  TRACE_FP_RESULT_FPU1 (&ans);;
+}
+
+// CMOVF.S
+rrrrr,111111,RRRRR + wwwww!0,1000000,bbb,0:F_I:::cmovf_s
+*v850e2v3
+"cmovf.d <bbb>, r<reg1>, r<reg2>, r<reg3>"
+{
+  unsigned int op;
+  sim_fpu ans, wop1, wop2;
+
+  sim_fpu_32to (&wop1, GR[reg1]);
+  sim_fpu_32to (&wop2, GR[reg2]);
+  TRACE_FP_INPUT_BOOL1_FPU2 (TEST_FPCC(bbb), &wop1, &wop2);
+
+  if (TEST_FPCC(bbb)) 
+  {
+    op = GR[reg1];
+    ans = wop1;
+  }
+  else
+  {
+    op = GR[reg2];
+    ans = wop2;
+  }
+
+  GR[reg3] = op;
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// CMPF.D
+rrrr,0111111,RRRR,0 + 0,FFFF,1000011,bbb,0:F_I:::cmpf_d
+*v850e2v3
+"cmpf.d %s<FFFF>, r<reg1e>, r<reg2e>":(bbb == 0)
+"cmpf.d %s<FFFF>, r<reg1e>, r<reg2e>, <bbb>"
+{
+  int result;
+  sim_fpu wop1;
+  sim_fpu wop2;
+  
+  sim_fpu_232to (&wop1, GR[reg1e+1], GR[reg1e]);
+  sim_fpu_232to (&wop2, GR[reg2e+1], GR[reg2e]);
+  TRACE_FP_INPUT_FPU2 (&wop1, &wop2);
+
+  result = v850_float_compare(sd, FFFF, wop1, wop2, 1);
+
+  if (result)  
+    SET_FPCC(bbb);
+  else
+    CLEAR_FPCC(bbb);
+
+  TRACE_FP_RESULT_BOOL (result);
+}
+
+// CMPF.S
+rrrrr,111111,RRRRR + 0,FFFF,1000010,bbb,0:F_I:::cmpf_s
+*v850e2v3
+"cmpf.s %s<FFFF>, r<reg1>, r<reg2>":(bbb == 0)
+"cmpf.s %s<FFFF>, r<reg1>, r<reg2>, <bbb>"
+{
+  int result; 
+  sim_fpu wop1;
+  sim_fpu wop2;
+
+  sim_fpu_32to( &wop1, GR[reg1] );
+  sim_fpu_32to( &wop2, GR[reg2] );
+  TRACE_FP_INPUT_FPU2 (&wop1, &wop2);
+
+  result = v850_float_compare(sd, FFFF, wop1, wop2, 0);
+
+  if (result)  
+    SET_FPCC(bbb);
+  else
+    CLEAR_FPCC(bbb);
+
+  TRACE_FP_RESULT_BOOL (result);
+}
+
+// CVTF.DL
+rrrr,011111100100 + wwww,010001010100:F_I:::cvtf_dl
+*v850e2v3
+"cvtf.dl r<reg2e>, r<reg3e>"
+{
+  unsigned64 ans;
+  sim_fpu wop;
+  sim_fpu_status status;
+
+  sim_fpu_232to (&wop, GR[reg2e+1], GR[reg2e]);
+  TRACE_FP_INPUT_FPU1 (&wop);
+
+  status = sim_fpu_round_64 (&wop, FPSR_GET_ROUND(), sim_fpu_denorm_zero);
+  status |= sim_fpu_to64i (&ans, &wop, FPSR_GET_ROUND());
+
+  check_cvt_fi(sd, status, 1);
+
+  GR[reg3e] = ans;
+  GR[reg3e+1] = ans>>32L;
+  TRACE_FP_RESULT_WORD2 (GR[reg3e], GR[reg3e+1]);
+}
+
+// CVTF.DS
+rrrr,011111100011 + wwwww,10001010010:F_I:::cvtf_ds
+*v850e2v3
+"cvtf.ds r<reg2e>, r<reg3>"
+{
+  sim_fpu wop;
+  sim_fpu_status status;
+
+  sim_fpu_232to (&wop, GR[reg2e+1], GR[reg2e]);
+  TRACE_FP_INPUT_FPU1 (&wop);
+
+  status = sim_fpu_round_32 (&wop, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+
+  check_cvt_fi(sd, status, 0);
+
+  sim_fpu_to32 (&GR[reg3], &wop);
+  TRACE_FP_RESULT_FPU1 (&wop);
+}
+
+// CVTF.DW
+rrrr,011111100100 + wwwww,10001010000:F_I:::cvtf_dw
+*v850e2v3
+"cvtf.dw r<reg2e>, r<reg3>"
+{
+  uint32 ans;
+  sim_fpu wop;
+  sim_fpu_status status;
+
+  sim_fpu_232to (&wop, GR[reg2e+1], GR[reg2e]);
+  TRACE_FP_INPUT_FPU1 (&wop);
+
+  status = sim_fpu_round_32 (&wop, FPSR_GET_ROUND(), sim_fpu_denorm_zero);
+  status |= sim_fpu_to32i (&ans, &wop, FPSR_GET_ROUND());
+
+  check_cvt_fi(sd, status, 1);
+
+  GR[reg3] = ans;
+  TRACE_FP_RESULT_WORD1 (ans);
+}
+
+// CVTF.LD
+rrrr,011111100001 + wwww,010001010010:F_I:::cvtf_ld
+*v850e2v3
+"cvtf.ld r<reg2e>, r<reg3e>"
+{
+  signed64 op;
+  sim_fpu wop;
+  sim_fpu_status status;
+
+  op = ((signed64)GR[reg2e+1] << 32L) | GR[reg2e];
+  TRACE_FP_INPUT_WORD2 (GR[reg2e], GR[reg2e+1]);
+
+  sim_fpu_i64to (&wop, op, FPSR_GET_ROUND());
+  status = sim_fpu_round_64 (&wop, FPSR_GET_ROUND(), sim_fpu_denorm_zero);
+
+  check_cvt_if(sd, status, 1);
+
+  sim_fpu_to232 (&GR[reg3e+1], &GR[reg3e], &wop);
+  TRACE_FP_RESULT_FPU1 (&wop);
+}
+
+// CVTF.LS
+rrrr,011111100001 + wwwww,10001000010:F_I:::cvtf_ls
+*v850e2v3
+"cvtf.ls r<reg2e>, r<reg3>"
+{
+  signed64 op;
+  sim_fpu wop;
+  sim_fpu_status status;
+
+  op = ((signed64)GR[reg2e+1] << 32L) | GR[reg2e];
+  TRACE_FP_INPUT_WORD2 (GR[reg2e], GR[reg2e+1]);
+
+  sim_fpu_i64to (&wop, op, FPSR_GET_ROUND());
+  status = sim_fpu_round_32 (&wop, FPSR_GET_ROUND(), sim_fpu_denorm_zero);
+
+  check_cvt_if(sd, status, 0);
+
+  sim_fpu_to32 (&GR[reg3], &wop);
+  TRACE_FP_RESULT_FPU1 (&wop);
+}
+
+// CVTF.SD
+rrrrr,11111100010 + wwww,010001010010:F_I:::cvtf_sd
+*v850e2v3
+"cvtf.sd r<reg2>, r<reg3e>"
+{
+  sim_fpu wop;
+  sim_fpu_status status;
+
+  sim_fpu_32to (&wop, GR[reg2]);
+  TRACE_FP_INPUT_FPU1 (&wop);
+  status = sim_fpu_round_64 (&wop, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+
+  check_cvt_ff(sd, status, 1);
+
+  sim_fpu_to232 (&GR[reg3e+1], &GR[reg3e], &wop);
+  TRACE_FP_RESULT_FPU1 (&wop);
+}
+
+// CVTF.SL
+rrrrr,11111100100 + wwww,010001000100:F_I:::cvtf_sl
+*v850e2v3
+"cvtf.sl r<reg2>, r<reg3e>"
+{
+  signed64 ans;
+  sim_fpu wop;
+  sim_fpu_status status;
+
+  sim_fpu_32to (&wop, GR[reg2]);
+  TRACE_FP_INPUT_FPU1 (&wop);
+
+  status = sim_fpu_round_64 (&wop, FPSR_GET_ROUND(), sim_fpu_denorm_zero);
+  status |= sim_fpu_to64i (&ans, &wop, FPSR_GET_ROUND());
+
+  check_cvt_fi(sd, status, 0);
+
+  GR[reg3e] = ans;
+  GR[reg3e+1] = ans >> 32L;
+  TRACE_FP_RESULT_WORD2 (GR[reg3e], GR[reg3e+1]);
+}
+
+// CVTF.SW
+rrrrr,11111100100 + wwwww,10001000000:F_I:::cvtf_sw
+*v850e2v3
+"cvtf.sw r<reg2>, r<reg3>"
+{
+  uint32 ans;
+  sim_fpu wop;
+  sim_fpu_status status;
+
+  sim_fpu_32to (&wop, GR[reg2]);
+  TRACE_FP_INPUT_FPU1 (&wop);
+
+  status = sim_fpu_round_32 (&wop, FPSR_GET_ROUND(), sim_fpu_denorm_zero);
+  status |= sim_fpu_to32i (&ans, &wop, sim_fpu_round_zero);
+
+  check_cvt_fi(sd, status, 0);
+
+  GR[reg3] = ans;
+  TRACE_FP_RESULT_WORD1 (ans);
+}
+
+// CVTF.WD
+rrrrr,11111100000 + wwww,010001010010:F_I:::cvtf_wd
+*v850e2v3
+"cvtf.wd r<reg2>, r<reg3e>"
+{
+  sim_fpu wop;
+  sim_fpu_status status;
+
+  TRACE_FP_INPUT_WORD1 (GR[reg2]);
+  sim_fpu_i32to (&wop, GR[reg2], FPSR_GET_ROUND());
+  status = sim_fpu_round_64 (&wop, FPSR_GET_ROUND(), sim_fpu_denorm_zero);
+
+  check_cvt_if(sd, status, 1);
+
+  sim_fpu_to232 (&GR[reg3e+1], &GR[reg3e], &wop);
+  TRACE_FP_RESULT_FPU1 (&wop);
+}
+
+// CVTF.WS
+rrrrr,11111100000 + wwwww,10001000010:F_I:::cvtf_ws
+*v850e2v3
+"cvtf.ws r<reg2>, r<reg3>"
+{
+  sim_fpu wop;
+  sim_fpu_status status;
+
+  TRACE_FP_INPUT_WORD1 (GR[reg2]);
+  sim_fpu_i32to (&wop, GR[reg2], FPSR_GET_ROUND());
+  status = sim_fpu_round_32 (&wop, FPSR_GET_ROUND(), sim_fpu_denorm_zero);
+
+  check_cvt_if(sd, status, 0);
+
+  sim_fpu_to32 (&GR[reg3], &wop);
+  TRACE_FP_RESULT_FPU1 (&wop);
+}
+
+// DIVF.D
+rrrr,0111111,RRRR,0 + wwww,010001111110:F_I:::divf_d
+*v850e2v3
+"divf.d r<reg1e>, r<reg2e>, r<reg3e>"
+{
+  sim_fpu ans, wop1, wop2;
+  sim_fpu_status status;
+
+  sim_fpu_232to (&wop1, GR[reg1e+1], GR[reg1e]);
+  sim_fpu_232to (&wop2, GR[reg2e+1], GR[reg2e]);
+  TRACE_FP_INPUT_FPU2 (&wop1, &wop2);
+
+  status = sim_fpu_div (&ans, &wop2, &wop1);
+  status |= sim_fpu_round_64 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+
+  update_fpsr (sd, status, FPSR_XEV | FPSR_XEZ | FPSR_XEI | FPSR_XEO | FPSR_XEU, 1);
+
+  sim_fpu_to232 (&GR[reg3e+1], &GR[reg3e], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// DIVF.S
+rrrrr,111111,RRRRR + wwwww,10001101110:F_I:::divf_s
+*v850e2v3
+"divf.s r<reg1>, r<reg2>, r<reg3>"
+{
+  sim_fpu ans, wop1, wop2;
+  sim_fpu_status status;
+
+  sim_fpu_32to (&wop1, GR[reg1]);
+  sim_fpu_32to (&wop2, GR[reg2]);
+  TRACE_FP_INPUT_FPU2 (&wop1, &wop2);
+
+  status = sim_fpu_div (&ans, &wop2, &wop1);
+  status |= sim_fpu_round_32 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+
+  update_fpsr (sd, status, FPSR_XEV | FPSR_XEZ | FPSR_XEI | FPSR_XEO | FPSR_XEU, 0);
+
+  sim_fpu_to32 (&GR[reg3], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// MADDF.S
+rrrrr,111111,RRRRR + wwwww,101,W,00,WWWW,0:F_I:::maddf_s
+*v850e2v3
+"maddf.s r<reg1>, r<reg2>, r<reg3>, r<reg4>"
+{
+  sim_fpu ans, wop1, wop2, wop3;
+  sim_fpu_status status;
+
+  sim_fpu_32to (&wop1, GR[reg1]);
+  sim_fpu_32to (&wop2, GR[reg2]);
+  sim_fpu_32to (&wop3, GR[reg3]);
+  TRACE_FP_INPUT_FPU3 (&wop1, &wop2, &wop3);
+
+  status = sim_fpu_mul (&ans, &wop1, &wop2);
+  status |= sim_fpu_round_64 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+  wop1 = ans;
+  status |= sim_fpu_add (&ans, &wop1, &wop3);
+  status |= sim_fpu_round_64 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+
+  update_fpsr (sd, status, FPSR_XEV | FPSR_XEI | FPSR_XEO | FPSR_XEU, 0);
+
+  sim_fpu_to32 (&GR[reg4], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// MAXF.D
+rrrr,0111111,RRRR,0 + wwww,010001111000:F_I:::maxf_d
+*v850e2v3
+"maxf.d r<reg1e>, r<reg2e>, r<reg3e>"
+{
+  sim_fpu ans, wop1, wop2;
+
+  sim_fpu_232to (&wop1, GR[reg1e+1], GR[reg1e]);
+  sim_fpu_232to (&wop2, GR[reg2e+1], GR[reg2e]);
+  TRACE_FP_INPUT_FPU2 (&wop1, &wop2);
+
+  if (sim_fpu_is_nan(&wop1) || sim_fpu_is_nan(&wop2))
+    {
+      if (FPSR & FPSR_XEV)
+	{
+	  SignalExceptionFPE(sd, 1);
+	}
+      else
+	{
+	  ans = sim_fpu_qnan;
+	}
+    }
+  else if (FPSR & FPSR_FS
+	   && ((sim_fpu_is_zero (&wop1) || sim_fpu_is_denorm (&wop1))
+	       && (sim_fpu_is_zero (&wop2) || sim_fpu_is_denorm (&wop2)))) 
+    {
+      ans = sim_fpu_zero;
+    }
+  else
+    {
+      sim_fpu_max (&ans, &wop1, &wop2);
+    }
+  
+  sim_fpu_to232 (&GR[reg3e+1], &GR[reg3e], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// MAXF.S
+rrrrr,111111,RRRRR + wwwww,10001101000:F_I:::maxf_s
+*v850e2v3
+"maxf.s r<reg1>, r<reg2>, r<reg3>"
+{
+  sim_fpu ans, wop1, wop2;
+
+  sim_fpu_32to (&wop1, GR[reg1]);
+  sim_fpu_32to (&wop2, GR[reg2]);
+  TRACE_FP_INPUT_FPU2 (&wop1, &wop2);
+
+  if (sim_fpu_is_nan(&wop1) || sim_fpu_is_nan(&wop2))
+    {
+      if (FPSR & FPSR_XEV)
+	{
+	  SignalExceptionFPE(sd, 0);
+	}
+      else
+	{
+	  ans = sim_fpu_qnan;
+	}
+    }
+  else if ((FPSR & FPSR_FS)
+	   && ((sim_fpu_is_zero (&wop1) || sim_fpu_is_denorm (&wop1))
+	       && (sim_fpu_is_zero (&wop2)|| sim_fpu_is_denorm (&wop2))))
+    {
+      ans = sim_fpu_zero;
+    }
+  else
+    {
+      sim_fpu_max (&ans, &wop1, &wop2);
+    }
+  
+  sim_fpu_to32 (&GR[reg3], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// MINF.D
+rrrr,0111111,RRRR,0 + wwww,010001111010:F_I:::minf_d
+*v850e2v3
+"minf.d r<reg1e>, r<reg2e>, r<reg3e>"
+{
+  sim_fpu ans, wop1, wop2;
+
+  sim_fpu_232to (&wop1, GR[reg1e+1], GR[reg1e]);
+  sim_fpu_232to (&wop2, GR[reg2e+1], GR[reg2e]);
+  TRACE_FP_INPUT_FPU2 (&wop1, &wop2);
+
+  if (sim_fpu_is_nan(&wop1) || sim_fpu_is_nan(&wop2))
+    {
+      if (FPSR & FPSR_XEV)
+	{
+	  SignalExceptionFPE(sd, 1);
+	}
+      else
+	{
+	  ans = sim_fpu_qnan;
+	}
+    }
+  else if (FPSR & FPSR_FS
+	   && ((sim_fpu_is_zero (&wop1) || sim_fpu_is_denorm (&wop1))
+	       && (sim_fpu_is_zero (&wop2) || sim_fpu_is_denorm (&wop2)))) 
+    {
+      ans = sim_fpu_zero;
+    }
+  else
+    {
+      sim_fpu_min (&ans, &wop1, &wop2);
+    }
+  
+  sim_fpu_to232 (&GR[reg3e+1], &GR[reg3e], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// MINF.S
+rrrrr,111111,RRRRR + wwwww,10001101010:F_I:::minf_s
+*v850e2v3
+"minf.s r<reg1>, r<reg2>, r<reg3>"
+{
+  sim_fpu ans, wop1, wop2;
+
+  sim_fpu_32to (&wop1, GR[reg1]);
+  sim_fpu_32to (&wop2, GR[reg2]);
+  TRACE_FP_INPUT_FPU2 (&wop1, &wop2);
+
+  if (sim_fpu_is_nan(&wop1) || sim_fpu_is_nan(&wop2))
+    {
+      if (FPSR & FPSR_XEV)
+	{
+	  SignalExceptionFPE(sd, 0);
+	}
+      else
+	{
+	  ans = sim_fpu_qnan;
+	}
+    }
+  else if (FPSR & FPSR_FS
+	   && ((sim_fpu_is_zero (&wop1) || sim_fpu_is_denorm (&wop1))
+	       && (sim_fpu_is_zero (&wop2) || sim_fpu_is_denorm (&wop2))))
+    {
+      ans = sim_fpu_zero;
+    }
+  else
+    {
+      sim_fpu_min (&ans, &wop1, &wop2);
+    }
+  
+  sim_fpu_to32 (&GR[reg3], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// MSUBF.S
+rrrrr,111111,RRRRR + wwwww,101,W,01,WWWW,0:F_I:::msubf_s
+*v850e2v3
+"msubf.s r<reg1>, r<reg2>, r<reg3>, r<reg4>"
+{
+  sim_fpu ans, wop1, wop2, wop3;
+  sim_fpu_status status;
+
+  sim_fpu_32to (&wop1, GR[reg1]);
+  sim_fpu_32to (&wop2, GR[reg2]);
+  sim_fpu_32to (&wop3, GR[reg3]);
+  TRACE_FP_INPUT_FPU3 (&wop1, &wop2, &wop3);
+
+  status = sim_fpu_mul (&ans, &wop1, &wop2);
+  status |= sim_fpu_round_64 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+  wop1 = ans;
+  status |= sim_fpu_sub (&ans, &wop1, &wop3);
+  status |= sim_fpu_round_64 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+
+  update_fpsr (sd, status, FPSR_XEV | FPSR_XEI | FPSR_XEO | FPSR_XEU, 0);
+
+  sim_fpu_to32 (&GR[reg4], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// MULF.D
+rrrr,0111111,RRRR,0 + wwww,010001110100:F_I:::mulf_d
+*v850e2v3
+"mulf.d r<reg1e>, r<reg2e>, r<reg3e>"
+{
+  sim_fpu ans, wop1, wop2;
+  sim_fpu_status status;
+
+  sim_fpu_232to (&wop1, GR[reg1e+1], GR[reg1e]);
+  sim_fpu_232to (&wop2, GR[reg2e+1], GR[reg2e]);
+  TRACE_FP_INPUT_FPU2 (&wop1, &wop2);
+
+  status = sim_fpu_mul (&ans, &wop1, &wop2);
+  status |= sim_fpu_round_64 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+
+  update_fpsr (sd, status, FPSR_XEV | FPSR_XEI | FPSR_XEO | FPSR_XEU, 1);
+
+  sim_fpu_to232 (&GR[reg3e+1], &GR[reg3e], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// MULF.S
+rrrrr,111111,RRRRR + wwwww,10001100100:F_I:::mulf_s
+*v850e2v3
+"mulf.s r<reg1>, r<reg2>, r<reg3>"
+{
+  sim_fpu ans, wop1, wop2;
+  sim_fpu_status status;
+
+  sim_fpu_32to (&wop1, GR[reg1]);
+  sim_fpu_32to (&wop2, GR[reg2]);
+  TRACE_FP_INPUT_FPU2 (&wop1, &wop2);
+
+  status = sim_fpu_mul (&ans, &wop1, &wop2);
+  status |= sim_fpu_round_32 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+
+  update_fpsr (sd, status, FPSR_XEV | FPSR_XEI | FPSR_XEO | FPSR_XEU, 0);
+
+  sim_fpu_to32 (&GR[reg3], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// NEGF.D
+rrrr,011111100001 + wwww,010001011000:F_I:::negf_d
+*v850e2v3
+"negf.d r<reg2e>, r<reg3e>"
+{
+  sim_fpu ans, wop;
+  sim_fpu_status status;
+
+  sim_fpu_232to (&wop, GR[reg2e+1], GR[reg2e]);
+  TRACE_FP_INPUT_FPU1 (&wop);
+
+  status = sim_fpu_neg (&ans, &wop);
+
+  check_invalid_snan(sd, status, 1);
+
+  sim_fpu_to232 (&GR[reg3e+1], &GR[reg3e], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// NEGF.S
+rrrrr,11111100001 + wwwww,10001001000:F_I:::negf_s
+*v850e2v3
+"negf.s r<reg2>, r<reg3>"
+{
+  sim_fpu ans, wop;
+  sim_fpu_status status;
+
+  sim_fpu_32to (&wop, GR[reg2]);
+  TRACE_FP_INPUT_FPU1 (&wop);
+
+  status = sim_fpu_neg (&ans, &wop);
+
+  check_invalid_snan(sd, status, 0);
+
+  sim_fpu_to32 (&GR[reg3], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// NMADDF.S
+rrrrr,111111,RRRRR + wwwww,101,W,10,WWWW,0:F_I:::nmaddf_s
+*v850e2v3
+"nmaddf.s r<reg1>, r<reg2>, r<reg3>, r<reg4>"
+{
+  sim_fpu ans, wop1, wop2, wop3;
+  sim_fpu_status status;
+
+  sim_fpu_32to (&wop1, GR[reg1]);
+  sim_fpu_32to (&wop2, GR[reg2]);
+  sim_fpu_32to (&wop3, GR[reg3]);
+  TRACE_FP_INPUT_FPU3 (&wop1, &wop2, &wop3);
+
+  status = sim_fpu_mul (&ans, &wop1, &wop2);
+  status |= sim_fpu_round_64 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+  wop1 = ans;
+  status |= sim_fpu_add (&ans, &wop1, &wop3);
+  status |= sim_fpu_round_64 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+  wop1 = ans;
+  status |= sim_fpu_neg (&ans, &wop1);
+
+  update_fpsr (sd, status, FPSR_XEV | FPSR_XEI | FPSR_XEO | FPSR_XEU, 0);
+
+  sim_fpu_to32 (&GR[reg4], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// NMSUBF.S
+rrrrr,111111,RRRRR + wwwww,101,W,11,WWWW,0:F_I:::nmsubf_s
+*v850e2v3
+"nmsubf.s r<reg1>, r<reg2>, r<reg3>, r<reg4>"
+{
+  sim_fpu ans, wop1, wop2, wop3;
+  sim_fpu_status status;
+
+  sim_fpu_32to (&wop1, GR[reg1]);
+  sim_fpu_32to (&wop2, GR[reg2]);
+  sim_fpu_32to (&wop3, GR[reg3]);
+  TRACE_FP_INPUT_FPU3 (&wop1, &wop2, &wop3);
+
+  status = sim_fpu_mul (&ans, &wop1, &wop2);
+  status |= sim_fpu_round_64 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+  wop1 = ans;
+  status |= sim_fpu_sub (&ans, &wop1, &wop3);
+  status |= sim_fpu_round_64 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+  wop1 = ans;
+  status |= sim_fpu_neg (&ans, &wop1);
+
+  update_fpsr (sd, status, FPSR_XEV | FPSR_XEI | FPSR_XEO | FPSR_XEU, 0);
+
+  sim_fpu_to32 (&GR[reg4], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// RECIPF.D
+rrrr,011111100001 + wwww,010001011110:F_I:::recipf.d
+*v850e2v3
+"recipf.d r<reg2e>, r<reg3e>"
+{
+  sim_fpu ans, wop;
+  sim_fpu_status status;
+
+  sim_fpu_232to (&wop, GR[reg2e+1], GR[reg2e]);
+  TRACE_FP_INPUT_FPU1 (&wop);
+
+  status = sim_fpu_div (&ans, &sim_fpu_one, &wop);
+  status |= sim_fpu_round_64 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+
+  update_fpsr (sd, status, FPSR_XEV | FPSR_XEZ | FPSR_XEI | FPSR_XEO | FPSR_XEU, 1);
+
+  sim_fpu_to232 (&GR[reg3e+1], &GR[reg3e], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// RECIPF.S
+rrrrr,11111100001 + wwwww,10001001110:F_I:::recipf.s
+*v850e2v3
+"recipf.s r<reg2>, r<reg3>"
+{
+  sim_fpu ans, wop;
+  sim_fpu_status status;
+
+  sim_fpu_32to (&wop, GR[reg2]);
+  TRACE_FP_INPUT_FPU1 (&wop);
+
+  status = sim_fpu_div (&ans, &sim_fpu_one, &wop);
+  status |= sim_fpu_round_64 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+
+  update_fpsr (sd, status, FPSR_XEV | FPSR_XEZ | FPSR_XEI | FPSR_XEO | FPSR_XEU, 0);
+
+  sim_fpu_to32 (&GR[reg3], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// RSQRTF.D
+rrrr,011111100010 + wwww,010001011110:F_I:::rsqrtf.d
+*v850e2v3
+"rsqrtf.d r<reg2e>, r<reg3e>"
+{
+  sim_fpu ans, wop;
+  sim_fpu_status status;
+
+  sim_fpu_232to (&wop, GR[reg2e+1], GR[reg2e]);
+  TRACE_FP_INPUT_FPU1 (&wop);
+
+  status = sim_fpu_sqrt (&ans, &wop);
+  status |= sim_fpu_round_64 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+  wop = ans;
+  status = sim_fpu_div (&ans, &sim_fpu_one, &wop);
+  status |= sim_fpu_round_64 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+
+  update_fpsr (sd, status, FPSR_XEV | FPSR_XEZ | FPSR_XEI | FPSR_XEO | FPSR_XEU, 1);
+
+  sim_fpu_to232 (&GR[reg3e+1], &GR[reg3e], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// RSQRTF.S
+rrrrr,11111100010 + wwwww,10001001110:F_I:::rsqrtf.s
+*v850e2v3
+"rsqrtf.s r<reg2>, r<reg3>"
+{
+  sim_fpu ans, wop;
+  sim_fpu_status status;
+
+  sim_fpu_32to (&wop, GR[reg2]);
+  TRACE_FP_INPUT_FPU1 (&wop);
+
+  status = sim_fpu_sqrt (&ans, &wop);
+  status |= sim_fpu_round_32 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+  wop = ans;
+  status = sim_fpu_div (&ans, &sim_fpu_one, &wop);
+  status |= sim_fpu_round_32 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+
+  update_fpsr (sd, status, FPSR_XEV | FPSR_XEZ | FPSR_XEI | FPSR_XEO | FPSR_XEU, 0);
+
+  sim_fpu_to32 (&GR[reg3], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// SQRTF.D
+rrrr,011111100000 + wwww,010001011110:F_I:::sqrtf.d
+*v850e2v3
+"sqrtf.d r<reg2e>, r<reg3e>"
+{
+  sim_fpu ans, wop;
+  sim_fpu_status status;
+
+  sim_fpu_232to (&wop, GR[reg2e+1], GR[reg2e]);
+  TRACE_FP_INPUT_FPU1 (&wop);
+
+  status = sim_fpu_sqrt (&ans, &wop);
+  status |= sim_fpu_round_64 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+
+  update_fpsr (sd, status, FPSR_XEV | FPSR_XEI, 1);
+
+  sim_fpu_to232 (&GR[reg3e+1], &GR[reg3e], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// SQRTF.S
+rrrrr,11111100000 + wwwww,10001001110:F_I:::sqrtf.s
+*v850e2v3
+"sqrtf.s r<reg2>, r<reg3>"
+{
+  sim_fpu ans, wop;
+  sim_fpu_status status;
+
+  sim_fpu_32to (&wop, GR[reg2]);
+  TRACE_FP_INPUT_FPU1 (&wop);
+
+  status = sim_fpu_sqrt (&ans, &wop);
+  status |= sim_fpu_round_32 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+
+  update_fpsr (sd, status, FPSR_XEV | FPSR_XEI, 0);
+
+  sim_fpu_to32 (&GR[reg3], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// SUBF.D
+rrrr,0111111,RRRR,0 + wwww,010001110010:F_I:::subf.d
+*v850e2v3
+"subf.d r<reg1e>, r<reg2e>, r<reg3e>"
+{
+  sim_fpu ans, wop1, wop2;
+  sim_fpu_status status;
+
+  sim_fpu_232to (&wop1, GR[reg1e+1], GR[reg1e]);
+  sim_fpu_232to (&wop2, GR[reg2e+1], GR[reg2e]);
+  TRACE_FP_INPUT_FPU2 (&wop1, &wop2);
+
+  status = sim_fpu_sub (&ans, &wop2, &wop1);
+  status |= sim_fpu_round_64 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+
+  update_fpsr (sd, status, FPSR_XEV | FPSR_XEI | FPSR_XEO | FPSR_XEU, 1);
+
+  sim_fpu_to232 (&GR[reg3e+1], &GR[reg3e], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// SUBF.S
+rrrrr,111111,RRRRR + wwwww,10001100010:F_I:::subf.s
+*v850e2v3
+"subf.s r<reg1>, r<reg2>, r<reg3>"
+{
+  sim_fpu ans, wop1, wop2;
+  sim_fpu_status status;
+
+  sim_fpu_32to (&wop1, GR[reg1]);
+  sim_fpu_32to (&wop2, GR[reg2]);
+  TRACE_FP_INPUT_FPU2 (&wop1, &wop2);
+
+  status = sim_fpu_sub (&ans, &wop2, &wop1);
+  status |= sim_fpu_round_32 (&ans, FPSR_GET_ROUND(), sim_fpu_denorm_underflow_inexact);
+
+  update_fpsr (sd, status, FPSR_XEV | FPSR_XEI | FPSR_XEO | FPSR_XEU, 0);
+
+  sim_fpu_to32 (&GR[reg3], &ans);
+  TRACE_FP_RESULT_FPU1 (&ans);
+}
+
+// TRFSR
+0000011111100000 + 000001000000,bbb,0:F_I:::trfsr
+*v850e2v3
+"trfsr":(bbb == 0)
+"trfsr <bbb>"
+{
+  TRACE_ALU_INPUT1 (GET_FPCC());
+
+  if (TEST_FPCC (bbb))
+    PSW |= PSW_Z;
+  else 
+    PSW &= ~PSW_Z;  
+
+  TRACE_ALU_RESULT1 (PSW);
+}
+
+// TRNCF.DL
+rrrr,011111100001 + wwww,010001010100:F_I:::trncf_dl
+*v850e2v3
+"trncf.dl r<reg2e>, r<reg3e>"
+{
+  signed64 ans;
+  sim_fpu wop;
+  sim_fpu_status status;
+
+  sim_fpu_232to (&wop, GR[reg2e+1], GR[reg2e]);
+  TRACE_FP_INPUT_FPU1 (&wop);
+
+  status = sim_fpu_round_64 (&wop, sim_fpu_round_zero, sim_fpu_denorm_zero);
+  status |= sim_fpu_to64i (&ans, &wop, sim_fpu_round_zero);
+
+  check_cvt_fi(sd, status, 1);
+
+  GR[reg3e] = ans;
+  GR[reg3e+1] = ans>>32L;
+  TRACE_FP_RESULT_WORD2 (GR[reg3e], GR[reg3e+1]);
+}
+
+// TRNCF.DW
+rrrr,011111100001 + wwwww,10001010000:F_I:::trncf_dw
+*v850e2v3
+"trncf.dw r<reg2e>, r<reg3>"
+{
+  uint32 ans;
+  sim_fpu wop;
+  sim_fpu_status status;
+
+  sim_fpu_232to (&wop, GR[reg2e+1], GR[reg2e]);
+  TRACE_FP_INPUT_FPU1 (&wop);
+
+  status = sim_fpu_round_32 (&wop, sim_fpu_round_zero, sim_fpu_denorm_zero);
+  status |= sim_fpu_to32i (&ans, &wop, sim_fpu_round_zero);
+
+  check_cvt_fi(sd, status, 1);
+
+  GR[reg3] = ans;
+  TRACE_FP_RESULT_WORD1 (ans);
+}
+
+// TRNCF.SL
+rrrrr,11111100001 + wwww,010001000100:F_I:::trncf_sl
+*v850e2v3
+"trncf.sl r<reg2>, r<reg3e>"
+{
+  signed64 ans;
+  sim_fpu wop;
+  sim_fpu_status status;
+
+  sim_fpu_32to (&wop, GR[reg2]);
+  TRACE_FP_INPUT_FPU1 (&wop);
+
+  status = sim_fpu_round_64 (&wop, sim_fpu_round_zero, sim_fpu_denorm_zero);
+  status |= sim_fpu_to64i (&ans, &wop, sim_fpu_round_zero);
+
+  GR[reg3e] = ans;
+  GR[reg3e+1] = ans >> 32L;
+  TRACE_FP_RESULT_WORD2 (GR[reg3e], GR[reg3e+1]);
+}
+
+// TRNCF.SW
+rrrrr,11111100001 + wwwww,10001000000:F_I:::trncf_sw
+*v850e2v3
+"trncf.sw r<reg2>, r<reg3>"
+{
+  uint32 ans;
+  sim_fpu wop;
+  sim_fpu_status status;
+
+  sim_fpu_32to (&wop, GR[reg2]);
+  TRACE_FP_INPUT_FPU1 (&wop);
+
+  status = sim_fpu_round_32 (&wop, sim_fpu_round_zero, sim_fpu_denorm_zero);
+  status |= sim_fpu_to32i (&ans, &wop, sim_fpu_round_zero);
+
+  check_cvt_fi(sd, status, 0);
+
+  GR[reg3] = ans;
+  TRACE_FP_RESULT_WORD1 (ans);
+}
+

-- 
GNU GDB Debian packaging repository



More information about the Crosstoolchain-logs mailing list